ZGlmZiAtLWdpdCBhLy5tYWlsbWFwIGIvLm1haWxtYXAKaW5kZXggZDM1N2UxYi4uMGQ5NzFjZiAxMDA2NDQKLS0tIGEvLm1haWxtYXAKKysrIGIvLm1haWxtYXAKQEAgLTczLDYgKzczLDcgQEAKIEp1aGEgWXJqb2xhIDxqdWhhLnlyam9sYUBzb2xpZGJvb3QuY29tPgogS2F5IFNpZXZlcnMgPGtheS5zaWV2ZXJzQHZyZnkub3JnPgogS2VubmV0aCBXIENoZW4gPGtlbm5ldGgudy5jaGVuQGludGVsLmNvbT4KK0tvbnN0YW50aW4gS2hsZWJuaWtvdiA8a29jdDlpQGdtYWlsLmNvbT4gPGsua2hsZWJuaWtvdkBzYW1zdW5nLmNvbT4KIEtvdXNoaWsgPHJhZ2hhdmVuZHJhLmtvdXNoaWtAbmV0ZXJpb24uY29tPgogS3VuaW5vcmkgTW9yaW1vdG8gPGt1bmlub3JpLm1vcmltb3RvLmd4QHJlbmVzYXMuY29tPgogTGVvbmlkIEkgQW5hbmlldiA8bGVvbmlkLmkuYW5hbmlldkBpbnRlbC5jb20+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWAppbmRleCAxNzUwZmNlLi5jZDA3N2NhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKQEAgLTI5LDggKzI5LDYgQEAKIAktIEhvdyB0byBkbyBETUEgd2l0aCBJU0EgKGFuZCBMUEMpIGRldmljZXMuCiBETUEtYXR0cmlidXRlcy50eHQKIAktIGxpc3Rpbmcgb2YgdGhlIHZhcmlvdXMgcG9zc2libGUgYXR0cmlidXRlcyBhIERNQSByZWdpb24gY2FuIGhhdmUKLWRtYXRlc3QudHh0Ci0JLSBob3cgdG8gY29tcGlsZSwgY29uZmlndXJlIGFuZCB1c2UgdGhlIGRtYXRlc3Qgc3lzdGVtLgogRG9jQm9vay8KIAktIGRpcmVjdG9yeSB3aXRoIERvY0Jvb2sgdGVtcGxhdGVzIGV0Yy4gZm9yIGtlcm5lbCBkb2N1bWVudGF0aW9uLgogRURJRC8KQEAgLTE2Myw4ICsxNjEsNiBAQAogCS1pbmZvIG9uIHRoZSBEaWdpdGFsIFNpZ25hdHVyZSBWZXJpZmljYXRpb24gQVBJCiBkbWEtYnVmLXNoYXJpbmcudHh0CiAJLSB0aGUgRE1BIEJ1ZmZlciBTaGFyaW5nIEFQSSBHdWlkZQotZG1hZW5naW5lLnR4dAotCS10aGUgRE1BIEVuZ2luZSBBUEkgR3VpZGUKIGRvbnRkaWZmCiAJLSBmaWxlIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGZpbGVzIHRoYXQgc2hvdWxkIG5ldmVyIGJlIGRpZmYnZWQuCiBkcml2ZXItbW9kZWwvCkBAIC0yMDksNiArMjA1LDggQEAKIAktIGRpcmVjdG9yeSB3aXRoIGluZm9ybWF0aW9uIG9uIGh1bWFuIGludGVyZmFjZSBkZXZpY2VzCiBoaWdodWlkLnR4dAogCS0gbm90ZXMgb24gdGhlIGNoYW5nZSBmcm9tIDE2IGJpdCB0byAzMiBiaXQgdXNlci9ncm91cCBJRHMuCitoc2kudHh0CisJLSBIU0kgc3Vic3lzdGVtIG92ZXJ2aWV3LgogaHdzcGlubG9jay50eHQKIAktIGhhcmR3YXJlIHNwaW5sb2NrIHByb3ZpZGVzIGhhcmR3YXJlIGFzc2lzdGFuY2UgZm9yIHN5bmNocm9uaXphdGlvbgogdGltZXJzLwpAQCAtMjc3LDYgKzI3NSw4IEBACiAJLSBkb2N1bWVudHMgdGhlIGtlcm5lbCBwcm9iZXMgZGVidWdnaW5nIGZlYXR1cmUuCiBrcmVmLnR4dAogCS0gZG9jcyBvbiBhZGRpbmcgcmVmZXJlbmNlIGNvdW50ZXJzIChrcmVmcykgdG8ga2VybmVsIG9iamVjdHMuCitrc2VsZnRlc3QudHh0CisJLSBzbWFsbCB1bml0dGVzdHMgZm9yIChzb21lKSBpbmRpdmlkdWFsIGNvZGVwYXRocyBpbiB0aGUga2VybmVsLgogbGFwdG9wcy8KIAktIGRpcmVjdG9yeSB3aXRoIGxhcHRvcCByZWxhdGVkIGluZm8gYW5kIGxhcHRvcCBkcml2ZXIgZG9jdW1lbnRhdGlvbi4KIGxkbS50eHQKQEAgLTI4NSwyMiArMjg1LDIyIEBACiAJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIGFib3V0IExFRCBoYW5kbGluZyB1bmRlciBMaW51eC4KIGxvY2FsX29wcy50eHQKIAktIHNlbWFudGljcyBhbmQgYmVoYXZpb3Igb2YgbG9jYWwgYXRvbWljIG9wZXJhdGlvbnMuCi1sb2NrZGVwLWRlc2lnbi50eHQKLQktIGRvY3VtZW50YXRpb24gb24gdGhlIHJ1bnRpbWUgbG9ja2luZyBjb3JyZWN0bmVzcyB2YWxpZGF0b3IuCiBsb2NraW5nLwogCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCBrZXJuZWwgbG9ja2luZyBwcmltaXRpdmVzCi1sb2Nrc3RhdC50eHQKLQktIGluZm8gb24gY29sbGVjdGluZyBzdGF0aXN0aWNzIG9uIGxvY2tzIChhbmQgY29udGVudGlvbikuCiBsb2NrdXAtd2F0Y2hkb2dzLnR4dAogCS0gaW5mbyBvbiBzb2Z0IGFuZCBoYXJkIGxvY2t1cCBkZXRlY3RvcnMgKGFrYSBubWlfd2F0Y2hkb2cpLgogbG9nby5naWYKIAktIGZ1bGwgY29sb3VyIEdJRiBpbWFnZSBvZiBMaW51eCBsb2dvIChwZW5ndWluIC0gVHV4KS4KIGxvZ28udHh0CiAJLSBpbmZvIG9uIGNyZWF0b3Igb2YgYWJvdmUgbG9nbyAmIHNpdGUgdG8gZ2V0IGFkZGl0aW9uYWwgaW1hZ2VzIGZyb20uCitsem8udHh0CisJLSBrZXJuZWwgTFpPIGRlY29tcHJlc3NvciBpbnB1dCBmb3JtYXRzCiBtNjhrLwogCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCBMaW51eCBvbiBNb3Rvcm9sYSA2OGsgYXJjaGl0ZWN0dXJlLgogbWFnaWMtbnVtYmVyLnR4dAogCS0gbGlzdCBvZiBtYWdpYyBudW1iZXJzIHVzZWQgdG8gbWFyay9wcm90ZWN0IGtlcm5lbCBkYXRhIHN0cnVjdHVyZXMuCittYWlsYm94LnR4dAorCS0gSG93IHRvIHdyaXRlIGRyaXZlcnMgZm9yIHRoZSBjb21tb24gbWFpbGJveCBmcmFtZXdvcmsgKElQQykuCiBtZC50eHQKIAktIGluZm8gb24gYm9vdCBhcmd1bWVudHMgZm9yIHRoZSBtdWx0aXBsZSBkZXZpY2VzIGRyaXZlci4KIG1lZGlhLWZyYW1ld29yay50eHQKQEAgLTMyNyw4ICszMjcsNiBAQAogCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCBtZW1vcnkgdGVjaG5vbG9neSBkZXZpY2VzIChmbGFzaCkKIG1vbm8udHh0CiAJLSBob3cgdG8gZXhlY3V0ZSBNb25vLWJhc2VkIC5ORVQgYmluYXJpZXMgd2l0aCB0aGUgaGVscCBvZiBCSU5GTVRfTUlTQy4KLW11dGV4LWRlc2lnbi50eHQKLQktIGluZm8gb24gdGhlIGdlbmVyaWMgbXV0ZXggc3Vic3lzdGVtLgogbmFtZXNwYWNlcy8KIAktIGRpcmVjdG9yeSB3aXRoIHZhcmlvdXMgaW5mb3JtYXRpb24gYWJvdXQgbmFtZXNwYWNlcwogbmV0bGFiZWwvCkBAIC0zOTUsMTAgKzM5Myw2IEBACiAJLSBhIGRlc2NyaXB0aW9uIG9mIHdoYXQgcm9idXN0IGZ1dGV4ZXMgYXJlLgogcnBtc2cudHh0CiAJLSBpbmZvIG9uIHRoZSBSZW1vdGUgUHJvY2Vzc29yIE1lc3NhZ2luZyAocnBtc2cpIEZyYW1ld29yawotcnQtbXV0ZXgtZGVzaWduLnR4dAotCS0gZGVzY3JpcHRpb24gb2YgdGhlIFJlYWxUaW1lIG11dGV4IGltcGxlbWVudGF0aW9uIGRlc2lnbi4KLXJ0LW11dGV4LnR4dAotCS0gZGVzYy4gb2YgUlQtbXV0ZXggc3Vic3lzdGVtIHdpdGggUEkgKFByaW9yaXR5IEluaGVyaXRhbmNlKSBzdXBwb3J0LgogcnRjLnR4dAogCS0gbm90ZXMgb24gaG93IHRvIHVzZSB0aGUgUmVhbCBUaW1lIENsb2NrIChha2EgQ01PUyBjbG9jaykgZHJpdmVyLgogczM5MC8KQEAgLTQyNSw4ICs0MTksNiBAQAogCS0gaW5mbyBvbiBob3cgdG8gb2J0YWluIGFuZCB1c2UgdGhlIHNwYXJzZSB0b29sIGZvciB0eXBlY2hlY2tpbmcuCiBzcGkvCiAJLSBvdmVydmlldyBvZiBMaW51eCBrZXJuZWwgU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlIChTUEkpIHN1cHBvcnQuCi1zcGlubG9ja3MudHh0Ci0JLSBpbmZvIG9uIHVzaW5nIHNwaW5sb2NrcyB0byBwcm92aWRlIGV4Y2x1c2l2ZSBhY2Nlc3MgaW4ga2VybmVsLgogc3RhYmxlX2FwaV9ub25zZW5zZS50eHQKIAktIGluZm8gb24gd2h5IHRoZSBrZXJuZWwgZG9lcyBub3QgaGF2ZSBhIHN0YWJsZSBpbi1rZXJuZWwgYXBpIG9yIGFiaS4KIHN0YWJsZV9rZXJuZWxfcnVsZXMudHh0CkBAIC00ODMsMTAgKzQ3NSwxMCBAQAogCS0gZGlyZWN0b3J5IHdpdGggaW5mbyBhYm91dCBJbnRlbCBXaXJlbGVzcyBXaW1heCBDb25uZWN0aW9ucwogd29ya3F1ZXVlLnR4dAogCS0gaW5mb3JtYXRpb24gb24gdGhlIENvbmN1cnJlbmN5IE1hbmFnZWQgV29ya3F1ZXVlIGltcGxlbWVudGF0aW9uCi13dy1tdXRleC1kZXNpZ24udHh0Ci0JLSBJbnRybyB0byBNdXRleCB3YWl0L3dvdWxkIGRlYWRsb2NrIGhhbmRsaW5nLnMKIHg4Ni94ODZfNjQvCiAJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIExpbnV4IHN1cHBvcnQgZm9yIEFNRCB4ODYtNjQgKEhhbW1lcikgbWFjaGluZXMuCit4aWxseWJ1cy50eHQKKwktIE92ZXJ2aWV3IGFuZCBiYXNpYyB1aSBvZiB4aWxseWJ1cyBkcml2ZXIKIHh0ZW5zYS8KIAktIGRpcmVjdG9yeSB3aXRoIGRvY3VtZW50cyByZWxhdGluZyB0byBhcmNoL3h0ZW5zYSBwb3J0L2ltcGxlbWVudGF0aW9uCiB4ei50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1jbGFzcy10cG0gYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtY2xhc3MtdHBtCmluZGV4IGE2MGI0NWUuLjlmNzkwZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1jbGFzcy10cG0KKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvc3RhYmxlL3N5c2ZzLWNsYXNzLXRwbQpAQCAtMSw0ICsxLDQgQEAKLVdoYXQ6CQkvc3lzL2NsYXNzL21pc2MvdHBtWC9kZXZpY2UvCitXaGF0OgkJL3N5cy9jbGFzcy90cG0vdHBtWC9kZXZpY2UvCiBEYXRlOgkJQXByaWwgMjAwNQogS2VybmVsVmVyc2lvbjoJMi42LjEyCiBDb250YWN0Ogl0cG1kZC1kZXZlbEBsaXN0cy5zZi5uZXQKQEAgLTYsNyArNiw3IEBACiAJCXRoZSBwcm9wZXJ0aWVzIG9mIHRoYXQgVFBNIGNoaXAKIAogCi1XaGF0OgkJL3N5cy9jbGFzcy9taXNjL3RwbVgvZGV2aWNlL2FjdGl2ZQorV2hhdDoJCS9zeXMvY2xhc3MvdHBtL3RwbVgvZGV2aWNlL2FjdGl2ZQogRGF0ZToJCUFwcmlsIDIwMDYKIEtlcm5lbFZlcnNpb246CTIuNi4xNwogQ29udGFjdDoJdHBtZGQtZGV2ZWxAbGlzdHMuc2YubmV0CkBAIC0xOCw3ICsxOCw3IEBACiAJCXNlY3Rpb24gMTcgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gd2hpY2ggY29tbWFuZHMgYXJlCiAJCWF2YWlsYWJsZS4KIAotV2hhdDoJCS9zeXMvY2xhc3MvbWlzYy90cG1YL2RldmljZS9jYW5jZWwKK1doYXQ6CQkvc3lzL2NsYXNzL3RwbS90cG1YL2RldmljZS9jYW5jZWwKIERhdGU6CQlKdW5lIDIwMDUKIEtlcm5lbFZlcnNpb246CTIuNi4xMwogQ29udGFjdDoJdHBtZGQtZGV2ZWxAbGlzdHMuc2YubmV0CkBAIC0yNiw3ICsyNiw3IEBACiAJCXBlbmRpbmcgVFBNIGNvbW1hbmQuIFdyaXRpbmcgYW55IHZhbHVlIHRvIGNhbmNlbCB3aWxsIGNhbGwgdGhlCiAJCVRQTSB2ZW5kb3Igc3BlY2lmaWMgY2FuY2VsIG9wZXJhdGlvbi4KIAotV2hhdDoJCS9zeXMvY2xhc3MvbWlzYy90cG1YL2RldmljZS9jYXBzCitXaGF0OgkJL3N5cy9jbGFzcy90cG0vdHBtWC9kZXZpY2UvY2FwcwogRGF0ZToJCUFwcmlsIDIwMDUKIEtlcm5lbFZlcnNpb246CTIuNi4xMgogQ29udGFjdDoJdHBtZGQtZGV2ZWxAbGlzdHMuc2YubmV0CkBAIC00Myw3ICs0Myw3IEBACiAJCXRoZSBjaGlwIHN1cHBvcnRzLiBGaXJtd2FyZSB2ZXJzaW9uIGlzIHRoYXQgb2YgdGhlIGNoaXAgYW5kCiAJCWlzIG1hbnVmYWN0dXJlciBzcGVjaWZpYy4KIAotV2hhdDoJCS9zeXMvY2xhc3MvbWlzYy90cG1YL2RldmljZS9kdXJhdGlvbnMKK1doYXQ6CQkvc3lzL2NsYXNzL3RwbS90cG1YL2RldmljZS9kdXJhdGlvbnMKIERhdGU6CQlNYXJjaCAyMDExCiBLZXJuZWxWZXJzaW9uOgkzLjEKIENvbnRhY3Q6CXRwbWRkLWRldmVsQGxpc3RzLnNmLm5ldApAQCAtNjYsNyArNjYsNyBAQAogCQlzY2FsZWQgdG8gYmUgZGlzcGxheWVkIGluIHVzZWNzLiBJbiB0aGlzIGNhc2UgIlthZGp1c3RlZF0iCiAJCXdpbGwgYmUgZGlzcGxheWVkIGluIHBsYWNlIG9mICJbb3JpZ2luYWxdIi4KIAotV2hhdDoJCS9zeXMvY2xhc3MvbWlzYy90cG1YL2RldmljZS9lbmFibGVkCitXaGF0OgkJL3N5cy9jbGFzcy90cG0vdHBtWC9kZXZpY2UvZW5hYmxlZAogRGF0ZToJCUFwcmlsIDIwMDYKIEtlcm5lbFZlcnNpb246CTIuNi4xNwogQ29udGFjdDoJdHBtZGQtZGV2ZWxAbGlzdHMuc2YubmV0CkBAIC03NSw3ICs3NSw3IEBACiAJCW1heSBiZSB2aXNpYmxlIGJ1dCBwcm9kdWNlIGEgJzAnIGFmdGVyIHNvbWUgb3BlcmF0aW9uIHRoYXQKIAkJZGlzYWJsZXMgdGhlIFRQTS4KIAotV2hhdDoJCS9zeXMvY2xhc3MvbWlzYy90cG1YL2RldmljZS9vd25lZAorV2hhdDoJCS9zeXMvY2xhc3MvdHBtL3RwbVgvZGV2aWNlL293bmVkCiBEYXRlOgkJQXByaWwgMjAwNgogS2VybmVsVmVyc2lvbjoJMi42LjE3CiBDb250YWN0Ogl0cG1kZC1kZXZlbEBsaXN0cy5zZi5uZXQKQEAgLTgzLDcgKzgzLDcgQEAKIAkJb3JkaW5hbCBoYXMgYmVlbiBleGVjdXRlZCBzdWNjZXNzZnVsbHkgaW4gdGhlIGNoaXAuIEEgJzAnCiAJCWluZGljYXRlcyB0aGF0IG93bmVyc2hpcCBoYXNuJ3QgYmVlbiB0YWtlbi4KIAotV2hhdDoJCS9zeXMvY2xhc3MvbWlzYy90cG1YL2RldmljZS9wY3JzCitXaGF0OgkJL3N5cy9jbGFzcy90cG0vdHBtWC9kZXZpY2UvcGNycwogRGF0ZToJCUFwcmlsIDIwMDUKIEtlcm5lbFZlcnNpb246CTIuNi4xMgogQ29udGFjdDoJdHBtZGQtZGV2ZWxAbGlzdHMuc2YubmV0CkBAIC0xMDYsNyArMTA2LDcgQEAKIAkJMS4yIGNoaXBzLCBQQ1JzIHJlcHJlc2VudCBTSEEtMSBoYXNoZXMsIHdoaWNoIGFyZSAyMCBieXRlcwogCQlsb25nLiBVc2UgdGhlICJjYXBzIiBwcm9wZXJ0eSB0byBkZXRlcm1pbmUgVFBNIHZlcnNpb24uCiAKLVdoYXQ6CQkvc3lzL2NsYXNzL21pc2MvdHBtWC9kZXZpY2UvcHViZWsKK1doYXQ6CQkvc3lzL2NsYXNzL3RwbS90cG1YL2RldmljZS9wdWJlawogRGF0ZToJCUFwcmlsIDIwMDUKIEtlcm5lbFZlcnNpb246CTIuNi4xMgogQ29udGFjdDoJdHBtZGQtZGV2ZWxAbGlzdHMuc2YubmV0CkBAIC0xNTgsNyArMTU4LDcgQEAKIAkJTW9kdWx1cyBMZW5ndGg6IDI1NiAoYnl0ZXMpCiAJCU1vZHVsdXM6CVRoZSAyNTYgYnl0ZSBFbmRvcnNlbWVudCBLZXkgbW9kdWx1cwogCi1XaGF0OgkJL3N5cy9jbGFzcy9taXNjL3RwbVgvZGV2aWNlL3RlbXBfZGVhY3RpdmF0ZWQKK1doYXQ6CQkvc3lzL2NsYXNzL3RwbS90cG1YL2RldmljZS90ZW1wX2RlYWN0aXZhdGVkCiBEYXRlOgkJQXByaWwgMjAwNgogS2VybmVsVmVyc2lvbjoJMi42LjE3CiBDb250YWN0Ogl0cG1kZC1kZXZlbEBsaXN0cy5zZi5uZXQKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCQljeWNsZS4gV2hldGhlciBhIHdhcm0gYm9vdCAocmVib290KSB3aWxsIGNsZWFyIGEgVFBNIGNoaXAKIAkJZnJvbSBhIHRlbXBfZGVhY3RpdmF0ZWQgc3RhdGUgaXMgcGxhdGZvcm0gc3BlY2lmaWMuCiAKLVdoYXQ6CQkvc3lzL2NsYXNzL21pc2MvdHBtWC9kZXZpY2UvdGltZW91dHMKK1doYXQ6CQkvc3lzL2NsYXNzL3RwbS90cG1YL2RldmljZS90aW1lb3V0cwogRGF0ZToJCU1hcmNoIDIwMTEKIEtlcm5lbFZlcnNpb246CTMuMQogQ29udGFjdDoJdHBtZGQtZGV2ZWxAbGlzdHMuc2YubmV0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1hbWJhIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtYW1iYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2I1NDY3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtYW1iYQpAQCAtMCwwICsxLDIwIEBACitXaGF0OgkJL3N5cy9idXMvYW1iYS9kZXZpY2VzLy4uLi9kcml2ZXJfb3ZlcnJpZGUKK0RhdGU6CQlTZXB0ZW1iZXIgMjAxNAorQ29udGFjdDoJQW50b25pb3MgTW90YWtpcyA8YS5tb3Rha2lzQHZpcnR1YWxvcGVuc3lzdGVtcy5jb20+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBmaWxlIGFsbG93cyB0aGUgZHJpdmVyIGZvciBhIGRldmljZSB0byBiZSBzcGVjaWZpZWQgd2hpY2gKKwkJd2lsbCBvdmVycmlkZSBzdGFuZGFyZCBPRiwgQUNQSSwgSUQgdGFibGUsIGFuZCBuYW1lIG1hdGNoaW5nLgorCQlXaGVuIHNwZWNpZmllZCwgb25seSBhIGRyaXZlciB3aXRoIGEgbmFtZSBtYXRjaGluZyB0aGUgdmFsdWUKKwkJd3JpdHRlbiB0byBkcml2ZXJfb3ZlcnJpZGUgd2lsbCBoYXZlIGFuIG9wcG9ydHVuaXR5IHRvIGJpbmQgdG8KKwkJdGhlIGRldmljZS4gVGhlIG92ZXJyaWRlIGlzIHNwZWNpZmllZCBieSB3cml0aW5nIGEgc3RyaW5nIHRvIHRoZQorCQlkcml2ZXJfb3ZlcnJpZGUgZmlsZSAoZWNobyB2ZmlvLWFtYmEgPiBkcml2ZXJfb3ZlcnJpZGUpCWFuZCBtYXkKKwkJYmUgY2xlYXJlZCB3aXRoIGFuIGVtcHR5IHN0cmluZyAoZWNobyA+IGRyaXZlcl9vdmVycmlkZSkuCisJCVRoaXMgcmV0dXJucyB0aGUgZGV2aWNlIHRvIHN0YW5kYXJkIG1hdGNoaW5nIHJ1bGVzIGJpbmRpbmcuCisJCVdyaXRpbmcgdG8gZHJpdmVyX292ZXJyaWRlIGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgdW5iaW5kIHRoZQorCQlkZXZpY2UgZnJvbSBpdHMgY3VycmVudCBkcml2ZXIgb3IgbWFrZSBhbnkgYXR0ZW1wdCB0bworCQlhdXRvbWF0aWNhbGx5IGxvYWQgdGhlIHNwZWNpZmllZCBkcml2ZXIuIElmIG5vIGRyaXZlciB3aXRoIGEKKwkJbWF0Y2hpbmcgbmFtZSBpcyBjdXJyZW50bHkgbG9hZGVkIGluIHRoZSBrZXJuZWwsIHRoZSBkZXZpY2Ugd2lsbAorCQlub3QgYmluZCB0byBhbnkgZHJpdmVyLiBUaGlzIGFsc28gYWxsb3dzIGRldmljZXMgdG8gb3B0LW91dCBvZgorCQlkcml2ZXIgYmluZGluZyB1c2luZyBhIGRyaXZlcl9vdmVycmlkZSBuYW1lIHN1Y2ggYXMgIm5vbmUiLgorCQlPbmx5IGEgc2luZ2xlIGRyaXZlciBtYXkgYmUgc3BlY2lmaWVkIGluIHRoZSBvdmVycmlkZSwgdGhlcmUgaXMKKwkJbm8gc3VwcG9ydCBmb3IgcGFyc2luZyBkZWxpbWl0ZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZXZlbnRfc291cmNlLWRldmljZXMtZXZlbnRzIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZXZlbnRfc291cmNlLWRldmljZXMtZXZlbnRzCmluZGV4IDIwOTc5ZjguLjUwNWYwODAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWV2ZW50X3NvdXJjZS1kZXZpY2VzLWV2ZW50cworKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1ldmVudF9zb3VyY2UtZGV2aWNlcy1ldmVudHMKQEAgLTUyLDEyICs1MiwxOCBAQAogCQkJZXZlbnQ9MHgyYWJjCiAJCQlldmVudD0weDQyMyxpbnYsY21hc2s9MHgzCiAJCQlkb21haW49MHgxLG9mZnNldD0weDgsc3RhcnRpbmdfaW5kZXg9MHhmZmZmCisJCQlkb21haW49MHgxLG9mZnNldD0weDgsY29yZT0/CiAKIAkJRWFjaCBvZiB0aGUgYXNzaWdubWVudHMgaW5kaWNhdGVzIGEgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gYQogCQlwYXJ0aWN1bGFyIHNldCBvZiBiaXRzIChhcyBkZWZpbmVkIGJ5IHRoZSBmb3JtYXQgZmlsZQogCQljb3JyZXNwb25kaW5nIHRvIHRoZSA8dGVybT4pIGluIHRoZSBwZXJmX2V2ZW50IHN0cnVjdHVyZSBwYXNzZWQKIAkJdG8gdGhlIHBlcmZfb3BlbiBzeXNjYWxsLgogCisJCUluIHRoZSBjYXNlIG9mIHRoZSBsYXN0IGV4YW1wbGUsIGEgdmFsdWUgcmVwbGFjaW5nICI/IiB3b3VsZAorCQluZWVkIHRvIGJlIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIHNlbGVjdGluZyB0aGUgcGFydGljdWxhciBldmVudC4KKwkJVGhpcyBpcyByZWZlcnJlZCB0byBhcyAiZXZlbnQgcGFyYW1ldGVyaXphdGlvbiIuIEV2ZW50CisJCXBhcmFtZXRlcnMgaGF2ZSB0aGUgZm9ybWF0ICdwYXJhbT0/Jy4KKwogV2hhdDogL3N5cy9idXMvZXZlbnRfc291cmNlL2RldmljZXMvPHBtdT4vZXZlbnRzLzxldmVudD4udW5pdAogRGF0ZTogMjAxNC8wMi8yNAogQ29udGFjdDoJTGludXgga2VybmVsIG1haWxpbmcgbGlzdCA8bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZz4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWV2ZW50X3NvdXJjZS1kZXZpY2VzLWh2XzI0eDcgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1ldmVudF9zb3VyY2UtZGV2aWNlcy1odl8yNHg3CmluZGV4IDMyZjNmNWYuLmY4OTMzMzcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLWV2ZW50X3NvdXJjZS1kZXZpY2VzLWh2XzI0eDcKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtZXZlbnRfc291cmNlLWRldmljZXMtaHZfMjR4NwpAQCAtMjEsMyArMjEsMjUgQEAKIERlc2NyaXB0aW9uOgogCQlFeHBvc2VzIHRoZSAidmVyc2lvbiIgZmllbGQgb2YgdGhlIDI0eDcgY2F0YWxvZy4gVGhpcyBpcyBhbHNvCiAJCWV4dHJhY3RhYmxlIGZyb20gdGhlIHByb3ZpZGVkIGJpbmFyeSAiY2F0YWxvZyIgc3lzZnMgZW50cnkuCisKK1doYXQ6CQkvc3lzL2J1cy9ldmVudF9zb3VyY2UvZGV2aWNlcy9odl8yNHg3L2V2ZW50X2Rlc2NzLzxldmVudC1uYW1lPgorRGF0ZToJCUZlYnJ1YXJ5IDIwMTQKK0NvbnRhY3Q6CUxpbnV4IG9uIFBvd2VyUEMgRGV2ZWxvcGVyIExpc3QgPGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnPgorRGVzY3JpcHRpb246CisJCVByb3ZpZGVzIHRoZSBkZXNjcmlwdGlvbiBvZiBhIHBhcnRpY3VsYXIgZXZlbnQgYXMgcHJvdmlkZWQgYnkKKwkJdGhlIGZpcm13YXJlLiBJZiBmaXJtd2FyZSBkb2VzIG5vdCBwcm92aWRlIGEgZGVzY3JpcHRpb24sIG5vCisJCWZpbGUgd2lsbCBiZSBjcmVhdGVkLgorCisJCU5vdGUgdGhhdCB0aGUgZXZlbnQtbmFtZSBsYWNrcyB0aGUgZG9tYWluIHN1ZmZpeCBhcHBlbmRlZCBmb3IKKwkJZXZlbnRzIGluIHRoZSBldmVudHMvIGRpci4KKworV2hhdDoJCS9zeXMvYnVzL2V2ZW50X3NvdXJjZS9kZXZpY2VzL2h2XzI0eDcvZXZlbnRfbG9uZ19kZXNjcy88ZXZlbnQtbmFtZT4KK0RhdGU6CQlGZWJydWFyeSAyMDE0CitDb250YWN0OglMaW51eCBvbiBQb3dlclBDIERldmVsb3BlciBMaXN0IDxsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZz4KK0Rlc2NyaXB0aW9uOgorCQlQcm92aWRlcyB0aGUgImxvbmciIGRlc2NyaXB0aW9uIG9mIGEgcGFydGljdWxhciBldmVudCBhcworCQlwcm92aWRlZCBieSB0aGUgZmlybXdhcmUuIElmIGZpcm13YXJlIGRvZXMgbm90IHByb3ZpZGUgYQorCQlkZXNjcmlwdGlvbiwgbm8gZmlsZSB3aWxsIGJlIGNyZWF0ZWQuCisKKwkJTm90ZSB0aGF0IHRoZSBldmVudC1uYW1lIGxhY2tzIHRoZSBkb21haW4gc3VmZml4IGFwcGVuZGVkIGZvcgorCQlldmVudHMgaW4gdGhlIGV2ZW50cy8gZGlyLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1jeGwgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWN4bAppbmRleCA1NTQ0MDVlLi4zNjgwMzY0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWN4bAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLWN4bApAQCAtMSwzICsxLDkgQEAKK05vdGU6IEF0dHJpYnV0ZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gZGV2aWNlcyBhcmUgc3RvcmVkIGluIHRoZSBkaXJlY3RvcnkKK3BvaW50ZWQgdG8gYnkgdGhlIHN5bWxpbmsgZGV2aWNlLy4KK0V4YW1wbGU6IFRoZSByZWFsIHBhdGggb2YgdGhlIGF0dHJpYnV0ZSAvc3lzL2NsYXNzL2N4bC9hZnUwLjBzL2lycXNfbWF4IGlzCisvc3lzL2NsYXNzL2N4bC9hZnUwLjBzL2RldmljZS9pcnFzX21heCwgaS5lLiAvc3lzL2NsYXNzL2N4bC9hZnUwLjAvaXJxc19tYXguCisKKwogU2xhdmUgY29udGV4dHMgKGVnLiAvc3lzL2NsYXNzL2N4bC9hZnUwLjBzKToKIAogV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvY3hsLzxhZnU+L2lycXNfbWF4CkBAIC02Nyw3ICs3Myw3IEBACiBEZXNjcmlwdGlvbjogICAgcmVhZCBvbmx5CiAgICAgICAgICAgICAgICAgRGVjaW1hbCB2YWx1ZSBvZiB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBrZXJuZWwvdXNlciBBUEkuCiAKLVdoYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL2N4bC88YWZ1Pi9hcGlfdmVyc2lvbl9jb20KK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL2N4bC88YWZ1Pi9hcGlfdmVyc2lvbl9jb21wYXRpYmxlCiBEYXRlOiAgICAgICAgICAgU2VwdGVtYmVyIDIwMTQKIENvbnRhY3Q6ICAgICAgICBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZwogRGVzY3JpcHRpb246ICAgIHJlYWQgb25seQpAQCAtNzUsNiArODEsNDIgQEAKICAgICAgICAgICAgICAgICB0aGlzIHRoaXMga2VybmVsIHN1cHBvcnRzLgogCiAKK0FGVSBjb25maWd1cmF0aW9uIHJlY29yZHMgKGVnLiAvc3lzL2NsYXNzL2N4bC9hZnUwLjAvY3IwKToKKworQW4gQUZVIG1heSBvcHRpb25hbGx5IGV4cG9ydCBvbmUgb3IgbW9yZSBQQ0llIGxpa2UgY29uZmlndXJhdGlvbiByZWNvcmRzLCBrbm93bgorYXMgQUZVIGNvbmZpZ3VyYXRpb24gcmVjb3Jkcywgd2hpY2ggd2lsbCBzaG93IHVwIGhlcmUgKGlmIHByZXNlbnQpLgorCitXaGF0OiAgICAgICAgICAgL3N5cy9jbGFzcy9jeGwvPGFmdT4vY3I8Y29uZmlnIG51bT4vdmVuZG9yCitEYXRlOiAgICAgICAgICAgRmVicnVhcnkgMjAxNQorQ29udGFjdDogICAgICAgIGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnCitEZXNjcmlwdGlvbjogICAgcmVhZCBvbmx5CisJCUhleGFkZWNpbWFsIHZhbHVlIG9mIHRoZSB2ZW5kb3IgSUQgZm91bmQgaW4gdGhpcyBBRlUKKwkJY29uZmlndXJhdGlvbiByZWNvcmQuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL2N4bC88YWZ1Pi9jcjxjb25maWcgbnVtPi9kZXZpY2UKK0RhdGU6ICAgICAgICAgICBGZWJydWFyeSAyMDE1CitDb250YWN0OiAgICAgICAgbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcKK0Rlc2NyaXB0aW9uOiAgICByZWFkIG9ubHkKKwkJSGV4YWRlY2ltYWwgdmFsdWUgb2YgdGhlIGRldmljZSBJRCBmb3VuZCBpbiB0aGlzIEFGVQorCQljb25maWd1cmF0aW9uIHJlY29yZC4KKworV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvY3hsLzxhZnU+L2NyPGNvbmZpZyBudW0+L3ZlbmRvcgorRGF0ZTogICAgICAgICAgIEZlYnJ1YXJ5IDIwMTUKK0NvbnRhY3Q6ICAgICAgICBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZworRGVzY3JpcHRpb246ICAgIHJlYWQgb25seQorCQlIZXhhZGVjaW1hbCB2YWx1ZSBvZiB0aGUgY2xhc3MgY29kZSBmb3VuZCBpbiB0aGlzIEFGVQorCQljb25maWd1cmF0aW9uIHJlY29yZC4KKworV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvY3hsLzxhZnU+L2NyPGNvbmZpZyBudW0+L2NvbmZpZworRGF0ZTogICAgICAgICAgIEZlYnJ1YXJ5IDIwMTUKK0NvbnRhY3Q6ICAgICAgICBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZworRGVzY3JpcHRpb246ICAgIHJlYWQgb25seQorCQlUaGlzIGJpbmFyeSBmaWxlIHByb3ZpZGVzIHJhdyBhY2Nlc3MgdG8gdGhlIEFGVSBjb25maWd1cmF0aW9uCisJCXJlY29yZC4gVGhlIGZvcm1hdCBpcyBleHBlY3RlZCB0byBtYXRjaCB0aGUgZWl0aGVyIHRoZSBzdGFuZGFyZAorCQlvciBleHRlbmRlZCBjb25maWd1cmF0aW9uIHNwYWNlIGRlZmluZWQgYnkgdGhlIFBDSWUKKwkJc3BlY2lmaWNhdGlvbi4KKworCiAKIE1hc3RlciBjb250ZXh0cyAoZWcuIC9zeXMvY2xhc3MvY3hsL2FmdTAuMG0pCiAKQEAgLTEwNiw3ICsxNDgsNyBAQAogRGVzY3JpcHRpb246ICAgIHJlYWQgb25seQogICAgICAgICAgICAgICAgIElkZW50aWZpZXMgdGhlIENBSUEgVmVyc2lvbiB0aGUgY2FyZCBpbXBsZW1lbnRzLgogCi1XaGF0OiAgICAgICAgICAgL3N5cy9jbGFzcy9jeGwvPGNhcmQ+L3BzbF92ZXJzaW9uCitXaGF0OiAgICAgICAgICAgL3N5cy9jbGFzcy9jeGwvPGNhcmQ+L3BzbF9yZXZpc2lvbgogRGF0ZTogICAgICAgICAgIFNlcHRlbWJlciAyMDE0CiBDb250YWN0OiAgICAgICAgbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcKIERlc2NyaXB0aW9uOiAgICByZWFkIG9ubHkKQEAgLTEyNywzICsxNjksMjQgQEAKIERlc2NyaXB0aW9uOiAgICByZWFkIG9ubHkKICAgICAgICAgICAgICAgICBXaWxsIHJldHVybiAidXNlciIgb3IgImZhY3RvcnkiIGRlcGVuZGluZyBvbiB0aGUgaW1hZ2UgbG9hZGVkCiAgICAgICAgICAgICAgICAgb250byB0aGUgY2FyZC4KKworV2hhdDogICAgICAgICAgIC9zeXMvY2xhc3MvY3hsLzxjYXJkPi9sb2FkX2ltYWdlX29uX3BlcnN0CitEYXRlOiAgICAgICAgICAgRGVjZW1iZXIgMjAxNAorQ29udGFjdDogICAgICAgIGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnCitEZXNjcmlwdGlvbjogICAgcmVhZC93cml0ZQorICAgICAgICAgICAgICAgIFZhbGlkIGVudHJpZXMgYXJlICJub25lIiwgInVzZXIiLCBhbmQgImZhY3RvcnkiLgorICAgICAgICAgICAgICAgICJub25lIiBtZWFucyBQRVJTVCB3aWxsIG5vdCBjYXVzZSBpbWFnZSB0byBiZSBsb2FkZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgY2FyZC4gIEEgcG93ZXIgY3ljbGUgaXMgcmVxdWlyZWQgdG8gbG9hZCB0aGUgaW1hZ2UuCisgICAgICAgICAgICAgICAgIm5vbmUiIGNvdWxkIGJlIHVzZWZ1bCBmb3IgZGVidWdnaW5nIGJlY2F1c2UgdGhlIHRyYWNlIGFycmF5cworICAgICAgICAgICAgICAgIGFyZSBwcmVzZXJ2ZWQuCisgICAgICAgICAgICAgICAgInVzZXIiIGFuZCAiZmFjdG9yeSIgbWVhbnMgUEVSU1Qgd2lsbCBjYXVzZSBlaXRoZXIgdGhlIHVzZXIgb3IKKyAgICAgICAgICAgICAgICB1c2VyIG9yIGZhY3RvcnkgaW1hZ2UgdG8gYmUgbG9hZGVkLgorICAgICAgICAgICAgICAgIERlZmF1bHQgaXMgdG8gcmVsb2FkIG9uIFBFUlNUIHdoaWNoZXZlciBpbWFnZSB0aGUgY2FyZCBoYXMKKyAgICAgICAgICAgICAgICBsb2FkZWQuCisKK1doYXQ6ICAgICAgICAgICAvc3lzL2NsYXNzL2N4bC88Y2FyZD4vcmVzZXQKK0RhdGU6ICAgICAgICAgICBPY3RvYmVyIDIwMTQKK0NvbnRhY3Q6ICAgICAgICBsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZworRGVzY3JpcHRpb246ICAgIHdyaXRlIG9ubHkKKyAgICAgICAgICAgICAgICBXcml0aW5nIDEgd2lsbCBpc3N1ZSBhIFBFUlNUIHRvIGNhcmQgd2hpY2ggbWF5IGNhdXNlIHRoZSBjYXJkCisgICAgICAgICAgICAgICAgdG8gcmVsb2FkIHRoZSBGUEdBIGRlcGVuZGluZyBvbiBsb2FkX2ltYWdlX29uX3BlcnN0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1wb3dlciBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtY2xhc3MtcG93ZXIKaW5kZXggOTA5ZTc2MC4uMzY5ZDJhMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1jbGFzcy1wb3dlcgorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWNsYXNzLXBvd2VyCkBAIC0zMiwzICszMiw0NSBAQAogCQlWYWxpZCB2YWx1ZXM6CiAJCS0gNSwgNiBvciA3IChob3VycyksCiAJCS0gMDogZGlzYWJsZWQuCisKK1doYXQ6CQkvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS9tYXg3NzY5My1jaGFyZ2VyL2RldmljZS9mYXN0X2NoYXJnZV90aW1lcgorRGF0ZToJCUphbnVhcnkgMjAxNQorS2VybmVsVmVyc2lvbjoJMy4xOS4wCitDb250YWN0OglLcnp5c3p0b2YgS296bG93c2tpIDxrLmtvemxvd3NraUBzYW1zdW5nLmNvbT4KK0Rlc2NyaXB0aW9uOgorCQlUaGlzIGVudHJ5IHNob3dzIGFuZCBzZXRzIHRoZSBtYXhpbXVtIHRpbWUgdGhlIG1heDc3NjkzCisJCWNoYXJnZXIgb3BlcmF0ZXMgaW4gZmFzdC1jaGFyZ2UgbW9kZS4gV2hlbiB0aGUgdGltZXIgZXhwaXJlcworCQl0aGUgZGV2aWNlIHdpbGwgdGVybWluYXRlIGZhc3QtY2hhcmdlIG1vZGUgKGNoYXJnaW5nIGN1cnJlbnQKKwkJd2lsbCBkcm9wIHRvIDAgQSkgYW5kIHdpbGwgdHJpZ2dlciBpbnRlcnJ1cHQuCisKKwkJVmFsaWQgdmFsdWVzOgorCQktIDQgLSAxNiAoaG91cnMpLCBzdGVwIGJ5IDIgKHJvdW5kZWQgZG93bikKKwkJLSAwOiBkaXNhYmxlZC4KKworV2hhdDoJCS9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L21heDc3NjkzLWNoYXJnZXIvZGV2aWNlL3RvcF9vZmZfdGhyZXNob2xkX2N1cnJlbnQKK0RhdGU6CQlKYW51YXJ5IDIwMTUKK0tlcm5lbFZlcnNpb246CTMuMTkuMAorQ29udGFjdDoJS3J6eXN6dG9mIEtvemxvd3NraSA8ay5rb3psb3dza2lAc2Ftc3VuZy5jb20+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBlbnRyeSBzaG93cyBhbmQgc2V0cyB0aGUgY2hhcmdpbmcgY3VycmVudCB0aHJlc2hvbGQgZm9yCisJCWVudGVyaW5nIHRvcC1vZmYgY2hhcmdpbmcgbW9kZS4gV2hlbiBjaGFyZ2luZyBjdXJyZW50IGluIGZhc3QKKwkJY2hhcmdlIG1vZGUgZHJvcHMgYmVsb3cgdGhpcyB2YWx1ZSwgdGhlIGNoYXJnZXIgd2lsbCB0cmlnZ2VyCisJCWludGVycnVwdCBhbmQgc3RhcnQgdG9wLW9mZiBjaGFyZ2luZyBtb2RlLgorCisJCVZhbGlkIHZhbHVlczoKKwkJLSAxMDAwMDAgLSAyMDAwMDAgKG1pY3JvYW1wcyksIHN0ZXAgYnkgMjUwMDAgKHJvdW5kZWQgZG93bikKKwkJLSAyMDAwMDAgLSAzNTAwMDAgKG1pY3JvYW1wcyksIHN0ZXAgYnkgNTAwMDAgKHJvdW5kZWQgZG93bikKKwkJLSAwOiBkaXNhYmxlZC4KKworV2hhdDoJCS9zeXMvY2xhc3MvcG93ZXJfc3VwcGx5L21heDc3NjkzLWNoYXJnZXIvZGV2aWNlL3RvcF9vZmZfdGltZXIKK0RhdGU6CQlKYW51YXJ5IDIwMTUKK0tlcm5lbFZlcnNpb246CTMuMTkuMAorQ29udGFjdDoJS3J6eXN6dG9mIEtvemxvd3NraSA8ay5rb3psb3dza2lAc2Ftc3VuZy5jb20+CitEZXNjcmlwdGlvbjoKKwkJVGhpcyBlbnRyeSBzaG93cyBhbmQgc2V0cyB0aGUgbWF4aW11bSB0aW1lIHRoZSBtYXg3NzY5MworCQljaGFyZ2VyIG9wZXJhdGVzIGluIHRvcC1vZmYgY2hhcmdlIG1vZGUuIFdoZW4gdGhlIHRpbWVyIGV4cGlyZXMKKwkJdGhlIGRldmljZSB3aWxsIHRlcm1pbmF0ZSB0b3Atb2ZmIGNoYXJnZSBtb2RlIChjaGFyZ2luZyBjdXJyZW50CisJCXdpbGwgZHJvcCB0byAwIEEpIGFuZCB3aWxsIHRyaWdnZXIgaW50ZXJydXB0LgorCisJCVZhbGlkIHZhbHVlczoKKwkJLSAwIC0gNzAgKG1pbnV0ZXMpLCBzdGVwIGJ5IDEwIChyb3VuZGVkIGRvd24pCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWRyaXZlci1pbnB1dC1heHAtcGVrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaW5wdXQtYXhwLXBlawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWU2NzFiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kcml2ZXItaW5wdXQtYXhwLXBlawpAQCAtMCwwICsxLDExIEBACitXaGF0OgkJL3N5cy9jbGFzcy9pbnB1dC9pbnB1dCh4KS9kZXZpY2Uvc3RhcnR1cAorRGF0ZToJCU1hcmNoIDIwMTQKK0NvbnRhY3Q6CUNhcmxvIENhaW9uZSA8Y2FybG9AY2Fpb25lLm9yZz4KK0Rlc2NyaXB0aW9uOglTdGFydHVwIHRpbWUgaW4gdXMuIEJvYXJkIGlzIHBvd2VyZWQgb24gaWYgdGhlIGJ1dHRvbiBpcyBwcmVzc2VkCisJCWZvciBtb3JlIHRoYW4gPHN0YXJ0dXBfdGltZT4KKworV2hhdDoJCS9zeXMvY2xhc3MvaW5wdXQvaW5wdXQoeCkvZGV2aWNlL3NodXRkb3duCitEYXRlOgkJTWFyY2ggMjAxNAorQ29udGFjdDoJQ2FybG8gQ2Fpb25lIDxjYXJsb0BjYWlvbmUub3JnPgorRGVzY3JpcHRpb246CVNodXRkb3duIHRpbWUgaW4gdXMuIEJvYXJkIGlzIHBvd2VyZWQgb2ZmIGlmIHRoZSBidXR0b24gaXMgcHJlc3NlZAorCQlmb3IgbW9yZSB0aGFuIDxzaHV0ZG93bl90aW1lPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbGl2ZXBhdGNoIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbGl2ZXBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZjQyYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1saXZlcGF0Y2gKQEAgLTAsMCArMSw0NCBAQAorV2hhdDoJCS9zeXMva2VybmVsL2xpdmVwYXRjaAorRGF0ZToJCU5vdiAyMDE0CitLZXJuZWxWZXJzaW9uOgkzLjE5LjAKK0NvbnRhY3Q6CWxpdmUtcGF0Y2hpbmdAdmdlci5rZXJuZWwub3JnCitEZXNjcmlwdGlvbjoKKwkJSW50ZXJmYWNlIGZvciBrZXJuZWwgbGl2ZSBwYXRjaGluZworCisJCVRoZSAvc3lzL2tlcm5lbC9saXZlcGF0Y2ggZGlyZWN0b3J5IGNvbnRhaW5zIHN1YmRpcmVjdG9yaWVzIGZvcgorCQllYWNoIGxvYWRlZCBsaXZlIHBhdGNoIG1vZHVsZS4KKworV2hhdDoJCS9zeXMva2VybmVsL2xpdmVwYXRjaC88cGF0Y2g+CitEYXRlOgkJTm92IDIwMTQKK0tlcm5lbFZlcnNpb246CTMuMTkuMAorQ29udGFjdDoJbGl2ZS1wYXRjaGluZ0B2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorCQlUaGUgcGF0Y2ggZGlyZWN0b3J5IGNvbnRhaW5zIHN1YmRpcmVjdG9yaWVzIGZvciBlYWNoIGtlcm5lbAorCQlvYmplY3QgKHZtbGludXggb3IgYSBtb2R1bGUpIGluIHdoaWNoIGl0IHBhdGNoZWQgZnVuY3Rpb25zLgorCitXaGF0OgkJL3N5cy9rZXJuZWwvbGl2ZXBhdGNoLzxwYXRjaD4vZW5hYmxlZAorRGF0ZToJCU5vdiAyMDE0CitLZXJuZWxWZXJzaW9uOgkzLjE5LjAKK0NvbnRhY3Q6CWxpdmUtcGF0Y2hpbmdAdmdlci5rZXJuZWwub3JnCitEZXNjcmlwdGlvbjoKKwkJQSB3cml0YWJsZSBhdHRyaWJ1dGUgdGhhdCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgcGF0Y2hlZAorCQljb2RlIGlzIGN1cnJlbnRseSBhcHBsaWVkLiAgV3JpdGluZyAwIHdpbGwgZGlzYWJsZSB0aGUgcGF0Y2gKKwkJd2hpbGUgd3JpdGluZyAxIHdpbGwgcmUtZW5hYmxlIHRoZSBwYXRjaC4KKworV2hhdDoJCS9zeXMva2VybmVsL2xpdmVwYXRjaC88cGF0Y2g+LzxvYmplY3Q+CitEYXRlOgkJTm92IDIwMTQKK0tlcm5lbFZlcnNpb246CTMuMTkuMAorQ29udGFjdDoJbGl2ZS1wYXRjaGluZ0B2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorCQlUaGUgb2JqZWN0IGRpcmVjdG9yeSBjb250YWlucyBzdWJkaXJlY3RvcmllcyBmb3IgZWFjaCBmdW5jdGlvbgorCQl0aGF0IGlzIHBhdGNoZWQgd2l0aGluIHRoZSBvYmplY3QuCisKK1doYXQ6CQkvc3lzL2tlcm5lbC9saXZlcGF0Y2gvPHBhdGNoPi88b2JqZWN0Pi88ZnVuY3Rpb24+CitEYXRlOgkJTm92IDIwMTQKK0tlcm5lbFZlcnNpb246CTMuMTkuMAorQ29udGFjdDoJbGl2ZS1wYXRjaGluZ0B2Z2VyLmtlcm5lbC5vcmcKK0Rlc2NyaXB0aW9uOgorCQlUaGUgZnVuY3Rpb24gZGlyZWN0b3J5IGNvbnRhaW5zIGF0dHJpYnV0ZXMgcmVnYXJkaW5nIHRoZQorCQlwcm9wZXJ0aWVzIGFuZCBzdGF0ZSBvZiB0aGUgcGF0Y2hlZCBmdW5jdGlvbi4KKworCQlUaGVyZSBhcmUgY3VycmVudGx5IG5vIHN1Y2ggYXR0cmlidXRlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ2hhbmdlcyBiL0RvY3VtZW50YXRpb24vQ2hhbmdlcwppbmRleCA3NGJkZGE5Li42NDZjZGFhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0NoYW5nZXMKKysrIGIvRG9jdW1lbnRhdGlvbi9DaGFuZ2VzCkBAIC0yMSw4ICsyMSw4IEBACiBzeXN0ZW1zOyBvYnZpb3VzbHksIGlmIHlvdSBkb24ndCBoYXZlIGFueSBJU0ROIGhhcmR3YXJlLCBmb3IgZXhhbXBsZSwKIHlvdSBwcm9iYWJseSBuZWVkbid0IGNvbmNlcm4geW91cnNlbGYgd2l0aCBpc2RuNGstdXRpbHMuCiAKLW8gIEdudSBDICAgICAgICAgICAgICAgICAgMy4yICAgICAgICAgICAgICAgICAgICAgIyBnY2MgLS12ZXJzaW9uCi1vICBHbnUgbWFrZSAgICAgICAgICAgICAgIDMuODAgICAgICAgICAgICAgICAgICAgICMgbWFrZSAtLXZlcnNpb24KK28gIEdOVSBDICAgICAgICAgICAgICAgICAgMy4yICAgICAgICAgICAgICAgICAgICAgIyBnY2MgLS12ZXJzaW9uCitvICBHTlUgbWFrZSAgICAgICAgICAgICAgIDMuODAgICAgICAgICAgICAgICAgICAgICMgbWFrZSAtLXZlcnNpb24KIG8gIGJpbnV0aWxzICAgICAgICAgICAgICAgMi4xMiAgICAgICAgICAgICAgICAgICAgIyBsZCAtdgogbyAgdXRpbC1saW51eCAgICAgICAgICAgICAyLjEwbyAgICAgICAgICAgICAgICAgICAjIGZkZm9ybWF0IC0tdmVyc2lvbgogbyAgbW9kdWxlLWluaXQtdG9vbHMgICAgICAwLjkuMTAgICAgICAgICAgICAgICAgICAjIGRlcG1vZCAtVgpAQCAtNTcsNyArNTcsNyBAQAogTWFrZQogLS0tLQogCi1Zb3Ugd2lsbCBuZWVkIEdudSBtYWtlIDMuODAgb3IgbGF0ZXIgdG8gYnVpbGQgdGhlIGtlcm5lbC4KK1lvdSB3aWxsIG5lZWQgR05VIG1ha2UgMy44MCBvciBsYXRlciB0byBidWlsZCB0aGUga2VybmVsLgogCiBCaW51dGlscwogLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUgYi9Eb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlCmluZGV4IDYxOGEzM2MuLjQ0OWE4YTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKKysrIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQpAQCAtNTI3LDYgKzUyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1tYXRjaCAoZXhwYW5kLWZpbGUtbmFtZSAifi9zcmMvbGludXgtdHJlZXMiKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpKQogICAgICAgICAgICAgICAgIChzZXRxIGluZGVudC10YWJzLW1vZGUgdCkKKyAgICAgICAgICAgICAgICAoc2V0cSBzaG93LXRyYWlsaW5nLXdoaXRlc3BhY2UgdCkKICAgICAgICAgICAgICAgICAoYy1zZXQtc3R5bGUgImxpbnV4LXRhYnMtb25seSIpKSkpKQogCiBUaGlzIHdpbGwgbWFrZSBlbWFjcyBnbyBiZXR0ZXIgd2l0aCB0aGUga2VybmVsIGNvZGluZyBzdHlsZSBmb3IgQwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rLzgwMjExLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svODAyMTEudG1wbAppbmRleCBkOWI5NDE2Li5hYWM5MzU3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svODAyMTEudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svODAyMTEudG1wbApAQCAtMTEzLDcgKzExMyw2IEBACiAhRmluY2x1ZGUvbmV0L2NmZzgwMjExLmggY2ZnODAyMTFfYmVhY29uX2RhdGEKICFGaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBjZmc4MDIxMV9hcF9zZXR0aW5ncwogIUZpbmNsdWRlL25ldC9jZmc4MDIxMS5oIHN0YXRpb25fcGFyYW1ldGVycwotIUZpbmNsdWRlL25ldC9jZmc4MDIxMS5oIHN0YXRpb25faW5mb19mbGFncwogIUZpbmNsdWRlL25ldC9jZmc4MDIxMS5oIHJhdGVfaW5mb19mbGFncwogIUZpbmNsdWRlL25ldC9jZmc4MDIxMS5oIHJhdGVfaW5mbwogIUZpbmNsdWRlL25ldC9jZmc4MDIxMS5oIHN0YXRpb25faW5mbwpAQCAtNDM1LDcgKzQzNCw2IEBACiAgICAgICA8c2VjdGlvbiBpZD0icHMtY2xpZW50Ij4KICAgICAgICAgPHRpdGxlPnN1cHBvcnQgZm9yIHBvd2Vyc2F2aW5nIGNsaWVudHM8L3RpdGxlPgogIVBpbmNsdWRlL25ldC9tYWM4MDIxMS5oIEFQIHN1cHBvcnQgZm9yIHBvd2Vyc2F2aW5nIGNsaWVudHMKLSAgICAgIDwvc2VjdGlvbj4KICFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjCiAhRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2JlYWNvbl9nZXQKICFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfc3RhX2Vvc3AKQEAgLTQ0NCw2ICs0NDIsNyBAQAogIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9zdGFfcHNfdHJhbnNpdGlvbl9uaQogIUZpbmNsdWRlL25ldC9tYWM4MDIxMS5oIGllZWU4MDIxMV9zdGFfc2V0X2J1ZmZlcmVkCiAhRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3N0YV9ibG9ja19hd2FrZQorICAgICAgPC9zZWN0aW9uPgogICAgICAgPC9jaGFwdGVyPgogCiAgICAgICA8Y2hhcHRlciBpZD0ibXVsdGktaWZhY2UiPgpAQCAtNDg4LDggKzQ4Nyw4IEBACiAgICAgICAgICAgPHRpdGxlPlJYIEEtTVBEVSBhZ2dyZWdhdGlvbjwvdGl0bGU+CiAhUG5ldC9tYWM4MDIxMS9hZ2ctcnguYyBSWCBBLU1QRFUgYWdncmVnYXRpb24KICFDbmV0L21hYzgwMjExL2FnZy1yeC5jCi0gICAgICAgIDwvc2VjdDE+CiAhRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uCisgICAgICAgIDwvc2VjdDE+CiAgICAgICA8L2NoYXB0ZXI+CiAKICAgICAgIDxjaGFwdGVyIGlkPSJzbXBzIj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQppbmRleCA5YzdkOTJkLi5iNmE2YTJlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCkBAIC01Niw3ICs1Niw3IEBACiAKIE1BTiA6PSAkKHBhdHN1YnN0ICUueG1sLCAlLjksICQoQk9PS1MpKQogbWFuZG9jczogJChNQU4pCi0JJChpZiAkKHdpbGRjYXJkICQob2JqKS9tYW4vKi45KSxnemlwIC1mICQob2JqKS9tYW4vKi45KQorCWZpbmQgJChvYmopL21hbiAtbmFtZSAnKi45JyB8IHhhcmdzIGd6aXAgLWYKIAogaW5zdGFsbG1hbmRvY3M6IG1hbmRvY3MKIAlta2RpciAtcCAvdXNyL2xvY2FsL21hbi9tYW45LwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2NyeXB0by1BUEkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9jcnlwdG8tQVBJLnRtcGwKaW5kZXggYzc2M2QzMC4uMDRhOGMyNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2NyeXB0by1BUEkudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svY3J5cHRvLUFQSS50bXBsCkBAIC0xMTEsNyArMTExLDcgQEAKICAgICA8cGFyYT4KICAgICAgVGhpcyBzcGVjaWZpY2F0aW9uIGlzIGludGVuZGVkIGZvciBjb25zdW1lcnMgb2YgdGhlIGtlcm5lbCBjcnlwdG8KICAgICAgQVBJIGFzIHdlbGwgYXMgZm9yIGRldmVsb3BlcnMgaW1wbGVtZW50aW5nIGNpcGhlcnMuIFRoaXMgQVBJCi0gICAgIHNwZWNpZmljYXRpb24sIGhvd2V2ZXIsIGRvZXMgbm90IGRpc2N1c3NlcyBhbGwgQVBJIGNhbGxzIGF2YWlsYWJsZQorICAgICBzcGVjaWZpY2F0aW9uLCBob3dldmVyLCBkb2VzIG5vdCBkaXNjdXNzIGFsbCBBUEkgY2FsbHMgYXZhaWxhYmxlCiAgICAgIHRvIGRhdGEgdHJhbnNmb3JtYXRpb24gaW1wbGVtZW50YXRpb25zIChpLmUuIGltcGxlbWVudGF0aW9ucyBvZgogICAgICBjaXBoZXJzIGFuZCBvdGhlciB0cmFuc2Zvcm1hdGlvbnMgKHN1Y2ggYXMgQ1JDIG9yIGV2ZW4gY29tcHJlc3Npb24KICAgICAgYWxnb3JpdGhtcykgdGhhdCBjYW4gcmVnaXN0ZXIgd2l0aCB0aGUga2VybmVsIGNyeXB0byBBUEkpLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tnZGIudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZ2RiLnRtcGwKaW5kZXggZjc3MzU4Zi4uMjQyOGNjMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tnZGIudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2dkYi50bXBsCkBAIC03NSw3ICs3NSw3IEBACiAgICAgYSBkZXZlbG9wbWVudCBtYWNoaW5lIGFuZCB0aGUgb3RoZXIgaXMgdGhlIHRhcmdldCBtYWNoaW5lLiAgVGhlCiAgICAga2VybmVsIHRvIGJlIGRlYnVnZ2VkIHJ1bnMgb24gdGhlIHRhcmdldCBtYWNoaW5lLiBUaGUgZGV2ZWxvcG1lbnQKICAgICBtYWNoaW5lIHJ1bnMgYW4gaW5zdGFuY2Ugb2YgZ2RiIGFnYWluc3QgdGhlIHZtbGludXggZmlsZSB3aGljaAotICAgIGNvbnRhaW5zIHRoZSBzeW1ib2xzIChub3QgYm9vdCBpbWFnZSBzdWNoIGFzIGJ6SW1hZ2UsIHpJbWFnZSwKKyAgICBjb250YWlucyB0aGUgc3ltYm9scyAobm90IGEgYm9vdCBpbWFnZSBzdWNoIGFzIGJ6SW1hZ2UsIHpJbWFnZSwKICAgICB1SW1hZ2UuLi4pLiAgSW4gZ2RiIHRoZSBkZXZlbG9wZXIgc3BlY2lmaWVzIHRoZSBjb25uZWN0aW9uCiAgICAgcGFyYW1ldGVycyBhbmQgY29ubmVjdHMgdG8ga2dkYi4gIFRoZSB0eXBlIG9mIGNvbm5lY3Rpb24gYQogICAgIGRldmVsb3BlciBtYWtlcyB3aXRoIGdkYiBkZXBlbmRzIG9uIHRoZSBhdmFpbGFiaWxpdHkgb2Yga2dkYiBJL08KQEAgLTk1LDcgKzk1LDcgQEAKICAgICA8dGl0bGU+S2VybmVsIGNvbmZpZyBvcHRpb25zIGZvciBrZ2RiPC90aXRsZT4KICAgICA8cGFyYT4KICAgICBUbyBlbmFibGUgPHN5bWJvbD5DT05GSUdfS0dEQjwvc3ltYm9sPiB5b3Ugc2hvdWxkIGxvb2sgdW5kZXIKLSAgICAiS2VybmVsIGRlYnVnZ2luZyIgYW5kIHNlbGVjdCAiS0dEQjoga2VybmVsIGRlYnVnZ2VyIi4KKyAgICAiS2VybmVsIGhhY2tpbmciIC8gIktlcm5lbCBkZWJ1Z2dpbmciIGFuZCBzZWxlY3QgIktHREI6IGtlcm5lbCBkZWJ1Z2dlciIuCiAgICAgPC9wYXJhPgogICAgIDxwYXJhPgogICAgIFdoaWxlIGl0IGlzIG5vdCBhIGhhcmQgcmVxdWlyZW1lbnQgdGhhdCB5b3UgaGF2ZSBzeW1ib2xzIGluIHlvdXIKQEAgLTEwNSw3ICsxMDUsNyBAQAogICAgIGtlcm5lbCB3aXRoIGRlYnVnIGluZm8iIGluIHRoZSBjb25maWcgbWVudS4KICAgICA8L3BhcmE+CiAgICAgPHBhcmE+Ci0gICAgSXQgaXMgYWR2aXNlZCwgYnV0IG5vdCByZXF1aXJlZCB0aGF0IHlvdSB0dXJuIG9uIHRoZQorICAgIEl0IGlzIGFkdmlzZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IHR1cm4gb24gdGhlCiAgICAgPHN5bWJvbD5DT05GSUdfRlJBTUVfUE9JTlRFUjwvc3ltYm9sPiBrZXJuZWwgb3B0aW9uIHdoaWNoIGlzIGNhbGxlZCAiQ29tcGlsZSB0aGUKICAgICBrZXJuZWwgd2l0aCBmcmFtZSBwb2ludGVycyIgaW4gdGhlIGNvbmZpZyBtZW51LiAgVGhpcyBvcHRpb24KICAgICBpbnNlcnRzIGNvZGUgdG8gaW50byB0aGUgY29tcGlsZWQgZXhlY3V0YWJsZSB3aGljaCBzYXZlcyB0aGUgZnJhbWUKQEAgLTE4MSw3ICsxODEsNyBAQAogICA8cGFyYT5UaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSB2YXJpb3VzIHJ1bnRpbWUga2VybmVsCiAgIHBhcmFtZXRlcnMgdGhhdCBhZmZlY3QgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGtlcm5lbCBkZWJ1Z2dlci4KICAgVGhlIGZvbGxvd2luZyBjaGFwdGVyIGNvdmVycyB1c2luZyBrZGIgYW5kIGtnZGIgYXMgd2VsbCBhcwotICBwcm92aWRlcyBzb21lIGV4YW1wbGVzIG9mIHRoZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuPC9wYXJhPgorICBwcm92aWRpbmcgc29tZSBleGFtcGxlcyBvZiB0aGUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLjwvcGFyYT4KICAgIDxzZWN0MSBpZD0ia2dkYm9jIj4KICAgIDx0aXRsZT5LZXJuZWwgcGFyYW1ldGVyOiBrZ2Rib2M8L3RpdGxlPgogICAgPHBhcmE+VGhlIGtnZGJvYyBkcml2ZXIgd2FzIG9yaWdpbmFsbHkgYW4gYWJicmV2aWF0aW9uIG1lYW50IHRvCkBAIC0yMTksOCArMjE5LDggQEAKICAgIDxsaXN0aXRlbT48cGFyYT5rYmQgPSBLZXlib2FyZDwvcGFyYT48L2xpc3RpdGVtPgogICAgPC9pdGVtaXplZGxpc3Q+CiAgICA8L3BhcmE+Ci0gICA8cGFyYT5Zb3UgY2FuIGNvbmZpZ3VyZSBrZ2Rib2MgdG8gdXNlIHRoZSBrZXlib2FyZCwgYW5kIG9yIGEgc2VyaWFsCi0gICBkZXZpY2UgZGVwZW5kaW5nIG9uIGlmIHlvdSBhcmUgdXNpbmcga2RiIGFuZCBvciBrZ2RiLCBpbiBvbmUgb2YgdGhlCisgICA8cGFyYT5Zb3UgY2FuIGNvbmZpZ3VyZSBrZ2Rib2MgdG8gdXNlIHRoZSBrZXlib2FyZCwgYW5kL29yIGEgc2VyaWFsCisgICBkZXZpY2UgZGVwZW5kaW5nIG9uIGlmIHlvdSBhcmUgdXNpbmcga2RiIGFuZC9vciBrZ2RiLCBpbiBvbmUgb2YgdGhlCiAgICBmb2xsb3dpbmcgc2NlbmFyaW9zLiAgVGhlIG9yZGVyIGxpc3RlZCBhYm92ZSBtdXN0IGJlIG9ic2VydmVkIGlmCiAgICB5b3UgdXNlIGFueSBvZiB0aGUgb3B0aW9uYWwgY29uZmlndXJhdGlvbnMgdG9nZXRoZXIuICBVc2luZyBrbXMgKwogICAgb25seSBnZGIgaXMgZ2VuZXJhbGx5IG5vdCBhIHVzZWZ1bCBjb21iaW5hdGlvbi48L3BhcmE+CkBAIC0yNjEsMTEgKzI2MSw4IEBACiAgICA8L3NlY3QzPgogICAgPHNlY3QzIGlkPSJrZ2Rib2NBcmdzMyI+CiAgICA8dGl0bGU+TW9yZSBleGFtcGxlczwvdGl0bGU+Ci0gICA8cGFyYT5Zb3UgY2FuIGNvbmZpZ3VyZSBrZ2Rib2MgdG8gdXNlIHRoZSBrZXlib2FyZCwgYW5kIG9yIGEgc2VyaWFsCi0gICBkZXZpY2UgZGVwZW5kaW5nIG9uIGlmIHlvdSBhcmUgdXNpbmcga2RiIGFuZCBvciBrZ2RiLCBpbiBvbmUgb2YgdGhlCi0gICBmb2xsb3dpbmcgc2NlbmFyaW9zLjwvcGFyYT4KLSAgIDxwYXJhPllvdSBjYW4gY29uZmlndXJlIGtnZGJvYyB0byB1c2UgdGhlIGtleWJvYXJkLCBhbmQgb3IgYSBzZXJpYWwgZGV2aWNlCi0gICBkZXBlbmRpbmcgb24gaWYgeW91IGFyZSB1c2luZyBrZGIgYW5kIG9yIGtnZGIsIGluIG9uZSBvZiB0aGUKKyAgIDxwYXJhPllvdSBjYW4gY29uZmlndXJlIGtnZGJvYyB0byB1c2UgdGhlIGtleWJvYXJkLCBhbmQvb3IgYSBzZXJpYWwgZGV2aWNlCisgICBkZXBlbmRpbmcgb24gaWYgeW91IGFyZSB1c2luZyBrZGIgYW5kL29yIGtnZGIsIGluIG9uZSBvZiB0aGUKICAgIGZvbGxvd2luZyBzY2VuYXJpb3MuCiAgICA8b3JkZXJlZGxpc3Q+CiAgICA8bGlzdGl0ZW0+PHBhcmE+a2RiIGFuZCBrZ2RiIG92ZXIgb25seSBhIHNlcmlhbCBwb3J0PC9wYXJhPgpAQCAtMzE1LDcgKzMxMiw3IEBACiAgICA8cGFyYT4KICAgIFRoZSBLZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiA8Y29uc3RhbnQ+a2dkYndhaXQ8L2NvbnN0YW50PiBtYWtlcwogICAga2dkYiB3YWl0IGZvciBhIGRlYnVnZ2VyIGNvbm5lY3Rpb24gZHVyaW5nIGJvb3Rpbmcgb2YgYSBrZXJuZWwuICBZb3UKLSAgIGNhbiBvbmx5IHVzZSB0aGlzIG9wdGlvbiB5b3UgY29tcGlsZWQgYSBrZ2RiIEkvTyBkcml2ZXIgaW50byB0aGUKKyAgIGNhbiBvbmx5IHVzZSB0aGlzIG9wdGlvbiBpZiB5b3UgY29tcGlsZWQgYSBrZ2RiIEkvTyBkcml2ZXIgaW50byB0aGUKICAgIGtlcm5lbCBhbmQgeW91IHNwZWNpZmllZCB0aGUgSS9PIGRyaXZlciBjb25maWd1cmF0aW9uIGFzIGEga2VybmVsCiAgICBjb21tYW5kIGxpbmUgb3B0aW9uLiAgVGhlIGtnZGJ3YWl0IHBhcmFtZXRlciBzaG91bGQgYWx3YXlzIGZvbGxvdyB0aGUKICAgIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGZvciB0aGUga2dkYiBJL08gZHJpdmVyIGluIHRoZSBrZXJuZWwKQEAgLTM1NCw3ICszNTEsNyBAQAogICAgPC9saXN0aXRlbT4KICAgIDwvb3JkZXJlZGxpc3Q+CiAgICA8cGFyYT5JTVBPUlRBTlQgTk9URTogWW91IGNhbm5vdCB1c2Uga2dkYm9jICsga2dkYmNvbiBvbiBhIHR0eSB0aGF0IGlzIGFuCi0gICBhY3RpdmUgc3lzdGVtIGNvbnNvbGUuICBBbiBleGFtcGxlIGluY29ycmVjdCB1c2FnZSBpcyA8Y29uc3RhbnQ+Y29uc29sZT10dHlTMCwxMTUyMDAga2dkYm9jPXR0eVMwIGtnZGJjb248L2NvbnN0YW50PgorICAgYWN0aXZlIHN5c3RlbSBjb25zb2xlLiAgQW4gZXhhbXBsZSBvZiBpbmNvcnJlY3QgdXNhZ2UgaXMgPGNvbnN0YW50PmNvbnNvbGU9dHR5UzAsMTE1MjAwIGtnZGJvYz10dHlTMCBrZ2RiY29uPC9jb25zdGFudD4KICAgIDwvcGFyYT4KICAgIDxwYXJhPkl0IGlzIHBvc3NpYmxlIHRvIHVzZSB0aGlzIG9wdGlvbiB3aXRoIGtnZGJvYyBvbiBhIHR0eSB0aGF0IGlzIG5vdCBhIHN5c3RlbSBjb25zb2xlLgogICAgPC9wYXJhPgpAQCAtMzg2LDEyICszODMsMTIgQEAKICAgPHRpdGxlPlF1aWNrIHN0YXJ0IGZvciBrZGIgb24gYSBzZXJpYWwgcG9ydDwvdGl0bGU+CiAgIDxwYXJhPlRoaXMgaXMgYSBxdWljayBleGFtcGxlIG9mIGhvdyB0byB1c2Uga2RiLjwvcGFyYT4KICAgPHBhcmE+PG9yZGVyZWRsaXN0PgotICA8bGlzdGl0ZW0+PHBhcmE+Qm9vdCBrZXJuZWwgd2l0aCBhcmd1bWVudHM6CisgIDxsaXN0aXRlbT48cGFyYT5Db25maWd1cmUga2dkYm9jIGF0IGJvb3QgdXNpbmcga2VybmVsIHBhcmFtZXRlcnM6CiAgIDxpdGVtaXplZGxpc3Q+CiAgIDxsaXN0aXRlbT48cGFyYT48Y29uc3RhbnQ+Y29uc29sZT10dHlTMCwxMTUyMDAga2dkYm9jPXR0eVMwLDExNTIwMDwvY29uc3RhbnQ+PC9wYXJhPjwvbGlzdGl0ZW0+CiAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT4KICAgPHBhcmE+T1I8L3BhcmE+Ci0gIDxwYXJhPkNvbmZpZ3VyZSBrZ2Rib2MgYWZ0ZXIgdGhlIGtlcm5lbCBib290ZWQ7IGFzc3VtaW5nIHlvdSBhcmUgdXNpbmcgYSBzZXJpYWwgcG9ydCBjb25zb2xlOgorICA8cGFyYT5Db25maWd1cmUga2dkYm9jIGFmdGVyIHRoZSBrZXJuZWwgaGFzIGJvb3RlZDsgYXNzdW1pbmcgeW91IGFyZSB1c2luZyBhIHNlcmlhbCBwb3J0IGNvbnNvbGU6CiAgIDxpdGVtaXplZGxpc3Q+CiAgIDxsaXN0aXRlbT48cGFyYT48Y29uc3RhbnQ+ZWNobyB0dHlTMCAmZ3Q7IC9zeXMvbW9kdWxlL2tnZGJvYy9wYXJhbWV0ZXJzL2tnZGJvYzwvY29uc3RhbnQ+PC9wYXJhPjwvbGlzdGl0ZW0+CiAgIDwvaXRlbWl6ZWRsaXN0PgpAQCAtNDQyLDEyICs0MzksMTIgQEAKICAgPHRpdGxlPlF1aWNrIHN0YXJ0IGZvciBrZGIgdXNpbmcgYSBrZXlib2FyZCBjb25uZWN0ZWQgY29uc29sZTwvdGl0bGU+CiAgIDxwYXJhPlRoaXMgaXMgYSBxdWljayBleGFtcGxlIG9mIGhvdyB0byB1c2Uga2RiIHdpdGggYSBrZXlib2FyZC48L3BhcmE+CiAgIDxwYXJhPjxvcmRlcmVkbGlzdD4KLSAgPGxpc3RpdGVtPjxwYXJhPkJvb3Qga2VybmVsIHdpdGggYXJndW1lbnRzOgorICA8bGlzdGl0ZW0+PHBhcmE+Q29uZmlndXJlIGtnZGJvYyBhdCBib290IHVzaW5nIGtlcm5lbCBwYXJhbWV0ZXJzOgogICA8aXRlbWl6ZWRsaXN0PgogICA8bGlzdGl0ZW0+PHBhcmE+PGNvbnN0YW50PmtnZGJvYz1rYmQ8L2NvbnN0YW50PjwvcGFyYT48L2xpc3RpdGVtPgogICA8L2l0ZW1pemVkbGlzdD48L3BhcmE+CiAgIDxwYXJhPk9SPC9wYXJhPgotICA8cGFyYT5Db25maWd1cmUga2dkYm9jIGFmdGVyIHRoZSBrZXJuZWwgYm9vdGVkOgorICA8cGFyYT5Db25maWd1cmUga2dkYm9jIGFmdGVyIHRoZSBrZXJuZWwgaGFzIGJvb3RlZDoKICAgPGl0ZW1pemVkbGlzdD4KICAgPGxpc3RpdGVtPjxwYXJhPjxjb25zdGFudD5lY2hvIGtiZCAmZ3Q7IC9zeXMvbW9kdWxlL2tnZGJvYy9wYXJhbWV0ZXJzL2tnZGJvYzwvY29uc3RhbnQ+PC9wYXJhPjwvbGlzdGl0ZW0+CiAgIDwvaXRlbWl6ZWRsaXN0PgpAQCAtNTAxLDEyICs0OTgsMTIgQEAKICAgPHRpdGxlPkNvbm5lY3Rpbmcgd2l0aCBnZGIgdG8gYSBzZXJpYWwgcG9ydDwvdGl0bGU+CiAgIDxvcmRlcmVkbGlzdD4KICAgPGxpc3RpdGVtPjxwYXJhPkNvbmZpZ3VyZSBrZ2Rib2M8L3BhcmE+Ci0gICA8cGFyYT5Cb290IGtlcm5lbCB3aXRoIGFyZ3VtZW50czoKKyAgIDxwYXJhPkNvbmZpZ3VyZSBrZ2Rib2MgYXQgYm9vdCB1c2luZyBrZXJuZWwgcGFyYW1ldGVyczoKICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgPGxpc3RpdGVtPjxwYXJhPjxjb25zdGFudD5rZ2Rib2M9dHR5UzAsMTE1MjAwPC9jb25zdGFudD48L3BhcmE+PC9saXN0aXRlbT4KICAgIDwvaXRlbWl6ZWRsaXN0PjwvcGFyYT4KICAgIDxwYXJhPk9SPC9wYXJhPgotICAgPHBhcmE+Q29uZmlndXJlIGtnZGJvYyBhZnRlciB0aGUga2VybmVsIGJvb3RlZDoKKyAgIDxwYXJhPkNvbmZpZ3VyZSBrZ2Rib2MgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkOgogICAgPGl0ZW1pemVkbGlzdD4KICAgICA8bGlzdGl0ZW0+PHBhcmE+PGNvbnN0YW50PmVjaG8gdHR5UzAgJmd0OyAvc3lzL21vZHVsZS9rZ2Rib2MvcGFyYW1ldGVycy9rZ2Rib2M8L2NvbnN0YW50PjwvcGFyYT48L2xpc3RpdGVtPgogICAgPC9pdGVtaXplZGxpc3Q+PC9wYXJhPgpAQCAtNTM2LDcgKzUzMyw3IEBACiAgIDwvcGFyYT4KICAgPC9saXN0aXRlbT4KICAgPGxpc3RpdGVtPgotICAgIDxwYXJhPkNvbm5lY3QgZnJvbSBmcm9tIGdkYjwvcGFyYT4KKyAgICA8cGFyYT5Db25uZWN0IGZyb20gZ2RiPC9wYXJhPgogICAgIDxwYXJhPgogICAgIEV4YW1wbGUgKHVzaW5nIGEgZGlyZWN0bHkgY29ubmVjdGVkIHBvcnQpOgogICAgIDwvcGFyYT4KQEAgLTU4NCw3ICs1ODEsNyBAQAogICA8cGFyYT4KICAgVGhlcmUgYXJlIHR3byB3YXlzIHRvIHN3aXRjaCBmcm9tIGtnZGIgdG8ga2RiOiB5b3UgY2FuIHVzZSBnZGIgdG8KICAgaXNzdWUgYSBtYWludGVuYW5jZSBwYWNrZXQsIG9yIHlvdSBjYW4gYmxpbmRseSB0eXBlIHRoZSBjb21tYW5kICQzIzMzLgotICBXaGVuZXZlciBrZXJuZWwgZGVidWdnZXIgc3RvcHMgaW4ga2dkYiBtb2RlIGl0IHdpbGwgcHJpbnQgdGhlCisgIFdoZW5ldmVyIHRoZSBrZXJuZWwgZGVidWdnZXIgc3RvcHMgaW4ga2dkYiBtb2RlIGl0IHdpbGwgcHJpbnQgdGhlCiAgIG1lc3NhZ2UgPGNvbnN0YW50PktHREIgb3IgJDMjMzMgZm9yIEtEQjwvY29uc3RhbnQ+LiAgSXQgaXMgaW1wb3J0YW50CiAgIHRvIG5vdGUgdGhhdCB5b3UgaGF2ZSB0byB0eXBlIHRoZSBzZXF1ZW5jZSBjb3JyZWN0bHkgaW4gb25lIHBhc3MuCiAgIFlvdSBjYW5ub3QgdHlwZSBhIGJhY2tzcGFjZSBvciBkZWxldGUgYmVjYXVzZSBrZ2RiIHdpbGwgaW50ZXJwcmV0CkBAIC03MDQsNyArNzAxLDcgQEAKICAgICAgIDxsaXN0aXRlbT48cGFyYT5SZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uIG9mIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB0cmFwIGhvb2tzPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICA8bGlzdGl0ZW0+PHBhcmE+QW55IHNwZWNpYWwgZXhjZXB0aW9uIGhhbmRsaW5nIGFuZCBjbGVhbnVwPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICA8bGlzdGl0ZW0+PHBhcmE+Tk1JIGV4Y2VwdGlvbiBoYW5kbGluZyBhbmQgY2xlYW51cDwvcGFyYT48L2xpc3RpdGVtPgotICAgICAgPGxpc3RpdGVtPjxwYXJhPihvcHRpb25hbClIVyBicmVha3BvaW50czwvcGFyYT48L2xpc3RpdGVtPgorICAgICAgPGxpc3RpdGVtPjxwYXJhPihvcHRpb25hbCkgSFcgYnJlYWtwb2ludHM8L3BhcmE+PC9saXN0aXRlbT4KICAgICAgIDwvaXRlbWl6ZWRsaXN0PgogICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KQEAgLTc2MCw3ICs3NTcsNyBAQAogICAgICAgYSBrZ2RiIEkvTyBkcml2ZXIgZm9yIGNoYXJhY3RlcnMgd2hlbiBpdCBuZWVkcyBpbnB1dC4gIFRoZSBJL08KICAgICAgIGRyaXZlciBpcyBleHBlY3RlZCB0byByZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhlcmUgaXMgbm8gZGF0YQogICAgICAgYXZhaWxhYmxlLiAgRG9pbmcgc28gYWxsb3dzIGZvciB0aGUgZnV0dXJlIHBvc3NpYmlsaXR5IHRvIHRvdWNoCi0gICAgICB3YXRjaCBkb2cgaGFyZHdhcmUgaW4gc3VjaCBhIHdheSBhcyB0byBoYXZlIGEgdGFyZ2V0IHN5c3RlbSBub3QKKyAgICAgIHdhdGNoZG9nIGhhcmR3YXJlIGluIHN1Y2ggYSB3YXkgYXMgdG8gaGF2ZSBhIHRhcmdldCBzeXN0ZW0gbm90CiAgICAgICByZXNldCB3aGVuIHRoZXNlIGFyZSBlbmFibGVkLgogICAgICAgPC9wYXJhPgogICAgICAgPC9saXN0aXRlbT4KQEAgLTc3OSwyMSArNzc2LDI1IEBACiAgICAgICB0aGVpciAmbHQ7YXNtL2tnZGIuaCZndDsgZmlsZS4gIFRoZXNlIGFyZToKICAgICAgIDxpdGVtaXplZGxpc3Q+CiAgICAgICAgIDxsaXN0aXRlbT4KLQkgIDxwYXJhPgotCSAgTlVNUkVHQllURVM6IFRoZSBzaXplIGluIGJ5dGVzIG9mIGFsbCBvZiB0aGUgcmVnaXN0ZXJzLCBzbwotCSAgdGhhdCB3ZSBjYW4gZW5zdXJlIHRoZXkgd2lsbCBhbGwgZml0IGludG8gYSBwYWNrZXQuCi0JICA8L3BhcmE+Ci0JICA8cGFyYT4KLQkgIEJVRk1BWDogVGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGJ1ZmZlciBHREIgd2lsbCByZWFkIGludG8uCi0JICBUaGlzIG11c3QgYmUgbGFyZ2VyIHRoYW4gTlVNUkVHQllURVMuCi0JICA8L3BhcmE+Ci0JICA8cGFyYT4KLQkgIENBQ0hFX0ZMVVNIX0lTX1NBRkU6IFNldCB0byAxIGlmIGl0IGlzIGFsd2F5cyBzYWZlIHRvIGNhbGwKLQkgIGZsdXNoX2NhY2hlX3JhbmdlIG9yIGZsdXNoX2ljYWNoZV9yYW5nZS4gIE9uIHNvbWUgYXJjaGl0ZWN0dXJlcywKLQkgIHRoZXNlIGZ1bmN0aW9ucyBtYXkgbm90IGJlIHNhZmUgdG8gY2FsbCBvbiBTTVAgc2luY2Ugd2Uga2VlcCBvdGhlcgotCSAgQ1BVcyBpbiBhIGhvbGRpbmcgcGF0dGVybi4KLQkgIDwvcGFyYT4KLQk8L2xpc3RpdGVtPgorICAgICAgICAgIDxwYXJhPgorICAgICAgICAgIE5VTVJFR0JZVEVTOiBUaGUgc2l6ZSBpbiBieXRlcyBvZiBhbGwgb2YgdGhlIHJlZ2lzdGVycywgc28KKyAgICAgICAgICB0aGF0IHdlIGNhbiBlbnN1cmUgdGhleSB3aWxsIGFsbCBmaXQgaW50byBhIHBhY2tldC4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICBCVUZNQVg6IFRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBidWZmZXIgR0RCIHdpbGwgcmVhZCBpbnRvLgorICAgICAgICAgIFRoaXMgbXVzdCBiZSBsYXJnZXIgdGhhbiBOVU1SRUdCWVRFUy4KKyAgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgICA8cGFyYT4KKyAgICAgICAgICBDQUNIRV9GTFVTSF9JU19TQUZFOiBTZXQgdG8gMSBpZiBpdCBpcyBhbHdheXMgc2FmZSB0byBjYWxsCisgICAgICAgICAgZmx1c2hfY2FjaGVfcmFuZ2Ugb3IgZmx1c2hfaWNhY2hlX3JhbmdlLiAgT24gc29tZSBhcmNoaXRlY3R1cmVzLAorICAgICAgICAgIHRoZXNlIGZ1bmN0aW9ucyBtYXkgbm90IGJlIHNhZmUgdG8gY2FsbCBvbiBTTVAgc2luY2Ugd2Uga2VlcCBvdGhlcgorICAgICAgICAgIENQVXMgaW4gYSBob2xkaW5nIHBhdHRlcm4uCisgICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgogICAgICAgPC9pdGVtaXplZGxpc3Q+CiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4KQEAgLTgxMiw4ICs4MTMsOCBAQAogICA8cGFyYT4KICAgVGhlIGtnZGJvYyBkcml2ZXIgaXMgYWN0dWFsbHkgYSB2ZXJ5IHRoaW4gZHJpdmVyIHRoYXQgcmVsaWVzIG9uIHRoZQogICB1bmRlcmx5aW5nIGxvdyBsZXZlbCB0byB0aGUgaGFyZHdhcmUgZHJpdmVyIGhhdmluZyAicG9sbGluZyBob29rcyIKLSAgd2hpY2ggdGhlIHRvIHdoaWNoIHRoZSB0dHkgZHJpdmVyIGlzIGF0dGFjaGVkLiAgSW4gdGhlIGluaXRpYWwKLSAgaW1wbGVtZW50YXRpb24gb2Yga2dkYm9jIGl0IHRoZSBzZXJpYWxfY29yZSB3YXMgY2hhbmdlZCB0byBleHBvc2UgYQorICB0byB3aGljaCB0aGUgdHR5IGRyaXZlciBpcyBhdHRhY2hlZC4gIEluIHRoZSBpbml0aWFsCisgIGltcGxlbWVudGF0aW9uIG9mIGtnZGJvYyB0aGUgc2VyaWFsX2NvcmUgd2FzIGNoYW5nZWQgdG8gZXhwb3NlIGEKICAgbG93IGxldmVsIFVBUlQgaG9vayBmb3IgZG9pbmcgcG9sbGVkIG1vZGUgcmVhZGluZyBhbmQgd3JpdGluZyBvZiBhCiAgIHNpbmdsZSBjaGFyYWN0ZXIgd2hpbGUgaW4gYW4gYXRvbWljIGNvbnRleHQuICBXaGVuIGtnZGIgbWFrZXMgYW4gSS9PCiAgIHJlcXVlc3QgdG8gdGhlIGRlYnVnZ2VyLCBrZ2Rib2MgaW52b2tlcyBhIGNhbGxiYWNrIGluIHRoZSBzZXJpYWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvY29udHJvbHMueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9jb250cm9scy54bWwKaW5kZXggZTAxM2U0Yi4uNGU5NDYyZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9jb250cm9scy54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9jb250cm9scy54bWwKQEAgLTI2OTIsMTIgKzI2OTIsMTEgQEAKIAkgICAgICA8cm93PjxlbnRyeT48L2VudHJ5Pjwvcm93PgogCSAgICAgIDxyb3c+CiAJCTxlbnRyeSBzcGFubmFtZT0iaWQiPjxjb25zdGFudD5WNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0RFQ09ERVJfSDI2NF9ESVNQTEFZX0RFTEFZX0VOQUJMRTwvY29uc3RhbnQ+Jm5ic3A7PC9lbnRyeT4KLQkJPGVudHJ5PmludGVnZXI8L2VudHJ5PgotCSAgICAgIDwvcm93Pjxyb3c+PGVudHJ5IHNwYW5uYW1lPSJkZXNjciI+SWYgdGhlIGRpc3BsYXkgZGVsYXkgaXMgZW5hYmxlZCB0aGVuIHRoZSBkZWNvZGVyIGhhcyB0byByZXR1cm4gYQotQ0FQVFVSRSBidWZmZXIgYWZ0ZXIgcHJvY2Vzc2luZyBhIGNlcnRhaW4gbnVtYmVyIG9mIE9VVFBVVCBidWZmZXJzLiBJZiB0aGlzIG51bWJlciBpcyBsb3csIHRoZW4gaXQgbWF5IHJlc3VsdCBpbgotYnVmZmVycyBub3QgYmVpbmcgZGVxdWV1ZWQgaW4gZGlzcGxheSBvcmRlci4gSW4gYWRkaXRpb24gaGFyZHdhcmUgbWF5IHN0aWxsIHVzZSB0aG9zZSBidWZmZXJzIGFzIHJlZmVyZW5jZSwgdGh1cwotYXBwbGljYXRpb24gc2hvdWxkIG5vdCB3cml0ZSB0byB0aG9zZSBidWZmZXJzLiBUaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWQgZm9yIGV4YW1wbGUgZm9yIGdlbmVyYXRpbmcgdGh1bWJuYWlscyBvZiB2aWRlb3MuCi1BcHBsaWNhYmxlIHRvIHRoZSBIMjY0IGRlY29kZXIuCisJCTxlbnRyeT5ib29sZWFuPC9lbnRyeT4KKwkgICAgICA8L3Jvdz48cm93PjxlbnRyeSBzcGFubmFtZT0iZGVzY3IiPklmIHRoZSBkaXNwbGF5IGRlbGF5IGlzIGVuYWJsZWQgdGhlbiB0aGUgZGVjb2RlciBpcyBmb3JjZWQgdG8gcmV0dXJuIGEKK0NBUFRVUkUgYnVmZmVyIChkZWNvZGVkIGZyYW1lKSBhZnRlciBwcm9jZXNzaW5nIGEgY2VydGFpbiBudW1iZXIgb2YgT1VUUFVUIGJ1ZmZlcnMuIFRoZSBkZWxheSBjYW4gYmUgc2V0IHRocm91Z2gKKzxjb25zdGFudD5WNEwyX0NJRF9NUEVHX01GQzUxX1ZJREVPX0RFQ09ERVJfSDI2NF9ESVNQTEFZX0RFTEFZPC9jb25zdGFudD4uIFRoaXMgZmVhdHVyZSBjYW4gYmUgdXNlZCBmb3IgZXhhbXBsZQorZm9yIGdlbmVyYXRpbmcgdGh1bWJuYWlscyBvZiB2aWRlb3MuIEFwcGxpY2FibGUgdG8gdGhlIEgyNjQgZGVjb2Rlci4KIAkgICAgICA8L2VudHJ5PgogCSAgICAgIDwvcm93PgogCSAgICAgIDxyb3c+PGVudHJ5PjwvZW50cnk+PC9yb3c+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1zcmdnYjEwLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXNyZ2diMTAueG1sCmluZGV4IGMxYzYyYTkuLmYzNGQwM2UgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXNyZ2diMTAueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXNyZ2diMTAueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgICAgICA8cmVmc2VjdDE+CiAJPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KIAotCTxwYXJhPlRoZSBmb2xsb3dpbmcgZm91ciBwaXhlbCBmb3JtYXRzIGFyZSByYXcgc1JHQiAvIEJheWVyIGZvcm1hdHMgd2l0aAorCTxwYXJhPlRoZXNlIGZvdXIgcGl4ZWwgZm9ybWF0cyBhcmUgcmF3IHNSR0IgLyBCYXllciBmb3JtYXRzIHdpdGgKIDEwIGJpdHMgcGVyIGNvbG91ci4gRWFjaCBjb2xvdXIgY29tcG9uZW50IGlzIHN0b3JlZCBpbiBhIDE2LWJpdCB3b3JkLCB3aXRoIDYKIHVudXNlZCBoaWdoIGJpdHMgZmlsbGVkIHdpdGggemVyb3MuIEVhY2ggbi1waXhlbCByb3cgY29udGFpbnMgbi8yIGdyZWVuIHNhbXBsZXMKIGFuZCBuLzIgYmx1ZSBvciByZWQgc2FtcGxlcywgd2l0aCBhbHRlcm5hdGluZyByZWQgYW5kIGJsdWUgcm93cy4gQnl0ZXMgYXJlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1zcmdnYjEwYWxhdzgueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtc3JnZ2IxMGFsYXc4LnhtbAppbmRleCAyOWFjYzIwLi5kMmU1ODQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1zcmdnYjEwYWxhdzgueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXNyZ2diMTBhbGF3OC54bWwKQEAgLTI1LDcgKzI1LDcgQEAKIAkgIDwvcmVmbmFtZWRpdj4KIAkgIDxyZWZzZWN0MT4KIAkgICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KLQkgICAgPHBhcmE+VGhlIGZvbGxvd2luZyBmb3VyIHBpeGVsIGZvcm1hdHMgYXJlIHJhdyBzUkdCIC8gQmF5ZXIKKwkgICAgPHBhcmE+VGhlc2UgZm91ciBwaXhlbCBmb3JtYXRzIGFyZSByYXcgc1JHQiAvIEJheWVyCiAJICAgIGZvcm1hdHMgd2l0aCAxMCBiaXRzIHBlciBjb2xvciBjb21wcmVzc2VkIHRvIDggYml0cyBlYWNoLAogCSAgICB1c2luZyB0aGUgQS1MQVcgYWxnb3JpdGhtLiBFYWNoIGNvbG9yIGNvbXBvbmVudCBjb25zdW1lcyA4CiAJICAgIGJpdHMgb2YgbWVtb3J5LiBJbiBvdGhlciByZXNwZWN0cyB0aGlzIGZvcm1hdCBpcyBzaW1pbGFyIHRvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1zcmdnYjEwZHBjbTgueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtc3JnZ2IxMGRwY204LnhtbAppbmRleCAyZDNmMGIxYS4uYmRlODk4NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtc3JnZ2IxMGRwY204LnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1zcmdnYjEwZHBjbTgueG1sCkBAIC0xOCw3ICsxOCw3IEBACiAgICAgICA8cmVmc2VjdDE+CiAJPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KIAotCTxwYXJhPlRoZSBmb2xsb3dpbmcgZm91ciBwaXhlbCBmb3JtYXRzIGFyZSByYXcgc1JHQiAvIEJheWVyIGZvcm1hdHMKKwk8cGFyYT5UaGVzZSBmb3VyIHBpeGVsIGZvcm1hdHMgYXJlIHJhdyBzUkdCIC8gQmF5ZXIgZm9ybWF0cwogCXdpdGggMTAgYml0cyBwZXIgY29sb3VyIGNvbXByZXNzZWQgdG8gOCBiaXRzIGVhY2gsIHVzaW5nIERQQ00KIAljb21wcmVzc2lvbi4gRFBDTSwgZGlmZmVyZW50aWFsIHB1bHNlLWNvZGUgbW9kdWxhdGlvbiwgaXMgbG9zc3kuCiAJRWFjaCBjb2xvdXIgY29tcG9uZW50IGNvbnN1bWVzIDggYml0cyBvZiBtZW1vcnkuIEluIG90aGVyIHJlc3BlY3RzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1zcmdnYjEwcC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1zcmdnYjEwcC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBhYTYzNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LXNyZ2diMTBwLnhtbApAQCAtMCwwICsxLDk5IEBACisgICAgPHJlZmVudHJ5IGlkPSJwaXhmbXQtc3JnZ2IxMHAiPgorICAgICAgPHJlZm1ldGE+CisJPHJlZmVudHJ5dGl0bGU+VjRMMl9QSVhfRk1UX1NSR0dCMTBQICgncFJBQScpLAorCSBWNEwyX1BJWF9GTVRfU0dSQkcxMFAgKCdwZ0FBJyksCisJIFY0TDJfUElYX0ZNVF9TR0JSRzEwUCAoJ3BHQUEnKSwKKwkgVjRMMl9QSVhfRk1UX1NCR0dSMTBQICgncEJBQScpLAorCSA8L3JlZmVudHJ5dGl0bGU+CisJJm1hbnZvbDsKKyAgICAgIDwvcmVmbWV0YT4KKyAgICAgIDxyZWZuYW1lZGl2PgorCTxyZWZuYW1lIGlkPSJWNEwyLVBJWC1GTVQtU1JHR0IxMFAiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU1JHR0IxMFA8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmbmFtZSBpZD0iVjRMMi1QSVgtRk1ULVNHUkJHMTBQIj48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1NHUkJHMTBQPC9jb25zdGFudD48L3JlZm5hbWU+CisJPHJlZm5hbWUgaWQ9IlY0TDItUElYLUZNVC1TR0JSRzEwUCI+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TR0JSRzEwUDwvY29uc3RhbnQ+PC9yZWZuYW1lPgorCTxyZWZuYW1lIGlkPSJWNEwyLVBJWC1GTVQtU0JHR1IxMFAiPjxjb25zdGFudD5WNEwyX1BJWF9GTVRfU0JHR1IxMFA8L2NvbnN0YW50PjwvcmVmbmFtZT4KKwk8cmVmcHVycG9zZT4xMC1iaXQgcGFja2VkIEJheWVyIGZvcm1hdHM8L3JlZnB1cnBvc2U+CisgICAgICA8L3JlZm5hbWVkaXY+CisgICAgICA8cmVmc2VjdDE+CisJPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRsZT4KKworCTxwYXJhPlRoZXNlIGZvdXIgcGl4ZWwgZm9ybWF0cyBhcmUgcGFja2VkIHJhdyBzUkdCIC8KKwlCYXllciBmb3JtYXRzIHdpdGggMTAgYml0cyBwZXIgY29sb3VyLiBFdmVyeSBmb3VyIGNvbnNlY3V0aXZlCisJY29sb3VyIGNvbXBvbmVudHMgYXJlIHBhY2tlZCBpbnRvIDUgYnl0ZXMuIEVhY2ggb2YgdGhlIGZpcnN0IDQKKwlieXRlcyBjb250YWluIHRoZSA4IGhpZ2ggb3JkZXIgYml0cyBvZiB0aGUgcGl4ZWxzLCBhbmQgdGhlCisJZmlmdGggYnl0ZSBjb250YWlucyB0aGUgdHdvIGxlYXN0IHNpZ25pZmljYW50cyBiaXRzIG9mIGVhY2gKKwlwaXhlbCwgaW4gdGhlIHNhbWUgb3JkZXIuPC9wYXJhPgorCisJPHBhcmE+RWFjaCBuLXBpeGVsIHJvdyBjb250YWlucyBuLzIgZ3JlZW4gc2FtcGxlcyBhbmQgbi8yIGJsdWUKKwlvciByZWQgc2FtcGxlcywgd2l0aCBhbHRlcm5hdGluZyBncmVlbi1yZWQgYW5kIGdyZWVuLWJsdWUKKwlyb3dzLiBUaGV5IGFyZSBjb252ZW50aW9uYWxseSBkZXNjcmliZWQgYXMgR1JHUi4uLiBCR0JHLi4uLAorCVJHUkcuLi4gR0JHQi4uLiwgZXRjLiBCZWxvdyBpcyBhbiBleGFtcGxlIG9mIG9uZSBvZiB0aGVzZQorCWZvcm1hdHM6PC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9TQkdHUjEwUDwvY29uc3RhbnQ+IDQgJnRpbWVzOyA0CisgICAgICBwaXhlbCBpbWFnZTwvdGl0bGU+CisKKyAgICAgIDxmb3JtYWxwYXJhPgorCTx0aXRsZT5CeXRlIE9yZGVyLjwvdGl0bGU+CisJPHBhcmE+RWFjaCBjZWxsIGlzIG9uZSBieXRlLgorCSAgPGluZm9ybWFsdGFibGUgZnJhbWU9InRvcGJvdCIgY29sc2VwPSIxIiByb3dzZXA9IjEiPgorCSAgICA8dGdyb3VwIGNvbHM9IjUiIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMSI+CisJICAgICAgPGNvbHNwZWMgYWxpZ249ImxlZnQiIGNvbHdpZHRoPSIyKiIgLz4KKwkgICAgICA8dGJvZHkgdmFsaWduPSJ0b3AiPgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDswOjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAwaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjAxaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAyaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjAzaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjAwbG93PC9zdWJzY3JpcHQ+KGJpdHMgNy0tNikKKwkJCSBHPHN1YnNjcmlwdD4wMWxvdzwvc3Vic2NyaXB0PihiaXRzIDUtLTQpCisJCQkgQjxzdWJzY3JpcHQ+MDJsb3c8L3N1YnNjcmlwdD4oYml0cyAzLS0yKQorCQkJIEc8c3Vic2NyaXB0PjAzbG93PC9zdWJzY3JpcHQ+KGJpdHMgMS0tMCkKKwkJICA8L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7NTo8L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4xMGhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4xMWhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4xMmhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5SPHN1YnNjcmlwdD4xM2hpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5HPHN1YnNjcmlwdD4xMGxvdzwvc3Vic2NyaXB0PihiaXRzIDctLTYpCisJCQkgUjxzdWJzY3JpcHQ+MTFsb3c8L3N1YnNjcmlwdD4oYml0cyA1LS00KQorCQkJIEc8c3Vic2NyaXB0PjEybG93PC9zdWJzY3JpcHQ+KGJpdHMgMy0tMikKKwkJCSBSPHN1YnNjcmlwdD4xM2xvdzwvc3Vic2NyaXB0PihiaXRzIDEtLTApCisJCSAgPC9lbnRyeT4KKwkJPC9yb3c+CisJCTxyb3c+CisJCSAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzEwOjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjIwaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjIxaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjIyaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5Pkc8c3Vic2NyaXB0PjIzaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PkI8c3Vic2NyaXB0PjIwbG93PC9zdWJzY3JpcHQ+KGJpdHMgNy0tNikKKwkJCSBHPHN1YnNjcmlwdD4yMWxvdzwvc3Vic2NyaXB0PihiaXRzIDUtLTQpCisJCQkgQjxzdWJzY3JpcHQ+MjJsb3c8L3N1YnNjcmlwdD4oYml0cyAzLS0yKQorCQkJIEc8c3Vic2NyaXB0PjIzbG93PC9zdWJzY3JpcHQ+KGJpdHMgMS0tMCkKKwkJICA8L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTU6PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzBoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+UjxzdWJzY3JpcHQ+MzFoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+UjxzdWJzY3JpcHQ+MzNoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+RzxzdWJzY3JpcHQ+MzBsb3c8L3N1YnNjcmlwdD4oYml0cyA3LS02KQorCQkJIFI8c3Vic2NyaXB0PjMxbG93PC9zdWJzY3JpcHQ+KGJpdHMgNS0tNCkKKwkJCSBHPHN1YnNjcmlwdD4zMmxvdzwvc3Vic2NyaXB0PihiaXRzIDMtLTIpCisJCQkgUjxzdWJzY3JpcHQ+MzNsb3c8L3N1YnNjcmlwdD4oYml0cyAxLS0wKQorCQkgIDwvZW50cnk+CisJCTwvcm93PgorCSAgICAgIDwvdGJvZHk+CisJICAgIDwvdGdyb3VwPgorCSAgPC9pbmZvcm1hbHRhYmxlPgorCTwvcGFyYT4KKyAgICAgIDwvZm9ybWFscGFyYT4KKyAgICA8L2V4YW1wbGU+CisgIDwvcmVmc2VjdDE+Cis8L3JlZmVudHJ5PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQtc3JnZ2IxMi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1zcmdnYjEyLnhtbAppbmRleCA5Njk0N2YxLi4wYzhlNGFkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1zcmdnYjEyLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC1zcmdnYjEyLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICAgICAgPHJlZnNlY3QxPgogCTx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CiAKLQk8cGFyYT5UaGUgZm9sbG93aW5nIGZvdXIgcGl4ZWwgZm9ybWF0cyBhcmUgcmF3IHNSR0IgLyBCYXllciBmb3JtYXRzIHdpdGgKKwk8cGFyYT5UaGVzZSBmb3VyIHBpeGVsIGZvcm1hdHMgYXJlIHJhdyBzUkdCIC8gQmF5ZXIgZm9ybWF0cyB3aXRoCiAxMiBiaXRzIHBlciBjb2xvdXIuIEVhY2ggY29sb3VyIGNvbXBvbmVudCBpcyBzdG9yZWQgaW4gYSAxNi1iaXQgd29yZCwgd2l0aCA0CiB1bnVzZWQgaGlnaCBiaXRzIGZpbGxlZCB3aXRoIHplcm9zLiBFYWNoIG4tcGl4ZWwgcm93IGNvbnRhaW5zIG4vMiBncmVlbiBzYW1wbGVzCiBhbmQgbi8yIGJsdWUgb3IgcmVkIHNhbXBsZXMsIHdpdGggYWx0ZXJuYXRpbmcgcmVkIGFuZCBibHVlIHJvd3MuIEJ5dGVzIGFyZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC9waXhmbXQueG1sCmluZGV4IGQ1ZWNhNGIuLjVlMDM1MmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvcGl4Zm10LnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3BpeGZtdC54bWwKQEAgLTE0MDUsNiArMTQwNSw3IEBACiAgICAgJnN1Yi1zcmdnYjg7CiAgICAgJnN1Yi1zYmdncjE2OwogICAgICZzdWItc3JnZ2IxMDsKKyAgICAmc3ViLXNyZ2diMTBwOwogICAgICZzdWItc3JnZ2IxMGFsYXc4OwogICAgICZzdWItc3JnZ2IxMGRwY204OwogICAgICZzdWItc3JnZ2IxMjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWR2LXRpbWluZ3MtY2FwLnhtbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWR2LXRpbWluZ3MtY2FwLnhtbAppbmRleCAyOGE4YzFlLi5hMjAxN2JmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1kdi10aW1pbmdzLWNhcC54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZHYtdGltaW5ncy1jYXAueG1sCkBAIC0yMTIsMTEgKzIxMiwzIEBACiAgICAgJnJldHVybi12YWx1ZTsKICAgPC9yZWZzZWN0MT4KIDwvcmVmZW50cnk+Ci0KLTwhLS0KLUxvY2FsIFZhcmlhYmxlczoKLW1vZGU6IHNnbWwKLXNnbWwtcGFyZW50LWRvY3VtZW50OiAidjRsMi5zZ21sIgotaW5kZW50LXRhYnMtbW9kZTogbmlsCi1FbmQ6Ci0tLT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWVudW0tZHYtdGltaW5ncy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEvdjRsL3ZpZGlvYy1lbnVtLWR2LXRpbWluZ3MueG1sCmluZGV4IGI5ZmRmZWEuLjZlM2NhZGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS92NGwvdmlkaW9jLWVudW0tZHYtdGltaW5ncy54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL21lZGlhL3Y0bC92aWRpb2MtZW51bS1kdi10aW1pbmdzLnhtbApAQCAtMTMxLDExICsxMzEsMyBAQAogICAgIDwvdmFyaWFibGVsaXN0PgogICA8L3JlZnNlY3QxPgogPC9yZWZlbnRyeT4KLQotPCEtLQotTG9jYWwgVmFyaWFibGVzOgotbW9kZTogc2dtbAotc2dtbC1wYXJlbnQtZG9jdW1lbnQ6ICJ2NGwyLnNnbWwiCi1pbmRlbnQtdGFicy1tb2RlOiBuaWwKLUVuZDoKLS0tPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3N0YWxsd2Fybi50eHQKaW5kZXggZWQxODZhOS4uYjU3YzBjMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9SQ1Uvc3RhbGx3YXJuLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL1JDVS9zdGFsbHdhcm4udHh0CkBAIC0xNSw3ICsxNSw3IEBACiAJMjEgc2Vjb25kcy4KIAogCVRoaXMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgbWF5IGJlIGNoYW5nZWQgYXQgcnVudGltZSB2aWEgdGhlCi0JL3N5cy9tb2R1bGUvcmN1dHJlZS9wYXJhbWV0ZXJzL3JjdV9jcHVfc3RhbGxfdGltZW91dCwgaG93ZXZlcgorCS9zeXMvbW9kdWxlL3JjdXBkYXRlL3BhcmFtZXRlcnMvcmN1X2NwdV9zdGFsbF90aW1lb3V0LCBob3dldmVyCiAJdGhpcyBwYXJhbWV0ZXIgaXMgY2hlY2tlZCBvbmx5IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBjeWNsZS4KIAlTbyBpZiB5b3UgYXJlIDEwIHNlY29uZHMgaW50byBhIDQwLXNlY29uZCBzdGFsbCwgc2V0dGluZyB0aGlzCiAJc3lzZnMgcGFyYW1ldGVyIHRvIChzYXkpIGZpdmUgd2lsbCBzaG9ydGVuIHRoZSB0aW1lb3V0IGZvciB0aGUKQEAgLTE1Miw2ICsxNTIsMTUgQEAKICJEIiBpbmRpY2F0ZXMgdGhhdCBkeW50aWNrLWlkbGUgcHJvY2Vzc2luZyBpcyBlbmFibGVkICgiLiIgaXMgcHJpbnRlZAogb3RoZXJ3aXNlLCBmb3IgZXhhbXBsZSwgaWYgZGlzYWJsZWQgdmlhIHRoZSAibm9oej0iIGtlcm5lbCBib290IHBhcmFtZXRlcikuCiAKK0lmIHRoZSByZWxldmFudCBncmFjZS1wZXJpb2Qga3RocmVhZCBoYXMgYmVlbiB1bmFibGUgdG8gcnVuIHByaW9yIHRvCit0aGUgc3RhbGwgd2FybmluZywgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGxpbmUgaXMgcHJpbnRlZDoKKworCXJjdV9wcmVlbXB0IGt0aHJlYWQgc3RhcnZlZCBmb3IgMjAyMyBqaWZmaWVzIQorCitTdGFydmluZyB0aGUgZ3JhY2UtcGVyaW9kIGt0aHJlYWRzIG9mIENQVSB0aW1lIGNhbiBvZiBjb3Vyc2UgcmVzdWx0IGluCitSQ1UgQ1BVIHN0YWxsIHdhcm5pbmdzIGV2ZW4gd2hlbiBhbGwgQ1BVcyBhbmQgdGFza3MgaGF2ZSBwYXNzZWQgdGhyb3VnaAordGhlIHJlcXVpcmVkIHF1aWVzY2VudCBzdGF0ZXMuCisKIAogTXVsdGlwbGUgV2FybmluZ3MgRnJvbSBPbmUgU3RhbGwKIApAQCAtMTg3LDYgKzE5NiwxMSBAQAogCWJlaGF2aW9yLCB5b3UgbWlnaHQgbmVlZCB0byByZXBsYWNlIHNvbWUgb2YgdGhlIGNvbmRfcmVzY2hlZCgpCiAJY2FsbHMgd2l0aCBjYWxscyB0byBjb25kX3Jlc2NoZWRfcmN1X3FzKCkuCiAKK28JQW55dGhpbmcgdGhhdCBwcmV2ZW50cyBSQ1UncyBncmFjZS1wZXJpb2Qga3RocmVhZHMgZnJvbSBydW5uaW5nLgorCVRoaXMgY2FuIHJlc3VsdCBpbiB0aGUgIkFsbCBRU2VzIHNlZW4iIGNvbnNvbGUtbG9nIG1lc3NhZ2UuCisJVGhpcyBtZXNzYWdlIHdpbGwgaW5jbHVkZSBpbmZvcm1hdGlvbiBvbiB3aGVuIHRoZSBrdGhyZWFkIGxhc3QKKwlyYW4gYW5kIGhvdyBvZnRlbiBpdCBzaG91bGQgYmUgZXhwZWN0ZWQgdG8gcnVuLgorCiBvCUEgQ1BVLWJvdW5kIHJlYWwtdGltZSB0YXNrIGluIGEgQ09ORklHX1BSRUVNUFQga2VybmVsLCB3aGljaCBtaWdodAogCWhhcHBlbiB0byBwcmVlbXB0IGEgbG93LXByaW9yaXR5IHRhc2sgaW4gdGhlIG1pZGRsZSBvZiBhbiBSQ1UKIAlyZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbi4gICBUaGlzIGlzIGVzcGVjaWFsbHkgZGFtYWdpbmcgaWYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUkNVL3RyYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vUkNVL3RyYWNlLnR4dAppbmRleCBiNjNiOWJiLi4wODY1MWRhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1JDVS90cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9SQ1UvdHJhY2UudHh0CkBAIC01NiwxNCArNTYsMTQgQEAKIAogVGhlIG91dHB1dCBvZiAiY2F0IHJjdS9yY3VfcHJlZW1wdC9yY3VkYXRhIiBsb29rcyBhcyBmb2xsb3dzOgogCi0gIDAhYz0zMDQ1NSBnPTMwNDU2IHBxPTEgcXA9MSBkdD0xMjY1MzUvMTQwMDAwMDAwMDAwMDAwLzAgZGY9MjAwMiBvZj00IHFsPTAvMCBxcz1OLi4uIGI9MTAgY2k9NzQ1NzIgbmNpPTAgY289MTEzMSBjYT03MTYKLSAgMSFjPTMwNzE5IGc9MzA3MjAgcHE9MSBxcD0wIGR0PTEzMjAwNy8xNDAwMDAwMDAwMDAwMDAvMCBkZj0xODc0IG9mPTEwIHFsPTAvMCBxcz1OLi4uIGI9MTAgY2k9MTIzMjA5IG5jaT0wIGNvPTY4NSBjYT05ODIKLSAgMiFjPTMwMTUwIGc9MzAxNTEgcHE9MSBxcD0xIGR0PTEzODUzNy8xNDAwMDAwMDAwMDAwMDAvMCBkZj0xNzA3IG9mPTggcWw9MC8wIHFzPU4uLi4gYj0xMCBjaT04MDEzMiBuY2k9MCBjbz0xMzI4IGNhPTE0NTgKLSAgMyBjPTMxMjQ5IGc9MzEyNTAgcHE9MSBxcD0wIGR0PTEwNzI1NS8xNDAwMDAwMDAwMDAwMDAvMCBkZj0xNzQ5IG9mPTYgcWw9MC80NTAgcXM9TlJXLiBiPTEwIGNpPTE1MTcwMCBuY2k9MCBjbz01MDkgY2E9NjIyCi0gIDQhYz0yOTUwMiBnPTI5NTAzIHBxPTEgcXA9MSBkdD04MzY0Ny8xNDAwMDAwMDAwMDAwMDAvMCBkZj05NjUgb2Y9NSBxbD0wLzAgcXM9Ti4uLiBiPTEwIGNpPTY1NjQzIG5jaT0wIGNvPTEzNzMgY2E9MTUyMQotICA1IGM9MzEyMDEgZz0zMTIwMiBwcT0xIHFwPTEgZHQ9NzA0MjIvMC8wIGRmPTUzNSBvZj03IHFsPTAvMCBxcz0uLi4uIGI9MTAgY2k9NTg1MDAgbmNpPTAgY289NzY0IGNhPTY5OAotICA2IWM9MzAyNTMgZz0zMDI1NCBwcT0xIHFwPTEgZHQ9OTUzNjMvMTQwMDAwMDAwMDAwMDAwLzAgZGY9NzgwIG9mPTUgcWw9MC8wIHFzPU4uLi4gYj0xMCBjaT0xMDA2MDcgbmNpPTAgY289MTQxNCBjYT0xMzUzCi0gIDcgYz0zMTE3OCBnPTMxMTc4IHBxPTEgcXA9MCBkdD05MTUzNi8wLzAgZGY9NTQ3IG9mPTQgcWw9MC8wIHFzPS4uLi4gYj0xMCBjaT0xMDk4MTkgbmNpPTAgY289MTExNSBjYT05NjkKKyAgMCFjPTMwNDU1IGc9MzA0NTYgcHE9MS8wIHFwPTEgZHQ9MTI2NTM1LzE0MDAwMDAwMDAwMDAwMC8wIGRmPTIwMDIgb2Y9NCBxbD0wLzAgcXM9Ti4uLiBiPTEwIGNpPTc0NTcyIG5jaT0wIGNvPTExMzEgY2E9NzE2CisgIDEhYz0zMDcxOSBnPTMwNzIwIHBxPTEvMCBxcD0wIGR0PTEzMjAwNy8xNDAwMDAwMDAwMDAwMDAvMCBkZj0xODc0IG9mPTEwIHFsPTAvMCBxcz1OLi4uIGI9MTAgY2k9MTIzMjA5IG5jaT0wIGNvPTY4NSBjYT05ODIKKyAgMiFjPTMwMTUwIGc9MzAxNTEgcHE9MS8xIHFwPTEgZHQ9MTM4NTM3LzE0MDAwMDAwMDAwMDAwMC8wIGRmPTE3MDcgb2Y9OCBxbD0wLzAgcXM9Ti4uLiBiPTEwIGNpPTgwMTMyIG5jaT0wIGNvPTEzMjggY2E9MTQ1OAorICAzIGM9MzEyNDkgZz0zMTI1MCBwcT0xLzEgcXA9MCBkdD0xMDcyNTUvMTQwMDAwMDAwMDAwMDAwLzAgZGY9MTc0OSBvZj02IHFsPTAvNDUwIHFzPU5SVy4gYj0xMCBjaT0xNTE3MDAgbmNpPTAgY289NTA5IGNhPTYyMgorICA0IWM9Mjk1MDIgZz0yOTUwMyBwcT0xLzAgcXA9MSBkdD04MzY0Ny8xNDAwMDAwMDAwMDAwMDAvMCBkZj05NjUgb2Y9NSBxbD0wLzAgcXM9Ti4uLiBiPTEwIGNpPTY1NjQzIG5jaT0wIGNvPTEzNzMgY2E9MTUyMQorICA1IGM9MzEyMDEgZz0zMTIwMiBwcT0xLzAgcXA9MSBkdD03MDQyMi8wLzAgZGY9NTM1IG9mPTcgcWw9MC8wIHFzPS4uLi4gYj0xMCBjaT01ODUwMCBuY2k9MCBjbz03NjQgY2E9Njk4CisgIDYhYz0zMDI1MyBnPTMwMjU0IHBxPTEvMCBxcD0xIGR0PTk1MzYzLzE0MDAwMDAwMDAwMDAwMC8wIGRmPTc4MCBvZj01IHFsPTAvMCBxcz1OLi4uIGI9MTAgY2k9MTAwNjA3IG5jaT0wIGNvPTE0MTQgY2E9MTM1MworICA3IGM9MzExNzggZz0zMTE3OCBwcT0xLzAgcXA9MCBkdD05MTUzNi8wLzAgZGY9NTQ3IG9mPTQgcWw9MC8wIHFzPS4uLi4gYj0xMCBjaT0xMDk4MTkgbmNpPTAgY289MTExNSBjYT05NjkKIAogVGhpcyBmaWxlIGhhcyBvbmUgbGluZSBwZXIgQ1BVLCBvciBlaWdodCBmb3IgdGhpcyA4LUNQVSBzeXN0ZW0uCiBUaGUgZmllbGRzIGFyZSBhcyBmb2xsb3dzOgpAQCAtMTg4LDE0ICsxODgsMTQgQEAKIEtlcm5lbHMgY29tcGlsZWQgd2l0aCBDT05GSUdfUkNVX0JPT1NUPXkgZGlzcGxheSB0aGUgZm9sbG93aW5nIGZyb20KIC9kZWJ1Zy9yY3UvcmN1X3ByZWVtcHQvcmN1ZGF0YToKIAotICAwIWM9MTI4NjUgZz0xMjg2NiBwcT0xIHFwPTEgZHQ9ODMxMTMvMTQwMDAwMDAwMDAwMDAwLzAgZGY9Mjg4IG9mPTExIHFsPTAvMCBxcz1OLi4uIGt0PTAvTyBrdGw9OTQ0IGI9MTAgY2k9NjA3MDkgbmNpPTAgY289NzQ4IGNhPTg3MQotICAxIGM9MTQ0MDcgZz0xNDQwOCBwcT0xIHFwPTAgZHQ9MTAwNjc5LzE0MDAwMDAwMDAwMDAwMC8wIGRmPTM3OCBvZj03IHFsPTAvMTE5IHFzPU5SVy4ga3Q9MC9XIGt0bD05YjYgYj0xMCBjaT0xMDk3NDAgbmNpPTAgY289NTg5IGNhPTQ4NQotICAyIGM9MTQ0MDcgZz0xNDQwOCBwcT0xIHFwPTAgZHQ9MTA1NDg2LzAvMCBkZj05MCBvZj05IHFsPTAvODkgcXM9TlJXLiBrdD0wL1cga3RsPWMwYyBiPTEwIGNpPTgzMTEzIG5jaT0wIGNvPTUzMyBjYT00OTAKLSAgMyBjPTE0NDA3IGc9MTQ0MDggcHE9MSBxcD0wIGR0PTEwNzEzOC8wLzAgZGY9MTQyIG9mPTggcWw9MC8xODggcXM9TlJXLiBrdD0wL1cga3RsPWI5NiBiPTEwIGNpPTEyMTExNCBuY2k9MCBjbz00MjYgY2E9MjkwCi0gIDQgYz0xNDQwNSBnPTE0NDA2IHBxPTEgcXA9MSBkdD01MDIzOC8wLzAgZGY9NzA2IG9mPTcgcWw9MC8wIHFzPS4uLi4ga3Q9MC9XIGt0bD04MTIgYj0xMCBjaT0zNDkyOSBuY2k9MCBjbz02NDMgY2E9MTE0Ci0gIDUhYz0xNDE2OCBnPTE0MTY5IHBxPTEgcXA9MCBkdD00NTQ2NS8xNDAwMDAwMDAwMDAwMDAvMCBkZj0xNjEgb2Y9MTEgcWw9MC8wIHFzPU4uLi4ga3Q9MC9PIGt0bD1iNGQgYj0xMCBjaT00NzcxMiBuY2k9MCBjbz02NzcgY2E9NzIyCi0gIDYgYz0xNDQwNCBnPTE0NDA1IHBxPTEgcXA9MCBkdD01OTQ1NC8wLzAgZGY9OTQgb2Y9NiBxbD0wLzAgcXM9Li4uLiBrdD0wL1cga3RsPWU1NyBiPTEwIGNpPTU1NTk3IG5jaT0wIGNvPTcwMSBjYT04MTEKLSAgNyBjPTE0NDA3IGc9MTQ0MDggcHE9MSBxcD0xIGR0PTY4ODUwLzAvMCBkZj0zMSBvZj04IHFsPTAvMCBxcz0uLi4uIGt0PTAvVyBrdGw9MTRiZCBiPTEwIGNpPTc3NDc1IG5jaT0wIGNvPTUwOCBjYT0xMDQyCisgIDAhYz0xMjg2NSBnPTEyODY2IHBxPTEvMCBxcD0xIGR0PTgzMTEzLzE0MDAwMDAwMDAwMDAwMC8wIGRmPTI4OCBvZj0xMSBxbD0wLzAgcXM9Ti4uLiBrdD0wL08ga3RsPTk0NCBiPTEwIGNpPTYwNzA5IG5jaT0wIGNvPTc0OCBjYT04NzEKKyAgMSBjPTE0NDA3IGc9MTQ0MDggcHE9MS8wIHFwPTAgZHQ9MTAwNjc5LzE0MDAwMDAwMDAwMDAwMC8wIGRmPTM3OCBvZj03IHFsPTAvMTE5IHFzPU5SVy4ga3Q9MC9XIGt0bD05YjYgYj0xMCBjaT0xMDk3NDAgbmNpPTAgY289NTg5IGNhPTQ4NQorICAyIGM9MTQ0MDcgZz0xNDQwOCBwcT0xLzAgcXA9MCBkdD0xMDU0ODYvMC8wIGRmPTkwIG9mPTkgcWw9MC84OSBxcz1OUlcuIGt0PTAvVyBrdGw9YzBjIGI9MTAgY2k9ODMxMTMgbmNpPTAgY289NTMzIGNhPTQ5MAorICAzIGM9MTQ0MDcgZz0xNDQwOCBwcT0xLzAgcXA9MCBkdD0xMDcxMzgvMC8wIGRmPTE0MiBvZj04IHFsPTAvMTg4IHFzPU5SVy4ga3Q9MC9XIGt0bD1iOTYgYj0xMCBjaT0xMjExMTQgbmNpPTAgY289NDI2IGNhPTI5MAorICA0IGM9MTQ0MDUgZz0xNDQwNiBwcT0xLzAgcXA9MSBkdD01MDIzOC8wLzAgZGY9NzA2IG9mPTcgcWw9MC8wIHFzPS4uLi4ga3Q9MC9XIGt0bD04MTIgYj0xMCBjaT0zNDkyOSBuY2k9MCBjbz02NDMgY2E9MTE0CisgIDUhYz0xNDE2OCBnPTE0MTY5IHBxPTEvMCBxcD0wIGR0PTQ1NDY1LzE0MDAwMDAwMDAwMDAwMC8wIGRmPTE2MSBvZj0xMSBxbD0wLzAgcXM9Ti4uLiBrdD0wL08ga3RsPWI0ZCBiPTEwIGNpPTQ3NzEyIG5jaT0wIGNvPTY3NyBjYT03MjIKKyAgNiBjPTE0NDA0IGc9MTQ0MDUgcHE9MS8wIHFwPTAgZHQ9NTk0NTQvMC8wIGRmPTk0IG9mPTYgcWw9MC8wIHFzPS4uLi4ga3Q9MC9XIGt0bD1lNTcgYj0xMCBjaT01NTU5NyBuY2k9MCBjbz03MDEgY2E9ODExCisgIDcgYz0xNDQwNyBnPTE0NDA4IHBxPTEvMCBxcD0xIGR0PTY4ODUwLzAvMCBkZj0zMSBvZj04IHFsPTAvMCBxcz0uLi4uIGt0PTAvVyBrdGw9MTRiZCBiPTEwIGNpPTc3NDc1IG5jaT0wIGNvPTUwOCBjYT0xMDQyCiAKIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgb3V0cHV0IGRpc2N1c3NlZCBhYm92ZSwgYnV0IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcKIGFkZGl0aW9uYWwgZmllbGRzOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKaW5kZXggMWZhMWNhYS4uNDQ3NjcxYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcworKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCkBAIC0xMCwyNyArMTAsNDkgQEAKIHdpdGggInRoZSBzeXN0ZW0uIiAgVGhpcyB0ZXh0IGlzIGEgY29sbGVjdGlvbiBvZiBzdWdnZXN0aW9ucyB3aGljaAogY2FuIGdyZWF0bHkgaW5jcmVhc2UgdGhlIGNoYW5jZXMgb2YgeW91ciBjaGFuZ2UgYmVpbmcgYWNjZXB0ZWQuCiAKLVJlYWQgRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QgZm9yIGEgbGlzdCBvZiBpdGVtcyB0byBjaGVjawotYmVmb3JlIHN1Ym1pdHRpbmcgY29kZS4gIElmIHlvdSBhcmUgc3VibWl0dGluZyBhIGRyaXZlciwgYWxzbyByZWFkCi1Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzLgorVGhpcyBkb2N1bWVudCBjb250YWlucyBhIGxhcmdlIG51bWJlciBvZiBzdWdnZXN0aW9ucyBpbiBhIHJlbGF0aXZlbHkgdGVyc2UKK2Zvcm1hdC4gIEZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiBob3cgdGhlIGtlcm5lbCBkZXZlbG9wbWVudCBwcm9jZXNzCit3b3Jrcywgc2VlIERvY3VtZW50YXRpb24vZGV2ZWxvcG1lbnQtcHJvY2Vzcy4gIEFsc28sIHJlYWQKK0RvY3VtZW50YXRpb24vU3VibWl0Q2hlY2tsaXN0IGZvciBhIGxpc3Qgb2YgaXRlbXMgdG8gY2hlY2sgYmVmb3JlCitzdWJtaXR0aW5nIGNvZGUuICBJZiB5b3UgYXJlIHN1Ym1pdHRpbmcgYSBkcml2ZXIsIGFsc28gcmVhZAorRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVyczsgZm9yIGRldmljZSB0cmVlIGJpbmRpbmcgcGF0Y2hlcywgcmVhZAorRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3N1Ym1pdHRpbmctcGF0Y2hlcy50eHQuCiAKIE1hbnkgb2YgdGhlc2Ugc3RlcHMgZGVzY3JpYmUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlIGdpdCB2ZXJzaW9uCiBjb250cm9sIHN5c3RlbTsgaWYgeW91IHVzZSBnaXQgdG8gcHJlcGFyZSB5b3VyIHBhdGNoZXMsIHlvdSdsbCBmaW5kIG11Y2gKIG9mIHRoZSBtZWNoYW5pY2FsIHdvcmsgZG9uZSBmb3IgeW91LCB0aG91Z2ggeW91J2xsIHN0aWxsIG5lZWQgdG8gcHJlcGFyZQotYW5kIGRvY3VtZW50IGEgc2Vuc2libGUgc2V0IG9mIHBhdGNoZXMuCithbmQgZG9jdW1lbnQgYSBzZW5zaWJsZSBzZXQgb2YgcGF0Y2hlcy4gIEluIGdlbmVyYWwsIHVzZSBvZiBnaXQgd2lsbCBtYWtlCit5b3VyIGxpZmUgYXMgYSBrZXJuZWwgZGV2ZWxvcGVyIGVhc2llci4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNFQ1RJT04gMSAtIENSRUFUSU5HIEFORCBTRU5ESU5HIFlPVVIgQ0hBTkdFCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAKKzApIE9idGFpbiBhIGN1cnJlbnQgc291cmNlIHRyZWUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGRvIG5vdCBoYXZlIGEgcmVwb3NpdG9yeSB3aXRoIHRoZSBjdXJyZW50IGtlcm5lbCBzb3VyY2UgaGFuZHksIHVzZQorZ2l0IHRvIG9idGFpbiBvbmUuICBZb3UnbGwgd2FudCB0byBzdGFydCB3aXRoIHRoZSBtYWlubGluZSByZXBvc2l0b3J5LAord2hpY2ggY2FuIGJlIGdyYWJiZWQgd2l0aDoKKworICBnaXQgY2xvbmUgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LmdpdCAKKworTm90ZSwgaG93ZXZlciwgdGhhdCB5b3UgbWF5IG5vdCB3YW50IHRvIGRldmVsb3AgYWdhaW5zdCB0aGUgbWFpbmxpbmUgdHJlZQorZGlyZWN0bHkuICBNb3N0IHN1YnN5c3RlbSBtYWludGFpbmVycyBydW4gdGhlaXIgb3duIHRyZWVzIGFuZCB3YW50IHRvIHNlZQorcGF0Y2hlcyBwcmVwYXJlZCBhZ2FpbnN0IHRob3NlIHRyZWVzLiAgU2VlIHRoZSAiVDoiIGVudHJ5IGZvciB0aGUgc3Vic3lzdGVtCitpbiB0aGUgTUFJTlRBSU5FUlMgZmlsZSB0byBmaW5kIHRoYXQgdHJlZSwgb3Igc2ltcGx5IGFzayB0aGUgbWFpbnRhaW5lciBpZgordGhlIHRyZWUgaXMgbm90IGxpc3RlZCB0aGVyZS4KKworSXQgaXMgc3RpbGwgcG9zc2libGUgdG8gZG93bmxvYWQga2VybmVsIHJlbGVhc2VzIHZpYSB0YXJiYWxscyAoYXMgZGVzY3JpYmVkCitpbiB0aGUgbmV4dCBzZWN0aW9uKSwgYnV0IHRoYXQgaXMgdGhlIGhhcmQgd2F5IHRvIGRvIGtlcm5lbCBkZXZlbG9wbWVudC4KIAogMSkgImRpZmYgLXVwIgogLS0tLS0tLS0tLS0tCiAKLVVzZSAiZGlmZiAtdXAiIG9yICJkaWZmIC11cHJOIiB0byBjcmVhdGUgcGF0Y2hlcy4gIGdpdCBnZW5lcmF0ZXMgcGF0Y2hlcwotaW4gdGhpcyBmb3JtIGJ5IGRlZmF1bHQ7IGlmIHlvdSdyZSB1c2luZyBnaXQsIHlvdSBjYW4gc2tpcCB0aGlzIHNlY3Rpb24KLWVudGlyZWx5LgorSWYgeW91IG11c3QgZ2VuZXJhdGUgeW91ciBwYXRjaGVzIGJ5IGhhbmQsIHVzZSAiZGlmZiAtdXAiIG9yICJkaWZmIC11cHJOIgordG8gY3JlYXRlIHBhdGNoZXMuICBHaXQgZ2VuZXJhdGVzIHBhdGNoZXMgaW4gdGhpcyBmb3JtIGJ5IGRlZmF1bHQ7IGlmCit5b3UncmUgdXNpbmcgZ2l0LCB5b3UgY2FuIHNraXAgdGhpcyBzZWN0aW9uIGVudGlyZWx5LgogCiBBbGwgY2hhbmdlcyB0byB0aGUgTGludXgga2VybmVsIG9jY3VyIGluIHRoZSBmb3JtIG9mIHBhdGNoZXMsIGFzCiBnZW5lcmF0ZWQgYnkgZGlmZigxKS4gIFdoZW4gY3JlYXRpbmcgeW91ciBwYXRjaCwgbWFrZSBzdXJlIHRvIGNyZWF0ZSBpdApAQCAtNDIsNyArNjQsNyBAQAogCiBUbyBjcmVhdGUgYSBwYXRjaCBmb3IgYSBzaW5nbGUgZmlsZSwgaXQgaXMgb2Z0ZW4gc3VmZmljaWVudCB0byBkbzoKIAotCVNSQ1RSRUU9IGxpbnV4LTIuNgorCVNSQ1RSRUU9IGxpbnV4CiAJTVlGSUxFPSAgZHJpdmVycy9uZXQvbXlkcml2ZXIuYwogCiAJY2QgJFNSQ1RSRUUKQEAgLTU1LDE3ICs3NywxNiBAQAogb3IgdW5tb2RpZmllZCBrZXJuZWwgc291cmNlIHRyZWUsIGFuZCBnZW5lcmF0ZSBhIGRpZmYgYWdhaW5zdCB5b3VyCiBvd24gc291cmNlIHRyZWUuICBGb3IgZXhhbXBsZToKIAotCU1ZU1JDPSAvZGV2ZWwvbGludXgtMi42CisJTVlTUkM9IC9kZXZlbC9saW51eAogCi0JdGFyIHh2ZnogbGludXgtMi42LjEyLnRhci5negotCW12IGxpbnV4LTIuNi4xMiBsaW51eC0yLjYuMTItdmFuaWxsYQotCWRpZmYgLXVwck4gLVggbGludXgtMi42LjEyLXZhbmlsbGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZiBcCi0JCWxpbnV4LTIuNi4xMi12YW5pbGxhICRNWVNSQyA+IC90bXAvcGF0Y2gKKwl0YXIgeHZmeiBsaW51eC0zLjE5LnRhci5negorCW12IGxpbnV4LTMuMTkgbGludXgtMy4xOS12YW5pbGxhCisJZGlmZiAtdXByTiAtWCBsaW51eC0zLjE5LXZhbmlsbGEvRG9jdW1lbnRhdGlvbi9kb250ZGlmZiBcCisJCWxpbnV4LTMuMTktdmFuaWxsYSAkTVlTUkMgPiAvdG1wL3BhdGNoCiAKICJkb250ZGlmZiIgaXMgYSBsaXN0IG9mIGZpbGVzIHdoaWNoIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIGtlcm5lbCBkdXJpbmcKIHRoZSBidWlsZCBwcm9jZXNzLCBhbmQgc2hvdWxkIGJlIGlnbm9yZWQgaW4gYW55IGRpZmYoMSktZ2VuZXJhdGVkCi1wYXRjaC4gIFRoZSAiZG9udGRpZmYiIGZpbGUgaXMgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCB0cmVlIGluCi0yLjYuMTIgYW5kIGxhdGVyLgorcGF0Y2guCiAKIE1ha2Ugc3VyZSB5b3VyIHBhdGNoIGRvZXMgbm90IGluY2x1ZGUgYW55IGV4dHJhIGZpbGVzIHdoaWNoIGRvIG5vdAogYmVsb25nIGluIGEgcGF0Y2ggc3VibWlzc2lvbi4gIE1ha2Ugc3VyZSB0byByZXZpZXcgeW91ciBwYXRjaCAtYWZ0ZXItCkBAIC04Myw2ICsxMDQsNyBAQAogCiAKIDIpIERlc2NyaWJlIHlvdXIgY2hhbmdlcy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogRGVzY3JpYmUgeW91ciBwcm9ibGVtLiAgV2hldGhlciB5b3VyIHBhdGNoIGlzIGEgb25lLWxpbmUgYnVnIGZpeCBvcgogNTAwMCBsaW5lcyBvZiBhIG5ldyBmZWF0dXJlLCB0aGVyZSBtdXN0IGJlIGFuIHVuZGVybHlpbmcgcHJvYmxlbSB0aGF0CkBAIC0xMjQsMTAgKzE0NiwxMCBAQAogV2hlbiB5b3Ugc3VibWl0IG9yIHJlc3VibWl0IGEgcGF0Y2ggb3IgcGF0Y2ggc2VyaWVzLCBpbmNsdWRlIHRoZQogY29tcGxldGUgcGF0Y2ggZGVzY3JpcHRpb24gYW5kIGp1c3RpZmljYXRpb24gZm9yIGl0LiAgRG9uJ3QganVzdAogc2F5IHRoYXQgdGhpcyBpcyB2ZXJzaW9uIE4gb2YgdGhlIHBhdGNoIChzZXJpZXMpLiAgRG9uJ3QgZXhwZWN0IHRoZQotcGF0Y2ggbWVyZ2VyIHRvIHJlZmVyIGJhY2sgdG8gZWFybGllciBwYXRjaCB2ZXJzaW9ucyBvciByZWZlcmVuY2VkCitzdWJzeXN0ZW0gbWFpbnRhaW5lciB0byByZWZlciBiYWNrIHRvIGVhcmxpZXIgcGF0Y2ggdmVyc2lvbnMgb3IgcmVmZXJlbmNlZAogVVJMcyB0byBmaW5kIHRoZSBwYXRjaCBkZXNjcmlwdGlvbiBhbmQgcHV0IHRoYXQgaW50byB0aGUgcGF0Y2guCiBJLmUuLCB0aGUgcGF0Y2ggKHNlcmllcykgYW5kIGl0cyBkZXNjcmlwdGlvbiBzaG91bGQgYmUgc2VsZi1jb250YWluZWQuCi1UaGlzIGJlbmVmaXRzIGJvdGggdGhlIHBhdGNoIG1lcmdlcihzKSBhbmQgcmV2aWV3ZXJzLiAgU29tZSByZXZpZXdlcnMKK1RoaXMgYmVuZWZpdHMgYm90aCB0aGUgbWFpbnRhaW5lcnMgYW5kIHJldmlld2Vycy4gIFNvbWUgcmV2aWV3ZXJzCiBwcm9iYWJseSBkaWRuJ3QgZXZlbiByZWNlaXZlIGVhcmxpZXIgdmVyc2lvbnMgb2YgdGhlIHBhdGNoLgogCiBEZXNjcmliZSB5b3VyIGNoYW5nZXMgaW4gaW1wZXJhdGl2ZSBtb29kLCBlLmcuICJtYWtlIHh5enp5IGRvIGZyb3R6IgpAQCAtMTU2LDEwICsxNzgsMTUgQEAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSgpLCBidXQgbGVmdCB0aGUgdmFyaWFibGUgImRldiIgdW51c2VkLAogCWRlbGV0ZSBpdC4KIAorWW91IHNob3VsZCBhbHNvIGJlIHN1cmUgdG8gdXNlIGF0IGxlYXN0IHRoZSBmaXJzdCB0d2VsdmUgY2hhcmFjdGVycyBvZiB0aGUKK1NIQS0xIElELiAgVGhlIGtlcm5lbCByZXBvc2l0b3J5IGhvbGRzIGEgKmxvdCogb2Ygb2JqZWN0cywgbWFraW5nCitjb2xsaXNpb25zIHdpdGggc2hvcnRlciBJRHMgYSByZWFsIHBvc3NpYmlsaXR5LiAgQmVhciBpbiBtaW5kIHRoYXQsIGV2ZW4gaWYKK3RoZXJlIGlzIG5vIGNvbGxpc2lvbiB3aXRoIHlvdXIgc2l4LWNoYXJhY3RlciBJRCBub3csIHRoYXQgY29uZGl0aW9uIG1heQorY2hhbmdlIGZpdmUgeWVhcnMgZnJvbSBub3cuCisKIElmIHlvdXIgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYSBzcGVjaWZpYyBjb21taXQsIGUuZy4geW91IGZvdW5kIGFuIGlzc3VlIHVzaW5nCiBnaXQtYmlzZWN0LCBwbGVhc2UgdXNlIHRoZSAnRml4ZXM6JyB0YWcgd2l0aCB0aGUgZmlyc3QgMTIgY2hhcmFjdGVycyBvZiB0aGUKLVNIQS0xIElELCBhbmQgdGhlIG9uZSBsaW5lIHN1bW1hcnkuCi1FeGFtcGxlOgorU0hBLTEgSUQsIGFuZCB0aGUgb25lIGxpbmUgc3VtbWFyeS4gIEZvciBleGFtcGxlOgogCiAJRml4ZXM6IGUyMWQyMTcwZjM2NiAoInZpZGVvOiByZW1vdmUgdW5uZWNlc3NhcnkgcGxhdGZvcm1fc2V0X2RydmRhdGEoKSIpCiAKQEAgLTE3Miw4ICsxOTksOSBAQAogCQlmaXhlcyA9IEZpeGVzOiAlaCAoXCIlc1wiKQogCiAzKSBTZXBhcmF0ZSB5b3VyIGNoYW5nZXMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVNlcGFyYXRlIF9sb2dpY2FsIGNoYW5nZXNfIGludG8gYSBzaW5nbGUgcGF0Y2ggZmlsZS4KK1NlcGFyYXRlIGVhY2ggX2xvZ2ljYWwgY2hhbmdlXyBpbnRvIGEgc2VwYXJhdGUgcGF0Y2guCiAKIEZvciBleGFtcGxlLCBpZiB5b3VyIGNoYW5nZXMgaW5jbHVkZSBib3RoIGJ1ZyBmaXhlcyBhbmQgcGVyZm9ybWFuY2UKIGVuaGFuY2VtZW50cyBmb3IgYSBzaW5nbGUgZHJpdmVyLCBzZXBhcmF0ZSB0aG9zZSBjaGFuZ2VzIGludG8gdHdvCkBAIC0xODQsOTAgKzIxMiwxMTYgQEAKIGdyb3VwIHRob3NlIGNoYW5nZXMgaW50byBhIHNpbmdsZSBwYXRjaC4gIFRodXMgYSBzaW5nbGUgbG9naWNhbCBjaGFuZ2UKIGlzIGNvbnRhaW5lZCB3aXRoaW4gYSBzaW5nbGUgcGF0Y2guCiAKK1RoZSBwb2ludCB0byByZW1lbWJlciBpcyB0aGF0IGVhY2ggcGF0Y2ggc2hvdWxkIG1ha2UgYW4gZWFzaWx5IHVuZGVyc3Rvb2QKK2NoYW5nZSB0aGF0IGNhbiBiZSB2ZXJpZmllZCBieSByZXZpZXdlcnMuICBFYWNoIHBhdGNoIHNob3VsZCBiZSBqdXN0aWZpYWJsZQorb24gaXRzIG93biBtZXJpdHMuCisKIElmIG9uZSBwYXRjaCBkZXBlbmRzIG9uIGFub3RoZXIgcGF0Y2ggaW4gb3JkZXIgZm9yIGEgY2hhbmdlIHRvIGJlCiBjb21wbGV0ZSwgdGhhdCBpcyBPSy4gIFNpbXBseSBub3RlICJ0aGlzIHBhdGNoIGRlcGVuZHMgb24gcGF0Y2ggWCIKIGluIHlvdXIgcGF0Y2ggZGVzY3JpcHRpb24uCiAKK1doZW4gZGl2aWRpbmcgeW91ciBjaGFuZ2UgaW50byBhIHNlcmllcyBvZiBwYXRjaGVzLCB0YWtlIHNwZWNpYWwgY2FyZSB0bworZW5zdXJlIHRoYXQgdGhlIGtlcm5lbCBidWlsZHMgYW5kIHJ1bnMgcHJvcGVybHkgYWZ0ZXIgZWFjaCBwYXRjaCBpbiB0aGUKK3Nlcmllcy4gIERldmVsb3BlcnMgdXNpbmcgImdpdCBiaXNlY3QiIHRvIHRyYWNrIGRvd24gYSBwcm9ibGVtIGNhbiBlbmQgdXAKK3NwbGl0dGluZyB5b3VyIHBhdGNoIHNlcmllcyBhdCBhbnkgcG9pbnQ7IHRoZXkgd2lsbCBub3QgdGhhbmsgeW91IGlmIHlvdQoraW50cm9kdWNlIGJ1Z3MgaW4gdGhlIG1pZGRsZS4KKwogSWYgeW91IGNhbm5vdCBjb25kZW5zZSB5b3VyIHBhdGNoIHNldCBpbnRvIGEgc21hbGxlciBzZXQgb2YgcGF0Y2hlcywKIHRoZW4gb25seSBwb3N0IHNheSAxNSBvciBzbyBhdCBhIHRpbWUgYW5kIHdhaXQgZm9yIHJldmlldyBhbmQgaW50ZWdyYXRpb24uCiAKIAogCi00KSBTdHlsZSBjaGVjayB5b3VyIGNoYW5nZXMuCis0KSBTdHlsZS1jaGVjayB5b3VyIGNoYW5nZXMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIENoZWNrIHlvdXIgcGF0Y2ggZm9yIGJhc2ljIHN0eWxlIHZpb2xhdGlvbnMsIGRldGFpbHMgb2Ygd2hpY2ggY2FuIGJlCiBmb3VuZCBpbiBEb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlLiAgRmFpbHVyZSB0byBkbyBzbyBzaW1wbHkgd2FzdGVzCiB0aGUgcmV2aWV3ZXJzIHRpbWUgYW5kIHdpbGwgZ2V0IHlvdXIgcGF0Y2ggcmVqZWN0ZWQsIHByb2JhYmx5CiB3aXRob3V0IGV2ZW4gYmVpbmcgcmVhZC4KIAotQXQgYSBtaW5pbXVtIHlvdSBzaG91bGQgY2hlY2sgeW91ciBwYXRjaGVzIHdpdGggdGhlIHBhdGNoIHN0eWxlCi1jaGVja2VyIHByaW9yIHRvIHN1Ym1pc3Npb24gKHNjcmlwdHMvY2hlY2twYXRjaC5wbCkuICBZb3Ugc2hvdWxkCi1iZSBhYmxlIHRvIGp1c3RpZnkgYWxsIHZpb2xhdGlvbnMgdGhhdCByZW1haW4gaW4geW91ciBwYXRjaC4KK09uZSBzaWduaWZpY2FudCBleGNlcHRpb24gaXMgd2hlbiBtb3ZpbmcgY29kZSBmcm9tIG9uZSBmaWxlIHRvCithbm90aGVyIC0tIGluIHRoaXMgY2FzZSB5b3Ugc2hvdWxkIG5vdCBtb2RpZnkgdGhlIG1vdmVkIGNvZGUgYXQgYWxsIGluCit0aGUgc2FtZSBwYXRjaCB3aGljaCBtb3ZlcyBpdC4gIFRoaXMgY2xlYXJseSBkZWxpbmVhdGVzIHRoZSBhY3Qgb2YKK21vdmluZyB0aGUgY29kZSBhbmQgeW91ciBjaGFuZ2VzLiAgVGhpcyBncmVhdGx5IGFpZHMgcmV2aWV3IG9mIHRoZQorYWN0dWFsIGRpZmZlcmVuY2VzIGFuZCBhbGxvd3MgdG9vbHMgdG8gYmV0dGVyIHRyYWNrIHRoZSBoaXN0b3J5IG9mCit0aGUgY29kZSBpdHNlbGYuCisKK0NoZWNrIHlvdXIgcGF0Y2hlcyB3aXRoIHRoZSBwYXRjaCBzdHlsZSBjaGVja2VyIHByaW9yIHRvIHN1Ym1pc3Npb24KKyhzY3JpcHRzL2NoZWNrcGF0Y2gucGwpLiAgTm90ZSwgdGhvdWdoLCB0aGF0IHRoZSBzdHlsZSBjaGVja2VyIHNob3VsZCBiZQordmlld2VkIGFzIGEgZ3VpZGUsIG5vdCBhcyBhIHJlcGxhY2VtZW50IGZvciBodW1hbiBqdWRnbWVudC4gIElmIHlvdXIgY29kZQorbG9va3MgYmV0dGVyIHdpdGggYSB2aW9sYXRpb24gdGhlbiBpdHMgcHJvYmFibHkgYmVzdCBsZWZ0IGFsb25lLgorCitUaGUgY2hlY2tlciByZXBvcnRzIGF0IHRocmVlIGxldmVsczoKKyAtIEVSUk9SOiB0aGluZ3MgdGhhdCBhcmUgdmVyeSBsaWtlbHkgdG8gYmUgd3JvbmcKKyAtIFdBUk5JTkc6IHRoaW5ncyByZXF1aXJpbmcgY2FyZWZ1bCByZXZpZXcKKyAtIENIRUNLOiB0aGluZ3MgcmVxdWlyaW5nIHRob3VnaHQKKworWW91IHNob3VsZCBiZSBhYmxlIHRvIGp1c3RpZnkgYWxsIHZpb2xhdGlvbnMgdGhhdCByZW1haW4gaW4geW91cgorcGF0Y2guCiAKIAorNSkgU2VsZWN0IHRoZSByZWNpcGllbnRzIGZvciB5b3VyIHBhdGNoLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi01KSBTZWxlY3QgZS1tYWlsIGRlc3RpbmF0aW9uLgorWW91IHNob3VsZCBhbHdheXMgY29weSB0aGUgYXBwcm9wcmlhdGUgc3Vic3lzdGVtIG1haW50YWluZXIocykgb24gYW55IHBhdGNoCit0byBjb2RlIHRoYXQgdGhleSBtYWludGFpbjsgbG9vayB0aHJvdWdoIHRoZSBNQUlOVEFJTkVSUyBmaWxlIGFuZCB0aGUKK3NvdXJjZSBjb2RlIHJldmlzaW9uIGhpc3RvcnkgdG8gc2VlIHdobyB0aG9zZSBtYWludGFpbmVycyBhcmUuICBUaGUKK3NjcmlwdCBzY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIGNhbiBiZSB2ZXJ5IHVzZWZ1bCBhdCB0aGlzIHN0ZXAuICBJZiB5b3UKK2Nhbm5vdCBmaW5kIGEgbWFpbnRhaW5lciBmb3IgdGhlIHN1YnN5c3RlbSB5b3VyIGFyZSB3b3JraW5nIG9uLCBBbmRyZXcKK01vcnRvbiAoYWtwbUBsaW51eC1mb3VuZGF0aW9uLm9yZykgc2VydmVzIGFzIGEgbWFpbnRhaW5lciBvZiBsYXN0IHJlc29ydC4KIAotTG9vayB0aHJvdWdoIHRoZSBNQUlOVEFJTkVSUyBmaWxlIGFuZCB0aGUgc291cmNlIGNvZGUsIGFuZCBkZXRlcm1pbmUKLWlmIHlvdXIgY2hhbmdlIGFwcGxpZXMgdG8gYSBzcGVjaWZpYyBzdWJzeXN0ZW0gb2YgdGhlIGtlcm5lbCwgd2l0aAotYW4gYXNzaWduZWQgbWFpbnRhaW5lci4gIElmIHNvLCBlLW1haWwgdGhhdCBwZXJzb24uICBUaGUgc2NyaXB0Ci1zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsIGNhbiBiZSB2ZXJ5IHVzZWZ1bCBhdCB0aGlzIHN0ZXAuCitZb3Ugc2hvdWxkIGFsc28gbm9ybWFsbHkgY2hvb3NlIGF0IGxlYXN0IG9uZSBtYWlsaW5nIGxpc3QgdG8gcmVjZWl2ZSBhIGNvcHkKK29mIHlvdXIgcGF0Y2ggc2V0LiAgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZyBmdW5jdGlvbnMgYXMgYSBsaXN0IG9mCitsYXN0IHJlc29ydCwgYnV0IHRoZSB2b2x1bWUgb24gdGhhdCBsaXN0IGhhcyBjYXVzZWQgYSBudW1iZXIgb2YgZGV2ZWxvcGVycwordG8gdHVuZSBpdCBvdXQuICBMb29rIGluIHRoZSBNQUlOVEFJTkVSUyBmaWxlIGZvciBhIHN1YnN5c3RlbS1zcGVjaWZpYworbGlzdDsgeW91ciBwYXRjaCB3aWxsIHByb2JhYmx5IGdldCBtb3JlIGF0dGVudGlvbiB0aGVyZS4gIFBsZWFzZSBkbyBub3QKK3NwYW0gdW5yZWxhdGVkIGxpc3RzLCB0aG91Z2guCiAKLUlmIG5vIG1haW50YWluZXIgaXMgbGlzdGVkLCBvciB0aGUgbWFpbnRhaW5lciBkb2VzIG5vdCByZXNwb25kLCBzZW5kCi15b3VyIHBhdGNoIHRvIHRoZSBwcmltYXJ5IExpbnV4IGtlcm5lbCBkZXZlbG9wZXIncyBtYWlsaW5nIGxpc3QsCi1saW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnLiAgTW9zdCBrZXJuZWwgZGV2ZWxvcGVycyBtb25pdG9yIHRoaXMKLWUtbWFpbCBsaXN0LCBhbmQgY2FuIGNvbW1lbnQgb24geW91ciBjaGFuZ2VzLgotCitNYW55IGtlcm5lbC1yZWxhdGVkIGxpc3RzIGFyZSBob3N0ZWQgb24gdmdlci5rZXJuZWwub3JnOyB5b3UgY2FuIGZpbmQgYQorbGlzdCBvZiB0aGVtIGF0IGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvdmdlci1saXN0cy5odG1sLiAgVGhlcmUgYXJlCitrZXJuZWwtcmVsYXRlZCBsaXN0cyBob3N0ZWQgZWxzZXdoZXJlIGFzIHdlbGwsIHRob3VnaC4KIAogRG8gbm90IHNlbmQgbW9yZSB0aGFuIDE1IHBhdGNoZXMgYXQgb25jZSB0byB0aGUgdmdlciBtYWlsaW5nIGxpc3RzISEhCiAKLQogTGludXMgVG9ydmFsZHMgaXMgdGhlIGZpbmFsIGFyYml0ZXIgb2YgYWxsIGNoYW5nZXMgYWNjZXB0ZWQgaW50byB0aGUKLUxpbnV4IGtlcm5lbC4gIEhpcyBlLW1haWwgYWRkcmVzcyBpcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+LiAKLUhlIGdldHMgYSBsb3Qgb2YgZS1tYWlsLCBzbyB0eXBpY2FsbHkgeW91IHNob3VsZCBkbyB5b3VyIGJlc3QgdG8gLWF2b2lkLQotc2VuZGluZyBoaW0gZS1tYWlsLiAKK0xpbnV4IGtlcm5lbC4gIEhpcyBlLW1haWwgYWRkcmVzcyBpcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+LgorSGUgZ2V0cyBhIGxvdCBvZiBlLW1haWwsIGFuZCwgYXQgdGhpcyBwb2ludCwgdmVyeSBmZXcgcGF0Y2hlcyBnbyB0aHJvdWdoCitMaW51cyBkaXJlY3RseSwgc28gdHlwaWNhbGx5IHlvdSBzaG91bGQgZG8geW91ciBiZXN0IHRvIC1hdm9pZC0KK3NlbmRpbmcgaGltIGUtbWFpbC4KIAotUGF0Y2hlcyB3aGljaCBhcmUgYnVnIGZpeGVzLCBhcmUgIm9idmlvdXMiIGNoYW5nZXMsIG9yIHNpbWlsYXJseQotcmVxdWlyZSBsaXR0bGUgZGlzY3Vzc2lvbiBzaG91bGQgYmUgc2VudCBvciBDQydkIHRvIExpbnVzLiAgUGF0Y2hlcwotd2hpY2ggcmVxdWlyZSBkaXNjdXNzaW9uIG9yIGRvIG5vdCBoYXZlIGEgY2xlYXIgYWR2YW50YWdlIHNob3VsZAotdXN1YWxseSBiZSBzZW50IGZpcnN0IHRvIGxpbnV4LWtlcm5lbC4gIE9ubHkgYWZ0ZXIgdGhlIHBhdGNoIGlzCi1kaXNjdXNzZWQgc2hvdWxkIHRoZSBwYXRjaCB0aGVuIGJlIHN1Ym1pdHRlZCB0byBMaW51cy4KK0lmIHlvdSBoYXZlIGEgcGF0Y2ggdGhhdCBmaXhlcyBhbiBleHBsb2l0YWJsZSBzZWN1cml0eSBidWcsIHNlbmQgdGhhdCBwYXRjaAordG8gc2VjdXJpdHlAa2VybmVsLm9yZy4gIEZvciBzZXZlcmUgYnVncywgYSBzaG9ydCBlbWJhcmdvIG1heSBiZSBjb25zaWRlcmVkCit0byBhbGxvdyBkaXN0cmJ1dG9ycyB0byBnZXQgdGhlIHBhdGNoIG91dCB0byB1c2VyczsgaW4gc3VjaCBjYXNlcywKK29idmlvdXNseSwgdGhlIHBhdGNoIHNob3VsZCBub3QgYmUgc2VudCB0byBhbnkgcHVibGljIGxpc3RzLgogCitQYXRjaGVzIHRoYXQgZml4IGEgc2V2ZXJlIGJ1ZyBpbiBhIHJlbGVhc2VkIGtlcm5lbCBzaG91bGQgYmUgZGlyZWN0ZWQKK3Rvd2FyZCB0aGUgc3RhYmxlIG1haW50YWluZXJzIGJ5IHB1dHRpbmcgYSBsaW5lIGxpa2UgdGhpczoKIAorICBDYzogc3RhYmxlQHZnZXIua2VybmVsLm9yZwogCi02KSBTZWxlY3QgeW91ciBDQyAoZS1tYWlsIGNhcmJvbiBjb3B5KSBsaXN0LgoraW50byB5b3VyIHBhdGNoLgogCi1Vbmxlc3MgeW91IGhhdmUgYSByZWFzb24gTk9UIHRvIGRvIHNvLCBDQyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnLgorTm90ZSwgaG93ZXZlciwgdGhhdCBzb21lIHN1YnN5c3RlbSBtYWludGFpbmVycyB3YW50IHRvIGNvbWUgdG8gdGhlaXIgb3duCitjb25jbHVzaW9ucyBvbiB3aGljaCBwYXRjaGVzIHNob3VsZCBnbyB0byB0aGUgc3RhYmxlIHRyZWVzLiAgVGhlIG5ldHdvcmtpbmcKK21haW50YWluZXIsIGluIHBhcnRpY3VsYXIsIHdvdWxkIHJhdGhlciBub3Qgc2VlIGluZGl2aWR1YWwgZGV2ZWxvcGVycworYWRkaW5nIGxpbmVzIGxpa2UgdGhlIGFib3ZlIHRvIHRoZWlyIHBhdGNoZXMuCiAKLU90aGVyIGtlcm5lbCBkZXZlbG9wZXJzIGJlc2lkZXMgTGludXMgbmVlZCB0byBiZSBhd2FyZSBvZiB5b3VyIGNoYW5nZSwKLXNvIHRoYXQgdGhleSBtYXkgY29tbWVudCBvbiBpdCBhbmQgb2ZmZXIgY29kZSByZXZpZXcgYW5kIHN1Z2dlc3Rpb25zLgotbGludXgta2VybmVsIGlzIHRoZSBwcmltYXJ5IExpbnV4IGtlcm5lbCBkZXZlbG9wZXIgbWFpbGluZyBsaXN0LgotT3RoZXIgbWFpbGluZyBsaXN0cyBhcmUgYXZhaWxhYmxlIGZvciBzcGVjaWZpYyBzdWJzeXN0ZW1zLCBzdWNoIGFzCi1VU0IsIGZyYW1lYnVmZmVyIGRldmljZXMsIHRoZSBWRlMsIHRoZSBTQ1NJIHN1YnN5c3RlbSwgZXRjLiAgU2VlIHRoZQotTUFJTlRBSU5FUlMgZmlsZSBmb3IgYSBtYWlsaW5nIGxpc3QgdGhhdCByZWxhdGVzIHNwZWNpZmljYWxseSB0bwoteW91ciBjaGFuZ2UuCi0KLU1ham9yZG9tbyBsaXN0cyBvZiBWR0VSLktFUk5FTC5PUkcgYXQ6Ci0JPGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvdmdlci1saXN0cy5odG1sPgotCi1JZiBjaGFuZ2VzIGFmZmVjdCB1c2VybGFuZC1rZXJuZWwgaW50ZXJmYWNlcywgcGxlYXNlIHNlbmQKLXRoZSBNQU4tUEFHRVMgbWFpbnRhaW5lciAoYXMgbGlzdGVkIGluIHRoZSBNQUlOVEFJTkVSUyBmaWxlKQotYSBtYW4tcGFnZXMgcGF0Y2gsIG9yIGF0IGxlYXN0IGEgbm90aWZpY2F0aW9uIG9mIHRoZSBjaGFuZ2UsCi1zbyB0aGF0IHNvbWUgaW5mb3JtYXRpb24gbWFrZXMgaXRzIHdheSBpbnRvIHRoZSBtYW51YWwgcGFnZXMuCi0KLUV2ZW4gaWYgdGhlIG1haW50YWluZXIgZGlkIG5vdCByZXNwb25kIGluIHN0ZXAgIzUsIG1ha2Ugc3VyZSB0byBBTFdBWVMKLWNvcHkgdGhlIG1haW50YWluZXIgd2hlbiB5b3UgY2hhbmdlIHRoZWlyIGNvZGUuCitJZiBjaGFuZ2VzIGFmZmVjdCB1c2VybGFuZC1rZXJuZWwgaW50ZXJmYWNlcywgcGxlYXNlIHNlbmQgdGhlIE1BTi1QQUdFUworbWFpbnRhaW5lciAoYXMgbGlzdGVkIGluIHRoZSBNQUlOVEFJTkVSUyBmaWxlKSBhIG1hbi1wYWdlcyBwYXRjaCwgb3IgYXQKK2xlYXN0IGEgbm90aWZpY2F0aW9uIG9mIHRoZSBjaGFuZ2UsIHNvIHRoYXQgc29tZSBpbmZvcm1hdGlvbiBtYWtlcyBpdHMgd2F5CitpbnRvIHRoZSBtYW51YWwgcGFnZXMuICBVc2VyLXNwYWNlIEFQSSBjaGFuZ2VzIHNob3VsZCBhbHNvIGJlIGNvcGllZCB0bworbGludXgtYXBpQHZnZXIua2VybmVsLm9yZy4gCiAKIEZvciBzbWFsbCBwYXRjaGVzIHlvdSBtYXkgd2FudCB0byBDQyB0aGUgVHJpdmlhbCBQYXRjaCBNb25rZXkKIHRyaXZpYWxAa2VybmVsLm9yZyB3aGljaCBjb2xsZWN0cyAidHJpdmlhbCIgcGF0Y2hlcy4gSGF2ZSBhIGxvb2sKIGludG8gdGhlIE1BSU5UQUlORVJTIGZpbGUgZm9yIGl0cyBjdXJyZW50IG1hbmFnZXIuCiBUcml2aWFsIHBhdGNoZXMgbXVzdCBxdWFsaWZ5IGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBydWxlczoKICBTcGVsbGluZyBmaXhlcyBpbiBkb2N1bWVudGF0aW9uCi0gU3BlbGxpbmcgZml4ZXMgd2hpY2ggY291bGQgYnJlYWsgZ3JlcCgxKQorIFNwZWxsaW5nIGZpeGVzIGZvciBlcnJvcnMgd2hpY2ggY291bGQgYnJlYWsgZ3JlcCgxKQogIFdhcm5pbmcgZml4ZXMgKGNsdXR0ZXJpbmcgd2l0aCB1c2VsZXNzIHdhcm5pbmdzIGlzIGJhZCkKICBDb21waWxhdGlvbiBmaXhlcyAob25seSBpZiB0aGV5IGFyZSBhY3R1YWxseSBjb3JyZWN0KQogIFJ1bnRpbWUgZml4ZXMgKG9ubHkgaWYgdGhleSBhY3R1YWxseSBmaXggdGhpbmdzKQotIFJlbW92aW5nIHVzZSBvZiBkZXByZWNhdGVkIGZ1bmN0aW9ucy9tYWNyb3MgKGVnLiBjaGVja19yZWdpb24pCisgUmVtb3ZpbmcgdXNlIG9mIGRlcHJlY2F0ZWQgZnVuY3Rpb25zL21hY3JvcwogIENvbnRhY3QgZGV0YWlsIGFuZCBkb2N1bWVudGF0aW9uIGZpeGVzCiAgTm9uLXBvcnRhYmxlIGNvZGUgcmVwbGFjZWQgYnkgcG9ydGFibGUgY29kZSAoZXZlbiBpbiBhcmNoLXNwZWNpZmljLAogIHNpbmNlIHBlb3BsZSBjb3B5LCBhcyBsb25nIGFzIGl0J3MgdHJpdmlhbCkKQEAgLTI3Niw3ICszMzAsOCBAQAogCiAKIAotNykgTm8gTUlNRSwgbm8gbGlua3MsIG5vIGNvbXByZXNzaW9uLCBubyBhdHRhY2htZW50cy4gIEp1c3QgcGxhaW4gdGV4dC4KKzYpIE5vIE1JTUUsIG5vIGxpbmtzLCBubyBjb21wcmVzc2lvbiwgbm8gYXR0YWNobWVudHMuICBKdXN0IHBsYWluIHRleHQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBMaW51cyBhbmQgb3RoZXIga2VybmVsIGRldmVsb3BlcnMgbmVlZCB0byBiZSBhYmxlIHRvIHJlYWQgYW5kIGNvbW1lbnQKIG9uIHRoZSBjaGFuZ2VzIHlvdSBhcmUgc3VibWl0dGluZy4gIEl0IGlzIGltcG9ydGFudCBmb3IgYSBrZXJuZWwKQEAgLTI5OSw1NCArMzU0LDQ4IEBACiBTZWUgRG9jdW1lbnRhdGlvbi9lbWFpbC1jbGllbnRzLnR4dCBmb3IgaGludHMgYWJvdXQgY29uZmlndXJpbmcKIHlvdXIgZS1tYWlsIGNsaWVudCBzbyB0aGF0IGl0IHNlbmRzIHlvdXIgcGF0Y2hlcyB1bnRvdWNoZWQuCiAKLTgpIEUtbWFpbCBzaXplLgotCi1XaGVuIHNlbmRpbmcgcGF0Y2hlcyB0byBMaW51cywgYWx3YXlzIGZvbGxvdyBzdGVwICM3LgorNykgRS1tYWlsIHNpemUuCistLS0tLS0tLS0tLS0tLS0KIAogTGFyZ2UgY2hhbmdlcyBhcmUgbm90IGFwcHJvcHJpYXRlIGZvciBtYWlsaW5nIGxpc3RzLCBhbmQgc29tZQogbWFpbnRhaW5lcnMuICBJZiB5b3VyIHBhdGNoLCB1bmNvbXByZXNzZWQsIGV4Y2VlZHMgMzAwIGtCIGluIHNpemUsCiBpdCBpcyBwcmVmZXJyZWQgdGhhdCB5b3Ugc3RvcmUgeW91ciBwYXRjaCBvbiBhbiBJbnRlcm5ldC1hY2Nlc3NpYmxlCi1zZXJ2ZXIsIGFuZCBwcm92aWRlIGluc3RlYWQgYSBVUkwgKGxpbmspIHBvaW50aW5nIHRvIHlvdXIgcGF0Y2guCitzZXJ2ZXIsIGFuZCBwcm92aWRlIGluc3RlYWQgYSBVUkwgKGxpbmspIHBvaW50aW5nIHRvIHlvdXIgcGF0Y2guICBCdXQgbm90ZQordGhhdCBpZiB5b3VyIHBhdGNoIGV4Y2VlZHMgMzAwIGtCLCBpdCBhbG1vc3QgY2VydGFpbmx5IG5lZWRzIHRvIGJlIGJyb2tlbiB1cAorYW55d2F5LgorCis4KSBSZXNwb25kIHRvIHJldmlldyBjb21tZW50cy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3VyIHBhdGNoIHdpbGwgYWxtb3N0IGNlcnRhaW5seSBnZXQgY29tbWVudHMgZnJvbSByZXZpZXdlcnMgb24gd2F5cyBpbgord2hpY2ggdGhlIHBhdGNoIGNhbiBiZSBpbXByb3ZlZC4gIFlvdSBtdXN0IHJlc3BvbmQgdG8gdGhvc2UgY29tbWVudHM7CitpZ25vcmluZyByZXZpZXdlcnMgaXMgYSBnb29kIHdheSB0byBnZXQgaWdub3JlZCBpbiByZXR1cm4uICBSZXZpZXcgY29tbWVudHMKK29yIHF1ZXN0aW9ucyB0aGF0IGRvIG5vdCBsZWFkIHRvIGEgY29kZSBjaGFuZ2Ugc2hvdWxkIGFsbW9zdCBjZXJ0YWlubHkKK2JyaW5nIGFib3V0IGEgY29tbWVudCBvciBjaGFuZ2Vsb2cgZW50cnkgc28gdGhhdCB0aGUgbmV4dCByZXZpZXdlciBiZXR0ZXIKK3VuZGVyc3RhbmRzIHdoYXQgaXMgZ29pbmcgb24uCisKK0JlIHN1cmUgdG8gdGVsbCB0aGUgcmV2aWV3ZXJzIHdoYXQgY2hhbmdlcyB5b3UgYXJlIG1ha2luZyBhbmQgdG8gdGhhbmsgdGhlbQorZm9yIHRoZWlyIHRpbWUuICBDb2RlIHJldmlldyBpcyBhIHRpcmluZyBhbmQgdGltZS1jb25zdW1pbmcgcHJvY2VzcywgYW5kCityZXZpZXdlcnMgc29tZXRpbWVzIGdldCBncnVtcHkuICBFdmVuIGluIHRoYXQgY2FzZSwgdGhvdWdoLCByZXNwb25kCitwb2xpdGVseSBhbmQgYWRkcmVzcyB0aGUgcHJvYmxlbXMgdGhleSBoYXZlIHBvaW50ZWQgb3V0LgogCiAKKzkpIERvbid0IGdldCBkaXNjb3VyYWdlZCAtIG9yIGltcGF0aWVudC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotOSkgTmFtZSB5b3VyIGtlcm5lbCB2ZXJzaW9uLgorQWZ0ZXIgeW91IGhhdmUgc3VibWl0dGVkIHlvdXIgY2hhbmdlLCBiZSBwYXRpZW50IGFuZCB3YWl0LiAgUmV2aWV3ZXJzIGFyZQorYnVzeSBwZW9wbGUgYW5kIG1heSBub3QgZ2V0IHRvIHlvdXIgcGF0Y2ggcmlnaHQgYXdheS4KIAotSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUsIGVpdGhlciBpbiB0aGUgc3ViamVjdCBsaW5lIG9yIGluIHRoZSBwYXRjaAotZGVzY3JpcHRpb24sIHRoZSBrZXJuZWwgdmVyc2lvbiB0byB3aGljaCB0aGlzIHBhdGNoIGFwcGxpZXMuCi0KLUlmIHRoZSBwYXRjaCBkb2VzIG5vdCBhcHBseSBjbGVhbmx5IHRvIHRoZSBsYXRlc3Qga2VybmVsIHZlcnNpb24sCi1MaW51cyB3aWxsIG5vdCBhcHBseSBpdC4KK09uY2UgdXBvbiBhIHRpbWUsIHBhdGNoZXMgdXNlZCB0byBkaXNhcHBlYXIgaW50byB0aGUgdm9pZCB3aXRob3V0IGNvbW1lbnQsCitidXQgdGhlIGRldmVsb3BtZW50IHByb2Nlc3Mgd29ya3MgbW9yZSBzbW9vdGhseSB0aGFuIHRoYXQgbm93LiAgWW91IHNob3VsZAorcmVjZWl2ZSBjb21tZW50cyB3aXRoaW4gYSB3ZWVrIG9yIHNvOyBpZiB0aGF0IGRvZXMgbm90IGhhcHBlbiwgbWFrZSBzdXJlCit0aGF0IHlvdSBoYXZlIHNlbnQgeW91ciBwYXRjaGVzIHRvIHRoZSByaWdodCBwbGFjZS4gIFdhaXQgZm9yIGEgbWluaW11bSBvZgorb25lIHdlZWsgYmVmb3JlIHJlc3VibWl0dGluZyBvciBwaW5naW5nIHJldmlld2VycyAtIHBvc3NpYmx5IGxvbmdlciBkdXJpbmcKK2J1c3kgdGltZXMgbGlrZSBtZXJnZSB3aW5kb3dzLgogCiAKLQotMTApIERvbid0IGdldCBkaXNjb3VyYWdlZC4gIFJlLXN1Ym1pdC4KLQotQWZ0ZXIgeW91IGhhdmUgc3VibWl0dGVkIHlvdXIgY2hhbmdlLCBiZSBwYXRpZW50IGFuZCB3YWl0LiAgSWYgTGludXMKLWxpa2VzIHlvdXIgY2hhbmdlIGFuZCBhcHBsaWVzIGl0LCBpdCB3aWxsIGFwcGVhciBpbiB0aGUgbmV4dCB2ZXJzaW9uCi1vZiB0aGUga2VybmVsIHRoYXQgaGUgcmVsZWFzZXMuCi0KLUhvd2V2ZXIsIGlmIHlvdXIgY2hhbmdlIGRvZXNuJ3QgYXBwZWFyIGluIHRoZSBuZXh0IHZlcnNpb24gb2YgdGhlCi1rZXJuZWwsIHRoZXJlIGNvdWxkIGJlIGFueSBudW1iZXIgb2YgcmVhc29ucy4gIEl0J3MgWU9VUiBqb2IgdG8KLW5hcnJvdyBkb3duIHRob3NlIHJlYXNvbnMsIGNvcnJlY3Qgd2hhdCB3YXMgd3JvbmcsIGFuZCBzdWJtaXQgeW91cgotdXBkYXRlZCBjaGFuZ2UuCi0KLUl0IGlzIHF1aXRlIGNvbW1vbiBmb3IgTGludXMgdG8gImRyb3AiIHlvdXIgcGF0Y2ggd2l0aG91dCBjb21tZW50LgotVGhhdCdzIHRoZSBuYXR1cmUgb2YgdGhlIHN5c3RlbS4gIElmIGhlIGRyb3BzIHlvdXIgcGF0Y2gsIGl0IGNvdWxkIGJlCi1kdWUgdG8KLSogWW91ciBwYXRjaCBkaWQgbm90IGFwcGx5IGNsZWFubHkgdG8gdGhlIGxhdGVzdCBrZXJuZWwgdmVyc2lvbi4KLSogWW91ciBwYXRjaCB3YXMgbm90IHN1ZmZpY2llbnRseSBkaXNjdXNzZWQgb24gbGludXgta2VybmVsLgotKiBBIHN0eWxlIGlzc3VlIChzZWUgc2VjdGlvbiAyKS4KLSogQW4gZS1tYWlsIGZvcm1hdHRpbmcgaXNzdWUgKHJlLXJlYWQgdGhpcyBzZWN0aW9uKS4KLSogQSB0ZWNobmljYWwgcHJvYmxlbSB3aXRoIHlvdXIgY2hhbmdlLgotKiBIZSBnZXRzIHRvbnMgb2YgZS1tYWlsLCBhbmQgeW91cnMgZ290IGxvc3QgaW4gdGhlIHNodWZmbGUuCi0qIFlvdSBhcmUgYmVpbmcgYW5ub3lpbmcuCi0KLVdoZW4gaW4gZG91YnQsIHNvbGljaXQgY29tbWVudHMgb24gbGludXgta2VybmVsIG1haWxpbmcgbGlzdC4KLQotCi0KLTExKSBJbmNsdWRlIFBBVENIIGluIHRoZSBzdWJqZWN0CisxMCkgSW5jbHVkZSBQQVRDSCBpbiB0aGUgc3ViamVjdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogRHVlIHRvIGhpZ2ggZS1tYWlsIHRyYWZmaWMgdG8gTGludXMsIGFuZCB0byBsaW51eC1rZXJuZWwsIGl0IGlzIGNvbW1vbgogY29udmVudGlvbiB0byBwcmVmaXggeW91ciBzdWJqZWN0IGxpbmUgd2l0aCBbUEFUQ0hdLiAgVGhpcyBsZXRzIExpbnVzCkBAIC0zNTUsNyArNDA0LDggQEAKIAogCiAKLTEyKSBTaWduIHlvdXIgd29yaworMTEpIFNpZ24geW91ciB3b3JrCistLS0tLS0tLS0tLS0tLS0tLS0KIAogVG8gaW1wcm92ZSB0cmFja2luZyBvZiB3aG8gZGlkIHdoYXQsIGVzcGVjaWFsbHkgd2l0aCBwYXRjaGVzIHRoYXQgY2FuCiBwZXJjb2xhdGUgdG8gdGhlaXIgZmluYWwgcmVzdGluZyBwbGFjZSBpbiB0aGUga2VybmVsIHRocm91Z2ggc2V2ZXJhbApAQCAtMzg3LDExICs0MzcsMTEgQEAKICAgICAgICAgICAgIHBlcnNvbiB3aG8gY2VydGlmaWVkIChhKSwgKGIpIG9yIChjKSBhbmQgSSBoYXZlIG5vdCBtb2RpZmllZAogICAgICAgICAgICAgaXQuCiAKLQkoZCkgSSB1bmRlcnN0YW5kIGFuZCBhZ3JlZSB0aGF0IHRoaXMgcHJvamVjdCBhbmQgdGhlIGNvbnRyaWJ1dGlvbgotCSAgICBhcmUgcHVibGljIGFuZCB0aGF0IGEgcmVjb3JkIG9mIHRoZSBjb250cmlidXRpb24gKGluY2x1ZGluZyBhbGwKLQkgICAgcGVyc29uYWwgaW5mb3JtYXRpb24gSSBzdWJtaXQgd2l0aCBpdCwgaW5jbHVkaW5nIG15IHNpZ24tb2ZmKSBpcwotCSAgICBtYWludGFpbmVkIGluZGVmaW5pdGVseSBhbmQgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgY29uc2lzdGVudCB3aXRoCi0JICAgIHRoaXMgcHJvamVjdCBvciB0aGUgb3BlbiBzb3VyY2UgbGljZW5zZShzKSBpbnZvbHZlZC4KKyAgICAgICAgKGQpIEkgdW5kZXJzdGFuZCBhbmQgYWdyZWUgdGhhdCB0aGlzIHByb2plY3QgYW5kIHRoZSBjb250cmlidXRpb24KKyAgICAgICAgICAgIGFyZSBwdWJsaWMgYW5kIHRoYXQgYSByZWNvcmQgb2YgdGhlIGNvbnRyaWJ1dGlvbiAoaW5jbHVkaW5nIGFsbAorICAgICAgICAgICAgcGVyc29uYWwgaW5mb3JtYXRpb24gSSBzdWJtaXQgd2l0aCBpdCwgaW5jbHVkaW5nIG15IHNpZ24tb2ZmKSBpcworICAgICAgICAgICAgbWFpbnRhaW5lZCBpbmRlZmluaXRlbHkgYW5kIG1heSBiZSByZWRpc3RyaWJ1dGVkIGNvbnNpc3RlbnQgd2l0aAorICAgICAgICAgICAgdGhpcyBwcm9qZWN0IG9yIHRoZSBvcGVuIHNvdXJjZSBsaWNlbnNlKHMpIGludm9sdmVkLgogCiB0aGVuIHlvdSBqdXN0IGFkZCBhIGxpbmUgc2F5aW5nCiAKQEAgLTQwMSw3ICs0NTEsNyBAQAogCiBTb21lIHBlb3BsZSBhbHNvIHB1dCBleHRyYSB0YWdzIGF0IHRoZSBlbmQuICBUaGV5J2xsIGp1c3QgYmUgaWdub3JlZCBmb3IKIG5vdywgYnV0IHlvdSBjYW4gZG8gdGhpcyB0byBtYXJrIGludGVybmFsIGNvbXBhbnkgcHJvY2VkdXJlcyBvciBqdXN0Ci1wb2ludCBvdXQgc29tZSBzcGVjaWFsIGRldGFpbCBhYm91dCB0aGUgc2lnbi1vZmYuIAorcG9pbnQgb3V0IHNvbWUgc3BlY2lhbCBkZXRhaWwgYWJvdXQgdGhlIHNpZ24tb2ZmLgogCiBJZiB5b3UgYXJlIGEgc3Vic3lzdGVtIG9yIGJyYW5jaCBtYWludGFpbmVyLCBzb21ldGltZXMgeW91IG5lZWQgdG8gc2xpZ2h0bHkKIG1vZGlmeSBwYXRjaGVzIHlvdSByZWNlaXZlIGluIG9yZGVyIHRvIG1lcmdlIHRoZW0sIGJlY2F1c2UgdGhlIGNvZGUgaXMgbm90CkBAIC00MjksMTUgKzQ3OSwxNSBAQAogU3BlY2lhbCBub3RlIHRvIGJhY2stcG9ydGVyczogSXQgc2VlbXMgdG8gYmUgYSBjb21tb24gYW5kIHVzZWZ1bCBwcmFjdGljZQogdG8gaW5zZXJ0IGFuIGluZGljYXRpb24gb2YgdGhlIG9yaWdpbiBvZiBhIHBhdGNoIGF0IHRoZSB0b3Agb2YgdGhlIGNvbW1pdAogbWVzc2FnZSAoanVzdCBhZnRlciB0aGUgc3ViamVjdCBsaW5lKSB0byBmYWNpbGl0YXRlIHRyYWNraW5nLiBGb3IgaW5zdGFuY2UsCi1oZXJlJ3Mgd2hhdCB3ZSBzZWUgaW4gMi42LXN0YWJsZSA6CitoZXJlJ3Mgd2hhdCB3ZSBzZWUgaW4gYSAzLngtc3RhYmxlIHJlbGVhc2U6CiAKLSAgICBEYXRlOiAgIFR1ZSBNYXkgMTMgMTk6MTA6MzAgMjAwOCArMDAwMAorRGF0ZTogICBUdWUgT2N0IDcgMDc6MjY6MzggMjAxNCAtMDQwMAogCi0gICAgICAgIFNDU0k6IGxpYmlzY3NpIHJlZ3Jlc3Npb24gaW4gMi42LjI1OiBmaXggbm9wIHRpbWVyIGhhbmRsaW5nCisgICAgbGliYXRhOiBVbi1icmVhayBBVEEgYmxhY2tsaXN0CiAKLSAgICAgICAgY29tbWl0IDRjZjEwNDM1OTNkYjZhMzM3ZjEwZTAwNmMyM2M2OWU1ZmM5M2U3MjIgdXBzdHJlYW0KKyAgICBjb21taXQgMWM0MDI3OTk2MGJjZDdkNTJkYmRmMWQ0NjZiMjBkMjRiOTkxNzZjOCB1cHN0cmVhbS4KIAotQW5kIGhlcmUncyB3aGF0IGFwcGVhcnMgaW4gMi40IDoKK0FuZCBoZXJlJ3Mgd2hhdCBtaWdodCBhcHBlYXIgaW4gYW4gb2xkZXIga2VybmVsIG9uY2UgYSBwYXRjaCBpcyBiYWNrcG9ydGVkOgogCiAgICAgRGF0ZTogICBUdWUgTWF5IDEzIDIyOjEyOjI3IDIwMDggKzAyMDAKIApAQCAtNDQ2LDE4ICs0OTYsMTkgQEAKICAgICAgICAgW2JhY2twb3J0IG9mIDIuNiBjb21taXQgYjdhY2JkZmJkMWYyNzdjMWViMjNmMzQ0Zjg5OWNmYTRjZDBiZjM2YV0KIAogV2hhdGV2ZXIgdGhlIGZvcm1hdCwgdGhpcyBpbmZvcm1hdGlvbiBwcm92aWRlcyBhIHZhbHVhYmxlIGhlbHAgdG8gcGVvcGxlCi10cmFja2luZyB5b3VyIHRyZWVzLCBhbmQgdG8gcGVvcGxlIHRyeWluZyB0byB0cm91YmxlLXNob290IGJ1Z3MgaW4geW91cgordHJhY2tpbmcgeW91ciB0cmVlcywgYW5kIHRvIHBlb3BsZSB0cnlpbmcgdG8gdHJvdWJsZXNob290IGJ1Z3MgaW4geW91cgogdHJlZS4KIAogCi0xMykgV2hlbiB0byB1c2UgQWNrZWQtYnk6IGFuZCBDYzoKKzEyKSBXaGVuIHRvIHVzZSBBY2tlZC1ieTogYW5kIENjOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBTaWduZWQtb2ZmLWJ5OiB0YWcgaW5kaWNhdGVzIHRoYXQgdGhlIHNpZ25lciB3YXMgaW52b2x2ZWQgaW4gdGhlCiBkZXZlbG9wbWVudCBvZiB0aGUgcGF0Y2gsIG9yIHRoYXQgaGUvc2hlIHdhcyBpbiB0aGUgcGF0Y2gncyBkZWxpdmVyeSBwYXRoLgogCiBJZiBhIHBlcnNvbiB3YXMgbm90IGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBwcmVwYXJhdGlvbiBvciBoYW5kbGluZyBvZiBhCiBwYXRjaCBidXQgd2lzaGVzIHRvIHNpZ25pZnkgYW5kIHJlY29yZCB0aGVpciBhcHByb3ZhbCBvZiBpdCB0aGVuIHRoZXkgY2FuCi1hcnJhbmdlIHRvIGhhdmUgYW4gQWNrZWQtYnk6IGxpbmUgYWRkZWQgdG8gdGhlIHBhdGNoJ3MgY2hhbmdlbG9nLgorYXNrIHRvIGhhdmUgYW4gQWNrZWQtYnk6IGxpbmUgYWRkZWQgdG8gdGhlIHBhdGNoJ3MgY2hhbmdlbG9nLgogCiBBY2tlZC1ieTogaXMgb2Z0ZW4gdXNlZCBieSB0aGUgbWFpbnRhaW5lciBvZiB0aGUgYWZmZWN0ZWQgY29kZSB3aGVuIHRoYXQKIG1haW50YWluZXIgbmVpdGhlciBjb250cmlidXRlZCB0byBub3IgZm9yd2FyZGVkIHRoZSBwYXRjaC4KQEAgLTQ2NSw3ICs1MTYsOCBAQAogQWNrZWQtYnk6IGlzIG5vdCBhcyBmb3JtYWwgYXMgU2lnbmVkLW9mZi1ieTouICBJdCBpcyBhIHJlY29yZCB0aGF0IHRoZSBhY2tlcgogaGFzIGF0IGxlYXN0IHJldmlld2VkIHRoZSBwYXRjaCBhbmQgaGFzIGluZGljYXRlZCBhY2NlcHRhbmNlLiAgSGVuY2UgcGF0Y2gKIG1lcmdlcnMgd2lsbCBzb21ldGltZXMgbWFudWFsbHkgY29udmVydCBhbiBhY2tlcidzICJ5ZXAsIGxvb2tzIGdvb2QgdG8gbWUiCi1pbnRvIGFuIEFja2VkLWJ5Oi4KK2ludG8gYW4gQWNrZWQtYnk6IChidXQgbm90ZSB0aGF0IGl0IGlzIHVzdWFsbHkgYmV0dGVyIHRvIGFzayBmb3IgYW4KK2V4cGxpY2l0IGFjaykuCiAKIEFja2VkLWJ5OiBkb2VzIG5vdCBuZWNlc3NhcmlseSBpbmRpY2F0ZSBhY2tub3dsZWRnZW1lbnQgb2YgdGhlIGVudGlyZSBwYXRjaC4KIEZvciBleGFtcGxlLCBpZiBhIHBhdGNoIGFmZmVjdHMgbXVsdGlwbGUgc3Vic3lzdGVtcyBhbmQgaGFzIGFuIEFja2VkLWJ5OiBmcm9tCkBAIC00NzcsMTEgKzUyOSwxMyBAQAogSWYgYSBwZXJzb24gaGFzIGhhZCB0aGUgb3Bwb3J0dW5pdHkgdG8gY29tbWVudCBvbiBhIHBhdGNoLCBidXQgaGFzIG5vdAogcHJvdmlkZWQgc3VjaCBjb21tZW50cywgeW91IG1heSBvcHRpb25hbGx5IGFkZCBhICJDYzoiIHRhZyB0byB0aGUgcGF0Y2guCiBUaGlzIGlzIHRoZSBvbmx5IHRhZyB3aGljaCBtaWdodCBiZSBhZGRlZCB3aXRob3V0IGFuIGV4cGxpY2l0IGFjdGlvbiBieSB0aGUKLXBlcnNvbiBpdCBuYW1lcy4gIFRoaXMgdGFnIGRvY3VtZW50cyB0aGF0IHBvdGVudGlhbGx5IGludGVyZXN0ZWQgcGFydGllcwotaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHRoZSBkaXNjdXNzaW9uCitwZXJzb24gaXQgbmFtZXMgLSBidXQgaXQgc2hvdWxkIGluZGljYXRlIHRoYXQgdGhpcyBwZXJzb24gd2FzIGNvcGllZCBvbiB0aGUKK3BhdGNoLiAgVGhpcyB0YWcgZG9jdW1lbnRzIHRoYXQgcG90ZW50aWFsbHkgaW50ZXJlc3RlZCBwYXJ0aWVzCitoYXZlIGJlZW4gaW5jbHVkZWQgaW4gdGhlIGRpc2N1c3Npb24uCiAKIAotMTQpIFVzaW5nIFJlcG9ydGVkLWJ5OiwgVGVzdGVkLWJ5OiwgUmV2aWV3ZWQtYnk6LCBTdWdnZXN0ZWQtYnk6IGFuZCBGaXhlczoKKzEzKSBVc2luZyBSZXBvcnRlZC1ieTosIFRlc3RlZC1ieTosIFJldmlld2VkLWJ5OiwgU3VnZ2VzdGVkLWJ5OiBhbmQgRml4ZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgUmVwb3J0ZWQtYnkgdGFnIGdpdmVzIGNyZWRpdCB0byBwZW9wbGUgd2hvIGZpbmQgYnVncyBhbmQgcmVwb3J0IHRoZW0gYW5kIGl0CiBob3BlZnVsbHkgaW5zcGlyZXMgdGhlbSB0byBoZWxwIHVzIGFnYWluIGluIHRoZSBmdXR1cmUuICBQbGVhc2Ugbm90ZSB0aGF0IGlmCkBAIC01NDEsNyArNTk1LDEzIEBACiBtZXRob2QgZm9yIGluZGljYXRpbmcgYSBidWcgZml4ZWQgYnkgdGhlIHBhdGNoLiBTZWUgIzIgYWJvdmUgZm9yIG1vcmUgZGV0YWlscy4KIAogCi0xNSkgVGhlIGNhbm9uaWNhbCBwYXRjaCBmb3JtYXQKKzE0KSBUaGUgY2Fub25pY2FsIHBhdGNoIGZvcm1hdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgc2VjdGlvbiBkZXNjcmliZXMgaG93IHRoZSBwYXRjaCBpdHNlbGYgc2hvdWxkIGJlIGZvcm1hdHRlZC4gIE5vdGUKK3RoYXQsIGlmIHlvdSBoYXZlIHlvdXIgcGF0Y2hlcyBzdG9yZWQgaW4gYSBnaXQgcmVwb3NpdG9yeSwgcHJvcGVyIHBhdGNoCitmb3JtYXR0aW5nIGNhbiBiZSBoYWQgd2l0aCAiZ2l0IGZvcm1hdC1wYXRjaCIuICBUaGUgdG9vbHMgY2Fubm90IGNyZWF0ZQordGhlIG5lY2Vzc2FyeSB0ZXh0LCB0aG91Z2gsIHNvIHJlYWQgdGhlIGluc3RydWN0aW9ucyBiZWxvdyBhbnl3YXkuCiAKIFRoZSBjYW5vbmljYWwgcGF0Y2ggc3ViamVjdCBsaW5lIGlzOgogCkBAIC01NDksNyArNjA5LDggQEAKIAogVGhlIGNhbm9uaWNhbCBwYXRjaCBtZXNzYWdlIGJvZHkgY29udGFpbnMgdGhlIGZvbGxvd2luZzoKIAotICAtIEEgImZyb20iIGxpbmUgc3BlY2lmeWluZyB0aGUgcGF0Y2ggYXV0aG9yLgorICAtIEEgImZyb20iIGxpbmUgc3BlY2lmeWluZyB0aGUgcGF0Y2ggYXV0aG9yIChvbmx5IG5lZWRlZCBpZiB0aGUgcGVyc29uCisgICAgc2VuZGluZyB0aGUgcGF0Y2ggaXMgbm90IHRoZSBhdXRob3IpLgogCiAgIC0gQW4gZW1wdHkgbGluZS4KIApAQCAtNjU2LDEyOCArNzE3LDYzIEBACiByZWZlcmVuY2VzLgogCiAKLTE2KSBTZW5kaW5nICJnaXQgcHVsbCIgcmVxdWVzdHMgIChmcm9tIExpbnVzIGVtYWlscykKKzE1KSBTZW5kaW5nICJnaXQgcHVsbCIgcmVxdWVzdHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotUGxlYXNlIHdyaXRlIHRoZSBnaXQgcmVwbyBhZGRyZXNzIGFuZCBicmFuY2ggbmFtZSBhbG9uZSBvbiB0aGUgc2FtZSBsaW5lCi1zbyB0aGF0IEkgY2FuJ3QgZXZlbiBieSBtaXN0YWtlIHB1bGwgZnJvbSB0aGUgd3JvbmcgYnJhbmNoLCBhbmQgc28KLXRoYXQgYSB0cmlwbGUtY2xpY2sganVzdCBzZWxlY3RzIHRoZSB3aG9sZSB0aGluZy4KK0lmIHlvdSBoYXZlIGEgc2VyaWVzIG9mIHBhdGNoZXMsIGl0IG1heSBiZSBtb3N0IGNvbnZlbmllbnQgdG8gaGF2ZSB0aGUKK21haW50YWluZXIgcHVsbCB0aGVtIGRpcmVjdGx5IGludG8gdGhlIHN1YnN5c3RlbSByZXBvc2l0b3J5IHdpdGggYQorImdpdCBwdWxsIiBvcGVyYXRpb24uICBOb3RlLCBob3dldmVyLCB0aGF0IHB1bGxpbmcgcGF0Y2hlcyBmcm9tIGEgZGV2ZWxvcGVyCityZXF1aXJlcyBhIGhpZ2hlciBkZWdyZWUgb2YgdHJ1c3QgdGhhbiB0YWtpbmcgcGF0Y2hlcyBmcm9tIGEgbWFpbGluZyBsaXN0LgorQXMgYSByZXN1bHQsIG1hbnkgc3Vic3lzdGVtIG1haW50YWluZXJzIGFyZSByZWx1Y3RhbnQgdG8gdGFrZSBwdWxsCityZXF1ZXN0cywgZXNwZWNpYWxseSBmcm9tIG5ldywgdW5rbm93biBkZXZlbG9wZXJzLiAgSWYgaW4gZG91YnQgeW91IGNhbiB1c2UKK3RoZSBwdWxsIHJlcXVlc3QgYXMgdGhlIGNvdmVyIGxldHRlciBmb3IgYSBub3JtYWwgcG9zdGluZyBvZiB0aGUgcGF0Y2gKK3NlcmllcywgZ2l2aW5nIHRoZSBtYWludGFpbmVyIHRoZSBvcHRpb24gb2YgdXNpbmcgZWl0aGVyLgogCi1TbyB0aGUgcHJvcGVyIGZvcm1hdCBpcyBzb21ldGhpbmcgYWxvbmcgdGhlIGxpbmVzIG9mOgorQSBwdWxsIHJlcXVlc3Qgc2hvdWxkIGhhdmUgW0dJVF0gb3IgW1BVTExdIGluIHRoZSBzdWJqZWN0IGxpbmUuICBUaGUKK3JlcXVlc3QgaXRzZWxmIHNob3VsZCBpbmNsdWRlIHRoZSByZXBvc2l0b3J5IG5hbWUgYW5kIHRoZSBicmFuY2ggb2YKK2ludGVyZXN0IG9uIGEgc2luZ2xlIGxpbmU7IGl0IHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlOgogCi0JIlBsZWFzZSBwdWxsIGZyb20KKyAgUGxlYXNlIHB1bGwgZnJvbQogCi0JCWdpdDovL2pkZWx2YXJlLnBjay5uZXJpbS5uZXQvamRlbHZhcmUtMi42IGkyYy1mb3ItbGludXMKKyAgICAgIGdpdDovL2pkZWx2YXJlLnBjay5uZXJpbS5uZXQvamRlbHZhcmUtMi42IGkyYy1mb3ItbGludXMKIAotCSB0byBnZXQgdGhlc2UgY2hhbmdlczoiCisgIHRvIGdldCB0aGVzZSBjaGFuZ2VzOiIKIAotc28gdGhhdCBJIGRvbid0IGhhdmUgdG8gaHVudC1hbmQtcGVjayBmb3IgdGhlIGFkZHJlc3MgYW5kIGluZXZpdGFibHkKLWdldCBpdCB3cm9uZyAoYWN0dWFsbHksIEkndmUgb25seSBnb3R0ZW4gaXQgd3JvbmcgYSBmZXcgdGltZXMsIGFuZAotY2hlY2tpbmcgYWdhaW5zdCB0aGUgZGlmZnN0YXQgdGVsbHMgbWUgd2hlbiBJIGdldCBpdCB3cm9uZywgYnV0IEknbQotanVzdCBhIGxvdCBtb3JlIGNvbWZvcnRhYmxlIHdoZW4gSSBkb24ndCBoYXZlIHRvICJsb29rIGZvciIgdGhlIHJpZ2h0Ci10aGluZyB0byBwdWxsLCBhbmQgZG91YmxlLWNoZWNrIHRoYXQgSSBoYXZlIHRoZSByaWdodCBicmFuY2gtbmFtZSkuCitBIHB1bGwgcmVxdWVzdCBzaG91bGQgYWxzbyBpbmNsdWRlIGFuIG92ZXJhbGwgbWVzc2FnZSBzYXlpbmcgd2hhdCB3aWxsIGJlCitpbmNsdWRlZCBpbiB0aGUgcmVxdWVzdCwgYSAiZ2l0IHNob3J0bG9nIiBsaXN0aW5nIG9mIHRoZSBwYXRjaGVzCit0aGVtc2VsdmVzLCBhbmQgYSBkaWZmc3RhdCBzaG93aW5nIHRoZSBvdmVyYWxsIGVmZmVjdCBvZiB0aGUgcGF0Y2ggc2VyaWVzLgorVGhlIGVhc2llc3Qgd2F5IHRvIGdldCBhbGwgdGhpcyBpbmZvcm1hdGlvbiB0b2dldGhlciBpcywgb2YgY291cnNlLCB0byBsZXQKK2dpdCBkbyBpdCBmb3IgeW91IHdpdGggdGhlICJnaXQgcmVxdWVzdC1wdWxsIiBjb21tYW5kLgogCitTb21lIG1haW50YWluZXJzIChpbmNsdWRpbmcgTGludXMpIHdhbnQgdG8gc2VlIHB1bGwgcmVxdWVzdHMgZnJvbSBzaWduZWQKK2NvbW1pdHM7IHRoYXQgaW5jcmVhc2VzIHRoZWlyIGNvbmZpZGVuY2UgdGhhdCB0aGUgcmVxdWVzdCBhY3R1YWxseSBjYW1lCitmcm9tIHlvdS4gIExpbnVzLCBpbiBwYXJ0aWN1bGFyLCB3aWxsIG5vdCBwdWxsIGZyb20gcHVibGljIGhvc3Rpbmcgc2l0ZXMKK2xpa2UgR2l0SHViIGluIHRoZSBhYnNlbmNlIG9mIGEgc2lnbmVkIHRhZy4KIAotUGxlYXNlIHVzZSAiZ2l0IGRpZmYgLU0gLS1zdGF0IC0tc3VtbWFyeSIgdG8gZ2VuZXJhdGUgdGhlIGRpZmZzdGF0OgotdGhlIC1NIGVuYWJsZXMgcmVuYW1lIGRldGVjdGlvbiwgYW5kIHRoZSBzdW1tYXJ5IGVuYWJsZXMgYSBzdW1tYXJ5IG9mCi1uZXcvZGVsZXRlZCBvciByZW5hbWVkIGZpbGVzLgorVGhlIGZpcnN0IHN0ZXAgdG93YXJkIGNyZWF0aW5nIHN1Y2ggdGFncyBpcyB0byBtYWtlIGEgR05VUEcga2V5IGFuZCBnZXQgaXQKK3NpZ25lZCBieSBvbmUgb3IgbW9yZSBjb3JlIGtlcm5lbCBkZXZlbG9wZXJzLiAgVGhpcyBzdGVwIGNhbiBiZSBoYXJkIGZvcgorbmV3IGRldmVsb3BlcnMsIGJ1dCB0aGVyZSBpcyBubyB3YXkgYXJvdW5kIGl0LiAgQXR0ZW5kaW5nIGNvbmZlcmVuY2VzIGNhbgorYmUgYSBnb29kIHdheSB0byBmaW5kIGRldmVsb3BlcnMgd2hvIGNhbiBzaWduIHlvdXIga2V5LgogCi1XaXRoIHJlbmFtZSBkZXRlY3Rpb24sIHRoZSBzdGF0aXN0aWNzIGFyZSByYXRoZXIgZGlmZmVyZW50IFsuLi5dCi1iZWNhdXNlIGdpdCB3aWxsIG5vdGljZSB0aGF0IGEgZmFpciBudW1iZXIgb2YgdGhlIGNoYW5nZXMgYXJlIHJlbmFtZXMuCitPbmNlIHlvdSBoYXZlIHByZXBhcmVkIGEgcGF0Y2ggc2VyaWVzIGluIGdpdCB0aGF0IHlvdSB3aXNoIHRvIGhhdmUgc29tZWJvZHkKK3B1bGwsIGNyZWF0ZSBhIHNpZ25lZCB0YWcgd2l0aCAiZ2l0IHRhZyAtcyIuICBUaGlzIHdpbGwgY3JlYXRlIGEgbmV3IHRhZworaWRlbnRpZnlpbmcgdGhlIGxhc3QgY29tbWl0IGluIHRoZSBzZXJpZXMgYW5kIGNvbnRhaW5pbmcgYSBzaWduYXR1cmUKK2NyZWF0ZWQgd2l0aCB5b3VyIHByaXZhdGUga2V5LiAgWW91IHdpbGwgYWxzbyBoYXZlIHRoZSBvcHBvcnR1bml0eSB0byBhZGQgYQorY2hhbmdlbG9nLXN0eWxlIG1lc3NhZ2UgdG8gdGhlIHRhZzsgdGhpcyBpcyBhbiBpZGVhbCBwbGFjZSB0byBkZXNjcmliZSB0aGUKK2VmZmVjdHMgb2YgdGhlIHB1bGwgcmVxdWVzdCBhcyBhIHdob2xlLgogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotU0VDVElPTiAyIC0gSElOVFMsIFRJUFMsIEFORCBUUklDS1MKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiB0aGUgdHJlZSB0aGUgbWFpbnRhaW5lciB3aWxsIGJlIHB1bGxpbmcgZnJvbSBpcyBub3QgdGhlIHJlcG9zaXRvcnkgeW91CithcmUgd29ya2luZyBmcm9tLCBkb24ndCBmb3JnZXQgdG8gcHVzaCB0aGUgc2lnbmVkIHRhZyBleHBsaWNpdGx5IHRvIHRoZQorcHVibGljIHRyZWUuCiAKLVRoaXMgc2VjdGlvbiBsaXN0cyBtYW55IG9mIHRoZSBjb21tb24gInJ1bGVzIiBhc3NvY2lhdGVkIHdpdGggY29kZQotc3VibWl0dGVkIHRvIHRoZSBrZXJuZWwuICBUaGVyZSBhcmUgYWx3YXlzIGV4Y2VwdGlvbnMuLi4gYnV0IHlvdSBtdXN0Ci1oYXZlIGEgcmVhbGx5IGdvb2QgcmVhc29uIGZvciBkb2luZyBzby4gIFlvdSBjb3VsZCBwcm9iYWJseSBjYWxsIHRoaXMKLXNlY3Rpb24gTGludXMgQ29tcHV0ZXIgU2NpZW5jZSAxMDEuCitXaGVuIGdlbmVyYXRpbmcgeW91ciBwdWxsIHJlcXVlc3QsIHVzZSB0aGUgc2lnbmVkIHRhZyBhcyB0aGUgdGFyZ2V0LiAgQQorY29tbWFuZCBsaWtlIHRoaXMgd2lsbCBkbyB0aGUgdHJpY2s6CiAKLQotCi0xKSBSZWFkIERvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKLQotTnVmZiBzYWlkLiAgSWYgeW91ciBjb2RlIGRldmlhdGVzIHRvbyBtdWNoIGZyb20gdGhpcywgaXQgaXMgbGlrZWx5Ci10byBiZSByZWplY3RlZCB3aXRob3V0IGZ1cnRoZXIgcmV2aWV3LCBhbmQgd2l0aG91dCBjb21tZW50LgotCi1PbmUgc2lnbmlmaWNhbnQgZXhjZXB0aW9uIGlzIHdoZW4gbW92aW5nIGNvZGUgZnJvbSBvbmUgZmlsZSB0bwotYW5vdGhlciAtLSBpbiB0aGlzIGNhc2UgeW91IHNob3VsZCBub3QgbW9kaWZ5IHRoZSBtb3ZlZCBjb2RlIGF0IGFsbCBpbgotdGhlIHNhbWUgcGF0Y2ggd2hpY2ggbW92ZXMgaXQuICBUaGlzIGNsZWFybHkgZGVsaW5lYXRlcyB0aGUgYWN0IG9mCi1tb3ZpbmcgdGhlIGNvZGUgYW5kIHlvdXIgY2hhbmdlcy4gIFRoaXMgZ3JlYXRseSBhaWRzIHJldmlldyBvZiB0aGUKLWFjdHVhbCBkaWZmZXJlbmNlcyBhbmQgYWxsb3dzIHRvb2xzIHRvIGJldHRlciB0cmFjayB0aGUgaGlzdG9yeSBvZgotdGhlIGNvZGUgaXRzZWxmLgotCi1DaGVjayB5b3VyIHBhdGNoZXMgd2l0aCB0aGUgcGF0Y2ggc3R5bGUgY2hlY2tlciBwcmlvciB0byBzdWJtaXNzaW9uCi0oc2NyaXB0cy9jaGVja3BhdGNoLnBsKS4gIFRoZSBzdHlsZSBjaGVja2VyIHNob3VsZCBiZSB2aWV3ZWQgYXMKLWEgZ3VpZGUgbm90IGFzIHRoZSBmaW5hbCB3b3JkLiAgSWYgeW91ciBjb2RlIGxvb2tzIGJldHRlciB3aXRoCi1hIHZpb2xhdGlvbiB0aGVuIGl0cyBwcm9iYWJseSBiZXN0IGxlZnQgYWxvbmUuCi0KLVRoZSBjaGVja2VyIHJlcG9ydHMgYXQgdGhyZWUgbGV2ZWxzOgotIC0gRVJST1I6IHRoaW5ncyB0aGF0IGFyZSB2ZXJ5IGxpa2VseSB0byBiZSB3cm9uZwotIC0gV0FSTklORzogdGhpbmdzIHJlcXVpcmluZyBjYXJlZnVsIHJldmlldwotIC0gQ0hFQ0s6IHRoaW5ncyByZXF1aXJpbmcgdGhvdWdodAotCi1Zb3Ugc2hvdWxkIGJlIGFibGUgdG8ganVzdGlmeSBhbGwgdmlvbGF0aW9ucyB0aGF0IHJlbWFpbiBpbiB5b3VyCi1wYXRjaC4KLQotCi0KLTIpICNpZmRlZnMgYXJlIHVnbHkKLQotQ29kZSBjbHV0dGVyZWQgd2l0aCBpZmRlZnMgaXMgZGlmZmljdWx0IHRvIHJlYWQgYW5kIG1haW50YWluLiAgRG9uJ3QgZG8KLWl0LiAgSW5zdGVhZCwgcHV0IHlvdXIgaWZkZWZzIGluIGEgaGVhZGVyLCBhbmQgY29uZGl0aW9uYWxseSBkZWZpbmUKLSdzdGF0aWMgaW5saW5lJyBmdW5jdGlvbnMsIG9yIG1hY3Jvcywgd2hpY2ggYXJlIHVzZWQgaW4gdGhlIGNvZGUuCi1MZXQgdGhlIGNvbXBpbGVyIG9wdGltaXplIGF3YXkgdGhlICJuby1vcCIgY2FzZS4KLQotU2ltcGxlIGV4YW1wbGUsIG9mIHBvb3IgY29kZToKLQotCWRldiA9IGFsbG9jX2V0aGVyZGV2IChzaXplb2Yoc3RydWN0IGZ1bmt5X3ByaXZhdGUpKTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JI2lmZGVmIENPTkZJR19ORVRfRlVOS0lORVNTCi0JaW5pdF9mdW5reV9uZXQoZGV2KTsKLQkjZW5kaWYKLQotQ2xlYW5lZC11cCBleGFtcGxlOgotCi0oaW4gaGVhZGVyKQotCSNpZm5kZWYgQ09ORklHX05FVF9GVU5LSU5FU1MKLQlzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9mdW5reV9uZXQgKHN0cnVjdCBuZXRfZGV2aWNlICpkKSB7fQotCSNlbmRpZgotCi0oaW4gdGhlIGNvZGUgaXRzZWxmKQotCWRldiA9IGFsbG9jX2V0aGVyZGV2IChzaXplb2Yoc3RydWN0IGZ1bmt5X3ByaXZhdGUpKTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaW5pdF9mdW5reV9uZXQoZGV2KTsKLQotCi0KLTMpICdzdGF0aWMgaW5saW5lJyBpcyBiZXR0ZXIgdGhhbiBhIG1hY3JvCi0KLVN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBncmVhdGx5IHByZWZlcnJlZCBvdmVyIG1hY3Jvcy4KLVRoZXkgcHJvdmlkZSB0eXBlIHNhZmV0eSwgaGF2ZSBubyBsZW5ndGggbGltaXRhdGlvbnMsIG5vIGZvcm1hdHRpbmcKLWxpbWl0YXRpb25zLCBhbmQgdW5kZXIgZ2NjIHRoZXkgYXJlIGFzIGNoZWFwIGFzIG1hY3Jvcy4KLQotTWFjcm9zIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNhc2VzIHdoZXJlIGEgc3RhdGljIGlubGluZSBpcyBjbGVhcmx5Ci1zdWJvcHRpbWFsIFt0aGVyZSBhcmUgYSBmZXcsIGlzb2xhdGVkIGNhc2VzIG9mIHRoaXMgaW4gZmFzdCBwYXRoc10sCi1vciB3aGVyZSBpdCBpcyBpbXBvc3NpYmxlIHRvIHVzZSBhIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gW3N1Y2ggYXMKLXN0cmluZy1pemluZ10uCi0KLSdzdGF0aWMgaW5saW5lJyBpcyBwcmVmZXJyZWQgb3ZlciAnc3RhdGljIF9faW5saW5lX18nLCAnZXh0ZXJuIGlubGluZScsCi1hbmQgJ2V4dGVybiBfX2lubGluZV9fJy4KLQotCi0KLTQpIERvbid0IG92ZXItZGVzaWduLgotCi1Eb24ndCB0cnkgdG8gYW50aWNpcGF0ZSBuZWJ1bG91cyBmdXR1cmUgY2FzZXMgd2hpY2ggbWF5IG9yIG1heSBub3QKLWJlIHVzZWZ1bDogICJNYWtlIGl0IGFzIHNpbXBsZSBhcyB5b3UgY2FuLCBhbmQgbm8gc2ltcGxlci4iCi0KKyAgZ2l0IHJlcXVlc3QtcHVsbCBtYXN0ZXIgZ2l0Oi8vbXkucHVibGljLnRyZWUvbGludXguZ2l0IG15LXNpZ25lZC10YWcKIAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TRUNUSU9OIDMgLSBSRUZFUkVOQ0VTCitTRUNUSU9OIDIgLSBSRUZFUkVOQ0VTCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEFuZHJldyBNb3J0b24sICJUaGUgcGVyZmVjdCBwYXRjaCIgKHRwcCkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FjcGkvZW51bWVyYXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9hY3BpL2VudW1lcmF0aW9uLnR4dAppbmRleCBiNjBkMmFiLi45YjEyMWE1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FjcGkvZW51bWVyYXRpb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vYWNwaS9lbnVtZXJhdGlvbi50eHQKQEAgLTI0Myw3ICsyNDMsNyBAQAogCQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCQkucG0JPSAmbXB1MzA1MF9wbSwKIAkJCS5vZl9tYXRjaF90YWJsZSA9IG1wdTMwNTBfb2ZfbWF0Y2gsCi0JCQkuYWNwaV9tYXRjaF90YWJsZSAgQUNQSV9QVFIobXB1MzA1MF9hY3BpX21hdGNoKSwKKwkJCS5hY3BpX21hdGNoX3RhYmxlID0gQUNQSV9QVFIobXB1MzA1MF9hY3BpX21hdGNoKSwKIAkJfSwKIAkJLnByb2JlCQk9IG1wdTMwNTBfcHJvYmUsCiAJCS5yZW1vdmUJCT0gbXB1MzA1MF9yZW1vdmUsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vYXJtLzAwLUlOREVYCmluZGV4IDNiMDhiYzIuLjhlZGI5MDAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vYXJtLzAwLUlOREVYCkBAIC0yLDExICsyLDE1IEBACiAJLSB0aGlzIGZpbGUKIEJvb3RpbmcKIAktIHJlcXVpcmVtZW50cyBmb3IgYm9vdGluZworQ0NOLnR4dAorCS0gQ2FjaGUgQ29oZXJlbnQgTmV0d29yayByaW5nLWJ1cyBhbmQgcGVyZiBQTVUgZHJpdmVyLgogSW50ZXJydXB0cwogCS0gQVJNIEludGVycnVwdCBzdWJzeXN0ZW0gZG9jdW1lbnRhdGlvbgogSVhQNHh4CiAJLSBJbnRlbCBJWFA0eHggTmV0d29yayBwcm9jZXNzb3IuCi1tc20KK01ha2VmaWxlCisJLSBCdWlsZCBzb3VyY2VmaWxlcyBhcyBwYXJ0IG9mIHRoZSBEb2N1bWVudGF0aW9uLWJ1aWxkIGZvciBhcm0KK21zbS8KIAktIE1TTSBzcGVjaWZpYyBkb2N1bWVudGF0aW9uCiBOZXR3aW5kZXIKIAktIE5ldHdpbmRlciBzcGVjaWZpYyBkb2N1bWVudGF0aW9uCkBAIC0xOCwxMSArMjIsOSBAQAogCS0gR2VuZXJhbCBBUk0gZG9jdW1lbnRhdGlvbgogU0ExMTAwLwogCS0gU0ExMTAwIGRvY3VtZW50YXRpb24KLVNhbXN1bmctUzNDMjRYWAorU2Ftc3VuZy1TM0MyNFhYLwogCS0gUzNDMjRYWCBBUk0gTGludXggT3ZlcnZpZXcKLVNoYXJwLUxICi0JLSBMaW51eCBvbiBTaGFycCBMSDc5NTI0IGFuZCBMSDdBNDBYIFN5c3RlbSBPbiBhIENoaXAgKFNPQykKLVNQRUFyCitTUEVBci8KIAktIFNUIFNQRUFyIHBsYXRmb3JtIExpbnV4IE92ZXJ2aWV3CiBWRlAvCiAJLSBSZWxlYXNlIG5vdGVzIGZvciBMaW51eCBLZXJuZWwgVmVjdG9yIEZsb2F0aW5nIFBvaW50IHN1cHBvcnQgY29kZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm02NC9sZWdhY3lfaW5zdHJ1Y3Rpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vYXJtNjQvbGVnYWN5X2luc3RydWN0aW9ucy50eHQKaW5kZXggYTNiM2RhMi4uMDFiZjNkOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hcm02NC9sZWdhY3lfaW5zdHJ1Y3Rpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2FybTY0L2xlZ2FjeV9pbnN0cnVjdGlvbnMudHh0CkBAIC0zMiw2ICszMiw5IEBACiBhcmNoaXRlY3R1cmUuIERlcHJlY2F0ZWQgaW5zdHJ1Y3Rpb25zIHNob3VsZCBkZWZhdWx0IHRvIGVtdWxhdGlvbgogd2hpbGUgb2Jzb2xldGUgaW5zdHJ1Y3Rpb25zIG11c3QgYmUgdW5kZWZpbmVkIGJ5IGRlZmF1bHQuCiAKK05vdGU6IEluc3RydWN0aW9uIGVtdWxhdGlvbiBtYXkgbm90IGJlIHBvc3NpYmxlIGluIGFsbCBjYXNlcy4gU2VlCitpbmRpdmlkdWFsIGluc3RydWN0aW9uIG5vdGVzIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorCiBTdXBwb3J0ZWQgbGVnYWN5IGluc3RydWN0aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICogU1dQe0J9CkBAIC00MywzICs0NiwxMiBAQAogTm9kZTogL3Byb2Mvc3lzL2FiaS9jcDE1X2JhcnJpZXIKIFN0YXR1czogRGVwcmVjYXRlZAogRGVmYXVsdDogRW11bGF0ZSAoMSkKKworKiBTRVRFTkQKK05vZGU6IC9wcm9jL3N5cy9hYmkvc2V0ZW5kCitTdGF0dXM6IERlcHJlY2F0ZWQKK0RlZmF1bHQ6IEVtdWxhdGUgKDEpKgorTm90ZTogQWxsIHRoZSBjcHVzIG9uIHRoZSBzeXN0ZW0gbXVzdCBoYXZlIG1peGVkIGVuZGlhbiBzdXBwb3J0IGF0IEVMMAorZm9yIHRoaXMgZmVhdHVyZSB0byBiZSBlbmFibGVkLiBJZiBhIG5ldyBDUFUgLSB3aGljaCBkb2Vzbid0IHN1cHBvcnQgbWl4ZWQKK2VuZGlhbiAtIGlzIGhvdHBsdWdnZWQgaW4gYWZ0ZXIgdGhpcyBmZWF0dXJlIGhhcyBiZWVuIGVuYWJsZWQsIHRoZXJlIGNvdWxkCitiZSB1bmV4cGVjdGVkIHJlc3VsdHMgaW4gdGhlIGFwcGxpY2F0aW9uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vYmxhY2tmaW4vTWFrZWZpbGUKaW5kZXggYzdlNmM5OS4uMDNmNzgwNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ibGFja2Zpbi9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL2JsYWNrZmluL01ha2VmaWxlCkBAIC0xLDMgKzEsNSBAQAogaWZuZXEgKCQoQ09ORklHX0JMQUNLRklOKSwpCitpZm5lcSAoJChDT05GSUdfQkZJTl9HUFRJTUVSUywpCiBvYmotbSA6PSBncHRpbWVycy1leGFtcGxlLm8KIGVuZGlmCitlbmRpZgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQgYi9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dAppbmRleCBkNzliMDA4Li4zZjlmODA4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NhY2hldGxiLnR4dApAQCAtMzE3LDEwICszMTcsMTAgQEAKIAlhYm91dCBkb2luZyB0aGlzLgogCiAJVGhlIGlkZWEgaXMsIGZpcnN0IGF0IGZsdXNoX2RjYWNoZV9wYWdlKCkgdGltZSwgaWYKLQlwYWdlLT5tYXBwaW5nLT5pX21tYXAgaXMgYW4gZW1wdHkgdHJlZSBhbmQgLT5pX21tYXBfbm9ubGluZWFyCi0JYW4gZW1wdHkgbGlzdCwganVzdCBtYXJrIHRoZSBhcmNoaXRlY3R1cmUgcHJpdmF0ZSBwYWdlIGZsYWcgYml0LgotCUxhdGVyLCBpbiB1cGRhdGVfbW11X2NhY2hlKCksIGEgY2hlY2sgaXMgbWFkZSBvZiB0aGlzIGZsYWcgYml0LAotCWFuZCBpZiBzZXQgdGhlIGZsdXNoIGlzIGRvbmUgYW5kIHRoZSBmbGFnIGJpdCBpcyBjbGVhcmVkLgorCXBhZ2UtPm1hcHBpbmctPmlfbW1hcCBpcyBhbiBlbXB0eSB0cmVlLCBqdXN0IG1hcmsgdGhlIGFyY2hpdGVjdHVyZQorCXByaXZhdGUgcGFnZSBmbGFnIGJpdC4gIExhdGVyLCBpbiB1cGRhdGVfbW11X2NhY2hlKCksIGEgY2hlY2sgaXMKKwltYWRlIG9mIHRoaXMgZmxhZyBiaXQsIGFuZCBpZiBzZXQgdGhlIGZsdXNoIGlzIGRvbmUgYW5kIHRoZSBmbGFnCisJYml0IGlzIGNsZWFyZWQuCiAKIAlJTVBPUlRBTlQgTk9URTogSXQgaXMgb2Z0ZW4gaW1wb3J0YW50LCBpZiB5b3UgZGVmZXIgdGhlIGZsdXNoLAogCQkJdGhhdCB0aGUgYWN0dWFsIGZsdXNoIG9jY3VycyBvbiB0aGUgc2FtZSBDUFUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy8wMC1JTkRFWAppbmRleCBiYzQ2MWI2Li45NmNlMDcxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLzAwLUlOREVYCkBAIC0yNCwzICsyNCw1IEBACiAJLSBOZXR3b3JrIHByaW9yaXR5IGNncm91cHMgZGV0YWlscyBhbmQgdXNhZ2VzLgogcmVzb3VyY2VfY291bnRlci50eHQKIAktIFJlc291cmNlIENvdW50ZXIgQVBJLgordW5pZmllZC1oaWVyYXJjaHkudHh0CisJLSBEZXNjcmlwdGlvbiB0aGUgbmV3L25leHQgY2dyb3VwIGludGVyZmFjZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy91bmlmaWVkLWhpZXJhcmNoeS50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvdW5pZmllZC1oaWVyYXJjaHkudHh0CmluZGV4IDRmNDU2MzIuLjcxZGFhMzUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy91bmlmaWVkLWhpZXJhcmNoeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL3VuaWZpZWQtaGllcmFyY2h5LnR4dApAQCAtMzI3LDYgKzMyNyw4NSBAQAogLSB1c2VfaGllcmFyY2h5IGlzIG9uIGJ5IGRlZmF1bHQgYW5kIHRoZSBjZ3JvdXAgZmlsZSBmb3IgdGhlIGZsYWcgaXMKICAgbm90IGNyZWF0ZWQuCiAKKy0gVGhlIG9yaWdpbmFsIGxvd2VyIGJvdW5kYXJ5LCB0aGUgc29mdCBsaW1pdCwgaXMgZGVmaW5lZCBhcyBhIGxpbWl0CisgIHRoYXQgaXMgcGVyIGRlZmF1bHQgdW5zZXQuICBBcyBhIHJlc3VsdCwgdGhlIHNldCBvZiBjZ3JvdXBzIHRoYXQKKyAgZ2xvYmFsIHJlY2xhaW0gcHJlZmVycyBpcyBvcHQtaW4sIHJhdGhlciB0aGFuIG9wdC1vdXQuICBUaGUgY29zdHMKKyAgZm9yIG9wdGltaXppbmcgdGhlc2UgbW9zdGx5IG5lZ2F0aXZlIGxvb2t1cHMgYXJlIHNvIGhpZ2ggdGhhdCB0aGUKKyAgaW1wbGVtZW50YXRpb24sIGRlc3BpdGUgaXRzIGVub3Jtb3VzIHNpemUsIGRvZXMgbm90IGV2ZW4gcHJvdmlkZSB0aGUKKyAgYmFzaWMgZGVzaXJhYmxlIGJlaGF2aW9yLiAgRmlyc3Qgb2ZmLCB0aGUgc29mdCBsaW1pdCBoYXMgbm8KKyAgaGllcmFyY2hpY2FsIG1lYW5pbmcuICBBbGwgY29uZmlndXJlZCBncm91cHMgYXJlIG9yZ2FuaXplZCBpbiBhCisgIGdsb2JhbCByYnRyZWUgYW5kIHRyZWF0ZWQgbGlrZSBlcXVhbCBwZWVycywgcmVnYXJkbGVzcyB3aGVyZSB0aGV5CisgIGFyZSBsb2NhdGVkIGluIHRoZSBoaWVyYXJjaHkuICBUaGlzIG1ha2VzIHN1YnRyZWUgZGVsZWdhdGlvbgorICBpbXBvc3NpYmxlLiAgU2Vjb25kLCB0aGUgc29mdCBsaW1pdCByZWNsYWltIHBhc3MgaXMgc28gYWdncmVzc2l2ZQorICB0aGF0IGl0IG5vdCBqdXN0IGludHJvZHVjZXMgaGlnaCBhbGxvY2F0aW9uIGxhdGVuY2llcyBpbnRvIHRoZQorICBzeXN0ZW0sIGJ1dCBhbHNvIGltcGFjdHMgc3lzdGVtIHBlcmZvcm1hbmNlIGR1ZSB0byBvdmVycmVjbGFpbSwgdG8KKyAgdGhlIHBvaW50IHdoZXJlIHRoZSBmZWF0dXJlIGJlY29tZXMgc2VsZi1kZWZlYXRpbmcuCisKKyAgVGhlIG1lbW9yeS5sb3cgYm91bmRhcnkgb24gdGhlIG90aGVyIGhhbmQgaXMgYSB0b3AtZG93biBhbGxvY2F0ZWQKKyAgcmVzZXJ2ZS4gIEEgY2dyb3VwIGVuam95cyByZWNsYWltIHByb3RlY3Rpb24gd2hlbiBpdCBhbmQgYWxsIGl0cworICBhbmNlc3RvcnMgYXJlIGJlbG93IHRoZWlyIGxvdyBib3VuZGFyaWVzLCB3aGljaCBtYWtlcyBkZWxlZ2F0aW9uIG9mCisgIHN1YnRyZWVzIHBvc3NpYmxlLiAgU2Vjb25kbHksIG5ldyBjZ3JvdXBzIGhhdmUgbm8gcmVzZXJ2ZSBwZXIKKyAgZGVmYXVsdCBhbmQgaW4gdGhlIGNvbW1vbiBjYXNlIG1vc3QgY2dyb3VwcyBhcmUgZWxpZ2libGUgZm9yIHRoZQorICBwcmVmZXJyZWQgcmVjbGFpbSBwYXNzLiAgVGhpcyBhbGxvd3MgdGhlIG5ldyBsb3cgYm91bmRhcnkgdG8gYmUKKyAgZWZmaWNpZW50bHkgaW1wbGVtZW50ZWQgd2l0aCBqdXN0IGEgbWlub3IgYWRkaXRpb24gdG8gdGhlIGdlbmVyaWMKKyAgcmVjbGFpbSBjb2RlLCB3aXRob3V0IHRoZSBuZWVkIGZvciBvdXQtb2YtYmFuZCBkYXRhIHN0cnVjdHVyZXMgYW5kCisgIHJlY2xhaW0gcGFzc2VzLiAgQmVjYXVzZSB0aGUgZ2VuZXJpYyByZWNsYWltIGNvZGUgY29uc2lkZXJzIGFsbAorICBjZ3JvdXBzIGV4Y2VwdCBmb3IgdGhlIG9uZXMgcnVubmluZyBsb3cgaW4gdGhlIHByZWZlcnJlZCBmaXJzdAorICByZWNsYWltIHBhc3MsIG92ZXJyZWNsYWltIG9mIGluZGl2aWR1YWwgZ3JvdXBzIGlzIGVsaW1pbmF0ZWQgYXMKKyAgd2VsbCwgcmVzdWx0aW5nIGluIG11Y2ggYmV0dGVyIG92ZXJhbGwgd29ya2xvYWQgcGVyZm9ybWFuY2UuCisKKy0gVGhlIG9yaWdpbmFsIGhpZ2ggYm91bmRhcnksIHRoZSBoYXJkIGxpbWl0LCBpcyBkZWZpbmVkIGFzIGEgc3RyaWN0CisgIGxpbWl0IHRoYXQgY2FuIG5vdCBidWRnZSwgZXZlbiBpZiB0aGUgT09NIGtpbGxlciBoYXMgdG8gYmUgY2FsbGVkLgorICBCdXQgdGhpcyBnZW5lcmFsbHkgZ29lcyBhZ2FpbnN0IHRoZSBnb2FsIG9mIG1ha2luZyB0aGUgbW9zdCBvdXQgb2YKKyAgdGhlIGF2YWlsYWJsZSBtZW1vcnkuICBUaGUgbWVtb3J5IGNvbnN1bXB0aW9uIG9mIHdvcmtsb2FkcyB2YXJpZXMKKyAgZHVyaW5nIHJ1bnRpbWUsIGFuZCB0aGF0IHJlcXVpcmVzIHVzZXJzIHRvIG92ZXJjb21taXQuICBCdXQgZG9pbmcKKyAgdGhhdCB3aXRoIGEgc3RyaWN0IHVwcGVyIGxpbWl0IHJlcXVpcmVzIGVpdGhlciBhIGZhaXJseSBhY2N1cmF0ZQorICBwcmVkaWN0aW9uIG9mIHRoZSB3b3JraW5nIHNldCBzaXplIG9yIGFkZGluZyBzbGFjayB0byB0aGUgbGltaXQuCisgIFNpbmNlIHdvcmtpbmcgc2V0IHNpemUgZXN0aW1hdGlvbiBpcyBoYXJkIGFuZCBlcnJvciBwcm9uZSwgYW5kCisgIGdldHRpbmcgaXQgd3JvbmcgcmVzdWx0cyBpbiBPT00ga2lsbHMsIG1vc3QgdXNlcnMgdGVuZCB0byBlcnIgb24gdGhlCisgIHNpZGUgb2YgYSBsb29zZXIgbGltaXQgYW5kIGVuZCB1cCB3YXN0aW5nIHByZWNpb3VzIHJlc291cmNlcy4KKworICBUaGUgbWVtb3J5LmhpZ2ggYm91bmRhcnkgb24gdGhlIG90aGVyIGhhbmQgY2FuIGJlIHNldCBtdWNoIG1vcmUKKyAgY29uc2VydmF0aXZlbHkuICBXaGVuIGhpdCwgaXQgdGhyb3R0bGVzIGFsbG9jYXRpb25zIGJ5IGZvcmNpbmcgdGhlbQorICBpbnRvIGRpcmVjdCByZWNsYWltIHRvIHdvcmsgb2ZmIHRoZSBleGNlc3MsIGJ1dCBpdCBuZXZlciBpbnZva2VzIHRoZQorICBPT00ga2lsbGVyLiAgQXMgYSByZXN1bHQsIGEgaGlnaCBib3VuZGFyeSB0aGF0IGlzIGNob3NlbiB0b28KKyAgYWdncmVzc2l2ZWx5IHdpbGwgbm90IHRlcm1pbmF0ZSB0aGUgcHJvY2Vzc2VzLCBidXQgaW5zdGVhZCBpdCB3aWxsCisgIGxlYWQgdG8gZ3JhZHVhbCBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbi4gIFRoZSB1c2VyIGNhbiBtb25pdG9yIHRoaXMKKyAgYW5kIG1ha2UgY29ycmVjdGlvbnMgdW50aWwgdGhlIG1pbmltYWwgbWVtb3J5IGZvb3RwcmludCB0aGF0IHN0aWxsCisgIGdpdmVzIGFjY2VwdGFibGUgcGVyZm9ybWFuY2UgaXMgZm91bmQuCisKKyAgSW4gZXh0cmVtZSBjYXNlcywgd2l0aCBtYW55IGNvbmN1cnJlbnQgYWxsb2NhdGlvbnMgYW5kIGEgY29tcGxldGUKKyAgYnJlYWtkb3duIG9mIHJlY2xhaW0gcHJvZ3Jlc3Mgd2l0aGluIHRoZSBncm91cCwgdGhlIGhpZ2ggYm91bmRhcnkKKyAgY2FuIGJlIGV4Y2VlZGVkLiAgQnV0IGV2ZW4gdGhlbiBpdCdzIG1vc3RseSBiZXR0ZXIgdG8gc2F0aXNmeSB0aGUKKyAgYWxsb2NhdGlvbiBmcm9tIHRoZSBzbGFjayBhdmFpbGFibGUgaW4gb3RoZXIgZ3JvdXBzIG9yIHRoZSByZXN0IG9mCisgIHRoZSBzeXN0ZW0gdGhhbiBraWxsaW5nIHRoZSBncm91cC4gIE90aGVyd2lzZSwgbWVtb3J5Lm1heCBpcyB0aGVyZQorICB0byBsaW1pdCB0aGlzIHR5cGUgb2Ygc3BpbGxvdmVyIGFuZCB1bHRpbWF0ZWx5IGNvbnRhaW4gYnVnZ3kgb3IgZXZlbgorICBtYWxpY2lvdXMgYXBwbGljYXRpb25zLgorCistIFRoZSBvcmlnaW5hbCBjb250cm9sIGZpbGUgbmFtZXMgYXJlIHVud2llbGR5IGFuZCBpbmNvbnNpc3RlbnQgaW4KKyAgbWFueSBkaWZmZXJlbnQgd2F5cy4gIEZvciBleGFtcGxlLCB0aGUgdXBwZXIgYm91bmRhcnkgaGl0IGNvdW50IGlzCisgIGV4cG9ydGVkIGluIHRoZSBtZW1vcnkuZmFpbGNudCBmaWxlLCBidXQgYW4gT09NIGV2ZW50IGNvdW50IGhhcyB0bworICBiZSBtYW51YWxseSBjb3VudGVkIGJ5IGxpc3RlbmluZyB0byBtZW1vcnkub29tX2NvbnRyb2wgZXZlbnRzLCBhbmQKKyAgbG93ZXIgYm91bmRhcnkgLyBzb2Z0IGxpbWl0IGV2ZW50cyBoYXZlIHRvIGJlIGNvdW50ZWQgYnkgZmlyc3QKKyAgc2V0dGluZyBhIHRocmVzaG9sZCBmb3IgdGhhdCB2YWx1ZSBhbmQgdGhlbiBjb3VudGluZyB0aG9zZSBldmVudHMuCisgIEFsc28sIHVzYWdlIGFuZCBsaW1pdCBmaWxlcyBlbmNvZGUgdGhlaXIgdW5pdHMgaW4gdGhlIGZpbGVuYW1lLgorICBUaGF0IG1ha2VzIHRoZSBmaWxlbmFtZXMgdmVyeSBsb25nLCBldmVuIHRob3VnaCB0aGlzIGlzIG5vdAorICBpbmZvcm1hdGlvbiB0aGF0IGEgdXNlciBuZWVkcyB0byBiZSByZW1pbmRlZCBvZiBldmVyeSB0aW1lIHRoZXkgdHlwZQorICBvdXQgdGhvc2UgbmFtZXMuCisKKyAgVG8gYWRkcmVzcyB0aGVzZSBuYW1pbmcgaXNzdWVzLCBhcyB3ZWxsIGFzIHRvIHNpZ25hbCBjbGVhcmx5IHRoYXQKKyAgdGhlIG5ldyBpbnRlcmZhY2UgY2FycmllcyBhIG5ldyBjb25maWd1cmF0aW9uIG1vZGVsLCB0aGUgbmFtaW5nCisgIGNvbnZlbnRpb25zIGluIGl0IG5lY2Vzc2FyaWx5IGRpZmZlciBmcm9tIHRoZSBvbGQgaW50ZXJmYWNlLgorCistIFRoZSBvcmlnaW5hbCBsaW1pdCBmaWxlcyBpbmRpY2F0ZSB0aGUgc3RhdGUgb2YgYW4gdW5zZXQgbGltaXQgd2l0aCBhCisgIFZlcnkgSGlnaCBOdW1iZXIsIGFuZCBhIGNvbmZpZ3VyZWQgbGltaXQgY2FuIGJlIHVuc2V0IGJ5IGVjaG9pbmcgLTEKKyAgaW50byB0aG9zZSBmaWxlcy4gIEJ1dCB0aGF0IHZlcnkgaGlnaCBudW1iZXIgaXMgaW1wbGVtZW50YXRpb24gYW5kCisgIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQgYW5kIG5vdCB2ZXJ5IGRlc2NyaXB0aXZlLiAgQW5kIHdoaWxlIC0xIGNhbgorICBiZSB1bmRlcnN0b29kIGFzIGFuIHVuZGVyZmxvdyBpbnRvIHRoZSBoaWdoZXN0IHBvc3NpYmxlIHZhbHVlLCAtMiBvcgorICAtMTBNIGV0Yy4gZG8gbm90IHdvcmssIHNvIGl0J3Mgbm90IGNvbnNpc3RlbnQuCisKKyAgbWVtb3J5LmxvdywgbWVtb3J5LmhpZ2gsIGFuZCBtZW1vcnkubWF4IHdpbGwgdXNlIHRoZSBzdHJpbmcKKyAgImluZmluaXR5IiB0byBpbmRpY2F0ZSBhbmQgc2V0IHRoZSBoaWdoZXN0IHBvc3NpYmxlIHZhbHVlLgogCiA1LiBQbGFubmVkIENoYW5nZXMKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9pbnRlbC1wc3RhdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9pbnRlbC1wc3RhdGUudHh0CmluZGV4IDc2NWQ3ZmMuLjY1NTc1MDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvaW50ZWwtcHN0YXRlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL2ludGVsLXBzdGF0ZS50eHQKQEAgLTM3LDYgKzM3LDE0IEBACiAgICAgICBub190dXJibzogbGltaXRzIHRoZSBkcml2ZXIgdG8gc2VsZWN0aW5nIFAgc3RhdGVzIGJlbG93IHRoZSB0dXJibwogICAgICAgZnJlcXVlbmN5IHJhbmdlLgogCisgICAgICB0dXJib19wY3Q6IGRpc3BsYXlzIHRoZSBwZXJjZW50YWdlIG9mIHRoZSB0b3RhbCBwZXJmb3JtYW5jZSB0aGF0CisgICAgICBpcyBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUgdGhhdCBpcyBpbiB0aGUgdHVyYm8gcmFuZ2UuICBUaGlzIG51bWJlcgorICAgICAgaXMgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciB0dXJibyBoYXMgYmVlbiBkaXNhYmxlZCBvciBub3QuCisKKyAgICAgIG51bV9wc3RhdGVzOiBkaXNwbGF5cyB0aGUgbnVtYmVyIG9mIHBzdGF0ZXMgdGhhdCBhcmUgc3VwcG9ydGVkCisgICAgICBieSBoYXJkd2FyZS4gIFRoaXMgbnVtYmVyIGlzIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgdHVyYm8gaGFzCisgICAgICBiZWVuIGRpc2FibGVkIG9yIG5vdC4KKwogRm9yIGNvbnRlbXBvcmFyeSBJbnRlbCBwcm9jZXNzb3JzLCB0aGUgZnJlcXVlbmN5IGlzIGNvbnRyb2xsZWQgYnkgdGhlCiBwcm9jZXNzb3IgaXRzZWxmIGFuZCB0aGUgUC1zdGF0ZXMgZXhwb3NlZCB0byBzb2Z0d2FyZSBhcmUgcmVsYXRlZCB0bwogcGVyZm9ybWFuY2UgbGV2ZWxzLiAgVGhlIGlkZWEgdGhhdCBmcmVxdWVuY3kgY2FuIGJlIHNldCB0byBhIHNpbmdsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9icmNtLWJyY21zdGIudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9icmNtLWJyY21zdGIudHh0CmluZGV4IDNjNDM2Y2MuLjQzMDYwOGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vYnJjbS1icmNtc3RiLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2JyY20tYnJjbXN0Yi50eHQKQEAgLTc5LDcgKzc5LDkgQEAKIFJlcXVpcmVkIHByb3BlcnRpZXMKIAogICAgIC0gY29tcGF0aWJsZQotICAgICAgICBUaGUgc3RyaW5nIHByb3BlcnR5ICJicmNtLGJyY21zdGItcmVib290Ii4KKyAgICAgICAgVGhlIHN0cmluZyBwcm9wZXJ0eSAiYnJjbSxicmNtc3RiLXJlYm9vdCIgZm9yIDQwbm0vMjhubSBjaGlwcyB3aXRoCisgICAgICAgIHRoZSBuZXcgU1lTX0NUUkwgaW50ZXJmYWNlLCBvciAiYnJjbSxiY203MDM4LXJlYm9vdCIgZm9yIDY1bm0KKyAgICAgICAgY2hpcHMgd2l0aCB0aGUgb2xkIFNVTl9UT1BfQ1RSTCBpbnRlcmZhY2UuCiAKICAgICAtIHN5c2NvbgogICAgICAgICBBIHBoYW5kbGUgLyBpbnRlZ2VyIGFycmF5IHRoYXQgcG9pbnRzIHRvIHRoZSBzeXNjb24gbm9kZSB3aGljaCBkZXNjcmliZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbDJjYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL2wyY2MudHh0CmluZGV4IDI5MmVmN2MuLjBkYmFiZTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbDJjYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9sMmNjLnR4dApAQCAtNTcsNiArNTcsMTYgQEAKIC0gY2FjaGUtaWQtcGFydDogY2FjaGUgaWQgcGFydCBudW1iZXIgdG8gYmUgdXNlZCBpZiBpdCBpcyBub3QgcHJlc2VudAogICBvbiBoYXJkd2FyZQogLSB3dC1vdmVycmlkZTogSWYgcHJlc2VudCB0aGVuIEwyIGlzIGZvcmNlZCB0byBXcml0ZSB0aHJvdWdoIG1vZGUKKy0gYXJtLGRvdWJsZS1saW5lZmlsbCA6IE92ZXJyaWRlIGRvdWJsZSBsaW5lZmlsbCBlbmFibGUgc2V0dGluZy4gRW5hYmxlIGlmCisgIG5vbi16ZXJvLCBkaXNhYmxlIGlmIHplcm8uCistIGFybSxkb3VibGUtbGluZWZpbGwtaW5jciA6IE92ZXJyaWRlIGRvdWJsZSBsaW5lZmlsbCBvbiBJTkNSIHJlYWQuIEVuYWJsZQorICBpZiBub24temVybywgZGlzYWJsZSBpZiB6ZXJvLgorLSBhcm0sZG91YmxlLWxpbmVmaWxsLXdyYXAgOiBPdmVycmlkZSBkb3VibGUgbGluZWZpbGwgb24gV1JBUCByZWFkLiBFbmFibGUKKyAgaWYgbm9uLXplcm8sIGRpc2FibGUgaWYgemVyby4KKy0gYXJtLHByZWZldGNoLWRyb3AgOiBPdmVycmlkZSBwcmVmZXRjaCBkcm9wIGVuYWJsZSBzZXR0aW5nLiBFbmFibGUgaWYgbm9uLXplcm8sCisgIGRpc2FibGUgaWYgemVyby4KKy0gYXJtLHByZWZldGNoLW9mZnNldCA6IE92ZXJyaWRlIHByZWZldGNoIG9mZnNldCB2YWx1ZS4gVmFsaWQgdmFsdWVzIGFyZQorICAwLTcsIDE1LCAyMywgYW5kIDMxLgogCiBFeGFtcGxlOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL21zbS90aW1lci50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXJtL21zbS90aW1lci50eHQKaW5kZXggYzZlZjhmMS4uNzQ2MDdiNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2FybS9tc20vdGltZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hcm0vbXNtL3RpbWVyLnR4dApAQCAtOCw3ICs4LDcgQEAKICAgICAgICAgICAgICAgICJxY29tLGtwc3MtdGltZXIiIC0ga3JhaXQgc3Vic3lzdGVtCiAgICAgICAgICAgICAgICAicWNvbSxzY3NzLXRpbWVyIiAtIHNjb3JwaW9uIHN1YnN5c3RlbQogCi0tIGludGVycnVwdHMgOiBJbnRlcnJ1cHRzIGZvciB0aGUgdGhlIGRlYnVnIHRpbWVyLCB0aGUgZmlyc3QgZ2VuZXJhbCBwdXJwb3NlCistIGludGVycnVwdHMgOiBJbnRlcnJ1cHRzIGZvciB0aGUgZGVidWcgdGltZXIsIHRoZSBmaXJzdCBnZW5lcmFsIHB1cnBvc2UKICAgICAgICAgICAgICAgIHRpbWVyLCBhbmQgb3B0aW9uYWxseSBhIHNlY29uZCBnZW5lcmFsIHB1cnBvc2UgdGltZXIgaW4gdGhhdAogICAgICAgICAgICAgICAgb3JkZXIuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hdGEvYWhjaS1wbGF0Zm9ybS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXRhL2FoY2ktcGxhdGZvcm0udHh0CmluZGV4IDRhYjA5ZjIuLmMyMzQwZWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hdGEvYWhjaS1wbGF0Zm9ybS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2F0YS9haGNpLXBsYXRmb3JtLnR4dApAQCAtMzcsOSArMzcsMTAgQEAKIAogCiBTdWItbm9kZXMgcmVxdWlyZWQgcHJvcGVydGllczoKLS0gcmVnICAgICAgICAgICAgICAgOiB0aGUgcG9ydCBudW1iZXIKLS0gcGh5cyAgICAgICAgICAgICAgOiByZWZlcmVuY2UgdG8gdGhlIFNBVEEgUEhZIG5vZGUKLQorLSByZWcJCSAgICA6IHRoZSBwb3J0IG51bWJlcgorQW5kIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CistIHBoeXMJCSAgICA6IHJlZmVyZW5jZSB0byB0aGUgU0FUQSBQSFkgbm9kZQorLSB0YXJnZXQtc3VwcGx5ICAgIDogcmVndWxhdG9yIGZvciBTQVRBIHRhcmdldCBwb3dlcgogCiBFeGFtcGxlczoKICAgICAgICAgc2F0YUBmZmUwODAwMCB7CkBAIC02OCwxMCArNjksMTIgQEAKIAkJc2F0YTA6IHNhdGEtcG9ydEAwIHsKIAkJCXJlZyA9IDwwPjsKIAkJCXBoeXMgPSA8JnNhdGFfcGh5IDA+OworCQkJdGFyZ2V0LXN1cHBseSA9IDwmcmVnX3NhdGEwPjsKIAkJfTsKIAogCQlzYXRhMTogc2F0YS1wb3J0QDEgewogCQkJcmVnID0gPDE+OwogCQkJcGh5cyA9IDwmc2F0YV9waHkgMT47CisJCQl0YXJnZXQtc3VwcGx5ID0gPCZyZWdfc2F0YTE+OzsKIAkJfTsKIAl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2F0YS9jYXZpdW0tY29tcGFjdC1mbGFzaC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXRhL2Nhdml1bS1jb21wYWN0LWZsYXNoLnR4dAppbmRleCA5Mzk4NmE1Li4zYmFjYzhlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXRhL2Nhdml1bS1jb21wYWN0LWZsYXNoLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYXRhL2Nhdml1bS1jb21wYWN0LWZsYXNoLnR4dApAQCAtOSw3ICs5LDcgQEAKIAogICBDb21wYXRpYmlsaXR5IHdpdGggbWFueSBDYXZpdW0gZXZhbHVhdGlvbiBib2FyZHMuCiAKLS0gcmVnOiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSB0aGUgQ0YgY2hpcCBzZWxlY3QgYmFua3MuICBEZXBlbmRpbmcgb24KKy0gcmVnOiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBDRiBjaGlwIHNlbGVjdCBiYW5rcy4gIERlcGVuZGluZyBvbgogICB0aGUgZGV2aWNlIGNvbmZpZ3VyYXRpb24sIHRoZXJlIG1heSBiZSBvbmUgb3IgdHdvIGJhbmtzLgogCiAtIGNhdml1bSxidXMtd2lkdGg6IFRoZSB3aWR0aCBvZiB0aGUgY29ubmVjdGlvbiB0byB0aGUgQ0YgZGV2aWNlcy4gIFZhbGlkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYzZ4L2RzY3IudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2M2eC9kc2NyLnR4dAppbmRleCBiMGU5NzE0Li45MjY3MjIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvYzZ4L2RzY3IudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9jNngvZHNjci50eHQKQEAgLTEyLDcgKzEyLDcgQEAKIGVuYWJsZSAoYW5kIGRpc2FibGUgaW4gc29tZSBjYXNlcykgU29DIHBpbiBkcml2ZXJzLCBzZWxlY3QgcGVyaXBoZXJhbCBjbG9jawogc291cmNlcyAoaW50ZXJuYWwgb3IgcGluKSwgZXRjLiBJbiBzb21lIGNhc2VzLCBhIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMKIHdyaXRlIG9uY2Ugb3IgdGhlIGluZGl2aWR1YWwgYml0cyBhcmUgd3JpdGUgb25jZS4gSW4gYWRkaXRpb24gdG8gZGV2aWNlIGNvbmZpZywKLXRoZSBEU0NSIGJsb2NrIG1heSBwcm92aWRlIHJlZ2lzdGVycyB3aGljaCB3aGljaCBhcmUgdXNlZCB0byByZXNldCBwZXJpcGhlcmFscywKK3RoZSBEU0NSIGJsb2NrIG1heSBwcm92aWRlIHJlZ2lzdGVycyB3aGljaCBhcmUgdXNlZCB0byByZXNldCBwZXJpcGhlcmFscywKIHByb3ZpZGUgZGV2aWNlIElEIGluZm9ybWF0aW9uLCBwcm92aWRlIGV0aGVybmV0IE1BQyBhZGRyZXNzZXMsIGFzIHdlbGwgYXMgb3RoZXIKIG1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGV2ZnJlcS9ldmVudC9leHlub3MtcHBtdS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZGV2ZnJlcS9ldmVudC9leHlub3MtcHBtdS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU0YmYzYQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kZXZmcmVxL2V2ZW50L2V4eW5vcy1wcG11LnR4dApAQCAtMCwwICsxLDExMCBAQAorCisqIFNhbXN1bmcgRXh5bm9zIFBQTVUgKFBsYXRmb3JtIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCkgZGV2aWNlCisKK1RoZSBTYW1zdW5nIEV4eW5vcyBTb0MgaGFzIFBQTVUgKFBsYXRmb3JtIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCkgZm9yCitlYWNoIElQLiBQUE1VIHByb3ZpZGVzIHRoZSBwcmltaXRpdmUgdmFsdWVzIHRvIGdldCBwZXJmb3JtYW5jZSBkYXRhLiBUaGVzZQorUFBNVSBldmVudHMgcHJvdmlkZSBpbmZvcm1hdGlvbiBvZiB0aGUgU29DJ3MgYmVoYXZpb3JzIHNvIHRoYXQgeW91IG1heQordXNlIHRvIGFuYWx5emUgc3lzdGVtIHBlcmZvcm1hbmNlLCB0byBtYWtlIGJlaGF2aW9ycyB2aXNpYmxlIGFuZCB0byBjb3VudAordXNhZ2VzIG9mIGVhY2ggSVAgKERNQywgQ1BVLCBSSUdIVEJVUywgTEVGVEJVUywgQ0FNIGludGVyZmFjZSwgTENELCBHM0QsIE1GQykuCitUaGUgRXh5bm9zIFBQTVUgZHJpdmVyIHVzZXMgdGhlIGRldmZyZXEtZXZlbnQgY2xhc3MgdG8gcHJvdmlkZSBldmVudCBkYXRhCit0byB2YXJpb3VzIGRldmZyZXEgZGV2aWNlcy4gVGhlIGRldmZyZXEgZGV2aWNlcyB3b3VsZCB1c2UgdGhlIGV2ZW50IGRhdGEgd2hlbgorZGVydGVybWluZyB0aGUgY3VycmVudCBzdGF0ZSBvZiBlYWNoIElQLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgInNhbXN1bmcsZXh5bm9zLXBwbXUiLgorLSByZWc6IHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBvZiBlYWNoIFBQTVUgYW5kIGxlbmd0aCBvZiBtZW1vcnkgbWFwcGVkIHJlZ2lvbi4KKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gY2xvY2stbmFtZXMgOiB0aGUgbmFtZSBvZiBjbG9jayB1c2VkIGJ5IHRoZSBQUE1VLCAicHBtdSIKKy0gY2xvY2tzIDogcGhhbmRsZXMgZm9yIGNsb2NrIHNwZWNpZmllZCBpbiAiY2xvY2stbmFtZXMiIHByb3BlcnR5CistICNjbG9jay1jZWxsczogc2hvdWxkIGJlIDEuCisKK0V4YW1wbGUxIDogUFBNVSBub2RlcyBpbiBleHlub3MzMjUwLmR0c2kgYXJlIGxpc3RlZCBiZWxvdy4KKworCQlwcG11X2RtYzA6IHBwbXVfZG1jMEAxMDZhMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zLXBwbXUiOworCQkJcmVnID0gPDB4MTA2YTAwMDAgMHgyMDAwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJcHBtdV9kbWMxOiBwcG11X2RtYzFAMTA2YjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vcy1wcG11IjsKKwkJCXJlZyA9IDwweDEwNmIwMDAwIDB4MjAwMD47CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXBwbXVfY3B1OiBwcG11X2NwdUAxMDZjMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zLXBwbXUiOworCQkJcmVnID0gPDB4MTA2YzAwMDAgMHgyMDAwPjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKKwkJcHBtdV9yaWdodGJ1czogcHBtdV9yaWdodGJ1c0AxMTJhMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zLXBwbXUiOworCQkJcmVnID0gPDB4MTEyYTAwMDAgMHgyMDAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19QUE1VUklHSFQ+OworCQkJY2xvY2stbmFtZXMgPSAicHBtdSI7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXBwbXVfbGVmdGJ1czogcHBtdV9sZWZ0YnVzMEAxMTZhMDAwMCB7CisJCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zLXBwbXUiOworCQkJcmVnID0gPDB4MTE2YTAwMDAgMHgyMDAwPjsKKwkJCWNsb2NrcyA9IDwmY211IENMS19QUE1VTEVGVD47CisJCQljbG9jay1uYW1lcyA9ICJwcG11IjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CisKK0V4YW1wbGUyIDogRXZlbnRzIG9mIGVhY2ggUFBNVSBub2RlIGluIGV4eW5vczMyNTAtcmluYXRvLmR0cyBhcmUgbGlzdGVkIGJlbG93LgorCisJJnBwbXVfZG1jMCB7CisJCXN0YXR1cyA9ICJva2F5IjsKKworCQlldmVudHMgeworCQkJcHBtdV9kbWMwXzM6IHBwbXUtZXZlbnQzLWRtYzAgeworCQkJCWV2ZW50LW5hbWUgPSAicHBtdS1ldmVudDMtZG1jMCI7CisJCQl9OworCisJCQlwcG11X2RtYzBfMjogcHBtdS1ldmVudDItZG1jMCB7CisJCQkJZXZlbnQtbmFtZSA9ICJwcG11LWV2ZW50Mi1kbWMwIjsKKwkJCX07CisKKwkJCXBwbXVfZG1jMF8xOiBwcG11LWV2ZW50MS1kbWMwIHsKKwkJCQlldmVudC1uYW1lID0gInBwbXUtZXZlbnQxLWRtYzAiOworCQkJfTsKKworCQkJcHBtdV9kbWMwXzA6IHBwbXUtZXZlbnQwLWRtYzAgeworCQkJCWV2ZW50LW5hbWUgPSAicHBtdS1ldmVudDAtZG1jMCI7CisJCQl9OworCQl9OworCX07CisKKwkmcHBtdV9kbWMxIHsKKwkJc3RhdHVzID0gIm9rYXkiOworCisJCWV2ZW50cyB7CisJCQlwcG11X2RtYzFfMzogcHBtdS1ldmVudDMtZG1jMSB7CisJCQkJZXZlbnQtbmFtZSA9ICJwcG11LWV2ZW50My1kbWMxIjsKKwkJCX07CisJCX07CisJfTsKKworCSZwcG11X2xlZnRidXMgeworCQlzdGF0dXMgPSAib2theSI7CisKKwkJZXZlbnRzIHsKKwkJCXBwbXVfbGVmdGJ1c18zOiBwcG11LWV2ZW50My1sZWZ0YnVzIHsKKwkJCQlldmVudC1uYW1lID0gInBwbXUtZXZlbnQzLWxlZnRidXMiOworCQkJfTsKKwkJfTsKKwl9OworCisJJnBwbXVfcmlnaHRidXMgeworCQlzdGF0dXMgPSAib2theSI7CisKKwkJZXZlbnRzIHsKKwkJCXBwbXVfcmlnaHRidXNfMzogcHBtdS1ldmVudDMtcmlnaHRidXMgeworCQkJCWV2ZW50LW5hbWUgPSAicHBtdS1ldmVudDMtcmlnaHRidXMiOworCQkJfTsKKwkJfTsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2RtYS9yZW5lc2FzLHJjYXItZG1hYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL3JlbmVzYXMscmNhci1kbWFjLnR4dAppbmRleCBkZjBmNDhiLi5mN2UyMWIxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL3JlbmVzYXMscmNhci1kbWFjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZG1hL3JlbmVzYXMscmNhci1kbWFjLnR4dApAQCAtMSw2ICsxLDYgQEAKICogUmVuZXNhcyBSLUNhciBETUEgQ29udHJvbGxlciBEZXZpY2UgVHJlZSBiaW5kaW5ncwogCi1SZW5lc2FzIFItQ2FyIEdlbmVyYXRpb24gMiBTb0NzIGhhdmUgaGF2ZSBtdWx0aXBsZSBtdWx0aS1jaGFubmVsIERNQQorUmVuZXNhcyBSLUNhciBHZW5lcmF0aW9uIDIgU29DcyBoYXZlIG11bHRpcGxlIG11bHRpLWNoYW5uZWwgRE1BCiBjb250cm9sbGVyIGluc3RhbmNlcyBuYW1lZCBETUFDIGNhcGFibGUgb2Ygc2VydmluZyBtdWx0aXBsZSBjbGllbnRzLiBDaGFubmVscwogY2FuIGJlIGRlZGljYXRlZCB0byBzcGVjaWZpYyBjbGllbnRzIG9yIHNoYXJlZCBiZXR3ZWVuIGEgbGFyZ2UgbnVtYmVyIG9mCiBjbGllbnRzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vZnVqaXRzdSxtYjg2czcwLWdwaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vZnVqaXRzdSxtYjg2czcwLWdwaW8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZjM1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9mdWppdHN1LG1iODZzNzAtZ3Bpby50eHQKQEAgLTAsMCArMSwyMCBAQAorRnVqaXRzdSBNQjg2Uzd4IEdQSU8gQ29udHJvbGxlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgImZ1aml0c3UsbWI4NnM3MC1ncGlvIgorLSByZWc6IEJhc2UgYWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHJlZ2lzdGVyIHNwYWNlCistIGNsb2NrczogU3BlY2lmeSB0aGUgY2xvY2sKKy0gZ3Bpby1jb250cm9sbGVyOiBNYXJrcyB0aGUgZGV2aWNlIG5vZGUgYXMgYSBncGlvIGNvbnRyb2xsZXIuCistICNncGlvLWNlbGxzOiBTaG91bGQgYmUgPDI+LiBUaGUgZmlyc3QgY2VsbCBpcyB0aGUgcGluIG51bWJlciBhbmQgdGhlCisgIHNlY29uZCBjZWxsIGlzIHVzZWQgdG8gc3BlY2lmeSBvcHRpb25hbCBwYXJhbWV0ZXJzOgorICAgLSBiaXQgMCBzcGVjaWZpZXMgcG9sYXJpdHkgKDAgZm9yIG5vcm1hbCwgMSBmb3IgaW52ZXJ0ZWQpLgorCitFeGFtcGxlczoKKwlncGlvMDogZ3Bpb0AzMTAwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnVqaXRzdSxtYjg2czcwLWdwaW8iOworCQlyZWcgPSA8MCAweDMxMDAwMDAwIDB4MTAwMDA+OworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQljbG9ja3MgPSA8JmNsayAwIDIgMT47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2dwaW8tbWF4NzMyeC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvLW1heDczMngudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZGM4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvLW1heDczMngudHh0CkBAIC0wLDAgKzEsNTkgQEAKKyogTUFYNzMyeC1jb21wYXRpYmxlIEkvTyBleHBhbmRlcnMKKworUmVxdWlyZWQgcHJvcGVydGllczoKKyAgLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisgICAgLSAibWF4aW0sbWF4NzMxOSI6IEZvciB0aGUgTWF4aW0gTUFYNzMxOQorICAgIC0gIm1heGltLG1heDczMjAiOiBGb3IgdGhlIE1heGltIE1BWDczMjAKKyAgICAtICJtYXhpbSxtYXg3MzIxIjogRm9yIHRoZSBNYXhpbSBNQVg3MzIxCisgICAgLSAibWF4aW0sbWF4NzMyMiI6IEZvciB0aGUgTWF4aW0gTUFYNzMyMgorICAgIC0gIm1heGltLG1heDczMjMiOiBGb3IgdGhlIE1heGltIE1BWDczMjMKKyAgICAtICJtYXhpbSxtYXg3MzI0IjogRm9yIHRoZSBNYXhpbSBNQVg3MzI0CisgICAgLSAibWF4aW0sbWF4NzMyNSI6IEZvciB0aGUgTWF4aW0gTUFYNzMyNQorICAgIC0gIm1heGltLG1heDczMjYiOiBGb3IgdGhlIE1heGltIE1BWDczMjYKKyAgICAtICJtYXhpbSxtYXg3MzI3IjogRm9yIHRoZSBNYXhpbSBNQVg3MzI3CisgIC0gcmVnOiBJMkMgc2xhdmUgYWRkcmVzcyBmb3IgdGhpcyBkZXZpY2UuCisgIC0gZ3Bpby1jb250cm9sbGVyOiBNYXJrcyB0aGUgZGV2aWNlIG5vZGUgYXMgYSBHUElPIGNvbnRyb2xsZXIuCisgIC0gI2dwaW8tY2VsbHM6IFNob3VsZCBiZSAyLgorICAgIC0gZmlyc3QgY2VsbCBpcyB0aGUgR1BJTyBudW1iZXIKKyAgICAtIHNlY29uZCBjZWxsIHNwZWNpZmllcyBHUElPIGZsYWdzLCBhcyBkZWZpbmVkIGluIDxkdC1iaW5kaW5ncy9ncGlvL2dwaW8uaD4uCisgICAgICBPbmx5IHRoZSBHUElPX0FDVElWRV9ISUdIIGFuZCBHUElPX0FDVElWRV9MT1cgZmxhZ3MgYXJlIHN1cHBvcnRlZC4KKworT3B0aW9uYWwgcHJvcGVydGllczoKKworICBUaGUgSS9PIGV4cGFuZGVyIGNhbiBkZXRlY3QgaW5wdXQgc3RhdGUgY2hhbmdlcywgYW5kIHRodXMgb3B0aW9uYWxseSBhY3QgYXMKKyAgYW4gaW50ZXJydXB0IGNvbnRyb2xsZXIuIFdoZW4gdGhlIGV4cGFuZGVyIGludGVycnVwdCBsaW5lIGlzIGNvbm5lY3RlZCBhbGwgdGhlCisgIGZvbGxvd2luZyBwcm9wZXJ0aWVzIG11c3QgYmUgc2V0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIHRoZQorICBpbnRlcnJ1cHQgY29udHJvbGxlciBkZXZpY2UgdHJlZSBiaW5kaW5ncyBkb2N1bWVudGF0aW9uIGF2YWlsYWJsZSBhdAorICBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaW50ZXJydXB0cy50eHQuCisKKyAgLSBpbnRlcnJ1cHQtY29udHJvbGxlcjogSWRlbnRpZmllcyB0aGUgbm9kZSBhcyBhbiBpbnRlcnJ1cHQgY29udHJvbGxlci4KKyAgLSAjaW50ZXJydXB0LWNlbGxzOiBOdW1iZXIgb2YgY2VsbHMgdG8gZW5jb2RlIGFuIGludGVycnVwdCBzb3VyY2UsIHNoYWxsIGJlIDIuCisgICAgLSBmaXJzdCBjZWxsIGlzIHRoZSBwaW4gbnVtYmVyCisgICAgLSBzZWNvbmQgY2VsbCBpcyB1c2VkIHRvIHNwZWNpZnkgZmxhZ3MKKyAgLSBpbnRlcnJ1cHQtcGFyZW50OiBwaGFuZGxlIG9mIHRoZSBwYXJlbnQgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisgIC0gaW50ZXJydXB0czogSW50ZXJydXB0IHNwZWNpZmllciBmb3IgdGhlIGNvbnRyb2xsZXJzIGludGVycnVwdC4KKworUGxlYXNlIHJlZmVyIHRvIGdwaW8udHh0IGluIHRoaXMgZGlyZWN0b3J5IGZvciBkZXRhaWxzIG9mIHRoZSBjb21tb24gR1BJTworYmluZGluZ3MgdXNlZCBieSBjbGllbnQgZGV2aWNlcy4KKworRXhhbXBsZSAxLiBNQVg3MzI1IHdpdGggaW50ZXJydXB0IHN1cHBvcnQgZW5hYmxlZCAoQ09ORklHX0dQSU9fTUFYNzMyWF9JUlE9eSk6CisKKwlleHBhbmRlcjogbWF4NzMyNUA2ZCB7CisJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4NzMyNSI7CisJCXJlZyA9IDwweDZkPjsKKwkJZ3Bpby1jb250cm9sbGVyOworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmdwaW80PjsKKwkJaW50ZXJydXB0cyA9IDwyOSBJUlFfVFlQRV9FREdFX0ZBTExJTkc+OworCX07CisKK0V4YW1wbGUgMi4gTUFYNzMyNSB3aXRoIGludGVycnVwdCBzdXBwb3J0IGRpc2FibGVkIChDT05GSUdfR1BJT19NQVg3MzJYX0lSUT1uKToKKworCWV4cGFuZGVyOiBtYXg3MzI1QDZkIHsKKwkJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3MzI1IjsKKwkJcmVnID0gPDB4NmQ+OworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvLXBjZjg1N3gudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vZ3Bpby1wY2Y4NTd4LnR4dAppbmRleCBkNjMxOTRhLi5hZGE0ZTI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvLXBjZjg1N3gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2dwaW8tcGNmODU3eC50eHQKQEAgLTM5LDcgKzM5LDcgQEAKICAgLSBsaW5lcy1pbml0aWFsLXN0YXRlczogQml0bWFzayB0aGF0IHNwZWNpZmllcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiBlYWNoCiAgIGxpbmUuIFdoZW4gYSBiaXQgaXMgc2V0IHRvIHplcm8sIHRoZSBjb3JyZXNwb25kaW5nIGxpbmUgd2lsbCBiZSBpbml0aWFsaXplZCB0bwogICB0aGUgaW5wdXQgKHB1bGxlZC11cCkgc3RhdGUuIFdoZW4gdGhlICBiaXQgaXMgc2V0IHRvIG9uZSwgdGhlIGxpbmUgd2lsbCBiZQotICBpbml0aWFsaXplZCB0aGUgdGhlIGxvdy1sZXZlbCBvdXRwdXQgc3RhdGUuIElmIHRoZSBwcm9wZXJ0eSBpcyBub3Qgc3BlY2lmaWVkCisgIGluaXRpYWxpemVkIHRoZSBsb3ctbGV2ZWwgb3V0cHV0IHN0YXRlLiBJZiB0aGUgcHJvcGVydHkgaXMgbm90IHNwZWNpZmllZAogICBhbGwgbGluZXMgd2lsbCBiZSBpbml0aWFsaXplZCB0byB0aGUgaW5wdXQgc3RhdGUuCiAKICAgVGhlIEkvTyBleHBhbmRlciBjYW4gZGV0ZWN0IGlucHV0IHN0YXRlIGNoYW5nZXMsIGFuZCB0aHVzIG9wdGlvbmFsbHkgYWN0IGFzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvLXN4MTUweC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvLXN4MTUweC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEyYmI4NAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2dwaW8tc3gxNTB4LnR4dApAQCAtMCwwICsxLDQwIEBACitTRU1URUNIIFNYMTUweCBHUElPIGV4cGFuZGVyIGJpbmRpbmdzCisKKworUmVxdWlyZWQgcHJvcGVydGllczoKKworLSBjb21wYXRpYmxlOiBzaG91bGQgYmUgInNlbXRlY2gsc3gxNTA2cSIsCisJCQkic2VtdGVjaCxzeDE1MDhxIiwKKwkJCSJzZW10ZWNoLHN4MTUwOXEiLgorCistIHJlZzogVGhlIEkyQyBzbGF2ZSBhZGRyZXNzIGZvciB0aGlzIGRldmljZS4KKworLSBpbnRlcnJ1cHQtcGFyZW50OiBwaGFuZGxlIG9mIHRoZSBwYXJlbnQgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisKKy0gaW50ZXJydXB0czogSW50ZXJydXB0IHNwZWNpZmllciBmb3IgdGhlIGNvbnRyb2xsZXJzIGludGVycnVwdC4KKworLSAjZ3Bpby1jZWxsczogU2hvdWxkIGJlIDIuIFRoZSBmaXJzdCBjZWxsIGlzIHRoZSBHUElPIG51bWJlciBhbmQgdGhlCisJCXNlY29uZCBjZWxsIGlzIHVzZWQgdG8gc3BlY2lmeSBvcHRpb25hbCBwYXJhbWV0ZXJzOgorCQliaXQgMDogcG9sYXJpdHkgKDA6IG5vcm1hbCwgMTogaW52ZXJ0ZWQpCisKKy0gZ3Bpby1jb250cm9sbGVyOiBNYXJrcyB0aGUgZGV2aWNlIGFzIGEgR1BJTyBjb250cm9sbGVyLgorCistIGludGVycnVwdC1jb250cm9sbGVyOiBNYXJrcyB0aGUgZGV2aWNlIGFzIGEgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisKK1RoZSBHUElPIGV4cGFuZGVyIGNhbiBvcHRpb25hbGx5IGJlIHVzZWQgYXMgYW4gaW50ZXJydXB0IGNvbnRyb2xsZXIsIGluCit3aGljaCBjYXNlIGl0IHVzZXMgdGhlIGRlZmF1bHQgdHdvIGNlbGwgc3BlY2lmaWVyIGFzIGRlc2NyaWJlZCBpbgorRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2ludGVycnVwdHMudHh0LgorCitFeGFtcGxlOgorCisJaTJjX2dwaW9fZXhwYW5kZXJAMjB7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQljb21wYXRpYmxlID0gInNlbXRlY2gsc3gxNTA2cSI7CisJCXJlZyA9IDwweDIwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ3Bpb18xPjsKKwkJaW50ZXJydXB0cyA9IDwxNiAwPjsKKworCQlncGlvLWNvbnRyb2xsZXI7CisJCWludGVycnVwdC1jb250cm9sbGVyOworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvLXhnZW5lLXNiLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2dwaW8teGdlbmUtc2IudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZTEzMDAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvLXhnZW5lLXNiLnR4dApAQCAtMCwwICsxLDMyIEBACitBUE0gWC1HZW5lIFN0YW5kYnkgR1BJTyBjb250cm9sbGVyIGJpbmRpbmdzCisKK1RoaXMgaXMgYSBncGlvIGNvbnRyb2xsZXIgaW4gdGhlIHN0YW5kYnkgZG9tYWluLgorCitUaGVyZSBhcmUgMjAgR1BJTyBwaW5zIGZyb20gMC4uMjEuIFRoZXJlIGlzIG5vIEdQSU9fRFMxNCBvciBHUElPX0RTMTUsCitvbmx5IEdQSU9fRFM4Li5HUElPX0RTMTMgc3VwcG9ydCBpbnRlcnJ1cHRzLiBUaGUgSVJRIG1hcHBpbmcKK2lzIGN1cnJlbnRseSAxLXRvLTEgb24gaW50ZXJydXB0cyAweDI4IHRocnUgMHgyZC4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogImFwbSx4Z2VuZS1ncGlvLXNiIiBmb3IgdGhlIFgtR2VuZSBTdGFuZGJ5IEdQSU8gY29udHJvbGxlcgorLSByZWc6IFBoeXNpY2FsIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgY29udHJvbGxlcidzIHJlZ2lzdGVycworLSAjZ3Bpby1jZWxsczogU2hvdWxkIGJlIHR3by4KKwktIGZpcnN0IGNlbGwgaXMgdGhlIHBpbiBudW1iZXIKKwktIHNlY29uZCBjZWxsIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgZ3BpbyBwb2xhcml0eToKKwkJMCA9IGFjdGl2ZSBoaWdoCisJCTEgPSBhY3RpdmUgbG93CistIGdwaW8tY29udHJvbGxlcjogTWFya3MgdGhlIGRldmljZSBub2RlIGFzIGEgR1BJTyBjb250cm9sbGVyLgorLSBpbnRlcnJ1cHRzOiBTaGFsbCBjb250YWluIGV4YWN0bHkgNiBpbnRlcnJ1cHRzLgorCitFeGFtcGxlOgorCXNiZ3Bpbzogc2JncGlvQDE3MDAxMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcG0seGdlbmUtZ3Bpby1zYiI7CisJCXJlZyA9IDwweDAgMHgxNzAwMTAwMCAweDAgMHg0MDA+OworCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJZ3Bpby1jb250cm9sbGVyOworCQlpbnRlcnJ1cHRzID0gCTwweDAgMHgyOCAweDE+LAorCQkJCTwweDAgMHgyOSAweDE+LAorCQkJCTwweDAgMHgyYSAweDE+LAorCQkJCTwweDAgMHgyYiAweDE+LAorCQkJCTwweDAgMHgyYyAweDE+LAorCQkJCTwweDAgMHgyZCAweDE+OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9ncGlvLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2dwaW8udHh0CmluZGV4IGI5YmQxZDYuLmY3YTE1OGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2dwaW8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2dwaW8udHh0CkBAIC02OSw3ICs2OSw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIEEgZ3Bpby1zcGVjaWZpZXIgc2hvdWxkIGNvbnRhaW4gYSBmbGFnIGluZGljYXRpbmcgdGhlIEdQSU8gcG9sYXJpdHk7IGFjdGl2ZS0KLWhpZ2ggb3IgYWN0aXZlLWxvdy4gSWYgaXQgZG9lcywgdGhlIGZvbGxvdyBiZXN0IHByYWN0aWNlcyBzaG91bGQgYmUgZm9sbG93ZWQ6CitoaWdoIG9yIGFjdGl2ZS1sb3cuIElmIGl0IGRvZXMsIHRoZSBmb2xsb3dpbmcgYmVzdCBwcmFjdGljZXMgc2hvdWxkIGJlCitmb2xsb3dlZDoKIAogVGhlIGdwaW8tc3BlY2lmaWVyJ3MgcG9sYXJpdHkgZmxhZyBzaG91bGQgcmVwcmVzZW50IHRoZSBwaHlzaWNhbCBsZXZlbCBhdCB0aGUKIEdQSU8gY29udHJvbGxlciB0aGF0IGFjaGlldmVzIChvciByZXByZXNlbnRzLCBmb3IgaW5wdXRzKSBhIGxvZ2ljYWxseSBhc3NlcnRlZApAQCAtMTQ3LDcgKzE0OCw3IEBACiAJbnVtZXJpYy1ncGlvLXJhbmdlIDo6PQogCQkJPHBpbmN0cmwtcGhhbmRsZT4gPGdwaW8tYmFzZT4gPHBpbmN0cmwtYmFzZT4gPGNvdW50PgogCW5hbWVkLWdwaW8tcmFuZ2UgOjo9IDxwaW5jdHJsLXBoYW5kbGU+IDxncGlvLWJhc2U+ICc8MCAwPicKLQlncGlvLXBoYW5kbGUgOiBwaGFuZGxlIHRvIHBpbiBjb250cm9sbGVyIG5vZGUuCisJcGluY3RybC1waGFuZGxlIDogcGhhbmRsZSB0byBwaW4gY29udHJvbGxlciBub2RlCiAJZ3Bpby1iYXNlIDogQmFzZSBHUElPIElEIGluIHRoZSBHUElPIGNvbnRyb2xsZXIKIAlwaW5jdHJsLWJhc2UgOiBCYXNlIHBpbmN0cmwgcGluIElEIGluIHRoZSBwaW4gY29udHJvbGxlcgogCWNvdW50IDogVGhlIG51bWJlciBvZiBHUElPcy9waW5zIGluIHRoaXMgcmFuZ2UKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL21ydmwtZ3Bpby50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvZ3Bpby9tcnZsLWdwaW8udHh0CmluZGV4IGIyYWZkYjIuLjY3YTJlNGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL21ydmwtZ3Bpby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vbXJ2bC1ncGlvLnR4dApAQCAtMyw4ICszLDggQEAKIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAtIGNvbXBhdGlibGUgOiBTaG91bGQgYmUgImludGVsLHB4YTI1eC1ncGlvIiwgImludGVsLHB4YTI2eC1ncGlvIiwKIAkJImludGVsLHB4YTI3eC1ncGlvIiwgImludGVsLHB4YTN4eC1ncGlvIiwKLQkJIm1hcnZlbGwscHhhOTN4LWdwaW8iLCAibWFydmVsbCxtbXAtZ3BpbyIgb3IKLQkJIm1hcnZlbGwsbW1wMi1ncGlvIi4KKwkJIm1hcnZlbGwscHhhOTN4LWdwaW8iLCAibWFydmVsbCxtbXAtZ3BpbyIsCisJCSJtYXJ2ZWxsLG1tcDItZ3BpbyIgb3IgbWFydmVsbCxweGExOTI4LWdwaW8uCiAtIHJlZyA6IEFkZHJlc3MgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgZGV2aWNlCiAtIGludGVycnVwdHMgOiBTaG91bGQgYmUgdGhlIHBvcnQgaW50ZXJydXB0IHNoYXJlZCBieSBhbGwgZ3BpbyBwaW5zLgogICBUaGVyZSdyZSB0aHJlZSBncGlvIGludGVycnVwdHMgaW4gYXJjaC1weGEsIGFuZCB0aGV5J3JlIGdwaW8wLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy9pMmMtc3QudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy9pMmMtc3QudHh0CmluZGV4IDQzN2UwZGIuLjRjMjZmZGEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvaTJjLXN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL2kyYy1zdC50eHQKQEAgLTMxLDcgKzMxLDcgQEAKIAljb21wYXRpYmxlCT0gInN0LGNvbW1zLXNzYzQtaTJjIjsKIAlyZWcJCT0gPDB4ZmVkNDAwMDAgMHgxMTA+OwogCWludGVycnVwdHMJPSAgPEdJQ19TUEkgMTg3IElSUV9UWVBFX0xFVkVMX0hJR0g+OwotCWNsb2NrcwkJPSA8JkNMS19TX0lDTl9SRUdfMD47CisJY2xvY2tzCQk9IDwmY2xrX3NfYTBfbHMgQ0xLX0lDTl9SRUc+OwogCWNsb2NrLW5hbWVzCT0gInNzYyI7CiAJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CiAJcGluY3RybC1uYW1lcwk9ICJkZWZhdWx0IjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlhbC1kZXZpY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pMmMvdHJpdmlhbC1kZXZpY2VzLnR4dAppbmRleCA5ZjRlMzgyLi45ZjQxZDA1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL3RyaXZpYWwtZGV2aWNlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy90cml2aWFsLWRldmljZXMudHh0CkBAIC00Nyw2ICs0Nyw3IEBACiBkYWxsYXMsZHM0NTEwCQlDUFUgU3VwZXJ2aXNvciB3aXRoIE5vbnZvbGF0aWxlIE1lbW9yeSBhbmQgUHJvZ3JhbW1hYmxlIEkvTwogZGFsbGFzLGRzNzUJCURpZ2l0YWwgVGhlcm1vbWV0ZXIgYW5kIFRoZXJtb3N0YXQKIGRsZyxkYTkwNTMJCURBOTA1MzogZmxleGlibGUgc3lzdGVtIGxldmVsIFBNSUMgd2l0aCBtdWx0aWNvcmUgc3VwcG9ydAorZGxnLGRhOTA2MwkJREE5MDYzOiBzeXN0ZW0gUE1JQyBmb3IgcXVhZC1jb3JlIGFwcGxpY2F0aW9uIHByb2Nlc3NvcnMKIGVwc29uLHJ4ODAyNQkJSGlnaC1TdGFiaWxpdHkuIEkyQy1CdXMgSU5URVJGQUNFIFJFQUwgVElNRSBDTE9DSyBNT0RVTEUKIGVwc29uLHJ4ODU4MQkJSTJDLUJVUyBJTlRFUkZBQ0UgUkVBTCBUSU1FIENMT0NLIE1PRFVMRQogZnNsLG1hZzMxMTAJCU1BRzMxMTA6IFh0cmluc2ljIEhpZ2ggQWNjdXJhY3ksIDNEIE1hZ25ldG9tZXRlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lpby9hZGMveGlsaW54LXhhZGMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lpby9hZGMveGlsaW54LXhhZGMudHh0CmluZGV4IGQ5ZWU5MDkuLmQ3MTI1OGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9paW8vYWRjL3hpbGlueC14YWRjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaWlvL2FkYy94aWxpbngteGFkYy50eHQKQEAgLTU5LDcgKzU5LDcgQEAKIAkgIEVhY2ggY2hpbGQgbm9kZSByZXByZXNlbnRzIG9uZSBjaGFubmVsIGFuZCBoYXMgdGhlIGZvbGxvd2luZwogCSAgcHJvcGVydGllczoKIAkJUmVxdWlyZWQgcHJvcGVydGllczoKLQkJCSogcmVnOiBQYWlyIG9mIHBpbnMgdGhlIHRoZSBjaGFubmVsIGlzIGNvbm5lY3RlZCB0by4KKwkJCSogcmVnOiBQYWlyIG9mIHBpbnMgdGhlIGNoYW5uZWwgaXMgY29ubmVjdGVkIHRvLgogCQkJCTA6IFZQL1ZOCiAJCQkJMTogVkFVWFBbMF0vVkFVWE5bMF0KIAkJCQkyOiBWQVVYUFsxXS9WQVVYTlsxXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L2UzeDAtYnV0dG9uLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnB1dC9lM3gwLWJ1dHRvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxNjY1ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnB1dC9lM3gwLWJ1dHRvbi50eHQKQEAgLTAsMCArMSwyNSBAQAorTmF0aW9uYWwgSW5zdHJ1bWVudHMgRXR0dXMgUmVzZWFyY2ggVVNSUCBFM3gwIGJ1dHRvbiBkcml2ZXIKKworVGhpcyBtb2R1bGUgaXMgcGFydCBvZiB0aGUgTkkgRXR0dXMgUmVzZWFyY2ggVVNSUCBFM3gwIFNEUi4KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBzaW1wbGUgcG93ZXIgYnV0dG9uIGV2ZW50IHZpYSB0d28gaW50ZXJydXB0cy4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgIC0gImV0dHVzLGUzeDAtYnV0dG9uIjogRm9yIGRldmljZXMgc3VjaCBhcyB0aGUgTkkgRXR0dXMgUmVzZWFyY2ggVVNSUCBFM3gwCistIGludGVycnVwdC1wYXJlbnQ6CisgIC0gYSBwaGFuZGxlIHRvIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB0aGF0IGl0IGlzIGF0dGFjaGVkIHRvLgorLSBpbnRlcnJ1cHRzOiBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcKKyAgLSA8MCAzMCAxPiwgPDAgMzEgMT46IEZvciBkZXZpY2VzIHN1Y2ggYXMgdGhlIE5JIEV0dHVzIFJlc2VhcmNoIFVTUlAgRTN4MAorLSBpbnRlcnJ1cHQtbmFtZXM6IHNob3VsZCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZworICAtICJwcmVzcyIsICJyZWxlYXNlIjogRm9yIGRldmljZXMgc3VjaCBhcyB0aGUgTkkgRXR0dXMgUmVzZWFyY2ggVVNSUCBFM3gwCisKK05vdGU6IEludGVycnVwdCBudW1iZXJzIG1pZ2h0IHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBGUEdBIGNvbmZpZ3VyYXRpb24uCisKK0V4YW1wbGU6CisJYnV0dG9uIHsKKwkJY29tcGF0aWJsZSA9ICJldHR1cyxlM3gwLWJ1dHRvbiI7CisJCWludGVycnVwdC1wYXJlbnQgPSA8JmludGM+OworCQlpbnRlcnJ1cHRzID0gPDAgMzAgMT4sIDwwIDMxIDE+OworCQlpbnRlcnJ1cHQtbmFtZXMgPSAicHJlc3MiLCAicmVsZWFzZSI7CisJfQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L3JlZ3VsYXRvci1oYXB0aWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L3JlZ3VsYXRvci1oYXB0aWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlZDFjN2UKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5wdXQvcmVndWxhdG9yLWhhcHRpYy50eHQKQEAgLTAsMCArMSwyMSBAQAorKiBSZWd1bGF0b3IgSGFwdGljIERldmljZSBUcmVlIEJpbmRpbmdzCisKK1JlcXVpcmVkIFByb3BlcnRpZXM6CisgLSBjb21wYXRpYmxlIDogU2hvdWxkIGJlICJyZWd1bGF0b3ItaGFwdGljIgorIC0gaGFwdGljLXN1cHBseSA6IFBvd2VyIHN1cHBseSB0byB0aGUgaGFwdGljIG1vdG9yLgorCVsqXSByZWZlciBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3JlZ3VsYXRvci50eHQKKworIC0gbWF4LW1pY3Jvdm9sdCA6IFRoZSBtYXhpbXVtIHZvbHRhZ2UgdmFsdWUgc3VwcGxpZWQgdG8gdGhlIGhhcHRpYyBtb3Rvci4KKwkJW1RoZSB1bml0IG9mIHRoZSB2b2x0YWdlIGlzIGEgbWljcm9dCisKKyAtIG1pbi1taWNyb3ZvbHQgOiBUaGUgbWluaW11bSB2b2x0YWdlIHZhbHVlIHN1cHBsaWVkIHRvIHRoZSBoYXB0aWMgbW90b3IuCisJCVtUaGUgdW5pdCBvZiB0aGUgdm9sdGFnZSBpcyBhIG1pY3JvXQorCitFeGFtcGxlOgorCisJaGFwdGljcyB7CisJCWNvbXBhdGlibGUgPSAicmVndWxhdG9yLWhhcHRpYyI7CisJCWhhcHRpYy1zdXBwbHkgPSA8Jm1vdG9yX3JlZ3VsYXRvcj47CisJCW1heC1taWNyb3ZvbHQgPSA8MjcwMDAwMD47CisJCW1pbi1taWNyb3ZvbHQgPSA8MTEwMDAwMD47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnB1dC9zdW40aS1scmFkYy1rZXlzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnB1dC9zdW40aS1scmFkYy1rZXlzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWMzMmY2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L3N1bjRpLWxyYWRjLWtleXMudHh0CkBAIC0wLDAgKzEsNjIgQEAKK0FsbHdpbm5lciBzdW40aSBsb3cgcmVzIGFkYyBhdHRhY2hlZCB0YWJsZXQga2V5cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisgLSBjb21wYXRpYmxlOiAiYWxsd2lubmVyLHN1bjRpLWExMC1scmFkYy1rZXlzIgorIC0gcmVnOiBtbWlvIGFkZHJlc3MgcmFuZ2Ugb2YgdGhlIGNoaXAKKyAtIGludGVycnVwdHM6IGludGVycnVwdCB0byB3aGljaCB0aGUgY2hpcCBpcyBjb25uZWN0ZWQKKyAtIHZyZWYtc3VwcGx5OiBwb3dlcnN1cHBseSBmb3IgdGhlIGxyYWRjIHJlZmVyZW5jZSB2b2x0YWdlCisKK0VhY2gga2V5IGlzIHJlcHJlc2VudGVkIGFzIGEgc3ViLW5vZGUgb2YgImFsbHdpbm5lcixzdW40aS1hMTAtbHJhZGMta2V5cyI6CisKK1JlcXVpcmVkIHN1Ym5vZGUtcHJvcGVydGllczoKKwktIGxhYmVsOiBEZXNjcmlwdGl2ZSBuYW1lIG9mIHRoZSBrZXkuCisJLSBsaW51eCxjb2RlOiBLZXljb2RlIHRvIGVtaXQuCisJLSBjaGFubmVsOiBDaGFubmVsIHRoaXMga2V5IGlzIGF0dGFjaGVkIHRvLCBtdXQgYmUgMCBvciAxLgorCS0gdm9sdGFnZTogVm9sdGFnZSBpbiDCtVYgYXQgbHJhZGMgaW5wdXQgd2hlbiB0aGlzIGtleSBpcyBwcmVzc2VkLgorCitFeGFtcGxlOgorCisjaW5jbHVkZSA8ZHQtYmluZGluZ3MvaW5wdXQvaW5wdXQuaD4KKworCWxyYWRjOiBscmFkY0AwMWMyMjgwMCB7CisJCWNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1scmFkYy1rZXlzIjsKKwkJcmVnID0gPDB4MDFjMjI4MDAgMHgxMDA+OworCQlpbnRlcnJ1cHRzID0gPDMxPjsKKwkJdnJlZi1zdXBwbHkgPSA8JnJlZ192Y2MzdjA+OworCisJCWJ1dHRvbkAxOTEgeworCQkJbGFiZWwgPSAiVm9sdW1lIFVwIjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX1ZPTFVNRVVQPjsKKwkJCWNoYW5uZWwgPSA8MD47CisJCQl2b2x0YWdlID0gPDE5MTI3ND47CisJCX07CisKKwkJYnV0dG9uQDM5MiB7CisJCQlsYWJlbCA9ICJWb2x1bWUgRG93biI7CisJCQlsaW51eCxjb2RlID0gPEtFWV9WT0xVTUVET1dOPjsKKwkJCWNoYW5uZWwgPSA8MD47CisJCQl2b2x0YWdlID0gPDM5MjY0ND47CisJCX07CisKKwkJYnV0dG9uQDYwMSB7CisJCQlsYWJlbCA9ICJNZW51IjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX01FTlU+OworCQkJY2hhbm5lbCA9IDwwPjsKKwkJCXZvbHRhZ2UgPSA8NjAxMTUxPjsKKwkJfTsKKworCQlidXR0b25ANzk1IHsKKwkJCWxhYmVsID0gIkVudGVyIjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX0VOVEVSPjsKKwkJCWNoYW5uZWwgPSA8MD47CisJCQl2b2x0YWdlID0gPDc5NTA5MD47CisJCX07CisKKwkJYnV0dG9uQDk4NyB7CisJCQlsYWJlbCA9ICJIb21lIjsKKwkJCWxpbnV4LGNvZGUgPSA8S0VZX0hPTUVQQUdFPjsKKwkJCWNoYW5uZWwgPSA8MD47CisJCQl2b2x0YWdlID0gPDk4NzM4Nz47CisJCX07CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnB1dC90b3VjaHNjcmVlbi9zdW40aS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5wdXQvdG91Y2hzY3JlZW4vc3VuNGkudHh0CmluZGV4IGFlZjU3NzkuLjQzMzMzMmQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnB1dC90b3VjaHNjcmVlbi9zdW40aS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L3RvdWNoc2NyZWVuL3N1bjRpLnR4dApAQCAtMiw5ICsyLDEwIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgotIC0gY29tcGF0aWJsZTogImFsbHdpbm5lcixzdW40aS1hMTAtdHMiCisgLSBjb21wYXRpYmxlOiAiYWxsd2lubmVyLHN1bjRpLWExMC10cyIgb3IgImFsbHdpbm5lcixzdW42aS1hMzEtdHMiCiAgLSByZWc6IG1taW8gYWRkcmVzcyByYW5nZSBvZiB0aGUgY2hpcAogIC0gaW50ZXJydXB0czogaW50ZXJydXB0IHRvIHdoaWNoIHRoZSBjaGlwIGlzIGNvbm5lY3RlZAorIC0gI3RoZXJtYWwtc2Vuc29yLWNlbGxzOiBzaGFsbCBiZSAwCiAKIE9wdGlvbmFsIHByb3BlcnRpZXM6CiAgLSBhbGx3aW5uZXIsdHMtYXR0YWNoZWQ6IGJvb2xlYW4gaW5kaWNhdGluZyB0aGF0IGFuIGFjdHVhbCB0b3VjaHNjcmVlbiBpcwpAQCAtMTcsNCArMTgsNSBAQAogCQlyZWcgPSA8MHgwMWMyNTAwMCAweDEwMD47CiAJCWludGVycnVwdHMgPSA8Mjk+OwogCQlhbGx3aW5uZXIsdHMtYXR0YWNoZWQ7CisJCSN0aGVybWFsLXNlbnNvci1jZWxscyA9IDwwPjsKIAl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L3RvdWNoc2NyZWVuL3RpLXRzYy1hZGMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L3RvdWNoc2NyZWVuL3RpLXRzYy1hZGMudHh0CmluZGV4IDg3ODU0OWIuLjZjNGZiMzQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9pbnB1dC90b3VjaHNjcmVlbi90aS10c2MtYWRjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5wdXQvdG91Y2hzY3JlZW4vdGktdHNjLWFkYy50eHQKQEAgLTI4LDYgKzI4LDIwIEBACiAJdGksYWRjLWNoYW5uZWxzOiBMaXN0IG9mIGFuYWxvZyBpbnB1dHMgYXZhaWxhYmxlIGZvciBBREMuCiAJCQkgQUlOMCA9IDAsIEFJTjEgPSAxIGFuZCBzbyBvbiB0aWxsIEFJTjcgPSA3LgogCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSBjaGlsZCAidHNjIgorCXRpLGNoYXJnZS1kZWxheTogTGVuZ3RoIG9mIHRvdWNoIHNjcmVlbiBjaGFyZ2UgZGVsYXkgc3RlcCBpbiB0ZXJtcyBvZgorCQkJIEFEQyBjbG9jayBjeWNsZXMuIENoYXJnZSBkZWxheSB2YWx1ZSBzaG91bGQgYmUgbGFyZ2UKKwkJCSBpbiBvcmRlciB0byBhdm9pZCBmYWxzZSBwZW4tdXAgZXZlbnRzLiBUaGlzIHZhbHVlCisJCQkgZWZmZWN0cyB0aGUgb3ZlcmFsbCBzYW1wbGluZyBzcGVlZCwgaGVuY2UgbmVlZCB0byBiZQorCQkJIGtlcHQgYXMgbG93IGFzIHBvc3NpYmxlLCB3aGlsZSBhdm9pZGluZyBmYWxzZSBwZW4tdXAKKwkJCSBldmVudC4gU3RhcnQgZnJvbSBhIGxvd2VyIHZhbHVlLCBzYXkgMHg0MDAsIGFuZAorCQkJIGluY3JlYXNlIHZhbHVlIHVudGlsIGZhbHNlIHBlbi11cCBldmVudHMgYXJlIGF2b2lkZWQuCisJCQkgVGhlIHBlbi11cCBkZXRlY3Rpb24gaGFwcGVucyBpbW1lZGlhdGVseSBhZnRlciB0aGUKKwkJCSBjaGFyZ2Ugc3RlcCwgc28gdGhpcyBkb2VzIGluIGZhY3QgZnVuY3Rpb24gYXMgYQorCQkJIGhhcmR3YXJlIGtub2IgZm9yIGFkanVzdGluZyB0aGUgYW1vdW50IG9mICJzZXR0bGluZworCQkJIHRpbWUiLgorCiBFeGFtcGxlOgogCXRzY2FkYzogdHNjYWRjQDQ0ZTBkMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJ0aSxhbTMzNTktdHNjYWRjIjsKQEAgLTM2LDYgKzUwLDcgQEAKIAkJCXRpLHgtcGxhdGUtcmVzaXN0YW5jZSA9IDwyMDA+OwogCQkJdGksY29vcmRpYW50ZS1yZWFkb3V0cyA9IDw1PjsKIAkJCXRpLHdpcmUtY29uZmlnID0gPDB4MDAgMHgxMSAweDIyIDB4MzM+OworCQkJdGksY2hhcmdlLWRlbGF5ID0gPDB4NDAwPjsKIAkJfTsKIAogCQlhZGMgewpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L3RwczY1MjE4LXB3cmJ1dHRvbi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaW5wdXQvdHBzNjUyMTgtcHdyYnV0dG9uLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzBlMGI5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L3RwczY1MjE4LXB3cmJ1dHRvbi50eHQKQEAgLTAsMCArMSwxNyBAQAorVGV4YXMgSW5zdHJ1bWVudHMgVFBTNjUyMTggcG93ZXIgYnV0dG9uCisKK1RoaXMgZHJpdmVyIHByb3ZpZGVzIGEgc2ltcGxlIHBvd2VyIGJ1dHRvbiBldmVudCB2aWEgYW4gSW50ZXJydXB0LgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBzaG91bGQgYmUgInRpLHRwczY1MjE4LXB3cmJ1dHRvbiIKKy0gaW50ZXJydXB0czogc2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nCisgICAtIDwzIElSUV9UWVBFX0VER0VfQk9USD46IEZvciBjb250cm9sbGVycyBjb21wYXRpYmxlIHdpdGggdHBzNjUyMTgKKworRXhhbXBsZToKKworJnRwcyB7CisJcG93ZXItYnV0dG9uIHsKKwkJY29tcGF0aWJsZSA9ICJ0aSx0cHM2NTIxOC1wd3JidXR0b24iOworCQlpbnRlcnJ1cHRzID0gPDMgSVJRX1RZUEVfRURHRV9CT1RIPjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tYWlsYm94L2FsdGVyYS1tYWlsYm94LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tYWlsYm94L2FsdGVyYS1tYWlsYm94LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjYxOTc5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21haWxib3gvYWx0ZXJhLW1haWxib3gudHh0CkBAIC0wLDAgKzEsNDkgQEAKK0FsdGVyYSBNYWlsYm94IERyaXZlcgorPT09PT09PT09PT09PT09PT09PT09CisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUgOgkiYWx0cixtYWlsYm94LTEuMCIuCistIHJlZyA6IAlwaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2YgdGhlIG1haWxib3ggYW5kIGxlbmd0aCBvZgorCQltZW1vcnkgbWFwcGVkIHJlZ2lvbi4KKy0gI21ib3gtY2VsbHM6CUNvbW1vbiBtYWlsYm94IGJpbmRpbmcgcHJvcGVydHkgdG8gaWRlbnRpZnkgdGhlIG51bWJlcgorCQlvZiBjZWxscyByZXF1aXJlZCBmb3IgdGhlIG1haWxib3ggc3BlY2lmaWVyLiBTaG91bGQgYmUgMS4KKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gaW50ZXJydXB0LXBhcmVudCA6CWludGVycnVwdCBzb3VyY2UgcGhhbmRsZS4KKy0gaW50ZXJydXB0cyA6CQlpbnRlcnJ1cHQgbnVtYmVyLiBUaGUgaW50ZXJydXB0IHNwZWNpZmllciBmb3JtYXQKKwkJCWRlcGVuZHMgb24gdGhlIGludGVycnVwdCBjb250cm9sbGVyIHBhcmVudC4KKworRXhhbXBsZToKKwltYm94X3R4OiBtYWlsYm94QDB4MTAwIHsKKwkJY29tcGF0aWJsZSA9ICJhbHRyLG1haWxib3gtMS4wIjsKKwkJcmVnID0gPDB4MTAwIDB4OD47CisJCWludGVycnVwdC1wYXJlbnQgPSA8ICZnaWNfMCA+OworCQlpbnRlcnJ1cHRzID0gPDU+OworCQkjbWJveC1jZWxscyA9IDwxPjsKKwl9OworCisJbWJveF9yeDogbWFpbGJveEAweDIwMCB7CisJCWNvbXBhdGlibGUgPSAiYWx0cixtYWlsYm94LTEuMCI7CisJCXJlZyA9IDwweDIwMCAweDg+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCAmZ2ljXzAgPjsKKwkJaW50ZXJydXB0cyA9IDw2PjsKKwkJI21ib3gtY2VsbHMgPSA8MT47CisJfTsKKworTWFpbGJveCBjbGllbnQKKz09PT09PT09PT09PT09PQorIm1ib3hlcyIgYW5kIHRoZSBvcHRpb25hbCAibWJveC1uYW1lcyIgKHBsZWFzZSBzZWUKK0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tYWlsYm94L21haWxib3gudHh0IGZvciBkZXRhaWxzKS4gRWFjaCB2YWx1ZQorb2YgdGhlIG1ib3hlcyBwcm9wZXJ0eSBzaG91bGQgY29udGFpbiBhIHBoYW5kbGUgdG8gdGhlIG1haWxib3ggY29udHJvbGxlcgorZGV2aWNlIG5vZGUgYW5kIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgY2hhbm5lbCBpbmRleC4gSXQgbXVzdCBiZSAwIChoYXJkd2FyZQorc3VwcG9ydCBvbmx5IG9uZSBjaGFubmVsKS5UaGUgZXF1aXZhbGVudCAibWJveC1uYW1lcyIgcHJvcGVydHkgdmFsdWUgY2FuIGJlCit1c2VkIHRvIGdpdmUgYSBuYW1lIHRvIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgdG8gYmUgdXNlZCBieSB0aGUgY2xpZW50IHVzZXIuCisKK0V4YW1wbGU6CisJbWNsaWVudDA6IG1jbGllbnQwQDB4NDAwIHsKKwkJY29tcGF0aWJsZSA9ICJjbGllbnQtMS4wIjsKKwkJcmVnID0gPDB4NDAwIDB4MTA+OworCQltYm94LW5hbWVzID0gIm1ib3gtdHgiLCAibWJveC1yeCI7CisJCW1ib3hlcyA9IDwmbWJveF90eCAwPiwKKwkJCSA8Jm1ib3hfcnggMD47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS9pMmMvbm9raWEsc21pYS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVkaWEvaTJjL25va2lhLHNtaWEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NWUxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVkaWEvaTJjL25va2lhLHNtaWEudHh0CkBAIC0wLDAgKzEsNjMgQEAKK1NNSUEvU01JQSsrIHNlbnNvcgorCitTTUlBIChTdGFuZGFyZCBNb2JpbGUgSW1hZ2luZyBBcmNoaXRlY3R1cmUpIGlzIGFuIGltYWdlIHNlbnNvciBzdGFuZGFyZAorZGVmaW5lZCBqb2ludGx5IGJ5IE5va2lhIGFuZCBTVC4gU01JQSsrLCBkZWZpbmVkIGJ5IE5va2lhLCBpcyBhbiBleHRlbnNpb24KK29mIHRoYXQuIFRoZXNlIGRlZmluaXRpb25zIGFyZSB2YWxpZCBmb3IgYm90aCB0eXBlcyBvZiBzZW5zb3JzLgorCitNb3JlIGRldGFpbGVkIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluCitEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVkaWEvdmlkZW8taW50ZXJmYWNlcy50eHQgLgorCisKK01hbmRhdG9yeSBwcm9wZXJ0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIGNvbXBhdGlibGU6ICJub2tpYSxzbWlhIgorLSByZWc6IEkyQyBhZGRyZXNzICgweDEwLCBvciBhbiBhbHRlcm5hdGl2ZSBhZGRyZXNzKQorLSB2YW5hLXN1cHBseTogQW5hbG9ndWUgdm9sdGFnZSBzdXBwbHkgKFZBTkEpLCB0eXBpY2FsbHkgMiw4IHZvbHRzIChzZW5zb3IKKyAgZGVwZW5kZW50KS4KKy0gY2xvY2tzOiBFeHRlcm5hbCBjbG9jayB0byB0aGUgc2Vuc29yCistIGNsb2NrLWZyZXF1ZW5jeTogRnJlcXVlbmN5IG9mIHRoZSBleHRlcm5hbCBjbG9jayB0byB0aGUgc2Vuc29yCistIGxpbmstZnJlcXVlbmNpZXM6IExpc3Qgb2YgYWxsb3dlZCBkYXRhIGxpbmsgZnJlcXVlbmNpZXMuIEFuIGFycmF5IG9mCisgIDY0LWJpdCBlbGVtZW50cy4KKworCitPcHRpb25hbCBwcm9wZXJ0aWVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0gbm9raWEsbnZtLXNpemU6IFRoZSBzaXplIG9mIHRoZSBOVk0sIGluIGJ5dGVzLiBJZiB0aGUgc2l6ZSBpcyBub3QgZ2l2ZW4sCisgIHRoZSBOVk0gY29udGVudHMgd2lsbCBub3QgYmUgcmVhZC4KKy0gcmVzZXQtZ3Bpb3M6IFhTSFVURE9XTiBHUElPCisKKworRW5kcG9pbnQgbm9kZSBtYW5kYXRvcnkgcHJvcGVydGllcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCistIGNsb2NrLWxhbmVzOiA8MD4KKy0gZGF0YS1sYW5lczogPDEuLm4+CistIHJlbW90ZS1lbmRwb2ludDogQSBwaGFuZGxlIHRvIHRoZSBidXMgcmVjZWl2ZXIncyBlbmRwb2ludCBub2RlLgorCisKK0V4YW1wbGUKKy0tLS0tLS0KKworJmkyYzIgeworCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OworCisJc21pYXBwXzE6IGNhbWVyYUAxMCB7CisJCWNvbXBhdGlibGUgPSAibm9raWEsc21pYSI7CisJCXJlZyA9IDwweDEwPjsKKwkJcmVzZXQtZ3Bpb3MgPSA8JmdwaW8zIDIwIDA+OworCQl2YW5hLXN1cHBseSA9IDwmdmF1eDM+OworCQljbG9ja3MgPSA8Jm9tYXAzX2lzcCAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDk2MDAwMDA+OworCQlub2tpYSxudm0tc2l6ZSA9IDw1MTI+OyAvKiA4ICogNjQgKi8KKwkJbGluay1mcmVxdWVuY2llcyA9IC9iaXRzLyA2NCA8MTk5MjAwMDAwIDIxMDAwMDAwMCA0OTkyMDAwMDA+OworCQlwb3J0IHsKKwkJCXNtaWFwcF8xXzE6IGVuZHBvaW50IHsKKwkJCQljbG9jay1sYW5lcyA9IDwwPjsKKwkJCQlkYXRhLWxhbmVzID0gPDEgMj47CisJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZjc2kyYV9lcD47CisJCQl9OworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlhL3N1bnhpLWlyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS9zdW54aS1pci50eHQKaW5kZXggMjNkZDVhZC4uMTgxMWEwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlhL3N1bnhpLWlyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVkaWEvc3VueGktaXIudHh0CkBAIC0xLDcgKzEsNyBAQAogRGV2aWNlLVRyZWUgYmluZGluZ3MgZm9yIFNVTlhJIElSIGNvbnRyb2xsZXIgZm91bmQgaW4gc3VuWGkgU29DIGZhbWlseQogCiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgotLSBjb21wYXRpYmxlCSAgICA6IHNob3VsZCBiZSAiYWxsd2lubmVyLHN1bjRpLWExMC1pciI7CistIGNvbXBhdGlibGUJICAgIDogImFsbHdpbm5lcixzdW40aS1hMTAtaXIiIG9yICJhbGx3aW5uZXIsc3VuNWktYTEzLWlyIgogLSBjbG9ja3MJICAgIDogbGlzdCBvZiBjbG9jayBzcGVjaWZpZXJzLCBjb3JyZXNwb25kaW5nIHRvCiAJCSAgICAgIGVudHJpZXMgaW4gY2xvY2stbmFtZXMgcHJvcGVydHk7CiAtIGNsb2NrLW5hbWVzCSAgICA6IHNob3VsZCBjb250YWluICJhcGIiIGFuZCAiaXIiIGVudHJpZXM7CkBAIC0xMCw2ICsxMCw3IEBACiAKIE9wdGlvbmFsIHByb3BlcnRpZXM6CiAtIGxpbnV4LHJjLW1hcC1uYW1lIDogUmVtb3RlIGNvbnRyb2wgbWFwIG5hbWUuCistIHJlc2V0cyA6IHBoYW5kbGUgKyByZXNldCBzcGVjaWZpZXIgcGFpcgogCiBFeGFtcGxlOgogCkBAIC0xNyw2ICsxOCw3IEBACiAJY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNGktYTEwLWlyIjsKIAljbG9ja3MgPSA8JmFwYjBfZ2F0ZXMgNj4sIDwmaXIwX2Nsaz47CiAJY2xvY2stbmFtZXMgPSAiYXBiIiwgImlyIjsKKwlyZXNldHMgPSA8JmFwYjBfcnN0IDE+OwogCWludGVycnVwdHMgPSA8MCA1IDE+OwogCXJlZyA9IDwweDAxQzIxODAwIDB4NDA+OwogCWxpbnV4LHJjLW1hcC1uYW1lID0gInJjLXJjNi1tY2UiOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlhL3RpLWFtNDM3eC12cGZlLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS90aS1hbTQzN3gtdnBmZS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzMmU3NgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS90aS1hbTQzN3gtdnBmZS50eHQKQEAgLTAsMCArMSw2MSBAQAorVGV4YXMgSW5zdHJ1bWVudHMgQU00Mzd4IENBTUVSQSAoVlBGRSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBWaWRlbyBQcm9jZXNzaW5nIEZyb250IEVuZCAoVlBGRSkgaXMgYSBrZXkgY29tcG9uZW50IGZvciBpbWFnZSBjYXB0dXJlCithcHBsaWNhdGlvbnMuIFRoZSBjYXB0dXJlIG1vZHVsZSBwcm92aWRlcyB0aGUgc3lzdGVtIGludGVyZmFjZSBhbmQgdGhlCitwcm9jZXNzaW5nIGNhcGFiaWxpdHkgdG8gY29ubmVjdCBSQVcgaW1hZ2Utc2Vuc29yIG1vZHVsZXMgYW5kIHZpZGVvIGRlY29kZXJzCit0byB0aGUgQU00Mzd4IGRldmljZS4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogbXVzdCBiZSAidGksYW00Mzd4LXZwZmUiCistIHJlZzogcGh5c2ljYWwgYmFzZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVycyBzZXQgZm9yIHRoZSBkZXZpY2U7CistIGludGVycnVwdHM6IHNob3VsZCBjb250YWluIElSUSBsaW5lIGZvciB0aGUgVlBGRTsKKy0gdGksYW00Mzd4LXZwZmUtaW50ZXJmYWNlOiBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcsCisJMCAtIFJhdyBCYXllciBJbnRlcmZhY2UuCisJMSAtIDggQml0IEJUNjU2IEludGVyZmFjZS4KKwkyIC0gMTAgQml0IEJUNjU2IEludGVyZmFjZS4KKwkzIC0gWUNiQ3IgOCBCaXQgSW50ZXJmYWNlLgorCTQgLSBZQ2JDciAxNiBCaXQgSW50ZXJmYWNlLgorCitWUEZFIHN1cHBvcnRzIGEgc2luZ2xlIHBvcnQgbm9kZSB3aXRoIHBhcmFsbGVsIGJ1cy4gSXQgc2hvdWxkIGNvbnRhaW4gb25lCisncG9ydCcgY2hpbGQgbm9kZSB3aXRoIGNoaWxkICdlbmRwb2ludCcgbm9kZS4gUGxlYXNlIHJlZmVyIHRvIHRoZSBiaW5kaW5ncworZGVmaW5lZCBpbiBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVkaWEvdmlkZW8taW50ZXJmYWNlcy50eHQuCisKK0V4YW1wbGU6CisJdnBmZTogdnBmZUBmMDAzNDAwMCB7CisJCWNvbXBhdGlibGUgPSAidGksYW00Mzd4LXZwZmUiOworCQlyZWcgPSA8MHg0ODMyODAwMCAweDIwMDA+OworCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgNTAgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IiwgInNsZWVwIjsKKwkJcGluY3RybC0wID0gPCZ2cGZlX3BpbnNfZGVmYXVsdD47CisJCXBpbmN0cmwtMSA9IDwmdnBmZV9waW5zX3NsZWVwPjsKKworCQlwb3J0IHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJCXZwZmUwX2VwOiBlbmRwb2ludCB7CisJCQkJcmVtb3RlLWVuZHBvaW50ID0gPCZvdjI2NTlfMT47CisJCQkJdGksYW00Mzd4LXZwZmUtaW50ZXJmYWNlID0gPDA+OworCQkJCWJ1cy13aWR0aCA9IDw4PjsKKwkJCQloc3luYy1hY3RpdmUgPSA8MD47CisJCQkJdnN5bmMtYWN0aXZlID0gPDA+OworCQkJfTsKKwkJfTsKKwl9OworCisJaTJjMTogaTJjQDQ4MDJhMDAwIHsKKworCQlvdjI2NTlAMzAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSxvdjI2NTkiOworCQkJcmVnID0gPDB4MzA+OworCisJCQlwb3J0IHsKKwkJCQlvdjI2NTlfMTogZW5kcG9pbnQgeworCQkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnZwZmUwX2VwPjsKKwkJCQkJYnVzLXdpZHRoID0gPDg+OworCQkJCQltY2xrLWZyZXF1ZW5jeSA9IDwxMjAwMDAwMD47CisJCQkJfTsKKwkJCX07CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS92aWRlby1pbnRlcmZhY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS92aWRlby1pbnRlcmZhY2VzLnR4dAppbmRleCBkODdhOTAyLi41NzFiNGM2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWVkaWEvdmlkZW8taW50ZXJmYWNlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlhL3ZpZGVvLWludGVyZmFjZXMudHh0CkBAIC0xMDMsNiArMTAzLDkgQEAKICAgYXJyYXkgY29udGFpbnMgb25seSBvbmUgZW50cnkuCiAtIGNsb2NrLW5vbmNvbnRpbnVvdXM6IGEgYm9vbGVhbiBwcm9wZXJ0eSB0byBhbGxvdyBNSVBJIENTSS0yIG5vbi1jb250aW51b3VzCiAgIGNsb2NrIG1vZGUuCistIGxpbmstZnJlcXVlbmNpZXM6IEFsbG93ZWQgZGF0YSBidXMgZnJlcXVlbmNpZXMuIEZvciBNSVBJIENTSS0yLCBmb3IKKyAgaW5zdGFuY2UsIHRoaXMgaXMgdGhlIGFjdHVhbCBmcmVxdWVuY3kgb2YgdGhlIGJ1cywgbm90IGJpdHMgcGVyIGNsb2NrIHBlcgorICBsYW5lIHZhbHVlLiBBbiBhcnJheSBvZiA2NC1iaXQgdW5zaWduZWQgaW50ZWdlcnMuCiAKIAogRXhhbXBsZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9tYXg3NzY4Ni50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3Njg2LnR4dAppbmRleCA3NWZkZmFmLi5lMzlmMGJjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3Njg2LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWZkL21heDc3Njg2LnR4dApAQCAtMzksNiArMzksMTIgQEAKIAktQlVDS24JOgkxLTQuCiAgIFVzZSBzdGFuZGFyZCByZWd1bGF0b3IgYmluZGluZ3MgZm9yIGl0ICgncmVndWxhdG9yLW9mZi1pbi1zdXNwZW5kJykuCiAKKyAgTERPMjAsIExETzIxLCBMRE8yMiwgQlVDSzggYW5kIEJVQ0s5IGNhbiBiZSBjb25maWd1cmVkIHRvIEdQSU8gZW5hYmxlCisgIGNvbnRyb2wuIFRvIHR1cm4gdGhpcyBmZWF0dXJlIG9uIHRoaXMgcHJvcGVydHkgbXVzdCBiZSBhZGRlZCB0byB0aGUgcmVndWxhdG9yCisgIHN1Yi1ub2RlOgorCS0gbWF4aW0sZW5hLWdwaW9zIDoJb25lIEdQSU8gc3BlY2lmaWVyIGVuYWJsZSBjb250cm9sICh0aGUgZ3BpbworCQkJCWZsYWdzIGFyZSBhY3R1YWxseSBpZ25vcmVkIGFuZCBhbHdheXMKKwkJCQlBQ1RJVkVfSElHSCBpcyB1c2VkKQogCiBFeGFtcGxlOgogCkBAIC02NSw0ICs3MSwxMiBAQAogCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CiAJCQkJcmVndWxhdG9yLWJvb3Qtb247CiAJCQl9OworCisJCQlidWNrOV9yZWcgeworCQkJCXJlZ3VsYXRvci1jb21wYXRpYmxlID0gIkJVQ0s5IjsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJDQU1fSVNQX0NPUkVfMS4yViI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJbWF4aW0sZW5hLWdwaW9zID0gPCZncG0wIDMgR1BJT19BQ1RJVkVfSElHSD47CisJCQl9OwogCX0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZmQvbWF4Nzc2OTMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9tYXg3NzY5My50eHQKaW5kZXggMDFlOWYzMC4uMzhlNjQ0MCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9tYXg3NzY5My50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21mZC9tYXg3NzY5My50eHQKQEAgLTQxLDYgKzQxLDQxIEBACiAJIFRvIGdldCBtb3JlIGluZm9ybWF0aW9ucywgcGxlYXNlIHJlZmVyIHRvIGRvY3VtZW50YWlvbi4KIAlbKl0gcmVmZXIgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3B3bS9wd20udHh0CiAKKy0gY2hhcmdlciA6IE5vZGUgY29uZmlndXJpbmcgdGhlIGNoYXJnZXIgZHJpdmVyLgorICBJZiBwcmVzZW50LCByZXF1aXJlZCBwcm9wZXJ0aWVzOgorICAtIGNvbXBhdGlibGUgOiBNdXN0IGJlICJtYXhpbSxtYXg3NzY5My1jaGFyZ2VyIi4KKworICBPcHRpb25hbCBwcm9wZXJ0aWVzIChpZiBub3Qgc2V0LCBkZWZhdWx0cyB3aWxsIGJlIHVzZWQpOgorICAtIG1heGltLGNvbnN0YW50LW1pY3Jvdm9sdCA6IEJhdHRlcnkgY29uc3RhbnQgdm9sdGFnZSBpbiB1Vi4gVGhlIGNoYXJnZXIKKyAgICB3aWxsIG9wZXJhdGUgaW4gZmFzdCBjaGFyZ2UgY29uc3RhbnQgY3VycmVudCBtb2RlIHRpbGwgYmF0dGVyeSB2b2x0YWdlCisgICAgcmVhY2hlcyB0aGlzIGxldmVsLiBUaGVuIHRoZSBjaGFyZ2VyIHdpbGwgc3dpdGNoIHRvIGZhc3QgY2hhcmdlIGNvbnN0YW50CisgICAgdm9sdGFnZSBtb2RlLiBBbHNvIHZzeXMgKHN5c3RlbSB2b2x0YWdlKSB3aWxsIGJlIHNldCB0byB0aGlzIHZhbHVlIHdoZW4KKyAgICBEQyBwb3dlciBpcyBzdXBwbGllZCBidXQgY2hhcmdlciBpcyBub3QgZW5hYmxlZC4KKyAgICBWYWxpZCB2YWx1ZXM6IDM2NTAwMDAgLSA0NDAwMDAwLCBzdGVwIGJ5IDI1MDAwIChyb3VuZGVkIGRvd24pCisgICAgRGVmYXVsdDogNDIwMDAwMAorCisgIC0gbWF4aW0sbWluLXN5c3RlbS1taWNyb3ZvbHQgOiBNaW5pbWFsIHN5c3RlbSB2b2x0YWdlIGluIHVWLgorICAgIFZhbGlkIHZhbHVlczogMzAwMDAwMCAtIDM3MDAwMDAsIHN0ZXAgYnkgMTAwMDAwIChyb3VuZGVkIGRvd24pCisgICAgRGVmYXVsdDogMzYwMDAwMAorCisgIC0gbWF4aW0sdGhlcm1hbC1yZWd1bGF0aW9uLWNlbHNpdXMgOiBUZW1wZXJhdHVyZSBpbiBDZWxzaXVzIGZvciBlbnRlcmluZworICAgIGhpZ2ggdGVtcGVyYXR1cmUgY2hhcmdpbmcgbW9kZS4gSWYgZGllIHRlbXBlcmF0dXJlIGV4Y2VlZHMgdGhpcyB2YWx1ZQorICAgIHRoZSBjaGFyZ2luZyBjdXJyZW50IHdpbGwgYmUgcmVkdWNlZCBieSAxMDUgbUEvQ2Vsc2l1cy4KKyAgICBWYWxpZCB2YWx1ZXM6IDcwLCA4NSwgMTAwLCAxMTUKKyAgICBEZWZhdWx0OiAxMDAKKworICAtIG1heGltLGJhdHRlcnktb3ZlcmN1cnJlbnQtbWljcm9hbXAgOiBPdmVyY3VycmVudCBwcm90ZWN0aW9uIHRocmVzaG9sZAorICAgIGluIHVBIChjdXJyZW50IGZyb20gYmF0dGVyeSB0byBzeXN0ZW0pLgorICAgIFZhbGlkIHZhbHVlczogMjAwMDAwMCAtIDM1MDAwMDAsIHN0ZXAgYnkgMjUwMDAwIChyb3VuZGVkIGRvd24pCisgICAgRGVmYXVsdDogMzUwMDAwMAorCisgIC0gbWF4aW0sY2hhcmdlLWlucHV0LXRocmVzaG9sZC1taWNyb3ZvbHQgOiBUaHJlc2hvbGQgdm9sdGFnZSBpbiB1ViBmb3IKKyAgICB0cmlnZ2VyaW5nIGlucHV0IHZvbHRhZ2UgcmVndWxhdGlvbiBsb29wLiBJZiBpbnB1dCB2b2x0YWdlIGRlY3JlYXNlcworICAgIGJlbG93IHRoaXMgdmFsdWUsIHRoZSBpbnB1dCBjdXJyZW50IHdpbGwgYmUgcmVkdWNlZCB0byByZWFjaCB0aGUKKyAgICB0aHJlc2hvbGQgdm9sdGFnZS4KKyAgICBWYWxpZCB2YWx1ZXM6IDQzMDAwMDAsIDQ3MDAwMDAsIDQ4MDAwMDAsIDQ5MDAwMDAKKyAgICBEZWZhdWx0OiA0MzAwMDAwCisKIEV4YW1wbGU6CiAJbWF4Nzc2OTNANjYgewogCQljb21wYXRpYmxlID0gIm1heGltLG1heDc3NjkzIjsKQEAgLTczLDQgKzEwOCwxNCBAQAogCQkJcHdtcyA9IDwmcHdtIDAgNDAwMDAgMD47CiAJCQlwd20tbmFtZXMgPSAiaGFwdGljIjsKIAkJfTsKKworCQljaGFyZ2VyIHsKKwkJCWNvbXBhdGlibGUgPSAibWF4aW0sbWF4Nzc2OTMtY2hhcmdlciI7CisKKwkJCW1heGltLGNvbnN0YW50LW1pY3Jvdm9sdCA9IDw0MjAwMDAwPjsKKwkJCW1heGltLG1pbi1zeXN0ZW0tbWljcm92b2x0ID0gPDM2MDAwMDA+OworCQkJbWF4aW0sdGhlcm1hbC1yZWd1bGF0aW9uLWNlbHNpdXMgPSA8NzU+OworCQkJbWF4aW0sYmF0dGVyeS1vdmVyY3VycmVudC1taWNyb2FtcCA9IDwzMDAwMDAwPjsKKwkJCW1heGltLGNoYXJnZS1pbnB1dC10aHJlc2hvbGQtbWljcm92b2x0ID0gPDQzMDAwMDA+OworCQl9OwogCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1wd3JzZXEtZW1tYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1wd3JzZXEtZW1tYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNiODI3YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLXB3cnNlcS1lbW1jLnR4dApAQCAtMCwwICsxLDI1IEBACisqIFRoZSBzaW1wbGUgZU1NQyBoYXJkd2FyZSByZXNldCBwcm92aWRlcgorCitUaGUgcHVycG9zZSBvZiB0aGlzIGRyaXZlciBpcyB0byBwZXJmb3JtIHN0YW5kYXJkIGVNTUMgaHcgcmVzZXQKK3Byb2NlZHVyZSwgYXMgZGVzY2liZWQgYnkgSmVkZWMgNC40IHNwZWNpZmljYXRpb24uIFRoaXMgcHJvY2VkdXJlIGlzCitwZXJmb3JtZWQganVzdCBhZnRlciBNTUMgY29yZSBlbmFibGVkIHBvd2VyIHRvIHRoZSBnaXZlbiBtbWMgaG9zdCAodG8KK2ZpeCBwb3NzaWJsZSBpc3N1ZXMgaWYgYm9vdGxvYWRlciBoYXMgbGVmdCBlTU1DIGNhcmQgaW4gaW5pdGlhbGl6ZWQgb3IKK3Vua25vd24gc3RhdGUpLCBhbmQgYmVmb3JlIHBlcmZvcm1pbmcgY29tcGxldGUgc3lzdGVtIHJlYm9vdCAoYWxzbyBpbgorY2FzZSBvZiBlbWVyZ2VuY3kgcmVib290IGNhbGwpLiBUaGUgbGF0dGVyIGlzIG5lZWRlZCBvbiBib2FyZHMsIHdoaWNoCitkb2Vzbid0IGhhdmUgaGFyZHdhcmUgcmVzZXQgbG9naWMgY29ubmVjdGVkIHRvIGVtbWMgY2FyZCBhbmQgKGxpbWl0ZWQgb3IKK2Jyb2tlbikgUk9NIGJvb3Rsb2FkZXJzIGFyZSB1bmFibGUgdG8gcmVhZCBzZWNvbmQgc3RhZ2UgZnJvbSB0aGUgZW1tYworY2FyZCBpZiB0aGUgY2FyZCBpcyBsZWZ0IGluIHVua25vd24gb3IgYWxyZWFkeSBpbml0aWFsaXplZCBzdGF0ZS4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZSA6IGNvbnRhaW5zICJtbWMtcHdyc2VxLWVtbWMiLgorLSByZXNldC1ncGlvcyA6IGNvbnRhaW5zIGEgR1BJTyBzcGVjaWZpZXIuIFRoZSByZXNldCBHUElPIGlzIGFzc2VydGVkCisJYW5kIHRoZW4gZGVhc3NlcnRlZCB0byBwZXJmb3JtIGVNTUMgY2FyZCByZXNldC4gVG8gcGVyZm9ybQorCXJlc2V0IHByb2NlZHVyZSBhcyBkZXNjcmliZWQgaW4gSmVkZWMgNC40IHNwZWNpZmljYXRpb24sIHRoZQorCWdwaW8gbGluZSBzaG91bGQgYmUgZGVmaW5lZCBhcyBHUElPX0FDVElWRV9MT1cuCisKK0V4YW1wbGU6CisKKwlzZGhjaTBfcHdyc2VxIHsKKwkJY29tcGF0aWJsZSA9ICJtbWMtcHdyc2VxLWVtbWMiOworCQlyZXNldC1ncGlvcyA9IDwmZ3BpbzEgMTIgR1BJT19BQ1RJVkVfTE9XPjsKKwl9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1wd3JzZXEtc2ltcGxlLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLXB3cnNlcS1zaW1wbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NjJjNTAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1wd3JzZXEtc2ltcGxlLnR4dApAQCAtMCwwICsxLDI1IEBACisqIFRoZSBzaW1wbGUgTU1DIHBvd2VyIHNlcXVlbmNlIHByb3ZpZGVyCisKK1RoZSBwdXJwb3NlIG9mIHRoZSBzaW1wbGUgTU1DIHBvd2VyIHNlcXVlbmNlIHByb3ZpZGVyIGlzIHRvIHN1cHBvcnRzIGEgc2V0IG9mCitjb21tb24gcHJvcGVydGllcyBiZXR3ZWVuIHZhcmlvdXMgU09DIGRlc2lnbnMuIEl0IHRodXMgZW5hYmxlcyB1cyB0byB1c2UgdGhlCitzYW1lIHByb3ZpZGVyIGZvciBzZXZlcmFsIFNPQyBkZXNpZ25zLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlIDogY29udGFpbnMgIm1tYy1wd3JzZXEtc2ltcGxlIi4KKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gcmVzZXQtZ3Bpb3MgOiBjb250YWlucyBhIGxpc3Qgb2YgR1BJTyBzcGVjaWZpZXJzLiBUaGUgcmVzZXQgR1BJT3MgYXJlIGFzc2VydGVkCisJYXQgaW5pdGlhbGl6YXRpb24gYW5kIHByaW9yIHdlIHN0YXJ0IHRoZSBwb3dlciB1cCBwcm9jZWR1cmUgb2YgdGhlIGNhcmQuCisJVGhleSB3aWxsIGJlIGRlLWFzc2VydGVkIHJpZ2h0IGFmdGVyIHRoZSBwb3dlciBoYXMgYmVlbiBwcm92aWRlZCB0byB0aGUKKwljYXJkLgorLSBjbG9ja3MgOiBNdXN0IGNvbnRhaW4gYW4gZW50cnkgZm9yIHRoZSBlbnRyeSBpbiBjbG9jay1uYW1lcy4KKyAgU2VlIC4uL2Nsb2Nrcy9jbG9jay1iaW5kaW5ncy50eHQgZm9yIGRldGFpbHMuCistIGNsb2NrLW5hbWVzIDogTXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgZW50cnk6CisgICJleHRfY2xvY2siIChFeHRlcm5hbCBjbG9jayBwcm92aWRlZCB0byB0aGUgY2FyZCkuCisKK0V4YW1wbGU6CisKKwlzZGhjaTBfcHdyc2VxIHsKKwkJY29tcGF0aWJsZSA9ICJtbWMtcHdyc2VxLXNpbXBsZSI7CisJCXJlc2V0LWdwaW9zID0gPCZncGlvMSAxMiAwPjsKKwl9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy50eHQKaW5kZXggYjUyNjI4Yi4uNDM4ODk5ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9tbWMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLnR4dApAQCAtNjQsNyArNjQsNDMgQEAKIC0ga2VlcC1wb3dlci1pbi1zdXNwZW5kOiBQcmVzZXJ2ZXMgY2FyZCBwb3dlciBkdXJpbmcgYSBzdXNwZW5kL3Jlc3VtZSBjeWNsZQogLSBlbmFibGUtc2Rpby13YWtldXA6IEVuYWJsZXMgd2FrZSB1cCBvZiBob3N0IHN5c3RlbSBvbiBTRElPIElSUSBhc3NlcnRpb24KIAotRXhhbXBsZToKKworTU1DIHBvd2VyIHNlcXVlbmNlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N5c3RlbSBvbiBjaGlwIGRlc2lnbnMgbWF5IHNwZWNpZnkgYSBzcGVjaWZpYyBNTUMgcG93ZXIgc2VxdWVuY2UuIFRvCitzdWNjZXNzZnVsbHkgZGV0ZWN0IGFuIChlKU1NQy9TRC9TRElPIGNhcmQsIHRoYXQgcG93ZXIgc2VxdWVuY2UgbXVzdCBiZQorbWFpbnRhaW5lZCB3aGlsZSBpbml0aWFsaXppbmcgdGhlIGNhcmQuCisKK09wdGlvbmFsIHByb3BlcnR5OgorLSBtbWMtcHdyc2VxOiBwaGFuZGxlIHRvIHRoZSBNTUMgcG93ZXIgc2VxdWVuY2Ugbm9kZS4gU2VlICJtbWMtcHdyc2VxLSoiCisJZm9yIGRvY3VtZW50YXRpb24gb2YgTU1DIHBvd2VyIHNlcXVlbmNlIGJpbmRpbmdzLgorCisKK1VzZSBvZiBGdW5jdGlvbiBzdWJub2RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIGVtYmVkZGVkIHN5c3RlbXMgdGhlIGNhcmRzIGNvbm5lY3RlZCB0byBhIGhvc3QgbWF5IG5lZWQgYWRkaXRpb25hbAorcHJvcGVydGllcy4gVGhlc2UgY2FuIGJlIHNwZWNpZmllZCBpbiBzdWJub2RlcyB0byB0aGUgaG9zdCBjb250cm9sbGVyIG5vZGUuCitUaGUgc3Vibm9kZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIHN0YW5kYXJkICdyZWcnIHByb3BlcnR5LgorV2hpY2ggaW5mb3JtYXRpb24gZXhhY3RseSBjYW4gYmUgc3BlY2lmaWVkIGRlcGVuZHMgb24gdGhlIGJpbmRpbmdzIGZvciB0aGUKK1NESU8gZnVuY3Rpb24gZHJpdmVyIGZvciB0aGUgc3Vibm9kZSwgYXMgc3BlY2lmaWVkIGJ5IHRoZSBjb21wYXRpYmxlIHN0cmluZy4KKworUmVxdWlyZWQgaG9zdCBub2RlIHByb3BlcnRpZXMgd2hlbiB1c2luZyBmdW5jdGlvbiBzdWJub2RlczoKKy0gI2FkZHJlc3MtY2VsbHM6IHNob3VsZCBiZSBvbmUuIFRoZSBjZWxsIGlzIHRoZSBzbG90IGlkLgorLSAjc2l6ZS1jZWxsczogc2hvdWxkIGJlIHplcm8uCisKK1JlcXVpcmVkIGZ1bmN0aW9uIHN1Ym5vZGUgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogbmFtZSBvZiBTRElPIGZ1bmN0aW9uIGZvbGxvd2luZyBnZW5lcmljIG5hbWVzIHJlY29tbWVuZGVkIHByYWN0aWNlCistIHJlZzogTXVzdCBjb250YWluIHRoZSBTRElPIGZ1bmN0aW9uIG51bWJlciBvZiB0aGUgZnVuY3Rpb24gdGhpcyBzdWJub2RlCisgICAgICAgZGVzY3JpYmVzLiBBIHZhbHVlIG9mIDAgZGVub3RlcyB0aGUgbWVtb3J5IFNEIGZ1bmN0aW9uLCB2YWx1ZXMgZnJvbQorICAgICAgIDEgdG8gNyBkZW5vdGUgdGhlIFNESU8gZnVuY3Rpb25zLgorCisKK0V4YW1wbGVzCistLS0tLS0tLQorCitCYXNpYyBleGFtcGxlOgogCiBzZGhjaUBhYjAwMDAwMCB7CiAJY29tcGF0aWJsZSA9ICJzZGhjaSI7CkBAIC03Nyw0ICsxMTMsMjggQEAKIAltYXgtZnJlcXVlbmN5ID0gPDUwMDAwMDAwPjsKIAlrZWVwLXBvd2VyLWluLXN1c3BlbmQ7CiAJZW5hYmxlLXNkaW8td2FrZXVwOworCW1tYy1wd3JzZXEgPSA8JnNkaGNpMF9wd3JzZXE+CiB9CisKK0V4YW1wbGUgd2l0aCBzZGlvIGZ1bmN0aW9uIHN1Ym5vZGU6CisKK21tYzM6IG1tY0AwMWMxMjAwMCB7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MD47CisKKwlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCXBpbmN0cmwtMCA9IDwmbW1jM19waW5zX2E+OworCXZtbWMtc3VwcGx5ID0gPCZyZWdfdm1tYzM+OworCWJ1cy13aWR0aCA9IDw0PjsKKwlub24tcmVtb3ZhYmxlOworCW1tYy1wd3JzZXEgPSA8JnNkaGNpMF9wd3JzZXE+CisJc3RhdHVzID0gIm9rYXkiOworCisJYnJjbWY6IGJjcm1mQDEgeworCQlyZWcgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiYnJjbSxiY200M3h4LWZtYWMiOworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZwaW8+OworCQlpbnRlcnJ1cHRzID0gPDEwIDg+OyAvKiBQSDEwIC8gRUlOVDEwICovCisJCWludGVycnVwdC1uYW1lcyA9ICJob3N0LXdha2UiOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9zZGhjaS1mdWppdHN1LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvc2RoY2ktZnVqaXRzdS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUyYzUzYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvc2RoY2ktZnVqaXRzdS50eHQKQEAgLTAsMCArMSwzMCBAQAorKiBGdWppdHN1IFNESENJIGNvbnRyb2xsZXIKKworVGhpcyBmaWxlIGRvY3VtZW50cyBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBjb3JlIHByb3BlcnRpZXMgaW4gbW1jLnR4dAorYW5kIHRoZSBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIHNkaGNpX2Zfc2RoMzAgZHJpdmVyLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiAiZnVqaXRzdSxtYjg2czcwLXNkaGNpLTMuMCIKKy0gY2xvY2tzOiBNdXN0IGNvbnRhaW4gYW4gZW50cnkgZm9yIGVhY2ggZW50cnkgaW4gY2xvY2stbmFtZXMuIEl0IGlzIGEKKyAgbGlzdCBvZiBwaGFuZGxlcyBhbmQgY2xvY2stc3BlY2lmaWVyIHBhaXJzLgorICBTZWUgLi4vY2xvY2tzL2Nsb2NrLWJpbmRpbmdzLnR4dCBmb3IgZGV0YWlscy4KKy0gY2xvY2stbmFtZXM6IFNob3VsZCBjb250YWluIHRoZSBmb2xsb3dpbmcgdHdvIGVudHJpZXM6CisJImlmYWNlIiAtIGNsb2NrIHVzZWQgZm9yIHNkaGNpIGludGVyZmFjZQorCSJjb3JlIiAgLSBjb3JlIGNsb2NrIGZvciBzZGhjaSBjb250cm9sbGVyCisKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIHZxbW1jLXN1cHBseTogcGhhbmRsZSB0byB0aGUgcmVndWxhdG9yIGRldmljZSB0cmVlIG5vZGUsIG1lbnRpb25lZAorICBhcyB0aGUgVkNDUS9WRERfSU8gc3VwcGx5IGluIHRoZSBlTU1DL1NEIHNwZWNzLgorCitFeGFtcGxlOgorCisJc2RoY2kxOiBtbWNAMzY2MDAwMDAgeworCQljb21wYXRpYmxlID0gImZ1aml0c3UsbWI4NnM3MC1zZGhjaS0zLjAiOworCQlyZWcgPSA8MCAweDM2NjAwMDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MCAxNzIgMHg0PiwKKwkJCSAgICAgPDAgMTczIDB4ND47CisJCWJ1cy13aWR0aCA9IDw0PjsKKwkJdnFtbWMtc3VwcGx5ID0gPCZ2Y2NxX3NkaGNpMT47CisJCWNsb2NrcyA9IDwmY2xvY2sgMiAyIDA+LCA8JmNsb2NrIDIgMyAwPjsKKwkJY2xvY2stbmFtZXMgPSAiaWZhY2UiLCAiY29yZSI7CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvc2RoY2ktcHhhLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvc2RoY2ktcHhhLnR4dAppbmRleCA0ZGQ2ZGViLi4zZDFiNDQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL3NkaGNpLXB4YS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21tYy9zZGhjaS1weGEudHh0CkBAIC05LDkgKzksMTMgQEAKIC0gcmVnOgogICAqIGZvciAibXJ2bCxweGF2Mi1tbWMiIGFuZCAibXJ2bCxweGF2My1tbWMiLCBvbmUgcmVnaXN0ZXIgYXJlYSBmb3IKICAgICB0aGUgU0RIQ0kgcmVnaXN0ZXJzLgotICAqIGZvciAibWFydmVsbCxhcm1hZGEtMzgwLXNkaGNpIiwgdHdvIHJlZ2lzdGVyIGFyZWFzLiBUaGUgZmlyc3Qgb25lCi0gICAgZm9yIHRoZSBTREhDSSByZWdpc3RlcnMgdGhlbXNlbHZlcywgYW5kIHRoZSBzZWNvbmQgb25lIGZvciB0aGUKLSAgICBBWEkvTWJ1cyBicmlkZ2UgcmVnaXN0ZXJzIG9mIHRoZSBTREhDSSB1bml0LgorCisgICogZm9yICJtYXJ2ZWxsLGFybWFkYS0zODAtc2RoY2kiLCB0aHJlZSByZWdpc3RlciBhcmVhcy4gVGhlIGZpcnN0CisgICAgb25lIGZvciB0aGUgU0RIQ0kgcmVnaXN0ZXJzIHRoZW1zZWx2ZXMsIHRoZSBzZWNvbmQgb25lIGZvciB0aGUKKyAgICBBWEkvTWJ1cyBicmlkZ2UgcmVnaXN0ZXJzIG9mIHRoZSBTREhDSSB1bml0LCB0aGUgdGhpcmQgb25lIGZvciB0aGUKKyAgICBTRElPMyBDb25maWd1cmF0aW9uIHJlZ2lzdGVyCistIHJlZyBuYW1lczogc2hvdWxkIGJlICJzZGhjaSIsICJtYnVzIiwgImNvbmYtc2RpbzMiLiBvbmx5IG1hbmRhdG9yeQorICBmb3IgIm1hcnZlbGwsYXJtYWRhLTM4MC1zZGhjaSIKIC0gY2xvY2tzOiBBcnJheSBvZiBjbG9ja3MgcmVxdWlyZWQgZm9yIFNESENJOyByZXF1aXJlcyBhdCBsZWFzdCBvbmUgZm9yCiAgICAgSS9PIGNsb2NrLgogLSBjbG9jay1uYW1lczogQXJyYXkgb2YgbmFtZXMgY29ycmVzcG9uZGluZyB0byBjbG9ja3MgcHJvcGVydHk7IHNoYWxsIGJlCkBAIC0zNSw3ICszOSwxMCBAQAogCiBzZGhjaUBkODAwMCB7CiAJY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLGFybWFkYS0zODAtc2RoY2kiOwotCXJlZyA9IDwweGQ4MDAwIDB4MTAwMD4sIDwweGRjMDAwIDB4MTAwPjsKKwlyZWctbmFtZXMgPSAic2RoY2kiLCAibWJ1cyIsICJjb25mLXNkaW8zIjsKKwlyZWcgPSA8MHhkODAwMCAweDEwMDA+LAorCQk8MHhkYzAwMCAweDEwMD47CisJCTwweDE4NDU0IDB4ND47CiAJaW50ZXJydXB0cyA9IDwwIDI1IDB4ND47CiAJY2xvY2tzID0gPCZnYXRlY2xrIDE3PjsKIAljbG9jay1uYW1lcyA9ICJpbyI7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL2ZzbWMtbmFuZC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL2ZzbWMtbmFuZC50eHQKaW5kZXggZWM0MjkzNS4uNTIzNWNiYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9mc21jLW5hbmQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvZnNtYy1uYW5kLnR4dApAQCAtOSw3ICs5LDcgQEAKIE9wdGlvbmFsIHByb3BlcnRpZXM6CiAtIGJhbmstd2lkdGggOiBXaWR0aCAoaW4gYnl0ZXMpIG9mIHRoZSBkZXZpY2UuICBJZiBub3QgcHJlc2VudCwgdGhlIHdpZHRoCiAgIGRlZmF1bHRzIHRvIDEgYnl0ZQotLSBuYW5kLXNraXAtYmJ0c2NhbjogSW5kaWNhdGVzIHRoZSB0aGUgQkJUIHNjYW5uaW5nIHNob3VsZCBiZSBza2lwcGVkCistIG5hbmQtc2tpcC1iYnRzY2FuOiBJbmRpY2F0ZXMgdGhlIEJCVCBzY2FubmluZyBzaG91bGQgYmUgc2tpcHBlZAogLSB0aW1pbmdzOiBhcnJheSBvZiA2IGJ5dGVzIGZvciBOQU5EIHRpbWluZ3MuIFRoZSBtZWFuaW5ncyBvZiB0aGVzZSBieXRlcwogICBhcmU6CiAgIGJ5dGUgMCBUQ0xSICA6IENMRSB0byBSRSBkZWxheSBpbiBudW1iZXIgb2YgQUhCIGNsb2NrIGN5Y2xlcywgb25seSA0IGJpdHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYW1kLXhnYmUtcGh5LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYW1kLXhnYmUtcGh5LnR4dAppbmRleCA0MjQwOWJmLi4zM2RmMzkzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2FtZC14Z2JlLXBoeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9hbWQteGdiZS1waHkudHh0CkBAIC03LDE3ICs3LDM4IEBACiAgICAtIFNlckRlcyBSeC9UeCByZWdpc3RlcnMKICAgIC0gU2VyRGVzIGludGVncmF0aW9uIHJlZ2lzdGVycyAoMS8yKQogICAgLSBTZXJEZXMgaW50ZWdyYXRpb24gcmVnaXN0ZXJzICgyLzIpCistIGludGVycnVwdC1wYXJlbnQ6IFNob3VsZCBiZSB0aGUgcGhhbmRsZSBmb3IgdGhlIGludGVycnVwdCBjb250cm9sbGVyCisgIHRoYXQgc2VydmljZXMgaW50ZXJydXB0cyBmb3IgdGhpcyBkZXZpY2UKKy0gaW50ZXJydXB0czogU2hvdWxkIGNvbnRhaW4gdGhlIGFtZC14Z2JlLXBoeSBpbnRlcnJ1cHQuCiAKIE9wdGlvbmFsIHByb3BlcnRpZXM6CiAtIGFtZCxzcGVlZC1zZXQ6IFNwZWVkIGNhcGFiaWxpdGllcyBvZiB0aGUgZGV2aWNlCiAgICAgMCAtIDFHYkUgYW5kIDEwR2JFIChkZWZhdWx0KQogICAgIDEgLSAyLjVHYkUgYW5kIDEwR2JFCiAKK1RoZSBmb2xsb3dpbmcgb3B0aW9uYWwgcHJvcGVydGllcyBhcmUgcmVwcmVzZW50ZWQgYnkgYW4gYXJyYXkgd2l0aCBlYWNoCit2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGEgcGFydGljdWxhciBzcGVlZC4gVGhlIGZpcnN0IGFycmF5IHZhbHVlIHJlcHJlc2VudHMKK3RoZSBzZXR0aW5nIGZvciB0aGUgMUdiRSBzcGVlZCwgdGhlIHNlY29uZCB2YWx1ZSBmb3IgdGhlIDIuNUdiRSBzcGVlZCBhbmQKK3RoZSB0aGlyZCB2YWx1ZSBmb3IgdGhlIDEwR2JFIHNwZWVkLiAgQWxsIHRocmVlIHZhbHVlcyBhcmUgcmVxdWlyZWQgaWYgdGhlCitwcm9wZXJ0eSBpcyB1c2VkLgorLSBhbWQsc2VyZGVzLWJsd2M6IEJhc2VsaW5lIHdhbmRlcmluZyBjb3JyZWN0aW9uIGVuYWJsZW1lbnQKKyAgICAwIC0gT2ZmCisgICAgMSAtIE9uCistIGFtZCxzZXJkZXMtY2RyLXJhdGU6IENEUiByYXRlIHNwZWVkIHNlbGVjdGlvbgorLSBhbWQsc2VyZGVzLXBxLXNrZXc6IFBRIChkYXRhIHNhbXBsaW5nKSBza2V3CistIGFtZCxzZXJkZXMtdHgtYW1wOiBUWCBhbXBsaXR1ZGUgYm9vc3QKKwogRXhhbXBsZToKIAl4Z2JlX3BoeUBlMTI0MDgwMCB7CiAJCWNvbXBhdGlibGUgPSAiYW1kLHhnYmUtcGh5LXNlYXR0bGUtdjFhIiwgImV0aGVybmV0LXBoeS1pZWVlODAyLjMtYzQ1IjsKIAkJcmVnID0gPDAgMHhlMTI0MDgwMCAwIDB4MDA0MDA+LAogCQkgICAgICA8MCAweGUxMjUwMDAwIDAgMHgwMDA2MD4sCiAJCSAgICAgIDwwIDB4ZTEyNTAwODAgMCAweDAwMDA0PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKKwkJaW50ZXJydXB0cyA9IDwwIDMyMyA0PjsKIAkJYW1kLHNwZWVkLXNldCA9IDwwPjsKKwkJYW1kLHNlcmRlcy1ibHdjID0gPDE+LCA8MT4sIDwwPjsKKwkJYW1kLHNlcmRlcy1jZHItcmF0ZSA9IDwyPiwgPDI+LCA8Nz47CisJCWFtZCxzZXJkZXMtcHEtc2tldyA9IDwxMD4sIDwxMD4sIDwzMD47CisJCWFtZCxzZXJkZXMtdHgtYW1wID0gPDE1PiwgPDE1PiwgPDEwPjsKIAl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9icm9hZGNvbS1zeXN0ZW1wb3J0LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvYnJvYWRjb20tc3lzdGVtcG9ydC50eHQKaW5kZXggYWE3YWQ2Mi4uODc3ZGEzNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9icm9hZGNvbS1zeXN0ZW1wb3J0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Jyb2FkY29tLXN5c3RlbXBvcnQudHh0CkBAIC0zLDcgKzMsNyBAQAogUmVxdWlyZWQgcHJvcGVydGllczoKIC0gY29tcGF0aWJsZTogc2hvdWxkIGJlIG9uZSBvZiAiYnJjbSxzeXN0ZW1wb3J0LXYxLjAwIiBvciAiYnJjbSxzeXN0ZW1wb3J0IgogLSByZWc6IGFkZHJlc3MgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgZGV2aWNlLgotLSBpbnRlcnJ1cHRzOiBpbnRlcnJ1cHRzIGZvciB0aGUgZGV2aWNlLCBmaXJzdCBjZWxsIG11c3QgYmUgZm9yIHRoZSB0aGUgcngKKy0gaW50ZXJydXB0czogaW50ZXJydXB0cyBmb3IgdGhlIGRldmljZSwgZmlyc3QgY2VsbCBtdXN0IGJlIGZvciB0aGUgcngKICAgaW50ZXJydXB0cywgYW5kIHRoZSBzZWNvbmQgY2VsbCBzaG91bGQgYmUgZm9yIHRoZSB0cmFuc21pdCBxdWV1ZXMuIEFuCiAgIG9wdGlvbmFsIHRoaXJkIGludGVycnVwdCBjZWxsIGZvciBXYWtlLW9uLUxBTiBjYW4gYmUgc3BlY2lmaWVkCiAtIGxvY2FsLW1hYy1hZGRyZXNzOiBFdGhlcm5ldCBNQUMgYWRkcmVzcyAoNDggYml0cykgb2YgdGhpcyBhZGFwdGVyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Rhdmljb20tZG05MDAwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZGF2aWNvbS1kbTkwMDAudHh0CmluZGV4IDI4NzY3ZWQuLjUyMjRiZjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZGF2aWNvbS1kbTkwMDAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZGF2aWNvbS1kbTkwMDAudHh0CkBAIC0xMSw2ICsxMSw4IEBACiBPcHRpb25hbCBwcm9wZXJ0aWVzOgogLSBkYXZpY29tLG5vLWVlcHJvbSA6IENvbmZpZ3VyYXRpb24gRUVQUk9NIGlzIG5vdCBhdmFpbGFibGUKIC0gZGF2aWNvbSxleHQtcGh5IDogVXNlIGV4dGVybmFsIFBIWQorLSByZXNldC1ncGlvcyA6IHBoYW5kbGUgb2YgZ3BpbyB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXNldCBjaGlwIGR1cmluZyBwcm9iZQorLSB2Y2Mtc3VwcGx5IDogcGhhbmRsZSBvZiByZWd1bGF0b3IgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZW5hYmxlIHBvd2VyIHRvIGNoaXAKIAogRXhhbXBsZToKIApAQCAtMjEsNCArMjMsNiBAQAogCQlpbnRlcnJ1cHRzID0gPDcgND47CiAJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwIDAwIGRlIGFkIGJlIGVmXTsKIAkJZGF2aWNvbSxuby1lZXByb207CisJCXJlc2V0LWdwaW9zID0gPCZncGYgMTIgR1BJT19BQ1RJVkVfTE9XPjsKKwkJdmNjLXN1cHBseSA9IDwmZXRoMF9wb3dlcj47CiAJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZnNsLWZlYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2ZzbC1mZWMudHh0CmluZGV4IDBjODc3NWMuLmE5ZWI2MTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZnNsLWZlYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9mc2wtZmVjLnR4dApAQCAtMjIsNiArMjIsOCBAQAogLSBmc2wsbnVtLXJ4LXF1ZXVlcyA6IFRoZSBwcm9wZXJ0eSBpcyB2YWxpZCBmb3IgZW5ldC1hdmIgSVAsIHdoaWNoIHN1cHBvcnRzCiAgIGh3IG11bHRpIHF1ZXVlcy4gU2hvdWxkIHNwZWNpZnkgdGhlIHJ4IHF1ZXVlIG51bWJlciwgb3RoZXJ3aXNlIHNldCByeCBxdWV1ZQogICBudW1iZXIgdG8gMS4KKy0gZnNsLG1hZ2ljLXBhY2tldCA6IElmIHByZXNlbnQsIGluZGljYXRlcyB0aGF0IHRoZSBoYXJkd2FyZSBzdXBwb3J0cyB3YWtpbmcKKyAgdXAgdmlhIG1hZ2ljIHBhY2tldC4KIAogT3B0aW9uYWwgc3Vibm9kZXM6CiAtIG1kaW8gOiBzcGVjaWZpZXMgdGhlIG1kaW8gYnVzIGluIHRoZSBGRUMsIHVzZWQgYXMgYSBjb250YWluZXIgZm9yIHBoeSBub2RlcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9mc2wtdHNlYy1waHkudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9mc2wtdHNlYy1waHkudHh0CmluZGV4IGJlNmVhODkuLjFlOTc1MzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZnNsLXRzZWMtcGh5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2ZzbC10c2VjLXBoeS50eHQKQEAgLTgsNyArOCwxNiBAQAogUmVxdWlyZWQgcHJvcGVydGllczoKICAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgZGV2aWNlCiAgIC0gY29tcGF0aWJsZSA6IFNob3VsZCBkZWZpbmUgdGhlIGNvbXBhdGlibGUgZGV2aWNlIHR5cGUgZm9yIHRoZQotICAgIG1kaW8uICBDdXJyZW50bHksIHRoaXMgaXMgbW9zdCBsaWtlbHkgdG8gYmUgImZzbCxnaWFuZmFyLW1kaW8iCisgICAgbWRpby4gQ3VycmVudGx5IHN1cHBvcnRlZCBzdHJpbmdzL2RldmljZXMgYXJlOgorCS0gImZzbCxnaWFuZmFyLXRiaSIKKwktICJmc2wsZ2lhbmZhci1tZGlvIgorCS0gImZzbCxldHNlYzItdGJpIgorCS0gImZzbCxldHNlYzItbWRpbyIKKwktICJmc2wsdWNjLW1kaW8iCisJLSAiZnNsLGZtYW4tbWRpbyIKKyAgICBXaGVuIGRldmljZV90eXBlIGlzICJtZGlvIiwgdGhlIGZvbGxvd2luZyBzdHJpbmdzIGFyZSBhbHNvIGNvbnNpZGVyZWQ6CisJLSAiZ2lhbmZhciIKKwktICJ1Y2NfZ2V0aF9waHkiCiAKIEV4YW1wbGU6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvaGlzaWxpY29uLWhpcDA0LW5ldC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2hpc2lsaWNvbi1oaXAwNC1uZXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OGZjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2hpc2lsaWNvbi1oaXAwNC1uZXQudHh0CkBAIC0wLDAgKzEsODggQEAKK0hpc2lsaWNvbiBoaXAwNCBFdGhlcm5ldCBDb250cm9sbGVyCisKKyogRXRoZXJuZXQgY29udHJvbGxlciBub2RlCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGU6IHNob3VsZCBiZSAiaGlzaWxpY29uLGhpcDA0LW1hYyIuCistIHJlZzogYWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UuCistIGludGVycnVwdHM6IGludGVycnVwdCBmb3IgdGhlIGRldmljZS4KKy0gcG9ydC1oYW5kbGU6IDxwaGFuZGxlIHBvcnQgY2hhbm5lbD4KKwlwaGFuZGxlLCBzcGVjaWZpZXMgYSByZWZlcmVuY2UgdG8gdGhlIHN5c2NvbiBwcGUgbm9kZQorCXBvcnQsIHBvcnQgbnVtYmVyIGNvbm5lY3RlZCB0byB0aGUgY29udHJvbGxlcgorCWNoYW5uZWwsIHJlY3YgY2hhbm5lbCBzdGFydCBmcm9tIGNoYW5uZWwgKiBudW1iZXIgKFJYX0RFU0NfTlVNKQorLSBwaHktbW9kZTogc2VlIGV0aGVybmV0LnR4dCBbMV0uCisKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIHBoeS1oYW5kbGU6IHNlZSBldGhlcm5ldC50eHQgWzFdLgorCitbMV0gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9ldGhlcm5ldC50eHQKKworCisqIEV0aGVybmV0IHBwZSBub2RlOgorQ29udHJvbCByeCAmIHR4IGZpZm9zIG9mIGFsbCBldGhlcm5ldCBjb250cm9sbGVycy4KK0hhdmUgMjA0OCByZWN2IGNoYW5uZWxzIHNoYXJlZCBieSBhbGwgZXRoZXJuZXQgY29udHJvbGxlcnMsIG9ubHkgaWYgbm8gb3ZlcmxhcC4KK0VhY2ggY29udHJvbGxlcidzIHJlY3YgY2hhbm5lbCBzdGFydCBmcm9tIGNoYW5uZWwgKiBudW1iZXIgKFJYX0RFU0NfTlVNKS4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogImhpc2lsaWNvbixoaXAwNC1wcGUiLCAic3lzY29uIi4KKy0gcmVnOiBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIGRldmljZS4KKworCisqIE1ESU8gYnVzIG5vZGU6CisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisKKy0gY29tcGF0aWJsZTogc2hvdWxkIGJlICJoaXNpbGljb24saGlwMDQtbWRpbyIuCistIEluaGVyaXRzIGZyb20gTURJTyBidXMgbm9kZSBiaW5kaW5nIFsyXQorWzJdIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGh5LnR4dAorCitFeGFtcGxlOgorCW1kaW8geworCQljb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXAwNC1tZGlvIjsKKwkJcmVnID0gPDB4MjhmMTAwMCAweDEwMDA+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJY29tcGF0aWJsZSA9ICJldGhlcm5ldC1waHktaWVlZTgwMi4zLWMyMiI7CisJCQlyZWcgPSA8MD47CisJCQltYXJ2ZWxsLHJlZy1pbml0ID0gPDE4IDB4MTQgMCAweDgwMDE+OworCQl9OworCisJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCWNvbXBhdGlibGUgPSAiZXRoZXJuZXQtcGh5LWllZWU4MDIuMy1jMjIiOworCQkJcmVnID0gPDE+OworCQkJbWFydmVsbCxyZWctaW5pdCA9IDwxOCAweDE0IDAgMHg4MDAxPjsKKwkJfTsKKwl9OworCisJcHBlOiBwcGVAMjhjMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpcDA0LXBwZSIsICJzeXNjb24iOworCQlyZWcgPSA8MHgyOGMwMDAwIDB4MTAwMDA+OworCX07CisKKwlmZTogZXRoZXJuZXRAMjhiMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpcDA0LW1hYyI7CisJCXJlZyA9IDwweDI4YjAwMDAgMHgxMDAwMD47CisJCWludGVycnVwdHMgPSA8MCA0MTMgND47CisJCXBoeS1tb2RlID0gIm1paSI7CisJCXBvcnQtaGFuZGxlID0gPCZwcGUgMzEgMD47CisJfTsKKworCWdlMDogZXRoZXJuZXRAMjgwMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpcDA0LW1hYyI7CisJCXJlZyA9IDwweDI4MDAwMDAgMHgxMDAwMD47CisJCWludGVycnVwdHMgPSA8MCA0MDIgND47CisJCXBoeS1tb2RlID0gInNnbWlpIjsKKwkJcG9ydC1oYW5kbGUgPSA8JnBwZSAwIDE+OworCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwl9OworCisJZ2U4OiBldGhlcm5ldEAyODgwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJoaXNpbGljb24saGlwMDQtbWFjIjsKKwkJcmVnID0gPDB4Mjg4MDAwMCAweDEwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwwIDQxMCA0PjsKKwkJcGh5LW1vZGUgPSAic2dtaWkiOworCQlwb3J0LWhhbmRsZSA9IDwmcHBlIDggMj47CisJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2tleXN0b25lLW5ldGNwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQva2V5c3RvbmUtbmV0Y3AudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YzA3NzEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2tleXN0b25lLW5ldGNwLnR4dApAQCAtMCwwICsxLDE5NyBAQAorVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGRldmljZSB0cmVlIGJpbmRpbmdzIGFzc29jaWF0ZWQgd2l0aCB0aGUKK2tleXN0b25lIG5ldHdvcmsgY29wcm9jZXNzb3IoTmV0Q1ApIGRyaXZlciBzdXBwb3J0LgorCitUaGUgbmV0d29yayBjb3Byb2Nlc3NvciAoTmV0Q1ApIGlzIGEgaGFyZHdhcmUgYWNjZWxlcmF0b3IgdGhhdCBwcm9jZXNzZXMKK0V0aGVybmV0IHBhY2tldHMuIE5ldENQIGhhcyBhIGdpZ2FiaXQgRXRoZXJuZXQgKEdiRSkgc3Vic3l0ZW0gd2l0aCBhIGV0aGVybmV0Citzd2l0Y2ggc3ViLW1vZHVsZSB0byBzZW5kIGFuZCByZWNlaXZlIHBhY2tldHMuIE5ldENQIGFsc28gaW5jbHVkZXMgYSBwYWNrZXQKK2FjY2VsZXJhdG9yIChQQSkgbW9kdWxlIHRvIHBlcmZvcm0gcGFja2V0IGNsYXNzaWZpY2F0aW9uIG9wZXJhdGlvbnMgc3VjaCBhcworaGVhZGVyIG1hdGNoaW5nLCBhbmQgcGFja2V0IG1vZGlmaWNhdGlvbiBvcGVyYXRpb25zIHN1Y2ggYXMgY2hlY2tzdW0KK2dlbmVyYXRpb24uIE5ldENQIGNhbiBhbHNvIG9wdGlvbmFsbHkgaW5jbHVkZSBhIFNlY3VyaXR5IEFjY2VsZXJhdG9yIChTQSkKK2NhcGFibGUgb2YgcGVyZm9ybWluZyBJUFNlYyBvcGVyYXRpb25zIG9uIGluZ3Jlc3MvZWdyZXNzIHBhY2tldHMuCisKK0tleXN0b25lIElJIFNvQydzIGFsc28gaGF2ZSBhIDEwIEdpZ2FiaXQgRXRoZXJuZXQgU3Vic3lzdGVtIChYR2JFKSB3aGljaAoraW5jbHVkZXMgYSAzLXBvcnQgRXRoZXJuZXQgc3dpdGNoIHN1Yi1tb2R1bGUgY2FwYWJsZSBvZiAxMEdiL3MgYW5kIDFHYi9zIHJhdGVzCitwZXIgRXRoZXJuZXQgcG9ydC4KKworS2V5c3RvbmUgTmV0Q1AgZHJpdmVyIGhhcyBhIHBsdWctaW4gbW9kdWxlIGFyY2hpdGVjdHVyZSB3aGVyZSBlYWNoIG9mIHRoZSBOZXRDUAorc3ViLW1vZHVsZXMgZXhpc3QgYXMgYSBsb2FkYWJsZSBrZXJuZWwgbW9kdWxlIHdoaWNoIHBsdWcgaW4gdG8gdGhlIG5ldGNwIGNvcmUuCitUaGVzZSBzdWItbW9kdWxlcyBhcmUgcmVwcmVzZW50ZWQgYXMgIm5ldGNwLWRldmljZXMiIGluIHRoZSBkdHMgYmluZGluZ3MuIEl0IGlzCittYW5kYXRvcnkgdG8gaGF2ZSB0aGUgZXRoZXJuZXQgc3dpdGNoIHN1Yi1tb2R1bGUgZm9yIHRoZSBldGhlcm5ldCBpbnRlcmZhY2UgdG8KK2JlIG9wZXJhdGlvbmFsLiBBbnkgb3RoZXIgc3ViLW1vZHVsZSBsaWtlIHRoZSBQQSBpcyBvcHRpb25hbC4KKworTmV0Q1AgRXRoZXJuZXQgU3ViU3lzdGVtIExheW91dDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgTmV0Q1Agc3Vic3lzdGVtKDEwRyBvciAxRykKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJfAorCXwtPiBOZXRDUCBEZXZpY2VzIC0+CXwKKwl8CQkJfC0+IEdCRS9YR0JFIFN3aXRjaAorCXwJCQl8CisJfAkJCXwtPiBQYWNrZXQgQWNjZWxlcmF0b3IKKwl8CQkJfAorCXwJCQl8LT4gU2VjdXJpdHkgQWNjZWxlcmF0b3IKKwl8CisJfAorCXwKKwl8LT4gTmV0Q1AgSW50ZXJmYWNlcyAtPgl8CisJCQkJfC0+IEV0aGVybmV0IFBvcnQgMAorCQkJCXwKKwkJCQl8LT4gRXRoZXJuZXQgUG9ydCAxCisJCQkJfAorCQkJCXwtPiBFdGhlcm5ldCBQb3J0IDIKKwkJCQl8CisJCQkJfC0+IEV0aGVybmV0IFBvcnQgMworCisKK05ldENQIHN1YnN5c3RlbSBwcm9wZXJ0aWVzOgorUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZToJU2hvdWxkIGJlICJ0aSxuZXRjcC0xLjAiCistIGNsb2NrczoJcGhhbmRsZSB0byB0aGUgcmVmZXJlbmNlIGNsb2NrcyBmb3IgdGhlIHN1YnN5c3RlbS4KKy0gZG1hLWlkOglOYXZpZ2F0b3IgcGFja2V0IGRtYSBpbnN0YW5jZSBpZC4KKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gcmVnOgkJcmVnaXN0ZXIgbG9jYXRpb24gYW5kIHRoZSBzaXplIGZvciB0aGUgZm9sbG93aW5nIHJlZ2lzdGVyCisJCXJlZ2lvbnMgaW4gdGhlIHNwZWNpZmllZCBvcmRlci4KKwkJLSBFZnVzZSBNQUMgYWRkcmVzcyByZWdpc3RlcgorLSBkbWEtY29oZXJlbnQ6CVByZXNlbnQgaWYgZG1hIG9wZXJhdGlvbnMgYXJlIGNvaGVyZW50CistIGJpZy1lbmRpYW46CUtleXN0b25lIGRldmljZXMgY2FuIGJlIG9wZXJhdGVkIGluIGEgbW9kZSB3aGVyZSB0aGUgRFNQIGlzIGluCisJCXRoZSBiaWcgZW5kaWFuIG1vZGUuIEluIHN1Y2ggY2FzZXMgZW5hYmxlIHRoaXMgb3B0aW9uLiBUaGlzCisJCW9wdGlvbiBzaG91bGQgYWxzbyBiZSBlbmFibGVkIGlmIHRoZSBBUk0gaXMgb3BlcmF0ZWQgaW4KKwkJYmlnIGVuZGlhbiBtb2RlIHdpdGggdGhlIERTUCBpbiBsaXR0bGUgZW5kaWFuLgorCitOZXRDUCBkZXZpY2UgcHJvcGVydGllczogRGV2aWNlIHNwZWNpZmljYXRpb24gZm9yIE5ldENQIHN1Yi1tb2R1bGVzLgorMUdiLzEwR2IgKGdiZS94Z2JlKSBldGhlcm5ldCBzd2l0Y2ggc3ViLW1vZHVsZSBzcGVjaWZpY2F0aW9ucy4KK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGxhYmVsOglNdXN0IGJlICJuZXRjcC1nYmUiIGZvciAxR2IgJiAibmV0Y3AteGdiZSIgZm9yIDEwR2IuCistIHJlZzoJCXJlZ2lzdGVyIGxvY2F0aW9uIGFuZCB0aGUgc2l6ZSBmb3IgdGhlIGZvbGxvd2luZyByZWdpc3RlcgorCQlyZWdpb25zIGluIHRoZSBzcGVjaWZpZWQgb3JkZXIuCisJCS0gc3Vic3lzdGVtIHJlZ2lzdGVycworCQktIHNlcmRlcyByZWdpc3RlcnMKKy0gdHgtY2hhbm5lbDoJdGhlIG5hdmlnYXRvciBwYWNrZXQgZG1hIGNoYW5uZWwgbmFtZSBmb3IgdHguCistIHR4LXF1ZXVlOgl0aGUgbmF2aWdhdG9yIHF1ZXVlIG51bWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIHR4IGRtYSBjaGFubmVsLgorLSBpbnRlcmZhY2VzOglzcGVjaWZpY2F0aW9uIGZvciBlYWNoIG9mIHRoZSBzd2l0Y2ggcG9ydCB0byBiZSByZWdpc3RlcmVkIGFzIGEKKwkJbmV0d29yayBpbnRlcmZhY2UgaW4gdGhlIHN0YWNrLgorLS0gc2xhdmUtcG9ydDoJU3dpdGNoIHBvcnQgbnVtYmVyLCAwIGJhc2VkIG51bWJlcmluZy4KKy0tIGxpbmstaW50ZXJmYWNlOgl0eXBlIG9mIGxpbmsgaW50ZXJmYWNlLCBzdXBwb3J0ZWQgb3B0aW9ucyBhcmUKKwkJCS0gbWFjPC0+bWFjIGF1dG8gbmVnb3RpYXRlIG1vZGU6IDAKKwkJCS0gbWFjPC0+cGh5IG1vZGU6IDEKKwkJCS0gbWFjPC0+bWFjIGZvcmNlZCBtb2RlOiAyCisJCQktIG1hYzwtPmZpYmVyIG1vZGU6IDMKKwkJCS0gbWFjPC0+cGh5IG1vZGUgd2l0aCBubyBtZGlvOiA0CisJCQktIDEwR2IgbWFjPC0+cGh5IG1vZGUgOiAxMAorCQkJLSAxMEdiIG1hYzwtPm1hYyBmb3JjZWQgbW9kZSA6IDExCistLS0tcGh5LWhhbmRsZToJcGhhbmRsZSB0byBQSFkgZGV2aWNlCisKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIGVuYWJsZS1hbGU6CU5ldENQIGRyaXZlciBrZWVwcyB0aGUgYWRkcmVzcyBsZWFybmluZyBmZWF0dXJlIGluIHRoZSBldGhlcm5ldAorCQlzd2l0Y2ggbW9kdWxlIGRpc2FibGVkLiBUaGlzIGF0dHJpYnV0ZSBpcyB0byBlbmFibGUgdGhlIGFkZHJlc3MKKwkJbGVhcm5pbmcuCistIHNlY29uZGFyeS1zbGF2ZS1wb3J0czoJc3BlY2lmaWNhdGlvbiBmb3IgZWFjaCBvZiB0aGUgc3dpdGNoIHBvcnQgbm90IGJlCisJCQkJcmVnaXN0ZXJlZCBhcyBhIG5ldHdvcmsgaW50ZXJmYWNlLiBOZXRDUCBkcml2ZXIKKwkJCQl3aWxsIG9ubHkgaW5pdGlhbGl6ZSB0aGVzZSBwb3J0cyBhbmQgYXR0YWNoIFBIWQorCQkJCWRyaXZlciB0byB0aGVtIGlmIG5lZWRlZC4KKworTmV0Q1AgaW50ZXJmYWNlIHByb3BlcnRpZXM6IEludGVyZmFjZSBzcGVjaWZpY2F0aW9uIGZvciBOZXRDUCBzdWItbW9kdWxlcy4KK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIHJ4LWNoYW5uZWw6CXRoZSBuYXZpZ2F0b3IgcGFja2V0IGRtYSBjaGFubmVsIG5hbWUgZm9yIHJ4LgorLSByeC1xdWV1ZToJdGhlIG5hdmlnYXRvciBxdWV1ZSBudW1iZXIgYXNzb2NpYXRlZCB3aXRoIHJ4IGRtYSBjaGFubmVsLgorLSByeC1wb29sOglzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBkZXNjcmlwdG9ycyB0byBiZSB1c2VkICYgdGhlIHJlZ2lvbi1pZAorCQlmb3IgY3JlYXRpbmcgdGhlIHJ4IGRlc2NyaXB0b3IgcG9vbC4KKy0gdHgtcG9vbDoJc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgdG8gYmUgdXNlZCAmIHRoZSByZWdpb24taWQKKwkJZm9yIGNyZWF0aW5nIHRoZSB0eCBkZXNjcmlwdG9yIHBvb2wuCistIHJ4LXF1ZXVlLWRlcHRoOgludW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gZWFjaCBvZiB0aGUgZnJlZSBkZXNjcmlwdG9yCisJCQlxdWV1ZSAoRkRRKSBmb3IgdGhlIHBrdGRtYSBSeCBmbG93LiBUaGVyZSBjYW4gYmUgYXQKKwkJCXByZXNlbnQgYSBtYXhpbXVtIG9mIDQgcXVldWVzIHBlciBSeCBmbG93LgorLSByeC1idWZmZXItc2l6ZToJdGhlIGJ1ZmZlciBzaXplIGZvciBlYWNoIG9mIHRoZSBSeCBmbG93IEZEUS4KKy0gdHgtY29tcGxldGlvbi1xdWV1ZToJdGhlIG5hdmlnYXRvciBxdWV1ZSBudW1iZXIgd2hlcmUgdGhlIGRlc2NyaXB0b3JzIGFyZQorCQkJcmVjeWNsZWQgYWZ0ZXIgVHggRE1BIGNvbXBsZXRpb24uCisKK09wdGlvbmFsIHByb3BlcnRpZXM6CistIGVmdXNlLW1hYzoJSWYgdGhpcyBpcyAxLCB0aGVuIHRoZSBNQUMgYWRkcmVzcyBmb3IgdGhlIGludGVyZmFjZSBpcworCQlvYnRhaW5lZCBmcm9tIHRoZSBkZXZpY2UgZWZ1c2UgbWFjIGFkZHJlc3MgcmVnaXN0ZXIKKy0gbG9jYWwtbWFjLWFkZHJlc3M6CXRoZSBkcml2ZXIgaXMgZGVzaWduZWQgdG8gdXNlIHRoZSBvZl9nZXRfbWFjX2FkZHJlc3MgYXBpCisJCQlvbmx5IGlmIGVmdXNlLW1hYyBpcyAwLiBXaGVuIGVmdXNlLW1hYyBpcyAwLCB0aGUgTUFDCisJCQlhZGRyZXNzIGlzIG9idGFpbmVkIGZyb20gbG9jYWwtbWFjLWFkZHJlc3MuIElmIHRoaXMKKwkJCWF0dHJpYnV0ZSBpcyBub3QgcHJlc2VudCwgdGhlbiB0aGUgZHJpdmVyIHdpbGwgdXNlIGEKKwkJCXJhbmRvbSBNQUMgYWRkcmVzcy4KKy0gIm5ldGNwLWRldmljZSBsYWJlbCI6CXBoYW5kbGUgdG8gdGhlIGRldmljZSBzcGVjaWZpY2F0aW9uIGZvciBlYWNoIG9mIE5ldENQCisJCQlzdWItbW9kdWxlIGF0dGFjaGVkIHRvIHRoaXMgaW50ZXJmYWNlLgorCitFeGFtcGxlIGJpbmRpbmc6CisKK25ldGNwOiBuZXRjcEAyMDkwMDAwIHsKKwlyZWcgPSA8MHgyNjIwMTEwIDB4OD47CisJcmVnLW5hbWVzID0gImVmdXNlIjsKKwljb21wYXRpYmxlID0gInRpLG5ldGNwLTEuMCI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJcmFuZ2VzOworCisJY2xvY2tzID0gPCZwYXBsbGNsaz4sIDwmY2xrY3BnbWFjPiwgPCZjaGlwY2xrMTI+OworCWRtYS1jb2hlcmVudDsKKwkvKiBiaWctZW5kaWFuOyAqLworCWRtYS1pZCA9IDwwPjsKKworCW5ldGNwLWRldmljZXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlczsKKwkJZ2JlQDB4MjA5MDAwMCB7CisJCQlsYWJlbCA9ICJuZXRjcC1nYmUiOworCQkJcmVnID0gPDB4MjA5MDAwMCAweGYwMD47CisJCQkvKiBlbmFibGUtYWxlOyAqLworCQkJdHgtcXVldWUgPSA8NjQ4PjsKKwkJCXR4LWNoYW5uZWwgPSA8OD47CisKKwkJCWludGVyZmFjZXMgeworCQkJCWdiZTA6IGludGVyZmFjZS0wIHsKKwkJCQkJc2xhdmUtcG9ydCA9IDwwPjsKKwkJCQkJbGluay1pbnRlcmZhY2UJPSA8ND47CisJCQkJfTsKKwkJCQlnYmUxOiBpbnRlcmZhY2UtMSB7CisJCQkJCXNsYXZlLXBvcnQgPSA8MT47CisJCQkJCWxpbmstaW50ZXJmYWNlCT0gPDQ+OworCQkJCX07CisJCQl9OworCisJCQlzZWNvbmRhcnktc2xhdmUtcG9ydHMgeworCQkJCXBvcnQtMiB7CisJCQkJCXNsYXZlLXBvcnQgPSA8Mj47CisJCQkJCWxpbmstaW50ZXJmYWNlCT0gPDI+OworCQkJCX07CisJCQkJcG9ydC0zIHsKKwkJCQkJc2xhdmUtcG9ydCA9IDwzPjsKKwkJCQkJbGluay1pbnRlcmZhY2UJPSA8Mj47CisJCQkJfTsKKwkJCX07CisJCX07CisJfTsKKworCW5ldGNwLWludGVyZmFjZXMgeworCQlpbnRlcmZhY2UtMCB7CisJCQlyeC1jaGFubmVsID0gPDIyPjsKKwkJCXJ4LXBvb2wgPSA8MTAyNCAxMj47CisJCQl0eC1wb29sID0gPDEwMjQgMTI+OworCQkJcngtcXVldWUtZGVwdGggPSA8MTI4IDEyOCAwIDA+OworCQkJcngtYnVmZmVyLXNpemUgPSA8MTUxOCA0MDk2IDAgMD47CisJCQlyeC1xdWV1ZSA9IDw4NzA0PjsKKwkJCXR4LWNvbXBsZXRpb24tcXVldWUgPSA8ODcwNj47CisJCQllZnVzZS1tYWMgPSA8MT47CisJCQluZXRjcC1nYmUgPSA8JmdiZTA+OworCisJCX07CisJCWludGVyZmFjZS0xIHsKKwkJCXJ4LWNoYW5uZWwgPSA8MjM+OworCQkJcngtcG9vbCA9IDwxMDI0IDEyPjsKKwkJCXR4LXBvb2wgPSA8MTAyNCAxMj47CisJCQlyeC1xdWV1ZS1kZXB0aCA9IDwxMjggMTI4IDAgMD47CisJCQlyeC1idWZmZXItc2l6ZSA9IDwxNTE4IDQwOTYgMCAwPjsKKwkJCXJ4LXF1ZXVlID0gPDg3MDU+OworCQkJdHgtY29tcGxldGlvbi1xdWV1ZSA9IDw4NzA3PjsKKwkJCWVmdXNlLW1hYyA9IDwwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAyIDE4IDMxIDdlIDNlIDZmXTsKKwkJCW5ldGNwLWdiZSA9IDwmZ2JlMT47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zdDIxbmZjYS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zdDIxbmZjYS50eHQKaW5kZXggZTRmYWEyZS4uN2JiMmUyMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc3QyMW5mY2EudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3N0MjFuZmNhLnR4dApAQCAtMSw3ICsxLDcgQEAKICogU1RNaWNyb2VsZWN0cm9uaWNzIFNBUy4gU1QyMU5GQ0EgTkZDIENvbnRyb2xsZXIKIAogUmVxdWlyZWQgcHJvcGVydGllczoKLS0gY29tcGF0aWJsZTogU2hvdWxkIGJlICJzdCxzdDIxbmZjYV9pMmMiLgorLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgInN0LHN0MjFuZmNhLWkyYyIuCiAtIGNsb2NrLWZyZXF1ZW5jeTogScKyQyB3b3JrIGZyZXF1ZW5jeS4KIC0gcmVnOiBhZGRyZXNzIG9uIHRoZSBidXMKIC0gaW50ZXJydXB0LXBhcmVudDogcGhhbmRsZSBmb3IgdGhlIGludGVycnVwdCBncGlvIGNvbnRyb2xsZXIKQEAgLTExLDYgKzExLDEwIEBACiBPcHRpb25hbCBTb0MgU3BlY2lmaWMgUHJvcGVydGllczoKIC0gcGluY3RybC1uYW1lczogQ29udGFpbnMgb25seSBvbmUgdmFsdWUgLSAiZGVmYXVsdCIuCiAtIHBpbnRjdHJsLTA6IFNwZWNpZmllcyB0aGUgcGluIGNvbnRyb2wgZ3JvdXBzIHVzZWQgZm9yIHRoaXMgY29udHJvbGxlci4KKy0gZXNlLXByZXNlbnQ6IFNwZWNpZmllcyB0aGF0IGFuIGVzZSBpcyBwaHlzaWNhbGx5IGNvbm5lY3RlZCB0byB0aGUgbmZjCitjb250cm9sbGVyLgorLSB1aWNjLXByZXNlbnQ6IFNwZWNpZmllcyB0aGF0IHRoZSB1aWNjIHN3cCBzaWduYWwgY2FuIGJlIHBoeXNpY2FsbHkKK2Nvbm5lY3RlZCB0byB0aGUgbmZjIGNvbnRyb2xsZXIuCiAKIEV4YW1wbGUgKGZvciBBUk0tYmFzZWQgQmVhZ2xlQm9hcmQgeE0gd2l0aCBTVDIxTkZDQSBvbiBJMkMyKToKIApAQCAtMjAsNyArMjQsNyBAQAogCiAJc3QyMW5mY2E6IHN0MjFuZmNhQDEgewogCi0JCWNvbXBhdGlibGUgPSAic3Qsc3QyMW5mY2FfaTJjIjsKKwkJY29tcGF0aWJsZSA9ICJzdCxzdDIxbmZjYS1pMmMiOwogCiAJCXJlZyA9IDwweDAxPjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CkBAIC0yOSw1ICszMyw4IEBACiAJCWludGVycnVwdHMgPSA8MiBJUlFfVFlQRV9MRVZFTF9MT1c+OwogCiAJCWVuYWJsZS1ncGlvcyA9IDwmZ3BpbzUgMjkgR1BJT19BQ1RJVkVfSElHSD47CisKKwkJZXNlLXByZXNlbnQ7CisJCXVpY2MtcHJlc2VudDsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3N0MjFuZmNiLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbmZjL3N0MjFuZmNiLnR4dAppbmRleCA5MDA1NjA4Li5iYjIzNzA3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L25mYy9zdDIxbmZjYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9uZmMvc3QyMW5mY2IudHh0CkBAIC0xLDcgKzEsNyBAQAogKiBTVE1pY3JvZWxlY3Ryb25pY3MgU0FTLiBTVDIxTkZDQiBORkMgQ29udHJvbGxlcgogCiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgotLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgInN0LHN0MjFuZmNiX2kyYyIuCistIGNvbXBhdGlibGU6IFNob3VsZCBiZSAic3Qsc3QyMW5mY2ItaTJjIi4KIC0gY2xvY2stZnJlcXVlbmN5OiBJwrJDIHdvcmsgZnJlcXVlbmN5LgogLSByZWc6IGFkZHJlc3Mgb24gdGhlIGJ1cwogLSBpbnRlcnJ1cHQtcGFyZW50OiBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGdwaW8gY29udHJvbGxlcgpAQCAtMjAsNyArMjAsNyBAQAogCiAJc3QyMW5mY2I6IHN0MjFuZmNiQDggewogCi0JCWNvbXBhdGlibGUgPSAic3Qsc3QyMW5mY2JfaTJjIjsKKwkJY29tcGF0aWJsZSA9ICJzdCxzdDIxbmZjYi1pMmMiOwogCiAJCXJlZyA9IDwweDA4PjsKIAkJY2xvY2stZnJlcXVlbmN5ID0gPDQwMDAwMD47CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcm9ja2NoaXAtZHdtYWMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZmQxOTkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3JvY2tjaGlwLWR3bWFjLnR4dApAQCAtMCwwICsxLDY4IEBACitSb2NrY2hpcCBTb0MgUkszMjg4IDEwLzEwMC8xMDAwIEV0aGVybmV0IGRyaXZlcihHTUFDKQorCitUaGUgZGV2aWNlIG5vZGUgaGFzIGZvbGxvd2luZyBwcm9wZXJ0aWVzLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorIC0gY29tcGF0aWJsZTogQ2FuIGJlICJyb2NrY2hpcCxyazMyODgtZ21hYyIuCisgLSByZWc6IGFkZHJlc3NlcyBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXRzIGZvciB0aGUgZGV2aWNlLgorIC0gaW50ZXJydXB0czogU2hvdWxkIGNvbnRhaW4gdGhlIEdNQUMgaW50ZXJydXB0cy4KKyAtIGludGVycnVwdC1uYW1lczogU2hvdWxkIGNvbnRhaW4gdGhlIGludGVycnVwdCBuYW1lcyAibWFjaXJxIi4KKyAtIHJvY2tjaGlwLGdyZjogcGhhbmRsZSB0byB0aGUgc3lzY29uIGdyZiB1c2VkIHRvIGNvbnRyb2wgc3BlZWQgYW5kIG1vZGUuCisgLSBjbG9ja3M6IDwmY3J1IFNDTEtfTUFDPjogY2xvY2sgc2VsZWN0b3IgZm9yIG1haW4gY2xvY2ssIGZyb20gUExMIG9yIFBIWS4KKwkgICA8JmNydSBTQ0xLX01BQ19QTEw+OiBQTEwgY2xvY2sgZm9yIFNDTEtfTUFDCisJICAgPCZjcnUgU0NMS19NQUNfUlg+OiBjbG9jayBnYXRlIGZvciBSWAorCSAgIDwmY3J1IFNDTEtfTUFDX1RYPjogY2xvY2sgZ2F0ZSBmb3IgVFgKKwkgICA8JmNydSBTQ0xLX01BQ1JFRj46IGNsb2NrIGdhdGUgZm9yIFJNSUkgcmVmZXJjZSBjbG9jaworCSAgIDwmY3J1IFNDTEtfTUFDUkVGX09VVD4gY2xvY2sgZ2F0ZSBmb3IgUk1JSSByZWZlcmVuY2UgY2xvY2sgb3V0cHV0CisJICAgPCZjcnUgQUNMS19HTUFDPjogQVhJIGNsb2NrIGdhdGUgZm9yIEdNQUMKKwkgICA8JmNydSBQQ0xLX0dNQUM+OiBBUEIgY2xvY2sgZ2F0ZSBmb3IgR01BQworIC0gY2xvY2stbmFtZXM6IE9uZSBuYW1lIGZvciBlYWNoIGVudHJ5IGluIHRoZSBjbG9ja3MgcHJvcGVydHkuCisgLSBwaHktbW9kZTogU2VlIGV0aGVybmV0LnR4dCBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAtIHBpbmN0cmwtbmFtZXM6IE5hbWVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG51bWJlcmVkIHBpbmN0cmwgc3RhdGVzLgorIC0gcGluY3RybC0wOiBwaW4tY29udHJvbCBtb2RlLiBjYW4gYmUgPCZyZ21paV9waW5zPiBvciA8JnJtaWlfcGlucz4uCisgLSBjbG9ja19pbl9vdXQ6IEZvciBSR01JSSwgaXQgbXVzdCBiZSAiaW5wdXQiLCBtZWFucyBtYWluIGNsb2NrKDEyNU1IeikKKyAgIGlzIG5vdCBzb3VyY2VkIGZyb20gU29DJ3MgUExMLCBidXQgaW5wdXQgZnJvbSBQSFk7IEZvciBSTUlJLCAiaW5wdXQiIG1lYW5zCisgICBQSFkgcHJvdmlkZXMgdGhlIHJlZmVyZW5jZSBjbG9jayg1ME1IeiksICJvdXRwdXQiIG1lYW5zIEdNQUMgcHJvdmlkZXMgdGhlCisgICByZWZlcmVuY2UgY2xvY2suCisgLSBzbnBzLHJlc2V0LWdwaW8gICAgICAgZ3BpbyBudW1iZXIgZm9yIHBoeSByZXNldC4KKyAtIHNucHMscmVzZXQtYWN0aXZlLWxvdyBib29sZWFuIGZsYWcgdG8gaW5kaWNhdGUgaWYgcGh5IHJlc2V0IGlzIGFjdGl2ZSBsb3cuCisgLSBhc3NpZ25lZC1jbG9ja3M6IG1haW4gY2xvY2ssIHNob3VsZCBiZSA8JmNydSBTQ0xLX01BQz47CisgLSBhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gcGFyZW50IG9mIG1haW4gY2xvY2suCisgICBjYW4gYmUgPCZleHRfZ21hYz4gb3IgPCZjcnUgU0NMS19NQUNfUExMPi4KKworT3B0aW9uYWwgcHJvcGVydGllczoKKyAtIHR4X2RlbGF5OiBEZWxheSB2YWx1ZSBmb3IgVFhEIHRpbWluZy4gUmFuZ2UgdmFsdWUgaXMgMH4weDdGLCAweDMwIGFzIGRlZmF1bHQuCisgLSByeF9kZWxheTogRGVsYXkgdmFsdWUgZm9yIFJYRCB0aW1pbmcuIFJhbmdlIHZhbHVlIGlzIDB+MHg3RiwgMHgxMCBhcyBkZWZhdWx0LgorIC0gcGh5LXN1cHBseTogcGhhbmRsZSB0byBhIHJlZ3VsYXRvciBpZiB0aGUgUEhZIG5lZWRzIG9uZQorCitFeGFtcGxlOgorCitnbWFjOiBldGhlcm5ldEBmZjI5MDAwMCB7CisJY29tcGF0aWJsZSA9ICJyb2NrY2hpcCxyazMyODgtZ21hYyI7CisJcmVnID0gPDB4ZmYyOTAwMDAgMHgxMDAwMD47CisJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCWludGVycnVwdC1uYW1lcyA9ICJtYWNpcnEiOworCXJvY2tjaGlwLGdyZiA9IDwmZ3JmPjsKKwljbG9ja3MgPSA8JmNydSBTQ0xLX01BQz4sCisJCTwmY3J1IFNDTEtfTUFDX1JYPiwgPCZjcnUgU0NMS19NQUNfVFg+LAorCQk8JmNydSBTQ0xLX01BQ1JFRj4sIDwmY3J1IFNDTEtfTUFDUkVGX09VVD4sCisJCTwmY3J1IEFDTEtfR01BQz4sIDwmY3J1IFBDTEtfR01BQz47CisJY2xvY2stbmFtZXMgPSAic3RtbWFjZXRoIiwKKwkJIm1hY19jbGtfcngiLCAibWFjX2Nsa190eCIsCisJCSJjbGtfbWFjX3JlZiIsICJjbGtfbWFjX3JlZm91dCIsCisJCSJhY2xrX21hYyIsICJwY2xrX21hYyI7CisJcGh5LW1vZGUgPSAicmdtaWkiOworCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CisJcGluY3RybC0wID0gPCZyZ21paV9waW5zIC8qJnJtaWlfcGlucyovPjsKKworCWNsb2NrX2luX291dCA9ICJpbnB1dCI7CisJc25wcyxyZXNldC1ncGlvID0gPCZncGlvNCA3IDA+OworCXNucHMscmVzZXQtYWN0aXZlLWxvdzsKKworCWFzc2lnbmVkLWNsb2NrcyA9IDwmY3J1IFNDTEtfTUFDPjsKKwlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZleHRfZ21hYz47CisJdHhfZGVsYXkgPSA8MHgzMD47CisJcnhfZGVsYXkgPSA8MHgxMD47CisKKwlzdGF0dXMgPSAib2siOworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvc3RpLWR3bWFjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvc3RpLWR3bWFjLnR4dAppbmRleCA2NzYyYTZiLi5kMDVjMWUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3N0aS1kd21hYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9zdGktZHdtYWMudHh0CkBAIC05LDE0ICs5LDEwIEBACiBSZXF1aXJlZCBwcm9wZXJ0aWVzOgogIC0gY29tcGF0aWJsZQk6IENhbiBiZSAic3Qsc3RpaDQxNS1kd21hYyIsICJzdCxzdGloNDE2LWR3bWFjIiwKICAgICJzdCxzdGloNDA3LWR3bWFjIiwgInN0LHN0aWQxMjctZHdtYWMiLgotIC0gcmVnIDogT2Zmc2V0IG9mIHRoZSBnbHVlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgbWFwIGluIHN5c3RlbQotICAgY29uZmlndXJhdGlvbiByZWdtYXAgcG9pbnRlZCBieSBzdCxzeXNjb24gcHJvcGVydHkgYW5kIHNpemUuCi0gLSBzdCxzeXNjb24gOiBTaG91bGQgYmUgcGhhbmRsZSB0byBzeXN0ZW0gY29uZmlndXJhdGlvbiBub2RlIHdoaWNoCi0gICBlbmNvbXBhc2VzIHRoaXMgZ2x1ZSByZWdpc3RlcnMuCisgLSBzdCxzeXNjb24gOiBTaG91bGQgYmUgcGhhbmRsZS9vZmZzZXQgcGFpci4gVGhlIHBoYW5kbGUgdG8gdGhlIHN5c2NvbiBub2RlIHdoaWNoCisgICBlbmNvbXBhc2VzIHRoZSBnbHVlIHJlZ2lzdGVyLCBhbmQgdGhlIG9mZnNldCBvZiB0aGUgY29udHJvbCByZWdpc3Rlci4KICAtIHN0LGdtYWNfZW46IHRoaXMgaXMgdG8gZW5hYmxlIHRoZSBnbWFjIGludG8gYSBkZWRpY2F0ZWQgc3lzY3RsIGNvbnRyb2wKICAgIHJlZ2lzdGVyIGF2YWlsYWJsZSBvbiBTVGlINDA3IFNvQy4KLSAtIHN0aS1ldGhjb25mOiB0aGlzIGlzIHRoZSBnbWFjIGdsdWUgbG9naWMgcmVnaXN0ZXIgdG8gZW5hYmxlIHRoZSBHTUFDLAotICAgc2VsZWN0IGFtb25nIHRoZSBkaWZmZXJlbnQgbW9kZXMgYW5kIHByb2dyYW0gdGhlIGNsayByZXRpbWluZy4KICAtIHBpbmN0cmwtMDogcGluLWNvbnRyb2wgZm9yIGFsbCB0aGUgTUlJIG1vZGUgc3VwcG9ydGVkLgogCiBPcHRpb25hbCBwcm9wZXJ0aWVzOgpAQCAtNDAsMTAgKzM2LDEwIEBACiAJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJc3RhdHVzID0gImRpc2FibGVkIjsKIAljb21wYXRpYmxlID0gInN0LHN0aWg0MDctZHdtYWMiLCAic25wcyxkd21hYyIsICJzbnBzLGR3bWFjLTMuNzEwIjsKLQlyZWcgPSA8MHg5NjMwMDAwIDB4ODAwMD4sIDwweDgwIDB4ND47Ci0JcmVnLW5hbWVzID0gInN0bW1hY2V0aCIsICJzdGktZXRoY29uZiI7CisJcmVnID0gPDB4OTYzMDAwMCAweDgwMDA+OworCXJlZy1uYW1lcyA9ICJzdG1tYWNldGgiOwogCi0Jc3Qsc3lzY29uID0gPCZzeXNjZmdfc2JjX3JlZz47CisJc3Qsc3lzY29uID0gPCZzeXNjZmdfc2JjX3JlZyAweDgwPjsKIAlzdCxnbWFjX2VuOwogCXJlc2V0cyA9IDwmc29mdHJlc2V0IFNUSUg0MDdfRVRIMV9TT0ZUUkVTRVQ+OwogCXJlc2V0LW5hbWVzID0gInN0bW1hY2V0aCI7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3N0bW1hYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3N0bW1hYy50eHQKaW5kZXggYzQxYWZkOS4uOGNhNjVjZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9zdG1tYWMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvc3RtbWFjLnR4dApAQCAtNDMsNiArNDMsNyBAQAogICBhdmFpbGFibGUgdGhpcyBjbG9jayBpcyB1c2VkIGZvciBwcm9ncmFtbWluZyB0aGUgVGltZXN0YW1wIEFkZGVuZCBSZWdpc3Rlci4KICAgSWYgbm90IHBhc3NlZCB0aGVuIHRoZSBzeXN0ZW0gY2xvY2sgd2lsbCBiZSB1c2VkIGFuZCB0aGlzIGlzIGZpbmUgb24gc29tZQogICBwbGF0Zm9ybXMuCistIHNucHMsYnVyc3RfbGVuOiBUaGUgQVhJIGJ1cnN0IGxlbnRoIHZhbHVlIG9mIHRoZSBBWEkgQlVTIE1PREUgcmVnaXN0ZXIuCiAKIEV4YW1wbGVzOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3Fjb20sYXRoMTBrLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2lyZWxlc3MvcWNvbSxhdGgxMGsudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZWZjMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpcmVsZXNzL3Fjb20sYXRoMTBrLnR4dApAQCAtMCwwICsxLDMwIEBACisqIFF1YWxjb21tIEF0aGVyb3MgYXRoMTBrIHdpcmVsZXNzIGRldmljZXMKKworRm9yIGF0aDEwayBkZXZpY2VzIHRoZSBjYWxpYnJhdGlvbiBkYXRhIGNhbiBiZSBwcm92aWRlZCB0aHJvdWdoIERldmljZQorVHJlZS4gVGhlIG5vZGUgaXMgYSBjaGlsZCBub2RlIG9mIHRoZSBQQ0kgY29udHJvbGxlci4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy1jb21wYXRpYmxlIDogU2hvdWxkIGJlICJxY29tLGF0aDEwayIKKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gcWNvbSxhdGgxMGstY2FsaWJyYXRpb24tZGF0YSA6IGNhbGlicmF0aW9uIGRhdGEgYXMgYW4gYXJyYXksIHRoZQorCQkJCSBsZW5ndGggY2FuIHZhcnkgYmV0d2VlbiBodyB2ZXJzaW9ucworCisKK0V4YW1wbGU6CisKK3BjaSB7CisJcGNpZUAwIHsKKwkJcmVnID0gPDAgMCAwIDAgMD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKworCQlhdGgxMGtAMCwwIHsKKwkJCXJlZyA9IDwwIDAgMCAwIDA+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXFjb20sYXRoMTBrLWNhbGlicmF0aW9uLWRhdGEgPSBbIDAxIDAyIDAzIC4uLiBdOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS92ZXJzYXRpbGUudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS92ZXJzYXRpbGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZDFlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL3ZlcnNhdGlsZS50eHQKQEAgLTAsMCArMSw1OSBAQAorKiBBUk0gVmVyc2F0aWxlIFBsYXRmb3JtIEJhc2Vib2FyZCBQQ0kgaW50ZXJmYWNlCisKK1BDSSBob3N0IGNvbnRyb2xsZXIgZm91bmQgb24gdGhlIEFSTSBWZXJzYXRpbGUgUEIgYm9hcmQncyBGUEdBLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBzaG91bGQgY29udGFpbiAiYXJtLHZlcnNhdGlsZS1wY2kiIHRvIGlkZW50aWZ5IHRoZSBWZXJzYXRpbGUgUENJCisgIGNvbnRyb2xsZXIuCistIHJlZzogYmFzZSBhZGRyZXNzZXMgYW5kIGxlbmd0aHMgb2YgdGhlIHBjaSBjb250cm9sbGVyLiBUaGVyZSBtdXN0IGJlIDMKKyAgZW50cmllczoKKwktIFZlcnNhdGlsZS1zcGVjaWZpYyByZWdpc3RlcnMKKwktIFNlbGYgQ29uZmlnIHNwYWNlCisJLSBDb25maWcgc3BhY2UKKy0gI2FkZHJlc3MtY2VsbHM6IHNldCB0byA8Mz4KKy0gI3NpemUtY2VsbHM6IHNldCB0byA8Mj4KKy0gZGV2aWNlX3R5cGU6IHNldCB0byAicGNpIgorLSBidXMtcmFuZ2U6IHNldCB0byA8MCAweGZmPgorLSByYW5nZXM6IHJhbmdlcyBmb3IgdGhlIFBDSSBtZW1vcnkgYW5kIEkvTyByZWdpb25zCistICNpbnRlcnJ1cHQtY2VsbHM6IHNldCB0byA8MT4KKy0gaW50ZXJydXB0LW1hcC1tYXNrIGFuZCBpbnRlcnJ1cHQtbWFwOiBzdGFuZGFyZCBQQ0kgcHJvcGVydGllcyB0byBkZWZpbmUKKwl0aGUgbWFwcGluZyBvZiB0aGUgUENJIGludGVyZmFjZSB0byBpbnRlcnJ1cHQgbnVtYmVycy4KKworRXhhbXBsZToKKworcGNpLWNvbnRyb2xsZXJAMTAwMDEwMDAgeworCWNvbXBhdGlibGUgPSAiYXJtLHZlcnNhdGlsZS1wY2kiOworCWRldmljZV90eXBlID0gInBjaSI7CisJcmVnID0gPDB4MTAwMDEwMDAgMHgxMDAwCisJICAgICAgIDB4NDEwMDAwMDAgMHgxMDAwMAorCSAgICAgICAweDQyMDAwMDAwIDB4MTAwMDAwPjsKKwlidXMtcmFuZ2UgPSA8MCAweGZmPjsKKwkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkjc2l6ZS1jZWxscyA9IDwyPjsKKwkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCisJcmFuZ2VzID0gPDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4NDMwMDAwMDAgMCAweDAwMDEwMDAwICAgLyogZG93bnN0cmVhbSBJL08gKi8KKwkJICAweDAyMDAwMDAwIDAgMHg1MDAwMDAwMCAweDUwMDAwMDAwIDAgMHgxMDAwMDAwMCAgIC8qIG5vbi1wcmVmZXRjaGFibGUgbWVtb3J5ICovCisJCSAgMHg0MjAwMDAwMCAwIDB4NjAwMDAwMDAgMHg2MDAwMDAwMCAwIDB4MTAwMDAwMDA+OyAvKiBwcmVmZXRjaGFibGUgbWVtb3J5ICovCisKKwlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHgxODAwIDAgMCA3PjsKKwlpbnRlcnJ1cHQtbWFwID0gPDB4MTgwMCAwIDAgMSAmc2ljIDI4CisJCQkgMHgxODAwIDAgMCAyICZzaWMgMjkKKwkJCSAweDE4MDAgMCAwIDMgJnNpYyAzMAorCQkJIDB4MTgwMCAwIDAgNCAmc2ljIDI3CisKKwkJCSAweDEwMDAgMCAwIDEgJnNpYyAyNworCQkJIDB4MTAwMCAwIDAgMiAmc2ljIDI4CisJCQkgMHgxMDAwIDAgMCAzICZzaWMgMjkKKwkJCSAweDEwMDAgMCAwIDQgJnNpYyAzMAorCisJCQkgMHgwODAwIDAgMCAxICZzaWMgMzAKKwkJCSAweDA4MDAgMCAwIDIgJnNpYyAyNworCQkJIDB4MDgwMCAwIDAgMyAmc2ljIDI4CisJCQkgMHgwODAwIDAgMCA0ICZzaWMgMjkKKworCQkJIDB4MDAwMCAwIDAgMSAmc2ljIDI5CisJCQkgMHgwMDAwIDAgMCAyICZzaWMgMzAKKwkJCSAweDAwMDAgMCAwIDMgJnNpYyAyNworCQkJIDB4MDAwMCAwIDAgNCAmc2ljIDI4PjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1taXBoeTM2NXgudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktbWlwaHkzNjV4LnR4dAppbmRleCA0MmM4ODA4Li45ODAyZDVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1taXBoeTM2NXgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LW1pcGh5MzY1eC50eHQKQEAgLTYsOCArNiwxMCBAQAogCiBSZXF1aXJlZCBwcm9wZXJ0aWVzIChjb250cm9sbGVyIChwYXJlbnQpIG5vZGUpOgogLSBjb21wYXRpYmxlICAgIDogU2hvdWxkIGJlICJzdCxtaXBoeTM2NXgtcGh5IgotLSBzdCxzeXNjZmcgICAgIDogU2hvdWxkIGJlIGEgcGhhbmRsZSBvZiB0aGUgc3lzdGVtIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgZ3JvdXAKLQkJICB3aGljaCBjb250YWluIHRoZSBTQVRBLCBQQ0llIG1vZGUgc2V0dGluZyBiaXRzCistIHN0LHN5c2NmZyAgICAgOiBQaGFuZGxlIC8gaW50ZWdlciBhcnJheSBwcm9wZXJ0eS4gUGhhbmRsZSBvZiBzeXNjb25maWcgZ3JvdXAKKwkJICBjb250YWluaW5nIHRoZSBtaXBoeSByZWdpc3RlcnMgYW5kIGludGVnZXIgYXJyYXkgc2hvdWxkIGNvbnRhaW4KKwkJICBhbiBlbnRyeSBmb3IgZWFjaCBwb3J0IHN1Yi1ub2RlLCBzcGVjaWZ5aW5nIHRoZSBjb250cm9sCisJCSAgcmVnaXN0ZXIgb2Zmc2V0IGluc2lkZSB0aGUgc3lzY29uZmlnIGdyb3VwLgogCiBSZXF1aXJlZCBub2Rlcwk6ICBBIHN1Yi1ub2RlIGlzIHJlcXVpcmVkIGZvciBlYWNoIGNoYW5uZWwgdGhlIGNvbnRyb2xsZXIKIAkJICAgcHJvdmlkZXMuIEFkZHJlc3MgcmFuZ2UgaW5mb3JtYXRpb24gaW5jbHVkaW5nIHRoZSB1c3VhbApAQCAtMjYsNyArMjgsNiBAQAogCQkgIHJlZ2lzdGVycyBmaWxsZWQgaW4gInJlZyI6CiAJCQktIHNhdGE6ICAgRm9yIFNBVEEgZGV2aWNlcwogCQkJLSBwY2llOiAgIEZvciBQQ0llIGRldmljZXMKLQkJCS0gc3lzY2ZnOiBUbyBzcGVjaWZ5IHRoZSBzeXNjZmcgYmFzZWQgY29uZmlnIHJlZ2lzdGVyCiAKIE9wdGlvbmFsIHByb3BlcnRpZXMgKHBvcnQgKGNoaWxkKSBub2RlKToKIC0gc3Qsc2F0YS1nZW4JICAgICA6CUdlbmVyYXRpb24gb2YgbG9jYWxseSBhdHRhY2hlZCBTQVRBIElQLiBFeHBlY3RlZCB2YWx1ZXMKQEAgLTM5LDIwICs0MCwyMCBAQAogCiAJbWlwaHkzNjV4X3BoeTogbWlwaHkzNjV4QGZlMzgyMDAwIHsKIAkJY29tcGF0aWJsZSAgICAgID0gInN0LG1pcGh5MzY1eC1waHkiOwotCQlzdCxzeXNjZmcgIAk9IDwmc3lzY2ZnX3JlYXI+OworCQlzdCxzeXNjZmcgIAk9IDwmc3lzY2ZnX3JlYXIgMHg4MjQgMHg4Mjg+OwogCQkjYWRkcmVzcy1jZWxscwk9IDwxPjsKIAkJI3NpemUtY2VsbHMJPSA8MT47CiAJCXJhbmdlczsKIAogCQlwaHlfcG9ydDA6IHBvcnRAZmUzODIwMDAgewotCQkJcmVnID0gPDB4ZmUzODIwMDAgMHgxMDA+LCA8MHhmZTM5NDAwMCAweDEwMD4sIDwweDgyNCAweDQ+OwotCQkJcmVnLW5hbWVzID0gInNhdGEiLCAicGNpZSIsICJzeXNjZmciOworCQkJcmVnID0gPDB4ZmUzODIwMDAgMHgxMDA+LCA8MHhmZTM5NDAwMCAweDEwMD47CisJCQlyZWctbmFtZXMgPSAic2F0YSIsICJwY2llIjsKIAkJCSNwaHktY2VsbHMgPSA8MT47CiAJCQlzdCxzYXRhLWdlbiA9IDwzPjsKIAkJfTsKIAogCQlwaHlfcG9ydDE6IHBvcnRAZmUzOGEwMDAgewotCQkJcmVnID0gPDB4ZmUzOGEwMDAgMHgxMDA+LCA8MHhmZTgwNDAwMCAweDEwMD4sIDwweDgyOCAweDQ+OzsKKwkJCXJlZyA9IDwweGZlMzhhMDAwIDB4MTAwPiwgPDB4ZmU4MDQwMDAgMHgxMDA+OzsKIAkJCXJlZy1uYW1lcyA9ICJzYXRhIiwgInBjaWUiLCAic3lzY2ZnIjsKIAkJCSNwaHktY2VsbHMgPSA8MT47CiAJCQlzdCxwY2llLXR4LXBvbC1pbnY7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1zdGloNDA3LXVzYi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGh5L3BoeS1zdGloNDA3LXVzYi50eHQKaW5kZXggMWVmODIyOC4uZGU2YTcwNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BoeS9waHktc3RpaDQwNy11c2IudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waHkvcGh5LXN0aWg0MDctdXNiLnR4dApAQCAtNSwxMCArNSw3IEBACiAKIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAtIGNvbXBhdGlibGUJCTogc2hvdWxkIGJlICJzdCxzdGloNDA3LXVzYjItcGh5IgotLSByZWcJCQk6IGNvbnRhaW4gdGhlIG9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSBzeXN0ZW0gY29uZmlndXJhdGlvbiByZWdpc3RlcnMKLQkJCSAgdXNlZCBhcyBnbHVlIGxvZ2ljIHRvIGNvbnRyb2wgJiBwYXJhbWV0ZXIgcGh5Ci0tIHJlZy1uYW1lcwkJOiB0aGUgbmFtZXMgb2YgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBpbiAicmVnIiwgc2hvdWxkIGJlICJwYXJhbSIgYW5kICJyZWciCi0tIHN0LHN5c2NmZwkJOiBzeXNjb25maWcgcmVnaXN0ZXIgdG8gbWFuYWdlIHBoeSBwYXJhbWV0ZXIgYXQgZHJpdmVyIGxldmVsCistIHN0LHN5c2NmZwkJOiBwaGFuZGxlIG9mIHN5c2NvbmZpZyBiYW5rIHBsdXMgaW50ZWdlciBhcnJheSBjb250YWluaW5nIHBoeXBhcmFtIGFuZCBwaHljdHJsIHJlZ2lzdGVyIG9mZnNldHMKIC0gcmVzZXRzCQk6IGxpc3Qgb2YgcGhhbmRsZSBhbmQgcmVzZXQgc3BlY2lmaWVyIHBhaXJzLiBUaGVyZSBzaG91bGQgYmUgdHdvIGVudHJpZXMsIG9uZQogCQkJICBmb3IgdGhlIHdob2xlIHBoeSBhbmQgb25lIGZvciB0aGUgcG9ydAogLSByZXNldC1uYW1lcwkJOiBsaXN0IG9mIHJlc2V0IHNpZ25hbCBuYW1lcy4gU2hvdWxkIGJlICJnbG9iYWwiIGFuZCAicG9ydCIKQEAgLTE5LDExICsxNiw4IEBACiAKIHVzYjJfcGljb3BoeTA6IHVzYnBpY29waHlAZjggewogCWNvbXBhdGlibGUJPSAic3Qsc3RpaDQwNy11c2IyLXBoeSI7Ci0JcmVnCQk9IDwweGY4IDB4MDQ+LAkvKiBzeXNjZmcgNTA2MiAqLwotCQkJICA8MHhmNCAweDA0PjsJLyogc3lzY2ZnIDUwNjEgKi8KLQlyZWctbmFtZXMJPSAicGFyYW0iLCAiY3RybCI7CiAJI3BoeS1jZWxscwk9IDwwPjsKLQlzdCxzeXNjZmcJPSA8JnN5c2NmZ19jb3JlPjsKKwlzdCxzeXNjZmcJPSA8JnN5c2NmZ19jb3JlIDB4MTAwIDB4ZjQ+OwogCXJlc2V0cwkJPSA8JnNvZnRyZXNldCBTVElINDA3X1BJQ09QSFlfU09GVFJFU0VUPiwKIAkJCSAgPCZwaWNvcGh5cmVzZXQgU1RJSDQwN19QSUNPUEhZMF9SRVNFVD47CiAJcmVzZXQtbmFtZXMJPSAiZ2xvYmFsIiwgInBvcnQiOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvYWxsd2lubmVyLHN1bnhpLXBpbmN0cmwudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvYWxsd2lubmVyLHN1bnhpLXBpbmN0cmwudHh0CmluZGV4IDkzY2UxMmUuLmZkZDgwNDYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL2FsbHdpbm5lcixzdW54aS1waW5jdHJsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9hbGx3aW5uZXIsc3VueGktcGluY3RybC50eHQKQEAgLTExLDYgKzExLDcgQEAKICAgImFsbHdpbm5lcixzdW41aS1hMTBzLXBpbmN0cmwiCiAgICJhbGx3aW5uZXIsc3VuNWktYTEzLXBpbmN0cmwiCiAgICJhbGx3aW5uZXIsc3VuNmktYTMxLXBpbmN0cmwiCisgICJhbGx3aW5uZXIsc3VuNmktYTMxcy1waW5jdHJsIgogICAiYWxsd2lubmVyLHN1bjZpLWEzMS1yLXBpbmN0cmwiCiAgICJhbGx3aW5uZXIsc3VuN2ktYTIwLXBpbmN0cmwiCiAgICJhbGx3aW5uZXIsc3VuOGktYTIzLXBpbmN0cmwiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9xY29tLG1zbTg5MTYtcGluY3RybC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9xY29tLG1zbTg5MTYtcGluY3RybC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk4Y2FmZgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3Fjb20sbXNtODkxNi1waW5jdHJsLnR4dApAQCAtMCwwICsxLDE4NiBAQAorUXVhbGNvbW0gTVNNODkxNiBUTE1NIGJsb2NrCisKK1RoaXMgYmluZGluZyBkZXNjcmliZXMgdGhlIFRvcCBMZXZlbCBNb2RlIE11bHRpcGxleGVyIGJsb2NrIGZvdW5kIGluIHRoZQorTVNNODkxNiBwbGF0Zm9ybS4KKworLSBjb21wYXRpYmxlOgorCVVzYWdlOiByZXF1aXJlZAorCVZhbHVlIHR5cGU6IDxzdHJpbmc+CisJRGVmaW5pdGlvbjogbXVzdCBiZSAicWNvbSxtc204OTE2LXBpbmN0cmwiCisKKy0gcmVnOgorCVVzYWdlOiByZXF1aXJlZAorCVZhbHVlIHR5cGU6IDxwcm9wLWVuY29kZWQtYXJyYXk+CisJRGVmaW5pdGlvbjogdGhlIGJhc2UgYWRkcmVzcyBhbmQgc2l6ZSBvZiB0aGUgVExNTSByZWdpc3RlciBzcGFjZS4KKworLSBpbnRlcnJ1cHRzOgorCVVzYWdlOiByZXF1aXJlZAorCVZhbHVlIHR5cGU6IDxwcm9wLWVuY29kZWQtYXJyYXk+CisJRGVmaW5pdGlvbjogc2hvdWxkIHNwZWNpZnkgdGhlIFRMTU0gc3VtbWFyeSBJUlEuCisKKy0gaW50ZXJydXB0LWNvbnRyb2xsZXI6CisJVXNhZ2U6IHJlcXVpcmVkCisJVmFsdWUgdHlwZTogPG5vbmU+CisJRGVmaW5pdGlvbjogaWRlbnRpZmllcyB0aGlzIG5vZGUgYXMgYW4gaW50ZXJydXB0IGNvbnRyb2xsZXIKKworLSAjaW50ZXJydXB0LWNlbGxzOgorCVVzYWdlOiByZXF1aXJlZAorCVZhbHVlIHR5cGU6IDx1MzI+CisJRGVmaW5pdGlvbjogbXVzdCBiZSAyLiBTcGVjaWZ5aW5nIHRoZSBwaW4gbnVtYmVyIGFuZCBmbGFncywgYXMgZGVmaW5lZAorCQkgICAgaW4gPGR0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oPgorCistIGdwaW8tY29udHJvbGxlcjoKKwlVc2FnZTogcmVxdWlyZWQKKwlWYWx1ZSB0eXBlOiA8bm9uZT4KKwlEZWZpbml0aW9uOiBpZGVudGlmaWVzIHRoaXMgbm9kZSBhcyBhIGdwaW8gY29udHJvbGxlcgorCistICNncGlvLWNlbGxzOgorCVVzYWdlOiByZXF1aXJlZAorCVZhbHVlIHR5cGU6IDx1MzI+CisJRGVmaW5pdGlvbjogbXVzdCBiZSAyLiBTcGVjaWZ5aW5nIHRoZSBwaW4gbnVtYmVyIGFuZCBmbGFncywgYXMgZGVmaW5lZAorCQkgICAgaW4gPGR0LWJpbmRpbmdzL2dwaW8vZ3Bpby5oPgorCitQbGVhc2UgcmVmZXIgdG8gLi4vZ3Bpby9ncGlvLnR4dCBhbmQgLi4vaW50ZXJydXB0LWNvbnRyb2xsZXIvaW50ZXJydXB0cy50eHQgZm9yCithIGdlbmVyYWwgZGVzY3JpcHRpb24gb2YgR1BJTyBhbmQgaW50ZXJydXB0IGJpbmRpbmdzLgorCitQbGVhc2UgcmVmZXIgdG8gcGluY3RybC1iaW5kaW5ncy50eHQgaW4gdGhpcyBkaXJlY3RvcnkgZm9yIGRldGFpbHMgb2YgdGhlCitjb21tb24gcGluY3RybCBiaW5kaW5ncyB1c2VkIGJ5IGNsaWVudCBkZXZpY2VzLCBpbmNsdWRpbmcgdGhlIG1lYW5pbmcgb2YgdGhlCitwaHJhc2UgInBpbiBjb25maWd1cmF0aW9uIG5vZGUiLgorCitUaGUgcGluIGNvbmZpZ3VyYXRpb24gbm9kZXMgYWN0IGFzIGEgY29udGFpbmVyIGZvciBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mCitzdWJub2Rlcy4gRWFjaCBvZiB0aGVzZSBzdWJub2RlcyByZXByZXNlbnRzIHNvbWUgZGVzaXJlZCBjb25maWd1cmF0aW9uIGZvciBhCitwaW4sIGEgZ3JvdXAsIG9yIGEgbGlzdCBvZiBwaW5zIG9yIGdyb3Vwcy4gVGhpcyBjb25maWd1cmF0aW9uIGNhbiBpbmNsdWRlIHRoZQorbXV4IGZ1bmN0aW9uIHRvIHNlbGVjdCBvbiB0aG9zZSBwaW4ocykvZ3JvdXAocyksIGFuZCB2YXJpb3VzIHBpbiBjb25maWd1cmF0aW9uCitwYXJhbWV0ZXJzLCBzdWNoIGFzIHB1bGwtdXAsIGRyaXZlIHN0cmVuZ3RoLCBldGMuCisKKworUElOIENPTkZJR1VSQVRJT04gTk9ERVM6CisKK1RoZSBuYW1lIG9mIGVhY2ggc3Vibm9kZSBpcyBub3QgaW1wb3J0YW50OyBhbGwgc3Vibm9kZXMgc2hvdWxkIGJlIGVudW1lcmF0ZWQKK2FuZCBwcm9jZXNzZWQgcHVyZWx5IGJhc2VkIG9uIHRoZWlyIGNvbnRlbnQuCisKK0VhY2ggc3Vibm9kZSBvbmx5IGFmZmVjdHMgdGhvc2UgcGFyYW1ldGVycyB0aGF0IGFyZSBleHBsaWNpdGx5IGxpc3RlZC4gSW4KK290aGVyIHdvcmRzLCBhIHN1Ym5vZGUgdGhhdCBsaXN0cyBhIG11eCBmdW5jdGlvbiBidXQgbm8gcGluIGNvbmZpZ3VyYXRpb24KK3BhcmFtZXRlcnMgaW1wbGllcyBubyBpbmZvcm1hdGlvbiBhYm91dCBhbnkgcGluIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KK1NpbWlsYXJseSwgYSBwaW4gc3Vibm9kZSB0aGF0IGRlc2NyaWJlcyBhIHB1bGx1cCBwYXJhbWV0ZXIgaW1wbGllcyBubworaW5mb3JtYXRpb24gYWJvdXQgZS5nLiB0aGUgbXV4IGZ1bmN0aW9uLgorCisKK1RoZSBmb2xsb3dpbmcgZ2VuZXJpYyBwcm9wZXJ0aWVzIGFzIGRlZmluZWQgaW4gcGluY3RybC1iaW5kaW5ncy50eHQgYXJlIHZhbGlkCit0byBzcGVjaWZ5IGluIGEgcGluIGNvbmZpZ3VyYXRpb24gc3Vibm9kZToKKworLSBwaW5zOgorCVVzYWdlOiByZXF1aXJlZAorCVZhbHVlIHR5cGU6IDxzdHJpbmctYXJyYXk+CisJRGVmaW5pdGlvbjogTGlzdCBvZiBncGlvIHBpbnMgYWZmZWN0ZWQgYnkgdGhlIHByb3BlcnRpZXMgc3BlY2lmaWVkIGluCisJCSAgICB0aGlzIHN1Ym5vZGUuICBWYWxpZCBwaW5zIGFyZToKKwkJICAgIGdwaW8wLWdwaW8xMjEsCisJCSAgICBzZGMxX2NsaywKKwkJICAgIHNkYzFfY21kLAorCQkgICAgc2RjMV9kYXRhCisJCSAgICBzZGMyX2NsaywKKwkJICAgIHNkYzJfY21kLAorCQkgICAgc2RjMl9kYXRhLAorCQkgICAgcWRzZF9jbWQsCisJCSAgICBxZHNkX2RhdGEwLAorCQkgICAgcWRzZF9kYXRhMSwKKwkJICAgIHFkc2RfZGF0YTIsCisJCSAgICBxZHNkX2RhdGEzCisKKy0gZnVuY3Rpb246CisJVXNhZ2U6IHJlcXVpcmVkCisJVmFsdWUgdHlwZTogPHN0cmluZz4KKwlEZWZpbml0aW9uOiBTcGVjaWZ5IHRoZSBhbHRlcm5hdGl2ZSBmdW5jdGlvbiB0byBiZSBjb25maWd1cmVkIGZvciB0aGUKKwkJICAgIHNwZWNpZmllZCBwaW5zLiBGdW5jdGlvbnMgYXJlIG9ubHkgdmFsaWQgZm9yIGdwaW8gcGlucy4KKwkJICAgIFZhbGlkIHZhbHVlcyBhcmU6CisJYWRzcF9leHQsIGFsc3BfaW50LCBhdGVzdF9iYnJ4MCwgYXRlc3RfYmJyeDEsIGF0ZXN0X2NoYXIsIGF0ZXN0X2NoYXIwLAorCWF0ZXN0X2NoYXIxLCBhdGVzdF9jaGFyMiwgYXRlc3RfY2hhcjMsIGF0ZXN0X2NvbWJvZGFjLCBhdGVzdF9ncHNhZGMwLAorCWF0ZXN0X2dwc2FkYzEsIGF0ZXN0X3RzZW5zLCBhdGVzdF93bGFuMCwgYXRlc3Rfd2xhbjEsIGJhY2tsaWdodF9lbiwKKwliaW1jX2R0ZTAsYmltY19kdGUxLCBibHNwX2kyYzEsIGJsc3BfaTJjMiwgYmxzcF9pMmMzLCBibHNwX2kyYzQsCisJYmxzcF9pMmM1LCBibHNwX2kyYzYsIGJsc3Bfc3BpMSwgYmxzcF9zcGkxX2NzMSwgYmxzcF9zcGkxX2NzMiwKKwlibHNwX3NwaTFfY3MzLCBibHNwX3NwaTIsIGJsc3Bfc3BpMl9jczEsIGJsc3Bfc3BpMl9jczIsIGJsc3Bfc3BpMl9jczMsCisJYmxzcF9zcGkzLCBibHNwX3NwaTNfY3MxLCBibHNwX3NwaTNfY3MyLCBibHNwX3NwaTNfY3MzLCBibHNwX3NwaTQsCisJYmxzcF9zcGk1LCBibHNwX3NwaTYsIGJsc3BfdWFydDEsIGJsc3BfdWFydDIsIGJsc3BfdWltMSwgYmxzcF91aW0yLAorCWNhbTFfcnN0LCBjYW0xX3N0YW5kYnksIGNhbV9tY2xrMCwgY2FtX21jbGsxLCBjY2lfYXN5bmMsIGNjaV9pMmMsCisJY2NpX3RpbWVyMCwgY2NpX3RpbWVyMSwgY2NpX3RpbWVyMiwgY2RjX3BkbTAsIGNvZGVjX21hZCwgZGJnX291dCwKKwlkaXNwbGF5XzV2LCBkbWljMF9jbGssIGRtaWMwX2RhdGEsIGRzaV9yc3QsIGViaTBfd3JjZGMsIGV1cm9fdXMsCisJZXh0X2xwYXNzLCBmbGFzaF9zdHJvYmUsIGdjY19ncDFfY2xrX2EsIGdjY19ncDFfY2xrX2IsIGdjY19ncDJfY2xrX2EsCisJZ2NjX2dwMl9jbGtfYiwgZ2NjX2dwM19jbGtfYSwgZ2NjX2dwM19jbGtfYiwgZ3BpbywgZ3NtMF90eDAsIGdzbTBfdHgxLAorCWdzbTFfdHgwLCBnc20xX3R4MSwgZ3lyb19hY2NsLCBrcHNuczAsIGtwc25zMSwga3BzbnMyLCBsZG9fZW4sCisJbGRvX3VwZGF0ZSwgbWFnX2ludCwgbWRwX3ZzeW5jLCBtb2RlbV90c3luYywgbV92b2MsIG5hdl9wcHMsIG5hdl90c3luYywKKwlwYV9pbmRpY2F0b3IsIHBiczAsIHBiczEsIHBiczIsIHByaV9taTJzLCBwcmlfbWkyc193cywgcHJuZ19yb3NjLAorCXB3cl9jcnlwdG9fZW5hYmxlZF9hLCBwd3JfY3J5cHRvX2VuYWJsZWRfYiwgcHdyX21vZGVtX2VuYWJsZWRfYSwKKwlwd3JfbW9kZW1fZW5hYmxlZF9iLCBwd3JfbmF2X2VuYWJsZWRfYSwgcHdyX25hdl9lbmFibGVkX2IsCisJcWRzc19jdGl0cmlnX2luX2EwLCBxZHNzX2N0aXRyaWdfaW5fYTEsIHFkc3NfY3RpdHJpZ19pbl9iMCwKKwlxZHNzX2N0aXRyaWdfaW5fYjEsIHFkc3NfY3RpdHJpZ19vdXRfYTAsIHFkc3NfY3RpdHJpZ19vdXRfYTEsCisJcWRzc19jdGl0cmlnX291dF9iMCwgcWRzc19jdGl0cmlnX291dF9iMSwgcWRzc190cmFjZWNsa19hLAorCXFkc3NfdHJhY2VjbGtfYiwgcWRzc190cmFjZWN0bF9hLCBxZHNzX3RyYWNlY3RsX2IsIHFkc3NfdHJhY2VkYXRhX2EsCisJcWRzc190cmFjZWRhdGFfYiwgcmVzZXRfbiwgc2RfY2FyZCwgc2Rfd3JpdGUsIHNlY19taTJzLCBzbWJfaW50LAorCXNzYmlfd3RyMCwgc3NiaV93dHIxLCB1aW0xLCB1aW0yLCB1aW0zLCB1aW1fYmF0dCwgd2Nzc19idCwgd2Nzc19mbSwKKwl3Y3NzX3dsYW4sIHdlYmNhbTFfcnN0CisKKy0gYmlhcy1kaXNhYmxlOgorCVVzYWdlOiBvcHRpb25hbAorCVZhbHVlIHR5cGU6IDxub25lPgorCURlZmluaXRpb246IFRoZSBzcGVjaWZpZWQgcGlucyBzaG91bGQgYmUgY29uZmlndWVkIGFzIG5vIHB1bGwuCisKKy0gYmlhcy1wdWxsLWRvd246CisJVXNhZ2U6IG9wdGlvbmFsCisJVmFsdWUgdHlwZTogPG5vbmU+CisJRGVmaW5pdGlvbjogVGhlIHNwZWNpZmllZCBwaW5zIHNob3VsZCBiZSBjb25maWd1ZWQgYXMgcHVsbCBkb3duLgorCistIGJpYXMtcHVsbC11cDoKKwlVc2FnZTogb3B0aW9uYWwKKwlWYWx1ZSB0eXBlOiA8bm9uZT4KKwlEZWZpbml0aW9uOiBUaGUgc3BlY2lmaWVkIHBpbnMgc2hvdWxkIGJlIGNvbmZpZ3VlZCBhcyBwdWxsIHVwLgorCistIG91dHB1dC1oaWdoOgorCVVzYWdlOiBvcHRpb25hbAorCVZhbHVlIHR5cGU6IDxub25lPgorCURlZmluaXRpb246IFRoZSBzcGVjaWZpZWQgcGlucyBhcmUgY29uZmlndXJlZCBpbiBvdXRwdXQgbW9kZSwgZHJpdmVuCisJCSAgICBoaWdoLgorCQkgICAgTm90IHZhbGlkIGZvciBzZGMgcGlucy4KKworLSBvdXRwdXQtbG93OgorCVVzYWdlOiBvcHRpb25hbAorCVZhbHVlIHR5cGU6IDxub25lPgorCURlZmluaXRpb246IFRoZSBzcGVjaWZpZWQgcGlucyBhcmUgY29uZmlndXJlZCBpbiBvdXRwdXQgbW9kZSwgZHJpdmVuCisJCSAgICBsb3cuCisJCSAgICBOb3QgdmFsaWQgZm9yIHNkYyBwaW5zLgorCistIGRyaXZlLXN0cmVuZ3RoOgorCVVzYWdlOiBvcHRpb25hbAorCVZhbHVlIHR5cGU6IDx1MzI+CisJRGVmaW5pdGlvbjogU2VsZWN0cyB0aGUgZHJpdmUgc3RyZW5ndGggZm9yIHRoZSBzcGVjaWZpZWQgcGlucywgaW4gbUEuCisJCSAgICBWYWxpZCB2YWx1ZXMgYXJlOiAyLCA0LCA2LCA4LCAxMCwgMTIsIDE0IGFuZCAxNgorCitFeGFtcGxlOgorCisJdGxtbTogcGluY3RybEAxMDAwMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJxY29tLG1zbTg5MTYtcGluY3RybCI7CisJCXJlZyA9IDwweDEwMDAwMDAgMHgzMDAwMDA+OworCQlpbnRlcnJ1cHRzID0gPDAgMjA4IDA+OworCQlncGlvLWNvbnRyb2xsZXI7CisJCSNncGlvLWNlbGxzID0gPDI+OworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKworCQl1YXJ0MjogdWFydDItZGVmYXVsdCB7CisJCQltdXggeworCQkJCXBpbnMgPSAiZ3BpbzQiLCAiZ3BpbzUiOworCQkJCWZ1bmN0aW9uID0gImJsc3BfdWFydDIiOworCQkJfTsKKworCQkJdHggeworCQkJCXBpbnMgPSAiZ3BpbzQiOworCQkJCWRyaXZlLXN0cmVuZ3RoID0gPDQ+OworCQkJCWJpYXMtZGlzYWJsZTsKKwkJCX07CisKKwkJCXJ4IHsKKwkJCQlwaW5zID0gImdwaW81IjsKKwkJCQlkcml2ZS1zdHJlbmd0aCA9IDwyPjsKKwkJCQliaWFzLXB1bGwtdXA7CisJCQl9OworCQl9OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9yZW5lc2FzLHBmYy1waW5jdHJsLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3JlbmVzYXMscGZjLXBpbmN0cmwudHh0CmluZGV4IGRhZWY2ZmEuLmJmZTcyZWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3JlbmVzYXMscGZjLXBpbmN0cmwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3JlbmVzYXMscGZjLXBpbmN0cmwudHh0CkBAIC0xLDcgKzEsNyBAQAogKiBSZW5lc2FzIFBpbiBGdW5jdGlvbiBDb250cm9sbGVyIChHUElPIGFuZCBQaW4gTXV4L0NvbmZpZykKIAotVGhlIFBpbiBGdW5jdGlvbiBDb250cm9sbGVyIChQRkMpIGlzIGEgUGluIE11eC9Db25maWcgY29udHJvbGxlci4gT24gU0g3MzcyLAotU0g3M0EwLCBSOEE3M0E0IGFuZCBSOEE3NzQwIGl0IGFsc28gYWN0cyBhcyBhIEdQSU8gY29udHJvbGxlci4KK1RoZSBQaW4gRnVuY3Rpb24gQ29udHJvbGxlciAoUEZDKSBpcyBhIFBpbiBNdXgvQ29uZmlnIGNvbnRyb2xsZXIuIE9uIFNINzNBMCwKK1I4QTczQTQgYW5kIFI4QTc3NDAgaXQgYWxzbyBhY3RzIGFzIGEgR1BJTyBjb250cm9sbGVyLgogCiAKIFBpbiBDb250cm9sCkBAIC0xMCwxMyArMTAsMTMgQEAKIFJlcXVpcmVkIFByb3BlcnRpZXM6CiAKICAgLSBjb21wYXRpYmxlOiBzaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcuCisgICAgLSAicmVuZXNhcyxwZmMtZW1ldjIiOiBmb3IgRU1FVjIgKEVNTUEgTW9iaWxlIEVWMikgY29tcGF0aWJsZSBwaW4tY29udHJvbGxlci4KICAgICAtICJyZW5lc2FzLHBmYy1yOGE3M2E0IjogZm9yIFI4QTczQTQgKFItTW9iaWxlIEFQRTYpIGNvbXBhdGlibGUgcGluLWNvbnRyb2xsZXIuCiAgICAgLSAicmVuZXNhcyxwZmMtcjhhNzc0MCI6IGZvciBSOEE3NzQwIChSLU1vYmlsZSBBMSkgY29tcGF0aWJsZSBwaW4tY29udHJvbGxlci4KICAgICAtICJyZW5lc2FzLHBmYy1yOGE3Nzc4IjogZm9yIFI4QTc3NzggKFItTW9iaWxlIE0xKSBjb21wYXRpYmxlIHBpbi1jb250cm9sbGVyLgogICAgIC0gInJlbmVzYXMscGZjLXI4YTc3NzkiOiBmb3IgUjhBNzc3OSAoUi1DYXIgSDEpIGNvbXBhdGlibGUgcGluLWNvbnRyb2xsZXIuCiAgICAgLSAicmVuZXNhcyxwZmMtcjhhNzc5MCI6IGZvciBSOEE3NzkwIChSLUNhciBIMikgY29tcGF0aWJsZSBwaW4tY29udHJvbGxlci4KICAgICAtICJyZW5lc2FzLHBmYy1yOGE3NzkxIjogZm9yIFI4QTc3OTEgKFItQ2FyIE0yKSBjb21wYXRpYmxlIHBpbi1jb250cm9sbGVyLgotICAgIC0gInJlbmVzYXMscGZjLXNoNzM3MiI6IGZvciBTSDczNzIgKFNILU1vYmlsZSBBUDQpIGNvbXBhdGlibGUgcGluLWNvbnRyb2xsZXIuCiAgICAgLSAicmVuZXNhcyxwZmMtc2g3M2EwIjogZm9yIFNINzNBMCAoU0gtTW9iaWxlIEFHNSkgY29tcGF0aWJsZSBwaW4tY29udHJvbGxlci4KIAogICAtIHJlZzogQmFzZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgZWFjaCBtZW1vcnkgcmVzb3VyY2UgdXNlZCBieSB0aGUgcGluCkBAIC03NSw4ICs3NSw3IEBACiBHUElPCiAtLS0tCiAKLU9uIFNINzM3MiwgU0g3M0EwLCBSOEE3M0E0IGFuZCBSOEE3NzQwIHRoZSBQRkMgbm9kZSBpcyBhbHNvIGEgR1BJTyBjb250cm9sbGVyCi1ub2RlLgorT24gU0g3M0EwLCBSOEE3M0E0IGFuZCBSOEE3NzQwIHRoZSBQRkMgbm9kZSBpcyBhbHNvIGEgR1BJTyBjb250cm9sbGVyIG5vZGUuCiAKIFJlcXVpcmVkIFByb3BlcnRpZXM6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3NhbXN1bmctcGluY3RybC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC9zYW1zdW5nLXBpbmN0cmwudHh0CmluZGV4IDg0MjU4MzguLjlkMmE5OTUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3NhbXN1bmctcGluY3RybC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BpbmN0cmwvc2Ftc3VuZy1waW5jdHJsLnR4dApAQCAtMTcxLDYgKzE3MSwxOCBAQAogQWxsIHRoZSBwaW4gY29udHJvbGxlciBub2RlcyBzaG91bGQgYmUgcmVwcmVzZW50ZWQgaW4gdGhlIGFsaWFzZXMgbm9kZSB1c2luZwogdGhlIGZvbGxvd2luZyBmb3JtYXQgJ3BpbmN0cmx7bn0nIHdoZXJlIG4gaXMgYSB1bmlxdWUgbnVtYmVyIGZvciB0aGUgYWxpYXMuCiAKK0FsaWFzZXMgZm9yIGNvbnRyb2xsZXJzIGNvbXBhdGlibGUgd2l0aCAic2Ftc3VuZyxleHlub3M3LXBpbmN0cmwiOgorLSBwaW5jdHJsMDogcGluIGNvbnRyb2xsZXIgb2YgQUxJVkUgYmxvY2ssCistIHBpbmN0cmwxOiBwaW4gY29udHJvbGxlciBvZiBCVVMwIGJsb2NrLAorLSBwaW5jdHJsMjogcGluIGNvbnRyb2xsZXIgb2YgTkZDIGJsb2NrLAorLSBwaW5jdHJsMzogcGluIGNvbnRyb2xsZXIgb2YgVE9VQ0ggYmxvY2ssCistIHBpbmN0cmw0OiBwaW4gY29udHJvbGxlciBvZiBGRiBibG9jaywKKy0gcGluY3RybDU6IHBpbiBjb250cm9sbGVyIG9mIEVTRSBibG9jaywKKy0gcGluY3RybDY6IHBpbiBjb250cm9sbGVyIG9mIEZTWVMwIGJsb2NrLAorLSBwaW5jdHJsNzogcGluIGNvbnRyb2xsZXIgb2YgRlNZUzEgYmxvY2ssCistIHBpbmN0cmw4OiBwaW4gY29udHJvbGxlciBvZiBCVVMxIGJsb2NrLAorLSBwaW5jdHJsOTogcGluIGNvbnRyb2xsZXIgb2YgQVVESU8gYmxvY2ssCisKIEV4YW1wbGU6IEEgcGluLWNvbnRyb2xsZXIgbm9kZSB3aXRoIHBpbiBiYW5rczoKIAogCXBpbmN0cmxfMDogcGluY3RybEAxMTQwMDAwMCB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC94bG54LHp5bnEtcGluY3RybC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGluY3RybC94bG54LHp5bnEtcGluY3RybC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdiNTVhOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9waW5jdHJsL3hsbngsenlucS1waW5jdHJsLnR4dApAQCAtMCwwICsxLDEwNCBAQAorCUJpbmRpbmcgZm9yIFhpbGlueCBaeW5xIFBpbmN0cmwKKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogInhsbngsenlucS1waW5jdHJsIgorLSBzeXNjb246IHBoYW5kbGUgdG8gU0xDUgorLSByZWc6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHBpbmN0cmwgc3BhY2UgaW4gU0xDUgorCitQbGVhc2UgcmVmZXIgdG8gcGluY3RybC1iaW5kaW5ncy50eHQgaW4gdGhpcyBkaXJlY3RvcnkgZm9yIGRldGFpbHMgb2YgdGhlCitjb21tb24gcGluY3RybCBiaW5kaW5ncyB1c2VkIGJ5IGNsaWVudCBkZXZpY2VzLCBpbmNsdWRpbmcgdGhlIG1lYW5pbmcgb2YgdGhlCitwaHJhc2UgInBpbiBjb25maWd1cmF0aW9uIG5vZGUiLgorCitaeW5xJ3MgcGluIGNvbmZpZ3VyYXRpb24gbm9kZXMgYWN0IGFzIGEgY29udGFpbmVyIGZvciBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mCitzdWJub2Rlcy4gRWFjaCBvZiB0aGVzZSBzdWJub2RlcyByZXByZXNlbnRzIHNvbWUgZGVzaXJlZCBjb25maWd1cmF0aW9uIGZvciBhCitwaW4sIGEgZ3JvdXAsIG9yIGEgbGlzdCBvZiBwaW5zIG9yIGdyb3Vwcy4gVGhpcyBjb25maWd1cmF0aW9uIGNhbiBpbmNsdWRlIHRoZQorbXV4IGZ1bmN0aW9uIHRvIHNlbGVjdCBvbiB0aG9zZSBwaW4ocykvZ3JvdXAocyksIGFuZCB2YXJpb3VzIHBpbiBjb25maWd1cmF0aW9uCitwYXJhbWV0ZXJzLCBzdWNoIGFzIHB1bGwtdXAsIHNsZXcgcmF0ZSwgZXRjLgorCitFYWNoIGNvbmZpZ3VyYXRpb24gbm9kZSBjYW4gY29uc2lzdCBvZiBtdWx0aXBsZSBub2RlcyBkZXNjcmliaW5nIHRoZSBwaW5tdXggYW5kCitwaW5jb25mIG9wdGlvbnMuIFRob3NlIG5vZGVzIGNhbiBiZSBwaW5tdXggbm9kZXMgb3IgcGluY29uZiBub2Rlcy4KKworVGhlIG5hbWUgb2YgZWFjaCBzdWJub2RlIGlzIG5vdCBpbXBvcnRhbnQ7IGFsbCBzdWJub2RlcyBzaG91bGQgYmUgZW51bWVyYXRlZAorYW5kIHByb2Nlc3NlZCBwdXJlbHkgYmFzZWQgb24gdGhlaXIgY29udGVudC4KKworUmVxdWlyZWQgcHJvcGVydGllcyBmb3IgcGlubXV4IG5vZGVzIGFyZToKKyAtIGdyb3VwczogQSBsaXN0IG9mIHBpbm11eCBncm91cHMuCisgLSBmdW5jdGlvbjogVGhlIG5hbWUgb2YgYSBwaW5tdXggZnVuY3Rpb24gdG8gYWN0aXZhdGUgZm9yIHRoZSBzcGVjaWZpZWQgc2V0CisgICBvZiBncm91cHMuCisKK1JlcXVpcmVkIHByb3BlcnRpZXMgZm9yIGNvbmZpZ3VyYXRpb24gbm9kZXM6CitPbmUgb2Y6CisgLSBwaW5zOiBhIGxpc3Qgb2YgcGluIG5hbWVzCisgLSBncm91cHM6IEEgbGlzdCBvZiBwaW5tdXggZ3JvdXBzLgorCitUaGUgZm9sbG93aW5nIGdlbmVyaWMgcHJvcGVydGllcyBhcyBkZWZpbmVkIGluIHBpbmN0cmwtYmluZGluZ3MudHh0IGFyZSB2YWxpZAordG8gc3BlY2lmeSBpbiBhIHBpbm11eCBzdWJub2RlOgorIGdyb3VwcywgZnVuY3Rpb24KKworVGhlIGZvbGxvd2luZyBnZW5lcmljIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiBwaW5jdHJsLWJpbmRpbmdzLnR4dCBhcmUgdmFsaWQKK3RvIHNwZWNpZnkgaW4gYSBwaW5jb25mIHN1Ym5vZGU6CisgZ3JvdXBzLCBwaW5zLCBiaWFzLWRpc2FibGUsIGJpYXMtaGlnaC1pbXBlZGFuY2UsIGJpYXMtcHVsbC11cCwgc2xldy1yYXRlLAorIGxvdy1wb3dlci1kaXNhYmxlLCBsb3ctcG93ZXItZW5hYmxlCisKKyBWYWxpZCBhcmd1bWVudHMgZm9yICdzbGV3LXJhdGUnIGFyZSAnMCcgYW5kICcxJyB0byBzZWxlY3QgYmV0d2VlbiBzbG93IGFuZCBmYXN0CisgcmVzcGVjdGl2ZWx5LgorCisgVmFsaWQgdmFsdWVzIGZvciBncm91cHMgYXJlOgorICAgZXRoZXJuZXQwXzBfZ3JwLCBldGhlcm5ldDFfMF9ncnAsIG1kaW8wXzBfZ3JwLCBtZGlvMV8wX2dycCwKKyAgIHFzcGkwXzBfZ3JwLCBxc3BpMV8wX2dycCwgcXNwaV9mYmNsaywgcXNwaV9jczFfZ3JwLCBzcGkwXzBfZ3JwLAorICAgc3BpMF8xX2dycCAtIHNwaTBfMl9ncnAsIHNwaTFfMF9ncnAgLSBzcGkxXzNfZ3JwLCBzZGlvMF8wX2dycCAtIHNkaW8wXzJfZ3JwLAorICAgc2RpbzFfMF9ncnAgLSBzZGlvMV8zX2dycCwgc2RpbzBfZW1pb193cCwgc2RpbzBfZW1pb19jZCwgc2RpbzFfZW1pb193cCwKKyAgIHNkaW8xX2VtaW9fY2QsIHNtYzBfbm9yLCBzbWMwX25vcl9jczFfZ3JwLCBzbWMwX25vcl9hZGRyMjVfZ3JwLCBzbWMwX25hbmQsCisgICBjYW4wXzBfZ3JwIC0gY2FuMF8xMF9ncnAsIGNhbjFfMF9ncnAgLSBjYW4xXzExX2dycCwgdWFydDBfMF9ncnAgLSB1YXJ0MF8xMF9ncnAsCisgICB1YXJ0MV8wX2dycCAtIHVhcnQxXzExX2dycCwgaTJjMF8wX2dycCAtIGkyYzBfMTBfZ3JwLCBpMmMxXzBfZ3JwIC0gaTJjMV8xMF9ncnAsCisgICB0dGMwXzBfZ3JwIC0gdHRjMF8yX2dycCwgdHRjMV8wX2dycCAtIHR0YzFfMl9ncnAsIHN3ZHQwXzBfZ3JwIC0gc3dkdDBfNF9ncnAsCisgICBncGlvMF8wX2dycCAtIGdwaW8wXzUzX2dycCwgdXNiMF8wX2dycCwgdXNiMV8wX2dycAorCisgVmFsaWQgdmFsdWVzIGZvciBwaW5zIGFyZToKKyAgIE1JTzAgLSBNSU81MworCisgVmFsaWQgdmFsdWVzIGZvciBmdW5jdGlvbiBhcmU6CisgICBldGhlcm5ldDAsIGV0aGVybmV0MSwgbWRpbzAsIG1kaW8xLCBxc3BpMCwgcXNwaTEsIHFzcGlfZmJjbGssIHFzcGlfY3MxLAorICAgc3BpMCwgc3BpMSwgc2RpbzAsIHNkaW8wX3BjLCBzZGlvMF9jZCwgc2RpbzBfd3AsCisgICBzZGlvMSwgc2RpbzFfcGMsIHNkaW8xX2NkLCBzZGlvMV93cCwKKyAgIHNtYzBfbm9yLCBzbWMwX25vcl9jczEsIHNtYzBfbm9yX2FkZHIyNSwgc21jMF9uYW5kLCBjYW4wLCBjYW4xLCB1YXJ0MCwgdWFydDEsCisgICBpMmMwLCBpMmMxLCB0dGMwLCB0dGMxLCBzd2R0MCwgZ3BpbzAsIHVzYjAsIHVzYjEKKworVGhlIGZvbGxvd2luZyBkcml2ZXItc3BlY2lmaWMgcHJvcGVydGllcyBhcyBkZWZpbmVkIGhlcmUgYXJlIHZhbGlkIHRvIHNwZWNpZnkgaW4KK2EgcGluIGNvbmZpZ3VyYXRpb24gc3Vibm9kZToKKyAtIGlvLXN0YW5kYXJkOiBDb25maWd1cmUgdGhlIHBpbiB0byB1c2UgdGhlIHNlbGVjdGVkIElPIHN0YW5kYXJkIGFjY29yZGluZyB0bworICAgdGhpcyBtYXBwaW5nOgorICAgIDE6IExWQ01PUzE4CisgICAgMjogTFZDTU9TMjUKKyAgICAzOiBMVkNNT1MzMworICAgIDQ6IEhTVEwKKworRXhhbXBsZToKKwlwaW5jdHJsMDogcGluY3RybEA3MDAgeworCQljb21wYXRpYmxlID0gInhsbngscGluY3RybC16eW5xIjsKKwkJcmVnID0gPDB4NzAwIDB4MjAwPjsKKwkJc3lzY29uID0gPCZzbGNyPjsKKworCQlwaW5jdHJsX3VhcnQxX2RlZmF1bHQ6IHVhcnQxLWRlZmF1bHQgeworCQkJbXV4IHsKKwkJCQlncm91cHMgPSAidWFydDFfMTBfZ3JwIjsKKwkJCQlmdW5jdGlvbiA9ICJ1YXJ0MSI7CisJCQl9OworCisJCQljb25mIHsKKwkJCQlncm91cHMgPSAidWFydDFfMTBfZ3JwIjsKKwkJCQlzbGV3LXJhdGUgPSA8MD47CisJCQkJaW8tc3RhbmRhcmQgPSA8MT47CisJCQl9OworCisJCQljb25mLXJ4IHsKKwkJCQlwaW5zID0gIk1JTzQ5IjsKKwkJCQliaWFzLWhpZ2gtaW1wZWRhbmNlOworCQkJfTsKKworCQkJY29uZi10eCB7CisJCQkJcGlucyA9ICJNSU80OCI7CisJCQkJYmlhcy1kaXNhYmxlOworCQkJfTsKKwkJfTsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyL2x0YzI5NDEudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyL2x0YzI5NDEudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNDJhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXIvbHRjMjk0MS50eHQKQEAgLTAsMCArMSwyNyBAQAorYmluZGluZyBmb3IgTFRDMjk0MSBhbmQgTFRDMjk0MyBiYXR0ZXJ5IGdhdWdlcworCitCb3RoIHRoZSBMVEMyOTQxIGFuZCBMVEMyOTQzIG1lYXN1cmUgYmF0dGVyeSBjYXBhY2l0eS4KK1RoZSBMVEMyOTQzIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgTFRDMjk0MSwgaXQgYWRkcyB2b2x0YWdlIGFuZAordGVtcGVyYXR1cmUgbW9uaXRvcmluZywgYW5kIHVzZXMgYSBzbGlnaHRseSBkaWZmZXJlbnQgY29udmVyc2lvbgorZm9ybXVsYSBmb3IgdGhlIGNoYXJnZSBjb3VudGVyLgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBTaG91bGQgY29udGFpbiAibHRjMjk0MSIgb3IgImx0YzI5NDMiIHdoaWNoIGFsc28gaW5kaWNhdGVzIHRoZQorICAgIHR5cGUgb2YgSTJDIGNoaXAgYXR0YWNoZWQuCistIHJlZzogVGhlIDctYml0IEkyQyBhZGRyZXNzLgorLSBsbHRjLHJlc2lzdG9yLXNlbnNlOiBUaGUgc2Vuc2UgcmVzaXN0b3IgdmFsdWUgaW4gbWlsbGktb2htcy4gQ2FuIGJlIGEgMzItYml0CisgICAgbmVnYXRpdmUgdmFsdWUgd2hlbiB0aGUgYmF0dGVyeSBoYXMgYmVlbiBjb25uZWN0ZWQgdG8gdGhlIHdyb25nIGVuZCBvZiB0aGUKKyAgICByZXNpc3Rvci4KKy0gbGx0YyxwcmVzY2FsZXItZXhwb25lbnQ6IFRoZSBwcmVzY2FsZXIgZXhwb25lbnQgYXMgZXhwbGFpbmVkIGluIHRoZSBkYXRhc2hlZXQuCisgICAgVGhpcyBkZXRlcm1pbmVzIHRoZSByYW5nZSBhbmQgYWNjdXJhY3kgb2YgdGhlIGdhdWdlLiBUaGUgdmFsdWUgaXMgcHJvZ3JhbW1lZAorICAgIGludG8gdGhlIGNoaXAgb25seSBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIGN1cnJlbnQgc2V0dGluZy4gVGhlIHNldHRpbmcgaXMKKyAgICBsb3N0IHdoZW4gdGhlIGJhdHRlcnkgaXMgZGlzY29ubmVjdGVkLgorCitFeGFtcGxlIGZyb20gdGhlIFRvcGljIE1pYW1pIEZsb3JpZGEgYm9hcmQ6CisKKwlmdWVsZ2F1Z2U6IGx0YzI5NDNANjQgeworCQljb21wYXRpYmxlID0gImx0YzI5NDMiOworCQlyZWcgPSA8MHg2ND47CisJCWxsdGMscmVzaXN0b3Itc2Vuc2UgPSA8MTU+OworCQlsbHRjLHByZXNjYWxlci1leHBvbmVudCA9IDw1PjsgLyogMl4oMio1KSA9IDEwMjQgKi8KKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyL3Jlc2V0L2x0YzI5NTItcG93ZXJvZmYudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyL3Jlc2V0L2x0YzI5NTItcG93ZXJvZmYudHh0CmluZGV4IDBjOTRjNjMuLmNkMmQ3ZjUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlci9yZXNldC9sdGMyOTUyLXBvd2Vyb2ZmLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXIvcmVzZXQvbHRjMjk1Mi1wb3dlcm9mZi50eHQKQEAgLTEsMjAgKzEsMjMgQEAKIEJpbmRpbmcgZm9yIHRoZSBMVEMyOTUyIFBvd2VyUGF0aCBjb250cm9sbGVyCiAKIFRoaXMgY2hpcCBpcyB1c2VkIHRvIGV4dGVybmFsbHkgdHJpZ2dlciBhIHN5c3RlbSBzaHV0IGRvd24uIE9uY2UgdGhlIHRyaWdnZXIgaGFzCi1iZWVuIHNlbnQsIHRoZSBjaGlwcycgd2F0Y2hkb2cgaGFzIHRvIGJlIHJlc2V0IHRvIGdyYWNlZnVsbHkgc2h1dCBkb3duLgotSWYgdGhlIExpbnV4IHN5c3RlbXMgZGVjaWRlcyB0byBzaHV0IGRvd24gaXQgcG93ZXJzIG9mZiB0aGUgcGxhdGZvcm0gdmlhIHRoZQota2lsbCBzaWduYWwuCitiZWVuIHNlbnQsIHRoZSBjaGlwJ3Mgd2F0Y2hkb2cgaGFzIHRvIGJlIHJlc2V0IHRvIGdyYWNlZnVsbHkgc2h1dCBkb3duLgorQSBmdWxsIHBvd2VyZG93biBjYW4gYmUgdHJpZ2dlcmVkIHZpYSB0aGUga2lsbCBzaWduYWwuCiAKIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAKIC0gY29tcGF0aWJsZToJCU11c3QgY29udGFpbjogImxsdGMsbHRjMjk1MiIKLS0gdHJpZ2dlci1ncGlvczoJcGhhbmRsZSArIGdwaW8tc3BlY2lmaWVyIGZvciB0aGUgR1BJTyBjb25uZWN0ZWQgdG8gdGhlCi0JCQljaGlwJ3MgdHJpZ2dlciBsaW5lCiAtIHdhdGNoZG9nLWdwaW9zOglwaGFuZGxlICsgZ3Bpby1zcGVjaWZpZXIgZm9yIHRoZSBHUElPIGNvbm5lY3RlZCB0byB0aGUKIAkJCWNoaXAncyB3YXRjaGRvZyBsaW5lCiAtIGtpbGwtZ3Bpb3M6CQlwaGFuZGxlICsgZ3Bpby1zcGVjaWZpZXIgZm9yIHRoZSBHUElPIGNvbm5lY3RlZCB0byB0aGUKIAkJCWNoaXAncyBraWxsIGxpbmUKIAorT3B0aW9uYWwgcHJvcGVydGllczoKKy0gdHJpZ2dlci1ncGlvczoJcGhhbmRsZSArIGdwaW8tc3BlY2lmaWVyIGZvciB0aGUgR1BJTyBjb25uZWN0ZWQgdG8gdGhlCisJCQljaGlwJ3MgdHJpZ2dlciBsaW5lLiBJZiB0aGlzIHByb3BlcnR5IGlzIG5vdCBzZXQsIHRoZQorCQkJdHJpZ2dlciBmdW5jdGlvbiBpcyBpZ25vcmVkIGFuZCB0aGUgY2hpcCBpcyBrZXB0IGFsaXZlCisJCQl1bnRpbCBhbiBleHBsaWNpdCBraWxsIHNpZ25hbCBpcyByZWNlaXZlZAorCiBFeGFtcGxlOgogCiBsdGMyOTUyIHsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlci9yb2NrY2hpcC1pby1kb21haW4udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyL3JvY2tjaGlwLWlvLWRvbWFpbi50eHQKaW5kZXggNmZiZjZlNy4uOGI3MGRiMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyL3JvY2tjaGlwLWlvLWRvbWFpbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VyL3JvY2tjaGlwLWlvLWRvbWFpbi50eHQKQEAgLTM3LDcgKzM3LDcgQEAKIAogCiBZb3Ugc3BlY2lmeSBzdXBwbGllcyB1c2luZyB0aGUgc3RhbmRhcmQgcmVndWxhdG9yIGJpbmRpbmdzIGJ5IGluY2x1ZGluZwotYSBwaGFuZGxlIHRoZSB0aGUgcmVsZXZhbnQgcmVndWxhdG9yLiAgQWxsIHNwZWNpZmllZCBzdXBwbGllcyBtdXN0IGJlIGFibGUKK2EgcGhhbmRsZSB0aGUgcmVsZXZhbnQgcmVndWxhdG9yLiAgQWxsIHNwZWNpZmllZCBzdXBwbGllcyBtdXN0IGJlIGFibGUKIHRvIHJlcG9ydCB0aGVpciB2b2x0YWdlLiAgVGhlIElPIFZvbHRhZ2UgRG9tYWluIGZvciBhbnkgbm9uLXNwZWNpZmllZAogc3VwcGxpZXMgd2lsbCBiZSBub3QgYmUgdG91Y2hlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2ZtYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2ZtYW4udHh0CmluZGV4IGVkZWVhMTYuLmVkZGE1NWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9mbWFuLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZm1hbi50eHQKQEAgLTcsNiArNyw3IEBACiAgIC0gRk1hbiBNVVJBTSBOb2RlCiAgIC0gRk1hbiBkVFNFQy9YR0VDL21FTUFDIE5vZGUKICAgLSBGTWFuIElFRUUgMTU4OCBOb2RlCisgIC0gRk1hbiBNRElPIE5vZGUKICAgLSBFeGFtcGxlCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0zNTcsNiArMzU4LDY5IEBACiB9OwogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRk1hbiBNRElPIE5vZGUKKworREVTQ1JJUFRJT04KKworVGhlIE1ESU8gaXMgYSBidXMgdG8gd2hpY2ggdGhlIFBIWSBkZXZpY2VzIGFyZSBjb25uZWN0ZWQuCisKK1BST1BFUlRJRVMKKworLSBjb21wYXRpYmxlCisJCVVzYWdlOiByZXF1aXJlZAorCQlWYWx1ZSB0eXBlOiA8c3RyaW5nbGlzdD4KKwkJRGVmaW5pdGlvbjogQSBzdGFuZGFyZCBwcm9wZXJ0eS4KKwkJTXVzdCBpbmNsdWRlICJmc2wsZm1hbi1tZGlvIiBmb3IgMSBHYi9zIE1ESU8gZnJvbSBGTWFuIHYyLgorCQlNdXN0IGluY2x1ZGUgImZzbCxmbWFuLXhtZGlvIiBmb3IgMTAgR2IvcyBNRElPIGZyb20gRk1hbiB2Mi4KKwkJTXVzdCBpbmNsdWRlICJmc2wsZm1hbi1tZW1hYy1tZGlvIiBmb3IgMS8xMCBHYi9zIE1ESU8gZnJvbQorCQlGTWFuIHYzLgorCistIHJlZworCQlVc2FnZTogcmVxdWlyZWQKKwkJVmFsdWUgdHlwZTogPHByb3AtZW5jb2RlZC1hcnJheT4KKwkJRGVmaW5pdGlvbjogQSBzdGFuZGFyZCBwcm9wZXJ0eS4KKworLSBidXMtZnJlcXVlbmN5CisJCVVzYWdlOiBvcHRpb25hbAorCQlWYWx1ZSB0eXBlOiA8dTMyPgorCQlEZWZpbml0aW9uOiBTcGVjaWZpZXMgdGhlIGV4dGVybmFsIE1ESU8gYnVzIGNsb2NrIHNwZWVkIHRvCisJCWJlIHVzZWQsIGlmIGRpZmZlcmVudCBmcm9tIHRoZSBzdGFuZGFyZCAyLjUgTUh6LgorCQlUaGlzIG1heSBiZSBkdWUgdG8gdGhlIHN0YW5kYXJkIHNwZWVkIGJlaW5nIHVuc3VwcG9ydGVkIChlLmcuCisJCWR1ZSB0byBhIGhhcmR3YXJlIHByb2JsZW0pLCBvciB0byBhZHZlcnRpc2UgdGhhdCBhbGwgcmVsZXZhbnQKKwkJY29tcG9uZW50cyBpbiB0aGUgc3lzdGVtIHN1cHBvcnQgYSBmYXN0ZXIgc3BlZWQuCisKKy0gaW50ZXJydXB0cworCQlVc2FnZTogcmVxdWlyZWQgZm9yIGV4dGVybmFsIE1ESU8KKwkJVmFsdWUgdHlwZTogPHByb3AtZW5jb2RlZC1hcnJheT4KKwkJRGVmaW5pdGlvbjogRXZlbnQgaW50ZXJydXB0IG9mIGV4dGVybmFsIE1ESU8gY29udHJvbGxlci4KKworLSBmc2wsZm1hbi1pbnRlcm5hbC1tZGlvCisJCVVzYWdlOiByZXF1aXJlZCBmb3IgaW50ZXJuYWwgTURJTworCQlWYWx1ZSB0eXBlOiBib29sZWFuCisJCURlZmluaXRpb246IEZtYW4gaGFzIGludGVybmFsIE1ESU8gZm9yIGludGVybmFsIFBDUyhQaHlzaWNhbAorCQlDb2RpbmcgU3VibGF5ZXIpIFBIWXMgYW5kIGV4dGVybmFsIE1ESU8gZm9yIGV4dGVybmFsIFBIWXMuCisJCVRoZSBzZXR0aW5ncyBhbmQgcHJvZ3JhbW1pbmcgcm91dGluZXMgZm9yIGludGVybmFsL2V4dGVybmFsCisJCU1ESU8gYXJlIGRpZmZlcmVudC4gTXVzdCBiZSBpbmNsdWRlZCBmb3IgaW50ZXJuYWwgTURJTy4KKworRVhBTVBMRQorCitFeGFtcGxlIGZvciBGTWFuIHYyIGV4dGVybmFsIE1ESU86CisKK21kaW9AZjEwMDAgeworCWNvbXBhdGlibGUgPSAiZnNsLGZtYW4teG1kaW8iOworCXJlZyA9IDwweGYxMDAwIDB4MTAwMD47CisJaW50ZXJydXB0cyA9IDwxMDEgMiAwIDA+OworfTsKKworRXhhbXBsZSBmb3IgRk1hbiB2MyBpbnRlcm5hbCBNRElPOgorCittZGlvQGYxMDAwIHsKKwljb21wYXRpYmxlID0gImZzbCxmbWFuLW1lbWFjLW1kaW8iOworCXJlZyA9IDwweGYxMDAwIDB4MTAwMD47CisJZnNsLGZtYW4taW50ZXJuYWwtbWRpbzsKK307CisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiBFeGFtcGxlCiAKIGZtYW5ANDAwMDAwIHsKQEAgLTUzMSw0ICs1OTUsMTAgQEAKIAkJY29tcGF0aWJsZSA9ICJmc2wsZm1hbi1wdHAtdGltZXIiOwogCQlyZWcgPSA8MHhmZTAwMCAweDEwMDA+OwogCX07CisKKwltZGlvQGYxMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsZm1hbi14bWRpbyI7CisJCXJlZyA9IDwweGYxMDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTAxIDIgMCAwPjsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvZGE5MjExLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvZGE5MjExLnR4dAppbmRleCAyNDAwMTlhLi5lYjYxODkwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL2RhOTIxMS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9kYTkyMTEudHh0CkBAIC0xMSw2ICsxMSw3IEBACiAgIEJVQ0tBIGFuZCBCVUNLQi4KIAogT3B0aW9uYWwgcHJvcGVydGllczoKKy0gZW5hYmxlLWdwaW9zOiBwbGF0Zm9ybSBncGlvIGZvciBjb250cm9sIG9mIEJVQ0tBL0JVQ0tCLgogLSBBbnkgb3B0aW9uYWwgcHJvcGVydHkgZGVmaW5lZCBpbiByZWd1bGF0b3IudHh0CiAKIEV4YW1wbGUgMSkgREE5MjExCkBAIC0yNyw2ICsyOCw3IEBACiAJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTU3MDAwMD47CiAJCQkJcmVndWxhdG9yLW1pbi1taWNyb2FtcCAJPSA8MjAwMDAwMD47CiAJCQkJcmVndWxhdG9yLW1heC1taWNyb2FtcCAJPSA8NTAwMDAwMD47CisJCQkJZW5hYmxlLWdwaW9zID0gPCZncGlvIDI3IDA+OwogCQkJfTsKIAkJCUJVQ0tCIHsKIAkJCQlyZWd1bGF0b3ItbmFtZSA9ICJWQlVDS0IiOwpAQCAtMzQsMTEgKzM2LDEyIEBACiAJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTU3MDAwMD47CiAJCQkJcmVndWxhdG9yLW1pbi1taWNyb2FtcCAJPSA8MjAwMDAwMD47CiAJCQkJcmVndWxhdG9yLW1heC1taWNyb2FtcCAJPSA8NTAwMDAwMD47CisJCQkJZW5hYmxlLWdwaW9zID0gPCZncGlvIDE3IDA+OwogCQkJfTsKIAkJfTsKIAl9OwogCi1FeGFtcGxlIDIpIERBOTIxMTMKK0V4YW1wbGUgMikgREE5MjEzCiAJcG1pYzogZGE5MjEzQDY4IHsKIAkJY29tcGF0aWJsZSA9ICJkbGcsZGE5MjEzIjsKIAkJcmVnID0gPDB4Njg+OwpAQCAtNTEsNiArNTQsNyBAQAogCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE1NzAwMDA+OwogCQkJCXJlZ3VsYXRvci1taW4tbWljcm9hbXAgCT0gPDMwMDAwMDA+OwogCQkJCXJlZ3VsYXRvci1tYXgtbWljcm9hbXAgCT0gPDYwMDAwMDA+OworCQkJCWVuYWJsZS1ncGlvcyA9IDwmZ3BpbyAyNyAwPjsKIAkJCX07CiAJCQlCVUNLQiB7CiAJCQkJcmVndWxhdG9yLW5hbWUgPSAiVkJVQ0tCIjsKQEAgLTU4LDYgKzYyLDcgQEAKIAkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxNTcwMDAwPjsKIAkJCQlyZWd1bGF0b3ItbWluLW1pY3JvYW1wIAk9IDwzMDAwMDAwPjsKIAkJCQlyZWd1bGF0b3ItbWF4LW1pY3JvYW1wIAk9IDw2MDAwMDAwPjsKKwkJCQllbmFibGUtZ3Bpb3MgPSA8JmdwaW8gMTcgMD47CiAJCQl9OwogCQl9OwogCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL2lzbDkzMDUudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9pc2w5MzA1LnR4dAppbmRleCBhNjI2ZmMxLi5kNmU3YzllIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL2lzbDkzMDUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvaXNsOTMwNS50eHQKQEAgLTIsNyArMiw3IEBACiAKIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAKLS0gY29tcGF0aWJsZTogImlzbCxpc2w5MzA1IiBvciAiaXNsLGlzbDkzMDVoIgorLSBjb21wYXRpYmxlOiAiaXNpbCxpc2w5MzA1IiBvciAiaXNpbCxpc2w5MzA1aCIKIC0gcmVnOiBJMkMgc2xhdmUgYWRkcmVzcywgdXN1YWxseSAweDY4LgogLSByZWd1bGF0b3JzOiBBIG5vZGUgdGhhdCBob3VzZXMgYSBzdWItbm9kZSBmb3IgZWFjaCByZWd1bGF0b3Igd2l0aGluIHRoZQogICBkZXZpY2UuIEVhY2ggc3ViLW5vZGUgaXMgaWRlbnRpZmllZCB1c2luZyB0aGUgbm9kZSdzIG5hbWUsIHdpdGggdmFsaWQKQEAgLTE5LDcgKzE5LDcgQEAKIEV4YW1wbGUKIAogCXBtaWM6IGlzbDkzMDVANjggewotCQljb21wYXRpYmxlID0gImlzbCxpc2w5MzA1IjsKKwkJY29tcGF0aWJsZSA9ICJpc2lsLGlzbDkzMDUiOwogCQlyZWcgPSA8MHg2OD47CiAKIAkJVklORENEMS1zdXBwbHkgPSA8JnN5c3RlbV9wb3dlcj47CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL210NjM5Ny1yZWd1bGF0b3IudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9tdDYzOTctcmVndWxhdG9yLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDJiMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9tdDYzOTctcmVndWxhdG9yLnR4dApAQCAtMCwwICsxLDIxNyBAQAorTWVkaWF0ZWsgTVQ2Mzk3IFJlZ3VsYXRvciBEcml2ZXIKKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZTogIm1lZGlhdGVrLG10NjM5Ny1yZWd1bGF0b3IiCistIG10NjM5N3JlZ3VsYXRvcjogTGlzdCBvZiByZWd1bGF0b3JzIHByb3ZpZGVkIGJ5IHRoaXMgY29udHJvbGxlci4gSXQgaXMgbmFtZWQKKyAgYWNjb3JkaW5nIHRvIGl0cyByZWd1bGF0b3IgdHlwZSwgYnVja188bmFtZT4gYW5kIGxkb188bmFtZT4uCisgIFRoZSBkZWZpbml0aW9uIGZvciBlYWNoIG9mIHRoZXNlIG5vZGVzIGlzIGRlZmluZWQgdXNpbmcgdGhlIHN0YW5kYXJkIGJpbmRpbmcKKyAgZm9yIHJlZ3VsYXRvcnMgYXQgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3JlZ3VsYXRvci9yZWd1bGF0b3IudHh0LgorCitUaGUgdmFsaWQgbmFtZXMgZm9yIHJlZ3VsYXRvcnMgYXJlOjoKK0JVQ0s6CisgIGJ1Y2tfdnBjYTE1LCBidWNrX3ZwY2E3LCBidWNrX3ZzcmFtY2ExNSwgYnVja192c3JhbWNhNywgYnVja192Y29yZSwgYnVja192Z3B1LAorICBidWNrX3Zkcm0sIGJ1Y2tfdmlvMTgKK0xETzoKKyAgbGRvX3Z0Y3hvLCBsZG9fdmEyOCwgbGRvX3ZjYW1hLCBsZG9fdmlvMjgsIGxkb192dXNiLCBsZG9fdm1jLCBsZG9fdm1jaCwKKyAgbGRvX3ZlbWMzdjMsIGxkb192Z3AxLCBsZG9fdmdwMiwgbGRvX3ZncDMsIGxkb192Z3A0LCBsZG9fdmdwNSwgbGRvX3ZncDYsCisgIGxkb192aWJyCisKK0V4YW1wbGU6CisJcG1pYyB7CisJCWNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ2Mzk3IjsKKworCQltdDYzOTdyZWd1bGF0b3I6IG10NjM5N3JlZ3VsYXRvciB7CisJCQljb21wYXRpYmxlID0gIm1lZGlhdGVrLG10NjM5Ny1yZWd1bGF0b3IiOworCisJCQltdDYzOTdfdnBjYTE1X3JlZzogYnVja192cGNhMTUgeworCQkJCXJlZ3VsYXRvci1jb21wYXRpYmxlID0gImJ1Y2tfdnBjYTE1IjsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2cGNhMTUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPCA4NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCXJlZ3VsYXRvci1yYW1wLWRlbGF5ID0gPDEyNTAwPjsKKwkJCQlyZWd1bGF0b3ItZW5hYmxlLXJhbXAtZGVsYXkgPSA8MjAwPjsKKwkJCX07CisKKwkJCW10NjM5N192cGNhN19yZWc6IGJ1Y2tfdnBjYTcgeworCQkJCXJlZ3VsYXRvci1jb21wYXRpYmxlID0gImJ1Y2tfdnBjYTciOworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZwY2E3IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwgODUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxMzUwMDAwPjsKKwkJCQlyZWd1bGF0b3ItcmFtcC1kZWxheSA9IDwxMjUwMD47CisJCQkJcmVndWxhdG9yLWVuYWJsZS1yYW1wLWRlbGF5ID0gPDExNT47CisJCQl9OworCisJCQltdDYzOTdfdnNyYW1jYTE1X3JlZzogYnVja192c3JhbWNhMTUgeworCQkJCXJlZ3VsYXRvci1jb21wYXRpYmxlID0gImJ1Y2tfdnNyYW1jYTE1IjsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2c3JhbWNhMTUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPCA4NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCXJlZ3VsYXRvci1yYW1wLWRlbGF5ID0gPDEyNTAwPjsKKwkJCQlyZWd1bGF0b3ItZW5hYmxlLXJhbXAtZGVsYXkgPSA8MTE1PjsKKworCQkJfTsKKworCQkJbXQ2Mzk3X3ZzcmFtY2E3X3JlZzogYnVja192c3JhbWNhNyB7CisJCQkJcmVndWxhdG9yLWNvbXBhdGlibGUgPSAiYnVja192c3JhbWNhNyI7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidnNyYW1jYTciOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPCA4NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCXJlZ3VsYXRvci1yYW1wLWRlbGF5ID0gPDEyNTAwPjsKKwkJCQlyZWd1bGF0b3ItZW5hYmxlLXJhbXAtZGVsYXkgPSA8MTE1PjsKKworCQkJfTsKKworCQkJbXQ2Mzk3X3Zjb3JlX3JlZzogYnVja192Y29yZSB7CisJCQkJcmVndWxhdG9yLWNvbXBhdGlibGUgPSAiYnVja192Y29yZSI7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmNvcmUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPCA4NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCXJlZ3VsYXRvci1yYW1wLWRlbGF5ID0gPDEyNTAwPjsKKwkJCQlyZWd1bGF0b3ItZW5hYmxlLXJhbXAtZGVsYXkgPSA8MTE1PjsKKwkJCX07CisKKwkJCW10NjM5N192Z3B1X3JlZzogYnVja192Z3B1IHsKKwkJCQlyZWd1bGF0b3ItY29tcGF0aWJsZSA9ICJidWNrX3ZncHUiOworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZncHUiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPCA3MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDEzNTAwMDA+OworCQkJCXJlZ3VsYXRvci1yYW1wLWRlbGF5ID0gPDEyNTAwPjsKKwkJCQlyZWd1bGF0b3ItZW5hYmxlLXJhbXAtZGVsYXkgPSA8MTE1PjsKKwkJCX07CisKKwkJCW10NjM5N192ZHJtX3JlZzogYnVja192ZHJtIHsKKwkJCQlyZWd1bGF0b3ItY29tcGF0aWJsZSA9ICJidWNrX3Zkcm0iOworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZkcm0iOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPCA4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDE0MDAwMDA+OworCQkJCXJlZ3VsYXRvci1yYW1wLWRlbGF5ID0gPDEyNTAwPjsKKwkJCQlyZWd1bGF0b3ItZW5hYmxlLXJhbXAtZGVsYXkgPSA8NTAwPjsKKwkJCX07CisKKwkJCW10NjM5N192aW8xOF9yZWc6IGJ1Y2tfdmlvMTggeworCQkJCXJlZ3VsYXRvci1jb21wYXRpYmxlID0gImJ1Y2tfdmlvMTgiOworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZpbzE4IjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxNTAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwyMTIwMDAwPjsKKwkJCQlyZWd1bGF0b3ItcmFtcC1kZWxheSA9IDwxMjUwMD47CisJCQkJcmVndWxhdG9yLWVuYWJsZS1yYW1wLWRlbGF5ID0gPDUwMD47CisJCQl9OworCisJCQltdDYzOTdfdnRjeG9fcmVnOiBsZG9fdnRjeG8geworCQkJCXJlZ3VsYXRvci1jb21wYXRpYmxlID0gImxkb192dGN4byI7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidnRjeG8iOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1lbmFibGUtcmFtcC1kZWxheSA9IDw5MD47CisJCQl9OworCisJCQltdDYzOTdfdmEyOF9yZWc6IGxkb192YTI4IHsKKwkJCQlyZWd1bGF0b3ItY29tcGF0aWJsZSA9ICJsZG9fdmEyOCI7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmEyOCI7CisJCQkJLyogZml4ZWQgb3V0cHV0IDIuOCBWICovCisJCQkJcmVndWxhdG9yLWVuYWJsZS1yYW1wLWRlbGF5ID0gPDIxOD47CisJCQl9OworCisJCQltdDYzOTdfdmNhbWFfcmVnOiBsZG9fdmNhbWEgeworCQkJCXJlZ3VsYXRvci1jb21wYXRpYmxlID0gImxkb192Y2FtYSI7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmNhbWEiOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDE1MDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDI4MDAwMDA+OworCQkJCXJlZ3VsYXRvci1lbmFibGUtcmFtcC1kZWxheSA9IDwyMTg+OworCQkJfTsKKworCQkJbXQ2Mzk3X3ZpbzI4X3JlZzogbGRvX3ZpbzI4IHsKKwkJCQlyZWd1bGF0b3ItY29tcGF0aWJsZSA9ICJsZG9fdmlvMjgiOworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZpbzI4IjsKKwkJCQkvKiBmaXhlZCBvdXRwdXQgMi44IFYgKi8KKwkJCQlyZWd1bGF0b3ItZW5hYmxlLXJhbXAtZGVsYXkgPSA8MjQwPjsKKwkJCX07CisKKwkJCW10NjM5N191c2JfcmVnOiBsZG9fdnVzYiB7CisJCQkJcmVndWxhdG9yLWNvbXBhdGlibGUgPSAibGRvX3Z1c2IiOworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZ1c2IiOworCQkJCS8qIGZpeGVkIG91dHB1dCAzLjMgViAqLworCQkJCXJlZ3VsYXRvci1lbmFibGUtcmFtcC1kZWxheSA9IDwyMTg+OworCQkJfTsKKworCQkJbXQ2Mzk3X3ZtY19yZWc6IGxkb192bWMgeworCQkJCXJlZ3VsYXRvci1jb21wYXRpYmxlID0gImxkb192bWMiOworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZtYyI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLWVuYWJsZS1yYW1wLWRlbGF5ID0gPDIxOD47CisJCQl9OworCisJCQltdDYzOTdfdm1jaF9yZWc6IGxkb192bWNoIHsKKwkJCQlyZWd1bGF0b3ItY29tcGF0aWJsZSA9ICJsZG9fdm1jaCI7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidm1jaCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLWVuYWJsZS1yYW1wLWRlbGF5ID0gPDIxOD47CisJCQl9OworCisJCQltdDYzOTdfdmVtY18zdjNfcmVnOiBsZG9fdmVtYzN2MyB7CisJCQkJcmVndWxhdG9yLWNvbXBhdGlibGUgPSAibGRvX3ZlbWMzdjMiOworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZlbWNfM3YzIjsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItZW5hYmxlLXJhbXAtZGVsYXkgPSA8MjE4PjsKKwkJCX07CisKKwkJCW10NjM5N192Z3AxX3JlZzogbGRvX3ZncDEgeworCQkJCXJlZ3VsYXRvci1jb21wYXRpYmxlID0gImxkb192Z3AxIjsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2FtZCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIyMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLWVuYWJsZS1yYW1wLWRlbGF5ID0gPDI0MD47CisJCQl9OworCisJCQltdDYzOTdfdmdwMl9yZWc6IGxkb192Z3AyIHsKKwkJCQllZ3VsYXRvci1jb21wYXRpYmxlID0gImxkb192Z3AyIjsKKwkJCQlyZWd1bGF0b3ItbmFtZSA9ICJ2Y2FtaW8iOworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDEwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1lbmFibGUtcmFtcC1kZWxheSA9IDwyMTg+OworCQkJfTsKKworCQkJbXQ2Mzk3X3ZncDNfcmVnOiBsZG9fdmdwMyB7CisJCQkJcmVndWxhdG9yLWNvbXBhdGlibGUgPSAibGRvX3ZncDMiOworCQkJCXJlZ3VsYXRvci1uYW1lID0gInZjYW1hZiI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLWVuYWJsZS1yYW1wLWRlbGF5ID0gPDIxOD47CisJCQl9OworCisJCQltdDYzOTdfdmdwNF9yZWc6IGxkb192Z3A0IHsKKwkJCQlyZWd1bGF0b3ItY29tcGF0aWJsZSA9ICJsZG9fdmdwNCI7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmdwNCI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLWVuYWJsZS1yYW1wLWRlbGF5ID0gPDIxOD47CisJCQl9OworCisJCQltdDYzOTdfdmdwNV9yZWc6IGxkb192Z3A1IHsKKwkJCQlyZWd1bGF0b3ItY29tcGF0aWJsZSA9ICJsZG9fdmdwNSI7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmdwNSI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzAwMDAwMD47CisJCQkJcmVndWxhdG9yLWVuYWJsZS1yYW1wLWRlbGF5ID0gPDIxOD47CisJCQl9OworCisJCQltdDYzOTdfdmdwNl9yZWc6IGxkb192Z3A2IHsKKwkJCQlyZWd1bGF0b3ItY29tcGF0aWJsZSA9ICJsZG9fdmdwNiI7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmdwNiI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLWVuYWJsZS1yYW1wLWRlbGF5ID0gPDIxOD47CisJCQl9OworCisJCQltdDYzOTdfdmlicl9yZWc6IGxkb192aWJyIHsKKwkJCQlyZWd1bGF0b3ItY29tcGF0aWJsZSA9ICJsZG9fdmliciI7CisJCQkJcmVndWxhdG9yLW5hbWUgPSAidmliciI7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTIwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLWVuYWJsZS1yYW1wLWRlbGF5ID0gPDIxOD47CisJCQl9OworCQl9OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcmVndWxhdG9yL3BmdXplMTAwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvcGZ1emUxMDAudHh0CmluZGV4IDM0ZWY1ZDEuLjliNDBkYjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvcGZ1emUxMDAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9yZWd1bGF0b3IvcGZ1emUxMDAudHh0CkBAIC0xLDcgKzEsNyBAQAogUEZVWkUxMDAgZmFtaWx5IG9mIHJlZ3VsYXRvcnMKIAogUmVxdWlyZWQgcHJvcGVydGllczoKLS0gY29tcGF0aWJsZTogImZzbCxwZnV6ZTEwMCIgb3IgImZzbCxwZnV6ZTIwMCIKKy0gY29tcGF0aWJsZTogImZzbCxwZnV6ZTEwMCIsICJmc2wscGZ1emUyMDAiLCAiZnNsLHBmdXplMzAwMCIKIC0gcmVnOiBJMkMgc2xhdmUgYWRkcmVzcwogCiBSZXF1aXJlZCBjaGlsZCBub2RlOgpAQCAtMTQsNiArMTQsOCBAQAogICBzdzFhYixzdzFjLHN3MixzdzNhLHN3M2Isc3c0LHN3YnN0LHZzbnZzLHZyZWZkZHIsdmdlbjF+dmdlbjYKICAgLS1QRlVaRTIwMAogICBzdzFhYixzdzIsc3czYSxzdzNiLHN3YnN0LHZzbnZzLHZyZWZkZHIsdmdlbjF+dmdlbjYKKyAgLS1QRlVaRTMwMDAKKyAgc3cxYSxzdzFiLHN3MixzdzMsc3dic3QsdnNudnMsdnJlZmRkcix2bGRvMSx2bGRvMix2Y2NzZCx2MzMsdmxkbzMsdmxkbzQKIAogRWFjaCByZWd1bGF0b3IgaXMgZGVmaW5lZCB1c2luZyB0aGUgc3RhbmRhcmQgYmluZGluZyBmb3IgcmVndWxhdG9ycy4KIApAQCAtMjA1LDMgKzIwNyw5MyBAQAogCQkJfTsKIAkJfTsKIAl9OworCitFeGFtcGxlIDM6IFBGVVpFMzAwMAorCisJcG1pYzogcGZ1emUzMDAwQDA4IHsKKwkJY29tcGF0aWJsZSA9ICJmc2wscGZ1emUzMDAwIjsKKwkJcmVnID0gPDB4MDg+OworCisJCXJlZ3VsYXRvcnMgeworCQkJc3cxYV9yZWc6IHN3MWEgeworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDcwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTQ3NTAwMD47CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItcmFtcC1kZWxheSA9IDw2MjUwPjsKKwkJCX07CisJCQkvKiB1c2Ugc3cxY19yZWcgdG8gYWxpZ24gd2l0aCBwZnV6ZTEwMC9wZnV6ZTIwMCAqLworCQkJc3cxY19yZWc6IHN3MWIgeworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDcwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTQ3NTAwMD47CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCQlyZWd1bGF0b3ItcmFtcC1kZWxheSA9IDw2MjUwPjsKKwkJCX07CisKKwkJCXN3Ml9yZWc6IHN3MiB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MjUwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXN3M2FfcmVnOiBzdzMgeworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDkwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MTY1MDAwMD47CisJCQkJcmVndWxhdG9yLWJvb3Qtb247CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisKKwkJCXN3YnN0X3JlZzogc3dic3QgeworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDUwMDAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDUxNTAwMDA+OworCQkJfTsKKworCQkJc252c19yZWc6IHZzbnZzIHsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMDAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYm9vdC1vbjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdnJlZl9yZWc6IHZyZWZkZHIgeworCQkJCXJlZ3VsYXRvci1ib290LW9uOworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2Z2VuMV9yZWc6IHZsZG8xIHsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdmdlbjJfcmVnOiB2bGRvMiB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8ODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwxNTUwMDAwPjsKKwkJCX07CisKKwkJCXZnZW4zX3JlZzogdmNjc2QgeworCQkJCXJlZ3VsYXRvci1taW4tbWljcm92b2x0ID0gPDI4NTAwMDA+OworCQkJCXJlZ3VsYXRvci1tYXgtbWljcm92b2x0ID0gPDMzMDAwMDA+OworCQkJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCQl9OworCisJCQl2Z2VuNF9yZWc6IHYzMyB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8Mjg1MDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQl9OworCisJCQl2Z2VuNV9yZWc6IHZsZG8zIHsKKwkJCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwxODAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItbWF4LW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJCQlyZWd1bGF0b3ItYWx3YXlzLW9uOworCQkJfTsKKworCQkJdmdlbjZfcmVnOiB2bGRvNCB7CisJCQkJcmVndWxhdG9yLW1pbi1taWNyb3ZvbHQgPSA8MTgwMDAwMD47CisJCQkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCQkJcmVndWxhdG9yLWFsd2F5cy1vbjsKKwkJCX07CisJCX07CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zZWN1cml0eS90cG0vc3QzM3pwMjQtaTJjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zZWN1cml0eS90cG0vc3QzM3pwMjQtaTJjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWQxMTVlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NlY3VyaXR5L3RwbS9zdDMzenAyNC1pMmMudHh0CkBAIC0wLDAgKzEsMzYgQEAKKyogU1RNaWNyb2VsZWN0cm9uaWNzIFNBUy4gU1QzM1pQMjQgVFBNIFNvQworCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgInN0LHN0MzN6cDI0LWkyYyIuCistIGNsb2NrLWZyZXF1ZW5jeTogScKyQyB3b3JrIGZyZXF1ZW5jeS4KKy0gcmVnOiBhZGRyZXNzIG9uIHRoZSBidXMKKworT3B0aW9uYWwgU1QzM1pQMjQgUHJvcGVydGllczoKKy0gaW50ZXJydXB0LXBhcmVudDogcGhhbmRsZSBmb3IgdGhlIGludGVycnVwdCBncGlvIGNvbnRyb2xsZXIKKy0gaW50ZXJydXB0czogR1BJTyBpbnRlcnJ1cHQgdG8gd2hpY2ggdGhlIGNoaXAgaXMgY29ubmVjdGVkCistIGxwY3BkLWdwaW9zOiBPdXRwdXQgR1BJTyBwaW4gdXNlZCBmb3IgU1QzM1pQMjQgcG93ZXIgbWFuYWdlbWVudCBEMS9EMiBzdGF0ZS4KK0lmIHNldCwgcG93ZXIgbXVzdCBiZSBwcmVzZW50IHdoZW4gdGhlIHBsYXRmb3JtIGlzIGdvaW5nIGludG8gc2xlZXAvaGliZXJuYXRlIG1vZGUuCisKK09wdGlvbmFsIFNvQyBTcGVjaWZpYyBQcm9wZXJ0aWVzOgorLSBwaW5jdHJsLW5hbWVzOiBDb250YWlucyBvbmx5IG9uZSB2YWx1ZSAtICJkZWZhdWx0Ii4KKy0gcGludGN0cmwtMDogU3BlY2lmaWVzIHRoZSBwaW4gY29udHJvbCBncm91cHMgdXNlZCBmb3IgdGhpcyBjb250cm9sbGVyLgorCitFeGFtcGxlIChmb3IgQVJNLWJhc2VkIEJlYWdsZUJvYXJkIHhNIHdpdGggU1QzM1pQMjQgb24gSTJDMik6CisKKyZpMmMyIHsKKworICAgICAgICBzdGF0dXMgPSAib2theSI7CisKKyAgICAgICAgc3QzM3pwMjQ6IHN0MzN6cDI0QDEzIHsKKworICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAic3Qsc3QzM3pwMjQtaTJjIjsKKworICAgICAgICAgICAgICAgIHJlZyA9IDwweDEzPjsKKyAgICAgICAgICAgICAgICBjbG9jay1mcmVxdWVuY3kgPSA8NDAwMDAwPjsKKworICAgICAgICAgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSA8JmdwaW81PjsKKyAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPDcgSVJRX1RZUEVfTEVWRUxfSElHSD47CisKKyAgICAgICAgICAgICAgICBscGNwZC1ncGlvcyA9IDwmZ3BpbzUgMTUgR1BJT19BQ1RJVkVfSElHSD47CisgICAgICAgIH07Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NlcmlvL2FsbHdpbm5lcixzdW40aS1wczIudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NlcmlvL2FsbHdpbm5lcixzdW40aS1wczIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MmE3NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc2VyaW8vYWxsd2lubmVyLHN1bjRpLXBzMi50eHQKQEAgLTAsMCArMSwyMyBAQAorKiBEZXZpY2UgdHJlZSBiaW5kaW5ncyBmb3IgQWxsd2lubmVyIEExMCwgQTIwIFBTMiBob3N0IGNvbnRyb2xsZXIKKworQTIwIFBTMiBpcyBkdWFsIHJvbGUgY29udHJvbGxlciAoUFMyIGhvc3QgYW5kIFBTMiBkZXZpY2UpLiBUaGVzZSBiaW5kaW5ncyBhcmUKK2ZvciBQUzIgQTEwL0EyMCBob3N0IGNvbnRyb2xsZXIuIElCTSBjb21wbGlhbnQgSUJNIFBTMiBhbmQgQVQtY29tcGF0aWJsZSBrZXlib2FyZAorYW5kIG1vdXNlIGNhbiBiZSBjb25uZWN0ZWQuCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisKKyAtIHJlZyAgICAgICAgICAgICA6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UuCisgLSBjb21wYXRpYmxlICAgICAgOiBTaG91bGQgYmUgYXMgb2YgdGhlIGZvbGxvd2luZzoKKyAgICAgICAgICAgICAgICAgICAgIC0gImFsbHdpbm5lcixzdW40aS1hMTAtcHMyIgorIC0gaW50ZXJydXB0cyAgICAgIDogVGhlIGludGVycnVwdCBsaW5lIGNvbm5lY3RlZCB0byB0aGUgUFMyLgorIC0gY2xvY2tzICAgICAgICAgIDogVGhlIGdhdGUgY2xrIGNvbm5lY3RlZCB0byB0aGUgUFMyLgorCisKK0V4YW1wbGU6CisJcHMyMDogcHMyQDB4MDFjMmEwMDAgeworCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtcHMyIjsKKwkJcmVnID0gPDB4MDFjMmEwMDAgMHg0MDA+OworCQlpbnRlcnJ1cHRzID0gPDAgNjIgND47CisJCWNsb2NrcyA9IDwmYXBiMV9nYXRlcyA2PjsKKwkJc3RhdHVzID0gImRpc2FibGVkIjsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvYy9mc2wvYm1hbi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc29jL2ZzbC9ibWFuLnR4dAppbmRleCA5ZjgwYmY4Li40N2FjODM0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc29jL2ZzbC9ibWFuLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc29jL2ZzbC9ibWFuLnR4dApAQCAtMzYsNiArMzYsMTEgQEAKIAlWYWx1ZSB0eXBlOgk8cHJvcC1lbmNvZGVkLWFycmF5PgogCURlZmluaXRpb246CVN0YW5kYXJkIHByb3BlcnR5LiBUaGUgZXJyb3IgaW50ZXJydXB0CiAKKy0gZnNsLGJtYW4tcG9ydGFscworCVVzYWdlOgkJUmVxdWlyZWQKKwlWYWx1ZSB0eXBlOgk8cGhhbmRsZT4KKwlEZWZpbml0aW9uOglQaGFuZGxlIHRvIHRoaXMgQk1hbiBpbnN0YW5jZSdzIHBvcnRhbHMKKwogLSBmc2wsbGlvZG4KIAlVc2FnZToJCVNlZSBwYW11LnR4dAogCVZhbHVlIHR5cGU6CTxwcm9wLWVuY29kZWQtYXJyYXk+CkBAIC05Niw3ICsxMDEsNyBAQAogCiAJCWJtYW5fZmJwcjogYm1hbi1mYnByIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLGJtYW4tZmJwciI7Ci0JCQlhbGxvYy1yYW5nZXMgPSA8MCAwIDB4ZiAweGZmZmZmZmZmPjsKKwkJCWFsbG9jLXJhbmdlcyA9IDwwIDAgMHgxMCAwPjsKIAkJCXNpemUgPSA8MCAweDEwMDAwMDA+OwogCQkJYWxpZ25tZW50ID0gPDAgMHgxMDAwMDAwPjsKIAkJfTsKQEAgLTEwNCw2ICsxMDksMTAgQEAKIAogVGhlIGV4YW1wbGUgYmVsb3cgc2hvd3MgYSAoUDQwODApIEJNYW4gQ0NTUi1zcGFjZSBub2RlCiAKKwlicG9ydGFsczogYm1hbi1wb3J0YWxzQGZmNDAwMDAwMCB7CisJCS4uLgorCX07CisKIAljcnlwdG9AMzAwMDAwIHsKIAkJLi4uCiAJCWZzbCxibWFuID0gPCZibWFuLCAyPjsKQEAgLTExNSw2ICsxMjQsNyBAQAogCQlyZWcgPSA8MHgzMWEwMDAgMHgxMDAwPjsKIAkJaW50ZXJydXB0cyA9IDwxNiAyIDEgMj47CiAJCWZzbCxsaW9kbiA9IDwweDE3PjsKKwkJZnNsLGJtYW4tcG9ydGFscyA9IDwmYnBvcnRhbHM+OwogCQltZW1vcnktcmVnaW9uID0gPCZibWFuX2ZicHI+OwogCX07CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb2MvZnNsL3FtYW4udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvYy9mc2wvcW1hbi50eHQKaW5kZXggMDYzZTNhMC4uNTU2ZWJiOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvYy9mc2wvcW1hbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvYy9mc2wvcW1hbi50eHQKQEAgLTM4LDYgKzM4LDExIEBACiAJVmFsdWUgdHlwZToJPHByb3AtZW5jb2RlZC1hcnJheT4KIAlEZWZpbml0aW9uOglTdGFuZGFyZCBwcm9wZXJ0eS4gVGhlIGVycm9yIGludGVycnVwdAogCistIGZzbCxxbWFuLXBvcnRhbHMKKwlVc2FnZToJCVJlcXVpcmVkCisJVmFsdWUgdHlwZToJPHBoYW5kbGU+CisJRGVmaW5pdGlvbjoJUGhhbmRsZSB0byB0aGlzIFFNYW4gaW5zdGFuY2UncyBwb3J0YWxzCisKIC0gZnNsLGxpb2RuCiAJVXNhZ2U6CQlTZWUgcGFtdS50eHQKIAlWYWx1ZSB0eXBlOgk8cHJvcC1lbmNvZGVkLWFycmF5PgpAQCAtMTEzLDEzICsxMTgsMTMgQEAKIAogCQlxbWFuX2ZxZDogcW1hbi1mcWQgewogCQkJY29tcGF0aWJsZSA9ICJmc2wscW1hbi1mcWQiOwotCQkJYWxsb2MtcmFuZ2VzID0gPDAgMCAweGYgMHhmZmZmZmZmZj47CisJCQlhbGxvYy1yYW5nZXMgPSA8MCAwIDB4MTAgMD47CiAJCQlzaXplID0gPDAgMHg0MDAwMDA+OwogCQkJYWxpZ25tZW50ID0gPDAgMHg0MDAwMDA+OwogCQl9OwogCQlxbWFuX3BmZHI6IHFtYW4tcGZkciB7CiAJCQljb21wYXRpYmxlID0gImZzbCxxbWFuLXBmZHIiOwotCQkJYWxsb2MtcmFuZ2VzID0gPDAgMCAweGYgMHhmZmZmZmZmZj47CisJCQlhbGxvYy1yYW5nZXMgPSA8MCAwIDB4MTAgMD47CiAJCQlzaXplID0gPDAgMHgyMDAwMDAwPjsKIAkJCWFsaWdubWVudCA9IDwwIDB4MjAwMDAwMD47CiAJCX07CkBAIC0xMjcsNiArMTMyLDEwIEBACiAKIFRoZSBleGFtcGxlIGJlbG93IHNob3dzIGEgKFA0MDgwKSBRTWFuIENDU1Itc3BhY2Ugbm9kZQogCisJcXBvcnRhbHM6IHFtYW4tcG9ydGFsc0BmZjQyMDAwMDAgeworCQkuLi4KKwl9OworCiAJY2xvY2tnZW46IGdsb2JhbC11dGlsaXRpZXNAZTEwMDAgewogCQkuLi4KIAkJc3lzY2xrOiBzeXNjbGsgewpAQCAtMTU0LDYgKzE2Myw3IEBACiAJCXJlZyA9IDwweDMxODAwMCAweDEwMDA+OwogCQlpbnRlcnJ1cHRzID0gPDE2IDIgMSAzPgogCQlmc2wsbGlvZG4gPSA8MHgxNj47CisJCWZzbCxxbWFuLXBvcnRhbHMgPSA8JnFwb3J0YWxzPjsKIAkJbWVtb3J5LXJlZ2lvbiA9IDwmcW1hbl9mcWQgJnFtYW5fcGZkcj47CiAJCWNsb2NrcyA9IDwmcGxhdGZvcm1fcGxsIDE+OwogCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvY2Rucyx4dGZwZ2EtaTJzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9jZG5zLHh0ZnBnYS1pMnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZmQxMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvY2Rucyx4dGZwZ2EtaTJzLnR4dApAQCAtMCwwICsxLDE4IEBACitCaW5kaW5ncyBmb3IgSTJTIGNvbnRyb2xsZXIgYnVpbHQgaW50byB4dGZwZ2EgWHRlbnNhIGJpdHN0cmVhbXMuCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGU6IHNoYWxsIGJlICJjZG5zLHh0ZnBnYS1pMnMiLgorLSByZWc6IG1lbW9yeSByZWdpb24gKGFkZHJlc3MgYW5kIGxlbmd0aCkgd2l0aCBkZXZpY2UgcmVnaXN0ZXJzLgorLSBpbnRlcnJ1cHRzOiBpbnRlcnJ1cHQgZm9yIHRoZSBkZXZpY2UuCistIGNsb2NrczogcGhhbmRsZSB0byB0aGUgY2xrIHVzZWQgYXMgbWFzdGVyIGNsb2NrLiBJMlMgYnVzIGNsb2NrCisgIGlzIGRlcml2ZWQgZnJvbSBpdC4KKworRXhhbXBsZXM6CisKKwlpMnMwOiB4dGZwZ2EtaTJzQDBkMDgwMDAwIHsKKwkJI3NvdW5kLWRhaS1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJjZG5zLHh0ZnBnYS1pMnMiOworCQlyZWcgPSA8MHgwZDA4MDAwMCAweDQwPjsKKwkJaW50ZXJydXB0cyA9IDwyIDE+OworCQljbG9ja3MgPSA8JmNkY2U3MDYgND47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9kZXNpZ253YXJlLWkycy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvZGVzaWdud2FyZS1pMnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYjU0MjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvZGVzaWdud2FyZS1pMnMudHh0CkBAIC0wLDAgKzEsMzEgQEAKK0Rlc2lnbldhcmUgSTJTIGNvbnRyb2xsZXIKKworUmVxdWlyZWQgcHJvcGVydGllczoKKyAtIGNvbXBhdGlibGUgOiBNdXN0IGJlICJzbnBzLGRlc2lnbndhcmUtaTJzIgorIC0gcmVnIDogTXVzdCBjb250YWluIHRoZSBJMlMgY29yZSdzIHJlZ2lzdGVycyBsb2NhdGlvbiBhbmQgbGVuZ3RoCisgLSBjbG9ja3MgOiBQYWlycyBvZiBwaGFuZGxlIGFuZCBzcGVjaWZpZXIgcmVmZXJlbmNpbmcgdGhlIGNvbnRyb2xsZXIncworICAgY2xvY2tzLiBUaGUgY29udHJvbGxlciBleHBlY3RzIG9uZSBjbG9jazogdGhlIGNsb2NrIHVzZWQgYXMgdGhlIHNhbXBsaW5nCisgICByYXRlIHJlZmVyZW5jZSBjbG9jayBzYW1wbGUuCisgLSBjbG9jay1uYW1lcyA6ICJpMnNjbGsiIGZvciB0aGUgc2FtcGxlIHJhdGUgcmVmZXJlbmNlIGNsb2NrLgorIC0gZG1hczogUGFpcnMgb2YgcGhhbmRsZSBhbmQgc3BlY2lmaWVyIGZvciB0aGUgRE1BIGNoYW5uZWxzIHRoYXQgYXJlIHVzZWQgYnkKKyAgIHRoZSBjb3JlLiBUaGUgY29yZSBleHBlY3RzIG9uZSBvciB0d28gZG1hIGNoYW5uZWxzOiBvbmUgZm9yIHRyYW5zbWl0IGFuZAorICAgb25lIGZvciByZWNlaXZlLgorIC0gZG1hLW5hbWVzIDogInR4IiBmb3IgdGhlIHRyYW5zbWl0IGNoYW5uZWwsICJyeCIgZm9yIHRoZSByZWNlaXZlIGNoYW5uZWwuCisKK0ZvciBtb3JlIGRldGFpbHMgb24gdGhlICdkbWEnLCAnZG1hLW5hbWVzJywgJ2Nsb2NrJyBhbmQgJ2Nsb2NrLW5hbWVzJworcHJvcGVydGllcyBwbGVhc2UgY2hlY2s6CisJKiByZXNvdXJjZS1uYW1lcy50eHQKKwkqIGNsb2NrL2Nsb2NrLWJpbmRpbmdzLnR4dAorCSogZG1hL2RtYS50eHQKKworRXhhbXBsZToKKworCXNvY19pMnM6IGkyc0A3ZmY5MDAwMCB7CisJCWNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkycyI7CisJCXJlZyA9IDwweDAgMHg3ZmY5MDAwMCAweDAgMHgxMDAwPjsKKwkJY2xvY2tzID0gPCZzY3BpX2kyc2NsayAwPjsKKwkJY2xvY2stbmFtZXMgPSAiaTJzY2xrIjsKKwkJI3NvdW5kLWRhaS1jZWxscyA9IDwwPjsKKwkJZG1hcyA9IDwmZG1hMCA1PjsKKwkJZG1hLW5hbWVzID0gInR4IjsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2luZ2VuaWMsano0NzQwLWkycy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvaW5nZW5pYyxqejQ3NDAtaTJzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDE0MzMzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL2luZ2VuaWMsano0NzQwLWkycy50eHQKQEAgLTAsMCArMSwyMyBAQAorSW5nZW5pYyBKWjQ3NDAgSTJTIGNvbnRyb2xsZXIKKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZSA6ICJpbmdlbmljLGp6NDc0MC1pMnMiCistIHJlZyA6IEkyUyByZWdpc3RlcnMgbG9jYXRpb24gYW5kIGxlbmd0aAorLSBjbG9ja3MgOiBBSUMgYW5kIEkyUyBQTEwgY2xvY2sgc3BlY2lmaWVycy4KKy0gY2xvY2stbmFtZXM6ICJhaWMiIGFuZCAiaTJzIgorLSBkbWFzOiBETUEgY29udHJvbGxlciBwaGFuZGxlIGFuZCBETUEgcmVxdWVzdCBsaW5lIGZvciBJMlMgVHggYW5kIFJ4IGNoYW5uZWxzCistIGRtYS1uYW1lczogTXVzdCBiZSAidHgiIGFuZCAicngiCisKK0V4YW1wbGU6CisKK2kyczogaTJzQDEwMDIwMDAwIHsKKwljb21wYXRpYmxlID0gImluZ2VuaWMsano0NzQwLWkycyI7CisJcmVnID0gPDB4MTAwMjAwMDAgMHg5ND47CisKKwljbG9ja3MgPSA8JmNndSBKWjQ3NDBfQ0xLX0FJQz4sIDwmY2d1IEpaNDc0MF9DTEtfSTJTUExMPjsKKwljbG9jay1uYW1lcyA9ICJhaWMiLCAiaTJzIjsKKworCWRtYXMgPSA8JmRtYSAyPiwgPCZkbWEgMz47CisJZG1hLW5hbWVzID0gInR4IiwgInJ4IjsKKworfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9tYXg5ODM1N2EudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL21heDk4MzU3YS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdhMTQ5YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9tYXg5ODM1N2EudHh0CkBAIC0wLDAgKzEsMTQgQEAKK01heGltIE1BWDk4MzU3QSBhdWRpbyBEQUMKKworVGhpcyBub2RlIG1vZGVscyB0aGUgTWF4aW0gTUFYOTgzNTdBIERBQy4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKy0gY29tcGF0aWJsZSAgIDogIm1heGltLG1heDk4MzU3YSIKKy0gc2Rtb2RlLWdwaW9zIDogR1BJTyBzcGVjaWZpZXIgZm9yIHRoZSBHUElPIC0+IERBQyBTRE1PREUgcGluCisKK0V4YW1wbGU6CisKK21heDk4MzU3YSB7CisJY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg5ODM1N2EiOworCXNkbW9kZS1ncGlvcyA9IDwmcWNvbV9waW5tdXggMjUgMD47Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL252aWRpYSx0ZWdyYS1hdWRpby1ydDU2NzcudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL252aWRpYSx0ZWdyYS1hdWRpby1ydDU2NzcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NTg5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvbnZpZGlhLHRlZ3JhLWF1ZGlvLXJ0NTY3Ny50eHQKQEAgLTAsMCArMSw2NyBAQAorTlZJRElBIFRlZ3JhIGF1ZGlvIGNvbXBsZXgsIHdpdGggUlQ1Njc3IENPREVDCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUgOiAibnZpZGlhLHRlZ3JhLWF1ZGlvLXJ0NTY3NyIKKy0gY2xvY2tzIDogTXVzdCBjb250YWluIGFuIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIGNsb2NrLW5hbWVzLgorICBTZWUgLi4vY2xvY2tzL2Nsb2NrLWJpbmRpbmdzLnR4dCBmb3IgZGV0YWlscy4KKy0gY2xvY2stbmFtZXMgOiBNdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBlbnRyaWVzOgorICAtIHBsbF9hCisgIC0gcGxsX2Ffb3V0MAorICAtIG1jbGsgKFRoZSBUZWdyYSBjZGV2MS9leHRlcm4xIGNsb2NrLCB3aGljaCBmZWVkcyB0aGUgQ09ERUMncyBtY2xrKQorLSBudmlkaWEsbW9kZWwgOiBUaGUgdXNlci12aXNpYmxlIG5hbWUgb2YgdGhpcyBzb3VuZCBjb21wbGV4LgorLSBudmlkaWEsYXVkaW8tcm91dGluZyA6IEEgbGlzdCBvZiB0aGUgY29ubmVjdGlvbnMgYmV0d2VlbiBhdWRpbyBjb21wb25lbnRzLgorICBFYWNoIGVudHJ5IGlzIGEgcGFpciBvZiBzdHJpbmdzLCB0aGUgZmlyc3QgYmVpbmcgdGhlIGNvbm5lY3Rpb24ncyBzaW5rLAorICB0aGUgc2Vjb25kIGJlaW5nIHRoZSBjb25uZWN0aW9uJ3Mgc291cmNlLiBWYWxpZCBuYW1lcyBmb3Igc291cmNlcyBhbmQKKyAgc2lua3MgYXJlIHRoZSBSVDU2NzcncyBwaW5zIChhcyBkb2N1bWVudGVkIGluIGl0cyBiaW5kaW5nKSwgYW5kIHRoZSBqYWNrcworICBvbiB0aGUgYm9hcmQ6CisKKyAgKiBIZWFkcGhvbmUKKyAgKiBTcGVha2VyCisgICogSGVhZHNldCBNaWMKKyAgKiBJbnRlcm5hbCBNaWMgMQorICAqIEludGVybmFsIE1pYyAyCisKKy0gbnZpZGlhLGkycy1jb250cm9sbGVyIDogVGhlIHBoYW5kbGUgb2YgdGhlIFRlZ3JhIEkyUyBjb250cm9sbGVyIHRoYXQncworICBjb25uZWN0ZWQgdG8gdGhlIENPREVDLgorLSBudmlkaWEsYXVkaW8tY29kZWMgOiBUaGUgcGhhbmRsZSBvZiB0aGUgUlQ1Njc3IGF1ZGlvIGNvZGVjLiBUaGlzIGJpbmRpbmcKKyAgYXNzdW1lcyB0aGF0IEFJRjEgb24gdGhlIENPREVDIGlzIGNvbm5lY3RlZCB0byBUZWdyYS4KKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gbnZpZGlhLGhwLWRldC1ncGlvcyA6IFRoZSBHUElPIHRoYXQgZGV0ZWN0cyBoZWFkcGhvbmVzIGFyZSBwbHVnZ2VkIGluCistIG52aWRpYSxocC1lbi1ncGlvcyA6IFRoZSBHUElPIHRoYXQgZW5hYmxlcyBoZWFkcGhvbmUgYW1wbGlmaWVyCistIG52aWRpYSxtaWMtcHJlc2VudC1ncGlvczogVGhlIEdQSU8gdGhhdCBtaWMgamFjayBpcyBwbHVnZ2VkIGluCistIG52aWRpYSxkbWljLWNsay1lbi1ncGlvcyA6IFRoZSBHUElPIHRoYXQgZ2F0ZXMgRE1JQyBjbG9jayBzaWduYWwKKworRXhhbXBsZToKKworc291bmQgeworCWNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhLWF1ZGlvLXJ0NTY3Ny1yeXUiLAorCSAgICAgICAgIm52aWRpYSx0ZWdyYS1hdWRpby1ydDU2NzciOworCW52aWRpYSxtb2RlbCA9ICJOVklESUEgVGVncmEgUnl1IjsKKworCW52aWRpYSxhdWRpby1yb3V0aW5nID0KKwkJIkhlYWRwaG9uZSIsICJMT1VUMiIsCisJCSJIZWFkcGhvbmUiLCAiTE9VVDEiLAorCQkiSGVhZHNldCBNaWMiLCAiTUlDQklBUzEiLAorCQkiSU4xUCIsICJIZWFkc2V0IE1pYyIsCisJCSJJTjFOIiwgIkhlYWRzZXQgTWljIiwKKwkJIkRNSUMgTDEiLCAiSW50ZXJuYWwgTWljIDEiLAorCQkiRE1JQyBSMSIsICJJbnRlcm5hbCBNaWMgMSIsCisJCSJETUlDIEwyIiwgIkludGVybmFsIE1pYyAyIiwKKwkJIkRNSUMgUjIiLCAiSW50ZXJuYWwgTWljIDIiLAorCQkiU3BlYWtlciIsICJQRE0xTCIsCisJCSJTcGVha2VyIiwgIlBETTFSIjsKKworCW52aWRpYSxpMnMtY29udHJvbGxlciA9IDwmdGVncmFfaTJzMT47CisJbnZpZGlhLGF1ZGlvLWNvZGVjID0gPCZydDU2Nzc+OworCisJbnZpZGlhLGhwLWRldC1ncGlvcyA9IDwmZ3BpbyBURUdSQV9HUElPKFIsIDcpIEdQSU9fQUNUSVZFX0hJR0g+OworCW52aWRpYSxtaWMtcHJlc2VudC1ncGlvcyA9IDwmZ3BpbyBURUdSQV9HUElPKE8sIDUpIEdQSU9fQUNUSVZFX0xPVz47CisJbnZpZGlhLGhwLWVuLWdwaW9zID0gPCZydDU2NzcgMSBHUElPX0FDVElWRV9ISUdIPjsKKwludmlkaWEsZG1pYy1jbGstZW4tZ3Bpb3MgPSA8JnJ0NTY3NyAyIEdQSU9fQUNUSVZFX0hJR0g+OworCisJY2xvY2tzID0gPCZ0ZWdyYV9jYXIgVEVHUkExMjRfQ0xLX1BMTF9BPiwKKwkgICAgICAgICA8JnRlZ3JhX2NhciBURUdSQTEyNF9DTEtfUExMX0FfT1VUMD4sCisJICAgICAgICAgPCZ0ZWdyYV9jYXIgVEVHUkExMjRfQ0xLX0VYVEVSTjE+OworCWNsb2NrLW5hbWVzID0gInBsbF9hIiwgInBsbF9hX291dDAiLCAibWNsayI7Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3BjbTUxMngudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3BjbTUxMngudHh0CmluZGV4IGZhZmY3NWUuLjNhYWUzYjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9wY201MTJ4LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvcGNtNTEyeC50eHQKQEAgLTUsNyArNSw4IEBACiAKIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAKLSAgLSBjb21wYXRpYmxlIDogT25lIG9mICJ0aSxwY201MTIxIiBvciAidGkscGNtNTEyMiIKKyAgLSBjb21wYXRpYmxlIDogT25lIG9mICJ0aSxwY201MTIxIiwgInRpLHBjbTUxMjIiLCAidGkscGNtNTE0MSIgb3IKKyAgICAgICAgICAgICAgICAgInRpLHBjbTUxNDIiCiAKICAgLSByZWcgOiB0aGUgSTJDIGFkZHJlc3Mgb2YgdGhlIGRldmljZSBmb3IgSTJDLCB0aGUgY2hpcCBzZWxlY3QKICAgICAgICAgICBudW1iZXIgZm9yIFNQSS4KQEAgLTE2LDkgKzE3LDE2IEBACiBPcHRpb25hbCBwcm9wZXJ0aWVzOgogCiAgIC0gY2xvY2tzIDogQSBjbG9jayBzcGVjaWZpZXIgZm9yIHRoZSBjbG9jayBjb25uZWN0ZWQgYXMgU0NMSy4gIElmIHRoaXMKLSAgICBpcyBhYnNlbnQgdGhlIGRldmljZSB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gY2xvY2sgZnJvbSBCQ0xLLgorICAgIGlzIGFic2VudCB0aGUgZGV2aWNlIHdpbGwgYmUgY29uZmlndXJlZCB0byBjbG9jayBmcm9tIEJDTEsuICBJZiBwbGwtaW4KKyAgICBhbmQgcGxsLW91dCBhcmUgc3BlY2lmaWVkIGluIGFkZGl0aW9uIHRvIGEgY2xvY2ssIHRoZSBkZXZpY2UgaXMKKyAgICBjb25maWd1cmVkIHRvIGFjY2VwdCBjbG9jayBpbnB1dCBvbiBhIHNwZWNpZmllZCBncGlvIHBpbi4KIAotRXhhbXBsZToKKyAgLSBwbGwtaW4sIHBsbC1vdXQgOiBncGlvIHBpbnMgdXNlZCB0byBjb25uZWN0IHRoZSBwbGwgdXNpbmcgPDE+CisgICAgdGhyb3VnaCA8Nj4uICBUaGUgZGV2aWNlIHdpbGwgYmUgY29uZmlndXJlZCBmb3IgY2xvY2sgaW5wdXQgb24gdGhlCisgICAgZ2l2ZW4gcGxsLWluIHBpbiBhbmQgUExMIG91dHB1dCBvbiB0aGUgZ2l2ZW4gcGxsLW91dCBwaW4uICBBbgorICAgIGV4dGVybmFsIGNvbm5lY3Rpb24gZnJvbSB0aGUgcGxsLW91dCBwaW4gdG8gdGhlIFNDTEsgcGluIGlzIGFzc3VtZWQuCisKK0V4YW1wbGVzOgogCiAJcGNtNTEyMjogcGNtNTEyMkA0YyB7CiAJCWNvbXBhdGlibGUgPSAidGkscGNtNTEyMiI7CkBAIC0yOCwzICszNiwxNyBAQAogCQlEVkRELXN1cHBseSA9IDwmcmVnXzF2OD47CiAJCUNQVkRELXN1cHBseSA9IDwmcmVnXzN2Mz47CiAJfTsKKworCisJcGNtNTE0MjogcGNtNTE0MkA0YyB7CisJCWNvbXBhdGlibGUgPSAidGkscGNtNTE0MiI7CisJCXJlZyA9IDwweDRjPjsKKworCQlBVkRELXN1cHBseSA9IDwmcmVnXzN2M19hbmFsb2c+OworCQlEVkRELXN1cHBseSA9IDwmcmVnXzF2OD47CisJCUNQVkRELXN1cHBseSA9IDwmcmVnXzN2Mz47CisKKwkJY2xvY2tzID0gPCZzY2s+OworCQlwbGwtaW4gPSA8Mz47CisJCXBsbC1vdXQgPSA8Nj47CisJfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9zYW1zdW5nLWkycy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvc2Ftc3VuZy1pMnMudHh0CmluZGV4IGQxODgyOTYuLjA5ZTBlMTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9zYW1zdW5nLWkycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3NhbXN1bmctaTJzLnR4dApAQCAtMzMsNiArMzMsMjUgQEAKICAgImlpcyIgaXMgdGhlIGkycyBidXMgY2xvY2sgYW5kIGkyc19vcGNsazAsIGkyc19vcGNsazEgYXJlIHNvdXJjZXMgb2YgdGhlIHJvb3QKICAgY2xrLiBpMnMwIGhhcyBpbnRlcm5hbCBtdXggdG8gc2VsZWN0IHRoZSBzb3VyY2Ugb2Ygcm9vdCBjbGsgYW5kIGkyczEgYW5kIGkyczIKICAgZG9lc24ndCBoYXZlIGFueSBzdWNoIG11eC4KKy0gI2Nsb2NrLWNlbGxzOiBzaG91bGQgYmUgMSwgdGhpcyBwcm9wZXJ0eSBtdXN0IGJlIHByZXNlbnQgaWYgdGhlIEkyUyBkZXZpY2UKKyAgaXMgYSBjbG9jayBwcm92aWRlciBpbiB0ZXJtcyBvZiB0aGUgY29tbW9uIGNsb2NrIGJpbmRpbmdzLCBkZXNjcmliZWQgaW4KKyAgLi4vY2xvY2svY2xvY2stYmluZGluZ3MudHh0LgorLSBjbG9jay1vdXRwdXQtbmFtZXM6IGZyb20gdGhlIGNvbW1vbiBjbG9jayBiaW5kaW5ncywgbmFtZXMgb2YgdGhlIENEQ0xLCisgIEkyUyBvdXRwdXQgY2xvY2tzLCBzdWdnZXN0ZWQgdmFsdWVzIGFyZSAiaTJzX2NkY2xrMCIsICJpMnNfY2RjbGsxIiwKKyAgImkyc19jZGNsazMiIGZvciB0aGUgSTJTMCwgSTJTMSwgSTJTMiBkZXZpY2VzIHJlY3BlY3RpdmVseS4KKworVGhlcmUgYXJlIGZvbGxvd2luZyBjbG9ja3MgYXZhaWxhYmxlIGF0IHRoZSBJMlMgZGV2aWNlIG5vZGVzOgorIENMS19JMlNfQ0RDTEsgICAgLSB0aGUgQ0RDTEsgKENPREVDTEtPKSBnYXRlIGNsb2NrLAorIENMS19JMlNfUkNMS19QU1IgLSB0aGUgUkNMSyBwcmVzY2FsZXIgZGl2aWRlciBjbG9jayAoY29ycmVzcG9uZGluZyB0byB0aGUKKwkJICAgIElJU1BTUiByZWdpc3RlciksCisgQ0xLX0kyU19SQ0xLX1NSQyAtIHRoZSBSQ0xLU1JDIG11eCBjbG9jayAoY29ycmVzcG9uZGluZyB0byBSQ0xLU1JDIGJpdCBpbgorCQkgICAgSUlTTU9EIHJlZ2lzdGVyKS4KKworUmVmZXIgdG8gdGhlIFNvQyBkYXRhc2hlZXQgZm9yIGF2YWlsYWJpbGl0eSBvZiB0aGUgYWJvdmUgY2xvY2tzLgorVGhlIENMS19JMlNfUkNMS19QU1IgYW5kIENMS19JMlNfUkNMS19TUkMgY2xvY2tzIGFyZSB1c3VhbGx5IG9ubHkgYXZhaWxhYmxlCitpbiB0aGUgSUlTIE11bHRpIEF1ZGlvIEludGVyZmFjZSAoSTJTMCkuCitOb3RlOiBPbGQgRFRzIG1heSBub3QgaGF2ZSB0aGUgI2Nsb2NrLWNlbGxzLCBjbG9jay1vdXRwdXQtbmFtZXMgcHJvcGVydGllcworYW5kIHRoZW4gbm90IHVzZSB0aGUgSTJTIG5vZGUgYXMgYSBjbG9jayBzdXBwbGllci4KIAogT3B0aW9uYWwgU29DIFNwZWNpZmljIFByb3BlcnRpZXM6CiAKQEAgLTQxLDYgKzYwLDcgQEAKIC0gcGluY3RybC0wOiBTaG91bGQgc3BlY2lmeSBwaW4gY29udHJvbCBncm91cHMgdXNlZCBmb3IgdGhpcyBjb250cm9sbGVyLgogLSBwaW5jdHJsLW5hbWVzOiBTaG91bGQgY29udGFpbiBvbmx5IG9uZSB2YWx1ZSAtICJkZWZhdWx0Ii4KIAorCiBFeGFtcGxlOgogCiBpMnMwOiBpMnNAMDM4MzAwMDAgewpAQCAtNTQsNiArNzQsOCBAQAogCQk8JmNsb2NrX2F1ZHNzIEVYWU5PU19JMlNfQlVTPiwKIAkJPCZjbG9ja19hdWRzcyBFWFlOT1NfU0NMS19JMlM+OwogCWNsb2NrLW5hbWVzID0gImlpcyIsICJpMnNfb3BjbGswIiwgImkyc19vcGNsazEiOworCSNjbG9jay1jZWxsczsKKwljbG9jay1vdXRwdXQtbmFtZXMgPSAiaTJzX2NkY2xrMCI7CiAJc2Ftc3VuZyxpZG1hLWFkZHIgPSA8MHgwMzAwMDAwMD47CiAJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAlwaW5jdHJsLTAgPSA8JmkyczBfYnVzPjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9zaW1wbGUtY2FyZC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvc2ltcGxlLWNhcmQudHh0CmluZGV4IGMzY2JhNjAwLi43M2JmMzE0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvc2ltcGxlLWNhcmQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9zaW1wbGUtY2FyZC50eHQKQEAgLTc1LDYgKzc1LDExIEBACiAJCQkJCSAgaXQgY2FuIGJlIHNwZWNpZmllZCB2aWEgImNsb2NrcyIgaWYgc3lzdGVtIGhhcwogCQkJCQkgIGNsb2NrIG5vZGUgKD0gY29tbW9uIGNsb2NrKSwgb3IgInN5c3RlbS1jbG9jay1mcmVxdWVuY3kiCiAJCQkJCSAgKGlmIHN5c3RlbSBkb2Vucyd0IHN1cHBvcnQgY29tbW9uIGNsb2NrKQorCQkJCQkgIElmIGEgY2xvY2sgaXMgc3BlY2lmaWVkLCBpdCBpcworCQkJCQkgIGVuYWJsZWQgd2l0aCBjbGtfcHJlcGFyZV9lbmFibGUoKQorCQkJCQkgIGluIGRhaSBzdGFydHVwKCkgYW5kIGRpc2FibGVkIHdpdGgKKwkJCQkJICBjbGtfZGlzYWJsZV91bnByZXBhcmUoKSBpbiBkYWkKKwkJCQkJICBzaHV0ZG93bigpLgogCiBFeGFtcGxlIDEgLSBzaW5nbGUgREFJIGxpbms6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC9zdCxzdGEzMngudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3N0LHN0YTMyeC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU1ZGUzYWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvc3Qsc3RhMzJ4LnR4dApAQCAtMCwwICsxLDkyIEBACitTVEEzMlggYXVkaW8gQ09ERUMKKworVGhlIGRyaXZlciBmb3IgdGhpcyBkZXZpY2Ugb25seSBzdXBwb3J0cyBJMkMuCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CisKKyAgLSBjb21wYXRpYmxlOiAic3Qsc3RhMzJ4IgorICAtIHJlZzogdGhlIEkyQyBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgZm9yIEkyQworICAtIHJlc2V0LWdwaW9zOiBhIEdQSU8gc3BlYyBmb3IgdGhlIHJlc2V0IHBpbi4gSWYgc3BlY2lmaWVkLCBpdCB3aWxsIGJlCisJCSBkZWFzc2VydGVkIGJlZm9yZSBjb21tdW5pY2F0aW9uIHRvIHRoZSBjb2RlYyBzdGFydHMuCisKKyAgLSBwb3dlci1kb3duLWdwaW9zOiBhIEdQSU8gc3BlYyBmb3IgdGhlIHBvd2VyIGRvd24gcGluLiBJZiBzcGVjaWZpZWQsCisJCSAgICAgIGl0IHdpbGwgYmUgZGVhc3NlcnRlZCBiZWZvcmUgY29tbXVuaWNhdGlvbiB0byB0aGUgY29kZWMKKwkJICAgICAgc3RhcnRzLgorCisgIC0gVmRkYS1zdXBwbHk6IHJlZ3VsYXRvciBzcGVjLCBwcm92aWRpbmcgMy4zVgorICAtIFZkZDMtc3VwcGx5OiByZWd1bGF0b3Igc3BlYywgcHJvdmlkaW5nIDMuM1YKKyAgLSBWY2Mtc3VwcGx5OiByZWd1bGF0b3Igc3BlYywgcHJvdmlkaW5nIDVWIC0gMjZWCisKK09wdGlvbmFsIHByb3BlcnRpZXM6CisKKyAgLSAgc3Qsb3V0cHV0LWNvbmY6IG51bWJlciwgU2VsZWN0cyB0aGUgb3V0cHV0IGNvbmZpZ3VyYXRpb246CisJMDogMi1jaGFubmVsIChmdWxsLWJyaWRnZSkgcG93ZXIsIDItY2hhbm5lbCBkYXRhLW91dAorCTE6IDIgKGhhbGYtYnJpZGdlKS4gMSAoZnVsbC1icmlkZ2UpIG9uLWJvYXJkIHBvd2VyCisJMjogMiBDaGFubmVsIChGdWxsLUJyaWRnZSkgUG93ZXIsIDEgQ2hhbm5lbCBGRlgKKwkzOiAxIENoYW5uZWwgTW9uby1QYXJhbGxlbAorCUlmIHBhcmFtZXRlciBpcyBtaXNzaW5nLCBtb2RlIDAgd2lsbCBiZSBlbmFibGVkLgorCVRoaXMgcHJvcGVydHkgaGFzIHRvIGJlIHNwZWNpZmllZCBhcyAnL2JpdHMvIDgnIHZhbHVlLgorCisgIC0gIHN0LGNoMS1vdXRwdXQtbWFwcGluZzogQ2hhbm5lbCAxIG91dHB1dCBtYXBwaW5nCisgIC0gIHN0LGNoMi1vdXRwdXQtbWFwcGluZzogQ2hhbm5lbCAyIG91dHB1dCBtYXBwaW5nCisgIC0gIHN0LGNoMy1vdXRwdXQtbWFwcGluZzogQ2hhbm5lbCAzIG91dHB1dCBtYXBwaW5nCisJMDogQ2hhbm5lbCAxCisJMTogQ2hhbm5lbCAyCisJMjogQ2hhbm5lbCAzCisJSWYgcGFyYW1ldGVyIGlzIG1pc3NpbmcsIGNoYW5uZWwgMSBpcyBjaG9zZW4uCisJVGhpcyBwcm9wZXJ0aWVzIGhhdmUgdG8gYmUgc3BlY2lmaWVkIGFzICcvYml0cy8gOCcgdmFsdWVzLgorCisgIC0gIHN0LHRoZXJtYWwtd2FybmluZy1yZWNvdmVyOgorCUlmIHByZXNlbnQsIHRoZXJtYWwgd2FybmluZyByZWNvdmVyeSBpcyBlbmFibGVkLgorCisgIC0gIHN0LHRoZXJtYWwtd2FybmluZy1hZGp1c3RtZW50OgorCUlmIHByZXNlbnQsIHRoZXJtYWwgd2FybmluZyBhZGp1c3RtZW50IGlzIGVuYWJsZWQuCisKKyAgLSAgc3QsZmF1bHQtZGV0ZWN0LXJlY292ZXJ5OgorCUlmIHByZXNlbnQsIHRoZW4gZmF1bHQgcmVjb3Zlcnkgd2lsbCBiZSBlbmFibGVkLgorCisgIC0gIHN0LGRyb3AtY29tcGVuc2F0aW9uLW5zOiBudW1iZXIKKwlPbmx5IHJlcXVpcmVkIGZvciAic3QsZmZ4LXBvd2VyLW91dHB1dC1tb2RlIiA9PQorCSJ2YXJpYWJsZS1kcm9wLWNvbXBlbnNhdGlvbiIuCisJU3BlY2lmaWVzIHRoZSBkcm9wIGNvbXBlbnNhdGlvbiBpbiBuYW5vc2Vjb25kcy4KKwlUaGUgdmFsdWUgbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YgMC4uMzAwLCBhbmQgb25seQorCW11bHRpcGxlcyBvZiAyMCBhcmUgYWxsb3dlZC4gRGVmYXVsdCBpcyAxNDBucy4KKworICAtICBzdCxtYXgtcG93ZXItdXNlLW1wY2M6CisJSWYgcHJlc2VudCwgdGhlbiBNUENDIGJpdHMgYXJlIHVzZWQgZm9yIE1QQyBjb2VmZmljaWVudHMsCisJb3RoZXJ3aXNlIHN0YW5kYXJkIE1QQyBjb2VmZmljaWVudHMgYXJlIHVzZWQuCisKKyAgLSAgc3QsbWF4LXBvd2VyLWNvcnI6CisJSWYgcHJlc2VudCwgcG93ZXIgYnJpZGdlIGNvcnJlY3Rpb24gZm9yIFRIRCByZWR1Y3Rpb24gbmVhciBtYXhpbXVtCisJcG93ZXIgb3V0cHV0IGlzIGVuYWJsZWQuCisKKyAgLSAgc3QsYW0tcmVkdWN0aW9uLW1vZGU6CisJSWYgcHJlc2VudCwgRkZYIG1vZGUgcnVucyBpbiBBTSByZWR1Y3Rpb24gbW9kZSwgb3RoZXJ3aXNlIG5vcm1hbAorCUZGWCBtb2RlIGlzIHVzZWQuCisKKyAgLSAgc3Qsb2RkLXB3bS1zcGVlZC1tb2RlOgorCUlmIHByZXNlbnQsIFBXTSBzcGVlZCBtb2RlIHJ1biBvbiBvZGQgc3BlZWQgbW9kZSAoMzQxLjMga0h6KSBvbiBhbGwKKwljaGFubmVscy4gSWYgbm90IHByZXNlbnQsIG5vcm1hbCBQV00gc3BwZWQgbW9kZSAoMzg0IGtIeikgd2lsbCBiZSB1c2VkLgorCisgIC0gIHN0LGludmFsaWQtaW5wdXQtZGV0ZWN0LW11dGU6CisJSWYgcHJlc2VudCwgYXV0b21hdGljIGludmFsaWQgaW5wdXQgZGV0ZWN0IG11dGUgaXMgZW5hYmxlZC4KKworRXhhbXBsZToKKworY29kZWM6IHN0YTMyeEAzOCB7CisJY29tcGF0aWJsZSA9ICJzdCxzdGEzMngiOworCXJlZyA9IDwweDFjPjsKKwlyZXNldC1ncGlvcyA9IDwmZ3BpbzEgMTkgMD47CisJcG93ZXItZG93bi1ncGlvcyA9IDwmZ3BpbzEgMTYgMD47CisJc3Qsb3V0cHV0LWNvbmYgPSAvYml0cy8gOCAgPDB4Mz47CS8vIHNldCBvdXRwdXQgdG8gMi1jaGFubmVsCisJCQkJCQkvLyAoZnVsbC1icmlkZ2UpIHBvd2VyLAorCQkJCQkJLy8gMi1jaGFubmVsIGRhdGEtb3V0CisJc3QsY2gxLW91dHB1dC1tYXBwaW5nID0gL2JpdHMvIDggPDA+OwkvLyBzZXQgY2hhbm5lbCAxIG91dHB1dCBjaCAxCisJc3QsY2gyLW91dHB1dC1tYXBwaW5nID0gL2JpdHMvIDggPDA+OwkvLyBzZXQgY2hhbm5lbCAyIG91dHB1dCBjaCAxCisJc3QsY2gzLW91dHB1dC1tYXBwaW5nID0gL2JpdHMvIDggPDA+OwkvLyBzZXQgY2hhbm5lbCAzIG91dHB1dCBjaCAxCisJc3QsbWF4LXBvd2VyLWNvcnJlY3Rpb247CQkvLyBlbmFibGVzIHBvd2VyIGJyaWRnZQorCQkJCQkJLy8gY29ycmVjdGlvbiBmb3IgVEhEIHJlZHVjdGlvbgorCQkJCQkJLy8gbmVhciBtYXhpbXVtIHBvd2VyIG91dHB1dAorCXN0LGludmFsaWQtaW5wdXQtZGV0ZWN0LW11dGU7CQkvLyBtdXRlIGlmIG5vIHZhbGlkIGRpZ2l0YWwKKwkJCQkJCS8vIGF1ZGlvIHNpZ25hbCBpcyBwcm92aWRlZC4KK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvdGx2MzIwYWljM3gudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3RsdjMyMGFpYzN4LnR4dAppbmRleCA1ZTYwNDBjLi40N2EyMTNjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvdGx2MzIwYWljM3gudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC90bHYzMjBhaWMzeC50eHQKQEAgLTksNiArOSw3IEBACiAgICAgInRpLHRsdjMyMGFpYzMzIiAtIFRMVjMyMEFJQzMzCiAgICAgInRpLHRsdjMyMGFpYzMwMDciIC0gVExWMzIwQUlDMzAwNwogICAgICJ0aSx0bHYzMjBhaWMzMTA2IiAtIFRMVjMyMEFJQzMxMDYKKyAgICAidGksdGx2MzIwYWljMzEwNCIgLSBUTFYzMjBBSUMzMTA0CiAKIAogLSByZWcgLSA8aW50PiAtICBJMkMgc2xhdmUgYWRkcmVzcwpAQCAtMTgsNiArMTksNyBAQAogCiAtIGdwaW8tcmVzZXQgLSBncGlvIHBpbiBudW1iZXIgdXNlZCBmb3IgY29kZWMgcmVzZXQKIC0gYWkzeC1ncGlvLWZ1bmMgLSA8YXJyYXkgb2YgMiBpbnQ+IC0gQUlDM1hfR1BJTzEgJiBBSUMzWF9HUElPMiBGdW5jdGlvbmFsaXR5CisJCQkJICAgIC0gTm90IHN1cHBvcnRlZCBvbiB0bHYzMjBhaWMzMTA0CiAtIGFpM3gtbWljYmlhcy12ZyAtIE1pY0JpYXMgVm9sdGFnZSByZXF1aXJlZC4KIAkxIC0gTUlDQklBUyBvdXRwdXQgaXMgcG93ZXJlZCB0byAyLjBWLAogCTIgLSBNSUNCSUFTIG91dHB1dCBpcyBwb3dlcmVkIHRvIDIuNVYsCkBAIC0zNiw3ICszOCwxMyBAQAogICAqIEhQTENPTQogICAqIEhQUkNPTQogCi1DT0RFQyBpbnB1dCBwaW5zOgorQ09ERUMgaW5wdXQgcGlucyBmb3IgVExWMzIwQUlDMzEwNDoKKyAgKiBNSUMyTAorICAqIE1JQzJSCisgICogTElORTFMCisgICogTElORTFSCisKK0NPREVDIGlucHV0IHBpbnMgZm9yIG90aGVyIGNvbXBhdGlibGUgY29kZWNzOgogICAqIE1JQzNMCiAgICogTUlDM1IKICAgKiBMSU5FMUwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC90czNhMjI3ZS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc291bmQvdHMzYTIyN2UudHh0CmluZGV4IGU4YmYyM2UuLmE4MzY4ODEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC90czNhMjI3ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3RzM2EyMjdlLnR4dApAQCAtMTMsNiArMTMsMTEgQEAKICAtIGludGVycnVwdC1wYXJlbnQ6CVRoZSBwYXJlbnQgaW50ZXJydXB0IGNvbnRyb2xsZXIKICAtIGludGVycnVwdHM6CQlJbnRlcnJ1cHQgbnVtYmVyIGZvciAvSU5UIHBpbiBmcm9tIHRoZSAyMjdlCiAKK09wdGlvbmFsIHByb3BlcmllczoKKyAtIHRpLG1pY2JpYXM6ICAgSW50ZW5kZWQgTUlDQklBUyB2b2x0YWdlIChkYXRhc2hlZXQgc2VjdGlvbiA5LjYuNykuCisgICAgICBTZWxlY3QgMC8xLzIvMy80LzUvNi83IHRvIHNwZWNpZnkgTUFDQklBUyB2b2x0YWdlCisgICAgICAyLjFWLzIuMlYvMi4zVi8yLjRWLzIuNVYvMi42Vi8yLjdWLzIuOFYKKyAgICAgIERlZmF1bHQgdmFsdWUgaXMgIjEiICgyLjJWKS4KIAogRXhhbXBsZXM6CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zb3VuZC93bTg5MDQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3dtODkwNC50eHQKaW5kZXggZTk5ZjQwOS4uNjZiZjI2MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3dtODkwNC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NvdW5kL3dtODkwNC50eHQKQEAgLTMsNyArMyw3IEBACiBUaGlzIGRldmljZSBzdXBwb3J0cyBJMkMgb25seS4KIAogUmVxdWlyZWQgcHJvcGVydGllczoKLSAgLSBjb21wYXRpYmxlOiAid2xmLHdtODkwNCIKKyAgLSBjb21wYXRpYmxlOiAid2xmLHdtODkwNCIgb3IgIndsZix3bTg5MTIiCiAgIC0gcmVnOiB0aGUgSTJDIGFkZHJlc3Mgb2YgdGhlIGRldmljZS4KICAgLSBjbG9jay1uYW1lczogIm1jbGsiCiAgIC0gY2xvY2tzOiByZWZlcmVuY2UgdG8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc2gtbXNpb2YudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9zaC1tc2lvZi50eHQKaW5kZXggZDExYzM3Mi4uNGMzODhiYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9zaC1tc2lvZi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9zaC1tc2lvZi50eHQKQEAgLTMwLDYgKzMwLDIyIEBACiAJCQkgc3BlY2lmaWVycywgb25lIGZvciB0cmFuc21pc3Npb24sIGFuZCBvbmUgZm9yCiAJCQkgcmVjZXB0aW9uLgogLSBkbWEtbmFtZXMgICAgICAgICAgICA6IE11c3QgY29udGFpbiBhIGxpc3Qgb2YgdHdvIERNQSBuYW1lcywgInR4IiBhbmQgInJ4Ii4KKy0gcmVuZXNhcyxkdGRsICAgICAgICAgOiBkZWxheSBzeW5jIHNpZ25hbCAoc2V0dXApIGluIHRyYW5zbWl0IG1vZGUuCisJCQkgTXVzdCBjb250YWluIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKwkJCSAwICAgKG5vIGJpdCBkZWxheSkKKwkJCSA1MCAgKDAuNS1jbG9jay1jeWNsZSBkZWxheSkKKwkJCSAxMDAgKDEtY2xvY2stY3ljbGUgZGVsYXkpCisJCQkgMTUwICgxLjUtY2xvY2stY3ljbGUgZGVsYXkpCisJCQkgMjAwICgyLWNsb2NrLWN5Y2xlIGRlbGF5KQorCistIHJlbmVzYXMsc3luY2RsICAgICAgIDogZGVsYXkgc3luYyBzaWduYWwgKGhvbGQpIGluIHRyYW5zbWl0IG1vZGUuCisJCQkgTXVzdCBjb250YWluIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKwkJCSAwICAgKG5vIGJpdCBkZWxheSkKKwkJCSA1MCAgKDAuNS1jbG9jay1jeWNsZSBkZWxheSkKKwkJCSAxMDAgKDEtY2xvY2stY3ljbGUgZGVsYXkpCisJCQkgMTUwICgxLjUtY2xvY2stY3ljbGUgZGVsYXkpCisJCQkgMjAwICgyLWNsb2NrLWN5Y2xlIGRlbGF5KQorCQkJIDMwMCAoMy1jbG9jay1jeWNsZSBkZWxheSkKIAogT3B0aW9uYWwgcHJvcGVydGllcywgZGVwcmVjYXRlZCBmb3Igc29jdHlwZS1zcGVjaWZpYyBiaW5kaW5nczoKIC0gcmVuZXNhcyx0eC1maWZvLXNpemUgOiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgdHggZmlmbyBzaXplIGdpdmVuIGluIHdvcmRzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL3NwaS1zaXJmLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc3BpLXNpcmYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjN2FkYjhmCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9zcGktc2lyZi50eHQKQEAgLTAsMCArMSw0MSBAQAorKiBDU1IgU2lSRnByaW1hSUkgU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGUgOiBTaG91bGQgYmUgInNpcmYscHJpbWEyLXNwaSIKKy0gcmVnIDogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIGRldmljZQorLSBpbnRlcnJ1cHRzIDogU2hvdWxkIGNvbnRhaW4gU1BJIGludGVycnVwdAorLSByZXNldHM6IHBoYW5kbGUgdG8gdGhlIHJlc2V0IGNvbnRyb2xsZXIgYXNzZXJ0aW5nIHRoaXMgZGV2aWNlIGluCisgICAgICAgICAgcmVzZXQKKyAgU2VlIC4uL3Jlc2V0L3Jlc2V0LnR4dCBmb3IgZGV0YWlscy4KKy0gZG1hcyA6IE11c3QgY29udGFpbiBhbiBlbnRyeSBmb3IgZWFjaCBlbnRyeSBpbiBjbG9jay1uYW1lcy4KKyAgU2VlIC4uL2RtYS9kbWEudHh0IGZvciBkZXRhaWxzLgorLSBkbWEtbmFtZXMgOiBNdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBlbnRyaWVzOgorICAtIHJ4CisgIC0gdHgKKy0gY2xvY2tzIDogTXVzdCBjb250YWluIGFuIGVudHJ5IGZvciBlYWNoIGVudHJ5IGluIGNsb2NrLW5hbWVzLgorICBTZWUgLi4vY2xvY2tzL2Nsb2NrLWJpbmRpbmdzLnR4dCBmb3IgZGV0YWlscy4KKworLSAjYWRkcmVzcy1jZWxsczogTnVtYmVyIG9mIGNlbGxzIHJlcXVpcmVkIHRvIGRlZmluZSBhIGNoaXAgc2VsZWN0CisgICAgICAgICAgICAgICAgICBhZGRyZXNzIG9uIHRoZSBTUEkgYnVzLiBTaG91bGQgYmUgc2V0IHRvIDEuCistICNzaXplLWNlbGxzOiAgICBTaG91bGQgYmUgemVyby4KKworT3B0aW9uYWwgcHJvcGVydGllczoKKy0gc3BpLW1heC1mcmVxdWVuY3k6IFNwZWNpZmllcyBtYXhpbXVtIFNQSSBjbG9jayBmcmVxdWVuY3ksCisgICAgICAgICAgICAgICAgICAgICBVbml0cyAtIEh6LiBEZWZpbml0aW9uIGFzIHBlcgorICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9zcGktYnVzLnR4dAorLSBjcy1ncGlvczogICAgIHNob3VsZCBzcGVjaWZ5IEdQSU9zIHVzZWQgZm9yIGNoaXBzZWxlY3RzLgorCitFeGFtcGxlOgorCitzcGkwOiBzcGlAYjAwZDAwMDAgeworCWNvbXBhdGlibGUgPSAic2lyZixwcmltYTItc3BpIjsKKwlyZWcgPSA8MHhiMDBkMDAwMCAweDEwMDAwPjsKKwlpbnRlcnJ1cHRzID0gPDE1PjsKKwlkbWFzID0gPCZkbWFjMSA5PiwKKwkJPCZkbWFjMSA0PjsKKwlkbWEtbmFtZXMgPSAicngiLCAidHgiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDA+OworCWNsb2NrcyA9IDwmY2xrcyAxOT47CisJcmVzZXRzID0gPCZyc3RjIDI2PjsKK307CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3Mvc3BpL3NwaS1zdC1zc2MudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9zcGktc3Qtc3NjLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTU0OTU5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9zcGktc3Qtc3NjLnR4dApAQCAtMCwwICsxLDQwIEBACitTVE1pY3JvZWxlY3Ryb25pY3MgU1NDIChTUEkpIENvbnRyb2xsZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlCTogInN0LGNvbW1zLXNzYzQtc3BpIgorLSByZWcJCTogT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIGRldmljZSdzIHJlZ2lzdGVyIHNldAorLSBpbnRlcnJ1cHRzCTogVGhlIGludGVycnVwdCBzcGVjaWZpZXIKKy0gY2xvY2stbmFtZXMJOiBNdXN0IGNvbnRhaW4gInNzYyIKKy0gY2xvY2tzCTogTXVzdCBjb250YWluIGFuIGVudHJ5IGZvciBlYWNoIG5hbWUgaW4gY2xvY2stbmFtZXMKKwkJICAgIFNlZSAuLi9jbGsvKgorLSBwaW5jdHJsLW5hbWVzCTogVXNlcyAiZGVmYXVsdCIsIGNhbiB1c2UgInNsZWVwIiBpZiBwcm92aWRlZAorCQkgICAgU2VlIC4uL3BpbmN0cmwvcGluY3RybC1iaW5kaW5nLnR4dAorCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorLSBjcy1ncGlvcwk6IExpc3Qgb2YgR1BJTyBjaGlwIHNlbGVjdHMKKwkJICAgIFNlZSAuLi9zcGkvc3BpLWJ1cy50eHQKKworQ2hpbGQgbm9kZXMgcmVwcmVzZW50IGRldmljZXMgb24gdGhlIFNQSSBidXMKKyAgU2VlIC4uL3NwaS9zcGktYnVzLnR4dAorCitFeGFtcGxlOgorCXNwaUA5ODQwMDAwIHsKKwkJY29tcGF0aWJsZQk9ICJzdCxjb21tcy1zc2M0LXNwaSI7CisJCXJlZwkJPSA8MHg5ODQwMDAwIDB4MTEwPjsKKwkJaW50ZXJydXB0cwk9IDxHSUNfU1BJIDExMiBJUlFfVFlQRV9MRVZFTF9ISUdIPjsKKwkJY2xvY2tzCQk9IDwmY2xrX3NfYzBfZmxleGdlbiBDTEtfRVhUMkZfQTk+OworCQljbG9jay1uYW1lcwk9ICJzc2MiOworCQlwaW5jdHJsLTAJPSA8JnBpbmN0cmxfc3BpMF9kZWZhdWx0PjsKKwkJcGluY3RybC1uYW1lcwk9ICJkZWZhdWx0IjsKKwkJY3MtZ3Bpb3MJPSA8JnBpbzE3IDUgMD47CisJCSNhZGRyZXNzLWNlbGxzCT0gPDE+OworCQkjc2l6ZS1jZWxscwk9IDwwPjsKKworCQlzdDk1aGZAMHsKKwkJCWNvbXBhdGlibGUJCT0gInN0LHN0OTVoZiI7CisJCQlyZWcJCQk9IDwwPjsKKwkJCXNwaS1tYXgtZnJlcXVlbmN5CT0gPDEwMDAwMDA+OworCQkJaW50ZXJydXB0cwkJPSA8MiBJUlFfVFlQRV9FREdFX0ZBTExJTkc+OworCQl9OworCX07CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmVuZG9yLXByZWZpeGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92ZW5kb3ItcHJlZml4ZXMudHh0CmluZGV4IGMyYTQ4ZmYuLjcwNzU2OTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92ZW5kb3ItcHJlZml4ZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92ZW5kb3ItcHJlZml4ZXMudHh0CkBAIC01NSw2ICs1NSw3IEBACiBlcGZsCUVjb2xlIFBvbHl0ZWNobmlxdWUgRsOpZMOpcmFsZSBkZSBMYXVzYW5uZQogZXBzb24JU2Vpa28gRXBzb24gQ29ycC4KIGVzdAlFU1RlZW0gV2lyZWxlc3MgTW9kZW1zCitldHR1cwlOSSBFdHR1cyBSZXNlYXJjaAogZXVrcmVhICBFdWtyw6lhIEVsZWN0cm9tYXRpcXVlCiBldmVyZXN0CUV2ZXJlc3QgU2VtaWNvbmR1Y3RvciBDby4gTHRkLgogZXZlcnNwaW4JRXZlcnNwaW4gVGVjaG5vbG9naWVzLCBJbmMuCkBAIC0xNDUsNiArMTQ2LDcgQEAKIHNicwlTbWFydCBCYXR0ZXJ5IFN5c3RlbQogc2NoaW5kbGVyCVNjaGluZGxlcgogc2VhZ2F0ZQlTZWFnYXRlIFRlY2hub2xvZ3kgUExDCitzZW10ZWNoCVNlbXRlY2ggQ29ycG9yYXRpb24KIHNpbAlTaWxpY29uIEltYWdlCiBzaWxhYnMJU2lsaWNvbiBMYWJvcmF0b3JpZXMKIHNpbGljb25taXR1cwlTaWxpY29uIE1pdHVzLCBJbmMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmlkZW8vdGksZHJhNy1kc3MudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3ZpZGVvL3RpLGRyYTctZHNzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzNhMDUxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3ZpZGVvL3RpLGRyYTctZHNzLnR4dApAQCAtMCwwICsxLDY5IEBACitUZXhhcyBJbnN0cnVtZW50cyBEUkE3eCBEaXNwbGF5IFN1YnN5c3RlbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworU2VlIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92aWRlby90aSxvbWFwLWRzcy50eHQgZm9yIGdlbmVyaWMKK2Rlc2NyaXB0aW9uIGFib3V0IE9NQVAgRGlzcGxheSBTdWJzeXN0ZW0gYmluZGluZ3MuCisKK0RTUyBDb3JlCistLS0tLS0tLQorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiAidGksZHJhNy1kc3MiCistIHJlZzogYWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzcGFjZXMgZm9yICdkc3MnCistIHRpLGh3bW9kczogImRzc19jb3JlIgorLSBjbG9ja3M6IGhhbmRsZSB0byBmY2xrCistIGNsb2NrLW5hbWVzOiAiZmNrIgorLSBzeXNjb246IHBoYW5kbGUgdG8gY29udHJvbCBtb2R1bGUgY29yZSBzeXNjb24gbm9kZQorCitPcHRpb25hbCBwcm9wZXJ0aWVzOgorCitTb21lIERSQTd4eCBTb0NzIGhhdmUgb25lIGRlZGljYXRlZCB2aWRlbyBQTEwsIHNvbWUgaGF2ZSB0d28uIFRoZXNlIHByb3BlcnRpZXMKK2NhbiBiZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSB2aWRlbyBQTExzOgorCistIHJlZzogYWRkcmVzcyBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzcGFjZXMgZm9yICdwbGwxX2Nsa2N0cmwnLAorICAncGxsMScsICdwbGwyX2Nsa2N0cmwnLCAncGxsMicKKy0gY2xvY2tzOiBoYW5kbGUgdG8gdmlkZW8xIHBsbCBjbG9jayBhbmQgdmlkZW8yIHBsbCBjbG9jaworLSBjbG9jay1uYW1lczogInZpZGVvMV9jbGsiIGFuZCAidmlkZW8yX2NsayIKKworUmVxdWlyZWQgbm9kZXM6CistIERJU1BDCisKK09wdGlvbmFsIG5vZGVzOgorLSBEU1MgU3VibW9kdWxlczogSERNSQorLSBWaWRlbyBwb3J0IGZvciBEUEkgb3V0cHV0CisKK0RQSSBFbmRwb2ludCByZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBkYXRhLWxpbmVzOiBudW1iZXIgb2YgbGluZXMgdXNlZAorCisKK0RJU1BDCistLS0tLQorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiAidGksZHJhNy1kaXNwYyIKKy0gcmVnOiBhZGRyZXNzIGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNwYWNlCistIHRpLGh3bW9kczogImRzc19kaXNwYyIKKy0gaW50ZXJydXB0czogdGhlIERJU1BDIGludGVycnVwdAorLSBjbG9ja3M6IGhhbmRsZSB0byBmY2xrCistIGNsb2NrLW5hbWVzOiAiZmNrIgorCitIRE1JCistLS0tCisKK1JlcXVpcmVkIHByb3BlcnRpZXM6CistIGNvbXBhdGlibGU6ICJ0aSxkcmE3LWhkbWkiCistIHJlZzogYWRkcmVzc2VzIGFuZCBsZW5ndGhzIG9mIHRoZSByZWdpc3RlciBzcGFjZXMgZm9yICd3cCcsICdwbGwnLCAncGh5JywKKyAgICAgICAnY29yZScKKy0gcmVnLW5hbWVzOiAid3AiLCAicGxsIiwgInBoeSIsICJjb3JlIgorLSBpbnRlcnJ1cHRzOiB0aGUgSERNSSBpbnRlcnJ1cHQgbGluZQorLSB0aSxod21vZHM6ICJkc3NfaGRtaSIKKy0gdmRkYS1zdXBwbHk6IHZkZGEgcG93ZXIgc3VwcGx5CistIGNsb2NrczogaGFuZGxlcyB0byBmY2xrIGFuZCBwbGwgY2xvY2sKKy0gY2xvY2stbmFtZXM6ICJmY2siLCAic3lzX2NsayIKKworT3B0aW9uYWwgbm9kZXM6CistIFZpZGVvIHBvcnQgZm9yIEhETUkgb3V0cHV0CisKK0hETUkgRW5kcG9pbnQgb3B0aW9uYWwgcHJvcGVydGllczoKKy0gbGFuZXM6IGxpc3Qgb2YgOCBwaW4gbnVtYmVycyBmb3IgdGhlIEhETUkgbGFuZXM6IENMSyssIENMSy0sIEQwKywgRDAtLAorICBEMSssIEQxLSwgRDIrLCBEMi0uIChkZWZhdWx0OiAwLDEsMiwzLDQsNSw2LDcpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmlkZW8vdGksb3BhMzYyLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy92aWRlby90aSxvcGEzNjIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5NjA4M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdmlkZW8vdGksb3BhMzYyLnR4dApAQCAtMCwwICsxLDM4IEBACitPUEEzNjIgYW5hbG9nIHZpZGVvIGFtcGxpZmllcgorCitSZXF1aXJlZCBwcm9wZXJ0aWVzOgorLSBjb21wYXRpYmxlOiAidGksb3BhMzYyIgorLSBlbmFibGUtZ3Bpb3M6IGVuYWJsZS9kaXNhYmxlIG91dHB1dCBncGlvCisKK1JlcXVpcmVkIG5vZGU6CistIFZpZGVvIHBvcnQgMCBmb3Igb3BhMzYyIGlucHV0CistIFZpZGVvIHBvcnQgMSBmb3Igb3BhMzYyIG91dHB1dAorCitFeGFtcGxlOgorCit0dl9hbXA6IG9wYTM2MiB7CisJY29tcGF0aWJsZSA9ICJ0aSxvcGEzNjIiOworCWVuYWJsZS1ncGlvcyA9IDwmZ3BpbzEgMjMgMD47ICAvKiBHUElPIHRvIGVuYWJsZSB2aWRlbyBvdXQgYW1wbGlmaWVyICovCisKKwlwb3J0cyB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlwb3J0QDAgeworCQkJcmVnID0gPDA+OworCQkJb3BhX2luOiBlbmRwb2ludEAwIHsKKwkJCQlyZW1vdGUtZW5kcG9pbnQgPSA8JnZlbmNfb3V0PjsKKwkJCX07CisJCX07CisKKwkJcG9ydEAxIHsKKwkJCXJlZyA9IDwxPjsKKwkJCW9wYV9vdXQ6IGVuZHBvaW50QDAgeworCQkJCXJlbW90ZS1lbmRwb2ludCA9IDwmdHZfY29ubmVjdG9yX2luPjsKKwkJCX07CisJCX07CisJfTsKK307CisKKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvb3ZlcmxheS1ub3Rlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvb3ZlcmxheS1ub3Rlcy50eHQKaW5kZXggMzBhZTc1OC4uZDQxOGE2YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL292ZXJsYXktbm90ZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9vdmVybGF5LW5vdGVzLnR4dApAQCAtMTAsNyArMTAsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0KIAogQSBEZXZpY2UgVHJlZSdzIG92ZXJsYXkgcHVycG9zZSBpcyB0byBtb2RpZnkgdGhlIGtlcm5lbCdzIGxpdmUgdHJlZSwgYW5kCi1oYXZlIHRoZSBtb2RpZmljYXRpb24gYWZmZWN0aW5nIHRoZSBzdGF0ZSBvZiB0aGUgdGhlIGtlcm5lbCBpbiBhIHdheSB0aGF0CitoYXZlIHRoZSBtb2RpZmljYXRpb24gYWZmZWN0aW5nIHRoZSBzdGF0ZSBvZiB0aGUga2VybmVsIGluIGEgd2F5IHRoYXQKIGlzIHJlZmxlY3RpbmcgdGhlIGNoYW5nZXMuCiBTaW5jZSB0aGUga2VybmVsIG1haW5seSBkZWFscyB3aXRoIGRldmljZXMsIGFueSBuZXcgZGV2aWNlIG5vZGUgdGhhdCByZXN1bHQKIGluIGFuIGFjdGl2ZSBkZXZpY2Ugc2hvdWxkIGhhdmUgaXQgY3JlYXRlZCB3aGlsZSBpZiB0aGUgZGV2aWNlIG5vZGUgaXMgZWl0aGVyCkBAIC04MCw3ICs4MCw3IEBACiAJfTsKIC0tLS0gZm9vK2Jhci5kdHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1BcyBhIHJlc3VsdCBvZiB0aGUgdGhlIG92ZXJsYXksIGEgbmV3IGRldmljZSBub2RlIChiYXIpIGhhcyBiZWVuIGNyZWF0ZWQKK0FzIGEgcmVzdWx0IG9mIHRoZSBvdmVybGF5LCBhIG5ldyBkZXZpY2Ugbm9kZSAoYmFyKSBoYXMgYmVlbiBjcmVhdGVkCiBzbyBhIGJhciBwbGF0Zm9ybSBkZXZpY2Ugd2lsbCBiZSByZWdpc3RlcmVkIGFuZCBpZiBhIG1hdGNoaW5nIGRldmljZSBkcml2ZXIKIGlzIGxvYWRlZCB0aGUgZGV2aWNlIHdpbGwgYmUgY3JlYXRlZCBhcyBleHBlY3RlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kbWFlbmdpbmUvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL2RtYWVuZ2luZS8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2RlNjU3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kbWFlbmdpbmUvMDAtSU5ERVgKQEAgLTAsMCArMSw4IEBACiswMC1JTkRFWAorCS0gdGhpcyBmaWxlLgorY2xpZW50LnR4dAorCS10aGUgRE1BIEVuZ2luZSBBUEkgR3VpZGUuCitkbWF0ZXN0LnR4dAorCS0gaG93IHRvIGNvbXBpbGUsIGNvbmZpZ3VyZSBhbmQgdXNlIHRoZSBkbWF0ZXN0IHN5c3RlbS4KK3Byb3ZpZGVyLnR4dAorCS0gdGhlIERNQSBjb250cm9sbGVyIEFQSS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9idXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvYnVzLnR4dAppbmRleCA2NzU0YjJkLi5iNTc3YTQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9idXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2J1cy50eHQKQEAgLTQ1LDcgKzQ1LDcgQEAKIG9mIGRldmljZSBJRHMgb2YgZGV2aWNlcyB0aGV5IHN1cHBvcnQgdGhhdCByZXNpZGUgaW4gYSBidXMtc3BlY2lmaWMKIGRyaXZlciBzdHJ1Y3R1cmUuIAogCi1UaGUgcHVycG9zZSBvZiB0aGUgbWF0Y2ggY2FsbGJhY2sgaXMgcHJvdmlkZSB0aGUgYnVzIGFuIG9wcG9ydHVuaXR5IHRvCitUaGUgcHVycG9zZSBvZiB0aGUgbWF0Y2ggY2FsbGJhY2sgaXMgdG8gZ2l2ZSB0aGUgYnVzIGFuIG9wcG9ydHVuaXR5IHRvCiBkZXRlcm1pbmUgaWYgYSBwYXJ0aWN1bGFyIGRyaXZlciBzdXBwb3J0cyBhIHBhcnRpY3VsYXIgZGV2aWNlIGJ5CiBjb21wYXJpbmcgdGhlIGRldmljZSBJRHMgdGhlIGRyaXZlciBzdXBwb3J0cyB3aXRoIHRoZSBkZXZpY2UgSUQgb2YgYQogcGFydGljdWxhciBkZXZpY2UsIHdpdGhvdXQgc2FjcmlmaWNpbmcgYnVzLXNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgb3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZmllbWFwLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZmllbWFwLnR4dAppbmRleCAxYjgwNWEwLi5mNmQ5Yzk5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2ZpZW1hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9maWVtYXAudHh0CkBAIC0xOTYsNyArMTk2LDggQEAKIH07CiAKIEl0IGlzIGludGVuZGVkIHRoYXQgdGhlIGZpbGUgc3lzdGVtIHNob3VsZCBub3QgbmVlZCB0byBhY2Nlc3MgYW55IG9mIHRoaXMKLXN0cnVjdHVyZSBkaXJlY3RseS4KK3N0cnVjdHVyZSBkaXJlY3RseS4gRmlsZXN5c3RlbSBoYW5kbGVycyBzaG91bGQgYmUgdG9sZXJhbnQgdG8gc2lnbmFscyBhbmQgcmV0dXJuCitFSU5UUiBvbmNlIGZhdGFsIHNpZ25hbCByZWNlaXZlZC4KIAogCiBGbGFnIGNoZWNraW5nIHNob3VsZCBiZSBkb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIC0+ZmllbWFwIGNhbGxiYWNrIHZpYSB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5vdGlmeS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lub3RpZnkudHh0CmluZGV4IGNmZDAyNzEuLjUxZjYxZGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5vdGlmeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbm90aWZ5LnR4dApAQCAtNCwyMDEgKzQsMTAgQEAKIAogCiBEb2N1bWVudCBzdGFydGVkIDE1IE1hciAyMDA1IGJ5IFJvYmVydCBMb3ZlIDxybWxAbm92ZWxsLmNvbT4KK0RvY3VtZW50IHVwZGF0ZWQgNCBKYW4gMjAxNSBieSBaaGFuZyBaaGVuIDx6aGVuemhhbmcuemhhbmdAaHVhd2VpLmNvbT4KKwktLURlbGV0ZWQgb2Jzb2xldGVkIGludGVyZmFjZSwganVzdCByZWZlciB0byBtYW5wYWdlcyBmb3IgdXNlciBpbnRlcmZhY2UuCiAKLQotKGkpIFVzZXIgSW50ZXJmYWNlCi0KLUlub3RpZnkgaXMgY29udHJvbGxlZCBieSBhIHNldCBvZiB0aHJlZSBzeXN0ZW0gY2FsbHMgYW5kIG5vcm1hbCBmaWxlIEkvTyBvbiBhCi1yZXR1cm5lZCBmaWxlIGRlc2NyaXB0b3IuCi0KLUZpcnN0IHN0ZXAgaW4gdXNpbmcgaW5vdGlmeSBpcyB0byBpbml0aWFsaXNlIGFuIGlub3RpZnkgaW5zdGFuY2U6Ci0KLQlpbnQgZmQgPSBpbm90aWZ5X2luaXQgKCk7Ci0KLUVhY2ggaW5zdGFuY2UgaXMgYXNzb2NpYXRlZCB3aXRoIGEgdW5pcXVlLCBvcmRlcmVkIHF1ZXVlLgotCi1DaGFuZ2UgZXZlbnRzIGFyZSBtYW5hZ2VkIGJ5ICJ3YXRjaGVzIi4gIEEgd2F0Y2ggaXMgYW4gKG9iamVjdCxtYXNrKSBwYWlyIHdoZXJlCi10aGUgb2JqZWN0IGlzIGEgZmlsZSBvciBkaXJlY3RvcnkgYW5kIHRoZSBtYXNrIGlzIGEgYml0IG1hc2sgb2Ygb25lIG9yIG1vcmUKLWlub3RpZnkgZXZlbnRzIHRoYXQgdGhlIGFwcGxpY2F0aW9uIHdpc2hlcyB0byByZWNlaXZlLiAgU2VlIDxsaW51eC9pbm90aWZ5Lmg+Ci1mb3IgdmFsaWQgZXZlbnRzLiAgQSB3YXRjaCBpcyByZWZlcmVuY2VkIGJ5IGEgd2F0Y2ggZGVzY3JpcHRvciwgb3Igd2QuCi0KLVdhdGNoZXMgYXJlIGFkZGVkIHZpYSBhIHBhdGggdG8gdGhlIGZpbGUuCi0KLVdhdGNoZXMgb24gYSBkaXJlY3Rvcnkgd2lsbCByZXR1cm4gZXZlbnRzIG9uIGFueSBmaWxlcyBpbnNpZGUgb2YgdGhlIGRpcmVjdG9yeS4KLQotQWRkaW5nIGEgd2F0Y2ggaXMgc2ltcGxlOgotCi0JaW50IHdkID0gaW5vdGlmeV9hZGRfd2F0Y2ggKGZkLCBwYXRoLCBtYXNrKTsKLQotV2hlcmUgImZkIiBpcyB0aGUgcmV0dXJuIHZhbHVlIGZyb20gaW5vdGlmeV9pbml0KCksIHBhdGggaXMgdGhlIHBhdGggdG8gdGhlCi1vYmplY3QgdG8gd2F0Y2gsIGFuZCBtYXNrIGlzIHRoZSB3YXRjaCBtYXNrIChzZWUgPGxpbnV4L2lub3RpZnkuaD4pLgotCi1Zb3UgY2FuIHVwZGF0ZSBhbiBleGlzdGluZyB3YXRjaCBpbiB0aGUgc2FtZSBtYW5uZXIsIGJ5IHBhc3NpbmcgaW4gYSBuZXcgbWFzay4KLQotQW4gZXhpc3Rpbmcgd2F0Y2ggaXMgcmVtb3ZlZCB2aWEKLQotCWludCByZXQgPSBpbm90aWZ5X3JtX3dhdGNoIChmZCwgd2QpOwotCi1FdmVudHMgYXJlIHByb3ZpZGVkIGluIHRoZSBmb3JtIG9mIGFuIGlub3RpZnlfZXZlbnQgc3RydWN0dXJlIHRoYXQgaXMgcmVhZCgyKQotZnJvbSBhIGdpdmVuIGlub3RpZnkgaW5zdGFuY2UuICBUaGUgZmlsZW5hbWUgaXMgb2YgZHluYW1pYyBsZW5ndGggYW5kIGZvbGxvd3MKLXRoZSBzdHJ1Y3QuIEl0IGlzIG9mIHNpemUgbGVuLiAgVGhlIGZpbGVuYW1lIGlzIHBhZGRlZCB3aXRoIG51bGwgYnl0ZXMgdG8KLWVuc3VyZSBwcm9wZXIgYWxpZ25tZW50LiAgVGhpcyBwYWRkaW5nIGlzIHJlZmxlY3RlZCBpbiBsZW4uCi0KLVlvdSBjYW4gc2x1cnAgbXVsdGlwbGUgZXZlbnRzIGJ5IHBhc3NpbmcgYSBsYXJnZSBidWZmZXIsIGZvciBleGFtcGxlCi0KLQlzaXplX3QgbGVuID0gcmVhZCAoZmQsIGJ1ZiwgQlVGX0xFTik7Ci0KLVdoZXJlICJidWYiIGlzIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiAiaW5vdGlmeV9ldmVudCIgc3RydWN0dXJlcyBhdCBsZWFzdAotQlVGX0xFTiBieXRlcyBpbiBzaXplLiAgVGhlIGFib3ZlIGV4YW1wbGUgd2lsbCByZXR1cm4gYXMgbWFueSBldmVudHMgYXMgYXJlCi1hdmFpbGFibGUgYW5kIGZpdCBpbiBCVUZfTEVOLgotCi1FYWNoIGlub3RpZnkgaW5zdGFuY2UgZmQgaXMgYWxzbyBzZWxlY3QoKS0gYW5kIHBvbGwoKS1hYmxlLgotCi1Zb3UgY2FuIGZpbmQgdGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgZXZlbnQgcXVldWUgdmlhIHRoZSBzdGFuZGFyZCBGSU9OUkVBRAotaW9jdGwgb24gdGhlIGZkIHJldHVybmVkIGJ5IGlub3RpZnlfaW5pdCgpLgotCi1BbGwgd2F0Y2hlcyBhcmUgZGVzdHJveWVkIGFuZCBjbGVhbmVkIHVwIG9uIGNsb3NlLgotCi0KLShpaSkKLQotUHJvdG90eXBlczoKLQotCWludCBpbm90aWZ5X2luaXQgKHZvaWQpOwotCWludCBpbm90aWZ5X2FkZF93YXRjaCAoaW50IGZkLCBjb25zdCBjaGFyICpwYXRoLCBfX3UzMiBtYXNrKTsKLQlpbnQgaW5vdGlmeV9ybV93YXRjaCAoaW50IGZkLCBfX3UzMiBtYXNrKTsKLQotCi0oaWlpKSBLZXJuZWwgSW50ZXJmYWNlCi0KLUlub3RpZnkncyBrZXJuZWwgQVBJIGNvbnNpc3RzIGEgc2V0IG9mIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgd2F0Y2hlcyBhbmQgYW4KLWV2ZW50IGNhbGxiYWNrLgotCi1UbyB1c2UgdGhlIGtlcm5lbCBBUEksIHlvdSBtdXN0IGZpcnN0IGluaXRpYWxpemUgYW4gaW5vdGlmeSBpbnN0YW5jZSB3aXRoIGEgc2V0Ci1vZiBpbm90aWZ5X29wZXJhdGlvbnMuICBZb3UgYXJlIGdpdmVuIGFuIG9wYXF1ZSBpbm90aWZ5X2hhbmRsZSwgd2hpY2ggeW91IHVzZQotZm9yIGFueSBmdXJ0aGVyIGNhbGxzIHRvIGlub3RpZnkuCi0KLSAgICBzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloID0gaW5vdGlmeV9pbml0KG15X2V2ZW50X2hhbmRsZXIpOwotCi1Zb3UgbXVzdCBwcm92aWRlIGEgZnVuY3Rpb24gZm9yIHByb2Nlc3NpbmcgZXZlbnRzIGFuZCBhIGZ1bmN0aW9uIGZvciBkZXN0cm95aW5nCi10aGUgaW5vdGlmeSB3YXRjaC4KLQotICAgIHZvaWQgaGFuZGxlX2V2ZW50KHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCwgdTMyIHdkLCB1MzIgbWFzaywKLSAgICAJICAgICAgICAgICAgICB1MzIgY29va2llLCBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQotCi0Jd2F0Y2ggLSB0aGUgcG9pbnRlciB0byB0aGUgaW5vdGlmeV93YXRjaCB0aGF0IHRyaWdnZXJlZCB0aGlzIGNhbGwKLQl3ZCAtIHRoZSB3YXRjaCBkZXNjcmlwdG9yCi0JbWFzayAtIGRlc2NyaWJlcyB0aGUgZXZlbnQgdGhhdCBvY2N1cnJlZAotCWNvb2tpZSAtIGFuIGlkZW50aWZpZXIgZm9yIHN5bmNocm9uaXppbmcgZXZlbnRzCi0JbmFtZSAtIHRoZSBkZW50cnkgbmFtZSBmb3IgYWZmZWN0ZWQgZmlsZXMgaW4gYSBkaXJlY3RvcnktYmFzZWQgZXZlbnQKLQlpbm9kZSAtIHRoZSBhZmZlY3RlZCBpbm9kZSBpbiBhIGRpcmVjdG9yeS1iYXNlZCBldmVudAotCi0gICAgdm9pZCBkZXN0cm95X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKLQotWW91IG1heSBhZGQgd2F0Y2hlcyBieSBwcm92aWRpbmcgYSBwcmUtYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCBpbm90aWZ5X3dhdGNoCi1zdHJ1Y3R1cmUgYW5kIHNwZWNpZnlpbmcgdGhlIGlub2RlIHRvIHdhdGNoIGFsb25nIHdpdGggYW4gaW5vdGlmeSBldmVudCBtYXNrLgotWW91IG11c3QgcGluIHRoZSBpbm9kZSBkdXJpbmcgdGhlIGNhbGwuICBZb3Ugd2lsbCBsaWtlbHkgd2lzaCB0byBlbWJlZCB0aGUKLWlub3RpZnlfd2F0Y2ggc3RydWN0dXJlIGluIGEgc3RydWN0dXJlIG9mIHlvdXIgb3duIHdoaWNoIGNvbnRhaW5zIG90aGVyCi1pbmZvcm1hdGlvbiBhYm91dCB0aGUgd2F0Y2guICBPbmNlIHlvdSBhZGQgYW4gaW5vdGlmeSB3YXRjaCwgaXQgaXMgaW1tZWRpYXRlbHkKLXN1YmplY3QgdG8gcmVtb3ZhbCBkZXBlbmRpbmcgb24gZmlsZXN5c3RlbSBldmVudHMuICBZb3UgbXVzdCBncmFiIGEgcmVmZXJlbmNlIGlmCi15b3UgZGVwZW5kIG9uIHRoZSB3YXRjaCBoYW5naW5nIGFyb3VuZCBhZnRlciB0aGUgY2FsbC4KLQotICAgIGlub3RpZnlfaW5pdF93YXRjaCgmbXlfd2F0Y2gtPml3YXRjaCk7Ci0gICAgaW5vdGlmeV9nZXRfd2F0Y2goJm15X3dhdGNoLT5pd2F0Y2gpOwkvLyBvcHRpb25hbAotICAgIHMzMiB3ZCA9IGlub3RpZnlfYWRkX3dhdGNoKGloLCAmbXlfd2F0Y2gtPml3YXRjaCwgaW5vZGUsIG1hc2spOwotICAgIGlub3RpZnlfcHV0X3dhdGNoKCZteV93YXRjaC0+aXdhdGNoKTsJLy8gb3B0aW9uYWwKLQotWW91IG1heSB1c2UgdGhlIHdhdGNoIGRlc2NyaXB0b3IgKHdkKSBvciB0aGUgYWRkcmVzcyBvZiB0aGUgaW5vdGlmeV93YXRjaCBmb3IKLW90aGVyIGlub3RpZnkgb3BlcmF0aW9ucy4gIFlvdSBtdXN0IG5vdCBkaXJlY3RseSByZWFkIG9yIG1hbmlwdWxhdGUgZGF0YSBpbiB0aGUKLWlub3RpZnlfd2F0Y2guICBBZGRpdGlvbmFsbHksIHlvdSBtdXN0IG5vdCBjYWxsIGlub3RpZnlfYWRkX3dhdGNoKCkgbW9yZSB0aGFuCi1vbmNlIGZvciBhIGdpdmVuIGlub3RpZnlfd2F0Y2ggc3RydWN0dXJlLCB1bmxlc3MgeW91IGhhdmUgZmlyc3QgY2FsbGVkIGVpdGhlcgotaW5vdGlmeV9ybV93YXRjaCgpIG9yIGlub3RpZnlfcm1fd2QoKS4KLQotVG8gZGV0ZXJtaW5lIGlmIHlvdSBoYXZlIGFscmVhZHkgcmVnaXN0ZXJlZCBhIHdhdGNoIGZvciBhIGdpdmVuIGlub2RlLCB5b3UgbWF5Ci1jYWxsIGlub3RpZnlfZmluZF93YXRjaCgpLCB3aGljaCBnaXZlcyB5b3UgYm90aCB0aGUgd2QgYW5kIHRoZSB3YXRjaCBwb2ludGVyIGZvcgotdGhlIGlub3RpZnlfd2F0Y2gsIG9yIGFuIGVycm9yIGlmIHRoZSB3YXRjaCBkb2VzIG5vdCBleGlzdC4KLQotICAgIHdkID0gaW5vdGlmeV9maW5kX3dhdGNoKGloLCBpbm9kZSwgJndhdGNocCk7Ci0KLVlvdSBtYXkgdXNlIGNvbnRhaW5lcl9vZigpIG9uIHRoZSB3YXRjaCBwb2ludGVyIHRvIGFjY2VzcyB5b3VyIG93biBkYXRhCi1hc3NvY2lhdGVkIHdpdGggYSBnaXZlbiB3YXRjaC4gIFdoZW4gYW4gZXhpc3Rpbmcgd2F0Y2ggaXMgZm91bmQsCi1pbm90aWZ5X2ZpbmRfd2F0Y2goKSBidW1wcyB0aGUgcmVmY291bnQgYmVmb3JlIHJlbGVhc2luZyBpdHMgbG9ja3MuICBZb3UgbXVzdAotcHV0IHRoYXQgcmVmZXJlbmNlIHdpdGg6Ci0KLSAgICBwdXRfaW5vdGlmeV93YXRjaCh3YXRjaHApOwotCi1DYWxsIGlub3RpZnlfZmluZF91cGRhdGVfd2F0Y2goKSB0byB1cGRhdGUgdGhlIGV2ZW50IG1hc2sgZm9yIGFuIGV4aXN0aW5nIHdhdGNoLgotaW5vdGlmeV9maW5kX3VwZGF0ZV93YXRjaCgpIHJldHVybnMgdGhlIHdkIG9mIHRoZSB1cGRhdGVkIHdhdGNoLCBvciBhbiBlcnJvciBpZgotdGhlIHdhdGNoIGRvZXMgbm90IGV4aXN0LgotCi0gICAgd2QgPSBpbm90aWZ5X2ZpbmRfdXBkYXRlX3dhdGNoKGloLCBpbm9kZSwgbWFzayk7Ci0KLUFuIGV4aXN0aW5nIHdhdGNoIG1heSBiZSByZW1vdmVkIGJ5IGNhbGxpbmcgZWl0aGVyIGlub3RpZnlfcm1fd2F0Y2goKSBvcgotaW5vdGlmeV9ybV93ZCgpLgotCi0gICAgaW50IHJldCA9IGlub3RpZnlfcm1fd2F0Y2goaWgsICZteV93YXRjaC0+aXdhdGNoKTsKLSAgICBpbnQgcmV0ID0gaW5vdGlmeV9ybV93ZChpaCwgd2QpOwotCi1BIHdhdGNoIG1heSBiZSByZW1vdmVkIHdoaWxlIGV4ZWN1dGluZyB5b3VyIGV2ZW50IGhhbmRsZXIgd2l0aCB0aGUgZm9sbG93aW5nOgotCi0gICAgaW5vdGlmeV9yZW1vdmVfd2F0Y2hfbG9ja2VkKGloLCBpd2F0Y2gpOwotCi1DYWxsIGlub3RpZnlfZGVzdHJveSgpIHRvIHJlbW92ZSBhbGwgd2F0Y2hlcyBmcm9tIHlvdXIgaW5vdGlmeSBpbnN0YW5jZSBhbmQKLXJlbGVhc2UgaXQuICBJZiB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgcmVmZXJlbmNlcywgaW5vdGlmeV9kZXN0cm95KCkgd2lsbCBjYWxsCi15b3VyIGRlc3Ryb3lfd2F0Y2ggb3AgZm9yIGVhY2ggd2F0Y2guCi0KLSAgICBpbm90aWZ5X2Rlc3Ryb3koaWgpOwotCi1XaGVuIGlub3RpZnkgcmVtb3ZlcyBhIHdhdGNoLCBpdCBzZW5kcyBhbiBJTl9JR05PUkVEIGV2ZW50IHRvIHlvdXIgY2FsbGJhY2suCi1Zb3UgbWF5IHVzZSB0aGlzIGV2ZW50IGFzIGFuIGluZGljYXRpb24gdG8gZnJlZSB0aGUgd2F0Y2ggbWVtb3J5LiAgTm90ZSB0aGF0Ci1pbm90aWZ5IG1heSByZW1vdmUgYSB3YXRjaCBkdWUgdG8gZmlsZXN5c3RlbSBldmVudHMsIGFzIHdlbGwgYXMgYnkgeW91ciByZXF1ZXN0LgotSWYgeW91IHVzZSBJTl9PTkVTSE9ULCBpbm90aWZ5IHdpbGwgcmVtb3ZlIHRoZSB3YXRjaCBhZnRlciB0aGUgZmlyc3QgZXZlbnQsIGF0Ci13aGljaCBwb2ludCB5b3UgbWF5IGNhbGwgdGhlIGZpbmFsIGlub3RpZnlfcHV0X3dhdGNoLgotCi0oaXYpIEtlcm5lbCBJbnRlcmZhY2UgUHJvdG90eXBlcwotCi0Jc3RydWN0IGlub3RpZnlfaGFuZGxlICppbm90aWZ5X2luaXQoc3RydWN0IGlub3RpZnlfb3BlcmF0aW9ucyAqb3BzKTsKLQotCWlub3RpZnlfaW5pdF93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpOwotCi0JczMyIGlub3RpZnlfYWRkX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsCi0JCSAgICAgICAgICAgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLAotCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG1hc2spOwotCi0JczMyIGlub3RpZnlfZmluZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgIHN0cnVjdCBpbm90aWZ5X3dhdGNoICoqd2F0Y2hwKTsKLQotCXMzMiBpbm90aWZ5X2ZpbmRfdXBkYXRlX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsCi0JCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgdTMyIG1hc2spOwotCi0JaW50IGlub3RpZnlfcm1fd2Qoc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwgdTMyIHdkKTsKLQotCWludCBpbm90aWZ5X3JtX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsCi0JCQkgICAgIHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCk7Ci0KLQl2b2lkIGlub3RpZnlfcmVtb3ZlX3dhdGNoX2xvY2tlZChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAotCQkJCQkgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKTsKLQotCXZvaWQgaW5vdGlmeV9kZXN0cm95KHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgpOwotCi0Jdm9pZCBnZXRfaW5vdGlmeV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpOwotCXZvaWQgcHV0X2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKTsKLQotCi0odikgSW50ZXJuYWwgS2VybmVsIEltcGxlbWVudGF0aW9uCi0KLUVhY2ggaW5vdGlmeSBpbnN0YW5jZSBpcyByZXByZXNlbnRlZCBieSBhbiBpbm90aWZ5X2hhbmRsZSBzdHJ1Y3R1cmUuCi1Jbm90aWZ5J3MgdXNlcnNwYWNlIGNvbnN1bWVycyBhbHNvIGhhdmUgYW4gaW5vdGlmeV9kZXZpY2Ugd2hpY2ggaXMKLWFzc29jaWF0ZWQgd2l0aCB0aGUgaW5vdGlmeV9oYW5kbGUsIGFuZCBvbiB3aGljaCBldmVudHMgYXJlIHF1ZXVlZC4KLQotRWFjaCB3YXRjaCBpcyBhc3NvY2lhdGVkIHdpdGggYW4gaW5vdGlmeV93YXRjaCBzdHJ1Y3R1cmUuICBXYXRjaGVzIGFyZSBjaGFpbmVkCi1vZmYgb2YgZWFjaCBhc3NvY2lhdGVkIGlub3RpZnlfaGFuZGxlIGFuZCBlYWNoIGFzc29jaWF0ZWQgaW5vZGUuCi0KLVNlZSBmcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X2Zzbm90aWZ5LmMgYW5kIGZzL25vdGlmeS9pbm90aWZ5L2lub3RpZnlfdXNlci5jCi1mb3IgdGhlIGxvY2tpbmcgYW5kIGxpZmV0aW1lIHJ1bGVzLgotCi0KLSh2aSkgUmF0aW9uYWxlCisoaSkgUmF0aW9uYWxlCiAKIFE6IFdoYXQgaXMgdGhlIGRlc2lnbiBkZWNpc2lvbiBiZWhpbmQgbm90IHR5aW5nIHRoZSB3YXRjaCB0byB0aGUgb3BlbiBmZCBvZgogICAgdGhlIHdhdGNoZWQgb2JqZWN0PwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvcG5mcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9wbmZzLnR4dAppbmRleCBhZGM4MWEzLi40NGE5ZjI0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9wbmZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9wbmZzLnR4dApAQCAtNTcsMTUgKzU3LDE2IEBACiBsYXlvdXQgZHJpdmVycwogLS0tLS0tLS0tLS0tLS0KIAotUE5GUyB1dGlsaXplcyB3aGF0IGlzIGNhbGxlZCBsYXlvdXQgZHJpdmVycy4gVGhlIFNURCBkZWZpbmVzIDMgYmFzaWMKLWxheW91dCB0eXBlczogImZpbGVzIiAib2JqZWN0cyIgYW5kICJibG9ja3MiLiBGb3IgZWFjaCBvZiB0aGVzZSB0eXBlcwotdGhlcmUgaXMgYSBsYXlvdXQtZHJpdmVyIHdpdGggYSBjb21tb24gZnVuY3Rpb24tdmVjdG9ycyB0YWJsZSB3aGljaAotYXJlIGNhbGxlZCBieSB0aGUgbmZzLWNsaWVudCBwbmZzLWNvcmUgdG8gaW1wbGVtZW50IHRoZSBkaWZmZXJlbnQgbGF5b3V0Ci10eXBlcy4KK1BORlMgdXRpbGl6ZXMgd2hhdCBpcyBjYWxsZWQgbGF5b3V0IGRyaXZlcnMuIFRoZSBTVEQgZGVmaW5lcyA0IGJhc2ljCitsYXlvdXQgdHlwZXM6ICJmaWxlcyIsICJvYmplY3RzIiwgImJsb2NrcyIsIGFuZCAiZmxleGZpbGVzIi4gRm9yIGVhY2gKK29mIHRoZXNlIHR5cGVzIHRoZXJlIGlzIGEgbGF5b3V0LWRyaXZlciB3aXRoIGEgY29tbW9uIGZ1bmN0aW9uLXZlY3RvcnMKK3RhYmxlIHdoaWNoIGFyZSBjYWxsZWQgYnkgdGhlIG5mcy1jbGllbnQgcG5mcy1jb3JlIHRvIGltcGxlbWVudCB0aGUKK2RpZmZlcmVudCBsYXlvdXQgdHlwZXMuCiAKLUZpbGVzLWxheW91dC1kcml2ZXIgY29kZSBpcyBpbjogZnMvbmZzL25mczRmaWxlbGF5b3V0LmMgJiYgbmZzNGZpbGVsYXlvdXRkZXYuYworRmlsZXMtbGF5b3V0LWRyaXZlciBjb2RlIGlzIGluOiBmcy9uZnMvZmlsZWxheW91dC8uLiBkaXJlY3RvcnkKIE9iamVjdHMtbGF5b3V0LWRlcml2ZXIgY29kZSBpcyBpbjogZnMvbmZzL29iamxheW91dC8uLiBkaXJlY3RvcnkKIEJsb2Nrcy1sYXlvdXQtZGVyaXZlciBjb2RlIGlzIGluOiBmcy9uZnMvYmxvY2tsYXlvdXQvLi4gZGlyZWN0b3J5CitGbGV4ZmlsZXMtbGF5b3V0LWRyaXZlciBjb2RlIGlzIGluOiBmcy9uZnMvZmxleGZpbGVsYXlvdXQvLi4gZGlyZWN0b3J5CiAKIG9iamVjdHMtbGF5b3V0IHNldHVwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9vY2ZzMi50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dAppbmRleCA3NjE4YTI4Li4yOGY4YzA4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnR4dApAQCAtMTAwLDMgKzEwMCw3IEBACiBjb2hlcmVuY3k9YnVmZmVyZWQJQWxsb3cgY29uY3VycmVudCBPX0RJUkVDVCB3cml0ZXMgd2l0aG91dCBFWCBsb2NrIGFtb25nCiAJCQlub2Rlcywgd2hpY2ggZ2FpbnMgaGlnaCBwZXJmb3JtYW5jZSBhdCByaXNrIG9mIGdldHRpbmcKIAkJCXN0YWxlIGRhdGEgb24gb3RoZXIgbm9kZXMuCitqb3VybmFsX2FzeW5jX2NvbW1pdAlDb21taXQgYmxvY2sgY2FuIGJlIHdyaXR0ZW4gdG8gZGlzayB3aXRob3V0IHdhaXRpbmcKKwkJCWZvciBkZXNjcmlwdG9yIGJsb2Nrcy4gSWYgZW5hYmxlZCBvbGRlciBrZXJuZWxzIGNhbm5vdAorCQkJbW91bnQgdGhlIGRldmljZS4gVGhpcyB3aWxsIGVuYWJsZSAnam91cm5hbF9jaGVja3N1bScKKwkJCWludGVybmFsbHkuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAppbmRleCBhYWU5ZGQxLi5jZjhmYzJmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTI4LDcgKzI4LDcgQEAKICAgMS42CVBhcmFsbGVsIHBvcnQgaW5mbyBpbiAvcHJvYy9wYXJwb3J0CiAgIDEuNwlUVFkgaW5mbyBpbiAvcHJvYy90dHkKICAgMS44CU1pc2NlbGxhbmVvdXMga2VybmVsIHN0YXRpc3RpY3MgaW4gL3Byb2Mvc3RhdAotICAxLjkgRXh0NCBmaWxlIHN5c3RlbSBwYXJhbWV0ZXJzCisgIDEuOQlFeHQ0IGZpbGUgc3lzdGVtIHBhcmFtZXRlcnMKIAogICAyCU1vZGlmeWluZyBTeXN0ZW0gUGFyYW1ldGVycwogCkBAIC00Miw2ICs0Miw3IEBACiAgIDMuNgkvcHJvYy88cGlkPi9jb21tICAmIC9wcm9jLzxwaWQ+L3Rhc2svPHRpZD4vY29tbQogICAzLjcgICAvcHJvYy88cGlkPi90YXNrLzx0aWQ+L2NoaWxkcmVuIC0gSW5mb3JtYXRpb24gYWJvdXQgdGFzayBjaGlsZHJlbgogICAzLjggICAvcHJvYy88cGlkPi9mZGluZm8vPGZkPiAtIEluZm9ybWF0aW9uIGFib3V0IG9wZW5lZCBmaWxlCisgIDMuOSAgIC9wcm9jLzxwaWQ+L21hcF9maWxlcyAtIEluZm9ybWF0aW9uIGFib3V0IG1lbW9yeSBtYXBwZWQgZmlsZXMKIAogICA0CUNvbmZpZ3VyaW5nIHByb2NmcwogICA0LjEJTW91bnQgb3B0aW9ucwpAQCAtMTc2Myw2ICsxNzY0LDI4IEBACiAJd2l0aCBUSU1FUl9BQlNUSU1FIG9wdGlvbiB3aGljaCB3aWxsIGJlIHNob3duIGluICdzZXR0aW1lIGZsYWdzJywgYnV0ICdpdF92YWx1ZScKIAlzdGlsbCBleGhpYml0cyB0aW1lcidzIHJlbWFpbmluZyB0aW1lLgogCiszLjkJL3Byb2MvPHBpZD4vbWFwX2ZpbGVzIC0gSW5mb3JtYXRpb24gYWJvdXQgbWVtb3J5IG1hcHBlZCBmaWxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBzeW1ib2xpYyBsaW5rcyB3aGljaCByZXByZXNlbnQgbWVtb3J5IG1hcHBlZCBmaWxlcwordGhlIHByb2Nlc3MgaXMgbWFpbnRhaW5pbmcuICBFeGFtcGxlIG91dHB1dDoKKworICAgICB8IGxyLS0tLS0tLS0gMSByb290IHJvb3QgNjQgSmFuIDI3IDExOjI0IDMzM2M2MDAwMDAtMzMzYzYyMDAwMCAtPiAvdXNyL2xpYjY0L2xkLTIuMTguc28KKyAgICAgfCBsci0tLS0tLS0tIDEgcm9vdCByb290IDY0IEphbiAyNyAxMToyNCAzMzNjODFmMDAwLTMzM2M4MjAwMDAgLT4gL3Vzci9saWI2NC9sZC0yLjE4LnNvCisgICAgIHwgbHItLS0tLS0tLSAxIHJvb3Qgcm9vdCA2NCBKYW4gMjcgMTE6MjQgMzMzYzgyMDAwMC0zMzNjODIxMDAwIC0+IC91c3IvbGliNjQvbGQtMi4xOC5zbworICAgICB8IC4uLgorICAgICB8IGxyLS0tLS0tLS0gMSByb290IHJvb3QgNjQgSmFuIDI3IDExOjI0IDM1ZDA0MjEwMDAtMzVkMDQyMjAwMCAtPiAvdXNyL2xpYjY0L2xpYnNlbGludXguc28uMQorICAgICB8IGxyLS0tLS0tLS0gMSByb290IHJvb3QgNjQgSmFuIDI3IDExOjI0IDQwMDAwMC00MWEwMDAgLT4gL3Vzci9iaW4vbHMKKworVGhlIG5hbWUgb2YgYSBsaW5rIHJlcHJlc2VudHMgdGhlIHZpcnR1YWwgbWVtb3J5IGJvdW5kcyBvZiBhIG1hcHBpbmcsIGkuZS4KK3ZtX2FyZWFfc3RydWN0Ojp2bV9zdGFydC12bV9hcmVhX3N0cnVjdDo6dm1fZW5kLgorCitUaGUgbWFpbiBwdXJwb3NlIG9mIHRoZSBtYXBfZmlsZXMgaXMgdG8gcmV0cmlldmUgYSBzZXQgb2YgbWVtb3J5IG1hcHBlZAorZmlsZXMgaW4gYSBmYXN0IHdheSBpbnN0ZWFkIG9mIHBhcnNpbmcgL3Byb2MvPHBpZD4vbWFwcyBvcgorL3Byb2MvPHBpZD4vc21hcHMsIGJvdGggb2Ygd2hpY2ggY29udGFpbiBtYW55IG1vcmUgcmVjb3Jkcy4gIEF0IHRoZSBzYW1lCit0aW1lIG9uZSBjYW4gb3BlbigyKSBtYXBwaW5ncyBmcm9tIHRoZSBsaXN0aW5ncyBvZiB0d28gcHJvY2Vzc2VzIGFuZAorY29tcGFyaW5nIHRoZWlyIGlub2RlIG51bWJlcnMgdG8gZmlndXJlIG91dCB3aGljaCBhbm9ueW1vdXMgbWVtb3J5IGFyZWFzCithcmUgYWN0dWFsbHkgc2hhcmVkLgorCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENvbmZpZ3VyaW5nIHByb2NmcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NlcV9maWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc2VxX2ZpbGUudHh0CmluZGV4IGI3OTdlZDMuLjlkZTQzMDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc2VxX2ZpbGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc2VxX2ZpbGUudHh0CkBAIC0xOTQsMTYgKzE5NCwxNiBAQAogCiBUaGVyZSBhcmUgYWxzbyBhIHBhaXIgb2YgZnVuY3Rpb25zIGZvciBwcmludGluZyBmaWxlbmFtZXM6CiAKLQlpbnQgc2VxX3BhdGgoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqZXNjKTsKLQlpbnQgc2VxX3BhdGhfcm9vdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwYXRoICpwYXRoLAotCQkJICBzdHJ1Y3QgcGF0aCAqcm9vdCwgY2hhciAqZXNjKQorCWludCBzZXFfcGF0aChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoLAorCQkgICAgIGNvbnN0IGNoYXIgKmVzYyk7CisJaW50IHNlcV9wYXRoX3Jvb3Qoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCwKKwkJCSAgY29uc3Qgc3RydWN0IHBhdGggKnJvb3QsIGNvbnN0IGNoYXIgKmVzYykKIAogSGVyZSwgcGF0aCBpbmRpY2F0ZXMgdGhlIGZpbGUgb2YgaW50ZXJlc3QsIGFuZCBlc2MgaXMgYSBzZXQgb2YgY2hhcmFjdGVycwogd2hpY2ggc2hvdWxkIGJlIGVzY2FwZWQgaW4gdGhlIG91dHB1dC4gIEEgY2FsbCB0byBzZXFfcGF0aCgpIHdpbGwgb3V0cHV0CiB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBwcm9jZXNzJ3MgZmlsZXN5c3RlbSByb290LiAgSWYgYSBkaWZmZXJlbnQKLXJvb3QgaXMgZGVzaXJlZCwgaXQgY2FuIGJlIHVzZWQgd2l0aCBzZXFfcGF0aF9yb290KCkuICBOb3RlIHRoYXQsIGlmIGl0Ci10dXJucyBvdXQgdGhhdCBwYXRoIGNhbm5vdCBiZSByZWFjaGVkIGZyb20gcm9vdCwgdGhlIHZhbHVlIG9mIHJvb3Qgd2lsbCBiZQotY2hhbmdlZCBpbiBzZXFfZmlsZV9yb290KCkgdG8gYSByb290IHdoaWNoICpkb2VzKiB3b3JrLgorcm9vdCBpcyBkZXNpcmVkLCBpdCBjYW4gYmUgdXNlZCB3aXRoIHNlcV9wYXRoX3Jvb3QoKS4gIElmIGl0IHR1cm5zIG91dCB0aGF0CitwYXRoIGNhbm5vdCBiZSByZWFjaGVkIGZyb20gcm9vdCwgc2VxX3BhdGhfcm9vdCgpIHJldHVybnMgU0VRX1NLSVAuCiAKIEEgZnVuY3Rpb24gcHJvZHVjaW5nIGNvbXBsaWNhdGVkIG91dHB1dCBtYXkgd2FudCB0byBjaGVjawogCWJvb2wgc2VxX2hhc19vdmVyZmxvd2VkKHN0cnVjdCBzZXFfZmlsZSAqbSk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3hmcy50eHQKaW5kZXggNWJlNTFmZC4uMGJmYWZlMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy94ZnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMveGZzLnR4dApAQCAtMjg3LDkgKzI4Nyw5IEBACiAJCVhGU19FUlJMRVZFTF9MT1c6ICAgICAgIDEKIAkJWEZTX0VSUkxFVkVMX0hJR0g6ICAgICAgNQogCi0gIGZzLnhmcy5wYW5pY19tYXNrCQkoTWluOiAwICBEZWZhdWx0OiAwICBNYXg6IDEyNykKKyAgZnMueGZzLnBhbmljX21hc2sJCShNaW46IDAgIERlZmF1bHQ6IDAgIE1heDogMjU1KQogCUNhdXNlcyBjZXJ0YWluIGVycm9yIGNvbmRpdGlvbnMgdG8gY2FsbCBCVUcoKS4gVmFsdWUgaXMgYSBiaXRtYXNrOwotCUFORCB0b2dldGhlciB0aGUgdGFncyB3aGljaCByZXByZXNlbnQgZXJyb3JzIHdoaWNoIHNob3VsZCBjYXVzZSBwYW5pY3M6CisJT1IgdG9nZXRoZXIgdGhlIHRhZ3Mgd2hpY2ggcmVwcmVzZW50IGVycm9ycyB3aGljaCBzaG91bGQgY2F1c2UgcGFuaWNzOgogCiAJCVhGU19OT19QVEFHICAgICAgICAgICAgICAgICAgICAgMAogCQlYRlNfUFRBR19JRkxVU0ggICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKQEAgLTI5OSw2ICsyOTksNyBAQAogCQlYRlNfUFRBR19TSFVURE9XTl9DT1JSVVBUICAgICAgIDB4MDAwMDAwMTAKIAkJWEZTX1BUQUdfU0hVVERPV05fSU9FUlJPUiAgICAgICAweDAwMDAwMDIwCiAJCVhGU19QVEFHX1NIVVRET1dOX0xPR0VSUk9SICAgICAgMHgwMDAwMDA0MAorCQlYRlNfUFRBR19GU0JMT0NLX1pFUk8gICAgICAgICAgIDB4MDAwMDAwODAKIAogCVRoaXMgb3B0aW9uIGlzIGludGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4KIApAQCAtMzQ4LDE2ICszNDksMTMgQEAKIERlcHJlY2F0ZWQgU3lzY3RscwogPT09PT09PT09PT09PT09PT09CiAKLSAgZnMueGZzLnhmc2J1ZmRfY2VudGlzZWNzCShNaW46IDUwICBEZWZhdWx0OiAxMDAJTWF4OiAzMDAwKQotCURpcnR5IG1ldGFkYXRhIGlzIG5vdyB0cmFja2VkIGJ5IHRoZSBsb2cgc3Vic3lzdGVtIGFuZAotCWZsdXNoaW5nIGlzIGRyaXZlbiBieSBsb2cgc3BhY2UgYW5kIGlkbGluZyBkZW1hbmRzLiBUaGUKLQl4ZnNidWZkIG5vIGxvbmdlciBleGlzdHMsIHNvIHRoaXMgc3ljdGwgZG9lcyBub3RoaW5nLgorTm9uZSBhdCBwcmVzZW50LgogCi0JRHVlIGZvciByZW1vdmFsIGluIDMuMTQuCiAKLSAgZnMueGZzLmFnZV9idWZmZXJfY2VudGlzZWNzCShNaW46IDEwMCAgRGVmYXVsdDogMTUwMCAgTWF4OiA3MjAwMDApCi0JRGlydHkgbWV0YWRhdGEgaXMgbm93IHRyYWNrZWQgYnkgdGhlIGxvZyBzdWJzeXN0ZW0gYW5kCi0JZmx1c2hpbmcgaXMgZHJpdmVuIGJ5IGxvZyBzcGFjZSBhbmQgaWRsaW5nIGRlbWFuZHMuIFRoZQotCXhmc2J1ZmQgbm8gbG9uZ2VyIGV4aXN0cywgc28gdGhpcyBzeWN0bCBkb2VzIG5vdGhpbmcuCitSZW1vdmVkIFN5c2N0bHMKKz09PT09PT09PT09PT09PQogCi0JRHVlIGZvciByZW1vdmFsIGluIDMuMTQuCisgIE5hbWUJCQkJUmVtb3ZlZAorICAtLS0tCQkJCS0tLS0tLS0KKyAgZnMueGZzLnhmc2J1ZmRfY2VudGlzZWMJdjMuMjAKKyAgZnMueGZzLmFnZV9idWZmZXJfY2VudGlzZWNzCXYzLjIwCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Z1dGV4LXJlcXVldWUtcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9mdXRleC1yZXF1ZXVlLXBpLnR4dAppbmRleCAzMWIxNjYxLi43N2IzNmY1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Z1dGV4LXJlcXVldWUtcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZnV0ZXgtcmVxdWV1ZS1waS50eHQKQEAgLTk4LDcgKzk4LDcgQEAKIGFsbG93IHRoZSByZXF1ZXVlIGNvZGUgdG8gYWNxdWlyZSBhbiB1bmNvbnRlbmRlZCBydF9tdXRleCBvbiBiZWhhbGYKIG9mIHRoZSB3YWl0ZXIgYW5kIHRvIGVucXVldWUgdGhlIHdhaXRlciBvbiBhIGNvbnRlbmRlZCBydF9tdXRleC4KIFR3byBuZXcgc3lzdGVtIGNhbGxzIHByb3ZpZGUgdGhlIGtlcm5lbDwtPnVzZXIgaW50ZXJmYWNlIHRvCi1yZXF1ZXVlX3BpOiBGVVRFWF9XQUlUX1JFUVVFVUVfUEkgYW5kIEZVVEVYX1JFUVVFVUVfQ01QX1BJLgorcmVxdWV1ZV9waTogRlVURVhfV0FJVF9SRVFVRVVFX1BJIGFuZCBGVVRFWF9DTVBfUkVRVUVVRV9QSS4KIAogRlVURVhfV0FJVF9SRVFVRVVFX1BJIGlzIGNhbGxlZCBieSB0aGUgd2FpdGVyIChwdGhyZWFkX2NvbmRfd2FpdCgpCiBhbmQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCgpKSB0byBibG9jayBvbiB0aGUgaW5pdGlhbCBmdXRleCBhbmQgd2FpdApAQCAtMTA3LDcgKzEwNyw3IEBACiBmdXRleF9sb2NrX3BpKCksIHdpdGggc29tZSBleHRyYSBsb2dpYyB0byBjaGVjayBmb3IgdGhlIGFkZGl0aW9uYWwKIHdha2UtdXAgc2NlbmFyaW9zLgogCi1GVVRFWF9SRVFVRVVFX0NNUF9QSSBpcyBjYWxsZWQgYnkgdGhlIHdha2VyCitGVVRFWF9DTVBfUkVRVUVVRV9QSSBpcyBjYWxsZWQgYnkgdGhlIHdha2VyCiAocHRocmVhZF9jb25kX2Jyb2FkY2FzdCgpIGFuZCBwdGhyZWFkX2NvbmRfc2lnbmFsKCkpIHRvIHJlcXVldWUgYW5kCiBwb3NzaWJseSB3YWtlIHRoZSB3YWl0aW5nIHRhc2tzLiBJbnRlcm5hbGx5LCB0aGlzIHN5c3RlbSBjYWxsIGlzCiBzdGlsbCBoYW5kbGVkIGJ5IGZ1dGV4X3JlcXVldWUgKGJ5IHBhc3NpbmcgcmVxdWV1ZV9waT0xKS4gIEJlZm9yZQpAQCAtMTIwLDEyICsxMjAsMTIgQEAKIHRoZSBsb2NrIGNhbiBiZSBhY3F1aXJlZCBhdCB0aGlzIHN0YWdlIGFzIHdlbGwsIGlmIHNvLCB0aGUgbmV4dAogd2FpdGVyIGlzIHdva2VuIHRvIGZpbmlzaCB0aGUgYWNxdWlzaXRpb24gb2YgdGhlIGxvY2suCiAKLUZVVEVYX1JFUVVFVUVfUEkgYWNjZXB0cyBucl93YWtlIGFuZCBucl9yZXF1ZXVlIGFzIGFyZ3VtZW50cywgYnV0CitGVVRFWF9DTVBfUkVRVUVVRV9QSSBhY2NlcHRzIG5yX3dha2UgYW5kIG5yX3JlcXVldWUgYXMgYXJndW1lbnRzLCBidXQKIHRoZWlyIHN1bSBpcyBhbGwgdGhhdCByZWFsbHkgbWF0dGVycy4gIGZ1dGV4X3JlcXVldWUoKSB3aWxsIHdha2Ugb3IKIHJlcXVldWUgdXAgdG8gbnJfd2FrZSArIG5yX3JlcXVldWUgdGFza3MuICBJdCB3aWxsIHdha2Ugb25seSBhcyBtYW55CiB0YXNrcyBhcyBpdCBjYW4gYWNxdWlyZSB0aGUgbG9jayBmb3IsIHdoaWNoIGluIHRoZSBtYWpvcml0eSBvZiBjYXNlcwogc2hvdWxkIGJlIDAgYXMgZ29vZCBwcm9ncmFtbWluZyBwcmFjdGljZSBkaWN0YXRlcyB0aGF0IHRoZSBjYWxsZXIgb2YKIGVpdGhlciBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCkgb3IgcHRocmVhZF9jb25kX3NpZ25hbCgpIGFjcXVpcmUgdGhlCi1tdXRleCBwcmlvciB0byBtYWtpbmcgdGhlIGNhbGwuIEZVVEVYX1JFUVVFVUVfUEkgcmVxdWlyZXMgdGhhdAorbXV0ZXggcHJpb3IgdG8gbWFraW5nIHRoZSBjYWxsLiBGVVRFWF9DTVBfUkVRVUVVRV9QSSByZXF1aXJlcyB0aGF0CiBucl93YWtlPTEuICBucl9yZXF1ZXVlIHNob3VsZCBiZSBJTlRfTUFYIGZvciBicm9hZGNhc3QgYW5kIDAgZm9yCiBzaWduYWwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2dwaW8vYm9hcmQudHh0IGIvRG9jdW1lbnRhdGlvbi9ncGlvL2JvYXJkLnR4dAppbmRleCA0NDUyNzg2Li44YjM1ZjUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2dwaW8vYm9hcmQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZ3Bpby9ib2FyZC50eHQKQEAgLTMxLDcgKzMxLDcgQEAKIAkJCSAgICA8JmdwaW8gMTYgR1BJT19BQ1RJVkVfSElHSD4sIC8qIGdyZWVuICovCiAJCQkgICAgPCZncGlvIDE3IEdQSU9fQUNUSVZFX0hJR0g+OyAvKiBibHVlICovCiAKLQkJcG93ZXItZ3BpbyA9IDwmZ3BpbyAxIEdQSU9fQUNUSVZFX0xPVz47CisJCXBvd2VyLWdwaW9zID0gPCZncGlvIDEgR1BJT19BQ1RJVkVfTE9XPjsKIAl9OwogCiBUaGlzIHByb3BlcnR5IHdpbGwgbWFrZSBHUElPcyAxNSwgMTYgYW5kIDE3IGF2YWlsYWJsZSB0byB0aGUgZHJpdmVyIHVuZGVyIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9pbmEyeHggYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2luYTJ4eAppbmRleCA0MjIzYzJkLi5jZmQzMWQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2luYTJ4eAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2luYTJ4eApAQCAtMjYsNiArMjYsMTIgQEAKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgd2Vic2l0ZQogICAgICAgICAgICAgICAgaHR0cDovL3d3dy50aS5jb20vCiAKKyAgKiBUZXhhcyBJbnN0cnVtZW50cyBJTkEyMzEKKyAgICBQcmVmaXg6ICdpbmEyMzEnCisgICAgQWRkcmVzc2VzOiBJMkMgMHg0MCAtIDB4NGYKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy50aS5jb20vCisKIEF1dGhvcjogTG90aGFyIEZlbHRlbiA8bC1mZWx0ZW5AdGkuY29tPgogCiBEZXNjcmlwdGlvbgpAQCAtNDEsOSArNDcsMTggQEAKIFRoZSBJTkEyMjYgaXMgYSBjdXJyZW50IHNodW50IGFuZCBwb3dlciBtb25pdG9yIHdpdGggYW4gSTJDIGludGVyZmFjZS4KIFRoZSBJTkEyMjYgbW9uaXRvcnMgYm90aCBhIHNodW50IHZvbHRhZ2UgZHJvcCBhbmQgYnVzIHN1cHBseSB2b2x0YWdlLgogCi1UaGUgSU5BMjMwIGlzIGEgaGlnaCBvciBsb3cgc2lkZSBjdXJyZW50IHNodW50IGFuZCBwb3dlciBtb25pdG9yIHdpdGggYW4gSTJDCi1pbnRlcmZhY2UuIFRoZSBJTkEyMzAgbW9uaXRvcnMgYm90aCBhIHNodW50IHZvbHRhZ2UgZHJvcCBhbmQgYnVzIHN1cHBseSB2b2x0YWdlLgorSU5BMjMwIGFuZCBJTkEyMzEgYXJlIGhpZ2ggb3IgbG93IHNpZGUgY3VycmVudCBzaHVudCBhbmQgcG93ZXIgbW9uaXRvcnMKK3dpdGggYW4gSTJDIGludGVyZmFjZS4gVGhlIGNoaXBzIG1vbml0b3IgYm90aCBhIHNodW50IHZvbHRhZ2UgZHJvcCBhbmQKK2J1cyBzdXBwbHkgdm9sdGFnZS4KIAotVGhlIHNodW50IHZhbHVlIGluIG1pY3JvLW9obXMgY2FuIGJlIHNldCB2aWEgcGxhdGZvcm0gZGF0YSBvciBkZXZpY2UgdHJlZS4KLVBsZWFzZSByZWZlciB0byB0aGUgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2kyYy9pbmEyeHgudHh0IGZvciBiaW5kaW5ncworVGhlIHNodW50IHZhbHVlIGluIG1pY3JvLW9obXMgY2FuIGJlIHNldCB2aWEgcGxhdGZvcm0gZGF0YSBvciBkZXZpY2UgdHJlZSBhdAorY29tcGlsZS10aW1lIG9yIHZpYSB0aGUgc2h1bnRfcmVzaXN0b3IgYXR0cmlidXRlIGluIHN5c2ZzIGF0IHJ1bi10aW1lLiBQbGVhc2UKK3JlZmVyIHRvIHRoZSBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL2luYTJ4eC50eHQgZm9yIGJpbmRpbmdzCiBpZiB0aGUgZGV2aWNlIHRyZWUgaXMgdXNlZC4KKworQWRkaXRpb25hbGx5IGluYTIyNiBzdXBwb3J0cyB1cGRhdGVfaW50ZXJ2YWwgYXR0cmlidXRlIGFzIGRlc2NyaWJlZCBpbgorRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UuIEludGVybmFsbHkgdGhlIGludGVydmFsIGlzIHRoZSBzdW0gb2YKK2J1cyBhbmQgc2h1bnQgdm9sdGFnZSBjb252ZXJzaW9uIHRpbWVzIG11bHRpcGxpZWQgYnkgdGhlIGF2ZXJhZ2luZyByYXRlLiBXZQorZG9uJ3QgdG91Y2ggdGhlIGNvbnZlcnNpb24gdGltZXMgYW5kIG9ubHkgbW9kaWZ5IHRoZSBudW1iZXIgb2YgYXZlcmFnZXMuIFRoZQorbG93ZXIgbGltaXQgb2YgdGhlIHVwZGF0ZV9pbnRlcnZhbCBpcyAyIG1zLCB0aGUgdXBwZXIgbGltaXQgaXMgMjI1MyBtcy4KK1RoZSBhY3R1YWwgcHJvZ3JhbW1lZCBpbnRlcnZhbCBtYXkgdmFyeSBmcm9tIHRoZSBkZXNpcmVkIHZhbHVlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCAxNzZkNGZlLi5hODllMzI2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtMTQ3MCw2ICsxNDcwLDkgQEAKIAkJICAgICAgIG5vX2h3cAogCQkgICAgICAgICBEbyBub3QgZW5hYmxlIGhhcmR3YXJlIFAgc3RhdGUgY29udHJvbCAoSFdQKQogCQkJIGlmIGF2YWlsYWJsZS4KKwkJaHdwX29ubHkKKwkJCU9ubHkgbG9hZCBpbnRlbF9wc3RhdGUgb24gc3lzdGVtcyB3aGljaCBzdXBwb3J0CisJCQloYXJkd2FyZSBQIHN0YXRlIGNvbnRyb2wgKEhXUCkgaWYgYXZhaWxhYmxlLgogCiAJaW50cmVtYXA9CVtYODYtNjQsIEludGVsLUlPTU1VXQogCQkJb24JZW5hYmxlIEludGVycnVwdCBSZW1hcHBpbmcgKGRlZmF1bHQpCkBAIC0xNDk0LDYgKzE0OTcsOCBAQAogCQlmb3JjZXNhYwogCQlzb2Z0CiAJCXB0CQlbeDg2LCBJQS02NF0KKwkJbm9ieXBhc3MJW1BQQy9QT1dFUk5WXQorCQkJRGlzYWJsZSBJT01NVSBieXBhc3MsIHVzaW5nIElPTU1VIGZvciBQQ0kgZGV2aWNlcy4KIAogCiAJaW83PQkJW0hXXSBJTzcgZm9yIE1hcnZlbCBiYXNlZCBhbHBoYSBzeXN0ZW1zCkBAIC0zMjA3LDYgKzMyMTIsMTggQEAKIAogCXJldGFpbl9pbml0cmQJW1JBTV0gS2VlcCBpbml0cmQgbWVtb3J5IGFmdGVyIGV4dHJhY3Rpb24KIAorCXJma2lsbC5kZWZhdWx0X3N0YXRlPQorCQkwCSJhaXJwbGFuZSBtb2RlIi4gIEFsbCB3aWZpLCBibHVldG9vdGgsIHdpbWF4LCBncHMsIGZtLAorCQkJZXRjLiBjb21tdW5pY2F0aW9uIGlzIGJsb2NrZWQgYnkgZGVmYXVsdC4KKwkJMQlVbmJsb2NrZWQuCisKKwlyZmtpbGwubWFzdGVyX3N3aXRjaF9tb2RlPQorCQkwCVRoZSAiYWlycGxhbmUgbW9kZSIgYnV0dG9uIGRvZXMgbm90aGluZy4KKwkJMQlUaGUgImFpcnBsYW5lIG1vZGUiIGJ1dHRvbiB0b2dnbGVzIGJldHdlZW4gZXZlcnl0aGluZworCQkJYmxvY2tlZCBhbmQgdGhlIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24uCisJCTIJVGhlICJhaXJwbGFuZSBtb2RlIiBidXR0b24gdG9nZ2xlcyBiZXR3ZWVuIGV2ZXJ5dGhpbmcKKwkJCWJsb2NrZWQgYW5kIGV2ZXJ5dGhpbmcgdW5ibG9ja2VkLgorCiAJcmhhc2hfZW50cmllcz0JW0tOTCxORVRdCiAJCQlTZXQgbnVtYmVyIG9mIGhhc2ggYnVja2V0cyBmb3Igcm91dGUgY2FjaGUKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dCBiL0RvY3VtZW50YXRpb24va3Byb2Jlcy50eHQKaW5kZXggNDIyN2VjMi4uMTQ4OGI2NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2twcm9iZXMudHh0CkBAIC03MDIsNyArNzAyLDggQEAKIHZpcnR1YWwgYWRkcmVzc2VzIHRoYXQgY29ycmVzcG9uZCB0byBtb2R1bGVzIHRoYXQndmUgYmVlbiB1bmxvYWRlZCksCiBzdWNoIHByb2JlcyBhcmUgbWFya2VkIHdpdGggW0dPTkVdLiBJZiB0aGUgcHJvYmUgaXMgdGVtcG9yYXJpbHkgZGlzYWJsZWQsCiBzdWNoIHByb2JlcyBhcmUgbWFya2VkIHdpdGggW0RJU0FCTEVEXS4gSWYgdGhlIHByb2JlIGlzIG9wdGltaXplZCwgaXQgaXMKLW1hcmtlZCB3aXRoIFtPUFRJTUlaRURdLgorbWFya2VkIHdpdGggW09QVElNSVpFRF0uIElmIHRoZSBwcm9iZSBpcyBmdHJhY2UtYmFzZWQsIGl0IGlzIG1hcmtlZCB3aXRoCitbRlRSQUNFXS4KIAogL3N5cy9rZXJuZWwvZGVidWcva3Byb2Jlcy9lbmFibGVkOiBUdXJuIGtwcm9iZXMgT04vT0ZGIGZvcmNpYmx5LgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xvY2tpbmcvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL2xvY2tpbmcvMDAtSU5ERVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI1NmM5YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbG9ja2luZy8wMC1JTkRFWApAQCAtMCwwICsxLDE2IEBACiswMC1JTkRFWAorCS0gdGhpcyBmaWxlLgorbG9ja2RlcC1kZXNpZ24udHh0CisJLSBkb2N1bWVudGF0aW9uIG9uIHRoZSBydW50aW1lIGxvY2tpbmcgY29ycmVjdG5lc3MgdmFsaWRhdG9yLgorbG9ja3N0YXQudHh0CisJLSBpbmZvIG9uIGNvbGxlY3Rpbmcgc3RhdGlzdGljcyBvbiBsb2NrcyAoYW5kIGNvbnRlbnRpb24pLgorbXV0ZXgtZGVzaWduLnR4dAorCS0gaW5mbyBvbiB0aGUgZ2VuZXJpYyBtdXRleCBzdWJzeXN0ZW0uCitydC1tdXRleC1kZXNpZ24udHh0CisJLSBkZXNjcmlwdGlvbiBvZiB0aGUgUmVhbFRpbWUgbXV0ZXggaW1wbGVtZW50YXRpb24gZGVzaWduLgorcnQtbXV0ZXgudHh0CisJLSBkZXNjLiBvZiBSVC1tdXRleCBzdWJzeXN0ZW0gd2l0aCBQSSAoUHJpb3JpdHkgSW5oZXJpdGFuY2UpIHN1cHBvcnQuCitzcGlubG9ja3MudHh0CisJLSBpbmZvIG9uIHVzaW5nIHNwaW5sb2NrcyB0byBwcm92aWRlIGV4Y2x1c2l2ZSBhY2Nlc3MgaW4ga2VybmVsLgord3ctbXV0ZXgtZGVzaWduLnR4dAorCS0gSW50cm8gdG8gTXV0ZXggd2FpdC93b3VsZCBkZWFkbG9jayBoYW5kbGluZy5zCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja2RlcC1kZXNpZ24udHh0IGIvRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2tkZXAtZGVzaWduLnR4dAppbmRleCA1ZGJjOTljLi41MDAxMjgwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja2RlcC1kZXNpZ24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrZGVwLWRlc2lnbi50eHQKQEAgLTM0LDcgKzM0LDcgQEAKIC0gJ2V2ZXIgaGVsZCB3aXRoIFNUQVRFIGVuYWJsZWQnCiAtICdldmVyIGhlbGQgYXMgcmVhZGxvY2sgd2l0aCBTVEFURSBlbmFibGVkJwogCi1XaGVyZSBTVEFURSBjYW4gYmUgZWl0aGVyIG9uZSBvZiAoa2VybmVsL2xvY2tkZXBfc3RhdGVzLmgpCitXaGVyZSBTVEFURSBjYW4gYmUgZWl0aGVyIG9uZSBvZiAoa2VybmVsL2xvY2tpbmcvbG9ja2RlcF9zdGF0ZXMuaCkKICAtIGhhcmRpcnEKICAtIHNvZnRpcnEKICAtIHJlY2xhaW1fZnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbG9ja2luZy9sb2Nrc3RhdC50eHQgYi9Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3N0YXQudHh0CmluZGV4IDc0Mjg3NzMuLjU2OGJiYmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbG9ja2luZy9sb2Nrc3RhdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2tzdGF0LnR4dApAQCAtMTIxLDYgKzEyMSwxMSBAQAogc3RhdGlzdGljcy4gVGhlc2Ugc3RhdGlzdGljcyBjb21lIGluIHR3byBwYXJ0czsgdGhlIGFjdHVhbCBzdGF0cyBzZXBhcmF0ZWQgYnkgYQogc2hvcnQgc2VwYXJhdG9yIChsaW5lIDA4LCAxMykgZnJvbSB0aGUgY29udGVudGlvbiBwb2ludHMuCiAKK0xpbmVzIDA5LTEyIHNob3cgdGhlIGZpcnN0IDQgcmVjb3JkZWQgY29udGVudGlvbiBwb2ludHMgKHRoZSBjb2RlCit3aGljaCB0cmllcyB0byBnZXQgdGhlIGxvY2spIGFuZCBsaW5lcyAxNC0xNyBzaG93IHRoZSBmaXJzdCA0IHJlY29yZGVkCitjb250ZW5kZWQgcG9pbnRzICh0aGUgbG9jayBob2xkZXIpLiBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBtYXgKK2Nvbi1ib3VuY2VzIHBvaW50IGlzIG1pc3NpbmcgaW4gdGhlIHN0YXRpc3RpY3MuCisKIFRoZSBmaXJzdCBsb2NrICgwNS0xOCkgaXMgYSByZWFkL3dyaXRlIGxvY2ssIGFuZCBzaG93cyB0d28gbGluZXMgYWJvdmUgdGhlCiBzaG9ydCBzZXBhcmF0b3IuIFRoZSBjb250ZW50aW9uIHBvaW50cyBkb24ndCBtYXRjaCB0aGUgY29sdW1uIGRlc2NyaXB0b3JzLAogdGhleSBoYXZlIHR3bzogY29udGVudGlvbnMgYW5kIFs8SVA+XSBzeW1ib2wuIFRoZSBzZWNvbmQgc2V0IG9mIGNvbnRlbnRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dAppbmRleCA3MGEwOWY4Li5jYTIzODdlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CkBAIC0yNjksNiArMjY5LDUwIEBACiAJU1RPUkUgKihBICsgNCkgPSBZOyBTVE9SRSAqQSA9IFg7CiAJU1RPUkUgeypBLCAqKEEgKyA0KSB9ID0ge1gsIFl9OwogCitBbmQgdGhlcmUgYXJlIGFudGktZ3VhcmFudGVlczoKKworICgqKSBUaGVzZSBndWFyYW50ZWVzIGRvIG5vdCBhcHBseSB0byBiaXRmaWVsZHMsIGJlY2F1c2UgY29tcGlsZXJzIG9mdGVuCisgICAgIGdlbmVyYXRlIGNvZGUgdG8gbW9kaWZ5IHRoZXNlIHVzaW5nIG5vbi1hdG9taWMgcmVhZC1tb2RpZnktd3JpdGUKKyAgICAgc2VxdWVuY2VzLiAgRG8gbm90IGF0dGVtcHQgdG8gdXNlIGJpdGZpZWxkcyB0byBzeW5jaHJvbml6ZSBwYXJhbGxlbAorICAgICBhbGdvcml0aG1zLgorCisgKCopIEV2ZW4gaW4gY2FzZXMgd2hlcmUgYml0ZmllbGRzIGFyZSBwcm90ZWN0ZWQgYnkgbG9ja3MsIGFsbCBmaWVsZHMKKyAgICAgaW4gYSBnaXZlbiBiaXRmaWVsZCBtdXN0IGJlIHByb3RlY3RlZCBieSBvbmUgbG9jay4gIElmIHR3byBmaWVsZHMKKyAgICAgaW4gYSBnaXZlbiBiaXRmaWVsZCBhcmUgcHJvdGVjdGVkIGJ5IGRpZmZlcmVudCBsb2NrcywgdGhlIGNvbXBpbGVyJ3MKKyAgICAgbm9uLWF0b21pYyByZWFkLW1vZGlmeS13cml0ZSBzZXF1ZW5jZXMgY2FuIGNhdXNlIGFuIHVwZGF0ZSB0byBvbmUKKyAgICAgZmllbGQgdG8gY29ycnVwdCB0aGUgdmFsdWUgb2YgYW4gYWRqYWNlbnQgZmllbGQuCisKKyAoKikgVGhlc2UgZ3VhcmFudGVlcyBhcHBseSBvbmx5IHRvIHByb3Blcmx5IGFsaWduZWQgYW5kIHNpemVkIHNjYWxhcgorICAgICB2YXJpYWJsZXMuICAiUHJvcGVybHkgc2l6ZWQiIGN1cnJlbnRseSBtZWFucyB2YXJpYWJsZXMgdGhhdCBhcmUKKyAgICAgdGhlIHNhbWUgc2l6ZSBhcyAiY2hhciIsICJzaG9ydCIsICJpbnQiIGFuZCAibG9uZyIuICAiUHJvcGVybHkKKyAgICAgYWxpZ25lZCIgbWVhbnMgdGhlIG5hdHVyYWwgYWxpZ25tZW50LCB0aHVzIG5vIGNvbnN0cmFpbnRzIGZvcgorICAgICAiY2hhciIsIHR3by1ieXRlIGFsaWdubWVudCBmb3IgInNob3J0IiwgZm91ci1ieXRlIGFsaWdubWVudCBmb3IKKyAgICAgImludCIsIGFuZCBlaXRoZXIgZm91ci1ieXRlIG9yIGVpZ2h0LWJ5dGUgYWxpZ25tZW50IGZvciAibG9uZyIsCisgICAgIG9uIDMyLWJpdCBhbmQgNjQtYml0IHN5c3RlbXMsIHJlc3BlY3RpdmVseS4gIE5vdGUgdGhhdCB0aGVzZQorICAgICBndWFyYW50ZWVzIHdlcmUgaW50cm9kdWNlZCBpbnRvIHRoZSBDMTEgc3RhbmRhcmQsIHNvIGJld2FyZSB3aGVuCisgICAgIHVzaW5nIG9sZGVyIHByZS1DMTEgY29tcGlsZXJzIChmb3IgZXhhbXBsZSwgZ2NjIDQuNikuICBUaGUgcG9ydGlvbgorICAgICBvZiB0aGUgc3RhbmRhcmQgY29udGFpbmluZyB0aGlzIGd1YXJhbnRlZSBpcyBTZWN0aW9uIDMuMTQsIHdoaWNoCisgICAgIGRlZmluZXMgIm1lbW9yeSBsb2NhdGlvbiIgYXMgZm9sbG93czoKKworICAgICAJbWVtb3J5IGxvY2F0aW9uCisJCWVpdGhlciBhbiBvYmplY3Qgb2Ygc2NhbGFyIHR5cGUsIG9yIGEgbWF4aW1hbCBzZXF1ZW5jZQorCQlvZiBhZGphY2VudCBiaXQtZmllbGRzIGFsbCBoYXZpbmcgbm9uemVybyB3aWR0aAorCisJCU5PVEUgMTogVHdvIHRocmVhZHMgb2YgZXhlY3V0aW9uIGNhbiB1cGRhdGUgYW5kIGFjY2VzcworCQlzZXBhcmF0ZSBtZW1vcnkgbG9jYXRpb25zIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aAorCQllYWNoIG90aGVyLgorCisJCU5PVEUgMjogQSBiaXQtZmllbGQgYW5kIGFuIGFkamFjZW50IG5vbi1iaXQtZmllbGQgbWVtYmVyCisJCWFyZSBpbiBzZXBhcmF0ZSBtZW1vcnkgbG9jYXRpb25zLiBUaGUgc2FtZSBhcHBsaWVzCisJCXRvIHR3byBiaXQtZmllbGRzLCBpZiBvbmUgaXMgZGVjbGFyZWQgaW5zaWRlIGEgbmVzdGVkCisJCXN0cnVjdHVyZSBkZWNsYXJhdGlvbiBhbmQgdGhlIG90aGVyIGlzIG5vdCwgb3IgaWYgdGhlIHR3bworCQlhcmUgc2VwYXJhdGVkIGJ5IGEgemVyby1sZW5ndGggYml0LWZpZWxkIGRlY2xhcmF0aW9uLAorCQlvciBpZiB0aGV5IGFyZSBzZXBhcmF0ZWQgYnkgYSBub24tYml0LWZpZWxkIG1lbWJlcgorCQlkZWNsYXJhdGlvbi4gSXQgaXMgbm90IHNhZmUgdG8gY29uY3VycmVudGx5IHVwZGF0ZSB0d28KKwkJYml0LWZpZWxkcyBpbiB0aGUgc2FtZSBzdHJ1Y3R1cmUgaWYgYWxsIG1lbWJlcnMgZGVjbGFyZWQKKwkJYmV0d2VlbiB0aGVtIGFyZSBhbHNvIGJpdC1maWVsZHMsIG5vIG1hdHRlciB3aGF0IHRoZQorCQlzaXplcyBvZiB0aG9zZSBpbnRlcnZlbmluZyBiaXQtZmllbGRzIGhhcHBlbiB0byBiZS4KKwogCiA9PT09PT09PT09PT09PT09PT09PT09PT09CiBXSEFUIEFSRSBNRU1PUlkgQkFSUklFUlM/CkBAIC03NTAsNyArNzk0LDcgQEAKICAgICAgIEhvd2V2ZXIsIHRoZXkgZG8gLW5vdC0gZ3VhcmFudGVlIGFueSBvdGhlciBzb3J0IG9mIG9yZGVyaW5nOgogICAgICAgTm90IHByaW9yIGxvYWRzIGFnYWluc3QgbGF0ZXIgbG9hZHMsIG5vciBwcmlvciBzdG9yZXMgYWdhaW5zdAogICAgICAgbGF0ZXIgYW55dGhpbmcuICBJZiB5b3UgbmVlZCB0aGVzZSBvdGhlciBmb3JtcyBvZiBvcmRlcmluZywKLSAgICAgIHVzZSBzbWJfcm1iKCksIHNtcF93bWIoKSwgb3IsIGluIHRoZSBjYXNlIG9mIHByaW9yIHN0b3JlcyBhbmQKKyAgICAgIHVzZSBzbXBfcm1iKCksIHNtcF93bWIoKSwgb3IsIGluIHRoZSBjYXNlIG9mIHByaW9yIHN0b3JlcyBhbmQKICAgICAgIGxhdGVyIGxvYWRzLCBzbXBfbWIoKS4KIAogICAoKikgSWYgYm90aCBsZWdzIG9mIHRoZSAiaWYiIHN0YXRlbWVudCBiZWdpbiB3aXRoIGlkZW50aWNhbCBzdG9yZXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL21laS9tZWktY2xpZW50LWJ1cy50eHQgYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9tZWkvbWVpLWNsaWVudC1idXMudHh0CmluZGV4IGY4MzkxMGEuLjc0M2JlNGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWlzYy1kZXZpY2VzL21laS9tZWktY2xpZW50LWJ1cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvbWVpL21laS1jbGllbnQtYnVzLnR4dApAQCAtMSw5ICsxLDEwIEBACiBJbnRlbChSKSBNYW5hZ2VtZW50IEVuZ2luZSAoTUUpIENsaWVudCBidXMgQVBJCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKIFJhdGlvbmFsZQogPT09PT09PT09CisKIE1FSSBtaXNjIGNoYXJhY3RlciBkZXZpY2UgaXMgdXNlZnVsIGZvciBkZWRpY2F0ZWQgYXBwbGljYXRpb25zIHRvIHNlbmQgYW5kIHJlY2VpdmUKIGRhdGEgdG8gdGhlIG1hbnkgRlcgYXBwbGlhbmNlIGZvdW5kIGluIEludGVsJ3MgTUUgZnJvbSB0aGUgdXNlciBzcGFjZS4KIEhvd2V2ZXIgZm9yIHNvbWUgb2YgdGhlIE1FIGZ1bmN0aW9uYWxpdGllcyBpdCBtYWtlIHNlbnNlIHRvIGxldmVyYWdlIGV4aXN0aW5nIHNvZnR3YXJlCkBAIC0xNyw3ICsxOCw4IEBACiAKIAogTUVJIENMIGJ1cyBBUEkKLT09PT09PT09PT09Cis9PT09PT09PT09PT09PQorCiBBIGRyaXZlciBpbXBsZW1lbnRhdGlvbiBmb3IgYW4gTUVJIENsaWVudCBpcyB2ZXJ5IHNpbWlsYXIgdG8gZXhpc3RpbmcgYnVzCiBiYXNlZCBkZXZpY2UgZHJpdmVycy4gVGhlIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmIGFzIGFuIE1FSSBDTCBidXMgZHJpdmVyIHRocm91Z2gKIHRoZSBtZWlfY2xfZHJpdmVyIHN0cnVjdHVyZToKQEAgLTU1LDYgKzU3LDcgQEAKIAogRXhhbXBsZQogPT09PT09PQorCiBBcyBhIHRoZW9yZXRpY2FsIGV4YW1wbGUgbGV0J3MgcHJldGVuZCB0aGUgTUUgY29tZXMgd2l0aCBhICJjb250YWN0IiBORkMgSVAuCiBUaGUgZHJpdmVyIGluaXQgYW5kIGV4aXQgcm91dGluZXMgZm9yIHRoaXMgZGV2aWNlIHdvdWxkIGxvb2sgbGlrZToKIApAQCAtNjksMTEgKzcyLDExIEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKG1laV9jbCwgY29udGFjdF9tZWlfY2xfdGJsKTsKIAogc3RhdGljIHN0cnVjdCBtZWlfY2xfZHJpdmVyIGNvbnRhY3RfZHJpdmVyID0gewotICAgICAgIC5pZF90YWJsZSA9IGNvbnRhY3RfbWVpX3RibCwKLSAgICAgICAubmFtZSA9IENPTlRBQ1RfRFJJVkVSX05BTUUsCisJLmlkX3RhYmxlID0gY29udGFjdF9tZWlfdGJsLAorCS5uYW1lID0gQ09OVEFDVF9EUklWRVJfTkFNRSwKIAotICAgICAgIC5wcm9iZSA9IGNvbnRhY3RfcHJvYmUsCi0gICAgICAgLnJlbW92ZSA9IGNvbnRhY3RfcmVtb3ZlLAorCS5wcm9iZSA9IGNvbnRhY3RfcHJvYmUsCisJLnJlbW92ZSA9IGNvbnRhY3RfcmVtb3ZlLAogfTsKIAogc3RhdGljIGludCBjb250YWN0X2luaXQodm9pZCkKQEAgLTEwOSw3ICsxMTIsNyBAQAogCW1laV9jbF9yZWdpc3Rlcl9ldmVudF9jYihkZXYsIGNvbnRhY3RfZXZlbnRfY2IsIGNvbnRhY3QpOwogCiAJcmV0dXJuIDA7Ci0gfQorfQogCiBJbiB0aGUgcHJvYmUgcm91dGluZSB0aGUgZHJpdmVyIGZpcnN0IGVuYWJsZSB0aGUgTUVJIGRldmljZSBhbmQgdGhlbiByZWdpc3RlcnMKIGFuIE1FIGJ1cyBldmVudCBoYW5kbGVyIHdoaWNoIGlzIGFzIGNsb3NlIGFzIGl0IGNhbiBnZXQgdG8gcmVnaXN0ZXJpbmcgYQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9taXNjLWRldmljZXMvbWVpL21laS50eHQgYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9tZWkvbWVpLnR4dAppbmRleCAxNWJiYTFhLi44ZDQ3NTAxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9tZWkvbWVpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21pc2MtZGV2aWNlcy9tZWkvbWVpLnR4dApAQCAtMSw4ICsxLDggQEAKIEludGVsKFIpIE1hbmFnZW1lbnQgRW5naW5lIEludGVyZmFjZSAoSW50ZWwoUikgTUVJKQotPT09PT09PT09PT09PT09PT09PT09PT0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBJbnRyb2R1Y3Rpb24KLT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT0KIAogVGhlIEludGVsIE1hbmFnZW1lbnQgRW5naW5lIChJbnRlbCBNRSkgaXMgYW4gaXNvbGF0ZWQgYW5kIHByb3RlY3RlZCBjb21wdXRpbmcKIHJlc291cmNlIChDby1wcm9jZXNzb3IpIHJlc2lkaW5nIGluc2lkZSBjZXJ0YWluIEludGVsIGNoaXBzZXRzLiBUaGUgSW50ZWwgTUUKQEAgLTE5LDcgKzE5LDcgQEAKIGhlYWRlciBhbmQgcGF5bG9hZCB1cCB0byA1MTIgYnl0ZXMuCiAKIFByb21pbmVudCB1c2FnZSBvZiB0aGUgSW50ZWwgTUUgSW50ZXJmYWNlIGlzIHRvIGNvbW11bmljYXRlIHdpdGggSW50ZWwoUikKLUFjdGl2ZSBNYW5hZ2VtZW50IFRlY2hub2xvZ3kgKEludGVsIEFNVClpbXBsZW1lbnRlZCBpbiBmaXJtd2FyZSBydW5uaW5nIG9uCitBY3RpdmUgTWFuYWdlbWVudCBUZWNobm9sb2d5IChJbnRlbCBBTVQpIGltcGxlbWVudGVkIGluIGZpcm13YXJlIHJ1bm5pbmcgb24KIHRoZSBJbnRlbCBNRS4KIAogSW50ZWwgQU1UIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIG1hbmFnZSBhIGhvc3QgcmVtb3RlbHkgb3V0LW9mLWJhbmQgKE9PQikKQEAgLTQ0LDggKzQ0LDkgQEAKIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IEludGVsIEFNVDoKIGh0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vc2l0ZXMvbWFuYWdlYWJpbGl0eS9BTVRfSW1wbGVtZW50YXRpb25fYW5kX1JlZmVyZW5jZV9HdWlkZQogCisKIEludGVsIE1FSSBEcml2ZXIKLT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09CiAKIFRoZSBkcml2ZXIgZXhwb3NlcyBhIG1pc2MgZGV2aWNlIGNhbGxlZCAvZGV2L21laS4KIApAQCAtOTEsOCArOTIsMTAgQEAKIAlbLi4uXQogCWNsb3NlKGZkKTsKIAotSU9DVEw6Ci09PT09PT0KKworSU9DVEwKKz09PT09CisKIFRoZSBJbnRlbCBNRUkgRHJpdmVyIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgSU9DVEwgY29tbWFuZDoKIAlJT0NUTF9NRUlfQ09OTkVDVF9DTElFTlQJQ29ubmVjdCB0byBmaXJtd2FyZSBGZWF0dXJlIChjbGllbnQpLgogCkBAIC0xMjIsNTggKzEyNSw2MSBAQAogICAgICAgICBkYXRhIHRoYXQgY2FuIGJlIHNlbnQgb3IgcmVjZWl2ZWQuIChlLmcuIGlmIE1UVT0ySywgY2FuIHNlbmQKICAgICAgICAgcmVxdWVzdHMgdXAgdG8gYnl0ZXMgMmsgYW5kIHJlY2VpdmVkIHJlc3BvbnNlcyB1cCB0byAyayBieXRlcykuCiAKLUludGVsIE1FIEFwcGxpY2F0aW9uczoKLT09PT09PT09PT09PT09CiAKLTEpIEludGVsIExvY2FsIE1hbmFnZW1lbnQgU2VydmljZSAoSW50ZWwgTE1TKQorSW50ZWwgTUUgQXBwbGljYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT0KIAotCUFwcGxpY2F0aW9ucyBydW5uaW5nIGxvY2FsbHkgb24gdGhlIHBsYXRmb3JtIGNvbW11bmljYXRlIHdpdGggSW50ZWwgQU1UIFJlbGVhc2UKLQkyLjAgYW5kIGxhdGVyIHJlbGVhc2VzIGluIHRoZSBzYW1lIHdheSB0aGF0IG5ldHdvcmsgYXBwbGljYXRpb25zIGRvIHZpYSBTT0FQCi0Jb3ZlciBIVFRQIChkZXByZWNhdGVkIHN0YXJ0aW5nIHdpdGggUmVsZWFzZSA2LjApIG9yIHdpdGggV1MtTWFuYWdlbWVudCBvdmVyCi0JU09BUCBvdmVyIEhUVFAuIFRoaXMgbWVhbnMgdGhhdCBzb21lIEludGVsIEFNVCBmZWF0dXJlcyBjYW4gYmUgYWNjZXNzZWQgZnJvbSBhCi0JbG9jYWwgYXBwbGljYXRpb24gdXNpbmcgdGhlIHNhbWUgbmV0d29yayBpbnRlcmZhY2UgYXMgYSByZW1vdGUgYXBwbGljYXRpb24KLQljb21tdW5pY2F0aW5nIHdpdGggSW50ZWwgQU1UIG92ZXIgdGhlIG5ldHdvcmsuCisJMSkgSW50ZWwgTG9jYWwgTWFuYWdlbWVudCBTZXJ2aWNlIChJbnRlbCBMTVMpCiAKLQlXaGVuIGEgbG9jYWwgYXBwbGljYXRpb24gc2VuZHMgYSBtZXNzYWdlIGFkZHJlc3NlZCB0byB0aGUgbG9jYWwgSW50ZWwgQU1UIGhvc3QKLQluYW1lLCB0aGUgSW50ZWwgTE1TLCB3aGljaCBsaXN0ZW5zIGZvciB0cmFmZmljIGRpcmVjdGVkIHRvIHRoZSBob3N0IG5hbWUsCi0JaW50ZXJjZXB0cyB0aGUgbWVzc2FnZSBhbmQgcm91dGVzIGl0IHRvIHRoZSBJbnRlbCBNRUkuCi0JRm9yIG1vcmUgaW5mb3JtYXRpb246Ci0JaHR0cDovL3NvZnR3YXJlLmludGVsLmNvbS9zaXRlcy9tYW5hZ2VhYmlsaXR5L0FNVF9JbXBsZW1lbnRhdGlvbl9hbmRfUmVmZXJlbmNlX0d1aWRlCi0JVW5kZXIgIkFib3V0IEludGVsIEFNVCIgPT4gIkxvY2FsIEFjY2VzcyIKKwkgICBBcHBsaWNhdGlvbnMgcnVubmluZyBsb2NhbGx5IG9uIHRoZSBwbGF0Zm9ybSBjb21tdW5pY2F0ZSB3aXRoIEludGVsIEFNVCBSZWxlYXNlCisJICAgMi4wIGFuZCBsYXRlciByZWxlYXNlcyBpbiB0aGUgc2FtZSB3YXkgdGhhdCBuZXR3b3JrIGFwcGxpY2F0aW9ucyBkbyB2aWEgU09BUAorCSAgIG92ZXIgSFRUUCAoZGVwcmVjYXRlZCBzdGFydGluZyB3aXRoIFJlbGVhc2UgNi4wKSBvciB3aXRoIFdTLU1hbmFnZW1lbnQgb3ZlcgorCSAgIFNPQVAgb3ZlciBIVFRQLiBUaGlzIG1lYW5zIHRoYXQgc29tZSBJbnRlbCBBTVQgZmVhdHVyZXMgY2FuIGJlIGFjY2Vzc2VkIGZyb20gYQorCSAgIGxvY2FsIGFwcGxpY2F0aW9uIHVzaW5nIHRoZSBzYW1lIG5ldHdvcmsgaW50ZXJmYWNlIGFzIGEgcmVtb3RlIGFwcGxpY2F0aW9uCisJICAgY29tbXVuaWNhdGluZyB3aXRoIEludGVsIEFNVCBvdmVyIHRoZSBuZXR3b3JrLgogCi0JRm9yIGRvd25sb2FkaW5nIEludGVsIExNUzoKLQlodHRwOi8vc29mdHdhcmUuaW50ZWwuY29tL2VuLXVzL2FydGljbGVzL2Rvd25sb2FkLXRoZS1sYXRlc3QtaW50ZWwtYW10LW9wZW4tc291cmNlLWRyaXZlcnMvCisJICAgV2hlbiBhIGxvY2FsIGFwcGxpY2F0aW9uIHNlbmRzIGEgbWVzc2FnZSBhZGRyZXNzZWQgdG8gdGhlIGxvY2FsIEludGVsIEFNVCBob3N0CisJICAgbmFtZSwgdGhlIEludGVsIExNUywgd2hpY2ggbGlzdGVucyBmb3IgdHJhZmZpYyBkaXJlY3RlZCB0byB0aGUgaG9zdCBuYW1lLAorCSAgIGludGVyY2VwdHMgdGhlIG1lc3NhZ2UgYW5kIHJvdXRlcyBpdCB0byB0aGUgSW50ZWwgTUVJLgorCSAgIEZvciBtb3JlIGluZm9ybWF0aW9uOgorCSAgIGh0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vc2l0ZXMvbWFuYWdlYWJpbGl0eS9BTVRfSW1wbGVtZW50YXRpb25fYW5kX1JlZmVyZW5jZV9HdWlkZQorCSAgIFVuZGVyICJBYm91dCBJbnRlbCBBTVQiID0+ICJMb2NhbCBBY2Nlc3MiCiAKLQlUaGUgSW50ZWwgTE1TIG9wZW5zIGEgY29ubmVjdGlvbiB1c2luZyB0aGUgSW50ZWwgTUVJIGRyaXZlciB0byB0aGUgSW50ZWwgTE1TCi0JZmlybXdhcmUgZmVhdHVyZSB1c2luZyBhIGRlZmluZWQgVVVJRCBhbmQgdGhlbiBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgZmVhdHVyZQotCXVzaW5nIGEgcHJvdG9jb2wgY2FsbGVkIEludGVsIEFNVCBQb3J0IEZvcndhcmRpbmcgUHJvdG9jb2woSW50ZWwgQVBGIHByb3RvY29sKS4KLQlUaGUgcHJvdG9jb2wgaXMgdXNlZCB0byBtYWludGFpbiBtdWx0aXBsZSBzZXNzaW9ucyB3aXRoIEludGVsIEFNVCBmcm9tIGEKLQlzaW5nbGUgYXBwbGljYXRpb24uCisJICAgRm9yIGRvd25sb2FkaW5nIEludGVsIExNUzoKKwkgICBodHRwOi8vc29mdHdhcmUuaW50ZWwuY29tL2VuLXVzL2FydGljbGVzL2Rvd25sb2FkLXRoZS1sYXRlc3QtaW50ZWwtYW10LW9wZW4tc291cmNlLWRyaXZlcnMvCiAKLQlTZWUgdGhlIHByb3RvY29sIHNwZWNpZmljYXRpb24gaW4gdGhlIEludGVsIEFNVCBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQoU0RLKQotCWh0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vc2l0ZXMvbWFuYWdlYWJpbGl0eS9BTVRfSW1wbGVtZW50YXRpb25fYW5kX1JlZmVyZW5jZV9HdWlkZQotCVVuZGVyICJTREsgUmVzb3VyY2VzIiA9PiAiSW50ZWwoUikgdlBybyhUTSkgR2F0ZXdheShNUFMpIgotCT0+ICJJbmZvcm1hdGlvbiBmb3IgSW50ZWwoUikgdlBybyhUTSkgR2F0ZXdheSBEZXZlbG9wZXJzIgotCT0+ICJEZXNjcmlwdGlvbiBvZiB0aGUgSW50ZWwgQU1UIFBvcnQgRm9yd2FyZGluZyAoQVBGKVByb3RvY29sIgorCSAgIFRoZSBJbnRlbCBMTVMgb3BlbnMgYSBjb25uZWN0aW9uIHVzaW5nIHRoZSBJbnRlbCBNRUkgZHJpdmVyIHRvIHRoZSBJbnRlbCBMTVMKKwkgICBmaXJtd2FyZSBmZWF0dXJlIHVzaW5nIGEgZGVmaW5lZCBVVUlEIGFuZCB0aGVuIGNvbW11bmljYXRlcyB3aXRoIHRoZSBmZWF0dXJlCisJICAgdXNpbmcgYSBwcm90b2NvbCBjYWxsZWQgSW50ZWwgQU1UIFBvcnQgRm9yd2FyZGluZyBQcm90b2NvbCAoSW50ZWwgQVBGIHByb3RvY29sKS4KKwkgICBUaGUgcHJvdG9jb2wgaXMgdXNlZCB0byBtYWludGFpbiBtdWx0aXBsZSBzZXNzaW9ucyB3aXRoIEludGVsIEFNVCBmcm9tIGEKKwkgICBzaW5nbGUgYXBwbGljYXRpb24uCiAKLSAgMikgSW50ZWwgQU1UIFJlbW90ZSBjb25maWd1cmF0aW9uIHVzaW5nIGEgTG9jYWwgQWdlbnQKLQlBIExvY2FsIEFnZW50IGVuYWJsZXMgSVQgcGVyc29ubmVsIHRvIGNvbmZpZ3VyZSBJbnRlbCBBTVQgb3V0LW9mLXRoZS1ib3gKLQl3aXRob3V0IHJlcXVpcmluZyBpbnN0YWxsaW5nIGFkZGl0aW9uYWwgZGF0YSB0byBlbmFibGUgc2V0dXAuIFRoZSByZW1vdGUKLQljb25maWd1cmF0aW9uIHByb2Nlc3MgbWF5IGludm9sdmUgYW4gSVNWLWRldmVsb3BlZCByZW1vdGUgY29uZmlndXJhdGlvbgotCWFnZW50IHRoYXQgcnVucyBvbiB0aGUgaG9zdC4KLQlGb3IgbW9yZSBpbmZvcm1hdGlvbjoKLQlodHRwOi8vc29mdHdhcmUuaW50ZWwuY29tL3NpdGVzL21hbmFnZWFiaWxpdHkvQU1UX0ltcGxlbWVudGF0aW9uX2FuZF9SZWZlcmVuY2VfR3VpZGUKLQlVbmRlciAiU2V0dXAgYW5kIENvbmZpZ3VyYXRpb24gb2YgSW50ZWwgQU1UIiA9PgotCSJTREsgVG9vbHMgU3VwcG9ydGluZyBTZXR1cCBhbmQgQ29uZmlndXJhdGlvbiIgPT4KLQkiVXNpbmcgdGhlIExvY2FsIEFnZW50IFNhbXBsZSIKKwkgICBTZWUgdGhlIHByb3RvY29sIHNwZWNpZmljYXRpb24gaW4gdGhlIEludGVsIEFNVCBTb2Z0d2FyZSBEZXZlbG9wbWVudCBLaXQgKFNESykKKwkgICBodHRwOi8vc29mdHdhcmUuaW50ZWwuY29tL3NpdGVzL21hbmFnZWFiaWxpdHkvQU1UX0ltcGxlbWVudGF0aW9uX2FuZF9SZWZlcmVuY2VfR3VpZGUKKwkgICBVbmRlciAiU0RLIFJlc291cmNlcyIgPT4gIkludGVsKFIpIHZQcm8oVE0pIEdhdGV3YXkgKE1QUykiCisJICAgPT4gIkluZm9ybWF0aW9uIGZvciBJbnRlbChSKSB2UHJvKFRNKSBHYXRld2F5IERldmVsb3BlcnMiCisJICAgPT4gIkRlc2NyaXB0aW9uIG9mIHRoZSBJbnRlbCBBTVQgUG9ydCBGb3J3YXJkaW5nIChBUEYpIFByb3RvY29sIgogCi0JQW4gb3BlbiBzb3VyY2UgSW50ZWwgQU1UIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSwJaW1wbGVtZW50aW5nIGEgbG9jYWwgYWdlbnQKLQl0aGF0IGFjY2Vzc2VzIHRoZSBJbnRlbCBNRUkgZHJpdmVyLCBjYW4gYmUgZm91bmQgaGVyZToKLQlodHRwOi8vc29mdHdhcmUuaW50ZWwuY29tL2VuLXVzL2FydGljbGVzL2Rvd25sb2FkLXRoZS1sYXRlc3QtaW50ZWwtYW10LW9wZW4tc291cmNlLWRyaXZlcnMvCisJMikgSW50ZWwgQU1UIFJlbW90ZSBjb25maWd1cmF0aW9uIHVzaW5nIGEgTG9jYWwgQWdlbnQKKworCSAgIEEgTG9jYWwgQWdlbnQgZW5hYmxlcyBJVCBwZXJzb25uZWwgdG8gY29uZmlndXJlIEludGVsIEFNVCBvdXQtb2YtdGhlLWJveAorCSAgIHdpdGhvdXQgcmVxdWlyaW5nIGluc3RhbGxpbmcgYWRkaXRpb25hbCBkYXRhIHRvIGVuYWJsZSBzZXR1cC4gVGhlIHJlbW90ZQorCSAgIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyBtYXkgaW52b2x2ZSBhbiBJU1YtZGV2ZWxvcGVkIHJlbW90ZSBjb25maWd1cmF0aW9uCisJICAgYWdlbnQgdGhhdCBydW5zIG9uIHRoZSBob3N0LgorCSAgIEZvciBtb3JlIGluZm9ybWF0aW9uOgorCSAgIGh0dHA6Ly9zb2Z0d2FyZS5pbnRlbC5jb20vc2l0ZXMvbWFuYWdlYWJpbGl0eS9BTVRfSW1wbGVtZW50YXRpb25fYW5kX1JlZmVyZW5jZV9HdWlkZQorCSAgIFVuZGVyICJTZXR1cCBhbmQgQ29uZmlndXJhdGlvbiBvZiBJbnRlbCBBTVQiID0+CisJICAgIlNESyBUb29scyBTdXBwb3J0aW5nIFNldHVwIGFuZCBDb25maWd1cmF0aW9uIiA9PgorCSAgICJVc2luZyB0aGUgTG9jYWwgQWdlbnQgU2FtcGxlIgorCisJICAgQW4gb3BlbiBzb3VyY2UgSW50ZWwgQU1UIGNvbmZpZ3VyYXRpb24gdXRpbGl0eSwJaW1wbGVtZW50aW5nIGEgbG9jYWwgYWdlbnQKKwkgICB0aGF0IGFjY2Vzc2VzIHRoZSBJbnRlbCBNRUkgZHJpdmVyLCBjYW4gYmUgZm91bmQgaGVyZToKKwkgICBodHRwOi8vc29mdHdhcmUuaW50ZWwuY29tL2VuLXVzL2FydGljbGVzL2Rvd25sb2FkLXRoZS1sYXRlc3QtaW50ZWwtYW10LW9wZW4tc291cmNlLWRyaXZlcnMvCiAKIAotSW50ZWwgQU1UIE9TIEhlYWx0aCBXYXRjaGRvZzoKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitJbnRlbCBBTVQgT1MgSGVhbHRoIFdhdGNoZG9nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKIFRoZSBJbnRlbCBBTVQgV2F0Y2hkb2cgaXMgYW4gT1MgSGVhbHRoIChIYW5nL0NyYXNoKSB3YXRjaGRvZy4KIFdoZW5ldmVyIHRoZSBPUyBoYW5ncyBvciBjcmFzaGVzLCBJbnRlbCBBTVQgd2lsbCBzZW5kIGFuIGV2ZW50CiB0byBhbnkgc3Vic2NyaWJlciB0byB0aGlzIGV2ZW50LiBUaGlzIG1lY2hhbmlzbSBtZWFucyB0aGF0CkBAIC0xOTIsOCArMTk4LDEwIEBACiBJZiB0aGUgSW50ZWwgQU1UIFdhdGNoZG9nIGZlYXR1cmUgZG9lcyBub3QgZXhpc3QgKGkuZS4gdGhlIGNvbm5lY3Rpb24gZmFpbGVkKSwKIHRoZSBJbnRlbCBNRUkgZHJpdmVyIHdpbGwgZGlzYWJsZSB0aGUgc2VuZGluZyBvZiBoZWFydGJlYXRzLgogCi1TdXBwb3J0ZWQgQ2hpcHNldHM6CisKK1N1cHBvcnRlZCBDaGlwc2V0cwogPT09PT09PT09PT09PT09PT09CisKIDcgU2VyaWVzIENoaXBzZXQgRmFtaWx5CiA2IFNlcmllcyBDaGlwc2V0IEZhbWlseQogNSBTZXJpZXMgQ2hpcHNldCBGYW1pbHkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWAppbmRleCA1NTdiNmVmLi5kZjI3YTFhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYCkBAIC0xLDcgKzEsNSBAQAogMDAtSU5ERVgKIAktIHRoaXMgZmlsZQotM2M1MDUudHh0Ci0JLSBpbmZvcm1hdGlvbiBvbiB0aGUgM0NvbSBFdGhlckxpbmsgUGx1cyAoM2M1MDUpIGRyaXZlci4KIDNjNTA5LnR4dAogCS0gaW5mb3JtYXRpb24gb24gdGhlIDNDb20gRXRoZXJsaW5rIElJSSBTZXJpZXMgRXRoZXJuZXQgY2FyZHMuCiA2cGFjay50eHQKQEAgLTI0LDYgKzIyLDggQEAKIAktIGluZm8gb24gR2VuZXJhbCBJbnN0cnVtZW50L05leHRMZXZlbCBTVVJGYm9hcmQxMDAwIGNhYmxlIG1vZGVtLgogYWxpYXMudHh0CiAJLSBpbmZvIG9uIHVzaW5nIGFsaWFzIG5ldHdvcmsgZGV2aWNlcy4KK2FsdGVyYV90c2UudHh0CisJLSBBbHRlcmEgVHJpcGxlLVNwZWVkIEV0aGVybmV0IGNvbnRyb2xsZXIuCiBhcmNuZXQtaGFyZHdhcmUudHh0CiAJLSB0b25zIG9mIGluZm8gb24gQVJDbmV0LCBodWJzLCBqdW1wZXIgc2V0dGluZ3MgZm9yIEFSQ25ldCBjYXJkcywgZXRjLgogYXJjbmV0LnR4dApAQCAtNDIsNiArNDIsOCBAQAogCS0gd2hlcmUgdG8gZ2V0IHVzZXIgc3BhY2UgcHJvZ3JhbXMgZm9yIGV0aGVybmV0IGJyaWRnaW5nIHdpdGggTGludXguCiBjYW4udHh0CiAJLSBkb2N1bWVudGF0aW9uIG9uIENBTiBwcm90b2NvbCBmYW1pbHkuCitjZGNfbWJpbS50eHQKKwktIDNHL0xURSBVU0IgbW9kZW0gKE1vYmlsZSBCcm9hZGJhbmQgSW50ZXJmYWNlIE1vZGVsKQogY29wcy50eHQKIAktIGluZm8gb24gdGhlIENPUFMgTG9jYWxUYWxrIExpbnV4IGRyaXZlcgogY3M4OXgwLnR4dApAQCAtNTQsNiArNTYsOCBAQAogCS0gUmVsZWFzZSBOb3RlcyBmb3IgdGhlIENoZWxzaW8gTjIxMCBMaW51eCBkZXZpY2UgZHJpdmVyLgogZGNjcC50eHQKIAktIHRoZSBEYXRhZ3JhbSBDb25nZXN0aW9uIENvbnRyb2wgUHJvdG9jb2wgKERDQ1ApIChSRkMgNDM0MC4uNDIpLgorZGN0Y3AudHh0CisJLSBEYXRhQ2VudGVyIFRDUCBjb25nZXN0aW9uIGNvbnRyb2wKIGRlNHg1LnR4dAogCS0gdGhlIERpZ2l0YWwgRXRoZXJXT1JLUyBERTQ/PyBhbmQgREU1Pz8gUENJIEV0aGVybmV0IGRyaXZlcgogZGVjbmV0LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2Nhbi50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY2FuLnR4dAppbmRleCAyMjM2ZDZkLi4wYTI4NTlhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY2FuLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY2FuLnR4dApAQCAtMjM0LDcgKzIzNCw3IEBACiAgIG1lY2hhbmlzbXMuIEluc2lkZSB0aGlzIGZpbHRlciBkZWZpbml0aW9uIHRoZSAoaW50ZXJlc3RlZCkgdHlwZSBvZgogICBlcnJvcnMgbWF5IGJlIHNlbGVjdGVkLiBUaGUgcmVjZXB0aW9uIG9mIGVycm9yIG1lc3NhZ2VzIGlzIGRpc2FibGVkCiAgIGJ5IGRlZmF1bHQuIFRoZSBmb3JtYXQgb2YgdGhlIENBTiBlcnJvciBtZXNzYWdlIGZyYW1lIGlzIGJyaWVmbHkKLSAgZGVzY3JpYmVkIGluIHRoZSBMaW51eCBoZWFkZXIgZmlsZSAiaW5jbHVkZS9saW51eC9jYW4vZXJyb3IuaCIuCisgIGRlc2NyaWJlZCBpbiB0aGUgTGludXggaGVhZGVyIGZpbGUgImluY2x1ZGUvdWFwaS9saW51eC9jYW4vZXJyb3IuaCIuCiAKIDQuIEhvdyB0byB1c2UgU29ja2V0Q0FOCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2ZpbHRlci50eHQKaW5kZXggNThkMDhmOC4uOTkzMGVjZmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9maWx0ZXIudHh0CkBAIC0yNzksOCArMjc5LDggQEAKICAgaGF0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2ItPmRldi0+dHlwZQogICByeGhhc2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrYi0+aGFzaAogICBjcHUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkKLSAgdmxhbl90Y2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bGFuX3R4X3RhZ19nZXQoc2tiKQotICB2bGFuX3ByICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKQorICB2bGFuX3RjaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrYl92bGFuX3RhZ19nZXQoc2tiKQorICB2bGFuX3ByICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikKICAgcmFuZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmFuZG9tX3UzMigpCiAKIFRoZXNlIGV4dGVuc2lvbnMgY2FuIGFsc28gYmUgcHJlZml4ZWQgd2l0aCAnIycuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IDg1YjAyMjEuLjFiOGM5NjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC0yOTAsNiArMjkwLDI4IEBACiAKIAlCeSBkZWZhdWx0IGl0J3MgZW5hYmxlZCB3aXRoIGEgbm9uLXplcm8gdmFsdWUuIDAgZGlzYWJsZXMgRi1SVE8uCiAKK3RjcF9pbnZhbGlkX3JhdGVsaW1pdCAtIElOVEVHRVIKKwlMaW1pdCB0aGUgbWF4aW1hbCByYXRlIGZvciBzZW5kaW5nIGR1cGxpY2F0ZSBhY2tub3dsZWRnbWVudHMKKwlpbiByZXNwb25zZSB0byBpbmNvbWluZyBUQ1AgcGFja2V0cyB0aGF0IGFyZSBmb3IgYW4gZXhpc3RpbmcKKwljb25uZWN0aW9uIGJ1dCB0aGF0IGFyZSBpbnZhbGlkIGR1ZSB0byBhbnkgb2YgdGhlc2UgcmVhc29uczoKKworCSAgKGEpIG91dC1vZi13aW5kb3cgc2VxdWVuY2UgbnVtYmVyLAorCSAgKGIpIG91dC1vZi13aW5kb3cgYWNrbm93bGVkZ21lbnQgbnVtYmVyLCBvcgorCSAgKGMpIFBBV1MgKFByb3RlY3Rpb24gQWdhaW5zdCBXcmFwcGVkIFNlcXVlbmNlIG51bWJlcnMpIGNoZWNrIGZhaWx1cmUKKworCVRoaXMgY2FuIGhlbHAgbWl0aWdhdGUgc2ltcGxlICJhY2sgbG9vcCIgRG9TIGF0dGFja3MsIHdoZXJlaW4KKwlhIGJ1Z2d5IG9yIG1hbGljaW91cyBtaWRkbGVib3ggb3IgbWFuLWluLXRoZS1taWRkbGUgY2FuCisJcmV3cml0ZSBUQ1AgaGVhZGVyIGZpZWxkcyBpbiBtYW5uZXIgdGhhdCBjYXVzZXMgZWFjaCBlbmRwb2ludAorCXRvIHRoaW5rIHRoYXQgdGhlIG90aGVyIGlzIHNlbmRpbmcgaW52YWxpZCBUQ1Agc2VnbWVudHMsIHRodXMKKwljYXVzaW5nIGVhY2ggc2lkZSB0byBzZW5kIGFuIHVudGVybWluYXRpbmcgc3RyZWFtIG9mIGR1cGxpY2F0ZQorCWFja25vd2xlZGdtZW50cyBmb3IgaW52YWxpZCBzZWdtZW50cy4KKworCVVzaW5nIDAgZGlzYWJsZXMgcmF0ZS1saW1pdGluZyBvZiBkdXBhY2tzIGluIHJlc3BvbnNlIHRvCisJaW52YWxpZCBzZWdtZW50czsgb3RoZXJ3aXNlIHRoaXMgdmFsdWUgc3BlY2lmaWVzIHRoZSBtaW5pbWFsCisJc3BhY2UgYmV0d2VlbiBzZW5kaW5nIHN1Y2ggZHVwYWNrcywgaW4gbWlsbGlzZWNvbmRzLgorCisJRGVmYXVsdDogNTAwIChtaWxsaXNlY29uZHMpLgorCiB0Y3Bfa2VlcGFsaXZlX3RpbWUgLSBJTlRFR0VSCiAJSG93IG9mdGVuIFRDUCBzZW5kcyBvdXQga2VlcGFsaXZlIG1lc3NhZ2VzIHdoZW4ga2VlcGFsaXZlIGlzIGVuYWJsZWQuCiAJRGVmYXVsdDogMmhvdXJzLgpAQCAtMTI4Nyw2ICsxMzA5LDEzIEBACiAJRnVuY3Rpb25hbCBkZWZhdWx0OiBlbmFibGVkIGlmIGFjY2VwdF9yYSBpcyBlbmFibGVkLgogCQkJICAgIGRpc2FibGVkIGlmIGFjY2VwdF9yYSBpcyBkaXNhYmxlZC4KIAorYWNjZXB0X3JhX210dSAtIEJPT0xFQU4KKwlBcHBseSB0aGUgTVRVIHZhbHVlIHNwZWNpZmllZCBpbiBSQSBvcHRpb24gNSAoUkZDNDg2MSkuIElmCisJZGlzYWJsZWQsIHRoZSBNVFUgc3BlY2lmaWVkIGluIHRoZSBSQSB3aWxsIGJlIGlnbm9yZWQuCisKKwlGdW5jdGlvbmFsIGRlZmF1bHQ6IGVuYWJsZWQgaWYgYWNjZXB0X3JhIGlzIGVuYWJsZWQuCisJCQkgICAgZGlzYWJsZWQgaWYgYWNjZXB0X3JhIGlzIGRpc2FibGVkLgorCiBhY2NlcHRfcmVkaXJlY3RzIC0gQk9PTEVBTgogCUFjY2VwdCBSZWRpcmVjdHMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXRsaW5rX21tYXAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGxpbmtfbW1hcC50eHQKaW5kZXggYzZhZjRiYS4uNTRmMTA0NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGxpbmtfbW1hcC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25ldGxpbmtfbW1hcC50eHQKQEAgLTE5OSwxNiArMTk5LDkgQEAKIFRYIGxpbWl0YXRpb25zCiAtLS0tLS0tLS0tLS0tLQogCi1LZXJuZWwgcHJvY2Vzc2luZyB1c3VhbGx5IGludm9sdmVzIHZhbGlkYXRpb24gb2YgdGhlIG1lc3NhZ2UgcmVjZWl2ZWQgYnkKLXVzZXItc3BhY2UsIHRoZW4gcHJvY2Vzc2luZyBpdHMgY29udGVudHMuIFRoZSBrZXJuZWwgbXVzdCBhc3N1cmUgdGhhdAotdXNlcnNwYWNlIGlzIG5vdCBhYmxlIHRvIG1vZGlmeSB0aGUgbWVzc2FnZSBjb250ZW50cyBhZnRlciB0aGV5IGhhdmUgYmVlbgotdmFsaWRhdGVkLiBJbiBvcmRlciB0byBkbyBzbywgdGhlIG1lc3NhZ2UgaXMgY29waWVkIGZyb20gdGhlIHJpbmcgZnJhbWUKLXRvIGFuIGFsbG9jYXRlZCBidWZmZXIgaWYgZWl0aGVyIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgZmFsc2U6Ci0KLS0gb25seSBhIHNpbmdsZSBtYXBwaW5nIG9mIHRoZSByaW5nIGV4aXN0cwotLSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdCBzaGFyZWQgYmV0d2VlbiBwcm9jZXNzZXMKLQotVGhpcyBtZWFucyB0aGF0IGZvciB0aHJlYWRlZCBwcm9ncmFtcywgdGhlIGtlcm5lbCB3aWxsIGZhbGwgYmFjayB0byBjb3B5aW5nLgorQXMgb2YgSmFuIDIwMTUgdGhlIG1lc3NhZ2UgaXMgYWx3YXlzIGNvcGllZCBmcm9tIHRoZSByaW5nIGZyYW1lIHRvIGFuCithbGxvY2F0ZWQgYnVmZmVyIGR1ZSB0byB1bnJlc29sdmVkIHNlY3VyaXR5IGNvbmNlcm5zLgorU2VlIGNvbW1pdCA0NjgyYTAzNTg2MzliMjljZiAoIm5ldGxpbms6IEFsd2F5cyBjb3B5IG9uIG1tYXAgVFguIikuCiAKIEV4YW1wbGUKIC0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9jb25udHJhY2stc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZl9jb25udHJhY2stc3lzY3RsLnR4dAppbmRleCA3MGRhNTA4Li5mNTU1OTljIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmZfY29ubnRyYWNrLXN5c2N0bC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL25mX2Nvbm50cmFjay1zeXNjdGwudHh0CkBAIC0xMSw3ICsxMSw4IEBACiAJU2l6ZSBvZiBoYXNoIHRhYmxlLiBJZiBub3Qgc3BlY2lmaWVkIGFzIHBhcmFtZXRlciBkdXJpbmcgbW9kdWxlCiAJbG9hZGluZywgdGhlIGRlZmF1bHQgc2l6ZSBpcyBjYWxjdWxhdGVkIGJ5IGRpdmlkaW5nIHRvdGFsIG1lbW9yeQogCWJ5IDE2Mzg0IHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgYnV0IHRoZSBoYXNoIHRhYmxlIHdpbGwKLQluZXZlciBoYXZlIGZld2VyIHRoYW4gMzIgb3IgbW9yZSB0aGFuIDE2Mzg0IGJ1Y2tldHMuCisJbmV2ZXIgaGF2ZSBmZXdlciB0aGFuIDMyIGFuZCBsaW1pdGVkIHRvIDE2Mzg0IGJ1Y2tldHMuIEZvciBzeXN0ZW1zCisJd2l0aCBtb3JlIHRoYW4gNEdCIG9mIG1lbW9yeSBpdCB3aWxsIGJlIDY1NTM2IGJ1Y2tldHMuCiAKIG5mX2Nvbm50cmFja19jaGVja3N1bSAtIEJPT0xFQU4KIAkwIC0gZGlzYWJsZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vcGVudnN3aXRjaC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb3BlbnZzd2l0Y2gudHh0CmluZGV4IDM3YzIwZWUuLmIzYjlhYzYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vcGVudnN3aXRjaC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29wZW52c3dpdGNoLnR4dApAQCAtMTMxLDYgKzEzMSwxOSBAQAogc29tZSBidXQgbm90IGFsbCBvZiB0aGVtLiBIb3dldmVyLCB0aGlzIGJlaGF2aW9yIG1heSBjaGFuZ2UgaW4gZnV0dXJlIHZlcnNpb25zLgogCiAKK1VuaXF1ZSBmbG93IGlkZW50aWZpZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBhbHRlcm5hdGl2ZSB0byB1c2luZyB0aGUgb3JpZ2luYWwgbWF0Y2ggcG9ydGlvbiBvZiBhIGtleSBhcyB0aGUgaGFuZGxlIGZvcgorZmxvdyBpZGVudGlmaWNhdGlvbiBpcyBhIHVuaXF1ZSBmbG93IGlkZW50aWZpZXIsIG9yICJVRklEIi4gVUZJRHMgYXJlIG9wdGlvbmFsCitmb3IgYm90aCB0aGUga2VybmVsIGFuZCB1c2VyIHNwYWNlIHByb2dyYW0uCisKK1VzZXIgc3BhY2UgcHJvZ3JhbXMgdGhhdCBzdXBwb3J0IFVGSUQgYXJlIGV4cGVjdGVkIHRvIHByb3ZpZGUgaXQgZHVyaW5nIGZsb3cKK3NldHVwIGluIGFkZGl0aW9uIHRvIHRoZSBmbG93LCB0aGVuIHJlZmVyIHRvIHRoZSBmbG93IHVzaW5nIHRoZSBVRklEIGZvciBhbGwKK2Z1dHVyZSBvcGVyYXRpb25zLiBUaGUga2VybmVsIGlzIG5vdCByZXF1aXJlZCB0byBpbmRleCBmbG93cyBieSB0aGUgb3JpZ2luYWwKK2Zsb3cga2V5IGlmIGEgVUZJRCBpcyBzcGVjaWZpZWQuCisKKwogQmFzaWMgcnVsZSBmb3IgZXZvbHZpbmcgZmxvdyBrZXlzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnR4dAppbmRleCBhNWM3ODRjLi41ZjA5MjI2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nLnR4dApAQCAtMTYyLDYgKzE2MiwyNyBAQAogICBvcHRpb24gSVBfUEtUSU5GTyBzaW11bHRhbmVvdXNseS4KIAogCitTT0ZfVElNRVNUQU1QSU5HX09QVF9UU09OTFk6CisKKyAgQXBwbGllcyB0byB0cmFuc21pdCB0aW1lc3RhbXBzIG9ubHkuIE1ha2VzIHRoZSBrZXJuZWwgcmV0dXJuIHRoZQorICB0aW1lc3RhbXAgYXMgYSBjbXNnIGFsb25nc2lkZSBhbiBlbXB0eSBwYWNrZXQsIGFzIG9wcG9zZWQgdG8KKyAgYWxvbmdzaWRlIHRoZSBvcmlnaW5hbCBwYWNrZXQuIFRoaXMgcmVkdWNlcyB0aGUgYW1vdW50IG9mIG1lbW9yeQorICBjaGFyZ2VkIHRvIHRoZSBzb2NrZXQncyByZWNlaXZlIGJ1ZGdldCAoU09fUkNWQlVGKSBhbmQgZGVsaXZlcnMKKyAgdGhlIHRpbWVzdGFtcCBldmVuIGlmIHN5c2N0bCBuZXQuY29yZS50c3RhbXBfYWxsb3dfZGF0YSBpcyAwLgorICBUaGlzIG9wdGlvbiBkaXNhYmxlcyBTT0ZfVElNRVNUQU1QSU5HX09QVF9DTVNHLgorCisKK05ldyBhcHBsaWNhdGlvbnMgYXJlIGVuY291cmFnZWQgdG8gcGFzcyBTT0ZfVElNRVNUQU1QSU5HX09QVF9JRCB0bworZGlzYW1iaWd1YXRlIHRpbWVzdGFtcHMgYW5kIFNPRl9USU1FU1RBTVBJTkdfT1BUX1RTT05MWSB0byBvcGVyYXRlCityZWdhcmRsZXNzIG9mIHRoZSBzZXR0aW5nIG9mIHN5c2N0bCBuZXQuY29yZS50c3RhbXBfYWxsb3dfZGF0YS4KKworQW4gZXhjZXB0aW9uIGlzIHdoZW4gYSBwcm9jZXNzIG5lZWRzIGFkZGl0aW9uYWwgY21zZyBkYXRhLCBmb3IKK2luc3RhbmNlIFNPTF9JUC9JUF9QS1RJTkZPIHRvIGRldGVjdCB0aGUgZWdyZXNzIG5ldHdvcmsgaW50ZXJmYWNlLgorVGhlbiBwYXNzIG9wdGlvbiBTT0ZfVElNRVNUQU1QSU5HX09QVF9DTVNHLiBUaGlzIG9wdGlvbiBkZXBlbmRzIG9uCitoYXZpbmcgYWNjZXNzIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgcGFja2V0LCBzbyBjYW5ub3QgYmUKK2NvbWJpbmVkIHdpdGggU09GX1RJTUVTVEFNUElOR19PUFRfVFNPTkxZLgorCisKIDEuNCBCeXRlc3RyZWFtIFRpbWVzdGFtcHMKIAogVGhlIFNPX1RJTUVTVEFNUElORyBpbnRlcmZhY2Ugc3VwcG9ydHMgdGltZXN0YW1waW5nIG9mIGJ5dGVzIGluIGEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvdHh0aW1lc3RhbXAuYyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvdHh0aW1lc3RhbXAuYwppbmRleCA4NzZmNzFjLi44MjE3NTEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nL3R4dGltZXN0YW1wLmMKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy90eHRpbWVzdGFtcC5jCkBAIC0zMCw2ICszMCw4IEBACiAgKiA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogICovCiAKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKwogI2luY2x1ZGUgPGFycGEvaW5ldC5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGVycm9yLmg+CkBAIC01OSwxNCArNjEsNiBAQAogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAotLyogdWdseSBoYWNrIHRvIHdvcmsgYXJvdW5kIG5ldGluZXQvaW4uaCBhbmQgbGludXgvaXB2Ni5oIGNvbmZsaWN0cyAqLwotI2lmbmRlZiBpbjZfcGt0aW5mbwotc3RydWN0IGluNl9wa3RpbmZvIHsKLQlzdHJ1Y3QgaW42X2FkZHIJaXBpNl9hZGRyOwotCWludAkJaXBpNl9pZmluZGV4OwotfTsKLSNlbmRpZgotCiAvKiBjb21tYW5kIGxpbmUgcGFyYW1ldGVycyAqLwogc3RhdGljIGludCBjZmdfcHJvdG8gPSBTT0NLX1NUUkVBTTsKIHN0YXRpYyBpbnQgY2ZnX2lwcHJvdG8gPSBJUFBST1RPX1RDUDsKQEAgLTc2LDYgKzcwLDcgQEAKIHN0YXRpYyBpbnQgY2ZnX3BheWxvYWRfbGVuID0gMTA7CiBzdGF0aWMgYm9vbCBjZmdfc2hvd19wYXlsb2FkOwogc3RhdGljIGJvb2wgY2ZnX2RvX3BrdGluZm87CitzdGF0aWMgYm9vbCBjZmdfbG9vcF9ub2RhdGE7CiBzdGF0aWMgdWludDE2X3QgZGVzdF9wb3J0ID0gOTAwMDsKIAogc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiBkYWRkcjsKQEAgLTE0Nyw2ICsxNDIsOSBAQAogewogCWludCBpOwogCisJaWYgKCFsZW4pCisJCXJldHVybjsKKwogCWlmIChsZW4gPiA3MCkKIAkJbGVuID0gNzA7CiAKQEAgLTE4Myw2ICsxODEsNyBAQAogCXN0cnVjdCBzb2NrX2V4dGVuZGVkX2VyciAqc2VyciA9IE5VTEw7CiAJc3RydWN0IHNjbV90aW1lc3RhbXBpbmcgKnRzcyA9IE5VTEw7CiAJc3RydWN0IGNtc2doZHIgKmNtOworCWludCBiYXRjaCA9IDA7CiAKIAlmb3IgKGNtID0gQ01TR19GSVJTVEhEUihtc2cpOwogCSAgICAgY20gJiYgY20tPmNtc2dfbGVuOwpAQCAtMjE1LDEwICsyMTQsMTggQEAKIAkJfSBlbHNlCiAJCQlmcHJpbnRmKHN0ZGVyciwgInVua25vd24gY21zZyAlZCwlZFxuIiwKIAkJCQkJY20tPmNtc2dfbGV2ZWwsIGNtLT5jbXNnX3R5cGUpOworCisJCWlmIChzZXJyICYmIHRzcykgeworCQkJcHJpbnRfdGltZXN0YW1wKHRzcywgc2Vyci0+ZWVfaW5mbywgc2Vyci0+ZWVfZGF0YSwKKwkJCQkJcGF5bG9hZF9sZW4pOworCQkJc2VyciA9IE5VTEw7CisJCQl0c3MgPSBOVUxMOworCQkJYmF0Y2grKzsKKwkJfQogCX0KIAotCWlmIChzZXJyICYmIHRzcykKLQkJcHJpbnRfdGltZXN0YW1wKHRzcywgc2Vyci0+ZWVfaW5mbywgc2Vyci0+ZWVfZGF0YSwgcGF5bG9hZF9sZW4pOworCWlmIChiYXRjaCA+IDEpCisJCWZwcmludGYoc3RkZXJyLCAiYmF0Y2hlZCAlZCB0aW1lc3RhbXBzXG4iLCBiYXRjaCk7CiB9CiAKIHN0YXRpYyBpbnQgcmVjdl9lcnJtc2coaW50IGZkKQpAQCAtMjUwLDcgKzI1Nyw3IEBACiAJaWYgKHJldCA9PSAtMSAmJiBlcnJubyAhPSBFQUdBSU4pCiAJCWVycm9yKDEsIGVycm5vLCAicmVjdm1zZyIpOwogCi0JaWYgKHJldCA+IDApIHsKKwlpZiAocmV0ID49IDApIHsKIAkJX19yZWN2X2Vycm1zZ19jbXNnKCZtc2csIHJldCk7CiAJCWlmIChjZmdfc2hvd19wYXlsb2FkKQogCQkJcHJpbnRfcGF5bG9hZChkYXRhLCBjZmdfcGF5bG9hZF9sZW4pOwpAQCAtMzE1LDYgKzMyMiw5IEBACiAJb3B0IHw9IFNPRl9USU1FU1RBTVBJTkdfU09GVFdBUkUgfAogCSAgICAgICBTT0ZfVElNRVNUQU1QSU5HX09QVF9DTVNHIHwKIAkgICAgICAgU09GX1RJTUVTVEFNUElOR19PUFRfSUQ7CisJaWYgKGNmZ19sb29wX25vZGF0YSkKKwkJb3B0IHw9IFNPRl9USU1FU1RBTVBJTkdfT1BUX1RTT05MWTsKKwogCWlmIChzZXRzb2Nrb3B0KGZkLCBTT0xfU09DS0VULCBTT19USU1FU1RBTVBJTkcsCiAJCSAgICAgICAoY2hhciAqKSAmb3B0LCBzaXplb2Yob3B0KSkpCiAJCWVycm9yKDEsIDAsICJzZXRzb2Nrb3B0IHRpbWVzdGFtcGluZyIpOwpAQCAtMzg0LDYgKzM5NCw3IEBACiAJCQkiICAtaDogICBzaG93IHRoaXMgbWVzc2FnZVxuIgogCQkJIiAgLUk6ICAgcmVxdWVzdCBQS1RJTkZPXG4iCiAJCQkiICAtbCBOOiBzZW5kIE4gYnl0ZXMgYXQgYSB0aW1lXG4iCisJCQkiICAtbjogICBzZXQgbm8tcGF5bG9hZCBvcHRpb25cbiIKIAkJCSIgIC1yOiAgIHVzZSByYXdcbiIKIAkJCSIgIC1SOiAgIHVzZSByYXcgKElQX0hEUklOQ0wpXG4iCiAJCQkiICAtcCBOOiBjb25uZWN0IHRvIHBvcnQgTlxuIgpAQCAtMzk4LDcgKzQwOSw3IEBACiAJaW50IHByb3RvX2NvdW50ID0gMDsKIAljaGFyIGM7CiAKLQl3aGlsZSAoKGMgPSBnZXRvcHQoYXJnYywgYXJndiwgIjQ2aElsOnA6clJ1eCIpKSAhPSAtMSkgeworCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiNDZoSWw6bnA6clJ1eCIpKSAhPSAtMSkgewogCQlzd2l0Y2ggKGMpIHsKIAkJY2FzZSAnNCc6CiAJCQlkb19pcHY2ID0gMDsKQEAgLTQwOSw2ICs0MjAsOSBAQAogCQljYXNlICdJJzoKIAkJCWNmZ19kb19wa3RpbmZvID0gdHJ1ZTsKIAkJCWJyZWFrOworCQljYXNlICduJzoKKwkJCWNmZ19sb29wX25vZGF0YSA9IHRydWU7CisJCQlicmVhazsKIAkJY2FzZSAncic6CiAJCQlwcm90b19jb3VudCsrOwogCQkJY2ZnX3Byb3RvID0gU09DS19SQVc7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL29vcHMtdHJhY2luZy50eHQgYi9Eb2N1bWVudGF0aW9uL29vcHMtdHJhY2luZy50eHQKaW5kZXggYmVlZmI5Zi4uZjNhYzA1YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9vb3BzLXRyYWNpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vb29wcy10cmFjaW5nLnR4dApAQCAtMjcwLDYgKzI3MCw4IEBACiAKICAxNTogJ0wnIGlmIGEgc29mdCBsb2NrdXAgaGFzIHByZXZpb3VzbHkgb2NjdXJyZWQgb24gdGhlIHN5c3RlbS4KIAorIDE2OiAnSycgaWYgdGhlIGtlcm5lbCBoYXMgYmVlbiBsaXZlIHBhdGNoZWQuCisKIFRoZSBwcmltYXJ5IHJlYXNvbiBmb3IgdGhlICdUYWludGVkOiAnIHN0cmluZyBpcyB0byB0ZWxsIGtlcm5lbAogZGVidWdnZXJzIGlmIHRoaXMgaXMgYSBjbGVhbiBrZXJuZWwgb3IgaWYgYW55dGhpbmcgdW51c3VhbCBoYXMKIG9jY3VycmVkLiAgVGFpbnRpbmcgaXMgcGVybWFuZW50OiBldmVuIGlmIGFuIG9mZmVuZGluZyBtb2R1bGUgaXMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvczJyYW0udHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zMnJhbS50eHQKaW5kZXggMWJkZmEwNC4uNDY4NWFlZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zMnJhbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9zMnJhbS50eHQKQEAgLTY5LDYgKzY5LDEwIEBACiBoYXJkd2FyZSBkdXJpbmcgcmVzdW1lIG9wZXJhdGlvbnMgd2hlcmUgYSB2YWx1ZSBjYW4gYmUgc2V0IHRoYXQgd2lsbAogc3Vydml2ZSBhIHJlYm9vdC4KIAorcG1fdHJhY2UgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBhc3luY2hyb25vdXMgc3VzcGVuZCwgc28gaXQgdHVybnMKK2FzeW5jaHJvbm91cyBzdXNwZW5kIG9mZiAod2hpY2ggbWF5IHdvcmsgYXJvdW5kIHRpbWluZyBvcgorb3JkZXJpbmctc2Vuc2l0aXZlIGJ1Z3MpLgorCiBDb25zZXF1ZW5jZSBpcyB0aGF0IGFmdGVyIGEgcmVzdW1lIChldmVuIGlmIGl0IGlzIHN1Y2Nlc3NmdWwpIHlvdXIgc3lzdGVtCiBjbG9jayB3aWxsIGhhdmUgYSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWdpYyBudW1iZXIgaW5zdGVhZCBvZiB0aGUKIGNvcnJlY3QgZGF0ZS90aW1lISBJdCBpcyB0aGVyZWZvcmUgYWR2aXNhYmxlIHRvIHVzZSBhIHByb2dyYW0gbGlrZSBudHAtZGF0ZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9yZmtpbGwudHh0IGIvRG9jdW1lbnRhdGlvbi9yZmtpbGwudHh0CmluZGV4IDQyN2U4OTcuLjJlZTZlZjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcmZraWxsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Jma2lsbC50eHQKQEAgLTI1LDYgKzI1LDkgQEAKICAtIHNvZnQgYmxvY2s6IHdyaXRhYmxlIHJhZGlvIGJsb2NrIChuZWVkIG5vdCBiZSByZWFkYWJsZSkgdGhhdCBpcyBzZXQgYnkKICAgICAgICAgICAgICAgIHRoZSBzeXN0ZW0gc29mdHdhcmUuCiAKK1RoZSByZmtpbGwgc3Vic3lzdGVtIGhhcyB0d28gcGFyYW1ldGVycywgcmZraWxsLmRlZmF1bHRfc3RhdGUgYW5kCityZmtpbGwubWFzdGVyX3N3aXRjaF9tb2RlLCB3aGljaCBhcmUgZG9jdW1lbnRlZCBpbiBrZXJuZWwtcGFyYW1ldGVycy50eHQuCisKIAogMi4gSW1wbGVtZW50YXRpb24gZGV0YWlscwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvRGVidWdnaW5nMzkwLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0CmluZGV4IDA4OTExYjUuLjNkZjhiYWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0CkBAIC0xLDE0ICsxLDE0IEBACi0gICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICBEZWJ1Z2dpbmcgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKLQkJCSAgICAgICAgICAgICAgIGJ5Ci0JCURlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSkKLQkJQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmVzdCB2aWV3ZWQgd2l0aCBmaXhlZCB3aWR0aCBmb250cyAKKworCQkgIERlYnVnZ2luZyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQorCQkJCSAgICAgICBieQorCSAgRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKQorICAgIENvcHlyaWdodCAoQykgMjAwMC0yMDAxIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKwkJCUJlc3Qgdmlld2VkIHdpdGggZml4ZWQgd2lkdGggZm9udHMKIAogT3ZlcnZpZXcgb2YgRG9jdW1lbnQ6CiA9PT09PT09PT09PT09PT09PT09PT0KLVRoaXMgZG9jdW1lbnQgaXMgaW50ZW5kZWQgdG8gZ2l2ZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgaG93IHRvIGRlYnVnCi1MaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZS4gSXQgaXNuJ3QgaW50ZW5kZWQgYXMgYSBjb21wbGV0ZSByZWZlcmVuY2UgJiBub3QgYQorVGhpcyBkb2N1bWVudCBpcyBpbnRlbmRlZCB0byBnaXZlIGEgZ29vZCBvdmVydmlldyBvZiBob3cgdG8gZGVidWcgTGludXggZm9yCitzLzM5MCBhbmQgei9BcmNoaXRlY3R1cmUuIEl0IGlzIG5vdCBpbnRlbmRlZCBhcyBhIGNvbXBsZXRlIHJlZmVyZW5jZSBhbmQgbm90IGEKIHR1dG9yaWFsIG9uIHRoZSBmdW5kYW1lbnRhbHMgb2YgQyAmIGFzc2VtYmx5LiBJdCBkb2Vzbid0IGdvIGludG8KIDM5MCBJTyBpbiBhbnkgZGV0YWlsLiBJdCBpcyBpbnRlbmRlZCB0byBjb21wbGVtZW50IHRoZSBkb2N1bWVudHMgaW4gdGhlCiByZWZlcmVuY2Ugc2VjdGlvbiBiZWxvdyAmIGFueSBvdGhlciB3b3J0aHdoaWxlIHJlZmVyZW5jZXMgeW91IGdldC4KQEAgLTM1LDcgKzM1LDYgQEAKIGxkZAogRGVidWdnaW5nIG1vZHVsZXMKIFRoZSBwcm9jIGZpbGUgc3lzdGVtCi1TdGFydGluZyBwb2ludHMgZm9yIGRlYnVnZ2luZyBzY3JpcHRpbmcgbGFuZ3VhZ2VzIGV0Yy4KIFN5c1JxCiBSZWZlcmVuY2VzCiBTcGVjaWFsIFRoYW5rcwpAQCAtNDQsMTggKzQzLDIwIEBACiA9PT09PT09PT09PT0KIFRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZXMgaGF2ZSB0aGUgZm9sbG93aW5nIHJlZ2lzdGVycy4KICAKLTE2ICBHZW5lcmFsIHByb3Bvc2UgcmVnaXN0ZXJzLCAzMiBiaXQgb24gcy8zOTAgNjQgYml0IG9uIHovQXJjaGl0ZWN0dXJlLCByMC1yMTUgb3IgZ3ByMC1ncHIxNSB1c2VkIGZvciBhcml0aG1ldGljICYgYWRkcmVzc2luZy4gCisxNiBHZW5lcmFsIHByb3Bvc2UgcmVnaXN0ZXJzLCAzMiBiaXQgb24gcy8zOTAgYW5kIDY0IGJpdCBvbiB6L0FyY2hpdGVjdHVyZSwKK3IwLXIxNSAob3IgZ3ByMC1ncHIxNSksIHVzZWQgZm9yIGFyaXRobWV0aWMgYW5kIGFkZHJlc3NpbmcuCiAKLTE2IENvbnRyb2wgcmVnaXN0ZXJzLCAzMiBiaXQgb24gcy8zOTAgNjQgYml0IG9uIHovQXJjaGl0ZWN0dXJlLCAoIGNyMC1jcjE1IGtlcm5lbCB1c2FnZSBvbmx5ICkgdXNlZCBmb3IgbWVtb3J5IG1hbmFnZW1lbnQsCi1pbnRlcnJ1cHQgY29udHJvbCxkZWJ1Z2dpbmcgY29udHJvbCBldGMuCisxNiBDb250cm9sIHJlZ2lzdGVycywgMzIgYml0IG9uIHMvMzkwIGFuZCA2NCBiaXQgb24gei9BcmNoaXRlY3R1cmUsIGNyMC1jcjE1LAora2VybmVsIHVzYWdlIG9ubHksIHVzZWQgZm9yIG1lbW9yeSBtYW5hZ2VtZW50LCBpbnRlcnJ1cHQgY29udHJvbCwgZGVidWdnaW5nCitjb250cm9sIGV0Yy4KIAotMTYgQWNjZXNzIHJlZ2lzdGVycyAoIGFyMC1hcjE1ICkgMzIgYml0IG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKLW5vdCB1c2VkIGJ5IG5vcm1hbCBwcm9ncmFtcyBidXQgcG90ZW50aWFsbHkgY291bGQgCi1iZSB1c2VkIGFzIHRlbXBvcmFyeSBzdG9yYWdlLiBUaGVpciBtYWluIHB1cnBvc2UgaXMgdGhlaXIgMSB0byAxCi1hc3NvY2lhdGlvbiB3aXRoIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgYW5kIGFyZSB1c2VkIGluCi10aGUga2VybmVsIGZvciBjb3B5aW5nIGRhdGEgYmV0d2VlbiBrZXJuZWwgJiB1c2VyIGFkZHJlc3Mgc3BhY2VzLgotQWNjZXNzIHJlZ2lzdGVyIDAgKCAmIGFjY2VzcyByZWdpc3RlciAxIG9uIHovQXJjaGl0ZWN0dXJlICggbmVlZHMgNjQgYml0IAotcG9pbnRlciApICkgaXMgY3VycmVudGx5IHVzZWQgYnkgdGhlIHB0aHJlYWQgbGlicmFyeSBhcyBhIHBvaW50ZXIgdG8KKzE2IEFjY2VzcyByZWdpc3RlcnMgKGFyMC1hcjE1KSwgMzIgYml0IG9uIGJvdGggcy8zOTAgYW5kIHovQXJjaGl0ZWN0dXJlLAorbm9ybWFsbHkgbm90IHVzZWQgYnkgbm9ybWFsIHByb2dyYW1zIGJ1dCBwb3RlbnRpYWxseSBjb3VsZCBiZSB1c2VkIGFzCit0ZW1wb3Jhcnkgc3RvcmFnZS4gVGhlc2UgcmVnaXN0ZXJzIGhhdmUgYSAxOjEgYXNzb2NpYXRpb24gd2l0aCBnZW5lcmFsCitwdXJwb3NlIHJlZ2lzdGVycyBhbmQgYXJlIGRlc2lnbmVkIHRvIGJlIHVzZWQgaW4gdGhlIHNvLWNhbGxlZCBhY2Nlc3MKK3JlZ2lzdGVyIG1vZGUgdG8gc2VsZWN0IGRpZmZlcmVudCBhZGRyZXNzIHNwYWNlcy4KK0FjY2VzcyByZWdpc3RlciAwIChhbmQgYWNjZXNzIHJlZ2lzdGVyIDEgb24gei9BcmNoaXRlY3R1cmUsIHdoaWNoIG5lZWRzIGEKKzY0IGJpdCBwb2ludGVyKSBpcyBjdXJyZW50bHkgdXNlZCBieSB0aGUgcHRocmVhZCBsaWJyYXJ5IGFzIGEgcG9pbnRlciB0bwogdGhlIGN1cnJlbnQgcnVubmluZyB0aHJlYWRzIHByaXZhdGUgYXJlYS4KIAogMTYgNjQgYml0IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAoZnAwLWZwMTUgKSBJRUVFICYgSEZQIGZsb2F0aW5nIApAQCAtOTAsMTggKzkxLDE5IEBACiAKIDYgICAgICAgNiAgICAgSW5wdXQvT3V0cHV0IGludGVycnVwdCBNYXNrCiAKLTcgICAgICAgNyAgICAgRXh0ZXJuYWwgaW50ZXJydXB0IE1hc2sgdXNlZCBwcmltYXJpbHkgZm9yIGludGVycHJvY2Vzc29yIHNpZ25hbGxpbmcgJiAKLQkgICAgICBjbG9jayBpbnRlcnJ1cHRzLgorNwk3ICAgICBFeHRlcm5hbCBpbnRlcnJ1cHQgTWFzayB1c2VkIHByaW1hcmlseSBmb3IgaW50ZXJwcm9jZXNzb3IKKwkgICAgICBzaWduYWxsaW5nIGFuZCBjbG9jayBpbnRlcnJ1cHRzLgogCi04LTExICA4LTExICAgIFBTVyBLZXkgdXNlZCBmb3IgY29tcGxleCBtZW1vcnkgcHJvdGVjdGlvbiBtZWNoYW5pc20gbm90IHVzZWQgdW5kZXIgbGludXgKKzgtMTEgIDgtMTEgICAgUFNXIEtleSB1c2VkIGZvciBjb21wbGV4IG1lbW9yeSBwcm90ZWN0aW9uIG1lY2hhbmlzbQorCSAgICAgIChub3QgdXNlZCB1bmRlciBsaW51eCkKIAogMTIgICAgICAxMiAgICAxIG9uIHMvMzkwIDAgb24gei9BcmNoaXRlY3R1cmUKIAogMTMgICAgICAxMyAgICBNYWNoaW5lIENoZWNrIE1hc2sgMT1lbmFibGUgbWFjaGluZSBjaGVjayBpbnRlcnJ1cHRzCiAKLTE0ICAgICAgMTQgICAgV2FpdCBTdGF0ZSBzZXQgdGhpcyB0byAxIHRvIHN0b3AgdGhlIHByb2Nlc3NvciBleGNlcHQgZm9yIGludGVycnVwdHMgJiBnaXZlIAotCSAgICAgIHRpbWUgdG8gb3RoZXIgTFBBUlMgdXNlZCBpbiBDUFUgaWRsZSBpbiB0aGUga2VybmVsIHRvIGluY3JlYXNlIG92ZXJhbGwgCi0JICAgICAgdXNhZ2Ugb2YgcHJvY2Vzc29yIHJlc291cmNlcy4KKzE0CTE0ICAgIFdhaXQgU3RhdGUuIFNldCB0aGlzIHRvIDEgdG8gc3RvcCB0aGUgcHJvY2Vzc29yIGV4Y2VwdCBmb3IKKwkgICAgICBpbnRlcnJ1cHRzIGFuZCBnaXZlICB0aW1lIHRvIG90aGVyIExQQVJTLiBVc2VkIGluIENQVSBpZGxlIGluCisJICAgICAgdGhlIGtlcm5lbCB0byBpbmNyZWFzZSBvdmVyYWxsIHVzYWdlIG9mIHByb2Nlc3NvciByZXNvdXJjZXMuCiAKIDE1ICAgICAgMTUgICAgUHJvYmxlbSBzdGF0ZSAoIGlmIHNldCB0byAxIGNlcnRhaW4gaW5zdHJ1Y3Rpb25zIGFyZSBkaXNhYmxlZCApCiAJICAgICAgYWxsIGxpbnV4IHVzZXIgcHJvZ3JhbXMgcnVuIHdpdGggdGhpcyBiaXQgMSAKQEAgLTE2NSwyMSArMTY3LDIzIEBACiAJICAgICAgIHdoZW4gbG9hZGluZyB0aGUgYWRkcmVzcyB3aXRoIExQU1dFIG90aGVyd2lzZSBhIAogICAgICAgICAgICAgICAgc3BlY2lmaWNhdGlvbiBleGNlcHRpb24gb2NjdXJzLCBMUFNXIGlzIGZ1bGx5IGJhY2t3YXJkCiAgICAgICAgICAgICAgICBjb21wYXRpYmxlLgotIAkgIAotCSAgCisKKwogUHJlZml4IFBhZ2UocykKLS0tLS0tLS0tLS0tLS0tCSAgCistLS0tLS0tLS0tLS0tLQogVGhpcyBwZXIgY3B1IG1lbW9yeSBhcmVhIGlzIHRvbyBpbnRpbWF0ZWx5IHRpZWQgdG8gdGhlIHByb2Nlc3NvciBub3QgdG8gbWVudGlvbi4KLUl0IGV4aXN0cyBiZXR3ZWVuIHRoZSByZWFsIGFkZHJlc3NlcyAwLTQwOTYgb24gcy8zOTAgJiAwLTgxOTIgei9BcmNoaXRlY3R1cmUgJiBpcyBleGNoYW5nZWQgCi13aXRoIGEgMSBwYWdlIG9uIHMvMzkwIG9yIDIgcGFnZXMgb24gei9BcmNoaXRlY3R1cmUgaW4gYWJzb2x1dGUgc3RvcmFnZSBieSB0aGUgc2V0IAotcHJlZml4IGluc3RydWN0aW9uIGluIGxpbnV4J2VzIHN0YXJ0dXAuIAotVGhpcyBwYWdlIGlzIG1hcHBlZCB0byBhIGRpZmZlcmVudCBwcmVmaXggZm9yIGVhY2ggcHJvY2Vzc29yIGluIGFuIFNNUCBjb25maWd1cmF0aW9uCi0oIGFzc3VtaW5nIHRoZSBvcyBkZXNpZ25lciBpcyBzYW5lIG9mIGNvdXJzZSA6LSkgKS4KLUJ5dGVzIDAtNTEyICggMjAwIGhleCApIG9uIHMvMzkwICYgMC01MTIsNDA5Ni00NTQ0LDQ2MDQtNTExOSBjdXJyZW50bHkgb24gei9BcmNoaXRlY3R1cmUgCi1hcmUgdXNlZCBieSB0aGUgcHJvY2Vzc29yIGl0c2VsZiBmb3IgaG9sZGluZyBzdWNoIGluZm9ybWF0aW9uIGFzIGV4Y2VwdGlvbiBpbmRpY2F0aW9ucyAmIAotZW50cnkgcG9pbnRzIGZvciBleGNlcHRpb25zLgotQnl0ZXMgYWZ0ZXIgMHhjMDAgaGV4IGFyZSB1c2VkIGJ5IGxpbnV4IGZvciBwZXIgcHJvY2Vzc29yIGdsb2JhbHMgb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSAKLSggdGhlcmUgaXMgYSBnYXAgb24gei9BcmNoaXRlY3R1cmUgdG9vIGN1cnJlbnRseSBiZXR3ZWVuIDB4YzAwICYgMTAwMCB3aGljaCBsaW51eCB1c2VzICkuCitJdCBleGlzdHMgYmV0d2VlbiB0aGUgcmVhbCBhZGRyZXNzZXMgMC00MDk2IG9uIHMvMzkwIGFuZCBiZXR3ZWVuIDAtODE5MiBvbgorei9BcmNoaXRlY3R1cmUgYW5kIGlzIGV4Y2hhbmdlZCB3aXRoIG9uZSBwYWdlIG9uIHMvMzkwIG9yIHR3byBwYWdlcyBvbgorei9BcmNoaXRlY3R1cmUgaW4gYWJzb2x1dGUgc3RvcmFnZSBieSB0aGUgc2V0IHByZWZpeCBpbnN0cnVjdGlvbiBkdXJpbmcgTGludXgKK3N0YXJ0dXAuCitUaGlzIHBhZ2UgaXMgbWFwcGVkIHRvIGEgZGlmZmVyZW50IHByZWZpeCBmb3IgZWFjaCBwcm9jZXNzb3IgaW4gYW4gU01QCitjb25maWd1cmF0aW9uIChhc3N1bWluZyB0aGUgT1MgZGVzaWduZXIgaXMgc2FuZSBvZiBjb3Vyc2UpLgorQnl0ZXMgMC01MTIgKDIwMCBoZXgpIG9uIHMvMzkwIGFuZCAwLTUxMiwgNDA5Ni00NTQ0LCA0NjA0LTUxMTkgY3VycmVudGx5IG9uCit6L0FyY2hpdGVjdHVyZSBhcmUgdXNlZCBieSB0aGUgcHJvY2Vzc29yIGl0c2VsZiBmb3IgaG9sZGluZyBzdWNoIGluZm9ybWF0aW9uCithcyBleGNlcHRpb24gaW5kaWNhdGlvbnMgYW5kIGVudHJ5IHBvaW50cyBmb3IgZXhjZXB0aW9ucy4KK0J5dGVzIGFmdGVyIDB4YzAwIGhleCBhcmUgdXNlZCBieSBsaW51eCBmb3IgcGVyIHByb2Nlc3NvciBnbG9iYWxzIG9uIHMvMzkwIGFuZAorei9BcmNoaXRlY3R1cmUgKHRoZXJlIGlzIGEgZ2FwIG9uIHovQXJjaGl0ZWN0dXJlIGN1cnJlbnRseSBiZXR3ZWVuIDB4YzAwIGFuZAorMHgxMDAwLCB0b28sIHdoaWNoIGlzIHVzZWQgYnkgTGludXgpLgogVGhlIGNsb3Nlc3QgdGhpbmcgdG8gdGhpcyBvbiB0cmFkaXRpb25hbCBhcmNoaXRlY3R1cmVzIGlzIHRoZSBpbnRlcnJ1cHQKIHZlY3RvciB0YWJsZS4gVGhpcyBpcyBhIGdvb2QgdGhpbmcgJiBkb2VzIHNpbXBsaWZ5IHNvbWUgb2YgdGhlIGtlcm5lbCBjb2RpbmcKIGhvd2V2ZXIgaXQgbWVhbnMgdGhhdCB3ZSBub3cgY2Fubm90IGNhdGNoIHN0cmF5IE5VTEwgcG9pbnRlcnMgaW4gdGhlCkBAIC0xOTIsMjYgKzE5NiwyNiBAQAogCiBUaGUgdHJhZGl0aW9uYWwgSW50ZWwgTGludXggaXMgYXBwcm94aW1hdGVseSBtYXBwZWQgYXMgZm9sbG93cyBmb3JnaXZlCiB0aGUgYXNjaWkgYXJ0LgotMHhGRkZGRkZGRiA0R0IgSGltZW0gICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEtlcm5lbCBTcGFjZSAgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqKioqKioqKioqKioqKioqCi1Vc2VyIFNwYWNlIEhpbWVtICh0eXBpY2FsbHkgMHhDMDAwMDAwMCAzR0IgKSogIFVzZXIgU3RhY2sgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKLQkJCQkgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqICAgICAgICAgICAgICAqCi0JCQkJCSAgICAqICBTaGFyZWQgTGlicyAgKiAgICAgICAgICAqIE5leHQgUHJvY2VzcyAqICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqICAgICB0byAgICAgICAqICAKLQkJCQkJICAgICogICAgICAgICAgICAgICAqICAgIDw9PSAgICogICAgIFJ1biAgICAgICogIDw9PQotCQkJCQkgICAgKiAgVXNlciBQcm9ncmFtICogICAgICAgICAgKiAgICAgICAgICAgICAgKgotCQkJCQkgICAgKiAgIERhdGEgQlNTICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCSBUZXh0ICAgICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgotICAgICAgICAgCQkJICAgICAgICAgICAgKiAgIFNlY3Rpb25zICAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgotMHgwMDAwMDAwMCAgICAgICAgIAkJCSAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqKioqKioqKioqKioqKioqCisweEZGRkZGRkZGIDRHQiBIaW1lbQkJKioqKioqKioqKioqKioqKioKKwkJCQkqCQkqCisJCQkJKiBLZXJuZWwgU3BhY2UJKgorCQkJCSoJCSoKKwkJCQkqKioqKioqKioqKioqKioqKgkgICoqKioqKioqKioqKioqKioKK1VzZXIgU3BhY2UgSGltZW0JCSogIFVzZXIgU3RhY2sJKgkgICoJCSAqCisodHlwaWNhbGx5IDB4QzAwMDAwMDAgM0dCICkJKioqKioqKioqKioqKioqKioJICAqCQkgKgorCQkJCSogIFNoYXJlZCBMaWJzCSoJICAqIE5leHQgUHJvY2VzcyAqCisJCQkJKioqKioqKioqKioqKioqKioJICAqCXRvCSAqCisJCQkJKgkJKiAgIDw9PSAgICoJUnVuCSAqICA8PT0KKwkJCQkqICBVc2VyIFByb2dyYW0gKgkgICoJCSAqCisJCQkJKiAgIERhdGEgQlNTCSoJICAqCQkgKgorCQkJCSogICAgVGV4dAkqCSAgKgkJICoKKwkJCQkqICAgU2VjdGlvbnMJKgkgICoJCSAqCisweDAwMDAwMDAwCQkJKioqKioqKioqKioqKioqKioJICAqKioqKioqKioqKioqKioqCiAKLU5vdyBpdCBpcyBlYXN5IHRvIHNlZSB0aGF0IG9uIEludGVsIGl0IGlzIHF1aXRlIGVhc3kgdG8gcmVjb2duaXNlIGEga2VybmVsIGFkZHJlc3MgCi1hcyBiZWluZyBvbmUgZ3JlYXRlciB0aGFuIHVzZXIgc3BhY2UgaGltZW0gKCBpbiB0aGlzIGNhc2UgMHhDMDAwMDAwMCkuCi0mIGFkZHJlc3NlcyBvZiBsZXNzIHRoYW4gdGhpcyBhcmUgdGhlIG9uZXMgaW4gdGhlIGN1cnJlbnQgcnVubmluZyBwcm9ncmFtIG9uIHRoaXMKLXByb2Nlc3NvciAoIGlmIGFuIHNtcCBib3ggKS4KK05vdyBpdCBpcyBlYXN5IHRvIHNlZSB0aGF0IG9uIEludGVsIGl0IGlzIHF1aXRlIGVhc3kgdG8gcmVjb2duaXNlIGEga2VybmVsCithZGRyZXNzIGFzIGJlaW5nIG9uZSBncmVhdGVyIHRoYW4gdXNlciBzcGFjZSBoaW1lbSAoaW4gdGhpcyBjYXNlIDB4QzAwMDAwMDApLAorYW5kIGFkZHJlc3NlcyBvZiBsZXNzIHRoYW4gdGhpcyBhcmUgdGhlIG9uZXMgaW4gdGhlIGN1cnJlbnQgcnVubmluZyBwcm9ncmFtIG9uCit0aGlzIHByb2Nlc3NvciAoaWYgYW4gc21wIGJveCkuCiBJZiB1c2luZyB0aGUgdmlydHVhbCBtYWNoaW5lICggVk0gKSBhcyBhIGRlYnVnZ2VyIGl0IGlzIHF1aXRlIGRpZmZpY3VsdCB0bwoga25vdyB3aGljaCB1c2VyIHByb2Nlc3MgaXMgcnVubmluZyBhcyB0aGUgYWRkcmVzcyBzcGFjZSB5b3UgYXJlIGxvb2tpbmcgYXQKIGNvdWxkIGJlIGZyb20gYW55IHByb2Nlc3MgaW4gdGhlIHJ1biBxdWV1ZS4KQEAgLTI0Nyw4ICsyNTEsOCBAQAogSGltZW0gMHg3ZmZmZmZmZiAyR0Igb24gcy8zOTAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKgogY3VycmVudGx5IDB4M2ZmZmZmZmZmZmYgKDJeNDIpLTEgKiAgVXNlciBTdGFjayAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgogb24gei9BcmNoaXRlY3R1cmUuCQkgKioqKioqKioqKioqKioqKiogICAgICAgICAgKiAgICAgICAgICAgICAgKgotCQkgICAgICAgICAgICAgICAgICogIFNoYXJlZCBMaWJzICAqICAgICAgICAgICogICAgICAgICAgICAgICogICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICogIAorCQkJCSAqICBTaGFyZWQgTGlicyAgKgkgICAgKgkJICAgKgorCQkJCSAqKioqKioqKioqKioqKioqKgkgICAgKgkJICAgKgogCQkJICAgICAgICAgKiAgICAgICAgICAgICAgICogICAgICAgICAgKiAgICBLZXJuZWwgICAgKiAgCiAJCSAgICAgICAgICAgICAgICAgKiAgVXNlciBQcm9ncmFtICogICAgICAgICAgKiAgICAgICAgICAgICAgKgogCQkgICAgICAgICAgICAgICAgICogICBEYXRhIEJTUyAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKQEAgLTMwMSwxMCArMzA1LDEwIEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIEEgdmlydHVhbCBhZGRyZXNzIG9uIHMvMzkwIGlzIG1hZGUgdXAgb2YgMyBwYXJ0cwotVGhlIFNYICggc2VnbWVudCBpbmRleCwgcm91Z2hseSBjb3JyZXNwb25kaW5nIHRvIHRoZSBQR0QgJiBQTUQgaW4gbGludXggdGVybWlub2xvZ3kgKSAKLWJlaW5nIGJpdHMgMS0xMS4KLVRoZSBQWCAoIHBhZ2UgaW5kZXgsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhZ2UgdGFibGUgZW50cnkgKHB0ZSkgaW4gbGludXggdGVybWlub2xvZ3kgKQotYmVpbmcgYml0cyAxMi0xOS4gCitUaGUgU1ggKHNlZ21lbnQgaW5kZXgsIHJvdWdobHkgY29ycmVzcG9uZGluZyB0byB0aGUgUEdEICYgUE1EIGluIExpbnV4Cit0ZXJtaW5vbG9neSkgYmVpbmcgYml0cyAxLTExLgorVGhlIFBYIChwYWdlIGluZGV4LCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYWdlIHRhYmxlIGVudHJ5IChwdGUpIGluIExpbnV4Cit0ZXJtaW5vbG9neSkgYmVpbmcgYml0cyAxMi0xOS4KIFRoZSByZW1haW5pbmcgYml0cyBCWCAodGhlIGJ5dGUgaW5kZXggYXJlIHRoZSBvZmZzZXQgaW4gdGhlIHBhZ2UgKQogaS5lLiBiaXRzIDIwIHRvIDMxLgogCkBAIC0zNjgsOSArMzcyLDkgQEAKICAgICAgICAgICAgICogICAgICAgICggOEsgKSAgICAgICAgKgogMTZLIGFsaWduZWQgKioqKioqKioqKioqKioqKioqKioqKioqIAogCi1XaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGRlZGljYXRlIGFueSByZWdpc3RlciBvciBnbG9iYWwgdmFyaWFibGUKLXRvIHBvaW50IHRvIHRoZSBjdXJyZW50IHJ1bm5pbmcgcHJvY2VzcyAmIGNhbiByZXRyaWV2ZSBpdCB3aXRoIHRoZSBmb2xsb3dpbmcKLXZlcnkgc2ltcGxlIGNvbnN0cnVjdCBmb3Igcy8zOTAgJiBvbmUgdmVyeSBzaW1pbGFyIGZvciB6L0FyY2hpdGVjdHVyZS4KK1doYXQgdGhpcyBtZWFucyBpcyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZGVkaWNhdGUgYW55IHJlZ2lzdGVyIG9yIGdsb2JhbAordmFyaWFibGUgdG8gcG9pbnQgdG8gdGhlIGN1cnJlbnQgcnVubmluZyBwcm9jZXNzICYgY2FuIHJldHJpZXZlIGl0IHdpdGggdGhlCitmb2xsb3dpbmcgdmVyeSBzaW1wbGUgY29uc3RydWN0IGZvciBzLzM5MCAmIG9uZSB2ZXJ5IHNpbWlsYXIgZm9yIHovQXJjaGl0ZWN0dXJlLgogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGdldF9jdXJyZW50KHZvaWQpCiB7CkBAIC00MDMsOCArNDA3LDggQEAKIGxpbWl0ZWQga25vd2xlZGdlIG9mIG9uZSBhc3NlbWJseSBsYW5ndWFnZS4KIAogSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdGhlcmUgYXJlIHNvbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUKLXMvMzkwICYgei9BcmNoaXRlY3R1cmUgc3RhY2sgbGF5b3V0cyBhcyB0aGUgei9BcmNoaXRlY3R1cmUgc3RhY2sgbGF5b3V0IGRpZG4ndCBoYXZlCi10byBtYWludGFpbiBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgbGlua2FnZSBmb3JtYXRzLgorcy8zOTAgYW5kIHovQXJjaGl0ZWN0dXJlIHN0YWNrIGxheW91dHMgYXMgdGhlIHovQXJjaGl0ZWN0dXJlIHN0YWNrIGxheW91dAorZGlkbid0IGhhdmUgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGxpbmthZ2UgZm9ybWF0cy4KIAogR2xvc3Nhcnk6CiAtLS0tLS0tLS0KQEAgLTQ0MCw3ICs0NDQsNyBAQAogCiBmcmFtZWxlc3MtZnVuY3Rpb24KIEEgZnJhbWVsZXNzIGZ1bmN0aW9uIGluIExpbnV4IGZvciBzMzkwICYgei9BcmNoaXRlY3R1cmUgaXMgb25lIHdoaWNoIGRvZXNuJ3QgCi1uZWVkIG1vcmUgdGhhbiB0aGUgcmVnaXN0ZXIgc2F2ZSBhcmVhICggOTYgYnl0ZXMgb24gcy8zOTAsIDE2MCBvbiB6L0FyY2hpdGVjdHVyZSApCituZWVkIG1vcmUgdGhhbiB0aGUgcmVnaXN0ZXIgc2F2ZSBhcmVhICg5NiBieXRlcyBvbiBzLzM5MCwgMTYwIG9uIHovQXJjaGl0ZWN0dXJlKQogZ2l2ZW4gdG8gaXQgYnkgdGhlIGNhbGxlci4KIEEgZnJhbWVsZXNzIGZ1bmN0aW9uIG5ldmVyOgogMSkgU2V0cyB1cCBhIGJhY2sgY2hhaW4uCkBAIC01ODgsOCArNTkyLDggQEAKIAogQ29tbWVudHMgb24gdGhlIGZ1bmN0aW9uIHRlc3QKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0xKSBJdCBkaWRuJ3QgbmVlZCB0byBzZXQgdXAgYSBwb2ludGVyIHRvIHRoZSBjb25zdGFudCBwb29sIGdwcjEzIGFzIGl0IGlzbid0IHVzZWQKLSggOi0oICkuCisxKSBJdCBkaWRuJ3QgbmVlZCB0byBzZXQgdXAgYSBwb2ludGVyIHRvIHRoZSBjb25zdGFudCBwb29sIGdwcjEzIGFzIGl0IGlzIG5vdAordXNlZCAoIDotKCApLgogMikgVGhpcyBpcyBhIGZyYW1lbGVzcyBmdW5jdGlvbiAmIG5vIHN0YWNrIGlzIGJvdWdodC4KIDMpIFRoZSBjb21waWxlciB3YXMgY2xldmVyIGVub3VnaCB0byByZWNvZ25pc2UgdGhhdCBpdCBjb3VsZCByZXR1cm4gdGhlCiB2YWx1ZSBpbiByMiBhcyB3ZWxsIGFzIHVzZSBpdCBmb3IgdGhlIHBhc3NlZCBpbiBwYXJhbWV0ZXIgKCA6LSkgKS4KQEAgLTc0MywzNSArNzQ3LDM0IEBACiBOb3RlcwogLS0tLS0KIEFkZHJlc3NlcyAmIHZhbHVlcyBpbiB0aGUgVk0gZGVidWdnZXIgYXJlIGFsd2F5cyBoZXggbmV2ZXIgZGVjaW1hbAotQWRkcmVzcyByYW5nZXMgYXJlIG9mIHRoZSBmb3JtYXQgPEhleFZhbHVlMT4tPEhleFZhbHVlMj4gb3IgPEhleFZhbHVlMT4uPEhleFZhbHVlMj4gCi1lLmcuIFRoZSBhZGRyZXNzIHJhbmdlICAweDIwMDAgdG8gMHgzMDAwIGNhbiBiZSBkZXNjcmliZWQgYXMgMjAwMC0zMDAwIG9yIDIwMDAuMTAwMAorQWRkcmVzcyByYW5nZXMgYXJlIG9mIHRoZSBmb3JtYXQgPEhleFZhbHVlMT4tPEhleFZhbHVlMj4gb3IKKzxIZXhWYWx1ZTE+LjxIZXhWYWx1ZTI+CitGb3IgZXhhbXBsZSwgdGhlIGFkZHJlc3MgcmFuZ2UJMHgyMDAwIHRvIDB4MzAwMCBjYW4gYmUgZGVzY3JpYmVkIGFzIDIwMDAtMzAwMAorb3IgMjAwMC4xMDAwCiAKIFRoZSBWTSBEZWJ1Z2dlciBpcyBjYXNlIGluc2Vuc2l0aXZlLgogCi1WTSdzIHN0cmVuZ3RocyBhcmUgdXN1YWxseSBvdGhlciBkZWJ1Z2dlcnMgd2Vha25lc3NlcyB5b3UgY2FuIGdldCBhdCBhbnkgcmVzb3VyY2UKLW5vIG1hdHRlciBob3cgc2Vuc2l0aXZlIGUuZy4gbWVtb3J5IG1hbmFnZW1lbnQgcmVzb3VyY2VzLGNoYW5nZSBhZGRyZXNzIHRyYW5zbGF0aW9uCi1pbiB0aGUgUFNXLiBGb3Iga2VybmVsIGhhY2tpbmcgeW91IHdpbGwgcmVhcCBkaXZpZGVuZHMgaWYgeW91IGdldCBnb29kIGF0IGl0LgorVk0ncyBzdHJlbmd0aHMgYXJlIHVzdWFsbHkgb3RoZXIgZGVidWdnZXJzIHdlYWtuZXNzZXMgeW91IGNhbiBnZXQgYXQgYW55CityZXNvdXJjZSBubyBtYXR0ZXIgaG93IHNlbnNpdGl2ZSBlLmcuIG1lbW9yeSBtYW5hZ2VtZW50IHJlc291cmNlcywgY2hhbmdlCithZGRyZXNzIHRyYW5zbGF0aW9uIGluIHRoZSBQU1cuIEZvciBrZXJuZWwgaGFja2luZyB5b3Ugd2lsbCByZWFwIGRpdmlkZW5kcyBpZgoreW91IGdldCBnb29kIGF0IGl0LgogCi1UaGUgVk0gRGVidWdnZXIgZGlzcGxheXMgb3BlcmF0b3JzIGJ1dCBub3Qgb3BlcmFuZHMsIHByb2JhYmx5IGJlY2F1c2Ugc29tZQotb2YgaXQgd2FzIHdyaXR0ZW4gd2hlbiBtZW1vcnkgd2FzIGV4cGVuc2l2ZSAmIHRoZSBwcm9ncmFtbWVyIHdhcyBwcm9iYWJseSBwcm91ZCB0aGF0Ci1pdCBmaXR0ZWQgaW50byAyayBvZiBtZW1vcnkgJiB0aGUgcHJvZ3JhbW1lcnMgJiBkaWRuJ3Qgd2FudCB0byBzaG9jayBoYXJkY29yZSBWTSdlcnMgYnkKLWNoYW5naW5nIHRoZSBpbnRlcmZhY2UgOi0pLCBhbHNvIHRoZSBkZWJ1Z2dlciBkaXNwbGF5cyB1c2VmdWwgaW5mb3JtYXRpb24gb24gdGhlIHNhbWUgbGluZSAmIAotdGhlIGF1dGhvciBvZiB0aGUgY29kZSBwcm9iYWJseSBmZWx0IHRoYXQgaXQgd2FzIGEgZ29vZCBpZGVhIG5vdCB0byBnbyBvdmVyIAotdGhlIDgwIGNvbHVtbnMgb24gdGhlIHNjcmVlbi4gCi0KLUFzIHNvbWUgb2YgeW91IGFyZSBwcm9iYWJseSBpbiBhIHBhbmljIG5vdyB0aGlzIGlzbid0IGFzIHVuaW50dWl0aXZlIGFzIGl0IG1heSBzZWVtCi1hcyB0aGUgMzkwIGluc3RydWN0aW9ucyBhcmUgZWFzeSB0byBkZWNvZGUgbWVudGFsbHkgJiB5b3UgY2FuIG1ha2UgYSBnb29kIGd1ZXNzIGF0IGEgbG90IAotb2YgdGhlbSBhcyBhbGwgdGhlIG9wZXJhbmRzIGFyZSBuaWJibGUgKCBoYWxmIGJ5dGUgYWxpZ25lZCApICYgaWYgeW91IGhhdmUgYW4gb2JqZHVtcCBsaXN0aW5nCi1hbHNvIGl0IGlzIHF1aXRlIGVhc3kgdG8gZm9sbG93LCBpZiB5b3UgZG9uJ3QgaGF2ZSBhbiBvYmpkdW1wIGxpc3Rpbmcga2VlcCBhIGNvcHkgb2YKLXRoZSBzLzM5MCBSZWZlcmVuY2UgU3VtbWFyeSAmIGxvb2sgYXQgYmV0d2VlbiBwYWdlcyAyICYgNyBvciBhbHRlcm5hdGl2ZWx5IHRoZQotcy8zOTAgcHJpbmNpcGxlcyBvZiBvcGVyYXRpb24uCitUaGUgVk0gRGVidWdnZXIgZGlzcGxheXMgb3BlcmF0b3JzIGJ1dCBub3Qgb3BlcmFuZHMsIGFuZCBhbHNvIHRoZSBkZWJ1Z2dlcgorZGlzcGxheXMgdXNlZnVsIGluZm9ybWF0aW9uIG9uIHRoZSBzYW1lIGxpbmUgYXMgdGhlIGF1dGhvciBvZiB0aGUgY29kZSBwcm9iYWJseQorZmVsdCB0aGF0IGl0IHdhcyBhIGdvb2QgaWRlYSBub3QgdG8gZ28gb3ZlciB0aGUgODAgY29sdW1ucyBvbiB0aGUgc2NyZWVuLgorVGhpcyBpc24ndCBhcyB1bmludHVpdGl2ZSBhcyBpdCBtYXkgc2VlbSBhcyB0aGUgcy8zOTAgaW5zdHJ1Y3Rpb25zIGFyZSBlYXN5IHRvCitkZWNvZGUgbWVudGFsbHkgYW5kIHlvdSBjYW4gbWFrZSBhIGdvb2QgZ3Vlc3MgYXQgYSBsb3Qgb2YgdGhlbSBhcyBhbGwgdGhlCitvcGVyYW5kcyBhcmUgbmliYmxlIChoYWxmIGJ5dGUgYWxpZ25lZCkuCitTbyBpZiB5b3UgaGF2ZSBhbiBvYmpkdW1wIGxpc3RpbmcgYnkgaGFuZCwgaXQgaXMgcXVpdGUgZWFzeSB0byBmb2xsb3csIGFuZCBpZgoreW91IGRvbid0IGhhdmUgYW4gb2JqZHVtcCBsaXN0aW5nIGtlZXAgYSBjb3B5IG9mIHRoZSBzLzM5MCBSZWZlcmVuY2UgU3VtbWFyeQorb3IgYWx0ZXJuYXRpdmVseSB0aGUgcy8zOTAgcHJpbmNpcGxlcyBvZiBvcGVyYXRpb24gbmV4dCB0byB5b3UuCiBlLmcuIGV2ZW4gSSBjYW4gZ3Vlc3MgdGhhdCAKIDAwMDFBRkY4JyBMUiAgICAxODBGICAgICAgICBDQyAwCiBpcyBhICggbG9hZCByZWdpc3RlciApIGxyIHIwLHIxNSAKIAotQWxzbyBpdCBpcyB2ZXJ5IGVhc3kgdG8gdGVsbCB0aGUgbGVuZ3RoIG9mIGEgMzkwIGluc3RydWN0aW9uIGZyb20gdGhlIDIgbW9zdCBzaWduaWZpY2FudAotYml0cyBpbiB0aGUgaW5zdHJ1Y3Rpb24gKCBub3QgdGhhdCB0aGlzIGluZm8gaXMgcmVhbGx5IHVzZWZ1bCBleGNlcHQgaWYgeW91IGFyZSB0cnlpbmcgdG8KLW1ha2Ugc2Vuc2Ugb2YgYSBoZXhkdW1wIG9mIGNvZGUgKS4KK0Fsc28gaXQgaXMgdmVyeSBlYXN5IHRvIHRlbGwgdGhlIGxlbmd0aCBvZiBhIDM5MCBpbnN0cnVjdGlvbiBmcm9tIHRoZSAyIG1vc3QKK3NpZ25pZmljYW50IGJpdHMgaW4gdGhlIGluc3RydWN0aW9uIChub3QgdGhhdCB0aGlzIGluZm8gaXMgcmVhbGx5IHVzZWZ1bCBleGNlcHQKK2lmIHlvdSBhcmUgdHJ5aW5nIHRvIG1ha2Ugc2Vuc2Ugb2YgYSBoZXhkdW1wIG9mIGNvZGUpLgogSGVyZSBpcyBhIHRhYmxlCiBCaXRzICAgICAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiBMZW5ndGgKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzgwLDkgKzc4Myw2IEBACiAxMCAgICAgICAgICAgICAgICAgICAgICAgICAgNCBCeXRlcwogMTEgICAgICAgICAgICAgICAgICAgICAgICAgIDYgQnl0ZXMKIAotCi0KLQogVGhlIGRlYnVnZ2VyIGFsc28gZGlzcGxheXMgb3RoZXIgdXNlZnVsIGluZm8gb24gdGhlIHNhbWUgbGluZSBzdWNoIGFzIHRoZQogYWRkcmVzc2VzIGJlaW5nIG9wZXJhdGVkIG9uIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBvZiBicmFuY2hlcyAmIGNvbmRpdGlvbiBjb2Rlcy4KIGUuZy4gIApAQCAtODUzLDggKzg1Myw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRCBHIHdpbGwgZGlzcGxheSBhbGwgdGhlIGdwcnMKIEFkZGluZyBhIGV4dHJhIEcgdG8gYWxsIHRoZSBjb21tYW5kcyBpcyBuZWNlc3NhcnkgdG8gYWNjZXNzIHRoZSBmdWxsIDY0IGJpdCAKLWNvbnRlbnQgaW4gVk0gb24gei9BcmNoaXRlY3R1cmUgb2J2aW91c2x5IHRoaXMgaXNuJ3QgcmVxdWlyZWQgZm9yIGFjY2VzcyByZWdpc3RlcnMKLWFzIHRoZXNlIGFyZSBzdGlsbCAzMiBiaXQuCitjb250ZW50IGluIFZNIG9uIHovQXJjaGl0ZWN0dXJlLiBPYnZpb3VzbHkgdGhpcyBpc24ndCByZXF1aXJlZCBmb3IgYWNjZXNzCityZWdpc3RlcnMgYXMgdGhlc2UgYXJlIHN0aWxsIDMyIGJpdC4KIGUuZy4gREdHIGluc3RlYWQgb2YgREcgCiBEIFggd2lsbCBkaXNwbGF5IGFsbCB0aGUgY29udHJvbCByZWdpc3RlcnMKIEQgQVIgd2lsbCBkaXNwbGF5IGFsbCB0aGUgYWNjZXNzIHJlZ2lzdGVycwpAQCAtODcwLDEwICs4NzAsMTEgQEAKIC0tLS0tLS0tLS0tLS0tLS0tCiBUbyBkaXNwbGF5IG1lbW9yeSBtYXBwZWQgdXNpbmcgdGhlIGN1cnJlbnQgUFNXJ3MgbWFwcGluZyB0cnkKIEQgPHJhbmdlPgotVG8gbWFrZSBWTSBkaXNwbGF5IGEgbWVzc2FnZSBlYWNoIHRpbWUgaXQgaGl0cyBhIHBhcnRpY3VsYXIgYWRkcmVzcyAmIGNvbnRpbnVlIHRyeQorVG8gbWFrZSBWTSBkaXNwbGF5IGEgbWVzc2FnZSBlYWNoIHRpbWUgaXQgaGl0cyBhIHBhcnRpY3VsYXIgYWRkcmVzcyBhbmQKK2NvbnRpbnVlIHRyeQogRCBJPHJhbmdlPiB3aWxsIGRpc2Fzc2VtYmxlL2Rpc3BsYXkgYSByYW5nZSBvZiBpbnN0cnVjdGlvbnMuCiBTVCBhZGRyIDMyIGJpdCB3b3JkIHdpbGwgc3RvcmUgYSAzMiBiaXQgYWxpZ25lZCBhZGRyZXNzCi1EIFQ8cmFuZ2U+IHdpbGwgZGlzcGxheSB0aGUgRUJDRElDIGluIGFuIGFkZHJlc3MgKCBpZiB5b3UgYXJlIHRoYXQgd2F5IGluY2xpbmVkICkKK0QgVDxyYW5nZT4gd2lsbCBkaXNwbGF5IHRoZSBFQkNESUMgaW4gYW4gYWRkcmVzcyAoaWYgeW91IGFyZSB0aGF0IHdheSBpbmNsaW5lZCkKIEQgUjxyYW5nZT4gd2lsbCBkaXNwbGF5IHJlYWwgYWRkcmVzc2VzICggd2l0aG91dCBEQVQgKSBidXQgd2l0aCBwcmVmaXhpbmcuCiBUaGVyZSBhcmUgb3RoZXIgY29tcGxleCBvcHRpb25zIHRvIGRpc3BsYXkgaWYgeW91IG5lZWQgdG8gZ2V0IGF0IHNheSBob21lIHNwYWNlCiBidXQgYXJlIGluIHByaW1hcnkgc3BhY2UgdGhlIGVhc2llc3QgdGhpbmcgdG8gZG8gaXMgdG8gdGVtcG9yYXJpbHkKQEAgLTg4NCw4ICs4ODUsOCBAQAogIAogSGludHMKIC0tLS0tCi1JZiB5b3Ugd2FudCB0byBpc3N1ZSBhIGRlYnVnZ2VyIGNvbW1hbmQgd2l0aG91dCBoYWx0aW5nIHlvdXIgdmlydHVhbCBtYWNoaW5lIHdpdGggdGhlCi1QQTEga2V5IHRyeSBwcmVmaXhpbmcgdGhlIGNvbW1hbmQgd2l0aCAjQ1AgZS5nLgorSWYgeW91IHdhbnQgdG8gaXNzdWUgYSBkZWJ1Z2dlciBjb21tYW5kIHdpdGhvdXQgaGFsdGluZyB5b3VyIHZpcnR1YWwgbWFjaGluZQord2l0aCB0aGUgUEExIGtleSB0cnkgcHJlZml4aW5nIHRoZSBjb21tYW5kIHdpdGggI0NQIGUuZy4KICNjcCB0ciBpIHBzd2EgMjAwMAogYWxzbyBzdWZmaXhpbmcgbW9zdCBkZWJ1Z2dlciBjb21tYW5kcyB3aXRoIFJVTiB3aWxsIGNhdXNlIHRoZW0gbm90CiB0byBzdG9wIGp1c3QgZGlzcGxheSB0aGUgbW5lbW9uaWMgYXQgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gb24gdGhlIGNvbnNvbGUuCkBAIC05MDMsOSArOTA0LDEwIEBACiBzY3JpcHQgd2l0aCBicmVha3BvaW50cyBvbiBldmVyeSBrZXJuZWwgcHJvY2VkdXJlLCB0aGlzIGlzbid0IGEgZ29vZCBpZGVhCiBiZWNhdXNlIHRoZXJlIGFyZSB0aG91c2FuZHMgb2YgdGhlc2Ugcm91dGluZXMgJiBWTSBjYW4gb25seSBzZXQgMjU1IGJyZWFrcG9pbnRzCiBhdCBhIHRpbWUgc28geW91IG5lYXJseSBoYWQgdG8gc3BlbmQgYXMgbG9uZyBwcnVuaW5nIHRoZSBmaWxlIGRvd24gYXMgeW91IHdvdWxkIAotZW50ZXJpbmcgdGhlIG1zZydzIGJ5IGhhbmQgKSxob3dldmVyLCB0aGUgdHJpY2sgbWlnaHQgYmUgdXNlZnVsIGZvciBhIHNpbmdsZSBvYmplY3QgZmlsZS4KLU9uIGxpbnV4J2VzIDMyNzAgZW11bGF0b3IgeDMyNzAgdGhlcmUgaXMgYSB2ZXJ5IHVzZWZ1bCBvcHRpb24gdW5kZXIgdGhlIGZpbGUgbWVudAotU2F2ZSBTY3JlZW5zIEluIEZpbGUgdGhpcyBpcyB2ZXJ5IGdvb2Qgb2Yga2VlcGluZyBhIGNvcHkgb2YgdHJhY2VzLiAKK2VudGVyaW5nIHRoZSBtc2dzIGJ5IGhhbmQpLCBob3dldmVyLCB0aGUgdHJpY2sgbWlnaHQgYmUgdXNlZnVsIGZvciBhIHNpbmdsZQorb2JqZWN0IGZpbGUuIEluIHRoZSAzMjcwIHRlcm1pbmFsIGVtdWxhdG9yIHgzMjcwIHRoZXJlIGlzIGEgdmVyeSB1c2VmdWwgb3B0aW9uCitpbiB0aGUgZmlsZSBtZW51IGNhbGxlZCAiU2F2ZSBTY3JlZW4gSW4gRmlsZSIgLSB0aGlzIGlzIHZlcnkgZ29vZCBmb3Iga2VlcGluZyBhCitjb3B5IG9mIHRyYWNlcy4KIAogRnJvbSBDTVMgaGVscCA8Y29tbWFuZCBuYW1lPiB3aWxsIGdpdmUgeW91IG9ubGluZSBoZWxwIG9uIGEgcGFydGljdWxhciBjb21tYW5kLiAKIGUuZy4gCkBAIC05MjAsNyArOTIyLDggQEAKIFRoaXMgZG9lcyBhIHNpbmdsZSBzdGVwIGluIFZNIG9uIHByZXNzaW5nIEY4LiAKIFNFVCBQRjEwICBeCiBUaGlzIHNldHMgdXAgdGhlIF4ga2V5Lgotd2hpY2ggY2FuIGJlIHVzZWQgZm9yIF5jIChjdHJsLWMpLF56IChjdHJsLXopIHdoaWNoIGNhbid0IGJlIHR5cGVkIGRpcmVjdGx5IGludG8gc29tZSAzMjcwIGNvbnNvbGVzLgord2hpY2ggY2FuIGJlIHVzZWQgZm9yIF5jIChjdHJsLWMpLF56IChjdHJsLXopIHdoaWNoIGNhbid0IGJlIHR5cGVkIGRpcmVjdGx5CitpbnRvIHNvbWUgMzI3MCBjb25zb2xlcy4KIFNFVCBQRjExIF4tCiBUaGlzIHR5cGVzIHRoZSBzdGFydGluZyBrZXlzdHJva2VzIGZvciBhIHN5c3JxIHNlZSBTeXNScSBiZWxvdy4KIFNFVCBQRjEyIFJFVFJJRVZFCkBAIC0xMDE0LDggKzEwMTcsOCBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIElmIHlvdSBnZXQgYSBjcmFzaCB3aGljaCBzYXlzIHNvbWV0aGluZyBsaWtlCiBpbGxlZ2FsIG9wZXJhdGlvbiBvciBzcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbiBmb2xsb3dlZCBieSBhIHJlZ2lzdGVyIGR1bXAKLVlvdSBjYW4gcmVzdGFydCBsaW51eCAmIHRyYWNlIHRoZXNlIHVzaW5nIHRoZSB0ciBwcm9nIDxyYW5nZSBvciB2YWx1ZT4gdHJhY2Ugb3B0aW9uLgotCitZb3UgY2FuIHJlc3RhcnQgbGludXggJiB0cmFjZSB0aGVzZSB1c2luZyB0aGUgdHIgcHJvZyA8cmFuZ2Ugb3IgdmFsdWU+IHRyYWNlCitvcHRpb24uCiAKIAogVGhlIG1vc3QgY29tbW9uIG9uZXMgeW91IHdpbGwgbm9ybWFsbHkgYmUgdHJhY2luZyBmb3IgaXMKQEAgLTEwNTcsOSArMTA2MCwxMCBAQAogCiBUcmFjaW5nIGxpbnV4IHN5c2NhbGxzIHVuZGVyIFZNCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TeXNjYWxscyBhcmUgaW1wbGVtZW50ZWQgb24gTGludXggZm9yIFMzOTAgYnkgdGhlIFN1cGVydmlzb3IgY2FsbCBpbnN0cnVjdGlvbiAoU1ZDKSB0aGVyZSAyNTYgCi1wb3NzaWJpbGl0aWVzIG9mIHRoZXNlIGFzIHRoZSBpbnN0cnVjdGlvbiBpcyBtYWRlIHVwIG9mIGEgIDB4QSBvcGNvZGUgJiB0aGUgc2Vjb25kIGJ5dGUgYmVpbmcKLXRoZSBzeXNjYWxsIG51bWJlci4gVGhleSBhcmUgdHJhY2VkIHVzaW5nIHRoZSBzaW1wbGUgY29tbWFuZC4KK1N5c2NhbGxzIGFyZSBpbXBsZW1lbnRlZCBvbiBMaW51eCBmb3IgUzM5MCBieSB0aGUgU3VwZXJ2aXNvciBjYWxsIGluc3RydWN0aW9uCisoU1ZDKS4gVGhlcmUgMjU2IHBvc3NpYmlsaXRpZXMgb2YgdGhlc2UgYXMgdGhlIGluc3RydWN0aW9uIGlzIG1hZGUgdXAgb2YgYSAweEEKK29wY29kZSBhbmQgdGhlIHNlY29uZCBieXRlIGJlaW5nIHRoZSBzeXNjYWxsIG51bWJlci4gVGhleSBhcmUgdHJhY2VkIHVzaW5nIHRoZQorc2ltcGxlIGNvbW1hbmQ6CiBUUiBTVkMgIDxPcHRpb25hbCB2YWx1ZSBvciByYW5nZT4KIHRoZSBzeXNjYWxscyBhcmUgZGVmaW5lZCBpbiBsaW51eC9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdW5pc3RkLmgKIGUuZy4gdG8gdHJhY2UgYWxsIGZpbGUgb3BlbnMganVzdCBkbwpAQCAtMTA3MCwxMiArMTA3NCwxMiBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBUbyBmaW5kIG91dCBob3cgbWFueSBjcHVzIHlvdSBoYXZlCiBRIENQVVMgZGlzcGxheXMgYWxsIHRoZSBDUFUncyBhdmFpbGFibGUgdG8geW91ciB2aXJ0dWFsIG1hY2hpbmUKLVRvIGZpbmQgdGhlIGNwdSB0aGF0IHRoZSBjdXJyZW50IGNwdSBWTSBkZWJ1Z2dlciBjb21tYW5kcyBhcmUgYmVpbmcgZGlyZWN0ZWQgYXQgZG8KLVEgQ1BVIHRvIGNoYW5nZSB0aGUgY3VycmVudCBjcHUgVk0gZGVidWdnZXIgY29tbWFuZHMgYXJlIGJlaW5nIGRpcmVjdGVkIGF0IGRvCitUbyBmaW5kIHRoZSBjcHUgdGhhdCB0aGUgY3VycmVudCBjcHUgVk0gZGVidWdnZXIgY29tbWFuZHMgYXJlIGJlaW5nIGRpcmVjdGVkIGF0CitkbyBRIENQVSB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgY3B1IFZNIGRlYnVnZ2VyIGNvbW1hbmRzIGFyZSBiZWluZyBkaXJlY3RlZCBhdCBkbwogQ1BVIDxkZXNpcmVkIGNwdSBubz4KIAotT24gYSBTTVAgZ3Vlc3QgaXNzdWUgYSBjb21tYW5kIHRvIGFsbCBDUFVzIHRyeSBwcmVmaXhpbmcgdGhlIGNvbW1hbmQgd2l0aCBjcHUgYWxsLgotVG8gaXNzdWUgYSBjb21tYW5kIHRvIGEgcGFydGljdWxhciBjcHUgdHJ5IGNwdSA8Y3B1IG51bWJlcj4gZS5nLgorT24gYSBTTVAgZ3Vlc3QgaXNzdWUgYSBjb21tYW5kIHRvIGFsbCBDUFVzIHRyeSBwcmVmaXhpbmcgdGhlIGNvbW1hbmQgd2l0aCBjcHUKK2FsbC4gVG8gaXNzdWUgYSBjb21tYW5kIHRvIGEgcGFydGljdWxhciBjcHUgdHJ5IGNwdSA8Y3B1IG51bWJlcj4gZS5nLgogQ1BVIDAxIFRSIEkgUiAyMDAwLjMwMDAKIElmIHlvdSBhcmUgcnVubmluZyBvbiBhIGd1ZXN0IHdpdGggc2V2ZXJhbCBjcHVzICYgeW91IGhhdmUgYSBJTyByZWxhdGVkIHByb2JsZW0KICYgY2Fubm90IGZvbGxvdyB0aGUgZmxvdyBvZiBjb2RlIGJ1dCB5b3Uga25vdyBpdCBpc24ndCBzbXAgcmVsYXRlZC4KQEAgLTExMDEsMTAgKzExMDUsMTAgQEAKIAogQWx0ZXJuYXRpdmVseQogPT09PT09PT09PT09PQotVW5kZXIgb2xkZXIgVk0gZGVidWdnZXJzICggSSBsb3ZlIEVCRElDIHRvbyApIHlvdSBjYW4gdXNlIHRoaXMgbGl0dGxlIHByb2dyYW0gSSB3cm90ZSB3aGljaAotd2lsbCBjb252ZXJ0IGEgY29tbWFuZCBsaW5lIG9mIGhleCBkaWdpdHMgdG8gYXNjaWkgdGV4dCB3aGljaCBjYW4gYmUgY29tcGlsZWQgdW5kZXIgbGludXggJiAKLXlvdSBjYW4gY29weSB0aGUgaGV4IGRpZ2l0cyBmcm9tIHlvdXIgeDMyNzAgdGVybWluYWwgdG8geW91ciB4dGVybSBpZiB5b3UgYXJlIGRlYnVnZ2luZwotZnJvbSBhIGxpbnV4Ym94LgorVW5kZXIgb2xkZXIgVk0gZGVidWdnZXJzIChJIGxvdmUgRUJESUMgdG9vKSB5b3UgY2FuIHVzZSBmb2xsb3dpbmcgbGl0dGxlCitwcm9ncmFtIHdoaWNoIGNvbnZlcnRzIGEgY29tbWFuZCBsaW5lIG9mIGhleCBkaWdpdHMgdG8gYXNjaWkgdGV4dC4gSXQgY2FuIGJlCitjb21waWxlZCB1bmRlciBsaW51eCBhbmQgeW91IGNhbiBjb3B5IHRoZSBoZXggZGlnaXRzIGZyb20geW91ciB4MzI3MCB0ZXJtaW5hbAordG8geW91ciB4dGVybSBpZiB5b3UgYXJlIGRlYnVnZ2luZyBmcm9tIGEgbGludXhib3guCiAKIFRoaXMgaXMgcXVpdGUgdXNlZnVsIHdoZW4gbG9va2luZyBhdCBhIHBhcmFtZXRlciBwYXNzZWQgaW4gYXMgYSB0ZXh0IHN0cmluZwogdW5kZXIgVk0gKCB1bmxlc3MgeW91IGFyZSBnb29kIGF0IGRlY29kaW5nIEFTQ0lJIGluIHlvdXIgaGVhZCApLgpAQCAtMTExNCwxNCArMTExOCwxNCBAQAogV2UgaGF2ZSBzdG9wcGVkIGF0IGEgYnJlYWtwb2ludAogMDAwMTUxQjAnIFNWQyAgIDBBMDUgICAgIC0+IDAwMDE5MDlBJyAgIENDIDAKIAotRCAyMC44IHRvIGNoZWNrIHRoZSBTVkMgb2xkIHBzdyBpbiB0aGUgcHJlZml4IGFyZWEgJiBzZWUgd2FzIGl0IGZyb20gdXNlcnNwYWNlCi0oIGZvciB0aGUgbGF5b3V0IG9mIHRoZSBwcmVmaXggYXJlYSBjb25zdWx0IFAxOCBvZiB0aGUgcy8zOTAgMzkwIFJlZmVyZW5jZSBTdW1tYXJ5IAotaWYgeW91IGhhdmUgaXQgYXZhaWxhYmxlICkuCitEIDIwLjggdG8gY2hlY2sgdGhlIFNWQyBvbGQgcHN3IGluIHRoZSBwcmVmaXggYXJlYSBhbmQgc2VlIHdhcyBpdCBmcm9tIHVzZXJzcGFjZQorKGZvciB0aGUgbGF5b3V0IG9mIHRoZSBwcmVmaXggYXJlYSBjb25zdWx0IHRoZSAiRml4ZWQgU3RvcmFnZSBMb2NhdGlvbnMiCitjaGFwdGVyIG9mIHRoZSBzLzM5MCBSZWZlcmVuY2UgU3VtbWFyeSBpZiB5b3UgaGF2ZSBpdCBhdmFpbGFibGUpLgogVjAwMDAwMDIwICAwNzBDMjAwMCA4MDAxNTFCMgogVGhlIHByb2JsZW0gc3RhdGUgYml0IHdhc24ndCBzZXQgJiAgaXQncyBhbHNvIHRvbyBlYXJseSBpbiB0aGUgYm9vdCBzZXF1ZW5jZQogZm9yIGl0IHRvIGJlIGEgdXNlcnNwYWNlIFNWQyBpZiBpdCB3YXMgd2Ugd291bGQgaGF2ZSB0byB0ZW1wb3JhcmlseSBzd2l0Y2ggdGhlIAotcHN3IHRvIHVzZXIgc3BhY2UgYWRkcmVzc2luZyBzbyB3ZSBjb3VsZCBnZXQgYXQgdGhlIGZpcnN0IHBhcmFtZXRlciBvZiB0aGUgb3BlbiBpbgotZ3ByMi4KK3BzdyB0byB1c2VyIHNwYWNlIGFkZHJlc3Npbmcgc28gd2UgY291bGQgZ2V0IGF0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgdGhlIG9wZW4KK2luIGdwcjIuCiBOZXh0IGRvIGEgCiBEIEcyCiBHUFIgIDIgPSAgMDAwMTRDQjQKQEAgLTEyMDgsOSArMTIxMiw5IEBACiAKIFdoZW4geW91ciBiYWNrY2hhaW4gcmVhY2hlcyBhIGRlYWQgZW5kCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhpcyBjYW4gaGFwcGVuIHdoZW4gYW4gZXhjZXB0aW9uIGhhcHBlbnMgaW4gdGhlIGtlcm5lbCAmIHRoZSBrZXJuZWwgaXMgZW50ZXJlZCB0d2ljZQotaWYgeW91IHJlYWNoIHRoZSBOVUxMIHBvaW50ZXIgYXQgdGhlIGVuZCBvZiB0aGUgYmFjayBjaGFpbiB5b3Ugc2hvdWxkIGJlCi1hYmxlIHRvIHNuaWZmIGZ1cnRoZXIgYmFjayBpZiB5b3UgZm9sbG93IHRoZSBmb2xsb3dpbmcgdHJpY2tzLgorVGhpcyBjYW4gaGFwcGVuIHdoZW4gYW4gZXhjZXB0aW9uIGhhcHBlbnMgaW4gdGhlIGtlcm5lbCBhbmQgdGhlIGtlcm5lbCBpcworZW50ZXJlZCB0d2ljZS4gSWYgeW91IHJlYWNoIHRoZSBOVUxMIHBvaW50ZXIgYXQgdGhlIGVuZCBvZiB0aGUgYmFjayBjaGFpbiB5b3UKK3Nob3VsZCBiZSBhYmxlIHRvIHNuaWZmIGZ1cnRoZXIgYmFjayBpZiB5b3UgZm9sbG93IHRoZSBmb2xsb3dpbmcgdHJpY2tzLgogMSkgQSBrZXJuZWwgYWRkcmVzcyBzaG91bGQgYmUgZWFzeSB0byByZWNvZ25pc2Ugc2luY2UgaXQgaXMgaW4KIHByaW1hcnkgc3BhY2UgJiB0aGUgcHJvYmxlbSBzdGF0ZSBiaXQgaXNuJ3Qgc2V0ICYgYWxzbwogVGhlIEhpIGJpdCBvZiB0aGUgYWRkcmVzcyBpcyBzZXQuCkBAIC0xMjYwLDggKzEyNjQsOCBAQAogCiBvdXIgM3JkIHJldHVybiBhZGRyZXNzIGlzIDgwMDEwODVBCiAKLWFzIHRoZSAwNEI1MjAwMiBsb29rcyBzdXNwaWNpb3VzbHkgbGlrZSBydWJiaXNoIGl0IGlzIGZhaXIgdG8gYXNzdW1lIHRoYXQgdGhlIGtlcm5lbCBlbnRyeSByb3V0aW5lcwotZm9yIHRoZSBzYWtlIG9mIG9wdGltaXNhdGlvbiBkb24ndCBzZXQgdXAgYSBiYWNrY2hhaW4uCithcyB0aGUgMDRCNTIwMDIgbG9va3Mgc3VzcGljaW91c2x5IGxpa2UgcnViYmlzaCBpdCBpcyBmYWlyIHRvIGFzc3VtZSB0aGF0IHRoZQora2VybmVsIGVudHJ5IHJvdXRpbmVzIGZvciB0aGUgc2FrZSBvZiBvcHRpbWlzYXRpb24gZG9uJ3Qgc2V0IHVwIGEgYmFja2NoYWluLgogCiBub3cgbG9vayBhdCBTeXN0ZW0ubWFwIHRvIHNlZSBpZiB0aGUgYWRkcmVzc2VzIG1ha2UgYW55IHNlbnNlLgogCkBAIC0xMjg5LDY3ICsxMjkzLDc1IEBACiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIElPIE92ZXJ2aWV3CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLUkgYW0gbm90IGdvaW5nIHRvIGdpdmUgYSBjb3Vyc2UgaW4gMzkwIElPIGFyY2hpdGVjdHVyZSBhcyB0aGlzIHdvdWxkIHRha2UgbWUgcXVpdGUgYQotd2hpbGUgJiBJJ20gbm8gZXhwZXJ0LiBJbnN0ZWFkIEknbGwgZ2l2ZSBhIDM5MCBJTyBhcmNoaXRlY3R1cmUgc3VtbWFyeSBmb3IgRHVtbWllcyBpZiB5b3UgaGF2ZSAKLXRoZSBzLzM5MCBwcmluY2lwbGVzIG9mIG9wZXJhdGlvbiBhdmFpbGFibGUgcmVhZCB0aGlzIGluc3RlYWQuIElmIG5vdGhpbmcgZWxzZSB5b3UgbWF5IGZpbmQgYSBmZXcgCi11c2VmdWwga2V5d29yZHMgaW4gaGVyZSAmIGJlIGFibGUgdG8gdXNlIHRoZW0gb24gYSB3ZWIgc2VhcmNoIGVuZ2luZSBsaWtlIGFsdGF2aXN0YSB0byBmaW5kIAotbW9yZSB1c2VmdWwgaW5mb3JtYXRpb24uCitJIGFtIG5vdCBnb2luZyB0byBnaXZlIGEgY291cnNlIGluIDM5MCBJTyBhcmNoaXRlY3R1cmUgYXMgdGhpcyB3b3VsZCB0YWtlIG1lCitxdWl0ZSBhIHdoaWxlIGFuZCBJJ20gbm8gZXhwZXJ0LiBJbnN0ZWFkIEknbGwgZ2l2ZSBhIDM5MCBJTyBhcmNoaXRlY3R1cmUKK3N1bW1hcnkgZm9yIER1bW1pZXMuIElmIHlvdSBoYXZlIHRoZSBzLzM5MCBwcmluY2lwbGVzIG9mIG9wZXJhdGlvbiBhdmFpbGFibGUKK3JlYWQgdGhpcyBpbnN0ZWFkLiBJZiBub3RoaW5nIGVsc2UgeW91IG1heSBmaW5kIGEgZmV3IHVzZWZ1bCBrZXl3b3JkcyBpbiBoZXJlCithbmQgYmUgYWJsZSB0byB1c2UgdGhlbSBvbiBhIHdlYiBzZWFyY2ggZW5naW5lIHRvIGZpbmQgbW9yZSB1c2VmdWwgaW5mb3JtYXRpb24uCiAKIFVubGlrZSBvdGhlciBidXMgYXJjaGl0ZWN0dXJlcyBtb2Rlcm4gMzkwIHN5c3RlbXMgZG8gdGhlaXIgSU8gdXNpbmcgbW9zdGx5Ci1maWJyZSBvcHRpY3MgJiBkZXZpY2VzIHN1Y2ggYXMgdGFwZXMgJiBkaXNrcyBjYW4gYmUgc2hhcmVkIGJldHdlZW4gc2V2ZXJhbCBtYWluZnJhbWVzLAotYWxzbyBTMzkwIGNhbiBzdXBwb3J0IHVwIHRvIDY1NTM2IGRldmljZXMgd2hpbGUgYSBoaWdoIGVuZCBQQyBiYXNlZCBzeXN0ZW0gbWlnaHQgYmUgY2hva2luZwotd2l0aCBhcm91bmQgNjQuIEhlcmUgaXMgc29tZSBvZiB0aGUgY29tbW9uIElPIHRlcm1pbm9sb2d5CitmaWJyZSBvcHRpY3MgYW5kIGRldmljZXMgc3VjaCBhcyB0YXBlcyBhbmQgZGlza3MgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHNldmVyYWwKK21haW5mcmFtZXMuIEFsc28gUzM5MCBjYW4gc3VwcG9ydCB1cCB0byA2NTUzNiBkZXZpY2VzIHdoaWxlIGEgaGlnaCBlbmQgUEMgYmFzZWQKK3N5c3RlbSBtaWdodCBiZSBjaG9raW5nIHdpdGggYXJvdW5kIDY0LgorCitIZXJlIGlzIHNvbWUgb2YgdGhlIGNvbW1vbiBJTyB0ZXJtaW5vbG9neToKIAogU3ViY2hhbm5lbDoKLVRoaXMgaXMgdGhlIGxvZ2ljYWwgbnVtYmVyIG1vc3QgSU8gY29tbWFuZHMgdXNlIHRvIHRhbGsgdG8gYW4gSU8gZGV2aWNlIHRoZXJlIGNhbiBiZSB1cCB0bwotMHgxMDAwMCAoNjU1MzYpIG9mIHRoZXNlIGluIGEgY29uZmlndXJhdGlvbiB0eXBpY2FsbHkgdGhlcmUgaXMgYSBmZXcgaHVuZHJlZC4gVW5kZXIgVk0KLWZvciBzaW1wbGljaXR5IHRoZXkgYXJlIGFsbG9jYXRlZCBjb250aWd1b3VzbHksIGhvd2V2ZXIgb24gdGhlIG5hdGl2ZSBoYXJkd2FyZSB0aGV5IGFyZSBub3QKLXRoZXkgdHlwaWNhbGx5IHN0YXkgY29uc2lzdGVudCBiZXR3ZWVuIGJvb3RzIHByb3ZpZGVkIG5vIG5ldyBoYXJkd2FyZSBpcyBpbnNlcnRlZCBvciByZW1vdmVkLgotVW5kZXIgTGludXggZm9yIDM5MCB3ZSB1c2UgdGhlc2UgYXMgSVJRJ3MgJiBhbHNvIHdoZW4gaXNzdWluZyBhbiBJTyBjb21tYW5kIChDTEVBUiBTVUJDSEFOTkVMLAotSEFMVCBTVUJDSEFOTkVMLE1PRElGWSBTVUJDSEFOTkVMLFJFU1VNRSBTVUJDSEFOTkVMLFNUQVJUIFNVQkNIQU5ORUwsU1RPUkUgU1VCQ0hBTk5FTCAmIAotVEVTVCBTVUJDSEFOTkVMICkgd2UgdXNlIHRoaXMgYXMgdGhlIElEIG9mIHRoZSBkZXZpY2Ugd2Ugd2lzaCB0byB0YWxrIHRvLCB0aGUgbW9zdAotaW1wb3J0YW50IG9mIHRoZXNlIGluc3RydWN0aW9ucyBhcmUgU1RBUlQgU1VCQ0hBTk5FTCAoIHRvIHN0YXJ0IElPICksIFRFU1QgU1VCQ0hBTk5FTCAoIHRvIGNoZWNrCi13aGV0aGVyIHRoZSBJTyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICksICYgSEFMVCBTVUJDSEFOTkVMICggdG8ga2lsbCBJTyApLCBhIHN1YmNoYW5uZWwKLWNhbiBoYXZlIHVwIHRvIDggY2hhbm5lbCBwYXRocyB0byBhIGRldmljZSB0aGlzIG9mZmVycyByZWR1bmRhbmN5IGlmIG9uZSBpcyBub3QgYXZhaWxhYmxlLgotCitUaGlzIGlzIHRoZSBsb2dpY2FsIG51bWJlciBtb3N0IElPIGNvbW1hbmRzIHVzZSB0byB0YWxrIHRvIGFuIElPIGRldmljZS4gVGhlcmUKK2NhbiBiZSB1cCB0byAweDEwMDAwICg2NTUzNikgb2YgdGhlc2UgaW4gYSBjb25maWd1cmF0aW9uLCB0eXBpY2FsbHkgdGhlcmUgYXJlIGEKK2ZldyBodW5kcmVkLiBVbmRlciBWTSBmb3Igc2ltcGxpY2l0eSB0aGV5IGFyZSBhbGxvY2F0ZWQgY29udGlndW91c2x5LCBob3dldmVyCitvbiB0aGUgbmF0aXZlIGhhcmR3YXJlIHRoZXkgYXJlIG5vdC4gVGhleSB0eXBpY2FsbHkgc3RheSBjb25zaXN0ZW50IGJldHdlZW4KK2Jvb3RzIHByb3ZpZGVkIG5vIG5ldyBoYXJkd2FyZSBpcyBpbnNlcnRlZCBvciByZW1vdmVkLgorVW5kZXIgTGludXggZm9yIHMzOTAgd2UgdXNlIHRoZXNlIGFzIElSUSdzIGFuZCBhbHNvIHdoZW4gaXNzdWluZyBhbiBJTyBjb21tYW5kCisoQ0xFQVIgU1VCQ0hBTk5FTCwgSEFMVCBTVUJDSEFOTkVMLCBNT0RJRlkgU1VCQ0hBTk5FTCwgUkVTVU1FIFNVQkNIQU5ORUwsCitTVEFSVCBTVUJDSEFOTkVMLCBTVE9SRSBTVUJDSEFOTkVMIGFuZCBURVNUIFNVQkNIQU5ORUwpLiBXZSB1c2UgdGhpcyBhcyB0aGUgSUQKK29mIHRoZSBkZXZpY2Ugd2Ugd2lzaCB0byB0YWxrIHRvLiBUaGUgbW9zdCBpbXBvcnRhbnQgb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFyZQorU1RBUlQgU1VCQ0hBTk5FTCAodG8gc3RhcnQgSU8pLCBURVNUIFNVQkNIQU5ORUwgKHRvIGNoZWNrIHdoZXRoZXIgdGhlIElPCitjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5KSBhbmQgSEFMVCBTVUJDSEFOTkVMICh0byBraWxsIElPKS4gQSBzdWJjaGFubmVsIGNhbiBoYXZlCit1cCB0byA4IGNoYW5uZWwgcGF0aHMgdG8gYSBkZXZpY2UsIHRoaXMgb2ZmZXJzIHJlZHVuZGFuY3kgaWYgb25lIGlzIG5vdAorYXZhaWxhYmxlLgogCiBEZXZpY2UgTnVtYmVyOgotVGhpcyBudW1iZXIgcmVtYWlucyBzdGF0aWMgJiBJcyBjbG9zZWx5IHRpZWQgdG8gdGhlIGhhcmR3YXJlLCB0aGVyZSBhcmUgNjU1MzYgb2YgdGhlc2UKLWFsc28gdGhleSBhcmUgbWFkZSB1cCBvZiBhIENIUElEICggQ2hhbm5lbCBQYXRoIElELCB0aGUgbW9zdCBzaWduaWZpY2FudCA4IGJpdHMgKSAKLSYgYW5vdGhlciBsc2IgOCBiaXRzLiBUaGVzZSByZW1haW4gc3RhdGljIGV2ZW4gaWYgbW9yZSBkZXZpY2VzIGFyZSBpbnNlcnRlZCBvciByZW1vdmVkCi1mcm9tIHRoZSBoYXJkd2FyZSwgdGhlcmUgaXMgYSAxIHRvIDEgbWFwcGluZyBiZXR3ZWVuIFN1YmNoYW5uZWxzICYgRGV2aWNlIE51bWJlcnMgcHJvdmlkZWQKLWRldmljZXMgYXJlbid0IGluc2VydGVkIG9yIHJlbW92ZWQuCitUaGlzIG51bWJlciByZW1haW5zIHN0YXRpYyBhbmQgaXMgY2xvc2VseSB0aWVkIHRvIHRoZSBoYXJkd2FyZS4gVGhlcmUgYXJlIDY1NTM2CitvZiB0aGVzZSwgbWFkZSB1cCBvZiBhIENIUElEIChDaGFubmVsIFBhdGggSUQsIHRoZSBtb3N0IHNpZ25pZmljYW50IDggYml0cykgYW5kCithbm90aGVyIGxzYiA4IGJpdHMuIFRoZXNlIHJlbWFpbiBzdGF0aWMgZXZlbiBpZiBtb3JlIGRldmljZXMgYXJlIGluc2VydGVkIG9yCityZW1vdmVkIGZyb20gdGhlIGhhcmR3YXJlLiBUaGVyZSBpcyBhIDEgdG8gMSBtYXBwaW5nIGJldHdlZW4gc3ViY2hhbm5lbHMgYW5kCitkZXZpY2UgbnVtYmVycywgcHJvdmlkZWQgZGV2aWNlcyBhcmVuJ3QgaW5zZXJ0ZWQgb3IgcmVtb3ZlZC4KIAogQ2hhbm5lbCBDb250cm9sIFdvcmRzOgotQ0NXUyBhcmUgbGlua2VkIGxpc3RzIG9mIGluc3RydWN0aW9ucyBpbml0aWFsbHkgcG9pbnRlZCB0byBieSBhbiBvcGVyYXRpb24gcmVxdWVzdCBibG9jayAoT1JCKSwKLXdoaWNoIGlzIGluaXRpYWxseSBnaXZlbiB0byBTdGFydCBTdWJjaGFubmVsIChTU0NIKSBjb21tYW5kIGFsb25nIHdpdGggdGhlIHN1YmNoYW5uZWwgbnVtYmVyCi1mb3IgdGhlIElPIHN1YnN5c3RlbSB0byBwcm9jZXNzIHdoaWxlIHRoZSBDUFUgY29udGludWVzIGV4ZWN1dGluZyBub3JtYWwgY29kZS4KLVRoZXNlIGNvbWUgaW4gdHdvIGZsYXZvdXJzLCBGb3JtYXQgMCAoIDI0IGJpdCBmb3IgYmFja3dhcmQgKQotY29tcGF0aWJpbGl0eSAmIEZvcm1hdCAxICggMzEgYml0ICkuIFRoZXNlIGFyZSB0eXBpY2FsbHkgdXNlZCB0byBpc3N1ZSByZWFkICYgd3JpdGUgCi0oICYgbWFueSBvdGhlciBpbnN0cnVjdGlvbnMgKSB0aGV5IGNvbnNpc3Qgb2YgYSBsZW5ndGggZmllbGQgJiBhbiBhYnNvbHV0ZSBhZGRyZXNzIGZpZWxkLgotRm9yIGVhY2ggSU8gdHlwaWNhbGx5IGdldCAxIG9yIDIgaW50ZXJydXB0cyBvbmUgZm9yIGNoYW5uZWwgZW5kICggcHJpbWFyeSBzdGF0dXMgKSB3aGVuIHRoZQotY2hhbm5lbCBpcyBpZGxlICYgdGhlIHNlY29uZCBmb3IgZGV2aWNlIGVuZCAoIHNlY29uZGFyeSBzdGF0dXMgKSBzb21ldGltZXMgeW91IGdldCBib3RoCi1jb25jdXJyZW50bHksIHlvdSBjaGVjayBob3cgdGhlIElPIHdlbnQgb24gYnkgaXNzdWluZyBhIFRFU1QgU1VCQ0hBTk5FTCBhdCBlYWNoIGludGVycnVwdCwKLWZyb20gd2hpY2ggeW91IHJlY2VpdmUgYW4gSW50ZXJydXB0aW9uIHJlc3BvbnNlIGJsb2NrIChJUkIpLiBJZiB5b3UgZ2V0IGNoYW5uZWwgJiBkZXZpY2UgZW5kIAotc3RhdHVzIGluIHRoZSBJUkIgd2l0aG91dCBjaGFubmVsIGNoZWNrcyBldGMuIHlvdXIgSU8gcHJvYmFibHkgd2VudCBva2F5LiBJZiB5b3UgZGlkbid0IHlvdQotcHJvYmFibHkgbmVlZCBhIGRvY3RvciB0byBleGFtaW5lIHRoZSBJUkIgJiBleHRlbmRlZCBzdGF0dXMgd29yZCBldGMuCitDQ1dzIGFyZSBsaW5rZWQgbGlzdHMgb2YgaW5zdHJ1Y3Rpb25zIGluaXRpYWxseSBwb2ludGVkIHRvIGJ5IGFuIG9wZXJhdGlvbgorcmVxdWVzdCBibG9jayAoT1JCKSwgd2hpY2ggaXMgaW5pdGlhbGx5IGdpdmVuIHRvIFN0YXJ0IFN1YmNoYW5uZWwgKFNTQ0gpCitjb21tYW5kIGFsb25nIHdpdGggdGhlIHN1YmNoYW5uZWwgbnVtYmVyIGZvciB0aGUgSU8gc3Vic3lzdGVtIHRvIHByb2Nlc3MKK3doaWxlIHRoZSBDUFUgY29udGludWVzIGV4ZWN1dGluZyBub3JtYWwgY29kZS4KK0NDV3MgY29tZSBpbiB0d28gZmxhdm91cnMsIEZvcm1hdCAwICgyNCBiaXQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIGFuZAorRm9ybWF0IDEgKDMxIGJpdCkuIFRoZXNlIGFyZSB0eXBpY2FsbHkgdXNlZCB0byBpc3N1ZSByZWFkIGFuZCB3cml0ZSAoYW5kIG1hbnkKK290aGVyKSBpbnN0cnVjdGlvbnMuIFRoZXkgY29uc2lzdCBvZiBhIGxlbmd0aCBmaWVsZCBhbmQgYW4gYWJzb2x1dGUgYWRkcmVzcworZmllbGQuCitFYWNoIElPIHR5cGljYWxseSBnZXRzIDEgb3IgMiBpbnRlcnJ1cHRzLCBvbmUgZm9yIGNoYW5uZWwgZW5kIChwcmltYXJ5IHN0YXR1cykKK3doZW4gdGhlIGNoYW5uZWwgaXMgaWRsZSwgYW5kIHRoZSBzZWNvbmQgZm9yIGRldmljZSBlbmQgKHNlY29uZGFyeSBzdGF0dXMpLgorU29tZXRpbWVzIHlvdSBnZXQgYm90aCBjb25jdXJyZW50bHkuIFlvdSBjaGVjayBob3cgdGhlIElPIHdlbnQgb24gYnkgaXNzdWluZyBhCitURVNUIFNVQkNIQU5ORUwgYXQgZWFjaCBpbnRlcnJ1cHQsIGZyb20gd2hpY2ggeW91IHJlY2VpdmUgYW4gSW50ZXJydXB0aW9uCityZXNwb25zZSBibG9jayAoSVJCKS4gSWYgeW91IGdldCBjaGFubmVsIGFuZCBkZXZpY2UgZW5kIHN0YXR1cyBpbiB0aGUgSVJCCit3aXRob3V0IGNoYW5uZWwgY2hlY2tzIGV0Yy4geW91ciBJTyBwcm9iYWJseSB3ZW50IG9rYXkuIElmIHlvdSBkaWRuJ3QgeW91Citwcm9iYWJseSBuZWVkIHRvIGV4YW1pbmUgdGhlIElSQiwgZXh0ZW5kZWQgc3RhdHVzIHdvcmQgZXRjLgogSWYgYW4gZXJyb3Igb2NjdXJzLCBtb3JlIHNvcGhpc3RpY2F0ZWQgY29udHJvbCB1bml0cyBoYXZlIGEgZmFjaWxpdHkga25vd24gYXMKLWNvbmN1cnJlbnQgc2Vuc2UgdGhpcyBtZWFucyB0aGF0IGlmIGFuIGVycm9yIG9jY3VycyBFeHRlbmRlZCBzZW5zZSBpbmZvcm1hdGlvbiB3aWxsCi1iZSBwcmVzZW50ZWQgaW4gdGhlIEV4dGVuZGVkIHN0YXR1cyB3b3JkIGluIHRoZSBJUkIgaWYgbm90IHlvdSBoYXZlIHRvIGlzc3VlIGEKLXN1YnNlcXVlbnQgU0VOU0UgQ0NXIGNvbW1hbmQgYWZ0ZXIgdGhlIHRlc3Qgc3ViY2hhbm5lbC4gCitjb25jdXJyZW50IHNlbnNlLiBUaGlzIG1lYW5zIHRoYXQgaWYgYW4gZXJyb3Igb2NjdXJzIEV4dGVuZGVkIHNlbnNlIGluZm9ybWF0aW9uCit3aWxsIGJlIHByZXNlbnRlZCBpbiB0aGUgRXh0ZW5kZWQgc3RhdHVzIHdvcmQgaW4gdGhlIElSQi4gSWYgbm90IHlvdSBoYXZlIHRvCitpc3N1ZSBhIHN1YnNlcXVlbnQgU0VOU0UgQ0NXIGNvbW1hbmQgYWZ0ZXIgdGhlIHRlc3Qgc3ViY2hhbm5lbC4KIAogCi1UUEkoIFRlc3QgcGVuZGluZyBpbnRlcnJ1cHQpIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHBvbGxlZCBJTyBidXQgaW4gbXVsdGl0YXNraW5nIG11bHRpcHJvY2Vzc29yCi1zeXN0ZW1zIGl0IGlzbid0IHJlY29tbWVuZGVkIGV4Y2VwdCBmb3IgY2hlY2tpbmcgc3BlY2lhbCBjYXNlcyAoIGkuZS4gbm9uIGxvb3BpbmcgY2hlY2tzIGZvcgotcGVuZGluZyBJTyBldGMuICkuCitUUEkgKFRlc3QgcGVuZGluZyBpbnRlcnJ1cHQpIGNhbiBhbHNvIGJlIHVzZWQgZm9yIHBvbGxlZCBJTywgYnV0IGluCittdWx0aXRhc2tpbmcgbXVsdGlwcm9jZXNzb3Igc3lzdGVtcyBpdCBpc24ndCByZWNvbW1lbmRlZCBleGNlcHQgZm9yCitjaGVja2luZyBzcGVjaWFsIGNhc2VzIChpLmUuIG5vbiBsb29waW5nIGNoZWNrcyBmb3IgcGVuZGluZyBJTyBldGMuKS4KIAotU3RvcmUgU3ViY2hhbm5lbCAmIE1vZGlmeSBTdWJjaGFubmVsIGNhbiBiZSB1c2VkIHRvIGV4YW1pbmUgJiBtb2RpZnkgb3BlcmF0aW5nIGNoYXJhY3RlcmlzdGljcwotb2YgYSBzdWJjaGFubmVsICggZS5nLiBjaGFubmVsIHBhdGhzICkuCitTdG9yZSBTdWJjaGFubmVsIGFuZCBNb2RpZnkgU3ViY2hhbm5lbCBjYW4gYmUgdXNlZCB0byBleGFtaW5lIGFuZCBtb2RpZnkKK29wZXJhdGluZyBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBzdWJjaGFubmVsIChlLmcuIGNoYW5uZWwgcGF0aHMpLgogCiBPdGhlciBJTyByZWxhdGVkIFRlcm1zOgogU3lzcGxleDogUzM5MCdzIENsdXN0ZXJpbmcgVGVjaG5vbG9neQotUURJTzogUzM5MCdzIG5ldyBoaWdoIHNwZWVkIElPIGFyY2hpdGVjdHVyZSB0byBzdXBwb3J0IGRldmljZXMgc3VjaCBhcyBnaWdhYml0IGV0aGVybmV0LAotdGhpcyBhcmNoaXRlY3R1cmUgaXMgYWxzbyBkZXNpZ25lZCB0byBiZSBmb3J3YXJkIGNvbXBhdGlibGUgd2l0aCB1cCAmIGNvbWluZyA2NCBiaXQgbWFjaGluZXMuCitRRElPOiBTMzkwJ3MgbmV3IGhpZ2ggc3BlZWQgSU8gYXJjaGl0ZWN0dXJlIHRvIHN1cHBvcnQgZGV2aWNlcyBzdWNoIGFzIGdpZ2FiaXQKK2V0aGVybmV0LCB0aGlzIGFyY2hpdGVjdHVyZSBpcyBhbHNvIGRlc2lnbmVkIHRvIGJlIGZvcndhcmQgY29tcGF0aWJsZSB3aXRoCit1cGNvbWluZyA2NCBiaXQgbWFjaGluZXMuCiAKIAogR2VuZXJhbCBDb25jZXB0cyAKQEAgLTE0MDYsMzcgKzE0MTgsNDAgQEAKIEludGVyZmFjZSAoT0VNSSkuCiAKIFRoaXMgYnl0ZSB3aWRlIFBhcmFsbGVsIGNoYW5uZWwgcGF0aC9idXMgaGFzIHBhcml0eSAmIGRhdGEgb24gdGhlICJCdXMiIGNhYmxlIAotJiBjb250cm9sIGxpbmVzIG9uIHRoZSAiVGFnIiBjYWJsZS4gVGhlc2UgY2FuIG9wZXJhdGUgaW4gYnl0ZSBtdWx0aXBsZXggbW9kZSBmb3IKLXNoYXJpbmcgYmV0d2VlbiBzZXZlcmFsIHNsb3cgZGV2aWNlcyBvciBidXJzdCBtb2RlICYgbW9ub3BvbGl6ZSB0aGUgY2hhbm5lbCBmb3IgdGhlCi13aG9sZSBidXJzdC4gVXAgdG8gMjU2IGRldmljZXMgY2FuIGJlIGFkZHJlc3NlZCAgb24gb25lIG9mIHRoZXNlIGNhYmxlcy4gVGhlc2UgY2FibGVzIGFyZQotYWJvdXQgb25lIGluY2ggaW4gZGlhbWV0ZXIuIFRoZSBtYXhpbXVtIHVuZXh0ZW5kZWQgbGVuZ3RoIHN1cHBvcnRlZCBieSB0aGVzZSBjYWJsZXMgaXMKLTEyNSBNZXRlcnMgYnV0IHRoaXMgY2FuIGJlIGV4dGVuZGVkIHVwIHRvIDJrbSB3aXRoIGEgZmlicmUgb3B0aWMgY2hhbm5lbCBleHRlbmRlZCAKLXN1Y2ggYXMgYSAzMDQ0LiBUaGUgbWF4aW11bSBidXJzdCBzcGVlZCBzdXBwb3J0ZWQgaXMgNC41IG1lZ2FieXRlcyBwZXIgc2Vjb25kIGhvd2V2ZXIKLXNvbWUgcmVhbGx5IG9sZCBwcm9jZXNzb3JzIHN1cHBvcnQgb25seSB0cmFuc2ZlciByYXRlcyBvZiAzLjAsIDIuMCAmIDEuMCBNQi9zZWMuCithbmQgY29udHJvbCBsaW5lcyBvbiB0aGUgIlRhZyIgY2FibGUuIFRoZXNlIGNhbiBvcGVyYXRlIGluIGJ5dGUgbXVsdGlwbGV4IG1vZGUKK2ZvciBzaGFyaW5nIGJldHdlZW4gc2V2ZXJhbCBzbG93IGRldmljZXMgb3IgYnVyc3QgbW9kZSBhbmQgbW9ub3BvbGl6ZSB0aGUKK2NoYW5uZWwgZm9yIHRoZSB3aG9sZSBidXJzdC4gVXAgdG8gMjU2IGRldmljZXMgY2FuIGJlIGFkZHJlc3NlZCBvbiBvbmUgb2YgdGhlc2UKK2NhYmxlcy4gVGhlc2UgY2FibGVzIGFyZSBhYm91dCBvbmUgaW5jaCBpbiBkaWFtZXRlci4gVGhlIG1heGltdW0gdW5leHRlbmRlZAorbGVuZ3RoIHN1cHBvcnRlZCBieSB0aGVzZSBjYWJsZXMgaXMgMTI1IE1ldGVycyBidXQgdGhpcyBjYW4gYmUgZXh0ZW5kZWQgdXAgdG8KKzJrbSB3aXRoIGEgZmlicmUgb3B0aWMgY2hhbm5lbCBleHRlbmRlZCBzdWNoIGFzIGEgMzA0NC4gVGhlIG1heGltdW0gYnVyc3Qgc3BlZWQKK3N1cHBvcnRlZCBpcyA0LjUgbWVnYWJ5dGVzIHBlciBzZWNvbmQuIEhvd2V2ZXIsIHNvbWUgcmVhbGx5IG9sZCBwcm9jZXNzb3JzCitzdXBwb3J0IG9ubHkgdHJhbnNmZXIgcmF0ZXMgb2YgMy4wLCAyLjAgJiAxLjAgTUIvc2VjLgogT25lIG9mIHRoZXNlIHBhdGhzIGNhbiBiZSBkYWlzeSBjaGFpbmVkIHRvIHVwIHRvIDggY29udHJvbCB1bml0cy4KIAogCiBFU0NPTiBpZiBmaWJyZSBvcHRpYyBpdCBpcyBhbHNvIGNhbGxlZCBGSUNPTiAKLVdhcyBpbnRyb2R1Y2VkIGJ5IElCTSBpbiAxOTkwLiBIYXMgMiBmaWJyZSBvcHRpYyBjYWJsZXMgJiB1c2VzIGVpdGhlciBsZWRzIG9yIGxhc2VycwotZm9yIGNvbW11bmljYXRpb24gYXQgYSBzaWduYWxpbmcgcmF0ZSBvZiB1cCB0byAyMDAgbWVnYWJpdHMvc2VjLiBBcyAxMGJpdHMgYXJlIHRyYW5zZmVycmVkCi1mb3IgZXZlcnkgOCBiaXRzIGluZm8gdGhpcyBkcm9wcyB0byAxNjAgbWVnYWJpdHMvc2VjICYgdG8gMTguNiBNZWdhYnl0ZXMvc2VjIG9uY2UKLWNvbnRyb2wgaW5mbyAmIENSQyBhcmUgYWRkZWQuIEVTQ09OIG9ubHkgb3BlcmF0ZXMgaW4gYnVyc3QgbW9kZS4KK1dhcyBpbnRyb2R1Y2VkIGJ5IElCTSBpbiAxOTkwLiBIYXMgMiBmaWJyZSBvcHRpYyBjYWJsZXMgYW5kIHVzZXMgZWl0aGVyIGxlZHMgb3IKK2xhc2VycyBmb3IgY29tbXVuaWNhdGlvbiBhdCBhIHNpZ25hbGluZyByYXRlIG9mIHVwIHRvIDIwMCBtZWdhYml0cy9zZWMuIEFzCisxMGJpdHMgYXJlIHRyYW5zZmVycmVkIGZvciBldmVyeSA4IGJpdHMgaW5mbyB0aGlzIGRyb3BzIHRvIDE2MCBtZWdhYml0cy9zZWMKK2FuZCB0byAxOC42IE1lZ2FieXRlcy9zZWMgb25jZSBjb250cm9sIGluZm8gYW5kIENSQyBhcmUgYWRkZWQuIEVTQ09OIG9ubHkKK29wZXJhdGVzIGluIGJ1cnN0IG1vZGUuCiAgCi1FU0NPTnMgdHlwaWNhbCBtYXggY2FibGUgbGVuZ3RoIGlzIDNrbSBmb3IgdGhlIGxlZCB2ZXJzaW9uICYgMjBrbSBmb3IgdGhlIGxhc2VyIHZlcnNpb24KLWtub3duIGFzIFhERiAoIGV4dGVuZGVkIGRpc3RhbmNlIGZhY2lsaXR5ICkuIFRoaXMgY2FuIGJlIGZ1cnRoZXIgZXh0ZW5kZWQgYnkgdXNpbmcgYW4KLUVTQ09OIGRpcmVjdG9yIHdoaWNoIHRyaXBsZXMgdGhlIGFib3ZlIG1lbnRpb25lZCByYW5nZXMuIFVubGlrZSBCdXMgJiBUYWcgYXMgRVNDT04gaXMKLXNlcmlhbCBpdCB1c2VzIGEgcGFja2V0IHN3aXRjaGluZyBhcmNoaXRlY3R1cmUgdGhlIHN0YW5kYXJkIEJ1cyAmIFRhZyBjb250cm9sIHByb3RvY29sCi1pcyBob3dldmVyIHByZXNlbnQgd2l0aGluIHRoZSBwYWNrZXRzLiBVcCB0byAyNTYgZGV2aWNlcyBjYW4gYmUgYXR0YWNoZWQgdG8gZWFjaCBjb250cm9sCi11bml0IHRoYXQgdXNlcyBvbmUgb2YgdGhlc2UgaW50ZXJmYWNlcy4KK0VTQ09OcyB0eXBpY2FsIG1heCBjYWJsZSBsZW5ndGggaXMgM2ttIGZvciB0aGUgbGVkIHZlcnNpb24gYW5kIDIwa20gZm9yIHRoZQorbGFzZXIgdmVyc2lvbiBrbm93biBhcyBYREYgKGV4dGVuZGVkIGRpc3RhbmNlIGZhY2lsaXR5KS4gVGhpcyBjYW4gYmUgZnVydGhlcgorZXh0ZW5kZWQgYnkgdXNpbmcgYW4gRVNDT04gZGlyZWN0b3Igd2hpY2ggdHJpcGxlcyB0aGUgYWJvdmUgbWVudGlvbmVkIHJhbmdlcy4KK1VubGlrZSBCdXMgJiBUYWcgYXMgRVNDT04gaXMgc2VyaWFsIGl0IHVzZXMgYSBwYWNrZXQgc3dpdGNoaW5nIGFyY2hpdGVjdHVyZSwKK3RoZSBzdGFuZGFyZCBCdXMgJiBUYWcgY29udHJvbCBwcm90b2NvbCBpcyBob3dldmVyIHByZXNlbnQgd2l0aGluIHRoZSBwYWNrZXRzLgorVXAgdG8gMjU2IGRldmljZXMgY2FuIGJlIGF0dGFjaGVkIHRvIGVhY2ggY29udHJvbCB1bml0IHRoYXQgdXNlcyBvbmUgb2YgdGhlc2UKK2ludGVyZmFjZXMuCiAKIENvbW1vbiAzOTAgRGV2aWNlcyBpbmNsdWRlOgogTmV0d29yayBhZGFwdGVycyB0eXBpY2FsbHkgT1NBMiwzMTcyJ3MsMjExNidzICYgT1NBLUUgZ2lnYWJpdCBldGhlcm5ldCBhZGFwdGVycywKLUNvbnNvbGVzIDMyNzAgJiAzMjE1ICggYSB0ZWxldHlwZSBlbXVsYXRlZCB1bmRlciBsaW51eCBmb3IgYSBsaW5lIG1vZGUgY29uc29sZSApLgorQ29uc29sZXMgMzI3MCAmIDMyMTUgKGEgdGVsZXR5cGUgZW11bGF0ZWQgdW5kZXIgbGludXggZm9yIGEgbGluZSBtb2RlIGNvbnNvbGUpLgogREFTRCdzIGRpcmVjdCBhY2Nlc3Mgc3RvcmFnZSBkZXZpY2VzICggb3RoZXJ3aXNlIGtub3duIGFzIGhhcmQgZGlza3MgKS4KIFRhcGUgRHJpdmVzLgogQ1RDICggQ2hhbm5lbCB0byBDaGFubmVsIEFkYXB0ZXJzICksCiBFU0NPTiBvciBQYXJhbGxlbCBDYWJsZXMgdXNlZCBhcyBhIHZlcnkgaGlnaCBzcGVlZCBzZXJpYWwgbGluawotYmV0d2VlbiAyIG1hY2hpbmVzLiBXZSB1c2UgMiBjYWJsZXMgdW5kZXIgbGludXggdG8gZG8gYSBiaS1kaXJlY3Rpb25hbCBzZXJpYWwgbGluay4KK2JldHdlZW4gMiBtYWNoaW5lcy4KIAogCiBEZWJ1Z2dpbmcgSU8gb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSB1bmRlciBWTQpAQCAtMTQ3NSw5ICsxNDkwLDkgQEAKIG9yIFRSIEhTQ0ggN0MwOC03QzA5CiBNU0NIJ3MgLFNUU0NIJ3MgSSB0aGluayB5b3UgY2FuIGd1ZXNzIHRoZSByZXN0CiAKLUluZ28ncyBmYXZvdXJpdGUgdHJpY2sgaXMgdHJhY2luZyBhbGwgdGhlIElPJ3MgJiBDQ1dTICYgc3Bvb2xpbmcgdGhlbSBpbnRvIHRoZSByZWFkZXIgb2YgYW5vdGhlcgotVk0gZ3Vlc3Qgc28gaGUgY2FuIGZ0cCB0aGUgbG9nZmlsZSBiYWNrIHRvIGhpcyBvd24gbWFjaGluZS5JJ2xsIGRvIGEgc21hbGwgYml0IG9mIHRoaXMgJiBnaXZlIHlvdQotIGEgbG9vayBhdCB0aGUgb3V0cHV0LgorQSBnb29kIHRyaWNrIGlzIHRyYWNpbmcgYWxsIHRoZSBJTydzIGFuZCBDQ1dTIGFuZCBzcG9vbGluZyB0aGVtIGludG8gdGhlIHJlYWRlcgorb2YgYW5vdGhlciBWTSBndWVzdCBzbyBoZSBjYW4gZnRwIHRoZSBsb2dmaWxlIGJhY2sgdG8gaGlzIG93biBtYWNoaW5lLiBJJ2xsIGRvCithIHNtYWxsIGJpdCBvZiB0aGlzIGFuZCBnaXZlIHlvdSBhIGxvb2sgYXQgdGhlIG91dHB1dC4KIAogMSkgU3Bvb2wgc3Rkb3V0IHRvIFZNIHJlYWRlcgogU1AgUFJUIFRPIChhbm90aGVyIHZtIGd1ZXN0ICkgb3IgKiBmb3IgdGhlIGxvY2FsIHZtIGd1ZXN0CkBAIC0xNTkzLDggKzE2MDgsOCBAQAogCiBpbmZvIGJyZWFrcG9pbnRzOiBzaG93cyBhbGwgY3VycmVudCBicmVha3BvaW50cwogCi1pbmZvIHN0YWNrOiBzaG93cyBzdGFjayBiYWNrIHRyYWNlICggaWYgdGhpcyBkb2Vzbid0IHdvcmsgdG9vIHdlbGwsIEknbGwgc2hvdyB5b3UgdGhlCi1zdGFja3RyYWNlIGJ5IGhhbmQgYmVsb3cgKS4KK2luZm8gc3RhY2s6IHNob3dzIHN0YWNrIGJhY2sgdHJhY2UgKGlmIHRoaXMgZG9lc24ndCB3b3JrIHRvbyB3ZWxsLCBJJ2xsIHNob3cKK3lvdSB0aGUgc3RhY2t0cmFjZSBieSBoYW5kIGJlbG93KS4KIAogaW5mbyBsb2NhbHM6IGRpc3BsYXlzIGxvY2FsIHZhcmlhYmxlcy4KIApAQCAtMTYxOSw3ICsxNjM0LDggQEAKIHN0ZXBpOiBzdGVwcyBhIHNpbmdsZSBtYWNoaW5lIGNvZGUgaW5zdHJ1Y3Rpb24uCiBlLmcuIHN0ZXBpIDEwMAogCi1uZXh0aTogc3RlcHMgYSBzaW5nbGUgbWFjaGluZSBjb2RlIGluc3RydWN0aW9uIGJ1dCB3aWxsIG5vdCBzdGVwIGludG8gc3Vicm91dGluZXMuCituZXh0aTogc3RlcHMgYSBzaW5nbGUgbWFjaGluZSBjb2RlIGluc3RydWN0aW9uIGJ1dCB3aWxsIG5vdCBzdGVwIGludG8KK3N1YnJvdXRpbmVzLgogCiBmaW5pc2g6IHdpbGwgcnVuIHVudGlsIGV4aXQgb2YgdGhlIGN1cnJlbnQgcm91dGluZQogCkBAIC0xNzIxLDcgKzE3MzcsOCBAQAogb3V0cHV0czoKICQxID0gMTEgCiAKLVlvdSBtaWdodCBub3cgYmUgdGhpbmtpbmcgdGhhdCB0aGUgbGluZSBhYm92ZSBkaWRuJ3Qgd29yaywgc29tZXRoaW5nIGV4dHJhIGhhZCB0byBiZSBkb25lLgorWW91IG1pZ2h0IG5vdyBiZSB0aGlua2luZyB0aGF0IHRoZSBsaW5lIGFib3ZlIGRpZG4ndCB3b3JrLCBzb21ldGhpbmcgZXh0cmEgaGFkCit0byBiZSBkb25lLgogKGdkYikgY2FsbCBmZmx1c2goc3Rkb3V0KQogaGVsbG8gd29ybGQkMiA9IDAKIEFzIGFuIGFzaWRlIHRoZSBkZWJ1Z2dlciBhbHNvIGNhbGxzIG1hbGxvYyAmIGZyZWUgdW5kZXIgdGhlIGhvb2QgCkBAIC0xODA0LDI2ICsxODIxLDE3IEBACiBjb3JlIGR1bXBzCiAtLS0tLS0tLS0tCiBXaGF0IGEgY29yZSBkdW1wID8sCi1BIGNvcmUgZHVtcCBpcyBhIGZpbGUgZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwgKCBpZiBhbGxvd2VkICkgd2hpY2ggY29udGFpbnMgdGhlIHJlZ2lzdGVycywKLSYgYWxsIGFjdGl2ZSBwYWdlcyBvZiB0aGUgcHJvZ3JhbSB3aGljaCBoYXMgY3Jhc2hlZC4KLUZyb20gdGhpcyBmaWxlIGdkYiB3aWxsIGFsbG93IHlvdSB0byBsb29rIGF0IHRoZSByZWdpc3RlcnMgJiBzdGFjayB0cmFjZSAmIG1lbW9yeSBvZiB0aGUKLXByb2dyYW0gYXMgaWYgaXQganVzdCBjcmFzaGVkIG9uIHlvdXIgc3lzdGVtLCBpdCBpcyB1c3VhbGx5IGNhbGxlZCBjb3JlICYgY3JlYXRlZCBpbiB0aGUKLWN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCi1UaGlzIGlzIHZlcnkgdXNlZnVsIGluIHRoYXQgYSBjdXN0b21lciBjYW4gbWFpbCBhIGNvcmUgZHVtcCB0byBhIHRlY2huaWNhbCBzdXBwb3J0IGRlcGFydG1lbnQKLSYgdGhlIHRlY2huaWNhbCBzdXBwb3J0IGRlcGFydG1lbnQgY2FuIHJlY29uc3RydWN0IHdoYXQgaGFwcGVuZWQuCi1Qcm92aWRlZCB0aGV5IGhhdmUgYW4gaWRlbnRpY2FsIGNvcHkgb2YgdGhpcyBwcm9ncmFtIHdpdGggZGVidWdnaW5nIHN5bWJvbHMgY29tcGlsZWQgaW4gJgotdGhlIHNvdXJjZSBiYXNlIG9mIHRoaXMgYnVpbGQgaXMgYXZhaWxhYmxlLgotSW4gc2hvcnQgaXQgaXMgZmFyIG1vcmUgdXNlZnVsIHRoYW4gc29tZXRoaW5nIGxpa2UgYSBjcmFzaCBsb2cgY291bGQgZXZlciBob3BlIHRvIGJlLgotCi1JbiB0aGVvcnkgYWxsIHRoYXQgaXMgbWlzc2luZyB0byByZXN0YXJ0IGEgY29yZSBkdW1wZWQgcHJvZ3JhbSBpcyBhIGtlcm5lbCBwYXRjaCB3aGljaAotd2lsbCBkbyB0aGUgZm9sbG93aW5nLgotMSkgTWFrZSBhIG5ldyBrZXJuZWwgdGFzayBzdHJ1Y3R1cmUKLTIpIFJlbG9hZCBhbGwgdGhlIGR1bXBlZCBwYWdlcyBiYWNrIGludG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuCi0zKSBEbyB0aGUgcmVxdWlyZWQgY2xvY2sgZml4dXBzCi00KSBHZXQgYWxsIGZpbGVzICYgbmV0d29yayBjb25uZWN0aW9ucyBmb3IgdGhlIHByb2Nlc3MgYmFjayBpbnRvIGFuIGlkZW50aWNhbCBzdGF0ZSAoIHJlYWxseSBkaWZmaWN1bHQgKS4KLTUpIEEgZmV3IG1vcmUgZGlmZmljdWx0IHRoaW5ncyBJIGhhdmVuJ3QgdGhvdWdodCBvZi4KLQotCitBIGNvcmUgZHVtcCBpcyBhIGZpbGUgZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwgKGlmIGFsbG93ZWQpIHdoaWNoIGNvbnRhaW5zIHRoZQorcmVnaXN0ZXJzIGFuZCBhbGwgYWN0aXZlIHBhZ2VzIG9mIHRoZSBwcm9ncmFtIHdoaWNoIGhhcyBjcmFzaGVkLgorRnJvbSB0aGlzIGZpbGUgZ2RiIHdpbGwgYWxsb3cgeW91IHRvIGxvb2sgYXQgdGhlIHJlZ2lzdGVycywgc3RhY2sgdHJhY2UgYW5kCittZW1vcnkgb2YgdGhlIHByb2dyYW0gYXMgaWYgaXQganVzdCBjcmFzaGVkIG9uIHlvdXIgc3lzdGVtLiBJdCBpcyB1c3VhbGx5CitjYWxsZWQgY29yZSBhbmQgY3JlYXRlZCBpbiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KK1RoaXMgaXMgdmVyeSB1c2VmdWwgaW4gdGhhdCBhIGN1c3RvbWVyIGNhbiBtYWlsIGEgY29yZSBkdW1wIHRvIGEgdGVjaG5pY2FsCitzdXBwb3J0IGRlcGFydG1lbnQgYW5kIHRoZSB0ZWNobmljYWwgc3VwcG9ydCBkZXBhcnRtZW50IGNhbiByZWNvbnN0cnVjdCB3aGF0CitoYXBwZW5lZC4gUHJvdmlkZWQgdGhleSBoYXZlIGFuIGlkZW50aWNhbCBjb3B5IG9mIHRoaXMgcHJvZ3JhbSB3aXRoIGRlYnVnZ2luZworc3ltYm9scyBjb21waWxlZCBpbiBhbmQgdGhlIHNvdXJjZSBiYXNlIG9mIHRoaXMgYnVpbGQgaXMgYXZhaWxhYmxlLgorSW4gc2hvcnQgaXQgaXMgZmFyIG1vcmUgdXNlZnVsIHRoYW4gc29tZXRoaW5nIGxpa2UgYSBjcmFzaCBsb2cgY291bGQgZXZlciBob3BlCit0byBiZS4KIAogV2h5IGhhdmUgSSBuZXZlciBzZWVuIG9uZSA/LgogUHJvYmFibHkgYmVjYXVzZSB5b3UgaGF2ZW4ndCB1c2VkIHRoZSBjb21tYW5kIApAQCAtMTg2OCw3ICsxODc2LDcgQEAKICMzICAweDUxNjdlNiBpbiByZWFkbGluZV9pbnRlcm5hbF9jaGFyICgpIGF0IHJlYWRsaW5lLmM6NDU0CiAjNCAgMHg1MTY4ZWUgaW4gcmVhZGxpbmVfaW50ZXJuYWxfY2hhcmxvb3AgKCkgYXQgcmVhZGxpbmUuYzo1MDcKICM1ICAweDUxNjkyYyBpbiByZWFkbGluZV9pbnRlcm5hbCAoKSBhdCByZWFkbGluZS5jOjUyMQotIzYgIDB4NTE2NGZlIGluIHJlYWRsaW5lIChwcm9tcHQ9MHg3ZmZmZjgxMCAiXDE3N8KBw7/CgcO4eFwxNzfCgcO/woHDt8KBw5hcMTc3woHDv8KBw7h4woHDgCIpCisjNiAgMHg1MTY0ZmUgaW4gcmVhZGxpbmUgKHByb21wdD0weDdmZmZmODEwKQogICAgIGF0IHJlYWRsaW5lLmM6MzQ5CiAjNyAgMHg0ZDdhOGEgaW4gY29tbWFuZF9saW5lX2lucHV0IChwcm9tcHQ9MHg1NjQ0MjAgIihnZGIpICIsIHJlcGVhdD0xLAogICAgIGFubm90YXRpb25fc3VmZml4PTB4NGQ2YjQ0ICJwcm9tcHQiKSBhdCB0b3AuYzoyMDkxCkBAIC0xOTI5LDggKzE5MzcsOCBAQAogT24gbXkgbWFjaGluZSBub3cgb3V0cHV0cwogMQogSVAgZm9yd2FyZGluZyBpcyBvbi4KLVRoZXJlIGlzIGEgbG90IG9mIHVzZWZ1bCBpbmZvIGluIGhlcmUgYmVzdCBmb3VuZCBieSBnb2luZyBpbiAmIGhhdmluZyBhIGxvb2sgYXJvdW5kLAotc28gSSdsbCB0YWtlIHlvdSB0aHJvdWdoIHNvbWUgZW50cmllcyBJIGNvbnNpZGVyIGltcG9ydGFudC4KK1RoZXJlIGlzIGEgbG90IG9mIHVzZWZ1bCBpbmZvIGluIGhlcmUgYmVzdCBmb3VuZCBieSBnb2luZyBpbiBhbmQgaGF2aW5nIGEgbG9vaworYXJvdW5kLCBzbyBJJ2xsIHRha2UgeW91IHRocm91Z2ggc29tZSBlbnRyaWVzIEkgY29uc2lkZXIgaW1wb3J0YW50LgogCiBBbGwgdGhlIHByb2Nlc3NlcyBydW5uaW5nIG9uIHRoZSBtYWNoaW5lIGhhdmUgdGhlaXIgb3duIGVudHJ5IGRlZmluZWQgYnkKIC9wcm9jLzxwaWQ+CkBAIC0yMDYwLDcgKzIwNjgsOCBAQAogdHJ5CiAvZXRjL3JjLmQvaW5pdC5kL25ldHdvcmsgc3RhcnQgCiAoIHRoaXMgc3RhcnRzIHRoZSBuZXR3b3JrIHN0YWNrICYgaG9wZWZ1bGx5IGNhbGxzIGlmY29uZmlnIHRyMCB1cCApLgotaWZjb25maWcgbG9va3MgYXQgdGhlIG91dHB1dCBvZiAvcHJvYy9uZXQvZGV2ICYgcHJlc2VudHMgaXQgaW4gYSBtb3JlIHByZXNlbnRhYmxlIGZvcm0KK2lmY29uZmlnIGxvb2tzIGF0IHRoZSBvdXRwdXQgb2YgL3Byb2MvbmV0L2RldiBhbmQgcHJlc2VudHMgaXQgaW4gYSBtb3JlCitwcmVzZW50YWJsZSBmb3JtLgogTm93IHBpbmcgdGhlIGRldmljZSBmcm9tIGEgbWFjaGluZSBpbiB0aGUgc2FtZSBzdWJuZXQuCiBpZiB0aGUgUlggcGFja2V0cyBjb3VudCAmIFRYIHBhY2tldHMgY291bnRzIGRvbid0IGluY3JlbWVudCB5b3UgcHJvYmFibHkKIGhhdmUgcHJvYmxlbXMuCkBAIC0yMDg2LDM0ICsyMDk1LDYgQEAKIFNlZSB0aGUgbWFucGFnZSBjaGFuZGV2LjggJnR5cGUgY2F0IC9wcm9jL2NoYW5kZXYgZm9yIG1vcmUgaW5mby4KIAogCi0KLVN0YXJ0aW5nIHBvaW50cyBmb3IgZGVidWdnaW5nIHNjcmlwdGluZyBsYW5ndWFnZXMgZXRjLgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLWJhc2gvc2gKLQotYmFzaCAteCA8c2NyaXB0bmFtZT4KLWUuZy4gYmFzaCAteCAvdXNyL2Jpbi9iYXNoYnVnCi1kaXNwbGF5cyB0aGUgZm9sbG93aW5nIGxpbmVzIGFzIGl0IGV4ZWN1dGVzIHRoZW0uCi0rIE1BQ0hJTkU9aTU4NgotKyBPUz1saW51eC1nbnUKLSsgQ0M9Z2NjCi0rIENGTEFHUz0gLURQUk9HUkFNPSdiYXNoJyAtREhPU1RUWVBFPSdpNTg2JyAtRE9TVFlQRT0nbGludXgtZ251JyAtRE1BQ0hUWVBFPSdpNTg2LXBjLWxpbnV4LWdudScgLURTSEVMTCAtREhBVkVfQ09ORklHX0ggICAtSS4gLUkuIC1JLi9saWIgLU8yIC1waXBlCi0rIFJFTEVBU0U9Mi4wMQotKyBQQVRDSExFVkVMPTEKLSsgUkVMU1RBVFVTPXJlbGVhc2UKLSsgTUFDSFRZUEU9aTU4Ni1wYy1saW51eC1nbnUgICAKLQotcGVybCAtZCA8c2NyaXB0bmFtZT4gcnVucyB0aGUgcGVybHNjcmlwdCBpbiBhIGZ1bGx5IGludGVyYWN0aXZlIGRlYnVnZ2VyCi08bGlrZSBnZGI+LgotVHlwZSAnaCcgaW4gdGhlIGRlYnVnZ2VyIGZvciBoZWxwLgotCi1mb3IgZGVidWdnaW5nIGphdmEgdHlwZQotamRiIDxmaWxlbmFtZT4gYW5vdGhlciBmdWxseSBpbnRlcmFjdGl2ZSBnZGIgc3R5bGUgZGVidWdnZXIuCi0mIHR5cGUgPyBpbiB0aGUgZGVidWdnZXIgZm9yIGhlbHAuCi0KLQotCiBTeXNScQogPT09PT0KIFRoaXMgaXMgbm93IHN1cHBvcnRlZCBieSBsaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL2NvbXBsZXRpb24udHh0IGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvY29tcGxldGlvbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc3NjUxZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL2NvbXBsZXRpb24udHh0CkBAIC0wLDAgKzEsMjM2IEBACitjb21wbGV0aW9ucyAtIHdhaXQgZm9yIGNvbXBsZXRpb24gaGFuZGxpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRvY3VtZW50IHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYmFzZWQgb24gMy4xOC4wIChsaW51eC1uZXh0KQorCitJbnRyb2R1Y3Rpb246CistLS0tLS0tLS0tLS0tCisKK0lmIHlvdSBoYXZlIG9uZSBvciBtb3JlIHRocmVhZHMgb2YgZXhlY3V0aW9uIHRoYXQgbXVzdCB3YWl0IGZvciBzb21lIHByb2Nlc3MKK3RvIGhhdmUgcmVhY2hlZCBhIHBvaW50IG9yIGEgc3BlY2lmaWMgc3RhdGUsIGNvbXBsZXRpb25zIGNhbiBwcm92aWRlIGEgcmFjZQorZnJlZSBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0uIFNlbWFudGljYWxseSB0aGV5IGFyZSBzb21ld2hhdCBsaWtlIGEKK3B0aHJlYWRfYmFycmllcnMgYW5kIGhhdmUgc2ltaWxhciB1c2UtY2FzZXMuCisKK0NvbXBsZXRpb25zIGFyZSBhIGNvZGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSB0aGF0IGlzIHByZWZlcmFibGUgdG8gYW55CittaXN1c2Ugb2YgbG9ja3MuIEFueSB0aW1lIHlvdSB0aGluayBvZiB1c2luZyB5aWVsZCgpIG9yIHNvbWUgcXVpcmt5Cittc2xlZXAoMSk7IGxvb3AgdG8gYWxsb3cgc29tZXRoaW5nIGVsc2UgdG8gcHJvY2VlZCwgeW91IHByb2JhYmx5IHdhbnQgdG8KK2xvb2sgaW50byB1c2luZyBvbmUgb2YgdGhlIHdhaXRfZm9yX2NvbXBsZXRpb24qKCkgY2FsbHMgaW5zdGVhZC4gVGhlCithZHZhbnRhZ2Ugb2YgdXNpbmcgY29tcGxldGlvbnMgaXMgY2xlYXIgaW50ZW50IG9mIHRoZSBjb2RlIGJ1dCBhbHNvIG1vcmUKK2VmZmljaWVudCBjb2RlIGFzIGJvdGggdGhyZWFkcyBjYW4gY29udGludWUgdW50aWwgdGhlIHJlc3VsdCBpcyBhY3R1YWxseQorbmVlZGVkLgorCitDb21wbGV0aW9ucyBhcmUgYnVpbHQgb24gdG9wIG9mIHRoZSBnZW5lcmljIGV2ZW50IGluZnJhc3RydWN0dXJlIGluIExpbnV4LAord2l0aCB0aGUgZXZlbnQgcmVkdWNlZCB0byBhIHNpbXBsZSBmbGFnIGFwcHJvcHJpYXRlbHkgY2FsbGVkICJkb25lIiBpbgorc3RydWN0IGNvbXBsZXRpb24sIHRoYXQgdGVsbHMgdGhlIHdhaXRpbmcgdGhyZWFkcyBvZiBleGVjdXRpb24gaWYgdGhleQorY2FuIGNvbnRpbnVlIHNhZmVseS4KKworQXMgY29tcGxldGlvbnMgYXJlIHNjaGVkdWxpbmcgcmVsYXRlZCB0aGUgY29kZSBpcyBmb3VuZCBpbgora2VybmVsL3NjaGVkL2NvbXBsZXRpb24uYyAtIGZvciBkZXRhaWxzIG9uIGNvbXBsZXRpb24gZGVzaWduIGFuZAoraW1wbGVtZW50YXRpb24gc2VlIGNvbXBsZXRpb25zLWRlc2lnbi50eHQKKworCitVc2FnZToKKy0tLS0tLQorCitUaGVyZSBhcmUgdGhyZWUgcGFydHMgdG8gdGhlIHVzaW5nIGNvbXBsZXRpb25zLCB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlCitzdHJ1Y3QgY29tcGxldGlvbiwgdGhlIHdhaXRpbmcgcGFydCB0aHJvdWdoIGEgY2FsbCB0byBvbmUgb2YgdGhlIHZhcmlhbnRzIG9mCit3YWl0X2Zvcl9jb21wbGV0aW9uKCkgYW5kIHRoZSBzaWduYWxpbmcgc2lkZSB0aHJvdWdoIGEgY2FsbCB0byBjb21wbGV0ZSgpLAorb3IgY29tcGxldGVfYWxsKCkuIEZ1cnRoZXIgdGhlcmUgYXJlIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyBmb3IgY2hlY2tpbmcgdGhlCitzdGF0ZSBvZiBjb21wbGV0aW9ucy4KKworVG8gdXNlIGNvbXBsZXRpb25zIG9uZSBuZWVkcyB0byBpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+IGFuZAorY3JlYXRlIGEgdmFyaWFibGUgb2YgdHlwZSBzdHJ1Y3QgY29tcGxldGlvbi4gVGhlIHN0cnVjdHVyZSB1c2VkIGZvcgoraGFuZGxpbmcgb2YgY29tcGxldGlvbnMgaXM6CisKKwlzdHJ1Y3QgY29tcGxldGlvbiB7CisJCXVuc2lnbmVkIGludCBkb25lOworCQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCX07CisKK3Byb3ZpZGluZyB0aGUgd2FpdCBxdWV1ZSB0byBwbGFjZSB0YXNrcyBvbiBmb3Igd2FpdGluZyBhbmQgdGhlIGZsYWcgZm9yCitpbmRpY2F0aW5nIHRoZSBzdGF0ZSBvZiBhZmZhaXJzLgorCitDb21wbGV0aW9ucyBzaG91bGQgYmUgbmFtZWQgdG8gY29udmV5IHRoZSBpbnRlbnQgb2YgdGhlIHdhaXRlci4gIEEgZ29vZAorZXhhbXBsZSBpczoKKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmVhcmx5X2NvbnNvbGVfYWRkZWQpOworCisJY29tcGxldGUoJmVhcmx5X2NvbnNvbGVfYWRkZWQpOworCitHb29kIG5hbWluZyAoYXMgYWx3YXlzKSBoZWxwcyBjb2RlIHJlYWRhYmlsaXR5LgorCisKK0luaXRpYWxpemluZyBjb21wbGV0aW9uczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW5pdGlhbGl6YXRpb24gb2YgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGNvbXBsZXRpb25zLCBvZnRlbiBlbWJlZGRlZCBpbgorb3RoZXIgc3RydWN0dXJlcywgaXMgZG9uZSB3aXRoOgorCisJdm9pZCBpbml0X2NvbXBsZXRpb24oJmRvbmUpOworCitJbml0aWFsaXphdGlvbiBpcyBhY2NvbXBsaXNoZWQgYnkgaW5pdGlhbGl6aW5nIHRoZSB3YWl0IHF1ZXVlIGFuZCBzZXR0aW5nCit0aGUgZGVmYXVsdCBzdGF0ZSB0byAibm90IGF2YWlsYWJsZSIsIHRoYXQgaXMsICJkb25lIiBpcyBzZXQgdG8gMC4KKworVGhlIHJlLWluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLCByZWluaXRfY29tcGxldGlvbigpLCBzaW1wbHkgcmVzZXRzIHRoZQorZG9uZSBlbGVtZW50IHRvICJub3QgYXZhaWxhYmxlIiwgdGh1cyBhZ2FpbiB0byAwLCB3aXRob3V0IHRvdWNoaW5nIHRoZQord2FpdCBxdWV1ZS4gQ2FsbGluZyBpbml0X2NvbXBsZXRpb24oKSBvbiB0aGUgc2FtZSBjb21wbGV0aW9ucyBvYmplY3QgaXMKK21vc3QgbGlrZWx5IGEgYnVnIGFzIGl0IHJlLWluaXRpYWxpemVzIHRoZSBxdWV1ZSB0byBhbiBlbXB0eSBxdWV1ZSBhbmQKK2VucXVldWVkIHRhc2tzIGNvdWxkIGdldCAibG9zdCIgLSB1c2UgcmVpbml0X2NvbXBsZXRpb24oKSBpbiB0aGF0IGNhc2UuCisKK0ZvciBzdGF0aWMgZGVjbGFyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uLCBtYWNyb3MgYXJlIGF2YWlsYWJsZS4gVGhlc2UgYXJlOgorCisJc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihzZXR1cF9kb25lKQorCit1c2VkIGZvciBzdGF0aWMgZGVjbGFyYXRpb25zIGluIGZpbGUgc2NvcGUuIFdpdGhpbiBmdW5jdGlvbnMgdGhlIHN0YXRpYworaW5pdGlhbGl6YXRpb24gc2hvdWxkIGFsd2F5cyB1c2U6CisKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhzZXR1cF9kb25lKQorCitzdWl0YWJsZSBmb3IgYXV0b21hdGljL2xvY2FsIHZhcmlhYmxlcyBvbiB0aGUgc3RhY2sgYW5kIHdpbGwgbWFrZSBsb2NrZGVwCitoYXBweS4gTm90ZSBhbHNvIHRoYXQgb25lIG5lZWRzIHRvIG1ha2luZyAqc3VyZSogdGhlIGNvbXBsZXRpb24gcGFzc3QgdG8KK3dvcmsgdGhyZWFkcyByZW1haW5zIGluLXNjb3BlLCBhbmQgbm8gcmVmZXJlbmNlcyByZW1haW4gdG8gb24tc3RhY2sgZGF0YQord2hlbiB0aGUgaW5pdGlhdGluZyBmdW5jdGlvbiByZXR1cm5zLgorCisKK1dhaXRpbmcgZm9yIGNvbXBsZXRpb25zOgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBhIHRocmVhZCBvZiBleGVjdXRpb24gdG8gd2FpdCBmb3Igc29tZSBjb25jdXJyZW50IHdvcmsgdG8gZmluaXNoLCBpdAorY2FsbHMgd2FpdF9mb3JfY29tcGxldGlvbigpIG9uIHRoZSBpbml0aWFsaXplZCBjb21wbGV0aW9uIHN0cnVjdHVyZS4KK0EgdHlwaWNhbCB1c2FnZSBzY2VuYXJpbyBpczoKKworCXN0cnVjdHVyZSBjb21wbGV0aW9uIHNldHVwX2RvbmU7CisJaW5pdF9jb21wbGV0aW9uKCZzZXR1cF9kb25lKTsKKwlpbml0aWFsemVfd29yayguLi4sJnNldHVwX2RvbmUsLi4uKQorCisJLyogcnVuIG5vbi1kZXBlbmRlbnQgY29kZSAqLyAgICAgICAgICAgICAgLyogZG8gc2V0dXAgKi8KKworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnNldXB0X2RvbmUpOyAgICAgICAgIGNvbXBsZXRlKHNldHVwX2RvbmUpCisKK1RoaXMgaXMgbm90IGltcGx5aW5nIGFueSB0ZW1wb3JhbCBvcmRlciBvZiB3YWl0X2Zvcl9jb21wbGV0aW9uKCkgYW5kIHRoZQorY2FsbCB0byBjb21wbGV0ZSgpIC0gaWYgdGhlIGNhbGwgdG8gY29tcGxldGUoKSBoYXBwZW5lZCBiZWZvcmUgdGhlIGNhbGwKK3RvIHdhaXRfZm9yX2NvbXBsZXRpb24oKSB0aGVuIHRoZSB3YWl0aW5nIHNpZGUgc2ltcGx5IHdpbGwgY29udGludWUKK2ltbWVkaWF0ZWx5IGFzIGFsbCBkZXBlbmRlbmNpZXMgYXJlIHNhdGlzZmllZC4KKworTm90ZSB0aGF0IHdhaXRfZm9yX2NvbXBsZXRpb24oKSBpcyBjYWxsaW5nIHNwaW5fbG9ja19pcnEvc3Bpbl91bmxvY2tfaXJxCitzbyBpdCBjYW4gb25seSBiZSBjYWxsZWQgc2FmZWx5IHdoZW4geW91IGtub3cgdGhhdCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLgorQ2FsbGluZyBpdCBmcm9tIGhhcmQtaXJxIGNvbnRleHQgd2lsbCByZXN1bHQgaW4gaGFyZCB0byBkZXRlY3Qgc3B1cmlvdXMKK2VuYWJsaW5nIG9mIGludGVycnVwdHMuCisKK3dhaXRfZm9yX2NvbXBsZXRpb24oKToKKworCXZvaWQgd2FpdF9mb3JfY29tcGxldGlvbihzdHJ1Y3QgY29tcGxldGlvbiAqZG9uZSk6CisKK1RoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHdhaXQgd2l0aG91dCBhIHRpbWVvdXQgYW5kIG1hcmsgdGhlIHRhc2sgYXMKK3VuaW50ZXJydXB0aWJsZS4gd2FpdF9mb3JfY29tcGxldGlvbigpIGFuZCBpdHMgdmFyaWFudHMgYXJlIG9ubHkgc2FmZQoraW4gc29mdC1pbnRlcnJ1cHQgb3IgcHJvY2VzcyBjb250ZXh0IGJ1dCBub3QgaW4gaGFyZC1pcnEgY29udGV4dC4KK0FzIGFsbCB2YXJpYW50cyBvZiB3YWl0X2Zvcl9jb21wbGV0aW9uKCkgY2FuIChvYnZpb3VzbHkpIGJsb2NrIGZvciBhIGxvbmcKK3RpbWUsIHlvdSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGNhbGwgdGhpcyB3aXRoIGhlbGQgbG9ja3MgLSBzZWUgYWxzbwordHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24oKSBiZWxvdy4KKworCitWYXJpYW50cyBhdmFpbGFibGU6CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBiZWxvdyB2YXJpYW50cyBhbGwgcmV0dXJuIHN0YXR1cyBhbmQgdGhpcyBzdGF0dXMgc2hvdWxkIGJlIGNoZWNrZWQgaW4KK21vc3QoL2FsbCkgY2FzZXMgLSBpbiBjYXNlcyB3aGVyZSB0aGUgc3RhdHVzIGlzIGRlbGliZXJhdGVseSBub3QgY2hlY2tlZCB5b3UKK3Byb2JhYmx5IHdhbnQgdG8gbWFrZSBhIG5vdGUgZXhwbGFpbmluZyB0aGlzIChlLmcuIHNlZQorYXJjaC9hcm0va2VybmVsL3NtcC5jOl9fY3B1X3VwKCkpLgorCitBIGNvbW1vbiBwcm9ibGVtIHRoYXQgb2NjdXJzIGlzIHRvIGhhdmUgdW5jbGVhbiBhc3NpZ25tZW50IG9mIHJldHVybiB0eXBlcywKK3NvIGNhcmUgc2hvdWxkIGJlIHRha2VuIHdpdGggYXNzaWduaW5nIHJldHVybi12YWx1ZXMgdG8gdmFyaWFibGVzIG9mIHByb3BlcgordHlwZS4gQ2hlY2tpbmcgZm9yIHRoZSBzcGVjaWZpYyBtZWFuaW5nIG9mIHJldHVybiB2YWx1ZXMgYWxzbyBoYXMgYmVlbiBmb3VuZAordG8gYmUgcXVpdGUgaW5hY2N1cmF0ZSBlLmcuIGNvbnN0cnVjdHMgbGlrZQoraWYoIXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KC4uLikpIHdvdWxkIGV4ZWN1dGUgdGhlIHNhbWUKK2NvZGUgcGF0aCBmb3Igc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIGFuZCBmb3IgdGhlIGludGVycnVwdGVkIGNhc2UgLSB3aGljaCBpcworcHJvYmFibHkgbm90IHdoYXQgeW91IHdhbnQuCisKKwlpbnQgd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBjb21wbGV0aW9uICpkb25lKQorCittYXJraW5nIHRoZSB0YXNrIFRBU0tfSU5URVJSVVBUSUJMRS4gSWYgYSBzaWduYWwgd2FzIHJlY2VpdmVkIHdoaWxlIHdhaXRpbmcuCitJdCB3aWxsIHJldHVybiAtRVJFU1RBUlRTWVMgYW5kIDAgb3RoZXJ3aXNlLgorCisJdW5zaWduZWQgbG9uZyB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoc3RydWN0IGNvbXBsZXRpb24gKmRvbmUsCisJCXVuc2lnbmVkIGxvbmcgdGltZW91dCkKKworVGhlIHRhc2sgaXMgbWFya2VkIGFzIFRBU0tfVU5JTlRFUlJVUFRJQkxFIGFuZCB3aWxsIHdhaXQgYXQgbW9zdCB0aW1lb3V0CisoaW4gamlmZmllcykuIElmIHRpbWVvdXQgb2NjdXJzIGl0IHJldHVybiAwIGVsc2UgdGhlIHJlbWFpbmluZyB0aW1lIGluCitqaWZmaWVzIChidXQgYXQgbGVhc3QgMSkuIFRpbWVvdXRzIGFyZSBwcmVmZXJhYmx5IHBhc3NlZCBieSBtc2Vjc190b19qaWZmaWVzKCkKK29yIHVzZWNzX3RvX2ppZmZpZXMoKS4gSWYgdGhlIHJldHVybmVkIHRpbWVvdXQgdmFsdWUgaXMgZGVsaWJlcmF0ZWx5IGlnbm9yZWQKK2EgY29tbWVudCBzaG91bGQgcHJvYmFibHkgZXhwbGFpbiB3aHkgKGUuZy4gc2VlIGRyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMKK3dtODM1MF9yZWFkX2F1eGFkYygpKQorCisJbG9uZyB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJc3RydWN0IGNvbXBsZXRpb24gKmRvbmUsIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKKworcGFzc2luZyBhIHRpbWVvdXQgaW4gamlmZmllcyBhbmQgbWFya2luZyB0aGUgdGFzayBhcyBUQVNLX0lOVEVSUlVQVElCTEUuIElmIGEKK3NpZ25hbCB3YXMgcmVjZWl2ZWQgaXQgd2lsbCByZXR1cm4gLUVSRVNUQVJUU1lTLCAwIGlmIGNvbXBsZXRpb24gdGltZWQtb3V0IGFuZAordGhlIHJlbWFpbmluZyB0aW1lIGluIGppZmZpZXMgaWYgY29tcGxldGlvbiBvY2N1cnJlZC4KKworRnVydGhlciB2YXJpYW50cyBpbmNsdWRlIF9raWxsYWJsZSB3aGljaCBwYXNzZXMgVEFTS19LSUxMQUJMRSBhcyB0aGUKK2Rlc2lnbmF0ZWQgdGFza3Mgc3RhdGUgYW5kIHdpbGwgcmV0dXJuIGEgLUVSRVNUQVJUU1lTIGlmIGludGVycnVwdGVkIG9yCitlbHNlIDAgaWYgY29tcGxldGlvbnMgd2FzIGFjaGlldmVkIGFzIHdlbGwgYXMgYSBfdGltZW91dCB2YXJpYW50LgorCisJbG9uZyB3YWl0X2Zvcl9jb21wbGV0aW9uX2tpbGxhYmxlKHN0cnVjdCBjb21wbGV0aW9uICpkb25lKQorCWxvbmcgd2FpdF9mb3JfY29tcGxldGlvbl9raWxsYWJsZV90aW1lb3V0KHN0cnVjdCBjb21wbGV0aW9uICpkb25lLAorCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQpCisKK1RoZSBfaW8gdmFyaWFudHMgd2FpdF9mb3JfY29tcGxldGlvbl9pbyBiZWhhdmUgdGhlIHNhbWUgYXMgdGhlIG5vbi1faW8KK3ZhcmlhbnRzLCBleGNlcHQgZm9yIGFjY291bnRpbmcgd2FpdGluZyB0aW1lIGFzIHdhaXRpbmcgb24gSU8sIHdoaWNoIGhhcworYW4gaW1wYWN0IG9uIGhvdyBzY2hlZHVsaW5nIGlzIGNhbGN1bGF0ZWQuCisKKwl2b2lkIHdhaXRfZm9yX2NvbXBsZXRpb25faW8oc3RydWN0IGNvbXBsZXRpb24gKmRvbmUpCisJdW5zaWduZWQgbG9uZyB3YWl0X2Zvcl9jb21wbGV0aW9uX2lvX3RpbWVvdXQoc3RydWN0IGNvbXBsZXRpb24gKmRvbmUKKwkJdW5zaWduZWQgbG9uZyB0aW1lb3V0KQorCisKK1NpZ25hbGluZyBjb21wbGV0aW9uczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSB0aHJlYWQgb2YgZXhlY3V0aW9uIHRoYXQgd2FudHMgdG8gc2lnbmFsIHRoYXQgdGhlIGNvbmRpdGlvbnMgZm9yCitjb250aW51YXRpb24gaGF2ZSBiZWVuIGFjaGlldmVkIGNhbGxzIGNvbXBsZXRlKCkgdG8gc2lnbmFsIGV4YWN0bHkgb25lCitvZiB0aGUgd2FpdGVycyB0aGF0IGl0IGNhbiBjb250aW51ZS4KKworCXZvaWQgY29tcGxldGUoc3RydWN0IGNvbXBsZXRpb24gKmRvbmUpCisKK29yIGNhbGxzIGNvbXBsZXRlX2FsbCB0byBzaWduYWwgYWxsIGN1cnJlbnQgYW5kIGZ1dHVyZSB3YWl0ZXJzLgorCisJdm9pZCBjb21wbGV0ZV9hbGwoc3RydWN0IGNvbXBsZXRpb24gKmRvbmUpCisKK1RoZSBzaWduYWxpbmcgd2lsbCB3b3JrIGFzIGV4cGVjdGVkIGV2ZW4gaWYgY29tcGxldGlvbnMgYXJlIHNpZ25hbGVkIGJlZm9yZQorYSB0aHJlYWQgc3RhcnRzIHdhaXRpbmcuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgdGhlIHdhaXRlciAiY29uc3VtaW5nIgorKGRlY3JlbWVudGluZykgdGhlIGRvbmUgZWxlbWVudCBvZiBzdHJ1Y3QgY29tcGxldGlvbi4gV2FpdGluZyB0aHJlYWRzCit3YWtldXAgb3JkZXIgaXMgdGhlIHNhbWUgaW4gd2hpY2ggdGhleSB3ZXJlIGVucXVldWVkIChGSUZPIG9yZGVyKS4KKworSWYgY29tcGxldGUoKSBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdGhlbiB0aGlzIHdpbGwgYWxsb3cgZm9yIHRoYXQgbnVtYmVyCitvZiB3YWl0ZXJzIHRvIGNvbnRpbnVlIC0gZWFjaCBjYWxsIHRvIGNvbXBsZXRlKCkgd2lsbCBzaW1wbHkgaW5jcmVtZW50IHRoZQorZG9uZSBlbGVtZW50LiBDYWxsaW5nIGNvbXBsZXRlX2FsbCgpIG11bHRpcGxlIHRpbWVzIGlzIGEgYnVnIHRob3VnaC4gQm90aAorY29tcGxldGUoKSBhbmQgY29tcGxldGVfYWxsKCkgY2FuIGJlIGNhbGxlZCBpbiBoYXJkLWlycSBjb250ZXh0IHNhZmVseS4KKworVGhlcmUgb25seSBjYW4gYmUgb25lIHRocmVhZCBjYWxsaW5nIGNvbXBsZXRlKCkgb3IgY29tcGxldGVfYWxsKCkgb24gYQorcGFydGljdWxhciBzdHJ1Y3QgY29tcGxldGlvbnMgYXQgYW55IHRpbWUgLSBzZXJpYWxpemVkIHRocm91Z2ggdGhlIHdhaXQKK3F1ZXVlIHNwaW5sb2NrLiBBbnkgc3VjaCBjb25jdXJyZW50IGNhbGxzIHRvIGNvbXBsZXRlKCkgb3IgY29tcGxldGVfYWxsKCkKK3Byb2JhYmx5IGFyZSBhIGRlc2lnbiBidWcuCisKK1NpZ25hbGluZyBjb21wbGV0aW9uIGZyb20gaGFyZC1pcnEgY29udGV4dCBpcyBmaW5lIGFzIGl0IHdpbGwgYXBwcm9wcmlhdGVseQorbG9jayB3aXRoIHNwaW5fbG9ja19pcnFzYXZlL3NwaW5fdW5sb2NrX2lycXJlc3RvcmUuCisKKwordHJ5X3dhaXRfZm9yX2NvbXBsZXRpb24oKS9jb21wbGV0aW9uX2RvbmUoKToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSB0cnlfd2FpdF9mb3JfY29tcGxldGlvbiB3aWxsIG5vdCBwdXQgdGhlIHRocmVhZCBvbiB0aGUgd2FpdCBxdWV1ZSBidXQKK3JhdGhlciByZXR1cm5zIGZhbHNlIGlmIGl0IHdvdWxkIG5lZWQgdG8gZW5xdWV1ZSAoYmxvY2spIHRoZSB0aHJlYWQsIGVsc2UgaXQKK2NvbnN1bWVzIGFueSBwb3N0ZWQgY29tcGxldGlvbnMgYW5kIHJldHVybnMgdHJ1ZS4KKworICAgICBib29sIHRyeV93YWl0X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCBjb21wbGV0aW9uICpkb25lKQorCitGaW5hbGx5IHRvIGNoZWNrIHN0YXRlIG9mIGEgY29tcGxldGlvbnMgd2l0aG91dCBjaGFuZ2luZyBpdCBpbiBhbnkgd2F5IGlzCitwcm92aWRlZCBieSBjb21wbGV0aW9uX2RvbmUoKSByZXR1cm5pbmcgZmFsc2UgaWYgdGhlcmUgYXJlIGFueSBwb3N0ZWQKK2NvbXBsZXRpb24gdGhhdCB3YXMgbm90IHlldCBjb25zdW1lZCBieSB3YWl0ZXJzIGltcGx5aW5nIHRoYXQgdGhlcmUgYXJlCit3YWl0ZXJzIGFuZCB0cnVlIG90aGVyd2lzZTsKKworICAgICBib29sIGNvbXBsZXRpb25fZG9uZShzdHJ1Y3QgY29tcGxldGlvbiAqZG9uZSkKKworQm90aCB0cnlfd2FpdF9mb3JfY29tcGxldGlvbigpIGFuZCBjb21wbGV0aW9uX2RvbmUoKSBhcmUgc2FmZSB0byBiZSBjYWxsZWQgaW4KK2hhcmQtaXJxIGNvbnRleHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2tleXMudHh0IGIvRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9rZXlzLnR4dAppbmRleCA4MjFjOTM2Li5jOWU3ZjRmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2tleXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2VjdXJpdHkva2V5cy50eHQKQEAgLTMyMyw4ICszMjMsNiBAQAogCVUJVW5kZXIgY29uc3RydWN0aW9uIGJ5IGNhbGxiYWNrIHRvIHVzZXJzcGFjZQogCU4JTmVnYXRpdmUga2V5CiAKLSAgICAgVGhpcyBmaWxlIG11c3QgYmUgZW5hYmxlZCBhdCBrZXJuZWwgY29uZmlndXJhdGlvbiB0aW1lIGFzIGl0IGFsbG93cyBhbnlvbmUKLSAgICAgdG8gbGlzdCB0aGUga2V5cyBkYXRhYmFzZS4KIAogICgqKSAvcHJvYy9rZXktdXNlcnMKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKaW5kZXggNzU1MTFlZmUuLjgzYWIyNTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dApAQCAtODQzLDYgKzg0Myw3IEBACiA4MTkyIC0gQW4gdW5zaWduZWQgbW9kdWxlIGhhcyBiZWVuIGxvYWRlZCBpbiBhIGtlcm5lbCBzdXBwb3J0aW5nIG1vZHVsZQogICAgICAgIHNpZ25hdHVyZS4KIDE2Mzg0IC0gQSBzb2Z0IGxvY2t1cCBoYXMgcHJldmlvdXNseSBvY2N1cnJlZCBvbiB0aGUgc3lzdGVtLgorMzI3NjggLSBUaGUga2VybmVsIGhhcyBiZWVuIGxpdmUgcGF0Y2hlZC4KIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwvbmV0LnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL25ldC50eHQKaW5kZXggNjY2NTk0Yi4uNjI5NGI1MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwvbmV0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9uZXQudHh0CkBAIC05Nyw2ICs5NywxNCBAQAogCiBUaGUgbWF4aW11bSByZWNlaXZlIHNvY2tldCBidWZmZXIgc2l6ZSBpbiBieXRlcy4KIAordHN0YW1wX2FsbG93X2RhdGEKKy0tLS0tLS0tLS0tLS0tLS0tCitBbGxvdyBwcm9jZXNzZXMgdG8gcmVjZWl2ZSB0eCB0aW1lc3RhbXBzIGxvb3BlZCB0b2dldGhlciB3aXRoIHRoZSBvcmlnaW5hbAorcGFja2V0IGNvbnRlbnRzLiBJZiBkaXNhYmxlZCwgdHJhbnNtaXQgdGltZXN0YW1wIHJlcXVlc3RzIGZyb20gdW5wcml2aWxlZ2VkCitwcm9jZXNzZXMgYXJlIGRyb3BwZWQgdW5sZXNzIHNvY2tldCBvcHRpb24gU09GX1RJTUVTVEFNUElOR19PUFRfVFNPTkxZIGlzIHNldC4KK0RlZmF1bHQ6IDEgKG9uKQorCisKIHdtZW1fZGVmYXVsdAogLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dCBiL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dAppbmRleCA0NDE1YWE5Li45MDJiNDU3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC92bS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvdm0udHh0CkBAIC01NTUsMTIgKzU1NSwxMiBAQAogCiBvb21fZHVtcF90YXNrcwogCi1FbmFibGVzIGEgc3lzdGVtLXdpZGUgdGFzayBkdW1wIChleGNsdWRpbmcga2VybmVsIHRocmVhZHMpIHRvIGJlCi1wcm9kdWNlZCB3aGVuIHRoZSBrZXJuZWwgcGVyZm9ybXMgYW4gT09NLWtpbGxpbmcgYW5kIGluY2x1ZGVzIHN1Y2gKLWluZm9ybWF0aW9uIGFzIHBpZCwgdWlkLCB0Z2lkLCB2bSBzaXplLCByc3MsIG5yX3B0ZXMsIHN3YXBlbnRzLAotb29tX3Njb3JlX2FkaiBzY29yZSwgYW5kIG5hbWUuICBUaGlzIGlzIGhlbHBmdWwgdG8gZGV0ZXJtaW5lIHdoeSB0aGUKLU9PTSBraWxsZXIgd2FzIGludm9rZWQsIHRvIGlkZW50aWZ5IHRoZSByb2d1ZSB0YXNrIHRoYXQgY2F1c2VkIGl0LAotYW5kIHRvIGRldGVybWluZSB3aHkgdGhlIE9PTSBraWxsZXIgY2hvc2UgdGhlIHRhc2sgaXQgZGlkIHRvIGtpbGwuCitFbmFibGVzIGEgc3lzdGVtLXdpZGUgdGFzayBkdW1wIChleGNsdWRpbmcga2VybmVsIHRocmVhZHMpIHRvIGJlIHByb2R1Y2VkCit3aGVuIHRoZSBrZXJuZWwgcGVyZm9ybXMgYW4gT09NLWtpbGxpbmcgYW5kIGluY2x1ZGVzIHN1Y2ggaW5mb3JtYXRpb24gYXMKK3BpZCwgdWlkLCB0Z2lkLCB2bSBzaXplLCByc3MsIG5yX3B0ZXMsIG5yX3BtZHMsIHN3YXBlbnRzLCBvb21fc2NvcmVfYWRqCitzY29yZSwgYW5kIG5hbWUuICBUaGlzIGlzIGhlbHBmdWwgdG8gZGV0ZXJtaW5lIHdoeSB0aGUgT09NIGtpbGxlciB3YXMKK2ludm9rZWQsIHRvIGlkZW50aWZ5IHRoZSByb2d1ZSB0YXNrIHRoYXQgY2F1c2VkIGl0LCBhbmQgdG8gZGV0ZXJtaW5lIHdoeQordGhlIE9PTSBraWxsZXIgY2hvc2UgdGhlIHRhc2sgaXQgZGlkIHRvIGtpbGwuCiAKIElmIHRoaXMgaXMgc2V0IHRvIHplcm8sIHRoaXMgaW5mb3JtYXRpb24gaXMgc3VwcHJlc3NlZC4gIE9uIHZlcnkKIGxhcmdlIHN5c3RlbXMgd2l0aCB0aG91c2FuZHMgb2YgdGFza3MgaXQgbWF5IG5vdCBiZSBmZWFzaWJsZSB0byBkdW1wCkBAIC03MjgsNyArNzI4LDcgQEAKIAogLSB1c2VyX3Jlc2VydmVfa2J5dGVzCiAKLVdoZW4gb3ZlcmNvbW1pdF9tZW1vcnkgaXMgc2V0IHRvIDIsICJuZXZlciBvdmVyb21taXQiIG1vZGUsIHJlc2VydmUKK1doZW4gb3ZlcmNvbW1pdF9tZW1vcnkgaXMgc2V0IHRvIDIsICJuZXZlciBvdmVyY29tbWl0IiBtb2RlLCByZXNlcnZlCiBtaW4oMyUgb2YgY3VycmVudCBwcm9jZXNzIHNpemUsIHVzZXJfcmVzZXJ2ZV9rYnl0ZXMpIG9mIGZyZWUgbWVtb3J5LgogVGhpcyBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IGEgdXNlciBmcm9tIHN0YXJ0aW5nIGEgc2luZ2xlIG1lbW9yeSBob2dnaW5nCiBwcm9jZXNzLCBzdWNoIHRoYXQgdGhleSBjYW5ub3QgcmVjb3ZlciAoa2lsbCB0aGUgaG9nKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAppbmRleCA4NDA4ZTA0Li41NzJjYTkyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CkBAIC0xNzQwLDcgKzE3NDAsNyBAQAogICAgICB5dW0tdXBkYXRlc2QtMzExMSAgWzAwM10gIDE2MzcuMjU0NjgzOiBsb2NrX2hydGltZXJfYmFzZSA8LWhydGltZXJfdHJ5X3RvX2NhbmNlbAogICAgICB5dW0tdXBkYXRlc2QtMzExMSAgWzAwM10gIDE2MzcuMjU0Njg1OiBmZ2V0X2xpZ2h0IDwtZG9fc3lzX3BvbGwKICAgICAgeXVtLXVwZGF0ZXNkLTMxMTEgIFswMDNdICAxNjM3LjI1NDY4NjogcGlwZV9wb2xsIDwtZG9fc3lzX3BvbGwKLSMgZWNobyAtMSA+IHNldF9mdHJhY2VfcGlkCisjIGVjaG8gPiBzZXRfZnRyYWNlX3BpZAogIyBjYXQgdHJhY2UgfGhlYWQKICAjIHRyYWNlcjogZnVuY3Rpb24KICAjCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0IGIvRG9jdW1lbnRhdGlvbi91c2IvdXNibW9uLnR4dAppbmRleCBjNDJiYjljLi43NTg3ZDg0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Jtb24udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3VzYm1vbi50eHQKQEAgLTIzMSw3ICsyMzEsNyBAQAogTm90ZSB0aGF0IHNwZWNpZmljIG5hbWluZyBwb2xpY3kgaXMgc2V0IGJ5IHlvdXIgTGludXggZGlzdHJpYnV0aW9uLgogCiBJZiB5b3UgY3JlYXRlIC9kZXYvdXNibW9uMCBieSBoYW5kLCBtYWtlIHN1cmUgdGhhdCBpdCBpcyBvd25lZCBieSByb290Ci1hbmQgaGFzIG1vZGUgMDYwMC4gT3RoZXJ3aXNlLCB1bnByaXZpbGVkZ2VkIHVzZXJzIHdpbGwgYmUgYWJsZSB0byBzbm9vcAorYW5kIGhhcyBtb2RlIDA2MDAuIE90aGVyd2lzZSwgdW5wcml2aWxlZ2VkIHVzZXJzIHdpbGwgYmUgYWJsZSB0byBzbm9vcAoga2V5Ym9hcmQgdHJhZmZpYy4KIAogVGhlIGZvbGxvd2luZyBpb2N0bCBjYWxscyBhcmUgYXZhaWxhYmxlLCB3aXRoIE1PTl9JT0NfTUFHSUMgMHg5MjoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ1FjYW0udHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DUWNhbS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNjllNGUuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DUWNhbS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyMDUgKzAsMCBAQAotYy1xY2FtIC0gQ29ubmVjdGl4IENvbG9yIFF1aWNrQ2FtIHZpZGVvNGxpbnV4IGtlcm5lbCBkcml2ZXIKLQotQ29weXJpZ2h0IChDKSAxOTk5ICBEYXZlIEZvcnJlc3QgIDxkcmY1bkB2aXJnaW5pYS5lZHU+Ci0JCSAgICByZWxlYXNlZCB1bmRlciBHTlUgR1BMLgotCi0xOTk5LTEyLTA4IERhdmUgRm9ycmVzdCwgd3JpdHRlbiB3aXRoIGtlcm5lbCB2ZXJzaW9uIDIuMi4xMiBpbiBtaW5kCi0KLQotVGFibGUgb2YgQ29udGVudHMKLQotMS4wIEludHJvZHVjdGlvbgotMi4wIENvbXBpbGF0aW9uLCBJbnN0YWxsYXRpb24sIGFuZCBDb25maWd1cmF0aW9uCi0zLjAgVHJvdWJsZXNob290aW5nCi00LjAgRnV0dXJlIFdvcmsgLyBjdXJyZW50IHdvcmsgYXJvdW5kcwotOS4wIFNhbXBsZSBQcm9ncmFtLCB2NGxncmFiCi0xMC4wIE90aGVyIEluZm9ybWF0aW9uCi0KLQotMS4wIEludHJvZHVjdGlvbgotCi0gIFRoZSBmaWxlIC4uLy4uL2RyaXZlcnMvbWVkaWEvcGFycG9ydC9jLXFjYW0uYyBpcyBhIGRldmljZSBkcml2ZXIgZm9yCi10aGUgTG9naXRlY2ggKG5lZSBDb25uZWN0aXgpIHBhcmFsbGVsIHBvcnQgaW50ZXJmYWNlIGNvbG9yIENDRCBjYW1lcmEuCi1UaGlzIGlzIGEgZmFpcmx5IGluZXhwZW5zaXZlIGRldmljZSBmb3IgY2FwdHVyaW5nIGltYWdlcy4gIExvZ2l0ZWNoCi1kb2VzIG5vdCBjdXJyZW50bHkgcHJvdmlkZSBpbmZvcm1hdGlvbiBmb3IgZGV2ZWxvcGVycywgYnV0IG1hbnkgcGVvcGxlCi1oYXZlIGVuZ2luZWVyZWQgc2V2ZXJhbCBzb2x1dGlvbnMgZm9yIG5vbi1NaWNyb3NvZnQgdXNlIG9mIHRoZSBDb2xvcgotUXVpY2tjYW0uCi0KLTEuMSBNb3RpdmF0aW9uCi0KLSAgSSBzcGVudCBhIG51bWJlciBvZiBob3VycyB0cnlpbmcgdG8gZ2V0IG15IGNhbWVyYSB0byB3b3JrLCBhbmQgSQotaG9wZSB0aGlzIGRvY3VtZW50IHNhdmVzIHlvdSBzb21lIHRpbWUuICBNeSBjYW1lcmEgd2lsbCBub3Qgd29yayB3aXRoCi10aGUgMi4yLjEzIGtlcm5lbCBhcyBkaXN0cmlidXRlZCwgYnV0IHdpdGggYSBmZXcgcGF0Y2hlcyB0byB0aGUKLW1vZHVsZSwgSSB3YXMgYWJsZSB0byBncmFiIHNvbWUgZnJhbWVzLiBTZWUgNC4wLCBGdXR1cmUgV29yay4KLQotCi0KLTIuMCBDb21waWxhdGlvbiwgSW5zdGFsbGF0aW9uLCBhbmQgQ29uZmlndXJhdGlvbgotCi0gIFRoZSBjLXFjYW0gZGVwZW5kcyBvbiBwYXJhbGxlbCBwb3J0IHN1cHBvcnQsIHZpZGVvNGxpbnV4LCBhbmQgdGhlCi1Db2xvciBRdWlja2NhbS4gIEl0IGlzIGFsc28gbmljZSB0byBoYXZlIHRoZSBwYXJhbGxlbCBwb3J0IHJlYWRiYWNrCi1zdXBwb3J0IGVuYWJsZWQuIEkgZW5hYmxlZCB0aGVzZSBhcyBtb2R1bGVzIGR1cmluZyB0aGUga2VybmVsCi1jb25maWd1cmF0aW9uLiAgVGhlIGFwcHJvcHJpYXRlIGZsYWdzIGFyZToKLQotICAgIENPTkZJR19QUklOVEVSICAgICAgIE0gICAgZm9yIGxwLm8sIHBhcnBvcnQubyBwYXJwb3J0X3BjLm8gbW9kdWxlcwotICAgIENPTkZJR19QTlBfUEFSUE9SVCAgIE0gZm9yIGF1dG9wcm9iZS5vIElFRUUxMjg0IHJlYWRiYWNrIG1vZHVsZQotICAgIENPTkZJR19QUklOVEVSX1JFQURCQUNLIE0gZm9yIHBhcnBvcnRfcHJvYmUubyBJRUVFMTI4NCByZWFkYmFjayBtb2R1bGUKLSAgICBDT05GSUdfVklERU9fREVWICAgICBNICAgIGZvciB2aWRlb2Rldi5vIHZpZGVvNGxpbnV4IG1vZHVsZQotICAgIENPTkZJR19WSURFT19DUUNBTSAgIE0gICAgZm9yIGMtcWNhbS5vICBDb2xvciBRdWlja2NhbSBtb2R1bGUKLQotICBXaXRoIHRoZXNlIGZsYWdzLCB0aGUga2VybmVsIHNob3VsZCBjb21waWxlIGFuZCBpbnN0YWxsIHRoZSBtb2R1bGVzLgotVG8gcmVjb3JkIGFuZCBtb25pdG9yIHRoZSBjb21waWxhdGlvbiwgSSB1c2U6Ci0KLSAobWFrZSB6bGlsbyA7IFwKLSAgbWFrZSBtb2R1bGVzOyBcCi0gIG1ha2UgbW9kdWxlc19pbnN0YWxsIDsKLSAgZGVwbW9kIC1hICkgJj5sb2cgJgotIGxlc3MgbG9nICAjIHRoZW4gYSBjYXBpdGFsICdGJyB0byB3YXRjaCB0aGUgcHJvZ3Jlc3MKLQotQnV0IHRoYXQgaXMgbXkgcGVyc29uYWwgcHJlZmVyZW5jZS4KLQotMi4yIENvbmZpZ3VyYXRpb24KLQotICBUaGUgY29uZmlndXJhdGlvbiByZXF1aXJlcyBtb2R1bGUgY29uZmlndXJhdGlvbiBhbmQgZGV2aWNlCi1jb25maWd1cmF0aW9uLiAgVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXRhaWwgdGhlc2UgcHJvY2VkdXJlcy4KLQotCi0yLjEgTW9kdWxlIENvbmZpZ3VyYXRpb24KLQotICBVc2luZyBtb2R1bGVzIHJlcXVpcmVzIGEgYml0IG9mIHdvcmsgdG8gaW5zdGFsbCBhbmQgcGFzcyB0aGUKLXBhcmFtZXRlcnMuICBVbmRlcnN0YW5kIHRoYXQgZW50cmllcyBpbiAvZXRjL21vZHByb2JlLmQvKi5jb25mIG9mOgotCi0gICBhbGlhcyBwYXJwb3J0X2xvd2xldmVsIHBhcnBvcnRfcGMKLSAgIG9wdGlvbnMgcGFycG9ydF9wYyBpbz0weDM3OCBpcnE9bm9uZQotICAgYWxpYXMgY2hhci1tYWpvci04MSB2aWRlb2RldgotICAgYWxpYXMgY2hhci1tYWpvci04MS0wIGMtcWNhbQotCi0yLjIgRGV2aWNlIENvbmZpZ3VyYXRpb24KLQotICBBdCB0aGlzIHBvaW50LCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBkZXZpY2UgZmlsZXMgZXhpc3QuCi1WaWRlbzRsaW51eCB1c2VkIHRoZSAvZGV2L3ZpZGVvKiBmaWxlcywgYW5kIHdlIHdhbnQgdG8gYXR0YWNoIHRoZQotUXVpY2tjYW0gdG8gb25lIG9mIHRoZXNlLgotCi0gICBscyAtbGFkIC9kZXYvdmlkZW8qICAjIHNob3VsZCBwcm9kdWNlIGEgbGlzdCBvZiB0aGUgdmlkZW8gZGV2aWNlcwotCi1JZiB0aGUgdmlkZW8gZGV2aWNlcyBkbyBub3QgZXhpc3QsIHlvdSBjYW4gY3JlYXRlIHRoZW0gd2l0aDoKLQotICBzdQotICBjZCAvZGV2Ci0gIGZvciBpaSBpbiAwIDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDsgZG8KLSAgICBta25vZCB2aWRlbyRpaSBjIDgxICRpaSAgICMgY2hhci1tYWpvci04MS1bMC0xNl0KLSAgICBjaG93biByb290LnJvb3QgdmlkZW8kaWkgICMgb3duZWQgYnkgcm9vdAotICAgIGNobW9kIDYwMCB2aWRlbyRpaSAgICAgICAgIyByZWFkL3dyaXRhYmxlIGJ5IHJvb3Qgb25seQotICBkb25lCi0KLSAgTG90cyBvZiBwZW9wbGUgY29ubmVjdCB2aWRlbzAgdG8gdmlkZW8gYW5kIGJ0dHYsIGJ1dCB5b3UgbWlnaHQgd2FudAoteW91ciBjLXFjYW0gdG8gbWVhbiBzb21ldGhpbmcgbW9yZToKLQotICAgbG4gLXMgdmlkZW8wIGMtcWNhbSAgIyBtYWtlIC9kZXYvYy1xY2FtIGEgd29ya2luZyBmaWxlCi0gICBsbiAtcyBjLXFjYW0gdmlkZW8gICAjIG1ha2UgL2Rldi9jLXFjYW0geW91ciBkZWZhdWx0IHZpZGVvIHNvdXJjZQotCi0gIEJ1dCB0aGVzZSBhcmUgY29udmVuaWVuY2VzLiAgVGhlIGltcG9ydGFudCBwYXJ0IGlzIHRvIG1ha2UgdGhlIHByb3Blcgotc3BlY2lhbCBjaGFyYWN0ZXIgZmlsZXMgd2l0aCB0aGUgcmlnaHQgbWFqb3IgYW5kIG1pbm9yIG51bWJlcnMuICBBbGwKLW9mIHRoZSBzcGVjaWFsIGRldmljZSBmaWxlcyBhcmUgbGlzdGVkIGluIC4uL2RldmljZXMudHh0LiAgSWYgeW91Ci13b3VsZCBsaWtlIHRoZSBjLXFjYW0gcmVhZGFibGUgYnkgbm9uLXJvb3QgdXNlcnMsIHlvdSB3aWxsIG5lZWQgdG8KLWNoYW5nZSB0aGUgcGVybWlzc2lvbnMuCi0KLTMuMCBUcm91Ymxlc2hvb3RpbmcKLQotICBJZiB0aGUgc2FtcGxlIHByb2dyYW0gYmVsb3csIHY0bGdyYWIsIGdpdmVzIHlvdSBvdXRwdXQgdGhlbgotZXZlcnl0aGluZyBpcyB3b3JraW5nLgotCi0gICAgdjRsZ3JhYiB8IHdjICMgc2hvdWxkIGdpdmUgeW91IGEgY291bnQgb2YgY2hhcmFjdGVycwotCi0gIE90aGVyd2lzZSwgeW91IGhhdmUgc29tZSBwcm9ibGVtLgotCi0gIFRoZSBjLXFjYW0gaXMgSUVFRTEyODQgY29tcGF0aWJsZSwgc28gaWYgeW91IGFyZSB1c2luZyB0aGUgcHJvYyBmaWxlCi1zeXN0ZW0gKENPTkZJR19QUk9DX0ZTKSwgdGhlIHBhcmFsbGVsIHByaW50ZXIgc3VwcG9ydAotKENPTkZJR19QUklOVEVSKSwgdGhlIElFRUUgMTI4NCBzeXN0ZW0sKENPTkZJR19QUklOVEVSX1JFQURCQUNLKSwgeW91Ci1zaG91bGQgYmUgYWJsZSB0byByZWFkIHNvbWUgaWRlbnRpZmljYXRpb24gZnJvbSB5b3VyIHF1aWNrY2FtIHdpdGgKLQotCSBtb2Rwcm9iZSAtdiBwYXJwb3J0Ci0JIG1vZHByb2JlIC12IHBhcnBvcnRfcHJvYmUKLQkgY2F0IC9wcm9jL3BhcnBvcnQvUE9SVE5VTUJFUi9hdXRvcHJvYmUKLVJldHVybnM6Ci0gIENMQVNTOk1FRElBOwotICBNT0RFTDpDb2xvciBRdWlja0NhbSAyLjA7Ci0gIE1BTlVGQUNUVVJFUjpDb25uZWN0aXg7Ci0KLSAgQSBnb29kIHJlc3BvbnNlIHRvIHRoaXMgaW5kaWNhdGVzIHRoYXQgeW91ciBjb2xvciBxdWlja2NhbSBpcyBhbGl2ZQotYW5kIHdlbGwuICBBIGNvbW1vbiBwcm9ibGVtIGlzIHRoYXQgdGhlIGN1cnJlbnQgZHJpdmVyIGRvZXMgbm90Ci1yZWxpYWJseSBkZXRlY3QgYSBjLXFjYW0sIGV2ZW4gdGhvdWdoIG9uZSBpcyBhdHRhY2hlZC4gIEluIHRoaXMgY2FzZSwKLQotICAgICBtb2Rwcm9iZSAtdiBjLXFjYW0KLW9yCi0gICAgIGluc21vZCAtdiBjLXFjYW0KLQotICBSZXR1cm5zIGEgbWVzc2FnZSBzYXlpbmcgIkRldmljZSBvciByZXNvdXJjZSBidXN5IiAgRGV2ZWxvcG1lbnQgaXMKLWN1cnJlbnRseSB1bmRlcndheSwgYnV0IGEgd29ya2Fyb3VuZCBpcyB0byBwYXRjaCB0aGUgbW9kdWxlIHRvIHNraXAKLXRoZSBkZXRlY3Rpb24gY29kZSBhbmQgYXR0YWNoIHRvIGEgZGVmaW5lZCBwb3J0LiAgQ2hlY2sgdGhlCi12aWRlbzRsaW51eCBtYWlsaW5nIGxpc3QgYW5kIGFyY2hpdmUgZm9yIG1vcmUgY3VycmVudCBpbmZvcm1hdGlvbi4KLQotMy4xIENoZWNrbGlzdDoKLQotICBDYW4geW91IGdldCBhbiBpbWFnZT8KLQkgICAgdjRsZ3JhYiA+cWNhbS5wcG0gOyB3YyBxY2FtLnBwbSA7IHh2IHFjYW0ucHBtCi0KLSAgSXMgYSB3b3JraW5nIGMtcWNhbSBjb25uZWN0ZWQgdG8gdGhlIHBvcnQ/Ci0JICAgIGdyZXAgXiAvcHJvYy9wYXJwb3J0Lz8vYXV0b3Byb2JlCi0KLSAgRG8gdGhlIC9kZXYvdmlkZW8qIGZpbGVzIGV4aXN0PwotCSAgICBscyAtbGFkIC9kZXYvdmlkZW8KLQotICBJcyB0aGUgYy1xY2FtIG1vZHVsZSBsb2FkZWQ/Ci0JICAgIG1vZHByb2JlIC12IGMtcWNhbSA7IGxzbW9kCi0KLSAgRG9lcyB0aGUgY2FtZXJhIHdvcmsgd2l0aCBhbHRlcm5hdGUgcHJvZ3JhbXM/IGNxY2FtLCBldGM/Ci0KLQotCi0KLTQuMCBGdXR1cmUgV29yayAvIGN1cnJlbnQgd29ya2Fyb3VuZHMKLQotICBJdCBpcyBob3BlZCB0aGF0IHRoaXMgc2VjdGlvbiB3aWxsIHNvb24gYmVjb21lIG9ic29sZXRlLCBidXQgaWYgaXQKLWlzbid0LCB5b3UgbWlnaHQgdHJ5IHBhdGNoaW5nIHRoZSBjLXFjYW0gbW9kdWxlIHRvIGFkZCBhIHBhcnBvcnQ9eHh4Ci1vcHRpb24gYXMgaW4gdGhlIGJ3LXFjYW0gbW9kdWxlIHNvIHlvdSBjYW4gc3BlY2lmeSB0aGUgcGFyYWxsZWwgcG9ydDoKLQotICAgICAgIGluc21vZCAtdiBjLXFjYW0gcGFycG9ydD0wCi0KLUFuZCBieXBhc3MgdGhlIGRldGVjdGlvbiBjb2RlLCBzZWUgLi4vLi4vZHJpdmVycy9jaGFyL2MtcWNhbS5jIGFuZAotbG9vayBmb3IgdGhlICdxY19kZXRlY3QnIGNvZGUgYW5kIGNhbGwuCi0KLSAgTm90ZSB0aGF0IHRoZXJlIGlzIHdvcmsgaW4gcHJvZ3Jlc3MgdG8gY2hhbmdlIHRoZSB2aWRlbzRsaW51eCBBUEksCi10aGlzIHdvcmsgaXMgZG9jdW1lbnRlZCBhdCB0aGUgdmlkZW80bGludXgyIHNpdGUgbGlzdGVkIGJlbG93LgotCi0KLTkuMCAtLS0gQSBzYW1wbGUgcHJvZ3JhbSB1c2luZyB2NGxncmFiYmVyLAotCi12NGxncmFiIGlzIGEgc2ltcGxlIGltYWdlIGdyYWJiZXIgdGhhdCB3aWxsIGNvcHkgYSBmcmFtZSBmcm9tIHRoZQotZmlyc3QgdmlkZW8gZGV2aWNlLCAvZGV2L3ZpZGVvMCB0byBzdGFuZGFyZCBvdXRwdXQgaW4gcG9ydGFibGUgcGl4bWFwCi1mb3JtYXQgKC5wcG0pICBUbyBwcm9kdWNlIC5qcGcgb3V0cHV0LCB5b3UgY2FuIHVzZSBpdCBsaWtlIHRoaXM6Ci0ndjRsZ3JhYiB8IGNvbnZlcnQgLSBjLXFjYW0uanBnJwotCi0KLTEwLjAgLS0tIE90aGVyIEluZm9ybWF0aW9uCi0KLVVzZSB0aGUgLi4vLi4vTWFpbnRhaW5lcnMgZmlsZSwgcGFydGljdWxhcmx5IHRoZSAgVklERU8gRk9SIExJTlVYIGFuZCBQQVJBTExFTAotUE9SVCBTVVBQT1JUIHNlY3Rpb25zCi0KLVRoZSB2aWRlbzRsaW51eCBwYWdlOgotICBodHRwOi8vbGludXh0di5vcmcKLQotVGhlIFY0TDIgQVBJIHNwZWM6Ci0gIGh0dHA6Ly92NGwyc3BlYy5ieXRlc2V4Lm9yZy8KLQotU29tZSB3ZWIgcGFnZXMgYWJvdXQgdGhlIHF1aWNrY2FtczoKLSAgIGh0dHA6Ly93d3cucGluZ291aW4tbGFuZC5jb20vaG93dG8vUXVpY2tDYW0tSE9XVE8uaHRtbAotCi0gICBodHRwOi8vd3d3LmNyeW53ci5jb20vcWNwYy8gICAgICAgICAgICBRdWlja0NhbSBUaGlyZC1QYXJ0eSBEcml2ZXJzCi0gICBodHRwOi8vd3d3LmNyeW53ci5jb20vcWNwYy9yZS5odG1sICAgICBTb21lIFJldmVyc2UgRW5naW5lZXJpbmcKLSAgIGh0dHA6Ly93d3cud2lyZWxlc3Njb3VjaC5uZXQvc29mdHdhcmUvZ3FjYW0vICAgdjRsIGNsaWVudAotICAgaHR0cDovL3Bob2Jvcy5pbGx0ZWwuZGVudmVyLmNvLnVzL3B1Yi9xY3JlYWQvIGRvZXNuJ3QgdXNlIHY0bAotICAgZnRwOi8vZnRwLmNzLnVubS5lZHUvcHViL2NocmlzL3F1aWNrY2FtLyAgIEhhcyBsb3RzIG9mIGRyaXZlcnMKLSAgIGh0dHA6Ly93d3cuY3MuZHVrZS5lZHUvfnJleW5vbGRzL3F1aWNrY2FtLyBIYXMgbG90cyBvZiBpbmZvcm1hdGlvbgotCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLnRsZzIzMDAgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1JFQURNRS50bGcyMzAwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTZjY2I5Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvUkVBRE1FLnRsZzIzMDAKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi10bGcyMzAwIHJlbGVhc2Ugbm90ZXMKLT09PT09PT09PT09PT09PT09PT09Ci0KLVRoaXMgaXMgYSB2NGwyL2R2YiBkZXZpY2UgZHJpdmVyIGZvciB0aGUgdGxnMjMwMCBjaGlwLgotCi0KLWN1cnJlbnQgc3RhdHVzCi09PT09PT09PT09PT09PQotCi12aWRlbwotCS0gc3VwcG9ydCBtbWFwIGFuZCByZWFkKCkuKG5vIG92ZXJsYXkpCi0KLWF1ZGlvCi0JLSBUaGUgZHJpdmVyIHdpbGwgcmVnaXN0ZXIgYSBBTFNBIGNhcmQgZm9yIHRoZSBhdWRpbyBpbnB1dC4KLQotdmJpCi0JLSBXb3JrcyBmb3IgYWxtb3N0IFRWIG5vcm1zLgotCi1kdmItdAotCS0gd29ya3MgZm9yIERWQi1UCi0KLUZNCi0JLSBXb3JrcyBmb3IgcmFkaW8uCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVEVTVEVEIEFQUExJQ0FUSU9OUzoKLQotLVZMQzEuMC40IHRlc3QgdGhlIHZpZGVvIGFuZCBkdmIuIFRoZSBHVUkgaXMgZnJpZW5kbHkgdG8gdXNlLgotCi0tTXBsYXllciB0ZXN0IHRoZSB2aWRlby4KLQotLU1wbGF5ZXIgdGVzdCB0aGUgRk0uIFRoZSBtcGxheWVyIHNob3VsZCBiZSBjb21waWxlZCB3aXRoIC0tZW5hYmxlLXJhZGlvIGFuZAotCSAtLWVuYWJsZS1yYWRpby1jYXB0dXJlLgotCVRoZSBjb21tYW5kIHJ1bnMgYXMgdGhpcyhUaGUgYWxzYSBhdWRpbyByZWdpc3RlcnMgdG8gY2FyZCAxKToKLQkjbXBsYXllciByYWRpbzovLzEwMy43L2NhcHR1cmUvIC1yYWRpbyBhZGV2aWNlPWh3PTEsMDphcmF0ZT00ODAwMCBcCi0JCS1yYXdhdWRpbyByYXRlPTQ4MDAwOmNoYW5uZWxzPTIKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1LTk9XTiBQUk9CTEVNUzoKLWFib3V0IHByZWVtcGhhc2lzOgotCVlvdSBjYW4gc2V0IHRoZSBwcmVlbXBoYXNpcyBmb3IgcmFkaW8gYnkgdGhlIGZvbGxvd2luZyBjb21tYW5kOgotCSN2NGwyLWN0bCAtZCAvZGV2L3JhZGlvMCAtLXNldC1jdHJsPXByZV9lbXBoYXNpc19zZXR0aW5ncz0xCi0KLQkicHJlX2VtcGhhc2lzX3NldHRpbmdzPTEiIG1lYW5zIHRoYXQgeW91IHNlbGVjdCB0aGUgNTB1cy4gSWYgeW91IHdhbnQKLQl0byBzZWxlY3QgdGhlIDc1dXMsIHBsZWFzZSB1c2UgInByZV9lbXBoYXNpc19zZXR0aW5ncz0yIgotCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKaW5kZXggYTExZGZmMC4uZjU4NmUyOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKQEAgLTc5Myw4ICs3OTMsMTAgQEAKIAogV2hlbmV2ZXIgYSBkZXZpY2Ugbm9kZSBpcyBjcmVhdGVkIHNvbWUgYXR0cmlidXRlcyBhcmUgYWxzbyBjcmVhdGVkIGZvciB5b3UuCiBJZiB5b3UgbG9vayBpbiAvc3lzL2NsYXNzL3ZpZGVvNGxpbnV4IHlvdSBzZWUgdGhlIGRldmljZXMuIEdvIGludG8gZS5nLgotdmlkZW8wIGFuZCB5b3Ugd2lsbCBzZWUgJ25hbWUnIGFuZCAnaW5kZXgnIGF0dHJpYnV0ZXMuIFRoZSAnbmFtZScgYXR0cmlidXRlCi1pcyB0aGUgJ25hbWUnIGZpZWxkIG9mIHRoZSB2aWRlb19kZXZpY2Ugc3RydWN0LgordmlkZW8wIGFuZCB5b3Ugd2lsbCBzZWUgJ25hbWUnLCAnZGVidWcnIGFuZCAnaW5kZXgnIGF0dHJpYnV0ZXMuIFRoZSAnbmFtZScKK2F0dHJpYnV0ZSBpcyB0aGUgJ25hbWUnIGZpZWxkIG9mIHRoZSB2aWRlb19kZXZpY2Ugc3RydWN0LiBUaGUgJ2RlYnVnJyBhdHRyaWJ1dGUKK2NhbiBiZSB1c2VkIHRvIGVuYWJsZSBjb3JlIGRlYnVnZ2luZy4gU2VlIHRoZSBuZXh0IHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlsZWQKK2luZm9ybWF0aW9uIG9uIHRoaXMuCiAKIFRoZSAnaW5kZXgnIGF0dHJpYnV0ZSBpcyB0aGUgaW5kZXggb2YgdGhlIGRldmljZSBub2RlOiBmb3IgZWFjaCBjYWxsIHRvCiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoKSB0aGUgaW5kZXggaXMganVzdCBpbmNyZWFzZWQgYnkgMS4gVGhlIGZpcnN0IHZpZGVvCkBAIC04MTYsNiArODE4LDI1IEBACiBiZSBjYWxsZWQgaWYgdGhlIHJlZ2lzdHJhdGlvbiBmYWlsZWQsIG5vciBzaG91bGQgeW91IGV2ZXIgYXR0ZW1wdCB0bwogdW5yZWdpc3RlciB0aGUgZGV2aWNlIGlmIHRoZSByZWdpc3RyYXRpb24gZmFpbGVkLgogCit2aWRlbyBkZXZpY2UgZGVidWdnaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSAnZGVidWcnIGF0dHJpYnV0ZSB0aGF0IGlzIGNyZWF0ZWQgZm9yIGVhY2ggdmlkZW8sIHZiaSwgcmFkaW8gb3Igc3dyYWRpbworZGV2aWNlIGluIC9zeXMvY2xhc3MvdmlkZW80bGludXgvPGRldlg+LyBhbGxvd3MgeW91IHRvIGVuYWJsZSBsb2dnaW5nIG9mCitmaWxlIG9wZXJhdGlvbnMuCisKK0l0IGlzIGEgYml0bWFzayBhbmQgdGhlIGZvbGxvd2luZyBiaXRzIGNhbiBiZSBzZXQ6CisKKzB4MDE6IExvZyB0aGUgaW9jdGwgbmFtZSBhbmQgZXJyb3IgY29kZS4gVklESU9DXyhEKVFCVUYgaW9jdGxzIGFyZSBvbmx5IGxvZ2dlZAorICAgICAgaWYgYml0IDB4MDggaXMgYWxzbyBzZXQuCisweDAyOiBMb2cgdGhlIGlvY3RsIG5hbWUgYXJndW1lbnRzIGFuZCBlcnJvciBjb2RlLiBWSURJT0NfKEQpUUJVRiBpb2N0bHMgYXJlCisgICAgICBvbmx5IGxvZ2dlZCBpZiBiaXQgMHgwOCBpcyBhbHNvIHNldC4KKzB4MDQ6IExvZyB0aGUgZmlsZSBvcGVyYXRpb25zIG9wZW4sIHJlbGVhc2UsIHJlYWQsIHdyaXRlLCBtbWFwIGFuZAorICAgICAgZ2V0X3VubWFwcGVkX2FyZWEuIFRoZSByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBvbmx5IGxvZ2dlZCBpZgorICAgICAgYml0IDB4MDggaXMgYWxzbyBzZXQuCisweDA4OiBMb2cgdGhlIHJlYWQgYW5kIHdyaXRlIGZpbGUgb3BlcmF0aW9ucyBhbmQgdGhlIFZJRElPQ19RQlVGIGFuZAorICAgICAgVklESU9DX0RRQlVGIGlvY3Rscy4KKzB4MTA6IExvZyB0aGUgcG9sbCBmaWxlIG9wZXJhdGlvbi4KIAogdmlkZW9fZGV2aWNlIGNsZWFudXAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3c5OTY2LnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdzk5NjYudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTUwMjQ1Li4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdzk5NjYudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotVzk5NjYgQ2FtZXJhIGRyaXZlciwgd3JpdHRlbiBieSBKYWtvYiBLZW1pIChqYWtvYi5rZW1pQHRlbGlhLmNvbSkKLQotQWZ0ZXIgYSBsb3Qgb2Ygd29yayBpbiBzb2Z0aWNlICYgd2Rhc20sIHJlYWRpbmcgLnBkZi1maWxlcyBhbmQgdGlyZXNvbWUKLXRyaWFsLWFuZC1lcnJvciB3b3JrIEkndmUgZmluYWxseSBnb3QgZXZlcnl0aGluZyB0byB3b3JrLiBJIG5lZWRlZCB2aXNpb24gZm9yIGEKLXJvYm90aWNzIHByb2plY3Qgc28gSSBib3Jyb3dlZCB0aGlzIGNhbWVyYSBmcm9tIGEgZnJpZW5kIGFuZCBzdGFydGVkIGhhY2tpbmcuCi1Bbnl3YXkgSSd2ZSBjb252ZXJ0ZWQgbXkgb3JpZ2luYWwgY29kZSBmcm9tIHRoZSBBVlIgOGJpdCBSSVNDIEMvQVNNIGNvZGUgaW50bwotYSB3b3JraW5nIExpbnV4IGRyaXZlci4KLQotVG8gZ2V0IGl0IHdvcmtpbmcgc2ltcGx5IGNvbmZpZ3VyZSB5b3VyIGtlcm5lbCB0byBzdXBwb3J0Ci1wYXJwb3J0LCBpZWVlMTI4NCwgdmlkZW80bGludXggYW5kIHc5OTY2Ci0KLUlmIHc5OTY2IGlzIHN0YXRpY2FsbHkgbGlua2VkIGl0IHdpbGwgYWx3YXlzIHBlcmZvcm0gYWdncmVzc2l2ZSBwcm9iaW5nIGZvcgotdGhlIGNhbWVyYS4gSWYgYnVpbHQgYXMgYSBtb2R1bGUgeW91J2xsIGhhdmUgbW9yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuCi0KLU9wdGlvbnM6Ci0gbW9kcHJvYmUgdzk5NjYubyBwYXJkZXY9cGFycG9ydDAob3Igd2hhdGV2ZXIpIHBhcm1vZGU9MCAoMD1hdXRvLCAxPWVjcCwgMj1lcHApCi12b2lsYSEKLQoteW91IGNhbiBhbHNvIHR5cGUgJ21vZGluZm8gLXAgdzk5NjYubycgZm9yIG9wdGlvbiB1c2FnZQotKG9yIGNoZWNrb3V0IHc5OTY2LmMpCi0KLVRoZSBvbmx5IHRoaW5nIHRvIGtlZXAgaW4gbWluZCBpcyB0aGF0IHRoZSBpbWFnZSBmb3JtYXQgaXMgaW4gWS1VLVktViBmb3JtYXQKLXdoZXJlIGV2ZXJ5IHR3byBwaXhlbHMgdGFrZSA0IGJ5dGVzLiBJbiBTREwgKHd3dy5saWJzZGwub3JnKSB0aGlzIGZvcm1hdAotaXMgY2FsbGVkIFZJREVPX1BBTEVUVEVfWVVWNDIyICgxNiBicHApLgotCi1BIG1pbmltYWwgdGVzdCBhcHBsaWNhdGlvbiAod2l0aCBzb3VyY2UpIGlzIGF2YWlsYWJsZSBmcm9tOgotICBodHRwOi8vd3d3LnNsYWNrd2FyZXN1cHBvcnQuY29tL2hvd3Rvcy9XZWJjYW0tSE9XVE8KLQotVGhlIHNsb3cgZnJhbWVyYXRlIGlzIGR1ZSB0byBtaXNzaW5nIERNQSBFQ1AgcmVhZCBzdXBwb3J0IGluIHRoZQotcGFycG9ydCBkcml2ZXJzLiBJIG1pZ2h0IGFkZCB3b3JraW5nIEVQUCBzdXBwb3J0IGxhdGVyLgotCi1Hb29kIGx1Y2shCi0gICAgL0pha29iIEtlbWkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vY2xlYW5jYWNoZS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL2NsZWFuY2FjaGUudHh0CmluZGV4IDE0MmZiYjAuLjAxZDc2MjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vY2xlYW5jYWNoZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9jbGVhbmNhY2hlLnR4dApAQCAtODUsNyArODUsNyBAQAogQ0xFQU5DQUNIRSBQRVJGT1JNQU5DRSBNRVRSSUNTCiAKIElmIHByb3Blcmx5IGNvbmZpZ3VyZWQsIG1vbml0b3Jpbmcgb2YgY2xlYW5jYWNoZSBpcyBkb25lIHZpYSBkZWJ1Z2ZzIGluCi10aGUgL3N5cy9rZXJuZWwvZGVidWcvbW0vY2xlYW5jYWNoZSBkaXJlY3RvcnkuICBUaGUgZWZmZWN0aXZlbmVzcyBvZiBjbGVhbmNhY2hlCit0aGUgL3N5cy9rZXJuZWwvZGVidWcvY2xlYW5jYWNoZSBkaXJlY3RvcnkuICBUaGUgZWZmZWN0aXZlbmVzcyBvZiBjbGVhbmNhY2hlCiBjYW4gYmUgbWVhc3VyZWQgKGFjcm9zcyBhbGwgZmlsZXN5c3RlbXMpIHdpdGg6CiAKIHN1Y2NfZ2V0cwktIG51bWJlciBvZiBnZXRzIHRoYXQgd2VyZSBzdWNjZXNzZnVsCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2VtYXAudHh0IGIvRG9jdW1lbnRhdGlvbi92bS9wYWdlbWFwLnR4dAppbmRleCA1OTQ4ZTQ1Li42ZmJkNTVlZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9wYWdlbWFwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL3BhZ2VtYXAudHh0CkBAIC02Miw2ICs2Miw4IEBACiAgICAgMjAuIE5PUEFHRQogICAgIDIxLiBLU00KICAgICAyMi4gVEhQCisgICAgMjMuIEJBTExPT04KKyAgICAyNC4gWkVST19QQUdFCiAKIFNob3J0IGRlc2NyaXB0aW9ucyB0byB0aGUgcGFnZSBmbGFnczoKIApAQCAtMTAyLDYgKzEwNCwxMiBAQAogMjIuIFRIUAogICAgIGNvbnRpZ3VvdXMgcGFnZXMgd2hpY2ggY29uc3RydWN0IHRyYW5zcGFyZW50IGh1Z2VwYWdlcwogCisyMy4gQkFMTE9PTgorICAgIGJhbGxvb24gY29tcGFjdGlvbiBwYWdlCisKKzI0LiBaRVJPX1BBR0UKKyAgICB6ZXJvIHBhZ2UgZm9yIHBmbl96ZXJvIG9yIGh1Z2VfemVybyBwYWdlCisKICAgICBbSU8gcmVsYXRlZCBwYWdlIGZsYWdzXQogIDEuIEVSUk9SICAgICBJTyBlcnJvciBvY2N1cnJlZAogIDMuIFVQVE9EQVRFICBwYWdlIGhhcyB1cC10by1kYXRlIGRhdGEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vcmVtYXBfZmlsZV9wYWdlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3ZtL3JlbWFwX2ZpbGVfcGFnZXMudHh0CmluZGV4IDU2MGU0MzYuLmY2MDkxNDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vcmVtYXBfZmlsZV9wYWdlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9yZW1hcF9maWxlX3BhZ2VzLnR4dApAQCAtMTgsMTAgKzE4LDkgQEAKIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gVGhpcyB1c2UtY2FzZSBpcyBub3QgY3JpdGljYWwgYW55bW9yZSBzaW5jZSA2NC1iaXQKIHN5c3RlbXMgYXJlIHdpZGVseSBhdmFpbGFibGUuCiAKLVRoZSBwbGFuIGlzIHRvIGRlcHJlY2F0ZSB0aGUgc3lzY2FsbCBhbmQgcmVwbGFjZSBpdCB3aXRoIGFuIGVtdWxhdGlvbi4KLVRoZSBlbXVsYXRpb24gd2lsbCBjcmVhdGUgbmV3IFZNQXMgaW5zdGVhZCBvZiBub25saW5lYXIgbWFwcGluZ3MuIEl0J3MKLWdvaW5nIHRvIHdvcmsgc2xvd2VyIGZvciByYXJlIHVzZXJzIG9mIHJlbWFwX2ZpbGVfcGFnZXMoKSBidXQgQUJJIGlzCi1wcmVzZXJ2ZWQuCitUaGUgc3lzY2FsbCBpcyBkZXByZWNhdGVkIGFuZCByZXBsYWNlZCBpdCB3aXRoIGFuIGVtdWxhdGlvbiBub3cuIFRoZQorZW11bGF0aW9uIGNyZWF0ZXMgbmV3IFZNQXMgaW5zdGVhZCBvZiBub25saW5lYXIgbWFwcGluZ3MuIEl0J3MgZ29pbmcgdG8KK3dvcmsgc2xvd2VyIGZvciByYXJlIHVzZXJzIG9mIHJlbWFwX2ZpbGVfcGFnZXMoKSBidXQgQUJJIGlzIHByZXNlcnZlZC4KIAogT25lIHNpZGUgZWZmZWN0IG9mIGVtdWxhdGlvbiAoYXBhcnQgZnJvbSBwZXJmb3JtYW5jZSkgaXMgdGhhdCB1c2VyIGNhbiBoaXQKIHZtLm1heF9tYXBfY291bnQgbGltaXQgbW9yZSBlYXNpbHkgZHVlIHRvIGFkZGl0aW9uYWwgVk1Bcy4gU2VlIGNvbW1lbnQgZm9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3g4Ni9lbnRyeV82NC50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Ni9lbnRyeV82NC50eHQKaW5kZXggNGExYzVjMi4uOTEzMmI4NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi94ODYvZW50cnlfNjQudHh0CisrKyBiL0RvY3VtZW50YXRpb24veDg2L2VudHJ5XzY0LnR4dApAQCAtNzgsOSArNzgsNiBAQAogCXhvcmwgJWVieCwlZWJ4CiAxOglyZXQKIAotYW5kIHRoZSB3aG9sZSBwYXJhbm9pZCBub24tcGFyYW5vaWQgbWFjcm8gY29tcGxleGl0eSBpcyBhYm91dCB3aGV0aGVyCi10byBzdWZmZXIgdGhhdCBSRE1TUiBjb3N0LgotCiBJZiB3ZSBhcmUgYXQgYW4gaW50ZXJydXB0IG9yIHVzZXItdHJhcC9nYXRlLWFsaWtlIGJvdW5kYXJ5IHRoZW4gd2UgY2FuCiB1c2UgdGhlIGZhc3RlciBjaGVjazogdGhlIHN0YWNrIHdpbGwgYmUgYSByZWxpYWJsZSBpbmRpY2F0b3Igb2YKIHdoZXRoZXIgU1dBUEdTIHdhcyBhbHJlYWR5IGRvbmU6IGlmIHdlIHNlZSB0aGF0IHdlIGFyZSBhIHNlY29uZGFyeQpAQCAtOTMsNiArOTAsMTUgQEAKIHN0YWNrIGJ1dCBiZWZvcmUgd2UgZXhlY3V0ZWQgU1dBUEdTLCB0aGVuIHRoZSBvbmx5IHNhZmUgd2F5IHRvIGNoZWNrCiBmb3IgR1MgaXMgdGhlIHNsb3dlciBtZXRob2Q6IHRoZSBSRE1TUi4KIAotU28gd2UgdHJ5IG9ubHkgdG8gbWFyayB0aG9zZSBlbnRyeSBtZXRob2RzICdwYXJhbm9pZCcgdGhhdCBhYnNvbHV0ZWx5Ci1uZWVkIHRoZSBtb3JlIGV4cGVuc2l2ZSBjaGVjayBmb3IgdGhlIEdTIGJhc2UgLSBhbmQgd2UgZ2VuZXJhdGUgYWxsCi0nbm9ybWFsJyBlbnRyeSBwb2ludHMgd2l0aCB0aGUgcmVndWxhciAoZmFzdGVyKSBlbnRyeSBtYWNyb3MuCitUaGVyZWZvcmUsIHN1cGVyLWF0b21pYyBlbnRyaWVzIChleGNlcHQgTk1JLCB3aGljaCBpcyBoYW5kbGVkIHNlcGFyYXRlbHkpCittdXN0IHVzZSBpZHRlbnRyeSB3aXRoIHBhcmFub2lkPTEgdG8gaGFuZGxlIGdzYmFzZSBjb3JyZWN0bHkuICBUaGlzCit0cmlnZ2VycyB0aHJlZSBtYWluIGJlaGF2aW9yIGNoYW5nZXM6CisKKyAtIEludGVycnVwdCBlbnRyeSB3aWxsIHVzZSB0aGUgc2xvd2VyIGdzYmFzZSBjaGVjay4KKyAtIEludGVycnVwdCBlbnRyeSBmcm9tIHVzZXIgbW9kZSB3aWxsIHN3aXRjaCBvZmYgdGhlIElTVCBzdGFjay4KKyAtIEludGVycnVwdCBleGl0IHRvIGtlcm5lbCBtb2RlIHdpbGwgbm90IGF0dGVtcHQgdG8gcmVzY2hlZHVsZS4KKworV2UgdHJ5IHRvIG9ubHkgdXNlIElTVCBlbnRyaWVzIGFuZCB0aGUgcGFyYW5vaWQgZW50cnkgY29kZSBmb3IgdmVjdG9ycwordGhhdCBhYnNvbHV0ZWx5IG5lZWQgdGhlIG1vcmUgZXhwZW5zaXZlIGNoZWNrIGZvciB0aGUgR1MgYmFzZSAtIGFuZCB3ZQorZ2VuZXJhdGUgYWxsICdub3JtYWwnIGVudHJ5IHBvaW50cyB3aXRoIHRoZSByZWd1bGFyIChmYXN0ZXIpIHBhcmFub2lkPTAKK3ZhcmlhbnQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQva2VybmVsLXN0YWNrcyBiL0RvY3VtZW50YXRpb24veDg2L3g4Nl82NC9rZXJuZWwtc3RhY2tzCmluZGV4IGEwMWVlYzUuLmUzYzhhNDkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24veDg2L3g4Nl82NC9rZXJuZWwtc3RhY2tzCisrKyBiL0RvY3VtZW50YXRpb24veDg2L3g4Nl82NC9rZXJuZWwtc3RhY2tzCkBAIC00MCw5ICs0MCwxMSBAQAogaW50ZXJydXB0LWdhdGUgZGVzY3JpcHRvci4gIFdoZW4gYW4gaW50ZXJydXB0IG9jY3VycyBhbmQgdGhlIGhhcmR3YXJlCiBsb2FkcyBzdWNoIGEgZGVzY3JpcHRvciwgdGhlIGhhcmR3YXJlIGF1dG9tYXRpY2FsbHkgc2V0cyB0aGUgbmV3IHN0YWNrCiBwb2ludGVyIGJhc2VkIG9uIHRoZSBJU1QgdmFsdWUsIHRoZW4gaW52b2tlcyB0aGUgaW50ZXJydXB0IGhhbmRsZXIuICBJZgotc29mdHdhcmUgd2FudHMgdG8gYWxsb3cgbmVzdGVkIElTVCBpbnRlcnJ1cHRzIHRoZW4gdGhlIGhhbmRsZXIgbXVzdAotYWRqdXN0IHRoZSBJU1QgdmFsdWVzIG9uIGVudHJ5IHRvIGFuZCBleGl0IGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyLgotKFRoaXMgaXMgb2NjYXNpb25hbGx5IGRvbmUsIGUuZy4gZm9yIGRlYnVnIGV4Y2VwdGlvbnMuKQordGhlIGludGVycnVwdCBjYW1lIGZyb20gdXNlciBtb2RlLCB0aGVuIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBwcm9sb2d1ZQord2lsbCBzd2l0Y2ggYmFjayB0byB0aGUgcGVyLXRocmVhZCBzdGFjay4gIElmIHNvZnR3YXJlIHdhbnRzIHRvIGFsbG93CituZXN0ZWQgSVNUIGludGVycnVwdHMgdGhlbiB0aGUgaGFuZGxlciBtdXN0IGFkanVzdCB0aGUgSVNUIHZhbHVlcyBvbgorZW50cnkgdG8gYW5kIGV4aXQgZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXIuICAoVGhpcyBpcyBvY2Nhc2lvbmFsbHkKK2RvbmUsIGUuZy4gZm9yIGRlYnVnIGV4Y2VwdGlvbnMuKQogCiBFdmVudHMgd2l0aCBkaWZmZXJlbnQgSVNUIGNvZGVzIChpLmUuIHdpdGggZGlmZmVyZW50IHN0YWNrcykgY2FuIGJlCiBuZXN0ZWQuICBGb3IgZXhhbXBsZSwgYSBkZWJ1ZyBpbnRlcnJ1cHQgY2FuIHNhZmVseSBiZSBpbnRlcnJ1cHRlZCBieSBhbgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAyZWJiMDU2Li5jNGE4NzAzIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMjcwLDEyICsyNzAsMTIgQEAKIEY6CWRyaXZlcnMvcG5wL3BucGFjcGkvCiBGOglpbmNsdWRlL2xpbnV4L2FjcGkuaAogRjoJaW5jbHVkZS9hY3BpLwotRjoJRG9jdW1lbnRhdGlvbi9hY3BpCitGOglEb2N1bWVudGF0aW9uL2FjcGkvCiBGOglEb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy1hY3BpCiBGOglkcml2ZXJzL3BjaS8qYWNwaSoKIEY6CWRyaXZlcnMvcGNpLyovKmFjcGkqCiBGOglkcml2ZXJzL3BjaS8qLyovKmFjcGkqCi1GOgl0b29scy9wb3dlci9hY3BpCitGOgl0b29scy9wb3dlci9hY3BpLwogCiBBQ1BJIENPTVBPTkVOVCBBUkNISVRFQ1RVUkUgKEFDUElDQSkKIE06CVJvYmVydCBNb29yZSA8cm9iZXJ0Lm1vb3JlQGludGVsLmNvbT4KQEAgLTU2Myw2ICs1NjMsMTIgQEAKIEw6CWxpbnV4LWFscGhhQHZnZXIua2VybmVsLm9yZwogRjoJYXJjaC9hbHBoYS8KIAorQUxURVJBIE1BSUxCT1ggRFJJVkVSCitNOglMZXkgRm9vbiBUYW4gPGxmdGFuQGFsdGVyYS5jb20+CitMOgluaW9zMi1kZXZAbGlzdHMucm9ja2V0Ym9hcmRzLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL21haWxib3gvbWFpbGJveC1hbHRlcmEuYworCiBBTFRFUkEgVFJJUExFIFNQRUVEIEVUSEVSTkVUIERSSVZFUgogTToJVmluY2UgQnJpZGdlcnMgPHZicmlkZ2VyQG9wZW5zb3VyY2UuYWx0ZXJhLmNvbT4KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKQEAgLTY1OSw2ICs2NjUsMTMgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbWVkaWEvaTJjL2FkOTM4OWIqCiAKK0FOQUxPRyBERVZJQ0VTIElOQyBBRFY3MTgwIERSSVZFUgorTToJTGFycy1QZXRlciBDbGF1c2VuIDxsYXJzQG1ldGFmb28uZGU+CitMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly9lei5hbmFsb2cuY29tL2NvbW11bml0eS9saW51eC1kZXZpY2UtZHJpdmVycworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL21lZGlhL2kyYy9hZHY3MTgwLmMKKwogQU5BTE9HIERFVklDRVMgSU5DIEFEVjc1MTEgRFJJVkVSCiBNOglIYW5zIFZlcmt1aWwgPGhhbnMudmVya3VpbEBjaXNjby5jb20+CiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTcwOCw2ICs3MjEsMTYgQEAKIEY6CWRyaXZlcnMvc3RhZ2luZy9paW8vKi9hZCoKIEY6CXN0YWdpbmcvaWlvL3RyaWdnZXIvaWlvLXRyaWctYmZpbi10aW1lci5jCiAKK0FORFJPSUQgRFJJVkVSUworTToJR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0aW9uLm9yZz4KK006CUFydmUgSGr4bm5lduVnIDxhcnZlQGFuZHJvaWQuY29tPgorTToJUmlsZXkgQW5kcmV3cyA8cmlhbmRyZXdzQGFuZHJvaWQuY29tPgorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dyZWdraC9zdGFnaW5nLmdpdAorTDoJZGV2ZWxAZHJpdmVyZGV2Lm9zdW9zbC5vcmcKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9hbmRyb2lkLworRjoJZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvCisKIEFPQSAoQXBwbGUgT25ib2FyZCBBdWRpbykgQUxTQSBEUklWRVIKIE06CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiBMOglsaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZwpAQCAtMTU3Niw2ICsxNTk5LDcgQEAKIEY6CWRyaXZlcnMvY2xvY2tzb3VyY2UvY2FkZW5jZV90dGNfdGltZXIuYwogRjoJZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1jYWRlbmNlLmMKIEY6CWRyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtYXJhc2FuLmMKK0Y6CWRyaXZlcnMvZWRhYy9zeW5vcHN5c19lZGFjLmMKIAogQVJNIFNNTVUgRFJJVkVSCiBNOglXaWxsIERlYWNvbiA8d2lsbC5kZWFjb25AYXJtLmNvbT4KQEAgLTE2NTAsNyArMTY3NCw2IEBACiBNOglOaWNrIEtvc3NpZmlkaXMgPG1pY2tmbGVtbUBnbWFpbC5jb20+CiBNOgkiTHVpcyBSLiBSb2RyaWd1ZXoiIDxtY2dyb2ZAZG8tbm90LXBhbmljLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwotTDoJYXRoNWstZGV2ZWxAbGlzdHMuYXRoNWsub3JnCiBXOglodHRwOi8vd2lyZWxlc3Mua2VybmVsLm9yZy9lbi91c2Vycy9Ecml2ZXJzL2F0aDVrCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvCkBAIC0zMjAzLDYgKzMyMjYsNyBAQAogWDoJRG9jdW1lbnRhdGlvbi9BQkkvCiBYOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvCiBYOglEb2N1bWVudGF0aW9uL1thLXpdW2Etel1fW0EtWl1bQS1aXS8KK1Q6CWdpdCBnaXQ6Ly9naXQubHduLm5ldC9saW51eC0yLjYuZ2l0IGRvY3MtbmV4dAogCiBET1VCTEVUQUxLIERSSVZFUgogTToJIkphbWVzIFIuIFZhbiBaYW5kdCIgPGpydkB2YW56YW5kdC5tdi5jb20+CkBAIC0zNDYyLDYgKzM0ODYsMTQgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvdHR5L3NlcmlhbC9kei4qCiAKK0UzWDAgUE9XRVIgQlVUVE9OIERSSVZFUgorTToJTW9yaXR6IEZpc2NoZXIgPG1vcml0ei5maXNjaGVyQGV0dHVzLmNvbT4KK0w6CXVzcnAtdXNlcnNAbGlzdHMuZXR0dXMuY29tCitXOglodHRwOi8vd3d3LmV0dHVzLmNvbQorUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL2lucHV0L21pc2MvZTN4MC1idXR0b24uYworRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L2UzeDAtYnV0dG9uLnR4dAorCiBFNDAwMCBNRURJQSBEUklWRVIKIE06CUFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCkBAIC0zNTAzLDYgKzM1MzUsOCBAQAogTToJTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQG9zZy5zYW1zdW5nLmNvbT4KIEw6CWxpbnV4LWVkYWNAdmdlci5rZXJuZWwub3JnCiBXOglibHVlc21va2Uuc291cmNlZm9yZ2UubmV0CitUOglnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYnAvYnAuZ2l0I2Zvci1uZXh0CitUOglnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL2dpdC9tY2hlaGFiL2xpbnV4LWVkYWMuZ2l0I2xpbnV4X25leHQKIFM6CVN1cHBvcnRlZAogRjoJRG9jdW1lbnRhdGlvbi9lZGFjLnR4dAogRjoJZHJpdmVycy9lZGFjLwpAQCAtNDg4Myw3ICs0OTE3LDcgQEAKIAogSU5URUdSSVRZIE1FQVNVUkVNRU5UIEFSQ0hJVEVDVFVSRSAoSU1BKQogTToJTWltaSBab2hhciA8em9oYXJAbGludXgudm5ldC5pYm0uY29tPgotTToJRG1pdHJ5IEthc2F0a2luIDxkLmthc2F0a2luQHNhbXN1bmcuY29tPgorTToJRG1pdHJ5IEthc2F0a2luIDxkbWl0cnkua2FzYXRraW5AZ21haWwuY29tPgogTDoJbGludXgtaW1hLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAogTDoJbGludXgtaW1hLXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBMOglsaW51eC1zZWN1cml0eS1tb2R1bGVAdmdlci5rZXJuZWwub3JnCkBAIC00OTQzLDYgKzQ5NzcsMTYgQEAKIEY6CWRyaXZlcnMvaW5wdXQvaW5wdXQtbXQuYwogSzoJXGIoQUJTfFNZTilfTVRfCiAKK0lOVEVMIEFTb0MgQkRXL0hTVyBEUklWRVJTCitNOglKaWUgWWFuZyA8eWFuZy5qaWVAbGludXguaW50ZWwuY29tPgorTDoJYWxzYS1kZXZlbEBhbHNhLXByb2plY3Qub3JnCitTOglTdXBwb3J0ZWQKK0Y6CXNvdW5kL3NvYy9pbnRlbC9zc3QtaGFzd2VsbCoKK0Y6CXNvdW5kL3NvYy9pbnRlbC9zc3QtZHNwKgorRjoJc291bmQvc29jL2ludGVsL3NzdC1maXJtd2FyZS5jCitGOglzb3VuZC9zb2MvaW50ZWwvYnJvYWR3ZWxsLmMKK0Y6CXNvdW5kL3NvYy9pbnRlbC9oYXN3ZWxsLmMKKwogSU5URUwgQzYwMCBTRVJJRVMgU0FTIENPTlRST0xMRVIgRFJJVkVSCiBNOglJbnRlbCBTQ1UgTGludXggc3VwcG9ydCA8aW50ZWwtbGludXgtc2N1QGludGVsLmNvbT4KIE06CUFydHVyIFBhc3praWV3aWN6IDxhcnR1ci5wYXN6a2lld2ljekBpbnRlbC5jb20+CkBAIC01ODMwLDYgKzU4NzQsMjEgQEAKIEY6CWRyaXZlcnMvbWlzYy9saXMzbHYwMmQvCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni9ocF9hY2NlbC5jCiAKK0xJVkUgUEFUQ0hJTkcKK006CUpvc2ggUG9pbWJvZXVmIDxqcG9pbWJvZUByZWRoYXQuY29tPgorTToJU2V0aCBKZW5uaW5ncyA8c2plbm5pbmdAcmVkaGF0LmNvbT4KK006CUppcmkgS29zaW5hIDxqa29zaW5hQHN1c2UuY3o+CitNOglWb2p0ZWNoIFBhdmxpayA8dm9qdGVjaEBzdXNlLmN6PgorUzoJTWFpbnRhaW5lZAorRjoJa2VybmVsL2xpdmVwYXRjaC8KK0Y6CWluY2x1ZGUvbGludXgvbGl2ZXBhdGNoLmgKK0Y6CWFyY2gveDg2L2luY2x1ZGUvYXNtL2xpdmVwYXRjaC5oCitGOglhcmNoL3g4Ni9rZXJuZWwvbGl2ZXBhdGNoLmMKK0Y6CURvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLWxpdmVwYXRjaAorRjoJc2FtcGxlcy9saXZlcGF0Y2gvCitMOglsaXZlLXBhdGNoaW5nQHZnZXIua2VybmVsLm9yZworVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qaWtvcy9saXZlcGF0Y2hpbmcuZ2l0CisKIExMQyAoODAyLjIpCiBNOglBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAZ2hvc3Rwcm90b2NvbHMubmV0PgogUzoJTWFpbnRhaW5lZApAQCAtNjEyOCw2ICs2MTg3LDEzIEBACiBGOglkcml2ZXJzL2h3bW9uL21heDY2OTcuYwogRjoJaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL21heDY2OTcuaAogCitNQVhJTSBNVUlDIENIQVJHRVIgRFJJVkVSUyBGT1IgRVhZTk9TIEJBU0VEIEJPQVJEUworTToJS3J6eXN6dG9mIEtvemxvd3NraSA8ay5rb3psb3dza2lAc2Ftc3VuZy5jb20+CitMOglsaW51eC1wbUB2Z2VyLmtlcm5lbC5vcmcKK1M6CVN1cHBvcnRlZAorRjoJZHJpdmVycy9wb3dlci9tYXgxNDU3N19jaGFyZ2VyLmMKK0Y6CWRyaXZlcnMvcG93ZXIvbWF4Nzc2OTNfY2hhcmdlci5jCisKIE1BWElSQURJTyBGTSBSQURJTyBSRUNFSVZFUiBEUklWRVIKIE06CUhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgogTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCkBAIC02MTU4LDE0ICs2MjI0LDYgQEAKIEY6CWluY2x1ZGUvdWFwaS9saW51eC9pdnR2KgogRjoJaW5jbHVkZS91YXBpL2xpbnV4L3V2Y3ZpZGVvLmgKIAotTUVESUFWSVNJT04gUFJPIE1PVklFIFNUVURJTyBEUklWRVIKLU06CUhhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgotTDoJbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCi1UOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWVkaWFfdHJlZS5naXQKLVc6CWh0dHA6Ly9saW51eHR2Lm9yZwotUzoJT2RkIEZpeGVzCi1GOglkcml2ZXJzL21lZGlhL3BhcnBvcnQvcG1zKgotCiBNRUdBUkFJRCBTQ1NJL1NBUyBEUklWRVJTCiBNOglLYXNoeWFwIERlc2FpIDxrYXNoeWFwLmRlc2FpQGF2YWdvdGVjaC5jb20+CiBNOglTdW1pdCBTYXhlbmEgPHN1bWl0LnNheGVuYUBhdmFnb3RlY2guY29tPgpAQCAtNjYxNCw2ICs2NjcyLDcgQEAKIEY6CWluY2x1ZGUvdWFwaS9saW51eC9pbi5oCiBGOglpbmNsdWRlL3VhcGkvbGludXgvbmV0LmgKIEY6CWluY2x1ZGUvdWFwaS9saW51eC9uZXRkZXZpY2UuaAorRjoJaW5jbHVkZS91YXBpL2xpbnV4L25ldF9uYW1lc3BhY2UuaAogRjoJdG9vbHMvbmV0LwogRjoJdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0LwogRjoJbGliL3JhbmRvbTMyLmMKQEAgLTY3MTgsNiArNjc3Nyw3IEBACiAKIE5GUywgU1VOUlBDLCBBTkQgTE9DS0QgQ0xJRU5UUwogTToJVHJvbmQgTXlrbGVidXN0IDx0cm9uZC5teWtsZWJ1c3RAcHJpbWFyeWRhdGEuY29tPgorTToJQW5uYSBTY2h1bWFrZXIgPGFubmEuc2NodW1ha2VyQG5ldGFwcC5jb20+CiBMOglsaW51eC1uZnNAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vY2xpZW50LmxpbnV4LW5mcy5vcmcKIFQ6CWdpdCBnaXQ6Ly9naXQubGludXgtbmZzLm9yZy9wcm9qZWN0cy90cm9uZG15L2xpbnV4LW5mcy5naXQKQEAgLTcwNTIsMTEgKzcxMTIsMTIgQEAKIAogT1BFTlZTV0lUQ0gKIE06CVByYXZpbiBTaGVsYXIgPHBzaGVsYXJAbmljaXJhLmNvbT4KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIEw6CWRldkBvcGVudnN3aXRjaC5vcmcKIFc6CWh0dHA6Ly9vcGVudnN3aXRjaC5vcmcKLVQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvcHNoZWxhci9vcGVudnN3aXRjaC5naXQKIFM6CU1haW50YWluZWQKIEY6CW5ldC9vcGVudnN3aXRjaC8KK0Y6CWluY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCiAKIE9QTDQgRFJJVkVSCiBNOglDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4KQEAgLTcyNTQsNiArNzMxNSwxNCBAQAogRjoJYXJjaC94ODYvcGNpLwogRjoJYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCiAKK1BDSSBEUklWRVIgRk9SIEFSTSBWRVJTQVRJTEUgUExBVEZPUk0KK006CVJvYiBIZXJyaW5nIDxyb2JoQGtlcm5lbC5vcmc+CitMOglsaW51eC1wY2lAdmdlci5rZXJuZWwub3JnCitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wY2kvdmVyc2F0aWxlLnR4dAorRjoJZHJpdmVycy9wY2kvaG9zdC9wY2ktdmVyc2F0aWxlLmMKKwogUENJIERSSVZFUiBGT1IgQVBQTElFRE1JQ1JPIFhHRU5FCiBNOglUYW5tYXkgSW5hbWRhciA8dGluYW1kYXJAYXBtLmNvbT4KIEw6CWxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTc4NTUsMTQgKzc5MjQsNiBAQAogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC8KIAotUVVJQ0tDQU0gUEFSQUxMRUwgUE9SVCBXRUJDQU1TCi1NOglIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KLUw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwotVDoJZ2l0IGdpdDovL2xpbnV4dHYub3JnL21lZGlhX3RyZWUuZ2l0Ci1XOglodHRwOi8vbGludXh0di5vcmcKLVM6CU9kZCBGaXhlcwotRjoJZHJpdmVycy9tZWRpYS9wYXJwb3J0LyotcWNhbSoKLQogUkFET1MgQkxPQ0sgREVWSUNFIChSQkQpCiBNOglZZWh1ZGEgU2FkZWggPHllaHVkYUBpbmt0YW5rLmNvbT4KIE06CVNhZ2UgV2VpbCA8c2FnZUBpbmt0YW5rLmNvbT4KQEAgLTgwNTEsNiArODExMiwxMyBAQAogRjoJRG9jdW1lbnRhdGlvbi9yZmtpbGwudHh0CiBGOgluZXQvcmZraWxsLwogCitSSEFTSFRBQkxFCitNOglUaG9tYXMgR3JhZiA8dGdyYWZAc3V1Zy5jaD4KK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWxpYi9yaGFzaHRhYmxlLmMKK0Y6CWluY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oCisKIFJJQ09IIFNNQVJUTUVESUEvWEQgRFJJVkVSCiBNOglNYXhpbSBMZXZpdHNreSA8bWF4aW1sZXZpdHNreUBnbWFpbC5jb20+CiBTOglNYWludGFpbmVkCkBAIC04MzkzLDEyICs4NDYxLDYgQEAKIEY6CWtlcm5lbC90aW1lL3RpbWUqLmMKIEY6CWtlcm5lbC90aW1lL250cC5jCiAKLVRMRzIzMDAgVklERU80TElOVVgtMiBEUklWRVIKLU06CUh1YW5nIFNoaWppZSA8c2hpamllOEBnbWFpbC5jb20+Ci1NOglIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KLVM6CU9kZCBGaXhlcwotRjoJZHJpdmVycy9tZWRpYS91c2IvdGxnMjMwMC8KLQogU0MxMjAwIFdEVCBEUklWRVIKIE06CVp3YW5lIE13YWlrYW1ibyA8endhbmVtQGdtYWlsLmNvbT4KIFM6CU1haW50YWluZWQKQEAgLTg3NjQsNiArODgyNiwxNSBAQAogRjoJZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9kYXZpbmNpLwogRjoJaW5jbHVkZS9tZWRpYS9kYXZpbmNpLwogCitUSSBBTTQzN1ggVlBGRSBEUklWRVIKK006CUxhZCwgUHJhYmhha2FyIDxwcmFiaGFrYXIuY3NlbmdnQGdtYWlsLmNvbT4KK0w6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL2xpbnV4dHYub3JnLworUToJaHR0cDovL3BhdGNod29yay5saW51eHR2Lm9yZy9wcm9qZWN0L2xpbnV4LW1lZGlhL2xpc3QvCitUOglnaXQgZ2l0Oi8vbGludXh0di5vcmcvbWhhZGxpL3Y0bC1kdmItZGF2aW5jaV9kZXZpY2VzLmdpdAorUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbTQzN3gvCisKIFNJUyAxOTAgRVRIRVJORVQgRFJJVkVSCiBNOglGcmFuY29pcyBSb21pZXUgPHJvbWlldUBmci56b3JlaWwuY29tPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpAQCAtODg0NSw2ICs4OTE2LDggQEAKIEY6CWluY2x1ZGUvbWVkaWEvc21pYXBwLmgKIEY6CWRyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC1wbGwuYwogRjoJZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwLXBsbC5oCitGOglpbmNsdWRlL3VhcGkvbGludXgvc21pYXBwLmgKK0Y6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tZWRpYS9pMmMvbm9raWEsc21pYS50eHQKIAogU01NNjY1IEhBUkRXQVJFIE1PTklUT1IgRFJJVkVSCiBNOglHdWVudGVyIFJvZWNrIDxsaW51eEByb2Vjay11cy5uZXQ+CkBAIC04OTExLDYgKzg5ODQsNyBAQAogTToJQmx1ZWNoZXJyeSBNYWludGFpbmVycyA8bWFpbnRhaW5lcnNAYmx1ZWNoZXJyeWR2ci5jb20+CiBNOglBbmRyZXkgVXRraW4gPGFuZHJleS51dGtpbkBjb3JwLmJsdWVjaGVycnkubmV0PgogTToJQW5kcmV5IFV0a2luIDxhbmRyZXkua3JpZWdlci51dGtpbkBnbWFpbC5jb20+CitNOglJc21hZWwgTHVjZW5vIDxpc21hZWxAaW9kZXYuY28udWs+CiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvCkBAIC05MjIzLDYgKzkyOTcsMTMgQEAKIEY6CWFyY2gvbTY4ay9pbmNsdWRlL2FzbS9zdW4zKgogRjoJZHJpdmVycy9uZXQvZXRoZXJuZXQvaTgyNXh4L3N1bjMqCiAKK1NVTjRJIExPVyBSRVMgQURDIEFUVEFDSEVEIFRBQkxFVCBLRVlTIERSSVZFUgorTToJSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KK0w6CWxpbnV4LWlucHV0QHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2lucHV0L3N1bjRpLWxyYWRjLWtleXMudHh0CitGOglkcml2ZXJzL2lucHV0L2tleWJvYXJkL3N1bjRpLWxyYWRjLWtleXMuYworCiBTVU5EQU5DRSBORVRXT1JLIERSSVZFUgogTToJRGVuaXMgS2lyamFub3YgPGtkYUBsaW51eC1wb3dlcnBjLm9yZz4KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKQEAgLTkyMzEsNyArOTMxMiw2IEBACiAKIFNVUEVSSAogTDoJbGludXgtc2hAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd3d3LmxpbnV4LXNoLm9yZwogUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtc2gvbGlzdC8KIFM6CU9ycGhhbgogRjoJRG9jdW1lbnRhdGlvbi9zaC8KQEAgLTk2MTAsNiArOTY5MCwxMyBAQAogRjoJZHJpdmVycy9yZWd1bGF0b3IvbHA4Nzg4LSouYwogRjoJaW5jbHVkZS9saW51eC9tZmQvbHA4Nzg4Ki5oCiAKK1RJIE5FVENQIEVUSEVSTkVUIERSSVZFUgorTToJV2luZ21hbiBLd29rIDx3LWt3b2syQHRpLmNvbT4KK006CU11cmFsaSBLYXJpY2hlcmkgPG0ta2FyaWNoZXJpMkB0aS5jb20+CitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOglkcml2ZXJzL25ldC9ldGhlcm5ldC90aS9uZXRjcCoKKwogVEkgVFdMNDAzMCBTRVJJRVMgU09DIENPREVDIERSSVZFUgogTToJUGV0ZXIgVWpmYWx1c2kgPHBldGVyLnVqZmFsdXNpQHRpLmNvbT4KIEw6CWFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCkBAIC05NzMwLDEzICs5ODE3LDIxIEBACiAKIFRQTSBERVZJQ0UgRFJJVkVSCiBNOglQZXRlciBIdWV3ZSA8cGV0ZXJodWV3ZUBnbXguZGU+Ci1NOglBc2hsZXkgTGFpIDxhc2hsZXlAYXNobGV5bGFpLmNvbT4KIE06CU1hcmNlbCBTZWxob3JzdCA8dHBtZGRAc2VsaG9yc3QubmV0PgogVzoJaHR0cDovL3RwbWRkLnNvdXJjZWZvcmdlLm5ldAogTDoJdHBtZGQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK1E6CWdpdCBnaXQ6Ly9naXRodWIuY29tL1BldGVySHVld2UvbGludXgtdHBtZGQuZ2l0CitUOglodHRwczovL2dpdGh1Yi5jb20vUGV0ZXJIdWV3ZS9saW51eC10cG1kZAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9jaGFyL3RwbS8KIAorVFBNIElCTV9WVFBNIERFVklDRSBEUklWRVIKK006CUFzaGxleSBMYWkgPGFzaGxleWRsYWlAZ21haWwuY29tPgorVzoJaHR0cDovL3RwbWRkLnNvdXJjZWZvcmdlLm5ldAorTDoJdHBtZGQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvY2hhci90cG0vdHBtX2libXZ0cG0qCisKIFRSQUNJTkcKIE06CVN0ZXZlbiBSb3N0ZWR0IDxyb3N0ZWR0QGdvb2RtaXMub3JnPgogTToJSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CkBAIC0xMDE2Niw2ICsxMDI2MSw3IEBACiBNOgkiSGFucyBKLiBLb2NoIiA8aGprQGhhbnNqa29jaC5kZT4KIE06CUdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQGxpbnV4Zm91bmRhdGlvbi5vcmc+CiBTOglNYWludGFpbmVkCitUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2dyZWdraC9jaGFyLW1pc2MuZ2l0CiBGOglEb2N1bWVudGF0aW9uL0RvY0Jvb2svdWlvLWhvd3RvLnRtcGwKIEY6CWRyaXZlcnMvdWlvLwogRjoJaW5jbHVkZS9saW51eC91aW8qLmgKQEAgLTEwNjQ4LDYgKzEwNzQ0LDcgQEAKIEw6CWxpbnV4LXh0ZW5zYUBsaW51eC14dGVuc2Eub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3NwaS9zcGkteHRlbnNhLXh0ZnBnYS5jCitGOglzb3VuZC9zb2MveHRlbnNhL3h0ZnBnYS1pMnMuYwogCiBZQU0gRFJJVkVSIEZPUiBBWC4yNQogTToJSmVhbi1QYXVsIFJvdWJlbGF0IDxqcHJAZjZmYmIub3JnPgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA5NWEwZTgyLi41ZmEyZTMwIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAzCiBQQVRDSExFVkVMID0gMTkKIFNVQkxFVkVMID0gMAotRVhUUkFWRVJTSU9OID0gLXJjNgorRVhUUkFWRVJTSU9OID0KIE5BTUUgPSBEaXNlYXNlZCBOZXd0CiAKICMgKkRPQ1VNRU5UQVRJT04qCkBAIC03MjYsMTAgKzcyNiwxNCBAQAogZW5kaWYKIAogaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgoraWZuZGVmIENDX0ZMQUdTX0ZUUkFDRQorQ0NfRkxBR1NfRlRSQUNFIDo9IC1wZworZW5kaWYKK2V4cG9ydCBDQ19GTEFHU19GVFJBQ0UKIGlmZGVmIENPTkZJR19IQVZFX0ZFTlRSWQogQ0NfVVNJTkdfRkVOVFJZCTo9ICQoY2FsbCBjYy1vcHRpb24sIC1tZmVudHJ5IC1EQ0NfVVNJTkdfRkVOVFJZKQogZW5kaWYKLUtCVUlMRF9DRkxBR1MJKz0gLXBnICQoQ0NfVVNJTkdfRkVOVFJZKQorS0JVSUxEX0NGTEFHUwkrPSAkKENDX0ZMQUdTX0ZUUkFDRSkgJChDQ19VU0lOR19GRU5UUlkpCiBLQlVJTERfQUZMQUdTCSs9ICQoQ0NfVVNJTkdfRkVOVFJZKQogaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCiAJaWZkZWYgQ09ORklHX0hBVkVfQ19SRUNPUkRNQ09VTlQKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZDhmOWI3ZS4uYTlhMTE5NSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTQ1LDcgKzQ1LDcgQEAKICNkZWZpbmUgUFRSU19QRVJfUE1ECSgxVUwgPDwgKFBBR0VfU0hJRlQtMykpCiAjZGVmaW5lIFBUUlNfUEVSX1BHRAkoMVVMIDw8IChQQUdFX1NISUZULTMpKQogI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoVEFTS19TSVpFIC8gUEdESVJfU0laRSkKLSNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTBVTAogCiAvKiBOdW1iZXIgb2YgcG9pbnRlcnMgdGhhdCBmaXQgb24gYSBwYWdlOiAgdGhpcyB3aWxsIGdvIGF3YXkuICovCiAjZGVmaW5lIFBUUlNfUEVSX1BBR0UJKDFVTCA8PCAoUEFHRV9TSElGVC0zKSkKQEAgLTczLDcgKzczLDYgQEAKIC8qIC4uIGFuZCB0aGVzZSBhcmUgb3VycyAuLi4gKi8KICNkZWZpbmUgX1BBR0VfRElSVFkJMHgyMDAwMAogI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDQwMDAwCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHg4MDAwMAkvKiBzZXQ6cGFnZWNhY2hlLCB1bnNldDpzd2FwICovCiAKIC8qCiAgKiBOT1RFISBUaGUgImFjY2Vzc2VkIiBiaXQgaXNuJ3QgbmVjZXNzYXJpbHkgZXhhY3Q6ICBpdCBjYW4gYmUga2VwdCBleGFjdGx5CkBAIC0yNjgsNyArMjY3LDYgQEAKIGV4dGVybiBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCQl7IHJldHVybiAhKHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZPVyk7IH0KIGV4dGVybiBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQogZXh0ZXJuIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9Ci1leHRlcm4gaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9CiBleHRlcm4gaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpCXsgcmV0dXJuIDA7IH0KIAogZXh0ZXJuIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRk9XOyByZXR1cm4gcHRlOyB9CkBAIC0zNDUsMTEgKzM0Myw2IEBACiAjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKIAotI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKQkocHRlX3ZhbChwdGUpID4+IDMyKQotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkoKHB0ZV90KSB7ICgob2ZmKSA8PCAzMikgfCBfUEFHRV9GSUxFIH0pCi0KLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMzIKLQogI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCiAjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9tbS9mYXVsdC5jIGIvYXJjaC9hbHBoYS9tbS9mYXVsdC5jCmluZGV4IDk4ODM4YTAuLjlkMGFjMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvbW0vZmF1bHQuYworKysgYi9hcmNoL2FscGhhL21tL2ZhdWx0LmMKQEAgLTE1Niw2ICsxNTYsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDZiMGI3ZjdlLi5mZmVkM2IyIDEwMDY0NAotLS0gYS9hcmNoL2FyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9hcmMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC02MSw3ICs2MSw2IEBACiAjZGVmaW5lIF9QQUdFX1dSSVRFICAgICAgICAgKDE8PDQpCS8qIFBhZ2UgaGFzIHVzZXIgd3JpdGUgcGVybSAoSCkgKi8KICNkZWZpbmUgX1BBR0VfUkVBRCAgICAgICAgICAoMTw8NSkJLyogUGFnZSBoYXMgdXNlciByZWFkIHBlcm0gKEgpICovCiAjZGVmaW5lIF9QQUdFX01PRElGSUVEICAgICAgKDE8PDYpCS8qIFBhZ2UgbW9kaWZpZWQgKGRpcnR5KSAoUykgKi8KLSNkZWZpbmUgX1BBR0VfRklMRSAgICAgICAgICAoMTw8NykJLyogcGFnZSBjYWNoZS8gc3dhcCAoUykgKi8KICNkZWZpbmUgX1BBR0VfR0xPQkFMICAgICAgICAoMTw8OCkJLyogUGFnZSBpcyBnbG9iYWwgKEgpICovCiAjZGVmaW5lIF9QQUdFX1BSRVNFTlQgICAgICAgKDE8PDEwKQkvKiBUTEIgZW50cnkgaXMgdmFsaWQgKEgpICovCiAKQEAgLTczLDcgKzcyLDYgQEAKICNkZWZpbmUgX1BBR0VfUkVBRCAgICAgICAgICAoMTw8MykJLyogUGFnZSBoYXMgdXNlciByZWFkIHBlcm0gKEgpICovCiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VEICAgICAgKDE8PDQpCS8qIFBhZ2UgaXMgYWNjZXNzZWQgKFMpICovCiAjZGVmaW5lIF9QQUdFX01PRElGSUVEICAgICAgKDE8PDUpCS8qIFBhZ2UgbW9kaWZpZWQgKGRpcnR5KSAoUykgKi8KLSNkZWZpbmUgX1BBR0VfRklMRSAgICAgICAgICAoMTw8NikJLyogcGFnZSBjYWNoZS8gc3dhcCAoUykgKi8KICNkZWZpbmUgX1BBR0VfR0xPQkFMICAgICAgICAoMTw8OCkJLyogUGFnZSBpcyBnbG9iYWwgKEgpICovCiAjZGVmaW5lIF9QQUdFX1BSRVNFTlQgICAgICAgKDE8PDkpCS8qIFRMQiBlbnRyeSBpcyB2YWxpZCAoSCkgKi8KICNkZWZpbmUgX1BBR0VfU0hBUkVEX0NPREUgICAoMTw8MTEpCS8qIFNoYXJlZCBDb2RlIHBhZ2Ugd2l0aCBjbW4gdmFkZHIKQEAgLTIxMyw3ICsyMTEsNyBAQAogICogTm8gc3BlY2lhbCByZXF1aXJlbWVudHMgZm9yIGxvd2VzdCB2aXJ0dWFsIGFkZHJlc3Mgd2UgcGVybWl0IGFueSB1c2VyIHNwYWNlCiAgKiBtYXBwaW5nIHRvIGJlIG1hcHBlZCBhdC4KICAqLwotI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MgICAgICAwCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUyAgICAgIDBVTAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0yNjgsMTUgKzI2Niw2IEBACiAJcHRlOwkJCQkJCQkJXAogfSkKIAotLyogVEJEOiBOb24gbGluZWFyIG1hcHBpbmcgc3R1ZmYgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRTsKLX0KLQotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkzMAotI2RlZmluZSBwZ29mZl90b19wdGUoeCkgICAgICAgICBfX3B0ZSh4KQotI2RlZmluZSBwdGVfdG9fcGdvZmYoeCkJCShwdGVfdmFsKHgpID4+IDIpCiAjZGVmaW5lIHB0ZV9wZm4ocHRlKQkJKHB0ZV92YWwocHRlKSA+PiBQQUdFX1NISUZUKQogI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkJKF9fcHRlKCgocGZuKSA8PCBQQUdFX1NISUZUKSB8IHBncHJvdF92YWwocHJvdCkpKQogI2RlZmluZSBfX3B0ZV9pbmRleChhZGRyKQkoKChhZGRyKSA+PiBQQUdFX1NISUZUKSAmIChQVFJTX1BFUl9QVEUgLSAxKSkKQEAgLTM2NCw3ICszNTMsNyBAQAogCiAvKiBFbmNvZGUgc3dhcCB7dHlwZSxvZmZ9IHR1cGxlIGludG8gUFRFCiAgKiBXZSByZXNlcnZlIDEzIGJpdHMgZm9yIDUtYml0IEB0eXBlLCBrZWVwaW5nIGJpdHMgMTItNSB6ZXJvLCBlbnN1cmluZyB0aGF0Ci0gKiBib3RoIFBBR0VfRklMRSBhbmQgUEFHRV9QUkVTRU5UIGFyZSB6ZXJvIGluIGEgUFRFIGhvbGRpbmcgc3dhcCAiaWRlbnRpZmllciIKKyAqIFBBR0VfUFJFU0VOVCBpcyB6ZXJvIGluIGEgUFRFIGhvbGRpbmcgc3dhcCAiaWRlbnRpZmllciIKICAqLwogI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmYpCSgoc3dwX2VudHJ5X3QpIHsgXAogCQkJCQkoKHR5cGUpICYgMHgxZikgfCAoKG9mZikgPDwgMTMpIH0pCmRpZmYgLS1naXQgYS9hcmNoL2FyYy9tbS9mYXVsdC5jIGIvYXJjaC9hcmMvbW0vZmF1bHQuYwppbmRleCA2ZjdlM2E2Li41NjNjYjI3IDEwMDY0NAotLS0gYS9hcmNoL2FyYy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvYXJjL21tL2ZhdWx0LmMKQEAgLTE2MSw2ICsxNjEsOCBAQAogCiAJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQlnb3RvIGJhZF9hcmVhOwogCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQlnb3RvIGRvX3NpZ2J1czsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggOTdkMDdlZC4uMDg1MGZjMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0yOSw2ICsyOSw3IEBACiAJc2VsZWN0IEhBTkRMRV9ET01BSU5fSVJRCiAJc2VsZWN0IEhBUkRJUlFTX1NXX1JFU0VORAogCXNlbGVjdCBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMIGlmIChBRUFCSSAmJiAhT0FCSV9DT01QQVQpCisJc2VsZWN0IEhBVkVfQVJDSF9CSVRSRVZFUlNFIGlmIChDUFVfMzJ2N00gfHwgQ1BVXzMydjcpICYmICFDUFVfMzJ2NgogCXNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTCBpZiAhWElQX0tFUk5FTAogCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgogCXNlbGVjdCBIQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVIgaWYgKEFFQUJJICYmICFPQUJJX0NPTVBBVCkKQEAgLTYwLDYgKzYxLDcgQEAKIAlzZWxlY3QgSEFWRV9NRU1CTE9DSwogCXNlbGVjdCBIQVZFX01PRF9BUkNIX1NQRUNJRklDIGlmIEFSTV9VTldJTkQKIAlzZWxlY3QgSEFWRV9PUFJPRklMRSBpZiAoSEFWRV9QRVJGX0VWRU5UUykKKwlzZWxlY3QgSEFWRV9PUFRQUk9CRVMgaWYgIVRIVU1CMl9LRVJORUwKIAlzZWxlY3QgSEFWRV9QRVJGX0VWRU5UUwogCXNlbGVjdCBIQVZFX1BFUkZfUkVHUwogCXNlbGVjdCBIQVZFX1BFUkZfVVNFUl9TVEFDS19EVU1QCkBAIC0xMjc5LDYgKzEyODEsOSBAQAogCWJvb2wKIAlkZXBlbmRzIG9uIFBDSQogCitjb25maWcgUENJX0RPTUFJTlNfR0VORVJJQworCWRlZl9ib29sIFBDSV9ET01BSU5TCisKIGNvbmZpZyBQQ0lfTkFOT0VOR0lORQogCWJvb2wgIkJTRSBuYW5vRW5naW5lIFBDSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gU0ExMTAwX05BTk9FTkdJTkUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCmluZGV4IDVkZGQ0OTAuLmEzMjRlY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZwpAQCAtMzk3LDYgKzM5NywxMyBAQAogCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIGRlYnVnIHByaW50IHJvdXRpbmVzIHRvIGRpcmVjdAogCQkgIHRoZWlyIG91dHB1dCB0byBVQVJUMSBzZXJpYWwgcG9ydCBvbiBLRVlTVE9ORTIgZGV2aWNlcy4KIAorCWNvbmZpZyBERUJVR19LUzg2OTVfVUFSVAorCQlib29sICJLUzg2OTUgRGVidWcgVUFSVCIKKwkJZGVwZW5kcyBvbiBBUkNIX0tTODY5NQorCQloZWxwCisJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CisJCSAgb24gS1M4Njk1LgorCiAJY29uZmlnIERFQlVHX01FU09OX1VBUlRBTwogCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyB2aWEgTWVzb242IFVBUlRBTyIKIAkJZGVwZW5kcyBvbiBBUkNIX01FU09OCkBAIC00OTYsNiArNTAzLDEzIEBACiAJCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBrZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBzdXBwb3J0CiAJCSAgb24gVnlicmlkIGJhc2VkIHBsYXRmb3Jtcy4KIAorCWNvbmZpZyBERUJVR19ORVRYX1VBUlQKKwkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIE5ldFggVUFSVCIKKwkJZGVwZW5kcyBvbiBBUkNIX05FVFgKKwkJaGVscAorCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAorCQkgIG9uIEhpbHNjaGVyIE5ldFggYmFzZWQgcGxhdGZvcm1zLgorCiAJY29uZmlnIERFQlVHX05PTUFESUtfVUFSVAogCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyBtZXNzYWdlcyB2aWEgTk9NQURJSyBVQVJUIgogCQlkZXBlbmRzIG9uIEFSQ0hfTk9NQURJSwpAQCAtNTIwLDYgKzUzNCwzMCBAQAogCQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQga2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgc3VwcG9ydAogCQkgIG9uIFRJLU5TUElSRSBDWCBtb2RlbHMuCiAKKwljb25maWcgREVCVUdfT01BUDFVQVJUMQorCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyB2aWEgT01BUDEgVUFSVDEiCisJCWRlcGVuZHMgb24gQVJDSF9PTUFQMQorCQlzZWxlY3QgREVCVUdfVUFSVF84MjUwCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICBvbiBPTUFQMSBiYXNlZCBwbGF0Zm9ybXMgKGV4Y2VwdCBPTUFQNzMwKSBvbiB0aGUgVUFSVDEuCisKKwljb25maWcgREVCVUdfT01BUDFVQVJUMgorCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyB2aWEgT01BUDEgVUFSVDIiCisJCWRlcGVuZHMgb24gQVJDSF9PTUFQMQorCQlzZWxlY3QgREVCVUdfVUFSVF84MjUwCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICBvbiBPTUFQMSBiYXNlZCBwbGF0Zm9ybXMgKGV4Y2VwdCBPTUFQNzMwKSBvbiB0aGUgVUFSVDIuCisKKwljb25maWcgREVCVUdfT01BUDFVQVJUMworCQlib29sICJLZXJuZWwgbG93LWxldmVsIGRlYnVnZ2luZyB2aWEgT01BUDEgVUFSVDMiCisJCWRlcGVuZHMgb24gQVJDSF9PTUFQMQorCQlzZWxlY3QgREVCVUdfVUFSVF84MjUwCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICBvbiBPTUFQMSBiYXNlZCBwbGF0Zm9ybXMgKGV4Y2VwdCBPTUFQNzMwKSBvbiB0aGUgVUFSVDMuCisKIAljb25maWcgREVCVUdfT01BUDJVQVJUMQogCQlib29sICJPTUFQMi8zLzQgVUFSVDEgKG9tYXAyLzMgc2RwIGJvYXJkcyBhbmQgc29tZSBvbWFwMyBib2FyZHMpIgogCQlkZXBlbmRzIG9uIEFSQ0hfT01BUDJQTFVTCkBAIC01NjIsNiArNjAwLDMwIEBACiAJCWRlcGVuZHMgb24gQVJDSF9PTUFQMlBMVVMKIAkJc2VsZWN0IERFQlVHX09NQVAyUExVU19VQVJUCiAKKwljb25maWcgREVCVUdfT01BUDdYWFVBUlQxCisJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHZpYSBPTUFQNzMwIFVBUlQxIgorCQlkZXBlbmRzIG9uIEFSQ0hfT01BUDczMAorCQlzZWxlY3QgREVCVUdfVUFSVF84MjUwCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICBvbiBPTUFQNzMwIGJhc2VkIHBsYXRmb3JtcyBvbiB0aGUgVUFSVDEuCisKKwljb25maWcgREVCVUdfT01BUDdYWFVBUlQyCisJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHZpYSBPTUFQNzMwIFVBUlQyIgorCQlkZXBlbmRzIG9uIEFSQ0hfT01BUDczMAorCQlzZWxlY3QgREVCVUdfVUFSVF84MjUwCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICBvbiBPTUFQNzMwIGJhc2VkIHBsYXRmb3JtcyBvbiB0aGUgVUFSVDIuCisKKwljb25maWcgREVCVUdfT01BUDdYWFVBUlQzCisJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHZpYSBPTUFQNzMwIFVBUlQzIgorCQlkZXBlbmRzIG9uIEFSQ0hfT01BUDczMAorCQlzZWxlY3QgREVCVUdfVUFSVF84MjUwCisJCWhlbHAKKwkJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IGtlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHN1cHBvcnQKKwkJICBvbiBPTUFQNzMwIGJhc2VkIHBsYXRmb3JtcyBvbiB0aGUgVUFSVDMuCisKIAljb25maWcgREVCVUdfVEk4MVhYVUFSVDEKIAkJYm9vbCAiS2VybmVsIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgbWVzc2FnZXMgdmlhIFRJODFYWCBVQVJUMSAodGk4MTQ4ZXZtKSIKIAkJZGVwZW5kcyBvbiBBUkNIX09NQVAyUExVUwpAQCAtMTAzMSwxNSArMTA5Myw2IEBACiAJCSAgVGhpcyBvcHRpb24gc2VsZWN0cyBVQVJUMCBvbiBWSUEvV29uZGVybWVkaWEgU3lzdGVtLW9uLWEtY2hpcAogCQkgIGRldmljZXMsIGluY2x1ZGluZyBWVDg1MDAsIFdNODUwNSwgV004NjUwIGFuZCBXTTg4NTAuCiAKLQljb25maWcgREVCVUdfTExfVUFSVF9OT05FCi0JCWJvb2wgIk5vIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgVUFSVCIKLQkJZGVwZW5kcyBvbiAhQVJDSF9NVUxUSVBMQVRGT1JNCi0JCWhlbHAKLQkJICBTYXkgWSBoZXJlIGlmIHlvdXIgcGxhdGZvcm0gZG9lc24ndCBwcm92aWRlIGEgVUFSVCBvcHRpb24KLQkJICBhYm92ZS4gVGhpcyByZWxpZXMgb24geW91ciBwbGF0Zm9ybSBjaG9vc2luZyB0aGUgcmlnaHQgVUFSVAotCQkgIGRlZmluaXRpb24gaW50ZXJuYWxseSBpbiBvcmRlciBmb3IgbG93LWxldmVsIGRlYnVnZ2luZyB0bwotCQkgIHdvcmsuCi0KIAljb25maWcgREVCVUdfSUNFRENDCiAJCWJvb2wgIktlcm5lbCBsb3ctbGV2ZWwgZGVidWdnaW5nIHZpYSBFbWJlZGRlZElDRSBEQ0MgY2hhbm5lbCIKIAkJaGVscApAQCAtMTE4Myw3ICsxMjM2LDkgQEAKIAkJCQkgREVCVUdfSU1YNlFfVUFSVCB8fCBcCiAJCQkJIERFQlVHX0lNWDZTTF9VQVJUIHx8IFwKIAkJCQkgREVCVUdfSU1YNlNYX1VBUlQKKwlkZWZhdWx0ICJkZWJ1Zy9rczg2OTUuUyIgaWYgREVCVUdfS1M4Njk1X1VBUlQKIAlkZWZhdWx0ICJkZWJ1Zy9tc20uUyIgaWYgREVCVUdfTVNNX1VBUlQgfHwgREVCVUdfUUNPTV9VQVJURE0KKwlkZWZhdWx0ICJkZWJ1Zy9uZXR4LlMiIGlmIERFQlVHX05FVFhfVUFSVAogCWRlZmF1bHQgImRlYnVnL29tYXAycGx1cy5TIiBpZiBERUJVR19PTUFQMlBMVVNfVUFSVAogCWRlZmF1bHQgImRlYnVnL3JlbmVzYXMtc2NpZi5TIiBpZiBERUJVR19SN1M3MjEwMF9TQ0lGMgogCWRlZmF1bHQgImRlYnVnL3JlbmVzYXMtc2NpZi5TIiBpZiBERUJVR19SQ0FSX0dFTjFfU0NJRjAKQEAgLTEyMDgsMTIgKzEyNjMsNyBAQAogCiAjIENvbXBhdGliaWxpdHkgb3B0aW9ucyBmb3IgUEwwMXgKIGNvbmZpZyBERUJVR19VQVJUX1BMMDFYCi0JZGVmX2Jvb2wgQVJDSF9FUDkzWFggfHwgXAotCQlBUkNIX0lOVEVHUkFUT1IgfHwgXAotCQlBUkNIX1NQRUFSM1hYIHx8IFwKLQkJQVJDSF9TUEVBUjZYWCB8fCBcCi0JCUFSQ0hfU1BFQVIxM1hYIHx8IFwKLQkJQVJDSF9WRVJTQVRJTEUKKwlib29sCiAKICMgQ29tcGF0aWJpbGl0eSBvcHRpb25zIGZvciA4MjUwCiBjb25maWcgREVCVUdfVUFSVF84MjUwCkBAIC0xMjI5LDYgKzEyNzksNyBAQAogCiBjb25maWcgREVCVUdfVUFSVF9QSFlTCiAJaGV4ICJQaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2YgZGVidWcgVUFSVCIKKwlkZWZhdWx0IDB4MDAxMDBhMDAgaWYgREVCVUdfTkVUWF9VQVJUCiAJZGVmYXVsdCAweDAxYzIwMDAwIGlmIERFQlVHX0RBVklOQ0lfRE14X1VBUlQwCiAJZGVmYXVsdCAweDAxYzI4MDAwIGlmIERFQlVHX1NVTlhJX1VBUlQwCiAJZGVmYXVsdCAweDAxYzI4NDAwIGlmIERFQlVHX1NVTlhJX1VBUlQxCkBAIC0xMjY5LDcgKzEzMjAsNiBAQAogCQkJCURFQlVHX1MzQzI0MTBfVUFSVDIpCiAJZGVmYXVsdCAweDc4MDAwMDAwIGlmIERFQlVHX0NOUzNYWFgKIAlkZWZhdWx0IDB4N2MwMDAzZjggaWYgRk9PVEJSSURHRQotCWRlZmF1bHQgMHg3ODAwMDAwMCBpZiBERUJVR19DTlMzWFhYCiAJZGVmYXVsdCAweDgwMDEwMDAwIGlmIERFQlVHX0FTTTkyNjBfVUFSVAogCWRlZmF1bHQgMHg4MDA3MDAwMCBpZiBERUJVR19JTVgyM19VQVJUCiAJZGVmYXVsdCAweDgwMDc0MDAwIGlmIERFQlVHX0lNWDI4X1VBUlQKQEAgLTEzMTAsMTIgKzEzNjAsMTcgQEAKIAlkZWZhdWx0IDB4ZmZlNDAwMDAgaWYgREVCVUdfUkNBUl9HRU4xX1NDSUYwCiAJZGVmYXVsdCAweGZmZTQyMDAwIGlmIERFQlVHX1JDQVJfR0VOMV9TQ0lGMgogCWRlZmF1bHQgMHhmZmYzNjAwMCBpZiBERUJVR19ISUdIQkFOS19VQVJUCisJZGVmYXVsdCAweGZmZmIwMDAwIGlmIERFQlVHX09NQVAxVUFSVDEgfHwgREVCVUdfT01BUDdYWFVBUlQxCisJZGVmYXVsdCAweGZmZmIwODAwIGlmIERFQlVHX09NQVAxVUFSVDIgfHwgREVCVUdfT01BUDdYWFVBUlQyCisJZGVmYXVsdCAweGZmZmI5ODAwIGlmIERFQlVHX09NQVAxVUFSVDMgfHwgREVCVUdfT01BUDdYWFVBUlQzCiAJZGVmYXVsdCAweGZmZmU4NjAwIGlmIERFQlVHX1VBUlRfQkNNNjNYWAogCWRlZmF1bHQgMHhmZmZmZjcwMCBpZiBBUkNIX0lPUDMzWAotCWRlcGVuZHMgb24gREVCVUdfTExfVUFSVF84MjUwIHx8IERFQlVHX0xMX1VBUlRfUEwwMVggfHwgXAorCWRlcGVuZHMgb24gQVJDSF9FUDkzWFggfHwgXAorCSAgICAgICAgREVCVUdfTExfVUFSVF84MjUwIHx8IERFQlVHX0xMX1VBUlRfUEwwMVggfHwgXAogCQlERUJVR19MTF9VQVJUX0VGTTMyIHx8IFwKIAkJREVCVUdfVUFSVF84MjUwIHx8IERFQlVHX1VBUlRfUEwwMVggfHwgREVCVUdfTUVTT05fVUFSVEFPIHx8IFwKLQkJREVCVUdfTVNNX1VBUlQgfHwgREVCVUdfUUNPTV9VQVJURE0gfHwgREVCVUdfUjdTNzIxMDBfU0NJRjIgfHwgXAorCQlERUJVR19NU01fVUFSVCB8fCBERUJVR19ORVRYX1VBUlQgfHwgXAorCQlERUJVR19RQ09NX1VBUlRETSB8fCBERUJVR19SN1M3MjEwMF9TQ0lGMiB8fCBcCiAJCURFQlVHX1JDQVJfR0VOMV9TQ0lGMCB8fCBERUJVR19SQ0FSX0dFTjFfU0NJRjIgfHwgXAogCQlERUJVR19SQ0FSX0dFTjJfU0NJRjAgfHwgREVCVUdfUkNBUl9HRU4yX1NDSUYyIHx8IFwKIAkJREVCVUdfUk1PQklMRV9TQ0lGQTAgfHwgREVCVUdfUk1PQklMRV9TQ0lGQTEgfHwgXApAQCAtMTMyNCw2ICsxMzc5LDcgQEAKIAogY29uZmlnIERFQlVHX1VBUlRfVklSVAogCWhleCAiVmlydHVhbCBiYXNlIGFkZHJlc3Mgb2YgZGVidWcgVUFSVCIKKwlkZWZhdWx0IDB4ZTAwMDBhMDAgaWYgREVCVUdfTkVUWF9VQVJUCiAJZGVmYXVsdCAweGUwMDEwZmUwIGlmIEFSQ0hfUlBDCiAJZGVmYXVsdCAweGUxMDAwMDAwIGlmIERFQlVHX01TTV9VQVJUCiAJZGVmYXVsdCAweGYwMDAwYmUwIGlmIEFSQ0hfRUJTQTExMApAQCAtMTM5MiwxOCArMTQ0OCwyMyBAQAogCWRlZmF1bHQgMHhmZWYwMDAwMCBpZiBBUkNIX0lYUDRYWCAmJiAhQ1BVX0JJR19FTkRJQU4KIAlkZWZhdWx0IDB4ZmVmMDAwMDMgaWYgQVJDSF9JWFA0WFggJiYgQ1BVX0JJR19FTkRJQU4KIAlkZWZhdWx0IDB4ZmVmMzYwMDAgaWYgREVCVUdfSElHSEJBTktfVUFSVAorCWRlZmF1bHQgMHhmZWZiMDAwMCBpZiBERUJVR19PTUFQMVVBUlQxIHx8IERFQlVHX09NQVA3WFhVQVJUMQorCWRlZmF1bHQgMHhmZWZiMDgwMCBpZiBERUJVR19PTUFQMVVBUlQyIHx8IERFQlVHX09NQVA3WFhVQVJUMgorCWRlZmF1bHQgMHhmZWZiOTgwMCBpZiBERUJVR19PTUFQMVVBUlQzIHx8IERFQlVHX09NQVA3WFhVQVJUMwogCWRlZmF1bHQgMHhmZWZmZjcwMCBpZiBBUkNIX0lPUDMzWAogCWRlZmF1bHQgMHhmZjAwMzAwMCBpZiBERUJVR19VMzAwX1VBUlQKIAlkZWZhdWx0IERFQlVHX1VBUlRfUEhZUyBpZiAhTU1VCiAJZGVwZW5kcyBvbiBERUJVR19MTF9VQVJUXzgyNTAgfHwgREVCVUdfTExfVUFSVF9QTDAxWCB8fCBcCiAJCURFQlVHX1VBUlRfODI1MCB8fCBERUJVR19VQVJUX1BMMDFYIHx8IERFQlVHX01FU09OX1VBUlRBTyB8fCBcCi0JCURFQlVHX01TTV9VQVJUIHx8IERFQlVHX1FDT01fVUFSVERNIHx8IERFQlVHX1MzQzI0WFhfVUFSVCB8fCBcCisJCURFQlVHX01TTV9VQVJUIHx8IERFQlVHX05FVFhfVUFSVCB8fCBcCisJCURFQlVHX1FDT01fVUFSVERNIHx8IERFQlVHX1MzQzI0WFhfVUFSVCB8fCBcCiAJCURFQlVHX1VBUlRfQkNNNjNYWCB8fCBERUJVR19BU005MjYwX1VBUlQKIAogY29uZmlnIERFQlVHX1VBUlRfODI1MF9TSElGVAogCWludCAiUmVnaXN0ZXIgb2Zmc2V0IHNoaWZ0IGZvciB0aGUgODI1MCBkZWJ1ZyBVQVJUIgogCWRlcGVuZHMgb24gREVCVUdfTExfVUFSVF84MjUwIHx8IERFQlVHX1VBUlRfODI1MAotCWRlZmF1bHQgMCBpZiBGT09UQlJJREdFIHx8IEFSQ0hfSU9QMzJYIHx8IERFQlVHX0JDTV81MzAxWAorCWRlZmF1bHQgMCBpZiBGT09UQlJJREdFIHx8IEFSQ0hfSU9QMzJYIHx8IERFQlVHX0JDTV81MzAxWCB8fCBcCisJCURFQlVHX09NQVA3WFhVQVJUMSB8fCBERUJVR19PTUFQN1hYVUFSVDIgfHwgREVCVUdfT01BUDdYWFVBUlQzCiAJZGVmYXVsdCAyCiAKIGNvbmZpZyBERUJVR19VQVJUXzgyNTBfV09SRApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCBjMTc4NWVlLi43Zjk5Y2Q2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtMjY2LDYgKzI2Niw3IEBACiAKICMgSWYgd2UgaGF2ZSBhIG1hY2hpbmUtc3BlY2lmaWMgZGlyZWN0b3J5LCB0aGVuIGluY2x1ZGUgaXQgaW4gdGhlIGJ1aWxkLgogY29yZS15CQkJCSs9IGFyY2gvYXJtL2tlcm5lbC8gYXJjaC9hcm0vbW0vIGFyY2gvYXJtL2NvbW1vbi8KK2NvcmUteQkJCQkrPSBhcmNoL2FybS9wcm9iZXMvCiBjb3JlLXkJCQkJKz0gYXJjaC9hcm0vbmV0LwogY29yZS15CQkJCSs9IGFyY2gvYXJtL2NyeXB0by8KIGNvcmUteQkJCQkrPSBhcmNoL2FybS9maXJtd2FyZS8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCmluZGV4IDY4YmU5MDEuLmM0MWE3OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwpAQCAtMTc4LDcgKzE3OCw3IEBACiAKIAkJLyoKIAkJICogU2V0IHVwIGEgcGFnZSB0YWJsZSBvbmx5IGlmIGl0IHdvbid0IG92ZXJ3cml0ZSBvdXJzZWxmLgotCQkgKiBUaGF0IG1lYW5zIHI0IDwgcGMgJiYgcjQgLSAxNmsgcGFnZSBkaXJlY3RvcnkgPiAmX2VuZC4KKwkJICogVGhhdCBtZWFucyByNCA8IHBjIHx8IHI0IC0gMTZrIHBhZ2UgZGlyZWN0b3J5ID4gJl9lbmQuCiAJCSAqIEdpdmVuIHRoYXQgcjQgPiAmX2VuZCBpcyBtb3N0IHVuZnJlcXVlbnQsIHdlIGFkZCBhIHJvdWdoCiAJCSAqIGFkZGl0aW9uYWwgMU1CIG9mIHJvb20gZm9yIGEgcG9zc2libGUgYXBwZW5kZWQgRFRCLgogCQkgKi8KQEAgLTI2MywxNiArMjYzLDM3IEBACiAJCSAqIE9LLi4uIExldCdzIGRvIHNvbWUgZnVua3kgYnVzaW5lc3MgaGVyZS4KIAkJICogSWYgd2UgZG8gaGF2ZSBhIERUQiBhcHBlbmRlZCB0byB6SW1hZ2UsIGFuZCB3ZSBkbyBoYXZlCiAJCSAqIGFuIEFUQUcgbGlzdCBhcm91bmQsIHdlIHdhbnQgdGhlIGxhdGVyIHRvIGJlIHRyYW5zbGF0ZWQKLQkJICogYW5kIGZvbGRlZCBpbnRvIHRoZSBmb3JtZXIgaGVyZS4gIFRvIGJlIG9uIHRoZSBzYWZlIHNpZGUsCi0JCSAqIGxldCdzIHRlbXBvcmFyaWx5IG1vdmUgIHRoZSBzdGFjayBhd2F5IGludG8gdGhlIG1hbGxvYwotCQkgKiBhcmVhLiAgTm8gR09UIGZpeHVwIGhhcyBvY2N1cnJlZCB5ZXQsIGJ1dCBub25lIG9mIHRoZQotCQkgKiBjb2RlIHdlJ3JlIGFib3V0IHRvIGNhbGwgdXNlcyBhbnkgZ2xvYmFsIHZhcmlhYmxlLgorCQkgKiBhbmQgZm9sZGVkIGludG8gdGhlIGZvcm1lciBoZXJlLiBObyBHT1QgZml4dXAgaGFzIG9jY3VycmVkCisJCSAqIHlldCwgYnV0IG5vbmUgb2YgdGhlIGNvZGUgd2UncmUgYWJvdXQgdG8gY2FsbCB1c2VzIGFueQorCQkgKiBnbG9iYWwgdmFyaWFibGUuCiAJCSovCi0JCWFkZAlzcCwgc3AsICMweDEwMDAwCisKKwkJLyogR2V0IHRoZSBpbml0aWFsIERUQiBzaXplICovCisJCWxkcglyNSwgW3I2LCAjNF0KKyNpZm5kZWYgX19BUk1FQl9fCisJCS8qIGNvbnZlcnQgdG8gbGl0dGxlIGVuZGlhbiAqLworCQllb3IJcjEsIHI1LCByNSwgcm9yICMxNgorCQliaWMJcjEsIHIxLCAjMHgwMGZmMDAwMAorCQltb3YJcjUsIHI1LCByb3IgIzgKKwkJZW9yCXI1LCByNSwgcjEsIGxzciAjOAorI2VuZGlmCisJCS8qIDUwJSBEVEIgZ3Jvd3RoIHNob3VsZCBiZSBnb29kIGVub3VnaCAqLworCQlhZGQJcjUsIHI1LCByNSwgbHNyICMxCisJCS8qIHByZXNlcnZlIDY0LWJpdCBhbGlnbm1lbnQgKi8KKwkJYWRkCXI1LCByNSwgIzcKKwkJYmljCXI1LCByNSwgIzcKKwkJLyogY2xhbXAgdG8gMzJLQiBtaW4gYW5kIDFNQiBtYXggKi8KKwkJY21wCXI1LCAjKDEgPDwgMTUpCisJCW1vdmxvCXI1LCAjKDEgPDwgMTUpCisJCWNtcAlyNSwgIygxIDw8IDIwKQorCQltb3ZoaQlyNSwgIygxIDw8IDIwKQorCQkvKiB0ZW1wb3JhcmlseSByZWxvY2F0ZSB0aGUgc3RhY2sgcGFzdCB0aGUgRFRCIHdvcmsgc3BhY2UgKi8KKwkJYWRkCXNwLCBzcCwgcjUKKwogCQlzdG1mZAlzcCEsIHtyMC1yMywgaXAsIGxyfQogCQltb3YJcjAsIHI4CiAJCW1vdglyMSwgcjYKLQkJc3ViCXIyLCBzcCwgcjYKKwkJbW92CXIyLCByNQogCQlibAlhdGFnc190b19mZHQKIAogCQkvKgpAQCAtMjg1LDExICszMDYsMTEgQEAKIAkJYmljCXIwLCByMCwgIzEKIAkJYWRkCXIwLCByMCwgIzB4MTAwCiAJCW1vdglyMSwgcjYKLQkJc3ViCXIyLCBzcCwgcjYKKwkJbW92CXIyLCByNQogCQlibGVxCWF0YWdzX3RvX2ZkdAogCiAJCWxkbWZkCXNwISwge3IwLXIzLCBpcCwgbHJ9Ci0JCXN1YglzcCwgc3AsICMweDEwMDAwCisJCXN1YglzcCwgc3AsIHI1CiAjZW5kaWYKIAogCQltb3YJcjgsIHI2CQkJQCB1c2UgdGhlIGFwcGVuZGVkIGRldmljZSB0cmVlCkBAIC0zMDYsNyArMzI3LDcgQEAKIAkJc3VicwlyMSwgcjUsIHIxCiAJCWFkZGhpCXI5LCByOSwgcjEKIAotCQkvKiBHZXQgdGhlIGR0YidzIHNpemUgKi8KKwkJLyogR2V0IHRoZSBjdXJyZW50IERUQiBzaXplICovCiAJCWxkcglyNSwgW3I2LCAjNF0KICNpZm5kZWYgX19BUk1FQl9fCiAJCS8qIGNvbnZlcnQgcjUgKGR0YiBzaXplKSB0byBsaXR0bGUgZW5kaWFuICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9hbTMzNXgtZXZtLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1ldm0uZHRzCmluZGV4IDU0ZjExOGMuLjY2MzQyNTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1ldm0uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2FtMzM1eC1ldm0uZHRzCkBAIC02NDgsNiArNjQ4LDcgQEAKIAkJdGkseC1wbGF0ZS1yZXNpc3RhbmNlID0gPDIwMD47CiAJCXRpLGNvb3JkaW5hdGUtcmVhZG91dHMgPSA8NT47CiAJCXRpLHdpcmUtY29uZmlnID0gPDB4MDAgMHgxMSAweDIyIDB4MzM+OworCQl0aSxjaGFyZ2UtZGVsYXkgPSA8MHg0MDA+OwogCX07CiAKIAlhZGMgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvYW0zNTE3LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9hbTM1MTcuZHRzaQppbmRleCA1YTQ1MmZkLi5jOTA3MjRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9hbTM1MTcuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9hbTM1MTcuZHRzaQpAQCAtMzEsNiArMzEsNyBAQAogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJCXJlZyA9IDwweDVjMDAwMDAwIDB4MzAwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw2NyA2OCA2OSA3MD47CisJCQlzeXNjb24gPSA8Jm9tYXAzX3NjbV9nZW5lcmFsPjsKIAkJCXRpLGRhdmluY2ktY3RybC1yZWctb2Zmc2V0ID0gPDB4MTAwMDA+OwogCQkJdGksZGF2aW5jaS1jdHJsLW1vZC1yZWctb2Zmc2V0ID0gPDA+OwogCQkJdGksZGF2aW5jaS1jdHJsLXJhbS1vZmZzZXQgPSA8MHgyMDAwMD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0LmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0LmR0c2kKaW5kZXggYjgxNjhmMS4uY2I2MDAxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQuZHRzaQpAQCAtNjEsOSArNjEsMTIgQEAKIAkJcmVnID0gPDB4MDM4MzAwMDAgMHgxMDA+OwogCQljbG9ja3MgPSA8JmNsb2NrX2F1ZHNzIEVYWU5PU19JMlNfQlVTPjsKIAkJY2xvY2stbmFtZXMgPSAiaWlzIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiaTJzX2NkY2xrMCI7CiAJCWRtYXMgPSA8JnBkbWEwIDEyPiwgPCZwZG1hMCAxMT4sIDwmcGRtYTAgMTA+OwogCQlkbWEtbmFtZXMgPSAidHgiLCAicngiLCAidHgtc2VjIjsKIAkJc2Ftc3VuZyxpZG1hLWFkZHIgPSA8MHgwMzAwMDAwMD47CisJCSNzb3VuZC1kYWktY2VsbHMgPSA8MT47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIApAQCAtMzY4LDIyICszNzEsMjggQEAKIAl9OwogCiAJaTJzMTogaTJzQDEzOTYwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHM1cHYyMTAtaTJzIjsKKwkJY29tcGF0aWJsZSA9ICJzYW1zdW5nLHMzYzY0MTAtaTJzIjsKIAkJcmVnID0gPDB4MTM5NjAwMDAgMHgxMDA+OwogCQljbG9ja3MgPSA8JmNsb2NrIENMS19JMlMxPjsKIAkJY2xvY2stbmFtZXMgPSAiaWlzIjsKKwkJI2Nsb2NrLWNlbGxzID0gPDE+OworCQljbG9jay1vdXRwdXQtbmFtZXMgPSAiaTJzX2NkY2xrMSI7CiAJCWRtYXMgPSA8JnBkbWExIDEyPiwgPCZwZG1hMSAxMT47CiAJCWRtYS1uYW1lcyA9ICJ0eCIsICJyeCI7CisJCSNzb3VuZC1kYWktY2VsbHMgPSA8MT47CiAJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJfTsKIAogCWkyczI6IGkyc0AxMzk3MDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzNXB2MjEwLWkycyI7CisJCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxzM2M2NDEwLWkycyI7CiAJCXJlZyA9IDwweDEzOTcwMDAwIDB4MTAwPjsKIAkJY2xvY2tzID0gPCZjbG9jayBDTEtfSTJTMj47CiAJCWNsb2NrLW5hbWVzID0gImlpcyI7CisJCSNjbG9jay1jZWxscyA9IDwxPjsKKwkJY2xvY2stb3V0cHV0LW5hbWVzID0gImkyc19jZGNsazIiOwogCQlkbWFzID0gPCZwZG1hMCAxND4sIDwmcGRtYTAgMTM+OwogCQlkbWEtbmFtZXMgPSAidHgiLCAicngiOworCQkjc291bmQtZGFpLWNlbGxzID0gPDE+OwogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQyMTAuZHRzaQppbmRleCBiY2M5ZTYzLi44ZTQ1ZWE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0MjEwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDIxMC5kdHNpCkBAIC04MSw2ICs4MSwxNSBAQAogCQlyZWcgPSA8MHgxMDAyM0NBMCAweDIwPjsKIAl9OwogCisJbDJjOiBsMi1jYWNoZS1jb250cm9sbGVyQDEwNTAyMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0scGwzMTAtY2FjaGUiOworCQlyZWcgPSA8MHgxMDUwMjAwMCAweDEwMDA+OworCQljYWNoZS11bmlmaWVkOworCQljYWNoZS1sZXZlbCA9IDwyPjsKKwkJYXJtLHRhZy1sYXRlbmN5ID0gPDIgMiAxPjsKKwkJYXJtLGRhdGEtbGF0ZW5jeSA9IDwyIDIgMT47CisJfTsKKwogCWdpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJAMTA0OTAwMDAgewogCQljcHUtb2Zmc2V0ID0gPDB4ODAwMD47CiAJfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTItb2Ryb2lkLWNvbW1vbi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi1vZHJvaWQtY29tbW9uLmR0c2kKaW5kZXggM2ZiZjU4OC4uYWJkNjMzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi1vZHJvaWQtY29tbW9uLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi1vZHJvaWQtY29tbW9uLmR0c2kKQEAgLTcsNiArNyw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICovCiAKKyNpbmNsdWRlIDxkdC1iaW5kaW5ncy9zb3VuZC9zYW1zdW5nLWkycy5oPgogI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2lucHV0L2lucHV0Lmg+CiAjaW5jbHVkZSAiZXh5bm9zNDQxMi5kdHNpIgogCkBAIC0zNywxNCArMzgsMTMgQEAKIAkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKIAkJc3RhdHVzID0gIm9rYXkiOwogCQljbG9ja3MgPSA8JmNsb2NrX2F1ZHNzIEVYWU5PU19JMlNfQlVTPiwKLQkJCSA8JmNsb2NrX2F1ZHNzIEVYWU5PU19ET1VUX0FVRF9CVVM+OwotCQljbG9jay1uYW1lcyA9ICJpaXMiLCAiaTJzX29wY2xrMCI7CisJCQkgPCZjbG9ja19hdWRzcyBFWFlOT1NfRE9VVF9BVURfQlVTPiwKKwkJCSA8JmNsb2NrX2F1ZHNzIEVYWU5PU19TQ0xLX0kyUz47CisJCWNsb2NrLW5hbWVzID0gImlpcyIsICJpMnNfb3BjbGswIiwgImkyc19vcGNsazEiOwogCX07CiAKIAlzb3VuZDogc291bmQgewotCQljb21wYXRpYmxlID0gInNhbXN1bmcsb2Ryb2lkeDItYXVkaW8iOwotCQlzYW1zdW5nLGkycy1jb250cm9sbGVyID0gPCZpMnMwPjsKLQkJc2Ftc3VuZyxhdWRpby1jb2RlYyA9IDwmbWF4OTgwOTA+OworCQljb21wYXRpYmxlID0gInNpbXBsZS1hdWRpby1jYXJkIjsKIAkJYXNzaWduZWQtY2xvY2tzID0gPCZjbG9ja19hdWRzcyBFWFlOT1NfTU9VVF9BVURTUz4sCiAJCQkJPCZjbG9ja19hdWRzcyBFWFlOT1NfTU9VVF9JMlM+LAogCQkJCTwmY2xvY2tfYXVkc3MgRVhZTk9TX0RPVVRfU1JQPiwKQEAgLTU1LDYgKzU1LDIwIEBACiAJCQkJPDA+LAogCQkJCTwxOTIwMDAwMDA+LAogCQkJCTwxOTIwMDAwMD47CisKKwkJc2ltcGxlLWF1ZGlvLWNhcmQsZm9ybWF0ID0gImkycyI7CisJCXNpbXBsZS1hdWRpby1jYXJkLGJpdGNsb2NrLW1hc3RlciA9IDwmbGluazBfY29kZWM+OworCQlzaW1wbGUtYXVkaW8tY2FyZCxmcmFtZS1tYXN0ZXIgPSA8JmxpbmswX2NvZGVjPjsKKworCQlzaW1wbGUtYXVkaW8tY2FyZCxjcHUgeworCQkJc291bmQtZGFpID0gPCZpMnMwIDA+OworCQkJc3lzdGVtLWNsb2NrLWZyZXF1ZW5jeSA9IDwxOTIwMDAwMD47CisJCX07CisKKwkJbGluazBfY29kZWM6IHNpbXBsZS1hdWRpby1jYXJkLGNvZGVjIHsKKwkJCXNvdW5kLWRhaSA9IDwmbWF4OTgwOTA+OworCQkJY2xvY2tzID0gPCZpMnMwIENMS19JMlNfQ0RDTEs+OworCQl9OwogCX07CiAKIAltbWNAMTI1NTAwMDAgewpAQCAtMzczLDYgKzM4Nyw5IEBACiAJCQlyZWcgPSA8MHgxMD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZncHgwPjsKIAkJCWludGVycnVwdHMgPSA8MCAwPjsKKwkJCWNsb2NrcyA9IDwmaTJzMCBDTEtfSTJTX0NEQ0xLPjsKKwkJCWNsb2NrLW5hbWVzID0gIm1jbGsiOworCQkJI3NvdW5kLWRhaS1jZWxscyA9IDwwPjsKIAkJfTsKIAl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLW9kcm9pZHUzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTItb2Ryb2lkdTMuZHRzCmluZGV4IGM4YTY0YmUuLjQ0Njg0ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTItb2Ryb2lkdTMuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczQ0MTItb2Ryb2lkdTMuZHRzCkBAIC00OSw5ICs0OSwxMSBAQAogfTsKIAogJnNvdW5kIHsKLQljb21wYXRpYmxlID0gInNhbXN1bmcsb2Ryb2lkdTMtYXVkaW8iOwotCXNhbXN1bmcsbW9kZWwgPSAiT2Ryb2lkLVUzIjsKLQlzYW1zdW5nLGF1ZGlvLXJvdXRpbmcgPQorCXNpbXBsZS1hdWRpby1jYXJkLG5hbWUgPSAiT2Ryb2lkLVUzIjsKKwlzaW1wbGUtYXVkaW8tY2FyZCx3aWRnZXRzID0KKwkJIkhlYWRwaG9uZSIsICJIZWFkcGhvbmUgSmFjayIsCisJCSJTcGVha2VycyIsICJTcGVha2VycyI7CisJc2ltcGxlLWF1ZGlvLWNhcmQscm91dGluZyA9CiAJCSJIZWFkcGhvbmUgSmFjayIsICJIUEwiLAogCQkiSGVhZHBob25lIEphY2siLCAiSFBSIiwKIAkJIkhlYWRwaG9uZSBKYWNrIiwgIk1JQ0JJQVMiLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNDQxMi1vZHJvaWR4Mi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLW9kcm9pZHgyLmR0cwppbmRleCA5NmI0M2Y0Li42ZTMzNjc4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLW9kcm9pZHgyLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9leHlub3M0NDEyLW9kcm9pZHgyLmR0cwpAQCAtMjMsOCArMjMsMTIgQEAKIH07CiAKICZzb3VuZCB7Ci0Jc2Ftc3VuZyxtb2RlbCA9ICJPZHJvaWQtWDIiOwotCXNhbXN1bmcsYXVkaW8tcm91dGluZyA9CisJc2ltcGxlLWF1ZGlvLWNhcmQsbmFtZSA9ICJPZHJvaWQtWDIiOworCXNpbXBsZS1hdWRpby1jYXJkLHdpZGdldHMgPQorCQkiSGVhZHBob25lIiwgIkhlYWRwaG9uZSBKYWNrIiwKKwkJIk1pY3JvcGhvbmUiLCAiTWljIEphY2siLAorCQkiTWljcm9waG9uZSIsICJETUlDIjsKKwlzaW1wbGUtYXVkaW8tY2FyZCxyb3V0aW5nID0KIAkJIkhlYWRwaG9uZSBKYWNrIiwgIkhQTCIsCiAJCSJIZWFkcGhvbmUgSmFjayIsICJIUFIiLAogCQkiSU4xIiwgIk1pYyBKYWNrIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczR4MTIuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL2V4eW5vczR4MTIuZHRzaQppbmRleCA5M2I3MDQwLi44YmM5N2M0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9leHlub3M0eDEyLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvZXh5bm9zNHgxMi5kdHNpCkBAIC01NCw2ICs1NCwyMCBAQAogCQlyZWcgPSA8MHgxMDAyM0NBMCAweDIwPjsKIAl9OwogCisJbDJjOiBsMi1jYWNoZS1jb250cm9sbGVyQDEwNTAyMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJhcm0scGwzMTAtY2FjaGUiOworCQlyZWcgPSA8MHgxMDUwMjAwMCAweDEwMDA+OworCQljYWNoZS11bmlmaWVkOworCQljYWNoZS1sZXZlbCA9IDwyPjsKKwkJYXJtLHRhZy1sYXRlbmN5ID0gPDIgMiAxPjsKKwkJYXJtLGRhdGEtbGF0ZW5jeSA9IDwzIDIgMT47CisJCWFybSxkb3VibGUtbGluZWZpbGwgPSA8MT47CisJCWFybSxkb3VibGUtbGluZWZpbGwtaW5jciA9IDwwPjsKKwkJYXJtLGRvdWJsZS1saW5lZmlsbC13cmFwID0gPDE+OworCQlhcm0scHJlZmV0Y2gtZHJvcCA9IDwxPjsKKwkJYXJtLHByZWZldGNoLW9mZnNldCA9IDw3PjsKKwl9OworCiAJY2xvY2s6IGNsb2NrLWNvbnRyb2xsZXJAMTAwMzAwMDAgewogCQljb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNDQxMi1jbG9jayI7CiAJCXJlZyA9IDwweDEwMDMwMDAwIDB4MjAwMDA+OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvaW14NnN4LXNkYi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cwppbmRleCA4YzFmZWJkLi5jMTA4YmI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9pbXg2c3gtc2RiLmR0cwpAQCAtMTY2LDEyICsxNjYsMTIgQEAKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwogCi0JCWV0aHBoeTE6IGV0aGVybmV0LXBoeUAwIHsKLQkJCXJlZyA9IDwwPjsKKwkJZXRocGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJcmVnID0gPDE+OwogCQl9OwogCi0JCWV0aHBoeTI6IGV0aGVybmV0LXBoeUAxIHsKLQkJCXJlZyA9IDwxPjsKKwkJZXRocGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJcmVnID0gPDI+OwogCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LWV2Yi1yazgwOC5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9yazMyODgtZXZiLXJrODA4LmR0cwppbmRleCBkOGM3NzVlNi4uZTFkM2VlYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LWV2Yi1yazgwOC5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LWV2Yi1yazgwOC5kdHMKQEAgLTE1LDYgKzE1LDEzIEBACiAKIC8gewogCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMjg4LWV2Yi1yazgwOCIsICJyb2NrY2hpcCxyazMyODgiOworCisJZXh0X2dtYWM6IGV4dGVybmFsLWdtYWMtY2xvY2sgeworCQljb21wYXRpYmxlID0gImZpeGVkLWNsb2NrIjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDEyNTAwMDAwMD47CisJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJleHRfZ21hYyI7CisJCSNjbG9jay1jZWxscyA9IDwwPjsKKwl9OwogfTsKIAogJmNwdTAgewpAQCAtMTUyLDMgKzE1OSwxOSBAQAogCQl9OwogCX07CiB9OworCismZ21hYyB7CisJcGh5LXN1cHBseSA9IDwmdmNjX3BoeT47CisJcGh5LW1vZGUgPSAicmdtaWkiOworCWNsb2NrX2luX291dCA9ICJpbnB1dCI7CisJc25wcyxyZXNldC1ncGlvID0gPCZncGlvNCA3IDA+OworCXNucHMscmVzZXQtYWN0aXZlLWxvdzsKKwlzbnBzLHJlc2V0LWRlbGF5cy11cyA9IDwwIDEwMDAwIDEwMDAwMDA+OworCWFzc2lnbmVkLWNsb2NrcyA9IDwmY3J1IFNDTEtfTUFDPjsKKwlhc3NpZ25lZC1jbG9jay1wYXJlbnRzID0gPCZleHRfZ21hYz47CisJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwlwaW5jdHJsLTAgPSA8JnJnbWlpX3BpbnM+OworCXR4X2RlbGF5ID0gPDB4MzA+OworCXJ4X2RlbGF5ID0gPDB4MTA+OworCXN0YXR1cyA9ICJvayI7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LWV2Yi5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LWV2Yi5kdHNpCmluZGV4IDYxOTRkNjczLi4xYzA4ZWIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMyODgtZXZiLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvcmszMjg4LWV2Yi5kdHNpCkBAIC05MCw2ICs5MCwxOSBAQAogCQlyZWd1bGF0b3ItYWx3YXlzLW9uOwogCQlyZWd1bGF0b3ItYm9vdC1vbjsKIAl9OworCisJdmNjX3BoeTogdmNjLXBoeS1yZWd1bGF0b3IgeworCQljb21wYXRpYmxlID0gInJlZ3VsYXRvci1maXhlZCI7CisJCWVuYWJsZS1hY3RpdmUtaGlnaDsKKwkJZ3BpbyA9IDwmZ3BpbzAgNiBHUElPX0FDVElWRV9ISUdIPjsKKwkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJcGluY3RybC0wID0gPCZldGhfcGh5X3B3cj47CisJCXJlZ3VsYXRvci1uYW1lID0gInZjY19waHkiOworCQlyZWd1bGF0b3ItbWluLW1pY3Jvdm9sdCA9IDwzMzAwMDAwPjsKKwkJcmVndWxhdG9yLW1heC1taWNyb3ZvbHQgPSA8MzMwMDAwMD47CisJCXJlZ3VsYXRvci1hbHdheXMtb247CisJCXJlZ3VsYXRvci1ib290LW9uOworCX07CiB9OwogCiAmZW1tYyB7CkBAIC0yMDgsNiArMjIxLDEyIEBACiAJCQlyb2NrY2hpcCxwaW5zID0gPDAgMTQgUktfRlVOQ19HUElPICZwY2ZnX3B1bGxfbm9uZT47CiAJCX07CiAJfTsKKworCWV0aF9waHkgeworCQlldGhfcGh5X3B3cjogZXRoLXBoeS1wd3IgeworCQkJcm9ja2NoaXAscGlucyA9IDwwIDYgUktfRlVOQ19HUElPICZwY2ZnX3B1bGxfbm9uZT47CisJCX07CisJfTsKIH07CiAKICZ1c2JfaG9zdDBfZWhjaSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9yazMyODguZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3JrMzI4OC5kdHNpCmluZGV4IGZkMTlmMDA3Li45MTBkY2FkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9yazMyODguZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9yazMyODguZHRzaQpAQCAtMzgwLDYgKzM4MCwyMiBAQAogCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCX07CiAKKwlnbWFjOiBldGhlcm5ldEBmZjI5MDAwMCB7CisJCWNvbXBhdGlibGUgPSAicm9ja2NoaXAscmszMjg4LWdtYWMiOworCQlyZWcgPSA8MHhmZjI5MDAwMCAweDEwMDAwPjsKKwkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDI3IElSUV9UWVBFX0xFVkVMX0hJR0g+OworCQlpbnRlcnJ1cHQtbmFtZXMgPSAibWFjaXJxIjsKKwkJcm9ja2NoaXAsZ3JmID0gPCZncmY+OworCQljbG9ja3MgPSA8JmNydSBTQ0xLX01BQz4sCisJCQk8JmNydSBTQ0xLX01BQ19SWD4sIDwmY3J1IFNDTEtfTUFDX1RYPiwKKwkJCTwmY3J1IFNDTEtfTUFDUkVGPiwgPCZjcnUgU0NMS19NQUNSRUZfT1VUPiwKKwkJCTwmY3J1IEFDTEtfR01BQz4sIDwmY3J1IFBDTEtfR01BQz47CisJCWNsb2NrLW5hbWVzID0gInN0bW1hY2V0aCIsCisJCQkibWFjX2Nsa19yeCIsICJtYWNfY2xrX3R4IiwKKwkJCSJjbGtfbWFjX3JlZiIsICJjbGtfbWFjX3JlZm91dCIsCisJCQkiYWNsa19tYWMiLCAicGNsa19tYWMiOworCX07CisKIAl1c2JfaG9zdDBfZWhjaTogdXNiQGZmNTAwMDAwIHsKIAkJY29tcGF0aWJsZSA9ICJnZW5lcmljLWVoY2kiOwogCQlyZWcgPSA8MHhmZjUwMDAwMCAweDEwMD47CkBAIC03MjUsNiArNzQxLDExIEBACiAJCQliaWFzLWRpc2FibGU7CiAJCX07CiAKKwkJcGNmZ19wdWxsX25vbmVfMTJtYTogcGNmZy1wdWxsLW5vbmUtMTJtYSB7CisJCQliaWFzLWRpc2FibGU7CisJCQlkcml2ZS1zdHJlbmd0aCA9IDwxMj47CisJCX07CisKIAkJaTJjMCB7CiAJCQlpMmMwX3hmZXI6IGkyYzAteGZlciB7CiAJCQkJcm9ja2NoaXAscGlucyA9IDwwIDE1IFJLX0ZVTkNfMSAmcGNmZ19wdWxsX25vbmU+LApAQCAtMTA2OCw1ICsxMDg5LDM4IEBACiAJCQkJcm9ja2NoaXAscGlucyA9IDw3IDIzIDMgJnBjZmdfcHVsbF9ub25lPjsKIAkJCX07CiAJCX07CisKKwkJZ21hYyB7CisJCQlyZ21paV9waW5zOiByZ21paS1waW5zIHsKKwkJCQlyb2NrY2hpcCxwaW5zID0gPDMgMzAgMyAmcGNmZ19wdWxsX25vbmU+LAorCQkJCQkJPDMgMzEgMyAmcGNmZ19wdWxsX25vbmU+LAorCQkJCQkJPDMgMjYgMyAmcGNmZ19wdWxsX25vbmU+LAorCQkJCQkJPDMgMjcgMyAmcGNmZ19wdWxsX25vbmU+LAorCQkJCQkJPDMgMjggMyAmcGNmZ19wdWxsX25vbmVfMTJtYT4sCisJCQkJCQk8MyAyOSAzICZwY2ZnX3B1bGxfbm9uZV8xMm1hPiwKKwkJCQkJCTwzIDI0IDMgJnBjZmdfcHVsbF9ub25lXzEybWE+LAorCQkJCQkJPDMgMjUgMyAmcGNmZ19wdWxsX25vbmVfMTJtYT4sCisJCQkJCQk8NCAwIDMgJnBjZmdfcHVsbF9ub25lPiwKKwkJCQkJCTw0IDUgMyAmcGNmZ19wdWxsX25vbmU+LAorCQkJCQkJPDQgNiAzICZwY2ZnX3B1bGxfbm9uZT4sCisJCQkJCQk8NCA5IDMgJnBjZmdfcHVsbF9ub25lXzEybWE+LAorCQkJCQkJPDQgNCAzICZwY2ZnX3B1bGxfbm9uZV8xMm1hPiwKKwkJCQkJCTw0IDEgMyAmcGNmZ19wdWxsX25vbmU+LAorCQkJCQkJPDQgMyAzICZwY2ZnX3B1bGxfbm9uZT47CisJCQl9OworCisJCQlybWlpX3BpbnM6IHJtaWktcGlucyB7CisJCQkJcm9ja2NoaXAscGlucyA9IDwzIDMwIDMgJnBjZmdfcHVsbF9ub25lPiwKKwkJCQkJCTwzIDMxIDMgJnBjZmdfcHVsbF9ub25lPiwKKwkJCQkJCTwzIDI4IDMgJnBjZmdfcHVsbF9ub25lPiwKKwkJCQkJCTwzIDI5IDMgJnBjZmdfcHVsbF9ub25lPiwKKwkJCQkJCTw0IDAgMyAmcGNmZ19wdWxsX25vbmU+LAorCQkJCQkJPDQgNSAzICZwY2ZnX3B1bGxfbm9uZT4sCisJCQkJCQk8NCA0IDMgJnBjZmdfcHVsbF9ub25lPiwKKwkJCQkJCTw0IDEgMyAmcGNmZ19wdWxsX25vbmU+LAorCQkJCQkJPDQgMiAzICZwY2ZnX3B1bGxfbm9uZT4sCisJCQkJCQk8NCAzIDMgJnBjZmdfcHVsbF9ub25lPjsKKwkJCX07CisJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWZhbWlseS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQwNy1mYW1pbHkuZHRzaQppbmRleCAzZTMxZDMyLi5kNGE4Zjg0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDA3LWZhbWlseS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MDctZmFtaWx5LmR0c2kKQEAgLTI3NCw1ICsyNzQsMTQgQEAKIAogCQkJc3RhdHVzID0gImRpc2FibGVkIjsKIAkJfTsKKworCQl1c2IyX3BpY29waHkwOiBwaHkxIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy11c2IyLXBoeSI7CisJCQkjcGh5LWNlbGxzID0gPDA+OworCQkJc3Qsc3lzY2ZnID0gPCZzeXNjZmdfY29yZSAweDEwMCAweGY0PjsKKwkJCXJlc2V0cyA9IDwmc29mdHJlc2V0IFNUSUg0MDdfUElDT1BIWV9TT0ZUUkVTRVQ+LAorCQkJCSA8JnBpY29waHlyZXNldCBTVElINDA3X1BJQ09QSFkwX1JFU0VUPjsKKwkJCXJlc2V0LW5hbWVzID0gImdsb2JhbCIsICJwb3J0IjsKKwkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTAuZHRzaQppbmRleCBjMDU2MjdlLi4zNzk5NWY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDEwLmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxMC5kdHNpCkBAIC0xMCw1ICsxMCw3NSBAQAogI2luY2x1ZGUgInN0aWg0MDctZmFtaWx5LmR0c2kiCiAjaW5jbHVkZSAic3RpaDQxMC1waW5jdHJsLmR0c2kiCiAvIHsKKwlzb2MgeworCQl1c2IyX3BpY29waHkxOiBwaHkyIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3RpaDQwNy11c2IyLXBoeSI7CisJCQkjcGh5LWNlbGxzID0gPDA+OworCQkJc3Qsc3lzY2ZnID0gPCZzeXNjZmdfY29yZSAweGY4IDB4ZjQ+OworCQkJcmVzZXRzID0gPCZzb2Z0cmVzZXQgU1RJSDQwN19QSUNPUEhZX1NPRlRSRVNFVD4sCisJCQkJIDwmcGljb3BoeXJlc2V0IFNUSUg0MDdfUElDT1BIWTBfUkVTRVQ+OworCQkJcmVzZXQtbmFtZXMgPSAiZ2xvYmFsIiwgInBvcnQiOworCQl9OwogCisJCXVzYjJfcGljb3BoeTI6IHBoeTMgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdGloNDA3LXVzYjItcGh5IjsKKwkJCSNwaHktY2VsbHMgPSA8MD47CisJCQlzdCxzeXNjZmcgPSA8JnN5c2NmZ19jb3JlIDB4ZmMgMHhmND47CisJCQlyZXNldHMgPSA8JnNvZnRyZXNldCBTVElINDA3X1BJQ09QSFlfU09GVFJFU0VUPiwKKwkJCQkgPCZwaWNvcGh5cmVzZXQgU1RJSDQwN19QSUNPUEhZMV9SRVNFVD47CisJCQlyZXNldC1uYW1lcyA9ICJnbG9iYWwiLCAicG9ydCI7CisJCX07CisKKwkJb2hjaTA6IHVzYkA5YTAzYzAwIHsKKwkJCWNvbXBhdGlibGUgPSAic3Qsc3Qtb2hjaS0zMDB4IjsKKwkJCXJlZyA9IDwweDlhMDNjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDxHSUNfU1BJIDE4MCBJUlFfVFlQRV9OT05FPjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfZmxleGdlbiBDTEtfVFhfSUNOX0RJU1BfMD47CisJCQlyZXNldHMgPSA8JnBvd2VyZG93biBTVElINDA3X1VTQjJfUE9SVDBfUE9XRVJET1dOPiwKKwkJCQkgPCZzb2Z0cmVzZXQgU1RJSDQwN19VU0IyX1BPUlQwX1NPRlRSRVNFVD47CisJCQlyZXNldC1uYW1lcyA9ICJwb3dlciIsICJzb2Z0cmVzZXQiOworCQkJcGh5cyA9IDwmdXNiMl9waWNvcGh5MT47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJfTsKKworCQllaGNpMDogdXNiQDlhMDNlMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdC1laGNpLTMwMHgiOworCQkJcmVnID0gPDB4OWEwM2UwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTUxIElSUV9UWVBFX05PTkU+OworCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKKwkJCXBpbmN0cmwtMCA9IDwmcGluY3RybF91c2IwPjsKKwkJCWNsb2NrcyA9IDwmY2xrX3NfYzBfZmxleGdlbiBDTEtfVFhfSUNOX0RJU1BfMD47CisJCQlyZXNldHMgPSA8JnBvd2VyZG93biBTVElINDA3X1VTQjJfUE9SVDBfUE9XRVJET1dOPiwKKwkJCQkgPCZzb2Z0cmVzZXQgU1RJSDQwN19VU0IyX1BPUlQwX1NPRlRSRVNFVD47CisJCQlyZXNldC1uYW1lcyA9ICJwb3dlciIsICJzb2Z0cmVzZXQiOworCQkJcGh5cyA9IDwmdXNiMl9waWNvcGh5MT47CisJCQlwaHktbmFtZXMgPSAidXNiIjsKKwkJfTsKKworCQlvaGNpMTogdXNiQDlhODNjMDAgeworCQkJY29tcGF0aWJsZSA9ICJzdCxzdC1vaGNpLTMwMHgiOworCQkJcmVnID0gPDB4OWE4M2MwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPEdJQ19TUEkgMTgxIElSUV9UWVBFX05PTkU+OworCQkJY2xvY2tzID0gPCZjbGtfc19jMF9mbGV4Z2VuIENMS19UWF9JQ05fRElTUF8wPjsKKwkJCXJlc2V0cyA9IDwmcG93ZXJkb3duIFNUSUg0MDdfVVNCMl9QT1JUMV9QT1dFUkRPV04+LAorCQkJCSA8JnNvZnRyZXNldCBTVElINDA3X1VTQjJfUE9SVDFfU09GVFJFU0VUPjsKKwkJCXJlc2V0LW5hbWVzID0gInBvd2VyIiwgInNvZnRyZXNldCI7CisJCQlwaHlzID0gPCZ1c2IyX3BpY29waHkyPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQl9OworCisJCWVoY2kxOiB1c2JAOWE4M2UwMCB7CisJCQljb21wYXRpYmxlID0gInN0LHN0LWVoY2ktMzAweCI7CisJCQlyZWcgPSA8MHg5YTgzZTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8R0lDX1NQSSAxNTMgSVJRX1RZUEVfTk9ORT47CisJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOworCQkJcGluY3RybC0wID0gPCZwaW5jdHJsX3VzYjE+OworCQkJY2xvY2tzID0gPCZjbGtfc19jMF9mbGV4Z2VuIENMS19UWF9JQ05fRElTUF8wPjsKKwkJCXJlc2V0cyA9IDwmcG93ZXJkb3duIFNUSUg0MDdfVVNCMl9QT1JUMV9QT1dFUkRPV04+LAorCQkJCSA8JnNvZnRyZXNldCBTVElINDA3X1VTQjJfUE9SVDFfU09GVFJFU0VUPjsKKwkJCXJlc2V0LW5hbWVzID0gInBvd2VyIiwgInNvZnRyZXNldCI7CisJCQlwaHlzID0gPCZ1c2IyX3BpY29waHkyPjsKKwkJCXBoeS1uYW1lcyA9ICJ1c2IiOworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS5kdHNpIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNS5kdHNpCmluZGV4IDkxOThjMTIuLjE5YjAxOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTUuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdGloNDE1LmR0c2kKQEAgLTE1Myw4ICsxNTMsOCBAQAogCQkJY29tcGF0aWJsZQk9ICJzdCxzdGloNDE1LWR3bWFjIiwgInNucHMsZHdtYWMiLCAic25wcyxkd21hYy0zLjYxMCI7CiAJCQlzdGF0dXMgCQk9ICJkaXNhYmxlZCI7CiAKLQkJCXJlZyAJCT0gPDB4ZmU4MTAwMDAgMHg4MDAwPiwgPDB4MTQ4IDB4ND47Ci0JCQlyZWctbmFtZXMJPSAic3RtbWFjZXRoIiwgInN0aS1ldGhjb25mIjsKKwkJCXJlZwkJPSA8MHhmZTgxMDAwMCAweDgwMDA+OworCQkJcmVnLW5hbWVzCT0gInN0bW1hY2V0aCI7CiAKIAkJCWludGVycnVwdHMgCT0gPDAgMTQ3IDA+LCA8MCAxNDggMD4sIDwwIDE0OSAwPjsKIAkJCWludGVycnVwdC1uYW1lcyA9ICJtYWNpcnEiLCAiZXRoX3dha2VfaXJxIiwgImV0aF9scGkiOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJCQlzbnBzLG1peGVkLWJ1cnN0OwogCQkJc25wcyxmb3JjZV9zZl9kbWFfbW9kZTsKIAotCQkJc3Qsc3lzY29uCT0gPCZzeXNjZmdfcmVhcj47CisJCQlzdCxzeXNjb24JPSA8JnN5c2NmZ19yZWFyIDB4MTQ4PjsKIAogCQkJcGluY3RybC1uYW1lcyAJPSAiZGVmYXVsdCI7CiAJCQlwaW5jdHJsLTAJPSA8JnBpbmN0cmxfbWlpMD47CkBAIC0xNzcsOCArMTc3LDggQEAKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZQk9ICJzdCxzdGloNDE1LWR3bWFjIiwgInNucHMsZHdtYWMiLCAic25wcyxkd21hYy0zLjYxMCI7CiAJCQlzdGF0dXMgCQk9ICJkaXNhYmxlZCI7Ci0JCQlyZWcJCT0gPDB4ZmVmMDgwMDAgMHg4MDAwPiwgPDB4NzQgMHg0PjsKLQkJCXJlZy1uYW1lcwk9ICJzdG1tYWNldGgiLCAic3RpLWV0aGNvbmYiOworCQkJcmVnCQk9IDwweGZlZjA4MDAwIDB4ODAwMD47CisJCQlyZWctbmFtZXMJPSAic3RtbWFjZXRoIjsKIAkJCWludGVycnVwdHMgCT0gPDAgMTUwIDA+LCA8MCAxNTEgMD4sIDwwIDE1MiAwPjsKIAkJCWludGVycnVwdC1uYW1lcyA9ICJtYWNpcnEiLCAiZXRoX3dha2VfaXJxIiwgImV0aF9scGkiOwogCkBAIC0xODYsNyArMTg2LDcgQEAKIAkJCXNucHMsbWl4ZWQtYnVyc3Q7CiAJCQlzbnBzLGZvcmNlX3NmX2RtYV9tb2RlOwogCi0JCQlzdCxzeXNjb24JCT0gPCZzeXNjZmdfc2JjPjsKKwkJCXN0LHN5c2NvbgkJPSA8JnN5c2NmZ19zYmMgMHg3ND47CiAKIAkJCXJlc2V0cwkJCT0gPCZzb2Z0cmVzZXQgU1RJSDQxNV9FVEgxX1NPRlRSRVNFVD47CiAJCQlyZXNldC1uYW1lcwkJPSAic3RtbWFjZXRoIjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N0aWg0MTYuZHRzaQppbmRleCBmYWQ5MDczLi5lYTI4ZWJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdGloNDE2LmR0c2kKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3RpaDQxNi5kdHNpCkBAIC0xNjMsOCArMTYzLDggQEAKIAkJCWRldmljZV90eXBlIAk9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUJPSAic3Qsc3RpaDQxNi1kd21hYyIsICJzbnBzLGR3bWFjIiwgInNucHMsZHdtYWMtMy43MTAiOwogCQkJc3RhdHVzIAkJPSAiZGlzYWJsZWQiOwotCQkJcmVnIAkJPSA8MHhmZTgxMDAwMCAweDgwMDA+LCA8MHg4YmMgMHg0PjsKLQkJCXJlZy1uYW1lcwk9ICJzdG1tYWNldGgiLCAic3RpLWV0aGNvbmYiOworCQkJcmVnCQk9IDwweGZlODEwMDAwIDB4ODAwMD47CisJCQlyZWctbmFtZXMJPSAic3RtbWFjZXRoIjsKIAogCQkJaW50ZXJydXB0cyA9IDwwIDEzMyAwPiwgPDAgMTM0IDA+LCA8MCAxMzUgMD47CiAJCQlpbnRlcnJ1cHQtbmFtZXMgPSAibWFjaXJxIiwgImV0aF93YWtlX2lycSIsICJldGhfbHBpIjsKQEAgLTE3Miw3ICsxNzIsNyBAQAogCQkJc25wcyxwYmwgCT0gPDMyPjsKIAkJCXNucHMsbWl4ZWQtYnVyc3Q7CiAKLQkJCXN0LHN5c2NvbgkJPSA8JnN5c2NmZ19yZWFyPjsKKwkJCXN0LHN5c2NvbgkJPSA8JnN5c2NmZ19yZWFyIDB4OGJjPjsKIAkJCXJlc2V0cwkJCT0gPCZzb2Z0cmVzZXQgU1RJSDQxNl9FVEgwX1NPRlRSRVNFVD47CiAJCQlyZXNldC1uYW1lcwkJPSAic3RtbWFjZXRoIjsKIAkJCXBpbmN0cmwtbmFtZXMgCT0gImRlZmF1bHQiOwpAQCAtMTg1LDE1ICsxODUsMTUgQEAKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZQkJPSAic3Qsc3RpaDQxNi1kd21hYyIsICJzbnBzLGR3bWFjIiwgInNucHMsZHdtYWMtMy43MTAiOwogCQkJc3RhdHVzIAkJPSAiZGlzYWJsZWQiOwotCQkJcmVnCQk9IDwweGZlZjA4MDAwIDB4ODAwMD4sIDwweDdmMCAweDQ+OwotCQkJcmVnLW5hbWVzCT0gInN0bW1hY2V0aCIsICJzdGktZXRoY29uZiI7CisJCQlyZWcJCT0gPDB4ZmVmMDgwMDAgMHg4MDAwPjsKKwkJCXJlZy1uYW1lcwk9ICJzdG1tYWNldGgiOwogCQkJaW50ZXJydXB0cyA9IDwwIDEzNiAwPiwgPDAgMTM3IDA+LCA8MCAxMzggMD47CiAJCQlpbnRlcnJ1cHQtbmFtZXMgPSAibWFjaXJxIiwgImV0aF93YWtlX2lycSIsICJldGhfbHBpIjsKIAogCQkJc25wcyxwYmwJPSA8MzI+OwogCQkJc25wcyxtaXhlZC1idXJzdDsKIAotCQkJc3Qsc3lzY29uCT0gPCZzeXNjZmdfc2JjPjsKKwkJCXN0LHN5c2Nvbgk9IDwmc3lzY2ZnX3NiYyAweDdmMD47CiAKIAkJCXJlc2V0cwkJPSA8JnNvZnRyZXNldCBTVElINDE2X0VUSDFfU09GVFJFU0VUPjsKIAkJCXJlc2V0LW5hbWVzCT0gInN0bW1hY2V0aCI7CkBAIC0yODMsMjEgKzI4MywyMSBAQAogCiAJCW1pcGh5MzY1eF9waHk6IHBoeUBmZTM4MjAwMCB7CiAJCQljb21wYXRpYmxlICAgICAgPSAic3QsbWlwaHkzNjV4LXBoeSI7Ci0JCQlzdCxzeXNjZmcgIAk9IDwmc3lzY2ZnX3JlYXI+OworCQkJc3Qsc3lzY2ZnCT0gPCZzeXNjZmdfcmVhciAweDgyNCAweDgyOD47CiAJCQkjYWRkcmVzcy1jZWxscwk9IDwxPjsKIAkJCSNzaXplLWNlbGxzCT0gPDE+OwogCQkJcmFuZ2VzOwogCiAJCQlwaHlfcG9ydDA6IHBvcnRAZmUzODIwMDAgewogCQkJCSNwaHktY2VsbHMgPSA8MT47Ci0JCQkJcmVnID0gPDB4ZmUzODIwMDAgMHgxMDA+LCA8MHhmZTM5NDAwMCAweDEwMD4sIDwweDgyNCAweDQ+OwotCQkJCXJlZy1uYW1lcyA9ICJzYXRhIiwgInBjaWUiLCAic3lzY2ZnIjsKKwkJCQlyZWcgPSA8MHhmZTM4MjAwMCAweDEwMD4sIDwweGZlMzk0MDAwIDB4MTAwPjsKKwkJCQlyZWctbmFtZXMgPSAic2F0YSIsICJwY2llIjsKIAkJCX07CiAKIAkJCXBoeV9wb3J0MTogcG9ydEBmZTM4YTAwMCB7CiAJCQkJI3BoeS1jZWxscyA9IDwxPjsKLQkJCQlyZWcgPSA8MHhmZTM4YTAwMCAweDEwMD4sIDwweGZlODA0MDAwIDB4MTAwPiwgPDB4ODI4IDB4ND47Ci0JCQkJcmVnLW5hbWVzID0gInNhdGEiLCAicGNpZSIsICJzeXNjZmciOworCQkJCXJlZyA9IDwweGZlMzhhMDAwIDB4MTAwPiwgPDB4ZmU4MDQwMDAgMHgxMDA+OworCQkJCXJlZy1uYW1lcyA9ICJzYXRhIiwgInBjaWUiOwogCQkJfTsKIAkJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNGktYTEwLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAuZHRzaQppbmRleCA3YjQwOTlmLi5kNWM0NjY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW40aS1hMTAuZHRzaQpAQCAtMTcsMTQgKzE3LDYgQEAKIAogCWFsaWFzZXMgewogCQlldGhlcm5ldDAgPSAmZW1hYzsKLQkJc2VyaWFsMCA9ICZ1YXJ0MDsKLQkJc2VyaWFsMSA9ICZ1YXJ0MTsKLQkJc2VyaWFsMiA9ICZ1YXJ0MjsKLQkJc2VyaWFsMyA9ICZ1YXJ0MzsKLQkJc2VyaWFsNCA9ICZ1YXJ0NDsKLQkJc2VyaWFsNSA9ICZ1YXJ0NTsKLQkJc2VyaWFsNiA9ICZ1YXJ0NjsKLQkJc2VyaWFsNyA9ICZ1YXJ0NzsKIAl9OwogCiAJY2hvc2VuIHsKQEAgLTM5LDYgKzMxLDE0IEBACiAJCQkJIDwmYWhiX2dhdGVzIDQ0PjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CisKKwkJZnJhbWVidWZmZXJAMSB7CisJCQljb21wYXRpYmxlID0gImFsbHdpbm5lcixzaW1wbGUtZnJhbWVidWZmZXIiLCAic2ltcGxlLWZyYW1lYnVmZmVyIjsKKwkJCWFsbHdpbm5lcixwaXBlbGluZSA9ICJkZV9mZTAtZGVfYmUwLWxjZDAtaGRtaSI7CisJCQljbG9ja3MgPSA8JnBsbDUgMT4sIDwmYWhiX2dhdGVzIDM2PiwgPCZhaGJfZ2F0ZXMgNDM+LAorCQkJCSA8JmFoYl9nYXRlcyA0ND4sIDwmYWhiX2dhdGVzIDQ2PjsKKwkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CisJCX07CiAJfTsKIAogCWNwdXMgewpAQCAtNDM4LDggKzQzOCw4IEBACiAJCQlyZWctbmFtZXMgPSAicGh5X2N0cmwiLCAicG11MSIsICJwbXUyIjsKIAkJCWNsb2NrcyA9IDwmdXNiX2NsayA4PjsKIAkJCWNsb2NrLW5hbWVzID0gInVzYl9waHkiOwotCQkJcmVzZXRzID0gPCZ1c2JfY2xrIDE+LCA8JnVzYl9jbGsgMj47Ci0JCQlyZXNldC1uYW1lcyA9ICJ1c2IxX3Jlc2V0IiwgInVzYjJfcmVzZXQiOworCQkJcmVzZXRzID0gPCZ1c2JfY2xrIDA+LCA8JnVzYl9jbGsgMT4sIDwmdXNiX2NsayAyPjsKKwkJCXJlc2V0LW5hbWVzID0gInVzYjBfcmVzZXQiLCAidXNiMV9yZXNldCIsICJ1c2IyX3Jlc2V0IjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtb2xpbnV4aW5vLW1pY3JvLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMtb2xpbnV4aW5vLW1pY3JvLmR0cwppbmRleCBmZTNjNTU5Li5iZmE3NDI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLW9saW51eGluby1taWNyby5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy1vbGludXhpbm8tbWljcm8uZHRzCkBAIC01NSw2ICs1NSwxMiBAQAogCW1vZGVsID0gIk9saW1leCBBMTBzLU9saW51eGlubyBNaWNybyI7CiAJY29tcGF0aWJsZSA9ICJvbGltZXgsYTEwcy1vbGludXhpbm8tbWljcm8iLCAiYWxsd2lubmVyLHN1bjVpLWExMHMiOwogCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDA7CisJCXNlcmlhbDEgPSAmdWFydDI7CisJCXNlcmlhbDIgPSAmdWFydDM7CisJfTsKKwogCXNvY0AwMWMwMDAwMCB7CiAJCWVtYWM6IGV0aGVybmV0QDAxYzBiMDAwIHsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTBzLmR0c2kKaW5kZXggMWI3NjY2Ny4uMmU3ZDgyNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEwcy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMHMuZHRzaQpAQCAtMTgsMTAgKzE4LDYgQEAKIAogCWFsaWFzZXMgewogCQlldGhlcm5ldDAgPSAmZW1hYzsKLQkJc2VyaWFsMCA9ICZ1YXJ0MDsKLQkJc2VyaWFsMSA9ICZ1YXJ0MTsKLQkJc2VyaWFsMiA9ICZ1YXJ0MjsKLQkJc2VyaWFsMyA9ICZ1YXJ0MzsKIAl9OwogCiAJY2hvc2VuIHsKQEAgLTM5MCw4ICszODYsOCBAQAogCQkJcmVnLW5hbWVzID0gInBoeV9jdHJsIiwgInBtdTEiOwogCQkJY2xvY2tzID0gPCZ1c2JfY2xrIDg+OwogCQkJY2xvY2stbmFtZXMgPSAidXNiX3BoeSI7Ci0JCQlyZXNldHMgPSA8JnVzYl9jbGsgMT47Ci0JCQlyZXNldC1uYW1lcyA9ICJ1c2IxX3Jlc2V0IjsKKwkJCXJlc2V0cyA9IDwmdXNiX2NsayAwPiwgPCZ1c2JfY2xrIDE+OworCQkJcmVzZXQtbmFtZXMgPSAidXNiMF9yZXNldCIsICJ1c2IxX3Jlc2V0IjsKIAkJCXN0YXR1cyA9ICJkaXNhYmxlZCI7CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1oc2ctaDcwMi5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtaHNnLWg3MDIuZHRzCmluZGV4IGVlZWQxZjIuLmM3YmUzYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1oc2ctaDcwMi5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLWhzZy1oNzAyLmR0cwpAQCAtNTMsNiArNTMsMTAgQEAKIAltb2RlbCA9ICJIU0cgSDcwMiI7CiAJY29tcGF0aWJsZSA9ICJoc2csaDcwMiIsICJhbGx3aW5uZXIsc3VuNWktYTEzIjsKIAorCWFsaWFzZXMgeworCQlzZXJpYWwwID0gJnVhcnQxOworCX07CisKIAlzb2NAMDFjMDAwMDAgewogCQltbWMwOiBtbWNAMDFjMGYwMDAgewogCQkJcGluY3RybC1uYW1lcyA9ICJkZWZhdWx0IjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8tbWljcm8uZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby1taWNyby5kdHMKaW5kZXggOTE2ZWU4Yi4uM2RlY2VmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby1taWNyby5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLW9saW51eGluby1taWNyby5kdHMKQEAgLTU0LDYgKzU0LDEwIEBACiAJbW9kZWwgPSAiT2xpbWV4IEExMy1PbGludXhpbm8gTWljcm8iOwogCWNvbXBhdGlibGUgPSAib2xpbWV4LGExMy1vbGludXhpbm8tbWljcm8iLCAiYWxsd2lubmVyLHN1bjVpLWExMyI7CiAKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MTsKKwl9OworCiAJc29jQDAxYzAwMDAwIHsKIAkJbW1jMDogbW1jQDAxYzBmMDAwIHsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMtb2xpbnV4aW5vLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8uZHRzCmluZGV4IGUzMWQyOTEuLmI0MjFmN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8uZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjVpLWExMy1vbGludXhpbm8uZHRzCkBAIC01NSw2ICs1NSwxMCBAQAogCW1vZGVsID0gIk9saW1leCBBMTMtT2xpbnV4aW5vIjsKIAljb21wYXRpYmxlID0gIm9saW1leCxhMTMtb2xpbnV4aW5vIiwgImFsbHdpbm5lcixzdW41aS1hMTMiOwogCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDE7CisJfTsKKwogCXNvY0AwMWMwMDAwMCB7CiAJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuNWktYTEzLmR0c2kgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMuZHRzaQppbmRleCBjMzUyMTdlLi5jNTU2Njg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW41aS1hMTMuZHRzaQpAQCAtMTYsMTEgKzE2LDYgQEAKIC8gewogCWludGVycnVwdC1wYXJlbnQgPSA8JmludGM+OwogCi0JYWxpYXNlcyB7Ci0JCXNlcmlhbDAgPSAmdWFydDE7Ci0JCXNlcmlhbDEgPSAmdWFydDM7Ci0JfTsKLQogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CkBAIC0zNDksOCArMzQ0LDggQEAKIAkJCXJlZy1uYW1lcyA9ICJwaHlfY3RybCIsICJwbXUxIjsKIAkJCWNsb2NrcyA9IDwmdXNiX2NsayA4PjsKIAkJCWNsb2NrLW5hbWVzID0gInVzYl9waHkiOwotCQkJcmVzZXRzID0gPCZ1c2JfY2xrIDE+OwotCQkJcmVzZXQtbmFtZXMgPSAidXNiMV9yZXNldCI7CisJCQlyZXNldHMgPSA8JnVzYl9jbGsgMD4sIDwmdXNiX2NsayAxPjsKKwkJCXJlc2V0LW5hbWVzID0gInVzYjBfcmVzZXQiLCAidXNiMV9yZXNldCI7CiAJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOwogCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW42aS1hMzEuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCmluZGV4IGY0NzE1NmIuLjFlN2U3YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjZpLWEzMS5kdHNpCkBAIC01MywxMiArNTMsNiBAQAogCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAKIAlhbGlhc2VzIHsKLQkJc2VyaWFsMCA9ICZ1YXJ0MDsKLQkJc2VyaWFsMSA9ICZ1YXJ0MTsKLQkJc2VyaWFsMiA9ICZ1YXJ0MjsKLQkJc2VyaWFsMyA9ICZ1YXJ0MzsKLQkJc2VyaWFsNCA9ICZ1YXJ0NDsKLQkJc2VyaWFsNSA9ICZ1YXJ0NTsKIAkJZXRoZXJuZXQwID0gJmdtYWM7CiAJfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWJhbmFuYXBpLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1iYW5hbmFwaS5kdHMKaW5kZXggMWNmMTIxNC4uYmQ3YjE1YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWJhbmFuYXBpLmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtYmFuYW5hcGkuZHRzCkBAIC01NSw2ICs1NSwxMiBAQAogCW1vZGVsID0gIkxlTWFrZXIgQmFuYW5hIFBpIjsKIAljb21wYXRpYmxlID0gImxlbWFrZXIsYmFuYW5hcGkiLCAiYWxsd2lubmVyLHN1bjdpLWEyMCI7CiAKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MDsKKwkJc2VyaWFsMSA9ICZ1YXJ0MzsKKwkJc2VyaWFsMiA9ICZ1YXJ0NzsKKwl9OworCiAJc29jQDAxYzAwMDAwIHsKIAkJc3BpMDogc3BpQDAxYzA1MDAwIHsKIAkJCXBpbmN0cmwtbmFtZXMgPSAiZGVmYXVsdCI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtaHVtbWluZ2JpcmQuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLWh1bW1pbmdiaXJkLmR0cwppbmRleCAwZTRiZmEzLi4wYmNlZmNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtaHVtbWluZ2JpcmQuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC1odW1taW5nYmlyZC5kdHMKQEAgLTE5LDYgKzE5LDE0IEBACiAJbW9kZWwgPSAiTWVycmlpIEEyMCBIdW1taW5nYmlyZCI7CiAJY29tcGF0aWJsZSA9ICJtZXJyaWksYTIwLWh1bW1pbmdiaXJkIiwgImFsbHdpbm5lcixzdW43aS1hMjAiOwogCisJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDA7CisJCXNlcmlhbDEgPSAmdWFydDI7CisJCXNlcmlhbDIgPSAmdWFydDM7CisJCXNlcmlhbDMgPSAmdWFydDQ7CisJCXNlcmlhbDQgPSAmdWFydDU7CisJfTsKKwogCXNvY0AwMWMwMDAwMCB7CiAJCW1tYzA6IG1tY0AwMWMwZjAwMCB7CiAJCQlwaW5jdHJsLW5hbWVzID0gImRlZmF1bHQiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1taWNyby5kdHMgYi9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAtb2xpbnV4aW5vLW1pY3JvLmR0cwppbmRleCA5ZDY2OWNkZi4uNjZjYzc3NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1taWNyby5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuN2ktYTIwLW9saW51eGluby1taWNyby5kdHMKQEAgLTIwLDYgKzIwLDkgQEAKIAljb21wYXRpYmxlID0gIm9saW1leCxhMjAtb2xpbnV4aW5vLW1pY3JvIiwgImFsbHdpbm5lcixzdW43aS1hMjAiOwogCiAJYWxpYXNlcyB7CisJCXNlcmlhbDAgPSAmdWFydDA7CisJCXNlcmlhbDEgPSAmdWFydDY7CisJCXNlcmlhbDIgPSAmdWFydDc7CiAJCXNwaTAgPSAmc3BpMTsKIAkJc3BpMSA9ICZzcGkyOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW43aS1hMjAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCmluZGV4IGUyMWNlNTkuLjg5NzQ5Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjdpLWEyMC5kdHNpCkBAIC01NCwxNCArNTQsNiBAQAogCiAJYWxpYXNlcyB7CiAJCWV0aGVybmV0MCA9ICZnbWFjOwotCQlzZXJpYWwwID0gJnVhcnQwOwotCQlzZXJpYWwxID0gJnVhcnQxOwotCQlzZXJpYWwyID0gJnVhcnQyOwotCQlzZXJpYWwzID0gJnVhcnQzOwotCQlzZXJpYWw0ID0gJnVhcnQ0OwotCQlzZXJpYWw1ID0gJnVhcnQ1OwotCQlzZXJpYWw2ID0gJnVhcnQ2OwotCQlzZXJpYWw3ID0gJnVhcnQ3OwogCX07CiAKIAljaG9zZW4gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLWlwcG8tcThoLXY1LmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy1pcHBvLXE4aC12NS5kdHMKaW5kZXggN2YyMTE3Yy4uMzJhZDgwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOGktYTIzLWlwcG8tcThoLXY1LmR0cworKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW44aS1hMjMtaXBwby1xOGgtdjUuZHRzCkBAIC01NSw2ICs1NSwxMCBAQAogCW1vZGVsID0gIklwcG8gUThIIER1YWwgQ29yZSBUYWJsZXQgKHY1KSI7CiAJY29tcGF0aWJsZSA9ICJpcHBvLHE4aC12NSIsICJhbGx3aW5uZXIsc3VuOGktYTIzIjsKIAorCWFsaWFzZXMgeworCQlzZXJpYWwwID0gJnJfdWFydDsKKwl9OworCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiZWFybHlwcmludGsgY29uc29sZT10dHlTMCwxMTUyMDAiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW44aS1hMjMuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy5kdHNpCmluZGV4IDA3NDZjZDEuLjg2NTg0ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy5kdHNpCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjhpLWEyMy5kdHNpCkBAIC01MiwxNSArNTIsNiBAQAogLyB7CiAJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2ljPjsKIAotCWFsaWFzZXMgewotCQlzZXJpYWwwID0gJnVhcnQwOwotCQlzZXJpYWwxID0gJnVhcnQxOwotCQlzZXJpYWwyID0gJnVhcnQyOwotCQlzZXJpYWwzID0gJnVhcnQzOwotCQlzZXJpYWw0ID0gJnVhcnQ0OwotCQlzZXJpYWw1ID0gJnJfdWFydDsKLQl9OwotCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwwPjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjlpLWE4MC1vcHRpbXVzLmR0cyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjlpLWE4MC1vcHRpbXVzLmR0cwppbmRleCA1MDY5NDhmLi4xMWVjNzEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAtb3B0aW11cy5kdHMKKysrIGIvYXJjaC9hcm0vYm9vdC9kdHMvc3VuOWktYTgwLW9wdGltdXMuZHRzCkBAIC01NCw2ICs1NCwxMSBAQAogCW1vZGVsID0gIk1lcnJpaSBBODAgT3B0aW11cyBCb2FyZCI7CiAJY29tcGF0aWJsZSA9ICJtZXJyaWksYTgwLW9wdGltdXMiLCAiYWxsd2lubmVyLHN1bjlpLWE4MCI7CiAKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMCA9ICZ1YXJ0MDsKKwkJc2VyaWFsMSA9ICZ1YXJ0NDsKKwl9OworCiAJY2hvc2VuIHsKIAkJYm9vdGFyZ3MgPSAiZWFybHlwcmludGsgY29uc29sZT10dHlTMCwxMTUyMDAiOwogCX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAuZHRzaSBiL2FyY2gvYXJtL2Jvb3QvZHRzL3N1bjlpLWE4MC5kdHNpCmluZGV4IDQ5NDcxNGYuLjllZjQ0MzgyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAuZHRzaQorKysgYi9hcmNoL2FybS9ib290L2R0cy9zdW45aS1hODAuZHRzaQpAQCAtNTIsMTYgKzUyLDYgQEAKIC8gewogCWludGVycnVwdC1wYXJlbnQgPSA8JmdpYz47CiAKLQlhbGlhc2VzIHsKLQkJc2VyaWFsMCA9ICZ1YXJ0MDsKLQkJc2VyaWFsMSA9ICZ1YXJ0MTsKLQkJc2VyaWFsMiA9ICZ1YXJ0MjsKLQkJc2VyaWFsMyA9ICZ1YXJ0MzsKLQkJc2VyaWFsNCA9ICZ1YXJ0NDsKLQkJc2VyaWFsNSA9ICZ1YXJ0NTsKLQkJc2VyaWFsNiA9ICZyX3VhcnQ7Ci0JfTsKLQogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47CmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2R0cy92ZXJzYXRpbGUtcGIuZHRzIGIvYXJjaC9hcm0vYm9vdC9kdHMvdmVyc2F0aWxlLXBiLmR0cwppbmRleCBlMzZjMWU4Li5iODMxMzdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2R0cy92ZXJzYXRpbGUtcGIuZHRzCisrKyBiL2FyY2gvYXJtL2Jvb3QvZHRzL3ZlcnNhdGlsZS1wYi5kdHMKQEAgLTI5LDYgKzI5LDQzIEBACiAJCQljbG9jay1uYW1lcyA9ICJhcGJfcGNsayI7CiAJCX07CiAKKwkJcGNpLWNvbnRyb2xsZXJAMTAwMDEwMDAgeworCQkJY29tcGF0aWJsZSA9ICJhcm0sdmVyc2F0aWxlLXBjaSI7CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDB4MTAwMDEwMDAgMHgxMDAwCisJCQkgICAgICAgMHg0MTAwMDAwMCAweDEwMDAwCisJCQkgICAgICAgMHg0MjAwMDAwMCAweDEwMDAwMD47CisJCQlidXMtcmFuZ2UgPSA8MCAweGZmPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCisJCQlyYW5nZXMgPSA8MHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHg0MzAwMDAwMCAwIDB4MDAwMTAwMDAgICAvKiBkb3duc3RyZWFtIEkvTyAqLworCQkJCSAgMHgwMjAwMDAwMCAwIDB4NTAwMDAwMDAgMHg1MDAwMDAwMCAwIDB4MTAwMDAwMDAgICAvKiBub24tcHJlZmV0Y2hhYmxlIG1lbW9yeSAqLworCQkJCSAgMHg0MjAwMDAwMCAwIDB4NjAwMDAwMDAgMHg2MDAwMDAwMCAwIDB4MTAwMDAwMDA+OyAvKiBwcmVmZXRjaGFibGUgbWVtb3J5ICovCisKKwkJCWludGVycnVwdC1tYXAtbWFzayA9IDwweDE4MDAgMCAwIDc+OworCQkJaW50ZXJydXB0LW1hcCA9IDwweDE4MDAgMCAwIDEgJnNpYyAyOAorCQkJCQkgMHgxODAwIDAgMCAyICZzaWMgMjkKKwkJCQkJIDB4MTgwMCAwIDAgMyAmc2ljIDMwCisJCQkJCSAweDE4MDAgMCAwIDQgJnNpYyAyNworCisJCQkJCSAweDEwMDAgMCAwIDEgJnNpYyAyNworCQkJCQkgMHgxMDAwIDAgMCAyICZzaWMgMjgKKwkJCQkJIDB4MTAwMCAwIDAgMyAmc2ljIDI5CisJCQkJCSAweDEwMDAgMCAwIDQgJnNpYyAzMAorCisJCQkJCSAweDA4MDAgMCAwIDEgJnNpYyAzMAorCQkJCQkgMHgwODAwIDAgMCAyICZzaWMgMjcKKwkJCQkJIDB4MDgwMCAwIDAgMyAmc2ljIDI4CisJCQkJCSAweDA4MDAgMCAwIDQgJnNpYyAyOQorCisJCQkJCSAweDAwMDAgMCAwIDEgJnNpYyAyOQorCQkJCQkgMHgwMDAwIDAgMCAyICZzaWMgMzAKKwkJCQkJIDB4MDAwMCAwIDAgMyAmc2ljIDI3CisJCQkJCSAweDAwMDAgMCAwIDQgJnNpYyAyOD47CisJCX07CisKIAkJZnBnYSB7CiAJCQl1YXJ0QDkwMDAgewogCQkJCWNvbXBhdGlibGUgPSAiYXJtLHBsMDExIiwgImFybSxwcmltZWNlbGwiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pb3AzMnhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pb3AzMnhfZGVmY29uZmlnCmluZGV4IDRmMmVjM2EuLmMzMDU4ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzJ4X2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2lvcDMyeF9kZWZjb25maWcKQEAgLTEwNiw2ICsxMDYsNyBAQAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfTEw9eQorQ09ORklHX0RFQlVHX0xMX1VBUlRfODI1MD15CiBDT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogQ09ORklHX0NSWVBUT19OVUxMPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzN4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzN4X2RlZmNvbmZpZwppbmRleCBhYTM2MTI4Li43MTNmYWVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnCkBAIC04Nyw1ICs4Nyw2IEBACiAjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19MTD15CitDT05GSUdfREVCVUdfTExfVUFSVF84MjUwPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXhwNHh4X2RlZmNvbmZpZwppbmRleCAxYWY2NjVlLi4yNDYzNmNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2l4cDR4eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9peHA0eHhfZGVmY29uZmlnCkBAIC0yMDIsMyArMjAyLDQgQEAKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX0VSUk9SUz15CiBDT05GSUdfREVCVUdfTEw9eQorQ09ORklHX0RFQlVHX0xMX1VBUlRfODI1MD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xwYzMyeHhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9scGMzMnh4X2RlZmNvbmZpZwppbmRleCA5ZjU2Y2EzLi5jMTAwYjdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xwYzMyeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBjMzJ4eF9kZWZjb25maWcKQEAgLTIwNCw2ICsyMDQsNyBAQAogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSTV9VTldJTkQgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0xMPXkKK0NPTkZJR19ERUJVR19MTF9VQVJUXzgyNTA9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkc9eQogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9tdWx0aV92N19kZWZjb25maWcKaW5kZXggYmMzOTNiN2UuLjQ0NDY4NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXVsdGlfdjdfZGVmY29uZmlnCkBAIC00NTYsNiArNDU2LDcgQEAKIENPTkZJR19USV9QSVBFMz15CiBDT05GSUdfUEhZX01JUEhZMzY1WD15CiBDT05GSUdfUEhZX1NUSUg0MVhfVVNCPXkKK0NPTkZJR19QSFlfU1RJSDQwN19VU0I9eQogQ09ORklHX1BIWV9TVU40SV9VU0I9eQogQ09ORklHX0VYVDRfRlM9eQogQ09ORklHX0FVVE9GUzRfRlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcKaW5kZXggMGRhZTFjMS4uODVkMTBkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL212Nzh4eDBfZGVmY29uZmlnCkBAIC0xMzIsNiArMTMyLDcgQEAKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQogQ09ORklHX0RFQlVHX0xMPXkKK0NPTkZJR19ERUJVR19MTF9VQVJUXzgyNTA9eQogQ09ORklHX0NSWVBUT19DQkM9bQogQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19QQ0JDPW0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCmluZGV4IDk1MjQzMGQuLjg1NTE0M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwpAQCAtMTU2LDYgKzE1Niw3IEBACiAjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogQ09ORklHX0RFQlVHX0xMPXkKK0NPTkZJR19ERUJVR19MTF9VQVJUXzgyNTA9eQogQ09ORklHX0NSWVBUT19DQkM9bQogQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19QQ0JDPW0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcnBjX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcnBjX2RlZmNvbmZpZwppbmRleCAwMDUxNWVmLi44OTYzMTc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3JwY19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9ycGNfZGVmY29uZmlnCkBAIC0xMzEsMyArMTMxLDQgQEAKIENPTkZJR19ERUJVR19VU0VSPXkKIENPTkZJR19ERUJVR19FUlJPUlM9eQogQ09ORklHX0RFQlVHX0xMPXkKK0NPTkZJR19ERUJVR19MTF9VQVJUXzgyNTA9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vYml0cmV2LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9iaXRyZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzI5MWMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vYml0cmV2LmgKQEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfX0FTTV9CSVRSRVZfSAorI2RlZmluZSBfX0FTTV9CSVRSRVZfSAorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gdTMyIF9fYXJjaF9iaXRyZXYzMih1MzIgeCkKK3sKKwlfX2FzbV9fICgicmJpdCAlMCwgJTEiIDogIj1yIiAoeCkgOiAiciIgKHgpKTsKKwlyZXR1cm4geDsKK30KKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBfX2F0dHJpYnV0ZV9jb25zdF9fIHUxNiBfX2FyY2hfYml0cmV2MTYodTE2IHgpCit7CisJcmV0dXJuIF9fYXJjaF9iaXRyZXYzMigodTMyKXgpID4+IDE2OworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gdTggX19hcmNoX2JpdHJldjgodTggeCkKK3sKKwlyZXR1cm4gX19hcmNoX2JpdHJldjMyKCh1MzIpeCkgPj4gMjQ7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY29tcGlsZXIuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NvbXBpbGVyLmgKaW5kZXggODE1NWRiMi4uMjlmZTg1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY29tcGlsZXIuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jb21waWxlci5oCkBAIC04LDggKzgsMjEgQEAKICAqIFRoaXMgc3RyaW5nIGlzIG1lYW50IHRvIGJlIGNvbmNhdGVuYXRlZCB3aXRoIHRoZSBpbmxpbmUgYXNtIHN0cmluZyBhbmQKICAqIHdpbGwgY2F1c2UgY29tcGlsYXRpb24gdG8gc3RvcCBvbiBtaXNtYXRjaC4KICAqIChmb3IgZGV0YWlscywgc2VlIGdjYyBQUiAxNTA4OSkKKyAqIEZvciBjb21wYXRpYmlsaXR5IHdpdGggY2xhbmcsIHdlIGhhdmUgdG8gc3BlY2lmaWNhbGx5IHRha2UgdGhlIGVxdWl2YWxlbmNlCisgKiBvZiAncjExJyA8LT4gJ2ZwJyBhbmQgJ3IxMicgPC0+ICdpcCcgaW50byBhY2NvdW50IGFzIHdlbGwuCiAgKi8KLSNkZWZpbmUgX19hc21lcSh4LCB5KSAgIi5pZm5jICIgeCAiLCIgeSAiIDsgLmVyciA7IC5lbmRpZlxuXHQiCisjZGVmaW5lIF9fYXNtZXEoeCwgeSkJCQkJXAorCSIuaWZuYyAiIHggIiwiIHkgIjsgIgkJCVwKKwkgICIuaWZuYyAiIHggeSAiLGZwcjExOyAiIAkJXAorCSAgICAiLmlmbmMgIiB4IHkgIixyMTFmcDsgIgkJXAorCSAgICAgICIuaWZuYyAiIHggeSAiLGlwcjEyOyAiIAkJXAorCSAgICAgICAgIi5pZm5jICIgeCB5ICIscjEyaXA7ICIJCVwKKwkgICAgICAgICAgIi5lcnI7ICIJCQlcCisJICAgICAgICAiLmVuZGlmOyAiCQkJXAorCSAgICAgICIuZW5kaWY7ICIJCQlcCisJICAgICIuZW5kaWY7ICIJCQkJXAorCSAgIi5lbmRpZjsgIgkJCQlcCisJIi5lbmRpZlxuXHQiCiAKIAogI2VuZGlmIC8qIF9fQVNNX0FSTV9DT01QSUxFUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaW5zbi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW5zbi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9rZXJuZWwvaW5zbi5oCnJlbmFtZSB0byBhcmNoL2FybS9pbmNsdWRlL2FzbS9pbnNuLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2twcm9iZXMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2twcm9iZXMuaAppbmRleCA0OWZhMGRmLi4zZWE5YmU1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va3Byb2Jlcy5oCkBAIC0yMiw3ICsyMiw2IEBACiAKICNkZWZpbmUgX19BUkNIX1dBTlRfS1BST0JFU19JTlNOX1NMT1QKICNkZWZpbmUgTUFYX0lOU05fU0laRQkJCTIKLSNkZWZpbmUgTUFYX1NUQUNLX1NJWkUJCQk2NAkvKiAzMiB3b3VsZCBwcm9iYWJseSBiZSBPSyAqLwogCiAjZGVmaW5lIGZsdXNoX2luc25fc2xvdChwKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBrcmV0cHJvYmVfYmxhY2tsaXN0X3NpemUJMApAQCAtNTEsNSArNTAsMzcgQEAKIGludCBrcHJvYmVfZXhjZXB0aW9uc19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkJICAgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqZGF0YSk7CiAKKy8qIG9wdGluc24gdGVtcGxhdGUgYWRkcmVzc2VzICovCitleHRlcm4gX192aXNpYmxlIGtwcm9iZV9vcGNvZGVfdCBvcHRwcm9iZV90ZW1wbGF0ZV9lbnRyeTsKK2V4dGVybiBfX3Zpc2libGUga3Byb2JlX29wY29kZV90IG9wdHByb2JlX3RlbXBsYXRlX3ZhbDsKK2V4dGVybiBfX3Zpc2libGUga3Byb2JlX29wY29kZV90IG9wdHByb2JlX3RlbXBsYXRlX2NhbGw7CitleHRlcm4gX192aXNpYmxlIGtwcm9iZV9vcGNvZGVfdCBvcHRwcm9iZV90ZW1wbGF0ZV9lbmQ7CitleHRlcm4gX192aXNpYmxlIGtwcm9iZV9vcGNvZGVfdCBvcHRwcm9iZV90ZW1wbGF0ZV9zdWJfc3A7CitleHRlcm4gX192aXNpYmxlIGtwcm9iZV9vcGNvZGVfdCBvcHRwcm9iZV90ZW1wbGF0ZV9hZGRfc3A7CitleHRlcm4gX192aXNpYmxlIGtwcm9iZV9vcGNvZGVfdCBvcHRwcm9iZV90ZW1wbGF0ZV9yZXN0b3JlX2JlZ2luOworZXh0ZXJuIF9fdmlzaWJsZSBrcHJvYmVfb3Bjb2RlX3Qgb3B0cHJvYmVfdGVtcGxhdGVfcmVzdG9yZV9vcmlnX2luc247CitleHRlcm4gX192aXNpYmxlIGtwcm9iZV9vcGNvZGVfdCBvcHRwcm9iZV90ZW1wbGF0ZV9yZXN0b3JlX2VuZDsKKworI2RlZmluZSBNQVhfT1BUSU1JWkVEX0xFTkdUSAk0CisjZGVmaW5lIE1BWF9PUFRJTlNOX1NJWkUJCQkJXAorCSgodW5zaWduZWQgbG9uZykmb3B0cHJvYmVfdGVtcGxhdGVfZW5kIC0JXAorCSAodW5zaWduZWQgbG9uZykmb3B0cHJvYmVfdGVtcGxhdGVfZW50cnkpCisjZGVmaW5lIFJFTEFUSVZFSlVNUF9TSVpFCTQKKworc3RydWN0IGFyY2hfb3B0aW1pemVkX2luc24geworCS8qCisJICogY29weSBvZiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb25zLgorCSAqIERpZmZlcmVudCBmcm9tIHg4NiwgQVJNIGtwcm9iZV9vcGNvZGVfdCBpcyB1MzIuCisJICovCisjZGVmaW5lIE1BWF9DT1BJRURfSU5TTglESVZfUk9VTkRfVVAoUkVMQVRJVkVKVU1QX1NJWkUsIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKQorCWtwcm9iZV9vcGNvZGVfdCBjb3BpZWRfaW5zbltNQVhfQ09QSUVEX0lOU05dOworCS8qIGRldG91ciBjb2RlIGJ1ZmZlciAqLworCWtwcm9iZV9vcGNvZGVfdCAqaW5zbjsKKwkvKgorCSAqIFdlIGFsd2F5cyBjb3B5IG9uZSBpbnN0cnVjdGlvbiBvbiBBUk0sCisJICogc28gc2l6ZSB3aWxsIGFsd2F5cyBiZSA0LCBhbmQgdW5saWtlIHg4NiwgdGhlcmUgaXMgbm8KKwkgKiBuZWVkIGZvciBhIHNpemUgZmllbGQuCisJICovCit9OwogCiAjZW5kaWYgLyogX0FSTV9LUFJPQkVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCmluZGV4IDY2Y2UxNzYuLjdiMDE1MjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaApAQCAtMzgsNiArMzgsMTYgQEAKIAl2Y3B1LT5hcmNoLmhjciA9IEhDUl9HVUVTVF9NQVNLOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmNwdV9nZXRfaGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gdmNwdS0+YXJjaC5oY3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2Y3B1X3NldF9oY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGhjcikKK3sKKwl2Y3B1LT5hcmNoLmhjciA9IGhjcjsKK30KKwogc3RhdGljIGlubGluZSBib29sIHZjcHVfbW9kZV9pc18zMmJpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCAyNTRlMDY1Li4wNGI0ZWEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTEyNSw5ICsxMjUsNiBAQAogCSAqIEFueXRoaW5nIHRoYXQgaXMgbm90IHVzZWQgZGlyZWN0bHkgZnJvbSBhc3NlbWJseSBjb2RlIGdvZXMKIAkgKiBoZXJlLgogCSAqLwotCS8qIGRjYWNoZSBzZXQvd2F5IG9wZXJhdGlvbiBwZW5kaW5nICovCi0JaW50IGxhc3RfcGNwdTsKLQljcHVtYXNrX3QgcmVxdWlyZV9kY2FjaGVfZmx1c2g7CiAKIAkvKiBEb24ndCBydW4gdGhlIGd1ZXN0IG9uIHRoaXMgdmNwdSAqLwogCWJvb2wgcGF1c2U7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1fbW11LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9rdm1fbW11LmgKaW5kZXggNjNlMGVjYy4uMWJjYThmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20va3ZtX21tdS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2t2bV9tbXUuaApAQCAtNDQsNiArNDQsNyBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KIApAQCAtMTYxLDEzICsxNjIsMTAgQEAKIAlyZXR1cm4gKHZjcHUtPmFyY2guY3AxNVtjMV9TQ1RMUl0gJiAwYjEwMSkgPT0gMGIxMDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjb2hlcmVudF9jYWNoZV9ndWVzdF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaHZhX3QgaHZhLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkJICAgICBib29sIGlwYV91bmNhY2hlZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2NvaGVyZW50X2NhY2hlX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBwZm5fdCBwZm4sCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJCSAgICAgICBib29sIGlwYV91bmNhY2hlZCkKIHsKLQlpZiAoIXZjcHVfaGFzX2NhY2hlX2VuYWJsZWQodmNwdSkgfHwgaXBhX3VuY2FjaGVkKQotCQlrdm1fZmx1c2hfZGNhY2hlX3RvX3BvYygodm9pZCAqKWh2YSwgc2l6ZSk7Ci0JCiAJLyoKIAkgKiBJZiB3ZSBhcmUgZ29pbmcgdG8gaW5zZXJ0IGFuIGluc3RydWN0aW9uIHBhZ2UgYW5kIHRoZSBpY2FjaGUgaXMKIAkgKiBlaXRoZXIgVklQVCBvciBQSVBULCB0aGVyZSBpcyBhIHBvdGVudGlhbCBwcm9ibGVtIHdoZXJlIHRoZSBob3N0CkBAIC0xNzksMTggKzE3Nyw3NyBAQAogCSAqCiAJICogVklWVCBjYWNoZXMgYXJlIHRhZ2dlZCB1c2luZyBib3RoIHRoZSBBU0lEIGFuZCB0aGUgVk1JRCBhbmQgZG9lc24ndAogCSAqIG5lZWQgYW55IGtpbmQgb2YgZmx1c2hpbmcgKERESSAwNDA2Qy5iIC0gUGFnZSBCMy0xMzkyKS4KKwkgKgorCSAqIFdlIG5lZWQgdG8gZG8gdGhpcyB0aHJvdWdoIGEga2VybmVsIG1hcHBpbmcgKHVzaW5nIHRoZQorCSAqIHVzZXItc3BhY2UgbWFwcGluZyBoYXMgcHJvdmVkIHRvIGJlIHRoZSB3cm9uZworCSAqIHNvbHV0aW9uKS4gRm9yIHRoYXQsIHdlIG5lZWQgdG8ga21hcCBvbmUgcGFnZSBhdCBhIHRpbWUsCisJICogYW5kIGl0ZXJhdGUgb3ZlciB0aGUgcmFuZ2UuCiAJICovCi0JaWYgKGljYWNoZV9pc19waXB0KCkpIHsKLQkJX19jcHVjX2NvaGVyZW50X3VzZXJfcmFuZ2UoaHZhLCBodmEgKyBzaXplKTsKLQl9IGVsc2UgaWYgKCFpY2FjaGVfaXNfdml2dF9hc2lkX3RhZ2dlZCgpKSB7CisKKwlib29sIG5lZWRfZmx1c2ggPSAhdmNwdV9oYXNfY2FjaGVfZW5hYmxlZCh2Y3B1KSB8fCBpcGFfdW5jYWNoZWQ7CisKKwlWTV9CVUdfT04oc2l6ZSAmIFBBR0VfTUFTSyk7CisKKwlpZiAoIW5lZWRfZmx1c2ggJiYgIWljYWNoZV9pc19waXB0KCkpCisJCWdvdG8gdmlwdF9jYWNoZTsKKworCXdoaWxlIChzaXplKSB7CisJCXZvaWQgKnZhID0ga21hcF9hdG9taWNfcGZuKHBmbik7CisKKwkJaWYgKG5lZWRfZmx1c2gpCisJCQlrdm1fZmx1c2hfZGNhY2hlX3RvX3BvYyh2YSwgUEFHRV9TSVpFKTsKKworCQlpZiAoaWNhY2hlX2lzX3BpcHQoKSkKKwkJCV9fY3B1Y19jb2hlcmVudF91c2VyX3JhbmdlKCh1bnNpZ25lZCBsb25nKXZhLAorCQkJCQkJICAgKHVuc2lnbmVkIGxvbmcpdmEgKyBQQUdFX1NJWkUpOworCisJCXNpemUgLT0gUEFHRV9TSVpFOworCQlwZm4rKzsKKworCQlrdW5tYXBfYXRvbWljKHZhKTsKKwl9CisKK3ZpcHRfY2FjaGU6CisJaWYgKCFpY2FjaGVfaXNfcGlwdCgpICYmICFpY2FjaGVfaXNfdml2dF9hc2lkX3RhZ2dlZCgpKSB7CiAJCS8qIGFueSBraW5kIG9mIFZJUFQgY2FjaGUgKi8KIAkJX19mbHVzaF9pY2FjaGVfYWxsKCk7CiAJfQogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgX19rdm1fZmx1c2hfZGNhY2hlX3B0ZShwdGVfdCBwdGUpCit7CisJdm9pZCAqdmEgPSBrbWFwX2F0b21pYyhwdGVfcGFnZShwdGUpKTsKKworCWt2bV9mbHVzaF9kY2FjaGVfdG9fcG9jKHZhLCBQQUdFX1NJWkUpOworCisJa3VubWFwX2F0b21pYyh2YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2t2bV9mbHVzaF9kY2FjaGVfcG1kKHBtZF90IHBtZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBQTURfU0laRTsKKwlwZm5fdCBwZm4gPSBwbWRfcGZuKHBtZCk7CisKKwl3aGlsZSAoc2l6ZSkgeworCQl2b2lkICp2YSA9IGttYXBfYXRvbWljX3BmbihwZm4pOworCisJCWt2bV9mbHVzaF9kY2FjaGVfdG9fcG9jKHZhLCBQQUdFX1NJWkUpOworCisJCXBmbisrOworCQlzaXplIC09IFBBR0VfU0laRTsKKworCQlrdW5tYXBfYXRvbWljKHZhKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2t2bV9mbHVzaF9kY2FjaGVfcHVkKHB1ZF90IHB1ZCkKK3sKK30KKwogI2RlZmluZSBrdm1fdmlydF90b19waHlzKHgpCQl2aXJ0X3RvX2lkbWFwKCh1bnNpZ25lZCBsb25nKSh4KSkKIAotdm9pZCBzdGFnZTJfZmx1c2hfdm0oc3RydWN0IGt2bSAqa3ZtKTsKK3ZvaWQga3ZtX3NldF93YXlfZmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK3ZvaWQga3ZtX3RvZ2dsZV9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgd2FzX2VuYWJsZWQpOwogCiAjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3BjaS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9wY2kuaAppbmRleCA4MjkyYjVmLi4yOGI5YmIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3BjaS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvcGNpLmgKQEAgLTE5LDkgKzE5LDYgQEAKIHN0cnVjdCBkZXZpY2U7CiAKIHN0cnVjdCBod19wY2kgewotI2lmZGVmIENPTkZJR19QQ0lfRE9NQUlOUwotCWludAkJZG9tYWluOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAlzdHJ1Y3QgbXNpX2NvbnRyb2xsZXIgKm1zaV9jdHJsOwogI2VuZGlmCkBAIC00NSw5ICs0Miw2IEBACiAgKiBQZXItY29udHJvbGxlciBzdHJ1Y3R1cmUKICAqLwogc3RydWN0IHBjaV9zeXNfZGF0YSB7Ci0jaWZkZWYgQ09ORklHX1BDSV9ET01BSU5TCi0JaW50CQlkb21haW47Ci0jZW5kaWYKICNpZmRlZiBDT05GSUdfUENJX01TSQogCXN0cnVjdCBtc2lfY29udHJvbGxlciAqbXNpX2N0cmw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL291dGVyY2FjaGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL291dGVyY2FjaGUuaAppbmRleCA4OTFhNTZiLi41NjNiOTJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9vdXRlcmNhY2hlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vb3V0ZXJjYWNoZS5oCkBAIC0yMyw2ICsyMyw4IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCitzdHJ1Y3QgbDJ4MF9yZWdzOworCiBzdHJ1Y3Qgb3V0ZXJfY2FjaGVfZm5zIHsKIAl2b2lkICgqaW52X3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIAl2b2lkICgqY2xlYW5fcmFuZ2UpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwpAQCAtMzYsNiArMzgsNyBAQAogCiAJLyogVGhpcyBpcyBhbiBBUk0gTDJDIHRoaW5nICovCiAJdm9pZCAoKndyaXRlX3NlYykodW5zaWduZWQgbG9uZywgdW5zaWduZWQpOworCXZvaWQgKCpjb25maWd1cmUpKGNvbnN0IHN0cnVjdCBsMngwX3JlZ3MgKik7CiB9OwogCiBleHRlcm4gc3RydWN0IG91dGVyX2NhY2hlX2ZucyBvdXRlcl9jYWNoZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wYXRjaC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGF0Y2guaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0va2VybmVsL3BhdGNoLmgKcmVuYW1lIHRvIGFyY2gvYXJtL2luY2x1ZGUvYXNtL3BhdGNoLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggN2U5NWQ4NS4uNTg1ZGMzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGNpLmgKQEAgLTE4LDEzICsxOCw2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlMKLXN0YXRpYyBpbmxpbmUgaW50IHBjaV9kb21haW5fbnIoc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQlzdHJ1Y3QgcGNpX3N5c19kYXRhICpyb290ID0gYnVzLT5zeXNkYXRhOwotCi0JcmV0dXJuIHJvb3QtPmRvbWFpbjsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgcGNpX3Byb2NfZG9tYWluKHN0cnVjdCBwY2lfYnVzICpidXMpCiB7CiAJcmV0dXJuIHBjaV9kb21haW5fbnIoYnVzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCmluZGV4IGYwMjc5NDEuLmJmZDY2MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaApAQCAtMTAsNiArMTAsOCBAQAogI2lmbmRlZiBfQVNNX1BHVEFCTEVfMkxFVkVMX0gKICNkZWZpbmUgX0FTTV9QR1RBQkxFXzJMRVZFTF9ICiAKKyNkZWZpbmUgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAorCiAvKgogICogSGFyZHdhcmUtd2lzZSwgd2UgaGF2ZSBhIHR3byBsZXZlbCBwYWdlIHRhYmxlIHN0cnVjdHVyZSwgd2hlcmUgdGhlIGZpcnN0CiAgKiBsZXZlbCBoYXMgNDA5NiBlbnRyaWVzLCBhbmQgdGhlIHNlY29uZCBsZXZlbCBoYXMgMjU2IGVudHJpZXMuICBFYWNoIGVudHJ5CkBAIC0xMTgsNyArMTIwLDYgQEAKICNkZWZpbmUgTF9QVEVfVkFMSUQJCShfQVQocHRldmFsX3QsIDEpIDw8IDApCQkvKiBWYWxpZCAqLwogI2RlZmluZSBMX1BURV9QUkVTRU5UCQkoX0FUKHB0ZXZhbF90LCAxKSA8PCAwKQogI2RlZmluZSBMX1BURV9ZT1VORwkJKF9BVChwdGV2YWxfdCwgMSkgPDwgMSkKLSNkZWZpbmUgTF9QVEVfRklMRQkJKF9BVChwdGV2YWxfdCwgMSkgPDwgMikJLyogb25seSB3aGVuICFQUkVTRU5UICovCiAjZGVmaW5lIExfUFRFX0RJUlRZCQkoX0FUKHB0ZXZhbF90LCAxKSA8PCA2KQogI2RlZmluZSBMX1BURV9SRE9OTFkJCShfQVQocHRldmFsX3QsIDEpIDw8IDcpCiAjZGVmaW5lIExfUFRFX1VTRVIJCShfQVQocHRldmFsX3QsIDEpIDw8IDgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaAppbmRleCBhMzFlY2RhZC4uMThkYmM4MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCkBAIC03Nyw3ICs3Nyw2IEBACiAgKi8KICNkZWZpbmUgTF9QVEVfVkFMSUQJCShfQVQocHRldmFsX3QsIDEpIDw8IDApCQkvKiBWYWxpZCAqLwogI2RlZmluZSBMX1BURV9QUkVTRU5UCQkoX0FUKHB0ZXZhbF90LCAzKSA8PCAwKQkJLyogUHJlc2VudCAqLwotI2RlZmluZSBMX1BURV9GSUxFCQkoX0FUKHB0ZXZhbF90LCAxKSA8PCAyKQkJLyogb25seSB3aGVuICFQUkVTRU5UICovCiAjZGVmaW5lIExfUFRFX1VTRVIJCShfQVQocHRldmFsX3QsIDEpIDw8IDYpCQkvKiBBUFsxXSAqLwogI2RlZmluZSBMX1BURV9TSEFSRUQJCShfQVQocHRldmFsX3QsIDMpIDw8IDgpCQkvKiBTSFsxOjBdLCBpbm5lciBzaGFyZWFibGUgKi8KICNkZWZpbmUgTF9QVEVfWU9VTkcJCShfQVQocHRldmFsX3QsIDEpIDw8IDEwKQkvKiBBRiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS1ub21tdS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS1ub21tdS5oCmluZGV4IDA2NDIyMjguLmFkZDA5NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtbm9tbXUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLW5vbW11LmgKQEAgLTU0LDggKzU0LDYgQEAKIAogdHlwZWRlZiBwdGVfdCAqcHRlX2FkZHJfdDsKIAotc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKSB7IHJldHVybiAwOyB9Ci0KIC8qCiAgKiBaRVJPX1BBR0UgaXMgYSBnbG9iYWwgc2hhcmVkIHBhZ2UgdGhhdCBpcyBhbHdheXMgemVybzogdXNlZAogICogZm9yIHplcm8tbWFwcGVkIG1lbW9yeSBhcmVhcyBldGMuLgpAQCAtODcsNyArODUsNyBAQAogI2RlZmluZQlWTUFMTE9DX1NUQVJUCTBVTAogI2RlZmluZQlWTUFMTE9DX0VORAkweGZmZmZmZmZmVUwKIAotI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MgICAgICAoMCkKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTICAgICAgMFVMCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBkNWNhYzU0Li5mNDAzNTQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0zMTgsMTIgKzMxOCwxMiBAQAogICoKICAqICAgMyAzIDIgMiAyIDIgMiAyIDIgMiAyIDIgMSAxIDEgMSAxIDEgMSAxIDEgMQogICogICAxIDAgOSA4IDcgNiA1IDQgMyAyIDEgMCA5IDggNyA2IDUgNCAzIDIgMSAwIDkgOCA3IDYgNSA0IDMgMiAxIDAKLSAqICAgPC0tLS0tLS0tLS0tLS0tLSBvZmZzZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gPCB0eXBlIC0+IDAgMCAwCisgKiAgIDwtLS0tLS0tLS0tLS0tLS0gb2Zmc2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT4gPCB0eXBlIC0+IDAgMAogICoKLSAqIFRoaXMgZ2l2ZXMgdXMgdXAgdG8gMzEgc3dhcCBmaWxlcyBhbmQgNjRHQiBwZXIgc3dhcCBmaWxlLiAgTm90ZSB0aGF0CisgKiBUaGlzIGdpdmVzIHVzIHVwIHRvIDMxIHN3YXAgZmlsZXMgYW5kIDEyOEdCIHBlciBzd2FwIGZpbGUuICBOb3RlIHRoYXQKICAqIHRoZSBvZmZzZXQgZmllbGQgaXMgYWx3YXlzIG5vbi16ZXJvLgogICovCi0jZGVmaW5lIF9fU1dQX1RZUEVfU0hJRlQJMworI2RlZmluZSBfX1NXUF9UWVBFX1NISUZUCTIKICNkZWZpbmUgX19TV1BfVFlQRV9CSVRTCQk1CiAjZGVmaW5lIF9fU1dQX1RZUEVfTUFTSwkJKCgxIDw8IF9fU1dQX1RZUEVfQklUUykgLSAxKQogI2RlZmluZSBfX1NXUF9PRkZTRVRfU0hJRlQJKF9fU1dQX1RZUEVfQklUUyArIF9fU1dQX1RZUEVfU0hJRlQpCkBAIC0zNDIsMjAgKzM0Miw2IEBACiAgKi8KICNkZWZpbmUgTUFYX1NXQVBGSUxFU19DSEVDSygpIEJVSUxEX0JVR19PTihNQVhfU1dBUEZJTEVTX1NISUZUID4gX19TV1BfVFlQRV9CSVRTKQogCi0vKgotICogRW5jb2RlIGFuZCBkZWNvZGUgYSBmaWxlIGVudHJ5LiAgRmlsZSBlbnRyaWVzIGFyZSBzdG9yZWQgaW4gdGhlIExpbnV4Ci0gKiBwYWdlIHRhYmxlcyBhcyBmb2xsb3dzOgotICoKLSAqICAgMyAzIDIgMiAyIDIgMiAyIDIgMiAyIDIgMSAxIDEgMSAxIDEgMSAxIDEgMQotICogICAxIDAgOSA4IDcgNiA1IDQgMyAyIDEgMCA5IDggNyA2IDUgNCAzIDIgMSAwIDkgOCA3IDYgNSA0IDMgMiAxIDAKLSAqICAgPC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG9mZnNldCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IDEgMCAwCi0gKi8KLSNkZWZpbmUgcHRlX2ZpbGUocHRlKQkJKHB0ZV92YWwocHRlKSAmIExfUFRFX0ZJTEUpCi0jZGVmaW5lIHB0ZV90b19wZ29mZih4KQkJKHB0ZV92YWwoeCkgPj4gMykKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKHgpCQlfX3B0ZSgoKHgpIDw8IDMpIHwgTF9QVEVfRklMRSkKLQotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkyOQotCiAvKiBOZWVkcyB0byBiZSBkZWZpbmVkIGhlcmUgYW5kIG5vdCBpbiBsaW51eC9tbS5oLCBhcyBpdCBpcyBhcmNoIGRlcGVuZGVudCAqLwogLyogRklYTUU6IHRoaXMgaXMgbm90IGNvcnJlY3QgKi8KICNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvYmVzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9iZXMuaAppbmRleCA4MDZjZmU2Li4xZTViOWJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9iZXMuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9iZXMuaApAQCAtMTksNiArMTksOCBAQAogI2lmbmRlZiBfQVNNX1BST0JFU19ICiAjZGVmaW5lIF9BU01fUFJPQkVTX0gKIAorI2lmbmRlZiBfX0FTU0VNQkxZX18KKwogdHlwZWRlZiB1MzIgcHJvYmVzX29wY29kZV90OwogCiBzdHJ1Y3QgYXJjaF9wcm9iZXNfaW5zbjsKQEAgLTM4LDYgKzQwLDE5IEBACiAJcHJvYmVzX2NoZWNrX2NjCQkJKmluc25fY2hlY2tfY2M7CiAJcHJvYmVzX2luc25fc2luZ2xlc3RlcF90CSppbnNuX3NpbmdsZXN0ZXA7CiAJcHJvYmVzX2luc25fZm5fdAkJKmluc25fZm47CisJaW50CQkJCXN0YWNrX3NwYWNlOworCXVuc2lnbmVkIGxvbmcJCQlyZWdpc3Rlcl91c2FnZV9mbGFnczsKKwlib29sCQkJCWtwcm9iZV9kaXJlY3RfZXhlYzsKIH07CiAKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyoKKyAqIFdlIGFzc3VtZSBvbmUgaW5zdHJ1Y3Rpb24gY2FuIGNvbnN1bWUgYXQgbW9zdCA2NCBieXRlcyBzdGFjaywgd2hpY2ggaXMKKyAqICdwdXNoIHtyMC1yMTV9Jy4gSW5zdHJ1Y3Rpb25zIGNvbnN1bWUgbW9yZSBvciB1bmtub3duIHN0YWNrIHNwYWNlIGxpa2UKKyAqICdzdHIgcjAsIFtzcCwgIy04MF0nIGFuZCAnc3RyIHIwLCBbc3AsIHIxXScgc2hvdWxkIGJlIHByb2hpYml0IHRvIHByb2JlLgorICogQm90aCBrcHJvYmUgYW5kIGpwcm9iZSB1c2UgdGhpcyBtYWNyby4KKyAqLworI2RlZmluZSBNQVhfU1RBQ0tfU0laRQkJCTY0CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20veGVuL3BhZ2UuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3hlbi9wYWdlLmgKaW5kZXggNjhjNzM5Yi4uMmY3ZTZmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20veGVuL3BhZ2UuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS94ZW4vcGFnZS5oCkBAIC05Miw3ICs5Miw3IEBACiAJCQkJICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGNvdW50KTsKIAogZXh0ZXJuIGludCBjbGVhcl9mb3JlaWduX3AybV9tYXBwaW5nKHN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmICp1bm1hcF9vcHMsCi0JCQkJICAgICBzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYgKmttYXBfb3BzLAorCQkJCSAgICAgc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgKmt1bm1hcF9vcHMsCiAJCQkJICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQpOwogCiBib29sIF9fc2V0X3BoeXNfdG9fbWFjaGluZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBtZm4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9pbmNsdWRlL2RlYnVnL2tzODY5NS5TCnNpbWlsYXJpdHkgaW5kZXggODAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCnJlbmFtZSB0byBhcmNoL2FybS9pbmNsdWRlL2RlYnVnL2tzODY5NS5TCmluZGV4IGE3OWU0ODkuLjk2MWRhMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcva3M4Njk1LlMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXJjaC9hcm0vbWFjaC1rczg2OTUvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKyAqIGFyY2gvYXJtL2luY2x1ZGUvZGVidWcva3M4Njk1LlMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwpAQCAtMTEsOCArMTEsMTIgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLXVhcnQuaD4KKyNkZWZpbmUgS1M4Njk1X1VBUlRfUEEJMHgwM2ZmZTAwMAorI2RlZmluZSBLUzg2OTVfVUFSVF9WQQkweGYwMGZlMDAwCisjZGVmaW5lIEtTODY5NV9VUlRICSgweDA0KQorI2RlZmluZSBLUzg2OTVfVVJMUwkoMHgxNCkKKyNkZWZpbmUgVVJMU19VUlRFCSgxIDw8IDYpCisjZGVmaW5lIFVSTFNfVVJUSFJFCSgxIDw8IDUpCiAKIAkubWFjcm8JYWRkcnVhcnQsIHJwLCBydiwgdG1wCiAJCWxkcglccnAsID1LUzg2OTVfVUFSVF9QQQkJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcvbmV0eC5TCnNpbWlsYXJpdHkgaW5kZXggNjElCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtbmV0eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpyZW5hbWUgdG8gYXJjaC9hcm0vaW5jbHVkZS9kZWJ1Zy9uZXR4LlMKaW5kZXggMjQ3NzgxZS4uODFlMWIyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvZGVidWcvbmV0eC5TCkBAIC0xLDUgKzEsNCBAQAotLyogYXJjaC9hcm0vbWFjaC1uZXR4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCi0gKgorLyoKICAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OSBSdXNzZWxsIEtpbmcKQEAgLTExLDI2ICsxMCwyNyBAQAogICoKICovCiAKLSNpbmNsdWRlICJoYXJkd2FyZS5oIgorI2RlZmluZSBVQVJUX0RBVEEgMAorI2RlZmluZSBVQVJUX0ZMQUcgMHgxOAorI2RlZmluZSBVQVJUX0ZMQUdfQlVTWSAoMSA8PCAzKQogCiAJCS5tYWNybwlhZGRydWFydCwgcnAsIHJ2LCB0bXAKLQkJbW92CVxycCwgIzB4MDAwMDBhMDAKLQkJb3JyCVxydiwgXHJwLCAjaW9fcDJ2KDB4MDAxMDAwMDApCUAgdmlydHVhbAotCQlvcnIJXHJwLCBccnAsICMweDAwMTAwMDAwCQlAIHBoeXNpY2FsCisJCWxkcglccnAsID1DT05GSUdfREVCVUdfVUFSVF9QSFlTCisJCWxkcglccnYsID1DT05GSUdfREVCVUdfVUFSVF9WSVJUCiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4Ci0JCXN0cglccmQsIFtccngsICMwXQorCQlzdHIJXHJkLCBbXHJ4LCAjVUFSVF9EQVRBXQogCQkuZW5kbQogCiAJCS5tYWNybwlidXN5dWFydCxyZCxyeAotMTAwMjoJCWxkcglccmQsIFtccngsICMweDE4XQotCQl0c3QJXHJkLCAjKDEgPDwgMykKKzEwMDI6CQlsZHIJXHJkLCBbXHJ4LCAjVUFSVF9GTEFHXQorCQl0c3QJXHJkLCAjVUFSVF9GTEFHX0JVU1kKIAkJYm5lCTEwMDJiCiAJCS5lbmRtCiAKIAkJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4Ci0xMDAxOgkJbGRyCVxyZCwgW1xyeCwgIzB4MThdCi0JCXRzdAlccmQsICMoMSA8PCAzKQorMTAwMToJCWxkcglccmQsIFtccngsICNVQVJUX0ZMQUddCisJCXRzdAlccmQsICNVQVJUX0ZMQUdfQlVTWQogCQlibmUJMTAwMWIKIAkJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQppbmRleCBmYjJiNzFlLi45MDIzOTdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCkBAIC01MSwyMCArNTEsOCBAQAogb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikJKz0gZnRyYWNlLm8gaW5zbi5vCiBvYmotJChDT05GSUdfSlVNUF9MQUJFTCkJKz0ganVtcF9sYWJlbC5vIGluc24ubyBwYXRjaC5vCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjLm8gcmVsb2NhdGVfa2VybmVsLm8KLW9iai0kKENPTkZJR19VUFJPQkVTKQkJKz0gcHJvYmVzLm8gcHJvYmVzLWFybS5vIHVwcm9iZXMubyB1cHJvYmVzLWFybS5vCi1vYmotJChDT05GSUdfS1BST0JFUykJCSs9IHByb2Jlcy5vIGtwcm9iZXMubyBrcHJvYmVzLWNvbW1vbi5vIHBhdGNoLm8KLWlmZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCi1vYmotJChDT05GSUdfS1BST0JFUykJCSs9IGtwcm9iZXMtdGh1bWIubyBwcm9iZXMtdGh1bWIubwotZWxzZQotb2JqLSQoQ09ORklHX0tQUk9CRVMpCQkrPSBrcHJvYmVzLWFybS5vIHByb2Jlcy1hcm0ubwotZW5kaWYKLW9iai0kKENPTkZJR19BUk1fS1BST0JFU19URVNUKQkrPSB0ZXN0LWtwcm9iZXMubwotdGVzdC1rcHJvYmVzLW9ianMJCTo9IGtwcm9iZXMtdGVzdC5vCi1pZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAotdGVzdC1rcHJvYmVzLW9ianMJCSs9IGtwcm9iZXMtdGVzdC10aHVtYi5vCi1lbHNlCi10ZXN0LWtwcm9iZXMtb2JqcwkJKz0ga3Byb2Jlcy10ZXN0LWFybS5vCi1lbmRpZgorIyBNYWluIHN0YWZmcyBpbiBLUFJPQkVTIGFyZSBpbiBhcmNoL2FybS9wcm9iZXMvIC4KK29iai0kKENPTkZJR19LUFJPQkVTKQkJKz0gcGF0Y2gubyBpbnNuLm8KIG9iai0kKENPTkZJR19PQUJJX0NPTVBBVCkJKz0gc3lzX29hYmktY29tcGF0Lm8KIG9iai0kKENPTkZJR19BUk1fVEhVTUJFRSkJKz0gdGh1bWJlZS5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubyBwYXRjaC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMgYi9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKaW5kZXggYTRlZmZkNi4uYWIxOWI3YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9iaW9zMzIuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYmlvczMyLmMKQEAgLTQyMiwxNyArNDIyLDE2IEBACiBzdGF0aWMgaW50IHBjaWJpb3NfaW5pdF9yZXNvdXJjZXMoaW50IGJ1c25yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlX3dpbmRvdyAqd2luZG93OworCXN0cnVjdCByZXNvdXJjZV9lbnRyeSAqd2luZG93OwogCiAJaWYgKGxpc3RfZW1wdHkoJnN5cy0+cmVzb3VyY2VzKSkgewogCQlwY2lfYWRkX3Jlc291cmNlX29mZnNldCgmc3lzLT5yZXNvdXJjZXMsCiAJCQkgJmlvbWVtX3Jlc291cmNlLCBzeXMtPm1lbV9vZmZzZXQpOwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnkod2luZG93LCAmc3lzLT5yZXNvdXJjZXMsIGxpc3QpIHsKKwlyZXNvdXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5KHdpbmRvdywgJnN5cy0+cmVzb3VyY2VzKQogCQlpZiAocmVzb3VyY2VfdHlwZSh3aW5kb3ctPnJlcykgPT0gSU9SRVNPVVJDRV9JTykKIAkJCXJldHVybiAwOwotCX0KIAogCXN5cy0+aW9fcmVzLnN0YXJ0ID0gKGJ1c25yICogU1pfNjRLKSA/ICA6IHBjaWJpb3NfbWluX2lvOwogCXN5cy0+aW9fcmVzLmVuZCA9IChidXNuciArIDEpICogU1pfNjRLIC0gMTsKQEAgLTQ2Myw5ICs0NjIsNiBAQAogCQlpZiAoIXN5cykKIAkJCXBhbmljKCJQQ0k6IHVuYWJsZSB0byBhbGxvY2F0ZSBzeXMgZGF0YSEiKTsKIAotI2lmZGVmIENPTkZJR19QQ0lfRE9NQUlOUwotCQlzeXMtPmRvbWFpbiAgPSBody0+ZG9tYWluOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIAkJc3lzLT5tc2lfY3RybCA9IGh3LT5tc2lfY3RybDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKaW5kZXggMmY1NTU1ZC4uNjcyYjIxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJlbnRyeS1oZWFkZXIuUyIKICNpbmNsdWRlIDxhc20vZW50cnktbWFjcm8tbXVsdGkuUz4KKyNpbmNsdWRlIDxhc20vcHJvYmVzLmg+CiAKIC8qCiAgKiBJbnRlcnJ1cHQgaGFuZGxpbmcuCkBAIC0yNDksNyArMjUwLDcgQEAKIAlAIElmIGEga3Byb2JlIGlzIGFib3V0IHRvIHNpbXVsYXRlIGEgInN0bWRiIHNwLi4uIiBpbnN0cnVjdGlvbiwKIAlAIGl0IG9idmlvdXNseSBuZWVkcyBmcmVlIHN0YWNrIHNwYWNlIHdoaWNoIHRoZW4gd2lsbCBiZWxvbmcgdG8KIAlAIHRoZSBzYXZlZCBjb250ZXh0LgotCXN2Y19lbnRyeSA2NAorCXN2Y19lbnRyeSBNQVhfU1RBQ0tfU0laRQogI2Vsc2UKIAlzdmNfZW50cnkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LXY3bS5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LXY3bS5TCmluZGV4IDIyNjBmMTguLjg5NDRmNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS12N20uUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktdjdtLlMKQEAgLTIyLDEwICsyMiwxMiBAQAogCiBfX2ludmFsaWRfZW50cnk6CiAJdjdtX2V4Y2VwdGlvbl9lbnRyeQorI2lmZGVmIENPTkZJR19QUklOVEsKIAlhZHIJcjAsIHN0cmVycgogCW1ycwlyMSwgaXBzcgogCW1vdglyMiwgbHIKIAlibAlwcmludGsKKyNlbmRpZgogCW1vdglyMCwgc3AKIAlibAlzaG93X3JlZ3MKIDE6CWIJMWIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9mdHJhY2UuYwppbmRleCBiOGM3NWU0Li43MDllZTFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2Z0cmFjZS5jCkBAIC0yMCw4ICsyMCw3IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vb3Bjb2Rlcy5oPgogI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KLQotI2luY2x1ZGUgImluc24uaCIKKyNpbmNsdWRlIDxhc20vaW5zbi5oPgogCiAjaWZkZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKICNkZWZpbmUJTk9QCQkweGY4NWRlYjA0CS8qIHBvcC53IHtscn0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCmluZGV4IDY2NGVlZTguLjAxOTYzMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwpAQCAtMzQ2LDYgKzM0NiwxMiBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKQogCS50ZXh0CitFTlRSWShzZWNvbmRhcnlfc3RhcnR1cF9hcm0pCisJLmFybQorIFRIVU1CKAlhZHIJcjksIEJTWU0oMWYpCSkJQCBLZXJuZWwgaXMgZW50ZXJlZCBpbiBBUk0uCisgVEhVTUIoCWJ4CXI5CQkpCUAgSWYgdGhpcyBpcyBhIFRodW1iLTIga2VybmVsLAorIFRIVU1CKAkudGh1bWIJCQkpCUAgc3dpdGNoIHRvIFRodW1iIG5vdy4KKyBUSFVNQigxOgkJCSkKIEVOVFJZKHNlY29uZGFyeV9zdGFydHVwKQogCS8qCiAJICogQ29tbW9uIGVudHJ5IHBvaW50IGZvciBzZWNvbmRhcnkgQ1BVcy4KQEAgLTM4NSw2ICszOTEsNyBAQAogIFRIVU1CKAlhZGQJcjEyLCByMTAsICNQUk9DSU5GT19JTklURlVOQwkpCiAgVEhVTUIoCXJldAlyMTIJCQkJKQogRU5EUFJPQyhzZWNvbmRhcnlfc3RhcnR1cCkKK0VORFBST0Moc2Vjb25kYXJ5X3N0YXJ0dXBfYXJtKQogCiAJLyoKIAkgKiByNiAgPSAmc2Vjb25kYXJ5X2RhdGEKQEAgLTU4Niw3ICs1OTMsNyBAQAogCWFkZAlyNSwgcjUsIHIzCUAgYWRqdXN0IHRhYmxlIGVuZCBhZGRyZXNzCiAJYWRkCXI2LCByNiwgcjMJQCBhZGp1c3QgX19wdl9waHlzX3Bmbl9vZmZzZXQgYWRkcmVzcwogCWFkZAlyNywgcjcsIHIzCUAgYWRqdXN0IF9fcHZfb2Zmc2V0IGFkZHJlc3MKLQltb3YJcjAsIHI4LCBsc3IgIzEyCUAgY29udmVydCB0byBQRk4KKwltb3YJcjAsIHI4LCBsc3IgI1BBR0VfU0hJRlQJQCBjb252ZXJ0IHRvIFBGTgogCXN0cglyMCwgW3I2XQlAIHNhdmUgY29tcHV0ZWQgUEhZU19PRkZTRVQgdG8gX19wdl9waHlzX3Bmbl9vZmZzZXQKIAlzdHJjYwlpcCwgW3I3LCAjSElHSF9PRkZTRVRdCUAgc2F2ZSB0byBfX3B2X29mZnNldCBoaWdoIGJpdHMKIAltb3YJcjYsIHIzLCBsc3IgIzI0CUAgY29uc3RhbnQgZm9yIGFkZC9zdWIgaW5zdHJ1Y3Rpb25zCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKaW5kZXggYWQ4NTdiYWQuLjM1MGYxODggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKQEAgLTEwOSw3ICsxMDksOCBAQAogCiAJaWYgKElTX0VOQUJMRUQoQ09ORklHX09GKSAmJiBJU19FTkFCTEVEKENPTkZJR19DQUNIRV9MMlgwKSAmJgogCSAgICAobWFjaGluZV9kZXNjLT5sMmNfYXV4X21hc2sgfHwgbWFjaGluZV9kZXNjLT5sMmNfYXV4X3ZhbCkpIHsKLQkJb3V0ZXJfY2FjaGUud3JpdGVfc2VjID0gbWFjaGluZV9kZXNjLT5sMmNfd3JpdGVfc2VjOworCQlpZiAoIW91dGVyX2NhY2hlLndyaXRlX3NlYykKKwkJCW91dGVyX2NhY2hlLndyaXRlX3NlYyA9IG1hY2hpbmVfZGVzYy0+bDJjX3dyaXRlX3NlYzsKIAkJcmV0ID0gbDJ4MF9vZl9pbml0KG1hY2hpbmVfZGVzYy0+bDJjX2F1eF92YWwsCiAJCQkJICAgbWFjaGluZV9kZXNjLT5sMmNfYXV4X21hc2spOwogCQlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2p1bXBfbGFiZWwuYyBiL2FyY2gvYXJtL2tlcm5lbC9qdW1wX2xhYmVsLmMKaW5kZXggYWZlZWI5ZS4uZTM5Y2JmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2p1bXBfbGFiZWwuYworKysgYi9hcmNoL2FybS9rZXJuZWwvanVtcF9sYWJlbC5jCkBAIC0xLDggKzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2p1bXBfbGFiZWwuaD4KLQotI2luY2x1ZGUgImluc24uaCIKLSNpbmNsdWRlICJwYXRjaC5oIgorI2luY2x1ZGUgPGFzbS9wYXRjaC5oPgorI2luY2x1ZGUgPGFzbS9pbnNuLmg+CiAKICNpZmRlZiBIQVZFX0pVTVBfTEFCRUwKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2tnZGIuYyBiL2FyY2gvYXJtL2tlcm5lbC9rZ2RiLmMKaW5kZXggMDdkYjJmOC4uYTZhZDkzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2tnZGIuYworKysgYi9hcmNoL2FybS9rZXJuZWwva2dkYi5jCkBAIC0xNCwxMCArMTQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2tnZGIuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKKyNpbmNsdWRlIDxhc20vcGF0Y2guaD4KICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KIAotI2luY2x1ZGUgInBhdGNoLmgiCi0KIHN0cnVjdCBkYmdfcmVnX2RlZl90IGRiZ19yZWdfZGVmW0RCR19NQVhfUkVHX05VTV0gPQogewogCXsgInIwIiwgNCwgb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIEFSTV9yMCl9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BhdGNoLmMgYi9hcmNoL2FybS9rZXJuZWwvcGF0Y2guYwppbmRleCA1MDM4OTYwLi42OWJkYTFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcGF0Y2guYworKysgYi9hcmNoL2FybS9rZXJuZWwvcGF0Y2guYwpAQCAtOCw4ICs4LDcgQEAKICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL3NtcF9wbGF0Lmg+CiAjaW5jbHVkZSA8YXNtL29wY29kZXMuaD4KLQotI2luY2x1ZGUgInBhdGNoLmgiCisjaW5jbHVkZSA8YXNtL3BhdGNoLmg+CiAKIHN0cnVjdCBwYXRjaCB7CiAJdm9pZCAqYWRkcjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zdXNwZW5kLmMgYi9hcmNoL2FybS9rZXJuZWwvc3VzcGVuZC5jCmluZGV4IDI4MzVkMzUuLjlhMmY4ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zdXNwZW5kLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3N1c3BlbmQuYwpAQCAtMTQsMTAgKzE0LDYgQEAKIGV4dGVybiB2b2lkIGNwdV9yZXN1bWVfbW11KHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX01NVQotLyoKLSAqIEhpZGUgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMgdG8gX19jcHVfc3VzcGVuZCAtIHRoZXNlIGFyZSBhbiBpbXBsZW1lbnRhdGlvbgotICogZGV0YWlsIHdoaWNoIHBsYXRmb3JtIGNvZGUgc2hvdWxkbid0IGhhdmUgdG8ga25vdyBhYm91dC4KLSAqLwogaW50IGNwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgYXJnLCBpbnQgKCpmbikodW5zaWduZWQgbG9uZykpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5hY3RpdmVfbW07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rdm0vS2NvbmZpZyBiL2FyY2gvYXJtL2t2bS9LY29uZmlnCmluZGV4IDQ2NmJkMjkuLjNhZmVlNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2t2bS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL2t2bS9LY29uZmlnCkBAIC0yMyw2ICsyMyw3IEBACiAJc2VsZWN0IEhBVkVfS1ZNX0NQVV9SRUxBWF9JTlRFUkNFUFQKIAlzZWxlY3QgS1ZNX01NSU8KIAlzZWxlY3QgS1ZNX0FSTV9IT1NUCisJc2VsZWN0IFNSQ1UKIAlkZXBlbmRzIG9uIEFSTV9WSVJUX0VYVCAmJiBBUk1fTFBBRQogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgaG9zdGluZyB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcy4gWW91IHdpbGwgYWxzbwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va3ZtL2FybS5jIGIvYXJjaC9hcm0va3ZtL2FybS5jCmluZGV4IDJkNmQ5MTAuLjBiMGQ1OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2t2bS9hcm0uYworKysgYi9hcmNoL2FybS9rdm0vYXJtLmMKQEAgLTI4MSwxNSArMjgxLDYgQEAKIAl2Y3B1LT5jcHUgPSBjcHU7CiAJdmNwdS0+YXJjaC5ob3N0X2NwdV9jb250ZXh0ID0gdGhpc19jcHVfcHRyKGt2bV9ob3N0X2NwdV9zdGF0ZSk7CiAKLQkvKgotCSAqIENoZWNrIHdoZXRoZXIgdGhpcyB2Y3B1IHJlcXVpcmVzIHRoZSBjYWNoZSB0byBiZSBmbHVzaGVkIG9uCi0JICogdGhpcyBwaHlzaWNhbCBDUFUuIFRoaXMgaXMgYSBjb25zZXF1ZW5jZSBvZiBkb2luZyBkY2FjaGUKLQkgKiBvcGVyYXRpb25zIGJ5IHNldC93YXkgb24gdGhpcyB2Y3B1LiBXZSBkbyBpdCBoZXJlIHRvIGJlIGluCi0JICogYSBub24tcHJlZW1wdGlibGUgc2VjdGlvbi4KLQkgKi8KLQlpZiAoY3B1bWFza190ZXN0X2FuZF9jbGVhcl9jcHUoY3B1LCAmdmNwdS0+YXJjaC5yZXF1aXJlX2RjYWNoZV9mbHVzaCkpCi0JCWZsdXNoX2NhY2hlX2FsbCgpOyAvKiBXZSdkIHJlYWxseSB3YW50IHY3X2ZsdXNoX2RjYWNoZV9hbGwoKSAqLwotCiAJa3ZtX2FybV9zZXRfcnVubmluZ192Y3B1KHZjcHUpOwogfQogCkBAIC01NDEsNyArNTMyLDYgQEAKIAkJcmV0ID0ga3ZtX2NhbGxfaHlwKF9fa3ZtX3ZjcHVfcnVuLCB2Y3B1KTsKIAogCQl2Y3B1LT5tb2RlID0gT1VUU0lERV9HVUVTVF9NT0RFOwotCQl2Y3B1LT5hcmNoLmxhc3RfcGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkJa3ZtX2d1ZXN0X2V4aXQoKTsKIAkJdHJhY2Vfa3ZtX2V4aXQoKnZjcHVfcGModmNwdSkpOwogCQkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va3ZtL2NvcHJvYy5jIGIvYXJjaC9hcm0va3ZtL2NvcHJvYy5jCmluZGV4IDc5MjhkYmQuLmYzZDg4ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2t2bS9jb3Byb2MuYworKysgYi9hcmNoL2FybS9rdm0vY29wcm9jLmMKQEAgLTE4OSw4MiArMTg5LDQwIEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qIFNlZSBub3RlIGF0IEFSTSBBUk0gQjEuMTQuNCAqLworLyoKKyAqIFNlZSBub3RlIGF0IEFSTXY3IEFSTSBCMS4xNC40IChUTDtEUjogUy9XIG9wcyBhcmUgbm90IGVhc2lseSB2aXJ0dWFsaXplZCkuCisgKi8KIHN0YXRpYyBib29sIGFjY2Vzc19kY3N3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCWNvbnN0IHN0cnVjdCBjb3Byb2NfcGFyYW1zICpwLAogCQkJY29uc3Qgc3RydWN0IGNvcHJvY19yZWcgKnIpCiB7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JaW50IGNwdTsKLQogCWlmICghcC0+aXNfd3JpdGUpCiAJCXJldHVybiByZWFkX2Zyb21fd3JpdGVfb25seSh2Y3B1LCBwKTsKIAotCWNwdSA9IGdldF9jcHUoKTsKLQotCWNwdW1hc2tfc2V0YWxsKCZ2Y3B1LT5hcmNoLnJlcXVpcmVfZGNhY2hlX2ZsdXNoKTsKLQljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZ2Y3B1LT5hcmNoLnJlcXVpcmVfZGNhY2hlX2ZsdXNoKTsKLQotCS8qIElmIHdlIHdlcmUgYWxyZWFkeSBwcmVlbXB0ZWQsIHRha2UgdGhlIGxvbmcgd2F5IGFyb3VuZCAqLwotCWlmIChjcHUgIT0gdmNwdS0+YXJjaC5sYXN0X3BjcHUpIHsKLQkJZmx1c2hfY2FjaGVfYWxsKCk7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQl2YWwgPSAqdmNwdV9yZWcodmNwdSwgcC0+UnQxKTsKLQotCXN3aXRjaCAocC0+Q1JtKSB7Ci0JY2FzZSA2OgkJCS8qIFVwZ3JhZGUgRENJU1cgdG8gRENDSVNXLCBhcyBwZXIgSENSLlNXSU8gKi8KLQljYXNlIDE0OgkJLyogRENDSVNXICovCi0JCWFzbSB2b2xhdGlsZSgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTQsIDIiIDogOiAiciIgKHZhbCkpOwotCQlicmVhazsKLQotCWNhc2UgMTA6CQkvKiBEQ0NTVyAqLwotCQlhc20gdm9sYXRpbGUoIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCAyIiA6IDogInIiICh2YWwpKTsKLQkJYnJlYWs7Ci0JfQotCi1kb25lOgotCXB1dF9jcHUoKTsKLQorCWt2bV9zZXRfd2F5X2ZsdXNoKHZjcHUpOwogCXJldHVybiB0cnVlOwogfQogCiAvKgogICogR2VuZXJpYyBhY2Nlc3NvciBmb3IgVk0gcmVnaXN0ZXJzLiBPbmx5IGNhbGxlZCBhcyBsb25nIGFzIEhDUl9UVk0KLSAqIGlzIHNldC4KKyAqIGlzIHNldC4gIElmIHRoZSBndWVzdCBlbmFibGVzIHRoZSBNTVUsIHdlIHN0b3AgdHJhcHBpbmcgdGhlIFZNCisgKiBzeXNfcmVncyBhbmQgbGVhdmUgaXQgaW4gY29tcGxldGUgY29udHJvbCBvZiB0aGUgY2FjaGVzLgorICoKKyAqIFVzZWQgYnkgdGhlIGNwdS1zcGVjaWZpYyBjb2RlLgogICovCi1zdGF0aWMgYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKLQkJCSAgY29uc3Qgc3RydWN0IGNvcHJvY19wYXJhbXMgKnAsCi0JCQkgIGNvbnN0IHN0cnVjdCBjb3Byb2NfcmVnICpyKQorYm9vbCBhY2Nlc3Nfdm1fcmVnKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJICAgY29uc3Qgc3RydWN0IGNvcHJvY19wYXJhbXMgKnAsCisJCSAgIGNvbnN0IHN0cnVjdCBjb3Byb2NfcmVnICpyKQogeworCWJvb2wgd2FzX2VuYWJsZWQgPSB2Y3B1X2hhc19jYWNoZV9lbmFibGVkKHZjcHUpOworCiAJQlVHX09OKCFwLT5pc193cml0ZSk7CiAKIAl2Y3B1LT5hcmNoLmNwMTVbci0+cmVnXSA9ICp2Y3B1X3JlZyh2Y3B1LCBwLT5SdDEpOwogCWlmIChwLT5pc182NGJpdCkKIAkJdmNwdS0+YXJjaC5jcDE1W3ItPnJlZyArIDFdID0gKnZjcHVfcmVnKHZjcHUsIHAtPlJ0Mik7CiAKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFNDVExSIGFjY2Vzc29yLiBPbmx5IGNhbGxlZCBhcyBsb25nIGFzIEhDUl9UVk0gaXMgc2V0LiAgSWYgdGhlCi0gKiBndWVzdCBlbmFibGVzIHRoZSBNTVUsIHdlIHN0b3AgdHJhcHBpbmcgdGhlIFZNIHN5c19yZWdzIGFuZCBsZWF2ZQotICogaXQgaW4gY29tcGxldGUgY29udHJvbCBvZiB0aGUgY2FjaGVzLgotICoKLSAqIFVzZWQgYnkgdGhlIGNwdS1zcGVjaWZpYyBjb2RlLgotICovCi1ib29sIGFjY2Vzc19zY3RscihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCSAgY29uc3Qgc3RydWN0IGNvcHJvY19wYXJhbXMgKnAsCi0JCSAgY29uc3Qgc3RydWN0IGNvcHJvY19yZWcgKnIpCi17Ci0JYWNjZXNzX3ZtX3JlZyh2Y3B1LCBwLCByKTsKLQotCWlmICh2Y3B1X2hhc19jYWNoZV9lbmFibGVkKHZjcHUpKSB7CS8qIE1NVStDYWNoZXMgZW5hYmxlZD8gKi8KLQkJdmNwdS0+YXJjaC5oY3IgJj0gfkhDUl9UVk07Ci0JCXN0YWdlMl9mbHVzaF92bSh2Y3B1LT5rdm0pOwotCX0KLQorCWt2bV90b2dnbGVfY2FjaGUodmNwdSwgd2FzX2VuYWJsZWQpOwogCXJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rdm0vY29wcm9jLmggYi9hcmNoL2FybS9rdm0vY29wcm9jLmgKaW5kZXggMWE0NGJiZS4uODhkMjRhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va3ZtL2NvcHJvYy5oCisrKyBiL2FyY2gvYXJtL2t2bS9jb3Byb2MuaApAQCAtMTUzLDggKzE1Myw4IEBACiAjZGVmaW5lIGlzNjQJCS5pc182NCA9IHRydWUKICNkZWZpbmUgaXMzMgkJLmlzXzY0ID0gZmFsc2UKIAotYm9vbCBhY2Nlc3Nfc2N0bHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAotCQkgIGNvbnN0IHN0cnVjdCBjb3Byb2NfcGFyYW1zICpwLAotCQkgIGNvbnN0IHN0cnVjdCBjb3Byb2NfcmVnICpyKTsKK2Jvb2wgYWNjZXNzX3ZtX3JlZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCSAgIGNvbnN0IHN0cnVjdCBjb3Byb2NfcGFyYW1zICpwLAorCQkgICBjb25zdCBzdHJ1Y3QgY29wcm9jX3JlZyAqcik7CiAKICNlbmRpZiAvKiBfX0FSTV9LVk1fQ09QUk9DX0xPQ0FMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va3ZtL2NvcHJvY19hMTUuYyBiL2FyY2gvYXJtL2t2bS9jb3Byb2NfYTE1LmMKaW5kZXggZTZmNGFlNC4uYTcxMzY3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va3ZtL2NvcHJvY19hMTUuYworKysgYi9hcmNoL2FybS9rdm0vY29wcm9jX2ExNS5jCkBAIC0zNCw3ICszNCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvcHJvY19yZWcgYTE1X3JlZ3NbXSA9IHsKIAkvKiBTQ1RMUjogc3dhcHBlZCBieSBpbnRlcnJ1cHQuUy4gKi8KIAl7IENSbiggMSksIENSbSggMCksIE9wMSggMCksIE9wMiggMCksIGlzMzIsCi0JCQlhY2Nlc3Nfc2N0bHIsIHJlc2V0X3ZhbCwgYzFfU0NUTFIsIDB4MDBDNTAwNzggfSwKKwkJCWFjY2Vzc192bV9yZWcsIHJlc2V0X3ZhbCwgYzFfU0NUTFIsIDB4MDBDNTAwNzggfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qga3ZtX2NvcHJvY190YXJnZXRfdGFibGUgYTE1X3RhcmdldF90YWJsZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2t2bS9jb3Byb2NfYTcuYyBiL2FyY2gvYXJtL2t2bS9jb3Byb2NfYTcuYwppbmRleCAxN2ZjN2NkLi5iMTllNDZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rdm0vY29wcm9jX2E3LmMKKysrIGIvYXJjaC9hcm0va3ZtL2NvcHJvY19hNy5jCkBAIC0zNyw3ICszNyw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvcHJvY19yZWcgYTdfcmVnc1tdID0gewogCS8qIFNDVExSOiBzd2FwcGVkIGJ5IGludGVycnVwdC5TLiAqLwogCXsgQ1JuKCAxKSwgQ1JtKCAwKSwgT3AxKCAwKSwgT3AyKCAwKSwgaXMzMiwKLQkJCWFjY2Vzc19zY3RsciwgcmVzZXRfdmFsLCBjMV9TQ1RMUiwgMHgwMEM1MDg3OCB9LAorCQkJYWNjZXNzX3ZtX3JlZywgcmVzZXRfdmFsLCBjMV9TQ1RMUiwgMHgwMEM1MDg3OCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCBrdm1fY29wcm9jX3RhcmdldF90YWJsZSBhN190YXJnZXRfdGFibGUgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rdm0vbW11LmMgYi9hcmNoL2FybS9rdm0vbW11LmMKaW5kZXggMWRjOTc3OC4uMTM2NjYyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va3ZtL21tdS5jCisrKyBiL2FyY2gvYXJtL2t2bS9tbXUuYwpAQCAtNTgsNiArNTgsMjYgQEAKIAkJa3ZtX2NhbGxfaHlwKF9fa3ZtX3RsYl9mbHVzaF92bWlkX2lwYSwga3ZtLCBpcGEpOwogfQogCisvKgorICogRC1DYWNoZSBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhleSB0YWtlIHRoZSBwYWdlIHRhYmxlIGVudHJpZXMgYnkKKyAqIHZhbHVlLCBhcyB0aGV5IGFyZSBmbHVzaGluZyB0aGUgY2FjaGUgdXNpbmcgdGhlIGtlcm5lbCBtYXBwaW5nIChvcgorICoga21hcCBvbiAzMmJpdCkuCisgKi8KK3N0YXRpYyB2b2lkIGt2bV9mbHVzaF9kY2FjaGVfcHRlKHB0ZV90IHB0ZSkKK3sKKwlfX2t2bV9mbHVzaF9kY2FjaGVfcHRlKHB0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9mbHVzaF9kY2FjaGVfcG1kKHBtZF90IHBtZCkKK3sKKwlfX2t2bV9mbHVzaF9kY2FjaGVfcG1kKHBtZCk7Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9mbHVzaF9kY2FjaGVfcHVkKHB1ZF90IHB1ZCkKK3sKKwlfX2t2bV9mbHVzaF9kY2FjaGVfcHVkKHB1ZCk7Cit9CisKIHN0YXRpYyBpbnQgbW11X3RvcHVwX21lbW9yeV9jYWNoZShzdHJ1Y3Qga3ZtX21tdV9tZW1vcnlfY2FjaGUgKmNhY2hlLAogCQkJCSAgaW50IG1pbiwgaW50IG1heCkKIHsKQEAgLTExOSw2ICsxMzksMjYgQEAKIAlwdXRfcGFnZSh2aXJ0X3RvX3BhZ2UocG1kKSk7CiB9CiAKKy8qCisgKiBVbm1hcHBpbmcgdnMgZGNhY2hlIG1hbmFnZW1lbnQ6CisgKgorICogSWYgYSBndWVzdCBtYXBzIGNlcnRhaW4gbWVtb3J5IHBhZ2VzIGFzIHVuY2FjaGVkLCBhbGwgd3JpdGVzIHdpbGwKKyAqIGJ5cGFzcyB0aGUgZGF0YSBjYWNoZSBhbmQgZ28gZGlyZWN0bHkgdG8gUkFNLiAgSG93ZXZlciwgdGhlIENQVXMKKyAqIGNhbiBzdGlsbCBzcGVjdWxhdGUgcmVhZHMgKG5vdCB3cml0ZXMpIGFuZCBmaWxsIGNhY2hlIGxpbmVzIHdpdGgKKyAqIGRhdGEuCisgKgorICogVGhvc2UgY2FjaGUgbGluZXMgd2lsbCBiZSAqY2xlYW4qIGNhY2hlIGxpbmVzIHRob3VnaCwgc28gYQorICogY2xlYW4raW52YWxpZGF0ZSBvcGVyYXRpb24gaXMgZXF1aXZhbGVudCB0byBhbiBpbnZhbGlkYXRlCisgKiBvcGVyYXRpb24sIGJlY2F1c2Ugbm8gY2FjaGUgbGluZXMgYXJlIG1hcmtlZCBkaXJ0eS4KKyAqCisgKiBUaG9zZSBjbGVhbiBjYWNoZSBsaW5lcyBjb3VsZCBiZSBmaWxsZWQgcHJpb3IgdG8gYW4gdW5jYWNoZWQgd3JpdGUKKyAqIGJ5IHRoZSBndWVzdCwgYW5kIHRoZSBjYWNoZSBjb2hlcmVudCBJTyBzdWJzeXN0ZW0gd291bGQgdGhlcmVmb3JlCisgKiBlbmQgdXAgd3JpdGluZyBvbGQgZGF0YSB0byBkaXNrLgorICoKKyAqIFRoaXMgaXMgd2h5IHJpZ2h0IGFmdGVyIHVubWFwcGluZyBhIHBhZ2Uvc2VjdGlvbiBhbmQgaW52YWxpZGF0aW5nCisgKiB0aGUgY29ycmVzcG9uZGluZyBUTEJzLCB3ZSBjYWxsIGt2bV9mbHVzaF9kY2FjaGVfcCooKSB0byBtYWtlIHN1cmUKKyAqIHRoZSBJTyBzdWJzeXN0ZW0gd2lsbCBuZXZlciBoaXQgaW4gdGhlIGNhY2hlLgorICovCiBzdGF0aWMgdm9pZCB1bm1hcF9wdGVzKHN0cnVjdCBrdm0gKmt2bSwgcG1kX3QgKnBtZCwKIAkJICAgICAgIHBoeXNfYWRkcl90IGFkZHIsIHBoeXNfYWRkcl90IGVuZCkKIHsKQEAgLTEyOCw5ICsxNjgsMTYgQEAKIAlzdGFydF9wdGUgPSBwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHIpOwogCWRvIHsKIAkJaWYgKCFwdGVfbm9uZSgqcHRlKSkgeworCQkJcHRlX3Qgb2xkX3B0ZSA9ICpwdGU7CisKIAkJCWt2bV9zZXRfcHRlKHB0ZSwgX19wdGUoMCkpOwotCQkJcHV0X3BhZ2UodmlydF90b19wYWdlKHB0ZSkpOwogCQkJa3ZtX3RsYl9mbHVzaF92bWlkX2lwYShrdm0sIGFkZHIpOworCisJCQkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlIGZvciBkZXZpY2UgbWFwcGluZ3MgKi8KKwkJCWlmICgocHRlX3ZhbChvbGRfcHRlKSAmIFBBR0VfUzJfREVWSUNFKSAhPSBQQUdFX1MyX0RFVklDRSkKKwkJCQlrdm1fZmx1c2hfZGNhY2hlX3B0ZShvbGRfcHRlKTsKKworCQkJcHV0X3BhZ2UodmlydF90b19wYWdlKHB0ZSkpOwogCQl9CiAJfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CiAKQEAgLTE0OSw4ICsxOTYsMTMgQEAKIAkJbmV4dCA9IGt2bV9wbWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKIAkJaWYgKCFwbWRfbm9uZSgqcG1kKSkgewogCQkJaWYgKGt2bV9wbWRfaHVnZSgqcG1kKSkgeworCQkJCXBtZF90IG9sZF9wbWQgPSAqcG1kOworCiAJCQkJcG1kX2NsZWFyKHBtZCk7CiAJCQkJa3ZtX3RsYl9mbHVzaF92bWlkX2lwYShrdm0sIGFkZHIpOworCisJCQkJa3ZtX2ZsdXNoX2RjYWNoZV9wbWQob2xkX3BtZCk7CisKIAkJCQlwdXRfcGFnZSh2aXJ0X3RvX3BhZ2UocG1kKSk7CiAJCQl9IGVsc2UgewogCQkJCXVubWFwX3B0ZXMoa3ZtLCBwbWQsIGFkZHIsIG5leHQpOwpAQCAtMTczLDggKzIyNSwxMyBAQAogCQluZXh0ID0ga3ZtX3B1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAoIXB1ZF9ub25lKCpwdWQpKSB7CiAJCQlpZiAocHVkX2h1Z2UoKnB1ZCkpIHsKKwkJCQlwdWRfdCBvbGRfcHVkID0gKnB1ZDsKKwogCQkJCXB1ZF9jbGVhcihwdWQpOwogCQkJCWt2bV90bGJfZmx1c2hfdm1pZF9pcGEoa3ZtLCBhZGRyKTsKKworCQkJCWt2bV9mbHVzaF9kY2FjaGVfcHVkKG9sZF9wdWQpOworCiAJCQkJcHV0X3BhZ2UodmlydF90b19wYWdlKHB1ZCkpOwogCQkJfSBlbHNlIHsKIAkJCQl1bm1hcF9wbWRzKGt2bSwgcHVkLCBhZGRyLCBuZXh0KTsKQEAgLTIwOSwxMCArMjY2LDkgQEAKIAogCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgYWRkcik7CiAJZG8gewotCQlpZiAoIXB0ZV9ub25lKCpwdGUpKSB7Ci0JCQlodmFfdCBodmEgPSBnZm5fdG9faHZhKGt2bSwgYWRkciA+PiBQQUdFX1NISUZUKTsKLQkJCWt2bV9mbHVzaF9kY2FjaGVfdG9fcG9jKCh2b2lkKilodmEsIFBBR0VfU0laRSk7Ci0JCX0KKwkJaWYgKCFwdGVfbm9uZSgqcHRlKSAmJgorCQkgICAgKHB0ZV92YWwoKnB0ZSkgJiBQQUdFX1MyX0RFVklDRSkgIT0gUEFHRV9TMl9ERVZJQ0UpCisJCQlrdm1fZmx1c2hfZGNhY2hlX3B0ZSgqcHRlKTsKIAl9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKIH0KIApAQCAtMjI2LDEyICsyODIsMTAgQEAKIAlkbyB7CiAJCW5leHQgPSBrdm1fcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7CiAJCWlmICghcG1kX25vbmUoKnBtZCkpIHsKLQkJCWlmIChrdm1fcG1kX2h1Z2UoKnBtZCkpIHsKLQkJCQlodmFfdCBodmEgPSBnZm5fdG9faHZhKGt2bSwgYWRkciA+PiBQQUdFX1NISUZUKTsKLQkJCQlrdm1fZmx1c2hfZGNhY2hlX3RvX3BvYygodm9pZCopaHZhLCBQTURfU0laRSk7Ci0JCQl9IGVsc2UgeworCQkJaWYgKGt2bV9wbWRfaHVnZSgqcG1kKSkKKwkJCQlrdm1fZmx1c2hfZGNhY2hlX3BtZCgqcG1kKTsKKwkJCWVsc2UKIAkJCQlzdGFnZTJfZmx1c2hfcHRlcyhrdm0sIHBtZCwgYWRkciwgbmV4dCk7Ci0JCQl9CiAJCX0KIAl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIH0KQEAgLTI0NiwxMiArMzAwLDEwIEBACiAJZG8gewogCQluZXh0ID0ga3ZtX3B1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwogCQlpZiAoIXB1ZF9ub25lKCpwdWQpKSB7Ci0JCQlpZiAocHVkX2h1Z2UoKnB1ZCkpIHsKLQkJCQlodmFfdCBodmEgPSBnZm5fdG9faHZhKGt2bSwgYWRkciA+PiBQQUdFX1NISUZUKTsKLQkJCQlrdm1fZmx1c2hfZGNhY2hlX3RvX3BvYygodm9pZCopaHZhLCBQVURfU0laRSk7Ci0JCQl9IGVsc2UgeworCQkJaWYgKHB1ZF9odWdlKCpwdWQpKQorCQkJCWt2bV9mbHVzaF9kY2FjaGVfcHVkKCpwdWQpOworCQkJZWxzZQogCQkJCXN0YWdlMl9mbHVzaF9wbWRzKGt2bSwgcHVkLCBhZGRyLCBuZXh0KTsKLQkJCX0KIAkJfQogCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogfQpAQCAtMjc4LDcgKzMzMCw3IEBACiAgKiBHbyB0aHJvdWdoIHRoZSBzdGFnZSAyIHBhZ2UgdGFibGVzIGFuZCBpbnZhbGlkYXRlIGFueSBjYWNoZSBsaW5lcwogICogYmFja2luZyBtZW1vcnkgYWxyZWFkeSBtYXBwZWQgdG8gdGhlIFZNLgogICovCi12b2lkIHN0YWdlMl9mbHVzaF92bShzdHJ1Y3Qga3ZtICprdm0pCitzdGF0aWMgdm9pZCBzdGFnZTJfZmx1c2hfdm0oc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzOwogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7CkBAIC05MDUsNiArOTU3LDEyIEBACiAJcmV0dXJuICFwZm5fdmFsaWQocGZuKTsKIH0KIAorc3RhdGljIHZvaWQgY29oZXJlbnRfY2FjaGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBmbl90IHBmbiwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIGJvb2wgdW5jYWNoZWQpCit7CisJX19jb2hlcmVudF9jYWNoZV9ndWVzdF9wYWdlKHZjcHUsIHBmbiwgc2l6ZSwgdW5jYWNoZWQpOworfQorCiBzdGF0aWMgaW50IHVzZXJfbWVtX2Fib3J0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgcGh5c19hZGRyX3QgZmF1bHRfaXBhLAogCQkJICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LCB1bnNpZ25lZCBsb25nIGh2YSwKIAkJCSAgdW5zaWduZWQgbG9uZyBmYXVsdF9zdGF0dXMpCkBAIC05OTQsOCArMTA1Miw3IEBACiAJCQlrdm1fc2V0X3MycG1kX3dyaXRhYmxlKCZuZXdfcG1kKTsKIAkJCWt2bV9zZXRfcGZuX2RpcnR5KHBmbik7CiAJCX0KLQkJY29oZXJlbnRfY2FjaGVfZ3Vlc3RfcGFnZSh2Y3B1LCBodmEgJiBQTURfTUFTSywgUE1EX1NJWkUsCi0JCQkJCSAgZmF1bHRfaXBhX3VuY2FjaGVkKTsKKwkJY29oZXJlbnRfY2FjaGVfZ3Vlc3RfcGFnZSh2Y3B1LCBwZm4sIFBNRF9TSVpFLCBmYXVsdF9pcGFfdW5jYWNoZWQpOwogCQlyZXQgPSBzdGFnZTJfc2V0X3BtZF9odWdlKGt2bSwgbWVtY2FjaGUsIGZhdWx0X2lwYSwgJm5ld19wbWQpOwogCX0gZWxzZSB7CiAJCXB0ZV90IG5ld19wdGUgPSBwZm5fcHRlKHBmbiwgbWVtX3R5cGUpOwpAQCAtMTAwMyw4ICsxMDYwLDcgQEAKIAkJCWt2bV9zZXRfczJwdGVfd3JpdGFibGUoJm5ld19wdGUpOwogCQkJa3ZtX3NldF9wZm5fZGlydHkocGZuKTsKIAkJfQotCQljb2hlcmVudF9jYWNoZV9ndWVzdF9wYWdlKHZjcHUsIGh2YSwgUEFHRV9TSVpFLAotCQkJCQkgIGZhdWx0X2lwYV91bmNhY2hlZCk7CisJCWNvaGVyZW50X2NhY2hlX2d1ZXN0X3BhZ2UodmNwdSwgcGZuLCBQQUdFX1NJWkUsIGZhdWx0X2lwYV91bmNhY2hlZCk7CiAJCXJldCA9IHN0YWdlMl9zZXRfcHRlKGt2bSwgbWVtY2FjaGUsIGZhdWx0X2lwYSwgJm5ld19wdGUsCiAJCQlwZ3Byb3RfdmFsKG1lbV90eXBlKSA9PSBwZ3Byb3RfdmFsKFBBR0VfUzJfREVWSUNFKSk7CiAJfQpAQCAtMTQxMSwzICsxNDY3LDcxIEBACiAJdW5tYXBfc3RhZ2UyX3JhbmdlKGt2bSwgZ3BhLCBzaXplKTsKIAlzcGluX3VubG9jaygma3ZtLT5tbXVfbG9jayk7CiB9CisKKy8qCisgKiBTZWUgbm90ZSBhdCBBUk12NyBBUk0gQjEuMTQuNCAoVEw7RFI6IFMvVyBvcHMgYXJlIG5vdCBlYXNpbHkgdmlydHVhbGl6ZWQpLgorICoKKyAqIE1haW4gcHJvYmxlbXM6CisgKiAtIFMvVyBvcHMgYXJlIGxvY2FsIHRvIGEgQ1BVIChub3QgYnJvYWRjYXN0KQorICogLSBXZSBoYXZlIGxpbmUgbWlncmF0aW9uIGJlaGluZCBvdXIgYmFjayAoc3BlY3VsYXRpb24pCisgKiAtIFN5c3RlbSBjYWNoZXMgZG9uJ3Qgc3VwcG9ydCBTL1cgYXQgYWxsIChkYW1uISkKKyAqCisgKiBJbiB0aGUgZmFjZSBvZiB0aGUgYWJvdmUsIHRoZSBiZXN0IHdlIGNhbiBkbyBpcyB0byB0cnkgYW5kIGNvbnZlcnQKKyAqIFMvVyBvcHMgdG8gVkEgb3BzLiBCZWNhdXNlIHRoZSBndWVzdCBpcyBub3QgYWxsb3dlZCB0byBpbmZlciB0aGUKKyAqIFMvVyB0byBQQSBtYXBwaW5nLCBpdCBjYW4gb25seSB1c2UgUy9XIHRvIG51a2UgdGhlIHdob2xlIGNhY2hlLAorICogd2hpY2ggaXMgYSByYXRoZXIgZ29vZCB0aGluZyBmb3IgdXMuCisgKgorICogQWxzbywgaXQgaXMgb25seSB1c2VkIHdoZW4gdHVybmluZyBjYWNoZXMgb24vb2ZmICgiVGhlIGV4cGVjdGVkCisgKiB1c2FnZSBvZiB0aGUgY2FjaGUgbWFpbnRlbmFuY2UgaW5zdHJ1Y3Rpb25zIHRoYXQgb3BlcmF0ZSBieSBzZXQvd2F5CisgKiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNhY2hlIG1haW50ZW5hbmNlIGluc3RydWN0aW9ucyBhc3NvY2lhdGVkCisgKiB3aXRoIHRoZSBwb3dlcmRvd24gYW5kIHBvd2VydXAgb2YgY2FjaGVzLCBpZiB0aGlzIGlzIHJlcXVpcmVkIGJ5CisgKiB0aGUgaW1wbGVtZW50YXRpb24uIikuCisgKgorICogV2UgdXNlIHRoZSBmb2xsb3dpbmcgcG9saWN5OgorICoKKyAqIC0gSWYgd2UgdHJhcCBhIFMvVyBvcGVyYXRpb24sIHdlIGVuYWJsZSBWTSB0cmFwcGluZyB0byBkZXRlY3QKKyAqICAgY2FjaGVzIGJlaW5nIHR1cm5lZCBvbi9vZmYsIGFuZCBkbyBhIGZ1bGwgY2xlYW4uCisgKgorICogLSBXZSBmbHVzaCB0aGUgY2FjaGVzIG9uIGJvdGggY2FjaGVzIGJlaW5nIHR1cm5lZCBvbiBhbmQgb2ZmLgorICoKKyAqIC0gT25jZSB0aGUgY2FjaGVzIGFyZSBlbmFibGVkLCB3ZSBzdG9wIHRyYXBwaW5nIFZNIG9wcy4KKyAqLwordm9pZCBrdm1fc2V0X3dheV9mbHVzaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJdW5zaWduZWQgbG9uZyBoY3IgPSB2Y3B1X2dldF9oY3IodmNwdSk7CisKKwkvKgorCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UgZG8gYSBTL1cgb3BlcmF0aW9uCisJICogKGkuZS4gSENSX1RWTSBub3Qgc2V0KSBmbHVzaCB0aGUgd2hvbGUgbWVtb3J5LCBhbmQgc2V0IHRoZQorCSAqIFZNIHRyYXBwaW5nLgorCSAqCisJICogT3RoZXJ3aXNlLCByZWx5IG9uIHRoZSBWTSB0cmFwcGluZyB0byB3YWl0IGZvciB0aGUgTU1VICsKKwkgKiBDYWNoZXMgdG8gYmUgdHVybmVkIG9mZi4gQXQgdGhhdCBwb2ludCwgd2UnbGwgYmUgYWJsZSB0bworCSAqIGNsZWFuIHRoZSBjYWNoZXMgYWdhaW4uCisJICovCisJaWYgKCEoaGNyICYgSENSX1RWTSkpIHsKKwkJdHJhY2Vfa3ZtX3NldF93YXlfZmx1c2goKnZjcHVfcGModmNwdSksCisJCQkJCXZjcHVfaGFzX2NhY2hlX2VuYWJsZWQodmNwdSkpOworCQlzdGFnZTJfZmx1c2hfdm0odmNwdS0+a3ZtKTsKKwkJdmNwdV9zZXRfaGNyKHZjcHUsIGhjciB8IEhDUl9UVk0pOworCX0KK30KKwordm9pZCBrdm1fdG9nZ2xlX2NhY2hlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCB3YXNfZW5hYmxlZCkKK3sKKwlib29sIG5vd19lbmFibGVkID0gdmNwdV9oYXNfY2FjaGVfZW5hYmxlZCh2Y3B1KTsKKworCS8qCisJICogSWYgc3dpdGNoaW5nIHRoZSBNTVUrY2FjaGVzIG9uLCBuZWVkIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlcy4KKwkgKiBJZiBzd2l0Y2hpbmcgaXQgb2ZmLCBuZWVkIHRvIGNsZWFuIHRoZSBjYWNoZXMuCisJICogQ2xlYW4gKyBpbnZhbGlkYXRlIGRvZXMgdGhlIHRyaWNrIGFsd2F5cy4KKwkgKi8KKwlpZiAobm93X2VuYWJsZWQgIT0gd2FzX2VuYWJsZWQpCisJCXN0YWdlMl9mbHVzaF92bSh2Y3B1LT5rdm0pOworCisJLyogQ2FjaGVzIGFyZSBub3cgb24sIHN0b3AgdHJhcHBpbmcgVk0gb3BzICh1bnRpbCBhIFMvVyBvcCkgKi8KKwlpZiAobm93X2VuYWJsZWQpCisJCXZjcHVfc2V0X2hjcih2Y3B1LCB2Y3B1X2dldF9oY3IodmNwdSkgJiB+SENSX1RWTSk7CisKKwl0cmFjZV9rdm1fdG9nZ2xlX2NhY2hlKCp2Y3B1X3BjKHZjcHUpLCB3YXNfZW5hYmxlZCwgbm93X2VuYWJsZWQpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va3ZtL3RyYWNlLmggYi9hcmNoL2FybS9rdm0vdHJhY2UuaAppbmRleCBiMWQ2NDBmLi5iNmE2ZTcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rdm0vdHJhY2UuaAorKysgYi9hcmNoL2FybS9rdm0vdHJhY2UuaApAQCAtMjIzLDYgKzIyMyw0NSBAQAogCQkgIF9fZW50cnktPnZjcHVfcGMsIF9fZW50cnktPnIwLCBfX2VudHJ5LT5pbW0pCiApOwogCitUUkFDRV9FVkVOVChrdm1fc2V0X3dheV9mbHVzaCwKKwkgICAgVFBfUFJPVE8odW5zaWduZWQgbG9uZyB2Y3B1X3BjLCBib29sIGNhY2hlKSwKKwkgICAgVFBfQVJHUyh2Y3B1X3BjLCBjYWNoZSksCisKKwkgICAgVFBfU1RSVUNUX19lbnRyeSgKKwkJICAgIF9fZmllbGQoCXVuc2lnbmVkIGxvbmcsCXZjcHVfcGMJCSkKKwkJICAgIF9fZmllbGQoCWJvb2wsCQljYWNoZQkJKQorCSAgICApLAorCisJICAgIFRQX2Zhc3RfYXNzaWduKAorCQkgICAgX19lbnRyeS0+dmNwdV9wYwkJPSB2Y3B1X3BjOworCQkgICAgX19lbnRyeS0+Y2FjaGUJCT0gY2FjaGU7CisJICAgICksCisKKwkgICAgVFBfcHJpbnRrKCJTL1cgZmx1c2ggYXQgMHglMDE2bHggKGNhY2hlICVzKSIsCisJCSAgICAgIF9fZW50cnktPnZjcHVfcGMsIF9fZW50cnktPmNhY2hlID8gIm9uIiA6ICJvZmYiKQorKTsKKworVFJBQ0VfRVZFTlQoa3ZtX3RvZ2dsZV9jYWNoZSwKKwkgICAgVFBfUFJPVE8odW5zaWduZWQgbG9uZyB2Y3B1X3BjLCBib29sIHdhcywgYm9vbCBub3cpLAorCSAgICBUUF9BUkdTKHZjcHVfcGMsIHdhcywgbm93KSwKKworCSAgICBUUF9TVFJVQ1RfX2VudHJ5KAorCQkgICAgX19maWVsZCgJdW5zaWduZWQgbG9uZywJdmNwdV9wYwkJKQorCQkgICAgX19maWVsZCgJYm9vbCwJCXdhcwkJKQorCQkgICAgX19maWVsZCgJYm9vbCwJCW5vdwkJKQorCSAgICApLAorCisJICAgIFRQX2Zhc3RfYXNzaWduKAorCQkgICAgX19lbnRyeS0+dmNwdV9wYwkJPSB2Y3B1X3BjOworCQkgICAgX19lbnRyeS0+d2FzCQk9IHdhczsKKwkJICAgIF9fZW50cnktPm5vdwkJPSBub3c7CisJICAgICksCisKKwkgICAgVFBfcHJpbnRrKCJWTSBvcCBhdCAweCUwMTZseCAoY2FjaGUgd2FzICVzLCBub3cgJXMpIiwKKwkJICAgICAgX19lbnRyeS0+dmNwdV9wYywgX19lbnRyeS0+d2FzID8gIm9uIiA6ICJvZmYiLAorCQkgICAgICBfX2VudHJ5LT5ub3cgPyAib24iIDogIm9mZiIpCispOworCiAjZW5kaWYgLyogX1RSQUNFX0tWTV9IICovCiAKICN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2xpYi9NYWtlZmlsZSBiL2FyY2gvYXJtL2xpYi9NYWtlZmlsZQppbmRleCAwNTczZmFhLi5kOGE3ODA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbGliL01ha2VmaWxlCkBAIC0xNSwxOSArMTUsOCBAQAogCQkgICBpby1yZWFkc2IubyBpby13cml0ZXNiLm8gaW8tcmVhZHNsLm8gaW8td3JpdGVzbC5vICBcCiAJCSAgIGNhbGxfd2l0aF9zdGFjay5vIGJzd2Fwc2RpMi5vCiAKLW1tdS15CTo9IGNsZWFyX3VzZXIubyBjb3B5X3BhZ2UubyBnZXR1c2VyLm8gcHV0dXNlci5vCi0KLSMgdGhlIGNvZGUgaW4gdWFjY2Vzcy5TIGlzIG5vdCBwcmVlbXB0aW9uIHNhZmUgYW5kCi0jIHByb2JhYmx5IGZhc3RlciBvbiBBUk12MyBvbmx5Ci1pZmVxICgkKENPTkZJR19QUkVFTVBUKSx5KQotICBtbXUteQkrPSBjb3B5X2Zyb21fdXNlci5vIGNvcHlfdG9fdXNlci5vCi1lbHNlCi1pZm5lcSAoJChDT05GSUdfQ1BVXzMydjMpLHkpCi0gIG1tdS15CSs9IGNvcHlfZnJvbV91c2VyLm8gY29weV90b191c2VyLm8KLWVsc2UKLSAgbW11LXkJKz0gdWFjY2Vzcy5vCi1lbmRpZgotZW5kaWYKK21tdS15CQk6PSBjbGVhcl91c2VyLm8gY29weV9wYWdlLm8gZ2V0dXNlci5vIHB1dHVzZXIubyAgICAgICBcCisJCSAgIGNvcHlfZnJvbV91c2VyLm8gY29weV90b191c2VyLm8KIAogIyB1c2luZyBsaWJfIGhlcmUgd29uJ3Qgb3ZlcnJpZGUgYWxyZWFkeSBhdmFpbGFibGUgd2VhayBzeW1ib2xzCiBvYmotJChDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSkgKz0gdWFjY2Vzc193aXRoX21lbWNweS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9saWIvdWFjY2Vzcy5TIGIvYXJjaC9hcm0vbGliL3VhY2Nlc3MuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUwNTIwOS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9saWIvdWFjY2Vzcy5TCisrKyAvZGV2L251bGwKQEAgLTEsNTY0ICswLDAgQEAKLS8qCi0gKiAgbGludXgvYXJjaC9hcm0vbGliL3VhY2Nlc3MuUwotICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsMTk5NywxOTk4IFJ1c3NlbGwgS2luZwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFJvdXRpbmVzIHRvIGJsb2NrIGNvcHkgZGF0YSB0by9mcm9tIHVzZXIgbWVtb3J5Ci0gKiAgIFRoZXNlIGFyZSBoaWdobHkgb3B0aW1pc2VkIGJvdGggZm9yIHRoZSA0ayBwYWdlIHNpemUKLSAqICAgYW5kIGZvciB2YXJpb3VzIGFsaWdubWVudHMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgotI2luY2x1ZGUgPGFzbS9lcnJuby5oPgotI2luY2x1ZGUgPGFzbS9kb21haW4uaD4KLQotCQkudGV4dAotCi0jZGVmaW5lIFBBR0VfU0hJRlQgMTIKLQotLyogUHJvdG90eXBlOiBpbnQgX19jb3B5X3RvX3VzZXIodm9pZCAqdG8sIGNvbnN0IGNoYXIgKmZyb20sIHNpemVfdCBuKQotICogUHVycG9zZSAgOiBjb3B5IGEgYmxvY2sgdG8gdXNlciBtZW1vcnkgZnJvbSBrZXJuZWwgbWVtb3J5Ci0gKiBQYXJhbXMgICA6IHRvICAgLSB1c2VyIG1lbW9yeQotICogICAgICAgICAgOiBmcm9tIC0ga2VybmVsIG1lbW9yeQotICogICAgICAgICAgOiBuICAgIC0gbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkKLSAqIFJldHVybnMgIDogTnVtYmVyIG9mIGJ5dGVzIE5PVCBjb3BpZWQuCi0gKi8KLQotLkxjMnVfZGVzdF9ub3RfYWxpZ25lZDoKLQkJcnNiCWlwLCBpcCwgIzQKLQkJY21wCWlwLCAjMgotCQlsZHJiCXIzLCBbcjFdLCAjMQotVVNFUigJVFVTRVIoCXN0cmIpCXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAotCQlsZHJnZWIJcjMsIFtyMV0sICMxCi1VU0VSKAlUVVNFUigJc3RyZ2ViKSByMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKLQkJbGRyZ3RiCXIzLCBbcjFdLCAjMQotVVNFUigJVFVTRVIoCXN0cmd0YikgcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0Ci0JCXN1YglyMiwgcjIsIGlwCi0JCWIJLkxjMnVfZGVzdF9hbGlnbmVkCi0KLUVOVFJZKF9fY29weV90b191c2VyKQotCQlzdG1mZAlzcCEsIHtyMiwgcjQgLSByNywgbHJ9Ci0JCWNtcAlyMiwgIzQKLQkJYmx0CS5MYzJ1X25vdF9lbm91Z2gKLQkJYW5kcwlpcCwgcjAsICMzCi0JCWJuZQkuTGMydV9kZXN0X25vdF9hbGlnbmVkCi0uTGMydV9kZXN0X2FsaWduZWQ6Ci0KLQkJYW5kcwlpcCwgcjEsICMzCi0JCWJuZQkuTGMydV9zcmNfbm90X2FsaWduZWQKLS8qCi0gKiBTZWVpbmcgYXMgdGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0IDggYnl0ZXMgdG8gY29weSwgd2UgY2FuCi0gKiBjb3B5IG9uZSB3b3JkLCBhbmQgZm9yY2UgYSB1c2VyLW1vZGUgcGFnZSBmYXVsdC4uLgotICovCi0KLS5MYzJ1XzBmdXBpOglzdWJzCXIyLCByMiwgIzQKLQkJYWRkbWkJaXAsIHIyLCAjNAotCQlibWkJLkxjMnVfMG5vd29yZHMKLQkJbGRyCXIzLCBbcjFdLCAjNAotVVNFUigJVFVTRVIoCXN0cikJcjMsIFtyMF0sICM0KQkJCUAgTWF5IGZhdWx0Ci0JCW1vdglpcCwgcjAsIGxzbCAjMzIgLSBQQUdFX1NISUZUCUAgT24gZWFjaCBwYWdlLCB1c2UgYSBsZC9zdD8/dCBpbnN0cnVjdGlvbgotCQlyc2IJaXAsIGlwLCAjMAotCQltb3ZzCWlwLCBpcCwgbHNyICMzMiAtIFBBR0VfU0hJRlQKLQkJYmVxCS5MYzJ1XzBmdXBpCi0vKgotICogaXAgPSBtYXggbm8uIG9mIGJ5dGVzIHRvIGNvcHkgYmVmb3JlIG5lZWRpbmcgYW5vdGhlciAic3RydCIgaW5zbgotICovCi0JCWNtcAlyMiwgaXAKLQkJbW92bHQJaXAsIHIyCi0JCXN1YglyMiwgcjIsIGlwCi0JCXN1YnMJaXAsIGlwLCAjMzIKLQkJYmx0CS5MYzJ1XzByZW04bHAKLQotLkxjMnVfMGNweThscDoJbGRtaWEJcjEhLCB7cjMgLSByNn0KLQkJc3RtaWEJcjAhLCB7cjMgLSByNn0JCQlAIFNob3VsZG50IGZhdWx0Ci0JCWxkbWlhCXIxISwge3IzIC0gcjZ9Ci0JCXN1YnMJaXAsIGlwLCAjMzIKLQkJc3RtaWEJcjAhLCB7cjMgLSByNn0JCQlAIFNob3VsZG50IGZhdWx0Ci0JCWJwbAkuTGMydV8wY3B5OGxwCi0KLS5MYzJ1XzByZW04bHA6CWNtbglpcCwgIzE2Ci0JCWxkbWdlaWEJcjEhLCB7cjMgLSByNn0KLQkJc3RtZ2VpYQlyMCEsIHtyMyAtIHI2fQkJCUAgU2hvdWxkbnQgZmF1bHQKLQkJdHN0CWlwLCAjOAotCQlsZG1uZWlhCXIxISwge3IzIC0gcjR9Ci0JCXN0bW5laWEJcjAhLCB7cjMgLSByNH0JCQlAIFNob3VsZG50IGZhdWx0Ci0JCXRzdAlpcCwgIzQKLQkJbGRybmUJcjMsIFtyMV0sICM0Ci0JVFVTRVIoCXN0cm5lKSByMywgW3IwXSwgIzQJCQlAIFNob3VsZG50IGZhdWx0Ci0JCWFuZHMJaXAsIGlwLCAjMwotCQliZXEJLkxjMnVfMGZ1cGkKLS5MYzJ1XzBub3dvcmRzOgl0ZXEJaXAsICMwCi0JCWJlcQkuTGMydV9maW5pc2hlZAotLkxjMnVfbm93b3JkczoJY21wCWlwLCAjMgotCQlsZHJiCXIzLCBbcjFdLCAjMQotVVNFUigJVFVTRVIoCXN0cmIpCXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAotCQlsZHJnZWIJcjMsIFtyMV0sICMxCi1VU0VSKAlUVVNFUigJc3RyZ2ViKSByMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKLQkJbGRyZ3RiCXIzLCBbcjFdLCAjMQotVVNFUigJVFVTRVIoCXN0cmd0YikgcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0Ci0JCWIJLkxjMnVfZmluaXNoZWQKLQotLkxjMnVfbm90X2Vub3VnaDoKLQkJbW92cwlpcCwgcjIKLQkJYm5lCS5MYzJ1X25vd29yZHMKLS5MYzJ1X2ZpbmlzaGVkOgltb3YJcjAsICMwCi0JCWxkbWZkCXNwISwge3IyLCByNCAtIHI3LCBwY30KLQotLkxjMnVfc3JjX25vdF9hbGlnbmVkOgotCQliaWMJcjEsIHIxLCAjMwotCQlsZHIJcjcsIFtyMV0sICM0Ci0JCWNtcAlpcCwgIzIKLQkJYmd0CS5MYzJ1XzNmdXBpCi0JCWJlcQkuTGMydV8yZnVwaQotLkxjMnVfMWZ1cGk6CXN1YnMJcjIsIHIyLCAjNAotCQlhZGRtaQlpcCwgcjIsICM0Ci0JCWJtaQkuTGMydV8xbm93b3JkcwotCQltb3YJcjMsIHI3LCBsc3B1bGwgIzgKLQkJbGRyCXI3LCBbcjFdLCAjNAotCQlvcnIJcjMsIHIzLCByNywgbHNwdXNoICMyNAotVVNFUigJVFVTRVIoCXN0cikJcjMsIFtyMF0sICM0KQkJCUAgTWF5IGZhdWx0Ci0JCW1vdglpcCwgcjAsIGxzbCAjMzIgLSBQQUdFX1NISUZUCi0JCXJzYglpcCwgaXAsICMwCi0JCW1vdnMJaXAsIGlwLCBsc3IgIzMyIC0gUEFHRV9TSElGVAotCQliZXEJLkxjMnVfMWZ1cGkKLQkJY21wCXIyLCBpcAotCQltb3ZsdAlpcCwgcjIKLQkJc3ViCXIyLCByMiwgaXAKLQkJc3VicwlpcCwgaXAsICMxNgotCQlibHQJLkxjMnVfMXJlbThscAotCi0uTGMydV8xY3B5OGxwOgltb3YJcjMsIHI3LCBsc3B1bGwgIzgKLQkJbGRtaWEJcjEhLCB7cjQgLSByN30KLQkJc3VicwlpcCwgaXAsICMxNgotCQlvcnIJcjMsIHIzLCByNCwgbHNwdXNoICMyNAotCQltb3YJcjQsIHI0LCBsc3B1bGwgIzgKLQkJb3JyCXI0LCByNCwgcjUsIGxzcHVzaCAjMjQKLQkJbW92CXI1LCByNSwgbHNwdWxsICM4Ci0JCW9ycglyNSwgcjUsIHI2LCBsc3B1c2ggIzI0Ci0JCW1vdglyNiwgcjYsIGxzcHVsbCAjOAotCQlvcnIJcjYsIHI2LCByNywgbHNwdXNoICMyNAotCQlzdG1pYQlyMCEsIHtyMyAtIHI2fQkJCUAgU2hvdWxkbnQgZmF1bHQKLQkJYnBsCS5MYzJ1XzFjcHk4bHAKLQotLkxjMnVfMXJlbThscDoJdHN0CWlwLCAjOAotCQltb3ZuZQlyMywgcjcsIGxzcHVsbCAjOAotCQlsZG1uZWlhCXIxISwge3I0LCByN30KLQkJb3JybmUJcjMsIHIzLCByNCwgbHNwdXNoICMyNAotCQltb3ZuZQlyNCwgcjQsIGxzcHVsbCAjOAotCQlvcnJuZQlyNCwgcjQsIHI3LCBsc3B1c2ggIzI0Ci0JCXN0bW5laWEJcjAhLCB7cjMgLSByNH0JCQlAIFNob3VsZG50IGZhdWx0Ci0JCXRzdAlpcCwgIzQKLQkJbW92bmUJcjMsIHI3LCBsc3B1bGwgIzgKLQkJbGRybmUJcjcsIFtyMV0sICM0Ci0JCW9ycm5lCXIzLCByMywgcjcsIGxzcHVzaCAjMjQKLQlUVVNFUigJc3RybmUpIHIzLCBbcjBdLCAjNAkJCUAgU2hvdWxkbnQgZmF1bHQKLQkJYW5kcwlpcCwgaXAsICMzCi0JCWJlcQkuTGMydV8xZnVwaQotLkxjMnVfMW5vd29yZHM6CW1vdglyMywgcjcsIGdldF9ieXRlXzEKLQkJdGVxCWlwLCAjMAotCQliZXEJLkxjMnVfZmluaXNoZWQKLQkJY21wCWlwLCAjMgotVVNFUigJVFVTRVIoCXN0cmIpCXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAotCQltb3ZnZQlyMywgcjcsIGdldF9ieXRlXzIKLVVTRVIoCVRVU0VSKAlzdHJnZWIpIHIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAotCQltb3ZndAlyMywgcjcsIGdldF9ieXRlXzMKLVVTRVIoCVRVU0VSKAlzdHJndGIpIHIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAotCQliCS5MYzJ1X2ZpbmlzaGVkCi0KLS5MYzJ1XzJmdXBpOglzdWJzCXIyLCByMiwgIzQKLQkJYWRkbWkJaXAsIHIyLCAjNAotCQlibWkJLkxjMnVfMm5vd29yZHMKLQkJbW92CXIzLCByNywgbHNwdWxsICMxNgotCQlsZHIJcjcsIFtyMV0sICM0Ci0JCW9ycglyMywgcjMsIHI3LCBsc3B1c2ggIzE2Ci1VU0VSKAlUVVNFUigJc3RyKQlyMywgW3IwXSwgIzQpCQkJQCBNYXkgZmF1bHQKLQkJbW92CWlwLCByMCwgbHNsICMzMiAtIFBBR0VfU0hJRlQKLQkJcnNiCWlwLCBpcCwgIzAKLQkJbW92cwlpcCwgaXAsIGxzciAjMzIgLSBQQUdFX1NISUZUCi0JCWJlcQkuTGMydV8yZnVwaQotCQljbXAJcjIsIGlwCi0JCW1vdmx0CWlwLCByMgotCQlzdWIJcjIsIHIyLCBpcAotCQlzdWJzCWlwLCBpcCwgIzE2Ci0JCWJsdAkuTGMydV8ycmVtOGxwCi0KLS5MYzJ1XzJjcHk4bHA6CW1vdglyMywgcjcsIGxzcHVsbCAjMTYKLQkJbGRtaWEJcjEhLCB7cjQgLSByN30KLQkJc3VicwlpcCwgaXAsICMxNgotCQlvcnIJcjMsIHIzLCByNCwgbHNwdXNoICMxNgotCQltb3YJcjQsIHI0LCBsc3B1bGwgIzE2Ci0JCW9ycglyNCwgcjQsIHI1LCBsc3B1c2ggIzE2Ci0JCW1vdglyNSwgcjUsIGxzcHVsbCAjMTYKLQkJb3JyCXI1LCByNSwgcjYsIGxzcHVzaCAjMTYKLQkJbW92CXI2LCByNiwgbHNwdWxsICMxNgotCQlvcnIJcjYsIHI2LCByNywgbHNwdXNoICMxNgotCQlzdG1pYQlyMCEsIHtyMyAtIHI2fQkJCUAgU2hvdWxkbnQgZmF1bHQKLQkJYnBsCS5MYzJ1XzJjcHk4bHAKLQotLkxjMnVfMnJlbThscDoJdHN0CWlwLCAjOAotCQltb3ZuZQlyMywgcjcsIGxzcHVsbCAjMTYKLQkJbGRtbmVpYQlyMSEsIHtyNCwgcjd9Ci0JCW9ycm5lCXIzLCByMywgcjQsIGxzcHVzaCAjMTYKLQkJbW92bmUJcjQsIHI0LCBsc3B1bGwgIzE2Ci0JCW9ycm5lCXI0LCByNCwgcjcsIGxzcHVzaCAjMTYKLQkJc3RtbmVpYQlyMCEsIHtyMyAtIHI0fQkJCUAgU2hvdWxkbnQgZmF1bHQKLQkJdHN0CWlwLCAjNAotCQltb3ZuZQlyMywgcjcsIGxzcHVsbCAjMTYKLQkJbGRybmUJcjcsIFtyMV0sICM0Ci0JCW9ycm5lCXIzLCByMywgcjcsIGxzcHVzaCAjMTYKLQlUVVNFUigJc3RybmUpIHIzLCBbcjBdLCAjNAkJCUAgU2hvdWxkbnQgZmF1bHQKLQkJYW5kcwlpcCwgaXAsICMzCi0JCWJlcQkuTGMydV8yZnVwaQotLkxjMnVfMm5vd29yZHM6CW1vdglyMywgcjcsIGdldF9ieXRlXzIKLQkJdGVxCWlwLCAjMAotCQliZXEJLkxjMnVfZmluaXNoZWQKLQkJY21wCWlwLCAjMgotVVNFUigJVFVTRVIoCXN0cmIpCXIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAotCQltb3ZnZQlyMywgcjcsIGdldF9ieXRlXzMKLVVTRVIoCVRVU0VSKAlzdHJnZWIpIHIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAotCQlsZHJndGIJcjMsIFtyMV0sICMwCi1VU0VSKAlUVVNFUigJc3RyZ3RiKSByMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKLQkJYgkuTGMydV9maW5pc2hlZAotCi0uTGMydV8zZnVwaToJc3VicwlyMiwgcjIsICM0Ci0JCWFkZG1pCWlwLCByMiwgIzQKLQkJYm1pCS5MYzJ1XzNub3dvcmRzCi0JCW1vdglyMywgcjcsIGxzcHVsbCAjMjQKLQkJbGRyCXI3LCBbcjFdLCAjNAotCQlvcnIJcjMsIHIzLCByNywgbHNwdXNoICM4Ci1VU0VSKAlUVVNFUigJc3RyKQlyMywgW3IwXSwgIzQpCQkJQCBNYXkgZmF1bHQKLQkJbW92CWlwLCByMCwgbHNsICMzMiAtIFBBR0VfU0hJRlQKLQkJcnNiCWlwLCBpcCwgIzAKLQkJbW92cwlpcCwgaXAsIGxzciAjMzIgLSBQQUdFX1NISUZUCi0JCWJlcQkuTGMydV8zZnVwaQotCQljbXAJcjIsIGlwCi0JCW1vdmx0CWlwLCByMgotCQlzdWIJcjIsIHIyLCBpcAotCQlzdWJzCWlwLCBpcCwgIzE2Ci0JCWJsdAkuTGMydV8zcmVtOGxwCi0KLS5MYzJ1XzNjcHk4bHA6CW1vdglyMywgcjcsIGxzcHVsbCAjMjQKLQkJbGRtaWEJcjEhLCB7cjQgLSByN30KLQkJc3VicwlpcCwgaXAsICMxNgotCQlvcnIJcjMsIHIzLCByNCwgbHNwdXNoICM4Ci0JCW1vdglyNCwgcjQsIGxzcHVsbCAjMjQKLQkJb3JyCXI0LCByNCwgcjUsIGxzcHVzaCAjOAotCQltb3YJcjUsIHI1LCBsc3B1bGwgIzI0Ci0JCW9ycglyNSwgcjUsIHI2LCBsc3B1c2ggIzgKLQkJbW92CXI2LCByNiwgbHNwdWxsICMyNAotCQlvcnIJcjYsIHI2LCByNywgbHNwdXNoICM4Ci0JCXN0bWlhCXIwISwge3IzIC0gcjZ9CQkJQCBTaG91bGRudCBmYXVsdAotCQlicGwJLkxjMnVfM2NweThscAotCi0uTGMydV8zcmVtOGxwOgl0c3QJaXAsICM4Ci0JCW1vdm5lCXIzLCByNywgbHNwdWxsICMyNAotCQlsZG1uZWlhCXIxISwge3I0LCByN30KLQkJb3JybmUJcjMsIHIzLCByNCwgbHNwdXNoICM4Ci0JCW1vdm5lCXI0LCByNCwgbHNwdWxsICMyNAotCQlvcnJuZQlyNCwgcjQsIHI3LCBsc3B1c2ggIzgKLQkJc3RtbmVpYQlyMCEsIHtyMyAtIHI0fQkJCUAgU2hvdWxkbnQgZmF1bHQKLQkJdHN0CWlwLCAjNAotCQltb3ZuZQlyMywgcjcsIGxzcHVsbCAjMjQKLQkJbGRybmUJcjcsIFtyMV0sICM0Ci0JCW9ycm5lCXIzLCByMywgcjcsIGxzcHVzaCAjOAotCVRVU0VSKAlzdHJuZSkgcjMsIFtyMF0sICM0CQkJQCBTaG91bGRudCBmYXVsdAotCQlhbmRzCWlwLCBpcCwgIzMKLQkJYmVxCS5MYzJ1XzNmdXBpCi0uTGMydV8zbm93b3JkczoJbW92CXIzLCByNywgZ2V0X2J5dGVfMwotCQl0ZXEJaXAsICMwCi0JCWJlcQkuTGMydV9maW5pc2hlZAotCQljbXAJaXAsICMyCi1VU0VSKAlUVVNFUigJc3RyYikJcjMsIFtyMF0sICMxKQkJCUAgTWF5IGZhdWx0Ci0JCWxkcmdlYglyMywgW3IxXSwgIzEKLVVTRVIoCVRVU0VSKAlzdHJnZWIpIHIzLCBbcjBdLCAjMSkJCQlAIE1heSBmYXVsdAotCQlsZHJndGIJcjMsIFtyMV0sICMwCi1VU0VSKAlUVVNFUigJc3RyZ3RiKSByMywgW3IwXSwgIzEpCQkJQCBNYXkgZmF1bHQKLQkJYgkuTGMydV9maW5pc2hlZAotRU5EUFJPQyhfX2NvcHlfdG9fdXNlcikKLQotCQkucHVzaHNlY3Rpb24gLmZpeHVwLCJheCIKLQkJLmFsaWduCTAKLTkwMDE6CQlsZG1mZAlzcCEsIHtyMCwgcjQgLSByNywgcGN9Ci0JCS5wb3BzZWN0aW9uCi0KLS8qIFByb3RvdHlwZTogdW5zaWduZWQgbG9uZyBfX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLGNvbnN0IHZvaWQgKmZyb20sdW5zaWduZWQgbG9uZyBuKTsKLSAqIFB1cnBvc2UgIDogY29weSBhIGJsb2NrIGZyb20gdXNlciBtZW1vcnkgdG8ga2VybmVsIG1lbW9yeQotICogUGFyYW1zICAgOiB0byAgIC0ga2VybmVsIG1lbW9yeQotICogICAgICAgICAgOiBmcm9tIC0gdXNlciBtZW1vcnkKLSAqICAgICAgICAgIDogbiAgICAtIG51bWJlciBvZiBieXRlcyB0byBjb3B5Ci0gKiBSZXR1cm5zICA6IE51bWJlciBvZiBieXRlcyBOT1QgY29waWVkLgotICovCi0uTGNmdV9kZXN0X25vdF9hbGlnbmVkOgotCQlyc2IJaXAsIGlwLCAjNAotCQljbXAJaXAsICMyCi1VU0VSKAlUVVNFUigJbGRyYikJcjMsIFtyMV0sICMxKQkJCUAgTWF5IGZhdWx0Ci0JCXN0cmIJcjMsIFtyMF0sICMxCi1VU0VSKAlUVVNFUigJbGRyZ2ViKSByMywgW3IxXSwgIzEpCQkJQCBNYXkgZmF1bHQKLQkJc3RyZ2ViCXIzLCBbcjBdLCAjMQotVVNFUigJVFVTRVIoCWxkcmd0YikgcjMsIFtyMV0sICMxKQkJCUAgTWF5IGZhdWx0Ci0JCXN0cmd0YglyMywgW3IwXSwgIzEKLQkJc3ViCXIyLCByMiwgaXAKLQkJYgkuTGNmdV9kZXN0X2FsaWduZWQKLQotRU5UUlkoX19jb3B5X2Zyb21fdXNlcikKLQkJc3RtZmQJc3AhLCB7cjAsIHIyLCByNCAtIHI3LCBscn0KLQkJY21wCXIyLCAjNAotCQlibHQJLkxjZnVfbm90X2Vub3VnaAotCQlhbmRzCWlwLCByMCwgIzMKLQkJYm5lCS5MY2Z1X2Rlc3Rfbm90X2FsaWduZWQKLS5MY2Z1X2Rlc3RfYWxpZ25lZDoKLQkJYW5kcwlpcCwgcjEsICMzCi0JCWJuZQkuTGNmdV9zcmNfbm90X2FsaWduZWQKLQotLyoKLSAqIFNlZWluZyBhcyB0aGVyZSBoYXMgdG8gYmUgYXQgbGVhc3QgOCBieXRlcyB0byBjb3B5LCB3ZSBjYW4KLSAqIGNvcHkgb25lIHdvcmQsIGFuZCBmb3JjZSBhIHVzZXItbW9kZSBwYWdlIGZhdWx0Li4uCi0gKi8KLQotLkxjZnVfMGZ1cGk6CXN1YnMJcjIsIHIyLCAjNAotCQlhZGRtaQlpcCwgcjIsICM0Ci0JCWJtaQkuTGNmdV8wbm93b3JkcwotVVNFUigJVFVTRVIoCWxkcikJcjMsIFtyMV0sICM0KQotCQlzdHIJcjMsIFtyMF0sICM0Ci0JCW1vdglpcCwgcjEsIGxzbCAjMzIgLSBQQUdFX1NISUZUCUAgT24gZWFjaCBwYWdlLCB1c2UgYSBsZC9zdD8/dCBpbnN0cnVjdGlvbgotCQlyc2IJaXAsIGlwLCAjMAotCQltb3ZzCWlwLCBpcCwgbHNyICMzMiAtIFBBR0VfU0hJRlQKLQkJYmVxCS5MY2Z1XzBmdXBpCi0vKgotICogaXAgPSBtYXggbm8uIG9mIGJ5dGVzIHRvIGNvcHkgYmVmb3JlIG5lZWRpbmcgYW5vdGhlciAic3RydCIgaW5zbgotICovCi0JCWNtcAlyMiwgaXAKLQkJbW92bHQJaXAsIHIyCi0JCXN1YglyMiwgcjIsIGlwCi0JCXN1YnMJaXAsIGlwLCAjMzIKLQkJYmx0CS5MY2Z1XzByZW04bHAKLQotLkxjZnVfMGNweThscDoJbGRtaWEJcjEhLCB7cjMgLSByNn0JCQlAIFNob3VsZG50IGZhdWx0Ci0JCXN0bWlhCXIwISwge3IzIC0gcjZ9Ci0JCWxkbWlhCXIxISwge3IzIC0gcjZ9CQkJQCBTaG91bGRudCBmYXVsdAotCQlzdWJzCWlwLCBpcCwgIzMyCi0JCXN0bWlhCXIwISwge3IzIC0gcjZ9Ci0JCWJwbAkuTGNmdV8wY3B5OGxwCi0KLS5MY2Z1XzByZW04bHA6CWNtbglpcCwgIzE2Ci0JCWxkbWdlaWEJcjEhLCB7cjMgLSByNn0JCQlAIFNob3VsZG50IGZhdWx0Ci0JCXN0bWdlaWEJcjAhLCB7cjMgLSByNn0KLQkJdHN0CWlwLCAjOAotCQlsZG1uZWlhCXIxISwge3IzIC0gcjR9CQkJQCBTaG91bGRudCBmYXVsdAotCQlzdG1uZWlhCXIwISwge3IzIC0gcjR9Ci0JCXRzdAlpcCwgIzQKLQlUVVNFUigJbGRybmUpIHIzLCBbcjFdLCAjNAkJCUAgU2hvdWxkbnQgZmF1bHQKLQkJc3RybmUJcjMsIFtyMF0sICM0Ci0JCWFuZHMJaXAsIGlwLCAjMwotCQliZXEJLkxjZnVfMGZ1cGkKLS5MY2Z1XzBub3dvcmRzOgl0ZXEJaXAsICMwCi0JCWJlcQkuTGNmdV9maW5pc2hlZAotLkxjZnVfbm93b3JkczoJY21wCWlwLCAjMgotVVNFUigJVFVTRVIoCWxkcmIpCXIzLCBbcjFdLCAjMSkJCQlAIE1heSBmYXVsdAotCQlzdHJiCXIzLCBbcjBdLCAjMQotVVNFUigJVFVTRVIoCWxkcmdlYikgcjMsIFtyMV0sICMxKQkJCUAgTWF5IGZhdWx0Ci0JCXN0cmdlYglyMywgW3IwXSwgIzEKLVVTRVIoCVRVU0VSKAlsZHJndGIpIHIzLCBbcjFdLCAjMSkJCQlAIE1heSBmYXVsdAotCQlzdHJndGIJcjMsIFtyMF0sICMxCi0JCWIJLkxjZnVfZmluaXNoZWQKLQotLkxjZnVfbm90X2Vub3VnaDoKLQkJbW92cwlpcCwgcjIKLQkJYm5lCS5MY2Z1X25vd29yZHMKLS5MY2Z1X2ZpbmlzaGVkOgltb3YJcjAsICMwCi0JCWFkZAlzcCwgc3AsICM4Ci0JCWxkbWZkCXNwISwge3I0IC0gcjcsIHBjfQotCi0uTGNmdV9zcmNfbm90X2FsaWduZWQ6Ci0JCWJpYwlyMSwgcjEsICMzCi1VU0VSKAlUVVNFUigJbGRyKQlyNywgW3IxXSwgIzQpCQkJQCBNYXkgZmF1bHQKLQkJY21wCWlwLCAjMgotCQliZ3QJLkxjZnVfM2Z1cGkKLQkJYmVxCS5MY2Z1XzJmdXBpCi0uTGNmdV8xZnVwaToJc3VicwlyMiwgcjIsICM0Ci0JCWFkZG1pCWlwLCByMiwgIzQKLQkJYm1pCS5MY2Z1XzFub3dvcmRzCi0JCW1vdglyMywgcjcsIGxzcHVsbCAjOAotVVNFUigJVFVTRVIoCWxkcikJcjcsIFtyMV0sICM0KQkJCUAgTWF5IGZhdWx0Ci0JCW9ycglyMywgcjMsIHI3LCBsc3B1c2ggIzI0Ci0JCXN0cglyMywgW3IwXSwgIzQKLQkJbW92CWlwLCByMSwgbHNsICMzMiAtIFBBR0VfU0hJRlQKLQkJcnNiCWlwLCBpcCwgIzAKLQkJbW92cwlpcCwgaXAsIGxzciAjMzIgLSBQQUdFX1NISUZUCi0JCWJlcQkuTGNmdV8xZnVwaQotCQljbXAJcjIsIGlwCi0JCW1vdmx0CWlwLCByMgotCQlzdWIJcjIsIHIyLCBpcAotCQlzdWJzCWlwLCBpcCwgIzE2Ci0JCWJsdAkuTGNmdV8xcmVtOGxwCi0KLS5MY2Z1XzFjcHk4bHA6CW1vdglyMywgcjcsIGxzcHVsbCAjOAotCQlsZG1pYQlyMSEsIHtyNCAtIHI3fQkJCUAgU2hvdWxkbnQgZmF1bHQKLQkJc3VicwlpcCwgaXAsICMxNgotCQlvcnIJcjMsIHIzLCByNCwgbHNwdXNoICMyNAotCQltb3YJcjQsIHI0LCBsc3B1bGwgIzgKLQkJb3JyCXI0LCByNCwgcjUsIGxzcHVzaCAjMjQKLQkJbW92CXI1LCByNSwgbHNwdWxsICM4Ci0JCW9ycglyNSwgcjUsIHI2LCBsc3B1c2ggIzI0Ci0JCW1vdglyNiwgcjYsIGxzcHVsbCAjOAotCQlvcnIJcjYsIHI2LCByNywgbHNwdXNoICMyNAotCQlzdG1pYQlyMCEsIHtyMyAtIHI2fQotCQlicGwJLkxjZnVfMWNweThscAotCi0uTGNmdV8xcmVtOGxwOgl0c3QJaXAsICM4Ci0JCW1vdm5lCXIzLCByNywgbHNwdWxsICM4Ci0JCWxkbW5laWEJcjEhLCB7cjQsIHI3fQkJCUAgU2hvdWxkbnQgZmF1bHQKLQkJb3JybmUJcjMsIHIzLCByNCwgbHNwdXNoICMyNAotCQltb3ZuZQlyNCwgcjQsIGxzcHVsbCAjOAotCQlvcnJuZQlyNCwgcjQsIHI3LCBsc3B1c2ggIzI0Ci0JCXN0bW5laWEJcjAhLCB7cjMgLSByNH0KLQkJdHN0CWlwLCAjNAotCQltb3ZuZQlyMywgcjcsIGxzcHVsbCAjOAotVVNFUigJVFVTRVIoCWxkcm5lKSByNywgW3IxXSwgIzQpCQkJQCBNYXkgZmF1bHQKLQkJb3JybmUJcjMsIHIzLCByNywgbHNwdXNoICMyNAotCQlzdHJuZQlyMywgW3IwXSwgIzQKLQkJYW5kcwlpcCwgaXAsICMzCi0JCWJlcQkuTGNmdV8xZnVwaQotLkxjZnVfMW5vd29yZHM6CW1vdglyMywgcjcsIGdldF9ieXRlXzEKLQkJdGVxCWlwLCAjMAotCQliZXEJLkxjZnVfZmluaXNoZWQKLQkJY21wCWlwLCAjMgotCQlzdHJiCXIzLCBbcjBdLCAjMQotCQltb3ZnZQlyMywgcjcsIGdldF9ieXRlXzIKLQkJc3RyZ2ViCXIzLCBbcjBdLCAjMQotCQltb3ZndAlyMywgcjcsIGdldF9ieXRlXzMKLQkJc3RyZ3RiCXIzLCBbcjBdLCAjMQotCQliCS5MY2Z1X2ZpbmlzaGVkCi0KLS5MY2Z1XzJmdXBpOglzdWJzCXIyLCByMiwgIzQKLQkJYWRkbWkJaXAsIHIyLCAjNAotCQlibWkJLkxjZnVfMm5vd29yZHMKLQkJbW92CXIzLCByNywgbHNwdWxsICMxNgotVVNFUigJVFVTRVIoCWxkcikJcjcsIFtyMV0sICM0KQkJCUAgTWF5IGZhdWx0Ci0JCW9ycglyMywgcjMsIHI3LCBsc3B1c2ggIzE2Ci0JCXN0cglyMywgW3IwXSwgIzQKLQkJbW92CWlwLCByMSwgbHNsICMzMiAtIFBBR0VfU0hJRlQKLQkJcnNiCWlwLCBpcCwgIzAKLQkJbW92cwlpcCwgaXAsIGxzciAjMzIgLSBQQUdFX1NISUZUCi0JCWJlcQkuTGNmdV8yZnVwaQotCQljbXAJcjIsIGlwCi0JCW1vdmx0CWlwLCByMgotCQlzdWIJcjIsIHIyLCBpcAotCQlzdWJzCWlwLCBpcCwgIzE2Ci0JCWJsdAkuTGNmdV8ycmVtOGxwCi0KLQotLkxjZnVfMmNweThscDoJbW92CXIzLCByNywgbHNwdWxsICMxNgotCQlsZG1pYQlyMSEsIHtyNCAtIHI3fQkJCUAgU2hvdWxkbnQgZmF1bHQKLQkJc3VicwlpcCwgaXAsICMxNgotCQlvcnIJcjMsIHIzLCByNCwgbHNwdXNoICMxNgotCQltb3YJcjQsIHI0LCBsc3B1bGwgIzE2Ci0JCW9ycglyNCwgcjQsIHI1LCBsc3B1c2ggIzE2Ci0JCW1vdglyNSwgcjUsIGxzcHVsbCAjMTYKLQkJb3JyCXI1LCByNSwgcjYsIGxzcHVzaCAjMTYKLQkJbW92CXI2LCByNiwgbHNwdWxsICMxNgotCQlvcnIJcjYsIHI2LCByNywgbHNwdXNoICMxNgotCQlzdG1pYQlyMCEsIHtyMyAtIHI2fQotCQlicGwJLkxjZnVfMmNweThscAotCi0uTGNmdV8ycmVtOGxwOgl0c3QJaXAsICM4Ci0JCW1vdm5lCXIzLCByNywgbHNwdWxsICMxNgotCQlsZG1uZWlhCXIxISwge3I0LCByN30JCQlAIFNob3VsZG50IGZhdWx0Ci0JCW9ycm5lCXIzLCByMywgcjQsIGxzcHVzaCAjMTYKLQkJbW92bmUJcjQsIHI0LCBsc3B1bGwgIzE2Ci0JCW9ycm5lCXI0LCByNCwgcjcsIGxzcHVzaCAjMTYKLQkJc3RtbmVpYQlyMCEsIHtyMyAtIHI0fQotCQl0c3QJaXAsICM0Ci0JCW1vdm5lCXIzLCByNywgbHNwdWxsICMxNgotVVNFUigJVFVTRVIoCWxkcm5lKSByNywgW3IxXSwgIzQpCQkJQCBNYXkgZmF1bHQKLQkJb3JybmUJcjMsIHIzLCByNywgbHNwdXNoICMxNgotCQlzdHJuZQlyMywgW3IwXSwgIzQKLQkJYW5kcwlpcCwgaXAsICMzCi0JCWJlcQkuTGNmdV8yZnVwaQotLkxjZnVfMm5vd29yZHM6CW1vdglyMywgcjcsIGdldF9ieXRlXzIKLQkJdGVxCWlwLCAjMAotCQliZXEJLkxjZnVfZmluaXNoZWQKLQkJY21wCWlwLCAjMgotCQlzdHJiCXIzLCBbcjBdLCAjMQotCQltb3ZnZQlyMywgcjcsIGdldF9ieXRlXzMKLQkJc3RyZ2ViCXIzLCBbcjBdLCAjMQotVVNFUigJVFVTRVIoCWxkcmd0YikgcjMsIFtyMV0sICMwKQkJCUAgTWF5IGZhdWx0Ci0JCXN0cmd0YglyMywgW3IwXSwgIzEKLQkJYgkuTGNmdV9maW5pc2hlZAotCi0uTGNmdV8zZnVwaToJc3VicwlyMiwgcjIsICM0Ci0JCWFkZG1pCWlwLCByMiwgIzQKLQkJYm1pCS5MY2Z1XzNub3dvcmRzCi0JCW1vdglyMywgcjcsIGxzcHVsbCAjMjQKLVVTRVIoCVRVU0VSKAlsZHIpCXI3LCBbcjFdLCAjNCkJCQlAIE1heSBmYXVsdAotCQlvcnIJcjMsIHIzLCByNywgbHNwdXNoICM4Ci0JCXN0cglyMywgW3IwXSwgIzQKLQkJbW92CWlwLCByMSwgbHNsICMzMiAtIFBBR0VfU0hJRlQKLQkJcnNiCWlwLCBpcCwgIzAKLQkJbW92cwlpcCwgaXAsIGxzciAjMzIgLSBQQUdFX1NISUZUCi0JCWJlcQkuTGNmdV8zZnVwaQotCQljbXAJcjIsIGlwCi0JCW1vdmx0CWlwLCByMgotCQlzdWIJcjIsIHIyLCBpcAotCQlzdWJzCWlwLCBpcCwgIzE2Ci0JCWJsdAkuTGNmdV8zcmVtOGxwCi0KLS5MY2Z1XzNjcHk4bHA6CW1vdglyMywgcjcsIGxzcHVsbCAjMjQKLQkJbGRtaWEJcjEhLCB7cjQgLSByN30JCQlAIFNob3VsZG50IGZhdWx0Ci0JCW9ycglyMywgcjMsIHI0LCBsc3B1c2ggIzgKLQkJbW92CXI0LCByNCwgbHNwdWxsICMyNAotCQlvcnIJcjQsIHI0LCByNSwgbHNwdXNoICM4Ci0JCW1vdglyNSwgcjUsIGxzcHVsbCAjMjQKLQkJb3JyCXI1LCByNSwgcjYsIGxzcHVzaCAjOAotCQltb3YJcjYsIHI2LCBsc3B1bGwgIzI0Ci0JCW9ycglyNiwgcjYsIHI3LCBsc3B1c2ggIzgKLQkJc3RtaWEJcjAhLCB7cjMgLSByNn0KLQkJc3VicwlpcCwgaXAsICMxNgotCQlicGwJLkxjZnVfM2NweThscAotCi0uTGNmdV8zcmVtOGxwOgl0c3QJaXAsICM4Ci0JCW1vdm5lCXIzLCByNywgbHNwdWxsICMyNAotCQlsZG1uZWlhCXIxISwge3I0LCByN30JCQlAIFNob3VsZG50IGZhdWx0Ci0JCW9ycm5lCXIzLCByMywgcjQsIGxzcHVzaCAjOAotCQltb3ZuZQlyNCwgcjQsIGxzcHVsbCAjMjQKLQkJb3JybmUJcjQsIHI0LCByNywgbHNwdXNoICM4Ci0JCXN0bW5laWEJcjAhLCB7cjMgLSByNH0KLQkJdHN0CWlwLCAjNAotCQltb3ZuZQlyMywgcjcsIGxzcHVsbCAjMjQKLVVTRVIoCVRVU0VSKAlsZHJuZSkgcjcsIFtyMV0sICM0KQkJCUAgTWF5IGZhdWx0Ci0JCW9ycm5lCXIzLCByMywgcjcsIGxzcHVzaCAjOAotCQlzdHJuZQlyMywgW3IwXSwgIzQKLQkJYW5kcwlpcCwgaXAsICMzCi0JCWJlcQkuTGNmdV8zZnVwaQotLkxjZnVfM25vd29yZHM6CW1vdglyMywgcjcsIGdldF9ieXRlXzMKLQkJdGVxCWlwLCAjMAotCQliZXEJLkxjZnVfZmluaXNoZWQKLQkJY21wCWlwLCAjMgotCQlzdHJiCXIzLCBbcjBdLCAjMQotVVNFUigJVFVTRVIoCWxkcmdlYikgcjMsIFtyMV0sICMxKQkJCUAgTWF5IGZhdWx0Ci0JCXN0cmdlYglyMywgW3IwXSwgIzEKLVVTRVIoCVRVU0VSKAlsZHJndGIpIHIzLCBbcjFdLCAjMSkJCQlAIE1heSBmYXVsdAotCQlzdHJndGIJcjMsIFtyMF0sICMxCi0JCWIJLkxjZnVfZmluaXNoZWQKLUVORFBST0MoX19jb3B5X2Zyb21fdXNlcikKLQotCQkucHVzaHNlY3Rpb24gLmZpeHVwLCJheCIKLQkJLmFsaWduCTAKLQkJLyoKLQkJICogV2UgdG9vayBhbiBleGNlcHRpb24uICByMCBjb250YWlucyBhIHBvaW50ZXIgdG8KLQkJICogdGhlIGJ5dGUgbm90IGNvcGllZC4KLQkJICovCi05MDAxOgkJbGRyCXIyLCBbc3BdLCAjNAkJCUAgdm9pZCAqdG8KLQkJc3ViCXIyLCByMCwgcjIJCQlAIGJ5dGVzIGNvcGllZAotCQlsZHIJcjEsIFtzcF0sICM0CQkJQCB1bnNpZ25lZCBsb25nIGNvdW50Ci0JCXN1YnMJcjQsIHIxLCByMgkJCUAgYnl0ZXMgbGVmdCB0byBjb3B5Ci0JCW1vdm5lCXIxLCByNAotCQlibG5lCV9fbWVtemVybwotCQltb3YJcjAsIHI0Ci0JCWxkbWZkCXNwISwge3I0IC0gcjcsIHBjfQotCQkucG9wc2VjdGlvbgotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWNuczN4eHgvcGNpZS5jIGIvYXJjaC9hcm0vbWFjaC1jbnMzeHh4L3BjaWUuYwppbmRleCA0NWQ2YmQwLi5jNjIyYzMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWNuczN4eHgvcGNpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtY25zM3h4eC9wY2llLmMKQEAgLTMwLDE4ICszMCwxNSBAQAogCXVuc2lnbmVkIGludCBpcnFzWzJdOwogCXN0cnVjdCByZXNvdXJjZSByZXNfaW87CiAJc3RydWN0IHJlc291cmNlIHJlc19tZW07Ci0Jc3RydWN0IGh3X3BjaSBod19wY2k7Ci0KKwlpbnQgcG9ydDsKIAlib29sIGxpbmtlZDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY25zM3h4eF9wY2llIGNuczN4eHhfcGNpZVtdOyAvKiBmb3J3YXJkIGRlY2wuICovCi0KIHN0YXRpYyBzdHJ1Y3QgY25zM3h4eF9wY2llICpzeXNkYXRhX3RvX2Nuc3BjaSh2b2lkICpzeXNkYXRhKQogewogCXN0cnVjdCBwY2lfc3lzX2RhdGEgKnJvb3QgPSBzeXNkYXRhOwogCi0JcmV0dXJuICZjbnMzeHh4X3BjaWVbcm9vdC0+ZG9tYWluXTsKKwlyZXR1cm4gcm9vdC0+cHJpdmF0ZV9kYXRhOwogfQogCiBzdGF0aWMgc3RydWN0IGNuczN4eHhfcGNpZSAqcGRldl90b19jbnNwY2koY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldikKQEAgLTU0LDggKzUxLDggQEAKIAlyZXR1cm4gc3lzZGF0YV90b19jbnNwY2koYnVzLT5zeXNkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgX19pb21lbSAqY25zM3h4eF9wY2lfY2ZnX2Jhc2Uoc3RydWN0IHBjaV9idXMgKmJ1cywKLQkJCQkgIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlKQorc3RhdGljIHZvaWQgX19pb21lbSAqY25zM3h4eF9wY2lfbWFwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUpCiB7CiAJc3RydWN0IGNuczN4eHhfcGNpZSAqY25zcGNpID0gcGJ1c190b19jbnNwY2koYnVzKTsKIAlpbnQgYnVzbm8gPSBidXMtPm51bWJlcjsKQEAgLTkxLDU1ICs4OCwyMiBAQAogc3RhdGljIGludCBjbnMzeHh4X3BjaV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCiAJCQkJICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpCiB7Ci0JdTMyIHY7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOworCWludCByZXQ7CiAJdTMyIG1hc2sgPSAoMHgxdWxsIDw8IChzaXplICogOCkpIC0gMTsKIAlpbnQgc2hpZnQgPSAod2hlcmUgJSA0KSAqIDg7CiAKLQliYXNlID0gY25zM3h4eF9wY2lfY2ZnX2Jhc2UoYnVzLCBkZXZmbiwgd2hlcmUpOwotCWlmICghYmFzZSkgewotCQkqdmFsID0gMHhmZmZmZmZmZjsKLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQl9CisJcmV0ID0gcGNpX2dlbmVyaWNfY29uZmlnX3JlYWQzMihidXMsIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsKTsKIAotCXYgPSBfX3Jhd19yZWFkbChiYXNlKTsKLQotCWlmIChidXMtPm51bWJlciA9PSAwICYmIGRldmZuID09IDAgJiYKLQkJCSh3aGVyZSAmIDB4ZmZjKSA9PSBQQ0lfQ0xBU1NfUkVWSVNJT04pIHsKKwlpZiAocmV0ID09IFBDSUJJT1NfU1VDQ0VTU0ZVTCAmJiAhYnVzLT5udW1iZXIgJiYgIWRldmZuICYmCisJICAgICh3aGVyZSAmIDB4ZmZjKSA9PSBQQ0lfQ0xBU1NfUkVWSVNJT04pCiAJCS8qCiAJCSAqIFJDJ3MgY2xhc3MgaXMgMHhiLCBidXQgTGludXggUENJIGRyaXZlciBuZWVkcyAweDYwNAogCQkgKiBmb3IgYSBQQ0llIGJyaWRnZS4gU28gd2UgbXVzdCBmaXh1cCB0aGUgY2xhc3MgY29kZQogCQkgKiB0byAweDYwNCBoZXJlLgogCQkgKi8KLQkJdiAmPSAweGZmOwotCQl2IHw9IDB4NjA0IDw8IDE2OwotCX0KKwkJKnZhbCA9ICgoKCgqdmFsIDw8IHNoaWZ0KSAmIDB4ZmYpIHwgKDB4NjA0IDw8IDE2KSkgPj4gc2hpZnQpICYgbWFzazsKIAotCSp2YWwgPSAodiA+PiBzaGlmdCkgJiBtYXNrOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCBjbnMzeHh4X3BjaV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAotCQkJCSAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKQotewotCXUzMiB2OwotCXZvaWQgX19pb21lbSAqYmFzZTsKLQl1MzIgbWFzayA9ICgweDF1bGwgPDwgKHNpemUgKiA4KSkgLSAxOwotCWludCBzaGlmdCA9ICh3aGVyZSAlIDQpICogODsKLQotCWJhc2UgPSBjbnMzeHh4X3BjaV9jZmdfYmFzZShidXMsIGRldmZuLCB3aGVyZSk7Ci0JaWYgKCFiYXNlKQotCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCi0JdiA9IF9fcmF3X3JlYWRsKGJhc2UpOwotCi0JdiAmPSB+KG1hc2sgPDwgc2hpZnQpOwotCXYgfD0gKHZhbCAmIG1hc2spIDw8IHNoaWZ0OwotCi0JX19yYXdfd3JpdGVsKHYsIGJhc2UpOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGNuczN4eHhfcGNpX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQpAQCAtMTU4LDggKzEyMiw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX29wcyBjbnMzeHh4X3BjaWVfb3BzID0geworCS5tYXBfYnVzID0gY25zM3h4eF9wY2lfbWFwX2J1cywKIAkucmVhZCA9IGNuczN4eHhfcGNpX3JlYWRfY29uZmlnLAotCS53cml0ZSA9IGNuczN4eHhfcGNpX3dyaXRlX2NvbmZpZywKKwkud3JpdGUgPSBwY2lfZ2VuZXJpY19jb25maWdfd3JpdGUsCiB9OwogCiBzdGF0aWMgaW50IGNuczN4eHhfcGNpZV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKQEAgLTE5MiwxMyArMTU3LDcgQEAKIAkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCQl9LAogCQkuaXJxcyA9IHsgSVJRX0NOUzNYWFhfUENJRTBfUkMsIElSUV9DTlMzWFhYX1BDSUUwX0RFVklDRSwgfSwKLQkJLmh3X3BjaSA9IHsKLQkJCS5kb21haW4gPSAwLAotCQkJLm5yX2NvbnRyb2xsZXJzID0gMSwKLQkJCS5vcHMgPSAmY25zM3h4eF9wY2llX29wcywKLQkJCS5zZXR1cCA9IGNuczN4eHhfcGNpX3NldHVwLAotCQkJLm1hcF9pcnEgPSBjbnMzeHh4X3BjaWVfbWFwX2lycSwKLQkJfSwKKwkJLnBvcnQgPSAwLAogCX0sCiAJWzFdID0gewogCQkuaG9zdF9yZWdzID0gKHZvaWQgX19pb21lbSAqKUNOUzNYWFhfUENJRTFfSE9TVF9CQVNFX1ZJUlQsCkBAIC0yMTcsMTkgKzE3NiwxMyBAQAogCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJCX0sCiAJCS5pcnFzID0geyBJUlFfQ05TM1hYWF9QQ0lFMV9SQywgSVJRX0NOUzNYWFhfUENJRTFfREVWSUNFLCB9LAotCQkuaHdfcGNpID0gewotCQkJLmRvbWFpbiA9IDEsCi0JCQkubnJfY29udHJvbGxlcnMgPSAxLAotCQkJLm9wcyA9ICZjbnMzeHh4X3BjaWVfb3BzLAotCQkJLnNldHVwID0gY25zM3h4eF9wY2lfc2V0dXAsCi0JCQkubWFwX2lycSA9IGNuczN4eHhfcGNpZV9tYXBfaXJxLAotCQl9LAorCQkucG9ydCA9IDEsCiAJfSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjbnMzeHh4X3BjaWVfY2hlY2tfbGluayhzdHJ1Y3QgY25zM3h4eF9wY2llICpjbnNwY2kpCiB7Ci0JaW50IHBvcnQgPSBjbnNwY2ktPmh3X3BjaS5kb21haW47CisJaW50IHBvcnQgPSBjbnNwY2ktPnBvcnQ7CiAJdTMyIHJlZzsKIAl1bnNpZ25lZCBsb25nIHRpbWU7CiAKQEAgLTI2MCw5ICsyMTMsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgY25zM3h4eF9wY2llX2h3X2luaXQoc3RydWN0IGNuczN4eHhfcGNpZSAqY25zcGNpKQogewotCWludCBwb3J0ID0gY25zcGNpLT5od19wY2kuZG9tYWluOworCWludCBwb3J0ID0gY25zcGNpLT5wb3J0OwogCXN0cnVjdCBwY2lfc3lzX2RhdGEgc2QgPSB7Ci0JCS5kb21haW4gPSBwb3J0LAorCQkucHJpdmF0ZV9kYXRhID0gY25zcGNpLAogCX07CiAJc3RydWN0IHBjaV9idXMgYnVzID0gewogCQkubnVtYmVyID0gMCwKQEAgLTMyMyw2ICsyNzYsMTQgQEAKIHZvaWQgX19pbml0IGNuczN4eHhfcGNpZV9pbml0X2xhdGUodm9pZCkKIHsKIAlpbnQgaTsKKwl2b2lkICpwcml2YXRlX2RhdGE7CisJc3RydWN0IGh3X3BjaSBod19wY2kgPSB7CisJICAgICAgIC5ucl9jb250cm9sbGVycyA9IDEsCisJICAgICAgIC5vcHMgPSAmY25zM3h4eF9wY2llX29wcywKKwkgICAgICAgLnNldHVwID0gY25zM3h4eF9wY2lfc2V0dXAsCisJICAgICAgIC5tYXBfaXJxID0gY25zM3h4eF9wY2llX21hcF9pcnEsCisJICAgICAgIC5wcml2YXRlX2RhdGEgPSAmcHJpdmF0ZV9kYXRhLAorCX07CiAKIAlwY2liaW9zX21pbl9pbyA9IDA7CiAJcGNpYmlvc19taW5fbWVtID0gMDsKQEAgLTMzNSw3ICsyOTYsOCBAQAogCQljbnMzeHh4X3B3cl9zb2Z0X3JzdCgweDEgPDwgUE1fU09GVF9SU1RfUkVHX09GRlNUX1BDSUUoaSkpOwogCQljbnMzeHh4X3BjaWVfY2hlY2tfbGluaygmY25zM3h4eF9wY2llW2ldKTsKIAkJY25zM3h4eF9wY2llX2h3X2luaXQoJmNuczN4eHhfcGNpZVtpXSk7Ci0JCXBjaV9jb21tb25faW5pdCgmY25zM3h4eF9wY2llW2ldLmh3X3BjaSk7CisJCXByaXZhdGVfZGF0YSA9ICZjbnMzeHh4X3BjaWVbaV07CisJCXBjaV9jb21tb25faW5pdCgmaHdfcGNpKTsKIAl9CiAKIAlwY2lfYXNzaWduX3VuYXNzaWduZWRfcmVzb3VyY2VzKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9maXJtd2FyZS5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3MvZmlybXdhcmUuYwppbmRleCA3NjZmNTdkLi40NzkxYTNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9maXJtd2FyZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL2Zpcm13YXJlLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9jcHV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaD4KICNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogCiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KQEAgLTEzNiw2ICsxMzcsNDMgQEAKIAkucmVzdW1lCQkJPSBJU19FTkFCTEVEKENPTkZJR19FWFlOT1NfQ1BVX1NVU1BFTkQpID8gZXh5bm9zX3Jlc3VtZSA6IE5VTEwsCiB9OwogCitzdGF0aWMgdm9pZCBleHlub3NfbDJfd3JpdGVfc2VjKHVuc2lnbmVkIGxvbmcgdmFsLCB1bnNpZ25lZCByZWcpCit7CisJc3RhdGljIGludCBsMmNhY2hlX2VuYWJsZWQ7CisKKwlzd2l0Y2ggKHJlZykgeworCWNhc2UgTDJYMF9DVFJMOgorCQlpZiAodmFsICYgTDJYMF9DVFJMX0VOKSB7CisJCQkvKgorCQkJICogQmVmb3JlIHRoZSBjYWNoZSBjYW4gYmUgZW5hYmxlZCwgZHVlIHRvIGZpcm13YXJlCisJCQkgKiBkZXNpZ24sIFNNQ19DTURfTDJYMElOVkFMTCBtdXN0IGJlIGNhbGxlZC4KKwkJCSAqLworCQkJaWYgKCFsMmNhY2hlX2VuYWJsZWQpIHsKKwkJCQlleHlub3Nfc21jKFNNQ19DTURfTDJYMElOVkFMTCwgMCwgMCwgMCk7CisJCQkJbDJjYWNoZV9lbmFibGVkID0gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWwyY2FjaGVfZW5hYmxlZCA9IDA7CisJCX0KKwkJZXh5bm9zX3NtYyhTTUNfQ01EX0wyWDBDVFJMLCB2YWwsIDAsIDApOworCQlicmVhazsKKworCWNhc2UgTDJYMF9ERUJVR19DVFJMOgorCQlleHlub3Nfc21jKFNNQ19DTURfTDJYMERFQlVHLCB2YWwsIDAsIDApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVdBUk5fT05DRSgxLCAiJXM6IGlnbm9yaW5nIHdyaXRlIHRvIHJlZyAweCV4XG4iLCBfX2Z1bmNfXywgcmVnKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGV4eW5vc19sMl9jb25maWd1cmUoY29uc3Qgc3RydWN0IGwyeDBfcmVncyAqcmVncykKK3sKKwlleHlub3Nfc21jKFNNQ19DTURfTDJYMFNFVFVQMSwgcmVncy0+dGFnX2xhdGVuY3ksIHJlZ3MtPmRhdGFfbGF0ZW5jeSwKKwkJICAgcmVncy0+cHJlZmV0Y2hfY3RybCk7CisJZXh5bm9zX3NtYyhTTUNfQ01EX0wyWDBTRVRVUDIsIHJlZ3MtPnB3cl9jdHJsLCByZWdzLT5hdXhfY3RybCwgMCk7Cit9CisKIHZvaWQgX19pbml0IGV4eW5vc19maXJtd2FyZV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpuZDsKQEAgLTE1NSw0ICsxOTMsMTYgQEAKIAlwcl9pbmZvKCJSdW5uaW5nIHVuZGVyIHNlY3VyZSBmaXJtd2FyZS5cbiIpOwogCiAJcmVnaXN0ZXJfZmlybXdhcmVfb3BzKCZleHlub3NfZmlybXdhcmVfb3BzKTsKKworCS8qCisJICogRXh5bm9zIDQgU29DcyAoYmFzZWQgb24gQ29ydGV4IEE5IGFuZCBlcXVpcHBlZCB3aXRoIEwyQy0zMTApLAorCSAqIHJ1bm5pbmcgdW5kZXIgc2VjdXJlIGZpcm13YXJlLCByZXF1aXJlIGNlcnRhaW4gcmVnaXN0ZXJzIG9mIEwyCisJICogY2FjaGUgY29udHJvbGxlciB0byBiZSB3cml0dGVuIGluIHNlY3VyZSBtb2RlLiBIZXJlIC53cml0ZV9zZWMKKwkgKiBjYWxsYmFjayBpcyBwcm92aWRlZCB0byBwZXJmb3JtIG5lY2Vzc2FyeSBTTUMgY2FsbHMuCisJICovCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX0NBQ0hFX0wyWDApICYmCisJICAgIHJlYWRfY3B1aWRfcGFydCgpID09IEFSTV9DUFVfUEFSVF9DT1JURVhfQTkpIHsKKwkJb3V0ZXJfY2FjaGUud3JpdGVfc2VjID0gZXh5bm9zX2wyX3dyaXRlX3NlYzsKKwkJb3V0ZXJfY2FjaGUuY29uZmlndXJlID0gZXh5bm9zX2wyX2NvbmZpZ3VyZTsKKwl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1leHlub3Mvc2xlZXAuUwppbmRleCBlM2MzNzMwLi4zMWQyNTgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWV4eW5vcy9zbGVlcC5TCisrKyBiL2FyY2gvYXJtL21hY2gtZXh5bm9zL3NsZWVwLlMKQEAgLTE2LDYgKzE2LDggQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CiAjaW5jbHVkZSAic21jLmgiCiAKICNkZWZpbmUgQ1BVX01BU0sJMHhmZjBmZmZmMApAQCAtNzQsNiArNzYsNDUgQEAKIAltb3YJcjAsICNTTUNfQ01EX0MxNVJFU1VNRQogCWRzYgogCXNtYwkjMAorI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCisJYWRyCXIwLCAxZgorCWxkcglyMiwgW3IwXQorCWFkZAlyMCwgcjIsIHIwCisKKwkvKiBDaGVjayB0aGF0IHRoZSBhZGRyZXNzIGhhcyBiZWVuIGluaXRpYWxpc2VkLiAqLworCWxkcglyMSwgW3IwLCAjTDJYMF9SX1BIWV9CQVNFXQorCXRlcQlyMSwgIzAKKwliZXEJc2tpcF9sMngwCisKKwkvKiBDaGVjayBpZiBjb250cm9sbGVyIGhhcyBiZWVuIGVuYWJsZWQuICovCisJbGRyCXIyLCBbcjEsICNMMlgwX0NUUkxdCisJdHN0CXIyLCAjMHgxCisJYm5lCXNraXBfbDJ4MAorCisJbGRyCXIxLCBbcjAsICNMMlgwX1JfVEFHX0xBVEVOQ1ldCisJbGRyCXIyLCBbcjAsICNMMlgwX1JfREFUQV9MQVRFTkNZXQorCWxkcglyMywgW3IwLCAjTDJYMF9SX1BSRUZFVENIX0NUUkxdCisJbW92CXIwLCAjU01DX0NNRF9MMlgwU0VUVVAxCisJc21jCSMwCisKKwkvKiBSZWxvYWQgc2F2ZWQgcmVncyBwb2ludGVyIGJlY2F1c2Ugc21jIGNvcnJ1cHRzIHJlZ2lzdGVycy4gKi8KKwlhZHIJcjAsIDFmCisJbGRyCXIyLCBbcjBdCisJYWRkCXIwLCByMiwgcjAKKworCWxkcglyMSwgW3IwLCAjTDJYMF9SX1BXUl9DVFJMXQorCWxkcglyMiwgW3IwLCAjTDJYMF9SX0FVWF9DVFJMXQorCW1vdglyMCwgI1NNQ19DTURfTDJYMFNFVFVQMgorCXNtYwkjMAorCisJbW92CXIwLCAjU01DX0NNRF9MMlgwSU5WQUxMCisJc21jCSMwCisKKwltb3YJcjEsICMxCisJbW92CXIwLCAjU01DX0NNRF9MMlgwQ1RSTAorCXNtYwkjMAorc2tpcF9sMngwOgorI2VuZGlmIC8qIENPTkZJR19DQUNIRV9MMlgwICovCiBza2lwX2NwMTU6CiAJYgljcHVfcmVzdW1lCiBFTkRQUk9DKGV4eW5vc19jcHVfcmVzdW1lX25zKQpAQCAtODMsMyArMTI0LDggQEAKIAkuZ2xvYmwgY3AxNV9zYXZlX3Bvd2VyCiBjcDE1X3NhdmVfcG93ZXI6CiAJLmxvbmcJMAlAIGNwMTUgcG93ZXIgY29udHJvbAorCisjaWZkZWYgQ09ORklHX0NBQ0hFX0wyWDAKKwkuYWxpZ24KKzE6CS5sb25nCWwyeDBfc2F2ZWRfcmVncyAtIC4KKyNlbmRpZiAvKiBDT05GSUdfQ0FDSEVfTDJYMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jCmluZGV4IGMxODZhMTcuLjI1NjVmMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9wY2lfdjMuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMKQEAgLTM1Niw3ICszNTYsNiBAQAogICoJIDc6MglyZWdpc3RlciBudW1iZXIKICAqCiAgKi8KLXN0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHYzX2xvY2spOwogCiAjdW5kZWYgVjNfTEJfQkFTRV9QUkVGRVRDSAogI2RlZmluZSBWM19MQl9CQVNFX1BSRUZFVENIIDAKQEAgLTQ1Nyw2NyArNDU2LDIxIEBACiBzdGF0aWMgaW50IHYzX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLAogCQkJICBpbnQgc2l6ZSwgdTMyICp2YWwpCiB7Ci0Jdm9pZCBfX2lvbWVtICphZGRyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHY7Ci0KLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnYzX2xvY2ssIGZsYWdzKTsKLQlhZGRyID0gdjNfb3Blbl9jb25maWdfd2luZG93KGJ1cywgZGV2Zm4sIHdoZXJlKTsKLQotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJdiA9IF9fcmF3X3JlYWRiKGFkZHIpOwotCQlicmVhazsKLQotCWNhc2UgMjoKLQkJdiA9IF9fcmF3X3JlYWR3KGFkZHIpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXYgPSBfX3Jhd19yZWFkbChhZGRyKTsKLQkJYnJlYWs7Ci0JfQotCisJaW50IHJldCA9IHBjaV9nZW5lcmljX2NvbmZpZ19yZWFkKGJ1cywgZGV2Zm4sIHdoZXJlLCBzaXplLCB2YWwpOwogCXYzX2Nsb3NlX2NvbmZpZ193aW5kb3coKTsKLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdjNfbG9jaywgZmxhZ3MpOwotCi0JKnZhbCA9IHY7Ci0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHYzX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKIAkJCSAgIGludCBzaXplLCB1MzIgdmFsKQogewotCXZvaWQgX19pb21lbSAqYWRkcjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZ2M19sb2NrLCBmbGFncyk7Ci0JYWRkciA9IHYzX29wZW5fY29uZmlnX3dpbmRvdyhidXMsIGRldmZuLCB3aGVyZSk7Ci0KLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCV9fcmF3X3dyaXRlYigodTgpdmFsLCBhZGRyKTsKLQkJX19yYXdfcmVhZGIoYWRkcik7Ci0JCWJyZWFrOwotCi0JY2FzZSAyOgotCQlfX3Jhd193cml0ZXcoKHUxNil2YWwsIGFkZHIpOwotCQlfX3Jhd19yZWFkdyhhZGRyKTsKLQkJYnJlYWs7Ci0KLQljYXNlIDQ6Ci0JCV9fcmF3X3dyaXRlbCh2YWwsIGFkZHIpOwotCQlfX3Jhd19yZWFkbChhZGRyKTsKLQkJYnJlYWs7Ci0JfQotCisJaW50IHJldCA9IHBjaV9nZW5lcmljX2NvbmZpZ193cml0ZShidXMsIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsKTsKIAl2M19jbG9zZV9jb25maWdfd2luZG93KCk7Ci0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnYzX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfb3BzIHBjaV92M19vcHMgPSB7CisJLm1hcF9idXMgPSB2M19vcGVuX2NvbmZpZ193aW5kb3csCiAJLnJlYWQJPSB2M19yZWFkX2NvbmZpZywKIAkud3JpdGUJPSB2M193cml0ZV9jb25maWcsCiB9OwpAQCAtNjU4LDcgKzYxMSw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBwY2lfdjNfcHJlaW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHRlbXA7CiAJcGh5c19hZGRyX3QgaW9fYWRkcmVzcyA9IHBjaV9waW9fdG9fYWRkcmVzcyhpb19tZW0uc3RhcnQpOwogCkBAIC02NzIsOCArNjI0LDYgQEAKIAlob29rX2ZhdWx0X2NvZGUoOCwgdjNfcGNpX2ZhdWx0LCBTSUdCVVMsIDAsICJleHRlcm5hbCBhYm9ydCBvbiBub24tbGluZWZldGNoIik7CiAJaG9va19mYXVsdF9jb2RlKDEwLCB2M19wY2lfZmF1bHQsIFNJR0JVUywgMCwgImV4dGVybmFsIGFib3J0IG9uIG5vbi1saW5lZmV0Y2giKTsKIAotCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdjNfbG9jaywgZmxhZ3MpOwotCiAJLyoKIAkgKiBVbmxvY2sgVjMgcmVnaXN0ZXJzLCBidXQgb25seSBpZiB0aGV5IHdlcmUgcHJldmlvdXNseSBsb2NrZWQuCiAJICovCkBAIC03MzYsOCArNjg2LDYgQEAKIAl2M193cml0ZXcoVjNfTEJfQ0ZHLCB2M19yZWFkdyhWM19MQl9DRkcpIHwgKDEgPDwgMTApKTsKIAl2M193cml0ZWIoVjNfTEJfSU1BU0ssIDB4MjgpOwogCV9fcmF3X3dyaXRlbCgzLCBhcF9zeXNjb25fYmFzZSArIElOVEVHUkFUT1JfU0NfUENJRU5BQkxFX09GRlNFVCk7Ci0KLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdjNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNpX3YzX3Bvc3Rpbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtzODY5NS9wY2kuYyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L3BjaS5jCmluZGV4IGJiMTgxOTMuLmMxYmM0YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta3M4Njk1L3BjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gta3M4Njk1L3BjaS5jCkBAIC0zOCw4ICszOCw2IEBACiAKIAogc3RhdGljIGludCBwY2lfZGJnOwotc3RhdGljIGludCBwY2lfY2ZnX2RiZzsKLQogCiBzdGF0aWMgdm9pZCBrczg2OTVfcGNpX3NldHVwY29uZmlnKHVuc2lnbmVkIGludCBidXNfbnIsIHVuc2lnbmVkIGludCBkZXZmbiwgdW5zaWduZWQgaW50IHdoZXJlKQogewpAQCAtNTksNzUgKzU3LDExIEBACiAJfQogfQogCi0KLS8qCi0gKiBUaGUgS1M4Njk1IGRhdGFzaGVldCBwcm9oaWJpdHMgYW55dGhpbmcgb3RoZXIgdGhhbiAzMmJpdCBhY2Nlc3NlcwotICogdG8gdGhlIElPIHJlZ2lzdGVycywgc28gYWxsIG91ciBjb25maWd1cmF0aW9uIG11c3QgYmUgZG9uZSB3aXRoCi0gKiAzMmJpdCBvcGVyYXRpb25zLCBhbmQgdGhlIGNvcnJlY3QgYml0IG1hc2tpbmcgYW5kIHNoaWZ0aW5nLgotICovCi0KLXN0YXRpYyBpbnQga3M4Njk1X3BjaV9yZWFkY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsCi0JCQl1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsdWUpCitzdGF0aWMgdm9pZCBfX2lvbWVtICprczg2OTVfcGNpX21hcF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCQlpbnQgd2hlcmUpCiB7CiAJa3M4Njk1X3BjaV9zZXR1cGNvbmZpZyhidXMtPm51bWJlciwgZGV2Zm4sIHdoZXJlKTsKLQotCSp2YWx1ZSA9IF9fcmF3X3JlYWRsKEtTODY5NV9QQ0lfVkEgKyAgS1M4Njk1X1BCQ0QpOwotCi0Jc3dpdGNoIChzaXplKSB7Ci0JCWNhc2UgNDoKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCQkqdmFsdWUgPSAqdmFsdWUgPj4gKCh3aGVyZSAmIDIpICogOCk7Ci0JCQkqdmFsdWUgJj0gMHhmZmZmOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCSp2YWx1ZSA9ICp2YWx1ZSA+PiAoKHdoZXJlICYgMykgKiA4KTsKLQkJCSp2YWx1ZSAmPSAweGZmOwotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKHBjaV9jZmdfZGJnKSB7Ci0JCXByaW50aygicmVhZDogJWQsJTA4eCwlMDJ4LCVkOiAlMDh4ICglMDh4KVxuIiwKLQkJCWJ1cy0+bnVtYmVyLCBkZXZmbiwgd2hlcmUsIHNpemUsICp2YWx1ZSwKLQkJCV9fcmF3X3JlYWRsKEtTODY5NV9QQ0lfVkEgKyAgS1M4Njk1X1BCQ0QpKTsKLQl9Ci0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IGtzODY5NV9wY2lfd3JpdGVjb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywKLQkJCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbHVlKQotewotCXVuc2lnbmVkIGxvbmcgdG1wOwotCi0JaWYgKHBjaV9jZmdfZGJnKSB7Ci0JCXByaW50aygid3JpdGU6ICVkLCUwOHgsJTAyeCwlZDogJTA4eFxuIiwKLQkJCWJ1cy0+bnVtYmVyLCBkZXZmbiwgd2hlcmUsIHNpemUsIHZhbHVlKTsKLQl9Ci0KLQlrczg2OTVfcGNpX3NldHVwY29uZmlnKGJ1cy0+bnVtYmVyLCBkZXZmbiwgd2hlcmUpOwotCi0Jc3dpdGNoIChzaXplKSB7Ci0JCWNhc2UgNDoKLQkJCV9fcmF3X3dyaXRlbCh2YWx1ZSwgS1M4Njk1X1BDSV9WQSArICBLUzg2OTVfUEJDRCk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJdG1wID0gX19yYXdfcmVhZGwoS1M4Njk1X1BDSV9WQSArICBLUzg2OTVfUEJDRCk7Ci0JCQl0bXAgJj0gfigweGZmZmYgPDwgKCh3aGVyZSAmIDIpICogOCkpOwotCQkJdG1wIHw9IHZhbHVlIDw8ICgod2hlcmUgJiAyKSAqIDgpOwotCi0JCQlfX3Jhd193cml0ZWwodG1wLCBLUzg2OTVfUENJX1ZBICsgIEtTODY5NV9QQkNEKTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQl0bXAgPSBfX3Jhd19yZWFkbChLUzg2OTVfUENJX1ZBICsgIEtTODY5NV9QQkNEKTsKLQkJCXRtcCAmPSB+KDB4ZmYgPDwgKCh3aGVyZSAmIDMpICogOCkpOwotCQkJdG1wIHw9IHZhbHVlIDw8ICgod2hlcmUgJiAzKSAqIDgpOwotCi0JCQlfX3Jhd193cml0ZWwodG1wLCBLUzg2OTVfUENJX1ZBICsgIEtTODY5NV9QQkNEKTsKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CisJcmV0dXJuIEtTODY5NV9QQ0lfVkEgKyAgS1M4Njk1X1BCQ0Q7CiB9CiAKIHN0YXRpYyB2b2lkIGtzODY5NV9sb2NhbF93cml0ZWNvbmZpZyhpbnQgd2hlcmUsIHUzMiB2YWx1ZSkKQEAgLTEzNyw4ICs3MSw5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX29wcyBrczg2OTVfcGNpX29wcyA9IHsKLQkucmVhZAk9IGtzODY5NV9wY2lfcmVhZGNvbmZpZywKLQkud3JpdGUJPSBrczg2OTVfcGNpX3dyaXRlY29uZmlnLAorCS5tYXBfYnVzID0ga3M4Njk1X3BjaV9tYXBfYnVzLAorCS5yZWFkCT0gcGNpX2dlbmVyaWNfY29uZmlnX3JlYWQzMiwKKwkud3JpdGUJPSBwY2lfZ2VuZXJpY19jb25maWdfd3JpdGUzMiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNpX21lbSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMgYi9hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jCmluZGV4IGNhYTIxZTkuLmNjZWY4ODAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYwpAQCAtMTkwLDYgKzE5MCwxMyBAQAogCWFyY2hfaW9yZW1hcF9jYWxsZXIgPSBhcm1hZGFfcGNpZV93YV9pb3JlbWFwX2NhbGxlcjsKIAogCS8qCisJICogV2Ugc2hvdWxkIHN3aXRjaCB0aGUgUEwzMTAgdG8gSS9PIGNvaGVyZW5jeSBtb2RlIG9ubHkgaWYKKwkgKiBJL08gY29oZXJlbmN5IGlzIGFjdHVhbGx5IGVuYWJsZWQuCisJICovCisJaWYgKCFjb2hlcmVuY3lfYXZhaWxhYmxlKCkpCisJCXJldHVybjsKKworCS8qCiAJICogQWRkIHRoZSBQTDMxMCBwcm9wZXJ0eSAiYXJtLGlvLWNvaGVyZW50Ii4gVGhpcyBtYWtlcyBzdXJlIHRoZQogCSAqIG91dGVyIHN5bmMgb3BlcmF0aW9uIGlzIG5vdCB1c2VkLCB3aGljaCBhbGxvd3MgdG8KIAkgKiB3b3JrYXJvdW5kIHRoZSBzeXN0ZW0gZXJyYXR1bSB0aGF0IGNhdXNlcyBkZWFkbG9ja3Mgd2hlbgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVjMWEyNmMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKiBhcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCi0gKgotICogRGVidWdnaW5nIG1hY3JvIGluY2x1ZGUgaGVhZGVyCi0gKgotICogIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZwotICogIE1vdmVkIGZyb20gbGludXgvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYnkgQmVuIERvb2tzCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0qLwotCi0jaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgotCi0jaW5jbHVkZSAic2VyaWFsLmgiCi0KLQkJLnB1c2hzZWN0aW9uIC5kYXRhCi1vbWFwX3VhcnRfcGh5czoJLndvcmQJMHgwCi1vbWFwX3VhcnRfdmlydDoJLndvcmQJMHgwCi0JCS5wb3BzZWN0aW9uCi0KLQkJLyoKLQkJICogTm90ZSB0aGF0IHRoaXMgY29kZSB3b24ndCB3b3JrIGlmIHRoZSBib290bG9hZGVyIHBhc3NlcwotCQkgKiBhIHdyb25nIG1hY2hpbmUgSUQgbnVtYmVyIGluIHIxLiBUbyBkZWJ1ZywganVzdCBoYXJkY29kZQotCQkgKiB0aGUgZGVzaXJlZCBVQVJUIHBoeXMgYW5kIHZpcnQgYWRkcmVzc2VzIHRlbXBvcmFyaWx5IGludG8KLQkJICogdGhlIG9tYXBfdWFydF9waHlzIGFuZCBvbWFwX3VhcnRfdmlydCBhYm92ZS4KLQkJICovCi0JCS5tYWNybwlhZGRydWFydCwgcnAsIHJ2LCB0bXAKLQotCQkvKiBVc2Ugb21hcF91YXJ0X3BoeXMvdmlydCBpZiBhbHJlYWR5IGNvbmZpZ3VyZWQgKi8KLTk6CQlhZHIJXHJwLCA5OWYJCUAgZ2V0IGVmZmVjdGl2ZSBhZGRyIG9mIDk5ZgotCQlsZHIJXHJ2LCBbXHJwXQkJQCBnZXQgYWJzb2x1dGUgYWRkciBvZiA5OWYKLQkJc3ViCVxydiwgXHJ2LCBccnAJCUAgb2Zmc2V0IGJldHdlZW4gdGhlIHR3bwotCQlsZHIJXHJwLCBbXHJwLCAjNF0JCUAgYWJzIGFkZHIgb2Ygb21hcF91YXJ0X3BoeXMKLQkJc3ViCVx0bXAsIFxycCwgXHJ2CQlAIG1ha2UgaXQgZWZmZWN0aXZlCi0JCWxkcglccnAsIFtcdG1wLCAjMF0JCUAgb21hcF91YXJ0X3BoeXMKLQkJbGRyCVxydiwgW1x0bXAsICM0XQkJQCBvbWFwX3VhcnRfdmlydAotCQljbXAJXHJwLCAjMAkJCUAgaXMgcG9ydCBjb25maWd1cmVkPwotCQljbXBuZQlccnYsICMwCi0JCWJuZQkxMDBmCQkJQCBhbHJlYWR5IGNvbmZpZ3VyZWQKLQotCQkvKiBDaGVjayB0aGUgZGVidWcgVUFSVCBjb25maWd1cmF0aW9uIHNldCBpbiB1bmNvbXByZXNzLmggKi8KLQkJYW5kCVxycCwgcGMsICMweGZmMDAwMDAwCi0JCWxkcglccnYsID1PTUFQX1VBUlRfSU5GT19PRlMKLQkJbGRyCVxycCwgW1xycCwgXHJ2XQotCi0JCS8qIFNlbGVjdCB0aGUgVUFSVCB0byB1c2UgYmFzZWQgb24gdGhlIFVBUlQxIHNjcmF0Y2hwYWQgdmFsdWUgKi8KLTEwOgkJY21wCVxycCwgIzAJCQlAIG5vIHBvcnQgY29uZmlndXJlZD8KLQkJYmVxCTExZgkJCUAgaWYgbm9uZSwgdHJ5IHRvIHVzZSBVQVJUMQotCQljbXAJXHJwLCAjT01BUDFVQVJUMQotCQliZXEJMTFmCQkJQCBjb25maWd1cmUgT01BUDFVQVJUMQotCQljbXAJXHJwLCAjT01BUDFVQVJUMgotCQliZXEJMTJmCQkJQCBjb25maWd1cmUgT01BUDFVQVJUMgotCQljbXAJXHJwLCAjT01BUDFVQVJUMwotCQliZXEJMTNmCQkJQCBjb25maWd1cmUgT01BUDJVQVJUMwotCi0JCS8qIENvbmZpZ3VyZSB0aGUgVUFSVCBvZmZzZXQgZnJvbSB0aGUgcGh5cy92aXJ0IGJhc2UgKi8KLTExOgkJbW92CVxycCwgIzB4MDBmYjAwMDAJQCBPTUFQMVVBUlQxCi0JCWIJOThmCi0xMjoJCW1vdglccnAsICMweDAwZmIwMDAwCUAgT01BUDFVQVJUMQotCQlvcnIJXHJwLCBccnAsICMweDAwMDAwODAwCUAgT01BUDFVQVJUMgotCQliCTk4ZgotMTM6CQltb3YJXHJwLCAjMHgwMGZiMDAwMAlAIE9NQVAxVUFSVDEKLQkJb3JyCVxycCwgXHJwLCAjMHgwMDAwMDgwMAlAIE9NQVAxVUFSVDIKLQkJb3JyCVxycCwgXHJwLCAjMHgwMDAwOTAwMAlAIE9NQVAxVUFSVDMKLQotCQkvKiBTdG9yZSBib3RoIHBoeXMgYW5kIHZpcnQgYWRkcmVzcyBmb3IgdGhlIHVhcnQgKi8KLTk4OgkJYWRkCVxycCwgXHJwLCAjMHhmZjAwMDAwMAlAIHBoeXMgYmFzZQotCQlzdHIJXHJwLCBbXHRtcCwgIzBdCQlAIG9tYXBfdWFydF9waHlzCi0JCXN1YglccnAsIFxycCwgIzB4ZmYwMDAwMDAJQCBwaHlzIGJhc2UKLQkJYWRkCVxycCwgXHJwLCAjMHhmZTAwMDAwMAlAIHZpcnQgYmFzZQotCQlzdHIJXHJwLCBbXHRtcCwgIzRdCQlAIG9tYXBfdWFydF92aXJ0Ci0JCWIJOWIKLQotCQkuYWxpZ24KLTk5OgkJLndvcmQJLgotCQkud29yZAlvbWFwX3VhcnRfcGh5cwotCQkubHRvcmcKLQotMTAwOgotCQkuZW5kbQotCi0JCS5tYWNybwlzZW5kdWFydCxyZCxyeAotCQlzdHJiCVxyZCwgW1xyeF0KLQkJLmVuZG0KLQotCQkubWFjcm8JYnVzeXVhcnQscmQscngKLTEwMDE6CQlsZHJiCVxyZCwgW1xyeCwgIyhVQVJUX0xTUiA8PCBPTUFQX1BPUlRfU0hJRlQpXQotCQlhbmQJXHJkLCBccmQsICMoVUFSVF9MU1JfVEVNVCB8IFVBUlRfTFNSX1RIUkUpCi0JCXRlcQlccmQsICMoVUFSVF9MU1JfVEVNVCB8IFVBUlRfTFNSX1RIUkUpCi0JCWJlcQkxMDAyZgotCQlsZHJiCVxyZCwgW1xyeCwgIyhVQVJUX0xTUiA8PCBPTUFQN1hYX1BPUlRfU0hJRlQpXQotCQlhbmQJXHJkLCBccmQsICMoVUFSVF9MU1JfVEVNVCB8IFVBUlRfTFNSX1RIUkUpCi0JCXRlcQlccmQsICMoVUFSVF9MU1JfVEVNVCB8IFVBUlRfTFNSX1RIUkUpCi0JCWJuZQkxMDAxYgotMTAwMjoKLQkJLmVuZG0KLQotCQkubWFjcm8Jd2FpdHVhcnQscmQscngKLQkJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKaW5kZXggYjYxYzA0OS4uNDJiN2Y0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1nZW5lcmljLmMKQEAgLTE4OSw2ICsxODksOSBAQAogfTsKIAogRFRfTUFDSElORV9TVEFSVChPTUFQNF9EVCwgIkdlbmVyaWMgT01BUDQgKEZsYXR0ZW5lZCBEZXZpY2UgVHJlZSkiKQorCS5sMmNfYXV4X3ZhbAk9IE9NQVBfTDJDX0FVWF9DVFJMLAorCS5sMmNfYXV4X21hc2sJPSAweGNmOWZmZmZmLAorCS5sMmNfd3JpdGVfc2VjCT0gb21hcDRfbDJjMzEwX3dyaXRlX3NlYywKIAkucmVzZXJ2ZQk9IG9tYXBfcmVzZXJ2ZSwKIAkuc21wCQk9IHNtcF9vcHMob21hcDRfc21wX29wcyksCiAJLm1hcF9pbwkJPSBvbWFwNF9tYXBfaW8sCkBAIC0yMzIsNiArMjM1LDkgQEAKIH07CiAKIERUX01BQ0hJTkVfU1RBUlQoQU00M19EVCwgIkdlbmVyaWMgQU00MyAoRmxhdHRlbmVkIERldmljZSBUcmVlKSIpCisJLmwyY19hdXhfdmFsCT0gT01BUF9MMkNfQVVYX0NUUkwsCisJLmwyY19hdXhfbWFzawk9IDB4Y2Y5ZmZmZmYsCisJLmwyY193cml0ZV9zZWMJPSBvbWFwNF9sMmMzMTBfd3JpdGVfc2VjLAogCS5tYXBfaW8JCT0gYW0zM3h4X21hcF9pbywKIAkuaW5pdF9lYXJseQk9IGFtNDN4eF9pbml0X2Vhcmx5LAogCS5pbml0X2xhdGUJPSBhbTQzeHhfaW5pdF9sYXRlLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKaW5kZXggN2YxNzA4Ny4uOTY5ZTEwMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCkBAIC0yNTQsMTIgKzI1NCwxNCBAQAogCSAqIFdlIGhhdmUgVEkgd2wxMjUxIGF0dGFjaGVkIHRvIE1NQzMuIFBhc3MgdGhpcyBpbmZvcm1hdGlvbiB0bwogCSAqIFNESU8gY29yZSBiZWNhdXNlIGl0IGNhbid0IGJlIHByb2JlZCBieSBub3JtYWwgbWV0aG9kcy4KIAkgKi8KLQljYXJkLT5xdWlya3MgfD0gTU1DX1FVSVJLX05PTlNURF9TRElPOwotCWNhcmQtPmNjY3Iud2lkZV9idXMgPSAxOwotCWNhcmQtPmNpcy52ZW5kb3IgPSAweDEwNGM7Ci0JY2FyZC0+Y2lzLmRldmljZSA9IDB4OTA2NjsKLQljYXJkLT5jaXMuYmxrc2l6ZSA9IDUxMjsKLQljYXJkLT5jaXMubWF4X2R0ciA9IDIwMDAwMDAwOworCWlmIChjYXJkLT50eXBlID09IE1NQ19UWVBFX1NESU8gfHwgY2FyZC0+dHlwZSA9PSBNTUNfVFlQRV9TRF9DT01CTykgeworCQljYXJkLT5xdWlya3MgfD0gTU1DX1FVSVJLX05PTlNURF9TRElPOworCQljYXJkLT5jY2NyLndpZGVfYnVzID0gMTsKKwkJY2FyZC0+Y2lzLnZlbmRvciA9IDB4MTA0YzsKKwkJY2FyZC0+Y2lzLmRldmljZSA9IDB4OTA2NjsKKwkJY2FyZC0+Y2lzLmJsa3NpemUgPSA1MTI7CisJCWNhcmQtPmNpcy5tYXhfZHRyID0gMjAwMDAwMDA7CisJfQogfQogCiBzdGF0aWMgc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gb21hcDNwYW5kb3JhX21tY1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29tbW9uLmgKaW5kZXggNjRlNDRkNi4uMzkzM2I4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbW1vbi5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9pcnEtb21hcC1pbnRjLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oPgogCiAjaW5jbHVkZSAiaTJjLmgiCiAjaW5jbHVkZSAic2VyaWFsLmgiCkBAIC05NCwxMSArOTUsMTggQEAKIGV4dGVybiB2b2lkIG9tYXA0X2xvY2FsX3RpbWVyX2luaXQodm9pZCk7CiAjaWZkZWYgQ09ORklHX0NBQ0hFX0wyWDAKIGludCBvbWFwX2wyX2NhY2hlX2luaXQodm9pZCk7CisjZGVmaW5lIE9NQVBfTDJDX0FVWF9DVFJMCShMMkNfQVVYX0NUUkxfU0hBUkVEX09WRVJSSURFIHwgXAorCQkJCSBMMzEwX0FVWF9DVFJMX0RBVEFfUFJFRkVUQ0ggfCBcCisJCQkJIEwzMTBfQVVYX0NUUkxfSU5TVFJfUFJFRkVUQ0gpCit2b2lkIG9tYXA0X2wyYzMxMF93cml0ZV9zZWModW5zaWduZWQgbG9uZyB2YWwsIHVuc2lnbmVkIHJlZyk7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgb21hcF9sMl9jYWNoZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIDA7CiB9CisKKyNkZWZpbmUgT01BUF9MMkNfQVVYX0NUUkwJMAorI2RlZmluZSBvbWFwNF9sMmMzMTBfd3JpdGVfc2VjCU5VTEwKICNlbmRpZgogZXh0ZXJuIHZvaWQgb21hcDVfcmVhbHRpbWVfdGltZXJfaW5pdCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNC1jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcDQtY29tbW9uLmMKaW5kZXggY2MzMGU0OS4uMjQxOGJkZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwNC1jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXA0LWNvbW1vbi5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAlyZXR1cm4gbDJjYWNoZV9iYXNlOwogfQogCi1zdGF0aWMgdm9pZCBvbWFwNF9sMmMzMTBfd3JpdGVfc2VjKHVuc2lnbmVkIGxvbmcgdmFsLCB1bnNpZ25lZCByZWcpCit2b2lkIG9tYXA0X2wyYzMxMF93cml0ZV9zZWModW5zaWduZWQgbG9uZyB2YWwsIHVuc2lnbmVkIHJlZykKIHsKIAl1bnNpZ25lZCBzbWNfb3A7CiAKQEAgLTIwMSwyNCArMjAxLDEwIEBACiAKIGludCBfX2luaXQgb21hcF9sMl9jYWNoZV9pbml0KHZvaWQpCiB7Ci0JdTMyIGF1eF9jdHJsOwotCiAJLyogU3RhdGljIG1hcHBpbmcsIG5ldmVyIHJlbGVhc2VkICovCiAJbDJjYWNoZV9iYXNlID0gaW9yZW1hcChPTUFQNDRYWF9MMkNBQ0hFX0JBU0UsIFNaXzRLKTsKIAlpZiAoV0FSTl9PTighbDJjYWNoZV9iYXNlKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiAxNi13YXkgYXNzb2NpYXRpdml0eSwgcGFyaXR5IGRpc2FibGVkLCB3YXkgc2l6ZSAtIDY0S0IgKGVzMi4wICspICovCi0JYXV4X2N0cmwgPSBMMkNfQVVYX0NUUkxfU0hBUkVEX09WRVJSSURFIHwKLQkJICAgTDMxMF9BVVhfQ1RSTF9EQVRBX1BSRUZFVENIIHwKLQkJICAgTDMxMF9BVVhfQ1RSTF9JTlNUUl9QUkVGRVRDSDsKLQotCW91dGVyX2NhY2hlLndyaXRlX3NlYyA9IG9tYXA0X2wyYzMxMF93cml0ZV9zZWM7Ci0JaWYgKG9mX2hhdmVfcG9wdWxhdGVkX2R0KCkpCi0JCWwyeDBfb2ZfaW5pdChhdXhfY3RybCwgMHhjZjlmZmZmZik7Ci0JZWxzZQotCQlsMngwX2luaXQobDJjYWNoZV9iYXNlLCBhdXhfY3RybCwgMHhjZjlmZmZmZik7Ci0KIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1xY29tL3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtcWNvbS9wbGF0c21wLmMKaW5kZXggZDY5MDg1Ni4uMDljZmZlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1xY29tL3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXFjb20vcGxhdHNtcC5jCkBAIC00NCw3ICs0NCw3IEBACiAjZGVmaW5lIEFQQ1NfU0FXMl9WQ1RMCQkweDE0CiAjZGVmaW5lIEFQQ1NfU0FXMl8yX1ZDVEwJMHgxYwogCi1leHRlcm4gdm9pZCBzZWNvbmRhcnlfc3RhcnR1cCh2b2lkKTsKK2V4dGVybiB2b2lkIHNlY29uZGFyeV9zdGFydHVwX2FybSh2b2lkKTsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhib290X2xvY2spOwogCkBAIC0zMzcsNyArMzM3LDcgQEAKIAkJZmxhZ3MgfD0gY29sZF9ib290X2ZsYWdzW21hcF07CiAJfQogCi0JaWYgKHNjbV9zZXRfYm9vdF9hZGRyKHZpcnRfdG9fcGh5cyhzZWNvbmRhcnlfc3RhcnR1cCksIGZsYWdzKSkgeworCWlmIChzY21fc2V0X2Jvb3RfYWRkcih2aXJ0X3RvX3BoeXMoc2Vjb25kYXJ5X3N0YXJ0dXBfYXJtKSwgZmxhZ3MpKSB7CiAJCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGNwdSkgewogCQkJaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCmluZGV4IGYxMTE0ZDEuLjYxZmY5MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteSA6PSBjbG9jay5vIGdlbmVyaWMubyBpcnEubyB0aW1lLm8gI25taS1vb3BzZXIubworb2JqLXkgOj0gY2xvY2subyBnZW5lcmljLm8gaXJxLm8gI25taS1vb3BzZXIubwogCiAjIFNwZWNpZmljIGJvYXJkIHN1cHBvcnQKIG9iai0kKENPTkZJR19TQTExMDBfQVNTQUJFVCkJCSs9IGFzc2FiZXQubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvYXNzYWJldC5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvYXNzYWJldC5jCmluZGV4IDdkZDg5NGUuLmQyOGVjYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2Fzc2FiZXQuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9hc3NhYmV0LmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lyZGEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2lyZGEtc2ExMXgwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9hc3NhYmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9tZmQtbWNwLXNhMTF4MC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMKaW5kZXggMDNjNzVhOC4uY2JmNTNiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jCkBAIC0xMTksNiArMTE5LDE3IEBACiAKIHN0YXRpYyBERUZJTkVfQ0xLKGNwdSwgJmNsa19jcHVfb3BzKTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrXzM2ODY0X2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gMzY4NjQwMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGtvcHMgY2xrXzM2ODY0X29wcyA9IHsKKwkuZ2V0X3JhdGUJPSBjbGtfMzY4NjRfZ2V0X3JhdGUsCit9OworCitzdGF0aWMgREVGSU5FX0NMSygzNjg2NCwgJmNsa18zNjg2NF9vcHMpOworCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgc2ExMXh4X2Nsa3JlZ3NbXSA9IHsKIAlDTEtERVZfSU5JVCgic2ExMTExLjAiLCBOVUxMLCAmY2xrX2dwaW8yNyksCiAJQ0xLREVWX0lOSVQoInNhMTEwMC1ydGMiLCBOVUxMLCBOVUxMKSwKQEAgLTEyNiw2ICsxMzcsNyBAQAogCUNMS0RFVl9JTklUKCJzYTExeDAtcGNtY2lhIiwgTlVMTCwgJmNsa19jcHUpLAogCS8qIHNhMTExMSBuYW1lcyBkZXZpY2VzIHVzaW5nIGludGVybmFsIG9mZnNldHMsIFBDTUNJQSBpcyBhdCAweDE4MDAgKi8KIAlDTEtERVZfSU5JVCgiMTgwMCIsIE5VTEwsICZjbGtfY3B1KSwKKwlDTEtERVZfSU5JVChOVUxMLCAiT1NUSU1FUjAiLCAmY2xrXzM2ODY0KSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNhMTF4eF9jbGtfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY29sbGllLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwppbmRleCBiOTBjN2Q4Li4zY2MyYjcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwpAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lyZGEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2lyZGEtc2ExMXgwLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc2Nvb3AuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9zaGFycHNsX3BhcmFtLmg+CkBAIC0zNzEsOCArMzcxLDcgQEAKIAkJUFBDX0xERDYgfCBQUENfTERENyB8IFBQQ19MX1BDTEsgfCBQUENfTF9MQ0xLIHwgUFBDX0xfRkNMSyB8IFBQQ19MX0JJQVMgfAogCQlQUENfVFhEMSB8IFBQQ19UWEQyIHwgUFBDX1RYRDMgfCBQUENfVFhENCB8IFBQQ19TQ0xLIHwgUFBDX1NGUk07CiAKLQlQV0VSID0gX0NPTExJRV9HUElPX0FDX0lOIHwgX0NPTExJRV9HUElPX0NPIHwgX0NPTExJRV9HUElPX09OX0tFWSB8Ci0JCV9DT0xMSUVfR1BJT19XQUtFVVAgfCBfQ09MTElFX0dQSU9fblJFTU9DT05fSU5UIHwgUFdFUl9SVEM7CisJUFdFUiA9IDA7CiAKIAlQR1NSID0gX0NPTExJRV9HUElPX25SRU1PQ09OX09OOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMKaW5kZXggZDRlYTE0Mi4uNDBlMGQ4NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgPGNsb2Nrc291cmNlL3B4YS5oPgogCiB1bnNpZ25lZCBpbnQgcmVzZXRfc3RhdHVzOwogRVhQT1JUX1NZTUJPTChyZXNldF9zdGF0dXMpOwpAQCAtMzY5LDYgKzM3MCwxMSBAQAogCWlvdGFibGVfaW5pdChzdGFuZGFyZF9pb19kZXNjLCBBUlJBWV9TSVpFKHN0YW5kYXJkX2lvX2Rlc2MpKTsKIH0KIAordm9pZCBfX2luaXQgc2ExMTAwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlweGFfdGltZXJfbm9kdF9pbml0KElSUV9PU1QwLCBpb19wMnYoMHg5MDAwMDAwMCksIDM2ODY0MDApOworfQorCiAvKgogICogRGlzYWJsZSB0aGUgbWVtb3J5IGJ1cyByZXF1ZXN0L2dyYW50IHNpZ25hbHMgb24gdGhlIFNBMTExMCB0bwogICogZW5zdXJlIHRoYXQgd2UgZG9uJ3QgcmVjZWl2ZSBzcHVyaW91cyBtZW1vcnkgcmVxdWVzdHMuICBXZSBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2gzMTAwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9oMzEwMC5jCmluZGV4IDNjNDMyMTkuLmM2YjQxMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2gzMTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaDMxMDAuYwpAQCAtMTgsNyArMTgsNyBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJkYS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaXJkYS1zYTExeDAuaD4KIAogI2luY2x1ZGUgPG1hY2gvaDN4eHguaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2gzNjAwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9oMzYwMC5jCmluZGV4IDViZTU0YzIuLjExODMzOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2gzNjAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaDM2MDAuYwpAQCAtMTgsNyArMTgsNyBAQAogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJkYS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RhdGEvaXJkYS1zYTExeDAuaD4KIAogI2luY2x1ZGUgPG1hY2gvaDN4eHguaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IGRlMDk4MzQuLjczNGUzMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtOCwxNyArOCwxNyBAQAogICogMjAwMS8xMS8xNAlSTUsJQ2xlYW5lZCB1cCBhbmQgc3RhbmRhcmRpc2VkIGEgbG90IG9mIHRoZSBJUlFzLgogICovCiAKLSNkZWZpbmUJSVJRX0dQSU8wCQkxCi0jZGVmaW5lCUlSUV9HUElPMQkJMgotI2RlZmluZQlJUlFfR1BJTzIJCTMKLSNkZWZpbmUJSVJRX0dQSU8zCQk0Ci0jZGVmaW5lCUlSUV9HUElPNAkJNQotI2RlZmluZQlJUlFfR1BJTzUJCTYKLSNkZWZpbmUJSVJRX0dQSU82CQk3Ci0jZGVmaW5lCUlSUV9HUElPNwkJOAotI2RlZmluZQlJUlFfR1BJTzgJCTkKLSNkZWZpbmUJSVJRX0dQSU85CQkxMAotI2RlZmluZQlJUlFfR1BJTzEwCQkxMQorI2RlZmluZQlJUlFfR1BJTzBfU0MJCTEKKyNkZWZpbmUJSVJRX0dQSU8xX1NDCQkyCisjZGVmaW5lCUlSUV9HUElPMl9TQwkJMworI2RlZmluZQlJUlFfR1BJTzNfU0MJCTQKKyNkZWZpbmUJSVJRX0dQSU80X1NDCQk1CisjZGVmaW5lCUlSUV9HUElPNV9TQwkJNgorI2RlZmluZQlJUlFfR1BJTzZfU0MJCTcKKyNkZWZpbmUJSVJRX0dQSU83X1NDCQk4CisjZGVmaW5lCUlSUV9HUElPOF9TQwkJOQorI2RlZmluZQlJUlFfR1BJTzlfU0MJCTEwCisjZGVmaW5lCUlSUV9HUElPMTBfU0MJCTExCiAjZGVmaW5lCUlSUV9HUElPMTFfMjcJCTEyCiAjZGVmaW5lCUlSUV9MQ0QJCQkxMwkvKiBMQ0QgY29udHJvbGxlciAgICAgICAgICAgKi8KICNkZWZpbmUJSVJRX1NlcjBVREMJCTE0CS8qIFNlci4gcG9ydCAwIFVEQyAgICAgICAgICAqLwpAQCAtNDEsMzIgKzQxLDQzIEBACiAjZGVmaW5lCUlSUV9SVEMxSHoJCTMxCS8qIFJUQyAxIEh6IGNsb2NrICAgICAgICAgICAqLwogI2RlZmluZQlJUlFfUlRDQWxybQkJMzIJLyogUlRDIEFsYXJtICAgICAgICAgICAgICAgICovCiAKLSNkZWZpbmUJSVJRX0dQSU8xMQkJMzMKLSNkZWZpbmUJSVJRX0dQSU8xMgkJMzQKLSNkZWZpbmUJSVJRX0dQSU8xMwkJMzUKLSNkZWZpbmUJSVJRX0dQSU8xNAkJMzYKLSNkZWZpbmUJSVJRX0dQSU8xNQkJMzcKLSNkZWZpbmUJSVJRX0dQSU8xNgkJMzgKLSNkZWZpbmUJSVJRX0dQSU8xNwkJMzkKLSNkZWZpbmUJSVJRX0dQSU8xOAkJNDAKLSNkZWZpbmUJSVJRX0dQSU8xOQkJNDEKLSNkZWZpbmUJSVJRX0dQSU8yMAkJNDIKLSNkZWZpbmUJSVJRX0dQSU8yMQkJNDMKLSNkZWZpbmUJSVJRX0dQSU8yMgkJNDQKLSNkZWZpbmUJSVJRX0dQSU8yMwkJNDUKLSNkZWZpbmUJSVJRX0dQSU8yNAkJNDYKLSNkZWZpbmUJSVJRX0dQSU8yNQkJNDcKLSNkZWZpbmUJSVJRX0dQSU8yNgkJNDgKLSNkZWZpbmUJSVJRX0dQSU8yNwkJNDkKKyNkZWZpbmUJSVJRX0dQSU8wCQkzMworI2RlZmluZQlJUlFfR1BJTzEJCTM0CisjZGVmaW5lCUlSUV9HUElPMgkJMzUKKyNkZWZpbmUJSVJRX0dQSU8zCQkzNgorI2RlZmluZQlJUlFfR1BJTzQJCTM3CisjZGVmaW5lCUlSUV9HUElPNQkJMzgKKyNkZWZpbmUJSVJRX0dQSU82CQkzOQorI2RlZmluZQlJUlFfR1BJTzcJCTQwCisjZGVmaW5lCUlSUV9HUElPOAkJNDEKKyNkZWZpbmUJSVJRX0dQSU85CQk0MgorI2RlZmluZQlJUlFfR1BJTzEwCQk0MworI2RlZmluZQlJUlFfR1BJTzExCQk0NAorI2RlZmluZQlJUlFfR1BJTzEyCQk0NQorI2RlZmluZQlJUlFfR1BJTzEzCQk0NgorI2RlZmluZQlJUlFfR1BJTzE0CQk0NworI2RlZmluZQlJUlFfR1BJTzE1CQk0OAorI2RlZmluZQlJUlFfR1BJTzE2CQk0OQorI2RlZmluZQlJUlFfR1BJTzE3CQk1MAorI2RlZmluZQlJUlFfR1BJTzE4CQk1MQorI2RlZmluZQlJUlFfR1BJTzE5CQk1MgorI2RlZmluZQlJUlFfR1BJTzIwCQk1MworI2RlZmluZQlJUlFfR1BJTzIxCQk1NAorI2RlZmluZQlJUlFfR1BJTzIyCQk1NQorI2RlZmluZQlJUlFfR1BJTzIzCQk1NgorI2RlZmluZQlJUlFfR1BJTzI0CQk1NworI2RlZmluZQlJUlFfR1BJTzI1CQk1OAorI2RlZmluZQlJUlFfR1BJTzI2CQk1OQorI2RlZmluZQlJUlFfR1BJTzI3CQk2MAogCiAvKgogICogVGhlIG5leHQgMTYgaW50ZXJydXB0cyBhcmUgZm9yIGJvYXJkIHNwZWNpZmljIHB1cnBvc2VzLiAgU2luY2UKICAqIHRoZSBrZXJuZWwgY2FuIG9ubHkgcnVuIG9uIG9uZSBtYWNoaW5lIGF0IGEgdGltZSwgd2UgY2FuIHJlLXVzZQogICogdGhlc2UuICBJZiB5b3UgbmVlZCBtb3JlLCBpbmNyZWFzZSBJUlFfQk9BUkRfRU5ELCBidXQga2VlcCBpdAotICogd2l0aGluIHNlbnNpYmxlIGxpbWl0cy4gIElSUXMgNDkgdG8gNjQgYXJlIGF2YWlsYWJsZS4KKyAqIHdpdGhpbiBzZW5zaWJsZSBsaW1pdHMuICBJUlFzIDYxIHRvIDc2IGFyZSBhdmFpbGFibGUuCiAgKi8KLSNkZWZpbmUgSVJRX0JPQVJEX1NUQVJUCQk1MAotI2RlZmluZSBJUlFfQk9BUkRfRU5ECQk2NgorI2RlZmluZSBJUlFfQk9BUkRfU1RBUlQJCTYxCisjZGVmaW5lIElSUV9CT0FSRF9FTkQJCTc3CiAKIC8qCiAgKiBGaWd1cmUgb3V0IHRoZSBNQVggSVJRIG51bWJlci4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKaW5kZXggNjNlMjkwMS4uNjVhZWJmYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKQEAgLTgwLDE3MCArODAsNiBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9kb21haW4gKnNhMTEwMF9ub3JtYWxfaXJxZG9tYWluOwogCi0vKgotICogU0ExMTAwIEdQSU8gZWRnZSBkZXRlY3Rpb24gZm9yIElSUXM6Ci0gKiBJUlFzIGFyZSBnZW5lcmF0ZWQgb24gRmFsbGluZy1FZGdlLCBSaXNpbmctRWRnZSwgb3IgYm90aC4KLSAqIFVzZSB0aGlzIGluc3RlYWQgb2YgZGlyZWN0bHkgc2V0dGluZyBHUkVSL0dGRVIuCi0gKi8KLXN0YXRpYyBpbnQgR1BJT19JUlFfcmlzaW5nX2VkZ2U7Ci1zdGF0aWMgaW50IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZTsKLXN0YXRpYyBpbnQgR1BJT19JUlFfbWFzayA9ICgxIDw8IDExKSAtIDE7Ci0KLXN0YXRpYyBpbnQgc2ExMTAwX2dwaW9fdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCB0eXBlKQotewotCXVuc2lnbmVkIGludCBtYXNrOwotCi0JbWFzayA9IEJJVChkLT5od2lycSk7Ci0KLQlpZiAodHlwZSA9PSBJUlFfVFlQRV9QUk9CRSkgewotCQlpZiAoKEdQSU9fSVJRX3Jpc2luZ19lZGdlIHwgR1BJT19JUlFfZmFsbGluZ19lZGdlKSAmIG1hc2spCi0JCQlyZXR1cm4gMDsKLQkJdHlwZSA9IElSUV9UWVBFX0VER0VfUklTSU5HIHwgSVJRX1RZUEVfRURHRV9GQUxMSU5HOwotCX0KLQotCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpIHsKLQkJR1BJT19JUlFfcmlzaW5nX2VkZ2UgfD0gbWFzazsKLQl9IGVsc2UKLQkJR1BJT19JUlFfcmlzaW5nX2VkZ2UgJj0gfm1hc2s7Ci0JaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpIHsKLQkJR1BJT19JUlFfZmFsbGluZ19lZGdlIHw9IG1hc2s7Ci0JfSBlbHNlCi0JCUdQSU9fSVJRX2ZhbGxpbmdfZWRnZSAmPSB+bWFzazsKLQotCUdSRVIgPSBHUElPX0lSUV9yaXNpbmdfZWRnZSAmIEdQSU9fSVJRX21hc2s7Ci0JR0ZFUiA9IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZSAmIEdQSU9fSVJRX21hc2s7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEdQSU8gSVJRcyBtdXN0IGJlIGFja25vd2xlZGdlZC4KLSAqLwotc3RhdGljIHZvaWQgc2ExMTAwX2dwaW9fYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKLXsKLQlHRURSID0gQklUKGQtPmh3aXJxKTsKLX0KLQotc3RhdGljIGludCBzYTExMDBfZ3Bpb193YWtlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IG9uKQotewotCWlmIChvbikKLQkJUFdFUiB8PSBCSVQoZC0+aHdpcnEpOwotCWVsc2UKLQkJUFdFUiAmPSB+QklUKGQtPmh3aXJxKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFRoaXMgaXMgZm9yIElSUXMgZnJvbSAwIHRvIDEwLgotICovCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIHNhMTEwMF9sb3dfZ3Bpb19jaGlwID0gewotCS5uYW1lCQk9ICJHUElPLWwiLAotCS5pcnFfYWNrCT0gc2ExMTAwX2dwaW9fYWNrLAotCS5pcnFfbWFzawk9IHNhMTEwMF9tYXNrX2lycSwKLQkuaXJxX3VubWFzawk9IHNhMTEwMF91bm1hc2tfaXJxLAotCS5pcnFfc2V0X3R5cGUJPSBzYTExMDBfZ3Bpb190eXBlLAotCS5pcnFfc2V0X3dha2UJPSBzYTExMDBfZ3Bpb193YWtlLAotfTsKLQotc3RhdGljIGludCBzYTExMDBfbG93X2dwaW9faXJxZG9tYWluX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwKLQkJdW5zaWduZWQgaW50IGlycSwgaXJxX2h3X251bWJlcl90IGh3aXJxKQotewotCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZzYTExMDBfbG93X2dwaW9fY2hpcCwKLQkJCQkgaGFuZGxlX2VkZ2VfaXJxKTsKLQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgc2ExMTAwX2xvd19ncGlvX2lycWRvbWFpbl9vcHMgPSB7Ci0JLm1hcCA9IHNhMTEwMF9sb3dfZ3Bpb19pcnFkb21haW5fbWFwLAotCS54bGF0ZSA9IGlycV9kb21haW5feGxhdGVfb25ldHdvY2VsbCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2RvbWFpbiAqc2ExMTAwX2xvd19ncGlvX2lycWRvbWFpbjsKLQotLyoKLSAqIElSUTExIChHUElPMTEgdGhyb3VnaCAyNykgaGFuZGxlci4gIFdlIGVudGVyIGhlcmUgd2l0aCB0aGUKLSAqIGlycV9jb250cm9sbGVyX2xvY2sgaGVsZCwgYW5kIElSUXMgZGlzYWJsZWQuICBEZWNvZGUgdGhlIElSUQotICogYW5kIGNhbGwgdGhlIGhhbmRsZXIuCi0gKi8KLXN0YXRpYyB2b2lkCi1zYTExMDBfaGlnaF9ncGlvX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXVuc2lnbmVkIGludCBtYXNrOwotCi0JbWFzayA9IEdFRFIgJiAweGZmZmZmODAwOwotCWRvIHsKLQkJLyoKLQkJICogY2xlYXIgZG93biBhbGwgY3VycmVudGx5IGFjdGl2ZSBJUlEgc291cmNlcy4KLQkJICogV2Ugd2lsbCBiZSBwcm9jZXNzaW5nIHRoZW0gYWxsLgotCQkgKi8KLQkJR0VEUiA9IG1hc2s7Ci0KLQkJaXJxID0gSVJRX0dQSU8xMTsKLQkJbWFzayA+Pj0gMTE7Ci0JCWRvIHsKLQkJCWlmIChtYXNrICYgMSkKLQkJCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKLQkJCW1hc2sgPj49IDE7Ci0JCQlpcnErKzsKLQkJfSB3aGlsZSAobWFzayk7Ci0KLQkJbWFzayA9IEdFRFIgJiAweGZmZmZmODAwOwotCX0gd2hpbGUgKG1hc2spOwotfQotCi0vKgotICogTGlrZSBHUElPMCB0byAxMCwgR1BJTzExLTI3IElSUXMgbmVlZCB0byBiZSBoYW5kbGVkIHNwZWNpYWxseS4KLSAqIEluIGFkZGl0aW9uLCB0aGUgSVJRcyBhcmUgYWxsIGNvbGxlY3RlZCB1cCBpbnRvIG9uZSBiaXQgaW4gdGhlCi0gKiBpbnRlcnJ1cHQgY29udHJvbGxlciByZWdpc3RlcnMuCi0gKi8KLXN0YXRpYyB2b2lkIHNhMTEwMF9oaWdoX2dwaW9fbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0JdW5zaWduZWQgaW50IG1hc2sgPSBCSVQoZC0+aHdpcnEpOwotCi0JR1BJT19JUlFfbWFzayAmPSB+bWFzazsKLQotCUdSRVIgJj0gfm1hc2s7Ci0JR0ZFUiAmPSB+bWFzazsKLX0KLQotc3RhdGljIHZvaWQgc2ExMTAwX2hpZ2hfZ3Bpb191bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQotewotCXVuc2lnbmVkIGludCBtYXNrID0gQklUKGQtPmh3aXJxKTsKLQotCUdQSU9fSVJRX21hc2sgfD0gbWFzazsKLQotCUdSRVIgPSBHUElPX0lSUV9yaXNpbmdfZWRnZSAmIEdQSU9fSVJRX21hc2s7Ci0JR0ZFUiA9IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZSAmIEdQSU9fSVJRX21hc2s7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc2ExMTAwX2hpZ2hfZ3Bpb19jaGlwID0gewotCS5uYW1lCQk9ICJHUElPLWgiLAotCS5pcnFfYWNrCT0gc2ExMTAwX2dwaW9fYWNrLAotCS5pcnFfbWFzawk9IHNhMTEwMF9oaWdoX2dwaW9fbWFzaywKLQkuaXJxX3VubWFzawk9IHNhMTEwMF9oaWdoX2dwaW9fdW5tYXNrLAotCS5pcnFfc2V0X3R5cGUJPSBzYTExMDBfZ3Bpb190eXBlLAotCS5pcnFfc2V0X3dha2UJPSBzYTExMDBfZ3Bpb193YWtlLAotfTsKLQotc3RhdGljIGludCBzYTExMDBfaGlnaF9ncGlvX2lycWRvbWFpbl9tYXAoc3RydWN0IGlycV9kb21haW4gKmQsCi0JCXVuc2lnbmVkIGludCBpcnEsIGlycV9od19udW1iZXJfdCBod2lycSkKLXsKLQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmc2ExMTAwX2hpZ2hfZ3Bpb19jaGlwLAotCQkJCSBoYW5kbGVfZWRnZV9pcnEpOwotCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluX29wcyBzYTExMDBfaGlnaF9ncGlvX2lycWRvbWFpbl9vcHMgPSB7Ci0JLm1hcCA9IHNhMTEwMF9oaWdoX2dwaW9faXJxZG9tYWluX21hcCwKLQkueGxhdGUgPSBpcnFfZG9tYWluX3hsYXRlX29uZXR3b2NlbGwsCi19OwotCi1zdGF0aWMgc3RydWN0IGlycV9kb21haW4gKnNhMTEwMF9oaWdoX2dwaW9faXJxZG9tYWluOwotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGlycV9yZXNvdXJjZSA9CiAJREVGSU5FX1JFU19NRU1fTkFNRUQoMHg5MDA1MDAwMCwgU1pfNjRLLCAiaXJxcyIpOwogCkBAIC0yNzAsMTcgKzEwNiw2IEBACiAJCSAgSUNfR1BJTzZ8SUNfR1BJTzV8SUNfR1BJTzR8SUNfR1BJTzN8SUNfR1BJTzJ8CiAJCSAgSUNfR1BJTzF8SUNfR1BJTzApOwogCi0JLyoKLQkgKiBTZXQgdGhlIGFwcHJvcHJpYXRlIGVkZ2VzIGZvciB3YWtldXAuCi0JICovCi0JR1JFUiA9IFBXRVIgJiBHUElPX0lSUV9yaXNpbmdfZWRnZTsKLQlHRkVSID0gUFdFUiAmIEdQSU9fSVJRX2ZhbGxpbmdfZWRnZTsKLQkKLQkvKgotCSAqIENsZWFyIGFueSBwZW5kaW5nIEdQSU8gaW50ZXJydXB0cy4KLQkgKi8KLQlHRURSID0gR0VEUjsKLQogCXJldHVybiAwOwogfQogCkBAIC0yOTIsOSArMTE3LDYgQEAKIAkJSUNDUiA9IHN0LT5pY2NyOwogCQlJQ0xSID0gc3QtPmljbHI7CiAKLQkJR1JFUiA9IEdQSU9fSVJRX3Jpc2luZ19lZGdlICYgR1BJT19JUlFfbWFzazsKLQkJR0ZFUiA9IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZSAmIEdQSU9fSVJRX21hc2s7Ci0KIAkJSUNNUiA9IHN0LT5pY21yOwogCX0KIH0KQEAgLTMyNSw3ICsxNDcsOCBAQAogCQlpZiAobWFzayA9PSAwKQogCQkJYnJlYWs7CiAKLQkJaGFuZGxlX0lSUShmZnMobWFzaykgLSAxICsgSVJRX0dQSU8wLCByZWdzKTsKKwkJaGFuZGxlX2RvbWFpbl9pcnEoc2ExMTAwX25vcm1hbF9pcnFkb21haW4sCisJCQkJZmZzKG1hc2spIC0gMSwgcmVncyk7CiAJfSB3aGlsZSAoMSk7CiB9CiAKQEAgLTMzOSwzNCArMTYyLDE2IEBACiAJLyogYWxsIElSUXMgYXJlIElSUSwgbm90IEZJUSAqLwogCUlDTFIgPSAwOwogCi0JLyogY2xlYXIgYWxsIEdQSU8gZWRnZSBkZXRlY3RzICovCi0JR0ZFUiA9IDA7Ci0JR1JFUiA9IDA7Ci0JR0VEUiA9IC0xOwotCiAJLyoKIAkgKiBXaGF0ZXZlciB0aGUgZG9jIHNheXMsIHRoaXMgaGFzIHRvIGJlIHNldCBmb3IgdGhlIHdhaXQtb24taXJxCiAJICogaW5zdHJ1Y3Rpb24gdG8gd29yay4uLiBvbiBhIFNBMTEwMCByZXYgOSBhdCBsZWFzdC4KIAkgKi8KIAlJQ0NSID0gMTsKIAotCXNhMTEwMF9sb3dfZ3Bpb19pcnFkb21haW4gPSBpcnFfZG9tYWluX2FkZF9sZWdhY3koTlVMTCwKLQkJCTExLCBJUlFfR1BJTzAsIDAsCi0JCQkmc2ExMTAwX2xvd19ncGlvX2lycWRvbWFpbl9vcHMsIE5VTEwpOwotCi0Jc2ExMTAwX25vcm1hbF9pcnFkb21haW4gPSBpcnFfZG9tYWluX2FkZF9sZWdhY3koTlVMTCwKLQkJCTIxLCBJUlFfR1BJTzExXzI3LCAxMSwKKwlzYTExMDBfbm9ybWFsX2lycWRvbWFpbiA9IGlycV9kb21haW5fYWRkX3NpbXBsZShOVUxMLAorCQkJMzIsIElSUV9HUElPMF9TQywKIAkJCSZzYTExMDBfbm9ybWFsX2lycWRvbWFpbl9vcHMsIE5VTEwpOwogCi0Jc2ExMTAwX2hpZ2hfZ3Bpb19pcnFkb21haW4gPSBpcnFfZG9tYWluX2FkZF9sZWdhY3koTlVMTCwKLQkJCTE3LCBJUlFfR1BJTzExLCAxMSwKLQkJCSZzYTExMDBfaGlnaF9ncGlvX2lycWRvbWFpbl9vcHMsIE5VTEwpOwotCi0JLyoKLQkgKiBJbnN0YWxsIGhhbmRsZXIgZm9yIEdQSU8gMTEtMjcgZWRnZSBkZXRlY3QgaW50ZXJydXB0cwotCSAqLwotCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPMTFfMjcsIHNhMTEwMF9oaWdoX2dwaW9faGFuZGxlcik7Ci0KIAlzZXRfaGFuZGxlX2lycShzYTExMDBfaGFuZGxlX2lycSk7CiAKIAlzYTExMDBfaW5pdF9ncGlvKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9wY2ktbmFub2VuZ2luZS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvcGNpLW5hbm9lbmdpbmUuYwppbmRleCBiNzA0NDMzLi5kN2FlOGQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9wY2ktbmFub2VuZ2luZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BjaS1uYW5vZW5naW5lLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTMwLDk3ICsyOSwyMCBAQAogI2luY2x1ZGUgPG1hY2gvbmFub2VuZ2luZS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotc3RhdGljIERFRklORV9TUElOTE9DSyhuYW5vX2xvY2spOwotCi1zdGF0aWMgaW50IG5hbm9lbmdpbmVfZ2V0X3BjaV9hZGRyZXNzKHN0cnVjdCBwY2lfYnVzICpidXMsCi0JdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHZvaWQgX19pb21lbSAqKmFkZHJlc3MpCitzdGF0aWMgdm9pZCBfX2lvbWVtICpuYW5vZW5naW5lX3BjaV9tYXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSkKIHsKLQlpbnQgcmV0ID0gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCXVuc2lnbmVkIGludCBidXNuciA9IGJ1cy0+bnVtYmVyOworCWlmIChidXMtPm51bWJlciAhPSAwIHx8IChkZXZmbiA+PiAzKSAhPSAwKQorCQlyZXR1cm4gTlVMTDsKIAotCSphZGRyZXNzID0gKHZvaWQgX19pb21lbSAqKU5BTk9fUENJX0NPTkZJR19TUEFDRV9WSVJUICsKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKU5BTk9fUENJX0NPTkZJR19TUEFDRV9WSVJUICsKIAkJKChidXMtPm51bWJlciA8PCAxNikgfCAoZGV2Zm4gPDwgOCkgfCAod2hlcmUgJiB+MykpOwotCi0JcmV0ID0gKGJ1c25yID4gMjU1IHx8IGRldmZuID4gMjU1IHx8IHdoZXJlID4gMjU1KSA/Ci0JCVBDSUJJT1NfREVWSUNFX05PVF9GT1VORCA6IFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgbmFub2VuZ2luZV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKLQlpbnQgc2l6ZSwgdTMyICp2YWwpCi17Ci0JaW50IHJldDsKLQl2b2lkIF9faW9tZW0gKmFkZHJlc3M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1MzIgdjsKLQotCS8qIG5hbm9FbmdpbmUgUENJIGJyaWRnZSBkb2VzIG5vdCByZXR1cm4gLTEgZm9yIGEgbm9uLWV4aXN0aW5nCi0JICogZGV2aWNlLiBXZSBtdXN0IGZha2UgdGhlIGFuc3dlci4gV2Uga25vdyB0aGF0IHRoZSBvbmx5IHZhbGlkCi0JICogZGV2aWNlIGlzIGRldmljZSB6ZXJvIGF0IGJ1cyAwLCB3aGljaCBpcyB0aGUgbmV0d29yayBjaGlwLiAqLwotCWlmIChidXMtPm51bWJlciAhPSAwIHx8IChkZXZmbiA+PiAzKSAhPSAwKSB7Ci0JCXYgPSAtMTsKLQkJbmFub2VuZ2luZV9nZXRfcGNpX2FkZHJlc3MoYnVzLCBkZXZmbiwgd2hlcmUsICZhZGRyZXNzKTsKLQkJZ290byBleGl0X2Z1bmN0aW9uOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZuYW5vX2xvY2ssIGZsYWdzKTsKLQotCXJldCA9IG5hbm9lbmdpbmVfZ2V0X3BjaV9hZGRyZXNzKGJ1cywgZGV2Zm4sIHdoZXJlLCAmYWRkcmVzcyk7Ci0JaWYgKHJldCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCi0JCXJldHVybiByZXQ7Ci0JdiA9IF9fcmF3X3JlYWRsKGFkZHJlc3MpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmFub19sb2NrLCBmbGFncyk7Ci0KLQl2ID4+PSAoKHdoZXJlICYgMykgKiA4KTsKLQl2ICY9ICh1bnNpZ25lZCBsb25nKSgtMSkgPj4gKCg0IC0gc2l6ZSkgKiA4KTsKLQotZXhpdF9mdW5jdGlvbjoKLQkqdmFsID0gdjsKLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IG5hbm9lbmdpbmVfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLAotCWludCBzaXplLCB1MzIgdmFsKQotewotCWludCByZXQ7Ci0Jdm9pZCBfX2lvbWVtICphZGRyZXNzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgc2hpZnQ7Ci0JdTMyIHY7Ci0KLQlzaGlmdCA9ICh3aGVyZSAmIDMpICogODsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZuYW5vX2xvY2ssIGZsYWdzKTsKLQotCXJldCA9IG5hbm9lbmdpbmVfZ2V0X3BjaV9hZGRyZXNzKGJ1cywgZGV2Zm4sIHdoZXJlLCAmYWRkcmVzcyk7Ci0JaWYgKHJldCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCi0JCXJldHVybiByZXQ7Ci0JdiA9IF9fcmF3X3JlYWRsKGFkZHJlc3MpOwotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJdiAmPSB+KDB4RkYgPDwgc2hpZnQpOwotCQl2IHw9IHZhbCA8PCBzaGlmdDsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQl2ICY9IH4oMHhGRkZGIDw8IHNoaWZ0KTsKLQkJdiB8PSB2YWwgPDwgc2hpZnQ7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJdiA9IHZhbDsKLQkJYnJlYWs7Ci0JfQotCV9fcmF3X3dyaXRlbCh2LCBhZGRyZXNzKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5hbm9fbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfb3BzIHBjaV9uYW5vX29wcyA9IHsKLQkucmVhZAk9IG5hbm9lbmdpbmVfcmVhZF9jb25maWcsCi0JLndyaXRlCT0gbmFub2VuZ2luZV93cml0ZV9jb25maWcsCisJLm1hcF9idXMgPSBuYW5vZW5naW5lX3BjaV9tYXBfYnVzLAorCS5yZWFkCT0gcGNpX2dlbmVyaWNfY29uZmlnX3JlYWQzMiwKKwkud3JpdGUJPSBwY2lfZ2VuZXJpY19jb25maWdfd3JpdGUzMiwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHBjaV9uYW5vZW5naW5lX21hcF9pcnEoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BtLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbS5jCmluZGV4IDY2NDVkMWUuLjM0ODUzZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvcG0uYwpAQCAtODEsNiArODEsNyBAQAogCS8qCiAJICogRW5zdXJlIG5vdCB0byBjb21lIGJhY2sgaGVyZSBpZiBpdCB3YXNuJ3QgaW50ZW5kZWQKIAkgKi8KKwlSQ1NSID0gUkNTUl9TTVI7CiAJUFNQUiA9IDA7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGVhNmNmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4IERlYm9yYWggV2FsbGFjaC4KLSAqIFR3aWRkbGVzICAoQykgMTk5OSBIdWdvIEZpZW5uZXMgPGh1Z29AZW1wZWcuY29tPgotICoKLSAqIDIwMDAvMDMvMjkgKEMpIE5pY29sYXMgUGl0cmUgPG5pY29AZmx1eG5pYy5uZXQ+Ci0gKglSZXdyaXR0ZW46IGJpZyBjbGVhbnVwLCBtdWNoIHNpbXBsZXIsIGJldHRlciBIWiBhY2N1cmFjeS4KLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1leC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZF9jbG9jay5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLQotI2RlZmluZSBTQTExMDBfQ0xPQ0tfRlJFUSAzNjg2NDAwCi0jZGVmaW5lIFNBMTEwMF9MQVRDSCBESVZfUk9VTkRfQ0xPU0VTVChTQTExMDBfQ0xPQ0tfRlJFUSwgSFopCi0KLXN0YXRpYyB1NjQgbm90cmFjZSBzYTExMDBfcmVhZF9zY2hlZF9jbG9jayh2b2lkKQotewotCXJldHVybiByZWFkbF9yZWxheGVkKE9TQ1IpOwotfQotCi0jZGVmaW5lIE1JTl9PU0NSX0RFTFRBIDIKLQotc3RhdGljIGlycXJldHVybl90IHNhMTEwMF9vc3QwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYyA9IGRldl9pZDsKLQotCS8qIERpc2FybSB0aGUgY29tcGFyZS9tYXRjaCwgc2lnbmFsIHRoZSBldmVudC4gKi8KLQl3cml0ZWxfcmVsYXhlZChyZWFkbF9yZWxheGVkKE9JRVIpICYgfk9JRVJfRTAsIE9JRVIpOwotCXdyaXRlbF9yZWxheGVkKE9TU1JfTTAsIE9TU1IpOwotCWMtPmV2ZW50X2hhbmRsZXIoYyk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXNhMTEwMF9vc21yMF9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjKQotewotCXVuc2lnbmVkIGxvbmcgbmV4dCwgb3NjcjsKLQotCXdyaXRlbF9yZWxheGVkKHJlYWRsX3JlbGF4ZWQoT0lFUikgfCBPSUVSX0UwLCBPSUVSKTsKLQluZXh0ID0gcmVhZGxfcmVsYXhlZChPU0NSKSArIGRlbHRhOwotCXdyaXRlbF9yZWxheGVkKG5leHQsIE9TTVIwKTsKLQlvc2NyID0gcmVhZGxfcmVsYXhlZChPU0NSKTsKLQotCXJldHVybiAoc2lnbmVkKShuZXh0IC0gb3NjcikgPD0gTUlOX09TQ1JfREVMVEEgPyAtRVRJTUUgOiAwOwotfQotCi1zdGF0aWMgdm9pZAotc2ExMTAwX29zbXIwX3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjKQotewotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKLQljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKLQljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgotCQl3cml0ZWxfcmVsYXhlZChyZWFkbF9yZWxheGVkKE9JRVIpICYgfk9JRVJfRTAsIE9JRVIpOwotCQl3cml0ZWxfcmVsYXhlZChPU1NSX00wLCBPU1NSKTsKLQkJYnJlYWs7Ci0KLQljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKLQljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCQlicmVhazsKLQl9Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLXVuc2lnbmVkIGxvbmcgb3Ntcls0XSwgb2llcjsKLQotc3RhdGljIHZvaWQgc2ExMTAwX3RpbWVyX3N1c3BlbmQoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkZXYpCi17Ci0Jb3NtclswXSA9IHJlYWRsX3JlbGF4ZWQoT1NNUjApOwotCW9zbXJbMV0gPSByZWFkbF9yZWxheGVkKE9TTVIxKTsKLQlvc21yWzJdID0gcmVhZGxfcmVsYXhlZChPU01SMik7Ci0Jb3NtclszXSA9IHJlYWRsX3JlbGF4ZWQoT1NNUjMpOwotCW9pZXIgPSByZWFkbF9yZWxheGVkKE9JRVIpOwotfQotCi1zdGF0aWMgdm9pZCBzYTExMDBfdGltZXJfcmVzdW1lKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNlZGV2KQotewotCXdyaXRlbF9yZWxheGVkKDB4MGYsIE9TU1IpOwotCXdyaXRlbF9yZWxheGVkKG9zbXJbMF0sIE9TTVIwKTsKLQl3cml0ZWxfcmVsYXhlZChvc21yWzFdLCBPU01SMSk7Ci0Jd3JpdGVsX3JlbGF4ZWQob3NtclsyXSwgT1NNUjIpOwotCXdyaXRlbF9yZWxheGVkKG9zbXJbM10sIE9TTVIzKTsKLQl3cml0ZWxfcmVsYXhlZChvaWVyLCBPSUVSKTsKLQotCS8qCi0JICogT1NNUjAgaXMgdGhlIHN5c3RlbSB0aW1lcjogbWFrZSBzdXJlIE9TQ1IgaXMgc3VmZmljaWVudGx5IGJlaGluZAotCSAqLwotCXdyaXRlbF9yZWxheGVkKE9TTVIwIC0gU0ExMTAwX0xBVENILCBPU0NSKTsKLX0KLSNlbHNlCi0jZGVmaW5lIHNhMTEwMF90aW1lcl9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgc2ExMTAwX3RpbWVyX3Jlc3VtZSBOVUxMCi0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgY2tldnRfc2ExMTAwX29zbXIwID0gewotCS5uYW1lCQk9ICJvc21yMCIsCi0JLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKLQkucmF0aW5nCQk9IDIwMCwKLQkuc2V0X25leHRfZXZlbnQJPSBzYTExMDBfb3NtcjBfc2V0X25leHRfZXZlbnQsCi0JLnNldF9tb2RlCT0gc2ExMTAwX29zbXIwX3NldF9tb2RlLAotCS5zdXNwZW5kCT0gc2ExMTAwX3RpbWVyX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzYTExMDBfdGltZXJfcmVzdW1lLAotfTsKLQotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gc2ExMTAwX3RpbWVyX2lycSA9IHsKLQkubmFtZQkJPSAib3N0MCIsCi0JLmZsYWdzCQk9IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCi0JLmhhbmRsZXIJPSBzYTExMDBfb3N0MF9pbnRlcnJ1cHQsCi0JLmRldl9pZAkJPSAmY2tldnRfc2ExMTAwX29zbXIwLAotfTsKLQotdm9pZCBfX2luaXQgc2ExMTAwX3RpbWVyX2luaXQodm9pZCkKLXsKLQl3cml0ZWxfcmVsYXhlZCgwLCBPSUVSKTsKLQl3cml0ZWxfcmVsYXhlZChPU1NSX00wIHwgT1NTUl9NMSB8IE9TU1JfTTIgfCBPU1NSX00zLCBPU1NSKTsKLQotCXNjaGVkX2Nsb2NrX3JlZ2lzdGVyKHNhMTEwMF9yZWFkX3NjaGVkX2Nsb2NrLCAzMiwgMzY4NjQwMCk7Ci0KLQlja2V2dF9zYTExMDBfb3NtcjAuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7Ci0KLQlzZXR1cF9pcnEoSVJRX09TVDAsICZzYTExMDBfdGltZXJfaXJxKTsKLQotCWNsb2Nrc291cmNlX21taW9faW5pdChPU0NSLCAib3NjciIsIFNBMTEwMF9DTE9DS19GUkVRLCAyMDAsIDMyLAotCQljbG9ja3NvdXJjZV9tbWlvX3JlYWRsX3VwKTsKLQljbG9ja2V2ZW50c19jb25maWdfYW5kX3JlZ2lzdGVyKCZja2V2dF9zYTExMDBfb3NtcjAsIDM2ODY0MDAsCi0JCQkJCU1JTl9PU0NSX0RFTFRBICogMiwgMHg3ZmZmZmZmZik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwZTZldm0uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS5jCmluZGV4IDY2ZjY3ODEuLjQ0NGYyMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXBlNmV2bS5jCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFjaGlwLmg+CisjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9hcm0tZ2ljLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3RtaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgpAQCAtMjczLDYgKzI3NSwyMiBAQAogCQkJCSAgICAgIHNpemVvZihhcGU2ZXZtX2xlZHNfcGRhdGEpKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGFwZTZldm1fbGVnYWN5X2luaXRfdGltZSh2b2lkKQoreworCS8qIERvIG5vdCBpbnZva2UgRFQtYmFzZWQgdGltZXJzIHZpYSBjbG9ja3NvdXJjZV9vZl9pbml0KCkgKi8KK30KKworc3RhdGljIHZvaWQgX19pbml0IGFwZTZldm1fbGVnYWN5X2luaXRfaXJxKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKDB4ZjEwMDEwMDAsIDB4MTAwMCk7CisJdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhmMTAwMjAwMCwgMHgxMDAwKTsKKworCWdpY19pbml0KDAsIDI5LCBnaWNfZGlzdF9iYXNlLCBnaWNfY3B1X2Jhc2UpOworCisJLyogRG8gbm90IGludm9rZSBEVC1iYXNlZCBpbnRlcnJ1cHQgY29kZSB2aWEgaXJxY2hpcF9pbml0KCkgKi8KK30KKworCiBzdGF0aWMgY29uc3QgY2hhciAqYXBlNmV2bV9ib2FyZHNfY29tcGF0X2R0W10gX19pbml0ZGF0YSA9IHsKIAkicmVuZXNhcyxhcGU2ZXZtIiwKIAlOVUxMLApAQCAtMjgwLDcgKzI5OCw5IEBACiAKIERUX01BQ0hJTkVfU1RBUlQoQVBFNkVWTV9EVCwgImFwZTZldm0iKQogCS5pbml0X2Vhcmx5CT0gc2htb2JpbGVfaW5pdF9kZWxheSwKKwkuaW5pdF9pcnEgICAgICAgPSBhcGU2ZXZtX2xlZ2FjeV9pbml0X2lycSwKIAkuaW5pdF9tYWNoaW5lCT0gYXBlNmV2bV9hZGRfc3RhbmRhcmRfZGV2aWNlcywKIAkuaW5pdF9sYXRlCT0gc2htb2JpbGVfaW5pdF9sYXRlLAogCS5kdF9jb21wYXQJPSBhcGU2ZXZtX2JvYXJkc19jb21wYXRfZHQsCisJLmluaXRfdGltZQk9IGFwZTZldm1fbGVnYWN5X2luaXRfdGltZSwKIE1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWxhZ2VyLmMKaW5kZXggZjgxOTdlYi4uNjViMTI4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1sYWdlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbGFnZXIuYwpAQCAtMjEsNiArMjEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxY2hpcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWNoaXAvYXJtLWdpYy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvdG1pby5oPgpAQCAtODExLDYgKzgxMywxNiBAQAogCQkJCQkgIGxhZ2VyX2tzejgwNDFfZml4dXApOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgbGFnZXJfbGVnYWN5X2luaXRfaXJxKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKDB4ZjEwMDEwMDAsIDB4MTAwMCk7CisJdm9pZCBfX2lvbWVtICpnaWNfY3B1X2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoMHhmMTAwMjAwMCwgMHgxMDAwKTsKKworCWdpY19pbml0KDAsIDI5LCBnaWNfZGlzdF9iYXNlLCBnaWNfY3B1X2Jhc2UpOworCisJLyogRG8gbm90IGludm9rZSBEVC1iYXNlZCBpbnRlcnJ1cHQgY29kZSB2aWEgaXJxY2hpcF9pbml0KCkgKi8KK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBsYWdlcl9ib2FyZHNfY29tcGF0X2R0W10gX19pbml0Y29uc3QgPSB7CiAJInJlbmVzYXMsbGFnZXIiLAogCU5VTEwsCkBAIC04MTksNiArODMxLDcgQEAKIERUX01BQ0hJTkVfU1RBUlQoTEFHRVJfRFQsICJsYWdlciIpCiAJLnNtcAkJPSBzbXBfb3BzKHI4YTc3OTBfc21wX29wcyksCiAJLmluaXRfZWFybHkJPSBzaG1vYmlsZV9pbml0X2RlbGF5LAorCS5pbml0X2lycQk9IGxhZ2VyX2xlZ2FjeV9pbml0X2lycSwKIAkuaW5pdF90aW1lCT0gcmNhcl9nZW4yX3RpbWVyX2luaXQsCiAJLmluaXRfbWFjaGluZQk9IGxhZ2VyX2luaXQsCiAJLmluaXRfbGF0ZQk9IHNobW9iaWxlX2luaXRfbGF0ZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcmNhci1nZW4yLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXJjYXItZ2VuMi5jCmluZGV4IDNkZDZlZGQuLmNjOTQ3MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtcmNhci1nZW4yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1yY2FyLWdlbjIuYwpAQCAtMTMzLDcgKzEzMyw5IEBACiAjaWZkZWYgQ09ORklHX0NPTU1PTl9DTEsKIAlyY2FyX2dlbjJfY2xvY2tzX2luaXQobW9kZSk7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9TSE1PQklMRV9NVUxUSQogCWNsb2Nrc291cmNlX29mX2luaXQoKTsKKyNlbmRpZgogfQogCiBzdHJ1Y3QgbWVtb3J5X3Jlc2VydmVfY29uZmlnIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvdGltZXIuYwppbmRleCBmMWQwMjdhLi4wZWRmMmE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS90aW1lci5jCkBAIC03MCw2ICs3MCwxOCBAQAogCWlmICghbWF4X2ZyZXEpCiAJCXJldHVybjsKIAorI2lmZGVmIENPTkZJR19BUkNIX1NITU9CSUxFX0xFR0FDWQorCS8qIE5vbi1tdWx0aXBsYXRmb3JtIHI4YTczYTQgU29DIGNhbm5vdCB1c2UgYXJjaCB0aW1lciBkdWUKKwkgKiB0byBHSUMgYmVpbmcgaW5pdGlhbGl6ZWQgZnJvbSBDIGFuZCBhcmNoIHRpbWVyIHZpYSBEVCAqLworCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInJlbmVzYXMscjhhNzNhNCIpKQorCQloYXNfYXJjaF90aW1lciA9IGZhbHNlOworCisJLyogTm9uLW11bHRpcGxhdGZvcm0gcjhhNzc5MCBTb0MgY2Fubm90IHVzZSBhcmNoIHRpbWVyIGR1ZQorCSAqIHRvIEdJQyBiZWluZyBpbml0aWFsaXplZCBmcm9tIEMgYW5kIGFyY2ggdGltZXIgdmlhIERUICovCisJaWYgKG9mX21hY2hpbmVfaXNfY29tcGF0aWJsZSgicmVuZXNhcyxyOGE3NzkwIikpCisJCWhhc19hcmNoX3RpbWVyID0gZmFsc2U7CisjZW5kaWYKKwogCWlmICghaGFzX2FyY2hfdGltZXIgfHwgIUlTX0VOQUJMRUQoQ09ORklHX0FSTV9BUkNIX1RJTUVSKSkgewogCQlpZiAoaXNfYTdfYThfYTkpCiAJCQlzaG1vYmlsZV9zZXR1cF9kZWxheV9oeihtYXhfZnJlcSwgMSwgMyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCAwMzgyM2U3Li5jNDNjNzE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTEwMTIsNiArMTAxMiw3IEBACiAKIGNvbmZpZyBBUk1fS0VSTk1FTV9QRVJNUwogCWJvb2wgIlJlc3RyaWN0IGtlcm5lbCBtZW1vcnkgcGVybWlzc2lvbnMiCisJZGVwZW5kcyBvbiBNTVUKIAloZWxwCiAJICBJZiB0aGlzIGlzIHNldCwga2VybmVsIG1lbW9yeSBvdGhlciB0aGFuIGtlcm5lbCB0ZXh0IChhbmQgcm9kYXRhKQogCSAgd2lsbCBiZSBtYWRlIG5vbi1leGVjdXRhYmxlLiBUaGUgdHJhZGVvZmYgaXMgdGhhdCBlYWNoIHJlZ2lvbiBpcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jIGIvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jCmluZGV4IDVlNjVjYTguLmM2Yzc2OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLWwyeDAuYworKysgYi9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jIC0gTDIxMC9MMjIwIGNhY2hlIGNvbnRyb2xsZXIgc3VwcG9ydAorICogYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jIC0gTDIxMC9MMjIwL0wzMTAgY2FjaGUgY29udHJvbGxlciBzdXBwb3J0CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFSTSBMaW1pdGVkCiAgKgpAQCAtNDEsMTIgKzQxLDE0IEBACiAJdm9pZCAoKmVuYWJsZSkodm9pZCBfX2lvbWVtICosIHUzMiwgdW5zaWduZWQpOwogCXZvaWQgKCpmaXh1cCkodm9pZCBfX2lvbWVtICosIHUzMiwgc3RydWN0IG91dGVyX2NhY2hlX2ZucyAqKTsKIAl2b2lkICgqc2F2ZSkodm9pZCBfX2lvbWVtICopOworCXZvaWQgKCpjb25maWd1cmUpKHZvaWQgX19pb21lbSAqKTsKIAlzdHJ1Y3Qgb3V0ZXJfY2FjaGVfZm5zIG91dGVyX2NhY2hlOwogfTsKIAogI2RlZmluZSBDQUNIRV9MSU5FX1NJWkUJCTMyCiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmwyeDBfYmFzZTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbDJjX2luaXRfZGF0YSAqbDJ4MF9kYXRhOwogc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0sobDJ4MF9sb2NrKTsKIHN0YXRpYyB1MzIgbDJ4MF93YXlfbWFzazsJLyogQml0bWFzayBvZiBhY3RpdmUgd2F5cyAqLwogc3RhdGljIHUzMiBsMngwX3NpemU7CkBAIC0xMDYsNiArMTA4LDE5IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBsMmNfY29uZmlndXJlKHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwlpZiAob3V0ZXJfY2FjaGUuY29uZmlndXJlKSB7CisJCW91dGVyX2NhY2hlLmNvbmZpZ3VyZSgmbDJ4MF9zYXZlZF9yZWdzKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChsMngwX2RhdGEtPmNvbmZpZ3VyZSkKKwkJbDJ4MF9kYXRhLT5jb25maWd1cmUoYmFzZSk7CisKKwlsMmNfd3JpdGVfc2VjKGwyeDBfc2F2ZWRfcmVncy5hdXhfY3RybCwgYmFzZSwgTDJYMF9BVVhfQ1RSTCk7Cit9CisKIC8qCiAgKiBFbmFibGUgdGhlIEwyIGNhY2hlIGNvbnRyb2xsZXIuICBUaGlzIGZ1bmN0aW9uIG11c3Qgb25seSBiZQogICogY2FsbGVkIHdoZW4gdGhlIGNhY2hlIGNvbnRyb2xsZXIgaXMga25vd24gdG8gYmUgZGlzYWJsZWQuCkBAIC0xMTQsNyArMTI5LDEyIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWwyY193cml0ZV9zZWMoYXV4LCBiYXNlLCBMMlgwX0FVWF9DVFJMKTsKKwkvKiBEbyBub3QgdG91Y2ggdGhlIGNvbnRyb2xsZXIgaWYgYWxyZWFkeSBlbmFibGVkLiAqLworCWlmIChyZWFkbF9yZWxheGVkKGJhc2UgKyBMMlgwX0NUUkwpICYgTDJYMF9DVFJMX0VOKQorCQlyZXR1cm47CisKKwlsMngwX3NhdmVkX3JlZ3MuYXV4X2N0cmwgPSBhdXg7CisJbDJjX2NvbmZpZ3VyZShiYXNlKTsKIAogCWwyY191bmxvY2soYmFzZSwgbnVtX2xvY2spOwogCkBAIC0xMzYsNzggKzE1NiwxNiBAQAogCWRzYihzdCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ0FDSEVfUEwzMTAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZV93YWl0KHZvaWQgX19pb21lbSAqcmVnLCB1bnNpZ25lZCBsb25nIG1hc2spCi17Ci0JLyogY2FjaGUgb3BlcmF0aW9ucyBieSBsaW5lIGFyZSBhdG9taWMgb24gUEwzMTAgKi8KLX0KLSNlbHNlCi0jZGVmaW5lIGNhY2hlX3dhaXQJbDJjX3dhaXRfbWFzawotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZV9zeW5jKHZvaWQpCi17Ci0Jdm9pZCBfX2lvbWVtICpiYXNlID0gbDJ4MF9iYXNlOwotCi0Jd3JpdGVsX3JlbGF4ZWQoMCwgYmFzZSArIHN5bmNfcmVnX29mZnNldCk7Ci0JY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DQUNIRV9TWU5DLCAxKTsKLX0KLQotI2lmIGRlZmluZWQoQ09ORklHX1BMMzEwX0VSUkFUQV81ODgzNjkpIHx8IGRlZmluZWQoQ09ORklHX1BMMzEwX0VSUkFUQV83Mjc5MTUpCi1zdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfd3JpdGVsKHVuc2lnbmVkIGxvbmcgdmFsKQotewotCWwyY19zZXRfZGVidWcobDJ4MF9iYXNlLCB2YWwpOwotfQotI2Vsc2UKLS8qIE9wdGltaXNlZCBvdXQgZm9yIG5vbi1lcnJhdGEgY2FzZSAqLwotc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3dyaXRlbCh1bnNpZ25lZCBsb25nIHZhbCkKLXsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBsMngwX2NhY2hlX3N5bmModm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZsMngwX2xvY2ssIGZsYWdzKTsKLQljYWNoZV9zeW5jKCk7Ci0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwyeDBfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBfX2wyeDBfZmx1c2hfYWxsKHZvaWQpCi17Ci0JZGVidWdfd3JpdGVsKDB4MDMpOwotCV9fbDJjX29wX3dheShsMngwX2Jhc2UgKyBMMlgwX0NMRUFOX0lOVl9XQVkpOwotCWNhY2hlX3N5bmMoKTsKLQlkZWJ1Z193cml0ZWwoMHgwMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGwyeDBfZmx1c2hfYWxsKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIGNsZWFuIGFsbCB3YXlzICovCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZsMngwX2xvY2ssIGZsYWdzKTsKLQlfX2wyeDBfZmx1c2hfYWxsKCk7Ci0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwyeDBfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBsMngwX2Rpc2FibGUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZsMngwX2xvY2ssIGZsYWdzKTsKLQlfX2wyeDBfZmx1c2hfYWxsKCk7Ci0JbDJjX3dyaXRlX3NlYygwLCBsMngwX2Jhc2UsIEwyWDBfQ1RSTCk7Ci0JZHNiKHN0KTsKLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDJ4MF9sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyB2b2lkIGwyY19zYXZlKHZvaWQgX19pb21lbSAqYmFzZSkKIHsKIAlsMngwX3NhdmVkX3JlZ3MuYXV4X2N0cmwgPSByZWFkbF9yZWxheGVkKGwyeDBfYmFzZSArIEwyWDBfQVVYX0NUUkwpOwogfQogCitzdGF0aWMgdm9pZCBsMmNfcmVzdW1lKHZvaWQpCit7CisJbDJjX2VuYWJsZShsMngwX2Jhc2UsIGwyeDBfc2F2ZWRfcmVncy5hdXhfY3RybCwgbDJ4MF9kYXRhLT5udW1fbG9jayk7Cit9CisKIC8qCiAgKiBMMkMtMjEwIHNwZWNpZmljIGNvZGUuCiAgKgpAQCAtMjg4LDE0ICsyNDYsNiBAQAogCV9fbDJjMjEwX2NhY2hlX3N5bmMobDJ4MF9iYXNlKTsKIH0KIAotc3RhdGljIHZvaWQgbDJjMjEwX3Jlc3VtZSh2b2lkKQotewotCXZvaWQgX19pb21lbSAqYmFzZSA9IGwyeDBfYmFzZTsKLQotCWlmICghKHJlYWRsX3JlbGF4ZWQoYmFzZSArIEwyWDBfQ1RSTCkgJiBMMlgwX0NUUkxfRU4pKQotCQlsMmNfZW5hYmxlKGJhc2UsIGwyeDBfc2F2ZWRfcmVncy5hdXhfY3RybCwgMSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbDJjX2luaXRfZGF0YSBsMmMyMTBfZGF0YSBfX2luaXRjb25zdCA9IHsKIAkudHlwZSA9ICJMMkMtMjEwIiwKIAkud2F5X3NpemVfMCA9IFNaXzhLLApAQCAtMzA5LDcgKzI1OSw3IEBACiAJCS5mbHVzaF9hbGwgPSBsMmMyMTBfZmx1c2hfYWxsLAogCQkuZGlzYWJsZSA9IGwyY19kaXNhYmxlLAogCQkuc3luYyA9IGwyYzIxMF9zeW5jLAotCQkucmVzdW1lID0gbDJjMjEwX3Jlc3VtZSwKKwkJLnJlc3VtZSA9IGwyY19yZXN1bWUsCiAJfSwKIH07CiAKQEAgLTQ2Niw3ICs0MTYsNyBAQAogCQkuZmx1c2hfYWxsID0gbDJjMjIwX2ZsdXNoX2FsbCwKIAkJLmRpc2FibGUgPSBsMmNfZGlzYWJsZSwKIAkJLnN5bmMgPSBsMmMyMjBfc3luYywKLQkJLnJlc3VtZSA9IGwyYzIxMF9yZXN1bWUsCisJCS5yZXN1bWUgPSBsMmNfcmVzdW1lLAogCX0sCiB9OwogCkBAIC02MTUsMzkgKzU2NSwyOSBAQAogCQkJCQkJCUwzMTBfUE9XRVJfQ1RSTCk7CiB9CiAKLXN0YXRpYyB2b2lkIGwyYzMxMF9yZXN1bWUodm9pZCkKK3N0YXRpYyB2b2lkIGwyYzMxMF9jb25maWd1cmUodm9pZCBfX2lvbWVtICpiYXNlKQogewotCXZvaWQgX19pb21lbSAqYmFzZSA9IGwyeDBfYmFzZTsKKwl1bnNpZ25lZCByZXZpc2lvbjsKIAotCWlmICghKHJlYWRsX3JlbGF4ZWQoYmFzZSArIEwyWDBfQ1RSTCkgJiBMMlgwX0NUUkxfRU4pKSB7Ci0JCXVuc2lnbmVkIHJldmlzaW9uOworCS8qIHJlc3RvcmUgcGwzMTAgc2V0dXAgKi8KKwlsMmNfd3JpdGVfc2VjKGwyeDBfc2F2ZWRfcmVncy50YWdfbGF0ZW5jeSwgYmFzZSwKKwkJICAgICAgTDMxMF9UQUdfTEFURU5DWV9DVFJMKTsKKwlsMmNfd3JpdGVfc2VjKGwyeDBfc2F2ZWRfcmVncy5kYXRhX2xhdGVuY3ksIGJhc2UsCisJCSAgICAgIEwzMTBfREFUQV9MQVRFTkNZX0NUUkwpOworCWwyY193cml0ZV9zZWMobDJ4MF9zYXZlZF9yZWdzLmZpbHRlcl9lbmQsIGJhc2UsCisJCSAgICAgIEwzMTBfQUREUl9GSUxURVJfRU5EKTsKKwlsMmNfd3JpdGVfc2VjKGwyeDBfc2F2ZWRfcmVncy5maWx0ZXJfc3RhcnQsIGJhc2UsCisJCSAgICAgIEwzMTBfQUREUl9GSUxURVJfU1RBUlQpOwogCi0JCS8qIHJlc3RvcmUgcGwzMTAgc2V0dXAgKi8KLQkJd3JpdGVsX3JlbGF4ZWQobDJ4MF9zYXZlZF9yZWdzLnRhZ19sYXRlbmN5LAotCQkJICAgICAgIGJhc2UgKyBMMzEwX1RBR19MQVRFTkNZX0NUUkwpOwotCQl3cml0ZWxfcmVsYXhlZChsMngwX3NhdmVkX3JlZ3MuZGF0YV9sYXRlbmN5LAotCQkJICAgICAgIGJhc2UgKyBMMzEwX0RBVEFfTEFURU5DWV9DVFJMKTsKLQkJd3JpdGVsX3JlbGF4ZWQobDJ4MF9zYXZlZF9yZWdzLmZpbHRlcl9lbmQsCi0JCQkgICAgICAgYmFzZSArIEwzMTBfQUREUl9GSUxURVJfRU5EKTsKLQkJd3JpdGVsX3JlbGF4ZWQobDJ4MF9zYXZlZF9yZWdzLmZpbHRlcl9zdGFydCwKLQkJCSAgICAgICBiYXNlICsgTDMxMF9BRERSX0ZJTFRFUl9TVEFSVCk7CisJcmV2aXNpb24gPSByZWFkbF9yZWxheGVkKGJhc2UgKyBMMlgwX0NBQ0hFX0lEKSAmCisJCQkJIEwyWDBfQ0FDSEVfSURfUlRMX01BU0s7CiAKLQkJcmV2aXNpb24gPSByZWFkbF9yZWxheGVkKGJhc2UgKyBMMlgwX0NBQ0hFX0lEKSAmCi0JCQkJTDJYMF9DQUNIRV9JRF9SVExfTUFTSzsKLQotCQlpZiAocmV2aXNpb24gPj0gTDMxMF9DQUNIRV9JRF9SVExfUjJQMCkKLQkJCWwyY193cml0ZV9zZWMobDJ4MF9zYXZlZF9yZWdzLnByZWZldGNoX2N0cmwsIGJhc2UsCi0JCQkJICAgICAgTDMxMF9QUkVGRVRDSF9DVFJMKTsKLQkJaWYgKHJldmlzaW9uID49IEwzMTBfQ0FDSEVfSURfUlRMX1IzUDApCi0JCQlsMmNfd3JpdGVfc2VjKGwyeDBfc2F2ZWRfcmVncy5wd3JfY3RybCwgYmFzZSwKLQkJCQkgICAgICBMMzEwX1BPV0VSX0NUUkwpOwotCi0JCWwyY19lbmFibGUoYmFzZSwgbDJ4MF9zYXZlZF9yZWdzLmF1eF9jdHJsLCA4KTsKLQotCQkvKiBSZS1lbmFibGUgZnVsbC1saW5lLW9mLXplcm9zIGZvciBDb3J0ZXgtQTkgKi8KLQkJaWYgKGwyeDBfc2F2ZWRfcmVncy5hdXhfY3RybCAmIEwzMTBfQVVYX0NUUkxfRlVMTF9MSU5FX1pFUk8pCi0JCQlzZXRfYXV4Y3IoZ2V0X2F1eGNyKCkgfCBCSVQoMykgfCBCSVQoMikgfCBCSVQoMSkpOwotCX0KKwlpZiAocmV2aXNpb24gPj0gTDMxMF9DQUNIRV9JRF9SVExfUjJQMCkKKwkJbDJjX3dyaXRlX3NlYyhsMngwX3NhdmVkX3JlZ3MucHJlZmV0Y2hfY3RybCwgYmFzZSwKKwkJCSAgICAgIEwzMTBfUFJFRkVUQ0hfQ1RSTCk7CisJaWYgKHJldmlzaW9uID49IEwzMTBfQ0FDSEVfSURfUlRMX1IzUDApCisJCWwyY193cml0ZV9zZWMobDJ4MF9zYXZlZF9yZWdzLnB3cl9jdHJsLCBiYXNlLAorCQkJICAgICAgTDMxMF9QT1dFUl9DVFJMKTsKIH0KIAogc3RhdGljIGludCBsMmMzMTBfY3B1X2VuYWJsZV9mbHooc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3QsIHZvaWQgKmRhdGEpCkBAIC02OTksNiArNjM5LDIzIEBACiAJCWF1eCAmPSB+KEwzMTBfQVVYX0NUUkxfRlVMTF9MSU5FX1pFUk8gfCBMMzEwX0FVWF9DVFJMX0VBUkxZX0JSRVNQKTsKIAl9CiAKKwkvKiByM3AwIG9yIGxhdGVyIGhhcyBwb3dlciBjb250cm9sIHJlZ2lzdGVyICovCisJaWYgKHJldiA+PSBMMzEwX0NBQ0hFX0lEX1JUTF9SM1AwKQorCQlsMngwX3NhdmVkX3JlZ3MucHdyX2N0cmwgPSBMMzEwX0RZTkFNSUNfQ0xLX0dBVElOR19FTiB8CisJCQkJCQlMMzEwX1NUTkRCWV9NT0RFX0VOOworCisJLyoKKwkgKiBBbHdheXMgZW5hYmxlIG5vbi1zZWN1cmUgYWNjZXNzIHRvIHRoZSBsb2NrZG93biByZWdpc3RlcnMgLQorCSAqIHdlIHdyaXRlIHRvIHRoZW0gYXMgcGFydCBvZiB0aGUgTDJDIGVuYWJsZSBzZXF1ZW5jZSBzbyB0aGV5CisJICogbmVlZCB0byBiZSBhY2Nlc3NpYmxlLgorCSAqLworCWF1eCB8PSBMMzEwX0FVWF9DVFJMX05TX0xPQ0tET1dOOworCisJbDJjX2VuYWJsZShiYXNlLCBhdXgsIG51bV9sb2NrKTsKKworCS8qIFJlYWQgYmFjayByZXN1bHRpbmcgQVVYX0NUUkwgdmFsdWUgYXMgaXQgY291bGQgaGF2ZSBiZWVuIGFsdGVyZWQuICovCisJYXV4ID0gcmVhZGxfcmVsYXhlZChiYXNlICsgTDJYMF9BVVhfQ1RSTCk7CisKIAlpZiAoYXV4ICYgKEwzMTBfQVVYX0NUUkxfREFUQV9QUkVGRVRDSCB8IEwzMTBfQVVYX0NUUkxfSU5TVFJfUFJFRkVUQ0gpKSB7CiAJCXUzMiBwcmVmZXRjaCA9IHJlYWRsX3JlbGF4ZWQoYmFzZSArIEwzMTBfUFJFRkVUQ0hfQ1RSTCk7CiAKQEAgLTcxMiwyMyArNjY5LDEyIEBACiAJaWYgKHJldiA+PSBMMzEwX0NBQ0hFX0lEX1JUTF9SM1AwKSB7CiAJCXUzMiBwb3dlcl9jdHJsOwogCi0JCWwyY193cml0ZV9zZWMoTDMxMF9EWU5BTUlDX0NMS19HQVRJTkdfRU4gfCBMMzEwX1NUTkRCWV9NT0RFX0VOLAotCQkJICAgICAgYmFzZSwgTDMxMF9QT1dFUl9DVFJMKTsKIAkJcG93ZXJfY3RybCA9IHJlYWRsX3JlbGF4ZWQoYmFzZSArIEwzMTBfUE9XRVJfQ1RSTCk7CiAJCXByX2luZm8oIkwyQy0zMTAgZHluYW1pYyBjbG9jayBnYXRpbmcgJXNhYmxlZCwgc3RhbmRieSBtb2RlICVzYWJsZWRcbiIsCiAJCQlwb3dlcl9jdHJsICYgTDMxMF9EWU5BTUlDX0NMS19HQVRJTkdfRU4gPyAiZW4iIDogImRpcyIsCiAJCQlwb3dlcl9jdHJsICYgTDMxMF9TVE5EQllfTU9ERV9FTiA/ICJlbiIgOiAiZGlzIik7CiAJfQogCi0JLyoKLQkgKiBBbHdheXMgZW5hYmxlIG5vbi1zZWN1cmUgYWNjZXNzIHRvIHRoZSBsb2NrZG93biByZWdpc3RlcnMgLQotCSAqIHdlIHdyaXRlIHRvIHRoZW0gYXMgcGFydCBvZiB0aGUgTDJDIGVuYWJsZSBzZXF1ZW5jZSBzbyB0aGV5Ci0JICogbmVlZCB0byBiZSBhY2Nlc3NpYmxlLgotCSAqLwotCWF1eCB8PSBMMzEwX0FVWF9DVFJMX05TX0xPQ0tET1dOOwotCi0JbDJjX2VuYWJsZShiYXNlLCBhdXgsIG51bV9sb2NrKTsKLQogCWlmIChhdXggJiBMMzEwX0FVWF9DVFJMX0ZVTExfTElORV9aRVJPKSB7CiAJCXNldF9hdXhjcihnZXRfYXV4Y3IoKSB8IEJJVCgzKSB8IEJJVCgyKSB8IEJJVCgxKSk7CiAJCWNwdV9ub3RpZmllcihsMmMzMTBfY3B1X2VuYWJsZV9mbHosIDApOwpAQCAtNzYwLDExICs3MDYsMTEgQEAKIAogCWlmIChyZXZpc2lvbiA+PSBMMzEwX0NBQ0hFX0lEX1JUTF9SM1AwICYmCiAJICAgIHJldmlzaW9uIDwgTDMxMF9DQUNIRV9JRF9SVExfUjNQMikgewotCQl1MzIgdmFsID0gcmVhZGxfcmVsYXhlZChiYXNlICsgTDMxMF9QUkVGRVRDSF9DVFJMKTsKKwkJdTMyIHZhbCA9IGwyeDBfc2F2ZWRfcmVncy5wcmVmZXRjaF9jdHJsOwogCQkvKiBJIGRvbid0IHRoaW5rIGJpdDIzIGlzIHJlcXVpcmVkIGhlcmUuLi4gYnV0IGlNWDYgZG9lcyBzbyAqLwogCQlpZiAodmFsICYgKEJJVCgzMCkgfCBCSVQoMjMpKSkgewogCQkJdmFsICY9IH4oQklUKDMwKSB8IEJJVCgyMykpOwotCQkJbDJjX3dyaXRlX3NlYyh2YWwsIGJhc2UsIEwzMTBfUFJFRkVUQ0hfQ1RSTCk7CisJCQlsMngwX3NhdmVkX3JlZ3MucHJlZmV0Y2hfY3RybCA9IHZhbDsKIAkJCWVycmF0YVtuKytdID0gIjc1MjI3MSI7CiAJCX0KIAl9CkBAIC04MDAsNiArNzQ2LDE1IEBACiAJbDJjX2Rpc2FibGUoKTsKIH0KIAorc3RhdGljIHZvaWQgbDJjMzEwX3Jlc3VtZSh2b2lkKQoreworCWwyY19yZXN1bWUoKTsKKworCS8qIFJlLWVuYWJsZSBmdWxsLWxpbmUtb2YtemVyb3MgZm9yIENvcnRleC1BOSAqLworCWlmIChsMngwX3NhdmVkX3JlZ3MuYXV4X2N0cmwgJiBMMzEwX0FVWF9DVFJMX0ZVTExfTElORV9aRVJPKQorCQlzZXRfYXV4Y3IoZ2V0X2F1eGNyKCkgfCBCSVQoMykgfCBCSVQoMikgfCBCSVQoMSkpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGwyY19pbml0X2RhdGEgbDJjMzEwX2luaXRfZm5zIF9faW5pdGNvbnN0ID0gewogCS50eXBlID0gIkwyQy0zMTAiLAogCS53YXlfc2l6ZV8wID0gU1pfOEssCkBAIC04MDcsNiArNzYyLDcgQEAKIAkuZW5hYmxlID0gbDJjMzEwX2VuYWJsZSwKIAkuZml4dXAgPSBsMmMzMTBfZml4dXAsCiAJLnNhdmUgPSBsMmMzMTBfc2F2ZSwKKwkuY29uZmlndXJlID0gbDJjMzEwX2NvbmZpZ3VyZSwKIAkub3V0ZXJfY2FjaGUgPSB7CiAJCS5pbnZfcmFuZ2UgPSBsMmMyMTBfaW52X3JhbmdlLAogCQkuY2xlYW5fcmFuZ2UgPSBsMmMyMTBfY2xlYW5fcmFuZ2UsCkBAIC04MTgsMTQgKzc3NCwyMiBAQAogCX0sCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXQgX19sMmNfaW5pdChjb25zdCBzdHJ1Y3QgbDJjX2luaXRfZGF0YSAqZGF0YSwKLQl1MzIgYXV4X3ZhbCwgdTMyIGF1eF9tYXNrLCB1MzIgY2FjaGVfaWQpCitzdGF0aWMgaW50IF9faW5pdCBfX2wyY19pbml0KGNvbnN0IHN0cnVjdCBsMmNfaW5pdF9kYXRhICpkYXRhLAorCQkJICAgICB1MzIgYXV4X3ZhbCwgdTMyIGF1eF9tYXNrLCB1MzIgY2FjaGVfaWQpCiB7CiAJc3RydWN0IG91dGVyX2NhY2hlX2ZucyBmbnM7CiAJdW5zaWduZWQgd2F5X3NpemVfYml0cywgd2F5czsKIAl1MzIgYXV4LCBvbGRfYXV4OwogCiAJLyoKKwkgKiBTYXZlIHRoZSBwb2ludGVyIGdsb2JhbGx5IHNvIHRoYXQgY2FsbGJhY2tzIHdoaWNoIGRvIG5vdCByZWNlaXZlCisJICogY29udGV4dCBmcm9tIGNhbGxlcnMgY2FuIGFjY2VzcyB0aGUgc3RydWN0dXJlLgorCSAqLworCWwyeDBfZGF0YSA9IGttZW1kdXAoZGF0YSwgc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsMngwX2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKIAkgKiBTYW5pdHkgY2hlY2sgdGhlIGF1eCB2YWx1ZXMuICBhdXhfbWFzayBpcyB0aGUgYml0cyB3ZSBwcmVzZXJ2ZQogCSAqIGZyb20gcmVhZGluZyB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIsIGFuZCBhdXhfdmFsIGlzIHRoZSBiaXRzIHdlCiAJICogc2V0LgpAQCAtODg0LDYgKzg0OCw3IEBACiAKIAlmbnMgPSBkYXRhLT5vdXRlcl9jYWNoZTsKIAlmbnMud3JpdGVfc2VjID0gb3V0ZXJfY2FjaGUud3JpdGVfc2VjOworCWZucy5jb25maWd1cmUgPSBvdXRlcl9jYWNoZS5jb25maWd1cmU7CiAJaWYgKGRhdGEtPmZpeHVwKQogCQlkYXRhLT5maXh1cChsMngwX2Jhc2UsIGNhY2hlX2lkLCAmZm5zKTsKIApAQCAtOTEwLDYgKzg3NSw4IEBACiAJCWRhdGEtPnR5cGUsIHdheXMsIGwyeDBfc2l6ZSA+PiAxMCk7CiAJcHJfaW5mbygiJXM6IENBQ0hFX0lEIDB4JTA4eCwgQVVYX0NUUkwgMHglMDh4XG4iLAogCQlkYXRhLT50eXBlLCBjYWNoZV9pZCwgYXV4KTsKKworCXJldHVybiAwOwogfQogCiB2b2lkIF9faW5pdCBsMngwX2luaXQodm9pZCBfX2lvbWVtICpiYXNlLCB1MzIgYXV4X3ZhbCwgdTMyIGF1eF9tYXNrKQpAQCAtOTM2LDYgKzkwMywxMCBAQAogCQlicmVhazsKIAl9CiAKKwkvKiBSZWFkIGJhY2sgY3VycmVudCAoZGVmYXVsdCkgaGFyZHdhcmUgY29uZmlndXJhdGlvbiAqLworCWlmIChkYXRhLT5zYXZlKQorCQlkYXRhLT5zYXZlKGwyeDBfYmFzZSk7CisKIAlfX2wyY19pbml0KGRhdGEsIGF1eF92YWwsIGF1eF9tYXNrLCBjYWNoZV9pZCk7CiB9CiAKQEAgLTk3OSw3ICs5NTAsNyBAQAogCS8qIEFsbCB0aGVzZSBsMiBjYWNoZXMgaGF2ZSB0aGUgc2FtZSBsaW5lID0gYmxvY2sgc2l6ZSBhY3R1YWxseSAqLwogCWlmICghbGluZV9zaXplKSB7CiAJCWlmIChibG9ja19zaXplKSB7Ci0JCQkvKiBJZiBsaW5lc2l6ZSBpZiBub3QgZ2l2ZW4sIGl0IGlzIGVxdWFsIHRvIGJsb2Nrc2l6ZSAqLworCQkJLyogSWYgbGluZXNpemUgaXMgbm90IGdpdmVuLCBpdCBpcyBlcXVhbCB0byBibG9ja3NpemUgKi8KIAkJCWxpbmVfc2l6ZSA9IGJsb2NrX3NpemU7CiAJCX0gZWxzZSB7CiAJCQkvKiBGYWxsIGJhY2sgdG8ga25vd24gc2l6ZSAqLwpAQCAtMTEwMiw3ICsxMDczLDcgQEAKIAkJLmZsdXNoX2FsbCAgID0gbDJjMjEwX2ZsdXNoX2FsbCwKIAkJLmRpc2FibGUgICAgID0gbDJjX2Rpc2FibGUsCiAJCS5zeW5jICAgICAgICA9IGwyYzIxMF9zeW5jLAotCQkucmVzdW1lICAgICAgPSBsMmMyMTBfcmVzdW1lLAorCQkucmVzdW1lICAgICAgPSBsMmNfcmVzdW1lLAogCX0sCiB9OwogCkBAIC0xMTIwLDcgKzEwOTEsNyBAQAogCQkuZmx1c2hfYWxsICAgPSBsMmMyMjBfZmx1c2hfYWxsLAogCQkuZGlzYWJsZSAgICAgPSBsMmNfZGlzYWJsZSwKIAkJLnN5bmMgICAgICAgID0gbDJjMjIwX3N5bmMsCi0JCS5yZXN1bWUgICAgICA9IGwyYzIxMF9yZXN1bWUsCisJCS5yZXN1bWUgICAgICA9IGwyY19yZXN1bWUsCiAJfSwKIH07CiAKQEAgLTExMzEsMzIgKzExMDIsMzIgQEAKIAl1MzIgdGFnWzNdID0geyAwLCAwLCAwIH07CiAJdTMyIGZpbHRlclsyXSA9IHsgMCwgMCB9OwogCXUzMiBhc3NvYzsKKwl1MzIgcHJlZmV0Y2g7CisJdTMyIHZhbDsKIAlpbnQgcmV0OwogCiAJb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkobnAsICJhcm0sdGFnLWxhdGVuY3kiLCB0YWcsIEFSUkFZX1NJWkUodGFnKSk7CiAJaWYgKHRhZ1swXSAmJiB0YWdbMV0gJiYgdGFnWzJdKQotCQl3cml0ZWxfcmVsYXhlZCgKKwkJbDJ4MF9zYXZlZF9yZWdzLnRhZ19sYXRlbmN5ID0KIAkJCUwzMTBfTEFURU5DWV9DVFJMX1JEKHRhZ1swXSAtIDEpIHwKIAkJCUwzMTBfTEFURU5DWV9DVFJMX1dSKHRhZ1sxXSAtIDEpIHwKLQkJCUwzMTBfTEFURU5DWV9DVFJMX1NFVFVQKHRhZ1syXSAtIDEpLAotCQkJbDJ4MF9iYXNlICsgTDMxMF9UQUdfTEFURU5DWV9DVFJMKTsKKwkJCUwzMTBfTEFURU5DWV9DVFJMX1NFVFVQKHRhZ1syXSAtIDEpOwogCiAJb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkobnAsICJhcm0sZGF0YS1sYXRlbmN5IiwKIAkJCQkgICBkYXRhLCBBUlJBWV9TSVpFKGRhdGEpKTsKIAlpZiAoZGF0YVswXSAmJiBkYXRhWzFdICYmIGRhdGFbMl0pCi0JCXdyaXRlbF9yZWxheGVkKAorCQlsMngwX3NhdmVkX3JlZ3MuZGF0YV9sYXRlbmN5ID0KIAkJCUwzMTBfTEFURU5DWV9DVFJMX1JEKGRhdGFbMF0gLSAxKSB8CiAJCQlMMzEwX0xBVEVOQ1lfQ1RSTF9XUihkYXRhWzFdIC0gMSkgfAotCQkJTDMxMF9MQVRFTkNZX0NUUkxfU0VUVVAoZGF0YVsyXSAtIDEpLAotCQkJbDJ4MF9iYXNlICsgTDMxMF9EQVRBX0xBVEVOQ1lfQ1RSTCk7CisJCQlMMzEwX0xBVEVOQ1lfQ1RSTF9TRVRVUChkYXRhWzJdIC0gMSk7CiAKIAlvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShucCwgImFybSxmaWx0ZXItcmFuZ2VzIiwKIAkJCQkgICBmaWx0ZXIsIEFSUkFZX1NJWkUoZmlsdGVyKSk7CiAJaWYgKGZpbHRlclsxXSkgewotCQl3cml0ZWxfcmVsYXhlZChBTElHTihmaWx0ZXJbMF0gKyBmaWx0ZXJbMV0sIFNaXzFNKSwKLQkJCSAgICAgICBsMngwX2Jhc2UgKyBMMzEwX0FERFJfRklMVEVSX0VORCk7Ci0JCXdyaXRlbF9yZWxheGVkKChmaWx0ZXJbMF0gJiB+KFNaXzFNIC0gMSkpIHwgTDMxMF9BRERSX0ZJTFRFUl9FTiwKLQkJCSAgICAgICBsMngwX2Jhc2UgKyBMMzEwX0FERFJfRklMVEVSX1NUQVJUKTsKKwkJbDJ4MF9zYXZlZF9yZWdzLmZpbHRlcl9lbmQgPQorCQkJCQlBTElHTihmaWx0ZXJbMF0gKyBmaWx0ZXJbMV0sIFNaXzFNKTsKKwkJbDJ4MF9zYXZlZF9yZWdzLmZpbHRlcl9zdGFydCA9IChmaWx0ZXJbMF0gJiB+KFNaXzFNIC0gMSkpCisJCQkJCXwgTDMxMF9BRERSX0ZJTFRFUl9FTjsKIAl9CiAKIAlyZXQgPSBsMngwX2NhY2hlX3NpemVfb2ZfcGFyc2UobnAsIGF1eF92YWwsIGF1eF9tYXNrLCAmYXNzb2MsIFNaXzUxMkspOwpAQCAtMTE3OCw2ICsxMTQ5LDU4IEBACiAJCSAgICAgICBhc3NvYyk7CiAJCWJyZWFrOwogCX0KKworCXByZWZldGNoID0gbDJ4MF9zYXZlZF9yZWdzLnByZWZldGNoX2N0cmw7CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImFybSxkb3VibGUtbGluZWZpbGwiLCAmdmFsKTsKKwlpZiAocmV0ID09IDApIHsKKwkJaWYgKHZhbCkKKwkJCXByZWZldGNoIHw9IEwzMTBfUFJFRkVUQ0hfQ1RSTF9EQkxfTElORUZJTEw7CisJCWVsc2UKKwkJCXByZWZldGNoICY9IH5MMzEwX1BSRUZFVENIX0NUUkxfREJMX0xJTkVGSUxMOworCX0gZWxzZSBpZiAocmV0ICE9IC1FSU5WQUwpIHsKKwkJcHJfZXJyKCJMMkMtMzEwIE9GIGFybSxkb3VibGUtbGluZWZpbGwgcHJvcGVydHkgdmFsdWUgaXMgbWlzc2luZ1xuIik7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJhcm0sZG91YmxlLWxpbmVmaWxsLWluY3IiLCAmdmFsKTsKKwlpZiAocmV0ID09IDApIHsKKwkJaWYgKHZhbCkKKwkJCXByZWZldGNoIHw9IEwzMTBfUFJFRkVUQ0hfQ1RSTF9EQkxfTElORUZJTExfSU5DUjsKKwkJZWxzZQorCQkJcHJlZmV0Y2ggJj0gfkwzMTBfUFJFRkVUQ0hfQ1RSTF9EQkxfTElORUZJTExfSU5DUjsKKwl9IGVsc2UgaWYgKHJldCAhPSAtRUlOVkFMKSB7CisJCXByX2VycigiTDJDLTMxMCBPRiBhcm0sZG91YmxlLWxpbmVmaWxsLWluY3IgcHJvcGVydHkgdmFsdWUgaXMgbWlzc2luZ1xuIik7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJhcm0sZG91YmxlLWxpbmVmaWxsLXdyYXAiLCAmdmFsKTsKKwlpZiAocmV0ID09IDApIHsKKwkJaWYgKCF2YWwpCisJCQlwcmVmZXRjaCB8PSBMMzEwX1BSRUZFVENIX0NUUkxfREJMX0xJTkVGSUxMX1dSQVA7CisJCWVsc2UKKwkJCXByZWZldGNoICY9IH5MMzEwX1BSRUZFVENIX0NUUkxfREJMX0xJTkVGSUxMX1dSQVA7CisJfSBlbHNlIGlmIChyZXQgIT0gLUVJTlZBTCkgeworCQlwcl9lcnIoIkwyQy0zMTAgT0YgYXJtLGRvdWJsZS1saW5lZmlsbC13cmFwIHByb3BlcnR5IHZhbHVlIGlzIG1pc3NpbmdcbiIpOworCX0KKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiYXJtLHByZWZldGNoLWRyb3AiLCAmdmFsKTsKKwlpZiAocmV0ID09IDApIHsKKwkJaWYgKHZhbCkKKwkJCXByZWZldGNoIHw9IEwzMTBfUFJFRkVUQ0hfQ1RSTF9QUkVGRVRDSF9EUk9QOworCQllbHNlCisJCQlwcmVmZXRjaCAmPSB+TDMxMF9QUkVGRVRDSF9DVFJMX1BSRUZFVENIX0RST1A7CisJfSBlbHNlIGlmIChyZXQgIT0gLUVJTlZBTCkgeworCQlwcl9lcnIoIkwyQy0zMTAgT0YgYXJtLHByZWZldGNoLWRyb3AgcHJvcGVydHkgdmFsdWUgaXMgbWlzc2luZ1xuIik7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJhcm0scHJlZmV0Y2gtb2Zmc2V0IiwgJnZhbCk7CisJaWYgKHJldCA9PSAwKSB7CisJCXByZWZldGNoICY9IH5MMzEwX1BSRUZFVENIX0NUUkxfT0ZGU0VUX01BU0s7CisJCXByZWZldGNoIHw9IHZhbCAmIEwzMTBfUFJFRkVUQ0hfQ1RSTF9PRkZTRVRfTUFTSzsKKwl9IGVsc2UgaWYgKHJldCAhPSAtRUlOVkFMKSB7CisJCXByX2VycigiTDJDLTMxMCBPRiBhcm0scHJlZmV0Y2gtb2Zmc2V0IHByb3BlcnR5IHZhbHVlIGlzIG1pc3NpbmdcbiIpOworCX0KKworCWwyeDBfc2F2ZWRfcmVncy5wcmVmZXRjaF9jdHJsID0gcHJlZmV0Y2g7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbDJjX2luaXRfZGF0YSBvZl9sMmMzMTBfZGF0YSBfX2luaXRjb25zdCA9IHsKQEAgLTExODgsNiArMTIxMSw3IEBACiAJLmVuYWJsZSA9IGwyYzMxMF9lbmFibGUsCiAJLmZpeHVwID0gbDJjMzEwX2ZpeHVwLAogCS5zYXZlICA9IGwyYzMxMF9zYXZlLAorCS5jb25maWd1cmUgPSBsMmMzMTBfY29uZmlndXJlLAogCS5vdXRlcl9jYWNoZSA9IHsKIAkJLmludl9yYW5nZSAgID0gbDJjMjEwX2ludl9yYW5nZSwKIAkJLmNsZWFuX3JhbmdlID0gbDJjMjEwX2NsZWFuX3JhbmdlLApAQCAtMTIxNiw2ICsxMjQwLDcgQEAKIAkuZW5hYmxlID0gbDJjMzEwX2VuYWJsZSwKIAkuZml4dXAgPSBsMmMzMTBfZml4dXAsCiAJLnNhdmUgID0gbDJjMzEwX3NhdmUsCisJLmNvbmZpZ3VyZSA9IGwyYzMxMF9jb25maWd1cmUsCiAJLm91dGVyX2NhY2hlID0gewogCQkuaW52X3JhbmdlICAgPSBsMmMyMTBfaW52X3JhbmdlLAogCQkuY2xlYW5fcmFuZ2UgPSBsMmMyMTBfY2xlYW5fcmFuZ2UsCkBAIC0xMjMxLDcgKzEyNTYsNyBAQAogICogbm9uaW5jbHVzaXZlLCB3aGlsZSB0aGUgaGFyZHdhcmUgY2FjaGUgcmFuZ2Ugb3BlcmF0aW9ucyB1c2UKICAqIGluY2x1c2l2ZSBzdGFydCBhbmQgZW5kIGFkZHJlc3Nlcy4KICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2FsY19yYW5nZV9lbmQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhdXJvcmFfcmFuZ2VfZW5kKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCS8qCiAJICogTGltaXQgdGhlIG51bWJlciBvZiBjYWNoZSBsaW5lcyBwcm9jZXNzZWQgYXQgb25jZSwKQEAgLTEyNTAsMjUgKzEyNzUsMTMgQEAKIAlyZXR1cm4gZW5kOwogfQogCi0vKgotICogTWFrZSBzdXJlICdzdGFydCcgYW5kICdlbmQnIHJlZmVyZW5jZSB0aGUgc2FtZSBwYWdlLCBhcyBMMiBpcyBQSVBUCi0gKiBhbmQgcmFuZ2Ugb3BlcmF0aW9ucyBvbmx5IGRvIGEgVExCIGxvb2t1cCBvbiB0aGUgc3RhcnQgYWRkcmVzcy4KLSAqLwogc3RhdGljIHZvaWQgYXVyb3JhX3BhX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQpCisJCQkgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gbDJ4MF9iYXNlOworCXVuc2lnbmVkIGxvbmcgcmFuZ2VfZW5kOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmwyeDBfbG9jaywgZmxhZ3MpOwotCXdyaXRlbF9yZWxheGVkKHN0YXJ0LCBsMngwX2Jhc2UgKyBBVVJPUkFfUkFOR0VfQkFTRV9BRERSX1JFRyk7Ci0Jd3JpdGVsX3JlbGF4ZWQoZW5kLCBsMngwX2Jhc2UgKyBvZmZzZXQpOwotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMngwX2xvY2ssIGZsYWdzKTsKLQotCWNhY2hlX3N5bmMoKTsKLX0KLQotc3RhdGljIHZvaWQgYXVyb3JhX2ludl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKIAkvKgogCSAqIHJvdW5kIHN0YXJ0IGFuZCBlbmQgYWRyZXNzZXMgdXAgdG8gY2FjaGUgbGluZSBzaXplCiAJICovCkBAIC0xMjc2LDE1ICsxMjg5LDI0IEBACiAJZW5kID0gQUxJR04oZW5kLCBDQUNIRV9MSU5FX1NJWkUpOwogCiAJLyoKLQkgKiBJbnZhbGlkYXRlIGFsbCBmdWxsIGNhY2hlIGxpbmVzIGJldHdlZW4gJ3N0YXJ0JyBhbmQgJ2VuZCcuCisJICogcGVyZm9ybSBvcGVyYXRpb24gb24gYWxsIGZ1bGwgY2FjaGUgbGluZXMgYmV0d2VlbiAnc3RhcnQnIGFuZCAnZW5kJwogCSAqLwogCXdoaWxlIChzdGFydCA8IGVuZCkgewotCQl1bnNpZ25lZCBsb25nIHJhbmdlX2VuZCA9IGNhbGNfcmFuZ2VfZW5kKHN0YXJ0LCBlbmQpOwotCQlhdXJvcmFfcGFfcmFuZ2Uoc3RhcnQsIHJhbmdlX2VuZCAtIENBQ0hFX0xJTkVfU0laRSwKLQkJCQlBVVJPUkFfSU5WQUxfUkFOR0VfUkVHKTsKKwkJcmFuZ2VfZW5kID0gYXVyb3JhX3JhbmdlX2VuZChzdGFydCwgZW5kKTsKKworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmwyeDBfbG9jaywgZmxhZ3MpOworCQl3cml0ZWxfcmVsYXhlZChzdGFydCwgYmFzZSArIEFVUk9SQV9SQU5HRV9CQVNFX0FERFJfUkVHKTsKKwkJd3JpdGVsX3JlbGF4ZWQocmFuZ2VfZW5kIC0gQ0FDSEVfTElORV9TSVpFLCBiYXNlICsgb2Zmc2V0KTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwyeDBfbG9jaywgZmxhZ3MpOworCisJCXdyaXRlbF9yZWxheGVkKDAsIGJhc2UgKyBBVVJPUkFfU1lOQ19SRUcpOwogCQlzdGFydCA9IHJhbmdlX2VuZDsKIAl9CiB9CitzdGF0aWMgdm9pZCBhdXJvcmFfaW52X3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWF1cm9yYV9wYV9yYW5nZShzdGFydCwgZW5kLCBBVVJPUkFfSU5WQUxfUkFOR0VfUkVHKTsKK30KIAogc3RhdGljIHZvaWQgYXVyb3JhX2NsZWFuX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewpAQCAtMTI5MiwzNiArMTMxNCw0NyBAQAogCSAqIElmIEwyIGlzIGZvcmNlZCB0byBXVCwgdGhlIEwyIHdpbGwgYWx3YXlzIGJlIGNsZWFuIGFuZCB3ZQogCSAqIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4KIAkgKi8KLQlpZiAoIWwyX3d0X292ZXJyaWRlKSB7Ci0JCXN0YXJ0ICY9IH4oQ0FDSEVfTElORV9TSVpFIC0gMSk7Ci0JCWVuZCA9IEFMSUdOKGVuZCwgQ0FDSEVfTElORV9TSVpFKTsKLQkJd2hpbGUgKHN0YXJ0ICE9IGVuZCkgewotCQkJdW5zaWduZWQgbG9uZyByYW5nZV9lbmQgPSBjYWxjX3JhbmdlX2VuZChzdGFydCwgZW5kKTsKLQkJCWF1cm9yYV9wYV9yYW5nZShzdGFydCwgcmFuZ2VfZW5kIC0gQ0FDSEVfTElORV9TSVpFLAotCQkJCQlBVVJPUkFfQ0xFQU5fUkFOR0VfUkVHKTsKLQkJCXN0YXJ0ID0gcmFuZ2VfZW5kOwotCQl9Ci0JfQorCWlmICghbDJfd3Rfb3ZlcnJpZGUpCisJCWF1cm9yYV9wYV9yYW5nZShzdGFydCwgZW5kLCBBVVJPUkFfQ0xFQU5fUkFOR0VfUkVHKTsKIH0KIAogc3RhdGljIHZvaWQgYXVyb3JhX2ZsdXNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCXN0YXJ0ICY9IH4oQ0FDSEVfTElORV9TSVpFIC0gMSk7Ci0JZW5kID0gQUxJR04oZW5kLCBDQUNIRV9MSU5FX1NJWkUpOwotCXdoaWxlIChzdGFydCAhPSBlbmQpIHsKLQkJdW5zaWduZWQgbG9uZyByYW5nZV9lbmQgPSBjYWxjX3JhbmdlX2VuZChzdGFydCwgZW5kKTsKLQkJLyoKLQkJICogSWYgTDIgaXMgZm9yY2VkIHRvIFdULCB0aGUgTDIgd2lsbCBhbHdheXMgYmUgY2xlYW4gYW5kIHdlCi0JCSAqIGp1c3QgbmVlZCB0byBpbnZhbGlkYXRlLgotCQkgKi8KLQkJaWYgKGwyX3d0X292ZXJyaWRlKQotCQkJYXVyb3JhX3BhX3JhbmdlKHN0YXJ0LCByYW5nZV9lbmQgLSBDQUNIRV9MSU5FX1NJWkUsCi0JCQkJCQkJQVVST1JBX0lOVkFMX1JBTkdFX1JFRyk7Ci0JCWVsc2UKLQkJCWF1cm9yYV9wYV9yYW5nZShzdGFydCwgcmFuZ2VfZW5kIC0gQ0FDSEVfTElORV9TSVpFLAotCQkJCQkJCUFVUk9SQV9GTFVTSF9SQU5HRV9SRUcpOwotCQlzdGFydCA9IHJhbmdlX2VuZDsKLQl9CisJaWYgKGwyX3d0X292ZXJyaWRlKQorCQlhdXJvcmFfcGFfcmFuZ2Uoc3RhcnQsIGVuZCwgQVVST1JBX0lOVkFMX1JBTkdFX1JFRyk7CisJZWxzZQorCQlhdXJvcmFfcGFfcmFuZ2Uoc3RhcnQsIGVuZCwgQVVST1JBX0ZMVVNIX1JBTkdFX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIGF1cm9yYV9mbHVzaF9hbGwodm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBsMngwX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIGNsZWFuIGFsbCB3YXlzICovCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZsMngwX2xvY2ssIGZsYWdzKTsKKwlfX2wyY19vcF93YXkoYmFzZSArIEwyWDBfQ0xFQU5fSU5WX1dBWSk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmwyeDBfbG9jaywgZmxhZ3MpOworCisJd3JpdGVsX3JlbGF4ZWQoMCwgYmFzZSArIEFVUk9SQV9TWU5DX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIGF1cm9yYV9jYWNoZV9zeW5jKHZvaWQpCit7CisJd3JpdGVsX3JlbGF4ZWQoMCwgbDJ4MF9iYXNlICsgQVVST1JBX1NZTkNfUkVHKTsKK30KKworc3RhdGljIHZvaWQgYXVyb3JhX2Rpc2FibGUodm9pZCkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBsMngwX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmbDJ4MF9sb2NrLCBmbGFncyk7CisJX19sMmNfb3Bfd2F5KGJhc2UgKyBMMlgwX0NMRUFOX0lOVl9XQVkpOworCXdyaXRlbF9yZWxheGVkKDAsIGJhc2UgKyBBVVJPUkFfU1lOQ19SRUcpOworCWwyY193cml0ZV9zZWMoMCwgYmFzZSwgTDJYMF9DVFJMKTsKKwlkc2Ioc3QpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZsMngwX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgYXVyb3JhX3NhdmUodm9pZCBfX2lvbWVtICpiYXNlKQpAQCAtMTMzMCwxNiArMTM2Myw2IEBACiAJbDJ4MF9zYXZlZF9yZWdzLmF1eF9jdHJsID0gcmVhZGxfcmVsYXhlZChiYXNlICsgTDJYMF9BVVhfQ1RSTCk7CiB9CiAKLXN0YXRpYyB2b2lkIGF1cm9yYV9yZXN1bWUodm9pZCkKLXsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBsMngwX2Jhc2U7Ci0KLQlpZiAoIShyZWFkbChiYXNlICsgTDJYMF9DVFJMKSAmIEwyWDBfQ1RSTF9FTikpIHsKLQkJd3JpdGVsX3JlbGF4ZWQobDJ4MF9zYXZlZF9yZWdzLmF1eF9jdHJsLCBiYXNlICsgTDJYMF9BVVhfQ1RSTCk7Ci0JCXdyaXRlbF9yZWxheGVkKGwyeDBfc2F2ZWRfcmVncy5jdHJsLCBiYXNlICsgTDJYMF9DVFJMKTsKLQl9Ci19Ci0KIC8qCiAgKiBGb3IgQXVyb3JhIGNhY2hlIGluIG5vIG91dGVyIG1vZGUsIGVuYWJsZSB2aWEgdGhlIENQMTUgY29wcm9jZXNzb3IKICAqIGJyb2FkY2FzdGluZyBvZiBjYWNoZSBjb21tYW5kcyB0byBMMi4KQEAgLTEzOTgsMTAgKzE0MjEsMTAgQEAKIAkJLmludl9yYW5nZSAgID0gYXVyb3JhX2ludl9yYW5nZSwKIAkJLmNsZWFuX3JhbmdlID0gYXVyb3JhX2NsZWFuX3JhbmdlLAogCQkuZmx1c2hfcmFuZ2UgPSBhdXJvcmFfZmx1c2hfcmFuZ2UsCi0JCS5mbHVzaF9hbGwgICA9IGwyeDBfZmx1c2hfYWxsLAotCQkuZGlzYWJsZSAgICAgPSBsMngwX2Rpc2FibGUsCi0JCS5zeW5jICAgICAgICA9IGwyeDBfY2FjaGVfc3luYywKLQkJLnJlc3VtZSAgICAgID0gYXVyb3JhX3Jlc3VtZSwKKwkJLmZsdXNoX2FsbCAgID0gYXVyb3JhX2ZsdXNoX2FsbCwKKwkJLmRpc2FibGUgICAgID0gYXVyb3JhX2Rpc2FibGUsCisJCS5zeW5jCSAgICAgPSBhdXJvcmFfY2FjaGVfc3luYywKKwkJLnJlc3VtZSAgICAgID0gbDJjX3Jlc3VtZSwKIAl9LAogfTsKIApAQCAtMTQxNCw3ICsxNDM3LDcgQEAKIAkuZml4dXAgPSBhdXJvcmFfZml4dXAsCiAJLnNhdmUgID0gYXVyb3JhX3NhdmUsCiAJLm91dGVyX2NhY2hlID0gewotCQkucmVzdW1lICAgICAgPSBhdXJvcmFfcmVzdW1lLAorCQkucmVzdW1lICAgICAgPSBsMmNfcmVzdW1lLAogCX0sCiB9OwogCkBAIC0xNTYyLDYgKzE1ODUsNyBAQAogCS5vZl9wYXJzZSA9IGwyYzMxMF9vZl9wYXJzZSwKIAkuZW5hYmxlID0gbDJjMzEwX2VuYWJsZSwKIAkuc2F2ZSAgPSBsMmMzMTBfc2F2ZSwKKwkuY29uZmlndXJlID0gbDJjMzEwX2NvbmZpZ3VyZSwKIAkub3V0ZXJfY2FjaGUgPSB7CiAJCS5pbnZfcmFuZ2UgICA9IGJjbV9pbnZfcmFuZ2UsCiAJCS5jbGVhbl9yYW5nZSA9IGJjbV9jbGVhbl9yYW5nZSwKQEAgLTE1ODMsMTggKzE2MDcsMTIgQEAKIAkJcmVhZGxfcmVsYXhlZChiYXNlICsgTDMxMF9QUkVGRVRDSF9DVFJMKTsKIH0KIAotc3RhdGljIHZvaWQgdGF1cm9zM19yZXN1bWUodm9pZCkKK3N0YXRpYyB2b2lkIHRhdXJvczNfY29uZmlndXJlKHZvaWQgX19pb21lbSAqYmFzZSkKIHsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBsMngwX2Jhc2U7Ci0KLQlpZiAoIShyZWFkbF9yZWxheGVkKGJhc2UgKyBMMlgwX0NUUkwpICYgTDJYMF9DVFJMX0VOKSkgewotCQl3cml0ZWxfcmVsYXhlZChsMngwX3NhdmVkX3JlZ3MuYXV4Ml9jdHJsLAotCQkJICAgICAgIGJhc2UgKyBUQVVST1MzX0FVWDJfQ1RSTCk7Ci0JCXdyaXRlbF9yZWxheGVkKGwyeDBfc2F2ZWRfcmVncy5wcmVmZXRjaF9jdHJsLAotCQkJICAgICAgIGJhc2UgKyBMMzEwX1BSRUZFVENIX0NUUkwpOwotCi0JCWwyY19lbmFibGUoYmFzZSwgbDJ4MF9zYXZlZF9yZWdzLmF1eF9jdHJsLCA4KTsKLQl9CisJd3JpdGVsX3JlbGF4ZWQobDJ4MF9zYXZlZF9yZWdzLmF1eDJfY3RybCwKKwkJICAgICAgIGJhc2UgKyBUQVVST1MzX0FVWDJfQ1RSTCk7CisJd3JpdGVsX3JlbGF4ZWQobDJ4MF9zYXZlZF9yZWdzLnByZWZldGNoX2N0cmwsCisJCSAgICAgICBiYXNlICsgTDMxMF9QUkVGRVRDSF9DVFJMKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBsMmNfaW5pdF9kYXRhIG9mX3RhdXJvczNfZGF0YSBfX2luaXRjb25zdCA9IHsKQEAgLTE2MDMsOSArMTYyMSwxMCBAQAogCS5udW1fbG9jayA9IDgsCiAJLmVuYWJsZSA9IGwyY19lbmFibGUsCiAJLnNhdmUgID0gdGF1cm9zM19zYXZlLAorCS5jb25maWd1cmUgPSB0YXVyb3MzX2NvbmZpZ3VyZSwKIAkvKiBUYXVyb3MzIGJyb2FkY2FzdHMgTDEgY2FjaGUgb3BlcmF0aW9ucyB0byBMMiAqLwogCS5vdXRlcl9jYWNoZSA9IHsKLQkJLnJlc3VtZSAgICAgID0gdGF1cm9zM19yZXN1bWUsCisJCS5yZXN1bWUgICAgICA9IGwyY19yZXN1bWUsCiAJfSwKIH07CiAKQEAgLTE2NjEsNiArMTY4MCwxMCBAQAogCWlmICghb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAiY2FjaGUtdW5pZmllZCIpKQogCQlwcl9lcnIoIkwyQzogZGV2aWNlIHRyZWUgb21pdHMgdG8gc3BlY2lmeSB1bmlmaWVkIGNhY2hlXG4iKTsKIAorCS8qIFJlYWQgYmFjayBjdXJyZW50IChkZWZhdWx0KSBoYXJkd2FyZSBjb25maWd1cmF0aW9uICovCisJaWYgKGRhdGEtPnNhdmUpCisJCWRhdGEtPnNhdmUobDJ4MF9iYXNlKTsKKwogCS8qIEwyIGNvbmZpZ3VyYXRpb24gY2FuIG9ubHkgYmUgY2hhbmdlZCBpZiB0aGUgY2FjaGUgaXMgZGlzYWJsZWQgKi8KIAlpZiAoIShyZWFkbF9yZWxheGVkKGwyeDBfYmFzZSArIEwyWDBfQ1RSTCkgJiBMMlgwX0NUUkxfRU4pKQogCQlpZiAoZGF0YS0+b2ZfcGFyc2UpCkBAIC0xNjcxLDggKzE2OTQsNiBAQAogCWVsc2UKIAkJY2FjaGVfaWQgPSByZWFkbF9yZWxheGVkKGwyeDBfYmFzZSArIEwyWDBfQ0FDSEVfSUQpOwogCi0JX19sMmNfaW5pdChkYXRhLCBhdXhfdmFsLCBhdXhfbWFzaywgY2FjaGVfaWQpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIF9fbDJjX2luaXQoZGF0YSwgYXV4X3ZhbCwgYXV4X21hc2ssIGNhY2hlX2lkKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29udGV4dC5jIGIvYXJjaC9hcm0vbW0vY29udGV4dC5jCmluZGV4IDkxODkyNTYuLjg0NTc2OWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvbnRleHQuYworKysgYi9hcmNoL2FybS9tbS9jb250ZXh0LmMKQEAgLTE0NCwyMSArMTQ0LDE3IEBACiAJLyogVXBkYXRlIHRoZSBsaXN0IG9mIHJlc2VydmVkIEFTSURzIGFuZCB0aGUgQVNJRCBiaXRtYXAuICovCiAJYml0bWFwX2NsZWFyKGFzaWRfbWFwLCAwLCBOVU1fVVNFUl9BU0lEUyk7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKLQkJaWYgKGkgPT0gY3B1KSB7Ci0JCQlhc2lkID0gMDsKLQkJfSBlbHNlIHsKLQkJCWFzaWQgPSBhdG9taWM2NF94Y2hnKCZwZXJfY3B1KGFjdGl2ZV9hc2lkcywgaSksIDApOwotCQkJLyoKLQkJCSAqIElmIHRoaXMgQ1BVIGhhcyBhbHJlYWR5IGJlZW4gdGhyb3VnaCBhCi0JCQkgKiByb2xsb3ZlciwgYnV0IGhhc24ndCBydW4gYW5vdGhlciB0YXNrIGluCi0JCQkgKiB0aGUgbWVhbnRpbWUsIHdlIG11c3QgcHJlc2VydmUgaXRzIHJlc2VydmVkCi0JCQkgKiBBU0lELCBhcyB0aGlzIGlzIHRoZSBvbmx5IHRyYWNlIHdlIGhhdmUgb2YKLQkJCSAqIHRoZSBwcm9jZXNzIGl0IGlzIHN0aWxsIHJ1bm5pbmcuCi0JCQkgKi8KLQkJCWlmIChhc2lkID09IDApCi0JCQkJYXNpZCA9IHBlcl9jcHUocmVzZXJ2ZWRfYXNpZHMsIGkpOwotCQkJX19zZXRfYml0KGFzaWQgJiB+QVNJRF9NQVNLLCBhc2lkX21hcCk7Ci0JCX0KKwkJYXNpZCA9IGF0b21pYzY0X3hjaGcoJnBlcl9jcHUoYWN0aXZlX2FzaWRzLCBpKSwgMCk7CisJCS8qCisJCSAqIElmIHRoaXMgQ1BVIGhhcyBhbHJlYWR5IGJlZW4gdGhyb3VnaCBhCisJCSAqIHJvbGxvdmVyLCBidXQgaGFzbid0IHJ1biBhbm90aGVyIHRhc2sgaW4KKwkJICogdGhlIG1lYW50aW1lLCB3ZSBtdXN0IHByZXNlcnZlIGl0cyByZXNlcnZlZAorCQkgKiBBU0lELCBhcyB0aGlzIGlzIHRoZSBvbmx5IHRyYWNlIHdlIGhhdmUgb2YKKwkJICogdGhlIHByb2Nlc3MgaXQgaXMgc3RpbGwgcnVubmluZy4KKwkJICovCisJCWlmIChhc2lkID09IDApCisJCQlhc2lkID0gcGVyX2NwdShyZXNlcnZlZF9hc2lkcywgaSk7CisJCV9fc2V0X2JpdChhc2lkICYgfkFTSURfTUFTSywgYXNpZF9tYXApOwogCQlwZXJfY3B1KHJlc2VydmVkX2FzaWRzLCBpKSA9IGFzaWQ7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jIGIvYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYwppbmRleCA3ODY0Nzk3Li45MDNkYmEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jCisrKyBiL2FyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMKQEAgLTE5NDAsMTggKzE5NDAsOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYXJtX2lvbW11X3JlbGVhc2VfbWFwcGluZyk7CiAKLS8qKgotICogYXJtX2lvbW11X2F0dGFjaF9kZXZpY2UKLSAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlcgotICogQG1hcHBpbmc6IGlvIGFkZHJlc3Mgc3BhY2UgbWFwcGluZyBzdHJ1Y3R1cmUgKHJldHVybmVkIGZyb20KLSAqCWFybV9pb21tdV9jcmVhdGVfbWFwcGluZykKLSAqCi0gKiBBdHRhY2hlcyBzcGVjaWZpZWQgaW8gYWRkcmVzcyBzcGFjZSBtYXBwaW5nIHRvIHRoZSBwcm92aWRlZCBkZXZpY2UsCi0gKiBNb3JlIHRoYW4gb25lIGNsaWVudCBtaWdodCBiZSBhdHRhY2hlZCB0byB0aGUgc2FtZSBpbyBhZGRyZXNzIHNwYWNlCi0gKiBtYXBwaW5nLgotICovCi1pbnQgYXJtX2lvbW11X2F0dGFjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyAqbWFwcGluZykKK3N0YXRpYyBpbnQgX19hcm1faW9tbXVfYXR0YWNoX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcgKm1hcHBpbmcpCiB7CiAJaW50IGVycjsKIApAQCAtMTk2NSwxNSArMTk1NSwzNSBAQAogCXByX2RlYnVnKCJBdHRhY2hlZCBJT01NVSBjb250cm9sbGVyIHRvICVzIGRldmljZS5cbiIsIGRldl9uYW1lKGRldikpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoYXJtX2lvbW11X2F0dGFjaF9kZXZpY2UpOwogCiAvKioKLSAqIGFybV9pb21tdV9kZXRhY2hfZGV2aWNlCisgKiBhcm1faW9tbXVfYXR0YWNoX2RldmljZQogICogQGRldjogdmFsaWQgc3RydWN0IGRldmljZSBwb2ludGVyCisgKiBAbWFwcGluZzogaW8gYWRkcmVzcyBzcGFjZSBtYXBwaW5nIHN0cnVjdHVyZSAocmV0dXJuZWQgZnJvbQorICoJYXJtX2lvbW11X2NyZWF0ZV9tYXBwaW5nKQogICoKLSAqIERldGFjaGVzIHRoZSBwcm92aWRlZCBkZXZpY2UgZnJvbSBhIHByZXZpb3VzbHkgYXR0YWNoZWQgbWFwLgorICogQXR0YWNoZXMgc3BlY2lmaWVkIGlvIGFkZHJlc3Mgc3BhY2UgbWFwcGluZyB0byB0aGUgcHJvdmlkZWQgZGV2aWNlLgorICogVGhpcyByZXBsYWNlcyB0aGUgZG1hIG9wZXJhdGlvbnMgKGRtYV9tYXBfb3BzIHBvaW50ZXIpIHdpdGggdGhlCisgKiBJT01NVSBhd2FyZSB2ZXJzaW9uLgorICoKKyAqIE1vcmUgdGhhbiBvbmUgY2xpZW50IG1pZ2h0IGJlIGF0dGFjaGVkIHRvIHRoZSBzYW1lIGlvIGFkZHJlc3Mgc3BhY2UKKyAqIG1hcHBpbmcuCiAgKi8KLXZvaWQgYXJtX2lvbW11X2RldGFjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoraW50IGFybV9pb21tdV9hdHRhY2hfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZG1hX2lvbW11X21hcHBpbmcgKm1hcHBpbmcpCit7CisJaW50IGVycjsKKworCWVyciA9IF9fYXJtX2lvbW11X2F0dGFjaF9kZXZpY2UoZGV2LCBtYXBwaW5nKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2V0X2RtYV9vcHMoZGV2LCAmaW9tbXVfb3BzKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFybV9pb21tdV9hdHRhY2hfZGV2aWNlKTsKKworc3RhdGljIHZvaWQgX19hcm1faW9tbXVfZGV0YWNoX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRtYV9pb21tdV9tYXBwaW5nICptYXBwaW5nOwogCkBAIC0xOTg5LDYgKzE5OTksMTkgQEAKIAogCXByX2RlYnVnKCJEZXRhY2hlZCBJT01NVSBjb250cm9sbGVyIGZyb20gJXMgZGV2aWNlLlxuIiwgZGV2X25hbWUoZGV2KSk7CiB9CisKKy8qKgorICogYXJtX2lvbW11X2RldGFjaF9kZXZpY2UKKyAqIEBkZXY6IHZhbGlkIHN0cnVjdCBkZXZpY2UgcG9pbnRlcgorICoKKyAqIERldGFjaGVzIHRoZSBwcm92aWRlZCBkZXZpY2UgZnJvbSBhIHByZXZpb3VzbHkgYXR0YWNoZWQgbWFwLgorICogVGhpcyB2b2lkcyB0aGUgZG1hIG9wZXJhdGlvbnMgKGRtYV9tYXBfb3BzIHBvaW50ZXIpCisgKi8KK3ZvaWQgYXJtX2lvbW11X2RldGFjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCV9fYXJtX2lvbW11X2RldGFjaF9kZXZpY2UoZGV2KTsKKwlzZXRfZG1hX29wcyhkZXYsIE5VTEwpOworfQogRVhQT1JUX1NZTUJPTF9HUEwoYXJtX2lvbW11X2RldGFjaF9kZXZpY2UpOwogCiBzdGF0aWMgc3RydWN0IGRtYV9tYXBfb3BzICphcm1fZ2V0X2lvbW11X2RtYV9tYXBfb3BzKGJvb2wgY29oZXJlbnQpCkBAIC0yMDExLDcgKzIwMzQsNyBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaWYgKGFybV9pb21tdV9hdHRhY2hfZGV2aWNlKGRldiwgbWFwcGluZykpIHsKKwlpZiAoX19hcm1faW9tbXVfYXR0YWNoX2RldmljZShkZXYsIG1hcHBpbmcpKSB7CiAJCXByX3dhcm4oIkZhaWxlZCB0byBhdHRhY2hlZCBkZXZpY2UgJXMgdG8gSU9NTVVfbWFwcGluZ1xuIiwKIAkJCQlkZXZfbmFtZShkZXYpKTsKIAkJYXJtX2lvbW11X3JlbGVhc2VfbWFwcGluZyhtYXBwaW5nKTsKQEAgLTIwMjUsNyArMjA0OCwxMCBAQAogewogCXN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyAqbWFwcGluZyA9IGRldi0+YXJjaGRhdGEubWFwcGluZzsKIAotCWFybV9pb21tdV9kZXRhY2hfZGV2aWNlKGRldik7CisJaWYgKCFtYXBwaW5nKQorCQlyZXR1cm47CisKKwlfX2FybV9pb21tdV9kZXRhY2hfZGV2aWNlKGRldik7CiAJYXJtX2lvbW11X3JlbGVhc2VfbWFwcGluZyhtYXBwaW5nKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvYXJtL21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggNjY3ODFiZjMuLmM3MjQxMjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9hcm0vbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMzYsMTIgKzM2LDYgQEAKICAqIG9mIHR5cGUgY2FzdGluZyBmcm9tIHBtZF90ICogdG8gcHRlX3QgKi4KICAqLwogCi1zdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfYWRkcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCQkJICAgICAgaW50IHdyaXRlKQotewotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotfQotCiBpbnQgcHVkX2h1Z2UocHVkX3QgcHVkKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IDI0OTVjOGMuLjE2MDliMDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTMxOSwxMCArMzE5LDcgQEAKIAogCWVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7CiAKLQkvKgotCSAqIHJlc2VydmUgbWVtb3J5IGZvciBETUEgY29udGlnb3VvcyBhbGxvY2F0aW9ucywKLQkgKiBtdXN0IGNvbWUgZnJvbSBETUEgYXJlYSBpbnNpZGUgbG93IG1lbW9yeQotCSAqLworCS8qIHJlc2VydmUgbWVtb3J5IGZvciBETUEgY29udGlndW91cyBhbGxvY2F0aW9ucyAqLwogCWRtYV9jb250aWd1b3VzX3Jlc2VydmUoYXJtX2RtYV9saW1pdCk7CiAKIAlhcm1fbWVtYmxvY2tfc3RlYWxfcGVybWl0dGVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wZ2QuYyBiL2FyY2gvYXJtL21tL3BnZC5jCmluZGV4IDI0OTM3OTUuLmEzNjgxZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3BnZC5jCisrKyBiL2FyY2gvYXJtL21tL3BnZC5jCkBAIC05Nyw2ICs5Nyw3IEBACiAKIG5vX3B0ZToKIAlwbWRfZnJlZShtbSwgbmV3X3BtZCk7CisJbW1fZGVjX25yX3BtZHMobW0pOwogbm9fcG1kOgogCXB1ZF9mcmVlKG1tLCBuZXdfcHVkKTsKIG5vX3B1ZDoKQEAgLTEzMCw5ICsxMzEsMTEgQEAKIAlwdGUgPSBwbWRfcGd0YWJsZSgqcG1kKTsKIAlwbWRfY2xlYXIocG1kKTsKIAlwdGVfZnJlZShtbSwgcHRlKTsKKwlhdG9taWNfbG9uZ19kZWMoJm1tLT5ucl9wdGVzKTsKIG5vX3BtZDoKIAlwdWRfY2xlYXIocHVkKTsKIAlwbWRfZnJlZShtbSwgcG1kKTsKKwltbV9kZWNfbnJfcG1kcyhtbSk7CiBub19wdWQ6CiAJcGdkX2NsZWFyKHBnZCk7CiAJcHVkX2ZyZWUobW0sIHB1ZCk7CkBAIC0xNTIsNiArMTU1LDcgQEAKIAkJcG1kID0gcG1kX29mZnNldChwdWQsIDApOwogCQlwdWRfY2xlYXIocHVkKTsKIAkJcG1kX2ZyZWUobW0sIHBtZCk7CisJCW1tX2RlY19ucl9wbWRzKG1tKTsKIAkJcGdkX2NsZWFyKHBnZCk7CiAJCXB1ZF9mcmVlKG1tLCBwdWQpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtbWFjcm9zLlMgYi9hcmNoL2FybS9tbS9wcm9jLW1hY3Jvcy5TCmluZGV4IGJhMTE5NmMuLjA4MmI5ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtbWFjcm9zLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1tYWNyb3MuUwpAQCAtOTgsNyArOTgsNyBAQAogI2VuZGlmCiAjaWYgIWRlZmluZWQgKENPTkZJR19BUk1fTFBBRSkgJiYgXAogCShMX1BURV9YTitMX1BURV9VU0VSK0xfUFRFX1JET05MWStMX1BURV9ESVJUWStMX1BURV9ZT1VORytcCi0JIExfUFRFX0ZJTEUrTF9QVEVfUFJFU0VOVCkgPiBMX1BURV9TSEFSRUQKKwkgTF9QVEVfUFJFU0VOVCkgPiBMX1BURV9TSEFSRUQKICNlcnJvciBJbnZhbGlkIExpbnV4IFBURSBiaXQgc2V0dGluZ3MKICNlbmRpZgogI2VuZGlmCS8qIENPTkZJR19NTVUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3Byb2Jlcy9NYWtlZmlsZSBiL2FyY2gvYXJtL3Byb2Jlcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTFmODU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcHJvYmVzL01ha2VmaWxlCkBAIC0wLDAgKzEsNyBAQAorb2JqLSQoQ09ORklHX1VQUk9CRVMpCQkrPSBkZWNvZGUubyBkZWNvZGUtYXJtLm8gdXByb2Jlcy8KK29iai0kKENPTkZJR19LUFJPQkVTKQkJKz0gZGVjb2RlLm8ga3Byb2Jlcy8KK2lmZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCitvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGRlY29kZS10aHVtYi5vCitlbHNlCitvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGRlY29kZS1hcm0ubworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wcm9iZXMtYXJtLmMgYi9hcmNoL2FybS9wcm9iZXMvZGVjb2RlLWFybS5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2tlcm5lbC9wcm9iZXMtYXJtLmMKcmVuYW1lIHRvIGFyY2gvYXJtL3Byb2Jlcy9kZWNvZGUtYXJtLmMKaW5kZXggOGVhZWY4MS4uZjcyYzMzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Jlcy1hcm0uYworKysgYi9hcmNoL2FybS9wcm9iZXMvZGVjb2RlLWFybS5jCkBAIC0xLDUgKzEsNiBAQAogLyoKLSAqIGFyY2gvYXJtL2tlcm5lbC9wcm9iZXMtYXJtLmMKKyAqCisgKiBhcmNoL2FybS9wcm9iZXMvZGVjb2RlLWFybS5jCiAgKgogICogU29tZSBjb2RlIG1vdmVkIGhlcmUgZnJvbSBhcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1hcm0uYwogICoKQEAgLTIwLDggKzIxLDggQEAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KIAotI2luY2x1ZGUgInByb2Jlcy5oIgotI2luY2x1ZGUgInByb2Jlcy1hcm0uaCIKKyNpbmNsdWRlICJkZWNvZGUuaCIKKyNpbmNsdWRlICJkZWNvZGUtYXJtLmgiCiAKICNkZWZpbmUgc2lnbl9leHRlbmQoeCwgc2lnbmJpdCkgKCh4KSB8ICgwIC0gKCh4KSAmICgxIDw8IChzaWduYml0KSkpKSkKIApAQCAtMzY5LDE3ICszNzAsMTcgQEAKIAogCS8qIE1PVlcJCQljY2NjIDAwMTEgMDAwMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KIAkvKiBNT1ZUCQkJY2NjYyAwMDExIDAxMDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCi0JREVDT0RFX0VNVUxBVEVYCSgweDBmYjAwMDAwLCAweDAzMDAwMDAwLCBQUk9CRVNfREFUQV9QUk9DRVNTSU5HX0lNTSwKKwlERUNPREVfRU1VTEFURVgJKDB4MGZiMDAwMDAsIDB4MDMwMDAwMDAsIFBST0JFU19NT1ZfSEFMRldPUkQsCiAJCQkJCQkgUkVHUygwLCBOT1BDLCAwLCAwLCAwKSksCiAKIAkvKiBZSUVMRAkJY2NjYyAwMDExIDAwMTAgMDAwMCB4eHh4IHh4eHggMDAwMCAwMDAxICovCiAJREVDT0RFX09SCSgweDBmZmYwMGZmLCAweDAzMjAwMDAxKSwKIAkvKiBTRVYJCQljY2NjIDAwMTEgMDAxMCAwMDAwIHh4eHggeHh4eCAwMDAwIDAxMDAgKi8KLQlERUNPREVfRU1VTEFURQkoMHgwZmZmMDBmZiwgMHgwMzIwMDAwNCwgUFJPQkVTX0VNVUxBVEVfTk9ORSksCisJREVDT0RFX0VNVUxBVEUJKDB4MGZmZjAwZmYsIDB4MDMyMDAwMDQsIFBST0JFU19TRVYpLAogCS8qIE5PUAkJCWNjY2MgMDAxMSAwMDEwIDAwMDAgeHh4eCB4eHh4IDAwMDAgMDAwMCAqLwogCS8qIFdGRQkJCWNjY2MgMDAxMSAwMDEwIDAwMDAgeHh4eCB4eHh4IDAwMDAgMDAxMCAqLwogCS8qIFdGSQkJCWNjY2MgMDAxMSAwMDEwIDAwMDAgeHh4eCB4eHh4IDAwMDAgMDAxMSAqLwotCURFQ09ERV9TSU1VTEFURQkoMHgwZmZmMDBmYywgMHgwMzIwMDAwMCwgUFJPQkVTX1NJTVVMQVRFX05PUCksCisJREVDT0RFX1NJTVVMQVRFCSgweDBmZmYwMGZjLCAweDAzMjAwMDAwLCBQUk9CRVNfV0ZFKSwKIAkvKiBEQkcJCQljY2NjIDAwMTEgMDAxMCAwMDAwIHh4eHggeHh4eCBmZmZmIHh4eHggKi8KIAkvKiB1bmFsbG9jYXRlZCBoaW50cwljY2NjIDAwMTEgMDAxMCAwMDAwIHh4eHggeHh4eCB4eHh4IHh4eHggKi8KIAkvKiBNU1IgKGltbWVkaWF0ZSkJY2NjYyAwMDExIDB4MTAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCkBAIC03MjUsMTAgKzcyNiwxMSBAQAogICovCiBlbnVtIHByb2Jlc19pbnNuIF9fa3Byb2JlcwogYXJtX3Byb2Jlc19kZWNvZGVfaW5zbihwcm9iZXNfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfcHJvYmVzX2luc24gKmFzaSwKLQkJICAgICAgIGJvb2wgZW11bGF0ZSwgY29uc3QgdW5pb24gZGVjb2RlX2FjdGlvbiAqYWN0aW9ucykKKwkJICAgICAgIGJvb2wgZW11bGF0ZSwgY29uc3QgdW5pb24gZGVjb2RlX2FjdGlvbiAqYWN0aW9ucywKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBkZWNvZGVfY2hlY2tlciAqY2hlY2tlcnNbXSkKIHsKIAlhc2ktPmluc25fc2luZ2xlc3RlcCA9IGFybV9zaW5nbGVzdGVwOwogCWFzaS0+aW5zbl9jaGVja19jYyA9IHByb2Jlc19jb25kaXRpb25fY2hlY2tzW2luc24+PjI4XTsKIAlyZXR1cm4gcHJvYmVzX2RlY29kZV9pbnNuKGluc24sIGFzaSwgcHJvYmVzX2RlY29kZV9hcm1fdGFibGUsIGZhbHNlLAotCQkJCSAgZW11bGF0ZSwgYWN0aW9ucyk7CisJCQkJICBlbXVsYXRlLCBhY3Rpb25zLCBjaGVja2Vycyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvYmVzLWFybS5oIGIvYXJjaC9hcm0vcHJvYmVzL2RlY29kZS1hcm0uaApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9rZXJuZWwvcHJvYmVzLWFybS5oCnJlbmFtZSB0byBhcmNoL2FybS9wcm9iZXMvZGVjb2RlLWFybS5oCmluZGV4IGFjZTY1NzIuLmIzYjgwZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wcm9iZXMtYXJtLmgKKysrIGIvYXJjaC9hcm0vcHJvYmVzL2RlY29kZS1hcm0uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2FybS9rZXJuZWwvcHJvYmVzLWFybS5oCisgKiBhcmNoL2FybS9wcm9iZXMvZGVjb2RlLWFybS5oCiAgKgogICogQ29weXJpZ2h0IDIwMTMgTGluYXJvIEx0ZC4KICAqIFdyaXR0ZW4gYnk6IERhdmlkIEEuIExvbmcKQEAgLTE1LDkgKzE1LDkgQEAKICNpZm5kZWYgX0FSTV9LRVJORUxfUFJPQkVTX0FSTV9ICiAjZGVmaW5lICBfQVJNX0tFUk5FTF9QUk9CRVNfQVJNX0gKIAorI2luY2x1ZGUgImRlY29kZS5oIgorCiBlbnVtIHByb2Jlc19hcm1fYWN0aW9uIHsKLQlQUk9CRVNfRU1VTEFURV9OT05FLAotCVBST0JFU19TSU1VTEFURV9OT1AsCiAJUFJPQkVTX1BSRUxPQURfSU1NLAogCVBST0JFU19QUkVMT0FEX1JFRywKIAlQUk9CRVNfQlJBTkNIX0lNTSwKQEAgLTY4LDYgKzY4LDcgQEAKIAogZW51bSBwcm9iZXNfaW5zbiBhcm1fcHJvYmVzX2RlY29kZV9pbnNuKHByb2Jlc19vcGNvZGVfdCwKIAkJc3RydWN0IGFyY2hfcHJvYmVzX2luc24gKiwgYm9vbCBlbXVsYXRlLAotCQljb25zdCB1bmlvbiBkZWNvZGVfYWN0aW9uICphY3Rpb25zKTsKKwkJY29uc3QgdW5pb24gZGVjb2RlX2FjdGlvbiAqYWN0aW9ucywKKwkJY29uc3Qgc3RydWN0IGRlY29kZV9jaGVja2VyICpjaGVja2Vyc1tdKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvYmVzLXRodW1iLmMgYi9hcmNoL2FybS9wcm9iZXMvZGVjb2RlLXRodW1iLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC9hcm0va2VybmVsL3Byb2Jlcy10aHVtYi5jCnJlbmFtZSB0byBhcmNoL2FybS9wcm9iZXMvZGVjb2RlLXRodW1iLmMKaW5kZXggNDEzMTM1MS4uOTg1ZTdkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Jlcy10aHVtYi5jCisrKyBiL2FyY2gvYXJtL3Byb2Jlcy9kZWNvZGUtdGh1bWIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2FybS9rZXJuZWwvcHJvYmVzLXRodW1iLmMKKyAqIGFyY2gvYXJtL3Byb2Jlcy9kZWNvZGUtdGh1bWIuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAxMSBKb24gTWVkaHVyc3QgPHRpeHlAeXhpdC5jby51az4uCiAgKgpAQCAtMTIsOCArMTIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCi0jaW5jbHVkZSAicHJvYmVzLmgiCi0jaW5jbHVkZSAicHJvYmVzLXRodW1iLmgiCisjaW5jbHVkZSAiZGVjb2RlLmgiCisjaW5jbHVkZSAiZGVjb2RlLXRodW1iLmgiCiAKIAogc3RhdGljIGNvbnN0IHVuaW9uIGRlY29kZV9pdGVtIHQzMl90YWJsZV8xMTEwXzEwMHhfeDB4eFtdID0gewpAQCAtODYzLDIwICs4NjMsMjIgQEAKIAogZW51bSBwcm9iZXNfaW5zbiBfX2twcm9iZXMKIHRodW1iMTZfcHJvYmVzX2RlY29kZV9pbnNuKHByb2Jlc19vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9wcm9iZXNfaW5zbiAqYXNpLAotCQkJICAgYm9vbCBlbXVsYXRlLCBjb25zdCB1bmlvbiBkZWNvZGVfYWN0aW9uICphY3Rpb25zKQorCQkJICAgYm9vbCBlbXVsYXRlLCBjb25zdCB1bmlvbiBkZWNvZGVfYWN0aW9uICphY3Rpb25zLAorCQkJICAgY29uc3Qgc3RydWN0IGRlY29kZV9jaGVja2VyICpjaGVja2Vyc1tdKQogewogCWFzaS0+aW5zbl9zaW5nbGVzdGVwID0gdGh1bWIxNl9zaW5nbGVzdGVwOwogCWFzaS0+aW5zbl9jaGVja19jYyA9IHRodW1iX2NoZWNrX2NjOwogCXJldHVybiBwcm9iZXNfZGVjb2RlX2luc24oaW5zbiwgYXNpLCBwcm9iZXNfZGVjb2RlX3RodW1iMTZfdGFibGUsIHRydWUsCi0JCQkJICBlbXVsYXRlLCBhY3Rpb25zKTsKKwkJCQkgIGVtdWxhdGUsIGFjdGlvbnMsIGNoZWNrZXJzKTsKIH0KIAogZW51bSBwcm9iZXNfaW5zbiBfX2twcm9iZXMKIHRodW1iMzJfcHJvYmVzX2RlY29kZV9pbnNuKHByb2Jlc19vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9wcm9iZXNfaW5zbiAqYXNpLAotCQkJICAgYm9vbCBlbXVsYXRlLCBjb25zdCB1bmlvbiBkZWNvZGVfYWN0aW9uICphY3Rpb25zKQorCQkJICAgYm9vbCBlbXVsYXRlLCBjb25zdCB1bmlvbiBkZWNvZGVfYWN0aW9uICphY3Rpb25zLAorCQkJICAgY29uc3Qgc3RydWN0IGRlY29kZV9jaGVja2VyICpjaGVja2Vyc1tdKQogewogCWFzaS0+aW5zbl9zaW5nbGVzdGVwID0gdGh1bWIzMl9zaW5nbGVzdGVwOwogCWFzaS0+aW5zbl9jaGVja19jYyA9IHRodW1iX2NoZWNrX2NjOwogCXJldHVybiBwcm9iZXNfZGVjb2RlX2luc24oaW5zbiwgYXNpLCBwcm9iZXNfZGVjb2RlX3RodW1iMzJfdGFibGUsIHRydWUsCi0JCQkJICBlbXVsYXRlLCBhY3Rpb25zKTsKKwkJCQkgIGVtdWxhdGUsIGFjdGlvbnMsIGNoZWNrZXJzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wcm9iZXMtdGh1bWIuaCBiL2FyY2gvYXJtL3Byb2Jlcy9kZWNvZGUtdGh1bWIuaApzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9rZXJuZWwvcHJvYmVzLXRodW1iLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3Byb2Jlcy9kZWNvZGUtdGh1bWIuaAppbmRleCA3YzZmNmViLi44NDU3YWRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHJvYmVzLXRodW1iLmgKKysrIGIvYXJjaC9hcm0vcHJvYmVzL2RlY29kZS10aHVtYi5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGFyY2gvYXJtL2tlcm5lbC9wcm9iZXMtdGh1bWIuaAorICogYXJjaC9hcm0vcHJvYmVzL2RlY29kZS10aHVtYi5oCiAgKgogICogQ29weXJpZ2h0IDIwMTMgTGluYXJvIEx0ZC4KICAqIFdyaXR0ZW4gYnk6IERhdmlkIEEuIExvbmcKQEAgLTE1LDYgKzE1LDggQEAKICNpZm5kZWYgX0FSTV9LRVJORUxfUFJPQkVTX1RIVU1CX0gKICNkZWZpbmUgIF9BUk1fS0VSTkVMX1BST0JFU19USFVNQl9ICiAKKyNpbmNsdWRlICJkZWNvZGUuaCIKKwogLyoKICAqIFRydWUgaWYgY3VycmVudCBpbnN0cnVjdGlvbiBpcyBpbiBhbiBJVCBibG9jay4KICAqLwpAQCAtODksOSArOTEsMTEgQEAKIAogZW51bSBwcm9iZXNfaW5zbiBfX2twcm9iZXMKIHRodW1iMTZfcHJvYmVzX2RlY29kZV9pbnNuKHByb2Jlc19vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9wcm9iZXNfaW5zbiAqYXNpLAotCQlib29sIGVtdWxhdGUsIGNvbnN0IHVuaW9uIGRlY29kZV9hY3Rpb24gKmFjdGlvbnMpOworCQlib29sIGVtdWxhdGUsIGNvbnN0IHVuaW9uIGRlY29kZV9hY3Rpb24gKmFjdGlvbnMsCisJCWNvbnN0IHN0cnVjdCBkZWNvZGVfY2hlY2tlciAqY2hlY2tlcnNbXSk7CiBlbnVtIHByb2Jlc19pbnNuIF9fa3Byb2JlcwogdGh1bWIzMl9wcm9iZXNfZGVjb2RlX2luc24ocHJvYmVzX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3Byb2Jlc19pbnNuICphc2ksCi0JCWJvb2wgZW11bGF0ZSwgY29uc3QgdW5pb24gZGVjb2RlX2FjdGlvbiAqYWN0aW9ucyk7CisJCWJvb2wgZW11bGF0ZSwgY29uc3QgdW5pb24gZGVjb2RlX2FjdGlvbiAqYWN0aW9ucywKKwkJY29uc3Qgc3RydWN0IGRlY29kZV9jaGVja2VyICpjaGVja2Vyc1tdKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHJvYmVzLmMgYi9hcmNoL2FybS9wcm9iZXMvZGVjb2RlLmMKc2ltaWxhcml0eSBpbmRleCA4MyUKcmVuYW1lIGZyb20gYXJjaC9hcm0va2VybmVsL3Byb2Jlcy5jCnJlbmFtZSB0byBhcmNoL2FybS9wcm9iZXMvZGVjb2RlLmMKaW5kZXggYThhYjU0MC4uODgwZWJlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Jlcy5jCisrKyBiL2FyY2gvYXJtL3Byb2Jlcy9kZWNvZGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2FybS9rZXJuZWwvcHJvYmVzLmMKKyAqIGFyY2gvYXJtL3Byb2Jlcy9kZWNvZGUuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAxMSBKb24gTWVkaHVyc3QgPHRpeHlAeXhpdC5jby51az4uCiAgKgpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9idWcuaD4KIAotI2luY2x1ZGUgInByb2Jlcy5oIgorI2luY2x1ZGUgImRlY29kZS5oIgogCiAKICNpZm5kZWYgZmluZF9zdHJfcGNfb2Zmc2V0CkBAIC0zNDIsNiArMzQyLDMxIEBACiAJW0RFQ09ERV9UWVBFX1JFSkVDVF0JPSBzaXplb2Yoc3RydWN0IGRlY29kZV9yZWplY3QpCiB9OwogCitzdGF0aWMgaW50IHJ1bl9jaGVja2Vycyhjb25zdCBzdHJ1Y3QgZGVjb2RlX2NoZWNrZXIgKmNoZWNrZXJzW10sCisJCWludCBhY3Rpb24sIHByb2Jlc19vcGNvZGVfdCBpbnNuLAorCQlzdHJ1Y3QgYXJjaF9wcm9iZXNfaW5zbiAqYXNpLAorCQljb25zdCBzdHJ1Y3QgZGVjb2RlX2hlYWRlciAqaCkKK3sKKwljb25zdCBzdHJ1Y3QgZGVjb2RlX2NoZWNrZXIgKipwOworCisJaWYgKCFjaGVja2VycykKKwkJcmV0dXJuIElOU05fR09PRDsKKworCXAgPSBjaGVja2VyczsKKwl3aGlsZSAoKnAgIT0gTlVMTCkgeworCQlpbnQgcmV0dmFsOworCQlwcm9iZXNfY2hlY2tfdCAqY2hlY2tlcl9mdW5jID0gKCpwKVthY3Rpb25dLmNoZWNrZXI7CisKKwkJcmV0dmFsID0gSU5TTl9HT09EOworCQlpZiAoY2hlY2tlcl9mdW5jKQorCQkJcmV0dmFsID0gY2hlY2tlcl9mdW5jKGluc24sIGFzaSwgaCk7CisJCWlmIChyZXR2YWwgPT0gSU5TTl9SRUpFQ1RFRCkKKwkJCXJldHVybiByZXR2YWw7CisJCXArKzsKKwl9CisJcmV0dXJuIElOU05fR09PRDsKK30KKwogLyoKICAqIHByb2Jlc19kZWNvZGVfaW5zbiBvcGVyYXRlcyBvbiBkYXRhIHRhYmxlcyBpbiBvcmRlciB0byBkZWNvZGUgYW4gQVJNCiAgKiBhcmNoaXRlY3R1cmUgaW5zdHJ1Y3Rpb24gb250byB3aGljaCBhIGtwcm9iZSBoYXMgYmVlbiBwbGFjZWQuCkBAIC0zODgsMTEgKzQxMywzNCBAQAogaW50IF9fa3Byb2JlcwogcHJvYmVzX2RlY29kZV9pbnNuKHByb2Jlc19vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9wcm9iZXNfaW5zbiAqYXNpLAogCQkgICBjb25zdCB1bmlvbiBkZWNvZGVfaXRlbSAqdGFibGUsIGJvb2wgdGh1bWIsCi0JCSAgIGJvb2wgZW11bGF0ZSwgY29uc3QgdW5pb24gZGVjb2RlX2FjdGlvbiAqYWN0aW9ucykKKwkJICAgYm9vbCBlbXVsYXRlLCBjb25zdCB1bmlvbiBkZWNvZGVfYWN0aW9uICphY3Rpb25zLAorCQkgICBjb25zdCBzdHJ1Y3QgZGVjb2RlX2NoZWNrZXIgKmNoZWNrZXJzW10pCiB7CiAJY29uc3Qgc3RydWN0IGRlY29kZV9oZWFkZXIgKmggPSAoc3RydWN0IGRlY29kZV9oZWFkZXIgKil0YWJsZTsKIAljb25zdCBzdHJ1Y3QgZGVjb2RlX2hlYWRlciAqbmV4dDsKIAlib29sIG1hdGNoZWQgPSBmYWxzZTsKKwkvKgorCSAqIEBpbnNuIGNhbiBiZSBtb2RpZmllZCBieSBkZWNvZGVfcmVncy4gU2F2ZSBpdHMgb3JpZ2luYWwKKwkgKiB2YWx1ZSBmb3IgY2hlY2tlcnMuCisJICovCisJcHJvYmVzX29wY29kZV90IG9yaWdpbl9pbnNuID0gaW5zbjsKKworCS8qCisJICogc3RhY2tfc3BhY2UgaXMgaW5pdGlhbGl6ZWQgdG8gMCBoZXJlLiBDaGVja2VyIGZ1bmN0aW9ucworCSAqIHNob3VsZCB1cGRhdGUgaXMgdmFsdWUgaWYgdGhleSBmaW5kIHRoaXMgaXMgYSBzdGFjayBzdG9yZQorCSAqIGluc3RydWN0aW9uOiBwb3NpdGl2ZSB2YWx1ZSBtZWFucyBieXRlcyBvZiBzdGFjayB1c2FnZSwKKwkgKiBuZWdpdGl2ZSB2YWx1ZSBtZWFucyB1bmFibGUgdG8gZGV0ZXJtaW5lIHN0YWNrIHVzYWdlCisJICogc3RhdGljYWxseS4gRm9yIGluc3RydWN0aW9uIGRvZXNuJ3Qgc3RvcmUgdG8gc3RhY2ssIGNoZWNrZXIKKwkgKiBkbyBub3RoaW5nIHdpdGggaXQuCisJICovCisJYXNpLT5zdGFja19zcGFjZSA9IDA7CisKKwkvKgorCSAqIFNpbWlsYXJseSB0byBzdGFja19zcGFjZSwgcmVnaXN0ZXJfdXNhZ2VfZmxhZ3MgaXMgZmlsbGVkIGJ5CisJICogY2hlY2tlcnMuIEl0cyBkZWZhdWx0IHZhbHVlIGlzIHNldCB0byB+MCwgd2hpY2ggaXMgJ2FsbAorCSAqIHJlZ2lzdGVycyBhcmUgdXNlZCcsIHRvIHByZXZlbnQgYW55IHBvdGVudGlhbCBvcHRpbWl6YXRpb24uCisJICovCisJYXNpLT5yZWdpc3Rlcl91c2FnZV9mbGFncyA9IH4wVUw7CiAKIAlpZiAoZW11bGF0ZSkKIAkJaW5zbiA9IHByZXBhcmVfZW11bGF0ZWRfaW5zbihpbnNuLCBhc2ksIHRodW1iKTsKQEAgLTQyMiwyNCArNDcwLDQxIEBACiAJCX0KIAogCQljYXNlIERFQ09ERV9UWVBFX0NVU1RPTTogeworCQkJaW50IGVycjsKIAkJCXN0cnVjdCBkZWNvZGVfY3VzdG9tICpkID0gKHN0cnVjdCBkZWNvZGVfY3VzdG9tICopaDsKLQkJCXJldHVybiBhY3Rpb25zW2QtPmRlY29kZXIuYWN0aW9uXS5kZWNvZGVyKGluc24sIGFzaSwgaCk7CisJCQlpbnQgYWN0aW9uID0gZC0+ZGVjb2Rlci5hY3Rpb247CisKKwkJCWVyciA9IHJ1bl9jaGVja2VycyhjaGVja2VycywgYWN0aW9uLCBvcmlnaW5faW5zbiwgYXNpLCBoKTsKKwkJCWlmIChlcnIgPT0gSU5TTl9SRUpFQ1RFRCkKKwkJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKKwkJCXJldHVybiBhY3Rpb25zW2FjdGlvbl0uZGVjb2RlcihpbnNuLCBhc2ksIGgpOwogCQl9CiAKIAkJY2FzZSBERUNPREVfVFlQRV9TSU1VTEFURTogeworCQkJaW50IGVycjsKIAkJCXN0cnVjdCBkZWNvZGVfc2ltdWxhdGUgKmQgPSAoc3RydWN0IGRlY29kZV9zaW11bGF0ZSAqKWg7Ci0JCQlhc2ktPmluc25faGFuZGxlciA9IGFjdGlvbnNbZC0+aGFuZGxlci5hY3Rpb25dLmhhbmRsZXI7CisJCQlpbnQgYWN0aW9uID0gZC0+aGFuZGxlci5hY3Rpb247CisKKwkJCWVyciA9IHJ1bl9jaGVja2VycyhjaGVja2VycywgYWN0aW9uLCBvcmlnaW5faW5zbiwgYXNpLCBoKTsKKwkJCWlmIChlcnIgPT0gSU5TTl9SRUpFQ1RFRCkKKwkJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKKwkJCWFzaS0+aW5zbl9oYW5kbGVyID0gYWN0aW9uc1thY3Rpb25dLmhhbmRsZXI7CiAJCQlyZXR1cm4gSU5TTl9HT09EX05PX1NMT1Q7CiAJCX0KIAogCQljYXNlIERFQ09ERV9UWVBFX0VNVUxBVEU6IHsKKwkJCWludCBlcnI7CiAJCQlzdHJ1Y3QgZGVjb2RlX2VtdWxhdGUgKmQgPSAoc3RydWN0IGRlY29kZV9lbXVsYXRlICopaDsKKwkJCWludCBhY3Rpb24gPSBkLT5oYW5kbGVyLmFjdGlvbjsKKworCQkJZXJyID0gcnVuX2NoZWNrZXJzKGNoZWNrZXJzLCBhY3Rpb24sIG9yaWdpbl9pbnNuLCBhc2ksIGgpOworCQkJaWYgKGVyciA9PSBJTlNOX1JFSkVDVEVEKQorCQkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwogCiAJCQlpZiAoIWVtdWxhdGUpCi0JCQkJcmV0dXJuIGFjdGlvbnNbZC0+aGFuZGxlci5hY3Rpb25dLmRlY29kZXIoaW5zbiwKLQkJCQkJYXNpLCBoKTsKKwkJCQlyZXR1cm4gYWN0aW9uc1thY3Rpb25dLmRlY29kZXIoaW5zbiwgYXNpLCBoKTsKIAotCQkJYXNpLT5pbnNuX2hhbmRsZXIgPSBhY3Rpb25zW2QtPmhhbmRsZXIuYWN0aW9uXS5oYW5kbGVyOworCQkJYXNpLT5pbnNuX2hhbmRsZXIgPSBhY3Rpb25zW2FjdGlvbl0uaGFuZGxlcjsKIAkJCXNldF9lbXVsYXRlZF9pbnNuKGluc24sIGFzaSwgdGh1bWIpOwogCQkJcmV0dXJuIElOU05fR09PRDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Byb2Jlcy5oIGIvYXJjaC9hcm0vcHJvYmVzL2RlY29kZS5oCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2tlcm5lbC9wcm9iZXMuaApyZW5hbWUgdG8gYXJjaC9hcm0vcHJvYmVzL2RlY29kZS5oCmluZGV4IGRiYTlmMjQuLmY5YjA4YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wcm9iZXMuaAorKysgYi9hcmNoL2FybS9wcm9iZXMvZGVjb2RlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXJjaC9hcm0va2VybmVsL3Byb2Jlcy5oCisgKiBhcmNoL2FybS9wcm9iZXMvZGVjb2RlLmgKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSm9uIE1lZGh1cnN0IDx0aXh5QHl4aXQuY28udWs+LgogICoKQEAgLTMxNCw2ICszMTQsMTQgQEAKIAlwcm9iZXNfY3VzdG9tX2RlY29kZV90CSpkZWNvZGVyOwogfTsKIAordHlwZWRlZiBlbnVtIHByb2Jlc19pbnNuIChwcm9iZXNfY2hlY2tfdCkocHJvYmVzX29wY29kZV90LAorCQkJCQkgICBzdHJ1Y3QgYXJjaF9wcm9iZXNfaW5zbiAqLAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgZGVjb2RlX2hlYWRlciAqKTsKKworc3RydWN0IGRlY29kZV9jaGVja2VyIHsKKwlwcm9iZXNfY2hlY2tfdAkqY2hlY2tlcjsKK307CisKICNkZWZpbmUgREVDT0RFX0VORAkJCVwKIAl7LmJpdHMgPSBERUNPREVfVFlQRV9FTkR9CiAKQEAgLTQwMiw2ICs0MTAsNyBAQAogaW50IF9fa3Byb2JlcwogcHJvYmVzX2RlY29kZV9pbnNuKHByb2Jlc19vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9wcm9iZXNfaW5zbiAqYXNpLAogCQljb25zdCB1bmlvbiBkZWNvZGVfaXRlbSAqdGFibGUsIGJvb2wgdGh1bWIsIGJvb2wgZW11bGF0ZSwKLQkJY29uc3QgdW5pb24gZGVjb2RlX2FjdGlvbiAqYWN0aW9ucyk7CisJCWNvbnN0IHVuaW9uIGRlY29kZV9hY3Rpb24gKmFjdGlvbnMsCisJCWNvbnN0IHN0cnVjdCBkZWNvZGVfY2hlY2tlciAqKmNoZWNrZXJzKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9NYWtlZmlsZSBiL2FyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YTM2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9NYWtlZmlsZQpAQCAtMCwwICsxLDEyIEBACitvYmotJChDT05GSUdfS1BST0JFUykJCSs9IGNvcmUubyBhY3Rpb25zLWNvbW1vbi5vIGNoZWNrZXJzLWNvbW1vbi5vCitvYmotJChDT05GSUdfQVJNX0tQUk9CRVNfVEVTVCkJKz0gdGVzdC1rcHJvYmVzLm8KK3Rlc3Qta3Byb2Jlcy1vYmpzCQk6PSB0ZXN0LWNvcmUubworCitpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAorb2JqLSQoQ09ORklHX0tQUk9CRVMpCQkrPSBhY3Rpb25zLXRodW1iLm8gY2hlY2tlcnMtdGh1bWIubwordGVzdC1rcHJvYmVzLW9ianMJCSs9IHRlc3QtdGh1bWIubworZWxzZQorb2JqLSQoQ09ORklHX0tQUk9CRVMpCQkrPSBhY3Rpb25zLWFybS5vIGNoZWNrZXJzLWFybS5vCitvYmotJChDT05GSUdfT1BUUFJPQkVTKQkJKz0gb3B0LWFybS5vCit0ZXN0LWtwcm9iZXMtb2JqcwkJKz0gdGVzdC1hcm0ubworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLWFybS5jIGIvYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvYWN0aW9ucy1hcm0uYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1hcm0uYwpyZW5hbWUgdG8gYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvYWN0aW9ucy1hcm0uYwppbmRleCBhYzMwMGM2Li5iOTA1NmQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1hcm0uYworKysgYi9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9hY3Rpb25zLWFybS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGFyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLWRlY29kZS5jCisgKiBhcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9hY3Rpb25zLWFybS5jCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IE1vdG9yb2xhIEluYy4KICAqCkBAIC02Miw4ICs2Miw5IEBACiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogCi0jaW5jbHVkZSAia3Byb2Jlcy5oIgotI2luY2x1ZGUgInByb2Jlcy1hcm0uaCIKKyNpbmNsdWRlICIuLi9kZWNvZGUtYXJtLmgiCisjaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgImNoZWNrZXJzLmgiCiAKICNpZiAgX19MSU5VWF9BUk1fQVJDSF9fID49IDYKICNkZWZpbmUgQkxYKHJlZykJImJseAkicmVnIgkJXG5cdCIKQEAgLTMwMiw4ICszMDMsNiBAQAogfQogCiBjb25zdCB1bmlvbiBkZWNvZGVfYWN0aW9uIGtwcm9iZXNfYXJtX2FjdGlvbnNbTlVNX1BST0JFU19BUk1fQUNUSU9OU10gPSB7Ci0JW1BST0JFU19FTVVMQVRFX05PTkVdID0gey5oYW5kbGVyID0gcHJvYmVzX2VtdWxhdGVfbm9uZX0sCi0JW1BST0JFU19TSU1VTEFURV9OT1BdID0gey5oYW5kbGVyID0gcHJvYmVzX3NpbXVsYXRlX25vcH0sCiAJW1BST0JFU19QUkVMT0FEX0lNTV0gPSB7LmhhbmRsZXIgPSBwcm9iZXNfc2ltdWxhdGVfbm9wfSwKIAlbUFJPQkVTX1BSRUxPQURfUkVHXSA9IHsuaGFuZGxlciA9IHByb2Jlc19zaW11bGF0ZV9ub3B9LAogCVtQUk9CRVNfQlJBTkNIX0lNTV0gPSB7LmhhbmRsZXIgPSBzaW11bGF0ZV9ibHgxfSwKQEAgLTM0MSwzICszNDAsNSBAQAogCVtQUk9CRVNfQlJBTkNIXSA9IHsuaGFuZGxlciA9IHNpbXVsYXRlX2JibH0sCiAJW1BST0JFU19MRE1TVE1dID0gey5kZWNvZGVyID0ga3Byb2JlX2RlY29kZV9sZG1zdG19CiB9OworCitjb25zdCBzdHJ1Y3QgZGVjb2RlX2NoZWNrZXIgKmtwcm9iZXNfYXJtX2NoZWNrZXJzW10gPSB7YXJtX3N0YWNrX2NoZWNrZXIsIGFybV9yZWdzX2NoZWNrZXIsIE5VTEx9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtY29tbW9uLmMgYi9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9hY3Rpb25zLWNvbW1vbi5jCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLWNvbW1vbi5jCnJlbmFtZSB0byBhcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9hY3Rpb25zLWNvbW1vbi5jCmluZGV4IDBiZjVkNjQuLmJkMjBhNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLWNvbW1vbi5jCisrKyBiL2FyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL2FjdGlvbnMtY29tbW9uLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXJjaC9hcm0va2VybmVsL2twcm9iZXMtY29tbW9uLmMKKyAqIGFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL2FjdGlvbnMtY29tbW9uLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSm9uIE1lZGh1cnN0IDx0aXh5QHl4aXQuY28udWs+LgogICoKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcHJvYmVzLmg+CiAjaW5jbHVkZSA8YXNtL29wY29kZXMuaD4KIAotI2luY2x1ZGUgImtwcm9iZXMuaCIKKyNpbmNsdWRlICJjb3JlLmgiCiAKIAogc3RhdGljIHZvaWQgX19rcHJvYmVzIHNpbXVsYXRlX2xkbTFzdG0xKHByb2Jlc19vcGNvZGVfdCBpbnNuLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtdGh1bWIuYyBiL2FyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL2FjdGlvbnMtdGh1bWIuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9rZXJuZWwva3Byb2Jlcy10aHVtYi5jCnJlbmFtZSB0byBhcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9hY3Rpb25zLXRodW1iLmMKaW5kZXggOTQ5NWQ3Zi4uMDdjZmQ5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtdGh1bWIuYworKysgYi9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9hY3Rpb25zLXRodW1iLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogYXJjaC9hcm0va2VybmVsL2twcm9iZXMtdGh1bWIuYworICogYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvYWN0aW9ucy10aHVtYi5jCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDExIEpvbiBNZWRodXJzdCA8dGl4eUB5eGl0LmNvLnVrPi4KICAqCkBAIC0xMyw4ICsxMyw5IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogCi0jaW5jbHVkZSAia3Byb2Jlcy5oIgotI2luY2x1ZGUgInByb2Jlcy10aHVtYi5oIgorI2luY2x1ZGUgIi4uL2RlY29kZS10aHVtYi5oIgorI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJjaGVja2Vycy5oIgogCiAvKiBUaGVzZSBlbXVsYXRpb24gZW5jb2RpbmdzIGFyZSBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudC4uLiAqLwogI2RlZmluZSB0MzJfZW11bGF0ZV9yZDhybjE2cm0wcmExMl9ub2ZsYWdzIFwKQEAgLTY2NCwzICs2NjUsNiBAQAogCVtQUk9CRVNfVDMyX01VTF9BRERfTE9OR10gPSB7CiAJCS5oYW5kbGVyID0gdDMyX2VtdWxhdGVfcmRsbzEycmRoaThybjE2cm0wX25vZmxhZ3N9LAogfTsKKworY29uc3Qgc3RydWN0IGRlY29kZV9jaGVja2VyICprcHJvYmVzX3QzMl9jaGVja2Vyc1tdID0ge3QzMl9zdGFja19jaGVja2VyLCBOVUxMfTsKK2NvbnN0IHN0cnVjdCBkZWNvZGVfY2hlY2tlciAqa3Byb2Jlc190MTZfY2hlY2tlcnNbXSA9IHt0MTZfc3RhY2tfY2hlY2tlciwgTlVMTH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9jaGVja2Vycy1hcm0uYyBiL2FyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL2NoZWNrZXJzLWFybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOTgxNzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9jaGVja2Vycy1hcm0uYwpAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIGFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL2NoZWNrZXJzLWFybS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEh1YXdlaSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlICIuLi9kZWNvZGUuaCIKKyNpbmNsdWRlICIuLi9kZWNvZGUtYXJtLmgiCisjaW5jbHVkZSAiY2hlY2tlcnMuaCIKKworc3RhdGljIGVudW0gcHJvYmVzX2luc24gX19rcHJvYmVzIGFybV9jaGVja19zdGFjayhwcm9iZXNfb3Bjb2RlX3QgaW5zbiwKKwkJc3RydWN0IGFyY2hfcHJvYmVzX2luc24gKmFzaSwKKwkJY29uc3Qgc3RydWN0IGRlY29kZV9oZWFkZXIgKmgpCit7CisJLyoKKwkgKiBQUk9CRVNfTERSU1RSRCwgUFJPQkVTX0xETVNUTSwgUFJPQkVTX1NUT1JFLAorCSAqIFBST0JFU19TVE9SRV9FWFRSQSBtYXkgZ2V0IGhlcmUuIFNpbXBseSBtYXJrIGFsbCBub3JtYWwKKwkgKiBpbnNucyBhcyBTVEFDS19VU0VfTk9ORS4KKwkgKi8KKwlzdGF0aWMgY29uc3QgdW5pb24gZGVjb2RlX2l0ZW0gdGFibGVbXSA9IHsKKwkJLyoKKwkJICogJ1NUUnssRCxCLEh9LCBSdCwgW1JuLCBSbV0nIHNob3VsZCBiZSBtYXJrZWQgYXMgVU5LTk9XTgorCQkgKiBpZiBSbiBvciBSbSBpcyBTUC4KKwkJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4CisJCSAqIFNUUiAocmVnaXN0ZXIpCWNjY2MgMDExeCB4MHgwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAorCQkgKiBTVFJCIChyZWdpc3RlcikJY2NjYyAwMTF4IHgxeDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CisJCSAqLworCQlERUNPREVfT1IJKDB4MGUxMDAwMGYsIDB4MDYwMDAwMGQpLAorCQlERUNPREVfT1IJKDB4MGUxZjAwMDAsIDB4MDYwZDAwMDApLAorCisJCS8qCisJCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4CisJCSAqIFNUUkQgKHJlZ2lzdGVyKQljY2NjIDAwMHggeDB4MCB4eHh4IHh4eHggeHh4eCAxMTExIHh4eHgKKwkJICogU1RSSCAocmVnaXN0ZXIpCWNjY2MgMDAweCB4MHgwIHh4eHggeHh4eCB4eHh4IDEwMTEgeHh4eAorCQkgKi8KKwkJREVDT0RFX09SCSgweDBlNTAwMGJmLCAweDAwMDAwMGJkKSwKKwkJREVDT0RFX0NVU1RPTQkoMHgwZTVmMDBiMCwgMHgwMDBkMDBiMCwgU1RBQ0tfVVNFX1VOS05PV04pLAorCisJCS8qCisJCSAqIEZvciBQUk9CRVNfTERNU1RNLCBvbmx5IHN0bWR4IHNwLCBbLi4uXSBuZWVkIHRvIGV4YW1pbmUKKwkJICoKKwkJICogQml0IEIvQSAoYml0IDI0KSBlbmNvZGVzIGFyaXRobWV0aWMgb3BlcmF0aW9uIG9yZGVyLiAxIG1lYW5zCisJCSAqIGJlZm9yZSwgMCBtZWFucyBhZnRlci4KKwkJICogQml0IEkvRCAoYml0IDIzKSBlbmNvZGVzIGFyaXRobWV0aWMgb3BlcmF0aW9uLiAxIG1lYW5zCisJCSAqIGluY3JlbWVudCwgMCBtZWFucyBkZWNyZW1lbnQuCisJCSAqCisJCSAqIFNvOgorCQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEIgSQorCQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gLworCQkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgRCAgIHwgUm4gfAorCQkgKiBTVE1EWCBTUCwgWy4uLl0JY2NjYyAxMDB4IDAweDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CisJCSAqLworCQlERUNPREVfQ1VTVE9NCSgweDBlZGYwMDAwLCAweDA4MGQwMDAwLCBTVEFDS19VU0VfU1RNRFgpLAorCisJCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCBVIFcgfCBSbiB8IFJ0IHwgICAgIGltbTEyICAgIHwqLworCQkvKiBTVFIgKGltbWVkaWF0ZSkJY2NjYyAwMTB4IHgweDAgMTEwMSB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisJCS8qIFNUUkIgKGltbWVkaWF0ZSkJY2NjYyAwMTB4IHgxeDAgMTEwMSB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisJCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCBVIFcgfCBSbiB8IFJ0IHxpbW00fCAgICB8aW1tNHwqLworCQkvKiBTVFJEIChpbW1lZGlhdGUpCWNjY2MgMDAweCB4MXgwIDExMDEgeHh4eCB4eHh4IDExMTEgeHh4eCAqLworCQkvKiBTVFJIIChpbW1lZGlhdGUpCWNjY2MgMDAweCB4MXgwIDExMDEgeHh4eCB4eHh4IDEwMTEgeHh4eCAqLworCQkvKgorCQkgKiBpbmRleCA9IChQID09ICcxJyk7IGFkZCA9IChVID09ICcxJykuCisJCSAqIEFib3ZlIGluc25zIHdpdGg6CisJCSAqICAgIGluZGV4ID09IDAgKHN0cnssZCxofSByeCwgW3NwXSwgIysvLWltbSkgb3IKKwkJICogICAgYWRkID09IDEgKHN0cnssZCxofSByeCwgW3NwLCAjKzxpbW0+XSkKKwkJICogc2hvdWxkIGJlIFNUQUNLX1VTRV9OT05FLgorCQkgKiBPbmx5IHN0cnssYixkLGh9IHJ4LFtzcCwjLW5dIChQID09IDEgYW5kIFUgPT0gMCkgYXJlCisJCSAqIHJlcXVpcmVkIHRvIGJlIGV4YW1pbmVkLgorCQkgKi8KKwkJLyogU1RSeyxCfSBSdCxbU1AsIy1uXQljY2NjIDAxMDEgMHh4MCAxMTAxIHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKwkJREVDT0RFX0NVU1RPTQkoMHgwZjlmMDAwMCwgMHgwNTBkMDAwMCwgU1RBQ0tfVVNFX0ZJWEVEX1hYWCksCisKKwkJLyogU1RSe0QsSH0gUnQsW1NQLCMtbl0JY2NjYyAwMDAxIDAxeDAgMTEwMSB4eHh4IHh4eHggMXgxMSB4eHh4ICovCisJCURFQ09ERV9DVVNUT00JKDB4MGZkZjAwYjAsIDB4MDE0ZDAwYjAsIFNUQUNLX1VTRV9GSVhFRF9YMFgpLAorCisJCS8qIGZhbGwgdGhyb3VnaCAqLworCQlERUNPREVfQ1VTVE9NCSgwLCAwLCBTVEFDS19VU0VfTk9ORSksCisJCURFQ09ERV9FTkQKKwl9OworCisJcmV0dXJuIHByb2Jlc19kZWNvZGVfaW5zbihpbnNuLCBhc2ksIHRhYmxlLCBmYWxzZSwgZmFsc2UsIHN0YWNrX2NoZWNrX2FjdGlvbnMsIE5VTEwpOworfQorCitjb25zdCBzdHJ1Y3QgZGVjb2RlX2NoZWNrZXIgYXJtX3N0YWNrX2NoZWNrZXJbTlVNX1BST0JFU19BUk1fQUNUSU9OU10gPSB7CisJW1BST0JFU19MRFJTVFJEXSA9IHsuY2hlY2tlciA9IGFybV9jaGVja19zdGFja30sCisJW1BST0JFU19TVE9SRV9FWFRSQV0gPSB7LmNoZWNrZXIgPSBhcm1fY2hlY2tfc3RhY2t9LAorCVtQUk9CRVNfU1RPUkVdID0gey5jaGVja2VyID0gYXJtX2NoZWNrX3N0YWNrfSwKKwlbUFJPQkVTX0xETVNUTV0gPSB7LmNoZWNrZXIgPSBhcm1fY2hlY2tfc3RhY2t9LAorfTsKKworc3RhdGljIGVudW0gcHJvYmVzX2luc24gX19rcHJvYmVzIGFybV9jaGVja19yZWdzX25vdXNlKHByb2Jlc19vcGNvZGVfdCBpbnNuLAorCQlzdHJ1Y3QgYXJjaF9wcm9iZXNfaW5zbiAqYXNpLAorCQljb25zdCBzdHJ1Y3QgZGVjb2RlX2hlYWRlciAqaCkKK3sKKwlhc2ktPnJlZ2lzdGVyX3VzYWdlX2ZsYWdzID0gMDsKKwlyZXR1cm4gSU5TTl9HT09EOworfQorCitzdGF0aWMgZW51bSBwcm9iZXNfaW5zbiBhcm1fY2hlY2tfcmVnc19ub3JtYWwocHJvYmVzX29wY29kZV90IGluc24sCisJCXN0cnVjdCBhcmNoX3Byb2Jlc19pbnNuICphc2ksCisJCWNvbnN0IHN0cnVjdCBkZWNvZGVfaGVhZGVyICpoKQoreworCXUzMiByZWdzID0gaC0+dHlwZV9yZWdzLmJpdHMgPj4gREVDT0RFX1RZUEVfQklUUzsKKwlpbnQgaTsKKworCWFzaS0+cmVnaXN0ZXJfdXNhZ2VfZmxhZ3MgPSAwOworCWZvciAoaSA9IDA7IGkgPCA1OyByZWdzID4+PSA0LCBpbnNuID4+PSA0LCBpKyspCisJCWlmIChyZWdzICYgMHhmKQorCQkJYXNpLT5yZWdpc3Rlcl91c2FnZV9mbGFncyB8PSAxIDw8IChpbnNuICYgMHhmKTsKKworCXJldHVybiBJTlNOX0dPT0Q7Cit9CisKKworc3RhdGljIGVudW0gcHJvYmVzX2luc24gYXJtX2NoZWNrX3JlZ3NfbGRtc3RtKHByb2Jlc19vcGNvZGVfdCBpbnNuLAorCQlzdHJ1Y3QgYXJjaF9wcm9iZXNfaW5zbiAqYXNpLAorCQljb25zdCBzdHJ1Y3QgZGVjb2RlX2hlYWRlciAqaCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnbGlzdCA9IGluc24gJiAweGZmZmY7CisJdW5zaWduZWQgaW50IHJuID0gKGluc24gPj4gMTYpICYgMHhmOworCWFzaS0+cmVnaXN0ZXJfdXNhZ2VfZmxhZ3MgPSByZWdsaXN0IHwgKDEgPDwgcm4pOworCXJldHVybiBJTlNOX0dPT0Q7Cit9CisKK3N0YXRpYyBlbnVtIHByb2Jlc19pbnNuIGFybV9jaGVja19yZWdzX21vdl9pcF9zcChwcm9iZXNfb3Bjb2RlX3QgaW5zbiwKKwkJc3RydWN0IGFyY2hfcHJvYmVzX2luc24gKmFzaSwKKwkJY29uc3Qgc3RydWN0IGRlY29kZV9oZWFkZXIgKmgpCit7CisJLyogSW5zdHJ1Y3Rpb24gaXMgJ21vdiBpcCwgc3AnIGkuZS4gJ21vdiByMTIsIHIxMycgKi8KKwlhc2ktPnJlZ2lzdGVyX3VzYWdlX2ZsYWdzID0gKDEgPDwgMTIpIHwgKDE8PCAxMyk7CisJcmV0dXJuIElOU05fR09PRDsKK30KKworLyoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSbiB8UnQvZHwgICAgICAgICB8IFJtIHwKKyAqIExEUkQgKHJlZ2lzdGVyKSAgICAgIGNjY2MgMDAweCB4MHgwIHh4eHggeHh4eCB4eHh4IDExMDEgeHh4eAorICogU1RSRCAocmVnaXN0ZXIpICAgICAgY2NjYyAwMDB4IHgweDAgeHh4eCB4eHh4IHh4eHggMTExMSB4eHh4CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUm4gfFJ0L2R8ICAgICAgICAgfGltbTRMfAorICogTERSRCAoaW1tZWRpYXRlKSAgICAgY2NjYyAwMDB4IHgxeDAgeHh4eCB4eHh4IHh4eHggMTEwMSB4eHh4CisgKiBTVFJEIChpbW1lZGlhdGUpICAgICBjY2NjIDAwMHggeDF4MCB4eHh4IHh4eHggeHh4eCAxMTExIHh4eHgKKyAqCisgKiBTdWNoIGluc3RydWN0aW9ucyBhY2Nlc3MgUnQvZCBhbmQgaXRzIG5leHQgcmVnaXN0ZXIsIHNvIGRpZmZlcmVudAorICogZnJvbSBvdGhlcnMsIGEgc3BlY2lmaWMgY2hlY2tlciBpcyByZXF1aXJlZCB0byBoYW5kbGUgdGhpcyBleHRyYQorICogaW1wbGljaXQgcmVnaXN0ZXIgdXNhZ2UuCisgKi8KK3N0YXRpYyBlbnVtIHByb2Jlc19pbnNuIGFybV9jaGVja19yZWdzX2xkcmRzdHJkKHByb2Jlc19vcGNvZGVfdCBpbnNuLAorCQlzdHJ1Y3QgYXJjaF9wcm9iZXNfaW5zbiAqYXNpLAorCQljb25zdCBzdHJ1Y3QgZGVjb2RlX2hlYWRlciAqaCkKK3sKKwlpbnQgcmR0ID0gKGluc24gPj4gMTIpICYgMHhmOworCWFybV9jaGVja19yZWdzX25vcm1hbChpbnNuLCBhc2ksIGgpOworCWFzaS0+cmVnaXN0ZXJfdXNhZ2VfZmxhZ3MgfD0gMSA8PCAocmR0ICsgMSk7CisJcmV0dXJuIElOU05fR09PRDsKK30KKworCitjb25zdCBzdHJ1Y3QgZGVjb2RlX2NoZWNrZXIgYXJtX3JlZ3NfY2hlY2tlcltOVU1fUFJPQkVTX0FSTV9BQ1RJT05TXSA9IHsKKwlbUFJPQkVTX01SU10gPSB7LmNoZWNrZXIgPSBhcm1fY2hlY2tfcmVnc19ub3JtYWx9LAorCVtQUk9CRVNfU0FUVVJBVElOR19BUklUSE1FVElDXSA9IHsuY2hlY2tlciA9IGFybV9jaGVja19yZWdzX25vcm1hbH0sCisJW1BST0JFU19NVUwxXSA9IHsuY2hlY2tlciA9IGFybV9jaGVja19yZWdzX25vcm1hbH0sCisJW1BST0JFU19NVUwyXSA9IHsuY2hlY2tlciA9IGFybV9jaGVja19yZWdzX25vcm1hbH0sCisJW1BST0JFU19NVUxfQUREX0xPTkddID0gey5jaGVja2VyID0gYXJtX2NoZWNrX3JlZ3Nfbm9ybWFsfSwKKwlbUFJPQkVTX01VTF9BRERdID0gey5jaGVja2VyID0gYXJtX2NoZWNrX3JlZ3Nfbm9ybWFsfSwKKwlbUFJPQkVTX0xPQURdID0gey5jaGVja2VyID0gYXJtX2NoZWNrX3JlZ3Nfbm9ybWFsfSwKKwlbUFJPQkVTX0xPQURfRVhUUkFdID0gey5jaGVja2VyID0gYXJtX2NoZWNrX3JlZ3Nfbm9ybWFsfSwKKwlbUFJPQkVTX1NUT1JFXSA9IHsuY2hlY2tlciA9IGFybV9jaGVja19yZWdzX25vcm1hbH0sCisJW1BST0JFU19TVE9SRV9FWFRSQV0gPSB7LmNoZWNrZXIgPSBhcm1fY2hlY2tfcmVnc19ub3JtYWx9LAorCVtQUk9CRVNfREFUQV9QUk9DRVNTSU5HX1JFR10gPSB7LmNoZWNrZXIgPSBhcm1fY2hlY2tfcmVnc19ub3JtYWx9LAorCVtQUk9CRVNfREFUQV9QUk9DRVNTSU5HX0lNTV0gPSB7LmNoZWNrZXIgPSBhcm1fY2hlY2tfcmVnc19ub3JtYWx9LAorCVtQUk9CRVNfU0VWXSA9IHsuY2hlY2tlciA9IGFybV9jaGVja19yZWdzX25vdXNlfSwKKwlbUFJPQkVTX1dGRV0gPSB7LmNoZWNrZXIgPSBhcm1fY2hlY2tfcmVnc19ub3VzZX0sCisJW1BST0JFU19TQVRVUkFURV0gPSB7LmNoZWNrZXIgPSBhcm1fY2hlY2tfcmVnc19ub3JtYWx9LAorCVtQUk9CRVNfUkVWXSA9IHsuY2hlY2tlciA9IGFybV9jaGVja19yZWdzX25vcm1hbH0sCisJW1BST0JFU19NTUldID0gey5jaGVja2VyID0gYXJtX2NoZWNrX3JlZ3Nfbm9ybWFsfSwKKwlbUFJPQkVTX1BBQ0tdID0gey5jaGVja2VyID0gYXJtX2NoZWNrX3JlZ3Nfbm9ybWFsfSwKKwlbUFJPQkVTX0VYVEVORF0gPSB7LmNoZWNrZXIgPSBhcm1fY2hlY2tfcmVnc19ub3JtYWx9LAorCVtQUk9CRVNfRVhURU5EX0FERF0gPSB7LmNoZWNrZXIgPSBhcm1fY2hlY2tfcmVnc19ub3JtYWx9LAorCVtQUk9CRVNfQklURklFTERdID0gey5jaGVja2VyID0gYXJtX2NoZWNrX3JlZ3Nfbm9ybWFsfSwKKwlbUFJPQkVTX0xETVNUTV0gPSB7LmNoZWNrZXIgPSBhcm1fY2hlY2tfcmVnc19sZG1zdG19LAorCVtQUk9CRVNfTU9WX0lQX1NQXSA9IHsuY2hlY2tlciA9IGFybV9jaGVja19yZWdzX21vdl9pcF9zcH0sCisJW1BST0JFU19MRFJTVFJEXSA9IHsuY2hlY2tlciA9IGFybV9jaGVja19yZWdzX2xkcmRzdHJkfSwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9jaGVja2Vycy1jb21tb24uYyBiL2FyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL2NoZWNrZXJzLWNvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MTExOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9jaGVja2Vycy1jb21tb24uYwpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIGFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL2NoZWNrZXJzLWNvbW1vbi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEh1YXdlaSBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlICIuLi9kZWNvZGUuaCIKKyNpbmNsdWRlICIuLi9kZWNvZGUtYXJtLmgiCisjaW5jbHVkZSAiY2hlY2tlcnMuaCIKKworZW51bSBwcm9iZXNfaW5zbiBjaGVja2VyX3N0YWNrX3VzZV9ub25lKHByb2Jlc19vcGNvZGVfdCBpbnNuLAorCQlzdHJ1Y3QgYXJjaF9wcm9iZXNfaW5zbiAqYXNpLAorCQljb25zdCBzdHJ1Y3QgZGVjb2RlX2hlYWRlciAqaCkKK3sKKwlhc2ktPnN0YWNrX3NwYWNlID0gMDsKKwlyZXR1cm4gSU5TTl9HT09EX05PX1NMT1Q7Cit9CisKK2VudW0gcHJvYmVzX2luc24gY2hlY2tlcl9zdGFja191c2VfdW5rbm93bihwcm9iZXNfb3Bjb2RlX3QgaW5zbiwKKwkJc3RydWN0IGFyY2hfcHJvYmVzX2luc24gKmFzaSwKKwkJY29uc3Qgc3RydWN0IGRlY29kZV9oZWFkZXIgKmgpCit7CisJYXNpLT5zdGFja19zcGFjZSA9IC0xOworCXJldHVybiBJTlNOX0dPT0RfTk9fU0xPVDsKK30KKworI2lmZGVmIENPTkZJR19USFVNQjJfS0VSTkVMCitlbnVtIHByb2Jlc19pbnNuIGNoZWNrZXJfc3RhY2tfdXNlX2ltbV8weHgocHJvYmVzX29wY29kZV90IGluc24sCisJCXN0cnVjdCBhcmNoX3Byb2Jlc19pbnNuICphc2ksCisJCWNvbnN0IHN0cnVjdCBkZWNvZGVfaGVhZGVyICpoKQoreworCWludCBpbW0gPSBpbnNuICYgMHhmZjsKKwlhc2ktPnN0YWNrX3NwYWNlID0gaW1tOworCXJldHVybiBJTlNOX0dPT0RfTk9fU0xPVDsKK30KKworLyoKKyAqIERpZmZlcmVudCBmcm9tIG90aGVyIGluc24gdXNlcyBpbW04LCB0aGUgcmVhbCBhZGRyZXNzaW5nIG9mZnNldCBvZgorICogU1RSRCBpbiBUMzIgZW5jb2Rpbmcgc2hvdWxkIGJlIGltbTggKiA0LiBTZWUgQVJNQVJNIGRlc2NyaXB0aW9uLgorICovCitlbnVtIHByb2Jlc19pbnNuIGNoZWNrZXJfc3RhY2tfdXNlX3QzMnN0cmQocHJvYmVzX29wY29kZV90IGluc24sCisJCXN0cnVjdCBhcmNoX3Byb2Jlc19pbnNuICphc2ksCisJCWNvbnN0IHN0cnVjdCBkZWNvZGVfaGVhZGVyICpoKQoreworCWludCBpbW0gPSBpbnNuICYgMHhmZjsKKwlhc2ktPnN0YWNrX3NwYWNlID0gaW1tIDw8IDI7CisJcmV0dXJuIElOU05fR09PRF9OT19TTE9UOworfQorI2Vsc2UKK2VudW0gcHJvYmVzX2luc24gY2hlY2tlcl9zdGFja191c2VfaW1tX3gweChwcm9iZXNfb3Bjb2RlX3QgaW5zbiwKKwkJc3RydWN0IGFyY2hfcHJvYmVzX2luc24gKmFzaSwKKwkJY29uc3Qgc3RydWN0IGRlY29kZV9oZWFkZXIgKmgpCit7CisJaW50IGltbSA9ICgoaW5zbiAmIDB4ZjAwKSA+PiA0KSArIChpbnNuICYgMHhmKTsKKwlhc2ktPnN0YWNrX3NwYWNlID0gaW1tOworCXJldHVybiBJTlNOX0dPT0RfTk9fU0xPVDsKK30KKyNlbmRpZgorCitlbnVtIHByb2Jlc19pbnNuIGNoZWNrZXJfc3RhY2tfdXNlX2ltbV94eHgocHJvYmVzX29wY29kZV90IGluc24sCisJCXN0cnVjdCBhcmNoX3Byb2Jlc19pbnNuICphc2ksCisJCWNvbnN0IHN0cnVjdCBkZWNvZGVfaGVhZGVyICpoKQoreworCWludCBpbW0gPSBpbnNuICYgMHhmZmY7CisJYXNpLT5zdGFja19zcGFjZSA9IGltbTsKKwlyZXR1cm4gSU5TTl9HT09EX05PX1NMT1Q7Cit9CisKK2VudW0gcHJvYmVzX2luc24gY2hlY2tlcl9zdGFja191c2Vfc3RtZHgocHJvYmVzX29wY29kZV90IGluc24sCisJCXN0cnVjdCBhcmNoX3Byb2Jlc19pbnNuICphc2ksCisJCWNvbnN0IHN0cnVjdCBkZWNvZGVfaGVhZGVyICpoKQoreworCXVuc2lnbmVkIGludCByZWdsaXN0ID0gaW5zbiAmIDB4ZmZmZjsKKwlpbnQgcGJpdCA9IGluc24gJiAoMSA8PCAyNCk7CisJYXNpLT5zdGFja19zcGFjZSA9IChod2VpZ2h0MzIocmVnbGlzdCkgLSAoIXBiaXQgPyAxIDogMCkpICogNDsKKworCXJldHVybiBJTlNOX0dPT0RfTk9fU0xPVDsKK30KKworY29uc3QgdW5pb24gZGVjb2RlX2FjdGlvbiBzdGFja19jaGVja19hY3Rpb25zW10gPSB7CisJW1NUQUNLX1VTRV9OT05FXSA9IHsuZGVjb2RlciA9IGNoZWNrZXJfc3RhY2tfdXNlX25vbmV9LAorCVtTVEFDS19VU0VfVU5LTk9XTl0gPSB7LmRlY29kZXIgPSBjaGVja2VyX3N0YWNrX3VzZV91bmtub3dufSwKKyNpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAorCVtTVEFDS19VU0VfRklYRURfMFhYXSA9IHsuZGVjb2RlciA9IGNoZWNrZXJfc3RhY2tfdXNlX2ltbV8weHh9LAorCVtTVEFDS19VU0VfVDMyU1RSRF0gPSB7LmRlY29kZXIgPSBjaGVja2VyX3N0YWNrX3VzZV90MzJzdHJkfSwKKyNlbHNlCisJW1NUQUNLX1VTRV9GSVhFRF9YMFhdID0gey5kZWNvZGVyID0gY2hlY2tlcl9zdGFja191c2VfaW1tX3gweH0sCisjZW5kaWYKKwlbU1RBQ0tfVVNFX0ZJWEVEX1hYWF0gPSB7LmRlY29kZXIgPSBjaGVja2VyX3N0YWNrX3VzZV9pbW1feHh4fSwKKwlbU1RBQ0tfVVNFX1NUTURYXSA9IHsuZGVjb2RlciA9IGNoZWNrZXJfc3RhY2tfdXNlX3N0bWR4fSwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9jaGVja2Vycy10aHVtYi5jIGIvYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvY2hlY2tlcnMtdGh1bWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjA4ZTNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvY2hlY2tlcnMtdGh1bWIuYwpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIGFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL2NoZWNrZXJzLXRodW1iLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSHVhd2VpIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgIi4uL2RlY29kZS5oIgorI2luY2x1ZGUgIi4uL2RlY29kZS10aHVtYi5oIgorI2luY2x1ZGUgImNoZWNrZXJzLmgiCisKK3N0YXRpYyBlbnVtIHByb2Jlc19pbnNuIF9fa3Byb2JlcyB0MzJfY2hlY2tfc3RhY2socHJvYmVzX29wY29kZV90IGluc24sCisJCXN0cnVjdCBhcmNoX3Byb2Jlc19pbnNuICphc2ksCisJCWNvbnN0IHN0cnVjdCBkZWNvZGVfaGVhZGVyICpoKQoreworCS8qCisJICogUFJPQkVTX1QzMl9MRE1TVE0sIFBST0JFU19UMzJfTERSRFNUUkQgYW5kIFBST0JFU19UMzJfTERSU1RSCisJICogbWF5IGdldCBoZXJlLiBTaW1wbHkgbWFyayBhbGwgbm9ybWFsIGluc25zIGFzIFNUQUNLX1VTRV9OT05FLgorCSAqLworCXN0YXRpYyBjb25zdCB1bmlvbiBkZWNvZGVfaXRlbSB0YWJsZVtdID0geworCisJCS8qCisJCSAqIEZpcnN0LCBmaWx0ZXIgb3V0IGFsbCBsZHIgaW5zbnMgdG8gbWFrZSBvdXIgbGlmZSBlYXNpZXIuCisJCSAqIEZvbGxvd2luZyBsb2FkIGluc25zIG1heSBjb21lIGhlcmU6CisJCSAqIExETSwgTERSRCwgTERSLgorCQkgKiBJbiBUMzIgZW5jb2RpbmcsIGJpdCAyMCBpcyBlbm91Z2ggZm9yIGRpc3Rpbmd1aXNoaW5nCisJCSAqIGxvYWQgYW5kIHN0b3JlLiBBbGwgbG9hZCBpbnNucyBoYXZlIHRoaXMgYml0IHNldCwgd2hlbgorCQkgKiBhbGwgc3RvcmUgaW5zbnMgaGF2ZSB0aGlzIGJpdCBjbGVhci4KKwkJICovCisJCURFQ09ERV9DVVNUT00JKDB4MDAxMDAwMDAsIDB4MDAxMDAwMDAsIFNUQUNLX1VTRV9OT05FKSwKKworCQkvKgorCQkgKiBNYXJrIGFsbCAnU1RSeyxCLEh9LCBSdCwgW1JuLCBSbV0nIGFzIFNUQUNLX1VTRV9VTktOT1dOCisJCSAqIGlmIFJuIG9yIFJtIGlzIFNQLiBUMzIgZG9lc24ndCBlbmNvZGUgU1RSRC4KKwkJICovCisJCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHggfCBSbiB8IFJ0IHwgICAgICAgICB8IFJtIHwqLworCQkvKiBTVFIgKHJlZ2lzdGVyKQkxMTExIDEwMDAgMDEwMCB4eHh4IHh4eHggMDAwMCAwMHh4IHh4eHggKi8KKwkJLyogU1RSQiAocmVnaXN0ZXIpCTExMTEgMTAwMCAwMDAwIHh4eHggeHh4eCAwMDAwIDAweHggeHh4eCAqLworCQkvKiBTVFJIIChyZWdpc3RlcikJMTExMSAxMDAwIDAwMTAgeHh4eCB4eHh4IDAwMDAgMDB4eCB4eHh4ICovCisJCS8qIElOVkFMSUQgSU5TTgkJMTExMSAxMDAwIDAxMTAgeHh4eCB4eHh4IDAwMDAgMDB4eCB4eHh4ICovCisJCS8qIEJ5IEludHJvZHVjaW5nIElOVkFMSUQgSU5TTiwgYml0IDIxIGFuZCAyMiBjYW4gYmUgaWdub3JlZC4gKi8KKwkJREVDT0RFX09SCSgweGZmOWYwZmMwLCAweGY4MGQwMDAwKSwKKwkJREVDT0RFX0NVU1RPTQkoMHhmZjkwMGZjZiwgMHhmODAwMDAwZCwgU1RBQ0tfVVNFX1VOS05PV04pLAorCisKKwkJLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4eCB8IFJuIHwgUnQgfCBQVVd8ICAgaW1tOCAgfCovCisJCS8qIFNUUiAoaW1tIDgpCQkxMTExIDEwMDAgMDEwMCAxMTAxIHh4eHggMTEweCB4eHh4IHh4eHggKi8KKwkJLyogU1RSQiAoaW1tIDgpCQkxMTExIDEwMDAgMDAwMCAxMTAxIHh4eHggMTEweCB4eHh4IHh4eHggKi8KKwkJLyogU1RSSCAoaW1tIDgpCQkxMTExIDEwMDAgMDAxMCAxMTAxIHh4eHggMTEweCB4eHh4IHh4eHggKi8KKwkJLyogSU5WQUxJRCBJTlNOCQkxMTExIDEwMDAgMDExMCAxMTAxIHh4eHggMTEweCB4eHh4IHh4eHggKi8KKwkJLyogT25seSBjb25zaWRlciBVID09IDAgYW5kIFAgPT0gMTogc3RyeCByeCwgW3NwLCAjLTxpbW0+XSAqLworCQlERUNPREVfQ1VTVE9NCSgweGZmOWYwZTAwLCAweGY4MGQwYzAwLCBTVEFDS19VU0VfRklYRURfMFhYKSwKKworCQkvKiBGb3IgU1RSeyxCLEh9IChpbW0gMTIpLCBvZmZzZXQgaXMgYWx3YXlzIHBvc2l0aXZlLCBzbyBpZ25vcmUgdGhlbS4gKi8KKworCQkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAgVSBXIHwgUm4gfCBSdCB8IFJ0MnwgICBpbW04ICB8Ki8KKwkJLyogU1RSRCAoaW1tZWRpYXRlKQkxMTEwIDEwMDEgMDF4MCAxMTAxIHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKwkJLyoKKwkJICogT25seSBjb25zaWRlciBVID09IDAgYW5kIFAgPT0gMS4KKwkJICogQWxzbyBub3RlIHRoYXQgU1RSRCBpbiBUMzIgZW5jb2RpbmcgaXMgc3BlY2lhbDoKKwkJICogaW1tID0gWmVyb0V4dGVuZChpbW04OicwMCcsIDMyKQorCQkgKi8KKwkJREVDT0RFX0NVU1RPTQkoMHhmZmRmMDAwMCwgMHhlOTRkMDAwMCwgU1RBQ0tfVVNFX1QzMlNUUkQpLAorCisJCS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBSbiB8ICovCisJCS8qIFNUTURCCQkxMTEwIDEwMDEgMDB4MCAxMTAxIHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKwkJREVDT0RFX0NVU1RPTQkoMHhmZmRmMDAwMCwgMHhlOTBkMDAwMCwgU1RBQ0tfVVNFX1NUTURYKSwKKworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJREVDT0RFX0NVU1RPTQkoMCwgMCwgU1RBQ0tfVVNFX05PTkUpLAorCQlERUNPREVfRU5ECisJfTsKKworCXJldHVybiBwcm9iZXNfZGVjb2RlX2luc24oaW5zbiwgYXNpLCB0YWJsZSwgZmFsc2UsIGZhbHNlLCBzdGFja19jaGVja19hY3Rpb25zLCBOVUxMKTsKK30KKworY29uc3Qgc3RydWN0IGRlY29kZV9jaGVja2VyIHQzMl9zdGFja19jaGVja2VyW05VTV9QUk9CRVNfVDMyX0FDVElPTlNdID0geworCVtQUk9CRVNfVDMyX0xETVNUTV0gPSB7LmNoZWNrZXIgPSB0MzJfY2hlY2tfc3RhY2t9LAorCVtQUk9CRVNfVDMyX0xEUkRTVFJEXSA9IHsuY2hlY2tlciA9IHQzMl9jaGVja19zdGFja30sCisJW1BST0JFU19UMzJfTERSU1RSXSA9IHsuY2hlY2tlciA9IHQzMl9jaGVja19zdGFja30sCit9OworCisvKgorICogU2VlIGZvbGxvd2luZyBjb21tZW50cy4gVGhpcyBpbnNuIG11c3QgYmUgJ3B1c2gnLgorICovCitzdGF0aWMgZW51bSBwcm9iZXNfaW5zbiBfX2twcm9iZXMgdDE2X2NoZWNrX3N0YWNrKHByb2Jlc19vcGNvZGVfdCBpbnNuLAorCQlzdHJ1Y3QgYXJjaF9wcm9iZXNfaW5zbiAqYXNpLAorCQljb25zdCBzdHJ1Y3QgZGVjb2RlX2hlYWRlciAqaCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnbGlzdCA9IGluc24gJiAweDFmZjsKKwlhc2ktPnN0YWNrX3NwYWNlID0gaHdlaWdodDMyKHJlZ2xpc3QpICogNDsKKwlyZXR1cm4gSU5TTl9HT09EOworfQorCisvKgorICogVDE2IGVuY29kaW5nIGlzIHNpbXBsZTogb25seSB0aGUgJ3B1c2gnIGluc24gY2FuIG5lZWQgZXh0cmEgc3RhY2sgc3BhY2UuCisgKiBPdGhlciBpbnNucywgbGlrZSBzdHIsIGNhbiBvbmx5IHVzZSByMC1yNyBhcyBSbi4KKyAqLworY29uc3Qgc3RydWN0IGRlY29kZV9jaGVja2VyIHQxNl9zdGFja19jaGVja2VyW05VTV9QUk9CRVNfVDE2X0FDVElPTlNdID0geworCVtQUk9CRVNfVDE2X1BVU0hdID0gey5jaGVja2VyID0gdDE2X2NoZWNrX3N0YWNrfSwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9jaGVja2Vycy5oIGIvYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvY2hlY2tlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjZjOWU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvY2hlY2tlcnMuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvY2hlY2tlcnMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBIdWF3ZWkgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfQVJNX0tFUk5FTF9QUk9CRVNfQ0hFQ0tFUlNfSAorI2RlZmluZSBfQVJNX0tFUk5FTF9QUk9CRVNfQ0hFQ0tFUlNfSAorCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlICIuLi9kZWNvZGUuaCIKKworZXh0ZXJuIHByb2Jlc19jaGVja190IGNoZWNrZXJfc3RhY2tfdXNlX25vbmU7CitleHRlcm4gcHJvYmVzX2NoZWNrX3QgY2hlY2tlcl9zdGFja191c2VfdW5rbm93bjsKKyNpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAorZXh0ZXJuIHByb2Jlc19jaGVja190IGNoZWNrZXJfc3RhY2tfdXNlX2ltbV8weHg7CisjZWxzZQorZXh0ZXJuIHByb2Jlc19jaGVja190IGNoZWNrZXJfc3RhY2tfdXNlX2ltbV94MHg7CisjZW5kaWYKK2V4dGVybiBwcm9iZXNfY2hlY2tfdCBjaGVja2VyX3N0YWNrX3VzZV9pbW1feHh4OworZXh0ZXJuIHByb2Jlc19jaGVja190IGNoZWNrZXJfc3RhY2tfdXNlX3N0bWR4OworCitlbnVtIHsKKwlTVEFDS19VU0VfTk9ORSwKKwlTVEFDS19VU0VfVU5LTk9XTiwKKyNpZmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAorCVNUQUNLX1VTRV9GSVhFRF8wWFgsCisJU1RBQ0tfVVNFX1QzMlNUUkQsCisjZWxzZQorCVNUQUNLX1VTRV9GSVhFRF9YMFgsCisjZW5kaWYKKwlTVEFDS19VU0VfRklYRURfWFhYLAorCVNUQUNLX1VTRV9TVE1EWCwKKwlOVU1fU1RBQ0tfVVNFX1RZUEVTCit9OworCitleHRlcm4gY29uc3QgdW5pb24gZGVjb2RlX2FjdGlvbiBzdGFja19jaGVja19hY3Rpb25zW107CisKKyNpZm5kZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVjb2RlX2NoZWNrZXIgYXJtX3N0YWNrX2NoZWNrZXJbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZGVjb2RlX2NoZWNrZXIgYXJtX3JlZ3NfY2hlY2tlcltdOworI2Vsc2UKKyNlbmRpZgorZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZWNvZGVfY2hlY2tlciB0MzJfc3RhY2tfY2hlY2tlcltdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZWNvZGVfY2hlY2tlciB0MTZfc3RhY2tfY2hlY2tlcltdOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvY29yZS5jCnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMKcmVuYW1lIHRvIGFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL2NvcmUuYwppbmRleCA2ZDY0NDIwLi5hNGVjMjQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL2NvcmUuYwpAQCAtMzAsMTEgKzMwLDExIEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9idWcuaD4KKyNpbmNsdWRlIDxhc20vcGF0Y2guaD4KIAotI2luY2x1ZGUgImtwcm9iZXMuaCIKLSNpbmNsdWRlICJwcm9iZXMtYXJtLmgiCi0jaW5jbHVkZSAicHJvYmVzLXRodW1iLmgiCi0jaW5jbHVkZSAicGF0Y2guaCIKKyNpbmNsdWRlICIuLi9kZWNvZGUtYXJtLmgiCisjaW5jbHVkZSAiLi4vZGVjb2RlLXRodW1iLmgiCisjaW5jbHVkZSAiY29yZS5oIgogCiAjZGVmaW5lIE1JTl9TVEFDS19TSVpFKGFkZHIpIAkJCQlcCiAJbWluKCh1bnNpZ25lZCBsb25nKU1BWF9TVEFDS19TSVpFLAkJXApAQCAtNjEsNiArNjEsNyBAQAogCWtwcm9iZV9kZWNvZGVfaW5zbl90ICpkZWNvZGVfaW5zbjsKIAljb25zdCB1bmlvbiBkZWNvZGVfYWN0aW9uICphY3Rpb25zOwogCWludCBpczsKKwljb25zdCBzdHJ1Y3QgZGVjb2RlX2NoZWNrZXIgKipjaGVja2VyczsKIAogCWlmIChpbl9leGNlcHRpb25fdGV4dChhZGRyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NCw5ICs3NSwxMSBAQAogCQlpbnNuID0gX19vcGNvZGVfdGh1bWIzMl9jb21wb3NlKGluc24sIGluc3QyKTsKIAkJZGVjb2RlX2luc24gPSB0aHVtYjMyX3Byb2Jlc19kZWNvZGVfaW5zbjsKIAkJYWN0aW9ucyA9IGtwcm9iZXNfdDMyX2FjdGlvbnM7CisJCWNoZWNrZXJzID0ga3Byb2Jlc190MzJfY2hlY2tlcnM7CiAJfSBlbHNlIHsKIAkJZGVjb2RlX2luc24gPSB0aHVtYjE2X3Byb2Jlc19kZWNvZGVfaW5zbjsKIAkJYWN0aW9ucyA9IGtwcm9iZXNfdDE2X2FjdGlvbnM7CisJCWNoZWNrZXJzID0ga3Byb2Jlc190MTZfY2hlY2tlcnM7CiAJfQogI2Vsc2UgLyogIUNPTkZJR19USFVNQjJfS0VSTkVMICovCiAJdGh1bWIgPSBmYWxzZTsKQEAgLTg1LDEyICs4OCwxMyBAQAogCWluc24gPSBfX21lbV90b19vcGNvZGVfYXJtKCpwLT5hZGRyKTsKIAlkZWNvZGVfaW5zbiA9IGFybV9wcm9iZXNfZGVjb2RlX2luc247CiAJYWN0aW9ucyA9IGtwcm9iZXNfYXJtX2FjdGlvbnM7CisJY2hlY2tlcnMgPSBrcHJvYmVzX2FybV9jaGVja2VyczsKICNlbmRpZgogCiAJcC0+b3Bjb2RlID0gaW5zbjsKIAlwLT5haW5zbi5pbnNuID0gdG1wX2luc247CiAKLQlzd2l0Y2ggKCgqZGVjb2RlX2luc24pKGluc24sICZwLT5haW5zbiwgdHJ1ZSwgYWN0aW9ucykpIHsKKwlzd2l0Y2ggKCgqZGVjb2RlX2luc24pKGluc24sICZwLT5haW5zbiwgdHJ1ZSwgYWN0aW9ucywgY2hlY2tlcnMpKSB7CiAJY2FzZSBJTlNOX1JFSkVDVEVEOgkvKiBub3Qgc3VwcG9ydGVkICovCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xMTEsNiArMTE1LDE1IEBACiAJCWJyZWFrOwogCX0KIAorCS8qCisJICogTmV2ZXIgaW5zdHJ1bWVudCBpbnNuIGxpa2UgJ3N0ciByMCwgW3NwLCArLy1yMV0nLiBBbHNvLCBpbnNuIGxpa2VzCisJICogJ3N0ciByMCwgW3NwLCAjLTY4XScgc2hvdWxkIGFsc28gYmUgcHJvaGliaXRlZC4KKwkgKiBTZWUgX191bmRfc3ZjLgorCSAqLworCWlmICgocC0+YWluc24uc3RhY2tfc3BhY2UgPCAwKSB8fAorCQkJKHAtPmFpbnNuLnN0YWNrX3NwYWNlID4gTUFYX1NUQUNLX1NJWkUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNTAsMTkgKzE2MywzMSBAQAogICogbWVtb3J5LiBJdCBpcyBhbHNvIG5lZWRlZCB0byBhdG9taWNhbGx5IHNldCB0aGUgdHdvIGhhbGYtd29yZHMgb2YgYSAzMi1iaXQKICAqIFRodW1iIGJyZWFrcG9pbnQuCiAgKi8KLWludCBfX2twcm9iZXMgX19hcmNoX2Rpc2FybV9rcHJvYmUodm9pZCAqcCkKK3N0cnVjdCBwYXRjaCB7CisJdm9pZCAqYWRkcjsKKwl1bnNpZ25lZCBpbnQgaW5zbjsKK307CisKK3N0YXRpYyBpbnQgX19rcHJvYmVzX3JlbW92ZV9icmVha3BvaW50KHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGtwcm9iZSAqa3AgPSBwOwotCXZvaWQgKmFkZHIgPSAodm9pZCAqKSgodWludHB0cl90KWtwLT5hZGRyICYgfjEpOwotCi0JX19wYXRjaF90ZXh0KGFkZHIsIGtwLT5vcGNvZGUpOwotCisJc3RydWN0IHBhdGNoICpwID0gZGF0YTsKKwlfX3BhdGNoX3RleHQocC0+YWRkciwgcC0+aW5zbik7CiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgX19rcHJvYmVzIGtwcm9iZXNfcmVtb3ZlX2JyZWFrcG9pbnQodm9pZCAqYWRkciwgdW5zaWduZWQgaW50IGluc24pCit7CisJc3RydWN0IHBhdGNoIHAgPSB7CisJCS5hZGRyID0gYWRkciwKKwkJLmluc24gPSBpbnNuLAorCX07CisJc3RvcF9tYWNoaW5lKF9fa3Byb2Jlc19yZW1vdmVfYnJlYWtwb2ludCwgJnAsIGNwdV9vbmxpbmVfbWFzayk7Cit9CisKIHZvaWQgX19rcHJvYmVzIGFyY2hfZGlzYXJtX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogewotCXN0b3BfbWFjaGluZShfX2FyY2hfZGlzYXJtX2twcm9iZSwgcCwgY3B1X29ubGluZV9tYXNrKTsKKwlrcHJvYmVzX3JlbW92ZV9icmVha3BvaW50KCh2b2lkICopKCh1aW50cHRyX3QpcC0+YWRkciAmIH4xKSwKKwkJCXAtPm9wY29kZSk7CiB9CiAKIHZvaWQgX19rcHJvYmVzIGFyY2hfcmVtb3ZlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuaCBiL2FyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL2NvcmUuaApzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBhcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5oCnJlbmFtZSB0byBhcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9jb3JlLmgKaW5kZXggOWEyNzEyZS4uZWM1ZDFmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuaAorKysgYi9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9jb3JlLmgKQEAgLTE5LDcgKzE5LDggQEAKICNpZm5kZWYgX0FSTV9LRVJORUxfS1BST0JFU19ICiAjZGVmaW5lIF9BUk1fS0VSTkVMX0tQUk9CRVNfSAogCi0jaW5jbHVkZSAicHJvYmVzLmgiCisjaW5jbHVkZSA8YXNtL2twcm9iZXMuaD4KKyNpbmNsdWRlICIuLi9kZWNvZGUuaCIKIAogLyoKICAqIFRoZXNlIHVuZGVmaW5lZCBpbnN0cnVjdGlvbnMgbXVzdCBiZSB1bmlxdWUgYW5kCkBAIC0yOSw2ICszMCw4IEBACiAjZGVmaW5lIEtQUk9CRV9USFVNQjE2X0JSRUFLUE9JTlRfSU5TVFJVQ1RJT04JMHhkZTE4CiAjZGVmaW5lIEtQUk9CRV9USFVNQjMyX0JSRUFLUE9JTlRfSU5TVFJVQ1RJT04JMHhmN2YwYTAxOAogCitleHRlcm4gdm9pZCBrcHJvYmVzX3JlbW92ZV9icmVha3BvaW50KHZvaWQgKmFkZHIsIHVuc2lnbmVkIGludCBpbnNuKTsKKwogZW51bSBwcm9iZXNfaW5zbiBfX2twcm9iZXMKIGtwcm9iZV9kZWNvZGVfbGRtc3RtKGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9wcm9iZXNfaW5zbiAqYXNpLAogCQljb25zdCBzdHJ1Y3QgZGVjb2RlX2hlYWRlciAqaCk7CkBAIC0zNiwxNiArMzksMTkgQEAKIHR5cGVkZWYgZW51bSBwcm9iZXNfaW5zbiAoa3Byb2JlX2RlY29kZV9pbnNuX3QpKHByb2Jlc19vcGNvZGVfdCwKIAkJCQkJCXN0cnVjdCBhcmNoX3Byb2Jlc19pbnNuICosCiAJCQkJCQlib29sLAotCQkJCQkJY29uc3QgdW5pb24gZGVjb2RlX2FjdGlvbiAqKTsKKwkJCQkJCWNvbnN0IHVuaW9uIGRlY29kZV9hY3Rpb24gKiwKKwkJCQkJCWNvbnN0IHN0cnVjdCBkZWNvZGVfY2hlY2tlciAqW10pOwogCiAjaWZkZWYgQ09ORklHX1RIVU1CMl9LRVJORUwKIAogZXh0ZXJuIGNvbnN0IHVuaW9uIGRlY29kZV9hY3Rpb24ga3Byb2Jlc190MzJfYWN0aW9uc1tdOwogZXh0ZXJuIGNvbnN0IHVuaW9uIGRlY29kZV9hY3Rpb24ga3Byb2Jlc190MTZfYWN0aW9uc1tdOwotCitleHRlcm4gY29uc3Qgc3RydWN0IGRlY29kZV9jaGVja2VyICprcHJvYmVzX3QzMl9jaGVja2Vyc1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZWNvZGVfY2hlY2tlciAqa3Byb2Jlc190MTZfY2hlY2tlcnNbXTsKICNlbHNlIC8qICFDT05GSUdfVEhVTUIyX0tFUk5FTCAqLwogCiBleHRlcm4gY29uc3QgdW5pb24gZGVjb2RlX2FjdGlvbiBrcHJvYmVzX2FybV9hY3Rpb25zW107CitleHRlcm4gY29uc3Qgc3RydWN0IGRlY29kZV9jaGVja2VyICprcHJvYmVzX2FybV9jaGVja2Vyc1tdOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvb3B0LWFybS5jIGIvYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvb3B0LWFybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZGVjYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy9vcHQtYXJtLmMKQEAgLTAsMCArMSwzNzAgQEAKKy8qCisgKiAgS2VybmVsIFByb2JlcyBKdW1wIE9wdGltaXphdGlvbiAoT3B0cHJvYmVzKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMDIsIDIwMDQKKyAqIENvcHlyaWdodCAoQykgSGl0YWNoaSBMdGQuLCAyMDEyCisgKiBDb3B5cmlnaHQgKEMpIEh1YXdlaSBJbmMuLCAyMDE0CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9qdW1wX2xhYmVsLmg+CisjaW5jbHVkZSA8YXNtL2twcm9iZXMuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorLyogZm9yIGFybV9nZW5fYnJhbmNoICovCisjaW5jbHVkZSA8YXNtL2luc24uaD4KKy8qIGZvciBwYXRjaF90ZXh0ICovCisjaW5jbHVkZSA8YXNtL3BhdGNoLmg+CisKKyNpbmNsdWRlICJjb3JlLmgiCisKKy8qCisgKiBTZWUgcmVnaXN0ZXJfdXNhZ2VfZmxhZ3MuIElmIHRoZSBwcm9iZWQgaW5zdHJ1Y3Rpb24gZG9lc24ndCB1c2UgUEMsCisgKiB3ZSBjYW4gY29weSBpdCBpbnRvIHRlbXBsYXRlIGFuZCBoYXZlIGl0IGV4ZWN1dGVkIGRpcmVjdGx5IHdpdGhvdXQKKyAqIHNpbXVsYXRpb24gb3IgZW11bGF0aW9uLgorICovCisjZGVmaW5lIEFSTV9SRUdfUEMJMTUKKyNkZWZpbmUgY2FuX2twcm9iZV9kaXJlY3RfZXhlYyhtKQkoIXRlc3RfYml0KEFSTV9SRUdfUEMsICYobSkpKQorCisvKgorICogTk9URTogdGhlIGZpcnN0IHN1YiBhbmQgYWRkIGluc3RydWN0aW9uIHdpbGwgYmUgbW9kaWZpZWQgYWNjb3JkaW5nCisgKiB0byB0aGUgc3RhY2sgY29zdCBvZiB0aGUgaW5zdHJ1Y3Rpb24uCisgKi8KK2FzbSAoCisJCQkiLmdsb2JhbCBvcHRwcm9iZV90ZW1wbGF0ZV9lbnRyeVxuIgorCQkJIm9wdHByb2JlX3RlbXBsYXRlX2VudHJ5OlxuIgorCQkJIi5nbG9iYWwgb3B0cHJvYmVfdGVtcGxhdGVfc3ViX3NwXG4iCisJCQkib3B0cHJvYmVfdGVtcGxhdGVfc3ViX3NwOiIKKwkJCSIJc3ViCXNwLCBzcCwgIzB4ZmZcbiIKKwkJCSIJc3RtaWEJc3AsIHtyMCAtIHIxNH0gXG4iCisJCQkiLmdsb2JhbCBvcHRwcm9iZV90ZW1wbGF0ZV9hZGRfc3BcbiIKKwkJCSJvcHRwcm9iZV90ZW1wbGF0ZV9hZGRfc3A6IgorCQkJIglhZGQJcjMsIHNwLCAjMHhmZlxuIgorCQkJIglzdHIJcjMsIFtzcCwgIzUyXVxuIgorCQkJIgltcnMJcjQsIGNwc3JcbiIKKwkJCSIJc3RyCXI0LCBbc3AsICM2NF1cbiIKKwkJCSIJbW92CXIxLCBzcFxuIgorCQkJIglsZHIJcjAsIDFmXG4iCisJCQkiCWxkcglyMiwgMmZcbiIKKwkJCS8qCisJCQkgKiBBRUFCSSByZXF1aXJlcyBhbiA4LWJ5dGVzIGFsaWdubWVudCBzdGFjay4gSWYKKwkJCSAqIFNQICUgOCAhPSAwIChTUCAlIDQgPT0gMCBzaG91bGQgYmUgZW5zdXJlZCksCisJCQkgKiBhbGxvYyBtb3JlIGJ5dGVzIGhlcmUuCisJCQkgKi8KKwkJCSIJYW5kCXI0LCBzcCwgIzRcbiIKKwkJCSIJc3ViCXNwLCBzcCwgcjRcbiIKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNQorCQkJIglibHgJcjJcbiIKKyNlbHNlCisJCQkiCW1vdiAgICAgbHIsIHBjXG4iCisJCQkiCW1vdglwYywgcjJcbiIKKyNlbmRpZgorCQkJIglhZGQJc3AsIHNwLCByNFxuIgorCQkJIglsZHIJcjEsIFtzcCwgIzY0XVxuIgorCQkJIgl0c3QJcjEsICMiX19zdHJpbmdpZnkoUFNSX1RfQklUKSJcbiIKKwkJCSIJbGRybmUJcjIsIFtzcCwgIzYwXVxuIgorCQkJIglvcnJuZQlyMiwgIzFcbiIKKwkJCSIJc3RybmUJcjIsIFtzcCwgIzYwXSBAIHNldCBiaXQwIG9mIFBDIGZvciB0aHVtYlxuIgorCQkJIgltc3IJY3Bzcl9jeHNmLCByMVxuIgorCQkJIi5nbG9iYWwgb3B0cHJvYmVfdGVtcGxhdGVfcmVzdG9yZV9iZWdpblxuIgorCQkJIm9wdHByb2JlX3RlbXBsYXRlX3Jlc3RvcmVfYmVnaW46XG4iCisJCQkiCWxkbWlhCXNwLCB7cjAgLSByMTV9XG4iCisJCQkiLmdsb2JhbCBvcHRwcm9iZV90ZW1wbGF0ZV9yZXN0b3JlX29yaWdfaW5zblxuIgorCQkJIm9wdHByb2JlX3RlbXBsYXRlX3Jlc3RvcmVfb3JpZ19pbnNuOlxuIgorCQkJIglub3BcbiIKKwkJCSIuZ2xvYmFsIG9wdHByb2JlX3RlbXBsYXRlX3Jlc3RvcmVfZW5kXG4iCisJCQkib3B0cHJvYmVfdGVtcGxhdGVfcmVzdG9yZV9lbmQ6XG4iCisJCQkiCW5vcFxuIgorCQkJIi5nbG9iYWwgb3B0cHJvYmVfdGVtcGxhdGVfdmFsXG4iCisJCQkib3B0cHJvYmVfdGVtcGxhdGVfdmFsOlxuIgorCQkJIjE6CS5sb25nIDBcbiIKKwkJCSIuZ2xvYmFsIG9wdHByb2JlX3RlbXBsYXRlX2NhbGxcbiIKKwkJCSJvcHRwcm9iZV90ZW1wbGF0ZV9jYWxsOlxuIgorCQkJIjI6CS5sb25nIDBcbiIKKwkJCSIuZ2xvYmFsIG9wdHByb2JlX3RlbXBsYXRlX2VuZFxuIgorCQkJIm9wdHByb2JlX3RlbXBsYXRlX2VuZDpcbiIpOworCisjZGVmaW5lIFRNUExfVkFMX0lEWCBcCisJKCh1bnNpZ25lZCBsb25nICopJm9wdHByb2JlX3RlbXBsYXRlX3ZhbCAtICh1bnNpZ25lZCBsb25nICopJm9wdHByb2JlX3RlbXBsYXRlX2VudHJ5KQorI2RlZmluZSBUTVBMX0NBTExfSURYIFwKKwkoKHVuc2lnbmVkIGxvbmcgKikmb3B0cHJvYmVfdGVtcGxhdGVfY2FsbCAtICh1bnNpZ25lZCBsb25nICopJm9wdHByb2JlX3RlbXBsYXRlX2VudHJ5KQorI2RlZmluZSBUTVBMX0VORF9JRFggXAorCSgodW5zaWduZWQgbG9uZyAqKSZvcHRwcm9iZV90ZW1wbGF0ZV9lbmQgLSAodW5zaWduZWQgbG9uZyAqKSZvcHRwcm9iZV90ZW1wbGF0ZV9lbnRyeSkKKyNkZWZpbmUgVE1QTF9BRERfU1AgXAorCSgodW5zaWduZWQgbG9uZyAqKSZvcHRwcm9iZV90ZW1wbGF0ZV9hZGRfc3AgLSAodW5zaWduZWQgbG9uZyAqKSZvcHRwcm9iZV90ZW1wbGF0ZV9lbnRyeSkKKyNkZWZpbmUgVE1QTF9TVUJfU1AgXAorCSgodW5zaWduZWQgbG9uZyAqKSZvcHRwcm9iZV90ZW1wbGF0ZV9zdWJfc3AgLSAodW5zaWduZWQgbG9uZyAqKSZvcHRwcm9iZV90ZW1wbGF0ZV9lbnRyeSkKKyNkZWZpbmUgVE1QTF9SRVNUT1JFX0JFR0lOIFwKKwkoKHVuc2lnbmVkIGxvbmcgKikmb3B0cHJvYmVfdGVtcGxhdGVfcmVzdG9yZV9iZWdpbiAtICh1bnNpZ25lZCBsb25nICopJm9wdHByb2JlX3RlbXBsYXRlX2VudHJ5KQorI2RlZmluZSBUTVBMX1JFU1RPUkVfT1JJR05fSU5TTiBcCisJKCh1bnNpZ25lZCBsb25nICopJm9wdHByb2JlX3RlbXBsYXRlX3Jlc3RvcmVfb3JpZ19pbnNuIC0gKHVuc2lnbmVkIGxvbmcgKikmb3B0cHJvYmVfdGVtcGxhdGVfZW50cnkpCisjZGVmaW5lIFRNUExfUkVTVE9SRV9FTkQgXAorCSgodW5zaWduZWQgbG9uZyAqKSZvcHRwcm9iZV90ZW1wbGF0ZV9yZXN0b3JlX2VuZCAtICh1bnNpZ25lZCBsb25nICopJm9wdHByb2JlX3RlbXBsYXRlX2VudHJ5KQorCisvKgorICogQVJNIGNhbiBhbHdheXMgb3B0aW1pemUgYW4gaW5zdHJ1Y3Rpb24gd2hlbiB1c2luZyBBUk0gSVNBLCBleGNlcHQKKyAqIGluc3RydWN0aW9ucyBsaWtlICdzdHIgcjAsIFtzcCwgcjFdJyB3aGljaCBzdG9yZSB0byBzdGFjayBhbmQgdW5hYmxlCisgKiB0byBkZXRlcm1pbmUgc3RhY2sgc3BhY2UgY29uc3VtcHRpb24gc3RhdGljYWxseS4KKyAqLworaW50IGFyY2hfcHJlcGFyZWRfb3B0aW5zbihzdHJ1Y3QgYXJjaF9vcHRpbWl6ZWRfaW5zbiAqb3B0aW5zbikKK3sKKwlyZXR1cm4gb3B0aW5zbi0+aW5zbiAhPSBOVUxMOworfQorCisvKgorICogSW4gQVJNIElTQSwga3Byb2JlIG9wdCBhbHdheXMgcmVwbGFjZSBvbmUgaW5zdHJ1Y3Rpb24gKDQgYnl0ZXMKKyAqIGFsaWduZWQgYW5kIDQgYnl0ZXMgbG9uZykuIEl0IGlzIGltcG9zc2libGUgdG8gZW5jb3VudGVyIGFub3RoZXIKKyAqIGtwcm9iZSBpbiB0aGUgYWRkcmVzcyByYW5nZS4gU28gYWx3YXlzIHJldHVybiAwLgorICovCitpbnQgYXJjaF9jaGVja19vcHRpbWl6ZWRfa3Byb2JlKHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVyIG11c3QgZW5zdXJlIGFkZHIgJiAzID09IDAgKi8KK3N0YXRpYyBpbnQgY2FuX29wdGltaXplKHN0cnVjdCBrcHJvYmUgKmtwKQoreworCWlmIChrcC0+YWluc24uc3RhY2tfc3BhY2UgPCAwKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIDI1NSBpcyB0aGUgYmlnZ2VzdCBpbW0gY2FuIGJlIHVzZWQgaW4gJ3N1YiByMCwgcjAsICM8aW1tPicuCisJICogTnVtYmVyIGxhcmdlciB0aGFuIDI1NSBuZWVkcyBzcGVjaWFsIGVuY29kaW5nLgorCSAqLworCWlmIChrcC0+YWluc24uc3RhY2tfc3BhY2UgPiAyNTUgLSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyogRnJlZSBvcHRpbWl6ZWQgaW5zdHJ1Y3Rpb24gc2xvdCAqLworc3RhdGljIHZvaWQKK19fYXJjaF9yZW1vdmVfb3B0aW1pemVkX2twcm9iZShzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3AsIGludCBkaXJ0eSkKK3sKKwlpZiAob3AtPm9wdGluc24uaW5zbikgeworCQlmcmVlX29wdGluc25fc2xvdChvcC0+b3B0aW5zbi5pbnNuLCBkaXJ0eSk7CisJCW9wLT5vcHRpbnNuLmluc24gPSBOVUxMOworCX0KK30KKworZXh0ZXJuIHZvaWQga3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCitzdGF0aWMgdm9pZAorb3B0aW1pemVkX2NhbGxiYWNrKHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qga3Byb2JlICpwID0gJm9wLT5rcDsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKworCS8qIFNhdmUgc2tpcHBlZCByZWdpc3RlcnMgKi8KKwlyZWdzLT5BUk1fcGMgPSAodW5zaWduZWQgbG9uZylvcC0+a3AuYWRkcjsKKwlyZWdzLT5BUk1fT1JJR19yMCA9IH4wVUw7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpZiAoa3Byb2JlX3J1bm5pbmcoKSkgeworCQlrcHJvYmVzX2luY19ubWlzc2VkX2NvdW50KCZvcC0+a3ApOworCX0gZWxzZSB7CisJCV9fdGhpc19jcHVfd3JpdGUoY3VycmVudF9rcHJvYmUsICZvcC0+a3ApOworCQlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX0FDVElWRTsKKwkJb3B0X3ByZV9oYW5kbGVyKCZvcC0+a3AsIHJlZ3MpOworCQlfX3RoaXNfY3B1X3dyaXRlKGN1cnJlbnRfa3Byb2JlLCBOVUxMKTsKKwl9CisKKwkvKgorCSAqIFdlIHNpbmdsZXN0ZXAgdGhlIHJlcGxhY2VkIGluc3RydWN0aW9uIG9ubHkgd2hlbiBpdCBjYW4ndCBiZQorCSAqIGV4ZWN1dGVkIGRpcmVjdGx5IGR1cmluZyByZXN0b3JlLgorCSAqLworCWlmICghcC0+YWluc24ua3Byb2JlX2RpcmVjdF9leGVjKQorCQlvcC0+a3AuYWluc24uaW5zbl9zaW5nbGVzdGVwKHAtPm9wY29kZSwgJnAtPmFpbnNuLCByZWdzKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworaW50IGFyY2hfcHJlcGFyZV9vcHRpbWl6ZWRfa3Byb2JlKHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCwgc3RydWN0IGtwcm9iZSAqb3JpZykKK3sKKwlrcHJvYmVfb3Bjb2RlX3QgKmNvZGU7CisJdW5zaWduZWQgbG9uZyByZWxfY2hrOworCXVuc2lnbmVkIGxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgc3RhY2tfcHJvdGVjdCA9IHNpemVvZihzdHJ1Y3QgcHRfcmVncyk7CisKKwlpZiAoIWNhbl9vcHRpbWl6ZShvcmlnKSkKKwkJcmV0dXJuIC1FSUxTRVE7CisKKwljb2RlID0gZ2V0X29wdGluc25fc2xvdCgpOworCWlmICghY29kZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIFZlcmlmeSBpZiB0aGUgYWRkcmVzcyBnYXAgaXMgaW4gMzJNaUIgcmFuZ2UsIGJlY2F1c2UgdGhpcyB1c2VzCisJICogYSByZWxhdGl2ZSBqdW1wLgorCSAqCisJICoga3Byb2JlIG9wdCB1c2UgYSAnYicgaW5zdHJ1Y3Rpb24gdG8gYnJhbmNoIHRvIG9wdGluc24uaW5zbi4KKwkgKiBBY2NvcmRpbmcgdG8gQVJNIG1hbnVhbCwgYnJhbmNoIGluc3RydWN0aW9uIGlzOgorCSAqCisJICogICAzMSAgMjggMjcgICAgICAgICAgIDI0IDIzICAgICAgICAgICAgIDAKKwkgKiAgKy0tLS0tLSstLS0rLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLSsKKwkgKiAgfCBjb25kIHwgMSB8IDAgfCAxIHwgMCB8ICAgICAgaW1tMjQgICAgIHwKKwkgKiAgKy0tLS0tLSstLS0rLS0tKy0tLSstLS0rLS0tLS0tLS0tLS0tLS0tLSsKKwkgKgorCSAqIGltbTI0IGlzIGEgc2lnbmVkIDI0IGJpdHMgaW50ZWdlci4gVGhlIHJlYWwgYnJhbmNoIG9mZnNldCBpcyBjb21wdXRlZAorCSAqIGJ5OiBpbW0zMiA9IFNpZ25FeHRlbmQoaW1tMjQ6JzAwJywgMzIpOworCSAqCisJICogU28gdGhlIG1heGltdW0gZm9yd2FyZCBicmFuY2ggc2hvdWxkIGJlOgorCSAqICAgKDB4MDA3ZmZmZmYgPDwgMikgPSAweDAxZmZmZmZjID0gIDB4MWZmZmZmYworCSAqIFRoZSBtYXhpbXVtIGJhY2t3b3JkIGJyYW5jaCBzaG91bGQgYmU6CisJICogICAoMHhmZjgwMDAwMCA8PCAyKSA9IDB4ZmUwMDAwMDAgPSAtMHgyMDAwMDAwCisJICoKKwkgKiBXZSBjYW4gc2ltcGx5IGNoZWNrIChyZWwgJiAweGZlMDAwMDAzKToKKwkgKiAgaWYgcmVsIGlzIHBvc2l0aXZlLCAocmVsICYgMHhmZTAwMDAwMCkgc2hvdWxlIGJlIDAKKwkgKiAgaWYgcmVsIGlzIG5lZ2l0aXZlLCAocmVsICYgMHhmZTAwMDAwMCkgc2hvdWxkIGJlIDB4ZmUwMDAwMDAKKwkgKiAgdGhlIGxhc3QgJzMnIGlzIHVzZWQgZm9yIGFsaWdubWVudCBjaGVja2luZy4KKwkgKi8KKwlyZWxfY2hrID0gKHVuc2lnbmVkIGxvbmcpKChsb25nKWNvZGUgLQorCQkJKGxvbmcpb3JpZy0+YWRkciArIDgpICYgMHhmZTAwMDAwMzsKKworCWlmICgocmVsX2NoayAhPSAwKSAmJiAocmVsX2NoayAhPSAweGZlMDAwMDAwKSkgeworCQkvKgorCQkgKiBEaWZmZXJlbnQgZnJvbSB4ODYsIHdlIGZyZWUgY29kZSBidWYgZGlyZWN0bHkgaW5zdGVhZCBvZgorCQkgKiBjYWxsaW5nIF9fYXJjaF9yZW1vdmVfb3B0aW1pemVkX2twcm9iZSgpIGJlY2F1c2UKKwkJICogd2UgaGF2ZSBub3QgZmlsbCBhbnkgZmllbGQgaW4gb3AuCisJCSAqLworCQlmcmVlX29wdGluc25fc2xvdChjb2RlLCAwKTsKKwkJcmV0dXJuIC1FUkFOR0U7CisJfQorCisJLyogQ29weSBhcmNoLWRlcC1pbnN0YW5jZSBmcm9tIHRlbXBsYXRlLiAqLworCW1lbWNweShjb2RlLCAmb3B0cHJvYmVfdGVtcGxhdGVfZW50cnksCisJCQlUTVBMX0VORF9JRFggKiBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CisKKwkvKiBBZGp1c3QgYnVmZmVyIGFjY29yZGluZyB0byBpbnN0cnVjdGlvbi4gKi8KKwlCVUdfT04ob3JpZy0+YWluc24uc3RhY2tfc3BhY2UgPCAwKTsKKworCXN0YWNrX3Byb3RlY3QgKz0gb3JpZy0+YWluc24uc3RhY2tfc3BhY2U7CisKKwkvKiBTaG91bGQgaGF2ZSBiZWVuIGZpbHRlcmVkIGJ5IGNhbl9vcHRpbWl6ZSgpLiAqLworCUJVR19PTihzdGFja19wcm90ZWN0ID4gMjU1KTsKKworCS8qIENyZWF0ZSBhICdzdWIgc3AsIHNwLCAjPHN0YWNrX3Byb3RlY3Q+JyAqLworCWNvZGVbVE1QTF9TVUJfU1BdID0gX19vcGNvZGVfdG9fbWVtX2FybSgweGUyNGRkMDAwIHwgc3RhY2tfcHJvdGVjdCk7CisJLyogQ3JlYXRlIGEgJ2FkZCByMywgc3AsICM8c3RhY2tfcHJvdGVjdD4nICovCisJY29kZVtUTVBMX0FERF9TUF0gPSBfX29wY29kZV90b19tZW1fYXJtKDB4ZTI4ZDMwMDAgfCBzdGFja19wcm90ZWN0KTsKKworCS8qIFNldCBwcm9iZSBpbmZvcm1hdGlvbiAqLworCXZhbCA9ICh1bnNpZ25lZCBsb25nKW9wOworCWNvZGVbVE1QTF9WQUxfSURYXSA9IHZhbDsKKworCS8qIFNldCBwcm9iZSBmdW5jdGlvbiBjYWxsICovCisJdmFsID0gKHVuc2lnbmVkIGxvbmcpb3B0aW1pemVkX2NhbGxiYWNrOworCWNvZGVbVE1QTF9DQUxMX0lEWF0gPSB2YWw7CisKKwkvKiBJZiBwb3NzaWJsZSwgY29weSBpbnNuIGFuZCBoYXZlIGl0IGV4ZWN1dGVkIGR1cmluZyByZXN0b3JlICovCisJb3JpZy0+YWluc24ua3Byb2JlX2RpcmVjdF9leGVjID0gZmFsc2U7CisJaWYgKGNhbl9rcHJvYmVfZGlyZWN0X2V4ZWMob3JpZy0+YWluc24ucmVnaXN0ZXJfdXNhZ2VfZmxhZ3MpKSB7CisJCWtwcm9iZV9vcGNvZGVfdCBmaW5hbF9icmFuY2ggPSBhcm1fZ2VuX2JyYW5jaCgKKwkJCQkodW5zaWduZWQgbG9uZykoJmNvZGVbVE1QTF9SRVNUT1JFX0VORF0pLAorCQkJCSh1bnNpZ25lZCBsb25nKShvcC0+a3AuYWRkcikgKyA0KTsKKwkJaWYgKGZpbmFsX2JyYW5jaCAhPSAwKSB7CisJCQkvKgorCQkJICogUmVwbGFjZSBvcmlnaW5hbCAnbGRtaWEgc3AsIHtyMCAtIHIxNX0nIHdpdGgKKwkJCSAqICdsZG1pYSB7cjAgLSByMTR9JywgcmVzdG9yZSBhbGwgcmVnaXN0ZXJzIGV4Y2VwdCBwYy4KKwkJCSAqLworCQkJY29kZVtUTVBMX1JFU1RPUkVfQkVHSU5dID0gX19vcGNvZGVfdG9fbWVtX2FybSgweGU4OWQ3ZmZmKTsKKworCQkJLyogVGhlIG9yaWdpbmFsIHByb2JlZCBpbnN0cnVjdGlvbiAqLworCQkJY29kZVtUTVBMX1JFU1RPUkVfT1JJR05fSU5TTl0gPSBfX29wY29kZV90b19tZW1fYXJtKG9yaWctPm9wY29kZSk7CisKKwkJCS8qIEp1bXAgYmFjayB0byBuZXh0IGluc3RydWN0aW9uICovCisJCQljb2RlW1RNUExfUkVTVE9SRV9FTkRdID0gX19vcGNvZGVfdG9fbWVtX2FybShmaW5hbF9icmFuY2gpOworCQkJb3JpZy0+YWluc24ua3Byb2JlX2RpcmVjdF9leGVjID0gdHJ1ZTsKKwkJfQorCX0KKworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZyljb2RlLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpKCZjb2RlW1RNUExfRU5EX0lEWF0pKTsKKworCS8qIFNldCBvcC0+b3B0aW5zbi5pbnNuIG1lYW5zIHByZXBhcmVkLiAqLworCW9wLT5vcHRpbnNuLmluc24gPSBjb2RlOworCXJldHVybiAwOworfQorCit2b2lkIF9fa3Byb2JlcyBhcmNoX29wdGltaXplX2twcm9iZXMoc3RydWN0IGxpc3RfaGVhZCAqb3BsaXN0KQoreworCXN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvcCwgdG1wLCBvcGxpc3QsIGxpc3QpIHsKKwkJdW5zaWduZWQgbG9uZyBpbnNuOworCQlXQVJOX09OKGtwcm9iZV9kaXNhYmxlZCgmb3AtPmtwKSk7CisKKwkJLyoKKwkJICogQmFja3VwIGluc3RydWN0aW9ucyB3aGljaCB3aWxsIGJlIHJlcGxhY2VkCisJCSAqIGJ5IGp1bXAgYWRkcmVzcworCQkgKi8KKwkJbWVtY3B5KG9wLT5vcHRpbnNuLmNvcGllZF9pbnNuLCBvcC0+a3AuYWRkciwKKwkJCQlSRUxBVElWRUpVTVBfU0laRSk7CisKKwkJaW5zbiA9IGFybV9nZW5fYnJhbmNoKCh1bnNpZ25lZCBsb25nKW9wLT5rcC5hZGRyLAorCQkJCSh1bnNpZ25lZCBsb25nKW9wLT5vcHRpbnNuLmluc24pOworCQlCVUdfT04oaW5zbiA9PSAwKTsKKworCQkvKgorCQkgKiBNYWtlIGl0IGEgY29uZGl0aW9uYWwgYnJhbmNoIGlmIHJlcGxhY2VkIGluc24KKwkJICogaXMgY29uc2l0aW9uYWwKKwkJICovCisJCWluc24gPSAoX19tZW1fdG9fb3Bjb2RlX2FybSgKKwkJCSAgb3AtPm9wdGluc24uY29waWVkX2luc25bMF0pICYgMHhmMDAwMDAwMCkgfAorCQkJKGluc24gJiAweDBmZmZmZmZmKTsKKworCQkvKgorCQkgKiBTaW1pbGFyIHRvIF9fYXJjaF9kaXNhcm1fa3Byb2JlLCBvcGVyYXRpb25zIHdoaWNoCisJCSAqIHJlbW92aW5nIGJyZWFrcG9pbnRzIG11c3QgYmUgd3JhcHBlZCBieSBzdG9wX21hY2hpbmUKKwkJICogdG8gYXZvaWQgcmFjaW5nLgorCQkgKi8KKwkJa3Byb2Jlc19yZW1vdmVfYnJlYWtwb2ludChvcC0+a3AuYWRkciwgaW5zbik7CisKKwkJbGlzdF9kZWxfaW5pdCgmb3AtPmxpc3QpOworCX0KK30KKwordm9pZCBhcmNoX3Vub3B0aW1pemVfa3Byb2JlKHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCkKK3sKKwlhcmNoX2FybV9rcHJvYmUoJm9wLT5rcCk7Cit9CisKKy8qCisgKiBSZWNvdmVyIG9yaWdpbmFsIGluc3RydWN0aW9ucyBhbmQgYnJlYWtwb2ludHMgZnJvbSByZWxhdGl2ZSBqdW1wcy4KKyAqIENhbGxlciBtdXN0IGNhbGwgd2l0aCBsb2NraW5nIGtwcm9iZV9tdXRleC4KKyAqLwordm9pZCBhcmNoX3Vub3B0aW1pemVfa3Byb2JlcyhzdHJ1Y3QgbGlzdF9oZWFkICpvcGxpc3QsCisJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqZG9uZV9saXN0KQoreworCXN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvcCwgdG1wLCBvcGxpc3QsIGxpc3QpIHsKKwkJYXJjaF91bm9wdGltaXplX2twcm9iZShvcCk7CisJCWxpc3RfbW92ZSgmb3AtPmxpc3QsIGRvbmVfbGlzdCk7CisJfQorfQorCitpbnQgYXJjaF93aXRoaW5fb3B0aW1pemVkX2twcm9iZShzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3AsCisJCQkJdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiAoKHVuc2lnbmVkIGxvbmcpb3AtPmtwLmFkZHIgPD0gYWRkciAmJgorCQkodW5zaWduZWQgbG9uZylvcC0+a3AuYWRkciArIFJFTEFUSVZFSlVNUF9TSVpFID4gYWRkcik7Cit9CisKK3ZvaWQgYXJjaF9yZW1vdmVfb3B0aW1pemVkX2twcm9iZShzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3ApCit7CisJX19hcmNoX3JlbW92ZV9vcHRpbWl6ZWRfa3Byb2JlKG9wLCAxKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLXRlc3QtYXJtLmMgYi9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWFybS5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLXRlc3QtYXJtLmMKcmVuYW1lIHRvIGFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtYXJtLmMKaW5kZXggY2IxNDI0Mi4uODg2NmFlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtdGVzdC1hcm0uYworKysgYi9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWFybS5jCkBAIC0xMiw4ICsxMiw5IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbV9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL29wY29kZXMuaD4KKyNpbmNsdWRlIDxhc20vcHJvYmVzLmg+CiAKLSNpbmNsdWRlICJrcHJvYmVzLXRlc3QuaCIKKyNpbmNsdWRlICJ0ZXN0LWNvcmUuaCIKIAogCiAjZGVmaW5lIFRFU1RfSVNBICIzMiIKQEAgLTIwMyw5ICsyMDQsOSBAQAogI2VuZGlmCiAJVEVTVF9HUk9VUCgiTWlzY2VsbGFuZW91cyBpbnN0cnVjdGlvbnMiKQogCi0JVEVTVCgibXJzCXIwLCBjcHNyIikKLQlURVNUKCJtcnNwbAlyNywgY3BzciIpCi0JVEVTVCgibXJzCXIxNCwgY3BzciIpCisJVEVTVF9STUFTS0VEKCJtcnMJciIsMCx+UFNSX0lHTk9SRV9CSVRTLCIsIGNwc3IiKQorCVRFU1RfUk1BU0tFRCgibXJzcGwJciIsNyx+UFNSX0lHTk9SRV9CSVRTLCIsIGNwc3IiKQorCVRFU1RfUk1BU0tFRCgibXJzCXIiLDE0LH5QU1JfSUdOT1JFX0JJVFMsIiwgY3BzciIpCiAJVEVTVF9VTlNVUFBPUlRFRChfX2luc3RfYXJtKDB4ZTEwZmYwMDApICIJQCBtcnMgcjE1LCBjcHNyIikKIAlURVNUX1VOU1VQUE9SVEVEKCJtcnMJcjAsIHNwc3IiKQogCVRFU1RfVU5TVVBQT1JURUQoIm1ycwlsciwgc3BzciIpCkBAIC0yMTQsOSArMjE1LDEyIEBACiAJVEVTVF9VTlNVUFBPUlRFRCgibXNyCWNwc3JfZiwgbHIiKQogCVRFU1RfVU5TVVBQT1JURUQoIm1zcglzcHNyLCByMCIpCiAKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNSB8fCBcCisgICAgKF9fTElOVVhfQVJNX0FSQ0hfXyA9PSA0ICYmICFkZWZpbmVkKENPTkZJR19DUFVfMzJ2NCkpCiAJVEVTVF9CRl9SKCJieAlyIiwwLDJmLCIiKQogCVRFU1RfQkJfUigiYngJciIsNywyZiwiIikKIAlURVNUX0JGX1IoImJ4ZXEJciIsMTQsMmYsIiIpCisjZW5kaWYKIAogI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA1CiAJVEVTVF9SKCJjbHoJcjAsIHIiLDAsIDB4MCwiIikKQEAgLTQ3Niw3ICs0ODAsOSBAQAogCVRFU1RfR1JPVVAoIkV4dHJhIGxvYWQvc3RvcmUgaW5zdHJ1Y3Rpb25zIikKIAogCVRFU1RfUlBSKCAgInN0cmgJciIsMCwgVkFMMSwiLCBbciIsMSwgNDgsIiwgLXIiLDIsIDI0LCJdIikKLQlURVNUX1JQUiggICJzdHJlcWgJciIsMTQsVkFMMiwiLCBbciIsMTMsMCwgIiwgciIsMTIsIDQ4LCJdIikKKwlURVNUX1JQUiggICJzdHJlcWgJciIsMTQsVkFMMiwiLCBbciIsMTEsMCwgIiwgciIsMTIsIDQ4LCJdIikKKwlURVNUX1VOU1VQUE9SVEVEKCAgInN0cmVxaAlyMTQsIFtyMTMsIHIxMl0iKQorCVRFU1RfVU5TVVBQT1JURUQoICAic3RyZXFoCXIxNCwgW3IxMiwgcjEzXSIpCiAJVEVTVF9SUFIoICAic3RyaAlyIiwxLCBWQUwxLCIsIFtyIiwyLCAyNCwiLCByIiwzLCAgNDgsIl0hIikKIAlURVNUX1JQUiggICJzdHJuZWgJciIsMTIsVkFMMiwiLCBbciIsMTEsNDgsIiwgLXIiLDEwLDI0LCJdISIpCiAJVEVTVF9SUFIoICAic3RyaAlyIiwyLCBWQUwxLCIsIFtyIiwzLCAyNCwiXSwgciIsNCwgNDgsIiIpCkBAIC01MDEsNiArNTA3LDkgQEAKIAlURVNUX1JQKCAgICJzdHJwbGgJciIsMTIsVkFMMiwiLCBbciIsMTEsMjQsIiwgIy00XSEiKQogCVRFU1RfUlAoICAgInN0cmgJciIsMiwgVkFMMSwiLCBbciIsMywgMjQsIl0sICM0OCIpCiAJVEVTVF9SUCggICAic3RyaAlyIiwxMCxWQUwyLCIsIFtyIiw5LCA2NCwiXSwgIy00OCIpCisJVEVTVF9SUCggICAic3RyaAlyIiwzLCBWQUwxLCIsIFtyIiwxMyxURVNUX01FTU9SWV9TSVpFLCIsICMtIl9fc3RyaW5naWZ5KE1BWF9TVEFDS19TSVpFKSJdISIpCisJVEVTVF9VTlNVUFBPUlRFRCgic3RyaCByMywgW3IxMywgIy0iX19zdHJpbmdpZnkoTUFYX1NUQUNLX1NJWkUpIi04XSEiKQorCVRFU1RfUlAoICAgInN0cmgJciIsNCwgVkFMMSwiLCBbciIsMTQsVEVTVF9NRU1PUllfU0laRSwiLCAjLSJfX3N0cmluZ2lmeShNQVhfU1RBQ0tfU0laRSkiLThdISIpCiAJVEVTVF9VTlNVUFBPUlRFRChfX2luc3RfYXJtKDB4ZTFlZmMzYjApICIJQCBzdHJoIHIxMiwgW3BjLCAjNDhdISIpCiAJVEVTVF9VTlNVUFBPUlRFRChfX2luc3RfYXJtKDB4ZTBjOWYzYjApICIJQCBzdHJoIHBjLCBbcjldLCAjNDgiKQogCkBAIC01NjUsNyArNTc0LDkgQEAKIAogI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA1CiAJVEVTVF9SUFIoICAic3RyZAlyIiwwLCBWQUwxLCIsIFtyIiwxLCA0OCwiLCAtciIsMiwyNCwiXSIpCi0JVEVTVF9SUFIoICAic3RyY2NkCXIiLDgsIFZBTDIsIiwgW3IiLDEzLDAsICIsIHIiLDEyLDQ4LCJdIikKKwlURVNUX1JQUiggICJzdHJjY2QJciIsOCwgVkFMMiwiLCBbciIsMTEsMCwgIiwgciIsMTIsNDgsIl0iKQorCVRFU1RfVU5TVVBQT1JURUQoICAic3RyY2NkIHI4LCBbcjEzLCByMTJdIikKKwlURVNUX1VOU1VQUE9SVEVEKCAgInN0cmNjZCByOCwgW3IxMiwgcjEzXSIpCiAJVEVTVF9SUFIoICAic3RyZAlyIiw0LCBWQUwxLCIsIFtyIiwyLCAyNCwiLCByIiwzLCA0OCwiXSEiKQogCVRFU1RfUlBSKCAgInN0cmNzZAlyIiwxMixWQUwyLCIsIFtyIiwxMSw0OCwiLCAtciIsMTAsMjQsIl0hIikKIAlURVNUX1JQUiggICJzdHJkCXIiLDIsIFZBTDEsIiwgW3IiLDUsIDI0LCJdLCByIiw0LDQ4LCIiKQpAQCAtNTg5LDYgKzYwMCw5IEBACiAJVEVTVF9SUCggICAic3RydmNkCXIiLDEyLFZBTDIsIiwgW3IiLDExLDI0LCIsICMtMTZdISIpCiAJVEVTVF9SUCggICAic3RyZAlyIiwyLCBWQUwxLCIsIFtyIiw0LCAyNCwiXSwgIzQ4IikKIAlURVNUX1JQKCAgICJzdHJkCXIiLDEwLFZBTDIsIiwgW3IiLDksIDY0LCJdLCAjLTQ4IikKKwlURVNUX1JQKCAgICJzdHJkCXIiLDYsIFZBTDEsIiwgW3IiLDEzLFRFU1RfTUVNT1JZX1NJWkUsIiwgIy0iX19zdHJpbmdpZnkoTUFYX1NUQUNLX1NJWkUpIl0hIikKKwlURVNUX1VOU1VQUE9SVEVEKCJzdHJkIHI2LCBbcjEzLCAjLSJfX3N0cmluZ2lmeShNQVhfU1RBQ0tfU0laRSkiLThdISIpCisJVEVTVF9SUCggICAic3RyZAlyIiw0LCBWQUwxLCIsIFtyIiwxMixURVNUX01FTU9SWV9TSVpFLCIsICMtIl9fc3RyaW5naWZ5KE1BWF9TVEFDS19TSVpFKSItOF0hIikKIAlURVNUX1VOU1VQUE9SVEVEKF9faW5zdF9hcm0oMHhlMWVmYzNmMCkgIglAIHN0cmQgcjEyLCBbcGMsICM0OF0hIikKIAogCVRFU1RfUCgJICAgImxkcmQJcjAsIFtyIiwwLCAyNCwiLCAjLThdIikKQEAgLTYzNywxNCArNjUxLDIwIEBACiAJVEVTVF9SUCggInN0ciJieXRlIglyIiwxMixWQUwyLCIsIFtyIiwxMSwyNCwiLCAjLTRdISIpCQlcCiAJVEVTVF9SUCggInN0ciJieXRlIglyIiwyLCBWQUwxLCIsIFtyIiwzLCAyNCwiXSwgIzQ4IikJCVwKIAlURVNUX1JQKCAic3RyImJ5dGUiCXIiLDEwLFZBTDIsIiwgW3IiLDksIDY0LCJdLCAjLTQ4IikJCVwKKwlURVNUX1JQKCAic3RyImJ5dGUiCXIiLDMsIFZBTDEsIiwgW3IiLDEzLFRFU1RfTUVNT1JZX1NJWkUsIiwgIy0iX19zdHJpbmdpZnkoTUFYX1NUQUNLX1NJWkUpIl0hIikgXAorCVRFU1RfVU5TVVBQT1JURUQoInN0ciJieXRlIiByMywgW3IxMywgIy0iX19zdHJpbmdpZnkoTUFYX1NUQUNLX1NJWkUpIi04XSEiKQkJCQlcCisJVEVTVF9SUCggInN0ciJieXRlIglyIiw0LCBWQUwxLCIsIFtyIiwxMCxURVNUX01FTU9SWV9TSVpFLCIsICMtIl9fc3RyaW5naWZ5KE1BWF9TVEFDS19TSVpFKSItOF0hIikgXAogCVRFU1RfUlBSKCJzdHIiYnl0ZSIJciIsMCwgVkFMMSwiLCBbciIsMSwgNDgsIiwgLXIiLDIsIDI0LCJdIikJXAotCVRFU1RfUlBSKCJzdHIiYnl0ZSIJciIsMTQsVkFMMiwiLCBbciIsMTMsMCwgIiwgciIsMTIsIDQ4LCJdIikJXAorCVRFU1RfUlBSKCJzdHIiYnl0ZSIJciIsMTQsVkFMMiwiLCBbciIsMTEsMCwgIiwgciIsMTIsIDQ4LCJdIikJXAorCVRFU1RfVU5TVVBQT1JURUQoInN0ciJieXRlIiByMTQsIFtyMTMsIHIxMl0iKQkJCQlcCisJVEVTVF9VTlNVUFBPUlRFRCgic3RyImJ5dGUiIHIxNCwgW3IxMiwgcjEzXSIpCQkJCVwKIAlURVNUX1JQUigic3RyImJ5dGUiCXIiLDEsIFZBTDEsIiwgW3IiLDIsIDI0LCIsIHIiLDMsICA0OCwiXSEiKQlcCiAJVEVTVF9SUFIoInN0ciJieXRlIglyIiwxMixWQUwyLCIsIFtyIiwxMSw0OCwiLCAtciIsMTAsMjQsIl0hIikJXAogCVRFU1RfUlBSKCJzdHIiYnl0ZSIJciIsMiwgVkFMMSwiLCBbciIsMywgMjQsIl0sIHIiLDQsIDQ4LCIiKQlcCiAJVEVTVF9SUFIoInN0ciJieXRlIglyIiwxMCxWQUwyLCIsIFtyIiw5LCA0OCwiXSwgLXIiLDExLDI0LCIiKQlcCiAJVEVTVF9SUFIoInN0ciJieXRlIglyIiwwLCBWQUwxLCIsIFtyIiwxLCAyNCwiLCByIiwyLCAgMzIsIiwgYXNsICMxXSIpXAotCVRFU1RfUlBSKCJzdHIiYnl0ZSIJciIsMTQsVkFMMiwiLCBbciIsMTMsMCwgIiwgciIsMTIsIDMyLCIsIGxzciAjMl0iKVwKKwlURVNUX1JQUigic3RyImJ5dGUiCXIiLDE0LFZBTDIsIiwgW3IiLDExLDAsICIsIHIiLDEyLCAzMiwiLCBsc3IgIzJdIilcCisJVEVTVF9VTlNVUFBPUlRFRCgic3RyImJ5dGUiCXIxNCwgW3IxMywgcjEyLCBsc3IgIzJdIikJCVwKIAlURVNUX1JQUigic3RyImJ5dGUiCXIiLDEsIFZBTDEsIiwgW3IiLDIsIDI0LCIsIHIiLDMsICAzMiwiLCBhc3IgIzNdISIpXAogCVRFU1RfUlBSKCJzdHIiYnl0ZSIJciIsMTIsVkFMMiwiLCBbciIsMTEsMjQsIiwgciIsMTAsIDQsIiwgcm9yICMzMV0hIilcCiAJVEVTVF9QKCAgImxkciJieXRlIglyMCwgW3IiLDAsICAyNCwiLCAjLTJdIikJCQlcCkBAIC02NjgsMTIgKzY4OCwxMiBAQAogCiAJTE9BRF9TVE9SRSgiIikKIAlURVNUX1AoICAgInN0cglwYywgW3IiLDAsMCwiLCAjMTUqNF0iKQotCVRFU1RfUiggICAic3RyCXBjLCBbc3AsIHIiLDIsMTUqNCwiXSIpCisJVEVTVF9VTlNVUFBPUlRFRCggICAic3RyCXBjLCBbc3AsIHIyXSIpCiAJVEVTVF9CRiggICJsZHIJcGMsIFtzcCwgIzE1KjRdIikKIAlURVNUX0JGX1IoImxkcglwYywgW3NwLCByIiwyLDE1KjQsIl0iKQogCiAJVEVTVF9QKCAgICJzdHIJc3AsIFtyIiwwLDAsIiwgIzEzKjRdIikKLQlURVNUX1IoICAgInN0cglzcCwgW3NwLCByIiwyLDEzKjQsIl0iKQorCVRFU1RfVU5TVVBQT1JURUQoICAgInN0cglzcCwgW3NwLCByMl0iKQogCVRFU1RfQkYoICAibGRyCXNwLCBbc3AsICMxMyo0XSIpCiAJVEVTVF9CRl9SKCJsZHIJc3AsIFtzcCwgciIsMiwxMyo0LCJdIikKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtdGVzdC5jIGIvYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9hcm0va2VybmVsL2twcm9iZXMtdGVzdC5jCnJlbmFtZSB0byBhcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYwppbmRleCBiMjA2ZDc3Li45Nzc1ZGUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy10ZXN0LmMKKysrIGIvYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmMKQEAgLTIwOSwxMCArMjA5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8YXNtL29wY29kZXMuaD4KIAotI2luY2x1ZGUgImtwcm9iZXMuaCIKLSNpbmNsdWRlICJwcm9iZXMtYXJtLmgiCi0jaW5jbHVkZSAicHJvYmVzLXRodW1iLmgiCi0jaW5jbHVkZSAia3Byb2Jlcy10ZXN0LmgiCisjaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgInRlc3QtY29yZS5oIgorI2luY2x1ZGUgIi4uL2RlY29kZS1hcm0uaCIKKyNpbmNsdWRlICIuLi9kZWNvZGUtdGh1bWIuaCIKIAogCiAjZGVmaW5lIEJFTkNITUFSS0lORwkxCkBAIC0yMzYsNiArMjM2LDggQEAKIAogI2lmbmRlZiBDT05GSUdfVEhVTUIyX0tFUk5FTAogCisjZGVmaW5lIFJFVChyZWcpCSJtb3YJcGMsICIjcmVnCisKIGxvbmcgYXJtX2Z1bmMobG9uZyByMCwgbG9uZyByMSk7CiAKIHN0YXRpYyB2b2lkIF9fdXNlZCBfX25ha2VkIF9fYXJtX2twcm9iZXNfdGVzdF9mdW5jKHZvaWQpCkBAIC0yNDUsNyArMjQ3LDcgQEAKIAkJIi50eXBlIGFybV9mdW5jLCAlJWZ1bmN0aW9uCQlcblx0IgogCQkiYXJtX2Z1bmM6CQkJCVxuXHQiCiAJCSJhZGRzCXIwLCByMCwgcjEJCQlcblx0IgotCQkiYngJbHIJCQkJXG5cdCIKKwkJIm1vdglwYywgbHIJCQkJXG5cdCIKIAkJIi5jb2RlICJOT1JNQUxfSVNBCSAvKiBCYWNrIHRvIFRodW1iIGlmIG5lY2Vzc2FyeSAqLwogCQk6IDogOiAicjAiLCAicjEiLCAiY2MiCiAJKTsKQEAgLTI1Myw2ICsyNTUsOCBAQAogCiAjZWxzZSAvKiBDT05GSUdfVEhVTUIyX0tFUk5FTCAqLwogCisjZGVmaW5lIFJFVChyZWcpCSJieAkiI3JlZworCiBsb25nIHRodW1iMTZfZnVuYyhsb25nIHIwLCBsb25nIHIxKTsKIGxvbmcgdGh1bWIzMmV2ZW5fZnVuYyhsb25nIHIwLCBsb25nIHIxKTsKIGxvbmcgdGh1bWIzMm9kZF9mdW5jKGxvbmcgcjAsIGxvbmcgcjEpOwpAQCAtNDk0LDcgKzQ5OCw3IEBACiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogCQkibm9wCQlcblx0IgotCQkiYngJbHIiCisJCVJFVChscikiCVxuXHQiCiAJKTsKIH0KIApAQCAtOTc3LDcgKzk4MSw3IEBACiAJCSJiaWMJcjAsIGxyLCAjMSAgQCByMCA9IGlubGluZSBkYXRhCQlcblx0IgogCQkibW92CXIxLCBzcAkJCQkJXG5cdCIKIAkJImJsCWtwcm9iZXNfdGVzdF9jYXNlX3N0YXJ0CQkJXG5cdCIKLQkJImJ4CXIwCQkJCQlcblx0IgorCQlSRVQocjApIgkJCQkJXG5cdCIKIAkpOwogfQogCkBAIC0xMDU2LDE1ICsxMDYwLDYgQEAKIHN0YXRpYyBib29sIHRlc3RfY2FzZV9pc190aHVtYjsKIHN0YXRpYyBpbnQgdGVzdF9pbnN0YW5jZTsKIAotLyoKLSAqIFdlIGlnbm9yZSB0aGUgc3RhdGUgb2YgdGhlIGltcHJlY2lzZSBhYm9ydCBkaXNhYmxlIGZsYWcgKENQU1IuQSkgYmVjYXVzZSB0aGlzCi0gKiBjYW4gY2hhbmdlIHJhbmRvbWx5IGFzIHRoZSBrZXJuZWwgZG9lc24ndCB0YWtlIGNhcmUgdG8gcHJlc2VydmUgb3IgaW5pdGlhbGlzZQotICogdGhpcyBhY3Jvc3MgY29udGV4dCBzd2l0Y2hlcy4gQWxzbywgd2l0aCBTZWN1cml0eSBFeHRlbnRpb25zLCB0aGUgZmxhZyBtYXkKLSAqIG5vdCBiZSB1bmRlciBjb250cm9sIG9mIHRoZSBrZXJuZWw7IGZvciB0aGlzIHJlYXNvbiB3ZSBpZ25vcmUgdGhlIHN0YXRlIG9mCi0gKiB0aGUgRklRIGRpc2FibGUgZmxhZyBDUFNSLkYgYXMgd2VsbC4KLSAqLwotI2RlZmluZSBQU1JfSUdOT1JFX0JJVFMgKFBTUl9BX0JJVCB8IFBTUl9GX0JJVCkKLQogc3RhdGljIHVuc2lnbmVkIGxvbmcgdGVzdF9jaGVja19jYyhpbnQgY2MsIHVuc2lnbmVkIGxvbmcgY3BzcikKIHsKIAlpbnQgcmV0ID0gYXJtX2NoZWNrX2NvbmRpdGlvbihjYyA8PCAyOCwgY3Bzcik7CkBAIC0xMTk2LDYgKzExOTEsMTMgQEAKIAkJCXJlZ3MtPnVyZWdzW2FyZy0+cmVnXSA9CiAJCQkJKHVuc2lnbmVkIGxvbmcpY3VycmVudF9zdGFjayArIGFyZy0+dmFsOwogCQkJbWVtb3J5X25lZWRzX2NoZWNraW5nID0gdHJ1ZTsKKwkJCS8qCisJCQkgKiBUZXN0IG1lbW9yeSBhdCBhbiBhZGRyZXNzIGJlbG93IFNQIGlzIGluIGRhbmdlciBvZgorCQkJICogYmVpbmcgYWx0ZXJlZCBieSBhbiBpbnRlcnJ1cHQgb2NjdXJyaW5nIGFuZCBwdXNoaW5nCisJCQkgKiBkYXRhIG9udG8gdGhlIHN0YWNrLiBEaXNhYmxlIGludGVycnVwdHMgdG8gc3RvcCB0aGlzLgorCQkJICovCisJCQlpZiAoYXJnLT5yZWcgPT0gMTMpCisJCQkJcmVncy0+QVJNX2Nwc3IgfD0gUFNSX0lfQklUOwogCQkJYnJlYWs7CiAJCX0KIAkJY2FzZSBBUkdfVFlQRV9NRU06IHsKQEAgLTEyNjQsMTQgKzEyNjYsMjYgQEAKIHN0YXRpYyBpbnQgX19rcHJvYmVzCiB0ZXN0X2FmdGVyX3ByZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCXN0cnVjdCB0ZXN0X2FyZyAqYXJnczsKKwogCWlmIChjb250YWluZXJfb2YocCwgc3RydWN0IHRlc3RfcHJvYmUsIGtwcm9iZSktPmhpdCA9PSB0ZXN0X2luc3RhbmNlKQogCQlyZXR1cm4gMDsgLyogQWxyZWFkeSBydW4gZm9yIHRoaXMgdGVzdCBpbnN0YW5jZSAqLwogCiAJcmVzdWx0X3JlZ3MgPSAqcmVnczsKKworCS8qIE1hc2sgb3V0IHJlc3VsdHMgd2hpY2ggYXJlIGluZGV0ZXJtaW5hdGUgKi8KIAlyZXN1bHRfcmVncy5BUk1fY3BzciAmPSB+UFNSX0lHTk9SRV9CSVRTOworCWZvciAoYXJncyA9IGN1cnJlbnRfYXJnczsgYXJnc1swXS50eXBlICE9IEFSR19UWVBFX0VORDsgKythcmdzKQorCQlpZiAoYXJnc1swXS50eXBlID09IEFSR19UWVBFX1JFR19NQVNLRUQpIHsKKwkJCXN0cnVjdCB0ZXN0X2FyZ19yZWdwdHIgKmFyZyA9CisJCQkJKHN0cnVjdCB0ZXN0X2FyZ19yZWdwdHIgKilhcmdzOworCQkJcmVzdWx0X3JlZ3MudXJlZ3NbYXJnLT5yZWddICY9IGFyZy0+dmFsOworCQl9CiAKIAkvKiBVbmRvIGFueSBjaGFuZ2VzIGRvbmUgdG8gU1AgYnkgdGhlIHRlc3QgY2FzZSAqLwogCXJlZ3MtPkFSTV9zcCA9ICh1bnNpZ25lZCBsb25nKWN1cnJlbnRfc3RhY2s7CisJLyogRW5hYmxlIGludGVycnVwdHMgaW4gY2FzZSBzZXR1cF90ZXN0X2NvbnRleHQgZGlzYWJsZWQgdGhlbSAqLworCXJlZ3MtPkFSTV9jcHNyICY9IH5QU1JfSV9CSVQ7CiAKIAljb250YWluZXJfb2YocCwgc3RydWN0IHRlc3RfcHJvYmUsIGtwcm9iZSktPmhpdCA9IHRlc3RfaW5zdGFuY2U7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy10ZXN0LmggYi9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuaApzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9rZXJuZWwva3Byb2Jlcy10ZXN0LmgKcmVuYW1lIHRvIGFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5oCmluZGV4IDQ0MzA5OTAuLjk0Mjg1MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLXRlc3QuaAorKysgYi9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2FybS9rZXJuZWwva3Byb2Jlcy10ZXN0LmgKKyAqIGFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtY29yZS5oCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDExIEpvbiBNZWRodXJzdCA8dGl4eUB5eGl0LmNvLnVrPi4KICAqCkBAIC00NSwxMCArNDUsMTEgQEAKICAqCiAgKi8KIAotI2RlZmluZQlBUkdfVFlQRV9FTkQJMAotI2RlZmluZQlBUkdfVFlQRV9SRUcJMQotI2RlZmluZQlBUkdfVFlQRV9QVFIJMgotI2RlZmluZQlBUkdfVFlQRV9NRU0JMworI2RlZmluZQlBUkdfVFlQRV9FTkQJCTAKKyNkZWZpbmUJQVJHX1RZUEVfUkVHCQkxCisjZGVmaW5lCUFSR19UWVBFX1BUUgkJMgorI2RlZmluZQlBUkdfVFlQRV9NRU0JCTMKKyNkZWZpbmUJQVJHX1RZUEVfUkVHX01BU0tFRAk0CiAKICNkZWZpbmUgQVJHX0ZMQUdfVU5TVVBQT1JURUQJMHgwMQogI2RlZmluZSBBUkdfRkxBR19TVVBQT1JURUQJMHgwMgpAQCAtNjEsNyArNjIsNyBAQAogfTsKIAogc3RydWN0IHRlc3RfYXJnX3JlZ3B0ciB7Ci0JdTgJdHlwZTsJCS8qIEFSR19UWVBFX1JFRyBvciBBUkdfVFlQRV9QVFIgKi8KKwl1OAl0eXBlOwkJLyogQVJHX1RZUEVfUkVHIG9yIEFSR19UWVBFX1BUUiBvciBBUkdfVFlQRV9SRUdfTUFTS0VEICovCiAJdTgJcmVnOwogCXU4CV9wYWRkaW5nWzJdOwogCXUzMgl2YWw7CkBAIC0xMzgsNiArMTM5LDEyIEBACiAJIi5zaG9ydAkwCQkJCQlcblx0IglcCiAJIi53b3JkCSIjdmFsIgkJCQkJXG5cdCIKIAorI2RlZmluZQlURVNUX0FSR19SRUdfTUFTS0VEKHJlZywgdmFsKQkJCQlcCisJIi5ieXRlCSJfX3N0cmluZ2lmeShBUkdfVFlQRV9SRUdfTUFTS0VEKSIJXG5cdCIJXAorCSIuYnl0ZQkiI3JlZyIJCQkJCVxuXHQiCVwKKwkiLnNob3J0CTAJCQkJCVxuXHQiCVwKKwkiLndvcmQJIiN2YWwiCQkJCQlcblx0IgorCiAjZGVmaW5lCVRFU1RfQVJHX0VORChmbGFncykJCQkJCVwKIAkiLmJ5dGUJIl9fc3RyaW5naWZ5KEFSR19UWVBFX0VORCkiCQlcblx0IglcCiAJIi5ieXRlCSJURVNUX0lTQSBmbGFncyIJCQlcblx0IglcCkBAIC0zOTUsNiArNDAyLDIyIEBACiAJIgkiY29kZXgiCQkJXG5cdCIJCQkJCVwKIAlURVNUQ0FTRV9FTkQKIAorI2RlZmluZSBURVNUX1JNQVNLRUQoY29kZTEsIHJlZywgbWFzaywgY29kZTIpCQlcCisJVEVTVENBU0VfU1RBUlQoY29kZTEgI3JlZyBjb2RlMikJCVwKKwlURVNUX0FSR19SRUdfTUFTS0VEKHJlZywgbWFzaykJCQlcCisJVEVTVF9BUkdfRU5EKCIiKQkJCQlcCisJVEVTVF9JTlNUUlVDVElPTihjb2RlMSAjcmVnIGNvZGUyKQkJXAorCVRFU1RDQVNFX0VORAorCisvKgorICogV2UgaWdub3JlIHRoZSBzdGF0ZSBvZiB0aGUgaW1wcmVjaXNlIGFib3J0IGRpc2FibGUgZmxhZyAoQ1BTUi5BKSBiZWNhdXNlIHRoaXMKKyAqIGNhbiBjaGFuZ2UgcmFuZG9tbHkgYXMgdGhlIGtlcm5lbCBkb2Vzbid0IHRha2UgY2FyZSB0byBwcmVzZXJ2ZSBvciBpbml0aWFsaXNlCisgKiB0aGlzIGFjcm9zcyBjb250ZXh0IHN3aXRjaGVzLiBBbHNvLCB3aXRoIFNlY3VyaXR5IEV4dGVuc2lvbnMsIHRoZSBmbGFnIG1heQorICogbm90IGJlIHVuZGVyIGNvbnRyb2wgb2YgdGhlIGtlcm5lbDsgZm9yIHRoaXMgcmVhc29uIHdlIGlnbm9yZSB0aGUgc3RhdGUgb2YKKyAqIHRoZSBGSVEgZGlzYWJsZSBmbGFnIENQU1IuRiBhcyB3ZWxsLgorICovCisjZGVmaW5lIFBTUl9JR05PUkVfQklUUyAoUFNSX0FfQklUIHwgUFNSX0ZfQklUKQorCiAKIC8qCiAgKiBNYWNyb3MgZm9yIGRlZmluaW5nIHNwYWNlIGRpcmVjdGl2ZXMgc3ByZWFkIG92ZXIgbXVsdGlwbGUgbGluZXMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy10ZXN0LXRodW1iLmMgYi9hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LXRodW1iLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9hcm0va2VybmVsL2twcm9iZXMtdGVzdC10aHVtYi5jCnJlbmFtZSB0byBhcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LXRodW1iLmMKaW5kZXggODQ0ZGQxMC4uYjY4M2I0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtdGVzdC10aHVtYi5jCisrKyBiL2FyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtdGh1bWIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBhcmNoL2FybS9rZXJuZWwva3Byb2Jlcy10ZXN0LXRodW1iLmMKKyAqIGFyY2gvYXJtL3Byb2Jlcy9rcHJvYmVzL3Rlc3QtdGh1bWIuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAxMSBKb24gTWVkaHVyc3QgPHRpeHlAeXhpdC5jby51az4uCiAgKgpAQCAtMTEsOCArMTEsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS9vcGNvZGVzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Jlcy5oPgogCi0jaW5jbHVkZSAia3Byb2Jlcy10ZXN0LmgiCisjaW5jbHVkZSAidGVzdC1jb3JlLmgiCiAKIAogI2RlZmluZSBURVNUX0lTQSAiMTYiCkBAIC00MTYsNiArNDE3LDkgQEAKIAlURVNUX1JSKCAic3RyZAlyIiwxNCxWQUwyLCIsIHIiLDEyLFZBTDEsIiwgW3NwLCAjMTZdISIpCiAJVEVTVF9SUlAoInN0cmQJciIsMSwgVkFMMSwiLCByIiwwLCBWQUwyLCIsIFtyIiw3LCAyNCwiXSwgIzE2IikKIAlURVNUX1JSKCAic3RyZAlyIiw3LCBWQUwyLCIsIHIiLDgsIFZBTDEsIiwgW3NwXSwgIy0xNiIpCisJVEVTVF9SUlAoInN0cmQJciIsNiwgVkFMMSwiLCByIiw3LCBWQUwyLCIsIFtyIiwxMywgVEVTVF9NRU1PUllfU0laRSwiLCAjLSJfX3N0cmluZ2lmeShNQVhfU1RBQ0tfU0laRSkiXSEiKQorCVRFU1RfVU5TVVBQT1JURUQoInN0cmQgcjYsIHI3LCBbcjEzLCAjLSJfX3N0cmluZ2lmeShNQVhfU1RBQ0tfU0laRSkiLThdISIpCisJVEVTVF9SUlAoInN0cmQJciIsNCwgVkFMMSwiLCByIiw1LCBWQUwyLCIsIFtyIiwxNCwgVEVTVF9NRU1PUllfU0laRSwiLCAjLSJfX3N0cmluZ2lmeShNQVhfU1RBQ0tfU0laRSkiLThdISIpCiAJVEVTVF9VTlNVUFBPUlRFRChfX2luc3RfdGh1bWIzMigweGU5ZWZlYzA0KSAiCUAgc3RyZAlyMTQsIHIxMiwgW3BjLCAjMTZdISIpCiAJVEVTVF9VTlNVUFBPUlRFRChfX2luc3RfdGh1bWIzMigweGU4ZWZlYzA0KSAiCUAgc3RyZAlyMTQsIHIxMiwgW3BjXSwgIzE2IikKIApAQCAtNzc0LDggKzc3OCw4IEBACiAKIAlURVNUX1VOU1VQUE9SVEVEKCJzdWJzCXBjLCBsciwgIzQiKQogCi0JVEVTVCgibXJzCXIwLCBjcHNyIikKLQlURVNUKCJtcnMJcjE0LCBjcHNyIikKKwlURVNUX1JNQVNLRUQoIm1ycwlyIiwwLH5QU1JfSUdOT1JFX0JJVFMsIiwgY3BzciIpCisJVEVTVF9STUFTS0VEKCJtcnMJciIsMTQsflBTUl9JR05PUkVfQklUUywiLCBjcHNyIikKIAlURVNUX1VOU1VQUE9SVEVEKF9faW5zdF90aHVtYjMyKDB4ZjNlZjhkMDApICIJQCBtcnMJc3AsIHNwc3IiKQogCVRFU1RfVU5TVVBQT1JURUQoX19pbnN0X3RodW1iMzIoMHhmM2VmOGYwMCkgIglAIG1ycwlwYywgc3BzciIpCiAJVEVTVF9VTlNVUFBPUlRFRCgibXJzCXIwLCBzcHNyIikKQEAgLTgyMSwxNCArODI1LDIyIEBACiAJVEVTVF9SUCggInN0ciJzaXplIglyIiwxNCxWQUwyLCIsIFtyIiwxLCAyNTYsICAiLCAjLTEyOF0hIikJCVwKIAlURVNUX1JQUigic3RyInNpemUiLncJciIsMCwgVkFMMSwiLCBbciIsMSwgMCwiLCByIiwyLCA0LCJdIikJCVwKIAlURVNUX1JQUigic3RyInNpemUiCXIiLDE0LFZBTDIsIiwgW3IiLDEwLDAsIiwgciIsMTEsNCwiLCBsc2wgIzFdIikJXAorCVRFU1RfVU5TVVBQT1JURUQoInN0ciJzaXplIglyMCwgW3IxMywgcjFdIikJCQkJXAogCVRFU1RfUiggICJzdHIic2l6ZSIudwlyIiw3LCBWQUwxLCIsIFtzcCwgIzI0XSIpCQkJXAogCVRFU1RfUlAoICJzdHIic2l6ZSIudwlyIiwwLCBWQUwyLCIsIFtyIiwwLDAsICJdIikJCQlcCisJVEVTVF9SUCggInN0ciJzaXplIglyIiw2LCBWQUwxLCIsIFtyIiwxMywgVEVTVF9NRU1PUllfU0laRSwiLCAjLSJfX3N0cmluZ2lmeShNQVhfU1RBQ0tfU0laRSkiXSEiKSBcCisJVEVTVF9VTlNVUFBPUlRFRCgic3RyInNpemUiCXI2LCBbcjEzLCAjLSJfX3N0cmluZ2lmeShNQVhfU1RBQ0tfU0laRSkiLThdISIpCQkJXAorCVRFU1RfUlAoICJzdHIic2l6ZSIJciIsNCwgVkFMMiwiLCBbciIsMTIsIFRFU1RfTUVNT1JZX1NJWkUsIiwgIy0iX19zdHJpbmdpZnkoTUFYX1NUQUNLX1NJWkUpIi04XSEiKSBcCiAJVEVTVF9VTlNVUFBPUlRFRCgic3RyInNpemUidAlyMCwgW3IxLCAjNF0iKQogCiAJU0lOR0xFX1NUT1JFKCJiIikKIAlTSU5HTEVfU1RPUkUoImgiKQogCVNJTkdMRV9TVE9SRSgiIikKIAorCVRFU1RfVU5TVVBQT1JURUQoX19pbnN0X3RodW1iMzIoMHhmODAxMDAwZCkgIglAIHN0cmIJcjAsIFtyMSwgcjEzXSIpCisJVEVTVF9VTlNVUFBPUlRFRChfX2luc3RfdGh1bWIzMigweGY4MjEwMDBkKSAiCUAgc3RyaAlyMCwgW3IxLCByMTNdIikKKwlURVNUX1VOU1VQUE9SVEVEKF9faW5zdF90aHVtYjMyKDB4Zjg0MTAwMGQpICIJQCBzdHIJcjAsIFtyMSwgcjEzXSIpCisKIAlURVNUKCJzdHIJc3AsIFtzcF0iKQogCVRFU1RfVU5TVVBQT1JURUQoX19pbnN0X3RodW1iMzIoMHhmOGNmZTAwMCkgIglAIHN0cglyMTQsIFtwY10iKQogCVRFU1RfVU5TVVBQT1JURUQoX19pbnN0X3RodW1iMzIoMHhmOGNlZjAwMCkgIglAIHN0cglwYywgW3IxNF0iKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcHJvYmVzL3Vwcm9iZXMvTWFrZWZpbGUgYi9hcmNoL2FybS9wcm9iZXMvdXByb2Jlcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMWRjM2QwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcHJvYmVzL3Vwcm9iZXMvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX1VQUk9CRVMpCQkrPSBjb3JlLm8gYWN0aW9ucy1hcm0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Vwcm9iZXMtYXJtLmMgYi9hcmNoL2FybS9wcm9iZXMvdXByb2Jlcy9hY3Rpb25zLWFybS5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2tlcm5lbC91cHJvYmVzLWFybS5jCnJlbmFtZSB0byBhcmNoL2FybS9wcm9iZXMvdXByb2Jlcy9hY3Rpb25zLWFybS5jCmluZGV4IGQzYjY1NWYuLjc2ZWI0NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC91cHJvYmVzLWFybS5jCisrKyBiL2FyY2gvYXJtL3Byb2Jlcy91cHJvYmVzL2FjdGlvbnMtYXJtLmMKQEAgLTEzLDkgKzEzLDkgQEAKICNpbmNsdWRlIDxsaW51eC91cHJvYmVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAKLSNpbmNsdWRlICJwcm9iZXMuaCIKLSNpbmNsdWRlICJwcm9iZXMtYXJtLmgiCi0jaW5jbHVkZSAidXByb2Jlcy5oIgorI2luY2x1ZGUgIi4uL2RlY29kZS5oIgorI2luY2x1ZGUgIi4uL2RlY29kZS1hcm0uaCIKKyNpbmNsdWRlICJjb3JlLmgiCiAKIHN0YXRpYyBpbnQgdXByb2Jlc19zdWJzdGl0dXRlX3BjKHVuc2lnbmVkIGxvbmcgKnBpbnNuLCB1MzIgb3JlZ3MpCiB7CkBAIC0xOTUsOCArMTk1LDYgQEAKIH0KIAogY29uc3QgdW5pb24gZGVjb2RlX2FjdGlvbiB1cHJvYmVzX3Byb2Jlc19hY3Rpb25zW10gPSB7Ci0JW1BST0JFU19FTVVMQVRFX05PTkVdID0gey5oYW5kbGVyID0gcHJvYmVzX3NpbXVsYXRlX25vcH0sCi0JW1BST0JFU19TSU1VTEFURV9OT1BdID0gey5oYW5kbGVyID0gcHJvYmVzX3NpbXVsYXRlX25vcH0sCiAJW1BST0JFU19QUkVMT0FEX0lNTV0gPSB7LmhhbmRsZXIgPSBwcm9iZXNfc2ltdWxhdGVfbm9wfSwKIAlbUFJPQkVTX1BSRUxPQURfUkVHXSA9IHsuaGFuZGxlciA9IHByb2Jlc19zaW11bGF0ZV9ub3B9LAogCVtQUk9CRVNfQlJBTkNIX0lNTV0gPSB7LmhhbmRsZXIgPSBzaW11bGF0ZV9ibHgxfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC91cHJvYmVzLmMgYi9hcmNoL2FybS9wcm9iZXMvdXByb2Jlcy9jb3JlLmMKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gYXJjaC9hcm0va2VybmVsL3Vwcm9iZXMuYwpyZW5hbWUgdG8gYXJjaC9hcm0vcHJvYmVzL3Vwcm9iZXMvY29yZS5jCmluZGV4IDU2YWRmOWMuLmQxMzI5ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC91cHJvYmVzLmMKKysrIGIvYXJjaC9hcm0vcHJvYmVzL3Vwcm9iZXMvY29yZS5jCkBAIC0xNyw5ICsxNyw5IEBACiAjaW5jbHVkZSA8YXNtL29wY29kZXMuaD4KICNpbmNsdWRlIDxhc20vdHJhcHMuaD4KIAotI2luY2x1ZGUgInByb2Jlcy5oIgotI2luY2x1ZGUgInByb2Jlcy1hcm0uaCIKLSNpbmNsdWRlICJ1cHJvYmVzLmgiCisjaW5jbHVkZSAiLi4vZGVjb2RlLmgiCisjaW5jbHVkZSAiLi4vZGVjb2RlLWFybS5oIgorI2luY2x1ZGUgImNvcmUuaCIKIAogI2RlZmluZSBVUFJPQkVfVFJBUF9OUglVSU5UX01BWAogCkBAIC04OCw3ICs4OCw3IEBACiAJYXVwcm9iZS0+aXhvbFsxXSA9IF9fb3Bjb2RlX3RvX21lbV9hcm0oVVBST0JFX1NTX0FSTV9JTlNOKTsKIAogCXJldCA9IGFybV9wcm9iZXNfZGVjb2RlX2luc24oaW5zbiwgJmF1cHJvYmUtPmFzaSwgZmFsc2UsCi0JCQkJICAgICB1cHJvYmVzX3Byb2Jlc19hY3Rpb25zKTsKKwkJCQkgICAgIHVwcm9iZXNfcHJvYmVzX2FjdGlvbnMsIE5VTEwpOwogCXN3aXRjaCAocmV0KSB7CiAJY2FzZSBJTlNOX1JFSkVDVEVEOgogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC91cHJvYmVzLmggYi9hcmNoL2FybS9wcm9iZXMvdXByb2Jlcy9jb3JlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2tlcm5lbC91cHJvYmVzLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3Byb2Jlcy91cHJvYmVzL2NvcmUuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jIGIvYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jCmluZGV4IGM3Y2E5MzYuLjI2M2EyMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL2FybS94ZW4vZW5saWdodGVuLmMKQEAgLTI5LDEwICsyOSwxMCBAQAogCiBzdHJ1Y3Qgc3RhcnRfaW5mbyBfeGVuX3N0YXJ0X2luZm87CiBzdHJ1Y3Qgc3RhcnRfaW5mbyAqeGVuX3N0YXJ0X2luZm8gPSAmX3hlbl9zdGFydF9pbmZvOwotRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3N0YXJ0X2luZm8pOworRVhQT1JUX1NZTUJPTCh4ZW5fc3RhcnRfaW5mbyk7CiAKIGVudW0geGVuX2RvbWFpbl90eXBlIHhlbl9kb21haW5fdHlwZSA9IFhFTl9OQVRJVkU7Ci1FWFBPUlRfU1lNQk9MX0dQTCh4ZW5fZG9tYWluX3R5cGUpOworRVhQT1JUX1NZTUJPTCh4ZW5fZG9tYWluX3R5cGUpOwogCiBzdHJ1Y3Qgc2hhcmVkX2luZm8geGVuX2R1bW15X3NoYXJlZF9pbmZvOwogc3RydWN0IHNoYXJlZF9pbmZvICpIWVBFUlZJU09SX3NoYXJlZF9pbmZvID0gKHZvaWQgKikmeGVuX2R1bW15X3NoYXJlZF9pbmZvOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0veGVuL21tLmMgYi9hcmNoL2FybS94ZW4vbW0uYwppbmRleCAzNTFiMjRhLi43OTM1NTFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS94ZW4vbW0uYworKysgYi9hcmNoL2FybS94ZW4vbW0uYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fZGVzdHJveV9jb250aWd1b3VzX3JlZ2lvbik7CiAKIHN0cnVjdCBkbWFfbWFwX29wcyAqeGVuX2RtYV9vcHM7Ci1FWFBPUlRfU1lNQk9MX0dQTCh4ZW5fZG1hX29wcyk7CitFWFBPUlRfU1lNQk9MKHhlbl9kbWFfb3BzKTsKIAogc3RhdGljIHN0cnVjdCBkbWFfbWFwX29wcyB4ZW5fc3dpb3RsYl9kbWFfb3BzID0gewogCS5tYXBwaW5nX2Vycm9yID0geGVuX3N3aW90bGJfZG1hX21hcHBpbmdfZXJyb3IsCmRpZmYgLS1naXQgYS9hcmNoL2FybS94ZW4vcDJtLmMgYi9hcmNoL2FybS94ZW4vcDJtLmMKaW5kZXggMDU0ODU3Ny4uY2I3YTE0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0veGVuL3AybS5jCisrKyBiL2FyY2gvYXJtL3hlbi9wMm0uYwpAQCAtMTAyLDcgKzEwMiw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChzZXRfZm9yZWlnbl9wMm1fbWFwcGluZyk7CiAKIGludCBjbGVhcl9mb3JlaWduX3AybV9tYXBwaW5nKHN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmICp1bm1hcF9vcHMsCi0JCQkgICAgICBzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYgKmttYXBfb3BzLAorCQkJICAgICAgc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgKmt1bm1hcF9vcHMsCiAJCQkgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWcKaW5kZXggYjFmOWEyMC4uMjgxNDMwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtMzksNiArMzksNyBAQAogCXNlbGVjdCBIQVJESVJRU19TV19SRVNFTkQKIAlzZWxlY3QgSEFWRV9BTElHTkVEX1NUUlVDVF9QQUdFIGlmIFNMVUIKIAlzZWxlY3QgSEFWRV9BUkNIX0FVRElUU1lTQ0FMTAorCXNlbGVjdCBIQVZFX0FSQ0hfQklUUkVWRVJTRQogCXNlbGVjdCBIQVZFX0FSQ0hfSlVNUF9MQUJFTAogCXNlbGVjdCBIQVZFX0FSQ0hfS0dEQgogCXNlbGVjdCBIQVZFX0FSQ0hfU0VDQ09NUF9GSUxURVIKQEAgLTU0MCw2ICs1NDEsMjEgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWQogCitjb25maWcgU0VURU5EX0VNVUxBVElPTgorCWJvb2wgIkVtdWxhdGUgU0VURU5EIGluc3RydWN0aW9uIgorCWhlbHAKKwkgIFRoZSBTRVRFTkQgaW5zdHJ1Y3Rpb24gYWx0ZXJzIHRoZSBkYXRhLWVuZGlhbm5lc3Mgb2YgdGhlCisJICBBQXJjaDMyIEVMMCwgYW5kIGlzIGRlcHJlY2F0ZWQgaW4gQVJNdjguCisKKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHNvZnR3YXJlIGVtdWxhdGlvbiBvZiB0aGUgaW5zdHJ1Y3Rpb24KKwkgIGZvciBBQXJjaDMyIHVzZXJzcGFjZSBjb2RlLgorCisJICBOb3RlOiBBbGwgdGhlIGNwdXMgb24gdGhlIHN5c3RlbSBtdXN0IGhhdmUgbWl4ZWQgZW5kaWFuIHN1cHBvcnQgYXQgRUwwCisJICBmb3IgdGhpcyBmZWF0dXJlIHRvIGJlIGVuYWJsZWQuIElmIGEgbmV3IENQVSAtIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBtaXhlZAorCSAgZW5kaWFuIC0gaXMgaG90cGx1Z2dlZCBpbiBhZnRlciB0aGlzIGZlYXR1cmUgaGFzIGJlZW4gZW5hYmxlZCwgdGhlcmUgY291bGQKKwkgIGJlIHVuZXhwZWN0ZWQgcmVzdWx0cyBpbiB0aGUgYXBwbGljYXRpb25zLgorCisJICBJZiB1bnN1cmUsIHNheSBZCiBlbmRpZgogCiBlbmRtZW51CkBAIC02MjcsOSArNjQzLDYgQEAKIGNvbmZpZyBBUkNIX1NVU1BFTkRfUE9TU0lCTEUKIAlkZWZfYm9vbCB5CiAKLWNvbmZpZyBBUk02NF9DUFVfU1VTUEVORAotCWRlZl9ib29sIFBNX1NMRUVQCi0KIGVuZG1lbnUKIAogbWVudSAiQ1BVIFBvd2VyIE1hbmFnZW1lbnQiCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcuZGVidWcgYi9hcmNoL2FybTY0L0tjb25maWcuZGVidWcKaW5kZXggNWZkZDZkYy4uNGE4NzQxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZy5kZWJ1ZwpAQCAtNjYsNCArNjYsMjcgQEAKICAgICAgICAgICBhZ2FpbnN0IGNlcnRhaW4gY2xhc3NlcyBvZiBrZXJuZWwgZXhwbG9pdHMuCiAgICAgICAgICAgSWYgaW4gZG91YnQsIHNheSAiTiIuCiAKK2NvbmZpZyBERUJVR19ST0RBVEEKKwlib29sICJNYWtlIGtlcm5lbCB0ZXh0IGFuZCByb2RhdGEgcmVhZC1vbmx5IgorCWhlbHAKKwkgIElmIHRoaXMgaXMgc2V0LCBrZXJuZWwgdGV4dCBhbmQgcm9kYXRhIHdpbGwgYmUgbWFkZSByZWFkLW9ubHkuIFRoaXMKKwkgIGlzIHRvIGhlbHAgY2F0Y2ggYWNjaWRlbnRhbCBvciBtYWxpY2lvdXMgYXR0ZW1wdHMgdG8gY2hhbmdlIHRoZQorCSAga2VybmVsJ3MgZXhlY3V0YWJsZSBjb2RlLiBBZGRpdGlvbmFsbHkgc3BsaXRzIHJvZGF0YSBmcm9tIGtlcm5lbAorCSAgdGV4dCBzbyBpdCBjYW4gYmUgbWFkZSBleHBsaWNpdGx5IG5vbi1leGVjdXRhYmxlLgorCisgICAgICAgICAgSWYgaW4gZG91YnQsIHNheSBZCisKK2NvbmZpZyBERUJVR19BTElHTl9ST0RBVEEKKwlkZXBlbmRzIG9uIERFQlVHX1JPREFUQSAmJiAhQVJNNjRfNjRLX1BBR0VTCisJYm9vbCAiQWxpZ24gbGlua2VyIHNlY3Rpb25zIHVwIHRvIFNFQ1RJT05fU0laRSIKKwloZWxwCisJICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBzZWN0aW9ucyB0aGF0IG1heSBwb3RlbnRpYWxseSBiZSBtYXJrZWQgYXMKKwkgIHJlYWQgb25seSBvciBub24tZXhlY3V0YWJsZSB3aWxsIGJlIGFsaWduZWQgdXAgdG8gdGhlIHNlY3Rpb24gc2l6ZSBvZgorCSAgdGhlIGtlcm5lbC4gVGhpcyBwcmV2ZW50cyBzZWN0aW9ucyBmcm9tIGJlaW5nIHNwbGl0IGludG8gcGFnZXMgYW5kCisJICBhdm9pZHMgYSBwb3RlbnRpYWwgVExCIHBlbmFsdHkuIFRoZSBkb3duc2lkZSBpcyBhbiBpbmNyZWFzZSBpbgorCSAgYWxpZ25tZW50IGFuZCBwb3RlbnRpYWxseSB3YXN0ZWQgc3BhY2UuIFR1cm4gb24gdGhpcyBvcHRpb24gaWYKKwkgIHBlcmZvcm1hbmNlIGlzIG1vcmUgaW1wb3J0YW50IHRoYW4gbWVtb3J5IHByZXNzdXJlLgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9NYWtlZmlsZSBiL2FyY2gvYXJtNjQvTWFrZWZpbGUKaW5kZXggMDY2Njg4OC4uNjljZWVkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9NYWtlZmlsZQorKysgYi9hcmNoL2FybTY0L01ha2VmaWxlCkBAIC0xNSw4ICsxNSw2IEBACiBPQkpDT1BZRkxBR1MJOj0tTyBiaW5hcnkgLVIgLm5vdGUgLVIgLm5vdGUuZ251LmJ1aWxkLWlkIC1SIC5jb21tZW50IC1TCiBHWkZMQUdTCQk6PS05CiAKLUxJQkdDQyAJCTo9ICQoc2hlbGwgJChDQykgJChLQlVJTERfQ0ZMQUdTKSAtcHJpbnQtbGliZ2NjLWZpbGUtbmFtZSkKLQogS0JVSUxEX0RFRkNPTkZJRyA6PSBkZWZjb25maWcKIAogS0JVSUxEX0NGTEFHUwkrPSAtbWdlbmVyYWwtcmVncy1vbmx5CkBAIC01MCw3ICs0OCw2IEBACiBjb3JlLSQoQ09ORklHX1hFTikgKz0gYXJjaC9hcm02NC94ZW4vCiBjb3JlLSQoQ09ORklHX0NSWVBUTykgKz0gYXJjaC9hcm02NC9jcnlwdG8vCiBsaWJzLXkJCTo9IGFyY2gvYXJtNjQvbGliLyAkKGxpYnMteSkKLWxpYnMteQkJKz0gJChMSUJHQ0MpCiBsaWJzLSQoQ09ORklHX0VGSV9TVFVCKSArPSBkcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViLwogCiAjIERlZmF1bHQgdGFyZ2V0IHdoZW4gZXhlY3V0aW5nIHBsYWluIG1ha2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWcgYi9hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnCmluZGV4IDUzNzZkOTAuLjY2YjZjYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWcKKysrIGIvYXJjaC9hcm02NC9jb25maWdzL2RlZmNvbmZpZwpAQCAtNDUsNiArNDUsOCBAQAogQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5QU1BMCIKICMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKIENPTkZJR19DT01QQVQ9eQorQ09ORklHX0NQVV9JRExFPXkKK0NPTkZJR19BUk02NF9DUFVJRExFPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2JpdHJldi5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9iaXRyZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWEwYzM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9iaXRyZXYuaApAQCAtMCwwICsxLDE5IEBACisjaWZuZGVmIF9fQVNNX0JJVFJFVl9ICisjZGVmaW5lIF9fQVNNX0JJVFJFVl9ICitzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gdTMyIF9fYXJjaF9iaXRyZXYzMih1MzIgeCkKK3sKKwlfX2FzbV9fICgicmJpdCAldzAsICV3MSIgOiAiPXIiICh4KSA6ICJyIiAoeCkpOworCXJldHVybiB4OworfQorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gdTE2IF9fYXJjaF9iaXRyZXYxNih1MTYgeCkKK3sKKwlyZXR1cm4gX19hcmNoX2JpdHJldjMyKCh1MzIpeCkgPj4gMTY7Cit9CisKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyB1OCBfX2FyY2hfYml0cmV2OCh1OCB4KQoreworCXJldHVybiBfX2FyY2hfYml0cmV2MzIoKHUzMil4KSA+PiAyNDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDdhZTMxYTIuLjY3ZDMwOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0xNTIsNCArMTUyLDkgQEAKIGludCBzZXRfbWVtb3J5X3J3KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKIGludCBzZXRfbWVtb3J5X3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOwogaW50IHNldF9tZW1vcnlfbngodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX1JPREFUQQordm9pZCBtYXJrX3JvZGF0YV9ybyh2b2lkKTsKKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY2FjaGV0eXBlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NhY2hldHlwZS5oCmluZGV4IDRjNjMxYTAuLmRhMmZjOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY2FjaGV0eXBlLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jYWNoZXR5cGUuaApAQCAtMzksMjQgKzM5LDQxIEBACiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faWNhY2hlX2ZsYWdzOwogCisvKgorICogTnVtU2V0cywgYml0c1syNzoxM10gLSAoTnVtYmVyIG9mIHNldHMgaW4gY2FjaGUpIC0gMQorICogQXNzb2NpYXRpdml0eSwgYml0c1sxMjozXSAtIChBc3NvY2lhdGl2aXR5IG9mIGNhY2hlKSAtIDEKKyAqIExpbmVTaXplLCBiaXRzWzI6MF0gLSAoTG9nMihOdW1iZXIgb2Ygd29yZHMgaW4gY2FjaGUgbGluZSkpIC0gMgorICovCisjZGVmaW5lIENDU0lEUl9FTDFfV1JJVEVfVEhST1VHSAlCSVQoMzEpCisjZGVmaW5lIENDU0lEUl9FTDFfV1JJVEVfQkFDSwkJQklUKDMwKQorI2RlZmluZSBDQ1NJRFJfRUwxX1JFQURfQUxMT0NBVEUJQklUKDI5KQorI2RlZmluZSBDQ1NJRFJfRUwxX1dSSVRFX0FMTE9DQVRFCUJJVCgyOCkKICNkZWZpbmUgQ0NTSURSX0VMMV9MSU5FU0laRV9NQVNLCTB4NwogI2RlZmluZSBDQ1NJRFJfRUwxX0xJTkVTSVpFKHgpCQkoKHgpICYgQ0NTSURSX0VMMV9MSU5FU0laRV9NQVNLKQotCisjZGVmaW5lIENDU0lEUl9FTDFfQVNTT0NJQVRJVklUWV9TSElGVAkzCisjZGVmaW5lIENDU0lEUl9FTDFfQVNTT0NJQVRJVklUWV9NQVNLCTB4M2ZmCisjZGVmaW5lIENDU0lEUl9FTDFfQVNTT0NJQVRJVklUWSh4KQlcCisJKCgoeCkgPj4gQ0NTSURSX0VMMV9BU1NPQ0lBVElWSVRZX1NISUZUKSAmIENDU0lEUl9FTDFfQVNTT0NJQVRJVklUWV9NQVNLKQogI2RlZmluZSBDQ1NJRFJfRUwxX05VTVNFVFNfU0hJRlQJMTMKLSNkZWZpbmUgQ0NTSURSX0VMMV9OVU1TRVRTX01BU0sJCSgweDdmZmYgPDwgQ0NTSURSX0VMMV9OVU1TRVRTX1NISUZUKQorI2RlZmluZSBDQ1NJRFJfRUwxX05VTVNFVFNfTUFTSwkJMHg3ZmZmCiAjZGVmaW5lIENDU0lEUl9FTDFfTlVNU0VUUyh4KSBcCi0JKCgoeCkgJiBDQ1NJRFJfRUwxX05VTVNFVFNfTUFTSykgPj4gQ0NTSURSX0VMMV9OVU1TRVRTX1NISUZUKQorCSgoKHgpID4+IENDU0lEUl9FTDFfTlVNU0VUU19TSElGVCkgJiBDQ1NJRFJfRUwxX05VTVNFVFNfTUFTSykKIAotZXh0ZXJuIHU2NCBfX2F0dHJpYnV0ZV9jb25zdF9fIGljYWNoZV9nZXRfY2NzaWRyKHZvaWQpOworI2RlZmluZSBDQUNIRV9MSU5FU0laRSh4KQkoMTYgPDwgQ0NTSURSX0VMMV9MSU5FU0laRSh4KSkKKyNkZWZpbmUgQ0FDSEVfTlVNU0VUUyh4KQkoQ0NTSURSX0VMMV9OVU1TRVRTKHgpICsgMSkKKyNkZWZpbmUgQ0FDSEVfQVNTT0NJQVRJVklUWSh4KQkoQ0NTSURSX0VMMV9BU1NPQ0lBVElWSVRZKHgpICsgMSkKIAorZXh0ZXJuIHU2NCBfX2F0dHJpYnV0ZV9jb25zdF9fIGNhY2hlX2dldF9jY3NpZHIodTY0IGNzc2Vscik7CisKKy8qIEhlbHBlcnMgZm9yIExldmVsIDEgSW5zdHJ1Y3Rpb24gY2FjaGUgY3NzZWxyID0gMUwgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGljYWNoZV9nZXRfbGluZXNpemUodm9pZCkKIHsKLQlyZXR1cm4gMTYgPDwgQ0NTSURSX0VMMV9MSU5FU0laRShpY2FjaGVfZ2V0X2Njc2lkcigpKTsKKwlyZXR1cm4gQ0FDSEVfTElORVNJWkUoY2FjaGVfZ2V0X2Njc2lkcigxTCkpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpY2FjaGVfZ2V0X251bXNldHModm9pZCkKIHsKLQlyZXR1cm4gMSArIENDU0lEUl9FTDFfTlVNU0VUUyhpY2FjaGVfZ2V0X2Njc2lkcigpKTsKKwlyZXR1cm4gQ0FDSEVfTlVNU0VUUyhjYWNoZV9nZXRfY2NzaWRyKDFMKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NvbXBhdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jb21wYXQuaAppbmRleCAzZmIwNTNmLi43ZmJlZDY5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NvbXBhdC5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY29tcGF0LmgKQEAgLTE2MSw3ICsxNjEsNiBAQAogCWludCBzaV9jb2RlOwogCiAJdW5pb24gewotCQkvKiBUaGUgcGFkZGluZyBpcyB0aGUgc2FtZSBzaXplIGFzIEFBcmNoNjQuICovCiAJCWludCBfcGFkWzEyOC9zaXplb2YoaW50KSAtIDNdOwogCiAJCS8qIGtpbGwoKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVfb3BzLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdV9vcHMuaAppbmRleCA2ZjhlMmVmLi5kYTMwMWVlIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdV9vcHMuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdV9vcHMuaApAQCAtMjgsOCArMjgsNiBAQAogICoJCWVuYWJsZS1tZXRob2QgcHJvcGVydHkuCiAgKiBAY3B1X2luaXQ6CVJlYWRzIGFueSBkYXRhIG5lY2Vzc2FyeSBmb3IgYSBzcGVjaWZpYyBlbmFibGUtbWV0aG9kIGZyb20gdGhlCiAgKgkJZGV2aWNldHJlZSwgZm9yIGEgZ2l2ZW4gY3B1IG5vZGUgYW5kIHByb3Bvc2VkIGxvZ2ljYWwgaWQuCi0gKiBAY3B1X2luaXRfaWRsZTogUmVhZHMgYW55IGRhdGEgbmVjZXNzYXJ5IHRvIGluaXRpYWxpemUgQ1BVIGlkbGUgc3RhdGVzIGZyb20KLSAqCQlkZXZpY2V0cmVlLCBmb3IgYSBnaXZlbiBjcHUgbm9kZSBhbmQgcHJvcG9zZWQgbG9naWNhbCBpZC4KICAqIEBjcHVfcHJlcGFyZTogRWFybHkgb25lLXRpbWUgcHJlcGFyYXRpb24gc3RlcCBmb3IgYSBjcHUuIElmIHRoZXJlIGlzIGEKICAqCQltZWNoYW5pc20gZm9yIGRvaW5nIHNvLCB0ZXN0cyB3aGV0aGVyIGl0IGlzIHBvc3NpYmxlIHRvIGJvb3QKICAqCQl0aGUgZ2l2ZW4gQ1BVLgpAQCAtNDIsNiArNDAsOCBAQAogICogQGNwdV9kaWU6CU1ha2VzIGEgY3B1IGxlYXZlIHRoZSBrZXJuZWwuIE11c3Qgbm90IGZhaWwuIENhbGxlZCBmcm9tIHRoZQogICoJCWNwdSBiZWluZyBraWxsZWQuCiAgKiBAY3B1X2tpbGw6ICBFbnN1cmVzIGEgY3B1IGhhcyBsZWZ0IHRoZSBrZXJuZWwuIENhbGxlZCBmcm9tIGFub3RoZXIgY3B1LgorICogQGNwdV9pbml0X2lkbGU6IFJlYWRzIGFueSBkYXRhIG5lY2Vzc2FyeSB0byBpbml0aWFsaXplIENQVSBpZGxlIHN0YXRlcyBmcm9tCisgKgkJZGV2aWNldHJlZSwgZm9yIGEgZ2l2ZW4gY3B1IG5vZGUgYW5kIHByb3Bvc2VkIGxvZ2ljYWwgaWQuCiAgKiBAY3B1X3N1c3BlbmQ6IFN1c3BlbmRzIGEgY3B1IGFuZCBzYXZlcyB0aGUgcmVxdWlyZWQgY29udGV4dC4gTWF5IGZhaWwgb3dpbmcKICAqICAgICAgICAgICAgICAgdG8gd3JvbmcgcGFyYW1ldGVycyBvciBlcnJvciBjb25kaXRpb25zLiBDYWxsZWQgZnJvbSB0aGUKICAqICAgICAgICAgICAgICAgQ1BVIGJlaW5nIHN1c3BlbmRlZC4gTXVzdCBiZSBjYWxsZWQgd2l0aCBJUlFzIGRpc2FibGVkLgpAQCAtNDksNyArNDksNiBAQAogc3RydWN0IGNwdV9vcGVyYXRpb25zIHsKIAljb25zdCBjaGFyCSpuYW1lOwogCWludAkJKCpjcHVfaW5pdCkoc3RydWN0IGRldmljZV9ub2RlICosIHVuc2lnbmVkIGludCk7Ci0JaW50CQkoKmNwdV9pbml0X2lkbGUpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqLCB1bnNpZ25lZCBpbnQpOwogCWludAkJKCpjcHVfcHJlcGFyZSkodW5zaWduZWQgaW50KTsKIAlpbnQJCSgqY3B1X2Jvb3QpKHVuc2lnbmVkIGludCk7CiAJdm9pZAkJKCpjcHVfcG9zdGJvb3QpKHZvaWQpOwpAQCAtNTgsNyArNTcsOCBAQAogCXZvaWQJCSgqY3B1X2RpZSkodW5zaWduZWQgaW50IGNwdSk7CiAJaW50CQkoKmNwdV9raWxsKSh1bnNpZ25lZCBpbnQgY3B1KTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19BUk02NF9DUFVfU1VTUEVORAorI2lmZGVmIENPTkZJR19DUFVfSURMRQorCWludAkJKCpjcHVfaW5pdF9pZGxlKShzdHJ1Y3QgZGV2aWNlX25vZGUgKiwgdW5zaWduZWQgaW50KTsKIAlpbnQJCSgqY3B1X3N1c3BlbmQpKHVuc2lnbmVkIGxvbmcpOwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAppbmRleCAwNzU0N2NjLi5iNmMxNmQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaApAQCAtNTIsNiArNTIsOCBAQAogfQogCiB2b2lkIGNoZWNrX2xvY2FsX2NwdV9lcnJhdGEodm9pZCk7Citib29sIGNwdV9zdXBwb3J0c19taXhlZF9lbmRpYW5fZWwwKHZvaWQpOworYm9vbCBzeXN0ZW1fc3VwcG9ydHNfbWl4ZWRfZW5kaWFuX2VsMCh2b2lkKTsKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2NwdWlkbGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1aWRsZS5oCmluZGV4IGI1MmE5OTMuLjA3MTA2NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1aWRsZS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1aWRsZS5oCkBAIC0zLDExICszLDE3IEBACiAKICNpZmRlZiBDT05GSUdfQ1BVX0lETEUKIGV4dGVybiBpbnQgY3B1X2luaXRfaWRsZSh1bnNpZ25lZCBpbnQgY3B1KTsKK2V4dGVybiBpbnQgY3B1X3N1c3BlbmQodW5zaWduZWQgbG9uZyBhcmcpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGNwdV9pbml0X2lkbGUodW5zaWduZWQgaW50IGNwdSkKIHsKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vY3B1dHlwZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKaW5kZXggOGFkYjk4Ni4uYTg0ZWM2MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKQEAgLTcyLDYgKzcyLDE4IEBACiAKICNkZWZpbmUgQVBNX0NQVV9QQVJUX1BPVEVOWkEJMHgwMDAKIAorI2RlZmluZSBJRF9BQTY0TU1GUjBfQklHRU5ERUwwX1NISUZUCTE2CisjZGVmaW5lIElEX0FBNjRNTUZSMF9CSUdFTkRFTDBfTUFTSwkoMHhmIDw8IElEX0FBNjRNTUZSMF9CSUdFTkRFTDBfU0hJRlQpCisjZGVmaW5lIElEX0FBNjRNTUZSMF9CSUdFTkRFTDAobW1mcjApCVwKKwkoKChtbWZyMCkgJiBJRF9BQTY0TU1GUjBfQklHRU5ERUwwX01BU0spID4+IElEX0FBNjRNTUZSMF9CSUdFTkRFTDBfU0hJRlQpCisjZGVmaW5lIElEX0FBNjRNTUZSMF9CSUdFTkRfU0hJRlQJOAorI2RlZmluZSBJRF9BQTY0TU1GUjBfQklHRU5EX01BU0sJKDB4ZiA8PCBJRF9BQTY0TU1GUjBfQklHRU5EX1NISUZUKQorI2RlZmluZSBJRF9BQTY0TU1GUjBfQklHRU5EKG1tZnIwKQlcCisJKCgobW1mcjApICYgSURfQUE2NE1NRlIwX0JJR0VORF9NQVNLKSA+PiBJRF9BQTY0TU1GUjBfQklHRU5EX1NISUZUKQorCisjZGVmaW5lIFNDVExSX0VMMV9DUDE1QkVOCSgweDEgPDwgNSkKKyNkZWZpbmUgU0NUTFJfRUwxX1NFRAkJKDB4MSA8PCA4KQorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAvKgpAQCAtMTA0LDYgKzExNiwxMSBAQAogCXJldHVybiByZWFkX2NwdWlkKENUUl9FTDApOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaWRfYWE2NG1tZnIwX21peGVkX2VuZGlhbl9lbDAodTY0IG1tZnIwKQoreworCXJldHVybiAoSURfQUE2NE1NRlIwX0JJR0VORChtbWZyMCkgPT0gMHgxKSB8fAorCQkoSURfQUE2NE1NRlIwX0JJR0VOREVMMChtbWZyMCkgPT0gMHgxKTsKK30KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggOWNlM2U2OC4uNjkzMmJiNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMjgsOCArMjgsNiBAQAogCiAjZGVmaW5lIERNQV9FUlJPUl9DT0RFCSh+KGRtYV9hZGRyX3QpMCkKIGV4dGVybiBzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHM7Ci1leHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzIGNvaGVyZW50X3N3aW90bGJfZG1hX29wczsKLWV4dGVybiBzdHJ1Y3QgZG1hX21hcF9vcHMgbm9uY29oZXJlbnRfc3dpb3RsYl9kbWFfb3BzOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfbWFwX29wcyAqX19nZW5lcmljX2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtNDcsMjMgKzQ1LDE4IEBACiAJCXJldHVybiBfX2dlbmVyaWNfZG1hX29wcyhkZXYpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcykKLXsKLQlkZXYtPmFyY2hkYXRhLmRtYV9vcHMgPSBvcHM7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3NldHVwX2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX2Jhc2UsIHU2NCBzaXplLAogCQkJCSAgICAgIHN0cnVjdCBpb21tdV9vcHMgKmlvbW11LCBib29sIGNvaGVyZW50KQogewogCWRldi0+YXJjaGRhdGEuZG1hX2NvaGVyZW50ID0gY29oZXJlbnQ7Ci0JaWYgKGNvaGVyZW50KQotCQlzZXRfZG1hX29wcyhkZXYsICZjb2hlcmVudF9zd2lvdGxiX2RtYV9vcHMpOwogfQogI2RlZmluZSBhcmNoX3NldHVwX2RtYV9vcHMJYXJjaF9zZXR1cF9kbWFfb3BzCiAKIC8qIGRvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiBpbiBhIGRyaXZlciAqLwogc3RhdGljIGlubGluZSBib29sIGlzX2RldmljZV9kbWFfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2KQogeworCWlmICghZGV2KQorCQlyZXR1cm4gZmFsc2U7CiAJcmV0dXJuIGRldi0+YXJjaGRhdGEuZG1hX2NvaGVyZW50OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lZmkuaAppbmRleCBhMzRmZDNiLi5lZjU3MjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2VmaS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZWZpLmgKQEAgLTYsMjkgKzYsMzMgQEAKIAogI2lmZGVmIENPTkZJR19FRkkKIGV4dGVybiB2b2lkIGVmaV9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgZWZpX2lkbWFwX2luaXQodm9pZCk7CiAjZWxzZQogI2RlZmluZSBlZmlfaW5pdCgpCi0jZGVmaW5lIGVmaV9pZG1hcF9pbml0KCkKICNlbmRpZgogCiAjZGVmaW5lIGVmaV9jYWxsX3ZpcnQoZiwgLi4uKQkJCQkJCVwKICh7CQkJCQkJCQkJXAotCWVmaV8jI2YjI190ICpfX2YgPSBlZmkuc3lzdGFiLT5ydW50aW1lLT5mOwkJCVwKKwllZmlfIyNmIyNfdCAqX19mOwkJCQkJCVwKIAllZmlfc3RhdHVzX3QgX19zOwkJCQkJCVwKIAkJCQkJCQkJCVwKIAlrZXJuZWxfbmVvbl9iZWdpbigpOwkJCQkJCVwKKwllZmlfdmlydG1hcF9sb2FkKCk7CQkJCQkJXAorCV9fZiA9IGVmaS5zeXN0YWItPnJ1bnRpbWUtPmY7CQkJCQlcCiAJX19zID0gX19mKF9fVkFfQVJHU19fKTsJCQkJCQlcCisJZWZpX3ZpcnRtYXBfdW5sb2FkKCk7CQkJCQkJXAogCWtlcm5lbF9uZW9uX2VuZCgpOwkJCQkJCVwKIAlfX3M7CQkJCQkJCQlcCiB9KQogCiAjZGVmaW5lIF9fZWZpX2NhbGxfdmlydChmLCAuLi4pCQkJCQkJXAogKHsJCQkJCQkJCQlcCi0JZWZpXyMjZiMjX3QgKl9fZiA9IGVmaS5zeXN0YWItPnJ1bnRpbWUtPmY7CQkJXAorCWVmaV8jI2YjI190ICpfX2Y7CQkJCQkJXAogCQkJCQkJCQkJXAogCWtlcm5lbF9uZW9uX2JlZ2luKCk7CQkJCQkJXAorCWVmaV92aXJ0bWFwX2xvYWQoKTsJCQkJCQlcCisJX19mID0gZWZpLnN5c3RhYi0+cnVudGltZS0+ZjsJCQkJCVwKIAlfX2YoX19WQV9BUkdTX18pOwkJCQkJCVwKKwllZmlfdmlydG1hcF91bmxvYWQoKTsJCQkJCQlcCiAJa2VybmVsX25lb25fZW5kKCk7CQkJCQkJXAogfSkKIApAQCAtNDQsNCArNDgsMjIgQEAKIAogI2RlZmluZSBlZmlfY2FsbF9lYXJseShmLCAuLi4pIHN5c190YWJsZV9hcmctPmJvb3R0aW1lLT5mKF9fVkFfQVJHU19fKQogCisjZGVmaW5lIEVGSV9BTExPQ19BTElHTgkJU1pfNjRLCisKKy8qCisgKiBPbiBBUk0gc3lzdGVtcywgdmlydHVhbGx5IHJlbWFwcGVkIFVFRkkgcnVudGltZSBzZXJ2aWNlcyBhcmUgc2V0IHVwIGluIHR3bworICogZGlzdGluY3Qgc3RhZ2VzOgorICogLSBUaGUgc3R1YiByZXRyaWV2ZXMgdGhlIGZpbmFsIHZlcnNpb24gb2YgdGhlIG1lbW9yeSBtYXAgZnJvbSBVRUZJLCBwb3B1bGF0ZXMKKyAqICAgdGhlIHZpcnRfYWRkciBmaWVsZHMgYW5kIGNhbGxzIHRoZSBTZXRWaXJ0dWFsQWRkcmVzc01hcCgpIFtTVkFNXSBydW50aW1lCisgKiAgIHNlcnZpY2UgdG8gY29tbXVuaWNhdGUgdGhlIG5ldyBtYXBwaW5nIHRvIHRoZSBmaXJtd2FyZSAoTm90ZSB0aGF0IHRoZSBuZXcKKyAqICAgbWFwcGluZyBpcyBub3QgbGl2ZSBhdCB0aGlzIHRpbWUpCisgKiAtIER1cmluZyBhbiBlYXJseSBpbml0Y2FsbCgpLCB0aGUgRUZJIHN5c3RlbSB0YWJsZSBpcyBwZXJtYW5lbnRseSByZW1hcHBlZAorICogICBhbmQgdGhlIHZpcnR1YWwgcmVtYXBwaW5nIG9mIHRoZSBVRUZJIFJ1bnRpbWUgU2VydmljZXMgcmVnaW9ucyBpcyBsb2FkZWQKKyAqICAgaW50byBhIHByaXZhdGUgc2V0IG9mIHBhZ2UgdGFibGVzLiBJZiB0aGlzIGFsbCBzdWNjZWVkcywgdGhlIFJ1bnRpbWUKKyAqICAgU2VydmljZXMgYXJlIGVuYWJsZWQgYW5kIHRoZSBFRklfUlVOVElNRV9TRVJWSUNFUyBiaXQgc2V0LgorICovCisKK3ZvaWQgZWZpX3ZpcnRtYXBfbG9hZCh2b2lkKTsKK3ZvaWQgZWZpX3ZpcnRtYXBfdW5sb2FkKHZvaWQpOworCiAjZW5kaWYgLyogX0FTTV9FRklfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lc3IuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZXNyLmgKaW5kZXggNzI2NzRmNC4uNjIxNjcwOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9lc3IuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Vzci5oCkBAIC0xOCw0MCArMTgsODkgQEAKICNpZm5kZWYgX19BU01fRVNSX0gKICNkZWZpbmUgX19BU01fRVNSX0gKIAotI2RlZmluZSBFU1JfRUwxX1dSSVRFCQkoMSA8PCA2KQotI2RlZmluZSBFU1JfRUwxX0NNCQkoMSA8PCA4KQotI2RlZmluZSBFU1JfRUwxX0lMCQkoMSA8PCAyNSkKKyNkZWZpbmUgRVNSX0VMeF9FQ19VTktOT1dOCSgweDAwKQorI2RlZmluZSBFU1JfRUx4X0VDX1dGeAkJKDB4MDEpCisvKiBVbmFsbG9jYXRlZCBFQzogMHgwMiAqLworI2RlZmluZSBFU1JfRUx4X0VDX0NQMTVfMzIJKDB4MDMpCisjZGVmaW5lIEVTUl9FTHhfRUNfQ1AxNV82NAkoMHgwNCkKKyNkZWZpbmUgRVNSX0VMeF9FQ19DUDE0X01SCSgweDA1KQorI2RlZmluZSBFU1JfRUx4X0VDX0NQMTRfTFMJKDB4MDYpCisjZGVmaW5lIEVTUl9FTHhfRUNfRlBfQVNJTUQJKDB4MDcpCisjZGVmaW5lIEVTUl9FTHhfRUNfQ1AxMF9JRAkoMHgwOCkKKy8qIFVuYWxsb2NhdGVkIEVDOiAweDA5IC0gMHgwQiAqLworI2RlZmluZSBFU1JfRUx4X0VDX0NQMTRfNjQJKDB4MEMpCisvKiBVbmFsbG9jYXRlZCBFQzogMHgwZCAqLworI2RlZmluZSBFU1JfRUx4X0VDX0lMTAkJKDB4MEUpCisvKiBVbmFsbG9jYXRlZCBFQzogMHgwRiAtIDB4MTAgKi8KKyNkZWZpbmUgRVNSX0VMeF9FQ19TVkMzMgkoMHgxMSkKKyNkZWZpbmUgRVNSX0VMeF9FQ19IVkMzMgkoMHgxMikKKyNkZWZpbmUgRVNSX0VMeF9FQ19TTUMzMgkoMHgxMykKKy8qIFVuYWxsb2NhdGVkIEVDOiAweDE0ICovCisjZGVmaW5lIEVTUl9FTHhfRUNfU1ZDNjQJKDB4MTUpCisjZGVmaW5lIEVTUl9FTHhfRUNfSFZDNjQJKDB4MTYpCisjZGVmaW5lIEVTUl9FTHhfRUNfU01DNjQJKDB4MTcpCisjZGVmaW5lIEVTUl9FTHhfRUNfU1lTNjQJKDB4MTgpCisvKiBVbmFsbG9jYXRlZCBFQzogMHgxOSAtIDB4MUUgKi8KKyNkZWZpbmUgRVNSX0VMeF9FQ19JTVBfREVGCSgweDFmKQorI2RlZmluZSBFU1JfRUx4X0VDX0lBQlRfTE9XCSgweDIwKQorI2RlZmluZSBFU1JfRUx4X0VDX0lBQlRfQ1VSCSgweDIxKQorI2RlZmluZSBFU1JfRUx4X0VDX1BDX0FMSUdOCSgweDIyKQorLyogVW5hbGxvY2F0ZWQgRUM6IDB4MjMgKi8KKyNkZWZpbmUgRVNSX0VMeF9FQ19EQUJUX0xPVwkoMHgyNCkKKyNkZWZpbmUgRVNSX0VMeF9FQ19EQUJUX0NVUgkoMHgyNSkKKyNkZWZpbmUgRVNSX0VMeF9FQ19TUF9BTElHTgkoMHgyNikKKy8qIFVuYWxsb2NhdGVkIEVDOiAweDI3ICovCisjZGVmaW5lIEVTUl9FTHhfRUNfRlBfRVhDMzIJKDB4MjgpCisvKiBVbmFsbG9jYXRlZCBFQzogMHgyOSAtIDB4MkIgKi8KKyNkZWZpbmUgRVNSX0VMeF9FQ19GUF9FWEM2NAkoMHgyQykKKy8qIFVuYWxsb2NhdGVkIEVDOiAweDJEIC0gMHgyRSAqLworI2RlZmluZSBFU1JfRUx4X0VDX1NFUlJPUgkoMHgyRikKKyNkZWZpbmUgRVNSX0VMeF9FQ19CUkVBS1BUX0xPVwkoMHgzMCkKKyNkZWZpbmUgRVNSX0VMeF9FQ19CUkVBS1BUX0NVUgkoMHgzMSkKKyNkZWZpbmUgRVNSX0VMeF9FQ19TT0ZUU1RQX0xPVwkoMHgzMikKKyNkZWZpbmUgRVNSX0VMeF9FQ19TT0ZUU1RQX0NVUgkoMHgzMykKKyNkZWZpbmUgRVNSX0VMeF9FQ19XQVRDSFBUX0xPVwkoMHgzNCkKKyNkZWZpbmUgRVNSX0VMeF9FQ19XQVRDSFBUX0NVUgkoMHgzNSkKKy8qIFVuYWxsb2NhdGVkIEVDOiAweDM2IC0gMHgzNyAqLworI2RlZmluZSBFU1JfRUx4X0VDX0JLUFQzMgkoMHgzOCkKKy8qIFVuYWxsb2NhdGVkIEVDOiAweDM5ICovCisjZGVmaW5lIEVTUl9FTHhfRUNfVkVDVE9SMzIJKDB4M0EpCisvKiBVbmFsbG9jdGVkIEVDOiAweDNCICovCisjZGVmaW5lIEVTUl9FTHhfRUNfQlJLNjQJKDB4M0MpCisvKiBVbmFsbG9jYXRlZCBFQzogMHgzRCAtIDB4M0YgKi8KKyNkZWZpbmUgRVNSX0VMeF9FQ19NQVgJCSgweDNGKQogCi0jZGVmaW5lIEVTUl9FTDFfRUNfU0hJRlQJKDI2KQotI2RlZmluZSBFU1JfRUwxX0VDX1VOS05PV04JKDB4MDApCi0jZGVmaW5lIEVTUl9FTDFfRUNfV0ZJCQkoMHgwMSkKLSNkZWZpbmUgRVNSX0VMMV9FQ19DUDE1XzMyCSgweDAzKQotI2RlZmluZSBFU1JfRUwxX0VDX0NQMTVfNjQJKDB4MDQpCi0jZGVmaW5lIEVTUl9FTDFfRUNfQ1AxNF9NUgkoMHgwNSkKLSNkZWZpbmUgRVNSX0VMMV9FQ19DUDE0X0xTCSgweDA2KQotI2RlZmluZSBFU1JfRUwxX0VDX0ZQX0FTSU1ECSgweDA3KQotI2RlZmluZSBFU1JfRUwxX0VDX0NQMTBfSUQJKDB4MDgpCi0jZGVmaW5lIEVTUl9FTDFfRUNfQ1AxNF82NAkoMHgwQykKLSNkZWZpbmUgRVNSX0VMMV9FQ19JTExfSVNTCSgweDBFKQotI2RlZmluZSBFU1JfRUwxX0VDX1NWQzMyCSgweDExKQotI2RlZmluZSBFU1JfRUwxX0VDX1NWQzY0CSgweDE1KQotI2RlZmluZSBFU1JfRUwxX0VDX1NZUzY0CSgweDE4KQotI2RlZmluZSBFU1JfRUwxX0VDX0lBQlRfRUwwCSgweDIwKQotI2RlZmluZSBFU1JfRUwxX0VDX0lBQlRfRUwxCSgweDIxKQotI2RlZmluZSBFU1JfRUwxX0VDX1BDX0FMSUdOCSgweDIyKQotI2RlZmluZSBFU1JfRUwxX0VDX0RBQlRfRUwwCSgweDI0KQotI2RlZmluZSBFU1JfRUwxX0VDX0RBQlRfRUwxCSgweDI1KQotI2RlZmluZSBFU1JfRUwxX0VDX1NQX0FMSUdOCSgweDI2KQotI2RlZmluZSBFU1JfRUwxX0VDX0ZQX0VYQzMyCSgweDI4KQotI2RlZmluZSBFU1JfRUwxX0VDX0ZQX0VYQzY0CSgweDJDKQotI2RlZmluZSBFU1JfRUwxX0VDX1NFUlJPUgkoMHgyRikKLSNkZWZpbmUgRVNSX0VMMV9FQ19CUkVBS1BUX0VMMAkoMHgzMCkKLSNkZWZpbmUgRVNSX0VMMV9FQ19CUkVBS1BUX0VMMQkoMHgzMSkKLSNkZWZpbmUgRVNSX0VMMV9FQ19TT0ZUU1RQX0VMMAkoMHgzMikKLSNkZWZpbmUgRVNSX0VMMV9FQ19TT0ZUU1RQX0VMMQkoMHgzMykKLSNkZWZpbmUgRVNSX0VMMV9FQ19XQVRDSFBUX0VMMAkoMHgzNCkKLSNkZWZpbmUgRVNSX0VMMV9FQ19XQVRDSFBUX0VMMQkoMHgzNSkKLSNkZWZpbmUgRVNSX0VMMV9FQ19CS1BUMzIJKDB4MzgpCi0jZGVmaW5lIEVTUl9FTDFfRUNfQlJLNjQJKDB4M0MpCisjZGVmaW5lIEVTUl9FTHhfRUNfU0hJRlQJKDI2KQorI2RlZmluZSBFU1JfRUx4X0VDX01BU0sJCShVTCgweDNGKSA8PCBFU1JfRUx4X0VDX1NISUZUKQorCisjZGVmaW5lIEVTUl9FTHhfSUwJCShVTCgxKSA8PCAyNSkKKyNkZWZpbmUgRVNSX0VMeF9JU1NfTUFTSwkoRVNSX0VMeF9JTCAtIDEpCisjZGVmaW5lIEVTUl9FTHhfSVNWCQkoVUwoMSkgPDwgMjQpCisjZGVmaW5lIEVTUl9FTHhfU0FTX1NISUZUCSgyMikKKyNkZWZpbmUgRVNSX0VMeF9TQVMJCShVTCgzKSA8PCBFU1JfRUx4X1NBU19TSElGVCkKKyNkZWZpbmUgRVNSX0VMeF9TU0UJCShVTCgxKSA8PCAyMSkKKyNkZWZpbmUgRVNSX0VMeF9TUlRfU0hJRlQJKDE2KQorI2RlZmluZSBFU1JfRUx4X1NSVF9NQVNLCShVTCgweDFGKSA8PCBFU1JfRUx4X1NSVF9TSElGVCkKKyNkZWZpbmUgRVNSX0VMeF9TRiAJCShVTCgxKSA8PCAxNSkKKyNkZWZpbmUgRVNSX0VMeF9BUiAJCShVTCgxKSA8PCAxNCkKKyNkZWZpbmUgRVNSX0VMeF9FQSAJCShVTCgxKSA8PCA5KQorI2RlZmluZSBFU1JfRUx4X0NNIAkJKFVMKDEpIDw8IDgpCisjZGVmaW5lIEVTUl9FTHhfUzFQVFcgCQkoVUwoMSkgPDwgNykKKyNkZWZpbmUgRVNSX0VMeF9XTlIJCShVTCgxKSA8PCA2KQorI2RlZmluZSBFU1JfRUx4X0ZTQwkJKDB4M0YpCisjZGVmaW5lIEVTUl9FTHhfRlNDX1RZUEUJKDB4M0MpCisjZGVmaW5lIEVTUl9FTHhfRlNDX0VYVEFCVAkoMHgxMCkKKyNkZWZpbmUgRVNSX0VMeF9GU0NfRkFVTFQJKDB4MDQpCisjZGVmaW5lIEVTUl9FTHhfRlNDX1BFUk0JKDB4MEMpCisjZGVmaW5lIEVTUl9FTHhfQ1YJCShVTCgxKSA8PCAyNCkKKyNkZWZpbmUgRVNSX0VMeF9DT05EX1NISUZUCSgyMCkKKyNkZWZpbmUgRVNSX0VMeF9DT05EX01BU0sJKFVMKDB4RikgPDwgRVNSX0VMeF9DT05EX1NISUZUKQorI2RlZmluZSBFU1JfRUx4X1dGeF9JU1NfV0ZFCShVTCgxKSA8PCAwKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCitjb25zdCBjaGFyICplc3JfZ2V0X2NsYXNzX3N0cmluZyh1MzIgZXNyKTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZICovCiAKICNlbmRpZiAvKiBfX0FTTV9FU1JfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9maXhtYXAuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZml4bWFwLmgKaW5kZXggOWVmNmVjYS4uZGVmYTBmZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZml4bWFwLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9maXhtYXAuaApAQCAtNDksNiArNDksNyBAQAogCiAJRklYX0JUTUFQX0VORCA9IF9fZW5kX29mX3Blcm1hbmVudF9maXhlZF9hZGRyZXNzZXMsCiAJRklYX0JUTUFQX0JFR0lOID0gRklYX0JUTUFQX0VORCArIFRPVEFMX0ZJWF9CVE1BUFMgLSAxLAorCUZJWF9URVhUX1BPS0UwLAogCV9fZW5kX29mX2ZpeGVkX2FkZHJlc3NlcwogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9mcHNpbWRtYWNyb3MuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vZnBzaW1kbWFjcm9zLmgKaW5kZXggMDA3NjE4Yi4uYTJkYWYxMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9mcHNpbWRtYWNyb3MuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2Zwc2ltZG1hY3Jvcy5oCkBAIC03Niw3ICs3Niw2IEBACiAJZnBzaW1kX3Jlc3RvcmVfZnBjciB4XHRtcG5yLCBcc3RhdGUKIC5lbmRtCiAKLS5hbHRtYWNybwogLm1hY3JvIGZwc2ltZF9zYXZlX3BhcnRpYWwgc3RhdGUsIG51bW5yLCB0bXBucjEsIHRtcG5yMgogCW1ycwl4XHRtcG5yMSwgZnBzcgogCXN0cgl3XG51bW5yLCBbXHN0YXRlLCAjOF0KQEAgLTg2LDExICs4NSwyMiBAQAogCWFkZAlcc3RhdGUsIFxzdGF0ZSwgeFxudW1uciwgbHNsICM0CiAJc3ViCXhcdG1wbnIxLCB4XHRtcG5yMSwgeFxudW1uciwgbHNsICMxCiAJYnIJeFx0bXBucjEKLQkuaXJwCXFhLCAzMCwgMjgsIDI2LCAyNCwgMjIsIDIwLCAxOCwgMTYsIDE0LCAxMiwgMTAsIDgsIDYsIDQsIDIsIDAKLQkuaXJwCXFiLCAlKHFhICsgMSkKLQlzdHAJcVxxYSwgcVxxYiwgW1xzdGF0ZSwgIyAtMTYgKiBccWEgLSAxNl0KLQkuZW5kcgotCS5lbmRyCisJc3RwCXEzMCwgcTMxLCBbXHN0YXRlLCAjLTE2ICogMzAgLSAxNl0KKwlzdHAJcTI4LCBxMjksIFtcc3RhdGUsICMtMTYgKiAyOCAtIDE2XQorCXN0cAlxMjYsIHEyNywgW1xzdGF0ZSwgIy0xNiAqIDI2IC0gMTZdCisJc3RwCXEyNCwgcTI1LCBbXHN0YXRlLCAjLTE2ICogMjQgLSAxNl0KKwlzdHAJcTIyLCBxMjMsIFtcc3RhdGUsICMtMTYgKiAyMiAtIDE2XQorCXN0cAlxMjAsIHEyMSwgW1xzdGF0ZSwgIy0xNiAqIDIwIC0gMTZdCisJc3RwCXExOCwgcTE5LCBbXHN0YXRlLCAjLTE2ICogMTggLSAxNl0KKwlzdHAJcTE2LCBxMTcsIFtcc3RhdGUsICMtMTYgKiAxNiAtIDE2XQorCXN0cAlxMTQsIHExNSwgW1xzdGF0ZSwgIy0xNiAqIDE0IC0gMTZdCisJc3RwCXExMiwgcTEzLCBbXHN0YXRlLCAjLTE2ICogMTIgLSAxNl0KKwlzdHAJcTEwLCBxMTEsIFtcc3RhdGUsICMtMTYgKiAxMCAtIDE2XQorCXN0cAlxOCwgcTksIFtcc3RhdGUsICMtMTYgKiA4IC0gMTZdCisJc3RwCXE2LCBxNywgW1xzdGF0ZSwgIy0xNiAqIDYgLSAxNl0KKwlzdHAJcTQsIHE1LCBbXHN0YXRlLCAjLTE2ICogNCAtIDE2XQorCXN0cAlxMiwgcTMsIFtcc3RhdGUsICMtMTYgKiAyIC0gMTZdCisJc3RwCXEwLCBxMSwgW1xzdGF0ZSwgIy0xNiAqIDAgLSAxNl0KIDA6CiAuZW5kbQogCkBAIC0xMDMsMTAgKzExMywyMSBAQAogCWFkZAlcc3RhdGUsIFxzdGF0ZSwgeFx0bXBucjIsIGxzbCAjNAogCXN1Ygl4XHRtcG5yMSwgeFx0bXBucjEsIHhcdG1wbnIyLCBsc2wgIzEKIAlicgl4XHRtcG5yMQotCS5pcnAJcWEsIDMwLCAyOCwgMjYsIDI0LCAyMiwgMjAsIDE4LCAxNiwgMTQsIDEyLCAxMCwgOCwgNiwgNCwgMiwgMAotCS5pcnAJcWIsICUocWEgKyAxKQotCWxkcAlxXHFhLCBxXHFiLCBbXHN0YXRlLCAjIC0xNiAqIFxxYSAtIDE2XQotCS5lbmRyCi0JLmVuZHIKKwlsZHAJcTMwLCBxMzEsIFtcc3RhdGUsICMtMTYgKiAzMCAtIDE2XQorCWxkcAlxMjgsIHEyOSwgW1xzdGF0ZSwgIy0xNiAqIDI4IC0gMTZdCisJbGRwCXEyNiwgcTI3LCBbXHN0YXRlLCAjLTE2ICogMjYgLSAxNl0KKwlsZHAJcTI0LCBxMjUsIFtcc3RhdGUsICMtMTYgKiAyNCAtIDE2XQorCWxkcAlxMjIsIHEyMywgW1xzdGF0ZSwgIy0xNiAqIDIyIC0gMTZdCisJbGRwCXEyMCwgcTIxLCBbXHN0YXRlLCAjLTE2ICogMjAgLSAxNl0KKwlsZHAJcTE4LCBxMTksIFtcc3RhdGUsICMtMTYgKiAxOCAtIDE2XQorCWxkcAlxMTYsIHExNywgW1xzdGF0ZSwgIy0xNiAqIDE2IC0gMTZdCisJbGRwCXExNCwgcTE1LCBbXHN0YXRlLCAjLTE2ICogMTQgLSAxNl0KKwlsZHAJcTEyLCBxMTMsIFtcc3RhdGUsICMtMTYgKiAxMiAtIDE2XQorCWxkcAlxMTAsIHExMSwgW1xzdGF0ZSwgIy0xNiAqIDEwIC0gMTZdCisJbGRwCXE4LCBxOSwgW1xzdGF0ZSwgIy0xNiAqIDggLSAxNl0KKwlsZHAJcTYsIHE3LCBbXHN0YXRlLCAjLTE2ICogNiAtIDE2XQorCWxkcAlxNCwgcTUsIFtcc3RhdGUsICMtMTYgKiA0IC0gMTZdCisJbGRwCXEyLCBxMywgW1xzdGF0ZSwgIy0xNiAqIDIgLSAxNl0KKwlsZHAJcTAsIHExLCBbXHN0YXRlLCAjLTE2ICogMCAtIDE2XQogMDoKIC5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2hhcmRpcnEuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IGU4YTMyNjguLjZhYWU0MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaGFyZGlycS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaGFyZGlycS5oCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2RlZmluZSBOUl9JUEkJNgorI2RlZmluZSBOUl9JUEkJNQogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pby5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDk0OWM0MDYuLjU0MGY3YzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2lvLmgKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vYmFycmllci5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9lYXJseV9pb3JlbWFwLmg+CiAjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CkBAIC0xNDUsOCArMTQ2LDggQEAKICAqICBJL08gcG9ydCBhY2Nlc3MgcHJpbWl0aXZlcy4KICAqLwogI2RlZmluZSBhcmNoX2hhc19kZXZfcG9ydCgpCSgxKQotI2RlZmluZSBJT19TUEFDRV9MSU1JVAkJKFNaXzMyTSAtIDEpCi0jZGVmaW5lIFBDSV9JT0JBU0UJCSgodm9pZCBfX2lvbWVtICopKE1PRFVMRVNfVkFERFIgLSBTWl8zMk0pKQorI2RlZmluZSBJT19TUEFDRV9MSU1JVAkJKFBDSV9JT19TSVpFIC0gMSkKKyNkZWZpbmUgUENJX0lPQkFTRQkJKCh2b2lkIF9faW9tZW0gKilQQ0lfSU9fU1RBUlQpCiAKIC8qCiAgKiBTdHJpbmcgdmVyc2lvbiBvZiBJL08gbWVtb3J5IGFjY2VzcyBvcGVyYXRpb25zLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fYXJtLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaAppbmRleCA4YWZiODYzLi45NDY3NGViIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9hcm0uaApAQCAtMTgsNiArMTgsNyBAQAogI2lmbmRlZiBfX0FSTTY0X0tWTV9BUk1fSF9fCiAjZGVmaW5lIF9fQVJNNjRfS1ZNX0FSTV9IX18KIAorI2luY2x1ZGUgPGFzbS9lc3IuaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKQEAgLTE4NCw3NyArMTg1LDExIEBACiAjZGVmaW5lIE1EQ1JfRUwyX1RQTUNSCQkoMSA8PCA1KQogI2RlZmluZSBNRENSX0VMMl9IUE1OX01BU0sJKDB4MUYpCiAKLS8qIEV4Y2VwdGlvbiBTeW5kcm9tZSBSZWdpc3RlciAoRVNSKSBiaXRzICovCi0jZGVmaW5lIEVTUl9FTDJfRUNfU0hJRlQJKDI2KQotI2RlZmluZSBFU1JfRUwyX0VDCQkoVUwoMHgzZikgPDwgRVNSX0VMMl9FQ19TSElGVCkKLSNkZWZpbmUgRVNSX0VMMl9JTAkJKFVMKDEpIDw8IDI1KQotI2RlZmluZSBFU1JfRUwyX0lTUwkJKEVTUl9FTDJfSUwgLSAxKQotI2RlZmluZSBFU1JfRUwyX0lTVl9TSElGVAkoMjQpCi0jZGVmaW5lIEVTUl9FTDJfSVNWCQkoVUwoMSkgPDwgRVNSX0VMMl9JU1ZfU0hJRlQpCi0jZGVmaW5lIEVTUl9FTDJfU0FTX1NISUZUCSgyMikKLSNkZWZpbmUgRVNSX0VMMl9TQVMJCShVTCgzKSA8PCBFU1JfRUwyX1NBU19TSElGVCkKLSNkZWZpbmUgRVNSX0VMMl9TU0UJCSgxIDw8IDIxKQotI2RlZmluZSBFU1JfRUwyX1NSVF9TSElGVAkoMTYpCi0jZGVmaW5lIEVTUl9FTDJfU1JUX01BU0sJKDB4MWYgPDwgRVNSX0VMMl9TUlRfU0hJRlQpCi0jZGVmaW5lIEVTUl9FTDJfU0YgCQkoMSA8PCAxNSkKLSNkZWZpbmUgRVNSX0VMMl9BUiAJCSgxIDw8IDE0KQotI2RlZmluZSBFU1JfRUwyX0VBIAkJKDEgPDwgOSkKLSNkZWZpbmUgRVNSX0VMMl9DTSAJCSgxIDw8IDgpCi0jZGVmaW5lIEVTUl9FTDJfUzFQVFcgCQkoMSA8PCA3KQotI2RlZmluZSBFU1JfRUwyX1dOUgkJKDEgPDwgNikKLSNkZWZpbmUgRVNSX0VMMl9GU0MJCSgweDNmKQotI2RlZmluZSBFU1JfRUwyX0ZTQ19UWVBFCSgweDNjKQotCi0jZGVmaW5lIEVTUl9FTDJfQ1ZfU0hJRlQJKDI0KQotI2RlZmluZSBFU1JfRUwyX0NWCQkoVUwoMSkgPDwgRVNSX0VMMl9DVl9TSElGVCkKLSNkZWZpbmUgRVNSX0VMMl9DT05EX1NISUZUCSgyMCkKLSNkZWZpbmUgRVNSX0VMMl9DT05ECQkoVUwoMHhmKSA8PCBFU1JfRUwyX0NPTkRfU0hJRlQpCi0KLQotI2RlZmluZSBGU0NfRkFVTFQJKDB4MDQpCi0jZGVmaW5lIEZTQ19QRVJNCSgweDBjKQorLyogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBmYXVsdCBjb2RlIHNoYXJlZCB3aXRoIDMyLWJpdCAqLworI2RlZmluZSBGU0NfRkFVTFQJRVNSX0VMeF9GU0NfRkFVTFQKKyNkZWZpbmUgRlNDX1BFUk0JRVNSX0VMeF9GU0NfUEVSTQogCiAvKiBIeXAgUHJlZmV0Y2ggRmF1bHQgQWRkcmVzcyBSZWdpc3RlciAoSFBGQVIvSERGQVIpICovCiAjZGVmaW5lIEhQRkFSX01BU0sJKH5VTCgweGYpKQogCi0jZGVmaW5lIEVTUl9FTDJfRUNfVU5LTk9XTgkoMHgwMCkKLSNkZWZpbmUgRVNSX0VMMl9FQ19XRkkJCSgweDAxKQotI2RlZmluZSBFU1JfRUwyX0VDX0NQMTVfMzIJKDB4MDMpCi0jZGVmaW5lIEVTUl9FTDJfRUNfQ1AxNV82NAkoMHgwNCkKLSNkZWZpbmUgRVNSX0VMMl9FQ19DUDE0X01SCSgweDA1KQotI2RlZmluZSBFU1JfRUwyX0VDX0NQMTRfTFMJKDB4MDYpCi0jZGVmaW5lIEVTUl9FTDJfRUNfRlBfQVNJTUQJKDB4MDcpCi0jZGVmaW5lIEVTUl9FTDJfRUNfQ1AxMF9JRAkoMHgwOCkKLSNkZWZpbmUgRVNSX0VMMl9FQ19DUDE0XzY0CSgweDBDKQotI2RlZmluZSBFU1JfRUwyX0VDX0lMTF9JU1MJKDB4MEUpCi0jZGVmaW5lIEVTUl9FTDJfRUNfU1ZDMzIJKDB4MTEpCi0jZGVmaW5lIEVTUl9FTDJfRUNfSFZDMzIJKDB4MTIpCi0jZGVmaW5lIEVTUl9FTDJfRUNfU01DMzIJKDB4MTMpCi0jZGVmaW5lIEVTUl9FTDJfRUNfU1ZDNjQJKDB4MTUpCi0jZGVmaW5lIEVTUl9FTDJfRUNfSFZDNjQJKDB4MTYpCi0jZGVmaW5lIEVTUl9FTDJfRUNfU01DNjQJKDB4MTcpCi0jZGVmaW5lIEVTUl9FTDJfRUNfU1lTNjQJKDB4MTgpCi0jZGVmaW5lIEVTUl9FTDJfRUNfSUFCVAkJKDB4MjApCi0jZGVmaW5lIEVTUl9FTDJfRUNfSUFCVF9IWVAJKDB4MjEpCi0jZGVmaW5lIEVTUl9FTDJfRUNfUENfQUxJR04JKDB4MjIpCi0jZGVmaW5lIEVTUl9FTDJfRUNfREFCVAkJKDB4MjQpCi0jZGVmaW5lIEVTUl9FTDJfRUNfREFCVF9IWVAJKDB4MjUpCi0jZGVmaW5lIEVTUl9FTDJfRUNfU1BfQUxJR04JKDB4MjYpCi0jZGVmaW5lIEVTUl9FTDJfRUNfRlBfRVhDMzIJKDB4MjgpCi0jZGVmaW5lIEVTUl9FTDJfRUNfRlBfRVhDNjQJKDB4MkMpCi0jZGVmaW5lIEVTUl9FTDJfRUNfU0VSUk9SCSgweDJGKQotI2RlZmluZSBFU1JfRUwyX0VDX0JSRUFLUFQJKDB4MzApCi0jZGVmaW5lIEVTUl9FTDJfRUNfQlJFQUtQVF9IWVAJKDB4MzEpCi0jZGVmaW5lIEVTUl9FTDJfRUNfU09GVFNUUAkoMHgzMikKLSNkZWZpbmUgRVNSX0VMMl9FQ19TT0ZUU1RQX0hZUAkoMHgzMykKLSNkZWZpbmUgRVNSX0VMMl9FQ19XQVRDSFBUCSgweDM0KQotI2RlZmluZSBFU1JfRUwyX0VDX1dBVENIUFRfSFlQCSgweDM1KQotI2RlZmluZSBFU1JfRUwyX0VDX0JLUFQzMgkoMHgzOCkKLSNkZWZpbmUgRVNSX0VMMl9FQ19WRUNUT1IzMgkoMHgzQSkKLSNkZWZpbmUgRVNSX0VMMl9FQ19CUks2NAkoMHgzQykKLQotI2RlZmluZSBFU1JfRUwyX0VDX3hBQlRfeEZTUl9FWFRBQlQJMHgxMAotCi0jZGVmaW5lIEVTUl9FTDJfRUNfV0ZJX0lTU19XRkUJKDEgPDwgMCkKLQogI2VuZGlmIC8qIF9fQVJNNjRfS1ZNX0FSTV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaAppbmRleCA4NjVhN2UyLi4wMTYzYjU3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCkBAIC0yMyw4ICsyMywxMCBAQAogI2RlZmluZSBfX0FSTTY0X0tWTV9FTVVMQVRFX0hfXwogCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KLSNpbmNsdWRlIDxhc20va3ZtX2FzbS5oPgorCisjaW5jbHVkZSA8YXNtL2Vzci5oPgogI2luY2x1ZGUgPGFzbS9rdm1fYXJtLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9hc20uaD4KICNpbmNsdWRlIDxhc20va3ZtX21taW8uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKQEAgLTQ1LDYgKzQ3LDE2IEBACiAJCXZjcHUtPmFyY2guaGNyX2VsMiAmPSB+SENSX1JXOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdmNwdV9nZXRfaGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4gdmNwdS0+YXJjaC5oY3JfZWwyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdmNwdV9zZXRfaGNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBoY3IpCit7CisJdmNwdS0+YXJjaC5oY3JfZWwyID0gaGNyOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgKnZjcHVfcGMoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXJldHVybiAodW5zaWduZWQgbG9uZyAqKSZ2Y3B1X2dwX3JlZ3ModmNwdSktPnJlZ3MucGM7CkBAIC0xMzAsNjMgKzE0Miw2MyBAQAogCiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3ZjcHVfZGFidF9pc3ZhbGlkKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gISEoa3ZtX3ZjcHVfZ2V0X2hzcih2Y3B1KSAmIEVTUl9FTDJfSVNWKTsKKwlyZXR1cm4gISEoa3ZtX3ZjcHVfZ2V0X2hzcih2Y3B1KSAmIEVTUl9FTHhfSVNWKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGt2bV92Y3B1X2RhYnRfaXN3cml0ZShjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuICEhKGt2bV92Y3B1X2dldF9oc3IodmNwdSkgJiBFU1JfRUwyX1dOUik7CisJcmV0dXJuICEhKGt2bV92Y3B1X2dldF9oc3IodmNwdSkgJiBFU1JfRUx4X1dOUik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBrdm1fdmNwdV9kYWJ0X2lzc2V4dChjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuICEhKGt2bV92Y3B1X2dldF9oc3IodmNwdSkgJiBFU1JfRUwyX1NTRSk7CisJcmV0dXJuICEhKGt2bV92Y3B1X2dldF9oc3IodmNwdSkgJiBFU1JfRUx4X1NTRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGt2bV92Y3B1X2RhYnRfZ2V0X3JkKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gKGt2bV92Y3B1X2dldF9oc3IodmNwdSkgJiBFU1JfRUwyX1NSVF9NQVNLKSA+PiBFU1JfRUwyX1NSVF9TSElGVDsKKwlyZXR1cm4gKGt2bV92Y3B1X2dldF9oc3IodmNwdSkgJiBFU1JfRUx4X1NSVF9NQVNLKSA+PiBFU1JfRUx4X1NSVF9TSElGVDsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGt2bV92Y3B1X2RhYnRfaXNleHRhYnQoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXJldHVybiAhIShrdm1fdmNwdV9nZXRfaHNyKHZjcHUpICYgRVNSX0VMMl9FQSk7CisJcmV0dXJuICEhKGt2bV92Y3B1X2dldF9oc3IodmNwdSkgJiBFU1JfRUx4X0VBKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGt2bV92Y3B1X2RhYnRfaXNzMXR3KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gISEoa3ZtX3ZjcHVfZ2V0X2hzcih2Y3B1KSAmIEVTUl9FTDJfUzFQVFcpOworCXJldHVybiAhIShrdm1fdmNwdV9nZXRfaHNyKHZjcHUpICYgRVNSX0VMeF9TMVBUVyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGt2bV92Y3B1X2RhYnRfZ2V0X2FzKGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gMSA8PCAoKGt2bV92Y3B1X2dldF9oc3IodmNwdSkgJiBFU1JfRUwyX1NBUykgPj4gRVNSX0VMMl9TQVNfU0hJRlQpOworCXJldHVybiAxIDw8ICgoa3ZtX3ZjcHVfZ2V0X2hzcih2Y3B1KSAmIEVTUl9FTHhfU0FTKSA+PiBFU1JfRUx4X1NBU19TSElGVCk7CiB9CiAKIC8qIFRoaXMgb25lIGlzIG5vdCBzcGVjaWZpYyB0byBEYXRhIEFib3J0ICovCiBzdGF0aWMgaW5saW5lIGJvb2wga3ZtX3ZjcHVfdHJhcF9pbF9pczMyYml0KGNvbnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlyZXR1cm4gISEoa3ZtX3ZjcHVfZ2V0X2hzcih2Y3B1KSAmIEVTUl9FTDJfSUwpOworCXJldHVybiAhIShrdm1fdmNwdV9nZXRfaHNyKHZjcHUpICYgRVNSX0VMeF9JTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTgga3ZtX3ZjcHVfdHJhcF9nZXRfY2xhc3MoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXJldHVybiBrdm1fdmNwdV9nZXRfaHNyKHZjcHUpID4+IEVTUl9FTDJfRUNfU0hJRlQ7CisJcmV0dXJuIGt2bV92Y3B1X2dldF9oc3IodmNwdSkgPj4gRVNSX0VMeF9FQ19TSElGVDsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGt2bV92Y3B1X3RyYXBfaXNfaWFidChjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIGt2bV92Y3B1X3RyYXBfZ2V0X2NsYXNzKHZjcHUpID09IEVTUl9FTDJfRUNfSUFCVDsKKwlyZXR1cm4ga3ZtX3ZjcHVfdHJhcF9nZXRfY2xhc3ModmNwdSkgPT0gRVNSX0VMeF9FQ19JQUJUX0xPVzsKIH0KIAogc3RhdGljIGlubGluZSB1OCBrdm1fdmNwdV90cmFwX2dldF9mYXVsdChjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIGt2bV92Y3B1X2dldF9oc3IodmNwdSkgJiBFU1JfRUwyX0ZTQzsKKwlyZXR1cm4ga3ZtX3ZjcHVfZ2V0X2hzcih2Y3B1KSAmIEVTUl9FTHhfRlNDOwogfQogCiBzdGF0aWMgaW5saW5lIHU4IGt2bV92Y3B1X3RyYXBfZ2V0X2ZhdWx0X3R5cGUoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXJldHVybiBrdm1fdmNwdV9nZXRfaHNyKHZjcHUpICYgRVNSX0VMMl9GU0NfVFlQRTsKKwlyZXR1cm4ga3ZtX3ZjcHVfZ2V0X2hzcih2Y3B1KSAmIEVTUl9FTHhfRlNDX1RZUEU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBrdm1fdmNwdV9nZXRfbXBpZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCmluZGV4IDBiN2RmZGIuLmFjZDEwMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTExNiw5ICsxMTYsNiBAQAogCSAqIEFueXRoaW5nIHRoYXQgaXMgbm90IHVzZWQgZGlyZWN0bHkgZnJvbSBhc3NlbWJseSBjb2RlIGdvZXMKIAkgKiBoZXJlLgogCSAqLwotCS8qIGRjYWNoZSBzZXQvd2F5IG9wZXJhdGlvbiBwZW5kaW5nICovCi0JaW50IGxhc3RfcGNwdTsKLQljcHVtYXNrX3QgcmVxdWlyZV9kY2FjaGVfZmx1c2g7CiAKIAkvKiBEb24ndCBydW4gdGhlIGd1ZXN0ICovCiAJYm9vbCBwYXVzZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3ZtX21tdS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbW11LmgKaW5kZXggMTRhNzRmMS4uYWRjZjQ5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbW11LmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9rdm1fbW11LmgKQEAgLTI0MywyNCArMjQzLDQ2IEBACiAJcmV0dXJuICh2Y3B1X3N5c19yZWcodmNwdSwgU0NUTFJfRUwxKSAmIDBiMTAxKSA9PSAwYjEwMTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvaGVyZW50X2NhY2hlX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBodmFfdCBodmEsCi0JCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCQkgICAgIGJvb2wgaXBhX3VuY2FjaGVkKQorc3RhdGljIGlubGluZSB2b2lkIF9fY29oZXJlbnRfY2FjaGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHBmbl90IHBmbiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkJICAgICAgIGJvb2wgaXBhX3VuY2FjaGVkKQogeworCXZvaWQgKnZhID0gcGFnZV9hZGRyZXNzKHBmbl90b19wYWdlKHBmbikpOworCiAJaWYgKCF2Y3B1X2hhc19jYWNoZV9lbmFibGVkKHZjcHUpIHx8IGlwYV91bmNhY2hlZCkKLQkJa3ZtX2ZsdXNoX2RjYWNoZV90b19wb2MoKHZvaWQgKilodmEsIHNpemUpOworCQlrdm1fZmx1c2hfZGNhY2hlX3RvX3BvYyh2YSwgc2l6ZSk7CiAKIAlpZiAoIWljYWNoZV9pc19hbGlhc2luZygpKSB7CQkvKiBQSVBUICovCi0JCWZsdXNoX2ljYWNoZV9yYW5nZShodmEsIGh2YSArIHNpemUpOworCQlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdmEsCisJCQkJICAgKHVuc2lnbmVkIGxvbmcpdmEgKyBzaXplKTsKIAl9IGVsc2UgaWYgKCFpY2FjaGVfaXNfYWl2aXZ0KCkpIHsJLyogbm9uIEFTSUQtdGFnZ2VkIFZJVlQgKi8KIAkJLyogYW55IGtpbmQgb2YgVklQVCBjYWNoZSAqLwogCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2t2bV9mbHVzaF9kY2FjaGVfcHRlKHB0ZV90IHB0ZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB0ZV9wYWdlKHB0ZSk7CisJa3ZtX2ZsdXNoX2RjYWNoZV90b19wb2MocGFnZV9hZGRyZXNzKHBhZ2UpLCBQQUdFX1NJWkUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19rdm1fZmx1c2hfZGNhY2hlX3BtZChwbWRfdCBwbWQpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwbWRfcGFnZShwbWQpOworCWt2bV9mbHVzaF9kY2FjaGVfdG9fcG9jKHBhZ2VfYWRkcmVzcyhwYWdlKSwgUE1EX1NJWkUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19rdm1fZmx1c2hfZGNhY2hlX3B1ZChwdWRfdCBwdWQpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdWRfcGFnZShwdWQpOworCWt2bV9mbHVzaF9kY2FjaGVfdG9fcG9jKHBhZ2VfYWRkcmVzcyhwYWdlKSwgUFVEX1NJWkUpOworfQorCiAjZGVmaW5lIGt2bV92aXJ0X3RvX3BoeXMoeCkJCV9fdmlydF90b19waHlzKCh1bnNpZ25lZCBsb25nKSh4KSkKIAotdm9pZCBzdGFnZTJfZmx1c2hfdm0oc3RydWN0IGt2bSAqa3ZtKTsKK3ZvaWQga3ZtX3NldF93YXlfZmx1c2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK3ZvaWQga3ZtX3RvZ2dsZV9jYWNoZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgd2FzX2VuYWJsZWQpOwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX19BUk02NF9LVk1fTU1VX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tZW1vcnkuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbWVtb3J5LmgKaW5kZXggNjQ4NmIyYi4uZjgwMGQ0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tZW1vcnkuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21lbW9yeS5oCkBAIC0zMyw2ICszMywxMiBAQAogI2RlZmluZSBVTCh4KSBfQUMoeCwgVUwpCiAKIC8qCisgKiBTaXplIG9mIHRoZSBQQ0kgSS9PIHNwYWNlLiBUaGlzIG11c3QgcmVtYWluIGEgcG93ZXIgb2YgdHdvIHNvIHRoYXQKKyAqIElPX1NQQUNFX0xJTUlUIGFjdHMgYXMgYSBtYXNrIGZvciB0aGUgbG93IGJpdHMgb2YgSS9PIGFkZHJlc3Nlcy4KKyAqLworI2RlZmluZSBQQ0lfSU9fU0laRQkJU1pfMTZNCisKKy8qCiAgKiBQQUdFX09GRlNFVCAtIHRoZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIHN0YXJ0IG9mIHRoZSBrZXJuZWwgaW1hZ2UgKHRvcAogICoJCSAoVkFfQklUUyAtIDEpKQogICogVkFfQklUUyAtIHRoZSBtYXhpbXVtIG51bWJlciBvZiBiaXRzIGZvciB2aXJ0dWFsIGFkZHJlc3Nlcy4KQEAgLTQ1LDcgKzUxLDkgQEAKICNkZWZpbmUgUEFHRV9PRkZTRVQJCShVTCgweGZmZmZmZmZmZmZmZmZmZmYpIDw8IChWQV9CSVRTIC0gMSkpCiAjZGVmaW5lIE1PRFVMRVNfRU5ECQkoUEFHRV9PRkZTRVQpCiAjZGVmaW5lIE1PRFVMRVNfVkFERFIJCShNT0RVTEVTX0VORCAtIFNaXzY0TSkKLSNkZWZpbmUgRklYQUREUl9UT1AJCShNT0RVTEVTX1ZBRERSIC0gU1pfMk0gLSBQQUdFX1NJWkUpCisjZGVmaW5lIFBDSV9JT19FTkQJCShNT0RVTEVTX1ZBRERSIC0gU1pfMk0pCisjZGVmaW5lIFBDSV9JT19TVEFSVAkJKFBDSV9JT19FTkQgLSBQQ0lfSU9fU0laRSkKKyNkZWZpbmUgRklYQUREUl9UT1AJCShQQ0lfSU9fU1RBUlQgLSBTWl8yTSkKICNkZWZpbmUgVEFTS19TSVpFXzY0CQkoVUwoMSkgPDwgVkFfQklUUykKIAogI2lmZGVmIENPTkZJR19DT01QQVQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IGMyZjAwNmMuLjNkMzExNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW11LmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tbXUuaApAQCAtMzEsNyArMzEsOCBAQAogZXh0ZXJuIHZvaWQgc2V0dXBfbW1fZm9yX3JlYm9vdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW9tZW0gKmVhcmx5X2lvX21hcChwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIHZpcnQpOwogZXh0ZXJuIHZvaWQgaW5pdF9tZW1fcGdwcm90KHZvaWQpOwotLyogY3JlYXRlIGFuIGlkZW50aXR5IG1hcHBpbmcgZm9yIG1lbW9yeSAob3IgaW8gaWYgbWFwX2lvIGlzIHRydWUpICovCi1leHRlcm4gdm9pZCBjcmVhdGVfaWRfbWFwcGluZyhwaHlzX2FkZHJfdCBhZGRyLCBwaHlzX2FkZHJfdCBzaXplLCBpbnQgbWFwX2lvKTsKK2V4dGVybiB2b2lkIGNyZWF0ZV9wZ2RfbWFwcGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGh5c19hZGRyX3QgcGh5cywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZpcnQsIHBoeXNfYWRkcl90IHNpemUsCisJCQkgICAgICAgcGdwcm90X3QgcHJvdCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAyMTBkNjMyLi4xNjQ0OWM1MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yNSw3ICsyNSw2IEBACiAgKiBTb2Z0d2FyZSBkZWZpbmVkIFBURSBiaXRzIGRlZmluaXRpb24uCiAgKi8KICNkZWZpbmUgUFRFX1ZBTElECQkoX0FUKHB0ZXZhbF90LCAxKSA8PCAwKQotI2RlZmluZSBQVEVfRklMRQkJKF9BVChwdGV2YWxfdCwgMSkgPDwgMikJLyogb25seSB3aGVuICFwdGVfcHJlc2VudCgpICovCiAjZGVmaW5lIFBURV9ESVJUWQkJKF9BVChwdGV2YWxfdCwgMSkgPDwgNTUpCiAjZGVmaW5lIFBURV9TUEVDSUFMCQkoX0FUKHB0ZXZhbF90LCAxKSA8PCA1NikKICNkZWZpbmUgUFRFX1dSSVRFCQkoX0FUKHB0ZXZhbF90LCAxKSA8PCA1NykKQEAgLTQ2LDcgKzQ1LDcgQEAKIAogI2RlZmluZSB2bWVtbWFwCQkJKChzdHJ1Y3QgcGFnZSAqKShWTUFMTE9DX0VORCArIFNaXzY0SykpCiAKLSNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTBVTAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogZXh0ZXJuIHZvaWQgX19wdGVfZXJyb3IoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIHVuc2lnbmVkIGxvbmcgdmFsKTsKQEAgLTI2NCw2ICsyNjMsMTEgQEAKIAlyZXR1cm4gX19wbWQocHRlX3ZhbChwdGUpKTsKIH0KIAorc3RhdGljIGlubGluZSBwZ3Byb3RfdCBta19zZWN0X3Byb3QocGdwcm90X3QgcHJvdCkKK3sKKwlyZXR1cm4gX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSAmIH5QVEVfVEFCTEVfQklUKTsKK30KKwogLyoKICAqIFRIUCBkZWZpbml0aW9ucy4KICAqLwpAQCAtMzM3LDkgKzM0MSwxMiBAQAogCiAjaWZkZWYgQ09ORklHX0FSTTY0XzY0S19QQUdFUwogI2RlZmluZSBwdWRfc2VjdChwdWQpCQkoMCkKKyNkZWZpbmUgcHVkX3RhYmxlKHB1ZCkJCSgxKQogI2Vsc2UKICNkZWZpbmUgcHVkX3NlY3QocHVkKQkJKChwdWRfdmFsKHB1ZCkgJiBQVURfVFlQRV9NQVNLKSA9PSBcCiAJCQkJIFBVRF9UWVBFX1NFQ1QpCisjZGVmaW5lIHB1ZF90YWJsZShwdWQpCQkoKHB1ZF92YWwocHVkKSAmIFBVRF9UWVBFX01BU0spID09IFwKKwkJCQkgUFVEX1RZUEVfVEFCTEUpCiAjZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9wbWQocG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKQEAgLTQ2OSwxMyArNDc2LDEyIEBACiAvKgogICogRW5jb2RlIGFuZCBkZWNvZGUgYSBzd2FwIGVudHJ5OgogICoJYml0cyAwLTE6CXByZXNlbnQgKG11c3QgYmUgemVybykKLSAqCWJpdCAgMjoJCVBURV9GSUxFCi0gKgliaXRzIDMtODoJc3dhcCB0eXBlCi0gKgliaXRzIDktNTc6CXN3YXAgb2Zmc2V0CisgKgliaXRzIDItNzoJc3dhcCB0eXBlCisgKgliaXRzIDgtNTc6CXN3YXAgb2Zmc2V0CiAgKi8KLSNkZWZpbmUgX19TV1BfVFlQRV9TSElGVAkzCisjZGVmaW5lIF9fU1dQX1RZUEVfU0hJRlQJMgogI2RlZmluZSBfX1NXUF9UWVBFX0JJVFMJCTYKLSNkZWZpbmUgX19TV1BfT0ZGU0VUX0JJVFMJNDkKKyNkZWZpbmUgX19TV1BfT0ZGU0VUX0JJVFMJNTAKICNkZWZpbmUgX19TV1BfVFlQRV9NQVNLCQkoKDEgPDwgX19TV1BfVFlQRV9CSVRTKSAtIDEpCiAjZGVmaW5lIF9fU1dQX09GRlNFVF9TSElGVAkoX19TV1BfVFlQRV9CSVRTICsgX19TV1BfVFlQRV9TSElGVCkKICNkZWZpbmUgX19TV1BfT0ZGU0VUX01BU0sJKCgxVUwgPDwgX19TV1BfT0ZGU0VUX0JJVFMpIC0gMSkKQEAgLTQ5MywxOCArNDk5LDYgQEAKICAqLwogI2RlZmluZSBNQVhfU1dBUEZJTEVTX0NIRUNLKCkgQlVJTERfQlVHX09OKE1BWF9TV0FQRklMRVNfU0hJRlQgPiBfX1NXUF9UWVBFX0JJVFMpCiAKLS8qCi0gKiBFbmNvZGUgYW5kIGRlY29kZSBhIGZpbGUgZW50cnk6Ci0gKgliaXRzIDAtMToJcHJlc2VudCAobXVzdCBiZSB6ZXJvKQotICoJYml0ICAyOgkJUFRFX0ZJTEUKLSAqCWJpdHMgMy01NzoJZmlsZSBvZmZzZXQgLyBQQUdFX1NJWkUKLSAqLwotI2RlZmluZSBwdGVfZmlsZShwdGUpCQkocHRlX3ZhbChwdGUpICYgUFRFX0ZJTEUpCi0jZGVmaW5lIHB0ZV90b19wZ29mZih4KQkJKHB0ZV92YWwoeCkgPj4gMykKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKHgpCQlfX3B0ZSgoKHgpIDw8IDMpIHwgUFRFX0ZJTEUpCi0KLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJNTUKLQogZXh0ZXJuIGludCBrZXJuX2FkZHJfdmFsaWQodW5zaWduZWQgbG9uZyBhZGRyKTsKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDQxZWQ5ZTEuLmQ2ZGQ5ZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtNTgsNiArNTgsMTMgQEAKICNkZWZpbmUgQ09NUEFUX1BTUl9aX0JJVAkweDQwMDAwMDAwCiAjZGVmaW5lIENPTVBBVF9QU1JfTl9CSVQJMHg4MDAwMDAwMAogI2RlZmluZSBDT01QQVRfUFNSX0lUX01BU0sJMHgwNjAwZmMwMAkvKiBJZi1UaGVuIGV4ZWN1dGlvbiBzdGF0ZSBtYXNrICovCisKKyNpZmRlZiBDT05GSUdfQ1BVX0JJR19FTkRJQU4KKyNkZWZpbmUgQ09NUEFUX1BTUl9FTkRTVEFURQlDT01QQVRfUFNSX0VfQklUCisjZWxzZQorI2RlZmluZSBDT01QQVRfUFNSX0VORFNUQVRFCTAKKyNlbmRpZgorCiAvKgogICogVGhlc2UgYXJlICdtYWdpYycgdmFsdWVzIGZvciBQVFJBQ0VfUEVFS1VTUiB0aGF0IHJldHVybiBpbmZvIGFib3V0IHdoZXJlIGEKICAqIHByb2Nlc3MgaXMgbG9jYXRlZCBpbiBtZW1vcnkuCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N1c3BlbmQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3VzcGVuZC5oCmluZGV4IDQ1NmQ2N2MuLjAwMzgwMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3VzcGVuZC5oCisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3VzcGVuZC5oCkBAIC0yMyw2ICsyMyw0IEBACiAKIGV4dGVybiBpbnQgX19jcHVfc3VzcGVuZCh1bnNpZ25lZCBsb25nIGFyZywgaW50ICgqZm4pKHVuc2lnbmVkIGxvbmcpKTsKIGV4dGVybiB2b2lkIGNwdV9yZXN1bWUodm9pZCk7Ci1leHRlcm4gaW50IGNwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcpOwotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbHMuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vc3lzY2FsbHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDhmZTdjNi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFSTSBMdGQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLSAqLwotI2lmbmRlZiBfX0FTTV9TWVNDQUxMU19ICi0jZGVmaW5lIF9fQVNNX1NZU0NBTExTX0gKLQotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotCi0vKgotICogU3lzdGVtIGNhbGwgd3JhcHBlcnMgaW1wbGVtZW50ZWQgaW4ga2VybmVsL2VudHJ5LlMuCi0gKi8KLWFzbWxpbmthZ2UgbG9uZyBzeXNfcnRfc2lncmV0dXJuX3dyYXBwZXIodm9pZCk7Ci0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zeXNjYWxscy5oPgotCi0jZW5kaWYJLyogX19BU01fU1lTQ0FMTFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggMjNlOTQzMi4uM2JjNDk4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC00OCw2ICs0OCw5IEBACiAjZW5kaWYKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQ0xPTkUKKworI2lmbmRlZiBfX0NPTVBBVF9TWVNDQUxMX05SCiAjaW5jbHVkZSA8dWFwaS9hc20vdW5pc3RkLmg+CisjZW5kaWYKIAogI2RlZmluZSBOUl9zeXNjYWxscyAoX19OUl9zeXNjYWxscykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9LYnVpbGQgYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20vS2J1aWxkCmluZGV4IDk0MjM3NmQuLjgyNWIwZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS9LYnVpbGQKKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL3VhcGkvYXNtL0tidWlsZApAQCAtMTgsNCArMTgsNSBAQAogaGVhZGVyLXkgKz0gc2lnbmFsLmgKIGhlYWRlci15ICs9IHN0YXQuaAogaGVhZGVyLXkgKz0gc3RhdGZzLmgKK2hlYWRlci15ICs9IHVjb250ZXh0LmgKIGhlYWRlci15ICs9IHVuaXN0ZC5oCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Vjb250ZXh0LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20vdWNvbnRleHQuaApzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3Vjb250ZXh0LmgKcmVuYW1lIHRvIGFyY2gvYXJtNjQvaW5jbHVkZS91YXBpL2FzbS91Y29udGV4dC5oCmluZGV4IDQyZTA0YzguLjc5MWRlOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vdWNvbnRleHQuaAorKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvdWFwaS9hc20vdWNvbnRleHQuaApAQCAtMTMsOCArMTMsMTAgQEAKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqLwotI2lmbmRlZiBfX0FTTV9VQ09OVEVYVF9ICi0jZGVmaW5lIF9fQVNNX1VDT05URVhUX0gKKyNpZm5kZWYgX1VBUElfX0FTTV9VQ09OVEVYVF9ICisjZGVmaW5lIF9VQVBJX19BU01fVUNPTlRFWFRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogc3RydWN0IHVjb250ZXh0IHsKIAl1bnNpZ25lZCBsb25nCSAgdWNfZmxhZ3M7CkBAIC0yNyw0ICsyOSw0IEBACiAJc3RydWN0IHNpZ2NvbnRleHQgdWNfbWNvbnRleHQ7CiB9OwogCi0jZW5kaWYgLyogX19BU01fVUNPTlRFWFRfSCAqLworI2VuZGlmIC8qIF9VQVBJX19BU01fVUNPTlRFWFRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2FybTY0L2tlcm5lbC9NYWtlZmlsZQppbmRleCBlYWE3N2VkLi5iZWYwNGFmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2FybTY0L2tlcm5lbC9NYWtlZmlsZQpAQCAtMTYsMTAgKzE2LDEwIEBACiAJCQkgICBlbnRyeS1mcHNpbWQubyBwcm9jZXNzLm8gcHRyYWNlLm8gc2V0dXAubyBzaWduYWwubwlcCiAJCQkgICBzeXMubyBzdGFja3RyYWNlLm8gdGltZS5vIHRyYXBzLm8gaW8ubyB2ZHNvLm8JXAogCQkJICAgaHlwLXN0dWIubyBwc2NpLm8gY3B1X29wcy5vIGluc24ubyByZXR1cm5fYWRkcmVzcy5vCVwKLQkJCSAgIGNwdWluZm8ubyBjcHVfZXJyYXRhLm8gYWx0ZXJuYXRpdmUubworCQkJICAgY3B1aW5mby5vIGNwdV9lcnJhdGEubyBhbHRlcm5hdGl2ZS5vIGNhY2hlaW5mby5vCiAKIGFybTY0LW9iai0kKENPTkZJR19DT01QQVQpCQkrPSBzeXMzMi5vIGt1c2VyMzIubyBzaWduYWwzMi5vIAlcCi0JCQkJCSAgIHN5c19jb21wYXQubyAJCQlcCisJCQkJCSAgIHN5c19jb21wYXQubyBlbnRyeTMyLm8JCVwKIAkJCQkJICAgLi4vLi4vYXJtL2tlcm5lbC9vcGNvZGVzLm8KIGFybTY0LW9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpCSs9IGZ0cmFjZS5vIGVudHJ5LWZ0cmFjZS5vCiBhcm02NC1vYmotJChDT05GSUdfTU9EVUxFUykJCSs9IGFybTY0a3N5bXMubyBtb2R1bGUubwpAQCAtMjcsNyArMjcsNyBAQAogYXJtNjQtb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKQkJKz0gcGVyZl9yZWdzLm8KIGFybTY0LW9iai0kKENPTkZJR19IV19QRVJGX0VWRU5UUykJKz0gcGVyZl9ldmVudC5vCiBhcm02NC1vYmotJChDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UKQkrPSBod19icmVha3BvaW50Lm8KLWFybTY0LW9iai0kKENPTkZJR19BUk02NF9DUFVfU1VTUEVORCkJKz0gc2xlZXAubyBzdXNwZW5kLm8KK2FybTY0LW9iai0kKENPTkZJR19DUFVfUE0pCQkrPSBzbGVlcC5vIHN1c3BlbmQubwogYXJtNjQtb2JqLSQoQ09ORklHX0NQVV9JRExFKQkJKz0gY3B1aWRsZS5vCiBhcm02NC1vYmotJChDT05GSUdfSlVNUF9MQUJFTCkJCSs9IGp1bXBfbGFiZWwubwogYXJtNjQtb2JqLSQoQ09ORklHX0tHREIpCQkrPSBrZ2RiLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2FybXY4X2RlcHJlY2F0ZWQuYyBiL2FyY2gvYXJtNjQva2VybmVsL2FybXY4X2RlcHJlY2F0ZWQuYwppbmRleCBjMzYzNjcxLi43OTIyYzJlIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9hcm12OF9kZXByZWNhdGVkLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvYXJtdjhfZGVwcmVjYXRlZC5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbV9taXNjLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogCiAjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFMKICNpbmNsdWRlICJ0cmFjZS1ldmVudHMtZW11bGF0aW9uLmgiCkBAIC04NSw2ICs4Niw1NyBAQAogCXByX25vdGljZSgiUmVtb3ZlZCAlcyBlbXVsYXRpb24gaGFuZGxlclxuIiwgb3BzLT5uYW1lKTsKIH0KIAorc3RhdGljIHZvaWQgZW5hYmxlX2luc25faHdfbW9kZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpbnNuX2VtdWxhdGlvbiAqaW5zbiA9IChzdHJ1Y3QgaW5zbl9lbXVsYXRpb24gKilkYXRhOworCWlmIChpbnNuLT5vcHMtPnNldF9od19tb2RlKQorCQlpbnNuLT5vcHMtPnNldF9od19tb2RlKHRydWUpOworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX2luc25faHdfbW9kZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpbnNuX2VtdWxhdGlvbiAqaW5zbiA9IChzdHJ1Y3QgaW5zbl9lbXVsYXRpb24gKilkYXRhOworCWlmIChpbnNuLT5vcHMtPnNldF9od19tb2RlKQorCQlpbnNuLT5vcHMtPnNldF9od19tb2RlKGZhbHNlKTsKK30KKworLyogUnVuIHNldF9od19tb2RlKG1vZGUpIG9uIGFsbCBhY3RpdmUgQ1BVcyAqLworc3RhdGljIGludCBydW5fYWxsX2NwdV9zZXRfaHdfbW9kZShzdHJ1Y3QgaW5zbl9lbXVsYXRpb24gKmluc24sIGJvb2wgZW5hYmxlKQoreworCWlmICghaW5zbi0+b3BzLT5zZXRfaHdfbW9kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGVuYWJsZSkKKwkJb25fZWFjaF9jcHUoZW5hYmxlX2luc25faHdfbW9kZSwgKHZvaWQgKilpbnNuLCB0cnVlKTsKKwllbHNlCisJCW9uX2VhY2hfY3B1KGRpc2FibGVfaW5zbl9od19tb2RlLCAodm9pZCAqKWluc24sIHRydWUpOworCXJldHVybiAwOworfQorCisvKgorICogUnVuIHNldF9od19tb2RlIGZvciBhbGwgaW5zbnMgb24gYSBzdGFydGluZyBDUFUuCisgKiBSZXR1cm5zOgorICogIDAgCQktIElmIGFsbCB0aGUgaG9va3MgcmFuIHN1Y2Nlc3NmdWxseS4KKyAqIC1FSU5WQUwJLSBBdCBsZWFzdCBvbmUgaG9vayBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBDUFUuCisgKi8KK3N0YXRpYyBpbnQgcnVuX2FsbF9pbnNuX3NldF9od19tb2RlKHVuc2lnbmVkIGxvbmcgY3B1KQoreworCWludCByYyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaW5zbl9lbXVsYXRpb24gKmluc247CisKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmluc25fZW11bGF0aW9uX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGluc24sICZpbnNuX2VtdWxhdGlvbiwgbm9kZSkgeworCQlib29sIGVuYWJsZSA9IChpbnNuLT5jdXJyZW50X21vZGUgPT0gSU5TTl9IVyk7CisJCWlmIChpbnNuLT5vcHMtPnNldF9od19tb2RlICYmIGluc24tPm9wcy0+c2V0X2h3X21vZGUoZW5hYmxlKSkgeworCQkJcHJfd2FybigiQ1BVWyVsZF0gY2Fubm90IHN1cHBvcnQgdGhlIGVtdWxhdGlvbiBvZiAlcyIsCisJCQkJY3B1LCBpbnNuLT5vcHMtPm5hbWUpOworCQkJcmMgPSAtRUlOVkFMOworCQl9CisJfQorCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnNuX2VtdWxhdGlvbl9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgaW50IHVwZGF0ZV9pbnNuX2VtdWxhdGlvbl9tb2RlKHN0cnVjdCBpbnNuX2VtdWxhdGlvbiAqaW5zbiwKIAkJCQkgICAgICAgZW51bSBpbnNuX2VtdWxhdGlvbl9tb2RlIHByZXYpCiB7CkBAIC05NywxMCArMTQ5LDggQEAKIAkJcmVtb3ZlX2VtdWxhdGlvbl9ob29rcyhpbnNuLT5vcHMpOwogCQlicmVhazsKIAljYXNlIElOU05fSFc6Ci0JCWlmIChpbnNuLT5vcHMtPnNldF9od19tb2RlKSB7Ci0JCQlpbnNuLT5vcHMtPnNldF9od19tb2RlKGZhbHNlKTsKKwkJaWYgKCFydW5fYWxsX2NwdV9zZXRfaHdfbW9kZShpbnNuLCBmYWxzZSkpCiAJCQlwcl9ub3RpY2UoIkRpc2FibGVkICVzIHN1cHBvcnRcbiIsIGluc24tPm9wcy0+bmFtZSk7Ci0JCX0KIAkJYnJlYWs7CiAJfQogCkBAIC0xMTEsMTAgKzE2MSw5IEBACiAJCXJlZ2lzdGVyX2VtdWxhdGlvbl9ob29rcyhpbnNuLT5vcHMpOwogCQlicmVhazsKIAljYXNlIElOU05fSFc6Ci0JCWlmIChpbnNuLT5vcHMtPnNldF9od19tb2RlICYmIGluc24tPm9wcy0+c2V0X2h3X21vZGUodHJ1ZSkpCisJCXJldCA9IHJ1bl9hbGxfY3B1X3NldF9od19tb2RlKGluc24sIHRydWUpOworCQlpZiAoIXJldCkKIAkJCXByX25vdGljZSgiRW5hYmxlZCAlcyBzdXBwb3J0XG4iLCBpbnNuLT5vcHMtPm5hbWUpOwotCQllbHNlCi0JCQlyZXQgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9CiAKQEAgLTEzMyw2ICsxODIsOCBAQAogCXN3aXRjaCAob3BzLT5zdGF0dXMpIHsKIAljYXNlIElOU05fREVQUkVDQVRFRDoKIAkJaW5zbi0+Y3VycmVudF9tb2RlID0gSU5TTl9FTVVMQVRFOworCQkvKiBEaXNhYmxlIHRoZSBIVyBtb2RlIGlmIGl0IHdhcyB0dXJuZWQgb24gYXQgZWFybHkgYm9vdCB0aW1lICovCisJCXJ1bl9hbGxfY3B1X3NldF9od19tb2RlKGluc24sIGZhbHNlKTsKIAkJaW5zbi0+bWF4ID0gSU5TTl9IVzsKIAkJYnJlYWs7CiAJY2FzZSBJTlNOX09CU09MRVRFOgpAQCAtNDUzLDggKzUwNCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgU0NUTFJfRUwxX0NQMTVCRU4gKDEgPDwgNSkKLQogc3RhdGljIGlubGluZSB2b2lkIGNvbmZpZ19zY3Rscl9lbDEodTMyIGNsZWFyLCB1MzIgc2V0KQogewogCXUzMiB2YWw7CkBAIC00NjUsNDggKzUxNCwxMyBAQAogCWFzbSB2b2xhdGlsZSgibXNyIHNjdGxyX2VsMSwgJTAiIDogOiAiciIgKHZhbCkpOwogfQogCi1zdGF0aWMgdm9pZCBlbmFibGVfY3AxNV9iZW4odm9pZCAqaW5mbykKLXsKLQljb25maWdfc2N0bHJfZWwxKDAsIFNDVExSX0VMMV9DUDE1QkVOKTsKLX0KLQotc3RhdGljIHZvaWQgZGlzYWJsZV9jcDE1X2Jlbih2b2lkICppbmZvKQotewotCWNvbmZpZ19zY3Rscl9lbDEoU0NUTFJfRUwxX0NQMTVCRU4sIDApOwotfQotCi1zdGF0aWMgaW50IGNwdV9ob3RwbHVnX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmIsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKLXsKLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgQ1BVX1NUQVJUSU5HOgotCWNhc2UgQ1BVX1NUQVJUSU5HX0ZST1pFTjoKLQkJZW5hYmxlX2NwMTVfYmVuKE5VTEwpOwotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0JY2FzZSBDUFVfRFlJTkc6Ci0JY2FzZSBDUFVfRFlJTkdfRlJPWkVOOgotCQlkaXNhYmxlX2NwMTVfYmVuKE5VTEwpOwotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0JfQotCi0JcmV0dXJuIE5PVElGWV9PSzsKLX0KLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjcHVfaG90cGx1Z19ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9IGNwdV9ob3RwbHVnX25vdGlmeSwKLX07Ci0KIHN0YXRpYyBpbnQgY3AxNV9iYXJyaWVyX3NldF9od19tb2RlKGJvb2wgZW5hYmxlKQogewotCWlmIChlbmFibGUpIHsKLQkJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfaG90cGx1Z19ub3RpZmllcik7Ci0JCW9uX2VhY2hfY3B1KGVuYWJsZV9jcDE1X2JlbiwgTlVMTCwgdHJ1ZSk7Ci0JfSBlbHNlIHsKLQkJdW5yZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNwdV9ob3RwbHVnX25vdGlmaWVyKTsKLQkJb25fZWFjaF9jcHUoZGlzYWJsZV9jcDE1X2JlbiwgTlVMTCwgdHJ1ZSk7Ci0JfQotCi0JcmV0dXJuIHRydWU7CisJaWYgKGVuYWJsZSkKKwkJY29uZmlnX3NjdGxyX2VsMSgwLCBTQ1RMUl9FTDFfQ1AxNUJFTik7CisJZWxzZQorCQljb25maWdfc2N0bHJfZWwxKFNDVExSX0VMMV9DUDE1QkVOLCAwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCB1bmRlZl9ob29rIGNwMTVfYmFycmllcl9ob29rc1tdID0gewpAQCAtNTM0LDYgKzU0OCw5MyBAQAogCS5zZXRfaHdfbW9kZSA9IGNwMTVfYmFycmllcl9zZXRfaHdfbW9kZSwKIH07CiAKK3N0YXRpYyBpbnQgc2V0ZW5kX3NldF9od19tb2RlKGJvb2wgZW5hYmxlKQoreworCWlmICghY3B1X3N1cHBvcnRzX21peGVkX2VuZGlhbl9lbDAoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZW5hYmxlKQorCQljb25maWdfc2N0bHJfZWwxKFNDVExSX0VMMV9TRUQsIDApOworCWVsc2UKKwkJY29uZmlnX3NjdGxyX2VsMSgwLCBTQ1RMUl9FTDFfU0VEKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXRfc2V0ZW5kX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBiaWdfZW5kaWFuKQoreworCWNoYXIgKmluc247CisKKwlwZXJmX3N3X2V2ZW50KFBFUkZfQ09VTlRfU1dfRU1VTEFUSU9OX0ZBVUxUUywgMSwgcmVncywgcmVncy0+cGMpOworCisJaWYgKGJpZ19lbmRpYW4pIHsKKwkJaW5zbiA9ICJzZXRlbmQgYmUiOworCQlyZWdzLT5wc3RhdGUgfD0gQ09NUEFUX1BTUl9FX0JJVDsKKwl9IGVsc2UgeworCQlpbnNuID0gInNldGVuZCBsZSI7CisJCXJlZ3MtPnBzdGF0ZSAmPSB+Q09NUEFUX1BTUl9FX0JJVDsKKwl9CisKKwl0cmFjZV9pbnN0cnVjdGlvbl9lbXVsYXRpb24oaW5zbiwgcmVncy0+cGMpOworCXByX3dhcm5fcmF0ZWxpbWl0ZWQoIlwiJXNcIiAoJWxkKSB1c2VzIGRlcHJlY2F0ZWQgc2V0ZW5kIGluc3RydWN0aW9uIGF0IDB4JWxseFxuIiwKKwkJCWN1cnJlbnQtPmNvbW0sICh1bnNpZ25lZCBsb25nKWN1cnJlbnQtPnBpZCwgcmVncy0+cGMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYTMyX3NldGVuZF9oYW5kbGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MzIgaW5zdHIpCit7CisJaW50IHJjID0gY29tcGF0X3NldGVuZF9oYW5kbGVyKHJlZ3MsIChpbnN0ciA+PiA5KSAmIDEpOworCXJlZ3MtPnBjICs9IDQ7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHQxNl9zZXRlbmRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTMyIGluc3RyKQoreworCWludCByYyA9IGNvbXBhdF9zZXRlbmRfaGFuZGxlcihyZWdzLCAoaW5zdHIgPj4gMykgJiAxKTsKKwlyZWdzLT5wYyArPSAyOworCXJldHVybiByYzsKK30KKworc3RhdGljIHN0cnVjdCB1bmRlZl9ob29rIHNldGVuZF9ob29rc1tdID0geworCXsKKwkJLmluc3RyX21hc2sJPSAweGZmZmZmZGZmLAorCQkuaW5zdHJfdmFsCT0gMHhmMTAxMDAwMCwKKwkJLnBzdGF0ZV9tYXNrCT0gQ09NUEFUX1BTUl9NT0RFX01BU0ssCisJCS5wc3RhdGVfdmFsCT0gQ09NUEFUX1BTUl9NT0RFX1VTUiwKKwkJLmZuCQk9IGEzMl9zZXRlbmRfaGFuZGxlciwKKwl9LAorCXsKKwkJLyogVGh1bWIgbW9kZSAqLworCQkuaW5zdHJfbWFzawk9IDB4MDAwMGZmZjcsCisJCS5pbnN0cl92YWwJPSAweDAwMDBiNjUwLAorCQkucHN0YXRlX21hc2sJPSAoQ09NUEFUX1BTUl9UX0JJVCB8IENPTVBBVF9QU1JfTU9ERV9NQVNLKSwKKwkJLnBzdGF0ZV92YWwJPSAoQ09NUEFUX1BTUl9UX0JJVCB8IENPTVBBVF9QU1JfTU9ERV9VU1IpLAorCQkuZm4JCT0gdDE2X3NldGVuZF9oYW5kbGVyLAorCX0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgaW5zbl9lbXVsYXRpb25fb3BzIHNldGVuZF9vcHMgPSB7CisJLm5hbWUgPSAic2V0ZW5kIiwKKwkuc3RhdHVzID0gSU5TTl9ERVBSRUNBVEVELAorCS5ob29rcyA9IHNldGVuZF9ob29rcywKKwkuc2V0X2h3X21vZGUgPSBzZXRlbmRfc2V0X2h3X21vZGUsCit9OworCitzdGF0aWMgaW50IGluc25fY3B1X2hvdHBsdWdfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqYiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCWludCByYyA9IDA7CisJaWYgKChhY3Rpb24gJiB+Q1BVX1RBU0tTX0ZST1pFTikgPT0gQ1BVX1NUQVJUSU5HKQorCQlyYyA9IHJ1bl9hbGxfaW5zbl9zZXRfaHdfbW9kZSgodW5zaWduZWQgbG9uZyloY3B1KTsKKworCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKHJjKTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBpbnNuX2NwdV9ob3RwbHVnX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gaW5zbl9jcHVfaG90cGx1Z19ub3RpZnksCit9OworCiAvKgogICogSW52b2tlZCBhcyBsYXRlX2luaXRjYWxsLCBzaW5jZSBub3QgbmVlZGVkIGJlZm9yZSBpbml0IHNwYXduZWQuCiAgKi8KQEAgLTU0NSw2ICs2NDYsMTQgQEAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfQ1AxNV9CQVJSSUVSX0VNVUxBVElPTikpCiAJCXJlZ2lzdGVyX2luc25fZW11bGF0aW9uKCZjcDE1X2JhcnJpZXJfb3BzKTsKIAorCWlmIChJU19FTkFCTEVEKENPTkZJR19TRVRFTkRfRU1VTEFUSU9OKSkgeworCQlpZihzeXN0ZW1fc3VwcG9ydHNfbWl4ZWRfZW5kaWFuX2VsMCgpKQorCQkJcmVnaXN0ZXJfaW5zbl9lbXVsYXRpb24oJnNldGVuZF9vcHMpOworCQllbHNlCisJCQlwcl9pbmZvKCJzZXRlbmQgaW5zdHJ1Y3Rpb24gZW11bGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIHN5c3RlbSIpOworCX0KKworCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmaW5zbl9jcHVfaG90cGx1Z19ub3RpZmllcik7CiAJcmVnaXN0ZXJfaW5zbl9lbXVsYXRpb25fc3lzY3RsKGN0bF9hYmkpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9hcm02NC9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA5YTlmY2UwLi5hMmFlMTk0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogICBERUZJTkUoS1ZNX1ZUVEJSLAkJb2Zmc2V0b2Yoc3RydWN0IGt2bSwgYXJjaC52dHRicikpOwogICBERUZJTkUoS1ZNX1ZHSUNfVkNUUkwsCW9mZnNldG9mKHN0cnVjdCBrdm0sIGFyY2gudmdpYy52Y3RybF9iYXNlKSk7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJNNjRfQ1BVX1NVU1BFTkQKKyNpZmRlZiBDT05GSUdfQ1BVX1BNCiAgIERFRklORShDUFVfU1VTUEVORF9TWiwJc2l6ZW9mKHN0cnVjdCBjcHVfc3VzcGVuZF9jdHgpKTsKICAgREVGSU5FKENQVV9DVFhfU1AsCQlvZmZzZXRvZihzdHJ1Y3QgY3B1X3N1c3BlbmRfY3R4LCBzcCkpOwogICBERUZJTkUoTVBJRFJfSEFTSF9NQVNLLAlvZmZzZXRvZihzdHJ1Y3QgbXBpZHJfaGFzaCwgbWFzaykpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY2FjaGVpbmZvLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9jYWNoZWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODYyOWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvY2FjaGVpbmZvLmMKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiAgQVJNNjQgY2FjaGVpbmZvIHN1cHBvcnQKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDE1IEFSTSBMdGQuCisgKiAgQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZWluZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisKKyNpbmNsdWRlIDxhc20vY2FjaGV0eXBlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisjZGVmaW5lIE1BWF9DQUNIRV9MRVZFTAkJCTcJLyogTWF4IDcgbGV2ZWwgc3VwcG9ydGVkICovCisvKiBDdHlwZW4sIGJpdHNbMyhuIC0gMSkgKyAyIDogMyhuIC0gMSldLCBmb3IgbiA9IDEgdG8gNyAqLworI2RlZmluZSBDTElEUl9DVFlQRV9TSElGVChsZXZlbCkJKDMgKiAobGV2ZWwgLSAxKSkKKyNkZWZpbmUgQ0xJRFJfQ1RZUEVfTUFTSyhsZXZlbCkJCSg3IDw8IENMSURSX0NUWVBFX1NISUZUKGxldmVsKSkKKyNkZWZpbmUgQ0xJRFJfQ1RZUEUoY2xpZHIsIGxldmVsKQlcCisJKCgoY2xpZHIpICYgQ0xJRFJfQ1RZUEVfTUFTSyhsZXZlbCkpID4+IENMSURSX0NUWVBFX1NISUZUKGxldmVsKSkKKworc3RhdGljIGlubGluZSBlbnVtIGNhY2hlX3R5cGUgZ2V0X2NhY2hlX3R5cGUoaW50IGxldmVsKQoreworCXU2NCBjbGlkcjsKKworCWlmIChsZXZlbCA+IE1BWF9DQUNIRV9MRVZFTCkKKwkJcmV0dXJuIENBQ0hFX1RZUEVfTk9DQUNIRTsKKwlhc20gdm9sYXRpbGUgKCJtcnMgICAgICV4MCwgY2xpZHJfZWwxIiA6ICI9ciIgKGNsaWRyKSk7CisJcmV0dXJuIENMSURSX0NUWVBFKGNsaWRyLCBsZXZlbCk7Cit9CisKKy8qCisgKiBDYWNoZSBTaXplIFNlbGVjdGlvbiBSZWdpc3RlcihDU1NFTFIpIHNlbGVjdHMgd2hpY2ggQ2FjaGUgU2l6ZSBJRAorICogUmVnaXN0ZXIoQ0NTSURSKSBpcyBhY2Nlc3NpYmxlIGJ5IHNwZWNpZnlpbmcgdGhlIHJlcXVpcmVkIGNhY2hlCisgKiBsZXZlbCBhbmQgdGhlIGNhY2hlIHR5cGUuIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgbm8gb25lIGVsc2UgY2hhbmdlcworICogQ1NTRUxSIGJ5IGNhbGxpbmcgdGhpcyBpbiBub24tcHJlZW10aWJsZSBjb250ZXh0CisgKi8KK3U2NCBfX2F0dHJpYnV0ZV9jb25zdF9fIGNhY2hlX2dldF9jY3NpZHIodTY0IGNzc2VscikKK3sKKwl1NjQgY2NzaWRyOworCisJV0FSTl9PTihwcmVlbXB0aWJsZSgpKTsKKworCS8qIFB1dCB2YWx1ZSBpbnRvIENTU0VMUiAqLworCWFzbSB2b2xhdGlsZSgibXNyIGNzc2Vscl9lbDEsICV4MCIgOiA6ICJyIiAoY3NzZWxyKSk7CisJaXNiKCk7CisJLyogUmVhZCByZXN1bHQgb3V0IG9mIENDU0lEUiAqLworCWFzbSB2b2xhdGlsZSgibXJzICV4MCwgY2NzaWRyX2VsMSIgOiAiPXIiIChjY3NpZHIpKTsKKworCXJldHVybiBjY3NpZHI7Cit9CisKK3N0YXRpYyB2b2lkIGNpX2xlYWZfaW5pdChzdHJ1Y3QgY2FjaGVpbmZvICp0aGlzX2xlYWYsCisJCQkgZW51bSBjYWNoZV90eXBlIHR5cGUsIHVuc2lnbmVkIGludCBsZXZlbCkKK3sKKwlib29sIGlzX2ljYWNoZSA9IHR5cGUgJiBDQUNIRV9UWVBFX0lOU1Q7CisJdTY0IHRtcCA9IGNhY2hlX2dldF9jY3NpZHIoKGxldmVsIC0gMSkgPDwgMSB8IGlzX2ljYWNoZSk7CisKKwl0aGlzX2xlYWYtPmxldmVsID0gbGV2ZWw7CisJdGhpc19sZWFmLT50eXBlID0gdHlwZTsKKwl0aGlzX2xlYWYtPmNvaGVyZW5jeV9saW5lX3NpemUgPSBDQUNIRV9MSU5FU0laRSh0bXApOworCXRoaXNfbGVhZi0+bnVtYmVyX29mX3NldHMgPSBDQUNIRV9OVU1TRVRTKHRtcCk7CisJdGhpc19sZWFmLT53YXlzX29mX2Fzc29jaWF0aXZpdHkgPSBDQUNIRV9BU1NPQ0lBVElWSVRZKHRtcCk7CisJdGhpc19sZWFmLT5zaXplID0gdGhpc19sZWFmLT5udW1iZXJfb2Zfc2V0cyAqCisJICAgIHRoaXNfbGVhZi0+Y29oZXJlbmN5X2xpbmVfc2l6ZSAqIHRoaXNfbGVhZi0+d2F5c19vZl9hc3NvY2lhdGl2aXR5OworCXRoaXNfbGVhZi0+YXR0cmlidXRlcyA9CisJCSgodG1wICYgQ0NTSURSX0VMMV9XUklURV9USFJPVUdIKSA/IENBQ0hFX1dSSVRFX1RIUk9VR0ggOiAwKSB8CisJCSgodG1wICYgQ0NTSURSX0VMMV9XUklURV9CQUNLKSA/IENBQ0hFX1dSSVRFX0JBQ0sgOiAwKSB8CisJCSgodG1wICYgQ0NTSURSX0VMMV9SRUFEX0FMTE9DQVRFKSA/IENBQ0hFX1JFQURfQUxMT0NBVEUgOiAwKSB8CisJCSgodG1wICYgQ0NTSURSX0VMMV9XUklURV9BTExPQ0FURSkgPyBDQUNIRV9XUklURV9BTExPQ0FURSA6IDApOworfQorCitzdGF0aWMgaW50IF9faW5pdF9jYWNoZV9sZXZlbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGludCBjdHlwZSwgbGV2ZWwsIGxlYXZlczsKKwlzdHJ1Y3QgY3B1X2NhY2hlaW5mbyAqdGhpc19jcHVfY2kgPSBnZXRfY3B1X2NhY2hlaW5mbyhjcHUpOworCisJZm9yIChsZXZlbCA9IDEsIGxlYXZlcyA9IDA7IGxldmVsIDw9IE1BWF9DQUNIRV9MRVZFTDsgbGV2ZWwrKykgeworCQljdHlwZSA9IGdldF9jYWNoZV90eXBlKGxldmVsKTsKKwkJaWYgKGN0eXBlID09IENBQ0hFX1RZUEVfTk9DQUNIRSkgeworCQkJbGV2ZWwtLTsKKwkJCWJyZWFrOworCQl9CisJCS8qIFNlcGFyYXRlIGluc3RydWN0aW9uIGFuZCBkYXRhIGNhY2hlcyAqLworCQlsZWF2ZXMgKz0gKGN0eXBlID09IENBQ0hFX1RZUEVfU0VQQVJBVEUpID8gMiA6IDE7CisJfQorCisJdGhpc19jcHVfY2ktPm51bV9sZXZlbHMgPSBsZXZlbDsKKwl0aGlzX2NwdV9jaS0+bnVtX2xlYXZlcyA9IGxlYXZlczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX3BvcHVsYXRlX2NhY2hlX2xlYXZlcyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGludCBsZXZlbCwgaWR4OworCWVudW0gY2FjaGVfdHlwZSB0eXBlOworCXN0cnVjdCBjcHVfY2FjaGVpbmZvICp0aGlzX2NwdV9jaSA9IGdldF9jcHVfY2FjaGVpbmZvKGNwdSk7CisJc3RydWN0IGNhY2hlaW5mbyAqdGhpc19sZWFmID0gdGhpc19jcHVfY2ktPmluZm9fbGlzdDsKKworCWZvciAoaWR4ID0gMCwgbGV2ZWwgPSAxOyBsZXZlbCA8PSB0aGlzX2NwdV9jaS0+bnVtX2xldmVscyAmJgorCSAgICAgaWR4IDwgdGhpc19jcHVfY2ktPm51bV9sZWF2ZXM7IGlkeCsrLCBsZXZlbCsrKSB7CisJCXR5cGUgPSBnZXRfY2FjaGVfdHlwZShsZXZlbCk7CisJCWlmICh0eXBlID09IENBQ0hFX1RZUEVfU0VQQVJBVEUpIHsKKwkJCWNpX2xlYWZfaW5pdCh0aGlzX2xlYWYrKywgQ0FDSEVfVFlQRV9EQVRBLCBsZXZlbCk7CisJCQljaV9sZWFmX2luaXQodGhpc19sZWFmKyssIENBQ0hFX1RZUEVfSU5TVCwgbGV2ZWwpOworCQl9IGVsc2UgeworCQkJY2lfbGVhZl9pbml0KHRoaXNfbGVhZisrLCB0eXBlLCBsZXZlbCk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TTVBfQ0FMTF9DQUNIRV9GVU5DVElPTihpbml0X2NhY2hlX2xldmVsKQorREVGSU5FX1NNUF9DQUxMX0NBQ0hFX0ZVTkNUSU9OKHBvcHVsYXRlX2NhY2hlX2xlYXZlcykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWlkbGUuYyBiL2FyY2gvYXJtNjQva2VybmVsL2NwdWlkbGUuYwppbmRleCAxOWQxN2Y1Li41YzA4OTY2IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9jcHVpZGxlLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1aWRsZS5jCkBAIC0yOSwzICsyOSwyMyBAQAogCW9mX25vZGVfcHV0KGNwdV9ub2RlKTsKIAlyZXR1cm4gcmV0OwogfQorCisvKioKKyAqIGNwdV9zdXNwZW5kKCkgLSBmdW5jdGlvbiB0byBlbnRlciBhIGxvdy1wb3dlciBpZGxlIHN0YXRlCisgKiBAYXJnOiBhcmd1bWVudCB0byBwYXNzIHRvIENQVSBzdXNwZW5kIG9wZXJhdGlvbnMKKyAqCisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLUVPUE5PVFNVUFAgaWYgQ1BVIHN1c3BlbmQgaG9vayBub3QgaW5pdGlhbGl6ZWQsIENQVQorICogb3BlcmF0aW9ucyBiYWNrLWVuZCBlcnJvciBjb2RlIG90aGVyd2lzZS4KKyAqLworaW50IGNwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisKKwkvKgorCSAqIElmIGNwdV9vcHMgaGF2ZSBub3QgYmVlbiByZWdpc3RlcmVkIG9yIHN1c3BlbmQKKwkgKiBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQsIGNwdV9zdXNwZW5kIGNhbGwgZmFpbHMgZWFybHkuCisJICovCisJaWYgKCFjcHVfb3BzW2NwdV0gfHwgIWNwdV9vcHNbY3B1XS0+Y3B1X3N1c3BlbmQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlyZXR1cm4gY3B1X29wc1tjcHVdLT5jcHVfc3VzcGVuZChhcmcpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvY3B1aW5mby5jIGIvYXJjaC9hcm02NC9rZXJuZWwvY3B1aW5mby5jCmluZGV4IDA3ZDQzNWMuLjkyOTg1NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2NwdWluZm8uYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9jcHVpbmZvLmMKQEAgLTM1LDYgKzM1LDcgQEAKICAqLwogREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdWluZm9fYXJtNjQsIGNwdV9kYXRhKTsKIHN0YXRpYyBzdHJ1Y3QgY3B1aW5mb19hcm02NCBib290X2NwdV9kYXRhOworc3RhdGljIGJvb2wgbWl4ZWRfZW5kaWFuX2VsMCA9IHRydWU7CiAKIHN0YXRpYyBjaGFyICppY2FjaGVfcG9saWN5X3N0cltdID0gewogCVtJQ0FDSEVfUE9MSUNZX1JFU0VSVkVEXSA9ICJSRVNFUlZFRC9VTktOT1dOIiwKQEAgLTY4LDYgKzY5LDI2IEBACiAJcHJfaW5mbygiRGV0ZWN0ZWQgJXMgSS1jYWNoZSBvbiBDUFUlZFxuIiwgaWNhY2hlX3BvbGljeV9zdHJbbDFpcF0sIGNwdSk7CiB9CiAKK2Jvb2wgY3B1X3N1cHBvcnRzX21peGVkX2VuZGlhbl9lbDAodm9pZCkKK3sKKwlyZXR1cm4gaWRfYWE2NG1tZnIwX21peGVkX2VuZGlhbl9lbDAocmVhZF9jcHVpZChJRF9BQTY0TU1GUjBfRUwxKSk7Cit9CisKK2Jvb2wgc3lzdGVtX3N1cHBvcnRzX21peGVkX2VuZGlhbl9lbDAodm9pZCkKK3sKKwlyZXR1cm4gbWl4ZWRfZW5kaWFuX2VsMDsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX21peGVkX2VuZGlhbl9lbDBfc3VwcG9ydChzdHJ1Y3QgY3B1aW5mb19hcm02NCAqaW5mbykKK3sKKwltaXhlZF9lbmRpYW5fZWwwICY9IGlkX2FhNjRtbWZyMF9taXhlZF9lbmRpYW5fZWwwKGluZm8tPnJlZ19pZF9hYTY0bW1mcjApOworfQorCitzdGF0aWMgdm9pZCB1cGRhdGVfY3B1X2ZlYXR1cmVzKHN0cnVjdCBjcHVpbmZvX2FybTY0ICppbmZvKQoreworCXVwZGF0ZV9taXhlZF9lbmRpYW5fZWwwX3N1cHBvcnQoaW5mbyk7Cit9CisKIHN0YXRpYyBpbnQgY2hlY2tfcmVnX21hc2soY2hhciAqbmFtZSwgdTY0IG1hc2ssIHU2NCBib290LCB1NjQgY3VyLCBpbnQgY3B1KQogewogCWlmICgoYm9vdCAmIG1hc2spID09IChjdXIgJiBtYXNrKSkKQEAgLTIxNSw2ICsyMzYsNyBAQAogCWNwdWluZm9fZGV0ZWN0X2ljYWNoZV9wb2xpY3koaW5mbyk7CiAKIAljaGVja19sb2NhbF9jcHVfZXJyYXRhKCk7CisJdXBkYXRlX2NwdV9mZWF0dXJlcyhpbmZvKTsKIH0KIAogdm9pZCBjcHVpbmZvX3N0b3JlX2NwdSh2b2lkKQpAQCAtMjMxLDE1ICsyNTMsMyBAQAogCiAJYm9vdF9jcHVfZGF0YSA9ICppbmZvOwogfQotCi11NjQgX19hdHRyaWJ1dGVfY29uc3RfXyBpY2FjaGVfZ2V0X2Njc2lkcih2b2lkKQotewotCXU2NCBjY3NpZHI7Ci0KLQlXQVJOX09OKHByZWVtcHRpYmxlKCkpOwotCi0JLyogU2VsZWN0IEwxIEktY2FjaGUgYW5kIHJlYWQgaXRzIHNpemUgSUQgcmVnaXN0ZXIgKi8KLQlhc20oIm1zciBjc3NlbHJfZWwxLCAlMTsgaXNiOyBtcnMgJTAsIGNjc2lkcl9lbDEiCi0JICAgIDogIj1yIihjY3NpZHIpIDogInIiKDFMKSk7Ci0JcmV0dXJuIGNjc2lkcjsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2VmaS1zdHViLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9lZmktc3R1Yi5jCmluZGV4IGQyN2RkOTguLmY1Mzc0MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2VmaS1zdHViLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvZWZpLXN0dWIuYwpAQCAtMTMsMTMgKzEzLDEzIEBACiAjaW5jbHVkZSA8YXNtL2VmaS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCi1lZmlfc3RhdHVzX3QgaGFuZGxlX2tlcm5lbF9pbWFnZShlZmlfc3lzdGVtX3RhYmxlX3QgKnN5c190YWJsZSwKLQkJCQkgdW5zaWduZWQgbG9uZyAqaW1hZ2VfYWRkciwKLQkJCQkgdW5zaWduZWQgbG9uZyAqaW1hZ2Vfc2l6ZSwKLQkJCQkgdW5zaWduZWQgbG9uZyAqcmVzZXJ2ZV9hZGRyLAotCQkJCSB1bnNpZ25lZCBsb25nICpyZXNlcnZlX3NpemUsCi0JCQkJIHVuc2lnbmVkIGxvbmcgZHJhbV9iYXNlLAotCQkJCSBlZmlfbG9hZGVkX2ltYWdlX3QgKmltYWdlKQorZWZpX3N0YXR1c190IF9faW5pdCBoYW5kbGVfa2VybmVsX2ltYWdlKGVmaV9zeXN0ZW1fdGFibGVfdCAqc3lzX3RhYmxlLAorCQkJCQl1bnNpZ25lZCBsb25nICppbWFnZV9hZGRyLAorCQkJCQl1bnNpZ25lZCBsb25nICppbWFnZV9zaXplLAorCQkJCQl1bnNpZ25lZCBsb25nICpyZXNlcnZlX2FkZHIsCisJCQkJCXVuc2lnbmVkIGxvbmcgKnJlc2VydmVfc2l6ZSwKKwkJCQkJdW5zaWduZWQgbG9uZyBkcmFtX2Jhc2UsCisJCQkJCWVmaV9sb2FkZWRfaW1hZ2VfdCAqaW1hZ2UpCiB7CiAJZWZpX3N0YXR1c190IHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGtlcm5lbF9zaXplLCBrZXJuZWxfbWVtc2l6ZSA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9lZmkuYyBiL2FyY2gvYXJtNjQva2VybmVsL2VmaS5jCmluZGV4IDJiYjQzNDcuLmI0MmM3YjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2VmaS5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2VmaS5jCkBAIC0xMSwyNyArMTEsNDYgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21lbWJsb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW1fdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9mZHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vZWZpLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKIHN0cnVjdCBlZmlfbWVtb3J5X21hcCBtZW1tYXA7CiAKLXN0YXRpYyBlZmlfcnVudGltZV9zZXJ2aWNlc190ICpydW50aW1lOwotCiBzdGF0aWMgdTY0IGVmaV9zeXN0ZW1fdGFibGU7CiAKK3N0YXRpYyBwZ2RfdCBlZmlfcGdkW1BUUlNfUEVSX1BHRF0gX19wYWdlX2FsaWduZWRfYnNzOworCitzdGF0aWMgc3RydWN0IG1tX3N0cnVjdCBlZmlfbW0gPSB7CisJLm1tX3JiCQkJPSBSQl9ST09ULAorCS5wZ2QJCQk9IGVmaV9wZ2QsCisJLm1tX3VzZXJzCQk9IEFUT01JQ19JTklUKDIpLAorCS5tbV9jb3VudAkJPSBBVE9NSUNfSU5JVCgxKSwKKwkubW1hcF9zZW0JCT0gX19SV1NFTV9JTklUSUFMSVpFUihlZmlfbW0ubW1hcF9zZW0pLAorCS5wYWdlX3RhYmxlX2xvY2sJPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChlZmlfbW0ucGFnZV90YWJsZV9sb2NrKSwKKwkubW1saXN0CQkJPSBMSVNUX0hFQURfSU5JVChlZmlfbW0ubW1saXN0KSwKKwlJTklUX01NX0NPTlRFWFQoZWZpX21tKQorfTsKKwogc3RhdGljIGludCB1ZWZpX2RlYnVnIF9faW5pdGRhdGE7CiBzdGF0aWMgaW50IF9faW5pdCB1ZWZpX2RlYnVnX3NldHVwKGNoYXIgKnN0cikKIHsKQEAgLTQ4LDMwICs2NywzMyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZWZpX3NldHVwX2lkbWFwKHZvaWQpCisvKgorICogVHJhbnNsYXRlIGEgRUZJIHZpcnR1YWwgYWRkcmVzcyBpbnRvIGEgcGh5c2ljYWwgYWRkcmVzczogdGhpcyBpcyBuZWNlc3NhcnksCisgKiBhcyBzb21lIGRhdGEgbWVtYmVycyBvZiB0aGUgRUZJIHN5c3RlbSB0YWJsZSBhcmUgdmlydHVhbGx5IHJlbWFwcGVkIGFmdGVyCisgKiBTZXRWaXJ0dWFsQWRkcmVzc01hcCgpIGhhcyBiZWVuIGNhbGxlZC4KKyAqLworc3RhdGljIHBoeXNfYWRkcl90IGVmaV90b19waHlzKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyOwogCWVmaV9tZW1vcnlfZGVzY190ICptZDsKLQl1NjQgcGFkZHIsIG5wYWdlcywgc2l6ZTsKIAotCWZvcl9lYWNoX21lbWJsb2NrKG1lbW9yeSwgcikKLQkJY3JlYXRlX2lkX21hcHBpbmcoci0+YmFzZSwgci0+c2l6ZSwgMCk7Ci0KLQkvKiBtYXAgcnVudGltZSBpbyBzcGFjZXMgKi8KIAlmb3JfZWFjaF9lZmlfbWVtb3J5X2Rlc2MoJm1lbW1hcCwgbWQpIHsKLQkJaWYgKCEobWQtPmF0dHJpYnV0ZSAmIEVGSV9NRU1PUllfUlVOVElNRSkgfHwgaXNfbm9ybWFsX3JhbShtZCkpCisJCWlmICghKG1kLT5hdHRyaWJ1dGUgJiBFRklfTUVNT1JZX1JVTlRJTUUpKQogCQkJY29udGludWU7Ci0JCXBhZGRyID0gbWQtPnBoeXNfYWRkcjsKLQkJbnBhZ2VzID0gbWQtPm51bV9wYWdlczsKLQkJbWVtcmFuZ2VfZWZpX3RvX25hdGl2ZSgmcGFkZHIsICZucGFnZXMpOwotCQlzaXplID0gbnBhZ2VzIDw8IFBBR0VfU0hJRlQ7Ci0JCWNyZWF0ZV9pZF9tYXBwaW5nKHBhZGRyLCBzaXplLCAxKTsKKwkJaWYgKG1kLT52aXJ0X2FkZHIgPT0gMCkKKwkJCS8qIG5vIHZpcnR1YWwgbWFwcGluZyBoYXMgYmVlbiBpbnN0YWxsZWQgYnkgdGhlIHN0dWIgKi8KKwkJCWJyZWFrOworCQlpZiAobWQtPnZpcnRfYWRkciA8PSBhZGRyICYmCisJCSAgICAoYWRkciAtIG1kLT52aXJ0X2FkZHIpIDwgKG1kLT5udW1fcGFnZXMgPDwgRUZJX1BBR0VfU0hJRlQpKQorCQkJcmV0dXJuIG1kLT5waHlzX2FkZHIgKyBhZGRyIC0gbWQtPnZpcnRfYWRkcjsKIAl9CisJcmV0dXJuIGFkZHI7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHVlZmlfaW5pdCh2b2lkKQogewogCWVmaV9jaGFyMTZfdCAqYzE2OworCXZvaWQgKmNvbmZpZ190YWJsZXM7CisJdTY0IHRhYmxlX3NpemU7CiAJY2hhciB2ZW5kb3JbMTAwXSA9ICJ1bmtub3duIjsKIAlpbnQgaSwgcmV0dmFsOwogCkBAIC05OSw3ICsxMjEsNyBAQAogCQkJZWZpLnN5c3RhYi0+aGRyLnJldmlzaW9uICYgMHhmZmZmKTsKIAogCS8qIFNob3cgd2hhdCB3ZSBrbm93IGZvciBwb3N0ZXJpdHkgKi8KLQljMTYgPSBlYXJseV9tZW1yZW1hcChlZmkuc3lzdGFiLT5md192ZW5kb3IsCisJYzE2ID0gZWFybHlfbWVtcmVtYXAoZWZpX3RvX3BoeXMoZWZpLnN5c3RhYi0+ZndfdmVuZG9yKSwKIAkJCSAgICAgc2l6ZW9mKHZlbmRvcikpOwogCWlmIChjMTYpIHsKIAkJZm9yIChpID0gMDsgaSA8IChpbnQpIHNpemVvZih2ZW5kb3IpIC0gMSAmJiAqYzE2OyArK2kpCkBAIC0xMTIsOCArMTM0LDE0IEBACiAJCWVmaS5zeXN0YWItPmhkci5yZXZpc2lvbiA+PiAxNiwKIAkJZWZpLnN5c3RhYi0+aGRyLnJldmlzaW9uICYgMHhmZmZmLCB2ZW5kb3IpOwogCi0JcmV0dmFsID0gZWZpX2NvbmZpZ19pbml0KE5VTEwpOworCXRhYmxlX3NpemUgPSBzaXplb2YoZWZpX2NvbmZpZ190YWJsZV82NF90KSAqIGVmaS5zeXN0YWItPm5yX3RhYmxlczsKKwljb25maWdfdGFibGVzID0gZWFybHlfbWVtcmVtYXAoZWZpX3RvX3BoeXMoZWZpLnN5c3RhYi0+dGFibGVzKSwKKwkJCQkgICAgICAgdGFibGVfc2l6ZSk7CiAKKwlyZXR2YWwgPSBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyhjb25maWdfdGFibGVzLCBlZmkuc3lzdGFiLT5ucl90YWJsZXMsCisJCQkJCSBzaXplb2YoZWZpX2NvbmZpZ190YWJsZV82NF90KSwgTlVMTCk7CisKKwllYXJseV9tZW11bm1hcChjb25maWdfdGFibGVzLCB0YWJsZV9zaXplKTsKIG91dDoKIAllYXJseV9tZW11bm1hcChlZmkuc3lzdGFiLCAgc2l6ZW9mKGVmaV9zeXN0ZW1fdGFibGVfdCkpOwogCXJldHVybiByZXR2YWw7CkBAIC0xNjMsOSArMTkxLDcgQEAKIAkJaWYgKGlzX25vcm1hbF9yYW0obWQpKQogCQkJZWFybHlfaW5pdF9kdF9hZGRfbWVtb3J5X2FyY2gocGFkZHIsIHNpemUpOwogCi0JCWlmIChpc19yZXNlcnZlX3JlZ2lvbihtZCkgfHwKLQkJICAgIG1kLT50eXBlID09IEVGSV9CT09UX1NFUlZJQ0VTX0NPREUgfHwKLQkJICAgIG1kLT50eXBlID09IEVGSV9CT09UX1NFUlZJQ0VTX0RBVEEpIHsKKwkJaWYgKGlzX3Jlc2VydmVfcmVnaW9uKG1kKSkgewogCQkJbWVtYmxvY2tfcmVzZXJ2ZShwYWRkciwgc2l6ZSk7CiAJCQlpZiAodWVmaV9kZWJ1ZykKIAkJCQlwcl9jb250KCIqIik7CkBAIC0xNzgsMTIzICsyMDQsNiBAQAogCXNldF9iaXQoRUZJX01FTU1BUCwgJmVmaS5mbGFncyk7CiB9CiAKLQotc3RhdGljIHU2NCBfX2luaXQgZnJlZV9vbmVfcmVnaW9uKHU2NCBzdGFydCwgdTY0IGVuZCkKLXsKLQl1NjQgc2l6ZSA9IGVuZCAtIHN0YXJ0OwotCi0JaWYgKHVlZmlfZGVidWcpCi0JCXByX2luZm8oIiAgRUZJIGZyZWVpbmc6IDB4JTAxMmxseC0weCUwMTJsbHhcbiIsCXN0YXJ0LCBlbmQgLSAxKTsKLQotCWZyZWVfYm9vdG1lbV9sYXRlKHN0YXJ0LCBzaXplKTsKLQlyZXR1cm4gc2l6ZTsKLX0KLQotc3RhdGljIHU2NCBfX2luaXQgZnJlZV9yZWdpb24odTY0IHN0YXJ0LCB1NjQgZW5kKQotewotCXU2NCBtYXBfc3RhcnQsIG1hcF9lbmQsIHRvdGFsID0gMDsKLQotCWlmIChlbmQgPD0gc3RhcnQpCi0JCXJldHVybiB0b3RhbDsKLQotCW1hcF9zdGFydCA9ICh1NjQpbWVtbWFwLnBoeXNfbWFwOwotCW1hcF9lbmQgPSBQQUdFX0FMSUdOKG1hcF9zdGFydCArIChtZW1tYXAubWFwX2VuZCAtIG1lbW1hcC5tYXApKTsKLQltYXBfc3RhcnQgJj0gUEFHRV9NQVNLOwotCi0JaWYgKHN0YXJ0IDwgbWFwX2VuZCAmJiBlbmQgPiBtYXBfc3RhcnQpIHsKLQkJLyogcmVnaW9uIG92ZXJsYXBzIFVFRkkgbWVtbWFwICovCi0JCWlmIChzdGFydCA8IG1hcF9zdGFydCkKLQkJCXRvdGFsICs9IGZyZWVfb25lX3JlZ2lvbihzdGFydCwgbWFwX3N0YXJ0KTsKLQotCQlpZiAobWFwX2VuZCA8IGVuZCkKLQkJCXRvdGFsICs9IGZyZWVfb25lX3JlZ2lvbihtYXBfZW5kLCBlbmQpOwotCX0gZWxzZQotCQl0b3RhbCArPSBmcmVlX29uZV9yZWdpb24oc3RhcnQsIGVuZCk7Ci0KLQlyZXR1cm4gdG90YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBmcmVlX2Jvb3Rfc2VydmljZXModm9pZCkKLXsKLQl1NjQgdG90YWxfZnJlZWQgPSAwOwotCXU2NCBrZWVwX2VuZCwgZnJlZV9zdGFydCwgZnJlZV9lbmQ7Ci0JZWZpX21lbW9yeV9kZXNjX3QgKm1kOwotCi0JLyoKLQkgKiBJZiBrZXJuZWwgdXNlcyBsYXJnZXIgcGFnZXMgdGhhbiBVRUZJLCB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwKLQkgKiBub3QgdG8gaW5hZHZlcnRhbnRseSBmcmVlIG1lbW9yeSB3ZSB3YW50IHRvIGtlZXAgaWYgdGhlcmUgaXMKLQkgKiBvdmVybGFwIGF0IHRoZSBrZXJuZWwgcGFnZSBzaXplIGFsaWdubWVudC4gV2UgZG8gbm90IHdhbnQgdG8KLQkgKiBmcmVlIGlzX3Jlc2VydmVfcmVnaW9uKCkgbWVtb3J5IG5vciB0aGUgVUVGSSBtZW1tYXAgaXRzZWxmLgotCSAqCi0JICogVGhlIG1lbW9yeSBtYXAgaXMgc29ydGVkLCBzbyB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBlbmQgb2YKLQkgKiBhbnkgcHJldmlvdXMgcmVnaW9uIHdlIHdhbnQgdG8ga2VlcCwgcmVtZW1iZXIgYW55IHJlZ2lvbgotCSAqIHdlIHdhbnQgdG8gZnJlZSBhbmQgZGVmZXIgZnJlZWluZyBpdCB1bnRpbCB3ZSBlbmNvdW50ZXIKLQkgKiB0aGUgbmV4dCByZWdpb24gd2Ugd2FudCB0byBrZWVwLiBUaGlzIHdheSwgYmVmb3JlIGZyZWVpbmcKLQkgKiBpdCwgd2UgY2FuIGNsaXAgaXQgYXMgbmVlZGVkIHRvIGF2b2lkIGZyZWVpbmcgbWVtb3J5IHdlCi0JICogd2FudCB0byBrZWVwIGZvciBVRUZJLgotCSAqLwotCi0Ja2VlcF9lbmQgPSAwOwotCWZyZWVfc3RhcnQgPSAwOwotCi0JZm9yX2VhY2hfZWZpX21lbW9yeV9kZXNjKCZtZW1tYXAsIG1kKSB7Ci0JCXU2NCBwYWRkciwgbnBhZ2VzLCBzaXplOwotCi0JCWlmIChpc19yZXNlcnZlX3JlZ2lvbihtZCkpIHsKLQkJCS8qCi0JCQkgKiBXZSBkb24ndCB3YW50IHRvIGZyZWUgYW55IG1lbW9yeSBmcm9tIHRoaXMgcmVnaW9uLgotCQkJICovCi0JCQlpZiAoZnJlZV9zdGFydCkgewotCQkJCS8qIGFkanVzdCBmcmVlX2VuZCB0aGVuIGZyZWUgcmVnaW9uICovCi0JCQkJaWYgKGZyZWVfZW5kID4gbWQtPnBoeXNfYWRkcikKLQkJCQkJZnJlZV9lbmQgLT0gUEFHRV9TSVpFOwotCQkJCXRvdGFsX2ZyZWVkICs9IGZyZWVfcmVnaW9uKGZyZWVfc3RhcnQsIGZyZWVfZW5kKTsKLQkJCQlmcmVlX3N0YXJ0ID0gMDsKLQkJCX0KLQkJCWtlZXBfZW5kID0gbWQtPnBoeXNfYWRkciArIChtZC0+bnVtX3BhZ2VzIDw8IEVGSV9QQUdFX1NISUZUKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKG1kLT50eXBlICE9IEVGSV9CT09UX1NFUlZJQ0VTX0NPREUgJiYKLQkJICAgIG1kLT50eXBlICE9IEVGSV9CT09UX1NFUlZJQ0VTX0RBVEEpIHsKLQkJCS8qIG5vIG5lZWQgdG8gZnJlZSB0aGlzIHJlZ2lvbiAqLwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBXZSB3YW50IHRvIGZyZWUgbWVtb3J5IGZyb20gdGhpcyByZWdpb24uCi0JCSAqLwotCQlwYWRkciA9IG1kLT5waHlzX2FkZHI7Ci0JCW5wYWdlcyA9IG1kLT5udW1fcGFnZXM7Ci0JCW1lbXJhbmdlX2VmaV90b19uYXRpdmUoJnBhZGRyLCAmbnBhZ2VzKTsKLQkJc2l6ZSA9IG5wYWdlcyA8PCBQQUdFX1NISUZUOwotCi0JCWlmIChmcmVlX3N0YXJ0KSB7Ci0JCQlpZiAocGFkZHIgPD0gZnJlZV9lbmQpCi0JCQkJZnJlZV9lbmQgPSBwYWRkciArIHNpemU7Ci0JCQllbHNlIHsKLQkJCQl0b3RhbF9mcmVlZCArPSBmcmVlX3JlZ2lvbihmcmVlX3N0YXJ0LCBmcmVlX2VuZCk7Ci0JCQkJZnJlZV9zdGFydCA9IHBhZGRyOwotCQkJCWZyZWVfZW5kID0gcGFkZHIgKyBzaXplOwotCQkJfQotCQl9IGVsc2UgewotCQkJZnJlZV9zdGFydCA9IHBhZGRyOwotCQkJZnJlZV9lbmQgPSBwYWRkciArIHNpemU7Ci0JCX0KLQkJaWYgKGZyZWVfc3RhcnQgPCBrZWVwX2VuZCkgewotCQkJZnJlZV9zdGFydCArPSBQQUdFX1NJWkU7Ci0JCQlpZiAoZnJlZV9zdGFydCA+PSBmcmVlX2VuZCkKLQkJCQlmcmVlX3N0YXJ0ID0gMDsKLQkJfQotCX0KLQlpZiAoZnJlZV9zdGFydCkKLQkJdG90YWxfZnJlZWQgKz0gZnJlZV9yZWdpb24oZnJlZV9zdGFydCwgZnJlZV9lbmQpOwotCi0JaWYgKHRvdGFsX2ZyZWVkKQotCQlwcl9pbmZvKCJGcmVlZCAweCVsbHggYnl0ZXMgb2YgRUZJIGJvb3Qgc2VydmljZXMgbWVtb3J5IiwKLQkJCXRvdGFsX2ZyZWVkKTsKLX0KLQogdm9pZCBfX2luaXQgZWZpX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZWZpX2ZkdF9wYXJhbXMgcGFyYW1zOwpAQCAtMzE3LDE1OSArMjI2LDEwMCBAQAogCQlyZXR1cm47CiAKIAlyZXNlcnZlX3JlZ2lvbnMoKTsKKwllYXJseV9tZW11bm1hcChtZW1tYXAubWFwLCBwYXJhbXMubW1hcF9zaXplKTsKIH0KIAotdm9pZCBfX2luaXQgZWZpX2lkbWFwX2luaXQodm9pZCkKK3N0YXRpYyBib29sIF9faW5pdCBlZmlfdmlydG1hcF9pbml0KHZvaWQpCiB7Ci0JaWYgKCFlZmlfZW5hYmxlZChFRklfQk9PVCkpCi0JCXJldHVybjsKKwllZmlfbWVtb3J5X2Rlc2NfdCAqbWQ7CiAKLQkvKiBib290IHRpbWUgaWRtYXBfcGdfZGlyIGlzIGluY29tcGxldGUsIHNvIGZpbGwgaW4gbWlzc2luZyBwYXJ0cyAqLwotCWVmaV9zZXR1cF9pZG1hcCgpOwotCWVhcmx5X21lbXVubWFwKG1lbW1hcC5tYXAsIG1lbW1hcC5tYXBfZW5kIC0gbWVtbWFwLm1hcCk7Ci19CisJZm9yX2VhY2hfZWZpX21lbW9yeV9kZXNjKCZtZW1tYXAsIG1kKSB7CisJCXU2NCBwYWRkciwgbnBhZ2VzLCBzaXplOworCQlwZ3Byb3RfdCBwcm90OwogCi1zdGF0aWMgaW50IF9faW5pdCByZW1hcF9yZWdpb24oZWZpX21lbW9yeV9kZXNjX3QgKm1kLCB2b2lkICoqbmV3KQotewotCXU2NCBwYWRkciwgdmFkZHIsIG5wYWdlcywgc2l6ZTsKKwkJaWYgKCEobWQtPmF0dHJpYnV0ZSAmIEVGSV9NRU1PUllfUlVOVElNRSkpCisJCQljb250aW51ZTsKKwkJaWYgKG1kLT52aXJ0X2FkZHIgPT0gMCkKKwkJCXJldHVybiBmYWxzZTsKIAotCXBhZGRyID0gbWQtPnBoeXNfYWRkcjsKLQlucGFnZXMgPSBtZC0+bnVtX3BhZ2VzOwotCW1lbXJhbmdlX2VmaV90b19uYXRpdmUoJnBhZGRyLCAmbnBhZ2VzKTsKLQlzaXplID0gbnBhZ2VzIDw8IFBBR0VfU0hJRlQ7CisJCXBhZGRyID0gbWQtPnBoeXNfYWRkcjsKKwkJbnBhZ2VzID0gbWQtPm51bV9wYWdlczsKKwkJbWVtcmFuZ2VfZWZpX3RvX25hdGl2ZSgmcGFkZHIsICZucGFnZXMpOworCQlzaXplID0gbnBhZ2VzIDw8IFBBR0VfU0hJRlQ7CiAKLQlpZiAoaXNfbm9ybWFsX3JhbShtZCkpCi0JCXZhZGRyID0gKF9fZm9yY2UgdTY0KWlvcmVtYXBfY2FjaGUocGFkZHIsIHNpemUpOwotCWVsc2UKLQkJdmFkZHIgPSAoX19mb3JjZSB1NjQpaW9yZW1hcChwYWRkciwgc2l6ZSk7Ci0KLQlpZiAoIXZhZGRyKSB7Ci0JCXByX2VycigiVW5hYmxlIHRvIHJlbWFwIDB4JWxseCBwYWdlcyBAICVwXG4iLAotCQkgICAgICAgbnBhZ2VzLCAodm9pZCAqKXBhZGRyKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogYWRqdXN0IGZvciBhbnkgcm91bmRpbmcgd2hlbiBFRkkgYW5kIHN5c3RlbSBwYWdlc2l6ZSBkaWZmZXJzICovCi0JbWQtPnZpcnRfYWRkciA9IHZhZGRyICsgKG1kLT5waHlzX2FkZHIgLSBwYWRkcik7Ci0KLQlpZiAodWVmaV9kZWJ1ZykKLQkJcHJfaW5mbygiICBFRkkgcmVtYXAgMHglMDEybGx4ID0+ICVwXG4iLAorCQlwcl9pbmZvKCIgIEVGSSByZW1hcCAweCUwMTZsbHggPT4gJXBcbiIsCiAJCQltZC0+cGh5c19hZGRyLCAodm9pZCAqKW1kLT52aXJ0X2FkZHIpOwogCi0JbWVtY3B5KCpuZXcsIG1kLCBtZW1tYXAuZGVzY19zaXplKTsKLQkqbmV3ICs9IG1lbW1hcC5kZXNjX3NpemU7CisJCS8qCisJCSAqIE9ubHkgcmVnaW9ucyBvZiB0eXBlIEVGSV9SVU5USU1FX1NFUlZJQ0VTX0NPREUgbmVlZCB0byBiZQorCQkgKiBleGVjdXRhYmxlLCBldmVyeXRoaW5nIGVsc2UgY2FuIGJlIG1hcHBlZCB3aXRoIHRoZSBYTiBiaXRzCisJCSAqIHNldC4KKwkJICovCisJCWlmICghaXNfbm9ybWFsX3JhbShtZCkpCisJCQlwcm90ID0gX19wZ3Byb3QoUFJPVF9ERVZJQ0VfbkduUkUpOworCQllbHNlIGlmIChtZC0+dHlwZSA9PSBFRklfUlVOVElNRV9TRVJWSUNFU19DT0RFKQorCQkJcHJvdCA9IFBBR0VfS0VSTkVMX0VYRUM7CisJCWVsc2UKKwkJCXByb3QgPSBQQUdFX0tFUk5FTDsKIAotCXJldHVybiAxOworCQljcmVhdGVfcGdkX21hcHBpbmcoJmVmaV9tbSwgcGFkZHIsIG1kLT52aXJ0X2FkZHIsIHNpemUsIHByb3QpOworCX0KKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKLSAqIFN3aXRjaCBVRUZJIGZyb20gYW4gaWRlbnRpdHkgbWFwIHRvIGEga2VybmVsIHZpcnR1YWwgbWFwCisgKiBFbmFibGUgdGhlIFVFRkkgUnVudGltZSBTZXJ2aWNlcyBpZiBhbGwgcHJlcmVxdWlzaXRlcyBhcmUgaW4gcGxhY2UsIGkuZS4sCisgKiBub24tZWFybHkgbWFwcGluZyBvZiB0aGUgVUVGSSBzeXN0ZW0gdGFibGUgYW5kIHZpcnR1YWwgbWFwcGluZ3MgZm9yIGFsbAorICogRUZJX01FTU9SWV9SVU5USU1FIHJlZ2lvbnMuCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IGFybTY0X2VudGVyX3ZpcnR1YWxfbW9kZSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYXJtNjRfZW5hYmxlX3J1bnRpbWVfc2VydmljZXModm9pZCkKIHsKLQllZmlfbWVtb3J5X2Rlc2NfdCAqbWQ7Ci0JcGh5c19hZGRyX3QgdmlydG1hcF9waHlzOwotCXZvaWQgKnZpcnRtYXAsICp2aXJ0X21kOwotCWVmaV9zdGF0dXNfdCBzdGF0dXM7CiAJdTY0IG1hcHNpemU7Ci0JaW50IGNvdW50ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFlZmlfZW5hYmxlZChFRklfQk9PVCkpIHsKIAkJcHJfaW5mbygiRUZJIHNlcnZpY2VzIHdpbGwgbm90IGJlIGF2YWlsYWJsZS5cbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JbWFwc2l6ZSA9IG1lbW1hcC5tYXBfZW5kIC0gbWVtbWFwLm1hcDsKLQogCWlmIChlZmlfcnVudGltZV9kaXNhYmxlZCgpKSB7CiAJCXByX2luZm8oIkVGSSBydW50aW1lIHNlcnZpY2VzIHdpbGwgYmUgZGlzYWJsZWQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXByX2luZm8oIlJlbWFwcGluZyBhbmQgZW5hYmxpbmcgRUZJIHNlcnZpY2VzLlxuIik7Ci0JLyogcmVwbGFjZSBlYXJseSBtZW1tYXAgbWFwcGluZyB3aXRoIHBlcm1hbmVudCBtYXBwaW5nICovCisKKwltYXBzaXplID0gbWVtbWFwLm1hcF9lbmQgLSBtZW1tYXAubWFwOwogCW1lbW1hcC5tYXAgPSAoX19mb3JjZSB2b2lkICopaW9yZW1hcF9jYWNoZSgocGh5c19hZGRyX3QpbWVtbWFwLnBoeXNfbWFwLAogCQkJCQkJICAgbWFwc2l6ZSk7Ci0JbWVtbWFwLm1hcF9lbmQgPSBtZW1tYXAubWFwICsgbWFwc2l6ZTsKLQotCWVmaS5tZW1tYXAgPSAmbWVtbWFwOwotCi0JLyogTWFwIHRoZSBydW50aW1lIHJlZ2lvbnMgKi8KLQl2aXJ0bWFwID0ga21hbGxvYyhtYXBzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXZpcnRtYXApIHsKLQkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgRUZJIHZpcnR1YWwgbWVtbWFwXG4iKTsKKwlpZiAoIW1lbW1hcC5tYXApIHsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVtYXAgRUZJIG1lbW9yeSBtYXBcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQotCXZpcnRtYXBfcGh5cyA9IHZpcnRfdG9fcGh5cyh2aXJ0bWFwKTsKLQl2aXJ0X21kID0gdmlydG1hcDsKKwltZW1tYXAubWFwX2VuZCA9IG1lbW1hcC5tYXAgKyBtYXBzaXplOworCWVmaS5tZW1tYXAgPSAmbWVtbWFwOwogCi0JZm9yX2VhY2hfZWZpX21lbW9yeV9kZXNjKCZtZW1tYXAsIG1kKSB7Ci0JCWlmICghKG1kLT5hdHRyaWJ1dGUgJiBFRklfTUVNT1JZX1JVTlRJTUUpKQotCQkJY29udGludWU7Ci0JCWlmICghcmVtYXBfcmVnaW9uKG1kLCAmdmlydF9tZCkpCi0JCQlnb3RvIGVycl91bm1hcDsKLQkJKytjb3VudDsKLQl9Ci0KLQllZmkuc3lzdGFiID0gKF9fZm9yY2Ugdm9pZCAqKWVmaV9sb29rdXBfbWFwcGVkX2FkZHIoZWZpX3N5c3RlbV90YWJsZSk7CisJZWZpLnN5c3RhYiA9IChfX2ZvcmNlIHZvaWQgKilpb3JlbWFwX2NhY2hlKGVmaV9zeXN0ZW1fdGFibGUsCisJCQkJCQkgICBzaXplb2YoZWZpX3N5c3RlbV90YWJsZV90KSk7CiAJaWYgKCFlZmkuc3lzdGFiKSB7Ci0JCS8qCi0JCSAqIElmIHdlIGhhdmUgbm8gdmlydHVhbCBtYXBwaW5nIGZvciB0aGUgU3lzdGVtIFRhYmxlIGF0IHRoaXMKLQkJICogcG9pbnQsIHRoZSBtZW1vcnkgbWFwIGRvZXNuJ3QgY292ZXIgdGhlIHBoeXNpY2FsIG9mZnNldCB3aGVyZQotCQkgKiBpdCByZXNpZGVzLiBUaGlzIG1lYW5zIHRoZSBTeXN0ZW0gVGFibGUgd2lsbCBiZSBpbmFjY2Vzc2libGUKLQkJICogdG8gUnVudGltZSBTZXJ2aWNlcyB0aGVtc2VsdmVzIG9uY2UgdGhlIHZpcnR1YWwgbWFwcGluZyBpcwotCQkgKiBpbnN0YWxsZWQuCi0JCSAqLwotCQlwcl9lcnIoIkZhaWxlZCB0byByZW1hcCBFRkkgU3lzdGVtIFRhYmxlIC0tIGJ1Z2d5IGZpcm13YXJlP1xuIik7Ci0JCWdvdG8gZXJyX3VubWFwOworCQlwcl9lcnIoIkZhaWxlZCB0byByZW1hcCBFRkkgU3lzdGVtIFRhYmxlXG4iKTsKKwkJcmV0dXJuIC0xOwogCX0KIAlzZXRfYml0KEVGSV9TWVNURU1fVEFCTEVTLCAmZWZpLmZsYWdzKTsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljcHVfc3dpdGNoX21tKGlkbWFwX3BnX2RpciwgJmluaXRfbW0pOwotCi0JLyogQ2FsbCBTZXRWaXJ0dWFsQWRkcmVzc01hcCB3aXRoIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBtYXAgKi8KLQlydW50aW1lID0gZWZpLnN5c3RhYi0+cnVudGltZTsKLQllZmkuc2V0X3ZpcnR1YWxfYWRkcmVzc19tYXAgPSBydW50aW1lLT5zZXRfdmlydHVhbF9hZGRyZXNzX21hcDsKLQotCXN0YXR1cyA9IGVmaS5zZXRfdmlydHVhbF9hZGRyZXNzX21hcChjb3VudCAqIG1lbW1hcC5kZXNjX3NpemUsCi0JCQkJCSAgICAgbWVtbWFwLmRlc2Nfc2l6ZSwKLQkJCQkJICAgICBtZW1tYXAuZGVzY192ZXJzaW9uLAotCQkJCQkgICAgIChlZmlfbWVtb3J5X2Rlc2NfdCAqKXZpcnRtYXBfcGh5cyk7Ci0JY3B1X3NldF9yZXNlcnZlZF90dGJyMCgpOwotCWZsdXNoX3RsYl9hbGwoKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlrZnJlZSh2aXJ0bWFwKTsKLQotCWZyZWVfYm9vdF9zZXJ2aWNlcygpOwotCi0JaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgewotCQlwcl9lcnIoIkZhaWxlZCB0byBzZXQgRUZJIHZpcnR1YWwgYWRkcmVzcyBtYXAhIFslbHhdXG4iLAotCQkJc3RhdHVzKTsKKwlpZiAoIWVmaV92aXJ0bWFwX2luaXQoKSkgeworCQlwcl9lcnIoIk5vIFVFRkkgdmlydHVhbCBtYXBwaW5nIHdhcyBpbnN0YWxsZWQgLS0gcnVudGltZSBzZXJ2aWNlcyB3aWxsIG5vdCBiZSBhdmFpbGFibGVcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJLyogU2V0IHVwIHJ1bnRpbWUgc2VydmljZXMgZnVuY3Rpb24gcG9pbnRlcnMgKi8KLQlydW50aW1lID0gZWZpLnN5c3RhYi0+cnVudGltZTsKIAllZmlfbmF0aXZlX3J1bnRpbWVfc2V0dXAoKTsKIAlzZXRfYml0KEVGSV9SVU5USU1FX1NFUlZJQ0VTLCAmZWZpLmZsYWdzKTsKIAogCWVmaS5ydW50aW1lX3ZlcnNpb24gPSBlZmkuc3lzdGFiLT5oZHIucmV2aXNpb247CiAKIAlyZXR1cm4gMDsKLQotZXJyX3VubWFwOgotCS8qIHVubWFwIGFsbCBtYXBwaW5ncyB0aGF0IHN1Y2NlZWRlZDogdGhlcmUgYXJlICdjb3VudCcgb2YgdGhvc2UgKi8KLQlmb3IgKHZpcnRfbWQgPSB2aXJ0bWFwOyBjb3VudC0tOyB2aXJ0X21kICs9IG1lbW1hcC5kZXNjX3NpemUpIHsKLQkJbWQgPSB2aXJ0X21kOwotCQlpb3VubWFwKChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKW1kLT52aXJ0X2FkZHIpOwotCX0KLQlrZnJlZSh2aXJ0bWFwKTsKLQlyZXR1cm4gLTE7CiB9Ci1lYXJseV9pbml0Y2FsbChhcm02NF9lbnRlcl92aXJ0dWFsX21vZGUpOworZWFybHlfaW5pdGNhbGwoYXJtNjRfZW5hYmxlX3J1bnRpbWVfc2VydmljZXMpOwogCiBzdGF0aWMgaW50IF9faW5pdCBhcm02NF9kbWlfaW5pdCh2b2lkKQogewpAQCAtNDg0LDMgKzMzNCwyMyBAQAogCXJldHVybiAwOwogfQogY29yZV9pbml0Y2FsbChhcm02NF9kbWlfaW5pdCk7CisKK3N0YXRpYyB2b2lkIGVmaV9zZXRfcGdkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWNwdV9zd2l0Y2hfbW0obW0tPnBnZCwgbW0pOworCWZsdXNoX3RsYl9hbGwoKTsKKwlpZiAoaWNhY2hlX2lzX2Fpdml2dCgpKQorCQlfX2ZsdXNoX2ljYWNoZV9hbGwoKTsKK30KKwordm9pZCBlZmlfdmlydG1hcF9sb2FkKHZvaWQpCit7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJZWZpX3NldF9wZ2QoJmVmaV9tbSk7Cit9CisKK3ZvaWQgZWZpX3ZpcnRtYXBfdW5sb2FkKHZvaWQpCit7CisJZWZpX3NldF9wZ2QoY3VycmVudC0+YWN0aXZlX21tKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvYXJtNjQva2VybmVsL2VudHJ5LlMKaW5kZXggZmQ0ZmEzNy4uY2YyMWJiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9lbnRyeS5TCkBAIC0yNjksMTggKzI2OSwxOCBAQAogZWwxX3N5bmM6CiAJa2VybmVsX2VudHJ5IDEKIAltcnMJeDEsIGVzcl9lbDEJCQkvLyByZWFkIHRoZSBzeW5kcm9tZSByZWdpc3RlcgotCWxzcgl4MjQsIHgxLCAjRVNSX0VMMV9FQ19TSElGVAkvLyBleGNlcHRpb24gY2xhc3MKLQljbXAJeDI0LCAjRVNSX0VMMV9FQ19EQUJUX0VMMQkvLyBkYXRhIGFib3J0IGluIEVMMQorCWxzcgl4MjQsIHgxLCAjRVNSX0VMeF9FQ19TSElGVAkvLyBleGNlcHRpb24gY2xhc3MKKwljbXAJeDI0LCAjRVNSX0VMeF9FQ19EQUJUX0NVUgkvLyBkYXRhIGFib3J0IGluIEVMMQogCWIuZXEJZWwxX2RhCi0JY21wCXgyNCwgI0VTUl9FTDFfRUNfU1lTNjQJCS8vIGNvbmZpZ3VyYWJsZSB0cmFwCisJY21wCXgyNCwgI0VTUl9FTHhfRUNfU1lTNjQJCS8vIGNvbmZpZ3VyYWJsZSB0cmFwCiAJYi5lcQllbDFfdW5kZWYKLQljbXAJeDI0LCAjRVNSX0VMMV9FQ19TUF9BTElHTgkvLyBzdGFjayBhbGlnbm1lbnQgZXhjZXB0aW9uCisJY21wCXgyNCwgI0VTUl9FTHhfRUNfU1BfQUxJR04JLy8gc3RhY2sgYWxpZ25tZW50IGV4Y2VwdGlvbgogCWIuZXEJZWwxX3NwX3BjCi0JY21wCXgyNCwgI0VTUl9FTDFfRUNfUENfQUxJR04JLy8gcGMgYWxpZ25tZW50IGV4Y2VwdGlvbgorCWNtcAl4MjQsICNFU1JfRUx4X0VDX1BDX0FMSUdOCS8vIHBjIGFsaWdubWVudCBleGNlcHRpb24KIAliLmVxCWVsMV9zcF9wYwotCWNtcAl4MjQsICNFU1JfRUwxX0VDX1VOS05PV04JLy8gdW5rbm93biBleGNlcHRpb24gaW4gRUwxCisJY21wCXgyNCwgI0VTUl9FTHhfRUNfVU5LTk9XTgkvLyB1bmtub3duIGV4Y2VwdGlvbiBpbiBFTDEKIAliLmVxCWVsMV91bmRlZgotCWNtcAl4MjQsICNFU1JfRUwxX0VDX0JSRUFLUFRfRUwxCS8vIGRlYnVnIGV4Y2VwdGlvbiBpbiBFTDEKKwljbXAJeDI0LCAjRVNSX0VMeF9FQ19CUkVBS1BUX0NVUgkvLyBkZWJ1ZyBleGNlcHRpb24gaW4gRUwxCiAJYi5nZQllbDFfZGJnCiAJYgllbDFfaW52CiBlbDFfZGE6CkBAIC0zMTgsNyArMzE4LDcgQEAKIAkvKgogCSAqIERlYnVnIGV4Y2VwdGlvbiBoYW5kbGluZwogCSAqLwotCWNtcAl4MjQsICNFU1JfRUwxX0VDX0JSSzY0CQkvLyBpZiBCUks2NAorCWNtcAl4MjQsICNFU1JfRUx4X0VDX0JSSzY0CQkvLyBpZiBCUks2NAogCWNpbmMJeDI0LCB4MjQsIGVxCQkJLy8gc2V0IGJpdCAnMCcKIAl0YnoJeDI0LCAjMCwgZWwxX2ludgkJLy8gRUwxIG9ubHkKIAltcnMJeDAsIGZhcl9lbDEKQEAgLTM3NSwyNiArMzc1LDI2IEBACiBlbDBfc3luYzoKIAlrZXJuZWxfZW50cnkgMAogCW1ycwl4MjUsIGVzcl9lbDEJCQkvLyByZWFkIHRoZSBzeW5kcm9tZSByZWdpc3RlcgotCWxzcgl4MjQsIHgyNSwgI0VTUl9FTDFfRUNfU0hJRlQJLy8gZXhjZXB0aW9uIGNsYXNzCi0JY21wCXgyNCwgI0VTUl9FTDFfRUNfU1ZDNjQJCS8vIFNWQyBpbiA2NC1iaXQgc3RhdGUKKwlsc3IJeDI0LCB4MjUsICNFU1JfRUx4X0VDX1NISUZUCS8vIGV4Y2VwdGlvbiBjbGFzcworCWNtcAl4MjQsICNFU1JfRUx4X0VDX1NWQzY0CQkvLyBTVkMgaW4gNjQtYml0IHN0YXRlCiAJYi5lcQllbDBfc3ZjCi0JY21wCXgyNCwgI0VTUl9FTDFfRUNfREFCVF9FTDAJLy8gZGF0YSBhYm9ydCBpbiBFTDAKKwljbXAJeDI0LCAjRVNSX0VMeF9FQ19EQUJUX0xPVwkvLyBkYXRhIGFib3J0IGluIEVMMAogCWIuZXEJZWwwX2RhCi0JY21wCXgyNCwgI0VTUl9FTDFfRUNfSUFCVF9FTDAJLy8gaW5zdHJ1Y3Rpb24gYWJvcnQgaW4gRUwwCisJY21wCXgyNCwgI0VTUl9FTHhfRUNfSUFCVF9MT1cJLy8gaW5zdHJ1Y3Rpb24gYWJvcnQgaW4gRUwwCiAJYi5lcQllbDBfaWEKLQljbXAJeDI0LCAjRVNSX0VMMV9FQ19GUF9BU0lNRAkvLyBGUC9BU0lNRCBhY2Nlc3MKKwljbXAJeDI0LCAjRVNSX0VMeF9FQ19GUF9BU0lNRAkvLyBGUC9BU0lNRCBhY2Nlc3MKIAliLmVxCWVsMF9mcHNpbWRfYWNjCi0JY21wCXgyNCwgI0VTUl9FTDFfRUNfRlBfRVhDNjQJLy8gRlAvQVNJTUQgZXhjZXB0aW9uCisJY21wCXgyNCwgI0VTUl9FTHhfRUNfRlBfRVhDNjQJLy8gRlAvQVNJTUQgZXhjZXB0aW9uCiAJYi5lcQllbDBfZnBzaW1kX2V4YwotCWNtcAl4MjQsICNFU1JfRUwxX0VDX1NZUzY0CQkvLyBjb25maWd1cmFibGUgdHJhcAorCWNtcAl4MjQsICNFU1JfRUx4X0VDX1NZUzY0CQkvLyBjb25maWd1cmFibGUgdHJhcAogCWIuZXEJZWwwX3VuZGVmCi0JY21wCXgyNCwgI0VTUl9FTDFfRUNfU1BfQUxJR04JLy8gc3RhY2sgYWxpZ25tZW50IGV4Y2VwdGlvbgorCWNtcAl4MjQsICNFU1JfRUx4X0VDX1NQX0FMSUdOCS8vIHN0YWNrIGFsaWdubWVudCBleGNlcHRpb24KIAliLmVxCWVsMF9zcF9wYwotCWNtcAl4MjQsICNFU1JfRUwxX0VDX1BDX0FMSUdOCS8vIHBjIGFsaWdubWVudCBleGNlcHRpb24KKwljbXAJeDI0LCAjRVNSX0VMeF9FQ19QQ19BTElHTgkvLyBwYyBhbGlnbm1lbnQgZXhjZXB0aW9uCiAJYi5lcQllbDBfc3BfcGMKLQljbXAJeDI0LCAjRVNSX0VMMV9FQ19VTktOT1dOCS8vIHVua25vd24gZXhjZXB0aW9uIGluIEVMMAorCWNtcAl4MjQsICNFU1JfRUx4X0VDX1VOS05PV04JLy8gdW5rbm93biBleGNlcHRpb24gaW4gRUwwCiAJYi5lcQllbDBfdW5kZWYKLQljbXAJeDI0LCAjRVNSX0VMMV9FQ19CUkVBS1BUX0VMMAkvLyBkZWJ1ZyBleGNlcHRpb24gaW4gRUwwCisJY21wCXgyNCwgI0VTUl9FTHhfRUNfQlJFQUtQVF9MT1cJLy8gZGVidWcgZXhjZXB0aW9uIGluIEVMMAogCWIuZ2UJZWwwX2RiZwogCWIJZWwwX2ludgogCkBAIC00MDMsMzcgKzQwMywzNyBAQAogZWwwX3N5bmNfY29tcGF0OgogCWtlcm5lbF9lbnRyeSAwLCAzMgogCW1ycwl4MjUsIGVzcl9lbDEJCQkvLyByZWFkIHRoZSBzeW5kcm9tZSByZWdpc3RlcgotCWxzcgl4MjQsIHgyNSwgI0VTUl9FTDFfRUNfU0hJRlQJLy8gZXhjZXB0aW9uIGNsYXNzCi0JY21wCXgyNCwgI0VTUl9FTDFfRUNfU1ZDMzIJCS8vIFNWQyBpbiAzMi1iaXQgc3RhdGUKKwlsc3IJeDI0LCB4MjUsICNFU1JfRUx4X0VDX1NISUZUCS8vIGV4Y2VwdGlvbiBjbGFzcworCWNtcAl4MjQsICNFU1JfRUx4X0VDX1NWQzMyCQkvLyBTVkMgaW4gMzItYml0IHN0YXRlCiAJYi5lcQllbDBfc3ZjX2NvbXBhdAotCWNtcAl4MjQsICNFU1JfRUwxX0VDX0RBQlRfRUwwCS8vIGRhdGEgYWJvcnQgaW4gRUwwCisJY21wCXgyNCwgI0VTUl9FTHhfRUNfREFCVF9MT1cJLy8gZGF0YSBhYm9ydCBpbiBFTDAKIAliLmVxCWVsMF9kYQotCWNtcAl4MjQsICNFU1JfRUwxX0VDX0lBQlRfRUwwCS8vIGluc3RydWN0aW9uIGFib3J0IGluIEVMMAorCWNtcAl4MjQsICNFU1JfRUx4X0VDX0lBQlRfTE9XCS8vIGluc3RydWN0aW9uIGFib3J0IGluIEVMMAogCWIuZXEJZWwwX2lhCi0JY21wCXgyNCwgI0VTUl9FTDFfRUNfRlBfQVNJTUQJLy8gRlAvQVNJTUQgYWNjZXNzCisJY21wCXgyNCwgI0VTUl9FTHhfRUNfRlBfQVNJTUQJLy8gRlAvQVNJTUQgYWNjZXNzCiAJYi5lcQllbDBfZnBzaW1kX2FjYwotCWNtcAl4MjQsICNFU1JfRUwxX0VDX0ZQX0VYQzMyCS8vIEZQL0FTSU1EIGV4Y2VwdGlvbgorCWNtcAl4MjQsICNFU1JfRUx4X0VDX0ZQX0VYQzMyCS8vIEZQL0FTSU1EIGV4Y2VwdGlvbgogCWIuZXEJZWwwX2Zwc2ltZF9leGMKLQljbXAJeDI0LCAjRVNSX0VMMV9FQ19VTktOT1dOCS8vIHVua25vd24gZXhjZXB0aW9uIGluIEVMMAorCWNtcAl4MjQsICNFU1JfRUx4X0VDX1VOS05PV04JLy8gdW5rbm93biBleGNlcHRpb24gaW4gRUwwCiAJYi5lcQllbDBfdW5kZWYKLQljbXAJeDI0LCAjRVNSX0VMMV9FQ19DUDE1XzMyCS8vIENQMTUgTVJDL01DUiB0cmFwCisJY21wCXgyNCwgI0VTUl9FTHhfRUNfQ1AxNV8zMgkvLyBDUDE1IE1SQy9NQ1IgdHJhcAogCWIuZXEJZWwwX3VuZGVmCi0JY21wCXgyNCwgI0VTUl9FTDFfRUNfQ1AxNV82NAkvLyBDUDE1IE1SUkMvTUNSUiB0cmFwCisJY21wCXgyNCwgI0VTUl9FTHhfRUNfQ1AxNV82NAkvLyBDUDE1IE1SUkMvTUNSUiB0cmFwCiAJYi5lcQllbDBfdW5kZWYKLQljbXAJeDI0LCAjRVNSX0VMMV9FQ19DUDE0X01SCS8vIENQMTQgTVJDL01DUiB0cmFwCisJY21wCXgyNCwgI0VTUl9FTHhfRUNfQ1AxNF9NUgkvLyBDUDE0IE1SQy9NQ1IgdHJhcAogCWIuZXEJZWwwX3VuZGVmCi0JY21wCXgyNCwgI0VTUl9FTDFfRUNfQ1AxNF9MUwkvLyBDUDE0IExEQy9TVEMgdHJhcAorCWNtcAl4MjQsICNFU1JfRUx4X0VDX0NQMTRfTFMJLy8gQ1AxNCBMREMvU1RDIHRyYXAKIAliLmVxCWVsMF91bmRlZgotCWNtcAl4MjQsICNFU1JfRUwxX0VDX0NQMTRfNjQJLy8gQ1AxNCBNUlJDL01DUlIgdHJhcAorCWNtcAl4MjQsICNFU1JfRUx4X0VDX0NQMTRfNjQJLy8gQ1AxNCBNUlJDL01DUlIgdHJhcAogCWIuZXEJZWwwX3VuZGVmCi0JY21wCXgyNCwgI0VTUl9FTDFfRUNfQlJFQUtQVF9FTDAJLy8gZGVidWcgZXhjZXB0aW9uIGluIEVMMAorCWNtcAl4MjQsICNFU1JfRUx4X0VDX0JSRUFLUFRfTE9XCS8vIGRlYnVnIGV4Y2VwdGlvbiBpbiBFTDAKIAliLmdlCWVsMF9kYmcKIAliCWVsMF9pbnYKIGVsMF9zdmNfY29tcGF0OgogCS8qCiAJICogQUFyY2gzMiBzeXNjYWxsIGhhbmRsaW5nCiAJICovCi0JYWRyCXN0YmwsIGNvbXBhdF9zeXNfY2FsbF90YWJsZQkvLyBsb2FkIGNvbXBhdCBzeXNjYWxsIHRhYmxlIHBvaW50ZXIKKwlhZHJwCXN0YmwsIGNvbXBhdF9zeXNfY2FsbF90YWJsZQkvLyBsb2FkIGNvbXBhdCBzeXNjYWxsIHRhYmxlIHBvaW50ZXIKIAl1eHR3CXNjbm8sIHc3CQkJLy8gc3lzY2FsbCBudW1iZXIgaW4gdzcgKHI3KQogCW1vdiAgICAgc2NfbnIsICNfX05SX2NvbXBhdF9zeXNjYWxscwogCWIJZWwwX3N2Y19uYWtlZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc3lzMzIuUyBiL2FyY2gvYXJtNjQva2VybmVsL2VudHJ5MzIuUwpzaW1pbGFyaXR5IGluZGV4IDgwJQpyZW5hbWUgZnJvbSBhcmNoL2FybTY0L2tlcm5lbC9zeXMzMi5TCnJlbmFtZSB0byBhcmNoL2FybTY0L2tlcm5lbC9lbnRyeTMyLlMKaW5kZXggNDIzYTViMy4uOWE4ZjZhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc3lzMzIuUworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9lbnRyeTMyLlMKQEAgLTI3LDI2ICsyNywyNiBAQAogICogU3lzdGVtIGNhbGwgd3JhcHBlcnMgZm9yIHRoZSBBQXJjaDMyIGNvbXBhdGliaWxpdHkgbGF5ZXIuCiAgKi8KIAotY29tcGF0X3N5c19zaWdyZXR1cm5fd3JhcHBlcjoKK0VOVFJZKGNvbXBhdF9zeXNfc2lncmV0dXJuX3dyYXBwZXIpCiAJbW92CXgwLCBzcAogCW1vdgl4MjcsICMwCQkvLyBwcmV2ZW50IHN5c2NhbGwgcmVzdGFydCBoYW5kbGluZyAod2h5KQogCWIJY29tcGF0X3N5c19zaWdyZXR1cm4KIEVORFBST0MoY29tcGF0X3N5c19zaWdyZXR1cm5fd3JhcHBlcikKIAotY29tcGF0X3N5c19ydF9zaWdyZXR1cm5fd3JhcHBlcjoKK0VOVFJZKGNvbXBhdF9zeXNfcnRfc2lncmV0dXJuX3dyYXBwZXIpCiAJbW92CXgwLCBzcAogCW1vdgl4MjcsICMwCQkvLyBwcmV2ZW50IHN5c2NhbGwgcmVzdGFydCBoYW5kbGluZyAod2h5KQogCWIJY29tcGF0X3N5c19ydF9zaWdyZXR1cm4KIEVORFBST0MoY29tcGF0X3N5c19ydF9zaWdyZXR1cm5fd3JhcHBlcikKIAotY29tcGF0X3N5c19zdGF0ZnM2NF93cmFwcGVyOgorRU5UUlkoY29tcGF0X3N5c19zdGF0ZnM2NF93cmFwcGVyKQogCW1vdgl3MywgIzg0CiAJY21wCXcxLCAjODgKIAljc2VsCXcxLCB3MywgdzEsIGVxCiAJYgljb21wYXRfc3lzX3N0YXRmczY0CiBFTkRQUk9DKGNvbXBhdF9zeXNfc3RhdGZzNjRfd3JhcHBlcikKIAotY29tcGF0X3N5c19mc3RhdGZzNjRfd3JhcHBlcjoKK0VOVFJZKGNvbXBhdF9zeXNfZnN0YXRmczY0X3dyYXBwZXIpCiAJbW92CXczLCAjODQKIAljbXAJdzEsICM4OAogCWNzZWwJdzEsIHczLCB3MSwgZXEKQEAgLTU4LDMzICs1OCwzMyBAQAogICogaW4gcmVnaXN0ZXJzIG9yIHRoYXQgdGFrZSAzMi1iaXQgcGFyYW1ldGVycyB3aGljaCByZXF1aXJlIHNpZ24KICAqIGV4dGVuc2lvbi4KICAqLwotY29tcGF0X3N5c19wcmVhZDY0X3dyYXBwZXI6CitFTlRSWShjb21wYXRfc3lzX3ByZWFkNjRfd3JhcHBlcikKIAlyZWdzX3RvXzY0CXgzLCB4NCwgeDUKIAliCXN5c19wcmVhZDY0CiBFTkRQUk9DKGNvbXBhdF9zeXNfcHJlYWQ2NF93cmFwcGVyKQogCi1jb21wYXRfc3lzX3B3cml0ZTY0X3dyYXBwZXI6CitFTlRSWShjb21wYXRfc3lzX3B3cml0ZTY0X3dyYXBwZXIpCiAJcmVnc190b182NAl4MywgeDQsIHg1CiAJYglzeXNfcHdyaXRlNjQKIEVORFBST0MoY29tcGF0X3N5c19wd3JpdGU2NF93cmFwcGVyKQogCi1jb21wYXRfc3lzX3RydW5jYXRlNjRfd3JhcHBlcjoKK0VOVFJZKGNvbXBhdF9zeXNfdHJ1bmNhdGU2NF93cmFwcGVyKQogCXJlZ3NfdG9fNjQJeDEsIHgyLCB4MwogCWIJc3lzX3RydW5jYXRlCiBFTkRQUk9DKGNvbXBhdF9zeXNfdHJ1bmNhdGU2NF93cmFwcGVyKQogCi1jb21wYXRfc3lzX2Z0cnVuY2F0ZTY0X3dyYXBwZXI6CitFTlRSWShjb21wYXRfc3lzX2Z0cnVuY2F0ZTY0X3dyYXBwZXIpCiAJcmVnc190b182NAl4MSwgeDIsIHgzCiAJYglzeXNfZnRydW5jYXRlCiBFTkRQUk9DKGNvbXBhdF9zeXNfZnRydW5jYXRlNjRfd3JhcHBlcikKIAotY29tcGF0X3N5c19yZWFkYWhlYWRfd3JhcHBlcjoKK0VOVFJZKGNvbXBhdF9zeXNfcmVhZGFoZWFkX3dyYXBwZXIpCiAJcmVnc190b182NAl4MSwgeDIsIHgzCiAJbW92CXcyLCB3NAogCWIJc3lzX3JlYWRhaGVhZAogRU5EUFJPQyhjb21wYXRfc3lzX3JlYWRhaGVhZF93cmFwcGVyKQogCi1jb21wYXRfc3lzX2ZhZHZpc2U2NF82NF93cmFwcGVyOgorRU5UUlkoY29tcGF0X3N5c19mYWR2aXNlNjRfNjRfd3JhcHBlcikKIAltb3YJdzYsIHcxCiAJcmVnc190b182NAl4MSwgeDIsIHgzCiAJcmVnc190b182NAl4MiwgeDQsIHg1CkBAIC05MiwyNCArOTIsMTQgQEAKIAliCXN5c19mYWR2aXNlNjRfNjQKIEVORFBST0MoY29tcGF0X3N5c19mYWR2aXNlNjRfNjRfd3JhcHBlcikKIAotY29tcGF0X3N5c19zeW5jX2ZpbGVfcmFuZ2UyX3dyYXBwZXI6CitFTlRSWShjb21wYXRfc3lzX3N5bmNfZmlsZV9yYW5nZTJfd3JhcHBlcikKIAlyZWdzX3RvXzY0CXgyLCB4MiwgeDMKIAlyZWdzX3RvXzY0CXgzLCB4NCwgeDUKIAliCXN5c19zeW5jX2ZpbGVfcmFuZ2UyCiBFTkRQUk9DKGNvbXBhdF9zeXNfc3luY19maWxlX3JhbmdlMl93cmFwcGVyKQogCi1jb21wYXRfc3lzX2ZhbGxvY2F0ZV93cmFwcGVyOgorRU5UUlkoY29tcGF0X3N5c19mYWxsb2NhdGVfd3JhcHBlcikKIAlyZWdzX3RvXzY0CXgyLCB4MiwgeDMKIAlyZWdzX3RvXzY0CXgzLCB4NCwgeDUKIAliCXN5c19mYWxsb2NhdGUKIEVORFBST0MoY29tcGF0X3N5c19mYWxsb2NhdGVfd3JhcHBlcikKLQotI3VuZGVmIF9fU1lTQ0FMTAotI2RlZmluZSBfX1NZU0NBTEwoeCwgeSkJCS5xdWFkCXkJLy8geAotCi0vKgotICogVGhlIHN5c3RlbSBjYWxscyB0YWJsZSBtdXN0IGJlIDRLQiBhbGlnbmVkLgotICovCi0JLmFsaWduCTEyCi1FTlRSWShjb21wYXRfc3lzX2NhbGxfdGFibGUpCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZDMyLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9od19icmVha3BvaW50LmMgYi9hcmNoL2FybTY0L2tlcm5lbC9od19icmVha3BvaW50LmMKaW5kZXggZGYxY2YxNS4uOThiYmUwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2h3X2JyZWFrcG9pbnQuYwpAQCAtODk0LDcgKzg5NCw3IEBACiAJLm5vdGlmaWVyX2NhbGwgPSBod19icmVha3BvaW50X3Jlc2V0X25vdGlmeSwKIH07CiAKLSNpZmRlZiBDT05GSUdfQVJNNjRfQ1BVX1NVU1BFTkQKKyNpZmRlZiBDT05GSUdfQ1BVX1BNCiBleHRlcm4gdm9pZCBjcHVfc3VzcGVuZF9zZXRfZGJnX3Jlc3RvcmVyKHZvaWQgKCpod19icF9yZXN0b3JlKSh2b2lkICopKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3N1c3BlbmRfc2V0X2RiZ19yZXN0b3Jlcih2b2lkICgqaHdfYnBfcmVzdG9yZSkodm9pZCAqKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2luc24uYyBiL2FyY2gvYXJtNjQva2VybmVsL2luc24uYwppbmRleCA3ZTkzMjdhLi4yN2Q0ODY0IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9pbnNuLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvaW5zbi5jCkBAIC0xNywxNCArMTcsMTkgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogICovCiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9kZWJ1Zy1tb25pdG9ycy5oPgorI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KICNpbmNsdWRlIDxhc20vaW5zbi5oPgogCiAjZGVmaW5lIEFBUkNINjRfSU5TTl9TRl9CSVQJQklUKDMxKQpAQCAtNzIsNiArNzcsMjkgQEAKIAl9CiB9CiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGF0Y2hfbG9jayk7CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyAqcGF0Y2hfbWFwKHZvaWQgKmFkZHIsIGludCBmaXhtYXApCit7CisJdW5zaWduZWQgbG9uZyB1aW50YWRkciA9ICh1aW50cHRyX3QpIGFkZHI7CisJYm9vbCBtb2R1bGUgPSAhY29yZV9rZXJuZWxfdGV4dCh1aW50YWRkcik7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlpZiAobW9kdWxlICYmIElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX1NFVF9NT0RVTEVfUk9OWCkpCisJCXBhZ2UgPSB2bWFsbG9jX3RvX3BhZ2UoYWRkcik7CisJZWxzZQorCQlwYWdlID0gdmlydF90b19wYWdlKGFkZHIpOworCisJQlVHX09OKCFwYWdlKTsKKwlzZXRfZml4bWFwKGZpeG1hcCwgcGFnZV90b19waHlzKHBhZ2UpKTsKKworCXJldHVybiAodm9pZCAqKSAoX19maXhfdG9fdmlydChmaXhtYXApICsgKHVpbnRhZGRyICYgflBBR0VfTUFTSykpOworfQorCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgcGF0Y2hfdW5tYXAoaW50IGZpeG1hcCkKK3sKKwljbGVhcl9maXhtYXAoZml4bWFwKTsKK30KIC8qCiAgKiBJbiBBUk12OC1BLCBBNjQgaW5zdHJ1Y3Rpb25zIGhhdmUgYSBmaXhlZCBsZW5ndGggb2YgMzIgYml0cyBhbmQgYXJlIGFsd2F5cwogICogbGl0dGxlLWVuZGlhbi4KQEAgLTg4LDEwICsxMTYsMjcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IF9fa3Byb2JlcyBfX2FhcmNoNjRfaW5zbl93cml0ZSh2b2lkICphZGRyLCB1MzIgaW5zbikKK3sKKwl2b2lkICp3YWRkciA9IGFkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwYXRjaF9sb2NrLCBmbGFncyk7CisJd2FkZHIgPSBwYXRjaF9tYXAoYWRkciwgRklYX1RFWFRfUE9LRTApOworCisJcmV0ID0gcHJvYmVfa2VybmVsX3dyaXRlKHdhZGRyLCAmaW5zbiwgQUFSQ0g2NF9JTlNOX1NJWkUpOworCisJcGF0Y2hfdW5tYXAoRklYX1RFWFRfUE9LRTApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBhdGNoX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKIGludCBfX2twcm9iZXMgYWFyY2g2NF9pbnNuX3dyaXRlKHZvaWQgKmFkZHIsIHUzMiBpbnNuKQogewogCWluc24gPSBjcHVfdG9fbGUzMihpbnNuKTsKLQlyZXR1cm4gcHJvYmVfa2VybmVsX3dyaXRlKGFkZHIsICZpbnNuLCBBQVJDSDY0X0lOU05fU0laRSk7CisJcmV0dXJuIF9fYWFyY2g2NF9pbnNuX3dyaXRlKGFkZHIsIGluc24pOwogfQogCiBzdGF0aWMgYm9vbCBfX2twcm9iZXMgX19hYXJjaDY0X2luc25faG90cGF0Y2hfc2FmZSh1MzIgaW5zbikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3BjaS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvcGNpLmMKaW5kZXggY2U1ODM2Yy4uNmY5M2MyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvcGNpLmMKQEAgLTQ2LDI1ICs0NiwzIEBACiAKIAlyZXR1cm4gMDsKIH0KLQotCi0jaWZkZWYgQ09ORklHX1BDSV9ET01BSU5TX0dFTkVSSUMKLXN0YXRpYyBib29sIGR0X2RvbWFpbl9mb3VuZCA9IGZhbHNlOwotCi12b2lkIHBjaV9idXNfYXNzaWduX2RvbWFpbl9ucihzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQpCi17Ci0JaW50IGRvbWFpbiA9IG9mX2dldF9wY2lfZG9tYWluX25yKHBhcmVudC0+b2Zfbm9kZSk7Ci0KLQlpZiAoZG9tYWluID49IDApIHsKLQkJZHRfZG9tYWluX2ZvdW5kID0gdHJ1ZTsKLQl9IGVsc2UgaWYgKGR0X2RvbWFpbl9mb3VuZCA9PSB0cnVlKSB7Ci0JCWRldl9lcnIocGFyZW50LCAiTm9kZSAlcyBpcyBtaXNzaW5nIFwibGludXgscGNpLWRvbWFpblwiIHByb3BlcnR5IGluIERUXG4iLAotCQkJcGFyZW50LT5vZl9ub2RlLT5mdWxsX25hbWUpOwotCQlyZXR1cm47Ci0JfSBlbHNlIHsKLQkJZG9tYWluID0gcGNpX2dldF9uZXdfZG9tYWluX25yKCk7Ci0JfQotCi0JYnVzLT5kb21haW5fbnIgPSBkb21haW47Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3BzY2kuYyBiL2FyY2gvYXJtNjQva2VybmVsL3BzY2kuYwppbmRleCBmMWRiY2E3Li4zNDI1ZjMxIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9wc2NpLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvcHNjaS5jCkBAIC01NDAsOCArNTQwLDYgQEAKIAkubmFtZQkJPSAicHNjaSIsCiAjaWZkZWYgQ09ORklHX0NQVV9JRExFCiAJLmNwdV9pbml0X2lkbGUJPSBjcHVfcHNjaV9jcHVfaW5pdF9pZGxlLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSTTY0X0NQVV9TVVNQRU5ECiAJLmNwdV9zdXNwZW5kCT0gY3B1X3BzY2lfY3B1X3N1c3BlbmQsCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU01QCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc2V0dXAuYwppbmRleCAyMGZlMjkzLi5lODQyMGY2IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3NldHVwLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2lvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZmR0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9lZmkuaD4KQEAgLTMyMiwyNSArMzIzLDYgQEAKIAlkdW1wX3N0YWNrX3NldF9hcmNoX2Rlc2MoIiVzIChEVCkiLCBvZl9mbGF0X2R0X2dldF9tYWNoaW5lX25hbWUoKSk7CiB9CiAKLS8qCi0gKiBMaW1pdCB0aGUgbWVtb3J5IHNpemUgdGhhdCB3YXMgc3BlY2lmaWVkIHZpYSBGRFQuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X21lbShjaGFyICpwKQotewotCXBoeXNfYWRkcl90IGxpbWl0OwotCi0JaWYgKCFwKQotCQlyZXR1cm4gMTsKLQotCWxpbWl0ID0gbWVtcGFyc2UocCwgJnApICYgUEFHRV9NQVNLOwotCXByX25vdGljZSgiTWVtb3J5IGxpbWl0ZWQgdG8gJWxsZE1CXG4iLCBsaW1pdCA+PiAyMCk7Ci0KLQltZW1ibG9ja19lbmZvcmNlX21lbW9yeV9saW1pdChsaW1pdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJtZW0iLCBlYXJseV9tZW0pOwotCiBzdGF0aWMgdm9pZCBfX2luaXQgcmVxdWVzdF9zdGFuZGFyZF9yZXNvdXJjZXModm9pZCkKIHsKIAlzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZWdpb247CkBAIC00MDEsNyArMzgzLDYgQEAKIAlwYWdpbmdfaW5pdCgpOwogCXJlcXVlc3Rfc3RhbmRhcmRfcmVzb3VyY2VzKCk7CiAKLQllZmlfaWRtYXBfaW5pdCgpOwogCWVhcmx5X2lvcmVtYXBfcmVzZXQoKTsKIAogCXVuZmxhdHRlbl9kZXZpY2VfdHJlZSgpOwpAQCAtNDI1LDYgKzQwNiw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFybTY0X2RldmljZV9pbml0KHZvaWQpCiB7CisJb2ZfaW9tbXVfaW5pdCgpOwogCW9mX3BsYXRmb3JtX3BvcHVsYXRlKE5VTEwsIG9mX2RlZmF1bHRfYnVzX21hdGNoX3RhYmxlLCBOVUxMLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbDMyLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zaWduYWwzMi5jCmluZGV4IDVhMWJhNmUuLmUyOTlkZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3NpZ25hbDMyLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc2lnbmFsMzIuYwpAQCAtNDQwLDcgKzQ0MCw3IEBACiB7CiAJY29tcGF0X3Vsb25nX3QgaGFuZGxlciA9IHB0cl90b19jb21wYXQoa2EtPnNhLnNhX2hhbmRsZXIpOwogCWNvbXBhdF91bG9uZ190IHJldGNvZGU7Ci0JY29tcGF0X3Vsb25nX3Qgc3BzciA9IHJlZ3MtPnBzdGF0ZSAmIH5QU1JfZjsKKwljb21wYXRfdWxvbmdfdCBzcHNyID0gcmVncy0+cHN0YXRlICYgfihQU1JfZiB8IENPTVBBVF9QU1JfRV9CSVQpOwogCWludCB0aHVtYjsKIAogCS8qIENoZWNrIGlmIHRoZSBoYW5kbGVyIGlzIHdyaXR0ZW4gZm9yIEFSTSBvciBUaHVtYiAqLwpAQCAtNDU0LDYgKzQ1NCw5IEBACiAJLyogVGhlIElUIHN0YXRlIG11c3QgYmUgY2xlYXJlZCBmb3IgYm90aCBBUk0gYW5kIFRodW1iLTIgKi8KIAlzcHNyICY9IH5DT01QQVRfUFNSX0lUX01BU0s7CiAKKwkvKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBlbmRpYW5uZXNzICovCisJc3BzciB8PSBDT01QQVRfUFNSX0VORFNUQVRFOworCiAJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RPUkVSKSB7CiAJCXJldGNvZGUgPSBwdHJfdG9fY29tcGF0KGthLT5zYS5zYV9yZXN0b3Jlcik7CiAJfSBlbHNlIHsKQEAgLTUwMSw3ICs1MDQsNyBAQAogCiAJX19wdXRfdXNlcl9lcnJvcigoY29tcGF0X3Vsb25nX3QpMCwgJnNmLT51Yy51Y19tY29udGV4dC50cmFwX25vLCBlcnIpOwogCS8qIHNldCB0aGUgY29tcGF0IEZTUiBXblIgKi8KLQlfX3B1dF91c2VyX2Vycm9yKCEhKGN1cnJlbnQtPnRocmVhZC5mYXVsdF9jb2RlICYgRVNSX0VMMV9XUklURSkgPDwKKwlfX3B1dF91c2VyX2Vycm9yKCEhKGN1cnJlbnQtPnRocmVhZC5mYXVsdF9jb2RlICYgRVNSX0VMeF9XTlIpIDw8CiAJCQkgRlNSX1dSSVRFX1NISUZULCAmc2YtPnVjLnVjX21jb250ZXh0LmVycm9yX2NvZGUsIGVycik7CiAJX19wdXRfdXNlcl9lcnJvcihjdXJyZW50LT50aHJlYWQuZmF1bHRfYWRkcmVzcywgJnNmLT51Yy51Y19tY29udGV4dC5mYXVsdF9hZGRyZXNzLCBlcnIpOwogCV9fcHV0X3VzZXJfZXJyb3Ioc2V0LT5zaWdbMF0sICZzZi0+dWMudWNfbWNvbnRleHQub2xkbWFzaywgZXJyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3NtcC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc21wLmMKaW5kZXggN2FlNmVlMC4uMzI4YjhjZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvc21wLmMKQEAgLTY1LDcgKzY1LDYgQEAKIGVudW0gaXBpX21zZ190eXBlIHsKIAlJUElfUkVTQ0hFRFVMRSwKIAlJUElfQ0FMTF9GVU5DLAotCUlQSV9DQUxMX0ZVTkNfU0lOR0xFLAogCUlQSV9DUFVfU1RPUCwKIAlJUElfVElNRVIsCiAJSVBJX0lSUV9XT1JLLApAQCAtNDgzLDcgKzQ4Miw2IEBACiAjZGVmaW5lIFMoeCxzKQlbeF0gPSBzCiAJUyhJUElfUkVTQ0hFRFVMRSwgIlJlc2NoZWR1bGluZyBpbnRlcnJ1cHRzIiksCiAJUyhJUElfQ0FMTF9GVU5DLCAiRnVuY3Rpb24gY2FsbCBpbnRlcnJ1cHRzIiksCi0JUyhJUElfQ0FMTF9GVU5DX1NJTkdMRSwgIlNpbmdsZSBmdW5jdGlvbiBjYWxsIGludGVycnVwdHMiKSwKIAlTKElQSV9DUFVfU1RPUCwgIkNQVSBzdG9wIGludGVycnVwdHMiKSwKIAlTKElQSV9USU1FUiwgIlRpbWVyIGJyb2FkY2FzdCBpbnRlcnJ1cHRzIiksCiAJUyhJUElfSVJRX1dPUkssICJJUlEgd29yayBpbnRlcnJ1cHRzIiksCkBAIC01MjcsNyArNTI1LDcgQEAKIAogdm9pZCBhcmNoX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGludCBjcHUpCiB7Ci0Jc21wX2Nyb3NzX2NhbGwoY3B1bWFza19vZihjcHUpLCBJUElfQ0FMTF9GVU5DX1NJTkdMRSk7CisJc21wX2Nyb3NzX2NhbGwoY3B1bWFza19vZihjcHUpLCBJUElfQ0FMTF9GVU5DKTsKIH0KIAogI2lmZGVmIENPTkZJR19JUlFfV09SSwpAQCAtNTg1LDEyICs1ODMsNiBAQAogCQlpcnFfZXhpdCgpOwogCQlicmVhazsKIAotCWNhc2UgSVBJX0NBTExfRlVOQ19TSU5HTEU6Ci0JCWlycV9lbnRlcigpOwotCQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQoKTsKLQkJaXJxX2V4aXQoKTsKLQkJYnJlYWs7Ci0KIAljYXNlIElQSV9DUFVfU1RPUDoKIAkJaXJxX2VudGVyKCk7CiAJCWlwaV9jcHVfc3RvcChjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc3VzcGVuZC5jIGIvYXJjaC9hcm02NC9rZXJuZWwvc3VzcGVuZC5jCmluZGV4IDJkNmI2MDYuLmQ3ZGFmNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL3N1c3BlbmQuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zdXNwZW5kLmMKQEAgLTEsNyArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL2NwdV9vcHMuaD4KICNpbmNsdWRlIDxhc20vZGVidWctbW9uaXRvcnMuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KQEAgLTUxLDI2ICs1MCw2IEBACiAJaHdfYnJlYWtwb2ludF9yZXN0b3JlID0gaHdfYnBfcmVzdG9yZTsKIH0KIAotLyoqCi0gKiBjcHVfc3VzcGVuZCgpIC0gZnVuY3Rpb24gdG8gZW50ZXIgYSBsb3ctcG93ZXIgc3RhdGUKLSAqIEBhcmc6IGFyZ3VtZW50IHRvIHBhc3MgdG8gQ1BVIHN1c3BlbmQgb3BlcmF0aW9ucwotICoKLSAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtRU9QTk9UU1VQUCBpZiBDUFUgc3VzcGVuZCBob29rIG5vdCBpbml0aWFsaXplZCwgQ1BVCi0gKiBvcGVyYXRpb25zIGJhY2stZW5kIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgotICovCi1pbnQgY3B1X3N1c3BlbmQodW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQotCS8qCi0JICogSWYgY3B1X29wcyBoYXZlIG5vdCBiZWVuIHJlZ2lzdGVyZWQgb3Igc3VzcGVuZAotCSAqIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZCwgY3B1X3N1c3BlbmQgY2FsbCBmYWlscyBlYXJseS4KLQkgKi8KLQlpZiAoIWNwdV9vcHNbY3B1XSB8fCAhY3B1X29wc1tjcHVdLT5jcHVfc3VzcGVuZCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCXJldHVybiBjcHVfb3BzW2NwdV0tPmNwdV9zdXNwZW5kKGFyZyk7Ci19Ci0KIC8qCiAgKiBfX2NwdV9zdXNwZW5kCiAgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvc3lzLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zeXMuYwppbmRleCAzZmE5OGZmLi43NTE1MWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9zeXMuYworKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zeXMuYwpAQCAtMzksMTAgKzM5LDkgQEAKIC8qCiAgKiBXcmFwcGVycyB0byBwYXNzIHRoZSBwdF9yZWdzIGFyZ3VtZW50LgogICovCithc21saW5rYWdlIGxvbmcgc3lzX3J0X3NpZ3JldHVybl93cmFwcGVyKHZvaWQpOwogI2RlZmluZSBzeXNfcnRfc2lncmV0dXJuCXN5c19ydF9zaWdyZXR1cm5fd3JhcHBlcgogCi0jaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+Ci0KICN1bmRlZiBfX1NZU0NBTEwKICNkZWZpbmUgX19TWVNDQUxMKG5yLCBzeW0pCVtucl0gPSBzeW0sCiAKQEAgLTUwLDcgKzQ5LDcgQEAKICAqIFRoZSBzeXNfY2FsbF90YWJsZSBhcnJheSBtdXN0IGJlIDRLIGFsaWduZWQgdG8gYmUgYWNjZXNzaWJsZSBmcm9tCiAgKiBrZXJuZWwvZW50cnkuUy4KICAqLwotdm9pZCAqc3lzX2NhbGxfdGFibGVbX19OUl9zeXNjYWxsc10gX19hbGlnbmVkKDQwOTYpID0gewordm9pZCAqIGNvbnN0IHN5c19jYWxsX3RhYmxlW19fTlJfc3lzY2FsbHNdIF9fYWxpZ25lZCg0MDk2KSA9IHsKIAlbMCAuLi4gX19OUl9zeXNjYWxscyAtIDFdID0gc3lzX25pX3N5c2NhbGwsCiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL3N5czMyLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9zeXMzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNWFiM2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybTY0L2tlcm5lbC9zeXMzMi5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBhcmNoL2FybTY0L2tlcm5lbC9zeXMzMi5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFSTSBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmUodm9pZCk7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwKHZvaWQpOy8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisvKgorICogTmVlZGVkIHRvIGF2b2lkIGNvbmZsaWN0aW5nIF9fTlJfKiBtYWNyb3MgYmV0d2VlbiB1YXBpL2FzbS91bmlzdGQuaCBhbmQKKyAqIGFzbS91bmlzdGQzMi5oLgorICovCisjZGVmaW5lIF9fQ09NUEFUX1NZU0NBTExfTlIKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KKworYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfc2lncmV0dXJuX3dyYXBwZXIodm9pZCk7Cithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19ydF9zaWdyZXR1cm5fd3JhcHBlcih2b2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3N0YXRmczY0X3dyYXBwZXIodm9pZCk7Cithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19mc3RhdGZzNjRfd3JhcHBlcih2b2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3ByZWFkNjRfd3JhcHBlcih2b2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3B3cml0ZTY0X3dyYXBwZXIodm9pZCk7Cithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c190cnVuY2F0ZTY0X3dyYXBwZXIodm9pZCk7Cithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19mdHJ1bmNhdGU2NF93cmFwcGVyKHZvaWQpOworYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfcmVhZGFoZWFkX3dyYXBwZXIodm9pZCk7Cithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19mYWR2aXNlNjRfNjRfd3JhcHBlcih2b2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3N5bmNfZmlsZV9yYW5nZTJfd3JhcHBlcih2b2lkKTsKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX2ZhbGxvY2F0ZV93cmFwcGVyKHZvaWQpOworCisjdW5kZWYgX19TWVNDQUxMCisjZGVmaW5lIF9fU1lTQ0FMTChuciwgc3ltKQlbbnJdID0gc3ltLAorCisvKgorICogVGhlIHN5c19jYWxsX3RhYmxlIGFycmF5IG11c3QgYmUgNEsgYWxpZ25lZCB0byBiZSBhY2Nlc3NpYmxlIGZyb20KKyAqIGtlcm5lbC9lbnRyeS5TLgorICovCit2b2lkICogY29uc3QgY29tcGF0X3N5c19jYWxsX3RhYmxlW19fTlJfY29tcGF0X3N5c2NhbGxzXSBfX2FsaWduZWQoNDA5NikgPSB7CisJWzAgLi4uIF9fTlJfY29tcGF0X3N5c2NhbGxzIC0gMV0gPSBzeXNfbmlfc3lzY2FsbCwKKyNpbmNsdWRlIDxhc20vdW5pc3RkMzIuaD4KK307CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm02NC9rZXJuZWwvdHJhcHMuYwppbmRleCAwYTgwMWUzLi4xZWYyOTQwIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3RyYXBzLmMKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vZGVidWctbW9uaXRvcnMuaD4KKyNpbmNsdWRlIDxhc20vZXNyLmg+CiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vZXhjZXB0aW9uLmg+CkBAIC0zNzMsNiArMzc0LDUxIEBACiAJcmV0dXJuIHN5c19uaV9zeXNjYWxsKCk7CiB9CiAKK3N0YXRpYyBjb25zdCBjaGFyICplc3JfY2xhc3Nfc3RyW10gPSB7CisJWzAgLi4uIEVTUl9FTHhfRUNfTUFYXQkJPSAiVU5SRUNPR05JWkVEIEVDIiwKKwlbRVNSX0VMeF9FQ19VTktOT1dOXQkJPSAiVW5rbm93bi9VbmNhdGVnb3JpemVkIiwKKwlbRVNSX0VMeF9FQ19XRnhdCQk9ICJXRkkvV0ZFIiwKKwlbRVNSX0VMeF9FQ19DUDE1XzMyXQkJPSAiQ1AxNSBNQ1IvTVJDIiwKKwlbRVNSX0VMeF9FQ19DUDE1XzY0XQkJPSAiQ1AxNSBNQ1JSL01SUkMiLAorCVtFU1JfRUx4X0VDX0NQMTRfTVJdCQk9ICJDUDE0IE1DUi9NUkMiLAorCVtFU1JfRUx4X0VDX0NQMTRfTFNdCQk9ICJDUDE0IExEQy9TVEMiLAorCVtFU1JfRUx4X0VDX0ZQX0FTSU1EXQkJPSAiQVNJTUQiLAorCVtFU1JfRUx4X0VDX0NQMTBfSURdCQk9ICJDUDEwIE1SQy9WTVJTIiwKKwlbRVNSX0VMeF9FQ19DUDE0XzY0XQkJPSAiQ1AxNCBNQ1JSL01SUkMiLAorCVtFU1JfRUx4X0VDX0lMTF0JCT0gIlBTVEFURS5JTCIsCisJW0VTUl9FTHhfRUNfU1ZDMzJdCQk9ICJTVkMgKEFBcmNoMzIpIiwKKwlbRVNSX0VMeF9FQ19IVkMzMl0JCT0gIkhWQyAoQUFyY2gzMikiLAorCVtFU1JfRUx4X0VDX1NNQzMyXQkJPSAiU01DIChBQXJjaDMyKSIsCisJW0VTUl9FTHhfRUNfU1ZDNjRdCQk9ICJTVkMgKEFBcmNoNjQpIiwKKwlbRVNSX0VMeF9FQ19IVkM2NF0JCT0gIkhWQyAoQUFyY2g2NCkiLAorCVtFU1JfRUx4X0VDX1NNQzY0XQkJPSAiU01DIChBQXJjaDY0KSIsCisJW0VTUl9FTHhfRUNfU1lTNjRdCQk9ICJNU1IvTVJTIChBQXJjaDY0KSIsCisJW0VTUl9FTHhfRUNfSU1QX0RFRl0JCT0gIkVMMyBJTVAgREVGIiwKKwlbRVNSX0VMeF9FQ19JQUJUX0xPV10JCT0gIklBQlQgKGxvd2VyIEVMKSIsCisJW0VTUl9FTHhfRUNfSUFCVF9DVVJdCQk9ICJJQUJUIChjdXJyZW50IEVMKSIsCisJW0VTUl9FTHhfRUNfUENfQUxJR05dCQk9ICJQQyBBbGlnbm1lbnQiLAorCVtFU1JfRUx4X0VDX0RBQlRfTE9XXQkJPSAiREFCVCAobG93ZXIgRUwpIiwKKwlbRVNSX0VMeF9FQ19EQUJUX0NVUl0JCT0gIkRBQlQgKGN1cnJlbnQgRUwpIiwKKwlbRVNSX0VMeF9FQ19TUF9BTElHTl0JCT0gIlNQIEFsaWdubWVudCIsCisJW0VTUl9FTHhfRUNfRlBfRVhDMzJdCQk9ICJGUCAoQUFyY2gzMikiLAorCVtFU1JfRUx4X0VDX0ZQX0VYQzY0XQkJPSAiRlAgKEFBcmNoNjQpIiwKKwlbRVNSX0VMeF9FQ19TRVJST1JdCQk9ICJTRXJyb3IiLAorCVtFU1JfRUx4X0VDX0JSRUFLUFRfTE9XXQk9ICJCcmVha3BvaW50IChsb3dlciBFTCkiLAorCVtFU1JfRUx4X0VDX0JSRUFLUFRfQ1VSXQk9ICJCcmVha3BvaW50IChjdXJyZW50IEVMKSIsCisJW0VTUl9FTHhfRUNfU09GVFNUUF9MT1ddCT0gIlNvZnR3YXJlIFN0ZXAgKGxvd2VyIEVMKSIsCisJW0VTUl9FTHhfRUNfU09GVFNUUF9DVVJdCT0gIlNvZnR3YXJlIFN0ZXAgKGN1cnJlbnQgRUwpIiwKKwlbRVNSX0VMeF9FQ19XQVRDSFBUX0xPV10JPSAiV2F0Y2hwb2ludCAobG93ZXIgRUwpIiwKKwlbRVNSX0VMeF9FQ19XQVRDSFBUX0NVUl0JPSAiV2F0Y2hwb2ludCAoY3VycmVudCBFTCkiLAorCVtFU1JfRUx4X0VDX0JLUFQzMl0JCT0gIkJLUFQgKEFBcmNoMzIpIiwKKwlbRVNSX0VMeF9FQ19WRUNUT1IzMl0JCT0gIlZlY3RvciBjYXRjaCAoQUFyY2gzMikiLAorCVtFU1JfRUx4X0VDX0JSSzY0XQkJPSAiQlJLIChBQXJjaDY0KSIsCit9OworCitjb25zdCBjaGFyICplc3JfZ2V0X2NsYXNzX3N0cmluZyh1MzIgZXNyKQoreworCXJldHVybiBlc3JfY2xhc3Nfc3RyW2VzciA+PiBFU1JfRUx4X0VDX1NISUZUXTsKK30KKwogLyoKICAqIGJhZF9tb2RlIGhhbmRsZXMgdGhlIGltcG9zc2libGUgY2FzZSBpbiB0aGUgZXhjZXB0aW9uIHZlY3Rvci4KICAqLwpAQCAtMzgyLDggKzQyOCw4IEBACiAJdm9pZCBfX3VzZXIgKnBjID0gKHZvaWQgX191c2VyICopaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKTsKIAljb25zb2xlX3ZlcmJvc2UoKTsKIAotCXByX2NyaXQoIkJhZCBtb2RlIGluICVzIGhhbmRsZXIgZGV0ZWN0ZWQsIGNvZGUgMHglMDh4XG4iLAotCQloYW5kbGVyW3JlYXNvbl0sIGVzcik7CisJcHJfY3JpdCgiQmFkIG1vZGUgaW4gJXMgaGFuZGxlciBkZXRlY3RlZCwgY29kZSAweCUwOHggLS0gJXNcbiIsCisJCWhhbmRsZXJbcmVhc29uXSwgZXNyLCBlc3JfZ2V0X2NsYXNzX3N0cmluZyhlc3IpKTsKIAlfX3Nob3dfcmVncyhyZWdzKTsKIAogCWluZm8uc2lfc2lnbm8gPSBTSUdJTEw7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9hcm02NC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA5OTY1ZWM4Li41ZDlkMmRjIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvYXJtNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KIAogI2luY2x1ZGUgImltYWdlLmgiCiAKQEAgLTQ5LDYgKzUwLDE0IEBACiAjZGVmaW5lIFBFQ09GRl9FREFUQV9QQURESU5HCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19ERUJVR19BTElHTl9ST0RBVEEKKyNkZWZpbmUgQUxJR05fREVCVUdfUk8JCQkuID0gQUxJR04oMTw8U0VDVElPTl9TSElGVCk7CisjZGVmaW5lIEFMSUdOX0RFQlVHX1JPX01JTihtaW4pCQlBTElHTl9ERUJVR19STworI2Vsc2UKKyNkZWZpbmUgQUxJR05fREVCVUdfUk8KKyNkZWZpbmUgQUxJR05fREVCVUdfUk9fTUlOKG1pbikJCS4gPSBBTElHTihtaW4pOworI2VuZGlmCisKIFNFQ1RJT05TCiB7CiAJLyoKQEAgLTcxLDYgKzgwLDcgQEAKIAkJX3RleHQgPSAuOwogCQlIRUFEX1RFWFQKIAl9CisJQUxJR05fREVCVUdfUk8KIAkudGV4dCA6IHsJCQkvKiBSZWFsIHRleHQgc2VnbWVudAkJKi8KIAkJX3N0ZXh0ID0gLjsJCS8qIFRleHQgYW5kIHJlYWQtb25seSBkYXRhCSovCiAJCQlfX2V4Y2VwdGlvbl90ZXh0X3N0YXJ0ID0gLjsKQEAgLTg3LDE5ICs5NywyMiBAQAogCQkqKC5nb3QpCQkJLyogR2xvYmFsIG9mZnNldCB0YWJsZQkJKi8KIAl9CiAKKwlBTElHTl9ERUJVR19STwogCVJPX0RBVEEoUEFHRV9TSVpFKQogCUVYQ0VQVElPTl9UQUJMRSg4KQogCU5PVEVTCisJQUxJR05fREVCVUdfUk8KIAlfZXRleHQgPSAuOwkJCS8qIEVuZCBvZiB0ZXh0IGFuZCByb2RhdGEgc2VjdGlvbiAqLwogCi0JLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJQUxJR05fREVCVUdfUk9fTUlOKFBBR0VfU0laRSkKIAlfX2luaXRfYmVnaW4gPSAuOwogCiAJSU5JVF9URVhUX1NFQ1RJT04oOCkKIAkuZXhpdC50ZXh0IDogewogCQlBUk1fRVhJVF9LRUVQKEVYSVRfVEVYVCkKIAl9Ci0JLiA9IEFMSUdOKDE2KTsKKworCUFMSUdOX0RFQlVHX1JPX01JTigxNikKIAkuaW5pdC5kYXRhIDogewogCQlJTklUX0RBVEEKIAkJSU5JVF9TRVRVUCgxNikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL0tjb25maWcgYi9hcmNoL2FybTY0L2t2bS9LY29uZmlnCmluZGV4IDhiYTg1ZTkuLmIzMzQwODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL0tjb25maWcKKysrIGIvYXJjaC9hcm02NC9rdm0vS2NvbmZpZwpAQCAtMjYsNiArMjYsNyBAQAogCXNlbGVjdCBLVk1fQVJNX0hPU1QKIAlzZWxlY3QgS1ZNX0FSTV9WR0lDCiAJc2VsZWN0IEtWTV9BUk1fVElNRVIKKwlzZWxlY3QgU1JDVQogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgaG9zdGluZyB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcy4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vZW11bGF0ZS5jIGIvYXJjaC9hcm02NC9rdm0vZW11bGF0ZS5jCmluZGV4IDEyNDQxOGQuLmY4N2Q4ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva3ZtL2VtdWxhdGUuYworKysgYi9hcmNoL2FybTY0L2t2bS9lbXVsYXRlLmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxhc20vZXNyLmg+CiAjaW5jbHVkZSA8YXNtL2t2bV9lbXVsYXRlLmg+CiAKIC8qCkBAIC01NSw4ICs1Niw4IEBACiB7CiAJdTMyIGVzciA9IGt2bV92Y3B1X2dldF9oc3IodmNwdSk7CiAKLQlpZiAoZXNyICYgRVNSX0VMMl9DVikKLQkJcmV0dXJuIChlc3IgJiBFU1JfRUwyX0NPTkQpID4+IEVTUl9FTDJfQ09ORF9TSElGVDsKKwlpZiAoZXNyICYgRVNSX0VMeF9DVikKKwkJcmV0dXJuIChlc3IgJiBFU1JfRUx4X0NPTkRfTUFTSykgPj4gRVNSX0VMeF9DT05EX1NISUZUOwogCiAJcmV0dXJuIC0xOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYyBiL2FyY2gvYXJtNjQva3ZtL2hhbmRsZV9leGl0LmMKaW5kZXggMzRiOGJkMC4uMjliMTg0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vaGFuZGxlX2V4aXQuYworKysgYi9hcmNoL2FybTY0L2t2bS9oYW5kbGVfZXhpdC5jCkBAIC0yMSw4ICsyMSwxMCBAQAogCiAjaW5jbHVkZSA8bGludXgva3ZtLmg+CiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KLSNpbmNsdWRlIDxhc20va3ZtX2VtdWxhdGUuaD4KKworI2luY2x1ZGUgPGFzbS9lc3IuaD4KICNpbmNsdWRlIDxhc20va3ZtX2NvcHJvYy5oPgorI2luY2x1ZGUgPGFzbS9rdm1fZW11bGF0ZS5oPgogI2luY2x1ZGUgPGFzbS9rdm1fbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2t2bV9wc2NpLmg+CiAKQEAgLTYxLDcgKzYzLDcgQEAKICAqLwogc3RhdGljIGludCBrdm1faGFuZGxlX3dmeChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fcnVuICpydW4pCiB7Ci0JaWYgKGt2bV92Y3B1X2dldF9oc3IodmNwdSkgJiBFU1JfRUwyX0VDX1dGSV9JU1NfV0ZFKQorCWlmIChrdm1fdmNwdV9nZXRfaHNyKHZjcHUpICYgRVNSX0VMeF9XRnhfSVNTX1dGRSkKIAkJa3ZtX3ZjcHVfb25fc3Bpbih2Y3B1KTsKIAllbHNlCiAJCWt2bV92Y3B1X2Jsb2NrKHZjcHUpOwpAQCAtNzIsMjkgKzc0LDMwIEBACiB9CiAKIHN0YXRpYyBleGl0X2hhbmRsZV9mbiBhcm1fZXhpdF9oYW5kbGVyc1tdID0gewotCVtFU1JfRUwyX0VDX1dGSV0JPSBrdm1faGFuZGxlX3dmeCwKLQlbRVNSX0VMMl9FQ19DUDE1XzMyXQk9IGt2bV9oYW5kbGVfY3AxNV8zMiwKLQlbRVNSX0VMMl9FQ19DUDE1XzY0XQk9IGt2bV9oYW5kbGVfY3AxNV82NCwKLQlbRVNSX0VMMl9FQ19DUDE0X01SXQk9IGt2bV9oYW5kbGVfY3AxNF8zMiwKLQlbRVNSX0VMMl9FQ19DUDE0X0xTXQk9IGt2bV9oYW5kbGVfY3AxNF9sb2FkX3N0b3JlLAotCVtFU1JfRUwyX0VDX0NQMTRfNjRdCT0ga3ZtX2hhbmRsZV9jcDE0XzY0LAotCVtFU1JfRUwyX0VDX0hWQzMyXQk9IGhhbmRsZV9odmMsCi0JW0VTUl9FTDJfRUNfU01DMzJdCT0gaGFuZGxlX3NtYywKLQlbRVNSX0VMMl9FQ19IVkM2NF0JPSBoYW5kbGVfaHZjLAotCVtFU1JfRUwyX0VDX1NNQzY0XQk9IGhhbmRsZV9zbWMsCi0JW0VTUl9FTDJfRUNfU1lTNjRdCT0ga3ZtX2hhbmRsZV9zeXNfcmVnLAotCVtFU1JfRUwyX0VDX0lBQlRdCT0ga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydCwKLQlbRVNSX0VMMl9FQ19EQUJUXQk9IGt2bV9oYW5kbGVfZ3Vlc3RfYWJvcnQsCisJW0VTUl9FTHhfRUNfV0Z4XQk9IGt2bV9oYW5kbGVfd2Z4LAorCVtFU1JfRUx4X0VDX0NQMTVfMzJdCT0ga3ZtX2hhbmRsZV9jcDE1XzMyLAorCVtFU1JfRUx4X0VDX0NQMTVfNjRdCT0ga3ZtX2hhbmRsZV9jcDE1XzY0LAorCVtFU1JfRUx4X0VDX0NQMTRfTVJdCT0ga3ZtX2hhbmRsZV9jcDE0XzMyLAorCVtFU1JfRUx4X0VDX0NQMTRfTFNdCT0ga3ZtX2hhbmRsZV9jcDE0X2xvYWRfc3RvcmUsCisJW0VTUl9FTHhfRUNfQ1AxNF82NF0JPSBrdm1faGFuZGxlX2NwMTRfNjQsCisJW0VTUl9FTHhfRUNfSFZDMzJdCT0gaGFuZGxlX2h2YywKKwlbRVNSX0VMeF9FQ19TTUMzMl0JPSBoYW5kbGVfc21jLAorCVtFU1JfRUx4X0VDX0hWQzY0XQk9IGhhbmRsZV9odmMsCisJW0VTUl9FTHhfRUNfU01DNjRdCT0gaGFuZGxlX3NtYywKKwlbRVNSX0VMeF9FQ19TWVM2NF0JPSBrdm1faGFuZGxlX3N5c19yZWcsCisJW0VTUl9FTHhfRUNfSUFCVF9MT1ddCT0ga3ZtX2hhbmRsZV9ndWVzdF9hYm9ydCwKKwlbRVNSX0VMeF9FQ19EQUJUX0xPV10JPSBrdm1faGFuZGxlX2d1ZXN0X2Fib3J0LAogfTsKIAogc3RhdGljIGV4aXRfaGFuZGxlX2ZuIGt2bV9nZXRfZXhpdF9oYW5kbGVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl1OCBoc3JfZWMgPSBrdm1fdmNwdV90cmFwX2dldF9jbGFzcyh2Y3B1KTsKKwl1MzIgaHNyID0ga3ZtX3ZjcHVfZ2V0X2hzcih2Y3B1KTsKKwl1OCBoc3JfZWMgPSBoc3IgPj4gRVNSX0VMeF9FQ19TSElGVDsKIAogCWlmIChoc3JfZWMgPj0gQVJSQVlfU0laRShhcm1fZXhpdF9oYW5kbGVycykgfHwKIAkgICAgIWFybV9leGl0X2hhbmRsZXJzW2hzcl9lY10pIHsKLQkJa3ZtX2VycigiVW5rbm93biBleGNlcHRpb24gY2xhc3M6IGhzcjogJSMwOHhcbiIsCi0JCQkodW5zaWduZWQgaW50KWt2bV92Y3B1X2dldF9oc3IodmNwdSkpOworCQlrdm1fZXJyKCJVbmtub3duIGV4Y2VwdGlvbiBjbGFzczogaHNyOiAlIzA4eCAtLSAlc1xuIiwKKwkJCWhzciwgZXNyX2dldF9jbGFzc19zdHJpbmcoaHNyKSk7CiAJCUJVRygpOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0vaHlwLlMgYi9hcmNoL2FybTY0L2t2bS9oeXAuUwppbmRleCBjM2NhODljLi45YmZmNjcxIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAuUworKysgYi9hcmNoL2FybTY0L2t2bS9oeXAuUwpAQCAtMTcsMTUgKzE3LDE2IEBACiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKLSNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+Ci0jaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vZGVidWctbW9uaXRvcnMuaD4KKyNpbmNsdWRlIDxhc20vZXNyLmg+CiAjaW5jbHVkZSA8YXNtL2Zwc2ltZG1hY3Jvcy5oPgogI2luY2x1ZGUgPGFzbS9rdm0uaD4KLSNpbmNsdWRlIDxhc20va3ZtX2FzbS5oPgogI2luY2x1ZGUgPGFzbS9rdm1fYXJtLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9hc20uaD4KICNpbmNsdWRlIDxhc20va3ZtX21tdS5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KIAogI2RlZmluZSBDUFVfR1BfUkVHX09GRlNFVCh4KQkoQ1BVX0dQX1JFR1MgKyB4KQogI2RlZmluZSBDUFVfWFJFR19PRkZTRVQoeCkJQ1BVX0dQX1JFR19PRkZTRVQoQ1BVX1VTRVJfUFRfUkVHUyArIDgqeCkKQEAgLTExNDEsOSArMTE0Miw5IEBACiAJcHVzaAl4MiwgeDMKIAogCW1ycwl4MSwgZXNyX2VsMgotCWxzcgl4MiwgeDEsICNFU1JfRUwyX0VDX1NISUZUCisJbHNyCXgyLCB4MSwgI0VTUl9FTHhfRUNfU0hJRlQKIAotCWNtcAl4MiwgI0VTUl9FTDJfRUNfSFZDNjQKKwljbXAJeDIsICNFU1JfRUx4X0VDX0hWQzY0CiAJYi5uZQllbDFfdHJhcAogCiAJbXJzCXgzLCB2dHRicl9lbDIJCQkvLyBJZiB2dHRiciBpcyB2YWxpZCwgdGhlIDY0Yml0IGd1ZXN0CkBAIC0xMTc4LDEzICsxMTc5LDEzIEBACiAJICogeDE6IEVTUgogCSAqIHgyOiBFU1JfRUMKIAkgKi8KLQljbXAJeDIsICNFU1JfRUwyX0VDX0RBQlQKLQltb3YJeDAsICNFU1JfRUwyX0VDX0lBQlQKKwljbXAJeDIsICNFU1JfRUx4X0VDX0RBQlRfTE9XCisJbW92CXgwLCAjRVNSX0VMeF9FQ19JQUJUX0xPVwogCWNjbXAJeDIsIHgwLCAjNCwgbmUKIAliLm5lCTFmCQkvLyBOb3QgYW4gYWJvcnQgd2UgY2FyZSBhYm91dAogCiAJLyogVGhpcyBpcyBhbiBhYm9ydC4gQ2hlY2sgZm9yIHBlcm1pc3Npb24gZmF1bHQgKi8KLQlhbmQJeDIsIHgxLCAjRVNSX0VMMl9GU0NfVFlQRQorCWFuZAl4MiwgeDEsICNFU1JfRUx4X0ZTQ19UWVBFCiAJY21wCXgyLCAjRlNDX1BFUk0KIAliLm5lCTFmCQkvLyBOb3QgYSBwZXJtaXNzaW9uIGZhdWx0CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva3ZtL2luamVjdF9mYXVsdC5jIGIvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmMKaW5kZXggODFhMDJhOC4uZjAyNTMwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmMKKysrIGIvYXJjaC9hcm02NC9rdm0vaW5qZWN0X2ZhdWx0LmMKQEAgLTExOCwyNyArMTE4LDI3IEBACiAJICogaW5zdHJ1Y3Rpb24gc2V0LiBSZXBvcnQgYW4gZXh0ZXJuYWwgc3luY2hyb25vdXMgYWJvcnQuCiAJICovCiAJaWYgKGt2bV92Y3B1X3RyYXBfaWxfaXMzMmJpdCh2Y3B1KSkKLQkJZXNyIHw9IEVTUl9FTDFfSUw7CisJCWVzciB8PSBFU1JfRUx4X0lMOwogCiAJLyoKIAkgKiBIZXJlLCB0aGUgZ3Vlc3QgcnVucyBpbiBBQXJjaDY0IG1vZGUgd2hlbiBpbiBFTDEuIElmIHdlIGdldAogCSAqIGFuIEFBcmNoMzIgZmF1bHQsIGl0IG1lYW5zIHdlIG1hbmFnZWQgdG8gdHJhcCBhbiBFTDAgZmF1bHQuCiAJICovCiAJaWYgKGlzX2FhcmNoMzIgfHwgKGNwc3IgJiBQU1JfTU9ERV9NQVNLKSA9PSBQU1JfTU9ERV9FTDB0KQotCQllc3IgfD0gKEVTUl9FTDFfRUNfSUFCVF9FTDAgPDwgRVNSX0VMMV9FQ19TSElGVCk7CisJCWVzciB8PSAoRVNSX0VMeF9FQ19JQUJUX0xPVyA8PCBFU1JfRUx4X0VDX1NISUZUKTsKIAllbHNlCi0JCWVzciB8PSAoRVNSX0VMMV9FQ19JQUJUX0VMMSA8PCBFU1JfRUwxX0VDX1NISUZUKTsKKwkJZXNyIHw9IChFU1JfRUx4X0VDX0lBQlRfQ1VSIDw8IEVTUl9FTHhfRUNfU0hJRlQpOwogCiAJaWYgKCFpc19pYWJ0KQotCQllc3IgfD0gRVNSX0VMMV9FQ19EQUJUX0VMMDsKKwkJZXNyIHw9IEVTUl9FTHhfRUNfREFCVF9MT1c7CiAKLQl2Y3B1X3N5c19yZWcodmNwdSwgRVNSX0VMMSkgPSBlc3IgfCBFU1JfRUwyX0VDX3hBQlRfeEZTUl9FWFRBQlQ7CisJdmNwdV9zeXNfcmVnKHZjcHUsIEVTUl9FTDEpID0gZXNyIHwgRVNSX0VMeF9GU0NfRVhUQUJUOwogfQogCiBzdGF0aWMgdm9pZCBpbmplY3RfdW5kZWY2NChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJdW5zaWduZWQgbG9uZyBjcHNyID0gKnZjcHVfY3Bzcih2Y3B1KTsKLQl1MzIgZXNyID0gKEVTUl9FTDFfRUNfVU5LTk9XTiA8PCBFU1JfRUwxX0VDX1NISUZUKTsKKwl1MzIgZXNyID0gKEVTUl9FTHhfRUNfVU5LTk9XTiA8PCBFU1JfRUx4X0VDX1NISUZUKTsKIAogCSp2Y3B1X3Nwc3IodmNwdSkgPSBjcHNyOwogCSp2Y3B1X2Vscl9lbDEodmNwdSkgPSAqdmNwdV9wYyh2Y3B1KTsKQEAgLTE1MSw3ICsxNTEsNyBAQAogCSAqIHNldC4KIAkgKi8KIAlpZiAoa3ZtX3ZjcHVfdHJhcF9pbF9pczMyYml0KHZjcHUpKQotCQllc3IgfD0gRVNSX0VMMV9JTDsKKwkJZXNyIHw9IEVTUl9FTHhfSUw7CiAKIAl2Y3B1X3N5c19yZWcodmNwdSwgRVNSX0VMMSkgPSBlc3I7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jIGIvYXJjaC9hcm02NC9rdm0vc3lzX3JlZ3MuYwppbmRleCAzZDdjMmRmLi5iOTZhZmRmIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L2t2bS9zeXNfcmVncy5jCisrKyBiL2FyY2gvYXJtNjQva3ZtL3N5c19yZWdzLmMKQEAgLTIwLDE3ICsyMCwyMCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgva3ZtX2hvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20va3ZtX2FybS5oPgotI2luY2x1ZGUgPGFzbS9rdm1faG9zdC5oPgotI2luY2x1ZGUgPGFzbS9rdm1fZW11bGF0ZS5oPgotI2luY2x1ZGUgPGFzbS9rdm1fY29wcm9jLmg+Ci0jaW5jbHVkZSA8YXNtL2t2bV9tbXUuaD4KKwogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2NwdXR5cGUuaD4KICNpbmNsdWRlIDxhc20vZGVidWctbW9uaXRvcnMuaD4KKyNpbmNsdWRlIDxhc20vZXNyLmg+CisjaW5jbHVkZSA8YXNtL2t2bV9hcm0uaD4KKyNpbmNsdWRlIDxhc20va3ZtX2NvcHJvYy5oPgorI2luY2x1ZGUgPGFzbS9rdm1fZW11bGF0ZS5oPgorI2luY2x1ZGUgPGFzbS9rdm1faG9zdC5oPgorI2luY2x1ZGUgPGFzbS9rdm1fbW11Lmg+CisKICNpbmNsdWRlIDx0cmFjZS9ldmVudHMva3ZtLmg+CiAKICNpbmNsdWRlICJzeXNfcmVncy5oIgpAQCAtNjksNjggKzcyLDMxIEBACiAJcmV0dXJuIGNjc2lkcjsKIH0KIAotc3RhdGljIHZvaWQgZG9fZGNfY2lzdyh1MzIgdmFsKQotewotCWFzbSB2b2xhdGlsZSgiZGMgY2lzdywgJXgwIiA6IDogInIiICh2YWwpKTsKLQlkc2IoaXNoKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fZGNfY3N3KHUzMiB2YWwpCi17Ci0JYXNtIHZvbGF0aWxlKCJkYyBjc3csICV4MCIgOiA6ICJyIiAodmFsKSk7Ci0JZHNiKGlzaCk7Ci19Ci0KLS8qIFNlZSBub3RlIGF0IEFSTSBBUk0gQjEuMTQuNCAqLworLyoKKyAqIFNlZSBub3RlIGF0IEFSTXY3IEFSTSBCMS4xNC40IChUTDtEUjogUy9XIG9wcyBhcmUgbm90IGVhc2lseSB2aXJ0dWFsaXplZCkuCisgKi8KIHN0YXRpYyBib29sIGFjY2Vzc19kY3N3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCWNvbnN0IHN0cnVjdCBzeXNfcmVnX3BhcmFtcyAqcCwKIAkJCWNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpCiB7Ci0JdW5zaWduZWQgbG9uZyB2YWw7Ci0JaW50IGNwdTsKLQogCWlmICghcC0+aXNfd3JpdGUpCiAJCXJldHVybiByZWFkX2Zyb21fd3JpdGVfb25seSh2Y3B1LCBwKTsKIAotCWNwdSA9IGdldF9jcHUoKTsKLQotCWNwdW1hc2tfc2V0YWxsKCZ2Y3B1LT5hcmNoLnJlcXVpcmVfZGNhY2hlX2ZsdXNoKTsKLQljcHVtYXNrX2NsZWFyX2NwdShjcHUsICZ2Y3B1LT5hcmNoLnJlcXVpcmVfZGNhY2hlX2ZsdXNoKTsKLQotCS8qIElmIHdlIHdlcmUgYWxyZWFkeSBwcmVlbXB0ZWQsIHRha2UgdGhlIGxvbmcgd2F5IGFyb3VuZCAqLwotCWlmIChjcHUgIT0gdmNwdS0+YXJjaC5sYXN0X3BjcHUpIHsKLQkJZmx1c2hfY2FjaGVfYWxsKCk7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQl2YWwgPSAqdmNwdV9yZWcodmNwdSwgcC0+UnQpOwotCi0Jc3dpdGNoIChwLT5DUm0pIHsKLQljYXNlIDY6CQkJLyogVXBncmFkZSBEQ0lTVyB0byBEQ0NJU1csIGFzIHBlciBIQ1IuU1dJTyAqLwotCWNhc2UgMTQ6CQkvKiBEQ0NJU1cgKi8KLQkJZG9fZGNfY2lzdyh2YWwpOwotCQlicmVhazsKLQotCWNhc2UgMTA6CQkvKiBEQ0NTVyAqLwotCQlkb19kY19jc3codmFsKTsKLQkJYnJlYWs7Ci0JfQotCi1kb25lOgotCXB1dF9jcHUoKTsKLQorCWt2bV9zZXRfd2F5X2ZsdXNoKHZjcHUpOwogCXJldHVybiB0cnVlOwogfQogCiAvKgogICogR2VuZXJpYyBhY2Nlc3NvciBmb3IgVk0gcmVnaXN0ZXJzLiBPbmx5IGNhbGxlZCBhcyBsb25nIGFzIEhDUl9UVk0KLSAqIGlzIHNldC4KKyAqIGlzIHNldC4gSWYgdGhlIGd1ZXN0IGVuYWJsZXMgdGhlIE1NVSwgd2Ugc3RvcCB0cmFwcGluZyB0aGUgVk0KKyAqIHN5c19yZWdzIGFuZCBsZWF2ZSBpdCBpbiBjb21wbGV0ZSBjb250cm9sIG9mIHRoZSBjYWNoZXMuCiAgKi8KIHN0YXRpYyBib29sIGFjY2Vzc192bV9yZWcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJICBjb25zdCBzdHJ1Y3Qgc3lzX3JlZ19wYXJhbXMgKnAsCiAJCQkgIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpCiB7CiAJdW5zaWduZWQgbG9uZyB2YWw7CisJYm9vbCB3YXNfZW5hYmxlZCA9IHZjcHVfaGFzX2NhY2hlX2VuYWJsZWQodmNwdSk7CiAKIAlCVUdfT04oIXAtPmlzX3dyaXRlKTsKIApAQCAtMTQzLDI1ICsxMDksNyBAQAogCQl2Y3B1X2NwMTVfNjRfbG93KHZjcHUsIHItPnJlZykgPSB2YWwgJiAweGZmZmZmZmZmVUw7CiAJfQogCi0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBTQ1RMUl9FTDEgYWNjZXNzb3IuIE9ubHkgY2FsbGVkIGFzIGxvbmcgYXMgSENSX1RWTSBpcyBzZXQuICBJZiB0aGUKLSAqIGd1ZXN0IGVuYWJsZXMgdGhlIE1NVSwgd2Ugc3RvcCB0cmFwcGluZyB0aGUgVk0gc3lzX3JlZ3MgYW5kIGxlYXZlCi0gKiBpdCBpbiBjb21wbGV0ZSBjb250cm9sIG9mIHRoZSBjYWNoZXMuCi0gKi8KLXN0YXRpYyBib29sIGFjY2Vzc19zY3RscihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkgY29uc3Qgc3RydWN0IHN5c19yZWdfcGFyYW1zICpwLAotCQkJIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgKnIpCi17Ci0JYWNjZXNzX3ZtX3JlZyh2Y3B1LCBwLCByKTsKLQotCWlmICh2Y3B1X2hhc19jYWNoZV9lbmFibGVkKHZjcHUpKSB7CS8qIE1NVStDYWNoZXMgZW5hYmxlZD8gKi8KLQkJdmNwdS0+YXJjaC5oY3JfZWwyICY9IH5IQ1JfVFZNOwotCQlzdGFnZTJfZmx1c2hfdm0odmNwdS0+a3ZtKTsKLQl9Ci0KKwlrdm1fdG9nZ2xlX2NhY2hlKHZjcHUsIHdhc19lbmFibGVkKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzc3LDcgKzMyNSw3IEBACiAJICBOVUxMLCByZXNldF9tcGlkciwgTVBJRFJfRUwxIH0sCiAJLyogU0NUTFJfRUwxICovCiAJeyBPcDAoMGIxMSksIE9wMSgwYjAwMCksIENSbigwYjAwMDEpLCBDUm0oMGIwMDAwKSwgT3AyKDBiMDAwKSwKLQkgIGFjY2Vzc19zY3RsciwgcmVzZXRfdmFsLCBTQ1RMUl9FTDEsIDB4MDBDNTAwNzggfSwKKwkgIGFjY2Vzc192bV9yZWcsIHJlc2V0X3ZhbCwgU0NUTFJfRUwxLCAweDAwQzUwMDc4IH0sCiAJLyogQ1BBQ1JfRUwxICovCiAJeyBPcDAoMGIxMSksIE9wMSgwYjAwMCksIENSbigwYjAwMDEpLCBDUm0oMGIwMDAwKSwgT3AyKDBiMDEwKSwKIAkgIE5VTEwsIHJlc2V0X3ZhbCwgQ1BBQ1JfRUwxLCAwIH0sCkBAIC02NTcsNyArNjA1LDcgQEAKICAqIHJlZ2lzdGVyKS4KICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNfcmVnX2Rlc2MgY3AxNV9yZWdzW10gPSB7Ci0JeyBPcDEoIDApLCBDUm4oIDEpLCBDUm0oIDApLCBPcDIoIDApLCBhY2Nlc3Nfc2N0bHIsIE5VTEwsIGMxX1NDVExSIH0sCisJeyBPcDEoIDApLCBDUm4oIDEpLCBDUm0oIDApLCBPcDIoIDApLCBhY2Nlc3Nfdm1fcmVnLCBOVUxMLCBjMV9TQ1RMUiB9LAogCXsgT3AxKCAwKSwgQ1JuKCAyKSwgQ1JtKCAwKSwgT3AyKCAwKSwgYWNjZXNzX3ZtX3JlZywgTlVMTCwgYzJfVFRCUjAgfSwKIAl7IE9wMSggMCksIENSbiggMiksIENSbSggMCksIE9wMiggMSksIGFjY2Vzc192bV9yZWcsIE5VTEwsIGMyX1RUQlIxIH0sCiAJeyBPcDEoIDApLCBDUm4oIDIpLCBDUm0oIDApLCBPcDIoIDIpLCBhY2Nlc3Nfdm1fcmVnLCBOVUxMLCBjMl9UVEJDUiB9LApAQCAtODE1LDEyICs3NjMsMTIgQEAKIAlpbnQgY3A7CiAKIAlzd2l0Y2goaHNyX2VjKSB7Ci0JY2FzZSBFU1JfRUwyX0VDX0NQMTVfMzI6Ci0JY2FzZSBFU1JfRUwyX0VDX0NQMTVfNjQ6CisJY2FzZSBFU1JfRUx4X0VDX0NQMTVfMzI6CisJY2FzZSBFU1JfRUx4X0VDX0NQMTVfNjQ6CiAJCWNwID0gMTU7CiAJCWJyZWFrOwotCWNhc2UgRVNSX0VMMl9FQ19DUDE0X01SOgotCWNhc2UgRVNSX0VMMl9FQ19DUDE0XzY0OgorCWNhc2UgRVNSX0VMeF9FQ19DUDE0X01SOgorCWNhc2UgRVNSX0VMeF9FQ19DUDE0XzY0OgogCQljcCA9IDE0OwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9kbWEtbWFwcGluZy5jIGIvYXJjaC9hcm02NC9tbS9kbWEtbWFwcGluZy5jCmluZGV4IGQ5MjA5NDIuLjBhMjRiOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQvbW0vZG1hLW1hcHBpbmcuYworKysgYi9hcmNoL2FybTY0L21tL2RtYS1tYXBwaW5nLmMKQEAgLTEzNCwxNiArMTM0LDE3IEBACiAJCXN3aW90bGJfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIHZhZGRyLCBkbWFfaGFuZGxlKTsKIH0KIAotc3RhdGljIHZvaWQgKl9fZG1hX2FsbG9jX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncywKLQkJCQkgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQorc3RhdGljIHZvaWQgKl9fZG1hX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZ3MsCisJCQkgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdm9pZCAqcHRyLCAqY29oZXJlbnRfcHRyOworCWJvb2wgY29oZXJlbnQgPSBpc19kZXZpY2VfZG1hX2NvaGVyZW50KGRldik7CiAKIAlzaXplID0gUEFHRV9BTElHTihzaXplKTsKIAotCWlmICghKGZsYWdzICYgX19HRlBfV0FJVCkpIHsKKwlpZiAoIWNvaGVyZW50ICYmICEoZmxhZ3MgJiBfX0dGUF9XQUlUKSkgewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJCXZvaWQgKmFkZHIgPSBfX2FsbG9jX2Zyb21fcG9vbChzaXplLCAmcGFnZSk7CiAKQEAgLTE1MSwxMyArMTUyLDE2IEBACiAJCQkqZG1hX2hhbmRsZSA9IHBoeXNfdG9fZG1hKGRldiwgcGFnZV90b19waHlzKHBhZ2UpKTsKIAogCQlyZXR1cm4gYWRkcjsKLQogCX0KIAogCXB0ciA9IF9fZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZmxhZ3MsIGF0dHJzKTsKIAlpZiAoIXB0cikKIAkJZ290byBub19tZW07CiAKKwkvKiBubyBuZWVkIGZvciBub24tY2FjaGVhYmxlIG1hcHBpbmcgaWYgY29oZXJlbnQgKi8KKwlpZiAoY29oZXJlbnQpCisJCXJldHVybiBwdHI7CisKIAkvKiByZW1vdmUgYW55IGRpcnR5IGNhY2hlIGxpbmVzIG9uIHRoZSBrZXJuZWwgYWxpYXMgKi8KIAlfX2RtYV9mbHVzaF9yYW5nZShwdHIsIHB0ciArIHNpemUpOwogCkBAIC0xNzksMTUgKzE4MywxNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBfX2RtYV9mcmVlX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJCQkgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3N0YXRpYyB2b2lkIF9fZG1hX2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJICAgICAgIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCSAgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAl2b2lkICpzd2lvdGxiX2FkZHIgPSBwaHlzX3RvX3ZpcnQoZG1hX3RvX3BoeXMoZGV2LCBkbWFfaGFuZGxlKSk7CiAKLQlpZiAoX19mcmVlX2Zyb21fcG9vbCh2YWRkciwgc2l6ZSkpCi0JCXJldHVybjsKLQl2dW5tYXAodmFkZHIpOworCWlmICghaXNfZGV2aWNlX2RtYV9jb2hlcmVudChkZXYpKSB7CisJCWlmIChfX2ZyZWVfZnJvbV9wb29sKHZhZGRyLCBzaXplKSkKKwkJCXJldHVybjsKKwkJdnVubWFwKHZhZGRyKTsKKwl9CiAJX19kbWFfZnJlZV9jb2hlcmVudChkZXYsIHNpemUsIHN3aW90bGJfYWRkciwgZG1hX2hhbmRsZSwgYXR0cnMpOwogfQogCkBAIC0xOTksNyArMjA1LDggQEAKIAlkbWFfYWRkcl90IGRldl9hZGRyOwogCiAJZGV2X2FkZHIgPSBzd2lvdGxiX21hcF9wYWdlKGRldiwgcGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIsIGF0dHJzKTsKLQlfX2RtYV9tYXBfYXJlYShwaHlzX3RvX3ZpcnQoZG1hX3RvX3BoeXMoZGV2LCBkZXZfYWRkcikpLCBzaXplLCBkaXIpOworCWlmICghaXNfZGV2aWNlX2RtYV9jb2hlcmVudChkZXYpKQorCQlfX2RtYV9tYXBfYXJlYShwaHlzX3RvX3ZpcnQoZG1hX3RvX3BoeXMoZGV2LCBkZXZfYWRkcikpLCBzaXplLCBkaXIpOwogCiAJcmV0dXJuIGRldl9hZGRyOwogfQpAQCAtMjA5LDcgKzIxNiw4IEBACiAJCQkJIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCiAJCQkJIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCV9fZG1hX3VubWFwX2FyZWEocGh5c190b192aXJ0KGRtYV90b19waHlzKGRldiwgZGV2X2FkZHIpKSwgc2l6ZSwgZGlyKTsKKwlpZiAoIWlzX2RldmljZV9kbWFfY29oZXJlbnQoZGV2KSkKKwkJX19kbWFfdW5tYXBfYXJlYShwaHlzX3RvX3ZpcnQoZG1hX3RvX3BoeXMoZGV2LCBkZXZfYWRkcikpLCBzaXplLCBkaXIpOwogCXN3aW90bGJfdW5tYXBfcGFnZShkZXYsIGRldl9hZGRyLCBzaXplLCBkaXIsIGF0dHJzKTsKIH0KIApAQCAtMjIxLDkgKzIyOSwxMCBAQAogCWludCBpLCByZXQ7CiAKIAlyZXQgPSBzd2lvdGxiX21hcF9zZ19hdHRycyhkZXYsIHNnbCwgbmVsZW1zLCBkaXIsIGF0dHJzKTsKLQlmb3JfZWFjaF9zZyhzZ2wsIHNnLCByZXQsIGkpCi0JCV9fZG1hX21hcF9hcmVhKHBoeXNfdG9fdmlydChkbWFfdG9fcGh5cyhkZXYsIHNnLT5kbWFfYWRkcmVzcykpLAotCQkJICAgICAgIHNnLT5sZW5ndGgsIGRpcik7CisJaWYgKCFpc19kZXZpY2VfZG1hX2NvaGVyZW50KGRldikpCisJCWZvcl9lYWNoX3NnKHNnbCwgc2csIHJldCwgaSkKKwkJCV9fZG1hX21hcF9hcmVhKHBoeXNfdG9fdmlydChkbWFfdG9fcGh5cyhkZXYsIHNnLT5kbWFfYWRkcmVzcykpLAorCQkJCSAgICAgICBzZy0+bGVuZ3RoLCBkaXIpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIzNiw5ICsyNDUsMTAgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCWludCBpOwogCi0JZm9yX2VhY2hfc2coc2dsLCBzZywgbmVsZW1zLCBpKQotCQlfX2RtYV91bm1hcF9hcmVhKHBoeXNfdG9fdmlydChkbWFfdG9fcGh5cyhkZXYsIHNnLT5kbWFfYWRkcmVzcykpLAotCQkJCSBzZy0+bGVuZ3RoLCBkaXIpOworCWlmICghaXNfZGV2aWNlX2RtYV9jb2hlcmVudChkZXYpKQorCQlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZWxlbXMsIGkpCisJCQlfX2RtYV91bm1hcF9hcmVhKHBoeXNfdG9fdmlydChkbWFfdG9fcGh5cyhkZXYsIHNnLT5kbWFfYWRkcmVzcykpLAorCQkJCQkgc2ctPmxlbmd0aCwgZGlyKTsKIAlzd2lvdGxiX3VubWFwX3NnX2F0dHJzKGRldiwgc2dsLCBuZWxlbXMsIGRpciwgYXR0cnMpOwogfQogCkBAIC0yNDYsNyArMjU2LDggQEAKIAkJCQkJICBkbWFfYWRkcl90IGRldl9hZGRyLCBzaXplX3Qgc2l6ZSwKIAkJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0JX19kbWFfdW5tYXBfYXJlYShwaHlzX3RvX3ZpcnQoZG1hX3RvX3BoeXMoZGV2LCBkZXZfYWRkcikpLCBzaXplLCBkaXIpOworCWlmICghaXNfZGV2aWNlX2RtYV9jb2hlcmVudChkZXYpKQorCQlfX2RtYV91bm1hcF9hcmVhKHBoeXNfdG9fdmlydChkbWFfdG9fcGh5cyhkZXYsIGRldl9hZGRyKSksIHNpemUsIGRpcik7CiAJc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZGV2X2FkZHIsIHNpemUsIGRpcik7CiB9CiAKQEAgLTI1NSw3ICsyNjYsOCBAQAogCQkJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBkZXZfYWRkciwgc2l6ZSwgZGlyKTsKLQlfX2RtYV9tYXBfYXJlYShwaHlzX3RvX3ZpcnQoZG1hX3RvX3BoeXMoZGV2LCBkZXZfYWRkcikpLCBzaXplLCBkaXIpOworCWlmICghaXNfZGV2aWNlX2RtYV9jb2hlcmVudChkZXYpKQorCQlfX2RtYV9tYXBfYXJlYShwaHlzX3RvX3ZpcnQoZG1hX3RvX3BoeXMoZGV2LCBkZXZfYWRkcikpLCBzaXplLCBkaXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX3N3aW90bGJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTI2NSw5ICsyNzcsMTAgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCWludCBpOwogCi0JZm9yX2VhY2hfc2coc2dsLCBzZywgbmVsZW1zLCBpKQotCQlfX2RtYV91bm1hcF9hcmVhKHBoeXNfdG9fdmlydChkbWFfdG9fcGh5cyhkZXYsIHNnLT5kbWFfYWRkcmVzcykpLAotCQkJCSBzZy0+bGVuZ3RoLCBkaXIpOworCWlmICghaXNfZGV2aWNlX2RtYV9jb2hlcmVudChkZXYpKQorCQlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZWxlbXMsIGkpCisJCQlfX2RtYV91bm1hcF9hcmVhKHBoeXNfdG9fdmlydChkbWFfdG9fcGh5cyhkZXYsIHNnLT5kbWFfYWRkcmVzcykpLAorCQkJCQkgc2ctPmxlbmd0aCwgZGlyKTsKIAlzd2lvdGxiX3N5bmNfc2dfZm9yX2NwdShkZXYsIHNnbCwgbmVsZW1zLCBkaXIpOwogfQogCkBAIC0yNzksOSArMjkyLDEwIEBACiAJaW50IGk7CiAKIAlzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZShkZXYsIHNnbCwgbmVsZW1zLCBkaXIpOwotCWZvcl9lYWNoX3NnKHNnbCwgc2csIG5lbGVtcywgaSkKLQkJX19kbWFfbWFwX2FyZWEocGh5c190b192aXJ0KGRtYV90b19waHlzKGRldiwgc2ctPmRtYV9hZGRyZXNzKSksCi0JCQkgICAgICAgc2ctPmxlbmd0aCwgZGlyKTsKKwlpZiAoIWlzX2RldmljZV9kbWFfY29oZXJlbnQoZGV2KSkKKwkJZm9yX2VhY2hfc2coc2dsLCBzZywgbmVsZW1zLCBpKQorCQkJX19kbWFfbWFwX2FyZWEocGh5c190b192aXJ0KGRtYV90b19waHlzKGRldiwgc2ctPmRtYV9hZGRyZXNzKSksCisJCQkJICAgICAgIHNnLT5sZW5ndGgsIGRpcik7CiB9CiAKIC8qIHZtYS0+dm1fcGFnZV9wcm90IG11c3QgYmUgc2V0IGFwcHJvcHJpYXRlbHkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiAqLwpAQCAtMzA4LDI4ICszMjIsMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IF9fc3dpb3RsYl9tbWFwX25vbmNvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKLQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCitzdGF0aWMgaW50IF9fc3dpb3RsYl9tbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgIHZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCSAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0Jdm1hLT52bV9wYWdlX3Byb3QgPSBfX2dldF9kbWFfcGdwcm90KGF0dHJzLCB2bWEtPnZtX3BhZ2VfcHJvdCwgZmFsc2UpOworCXZtYS0+dm1fcGFnZV9wcm90ID0gX19nZXRfZG1hX3BncHJvdChhdHRycywgdm1hLT52bV9wYWdlX3Byb3QsCisJCQkJCSAgICAgaXNfZGV2aWNlX2RtYV9jb2hlcmVudChkZXYpKTsKIAlyZXR1cm4gX19kbWFfY29tbW9uX21tYXAoZGV2LCB2bWEsIGNwdV9hZGRyLCBkbWFfYWRkciwgc2l6ZSk7CiB9CiAKLXN0YXRpYyBpbnQgX19zd2lvdGxiX21tYXBfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LAotCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJdm9pZCAqY3B1X2FkZHIsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAotCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQkvKiBKdXN0IHVzZSB3aGF0ZXZlciBwYWdlX3Byb3QgYXR0cmlidXRlcyB3ZXJlIHNwZWNpZmllZCAqLwotCXJldHVybiBfX2RtYV9jb21tb25fbW1hcChkZXYsIHZtYSwgY3B1X2FkZHIsIGRtYV9hZGRyLCBzaXplKTsKLX0KLQotc3RydWN0IGRtYV9tYXBfb3BzIG5vbmNvaGVyZW50X3N3aW90bGJfZG1hX29wcyA9IHsKLQkuYWxsb2MgPSBfX2RtYV9hbGxvY19ub25jb2hlcmVudCwKLQkuZnJlZSA9IF9fZG1hX2ZyZWVfbm9uY29oZXJlbnQsCi0JLm1tYXAgPSBfX3N3aW90bGJfbW1hcF9ub25jb2hlcmVudCwKK3N0YXRpYyBzdHJ1Y3QgZG1hX21hcF9vcHMgc3dpb3RsYl9kbWFfb3BzID0geworCS5hbGxvYyA9IF9fZG1hX2FsbG9jLAorCS5mcmVlID0gX19kbWFfZnJlZSwKKwkubW1hcCA9IF9fc3dpb3RsYl9tbWFwLAogCS5tYXBfcGFnZSA9IF9fc3dpb3RsYl9tYXBfcGFnZSwKIAkudW5tYXBfcGFnZSA9IF9fc3dpb3RsYl91bm1hcF9wYWdlLAogCS5tYXBfc2cgPSBfX3N3aW90bGJfbWFwX3NnX2F0dHJzLApAQCAtMzQxLDI0ICszNDcsNiBAQAogCS5kbWFfc3VwcG9ydGVkID0gc3dpb3RsYl9kbWFfc3VwcG9ydGVkLAogCS5tYXBwaW5nX2Vycm9yID0gc3dpb3RsYl9kbWFfbWFwcGluZ19lcnJvciwKIH07Ci1FWFBPUlRfU1lNQk9MKG5vbmNvaGVyZW50X3N3aW90bGJfZG1hX29wcyk7Ci0KLXN0cnVjdCBkbWFfbWFwX29wcyBjb2hlcmVudF9zd2lvdGxiX2RtYV9vcHMgPSB7Ci0JLmFsbG9jID0gX19kbWFfYWxsb2NfY29oZXJlbnQsCi0JLmZyZWUgPSBfX2RtYV9mcmVlX2NvaGVyZW50LAotCS5tbWFwID0gX19zd2lvdGxiX21tYXBfY29oZXJlbnQsCi0JLm1hcF9wYWdlID0gc3dpb3RsYl9tYXBfcGFnZSwKLQkudW5tYXBfcGFnZSA9IHN3aW90bGJfdW5tYXBfcGFnZSwKLQkubWFwX3NnID0gc3dpb3RsYl9tYXBfc2dfYXR0cnMsCi0JLnVubWFwX3NnID0gc3dpb3RsYl91bm1hcF9zZ19hdHRycywKLQkuc3luY19zaW5nbGVfZm9yX2NwdSA9IHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2NwdSwKLQkuc3luY19zaW5nbGVfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2RldmljZSwKLQkuc3luY19zZ19mb3JfY3B1ID0gc3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUsCi0JLnN5bmNfc2dfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zZ19mb3JfZGV2aWNlLAotCS5kbWFfc3VwcG9ydGVkID0gc3dpb3RsYl9kbWFfc3VwcG9ydGVkLAotCS5tYXBwaW5nX2Vycm9yID0gc3dpb3RsYl9kbWFfbWFwcGluZ19lcnJvciwKLX07Ci1FWFBPUlRfU1lNQk9MKGNvaGVyZW50X3N3aW90bGJfZG1hX29wcyk7CiAKIGV4dGVybiBpbnQgc3dpb3RsYl9sYXRlX2luaXRfd2l0aF9kZWZhdWx0X3NpemUoc2l6ZV90IGRlZmF1bHRfc2l6ZSk7CiAKQEAgLTQyNyw3ICs0MTUsNyBAQAogewogCXNpemVfdCBzd2lvdGxiX3NpemUgPSBtaW4oU1pfNjRNLCBNQVhfT1JERVJfTlJfUEFHRVMgPDwgUEFHRV9TSElGVCk7CiAKLQlkbWFfb3BzID0gJm5vbmNvaGVyZW50X3N3aW90bGJfZG1hX29wczsKKwlkbWFfb3BzID0gJnN3aW90bGJfZG1hX29wczsKIAogCXJldHVybiBzd2lvdGxiX2xhdGVfaW5pdF93aXRoX2RlZmF1bHRfc2l6ZShzd2lvdGxiX3NpemUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9kdW1wLmMgYi9hcmNoL2FybTY0L21tL2R1bXAuYwppbmRleCBkNTRkYzlhLi43NGMyNTY3IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2R1bXAuYworKysgYi9hcmNoL2FybTY0L21tL2R1bXAuYwpAQCAtMTQsMTQgKzE0LDE4IEBACiAgKiBvZiB0aGUgTGljZW5zZS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KIAogI2RlZmluZSBMT1dFU1RfQUREUgkoVUwoMHhmZmZmZmZmZmZmZmZmZmZmKSA8PCBWQV9CSVRTKQogCkBAIC0zNywxMCArNDEsMTAgQEAKIAlWTUVNTUFQX1NUQVJUX05SLAogCVZNRU1NQVBfRU5EX05SLAogI2VuZGlmCi0JUENJX1NUQVJUX05SLAotCVBDSV9FTkRfTlIsCiAJRklYQUREUl9TVEFSVF9OUiwKIAlGSVhBRERSX0VORF9OUiwKKwlQQ0lfU1RBUlRfTlIsCisJUENJX0VORF9OUiwKIAlNT0RVTEVTX1NUQVJUX05SLAogCU1PRFVFTFNfRU5EX05SLAogCUtFUk5FTF9TUEFDRV9OUiwKQEAgLTUzLDEwICs1NywxMCBAQAogCXsgMCwJCQkidm1lbW1hcCBzdGFydCIgfSwKIAl7IDAsCQkJInZtZW1tYXAgZW5kIiB9LAogI2VuZGlmCi0JeyAodW5zaWduZWQgbG9uZykgUENJX0lPQkFTRSwJCSJQQ0kgSS9PIHN0YXJ0IiB9LAotCXsgKHVuc2lnbmVkIGxvbmcpIFBDSV9JT0JBU0UgKyBTWl8xNk0sCSJQQ0kgSS9PIGVuZCIgfSwKIAl7IEZJWEFERFJfU1RBUlQsCSJGaXhtYXAgc3RhcnQiIH0sCiAJeyBGSVhBRERSX1RPUCwJCSJGaXhtYXAgZW5kIiB9LAorCXsgUENJX0lPX1NUQVJULAkJIlBDSSBJL08gc3RhcnQiIH0sCisJeyBQQ0lfSU9fRU5ELAkJIlBDSSBJL08gZW5kIiB9LAogCXsgTU9EVUxFU19WQUREUiwJIk1vZHVsZXMgc3RhcnQiIH0sCiAJeyBNT0RVTEVTX0VORCwJCSJNb2R1bGVzIGVuZCIgfSwKIAl7IFBBR0VfT0ZGU0VULAkJIktlcm5lbCBNYXBwaW5nIiB9LApAQCAtMjQ2LDEwICsyNTAsMTIgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QTUQ7IGkrKywgcG1kKyspIHsKIAkJYWRkciA9IHN0YXJ0ICsgaSAqIFBNRF9TSVpFOwotCQlpZiAocG1kX25vbmUoKnBtZCkgfHwgcG1kX3NlY3QoKnBtZCkgfHwgcG1kX2JhZCgqcG1kKSkKKwkJaWYgKHBtZF9ub25lKCpwbWQpIHx8IHBtZF9zZWN0KCpwbWQpKSB7CiAJCQlub3RlX3BhZ2Uoc3QsIGFkZHIsIDMsIHBtZF92YWwoKnBtZCkpOwotCQllbHNlCisJCX0gZWxzZSB7CisJCQlCVUdfT04ocG1kX2JhZCgqcG1kKSk7CiAJCQl3YWxrX3B0ZShzdCwgcG1kLCBhZGRyKTsKKwkJfQogCX0KIH0KIApAQCAtMjYxLDEwICsyNjcsMTIgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QVUQ7IGkrKywgcHVkKyspIHsKIAkJYWRkciA9IHN0YXJ0ICsgaSAqIFBVRF9TSVpFOwotCQlpZiAocHVkX25vbmUoKnB1ZCkgfHwgcHVkX3NlY3QoKnB1ZCkgfHwgcHVkX2JhZCgqcHVkKSkKKwkJaWYgKHB1ZF9ub25lKCpwdWQpIHx8IHB1ZF9zZWN0KCpwdWQpKSB7CiAJCQlub3RlX3BhZ2Uoc3QsIGFkZHIsIDIsIHB1ZF92YWwoKnB1ZCkpOwotCQllbHNlCisJCX0gZWxzZSB7CisJCQlCVUdfT04ocHVkX2JhZCgqcHVkKSk7CiAJCQl3YWxrX3BtZChzdCwgcHVkLCBhZGRyKTsKKwkJfQogCX0KIH0KIApAQCAtMjc2LDEwICsyODQsMTIgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QR0Q7IGkrKywgcGdkKyspIHsKIAkJYWRkciA9IHN0YXJ0ICsgaSAqIFBHRElSX1NJWkU7Ci0JCWlmIChwZ2Rfbm9uZSgqcGdkKSB8fCBwZ2RfYmFkKCpwZ2QpKQorCQlpZiAocGdkX25vbmUoKnBnZCkpIHsKIAkJCW5vdGVfcGFnZShzdCwgYWRkciwgMSwgcGdkX3ZhbCgqcGdkKSk7Ci0JCWVsc2UKKwkJfSBlbHNlIHsKKwkJCUJVR19PTihwZ2RfYmFkKCpwZ2QpKTsKIAkJCXdhbGtfcHVkKHN0LCBwZ2QsIGFkZHIpOworCQl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2ZhdWx0LmMgYi9hcmNoL2FybTY0L21tL2ZhdWx0LmMKaW5kZXggYzExY2QyNy4uOTZkYTEzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvYXJtNjQvbW0vZmF1bHQuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAKIAlpZiAoZXNyICYgRVNSX0xOWF9FWEVDKSB7CiAJCXZtX2ZsYWdzID0gVk1fRVhFQzsKLQl9IGVsc2UgaWYgKChlc3IgJiBFU1JfRUwxX1dSSVRFKSAmJiAhKGVzciAmIEVTUl9FTDFfQ00pKSB7CisJfSBlbHNlIGlmICgoZXNyICYgRVNSX0VMeF9XTlIpICYmICEoZXNyICYgRVNSX0VMeF9DTSkpIHsKIAkJdm1fZmxhZ3MgPSBWTV9XUklURTsKIAkJbW1fZmxhZ3MgfD0gRkFVTFRfRkxBR19XUklURTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL2FybTY0L21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggMDIzNzQ3Yi4uMmRlOWQyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvYXJtNjQvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMzgsMTIgKzM4LDYgQEAKIH0KICNlbmRpZgogCi1zdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfYWRkcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCQkJICAgICAgaW50IHdyaXRlKQotewotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotfQotCiBpbnQgcG1kX2h1Z2UocG1kX3QgcG1kKQogewogCXJldHVybiAhKHBtZF92YWwocG1kKSAmIFBNRF9UQUJMRV9CSVQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9pbml0LmMgYi9hcmNoL2FybTY0L21tL2luaXQuYwppbmRleCBjOTU0NjRhLi43MTE0NWY5IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2luaXQuYworKysgYi9hcmNoL2FybTY0L21tL2luaXQuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgogCiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KQEAgLTEzNiwxMCArMTM3LDI5IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHBoeXNfYWRkcl90IG1lbW9yeV9saW1pdCA9IChwaHlzX2FkZHJfdClVTExPTkdfTUFYOworCisvKgorICogTGltaXQgdGhlIG1lbW9yeSBzaXplIHRoYXQgd2FzIHNwZWNpZmllZCB2aWEgRkRULgorICovCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9tZW0oY2hhciAqcCkKK3sKKwlpZiAoIXApCisJCXJldHVybiAxOworCisJbWVtb3J5X2xpbWl0ID0gbWVtcGFyc2UocCwgJnApICYgUEFHRV9NQVNLOworCXByX25vdGljZSgiTWVtb3J5IGxpbWl0ZWQgdG8gJWxsZE1CXG4iLCBtZW1vcnlfbGltaXQgPj4gMjApOworCisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibWVtIiwgZWFybHlfbWVtKTsKKwogdm9pZCBfX2luaXQgYXJtNjRfbWVtYmxvY2tfaW5pdCh2b2lkKQogewogCXBoeXNfYWRkcl90IGRtYV9waHlzX2xpbWl0ID0gMDsKIAorCW1lbWJsb2NrX2VuZm9yY2VfbWVtb3J5X2xpbWl0KG1lbW9yeV9saW1pdCk7CisKIAkvKgogCSAqIFJlZ2lzdGVyIHRoZSBrZXJuZWwgdGV4dCwga2VybmVsIGRhdGEsIGluaXRyZCwgYW5kIGluaXRpYWwKIAkgKiBwYWdldGFibGVzIHdpdGggbWVtYmxvY2suCkBAIC0yNzcsOCArMjk3LDggQEAKIAkJICAiICAgIHZtZW1tYXAgOiAweCUxNmx4IC0gMHglMTZseCAgICglNmxkIEdCIG1heGltdW0pXG4iCiAJCSAgIiAgICAgICAgICAgICAgMHglMTZseCAtIDB4JTE2bHggICAoJTZsZCBNQiBhY3R1YWwpXG4iCiAjZW5kaWYKLQkJICAiICAgIFBDSSBJL08gOiAweCUxNmx4IC0gMHglMTZseCAgICglNmxkIE1CKVxuIgogCQkgICIgICAgZml4ZWQgICA6IDB4JTE2bHggLSAweCUxNmx4ICAgKCU2bGQgS0IpXG4iCisJCSAgIiAgICBQQ0kgSS9PIDogMHglMTZseCAtIDB4JTE2bHggICAoJTZsZCBNQilcbiIKIAkJICAiICAgIG1vZHVsZXMgOiAweCUxNmx4IC0gMHglMTZseCAgICglNmxkIE1CKVxuIgogCQkgICIgICAgbWVtb3J5ICA6IDB4JTE2bHggLSAweCUxNmx4ICAgKCU2bGQgTUIpXG4iCiAJCSAgIiAgICAgIC5pbml0IDogMHglcCIgIiAtIDB4JXAiICIgICAoJTZsZCBLQilcbiIKQEAgLTI5MSw4ICszMTEsOCBAQAogCQkgIE1MTSgodW5zaWduZWQgbG9uZyl2aXJ0X3RvX3BhZ2UoUEFHRV9PRkZTRVQpLAogCQkgICAgICAodW5zaWduZWQgbG9uZyl2aXJ0X3RvX3BhZ2UoaGlnaF9tZW1vcnkpKSwKICNlbmRpZgotCQkgIE1MTSgodW5zaWduZWQgbG9uZylQQ0lfSU9CQVNFLCAodW5zaWduZWQgbG9uZylQQ0lfSU9CQVNFICsgU1pfMTZNKSwKIAkJICBNTEsoRklYQUREUl9TVEFSVCwgRklYQUREUl9UT1ApLAorCQkgIE1MTShQQ0lfSU9fU1RBUlQsIFBDSV9JT19FTkQpLAogCQkgIE1MTShNT0RVTEVTX1ZBRERSLCBNT0RVTEVTX0VORCksCiAJCSAgTUxNKFBBR0VfT0ZGU0VULCAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSksCiAJCSAgTUxLX1JPVU5EVVAoX19pbml0X2JlZ2luLCBfX2luaXRfZW5kKSwKQEAgLTMyNSw2ICszNDUsNyBAQAogCiB2b2lkIGZyZWVfaW5pdG1lbSh2b2lkKQogeworCWZpeHVwX2luaXQoKTsKIAlmcmVlX2luaXRtZW1fZGVmYXVsdCgwKTsKIAlmcmVlX2FsdGVybmF0aXZlc19tZW1vcnkoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaW9yZW1hcC5jIGIvYXJjaC9hcm02NC9tbS9pb3JlbWFwLmMKaW5kZXggY2JiOTljOC4uMDFlODhjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC9hcm02NC9tbS9pb3JlbWFwLmMKQEAgLTYyLDYgKzYyLDcgQEAKIAlpZiAoIWFyZWEpCiAJCXJldHVybiBOVUxMOwogCWFkZHIgPSAodW5zaWduZWQgbG9uZylhcmVhLT5hZGRyOworCWFyZWEtPnBoeXNfYWRkciA9IHBoeXNfYWRkcjsKIAogCWVyciA9IGlvcmVtYXBfcGFnZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSwgcGh5c19hZGRyLCBwcm90KTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tLmggYi9hcmNoL2FybTY0L21tL21tLmgKaW5kZXggNTBjMzM1MS4uZWY0N2Q5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9tbS5oCisrKyBiL2FyY2gvYXJtNjQvbW0vbW0uaApAQCAtMSArMSwzIEBACiBleHRlcm4gdm9pZCBfX2luaXQgYm9vdG1lbV9pbml0KHZvaWQpOworCit2b2lkIGZpeHVwX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL21tdS5jIGIvYXJjaC9hcm02NC9tbS9tbXUuYwppbmRleCA2MDMyZjNlLi5jNmRhYWY2IDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL21tdS5jCisrKyBiL2FyY2gvYXJtNjQvbW0vbW11LmMKQEAgLTI2LDYgKzI2LDggQEAKICNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CiAKICNpbmNsdWRlIDxhc20vY3B1dHlwZS5oPgogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KQEAgLTQ1LDgwICs0Nyw2IEBACiBzdHJ1Y3QgcGFnZSAqZW1wdHlfemVyb19wYWdlOwogRVhQT1JUX1NZTUJPTChlbXB0eV96ZXJvX3BhZ2UpOwogCi1zdHJ1Y3QgY2FjaGVwb2xpY3kgewotCWNvbnN0IGNoYXIJcG9saWN5WzE2XTsKLQl1NjQJCW1haXI7Ci0JdTY0CQl0Y3I7Ci19OwotCi1zdGF0aWMgc3RydWN0IGNhY2hlcG9saWN5IGNhY2hlX3BvbGljaWVzW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS5wb2xpY3kJCT0gInVuY2FjaGVkIiwKLQkJLm1haXIJCT0gMHg0NCwJCQkvKiBpbm5lciwgb3V0ZXIgbm9uLWNhY2hlYWJsZSAqLwotCQkudGNyCQk9IFRDUl9JUkdOX05DIHwgVENSX09SR05fTkMsCi0JfSwgewotCQkucG9saWN5CQk9ICJ3cml0ZXRocm91Z2giLAotCQkubWFpcgkJPSAweGFhLAkJCS8qIGlubmVyLCBvdXRlciB3cml0ZS10aHJvdWdoLCByZWFkLWFsbG9jYXRlICovCi0JCS50Y3IJCT0gVENSX0lSR05fV1QgfCBUQ1JfT1JHTl9XVCwKLQl9LCB7Ci0JCS5wb2xpY3kJCT0gIndyaXRlYmFjayIsCi0JCS5tYWlyCQk9IDB4ZWUsCQkJLyogaW5uZXIsIG91dGVyIHdyaXRlLWJhY2ssIHJlYWQtYWxsb2NhdGUgKi8KLQkJLnRjcgkJPSBUQ1JfSVJHTl9XQm5XQSB8IFRDUl9PUkdOX1dCbldBLAotCX0KLX07Ci0KLS8qCi0gKiBUaGVzZSBhcmUgdXNlZnVsIGZvciBpZGVudGlmeWluZyBjYWNoZSBjb2hlcmVuY3kgcHJvYmxlbXMgYnkgYWxsb3dpbmcgdGhlCi0gKiBjYWNoZSBvciB0aGUgY2FjaGUgYW5kIHdyaXRlYnVmZmVyIHRvIGJlIHR1cm5lZCBvZmYuIEl0IGNoYW5nZXMgdGhlIE5vcm1hbAotICogbWVtb3J5IGNhY2hpbmcgYXR0cmlidXRlcyBpbiB0aGUgTUFJUl9FTDEgcmVnaXN0ZXIuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2NhY2hlcG9saWN5KGNoYXIgKnApCi17Ci0JaW50IGk7Ci0JdTY0IHRtcDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNhY2hlX3BvbGljaWVzKTsgaSsrKSB7Ci0JCWludCBsZW4gPSBzdHJsZW4oY2FjaGVfcG9saWNpZXNbaV0ucG9saWN5KTsKLQotCQlpZiAobWVtY21wKHAsIGNhY2hlX3BvbGljaWVzW2ldLnBvbGljeSwgbGVuKSA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpID09IEFSUkFZX1NJWkUoY2FjaGVfcG9saWNpZXMpKSB7Ci0JCXByX2VycigiRVJST1I6IHVua25vd24gb3IgdW5zdXBwb3J0ZWQgY2FjaGUgcG9saWN5OiAlc1xuIiwgcCk7Ci0JCXJldHVybiAwOwotCX0KLQotCWZsdXNoX2NhY2hlX2FsbCgpOwotCi0JLyoKLQkgKiBNb2RpZnkgTVRfTk9STUFMIGF0dHJpYnV0ZXMgaW4gTUFJUl9FTDEuCi0JICovCi0JYXNtIHZvbGF0aWxlKAotCSIJbXJzCSUwLCBtYWlyX2VsMVxuIgotCSIJYmZpCSUwLCAlMSwgJTIsICM4XG4iCi0JIgltc3IJbWFpcl9lbDEsICUwXG4iCi0JIglpc2JcbiIKLQk6ICI9JnIiICh0bXApCi0JOiAiciIgKGNhY2hlX3BvbGljaWVzW2ldLm1haXIpLCAiaSIgKE1UX05PUk1BTCAqIDgpKTsKLQotCS8qCi0JICogTW9kaWZ5IFRDUiBQVFcgY2FjaGVhYmlsaXR5IGF0dHJpYnV0ZXMuCi0JICovCi0JYXNtIHZvbGF0aWxlKAotCSIJbXJzCSUwLCB0Y3JfZWwxXG4iCi0JIgliaWMJJTAsICUwLCAlMlxuIgotCSIJb3JyCSUwLCAlMCwgJTFcbiIKLQkiCW1zcgl0Y3JfZWwxLCAlMFxuIgotCSIJaXNiXG4iCi0JOiAiPSZyIiAodG1wKQotCTogInIiIChjYWNoZV9wb2xpY2llc1tpXS50Y3IpLCAiciIgKFRDUl9JUkdOX01BU0sgfCBUQ1JfT1JHTl9NQVNLKSk7Ci0KLQlmbHVzaF9jYWNoZV9hbGwoKTsKLQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImNhY2hlcG9saWN5IiwgZWFybHlfY2FjaGVwb2xpY3kpOwotCiBwZ3Byb3RfdCBwaHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAJCQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHZtYV9wcm90KQogewpAQCAtMTMzLDE5ICs2MSw0MiBAQAogc3RhdGljIHZvaWQgX19pbml0ICplYXJseV9hbGxvYyh1bnNpZ25lZCBsb25nIHN6KQogewogCXZvaWQgKnB0ciA9IF9fdmEobWVtYmxvY2tfYWxsb2Moc3osIHN6KSk7CisJQlVHX09OKCFwdHIpOwogCW1lbXNldChwdHIsIDAsIHN6KTsKIAlyZXR1cm4gcHRyOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYWxsb2NfaW5pdF9wdGUocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAorLyoKKyAqIHJlbWFwIGEgUE1EIGludG8gcGFnZXMKKyAqLworc3RhdGljIHZvaWQgc3BsaXRfcG1kKHBtZF90ICpwbWQsIHB0ZV90ICpwdGUpCit7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwbWRfcGZuKCpwbWQpOworCWludCBpID0gMDsKKworCWRvIHsKKwkJLyoKKwkJICogTmVlZCB0byBoYXZlIHRoZSBsZWFzdCByZXN0cmljdGl2ZSBwZXJtaXNzaW9ucyBhdmFpbGFibGUKKwkJICogcGVybWlzc2lvbnMgd2lsbCBiZSBmaXhlZCB1cCBsYXRlcgorCQkgKi8KKwkJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGZuLCBQQUdFX0tFUk5FTF9FWEVDKSk7CisJCXBmbisrOworCX0gd2hpbGUgKHB0ZSsrLCBpKyssIGkgPCBQVFJTX1BFUl9QVEUpOworfQorCitzdGF0aWMgdm9pZCBhbGxvY19pbml0X3B0ZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJICB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBwZm4sCi0JCQkJICBwZ3Byb3RfdCBwcm90KQorCQkJCSAgcGdwcm90X3QgcHJvdCwKKwkJCQkgIHZvaWQgKigqYWxsb2MpKHVuc2lnbmVkIGxvbmcgc2l6ZSkpCiB7CiAJcHRlX3QgKnB0ZTsKIAotCWlmIChwbWRfbm9uZSgqcG1kKSkgewotCQlwdGUgPSBlYXJseV9hbGxvYyhQVFJTX1BFUl9QVEUgKiBzaXplb2YocHRlX3QpKTsKKwlpZiAocG1kX25vbmUoKnBtZCkgfHwgcG1kX3NlY3QoKnBtZCkpIHsKKwkJcHRlID0gYWxsb2MoUFRSU19QRVJfUFRFICogc2l6ZW9mKHB0ZV90KSk7CisJCWlmIChwbWRfc2VjdCgqcG1kKSkKKwkJCXNwbGl0X3BtZChwbWQsIHB0ZSk7CiAJCV9fcG1kX3BvcHVsYXRlKHBtZCwgX19wYShwdGUpLCBQTURfVFlQRV9UQUJMRSk7CisJCWZsdXNoX3RsYl9hbGwoKTsKIAl9CiAJQlVHX09OKHBtZF9iYWQoKnBtZCkpOwogCkBAIC0xNTYsMzAgKzEwNyw0MiBAQAogCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgYWxsb2NfaW5pdF9wbWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgdW5zaWduZWQgbG9uZyBlbmQsIHBoeXNfYWRkcl90IHBoeXMsCi0JCQkJICBpbnQgbWFwX2lvKQordm9pZCBzcGxpdF9wdWQocHVkX3QgKm9sZF9wdWQsIHBtZF90ICpwbWQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gcHVkX3Bmbigqb2xkX3B1ZCkgPDwgUEFHRV9TSElGVDsKKwlwZ3Byb3RfdCBwcm90ID0gX19wZ3Byb3QocHVkX3ZhbCgqb2xkX3B1ZCkgXiBhZGRyKTsKKwlpbnQgaSA9IDA7CisKKwlkbyB7CisJCXNldF9wbWQocG1kLCBfX3BtZChhZGRyIHwgcHJvdCkpOworCQlhZGRyICs9IFBNRF9TSVpFOworCX0gd2hpbGUgKHBtZCsrLCBpKyssIGkgPCBQVFJTX1BFUl9QTUQpOworfQorCitzdGF0aWMgdm9pZCBhbGxvY19pbml0X3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHVkX3QgKnB1ZCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LAorCQkJCSAgdm9pZCAqKCphbGxvYykodW5zaWduZWQgbG9uZyBzaXplKSkKIHsKIAlwbWRfdCAqcG1kOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQlwbWR2YWxfdCBwcm90X3NlY3Q7Ci0JcGdwcm90X3QgcHJvdF9wdGU7Ci0KLQlpZiAobWFwX2lvKSB7Ci0JCXByb3Rfc2VjdCA9IFBST1RfU0VDVF9ERVZJQ0VfbkduUkU7Ci0JCXByb3RfcHRlID0gX19wZ3Byb3QoUFJPVF9ERVZJQ0VfbkduUkUpOwotCX0gZWxzZSB7Ci0JCXByb3Rfc2VjdCA9IFBST1RfU0VDVF9OT1JNQUxfRVhFQzsKLQkJcHJvdF9wdGUgPSBQQUdFX0tFUk5FTF9FWEVDOwotCX0KIAogCS8qCiAJICogQ2hlY2sgZm9yIGluaXRpYWwgc2VjdGlvbiBtYXBwaW5ncyBpbiB0aGUgcGdkL3B1ZCBhbmQgcmVtb3ZlIHRoZW0uCiAJICovCi0JaWYgKHB1ZF9ub25lKCpwdWQpIHx8IHB1ZF9iYWQoKnB1ZCkpIHsKLQkJcG1kID0gZWFybHlfYWxsb2MoUFRSU19QRVJfUE1EICogc2l6ZW9mKHBtZF90KSk7Ci0JCXB1ZF9wb3B1bGF0ZSgmaW5pdF9tbSwgcHVkLCBwbWQpOworCWlmIChwdWRfbm9uZSgqcHVkKSB8fCBwdWRfc2VjdCgqcHVkKSkgeworCQlwbWQgPSBhbGxvYyhQVFJTX1BFUl9QTUQgKiBzaXplb2YocG1kX3QpKTsKKwkJaWYgKHB1ZF9zZWN0KCpwdWQpKSB7CisJCQkvKgorCQkJICogbmVlZCB0byBoYXZlIHRoZSAxRyBvZiBtYXBwaW5ncyBjb250aW51ZSB0byBiZQorCQkJICogcHJlc2VudAorCQkJICovCisJCQlzcGxpdF9wdWQocHVkLCBwbWQpOworCQl9CisJCXB1ZF9wb3B1bGF0ZShtbSwgcHVkLCBwbWQpOworCQlmbHVzaF90bGJfYWxsKCk7CiAJfQorCUJVR19PTihwdWRfYmFkKCpwdWQpKTsKIAogCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKIAlkbyB7CkBAIC0xODcsMzEgKzE1MCw1MSBAQAogCQkvKiB0cnkgc2VjdGlvbiBtYXBwaW5nIGZpcnN0ICovCiAJCWlmICgoKGFkZHIgfCBuZXh0IHwgcGh5cykgJiB+U0VDVElPTl9NQVNLKSA9PSAwKSB7CiAJCQlwbWRfdCBvbGRfcG1kID0qcG1kOwotCQkJc2V0X3BtZChwbWQsIF9fcG1kKHBoeXMgfCBwcm90X3NlY3QpKTsKKwkJCXNldF9wbWQocG1kLCBfX3BtZChwaHlzIHwKKwkJCQkJICAgcGdwcm90X3ZhbChta19zZWN0X3Byb3QocHJvdCkpKSk7CiAJCQkvKgogCQkJICogQ2hlY2sgZm9yIHByZXZpb3VzIHRhYmxlIGVudHJpZXMgY3JlYXRlZCBkdXJpbmcKIAkJCSAqIGJvb3QgKF9fY3JlYXRlX3BhZ2VfdGFibGVzKSBhbmQgZmx1c2ggdGhlbS4KIAkJCSAqLwotCQkJaWYgKCFwbWRfbm9uZShvbGRfcG1kKSkKKwkJCWlmICghcG1kX25vbmUob2xkX3BtZCkpIHsKIAkJCQlmbHVzaF90bGJfYWxsKCk7CisJCQkJaWYgKHBtZF90YWJsZShvbGRfcG1kKSkgeworCQkJCQlwaHlzX2FkZHJfdCB0YWJsZSA9IF9fcGEocHRlX29mZnNldF9tYXAoJm9sZF9wbWQsIDApKTsKKwkJCQkJaWYgKCFXQVJOX09OX09OQ0Uoc2xhYl9pc19hdmFpbGFibGUoKSkpCisJCQkJCQltZW1ibG9ja19mcmVlKHRhYmxlLCBQQUdFX1NJWkUpOworCQkJCX0KKwkJCX0KIAkJfSBlbHNlIHsKIAkJCWFsbG9jX2luaXRfcHRlKHBtZCwgYWRkciwgbmV4dCwgX19waHlzX3RvX3BmbihwaHlzKSwKLQkJCQkgICAgICAgcHJvdF9wdGUpOworCQkJCSAgICAgICBwcm90LCBhbGxvYyk7CiAJCX0KIAkJcGh5cyArPSBuZXh0IC0gYWRkcjsKIAl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGFsbG9jX2luaXRfcHVkKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kLCBwaHlzX2FkZHJfdCBwaHlzLAotCQkJCSAgaW50IG1hcF9pbykKK3N0YXRpYyBpbmxpbmUgYm9vbCB1c2VfMUdfYmxvY2sodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG5leHQsCisJCQl1bnNpZ25lZCBsb25nIHBoeXMpCit7CisJaWYgKFBBR0VfU0hJRlQgIT0gMTIpCisJCXJldHVybiBmYWxzZTsKKworCWlmICgoKGFkZHIgfCBuZXh0IHwgcGh5cykgJiB+UFVEX01BU0spICE9IDApCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBhbGxvY19pbml0X3B1ZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkJICBwaHlzX2FkZHJfdCBwaHlzLCBwZ3Byb3RfdCBwcm90LAorCQkJCSAgdm9pZCAqKCphbGxvYykodW5zaWduZWQgbG9uZyBzaXplKSkKIHsKIAlwdWRfdCAqcHVkOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKIAogCWlmIChwZ2Rfbm9uZSgqcGdkKSkgewotCQlwdWQgPSBlYXJseV9hbGxvYyhQVFJTX1BFUl9QVUQgKiBzaXplb2YocHVkX3QpKTsKLQkJcGdkX3BvcHVsYXRlKCZpbml0X21tLCBwZ2QsIHB1ZCk7CisJCXB1ZCA9IGFsbG9jKFBUUlNfUEVSX1BVRCAqIHNpemVvZihwdWRfdCkpOworCQlwZ2RfcG9wdWxhdGUobW0sIHBnZCwgcHVkKTsKIAl9CiAJQlVHX09OKHBnZF9iYWQoKnBnZCkpOwogCkBAIC0yMjIsMTAgKzIwNSwxMCBAQAogCQkvKgogCQkgKiBGb3IgNEsgZ3JhbnVsZSBvbmx5LCBhdHRlbXB0IHRvIHB1dCBkb3duIGEgMUdCIGJsb2NrCiAJCSAqLwotCQlpZiAoIW1hcF9pbyAmJiAoUEFHRV9TSElGVCA9PSAxMikgJiYKLQkJICAgICgoYWRkciB8IG5leHQgfCBwaHlzKSAmIH5QVURfTUFTSykgPT0gMCkgeworCQlpZiAodXNlXzFHX2Jsb2NrKGFkZHIsIG5leHQsIHBoeXMpKSB7CiAJCQlwdWRfdCBvbGRfcHVkID0gKnB1ZDsKLQkJCXNldF9wdWQocHVkLCBfX3B1ZChwaHlzIHwgUFJPVF9TRUNUX05PUk1BTF9FWEVDKSk7CisJCQlzZXRfcHVkKHB1ZCwgX19wdWQocGh5cyB8CisJCQkJCSAgIHBncHJvdF92YWwobWtfc2VjdF9wcm90KHByb3QpKSkpOwogCiAJCQkvKgogCQkJICogSWYgd2UgaGF2ZSBhbiBvbGQgdmFsdWUgZm9yIGEgcHVkLCBpdCB3aWxsCkBAIC0yMzUsMTIgKzIxOCwxNSBAQAogCQkJICogTG9vayB1cCB0aGUgb2xkIHBtZCB0YWJsZSBhbmQgZnJlZSBpdC4KIAkJCSAqLwogCQkJaWYgKCFwdWRfbm9uZShvbGRfcHVkKSkgewotCQkJCXBoeXNfYWRkcl90IHRhYmxlID0gX19wYShwbWRfb2Zmc2V0KCZvbGRfcHVkLCAwKSk7Ci0JCQkJbWVtYmxvY2tfZnJlZSh0YWJsZSwgUEFHRV9TSVpFKTsKIAkJCQlmbHVzaF90bGJfYWxsKCk7CisJCQkJaWYgKHB1ZF90YWJsZShvbGRfcHVkKSkgeworCQkJCQlwaHlzX2FkZHJfdCB0YWJsZSA9IF9fcGEocG1kX29mZnNldCgmb2xkX3B1ZCwgMCkpOworCQkJCQlpZiAoIVdBUk5fT05fT05DRShzbGFiX2lzX2F2YWlsYWJsZSgpKSkKKwkJCQkJCW1lbWJsb2NrX2ZyZWUodGFibGUsIFBBR0VfU0laRSk7CisJCQkJfQogCQkJfQogCQl9IGVsc2UgewotCQkJYWxsb2NfaW5pdF9wbWQocHVkLCBhZGRyLCBuZXh0LCBwaHlzLCBtYXBfaW8pOworCQkJYWxsb2NfaW5pdF9wbWQobW0sIHB1ZCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCwgYWxsb2MpOwogCQl9CiAJCXBoeXMgKz0gbmV4dCAtIGFkZHI7CiAJfSB3aGlsZSAocHVkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CkBAIC0yNTAsOSArMjM2LDEwIEBACiAgKiBDcmVhdGUgdGhlIHBhZ2UgZGlyZWN0b3J5IGVudHJpZXMgYW5kIGFueSBuZWNlc3NhcnkgcGFnZSB0YWJsZXMgZm9yIHRoZQogICogbWFwcGluZyBzcGVjaWZpZWQgYnkgJ21kJy4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IF9fY3JlYXRlX21hcHBpbmcocGdkX3QgKnBnZCwgcGh5c19hZGRyX3QgcGh5cywKLQkJCQkgICAgdW5zaWduZWQgbG9uZyB2aXJ0LCBwaHlzX2FkZHJfdCBzaXplLAotCQkJCSAgICBpbnQgbWFwX2lvKQorc3RhdGljIHZvaWQgIF9fY3JlYXRlX21hcHBpbmcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QsCisJCQkJICAgIHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgdmlydCwKKwkJCQkgICAgcGh5c19hZGRyX3Qgc2l6ZSwgcGdwcm90X3QgcHJvdCwKKwkJCQkgICAgdm9pZCAqKCphbGxvYykodW5zaWduZWQgbG9uZyBzaXplKSkKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHIsIGxlbmd0aCwgZW5kLCBuZXh0OwogCkBAIC0yNjIsMzIgKzI0OSw5NiBAQAogCWVuZCA9IGFkZHIgKyBsZW5ndGg7CiAJZG8gewogCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWFsbG9jX2luaXRfcHVkKHBnZCwgYWRkciwgbmV4dCwgcGh5cywgbWFwX2lvKTsKKwkJYWxsb2NfaW5pdF9wdWQobW0sIHBnZCwgYWRkciwgbmV4dCwgcGh5cywgcHJvdCwgYWxsb2MpOwogCQlwaHlzICs9IG5leHQgLSBhZGRyOwogCX0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgY3JlYXRlX21hcHBpbmcocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyB2aXJ0LAotCQkJCSAgcGh5c19hZGRyX3Qgc2l6ZSkKK3N0YXRpYyB2b2lkICpsYXRlX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwl2b2lkICpwdHI7CisKKwlCVUdfT04oc2l6ZSA+IFBBR0VfU0laRSk7CisJcHRyID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoUEdBTExPQ19HRlApOworCUJVR19PTighcHRyKTsKKwlyZXR1cm4gcHRyOworfQorCitzdGF0aWMgdm9pZCBfX3JlZiBjcmVhdGVfbWFwcGluZyhwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIHZpcnQsCisJCQkJICBwaHlzX2FkZHJfdCBzaXplLCBwZ3Byb3RfdCBwcm90KQogewogCWlmICh2aXJ0IDwgVk1BTExPQ19TVEFSVCkgewogCQlwcl93YXJuKCJCVUc6IG5vdCBjcmVhdGluZyBtYXBwaW5nIGZvciAlcGEgYXQgMHglMDE2bHggLSBvdXRzaWRlIGtlcm5lbCByYW5nZVxuIiwKIAkJCSZwaHlzLCB2aXJ0KTsKIAkJcmV0dXJuOwogCX0KLQlfX2NyZWF0ZV9tYXBwaW5nKHBnZF9vZmZzZXRfayh2aXJ0ICYgUEFHRV9NQVNLKSwgcGh5cywgdmlydCwgc2l6ZSwgMCk7CisJX19jcmVhdGVfbWFwcGluZygmaW5pdF9tbSwgcGdkX29mZnNldF9rKHZpcnQgJiBQQUdFX01BU0spLCBwaHlzLCB2aXJ0LAorCQkJIHNpemUsIHByb3QsIGVhcmx5X2FsbG9jKTsKIH0KIAotdm9pZCBfX2luaXQgY3JlYXRlX2lkX21hcHBpbmcocGh5c19hZGRyX3QgYWRkciwgcGh5c19hZGRyX3Qgc2l6ZSwgaW50IG1hcF9pbykKK3ZvaWQgX19pbml0IGNyZWF0ZV9wZ2RfbWFwcGluZyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGh5c19hZGRyX3QgcGh5cywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZpcnQsIHBoeXNfYWRkcl90IHNpemUsCisJCQkgICAgICAgcGdwcm90X3QgcHJvdCkKIHsKLQlpZiAoKGFkZHIgPj4gUEdESVJfU0hJRlQpID49IEFSUkFZX1NJWkUoaWRtYXBfcGdfZGlyKSkgewotCQlwcl93YXJuKCJCVUc6IG5vdCBjcmVhdGluZyBpZCBtYXBwaW5nIGZvciAlcGFcbiIsICZhZGRyKTsKKwlfX2NyZWF0ZV9tYXBwaW5nKG1tLCBwZ2Rfb2Zmc2V0KG1tLCB2aXJ0KSwgcGh5cywgdmlydCwgc2l6ZSwgcHJvdCwKKwkJCQlsYXRlX2FsbG9jKTsKK30KKworc3RhdGljIHZvaWQgY3JlYXRlX21hcHBpbmdfbGF0ZShwaHlzX2FkZHJfdCBwaHlzLCB1bnNpZ25lZCBsb25nIHZpcnQsCisJCQkJICBwaHlzX2FkZHJfdCBzaXplLCBwZ3Byb3RfdCBwcm90KQoreworCWlmICh2aXJ0IDwgVk1BTExPQ19TVEFSVCkgeworCQlwcl93YXJuKCJCVUc6IG5vdCBjcmVhdGluZyBtYXBwaW5nIGZvciAlcGEgYXQgMHglMDE2bHggLSBvdXRzaWRlIGtlcm5lbCByYW5nZVxuIiwKKwkJCSZwaHlzLCB2aXJ0KTsKIAkJcmV0dXJuOwogCX0KLQlfX2NyZWF0ZV9tYXBwaW5nKCZpZG1hcF9wZ19kaXJbcGdkX2luZGV4KGFkZHIpXSwKLQkJCSBhZGRyLCBhZGRyLCBzaXplLCBtYXBfaW8pOworCisJcmV0dXJuIF9fY3JlYXRlX21hcHBpbmcoJmluaXRfbW0sIHBnZF9vZmZzZXRfayh2aXJ0ICYgUEFHRV9NQVNLKSwKKwkJCQlwaHlzLCB2aXJ0LCBzaXplLCBwcm90LCBsYXRlX2FsbG9jKTsKIH0KIAorI2lmZGVmIENPTkZJR19ERUJVR19ST0RBVEEKK3N0YXRpYyB2b2lkIF9faW5pdCBfX21hcF9tZW1ibG9jayhwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kKQoreworCS8qCisJICogU2V0IHVwIHRoZSBleGVjdXRhYmxlIHJlZ2lvbnMgdXNpbmcgdGhlIGV4aXN0aW5nIHNlY3Rpb24gbWFwcGluZ3MKKwkgKiBmb3Igbm93LiBUaGlzIHdpbGwgZ2V0IG1vcmUgZmluZSBncmFpbmVkIGxhdGVyIG9uY2UgYWxsIG1lbW9yeQorCSAqIGlzIG1hcHBlZAorCSAqLworCXVuc2lnbmVkIGxvbmcga2VybmVsX3hfc3RhcnQgPSByb3VuZF9kb3duKF9fcGEoX3N0ZXh0KSwgU0VDVElPTl9TSVpFKTsKKwl1bnNpZ25lZCBsb25nIGtlcm5lbF94X2VuZCA9IHJvdW5kX3VwKF9fcGEoX19pbml0X2VuZCksIFNFQ1RJT05fU0laRSk7CisKKwlpZiAoZW5kIDwga2VybmVsX3hfc3RhcnQpIHsKKwkJY3JlYXRlX21hcHBpbmcoc3RhcnQsIF9fcGh5c190b192aXJ0KHN0YXJ0KSwKKwkJCWVuZCAtIHN0YXJ0LCBQQUdFX0tFUk5FTCk7CisJfSBlbHNlIGlmIChzdGFydCA+PSBrZXJuZWxfeF9lbmQpIHsKKwkJY3JlYXRlX21hcHBpbmcoc3RhcnQsIF9fcGh5c190b192aXJ0KHN0YXJ0KSwKKwkJCWVuZCAtIHN0YXJ0LCBQQUdFX0tFUk5FTCk7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXJ0IDwga2VybmVsX3hfc3RhcnQpCisJCQljcmVhdGVfbWFwcGluZyhzdGFydCwgX19waHlzX3RvX3ZpcnQoc3RhcnQpLAorCQkJCWtlcm5lbF94X3N0YXJ0IC0gc3RhcnQsCisJCQkJUEFHRV9LRVJORUwpOworCQljcmVhdGVfbWFwcGluZyhrZXJuZWxfeF9zdGFydCwKKwkJCQlfX3BoeXNfdG9fdmlydChrZXJuZWxfeF9zdGFydCksCisJCQkJa2VybmVsX3hfZW5kIC0ga2VybmVsX3hfc3RhcnQsCisJCQkJUEFHRV9LRVJORUxfRVhFQyk7CisJCWlmIChrZXJuZWxfeF9lbmQgPCBlbmQpCisJCQljcmVhdGVfbWFwcGluZyhrZXJuZWxfeF9lbmQsCisJCQkJX19waHlzX3RvX3ZpcnQoa2VybmVsX3hfZW5kKSwKKwkJCQllbmQgLSBrZXJuZWxfeF9lbmQsCisJCQkJUEFHRV9LRVJORUwpOworCX0KKworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9faW5pdCBfX21hcF9tZW1ibG9jayhwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kKQoreworCWNyZWF0ZV9tYXBwaW5nKHN0YXJ0LCBfX3BoeXNfdG9fdmlydChzdGFydCksIGVuZCAtIHN0YXJ0LAorCQkJUEFHRV9LRVJORUxfRVhFQyk7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IG1hcF9tZW0odm9pZCkKIHsKIAlzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZWc7CkBAIC0zMzIsMTQgKzM4Myw1MyBAQAogCQkJbWVtYmxvY2tfc2V0X2N1cnJlbnRfbGltaXQobGltaXQpOwogCQl9CiAjZW5kaWYKLQotCQljcmVhdGVfbWFwcGluZyhzdGFydCwgX19waHlzX3RvX3ZpcnQoc3RhcnQpLCBlbmQgLSBzdGFydCk7CisJCV9fbWFwX21lbWJsb2NrKHN0YXJ0LCBlbmQpOwogCX0KIAogCS8qIExpbWl0IG5vIGxvbmdlciByZXF1aXJlZC4gKi8KIAltZW1ibG9ja19zZXRfY3VycmVudF9saW1pdChNRU1CTE9DS19BTExPQ19BTllXSEVSRSk7CiB9CiAKK3ZvaWQgX19pbml0IGZpeHVwX2V4ZWN1dGFibGUodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfREVCVUdfUk9EQVRBCisJLyogbm93IHRoYXQgd2UgYXJlIGFjdHVhbGx5IGZ1bGx5IG1hcHBlZCwgbWFrZSB0aGUgc3RhcnQvZW5kIG1vcmUgZmluZSBncmFpbmVkICovCisJaWYgKCFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKV9zdGV4dCwgU0VDVElPTl9TSVpFKSkgeworCQl1bnNpZ25lZCBsb25nIGFsaWduZWRfc3RhcnQgPSByb3VuZF9kb3duKF9fcGEoX3N0ZXh0KSwKKwkJCQkJCQlTRUNUSU9OX1NJWkUpOworCisJCWNyZWF0ZV9tYXBwaW5nKGFsaWduZWRfc3RhcnQsIF9fcGh5c190b192aXJ0KGFsaWduZWRfc3RhcnQpLAorCQkJCV9fcGEoX3N0ZXh0KSAtIGFsaWduZWRfc3RhcnQsCisJCQkJUEFHRV9LRVJORUwpOworCX0KKworCWlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylfX2luaXRfZW5kLCBTRUNUSU9OX1NJWkUpKSB7CisJCXVuc2lnbmVkIGxvbmcgYWxpZ25lZF9lbmQgPSByb3VuZF91cChfX3BhKF9faW5pdF9lbmQpLAorCQkJCQkJCVNFQ1RJT05fU0laRSk7CisJCWNyZWF0ZV9tYXBwaW5nKF9fcGEoX19pbml0X2VuZCksICh1bnNpZ25lZCBsb25nKV9faW5pdF9lbmQsCisJCQkJYWxpZ25lZF9lbmQgLSBfX3BhKF9faW5pdF9lbmQpLAorCQkJCVBBR0VfS0VSTkVMKTsKKwl9CisjZW5kaWYKK30KKworI2lmZGVmIENPTkZJR19ERUJVR19ST0RBVEEKK3ZvaWQgbWFya19yb2RhdGFfcm8odm9pZCkKK3sKKwljcmVhdGVfbWFwcGluZ19sYXRlKF9fcGEoX3N0ZXh0KSwgKHVuc2lnbmVkIGxvbmcpX3N0ZXh0LAorCQkJCSh1bnNpZ25lZCBsb25nKV9ldGV4dCAtICh1bnNpZ25lZCBsb25nKV9zdGV4dCwKKwkJCQlQQUdFX0tFUk5FTF9FWEVDIHwgUFRFX1JET05MWSk7CisKK30KKyNlbmRpZgorCit2b2lkIGZpeHVwX2luaXQodm9pZCkKK3sKKwljcmVhdGVfbWFwcGluZ19sYXRlKF9fcGEoX19pbml0X2JlZ2luKSwgKHVuc2lnbmVkIGxvbmcpX19pbml0X2JlZ2luLAorCQkJKHVuc2lnbmVkIGxvbmcpX19pbml0X2VuZCAtICh1bnNpZ25lZCBsb25nKV9faW5pdF9iZWdpbiwKKwkJCVBBR0VfS0VSTkVMKTsKK30KKwogLyoKICAqIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMsIGluaXRpYWxpc2VzIHRoZSB6b25lIG1lbW9yeQogICogbWFwcyBhbmQgc2V0cyB1cCB0aGUgemVybyBwYWdlLgpAQCAtMzQ5LDEzICs0MzksNyBAQAogCXZvaWQgKnplcm9fcGFnZTsKIAogCW1hcF9tZW0oKTsKLQotCS8qCi0JICogRmluYWxseSBmbHVzaCB0aGUgY2FjaGVzIGFuZCB0bGIgdG8gZW5zdXJlIHRoYXQgd2UncmUgaW4gYQotCSAqIGNvbnNpc3RlbnQgc3RhdGUuCi0JICovCi0JZmx1c2hfY2FjaGVfYWxsKCk7Ci0JZmx1c2hfdGxiX2FsbCgpOworCWZpeHVwX2V4ZWN1dGFibGUoKTsKIAogCS8qIGFsbG9jYXRlIHRoZSB6ZXJvIHBhZ2UuICovCiAJemVyb19wYWdlID0gZWFybHlfYWxsb2MoUEFHRV9TSVpFKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcHJvYy5TIGIvYXJjaC9hcm02NC9tbS9wcm9jLlMKaW5kZXggNGU3NzhiMS4uMjhlZWJmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9wcm9jLlMKKysrIGIvYXJjaC9hcm02NC9tbS9wcm9jLlMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCXJldAogRU5EUFJPQyhjcHVfZG9faWRsZSkKIAotI2lmZGVmIENPTkZJR19BUk02NF9DUFVfU1VTUEVORAorI2lmZGVmIENPTkZJR19DUFVfUE0KIC8qKgogICogY3B1X2RvX3N1c3BlbmQgLSBzYXZlIENQVSByZWdpc3RlcnMgY29udGV4dAogICoKQEAgLTI0NCwxNCArMjQ0LDE4IEBACiBFTkRQUk9DKF9fY3B1X3NldHVwKQogCiAJLyoKKwkgKiBXZSBzZXQgdGhlIGRlc2lyZWQgdmFsdWUgZXhwbGljaXRseSwgaW5jbHVkaW5nIHRob3NlIG9mIHRoZQorCSAqIHJlc2VydmVkIGJpdHMuIFRoZSB2YWx1ZXMgb2YgYml0cyBFRSAmIEUwRSB3ZXJlIHNldCBlYXJseSBpbgorCSAqIGVsMl9zZXR1cCwgd2hpY2ggYXJlIGxlZnQgdW50b3VjaGVkIGJlbG93LgorCSAqCiAJICogICAgICAgICAgICAgICAgIG4gbiAgICAgICAgICAgIFQKIAkgKiAgICAgICBVIEUgICAgICBXVCBUIFVEICAgICBVUyBJSEJTCiAJICogICAgICAgQ0UwICAgICAgWFdIVyBDWiAgICAgTUUgVEVFQSBTCiAJICogLi4uLiAuSUVFIC4uLi4gTkVBSSBURS5JIC4uQUQgREVOMCBBQ0FNCi0JICogMDAxMSAwLi4uIDExMDEgLi4wLiAuLjAuIDEwLi4gLi4uLiAuLi4uIDwgaGFyZHdhcmUgcmVzZXJ2ZWQKLQkgKiAuLi4uIC4xLi4gLi4uLiAwMS4xIDExLjEgLi4wMSAwMDAxIDExMDEgPCBzb2Z0d2FyZSBzZXR0aW5ncworCSAqIDAwMTEgMC4uLiAxMTAxIC4uMC4gLi4wLiAxMC4uIC4wLi4gLi4uLiA8IGhhcmR3YXJlIHJlc2VydmVkCisJICogLi4uLiAuMS4uIC4uLi4gMDEuMSAxMS4xIC4uMDEgMC4wMSAxMTAxIDwgc29mdHdhcmUgc2V0dGluZ3MKIAkgKi8KIAkudHlwZQljcnZhbCwgI29iamVjdAogY3J2YWw6Ci0JLndvcmQJMHgwMDA4MDJlMgkJCS8vIGNsZWFyCi0JLndvcmQJMHgwNDA1ZDExZAkJCS8vIHNldAorCS53b3JkCTB4ZmNmZmZmZmYJCQkvLyBjbGVhcgorCS53b3JkCTB4MzRkNWQ5MWQJCQkvLyBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZGVmY29uZmlnCmluZGV4IDQ3MzNlMzguLmNlMDAzMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2RlZmNvbmZpZwpAQCAtMSwzMyArMSwyOCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19PUFJPRklMRT1tCi0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JPQVJEX0FUTkdXMTAwX01LST15CiAjIENPTkZJR19PV05FUlNISVBfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX05NSV9ERUJVR0dJTkc9eQotQ09ORklHX1BNPXkKIENPTkZJR19DUFVfRlJFUT15CiAjIENPTkZJR19DUFVfRlJFUV9TVEFUIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORD15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CiBDT05GSUdfQVZSMzJfQVQzMkFQX0NQVUZSRVE9eQotQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15CkBAIC01Miw3ICs0Nyw2IEBACiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9eQotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0cgaXMgbm90IHNldAogQ09ORklHX0JSSURHRT1tCiBDT05GSUdfVkxBTl84MDIxUT1tCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgpAQCAtNjAsNyArNTQsNiBAQAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CkBAIC03MCwyOCArNjMsMjQgQEAKIENPTkZJR19CTEtfREVWX0xPT1A9bQogQ09ORklHX0JMS19ERVZfTkJEPW0KIENPTkZJR19CTEtfREVWX1JBTT1tCi1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKIENPTkZJR19BVE1FTF9UQ0xJQj15CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfVFVOPW0KLUNPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01BQ0I9eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQotQ09ORklHX1BQUF9GSUxURVI9eQotQ09ORklHX1BQUF9BU1lOQz1tCi1DT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0ZJTFRFUj15CiBDT05GSUdfUFBQX01QUEU9bQogQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBfQVNZTkM9bQogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0NIQVJERVY9bQpAQCAtMTI4LDcgKzExNyw2IEBACiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfRVhUNF9GUz15Ci0jIENPTkZJR19FWFQ0X0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX0ZVU0VfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KQEAgLTE0MCw3ICsxMjgsNiBAQAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19VQklGU19GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzPXkKQEAgLTE0OSw4ICsxMzYsNyBAQAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQogQ09ORklHX05MU19JU084ODU5XzE9bQogQ09ORklHX05MU19VVEY4PW0KLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX2V2a2xjZDEwMF9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZXZrbGNkMTAwX2RlZmNvbmZpZwppbmRleCAxYmUwZWUzLi4wMWZmNjMyIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZXZrbGNkMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZXZrbGNkMTAwX2RlZmNvbmZpZwpAQCAtMSwzNSArMSwzMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19PUFJPRklMRT1tCi0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JPQVJEX0FUTkdXMTAwX01LST15CiBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYPXkKIENPTkZJR19CT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFhfUVZHQT15CiAjIENPTkZJR19PV05FUlNISVBfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX05NSV9ERUJVR0dJTkc9eQotQ09ORklHX1BNPXkKIENPTkZJR19DUFVfRlJFUT15CiAjIENPTkZJR19DUFVfRlJFUV9TVEFUIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORD15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CiBDT05GSUdfQVZSMzJfQVQzMkFQX0NQVUZSRVE9eQotQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15CkBAIC01NCw3ICs0OSw2IEBACiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9eQotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0cgaXMgbm90IHNldAogQ09ORklHX0JSSURHRT1tCiBDT05GSUdfVkxBTl84MDIxUT1tCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgpAQCAtNjIsNyArNTYsNiBAQAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CkBAIC03MiwyMSArNjUsMTcgQEAKIENPTkZJR19CTEtfREVWX0xPT1A9bQogQ09ORklHX0JMS19ERVZfTkJEPW0KIENPTkZJR19CTEtfREVWX1JBTT1tCi1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKIENPTkZJR19BVE1FTF9UQ0xJQj15CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfVFVOPW0KLUNPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01BQ0I9eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQotQ09ORklHX1BQUF9GSUxURVI9eQotQ09ORklHX1BQUF9BU1lOQz1tCi1DT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0ZJTFRFUj15CiBDT05GSUdfUFBQX01QUEU9bQogQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBfQVNZTkM9bQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPW0KICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKQEAgLTk0LDkgKzgzLDkgQEAKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fV005N1hYPW0KICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQVRNRUw9eQogQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPW0KIENPTkZJR19JMkNfQ0hBUkRFVj1tCkBAIC0xNDQsNyArMTMzLDYgQEAKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPXkKLSMgQ09ORklHX0VYVDRfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQpAQCAtMTU2LDcgKzE0NCw2IEBACiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX1VCSUZTX0ZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQpAQCAtMTY1LDggKzE1Miw3IEBACiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCiBDT05GSUdfTkxTX1VURjg9bQotQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfZXZrbGNkMTAxX2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9ldmtsY2QxMDFfZGVmY29uZmlnCmluZGV4IDc5NmU1MzYuLmM0MDIxZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9ldmtsY2QxMDFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9ldmtsY2QxMDFfZGVmY29uZmlnCkBAIC0xLDM0ICsxLDI5IEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX09QUk9GSUxFPW0KLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfQk9BUkRfQVROR1cxMDBfTUtJPXkKIENPTkZJR19CT0FSRF9BVE5HVzEwMF9FVktMQ0QxMFg9eQogIyBDT05GSUdfT1dORVJTSElQX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19OTUlfREVCVUdHSU5HPXkKLUNPTkZJR19QTT15CiBDT05GSUdfQ1BVX0ZSRVE9eQogIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQ9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQogQ09ORklHX0FWUjMyX0FUMzJBUF9DUFVGUkVRPXkKLUNPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUz15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQpAQCAtNTMsNyArNDgsNiBAQAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPXkKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKIENPTkZJR19CUklER0U9bQogQ09ORklHX1ZMQU5fODAyMVE9bQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKQEAgLTYxLDcgKzU1LDYgQEAKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQpAQCAtNzEsMjEgKzY0LDE3IEBACiBDT05GSUdfQkxLX0RFVl9MT09QPW0KIENPTkZJR19CTEtfREVWX05CRD1tCiBDT05GSUdfQkxLX0RFVl9SQU09bQotQ09ORklHX01JU0NfREVWSUNFUz15CiBDT05GSUdfQVRNRUxfVENMSUI9eQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX1RVTj1tCi1DT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NQUNCPXkKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfRklMVEVSPXkKLUNPTkZJR19QUFBfQVNZTkM9bQotQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9GSUxURVI9eQogQ09ORklHX1BQUF9NUFBFPW0KIENPTkZJR19QUFBPRT1tCitDT05GSUdfUFBQX0FTWU5DPW0KICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj1tCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CkBAIC05Myw5ICs4Miw5IEBACiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWD1tCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0NIQVJERVY9bQpAQCAtMTQzLDcgKzEzMiw2IEBACiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfRVhUNF9GUz15Ci0jIENPTkZJR19FWFQ0X0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX0ZVU0VfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KQEAgLTE1NSw3ICsxNDMsNiBAQAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19VQklGU19GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzPXkKQEAgLTE2NCw4ICsxNTEsNyBAQAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQogQ09ORklHX05MU19JU084ODU5XzE9bQogQ09ORklHX05MU19VVEY4PW0KLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX21ybXRfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwX21ybXRfZGVmY29uZmlnCmluZGV4IDY4Mzg3ODEuLmZmY2MyOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMF9tcm10X2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBfbXJtdF9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTEgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFUz15CkBAIC0xNyw4ICsxNCw4IEBACiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKICMgQ09ORklHX09XTkVSU0hJUF9UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfUE09eQogIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0CitDT05GSUdfUE09eQogQ09ORklHX0NQVV9GUkVRPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKQEAgLTM3LDcgKzM0LDYgQEAKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogQ09ORklHX0JUPW0KLUNPTkZJR19CVF9MMkNBUD1tCiBDT05GSUdfQlRfUkZDT01NPW0KIENPTkZJR19CVF9SRkNPTU1fVFRZPXkKIENPTkZJR19CVF9ISURQPW0KQEAgLTQ5LDcgKzQ1LDYgQEAKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQpAQCAtNTcsMTAgKzUyLDcgQEAKIENPTkZJR19NVERfREFUQUZMQVNIPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUFDQj15Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKQEAgLTcwLDkgKzYyLDkgQEAKIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2PW0KICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKQEAgLTg0LDkgKzc2LDcgQEAKIENPTkZJR19BVDMyQVA3MDBYX1dEVD15CiBDT05GSUdfRkI9eQogQ09ORklHX0ZCX0FUTUVMPXkKLUNPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQotQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQogQ09ORklHX1NPVU5EPW0KIENPTkZJR19TTkQ9bQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQpAQCAtMTI5LDEwICsxMTksNyBAQAogQ09ORklHX0NPTkZJR0ZTX0ZTPXkKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19TTUJfRlM9bQotQ09ORklHX1NNQl9OTFNfREVGQVVMVD15CiBDT05GSUdfQ0lGUz1tCiBDT05GSUdfQ0lGU19TVEFUUz15CiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0g9eQpAQCAtMTQyLDEwICsxMjksOCBAQAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX05MU19VVEY4PXkKLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfQ1JDX0NDSVRUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZGVmY29uZmlnIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9kZWZjb25maWcKaW5kZXggOTdmZTFiMy4uMDQ5NjI2NCAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9kZWZjb25maWcKQEAgLTEsMzMgKzEsMjggQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfT1BST0ZJTEU9bQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0lJPXkKICMgQ09ORklHX09XTkVSU0hJUF9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfTk1JX0RFQlVHR0lORz15Ci1DT05GSUdfUE09eQogQ09ORklHX0NQVV9GUkVRPXkKICMgQ09ORklHX0NQVV9GUkVRX1NUQVQgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKIENPTkZJR19BVlIzMl9BVDMyQVBfQ1BVRlJFUT15Ci1DT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlM9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKQEAgLTUyLDcgKzQ3LDYgQEAKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUz15Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRyBpcyBub3Qgc2V0CiBDT05GSUdfQlJJREdFPW0KIENPTkZJR19WTEFOXzgwMjFRPW0KIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCkBAIC02MCw3ICs1NCw2IEBACiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogQ09ORklHX01URD15CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQpAQCAtNzIsMjggKzY1LDI0IEBACiBDT05GSUdfQkxLX0RFVl9MT09QPW0KIENPTkZJR19CTEtfREVWX05CRD1tCiBDT05GSUdfQkxLX0RFVl9SQU09bQotQ09ORklHX01JU0NfREVWSUNFUz15CiBDT05GSUdfQVRNRUxfVENMSUI9eQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX1RVTj1tCi1DT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NQUNCPXkKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfRklMVEVSPXkKLUNPTkZJR19QUFBfQVNZTkM9bQotQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9GSUxURVI9eQogQ09ORklHX1BQUF9NUFBFPW0KIENPTkZJR19QUFBPRT1tCitDT05GSUdfUFBQX0FTWU5DPW0KICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19DSEFSREVWPW0KQEAgLTEzMCw3ICsxMTksNiBAQAogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX0VYVDRfRlM9eQotIyBDT05GSUdfRVhUNF9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ETk9USUZZIGlzIG5vdCBzZXQKIENPTkZJR19GVVNFX0ZTPW0KIENPTkZJR19NU0RPU19GUz1tCkBAIC0xNDIsNyArMTMwLDYgQEAKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfVUJJRlNfRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD1tCiBDT05GSUdfTkZTRF9WMz15CkBAIC0xNTEsOCArMTM4LDcgQEAKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KIENPTkZJR19OTFNfSVNPODg1OV8xPW0KIENPTkZJR19OTFNfVVRGOD1tCi1DT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFQlVHX0ZTPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZXZrbGNkMTAwX2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZXZrbGNkMTAwX2RlZmNvbmZpZwppbmRleCBhMTc2ZDI0Li44OWMyY2RhIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBta2lpX2V2a2xjZDEwMF9kZWZjb25maWcKKysrIGIvYXJjaC9hdnIzMi9jb25maWdzL2F0bmd3MTAwbWtpaV9ldmtsY2QxMDBfZGVmY29uZmlnCkBAIC0xLDM2ICsxLDMxIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX09QUk9GSUxFPW0KLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfQk9BUkRfQVROR1cxMDBfTUtJST15CiBDT05GSUdfQk9BUkRfQVROR1cxMDBfTUtJSV9MQ0Q9eQogQ09ORklHX0JPQVJEX0FUTkdXMTAwX0VWS0xDRDEwWD15CiBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYX1FWR0E9eQogIyBDT05GSUdfT1dORVJTSElQX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19OTUlfREVCVUdHSU5HPXkKLUNPTkZJR19QTT15CiBDT05GSUdfQ1BVX0ZSRVE9eQogIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQ9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQogQ09ORklHX0FWUjMyX0FUMzJBUF9DUFVGUkVRPXkKLUNPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUz15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQpAQCAtNTUsNyArNTAsNiBAQAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPXkKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKIENPTkZJR19CUklER0U9bQogQ09ORklHX1ZMQU5fODAyMVE9bQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKQEAgLTYzLDcgKzU3LDYgQEAKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CkBAIC03NSwyMSArNjgsMTcgQEAKIENPTkZJR19CTEtfREVWX0xPT1A9bQogQ09ORklHX0JMS19ERVZfTkJEPW0KIENPTkZJR19CTEtfREVWX1JBTT1tCi1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKIENPTkZJR19BVE1FTF9UQ0xJQj15CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfVFVOPW0KLUNPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01BQ0I9eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQotQ09ORklHX1BQUF9GSUxURVI9eQotQ09ORklHX1BQUF9BU1lOQz1tCi1DT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0ZJTFRFUj15CiBDT05GSUdfUFBQX01QUEU9bQogQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBfQVNZTkM9bQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPW0KICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKQEAgLTk3LDkgKzg2LDkgQEAKIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CiBDT05GSUdfVE9VQ0hTQ1JFRU5fV005N1hYPW0KICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQVRNRUw9eQogQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPW0KIENPTkZJR19JMkNfQ0hBUkRFVj1tCkBAIC0xNDcsNyArMTM2LDYgQEAKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPXkKLSMgQ09ORklHX0VYVDRfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQpAQCAtMTU5LDcgKzE0Nyw2IEBACiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX1VCSUZTX0ZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9bQogQ09ORklHX05GU0RfVjM9eQpAQCAtMTY4LDggKzE1NSw3IEBACiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCiBDT05GSUdfTkxTX1VURjg9bQotQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBta2lpX2V2a2xjZDEwMV9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBta2lpX2V2a2xjZDEwMV9kZWZjb25maWcKaW5kZXggZDFiZjZkY2YuLjFiNGQ0YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdG5ndzEwMG1raWlfZXZrbGNkMTAxX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRuZ3cxMDBta2lpX2V2a2xjZDEwMV9kZWZjb25maWcKQEAgLTEsMzUgKzEsMzAgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfT1BST0ZJTEU9bQotIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0lJPXkKIENPTkZJR19CT0FSRF9BVE5HVzEwMF9NS0lJX0xDRD15CiBDT05GSUdfQk9BUkRfQVROR1cxMDBfRVZLTENEMTBYPXkKICMgQ09ORklHX09XTkVSU0hJUF9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfTk1JX0RFQlVHR0lORz15Ci1DT05GSUdfUE09eQogQ09ORklHX0NQVV9GUkVRPXkKICMgQ09ORklHX0NQVV9GUkVRX1NUQVQgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKIENPTkZJR19BVlIzMl9BVDMyQVBfQ1BVRlJFUT15Ci1DT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlM9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKQEAgLTU0LDcgKzQ5LDYgQEAKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVJfWFRBQkxFUz15Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRyBpcyBub3Qgc2V0CiBDT05GSUdfQlJJREdFPW0KIENPTkZJR19WTEFOXzgwMjFRPW0KIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCkBAIC02Miw3ICs1Niw2IEBACiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogQ09ORklHX01URD15CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQpAQCAtNzQsMjEgKzY3LDE3IEBACiBDT05GSUdfQkxLX0RFVl9MT09QPW0KIENPTkZJR19CTEtfREVWX05CRD1tCiBDT05GSUdfQkxLX0RFVl9SQU09bQotQ09ORklHX01JU0NfREVWSUNFUz15CiBDT05GSUdfQVRNRUxfVENMSUI9eQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX1RVTj1tCi1DT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NQUNCPXkKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfRklMVEVSPXkKLUNPTkZJR19QUFBfQVNZTkM9bQotQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9GSUxURVI9eQogQ09ORklHX1BQUF9NUFBFPW0KIENPTkZJR19QUFBPRT1tCitDT05GSUdfUFBQX0FTWU5DPW0KICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj1tCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CkBAIC05Niw5ICs4NSw5IEBACiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogQ09ORklHX1RPVUNIU0NSRUVOX1dNOTdYWD1tCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0NIQVJERVY9bQpAQCAtMTQ2LDcgKzEzNSw2IEBACiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfRVhUNF9GUz15Ci0jIENPTkZJR19FWFQ0X0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX0ZVU0VfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KQEAgLTE1OCw3ICsxNDYsNiBAQAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19VQklGU19GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzPXkKQEAgLTE2Nyw4ICsxNTQsNyBAQAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQogQ09ORklHX05MU19JU084ODU5XzE9bQogQ09ORklHX05MU19VVEY4PW0KLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwMl9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDAyX2RlZmNvbmZpZwppbmRleCBiMDU2ODIwLi45YjhiNTJlIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDAyX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDAyX2RlZmNvbmZpZwpAQCAtMSwzMiArMSwyNyBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19PUFJPRklMRT1tCi0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogIyBDT05GSUdfT1dORVJTSElQX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19OTUlfREVCVUdHSU5HPXkKLUNPTkZJR19QTT15CiBDT05GSUdfQ1BVX0ZSRVE9eQogIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQ9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQogQ09ORklHX0FWUjMyX0FUMzJBUF9DUFVGUkVRPXkKLUNPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUz15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQpAQCAtNTQsNyArNDksNiBAQAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CkBAIC02Myw3ICs1Nyw2IEBACiBDT05GSUdfQkxLX0RFVl9MT09QPW0KIENPTkZJR19CTEtfREVWX05CRD1tCiBDT05GSUdfQkxLX0RFVl9SQU09bQotQ09ORklHX01JU0NfREVWSUNFUz15CiBDT05GSUdfQVRNRUxfVENMSUI9eQogQ09ORklHX0FUTUVMX1NTQz1tCiAjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldApAQCAtNzUsMTQgKzY4LDExIEBACiBDT05GSUdfUEFUQV9BVDMyPW0KIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19UVU49bQotQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUFDQj15Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX0FTWU5DPW0KLUNPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQVNZTkM9bQogQ09ORklHX0lOUFVUPW0KIENPTkZJR19JTlBVVF9FVkRFVj1tCiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CkBAIC05MSwxMCArODEsMTAgQEAKIENPTkZJR19NT1VTRV9HUElPPW0KICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19DSEFSREVWPW0KQEAgLTEwOCwxMCArOTgsOCBAQAogQ09ORklHX0FUMzJBUDcwMFhfV0RUPXkKIENPTkZJR19GQj15CiBDT05GSUdfRkJfQVRNRUw9eQotQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CiBDT05GSUdfTENEX0xUVjM1MFFWPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAogQ09ORklHX1NPVU5EPW0KIENPTkZJR19TTkQ9bQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQpAQCAtMTE5LDcgKzEwNyw2IEBACiAjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0FUNzNDMjEzPW0KLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPXkKIENPTkZJR19VU0JfWkVSTz1tCiBDT05GSUdfVVNCX0VUSD1tCkBAIC0xNDcsNyArMTM0LDYgQEAKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPXkKLSMgQ09ORklHX0VYVDRfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQpAQCAtMTU5LDE1ICsxNDUsMTMgQEAKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfVUJJRlNfRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfQ0lGUz1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCiBDT05GSUdfTkxTX1VURjg9bQotQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDAzX2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDNfZGVmY29uZmlnCmluZGV4IDBjZDIzYTMuLmNjY2UxYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDNfZGVmY29uZmlnCkBAIC0xLDMzICsxLDI4IEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX09QUk9GSUxFPW0KLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfQk9BUkRfQVRTVEsxMDAzPXkKICMgQ09ORklHX09XTkVSU0hJUF9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfTk1JX0RFQlVHR0lORz15Ci1DT05GSUdfUE09eQogQ09ORklHX0NQVV9GUkVRPXkKICMgQ09ORklHX0NQVV9GUkVRX1NUQVQgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKIENPTkZJR19BVlIzMl9BVDMyQVBfQ1BVRlJFUT15Ci1DT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlM9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKQEAgLTQzLDcgKzM4LDYgQEAKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQpAQCAtNTIsNyArNDYsNiBAQAogQ09ORklHX0JMS19ERVZfTE9PUD1tCiBDT05GSUdfQkxLX0RFVl9OQkQ9bQogQ09ORklHX0JMS19ERVZfUkFNPW0KLUNPTkZJR19NSVNDX0RFVklDRVM9eQogQ09ORklHX0FUTUVMX1RDTElCPXkKIENPTkZJR19BVE1FTF9TU0M9bQogIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKQEAgLTYzLDEyICs1NiwxMCBAQAogIyBDT05GSUdfU0FUQV9QTVAgaXMgbm90IHNldAogQ09ORklHX1BBVEFfQVQzMj1tCiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX0FTWU5DPW0KLUNPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQVNZTkM9bQogQ09ORklHX0lOUFVUPW0KIENPTkZJR19JTlBVVF9FVkRFVj1tCiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CkBAIC03NywxMCArNjgsMTAgQEAKIENPTkZJR19NT1VTRV9HUElPPW0KICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19DSEFSREVWPW0KQEAgLTk4LDcgKzg5LDYgQEAKIENPTkZJR19TTkRfUENNX09TUz1tCiAjIENPTkZJR19TTkRfRFJJVkVSUyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0FUNzNDMjEzPW0KLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPXkKIENPTkZJR19VU0JfWkVSTz1tCiBDT05GSUdfVVNCX0VUSD1tCkBAIC0xMjYsNyArMTE2LDYgQEAKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPXkKLSMgQ09ORklHX0VYVDRfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQpAQCAtMTQyLDggKzEzMSw3IEBACiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCiBDT05GSUdfTkxTX1VURjg9bQotQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDA0X2RlZmNvbmZpZyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDRfZGVmY29uZmlnCmluZGV4IGFjMTA0MWYuLmU2NDI4OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9hdHN0azEwMDRfZGVmY29uZmlnCkBAIC0xLDMzICsxLDI4IEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19SRUxBWT15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX09QUk9GSUxFPW0KLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfQk9BUkRfQVRTVEsxMDA0PXkKICMgQ09ORklHX09XTkVSU0hJUF9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfTk1JX0RFQlVHR0lORz15Ci1DT05GSUdfUE09eQogQ09ORklHX0NQVV9GUkVRPXkKICMgQ09ORklHX0NQVV9GUkVRX1NUQVQgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKIENPTkZJR19BVlIzMl9BVDMyQVBfQ1BVRlJFUT15Ci1DT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlM9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKQEAgLTQzLDcgKzM4LDYgQEAKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQpAQCAtNTIsNyArNDYsNiBAQAogQ09ORklHX0JMS19ERVZfTE9PUD1tCiBDT05GSUdfQkxLX0RFVl9OQkQ9bQogQ09ORklHX0JMS19ERVZfUkFNPW0KLUNPTkZJR19NSVNDX0RFVklDRVM9eQogQ09ORklHX0FUTUVMX1RDTElCPXkKIENPTkZJR19BVE1FTF9TU0M9bQogIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKQEAgLTYzLDEyICs1NiwxMCBAQAogIyBDT05GSUdfU0FUQV9QTVAgaXMgbm90IHNldAogQ09ORklHX1BBVEFfQVQzMj1tCiBDT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX0FTWU5DPW0KLUNPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQVNZTkM9bQogQ09ORklHX0lOUFVUPW0KIENPTkZJR19JTlBVVF9FVkRFVj1tCiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CkBAIC03NywxMCArNjgsMTAgQEAKIENPTkZJR19NT1VTRV9HUElPPW0KICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9bQogQ09ORklHX0kyQ19DSEFSREVWPW0KQEAgLTk0LDEwICs4NSw4IEBACiBDT05GSUdfQVQzMkFQNzAwWF9XRFQ9eQogQ09ORklHX0ZCPXkKIENPTkZJR19GQl9BVE1FTD15Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPXkKIENPTkZJR19MQ0RfTFRWMzUwUVY9eQotIyBDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVD15CiBDT05GSUdfVVNCX1pFUk89bQogQ09ORklHX1VTQl9FVEg9bQpAQCAtMTI1LDcgKzExNCw2IEBACiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfRVhUNF9GUz15Ci0jIENPTkZJR19FWFQ0X0ZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX0ZVU0VfRlM9bQogQ09ORklHX01TRE9TX0ZTPW0KQEAgLTE0MSw4ICsxMjksNyBAQAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQogQ09ORklHX05MU19JU084ODU5XzE9bQogQ09ORklHX05MU19VVEY4PW0KLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL2F0c3RrMTAwNl9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDA2X2RlZmNvbmZpZwppbmRleCBlYTRmNjcwLi43ZDY2OWY3IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDA2X2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvYXRzdGsxMDA2X2RlZmNvbmZpZwpAQCAtMSwzMyArMSwyOCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19PUFJPRklMRT1tCi0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JPQVJEX0FUU1RLMTAwNj15CiAjIENPTkZJR19PV05FUlNISVBfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX05NSV9ERUJVR0dJTkc9eQotQ09ORklHX1BNPXkKIENPTkZJR19DUFVfRlJFUT15CiAjIENPTkZJR19DUFVfRlJFUV9TVEFUIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORD15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT15CiBDT05GSUdfQVZSMzJfQVQzMkFQX0NQVUZSRVE9eQotQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15CkBAIC01NSw3ICs1MCw2IEBACiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogQ09ORklHX01URD15CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKQEAgLTY2LDcgKzYwLDYgQEAKIENPTkZJR19CTEtfREVWX0xPT1A9bQogQ09ORklHX0JMS19ERVZfTkJEPW0KIENPTkZJR19CTEtfREVWX1JBTT1tCi1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKIENPTkZJR19BVE1FTF9UQ0xJQj15CiBDT05GSUdfQVRNRUxfU1NDPW0KICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CkBAIC03OCwxNCArNzEsMTEgQEAKIENPTkZJR19QQVRBX0FUMzI9bQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX1RVTj1tCi1DT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NQUNCPXkKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfQVNZTkM9bQotQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9BU1lOQz1tCiBDT05GSUdfSU5QVVQ9bQogQ09ORklHX0lOUFVUX0VWREVWPW0KICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKQEAgLTk0LDEwICs4NCwxMCBAQAogQ09ORklHX01PVVNFX0dQSU89bQogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0FUTUVMPXkKIENPTkZJR19TRVJJQUxfQVRNRUxfQ09OU09MRT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0kyQz1tCiBDT05GSUdfSTJDX0NIQVJERVY9bQpAQCAtMTExLDEwICsxMDEsOCBAQAogQ09ORklHX0FUMzJBUDcwMFhfV0RUPXkKIENPTkZJR19GQj15CiBDT05GSUdfRkJfQVRNRUw9eQotQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CiBDT05GSUdfTENEX0xUVjM1MFFWPXkKLSMgQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAogQ09ORklHX1NPVU5EPW0KIENPTkZJR19TTkQ9bQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQpAQCAtMTIyLDcgKzExMCw2IEBACiAjIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0FUNzNDMjEzPW0KLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUPXkKIENPTkZJR19VU0JfWkVSTz1tCiBDT05GSUdfVVNCX0VUSD1tCkBAIC0xNTAsNyArMTM3LDYgQEAKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQzX0ZTX1hBVFRSIGlzIG5vdCBzZXQKIENPTkZJR19FWFQ0X0ZTPXkKLSMgQ09ORklHX0VYVDRfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CiBDT05GSUdfRlVTRV9GUz1tCiBDT05GSUdfTVNET1NfRlM9bQpAQCAtMTYyLDE1ICsxNDgsMTMgQEAKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfVUJJRlNfRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfQ0lGUz1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD1tCiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCiBDT05GSUdfTkxTX1VURjg9bQotQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvZmF2ci0zMl9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvZmF2ci0zMl9kZWZjb25maWcKaW5kZXggYjNlYjY3ZC4uNTYwYzUyZiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2ZhdnItMzJfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9mYXZyLTMyX2RlZmNvbmZpZwpAQCAtMSwyOCArMSwyMyBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19PUFJPRklMRT1tCi0jIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JPQVJEX0ZBVlJfMzI9eQogIyBDT05GSUdfT1dORVJTSElQX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19OTUlfREVCVUdHSU5HPXkKLUNPTkZJR19QTT15CiBDT05GSUdfQ1BVX0ZSRVE9eQogIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVCBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQ9eQpAQCAtMzcsNyArMzIsNiBAQAogQ09ORklHX0lQX1BOUD15CiBDT05GSUdfSVBfUE5QX0RIQ1A9eQogQ09ORklHX05FVF9JUElQPW0KLUNPTkZJR19ORVRfSVBHUkU9bQogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQpAQCAtNTksNyArNTMsNiBAQAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CkBAIC03MCwxNCArNjMsMTEgQEAKIENPTkZJR19BVE1FTF9UQ0xJQj15CiBDT05GSUdfQVRNRUxfU1NDPW0KIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX01BQ0I9eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9bQotQ09ORklHX1BQUF9BU1lOQz1tCi1DT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0FTWU5DPW0KIENPTkZJR19JTlBVVF9NT1VTRURFVj1tCiBDT05GSUdfSU5QVVRfRVZERVY9bQogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldApAQCAtODgsMTAgKzc4LDEwIEBACiBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0Nj1tCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQVRNRUw9eQogQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPW0KIENPTkZJR19JMkNfQ0hBUkRFVj1tCkBAIC0xMDUsMTIgKzk1LDEwIEBACiBDT05GSUdfQVQzMkFQNzAwWF9XRFQ9eQogQ09ORklHX0ZCPXkKIENPTkZJR19GQl9BVE1FTD15Ci1DT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKICMgQ09ORklHX0xDRF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAogQ09ORklHX0JBQ0tMSUdIVF9QV009bQogQ09ORklHX1NPVU5EPW0KIENPTkZJR19TT1VORF9QUklNRT1tCi0jIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVD15CiBDT05GSUdfVVNCX1pFUk89bQogQ09ORklHX1VTQl9FVEg9bQpAQCAtMTQ1LDEzICsxMzMsMTEgQEAKIENPTkZJR19KRkZTMl9GUz15CiAjIENPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUiBpcyBub3Qgc2V0CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KIENPTkZJR19OTFNfSVNPODg1OV8xPW0KIENPTkZJR19OTFNfVVRGOD1tCi1DT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFQlVHX0ZTPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvaGFtbWVyaGVhZF9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvaGFtbWVyaGVhZF9kZWZjb25maWcKaW5kZXggNDkxMmYwYS4uZDU3ZmFkYiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL2hhbW1lcmhlYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9oYW1tZXJoZWFkX2RlZmNvbmZpZwpAQCAtMSwyNiArMSwyMiBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogQ09ORklHX09QUk9GSUxFPW0KLSMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfQk9BUkRfSEFNTUVSSEVBRD15CiBDT05GSUdfQk9BUkRfSEFNTUVSSEVBRF9VU0I9eQogQ09ORklHX0JPQVJEX0hBTU1FUkhFQURfTENEPXkKQEAgLTUzLDEzICs0OSwxMSBAQAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPXkKLSMgQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HIGlzIG5vdCBzZXQKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQpAQCAtNzAsMTYgKzY0LDEzIEBACiBDT05GSUdfU0NTST1tCiBDT05GSUdfQkxLX0RFVl9TRD1tCiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NQUNCPXkKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiBDT05GSUdfSU5QVVRfRVZERVY9bQogQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQVRNRUw9eQogQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPW0KIENPTkZJR19JMkNfQ0hBUkRFVj1tCkBAIC0xMTQsMTAgKzEwNSw4IEBACiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPW0KIENPTkZJR19ISURfUEVUQUxZTlg9bQogQ09ORklHX0hJRF9TQU1TVU5HPW0KLUNPTkZJR19ISURfU09OWT1tCiBDT05GSUdfSElEX1NVTlBMVVM9bQogQ09ORklHX1VTQj1tCi0jIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPW0KIENPTkZJR19VU0JfSVNQMTE2WF9IQ0Q9bQogQ09ORklHX1VTQl9TVE9SQUdFPW0KQEAgLTE0MCwxNiArMTI5LDEzIEBACiBDT05GSUdfQ09ORklHRlNfRlM9eQogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQogQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQogQ09ORklHX05MU19JU084ODU5XzE9bQogQ09ORklHX05MU19VVEY4PW0KLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19GUkFNRV9QT0lOVEVSPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fUENCQz1tCiBDT05GSUdfQ1JZUFRPX0FSQzQ9bQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9jb25maWdzL21lcmlzY19kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvbWVyaXNjX2RlZmNvbmZpZwppbmRleCBiOWVmNGNjLi5lNmE5Y2I3IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2NvbmZpZ3MvbWVyaXNjX2RlZmNvbmZpZworKysgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvbWVyaXNjX2RlZmNvbmZpZwpAQCAtMSwyMiArMSwxOSBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19CT0FSRF9NRVJJU0M9eQogQ09ORklHX0FQNzAwWF8zMl9CSVRfU01DPXkKICMgQ09ORklHX09XTkVSU0hJUF9UUkFDRSBpcyBub3Qgc2V0CkBAIC0zOSwxNCArMzYsMTAgQEAKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogQ09ORklHX0NBTj15Ci1DT05GSUdfQ0FOX1JBVz15Ci1DT05GSUdfQ0FOX0JDTT15CiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NPTkNBVD15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQpAQCAtNjAsMTAgKzUzLDcgQEAKIENPTkZJR19CTEtfREVWX1NEPXkKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUFDQj15Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKQEAgLTc0LDExICs2NCwxMCBAQAogQ09ORklHX0lOUFVUX1VJTlBVVD15CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUyBpcyBub3Qgc2V0Ci1DT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9BVE1FTD15CiBDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEU9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKQEAgLTg5LDEzICs3OCw5IEBACiBDT05GSUdfR1BJT19TWVNGUz15CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKIENPTkZJR19GQj15CiBDT05GSUdfRkJfQVRNRUw9eQotQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CiAjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgaXMgbm90IHNldAotQ09ORklHX0RJU1BMQVlfU1VQUE9SVD15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CiBDT05GSUdfTE9HTz15CiBDT05GSUdfTU1DPXkKQEAgLTEyMSwxMiArMTA2LDEwIEBACiBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlk9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKIENPTkZJR19OTFNfVVRGOD15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2NvbmZpZ3MvbWltYzIwMF9kZWZjb25maWcgYi9hcmNoL2F2cjMyL2NvbmZpZ3MvbWltYzIwMF9kZWZjb25maWcKaW5kZXggZDYzMGUwOC4uNDljN2U4OSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9jb25maWdzL21pbWMyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXZyMzIvY29uZmlncy9taW1jMjAwX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyMSBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfQk9BUkRfTUlNQzIwMD15CiAjIENPTkZJR19PV05FUlNISVBfVFJBQ0UgaXMgbm90IHNldAogQ09ORklHX05NSV9ERUJVR0dJTkc9eQotQ09ORklHX1BNPXkKIENPTkZJR19DUFVfRlJFUT15CiAjIENPTkZJR19DUFVfRlJFUV9TVEFUIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9PTkRFTUFORD15CkBAIC01MCw3ICs0Niw2IEBACiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogQ09ORklHX01URD15CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKQEAgLTYwLDE3ICs1NSwxNCBAQAogQ09ORklHX0VFUFJPTV9BVDI0PXkKIENPTkZJR19FRVBST01fQVQyNT15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NQUNCPXkKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQVRNRUw9eQogQ09ORklHX1NFUklBTF9BVE1FTF9DT05TT0xFPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CkBAIC0xMDksMTUgKzEwMSwxMyBAQAogQ09ORklHX0NPTkZJR0ZTX0ZTPXkKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKIENPTkZJR19OTFNfVVRGOD15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0NSWVBUT19FQ0I9eQogQ09ORklHX0NSWVBUT19QQ0JDPXkKIENPTkZJR19DUllQVE9fQVJDND15CmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDRiZWZmOTcuLjM1ODAwNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0zMCw3ICszMCw3IEBACiAjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKIAogI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoVEFTS19TSVpFIC8gUEdESVJfU0laRSkKLSNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTBVTAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07CkBAIC04Niw5ICs4Niw2IEBACiAjZGVmaW5lIF9QQUdFX0JJVF9QUkVTRU5UCTEwCiAjZGVmaW5lIF9QQUdFX0JJVF9BQ0NFU1NFRAkxMSAvKiBzb2Z0d2FyZTogcGFnZSB3YXMgYWNjZXNzZWQgKi8KIAotLyogVGhlIGZvbGxvd2luZyBmbGFncyBhcmUgb25seSB2YWxpZCB3aGVuICFQUkVTRU5UICovCi0jZGVmaW5lIF9QQUdFX0JJVF9GSUxFCQkwIC8qIHNvZnR3YXJlOiBwYWdlY2FjaGUgb3Igc3dhcD8gKi8KLQogI2RlZmluZSBfUEFHRV9XVAkJKDEgPDwgX1BBR0VfQklUX1dUKQogI2RlZmluZSBfUEFHRV9ESVJUWQkJKDEgPDwgX1BBR0VfQklUX0RJUlRZKQogI2RlZmluZSBfUEFHRV9FWEVDVVRFCQkoMSA8PCBfUEFHRV9CSVRfRVhFQ1VURSkKQEAgLTEwMSw3ICs5OCw2IEBACiAvKiBTb2Z0d2FyZSBmbGFncyAqLwogI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkJKDEgPDwgX1BBR0VfQklUX0FDQ0VTU0VEKQogI2RlZmluZSBfUEFHRV9QUkVTRU5UCQkoMSA8PCBfUEFHRV9CSVRfUFJFU0VOVCkKLSNkZWZpbmUgX1BBR0VfRklMRQkJKDEgPDwgX1BBR0VfQklUX0ZJTEUpCiAKIC8qCiAgKiBQYWdlIHR5cGVzLCBpLmUuIHNpemVzLiBfUEFHRV9UWVBFX05PTkUgY29ycmVzcG9uZHMgdG8gd2hhdCBpcwpAQCAtMjEwLDE0ICsyMDYsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyBub3QgdHJ1ZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQotewotCXJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOwotfQotCiAvKiBNdXRhdG9yIGZ1bmN0aW9ucyBmb3IgUFRFIGJpdHMgKi8KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCiB7CkBAIC0zMjksNyArMzE3LDYgQEAKICAqIEVuY29kZSBhbmQgZGVjb2RlIGEgc3dhcCBlbnRyeQogICoKICAqIENvbnN0cmFpbnRzOgotICogICBfUEFHRV9GSUxFIGF0IGJpdCAwCiAgKiAgIF9QQUdFX1RZUEVfKiBhdCBiaXRzIDItMyAoZm9yIGVtdWxhdGluZyBfUEFHRV9QUk9UTk9ORSkKICAqICAgX1BBR0VfUFJFU0VOVCBhdCBiaXQgMTAKICAqCkBAIC0zNDYsMTggKzMzMyw2IEBACiAjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKIAotLyoKLSAqIEVuY29kZSBhbmQgZGVjb2RlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZyBlbnRyeS4gV2UgaGF2ZSB0bwotICogcHJlc2VydmUgX1BBR0VfRklMRSBhbmQgX1BBR0VfUFJFU0VOVCBoZXJlLiBfUEFHRV9UWVBFXyogaXNuJ3QKLSAqIG5lY2Vzc2FyeSwgc2luY2UgX1BBR0VfRklMRSBpbXBsaWVzICFfUEFHRV9QUk9UTk9ORSAoPykKLSAqLwotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkzMAotI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKQkoKChwdGVfdmFsKHB0ZSkgPj4gMSkgJiAweDFmZikJCVwKLQkJCQkgfCAoKHB0ZV92YWwocHRlKSA+PiAxMSkgPDwgOSkpCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCSgocHRlX3QpIHsgKCgoKG9mZikgJiAweDFmZikgPDwgMSkJXAotCQkJCQkgICAgfCAoKChvZmYpID4+IDkpIDw8IDExKQlcCi0JCQkJCSAgICB8IF9QQUdFX0ZJTEUpIH0pCi0KIHR5cGVkZWYgcHRlX3QgKnB0ZV9hZGRyX3Q7CiAKICNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggYzFlYjA4MC4uMjAxMWJlZSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0xMCw3ICsxMCw3IEBACiAKICNpbmNsdWRlIDx1YXBpL2FzbS91bmlzdGQuaD4KIAotI2RlZmluZSBOUl9zeXNjYWxscwkJMjg0CisjZGVmaW5lIE5SX3N5c2NhbGxzCQkzMjEKIAogLyogT2xkIHN0dWZmICovCiAjZGVmaW5lIF9fSUdOT1JFX3VzZWxpYgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oCmluZGV4IDg4MjJiZjQuLmJiZTJmYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2F2cjMyL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKQEAgLTIyMiw3ICsyMjIsNiBAQAogI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQJCTIwNwogI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMJMjA4CiAjZGVmaW5lIF9fTlJfc2V0X3RpZF9hZGRyZXNzCTIwOQotCiAjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlCTIxMAogI2RlZmluZSBfX05SX3RpbWVyX3NldHRpbWUJMjExCiAjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZQkyMTIKQEAgLTIzOCw3ICsyMzcsNiBAQAogCQkJCS8qIDIyMiByZXNlcnZlZCBmb3IgdHV4ICovCiAjZGVmaW5lIF9fTlJfdXRpbWVzCQkyMjMKICNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjI0Ci0KICNkZWZpbmUgX19OUl9jYWNoZWZsdXNoCQkyMjUKIAogI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCTIyNgpAQCAtMjgxLDcgKzI3OSw2IEBACiAjZGVmaW5lIF9fTlJfdGVlCQkyNjMKICNkZWZpbmUgX19OUl92bXNwbGljZQkJMjY0CiAjZGVmaW5lIF9fTlJfZXBvbGxfcHdhaXQJMjY1Ci0KICNkZWZpbmUgX19OUl9tc2dnZXQJCTI2NgogI2RlZmluZSBfX05SX21zZ3NuZAkJMjY3CiAjZGVmaW5lIF9fTlJfbXNncmN2CQkyNjgKQEAgLTI5NCwxMSArMjkxLDQ3IEBACiAjZGVmaW5lIF9fTlJfc2htZ2V0CQkyNzUKICNkZWZpbmUgX19OUl9zaG1kdAkJMjc2CiAjZGVmaW5lIF9fTlJfc2htY3RsCQkyNzcKLQogI2RlZmluZSBfX05SX3V0aW1lbnNhdAkJMjc4CiAjZGVmaW5lIF9fTlJfc2lnbmFsZmQJCTI3OQogLyogMjgwIHdhcyBfX05SX3RpbWVyZmQgKi8KICNkZWZpbmUgX19OUl9ldmVudGZkCQkyODEKICNkZWZpbmUgX19OUl9zZXRucwkJMjgzCisjZGVmaW5lIF9fTlJfcHJlYWQ2NAkJMjg0CisjZGVmaW5lIF9fTlJfcHdyaXRlNjQJCTI4NQorI2RlZmluZSBfX05SX3RpbWVyZmRfY3JlYXRlCTI4NgorI2RlZmluZSBfX05SX2ZhbGxvY2F0ZQkJMjg3CisjZGVmaW5lIF9fTlJfdGltZXJmZF9zZXR0aW1lCTI4OAorI2RlZmluZSBfX05SX3RpbWVyZmRfZ2V0dGltZQkyODkKKyNkZWZpbmUgX19OUl9zaWduYWxmZDQJCTI5MAorI2RlZmluZSBfX05SX2V2ZW50ZmQyCQkyOTEKKyNkZWZpbmUgX19OUl9lcG9sbF9jcmVhdGUxCTI5MgorI2RlZmluZSBfX05SX2R1cDMJCTI5MworI2RlZmluZSBfX05SX3BpcGUyCQkyOTQKKyNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQxCTI5NQorI2RlZmluZSBfX05SX3ByZWFkdgkJMjk2CisjZGVmaW5lIF9fTlJfcHdyaXRldgkJMjk3CisjZGVmaW5lIF9fTlJfcnRfdGdzaWdxdWV1ZWluZm8JMjk4CisjZGVmaW5lIF9fTlJfcGVyZl9ldmVudF9vcGVuCTI5OQorI2RlZmluZSBfX05SX3JlY3ZtbXNnCQkzMDAKKyNkZWZpbmUgX19OUl9mYW5vdGlmeV9pbml0CTMwMQorI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsJMzAyCisjZGVmaW5lIF9fTlJfcHJsaW1pdDY0CQkzMDMKKyNkZWZpbmUgX19OUl9uYW1lX3RvX2hhbmRsZV9hdAkzMDQKKyNkZWZpbmUgX19OUl9vcGVuX2J5X2hhbmRsZV9hdAkzMDUKKyNkZWZpbmUgX19OUl9jbG9ja19hZGp0aW1lCTMwNgorI2RlZmluZSBfX05SX3N5bmNmcwkJMzA3CisjZGVmaW5lIF9fTlJfc2VuZG1tc2cJCTMwOAorI2RlZmluZSBfX05SX3Byb2Nlc3Nfdm1fcmVhZHYJMzA5CisjZGVmaW5lIF9fTlJfcHJvY2Vzc192bV93cml0ZXYJMzEwCisjZGVmaW5lIF9fTlJfa2NtcAkJMzExCisjZGVmaW5lIF9fTlJfZmluaXRfbW9kdWxlCTMxMgorI2RlZmluZSBfX05SX3NjaGVkX3NldGF0dHIJMzEzCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0YXR0cgkzMTQKKyNkZWZpbmUgX19OUl9yZW5hbWVhdDIJCTMxNQorI2RlZmluZSBfX05SX3NlY2NvbXAJCTMxNgorI2RlZmluZSBfX05SX2dldHJhbmRvbQkJMzE3CisjZGVmaW5lIF9fTlJfbWVtZmRfY3JlYXRlCTMxOAorI2RlZmluZSBfX05SX2JwZgkJMzE5CisjZGVmaW5lIF9fTlJfZXhlY3ZlYXQJCTMyMAogCiAjZW5kaWYgLyogX1VBUElfX0FTTV9BVlIzMl9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbC1zdHVicy5TIGIvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbC1zdHVicy5TCmluZGV4IGI1ZmM5MjcuLmY5YzY4ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGwtc3R1YnMuUworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsLXN0dWJzLlMKQEAgLTg4LDMgKzg4LDM5IEBACiAJY2FsbAlzeXNfc3luY19maWxlX3JhbmdlCiAJc3ViCXNwLCAtNAogCXBvcG0JcGMKKworCS5nbG9iYWwgX19zeXNfZmFsbG9jYXRlCisJLnR5cGUJX19zeXNfZmFsbG9jYXRlLEBmdW5jdGlvbgorX19zeXNfZmFsbG9jYXRlOgorCXB1c2htCWxyCisJc3QudwktLXNwLCBBUkc2CisJY2FsbAlzeXNfZmFsbG9jYXRlCisJc3ViCXNwLCAtNAorCXBvcG0JcGMKKworCS5nbG9iYWwgX19zeXNfZmFub3RpZnlfbWFyaworCS50eXBlCV9fc3lzX2Zhbm90aWZ5X21hcmssQGZ1bmN0aW9uCitfX3N5c19mYW5vdGlmeV9tYXJrOgorCXB1c2htCWxyCisJc3QudwktLXNwLCBBUkc2CisJY2FsbAlzeXNfZmFub3RpZnlfbWFyaworCXN1YglzcCwgLTQKKwlwb3BtCXBjCisKKwkuZ2xvYmFsIF9fc3lzX3Byb2Nlc3Nfdm1fcmVhZHYKKwkudHlwZQlfX3N5c19wcm9jZXNzX3ZtX3JlYWR2LEBmdW5jdGlvbgorX19zeXNfcHJvY2Vzc192bV9yZWFkdjoKKwlwdXNobQlscgorCXN0LncJLS1zcCwgQVJHNgorCWNhbGwJc3lzX3Byb2Nlc3Nfdm1fcmVhZHYKKwlzdWIJc3AsIC00CisJcG9wbQlwYworCisJLmdsb2JhbCBfX3N5c19wcm9jZXNzX3ZtX3dyaXRldgorCS50eXBlCV9fc3lzX3Byb2Nlc3Nfdm1fd3JpdGV2LEBmdW5jdGlvbgorX19zeXNfcHJvY2Vzc192bV93cml0ZXY6CisJcHVzaG0JbHIKKwlzdC53CS0tc3AsIEFSRzYKKwljYWxsCXN5c19wcm9jZXNzX3ZtX3dyaXRldgorCXN1YglzcCwgLTQKKwlwb3BtCXBjCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMgYi9hcmNoL2F2cjMyL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKaW5kZXggMDE3YTkwNC4uYzNiNTkzYiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL3N5c2NhbGxfdGFibGUuUwpAQCAtMjk3LDQgKzI5Nyw0MSBAQAogCS5sb25nCXN5c19ldmVudGZkCiAJLmxvbmcJc3lzX3JlY3ZtbXNnCiAJLmxvbmcJc3lzX3NldG5zCisJLmxvbmcJc3lzX3ByZWFkNjQKKwkubG9uZwlzeXNfcHdyaXRlNjQJCS8qIDI4NSAqLworCS5sb25nCXN5c190aW1lcmZkX2NyZWF0ZQorCS5sb25nCV9fc3lzX2ZhbGxvY2F0ZQorCS5sb25nCXN5c190aW1lcmZkX3NldHRpbWUKKwkubG9uZwlzeXNfdGltZXJmZF9nZXR0aW1lCisJLmxvbmcJc3lzX3NpZ25hbGZkNAkJLyogMjkwICovCisJLmxvbmcJc3lzX2V2ZW50ZmQyCisJLmxvbmcJc3lzX2Vwb2xsX2NyZWF0ZTEKKwkubG9uZwlzeXNfZHVwMworCS5sb25nCXN5c19waXBlMgorCS5sb25nCXN5c19pbm90aWZ5X2luaXQxCS8qIDI5NSAqLworCS5sb25nCXN5c19wcmVhZHYKKwkubG9uZwlzeXNfcHdyaXRldgorCS5sb25nCXN5c19ydF90Z3NpZ3F1ZXVlaW5mbworCS5sb25nCXN5c19wZXJmX2V2ZW50X29wZW4KKwkubG9uZwlzeXNfcmVjdm1tc2cJCS8qIDMwMCAqLworCS5sb25nCXN5c19mYW5vdGlmeV9pbml0CisJLmxvbmcJX19zeXNfZmFub3RpZnlfbWFyaworCS5sb25nCXN5c19wcmxpbWl0NjQKKwkubG9uZwlzeXNfbmFtZV90b19oYW5kbGVfYXQKKwkubG9uZwlzeXNfb3Blbl9ieV9oYW5kbGVfYXQJLyogMzA1ICovCisJLmxvbmcJc3lzX2Nsb2NrX2FkanRpbWUKKwkubG9uZwlzeXNfc3luY2ZzCisJLmxvbmcJc3lzX3NlbmRtbXNnCisJLmxvbmcJX19zeXNfcHJvY2Vzc192bV9yZWFkdgorCS5sb25nCV9fc3lzX3Byb2Nlc3Nfdm1fd3JpdGV2CS8qIDMxMCAqLworCS5sb25nCXN5c19rY21wCisJLmxvbmcJc3lzX2Zpbml0X21vZHVsZQorCS5sb25nCXN5c19zY2hlZF9zZXRhdHRyCisJLmxvbmcJc3lzX3NjaGVkX2dldGF0dHIKKwkubG9uZwlzeXNfcmVuYW1lYXQyCQkvKiAzMTUgKi8KKwkubG9uZwlzeXNfc2VjY29tcAorCS5sb25nCXN5c19nZXRyYW5kb20KKwkubG9uZwlzeXNfbWVtZmRfY3JlYXRlCisJLmxvbmcJc3lzX2JwZgorCS5sb25nCXN5c19leGVjdmVhdAkJLyogMzIwICovCiAJLmxvbmcJc3lzX25pX3N5c2NhbGwJCS8qIHI4IGlzIHNhdHVyYXRlZCBhdCBucl9zeXNjYWxscyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2luY2x1ZGUvbWFjaC9jcHUuaAppbmRleCAxNmEyNGIxNC4uNDE4MTA4NiAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbmNsdWRlL21hY2gvY3B1LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQVZSMzIgYW5kIChmYWtlKSBBVDkxIENQVSBpZGVudGlmaWNhdGlvbgorICogQVZSMzIgQ1BVIGlkZW50aWZpY2F0aW9uCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEF0bWVsIENvcnBvcmF0aW9uCiAgKgpAQCAtMjAsMjggKzIwLDQgQEAKICMgZGVmaW5lIGNwdV9pc19hdDMyYXA3MDAwKCkJKDApCiAjZW5kaWYKIAotLyoKLSAqIFNpbmNlIHRoaXMgaXMgQVZSMzIsIHdlIHdpbGwgbmV2ZXIgcnVuIG9uIGFueSBBVDkxIENQVS4gQnV0IHRoZXNlCi0gKiBkZWZpbml0aW9ucyBtYXkgcmVkdWNlIGNsdXR0ZXIgaW4gY29tbW9uIGRyaXZlcnMuCi0gKi8KLSNkZWZpbmUgY3B1X2lzX2F0OTFybTkyMDAoKQkoMCkKLSNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eGUoKQkoMCkKLSNkZWZpbmUgY3B1X2lzX2F0OTFzYW05MjYwKCkJKDApCi0jZGVmaW5lIGNwdV9pc19hdDkxc2FtOTI2MSgpCSgwKQotI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTkyNjMoKQkoMCkKLSNkZWZpbmUgY3B1X2lzX2F0OTFzYW05cmwoKQkoMCkKLSNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzEwKCkJKDApCi0jZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcyMCgpCSgwKQotI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTlnNDUoKQkoMCkKLSNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzQ1ZXMoKQkoMCkKLSNkZWZpbmUgY3B1X2lzX2F0OTFzYW05bTEwKCkJKDApCi0jZGVmaW5lIGNwdV9pc19hdDkxc2FtOWc0NigpCSgwKQotI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTltMTEoKQkoMCkKLSNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eDUoKQkoMCkKLSNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzE1KCkJKDApCi0jZGVmaW5lIGNwdV9pc19hdDkxc2FtOWczNSgpCSgwKQotI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTl4MzUoKQkoMCkKLSNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzI1KCkJKDApCi0jZGVmaW5lIGNwdV9pc19hdDkxc2FtOXgyNSgpCSgwKQotCiAjZW5kaWYgLyogX19BU01fQVJDSF9DUFVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tbS9mYXVsdC5jIGIvYXJjaC9hdnIzMi9tbS9mYXVsdC5jCmluZGV4IDBlY2E5MzMuLmQyMjNhOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbW0vZmF1bHQuYworKysgYi9hcmNoL2F2cjMyL21tL2ZhdWx0LmMKQEAgLTE0Miw2ICsxNDIsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAwYjA0OTAxLi5iODhhMTU1IDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNDUsMTEgKzQ1LDYgQEAKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgKHgpLnZhbCB9KQogCi1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KICNkZWZpbmUgc2V0X3B0ZShwdGVwdHIsIHB0ZXZhbCkgKCoocHRlcHRyKSA9IHB0ZXZhbCkKICNkZWZpbmUgc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRldmFsKSBzZXRfcHRlKHB0ZXAsIHB0ZXZhbCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9pbnRzLXByaW9yaXR5LmMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYwppbmRleCBkZDJhZjc0Li43MjM2YmRmIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2ludHMtcHJpb3JpdHkuYwpAQCAtNDI5LDE0ICs0MjksNiBAQAogCWJmaW5fc2VjX2VuYWJsZV9zc2koMzcpOwogfQogCi12b2lkIGJmaW5fc2VjX3Jlc3VtZSh2b2lkKQotewotCWJmaW5fd3JpdGVfU0VDX1NDSSgwLCBTRUNfQ0NUTCwgU0VDX0NDVExfUkVTRVQpOwotCXVkZWxheSgxMDApOwotCWJmaW5fd3JpdGVfU0VDX0dDVEwoU0VDX0dDVExfRU4pOwotCWJmaW5fd3JpdGVfU0VDX1NDSSgwLCBTRUNfQ0NUTCwgU0VDX0NDVExfRU4gfCBTRUNfQ0NUTF9OTUlfRU4pOwotfQotCiB2b2lkIGhhbmRsZV9zZWNfc2ZpX2ZhdWx0KHVpbnQzMl90IGdzdGF0KQogewogCmRpZmYgLS1naXQgYS9hcmNoL2M2eC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2M2eC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYzBlZWQ1Yi4uNzhkNDQ4M2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYzZ4L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2M2eC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTUwLDExICs1MCw2IEBACiAjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKIAotc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQotewotCXJldHVybiAwOwotfQotCiAjZGVmaW5lIHNldF9wdGUocHRlcHRyLCBwdGV2YWwpICgqKHB0ZXB0cikgPSBwdGV2YWwpCiAjZGVmaW5lIHNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIHB0ZXZhbCkgc2V0X3B0ZShwdGVwLCBwdGV2YWwpCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjEwL2FyY2gvbW11LmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYxMC9hcmNoL21tdS5oCmluZGV4IGU4MjllNWEuLjQ3YTVkZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjEwL2FyY2gvbW11LmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MTAvYXJjaC9tbXUuaApAQCAtNTgsNyArNTgsNiBAQAogLyogQml0cyB0aGUgSFcgZG9lc24ndCBjYXJlIGFib3V0IGJ1dCB0aGUga2VybmVsIHVzZXMgdGhlbSBpbiBTVyAqLwogCiAjZGVmaW5lIF9QQUdFX1BSRVNFTlQgICAoMTw8NCkgIC8qIHBhZ2UgcHJlc2VudCBpbiBtZW1vcnkgKi8KLSNkZWZpbmUgX1BBR0VfRklMRSAgICAgICgxPDw1KSAgLyogc2V0OiBwYWdlY2FjaGUsIHVuc2V0OiBzd2FwICh3aGVuICFQUkVTRU5UKSAqLwogI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkoMTw8NSkgIC8qIHNpbXVsYXRlZCBpbiBzb2Z0d2FyZSB1c2luZyB2YWxpZCBiaXQgKi8KICNkZWZpbmUgX1BBR0VfTU9ESUZJRUQJKDE8PDYpICAvKiBzaW11bGF0ZWQgaW4gc29mdHdhcmUgdXNpbmcgd2UgYml0ICovCiAjZGVmaW5lIF9QQUdFX1JFQUQgICAgICAoMTw8NykgIC8qIHJlYWQtZW5hYmxlZCAqLwpAQCAtMTA1LDYgKzEwNCw0IEBACiAjZGVmaW5lIF9fUzExMAlQQUdFX1NIQVJFRAogI2RlZmluZSBfX1MxMTEJUEFHRV9TSEFSRUQKIAotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkyNgotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvbW11LmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL21tdS5oCmluZGV4IGMxYTEzZTAuLmU2ZGIxNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvbW11LmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9tbXUuaApAQCAtNTMsNyArNTMsNiBAQAogICogc29mdHdhcmUuCiAgKi8KICNkZWZpbmUgX1BBR0VfUFJFU0VOVCAgICgxIDw8IDUpICAgLyogUGFnZSBpcyBwcmVzZW50IGluIG1lbW9yeS4gKi8KLSNkZWZpbmUgX1BBR0VfRklMRSAgICAgICgxIDw8IDYpICAgLyogMT1wYWdlY2FjaGUsIDA9c3dhcCAod2hlbiAhcHJlc2VudCkgKi8KICNkZWZpbmUgX1BBR0VfQUNDRVNTRUQgICgxIDw8IDYpICAgLyogU2ltdWxhdGVkIGluIHNvZnR3YXJlIHVzaW5nIHZhbGlkIGJpdC4gKi8KICNkZWZpbmUgX1BBR0VfTU9ESUZJRUQgICgxIDw8IDcpICAgLyogU2ltdWxhdGVkIGluIHNvZnR3YXJlIHVzaW5nIHdlIGJpdC4gKi8KICNkZWZpbmUgX1BBR0VfUkVBRCAgICAgICgxIDw8IDgpICAgLyogUmVhZCBlbmFibGVkLiAqLwpAQCAtMTA4LDYgKzEwNyw0IEBACiAjZGVmaW5lIF9fUzExMCAgUEFHRV9TSEFSRURfRVhFQwogI2RlZmluZSBfX1MxMTEgIFBBR0VfU0hBUkVEX0VYRUMKIAotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkyNQotCiAjZW5kaWYgLyogX0FTTV9DUklTX0FSQ0hfTU1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDhiOGM4NjcuLmNlZWZjMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNjcsNyArNjcsNyBAQAogICovCiAKICNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QgICAgICAgKFRBU0tfU0laRS9QR0RJUl9TSVpFKQotI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MgICAgICAwCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUyAgICAgIDBVTAogCiAvKiB6ZXJvIHBhZ2UgdXNlZCBmb3IgdW5pbml0aWFsaXplZCBzdHVmZiAqLwogI2lmbmRlZiBfX0FTU0VNQkxZX18KQEAgLTExNCw3ICsxMTQsNiBAQAogc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkgICAgICAgICAgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfV1JJVEU7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpICAgICAgICAgIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX01PRElGSUVEOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKSAgICAgICAgICB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQotc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKSAgICAgICAgICAgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRTsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKQl7IHJldHVybiAwOyB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCkBAIC0yOTAsOSArMjg5LDYgQEAKICAqLwogI2RlZmluZSBwZ3RhYmxlX2NhY2hlX2luaXQoKSAgIGRvIHsgfSB3aGlsZSAoMCkKIAotI2RlZmluZSBwdGVfdG9fcGdvZmYoeCkJKHB0ZV92YWwoeCkgPj4gNikKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKHgpCV9fcHRlKCgoeCkgPDwgNikgfCBfUEFHRV9GSUxFKQotCiB0eXBlZGVmIHB0ZV90ICpwdGVfYWRkcl90OwogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvbW0vZmF1bHQuYyBiL2FyY2gvY3Jpcy9tbS9mYXVsdC5jCmluZGV4IDE3OTBmMjIuLjI2ODZhN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvY3Jpcy9tbS9mYXVsdC5jCkBAIC0xNzYsNiArMTc2LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBlYjAxMTBhLi45M2JjZjJhIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC02MiwxMCArNjIsNiBAQAogI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSB9KQogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJKChwdGVfdCkgeyAoeCkudmFsIH0pCiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpIHsgcmV0dXJuIDA7IH0KLSNlbmRpZgotCiAjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikJKHsgQlVHKCk7IE5VTEw7IH0pCiAKICNkZWZpbmUgc3dhcHBlcl9wZ19kaXIJCSgocGdkX3QgKikgTlVMTCkKQEAgLTE0NCw3ICsxNDAsNyBAQAogI2RlZmluZSBQVFJTX1BFUl9QVEUJCTQwOTYKIAogI2RlZmluZSBVU0VSX1BHRFNfSU5fTEFTVF9QTUw0CShUQVNLX1NJWkUgLyBQR0RJUl9TSVpFKQotI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAorI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMFVMCiAKICNkZWZpbmUgVVNFUl9QR0RfUFRSUwkJKFBBR0VfT0ZGU0VUID4+IFBHRElSX1NISUZUKQogI2RlZmluZSBLRVJORUxfUEdEX1BUUlMJCShQVFJTX1BFUl9QR0QgLSBVU0VSX1BHRF9QVFJTKQpAQCAtMjk4LDcgKzI5NCw2IEBACiAKICNkZWZpbmUgX1BBR0VfUkVTRVJWRURfTUFTSwkoeEFNUFJ4X1JFU0VSVkVEOCB8IHhBTVBSeF9SRVNFUlZFRDEzKQogCi0jZGVmaW5lIF9QQUdFX0ZJTEUJCTB4MDAyCS8qIHNldDpwYWdlY2FjaGUgdW5zZXQ6c3dhcCAqLwogI2RlZmluZSBfUEFHRV9QUk9UTk9ORQkJMHgwMDAJLyogSWYgbm90IHByZXNlbnQgKi8KIAogI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkJKFBURV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSkKQEAgLTQ2MywyNyArNDU4LDE1IEBACiAgKiBIYW5kbGUgc3dhcCBhbmQgZmlsZSBlbnRyaWVzCiAgKiAtIHRoZSBQVEUgaXMgZW5jb2RlZCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKICAqCWJpdCAwOgkJTXVzdCBiZSAwICghX1BBR0VfUFJFU0VOVCkKLSAqCWJpdCAxOgkJVHlwZTogMCBmb3Igc3dhcCwgMSBmb3IgZmlsZSAoX1BBR0VfRklMRSkKLSAqCWJpdHMgMi03OglTd2FwIHR5cGUKLSAqCWJpdHMgOC0zMToJU3dhcCBvZmZzZXQKLSAqCWJpdHMgMi0zMToJRmlsZSBwZ29mZgorICoJYml0cyAxLTY6CVN3YXAgdHlwZQorICoJYml0cyA3LTMxOglTd2FwIG9mZnNldAogICovCi0jZGVmaW5lIF9fc3dwX3R5cGUoeCkJCQkoKCh4KS52YWwgPj4gMikgJiAweDFmKQotI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkJCQkoKHgpLnZhbCA+PiA4KQotI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmZzZXQpCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCAyKSB8ICgob2Zmc2V0KSA8PCA4KSB9KQorI2RlZmluZSBfX3N3cF90eXBlKHgpCQkJKCgoeCkudmFsID4+IDEpICYgMHgxZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkJKCh4KS52YWwgPj4gNykKKyNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KQkoKHN3cF9lbnRyeV90KSB7ICgodHlwZSkgPDwgMSkgfCAoKG9mZnNldCkgPDwgNykgfSkKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KF9wdGUpCSgoc3dwX2VudHJ5X3QpIHsgKF9wdGUpLnB0ZSB9KQogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpIHsgKHgpLnZhbCB9KQogCi1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIHB0ZS5wdGUgJiBfUEFHRV9GSUxFOwotfQotCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI5Ci0KLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKFBURSkJKChQVEUpLnB0ZSA+PiAyKQotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQlfX3B0ZSgob2ZmKSA8PCAyIHwgX1BBR0VfRklMRSkKLQogLyogTmVlZHMgdG8gYmUgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gbGludXgvbW0uaCwgYXMgaXQgaXMgYXJjaCBkZXBlbmRlbnQgKi8KICNkZWZpbmUgUGFnZVNraXAocGFnZSkJCSgwKQogI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLXZkay5jIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS12ZGsuYwppbmRleCBlZmE1ZDY1Li5iMDczZjRkIDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLXZkay5jCisrKyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktdmRrLmMKQEAgLTE2OCw4ICsxNjgsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9vcHMgcGNpX2RpcmVjdF9mcnYgPSB7Ci0JcGNpX2Zydl9yZWFkX2NvbmZpZywKLQlwY2lfZnJ2X3dyaXRlX2NvbmZpZywKKwkucmVhZCA9IHBjaV9mcnZfcmVhZF9jb25maWcsCisJLndyaXRlID0gcGNpX2Zydl93cml0ZV9jb25maWcsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvbW0vZmF1bHQuYyBiL2FyY2gvZnJ2L21tL2ZhdWx0LmMKaW5kZXggOWE2NjM3Mi4uZWM0OTE3ZCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvbW0vZmF1bHQuYworKysgYi9hcmNoL2Zydi9tbS9mYXVsdC5jCkBAIC0xNjgsNiArMTY4LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2hleGFnb24vaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGQ4YmQ1NGYuLjQ5ZWFiODEzIDEwMDY0NAotLS0gYS9hcmNoL2hleGFnb24vaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvaGV4YWdvbi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTYyLDEzICs2Miw2IEBACiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECSgxPDwyKQogCiAvKgotICogX1BBR0VfRklMRSBpcyBvbmx5IG1lYW5pbmdmdWwgaWYgX1BBR0VfUFJFU0VOVCBpcyBmYWxzZSwgd2hpbGUKLSAqIF9QQUdFX0RJUlRZIGlzIG9ubHkgbWVhbmluZ2Z1bCBpZiBfUEFHRV9QUkVTRU5UIGlzIHRydWUuCi0gKiBTbyB3ZSBjYW4gb3ZlcmxvYWQgdGhlIGJpdC4uLgotICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJX1BBR0VfRElSVFkgLyogc2V0OiAgcGFnZWNhY2hlLCB1bnNldCA9IHN3YXAgKi8KLQotLyoKICAqIEZvciBub3csIGxldCdzIHNheSB0aGF0IFZhbGlkIGFuZCBQcmVzZW50IGFyZSB0aGUgc2FtZSB0aGluZy4KICAqIEFsdGVybmF0aXZlbHksIHdlIGNvdWxkIHNheSB0aGF0IGl0J3MgdGhlICJvciIgb2YgUiwgVywgYW5kIFgKICAqIHBlcm1pc3Npb25zLgpAQCAtMTc4LDcgKzE3MSw3IEBACiBleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsgIC8qIGxvY2F0ZWQgaW4gaGVhZC5TICovCiAKIC8qIFNlZW1zIHRvIGJlIHplcm8gZXZlbiBpbiBhcmNoaXRlY3R1cmVzIHdoZXJlIHRoZSB6ZXJvIHBhZ2UgaXMgZmlyZXdhbGxlZD8gKi8KLSNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTIDAKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTIDBVTAogI2RlZmluZSBwdGVfc3BlY2lhbChwdGUpCTAKICNkZWZpbmUgcHRlX21rc3BlY2lhbChwdGUpCShwdGUpCiAKQEAgLTQ1Niw1NyArNDQ5LDM2IEBACiAjZGVmaW5lIHBndGFibGVfY2FjaGVfaW5pdCgpICAgIGRvIHsgfSB3aGlsZSAoMCkKIAogLyoKLSAqIFN3YXAvZmlsZSBQVEUgZGVmaW5pdGlvbnMuICBJZiBfUEFHRV9QUkVTRU5UIGlzIHplcm8sIHRoZSByZXN0IG9mIHRoZQotICogUFRFIGlzIGludGVycHJldGVkIGFzIHN3YXAgaW5mb3JtYXRpb24uICBEZXBlbmRpbmcgb24gdGhlIF9QQUdFX0ZJTEUKLSAqIGJpdCwgdGhlIHJlbWFpbmluZyBmcmVlIGJpdHMgYXJlIGVpdGVociBpbnRlcnByZXRlZCBhcyBhIGZpbGUgb2Zmc2V0Ci0gKiBvciBhIHN3YXAgdHlwZS9vZmZzZXQgdHVwbGUuICBSYXRoZXIgdGhhbiBoYXZlIHRoZSBUTEIgZmlsbCBoYW5kbGVyCi0gKiB0ZXN0IF9QQUdFX1BSRVNFTlQsIHdlJ3JlIGdvaW5nIHRvIHJlc2VydmUgdGhlIHBlcm1pc3Npb25zIGJpdHMKLSAqIGFuZCBzZXQgdGhlbSB0byBhbGwgemVyb3MgZm9yIHN3YXAgZW50cmllcywgd2hpY2ggc3BlZWRzIHVwIHRoZQotICogbWlzcyBoYW5kbGVyIGF0IHRoZSBjb3N0IG9mIDMgYml0cyBvZiBvZmZzZXQuICBUaGF0IHRyYWRlLW9mZiBjYW4KLSAqIGJlIHJldmlzaXRlZCBpZiBuZWNlc3NhcnksIGJ1dCBIZXhhZ29uIHByb2Nlc3NvciBhcmNoaXRlY3R1cmUgYW5kCi0gKiB0YXJnZXQgYXBwbGljYXRpb25zIHN1Z2dlc3QgYSBsb3Qgb2YgVExCIG1pc3NlcyBhbmQgbm90IG11Y2ggc3dhcCBzcGFjZS4KKyAqIFN3YXAvZmlsZSBQVEUgZGVmaW5pdGlvbnMuICBJZiBfUEFHRV9QUkVTRU5UIGlzIHplcm8sIHRoZSByZXN0IG9mIHRoZSBQVEUgaXMKKyAqIGludGVycHJldGVkIGFzIHN3YXAgaW5mb3JtYXRpb24uICBUaGUgcmVtYWluaW5nIGZyZWUgYml0cyBhcmUgaW50ZXJwcmV0ZWQgYXMKKyAqIHN3YXAgdHlwZS9vZmZzZXQgdHVwbGUuICBSYXRoZXIgdGhhbiBoYXZlIHRoZSBUTEIgZmlsbCBoYW5kbGVyIHRlc3QKKyAqIF9QQUdFX1BSRVNFTlQsIHdlJ3JlIGdvaW5nIHRvIHJlc2VydmUgdGhlIHBlcm1pc3Npb25zIGJpdHMgYW5kIHNldCB0aGVtIHRvCisgKiBhbGwgemVyb3MgZm9yIHN3YXAgZW50cmllcywgd2hpY2ggc3BlZWRzIHVwIHRoZSBtaXNzIGhhbmRsZXIgYXQgdGhlIGNvc3Qgb2YKKyAqIDMgYml0cyBvZiBvZmZzZXQuICBUaGF0IHRyYWRlLW9mZiBjYW4gYmUgcmV2aXNpdGVkIGlmIG5lY2Vzc2FyeSwgYnV0IEhleGFnb24KKyAqIHByb2Nlc3NvciBhcmNoaXRlY3R1cmUgYW5kIHRhcmdldCBhcHBsaWNhdGlvbnMgc3VnZ2VzdCBhIGxvdCBvZiBUTEIgbWlzc2VzCisgKiBhbmQgbm90IG11Y2ggc3dhcCBzcGFjZS4KICAqCiAgKiBGb3JtYXQgb2Ygc3dhcCBQVEU6CiAgKgliaXQJMDoJUHJlc2VudCAoemVybykKLSAqCWJpdAkxOglfUEFHRV9GSUxFICh6ZXJvKQotICoJYml0cwkyLTY6CXN3YXAgdHlwZSAoYXJjaCBpbmRlcGVuZGVudCBsYXllciB1c2VzIDUgYml0cyBtYXgpCi0gKgliaXRzCTctOToJYml0cyAyOjAgb2Ygb2Zmc2V0Ci0gKgliaXRzIDEwLTEyOgllZmZlY3RpdmVseSBfUEFHRV9QUk9UTk9ORSAoYWxsIHplcm8pCi0gKgliaXRzIDEzLTMxOiAgYml0cyAyMTozIG9mIHN3YXAgb2Zmc2V0Ci0gKgotICogRm9ybWF0IG9mIGZpbGUgUFRFOgotICoJYml0CTA6CVByZXNlbnQgKHplcm8pCi0gKgliaXQJMToJX1BBR0VfRklMRSAoemVybykKLSAqCWJpdHMJMi05OgliaXRzIDc6MCBvZiBvZmZzZXQKLSAqCWJpdHMgMTAtMTI6CWVmZmVjdGl2ZWx5IF9QQUdFX1BST1ROT05FIChhbGwgemVybykKLSAqCWJpdHMgMTMtMzE6ICBiaXRzIDI2Ojggb2Ygc3dhcCBvZmZzZXQKKyAqCWJpdHMJMS01Oglzd2FwIHR5cGUgKGFyY2ggaW5kZXBlbmRlbnQgbGF5ZXIgdXNlcyA1IGJpdHMgbWF4KQorICoJYml0cwk2LTk6CWJpdHMgMzowIG9mIG9mZnNldAorICoJYml0cwkxMC0xMjoJZWZmZWN0aXZlbHkgX1BBR0VfUFJPVE5PTkUgKGFsbCB6ZXJvKQorICoJYml0cwkxMy0zMTogIGJpdHMgMjI6NCBvZiBzd2FwIG9mZnNldAogICoKICAqIFRoZSBzcGxpdCBvZmZzZXQgbWFrZXMgc29tZSBvZiB0aGUgZm9sbG93aW5nIG1hY3JvcyBhIGxpdHRsZSBnbmFybHksCiAgKiBidXQgdGhlcmUncyBwbGVudHkgb2YgcHJlY2VkZW50IGZvciB0aGlzIHNvcnQgb2YgdGhpbmcuCiAgKi8KLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMgICAgIDI3CiAKIC8qIFVzZWQgZm9yIHN3YXAgUFRFcyAqLwotI2RlZmluZSBfX3N3cF90eXBlKHN3cF9wdGUpCQkoKChzd3BfcHRlKS52YWwgPj4gMikgJiAweDFmKQorI2RlZmluZSBfX3N3cF90eXBlKHN3cF9wdGUpCQkoKChzd3BfcHRlKS52YWwgPj4gMSkgJiAweDFmKQogCiAjZGVmaW5lIF9fc3dwX29mZnNldChzd3BfcHRlKSBcCi0JKCgoKHN3cF9wdGUpLnZhbCA+PiA3KSAmIDB4NykgfCAoKChzd3BfcHRlKS52YWwgPj4gMTApICYgMHgwMDNmZmZmOCkpCisJKCgoKHN3cF9wdGUpLnZhbCA+PiA2KSAmIDB4ZikgfCAoKChzd3BfcHRlKS52YWwgPj4gOSkgJiAweDdmZmZmMCkpCiAKICNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KSBcCiAJKChzd3BfZW50cnlfdCkJeyBcCi0JCSgodHlwZSA8PCAyKSB8IFwKLQkJICgob2Zmc2V0ICYgMHgzZmZmZjgpIDw8IDEwKSB8ICgob2Zmc2V0ICYgMHg3KSA8PCA3KSkgfSkKLQotLyogVXNlZCBmb3IgZmlsZSBQVEVzICovCi0jZGVmaW5lIHB0ZV9maWxlKHB0ZSkgXAotCSgocHRlX3ZhbChwdGUpICYgKF9QQUdFX0ZJTEUgfCBfUEFHRV9QUkVTRU5UKSkgPT0gX1BBR0VfRklMRSkKLQotI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKSBcCi0JKCgocHRlX3ZhbChwdGUpID4+IDIpICYgMHhmZikgfCAoKHB0ZV92YWwocHRlKSA+PiA1KSAmIDB4MDdmZmZmMDApKQotCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpIFwKLQkoKHB0ZV90KSB7ICgoKChvZmYpICYgMHg3ZmZmZjAwKSA8PCA1KSB8ICgoKG9mZikgJiAweGZmKSA8PCAyKVwKLQl8IF9QQUdFX0ZJTEUpIH0pCisJCSgodHlwZSA8PCAxKSB8IFwKKwkJICgob2Zmc2V0ICYgMHg3ZmZmZjApIDw8IDkpIHwgKChvZmZzZXQgJiAweGYpIDw8IDYpKSB9KQogCiAvKiAgT2ggYm95LiAgVGhlcmUgYXJlIGEgbG90IG9mIHBvc3NpYmxlIGFyY2ggb3ZlcnJpZGVzIGZvdW5kIGluIHRoaXMgZmlsZS4gICovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggNzkzNTExNS4uN2I2Zjg4MCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC01Nyw5ICs1Nyw2IEBACiAjZGVmaW5lIF9QQUdFX0VECQkoX19JQTY0X1VMKDEpIDw8IDUyKQkvKiBleGNlcHRpb24gZGVmZXJyYWwgKi8KICNkZWZpbmUgX1BBR0VfUFJPVE5PTkUJCShfX0lBNjRfVUwoMSkgPDwgNjMpCiAKLS8qIFZhbGlkIG9ubHkgZm9yIGEgUFRFIHdpdGggdGhlIHByZXNlbnQgYml0IGNsZWFyZWQ6ICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJCSgxIDw8IDEpCQkvKiBzZWUgc3dhcCAmIGZpbGUgcHRlIHJlbWFya3MgYmVsb3cgKi8KLQogI2RlZmluZSBfUEZOX01BU0sJCV9QQUdFX1BQTl9NQVNLCiAvKiBNYXNrIG9mIGJpdHMgd2hpY2ggbWF5IGJlIGNoYW5nZWQgYnkgcHRlX21vZGlmeSgpOyB0aGUgb2RkIGJpdHMgYXJlIHRoZXJlIGZvciBfUEFHRV9QUk9UTk9ORSAqLwogI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoX1BBR0VfUCB8IF9QQUdFX1BST1ROT05FIHwgX1BBR0VfUExfTUFTSyB8IF9QQUdFX0FSX01BU0sgfCBfUEFHRV9FRCkKQEAgLTEzMCw3ICsxMjcsNyBAQAogI2RlZmluZSBQVFJTX1BFUl9QR0RfU0hJRlQJUFRSU19QRVJfUFREX1NISUZUCiAjZGVmaW5lIFBUUlNfUEVSX1BHRAkJKDFVTCA8PCBQVFJTX1BFUl9QR0RfU0hJRlQpCiAjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECSg1KlBUUlNfUEVSX1BHRC84KQkvKiByZWdpb25zIDAtNCBhcmUgdXNlciByZWdpb25zICovCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwVUwKIAogLyoKICAqIEFsbCB0aGUgbm9ybWFsIG1hc2tzIGhhdmUgdGhlICJwYWdlIGFjY2Vzc2VkIiBiaXRzIG9uLCBhcyBhbnkgdGltZQpAQCAtMzAwLDcgKzI5Nyw2IEBACiAjZGVmaW5lIHB0ZV9leGVjKHB0ZSkJCSgocHRlX3ZhbChwdGUpICYgX1BBR0VfQVJfUlgpICE9IDApCiAjZGVmaW5lIHB0ZV9kaXJ0eShwdGUpCQkoKHB0ZV92YWwocHRlKSAmIF9QQUdFX0QpICE9IDApCiAjZGVmaW5lIHB0ZV95b3VuZyhwdGUpCQkoKHB0ZV92YWwocHRlKSAmIF9QQUdFX0EpICE9IDApCi0jZGVmaW5lIHB0ZV9maWxlKHB0ZSkJCSgocHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRSkgIT0gMCkKICNkZWZpbmUgcHRlX3NwZWNpYWwocHRlKQkwCiAKIC8qCkBAIC00NzIsMjcgKzQ2OCwxNiBAQAogICoKICAqIEZvcm1hdCBvZiBzd2FwIHB0ZToKICAqCWJpdCAgIDAgICA6IHByZXNlbnQgYml0IChtdXN0IGJlIHplcm8pCi0gKgliaXQgICAxICAgOiBfUEFHRV9GSUxFIChtdXN0IGJlIHplcm8pCi0gKgliaXRzICAyLSA4OiBzd2FwLXR5cGUKLSAqCWJpdHMgIDktNjI6IHN3YXAgb2Zmc2V0Ci0gKgliaXQgIDYzICAgOiBfUEFHRV9QUk9UTk9ORSBiaXQKLSAqCi0gKiBGb3JtYXQgb2YgZmlsZSBwdGU6Ci0gKgliaXQgICAwICAgOiBwcmVzZW50IGJpdCAobXVzdCBiZSB6ZXJvKQotICoJYml0ICAgMSAgIDogX1BBR0VfRklMRSAobXVzdCBiZSBvbmUpCi0gKgliaXRzICAyLTYyOiBmaWxlX29mZnNldC9QQUdFX1NJWkUKKyAqCWJpdHMgIDEtIDc6IHN3YXAtdHlwZQorICoJYml0cyAgOC02Mjogc3dhcCBvZmZzZXQKICAqCWJpdCAgNjMgICA6IF9QQUdFX1BST1ROT05FIGJpdAogICovCi0jZGVmaW5lIF9fc3dwX3R5cGUoZW50cnkpCQkoKChlbnRyeSkudmFsID4+IDIpICYgMHg3ZikKLSNkZWZpbmUgX19zd3Bfb2Zmc2V0KGVudHJ5KQkJKCgoZW50cnkpLnZhbCA8PCAxKSA+PiAxMCkKLSNkZWZpbmUgX19zd3BfZW50cnkodHlwZSxvZmZzZXQpCSgoc3dwX2VudHJ5X3QpIHsgKCh0eXBlKSA8PCAyKSB8ICgobG9uZykgKG9mZnNldCkgPDwgOSkgfSkKKyNkZWZpbmUgX19zd3BfdHlwZShlbnRyeSkJCSgoKGVudHJ5KS52YWwgPj4gMSkgJiAweDdmKQorI2RlZmluZSBfX3N3cF9vZmZzZXQoZW50cnkpCQkoKChlbnRyeSkudmFsIDw8IDEpID4+IDkpCisjZGVmaW5lIF9fc3dwX2VudHJ5KHR5cGUsb2Zmc2V0KQkoKHN3cF9lbnRyeV90KSB7ICgodHlwZSkgPDwgMSkgfCAoKGxvbmcpIChvZmZzZXQpIDw8IDgpIH0pCiAjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCQkoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSB9KQogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpIHsgKHgpLnZhbCB9KQogCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCQk2MQotI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKQkJKChwdGVfdmFsKHB0ZSkgPDwgMSkgPj4gMykKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJCSgocHRlX3QpIHsgKChvZmYpIDw8IDIpIHwgX1BBR0VfRklMRSB9KQotCiAvKgogICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKICAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS1leHQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS1leHQuYwppbmRleCA4YjkzMThkLi5iZDA5YmY3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2FjcGktZXh0LmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLWV4dC5jCkBAIC02OSwxMCArNjksMTAgQEAKIAlzdGF0dXMgPSBhY3BpX3Jlc291cmNlX3RvX2FkZHJlc3M2NChyZXNvdXJjZSwgJmFkZHIpOwogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSAmJgogCSAgICBhZGRyLnJlc291cmNlX3R5cGUgPT0gQUNQSV9NRU1PUllfUkFOR0UgJiYKLQkgICAgYWRkci5hZGRyZXNzX2xlbmd0aCAmJgorCSAgICBhZGRyLmFkZHJlc3MuYWRkcmVzc19sZW5ndGggJiYKIAkgICAgYWRkci5wcm9kdWNlcl9jb25zdW1lciA9PSBBQ1BJX0NPTlNVTUVSKSB7Ci0JCXNwYWNlLT5iYXNlID0gYWRkci5taW5pbXVtOwotCQlzcGFjZS0+bGVuZ3RoID0gYWRkci5hZGRyZXNzX2xlbmd0aDsKKwkJc3BhY2UtPmJhc2UgPSBhZGRyLmFkZHJlc3MubWluaW11bTsKKwkJc3BhY2UtPmxlbmd0aCA9IGFkZHIuYWRkcmVzcy5hZGRyZXNzX2xlbmd0aDsKIAkJcmV0dXJuIEFFX0NUUkxfVEVSTUlOQVRFOwogCX0KIAlyZXR1cm4gQUVfT0s7CQkvKiBrZWVwIGxvb2tpbmcgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvYWNwaS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKaW5kZXggZTc5NWNiOC4uMmM0NDk4OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMKQEAgLTM4MCw5ICszODAsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX3BhcnNlX21hZHQoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSkKIHsKLQlpZiAoIXRhYmxlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWFjcGlfbWFkdCA9IChzdHJ1Y3QgYWNwaV90YWJsZV9tYWR0ICopdGFibGU7CiAKIAlhY3BpX21hZHRfcmV2ID0gYWNwaV9tYWR0LT5oZWFkZXIucmV2aXNpb247CkBAIC02NDUsOSArNjQyLDYgQEAKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmZhZHRfaGVhZGVyOwogCXN0cnVjdCBhY3BpX3RhYmxlX2ZhZHQgKmZhZHQ7CiAKLQlpZiAoIXRhYmxlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWZhZHRfaGVhZGVyID0gKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKXRhYmxlOwogCWlmIChmYWR0X2hlYWRlci0+cmV2aXNpb24gIT0gMykKIAkJcmV0dXJuIC1FTk9ERVY7CS8qIE9ubHkgZGVhbCB3aXRoIEFDUEkgMi4wIEZBRFQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9mYXVsdC5jIGIvYXJjaC9pYTY0L21tL2ZhdWx0LmMKaW5kZXggNzIyNWRhZC4uYmE1YmE3YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2ZhdWx0LmMKKysrIGIvYXJjaC9pYTY0L21tL2ZhdWx0LmMKQEAgLTE3Miw2ICsxNzIsOCBAQAogCQkgKi8KIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKSB7CiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCX0gZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKSB7CisJCQlnb3RvIGJhZF9hcmVhOwogCQl9IGVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKSB7CiAJCQlzaWduYWwgPSBTSUdCVVM7CiAJCQlnb3RvIGJhZF9hcmVhOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL2lhNjQvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCA3NjA2OWMxLi41MmI3NjA0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL2lhNjQvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMTE0LDEyICsxMTQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgcGFnZSAqCi1mb2xsb3dfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcG1kX3QgKnBtZCwgaW50IHdyaXRlKQotewotCXJldHVybiBOVUxMOwotfQotCiB2b2lkIGh1Z2V0bGJfZnJlZV9wZ2RfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwKIAkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQl1bnNpZ25lZCBsb25nIGZsb29yLCB1bnNpZ25lZCBsb25nIGNlaWxpbmcpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvcGNpL3BjaS5jIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwppbmRleCA5MDBjYzkzLi40OGNjNjU3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvcGNpL3BjaS5jCisrKyBiL2FyY2gvaWE2NC9wY2kvcGNpLmMKQEAgLTE4OCwxMiArMTg4LDEyIEBACiAKIAluYW1lID0gKGNoYXIgKikoaW9zcGFjZSArIDEpOwogCi0JbWluID0gYWRkci0+bWluaW11bTsKLQltYXggPSBtaW4gKyBhZGRyLT5hZGRyZXNzX2xlbmd0aCAtIDE7CisJbWluID0gYWRkci0+YWRkcmVzcy5taW5pbXVtOworCW1heCA9IG1pbiArIGFkZHItPmFkZHJlc3MuYWRkcmVzc19sZW5ndGggLSAxOwogCWlmIChhZGRyLT5pbmZvLmlvLnRyYW5zbGF0aW9uX3R5cGUgPT0gQUNQSV9TUEFSU0VfVFJBTlNMQVRJT04pCiAJCXNwYXJzZSA9IDE7CiAKLQlzcGFjZV9uciA9IG5ld19zcGFjZShhZGRyLT50cmFuc2xhdGlvbl9vZmZzZXQsIHNwYXJzZSk7CisJc3BhY2VfbnIgPSBuZXdfc3BhY2UoYWRkci0+YWRkcmVzcy50cmFuc2xhdGlvbl9vZmZzZXQsIHNwYXJzZSk7CiAJaWYgKHNwYWNlX25yID09IH4wKQogCQlnb3RvIGZyZWVfcmVzb3VyY2U7CiAKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSAmJgogCSAgICAoYWRkci0+cmVzb3VyY2VfdHlwZSA9PSBBQ1BJX01FTU9SWV9SQU5HRSB8fAogCSAgICAgYWRkci0+cmVzb3VyY2VfdHlwZSA9PSBBQ1BJX0lPX1JBTkdFKSAmJgotCSAgICBhZGRyLT5hZGRyZXNzX2xlbmd0aCAmJgorCSAgICBhZGRyLT5hZGRyZXNzLmFkZHJlc3NfbGVuZ3RoICYmCiAJICAgIGFkZHItPnByb2R1Y2VyX2NvbnN1bWVyID09IEFDUElfUFJPRFVDRVIpCiAJCXJldHVybiBBRV9PSzsKIApAQCAtMjg0LDcgKzI4NCw3IEBACiAJaWYgKGFkZHIucmVzb3VyY2VfdHlwZSA9PSBBQ1BJX01FTU9SWV9SQU5HRSkgewogCQlmbGFncyA9IElPUkVTT1VSQ0VfTUVNOwogCQlyb290ID0gJmlvbWVtX3Jlc291cmNlOwotCQlvZmZzZXQgPSBhZGRyLnRyYW5zbGF0aW9uX29mZnNldDsKKwkJb2Zmc2V0ID0gYWRkci5hZGRyZXNzLnRyYW5zbGF0aW9uX29mZnNldDsKIAl9IGVsc2UgaWYgKGFkZHIucmVzb3VyY2VfdHlwZSA9PSBBQ1BJX0lPX1JBTkdFKSB7CiAJCWZsYWdzID0gSU9SRVNPVVJDRV9JTzsKIAkJcm9vdCA9ICZpb3BvcnRfcmVzb3VyY2U7CkBAIC0yOTcsOCArMjk3LDggQEAKIAlyZXNvdXJjZSA9ICZpbmZvLT5yZXNbaW5mby0+cmVzX251bV07CiAJcmVzb3VyY2UtPm5hbWUgPSBpbmZvLT5uYW1lOwogCXJlc291cmNlLT5mbGFncyA9IGZsYWdzOwotCXJlc291cmNlLT5zdGFydCA9IGFkZHIubWluaW11bSArIG9mZnNldDsKLQlyZXNvdXJjZS0+ZW5kID0gcmVzb3VyY2UtPnN0YXJ0ICsgYWRkci5hZGRyZXNzX2xlbmd0aCAtIDE7CisJcmVzb3VyY2UtPnN0YXJ0ID0gYWRkci5hZGRyZXNzLm1pbmltdW0gKyBvZmZzZXQ7CisJcmVzb3VyY2UtPmVuZCA9IHJlc291cmNlLT5zdGFydCArIGFkZHIuYWRkcmVzcy5hZGRyZXNzX2xlbmd0aCAtIDE7CiAJaW5mby0+cmVzX29mZnNldFtpbmZvLT5yZXNfbnVtXSA9IG9mZnNldDsKIAogCWlmIChpbnNlcnRfcmVzb3VyY2Uocm9vdCwgcmVzb3VyY2UpKSB7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCmluZGV4IDljZGFmNzMuLjhmZDhlZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCkBAIC03MCw5ICs3MCw1IEBACiAjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQogI2RlZmluZSBwZm5fcG1kKHBmbiwgcHJvdCkJX19wbWQoKChwZm4pIDw8IFBBR0VfU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKIAotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkyOQotI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKQkoKChwdGVfdmFsKHB0ZSkgPj4gMikgJiAweDdmKSB8ICgoKHB0ZV92YWwocHRlKSA+PiAxMCkpIDw8IDcpKQotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkoKHB0ZV90KSB7ICgoKG9mZikgJiAweDdmKSA8PCAyKSB8ICgoKG9mZikgPj4gNykgPDwgMTApIHwgX1BBR0VfRklMRSB9KQotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fTTMyUl9QR1RBQkxFXzJMRVZFTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAxMDNjZTY3Li44YzFmYjkwIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTUzLDcgKzUzLDcgQEAKICNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFIC0gMSkpCiAKICNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJKFRBU0tfU0laRSAvIFBHRElSX1NJWkUpCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwVUwKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQpAQCAtODAsOCArODAsNiBAQAogICovCiAKICNkZWZpbmUgX1BBR0VfQklUX0RJUlRZCQkwCS8qIHNvZnR3YXJlOiBwYWdlIGNoYW5nZWQgKi8KLSNkZWZpbmUgX1BBR0VfQklUX0ZJTEUJCTAJLyogd2hlbiAhcHJlc2VudDogbm9ubGluZWFyIGZpbGUKLQkJCQkJICAgbWFwcGluZyAqLwogI2RlZmluZSBfUEFHRV9CSVRfUFJFU0VOVAkxCS8qIFZhbGlkOiBwYWdlIGlzIHZhbGlkICovCiAjZGVmaW5lIF9QQUdFX0JJVF9HTE9CQUwJMgkvKiBHbG9iYWwgKi8KICNkZWZpbmUgX1BBR0VfQklUX0xBUkdFCQkzCS8qIExhcmdlICovCkBAIC05Myw3ICs5MSw2IEBACiAjZGVmaW5lIF9QQUdFX0JJVF9QUk9UTk9ORQk5CS8qIHNvZnR3YXJlOiBpZiBub3QgcHJlc2VudCAqLwogCiAjZGVmaW5lIF9QQUdFX0RJUlRZCQkoMVVMIDw8IF9QQUdFX0JJVF9ESVJUWSkKLSNkZWZpbmUgX1BBR0VfRklMRQkJKDFVTCA8PCBfUEFHRV9CSVRfRklMRSkKICNkZWZpbmUgX1BBR0VfUFJFU0VOVAkJKDFVTCA8PCBfUEFHRV9CSVRfUFJFU0VOVCkKICNkZWZpbmUgX1BBR0VfR0xPQkFMCQkoMVVMIDw8IF9QQUdFX0JJVF9HTE9CQUwpCiAjZGVmaW5lIF9QQUdFX0xBUkdFCQkoMVVMIDw8IF9QQUdFX0JJVF9MQVJHRSkKQEAgLTIwNiwxNCArMjAzLDYgQEAKIAlyZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfV1JJVEU7CiB9CiAKLS8qCi0gKiBUaGUgZm9sbG93aW5nIG9ubHkgd29ya3MgaWYgcHRlX3ByZXNlbnQoKSBpcyBub3QgdHJ1ZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQotewotCXJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbW0vZmF1bHQuYyBiL2FyY2gvbTMyci9tbS9mYXVsdC5jCmluZGV4IGU5YzZhODAuLmUzZDRkNDg5MDEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbTMyci9tbS9mYXVsdC5jCkBAIC0yMDAsNiArMjAwLDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9hdGFrZXliLmMgYi9hcmNoL202OGsvYXRhcmkvYXRha2V5Yi5jCmluZGV4IDk1MDIyYjAuLjI2NGRiMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9hdGFrZXliLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2F0YWtleWIuYwpAQCAtMTcwLDcgKzE3MCw2IEBACiAJaWYgKGFjaWFfc3RhdCAmIEFDSUFfUkRSRikgewogCQkvKiByZWNlaXZlZCBhIGNoYXJhY3RlciAqLwogCQlzY2FuY29kZSA9IGFjaWEua2V5X2RhdGE7CS8qIGdldCBpdCBvciByZXNldCB0aGUgQUNJQSwgSSdsbCBnZXQgaXQhICovCi0JCXRhc2tsZXRfc2NoZWR1bGUoJmtleWJvYXJkX3Rhc2tsZXQpOwogCWludGVycHJldF9zY2FuY29kZToKIAkJc3dpdGNoIChrYl9zdGF0ZS5zdGF0ZSkgewogCQljYXNlIEtFWUJPQVJEOgpAQCAtNDMwLDE0ICs0MjksNiBAQAogfQogRVhQT1JUX1NZTUJPTChpa2JkX21vdXNlX3kwX3RvcCk7CiAKLS8qIFJlc3VtZSAqLwotdm9pZCBpa2JkX3Jlc3VtZSh2b2lkKQotewotCXN0YXRpYyBjb25zdCBjaGFyIGNtZFsxXSA9IHsgMHgxMSB9OwotCi0JaWtiZF93cml0ZShjbWQsIDEpOwotfQotCiAvKiBEaXNhYmxlIG1vdXNlICovCiB2b2lkIGlrYmRfbW91c2VfZGlzYWJsZSh2b2lkKQogewpAQCAtNDQ3LDE0ICs0MzgsNiBAQAogfQogRVhQT1JUX1NZTUJPTChpa2JkX21vdXNlX2Rpc2FibGUpOwogCi0vKiBQYXVzZSBvdXRwdXQgKi8KLXZvaWQgaWtiZF9wYXVzZSh2b2lkKQotewotCXN0YXRpYyBjb25zdCBjaGFyIGNtZFsxXSA9IHsgMHgxMyB9OwotCi0JaWtiZF93cml0ZShjbWQsIDEpOwotfQotCiAvKiBTZXQgam95c3RpY2sgZXZlbnQgcmVwb3J0aW5nICovCiB2b2lkIGlrYmRfam95c3RpY2tfZXZlbnRfb24odm9pZCkKIHsKQEAgLTUwMiw1NiArNDg1LDYgQEAKIAlpa2JkX3dyaXRlKGNtZCwgMSk7CiB9CiAKLS8qIFRpbWUtb2YtZGF5IGNsb2NrIHNldCAqLwotdm9pZCBpa2JkX2Nsb2NrX3NldChpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5LCBpbnQgaG91ciwgaW50IG1pbnV0ZSwgaW50IHNlY29uZCkKLXsKLQljaGFyIGNtZFs3XSA9IHsgMHgxQiwgeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQgfTsKLQotCWlrYmRfd3JpdGUoY21kLCA3KTsKLX0KLQotLyogSW50ZXJyb2dhdGUgdGltZS1vZi1kYXkgY2xvY2sgKi8KLXZvaWQgaWtiZF9jbG9ja19nZXQoaW50ICp5ZWFyLCBpbnQgKm1vbnRoLCBpbnQgKmRheSwgaW50ICpob3VyLCBpbnQgKm1pbnV0ZSwgaW50IHNlY29uZCkKLXsKLQlzdGF0aWMgY29uc3QgY2hhciBjbWRbMV0gPSB7IDB4MUMgfTsKLQotCWlrYmRfd3JpdGUoY21kLCAxKTsKLX0KLQotLyogTWVtb3J5IGxvYWQgKi8KLXZvaWQgaWtiZF9tZW1fd3JpdGUoaW50IGFkZHJlc3MsIGludCBzaXplLCBjaGFyICpkYXRhKQotewotCXBhbmljKCJBdHRlbXB0IHRvIHdyaXRlIGRhdGEgaW50byBrZXlib2FyZCBtZW1vcnkiKTsKLX0KLQotLyogTWVtb3J5IHJlYWQgKi8KLXZvaWQgaWtiZF9tZW1fcmVhZChpbnQgYWRkcmVzcywgY2hhciBkYXRhWzZdKQotewotCWNoYXIgY21kWzNdID0geyAweDIxLCBhZGRyZXNzPj44LCBhZGRyZXNzJjB4RkYgfTsKLQotCWlrYmRfd3JpdGUoY21kLCAzKTsKLQotCS8qIHJlY2VpdmUgZGF0YSBhbmQgcHV0IGl0IGluIGRhdGEgKi8KLX0KLQotLyogQ29udHJvbGxlciBleGVjdXRlICovCi12b2lkIGlrYmRfZXhlYyhpbnQgYWRkcmVzcykKLXsKLQljaGFyIGNtZFszXSA9IHsgMHgyMiwgYWRkcmVzcz4+OCwgYWRkcmVzcyYweEZGIH07Ci0KLQlpa2JkX3dyaXRlKGNtZCwgMyk7Ci19Ci0KLS8qIFN0YXR1cyBpbnF1aXJpZXMgKDB4ODctMHg5QSkgbm90IHlldCBpbXBsZW1lbnRlZCAqLwotCi0vKiBTZXQgdGhlIHN0YXRlIG9mIHRoZSBjYXBzIGxvY2sgbGVkLiAqLwotdm9pZCBhdGFyaV9rYmRfbGVkcyh1bnNpZ25lZCBpbnQgbGVkcykKLXsKLQljaGFyIGNtZFs2XSA9IHszMiwgMCwgNCwgMSwgMjU0ICsgKChsZWRzICYgNCkgIT0gMCksIDB9OwotCi0JaWtiZF93cml0ZShjbWQsIDYpOwotfQotCiAvKgogICogVGhlIG9yaWdpbmFsIGNvZGUgc29tZXRpbWVzIGxlZnQgdGhlIGludGVycnVwdCBsaW5lIG9mCiAgKiB0aGUgQUNJQXMgbG93IGZvcmV2ZXIuIEkgaG9wZSwgaXQgaXMgZml4ZWQgbm93LgpAQCAtNTcxLDkgKzUwNCw4IEBACiAJa2Jfc3RhdGUuc3RhdGUgPSBLRVlCT0FSRDsKIAlrYl9zdGF0ZS5sZW4gPSAwOwogCi0JZXJyb3IgPSByZXF1ZXN0X2lycShJUlFfTUZQX0FDSUEsIGF0YXJpX2tleWJvYXJkX2ludGVycnVwdCwKLQkJCSAgICBJUlFfVFlQRV9TTE9XLCAia2V5Ym9hcmQsbW91c2UsTUlESSIsCi0JCQkgICAgYXRhcmlfa2V5Ym9hcmRfaW50ZXJydXB0KTsKKwllcnJvciA9IHJlcXVlc3RfaXJxKElSUV9NRlBfQUNJQSwgYXRhcmlfa2V5Ym9hcmRfaW50ZXJydXB0LCAwLAorCQkJICAgICJrZXlib2FyZCxtb3VzZSxNSURJIiwgYXRhcmlfa2V5Ym9hcmRfaW50ZXJydXB0KTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL3N0ZG1hLmMgYi9hcmNoL202OGsvYXRhcmkvc3RkbWEuYwppbmRleCBlNWE2NjU5Li5iYTY1Zjk0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvc3RkbWEuYworKysgYi9hcmNoL202OGsvYXRhcmkvc3RkbWEuYwpAQCAtMTk4LDcgKzE5OCw3IEBACiB2b2lkIF9faW5pdCBzdGRtYV9pbml0KHZvaWQpCiB7CiAJc3RkbWFfaXNyID0gTlVMTDsKLQlpZiAocmVxdWVzdF9pcnEoSVJRX01GUF9GREMsIHN0ZG1hX2ludCwgSVJRX1RZUEVfU0xPVyB8IElSUUZfU0hBUkVELAorCWlmIChyZXF1ZXN0X2lycShJUlFfTUZQX0ZEQywgc3RkbWFfaW50LCBJUlFGX1NIQVJFRCwKIAkJCSJTVC1ETUEgZmxvcHB5LEFDU0ksSURFLEZhbGNvbi1TQ1NJIiwgc3RkbWFfaW50KSkKIAkJcHJfZXJyKCJDb3VsZG4ndCByZWdpc3RlciBTVC1ETUEgaW50ZXJydXB0XG4iKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS90aW1lLmMgYi9hcmNoL202OGsvYXRhcmkvdGltZS5jCmluZGV4IGRhOGY5ODEuLmM1NDliNDggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS90aW1lLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL3RpbWUuYwpAQCAtMzIsOCArMzIsNyBAQAogICAgIC8qIHN0YXJ0IHRpbWVyIEMsIGRpdiA9IDE6MTAwICovCiAgICAgc3RfbWZwLnRpbV9jdF9jZCA9IChzdF9tZnAudGltX2N0X2NkICYgMTUpIHwgMHg2MDsKICAgICAvKiBpbnN0YWxsIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZm9yIE1GUCBUaW1lciBDICovCi0gICAgaWYgKHJlcXVlc3RfaXJxKElSUV9NRlBfVElNQywgdGltZXJfcm91dGluZSwgSVJRX1RZUEVfU0xPVywKLQkJICAgICJ0aW1lciIsIHRpbWVyX3JvdXRpbmUpKQorICAgIGlmIChyZXF1ZXN0X2lycShJUlFfTUZQX1RJTUMsIHRpbWVyX3JvdXRpbmUsIDAsICJ0aW1lciIsIHRpbWVyX3JvdXRpbmUpKQogCXByX2VycigiQ291bGRuJ3QgcmVnaXN0ZXIgdGltZXIgaW50ZXJydXB0XG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnCmluZGV4IDM5OWRmODguLjFhMTBhMDggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZworKysgYi9hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWcKQEAgLTM2LDYgKzM2LDcgQEAKIENPTkZJR19aT1JST19OQU1FUz15CiAjIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19DTEVBTkNBQ0hFPXkKK0NPTkZJR19aUE9PTD1tCiAjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0FPVVQ9bQogQ09ORklHX0JJTkZNVF9NSVNDPW0KQEAgLTU1LDYgKzU2LDggQEAKIENPTkZJR19ORVRfSVBHUkVfREVNVVg9bQogQ09ORklHX05FVF9JUEdSRT1tCiBDT05GSUdfTkVUX0lQVlRJPW0KK0NPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eQorQ09ORklHX0dFTkVWRT1tCiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KQEAgLTk2LDYgKzk5LDggQEAKIENPTkZJR19ORlRfQ09VTlRFUj1tCiBDT05GSUdfTkZUX0xPRz1tCiBDT05GSUdfTkZUX0xJTUlUPW0KK0NPTkZJR19ORlRfTUFTUT1tCitDT05GSUdfTkZUX1JFRElSPW0KIENPTkZJR19ORlRfTkFUPW0KIENPTkZJR19ORlRfUVVFVUU9bQogQ09ORklHX05GVF9SRUpFQ1Q9bQpAQCAtMTQyLDYgKzE0Nyw3IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09TRj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQpAQCAtMTYzLDYgKzE2OSw3IEBACiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRJUD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUTkVUPW0KK0NPTkZJR19JUF9TRVRfSEFTSF9NQUM9bQogQ09ORklHX0lQX1NFVF9IQVNIX05FVFBPUlRORVQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX05FVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUTkVUPW0KQEAgLTE3MCw5ICsxNzcsMTIgQEAKIENPTkZJR19JUF9TRVRfSEFTSF9ORVRJRkFDRT1tCiBDT05GSUdfSVBfU0VUX0xJU1RfU0VUPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfTE9HX0FSUD1tCiBDT05GSUdfTkZUX0NIQUlOX1JPVVRFX0lQVjQ9bQotQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWND1tCiBDT05GSUdfTkZfVEFCTEVTX0FSUD1tCitDT05GSUdfTkZUX0NIQUlOX05BVF9JUFY0PW0KK0NPTkZJR19ORlRfTUFTUV9JUFY0PW0KK0NPTkZJR19ORlRfUkVESVJfSVBWND1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0FIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQpAQCAtMTgxLDggKzE5MSw3IEBACiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfU1lOUFJPWFk9bQotQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19ORl9OQVRfSVBWND1tCitDT05GSUdfSVBfTkZfTkFUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KQEAgLTE5Nyw2ICsyMDYsOCBAQAogQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KIENPTkZJR19ORlRfQ0hBSU5fUk9VVEVfSVBWNj1tCiBDT05GSUdfTkZUX0NIQUlOX05BVF9JUFY2PW0KK0NPTkZJR19ORlRfTUFTUV9JUFY2PW0KK0NPTkZJR19ORlRfUkVESVJfSVBWNj1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCkBAIC0yMTMsMTcgKzIyNCw0MyBAQAogQ09ORklHX0lQNl9ORl9UQVJHRVRfU1lOUFJPWFk9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogQ09ORklHX0lQNl9ORl9SQVc9bQotQ09ORklHX05GX05BVF9JUFY2PW0KK0NPTkZJR19JUDZfTkZfTkFUPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTlBUPW0KIENPTkZJR19ORl9UQUJMRVNfQlJJREdFPW0KK0NPTkZJR19ORlRfQlJJREdFX01FVEE9bQorQ09ORklHX05GVF9CUklER0VfUkVKRUNUPW0KK0NPTkZJR19ORl9MT0dfQlJJREdFPW0KK0NPTkZJR19CUklER0VfTkZfRUJUQUJMRVM9bQorQ09ORklHX0JSSURHRV9FQlRfQlJPVVRFPW0KK0NPTkZJR19CUklER0VfRUJUX1RfRklMVEVSPW0KK0NPTkZJR19CUklER0VfRUJUX1RfTkFUPW0KK0NPTkZJR19CUklER0VfRUJUXzgwMl8zPW0KK0NPTkZJR19CUklER0VfRUJUX0FNT05HPW0KK0NPTkZJR19CUklER0VfRUJUX0FSUD1tCitDT05GSUdfQlJJREdFX0VCVF9JUD1tCitDT05GSUdfQlJJREdFX0VCVF9JUDY9bQorQ09ORklHX0JSSURHRV9FQlRfTElNSVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTUFSSz1tCitDT05GSUdfQlJJREdFX0VCVF9QS1RUWVBFPW0KK0NPTkZJR19CUklER0VfRUJUX1NUUD1tCitDT05GSUdfQlJJREdFX0VCVF9WTEFOPW0KK0NPTkZJR19CUklER0VfRUJUX0FSUFJFUExZPW0KK0NPTkZJR19CUklER0VfRUJUX0ROQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTUFSS19UPW0KK0NPTkZJR19CUklER0VfRUJUX1JFRElSRUNUPW0KK0NPTkZJR19CUklER0VfRUJUX1NOQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTE9HPW0KK0NPTkZJR19CUklER0VfRUJUX05GTE9HPW0KIENPTkZJR19JUF9EQ0NQPW0KICMgQ09ORklHX0lQX0RDQ1BfQ0NJRDMgaXMgbm90IHNldAogQ09ORklHX1NDVFBfQ09PS0lFX0hNQUNfU0hBMT15CiBDT05GSUdfUkRTPW0KIENPTkZJR19SRFNfVENQPW0KIENPTkZJR19MMlRQPW0KK0NPTkZJR19CUklER0U9bQogQ09ORklHX0FUQUxLPW0KK0NPTkZJR182TE9XUEFOPW0KIENPTkZJR19ETlNfUkVTT0xWRVI9eQogQ09ORklHX0JBVE1BTl9BRFY9bQogQ09ORklHX0JBVE1BTl9BRFZfREFUPXkKQEAgLTIzMiw5ICsyNjksMTAgQEAKIENPTkZJR19ORVRMSU5LX0RJQUc9bQogQ09ORklHX05FVF9NUExTX0dTTz1tCiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRVZFTlRfSEVMUEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERVZUTVBGUz15CitDT05GSUdfREVWVE1QRlNfTU9VTlQ9eQogIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPW0KIENPTkZJR19QQVJQT1JUPW0KIENPTkZJR19QQVJQT1JUX0FNSUdBPW0KQEAgLTI5OSw2ICszMzcsOSBAQAogQ09ORklHX05FVF9URUFNX01PREVfUkFORE9NPW0KIENPTkZJR19ORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUD1tCiBDT05GSUdfTkVUX1RFQU1fTU9ERV9MT0FEQkFMQU5DRT1tCitDT05GSUdfTUFDVkxBTj1tCitDT05GSUdfTUFDVlRBUD1tCitDT05GSUdfSVBWTEFOPW0KIENPTkZJR19WWExBTj1tCiBDT05GSUdfTkVUQ09OU09MRT1tCiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKQEAgLTMxNiw2ICszNTcsOCBAQAogQ09ORklHX0hZRFJBPXkKIENPTkZJR19BUE5FPXkKIENPTkZJR19aT1JSTzgzOTA9eQorIyBDT05GSUdfTkVUX1ZFTkRPUl9RVUFMQ09NTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1JPQ0tFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU01TQyBpcyBub3Qgc2V0CkBAIC0zNzEsNiArNDE0LDcgQEAKIENPTkZJR19ISURSQVc9eQogQ09ORklHX1VISUQ9bQogIyBDT05GSUdfSElEX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BMQU5UUk9OSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfTVNNNjI0Mj1tCkBAIC0zOTIsNiArNDM2LDcgQEAKIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KIENPTkZJR19DVVNFPW0KK0NPTkZJR19PVkVSTEFZX0ZTPW0KIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CkBAIC00MDcsNiArNDUyLDcgQEAKIENPTkZJR19IRlNQTFVTX0ZTPW0KIENPTkZJR19DUkFNRlM9bQogQ09ORklHX1NRVUFTSEZTPW0KK0NPTkZJR19TUVVBU0hGU19MWjQ9eQogQ09ORklHX1NRVUFTSEZTX0xaTz15CiBDT05GSUdfTUlOSVhfRlM9bQogQ09ORklHX09NRlNfRlM9bQpAQCAtNDc2LDEwICs1MjIsMTggQEAKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVD1tCiBDT05GSUdfVEVTVF9TVFJJTkdfSEVMUEVSUz1tCitDT05GSUdfVEVTVF9LU1RSVE9YPW0KK0NPTkZJR19URVNUX0xLTT1tCitDT05GSUdfVEVTVF9VU0VSX0NPUFk9bQorQ09ORklHX1RFU1RfQlBGPW0KK0NPTkZJR19URVNUX0ZJUk1XQVJFPW0KK0NPTkZJR19URVNUX1VERUxBWT1tCitDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19FTkNSWVBURURfS0VZUz1tCiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19VU0VSPW0KIENPTkZJR19DUllQVE9fQ1JZUFREPW0KK0NPTkZJR19DUllQVE9fTUNSWVBURD1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQogQ09ORklHX0NSWVBUT19DQ009bQogQ09ORklHX0NSWVBUT19HQ009bQpAQCAtNTE0LDEzICs1NjgsMTAgQEAKIENPTkZJR19DUllQVE9fTFo0PW0KIENPTkZJR19DUllQVE9fTFo0SEM9bQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19EUkJHX01FTlU9bQorQ09ORklHX0NSWVBUT19EUkJHX0hBU0g9eQorQ09ORklHX0NSWVBUT19EUkJHX0NUUj15CiBDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX0hBU0g9bQogQ09ORklHX0NSWVBUT19VU0VSX0FQSV9TS0NJUEhFUj1tCiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotQ09ORklHX1haX0RFQ19YODY9eQotQ09ORklHX1haX0RFQ19QT1dFUlBDPXkKLUNPTkZJR19YWl9ERUNfSUE2ND15Ci1DT05GSUdfWFpfREVDX0FSTT15Ci1DT05GSUdfWFpfREVDX0FSTVRIVU1CPXkKLUNPTkZJR19YWl9ERUNfU1BBUkM9eQogQ09ORklHX1haX0RFQ19URVNUPW0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnCmluZGV4IGJlMTY3NDAuLjc4NTlhNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZwpAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0FQT0xMTz15CiAjIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19DTEVBTkNBQ0hFPXkKK0NPTkZJR19aUE9PTD1tCiAjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0FPVVQ9bQogQ09ORklHX0JJTkZNVF9NSVNDPW0KQEAgLTUzLDYgKzU0LDggQEAKIENPTkZJR19ORVRfSVBHUkVfREVNVVg9bQogQ09ORklHX05FVF9JUEdSRT1tCiBDT05GSUdfTkVUX0lQVlRJPW0KK0NPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eQorQ09ORklHX0dFTkVWRT1tCiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KQEAgLTk0LDYgKzk3LDggQEAKIENPTkZJR19ORlRfQ09VTlRFUj1tCiBDT05GSUdfTkZUX0xPRz1tCiBDT05GSUdfTkZUX0xJTUlUPW0KK0NPTkZJR19ORlRfTUFTUT1tCitDT05GSUdfTkZUX1JFRElSPW0KIENPTkZJR19ORlRfTkFUPW0KIENPTkZJR19ORlRfUVVFVUU9bQogQ09ORklHX05GVF9SRUpFQ1Q9bQpAQCAtMTQwLDYgKzE0NSw3IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09TRj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQpAQCAtMTYxLDYgKzE2Nyw3IEBACiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRJUD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUTkVUPW0KK0NPTkZJR19JUF9TRVRfSEFTSF9NQUM9bQogQ09ORklHX0lQX1NFVF9IQVNIX05FVFBPUlRORVQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX05FVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUTkVUPW0KQEAgLTE2OCw5ICsxNzUsMTIgQEAKIENPTkZJR19JUF9TRVRfSEFTSF9ORVRJRkFDRT1tCiBDT05GSUdfSVBfU0VUX0xJU1RfU0VUPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfTE9HX0FSUD1tCiBDT05GSUdfTkZUX0NIQUlOX1JPVVRFX0lQVjQ9bQotQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWND1tCiBDT05GSUdfTkZfVEFCTEVTX0FSUD1tCitDT05GSUdfTkZUX0NIQUlOX05BVF9JUFY0PW0KK0NPTkZJR19ORlRfTUFTUV9JUFY0PW0KK0NPTkZJR19ORlRfUkVESVJfSVBWND1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0FIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQpAQCAtMTc5LDggKzE4OSw3IEBACiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfU1lOUFJPWFk9bQotQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19ORl9OQVRfSVBWND1tCitDT05GSUdfSVBfTkZfTkFUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KQEAgLTE5NSw2ICsyMDQsOCBAQAogQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KIENPTkZJR19ORlRfQ0hBSU5fUk9VVEVfSVBWNj1tCiBDT05GSUdfTkZUX0NIQUlOX05BVF9JUFY2PW0KK0NPTkZJR19ORlRfTUFTUV9JUFY2PW0KK0NPTkZJR19ORlRfUkVESVJfSVBWNj1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCkBAIC0yMTEsMTcgKzIyMiw0MyBAQAogQ09ORklHX0lQNl9ORl9UQVJHRVRfU1lOUFJPWFk9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogQ09ORklHX0lQNl9ORl9SQVc9bQotQ09ORklHX05GX05BVF9JUFY2PW0KK0NPTkZJR19JUDZfTkZfTkFUPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTlBUPW0KIENPTkZJR19ORl9UQUJMRVNfQlJJREdFPW0KK0NPTkZJR19ORlRfQlJJREdFX01FVEE9bQorQ09ORklHX05GVF9CUklER0VfUkVKRUNUPW0KK0NPTkZJR19ORl9MT0dfQlJJREdFPW0KK0NPTkZJR19CUklER0VfTkZfRUJUQUJMRVM9bQorQ09ORklHX0JSSURHRV9FQlRfQlJPVVRFPW0KK0NPTkZJR19CUklER0VfRUJUX1RfRklMVEVSPW0KK0NPTkZJR19CUklER0VfRUJUX1RfTkFUPW0KK0NPTkZJR19CUklER0VfRUJUXzgwMl8zPW0KK0NPTkZJR19CUklER0VfRUJUX0FNT05HPW0KK0NPTkZJR19CUklER0VfRUJUX0FSUD1tCitDT05GSUdfQlJJREdFX0VCVF9JUD1tCitDT05GSUdfQlJJREdFX0VCVF9JUDY9bQorQ09ORklHX0JSSURHRV9FQlRfTElNSVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTUFSSz1tCitDT05GSUdfQlJJREdFX0VCVF9QS1RUWVBFPW0KK0NPTkZJR19CUklER0VfRUJUX1NUUD1tCitDT05GSUdfQlJJREdFX0VCVF9WTEFOPW0KK0NPTkZJR19CUklER0VfRUJUX0FSUFJFUExZPW0KK0NPTkZJR19CUklER0VfRUJUX0ROQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTUFSS19UPW0KK0NPTkZJR19CUklER0VfRUJUX1JFRElSRUNUPW0KK0NPTkZJR19CUklER0VfRUJUX1NOQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTE9HPW0KK0NPTkZJR19CUklER0VfRUJUX05GTE9HPW0KIENPTkZJR19JUF9EQ0NQPW0KICMgQ09ORklHX0lQX0RDQ1BfQ0NJRDMgaXMgbm90IHNldAogQ09ORklHX1NDVFBfQ09PS0lFX0hNQUNfU0hBMT15CiBDT05GSUdfUkRTPW0KIENPTkZJR19SRFNfVENQPW0KIENPTkZJR19MMlRQPW0KK0NPTkZJR19CUklER0U9bQogQ09ORklHX0FUQUxLPW0KK0NPTkZJR182TE9XUEFOPW0KIENPTkZJR19ETlNfUkVTT0xWRVI9eQogQ09ORklHX0JBVE1BTl9BRFY9bQogQ09ORklHX0JBVE1BTl9BRFZfREFUPXkKQEAgLTIzMCw5ICsyNjcsMTAgQEAKIENPTkZJR19ORVRMSU5LX0RJQUc9bQogQ09ORklHX05FVF9NUExTX0dTTz1tCiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRVZFTlRfSEVMUEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERVZUTVBGUz15CitDT05GSUdfREVWVE1QRlNfTU9VTlQ9eQogIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPW0KIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCkBAIC0yODEsNiArMzE5LDkgQEAKIENPTkZJR19ORVRfVEVBTV9NT0RFX1JBTkRPTT1tCiBDT05GSUdfTkVUX1RFQU1fTU9ERV9BQ1RJVkVCQUNLVVA9bQogQ09ORklHX05FVF9URUFNX01PREVfTE9BREJBTEFOQ0U9bQorQ09ORklHX01BQ1ZMQU49bQorQ09ORklHX01BQ1ZUQVA9bQorQ09ORklHX0lQVkxBTj1tCiBDT05GSUdfVlhMQU49bQogQ09ORklHX05FVENPTlNPTEU9bQogQ09ORklHX05FVENPTlNPTEVfRFlOQU1JQz15CkBAIC0yOTEsNiArMzMyLDggQEAKICMgQ09ORklHX05FVF9WRU5ET1JfTUFSVkVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX01JQ1JFTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX05BVFNFTUkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9RVUFMQ09NTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1JPQ0tFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU1RNSUNSTyBpcyBub3Qgc2V0CkBAIC0zMzIsNiArMzc1LDcgQEAKIENPTkZJR19ISURSQVc9eQogQ09ORklHX1VISUQ9bQogIyBDT05GSUdfSElEX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BMQU5UUk9OSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfR0VORVJJQz1tCkBAIC0zNTAsNiArMzk0LDcgQEAKIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KIENPTkZJR19DVVNFPW0KK0NPTkZJR19PVkVSTEFZX0ZTPW0KIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CkBAIC0zNjUsNiArNDEwLDcgQEAKIENPTkZJR19IRlNQTFVTX0ZTPW0KIENPTkZJR19DUkFNRlM9bQogQ09ORklHX1NRVUFTSEZTPW0KK0NPTkZJR19TUVVBU0hGU19MWjQ9eQogQ09ORklHX1NRVUFTSEZTX0xaTz15CiBDT05GSUdfTUlOSVhfRlM9bQogQ09ORklHX09NRlNfRlM9bQpAQCAtNDM0LDEwICs0ODAsMTggQEAKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVD1tCiBDT05GSUdfVEVTVF9TVFJJTkdfSEVMUEVSUz1tCitDT05GSUdfVEVTVF9LU1RSVE9YPW0KK0NPTkZJR19URVNUX0xLTT1tCitDT05GSUdfVEVTVF9VU0VSX0NPUFk9bQorQ09ORklHX1RFU1RfQlBGPW0KK0NPTkZJR19URVNUX0ZJUk1XQVJFPW0KK0NPTkZJR19URVNUX1VERUxBWT1tCitDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19FTkNSWVBURURfS0VZUz1tCiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19VU0VSPW0KIENPTkZJR19DUllQVE9fQ1JZUFREPW0KK0NPTkZJR19DUllQVE9fTUNSWVBURD1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQogQ09ORklHX0NSWVBUT19DQ009bQogQ09ORklHX0NSWVBUT19HQ009bQpAQCAtNDcyLDEzICs1MjYsMTAgQEAKIENPTkZJR19DUllQVE9fTFo0PW0KIENPTkZJR19DUllQVE9fTFo0SEM9bQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19EUkJHX01FTlU9bQorQ09ORklHX0NSWVBUT19EUkJHX0hBU0g9eQorQ09ORklHX0NSWVBUT19EUkJHX0NUUj15CiBDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX0hBU0g9bQogQ09ORklHX0NSWVBUT19VU0VSX0FQSV9TS0NJUEhFUj1tCiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotQ09ORklHX1haX0RFQ19YODY9eQotQ09ORklHX1haX0RFQ19QT1dFUlBDPXkKLUNPTkZJR19YWl9ERUNfSUE2ND15Ci1DT05GSUdfWFpfREVDX0FSTT15Ci1DT05GSUdfWFpfREVDX0FSTVRIVU1CPXkKLUNPTkZJR19YWl9ERUNfU1BBUkM9eQogQ09ORklHX1haX0RFQ19URVNUPW0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZwppbmRleCAzOTFlMTg1Li4zNzI1OTNhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnCkBAIC0zMSw4ICszMSwxMCBAQAogQ09ORklHX002ODA0MD15CiBDT05GSUdfTTY4MDYwPXkKIENPTkZJR19BVEFSST15CitDT05GSUdfQVRBUklfUk9NX0lTQT15CiAjIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19DTEVBTkNBQ0hFPXkKK0NPTkZJR19aUE9PTD1tCiAjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0FPVVQ9bQogQ09ORklHX0JJTkZNVF9NSVNDPW0KQEAgLTUyLDYgKzU0LDggQEAKIENPTkZJR19ORVRfSVBHUkVfREVNVVg9bQogQ09ORklHX05FVF9JUEdSRT1tCiBDT05GSUdfTkVUX0lQVlRJPW0KK0NPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eQorQ09ORklHX0dFTkVWRT1tCiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KQEAgLTkzLDYgKzk3LDggQEAKIENPTkZJR19ORlRfQ09VTlRFUj1tCiBDT05GSUdfTkZUX0xPRz1tCiBDT05GSUdfTkZUX0xJTUlUPW0KK0NPTkZJR19ORlRfTUFTUT1tCitDT05GSUdfTkZUX1JFRElSPW0KIENPTkZJR19ORlRfTkFUPW0KIENPTkZJR19ORlRfUVVFVUU9bQogQ09ORklHX05GVF9SRUpFQ1Q9bQpAQCAtMTM5LDYgKzE0NSw3IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09TRj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQpAQCAtMTYwLDYgKzE2Nyw3IEBACiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRJUD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUTkVUPW0KK0NPTkZJR19JUF9TRVRfSEFTSF9NQUM9bQogQ09ORklHX0lQX1NFVF9IQVNIX05FVFBPUlRORVQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX05FVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUTkVUPW0KQEAgLTE2Nyw5ICsxNzUsMTIgQEAKIENPTkZJR19JUF9TRVRfSEFTSF9ORVRJRkFDRT1tCiBDT05GSUdfSVBfU0VUX0xJU1RfU0VUPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfTE9HX0FSUD1tCiBDT05GSUdfTkZUX0NIQUlOX1JPVVRFX0lQVjQ9bQotQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWND1tCiBDT05GSUdfTkZfVEFCTEVTX0FSUD1tCitDT05GSUdfTkZUX0NIQUlOX05BVF9JUFY0PW0KK0NPTkZJR19ORlRfTUFTUV9JUFY0PW0KK0NPTkZJR19ORlRfUkVESVJfSVBWND1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0FIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQpAQCAtMTc4LDggKzE4OSw3IEBACiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfU1lOUFJPWFk9bQotQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19ORl9OQVRfSVBWND1tCitDT05GSUdfSVBfTkZfTkFUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KQEAgLTE5NCw2ICsyMDQsOCBAQAogQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KIENPTkZJR19ORlRfQ0hBSU5fUk9VVEVfSVBWNj1tCiBDT05GSUdfTkZUX0NIQUlOX05BVF9JUFY2PW0KK0NPTkZJR19ORlRfTUFTUV9JUFY2PW0KK0NPTkZJR19ORlRfUkVESVJfSVBWNj1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCkBAIC0yMTAsMTcgKzIyMiw0MyBAQAogQ09ORklHX0lQNl9ORl9UQVJHRVRfU1lOUFJPWFk9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogQ09ORklHX0lQNl9ORl9SQVc9bQotQ09ORklHX05GX05BVF9JUFY2PW0KK0NPTkZJR19JUDZfTkZfTkFUPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTlBUPW0KIENPTkZJR19ORl9UQUJMRVNfQlJJREdFPW0KK0NPTkZJR19ORlRfQlJJREdFX01FVEE9bQorQ09ORklHX05GVF9CUklER0VfUkVKRUNUPW0KK0NPTkZJR19ORl9MT0dfQlJJREdFPW0KK0NPTkZJR19CUklER0VfTkZfRUJUQUJMRVM9bQorQ09ORklHX0JSSURHRV9FQlRfQlJPVVRFPW0KK0NPTkZJR19CUklER0VfRUJUX1RfRklMVEVSPW0KK0NPTkZJR19CUklER0VfRUJUX1RfTkFUPW0KK0NPTkZJR19CUklER0VfRUJUXzgwMl8zPW0KK0NPTkZJR19CUklER0VfRUJUX0FNT05HPW0KK0NPTkZJR19CUklER0VfRUJUX0FSUD1tCitDT05GSUdfQlJJREdFX0VCVF9JUD1tCitDT05GSUdfQlJJREdFX0VCVF9JUDY9bQorQ09ORklHX0JSSURHRV9FQlRfTElNSVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTUFSSz1tCitDT05GSUdfQlJJREdFX0VCVF9QS1RUWVBFPW0KK0NPTkZJR19CUklER0VfRUJUX1NUUD1tCitDT05GSUdfQlJJREdFX0VCVF9WTEFOPW0KK0NPTkZJR19CUklER0VfRUJUX0FSUFJFUExZPW0KK0NPTkZJR19CUklER0VfRUJUX0ROQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTUFSS19UPW0KK0NPTkZJR19CUklER0VfRUJUX1JFRElSRUNUPW0KK0NPTkZJR19CUklER0VfRUJUX1NOQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTE9HPW0KK0NPTkZJR19CUklER0VfRUJUX05GTE9HPW0KIENPTkZJR19JUF9EQ0NQPW0KICMgQ09ORklHX0lQX0RDQ1BfQ0NJRDMgaXMgbm90IHNldAogQ09ORklHX1NDVFBfQ09PS0lFX0hNQUNfU0hBMT15CiBDT05GSUdfUkRTPW0KIENPTkZJR19SRFNfVENQPW0KIENPTkZJR19MMlRQPW0KK0NPTkZJR19CUklER0U9bQogQ09ORklHX0FUQUxLPW0KK0NPTkZJR182TE9XUEFOPW0KIENPTkZJR19ETlNfUkVTT0xWRVI9eQogQ09ORklHX0JBVE1BTl9BRFY9bQogQ09ORklHX0JBVE1BTl9BRFZfREFUPXkKQEAgLTIyOSw5ICsyNjcsMTAgQEAKIENPTkZJR19ORVRMSU5LX0RJQUc9bQogQ09ORklHX05FVF9NUExTX0dTTz1tCiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRVZFTlRfSEVMUEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERVZUTVBGUz15CitDT05GSUdfREVWVE1QRlNfTU9VTlQ9eQogIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPW0KIENPTkZJR19QQVJQT1JUPW0KIENPTkZJR19QQVJQT1JUX0FUQVJJPW0KQEAgLTI4OSw2ICszMjgsOSBAQAogQ09ORklHX05FVF9URUFNX01PREVfUkFORE9NPW0KIENPTkZJR19ORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUD1tCiBDT05GSUdfTkVUX1RFQU1fTU9ERV9MT0FEQkFMQU5DRT1tCitDT05GSUdfTUFDVkxBTj1tCitDT05GSUdfTUFDVlRBUD1tCitDT05GSUdfSVBWTEFOPW0KIENPTkZJR19WWExBTj1tCiBDT05GSUdfTkVUQ09OU09MRT1tCiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKQEAgLTI5OSw4ICszNDEsMTIgQEAKICMgQ09ORklHX05FVF9WRU5ET1JfSU5URUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUlDUkVMIGlzIG5vdCBzZXQKK0NPTkZJR19ORTIwMDA9eQorIyBDT05GSUdfTkVUX1ZFTkRPUl9RVUFMQ09NTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1JPQ0tFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQogIyBDT05GSUdfTkVUX1ZFTkRPUl9TVE1JQ1JPIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfV0laTkVUIGlzIG5vdCBzZXQKQEAgLTM0NSw2ICszOTEsNyBAQAogQ09ORklHX0hJRD1tCiBDT05GSUdfSElEUkFXPXkKIENPTkZJR19VSElEPW0KKyMgQ09ORklHX0hJRF9QTEFOVFJPTklDUyBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX0dFTkVSSUM9bQogIyBDT05GSUdfSU9NTVVfU1VQUE9SVCBpcyBub3Qgc2V0CkBAIC0zNTQsNiArNDAxLDggQEAKIENPTkZJR19ORkJMT0NLPXkKIENPTkZJR19ORkNPTj15CiBDT05GSUdfTkZFVEg9eQorQ09ORklHX0FUQVJJX0VUSEVSTkFUPXkKK0NPTkZJR19BVEFSSV9FVEhFUk5FQz15CiBDT05GSUdfQVRBUklfRFNQNTZLPW0KIENPTkZJR19FWFQ0X0ZTPXkKIENPTkZJR19SRUlTRVJGU19GUz1tCkBAIC0zNjcsNiArNDE2LDcgQEAKIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KIENPTkZJR19DVVNFPW0KK0NPTkZJR19PVkVSTEFZX0ZTPW0KIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CkBAIC0zODIsNiArNDMyLDcgQEAKIENPTkZJR19IRlNQTFVTX0ZTPW0KIENPTkZJR19DUkFNRlM9bQogQ09ORklHX1NRVUFTSEZTPW0KK0NPTkZJR19TUVVBU0hGU19MWjQ9eQogQ09ORklHX1NRVUFTSEZTX0xaTz15CiBDT05GSUdfTUlOSVhfRlM9bQogQ09ORklHX09NRlNfRlM9bQpAQCAtNDUxLDEwICs1MDIsMTggQEAKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVD1tCiBDT05GSUdfVEVTVF9TVFJJTkdfSEVMUEVSUz1tCitDT05GSUdfVEVTVF9LU1RSVE9YPW0KK0NPTkZJR19URVNUX0xLTT1tCitDT05GSUdfVEVTVF9VU0VSX0NPUFk9bQorQ09ORklHX1RFU1RfQlBGPW0KK0NPTkZJR19URVNUX0ZJUk1XQVJFPW0KK0NPTkZJR19URVNUX1VERUxBWT1tCitDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19FTkNSWVBURURfS0VZUz1tCiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19VU0VSPW0KIENPTkZJR19DUllQVE9fQ1JZUFREPW0KK0NPTkZJR19DUllQVE9fTUNSWVBURD1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQogQ09ORklHX0NSWVBUT19DQ009bQogQ09ORklHX0NSWVBUT19HQ009bQpAQCAtNDg5LDEzICs1NDgsMTAgQEAKIENPTkZJR19DUllQVE9fTFo0PW0KIENPTkZJR19DUllQVE9fTFo0SEM9bQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19EUkJHX01FTlU9bQorQ09ORklHX0NSWVBUT19EUkJHX0hBU0g9eQorQ09ORklHX0NSWVBUT19EUkJHX0NUUj15CiBDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX0hBU0g9bQogQ09ORklHX0NSWVBUT19VU0VSX0FQSV9TS0NJUEhFUj1tCiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotQ09ORklHX1haX0RFQ19YODY9eQotQ09ORklHX1haX0RFQ19QT1dFUlBDPXkKLUNPTkZJR19YWl9ERUNfSUE2ND15Ci1DT05GSUdfWFpfREVDX0FSTT15Ci1DT05GSUdfWFpfREVDX0FSTVRIVU1CPXkKLUNPTkZJR19YWl9ERUNfU1BBUkM9eQogQ09ORklHX1haX0RFQ19URVNUPW0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZwppbmRleCBkMGU3MDVkLi5mM2JkMzVlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnCkBAIC0zMiw2ICszMiw3IEBACiBDT05GSUdfQlZNRTYwMDA9eQogIyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfQ0xFQU5DQUNIRT15CitDT05GSUdfWlBPT0w9bQogIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9BT1VUPW0KIENPTkZJR19CSU5GTVRfTUlTQz1tCkBAIC01MSw2ICs1Miw4IEBACiBDT05GSUdfTkVUX0lQR1JFX0RFTVVYPW0KIENPTkZJR19ORVRfSVBHUkU9bQogQ09ORklHX05FVF9JUFZUST1tCitDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXkKK0NPTkZJR19HRU5FVkU9bQogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCkBAIC05Miw2ICs5NSw4IEBACiBDT05GSUdfTkZUX0NPVU5URVI9bQogQ09ORklHX05GVF9MT0c9bQogQ09ORklHX05GVF9MSU1JVD1tCitDT05GSUdfTkZUX01BU1E9bQorQ09ORklHX05GVF9SRURJUj1tCiBDT05GSUdfTkZUX05BVD1tCiBDT05GSUdfTkZUX1FVRVVFPW0KIENPTkZJR19ORlRfUkVKRUNUPW0KQEAgLTEzOCw2ICsxNDMsNyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PU0Y9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVY9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KQEAgLTE1OSw2ICsxNjUsNyBAQAogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUSVA9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVE5FVD1tCitDT05GSUdfSVBfU0VUX0hBU0hfTUFDPW0KIENPTkZJR19JUF9TRVRfSEFTSF9ORVRQT1JUTkVUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9ORVQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX05FVE5FVD1tCkBAIC0xNjYsOSArMTczLDEyIEBACiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUSUZBQ0U9bQogQ09ORklHX0lQX1NFVF9MSVNUX1NFVD1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0xPR19BUlA9bQogQ09ORklHX05GVF9DSEFJTl9ST1VURV9JUFY0PW0KLUNPTkZJR19ORlRfQ0hBSU5fTkFUX0lQVjQ9bQogQ09ORklHX05GX1RBQkxFU19BUlA9bQorQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWND1tCitDT05GSUdfTkZUX01BU1FfSVBWND1tCitDT05GSUdfTkZUX1JFRElSX0lQVjQ9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KQEAgLTE3Nyw4ICsxODcsNyBAQAogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1NZTlBST1hZPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCi1DT05GSUdfTkZfTkFUX0lQVjQ9bQorQ09ORklHX0lQX05GX05BVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCkBAIC0xOTMsNiArMjAyLDggQEAKIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCiBDT05GSUdfTkZUX0NIQUlOX1JPVVRFX0lQVjY9bQogQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWNj1tCitDT05GSUdfTkZUX01BU1FfSVBWNj1tCitDT05GSUdfTkZUX1JFRElSX0lQVjY9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVA2X05GX01BVENIX0FIPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQpAQCAtMjA5LDE3ICsyMjAsNDMgQEAKIENPTkZJR19JUDZfTkZfVEFSR0VUX1NZTlBST1hZPW0KIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KIENPTkZJR19JUDZfTkZfUkFXPW0KLUNPTkZJR19ORl9OQVRfSVBWNj1tCitDT05GSUdfSVA2X05GX05BVD1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX05QVD1tCiBDT05GSUdfTkZfVEFCTEVTX0JSSURHRT1tCitDT05GSUdfTkZUX0JSSURHRV9NRVRBPW0KK0NPTkZJR19ORlRfQlJJREdFX1JFSkVDVD1tCitDT05GSUdfTkZfTE9HX0JSSURHRT1tCitDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW0KK0NPTkZJR19CUklER0VfRUJUX0JST1VURT1tCitDT05GSUdfQlJJREdFX0VCVF9UX0ZJTFRFUj1tCitDT05GSUdfQlJJREdFX0VCVF9UX05BVD1tCitDT05GSUdfQlJJREdFX0VCVF84MDJfMz1tCitDT05GSUdfQlJJREdFX0VCVF9BTU9ORz1tCitDT05GSUdfQlJJREdFX0VCVF9BUlA9bQorQ09ORklHX0JSSURHRV9FQlRfSVA9bQorQ09ORklHX0JSSURHRV9FQlRfSVA2PW0KK0NPTkZJR19CUklER0VfRUJUX0xJTUlUPW0KK0NPTkZJR19CUklER0VfRUJUX01BUks9bQorQ09ORklHX0JSSURHRV9FQlRfUEtUVFlQRT1tCitDT05GSUdfQlJJREdFX0VCVF9TVFA9bQorQ09ORklHX0JSSURHRV9FQlRfVkxBTj1tCitDT05GSUdfQlJJREdFX0VCVF9BUlBSRVBMWT1tCitDT05GSUdfQlJJREdFX0VCVF9ETkFUPW0KK0NPTkZJR19CUklER0VfRUJUX01BUktfVD1tCitDT05GSUdfQlJJREdFX0VCVF9SRURJUkVDVD1tCitDT05GSUdfQlJJREdFX0VCVF9TTkFUPW0KK0NPTkZJR19CUklER0VfRUJUX0xPRz1tCitDT05GSUdfQlJJREdFX0VCVF9ORkxPRz1tCiBDT05GSUdfSVBfRENDUD1tCiAjIENPTkZJR19JUF9EQ0NQX0NDSUQzIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0NPT0tJRV9ITUFDX1NIQTE9eQogQ09ORklHX1JEUz1tCiBDT05GSUdfUkRTX1RDUD1tCiBDT05GSUdfTDJUUD1tCitDT05GSUdfQlJJREdFPW0KIENPTkZJR19BVEFMSz1tCitDT05GSUdfNkxPV1BBTj1tCiBDT05GSUdfRE5TX1JFU09MVkVSPXkKIENPTkZJR19CQVRNQU5fQURWPW0KIENPTkZJR19CQVRNQU5fQURWX0RBVD15CkBAIC0yMjgsOSArMjY1LDEwIEBACiBDT05GSUdfTkVUTElOS19ESUFHPW0KIENPTkZJR19ORVRfTVBMU19HU089bQogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfVUVWRU5UX0hFTFBFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVWVE1QRlM9eQorQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKICMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0NPTk5FQ1RPUj1tCiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQpAQCAtMjgwLDYgKzMxOCw5IEBACiBDT05GSUdfTkVUX1RFQU1fTU9ERV9SQU5ET009bQogQ09ORklHX05FVF9URUFNX01PREVfQUNUSVZFQkFDS1VQPW0KIENPTkZJR19ORVRfVEVBTV9NT0RFX0xPQURCQUxBTkNFPW0KK0NPTkZJR19NQUNWTEFOPW0KK0NPTkZJR19NQUNWVEFQPW0KK0NPTkZJR19JUFZMQU49bQogQ09ORklHX1ZYTEFOPW0KIENPTkZJR19ORVRDT05TT0xFPW0KIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQpAQCAtMjkwLDYgKzMzMSw4IEBACiAjIENPTkZJR19ORVRfVkVORE9SX01BUlZFTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9NSUNSRUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUVVBTENPTU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9ST0NLRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TQU1TVU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU0VFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NUTUlDUk8gaXMgbm90IHNldApAQCAtMzI2LDYgKzM2OSw3IEBACiBDT05GSUdfSElEUkFXPXkKIENPTkZJR19VSElEPW0KICMgQ09ORklHX0hJRF9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QTEFOVFJPTklDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX0dFTkVSSUM9bQpAQCAtMzQzLDYgKzM4Nyw3IEBACiBDT05GSUdfQVVUT0ZTNF9GUz1tCiBDT05GSUdfRlVTRV9GUz1tCiBDT05GSUdfQ1VTRT1tCitDT05GSUdfT1ZFUkxBWV9GUz1tCiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQpAQCAtMzU4LDYgKzQwMyw3IEBACiBDT05GSUdfSEZTUExVU19GUz1tCiBDT05GSUdfQ1JBTUZTPW0KIENPTkZJR19TUVVBU0hGUz1tCitDT05GSUdfU1FVQVNIRlNfTFo0PXkKIENPTkZJR19TUVVBU0hGU19MWk89eQogQ09ORklHX01JTklYX0ZTPW0KIENPTkZJR19PTUZTX0ZTPW0KQEAgLTQyNywxMCArNDczLDE4IEBACiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1Q9bQogQ09ORklHX1RFU1RfU1RSSU5HX0hFTFBFUlM9bQorQ09ORklHX1RFU1RfS1NUUlRPWD1tCitDT05GSUdfVEVTVF9MS009bQorQ09ORklHX1RFU1RfVVNFUl9DT1BZPW0KK0NPTkZJR19URVNUX0JQRj1tCitDT05GSUdfVEVTVF9GSVJNV0FSRT1tCitDT05GSUdfVEVTVF9VREVMQVk9bQorQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfRU5DUllQVEVEX0tFWVM9bQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fVVNFUj1tCiBDT05GSUdfQ1JZUFRPX0NSWVBURD1tCitDT05GSUdfQ1JZUFRPX01DUllQVEQ9bQogQ09ORklHX0NSWVBUT19URVNUPW0KIENPTkZJR19DUllQVE9fQ0NNPW0KIENPTkZJR19DUllQVE9fR0NNPW0KQEAgLTQ2NSwxMyArNTE5LDEwIEBACiBDT05GSUdfQ1JZUFRPX0xaND1tCiBDT05GSUdfQ1JZUFRPX0xaNEhDPW0KICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRFJCR19NRU5VPW0KK0NPTkZJR19DUllQVE9fRFJCR19IQVNIPXkKK0NPTkZJR19DUllQVE9fRFJCR19DVFI9eQogQ09ORklHX0NSWVBUT19VU0VSX0FQSV9IQVNIPW0KIENPTkZJR19DUllQVE9fVVNFUl9BUElfU0tDSVBIRVI9bQogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLUNPTkZJR19YWl9ERUNfWDg2PXkKLUNPTkZJR19YWl9ERUNfUE9XRVJQQz15Ci1DT05GSUdfWFpfREVDX0lBNjQ9eQotQ09ORklHX1haX0RFQ19BUk09eQotQ09ORklHX1haX0RFQ19BUk1USFVNQj15Ci1DT05GSUdfWFpfREVDX1NQQVJDPXkKIENPTkZJR19YWl9ERUNfVEVTVD1tCmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWcKaW5kZXggZmRjN2U5Ni4uOWY5NzkzZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbTY4ay9jb25maWdzL2hwMzAwX2RlZmNvbmZpZwpAQCAtMzQsNiArMzQsNyBAQAogQ09ORklHX0hQMzAwPXkKICMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldAogQ09ORklHX0NMRUFOQ0FDSEU9eQorQ09ORklHX1pQT09MPW0KICMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfQU9VVD1tCiBDT05GSUdfQklORk1UX01JU0M9bQpAQCAtNTMsNiArNTQsOCBAQAogQ09ORklHX05FVF9JUEdSRV9ERU1VWD1tCiBDT05GSUdfTkVUX0lQR1JFPW0KIENPTkZJR19ORVRfSVBWVEk9bQorQ09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15CitDT05GSUdfR0VORVZFPW0KIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQpAQCAtOTQsNiArOTcsOCBAQAogQ09ORklHX05GVF9DT1VOVEVSPW0KIENPTkZJR19ORlRfTE9HPW0KIENPTkZJR19ORlRfTElNSVQ9bQorQ09ORklHX05GVF9NQVNRPW0KK0NPTkZJR19ORlRfUkVESVI9bQogQ09ORklHX05GVF9OQVQ9bQogQ09ORklHX05GVF9RVUVVRT1tCiBDT05GSUdfTkZUX1JFSkVDVD1tCkBAIC0xNDAsNiArMTQ1LDcgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1NGPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVD1tCkBAIC0xNjEsNiArMTY3LDcgQEAKIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVElQPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRORVQ9bQorQ09ORklHX0lQX1NFVF9IQVNIX01BQz1tCiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVE5FVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9ORVRORVQ9bQpAQCAtMTY4LDkgKzE3NSwxMiBAQAogQ09ORklHX0lQX1NFVF9IQVNIX05FVElGQUNFPW0KIENPTkZJR19JUF9TRVRfTElTVF9TRVQ9bQogQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9MT0dfQVJQPW0KIENPTkZJR19ORlRfQ0hBSU5fUk9VVEVfSVBWND1tCi1DT05GSUdfTkZUX0NIQUlOX05BVF9JUFY0PW0KIENPTkZJR19ORl9UQUJMRVNfQVJQPW0KK0NPTkZJR19ORlRfQ0hBSU5fTkFUX0lQVjQ9bQorQ09ORklHX05GVF9NQVNRX0lQVjQ9bQorQ09ORklHX05GVF9SRURJUl9JUFY0PW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCkBAIC0xNzksOCArMTg5LDcgQEAKIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9TWU5QUk9YWT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX05GX05BVF9JUFY0PW0KK0NPTkZJR19JUF9ORl9OQVQ9bQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQpAQCAtMTk1LDYgKzIwNCw4IEBACiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQogQ09ORklHX05GVF9DSEFJTl9ST1VURV9JUFY2PW0KIENPTkZJR19ORlRfQ0hBSU5fTkFUX0lQVjY9bQorQ09ORklHX05GVF9NQVNRX0lQVjY9bQorQ09ORklHX05GVF9SRURJUl9JUFY2PW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KQEAgLTIxMSwxNyArMjIyLDQzIEBACiBDT05GSUdfSVA2X05GX1RBUkdFVF9TWU5QUk9YWT1tCiBDT05GSUdfSVA2X05GX01BTkdMRT1tCiBDT05GSUdfSVA2X05GX1JBVz1tCi1DT05GSUdfTkZfTkFUX0lQVjY9bQorQ09ORklHX0lQNl9ORl9OQVQ9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9OUFQ9bQogQ09ORklHX05GX1RBQkxFU19CUklER0U9bQorQ09ORklHX05GVF9CUklER0VfTUVUQT1tCitDT05GSUdfTkZUX0JSSURHRV9SRUpFQ1Q9bQorQ09ORklHX05GX0xPR19CUklER0U9bQorQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tCitDT05GSUdfQlJJREdFX0VCVF9CUk9VVEU9bQorQ09ORklHX0JSSURHRV9FQlRfVF9GSUxURVI9bQorQ09ORklHX0JSSURHRV9FQlRfVF9OQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfODAyXzM9bQorQ09ORklHX0JSSURHRV9FQlRfQU1PTkc9bQorQ09ORklHX0JSSURHRV9FQlRfQVJQPW0KK0NPTkZJR19CUklER0VfRUJUX0lQPW0KK0NPTkZJR19CUklER0VfRUJUX0lQNj1tCitDT05GSUdfQlJJREdFX0VCVF9MSU1JVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLPW0KK0NPTkZJR19CUklER0VfRUJUX1BLVFRZUEU9bQorQ09ORklHX0JSSURHRV9FQlRfU1RQPW0KK0NPTkZJR19CUklER0VfRUJUX1ZMQU49bQorQ09ORklHX0JSSURHRV9FQlRfQVJQUkVQTFk9bQorQ09ORklHX0JSSURHRV9FQlRfRE5BVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLX1Q9bQorQ09ORklHX0JSSURHRV9FQlRfUkVESVJFQ1Q9bQorQ09ORklHX0JSSURHRV9FQlRfU05BVD1tCitDT05GSUdfQlJJREdFX0VCVF9MT0c9bQorQ09ORklHX0JSSURHRV9FQlRfTkZMT0c9bQogQ09ORklHX0lQX0RDQ1A9bQogIyBDT05GSUdfSVBfRENDUF9DQ0lEMyBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9DT09LSUVfSE1BQ19TSEExPXkKIENPTkZJR19SRFM9bQogQ09ORklHX1JEU19UQ1A9bQogQ09ORklHX0wyVFA9bQorQ09ORklHX0JSSURHRT1tCiBDT05GSUdfQVRBTEs9bQorQ09ORklHXzZMT1dQQU49bQogQ09ORklHX0ROU19SRVNPTFZFUj15CiBDT05GSUdfQkFUTUFOX0FEVj1tCiBDT05GSUdfQkFUTUFOX0FEVl9EQVQ9eQpAQCAtMjMwLDkgKzI2NywxMCBAQAogQ09ORklHX05FVExJTktfRElBRz1tCiBDT05GSUdfTkVUX01QTFNfR1NPPW0KICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VFVkVOVF9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0RFVlRNUEZTPXkKK0NPTkZJR19ERVZUTVBGU19NT1VOVD15CiAjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9bQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KQEAgLTI4MSw2ICszMTksOSBAQAogQ09ORklHX05FVF9URUFNX01PREVfUkFORE9NPW0KIENPTkZJR19ORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUD1tCiBDT05GSUdfTkVUX1RFQU1fTU9ERV9MT0FEQkFMQU5DRT1tCitDT05GSUdfTUFDVkxBTj1tCitDT05GSUdfTUFDVlRBUD1tCitDT05GSUdfSVBWTEFOPW0KIENPTkZJR19WWExBTj1tCiBDT05GSUdfTkVUQ09OU09MRT1tCiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKQEAgLTI5Miw2ICszMzMsOCBAQAogIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUlDUkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1FVQUxDT01NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUk9DS0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU0FNU1VORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NFRVEgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TVE1JQ1JPIGlzIG5vdCBzZXQKQEAgLTMzNSw2ICszNzgsNyBAQAogQ09ORklHX0hJRFJBVz15CiBDT05GSUdfVUhJRD1tCiAjIENPTkZJR19ISURfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUExBTlRST05JQ1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9HRU5FUklDPW0KQEAgLTM1Miw2ICszOTYsNyBAQAogQ09ORklHX0FVVE9GUzRfRlM9bQogQ09ORklHX0ZVU0VfRlM9bQogQ09ORklHX0NVU0U9bQorQ09ORklHX09WRVJMQVlfRlM9bQogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKQEAgLTM2Nyw2ICs0MTIsNyBAQAogQ09ORklHX0hGU1BMVVNfRlM9bQogQ09ORklHX0NSQU1GUz1tCiBDT05GSUdfU1FVQVNIRlM9bQorQ09ORklHX1NRVUFTSEZTX0xaND15CiBDT05GSUdfU1FVQVNIRlNfTFpPPXkKIENPTkZJR19NSU5JWF9GUz1tCiBDT05GSUdfT01GU19GUz1tCkBAIC00MzYsMTAgKzQ4MiwxOCBAQAogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19BU1lOQ19SQUlENl9URVNUPW0KIENPTkZJR19URVNUX1NUUklOR19IRUxQRVJTPW0KK0NPTkZJR19URVNUX0tTVFJUT1g9bQorQ09ORklHX1RFU1RfTEtNPW0KK0NPTkZJR19URVNUX1VTRVJfQ09QWT1tCitDT05GSUdfVEVTVF9CUEY9bQorQ09ORklHX1RFU1RfRklSTVdBUkU9bQorQ09ORklHX1RFU1RfVURFTEFZPW0KK0NPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0VOQ1JZUFRFRF9LRVlTPW0KIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX1VTRVI9bQogQ09ORklHX0NSWVBUT19DUllQVEQ9bQorQ09ORklHX0NSWVBUT19NQ1JZUFREPW0KIENPTkZJR19DUllQVE9fVEVTVD1tCiBDT05GSUdfQ1JZUFRPX0NDTT1tCiBDT05GSUdfQ1JZUFRPX0dDTT1tCkBAIC00NzQsMTMgKzUyOCwxMCBAQAogQ09ORklHX0NSWVBUT19MWjQ9bQogQ09ORklHX0NSWVBUT19MWjRIQz1tCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RSQkdfTUVOVT1tCitDT05GSUdfQ1JZUFRPX0RSQkdfSEFTSD15CitDT05GSUdfQ1JZUFRPX0RSQkdfQ1RSPXkKIENPTkZJR19DUllQVE9fVVNFUl9BUElfSEFTSD1tCiBDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX1NLQ0lQSEVSPW0KICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci1DT05GSUdfWFpfREVDX1g4Nj15Ci1DT05GSUdfWFpfREVDX1BPV0VSUEM9eQotQ09ORklHX1haX0RFQ19JQTY0PXkKLUNPTkZJR19YWl9ERUNfQVJNPXkKLUNPTkZJR19YWl9ERUNfQVJNVEhVTUI9eQotQ09ORklHX1haX0RFQ19TUEFSQz15CiBDT05GSUdfWFpfREVDX1RFU1Q9bQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWcKaW5kZXggM2QzNDU2NC4uODlmMjI1YyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZworKysgYi9hcmNoL202OGsvY29uZmlncy9tYWNfZGVmY29uZmlnCkBAIC0zMyw2ICszMyw3IEBACiBDT05GSUdfTUFDPXkKICMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldAogQ09ORklHX0NMRUFOQ0FDSEU9eQorQ09ORklHX1pQT09MPW0KICMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfQU9VVD1tCiBDT05GSUdfQklORk1UX01JU0M9bQpAQCAtNTIsNiArNTMsOCBAQAogQ09ORklHX05FVF9JUEdSRV9ERU1VWD1tCiBDT05GSUdfTkVUX0lQR1JFPW0KIENPTkZJR19ORVRfSVBWVEk9bQorQ09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15CitDT05GSUdfR0VORVZFPW0KIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQpAQCAtOTMsNiArOTYsOCBAQAogQ09ORklHX05GVF9DT1VOVEVSPW0KIENPTkZJR19ORlRfTE9HPW0KIENPTkZJR19ORlRfTElNSVQ9bQorQ09ORklHX05GVF9NQVNRPW0KK0NPTkZJR19ORlRfUkVESVI9bQogQ09ORklHX05GVF9OQVQ9bQogQ09ORklHX05GVF9RVUVVRT1tCiBDT05GSUdfTkZUX1JFSkVDVD1tCkBAIC0xMzksNiArMTQ0LDcgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1NGPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVD1tCkBAIC0xNjAsNiArMTY2LDcgQEAKIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVElQPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRORVQ9bQorQ09ORklHX0lQX1NFVF9IQVNIX01BQz1tCiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVE5FVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9ORVRORVQ9bQpAQCAtMTY3LDkgKzE3NCwxMiBAQAogQ09ORklHX0lQX1NFVF9IQVNIX05FVElGQUNFPW0KIENPTkZJR19JUF9TRVRfTElTVF9TRVQ9bQogQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9MT0dfQVJQPW0KIENPTkZJR19ORlRfQ0hBSU5fUk9VVEVfSVBWND1tCi1DT05GSUdfTkZUX0NIQUlOX05BVF9JUFY0PW0KIENPTkZJR19ORl9UQUJMRVNfQVJQPW0KK0NPTkZJR19ORlRfQ0hBSU5fTkFUX0lQVjQ9bQorQ09ORklHX05GVF9NQVNRX0lQVjQ9bQorQ09ORklHX05GVF9SRURJUl9JUFY0PW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCkBAIC0xNzgsOCArMTg4LDcgQEAKIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9TWU5QUk9YWT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX05GX05BVF9JUFY0PW0KK0NPTkZJR19JUF9ORl9OQVQ9bQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQpAQCAtMTk0LDYgKzIwMyw4IEBACiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQogQ09ORklHX05GVF9DSEFJTl9ST1VURV9JUFY2PW0KIENPTkZJR19ORlRfQ0hBSU5fTkFUX0lQVjY9bQorQ09ORklHX05GVF9NQVNRX0lQVjY9bQorQ09ORklHX05GVF9SRURJUl9JUFY2PW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KQEAgLTIxMCwyMCArMjIxLDQ2IEBACiBDT05GSUdfSVA2X05GX1RBUkdFVF9TWU5QUk9YWT1tCiBDT05GSUdfSVA2X05GX01BTkdMRT1tCiBDT05GSUdfSVA2X05GX1JBVz1tCi1DT05GSUdfTkZfTkFUX0lQVjY9bQorQ09ORklHX0lQNl9ORl9OQVQ9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9OUFQ9bQogQ09ORklHX05GX1RBQkxFU19CUklER0U9bQorQ09ORklHX05GVF9CUklER0VfTUVUQT1tCitDT05GSUdfTkZUX0JSSURHRV9SRUpFQ1Q9bQorQ09ORklHX05GX0xPR19CUklER0U9bQorQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tCitDT05GSUdfQlJJREdFX0VCVF9CUk9VVEU9bQorQ09ORklHX0JSSURHRV9FQlRfVF9GSUxURVI9bQorQ09ORklHX0JSSURHRV9FQlRfVF9OQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfODAyXzM9bQorQ09ORklHX0JSSURHRV9FQlRfQU1PTkc9bQorQ09ORklHX0JSSURHRV9FQlRfQVJQPW0KK0NPTkZJR19CUklER0VfRUJUX0lQPW0KK0NPTkZJR19CUklER0VfRUJUX0lQNj1tCitDT05GSUdfQlJJREdFX0VCVF9MSU1JVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLPW0KK0NPTkZJR19CUklER0VfRUJUX1BLVFRZUEU9bQorQ09ORklHX0JSSURHRV9FQlRfU1RQPW0KK0NPTkZJR19CUklER0VfRUJUX1ZMQU49bQorQ09ORklHX0JSSURHRV9FQlRfQVJQUkVQTFk9bQorQ09ORklHX0JSSURHRV9FQlRfRE5BVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLX1Q9bQorQ09ORklHX0JSSURHRV9FQlRfUkVESVJFQ1Q9bQorQ09ORklHX0JSSURHRV9FQlRfU05BVD1tCitDT05GSUdfQlJJREdFX0VCVF9MT0c9bQorQ09ORklHX0JSSURHRV9FQlRfTkZMT0c9bQogQ09ORklHX0lQX0RDQ1A9bQogIyBDT05GSUdfSVBfRENDUF9DQ0lEMyBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9DT09LSUVfSE1BQ19TSEExPXkKIENPTkZJR19SRFM9bQogQ09ORklHX1JEU19UQ1A9bQogQ09ORklHX0wyVFA9bQorQ09ORklHX0JSSURHRT1tCiBDT05GSUdfQVRBTEs9bQogQ09ORklHX0RFVl9BUFBMRVRBTEs9bQogQ09ORklHX0lQRERQPW0KIENPTkZJR19JUEREUF9FTkNBUD15CitDT05GSUdfNkxPV1BBTj1tCiBDT05GSUdfRE5TX1JFU09MVkVSPXkKIENPTkZJR19CQVRNQU5fQURWPW0KIENPTkZJR19CQVRNQU5fQURWX0RBVD15CkBAIC0yMzIsOSArMjY5LDEwIEBACiBDT05GSUdfTkVUTElOS19ESUFHPW0KIENPTkZJR19ORVRfTVBMU19HU089bQogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfVUVWRU5UX0hFTFBFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVWVE1QRlM9eQorQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKICMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0NPTk5FQ1RPUj1tCiBDT05GSUdfQkxLX0RFVl9TV0lNPW0KIENPTkZJR19CTEtfREVWX0xPT1A9eQpAQCAtMjk3LDYgKzMzNSw5IEBACiBDT05GSUdfTkVUX1RFQU1fTU9ERV9SQU5ET009bQogQ09ORklHX05FVF9URUFNX01PREVfQUNUSVZFQkFDS1VQPW0KIENPTkZJR19ORVRfVEVBTV9NT0RFX0xPQURCQUxBTkNFPW0KK0NPTkZJR19NQUNWTEFOPW0KK0NPTkZJR19NQUNWVEFQPW0KK0NPTkZJR19JUFZMQU49bQogQ09ORklHX1ZYTEFOPW0KIENPTkZJR19ORVRDT05TT0xFPW0KIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQpAQCAtMzEwLDYgKzM1MSw4IEBACiAjIENPTkZJR19ORVRfVkVORE9SX01JQ1JFTCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDU09OSUM9eQogQ09ORklHX01BQzgzOTA9eQorIyBDT05GSUdfTkVUX1ZFTkRPUl9RVUFMQ09NTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1JPQ0tFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU01TQyBpcyBub3Qgc2V0CkBAIC0zNTcsNiArNDAwLDcgQEAKIENPTkZJR19ISURSQVc9eQogQ09ORklHX1VISUQ9bQogIyBDT05GSUdfSElEX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BMQU5UUk9OSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfR0VORVJJQz1tCkBAIC0zNzQsNiArNDE4LDcgQEAKIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KIENPTkZJR19DVVNFPW0KK0NPTkZJR19PVkVSTEFZX0ZTPW0KIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CkBAIC0zODksNiArNDM0LDcgQEAKIENPTkZJR19IRlNQTFVTX0ZTPW0KIENPTkZJR19DUkFNRlM9bQogQ09ORklHX1NRVUFTSEZTPW0KK0NPTkZJR19TUVVBU0hGU19MWjQ9eQogQ09ORklHX1NRVUFTSEZTX0xaTz15CiBDT05GSUdfTUlOSVhfRlM9bQogQ09ORklHX09NRlNfRlM9bQpAQCAtNDU4LDExICs1MDQsMTggQEAKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVD1tCiBDT05GSUdfVEVTVF9TVFJJTkdfSEVMUEVSUz1tCitDT05GSUdfVEVTVF9LU1RSVE9YPW0KK0NPTkZJR19URVNUX0xLTT1tCitDT05GSUdfVEVTVF9VU0VSX0NPUFk9bQorQ09ORklHX1RFU1RfQlBGPW0KK0NPTkZJR19URVNUX0ZJUk1XQVJFPW0KK0NPTkZJR19URVNUX1VERUxBWT1tCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19FTkNSWVBURURfS0VZUz1tCiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19VU0VSPW0KIENPTkZJR19DUllQVE9fQ1JZUFREPW0KK0NPTkZJR19DUllQVE9fTUNSWVBURD1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQogQ09ORklHX0NSWVBUT19DQ009bQogQ09ORklHX0NSWVBUT19HQ009bQpAQCAtNDk3LDEzICs1NTAsMTAgQEAKIENPTkZJR19DUllQVE9fTFo0PW0KIENPTkZJR19DUllQVE9fTFo0SEM9bQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19EUkJHX01FTlU9bQorQ09ORklHX0NSWVBUT19EUkJHX0hBU0g9eQorQ09ORklHX0NSWVBUT19EUkJHX0NUUj15CiBDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX0hBU0g9bQogQ09ORklHX0NSWVBUT19VU0VSX0FQSV9TS0NJUEhFUj1tCiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotQ09ORklHX1haX0RFQ19YODY9eQotQ09ORklHX1haX0RFQ19QT1dFUlBDPXkKLUNPTkZJR19YWl9ERUNfSUE2ND15Ci1DT05GSUdfWFpfREVDX0FSTT15Ci1DT05GSUdfWFpfREVDX0FSTVRIVU1CPXkKLUNPTkZJR19YWl9ERUNfU1BBUkM9eQogQ09ORklHX1haX0RFQ19URVNUPW0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZwppbmRleCA1OWFhNDIwLi5kM2NkYjU0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnCkBAIC0zOSw5ICszOSwxMSBAQAogQ09ORklHX1E0MD15CiBDT05GSUdfWk9SUk89eQogQ09ORklHX0FNSUdBX1BDTUNJQT15CitDT05GSUdfQVRBUklfUk9NX0lTQT15CiBDT05GSUdfWk9SUk9fTkFNRVM9eQogIyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfQ0xFQU5DQUNIRT15CitDT05GSUdfWlBPT0w9bQogIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9BT1VUPW0KIENPTkZJR19CSU5GTVRfTUlTQz1tCkBAIC02MSw2ICs2Myw4IEBACiBDT05GSUdfTkVUX0lQR1JFX0RFTVVYPW0KIENPTkZJR19ORVRfSVBHUkU9bQogQ09ORklHX05FVF9JUFZUST1tCitDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXkKK0NPTkZJR19HRU5FVkU9bQogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCkBAIC0xMDIsNiArMTA2LDggQEAKIENPTkZJR19ORlRfQ09VTlRFUj1tCiBDT05GSUdfTkZUX0xPRz1tCiBDT05GSUdfTkZUX0xJTUlUPW0KK0NPTkZJR19ORlRfTUFTUT1tCitDT05GSUdfTkZUX1JFRElSPW0KIENPTkZJR19ORlRfTkFUPW0KIENPTkZJR19ORlRfUVVFVUU9bQogQ09ORklHX05GVF9SRUpFQ1Q9bQpAQCAtMTQ4LDYgKzE1NCw3IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09TRj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQpAQCAtMTY5LDYgKzE3Niw3IEBACiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRJUD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUTkVUPW0KK0NPTkZJR19JUF9TRVRfSEFTSF9NQUM9bQogQ09ORklHX0lQX1NFVF9IQVNIX05FVFBPUlRORVQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX05FVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUTkVUPW0KQEAgLTE3Niw5ICsxODQsMTIgQEAKIENPTkZJR19JUF9TRVRfSEFTSF9ORVRJRkFDRT1tCiBDT05GSUdfSVBfU0VUX0xJU1RfU0VUPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfTE9HX0FSUD1tCiBDT05GSUdfTkZUX0NIQUlOX1JPVVRFX0lQVjQ9bQotQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWND1tCiBDT05GSUdfTkZfVEFCTEVTX0FSUD1tCitDT05GSUdfTkZUX0NIQUlOX05BVF9JUFY0PW0KK0NPTkZJR19ORlRfTUFTUV9JUFY0PW0KK0NPTkZJR19ORlRfUkVESVJfSVBWND1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0FIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQpAQCAtMTg3LDggKzE5OCw3IEBACiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfU1lOUFJPWFk9bQotQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19ORl9OQVRfSVBWND1tCitDT05GSUdfSVBfTkZfTkFUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KQEAgLTIwMyw2ICsyMTMsOCBAQAogQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KIENPTkZJR19ORlRfQ0hBSU5fUk9VVEVfSVBWNj1tCiBDT05GSUdfTkZUX0NIQUlOX05BVF9JUFY2PW0KK0NPTkZJR19ORlRfTUFTUV9JUFY2PW0KK0NPTkZJR19ORlRfUkVESVJfSVBWNj1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCkBAIC0yMTksMjAgKzIzMSw0NiBAQAogQ09ORklHX0lQNl9ORl9UQVJHRVRfU1lOUFJPWFk9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogQ09ORklHX0lQNl9ORl9SQVc9bQotQ09ORklHX05GX05BVF9JUFY2PW0KK0NPTkZJR19JUDZfTkZfTkFUPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTlBUPW0KIENPTkZJR19ORl9UQUJMRVNfQlJJREdFPW0KK0NPTkZJR19ORlRfQlJJREdFX01FVEE9bQorQ09ORklHX05GVF9CUklER0VfUkVKRUNUPW0KK0NPTkZJR19ORl9MT0dfQlJJREdFPW0KK0NPTkZJR19CUklER0VfTkZfRUJUQUJMRVM9bQorQ09ORklHX0JSSURHRV9FQlRfQlJPVVRFPW0KK0NPTkZJR19CUklER0VfRUJUX1RfRklMVEVSPW0KK0NPTkZJR19CUklER0VfRUJUX1RfTkFUPW0KK0NPTkZJR19CUklER0VfRUJUXzgwMl8zPW0KK0NPTkZJR19CUklER0VfRUJUX0FNT05HPW0KK0NPTkZJR19CUklER0VfRUJUX0FSUD1tCitDT05GSUdfQlJJREdFX0VCVF9JUD1tCitDT05GSUdfQlJJREdFX0VCVF9JUDY9bQorQ09ORklHX0JSSURHRV9FQlRfTElNSVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTUFSSz1tCitDT05GSUdfQlJJREdFX0VCVF9QS1RUWVBFPW0KK0NPTkZJR19CUklER0VfRUJUX1NUUD1tCitDT05GSUdfQlJJREdFX0VCVF9WTEFOPW0KK0NPTkZJR19CUklER0VfRUJUX0FSUFJFUExZPW0KK0NPTkZJR19CUklER0VfRUJUX0ROQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTUFSS19UPW0KK0NPTkZJR19CUklER0VfRUJUX1JFRElSRUNUPW0KK0NPTkZJR19CUklER0VfRUJUX1NOQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTE9HPW0KK0NPTkZJR19CUklER0VfRUJUX05GTE9HPW0KIENPTkZJR19JUF9EQ0NQPW0KICMgQ09ORklHX0lQX0RDQ1BfQ0NJRDMgaXMgbm90IHNldAogQ09ORklHX1NDVFBfQ09PS0lFX0hNQUNfU0hBMT15CiBDT05GSUdfUkRTPW0KIENPTkZJR19SRFNfVENQPW0KIENPTkZJR19MMlRQPW0KK0NPTkZJR19CUklER0U9bQogQ09ORklHX0FUQUxLPW0KIENPTkZJR19ERVZfQVBQTEVUQUxLPW0KIENPTkZJR19JUEREUD1tCiBDT05GSUdfSVBERFBfRU5DQVA9eQorQ09ORklHXzZMT1dQQU49bQogQ09ORklHX0ROU19SRVNPTFZFUj15CiBDT05GSUdfQkFUTUFOX0FEVj1tCiBDT05GSUdfQkFUTUFOX0FEVl9EQVQ9eQpAQCAtMjQxLDkgKzI3OSwxMCBAQAogQ09ORklHX05FVExJTktfRElBRz1tCiBDT05GSUdfTkVUX01QTFNfR1NPPW0KICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VFVkVOVF9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0RFVlRNUEZTPXkKK0NPTkZJR19ERVZUTVBGU19NT1VOVD15CiAjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9bQogQ09ORklHX1BBUlBPUlQ9bQogQ09ORklHX1BBUlBPUlRfUEM9bQpAQCAtMzI5LDYgKzM2OCw5IEBACiBDT05GSUdfTkVUX1RFQU1fTU9ERV9SQU5ET009bQogQ09ORklHX05FVF9URUFNX01PREVfQUNUSVZFQkFDS1VQPW0KIENPTkZJR19ORVRfVEVBTV9NT0RFX0xPQURCQUxBTkNFPW0KK0NPTkZJR19NQUNWTEFOPW0KK0NPTkZJR19NQUNWVEFQPW0KK0NPTkZJR19JUFZMQU49bQogQ09ORklHX1ZYTEFOPW0KIENPTkZJR19ORVRDT05TT0xFPW0KIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQpAQCAtMzUyLDExICszOTQsMTQgQEAKIENPTkZJR19NQUNTT05JQz15CiBDT05GSUdfSFlEUkE9eQogQ09ORklHX01BQzgzOTA9eQotQ09ORklHX05FMjAwMD1tCitDT05GSUdfTkUyMDAwPXkKIENPTkZJR19BUE5FPXkKIENPTkZJR19aT1JSTzgzOTA9eQorIyBDT05GSUdfTkVUX1ZFTkRPUl9RVUFMQ09NTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1JPQ0tFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKK0NPTkZJR19TTUM5MVg9eQogIyBDT05GSUdfTkVUX1ZFTkRPUl9TVE1JQ1JPIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfV0laTkVUIGlzIG5vdCBzZXQKQEAgLTQyMyw2ICs0NjgsNyBAQAogQ09ORklHX0hJRFJBVz15CiBDT05GSUdfVUhJRD1tCiAjIENPTkZJR19ISURfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUExBTlRST05JQ1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9NU002MjQyPW0KQEAgLTQzNSw2ICs0ODEsOCBAQAogQ09ORklHX05GQkxPQ0s9eQogQ09ORklHX05GQ09OPXkKIENPTkZJR19ORkVUSD15CitDT05GSUdfQVRBUklfRVRIRVJOQVQ9eQorQ09ORklHX0FUQVJJX0VUSEVSTkVDPXkKIENPTkZJR19BVEFSSV9EU1A1Nks9bQogQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMPXkKIENPTkZJR19TRVJJQUxfQ09OU09MRT15CkBAIC00NTAsNiArNDk4LDcgQEAKIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KIENPTkZJR19DVVNFPW0KK0NPTkZJR19PVkVSTEFZX0ZTPW0KIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CkBAIC00NjUsNiArNTE0LDcgQEAKIENPTkZJR19IRlNQTFVTX0ZTPW0KIENPTkZJR19DUkFNRlM9bQogQ09ORklHX1NRVUFTSEZTPW0KK0NPTkZJR19TUVVBU0hGU19MWjQ9eQogQ09ORklHX1NRVUFTSEZTX0xaTz15CiBDT05GSUdfTUlOSVhfRlM9bQogQ09ORklHX09NRlNfRlM9bQpAQCAtNTM0LDExICs1ODQsMTggQEAKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVD1tCiBDT05GSUdfVEVTVF9TVFJJTkdfSEVMUEVSUz1tCitDT05GSUdfVEVTVF9LU1RSVE9YPW0KK0NPTkZJR19URVNUX0xLTT1tCitDT05GSUdfVEVTVF9VU0VSX0NPUFk9bQorQ09ORklHX1RFU1RfQlBGPW0KK0NPTkZJR19URVNUX0ZJUk1XQVJFPW0KK0NPTkZJR19URVNUX1VERUxBWT1tCiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19FTkNSWVBURURfS0VZUz1tCiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19VU0VSPW0KIENPTkZJR19DUllQVE9fQ1JZUFREPW0KK0NPTkZJR19DUllQVE9fTUNSWVBURD1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQogQ09ORklHX0NSWVBUT19DQ009bQogQ09ORklHX0NSWVBUT19HQ009bQpAQCAtNTczLDEzICs2MzAsMTAgQEAKIENPTkZJR19DUllQVE9fTFo0PW0KIENPTkZJR19DUllQVE9fTFo0SEM9bQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19EUkJHX01FTlU9bQorQ09ORklHX0NSWVBUT19EUkJHX0hBU0g9eQorQ09ORklHX0NSWVBUT19EUkJHX0NUUj15CiBDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX0hBU0g9bQogQ09ORklHX0NSWVBUT19VU0VSX0FQSV9TS0NJUEhFUj1tCiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotQ09ORklHX1haX0RFQ19YODY9eQotQ09ORklHX1haX0RFQ19QT1dFUlBDPXkKLUNPTkZJR19YWl9ERUNfSUE2ND15Ci1DT05GSUdfWFpfREVDX0FSTT15Ci1DT05GSUdfWFpfREVDX0FSTVRIVU1CPXkKLUNPTkZJR19YWl9ERUNfU1BBUkM9eQogQ09ORklHX1haX0RFQ19URVNUPW0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWcKaW5kZXggMDY2YjI0YS4uYjRjNzY2NCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWcKQEAgLTMxLDYgKzMxLDcgQEAKIENPTkZJR19NVk1FMTQ3PXkKICMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldAogQ09ORklHX0NMRUFOQ0FDSEU9eQorQ09ORklHX1pQT09MPW0KICMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfQU9VVD1tCiBDT05GSUdfQklORk1UX01JU0M9bQpAQCAtNTAsNiArNTEsOCBAQAogQ09ORklHX05FVF9JUEdSRV9ERU1VWD1tCiBDT05GSUdfTkVUX0lQR1JFPW0KIENPTkZJR19ORVRfSVBWVEk9bQorQ09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15CitDT05GSUdfR0VORVZFPW0KIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQpAQCAtOTEsNiArOTQsOCBAQAogQ09ORklHX05GVF9DT1VOVEVSPW0KIENPTkZJR19ORlRfTE9HPW0KIENPTkZJR19ORlRfTElNSVQ9bQorQ09ORklHX05GVF9NQVNRPW0KK0NPTkZJR19ORlRfUkVESVI9bQogQ09ORklHX05GVF9OQVQ9bQogQ09ORklHX05GVF9RVUVVRT1tCiBDT05GSUdfTkZUX1JFSkVDVD1tCkBAIC0xMzcsNiArMTQyLDcgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1NGPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVD1tCkBAIC0xNTgsNiArMTY0LDcgQEAKIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVElQPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRORVQ9bQorQ09ORklHX0lQX1NFVF9IQVNIX01BQz1tCiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVE5FVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9ORVRORVQ9bQpAQCAtMTY1LDkgKzE3MiwxMiBAQAogQ09ORklHX0lQX1NFVF9IQVNIX05FVElGQUNFPW0KIENPTkZJR19JUF9TRVRfTElTVF9TRVQ9bQogQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9MT0dfQVJQPW0KIENPTkZJR19ORlRfQ0hBSU5fUk9VVEVfSVBWND1tCi1DT05GSUdfTkZUX0NIQUlOX05BVF9JUFY0PW0KIENPTkZJR19ORl9UQUJMRVNfQVJQPW0KK0NPTkZJR19ORlRfQ0hBSU5fTkFUX0lQVjQ9bQorQ09ORklHX05GVF9NQVNRX0lQVjQ9bQorQ09ORklHX05GVF9SRURJUl9JUFY0PW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCkBAIC0xNzYsOCArMTg2LDcgQEAKIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9TWU5QUk9YWT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX05GX05BVF9JUFY0PW0KK0NPTkZJR19JUF9ORl9OQVQ9bQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQpAQCAtMTkyLDYgKzIwMSw4IEBACiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQogQ09ORklHX05GVF9DSEFJTl9ST1VURV9JUFY2PW0KIENPTkZJR19ORlRfQ0hBSU5fTkFUX0lQVjY9bQorQ09ORklHX05GVF9NQVNRX0lQVjY9bQorQ09ORklHX05GVF9SRURJUl9JUFY2PW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KQEAgLTIwOCwxNyArMjE5LDQzIEBACiBDT05GSUdfSVA2X05GX1RBUkdFVF9TWU5QUk9YWT1tCiBDT05GSUdfSVA2X05GX01BTkdMRT1tCiBDT05GSUdfSVA2X05GX1JBVz1tCi1DT05GSUdfTkZfTkFUX0lQVjY9bQorQ09ORklHX0lQNl9ORl9OQVQ9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9OUFQ9bQogQ09ORklHX05GX1RBQkxFU19CUklER0U9bQorQ09ORklHX05GVF9CUklER0VfTUVUQT1tCitDT05GSUdfTkZUX0JSSURHRV9SRUpFQ1Q9bQorQ09ORklHX05GX0xPR19CUklER0U9bQorQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tCitDT05GSUdfQlJJREdFX0VCVF9CUk9VVEU9bQorQ09ORklHX0JSSURHRV9FQlRfVF9GSUxURVI9bQorQ09ORklHX0JSSURHRV9FQlRfVF9OQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfODAyXzM9bQorQ09ORklHX0JSSURHRV9FQlRfQU1PTkc9bQorQ09ORklHX0JSSURHRV9FQlRfQVJQPW0KK0NPTkZJR19CUklER0VfRUJUX0lQPW0KK0NPTkZJR19CUklER0VfRUJUX0lQNj1tCitDT05GSUdfQlJJREdFX0VCVF9MSU1JVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLPW0KK0NPTkZJR19CUklER0VfRUJUX1BLVFRZUEU9bQorQ09ORklHX0JSSURHRV9FQlRfU1RQPW0KK0NPTkZJR19CUklER0VfRUJUX1ZMQU49bQorQ09ORklHX0JSSURHRV9FQlRfQVJQUkVQTFk9bQorQ09ORklHX0JSSURHRV9FQlRfRE5BVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLX1Q9bQorQ09ORklHX0JSSURHRV9FQlRfUkVESVJFQ1Q9bQorQ09ORklHX0JSSURHRV9FQlRfU05BVD1tCitDT05GSUdfQlJJREdFX0VCVF9MT0c9bQorQ09ORklHX0JSSURHRV9FQlRfTkZMT0c9bQogQ09ORklHX0lQX0RDQ1A9bQogIyBDT05GSUdfSVBfRENDUF9DQ0lEMyBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9DT09LSUVfSE1BQ19TSEExPXkKIENPTkZJR19SRFM9bQogQ09ORklHX1JEU19UQ1A9bQogQ09ORklHX0wyVFA9bQorQ09ORklHX0JSSURHRT1tCiBDT05GSUdfQVRBTEs9bQorQ09ORklHXzZMT1dQQU49bQogQ09ORklHX0ROU19SRVNPTFZFUj15CiBDT05GSUdfQkFUTUFOX0FEVj1tCiBDT05GSUdfQkFUTUFOX0FEVl9EQVQ9eQpAQCAtMjI3LDkgKzI2NCwxMCBAQAogQ09ORklHX05FVExJTktfRElBRz1tCiBDT05GSUdfTkVUX01QTFNfR1NPPW0KICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VFVkVOVF9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0RFVlRNUEZTPXkKK0NPTkZJR19ERVZUTVBGU19NT1VOVD15CiAjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9bQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KQEAgLTI3OSw2ICszMTcsOSBAQAogQ09ORklHX05FVF9URUFNX01PREVfUkFORE9NPW0KIENPTkZJR19ORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUD1tCiBDT05GSUdfTkVUX1RFQU1fTU9ERV9MT0FEQkFMQU5DRT1tCitDT05GSUdfTUFDVkxBTj1tCitDT05GSUdfTUFDVlRBUD1tCitDT05GSUdfSVBWTEFOPW0KIENPTkZJR19WWExBTj1tCiBDT05GSUdfTkVUQ09OU09MRT1tCiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKQEAgLTI5MCw2ICszMzEsOCBAQAogIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUlDUkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1FVQUxDT01NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUk9DS0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU0FNU1VORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NFRVEgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TVE1JQ1JPIGlzIG5vdCBzZXQKQEAgLTMyNiw2ICszNjksNyBAQAogQ09ORklHX0hJRFJBVz15CiBDT05GSUdfVUhJRD1tCiAjIENPTkZJR19ISURfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUExBTlRST05JQ1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9HRU5FUklDPW0KQEAgLTM0Myw2ICszODcsNyBAQAogQ09ORklHX0FVVE9GUzRfRlM9bQogQ09ORklHX0ZVU0VfRlM9bQogQ09ORklHX0NVU0U9bQorQ09ORklHX09WRVJMQVlfRlM9bQogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKQEAgLTM1OCw2ICs0MDMsNyBAQAogQ09ORklHX0hGU1BMVVNfRlM9bQogQ09ORklHX0NSQU1GUz1tCiBDT05GSUdfU1FVQVNIRlM9bQorQ09ORklHX1NRVUFTSEZTX0xaND15CiBDT05GSUdfU1FVQVNIRlNfTFpPPXkKIENPTkZJR19NSU5JWF9GUz1tCiBDT05GSUdfT01GU19GUz1tCkBAIC00MjcsMTAgKzQ3MywxOCBAQAogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19BU1lOQ19SQUlENl9URVNUPW0KIENPTkZJR19URVNUX1NUUklOR19IRUxQRVJTPW0KK0NPTkZJR19URVNUX0tTVFJUT1g9bQorQ09ORklHX1RFU1RfTEtNPW0KK0NPTkZJR19URVNUX1VTRVJfQ09QWT1tCitDT05GSUdfVEVTVF9CUEY9bQorQ09ORklHX1RFU1RfRklSTVdBUkU9bQorQ09ORklHX1RFU1RfVURFTEFZPW0KK0NPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0VOQ1JZUFRFRF9LRVlTPW0KIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX1VTRVI9bQogQ09ORklHX0NSWVBUT19DUllQVEQ9bQorQ09ORklHX0NSWVBUT19NQ1JZUFREPW0KIENPTkZJR19DUllQVE9fVEVTVD1tCiBDT05GSUdfQ1JZUFRPX0NDTT1tCiBDT05GSUdfQ1JZUFRPX0dDTT1tCkBAIC00NjUsMTMgKzUxOSwxMCBAQAogQ09ORklHX0NSWVBUT19MWjQ9bQogQ09ORklHX0NSWVBUT19MWjRIQz1tCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RSQkdfTUVOVT1tCitDT05GSUdfQ1JZUFRPX0RSQkdfSEFTSD15CitDT05GSUdfQ1JZUFRPX0RSQkdfQ1RSPXkKIENPTkZJR19DUllQVE9fVVNFUl9BUElfSEFTSD1tCiBDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX1NLQ0lQSEVSPW0KICMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0Ci1DT05GSUdfWFpfREVDX1g4Nj15Ci1DT05GSUdfWFpfREVDX1BPV0VSUEM9eQotQ09ORklHX1haX0RFQ19JQTY0PXkKLUNPTkZJR19YWl9ERUNfQVJNPXkKLUNPTkZJR19YWl9ERUNfQVJNVEhVTUI9eQotQ09ORklHX1haX0RFQ19TUEFSQz15CiBDT05GSUdfWFpfREVDX1RFU1Q9bQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWcgYi9hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZwppbmRleCA5MzI2ZWE2Li4wZDRhMjZmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZworKysgYi9hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZwpAQCAtMzIsNiArMzIsNyBAQAogQ09ORklHX01WTUUxNng9eQogIyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfQ0xFQU5DQUNIRT15CitDT05GSUdfWlBPT0w9bQogIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9BT1VUPW0KIENPTkZJR19CSU5GTVRfTUlTQz1tCkBAIC01MSw2ICs1Miw4IEBACiBDT05GSUdfTkVUX0lQR1JFX0RFTVVYPW0KIENPTkZJR19ORVRfSVBHUkU9bQogQ09ORklHX05FVF9JUFZUST1tCitDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXkKK0NPTkZJR19HRU5FVkU9bQogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCkBAIC05Miw2ICs5NSw4IEBACiBDT05GSUdfTkZUX0NPVU5URVI9bQogQ09ORklHX05GVF9MT0c9bQogQ09ORklHX05GVF9MSU1JVD1tCitDT05GSUdfTkZUX01BU1E9bQorQ09ORklHX05GVF9SRURJUj1tCiBDT05GSUdfTkZUX05BVD1tCiBDT05GSUdfTkZUX1FVRVVFPW0KIENPTkZJR19ORlRfUkVKRUNUPW0KQEAgLTEzOCw2ICsxNDMsNyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PU0Y9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVY9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KQEAgLTE1OSw2ICsxNjUsNyBAQAogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUSVA9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVE5FVD1tCitDT05GSUdfSVBfU0VUX0hBU0hfTUFDPW0KIENPTkZJR19JUF9TRVRfSEFTSF9ORVRQT1JUTkVUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9ORVQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX05FVE5FVD1tCkBAIC0xNjYsOSArMTczLDEyIEBACiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUSUZBQ0U9bQogQ09ORklHX0lQX1NFVF9MSVNUX1NFVD1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0xPR19BUlA9bQogQ09ORklHX05GVF9DSEFJTl9ST1VURV9JUFY0PW0KLUNPTkZJR19ORlRfQ0hBSU5fTkFUX0lQVjQ9bQogQ09ORklHX05GX1RBQkxFU19BUlA9bQorQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWND1tCitDT05GSUdfTkZUX01BU1FfSVBWND1tCitDT05GSUdfTkZUX1JFRElSX0lQVjQ9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KQEAgLTE3Nyw4ICsxODcsNyBAQAogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1NZTlBST1hZPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCi1DT05GSUdfTkZfTkFUX0lQVjQ9bQorQ09ORklHX0lQX05GX05BVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCkBAIC0xOTMsNiArMjAyLDggQEAKIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCiBDT05GSUdfTkZUX0NIQUlOX1JPVVRFX0lQVjY9bQogQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWNj1tCitDT05GSUdfTkZUX01BU1FfSVBWNj1tCitDT05GSUdfTkZUX1JFRElSX0lQVjY9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVA2X05GX01BVENIX0FIPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQpAQCAtMjA5LDE3ICsyMjAsNDMgQEAKIENPTkZJR19JUDZfTkZfVEFSR0VUX1NZTlBST1hZPW0KIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KIENPTkZJR19JUDZfTkZfUkFXPW0KLUNPTkZJR19ORl9OQVRfSVBWNj1tCitDT05GSUdfSVA2X05GX05BVD1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX05QVD1tCiBDT05GSUdfTkZfVEFCTEVTX0JSSURHRT1tCitDT05GSUdfTkZUX0JSSURHRV9NRVRBPW0KK0NPTkZJR19ORlRfQlJJREdFX1JFSkVDVD1tCitDT05GSUdfTkZfTE9HX0JSSURHRT1tCitDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW0KK0NPTkZJR19CUklER0VfRUJUX0JST1VURT1tCitDT05GSUdfQlJJREdFX0VCVF9UX0ZJTFRFUj1tCitDT05GSUdfQlJJREdFX0VCVF9UX05BVD1tCitDT05GSUdfQlJJREdFX0VCVF84MDJfMz1tCitDT05GSUdfQlJJREdFX0VCVF9BTU9ORz1tCitDT05GSUdfQlJJREdFX0VCVF9BUlA9bQorQ09ORklHX0JSSURHRV9FQlRfSVA9bQorQ09ORklHX0JSSURHRV9FQlRfSVA2PW0KK0NPTkZJR19CUklER0VfRUJUX0xJTUlUPW0KK0NPTkZJR19CUklER0VfRUJUX01BUks9bQorQ09ORklHX0JSSURHRV9FQlRfUEtUVFlQRT1tCitDT05GSUdfQlJJREdFX0VCVF9TVFA9bQorQ09ORklHX0JSSURHRV9FQlRfVkxBTj1tCitDT05GSUdfQlJJREdFX0VCVF9BUlBSRVBMWT1tCitDT05GSUdfQlJJREdFX0VCVF9ETkFUPW0KK0NPTkZJR19CUklER0VfRUJUX01BUktfVD1tCitDT05GSUdfQlJJREdFX0VCVF9SRURJUkVDVD1tCitDT05GSUdfQlJJREdFX0VCVF9TTkFUPW0KK0NPTkZJR19CUklER0VfRUJUX0xPRz1tCitDT05GSUdfQlJJREdFX0VCVF9ORkxPRz1tCiBDT05GSUdfSVBfRENDUD1tCiAjIENPTkZJR19JUF9EQ0NQX0NDSUQzIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0NPT0tJRV9ITUFDX1NIQTE9eQogQ09ORklHX1JEUz1tCiBDT05GSUdfUkRTX1RDUD1tCiBDT05GSUdfTDJUUD1tCitDT05GSUdfQlJJREdFPW0KIENPTkZJR19BVEFMSz1tCitDT05GSUdfNkxPV1BBTj1tCiBDT05GSUdfRE5TX1JFU09MVkVSPXkKIENPTkZJR19CQVRNQU5fQURWPW0KIENPTkZJR19CQVRNQU5fQURWX0RBVD15CkBAIC0yMjgsOSArMjY1LDEwIEBACiBDT05GSUdfTkVUTElOS19ESUFHPW0KIENPTkZJR19ORVRfTVBMU19HU089bQogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfVUVWRU5UX0hFTFBFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVWVE1QRlM9eQorQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKICMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0NPTk5FQ1RPUj1tCiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQpAQCAtMjgwLDYgKzMxOCw5IEBACiBDT05GSUdfTkVUX1RFQU1fTU9ERV9SQU5ET009bQogQ09ORklHX05FVF9URUFNX01PREVfQUNUSVZFQkFDS1VQPW0KIENPTkZJR19ORVRfVEVBTV9NT0RFX0xPQURCQUxBTkNFPW0KK0NPTkZJR19NQUNWTEFOPW0KK0NPTkZJR19NQUNWVEFQPW0KK0NPTkZJR19JUFZMQU49bQogQ09ORklHX1ZYTEFOPW0KIENPTkZJR19ORVRDT05TT0xFPW0KIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQpAQCAtMjkwLDYgKzMzMSw4IEBACiAjIENPTkZJR19ORVRfVkVORE9SX01BUlZFTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9NSUNSRUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUVVBTENPTU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9ST0NLRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TQU1TVU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU0VFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NUTUlDUk8gaXMgbm90IHNldApAQCAtMzI2LDYgKzM2OSw3IEBACiBDT05GSUdfSElEUkFXPXkKIENPTkZJR19VSElEPW0KICMgQ09ORklHX0hJRF9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QTEFOVFJPTklDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX0dFTkVSSUM9bQpAQCAtMzQzLDYgKzM4Nyw3IEBACiBDT05GSUdfQVVUT0ZTNF9GUz1tCiBDT05GSUdfRlVTRV9GUz1tCiBDT05GSUdfQ1VTRT1tCitDT05GSUdfT1ZFUkxBWV9GUz1tCiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQpAQCAtMzU4LDYgKzQwMyw3IEBACiBDT05GSUdfSEZTUExVU19GUz1tCiBDT05GSUdfQ1JBTUZTPW0KIENPTkZJR19TUVVBU0hGUz1tCitDT05GSUdfU1FVQVNIRlNfTFo0PXkKIENPTkZJR19TUVVBU0hGU19MWk89eQogQ09ORklHX01JTklYX0ZTPW0KIENPTkZJR19PTUZTX0ZTPW0KQEAgLTQyNywxMSArNDczLDE4IEBACiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1Q9bQogQ09ORklHX1RFU1RfU1RSSU5HX0hFTFBFUlM9bQorQ09ORklHX1RFU1RfS1NUUlRPWD1tCitDT05GSUdfVEVTVF9MS009bQorQ09ORklHX1RFU1RfVVNFUl9DT1BZPW0KK0NPTkZJR19URVNUX0JQRj1tCitDT05GSUdfVEVTVF9GSVJNV0FSRT1tCitDT05GSUdfVEVTVF9VREVMQVk9bQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfRU5DUllQVEVEX0tFWVM9bQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fVVNFUj1tCiBDT05GSUdfQ1JZUFRPX0NSWVBURD1tCitDT05GSUdfQ1JZUFRPX01DUllQVEQ9bQogQ09ORklHX0NSWVBUT19URVNUPW0KIENPTkZJR19DUllQVE9fQ0NNPW0KIENPTkZJR19DUllQVE9fR0NNPW0KQEAgLTQ2NiwxMyArNTE5LDEwIEBACiBDT05GSUdfQ1JZUFRPX0xaND1tCiBDT05GSUdfQ1JZUFRPX0xaNEhDPW0KICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRFJCR19NRU5VPW0KK0NPTkZJR19DUllQVE9fRFJCR19IQVNIPXkKK0NPTkZJR19DUllQVE9fRFJCR19DVFI9eQogQ09ORklHX0NSWVBUT19VU0VSX0FQSV9IQVNIPW0KIENPTkZJR19DUllQVE9fVVNFUl9BUElfU0tDSVBIRVI9bQogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLUNPTkZJR19YWl9ERUNfWDg2PXkKLUNPTkZJR19YWl9ERUNfUE9XRVJQQz15Ci1DT05GSUdfWFpfREVDX0lBNjQ9eQotQ09ORklHX1haX0RFQ19BUk09eQotQ09ORklHX1haX0RFQ19BUk1USFVNQj15Ci1DT05GSUdfWFpfREVDX1NQQVJDPXkKIENPTkZJR19YWl9ERUNfVEVTVD1tCmRpZmYgLS1naXQgYS9hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZwppbmRleCBkN2QxMTAxZTMuLjVkNTgxYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZwpAQCAtMzIsNiArMzIsNyBAQAogQ09ORklHX1E0MD15CiAjIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19DTEVBTkNBQ0hFPXkKK0NPTkZJR19aUE9PTD1tCiAjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0FPVVQ9bQogQ09ORklHX0JJTkZNVF9NSVNDPW0KQEAgLTUxLDYgKzUyLDggQEAKIENPTkZJR19ORVRfSVBHUkVfREVNVVg9bQogQ09ORklHX05FVF9JUEdSRT1tCiBDT05GSUdfTkVUX0lQVlRJPW0KK0NPTkZJR19ORVRfRk9VX0lQX1RVTk5FTFM9eQorQ09ORklHX0dFTkVWRT1tCiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KQEAgLTkyLDYgKzk1LDggQEAKIENPTkZJR19ORlRfQ09VTlRFUj1tCiBDT05GSUdfTkZUX0xPRz1tCiBDT05GSUdfTkZUX0xJTUlUPW0KK0NPTkZJR19ORlRfTUFTUT1tCitDT05GSUdfTkZUX1JFRElSPW0KIENPTkZJR19ORlRfTkFUPW0KIENPTkZJR19ORlRfUVVFVUU9bQogQ09ORklHX05GVF9SRUpFQ1Q9bQpAQCAtMTM4LDYgKzE0Myw3IEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09TRj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQpAQCAtMTU5LDYgKzE2NSw3IEBACiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRJUD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUTkVUPW0KK0NPTkZJR19JUF9TRVRfSEFTSF9NQUM9bQogQ09ORklHX0lQX1NFVF9IQVNIX05FVFBPUlRORVQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX05FVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUTkVUPW0KQEAgLTE2Niw5ICsxNzMsMTIgQEAKIENPTkZJR19JUF9TRVRfSEFTSF9ORVRJRkFDRT1tCiBDT05GSUdfSVBfU0VUX0xJU1RfU0VUPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfTE9HX0FSUD1tCiBDT05GSUdfTkZUX0NIQUlOX1JPVVRFX0lQVjQ9bQotQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWND1tCiBDT05GSUdfTkZfVEFCTEVTX0FSUD1tCitDT05GSUdfTkZUX0NIQUlOX05BVF9JUFY0PW0KK0NPTkZJR19ORlRfTUFTUV9JUFY0PW0KK0NPTkZJR19ORlRfUkVESVJfSVBWND1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQX05GX01BVENIX0FIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQpAQCAtMTc3LDggKzE4Nyw3IEBACiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfU1lOUFJPWFk9bQotQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19ORl9OQVRfSVBWND1tCitDT05GSUdfSVBfTkZfTkFUPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KQEAgLTE5Myw2ICsyMDIsOCBAQAogQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KIENPTkZJR19ORlRfQ0hBSU5fUk9VVEVfSVBWNj1tCiBDT05GSUdfTkZUX0NIQUlOX05BVF9JUFY2PW0KK0NPTkZJR19ORlRfTUFTUV9JUFY2PW0KK0NPTkZJR19ORlRfUkVESVJfSVBWNj1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCkBAIC0yMDksMTcgKzIyMCw0MyBAQAogQ09ORklHX0lQNl9ORl9UQVJHRVRfU1lOUFJPWFk9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogQ09ORklHX0lQNl9ORl9SQVc9bQotQ09ORklHX05GX05BVF9JUFY2PW0KK0NPTkZJR19JUDZfTkZfTkFUPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTlBUPW0KIENPTkZJR19ORl9UQUJMRVNfQlJJREdFPW0KK0NPTkZJR19ORlRfQlJJREdFX01FVEE9bQorQ09ORklHX05GVF9CUklER0VfUkVKRUNUPW0KK0NPTkZJR19ORl9MT0dfQlJJREdFPW0KK0NPTkZJR19CUklER0VfTkZfRUJUQUJMRVM9bQorQ09ORklHX0JSSURHRV9FQlRfQlJPVVRFPW0KK0NPTkZJR19CUklER0VfRUJUX1RfRklMVEVSPW0KK0NPTkZJR19CUklER0VfRUJUX1RfTkFUPW0KK0NPTkZJR19CUklER0VfRUJUXzgwMl8zPW0KK0NPTkZJR19CUklER0VfRUJUX0FNT05HPW0KK0NPTkZJR19CUklER0VfRUJUX0FSUD1tCitDT05GSUdfQlJJREdFX0VCVF9JUD1tCitDT05GSUdfQlJJREdFX0VCVF9JUDY9bQorQ09ORklHX0JSSURHRV9FQlRfTElNSVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTUFSSz1tCitDT05GSUdfQlJJREdFX0VCVF9QS1RUWVBFPW0KK0NPTkZJR19CUklER0VfRUJUX1NUUD1tCitDT05GSUdfQlJJREdFX0VCVF9WTEFOPW0KK0NPTkZJR19CUklER0VfRUJUX0FSUFJFUExZPW0KK0NPTkZJR19CUklER0VfRUJUX0ROQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTUFSS19UPW0KK0NPTkZJR19CUklER0VfRUJUX1JFRElSRUNUPW0KK0NPTkZJR19CUklER0VfRUJUX1NOQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfTE9HPW0KK0NPTkZJR19CUklER0VfRUJUX05GTE9HPW0KIENPTkZJR19JUF9EQ0NQPW0KICMgQ09ORklHX0lQX0RDQ1BfQ0NJRDMgaXMgbm90IHNldAogQ09ORklHX1NDVFBfQ09PS0lFX0hNQUNfU0hBMT15CiBDT05GSUdfUkRTPW0KIENPTkZJR19SRFNfVENQPW0KIENPTkZJR19MMlRQPW0KK0NPTkZJR19CUklER0U9bQogQ09ORklHX0FUQUxLPW0KK0NPTkZJR182TE9XUEFOPW0KIENPTkZJR19ETlNfUkVTT0xWRVI9eQogQ09ORklHX0JBVE1BTl9BRFY9bQogQ09ORklHX0JBVE1BTl9BRFZfREFUPXkKQEAgLTIyOCw5ICsyNjUsMTAgQEAKIENPTkZJR19ORVRMSU5LX0RJQUc9bQogQ09ORklHX05FVF9NUExTX0dTTz1tCiAjIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRVZFTlRfSEVMUEVSIGlzIG5vdCBzZXQKIENPTkZJR19ERVZUTVBGUz15CitDT05GSUdfREVWVE1QRlNfTU9VTlQ9eQogIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZXX0xPQURFUl9VU0VSX0hFTFBFUiBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPW0KIENPTkZJR19QQVJQT1JUPW0KIENPTkZJR19QQVJQT1JUX1BDPW0KQEAgLTI4Niw2ICszMjQsOSBAQAogQ09ORklHX05FVF9URUFNX01PREVfUkFORE9NPW0KIENPTkZJR19ORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUD1tCiBDT05GSUdfTkVUX1RFQU1fTU9ERV9MT0FEQkFMQU5DRT1tCitDT05GSUdfTUFDVkxBTj1tCitDT05GSUdfTUFDVlRBUD1tCitDT05GSUdfSVBWTEFOPW0KIENPTkZJR19WWExBTj1tCiBDT05GSUdfTkVUQ09OU09MRT1tCiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKQEAgLTMwMCw2ICszNDEsOCBAQAogIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUlDUkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORTIwMDA9bQorIyBDT05GSUdfTkVUX1ZFTkRPUl9RVUFMQ09NTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1JPQ0tFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NBTVNVTkcgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TRUVRIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU01TQyBpcyBub3Qgc2V0CkBAIC0zNDcsNiArMzkwLDcgQEAKIENPTkZJR19ISURSQVc9eQogQ09ORklHX1VISUQ9bQogIyBDT05GSUdfSElEX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1BMQU5UUk9OSUNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfR0VORVJJQz1tCkBAIC0zNjUsNiArNDA5LDcgQEAKIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KIENPTkZJR19DVVNFPW0KK0NPTkZJR19PVkVSTEFZX0ZTPW0KIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CkBAIC0zODAsNiArNDI1LDcgQEAKIENPTkZJR19IRlNQTFVTX0ZTPW0KIENPTkZJR19DUkFNRlM9bQogQ09ORklHX1NRVUFTSEZTPW0KK0NPTkZJR19TUVVBU0hGU19MWjQ9eQogQ09ORklHX1NRVUFTSEZTX0xaTz15CiBDT05GSUdfTUlOSVhfRlM9bQogQ09ORklHX09NRlNfRlM9bQpAQCAtNDQ5LDEwICs0OTUsMTggQEAKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfQVNZTkNfUkFJRDZfVEVTVD1tCiBDT05GSUdfVEVTVF9TVFJJTkdfSEVMUEVSUz1tCitDT05GSUdfVEVTVF9LU1RSVE9YPW0KK0NPTkZJR19URVNUX0xLTT1tCitDT05GSUdfVEVTVF9VU0VSX0NPUFk9bQorQ09ORklHX1RFU1RfQlBGPW0KK0NPTkZJR19URVNUX0ZJUk1XQVJFPW0KK0NPTkZJR19URVNUX1VERUxBWT1tCitDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19FTkNSWVBURURfS0VZUz1tCiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19VU0VSPW0KIENPTkZJR19DUllQVE9fQ1JZUFREPW0KK0NPTkZJR19DUllQVE9fTUNSWVBURD1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQogQ09ORklHX0NSWVBUT19DQ009bQogQ09ORklHX0NSWVBUT19HQ009bQpAQCAtNDg3LDEzICs1NDEsMTAgQEAKIENPTkZJR19DUllQVE9fTFo0PW0KIENPTkZJR19DUllQVE9fTFo0SEM9bQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19EUkJHX01FTlU9bQorQ09ORklHX0NSWVBUT19EUkJHX0hBU0g9eQorQ09ORklHX0NSWVBUT19EUkJHX0NUUj15CiBDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX0hBU0g9bQogQ09ORklHX0NSWVBUT19VU0VSX0FQSV9TS0NJUEhFUj1tCiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotQ09ORklHX1haX0RFQ19YODY9eQotQ09ORklHX1haX0RFQ19QT1dFUlBDPXkKLUNPTkZJR19YWl9ERUNfSUE2ND15Ci1DT05GSUdfWFpfREVDX0FSTT15Ci1DT05GSUdfWFpfREVDX0FSTVRIVU1CPXkKLUNPTkZJR19YWl9ERUNfU1BBUkM9eQogQ09ORklHX1haX0RFQ19URVNUPW0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnIGIvYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWcKaW5kZXggOTg1MjJlOC4uYzZiNDlhNCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWcKQEAgLTI5LDYgKzI5LDcgQEAKIENPTkZJR19TVU4zPXkKICMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldAogQ09ORklHX0NMRUFOQ0FDSEU9eQorQ09ORklHX1pQT09MPW0KICMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfQU9VVD1tCiBDT05GSUdfQklORk1UX01JU0M9bQpAQCAtNDgsNiArNDksOCBAQAogQ09ORklHX05FVF9JUEdSRV9ERU1VWD1tCiBDT05GSUdfTkVUX0lQR1JFPW0KIENPTkZJR19ORVRfSVBWVEk9bQorQ09ORklHX05FVF9GT1VfSVBfVFVOTkVMUz15CitDT05GSUdfR0VORVZFPW0KIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQpAQCAtODksNiArOTIsOCBAQAogQ09ORklHX05GVF9DT1VOVEVSPW0KIENPTkZJR19ORlRfTE9HPW0KIENPTkZJR19ORlRfTElNSVQ9bQorQ09ORklHX05GVF9NQVNRPW0KK0NPTkZJR19ORlRfUkVESVI9bQogQ09ORklHX05GVF9OQVQ9bQogQ09ORklHX05GVF9RVUVVRT1tCiBDT05GSUdfTkZUX1JFSkVDVD1tCkBAIC0xMzUsNiArMTQwLDcgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1NGPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVI9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QSFlTREVWPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1FVT1RBPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVD1tCkBAIC0xNTYsNiArMTYyLDcgQEAKIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVElQPW0KIENPTkZJR19JUF9TRVRfSEFTSF9JUFBPUlRORVQ9bQorQ09ORklHX0lQX1NFVF9IQVNIX01BQz1tCiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUUE9SVE5FVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9ORVRORVQ9bQpAQCAtMTYzLDkgKzE3MCwxMiBAQAogQ09ORklHX0lQX1NFVF9IQVNIX05FVElGQUNFPW0KIENPTkZJR19JUF9TRVRfTElTVF9TRVQ9bQogQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9MT0dfQVJQPW0KIENPTkZJR19ORlRfQ0hBSU5fUk9VVEVfSVBWND1tCi1DT05GSUdfTkZUX0NIQUlOX05BVF9JUFY0PW0KIENPTkZJR19ORl9UQUJMRVNfQVJQPW0KK0NPTkZJR19ORlRfQ0hBSU5fTkFUX0lQVjQ9bQorQ09ORklHX05GVF9NQVNRX0lQVjQ9bQorQ09ORklHX05GVF9SRURJUl9JUFY0PW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCkBAIC0xNzQsOCArMTg0LDcgQEAKIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQogQ09ORklHX0lQX05GX1RBUkdFVF9TWU5QUk9YWT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQotQ09ORklHX05GX05BVF9JUFY0PW0KK0NPTkZJR19JUF9ORl9OQVQ9bQogQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQpAQCAtMTkwLDYgKzE5OSw4IEBACiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQogQ09ORklHX05GVF9DSEFJTl9ST1VURV9JUFY2PW0KIENPTkZJR19ORlRfQ0hBSU5fTkFUX0lQVjY9bQorQ09ORklHX05GVF9NQVNRX0lQVjY9bQorQ09ORklHX05GVF9SRURJUl9JUFY2PW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KQEAgLTIwNiwxNyArMjE3LDQzIEBACiBDT05GSUdfSVA2X05GX1RBUkdFVF9TWU5QUk9YWT1tCiBDT05GSUdfSVA2X05GX01BTkdMRT1tCiBDT05GSUdfSVA2X05GX1JBVz1tCi1DT05GSUdfTkZfTkFUX0lQVjY9bQorQ09ORklHX0lQNl9ORl9OQVQ9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9OUFQ9bQogQ09ORklHX05GX1RBQkxFU19CUklER0U9bQorQ09ORklHX05GVF9CUklER0VfTUVUQT1tCitDT05GSUdfTkZUX0JSSURHRV9SRUpFQ1Q9bQorQ09ORklHX05GX0xPR19CUklER0U9bQorQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tCitDT05GSUdfQlJJREdFX0VCVF9CUk9VVEU9bQorQ09ORklHX0JSSURHRV9FQlRfVF9GSUxURVI9bQorQ09ORklHX0JSSURHRV9FQlRfVF9OQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfODAyXzM9bQorQ09ORklHX0JSSURHRV9FQlRfQU1PTkc9bQorQ09ORklHX0JSSURHRV9FQlRfQVJQPW0KK0NPTkZJR19CUklER0VfRUJUX0lQPW0KK0NPTkZJR19CUklER0VfRUJUX0lQNj1tCitDT05GSUdfQlJJREdFX0VCVF9MSU1JVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLPW0KK0NPTkZJR19CUklER0VfRUJUX1BLVFRZUEU9bQorQ09ORklHX0JSSURHRV9FQlRfU1RQPW0KK0NPTkZJR19CUklER0VfRUJUX1ZMQU49bQorQ09ORklHX0JSSURHRV9FQlRfQVJQUkVQTFk9bQorQ09ORklHX0JSSURHRV9FQlRfRE5BVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLX1Q9bQorQ09ORklHX0JSSURHRV9FQlRfUkVESVJFQ1Q9bQorQ09ORklHX0JSSURHRV9FQlRfU05BVD1tCitDT05GSUdfQlJJREdFX0VCVF9MT0c9bQorQ09ORklHX0JSSURHRV9FQlRfTkZMT0c9bQogQ09ORklHX0lQX0RDQ1A9bQogIyBDT05GSUdfSVBfRENDUF9DQ0lEMyBpcyBub3Qgc2V0CiBDT05GSUdfU0NUUF9DT09LSUVfSE1BQ19TSEExPXkKIENPTkZJR19SRFM9bQogQ09ORklHX1JEU19UQ1A9bQogQ09ORklHX0wyVFA9bQorQ09ORklHX0JSSURHRT1tCiBDT05GSUdfQVRBTEs9bQorQ09ORklHXzZMT1dQQU49bQogQ09ORklHX0ROU19SRVNPTFZFUj15CiBDT05GSUdfQkFUTUFOX0FEVj1tCiBDT05GSUdfQkFUTUFOX0FEVl9EQVQ9eQpAQCAtMjI1LDkgKzI2MiwxMCBAQAogQ09ORklHX05FVExJTktfRElBRz1tCiBDT05GSUdfTkVUX01QTFNfR1NPPW0KICMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VFVkVOVF9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0RFVlRNUEZTPXkKK0NPTkZJR19ERVZUTVBGU19NT1VOVD15CiAjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAotIyBDT05GSUdfRldfTE9BREVSX1VTRVJfSEVMUEVSIGlzIG5vdCBzZXQKIENPTkZJR19DT05ORUNUT1I9bQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KQEAgLTI3Nyw2ICszMTUsOSBAQAogQ09ORklHX05FVF9URUFNX01PREVfUkFORE9NPW0KIENPTkZJR19ORVRfVEVBTV9NT0RFX0FDVElWRUJBQ0tVUD1tCiBDT05GSUdfTkVUX1RFQU1fTU9ERV9MT0FEQkFMQU5DRT1tCitDT05GSUdfTUFDVkxBTj1tCitDT05GSUdfTUFDVlRBUD1tCitDT05GSUdfSVBWTEFOPW0KIENPTkZJR19WWExBTj1tCiBDT05GSUdfTkVUQ09OU09MRT1tCiBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKQEAgLTI4Nyw2ICszMjgsOCBAQAogIyBDT05GSUdfTkVUX1ZFTkRPUl9NQVJWRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTUlDUkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1FVQUxDT01NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUk9DS0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU0FNU1VORyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NFRVEgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TVE1JQ1JPIGlzIG5vdCBzZXQKQEAgLTMyNyw2ICszNzAsNyBAQAogQ09ORklHX0hJRFJBVz15CiBDT05GSUdfVUhJRD1tCiAjIENPTkZJR19ISURfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUExBTlRST05JQ1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9HRU5FUklDPW0KQEAgLTM0NCw2ICszODgsNyBAQAogQ09ORklHX0FVVE9GUzRfRlM9bQogQ09ORklHX0ZVU0VfRlM9bQogQ09ORklHX0NVU0U9bQorQ09ORklHX09WRVJMQVlfRlM9bQogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKQEAgLTM1OSw2ICs0MDQsNyBAQAogQ09ORklHX0hGU1BMVVNfRlM9bQogQ09ORklHX0NSQU1GUz1tCiBDT05GSUdfU1FVQVNIRlM9bQorQ09ORklHX1NRVUFTSEZTX0xaND15CiBDT05GSUdfU1FVQVNIRlNfTFpPPXkKIENPTkZJR19NSU5JWF9GUz1tCiBDT05GSUdfT01GU19GUz1tCkBAIC00MjgsMTAgKzQ3NCwxNyBAQAogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19BU1lOQ19SQUlENl9URVNUPW0KIENPTkZJR19URVNUX1NUUklOR19IRUxQRVJTPW0KK0NPTkZJR19URVNUX0tTVFJUT1g9bQorQ09ORklHX1RFU1RfTEtNPW0KK0NPTkZJR19URVNUX1VTRVJfQ09QWT1tCitDT05GSUdfVEVTVF9CUEY9bQorQ09ORklHX1RFU1RfRklSTVdBUkU9bQorQ09ORklHX1RFU1RfVURFTEFZPW0KIENPTkZJR19FTkNSWVBURURfS0VZUz1tCiBDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQogQ09ORklHX0NSWVBUT19VU0VSPW0KIENPTkZJR19DUllQVE9fQ1JZUFREPW0KK0NPTkZJR19DUllQVE9fTUNSWVBURD1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQogQ09ORklHX0NSWVBUT19DQ009bQogQ09ORklHX0NSWVBUT19HQ009bQpAQCAtNDY2LDEzICs1MTksMTAgQEAKIENPTkZJR19DUllQVE9fTFo0PW0KIENPTkZJR19DUllQVE9fTFo0SEM9bQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19EUkJHX01FTlU9bQorQ09ORklHX0NSWVBUT19EUkJHX0hBU0g9eQorQ09ORklHX0NSWVBUT19EUkJHX0NUUj15CiBDT05GSUdfQ1JZUFRPX1VTRVJfQVBJX0hBU0g9bQogQ09ORklHX0NSWVBUT19VU0VSX0FQSV9TS0NJUEhFUj1tCiAjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAotQ09ORklHX1haX0RFQ19YODY9eQotQ09ORklHX1haX0RFQ19QT1dFUlBDPXkKLUNPTkZJR19YWl9ERUNfSUE2ND15Ci1DT05GSUdfWFpfREVDX0FSTT15Ci1DT05GSUdfWFpfREVDX0FSTVRIVU1CPXkKLUNPTkZJR19YWl9ERUNfU1BBUkM9eQogQ09ORklHX1haX0RFQ19URVNUPW0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZyBiL2FyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZwppbmRleCA1MTI4YThjLi5iNjU3ODVlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWcKKysrIGIvYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnCkBAIC0yOSw2ICsyOSw3IEBACiBDT05GSUdfU1VOM1g9eQogIyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfQ0xFQU5DQUNIRT15CitDT05GSUdfWlBPT0w9bQogIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9BT1VUPW0KIENPTkZJR19CSU5GTVRfTUlTQz1tCkBAIC00OCw2ICs0OSw4IEBACiBDT05GSUdfTkVUX0lQR1JFX0RFTVVYPW0KIENPTkZJR19ORVRfSVBHUkU9bQogQ09ORklHX05FVF9JUFZUST1tCitDT05GSUdfTkVUX0ZPVV9JUF9UVU5ORUxTPXkKK0NPTkZJR19HRU5FVkU9bQogQ09ORklHX0lORVRfQUg9bQogQ09ORklHX0lORVRfRVNQPW0KIENPTkZJR19JTkVUX0lQQ09NUD1tCkBAIC04OSw2ICs5Miw4IEBACiBDT05GSUdfTkZUX0NPVU5URVI9bQogQ09ORklHX05GVF9MT0c9bQogQ09ORklHX05GVF9MSU1JVD1tCitDT05GSUdfTkZUX01BU1E9bQorQ09ORklHX05GVF9SRURJUj1tCiBDT05GSUdfTkZUX05BVD1tCiBDT05GSUdfTkZUX1FVRVVFPW0KIENPTkZJR19ORlRfUkVKRUNUPW0KQEAgLTEzNSw2ICsxNDAsNyBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PU0Y9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUj1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BIWVNERVY9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SQVRFRVNUPW0KQEAgLTE1Niw2ICsxNjIsNyBAQAogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVD1tCiBDT05GSUdfSVBfU0VUX0hBU0hfSVBQT1JUSVA9bQogQ09ORklHX0lQX1NFVF9IQVNIX0lQUE9SVE5FVD1tCitDT05GSUdfSVBfU0VUX0hBU0hfTUFDPW0KIENPTkZJR19JUF9TRVRfSEFTSF9ORVRQT1JUTkVUPW0KIENPTkZJR19JUF9TRVRfSEFTSF9ORVQ9bQogQ09ORklHX0lQX1NFVF9IQVNIX05FVE5FVD1tCkBAIC0xNjMsOSArMTcwLDEyIEBACiBDT05GSUdfSVBfU0VUX0hBU0hfTkVUSUZBQ0U9bQogQ09ORklHX0lQX1NFVF9MSVNUX1NFVD1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQorQ09ORklHX05GX0xPR19BUlA9bQogQ09ORklHX05GVF9DSEFJTl9ST1VURV9JUFY0PW0KLUNPTkZJR19ORlRfQ0hBSU5fTkFUX0lQVjQ9bQogQ09ORklHX05GX1RBQkxFU19BUlA9bQorQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWND1tCitDT05GSUdfTkZUX01BU1FfSVBWND1tCitDT05GSUdfTkZUX1JFRElSX0lQVjQ9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9BSD1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KQEAgLTE3NCw4ICsxODQsNyBAQAogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1NZTlBST1hZPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCi1DT05GSUdfTkZfTkFUX0lQVjQ9bQorQ09ORklHX0lQX05GX05BVD1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCkBAIC0xOTAsNiArMTk5LDggQEAKIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCiBDT05GSUdfTkZUX0NIQUlOX1JPVVRFX0lQVjY9bQogQ09ORklHX05GVF9DSEFJTl9OQVRfSVBWNj1tCitDT05GSUdfTkZUX01BU1FfSVBWNj1tCitDT05GSUdfTkZUX1JFRElSX0lQVjY9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVA2X05GX01BVENIX0FIPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQpAQCAtMjA2LDE3ICsyMTcsNDMgQEAKIENPTkZJR19JUDZfTkZfVEFSR0VUX1NZTlBST1hZPW0KIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KIENPTkZJR19JUDZfTkZfUkFXPW0KLUNPTkZJR19ORl9OQVRfSVBWNj1tCitDT05GSUdfSVA2X05GX05BVD1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9NQVNRVUVSQURFPW0KIENPTkZJR19JUDZfTkZfVEFSR0VUX05QVD1tCiBDT05GSUdfTkZfVEFCTEVTX0JSSURHRT1tCitDT05GSUdfTkZUX0JSSURHRV9NRVRBPW0KK0NPTkZJR19ORlRfQlJJREdFX1JFSkVDVD1tCitDT05GSUdfTkZfTE9HX0JSSURHRT1tCitDT05GSUdfQlJJREdFX05GX0VCVEFCTEVTPW0KK0NPTkZJR19CUklER0VfRUJUX0JST1VURT1tCitDT05GSUdfQlJJREdFX0VCVF9UX0ZJTFRFUj1tCitDT05GSUdfQlJJREdFX0VCVF9UX05BVD1tCitDT05GSUdfQlJJREdFX0VCVF84MDJfMz1tCitDT05GSUdfQlJJREdFX0VCVF9BTU9ORz1tCitDT05GSUdfQlJJREdFX0VCVF9BUlA9bQorQ09ORklHX0JSSURHRV9FQlRfSVA9bQorQ09ORklHX0JSSURHRV9FQlRfSVA2PW0KK0NPTkZJR19CUklER0VfRUJUX0xJTUlUPW0KK0NPTkZJR19CUklER0VfRUJUX01BUks9bQorQ09ORklHX0JSSURHRV9FQlRfUEtUVFlQRT1tCitDT05GSUdfQlJJREdFX0VCVF9TVFA9bQorQ09ORklHX0JSSURHRV9FQlRfVkxBTj1tCitDT05GSUdfQlJJREdFX0VCVF9BUlBSRVBMWT1tCitDT05GSUdfQlJJREdFX0VCVF9ETkFUPW0KK0NPTkZJR19CUklER0VfRUJUX01BUktfVD1tCitDT05GSUdfQlJJREdFX0VCVF9SRURJUkVDVD1tCitDT05GSUdfQlJJREdFX0VCVF9TTkFUPW0KK0NPTkZJR19CUklER0VfRUJUX0xPRz1tCitDT05GSUdfQlJJREdFX0VCVF9ORkxPRz1tCiBDT05GSUdfSVBfRENDUD1tCiAjIENPTkZJR19JUF9EQ0NQX0NDSUQzIGlzIG5vdCBzZXQKIENPTkZJR19TQ1RQX0NPT0tJRV9ITUFDX1NIQTE9eQogQ09ORklHX1JEUz1tCiBDT05GSUdfUkRTX1RDUD1tCiBDT05GSUdfTDJUUD1tCitDT05GSUdfQlJJREdFPW0KIENPTkZJR19BVEFMSz1tCitDT05GSUdfNkxPV1BBTj1tCiBDT05GSUdfRE5TX1JFU09MVkVSPXkKIENPTkZJR19CQVRNQU5fQURWPW0KIENPTkZJR19CQVRNQU5fQURWX0RBVD15CkBAIC0yMjUsOSArMjYyLDEwIEBACiBDT05GSUdfTkVUTElOS19ESUFHPW0KIENPTkZJR19ORVRfTVBMU19HU089bQogIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfVUVWRU5UX0hFTFBFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVWVE1QRlM9eQorQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKICMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GV19MT0FERVJfVVNFUl9IRUxQRVIgaXMgbm90IHNldAogQ09ORklHX0NPTk5FQ1RPUj1tCiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQpAQCAtMjc3LDYgKzMxNSw5IEBACiBDT05GSUdfTkVUX1RFQU1fTU9ERV9SQU5ET009bQogQ09ORklHX05FVF9URUFNX01PREVfQUNUSVZFQkFDS1VQPW0KIENPTkZJR19ORVRfVEVBTV9NT0RFX0xPQURCQUxBTkNFPW0KK0NPTkZJR19NQUNWTEFOPW0KK0NPTkZJR19NQUNWVEFQPW0KK0NPTkZJR19JUFZMQU49bQogQ09ORklHX1ZYTEFOPW0KIENPTkZJR19ORVRDT05TT0xFPW0KIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUM9eQpAQCAtMjg4LDYgKzMyOSw4IEBACiAjIENPTkZJR19ORVRfVkVORE9SX01BUlZFTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9NSUNSRUwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfUVVBTENPTU0gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl9ST0NLRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9TQU1TVU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU0VFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX1NUTUlDUk8gaXMgbm90IHNldApAQCAtMzI3LDYgKzM3MCw3IEBACiBDT05GSUdfSElEUkFXPXkKIENPTkZJR19VSElEPW0KICMgQ09ORklHX0hJRF9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QTEFOVFJPTklDUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX0dFTkVSSUM9bQpAQCAtMzQ0LDYgKzM4OCw3IEBACiBDT05GSUdfQVVUT0ZTNF9GUz1tCiBDT05GSUdfRlVTRV9GUz1tCiBDT05GSUdfQ1VTRT1tCitDT05GSUdfT1ZFUkxBWV9GUz1tCiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQpAQCAtMzU5LDYgKzQwNCw3IEBACiBDT05GSUdfSEZTUExVU19GUz1tCiBDT05GSUdfQ1JBTUZTPW0KIENPTkZJR19TUVVBU0hGUz1tCitDT05GSUdfU1FVQVNIRlNfTFo0PXkKIENPTkZJR19TUVVBU0hGU19MWk89eQogQ09ORklHX01JTklYX0ZTPW0KIENPTkZJR19PTUZTX0ZTPW0KQEAgLTQyOCwxMCArNDc0LDE4IEBACiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0FTWU5DX1JBSUQ2X1RFU1Q9bQogQ09ORklHX1RFU1RfU1RSSU5HX0hFTFBFUlM9bQorQ09ORklHX1RFU1RfS1NUUlRPWD1tCitDT05GSUdfVEVTVF9MS009bQorQ09ORklHX1RFU1RfVVNFUl9DT1BZPW0KK0NPTkZJR19URVNUX0JQRj1tCitDT05GSUdfVEVTVF9GSVJNV0FSRT1tCitDT05GSUdfVEVTVF9VREVMQVk9bQorQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfRU5DUllQVEVEX0tFWVM9bQogQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKIENPTkZJR19DUllQVE9fVVNFUj1tCiBDT05GSUdfQ1JZUFRPX0NSWVBURD1tCitDT05GSUdfQ1JZUFRPX01DUllQVEQ9bQogQ09ORklHX0NSWVBUT19URVNUPW0KIENPTkZJR19DUllQVE9fQ0NNPW0KIENPTkZJR19DUllQVE9fR0NNPW0KQEAgLTQ2NiwxMyArNTIwLDEwIEBACiBDT05GSUdfQ1JZUFRPX0xaND1tCiBDT05GSUdfQ1JZUFRPX0xaNEhDPW0KICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRFJCR19NRU5VPW0KK0NPTkZJR19DUllQVE9fRFJCR19IQVNIPXkKK0NPTkZJR19DUllQVE9fRFJCR19DVFI9eQogQ09ORklHX0NSWVBUT19VU0VSX0FQSV9IQVNIPW0KIENPTkZJR19DUllQVE9fVVNFUl9BUElfU0tDSVBIRVI9bQogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKLUNPTkZJR19YWl9ERUNfWDg2PXkKLUNPTkZJR19YWl9ERUNfUE9XRVJQQz15Ci1DT05GSUdfWFpfREVDX0lBNjQ9eQotQ09ORklHX1haX0RFQ19BUk09eQotQ09ORklHX1haX0RFQ19BUk1USFVNQj15Ci1DT05GSUdfWFpfREVDX1NQQVJDPXkKIENPTkZJR19YWl9ERUNfVEVTVD1tCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vS2J1aWxkIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL0tidWlsZAppbmRleCA5YjZjNjkxLi4xNTE3ZWQxIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vS2J1aWxkCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9LYnVpbGQKQEAgLTYsNiArNiw3IEBACiBnZW5lcmljLXkgKz0gZW1lcmdlbmN5LXJlc3RhcnQuaAogZ2VuZXJpYy15ICs9IGVycm5vLmgKIGdlbmVyaWMteSArPSBleGVjLmgKK2dlbmVyaWMteSArPSBmdXRleC5oCiBnZW5lcmljLXkgKz0gaHdfaXJxLmgKIGdlbmVyaWMteSArPSBpb2N0bC5oCiBnZW5lcmljLXkgKz0gaXBjYnVmLmgKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWludHMuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWludHMuaAppbmRleCA5NTNlMGFjLi42MzIxYzQ0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlpbnRzLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpaW50cy5oCkBAIC00MCwxMSArNDAsNiBAQAogLyogY29udmVydCBpcnFfaGFuZGxlciBpbmRleCB0byB2ZWN0b3IgbnVtYmVyICovCiAjZGVmaW5lIElSUV9TT1VSQ0VfVE9fVkVDVE9SKGkpCSgoaSkgKyAoKGkpIDwgOCA/IDB4MTggOiAoMHg0MC04KSkpCiAKLS8qIGludGVycnVwdCBzZXJ2aWNlIHR5cGVzICovCi0jZGVmaW5lIElSUV9UWVBFX1NMT1cgICAgIDAKLSNkZWZpbmUgSVJRX1RZUEVfRkFTVCAgICAgMQotI2RlZmluZSBJUlFfVFlQRV9QUklPICAgICAyCi0KIC8qIFNULU1GUCBpbnRlcnJ1cHRzICovCiAjZGVmaW5lIElSUV9NRlBfQlVTWSAgICAgICg4KQogI2RlZmluZSBJUlFfTUZQX0RDRCAgICAgICAoOSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mdXRleC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Z1dGV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjODY4YWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2Z1dGV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0jaWZuZGVmIF9BU01fTTY4S19GVVRFWF9ICi0jZGVmaW5lIF9BU01fTTY4S19GVVRFWF9ICi0KLSNpZmRlZiBfX0tFUk5FTF9fCi0jaWYgIWRlZmluZWQoQ09ORklHX01NVSkKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9mdXRleC5oPgotI2Vsc2UJLyogQ09ORklHX01NVSAqLwotCi0jaW5jbHVkZSA8bGludXgvZnV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1mdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYyh1MzIgKnV2YWwsIHUzMiBfX3VzZXIgKnVhZGRyLAotCQkJICAgICAgdTMyIG9sZHZhbCwgdTMyIG5ld3ZhbCkKLXsKLQl1MzIgdmFsOwotCi0JaWYgKHVubGlrZWx5KGdldF91c2VyKHZhbCwgdWFkZHIpICE9IDApKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmICh2YWwgPT0gb2xkdmFsICYmIHVubGlrZWx5KHB1dF91c2VyKG5ld3ZhbCwgdWFkZHIpICE9IDApKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCSp1dmFsID0gdmFsOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1mdXRleF9hdG9taWNfb3BfaW51c2VyKGludCBlbmNvZGVkX29wLCB1MzIgX191c2VyICp1YWRkcikKLXsKLQlpbnQgb3AgPSAoZW5jb2RlZF9vcCA+PiAyOCkgJiA3OwotCWludCBjbXAgPSAoZW5jb2RlZF9vcCA+PiAyNCkgJiAxNTsKLQlpbnQgb3BhcmcgPSAoZW5jb2RlZF9vcCA8PCA4KSA+PiAyMDsKLQlpbnQgY21wYXJnID0gKGVuY29kZWRfb3AgPDwgMjApID4+IDIwOwotCWludCBvbGR2YWwsIHJldDsKLQl1MzIgdG1wOwotCi0JaWYgKGVuY29kZWRfb3AgJiAoRlVURVhfT1BfT1BBUkdfU0hJRlQgPDwgMjgpKQotCQlvcGFyZyA9IDEgPDwgb3Bhcmc7Ci0KLQlwYWdlZmF1bHRfZGlzYWJsZSgpOwkvKiBpbXBsaWVzIHByZWVtcHRfZGlzYWJsZSgpICovCi0KLQlyZXQgPSAtRUZBVUxUOwotCWlmICh1bmxpa2VseShnZXRfdXNlcihvbGR2YWwsIHVhZGRyKSAhPSAwKSkKLQkJZ290byBvdXRfcGFnZWZhdWx0X2VuYWJsZTsKLQotCXJldCA9IDA7Ci0JdG1wID0gb2xkdmFsOwotCi0Jc3dpdGNoIChvcCkgewotCWNhc2UgRlVURVhfT1BfU0VUOgotCQl0bXAgPSBvcGFyZzsKLQkJYnJlYWs7Ci0JY2FzZSBGVVRFWF9PUF9BREQ6Ci0JCXRtcCArPSBvcGFyZzsKLQkJYnJlYWs7Ci0JY2FzZSBGVVRFWF9PUF9PUjoKLQkJdG1wIHw9IG9wYXJnOwotCQlicmVhazsKLQljYXNlIEZVVEVYX09QX0FORE46Ci0JCXRtcCAmPSB+b3Bhcmc7Ci0JCWJyZWFrOwotCWNhc2UgRlVURVhfT1BfWE9SOgotCQl0bXAgXj0gb3Bhcmc7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FTk9TWVM7Ci0JfQotCi0JaWYgKHJldCA9PSAwICYmIHVubGlrZWx5KHB1dF91c2VyKHRtcCwgdWFkZHIpICE9IDApKQotCQlyZXQgPSAtRUZBVUxUOwotCi1vdXRfcGFnZWZhdWx0X2VuYWJsZToKLQlwYWdlZmF1bHRfZW5hYmxlKCk7CS8qIHN1YnN1bWVzIHByZWVtcHRfZW5hYmxlKCkgKi8KLQotCWlmIChyZXQgPT0gMCkgewotCQlzd2l0Y2ggKGNtcCkgewotCQljYXNlIEZVVEVYX09QX0NNUF9FUTogcmV0ID0gKG9sZHZhbCA9PSBjbXBhcmcpOyBicmVhazsKLQkJY2FzZSBGVVRFWF9PUF9DTVBfTkU6IHJldCA9IChvbGR2YWwgIT0gY21wYXJnKTsgYnJlYWs7Ci0JCWNhc2UgRlVURVhfT1BfQ01QX0xUOiByZXQgPSAob2xkdmFsIDwgY21wYXJnKTsgYnJlYWs7Ci0JCWNhc2UgRlVURVhfT1BfQ01QX0dFOiByZXQgPSAob2xkdmFsID49IGNtcGFyZyk7IGJyZWFrOwotCQljYXNlIEZVVEVYX09QX0NNUF9MRTogcmV0ID0gKG9sZHZhbCA8PSBjbXBhcmcpOyBicmVhazsKLQkJY2FzZSBGVVRFWF9PUF9DTVBfR1Q6IHJldCA9IChvbGR2YWwgPiBjbXBhcmcpOyBicmVhazsKLQkJZGVmYXVsdDogcmV0ID0gLUVOT1NZUzsKLQkJfQotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0jZW5kaWYgLyogQ09ORklHX01NVSAqLwotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZiAvKiBfQVNNX002OEtfRlVURVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21hY2ludG9zaC5oCmluZGV4IDI5YzdjNmMuLjQyMjM1ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tYWNpbnRvc2guaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbWFjaW50b3NoLmgKQEAgLTU1LDcgKzU1LDcgQEAKICNkZWZpbmUgTUFDX1NDU0lfUVVBRFJBMwk0CiAjZGVmaW5lIE1BQ19TQ1NJX0lJRlgJCTUKICNkZWZpbmUgTUFDX1NDU0lfRFVPCQk2Ci0jZGVmaW5lIE1BQ19TQ1NJX0NDTAkJNworI2RlZmluZSBNQUNfU0NTSV9MQwkJNwogI2RlZmluZSBNQUNfU0NTSV9MQVRFCQk4CiAKICNkZWZpbmUgTUFDX0lERV9OT05FCQkwCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vbWNmX3BndGFibGUuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGd0YWJsZS5oCmluZGV4IDNjNzkzNjguLjI1MDBjZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGd0YWJsZS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tY2ZfcGd0YWJsZS5oCkBAIC0zNSw3ICszNSw2IEBACiAgKiBoaXR0aW5nIGhhcmR3YXJlLgogICovCiAjZGVmaW5lIENGX1BBR0VfRElSVFkJCTB4MDAwMDAwMDEKLSNkZWZpbmUgQ0ZfUEFHRV9GSUxFCQkweDAwMDAwMjAwCiAjZGVmaW5lIENGX1BBR0VfQUNDRVNTRUQJMHgwMDAwMTAwMAogCiAjZGVmaW5lIF9QQUdFX0NBQ0hFMDQwCQkweDAyMCAgIC8qIDY4MDQwIGNhY2hlIG1vZGUsIGNhY2hhYmxlLCBjb3B5YmFjayAqLwpAQCAtMjQzLDExICsyNDIsNiBAQAogCXJldHVybiBwdGVfdmFsKHB0ZSkgJiBDRl9QQUdFX0FDQ0VTU0VEOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIHB0ZV92YWwocHRlKSAmIENGX1BBR0VfRklMRTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKQogewogCXJldHVybiAwOwpAQCAtMzkxLDI2ICszODUsMTMgQEAKIAkqcHRlcCA9IHB0ZV9ta2NhY2hlKCpwdGVwKTsKIH0KIAotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkyMQotI2RlZmluZSBQVEVfRklMRV9TSElGVAkJMTEKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV90b19wZ29mZihwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIHB0ZV92YWwocHRlKSA+PiBQVEVfRklMRV9TSElGVDsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwZ29mZl90b19wdGUodW5zaWduZWQgcGdvZmYpCi17Ci0JcmV0dXJuIF9fcHRlKChwZ29mZiA8PCBQVEVfRklMRV9TSElGVCkgKyBDRl9QQUdFX0ZJTEUpOwotfQotCiAvKgogICogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAobXVzdCBiZSAhcHRlX25vbmUoZSkgJiYgIXB0ZV9wcmVzZW50KGUpKQogICovCiAjZGVmaW5lIF9fc3dwX3R5cGUoeCkJCSgoeCkudmFsICYgMHhGRikKLSNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkoKHgpLnZhbCA+PiBQVEVfRklMRV9TSElGVCkKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkoKHgpLnZhbCA+PiAxMSkKICNkZWZpbmUgX19zd3BfZW50cnkodHlwLCBvZmYpCSgoc3dwX2VudHJ5X3QpIHsgKHR5cCkgfCBcCi0JCQkJCShvZmYgPDwgUFRFX0ZJTEVfU0hJRlQpIH0pCisJCQkJCShvZmYgPDwgMTEpIH0pCiAjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkoX19wdGUoKHgpLnZhbCkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ3RhYmxlLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vbW90b3JvbGFfcGd0YWJsZS5oCmluZGV4IGUwZmRkNGQuLjAwODVhYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9tb3Rvcm9sYV9wZ3RhYmxlLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL21vdG9yb2xhX3BndGFibGUuaApAQCAtMjgsNyArMjgsNiBAQAogI2RlZmluZSBfUEFHRV9DSEdfTUFTSyAgKFBBR0VfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9OT0NBQ0hFKQogCiAjZGVmaW5lIF9QQUdFX1BST1ROT05FCTB4MDA0Ci0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDgJLyogcGFnZWNhY2hlIG9yIHN3YXA/ICovCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTE2OCw3ICsxNjcsNiBAQAogc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuICEocHRlX3ZhbChwdGUpICYgX1BBR0VfUk9OTFkpOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRElSVFk7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQotc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRTsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKQl7IHJldHVybiAwOyB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpCXsgcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1JPTkxZOyByZXR1cm4gcHRlOyB9CkBAIC0yNjYsMTkgKzI2NCw2IEBACiAJfQogfQogCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI4Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfdG9fcGdvZmYocHRlX3QgcHRlKQotewotCXJldHVybiBwdGUucHRlID4+IDQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcGdvZmZfdG9fcHRlKHVuc2lnbmVkIG9mZikKLXsKLQlwdGVfdCBwdGUgPSB7IChvZmYgPDwgNCkgKyBfUEFHRV9GSUxFIH07Ci0JcmV0dXJuIHB0ZTsKLX0KLQogLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAobXVzdCBiZSAhcHRlX25vbmUoZSkgJiYgIXB0ZV9wcmVzZW50KGUpKSAqLwogI2RlZmluZSBfX3N3cF90eXBlKHgpCQkoKCh4KS52YWwgPj4gNCkgJiAweGZmKQogI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkJCSgoeCkudmFsID4+IDEyKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BndGFibGVfbW0uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ3RhYmxlX21tLmgKaW5kZXggOWY1YWJiZC4uMjhhMTQ1YiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BndGFibGVfbW0uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcGd0YWJsZV9tbS5oCkBAIC02Niw3ICs2Niw3IEBACiAjZGVmaW5lIFBUUlNfUEVSX1BHRAkxMjgKICNlbmRpZgogI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoVEFTS19TSVpFL1BHRElSX1NJWkUpCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwVUwKIAogLyogVmlydHVhbCBhZGRyZXNzIHJlZ2lvbiBmb3IgdXNlIGJ5IGtlcm5lbF9tYXAoKSAqLwogI2lmZGVmIENPTkZJR19TVU4zCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGd0YWJsZV9uby5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3BndGFibGVfbm8uaAppbmRleCAxMTg1OWI4Li5hYzdkODdhIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vcGd0YWJsZV9uby5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wZ3RhYmxlX25vLmgKQEAgLTM3LDggKzM3LDYgQEAKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgKHgpLnZhbCB9KQogCi1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpIHsgcmV0dXJuIDA7IH0KLQogLyoKICAqIFpFUk9fUEFHRSBpcyBhIGdsb2JhbCBzaGFyZWQgcGFnZSB0aGF0IGlzIGFsd2F5cyB6ZXJvOiB1c2VkCiAgKiBmb3IgemVyby1tYXBwZWQgbWVtb3J5IGFyZWFzIGV0Yy4uCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3VuM19wZ3RhYmxlLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vc3VuM19wZ3RhYmxlLmgKaW5kZXggZjU1YWEwNC4uNDg2NTdmOSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N1bjNfcGd0YWJsZS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zdW4zX3BndGFibGUuaApAQCAtMzgsOCArMzgsNiBAQAogI2RlZmluZSBfUEFHRV9QUkVTRU5UCShTVU4zX1BBR0VfVkFMSUQpCiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECShTVU4zX1BBR0VfQUNDRVNTRUQpCiAKLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMgMjgKLQogLyogQ29tcG91bmQgcGFnZSBwcm90ZWN0aW9uIHZhbHVlcy4gKi8KIC8vdG9kbzogd29yayBvdXQgd2hpY2ggb25lcyAqc2hvdWxkKiBoYXZlIFNVTjNfUEFHRV9OT0NBQ0hFIGFuZCBmaXguLi4KIC8vIGlzIGl0IGp1c3QgUEFHRV9LRVJORUwgYW5kIFBBR0VfU0hBUkVEPwpAQCAtMTY4LDcgKzE2Niw2IEBACiBzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgU1VOM19QQUdFX1dSSVRFQUJMRTsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIFNVTjNfUEFHRV9NT0RJRklFRDsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIFNVTjNfUEFHRV9BQ0NFU1NFRDsgfQotc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgU1VOM19QQUdFX0FDQ0VTU0VEOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpCXsgcmV0dXJuIDA7IH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gflNVTjNfUEFHRV9XUklURUFCTEU7IHJldHVybiBwdGU7IH0KQEAgLTIwMiwxOCArMTk5LDYgQEAKIAlyZXR1cm4gKHBtZF90ICopIHBnZDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV90b19wZ29mZihwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIHB0ZS5wdGUgJiBTVU4zX1BBR0VfUEdOVU1fTUFTSzsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwZ29mZl90b19wdGUodW5zaWduZWQgb2ZmKQotewotCXB0ZV90IHB0ZSA9IHsgb2ZmICsgU1VOM19QQUdFX0FDQ0VTU0VEIH07Ci0JcmV0dXJuIHB0ZTsKLX0KLQotCiAvKiBGaW5kIGFuIGVudHJ5IGluIHRoZSB0aGlyZC1sZXZlbCBwYWdldGFibGUuICovCiAjZGVmaW5lIHB0ZV9pbmRleChhZGRyZXNzKSAoKGFkZHJlc3MgPj4gUEFHRV9TSElGVCkgJiAoUFRSU19QRVJfUFRFLTEpKQogI2RlZmluZSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpICgocHRlX3QgKikgX19wbWRfcGFnZSgqcG1kKSArIHB0ZV9pbmRleChhZGRyZXNzKSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCmluZGV4IGU5YzM3NTYuLjY4OWI0N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL21hYy9jb25maWcuYwpAQCAtMjk2LDcgKzI5Niw3IEBACiAJCS5uYW1lCQk9ICJJSXZpIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSVNJLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9MQywKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKQEAgLTMwNSw3ICszMDUsNyBAQAogCQkubmFtZQkJPSAiSUl2eCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUlTSSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfTEMsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC0zMjAsNyArMzIwLDcgQEAKIAkJLm5hbWUJCT0gIkNsYXNzaWMgSUkiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJU0ksCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0xDLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtMzI5LDcgKzMyOSw3IEBACiAJCS5uYW1lCQk9ICJDb2xvciBDbGFzc2ljIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9DVURBLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9DQ0wsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9MQywKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKQEAgLTMzOCw3ICszMzgsNyBAQAogCQkubmFtZQkJPSAiQ29sb3IgQ2xhc3NpYyBJSSIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfQ0NMLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfTEMsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC0zNTMsNyArMzUzLDcgQEAKIAkJLm5hbWUJCT0gIkxDIiwKIAkJLmFkYl90eXBlCT0gTUFDX0FEQl9JSVNJLAogCQkudmlhX3R5cGUJPSBNQUNfVklBX0lJQ0ksCi0JCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9PTEQsCisJCS5zY3NpX3R5cGUJPSBNQUNfU0NTSV9MQywKIAkJLnNjY190eXBlCT0gTUFDX1NDQ19JSSwKIAkJLm51YnVzX3R5cGUJPSBNQUNfTlVCVVMsCiAJCS5mbG9wcHlfdHlwZQk9IE1BQ19GTE9QUFlfU1dJTV9BRERSMiwKQEAgLTM2Miw3ICszNjIsNyBAQAogCQkubmFtZQkJPSAiTEMgSUkiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJU0ksCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0xDLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtMzcxLDcgKzM3MSw3IEBACiAJCS5uYW1lCQk9ICJMQyBJSUkiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJU0ksCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0xDLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtNDk5LDcgKzQ5OSw3IEBACiAJCS5uYW1lCQk9ICJQZXJmb3JtYSA0NjAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0lJU0ksCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX09MRCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0xDLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtNTI2LDcgKzUyNiw3IEBACiAJCS5uYW1lCQk9ICJQZXJmb3JtYSA1MjAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0NDTCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0xDLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtNTM1LDcgKzUzNSw3IEBACiAJCS5uYW1lCQk9ICJQZXJmb3JtYSA1NTAiLAogCQkuYWRiX3R5cGUJPSBNQUNfQURCX0NVREEsCiAJCS52aWFfdHlwZQk9IE1BQ19WSUFfSUlDSSwKLQkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0NDTCwKKwkJLnNjc2lfdHlwZQk9IE1BQ19TQ1NJX0xDLAogCQkuc2NjX3R5cGUJPSBNQUNfU0NDX0lJLAogCQkubnVidXNfdHlwZQk9IE1BQ19OVUJVUywKIAkJLmZsb3BweV90eXBlCT0gTUFDX0ZMT1BQWV9TV0lNX0FERFIyLApAQCAtNTY3LDcgKzU2Nyw3IEBACiAJCS5uYW1lCQk9ICJUViIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfQ1VEQSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfQ0NMLAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfTEMsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC01NzYsNyArNTc2LDcgQEAKIAkJLm5hbWUJCT0gIlBlcmZvcm1hIDYwMCIsCiAJCS5hZGJfdHlwZQk9IE1BQ19BREJfSUlTSSwKIAkJLnZpYV90eXBlCT0gTUFDX1ZJQV9JSUNJLAotCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfT0xELAorCQkuc2NzaV90eXBlCT0gTUFDX1NDU0lfTEMsCiAJCS5zY2NfdHlwZQk9IE1BQ19TQ0NfSUksCiAJCS5udWJ1c190eXBlCT0gTUFDX05VQlVTLAogCQkuZmxvcHB5X3R5cGUJPSBNQUNfRkxPUFBZX1NXSU1fQUREUjIsCkBAIC0xMTA5LDggKzExMDksMTAgQEAKIAkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibWFjX3Njc2kiLCAwLAogCQkJbWFjX3Njc2lfbGF0ZV9yc3JjLCBBUlJBWV9TSVpFKG1hY19zY3NpX2xhdGVfcnNyYykpOwogCQlicmVhazsKLQljYXNlIE1BQ19TQ1NJX0NDTDoKLQkJLyogQWRkcmVzc2VzIGZyb20gdGhlIENvbG9yIENsYXNzaWMgRGV2ZWxvcGVyIE5vdGUuCisJY2FzZSBNQUNfU0NTSV9MQzoKKwkJLyogQWRkcmVzc2VzIGZyb20gTWFjIExDIGRhdGEgaW4gRGVzaWduaW5nIENhcmRzICYgRHJpdmVycyAzZWQuCisJCSAqIEFsc28gZnJvbSB0aGUgRGV2ZWxvcGVyIE5vdGVzIGZvciBDbGFzc2ljIElJLCBMQyBJSUksCisJCSAqIENvbG9yIENsYXNzaWMgYW5kIElJdnguCiAJCSAqICQ1MEYwIDYwMDAgLSAkNTBGMCA3RkZGOiBTQ1NJIGhhbmRzaGFrZQogCQkgKiAkNTBGMSAwMDAwIC0gJDUwRjEgMUZGRjogU0NTSQogCQkgKiAkNTBGMSAyMDAwIC0gJDUwRjEgM0ZGRjogU0NTSSBETUEKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tbS9mYXVsdC5jIGIvYXJjaC9tNjhrL21tL2ZhdWx0LmMKaW5kZXggMmJkNzQ4Ny4uYjJmMDRhZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9tNjhrL21tL2ZhdWx0LmMKQEAgLTE0NSw2ICsxNDUsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gbWFwX2VycjsKIAkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCiAJCQlnb3RvIGJ1c19lcnI7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL212bWUxNDcvY29uZmlnLmMgYi9hcmNoL202OGsvbXZtZTE0Ny9jb25maWcuYwppbmRleCAxYmIzY2U2Li5lNmEzYjU2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvbXZtZTE0Ny9jb25maWcuYworKysgYi9hcmNoL202OGsvbXZtZTE0Ny9jb25maWcuYwpAQCAtMTY4LDQ5ICsxNjgsMyBAQAogewogCXJldHVybiAwOwogfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0gIFNlcmlhbCBjb25zb2xlIHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLXN0YXRpYyB2b2lkIHNjY19kZWxheSAodm9pZCkKLXsKLQlpbnQgbjsKLQl2b2xhdGlsZSBpbnQgdHJhc2g7Ci0KLQlmb3IgKG4gPSAwOyBuIDwgMjA7IG4rKykKLQkJdHJhc2ggPSBuOwotfQotCi1zdGF0aWMgdm9pZCBzY2Nfd3JpdGUgKGNoYXIgY2gpCi17Ci0Jdm9sYXRpbGUgY2hhciAqcCA9ICh2b2xhdGlsZSBjaGFyICopTTE0N19TQ0NfQV9BRERSOwotCi0JZG8gewotCQlzY2NfZGVsYXkoKTsKLQl9Ci0Jd2hpbGUgKCEoKnAgJiA0KSk7Ci0Jc2NjX2RlbGF5KCk7Ci0JKnAgPSA4OwotCXNjY19kZWxheSgpOwotCSpwID0gY2g7Ci19Ci0KLQotdm9pZCBtMTQ3X3NjY193cml0ZSAoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGNvdW50KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQl3aGlsZSAoY291bnQtLSkKLQl7Ci0JCWlmICgqc3RyID09ICdcbicpCi0JCQlzY2Nfd3JpdGUgKCdccicpOwotCQlzY2Nfd3JpdGUgKCpzdHIrKyk7Ci0JfQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotdm9pZCBtdm1lMTQ3X2luaXRfY29uc29sZV9wb3J0IChzdHJ1Y3QgY29uc29sZSAqY28sIGludCBjZmxhZykKLXsKLQljby0+d3JpdGUgICAgPSBtMTQ3X3NjY193cml0ZTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9tdm1lMTZ4L3J0Yy5jIGIvYXJjaC9tNjhrL212bWUxNngvcnRjLmMKaW5kZXggNmVmN2E4MS4uMTc1NWUyZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL212bWUxNngvcnRjLmMKKysrIGIvYXJjaC9tNjhrL212bWUxNngvcnRjLmMKQEAgLTE2MSw0ICsxNjEsNCBAQAogCXByaW50ayhLRVJOX0lORk8gIk1LNDhUMDggUmVhbCBUaW1lIENsb2NrIERyaXZlciB2JXNcbiIsIFJUQ19WRVJTSU9OKTsKIAlyZXR1cm4gbWlzY19yZWdpc3RlcigmcnRjX2Rldik7CiB9Ci1tb2R1bGVfaW5pdChydGNfTUs0OFQwOF9pbml0KTsKK2RldmljZV9pbml0Y2FsbChydGNfTUs0OFQwOF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWV0YWcvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMGQ5ZGM1NC4uZDA2MDRjMCAxMDA2NDQKLS0tIGEvYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTQ3LDcgKzQ3LDYgQEAKICAqLwogI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkJX1BBR0VfQUxXQVlTX1pFUk9fMQogI2RlZmluZSBfUEFHRV9ESVJUWQkJX1BBR0VfQUxXQVlTX1pFUk9fMgotI2RlZmluZSBfUEFHRV9GSUxFCQlfUEFHRV9BTFdBWVNfWkVST18zCiAKIC8qIFBhZ2VzIG93bmVkLCBhbmQgcHJvdGVjdGVkIGJ5LCB0aGUga2VybmVsLiAqLwogI2RlZmluZSBfUEFHRV9LRVJORUwJCV9QQUdFX1BSSVYKQEAgLTIxOSw3ICsyMTgsNiBAQAogc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkgICB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9XUklURTsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkgICB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkgICB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQotc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKSAgICB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpIHsgcmV0dXJuIDA7IH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkgeyBwdGVfdmFsKHB0ZSkgJj0gKH5fUEFHRV9XUklURSk7IHJldHVybiBwdGU7IH0KQEAgLTMyNywxMCArMzI1LDYgQEAKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCkgeyAoeCkudmFsIH0pCiAKLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjIKLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHgpCQkocHRlX3ZhbCh4KSA+PiAxMCkKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKHgpCQlfX3B0ZSgoKHgpIDw8IDEwKSB8IF9QQUdFX0ZJTEUpCi0KICNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpCSgxKQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9tZXRhZy9tbS9mYXVsdC5jIGIvYXJjaC9tZXRhZy9tbS9mYXVsdC5jCmluZGV4IDMzMjY4MGUuLjJkZTVkYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWV0YWcvbW0vZmF1bHQuYworKysgYi9hcmNoL21ldGFnL21tL2ZhdWx0LmMKQEAgLTE0MSw2ICsxNDEsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tZXRhZy9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9tZXRhZy9tbS9odWdldGxicGFnZS5jCmluZGV4IDNjMzIwNzUuLjdjYTgwYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWV0YWcvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL21ldGFnL21tL2h1Z2V0bGJwYWdlLmMKQEAgLTk0LDEyICs5NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBwYWdlICpmb2xsb3dfaHVnZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgd3JpdGUpCi17Ci0JcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci19Ci0KIGludCBwbWRfaHVnZShwbWRfdCBwbWQpCiB7CiAJcmV0dXJuIHBtZF9wYWdlX3NoaWZ0KHBtZCkgPiBQQUdFX1NISUZUOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL21pY3JvYmxhemUvYm9vdC9NYWtlZmlsZQppbmRleCA4ZTIxMWNjLi45MWQyMDY4IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvYm9vdC9NYWtlZmlsZQorKysgYi9hcmNoL21pY3JvYmxhemUvYm9vdC9NYWtlZmlsZQpAQCAtMzQsNSArMzQsNCBAQAogCSQoY2FsbCBpZl9jaGFuZ2VkLHN0cmlwKQogCUBlY2hvICdLZXJuZWw6ICRAIGlzIHJlYWR5JyAnICgjJ2BjYXQgLnZlcnNpb25gJyknCiAKLQotY2xlYW4tZmlsZXMgKz0gc2ltcGxlSW1hZ2UuKi51bnN0cmlwIGxpbnV4LmJpbi51YgorY2xlYW4tZmlsZXMgKz0gc2ltcGxlSW1hZ2UuKi51bnN0cmlwIGxpbnV4LmJpbi51YiBkdHMvKi5kdGIKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9ib290L2R0cy9NYWtlZmlsZSBiL2FyY2gvbWljcm9ibGF6ZS9ib290L2R0cy9NYWtlZmlsZQppbmRleCBjNDk4MmQxLi5hM2QyZTQyIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvYm9vdC9kdHMvTWFrZWZpbGUKKysrIGIvYXJjaC9taWNyb2JsYXplL2Jvb3QvZHRzL01ha2VmaWxlCkBAIC0xNiw1ICsxNiwzIEBACiAKICMgUnVsZSB0byBidWlsZCBkZXZpY2UgdHJlZSBibG9icwogRFRDX0ZMQUdTIDo9IC1wIDEwMjQKLQotY2xlYW4tZmlsZXMgKz0gKi5kdGIKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9kZWxheS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2RlbGF5LmgKaW5kZXggNjBjYjM5ZC4uZWEyYTljZCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2RlbGF5LmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2RlbGF5LmgKQEAgLTE1LDcgKzE1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAKLWV4dGVybiBpbmxpbmUgdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpCitzdGF0aWMgaW5saW5lIHZvaWQgX19kZWxheSh1bnNpZ25lZCBsb25nIGxvb3BzKQogewogCWFzbSB2b2xhdGlsZSAoIiMgX19kZWxheQkJXG5cdCIJCVwKIAkJCSIxOiBhZGRpCSUwLCAlMCwgLTFcdFxuIgkJXApAQCAtNDMsNyArNDMsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CiAKLWV4dGVybiBpbmxpbmUgdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBpbnQgeCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3VkZWxheSh1bnNpZ25lZCBpbnQgeCkKIHsKIAogCXVuc2lnbmVkIGxvbmcgbG9uZyB0bXAgPQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2tnZGIuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9rZ2RiLmgKaW5kZXggNzhiMTdkNC4uYWQyN2FjYiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2tnZGIuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20va2dkYi5oCkBAIC0yMyw2ICsyMyw5IEBACiAJX19hc21fXyBfX3ZvbGF0aWxlX18oImJya2kgcjE2LCAweDE4OyIpOwogfQogCitzdHJ1Y3QgcHRfcmVnczsKK2FzbWxpbmthZ2Ugdm9pZCBtaWNyb2JsYXplX2tnZGJfYnJlYWsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX19NSUNST0JMQVpFX0tHREJfSF9fICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2xpbmthZ2UuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9saW5rYWdlLmgKaW5kZXggM2E4ZTM2ZC4uMDU0MGJiYSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2xpbmthZ2UuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vbGlua2FnZS5oCkBAIC0xLDE1ICsxIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEF0bWFyayBUZWNobm8sIEluYy4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpZm5kZWYgX0FTTV9NSUNST0JMQVpFX0xJTktBR0VfSAotI2RlZmluZSBfQVNNX01JQ1JPQkxBWkVfTElOS0FHRV9ICi0KLSNkZWZpbmUgX19BTElHTgkJLmFsaWduIDQKLSNkZWZpbmUgX19BTElHTl9TVFIJIi5hbGlnbiA0IgotCi0jZW5kaWYgLyogX0FTTV9NSUNST0JMQVpFX0xJTktBR0VfSCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGdhbGxvYy5oCmluZGV4IDdmZGY3ZmEuLjYxNDM2ZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BnYWxsb2MuaApAQCAtNjAsNyArNjAsNyBAQAogCiBleHRlcm4gdm9pZCBfX2JhZF9wdGUocG1kX3QgKnBtZCk7CiAKLWV4dGVybiBpbmxpbmUgcGdkX3QgKmdldF9wZ2Rfc2xvdyh2b2lkKQorc3RhdGljIGlubGluZSBwZ2RfdCAqZ2V0X3BnZF9zbG93KHZvaWQpCiB7CiAJcGdkX3QgKnJldDsKIApAQCAtNzAsNyArNzAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWV4dGVybiBpbmxpbmUgcGdkX3QgKmdldF9wZ2RfZmFzdCh2b2lkKQorc3RhdGljIGlubGluZSBwZ2RfdCAqZ2V0X3BnZF9mYXN0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyAqcmV0OwogCkBAIC04NCwxNCArODQsMTQgQEAKIAlyZXR1cm4gKHBnZF90ICopcmV0OwogfQogCi1leHRlcm4gaW5saW5lIHZvaWQgZnJlZV9wZ2RfZmFzdChwZ2RfdCAqcGdkKQorc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcGdkX2Zhc3QocGdkX3QgKnBnZCkKIHsKIAkqKHVuc2lnbmVkIGxvbmcgKiopcGdkID0gcGdkX3F1aWNrbGlzdDsKIAlwZ2RfcXVpY2tsaXN0ID0gKHVuc2lnbmVkIGxvbmcgKikgcGdkOwogCXBndGFibGVfY2FjaGVfc2l6ZSsrOwogfQogCi1leHRlcm4gaW5saW5lIHZvaWQgZnJlZV9wZ2Rfc2xvdyhwZ2RfdCAqcGdkKQorc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcGdkX3Nsb3cocGdkX3QgKnBnZCkKIHsKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGdkKTsKIH0KQEAgLTE0NiwxOSArMTQ2LDE5IEBACiAJcmV0dXJuIChwdGVfdCAqKXJldDsKIH0KIAotZXh0ZXJuIGlubGluZSB2b2lkIHB0ZV9mcmVlX2Zhc3QocHRlX3QgKnB0ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9mYXN0KHB0ZV90ICpwdGUpCiB7CiAJKih1bnNpZ25lZCBsb25nICoqKXB0ZSA9IHB0ZV9xdWlja2xpc3Q7CiAJcHRlX3F1aWNrbGlzdCA9ICh1bnNpZ25lZCBsb25nICopIHB0ZTsKIAlwZ3RhYmxlX2NhY2hlX3NpemUrKzsKIH0KIAotZXh0ZXJuIGlubGluZSB2b2lkIHB0ZV9mcmVlX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHRlX3QgKnB0ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdGVfZnJlZV9rZXJuZWwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB0ZV90ICpwdGUpCiB7CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXB0ZSk7CiB9CiAKLWV4dGVybiBpbmxpbmUgdm9pZCBwdGVfZnJlZV9zbG93KHN0cnVjdCBwYWdlICpwdGVwYWdlKQorc3RhdGljIGlubGluZSB2b2lkIHB0ZV9mcmVlX3Nsb3coc3RydWN0IHBhZ2UgKnB0ZXBhZ2UpCiB7CiAJX19mcmVlX3BhZ2UocHRlcGFnZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBkZjE5ZDBjLi5lNTNiODUzIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTQwLDEwICs0MCw2IEBACiAjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkgeyByZXR1cm4gMDsgfQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCiAjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikJKHsgQlVHKCk7IE5VTEw7IH0pCiAKICNkZWZpbmUgc3dhcHBlcl9wZ19kaXIgKChwZ2RfdCAqKSBOVUxMKQpAQCAtNjUsNiArNjEsOCBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CiAKKyNkZWZpbmUgX19QQUdFVEFCTEVfUE1EX0ZPTERFRAorCiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtNzQsNyArNzIsNyBAQAogI2luY2x1ZGUgPGFzbS9tbXUuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwVUwKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdmFfdG9fcGh5cyh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogZXh0ZXJuIHB0ZV90ICp2YV90b19wdGUodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKQEAgLTIwNyw3ICsyMDUsNiBAQAogCiAvKiBEZWZpbml0aW9ucyBmb3IgTWljcm9CbGF6ZS4gKi8KICNkZWZpbmUJX1BBR0VfR1VBUkRFRAkweDAwMQkvKiBHOiBwYWdlIGlzIGd1YXJkZWQgZnJvbSBwcmVmZXRjaCAqLwotI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAxCS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KICNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMgkvKiBzb2Z0d2FyZTogUFRFIGNvbnRhaW5zIGEgdHJhbnNsYXRpb24gKi8KICNkZWZpbmUJX1BBR0VfTk9fQ0FDSEUJMHgwMDQJLyogSTogY2FjaGluZyBpcyBpbmhpYml0ZWQgKi8KICNkZWZpbmUJX1BBR0VfV1JJVEVUSFJVCTB4MDA4CS8qIFc6IGNhY2hpbmcgaXMgd3JpdGUtdGhyb3VnaCAqLwpAQCAtMzM3LDcgKzMzNCw2IEBACiBzdGF0aWMgaW5saW5lIGludCBwdGVfZXhlYyhwdGVfdCBwdGUpICB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9FWEVDOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfQUNDRVNTRUQ7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkgIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7IH0KIAogc3RhdGljIGlubGluZSB2b2lkIHB0ZV91bmNhY2hlKHB0ZV90IHB0ZSkgeyBwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfTk9fQ0FDSEU7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2FjaGUocHRlX3QgcHRlKSAgIHsgcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9OT19DQUNIRTsgfQpAQCAtNDk5LDExICs0OTUsNiBAQAogCiAjZGVmaW5lIHB0ZV91bm1hcChwdGUpCQlrdW5tYXBfYXRvbWljKHB0ZSkKIAotLyogRW5jb2RlIGFuZCBkZWNvZGUgYSBub25saW5lYXIgZmlsZSBtYXBwaW5nIGVudHJ5ICovCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI5Ci0jZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCShwdGVfdmFsKHB0ZSkgPj4gMykKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJKChwdGVfdCkgeyAoKG9mZikgPDwgMykgfCBfUEFHRV9GSUxFIH0pCi0KIGV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3N5c2NhbGwuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKaW5kZXggNTNjZmFmMy4uMDRhNWJlYyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3N5c2NhbGwuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vc3lzY2FsbC5oCkBAIC05Nyw3ICs5Nyw3IEBACiAJCW1pY3JvYmxhemVfc2V0X3N5c2NhbGxfYXJnKHJlZ3MsIGkrKywgKmFyZ3MrKyk7CiB9CiAKLWFzbWxpbmthZ2UgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2FzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGFzbWxpbmthZ2Ugdm9pZCBkb19zeXNjYWxsX3RyYWNlX2xlYXZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogc3RhdGljIGlubGluZSBpbnQgc3lzY2FsbF9nZXRfYXJjaCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggNTlhODlhNi4uNjI5NDJmZCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC0yMjAsNyArMjIwLDcgQEAKIAl9IGVsc2UgewkJCQkJCQlcCiAJCV9fZ3VfZXJyID0gLUVGQVVMVDsJCQkJCVwKIAl9CQkJCQkJCQlcCi0JeCA9ICh0eXBlb2YoKihwdHIpKSlfX2d1X3ZhbDsJCQkJCVwKKwl4ID0gKF9fZm9yY2UgdHlwZW9mKCoocHRyKSkpX19ndV92YWw7CQkJCVwKIAlfX2d1X2VycjsJCQkJCQkJXAogfSkKIApAQCAtMjQyLDcgKzI0Miw3IEBACiAJZGVmYXVsdDoJCQkJCQkJXAogCQkvKiBfX2d1X3ZhbCA9IDA7IF9fZ3VfZXJyID0gLUVJTlZBTDsqLyBfX2d1X2VyciA9IF9fdXNlcl9iYWQoKTtcCiAJfQkJCQkJCQkJXAotCXggPSAoX190eXBlb2ZfXygqKHB0cikpKSBfX2d1X3ZhbDsJCQkJXAorCXggPSAoX19mb3JjZSBfX3R5cGVvZl9fKCoocHRyKSkpIF9fZ3VfdmFsOwkJCVwKIAlfX2d1X2VycjsJCQkJCQkJXAogfSkKIApAQCAtMzA2LDcgKzMwNiw3IEBACiAKICNkZWZpbmUgX19wdXRfdXNlcl9jaGVjayh4LCBwdHIsIHNpemUpCQkJCQlcCiAoewkJCQkJCQkJCVwKLQl0eXBlb2YoKihwdHIpKSB2b2xhdGlsZSBfX3B1X3ZhbCA9IHg7CQkJCQlcCisJdHlwZW9mKCoocHRyKSkgdm9sYXRpbGUgX19wdV92YWwgPSB4OwkJCQlcCiAJdHlwZW9mKCoocHRyKSkgX191c2VyICpfX3B1X2FkZHIgPSAocHRyKTsJCQlcCiAJaW50IF9fcHVfZXJyID0gMDsJCQkJCQlcCiAJCQkJCQkJCQlcCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggMGE1MzM2Mi4uNzZlZDE3YiAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzgsNiArMzgsNiBAQAogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAKLSNkZWZpbmUgX19OUl9zeXNjYWxscyAgICAgICAgIDM4OAorI2RlZmluZSBfX05SX3N5c2NhbGxzICAgICAgICAgMzg5CiAKICNlbmRpZiAvKiBfQVNNX01JQ1JPQkxBWkVfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL3VhcGkvYXNtL3VuaXN0ZC5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKaW5kZXggYzcxMjY3Ny4uMzI4NTBjNyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmgKQEAgLTQwMyw1ICs0MDMsNiBAQAogI2RlZmluZSBfX05SX2dldHJhbmRvbQkJMzg1CiAjZGVmaW5lIF9fTlJfbWVtZmRfY3JlYXRlCTM4NgogI2RlZmluZSBfX05SX2JwZgkJMzg3CisjZGVmaW5lIF9fTlJfZXhlY3ZlYXQJCTM4OAogCiAjZW5kaWYgLyogX1VBUElfQVNNX01JQ1JPQkxBWkVfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL01ha2VmaWxlCmluZGV4IDA4ZDUwY2MuLmYwOGJhY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTYsNyArMTYsNyBAQAogCiBvYmoteSArPSBkbWEubyBleGNlcHRpb25zLm8gXAogCWh3X2V4Y2VwdGlvbl9oYW5kbGVyLm8gaW50Yy5vIGlycS5vIFwKLQlwbGF0Zm9ybS5vIHByb2Nlc3MubyBwcm9tLm8gcHJvbV9wYXJzZS5vIHB0cmFjZS5vIFwKKwlwbGF0Zm9ybS5vIHByb2Nlc3MubyBwcm9tLm8gcHRyYWNlLm8gXAogCXJlc2V0Lm8gc2V0dXAubyBzaWduYWwubyBzeXNfbWljcm9ibGF6ZS5vIHRpbWVyLm8gdHJhcHMubyB1bndpbmQubwogCiBvYmoteSArPSBjcHUvCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jYWNoZS5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY2FjaGUuYwppbmRleCBhNmU0NDQxMC4uMGJkZTQ3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY2FjaGUuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jYWNoZS5jCkBAIC0xNDAsMTAgKzE0MCwxMCBAQAogLyogSXQgaXMgdXNlZCBvbmx5IGZpcnN0IHBhcmFtZXRlciBmb3IgT1AgLSBmb3Igd2ljLCB3ZGMgKi8KICNkZWZpbmUgQ0FDSEVfUkFOR0VfTE9PUF8xKHN0YXJ0LCBlbmQsIGxpbmVfbGVuZ3RoLCBvcCkJCQlcCiBkbyB7CQkJCQkJCQkJXAotCWludCB2b2xhdGlsZSB0ZW1wID0gMDsJCQkJCQlcCi0JaW50IGFsaWduID0gfihsaW5lX2xlbmd0aCAtIDEpOwkJCQkJXAorCXVuc2lnbmVkIGludCB2b2xhdGlsZSB0ZW1wID0gMDsJCQkJCQlcCisJdW5zaWduZWQgaW50IGFsaWduID0gfihsaW5lX2xlbmd0aCAtIDEpOwkJCQkJXAogCWVuZCA9ICgoZW5kICYgYWxpZ24pID09IGVuZCkgPyBlbmQgLSBsaW5lX2xlbmd0aCA6IGVuZCAmIGFsaWduOwlcCi0JV0FSTl9PTihlbmQgLSBzdGFydCA8IDApOwkJCQkJXAorCVdBUk5fT04oZW5kIDwgc3RhcnQpOwkJCQkJXAogCQkJCQkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fICgiIDE6CSIgI29wICIJJTEsIHIwOyIJCVwKIAkJCQkJImNtcHUJJTAsICUxLCAlMjsiCQlcCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jcHVpbmZvLXB2ci1mdWxsLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jcHVpbmZvLXB2ci1mdWxsLmMKaW5kZXggOTNjMjZjZi4uYTMyZGFlYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NwdWluZm8tcHZyLWZ1bGwuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jcHVpbmZvLXB2ci1mdWxsLmMKQEAgLTMzLDcgKzMzLDcgQEAKIHZvaWQgc2V0X2NwdWluZm9fcHZyX2Z1bGwoc3RydWN0IGNwdWluZm8gKmNpLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdSkKIHsKIAlzdHJ1Y3QgcHZyX3MgcHZyOwotCWludCB0ZW1wOyAvKiBmb3Igc2F2aW5nIHRlbXAgdmFsdWUgKi8KKwl1MzIgdGVtcDsgLyogZm9yIHNhdmluZyB0ZW1wIHZhbHVlICovCiAJZ2V0X3B2cigmcHZyKTsKIAogCUNJKHZlcl9jb2RlLCBWRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NwdWluZm8tc3RhdGljLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jcHVpbmZvLXN0YXRpYy5jCmluZGV4IDQ4NTQyODUuLjg1ZGJkYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NwdWluZm8tc3RhdGljLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY3B1aW5mby1zdGF0aWMuYwpAQCAtMjIsNyArMjIsNyBAQAogCiB2b2lkIF9faW5pdCBzZXRfY3B1aW5mb19zdGF0aWMoc3RydWN0IGNwdWluZm8gKmNpLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdSkKIHsKLQlpbnQgaSA9IDA7CisJdTMyIGkgPSAwOwogCiAJY2ktPnVzZV9pbnN0ciA9CiAJCShmY3B1KGNwdSwgInhsbngsdXNlLWJhcnJlbCIpID8gUFZSMF9VU0VfQkFSUkVMX01BU0sgOiAwKSB8CmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jcHVpbmZvLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2NwdS9jcHVpbmZvLmMKaW5kZXggMjM0YWNhZC4uZDFkZDZlOCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvY3B1aW5mby5jCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L2NwdWluZm8uYwpAQCAtNDEsOCArNDEsMTIgQEAKIAl7IjguNDAuYSIsIDB4MTh9LAogCXsiOC40MC5iIiwgMHgxOX0sCiAJeyI4LjUwLmEiLCAweDFhfSwKKwl7IjguNTAuYiIsIDB4MWN9LAorCXsiOC41MC5jIiwgMHgxZX0sCiAJeyI5LjAiLCAweDFifSwKIAl7IjkuMSIsIDB4MWR9LAorCXsiOS4yIiwgMHgxZn0sCisJeyI5LjMiLCAweDIwfSwKIAl7TlVMTCwgMH0sCiB9OwogCkBAIC02MSwxMSArNjUsMTQgQEAKIAl7InNwYXJ0YW4zYWRzcCIsIDB4Y30sCiAJeyJzcGFydGFuNiIsIDB4ZH0sCiAJeyJ2aXJ0ZXg2IiwgMHhlfSwKKwl7InZpcnRleDciLCAweGZ9LAogCS8qIEZJWE1FIFRoZXJlIGlzIG5vIGtleSBjb2RlIGRlZmluZWQgZm9yIHNwYXJ0YW4yICovCiAJeyJzcGFydGFuMiIsIDB4ZjB9LAogCXsia2ludGV4NyIsIDB4MTB9LAogCXsiYXJ0aXg3IiwgMHgxMX0sCiAJeyJ6eW5xNzAwMCIsIDB4MTJ9LAorCXsiVWx0cmFTY2FsZSBWaXJ0ZXgiLCAweDEzfSwKKwl7IlVsdHJhU2NhbGUgS2ludGV4IiwgMHgxNH0sCiAJe05VTEwsIDB9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9pbnRjLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2ludGMuYwppbmRleCAxNWM3YzEyLi43MTlmZWVlIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2ludGMuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2ludGMuYwpAQCAtMTQ4LDE3ICsxNDgsMTcgQEAKIAlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihpbnRjLCAieGxueCxudW0taW50ci1pbnB1dHMiLCAmbnJfaXJxKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcl9lcnIoIiVzOiB1bmFibGUgdG8gcmVhZCB4bG54LG51bS1pbnRyLWlucHV0c1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihpbnRjLCAieGxueCxraW5kLW9mLWludHIiLCAmaW50cl9tYXNrKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcl9lcnIoIiVzOiB1bmFibGUgdG8gcmVhZCB4bG54LGtpbmQtb2YtaW50clxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAoaW50cl9tYXNrID4gKHUzMikoKDFVTEwgPDwgbnJfaXJxKSAtIDEpKQotCQlwcl9pbmZvKCIgRVJST1I6IE1pc21hdGNoIGluIGtpbmQtb2YtaW50ciBwYXJhbVxuIik7CisJaWYgKGludHJfbWFzayA+PiBucl9pcnEpCisJCXByX3dhcm4oIiVzOiBtaXNtYXRjaCBpbiBraW5kLW9mLWludHIgcGFyYW1cbiIsIF9fZnVuY19fKTsKIAogCXByX2luZm8oIiVzOiBudW1faXJxPSVkLCBlZGdlPTB4JXhcbiIsCiAJCWludGMtPmZ1bGxfbmFtZSwgbnJfaXJxLCBpbnRyX21hc2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9rZ2RiLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2tnZGIuYwppbmRleCAwOWE1ZTgyLi44NzM2YWY1IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2tnZGIuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2tnZGIuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20va2dkYi5oPgogI2luY2x1ZGUgPGFzbS9wdnIuaD4KIAogI2RlZmluZSBHREJfUkVHCQkwCkBAIC0zNSw5ICszNiwxMCBAQAogCiB2b2lkIHB0X3JlZ3NfdG9fZ2RiX3JlZ3ModW5zaWduZWQgbG9uZyAqZ2RiX3JlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWludCBpOworCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIGxvbmcgKnB0X3JlZ2IgPSAodW5zaWduZWQgbG9uZyAqKXJlZ3M7CiAJaW50IHRlbXA7CisKIAkvKiByZWdpc3RlcnMgcjAgLSByMzEsIHBjLCBtc3IsIGVhciwgZXNyLCBmc3IgKyBkbyBub3Qgc2F2ZSBwdF9tb2RlICovCiAJZm9yIChpID0gMDsgaSA8IChzaXplb2Yoc3RydWN0IHB0X3JlZ3MpIC8gNCkgLSAxOyBpKyspCiAJCWdkYl9yZWdzW2ldID0gcHRfcmVnYltpXTsKQEAgLTY3LDcgKzY5LDcgQEAKIAogdm9pZCBnZGJfcmVnc190b19wdF9yZWdzKHVuc2lnbmVkIGxvbmcgKmdkYl9yZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBsb25nICpwdF9yZWdiID0gKHVuc2lnbmVkIGxvbmcgKilyZWdzOwogCiAJLyogcHRfcmVncyBhbmQgZ2RiX3JlZ3MgaGF2ZSB0aGUgc2FtZSAzNyB2YWx1ZXMuCkBAIC03Nyw3ICs3OSw3IEBACiAJCXB0X3JlZ2JbaV0gPSBnZGJfcmVnc1tpXTsKIH0KIAotdm9pZCBtaWNyb2JsYXplX2tnZGJfYnJlYWsoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCithc21saW5rYWdlIHZvaWQgbWljcm9ibGF6ZV9rZ2RiX2JyZWFrKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWlmIChrZ2RiX2hhbmRsZV9leGNlcHRpb24oMSwgU0lHVFJBUCwgMCwgcmVncykgIT0gMCkKIAkJcmV0dXJuOwpAQCAtOTEsNyArOTMsNyBAQAogLyogdW50ZXN0ZWQgKi8KIHZvaWQgc2xlZXBpbmdfdGhyZWFkX3RvX2dkYl9yZWdzKHVuc2lnbmVkIGxvbmcgKmdkYl9yZWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgbG9uZyAqcHRfcmVnYiA9ICh1bnNpZ25lZCBsb25nICopKHAtPnRocmVhZC5yZWdzKTsKIAogCS8qIHJlZ2lzdGVycyByMCAtIHIzMSwgcGMsIG1zciwgZWFyLCBlc3IsIGZzciArIGRvIG5vdCBzYXZlIHB0X21vZGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHJvbV9wYXJzZS5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9tX3BhcnNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ODc2MmYuLjAwMDAwMDAKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wcm9tX3BhcnNlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jdW5kZWYgREVCVUcKLQotI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0KLXZvaWQgb2ZfcGFyc2VfZG1hX3dpbmRvdyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCBjb25zdCB2b2lkICpkbWFfd2luZG93X3Byb3AsCi0JCXVuc2lnbmVkIGxvbmcgKmJ1c25vLCB1bnNpZ25lZCBsb25nICpwaHlzLCB1bnNpZ25lZCBsb25nICpzaXplKQotewotCWNvbnN0IHUzMiAqZG1hX3dpbmRvdzsKLQl1MzIgY2VsbHM7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqcHJvcDsKLQotCWRtYV93aW5kb3cgPSBkbWFfd2luZG93X3Byb3A7Ci0KLQkvKiBidXNubyBpcyBhbHdheXMgb25lIGNlbGwgKi8KLQkqYnVzbm8gPSAqKGRtYV93aW5kb3crKyk7Ci0KLQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLCNkbWEtYWRkcmVzcy1jZWxscyIsIE5VTEwpOwotCWlmICghcHJvcCkKLQkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShkbiwgIiNhZGRyZXNzLWNlbGxzIiwgTlVMTCk7Ci0KLQljZWxscyA9IHByb3AgPyAqKHUzMiAqKXByb3AgOiBvZl9uX2FkZHJfY2VsbHMoZG4pOwotCSpwaHlzID0gb2ZfcmVhZF9udW1iZXIoZG1hX3dpbmRvdywgY2VsbHMpOwotCi0JZG1hX3dpbmRvdyArPSBjZWxsczsKLQotCXByb3AgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJpYm0sI2RtYS1zaXplLWNlbGxzIiwgTlVMTCk7Ci0JY2VsbHMgPSBwcm9wID8gKih1MzIgKilwcm9wIDogb2Zfbl9zaXplX2NlbGxzKGRuKTsKLQkqc2l6ZSA9IG9mX3JlYWRfbnVtYmVyKGRtYV93aW5kb3csIGNlbGxzKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3B0cmFjZS5jCmluZGV4IGJiMTA2MzcuLjhjZmE5OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wdHJhY2UuYwpAQCAtMTMyLDkgKzEzMiw5IEBACiAJcmV0dXJuIHJ2YWw7CiB9CiAKLWFzbWxpbmthZ2UgbG9uZyBkb19zeXNjYWxsX3RyYWNlX2VudGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKQorYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIGRvX3N5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JbG9uZyByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKIAogCXNlY3VyZV9jb21wdXRpbmdfc3RyaWN0KHJlZ3MtPnIxMik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcmVzZXQuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcmVzZXQuYwppbmRleCBmYmU1OGM2Li5iYWI0YzgzIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3Jlc2V0LmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9yZXNldC5jCkBAIC05LDcgKzksNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KIAogLyogVHJpZ2dlciBzcGVjaWZpYyBmdW5jdGlvbnMgKi8KICNpZmRlZiBDT05GSUdfR1BJT0xJQgpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2lnbmFsLmMKaW5kZXggODk1NWEzODIuLjIzNTcwNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zaWduYWwuYwpAQCAtMTU4LDcgKzE1OCw3IEBACiB7CiAJc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqZnJhbWU7CiAJaW50IGVyciA9IDAsIHNpZyA9IGtzaWctPnNpZzsKLQlpbnQgc2lnbmFsOworCXVuc2lnbmVkIGxvbmcgc2lnbmFsOwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IDA7CiAjaWZkZWYgQ09ORklHX01NVQogCXBtZF90ICpwbWRwOwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJCSYmIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZXhlY19kb21haW4tPnNpZ25hbF9pbnZtYXAKIAkJJiYgc2lnIDwgMzIKIAkJPyBjdXJyZW50X3RocmVhZF9pbmZvKCktPmV4ZWNfZG9tYWluLT5zaWduYWxfaW52bWFwW3NpZ10KLQkJOiBzaWc7CisJCTogKHVuc2lnbmVkIGxvbmcpc2lnOwogCiAJaWYgKGtzaWctPmthLnNhLnNhX2ZsYWdzICYgU0FfU0lHSU5GTykKIAkJZXJyIHw9IGNvcHlfc2lnaW5mb190b191c2VyKCZmcmFtZS0+aW5mbywgJmtzaWctPmluZm8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxfdGFibGUuUwppbmRleCAwMTY2ZTg5Li4yOWM4NTY4IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxfdGFibGUuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3N5c2NhbGxfdGFibGUuUwpAQCAtMzg4LDMgKzM4OCw0IEBACiAJLmxvbmcgc3lzX2dldHJhbmRvbQkJLyogMzg1ICovCiAJLmxvbmcgc3lzX21lbWZkX2NyZWF0ZQogCS5sb25nIHN5c19icGYKKwkubG9uZyBzeXNfZXhlY3ZlYXQKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvdGltZXIuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvdGltZXIuYwppbmRleCBkZDk2ZjBlLi5jODk3NzQ1IDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL3RpbWVyLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC90aW1lci5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lY291bnRlci5oPgogI2luY2x1ZGUgPGFzbS9jcHVpbmZvLmg+CiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnRpbWVyX2Jhc2VhZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC91bndpbmQuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvdW53aW5kLmMKaW5kZXggMWY3YjhkNC4uNjFjMDRlZSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC91bndpbmQuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3Vud2luZC5jCkBAIC01OSw3ICs1OSw3IEBACiAgKgogICogUmV0dXJuIC0gTnVtYmVyIG9mIHN0YWNrIGJ5dGVzIHRoZSBpbnN0cnVjdGlvbiByZXNlcnZlcyBvciByZWNsYWltcwogICovCi1pbmxpbmUgbG9uZyBnZXRfZnJhbWVfc2l6ZSh1bnNpZ25lZCBsb25nIGluc3RyKQorc3RhdGljIGlubGluZSBsb25nIGdldF9mcmFtZV9zaXplKHVuc2lnbmVkIGxvbmcgaW5zdHIpCiB7CiAJcmV0dXJuIGFicygoczE2KShpbnN0ciAmIDB4RkZGRikpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL21tL2ZhdWx0LmMgYi9hcmNoL21pY3JvYmxhemUvbW0vZmF1bHQuYwppbmRleCBmYTRjZjUyLi5kNDZhNWViIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUvbW0vZmF1bHQuYworKysgYi9hcmNoL21pY3JvYmxhemUvbW0vZmF1bHQuYwpAQCAtMjI0LDYgKzIyNCw4IEBACiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBiYWRfYXJlYTsKIAkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCiAJCQlnb3RvIGRvX3NpZ2J1czsKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2NvbmZpZyBiL2FyY2gvbWlwcy9LY29uZmlnCmluZGV4IDMyODk5NjkuLjg0MzcxM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9LY29uZmlnCkBAIC0yNjU2LDI3ICsyNjU2LDIxIEBACiAJYm9vbAogCiBjb25maWcgTUlQUzMyX0NPTVBBVAotCWJvb2wgIktlcm5lbCBzdXBwb3J0IGZvciBMaW51eC9NSVBTIDMyLWJpdCBiaW5hcnkgY29tcGF0aWJpbGl0eSIKLQlkZXBlbmRzIG9uIDY0QklUCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IExpbnV4L01JUFMgMzItYml0IGJpbmFyeQotCSAgY29tcGF0aWJpbGl0eS4gU2luY2UgYWxsIHNvZnR3YXJlIGF2YWlsYWJsZSBmb3IgTGludXgvTUlQUyBpcwotCSAgY3VycmVudGx5IDMyLWJpdCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUuCisJYm9vbAogCiBjb25maWcgQ09NUEFUCiAJYm9vbAotCWRlcGVuZHMgb24gTUlQUzMyX0NPTVBBVAotCXNlbGVjdCBBUkNIX1dBTlRfT0xEX0NPTVBBVF9JUEMKLQlkZWZhdWx0IHkKIAogY29uZmlnIFNZU1ZJUENfQ09NUEFUCiAJYm9vbAotCWRlcGVuZHMgb24gQ09NUEFUICYmIFNZU1ZJUEMKLQlkZWZhdWx0IHkKIAogY29uZmlnIE1JUFMzMl9PMzIKIAlib29sICJLZXJuZWwgc3VwcG9ydCBmb3IgbzMyIGJpbmFyaWVzIgotCWRlcGVuZHMgb24gTUlQUzMyX0NPTVBBVAorCWRlcGVuZHMgb24gNjRCSVQKKwlzZWxlY3QgQVJDSF9XQU5UX09MRF9DT01QQVRfSVBDCisJc2VsZWN0IENPTVBBVAorCXNlbGVjdCBNSVBTMzJfQ09NUEFUCisJc2VsZWN0IFNZU1ZJUENfQ09NUEFUIGlmIFNZU1ZJUEMKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gcnVuIG8zMiBiaW5hcmllcy4gIFRoZXNlIGFyZSBwdXJlCiAJICAzMi1iaXQgYmluYXJpZXMgYXMgdXNlZCBieSB0aGUgMzItYml0IExpbnV4L01JUFMgcG9ydC4gIE1vc3Qgb2YKQEAgLTI2ODYsNyArMjY4MCwxMCBAQAogCiBjb25maWcgTUlQUzMyX04zMgogCWJvb2wgIktlcm5lbCBzdXBwb3J0IGZvciBuMzIgYmluYXJpZXMiCi0JZGVwZW5kcyBvbiBNSVBTMzJfQ09NUEFUCisJZGVwZW5kcyBvbiA2NEJJVAorCXNlbGVjdCBDT01QQVQKKwlzZWxlY3QgTUlQUzMyX0NPTVBBVAorCXNlbGVjdCBTWVNWSVBDX0NPTVBBVCBpZiBTWVNWSVBDCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBuMzIgYmluYXJpZXMuICBUaGVzZSBhcmUKIAkgIDY0LWJpdCBiaW5hcmllcyB1c2luZyAzMi1iaXQgcXVhbnRpdGllcyBmb3IgYWRkcmVzc2luZyBhbmQgY2VydGFpbgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jvb3QvZWxmMmVjb2ZmLmMgYi9hcmNoL21pcHMvYm9vdC9lbGYyZWNvZmYuYwppbmRleCA4NTg1MDc4Li4yYTRjNTJlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYm9vdC9lbGYyZWNvZmYuYworKysgYi9hcmNoL21pcHMvYm9vdC9lbGYyZWNvZmYuYwpAQCAtNDksNyArNDksOCBAQAogLyoKICAqIFNvbWUgZXh0cmEgRUxGIGRlZmluaXRpb25zCiAgKi8KLSNkZWZpbmUgUFRfTUlQU19SRUdJTkZPIDB4NzAwMDAwMDAJLyogUmVnaXN0ZXIgdXNhZ2UgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgUFRfTUlQU19SRUdJTkZPIAkweDcwMDAwMDAwCS8qIFJlZ2lzdGVyIHVzYWdlIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFBUX01JUFNfQUJJRkxBR1MJMHg3MDAwMDAwMwkvKiBSZWNvcmRzIEFCSSByZWxhdGVkIGZsYWdzICAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0zNDksMzkgKzM1MCw0NiBAQAogCiAJZm9yIChpID0gMDsgaSA8IGV4LmVfcGhudW07IGkrKykgewogCQkvKiBTZWN0aW9uIHR5cGVzIHdlIGNhbiBpZ25vcmUuLi4gKi8KLQkJaWYgKHBoW2ldLnBfdHlwZSA9PSBQVF9OVUxMIHx8IHBoW2ldLnBfdHlwZSA9PSBQVF9OT1RFIHx8Ci0JCSAgICBwaFtpXS5wX3R5cGUgPT0gUFRfUEhEUgotCQkgICAgfHwgcGhbaV0ucF90eXBlID09IFBUX01JUFNfUkVHSU5GTykKKwkJc3dpdGNoIChwaFtpXS5wX3R5cGUpIHsKKwkJY2FzZSBQVF9OVUxMOgorCQljYXNlIFBUX05PVEU6CisJCWNhc2UgUFRfUEhEUjoKKwkJY2FzZSBQVF9NSVBTX1JFR0lORk86CisJCWNhc2UgUFRfTUlQU19BQklGTEFHUzoKIAkJCWNvbnRpbnVlOwotCQkvKiBTZWN0aW9uIHR5cGVzIHdlIGNhbid0IGhhbmRsZS4uLiAqLwotCQllbHNlIGlmIChwaFtpXS5wX3R5cGUgIT0gUFRfTE9BRCkgeworCisJCWNhc2UgUFRfTE9BRDoKKwkJCS8qIFdyaXRhYmxlIChkYXRhKSBzZWdtZW50PyAqLworCQkJaWYgKHBoW2ldLnBfZmxhZ3MgJiBQRl9XKSB7CisJCQkJc3RydWN0IHNlY3QgbmRhdGEsIG5ic3M7CisKKwkJCQluZGF0YS52YWRkciA9IHBoW2ldLnBfdmFkZHI7CisJCQkJbmRhdGEubGVuID0gcGhbaV0ucF9maWxlc3o7CisJCQkJbmJzcy52YWRkciA9IHBoW2ldLnBfdmFkZHIgKyBwaFtpXS5wX2ZpbGVzejsKKwkJCQluYnNzLmxlbiA9IHBoW2ldLnBfbWVtc3ogLSBwaFtpXS5wX2ZpbGVzejsKKworCQkJCWNvbWJpbmUoJmRhdGEsICZuZGF0YSwgMCk7CisJCQkJY29tYmluZSgmYnNzLCAmbmJzcywgMSk7CisJCQl9IGVsc2UgeworCQkJCXN0cnVjdCBzZWN0IG50eHQ7CisKKwkJCQludHh0LnZhZGRyID0gcGhbaV0ucF92YWRkcjsKKwkJCQludHh0LmxlbiA9IHBoW2ldLnBfZmlsZXN6OworCisJCQkJY29tYmluZSgmdGV4dCwgJm50eHQsIDApOworCQkJfQorCQkJLyogUmVtZW1iZXIgdGhlIGxvd2VzdCBzZWdtZW50IHN0YXJ0IGFkZHJlc3MuICovCisJCQlpZiAocGhbaV0ucF92YWRkciA8IGN1cl92bWEpCisJCQkJY3VyX3ZtYSA9IHBoW2ldLnBfdmFkZHI7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJLyogU2VjdGlvbiB0eXBlcyB3ZSBjYW4ndCBoYW5kbGUuLi4gKi8KIAkJCWZwcmludGYoc3RkZXJyLAogCQkJCSJQcm9ncmFtIGhlYWRlciAlZCB0eXBlICVkIGNhbid0IGJlIGNvbnZlcnRlZC5cbiIsCiAJCQkJZXguZV9waG51bSwgcGhbaV0ucF90eXBlKTsKIAkJCWV4aXQoMSk7CiAJCX0KLQkJLyogV3JpdGFibGUgKGRhdGEpIHNlZ21lbnQ/ICovCi0JCWlmIChwaFtpXS5wX2ZsYWdzICYgUEZfVykgewotCQkJc3RydWN0IHNlY3QgbmRhdGEsIG5ic3M7Ci0KLQkJCW5kYXRhLnZhZGRyID0gcGhbaV0ucF92YWRkcjsKLQkJCW5kYXRhLmxlbiA9IHBoW2ldLnBfZmlsZXN6OwotCQkJbmJzcy52YWRkciA9IHBoW2ldLnBfdmFkZHIgKyBwaFtpXS5wX2ZpbGVzejsKLQkJCW5ic3MubGVuID0gcGhbaV0ucF9tZW1zeiAtIHBoW2ldLnBfZmlsZXN6OwotCi0JCQljb21iaW5lKCZkYXRhLCAmbmRhdGEsIDApOwotCQkJY29tYmluZSgmYnNzLCAmbmJzcywgMSk7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJ1Y3Qgc2VjdCBudHh0OwotCi0JCQludHh0LnZhZGRyID0gcGhbaV0ucF92YWRkcjsKLQkJCW50eHQubGVuID0gcGhbaV0ucF9maWxlc3o7Ci0KLQkJCWNvbWJpbmUoJnRleHQsICZudHh0LCAwKTsKLQkJfQotCQkvKiBSZW1lbWJlciB0aGUgbG93ZXN0IHNlZ21lbnQgc3RhcnQgYWRkcmVzcy4gKi8KLQkJaWYgKHBoW2ldLnBfdmFkZHIgPCBjdXJfdm1hKQotCQkJY3VyX3ZtYSA9IHBoW2ldLnBfdmFkZHI7CiAJfQogCiAJLyogU2VjdGlvbnMgbXVzdCBiZSBpbiBvcmRlciB0byBiZSBjb252ZXJ0ZWQuLi4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NtcC5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMKaW5kZXggZWNkOTAzZC4uOGIxZWVmZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMKQEAgLTI0MCw5ICsyNDAsNyBAQAogCiAJc2V0X2NwdV9vbmxpbmUoY3B1LCBmYWxzZSk7CiAJY3B1X2NsZWFyKGNwdSwgY3B1X2NhbGxpbl9tYXApOwotCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJb2N0ZW9uX2ZpeHVwX2lycXMoKTsKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAlmbHVzaF9jYWNoZV9hbGwoKTsKIAlsb2NhbF9mbHVzaF90bGJfYWxsKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKaW5kZXggZjU3Yjk2ZC4uNjFhNDQ2MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZwpAQCAtMTMyLDcgKzEzMiw2IEBACiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQotQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQpAQCAtMTc1LDcgKzE3NCw2IEBACiBDT05GSUdfQlJJREdFX0VCVF9SRURJUkVDVD1tCiBDT05GSUdfQlJJREdFX0VCVF9TTkFUPW0KIENPTkZJR19CUklER0VfRUJUX0xPRz1tCi1DT05GSUdfQlJJREdFX0VCVF9VTE9HPW0KIENPTkZJR19CUklER0VfRUJUX05GTE9HPW0KIENPTkZJR19JUF9TQ1RQPW0KIENPTkZJR19CUklER0U9bQpAQCAtMjIwLDggKzIxOCw2IEBACiBDT05GSUdfTkVUX0NMU19JTkQ9eQogQ09ORklHX0NGRzgwMjExPW0KIENPTkZJR19NQUM4MDIxMT1tCi1DT05GSUdfTUFDODAyMTFfUkNfUElEPXkKLUNPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRD15CiBDT05GSUdfTUFDODAyMTFfTUVTSD15CiBDT05GSUdfUkZLSUxMPW0KIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCkBAIC0yNDgsMTkgKzI0NCwxMyBAQAogQ09ORklHX0lERT15CiBDT05GSUdfQkxLX0RFVl9JREVDRD15CiBDT05GSUdfSURFX0dFTkVSSUM9eQotQ09ORklHX0JMS19ERVZfR0VORVJJQz15Ci1DT05GSUdfQkxLX0RFVl9QSUlYPXkKLUNPTkZJR19CTEtfREVWX0lUODIxMz1tCi1DT05GSUdfQkxLX0RFVl9UQzg2QzAwMT1tCiBDT05GSUdfUkFJRF9BVFRSUz1tCi1DT05GSUdfU0NTST1tCi1DT05GSUdfQkxLX0RFVl9TRD1tCitDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQ0hSX0RFVl9TVD1tCiBDT05GSUdfQ0hSX0RFVl9PU1NUPW0KIENPTkZJR19CTEtfREVWX1NSPW0KIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CiBDT05GSUdfQ0hSX0RFVl9TRz1tCi1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKIENPTkZJR19TQ1NJX0xPR0dJTkc9eQogQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15CkBAIC0yNzMsNiArMjYzLDggQEAKIENPTkZJR19TQ1NJX0FJQzdYWFg9bQogQ09ORklHX0FJQzdYWFhfUkVTRVRfREVMQVlfTVM9MTUwMDAKICMgQ09ORklHX0FJQzdYWFhfREVCVUdfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BVEE9eQorQ09ORklHX0FUQV9QSUlYPXkKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9NRD1tCiBDT05GSUdfTURfTElORUFSPW0KQEAgLTM0MCw2ICszMzIsNyBAQAogQ09ORklHX1VJT19DSUY9bQogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDRfRlM9eQogQ09ORklHX1JFSVNFUkZTX0ZTPW0KIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk89eQogQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKQEAgLTQ0MSw0ICs0MzQsMyBAQAogQ09ORklHX0NSWVBUT19URUE9bQogQ09ORklHX0NSWVBUT19UV09GSVNIPW0KICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMxNj1tCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnB1LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZnB1LmgKaW5kZXggOTk0ZDIxOS4uYWZmZWJiNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2ZwdS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9mcHUuaApAQCAtNjQsNyArNjQsNyBAQAogCQkJcmV0dXJuIFNJR0ZQRTsKIAogCQkvKiBzZXQgRlJFICovCi0JCXdyaXRlX2MwX2NvbmZpZzUocmVhZF9jMF9jb25maWc1KCkgfCBNSVBTX0NPTkY1X0ZSRSk7CisJCXNldF9jMF9jb25maWc1KE1JUFNfQ09ORjVfRlJFKTsKIAkJZ290byBmcl9jb21tb247CiAKIAljYXNlIEZQVV82NEJJVDoKQEAgLTc0LDggKzc0LDEwIEBACiAjZW5kaWYKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBGUFVfMzJCSVQ6Ci0JCS8qIGNsZWFyIEZSRSAqLwotCQl3cml0ZV9jMF9jb25maWc1KHJlYWRfYzBfY29uZmlnNSgpICYgfk1JUFNfQ09ORjVfRlJFKTsKKwkJaWYgKGNwdV9oYXNfZnJlKSB7CisJCQkvKiBjbGVhciBGUkUgKi8KKwkJCWNsZWFyX2MwX2NvbmZpZzUoTUlQU19DT05GNV9GUkUpOworCQl9CiBmcl9jb21tb246CiAJCS8qIHNldCBDVTEgJiBjaGFuZ2UgRlIgYXBwcm9wcmlhdGVseSAqLwogCQlmciA9IChpbnQpbW9kZSAmIEZQVV9GUl9NQVNLOwpAQCAtMTgyLDI1ICsxODQsMzIgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWlmIChjcHVfaGFzX2ZwdSkgeworCQl1bnNpZ25lZCBpbnQgY29uZmlnNTsKKwogCQlyZXQgPSBfX293bl9mcHUoKTsKLQkJaWYgKCFyZXQpIHsKLQkJCXVuc2lnbmVkIGludCBjb25maWc1ID0gcmVhZF9jMF9jb25maWc1KCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OwogCi0JCQkvKgotCQkJICogRW5zdXJlIEZSRSBpcyBjbGVhciB3aGlsc3QgcnVubmluZyBfaW5pdF9mcHUsIHNpbmNlCi0JCQkgKiBzaW5nbGUgcHJlY2lzaW9uIEZQIGluc3RydWN0aW9ucyBhcmUgdXNlZC4gSWYgRlJFCi0JCQkgKiB3YXMgc2V0IHRoZW4gd2UnbGwganVzdCBlbmQgdXAgaW5pdGlhbGlzaW5nIGFsbCAzMgotCQkJICogNjRiIHJlZ2lzdGVycy4KLQkJCSAqLwotCQkJd3JpdGVfYzBfY29uZmlnNShjb25maWc1ICYgfk1JUFNfQ09ORjVfRlJFKTsKLQkJCWVuYWJsZV9mcHVfaGF6YXJkKCk7Ci0KKwkJaWYgKCFjcHVfaGFzX2ZyZSkgewogCQkJX2luaXRfZnB1KCk7CiAKLQkJCS8qIFJlc3RvcmUgRlJFICovCi0JCQl3cml0ZV9jMF9jb25maWc1KGNvbmZpZzUpOwotCQkJZW5hYmxlX2ZwdV9oYXphcmQoKTsKKwkJCXJldHVybiAwOwogCQl9CisKKwkJLyoKKwkJICogRW5zdXJlIEZSRSBpcyBjbGVhciB3aGlsc3QgcnVubmluZyBfaW5pdF9mcHUsIHNpbmNlCisJCSAqIHNpbmdsZSBwcmVjaXNpb24gRlAgaW5zdHJ1Y3Rpb25zIGFyZSB1c2VkLiBJZiBGUkUKKwkJICogd2FzIHNldCB0aGVuIHdlJ2xsIGp1c3QgZW5kIHVwIGluaXRpYWxpc2luZyBhbGwgMzIKKwkJICogNjRiIHJlZ2lzdGVycy4KKwkJICovCisJCWNvbmZpZzUgPSBjbGVhcl9jMF9jb25maWc1KE1JUFNfQ09ORjVfRlJFKTsKKwkJZW5hYmxlX2ZwdV9oYXphcmQoKTsKKworCQlfaW5pdF9mcHUoKTsKKworCQkvKiBSZXN0b3JlIEZSRSAqLworCQl3cml0ZV9jMF9jb25maWc1KGNvbmZpZzUpOworCQllbmFibGVfZnB1X2hhemFyZCgpOwogCX0gZWxzZQogCQlmcHVfZW11bGF0b3JfaW5pdF9mcHUoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2Z3L2FyYy9oaW52LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZncvYXJjL2hpbnYuaAppbmRleCBmOGQzN2QxLi45ZmFjNjRhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZncvYXJjL2hpbnYuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZncvYXJjL2hpbnYuaApAQCAtMTE5LDcgKzExOSw3IEBACiAjZGVmaW5lIFNHSV9BUkNTX1JFVgkxMAkJCS8qIHJldiAuMTAsIDMvMDQvOTIgKi8KICNlbmRpZgogCi10eXBlZGVmIHN0cnVjdCBjb21wb25lbnQgewordHlwZWRlZiBzdHJ1Y3QgewogCUNPTkZJR0NMQVNTCUNsYXNzOwogCUNPTkZJR1RZUEUJVHlwZTsKIAlJREVOVElGSUVSRkxBRwlGbGFnczsKQEAgLTE0MCw3ICsxNDAsNyBAQAogfTsKIAogLyogU3lzdGVtIElEICovCi10eXBlZGVmIHN0cnVjdCBzeXN0ZW1pZCB7Cit0eXBlZGVmIHN0cnVjdCB7CiAJQ0hBUiBWZW5kb3JJZFs4XTsKIAlDSEFSIFByb2R1Y3RJZFs4XTsKIH0gU1lTVEVNSUQ7CkBAIC0xNjYsNyArMTY2LDcgQEAKICNlbmRpZgkvKiBfTlRfUFJPTSAqLwogfSBNRU1PUllUWVBFOwogCi10eXBlZGVmIHN0cnVjdCBtZW1vcnlkZXNjcmlwdG9yIHsKK3R5cGVkZWYgc3RydWN0IHsKIAlNRU1PUllUWVBFCVR5cGU7CiAJTE9ORwkJQmFzZVBhZ2U7CiAJTE9ORwkJUGFnZUNvdW50OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHMtY20uaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzLWNtLmgKaW5kZXggYjk1YTgyNy4uNTljMDkwMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHMtY20uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwcy1jbS5oCkBAIC04OSw5ICs4OSw5IEBACiAKIC8qIE1hY3JvcyB0byBlYXNlIHRoZSBjcmVhdGlvbiBvZiByZWdpc3RlciBhY2Nlc3MgZnVuY3Rpb25zICovCiAjZGVmaW5lIEJVSUxEX0NNX1JfKG5hbWUsIG9mZikJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdTMyICphZGRyX2djcl8jI25hbWUodm9pZCkJCQlcCitzdGF0aWMgaW5saW5lIHUzMiBfX2lvbWVtICphZGRyX2djcl8jI25hbWUodm9pZCkJCVwKIHsJCQkJCQkJCVwKLQlyZXR1cm4gKHUzMiAqKShtaXBzX2NtX2Jhc2UgKyAob2ZmKSk7CQkJXAorCXJldHVybiAodTMyIF9faW9tZW0gKikobWlwc19jbV9iYXNlICsgKG9mZikpOwkJXAogfQkJCQkJCQkJXAogCQkJCQkJCQlcCiBzdGF0aWMgaW5saW5lIHUzMiByZWFkX2djcl8jI25hbWUodm9pZCkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHNyZWdzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaAppbmRleCA1ZTRhZWYzLi41YjcyMGQ4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwc3JlZ3MuaApAQCAtMTM4NiwxMiArMTM4NiwyNyBAQAogCV9fcmVzOwkJCQkJCQkJXAogfSkKIAorI2RlZmluZSBfd3JpdGVfMzJiaXRfY3AxX3JlZ2lzdGVyKGRlc3QsIHZhbCwgZ2FzX2hhcmRmbG9hdCkJCVwKK2RvIHsJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAorCSIJLnNldAlwdXNoCQkJCQlcbiIJXAorCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIJXAorCSIJIlNUUihnYXNfaGFyZGZsb2F0KSIJCQkJXG4iCVwKKwkiCWN0YzEJJTAsIlNUUihkZXN0KSIJCQkJXG4iCVwKKwkiCS5zZXQJcG9wCQkJCQlcbiIJXAorCTogOiAiciIgKHZhbCkpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCiAjaWZkZWYgR0FTX0hBU19TRVRfSEFSREZMT0FUCiAjZGVmaW5lIHJlYWRfMzJiaXRfY3AxX3JlZ2lzdGVyKHNvdXJjZSkJCQkJCVwKIAlfcmVhZF8zMmJpdF9jcDFfcmVnaXN0ZXIoc291cmNlLCAuc2V0IGhhcmRmbG9hdCkKKyNkZWZpbmUgd3JpdGVfMzJiaXRfY3AxX3JlZ2lzdGVyKGRlc3QsIHZhbCkJCQkJXAorCV93cml0ZV8zMmJpdF9jcDFfcmVnaXN0ZXIoZGVzdCwgdmFsLCAuc2V0IGhhcmRmbG9hdCkKICNlbHNlCiAjZGVmaW5lIHJlYWRfMzJiaXRfY3AxX3JlZ2lzdGVyKHNvdXJjZSkJCQkJCVwKIAlfcmVhZF8zMmJpdF9jcDFfcmVnaXN0ZXIoc291cmNlLCApCisjZGVmaW5lIHdyaXRlXzMyYml0X2NwMV9yZWdpc3RlcihkZXN0LCB2YWwpCQkJCVwKKwlfd3JpdGVfMzJiaXRfY3AxX3JlZ2lzdGVyKGRlc3QsIHZhbCwgKQogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0FTX0RTUApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtMzIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTMyLmgKaW5kZXggNjg5ODRiNi4uYTZiZTAwNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtMzIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS0zMi5oCkBAIC01Nyw3ICs1Nyw3IEBACiAjZGVmaW5lIFBUUlNfUEVSX1BURQkoKFBBR0VfU0laRSA8PCBQVEVfT1JERVIpIC8gc2l6ZW9mKHB0ZV90KSkKIAogI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoMHg4MDAwMDAwMFVML1BHRElSX1NJWkUpCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwVUwKIAogI2RlZmluZSBWTUFMTE9DX1NUQVJUCSAgTUFQX0JBU0UKIApAQCAtMTYxLDIyICsxNjEsNiBAQAogI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKIAotLyoKLSAqIEVuY29kZSBhbmQgZGVjb2RlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZyBlbnRyeQotICovCi0jZGVmaW5lIHB0ZV90b19wZ29mZihfcHRlKQkJKCgoKF9wdGUpLnB0ZSA+PiAxICkgJiAweDA3KSB8IFwKLQkJCQkJICgoKF9wdGUpLnB0ZSA+PiAyICkgJiAweDM4KSB8IFwKLQkJCQkJICgoKF9wdGUpLnB0ZSA+PiAxMCkgPDwJIDYgKSkKLQotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkJKChwdGVfdCkgeyAoKChvZmYpICYgMHgwNykgPDwgMSApIHwgXAotCQkJCQkJICAgKCgob2ZmKSAmIDB4MzgpIDw8IDIgKSB8IFwKLQkJCQkJCSAgICgoKG9mZikgPj4gIDYgKSA8PCAxMCkgfCBcCi0JCQkJCQkgICBfUEFHRV9GSUxFIH0pCi0KLS8qCi0gKiBCaXRzIDAsIDQsIDgsIGFuZCA5IGFyZSB0YWtlbiwgc3BsaXQgdXAgMjggYml0cyBvZiBvZmZzZXQgaW50byB0aGlzIHJhbmdlOgotICovCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCQkyOAogI2Vsc2UKIAogI2lmIGRlZmluZWQoQ09ORklHX1BIWVNfQUREUl9UXzY0QklUKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfTUlQUzMyKQpAQCAtMTg4LDEzICsxNzIsNiBAQAogI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkJKChzd3BfZW50cnlfdCkgeyAocHRlKS5wdGVfaGlnaCB9KQogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpIHsgMCwgKHgpLnZhbCB9KQogCi0vKgotICogQml0cyAwIGFuZCAxIG9mIHB0ZV9oaWdoIGFyZSB0YWtlbiwgdXNlIHRoZSByZXN0IGZvciB0aGUgcGFnZSBvZmZzZXQuLi4KLSAqLwotI2RlZmluZSBwdGVfdG9fcGdvZmYoX3B0ZSkJCSgoX3B0ZSkucHRlX2hpZ2ggPj4gMikKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJCSgocHRlX3QpIHsgX1BBR0VfRklMRSwgKG9mZikgPDwgMiB9KQotCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCQkzMAogI2Vsc2UKIC8qCiAgKiBDb25zdHJhaW50czoKQEAgLTIwOSwxOSArMTg2LDYgQEAKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCkgeyAoeCkudmFsIH0pCiAKLS8qCi0gKiBFbmNvZGUgYW5kIGRlY29kZSBhIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgZW50cnkKLSAqLwotI2RlZmluZSBwdGVfdG9fcGdvZmYoX3B0ZSkJCSgoKChfcHRlKS5wdGUgPj4gMSkgJiAweDcpIHwgXAotCQkJCQkgKCgoX3B0ZSkucHRlID4+IDIpICYgMHg4KSB8IFwKLQkJCQkJICgoKF9wdGUpLnB0ZSA+PiA4KSA8PAk0KSkKLQotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkJKChwdGVfdCkgeyAoKChvZmYpICYgMHg3KSA8PCAxKSB8IFwKLQkJCQkJCSAgICgoKG9mZikgJiAweDgpIDw8IDIpIHwgXAotCQkJCQkJICAgKCgob2ZmKSA+PiAgNCkgPDwgOCkgfCBcCi0JCQkJCQkgICBfUEFHRV9GSUxFIH0pCi0KLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJCTI4CiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUEhZU19BRERSX1RfNjRCSVQpICYmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTMzIpICovCiAKICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19DUFVfUjMwMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9UWDM5WFgpICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS02NC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtNjQuaAppbmRleCBlMWM0OWE5Li4xNjU5YmI5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS02NC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0LmgKQEAgLTI5MSwxMyArMjkxLDQgQEAKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkgKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCSgocHRlX3QpIHsgKHgpLnZhbCB9KQogCi0vKgotICogQml0cyAwLCA0LCA2LCBhbmQgNyBhcmUgdGFrZW4uIExldCdzIGxlYXZlIGJpdHMgMSwgMiwgMywgYW5kIDUgYWxvbmUgdG8KLSAqIG1ha2UgdGhpbmdzIGVhc2llciwgYW5kIG9ubHkgdXNlIHRoZSB1cHBlciA1NiBiaXRzIGZvciB0aGUgcGFnZSBvZmZzZXQuLi4KLSAqLwotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwk1NgotCi0jZGVmaW5lIHB0ZV90b19wZ29mZihfcHRlKQkoKF9wdGUpLnB0ZSA+PiA4KQotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkoKHB0ZV90KSB7ICgob2ZmKSA8PCA4KSB8IF9QQUdFX0ZJTEUgfSkKLQogI2VuZGlmIC8qIF9BU01fUEdUQUJMRV82NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmgKaW5kZXggY2ExMWYxNC4uZmM4MDdhYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLWJpdHMuaApAQCAtNDgsOCArNDgsNiBAQAogCiAvKgogICogVGhlIGZvbGxvd2luZyBiaXRzIGFyZSBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZQotICoKLSAqIF9QQUdFX0ZJTEUgc2VtYW50aWNzOiBzZXQ6cGFnZWNhY2hlIHVuc2V0OnN3YXAKICAqLwogI2RlZmluZSBfUEFHRV9QUkVTRU5UX1NISUZUCShfQ0FDSEVfU0hJRlQgKyAzKQogI2RlZmluZSBfUEFHRV9QUkVTRU5UCQkoMSA8PCBfUEFHRV9QUkVTRU5UX1NISUZUKQpAQCAtNjQsNyArNjIsNiBAQAogCiAjZGVmaW5lIF9QQUdFX1NJTEVOVF9SRUFECV9QQUdFX1ZBTElECiAjZGVmaW5lIF9QQUdFX1NJTEVOVF9XUklURQlfUEFHRV9ESVJUWQotI2RlZmluZSBfUEFHRV9GSUxFCQlfUEFHRV9NT0RJRklFRAogCiAjZGVmaW5lIF9QRk5fU0hJRlQJCShQQUdFX1NISUZUIC0gMTIgKyBfQ0FDSEVfU0hJRlQgKyAzKQogCkBAIC03Miw4ICs2OSw2IEBACiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIGFyZSBpbXBsZW1lbnRlZCBieSBzb2Z0d2FyZQotICoKLSAqIF9QQUdFX0ZJTEUgc2VtYW50aWNzOiBzZXQ6cGFnZWNhY2hlIHVuc2V0OnN3YXAKICAqLwogI2RlZmluZSBfUEFHRV9QUkVTRU5UX1NISUZUCTAKICNkZWZpbmUgX1BBR0VfUFJFU0VOVAkJKDEgPDwgIF9QQUdFX1BSRVNFTlRfU0hJRlQpCkBAIC04NSw4ICs4MCw2IEBACiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECQkoMSA8PCAgX1BBR0VfQUNDRVNTRURfU0hJRlQpCiAjZGVmaW5lIF9QQUdFX01PRElGSUVEX1NISUZUCTQKICNkZWZpbmUgX1BBR0VfTU9ESUZJRUQJCSgxIDw8ICBfUEFHRV9NT0RJRklFRF9TSElGVCkKLSNkZWZpbmUgX1BBR0VfRklMRV9TSElGVAk0Ci0jZGVmaW5lIF9QQUdFX0ZJTEUJCSgxIDw8ICBfUEFHRV9GSUxFX1NISUZUKQogCiAvKgogICogQW5kIHRoZXNlIGFyZSB0aGUgaGFyZHdhcmUgVExCIGJpdHMKQEAgLTExNiw3ICsxMDksNiBAQAogICogVGhlIGZvbGxvd2luZyBiaXRzIGFyZSBpbXBsZW1lbnRlZCBpbiBzb2Z0d2FyZQogICoKICAqIF9QQUdFX1JFQUQgLyBfUEFHRV9SRUFEX1NISUZUIHNob3VsZCBiZSB1bnVzZWQgaWYgY3B1X2hhc19yaXhpLgotICogX1BBR0VfRklMRSBzZW1hbnRpY3M6IHNldDpwYWdlY2FjaGUgdW5zZXQ6c3dhcAogICovCiAjZGVmaW5lIF9QQUdFX1BSRVNFTlRfU0hJRlQJKDApCiAjZGVmaW5lIF9QQUdFX1BSRVNFTlQJCSgxIDw8IF9QQUdFX1BSRVNFTlRfU0hJRlQpCkBAIC0xMjgsNyArMTIwLDYgQEAKICNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJCSgxIDw8IF9QQUdFX0FDQ0VTU0VEX1NISUZUKQogI2RlZmluZSBfUEFHRV9NT0RJRklFRF9TSElGVAkoX1BBR0VfQUNDRVNTRURfU0hJRlQgKyAxKQogI2RlZmluZSBfUEFHRV9NT0RJRklFRAkJKDEgPDwgX1BBR0VfTU9ESUZJRURfU0hJRlQpCi0jZGVmaW5lIF9QQUdFX0ZJTEUJCShfUEFHRV9NT0RJRklFRCkKIAogI2lmZGVmIENPTkZJR19NSVBTX0hVR0VfVExCX1NVUFBPUlQKIC8qIGh1Z2UgdGxiIHBhZ2UgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDYyYTZiYTMuLjU4M2ZmNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMjMxLDcgKzIzMSw2IEBACiBzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQl7IHJldHVybiBwdGUucHRlX2xvdyAmIF9QQUdFX1dSSVRFOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQl7IHJldHVybiBwdGUucHRlX2xvdyAmIF9QQUdFX01PRElGSUVEOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQl7IHJldHVybiBwdGUucHRlX2xvdyAmIF9QQUdFX0FDQ0VTU0VEOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZS5wdGVfbG93ICYgX1BBR0VfRklMRTsgfQogCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQogewpAQCAtMjg3LDcgKzI4Niw2IEBACiBzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9XUklURTsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfTU9ESUZJRUQ7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7IH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zeXNjYWxsLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc3lzY2FsbC5oCmluZGV4IGJiNzk2MzcuLjY0OTlkOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zeXNjYWxsLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3N5c2NhbGwuaApAQCAtMjksMTMgKzI5LDcgQEAKIHN0YXRpYyBpbmxpbmUgbG9uZyBzeXNjYWxsX2dldF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAJCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQkvKiBPMzIgQUJJIHN5c2NhbGwoKSAtIEVpdGhlciA2NC1iaXQgd2l0aCBPMzIgb3IgMzItYml0ICovCi0JaWYgKChjb25maWdfZW5hYmxlZChDT05GSUdfMzJCSVQpIHx8Ci0JICAgIHRlc3RfdHNrX3RocmVhZF9mbGFnKHRhc2ssIFRJRl8zMkJJVF9SRUdTKSkgJiYKLQkgICAgKHJlZ3MtPnJlZ3NbMl0gPT0gX19OUl9zeXNjYWxsKSkKLQkJcmV0dXJuIHJlZ3MtPnJlZ3NbNF07Ci0JZWxzZQotCQlyZXR1cm4gcmVncy0+cmVnc1syXTsKKwlyZXR1cm4gY3VycmVudF90aHJlYWRfaW5mbygpLT5zeXNjYWxsOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWlwc19nZXRfc3lzY2FsbF9hcmcodW5zaWduZWQgbG9uZyAqYXJnLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCA5OWVlYTU5Li5lNDQ0MGY5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtMzYsNiArMzYsNyBAQAogCQkJCQkJICovCiAJc3RydWN0IHJlc3RhcnRfYmxvY2sJcmVzdGFydF9ibG9jazsKIAlzdHJ1Y3QgcHRfcmVncwkJKnJlZ3M7CisJbG9uZwkJCXN5c2NhbGw7CS8qIHN5c2NhbGwgbnVtYmVyICovCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvdWFwaS9hc20vdW5pc3RkLmggYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAppbmRleCBkMDAxYmIxLi5jMDMwODhmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS91YXBpL2FzbS91bmlzdGQuaApAQCAtMzc2LDE2ICszNzYsMTcgQEAKICNkZWZpbmUgX19OUl9nZXRyYW5kb20JCQkoX19OUl9MaW51eCArIDM1MykKICNkZWZpbmUgX19OUl9tZW1mZF9jcmVhdGUJCShfX05SX0xpbnV4ICsgMzU0KQogI2RlZmluZSBfX05SX2JwZgkJCShfX05SX0xpbnV4ICsgMzU1KQorI2RlZmluZSBfX05SX2V4ZWN2ZWF0CQkJKF9fTlJfTGludXggKyAzNTYpCiAKIC8qCiAgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTGludXggbzMyIGZsYXZvdXJlZCBzeXNjYWxsCiAgKi8KLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzU1CisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTM1NgogCiAjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkkzMiAqLwogCiAjZGVmaW5lIF9fTlJfTzMyX0xpbnV4CQkJNDAwMAotI2RlZmluZSBfX05SX08zMl9MaW51eF9zeXNjYWxscwkJMzU1CisjZGVmaW5lIF9fTlJfTzMyX0xpbnV4X3N5c2NhbGxzCQkzNTYKIAogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQKIApAQCAtNzA5LDE2ICs3MTAsMTcgQEAKICNkZWZpbmUgX19OUl9nZXRyYW5kb20JCQkoX19OUl9MaW51eCArIDMxMykKICNkZWZpbmUgX19OUl9tZW1mZF9jcmVhdGUJCShfX05SX0xpbnV4ICsgMzE0KQogI2RlZmluZSBfX05SX2JwZgkJCShfX05SX0xpbnV4ICsgMzE1KQorI2RlZmluZSBfX05SX2V4ZWN2ZWF0CQkJKF9fTlJfTGludXggKyAzMTYpCiAKIC8qCiAgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTGludXggNjQtYml0IGZsYXZvdXJlZCBzeXNjYWxsCiAgKi8KLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzE1CisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTMxNgogCiAjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NCAqLwogCiAjZGVmaW5lIF9fTlJfNjRfTGludXgJCQk1MDAwCi0jZGVmaW5lIF9fTlJfNjRfTGludXhfc3lzY2FsbHMJCTMxNQorI2RlZmluZSBfX05SXzY0X0xpbnV4X3N5c2NhbGxzCQkzMTYKIAogI2lmIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyCiAKQEAgLTEwNDYsMTUgKzEwNDgsMTYgQEAKICNkZWZpbmUgX19OUl9nZXRyYW5kb20JCQkoX19OUl9MaW51eCArIDMxNykKICNkZWZpbmUgX19OUl9tZW1mZF9jcmVhdGUJCShfX05SX0xpbnV4ICsgMzE4KQogI2RlZmluZSBfX05SX2JwZgkJCShfX05SX0xpbnV4ICsgMzE5KQorI2RlZmluZSBfX05SX2V4ZWN2ZWF0CQkJKF9fTlJfTGludXggKyAzMjApCiAKIC8qCiAgKiBPZmZzZXQgb2YgdGhlIGxhc3QgTjMyIGZsYXZvdXJlZCBzeXNjYWxsCiAgKi8KLSNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzE5CisjZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTMyMAogCiAjZW5kaWYgLyogX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIgKi8KIAogI2RlZmluZSBfX05SX04zMl9MaW51eAkJCTYwMDAKLSNkZWZpbmUgX19OUl9OMzJfTGludXhfc3lzY2FsbHMJCTMxOQorI2RlZmluZSBfX05SX04zMl9MaW51eF9zeXNjYWxscwkJMzIwCiAKICNlbmRpZiAvKiBfVUFQSV9BU01fVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qejQ3NDAvaXJxLmMgYi9hcmNoL21pcHMvano0NzQwL2lycS5jCmluZGV4IDI1MzFkYTEuLjk3MjA2YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qejQ3NDAvaXJxLmMKKysrIGIvYXJjaC9taXBzL2p6NDc0MC9pcnEuYwpAQCAtMzAsNiArMzAsOSBAQAogI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC1qejQ3NDAvYmFzZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLWp6NDc0MC9pcnEuaD4KKworI2luY2x1ZGUgImlycS5oIgogCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpqel9pbnRjX2Jhc2U7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZWxmLmMgYi9hcmNoL21pcHMva2VybmVsL2VsZi5jCmluZGV4IGM5MmIxNWQuLmE1YjViNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvZWxmLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9lbGYuYwpAQCAtMTksOCArMTksOCBAQAogaW50IGFyY2hfZWxmX3B0X3Byb2Modm9pZCAqX2VoZHIsIHZvaWQgKl9waGRyLCBzdHJ1Y3QgZmlsZSAqZWxmLAogCQkgICAgIGJvb2wgaXNfaW50ZXJwLCBzdHJ1Y3QgYXJjaF9lbGZfc3RhdGUgKnN0YXRlKQogewotCXN0cnVjdCBlbGZoZHIgKmVoZHIgPSBfZWhkcjsKLQlzdHJ1Y3QgZWxmX3BoZHIgKnBoZHIgPSBfcGhkcjsKKwlzdHJ1Y3QgZWxmMzJfaGRyICplaGRyID0gX2VoZHI7CisJc3RydWN0IGVsZjMyX3BoZHIgKnBoZHIgPSBfcGhkcjsKIAlzdHJ1Y3QgbWlwc19lbGZfYWJpZmxhZ3NfdjAgYWJpZmxhZ3M7CiAJaW50IHJldDsKIApAQCAtNDgsNyArNDgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGdldF9mcF9hYmkoc3RydWN0IGVsZmhkciAqZWhkciwgaW50IGluX2FiaSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0X2ZwX2FiaShzdHJ1Y3QgZWxmMzJfaGRyICplaGRyLCBpbnQgaW5fYWJpKQogewogCS8qIElmIHRoZSBBQkkgcmVxdWlyZW1lbnQgaXMgcHJvdmlkZWQsIHNpbXBseSByZXR1cm4gdGhhdCAqLwogCWlmIChpbl9hYmkgIT0gLTEpCkBAIC02NSw3ICs2NSw3IEBACiBpbnQgYXJjaF9jaGVja19lbGYodm9pZCAqX2VoZHIsIGJvb2wgaGFzX2ludGVycHJldGVyLAogCQkgICBzdHJ1Y3QgYXJjaF9lbGZfc3RhdGUgKnN0YXRlKQogewotCXN0cnVjdCBlbGZoZHIgKmVoZHIgPSBfZWhkcjsKKwlzdHJ1Y3QgZWxmMzJfaGRyICplaGRyID0gX2VoZHI7CiAJdW5zaWduZWQgZnBfYWJpLCBpbnRlcnBfZnBfYWJpLCBhYmkwLCBhYmkxOwogCiAJLyogSWdub3JlIG5vbi1PMzIgYmluYXJpZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxX2NwdS5jIGIvYXJjaC9taXBzL2tlcm5lbC9pcnFfY3B1LmMKaW5kZXggNTkwYzJjOS4uNmViN2EzZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnFfY3B1LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9pcnFfY3B1LmMKQEAgLTU3LDYgKzU3LDggQEAKIAkuaXJxX21hc2tfYWNrCT0gbWFza19taXBzX2lycSwKIAkuaXJxX3VubWFzawk9IHVubWFza19taXBzX2lycSwKIAkuaXJxX2VvaQk9IHVubWFza19taXBzX2lycSwKKwkuaXJxX2Rpc2FibGUJPSBtYXNrX21pcHNfaXJxLAorCS5pcnFfZW5hYmxlCT0gdW5tYXNrX21pcHNfaXJxLAogfTsKIAogLyoKQEAgLTkzLDYgKzk1LDggQEAKIAkuaXJxX21hc2tfYWNrCT0gbWlwc19tdF9jcHVfaXJxX2FjaywKIAkuaXJxX3VubWFzawk9IHVubWFza19taXBzX2lycSwKIAkuaXJxX2VvaQk9IHVubWFza19taXBzX2lycSwKKwkuaXJxX2Rpc2FibGUJPSBtYXNrX21pcHNfaXJxLAorCS5pcnFfZW5hYmxlCT0gdW5tYXNrX21pcHNfaXJxLAogfTsKIAogYXNtbGlua2FnZSB2b2lkIF9fd2VhayBwbGF0X2lycV9kaXNwYXRjaCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYwppbmRleCBlYjc2NDM0Li44NWJmZjVkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL21pcHMva2VybmVsL3Byb2Nlc3MuYwpAQCAtODIsNiArODIsMzAgQEAKIHsKIH0KIAoraW50IGFyY2hfZHVwX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNyYykKK3sKKwkvKgorCSAqIFNhdmUgYW55IHByb2Nlc3Mgc3RhdGUgd2hpY2ggaXMgbGl2ZSBpbiBoYXJkd2FyZSByZWdpc3RlcnMgdG8gdGhlCisJICogcGFyZW50IGNvbnRleHQgcHJpb3IgdG8gZHVwbGljYXRpb24uIFRoaXMgcHJldmVudHMgdGhlIG5ldyBjaGlsZAorCSAqIHN0YXRlIGJlY29taW5nIHN0YWxlIGlmIHRoZSBwYXJlbnQgaXMgcHJlZW1wdGVkIGJlZm9yZSBjb3B5X3RocmVhZCgpCisJICogZ2V0cyBhIGNoYW5jZSB0byBzYXZlIHRoZSBwYXJlbnQncyBsaXZlIGhhcmR3YXJlIHJlZ2lzdGVycyB0byB0aGUKKwkgKiBjaGlsZCBjb250ZXh0LgorCSAqLworCXByZWVtcHRfZGlzYWJsZSgpOworCisJaWYgKGlzX21zYV9lbmFibGVkKCkpCisJCXNhdmVfbXNhKGN1cnJlbnQpOworCWVsc2UgaWYgKGlzX2ZwdV9vd25lcigpKQorCQlfc2F2ZV9mcChjdXJyZW50KTsKKworCXNhdmVfZHNwKGN1cnJlbnQpOworCisJcHJlZW1wdF9lbmFibGUoKTsKKworCSpkc3QgPSAqc3JjOworCXJldHVybiAwOworfQorCiBpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyB1c3AsCiAJdW5zaWduZWQgbG9uZyBhcmcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKQEAgLTkyLDE4ICsxMTYsNiBAQAogCiAJY2hpbGRrc3AgPSAodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UocCkgKyBUSFJFQURfU0laRSAtIDMyOwogCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0KLQlpZiAoaXNfbXNhX2VuYWJsZWQoKSkKLQkJc2F2ZV9tc2EocCk7Ci0JZWxzZSBpZiAoaXNfZnB1X293bmVyKCkpCi0JCXNhdmVfZnAocCk7Ci0KLQlpZiAoY3B1X2hhc19kc3ApCi0JCXNhdmVfZHNwKHApOwotCi0JcHJlZW1wdF9lbmFibGUoKTsKLQogCS8qIHNldCB1cCBuZXcgVFNTLiAqLwogCWNoaWxkcmVncyA9IChzdHJ1Y3QgcHRfcmVncyAqKSBjaGlsZGtzcCAtIDE7CiAJLyogIFB1dCB0aGUgc3RhY2sgYWZ0ZXIgdGhlIHN0cnVjdCBwdF9yZWdzLiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCmluZGV4IDlkMTQ4N2QuLjUxMDQ1MjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYwpAQCAtNzcwLDYgKzc3MCw4IEBACiAJbG9uZyByZXQgPSAwOwogCXVzZXJfZXhpdCgpOwogCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5zeXNjYWxsID0gc3lzY2FsbDsKKwogCWlmIChzZWN1cmVfY29tcHV0aW5nKCkgPT0gLTEpCiAJCXJldHVybiAtMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCmluZGV4IDAwY2FkMTAuLjZlOGRlODAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKQEAgLTE4MSw2ICsxODEsNyBAQAogCXNsbAl0MSwgdDAsIDIKIAliZXF6CXYwLCBlaW52YWwKIAlsdwl0Miwgc3lzX2NhbGxfdGFibGUodDEpCQkjIHN5c2NhbGwgcm91dGluZQorCXN3CWEwLCBQVF9SMihzcCkJCQkjIGNhbGwgcm91dGluZSBkaXJlY3RseSBvbiByZXN0YXJ0CiAKIAkvKiBTb21lIHN5c2NhbGxzIGxpa2UgZXhlY3ZlIGdldCB0aGVpciBhcmd1bWVudHMgZnJvbSBzdHJ1Y3QgcHRfcmVncwogCSAgIGFuZCBjbGFpbSB6ZXJvIGFyZ3VtZW50cyBpbiB0aGUgc3lzY2FsbCB0YWJsZS4gVGh1cyB3ZSBoYXZlIHRvCkBAIC01ODAsMyArNTgxLDQgQEAKIAlQVFIJc3lzX2dldHJhbmRvbQogCVBUUglzeXNfbWVtZmRfY3JlYXRlCiAJUFRSCXN5c19icGYJCQkJLyogNDM1NSAqLworCVBUUglzeXNfZXhlY3ZlYXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKaW5kZXggNTI1MTU2NS4uYWQ0ZDQ0NjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCkBAIC00MzUsNCArNDM1LDUgQEAKIAlQVFIJc3lzX2dldHJhbmRvbQogCVBUUglzeXNfbWVtZmRfY3JlYXRlCiAJUFRSCXN5c19icGYJCQkJLyogNTMxNSAqLworCVBUUglzeXNfZXhlY3ZlYXQKIAkuc2l6ZQlzeXNfY2FsbF90YWJsZSwuLXN5c19jYWxsX3RhYmxlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKaW5kZXggNzdlNzQzOS4uNDQ2Y2M2NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwpAQCAtNDI4LDQgKzQyOCw1IEBACiAJUFRSCXN5c19nZXRyYW5kb20KIAlQVFIJc3lzX21lbWZkX2NyZWF0ZQogCVBUUglzeXNfYnBmCisJUFRSCWNvbXBhdF9zeXNfZXhlY3ZlYXQJCS8qIDYzMjAgKi8KIAkuc2l6ZQlzeXNuMzJfY2FsbF90YWJsZSwuLXN5c24zMl9jYWxsX3RhYmxlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggNmY4ZGI5Zi4uZDA3YjIxMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtMTg2LDYgKzE4Niw3IEBACiAJZHNsbAl0MSwgdDAsIDMKIAliZXF6CXYwLCBlaW52YWwKIAlsZAl0Miwgc3lzMzJfY2FsbF90YWJsZSh0MSkJCSMgc3lzY2FsbCByb3V0aW5lCisJc2QJYTAsIFBUX1IyKHNwKQkJIyBjYWxsIHJvdXRpbmUgZGlyZWN0bHkgb24gcmVzdGFydAogCiAJbW92ZQlhMCwgYTEJCQkjIHNoaWZ0IGFyZ3VtZW50IHJlZ2lzdGVycwogCW1vdmUJYTEsIGEyCkBAIC01NjUsNCArNTY2LDUgQEAKIAlQVFIJc3lzX2dldHJhbmRvbQogCVBUUglzeXNfbWVtZmRfY3JlYXRlCiAJUFRSCXN5c19icGYJCQkJLyogNDM1NSAqLworCVBUUgljb21wYXRfc3lzX2V4ZWN2ZWF0CiAJLnNpemUJc3lzMzJfY2FsbF90YWJsZSwuLXN5czMyX2NhbGxfdGFibGUKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLWNtcC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAtY21wLmMKaW5kZXggMWUwYTkzYy4uZTM2YTg1OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXAtY21wLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAtY21wLmMKQEAgLTQ0LDggKzQ0LDggQEAKIAlzdHJ1Y3QgY3B1aW5mb19taXBzICpjIF9fbWF5YmVfdW51c2VkID0gJmN1cnJlbnRfY3B1X2RhdGE7CiAKIAkvKiBBc3N1bWUgR0lDIGlzIHByZXNlbnQgKi8KLQljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgU1RBVFVTRl9JUDMgfCBTVEFUVVNGX0lQNCB8IFNUQVRVU0ZfSVA2IHwKLQkJCQkgU1RBVFVTRl9JUDcpOworCWNoYW5nZV9jMF9zdGF0dXMoU1QwX0lNLCBTVEFUVVNGX0lQMiB8IFNUQVRVU0ZfSVAzIHwgU1RBVFVTRl9JUDQgfAorCQkJCSBTVEFUVVNGX0lQNSB8IFNUQVRVU0ZfSVA2IHwgU1RBVFVTRl9JUDcpOwogCiAJLyogRW5hYmxlIHBlci1jcHUgaW50ZXJydXB0czogcGxhdGZvcm0gc3BlY2lmaWMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXAtbXQuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLW10LmMKaW5kZXggYWQ4Njk1MS4uMTdlYTcwNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXAtbXQuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtcC1tdC5jCkBAIC0xNjEsNyArMTYxLDggQEAKICNpZmRlZiBDT05GSUdfTUlQU19HSUMKIAkvKiBUaGlzIGlzIE1hbHRhIHNwZWNpZmljOiBJUEkscGVyZm9ybWFuY2UgYW5kIHRpbWVyIGludGVycnVwdHMgKi8KIAlpZiAoZ2ljX3ByZXNlbnQpCi0JCWNoYW5nZV9jMF9zdGF0dXMoU1QwX0lNLCBTVEFUVVNGX0lQMyB8IFNUQVRVU0ZfSVA0IHwKKwkJY2hhbmdlX2MwX3N0YXR1cyhTVDBfSU0sIFNUQVRVU0ZfSVAyIHwgU1RBVFVTRl9JUDMgfAorCQkJCQkgU1RBVFVTRl9JUDQgfCBTVEFUVVNGX0lQNSB8CiAJCQkJCSBTVEFUVVNGX0lQNiB8IFNUQVRVU0ZfSVA3KTsKIAllbHNlCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCmluZGV4IGM5NGM0ZTkuLjFjMGQ4YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zbXAuYwpAQCAtMTIzLDEwICsxMjMsMTAgQEAKIAl1bnNpZ25lZCBpbnQgY3B1OwogCiAJY3B1X3Byb2JlKCk7Ci0JY3B1X3JlcG9ydCgpOwogCXBlcl9jcHVfdHJhcF9pbml0KGZhbHNlKTsKIAltaXBzX2Nsb2NrZXZlbnRfaW5pdCgpOwogCW1wX29wcy0+aW5pdF9zZWNvbmRhcnkoKTsKKwljcHVfcmVwb3J0KCk7CiAKIAkvKgogCSAqIFhYWCBwYXJpdHkgcHJvdGVjdGlvbiBzaG91bGQgYmUgZm9sZGVkIGluIGhlcmUgd2hlbiBpdCdzIGNvbnZlcnRlZApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCmluZGV4IGFkM2QyMDMuLmMzYjQxZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKQEAgLTEyMzEsNyArMTIzMSw4IEBACiAKIAkJLyogUmVzdG9yZSB0aGUgc2NhbGFyIEZQIGNvbnRyb2wgJiBzdGF0dXMgcmVnaXN0ZXIgKi8KIAkJaWYgKCF3YXNfZnB1X293bmVyKQotCQkJYXNtIHZvbGF0aWxlKCJjdGMxICUwLCAkMzEiIDogOiAiciIoY3VycmVudC0+dGhyZWFkLmZwdS5mY3IzMSkpOworCQkJd3JpdGVfMzJiaXRfY3AxX3JlZ2lzdGVyKENQMV9TVEFUVVMsCisJCQkJCQkgY3VycmVudC0+dGhyZWFkLmZwdS5mY3IzMSk7CiAJfQogCiBvdXQ6CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva3ZtL0tjb25maWcgYi9hcmNoL21pcHMva3ZtL0tjb25maWcKaW5kZXggMzBlMzM0ZS4uMmFlMTI4MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2t2bS9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9rdm0vS2NvbmZpZwpAQCAtMjAsNiArMjAsNyBAQAogCXNlbGVjdCBQUkVFTVBUX05PVElGSUVSUwogCXNlbGVjdCBBTk9OX0lOT0RFUwogCXNlbGVjdCBLVk1fTU1JTworCXNlbGVjdCBTUkNVCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgaG9zdGluZyBHdWVzdCBrZXJuZWxzLgogCSAgQ3VycmVudGx5IHN1cHBvcnRlZCBvbiBNSVBTMzIgcHJvY2Vzc29ycy4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9mYXVsdC5jIGIvYXJjaC9taXBzL21tL2ZhdWx0LmMKaW5kZXggYmVjYzQyYi4uNzBhYjVkNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9taXBzL21tL2ZhdWx0LmMKQEAgLTE1OCw2ICsxNTgsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2d1cC5jIGIvYXJjaC9taXBzL21tL2d1cC5jCmluZGV4IDcwNzk1YTYuLjM0OTk5NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9ndXAuYworKysgYi9hcmNoL21pcHMvbW0vZ3VwLmMKQEAgLTMwMSwxMSArMzAxLDkgQEAKIAlzdGFydCArPSBuciA8PCBQQUdFX1NISUZUOwogCXBhZ2VzICs9IG5yOwogCi0JZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCBzdGFydCwKLQkJCQkoZW5kIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQsCi0JCQkJd3JpdGUsIDAsIHBhZ2VzLCBOVUxMKTsKLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXJldCA9IGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKGN1cnJlbnQsIG1tLCBzdGFydCwKKwkJCQkgICAgICAoZW5kIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQsCisJCQkJICAgICAgd3JpdGUsIDAsIHBhZ2VzKTsKIAogCS8qIEhhdmUgdG8gYmUgYSBiaXQgY2FyZWZ1bCB3aXRoIHJldHVybiB2YWx1ZXMgKi8KIAlpZiAobnIgPiAwKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaHVnZXRsYnBhZ2UuYyBiL2FyY2gvbWlwcy9tbS9odWdldGxicGFnZS5jCmluZGV4IDRlYzhlZTEuLjA2ZTBmNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvbWlwcy9tbS9odWdldGxicGFnZS5jCkBAIC02OCwxMiArNjgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgcGFnZSAqCi1mb2xsb3dfaHVnZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCB3cml0ZSkKLXsKLQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLX0KLQogaW50IHBtZF9odWdlKHBtZF90IHBtZCkKIHsKIAlyZXR1cm4gKHBtZF92YWwocG1kKSAmIF9QQUdFX0hVR0UpICE9IDA7CkBAIC04MywxNSArNzcsMyBAQAogewogCXJldHVybiAocHVkX3ZhbChwdWQpICYgX1BBR0VfSFVHRSkgIT0gMDsKIH0KLQotc3RydWN0IHBhZ2UgKgotZm9sbG93X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCXBtZF90ICpwbWQsIGludCB3cml0ZSkKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCXBhZ2UgPSBwdGVfcGFnZSgqKHB0ZV90ICopcG1kKTsKLQlpZiAocGFnZSkKLQkJcGFnZSArPSAoKGFkZHJlc3MgJiB+SFBBR0VfTUFTSykgPj4gUEFHRV9TSElGVCk7Ci0JcmV0dXJuIHBhZ2U7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jIGIvYXJjaC9taXBzL21tL3RsYi1yNGsuYwppbmRleCBlOTBiMmU4Li4zMDYzOWE2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCisrKyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKQEAgLTQ4OSw2ICs0ODksOCBAQAogI2lmZGVmIENPTkZJR182NEJJVAogCQlwZyB8PSBQR19FTFBBOwogI2VuZGlmCisJCWlmIChjcHVfaGFzX3JpeGlleCkKKwkJCXBnIHw9IFBHX0lFQzsKIAkJd3JpdGVfYzBfcGFnZWdyYWluKHBnKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODAuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWJjbTE0ODAuYwppbmRleCA1ZWMyYTdiLi5mMjM1NWUzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1iY20xNDgwLmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktYmNtMTQ4MC5jCkBAIC0xNzMsOCArMTczLDggQEAKIH0KIAogc3RydWN0IHBjaV9vcHMgYmNtMTQ4MF9wY2lfb3BzID0gewotCWJjbTE0ODBfcGNpYmlvc19yZWFkLAotCWJjbTE0ODBfcGNpYmlvc193cml0ZSwKKwkucmVhZCA9IGJjbTE0ODBfcGNpYmlvc19yZWFkLAorCS53cml0ZSA9IGJjbTE0ODBfcGNpYmlvc193cml0ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmNtMTQ4MF9tZW1fcmVzb3VyY2UgPSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1vY3Rlb24uYyBiL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jCmluZGV4IGQwN2UwNDEuLmJlZGI3MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLW9jdGVvbi5jCkBAIC0zMjcsOCArMzI3LDggQEAKIAogCiBzdGF0aWMgc3RydWN0IHBjaV9vcHMgb2N0ZW9uX3BjaV9vcHMgPSB7Ci0Jb2N0ZW9uX3JlYWRfY29uZmlnLAotCW9jdGVvbl93cml0ZV9jb25maWcsCisJLnJlYWQgPSBvY3Rlb25fcmVhZF9jb25maWcsCisJLndyaXRlID0gb2N0ZW9uX3dyaXRlX2NvbmZpZywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb2N0ZW9uX3BjaV9tZW1fcmVzb3VyY2UgPSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaWUtb2N0ZW9uLmMgYi9hcmNoL21pcHMvcGNpL3BjaWUtb2N0ZW9uLmMKaW5kZXggNWUzNmMzMy4uZWI0YTE3YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9wY2llLW9jdGVvbi5jCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpZS1vY3Rlb24uYwpAQCAtMTc5Miw4ICsxNzkyLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfb3BzIG9jdGVvbl9wY2llMF9vcHMgPSB7Ci0Jb2N0ZW9uX3BjaWUwX3JlYWRfY29uZmlnLAotCW9jdGVvbl9wY2llMF93cml0ZV9jb25maWcsCisJLnJlYWQgPSBvY3Rlb25fcGNpZTBfcmVhZF9jb25maWcsCisJLndyaXRlID0gb2N0ZW9uX3BjaWUwX3dyaXRlX2NvbmZpZywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb2N0ZW9uX3BjaWUwX21lbV9yZXNvdXJjZSA9IHsKQEAgLTE4MTMsOCArMTgxMyw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBjaV9vcHMgb2N0ZW9uX3BjaWUxX29wcyA9IHsKLQlvY3Rlb25fcGNpZTFfcmVhZF9jb25maWcsCi0Jb2N0ZW9uX3BjaWUxX3dyaXRlX2NvbmZpZywKKwkucmVhZCA9IG9jdGVvbl9wY2llMV9yZWFkX2NvbmZpZywKKwkud3JpdGUgPSBvY3Rlb25fcGNpZTFfd3JpdGVfY29uZmlnLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvY3Rlb25fcGNpZTFfbWVtX3Jlc291cmNlID0gewpAQCAtMTgzNCw4ICsxODM0LDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX29wcyBvY3Rlb25fZHVtbXlfb3BzID0gewotCW9jdGVvbl9kdW1teV9yZWFkX2NvbmZpZywKLQlvY3Rlb25fZHVtbXlfd3JpdGVfY29uZmlnLAorCS5yZWFkID0gb2N0ZW9uX2R1bW15X3JlYWRfY29uZmlnLAorCS53cml0ZSA9IG9jdGVvbl9kdW1teV93cml0ZV9jb25maWcsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG9jdGVvbl9kdW1teV9tZW1fcmVzb3VyY2UgPSB7CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCBmYWVkOTAyLi42ZDZkZjgzIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTE1OSwxMyArMTU5LDYgQEAKICNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCiAJbWVtY3B5KGRzdCwgc3JjLCBsZW4pCiAKLS8qCi0gKiBJbnRlcm5hbCBkZWJ1Z2dpbmcgZnVuY3Rpb24KLSAqLwotI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKLWV4dGVybiB2b2lkIGtlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSk7Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDJkZGFhNjdlLi5hZmFiNzI4IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTY1LDcgKzY1LDcgQEAKICNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFIC0gMSkpCiAKICNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJKFRBU0tfU0laRSAvIFBHRElSX1NJWkUpCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwVUwKIAogI2RlZmluZSBVU0VSX1BHRF9QVFJTCQkoUEFHRV9PRkZTRVQgPj4gUEdESVJfU0hJRlQpCiAjZGVmaW5lIEtFUk5FTF9QR0RfUFRSUwkJKFBUUlNfUEVSX1BHRCAtIFVTRVJfUEdEX1BUUlMpCkBAIC0xMzQsNyArMTM0LDYgQEAKICNkZWZpbmUgX1BBR0VfTlgJCTAJCQkvKiBuby1leGVjdXRlIGJpdCAqLwogCiAvKiBJZiBfUEFHRV9WQUxJRCBpcyBjbGVhciwgd2UgdXNlIHRoZXNlOiAqLwotI2RlZmluZSBfUEFHRV9GSUxFCQl4UFRFTDJfQwkvKiBzZXQ6cGFnZWNhY2hlIHVuc2V0OnN3YXAgKi8KICNkZWZpbmUgX1BBR0VfUFJPVE5PTkUJCTB4MDAwCQkvKiBJZiBub3QgcHJlc2VudCAqLwogCiAjZGVmaW5lIF9fUEFHRV9QUk9UX1VXQVVYCTB4MDEwCkBAIC0yNDEsMTEgKzI0MCw2IEBACiBzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfX1BBR0VfUFJPVF9XUklURTsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKXsgcmV0dXJuIDA7IH0KIAotLyoKLSAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrcyBpZiBwdGVfcHJlc2VudCgpIGlzIG5vdCB0cnVlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7IH0KLQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfcmRwcm90ZWN0KHB0ZV90IHB0ZSkKIHsKIAlwdGVfdmFsKHB0ZSkgJj0gfihfX1BBR0VfUFJPVF9VU0VSfF9fUEFHRV9QUk9UX1VXQVVYKTsgcmV0dXJuIHB0ZTsKQEAgLTMzOCwxNiArMzMyLDExIEBACiAJcmV0dXJuIDE7CiB9CiAKLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMzAKLQotI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKQkocHRlX3ZhbChwdGUpID4+IDIpCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCV9fcHRlKChvZmYpIDw8IDIgfCBfUEFHRV9GSUxFKQotCiAvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCi0jZGVmaW5lIF9fc3dwX3R5cGUoeCkJCQkoKCh4KS52YWwgPj4gMikgJiAweDNmKQotI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkJCQkoKHgpLnZhbCA+PiA4KQorI2RlZmluZSBfX3N3cF90eXBlKHgpCQkJKCgoeCkudmFsID4+IDEpICYgMHgzZikKKyNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkJKCh4KS52YWwgPj4gNykKICNkZWZpbmUgX19zd3BfZW50cnkodHlwZSwgb2Zmc2V0KSBcCi0JKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDIpIHwgKChvZmZzZXQpIDw8IDgpIH0pCisJKChzd3BfZW50cnlfdCkgeyAoKHR5cGUpIDw8IDEpIHwgKChvZmZzZXQpIDw8IDcpIH0pCiAjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCQkoKHN3cF9lbnRyeV90KSB7IHB0ZV92YWwocHRlKSB9KQogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCV9fcHRlKCh4KS52YWwpCiAKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9tbS9mYXVsdC5jIGIvYXJjaC9tbjEwMzAwL21tL2ZhdWx0LmMKaW5kZXggMzUxNmNiZC4uMGMyY2M1ZCAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9tbjEwMzAwL21tL2ZhdWx0LmMKQEAgLTI2Miw2ICsyNjIsOCBAQAogCWlmICh1bmxpa2VseShmYXVsdCAmIFZNX0ZBVUxUX0VSUk9SKSkgewogCQlpZiAoZmF1bHQgJiBWTV9GQVVMVF9PT00pCiAJCQlnb3RvIG91dF9vZl9tZW1vcnk7CisJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCWVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKQogCQkJZ290byBkb19zaWdidXM7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2kuYyBiL2FyY2gvbW4xMDMwMC91bml0LWFzYjIzMDUvcGNpLmMKaW5kZXggNDcxZmYzOS4uNjEzY2ExZSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL3VuaXQtYXNiMjMwNS9wY2kuYworKysgYi9hcmNoL21uMTAzMDAvdW5pdC1hc2IyMzA1L3BjaS5jCkBAIC0yMjgsOCArMjI4LDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfb3BzIHBjaV9kaXJlY3RfYW1wY2kgPSB7Ci0JcGNpX2FtcGNpX3JlYWRfY29uZmlnLAotCXBjaV9hbXBjaV93cml0ZV9jb25maWcsCisJLnJlYWQgPSBwY2lfYW1wY2lfcmVhZF9jb25maWcsCisJLndyaXRlID0gcGNpX2FtcGNpX3dyaXRlX2NvbmZpZywKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oIGIvYXJjaC9uaW9zMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLWJpdHMuaAppbmRleCBjZTllNzA2Li5iZmRkZmYzIDEwMDY0NAotLS0gYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmgKQEAgLTMwLDYgKzMwLDUgQEAKICNkZWZpbmUgX1BBR0VfUFJFU0VOVAkoMTw8MjUpCS8qIFBURSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECSgxPDwyNikJLyogcGFnZSByZWZlcmVuY2VkICovCiAjZGVmaW5lIF9QQUdFX0RJUlRZCSgxPDwyNykJLyogZGlydHkgcGFnZSAqLwotI2RlZmluZSBfUEFHRV9GSUxFCSgxPDwyOCkJLyogUFRFIHVzZWQgZm9yIGZpbGUgbWFwcGluZyBvciBzd2FwICovCiAKICNlbmRpZiAvKiBfQVNNX05JT1MyX1BHVEFCTEVfQklUU19IICovCmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGNjYmFmZmQuLmEyMTNlOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvbmlvczIvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUtYml0cy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KIAotI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAorI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMFVMCiAKICNkZWZpbmUgVk1BTExPQ19TVEFSVAkJQ09ORklHX05JT1MyX0tFUk5FTF9NTVVfUkVHSU9OX0JBU0UKICNkZWZpbmUgVk1BTExPQ19FTkQJCShDT05GSUdfTklPUzJfS0VSTkVMX1JFR0lPTl9CQVNFIC0gMSkKQEAgLTExMiw4ICsxMTIsNiBAQAogCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0RJUlRZOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKQkJXAogCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQlcCi0JeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRTsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKQl7IHJldHVybiAwOyB9CiAKICNkZWZpbmUgcGdwcm90X25vbmNhY2hlZCBwZ3Byb3Rfbm9uY2FjaGVkCkBAIC0yNzIsOCArMjcwLDcgQEAKIAkJX19GSUxFX18sIF9fTElORV9fLCBwZ2RfdmFsKGUpKQogCiAvKgotICogRW5jb2RlIGFuZCBkZWNvZGUgYSBzd2FwIGVudHJ5IChtdXN0IGJlICFwdGVfbm9uZShwdGUpICYmICFwdGVfcHJlc2VudChwdGUpCi0gKiAmJiAhcHRlX2ZpbGUocHRlKSk6CisgKiBFbmNvZGUgYW5kIGRlY29kZSBhIHN3YXAgZW50cnkgKG11c3QgYmUgIXB0ZV9ub25lKHB0ZSkgJiYgIXB0ZV9wcmVzZW50KHB0ZSk6CiAgKgogICogMzEgMzAgMjkgMjggMjcgMjYgMjUgMjQgMjMgMjIgMjEgMjAgMTkgMTggLi4uICAxICAwCiAgKiAgMCAgMCAgMCAgMCB0eXBlLiAgMCAgMCAgMCAgMCAgMCAgMCBvZmZzZXQuLi4uLi4uLi4KQEAgLTI5MCwxMSArMjg3LDYgQEAKICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHN3cCkJKChwdGVfdCkgeyAoc3dwKS52YWwgfSkKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKIAotLyogRW5jb2RlIGFuZCBkZWNvZGUgYSBub25saW5lYXIgZmlsZSBtYXBwaW5nIGVudHJ5ICovCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI1Ci0jZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCShwdGVfdmFsKHB0ZSkgJiAweDFmZmZmZmYpCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCV9fcHRlKCgob2ZmKSAmIDB4MWZmZmZmZikgfCBfUEFHRV9GSUxFKQotCiAjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkJKDEpCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL25pb3MyL21tL2ZhdWx0LmMgYi9hcmNoL25pb3MyL21tL2ZhdWx0LmMKaW5kZXggMTVhMGJiNS4uZDE5NGMwNCAxMDA2NDQKLS0tIGEvYXJjaC9uaW9zMi9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbmlvczIvbW0vZmF1bHQuYwpAQCAtMTM1LDYgKzEzNSw4IEBACiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBiYWRfYXJlYTsKIAkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCiAJCQlnb3RvIGRvX3NpZ2J1czsKIAkJQlVHKCk7CkBAIC0xNTcsOSArMTU5LDExIEBACiBiYWRfYXJlYV9ub3NlbWFwaG9yZToKIAkvKiBVc2VyIG1vZGUgYWNjZXNzZXMganVzdCBjYXVzZSBhIFNJR1NFR1YgKi8KIAlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7Ci0JCXByX2FsZXJ0KCIlczogdW5oYW5kbGVkIHBhZ2UgZmF1bHQgKCVkKSBhdCAweCUwOGx4LCAiCi0JCQkiY2F1c2UgJWxkXG4iLCBjdXJyZW50LT5jb21tLCBTSUdTRUdWLCBhZGRyZXNzLCBjYXVzZSk7Ci0JCXNob3dfcmVncyhyZWdzKTsKKwkJaWYgKHVuaGFuZGxlZF9zaWduYWwoY3VycmVudCwgU0lHU0VHVikgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKSB7CisJCQlwcl9pbmZvKCIlczogdW5oYW5kbGVkIHBhZ2UgZmF1bHQgKCVkKSBhdCAweCUwOGx4LCAiCisJCQkJImNhdXNlICVsZFxuIiwgY3VycmVudC0+Y29tbSwgU0lHU0VHViwgYWRkcmVzcywgY2F1c2UpOworCQkJc2hvd19yZWdzKHJlZ3MpOworCQl9CiAJCV9leGNlcHRpb24oU0lHU0VHViwgcmVncywgY29kZSwgYWRkcmVzcyk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDM3YmY2YTMuLjY5YzdkZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC03Nyw3ICs3Nyw3IEBACiAgKi8KIAogI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRCAgICAgICAoVEFTS19TSVpFL1BHRElSX1NJWkUpCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUyAgICAgIDAKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTICAgICAgMFVMCiAKIC8qCiAgKiBLZXJuZWxzIG93biB2aXJ0dWFsIG1lbW9yeSBhcmVhLgpAQCAtMTI1LDcgKzEyNSw2IEBACiAjZGVmaW5lIF9QQUdFX0NDICAgICAgIDB4MDAxIC8qIHNvZnR3YXJlOiBwdGUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLwogI2RlZmluZSBfUEFHRV9DSSAgICAgICAweDAwMiAvKiBjYWNoZSBpbmhpYml0ICAgICAgICAgICovCiAjZGVmaW5lIF9QQUdFX1dCQyAgICAgIDB4MDA0IC8qIHdyaXRlIGJhY2sgY2FjaGUgICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfRklMRSAgICAgMHgwMDQgLyogc2V0OiBwYWdlY2FjaGUsIHVuc2V0OiBzd2FwICh3aGVuICFQUkVTRU5UKSAqLwogI2RlZmluZSBfUEFHRV9XT00gICAgICAweDAwOCAvKiB3ZWFrbHkgb3JkZXJlZCBtZW1vcnkgICovCiAKICNkZWZpbmUgX1BBR0VfQSAgICAgICAgMHgwMTAgLyogYWNjZXNzZWQgICAgICAgICAgICAgICAqLwpAQCAtMjQwLDcgKzIzOSw2IEBACiBzdGF0aWMgaW5saW5lIGludCBwdGVfZXhlYyhwdGVfdCBwdGUpICB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9FWEVDOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfQUNDRVNTRUQ7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkgIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9zcGVjaWFsKHB0ZV90IHB0ZSkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtzcGVjaWFsKHB0ZV90IHB0ZSkgeyByZXR1cm4gcHRlOyB9CiAKQEAgLTQzOCwxMiArNDM2LDYgQEAKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCkgeyAoeCkudmFsIH0pCiAKLS8qIEVuY29kZSBhbmQgZGVjb2RlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZyBlbnRyeSAqLwotCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTICAgICAgICAgICAgICAgMjYKLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHgpCSAgICAgICAgICAgICAgICAocHRlX3ZhbCh4KSA+PiA2KQotI2RlZmluZSBwZ29mZl90b19wdGUoeCkJICAgICAgICAgICAgICAgIF9fcHRlKCgoeCkgPDwgNikgfCBfUEFHRV9GSUxFKQotCiAjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKSAgICAgICAgICAgKDEpCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLmg+CmRpZmYgLS1naXQgYS9hcmNoL29wZW5yaXNjL2tlcm5lbC9oZWFkLlMgYi9hcmNoL29wZW5yaXNjL2tlcm5lbC9oZWFkLlMKaW5kZXggMWQzYzljMi4uZjE0NzkzMyAxMDA2NDQKLS0tIGEvYXJjaC9vcGVucmlzYy9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvb3BlbnJpc2Mva2VybmVsL2hlYWQuUwpAQCAtNzU0LDExICs3NTQsNiBAQAogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVsgcGFnZSB0YWJsZSBtYXNrcyBdPT09ICovCiAKLS8qIGJpdCA0IGlzIHVzZWQgaW4gaGFyZHdhcmUgYXMgd3JpdGUgYmFjayBjYWNoZSBiaXQuIHdlIG5ldmVyIHVzZSB0aGlzIGJpdAotICogZXhwbGljaXRseSwgc28gd2UgY2FuIHJldXNlIGl0IGFzIF9QQUdFX0ZJTEUgYml0IGFuZCBtYXNrIGl0IG91dCB3aGVuCi0gKiB3cml0aW5nIGludG8gaGFyZHdhcmUgcHRlJ3MKLSAqLwotCiAjZGVmaW5lIERUTEJfVVBfQ09OVkVSVF9NQVNLICAweDNmYQogI2RlZmluZSBJVExCX1VQX0NPTlZFUlRfTUFTSyAgMHgzYQogCmRpZmYgLS1naXQgYS9hcmNoL29wZW5yaXNjL21tL2ZhdWx0LmMgYi9hcmNoL29wZW5yaXNjL21tL2ZhdWx0LmMKaW5kZXggMDcwM2FjZi4uMjMwYWMyMCAxMDA2NDQKLS0tIGEvYXJjaC9vcGVucmlzYy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvb3BlbnJpc2MvbW0vZmF1bHQuYwpAQCAtMTcxLDYgKzE3MSw4IEBACiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgVk1fRkFVTFRfRVJST1IpKSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkKIAkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJZ290byBiYWRfYXJlYTsKIAkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdCVVMpCiAJCQlnb3RvIGRvX3NpZ2J1czsKIAkJQlVHKCk7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMjJiODlkMS4uOGM5NjZiMiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTM0LDcgKzEzNCw3IEBACiAgKiBwZ2QgZW50cmllcyB1c2VkIHVwIGJ5IHVzZXIva2VybmVsOgogICovCiAKLSNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTBVTAogCiAvKiBOQjogVGhlIHRsYiBtaXNzIGhhbmRsZXJzIG1ha2UgY2VydGFpbiBhc3N1bXB0aW9ucyBhYm91dCB0aGUgb3JkZXIgKi8KIC8qICAgICBvZiB0aGUgZm9sbG93aW5nIGJpdHMsIHNvIGJlIGNhcmVmdWwgKE9uZSBleGFtcGxlLCBiaXRzIDI1LTMxICAqLwpAQCAtMTQ2LDcgKzE0Niw2IEBACiAjZGVmaW5lIF9QQUdFX0dBVEVXQVlfQklUICAyOCAgIC8qICgweDAwOCkgcHJpdmlsZWdlIHByb21vdGlvbiBhbGxvd2VkICovCiAjZGVmaW5lIF9QQUdFX0RNQl9CSVQgICAgICAyNyAgIC8qICgweDAxMCkgRGF0YSBNZW1vcnkgQnJlYWsgZW5hYmxlIChCIGJpdCkgKi8KICNkZWZpbmUgX1BBR0VfRElSVFlfQklUICAgIDI2ICAgLyogKDB4MDIwKSBQYWdlIERpcnR5IChEIGJpdCkgKi8KLSNkZWZpbmUgX1BBR0VfRklMRV9CSVQJX1BBR0VfRElSVFlfQklUCS8qIG92ZXJsb2FkIHRoaXMgYml0ICovCiAjZGVmaW5lIF9QQUdFX1JFRlRSQVBfQklUICAyNSAgIC8qICgweDA0MCkgUGFnZSBSZWYuIFRyYXAgZW5hYmxlIChUIGJpdCkgKi8KICNkZWZpbmUgX1BBR0VfTk9fQ0FDSEVfQklUIDI0ICAgLyogKDB4MDgwKSBVbmNhY2hlZCBQYWdlIChVIGJpdCkgKi8KICNkZWZpbmUgX1BBR0VfQUNDRVNTRURfQklUIDIzICAgLyogKDB4MTAwKSBTb2Z0d2FyZTogUGFnZSBBY2Nlc3NlZCAqLwpAQCAtMTY3LDEzICsxNjYsNiBAQAogLyogUEZOX1BURV9TSElGVCBkZWZpbmVzIHRoZSBzaGlmdCBvZiBhIFBURSB2YWx1ZSB0byBhY2Nlc3MgdGhlIFBGTiBmaWVsZCAqLwogI2RlZmluZSBQRk5fUFRFX1NISUZUCQkxMgogCi0KLS8qIHRoaXMgaXMgaG93IG1hbnkgYml0cyBtYXkgYmUgdXNlZCBieSB0aGUgZmlsZSBmdW5jdGlvbnMgKi8KLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJKEJJVFNfUEVSX0xPTkcgLSBQVEVfU0hJRlQpCi0KLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkgKHB0ZV92YWwocHRlKSA+PiBQVEVfU0hJRlQpCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpICgocHRlX3QpIHsgKChvZmYpIDw8IFBURV9TSElGVCkgfCBfUEFHRV9GSUxFIH0pCi0KICNkZWZpbmUgX1BBR0VfUkVBRCAgICAgKDEgPDwgeGxhdGVfcGFiaXQoX1BBR0VfUkVBRF9CSVQpKQogI2RlZmluZSBfUEFHRV9XUklURSAgICAoMSA8PCB4bGF0ZV9wYWJpdChfUEFHRV9XUklURV9CSVQpKQogI2RlZmluZSBfUEFHRV9SVyAgICAgICAoX1BBR0VfUkVBRCB8IF9QQUdFX1dSSVRFKQpAQCAtMTg2LDcgKzE3OCw2IEBACiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VEICgxIDw8IHhsYXRlX3BhYml0KF9QQUdFX0FDQ0VTU0VEX0JJVCkpCiAjZGVmaW5lIF9QQUdFX1BSRVNFTlQgICgxIDw8IHhsYXRlX3BhYml0KF9QQUdFX1BSRVNFTlRfQklUKSkKICNkZWZpbmUgX1BBR0VfVVNFUiAgICAgKDEgPDwgeGxhdGVfcGFiaXQoX1BBR0VfVVNFUl9CSVQpKQotI2RlZmluZSBfUEFHRV9GSUxFICAgICAoMSA8PCB4bGF0ZV9wYWJpdChfUEFHRV9GSUxFX0JJVCkpCiAKICNkZWZpbmUgX1BBR0VfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFEIHwgX1BBR0VfV1JJVEUgfCAgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCkKICNkZWZpbmUgX1BBR0VfQ0hHX01BU0sJKFBBR0VfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCkBAIC0zNDQsNyArMzM1LDYgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfV1JJVEU7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9zcGVjaWFsKHB0ZV90IHB0ZSkJeyByZXR1cm4gMDsgfQogCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkJeyBwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0RJUlRZOyByZXR1cm4gcHRlOyB9CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9tbS9mYXVsdC5jIGIvYXJjaC9wYXJpc2MvbW0vZmF1bHQuYwppbmRleCAzY2E5YzExLi5lNTEyMGU2IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvcGFyaXNjL21tL2ZhdWx0LmMKQEAgLTI1Niw2ICsyNTYsOCBAQAogCQkgKi8KIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gYmFkX2FyZWE7CiAJCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCBhMmExNjhlLi4yMmIwOTQwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMjU2LDYgKzI1Niw3IEBACiAJZGVmYXVsdCBuCiAKIGNvbmZpZyBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQworCWRlcGVuZHMgb24gUFBDMzIgfHwgUFBDX1NURF9NTVVfNjQKIAlkZWZfYm9vbCB5CiAKIGNvbmZpZyBBUkNIX1NVUFBPUlRTX1VQUk9CRVMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9mc2wvcHEzLWV0c2VjMi0wLmR0c2kgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZnNsL3BxMy1ldHNlYzItMC5kdHNpCmluZGV4IDEzODJmZWMuLjdmY2IxYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9mc2wvcHEzLWV0c2VjMi0wLmR0c2kKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ZzbC9wcTMtZXRzZWMyLTAuZHRzaQpAQCAtNTAsNiArNTAsNyBAQAogCWZzbCxudW1fdHhfcXVldWVzID0gPDB4OD47CiAJZnNsLG1hZ2ljLXBhY2tldDsKIAlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwlyYW5nZXM7CiAKIAlxdWV1ZS1ncm91cEBiMDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ZzbC9wcTMtZXRzZWMyLTEuZHRzaSBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9mc2wvcHEzLWV0c2VjMi0xLmR0c2kKaW5kZXggMjIxY2QyZWEuLjlmMjU0MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9mc2wvcHEzLWV0c2VjMi0xLmR0c2kKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ZzbC9wcTMtZXRzZWMyLTEuZHRzaQpAQCAtNTAsNiArNTAsNyBAQAogCWZzbCxudW1fdHhfcXVldWVzID0gPDB4OD47CiAJZnNsLG1hZ2ljLXBhY2tldDsKIAlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwlyYW5nZXM7CiAKIAlxdWV1ZS1ncm91cEBiMTAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ZzbC9wcTMtZXRzZWMyLTIuZHRzaSBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9mc2wvcHEzLWV0c2VjMi0yLmR0c2kKaW5kZXggNjE0NTZjMy4uY2Q3YzMxOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ZzbC9wcTMtZXRzZWMyLTIuZHRzaQorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZnNsL3BxMy1ldHNlYzItMi5kdHNpCkBAIC00OSw2ICs0OSw3IEBACiAJZnNsLG51bV90eF9xdWV1ZXMgPSA8MHg4PjsKIAlmc2wsbWFnaWMtcGFja2V0OwogCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCXJhbmdlczsKIAogCXF1ZXVlLWdyb3VwQGIyMDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZnNsL3BxMy1ncGlvLTAuZHRzaSBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9mc2wvcHEzLWdwaW8tMC5kdHNpCmluZGV4IDcyYTNlZjUuLmExYjQ4NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9mc2wvcHEzLWdwaW8tMC5kdHNpCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9mc2wvcHEzLWdwaW8tMC5kdHNpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIFBRMyBHUElPIGRldmljZSB0cmVlIHN0dWIgWyBjb250cm9sbGVyIEAgb2Zmc2V0IDB4ZjAwMCBdCisgKiBQUTMgR1BJTyBkZXZpY2UgdHJlZSBzdHViIFsgY29udHJvbGxlciBAIG9mZnNldCAweGZjMDAgXQogICoKICAqIENvcHlyaWdodCAyMDExIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KICAqCkBAIC0zMiwxMCArMzIsMTAgQEAKICAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLWdwaW8tY29udHJvbGxlckBmMDAwIHsKK2dwaW8tY29udHJvbGxlckBmYzAwIHsKIAkjZ3Bpby1jZWxscyA9IDwyPjsKIAljb21wYXRpYmxlID0gImZzbCxwcTMtZ3BpbyI7Ci0JcmVnID0gPDB4ZjAwMCAweDEwMD47CisJcmVnID0gPDB4ZmMwMCAweDEwMD47CiAJaW50ZXJydXB0cyA9IDw0NyAweDIgMCAwPjsKIAlncGlvLWNvbnRyb2xsZXI7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ZzbC9xb3JpcS1ibWFuMS1wb3J0YWxzLmR0c2kgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZnNsL3FvcmlxLWJtYW4xLXBvcnRhbHMuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDIyNDMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ZzbC9xb3JpcS1ibWFuMS1wb3J0YWxzLmR0c2kKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIFFvcklRIEJNYW4gUG9ydGFsIGRldmljZSB0cmVlIHN0dWIgZm9yIDEwIHBvcnRhbHMKKyAqCisgKiBDb3B5cmlnaHQgMjAxMSAtIDIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICoJIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKgkgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICoJIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIG5vciB0aGUKKyAqCSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICoJIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqCisgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGF0IExpY2Vuc2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworJmJwb3J0YWxzIHsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCisJYm1hbi1wb3J0YWxAMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLGJtYW4tcG9ydGFsIjsKKwkJcmVnID0gPDB4MCAweDQwMDA+LCA8MHgxMDAwMDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxMDUgMiAwIDA+OworCX07CisJYm1hbi1wb3J0YWxANDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLGJtYW4tcG9ydGFsIjsKKwkJcmVnID0gPDB4NDAwMCAweDQwMDA+LCA8MHgxMDEwMDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxMDcgMiAwIDA+OworCX07CisJYm1hbi1wb3J0YWxAODAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLGJtYW4tcG9ydGFsIjsKKwkJcmVnID0gPDB4ODAwMCAweDQwMDA+LCA8MHgxMDIwMDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxMDkgMiAwIDA+OworCX07CisJYm1hbi1wb3J0YWxAYzAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLGJtYW4tcG9ydGFsIjsKKwkJcmVnID0gPDB4YzAwMCAweDQwMDA+LCA8MHgxMDMwMDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxMTEgMiAwIDA+OworCX07CisJYm1hbi1wb3J0YWxAMTAwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxibWFuLXBvcnRhbCI7CisJCXJlZyA9IDwweDEwMDAwIDB4NDAwMD4sIDwweDEwNDAwMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDExMyAyIDAgMD47CisJfTsKKwlibWFuLXBvcnRhbEAxNDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLGJtYW4tcG9ydGFsIjsKKwkJcmVnID0gPDB4MTQwMDAgMHg0MDAwPiwgPDB4MTA1MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTE1IDIgMCAwPjsKKwl9OworCWJtYW4tcG9ydGFsQDE4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsYm1hbi1wb3J0YWwiOworCQlyZWcgPSA8MHgxODAwMCAweDQwMDA+LCA8MHgxMDYwMDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxMTcgMiAwIDA+OworCX07CisJYm1hbi1wb3J0YWxAMWMwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxibWFuLXBvcnRhbCI7CisJCXJlZyA9IDwweDFjMDAwIDB4NDAwMD4sIDwweDEwNzAwMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDExOSAyIDAgMD47CisJfTsKKwlibWFuLXBvcnRhbEAyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLGJtYW4tcG9ydGFsIjsKKwkJcmVnID0gPDB4MjAwMDAgMHg0MDAwPiwgPDB4MTA4MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTIxIDIgMCAwPjsKKwl9OworCWJtYW4tcG9ydGFsQDI0MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsYm1hbi1wb3J0YWwiOworCQlyZWcgPSA8MHgyNDAwMCAweDQwMDA+LCA8MHgxMDkwMDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxMjMgMiAwIDA+OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ZzbC9xb3JpcS1ibWFuMS5kdHNpIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ZzbC9xb3JpcS1ibWFuMS5kdHNpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiNWUzNTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZnNsL3FvcmlxLWJtYW4xLmR0c2kKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIFFvcklRIEJNYW4gZGV2aWNlIHRyZWUgc3R1YiBbIGNvbnRyb2xsZXIgQCBvZmZzZXQgMHgzMWEwMDAgXQorICoKKyAqIENvcHlyaWdodCAyMDExIC0gMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKgkgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqCSBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKgkgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3Igbm9yIHRoZQorICoJIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKgkgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitibWFuOiBibWFuQDMxYTAwMCB7CisJY29tcGF0aWJsZSA9ICJmc2wsYm1hbiI7CisJcmVnID0gPDB4MzFhMDAwIDB4MTAwMD47CisJaW50ZXJydXB0cyA9IDwxNiAyIDEgMj47CisJZnNsLGJtYW4tcG9ydGFscyA9IDwmYnBvcnRhbHM+OworCW1lbW9yeS1yZWdpb24gPSA8JmJtYW5fZmJwcj47Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ZzbC9xb3JpcS1xbWFuMS1wb3J0YWxzLmR0c2kgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZnNsL3FvcmlxLXFtYW4xLXBvcnRhbHMuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWQ1MWFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ZzbC9xb3JpcS1xbWFuMS1wb3J0YWxzLmR0c2kKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBRb3JJUSBRTWFuIFBvcnRhbCBkZXZpY2UgdHJlZSBzdHViIGZvciAxMCBwb3J0YWxzICYgMTUgcG9vbCBjaGFubmVscworICoKKyAqIENvcHlyaWdodCAyMDExIC0gMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKgkgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqCSBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKgkgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3Igbm9yIHRoZQorICoJIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKgkgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCismcXBvcnRhbHMgeworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisKKwlxcG9ydGFsMDogcW1hbi1wb3J0YWxAMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHFtYW4tcG9ydGFsIjsKKwkJcmVnID0gPDB4MCAweDQwMDA+LCA8MHgxMDAwMDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxMDQgMiAwIDA+OworCQlmc2wscW1hbi1jaGFubmVsLWlkID0gPDB4MD47CisJfTsKKwlxcG9ydGFsMTogcW1hbi1wb3J0YWxANDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHFtYW4tcG9ydGFsIjsKKwkJcmVnID0gPDB4NDAwMCAweDQwMDA+LCA8MHgxMDEwMDAgMHgxMDAwPjsKKwkJaW50ZXJydXB0cyA9IDwxMDYgMiAwIDA+OworCQlmc2wscW1hbi1jaGFubmVsLWlkID0gPDE+OworCX07CisJcXBvcnRhbDI6IHFtYW4tcG9ydGFsQDgwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxxbWFuLXBvcnRhbCI7CisJCXJlZyA9IDwweDgwMDAgMHg0MDAwPiwgPDB4MTAyMDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTA4IDIgMCAwPjsKKwkJZnNsLHFtYW4tY2hhbm5lbC1pZCA9IDwyPjsKKwl9OworCXFwb3J0YWwzOiBxbWFuLXBvcnRhbEBjMDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wscW1hbi1wb3J0YWwiOworCQlyZWcgPSA8MHhjMDAwIDB4NDAwMD4sIDwweDEwMzAwMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDExMCAyIDAgMD47CisJCWZzbCxxbWFuLWNoYW5uZWwtaWQgPSA8Mz47CisJfTsKKwlxcG9ydGFsNDogcW1hbi1wb3J0YWxAMTAwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxxbWFuLXBvcnRhbCI7CisJCXJlZyA9IDwweDEwMDAwIDB4NDAwMD4sIDwweDEwNDAwMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDExMiAyIDAgMD47CisJCWZzbCxxbWFuLWNoYW5uZWwtaWQgPSA8ND47CisJfTsKKwlxcG9ydGFsNTogcW1hbi1wb3J0YWxAMTQwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxxbWFuLXBvcnRhbCI7CisJCXJlZyA9IDwweDE0MDAwIDB4NDAwMD4sIDwweDEwNTAwMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDExNCAyIDAgMD47CisJCWZzbCxxbWFuLWNoYW5uZWwtaWQgPSA8NT47CisJfTsKKwlxcG9ydGFsNjogcW1hbi1wb3J0YWxAMTgwMDAgeworCQljb21wYXRpYmxlID0gImZzbCxxbWFuLXBvcnRhbCI7CisJCXJlZyA9IDwweDE4MDAwIDB4NDAwMD4sIDwweDEwNjAwMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDExNiAyIDAgMD47CisJCWZzbCxxbWFuLWNoYW5uZWwtaWQgPSA8Nj47CisJfTsKKworCXFwb3J0YWw3OiBxbWFuLXBvcnRhbEAxYzAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHFtYW4tcG9ydGFsIjsKKwkJcmVnID0gPDB4MWMwMDAgMHg0MDAwPiwgPDB4MTA3MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTE4IDIgMCAwPjsKKwkJZnNsLHFtYW4tY2hhbm5lbC1pZCA9IDw3PjsKKwl9OworCXFwb3J0YWw4OiBxbWFuLXBvcnRhbEAyMDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHFtYW4tcG9ydGFsIjsKKwkJcmVnID0gPDB4MjAwMDAgMHg0MDAwPiwgPDB4MTA4MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTIwIDIgMCAwPjsKKwkJZnNsLHFtYW4tY2hhbm5lbC1pZCA9IDw4PjsKKwl9OworCXFwb3J0YWw5OiBxbWFuLXBvcnRhbEAyNDAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLHFtYW4tcG9ydGFsIjsKKwkJcmVnID0gPDB4MjQwMDAgMHg0MDAwPiwgPDB4MTA5MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTIyIDIgMCAwPjsKKwkJZnNsLHFtYW4tY2hhbm5lbC1pZCA9IDw5PjsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9mc2wvcW9yaXEtcW1hbjEuZHRzaSBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9mc2wvcW9yaXEtcW1hbjEuZHRzaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjk1Nzc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ZzbC9xb3JpcS1xbWFuMS5kdHNpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBRb3JJUSBRTWFuIGRldmljZSB0cmVlIHN0dWIgWyBjb250cm9sbGVyIEAgb2Zmc2V0IDB4MzE4MDAwIF0KKyAqCisgKiBDb3B5cmlnaHQgMjAxMSAtIDIwMTQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICoJIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKgkgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICoJIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIG5vciB0aGUKKyAqCSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICoJIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqCisgKiBBTFRFUk5BVElWRUxZLCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGF0IExpY2Vuc2Ugb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworcW1hbjogcW1hbkAzMTgwMDAgeworCWNvbXBhdGlibGUgPSAiZnNsLHFtYW4iOworCXJlZyA9IDwweDMxODAwMCAweDEwMDA+OworCWludGVycnVwdHMgPSA8MTYgMiAxIDM+OworCWZzbCxxbWFuLXBvcnRhbHMgPSA8JnFwb3J0YWxzPjsKKwltZW1vcnktcmVnaW9uID0gPCZxbWFuX2ZxZCAmcW1hbl9wZmRyPjsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZnNsL3FvcmlxLXFtYW4zLmR0c2kgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZnNsL3FvcmlxLXFtYW4zLmR0c2kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM3OWFiZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9mc2wvcW9yaXEtcW1hbjMuZHRzaQpAQCAtMCwwICsxLDQxIEBACisvKgorICogUW9ySVEgUU1hbiByZXYzIGRldmljZSB0cmVlIHN0dWIgWyBjb250cm9sbGVyIEAgb2Zmc2V0IDB4MzE4MDAwIF0KKyAqCisgKiBDb3B5cmlnaHQgMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKgkgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqCSBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKgkgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgRnJlZXNjYWxlIFNlbWljb25kdWN0b3Igbm9yIHRoZQorICoJIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKgkgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitxbWFuOiBxbWFuQDMxODAwMCB7CisJY29tcGF0aWJsZSA9ICJmc2wscW1hbiI7CisJcmVnID0gPDB4MzE4MDAwIDB4MjAwMD47CisJaW50ZXJydXB0cyA9IDwxNiAyIDEgMz47CisJZnNsLHFtYW4tcG9ydGFscyA9IDwmcXBvcnRhbHM+OworCW1lbW9yeS1yZWdpb24gPSA8JnFtYW5fZnFkICZxbWFuX3BmZHI+OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tdm1lMjUwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXZtZTI1MDAuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NzE0Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXZtZTI1MDAuZHRzCkBAIC0wLDAgKzEsMjgwIEBACisvKgorICogRGV2aWNlIHRyZWUgc291cmNlIGZvciB0aGUgRW1lcnNvbi9BcnRlc3luIE1WTUUyNTAwCisgKgorICogQ29weXJpZ2h0IDIwMTQgRWxldHRyYS1TaW5jcm90cm9uZSBUcmllc3RlIFMuQy5wLkEuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBCYXNlZCBvbjogUDIwMjAgRFMgRGV2aWNlIFRyZWUgU291cmNlCisgKiBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKi8KKworL2luY2x1ZGUvICJmc2wvcDIwMjBzaS1wcmUuZHRzaSIKKworLyB7CisJbW9kZWwgPSAiTVZNRTI1MDAiOworCWNvbXBhdGlibGUgPSAiYXJ0ZXN5bixNVk1FMjUwMCI7CisKKwlhbGlhc2VzIHsKKwkJc2VyaWFsMiA9ICZzZXJpYWwyOworCQlzZXJpYWwzID0gJnNlcmlhbDM7CisJCXNlcmlhbDQgPSAmc2VyaWFsNDsKKwkJc2VyaWFsNSA9ICZzZXJpYWw1OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCX07CisKKwlzb2M6IHNvY0BmZmUwMDAwMCB7CisJCXJhbmdlcyA9IDwweDAgMCAweGZmZTAwMDAwIDB4MTAwMDAwPjsKKworCQlpMmNAMzAwMCB7CisJCQlod21vbkA0YyB7CisJCQkJY29tcGF0aWJsZSA9ICJhZGksYWR0NzQ2MSI7CisJCQkJcmVnID0gPDB4NGM+OworCQkJfTsKKworCQkJcnRjQDY4IHsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzciOworCQkJCXJlZyA9IDwweDY4PjsKKwkJCQlpbnRlcnJ1cHRzID0gPDggMSAwIDA+OworCQkJfTsKKworCQkJZWVwcm9tQDU0IHsKKwkJCQljb21wYXRpYmxlID0gImF0bWVsLDI0YzY0IjsKKwkJCQlyZWcgPSA8MHg1ND47CisJCQl9OworCisJCQllZXByb21ANTIgeworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsMjRjNTEyIjsKKwkJCQlyZWcgPSA8MHg1Mj47CisJCQl9OworCisJCQllZXByb21ANTMgeworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsMjRjNTEyIjsKKwkJCQlyZWcgPSA8MHg1Mz47CisJCQl9OworCisJCQllZXByb21ANTAgeworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsMjRjMDIiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKKwkJfTsKKworCQlzcGkwOiBzcGlANzAwMCB7CisJCQlmc2wsZXNwaS1udW0tY2hpcHNlbGVjdHMgPSA8Mj47CisKKwkJCWZsYXNoQDAgeworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQyNWRmNjQxIjsKKwkJCQlyZWcgPSA8MD47CisJCQkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MTAwMDAwMDA+OworCQkJfTsKKwkJCWZsYXNoQDEgeworCQkJCWNvbXBhdGlibGUgPSAiYXRtZWwsYXQyNWRmNjQxIjsKKwkJCQlyZWcgPSA8MT47CisJCQkJc3BpLW1heC1mcmVxdWVuY3kgPSA8MTAwMDAwMDA+OworCQkJfTsKKwkJfTsKKworCQl1c2JAMjIwMDAgeworCQkJZHJfbW9kZSA9ICJob3N0IjsKKwkJCXBoeV90eXBlID0gInVscGkiOworCQl9OworCisJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisJCX07CisKKwkJbWRpb0AyNDUyMCB7CisJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJY29tcGF0aWJsZSA9ICJicmNtLGJjbTU0NjE2UyI7CisJCQkJaW50ZXJydXB0cyA9IDw2IDEgMCAwPjsKKwkJCQlyZWcgPSA8MHgxPjsKKwkJCX07CisKKwkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQljb21wYXRpYmxlID0gImJyY20sYmNtNTQ2MTZTIjsKKwkJCQlpbnRlcnJ1cHRzID0gPDYgMSAwIDA+OworCQkJCXJlZyA9IDwweDI+OworCQkJfTsKKworCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCWNvbXBhdGlibGUgPSAiYnJjbSxiY201NDYxNlMiOworCQkJCWludGVycnVwdHMgPSA8NSAxIDAgMD47CisJCQkJcmVnID0gPDB4Mz47CisJCQl9OworCisJCQlwaHk3OiBldGhlcm5ldC1waHlANyB7CisJCQkJY29tcGF0aWJsZSA9ICJicmNtLGJjbTU0NjE2UyI7CisJCQkJaW50ZXJydXB0cyA9IDw3IDEgMCAwPjsKKwkJCQlyZWcgPSA8MHg3PjsKKwkJCX07CisKKwkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCXJlZyA9IDwweDExPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCX07CisJCX07CisKKwkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5Nz47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKwkJfTsKKworCQltZGlvQDI1NTIwIHsKKwkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCXJlZyA9IDwweDExPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCX07CisJCX07CisKKwkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTI+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKwkJfTsKKworCQltZGlvQDI2NTIwIHsKKwkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCXJlZyA9IDwweDExPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCX07CisJCX07CisJfTsKKworCWxiYzogbG9jYWxidXNAZmZlMDUwMDAgeworCQlyZWcgPSA8MCAweGZmZTA1MDAwIDAgMHgxMDAwPjsKKworCQlyYW5nZXMgPSA8MHgwIDB4MCAweDAgMHhmZmYwMDAwMCAweDAwMDgwMDAwCisJCQkgIDB4MSAweDAgMHgwIDB4ZmZjNDAwMDAgMHgwMDAxMDAwMAorCQkJICAweDIgMHgwIDB4MCAweGZmYzUwMDAwIDB4MDAwMTAwMDAKKwkJCSAgMHgzIDB4MCAweDAgMHhmZmM2MDAwMCAweDAwMDEwMDAwCisJCQkgIDB4NCAweDAgMHgwIDB4ZmZjNzAwMDAgMHgwMDAxMDAwMAorCQkJICAweDYgMHgwIDB4MCAweGZmYzgwMDAwIDB4MDAwMTAwMDAKKwkJCSAgMHg1IDB4MCAweDAgMHhmZmRmMDAwMCAweDAwMDA4MDAwPjsKKworCQlzZXJpYWwyOiBzZXJpYWxAMSwwIHsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4MSAweDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDE4NDMyMDA+OworCQkJaW50ZXJydXB0cyA9IDwxMSAyIDAgMD47CisJCX07CisKKwkJc2VyaWFsMzogc2VyaWFsQDIsMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDIgMHgwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxODQzMjAwPjsKKwkJCWludGVycnVwdHMgPSA8MSAyIDAgMD47CisJCX07CisKKwkJc2VyaWFsNDogc2VyaWFsQDMsMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDMgMHgwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxODQzMjAwPjsKKwkJCWludGVycnVwdHMgPSA8MiAyIDAgMD47CisJCX07CisKKwkJc2VyaWFsNTogc2VyaWFsQDQsMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQgMHgwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxODQzMjAwPjsKKwkJCWludGVycnVwdHMgPSA8MyAyIDAgMD47CisJCX07CisKKwkJbXJhbUAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJldmVyc3BpbixtcmFtIiwgIm10ZC1yYW0iOworCQkJcmVnID0gPDB4MCAweDAgMHg4MDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQl9OworCisJCWJvYXJkLWNvbnRyb2xANSwwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJ0ZXN5bixtdm1lMjUwMC1mcGdhIjsKKwkJCXJlZyA9IDwweDUgMHgwIDB4MDEwMDA+OworCQl9OworCisJCWNwbGRANiwwIHsKKwkJCWNvbXBhdGlibGUgPSAiYXJ0ZXN5bixtdm1lMjUwMC1jcGxkIjsKKwkJCXJlZyA9IDwweDYgMHgwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0cyA9IDw5IDEgMCAwPjsKKwkJfTsKKwl9OworCisJcGNpMDogcGNpZUBmZmUwODAwMCB7CisJCXJlZyA9IDwwIDB4ZmZlMDgwMDAgMCAweDEwMDA+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMCAweGZmYzAwMDAwIDB4MCAweDEwMDAwPjsKKwkJcGNpZUAwIHsKKwkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHg4MDAwMDAwMAorCQkJCSAgMHgwIDB4MjAwMDAwMDAKKworCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDAgMHgxMDAwMD47CisJCX07CisJfTsKKworCXBjaTE6IHBjaWVAZmZlMDkwMDAgeworCQlyZWcgPSA8MCAweGZmZTA5MDAwIDAgMHgxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhhMDAwMDAwMCAwIDB4YTAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMxMDAwMCAweDAgMHgxMDAwMD47CisJCXBjaWVAMCB7CisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGEwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4YTAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4MTAwMDA+OworCQl9OworCisJfTsKKworCXBjaTI6IHBjaWVAZmZlMGEwMDAgeworCQlyZWcgPSA8MCAweGZmZTBhMDAwIDAgMHgxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMCAwIDB4YzAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDAgMHhmZmMyMDAwMCAweDAgMHgxMDAwMD47CisJCXBjaWVAMCB7CisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4MTAwMDA+OworCQl9OworCX07Cit9OworCisvaW5jbHVkZS8gImZzbC9wMjAyMHNpLXBvc3QuZHRzaSIKKworLyB7CisJc29jQGZmZTAwMDAwIHsKKwkJc2VyaWFsQDQ2MDAgeworCQkJc3RhdHVzID0gImRpc2FibGVkIjsKKwkJfTsKKworCQlpMmNAMzEwMCB7CisJCQlzdGF0dXMgPSAiZGlzYWJsZWQiOworCQl9OworCisJCXNkaGNAMmUwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wscDIwMjAtZXNkaGMiLCAiZnNsLGVzZGhjIjsKKwkJCW5vbi1yZW1vdmFibGU7CisJCX07CisKKwl9OworCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3Q0MjQwZW11LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90NDI0MGVtdS5kdHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlY2FmMzUuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3Q0MjQwZW11LmR0cworKysgL2Rldi9udWxsCkBAIC0xLDI4MSArMCwwIEBACi0vKgotICogVDQyNDAgZW11bGF0b3IgRGV2aWNlIFRyZWUgU291cmNlCi0gKgotICogQ29weXJpZ2h0IDIwMTMgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIG5vciB0aGUKLSAqICAgICAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCi0gKiAgICAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKgotICogQUxURVJOQVRJVkVMWSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhhdCBMaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55Ci0gKiBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vZHRzLXYxLzsKLQotL2luY2x1ZGUvICJmc2wvZTY1MDBfcG93ZXJfaXNhLmR0c2kiCi0vIHsKLQljb21wYXRpYmxlID0gImZzbCxUNDI0MCI7Ci0JI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JI3NpemUtY2VsbHMgPSA8Mj47Ci0JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0KLQlhbGlhc2VzIHsKLQkJY2NzciA9ICZzb2M7Ci0KLQkJc2VyaWFsMCA9ICZzZXJpYWwwOwotCQlzZXJpYWwxID0gJnNlcmlhbDE7Ci0JCXNlcmlhbDIgPSAmc2VyaWFsMjsKLQkJc2VyaWFsMyA9ICZzZXJpYWwzOwotCQlkbWEwID0gJmRtYTA7Ci0JCWRtYTEgPSAmZG1hMTsKLQl9OwotCi0JY3B1cyB7Ci0JCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQotCQljcHUwOiBQb3dlclBDLGU2NTAwQDAgewotCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwwIDE+OwotCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDJfMT47Ci0JCQlmc2wscG9ydGlkLW1hcHBpbmcgPSA8MHg4MDAwMDAwMD47Ci0JCX07Ci0JCWNwdTE6IFBvd2VyUEMsZTY1MDBAMiB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDIgMz47Ci0JCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMl8xPjsKLQkJCWZzbCxwb3J0aWQtbWFwcGluZyA9IDwweDgwMDAwMDAwPjsKLQkJfTsKLQkJY3B1MjogUG93ZXJQQyxlNjUwMEA0IHsKLQkJCWRldmljZV90eXBlID0gImNwdSI7Ci0JCQlyZWcgPSA8NCA1PjsKLQkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyXzE+OwotCQkJZnNsLHBvcnRpZC1tYXBwaW5nID0gPDB4ODAwMDAwMDA+OwotCQl9OwotCQljcHUzOiBQb3dlclBDLGU2NTAwQDYgewotCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDw2IDc+OwotCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDJfMT47Ci0JCQlmc2wscG9ydGlkLW1hcHBpbmcgPSA8MHg4MDAwMDAwMD47Ci0JCX07Ci0KLQkJY3B1NDogUG93ZXJQQyxlNjUwMEA4IHsKLQkJCWRldmljZV90eXBlID0gImNwdSI7Ci0JCQlyZWcgPSA8OCA5PjsKLQkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyXzI+OwotCQkJZnNsLHBvcnRpZC1tYXBwaW5nID0gPDB4NDAwMDAwMDA+OwotCQl9OwotCQljcHU1OiBQb3dlclBDLGU2NTAwQDEwIHsKLQkJCWRldmljZV90eXBlID0gImNwdSI7Ci0JCQlyZWcgPSA8MTAgMTE+OwotCQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmTDJfMj47Ci0JCQlmc2wscG9ydGlkLW1hcHBpbmcgPSA8MHg0MDAwMDAwMD47Ci0JCX07Ci0JCWNwdTY6IFBvd2VyUEMsZTY1MDBAMTIgewotCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwxMiAxMz47Ci0JCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMl8yPjsKLQkJCWZzbCxwb3J0aWQtbWFwcGluZyA9IDwweDQwMDAwMDAwPjsKLQkJfTsKLQkJY3B1NzogUG93ZXJQQyxlNjUwMEAxNCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDE0IDE1PjsKLQkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyXzI+OwotCQkJZnNsLHBvcnRpZC1tYXBwaW5nID0gPDB4NDAwMDAwMDA+OwotCQl9OwotCi0JCWNwdTg6IFBvd2VyUEMsZTY1MDBAMTYgewotCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKLQkJCXJlZyA9IDwxNiAxNz47Ci0JCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMl8zPjsKLQkJCWZzbCxwb3J0aWQtbWFwcGluZyA9IDwweDIwMDAwMDAwPjsKLQkJfTsKLQkJY3B1OTogUG93ZXJQQyxlNjUwMEAxOCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDE4IDE5PjsKLQkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyXzM+OwotCQkJZnNsLHBvcnRpZC1tYXBwaW5nID0gPDB4MjAwMDAwMDA+OwotCQl9OwotCQljcHUxMDogUG93ZXJQQyxlNjUwMEAyMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDIwIDIxPjsKLQkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyXzM+OwotCQkJZnNsLHBvcnRpZC1tYXBwaW5nID0gPDB4MjAwMDAwMDA+OwotCQl9OwotCQljcHUxMTogUG93ZXJQQyxlNjUwMEAyMiB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJjcHUiOwotCQkJcmVnID0gPDIyIDIzPjsKLQkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyXzM+OwotCQkJZnNsLHBvcnRpZC1tYXBwaW5nID0gPDB4MjAwMDAwMDA+OwotCQl9OwotCX07Ci19OwotCi0vIHsKLQltb2RlbCA9ICJmc2wsVDQyNDBRRFMiOwotCWNvbXBhdGlibGUgPSAiZnNsLFQ0MjQwRU1VIiwgImZzbCxUNDI0MFFEUyI7Ci0JI2FkZHJlc3MtY2VsbHMgPSA8Mj47Ci0JI3NpemUtY2VsbHMgPSA8Mj47Ci0JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0KLQlpZmM6IGxvY2FsYnVzQGZmZTEyNDAwMCB7Ci0JCXJlZyA9IDwweGYgMHhmZTEyNDAwMCAwIDB4MjAwMD47Ci0JCXJhbmdlcyA9IDwwIDAgMHhmIDB4ZTgwMDAwMDAgMHgwODAwMDAwMAotCQkJICAyIDAgMHhmIDB4ZmY4MDAwMDAgMHgwMDAxMDAwMAotCQkJICAzIDAgMHhmIDB4ZmZkZjAwMDAgMHgwMDAwODAwMD47Ci0KLQkJbm9yQDAsMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDE+OwotCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOwotCQkJcmVnID0gPDB4MCAweDAgMHg4MDAwMDAwPjsKLQotCQkJYmFuay13aWR0aCA9IDwyPjsKLQkJCWRldmljZS13aWR0aCA9IDwxPjsKLQkJfTsKLQotCX07Ci0KLQltZW1vcnkgewotCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOwotCX07Ci0KLQlzb2M6IHNvY0BmZmUwMDAwMDAgewotCQlyYW5nZXMgPSA8MHgwMDAwMDAwMCAweGYgMHhmZTAwMDAwMCAweDEwMDAwMDA+OwotCQlyZWcgPSA8MHhmIDB4ZmUwMDAwMDAgMCAweDAwMDAxMDAwPjsKLQotCX07Ci19OwotCi0maWZjIHsKLQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKLQkjc2l6ZS1jZWxscyA9IDwxPjsKLQljb21wYXRpYmxlID0gImZzbCxpZmMiLCAic2ltcGxlLWJ1cyI7Ci0JaW50ZXJydXB0cyA9IDwyNSAyIDAgMD47Ci19OwotCi0mc29jIHsKLQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkjc2l6ZS1jZWxscyA9IDwxPjsKLQlkZXZpY2VfdHlwZSA9ICJzb2MiOwotCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7Ci0KLQlzb2Mtc3JhbS1lcnJvciB7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLHNvYy1zcmFtLWVycm9yIjsKLQkJaW50ZXJydXB0cyA9IDwxNiAyIDEgMjk+OwotCX07Ci0KLQljb3JlbmV0LWxhd0AwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsY29yZW5ldC1sYXciOwotCQlyZWcgPSA8MHgwIDB4MTAwMD47Ci0JCWZzbCxudW0tbGF3cyA9IDwzMj47Ci0JfTsKLQotCWRkcjE6IG1lbW9yeS1jb250cm9sbGVyQDgwMDAgewotCQljb21wYXRpYmxlID0gImZzbCxxb3JpcS1tZW1vcnktY29udHJvbGxlci12NC43IiwKLQkJCQkiZnNsLHFvcmlxLW1lbW9yeS1jb250cm9sbGVyIjsKLQkJcmVnID0gPDB4ODAwMCAweDEwMDA+OwotCQlpbnRlcnJ1cHRzID0gPDE2IDIgMSAyMz47Ci0JfTsKLQotCWRkcjI6IG1lbW9yeS1jb250cm9sbGVyQDkwMDAgewotCQljb21wYXRpYmxlID0gImZzbCxxb3JpcS1tZW1vcnktY29udHJvbGxlci12NC43IiwKLQkJCQkiZnNsLHFvcmlxLW1lbW9yeS1jb250cm9sbGVyIjsKLQkJcmVnID0gPDB4OTAwMCAweDEwMDA+OwotCQlpbnRlcnJ1cHRzID0gPDE2IDIgMSAyMj47Ci0JfTsKLQotCWRkcjM6IG1lbW9yeS1jb250cm9sbGVyQGEwMDAgewotCQljb21wYXRpYmxlID0gImZzbCxxb3JpcS1tZW1vcnktY29udHJvbGxlci12NC43IiwKLQkJCQkiZnNsLHFvcmlxLW1lbW9yeS1jb250cm9sbGVyIjsKLQkJcmVnID0gPDB4YTAwMCAweDEwMDA+OwotCQlpbnRlcnJ1cHRzID0gPDE2IDIgMSAyMT47Ci0JfTsKLQotCWNwYzogbDMtY2FjaGUtY29udHJvbGxlckAxMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLHQ0MjQwLWwzLWNhY2hlLWNvbnRyb2xsZXIiLCAiY2FjaGUiOwotCQlyZWcgPSA8MHgxMDAwMCAweDEwMDAKLQkJICAgICAgIDB4MTEwMDAgMHgxMDAwCi0JCSAgICAgICAweDEyMDAwIDB4MTAwMD47Ci0JCWludGVycnVwdHMgPSA8MTYgMiAxIDI3Ci0JCQkgICAgICAxNiAyIDEgMjYKLQkJCSAgICAgIDE2IDIgMSAyNT47Ci0JfTsKLQotCWNvcmVuZXQtY2ZAMTgwMDAgewotCQljb21wYXRpYmxlID0gImZzbCxjb3JlbmV0Mi1jZiIsICJmc2wsY29yZW5ldC1jZiI7Ci0JCXJlZyA9IDwweDE4MDAwIDB4MTAwMD47Ci0JCWludGVycnVwdHMgPSA8MTYgMiAxIDMxPjsKLQkJZnNsLGNjZi1udW0tY3NkaWRzID0gPDMyPjsKLQkJZnNsLGNjZi1udW0tc25vb3BpZHMgPSA8MzI+OwotCX07Ci0KLQlpb21tdUAyMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLHBhbXUtdjEuMCIsICJmc2wscGFtdSI7Ci0JCXJlZyA9IDwweDIwMDAwIDB4NjAwMD47Ci0JCWZzbCxwb3J0aWQtbWFwcGluZyA9IDwweDgwMDA+OwotCQlpbnRlcnJ1cHRzID0gPAotCQkJMjQgMiAwIDAKLQkJCTE2IDIgMSAzMD47Ci0JfTsKLQotL2luY2x1ZGUvICJmc2wvcW9yaXEtbXBpYy5kdHNpIgotCi0JZ3V0czogZ2xvYmFsLXV0aWxpdGllc0BlMDAwMCB7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLHQ0MjQwLWRldmljZS1jb25maWciLCAiZnNsLHFvcmlxLWRldmljZS1jb25maWctMi4wIjsKLQkJcmVnID0gPDB4ZTAwMDAgMHhlMDA+OwotCQlmc2wsaGFzLXJzdGNyOwotCQlmc2wsbGlvZG4tYml0cyA9IDwxMj47Ci0JfTsKLQotL2luY2x1ZGUvICJmc2wvcW9yaXEtY2xvY2tnZW4yLmR0c2kiCi0JZ2xvYmFsLXV0aWxpdGllc0BlMTAwMCB7Ci0JCWNvbXBhdGlibGUgPSAiZnNsLHQ0MjQwLWNsb2NrZ2VuIiwgImZzbCxxb3JpcS1jbG9ja2dlbi0yLjAiOwotCX07Ci0KLS9pbmNsdWRlLyAiZnNsL3FvcmlxLWRtYS0wLmR0c2kiCi0vaW5jbHVkZS8gImZzbC9xb3JpcS1kbWEtMS5kdHNpIgotCi0vaW5jbHVkZS8gImZzbC9xb3JpcS1pMmMtMC5kdHNpIgotL2luY2x1ZGUvICJmc2wvcW9yaXEtaTJjLTEuZHRzaSIKLS9pbmNsdWRlLyAiZnNsL3FvcmlxLWR1YXJ0LTAuZHRzaSIKLS9pbmNsdWRlLyAiZnNsL3FvcmlxLWR1YXJ0LTEuZHRzaSIKLQotCUwyXzE6IGwyLWNhY2hlLWNvbnRyb2xsZXJAYzIwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsdDQyNDAtbDItY2FjaGUtY29udHJvbGxlciI7Ci0JCXJlZyA9IDwweGMyMDAwMCAweDQwMDAwPjsKLQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmY3BjPjsKLQl9OwotCUwyXzI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAYzYwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsdDQyNDAtbDItY2FjaGUtY29udHJvbGxlciI7Ci0JCXJlZyA9IDwweGM2MDAwMCAweDQwMDAwPjsKLQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmY3BjPjsKLQl9OwotCUwyXzM6IGwyLWNhY2hlLWNvbnRyb2xsZXJAY2EwMDAwIHsKLQkJY29tcGF0aWJsZSA9ICJmc2wsdDQyNDAtbDItY2FjaGUtY29udHJvbGxlciI7Ci0JCXJlZyA9IDwweGNhMDAwMCAweDQwMDAwPjsKLQkJbmV4dC1sZXZlbC1jYWNoZSA9IDwmY3BjPjsKLQl9OwotfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9hY2FkaWFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2FjYWRpYV9kZWZjb25maWcKaW5kZXggNjllMDZlZS4uOTExMGE1YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2FjYWRpYV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2FjYWRpYV9kZWZjb25maWcKQEAgLTEsMTkgKzEsMTUgQEAKIENPTkZJR180MHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKIENPTkZJR19BQ0FESUE9eQogIyBDT05GSUdfV0FMTlVUIGlzIG5vdCBzZXQKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19QQ0k9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKQEAgLTMxLDI3ICsyNywxOCBAQAogQ09ORklHX0NPTk5FQ1RPUj15CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX09GX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPW0KIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCi0jIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0VUSEVSTkVUPXkKLUNPTkZJR19ORVRfVkVORE9SX0lCTT15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19JQk1fRU1BQz15CiBDT05GSUdfSUJNX0VNQUNfUlhCPTI1NgogQ09ORklHX0lCTV9FTUFDX1RYQj0yNTYKIENPTkZJR19JQk1fRU1BQ19ERUJVRz15Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfVlQgaXMgbm90IHNldApAQCAtNjUsMjAgKzUyLDE0IEBACiBDT05GSUdfVEhFUk1BTD15CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2VwNDA1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9lcDQwNV9kZWZjb25maWcKaW5kZXggZTlkODRiNS4uNzkwMzY2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2VwNDA1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvZXA0MDVfZGVmY29uZmlnCkBAIC0xLDE5ICsxLDE1IEBACiBDT05GSUdfNDB4PXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiBDT05GSUdfRVA0MDU9eQogIyBDT05GSUdfV0FMTlVUIGlzIG5vdCBzZXQKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15CkBAIC0zMCwxOSArMjYsMTQgQEAKIENPTkZJR19DT05ORUNUT1I9eQogQ09ORklHX01URD15CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9PRl9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz1tCiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0VUSEVSTkVUPXkKLUNPTkZJR19ORVRfVkVORE9SX0lCTT15CiBDT05GSUdfSUJNX0VNQUM9eQogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldApAQCAtNTUsMjcgKzQ2LDIwIEBACiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15CiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2tpbGF1ZWFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2tpbGF1ZWFfZGVmY29uZmlnCmluZGV4IDVmZjMzOGYuLjAxYmQ3MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9raWxhdWVhX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2lsYXVlYV9kZWZjb25maWcKQEAgLTEsMjEgKzEsMTcgQEAKIENPTkZJR180MHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKIENPTkZJR19LSUxBVUVBPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKICMgQ09ORklHX1dBTE5VVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfUENJPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0zMyw4ICsyOSw2IEBACiBDT05GSUdfQ09OTkVDVE9SPXkKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKQEAgLTQyLDIxICszNiwxMiBAQAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKIENPTkZJR19NVERfTkFORD15CiBDT05GSUdfTVREX05BTkRfTkRGQz15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKLUNPTkZJR19QTT15Ci1DT05GSUdfU1VTUEVORD15Ci1DT05GSUdfUFBDNHh4X0NQTT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRVRIRVJORVQ9eQotQ09ORklHX05FVF9WRU5ET1JfSUJNPXkKIENPTkZJR19JQk1fRU1BQz15CiBDT05GSUdfSUJNX0VNQUNfUlhCPTI1NgogQ09ORklHX0lCTV9FTUFDX1RYQj0yNTYKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CkBAIC03NSwyMCArNjAsMTQgQEAKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQ0JDPXkKIENPTkZJR19DUllQVE9fRUNCPXkKIENPTkZJR19DUllQVE9fUENCQz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2xvbmRpa2VfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDB4L2tsb25kaWtlX2RlZmNvbmZpZwppbmRleCBjMGQyMjhkLi5lMjAzNmI3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgva2xvbmRpa2VfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9rbG9uZGlrZV9kZWZjb25maWcKQEAgLTEsNSArMSw0IEBACiBDT05GSUdfNDB4PXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKQEAgLTE0LDEwICsxMyw4IEBACiBDT05GSUdfQVBNODAxOFg9eQogIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLSMgQ09ORklHX01JR1JBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAogQ09ORklHX1NDU0k9eQpAQCAtNTEsNSArNDgsNCBAQAogQ09ORklHX01BR0lDX1NZU1JRPXkKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvbWFrYWx1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVmY29uZmlnCmluZGV4IDg0NTA1ZTMuLmVmZDUxNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9tYWthbHVfZGVmY29uZmlnCkBAIC0xLDE5ICsxLDE1IEBACiBDT05GSUdfNDB4PXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiBDT05GSUdfTUFLQUxVPXkKICMgQ09ORklHX1dBTE5VVCBpcyBub3Qgc2V0Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQpAQCAtMzAsMjUgKzI2LDE3IEBACiBDT05GSUdfQ09OTkVDVE9SPXkKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9bQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRVRIRVJORVQ9eQotQ09ORklHX05FVF9WRU5ET1JfSUJNPXkKIENPTkZJR19JQk1fRU1BQz15CiBDT05GSUdfSUJNX0VNQUNfUlhCPTI1NgogQ09ORklHX0lCTV9FTUFDX1RYQj0yNTYKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CkBAIC02MiwyMCArNTAsMTQgQEAKIENPTkZJR19USEVSTUFMPXkKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQ0JDPXkKIENPTkZJR19DUllQVE9fRUNCPXkKIENPTkZJR19DUllQVE9fUENCQz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvb2JzNjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC9vYnM2MDBfZGVmY29uZmlnCmluZGV4IDkxYzExMGQuLjVkZWQzZGNkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvb2JzNjAwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvb2JzNjAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDggQEAKIENPTkZJR180MHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0VYUEVSVD15CkBAIC0xMSw4ICsxMiw2IEBACiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19XQUxOVVQgaXMgbm90IHNldAogQ09ORklHX09CUzYwMD15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKQEAgLTMwLDggKzI5LDYgQEAKIENPTkZJR19DT05ORUNUT1I9eQogQ09ORklHX01URD15CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9PRl9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQpAQCAtMzksNyArMzYsNiBAQAogQ09ORklHX01URF9QSFlTTUFQX09GPXkKIENPTkZJR19NVERfTkFORD15CiBDT05GSUdfTVREX05BTkRfTkRGQz15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAogQ09ORklHX05FVERFVklDRVM9eQpAQCAtNjgsMTMgKzY0LDEwIEBACiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQ0JDPXkKIENPTkZJR19DUllQVE9fRUNCPXkKIENPTkZJR19DUllQVE9fUENCQz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvdmlydGV4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC92aXJ0ZXhfZGVmY29uZmlnCmluZGV4IDBhODFlMWYuLmJjYjBjNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC92aXJ0ZXhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC92aXJ0ZXhfZGVmY29uZmlnCkBAIC0xLDUgKzEsNCBAQAogQ09ORklHXzQweD15Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQpAQCAtNyw3ICs2LDYgQEAKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQpAQCAtMzUsMTYgKzMzLDExIEBACiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgogQ09ORklHX1hJTElOWF9TWVNBQ0U9eQogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19YSUxJTlhfWFBTX1BTMj15CiBDT05GSUdfU0VSSUFMXzgyNTA9eQpAQCAtNjAsMTUgKzUzLDkgQEAKIENPTkZJR19GQj15CiBDT05GSUdfRkJfWElMSU5YPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GT05UUz15Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfTE9HTz15Ci0jIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfSU5PVElGWT15Ci1DT05GSUdfQVVUT0ZTX0ZTPXkKIENPTkZJR19BVVRPRlM0X0ZTPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15CkBAIC03NiwxNiArNjMsMTYgQEAKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX1JPTUZTX0ZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogQ09ORklHX05MU19BU0NJST1tCiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCiBDT05GSUdfTkxTX1VURjg9bQogQ09ORklHX0NSQ19DQ0lUVD15CitDT05GSUdfRk9OVFM9eQorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80MHgvd2FsbnV0X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC93YWxudXRfZGVmY29uZmlnCmluZGV4IDBhMTlmNDMuLjM3YzgzOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC93YWxudXRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQweC93YWxudXRfZGVmY29uZmlnCkBAIC0xLDE3ICsxLDEzIEBACiBDT05GSUdfNDB4PXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQpAQCAtMjgsMTkgKzI0LDE0IEBACiBDT05GSUdfQ09OTkVDVE9SPXkKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9bQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19FVEhFUk5FVD15Ci1DT05GSUdfTkVUX1ZFTkRPUl9JQk09eQogQ09ORklHX0lCTV9FTUFDPXkKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKQEAgLTUzLDIyICs0NCwxNSBAQAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FrZWJvbm9fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FrZWJvbm9fZGVmY29uZmlnCmluZGV4IDdlMjUzMGMuLmVhNGVmMDJhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYWtlYm9ub19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FrZWJvbm9fZGVmY29uZmlnCkBAIC00LDkgKzQsNiBAQAogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19SRF9CWklQMj15Ci1DT05GSUdfUkRfTFpNQT15Ci1DT05GSUdfUkRfWFo9eQogQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKICMgQ09ORklHX1NMVUJfQ1BVX1BBUlRJQUwgaXMgbm90IHNldApAQCAtMTUsNyArMTIsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotIyBDT05GSUdfUE9XRVJOVl9NU0kgaXMgbm90IHNldAogQ09ORklHX1BQQ180N3g9eQogIyBDT05GSUdfRUJPTlkgaXMgbm90IHNldAogQ09ORklHX0FLRUJPTk89eQpAQCAtMjYsNyArMjIsNiBAQAogQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iIgogIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX01TST15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQpAQCAtNDgsNyArNDMsNiBAQAogQ09ORklHX01URF9KRURFQ1BST0JFPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CkBAIC02Miw3ICs1Niw2IEBACiAjIENPTkZJR19ORVRfVkVORE9SX0FNRCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0FSQyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0FUSEVST1MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NBREVOQ0UgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9CUk9BRENPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0JST0NBREUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl9DSEVMU0lPIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9hcmNoZXNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FyY2hlc19kZWZjb25maWcKaW5kZXggNDQzNTVjNS4uOTU0OTQyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FyY2hlc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FyY2hlc19kZWZjb25maWcKQEAgLTEsMTkgKzEsMTYgQEAKIENPTkZJR180NHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQk9OWSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSEVTPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9IiIKIENPTkZJR19ORVQ9eQpAQCAtMzIsMjQgKzI5LDE2IEBACiBDT05GSUdfQ09OTkVDVE9SPXkKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19FVEhFUk5FVD15Ci1DT05GSUdfTkVUX1ZFTkRPUl9JQk09eQogQ09ORklHX0lCTV9FTUFDPXkKIENPTkZJR19JQk1fRU1BQ19SWEI9MjU2CiBDT05GSUdfSUJNX0VNQUNfVFhCPTI1NgotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKQEAgLTY0LDIxICs1MywxNSBAQAogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSUJNX0lJQz15CiBDT05GSUdfU0VOU09SU19BRDc0MTQ9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmFtYm9vX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9iYW1ib29fZGVmY29uZmlnCmluZGV4IGNlZjdkNjIuLmEwNDZmMDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9iYW1ib29fZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9iYW1ib29fZGVmY29uZmlnCkBAIC0xLDE3ICsxLDE0IEBACiBDT05GSUdfNDR4PXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogQ09ORklHX0JBTUJPTz15CiAjIENPTkZJR19FQk9OWSBpcyBub3Qgc2V0Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSIiCiBDT05GSUdfTkVUPXkKQEAgLTI4LDEyICsyNSw5IEBACiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRVRIRVJORVQ9eQotQ09ORklHX05FVF9WRU5ET1JfSUJNPXkKIENPTkZJR19JQk1fRU1BQz15CiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CkBAIC00NywyMyArNDEsMTYgQEAKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFQlVHX0ZTPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2JsdWVzdG9uZV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmx1ZXN0b25lX2RlZmNvbmZpZwppbmRleCBjYTdmMWYzLi5hMzI2Yjc3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmx1ZXN0b25lX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYmx1ZXN0b25lX2RlZmNvbmZpZwpAQCAtMSwxOSArMSwxNiBAQAogQ09ORklHXzQ0eD15Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfRVhQRVJUPXkKLSMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9RVUlSS1MgaXMgbm90IHNldAorIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfQkxVRVNUT05FPXkKICMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tWTV9HVUVTVCBpcyBub3Qgc2V0Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSIiCiBDT05GSUdfTkVUPXkKQEAgLTI3LDE4ICsyNCwxMyBAQAogQ09ORklHX0NPTk5FQ1RPUj15CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX09GX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19FVEhFUk5FVD15Ci1DT05GSUdfTkVUX1ZFTkRPUl9JQk09eQogQ09ORklHX0lCTV9FTUFDPXkKIENPTkZJR19JQk1fRU1BQ19SWEI9MjU2CiBDT05GSUdfSUJNX0VNQUNfVFhCPTI1NgpAQCAtNTMsNyArNDUsNiBAQAogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfSUJNX0lJQz15CiBDT05GSUdfU0VOU09SU19BRDc0MTQ9eQotIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9NNDFUODA9eQpAQCAtNjMsNiArNTQsNSBAQAogQ09ORklHX1RNUEZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkxTPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnCmluZGV4IDk5MTlhOTEuLmQ5MzllNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZwpAQCAtMSwxOSArMSwxNiBAQAogQ09ORklHXzQ0eD15Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKIENPTkZJR19DQU5ZT05MQU5EUz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSIiCiBDT05GSUdfTkVUPXkKQEAgLTMyLDI5ICsyOSwxOCBAQAogQ09ORklHX0NPTk5FQ1RPUj15CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX09GX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQogQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9OREZDPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQotQ09ORklHX1BNPXkKLUNPTkZJR19TVVNQRU5EPXkKLUNPTkZJR19QUEM0eHhfQ1BNPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19FVEhFUk5FVD15Ci1DT05GSUdfTkVUX1ZFTkRPUl9JQk09eQogQ09ORklHX0lCTV9FTUFDPXkKIENPTkZJR19JQk1fRU1BQ19SWEI9MjU2CiBDT05GSUdfSUJNX0VNQUNfVFhCPTI1NgotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKQEAgLTc2LDIxICs2MiwxNSBAQAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRT15Ci1DT05GSUdfVVNCX0xJQlVTVUFMPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfTTQxVDgwPXkKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jdXJyaXR1Y2tfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2N1cnJpdHVja19kZWZjb25maWcKaW5kZXggNDdkZTY4Mi4uNWFhMzEyYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2N1cnJpdHVja19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2N1cnJpdHVja19kZWZjb25maWcKQEAgLTEsOSArMSw3IEBACiBDT05GSUdfNDR4PXkKIENPTkZJR19TTVA9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQpAQCAtMzksMTIgKzM3LDEwIEBACiBDT05GSUdfREVWVE1QRlNfTU9VTlQ9eQogQ09ORklHX0NPTk5FQ1RPUj15CiBDT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCiAjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldApAQCAtNTYsNyArNTIsNiBAQAogIyBDT05GSUdfQVRBX1NGRiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRTEwMDBFPXkKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CkBAIC04NCwyMiArNzksMTggQEAKIENPTkZJR19UTVBGUz15CiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfTkZTX1Y0PXkKIENPTkZJR19OTFNfREVGQVVMVD0ibiIKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfREVCVUdfSU5GTz15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX0RFQlVHX0ZTPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfWE1PTj15CiBDT05GSUdfWE1PTl9ERUZBVUxUPXkKIENPTkZJR19QUENfRUFSTFlfREVCVUc9eQogQ09ORklHX1BQQ19FQVJMWV9ERUJVR180NHhfUEhZU0xPVz0weDEwMDAwMDAwCiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eF9QSFlTSElHSD0weDIwMAotQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2Vib255X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9lYm9ueV9kZWZjb25maWcKaW5kZXggMzFiNThiMC4uNTkwOWUwMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2Vib255X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWJvbnlfZGVmY29uZmlnCkBAIC0xLDE4ICsxLDE0IEBACiBDT05GSUdfNDR4PXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKQEAgLTI4LDE5ICsyNCwxNCBAQAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19DT05ORUNUT1I9eQogQ09ORklHX01URD15Ci1DT05GSUdfTVREX09GX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRVRIRVJORVQ9eQotQ09ORklHX05FVF9WRU5ET1JfSUJNPXkKIENPTkZJR19JQk1fRU1BQz15CiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CkBAIC01NSwyMSArNDYsMTUgQEAKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKIENPTkZJR19FWFQyX0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2VpZ2VyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9laWdlcl9kZWZjb25maWcKaW5kZXggZmFjY2FmNi4uNTc0OTlkMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2VpZ2VyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvZWlnZXJfZGVmY29uZmlnCkBAIC0xLDE5ICsxLDE1IEBACiBDT05GSUdfNDR4PXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfRUJPTlkgaXMgbm90IHNldAogQ09ORklHX0VJR0VSPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9IiIKIENPTkZJR19QQ0lFUE9SVEJVUz15CkBAIC0zMywyMCArMjksMTUgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfQ09OTkVDVE9SPXkKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfUEhZU01BUF9PRj15CiBDT05GSUdfTVREX05BTkQ9eQogQ09ORklHX01URF9OQU5EX05ERkM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQ0hSX0RFVl9TRz15CkBAIC01NCwxMyArNDUsMTAgQEAKIENPTkZJR19GVVNJT05fU0FTPXkKIENPTkZJR19JMk89eQogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0VUSEVSTkVUPXkKLUNPTkZJR19ORVRfVkVORE9SX0lCTT15CiBDT05GSUdfSUJNX0VNQUM9eQogQ09ORklHX0lCTV9FTUFDX1JYQj0yNTYKIENPTkZJR19JQk1fRU1BQ19UWEI9MjU2CiBDT05GSUdfRTEwMDBFPXkKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CkBAIC04MCwyNSArNjgsMTggQEAKIENPTkZJR19JMkNfREVCVUdfQUxHTz15CiBDT05GSUdfSTJDX0RFQlVHX0JVUz15CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0RNQURFVklDRVM9eQogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFQlVHX0ZTPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0NSWVBURD15CiBDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQogQ09ORklHX0NSWVBUT19DQ009eQpAQCAtMTE2LDcgKzk3LDYgQEAKIENPTkZJR19DUllQVE9fU0hBMT15CiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CiBDT05GSUdfQ1JZUFRPX1NIQTUxMj15Ci1DT05GSUdfQ1JZUFRPX0FFUz15CiBDT05GSUdfQ1JZUFRPX0FSQzQ9eQogQ09ORklHX0NSWVBUT19CTE9XRklTSD15CiBDT05GSUdfQ1JZUFRPX0RFUz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvaWNvbl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvaWNvbl9kZWZjb25maWcKaW5kZXggMDU3ODJjMS4uNWQ1MjE4NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2ljb25fZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9pY29uX2RlZmNvbmZpZwpAQCAtMSwxOSArMSwxNCBAQAogQ09ORklHXzQ0eD15Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKIENPTkZJR19JQ09OPXkKIENPTkZJR19ISUdITUVNPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9IiIKIENPTkZJR19QQ0lFUE9SVEJVUz15CkBAIC0zNCwxNyArMjksMTMgQEAKIENPTkZJR19DT05ORUNUT1I9eQogQ09ORklHX01URD15CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9PRl9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCiBDT05GSUdfWElMSU5YX1NZU0FDRT15Ci0jIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKQEAgLTU1LDExICs0Niw3IEBACiBDT05GSUdfRlVTSU9OX0NUTD15CiBDT05GSUdfRlVTSU9OX0xPR0dJTkc9eQogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0VUSEVSTkVUPXkKLUNPTkZJR19ORVRfVkVORE9SX0lCTT15CiBDT05GSUdfSUJNX0VNQUM9eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTY0MAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTQ4MApAQCAtNzksNyArNjYsNiBAQAogQ09ORklHX0kyQ19JQk1fSUlDPXkKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19NRkRfU001MDE9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19GQj15CiBDT05GSUdfRkJfU001MDE9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQpAQCAtOTIsMjUgKzc4LDE5IEBACiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX1ZGQVRfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15CiBDT05GSUdfTkxTX0lTTzg4NTlfMTU9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQ0JDPXkKIENPTkZJR19DUllQVE9fRUNCPXkKIENPTkZJR19DUllQVE9fUENCQz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvaXNzNDc2LXNtcF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvaXNzNDc2LXNtcF9kZWZjb25maWcKaW5kZXggNDlhMTUxOC4uMGFkM2U0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2lzczQ3Ni1zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9pc3M0NzYtc21wX2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxMSBAQAogQ09ORklHXzQ0eD15CiBDT05GSUdfU01QPXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfTU9EVUxFUz15CkBAIC0yNSw3ICsyMSw2IEBACiBDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L2lzc2JsazAiCiAjIENPTkZJR19QQ0kgaXMgbm90IHNldAogQ09ORklHX0FEVkFOQ0VEX09QVElPTlM9eQotQ09ORklHX05PTlNUQVRJQ19LRVJORUw9eQogQ09ORklHX0RZTkFNSUNfTUVNU1RBUlQ9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKQEAgLTQyLDEzICszNywxMCBAQAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19DT05ORUNUT1I9eQogQ09ORklHX01URD15Ci1DT05GSUdfTVREX09GX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CkBAIC03MiwxNSArNjQsMTEgQEAKIENPTkZJR19UTVBGUz15CiBDT05GSUdfQ1JBTUZTPXkKICMgQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVMgaXMgbm90IHNldAotQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKLUNPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19ERUJVR19GUz15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogQ09ORklHX1BQQ19FQVJMWV9ERUJVRz15Ci1DT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQ0JDPXkKIENPTkZJR19DUllQVE9fRUNCPXkKIENPTkZJR19DUllQVE9fUENCQz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgva2F0bWFpX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnCmluZGV4IGYxMTM3OTcuLmEwNDIzMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9rYXRtYWlfZGVmY29uZmlnCkBAIC0xLDE3ICsxLDE0IEBACiBDT05GSUdfNDR4PXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfRUJPTlkgaXMgbm90IHNldAogQ09ORklHX0tBVE1BST15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSIiCiBDT05GSUdfTkVUPXkKQEAgLTMwLDE5ICsyNywxNCBAQAogQ09ORklHX0NPTk5FQ1RPUj15CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX09GX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUz15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRVRIRVJORVQ9eQotQ09ORklHX05FVF9WRU5ET1JfSUJNPXkKIENPTkZJR19JQk1fRU1BQz15CiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CkBAIC01NSwyMiArNDcsMTUgQEAKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JhaW5pZXJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JhaW5pZXJfZGVmY29uZmlnCmluZGV4IDRiOTFhNDQuLjkxYzJhZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yYWluaWVyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvcmFpbmllcl9kZWZjb25maWcKQEAgLTEsMTAgKzEsOCBAQAogQ09ORklHXzQ0eD15Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKQEAgLTEyLDcgKzEwLDYgQEAKICMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKIENPTkZJR19SQUlOSUVSPXkKIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSIiCiBDT05GSUdfTkVUPXkKQEAgLTMxLDE0ICsyOCwxMSBAQAogQ09ORklHX0NPTk5FQ1RPUj15CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX09GX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAogQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTPXkKQEAgLTU1LDI2ICs0OSwxOSBAQAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFQlVHX0ZTPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX1BQQ19FQVJMWV9ERUJVRz15CiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eF9QSFlTTE9XPTB4ZWY2MDAzMDAKLUNPTkZJR19DUllQVE89eQogQ09ORklHX0NSWVBUT19DQkM9eQogQ09ORklHX0NSWVBUT19FQ0I9eQogQ09ORklHX0NSWVBUT19QQ0JDPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yZWR3b29kX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yZWR3b29kX2RlZmNvbmZpZwppbmRleCBiNzExM2UxLi43ZmRkZjNmZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JlZHdvb2RfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yZWR3b29kX2RlZmNvbmZpZwpAQCAtMSwxOSArMSwxNSBAQAogQ09ORklHXzQ0eD15Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKIENPTkZJR19SRURXT09EPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9IiIKIENPTkZJR19QQ0lFUE9SVEJVUz15CkBAIC0zMywxOCArMjksMTMgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfQ09OTkVDVE9SPXkKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19DSFJfREVWX1NHPXkKQEAgLTUyLDE0ICs0MywxMSBAQAogQ09ORklHX0ZVU0lPTl9TQVM9eQogQ09ORklHX0kyTz15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRVRIRVJORVQ9eQotQ09ORklHX05FVF9WRU5ET1JfSUJNPXkKIENPTkZJR19JQk1fRU1BQz15CiBDT05GSUdfSUJNX0VNQUNfUlhCPTI1NgogQ09ORklHX0lCTV9FTUFDX1RYQj0yNTYKIENPTkZJR19JQk1fRU1BQ19ERUJVRz15CiBDT05GSUdfRTEwMDBFPXkKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CkBAIC03OSwyNSArNjcsMTggQEAKIENPTkZJR19JMkNfREVCVUdfQUxHTz15CiBDT05GSUdfSTJDX0RFQlVHX0JVUz15CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0RNQURFVklDRVM9eQogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFQlVHX0ZTPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0NSWVBURD15CiBDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQogQ09ORklHX0NSWVBUT19DQ009eQpAQCAtMTE1LDcgKzk2LDYgQEAKIENPTkZJR19DUllQVE9fU0hBMT15CiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CiBDT05GSUdfQ1JZUFRPX1NIQTUxMj15Ci1DT05GSUdfQ1JZUFRPX0FFUz15CiBDT05GSUdfQ1JZUFRPX0FSQzQ9eQogQ09ORklHX0NSWVBUT19CTE9XRklTSD15CiBDT05GSUdfQ1JZUFRPX0RFUz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2FtNDQwZXBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3NhbTQ0MGVwX2RlZmNvbmZpZwppbmRleCA5NjIyZWIyLi42OTI4MDEyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvc2FtNDQwZXBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zYW00NDBlcF9kZWZjb25maWcKQEAgLTEsMjAgKzEsMTkgQEAKIENPTkZJR180NHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CitDT05GSUdfQU1JR0FfUEFSVElUSU9OPXkKICMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfRUJPTlkgaXMgbm90IHNldAogQ09ORklHX1NBTTQ0MEVQPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9IiIKIENPTkZJR19ORVQ9eQpAQCAtMzEsMTEgKzMwLDkgQEAKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19DT05ORUNUT1I9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19CTEtfREVWX1NSPXkKIENPTkZJR19DSFJfREVWX1NHPXkKQEAgLTQ0LDExICs0MSw3IEBACiAjIENPTkZJR19TQVRBX1BNUCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9TSUw9eQogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0VUSEVSTkVUPXkKLUNPTkZJR19ORVRfVkVORE9SX0lCTT15CiBDT05GSUdfSUJNX0VNQUM9eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CkBAIC01OSw3ICs1Miw2IEBACiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0kyQ19JQk1fSUlDPXkKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CiBDT05GSUdfRkI9eQogQ09ORklHX0ZCX1JBREVPTj15CiBDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CkBAIC04MCwxMCArNzIsOCBAQAogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKIENPTkZJR19ISURfU0FNU1VORz15Ci1DT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQpAQCAtOTksNyArODksNiBAQAogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfUkVJU0VSRlNfRlM9eQotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0FVVE9GUzRfRlM9eQogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15CkBAIC0xMTEsMTEgKzEwMCw3IEBACiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0FGRlNfRlM9bQogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19BTUlHQV9QQVJUSVRJT049eQogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX0NSQ19UMTBESUY9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zZXF1b2lhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zZXF1b2lhX2RlZmNvbmZpZwppbmRleCA5NjQyZDk5Yi4uYzI5NDM2OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3NlcXVvaWFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9zZXF1b2lhX2RlZmNvbmZpZwpAQCAtMSwxOSArMSwxNiBAQAogQ09ORklHXzQ0eD15Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKICMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKIENPTkZJR19TRVFVT0lBPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19DTURMSU5FX0JPT0w9eQogQ09ORklHX0NNRExJTkU9IiIKIENPTkZJR19ORVQ9eQpAQCAtMzIsOCArMjksNiBAQAogQ09ORklHX0NPTk5FQ1RPUj15CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX09GX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQpAQCAtNDEsMTIgKzM2LDkgQEAKIENPTkZJR19NVERfUEhZU01BUF9PRj15CiBDT05GSUdfTVREX05BTkQ9eQogQ09ORklHX01URF9OQU5EX05ERkM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19FVEhFUk5FVD15Ci1DT05GSUdfTkVUX1ZFTkRPUl9JQk09eQogQ09ORklHX0lCTV9FTUFDPXkKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKQEAgLTYwLDI0ICs1MiwxNyBAQAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFQlVHX0ZTPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3RhaXNoYW5fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3RhaXNoYW5fZGVmY29uZmlnCmluZGV4IDA5ZTMwNzUuLmU3NzkyMjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC90YWlzaGFuX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvdGFpc2hhbl9kZWZjb25maWcKQEAgLTEsMTcgKzEsMTQgQEAKIENPTkZJR180NHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19FQk9OWSBpcyBub3Qgc2V0CiBDT05GSUdfVEFJU0hBTj15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSIiCiBDT05GSUdfTkVUPXkKQEAgLTMwLDE3ICsyNywxMyBAQAogQ09ORklHX0NPTk5FQ1RPUj15CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zNTAwMAogQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19FVEhFUk5FVD15Ci1DT05GSUdfTkVUX1ZFTkRPUl9JQk09eQogQ09ORklHX0lCTV9FTUFDPXkKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKQEAgLTU0LDIzICs0NywxNiBAQAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19USEVSTUFMPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRVhUMl9GUz15Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15Ci1DT05GSUdfQ1JZUFRPPXkKIENPTkZJR19DUllQVE9fQ0JDPXkKIENPTkZJR19DUllQVE9fRUNCPXkKIENPTkZJR19DUllQVE9fUENCQz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvdmlydGV4NV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvdmlydGV4NV9kZWZjb25maWcKaW5kZXggMWViM2NhZi4uNTNkMDMwMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3ZpcnRleDVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC92aXJ0ZXg1X2RlZmNvbmZpZwpAQCAtMSw1ICsxLDQgQEAKIENPTkZJR180NHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKQEAgLTcsNyArNiw2IEBACiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKQEAgLTM0LDE2ICszMiwxMSBAQAogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKIENPTkZJR19YSUxJTlhfU1lTQUNFPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fWElMSU5YX1hQU19QUzI9eQogQ09ORklHX1NFUklBTF84MjUwPXkKQEAgLTU5LDE1ICs1Miw5IEBACiBDT05GSUdfRkI9eQogQ09ORklHX0ZCX1hJTElOWD15CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci1DT05GSUdfRk9OVFM9eQotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX0xPR089eQotIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX0VYVDJfRlM9eQotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz15CiBDT05GSUdfQVVUT0ZTNF9GUz15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQpAQCAtNzUsMTYgKzYyLDE2IEBACiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19ST01GU19GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfQVNDSUk9bQogQ09ORklHX05MU19JU084ODU5XzE9bQogQ09ORklHX05MU19VVEY4PW0KIENPTkZJR19DUkNfQ0NJVFQ9eQorQ09ORklHX0ZPTlRTPXkKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3dhcnBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3dhcnBfZGVmY29uZmlnCmluZGV4IDU1MWU1MGEuLmVlNDM0MzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC93YXJwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvd2FycF9kZWZjb25maWcKQEAgLTEsNSArMSw0IEBACiBDT05GSUdfNDR4PXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXBpa2EiCiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CkBAIC03LDcgKzYsNiBAQAogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKQEAgLTE2LDcgKzE0LDYgQEAKIENPTkZJR19XQVJQPXkKIENPTkZJR19QUEM0eHhfR1BJTz15CiBDT05GSUdfSFpfMTAwMD15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSJpcD1vbiIKICMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CkBAIC0zNSw4ICszMiw2IEBACiAjIENPTkZJR19GSVJNV0FSRV9JTl9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX01URD15CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9PRl9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQpAQCAtNDQsMjEgKzM5LDE0IEBACiBDT05GSUdfTVREX05BTkQ9eQogQ09ORklHX01URF9OQU5EX05ERkM9eQogQ09ORklHX01URF9VQkk9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQotQ09ORklHX01JU0NfREVWSUNFUz15CiBDT05GSUdfRUVQUk9NX0FUMjQ9eQogQ09ORklHX1NDU0k9eQogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX1NDU0lfU1BJX0FUVFJTPXkKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0VUSEVSTkVUPXkKLUNPTkZJR19ORVRfVkVORE9SX0lCTT15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19JQk1fRU1BQz15Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfVlQgaXMgbm90IHNldApAQCAtNzIsNyArNjAsNiBAQAogQ09ORklHX0dQSU9fU1lTRlM9eQogQ09ORklHX1NFTlNPUlNfQUQ3NDE0PXkKIENPTkZJR19USEVSTUFMPXkKLUNPTkZJR19USEVSTUFMX0hXTU9OPXkKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfTU9OPXkKQEAgLTgzLDE0ICs3MCwxMiBAQAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKIENPTkZJR19MRURTX0dQSU89eQotIyBDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfREVGQVVMVF9PTj15CiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQpAQCAtOTksNyArODQsNiBAQAogQ09ORklHX1VCSUZTX0ZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CkBAIC0xMTAsMTMgKzk0LDEwIEBACiBDT05GSUdfQ1JDX0NDSVRUPXkKIENPTkZJR19DUkNfVDEwRElGPXkKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX0RFQlVHX0ZTPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9jbTUyMDBfZGVmY29uZmlnCmluZGV4IDBkYzk5ZTEuLjE5ZmFkMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvY201MjAwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2NtNTIwMF9kZWZjb25maWcKQEAgLTEsMTggKzEsMTUgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAogQ09ORklHX1BQQ19NUEM1Mnh4PXkKIENPTkZJR19QUENfTVBDNTIwMF9TSU1QTEU9eQogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX1BNPXkKICMgQ09ORklHX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKQEAgLTMxLDI2ICsyOCwyMCBAQAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0xYVF9QSFk9eQotQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfRkVDX01QQzUyeHg9eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19MWFRfUEhZPXkKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKQEAgLTY0LDcgKzU1LDYgQEAKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CiBDT05GSUdfVVNCX1NUT1JBR0U9eQpAQCAtNzMsNyArNjMsNiBAQAogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19NU0RPU19GUz15CiBDT05GSUdfVkZBVF9GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CkBAIC04MSwxNyArNzAsMTMgQEAKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1Y0PXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9saXRlNTIwMGJfZGVmY29uZmlnCmluZGV4IDEwNGEzMzIuLjVmNDBiYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbGl0ZTUyMDBiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L2xpdGU1MjAwYl9kZWZjb25maWcKQEAgLTEsMTAgKzEsOSBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQpAQCAtMTUsMTAgKzE0LDYgQEAKIENPTkZJR19QUENfTVBDNTIwMF9TSU1QTEU9eQogQ09ORklHX1BQQ19MSVRFNTIwMD15CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfU1BBUlNFX0lSUT15Ci1DT05GSUdfUE09eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKQEAgLTMzLDcgKzI4LDYgQEAKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CkBAIC00Miw5ICszNiw4IEBACiBDT05GSUdfQVRBPXkKIENPTkZJR19QQVRBX01QQzUyeHg9eQogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0xYVF9QSFk9eQotQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfRkVDX01QQzUyeHg9eQorQ09ORklHX0xYVF9QSFk9eQogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfVlQgaXMgbm90IHNldApAQCAtNTcsMjMgKzUwLDE4IEBACiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19NUEM9eQogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19ETUFERVZJQ0VTPXkKIENPTkZJR19QUENfQkVTVENPTU09eQogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvbW90aW9ucHJvX2RlZmNvbmZpZwppbmRleCBjOTM2ZmFiLi45MDllMTg1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L21vdGlvbnByb19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9tb3Rpb25wcm9fZGVmY29uZmlnCkBAIC0xLDE4ICsxLDE1IEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKIENPTkZJR19QUENfTVBDNTJ4eD15CiBDT05GSUdfUFBDX01QQzUyMDBfU0lNUExFPXkKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19QTT15CiAjIENPTkZJR19QQ0kgaXMgbm90IHNldAogQ09ORklHX05FVD15CkBAIC0zMCwyNCArMjcsMjEgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfUk9NPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKLUNPTkZJR19NSVNDX0RFVklDRVM9eQogQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX0NIUl9ERVZfU0c9eQogQ09ORklHX0FUQT15CiBDT05GSUdfUEFUQV9NUEM1Mnh4PXkKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19GRUNfTVBDNTJ4eD15CiBDT05GSUdfTUFSVkVMTF9QSFk9eQogQ09ORklHX0RBVklDT01fUEhZPXkKIENPTkZJR19RU0VNSV9QSFk9eQpAQCAtNTgsMTEgKzUyLDYgQEAKIENPTkZJR19CUk9BRENPTV9QSFk9eQogQ09ORklHX0lDUExVU19QSFk9eQogQ09ORklHX01ESU9fQklUQkFORz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotQ09ORklHX0ZFQ19NUEM1Mnh4PXkKLSMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CkBAIC04Niw3ICs3NSw2IEBACiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKQEAgLTk0LDE4ICs4MiwxNCBAQAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPXkKIENPTkZJR19DUllQVE9fUENCQz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3BjbTAzMF9kZWZjb25maWcKaW5kZXggMWQwM2MzNS4uNjQ5YTAxYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC9wY20wMzBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvcGNtMDMwX2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxNCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfTE9DQUxWRVJTSU9OPSJ0cnVuayIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlMgaXMgbm90IHNldAogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQpAQCAtMjEsMTEgKzIwLDggQEAKIENPTkZJR19QUENfTVBDNTJ4eD15CiBDT05GSUdfUFBDX01QQzUyMDBfU0lNUExFPXkKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19IWl8xMDA9eQogQ09ORklHX1BSRUVNUFQ9eQotQ09ORklHX1NQQVJTRV9JUlE9eQogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQpAQCAtNDUsNDAgKzQxLDMxIEBACiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogQ09ORklHX01URD15CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QUk9DX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1NEPW0KICMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAogQ09ORklHX0FUQT1tCiBDT05GSUdfUEFUQV9NUEM1Mnh4PW0KIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15CiBDT05GSUdfRkVDX01QQzUyeHg9eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfTVBDNTJ4eD15CiBDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPW0KLSMgQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKICMgQ09ORklHX1VTQl9PSENJX0hDRF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVE9SQUdFPW0KQEAgLTk1LDggKzgyLDYgQEAKIENPTkZJR19UTVBGUz15CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkxTX0NPREVQQUdFXzg1MD15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy81Mnh4L3RxbTUyMDBfZGVmY29uZmlnCmluZGV4IGNhODNlYzguLmVmYWI4MzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzUyeHgvdHFtNTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNTJ4eC90cW01MjAwX2RlZmNvbmZpZwpAQCAtMSwxNyArMSwxNCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15Ci0jIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CitDT05GSUdfRU1CRURERUQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFZFUlNJT05TPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAogQ09ORklHX1BQQ19NUEM1Mnh4PXkKIENPTkZJR19QUENfTVBDNTIwMF9TSU1QTEU9eQpAQCAtMzQsMTcgKzMxLDEzIEBACiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfUk9NPXkKIENPTkZJR19NVERfUEhZU01BUF9PRj15CiBDT05GSUdfTVREX1BMQVRSQU09eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OApAQCAtNTQsMTIgKzQ3LDkgQEAKIENPTkZJR19QQVRBX01QQzUyeHg9eQogQ09ORklHX1BBVEFfUExBVEZPUk09eQogQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0ZFQ19NUEM1Mnh4PXkKIENPTkZJR19MWFRfUEhZPXkKIENPTkZJR19GSVhFRF9QSFk9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfRkVDX01QQzUyeHg9eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfTVBDNTJ4eD15CiBDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRV9CQVVEPTExNTIwMApAQCAtNzUsNyArNjUsNiBAQAogQ09ORklHX0ZCX1NNNTAxPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKIENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKQEAgLTk1LDE3ICs4NCwxNCBAQAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX1BSSU5US19USU1FPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfSU5GTz15CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvYXNwODM0N19kZWZjb25maWcKaW5kZXggOTg1Zjk1Yy4uYmNkZmIwNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9hc3A4MzQ3X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2FzcDgzNDdfZGVmY29uZmlnCkBAIC0xLDIxICsxLDIwIEBACiBDT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODN4eD15CiBDT05GSUdfQVNQODM0eD15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfUENJPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0zNCwyMiArMzMsMTYgQEAKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9QQVJUU19VTkFMTE9DQVRFRD15Ci1DT05GSUdfTVREX09GX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CkBAIC02Myw4ICs1Niw2IEBACiBDT05GSUdfSTJDX01QQz15CiBDT05GSUdfVEhFUk1BTD15CiBDT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9FSENJX0hDRD15CkBAIC03NCwxNyArNjUsMTIgQEAKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1Y0PXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2ttZXRlcjFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9rbWV0ZXIxX2RlZmNvbmZpZwppbmRleCBlMTJlNjBjLi4xMWE5NTkyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L2ttZXRlcjFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgva21ldGVyMV9kZWZjb25maWcKQEAgLTEsNCArMSwzIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CkBAIC0zNiw3ICszNSw2IEBACiBDT05GSUdfVkxBTl84MDIxUT15CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CkBAIC00NSwxMCArNDMsOCBAQAogQ09ORklHX01URF9QSFJBTT15CiBDT05GSUdfTVREX1VCST15CiBDT05GSUdfTVREX1VCSV9HTFVFQkk9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9eQotQ09ORklHX01JST15CiBDT05GSUdfVFVOPXkKIENPTkZJR19VQ0NfR0VUSD15CiBDT05GSUdfTUFSVkVMTF9QSFk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzEzX3JkYl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZwppbmRleCA0YjRhMmE5Li5iNDdhNDFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTNfcmRiX2RlZmNvbmZpZwpAQCAtMSwyMCArMSwxOCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgzeHg9eQogQ09ORklHX01QQzgzMXhfUkRCPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19QQ0k9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKQEAgLTMwLDE1ICsyOCwxMiBAQAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfUEhZU01BUF9PRj15CiBDT05GSUdfTVREX05BTkQ9eQogQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKQEAgLTUxLDEyICs0NiwxMCBAQAogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfR0lBTkZBUj15CitDT05GSUdfRTEwMD15CiBDT05GSUdfQ0lDQURBX1BIWT15CiBDT05GSUdfRklYRURfUEhZPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX05FVF9QQ0k9eQotQ09ORklHX0UxMDA9eQotQ09ORklHX0dJQU5GQVI9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldApAQCAtNzEsNyArNjQsNiBAQAogQ09ORklHX1NQST15CiBDT05GSUdfU1BJX0JJVEJBTkc9eQogQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9NT049eQpAQCAtODIsNyArNzQsNiBAQAogQ09ORklHX1VTQl9VSENJX0hDRD15CiBDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX1VTQl9HQURHRVQ9eQotQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MD15CiBDT05GSUdfVVNCX0VUSD1tCiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUw9eQpAQCAtOTAsMTggKzgxLDEyIEBACiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzMTVfcmRiX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnCmluZGV4IDU4NzEzOTUuLmUyOGM4M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMxNV9yZGJfZGVmY29uZmlnCkBAIC0xLDIwICsxLDE4IEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODN4eD15CiBDT05GSUdfTVBDODMxeF9SREI9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX1BDST15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQpAQCAtMzAsMTMgKzI4LDExIEBACiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfUEhZU01BUF9PRj15CiBDT05GSUdfTVREX05BTkQ9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OApAQCAtNTAsMTAgKzQ2LDggQEAKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTkVUX1BDST15Ci1DT05GSUdfRTEwMD15CiBDT05GSUdfR0lBTkZBUj15CitDT05GSUdfRTEwMD15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CkBAIC02OCw3ICs2Miw2IEBACiBDT05GSUdfU1BJPXkKIENPTkZJR19TUElfQklUQkFORz15CiBDT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX01PTj15CkBAIC03OSw3ICs3Miw2IEBACiBDT05GSUdfVVNCX1VIQ0lfSENEPXkKIENPTkZJR19VU0JfU1RPUkFHRT15CiBDT05GSUdfVVNCX0dBREdFVD15Ci1DT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwPXkKIENPTkZJR19VU0JfRVRIPW0KIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTD15CkBAIC04NywxOCArNzksMTIgQEAKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1Y0PXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9tZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKaW5kZXggYTU2OTlhMS4uZTg0ZDM1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X21kc19kZWZjb25maWcKQEAgLTEsMjIgKzEsMjEgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODN4eD15CiBDT05GSUdfTVBDODMyeF9NRFM9eQogQ09ORklHX1FVSUNDX0VOR0lORT15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX1BDST15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQpAQCAtMzEsMTYgKzMwLDEzIEBACiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAogQ09ORklHX1NDU0k9eQogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0RBVklDT01fUEhZPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15CiBDT05GSUdfVUNDX0dFVEg9eQorQ09ORklHX0RBVklDT01fUEhZPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKQEAgLTUzLDIzICs0OSwxNiBAQAogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfTVBDPXkKIENPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9EUzEzNzQ9eQogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODMyeF9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKaW5kZXggNWFkYzRjZS4uYWUxNDVmNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzJ4X3JkYl9kZWZjb25maWcKQEAgLTEsMjIgKzEsMjEgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorQ09ORklHX0xETV9QQVJUSVRJT049eQogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX1BQQ184M3h4PXkKIENPTkZJR19NUEM4MzJ4X1JEQj15CiBDT05GSUdfUVVJQ0NfRU5HSU5FPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfUENJPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0zMSwxOCArMzAsMTUgQEAKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CiBDT05GSUdfU0NTST15CiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfSUNQTFVTX1BIWT15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotQ09ORklHX0UxMDAwPXkKIENPTkZJR19VQ0NfR0VUSD15CitDT05GSUdfRTEwMDA9eQorQ09ORklHX0lDUExVU19QSFk9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldApAQCAtNTgsNyArNTQsNiBAQAogQ09ORklHX1NQST15CiBDT05GSUdfU1BJX0JJVEJBTkc9eQogQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiAjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9NT049eQpAQCAtNzEsMjQgKzY2LDE4IEBACiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTERNX1BBUlRJVElPTj15CiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiBDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CiBDT05GSUdfTkxTX0lTTzg4NTlfOD15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15CiBDT05GSUdfQ1JDX1QxMERJRj15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfQ1JZUFRPX0VDQj1tCiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZwppbmRleCA4MmI2YjZjLi4yYTVmZGNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4X2RlZmNvbmZpZwpAQCAtMSwyMCArMSwxOSBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CitDT05GSUdfTUFDX1BBUlRJVElPTj15CiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgzeHg9eQogQ09ORklHX01QQzgzNHhfSVRYPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19QQ0k9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKQEAgLTMwLDExICsyOSw5IEBACiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OApAQCAtNTIsOSArNDksOSBAQAogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfR0lBTkZBUj15CiBDT05GSUdfQ0lDQURBX1BIWT15CiBDT05GSUdfRklYRURfUEhZPXkKLUNPTkZJR19HSUFORkFSPXkKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKQEAgLTY5LDcgKzY2LDYgQEAKIENPTkZJR19TUElfQklUQkFORz15CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9FSENJX0hDRD15CkBAIC04MiwxOSArNzgsMTMgQEAKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1Y0PXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19NQUNfUEFSVElUSU9OPXkKIENPTkZJR19DUkNfVDEwRElGPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X2l0eGdwX2RlZmNvbmZpZwppbmRleCBmOGIyMjhhLi45YTJmZjI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfaXR4Z3BfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM0eF9pdHhncF9kZWZjb25maWcKQEAgLTEsMjAgKzEsMTkgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorQ09ORklHX01BQ19QQVJUSVRJT049eQogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX1BQQ184M3h4PXkKIENPTkZJR19NUEM4MzR4X0lUWD15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfUENJPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0zMCwxMSArMjksOSBAQAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKQEAgLTQzLDggKzQwLDggQEAKIENPTkZJR19DSFJfREVWX1NHPXkKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQ0lDQURBX1BIWT15CiBDT05GSUdfR0lBTkZBUj15CitDT05GSUdfQ0lDQURBX1BIWT15CiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CkBAIC01OSw3ICs1Niw2IEBACiBDT05GSUdfU1BJX0JJVEJBTkc9eQogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQpAQCAtNzIsMTkgKzY4LDEzIEBACiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTUFDX1BBUlRJVElPTj15CiBDT05GSUdfQ1JDX1QxMERJRj15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzR4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZwppbmRleCA5OTY2MGMwLi5lNDRlZGM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNHhfbWRzX2RlZmNvbmZpZwpAQCAtMSwyMCArMSwxOSBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX1BQQ184M3h4PXkKIENPTkZJR19NUEM4MzR4X01EUz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfUENJPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0zMCwxNiArMjksMTMgQEAKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTUFSVkVMTF9QSFk9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTkVUX1BDST15Ci1DT05GSUdfRTEwMD15CiBDT05GSUdfR0lBTkZBUj15CitDT05GSUdfRTEwMD15CitDT05GSUdfTUFSVkVMTF9QSFk9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldApAQCAtNTIsMjMgKzQ4LDE2IEBACiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19NUEM9eQogQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfUlRDX0NMQVNTPXkKIENPTkZJR19SVENfRFJWX0RTMTM3ND15CiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1Y0PXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfQ1JZUFRPX0VDQj1tCiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X21kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZwppbmRleCAwNTcxMGJiLi45NGE3ZDg1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzNnhfbWRzX2RlZmNvbmZpZwpAQCAtMSwyMSArMSwyMCBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX1BQQ184M3h4PXkKIENPTkZJR19NUEM4MzZ4X01EUz15CiBDT05GSUdfUVVJQ0NfRU5HSU5FPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19QQ0k9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKQEAgLTMyLDIxICszMSwxNyBAQAogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAogQ09ORklHX1NDU0k9eQogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX01BUlZFTExfUEhZPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15CiBDT05GSUdfVUNDX0dFVEg9eQorQ09ORklHX01BUlZFTExfUEhZPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKQEAgLTU5LDIzICs1NCwxNiBAQAogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfTVBDPXkKIENPTkZJR19XQVRDSERPRz15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9EUzEzNzQ9eQogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM2eF9yZGtfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKaW5kZXggMDU0MGQ2Ny4uNzYxZWQ4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4MzZ4X3Jka19kZWZjb25maWcKQEAgLTEsMjAgKzEsMTkgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODN4eD15CiBDT05GSUdfTVBDODM2eF9SREs9eQogQ09ORklHX1FVSUNDX0VOR0lORT15CiBDT05GSUdfUUVfR1BJTz15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfUENJPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0zMCwyMCArMjksMTcgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0JST0FEQ09NX1BIWT15CiBDT05GSUdfVUNDX0dFVEg9eQotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19CUk9BRENPTV9QSFk9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldApAQCAtNzEsMTcgKzY3LDExIEBACiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX1BQQ19FQVJMWV9ERUJVRz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L21wYzgzN3hfbWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCmluZGV4IGYzNjc5ODUuLmJjZjFiNDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9tZHNfZGVmY29uZmlnCkBAIC0xLDE4ICsxLDE2IEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15CiBDT05GSUdfU0xBQj15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODN4eD15CiBDT05GSUdfTVBDODM3eF9NRFM9eQotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX1BDST15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQpAQCAtMjgsNyArMjYsNiBAQAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKQEAgLTM3LDEwICszNCw4IEBACiBDT05GSUdfQVRBPXkKIENPTkZJR19TQVRBX0ZTTD15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTUFSVkVMTF9QSFk9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19HSUFORkFSPXkKK0NPTkZJR19NQVJWRUxMX1BIWT15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CkBAIC01NCwyMSArNDksMTUgQEAKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX01QQz15CiBDT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogQ09ORklHX0NSQ19UMTBESUY9eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19QQ0JDPW0KICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvbXBjODM3eF9yZGJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcKaW5kZXggNDE0ZWRhMy4uZjBmMGViZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9tcGM4Mzd4X3JkYl9kZWZjb25maWcKQEAgLTEsMTggKzEsMTYgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX1BQQ184M3h4PXkKIENPTkZJR19NUEM4Mzd4X1JEQj15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfUENJPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0zMCw3ICsyOCw2IEBACiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OApAQCAtNDMsMTIgKzQwLDkgQEAKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDQ1Nj15CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfR0lBTkZBUj15CiBDT05GSUdfTUFSVkVMTF9QSFk9eQogQ09ORklHX0ZJWEVEX1BIWT15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotQ09ORklHX0dJQU5GQVI9eQotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKQEAgLTYzLDcgKzU3LDYgQEAKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX01QQz15CiBDT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19ISURfQTRURUNIPXkKIENPTkZJR19ISURfQVBQTEU9eQogQ09ORklHX0hJRF9CRUxLSU49eQpAQCAtNzgsNyArNzEsNiBAQAogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKIENPTkZJR19ISURfU0FNU1VORz15Ci1DT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9NT049eQpAQCAtODcsMTggKzc5LDEzIEBACiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1Y0PXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKIENPTkZJR19DUkNfVDEwRElGPXkKICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODN4eC9zYmM4MzR4X2RlZmNvbmZpZwppbmRleCA0YWUzODU4Li5kMmU0ZDgyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84M3h4L3NiYzgzNHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzgzeHgvc2JjODM0eF9kZWZjb25maWcKQEAgLTEsOCArMSw2IEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0CiBDT05GSUdfU0xBQj15CkBAIC0xMyw3ICsxMSw2IEBACiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgzeHg9eQogQ09ORklHX1NCQzgzNHg9eQotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX1BDST15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQpAQCAtMzAsMTUgKzI3LDExIEBACiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKQEAgLTQ3LDExICs0MCw4IEBACiBDT05GSUdfQkxLX0RFVl9TRD15CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19CUk9BRENPTV9QSFk9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CitDT05GSUdfQlJPQURDT01fUEhZPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKQEAgLTc4LDE1ICs2OCwxMSBAQAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1Y0PXkKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfQ1JZUFRPX0VDQj1tCiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9nZV9pbXAzYV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2dlX2ltcDNhX2RlZmNvbmZpZwppbmRleCBiNGM0YjQ2Li5iMDkzOWRkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2dlX2ltcDNhX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2dlX2ltcDNhX2RlZmNvbmZpZwpAQCAtMSwxNyArMSwxNSBAQAogQ09ORklHX1BQQ184NXh4PXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKICMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAotIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX05TIGlzIG5vdCBzZXQKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKQEAgLTI4LDcgKzI2LDYgQEAKIENPTkZJR19RRV9HUElPPXkKIENPTkZJR19DUE0yPXkKIENPTkZJR19ISUdITUVNPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0haXzEwMDA9eQogQ09ORklHX1BSRUVNUFQ9eQogIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldApAQCAtNzEsOCArNjgsNiBAQAogQ09ORklHX05FVF9QS1RHRU49bQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9PRl9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQpAQCAtODEsMTMgKzc2LDExIEBACiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQogQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9GU0xfRUxCQz15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9bQogQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCiBDT05GSUdfQkxLX0RFVl9OQkQ9bQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgotQ09ORklHX01JU0NfREVWSUNFUz15CiBDT05GSUdfRFMxNjgyPXkKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19DSFJfREVWX1NUPXkKQEAgLTEyNSw3ICsxMTgsNiBAQAogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKLUNPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CiBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKQEAgLTE0MSw3ICsxMzMsNiBAQAogQ09ORklHX1NFTlNPUlNfTE05Mj15CiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX0dFRl9XRFQ9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19ISURfRFJBR09OUklTRT15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKIENPTkZJR19ISURfVFdJTkhBTj15CkBAIC0xNDksNyArMTQwLDYgQEAKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQotQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfSElEX0dSRUVOQVNJQT15CiBDT05GSUdfSElEX1NNQVJUSk9ZUExVUz15CkBAIC0xNzIsNyArMTYyLDYgQEAKIENPTkZJR19SVENfRFJWX1JYODU4MT15CiBDT05GSUdfRE1BREVWSUNFUz15CiBDT05GSUdfRlNMX0RNQT15Ci0jIENPTkZJR19ORVRfRE1BIGlzIG5vdCBzZXQKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CkBAIC0xOTQsNyArMTgzLDYgQEAKIENPTkZJR19UTVBGUz15CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKQEAgLTI0NCwxMCArMjMyLDggQEAKIENPTkZJR19DUkNfVDEwRElGPXkKIENPTkZJR19MSUJDUkMzMkM9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX01ENT15Ci1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX0RFUz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2ttcDIwNHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rbXAyMDR4X2RlZmNvbmZpZwppbmRleCBlMzYyZDU4Li5lOTRkM2ViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2ttcDIwNHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgva21wMjA0eF9kZWZjb25maWcKQEAgLTk0LDcgKzk0LDYgQEAKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotQ09ORklHX01URF9NMjVQODA9eQogQ09ORklHX01URF9QSFJBTT15CiBDT05GSUdfTVREX05BTkQ9eQogQ09ORklHX01URF9OQU5EX0VDQ19CQ0g9eQpAQCAtMTExLDcgKzExMCw2IEBACiBDT05GSUdfQ0hSX0RFVl9TVD15CiBDT05GSUdfQkxLX0RFVl9TUj15CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX1NDU0lfTE9HR0lORz15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfTkVUREVWSUNFUz15CkBAIC0xMjAsNyArMTE4LDYgQEAKICMgQ09ORklHX05FVF9WRU5ET1JfQUxURU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfQU1EIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfQVRIRVJPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0FERU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0JST0FEQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfQlJPQ0FERSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfVkVORE9SX0NIRUxTSU8gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgva3NpODU2MF9kZWZjb25maWcKaW5kZXggYWVlMGQxNy4uM2JlODVjNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9rc2k4NTYwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L2tzaTg1NjBfZGVmY29uZmlnCkBAIC0xLDE3ICsxLDE2IEBACiBDT05GSUdfUFBDXzg1eHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX0tTSTg1NjA9eQogQ09ORklHX0NQTTI9eQogQ09ORklHX0hJR0hNRU09eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0yNyw4ICsyNiw2IEBACiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKQEAgLTM5LDEyICszNiwxMSBAQAogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKIENPTkZJR19JREU9eQogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX01BUlZFTExfUEhZPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX01ESU9fRkNDPXkKIENPTkZJR19HSUFORkFSPXkKK0NPTkZJR19NQVJWRUxMX1BIWT15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CkBAIC01MywyMiArNDksMTUgQEAKIENPTkZJR19TRVJJQUxfQ1BNPXkKIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQogQ09ORklHX0dFTl9SVEM9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogQ09ORklHX0RFQlVHX01VVEVYRVM9eQogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NDBfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnCmluZGV4IDExNjYyYzIuLmUzOGMzNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU0MF9hZHNfZGVmY29uZmlnCkBAIC0xLDE3ICsxLDE2IEBACiBDT05GSUdfUFBDXzg1eHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FWFBFUlQ9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotQ09ORklHX01QQzg1NDBfQURTPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0VYUEVSVD15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVBDODU0MF9BRFM9eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0yNywxMyArMjYsMTAgQEAKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX0dJQU5GQVI9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldApAQCAtNDQsMjAgKzQwLDEzIEBACiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODU2MF9hZHNfZGVmY29uZmlnCmluZGV4IGViZTliMzBiLi40OGZjOGUzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1NjBfYWRzX2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxNCBAQAogQ09ORklHX1BQQ184NXh4PXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19NUEM4NTYwX0FEUz15CiBDT05GSUdfQklORk1UX01JU0M9eQogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RFQlVHPXkKQEAgLTMwLDEzICsyOSwxMiBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTUFSVkVMTF9QSFk9eQotQ09ORklHX0RBVklDT01fUEhZPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKLUNPTkZJR19FMTAwMD15CiBDT05GSUdfR0lBTkZBUj15CitDT05GSUdfRTEwMDA9eQorQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CkBAIC00NSwyMCArNDMsMTMgQEAKIENPTkZJR19TRVJJQUxfQ1BNPXkKIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQogQ09ORklHX0dFTl9SVEM9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L21wYzg1eHhfY2RzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnCmluZGV4IGViMjUyMjkuLmVjYjBjM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvbXBjODV4eF9jZHNfZGVmY29uZmlnCkBAIC0xLDE3ICsxLDE2IEBACiBDT05GSUdfUFBDXzg1eHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FWFBFUlQ9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAotQ09ORklHX01QQzg1eHhfQ0RTPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0VYUEVSVD15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVBDODV4eF9DRFM9eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19QQ0k9eQogQ09ORklHX05FVD15CkBAIC0yOCw3ICsyNyw2IEBACiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OApAQCAtMzYsMTAgKzM0LDggQEAKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQogQ09ORklHX0JMS19ERVZfVklBODJDWFhYPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci1DT05GSUdfRTEwMDA9eQogQ09ORklHX0dJQU5GQVI9eQorQ09ORklHX0UxMDAwPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKQEAgLTQ5LDIwICs0NSwxMyBAQAogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9wcGE4NTQ4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvcHBhODU0OF9kZWZjb25maWcKaW5kZXggZTgwYmI5Yi4uMTkwOTc4YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9wcGE4NTQ4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3BwYTg1NDhfZGVmY29uZmlnCkBAIC0xLDExICsxLDE2IEBACiBDT05GSUdfUFBDXzg1eHg9eQotQ09ORklHX1BQQTg1NDg9eQotQ09ORklHX0RUQz15Ci1DT05GSUdfREVGQVVMVF9VSU1BR0U9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKLSMgQ09ORklHX1BDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfUFBBODU0OD15CitDT05GSUdfRlNMX0xCQz15CitDT05GSUdfUkFQSURJTz15CitDT05GSUdfRlNMX1JJTz15CitDT05GSUdfUkFQSURJT19ETUFfRU5HSU5FPXkKK0NPTkZJR19SQVBJRElPX0VOVU1fQkFTSUM9eQorQ09ORklHX1JBUElESU9fVFNJNTdYPXkKK0NPTkZJR19SQVBJRElPX0NQU19YWD15CitDT05GSUdfUkFQSURJT19UU0k1Njg9eQorQ09ORklHX1JBUElESU9fQ1BTX0dFTjI9eQogQ09ORklHX0FEVkFOQ0VEX09QVElPTlM9eQogQ09ORklHX0xPV01FTV9TSVpFX0JPT0w9eQogQ09ORklHX0xPV01FTV9TSVpFPTB4NDAwMDAwMDAKQEAgLTE0LDUxICsxOSwyOCBAQAogQ09ORklHX1BBR0VfT0ZGU0VUX0JPT0w9eQogQ09ORklHX1BBR0VfT0ZGU0VUPTB4YjAwMDAwMDAKIENPTkZJR19LRVJORUxfU1RBUlRfQk9PTD15Ci1DT05GSUdfS0VSTkVMX1NUQVJUPTB4YjAwMDAwMDAKLSMgQ09ORklHX1BIWVNJQ0FMX1NUQVJUX0JPT0wgaXMgbm90IHNldAotQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKLUNPTkZJR19QSFlTSUNBTF9BTElHTj0weDA0MDAwMDAwCiBDT05GSUdfVEFTS19TSVpFX0JPT0w9eQogQ09ORklHX1RBU0tfU0laRT0weGIwMDAwMDAwCi0KLUNPTkZJR19GU0xfTEJDPXkKLUNPTkZJR19GU0xfRE1BPXkKLUNPTkZJR19GU0xfUklPPXkKLQotQ09ORklHX1JBUElESU89eQotQ09ORklHX1JBUElESU9fRE1BX0VOR0lORT15Ci1DT05GSUdfUkFQSURJT19UU0k1N1g9eQotQ09ORklHX1JBUElESU9fVFNJNTY4PXkKLUNPTkZJR19SQVBJRElPX0NQU19YWD15Ci1DT05GSUdfUkFQSURJT19DUFNfR0VOMj15Ci1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15Ci0KLUNPTkZJR19NVEQ9eQotQ09ORklHX01URF9CTEtERVZTPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotQ09ORklHX01URF9DRkk9eQotQ09ORklHX01URF9DRklfQU1EU1REPXkKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9QSFlTTUFQX09GPXkKLQotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX01QQz15Ci1DT05GSUdfSTJDX0NIQVJERVYKLUNPTkZJR19SVENfQ0xBU1M9eQotQ09ORklHX1JUQ19IQ1RPU1lTPXkKLUNPTkZJR19SVENfRFJWX0lTTDEyMDg9eQotCiBDT05GSUdfTkVUPXkKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9QTlA9eQorQ09ORklHX01URD15CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9CTE9DSz15CitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorQ09ORklHX01URF9QSFlTTUFQX09GPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX01BUlZFTExfUEhZPXkKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19EUlZfSVNMMTIwOD15CitDT05GSUdfRlNMX0RNQT15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ST09UX05GUz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zYmM4NTQ4X2RlZmNvbmZpZwppbmRleCAwMDhhN2E0Li43MmI3Y2NmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NiYzg1NDhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc2JjODU0OF9kZWZjb25maWcKQEAgLTEsMTYgKzEsMTMgQEAKIENPTkZJR19QUENfODV4eD15Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiBDT05GSUdfU0JDODU0OD15CiBDT05GSUdfQklORk1UX01JU0M9eQogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX1BDST15CiBDT05GSUdfTkVUPXkKQEAgLTI3LDE0ICsyNCwxOSBAQAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorQ09ORklHX01URD15CitDT05GSUdfTVREX0JMT0NLPXkKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKK0NPTkZJR19NVERfQ0ZJX0k0PXkKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfQlJPQURDT01fUEhZPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15CiBDT05GSUdfR0lBTkZBUj15CitDT05GSUdfQlJPQURDT01fUEhZPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKQEAgLTQ0LDMzICs0Niw5IEBACiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ST09UX05GUz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfTVREPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15Ci1DT05GSUdfTVREX0JMT0NLPXkKLUNPTkZJR19NVERfQ0ZJPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLUNPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLUNPTkZJR19NVERfQ0ZJX05PU1dBUD15Ci1DT05GSUdfTVREX0NGSV9HRU9NRVRSWT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci1DT05GSUdfTVREX0NGSV9JND15Ci1DT05GSUdfTVREX0NGSV9JTlRFTEVYVD15Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLUNPTkZJR19NVERfUEhZU01BUF9PRj15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCmluZGV4IDQzNWZkNDAuLjBhZDdiZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc29jcmF0ZXNfZGVmY29uZmlnCkBAIC0xLDIwICsxLDE3IEBACiBDT05GSUdfUFBDXzg1eHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNgogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKIENPTkZJR19TT0NSQVRFUz15CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX1BDST15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQpAQCAtMjgsMTMgKzI1LDggQEAKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogQ09ORklHX0NBTj15Ci1DT05GSUdfQ0FOX1JBVz15Ci1DT05GSUdfQ0FOX0JDTT15CiBDT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX09GX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15CkBAIC00OSwxMSArNDEsOCBAQAogQ09ORklHX0JMS19ERVZfU0Q9eQogIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTUFSVkVMTF9QSFk9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CitDT05GSUdfTUFSVkVMTF9QSFk9eQogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTgwMAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTQ4MAogQ09ORklHX0lOUFVUX0VWREVWPXkKQEAgLTY1LDcgKzU0LDYgQEAKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz0yCi1DT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQogQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQogQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX1JTQT15CkBAIC04Miw4ICs3MCw2IEBACiBDT05GSUdfRkJfTUI4NjJYWF9MSU1FPXkKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GT05UUz15Ci1DT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CiBDT05GSUdfVVNCX01PTj15CkBAIC05NSwxNSArODEsMTEgQEAKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19GT05UUz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3N0eF9ncDNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zdHhfZ3AzX2RlZmNvbmZpZwppbmRleCA1ZDRkYjE1Li5mNjZkMTZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3N0eF9ncDNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvc3R4X2dwM19kZWZjb25maWcKQEAgLTEsOSArMSw3IEBACiBDT05GSUdfUFBDXzg1eHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFZFUlNJT05TPXkKQEAgLTEyLDcgKzEwLDYgQEAKIENPTkZJR19ISUdITUVNPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX1BDST15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQpAQCAtMjgsNyArMjUsNiBAQAogQ09ORklHX05FVF9QS1RHRU49eQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19QQVJQT1JUPW0KIENPTkZJR19QQVJQT1JUX1BDPW0KIENPTkZJR19CTEtfREVWX0xPT1A9bQpAQCAtNDIsMTIgKzM4LDEwIEBACiBDT05GSUdfQ0hSX0RFVl9TVD1tCiBDT05GSUdfQkxLX0RFVl9TUj1tCiBDT05GSUdfQ0hSX0RFVl9TRz1tCi1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19NQVJWRUxMX1BIWT15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19HSUFORkFSPXkKK0NPTkZJR19NQVJWRUxMX1BIWT15CiBDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTI4MAogQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTEwMjQKIENPTkZJR19JTlBVVF9KT1lERVY9bQpAQCAtNjMsOCArNTcsNiBAQAogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19BVVRPRlNfRlM9bQogQ09ORklHX0FVVE9GUzRfRlM9eQogQ09ORklHX0lTTzk2NjBfRlM9bQogQ09ORklHX1VERl9GUz1tCkBAIC03MywxNiArNjUsMTEgQEAKIENPTkZJR19UTVBGUz15CiBDT05GSUdfQ1JBTUZTPW0KIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1NNQl9GUz1tCiBDT05GSUdfTkxTPXkKIENPTkZJR19DUkNfQ0NJVFQ9eQogQ09ORklHX0NSQ19UMTBESUY9bQotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19CRElfU1dJVENIPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDBfZGVmY29uZmlnCmluZGV4IDVhODAwZTYuLjRkYWFmMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQwX2RlZmNvbmZpZwpAQCAtMSwxNyArMSwxNSBAQAogQ09ORklHX1BQQ184NXh4PXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX1RRTTg1NDA9eQogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19QQ0k9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKQEAgLTI1LDkgKzIzLDcgQEAKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKQEAgLTM4LDEwICszNCw4IEBACiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19ORVRfUENJPXkKLUNPTkZJR19FMTAwPXkKIENPTkZJR19HSUFORkFSPXkKK0NPTkZJR19FMTAwPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKQEAgLTU4LDE1ICs1MiwxMCBAQAogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQxX2RlZmNvbmZpZwppbmRleCAyZDkzNjY5Li5iYjQwMmIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0MV9kZWZjb25maWcKQEAgLTEsMTcgKzEsMTUgQEAKIENPTkZJR19QUENfODV4eD15Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15CiAjIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19UUU04NTQxPXkKIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfUENJPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0yNSw5ICsyMyw3IEBACiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CkBAIC0zOCwxMCArMzQsOCBAQAogQ09ORklHX0JMS19ERVZfR0VORVJJQz15CiBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFg9eQogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTkVUX1BDST15Ci1DT05GSUdfRTEwMD15CiBDT05GSUdfR0lBTkZBUj15CitDT05GSUdfRTEwMD15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CkBAIC02MCwxNSArNTQsMTAgQEAKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQ4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU0OF9kZWZjb25maWcKaW5kZXggY2U4YTY3ZS4uNjg1ZDBmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTQ4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NDhfZGVmY29uZmlnCkBAIC0xLDIwICsxLDE5IEBACiBDT05GSUdfUFBDXzg1eHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX1RRTTg1NDg9eQogQ09ORklHX0hJR0hNRU09eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKIENPTkZJR19NQVRIX0VNVUxBVElPTj15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSUVQT1JUQlVTPXkKQEAgLTM0LDIyICszMywxNiBAQAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxLREVWUz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9QSFlTTUFQX09GPXkKIENPTkZJR19NVERfTkFORF9FQ0NfU01DPXkKIENPTkZJR19NVERfTkFORD15CiBDT05GSUdfTVREX05BTkRfRlNMX1VQTT15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX0dJQU5GQVI9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldApAQCAtNjMsMjIgKzU2LDE1IEBACiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19NUEM9eQogQ09ORklHX1NFTlNPUlNfTE03NT15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1JUQ19DTEFTUz15CiBDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTU1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU1NV9kZWZjb25maWcKaW5kZXggYTRlMTI5Ny4uMDJhOTMxZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTU1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NTVfZGVmY29uZmlnCkBAIC0xLDE3ICsxLDE1IEBACiBDT05GSUdfUFBDXzg1eHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKKyMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfVFFNODU1NT15CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX1BDST15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQpAQCAtMjUsOSArMjMsNyBAQAogIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKLUNPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQpAQCAtMzgsMTAgKzM0LDggQEAKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQogQ09ORklHX0JMS19ERVZfVklBODJDWFhYPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX05FVF9QQ0k9eQotQ09ORklHX0UxMDA9eQogQ09ORklHX0dJQU5GQVI9eQorQ09ORklHX0UxMDA9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldApAQCAtNjAsMTUgKzU0LDEwIEBACiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19KRkZTMl9GUz15CiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfTVNET1NfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU2MF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3RxbTg1NjBfZGVmY29uZmlnCmluZGV4IDM0MWFiZTEuLjYzM2Q1YjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgvdHFtODU2MF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC90cW04NTYwX2RlZmNvbmZpZwpAQCAtMSwxNyArMSwxNSBAQAogQ09ORklHX1BQQ184NXh4PXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKICMgQ09ORklHX0tBTExTWU1TIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19NU0RPU19QQVJUSVRJT04gaXMgbm90IHNldAogQ09ORklHX1RRTTg1NjA9eQogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19QQ0k9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKQEAgLTI1LDkgKzIzLDcgQEAKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAogQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NPTkNBVD15CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKQEAgLTM4LDEwICszNCw4IEBACiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19ORVRfUENJPXkKLUNPTkZJR19FMTAwPXkKIENPTkZJR19HSUFORkFSPXkKK0NPTkZJR19FMTAwPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKQEAgLTYwLDE1ICs1NCwxMCBAQAogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX01TRE9TX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3hlc19tcGM4NXh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnCmluZGV4IDcyZGY4YWIuLjM0ZjNlYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg1eHgveGVzX21wYzg1eHhfZGVmY29uZmlnCkBAIC0xLDI5ICsxLDI1IEBACiBDT05GSUdfUFBDXzg1eHg9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0yCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0FVRElUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiBDT05GSUdfWEVTX01QQzg1eHg9eQotQ09ORklHX0dQSU9fTVBDOFhYWD15CiBDT05GSUdfSElHSE1FTT15CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX1BDST15CiBDT05GSUdfUENJRVBPUlRCVVM9eQogIyBDT05GSUdfUENJRUFTUE0gaXMgbm90IHNldApAQCAtNTIsMTIgKzQ4LDkgQEAKIENPTkZJR19JUF9QTlBfQk9PVFA9eQogQ09ORklHX0lQX1BOUF9SQVJQPXkKIENPTkZJR19ORVRfSVBJUD15Ci1DT05GSUdfTkVUX0lQR1JFPXkKLUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15Ci1DT05GSUdfQVJQRD15CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldApAQCAtNjcsOCArNjAsNiBAQAogQ09ORklHX01URD15CiBDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKQEAgLTc5LDcgKzcwLDYgQEAKIENPTkZJR19NVERfTkFORD15CiBDT05GSUdfTVREX05BTkRfRlNMX0VMQkM9eQogQ09ORklHX01URF9OQU5EX0ZTTF9VUE09eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX05CRD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtODgsMTkgKzc4LDE1IEBACiBDT05GSUdfQ0hSX0RFVl9TVD15CiBDT05GSUdfQkxLX0RFVl9TUj15CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX1NDU0lfTE9HR0lORz15CiBDT05GSUdfQVRBPXkKIENPTkZJR19TQVRBX0FIQ0k9eQogQ09ORklHX1BBVEFfQUxJPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT15Ci1DT05GSUdfQlJPQURDT01fUEhZPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15Ci1DT05GSUdfRTEwMDA9eQogQ09ORklHX0dJQU5GQVI9eQotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMD15CitDT05GSUdfQlJPQURDT01fUEhZPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKQEAgLTEwOSw3ICs5NSw2IEBACiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgotQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKIENPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRPXkKIENPTkZJR19TRVJJQUxfODI1MF9SU0E9eQpAQCAtMTE4LDI1ICsxMDMsMTkgQEAKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfTVBDPXkKLUNPTkZJR19HUElPX1NZU0ZTPXkKLUNPTkZJR19HUElPX1BDQTk1M1g9eQogQ09ORklHX1NFTlNPUlNfRFMxNjIxPXkKIENPTkZJR19TRU5TT1JTX0xNOTA9eQogQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9JU1AxNzYwX0hDRD15CiBDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKLUNPTkZJR19MRURTX0dQSU89eQogQ09ORklHX0xFRFNfUENBOTU1WD15CiBDT05GSUdfTEVEU19UUklHR0VSUz15CiBDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKLUNPTkZJR19MRURTX1RSSUdHRVJfR1BJTz15CiBDT05GSUdfRURBQz15CiBDT05GSUdfRURBQ19NTV9FREFDPXkKIENPTkZJR19SVENfQ0xBU1M9eQpAQCAtMTQ3LDcgKzEyNiw2IEBACiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfWklTT0ZTPXkKQEAgLTE1OSwxNyArMTM3LDEzIEBACiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX0pGRlMyX1NVTU1BUlk9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKIENPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSE1BQz15CiBDT05GSUdfQ1JZUFRPX01ENT15CiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9wcGM5YV9kZWZjb25maWcKaW5kZXggN2NiOTcxOS4uOTc5MmEyYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZwpAQCAtMSw4ICsxLDggQEAKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQogQ09ORklHX0lLQ09ORklHPXkKQEAgLTEwLDcgKzEwLDYgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQpAQCAtMjEsMTEgKzIwLDkgQEAKIENPTkZJR19QUENfODZ4eD15CiBDT05GSUdfR0VGX1BQQzlBPXkKIENPTkZJR19ISUdITUVNPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0haXzEwMDA9eQogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSUVQT1JUQlVTPXkKICMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKQEAgLTUyLDggKzQ5LDYgQEAKIENPTkZJR19JUF9QTlBfQk9PVFA9eQogQ09ORklHX0lQX1BOUF9SQVJQPXkKIENPTkZJR19ORVRfSVBJUD1tCi1DT05GSUdfTkVUX0lQR1JFPW0KLUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15CkBAIC02OSw5ICs2NCw2IEBACiBDT05GSUdfTkVUX1BLVEdFTj1tCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NPTkNBVD15Ci1DT05GSUdfTVREX09GX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15CkBAIC04Myw3ICs3NSw2IEBACiBDT05GSUdfQkxLX0RFVl9OQkQ9bQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgotQ09ORklHX01JU0NfREVWSUNFUz15CiBDT05GSUdfRFMxNjgyPXkKIENPTkZJR19JREU9eQogQ09ORklHX0JMS19ERVZfSURFQ1M9eQpAQCAtOTMsMzUgKzg0LDMyIEBACiBDT05GSUdfQVRBPXkKIENPTkZJR19TQVRBX1NJTD15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRFVNTVk9bQogQ09ORklHX0JPTkRJTkc9bQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19ORVRDT05TT0xFPXkKIENPTkZJR19UVU49bQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUE9FPW0KIENPTkZJR19QUFBfQVNZTkM9bQogQ09ORklHX1BQUF9TWU5DX1RUWT1tCi1DT05GSUdfUFBQX0RFRkxBVEU9bQotQ09ORklHX1BQUF9CU0RDT01QPW0KLUNPTkZJR19QUFBPRT1tCiBDT05GSUdfU0xJUD1tCiBDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKIENPTkZJR19TTElQX1NNQVJUPXkKIENPTkZJR19TTElQX01PREVfU0xJUDY9eQotQ09ORklHX05FVENPTlNPTEU9eQogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CiBDT05GSUdfTlZSQU09eQogQ09ORklHX0kyQz15CkBAIC0xMzMsNyArMTIxLDYgQEAKIENPTkZJR19TRU5TT1JTX0xNOTI9eQogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19HRUZfV0RUPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfSElEX0E0VEVDSD15CiBDT05GSUdfSElEX0FQUExFPXkKIENPTkZJR19ISURfQkVMS0lOPXkKQEAgLTE0OCwxMCArMTM1LDggQEAKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQotQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiAjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQpAQCAtMTYwLDcgKzE0NSw2IEBACiAjIENPTkZJR19SVENfSU5URl9QUk9DIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1JYODU4MT15CiBDT05GSUdfU1RBR0lORz15Ci0jIENPTkZJR19TVEFHSU5HX0VYQ0xVREVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX1ZNRV9CVVM9eQogQ09ORklHX1ZNRV9UU0kxNDg9eQogQ09ORklHX0VYVDJfRlM9eQpAQCAtMTY5LDcgKzE1Myw2IEBACiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CkBAIC0xODIsNyArMTY1LDYgQEAKIENPTkZJR19UTVBGUz15CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19DSUZTPW0KQEAgLTIzMCw3ICsyMTIsNSBAQAogQ09ORklHX0NSQ19UMTBESUY9eQogQ09ORklHX0xJQkNSQzMyQz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnCmluZGV4IGVjYWJmNjIuLmNhZGMzNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjMzEwX2RlZmNvbmZpZwpAQCAtMSw4ICsxLDggQEAKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQogQ09ORklHX0lLQ09ORklHPXkKQEAgLTEwLDcgKzEwLDYgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQpAQCAtMjEsMTEgKzIwLDkgQEAKIENPTkZJR19QUENfODZ4eD15CiBDT05GSUdfR0VGX1NCQzMxMD15CiBDT05GSUdfSElHSE1FTT15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19IWl8xMDAwPXkKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19CSU5GTVRfTUlTQz15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lFUE9SVEJVUz15CiAjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0CkBAIC01Miw4ICs0OSw2IEBACiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15CiBDT05GSUdfTkVUX0lQSVA9bQotQ09ORklHX05FVF9JUEdSRT1tCi1DT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15CiBDT05GSUdfSVBfTVJPVVRFPXkKIENPTkZJR19JUF9QSU1TTV9WMT15CiBDT05GSUdfSVBfUElNU01fVjI9eQpAQCAtNjksOSArNjQsNiBAQAogQ09ORklHX05FVF9QS1RHRU49bQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9PRl9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQpAQCAtODMsNyArNzUsNiBAQAogQ09ORklHX0JMS19ERVZfTkJEPW0KIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKLUNPTkZJR19NSVNDX0RFVklDRVM9eQogQ09ORklHX0RTMTY4Mj15CiBDT05GSUdfSURFPXkKIENPTkZJR19CTEtfREVWX0lERUNTPXkKQEAgLTk0LDM1ICs4NSwzMiBAQAogQ09ORklHX1NBVEFfU0lMMjQ9eQogIyBDT05GSUdfQVRBX1NGRiBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRFVNTVk9bQogQ09ORklHX0JPTkRJTkc9bQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19ORVRDT05TT0xFPXkKIENPTkZJR19UVU49bQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUE9FPW0KIENPTkZJR19QUFBfQVNZTkM9bQogQ09ORklHX1BQUF9TWU5DX1RUWT1tCi1DT05GSUdfUFBQX0RFRkxBVEU9bQotQ09ORklHX1BQUF9CU0RDT01QPW0KLUNPTkZJR19QUFBPRT1tCiBDT05GSUdfU0xJUD1tCiBDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKIENPTkZJR19TTElQX1NNQVJUPXkKIENPTkZJR19TTElQX01PREVfU0xJUDY9eQotQ09ORklHX05FVENPTlNPTEU9eQogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CiBDT05GSUdfTlZSQU09eQogQ09ORklHX0kyQz15CkBAIC0xMzQsNyArMTIyLDYgQEAKIENPTkZJR19TRU5TT1JTX0xNOTI9eQogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19HRUZfV0RUPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfSElEX0E0VEVDSD15CiBDT05GSUdfSElEX0FQUExFPXkKIENPTkZJR19ISURfQkVMS0lOPXkKQEAgLTE0OSwxMCArMTM2LDggQEAKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQotQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiAjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQpAQCAtMTY2LDcgKzE1MSw2IEBACiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CkBAIC0xNzksNyArMTYzLDYgQEAKIENPTkZJR19UTVBGUz15CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19DSUZTPW0KQEAgLTIyNyw3ICsyMTAsNSBAQAogQ09ORklHX0NSQ19UMTBESUY9eQogQ09ORklHX0xJQkNSQzMyQz15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmM2MTBfZGVmY29uZmlnCmluZGV4IDRhNGE4NmYuLjJhYTdkOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzYxMF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfc2JjNjEwX2RlZmNvbmZpZwpAQCAtMSw4ICsxLDggQEAKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQogQ09ORklHX0lLQ09ORklHPXkKQEAgLTEwLDcgKzEwLDYgQEAKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfUkVMQVk9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX1NMQUI9eQogQ09ORklHX01PRFVMRVM9eQpAQCAtMjEsMTEgKzIwLDkgQEAKIENPTkZJR19QUENfODZ4eD15CiBDT05GSUdfR0VGX1NCQzYxMD15CiBDT05GSUdfSElHSE1FTT15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19IWl8xMDAwPXkKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCi1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lFUE9SVEJVUz15CiAjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0CkBAIC00Niw4ICs0Myw2IEBACiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKIENPTkZJR19JUF9QTlBfUkFSUD15CiBDT05GSUdfTkVUX0lQSVA9bQotQ09ORklHX05FVF9JUEdSRT1tCi1DT05GSUdfTkVUX0lQR1JFX0JST0FEQ0FTVD15CiBDT05GSUdfSVBfTVJPVVRFPXkKIENPTkZJR19JUF9QSU1TTV9WMT15CiBDT05GSUdfSVBfUElNU01fVjI9eQpAQCAtNjIsMjIgKzU3LDE3IEBACiBDT05GSUdfSVBWNl9UVU5ORUw9bQogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KIENPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQogQ09ORklHX0lQX05GX0ZJTFRFUj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCiBDT05GSUdfSVBfTkZfUkFXPW0KIENPTkZJR19JUF9ORl9BUlBUQUJMRVM9bQogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCi1DT05GSUdfSVA2X05GX1FVRVVFPW0KIENPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCiBDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQpAQCAtODUsNyArNzUsNiBAQAogQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQNl9ORl9GSUxURVI9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogQ09ORklHX0lQNl9ORl9SQVc9bQpAQCAtOTgsNyArODcsNiBAQAogQ09ORklHX0FUTV9CUjI2ODQ9bQogQ09ORklHX0JSSURHRT1tCiBDT05GSUdfVkxBTl84MDIxUT1tCi1DT05GSUdfV0FOX1JPVVRFUj1tCiBDT05GSUdfTkVUX1NDSEVEPXkKIENPTkZJR19ORVRfU0NIX0NCUT1tCiBDT05GSUdfTkVUX1NDSF9IVEI9bQpAQCAtMTIyLDkgKzExMCw2IEBACiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DT05DQVQ9eQotQ09ORklHX01URF9PRl9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQpAQCAtMTM2LDcgKzEyMSw2IEBACiBDT05GSUdfQkxLX0RFVl9OQkQ9bQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgotQ09ORklHX01JU0NfREVWSUNFUz15CiBDT05GSUdfRFMxNjgyPXkKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19DSFJfREVWX1NUPXkKQEAgLTE0NCwzNyArMTI4LDM0IEBACiBDT05GSUdfQVRBPXkKIENPTkZJR19TQVRBX1NJTD15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRFVNTVk9bQogQ09ORklHX0JPTkRJTkc9bQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19ORVRDT05TT0xFPXkKIENPTkZJR19UVU49bQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19HSUFORkFSPXkKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQogQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUE9BVE09bQorQ09ORklHX1BQUE9FPW0KIENPTkZJR19QUFBfQVNZTkM9bQogQ09ORklHX1BQUF9TWU5DX1RUWT1tCi1DT05GSUdfUFBQX0RFRkxBVEU9bQotQ09ORklHX1BQUF9CU0RDT01QPW0KLUNPTkZJR19QUFBPRT1tCi1DT05GSUdfUFBQT0FUTT1tCiBDT05GSUdfU0xJUD1tCiBDT05GSUdfU0xJUF9DT01QUkVTU0VEPXkKIENPTkZJR19TTElQX1NNQVJUPXkKIENPTkZJR19TTElQX01PREVfU0xJUDY9eQotQ09ORklHX05FVENPTlNPTEU9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15CiBDT05GSUdfTlZSQU09eQogQ09ORklHX0kyQz15CkBAIC0xODYsNyArMTY3LDYgQEAKIENPTkZJR19TRU5TT1JTX0xNOTI9eQogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19HRUZfV0RUPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfSElEX0E0VEVDSD15CiBDT05GSUdfSElEX0FQUExFPXkKIENPTkZJR19ISURfQkVMS0lOPXkKQEAgLTIwMSwxMCArMTgxLDggQEAKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQotQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9FSENJX0hDRD15CiAjIENPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQpAQCAtMjEzLDcgKzE5MSw2IEBACiAjIENPTkZJR19SVENfSU5URl9QUk9DIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1JYODU4MT15CiBDT05GSUdfU1RBR0lORz15Ci0jIENPTkZJR19TVEFHSU5HX0VYQ0xVREVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX1ZNRV9CVVM9eQogQ09ORklHX1ZNRV9UU0kxNDg9eQogQ09ORklHX0VYVDJfRlM9eQpAQCAtMjIyLDE0ICsxOTksMTIgQEAKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX01TRE9TX0ZTPXkKIENPTkZJR19WRkFUX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19DSUZTPW0KQEAgLTI3MywyOCArMjQ4LDIwIEBACiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCiBDT05GSUdfTkxTX1VURjg9bQorQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfU0VDVVJJVFk9eQogQ09ORklHX1NFQ1VSSVRZX05FVFdPUks9eQogQ09ORklHX0NSWVBUT19OVUxMPW0KIENPTkZJR19DUllQVE9fVEVTVD1tCi1DT05GSUdfQ1JZUFRPX0VDQj1tCiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCi1DT05GSUdfQ1JZUFRPX0FFUz1tCiBDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQogQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KIENPTkZJR19DUllQVE9fQ0FTVDY9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjEwX2hwY2RfZGVmY29uZmlnCmluZGV4IDliMTkyYmIuLmUzMjIwN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODYxMF9ocGNkX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2MTBfaHBjZF9kZWZjb25maWcKQEAgLTEsMjcgKzEsMjUgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorQ09ORklHX0xETV9QQVJUSVRJT049eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX1BQQ184Nnh4PXkKIENPTkZJR19NUEM4NjEwX0hQQ0Q9eQogQ09ORklHX0hJR0hNRU09eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0haXzEwMDA9eQotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTIKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX1BDST15CkBAIC00MiwxNCArNDAsMTIgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9QSFlTTUFQX09GPXkKIENPTkZJR19NVERfTkFORD15CiBDT05GSUdfTVREX05BTkRfRlNMX0VMQkM9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKQEAgLTYxLDE1ICs1NywxMyBAQAogQ09ORklHX1BBVEFfQUxJPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19EVU1NWT15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19ORVRfVFVMSVA9eQogQ09ORklHX1VMSTUyNlg9eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz0yCkBAIC03OSwxOSArNzMsMTQgQEAKIENPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQogQ09ORklHX1NFUklBTF84MjUwX1JTQT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQogQ09ORklHX0ZCPXkKIENPTkZJR19GQl9GU0xfRElVPXkKIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GT05UUz15Ci1DT05GSUdfRk9OVF84eDg9eQotQ09ORklHX0ZPTlRfOHgxNj15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CkBAIC0xMDgsMTcgKzk3LDE0IEBACiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkZTRD15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19MRE1fUEFSVElUSU9OPXkKIENPTkZJR19OTFM9eQogQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfRk9OVFM9eQorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX0RFQlVHX1NISVJRPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvbXBjODY0MV9ocGNuX2RlZmNvbmZpZwppbmRleCA3NmY0M2RmLi5hMzZlMTFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L21wYzg2NDFfaHBjbl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9tcGM4NjQxX2hwY25fZGVmY29uZmlnCkBAIC0xLDMzICsxLDMxIEBACiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiBDT05GSUdfQVVESVQ9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODZ4eD15CiBDT05GSUdfTVBDODY0MV9IUENOPXkKIENPTkZJR19ISUdITUVNPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19IWl8xMDAwPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCi1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfUENJPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC00NSwxMiArNDMsOSBAQAogQ09ORklHX0lQX1BOUF9CT09UUD15CiBDT05GSUdfSVBfUE5QX1JBUlA9eQogQ09ORklHX05FVF9JUElQPXkKLUNPTkZJR19ORVRfSVBHUkU9eQotQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQogQ09ORklHX0lQX01ST1VURT15CiBDT05GSUdfSVBfUElNU01fVjE9eQogQ09ORklHX0lQX1BJTVNNX1YyPXkKLUNPTkZJR19BUlBEPXkKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CkBAIC01OCwyOCArNTMsMjMgQEAKIENPTkZJR19JUFY2PXkKIENPTkZJR19JUF9TQ1RQPW0KIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfTkJEPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKLUNPTkZJR19NSVNDX0RFVklDRVM9eQogQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX0NIUl9ERVZfU1Q9eQogQ09ORklHX0JMS19ERVZfU1I9eQogQ09ORklHX0NIUl9ERVZfU0c9eQotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0xPR0dJTkc9eQogQ09ORklHX0FUQT15CiBDT05GSUdfU0FUQV9BSENJPXkKIENPTkZJR19QQVRBX0FMST15CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9eQotQ09ORklHX1ZJVEVTU0VfUEhZPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01JST15CiBDT05GSUdfR0lBTkZBUj15CitDT05GSUdfVklURVNTRV9QSFk9eQogQ09ORklHX0lOUFVUX0ZGX01FTUxFU1M9bQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldApAQCAtOTksNyArODksNiBAQAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TTkQ9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9eQpAQCAtMTIwLDcgKzEwOSw2IEBACiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKIENPTkZJR19ISURfUEVUQUxZTlg9eQogQ09ORklHX0hJRF9TQU1TVU5HPXkKLUNPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX01PTj15CkBAIC0xMzQsNyArMTIyLDYgQEAKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfSVNPOTY2MF9GUz1tCiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQpAQCAtMTU4LDE4ICsxNDUsMTIgQEAKIENPTkZJR19TWVNWX0ZTPW0KIENPTkZJR19VRlNfRlM9bQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotQ09ORklHX01BQ19QQVJUSVRJT049eQogQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvc2JjODY0MWRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcKaW5kZXggOTllYTg3NC4uZGI3OWJkZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9zYmM4NjQxZF9kZWZjb25maWcKQEAgLTEsOCArMSw4IEBACiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzPXkKIENPTkZJR19JS0NPTkZJRz15CkBAIC0xMCw3ICsxMCw2IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX1JFTEFZPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKIENPTkZJR19TTEFCPXkKIENPTkZJR19NT0RVTEVTPXkKQEAgLTIwLDEwICsxOSw4IEBACiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzg2eHg9eQogQ09ORklHX1NCQzg2NDFEPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSUVQT1JUQlVTPXkKICMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKQEAgLTQzLDggKzQwLDYgQEAKIENPTkZJR19JUF9QTlBfQk9PVFA9eQogQ09ORklHX0lQX1BOUF9SQVJQPXkKIENPTkZJR19ORVRfSVBJUD1tCi1DT05GSUdfTkVUX0lQR1JFPW0KLUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15CkBAIC01OSwyMiArNTQsMTcgQEAKIENPTkZJR19JUFY2X1RVTk5FTD1tCiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KIENPTkZJR19JUF9ORl9SQVc9bQogQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KLUNPTkZJR19JUDZfTkZfUVVFVUU9bQogQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCkBAIC04Miw3ICs3Miw2IEBACiBDT05GSUdfSVA2X05GX01BVENIX0hMPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCiBDT05GSUdfSVA2X05GX01BVENIX1JUPW0KLUNPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCiBDT05GSUdfSVA2X05GX0ZJTFRFUj1tCiBDT05GSUdfSVA2X05GX01BTkdMRT1tCiBDT05GSUdfSVA2X05GX1JBVz1tCkBAIC05NSw3ICs4NCw2IEBACiBDT05GSUdfQVRNX0JSMjY4ND1tCiBDT05GSUdfQlJJREdFPW0KIENPTkZJR19WTEFOXzgwMjFRPW0KLUNPTkZJR19XQU5fUk9VVEVSPW0KIENPTkZJR19ORVRfU0NIRUQ9eQogQ09ORklHX05FVF9TQ0hfQ0JRPW0KIENPTkZJR19ORVRfU0NIX0hUQj1tCkBAIC0xMTksOCArMTA3LDYgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NPTkNBVD15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CkBAIC0xNDUsMjggKzEzMSwyNSBAQAogQ09ORklHX0RNX01JUlJPUj15CiBDT05GSUdfRE1fWkVSTz15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRFVNTVk9bQogQ09ORklHX0JPTkRJTkc9bQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19ORVRDT05TT0xFPXkKIENPTkZJR19UVU49bQotQ09ORklHX0JST0FEQ09NX1BIWT15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX0dJQU5GQVI9eQotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19CUk9BRENPTV9QSFk9eQogQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBPQVRNPW0KK0NPTkZJR19QUFBPRT1tCiBDT05GSUdfUFBQX0FTWU5DPW0KIENPTkZJR19QUFBfU1lOQ19UVFk9bQotQ09ORklHX1BQUF9ERUZMQVRFPW0KLUNPTkZJR19QUFBfQlNEQ09NUD1tCi1DT05GSUdfUFBQT0U9bQotQ09ORklHX1BQUE9BVE09bQogQ09ORklHX1NMSVA9bQogQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CiBDT05GSUdfU0xJUF9TTUFSVD15CiBDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKLUNPTkZJR19ORVRDT05TT0xFPXkKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKQEAgLTE4MCw3ICsxNjMsNiBAQAogQ09ORklHX0kyQ19NUEM9eQogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19TT0ZUX1dBVENIRE9HPW0KLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUMl9GU19YQVRUUj15CiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQpAQCAtMTkwLDIwICsxNzIsMTQgQEAKIENPTkZJR19SRUlTRVJGU19GUz1tCiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQogQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfT0NGUzJfRlM9bQotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz1tCiBDT05GSUdfQVVUT0ZTNF9GUz1tCiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX01JTklYX0ZTPW0KIENPTkZJR19ST01GU19GUz1tCiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1NNQl9GUz1tCi1DT05GSUdfU01CX05MU19ERUZBVUxUPXkKIENPTkZJR19DSUZTPW0KIENPTkZJR19DSUZTX1hBVFRSPXkKIENPTkZJR19DSUZTX1BPU0lYPXkKQEAgLTI0NSwyOSArMjIxLDIxIEBACiBDT05GSUdfTkxTX0tPSThfUj1tCiBDT05GSUdfTkxTX0tPSThfVT1tCiBDT05GSUdfTkxTX1VURjg9bQotQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKIENPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiAjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19TRUNVUklUWT15CiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSz15CiBDT05GSUdfQ1JZUFRPX05VTEw9bQogQ09ORklHX0NSWVBUT19URVNUPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fUENCQz1tCiBDT05GSUdfQ1JZUFRPX0hNQUM9eQotQ09ORklHX0NSWVBUT19NRDQ9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCi1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KIENPTkZJR19DUllQVE9fQU5VQklTPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fQ0FTVDU9bQogQ09ORklHX0NSWVBUT19DQVNUNj1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hZGRlcjg3NV9kZWZjb25maWcKaW5kZXggMTViMWZmNS4uZDg5ZmY0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYWRkZXI4NzVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2FkZGVyODc1X2RlZmNvbmZpZwpAQCAtMSwyMSArMSwxOCBAQAogQ09ORklHX1BQQ184eHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19QUENfQURERVI4NzU9eQogQ09ORklHXzh4eF9DT1BZQkFDSz15CiBDT05GSUdfSFpfMTAwMD15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0zMiw0MiArMjksMzAgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9QSFlTTUFQX09GPXkKICMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19EQVZJQ09NX1BIWT15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorQ09ORklHX0RBVklDT01fUEhZPXkKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ1BNPXkKIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1RIRVJNQUw9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKLSMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfRlM9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMl9TTElDRUJZND15CitDT05GSUdfREVCVUdfSU5GTz15CitDT05GSUdfREVCVUdfRlM9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2FtaWdhb25lX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2FtaWdhb25lX2RlZmNvbmZpZwppbmRleCA4YzY2YjEzLi44NGYxYjQxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9hbWlnYW9uZV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYW1pZ2FvbmVfZGVmY29uZmlnCkBAIC0xLDggKzEsOSBAQAogQ09ORklHX0FMVElWRUM9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiAjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNQpAQCAtMTIsMTQgKzEzLDEzIEBACiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19BTUlHQV9QQVJUSVRJT049eQogIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX0FNSUdBT05FPXkKIENPTkZJR19ISUdITUVNPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19CSU5GTVRfTUlTQz15Ci0jIENPTkZJR19NSUdSQVRJT04gaXMgbm90IHNldAogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKQEAgLTM3LDExICszNyw5IEBACiAjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9ORl9UQVJHRVRfVUxPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9NQU5HTEUgaXMgbm90IHNldAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfUEFSUE9SVD15CiBDT05GSUdfUEFSUE9SVF9QQz15CiBDT05GSUdfUEFSUE9SVF9QQ19GSUZPPXkKQEAgLTY1LDI0ICs2MywxOSBAQAogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfUEhZTElCPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX05FVF9WRU5ET1JfM0NPTT15CiBDT05GSUdfVk9SVEVYPXkKLUNPTkZJR19ORVRfUENJPXkKIENPTkZJR184MTM5Q1A9eQogQ09ORklHXzgxMzlUT089eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQogQ09ORklHX1BQUD1tCi1DT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KIENPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfTVBQRT1tCitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQT0U9bQogQ09ORklHX1BQUF9BU1lOQz1tCiBDT05GSUdfUFBQX1NZTkNfVFRZPW0KLUNPTkZJR19QUFBfREVGTEFURT1tCi1DT05GSUdfUFBQX0JTRENPTVA9bQotQ09ORklHX1BQUF9NUFBFPW0KLUNPTkZJR19QUFBPRT1tCiBDT05GSUdfSU5QVVRfRVZERVY9eQogQ09ORklHX0lOUFVUX01JU0M9eQogQ09ORklHX0lOUFVUX1BDU1BLUj15CkBAIC05Niw3ICs4OSw2IEBACiBDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKIENPTkZJR19GQl9SQURFT049eQogQ09ORklHX0ZCXzNERlg9eQotQ09ORklHX0RJU1BMQVlfU1VQUE9SVD1tCiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CiBDT05GSUdfTE9HTz15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKQEAgLTEwNCw3ICs5Niw2IEBACiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKIENPTkZJR19ISURfUEVUQUxZTlg9eQogQ09ORklHX0hJRF9TQU1TVU5HPXkKLUNPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX0hJRF9UT1BTRUVEPXkKIENPTkZJR19VU0I9eQpAQCAtMTE3LDI3ICsxMDgsMjAgQEAKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKIENPTkZJR19FWFQ0X0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz1tCiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0FGRlNfRlM9bQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfQU1JR0FfUEFSVElUSU9OPXkKIENPTkZJR19OTFNfQVNDSUk9eQogQ09ORklHX05MU19JU084ODU5XzE9bQogQ09ORklHX0NSQ19UMTBESUY9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19YTU9OPXkKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQotQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0NCQz1tCiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2Mya19kZWZjb25maWcKaW5kZXggOGEwOGQ2ZC4uOTE4NjIyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYzJrX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jMmtfZGVmY29uZmlnCkBAIC0xLDE3ICsxLDIzIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0FVRElUPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19PUFJPRklMRT1tCiBDT05GSUdfS1BST0JFUz15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQotIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CitDT05GSUdfT1NGX1BBUlRJVElPTj15CitDT05GSUdfTUFDX1BBUlRJVElPTj15CitDT05GSUdfQlNEX0RJU0tMQUJFTD15CitDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OPXkKK0NPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQorQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTD15CitDT05GSUdfU0dJX1BBUlRJVElPTj15CitDT05GSUdfU1VOX1BBUlRJVElPTj15CiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ2eHg9eQpAQCAtMjQsNyArMzAsNiBAQAogQ09ORklHX0hJR0hNRU09eQogQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKIENPTkZJR19CSU5GTVRfTUlTQz15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfUE09eQogQ09ORklHX1BDSV9NU0k9eQogQ09ORklHX0hPVFBMVUdfUENJPXkKQEAgLTQzLDggKzQ4LDYgQEAKIENPTkZJR19JUF9QTlA9eQogQ09ORklHX0lQX1BOUF9ESENQPXkKIENPTkZJR19ORVRfSVBJUD1tCi1DT05GSUdfTkVUX0lQR1JFPW0KLUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15CkBAIC01MiwyMiArNTUsMTcgQEAKIENPTkZJR19JTkVUX0FIPW0KIENPTkZJR19JTkVUX0VTUD1tCiBDT05GSUdfSU5FVF9JUENPTVA9bQotQ09ORklHX0lQVjZfUFJJVkFDWT15CiBDT05GSUdfSU5FVDZfQUg9bQogQ09ORklHX0lORVQ2X0VTUD1tCiBDT05GSUdfSU5FVDZfSVBDT01QPW0KIENPTkZJR19JUFY2X1RVTk5FTD1tCiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQotQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KIENPTkZJR19JUF9ORl9SQVc9bQpAQCAtODEsNyArNzksNiBAQAogQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCiBDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQNl9ORl9GSUxURVI9bQogQ09ORklHX0lQNl9ORl9NQU5HTEU9bQogQ09ORklHX0lQNl9ORl9SQVc9bQpAQCAtMTMzLDggKzEzMCw2IEBACiBDT05GSUdfTkVUX0NMU19SU1ZQNj1tCiBDT05GSUdfTkVUX0NMU19JTkQ9eQogQ09ORklHX0JUPW0KLUNPTkZJR19CVF9MMkNBUD15Ci1DT05GSUdfQlRfU0NPPXkKIENPTkZJR19CVF9SRkNPTU09bQogQ09ORklHX0JUX1JGQ09NTV9UVFk9eQogQ09ORklHX0JUX0JORVA9bQpAQCAtMTQ5LDkgKzE0NCw2IEBACiBDT05GSUdfQlRfSENJVkhDST1tCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NPTkNBVD1tCi1DT05GSUdfTVREX09GX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj1tCiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CkBAIC0xNjIsNyArMTU0LDYgQEAKIENPTkZJR19CTEtfREVWX05CRD1tCiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST1tCiBDT05GSUdfQkxLX0RFVl9TRD1tCiBDT05GSUdfQ0hSX0RFVl9TVD1tCkBAIC0xODIsNyArMTczLDYgQEAKIENPTkZJR19BSUM3WFhYX1JFU0VUX0RFTEFZX01TPTE1MDAwCiAjIENPTkZJR19BSUM3WFhYX0RFQlVHX0VOQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BSUM3WFhYX1JFR19QUkVUVFlfUFJJTlQgaXMgbm90IHNldAotQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQ9bQogQ09ORklHX1NDU0lfQUlDNzlYWD1tCiBDT05GSUdfQUlDNzlYWF9DTURTX1BFUl9ERVZJQ0U9NAogQ09ORklHX0FJQzc5WFhfUkVTRVRfREVMQVlfTVM9MTUwMDAKQEAgLTE5OSwxOCArMTg5LDE0IEBACiBDT05GSUdfU0NTSV9JTklUSU89bQogQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9bQogQ09ORklHX1NDU0lfUUxPR0lDXzEyODA9bQotQ09ORklHX1NDU0lfTFBGQz1tCiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfRFVNTVk9bQogQ09ORklHX0JPTkRJTkc9bQotQ09ORklHX1RVTj1tCi1DT05GSUdfVklURVNTRV9QSFk9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKLUNPTkZJR19NVjY0M1hYX0VUSD15Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZPW0KIENPTkZJR19ORVRDT05TT0xFPW0KK0NPTkZJR19UVU49bQorIyBDT05GSUdfQVRNX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX01WNjQzWFhfRVRIPXkKK0NPTkZJR19WSVRFU1NFX1BIWT15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldApAQCAtMjE4LDEwICsyMDQsMTAgQEAKIENPTkZJR19JTlBVVF9NSVNDPXkKIENPTkZJR19JTlBVVF9VSU5QVVQ9bQogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CiBDT05GSUdfU0VSSUFMX01QU0M9eQogQ09ORklHX1NFUklBTF9NUFNDX0NPTlNPTEU9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX05WUkFNPW0KIENPTkZJR19HRU5fUlRDPW0KIENPTkZJR19SQVdfRFJJVkVSPXkKQEAgLTIzNiw3ICsyMjIsNyBAQAogQ09ORklHX1NFTlNPUlNfQURNMTAzMT1tCiBDT05GSUdfU0VOU09SU19EUzE2MjE9bQogQ09ORklHX1NFTlNPUlNfR0w1MThTTT1tCi1DT05GSUdfU0VOU09SU19JVDg3PW0KK0NPTkZJR19TRU5TT1JTX01BWDE2MTk9bQogQ09ORklHX1NFTlNPUlNfTE03NT1tCiBDT05GSUdfU0VOU09SU19MTTc3PW0KIENPTkZJR19TRU5TT1JTX0xNNzg9bQpAQCAtMjQ1LDIzICsyMzEsMTcgQEAKIENPTkZJR19TRU5TT1JTX0xNODU9bQogQ09ORklHX1NFTlNPUlNfTE04Nz1tCiBDT05GSUdfU0VOU09SU19MTTkwPW0KLUNPTkZJR19TRU5TT1JTX01BWDE2MTk9bQogQ09ORklHX1NFTlNPUlNfUENGODU5MT1tCi1DT05GSUdfU0VOU09SU19TTVNDNDdNMT1tCi1DT05GSUdfU0VOU09SU19TTVNDNDdCMzk3PW0KIENPTkZJR19TRU5TT1JTX1ZJQTY4NkE9bQogQ09ORklHX1NFTlNPUlNfVzgzNzgxRD1tCiBDT05GSUdfU0VOU09SU19XODNMNzg1VFM9bQotQ09ORklHX1NFTlNPUlNfVzgzNjI3SEY9bQogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19TT0ZUX1dBVENIRE9HPW0KIENPTkZJR19QQ0lQQ1dBVENIRE9HPW0KIENPTkZJR19XRFRQQ0k9bQogQ09ORklHX1VTQlBDV0FUQ0hET0c9bQogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAogQ09ORklHX1VTQj1tCi0jIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPW0KIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKQEAgLTM1MCwyNCArMzMwLDEyIEBACiBDT05GSUdfQ1JBTUZTPW0KIENPTkZJR19WWEZTX0ZTPW0KIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfTkZTX1Y0PXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUlBDU0VDX0dTU19TUEtNMz1tCiBDT05GSUdfQ0lGUz1tCiBDT05GSUdfQ0lGU19YQVRUUj15CiBDT05GSUdfQ0lGU19QT1NJWD15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19PU0ZfUEFSVElUSU9OPXkKLUNPTkZJR19NQUNfUEFSVElUSU9OPXkKLUNPTkZJR19CU0RfRElTS0xBQkVMPXkKLUNPTkZJR19NSU5JWF9TVUJQQVJUSVRJT049eQotQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15Ci1DT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMPXkKLUNPTkZJR19TR0lfUEFSVElUSU9OPXkKLUNPTkZJR19TVU5fUEFSVElUSU9OPXkKLUNPTkZJR19FRklfUEFSVElUSU9OPXkKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19ERUZBVUxUPSJ1dGY4IgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQpAQCAtNDA5LDIxICszNzcsMTYgQEAKIENPTkZJR19OTFNfS09JOF9VPW0KIENPTkZJR19DUkNfQ0NJVFQ9bQogQ09ORklHX0NSQ19UMTBESUY9bQorQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKK0NPTkZJR19ERUJVR19ISUdITUVNPXkKK0NPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKIENPTkZJR19ERUJVR19TUElOTE9DSz15Ci1DT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotQ09ORklHX0RFQlVHX0hJR0hNRU09eQotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQotQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKIENPTkZJR19CT09UWF9URVhUPXkKIENPTkZJR19QUENfRUFSTFlfREVCVUc9eQotQ09ORklHX1BQQ19FQVJMWV9ERUJVR19CT09UWD15Ci1DT05GSUdfS0VZUz15CiBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVM9eQogQ09ORklHX1NFQ1VSSVRZPXkKIENPTkZJR19TRUNVUklUWV9ORVRXT1JLPXkKQEAgLTQzMSwxNiArMzk0LDExIEBACiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9CT09UUEFSQU09eQogQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfRElTQUJMRT15CiBDT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19TSEExPXkKLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19BRVM9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19DQVNUNj1tCiBDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCmluZGV4IDdhN2IzYzguLjk3ODhiM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCkBAIC0zLDkgKzMsMTAgQEAKIENPTkZJR19BTFRJVkVDPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9NAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfRkhBTkRMRT15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKQEAgLTE3LDcgKzE4LDcgQEAKIENPTkZJR19PUFJPRklMRT1tCiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKICMgQ09ORklHX1BQQ19QT1dFUk5WIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QU0VSSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKQEAgLTM0LDggKzM1LDYgQEAKIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKIENPTkZJR19DUFVfRlJFUV9HT1ZfT05ERU1BTkQ9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkU9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19JUlFfQUxMX0NQVVM9eQogQ09ORklHX05VTUE9eQpAQCAtNjMsNyArNjIsNiBAQAogIyBDT05GSUdfSVBWNl9TSVQgaXMgbm90IHNldAogQ09ORklHX0lQVjZfVFVOTkVMPW0KIENPTkZJR19ORVRGSUxURVI9eQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1A9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTUFSSz1tCkBAIC05NCwxNiArOTIsMTIgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRT1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMj1tCi1DT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQotQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KIENPTkZJR19JUF9ORl9NQU5HTEU9bQogQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQogQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQpAQCAtMTEyLDcgKzEwNiw2IEBACiBDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTEzMTA3MgpAQCAtMTQ0LDI2ICsxMzcsMjQgQEAKIENPTkZJR19CT05ESU5HPW0KIENPTkZJR19NQUNWTEFOPW0KIENPTkZJR19UVU49eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKK0NPTkZJR19USUdPTjM9eQogQ09ORklHX0UxMDAwPW0KIENPTkZJR19TS0dFPW0KIENPTkZJR19TS1kyPW0KLUNPTkZJR19USUdPTjM9eQotQ09ORklHX1NQSURFUl9ORVQ9eQogQ09ORklHX0dFTElDX05FVD1tCiBDT05GSUdfR0VMSUNfV0lSRUxFU1M9eQorQ09ORklHX1NQSURFUl9ORVQ9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15CiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQogQ09ORklHX1NFUklBTF9UWFg5X05SX1VBUlRTPTIKIENPTkZJR19TRVJJQUxfVFhYOV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX0hWQ19SVEFTPXkKIENPTkZJR19IVkNfQkVBVD15CiBDT05GSUdfSVBNSV9IQU5ETEVSPW0KQEAgLTE3NCw5ICsxNjUsNyBAQAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKIENPTkZJR19JMkM9eQotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX1dBVENIRE9HPXkKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEPW0KICMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldApAQCAtMTk5LDcgKzE4OCw2IEBACiBDT05GSUdfVUlPPW0KIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQpAQCAtMjEwLDExICsxOTgsOCBAQAogQ09ORklHX1RNUEZTPXkKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19FRklfUEFSVElUSU9OPXkKIENPTkZJR19OTFNfSVNPODg1OV8xPW0KIENPTkZJR19OTFNfSVNPODg1OV8yPW0KIENPTkZJR19OTFNfSVNPODg1OV8zPW0KQEAgLTIyNywxMSArMjEyLDEwIEBACiBDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQogQ09ORklHX05MU19JU084ODU5XzE1PW0KICMgQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLIGlzIG5vdCBzZXQKLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKIENPTkZJR19YTU9OPXkKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQogQ09ORklHX0NSWVBUT19FQ0I9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbGViX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxlYl9kZWZjb25maWcKaW5kZXggYWNjY2JmZC4uZmY0NTRkYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbGViX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsZWJfZGVmY29uZmlnCkBAIC0zLDkgKzMsMTAgQEAKIENPTkZJR19BTFRJVkVDPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9NAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfRkhBTkRMRT15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTUKQEAgLTE1LDYgKzE2LDcgQEAKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogIyBDT05GSUdfUFBDX1BPV0VSTlYgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BTRVJJRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldApAQCAtMjMsOCArMjUsNiBAQAogIyBDT05GSUdfQ0JFX1RIRVJNIGlzIG5vdCBzZXQKIENPTkZJR19VREJHX1JUQVNfQ09OU09MRT15CiAjIENPTkZJR19SVEFTX1BST0MgaXMgbm90IHNldAotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19LRVhFQz15CiBDT05GSUdfTlVNQT15CkBAIC00MCw5ICs0MCw3IEBACiBDT05GSUdfSU5FVDZfSVBDT01QPW0KIENPTkZJR19JUFY2X1RVTk5FTD1tCiBDT05GSUdfTkVURklMVEVSPXkKLUNPTkZJR19JUF9ORl9RVUVVRT1tCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKQEAgLTU1LDcgKzUzLDYgQEAKIENPTkZJR19CTEtfREVWX1NEPW0KIENPTkZJR19CTEtfREVWX1NSPW0KIENPTkZJR19DSFJfREVWX1NHPW0KLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9bQogQ09ORklHX01EX0xJTkVBUj1tCkBAIC02OCwxNyArNjUsMTUgQEAKIENPTkZJR19ETV9aRVJPPW0KIENPTkZJR19ETV9NVUxUSVBBVEg9bQogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTUlJPXkKIENPTkZJR19TUElERVJfTkVUPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQogQ09ORklHX1NFUklBTF9UWFg5X05SX1VBUlRTPTMKIENPTkZJR19TRVJJQUxfVFhYOV9DT05TT0xFPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19IVkNfUlRBUz15CiBDT05GSUdfSFZDX0JFQVQ9eQogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKQEAgLTg5LDcgKzg0LDYgQEAKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfSElEREVWPXkKIENPTkZJR19VU0I9eQotIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KICMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldApAQCAtMTAzLDcgKzk3LDYgQEAKIENPTkZJR19FWFQzX0ZTPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfSVNPOTY2MF9GUz1tCiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19VREZfRlM9bQpAQCAtMTEzLDEzICsxMDYsMTAgQEAKIENPTkZJR19UTVBGUz15CiBDT05GSUdfSFVHRVRMQkZTPXkKIENPTkZJR19ORlNfRlM9bQotQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfTkZTRD1tCiBDT05GSUdfTkZTRF9WMz15CiBDT05GSUdfTkZTRF9WM19BQ0w9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfRUZJX1BBUlRJVElPTj15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCiBDT05GSUdfTkxTX0lTTzg4NTlfMj1tCiBDT05GSUdfTkxTX0lTTzg4NTlfMz1tCkBAIC0xMzIsMTEgKzEyMiwxMCBAQAogQ09ORklHX05MU19JU084ODU5XzE0PW0KIENPTkZJR19OTFNfSVNPODg1OV8xNT1tCiBDT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKIENPTkZJR19YTU9OPXkKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQogQ09ORklHX0NSWVBUT19OVUxMPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NocnAzMl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jaHJwMzJfZGVmY29uZmlnCmluZGV4IGRiNWIzMDguLjI1M2E5ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NocnAzMl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2hycDMyX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyNCBAQAogQ09ORklHX1NNUD15Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKIENPTkZJR19ISUdITUVNPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19CSU5GTVRfTUlTQz15CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKLSMgQ09ORklHX01JR1JBVElPTiBpcyBub3Qgc2V0CiBDT05GSUdfSVNBPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0zNywxMSArMzYsOSBAQAogIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UQ1BNU1MgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEUgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0cgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfTUFOR0xFIGlzIG5vdCBzZXQKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfRkQ9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtNjAsMzEgKzU3LDI4IEBACiBDT05GSUdfU0NTSV9TWU01M0M4WFhfMj15CiBDT05GSUdfU0NTSV9TWU01M0M4WFhfRE1BX0FERFJFU1NJTkdfTU9ERT0wCiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19QQ05FVDMyPXkKIENPTkZJR19ORVRfVFVMSVA9eQogQ09ORklHX0RFNFg1PXkKLUNPTkZJR19ORVRfUENJPXkKLUNPTkZJR19QQ05FVDMyPXkKK0NPTkZJR19NVjY0M1hYX0VUSD15CiBDT05GSUdfODEzOUNQPXkKIENPTkZJR184MTM5VE9PPXkKICMgQ09ORklHXzgxMzlUT09fUElPIGlzIG5vdCBzZXQKIENPTkZJR19WSUFfUkhJTkU9eQotQ09ORklHX01WNjQzWFhfRVRIPXkKIENPTkZJR19QUFA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCiBDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX01QUEU9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUE9FPW0KIENPTkZJR19QUFBfQVNZTkM9bQogQ09ORklHX1BQUF9TWU5DX1RUWT1tCi1DT05GSUdfUFBQX0RFRkxBVEU9bQotQ09ORklHX1BQUF9CU0RDT01QPW0KLUNPTkZJR19QUFBfTVBQRT1tCi1DT05GSUdfUFBQT0U9bQogQ09ORklHX0lOUFVUX0VWREVWPXkKIENPTkZJR19JTlBVVF9NSVNDPXkKIENPTkZJR19JTlBVVF9VSU5QVVQ9eQogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19CUklRX1BBTkVMPW0KICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfTlZSQU09eQogQ09ORklHX0dFTl9SVEM9eQpAQCAtMTAxLDE0ICs5NSwxMiBAQAogQ09ORklHX0ZCX0FUWV9DVD15CiBDT05GSUdfRkJfQVRZX0dYPXkKIENPTkZJR19GQl8zREZYPXkKLUNPTkZJR19ESVNQTEFZX1NVUFBPUlQ9bQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQogQ09ORklHX0xPR089eQogQ09ORklHX0hJRF9HWVJBVElPTj15CiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKIENPTkZJR19ISURfUEVUQUxZTlg9eQogQ09ORklHX0hJRF9TQU1TVU5HPXkKLUNPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX01PTj15CkBAIC0xMjAsMjYgKzExMiwxOSBAQAogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQogQ09ORklHX0VYVDRfRlM9eQotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX01TRE9TX0ZTPW0KIENPTkZJR19WRkFUX0ZTPW0KIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLUNPTkZJR19NQUNfUEFSVElUSU9OPXkKIENPTkZJR19OTFNfQVNDSUk9eQogQ09ORklHX05MU19JU084ODU5XzE9bQogQ09ORklHX0NSQ19UMTBESUY9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19YTU9OPXkKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQotQ09ORklHX0NSWVBUTz15CiBDT05GSUdfQ1JZUFRPX0NCQz1tCiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY29yZW5ldDMyX3NtcF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jb3JlbmV0MzJfc21wX2RlZmNvbmZpZwppbmRleCA2MTFlZmU5Li41MTg2NmYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jb3JlbmV0MzJfc21wX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jb3JlbmV0MzJfc21wX2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxMiBAQAogQ09ORklHX1BQQ184NXh4PXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9OAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKIENPTkZJR19BVURJVD15CiBDT05GSUdfTk9fSFo9eQogQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKQEAgLTU3LDcgKzU2LDYgQEAKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15Ci1DT05GSUdfQVJQRD15CiBDT05GSUdfSU5FVF9BSD15CiBDT05GSUdfSU5FVF9FU1A9eQogQ09ORklHX0lORVRfSVBDT01QPXkKQEAgLTY5LDE3ICs2NywxNSBAQAogQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotQ09ORklHX01URF9NMjVQODA9eQogQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9GU0xfRUxCQz15CiBDT05GSUdfTVREX05BTkRfRlNMX0lGQz15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKK0NPTkZJR19NVERfU1BJX05PUj15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKQEAgLTg3LDcgKzgzLDYgQEAKIENPTkZJR19DSFJfREVWX1NUPXkKIENPTkZJR19CTEtfREVWX1NSPXkKIENPTkZJR19DSFJfREVWX1NHPXkKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKIENPTkZJR19BVEE9eQpAQCAtOTgsMTAgKzkzLDExIEBACiBDT05GSUdfUEFUQV9TSUw2ODA9eQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0ZTTF9QUV9NRElPPXkKK0NPTkZJR19GU0xfWEdNQUNfTURJTz15CiBDT05GSUdfRTEwMDA9eQogQ09ORklHX0UxMDAwRT15Ci1DT05GSUdfVklURVNTRV9QSFk9eQogQ09ORklHX0FUODAzWF9QSFk9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKIENPTkZJR19GSVhFRF9QSFk9eQogIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldApAQCAtMTIzLDcgKzExOSw2IEBACiBDT05GSUdfU1BJX0ZTTF9TUEk9eQogQ09ORklHX1NQSV9GU0xfRVNQST15CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQogQ09ORklHX1VTQl9ISUQ9bQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX01PTj15CkBAIC0xNDMsMTAgKzEzOCwxMCBAQAogQ09ORklHX1JUQ19EUlZfRFMxMzc0PXkKIENPTkZJR19SVENfRFJWX0RTMzIzMj15CiBDT05GSUdfVUlPPXkKLUNPTkZJR19TVEFHSU5HPXkKLUNPTkZJR19NRU1PUlk9eQogQ09ORklHX1ZJUlRfRFJJVkVSUz15CiBDT05GSUdfRlNMX0hWX01BTkFHRVI9eQorQ09ORklHX1NUQUdJTkc9eQorQ09ORklHX0ZTTF9DT1JFTkVUX0NGPXkKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CkBAIC0xNzAsMTcgKzE2NSwxNSBAQAogQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX05MU19VVEY4PW0KK0NPTkZJR19ERUJVR19JTkZPPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfU0hJUlE9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX1JDVV9UUkFDRT15CiBDT05GSUdfQ1JZUFRPX05VTEw9eQogQ09ORklHX0NSWVBUT19QQ0JDPW0KIENPTkZJR19DUllQVE9fTUQ0PXkKIENPTkZJR19DUllQVE9fU0hBMjU2PXkKIENPTkZJR19DUllQVE9fU0hBNTEyPXkKLUNPTkZJR19DUllQVE9fQUVTPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVWX0ZTTF9DQUFNPXkKLUNPTkZJR19GU0xfQ09SRU5FVF9DRj15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jb3JlbmV0NjRfc21wX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NvcmVuZXQ2NF9zbXBfZGVmY29uZmlnCmluZGV4IGJlMjRhMTguLmQ2YzBjODEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NvcmVuZXQ2NF9zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NvcmVuZXQ2NF9zbXBfZGVmY29uZmlnCkBAIC02OSw2ICs2OSw3IEBACiBDT05GSUdfTVREX05BTkQ9eQogQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDPXkKIENPTkZJR19NVERfTkFORF9GU0xfSUZDPXkKK0NPTkZJR19NVERfU1BJX05PUj15CiBDT05GSUdfTVREX1VCST15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC03OSw3ICs4MCwxMSBAQAogQ09ORklHX1NBVEFfU0lMMjQ9eQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPXkKK0NPTkZJR19GU0xfUFFfTURJTz15CitDT05GSUdfRlNMX1hHTUFDX01ESU89eQogQ09ORklHX0UxMDAwRT15CitDT05GSUdfVklURVNTRV9QSFk9eQorQ09ORklHX0ZJWEVEX1BIWT15CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CkBAIC0xMTgsNyArMTIzLDYgQEAKIENPTkZJR19WSVJUX0RSSVZFUlM9eQogQ09ORklHX0ZTTF9IVl9NQU5BR0VSPXkKIENPTkZJR19GU0xfQ09SRU5FVF9DRj15Ci1DT05GSUdfTUVNT1JZPXkKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKIENPTkZJR19JU085NjYwX0ZTPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4MjQ4ZV9kZWZjb25maWcKaW5kZXggZmNlZmZiM2MuLjdjMTM3MDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODI0OGVfZGVmY29uZmlnCkBAIC01LDEzICs1LDEzIEBACiBDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQogQ09ORklHX1NMQUI9eQorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiAjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgyeHg9eQogQ09ORklHX0VQODI0OEU9eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX1BDST15CiBDT05GSUdfTkVUPXkKQEAgLTI4LDcgKzI4LDYgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUz15CkBAIC0zOCwxNCArMzcsMTEgQEAKICMgQ09ORklHX01URF9DRklfSTEgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19EQVZJQ09NX1BIWT15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CitDT05GSUdfREFWSUNPTV9QSFk9eQogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfVlQgaXMgbm90IHNldApAQCAtNTcsMjcgKzUzLDIwIEBACiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfQVVUT0ZTNF9GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogQ09ORklHX05MUz15CiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiBDT05GSUdfTkxTX0FTQ0lJPXkKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKIENPTkZJR19OTFNfVVRGOD15Ci0jIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci0jIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0JESV9TV0lUQ0g9eQogQ09ORklHX0NSWVBUT19DQkM9eQogQ09ORklHX0NSWVBUT19FQ0I9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2VwODh4Y19kZWZjb25maWcKaW5kZXggYjhhNzlkNy4uZWU5NmJlOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZXA4OHhjX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9lcDg4eGNfZGVmY29uZmlnCkBAIC0xLDI0ICsxLDIwIEBACiBDT05GSUdfUFBDXzh4eD15Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogQ09ORklHX1BQQ19FUDg4WEM9eQogQ09ORklHXzh4eF9DT1BZQkFDSz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfSFpfMTAwPXkKLUNPTkZJR184WFhfTUlOSU1BTF9GUEVNVT15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0zNSwyNyArMzEsMjEgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQkxLX0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0xYVF9QSFk9eQotQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfRlNfRU5FVD15CiAjIENPTkZJR19GU19FTkVUX0hBU19TQ0MgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19MWFRfUEhZPXkKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ1BNPXkKIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldApAQCAtNjMsMTMgKzUzLDggQEAKIENPTkZJR19UTVBGUz15CiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMl9TTElDRUJZND15CitDT05GSUdfREVCVUdfSU5GTz15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCmluZGV4IDZmYWIwNmYuLjFkOWFkODUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9nNV9kZWZjb25maWcKQEAgLTIsMTIgKzIsMTQgQEAKIENPTkZJR19BTFRJVkVDPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9NAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19GSEFORExFPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfQ0dST1VQUz15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKQEAgLTE2LDE3ICsxOCwxNSBAQAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFZFUlNJT05TPXkKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiAjIENPTkZJR19QUENfUE9XRVJOViBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUFNFUklFUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0ZSRVE9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9eQogQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9eQogQ09ORklHX0NQVV9GUkVRX1BNQUM2ND15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfS0VYRUM9eQogQ09ORklHX0lSUV9BTExfQ1BVUz15Ci0jIENPTkZJR19NSUdSQVRJT04gaXMgbm90IHNldAogQ09ORklHX1BDSV9NU0k9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKQEAgLTUyLDkgKzUyLDkgQEAKIENPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCiBDT05GSUdfTkZfQ1RfTkVUTElOSz1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQotQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKK0NPTkZJR19ERVZUTVBGUz15CitDT05GSUdfREVWVE1QRlNfTU9VTlQ9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9OQkQ9bQogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTY5LDcgKzY5LDYgQEAKIENPTkZJR19CTEtfREVWX1NSPXkKIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKIENPTkZJR19TQ1NJX1NQSV9BVFRSUz15CiBDT05GSUdfQVRBPXkKQEAgLTg3LDMzICs4NiwyOSBAQAogQ09ORklHX0RNX1NOQVBTSE9UPW0KIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1pFUk89bQotQ09ORklHX0lFRUUxMzk0PXkKLUNPTkZJR19JRUVFMTM5NF9PSENJMTM5ND15Ci1DT05GSUdfSUVFRTEzOTRfU0JQMj1tCi1DT05GSUdfSUVFRTEzOTRfRVRIMTM5ND1tCi1DT05GSUdfSUVFRTEzOTRfUkFXSU89eQotQ09ORklHX0lFRUUxMzk0X1ZJREVPMTM5ND1tCi1DT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KIENPTkZJR19BREJfUE1VPXkKIENPTkZJR19QTUFDX1NNVT15CiBDT05GSUdfTUFDX0VNVU1PVVNFQlROPXkKLUNPTkZJR19USEVSTV9QTTcyPXkKIENPTkZJR19XSU5ERkFSTT15CiBDT05GSUdfV0lOREZBUk1fUE04MT15CiBDT05GSUdfV0lOREZBUk1fUE05MT15CiBDT05GSUdfV0lOREZBUk1fUE0xMTI9eQogQ09ORklHX1dJTkRGQVJNX1BNMTIxPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19EVU1NWT1tCiBDT05GSUdfQk9ORElORz1tCitDT05GSUdfRFVNTVk9bQogQ09ORklHX1RVTj1tCi1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotQ09ORklHX1NVTkdFTT15CiBDT05GSUdfQUNFTklDPW0KIENPTkZJR19BQ0VOSUNfT01JVF9USUdPTl9JPXkKLUNPTkZJR19FMTAwMD15CiBDT05GSUdfVElHT04zPXkKK0NPTkZJR19FMTAwMD15CitDT05GSUdfU1VOR0VNPXkKK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQT0U9bQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KIENPTkZJR19VU0JfQ0FUQz1tCiBDT05GSUdfVVNCX0tBV0VUSD1tCiBDT05GSUdfVVNCX1BFR0FTVVM9bQpAQCAtMTIzLDEyICsxMTgsNiBAQAogIyBDT05GSUdfVVNCX05FVF9ORVQxMDgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTkVUX1pBVVJVUyBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPW0KLUNPTkZJR19QUFBfQVNZTkM9bQotQ09ORklHX1BQUF9TWU5DX1RUWT1tCi1DT05GSUdfUFBQX0RFRkxBVEU9bQotQ09ORklHX1BQUF9CU0RDT01QPW0KLUNPTkZJR19QUFBPRT1tCiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfSk9ZREVWPW0KIENPTkZJR19JTlBVVF9FVkRFVj15CkBAIC0xNDAsMTAgKzEyOSw4IEBACiBDT05GSUdfR0VOX1JUQz15CiBDT05GSUdfUkFXX0RSSVZFUj15CiBDT05GSUdfSTJDX0NIQVJERVY9eQotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogQ09ORklHX0FHUD1tCiBDT05GSUdfQUdQX1VOSU5PUlRIPW0KLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCiBDT05GSUdfRkI9eQogQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogQ09ORklHX0ZCX1RJTEVCTElUVElORz15CkBAIC0xNjcsMTUgKzE1NCwxNCBAQAogQ09ORklHX1NORF9BT0FfVEFTPW0KIENPTkZJR19TTkRfQU9BX1RPT05JRT1tCiBDT05GSUdfU05EX1VTQl9BVURJTz1tCi1DT05GSUdfSElEX1BJRD15Ci1DT05GSUdfVVNCX0hJRERFVj15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKIENPTkZJR19MT0dJVEVDSF9GRj15CiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKIENPTkZJR19ISURfUEVUQUxZTlg9eQogQ09ORklHX0hJRF9TQU1TVU5HPXkKLUNPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9QSUQ9eQorQ09ORklHX1VTQl9ISURERVY9eQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX01PTj15CiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKQEAgLTI0NSw4ICsyMzEsNiBAQAogQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfRlM9bQogQ09ORklHX1hGU19QT1NJWF9BQ0w9eQotQ09ORklHX0lOT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz1tCiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKIENPTkZJR19aSVNPRlM9eQpAQCAtMjYwLDE0ICsyNDQsMTIgQEAKIENPTkZJR19IRlNQTFVTX0ZTPW0KIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjNfQUNMPXkKIENPTkZJR19ORlNEX1Y0PXkKIENPTkZJR19DSUZTPW0KLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT15CkBAIC0yNzYsMzAgKzI1OCwyMSBAQAogQ09ORklHX05MU19JU084ODU5XzE1PXkKIENPTkZJR19OTFNfVVRGOD15CiBDT05GSUdfQ1JDX1QxMERJRj15Ci1DT05GSUdfTElCQ1JDMzJDPW0KLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfRlM9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX01VVEVYRVM9eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTEFURU5DWVRPUD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX0JPT1RYX1RFWFQ9eQogQ09ORklHX1BQQ19FQVJMWV9ERUJVRz15Ci1DT05GSUdfUFBDX0VBUkxZX0RFQlVHX0JPT1RYPXkKIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQotQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19QQ0JDPW0KIENPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19BRVM9bQogQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19BUkM0PW0KIENPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQogQ09ORklHX0NSWVBUT19DQVNUNT1tCiBDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2dhbWVjdWJlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2dhbWVjdWJlX2RlZmNvbmZpZwppbmRleCA5ZWYyY2MxLi42YzZjNjBmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9nYW1lY3ViZV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZ2FtZWN1YmVfZGVmY29uZmlnCkBAIC0xLDExICsxLDkgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0xPQ0FMVkVSU0lPTj0iLWdjbiIKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BFUkZfRVZFTlRTPXkKQEAgLTIyLDcgKzIwLDYgQEAKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfS0VYRUM9eQotIyBDT05GSUdfTUlHUkFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0FEVkFOQ0VEX09QVElPTlM9eQogQ09ORklHX05FVD15CkBAIC00MiwxNSArMzksMTEgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfTkJEPW0KIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MgogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUz1tCiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CkBAIC02MSw4ICs1NCw4IEBACiBDT05GSUdfSU5QVVRfSk9ZU1RJQ0s9eQogIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU9fU0VSUE9SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTY0CisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfRkI9eQpAQCAtODYsNyArNzksNiBAQAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX0pPTElFVD15CiBDT05GSUdfTVNET1NfRlM9eQpAQCAtOTUsMjAgKzg3LDE1IEBACiAjIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUiBpcyBub3Qgc2V0CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfQ0lGUz15CiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15CiBDT05GSUdfQ1JDX0NDSVRUPXkKIENPTkZJR19QUklOVEtfVElNRT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERUJVR19TUElOTE9DSz15CiBDT05GSUdfREVCVUdfTVVURVhFUz15Ci1DT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTEFURU5DWVRPUD15Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQogQ09ORklHX1NDSEVEX1RSQUNFUj15CiBDT05GSUdfRE1BX0FQSV9ERUJVRz15CiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2hvbGx5X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2hvbGx5X2RlZmNvbmZpZwppbmRleCA5NGViZmVlLi41ZTBmMjU1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9ob2xseV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvaG9sbHlfZGVmY29uZmlnCkBAIC0xLDE3ICsxLDE2IEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15CiBDT05GSUdfTU9EVUxFUz15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRDZ4eD15CiBDT05GSUdfUFBDX0hPTExZPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19CSU5GTVRfTUlTQz15CiBDT05GSUdfQ01ETElORV9CT09MPXkKIENPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCIKQEAgLTMwLDE4ICsyOSwxNSBAQAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCiBDT05GSUdfQkxLX0RFVl9TRD15CiBDT05GSUdfQVRBPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19QSFlMSUI9eQotQ09ORklHX05FVF9FVEhFUk5FVD15Ci1DT05GSUdfTkVUX1ZFTkRPUl8zQ09NPXkKIENPTkZJR19WT1JURVg9eQogQ09ORklHX1RTSTEwOF9FVEg9eQorQ09ORklHX1BIWUxJQj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CkBAIC01NywxNCArNTMsMTEgQEAKIENPTkZJR19HRU5fUlRDPXkKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKIENPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAogQ09ORklHX1hNT049eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbGlua3N0YXRpb25fZGVmY29uZmlnCmluZGV4IGI1ZTY4NDYuLjYyYWU5MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2xpbmtzdGF0aW9uX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9saW5rc3RhdGlvbl9kZWZjb25maWcKQEAgLTEsNiArMSw3IEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CkBAIC0xMywxMCArMTQsNyBAQAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVENnh4PXkKIENPTkZJR19MSU5LU1RBVElPTj15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfSFpfMTAwPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15CkBAIC00MywxMiArNDEsOCBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KLUNPTkZJR19ORl9OQVQ9bQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCkBAIC01OCwxMCArNTIsNyBAQAogQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKQEAgLTcyLDI3ICs2MywyMyBAQAogIyBDT05GSUdfTVREX0NGSV9JMiBpcyBub3Qgc2V0CiBDT05GSUdfTVREX0NGSV9BTURTVEQ9eQogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTIKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLUNPTkZJR19NSVNDX0RFVklDRVM9eQogQ09ORklHX0VFUFJPTV9MRUdBQ1k9bQogQ09ORklHX0JMS19ERVZfU0Q9eQogQ09ORklHX0NIUl9ERVZfU0c9eQotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19BVEE9eQogQ09ORklHX1BBVEFfSVQ4MjFYPXkKIENPTkZJR19QQVRBX1NJTDY4MD15CiBDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfTkVUQ09OU09MRT15CiBDT05GSUdfVFVOPW0KLUNPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX05FVF9UVUxJUD15CiBDT05GSUdfVFVMSVA9eQogQ09ORklHX1RVTElQX01NSU89eQogQ09ORklHX1I4MTY5PXkKLUNPTkZJR19ORVRDT05TT0xFPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9FVkRFVj1tCiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CkBAIC0xMDYsNyArOTMsNiBAQAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19NUEM9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19ISUQ9bQogIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CkBAIC0xMjYsNyArMTEyLDYgQEAKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiBDT05GSUdfWEZTX0ZTPW0KLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CkBAIC0xMzcsNyArMTIyLDYgQEAKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQpAQCAtMTUzLDE1ICsxMzcsOSBAQAogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQotQ09ORklHX0NSWVBUT19FQ0I9bQogQ09ORklHX0NSWVBUT19QQ0JDPW0KLUNPTkZJR19DUllQVE9fTUQ0PW0KIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQogQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQVJDND1tCiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fU0VSUEVOVD1tCiBDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWFwbGVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWFwbGVfZGVmY29uZmlnCmluZGV4IGZiZDllNDEuLmFjOTY2NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21hcGxlX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tYXBsZV9kZWZjb25maWcKQEAgLTEsMTAgKzEsMTEgQEAKIENPTkZJR19QUEM2ND15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTQKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfRkhBTkRMRT15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CkBAIC0xNiwxNiArMTcsMTUgQEAKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorQ09ORklHX01BQ19QQVJUSVRJT049eQogIyBDT05GSUdfUFBDX1BPV0VSTlYgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BTRVJJRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19NQVBMRT15CiBDT05GSUdfVURCR19SVEFTX0NPTlNPTEU9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0tFWEVDPXkKIENPTkZJR19JUlFfQUxMX0NQVVM9eQotIyBDT05GSUdfTUlHUkFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTVNJPXkKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0zOCw3ICszOCw2IEBACiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCiBDT05GSUdfSURFPXkKQEAgLTUyLDExICs1MSw5IEBACiBDT05GSUdfU0NTSV9JUFI9eQogQ09ORklHX0FUQT15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19ORVRfUENJPXkKIENPTkZJR19BTUQ4MTExX0VUSD15Ci1DT05GSUdfRTEwMDA9eQogQ09ORklHX1RJR09OMz15CitDT05GSUdfRTEwMDA9eQogQ09ORklHX1VTQl9QRUdBU1VTPXkKICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xNjAwCkBAIC03MiwxMyArNjksMTEgQEAKIENPTkZJR19JMkM9eQogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfQU1EODExMT15Ci0jIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQotQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfTU9OPXkKQEAgLTExMSw3ICsxMDYsNiBAQAogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfRVhUNF9GUz15Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfTVNET1NfRlM9eQogQ09ORklHX1ZGQVRfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQpAQCAtMTE5LDI4ICsxMTMsMjIgQEAKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTUFDX1BBUlRJVElPTj15CiBDT05GSUdfTkxTX0RFRkFVTFQ9InV0Zi04IgogQ09ORklHX05MU19VVEY4PXkKIENPTkZJR19DUkNfQ0NJVFQ9eQogQ09ORklHX0NSQ19UMTBESUY9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX0xBVEVOQ1lUT1A9eQotQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKK0NPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKK0NPTkZJR19MQVRFTkNZVE9QPXkKIENPTkZJR19YTU9OPXkKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQogQ09ORklHX0JPT1RYX1RFWFQ9eQogQ09ORklHX1BQQ19FQVJMWV9ERUJVRz15Ci1DT05GSUdfUFBDX0VBUkxZX0RFQlVHX0JPT1RYPXkKIENPTkZJR19DUllQVE9fRUNCPW0KIENPTkZJR19DUllQVE9fUENCQz1tCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWdjb2dlX2RlZmNvbmZpZwppbmRleCA4ZmE4NGYxLi42NjY5MjJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tZ2NvZ2VfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21nY29nZV9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMTYsNyArMTYsNiBAQAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX1BQQ184Mnh4PXkKIENPTkZJR19NR0NPR0U9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfQklORk1UX01JU0M9eQogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKQEAgLTM2LDggKzM1LDYgQEAKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTEtERVZTPXkKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKQEAgLTQ1LDcgKzQyLDYgQEAKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfTkVUREVWSUNFUz15CkBAIC02OCw3ICs2NCw2IEBACiBDT05GSUdfVVNCX0ZTTF9VU0IyPXkKIENPTkZJR19VU0JfR19TRVJJQUw9eQogQ09ORklHX1VJTz15Ci1DT05GSUdfVUlPX1BEUlY9eQogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0FVVE9GUzRfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQpAQCAtNzcsMTYgKzcyLDE1IEBACiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19TUVVBU0hGUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfQVNDSUk9eQogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX05MU19VVEY4PXkKLUNPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfRlM9eQotIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQorQ09ORklHX0RFQlVHX0ZTPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQkRJX1NXSVRDSD15CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNTEyeF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MTJ4X2RlZmNvbmZpZwppbmRleCBlZTg1M2ExLi41OWI4NWNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MTJ4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MTJ4X2RlZmNvbmZpZwpAQCAtNTAsNyArNTAsNiBAQAogQ09ORklHX01URF9OQU5EPXkKIENPTkZJR19NVERfTkFORF9NUEM1MTIxX05GQz15CiBDT05GSUdfTVREX1VCST15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgpAQCAtODEsNyArODAsNiBAQAogIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfRVZERVY9eQotQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORz15CiAjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfTVBDNTJ4eD15CiBDT05GSUdfU0VSSUFMX01QQzUyeHhfQ09OU09MRT15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCmluZGV4IDY5ZmQ4YWQuLjlmZDA0MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCkBAIC0xLDYgKzEsNiBAQAotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15Ci1DT05GSUdfU1BBUlNFX0lSUT15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19NT0RVTEVTPXkKQEAgLTE2LDggKzE2LDYgQEAKIENPTkZJR19QUENfTVBDNTIwMF9MUEJGSUZPPW0KICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKIENPTkZJR19TSU1QTEVfR1BJTz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQpAQCAtMzMsOCArMzEsNiBAQAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19NVEQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKQEAgLTQyLDcgKzM4LDYgQEAKIENPTkZJR19NVERfUEhZU01BUF9PRj15CiBDT05GSUdfTVREX1BMQVRSQU09eQogQ09ORklHX01URF9VQkk9bQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OApAQCAtNzcsNyArNzIsNiBAQAogQ09ORklHX1dBVENIRE9HPXkKIENPTkZJR19NRkRfU001MDE9bQogQ09ORklHX0RSTT15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQogQ09ORklHX0ZCPXkKIENPTkZJR19GQl9GT1JFSUdOX0VORElBTj15CiBDT05GSUdfRkJfUkFERU9OPXkKQEAgLTk0LDkgKzg4LDYgQEAKICMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NPQz15Ci1DT05GSUdfU05EX1NPQ19NUEM1MjAwX0kyUz15Ci1DT05GSUdfU05EX01QQzUyeHhfU09DX1BDTTAzMD15Ci1DT05GSUdfU05EX01QQzUyeHhfU09DX0VGSUtBPXkKIENPTkZJR19ISURfRFJBR09OUklTRT15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKIENPTkZJR19ISURfVFdJTkhBTj15CkBAIC0xMDQsNyArOTUsNiBAQAogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKIENPTkZJR19ISURfU0FNU1VORz15Ci1DT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKIENPTkZJR19ISURfR1JFRU5BU0lBPXkKIENPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKQEAgLTExMiw3ICsxMDIsNiBAQAogQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQogQ09ORklHX0hJRF9aRVJPUExVUz15CiBDT05GSUdfVVNCPXkKLSMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAogQ09ORklHX1VTQl9NT049eQogQ09ORklHX1VTQl9PSENJX0hDRD15CiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CkBAIC0xMzUsMTMgKzEyNCwxMiBAQAogQ09ORklHX1VCSUZTX0ZTPW0KIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKIENPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfREVCVUdfSU5GTz15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLUNPTkZJR19ERUJVR19JTkZPPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnCmluZGV4IDc1ZjBiYmYuLmUyNjQ3ZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNzQ0OF9ocGMyX2RlZmNvbmZpZwpAQCAtMSwxOSArMSwxNyBAQAogQ09ORklHX0FMVElWRUM9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ2eHg9eQogQ09ORklHX01QQzc0NDhIUEMyPXkKLUNPTkZJR19OT19IWj15Ci1DT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19CSU5GTVRfTUlTQz15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0yOSw3ICsyNyw2IEBACiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKQEAgLTM3LDEzICszNCwxMSBAQAogQ09ORklHX0FUQT15CiBDT05GSUdfU0FUQV9NVj15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfUEhZTElCPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX05FVF9QQ0k9eQogQ09ORklHX0UxMDA9eQogQ09ORklHXzgxMzlUT089eQogIyBDT05GSUdfODEzOVRPT19QSU8gaXMgbm90IHNldAogQ09ORklHX1RTSTEwOF9FVEg9eQorQ09ORklHX1BIWUxJQj15CiAjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CkBAIC01MywxNyArNDgsMTIgQEAKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKIENPTkZJR19DUkNfVDEwRElGPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgyNzJfYWRzX2RlZmNvbmZpZwppbmRleCA2YTIyNDAwLi44MjViMDUyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MjcyX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODI3Ml9hZHNfZGVmY29uZmlnCkBAIC0xLDE3ICsxLDE3IEBACiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODJ4eD15CiBDT05GSUdfTVBDODI3Ml9BRFM9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19QQ0k9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKQEAgLTI3LDcgKzI3LDYgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogQ09ORklHX01URD15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQogQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQpAQCAtMzksNTIgKzM4LDQxIEBACiBDT05GSUdfTVREX0NGSV9JND15CiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfVFVOPXkKLUNPTkZJR19EQVZJQ09NX1BIWT15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfRU5FVF9NRElPX0ZDQz15CitDT05GSUdfREFWSUNPTV9QSFk9eQogQ09ORklHX1BQUD15CitDT05GSUdfUFBQX0RFRkxBVEU9eQogQ09ORklHX1BQUF9BU1lOQz15CiBDT05GSUdfUFBQX1NZTkNfVFRZPXkKLUNPTkZJR19QUFBfREVGTEFURT15CiBDT05GSUdfSU5QVVRfRVZERVY9eQotIyBDT05GSUdfU0VSSU9fSTgwNDIgaXMgbm90IHNldAogIyBDT05GSUdfVlQgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DUE09eQogQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUMl9GUz15CiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0FVVE9GUzRfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ST09UX05GUz15Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKIENPTkZJR19OTFM9eQogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogQ09ORklHX05MU19BU0NJST15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15CiBDT05GSUdfTkxTX1VURjg9eQotQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKIENPTkZJR19CRElfU1dJVENIPXkKIENPTkZJR19DUllQVE9fQ0JDPXkKIENPTkZJR19DUllQVE9fRUNCPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzeHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODN4eF9kZWZjb25maWcKaW5kZXggMjNmZWM3OS4uNjcxZTIyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODN4eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODN4eF9kZWZjb25maWcKQEAgLTEsNCArMSwzIEBACi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQpAQCAtNDUsMTQgKzQ0LDEyIEBACiBDT05GSUdfREVWVE1QRlNfTU9VTlQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfUEhZU01BUF9PRj15CiBDT05GSUdfTVREX05BTkQ9eQogQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKQEAgLTYyLDcgKzU5LDYgQEAKIENPTkZJR19TQVRBX0ZTTD15CiBDT05GSUdfU0FUQV9TSUw9eQogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX01JST15CiBDT05GSUdfVUNDX0dFVEg9eQogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX01BUlZFTExfUEhZPXkKQEAgLTgyLDcgKzc4LDYgQEAKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX01QQz15CiBDT05GSUdfV0FUQ0hET0c9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19ISURfQTRURUNIPXkKIENPTkZJR19ISURfQVBQTEU9eQogQ09ORklHX0hJRF9CRUxLSU49eQpAQCAtOTcsNyArOTIsNiBAQAogQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CiBDT05GSUdfSElEX1BFVEFMWU5YPXkKIENPTkZJR19ISURfU0FNU1VORz15Ci1DT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9NT049eQpAQCAtMTE5LDYgKzExMyw1IEBACiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogQ09ORklHX0NSWVBUT19TSEEyNTY9eQogQ09ORklHX0NSWVBUT19TSEE1MTI9eQotQ09ORklHX0NSWVBUT19BRVM9eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19ERVZfVEFMSVRPUz15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnCmluZGV4IDAyMzk1ZmEuLjg1MzVjMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfZGVmY29uZmlnCkBAIC0yMCw2ICsyMCw3IEBACiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKIENPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19DMjkzX1BDSUU9eQogQ09ORklHX01QQzg1NDBfQURTPXkKIENPTkZJR19NUEM4NTYwX0FEUz15CiBDT05GSUdfTVBDODV4eF9DRFM9eQpAQCAtMjcsNyArMjgsNiBAQAogQ09ORklHX01QQzg1MzZfRFM9eQogQ09ORklHX01QQzg1eHhfRFM9eQogQ09ORklHX01QQzg1eHhfUkRCPXkKLUNPTkZJR19DMjkzX1BDSUU9eQogQ09ORklHX1AxMDEwX1JEQj15CiBDT05GSUdfUDEwMjJfRFM9eQogQ09ORklHX1AxMDIyX1JESz15CkBAIC00Miw2ICs0Miw3IEBACiBDT05GSUdfVFFNODU1NT15CiBDT05GSUdfVFFNODU2MD15CiBDT05GSUdfU0JDODU0OD15CitDT05GSUdfTVZNRTI1MDA9eQogQ09ORklHX1FVSUNDX0VOR0lORT15CiBDT05GSUdfUUVfR1BJTz15CiBDT05GSUdfSElHSE1FTT15CkBAIC00OSw2ICs1MCw4IEBACiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTIKIENPTkZJR19QQ0k9eQorQ09ORklHX1BDSUVQT1JUQlVTPXkKKyMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTVNJPXkKIENPTkZJR19SQVBJRElPPXkKIENPTkZJR19ORVQ9eQpAQCAtNzAsNyArNzMsNiBAQAogQ09ORklHX0lQX01ST1VURT15CiBDT05GSUdfSVBfUElNU01fVjE9eQogQ09ORklHX0lQX1BJTVNNX1YyPXkKLUNPTkZJR19BUlBEPXkKIENPTkZJR19JTkVUX0VTUD15CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKQEAgLTgwLDMzICs4MiwyMSBAQAogQ09ORklHX0RFVlRNUEZTPXkKIENPTkZJR19ERVZUTVBGU19NT1VOVD15CiBDT05GSUdfTVREPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfRlRMPXkKIENPTkZJR19NVERfQ0ZJPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CitDT05GSUdfTVREX1BIWVNNQVA9eQogQ09ORklHX01URF9QSFlTTUFQX09GPXkKK0NPTkZJR19NVERfUExBVFJBTT15CiBDT05GSUdfTVREX00yNVA4MD15Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLUNPTkZJR19NVERfTkFORF9FQ0M9eQogQ09ORklHX01URF9OQU5EPXkKLUNPTkZJR19NVERfTkFORF9JRFM9eQogQ09ORklHX01URF9OQU5EX0ZTTF9FTEJDPXkKIENPTkZJR19NVERfTkFORF9GU0xfSUZDPXkKK0NPTkZJR19NVERfU1BJX05PUj15CiBDT05GSUdfTVREX1VCST15Ci1DT05GSUdfTVREX1VCSV9XTF9USFJFU0hPTEQ9NDA5NgotQ09ORklHX01URF9VQklfQkVCX1JFU0VSVkU9MQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX05CRD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQpAQCAtMTE3LDcgKzEwNyw2IEBACiBDT05GSUdfQ0hSX0RFVl9TVD15CiBDT05GSUdfQkxLX0RFVl9TUj15CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX1NDU0lfTE9HR0lORz15CiBDT05GSUdfQVRBPXkKIENPTkZJR19TQVRBX0FIQ0k9eQpAQCAtMTMzLDExICsxMjIsMTIgQEAKIENPTkZJR19FMTAwMD15CiBDT05GSUdfRTEwMDBFPXkKIENPTkZJR19JR0I9eQorQ09ORklHX0FUODAzWF9QSFk9eQogQ09ORklHX01BUlZFTExfUEhZPXkKIENPTkZJR19EQVZJQ09NX1BIWT15CiBDT05GSUdfQ0lDQURBX1BIWT15CiBDT05GSUdfVklURVNTRV9QSFk9eQotQ09ORklHX0FUODAzWF9QSFk9eQorQ09ORklHX0JST0FEQ09NX1BIWT15CiBDT05GSUdfRklYRURfUEhZPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKQEAgLTE0Niw4ICsxMzYsOCBAQAogQ09ORklHX1NFUklPX0xJQlBTMj15CiBDT05GSUdfU0VSSUFMXzgyNTA9eQogQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKLUNPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz02CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz02CiBDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CiBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CiBDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKQEAgLTE2MCwxNSArMTUwLDEyIEBACiBDT05GSUdfU1BJX0ZTTF9TUEk9eQogQ09ORklHX1NQSV9GU0xfRVNQST15CiBDT05GSUdfR1BJT19NUEM4WFhYPXkKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CitDT05GSUdfSFdNT049bQorQ09ORklHX1NFTlNPUlNfTE05MD1tCiBDT05GSUdfRkI9eQogQ09ORklHX0ZCX0ZTTF9ESVU9eQogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQotQ09ORklHX0ZPTlRTPXkKLUNPTkZJR19GT05UXzh4OD15Ci1DT05GSUdfRk9OVF84eDE2PXkKIENPTkZJR19TT1VORD15CiBDT05GSUdfU05EPXkKICMgQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEkgaXMgbm90IHNldApAQCAtMTkyLDcgKzE3OSw2IEBACiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKIENPTkZJR19ISURfUEVUQUxZTlg9eQogQ09ORklHX0hJRF9TQU1TVU5HPXkKLUNPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX1VTQj15CiBDT05GSUdfVVNCX01PTj15CkBAIC0yMDgsNiArMTk0LDcgQEAKIENPTkZJR19NTUNfU0RIQ0lfT0ZfRVNESEM9eQogQ09ORklHX0VEQUM9eQogQ09ORklHX0VEQUNfTU1fRURBQz15CitDT05GSUdfRURBQ19NUEM4NVhYPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19EUlZfRFMxMzA3PXkKIENPTkZJR19SVENfRFJWX0RTMTM3ND15CkBAIC0yMTUsOCArMjAyLDYgQEAKIENPTkZJR19SVENfRFJWX0NNT1M9eQogQ09ORklHX0RNQURFVklDRVM9eQogQ09ORklHX0ZTTF9ETUE9eQotQ09ORklHX01FTU9SWT15Ci0jIENPTkZJR19ORVRfRE1BIGlzIG5vdCBzZXQKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CkBAIC0yMjcsMjEgKzIxMiw5IEBACiBDT05GSUdfTVNET1NfRlM9bQogQ09ORklHX1ZGQVRfRlM9eQogQ09ORklHX05URlNfRlM9eQotQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQotQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQotQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1RNUEZTPXkKIENPTkZJR19IVUdFVExCRlM9eQotQ09ORklHX0pGRlMyX0ZTPXkKLUNPTkZJR19KRkZTMl9GU19ERUJVRz0xCi1DT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLUNPTkZJR19VQklGU19GUz15Ci1DT05GSUdfVUJJRlNfRlNfWEFUVFI9eQotQ09ORklHX1VCSUZTX0ZTX0xaTz15Ci1DT05GSUdfVUJJRlNfRlNfWkxJQj15CiBDT05GSUdfQURGU19GUz1tCiBDT05GSUdfQUZGU19GUz1tCiBDT05GSUdfSEZTX0ZTPW0KQEAgLTI0OSw2ICsyMjIsOSBAQAogQ09ORklHX0JFRlNfRlM9bQogQ09ORklHX0JGU19GUz1tCiBDT05GSUdfRUZTX0ZTPW0KK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MQorQ09ORklHX1VCSUZTX0ZTPXkKIENPTkZJR19DUkFNRlM9eQogQ09ORklHX1ZYRlNfRlM9bQogQ09ORklHX0hQRlNfRlM9bQpAQCAtMjU5LDE2ICsyMzUsMTYgQEAKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKIENPTkZJR19DUkNfVDEwRElGPXkKLUNPTkZJR19DUkMxNj15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKLUNPTkZJR19MWk9fQ09NUFJFU1M9eQotQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKLUNPTkZJR19DUllQVE9fREVGTEFURT15Ci1DT05GSUdfQ1JZUFRPX0xaTz15CitDT05GSUdfRk9OVFM9eQorQ09ORklHX0ZPTlRfOHg4PXkKK0NPTkZJR19GT05UXzh4MTY9eQorQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX0RFQlVHX0ZTPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLUNPTkZJR19ERUJVR19JTkZPPXkKIENPTkZJR19DUllQVE9fUENCQz1tCiBDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CiBDT05GSUdfQ1JZUFRPX1NIQTUxMj15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X3NtcF9kZWZjb25maWcKaW5kZXggYjVkMWI4Mi4uYzQ1YWQyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9zbXBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfc21wX2RlZmNvbmZpZwpAQCAtMiwxNCArMiwxMyBAQAogQ09ORklHX1BIWVNfNjRCSVQ9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz04Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQotQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0FVRElUPXkKIENPTkZJR19JUlFfRE9NQUlOX0RFQlVHPXkKIENPTkZJR19OT19IWj15CiBDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNApAQCAtMjMsNiArMjIsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiBDT05GSUdfTUFDX1BBUlRJVElPTj15CitDT05GSUdfQzI5M19QQ0lFPXkKIENPTkZJR19NUEM4NTQwX0FEUz15CiBDT05GSUdfTVBDODU2MF9BRFM9eQogQ09ORklHX01QQzg1eHhfQ0RTPXkKQEAgLTMwLDcgKzMwLDYgQEAKIENPTkZJR19NUEM4NTM2X0RTPXkKIENPTkZJR19NUEM4NXh4X0RTPXkKIENPTkZJR19NUEM4NXh4X1JEQj15Ci1DT05GSUdfQzI5M19QQ0lFPXkKIENPTkZJR19QMTAxMF9SREI9eQogQ09ORklHX1AxMDIyX0RTPXkKIENPTkZJR19QMTAyMl9SREs9eQpAQCAtNzMsNyArNzIsNiBAQAogQ09ORklHX0lQX01ST1VURT15CiBDT05GSUdfSVBfUElNU01fVjE9eQogQ09ORklHX0lQX1BJTVNNX1YyPXkKLUNPTkZJR19BUlBEPXkKIENPTkZJR19JTkVUX0VTUD15CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKQEAgLTgzLDMzICs4MSwxOCBAQAogQ09ORklHX0RFVlRNUEZTPXkKIENPTkZJR19ERVZUTVBGU19NT1VOVD15CiBDT05GSUdfTVREPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMS0RFVlM9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfRlRMPXkKIENPTkZJR19NVERfQ0ZJPXkKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQotQ09ORklHX01URF9NMjVQODA9eQotQ09ORklHX01URF9DRklfVVRJTD15Ci1DT05GSUdfTVREX05BTkRfRUNDPXkKIENPTkZJR19NVERfTkFORD15Ci1DT05GSUdfTVREX05BTkRfSURTPXkKIENPTkZJR19NVERfTkFORF9GU0xfRUxCQz15CiBDT05GSUdfTVREX05BTkRfRlNMX0lGQz15CitDT05GSUdfTVREX1NQSV9OT1I9eQogQ09ORklHX01URF9VQkk9eQotQ09ORklHX01URF9VQklfV0xfVEhSRVNIT0xEPTQwOTYKLUNPTkZJR19NVERfVUJJX0JFQl9SRVNFUlZFPTEKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9OQkQ9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTEyMCw3ICsxMDMsNiBAQAogQ09ORklHX0NIUl9ERVZfU1Q9eQogQ09ORklHX0JMS19ERVZfU1I9eQogQ09ORklHX0NIUl9ERVZfU0c9eQotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0xPR0dJTkc9eQogQ09ORklHX0FUQT15CiBDT05GSUdfU0FUQV9BSENJPXkKQEAgLTEzMywxMSArMTE1LDExIEBACiBDT05GSUdfVUNDX0dFVEg9eQogQ09ORklHX0dJQU5GQVI9eQogQ09ORklHX0UxMDAwRT15CitDT05GSUdfQVQ4MDNYX1BIWT15CiBDT05GSUdfTUFSVkVMTF9QSFk9eQogQ09ORklHX0RBVklDT01fUEhZPXkKIENPTkZJR19DSUNBREFfUEhZPXkKIENPTkZJR19WSVRFU1NFX1BIWT15Ci1DT05GSUdfQVQ4MDNYX1BIWT15CiBDT05GSUdfRklYRURfUEhZPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKQEAgLTE2MiwxNCArMTQ0LDEwIEBACiBDT05GSUdfU1BJX0ZTTF9FU1BJPXkKIENPTkZJR19HUElPX01QQzhYWFg9eQogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKIENPTkZJR19GQj15CiBDT05GSUdfRkJfRlNMX0RJVT15CiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15Ci1DT05GSUdfRk9OVFM9eQotQ09ORklHX0ZPTlRfOHg4PXkKLUNPTkZJR19GT05UXzh4MTY9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TTkQ9eQogIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CkBAIC0xOTMsNyArMTcxLDYgQEAKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQotQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfTU9OPXkKQEAgLTIxNiw4ICsxOTMsNiBAQAogQ09ORklHX1JUQ19EUlZfQ01PUz15CiBDT05GSUdfRE1BREVWSUNFUz15CiBDT05GSUdfRlNMX0RNQT15Ci1DT05GSUdfTUVNT1JZPXkKLSMgQ09ORklHX05FVF9ETUEgaXMgbm90IHNldAogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKQEAgLTIyOCwyMSArMjAzLDkgQEAKIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz15CiBDT05GSUdfTlRGU19GUz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0hVR0VUTEJGUz15Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTEKLUNPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15Ci1DT05GSUdfSkZGUzJfWkxJQj15Ci1DT05GSUdfSkZGUzJfUlRJTUU9eQotQ09ORklHX1VCSUZTX0ZTPXkKLUNPTkZJR19VQklGU19GU19YQVRUUj15Ci1DT05GSUdfVUJJRlNfRlNfTFpPPXkKLUNPTkZJR19VQklGU19GU19aTElCPXkKIENPTkZJR19BREZTX0ZTPW0KIENPTkZJR19BRkZTX0ZTPW0KIENPTkZJR19IRlNfRlM9bQpAQCAtMjUwLDYgKzIxMyw5IEBACiBDT05GSUdfQkVGU19GUz1tCiBDT05GSUdfQkZTX0ZTPW0KIENPTkZJR19FRlNfRlM9bQorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0xCitDT05GSUdfVUJJRlNfRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfVlhGU19GUz1tCiBDT05GSUdfSFBGU19GUz1tCkBAIC0yNjAsMjAgKzIyNiwxOSBAQAogQ09ORklHX05GU19WND15CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05GU0Q9eQorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0NSQzE2PXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQotQ09ORklHX0xaT19DT01QUkVTUz15Ci1DT05GSUdfTFpPX0RFQ09NUFJFU1M9eQotQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKLUNPTkZJR19DUllQVE9fTFpPPXkKK0NPTkZJR19GT05UUz15CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfREVCVUdfSU5GTz15CiBDT05GSUdfREVCVUdfRlM9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX0NSWVBUT19QQ0JDPW0KIENPTkZJR19DUllQVE9fU0hBMjU2PXkKIENPTkZJR19DUllQVE9fU0hBNTEyPXkKLUNPTkZJR19DUllQVE9fQUVTPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fREVWX0ZTTF9DQUFNPXkKIENPTkZJR19DUllQVE9fREVWX1RBTElUT1M9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY2X2Fkc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZwppbmRleCBkOTU0ZTgwLi4zMjE0MTJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjZfYWRzX2RlZmNvbmZpZwpAQCAtMSwyNSArMSwyMSBAQAogQ09ORklHX1BQQ184eHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiAjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci0jIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CiBDT05GSUdfRVhQRVJUPXkKLSMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0VfRlVMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKIENPTkZJR19NUEM4NlhBRFM9eQogQ09ORklHXzh4eF9DT1BZQkFDSz15CiBDT05GSUdfOHh4X0NQVTY9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0haXzEwMDA9eQogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKQEAgLTMyLDI3ICsyOCwyMSBAQAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19GSVhFRF9QSFk9eQotQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfRlNfRU5FVD15CitDT05GSUdfRklYRURfUEhZPXkKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ1BNPXkKIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPXkKIENPTkZJR19FWFQyX0ZTPXkKIENPTkZJR19FWFQyX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogQ09ORklHX0NSQ19DQ0lUVD15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMl9TTElDRUJZND15CisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4Nnh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCmluZGV4IGZjNThhYTguLmE0NTcyNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2eHhfZGVmY29uZmlnCkBAIC0xLDIzICsxLDI0IEBACiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15Ci1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiBDT05GSUdfQVVESVQ9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKIENPTkZJR19QUENfODZ4eD15CkBAIC0yNiwxMSArMjcsOCBAQAogQ09ORklHX01QQzg2MTBfSFBDRD15CiBDT05GSUdfR0VGX1NCQzYxMD15CiBDT05GSUdfSElHSE1FTT15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfSFpfMTAwMD15CiBDT05GSUdfQklORk1UX01JU0M9bQotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX1BDST15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQpAQCAtNDgsMTIgKzQ2LDkgQEAKIENPTkZJR19JUF9QTlBfQk9PVFA9eQogQ09ORklHX0lQX1BOUF9SQVJQPXkKIENPTkZJR19ORVRfSVBJUD15Ci1DT05GSUdfTkVUX0lQR1JFPXkKLUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15Ci1DT05GSUdfQVJQRD15CiAjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldApAQCAtNjEsMjggKzU2LDIzIEBACiBDT05GSUdfSVBWNj15CiBDT05GSUdfSVBfU0NUUD1tCiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9MT09QPXkKIENPTkZJR19CTEtfREVWX05CRD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCi1DT05GSUdfTUlTQ19ERVZJQ0VTPXkKIENPTkZJR19FRVBST01fTEVHQUNZPXkKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19DSFJfREVWX1NUPXkKIENPTkZJR19CTEtfREVWX1NSPXkKIENPTkZJR19DSFJfREVWX1NHPXkKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKIENPTkZJR19BVEE9eQogQ09ORklHX1NBVEFfQUhDST15CiBDT05GSUdfUEFUQV9BTEk9eQogQ09ORklHX05FVERFVklDRVM9eQogQ09ORklHX0RVTU1ZPXkKLUNPTkZJR19WSVRFU1NFX1BIWT15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQogQ09ORklHX0dJQU5GQVI9eQorQ09ORklHX1ZJVEVTU0VfUEhZPXkKIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KICMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKQEAgLTEwMiw3ICs5Miw2IEBACiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfTVBDPXkKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15CiBDT05GSUdfU09VTkQ9eQogQ09ORklHX1NORD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CkBAIC0xMjMsNyArMTEyLDYgQEAKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQogQ09ORklHX0hJRF9QRVRBTFlOWD15CiBDT05GSUdfSElEX1NBTVNVTkc9eQotQ09ORklHX0hJRF9TT05ZPXkKIENPTkZJR19ISURfU1VOUExVUz15CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfTU9OPXkKQEAgLTEzNyw3ICsxMjUsNiBAQAogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19JU085NjYwX0ZTPW0KIENPTkZJR19KT0xJRVQ9eQogQ09ORklHX1pJU09GUz15CkBAIC0xNDUsOSArMTMyLDYgQEAKIENPTkZJR19NU0RPU19GUz1tCiBDT05GSUdfVkZBVF9GUz15CiBDT05GSUdfTlRGU19GUz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzQzNz15Ci1DT05GSUdfTkxTX0NPREVQQUdFXzg1MD15Ci1DT05GSUdfTkxTX0lTTzg4NTlfMT15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0FERlNfRlM9bQpAQCAtMTY0LDE4ICsxNDgsMTUgQEAKIENPTkZJR19TWVNWX0ZTPW0KIENPTkZJR19VRlNfRlM9bQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjQ9eQogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19ORlNEPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotQ09ORklHX01BQ19QQVJUSVRJT049eQorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX0NSQ19UMTBESUY9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogQ09ORklHX0NSWVBUT19ITUFDPXkKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODg1X2Fkc19kZWZjb25maWcKaW5kZXggM2Y0N2QwMGEuLjJhMTBmOTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg4NV9hZHNfZGVmY29uZmlnCkBAIC0xLDIzICsxLDE5IEBACiBDT05GSUdfUFBDXzh4eD15Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAogQ09ORklHXzh4eF9DT1BZQkFDSz15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfSFpfMTAwPXkKLUNPTkZJR184WFhfTUlOSU1BTF9GUEVNVT15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CkBAIC0zNCw3ICszMCw2IEBACiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKQEAgLTQ2LDIyICs0MSwxNyBAQAogQ09ORklHX01URF9DRklfSTQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19EQVZJQ09NX1BIWT15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19GU19FTkVUPXkKICMgQ09ORklHX0ZTX0VORVRfSEFTX1NDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorQ09ORklHX0RBVklDT01fUEhZPXkKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ1BNPXkKIENPTkZJR19TRVJJQUxfQ1BNX0NPTlNPTEU9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldApAQCAtNjksMTMgKzU5LDggQEAKIENPTkZJR19UTVBGUz15CiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19DUkMzMiBpcyBub3Qgc2V0Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci1DT05GSUdfREVCVUdfSU5GTz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMl9TTElDRUJZND15CitDT05GSUdfREVCVUdfSU5GTz15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTUxMDBfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTUxMDBfZGVmY29uZmlnCmluZGV4IDkzYzc3NTIuLjUyNWEyY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL212bWU1MTAwX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tdm1lNTEwMF9kZWZjb25maWcKQEAgLTYxLDcgKzYxLDYgQEAKIENPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KIENPTkZJR19MQVBCPW0KIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0yCkBAIC04OCwxMyArODcsMTAgQEAKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfSElEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lPTU1VX1NVUFBPUlQgaXMgbm90IHNldAotQ09ORklHX1ZNRV9CVVM9bQotQ09ORklHX1ZNRV9DQTkxQ1g0Mj1tCiBDT05GSUdfRVhUMl9GUz1tCiBDT05GSUdfRVhUM19GUz1tCiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldApAQCAtMTIyLDExICsxMTgsNiBAQAogQ09ORklHX0NSQ19DQ0lUVD1tCiBDT05GSUdfQ1JDX1QxMERJRj15CiBDT05GSUdfWFpfREVDPXkKLUNPTkZJR19YWl9ERUNfWDg2PXkKLUNPTkZJR19YWl9ERUNfSUE2ND15Ci1DT05GSUdfWFpfREVDX0FSTT15Ci1DT05GSUdfWFpfREVDX0FSTVRIVU1CPXkKLUNPTkZJR19YWl9ERUNfU1BBUkM9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcGFzZW1pX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3Bhc2VtaV9kZWZjb25maWcKaW5kZXggM2U3MmM4Yy4uOGY5NDc4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcGFzZW1pX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wYXNlbWlfZGVmY29uZmlnCkBAIC01NCw3ICs1NCw2IEBACiBDT05GSUdfTVREX1BIUkFNPXkKIENPTkZJR19NVERfTkFORD15CiBDT05GSUdfTVREX05BTkRfUEFTRU1JPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTYzODQKQEAgLTY5LDcgKzY4LDYgQEAKIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CiBDT05GSUdfQ0hSX0RFVl9TRz15CiBDT05GSUdfQ0hSX0RFVl9TQ0g9eQotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKIENPTkZJR19BVEE9eQpAQCAtMTM0LDcgKzEzMiw2IEBACiBDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKIENPTkZJR19ISURfUEVUQUxZTlg9eQogQ09ORklHX0hJRF9TQU1TVU5HPXkKLUNPTkZJR19ISURfU09OWT15CiBDT05GSUdfSElEX1NVTlBMVVM9eQogQ09ORklHX0hJRF9HUkVFTkFTSUE9eQogQ09ORklHX0hJRF9TTUFSVEpPWVBMVVM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BtYWMzMl9kZWZjb25maWcKaW5kZXggMDM1MWI1Zi4uZWE4NzA1ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnCkBAIC0xLDE5ICsxLDIwIEBACiBDT05GSUdfQUxUSVZFQz15Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19PUFJPRklMRT15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUT15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT15CkBAIC0yMSwxMyArMjIsOSBAQAogQ09ORklHX0NQVV9GUkVRX1BNQUM9eQogQ09ORklHX1BQQzYwMV9TWU5DX0ZJWD15CiBDT05GSUdfSElHSE1FTT15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfQklORk1UX01JU0M9bQotIyBDT05GSUdfTUlHUkFUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19QTT15Ci1DT05GSUdfUE1fREVCVUc9eQogQ09ORklHX0hJQkVSTkFUSU9OPXkKK0NPTkZJR19QTV9ERUJVRz15CiBDT05GSUdfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfUENDQVJEPW0KIENPTkZJR19ZRU5UQT1tCkBAIC00Niw3ICs0Myw2IEBACiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQotQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KIENPTkZJR19ORl9DT05OVFJBQ0s9bQogQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQogQ09ORklHX05GX0NPTk5UUkFDS19JUkM9bQpAQCAtODQsMTggKzgwLDExIEBACiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMj1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjQ9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQX05GX01BVENIX0VDTj1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KIENPTkZJR19JUF9ORl9GSUxURVI9bQogQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQotQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQotQ09ORklHX0lQX05GX1RBUkdFVF9VTE9HPW0KLUNPTkZJR19ORl9OQVQ9bQotQ09ORklHX0lQX05GX1RBUkdFVF9NQVNRVUVSQURFPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVESVJFQ1Q9bQogQ09ORklHX0lQX05GX01BTkdMRT1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCiBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTD1tCkBAIC0xMTIsOCArMTAxLDYgQEAKIENPTkZJR19JUkRBX0ZBU1RfUlI9eQogQ09ORklHX0lSVFRZX1NJUj1tCiBDT05GSUdfQlQ9bQotQ09ORklHX0JUX0wyQ0FQPXkKLUNPTkZJR19CVF9TQ089eQogQ09ORklHX0JUX1JGQ09NTT1tCiBDT05GSUdfQlRfUkZDT01NX1RUWT15CiBDT05GSUdfQlRfQk5FUD1tCkBAIC0xMjgsMTAgKzExNSw4IEBACiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CiBDT05GSUdfQ09OTkVDVE9SPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX01BQ19GTE9QUFk9bQogQ09ORklHX0JMS19ERVZfTE9PUD15Ci1DT05GSUdfQkxLX0RFVl9VQj1tCiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0lERT15CiBDT05GSUdfQkxLX0RFVl9JREVDUz1tCkBAIC0xNTIsNyArMTM3LDYgQEAKIENPTkZJR19TQ1NJX0FJQzdYWFg9bQogQ09ORklHX0FJQzdYWFhfQ01EU19QRVJfREVWSUNFPTI1MwogQ09ORklHX0FJQzdYWFhfUkVTRVRfREVMQVlfTVM9MTUwMDAKLUNPTkZJR19TQ1NJX0FJQzdYWFhfT0xEPW0KIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yPXkKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTAKIENPTkZJR19TQ1NJX01FU0g9eQpAQCAtMTcwLDEyICsxNTQsNiBAQAogQ09ORklHX0RNX1NOQVBTSE9UPW0KIENPTkZJR19ETV9NSVJST1I9bQogQ09ORklHX0RNX1pFUk89bQotQ09ORklHX0lFRUUxMzk0PW0KLUNPTkZJR19JRUVFMTM5NF9PSENJMTM5ND1tCi1DT05GSUdfSUVFRTEzOTRfU0JQMj1tCi1DT05GSUdfSUVFRTEzOTRfUkFXSU89bQotQ09ORklHX0lFRUUxMzk0X1ZJREVPMTM5ND1tCi1DT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KIENPTkZJR19BREI9eQogQ09ORklHX0FEQl9DVURBPXkKIENPTkZJR19BREJfUE1VPXkKQEAgLTE5MywyNyArMTcxLDIyIEBACiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9bQogQ09ORklHX1RVTj1tCi1DT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19QQ05FVDMyPXkKIENPTkZJR19NQUNFPXkKIENPTkZJR19CTUFDPXkKIENPTkZJR19TVU5HRU09eQotQ09ORklHX05FVF9QQ0k9eQotQ09ORklHX1BDTkVUMzI9eQotQ09ORklHX1BSSVNNNTQ9bQotQ09ORklHX0I0Mz1tCi1DT05GSUdfQjQzTEVHQUNZPW0KLUNPTkZJR19IRVJNRVM9bQotQ09ORklHX0FQUExFX0FJUlBPUlQ9bQotQ09ORklHX1BDTUNJQV9IRVJNRVM9bQotQ09ORklHX1A1NF9DT01NT049bQotQ09ORklHX1VTQl9VU0JORVQ9bQotIyBDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUIGlzIG5vdCBzZXQKIENPTkZJR19QUFA9eQorQ09ORklHX1BQUF9CU0RDT01QPW0KK0NPTkZJR19QUFBfREVGTEFURT15CiBDT05GSUdfUFBQX01VTFRJTElOSz15CiBDT05GSUdfUFBQX0FTWU5DPXkKIENPTkZJR19QUFBfU1lOQ19UVFk9bQotQ09ORklHX1BQUF9ERUZMQVRFPXkKLUNPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfVVNCX1VTQk5FVD1tCisjIENPTkZJR19VU0JfTkVUX0NEQ19TVUJTRVQgaXMgbm90IHNldAorQ09ORklHX1BSSVNNNTQ9bQorQ09ORklHX0I0Mz1tCitDT05GSUdfQjQzTEVHQUNZPW0KK0NPTkZJR19QNTRfQ09NTU9OPW0KIENPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19LRVlCT0FSRF9BVEtCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldApAQCAtMjI2LDcgKzE5OSw2IEBACiBDT05GSUdfTlZSQU09eQogQ09ORklHX0dFTl9SVEM9eQogQ09ORklHX0kyQ19DSEFSREVWPW0KLUNPTkZJR19QT1dFUl9TVVBQTFk9eQogQ09ORklHX0FQTV9QT1dFUj15CiBDT05GSUdfQkFUVEVSWV9QTVU9eQogQ09ORklHX0hXTU9OPW0KQEAgLTI1Myw3ICsyMjUsNiBAQAogQ09ORklHX0ZCX0FUWV9DVD15CiBDT05GSUdfRkJfQVRZX0dYPXkKIENPTkZJR19GQl8zREZYPXkKLUNPTkZJR19ESVNQTEFZX1NVUFBPUlQ9eQogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQogQ09ORklHX0xPR089eQpAQCAtMzE0LDcgKzI4NSw2IEBACiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19FWFQ0X0ZTPXkKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KIENPTkZJR19JU085NjYwX0ZTPXkKQEAgLTMyOCwzNCArMjk4LDI3IEBACiBDT05GSUdfSEZTX0ZTPW0KIENPTkZJR19IRlNQTFVTX0ZTPW0KIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfTkZTX1Y0PXkKIENPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzX0FDTD15CiBDT05GSUdfTkZTRF9WND15Ci1DT05GSUdfU01CX0ZTPW0KLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQogQ09ORklHX05MU19JU084ODU5XzE9bQogQ09ORklHX0NSQ19UMTBESUY9eQogQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFQlVHX0ZTPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogQ09ORklHX0xBVEVOQ1lUT1A9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19YTU9OPXkKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQogQ09ORklHX0JPT1RYX1RFWFQ9eQogQ09ORklHX1BQQ19FQVJMWV9ERUJVRz15Ci1DT05GSUdfUFBDX0VBUkxZX0RFQlVHX0JPT1RYPXkKIENPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19TSEEyNTY9bQogQ09ORklHX0NSWVBUT19TSEE1MTI9bQogQ09ORklHX0NSWVBUT19UR1IxOTI9bQogQ09ORklHX0NSWVBUT19XUDUxMj1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0MHhfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDB4X2RlZmNvbmZpZwppbmRleCA1MjkwOGM3Li5hNDNiZjZlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0MHhfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQweF9kZWZjb25maWcKQEAgLTEsMTMgKzEsMTAgQEAKIENPTkZJR180MHg9eQotQ09ORklHX0VYUEVSSU1FTlRBTD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX0VYUEVSVD15CiBDT05GSUdfS0FMTFNZTVNfQUxMPXkKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKQEAgLTE4LDcgKzE1LDYgQEAKIENPTkZJR19LSUxBVUVBPXkKIENPTkZJR19NQUtBTFU9eQogQ09ORklHX1hJTElOWF9WSVJURVhfR0VORVJJQ19CT0FSRD15Ci1DT05GSUdfU1BBUlNFX0lSUT15CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1VOSVg9eQpAQCAtMzQsOCArMzAsNiBAQAogQ09ORklHX0NPTk5FQ1RPUj15CiBDT05GSUdfTVREPXkKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15Ci1DT05GSUdfTVREX09GX1BBUlRTPXkKLUNPTkZJR19NVERfQ0hBUj15CiBDT05GSUdfTVREX0JMT0NLPW0KIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfSkVERUNQUk9CRT15CkBAIC00MywxMyArMzcsMTAgQEAKIENPTkZJR19NVERfUEhZU01BUF9PRj15CiBDT05GSUdfTVREX1VCST1tCiBDT05GSUdfTVREX1VCSV9HTFVFQkk9bQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzUwMDAKIENPTkZJR19YSUxJTlhfU1lTQUNFPW0KIENPTkZJR19ORVRERVZJQ0VTPXkKLUNPTkZJR19FVEhFUk5FVD15Ci1DT05GSUdfTkVUX1ZFTkRPUl9JQk09eQogQ09ORklHX0lCTV9FTUFDPXkKICMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJTz1tCkBAIC03MywxMyArNjQsMTEgQEAKIENPTkZJR19HUElPX1hJTElOWD15CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiBDT05GSUdfVEhFUk1BTD15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX0ZCPW0KIENPTkZJR19GQl9YSUxJTlg9bQogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9bQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19WRkFUX0ZTPW0KIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CkBAIC04NywxNiArNzYsMTIgQEAKIENPTkZJR19VQklGU19GUz1tCiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQogQ09ORklHX05MU19JU084ODU5XzE9bQotQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19GUz15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfQ1JZUFRPX0NCQz15CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzQ0eF9kZWZjb25maWcKaW5kZXggOTI0ZTEwZC4uYmJjN2Y3NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNDR4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM0NHhfZGVmY29uZmlnCkBAIC0xLDEzICsxLDEwIEBACiBDT05GSUdfNDR4PXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogQ09ORklHX0tBTExTWU1TX0FMTD15Ci1DT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUz15CiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CkBAIC0yOCw3ICsyNSw2IEBACiBDT05GSUdfWElMSU5YX1ZJUlRFWDQ0MF9HRU5FUklDX0JPQVJEPXkKIENPTkZJR19QUEM0eHhfR1BJTz15CiBDT05GSUdfTUFUSF9FTVVMQVRJT049eQotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX05FVD15CiBDT05GSUdfUEFDS0VUPXkKIENPTkZJR19VTklYPXkKQEAgLTQ0LDggKzQwLDYgQEAKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCiBDT05GSUdfQ09OTkVDVE9SPXkKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9PRl9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfTVREX0NGST15CiBDT05GSUdfTVREX0pFREVDUFJPQkU9eQpAQCAtNTUsNyArNDksNiBAQAogQ09ORklHX01URF9OQU5EX05ERkM9bQogQ09ORklHX01URF9VQkk9bQogQ09ORklHX01URF9VQklfR0xVRUJJPW0KLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCiBDT05GSUdfWElMSU5YX1NZU0FDRT1tCkBAIC02NCw4ICs1Nyw2IEBACiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19UVU49bQotQ09ORklHX0VUSEVSTkVUPXkKLUNPTkZJR19ORVRfVkVORE9SX0lCTT15CiBDT05GSUdfSUJNX0VNQUM9eQogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAogQ09ORklHX1NFUklPPW0KQEAgLTEwNSwyMyArOTYsMTggQEAKIENPTkZJR19UTVBGUz15CiBDT05GSUdfSkZGUzJfRlM9eQogQ09ORklHX1VCSUZTX0ZTPW0KLUNPTkZJR19VQklGU19GU19YQVRUUj15CiBDT05GSUdfTE9HRlM9bQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfU1FVQVNIRlM9bQogQ09ORklHX1NRVUFTSEZTX1hBVFRSPXkKIENPTkZJR19TUVVBU0hGU19MWk89eQogQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKIENPTkZJR19ST09UX05GUz15CiBDT05GSUdfTkxTX0NPREVQQUdFXzQzNz1tCiBDT05GSUdfTkxTX0lTTzg4NTlfMT1tCiBDT05GSUdfQ1JDX1QxMERJRj1tCiBDT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVURUNUX0hVTkdfVEFTSz15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfQ1JZUFRPX0VDQj15CiBDT05GSUdfQ1JZUFRPX1BDQkM9eQogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCmluZGV4IDU4MzBkNzM1Li4zMzE1YzlmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCkBAIC0xLDYgKzEsNCBAQAogQ09ORklHX1BQQzY0PXkKLUNPTkZJR19BTFRJVkVDPXkKLUNPTkZJR19WU1g9eQogQ09ORklHX1NNUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKQEAgLTQyLDEwICs0MCw4IEBACiBDT05GSUdfUFBDX0NFTExfUVBBQ0U9eQogQ09ORklHX1JUQVNfRkxBU0g9bQogQ09ORklHX0lCTUVCVVM9eQotQ09ORklHX0NQVV9GUkVRPXkKLUNPTkZJR19DUFVfRlJFUV9HT1ZfUE9XRVJTQVZFPXkKLUNPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFPXkKIENPTkZJR19DUFVfRlJFUV9QTUFDNjQ9eQorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKIENPTkZJR19IWl8xMDA9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19QUENfVFJBTlNBQ1RJT05BTF9NRU09eQpAQCAtNTMsNiArNDksNyBAQAogQ09ORklHX0NSQVNIX0RVTVA9eQogQ09ORklHX0lSUV9BTExfQ1BVUz15CiBDT05GSUdfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfS1NNPXkKIENPTkZJR19TQ0hFRF9TTVQ9eQogQ09ORklHX1BDQ0FSRD15CiBDT05GSUdfRUxFQ1RSQV9DRj15CkBAIC04Miw3ICs3OSw2IEBACiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX0RFVlRNUEZTPXkKIENPTkZJR19ERVZUTVBGU19NT1VOVD15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0ZEPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfTkJEPW0KQEAgLTEwMSw3ICs5Nyw2IEBACiBDT05GSUdfQkxLX0RFVl9TUj15CiBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQogQ09ORklHX0NIUl9ERVZfU0c9eQotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9GQ19BVFRSUz15CiBDT05GSUdfU0NTSV9DWEdCM19JU0NTST1tCkBAIC0xMjIsNiArMTE3LDcgQEAKIENPTkZJR19TQ1NJX0RIX1JEQUM9bQogQ09ORklHX1NDU0lfREhfQUxVQT1tCiBDT05GSUdfQVRBPXkKK0NPTkZJR19TQVRBX0FIQ0k9eQogQ09ORklHX1NBVEFfU0lMMjQ9eQogQ09ORklHX1NBVEFfTVY9eQogQ09ORklHX1NBVEFfU1ZXPXkKQEAgLTE0NSw3ICsxNDEsNiBAQAogQ09ORklHX0RNX1VFVkVOVD15CiBDT05GSUdfQURCX1BNVT15CiBDT05GSUdfUE1BQ19TTVU9eQotQ09ORklHX1RIRVJNX1BNNzI9eQogQ09ORklHX1dJTkRGQVJNPXkKIENPTkZJR19XSU5ERkFSTV9QTTgxPXkKIENPTkZJR19XSU5ERkFSTV9QTTkxPXkKQEAgLTIwOSw3ICsyMDQsNiBAQAogQ09ORklHX0kyQ19DSEFSREVWPXkKIENPTkZJR19JMkNfQU1EODExMT15CiBDT05GSUdfSTJDX1BBU0VNST15Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX0ZCPXkKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKIENPTkZJR19GQl9PRj15CkBAIC0yOTYsNiArMjkwLDcgQEAKIENPTkZJR19OSUxGUzJfRlM9bQogQ09ORklHX0FVVE9GUzRfRlM9bQogQ09ORklHX0ZVU0VfRlM9bQorQ09ORklHX09WRVJMQVlfRlM9bQogQ09ORklHX0lTTzk2NjBfRlM9eQogQ09ORklHX1VERl9GUz1tCiBDT05GSUdfTVNET1NfRlM9eQpAQCAtMzI2LDcgKzMyMSw2IEBACiBDT05GSUdfTkxTX0FTQ0lJPXkKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKIENPTkZJR19OTFNfVVRGOD15Ci1DT05GSUdfQ1JDX1QxMERJRj15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQpAQCAtMzYyLDQgKzM1Niw0IEBACiBDT05GSUdfQ1JZUFRPX0RFVl9OWF9FTkNSWVBUPW0KIENPTkZJR19WSVJUVUFMSVpBVElPTj15CiBDT05GSUdfS1ZNX0JPT0szU182ND1tCi1DT05GSUdfS1ZNX0JPT0szU182NF9IVj15CitDT05GSUdfS1ZNX0JPT0szU182NF9IVj1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRlX2RlZmNvbmZpZwppbmRleCA2Nzg4NWIyLi5kZGY5NzczIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NGVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0ZV9kZWZjb25maWcKQEAgLTIyLDcgKzIyLDYgQEAKIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQogQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiBDT05GSUdfTUFDX1BBUlRJVElPTj15Ci1DT05GSUdfRUZJX1BBUlRJVElPTj15CiBDT05GSUdfQ09SRU5FVF9HRU5FUklDPXkKIENPTkZJR19DUFVfRlJFUT15CiBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT15CkBAIC01NSw3ICs1NCw2IEBACiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogQ09ORklHX0RFVlRNUEZTPXkKIENPTkZJR19ERVZUTVBGU19NT1VOVD15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19CTEtfREVWX0ZEPXkKIENPTkZJR19CTEtfREVWX0xPT1A9eQogQ09ORklHX0JMS19ERVZfTkJEPW0KQEAgLTcwLDcgKzY4LDYgQEAKIENPTkZJR19CTEtfREVWX1NSPXkKIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUj15CiBDT05GSUdfQ0hSX0RFVl9TRz15Ci1DT05GSUdfU0NTSV9NVUxUSV9MVU49eQogQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKIENPTkZJR19TQ1NJX0ZDX0FUVFJTPXkKIENPTkZJR19TQ1NJX1NSUF9BVFRSUz15CkBAIC0xMzEsNyArMTI4LDYgQEAKIENPTkZJR19SQVdfRFJJVkVSPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0FNRDgxMTE9eQotQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MPW0KIENPTkZJR19GQj15CiBDT05GSUdfRklSTVdBUkVfRURJRD15CiBDT05GSUdfRkJfT0Y9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzZ4eF9kZWZjb25maWcKaW5kZXggYWQ2ZDZiNS4uZTVkMmMzZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNnh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2eHhfZGVmY29uZmlnCkBAIC0xLDI2ICsxLDIyIEBACiBDT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogIyBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE8gaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQVVESVQ9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogQ09ORklHX1RBU0tTVEFUUz15CiBDT05GSUdfVEFTS19ERUxBWV9BQ0NUPXkKIENPTkZJR19UQVNLX1hBQ0NUPXkKIENPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQotQ09ORklHX0FVRElUPXkKIENPTkZJR19DR1JPVVBTPXkKIENPTkZJR19DR1JPVVBfREVWSUNFPXkKIENPTkZJR19DR1JPVVBfQ1BVQUNDVD15Ci1DT05GSUdfUkVTT1VSQ0VfQ09VTlRFUlM9eQogQ09ORklHX0NHUk9VUF9TQ0hFRD15CiBDT05GSUdfUlRfR1JPVVBfU0NIRUQ9eQotQ09ORklHX1VUU19OUz15Ci1DT05GSUdfSVBDX05TPXkKIENPTkZJR19VU0VSX05TPXkKLUNPTkZJR19QSURfTlM9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTPXkKICMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAogQ09ORklHX1BST0ZJTElORz15CiBDT05GSUdfT1BST0ZJTEU9bQpAQCAtMjksMTAgKzI1LDE5IEBACiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19CTEtfREVWX0lOVEVHUklUWT15CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKK0NPTkZJR19PU0ZfUEFSVElUSU9OPXkKK0NPTkZJR19BTUlHQV9QQVJUSVRJT049eQorQ09ORklHX0JTRF9ESVNLTEFCRUw9eQorQ09ORklHX01JTklYX1NVQlBBUlRJVElPTj15CitDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OPXkKK0NPTkZJR19VTklYV0FSRV9ESVNLTEFCRUw9eQorQ09ORklHX1NHSV9QQVJUSVRJT049eQorQ09ORklHX1NVTl9QQVJUSVRJT049eQorQ09ORklHX0tBUk1BX1BBUlRJVElPTj15CiBDT05GSUdfUFBDX01QQzUyeHg9eQogQ09ORklHX1BQQ19FRklLQT15CiBDT05GSUdfUFBDX01QQzUyMDBfQlVHRklYPXkKLUNPTkZJR19QUENfTVBDNTIwMF9HUElPPXkKIENPTkZJR19QUENfODJ4eD15CiBDT05GSUdfTVBDODI3Ml9BRFM9eQogQ09ORklHX1BRMkZBRFM9eQpAQCAtNTYsNyArNjEsNiBAQAogQ09ORklHX01QQzg2MTBfSFBDRD15CiBDT05GSUdfR0VGX1NCQzYxMD15CiBDT05GSUdfQ1BVX0ZSRVE9eQotQ09ORklHX0NQVV9GUkVRX0RFQlVHPXkKIENPTkZJR19DUFVfRlJFUV9TVEFUPW0KIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFM9eQogQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1VTRVJTUEFDRT15CkBAIC02OSwxOSArNzMsMTMgQEAKIENPTkZJR19UQVVfQVZFUkFHRT15CiBDT05GSUdfUVVJQ0NfRU5HSU5FPXkKIENPTkZJR19RRV9HUElPPXkKLUNPTkZJR19QUENfQkVTVENPTU09eQotQ09ORklHX0dQSU9fTVBDOFhYWD15CiBDT05GSUdfTUNVX01QQzgzNDlFTUlUWD15CiBDT05GSUdfSElHSE1FTT15Ci1DT05GSUdfTk9fSFo9eQotQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfSFpfMTAwMD15CiBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKLSMgQ09ORklHX01JR1JBVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfUE09eQotQ09ORklHX1BNX0RFQlVHPXkKIENPTkZJR19ISUJFUk5BVElPTj15CitDT05GSUdfUE1fREVCVUc9eQogQ09ORklHX0lTQT15CiBDT05GSUdfUENJRVBPUlRCVVM9eQogQ09ORklHX1BDSV9NU0k9eQpAQCAtMTA2LDggKzEwNCw2IEBACiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKIENPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKIENPTkZJR19ORVRfSVBJUD1tCi1DT05GSUdfTkVUX0lQR1JFPW0KLUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15CkBAIC0xMjgsNyArMTI0LDYgQEAKIENPTkZJR19UQ1BfQ09OR19ZRUFIPW0KIENPTkZJR19UQ1BfQ09OR19JTExJTk9JUz1tCiBDT05GSUdfVENQX01ENVNJRz15Ci1DT05GSUdfSVBWNl9QUklWQUNZPXkKIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGPXkKIENPTkZJR19JUFY2X1JPVVRFX0lORk89eQogQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQ9eQpAQCAtMTQ0LDcgKzEzOSw2IEBACiBDT05GSUdfSVBWNl9QSU1TTV9WMj15CiBDT05GSUdfTkVUTEFCRUw9eQogQ09ORklHX05FVEZJTFRFUj15Ci1DT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUU9bQogQ09ORklHX05GX0NPTk5UUkFDSz1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQogQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQpAQCAtMTU5LDcgKzE1Myw2IEBACiBDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQogQ09ORklHX05GX0NUX05FVExJTks9bQotQ09ORklHX05FVEZJTFRFUl9UUFJPWFk9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTk1BUks9bQogQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUks9bQpAQCAtMjA0LDIxICsxOTcsMTIgQEAKIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KIENPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCiAjIENPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQgaXMgbm90IHNldAotQ09ORklHX0lQX05GX1FVRVVFPW0KIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQogQ09ORklHX0lQX05GX01BVENIX0FIPW0KIENPTkZJR19JUF9ORl9NQVRDSF9FQ049bQogQ09ORklHX0lQX05GX01BVENIX1RUTD1tCiBDT05GSUdfSVBfTkZfRklMVEVSPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCi1DT05GSUdfTkZfTkFUPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KLUNPTkZJR19ORl9OQVRfU05NUF9CQVNJQz1tCiBDT05GSUdfSVBfTkZfTUFOR0xFPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KIENPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KQEAgLTIyOSw3ICsyMTMsNiBAQAogQ09ORklHX0lQX05GX0FSUEZJTFRFUj1tCiBDT05GSUdfSVBfTkZfQVJQX01BTkdMRT1tCiBDT05GSUdfTkZfQ09OTlRSQUNLX0lQVjY9bQotQ09ORklHX0lQNl9ORl9RVUVVRT1tCiBDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KIENPTkZJR19JUDZfTkZfTUFUQ0hfQUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9FVUk2ND1tCkBAIC0yNDAsNyArMjIzLDYgQEAKIENPTkZJR19JUDZfTkZfTUFUQ0hfTUg9bQogQ09ORklHX0lQNl9ORl9NQVRDSF9SVD1tCiBDT05GSUdfSVA2X05GX1RBUkdFVF9ITD1tCi1DT05GSUdfSVA2X05GX1RBUkdFVF9MT0c9bQogQ09ORklHX0lQNl9ORl9GSUxURVI9bQogQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUPW0KIENPTkZJR19JUDZfTkZfTUFOR0xFPW0KQEAgLTI2Niw3ICsyNDgsNiBAQAogQ09ORklHX0JSSURHRV9FQlRfUkVESVJFQ1Q9bQogQ09ORklHX0JSSURHRV9FQlRfU05BVD1tCiBDT05GSUdfQlJJREdFX0VCVF9MT0c9bQotQ09ORklHX0JSSURHRV9FQlRfVUxPRz1tCiBDT05GSUdfQlJJREdFX0VCVF9ORkxPRz1tCiBDT05GSUdfSVBfRENDUD1tCiBDT05GSUdfTkVUX0RDQ1BQUk9CRT1tCkBAIC0yODQsOCArMjY1LDYgQEAKIENPTkZJR19ERVZfQVBQTEVUQUxLPW0KIENPTkZJR19JUEREUD1tCiBDT05GSUdfSVBERFBfRU5DQVA9eQotQ09ORklHX0lQRERQX0RFQ0FQPXkKLUNPTkZJR19XQU5fUk9VVEVSPW0KIENPTkZJR19ORVRfU0NIRUQ9eQogQ09ORklHX05FVF9TQ0hfQ0JRPW0KIENPTkZJR19ORVRfU0NIX0hUQj1tCkBAIC0zNDksOCArMzI4LDYgQEAKIENPTkZJR19WSUFfRklSPW0KIENPTkZJR19NQ1NfRklSPW0KIENPTkZJR19CVD1tCi1DT05GSUdfQlRfTDJDQVA9eQotQ09ORklHX0JUX1NDTz15CiBDT05GSUdfQlRfUkZDT01NPW0KIENPTkZJR19CVF9SRkNPTU1fVFRZPXkKIENPTkZJR19CVF9CTkVQPW0KQEAgLTM4MCw3ICszNTcsNiBAQAogIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19ERVZSRVM9eQogQ09ORklHX0NPTk5FQ1RPUj15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKIENPTkZJR19QQVJQT1JUPW0KIENPTkZJR19QQVJQT1JUX1BDPW0KIENPTkZJR19QQVJQT1JUX1NFUklBTD1tCkBAIC0zOTYsNyArMzcyLDYgQEAKIENPTkZJR19DRFJPTV9QS1RDRFZEPW0KIENPTkZJR19WSVJUSU9fQkxLPW0KIENPTkZJR19CTEtfREVWX0hEPXkKLUNPTkZJR19NSVNDX0RFVklDRVM9eQogQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUz1tCiBDT05GSUdfU0VOU09SU19UU0wyNTUwPW0KIENPTkZJR19FRVBST01fQVQyND1tCkBAIC00MTksNyArMzk0LDYgQEAKIENPTkZJR19DSFJfREVWX1NHPXkKIENPTkZJR19DSFJfREVWX1NDSD1tCiBDT05GSUdfU0NTSV9FTkNMT1NVUkU9bQotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9MT0dHSU5HPXkKIENPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQpAQCAtNDM2LDggKzQxMCw4IEBACiAjIENPTkZJR19TQVRBX1BNUCBpcyBub3Qgc2V0CiBDT05GSUdfU0FUQV9GU0w9bQogQ09ORklHX1BEQ19BRE1BPW0KLUNPTkZJR19QQVRBX01QQzUyeHg9bQogQ09ORklHX0FUQV9QSUlYPW0KK0NPTkZJR19QQVRBX01QQzUyeHg9bQogQ09ORklHX1BBVEFfT1BUSURNQT1tCiBDT05GSUdfUEFUQV9TQ0g9bQogQ09ORklHX1BBVEFfVklBPW0KQEAgLTQ3OSwxNCArNDUzLDEwOCBAQAogQ09ORklHX1RIRVJNX0FEVDc0Nlg9bQogQ09ORklHX1dJTkRGQVJNPXkKIENPTkZJR19QTUFDX1JBQ0tNRVRFUj1tCitDT05GSUdfU0VOU09SU19BTVM9bQogQ09ORklHX05FVERFVklDRVM9eQotQ09ORklHX0lGQj1tCi1DT05GSUdfRFVNTVk9bQogQ09ORklHX0JPTkRJTkc9bQotQ09ORklHX01BQ1ZMQU49bQorQ09ORklHX0RVTU1ZPW0KIENPTkZJR19FUVVBTElaRVI9bQorQ09ORklHX05FVF9GQz15CitDT05GSUdfSUZCPW0KK0NPTkZJR19NQUNWTEFOPW0KK0NPTkZJR19ORVRDT05TT0xFPW0KIENPTkZJR19UVU49bQogQ09ORklHX1ZFVEg9bQorQ09ORklHX1ZJUlRJT19ORVQ9bQorQ09ORklHX0FUTV9UQ1A9bQorQ09ORklHX0FUTV9MQU5BST1tCitDT05GSUdfQVRNX0VOST1tCitDT05GSUdfQVRNX05JQ1NUQVI9bQorQ09ORklHX0FUTV9JRFQ3NzI1Mj1tCitDT05GSUdfQVRNX0hFPW0KK0NPTkZJR19FTDM9bQorQ09ORklHX1BDTUNJQV8zQzU3ND1tCitDT05GSUdfUENNQ0lBXzNDNTg5PW0KK0NPTkZJR19WT1JURVg9bQorQ09ORklHX1RZUEhPT049bQorQ09ORklHX0FEQVBURUNfU1RBUkZJUkU9bQorQ09ORklHX0FDRU5JQz1tCitDT05GSUdfQU1EODExMV9FVEg9bQorQ09ORklHX1BDTkVUMzI9bQorQ09ORklHX1BDTUNJQV9OTUNMQU49bQorQ09ORklHX01BQ0U9bQorQ09ORklHX0JNQUM9bQorQ09ORklHX0FUTDE9bQorQ09ORklHX0I0ND1tCitDT05GSUdfQk5YMj1tCitDT05GSUdfVElHT04zPW0KK0NPTkZJR19CTlgyWD1tCitDT05GSUdfQ0hFTFNJT19UMT1tCitDT05GSUdfQ0hFTFNJT19UMV8xRz15CitDT05GSUdfQ0hFTFNJT19UMz1tCitDT05GSUdfTkVUX1RVTElQPXkKK0NPTkZJR19ERTIxMDRYPW0KK0NPTkZJR19UVUxJUD1tCitDT05GSUdfVFVMSVBfTU1JTz15CitDT05GSUdfREU0WDU9bQorQ09ORklHX1dJTkJPTkRfODQwPW0KK0NPTkZJR19ETTkxMDI9bQorQ09ORklHX1VMSTUyNlg9bQorQ09ORklHX1BDTUNJQV9YSVJDT009bQorQ09ORklHX0RMMks9bQorQ09ORklHX1NVTkRBTkNFPW0KK0NPTkZJR19TMklPPW0KK0NPTkZJR19GRUNfTVBDNTJ4eD1tCitDT05GSUdfR0lBTkZBUj1tCitDT05GSUdfUENNQ0lBX0ZNVkoxOFg9bQorQ09ORklHX0UxMDA9bQorQ09ORklHX0UxMDAwPW0KK0NPTkZJR19FMTAwMEU9bQorQ09ORklHX0lHQj1tCitDT05GSUdfSVhHQj1tCitDT05GSUdfSVhHQkU9bQorQ09ORklHX0lQMTAwMD1tCitDT05GSUdfTVY2NDNYWF9FVEg9bQorQ09ORklHX1NLR0U9bQorQ09ORklHX1NLWTI9bQorQ09ORklHX01ZUkkxMEdFPW0KK0NPTkZJR19GRUFMTlg9bQorQ09ORklHX05BVFNFTUk9bQorQ09ORklHX05TODM4MjA9bQorQ09ORklHX1BDTUNJQV9BWE5FVD1tCitDT05GSUdfTkUyMDAwPW0KK0NPTkZJR19ORTJLX1BDST1tCitDT05GSUdfUENNQ0lBX1BDTkVUPW0KK0NPTkZJR19VTFRSQT1tCitDT05GSUdfRk9SQ0VERVRIPW0KK0NPTkZJR19IQU1BQ0hJPW0KK0NPTkZJR19ZRUxMT1dGSU49bQorQ09ORklHX1FMQTNYWFg9bQorQ09ORklHX1FMR0U9bQorQ09ORklHX05FVFhFTl9OSUM9bQorQ09ORklHXzgxMzlDUD1tCitDT05GSUdfODEzOVRPTz1tCisjIENPTkZJR184MTM5VE9PX1BJTyBpcyBub3Qgc2V0CitDT05GSUdfODEzOVRPT184MTI5PXkKK0NPTkZJR19SODE2OT1tCitDT05GSUdfUjYwNDA9bQorQ09ORklHX1NDOTIwMzE9bQorQ09ORklHX1NJUzkwMD1tCitDT05GSUdfU0lTMTkwPW0KK0NPTkZJR19TRkM9bQorQ09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCitDT05GSUdfRVBJQzEwMD1tCitDT05GSUdfSEFQUFlNRUFMPW0KK0NPTkZJR19TVU5HRU09bQorQ09ORklHX0NBU1NJTkk9bQorQ09ORklHX05JVT1tCitDT05GSUdfVEVIVVRJPW0KK0NPTkZJR19UTEFOPW0KK0NPTkZJR19WSUFfUkhJTkU9bQorQ09ORklHX1ZJQV9SSElORV9NTUlPPXkKK0NPTkZJR19WSUFfVkVMT0NJVFk9bQorQ09ORklHX1BDTUNJQV9YSVJDMlBTPW0KK0NPTkZJR19GRERJPXkKK0NPTkZJR19TS0ZQPW0KIENPTkZJR19ORVRfU0IxMDAwPW0KIENPTkZJR19NQVJWRUxMX1BIWT1tCiBDT05GSUdfREFWSUNPTV9QSFk9bQpAQCAtNDk4LDkwICs1NjYsMTggQEAKIENPTkZJR19CUk9BRENPTV9QSFk9bQogQ09ORklHX0lDUExVU19QSFk9bQogQ09ORklHX1JFQUxURUtfUEhZPW0KLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX01BQ0U9bQotQ09ORklHX0JNQUM9bQotQ09ORklHX0hBUFBZTUVBTD1tCi1DT05GSUdfU1VOR0VNPW0KLUNPTkZJR19DQVNTSU5JPW0KLUNPTkZJR19ORVRfVkVORE9SXzNDT009eQotQ09ORklHX0VMMz1tCi1DT05GSUdfVk9SVEVYPW0KLUNPTkZJR19UWVBIT09OPW0KLUNPTkZJR19ORVRfVkVORE9SX1NNQz15Ci1DT05GSUdfVUxUUkE9bQotQ09ORklHX05FVF9UVUxJUD15Ci1DT05GSUdfREUyMTA0WD1tCi1DT05GSUdfVFVMSVA9bQotQ09ORklHX1RVTElQX01NSU89eQotQ09ORklHX0RFNFg1PW0KLUNPTkZJR19XSU5CT05EXzg0MD1tCi1DT05GSUdfRE05MTAyPW0KLUNPTkZJR19VTEk1MjZYPW0KLUNPTkZJR19QQ01DSUFfWElSQ09NPW0KLUNPTkZJR19ORVRfSVNBPXkKLUNPTkZJR19FV1JLMz1tCi1DT05GSUdfTkUyMDAwPW0KLUNPTkZJR19ORVRfUENJPXkKLUNPTkZJR19QQ05FVDMyPW0KLUNPTkZJR19BTUQ4MTExX0VUSD1tCi1DT05GSUdfQURBUFRFQ19TVEFSRklSRT1tCi1DT05GSUdfQjQ0PW0KLUNPTkZJR19GT1JDRURFVEg9bQotQ09ORklHX0UxMDA9bQotQ09ORklHX0ZFQUxOWD1tCi1DT05GSUdfTkFUU0VNST1tCi1DT05GSUdfTkUyS19QQ0k9bQotQ09ORklHXzgxMzlDUD1tCi1DT05GSUdfODEzOVRPTz1tCi0jIENPTkZJR184MTM5VE9PX1BJTyBpcyBub3Qgc2V0Ci1DT05GSUdfODEzOVRPT184MTI5PXkKLUNPTkZJR19SNjA0MD1tCi1DT05GSUdfU0lTOTAwPW0KLUNPTkZJR19FUElDMTAwPW0KLUNPTkZJR19TVU5EQU5DRT1tCi1DT05GSUdfVExBTj1tCi1DT05GSUdfVklBX1JISU5FPW0KLUNPTkZJR19WSUFfUkhJTkVfTU1JTz15Ci1DT05GSUdfU0M5MjAzMT1tCi1DT05GSUdfTkVUX1BPQ0tFVD15Ci1DT05GSUdfREU2MDA9bQotQ09ORklHX0RFNjIwPW0KLUNPTkZJR19GRUNfTVBDNTJ4eD1tCi1DT05GSUdfQUNFTklDPW0KLUNPTkZJR19ETDJLPW0KLUNPTkZJR19FMTAwMD1tCi1DT05GSUdfRTEwMDBFPW0KLUNPTkZJR19JUDEwMDA9bQotQ09ORklHX0lHQj1tCi1DT05GSUdfTlM4MzgyMD1tCi1DT05GSUdfSEFNQUNIST1tCi1DT05GSUdfWUVMTE9XRklOPW0KLUNPTkZJR19SODE2OT1tCi1DT05GSUdfUjgxNjlfVkxBTj15Ci1DT05GSUdfU0lTMTkwPW0KLUNPTkZJR19TS0dFPW0KLUNPTkZJR19TS1kyPW0KLUNPTkZJR19WSUFfVkVMT0NJVFk9bQotQ09ORklHX1RJR09OMz1tCi1DT05GSUdfQk5YMj1tCi1DT05GSUdfR0lBTkZBUj1tCi1DT05GSUdfTVY2NDNYWF9FVEg9bQotQ09ORklHX1FMQTNYWFg9bQotQ09ORklHX0FUTDE9bQotQ09ORklHX0NIRUxTSU9fVDE9bQotQ09ORklHX0NIRUxTSU9fVDFfMUc9eQotQ09ORklHX0NIRUxTSU9fVDM9bQotQ09ORklHX0lYR0JFPW0KLUNPTkZJR19JWEdCPW0KLUNPTkZJR19TMklPPW0KLUNPTkZJR19NWVJJMTBHRT1tCi1DT05GSUdfTkVUWEVOX05JQz1tCi1DT05GSUdfTklVPW0KLUNPTkZJR19URUhVVEk9bQotQ09ORklHX0JOWDJYPW0KLUNPTkZJR19RTEdFPW0KLUNPTkZJR19TRkM9bQorQ09ORklHX1BMSVA9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfTVBQRT1tCitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQT0FUTT1tCitDT05GSUdfUFBQT0U9bQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSVBfU01BUlQ9eQogQ09ORklHX1VTQl9DQVRDPW0KIENPTkZJR19VU0JfS0FXRVRIPW0KIENPTkZJR19VU0JfUEVHQVNVUz1tCkBAIC01OTcsMzkgKzU5Myw2IEBACiBDT05GSUdfVVNCX0FOMjcyMD15CiBDT05GSUdfVVNCX0VQU09OMjg4OD15CiBDT05GSUdfVVNCX0tDMjE5MD15Ci1DT05GSUdfTkVUX1BDTUNJQT15Ci1DT05GSUdfUENNQ0lBXzNDNTg5PW0KLUNPTkZJR19QQ01DSUFfM0M1NzQ9bQotQ09ORklHX1BDTUNJQV9GTVZKMThYPW0KLUNPTkZJR19QQ01DSUFfUENORVQ9bQotQ09ORklHX1BDTUNJQV9OTUNMQU49bQotQ09ORklHX1BDTUNJQV9TTUM5MUM5Mj1tCi1DT05GSUdfUENNQ0lBX1hJUkMyUFM9bQotQ09ORklHX1BDTUNJQV9BWE5FVD1tCi1DT05GSUdfQVRNX1RDUD1tCi1DT05GSUdfQVRNX0xBTkFJPW0KLUNPTkZJR19BVE1fRU5JPW0KLUNPTkZJR19BVE1fTklDU1RBUj1tCi1DT05GSUdfQVRNX0lEVDc3MjUyPW0KLUNPTkZJR19BVE1fSEU9bQotQ09ORklHX0ZEREk9eQotQ09ORklHX1NLRlA9bQotQ09ORklHX1BMSVA9bQotQ09ORklHX1BQUF9NVUxUSUxJTks9eQotQ09ORklHX1BQUF9GSUxURVI9eQotQ09ORklHX1BQUF9BU1lOQz1tCi1DT05GSUdfUFBQX1NZTkNfVFRZPW0KLUNPTkZJR19QUFBfREVGTEFURT1tCi1DT05GSUdfUFBQX01QUEU9bQotQ09ORklHX1BQUE9FPW0KLUNPTkZJR19QUFBPQVRNPW0KLUNPTkZJR19TTElQPW0KLUNPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQotQ09ORklHX1NMSVBfU01BUlQ9eQotQ09ORklHX05FVF9GQz15Ci1DT05GSUdfTkVUQ09OU09MRT1tCi1DT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDPXkKLUNPTkZJR19WSVJUSU9fTkVUPW0KICMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9KT1lERVY9bQogQ09ORklHX0lOUFVUX0VWREVWPXkKQEAgLTY3MCwxMCArNjMzLDggQEAKIENPTkZJR19UQUJMRVRfVVNCX0FJUFRFSz1tCiBDT05GSUdfVEFCTEVUX1VTQl9HVENPPW0KIENPTkZJR19UQUJMRVRfVVNCX0tCVEFCPW0KLUNPTkZJR19UQUJMRVRfVVNCX1dBQ09NPW0KIENPTkZJR19JTlBVVF9NSVNDPXkKIENPTkZJR19JTlBVVF9QQ1NQS1I9bQotQ09ORklHX0lOUFVUX0FUSV9SRU1PVEU9bQogQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyPW0KIENPTkZJR19JTlBVVF9LRVlTUEFOX1JFTU9URT1tCiBDT05GSUdfSU5QVVRfUE9XRVJNQVRFPW0KQEAgLTY4NSwxNiArNjQ2LDE2IEBACiBDT05GSUdfR0FNRVBPUlRfTDQ9bQogQ09ORklHX0dBTUVQT1JUX0VNVTEwSzE9bQogQ09ORklHX0dBTUVQT1JUX0ZNODAxPW0KLUNPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkc9eQotIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKIENPTkZJR19ST0NLRVRQT1JUPW0KIENPTkZJR19DWUNMQURFUz1tCiBDT05GSUdfU1lOQ0xJTks9bQogQ09ORklHX1NZTkNMSU5LTVA9bQogQ09ORklHX1NZTkNMSU5LX0dUPW0KLUNPTkZJR19OX0hETEM9bQogQ09ORklHX05PWk9NST1tCitDT05GSUdfTl9IRExDPW0KKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfODI1MF9DUz1tCkBAIC03MTEsOCArNjcyLDYgQEAKIENPTkZJR19TRVJJQUxfTVBDNTJ4eF9DT05TT0xFX0JBVUQ9MTE1MjAwCiBDT05GSUdfU0VSSUFMX0pTTT1tCiBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNPXkKLSMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKLUNPTkZJR19CUklRX1BBTkVMPW0KIENPTkZJR19QUklOVEVSPW0KIENPTkZJR19MUF9DT05TT0xFPXkKIENPTkZJR19QUERFVj1tCkBAIC03MzUsNiArNjk0LDcgQEAKIENPTkZJR19JMkNfUENBX0lTQT1tCiBDT05GSUdfSTJDX1NUVUI9bQogQ09ORklHX0dQSU9fU1lTRlM9eQorQ09ORklHX0dQSU9fTVBDOFhYWD15CiBDT05GSUdfVzE9bQogQ09ORklHX1cxX01BU1RFUl9EUzI0OTA9bQogQ09ORklHX1cxX01BU1RFUl9EUzI0ODI9bQpAQCAtNzU0LDE1ICs3MTQsMTMgQEAKIENPTkZJR19TRU5TT1JTX0FETTEwMzE9bQogQ09ORklHX1NFTlNPUlNfQURNOTI0MD1tCiBDT05GSUdfU0VOU09SU19BRFQ3NDcwPW0KLUNPTkZJR19TRU5TT1JTX0FNUz1tCiBDT05GSUdfU0VOU09SU19BVFhQMT1tCiBDT05GSUdfU0VOU09SU19EUzE2MjE9bQotQ09ORklHX1NFTlNPUlNfRjcxODA1Rj1tCi1DT05GSUdfU0VOU09SU19GNzE4ODJGRz1tCiBDT05GSUdfU0VOU09SU19GNzUzNzVTPW0KIENPTkZJR19TRU5TT1JTX0dMNTE4U009bQogQ09ORklHX1NFTlNPUlNfR0w1MjBTTT1tCi1DT05GSUdfU0VOU09SU19JVDg3PW0KK0NPTkZJR19TRU5TT1JTX01BWDE2MTk9bQorQ09ORklHX1NFTlNPUlNfTUFYNjY1MD1tCiBDT05GSUdfU0VOU09SU19MTTYzPW0KIENPTkZJR19TRU5TT1JTX0xNNzU9bQogQ09ORklHX1NFTlNPUlNfTE03Nz1tCkBAIC03NzQsMjAgKzczMiwxMiBAQAogQ09ORklHX1NFTlNPUlNfTE05MD1tCiBDT05GSUdfU0VOU09SU19MTTkyPW0KIENPTkZJR19TRU5TT1JTX0xNOTM9bQotQ09ORklHX1NFTlNPUlNfTUFYMTYxOT1tCi1DT05GSUdfU0VOU09SU19NQVg2NjUwPW0KLUNPTkZJR19TRU5TT1JTX1BDODczNjA9bQotQ09ORklHX1NFTlNPUlNfUEM4NzQyNz1tCiBDT05GSUdfU0VOU09SU19QQ0Y4NTkxPW0KIENPTkZJR19TRU5TT1JTX1NJUzU1OTU9bQotQ09ORklHX1NFTlNPUlNfRE1FMTczNz1tCi1DT05GSUdfU0VOU09SU19TTVNDNDdNMT1tCiBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyPW0KLUNPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTc9bQogQ09ORklHX1NFTlNPUlNfQURTNzgyOD1tCiBDT05GSUdfU0VOU09SU19USE1DNTA9bQogQ09ORklHX1NFTlNPUlNfVklBNjg2QT1tCi1DT05GSUdfU0VOU09SU19WVDEyMTE9bQogQ09ORklHX1NFTlNPUlNfVlQ4MjMxPW0KIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQ9bQogQ09ORklHX1NFTlNPUlNfVzgzNzkxRD1tCkBAIC03OTUsOCArNzQ1LDYgQEAKIENPTkZJR19TRU5TT1JTX1c4Mzc5Mz1tCiBDT05GSUdfU0VOU09SU19XODNMNzg1VFM9bQogQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HPW0KLUNPTkZJR19TRU5TT1JTX1c4MzYyN0hGPW0KLUNPTkZJR19TRU5TT1JTX1c4MzYyN0VIRj1tCiBDT05GSUdfVEhFUk1BTD15CiBDT05GSUdfV0FUQ0hET0c9eQogQ09ORklHX1NPRlRfV0FUQ0hET0c9bQpAQCAtODE1LDcgKzc2Myw2IEBACiBDT05GSUdfRFJNX1NJUz1tCiBDT05GSUdfRFJNX1ZJQT1tCiBDT05GSUdfRFJNX1NBVkFHRT1tCi1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX0ZCPXkKIENPTkZJR19GQl9DSVJSVVM9bQogQ09ORklHX0ZCX09GPXkKQEAgLTg1MCwxMCArNzk3LDggQEAKIENPTkZJR19GQl9TTTUwMT1tCiBDT05GSUdfRkJfSUJNX0dYVDQ1MDA9eQogQ09ORklHX0xDRF9QTEFURk9STT1tCi1DT05GSUdfRElTUExBWV9TVVBQT1JUPW0KIENPTkZJR19WR0FDT05fU09GVF9TQ1JPTExCQUNLPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKLUNPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OPXkKIENPTkZJR19MT0dPPXkKICMgQ09ORklHX0xPR09fTElOVVhfTU9OTyBpcyBub3Qgc2V0CkBAIC04OTcsNyArODQyLDYgQEAKIENPTkZJR19TTkRfT1hZR0VOPW0KIENPTkZJR19TTkRfQ1M0MjgxPW0KIENPTkZJR19TTkRfQ1M0NlhYPW0KLUNPTkZJR19TTkRfQ1M1NTMwPW0KIENPTkZJR19TTkRfREFSTEEyMD1tCiBDT05GSUdfU05EX0dJTkEyMD1tCiBDT05GSUdfU05EX0xBWUxBMjA9bQpAQCAtOTE5LDcgKzg2Myw2IEBACiBDT05GSUdfU05EX0ZNODAxPW0KIENPTkZJR19TTkRfSERTUD1tCiBDT05GSUdfU05EX0hEU1BNPW0KLUNPTkZJR19TTkRfSElGSUVSPW0KIENPTkZJR19TTkRfSUNFMTcxMj1tCiBDT05GSUdfU05EX0lDRTE3MjQ9bQogQ09ORklHX1NORF9LT1JHMTIxMj1tCkBAIC05NDksOCArODkyLDYgQEAKIENPTkZJR19TTkRfVVNCX0NBSUFRX0lOUFVUPXkKICMgQ09ORklHX1NORF9QQ01DSUEgaXMgbm90IHNldAogQ09ORklHX0hJRFJBVz15Ci1DT05GSUdfSElEX1BJRD15Ci1DT05GSUdfVVNCX0hJRERFVj15CiBDT05GSUdfSElEX0dZUkFUSU9OPXkKIENPTkZJR19MT0dJVEVDSF9GRj15CiBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkY9eQpAQCAtOTYwLDEyICs5MDEsMTIgQEAKIENPTkZJR19ISURfU0FNU1VORz15CiBDT05GSUdfSElEX1NPTlk9eQogQ09ORklHX0hJRF9TVU5QTFVTPXkKK0NPTkZJR19ISURfUElEPXkKK0NPTkZJR19VU0JfSElEREVWPXkKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15Ci0jIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIENPTkZJR19VU0JfRUhDSV9IQ0Q9bQotQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKIENPTkZJR19VU0JfRUhDSV9GU0w9eQogQ09ORklHX1VTQl9PSENJX0hDRD1tCiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRT15CkBAIC0xMDAxLDcgKzk0Miw2IEBACiBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHPW0KIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KLUNPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQ9bQogQ09ORklHX1VTQl9TRVJJQUxfVklTT1I9bQogQ09ORklHX1VTQl9TRVJJQUxfSVBBUT1tCiBDT05GSUdfVVNCX1NFUklBTF9JUj1tCkBAIC0xMDE2LDEyICs5NTYsMTAgQEAKIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyPW0KIENPTkZJR19VU0JfU0VSSUFMX01PUzc3MjA9bQogQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MD1tCi1DT05GSUdfVVNCX1NFUklBTF9NT1RPUk9MQT1tCiBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU49bQogQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KIENPTkZJR19VU0JfU0VSSUFMX09USTY4NTg9bQogQ09ORklHX1VTQl9TRVJJQUxfU1BDUDhYNT1tCi1DT05GSUdfVVNCX1NFUklBTF9IUDRYPW0KIENPTkZJR19VU0JfU0VSSUFMX1NBRkU9bQogQ09ORklHX1VTQl9TRVJJQUxfU0FGRV9QQURERUQ9eQogQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1M9bQpAQCAtMTA4MywxMiArMTAyMSwxNCBAQAogQ09ORklHX1JUQ19EUlZfTTQ4VDU5PW0KIENPTkZJR19SVENfRFJWX1YzMDIwPW0KIENPTkZJR19ETUFERVZJQ0VTPXkKK0NPTkZJR19QUENfQkVTVENPTU09eQogQ09ORklHX0FVWERJU1BMQVk9eQogQ09ORklHX0tTMDEwOD1tCiBDT05GSUdfVUlPPW0KIENPTkZJR19VSU9fQ0lGPW0KLUNPTkZJR19VSU9fUERSVj1tCiBDT05GSUdfVUlPX1BEUlZfR0VOSVJRPW0KK0NPTkZJR19WSVJUSU9fUENJPW0KK0NPTkZJR19WSVJUSU9fQkFMTE9PTj1tCiBDT05GSUdfRVhUMl9GUz1tCiBDT05GSUdfRVhUMl9GU19YQVRUUj15CiBDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQpAQCAtMTExMSwxMiArMTA1MSw3IEBACiBDT05GSUdfWEZTX1FVT1RBPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKIENPTkZJR19HRlMyX0ZTPW0KLUNPTkZJR19PQ0ZTMl9GUz1tCi0jIENPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HIGlzIG5vdCBzZXQKIENPTkZJR19RVU9UQV9ORVRMSU5LX0lOVEVSRkFDRT15Ci0jIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HIGlzIG5vdCBzZXQKLUNPTkZJR19RRk1UX1YyPXkKLUNPTkZJR19BVVRPRlNfRlM9bQogQ09ORklHX0FVVE9GUzRfRlM9bQogQ09ORklHX0ZVU0VfRlM9bQogQ09ORklHX0lTTzk2NjBfRlM9eQpAQCAtMTE0NSwyMCArMTA4MCwxNyBAQAogQ09ORklHX1NZU1ZfRlM9bQogQ09ORklHX1VGU19GUz1tCiBDT05GSUdfTkZTX0ZTPW0KLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX05GU19WM19BQ0w9eQotQ09ORklHX05GU19WND15CitDT05GSUdfTkZTX1Y0PW0KIENPTkZJR19ORlNEPW0KIENPTkZJR19ORlNEX1YzX0FDTD15CiBDT05GSUdfTkZTRF9WND15Ci1DT05GSUdfUlBDU0VDX0dTU19TUEtNMz1tCiBDT05GSUdfQ0lGUz1tCiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0g9eQogQ09ORklHX0NJRlNfVVBDQUxMPXkKIENPTkZJR19DSUZTX1hBVFRSPXkKIENPTkZJR19DSUZTX1BPU0lYPXkKIENPTkZJR19DSUZTX0RGU19VUENBTEw9eQotQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMPXkKIENPTkZJR19OQ1BfRlM9bQogQ09ORklHX05DUEZTX1BBQ0tFVF9TSUdOSU5HPXkKIENPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HPXkKQEAgLTExNzAsMTcgKzExMDIsNiBAQAogQ09ORklHX05DUEZTX0VYVFJBUz15CiBDT05GSUdfQ09EQV9GUz1tCiBDT05GSUdfOVBfRlM9bQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfT1NGX1BBUlRJVElPTj15Ci1DT05GSUdfQU1JR0FfUEFSVElUSU9OPXkKLUNPTkZJR19CU0RfRElTS0xBQkVMPXkKLUNPTkZJR19NSU5JWF9TVUJQQVJUSVRJT049eQotQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15Ci1DT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMPXkKLUNPTkZJR19TR0lfUEFSVElUSU9OPXkKLUNPTkZJR19TVU5fUEFSVElUSU9OPXkKLUNPTkZJR19LQVJNQV9QQVJUSVRJT049eQotQ09ORklHX0VGSV9QQVJUSVRJT049eQogQ09ORklHX05MU19ERUZBVUxUPSJ1dGY4IgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQogQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQpAQCAtMTIxOSwyOSArMTE0MCwyNyBAQAogQ09ORklHX05MU19JU084ODU5XzE1PW0KIENPTkZJR19OTFNfS09JOF9SPW0KIENPTkZJR19OTFNfS09JOF9VPW0KLUNPTkZJR19ETE09bQotQ09ORklHX0RMTV9ERUJVRz15CitDT05GSUdfREVCVUdfSU5GTz15CiAjIENPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEIGlzIG5vdCBzZXQKLUNPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfVU5VU0VEX1NZTUJPTFM9eQogQ09ORklHX0hFQURFUlNfQ0hFQ0s9eQorQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFQlVHX1NISVJRPXkKLUNPTkZJR19USU1FUl9TVEFUUz15CiBDT05GSUdfREVCVUdfT0JKRUNUUz15CiBDT05GSUdfREVCVUdfT0JKRUNUU19GUkVFPXkKIENPTkZJR19ERUJVR19PQkpFQ1RTX1RJTUVSUz15CiBDT05GSUdfU0xVQl9ERUJVR19PTj15CitDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQorQ09ORklHX0RFQlVHX1ZNPXkKK0NPTkZJR19ERUJVR19ISUdITUVNPXkKK0NPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XPXkKK0NPTkZJR19ERUJVR19TSElSUT15CitDT05GSUdfVElNRVJfU1RBVFM9eQogQ09ORklHX0RFQlVHX1JUX01VVEVYRVM9eQogQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLUNPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15Ci1DT05GSUdfREVCVUdfSElHSE1FTT15Ci1DT05GSUdfREVCVUdfSU5GTz15Ci1DT05GSUdfREVCVUdfVk09eQogQ09ORklHX0RFQlVHX0xJU1Q9eQogQ09ORklHX0RFQlVHX1NHPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogQ09ORklHX0ZBVUxUX0lOSkVDVElPTj15CiBDT05GSUdfRkFJTFNMQUI9eQogQ09ORklHX0ZBSUxfUEFHRV9BTExPQz15CkBAIC0xMjUwLDE3ICsxMTY5LDEyIEBACiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTPXkKIENPTkZJR19GQVVMVF9JTkpFQ1RJT05fU1RBQ0tUUkFDRV9GSUxURVI9eQogQ09ORklHX0xBVEVOQ1lUT1A9eQotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19TQ0hFRF9UUkFDRVI9eQogQ09ORklHX1NUQUNLX1RSQUNFUj15CiBDT05GSUdfQkxLX0RFVl9JT19UUkFDRT15Ci1DT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15Ci1DT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogQ09ORklHX1hNT049eQogQ09ORklHX0JPT1RYX1RFWFQ9eQogQ09ORklHX1BQQ19FQVJMWV9ERUJVRz15Ci1DT05GSUdfUFBDX0VBUkxZX0RFQlVHX0JPT1RYPXkKLUNPTkZJR19LRVlTPXkKIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15CiBDT05GSUdfU0VDVVJJVFk9eQogQ09ORklHX1NFQ1VSSVRZX05FVFdPUks9eQpAQCAtMTI2OCw5ICsxMTgyLDcgQEAKIENPTkZJR19TRUNVUklUWV9TRUxJTlVYPXkKIENPTkZJR19TRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTT15CiBDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ESVNBQkxFPXkKLUNPTkZJR19DUllQVE9fTlVMTD1tCiBDT05GSUdfQ1JZUFRPX1RFU1Q9bQotQ09ORklHX0NSWVBUT19DQ009bQogQ09ORklHX0NSWVBUT19HQ009bQogQ09ORklHX0NSWVBUT19DVFM9bQogQ09ORklHX0NSWVBUT19MUlc9bQpAQCAtMTI3OCwxNCArMTE5MCwxMiBAQAogQ09ORklHX0NSWVBUT19YVFM9bQogQ09ORklHX0NSWVBUT19ITUFDPXkKIENPTkZJR19DUllQVE9fWENCQz1tCi1DT05GSUdfQ1JZUFRPX01END1tCiBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KIENPTkZJR19DUllQVE9fUk1EMTI4PW0KIENPTkZJR19DUllQVE9fUk1EMTYwPW0KIENPTkZJR19DUllQVE9fUk1EMjU2PW0KIENPTkZJR19DUllQVE9fUk1EMzIwPW0KIENPTkZJR19DUllQVE9fU0hBMT15Ci1DT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCiBDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCiBDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCiBDT05GSUdfQ1JZUFRPX1dQNTEyPW0KQEAgLTEzMDYsNSArMTIxNiwzIEBACiBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVhfUk5HPXkKIENPTkZJR19DUllQVE9fREVWX1RBTElUT1M9bQogQ09ORklHX1ZJUlRVQUxJWkFUSU9OPXkKLUNPTkZJR19WSVJUSU9fUENJPW0KLUNPTkZJR19WSVJUSU9fQkFMTE9PTj1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcTJmYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCmluZGV4IGJhYWQ4ZGIuLjNlMzM2ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BxMmZhZHNfZGVmY29uZmlnCkBAIC0xLDIwICsxLDE5IEBACiBDT05GSUdfU1lTVklQQz15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CiBDT05GSUdfSUtDT05GSUc9eQogQ09ORklHX0lLQ09ORklHX1BST0M9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfRVhQRVJUPXkKIENPTkZJR19LQUxMU1lNU19BTEw9eQorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiBDT05GSUdfUFBDXzgyeHg9eQogQ09ORklHX1BRMkZBRFM9eQotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKLUNPTkZJR19TUEFSU0VfSVJRPXkKIENPTkZJR19QQ0k9eQotIyBDT05GSUdfODI2MF9QQ0k5IGlzIG5vdCBzZXQKIENPTkZJR19ORVQ9eQogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfVU5JWD15CkBAIC0yOSw3ICsyOCw2IEBACiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9KRURFQ1BST0JFPXkKIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKQEAgLTQxLDU1ICszOSw0MyBAQAogQ09ORklHX01URF9DRklfSTQ9eQogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9QSFlTTUFQX09GPXkKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfSURFPXkKIENPTkZJR19ORVRERVZJQ0VTPXkKIENPTkZJR19UVU49eQotQ09ORklHX0RBVklDT01fUEhZPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQogQ09ORklHX0ZTX0VORVQ9eQogIyBDT05GSUdfRlNfRU5FVF9IQVNfU0NDIGlzIG5vdCBzZXQKIENPTkZJR19GU19FTkVUX01ESU9fRkNDPXkKK0NPTkZJR19EQVZJQ09NX1BIWT15CiBDT05GSUdfUFBQPXkKK0NPTkZJR19QUFBfREVGTEFURT15CiBDT05GSUdfUFBQX0FTWU5DPXkKIENPTkZJR19QUFBfU1lOQ19UVFk9eQotQ09ORklHX1BQUF9ERUZMQVRFPXkKIENPTkZJR19JTlBVVF9FVkRFVj15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX0NQTT15CiBDT05GSUdfU0VSSUFMX0NQTV9DT05TT0xFPXkKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLUNPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD15Ci0jIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVD15Ci1DT05GSUdfVVNCX0dBREdFVF9NNjY1OTI9eQorQ09ORklHX1VTQl9FVEg9eQogQ09ORklHX0VYVDJfRlM9eQogQ09ORklHX0VYVDNfRlM9eQogIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19BVVRPRlM0X0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfQ1JBTUZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfTkZTX1YzX0FDTD15CiBDT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci1DT05GSUdfTkxTPXkKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfQVNDSUk9eQogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX05MU19VVEY4PXkKK0NPTkZJR19ERUJVR19JTkZPPXkKIENPTkZJR19NQUdJQ19TWVNSUT15Ci1DT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKICMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKIENPTkZJR19CRElfU1dJVENIPXkKIENPTkZJR19DUllQVE9fQ0JDPXkKIENPTkZJR19DUllQVE9fRUNCPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCmluZGV4IDg3OWRlNWUuLmFkYzE0ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZwpAQCAtOCw3ICs4LDYgQEAKIENPTkZJR19GSEFORExFPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19SRF9MWk1BPXkKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfRU1CRURERUQ9eQogIyBDT05GSUdfUEVSRl9FVkVOVFMgaXMgbm90IHNldApAQCAtMjIsNiArMjEsOCBAQAogIyBDT05GSUdfUFBDX1BTRVJJRVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19QUzM9eQorQ09ORklHX1BTM19BRFZBTkNFRD15CitDT05GSUdfUFMzX1JFUE9TSVRPUllfV1JJVEU9eQogQ09ORklHX1BTM19ESVNLPXkKIENPTkZJR19QUzNfUk9NPXkKIENPTkZJR19QUzNfRkxBU0g9eQpAQCAtNjQsMTEgKzY1LDkgQEAKIENPTkZJR19DRkc4MDIxMT1tCiBDT05GSUdfQ0ZHODAyMTFfV0VYVD15CiBDT05GSUdfTUFDODAyMTE9bQotQ09ORklHX01BQzgwMjExX1JDX1BJRD15CiAjIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTCBpcyBub3Qgc2V0CiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjU1MzUKQEAgLTc2LDcgKzc1LDYgQEAKIENPTkZJR19CTEtfREVWX1NEPXkKIENPTkZJR19CTEtfREVWX1NSPXkKIENPTkZJR19DSFJfREVWX1NHPW0KLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15CiAjIENPTkZJR19TQ1NJX0xPV0xFVkVMIGlzIG5vdCBzZXQKIENPTkZJR19NRD15CiBDT05GSUdfQkxLX0RFVl9ETT1tCkBAIC0xMDcsNyArMTA1LDYgQEAKICMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0Ci1DT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQogQ09ORklHX0ZCPXkKIENPTkZJR19GQl9QUzM9eQogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldApAQCAtMTMwLDggKzEyNyw2IEBACiBDT05GSUdfSElEX0xPR0lURUNIPW0KIENPTkZJR19ISURfTE9HSVRFQ0hfREo9bQogQ09ORklHX0hJRF9NSUNST1NPRlQ9bQotQ09ORklHX0hJRF9QUzNSRU1PVEU9bQotQ09ORklHX0hJRF9TT05ZPW0KIENPTkZJR19ISURfU1VOUExVUz1tCiBDT05GSUdfSElEX1NNQVJUSk9ZUExVUz1tCiBDT05GSUdfVVNCX0hJRERFVj15CkBAIC0xNjksMTggKzE2NCwxNyBAQAogQ09ORklHX05MU19JU084ODU5XzE9eQogQ09ORklHX0NSQ19DQ0lUVD1tCiBDT05GSUdfQ1JDX1QxMERJRj15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX0RFQlVHX0ZTPXkKK0NPTkZJR19NQUdJQ19TWVNSUT15CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1c9eQogQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQogQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQogQ09ORklHX0RFQlVHX0xPQ0tERVA9eQotQ09ORklHX0RFQlVHX0lORk89eQotQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKIENPTkZJR19ERUJVR19MSVNUPXkKIENPTkZJR19SQ1VfQ1BVX1NUQUxMX1RJTUVPVVQ9NjAKICMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfU1RBQ0tPVkVSRkxPVz15Ci1DT05GSUdfQ1JZUFRPX0NDTT1tCiBDT05GSUdfQ1JZUFRPX0dDTT1tCiBDT05GSUdfQ1JZUFRPX1BDQkM9bQogQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCmluZGV4IDFmOTczNjQuLmMyZTM5ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCkBAIC0xLDYgKzEsNCBAQAogQ09ORklHX1BQQzY0PXkKLUNPTkZJR19BTFRJVkVDPXkKLUNPTkZJR19WU1g9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0yMDQ4CiBDT05GSUdfU1lTVklQQz15CkBAIC0xNywxMSArMTUsMTggQEAKIENPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19OVU1BX0JBTEFOQ0lORz15CitDT05GSUdfTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEPXkKIENPTkZJR19DR1JPVVBTPXkKIENPTkZJR19DR1JPVVBfRlJFRVpFUj15CiBDT05GSUdfQ0dST1VQX0RFVklDRT15CiBDT05GSUdfQ1BVU0VUUz15CiBDT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eQorQ09ORklHX01FTUNHPXkKK0NPTkZJR19NRU1DR19TV0FQPXkKK0NPTkZJR19DR1JPVVBfUEVSRj15CitDT05GSUdfQ0dST1VQX1NDSEVEPXkKK0NPTkZJR19VU0VSX05TPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQpAQCAtNDAsNiArNDUsNyBAQAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX1JUQVNfRkxBU0g9bQogQ09ORklHX0lCTUVCVVM9eQorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKIENPTkZJR19IWl8xMDA9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19QUENfVFJBTlNBQ1RJT05BTF9NRU09eQpAQCAtNDcsNiArNTMsOCBAQAogQ09ORklHX0lSUV9BTExfQ1BVUz15CiBDT05GSUdfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0tTTT15CitDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0U9eQogQ09ORklHX1BQQ182NEtfUEFHRVM9eQogQ09ORklHX1BQQ19TVUJQQUdFX1BST1Q9eQogQ09ORklHX1NDSEVEX1NNVD15CkBAIC02OSwxMCArNzcsMTAgQEAKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19CUklER0U9bQorQ09ORklHX1ZMQU5fODAyMVE9bQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19ERVZUTVBGUz15CiBDT05GSUdfREVWVE1QRlNfTU9VTlQ9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfUEFSUE9SVD1tCiBDT05GSUdfUEFSUE9SVF9QQz1tCiBDT05GSUdfQkxLX0RFVl9GRD1tCkBAIC05MCw3ICs5OCw2IEBACiBDT05GSUdfQkxLX0RFVl9TUj15CiBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQogQ09ORklHX0NIUl9ERVZfU0c9eQotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9GQ19BVFRSUz15CiBDT05GSUdfU0NTSV9DWEdCM19JU0NTST1tCkBAIC0xMTEsNiArMTE4LDcgQEAKIENPTkZJR19TQ1NJX0RIX1JEQUM9bQogQ09ORklHX1NDU0lfREhfQUxVQT1tCiBDT05GSUdfQVRBPXkKK0NPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfQVRBX1NGRiBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQpAQCAtMTI0LDYgKzEzMiw3IEBACiBDT05GSUdfQkxLX0RFVl9ETT15CiBDT05GSUdfRE1fQ1JZUFQ9bQogQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9USElOX1BST1ZJU0lPTklORz1tCiBDT05GSUdfRE1fTUlSUk9SPW0KIENPTkZJR19ETV9aRVJPPW0KIENPTkZJR19ETV9NVUxUSVBBVEg9bQpAQCAtMTMyLDggKzE0MSwxMiBAQAogQ09ORklHX0RNX1VFVkVOVD15CiBDT05GSUdfQk9ORElORz1tCiBDT05GSUdfRFVNTVk9bQorQ09ORklHX01BQ1ZMQU49bQorQ09ORklHX01BQ1ZUQVA9bQorQ09ORklHX1ZYTEFOPW0KIENPTkZJR19ORVRDT05TT0xFPXkKIENPTkZJR19UVU49bQorQ09ORklHX1ZFVEg9bQogQ09ORklHX1ZJUlRJT19ORVQ9bQogQ09ORklHX1ZIT1NUX05FVD1tCiBDT05GSUdfVk9SVEVYPXkKQEAgLTE2Niw2ICsxNzksNyBAQAogQ09ORklHX0lOUFVUX01JU0M9eQogQ09ORklHX0lOUFVUX1BDU1BLUj1tCiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTPXkKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0lDT009bQpAQCAtMjQyLDYgKzI1Niw3IEBACiBDT05GSUdfTklMRlMyX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KK0NPTkZJR19PVkVSTEFZX0ZTPW0KIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19VREZfRlM9bQogQ09ORklHX01TRE9TX0ZTPXkKQEAgLTI3MCw3ICsyODUsNiBAQAogQ09ORklHX05MU19BU0NJST15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15CiBDT05GSUdfTkxTX1VURjg9eQotQ09ORklHX0NSQ19UMTBESUY9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKQEAgLTMwNCw3ICszMTgsNCBAQAogQ09ORklHX0NSWVBUT19ERVZfTlhfRU5DUllQVD1tCiBDT05GSUdfVklSVFVBTElaQVRJT049eQogQ09ORklHX0tWTV9CT09LM1NfNjQ9bQotQ09ORklHX0tWTV9CT09LM1NfNjRfSFY9eQotQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFPXkKLUNPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVM9eQotQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKK0NPTkZJR19LVk1fQk9PSzNTXzY0X0hWPW0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfbGVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19sZV9kZWZjb25maWcKaW5kZXggYWM3Y2E1OC4uMDliYzk2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19sZV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19sZV9kZWZjb25maWcKQEAgLTEsNiArMSw0IEBACiBDT05GSUdfUFBDNjQ9eQotQ09ORklHX0FMVElWRUM9eQotQ09ORklHX1ZTWD15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTIwNDgKIENPTkZJR19DUFVfTElUVExFX0VORElBTj15CkBAIC0xOCwxMSArMTYsMTggQEAKIENPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19OVU1BX0JBTEFOQ0lORz15CitDT05GSUdfTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEPXkKIENPTkZJR19DR1JPVVBTPXkKIENPTkZJR19DR1JPVVBfRlJFRVpFUj15CiBDT05GSUdfQ0dST1VQX0RFVklDRT15CiBDT05GSUdfQ1BVU0VUUz15CiBDT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eQorQ09ORklHX01FTUNHPXkKK0NPTkZJR19NRU1DR19TV0FQPXkKK0NPTkZJR19DR1JPVVBfUEVSRj15CitDT05GSUdfQ0dST1VQX1NDSEVEPXkKK0NPTkZJR19VU0VSX05TPXkKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKIENPTkZJR19QUk9GSUxJTkc9eQpAQCAtNDEsNiArNDYsNyBAQAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX1JUQVNfRkxBU0g9bQogQ09ORklHX0lCTUVCVVM9eQorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX09OREVNQU5EPXkKIENPTkZJR19IWl8xMDA9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19QUENfVFJBTlNBQ1RJT05BTF9NRU09eQpAQCAtNDgsNiArNTQsOCBAQAogQ09ORklHX0lSUV9BTExfQ1BVUz15CiBDT05GSUdfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0tTTT15CitDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0U9eQogQ09ORklHX1BQQ182NEtfUEFHRVM9eQogQ09ORklHX1BQQ19TVUJQQUdFX1BST1Q9eQogQ09ORklHX1NDSEVEX1NNVD15CkBAIC03MCwxMCArNzgsMTAgQEAKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19CUklER0U9bQorQ09ORklHX1ZMQU5fODAyMVE9bQogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKIENPTkZJR19ERVZUTVBGUz15CiBDT05GSUdfREVWVE1QRlNfTU9VTlQ9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfUEFSUE9SVD1tCiBDT05GSUdfUEFSUE9SVF9QQz1tCiBDT05GSUdfQkxLX0RFVl9GRD1tCkBAIC05MSw3ICs5OSw2IEBACiBDT05GSUdfQkxLX0RFVl9TUj15CiBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQogQ09ORklHX0NIUl9ERVZfU0c9eQotQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKIENPTkZJR19TQ1NJX0NPTlNUQU5UUz15CiBDT05GSUdfU0NTSV9GQ19BVFRSUz15CiBDT05GSUdfU0NTSV9DWEdCM19JU0NTST1tCkBAIC0xMTIsNiArMTE5LDcgQEAKIENPTkZJR19TQ1NJX0RIX1JEQUM9bQogQ09ORklHX1NDU0lfREhfQUxVQT1tCiBDT05GSUdfQVRBPXkKK0NPTkZJR19TQVRBX0FIQ0k9eQogIyBDT05GSUdfQVRBX1NGRiBpcyBub3Qgc2V0CiBDT05GSUdfTUQ9eQogQ09ORklHX0JMS19ERVZfTUQ9eQpAQCAtMTI1LDYgKzEzMyw3IEBACiBDT05GSUdfQkxLX0RFVl9ETT15CiBDT05GSUdfRE1fQ1JZUFQ9bQogQ09ORklHX0RNX1NOQVBTSE9UPW0KK0NPTkZJR19ETV9USElOX1BST1ZJU0lPTklORz1tCiBDT05GSUdfRE1fTUlSUk9SPW0KIENPTkZJR19ETV9aRVJPPW0KIENPTkZJR19ETV9NVUxUSVBBVEg9bQpAQCAtMTMzLDggKzE0MiwxMiBAQAogQ09ORklHX0RNX1VFVkVOVD15CiBDT05GSUdfQk9ORElORz1tCiBDT05GSUdfRFVNTVk9bQorQ09ORklHX01BQ1ZMQU49bQorQ09ORklHX01BQ1ZUQVA9bQorQ09ORklHX1ZYTEFOPW0KIENPTkZJR19ORVRDT05TT0xFPXkKIENPTkZJR19UVU49bQorQ09ORklHX1ZFVEg9bQogQ09ORklHX1ZJUlRJT19ORVQ9bQogQ09ORklHX1ZIT1NUX05FVD1tCiBDT05GSUdfVk9SVEVYPXkKQEAgLTE2Nyw2ICsxODAsNyBAQAogQ09ORklHX0lOUFVUX01JU0M9eQogQ09ORklHX0lOUFVUX1BDU1BLUj1tCiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTPXkKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0lDT009bQpAQCAtMjQzLDYgKzI1Nyw3IEBACiBDT05GSUdfTklMRlMyX0ZTPW0KIENPTkZJR19BVVRPRlM0X0ZTPW0KIENPTkZJR19GVVNFX0ZTPW0KK0NPTkZJR19PVkVSTEFZX0ZTPW0KIENPTkZJR19JU085NjYwX0ZTPXkKIENPTkZJR19VREZfRlM9bQogQ09ORklHX01TRE9TX0ZTPXkKQEAgLTI3MSw3ICsyODYsNiBAQAogQ09ORklHX05MU19BU0NJST15CiBDT05GSUdfTkxTX0lTTzg4NTlfMT15CiBDT05GSUdfTkxTX1VURjg9eQotQ09ORklHX0NSQ19UMTBESUY9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKQEAgLTMwMCwxMSArMzE0LDYgQEAKIENPTkZJR19DUllQVE9fVFdPRklTSD1tCiBDT05GSUdfQ1JZUFRPX0xaTz1tCiAjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFVl9OWD15Ci1DT05GSUdfQ1JZUFRPX0RFVl9OWF9FTkNSWVBUPW0KIENPTkZJR19WSVJUVUFMSVpBVElPTj15CiBDT05GSUdfS1ZNX0JPT0szU182ND1tCi1DT05GSUdfS1ZNX0JPT0szU182NF9IVj15Ci1DT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0U9eQotQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZUz15Ci1DT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQ9eQorQ09ORklHX0tWTV9CT09LM1NfNjRfSFY9bQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc3RvcmNlbnRlcl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZwppbmRleCA2MGFkMmMwLi5iNWRiN2RmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9zdG9yY2VudGVyX2RlZmNvbmZpZwpAQCAtMSw0ICsxLDMgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19FWFBFUlQ9eQpAQCAtNiwxMyArNSwxMyBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CiAjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfUE1BQyBpcyBub3Qgc2V0CiBDT05GSUdfRU1CRURERUQ2eHg9eQogQ09ORklHX1NUT1JDRU5URVI9eQogQ09ORklHX0haXzEwMD15CiBDT05GSUdfQklORk1UX01JU0M9eQotQ09ORklHX1NQQVJTRV9JUlE9eQogQ09ORklHX0NNRExJTkVfQk9PTD15CiBDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAiCiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKQEAgLTI5LDExICsyOCw4IEBACiAjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCi0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogQ09ORklHX01URD15CiBDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQotQ09ORklHX01URF9PRl9QQVJUUz15Ci1DT05GSUdfTVREX0NIQVI9eQogQ09ORklHX01URF9CTE9DSz15CiBDT05GSUdfRlRMPXkKIENPTkZJR19ORlRMPXkKQEAgLTQxLDcgKzM3LDYgQEAKIENPTkZJR19NVERfQ0ZJPXkKIENPTkZJR19NVERfQ0ZJX0FNRFNURD15CiBDT05GSUdfTVREX1BIWVNNQVA9eQotQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiBDT05GSUdfSURFPXkKIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWD15CiBDT05GSUdfU0NTST15CkBAIC01Nyw3ICs1Miw2IEBACiBDT05GSUdfTkVUREVWSUNFUz15CiBDT05GSUdfRFVNTVk9bQogQ09ORklHX1I4MTY5PXkKLSMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19WVCBpcyBub3Qgc2V0CkBAIC04MSwxMiArNzUsMTAgQEAKIENPTkZJR19FWFQzX0ZTPXkKICMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CiBDT05GSUdfWEZTX0ZTPW0KLUNPTkZJR19JTk9USUZZPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19UTVBGUz15CiBDT05GSUdfSkZGUzJfRlM9eQogIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKIENPTkZJR19OTFNfREVGQVVMVD0idXRmOCIKIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKIENPTkZJR19OTFNfSVNPODg1OV8xPXkKQEAgLTk0LDUgKzg2LDMgQEAKIENPTkZJR19DUkNfVDEwRElGPXkKICMgQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQgaXMgbm90IHNldAogIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0Ci1DT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvdHFtOHh4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3RxbTh4eF9kZWZjb25maWcKaW5kZXggN2ZlMjc3YS4uNGM5NzNjNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvdHFtOHh4X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy90cW04eHhfZGVmY29uZmlnCkBAIC0xLDEyICsxLDEwIEBACiBDT05GSUdfUFBDXzh4eD15Ci1DT05GSUdfRVhQRVJJTUVOVEFMPXkKICMgQ09ORklHX1NXQVAgaXMgbm90IHNldAogQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQotIyBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgaXMgbm90IHNldAogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfQkFTRV9GVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKQEAgLTE1LDE1ICsxMywxMiBAQAogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CitDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKICMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKIENPTkZJR19UUU04WFg9eQogQ09ORklHXzh4eF9DT1BZQkFDSz15CiAjIENPTkZJR184eHhfQ1BVMTUgaXMgbm90IHNldAotQ09ORklHX05PX0haPXkKLUNPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0haXzEwMD15Ci1DT05GSUdfOFhYX01JTklNQUxfRlBFTVU9eQotQ09ORklHX1NQQVJTRV9JUlE9eQogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfTkVUPXkKIENPTkZJR19QQUNLRVQ9eQpAQCAtNDAsMzIgKzM1LDI0IEBACiBDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKIENPTkZJR19NVEQ9eQotQ09ORklHX01URF9DT05DQVQ9eQogQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKLUNPTkZJR19NVERfT0ZfUEFSVFM9eQotQ09ORklHX01URF9DSEFSPXkKIENPTkZJR19NVERfQkxPQ0s9eQogQ09ORklHX01URF9DRkk9eQogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogQ09ORklHX01URF9DRklfQU1EU1REPXkKIENPTkZJR19NVERfUEhZU01BUF9PRj15Ci1DT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19GU19FTkVUPXkKIENPTkZJR19EQVZJQ09NX1BIWT15CiBDT05GSUdfRklYRURfUEhZPXkKLUNPTkZJR19ORVRfRVRIRVJORVQ9eQotQ09ORklHX0ZTX0VORVQ9eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1dMQU4gaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DUE09eQogQ09ORklHX1NFUklBTF9DUE1fQ09OU09MRT15Ci0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKIENPTkZJR19HRU5fUlRDPXkKICMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKQEAgLTc0LDEzICs2MSw4IEBACiBDT05GSUdfVE1QRlM9eQogQ09ORklHX0NSQU1GUz15CiBDT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQogQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAotQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQotQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQotQ09ORklHX0RFQlVHX0lORk89eQotIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzJfU0xJQ0VCWTQ9eQorQ09ORklHX0RFQlVHX0lORk89eQorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3dpaV9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy93aWlfZGVmY29uZmlnCmluZGV4IDFlMmI3ZDAuLjM0ZWFmNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3dpaV9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvd2lpX2RlZmNvbmZpZwpAQCAtMSw0ICsxLDMgQEAKLUNPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0xPQ0FMVkVSU0lPTj0iLXdpaSIKICMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKQEAgLTYsNyArNSw2IEBACiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FWFBFUlQ9eQogIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1BFUkZfRVZFTlRTPXkKQEAgLTIyLDcgKzIwLDYgQEAKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCiBDT05GSUdfS0VYRUM9eQotIyBDT05GSUdfTUlHUkFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0FEVkFOQ0VEX09QVElPTlM9eQogQ09ORklHX05FVD15CkBAIC0zOSw3ICszNiw2IEBACiAjIENPTkZJR19JTkVUX0RJQUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiBDT05GSUdfQlQ9eQotQ09ORklHX0JUX0wyQ0FQPXkKIENPTkZJR19CVF9SRkNPTU09eQogQ09ORklHX0JUX0JORVA9eQogQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKQEAgLTQ5LDE4ICs0NSwxMiBAQAogQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAogIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX0JMS19ERVZfTE9PUD15CiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTIKIENPTkZJR19TQ1NJPXkKIENPTkZJR19CTEtfREVWX1NEPXkKLUNPTkZJR19TQ1NJX01VTFRJX0xVTj15CiBDT05GSUdfTkVUREVWSUNFUz15Ci1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIENPTkZJR19CNDM9eQogQ09ORklHX0I0M19TRElPPXkKICMgQ09ORklHX0I0M19QSFlfTFAgaXMgbm90IHNldApAQCAtNzgsOCArNjgsOCBAQAogQ09ORklHX0lOUFVUX1VJTlBVVD15CiAjIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJT19TRVJQT1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAogQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9NjQKKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAogIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19OVlJBTT15CiBDT05GSUdfSTJDPXkKQEAgLTEwOSw3ICs5OSw2IEBACiBDT05GSUdfRVhUM19GUz15CiAjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfSU5PVElGWT15CiBDT05GSUdfRlVTRV9GUz1tCiBDT05GSUdfSVNPOTY2MF9GUz15CiBDT05GSUdfSk9MSUVUPXkKQEAgLTExOSw3ICsxMDgsNiBAQAogIyBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKIENPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0NJRlM9bQogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQpAQCAtMTI3LDEzICsxMTUsOSBAQAogQ09ORklHX0NSQ19DQ0lUVD15CiBDT05GSUdfUFJJTlRLX1RJTUU9eQogQ09ORklHX01BR0lDX1NZU1JRPXkKLUNPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKIENPTkZJR19ERUJVR19NVVRFWEVTPXkKLUNPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15Ci0jIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKIENPTkZJR19MQVRFTkNZVE9QPXkKLUNPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CiBDT05GSUdfU0NIRURfVFJBQ0VSPXkKIENPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKIENPTkZJR19ETUFfQVBJX0RFQlVHPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDViOTMxMjIuLjMwYjM1ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtNjAsMTMgKzYwLDYgQEAKICNkZWZpbmUgY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCiAJbWVtY3B5KGRzdCwgc3JjLCBsZW4pCiAKLQotCi0jaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwotLyogaW50ZXJuYWwgZGVidWdnaW5nIGZ1bmN0aW9uICovCi12b2lkIGtlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSk7Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKaW5kZXggMjJkNWE3ZC4uNWNmNWE2ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmgKQEAgLTE2NSw3ICsxNjUsNyBAQAogI2RlZmluZSBDUFVfRlRSX0FSQ0hfMjAxCQlMT05HX0FTTV9DT05TVCgweDAwMDAwMDAyMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfQVJDSF8yMDYJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDAwMDQwMDAwMDAwMCkKICNkZWZpbmUgQ1BVX0ZUUl9BUkNIXzIwN1MJCUxPTkdfQVNNX0NPTlNUKDB4MDAwMDAwMDgwMDAwMDAwMCkKLSNkZWZpbmUgQ1BVX0ZUUl9JQUJSCQkJTE9OR19BU01fQ09OU1QoMHgwMDAwMDAxMDAwMDAwMDAwKQorLyogRnJlZQkJCQkJTE9OR19BU01fQ09OU1QoMHgwMDAwMDAxMDAwMDAwMDAwKSAqLwogI2RlZmluZSBDUFVfRlRSX01NQ1JBCQkJTE9OR19BU01fQ09OU1QoMHgwMDAwMDAyMDAwMDAwMDAwKQogI2RlZmluZSBDUFVfRlRSX0NUUkwJCQlMT05HX0FTTV9DT05TVCgweDAwMDAwMDQwMDAwMDAwMDApCiAjZGVmaW5lIENQVV9GVFJfU01UCQkJTE9OR19BU01fQ09OU1QoMHgwMDAwMDA4MDAwMDAwMDAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VlaC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VlaC5oCmluZGV4IDA2NTJlYmUuLjU1YWJmZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lZWguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWVoLmgKQEAgLTM4LDggKzM4LDkgQEAKICNkZWZpbmUgRUVIX0ZPUkNFX0RJU0FCTEVECTB4MDIJLyogRUVIIGRpc2FibGVkCQkqLwogI2RlZmluZSBFRUhfUFJPQkVfTU9ERV9ERVYJMHgwNAkvKiBGcm9tIFBDSSBkZXZpY2UJKi8KICNkZWZpbmUgRUVIX1BST0JFX01PREVfREVWVFJFRQkweDA4CS8qIEZyb20gZGV2aWNlIHRyZWUJKi8KLSNkZWZpbmUgRUVIX0VOQUJMRV9JT19GT1JfTE9HCTB4MTAJLyogRW5hYmxlIElPIGZvciBsb2cJKi8KLSNkZWZpbmUgRUVIX0VBUkxZX0RVTVBfTE9HCTB4MjAJLyogRHVtcCBsb2cgaW1tZWRpYXRlbHkJKi8KKyNkZWZpbmUgRUVIX1ZBTElEX1BFX1pFUk8JMHgxMAkvKiBQRSMwIGlzIHZhbGlkCSovCisjZGVmaW5lIEVFSF9FTkFCTEVfSU9fRk9SX0xPRwkweDIwCS8qIEVuYWJsZSBJTyBmb3IgbG9nCSovCisjZGVmaW5lIEVFSF9FQVJMWV9EVU1QX0xPRwkweDQwCS8qIER1bXAgbG9nIGltbWVkaWF0ZWx5CSovCiAKIC8qCiAgKiBEZWxheSBmb3IgUEUgcmVzZXQsIGFsbCBpbiBtcwpAQCAtNzcsNiArNzgsNyBAQAogCiAjZGVmaW5lIEVFSF9QRV9LRUVQCQkoMSA8PCA4KQkvKiBLZWVwIFBFIG9uIGhvdHBsdWcJKi8KICNkZWZpbmUgRUVIX1BFX0NGR19SRVNUUklDVEVECSgxIDw8IDkpCS8qIEJsb2NrIGNvbmZpZyBvbiBlcnJvciAqLworI2RlZmluZSBFRUhfUEVfUkVNT1ZFRAkJKDEgPDwgMTApCS8qIFJlbW92ZWQgcGVybWFuZW50bHkJKi8KIAogc3RydWN0IGVlaF9wZSB7CiAJaW50IHR5cGU7CQkJLyogUEUgdHlwZTogUEhCL0J1cy9EZXZpY2UJKi8KQEAgLTIxNiw2ICsyMTgsNyBAQAogfTsKIAogZXh0ZXJuIGludCBlZWhfc3Vic3lzdGVtX2ZsYWdzOworZXh0ZXJuIGludCBlZWhfbWF4X2ZyZWV6ZXM7CiBleHRlcm4gc3RydWN0IGVlaF9vcHMgKmVlaF9vcHM7CiBleHRlcm4gcmF3X3NwaW5sb2NrX3QgY29uZmlybV9lcnJvcl9sb2NrOwogCkBAIC0yNTMsMTIgKzI1Niw2IEBACiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbmZpcm1fZXJyb3JfbG9jaywgZmxhZ3MpOwogfQogCi0vKgotICogTWF4IG51bWJlciBvZiBFRUggZnJlZXplcyBhbGxvd2VkIGJlZm9yZSB3ZSBjb25zaWRlciB0aGUgZGV2aWNlCi0gKiB0byBiZSBwZXJtYW5lbnRseSBkaXNhYmxlZC4KLSAqLwotI2RlZmluZSBFRUhfTUFYX0FMTE9XRURfRlJFRVpFUyA1Ci0KIHR5cGVkZWYgdm9pZCAqKCplZWhfdHJhdmVyc2VfZnVuYykodm9pZCAqZGF0YSwgdm9pZCAqZmxhZyk7CiB2b2lkIGVlaF9zZXRfcGVfYXV4X3NpemUoaW50IHNpemUpOwogaW50IGVlaF9waGJfcGVfY3JlYXRlKHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rcHJvYmVzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3Byb2Jlcy5oCmluZGV4IGFmMTVkNGQuLjAzOWI1ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2twcm9iZXMuaApAQCAtNDEsMzQgKzQxLDU5IEBACiAjZGVmaW5lIE1BWF9JTlNOX1NJWkUgMQogCiAjaWZkZWYgQ09ORklHX1BQQzY0Ci0vKgotICogNjRiaXQgcG93ZXJwYyB1c2VzIGZ1bmN0aW9uIGRlc2NyaXB0b3JzLgotICogSGFuZGxlIGNhc2VzIHdoZXJlOgotICogCQktIFVzZXIgcGFzc2VzIGEgPC5zeW1ib2w+IG9yIDxtb2R1bGU6LnN5bWJvbD4KLSAqIAkJLSBVc2VyIHBhc3NlcyBhIDxzeW1ib2w+IG9yIDxtb2R1bGU6c3ltYm9sPgotICogCQktIFVzZXIgcGFzc2VzIGEgbm9uLWV4aXN0ZW50IHN5bWJvbCwga2FsbHN5bXNfbG9va3VwX25hbWUKLSAqIAkJICByZXR1cm5zIDAuIERvbid0IGRlcmVmIHRoZSBOVUxMIHBvaW50ZXIgaW4gdGhhdCBjYXNlCi0gKi8KKyNpZiBkZWZpbmVkKF9DQUxMX0VMRikgJiYgX0NBTExfRUxGID09IDIKKy8qIFBQQzY0IEFCSXYyIG5lZWRzIGxvY2FsIGVudHJ5IHBvaW50ICovCiAjZGVmaW5lIGtwcm9iZV9sb29rdXBfbmFtZShuYW1lLCBhZGRyKQkJCQkJXAogewkJCQkJCQkJCVwKIAlhZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKWthbGxzeW1zX2xvb2t1cF9uYW1lKG5hbWUpOwkJXAotCWlmIChhZGRyKSB7CQkJCQkJCVwKLQkJY2hhciAqY29sb247CQkJCQkJXAotCQlpZiAoKGNvbG9uID0gc3RyY2hyKG5hbWUsICc6JykpICE9IE5VTEwpIHsJCVwKLQkJCWNvbG9uKys7CQkJCQlcCi0JCQlpZiAoKmNvbG9uICE9ICdcMCcgJiYgKmNvbG9uICE9ICcuJykJCVwKLQkJCQlhZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKXBwY19mdW5jdGlvbl9lbnRyeShhZGRyKTsgXAotCQl9IGVsc2UgaWYgKG5hbWVbMF0gIT0gJy4nKQkJCQlcCi0JCQlhZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKXBwY19mdW5jdGlvbl9lbnRyeShhZGRyKTsgXAotCX0gZWxzZSB7CQkJCQkJCVwKLQkJY2hhciBkb3RfbmFtZVtLU1lNX05BTUVfTEVOXTsJCQkJXAorCWlmIChhZGRyKQkJCQkJCQlcCisJCWFkZHIgPSAoa3Byb2JlX29wY29kZV90ICopcHBjX2Z1bmN0aW9uX2VudHJ5KGFkZHIpOwlcCit9CisjZWxzZQorLyoKKyAqIDY0Yml0IHBvd2VycGMgQUJJdjEgdXNlcyBmdW5jdGlvbiBkZXNjcmlwdG9yczoKKyAqIC0gQ2hlY2sgZm9yIHRoZSBkb3QgdmFyaWFudCBvZiB0aGUgc3ltYm9sIGZpcnN0LgorICogLSBJZiB0aGF0IGZhaWxzLCB0cnkgbG9va2luZyB1cCB0aGUgc3ltYm9sIHByb3ZpZGVkLgorICoKKyAqIFRoaXMgZW5zdXJlcyB3ZSBhbHdheXMgZ2V0IHRvIHRoZSBhY3R1YWwgc3ltYm9sIGFuZCBub3QgdGhlIGRlc2NyaXB0b3IuCisgKiBBbHNvIGhhbmRsZSA8bW9kdWxlOnN5bWJvbD4gZm9ybWF0LgorICovCisjZGVmaW5lIGtwcm9iZV9sb29rdXBfbmFtZShuYW1lLCBhZGRyKQkJCQkJXAorewkJCQkJCQkJCVwKKwljaGFyIGRvdF9uYW1lW01PRFVMRV9OQU1FX0xFTiArIDEgKyBLU1lNX05BTUVfTEVOXTsJCVwKKwljaGFyICptb2RzeW07CQkJCQkJCVwKKwlib29sIGRvdF9hcHBlbmRlZCA9IGZhbHNlOwkJCQkJXAorCWlmICgobW9kc3ltID0gc3RyY2hyKG5hbWUsICc6JykpICE9IE5VTEwpIHsJCQlcCisJCW1vZHN5bSsrOwkJCQkJCVwKKwkJaWYgKCptb2RzeW0gIT0gJ1wwJyAmJiAqbW9kc3ltICE9ICcuJykgewkJXAorCQkJLyogQ29udmVydCB0byA8bW9kdWxlOi5zeW1ib2w+ICovCQlcCisJCQlzdHJuY3B5KGRvdF9uYW1lLCBuYW1lLCBtb2RzeW0gLSBuYW1lKTsJCVwKKwkJCWRvdF9uYW1lW21vZHN5bSAtIG5hbWVdID0gJy4nOwkJCVwKKwkJCWRvdF9uYW1lW21vZHN5bSAtIG5hbWUgKyAxXSA9ICdcMCc7CQlcCisJCQlzdHJuY2F0KGRvdF9uYW1lLCBtb2RzeW0sCQkJXAorCQkJCXNpemVvZihkb3RfbmFtZSkgLSAobW9kc3ltIC0gbmFtZSkgLSAyKTtcCisJCQlkb3RfYXBwZW5kZWQgPSB0cnVlOwkJCQlcCisJCX0gZWxzZSB7CQkJCQkJXAorCQkJZG90X25hbWVbMF0gPSAnXDAnOwkJCQlcCisJCQlzdHJuY2F0KGRvdF9uYW1lLCBuYW1lLCBzaXplb2YoZG90X25hbWUpIC0gMSk7CVwKKwkJfQkJCQkJCQlcCisJfSBlbHNlIGlmIChuYW1lWzBdICE9ICcuJykgewkJCQkJXAogCQlkb3RfbmFtZVswXSA9ICcuJzsJCQkJCVwKIAkJZG90X25hbWVbMV0gPSAnXDAnOwkJCQkJXAogCQlzdHJuY2F0KGRvdF9uYW1lLCBuYW1lLCBLU1lNX05BTUVfTEVOIC0gMik7CQlcCi0JCWFkZHIgPSAoa3Byb2JlX29wY29kZV90ICopa2FsbHN5bXNfbG9va3VwX25hbWUoZG90X25hbWUpOyBcCisJCWRvdF9hcHBlbmRlZCA9IHRydWU7CQkJCQlcCisJfSBlbHNlIHsJCQkJCQkJXAorCQlkb3RfbmFtZVswXSA9ICdcMCc7CQkJCQlcCisJCXN0cm5jYXQoZG90X25hbWUsIG5hbWUsIEtTWU1fTkFNRV9MRU4gLSAxKTsJCVwKKwl9CQkJCQkJCQlcCisJYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKilrYWxsc3ltc19sb29rdXBfbmFtZShkb3RfbmFtZSk7CVwKKwlpZiAoIWFkZHIgJiYgZG90X2FwcGVuZGVkKSB7CQkJCQlcCisJCS8qIExldCdzIHRyeSB0aGUgb3JpZ2luYWwgbm9uLWRvdCBzeW1ib2wgbG9va3VwCSovCVwKKwkJYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKilrYWxsc3ltc19sb29rdXBfbmFtZShuYW1lKTsJXAogCX0JCQkJCQkJCVwKIH0KLSNlbmRpZgorI2VuZGlmIC8qIGRlZmluZWQoX0NBTExfRUxGKSAmJiBfQ0FMTF9FTEYgPT0gMiAqLworI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwogCiAjZGVmaW5lIGZsdXNoX2luc25fc2xvdChwKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGtyZXRwcm9iZV9ibGFja2xpc3Rfc2l6ZSAwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb3BhbC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL29wYWwuaAppbmRleCBlYjk1YjY3Li45ZWUwYTMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vb3BhbC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9vcGFsLmgKQEAgLTMwNCw3ICszMDQsNyBAQAogCQkJCQkgKi8KIAlPUEFMX01TR19NRU1fRVJSLAogCU9QQUxfTVNHX0VQT1csCi0JT1BBTF9NU0dfU0hVVERPV04sCisJT1BBTF9NU0dfU0hVVERPV04sCQkvKiBwYXJhbXNbMF0gPSAxIHJlYm9vdCwgMCBzaHV0ZG93biAqLwogCU9QQUxfTVNHX0hNSV9FVlQsCiAJT1BBTF9NU0dfVFlQRV9NQVgsCiB9OwpAQCAtNTk1LDYgKzU5NSwxNCBAQAogCU9QQUxfUEhCM19OVU1fUEVTVF9SRUdTID0gMjU2CiB9OwogCisvKiBDQVBJIG1vZGVzIGZvciBQSEIgKi8KK2VudW0geworCU9QQUxfUEhCX0NBUElfTU9ERV9QQ0lFICAgICAgICAgPSAwLAorCU9QQUxfUEhCX0NBUElfTU9ERV9DQVBJICAgICAgICAgPSAxLAorCU9QQUxfUEhCX0NBUElfTU9ERV9TTk9PUF9PRkYgICAgPSAyLAorCU9QQUxfUEhCX0NBUElfTU9ERV9TTk9PUF9PTiAgICAgPSAzLAorfTsKKwogc3RydWN0IE9wYWxJb1BoYkVycm9yQ29tbW9uIHsKIAlfX2JlMzIgdmVyc2lvbjsKIAlfX2JlMzIgaW9UeXBlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2ktYnJpZGdlLmgKaW5kZXggNzI1MjQ3Yi4uNTQ2ZDAzNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS1icmlkZ2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLWJyaWRnZS5oCkBAIC0xMTksNiArMTE5LDEwIEBACiBleHRlcm4gaW50IGluZGlyZWN0X3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKIAkJCQlpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1MzIgKnZhbCk7CiAKK2V4dGVybiBpbnQgX19pbmRpcmVjdF9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkJICB1bnNpZ25lZCBjaGFyIGJ1c19udW1iZXIsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCQkgIGludCBvZmZzZXQsIGludCBsZW4sIHUzMiAqdmFsKTsKKwogZXh0ZXJuIGludCBpbmRpcmVjdF93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAogCQkJCSBpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1MzIgdmFsKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjMzIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzMyLmgKaW5kZXggMjM0ZTA3Yy4uMTRiZGNiZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjMzIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGMzMi5oCkBAIC00NSw3ICs0NSw3IEBACiAjZGVmaW5lIFBUUlNfUEVSX1BHRAkoMSA8PCAoMzIgLSBQR0RJUl9TSElGVCkpCiAKICNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJKFRBU0tfU0laRSAvIFBHRElSX1NJWkUpCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwVUwKIAogI2RlZmluZSBwdGVfRVJST1IoZSkgXAogCXByX2VycigiJXM6JWQ6IGJhZCBwdGUgJWxseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgXApAQCAtMTc4LDEyICsxNzgsMTEgQEAKIAlhbmRjCSUxLCUwLCU1XG5cCiAJb3IJJTEsJTEsJTZcblwKIAkvKiAweDIwMCA9PSBFeHRlbmRlZCBlbmNvZGluZywgYml0IDIyICovIFwKLQkvKiBCaXQgMjIgaGFzIHRvIGJlIDEgaWYgbmVpdGhlciBfUEFHRV9VU0VSIG5vciBfUEFHRV9SVyBhcmUgc2V0ICovIFwKLQlybHdpbWkJJTEsJTEsMzItMiwweDIwMFxuIC8qIGdldCBfUEFHRV9VU0VSICovIFwKLQlybHdpbm0JJTMsJTEsMzItMSwweDIwMFxuIC8qIGdldCBfUEFHRV9SVyAqLyBcCi0Jb3IJJTEsJTMsJTFcblwKLQl4b3JpCSUxLCUxLDB4MjAwXG4iCi0iCXN0d2N4LgklMSwwLCU0XG5cCisJLyogQml0IDIyIGhhcyB0byBiZSAxIHdoZW4gX1BBR0VfVVNFUiBpcyB1bnNldCBhbmQgX1BBR0VfUk8gaXMgc2V0ICovIFwKKwlybHdpbWkJJTEsJTEsMzItMSwweDIwMFxuIC8qIGdldCBfUEFHRV9STyAqLyBcCisJcmx3aW5tCSUzLCUxLDMyLTIsMHgyMDBcbiAvKiBnZXQgX1BBR0VfVVNFUiAqLyBcCisJYW5kYwklMSwlMSwlM1xuXAorCXN0d2N4LgklMSwwLCU0XG5cCiAJYm5lLQkxYiIKIAk6ICI9JnIiIChvbGQpLCAiPSZyIiAodG1wKSwgIj1tIiAoKnApLCAiPSZyIiAodG1wMikKIAk6ICJyIiAocCksICJyIiAoY2xyKSwgInIiIChzZXQpLCAibSIgKCpwKQpAQCAtMjc1LDcgKzI3NCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJICAgICAgcHRlX3QgKnB0ZXApCiB7Ci0JcHRlX3VwZGF0ZShwdGVwLCAoX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFKSwgMCk7CisJcHRlX3VwZGF0ZShwdGVwLCAoX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFKSwgX1BBR0VfUk8pOwogfQogc3RhdGljIGlubGluZSB2b2lkIGh1Z2VfcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQpAQCAtMjg2LDkgKzI4NSwxMSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3MocHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5KQogewotCXVuc2lnbmVkIGxvbmcgYml0cyA9IHB0ZV92YWwoZW50cnkpICYKKwl1bnNpZ25lZCBsb25nIHNldCA9IHB0ZV92YWwoZW50cnkpICYKIAkJKF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9SVyB8IF9QQUdFX0VYRUMpOwotCXB0ZV91cGRhdGUocHRlcCwgMCwgYml0cyk7CisJdW5zaWduZWQgbG9uZyBjbHIgPSB+cHRlX3ZhbChlbnRyeSkgJiBfUEFHRV9STzsKKworCXB0ZV91cGRhdGUocHRlcCwgY2xyLCBzZXQpOwogfQogCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TQU1FCkBAIC0zNDYsMTAgKzM0NywxNCBAQAogI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKQkocHRlX3ZhbChwdGUpID4+IDMpCiAjZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCSgocHRlX3QpIHsgKChvZmYpIDw8IDMpIHwgX1BBR0VfRklMRSB9KQogCisjaWZuZGVmIENPTkZJR19QUENfNEtfUEFHRVMKK3ZvaWQgcGd0YWJsZV9jYWNoZV9pbml0KHZvaWQpOworI2Vsc2UKIC8qCiAgKiBObyBwYWdlIHRhYmxlIGNhY2hlcyB0byBpbml0aWFsaXNlCiAgKi8KICNkZWZpbmUgcGd0YWJsZV9jYWNoZV9pbml0KCkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCiAKIGV4dGVybiBpbnQgZ2V0X3B0ZXB0cihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqKnB0ZXAsCiAJCSAgICAgIHBtZF90ICoqcG1kcCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaAppbmRleCBiOWRjYzkzLi5kNDY1MzJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmgKQEAgLTEyLDcgKzEyLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPGFzbS9iYXJyaWVyLmg+CiAKLSNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTBVTAogCiAvKgogICogU2l6ZSBvZiBFQSByYW5nZSBtYXBwZWQgYnkgb3VyIHBhZ2V0YWJsZXMuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBhODgwNWZlLi43ZTc3ZjJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTMwLDcgKzMwLDggQEAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAogLyogR2VuZXJpYyBhY2Nlc3NvcnMgdG8gUFRFIGJpdHMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV93cml0ZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SVzsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkKK3sJcmV0dXJuIChwdGVfdmFsKHB0ZSkgJiAoX1BBR0VfUlcgfCBfUEFHRV9STykpICE9IF9QQUdFX1JPOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRElSVFk7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRTsgfQpAQCAtMTE1LDEyICsxMTYsMTQgQEAKIAogLyogR2VuZXJpYyBtb2RpZmllcnMgZm9yIFBURSBiaXRzICovCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFKTsgcmV0dXJuIHB0ZTsgfQorCXB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX1JXIHwgX1BBR0VfSFdXUklURSk7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1JPOyByZXR1cm4gcHRlOyB9CiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2NsZWFuKHB0ZV90IHB0ZSkgewogCXB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX0RJUlRZIHwgX1BBR0VfSFdXUklURSk7IHJldHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rb2xkKHB0ZV90IHB0ZSkgewogCXB0ZV92YWwocHRlKSAmPSB+X1BBR0VfQUNDRVNTRUQ7IHJldHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rd3JpdGUocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9STzsKIAlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfUlc7IHJldHVybiBwdGU7IH0KIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKSB7CiAJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0RJUlRZOyByZXR1cm4gcHRlOyB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG52LXBjaS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Budi1wY2kuaAppbmRleCBmMDlhMjJmLi5mOWI0OTgyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcG52LXBjaS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wbnYtcGNpLmgKQEAgLTEzLDEzICsxMywxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPG1pc2MvY3hsLmg+CiAKLWludCBwbnZfcGhiX3RvX2N4bChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2ludCBwbnZfcGhiX3RvX2N4bF9tb2RlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVpbnQ2NF90IG1vZGUpOwogaW50IHBudl9jeGxfaW9kYV9tc2lfc2V0dXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdW5zaWduZWQgaW50IGh3aXJxLAogCQkJICAgdW5zaWduZWQgaW50IHZpcnEpOwogaW50IHBudl9jeGxfYWxsb2NfaHdpcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBudW0pOwogdm9pZCBwbnZfY3hsX3JlbGVhc2VfaHdpcnFzKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBod2lycSwgaW50IG51bSk7CiBpbnQgcG52X2N4bF9nZXRfaXJxX2NvdW50KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotc3RydWN0IGRldmljZV9ub2RlICpwbnZfcGNpX3RvX3BoYl9ub2RlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworc3RydWN0IGRldmljZV9ub2RlICpwbnZfcGNpX2dldF9waGJfbm9kZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIAogI2lmZGVmIENPTkZJR19DWExfQkFTRQogaW50IHBudl9jeGxfYWxsb2NfaHdpcnFfcmFuZ2VzKHN0cnVjdCBjeGxfaXJxX3JhbmdlcyAqaXJxcywKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oCmluZGV4IGRhYTQ2MTYuLmViNmVkYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS04eHguaApAQCAtNDYsOSArNDYsOSBAQAogICogcmVxdWlyZSBhIFRMQiBleGNlcHRpb24gaGFuZGxlciBjaGFuZ2UuICBJdCBpcyBhc3N1bWVkIHVudXNlZCBiaXRzCiAgKiBhcmUgYWx3YXlzIHplcm8uCiAgKi8KLSNkZWZpbmUgX1BBR0VfUlcJMHgwNDAwCS8qIGxzYiBQUCBiaXRzLCBpbnZlcnRlZCBpbiBIVyAqLworI2RlZmluZSBfUEFHRV9STwkweDA0MDAJLyogbHNiIFBQIGJpdHMgKi8KICNkZWZpbmUgX1BBR0VfVVNFUgkweDA4MDAJLyogbXNiIFBQIGJpdHMgKi8KLS8qIHNldCB3aGVuIG5laXRoZXIgX1BBR0VfVVNFUiBub3IgX1BBR0VfUlcgYXJlIHNldCAqLworLyogc2V0IHdoZW4gX1BBR0VfVVNFUiBpcyB1bnNldCBhbmQgX1BBR0VfUk8gaXMgc2V0ICovCiAjZGVmaW5lIF9QQUdFX0tOTFJPCTB4MDIwMAogCiAjZGVmaW5lIF9QTURfUFJFU0VOVAkweDAwMDEKQEAgLTYyLDkgKzYyLDggQEAKICNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKIAogLyogV2UgbmVlZCB0byBhZGQgX1BBR0VfU0hBUkVEIHRvIGtlcm5lbCBwYWdlcyAqLwotI2RlZmluZSBfUEFHRV9LRVJORUxfUk8JKF9QQUdFX1NIQVJFRCB8IF9QQUdFX0tOTFJPKQotI2RlZmluZSBfUEFHRV9LRVJORUxfUk9YCShfUEFHRV9FWEVDIHwgX1BBR0VfS05MUk8pCi0jZGVmaW5lIF9QQUdFX0tFUk5FTF9SVwkoX1BBR0VfRElSVFkgfCBfUEFHRV9SVyB8IF9QQUdFX0hXV1JJVEUpCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9STwkoX1BBR0VfU0hBUkVEIHwgX1BBR0VfUk8gfCBfUEFHRV9LTkxSTykKKyNkZWZpbmUgX1BBR0VfS0VSTkVMX1JPWAkoX1BBR0VfRVhFQyB8IF9QQUdFX1JPIHwgX1BBR0VfS05MUk8pCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogIF9BU01fUE9XRVJQQ19QVEVfOHh4X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oCmluZGV4IGUwNDBjMzUuLjJhZWY5YjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaApAQCAtMzQsNiArMzQsMTIgQEAKICNpZm5kZWYgX1BBR0VfUFNJWkUKICNkZWZpbmUgX1BBR0VfUFNJWkUJCTAKICNlbmRpZgorLyogX1BBR0VfUk8gYW5kIF9QQUdFX1JXIHNoYWxsIG5vdCBiZSBkZWZpbmVkIGF0IHRoZSBzYW1lIHRpbWUgKi8KKyNpZm5kZWYgX1BBR0VfUk8KKyNkZWZpbmUgX1BBR0VfUk8gMAorI2Vsc2UKKyNkZWZpbmUgX1BBR0VfUlcgMAorI2VuZGlmCiAjaWZuZGVmIF9QTURfUFJFU0VOVF9NQVNLCiAjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLCV9QTURfUFJFU0VOVAogI2VuZGlmCkBAIC00MiwxMCArNDgsMTAgQEAKICNkZWZpbmUgUE1EX1BBR0VfU0laRShwbWQpCWJhZF9jYWxsX3RvX1BNRF9QQUdFX1NJWkUoKQogI2VuZGlmCiAjaWZuZGVmIF9QQUdFX0tFUk5FTF9STwotI2RlZmluZSBfUEFHRV9LRVJORUxfUk8JCTAKKyNkZWZpbmUgX1BBR0VfS0VSTkVMX1JPCQkoX1BBR0VfUk8pCiAjZW5kaWYKICNpZm5kZWYgX1BBR0VfS0VSTkVMX1JPWAotI2RlZmluZSBfUEFHRV9LRVJORUxfUk9YCShfUEFHRV9FWEVDKQorI2RlZmluZSBfUEFHRV9LRVJORUxfUk9YCShfUEFHRV9FWEVDIHwgX1BBR0VfUk8pCiAjZW5kaWYKICNpZm5kZWYgX1BBR0VfS0VSTkVMX1JXCiAjZGVmaW5lIF9QQUdFX0tFUk5FTF9SVwkJKF9QQUdFX0RJUlRZIHwgX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFKQpAQCAtOTUsNyArMTAxLDcgQEAKIC8qIE1hc2sgb2YgYml0cyByZXR1cm5lZCBieSBwdGVfcGdwcm90KCkgKi8KICNkZWZpbmUgUEFHRV9QUk9UX0JJVFMJKF9QQUdFX0dVQVJERUQgfCBfUEFHRV9DT0hFUkVOVCB8IF9QQUdFX05PX0NBQ0hFIHwgXAogCQkJIF9QQUdFX1dSSVRFVEhSVSB8IF9QQUdFX0VORElBTiB8IF9QQUdFXzRLX1BGTiB8IFwKLQkJCSBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBcCisJCQkgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUk8gfCBcCiAJCQkgX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9FWEVDKQogCiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HCkBAIC0xMjgsMTEgKzEzNCwxNCBAQAogICovCiAjZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9CQVNFKQogI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX1JXKQotI2RlZmluZSBQQUdFX1NIQVJFRF9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfUlcgfCBfUEFHRV9FWEVDKQotI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCi0jZGVmaW5lIFBBR0VfQ09QWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKLSNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUikKLSNkZWZpbmUgUEFHRV9SRUFET05MWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9TSEFSRURfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX1JXIHwgXAorCQkJCSBfUEFHRV9FWEVDKQorI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9STykKKyNkZWZpbmUgUEFHRV9DT1BZX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9STyB8IFwKKwkJCQkgX1BBR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX1JPKQorI2RlZmluZSBQQUdFX1JFQURPTkxZX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9STyB8IFwKKwkJCQkgX1BBR0VfRVhFQykKIAogI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCiAjZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcnRhcy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3J0YXMuaAppbmRleCBiMzkwZjU1Li4yZTIzZTkyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcnRhcy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9ydGFzLmgKQEAgLTMyNyw3ICszMjcsNyBAQAogZXh0ZXJuIGludCBydGFzX3N1c3BlbmRfbGFzdF9jcHUoc3RydWN0IHJ0YXNfc3VzcGVuZF9tZV9kYXRhICpkYXRhKTsKIGV4dGVybiBpbnQgcnRhc19vbmxpbmVfY3B1c19tYXNrKGNwdW1hc2tfdmFyX3QgY3B1cyk7CiBleHRlcm4gaW50IHJ0YXNfb2ZmbGluZV9jcHVzX21hc2soY3B1bWFza192YXJfdCBjcHVzKTsKLWV4dGVybiBpbnQgcnRhc19pYm1fc3VzcGVuZF9tZShzdHJ1Y3QgcnRhc19hcmdzICopOworZXh0ZXJuIGludCBydGFzX2libV9zdXNwZW5kX21lKHU2NCBoYW5kbGUsIGludCAqdmFzaV9yZXR1cm4pOwogCiBzdHJ1Y3QgcnRjX3RpbWU7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBydGFzX2dldF9ib290X3RpbWUodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc21wLmgKaW5kZXggNWE2NjE0YS4uZDYwN2RmNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3NtcC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zbXAuaApAQCAtNjQsNyArNjQsNiBAQAogZXh0ZXJuIHZvaWQgbWlncmF0ZV9pcnFzKHZvaWQpOwogaW50IGdlbmVyaWNfY3B1X2Rpc2FibGUodm9pZCk7CiB2b2lkIGdlbmVyaWNfY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KTsKLXZvaWQgZ2VuZXJpY19tYWNoX2NwdV9kaWUodm9pZCk7CiB2b2lkIGdlbmVyaWNfc2V0X2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUpOwogdm9pZCBnZW5lcmljX3NldF9jcHVfdXAodW5zaWduZWQgaW50IGNwdSk7CiBpbnQgZ2VuZXJpY19jaGVja19jcHVfcmVzdGFydCh1bnNpZ25lZCBpbnQgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggMGJlNmM2OC4uZThhYmM4MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTEyNSw3ICsxMjUsNyBAQAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0VQT0lOVAkoMTw8VElGX1NZU0NBTExfVFJBQ0VQT0lOVCkKICNkZWZpbmUgX1RJRl9FTVVMQVRFX1NUQUNLX1NUT1JFCSgxPDxUSUZfRU1VTEFURV9TVEFDS19TVE9SRSkKICNkZWZpbmUgX1RJRl9OT0haCQkoMTw8VElGX05PSFopCi0jZGVmaW5lIF9USUZfU1lTQ0FMTF9UX09SX0EJKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IFwKKyNkZWZpbmUgX1RJRl9TWVNDQUxMX0RPVFJBQ0UJKF9USUZfU1lTQ0FMTF9UUkFDRSB8IF9USUZfU1lTQ0FMTF9BVURJVCB8IFwKIAkJCQkgX1RJRl9TRUNDT01QIHwgX1RJRl9TWVNDQUxMX1RSQUNFUE9JTlQgfCBcCiAJCQkJIF9USUZfTk9IWikKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGU2MjRmOTYuLjQ3MTc4NTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTY0NCw4ICs2NDQsMTkgQEAKIAlIU1RBVEVfRklFTEQoSFNUQVRFX1NBVkVEX1hJUlIsIHNhdmVkX3hpcnIpOwogCUhTVEFURV9GSUVMRChIU1RBVEVfSE9TVF9JUEksIGhvc3RfaXBpKTsKIAlIU1RBVEVfRklFTEQoSFNUQVRFX1BUSUQsIHB0aWQpOwotCUhTVEFURV9GSUVMRChIU1RBVEVfTU1DUiwgaG9zdF9tbWNyKTsKLQlIU1RBVEVfRklFTEQoSFNUQVRFX1BNQywgaG9zdF9wbWMpOworCUhTVEFURV9GSUVMRChIU1RBVEVfTU1DUjAsIGhvc3RfbW1jclswXSk7CisJSFNUQVRFX0ZJRUxEKEhTVEFURV9NTUNSMSwgaG9zdF9tbWNyWzFdKTsKKwlIU1RBVEVfRklFTEQoSFNUQVRFX01NQ1JBLCBob3N0X21tY3JbMl0pOworCUhTVEFURV9GSUVMRChIU1RBVEVfU0lBUiwgaG9zdF9tbWNyWzNdKTsKKwlIU1RBVEVfRklFTEQoSFNUQVRFX1NEQVIsIGhvc3RfbW1jcls0XSk7CisJSFNUQVRFX0ZJRUxEKEhTVEFURV9NTUNSMiwgaG9zdF9tbWNyWzVdKTsKKwlIU1RBVEVfRklFTEQoSFNUQVRFX1NJRVIsIGhvc3RfbW1jcls2XSk7CisJSFNUQVRFX0ZJRUxEKEhTVEFURV9QTUMxLCBob3N0X3BtY1swXSk7CisJSFNUQVRFX0ZJRUxEKEhTVEFURV9QTUMyLCBob3N0X3BtY1sxXSk7CisJSFNUQVRFX0ZJRUxEKEhTVEFURV9QTUMzLCBob3N0X3BtY1syXSk7CisJSFNUQVRFX0ZJRUxEKEhTVEFURV9QTUM0LCBob3N0X3BtY1szXSk7CisJSFNUQVRFX0ZJRUxEKEhTVEFURV9QTUM1LCBob3N0X3BtY1s0XSk7CisJSFNUQVRFX0ZJRUxEKEhTVEFURV9QTUM2LCBob3N0X3BtY1s1XSk7CiAJSFNUQVRFX0ZJRUxEKEhTVEFURV9QVVJSLCBob3N0X3B1cnIpOwogCUhTVEFURV9GSUVMRChIU1RBVEVfU1BVUlIsIGhvc3Rfc3B1cnIpOwogCUhTVEFURV9GSUVMRChIU1RBVEVfRFNDUiwgaG9zdF9kc2NyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCA4MDg0MDU5Li5mMzM3NjY2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0xMTMzLDYgKzExMzMsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1XzYwMywKKwkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkubnVtX3BtY3MJCT0gNCwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYy9lMzAwIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0ZTTF9FTUIsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VlaC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWguYwppbmRleCBlMWI2ZDhlLi4zYjIyNTJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VlaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZWVoLmMKQEAgLTEwNCw2ICsxMDQsMTMgQEAKIGludCBlZWhfc3Vic3lzdGVtX2ZsYWdzOwogRVhQT1JUX1NZTUJPTChlZWhfc3Vic3lzdGVtX2ZsYWdzKTsKIAorLyoKKyAqIEVFSCBhbGxvd2VkIG1heGltYWwgZnJvemVuIHRpbWVzLiBJZiBvbmUgcGFydGljdWxhciBQRSdzCisgKiBmcm96ZW4gY291bnQgaW4gbGFzdCBob3VyIGV4Y2VlZHMgdGhpcyBsaW1pdCwgdGhlIFBFIHdpbGwKKyAqIGJlIGZvcmNlZCB0byBiZSBvZmZsaW5lIHBlcm1hbmVudGx5LgorICovCitpbnQgZWVoX21heF9mcmVlemVzID0gNTsKKwogLyogUGxhdGZvcm0gZGVwZW5kZW50IEVFSCBvcGVyYXRpb25zICovCiBzdHJ1Y3QgZWVoX29wcyAqZWVoX29wcyA9IE5VTEw7CiAKQEAgLTE2NTIsOCArMTY1OSwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGVlaF9mcmVlemVfZGJnZnNfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJZWVoX21heF9mcmVlemVzID0gdmFsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVlaF9mcmVlemVfZGJnZnNfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCSp2YWwgPSBlZWhfbWF4X2ZyZWV6ZXM7CisJcmV0dXJuIDA7Cit9CisKIERFRklORV9TSU1QTEVfQVRUUklCVVRFKGVlaF9lbmFibGVfZGJnZnNfb3BzLCBlZWhfZW5hYmxlX2RiZ2ZzX2dldCwKIAkJCWVlaF9lbmFibGVfZGJnZnNfc2V0LCAiMHglbGx4XG4iKTsKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGVlaF9mcmVlemVfZGJnZnNfb3BzLCBlZWhfZnJlZXplX2RiZ2ZzX2dldCwKKwkJCWVlaF9mcmVlemVfZGJnZnNfc2V0LCAiMHglbGx4XG4iKTsKICNlbmRpZgogCiBzdGF0aWMgaW50IF9faW5pdCBlZWhfaW5pdF9wcm9jKHZvaWQpCkBAIC0xNjY0LDYgKzE2ODUsOSBAQAogCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJlZWhfZW5hYmxlIiwgMDYwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvd2VycGNfZGVidWdmc19yb290LCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVlaF9lbmFibGVfZGJnZnNfb3BzKTsKKwkJZGVidWdmc19jcmVhdGVfZmlsZSgiZWVoX21heF9mcmVlemVzIiwgMDYwMCwKKwkJCQkgICAgcG93ZXJwY19kZWJ1Z2ZzX3Jvb3QsIE5VTEwsCisJCQkJICAgICZlZWhfZnJlZXplX2RiZ2ZzX29wcyk7CiAjZW5kaWYKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZWVoX2RyaXZlci5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMKaW5kZXggYjE3ZTc5My4uZDA5OTU0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfZHJpdmVyLmMKQEAgLTY2Nyw3ICs2NjcsNyBAQAogCiAJZWVoX3BlX3VwZGF0ZV90aW1lX3N0YW1wKHBlKTsKIAlwZS0+ZnJlZXplX2NvdW50Kys7Ci0JaWYgKHBlLT5mcmVlemVfY291bnQgPiBFRUhfTUFYX0FMTE9XRURfRlJFRVpFUykKKwlpZiAocGUtPmZyZWV6ZV9jb3VudCA+IGVlaF9tYXhfZnJlZXplcykKIAkJZ290byBleGNlc3NfZmFpbHVyZXM7CiAJcHJfd2FybigiRUVIOiBUaGlzIFBDSSBkZXZpY2UgaGFzIGZhaWxlZCAlZCB0aW1lcyBpbiB0aGUgbGFzdCBob3VyXG4iLAogCQlwZS0+ZnJlZXplX2NvdW50KTsKQEAgLTgwNiw3ICs4MDYsNyBAQAogCWVlaF9wZV9kZXZfdHJhdmVyc2UocGUsIGVlaF9yZXBvcnRfZmFpbHVyZSwgTlVMTCk7CiAKIAkvKiBNYXJrIHRoZSBQRSB0byBiZSByZW1vdmVkIHBlcm1hbmVudGx5ICovCi0JcGUtPmZyZWV6ZV9jb3VudCA9IEVFSF9NQVhfQUxMT1dFRF9GUkVFWkVTICsgMTsKKwllZWhfcGVfc3RhdGVfbWFyayhwZSwgRUVIX1BFX1JFTU9WRUQpOwogCiAJLyoKIAkgKiBTaHV0IGRvd24gdGhlIGRldmljZSBkcml2ZXJzIGZvciBnb29kLiBXZSBtYXJrCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9wZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfcGUuYwppbmRleCA1YTYzZTJiMC4uMWU0OTQ2YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lZWhfcGUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VlaF9wZS5jCkBAIC0yMzksMTAgKzIzOSwxOCBAQAogCWlmIChwZS0+dHlwZSAmIEVFSF9QRV9QSEIpCiAJCXJldHVybiBOVUxMOwogCi0JLyogV2UgcHJlZmVyIFBFIGFkZHJlc3MgKi8KLQlpZiAoZWRldi0+cGVfY29uZmlnX2FkZHIgJiYKLQkgICAoZWRldi0+cGVfY29uZmlnX2FkZHIgPT0gcGUtPmFkZHIpKQorCS8qCisJICogV2UgcHJlZmVyIFBFIGFkZHJlc3MuIEZvciBtb3N0IGNhc2VzLCB3ZSBzaG91bGQKKwkgKiBoYXZlIG5vbi16ZXJvIFBFIGFkZHJlc3MKKwkgKi8KKwlpZiAoZWVoX2hhc19mbGFnKEVFSF9WQUxJRF9QRV9aRVJPKSkgeworCQlpZiAoZWRldi0+cGVfY29uZmlnX2FkZHIgPT0gcGUtPmFkZHIpCisJCQlyZXR1cm4gcGU7CisJfSBlbHNlIHsKKwkJaWYgKGVkZXYtPnBlX2NvbmZpZ19hZGRyICYmCisJCSAgICAoZWRldi0+cGVfY29uZmlnX2FkZHIgPT0gcGUtPmFkZHIpKQogCQlyZXR1cm4gcGU7CisJfQogCiAJLyogVHJ5IEJERiBhZGRyZXNzICovCiAJaWYgKGVkZXYtPmNvbmZpZ19hZGRyICYmCkBAIC01MTgsOCArNTI2LDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAogCS8qIEtlZXAgdGhlIHN0YXRlIG9mIHBlcm1hbmVudGx5IHJlbW92ZWQgUEUgaW50YWN0ICovCi0JaWYgKChwZS0+ZnJlZXplX2NvdW50ID4gRUVIX01BWF9BTExPV0VEX0ZSRUVaRVMpICYmCi0JICAgIChzdGF0ZSAmIChFRUhfUEVfSVNPTEFURUQgfCBFRUhfUEVfUkVDT1ZFUklORykpKQorCWlmIChwZS0+c3RhdGUgJiBFRUhfUEVfUkVNT1ZFRCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlwZS0+c3RhdGUgfD0gc3RhdGU7CkBAIC01OTIsOCArNTk5LDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAogCS8qIEtlZXAgdGhlIHN0YXRlIG9mIHBlcm1hbmVudGx5IHJlbW92ZWQgUEUgaW50YWN0ICovCi0JaWYgKChwZS0+ZnJlZXplX2NvdW50ID4gRUVIX01BWF9BTExPV0VEX0ZSRUVaRVMpICYmCi0JICAgIChzdGF0ZSAmIEVFSF9QRV9JU09MQVRFRCkpCisJaWYgKHBlLT5zdGF0ZSAmIEVFSF9QRV9SRU1PVkVEKQogCQlyZXR1cm4gTlVMTDsKIAogCXBlLT5zdGF0ZSAmPSB+c3RhdGU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKaW5kZXggMTBhMDkzNS4uNDZmYzBmNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUwpAQCAtMzMsOSArMzMsNiBAQAogI2luY2x1ZGUgPGFzbS9mdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKLSN1bmRlZiBTSE9XX1NZU0NBTExTCi0jdW5kZWYgU0hPV19TWVNDQUxMU19UQVNLCi0KIC8qCiAgKiBNU1JfS0VSTkVMIGlzID4gMHgxMDAwMCBvbiA0eHgvQm9vay1FIHNpbmNlIGl0IGluY2x1ZGUgTVNSX0NFLgogICovCkBAIC0zMDcsOSArMzA0LDYgQEAKIAlsd3oJcjExLF9DQ1IocjEpCS8qIENsZWFyIFNPIGJpdCBpbiBDUiAqLwogCXJsd2lubQlyMTEscjExLDAsNCwyCiAJc3R3CXIxMSxfQ0NSKHIxKQotI2lmZGVmIFNIT1dfU1lTQ0FMTFMKLQlibAlkb19zaG93X3N5c2NhbGwKLSNlbmRpZiAvKiBTSE9XX1NZU0NBTExTICovCiAjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCiAJLyogUmV0dXJuIGZyb20gc3lzY2FsbHMgY2FuIChhbmQgZ2VuZXJhbGx5IHdpbGwpIGhhcmQgZW5hYmxlCiAJICogaW50ZXJydXB0cy4gWW91IGFyZW4ndCBzdXBwb3NlZCB0byBjYWxsIGEgc3lzY2FsbCB3aXRoCkBAIC0zMzcsNyArMzMxLDcgQEAKICNlbmRpZiAvKiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MgKi8KIAlDVVJSRU5UX1RIUkVBRF9JTkZPKHIxMCwgcjEpCiAJbHd6CXIxMSxUSV9GTEFHUyhyMTApCi0JYW5kaS4JcjExLHIxMSxfVElGX1NZU0NBTExfVF9PUl9BCisJYW5kaS4JcjExLHIxMSxfVElGX1NZU0NBTExfRE9UUkFDRQogCWJuZS0Jc3lzY2FsbF9kb3RyYWNlCiBzeXNjYWxsX2RvdHJhY2VfY29udDoKIAljbXBsd2kJMCxyMCxOUl9zeXNjYWxscwpAQCAtMzUyLDkgKzM0Niw2IEBACiAJYmxybAkJCS8qIENhbGwgaGFuZGxlciAqLwogCS5nbG9ibAlyZXRfZnJvbV9zeXNjYWxsCiByZXRfZnJvbV9zeXNjYWxsOgotI2lmZGVmIFNIT1dfU1lTQ0FMTFMKLQlibAlkb19zaG93X3N5c2NhbGxfZXhpdAotI2VuZGlmCiAJbXIJcjYscjMKIAlDVVJSRU5UX1RIUkVBRF9JTkZPKHIxMiwgcjEpCiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIHNvIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+ZmxhZ3MgY2FuJ3QgY2hhbmdlICovCkBAIC0zNjQsNyArMzU1LDcgQEAKIAlNVE1TUkQocjEwKQogCWx3eglyOSxUSV9GTEFHUyhyMTIpCiAJbGkJcjgsLV9MQVNUX0VSUk5PCi0JYW5kaS4JcjAscjksKF9USUZfU1lTQ0FMTF9UX09SX0F8X1RJRl9TSU5HTEVTVEVQfF9USUZfVVNFUl9XT1JLX01BU0t8X1RJRl9QRVJTWVNDQUxMX01BU0spCisJYW5kaS4JcjAscjksKF9USUZfU1lTQ0FMTF9ET1RSQUNFfF9USUZfU0lOR0xFU1RFUHxfVElGX1VTRVJfV09SS19NQVNLfF9USUZfUEVSU1lTQ0FMTF9NQVNLKQogCWJuZS0Jc3lzY2FsbF9leGl0X3dvcmsKIAljbXBsdwkwLHIzLHI4CiAJYmx0KwlzeXNjYWxsX2V4aXRfY29udApAQCAtNTAxLDcgKzQ5Miw3IEBACiAJc3ViaQlyMTIscjEyLFRJX0ZMQUdTCiAJCiA0OgkvKiBBbnl0aGluZyB3aGljaCByZXF1aXJlcyBlbmFibGluZyBpbnRlcnJ1cHRzPyAqLwotCWFuZGkuCXIwLHI5LChfVElGX1NZU0NBTExfVF9PUl9BfF9USUZfU0lOR0xFU1RFUCkKKwlhbmRpLglyMCxyOSwoX1RJRl9TWVNDQUxMX0RPVFJBQ0V8X1RJRl9TSU5HTEVTVEVQKQogCWJlcQlyZXRfZnJvbV9leGNlcHQKIAogCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHRzLiBUaGVyZSBpcyBubyBuZWVkIHRvIHRyYWNlIHRoYXQgd2l0aApAQCAtNTIzLDc0ICs1MTQsNiBAQAogCWJsCWRvX3N5c2NhbGxfdHJhY2VfbGVhdmUKIAliCXJldF9mcm9tX2V4Y2VwdF9mdWxsCiAKLSNpZmRlZiBTSE9XX1NZU0NBTExTCi1kb19zaG93X3N5c2NhbGw6Ci0jaWZkZWYgU0hPV19TWVNDQUxMU19UQVNLCi0JbGlzCXIxMSxzaG93X3N5c2NhbGxzX3Rhc2tAaGEKLQlsd3oJcjExLHNob3dfc3lzY2FsbHNfdGFza0BsKHIxMSkKLQljbXAJMCxyMixyMTEKLQlibmVscgotI2VuZGlmCi0Jc3R3CXIzMSxHUFIzMShyMSkKLQltZmxyCXIzMQotCWxpcwlyMyw3ZkBoYQotCWFkZGkJcjMscjMsN2ZAbAotCWx3eglyNCxHUFIwKHIxKQotCWx3eglyNSxHUFIzKHIxKQotCWx3eglyNixHUFI0KHIxKQotCWx3eglyNyxHUFI1KHIxKQotCWx3eglyOCxHUFI2KHIxKQotCWx3eglyOSxHUFI3KHIxKQotCWJsCXByaW50awotCWxpcwlyMyw3N2ZAaGEKLQlhZGRpCXIzLHIzLDc3ZkBsCi0JbHd6CXI0LEdQUjgocjEpCi0JbXIJcjUscjIKLQlibAlwcmludGsKLQlsd3oJcjAsR1BSMChyMSkKLQlsd3oJcjMsR1BSMyhyMSkKLQlsd3oJcjQsR1BSNChyMSkKLQlsd3oJcjUsR1BSNShyMSkKLQlsd3oJcjYsR1BSNihyMSkKLQlsd3oJcjcsR1BSNyhyMSkKLQlsd3oJcjgsR1BSOChyMSkKLQltdGxyCXIzMQotCWx3eglyMzEsR1BSMzEocjEpCi0JYmxyCi0KLWRvX3Nob3dfc3lzY2FsbF9leGl0OgotI2lmZGVmIFNIT1dfU1lTQ0FMTFNfVEFTSwotCWxpcwlyMTEsc2hvd19zeXNjYWxsc190YXNrQGhhCi0JbHd6CXIxMSxzaG93X3N5c2NhbGxzX3Rhc2tAbChyMTEpCi0JY21wCTAscjIscjExCi0JYm5lbHIKLSNlbmRpZgotCXN0dwlyMzEsR1BSMzEocjEpCi0JbWZscglyMzEKLQlzdHcJcjMsUkVTVUxUKHIxKQkvKiBTYXZlIHJlc3VsdCAqLwotCW1yCXI0LHIzCi0JbGlzCXIzLDc5ZkBoYQotCWFkZGkJcjMscjMsNzlmQGwKLQlibAlwcmludGsKLQlsd3oJcjMsUkVTVUxUKHIxKQotCW10bHIJcjMxCi0JbHd6CXIzMSxHUFIzMShyMSkKLQlibHIKLQotNzoJLnN0cmluZwkic3lzY2FsbCAlZCgleCwgJXgsICV4LCAleCwgJXgsICIKLTc3Ogkuc3RyaW5nCSIleCksIGN1cnJlbnQ9JXBcbiIKLTc5Ogkuc3RyaW5nCSIgLT4gJXhcbiIKLQkuYWxpZ24JMiwwCi0KLSNpZmRlZiBTSE9XX1NZU0NBTExTX1RBU0sKLQkuZGF0YQotCS5nbG9ibAlzaG93X3N5c2NhbGxzX3Rhc2sKLXNob3dfc3lzY2FsbHNfdGFzazoKLQkubG9uZwktMQotCS50ZXh0Ci0jZW5kaWYKLSNlbmRpZiAvKiBTSE9XX1NZU0NBTExTICovCi0KIC8qCiAgKiBUaGUgZm9yay9jbG9uZSBmdW5jdGlvbnMgbmVlZCB0byBjb3B5IHRoZSBmdWxsIHJlZ2lzdGVyIHNldCBpbnRvCiAgKiB0aGUgY2hpbGQgcHJvY2Vzcy4gVGhlcmVmb3JlIHdlIG5lZWQgdG8gc2F2ZSBhbGwgdGhlIG5vbnZvbGF0aWxlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggMTk0ZTQ2ZC4uZDE4MGNhZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTQ5LDggKzQ5LDYgQEAKIAkuc2VjdGlvbgkiLnRleHQiCiAJLmFsaWduIDcKIAotI3VuZGVmIFNIT1dfU1lTQ0FMTFMKLQogCS5nbG9ibCBzeXN0ZW1fY2FsbF9jb21tb24KIHN5c3RlbV9jYWxsX2NvbW1vbjoKIAlhbmRpLglyMTAscjEyLE1TUl9QUgpAQCAtMTQyLDE2ICsxNDAsOSBAQAogCWxpCXIxMCwxCiAJc3RkCXIxMCxTT0ZURShyMSkKIAotI2lmZGVmIFNIT1dfU1lTQ0FMTFMKLQlibAlkb19zaG93X3N5c2NhbGwKLQlSRVNUX0dQUigwLHIxKQotCVJFU1RfNEdQUlMoMyxyMSkKLQlSRVNUXzJHUFJTKDcscjEpCi0JYWRkaQlyOSxyMSxTVEFDS19GUkFNRV9PVkVSSEVBRAotI2VuZGlmCiAJQ1VSUkVOVF9USFJFQURfSU5GTyhyMTEsIHIxKQogCWxkCXIxMCxUSV9GTEFHUyhyMTEpCi0JYW5kaS4JcjExLHIxMCxfVElGX1NZU0NBTExfVF9PUl9BCisJYW5kaS4JcjExLHIxMCxfVElGX1NZU0NBTExfRE9UUkFDRQogCWJuZQlzeXNjYWxsX2RvdHJhY2UKIC5Mc3lzY2FsbF9kb3RyYWNlX2NvbnQ6CiAJY21wbGRpCTAscjAsTlJfc3lzY2FsbHMKQEAgLTE3OCwxMiArMTY5LDggQEAKIAltdGN0ciAgIHIxMgogCWJjdHJsCQkJLyogQ2FsbCBoYW5kbGVyICovCiAKLXN5c2NhbGxfZXhpdDoKKy5Mc3lzY2FsbF9leGl0OgogCXN0ZAlyMyxSRVNVTFQocjEpCi0jaWZkZWYgU0hPV19TWVNDQUxMUwotCWJsCWRvX3Nob3dfc3lzY2FsbF9leGl0Ci0JbGQJcjMsUkVTVUxUKHIxKQotI2VuZGlmCiAJQ1VSUkVOVF9USFJFQURfSU5GTyhyMTIsIHIxKQogCiAJbGQJcjgsX01TUihyMSkKQEAgLTIxNCw3ICsyMDEsNyBAQAogCiAJbGQJcjksVElfRkxBR1MocjEyKQogCWxpCXIxMSwtX0xBU1RfRVJSTk8KLQlhbmRpLglyMCxyOSwoX1RJRl9TWVNDQUxMX1RfT1JfQXxfVElGX1NJTkdMRVNURVB8X1RJRl9VU0VSX1dPUktfTUFTS3xfVElGX1BFUlNZU0NBTExfTUFTSykKKwlhbmRpLglyMCxyOSwoX1RJRl9TWVNDQUxMX0RPVFJBQ0V8X1RJRl9TSU5HTEVTVEVQfF9USUZfVVNFUl9XT1JLX01BU0t8X1RJRl9QRVJTWVNDQUxMX01BU0spCiAJYm5lLQlzeXNjYWxsX2V4aXRfd29yawogCWNtcGxkCXIzLHIxMQogCWxkCXI1LF9DQ1IocjEpCkBAIC0yNzAsNyArMjU3LDcgQEAKIAogc3lzY2FsbF9lbm9zeXM6CiAJbGkJcjMsLUVOT1NZUwotCWIJc3lzY2FsbF9leGl0CisJYgkuTHN5c2NhbGxfZXhpdAogCQogc3lzY2FsbF9leGl0X3dvcms6CiAjaWZkZWYgQ09ORklHX1BQQ19CT09LM1MKQEAgLTMwNyw3ICsyOTQsNyBAQAogCiA0OgkvKiBBbnl0aGluZyBlbHNlIGxlZnQgdG8gZG8/ICovCiAJU0VUX0RFRkFVTFRfVEhSRUFEX1BQUihyMywgcjEwKQkJLyogU2V0IHRocmVhZC5wcHIgPSAzICovCi0JYW5kaS4JcjAscjksKF9USUZfU1lTQ0FMTF9UX09SX0F8X1RJRl9TSU5HTEVTVEVQKQorCWFuZGkuCXIwLHI5LChfVElGX1NZU0NBTExfRE9UUkFDRXxfVElGX1NJTkdMRVNURVApCiAJYmVxCXJldF9mcm9tX2V4Y2VwdF9saXRlCiAKIAkvKiBSZS1lbmFibGUgaW50ZXJydXB0cyAqLwpAQCAtMzQ3LDMzICszMzQsMzMgQEAKIF9HTE9CQUwocHBjX2ZvcmspCiAJYmwJc2F2ZV9udmdwcnMKIAlibAlzeXNfZm9yawotCWIJc3lzY2FsbF9leGl0CisJYgkuTHN5c2NhbGxfZXhpdAogCiBfR0xPQkFMKHBwY192Zm9yaykKIAlibAlzYXZlX252Z3BycwogCWJsCXN5c192Zm9yawotCWIJc3lzY2FsbF9leGl0CisJYgkuTHN5c2NhbGxfZXhpdAogCiBfR0xPQkFMKHBwY19jbG9uZSkKIAlibAlzYXZlX252Z3BycwogCWJsCXN5c19jbG9uZQotCWIJc3lzY2FsbF9leGl0CisJYgkuTHN5c2NhbGxfZXhpdAogCiBfR0xPQkFMKHBwYzMyX3N3YXBjb250ZXh0KQogCWJsCXNhdmVfbnZncHJzCiAJYmwJY29tcGF0X3N5c19zd2FwY29udGV4dAotCWIJc3lzY2FsbF9leGl0CisJYgkuTHN5c2NhbGxfZXhpdAogCiBfR0xPQkFMKHBwYzY0X3N3YXBjb250ZXh0KQogCWJsCXNhdmVfbnZncHJzCiAJYmwJc3lzX3N3YXBjb250ZXh0Ci0JYglzeXNjYWxsX2V4aXQKKwliCS5Mc3lzY2FsbF9leGl0CiAKIF9HTE9CQUwocmV0X2Zyb21fZm9yaykKIAlibAlzY2hlZHVsZV90YWlsCiAJUkVTVF9OVkdQUlMocjEpCiAJbGkJcjMsMAotCWIJc3lzY2FsbF9leGl0CisJYgkuTHN5c2NhbGxfZXhpdAogCiBfR0xPQkFMKHJldF9mcm9tX2tlcm5lbF90aHJlYWQpCiAJYmwJc2NoZWR1bGVfdGFpbApAQCAtMzg1LDcgKzM3Miw3IEBACiAjZW5kaWYKIAlibHJsCiAJbGkJcjMsMAotCWIJc3lzY2FsbF9leGl0CisJYgkuTHN5c2NhbGxfZXhpdAogCiAvKgogICogVGhpcyByb3V0aW5lIHN3aXRjaGVzIGJldHdlZW4gdHdvIGRpZmZlcmVudCB0YXNrcy4gIFRoZSBwcm9jZXNzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfOHh4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfOHh4LlMKaW5kZXggZDk5YWFjMC4uOWI1M2ZlMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzh4eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF84eHguUwpAQCAtMzE5LDM2ICszMTksMjkgQEAKIAkgKiBwaW4gdGhlIGZpcnN0IDhNQiBvZiBrZXJuZWwgbWVtb3J5ICovCiAJYW5kaXMuCXIxMSwgcjEwLCAweDgwMDAJLyogQWRkcmVzcyA+PSAweDgwMDAwMDAwICovCiAjZW5kaWYKLQltZnNwcglyMTEsIFNQUk5fTV9UVwkvKiBHZXQgbGV2ZWwgMSB0YWJsZSBiYXNlIGFkZHJlc3MgKi8KKwltZnNwcglyMTEsIFNQUk5fTV9UVwkvKiBHZXQgbGV2ZWwgMSB0YWJsZSAqLwogI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJYmVxCTNmCi0JbGlzCXIxMSwgKHN3YXBwZXJfcGdfZGlyLVBBR0VfT0ZGU0VUKUBoCi0Jb3JpCXIxMSwgcjExLCAoc3dhcHBlcl9wZ19kaXItUEFHRV9PRkZTRVQpQGwKKwlsaXMJcjExLCAoc3dhcHBlcl9wZ19kaXItUEFHRV9PRkZTRVQpQGhhCiAzOgogI2VuZGlmCi0JLyogRXh0cmFjdCBsZXZlbCAxIGluZGV4ICovCi0Jcmx3aW5tCXIxMCwgcjEwLCAzMiAtICgoUEFHRV9TSElGVCAtIDIpIDw8IDEpLCAoUEFHRV9TSElGVCAtIDIpIDw8IDEsIDI5Ci0JbHd6eAlyMTEsIHIxMCwgcjExCS8qIEdldCB0aGUgbGV2ZWwgMSBlbnRyeSAqLwotCXJsd2lubS4JcjEwLCByMTEsMCwwLDE5CS8qIEV4dHJhY3QgcGFnZSBkZXNjcmlwdG9yIHBhZ2UgYWRkcmVzcyAqLwotCWJlcQkyZgkJLyogSWYgemVybywgZG9uJ3QgdHJ5IHRvIGZpbmQgYSBwdGUgKi8KKwkvKiBJbnNlcnQgbGV2ZWwgMSBpbmRleCAqLworCXJsd2ltaQlyMTEsIHIxMCwgMzIgLSAoKFBBR0VfU0hJRlQgLSAyKSA8PCAxKSwgKFBBR0VfU0hJRlQgLSAyKSA8PCAxLCAyOQorCWx3eglyMTEsIChzd2FwcGVyX3BnX2Rpci1QQUdFX09GRlNFVClAbChyMTEpCS8qIEdldCB0aGUgbGV2ZWwgMSBlbnRyeSAqLwogCi0JLyogV2UgaGF2ZSBhIHB0ZSB0YWJsZSwgc28gbG9hZCB0aGUgTUlfVFdDIHdpdGggdGhlIGF0dHJpYnV0ZXMKLQkgKiBmb3IgdGhpcyAic2VnbWVudC4iCi0JICovCisJLyogTG9hZCB0aGUgTUlfVFdDIHdpdGggdGhlIGF0dHJpYnV0ZXMgZm9yIHRoaXMgInNlZ21lbnQuIiAqLwogCU1UU1BSX0NQVTYoU1BSTl9NSV9UV0MsIHIxMSwgcjMpCS8qIFNldCBzZWdtZW50IGF0dHJpYnV0ZXMgKi8KLQltZnNwcglyMTEsIFNQUk5fU1JSMAkvKiBHZXQgZWZmZWN0aXZlIGFkZHJlc3Mgb2YgZmF1bHQgKi8KKwlybHdpbm0JcjExLCByMTEsMCwwLDE5CS8qIEV4dHJhY3QgcGFnZSBkZXNjcmlwdG9yIHBhZ2UgYWRkcmVzcyAqLwogCS8qIEV4dHJhY3QgbGV2ZWwgMiBpbmRleCAqLwotCXJsd2lubQlyMTEsIHIxMSwgMzIgLSAoUEFHRV9TSElGVCAtIDIpLCAzMiAtIFBBR0VfU0hJRlQsIDI5CisJcmx3aW5tCXIxMCwgcjEwLCAzMiAtIChQQUdFX1NISUZUIC0gMiksIDMyIC0gUEFHRV9TSElGVCwgMjkKIAlsd3p4CXIxMCwgcjEwLCByMTEJLyogR2V0IHRoZSBwdGUgKi8KIAogI2lmZGVmIENPTkZJR19TV0FQCi0JYW5kaS4JcjExLCByMTAsIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUFJFU0VOVAotCWNtcHdpCWNyMCwgcjExLCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1BSRVNFTlQKLQlsaQlyMTEsIFJQTl9QQVRURVJOCi0JYm5lLQljcjAsIDJmCi0jZWxzZQotCWxpCXIxMSwgUlBOX1BBVFRFUk4KKwlybHdpbm0JcjExLCByMTAsIDMyLTUsIF9QQUdFX1BSRVNFTlQKKwlhbmQJcjExLCByMTEsIHIxMAorCXJsd2ltaQlyMTAsIHIxMSwgMCwgX1BBR0VfUFJFU0VOVAogI2VuZGlmCisJbGkJcjExLCBSUE5fUEFUVEVSTgogCS8qIFRoZSBMaW51eCBQVEUgd29uJ3QgZ28gZXhhY3RseSBpbnRvIHRoZSBNTVUgVExCLgogCSAqIFNvZnR3YXJlIGluZGljYXRvciBiaXRzIDIxIGFuZCAyOCBtdXN0IGJlIGNsZWFyLgogCSAqIFNvZnR3YXJlIGluZGljYXRvciBiaXRzIDI0LCAyNSwgMjYsIGFuZCAyNyBtdXN0IGJlCkBAIC0zNjYsMjEgKzM1OSw2IEBACiAJbWZzcHIJcjEwLCBTUFJOX1NQUkdfU0NSQVRDSDIKIAlFWENFUFRJT05fRVBJTE9HXzAKIAlyZmkKLTI6Ci0JbWZzcHIJcjEwLCBTUFJOX1NSUjEKLQkvKiBjbGVhciBhbGwgZXJyb3IgYml0cyBhcyBUTEIgTWlzcwotCSAqIHNldHMgYSBmZXcgdW5jb25kaXRpb25hbGx5Ci0JKi8KLQlybHdpbm0JcjEwLCByMTAsIDAsIDB4ZmZmZgotCW10c3ByCVNQUk5fU1JSMSwgcjEwCi0KLQkvKiBSZXN0b3JlIHJlZ2lzdGVycyAqLwotI2lmZGVmIENPTkZJR184eHhfQ1BVNgotCW1mc3ByCXIzLCBTUFJOX0RBUgotCW10c3ByCVNQUk5fREFSLCByMTEJLyogVGFnIERBUiAqLwotI2VuZGlmCi0JbWZzcHIJcjEwLCBTUFJOX1NQUkdfU0NSQVRDSDIKLQliCUluc3RydWN0aW9uVExCRXJyb3IxCiAKIAkuID0gMHgxMjAwCiBEYXRhU3RvcmVUTEJNaXNzOgpAQCAtMzk1LDIwICszNzMsMTYgQEAKIAkgKiBrZXJuZWwgcGFnZSB0YWJsZXMuCiAJICovCiAJYW5kaXMuCXIxMSwgcjEwLCAweDgwMDAKLQltZnNwcglyMTEsIFNQUk5fTV9UVwkvKiBHZXQgbGV2ZWwgMSB0YWJsZSBiYXNlIGFkZHJlc3MgKi8KKwltZnNwcglyMTEsIFNQUk5fTV9UVwkvKiBHZXQgbGV2ZWwgMSB0YWJsZSAqLwogCWJlcQkzZgotCWxpcwlyMTEsIChzd2FwcGVyX3BnX2Rpci1QQUdFX09GRlNFVClAaAotCW9yaQlyMTEsIHIxMSwgKHN3YXBwZXJfcGdfZGlyLVBBR0VfT0ZGU0VUKUBsCisJbGlzCXIxMSwgKHN3YXBwZXJfcGdfZGlyLVBBR0VfT0ZGU0VUKUBoYQogMzoKLQkvKiBFeHRyYWN0IGxldmVsIDEgaW5kZXggKi8KLQlybHdpbm0JcjEwLCByMTAsIDMyIC0gKChQQUdFX1NISUZUIC0gMikgPDwgMSksIChQQUdFX1NISUZUIC0gMikgPDwgMSwgMjkKLQlsd3p4CXIxMSwgcjEwLCByMTEJLyogR2V0IHRoZSBsZXZlbCAxIGVudHJ5ICovCi0Jcmx3aW5tLglyMTAsIHIxMSwwLDAsMTkJLyogRXh0cmFjdCBwYWdlIGRlc2NyaXB0b3IgcGFnZSBhZGRyZXNzICovCi0JYmVxCTJmCQkvKiBJZiB6ZXJvLCBkb24ndCB0cnkgdG8gZmluZCBhIHB0ZSAqLworCS8qIEluc2VydCBsZXZlbCAxIGluZGV4ICovCisJcmx3aW1pCXIxMSwgcjEwLCAzMiAtICgoUEFHRV9TSElGVCAtIDIpIDw8IDEpLCAoUEFHRV9TSElGVCAtIDIpIDw8IDEsIDI5CisJbHd6CXIxMSwgKHN3YXBwZXJfcGdfZGlyLVBBR0VfT0ZGU0VUKUBsKHIxMSkJLyogR2V0IHRoZSBsZXZlbCAxIGVudHJ5ICovCiAKIAkvKiBXZSBoYXZlIGEgcHRlIHRhYmxlLCBzbyBsb2FkIGZldGNoIHRoZSBwdGUgZnJvbSB0aGUgdGFibGUuCiAJICovCi0JbWZzcHIJcjEwLCBTUFJOX01EX0VQTgkvKiBHZXQgYWRkcmVzcyBvZiBmYXVsdCAqLwogCS8qIEV4dHJhY3QgbGV2ZWwgMiBpbmRleCAqLwogCXJsd2lubQlyMTAsIHIxMCwgMzIgLSAoUEFHRV9TSElGVCAtIDIpLCAzMiAtIFBBR0VfU0hJRlQsIDI5CiAJcmx3aW1pCXIxMCwgcjExLCAwLCAwLCAzMiAtIFBBR0VfU0hJRlQgLSAxCS8qIEFkZCBsZXZlbCAyIGJhc2UgKi8KQEAgLTQ0MSwxNiArNDE1LDEzIEBACiAJYW5kCXIxMSwgcjExLCByMTAKIAlybHdpbWkJcjEwLCByMTEsIDAsIF9QQUdFX1BSRVNFTlQKICNlbmRpZgotCS8qIGludmVydCBSVyAqLwotCXhvcmkJcjEwLCByMTAsIF9QQUdFX1JXCi0KIAkvKiBUaGUgTGludXggUFRFIHdvbid0IGdvIGV4YWN0bHkgaW50byB0aGUgTU1VIFRMQi4KIAkgKiBTb2Z0d2FyZSBpbmRpY2F0b3IgYml0cyAyMiBhbmQgMjggbXVzdCBiZSBjbGVhci4KIAkgKiBTb2Z0d2FyZSBpbmRpY2F0b3IgYml0cyAyNCwgMjUsIDI2LCBhbmQgMjcgbXVzdCBiZQogCSAqIHNldC4gIEFsbCBvdGhlciBMaW51eCBQVEUgYml0cyBjb250cm9sIHRoZSBiZWhhdmlvcgogCSAqIG9mIHRoZSBNTVUuCiAJICovCi0yOglsaQlyMTEsIFJQTl9QQVRURVJOCisJbGkJcjExLCBSUE5fUEFUVEVSTgogCXJsd2ltaQlyMTAsIHIxMSwgMCwgMjQsIDI4CS8qIFNldCAyNC0yNywgY2xlYXIgMjggKi8KIAlNVFNQUl9DUFU2KFNQUk5fTURfUlBOLCByMTAsIHIzKQkvKiBVcGRhdGUgVExCIGVudHJ5ICovCiAKQEAgLTQ2OSwxMCArNDQwLDcgQEAKICAqLwogCS4gPSAweDEzMDAKIEluc3RydWN0aW9uVExCRXJyb3I6Ci0JRVhDRVBUSU9OX1BST0xPR18wCi1JbnN0cnVjdGlvblRMQkVycm9yMToKLQlFWENFUFRJT05fUFJPTE9HXzEKLQlFWENFUFRJT05fUFJPTE9HXzIKKwlFWENFUFRJT05fUFJPTE9HCiAJbXIJcjQscjEyCiAJbXIJcjUscjkKIAlhbmRpcy4JcjEwLHI1LDB4NDAwMApAQCAtNTMyLDMwICs1MDAsMjEgQEAKICAvKiBkZWZpbmUgaWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIHNlbGYgbW9kaWZ5aW5nIGNvZGUgKi8KICNkZWZpbmUgTk9fU0VMRl9NT0RJRllJTkdfQ09ERQogRml4dXBEQVI6LyogRW50cnkgcG9pbnQgZm9yIGRjYnggd29ya2Fyb3VuZC4gKi8KLSNpZmRlZiBDT05GSUdfOHh4X0NQVTYKLQltdHNwcglTUFJOX0RBUiwgcjMKLSNlbmRpZgogCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMiwgcjEwCiAJLyogZmV0Y2ggaW5zdHJ1Y3Rpb24gZnJvbSBtZW1vcnkuICovCiAJbWZzcHIJcjEwLCBTUFJOX1NSUjAKIAlhbmRpcy4JcjExLCByMTAsIDB4ODAwMAkvKiBBZGRyZXNzID49IDB4ODAwMDAwMDAgKi8KLQltZnNwcglyMTEsIFNQUk5fTV9UVwkvKiBHZXQgbGV2ZWwgMSB0YWJsZSBiYXNlIGFkZHJlc3MgKi8KLQliZXEtCTNmCQkvKiBCcmFuY2ggaWYgdXNlciBzcGFjZSAqLwotCWxpcwlyMTEsIChzd2FwcGVyX3BnX2Rpci1QQUdFX09GRlNFVClAaAotCW9yaQlyMTEsIHIxMSwgKHN3YXBwZXJfcGdfZGlyLVBBR0VfT0ZGU0VUKUBsCi0JLyogRXh0cmFjdCBsZXZlbCAxIGluZGV4ICovCi0zOglybHdpbm0JcjEwLCByMTAsIDMyIC0gKChQQUdFX1NISUZUIC0gMikgPDwgMSksIChQQUdFX1NISUZUIC0gMikgPDwgMSwgMjkKLQlsd3p4CXIxMSwgcjEwLCByMTEJLyogR2V0IHRoZSBsZXZlbCAxIGVudHJ5ICovCi0Jcmx3aW5tCXIxMCwgcjExLDAsMCwxOQkvKiBFeHRyYWN0IHBhZ2UgZGVzY3JpcHRvciBwYWdlIGFkZHJlc3MgKi8KLQltZnNwcglyMTEsIFNQUk5fU1JSMAkvKiBHZXQgZWZmZWN0aXZlIGFkZHJlc3Mgb2YgZmF1bHQgKi8KLQkvKiBFeHRyYWN0IGxldmVsIDIgaW5kZXggKi8KLQlybHdpbm0JcjExLCByMTEsIDMyIC0gKFBBR0VfU0hJRlQgLSAyKSwgMzIgLSBQQUdFX1NISUZULCAyOQotCWx3engJcjExLCByMTAsIHIxMQkvKiBHZXQgdGhlIHB0ZSAqLwotI2lmZGVmIENPTkZJR184eHhfQ1BVNgotCW1mc3ByCXIzLCBTUFJOX0RBUgotI2VuZGlmCisJbWZzcHIJcjExLCBTUFJOX01fVFcJLyogR2V0IGxldmVsIDEgdGFibGUgKi8KKwliZXEJM2YKKwlsaXMJcjExLCAoc3dhcHBlcl9wZ19kaXItUEFHRV9PRkZTRVQpQGhhCisJLyogSW5zZXJ0IGxldmVsIDEgaW5kZXggKi8KKzM6CXJsd2ltaQlyMTEsIHIxMCwgMzIgLSAoKFBBR0VfU0hJRlQgLSAyKSA8PCAxKSwgKFBBR0VfU0hJRlQgLSAyKSA8PCAxLCAyOQorCWx3eglyMTEsIChzd2FwcGVyX3BnX2Rpci1QQUdFX09GRlNFVClAbChyMTEpCS8qIEdldCB0aGUgbGV2ZWwgMSBlbnRyeSAqLworCXJsd2lubQlyMTEsIHIxMSwwLDAsMTkJLyogRXh0cmFjdCBwYWdlIGRlc2NyaXB0b3IgcGFnZSBhZGRyZXNzICovCisJLyogSW5zZXJ0IGxldmVsIDIgaW5kZXggKi8KKwlybHdpbWkJcjExLCByMTAsIDMyIC0gKFBBR0VfU0hJRlQgLSAyKSwgMzIgLSBQQUdFX1NISUZULCAyOQorCWx3eglyMTEsIDAocjExKQkvKiBHZXQgdGhlIHB0ZSAqLwogCS8qIGNvbmNhdCBwaHlzaWNhbCBwYWdlIGFkZHJlc3MocjExKSBhbmQgcGFnZSBvZmZzZXQocjEwKSAqLwotCW1mc3ByCXIxMCwgU1BSTl9TUlIwCiAJcmx3aW1pCXIxMSwgcjEwLCAwLCAzMiAtIFBBR0VfU0hJRlQsIDMxCiAJbHd6CXIxMSwwKHIxMSkKIC8qIENoZWNrIGlmIGl0IHJlYWxseSBpcyBhIGRjYnggaW5zdHJ1Y3Rpb24uICovCkBAIC03MDUsOCArNjY0LDcgQEAKIAkgKiBpbml0J3MgVEhSRUFEIGxpa2UgdGhlIGNvbnRleHQgc3dpdGNoIGNvZGUgZG9lcywgYnV0IHRoaXMgaXMKIAkgKiBlYXNpZXIuLi4uLi51bnRpbCBzb21lb25lIGNoYW5nZXMgaW5pdCdzIHN0YXRpYyBzdHJ1Y3R1cmVzLgogCSAqLwotCWxpcwlyNiwgc3dhcHBlcl9wZ19kaXJAaAotCW9yaQlyNiwgcjYsIHN3YXBwZXJfcGdfZGlyQGwKKwlsaXMJcjYsIHN3YXBwZXJfcGdfZGlyQGhhCiAJdG9waHlzKHI2LHI2KQogI2lmZGVmIENPTkZJR184eHhfQ1BVNgogCWxpcwlyNCwgY3B1Nl9lcnJhdGFfd29yZEBoCkBAIC04ODUsMjMgKzg0MywyOCBAQAogCXN0dwlyNCwgMHg0KHI1KQogI2VuZGlmCiAKKwkvKiBSZWdpc3RlciBNX1RXIHdpbGwgY29udGFpbiBiYXNlIGFkZHJlc3Mgb2YgbGV2ZWwgMSB0YWJsZSBtaW51cyB0aGUKKwkgKiBsb3dlciBwYXJ0IG9mIHRoZSBrZXJuZWwgUEdESVIgYmFzZSBhZGRyZXNzLCBzbyB0aGF0IGFsbCBhY2Nlc3NlcyB0bworCSAqIGxldmVsIDEgdGFibGUgYXJlIGRvbmUgcmVsYXRpdmUgdG8gbG93ZXIgcGFydCBvZiBrZXJuZWwgUEdESVIgYmFzZQorCSAqIGFkZHJlc3MuCisJICovCisJbGkJcjUsIChzd2FwcGVyX3BnX2Rpci1QQUdFX09GRlNFVClAbAorCXN1YglyNCwgcjQsIHI1CisJdG9waHlzCShyNCwgcjQpCiAjaWZkZWYgQ09ORklHXzh4eF9DUFU2CiAJbGlzCXI2LCBjcHU2X2VycmF0YV93b3JkQGgKIAlvcmkJcjYsIHI2LCBjcHU2X2VycmF0YV93b3JkQGwKLQl0b3BoeXMJKHI0LCByNCkKIAlsaQlyNywgMHgzZjgwCiAJc3R3CXI3LCAxMihyNikKIAlsd3oJcjcsIDEyKHI2KQotICAgICAgICBtdHNwciAgIFNQUk5fTV9UVywgcjQgICAgICAgICAgICAgICAvKiBVcGRhdGUgTU1VIGJhc2UgYWRkcmVzcyAqLworI2VuZGlmCisJbXRzcHIJU1BSTl9NX1RXLCByNAkJLyogVXBkYXRlIHBvaW50ZXVyIHRvIGxldmVsIDEgdGFibGUgKi8KKyNpZmRlZiBDT05GSUdfOHh4X0NQVTYKIAlsaQlyNywgMHgzMzgwCiAJc3R3CXI3LCAxMihyNikKIAlsd3oJcjcsIDEyKHI2KQotICAgICAgICBtdHNwciAgIFNQUk5fTV9DQVNJRCwgcjMgICAgICAgICAgICAgLyogVXBkYXRlIGNvbnRleHQgKi8KLSNlbHNlCi0gICAgICAgIG10c3ByICAgU1BSTl9NX0NBU0lELHIzCQkvKiBVcGRhdGUgY29udGV4dCAqLwotCXRvcGh5cwkocjQsIHI0KQotCW10c3ByCVNQUk5fTV9UVywgcjQJCS8qIGFuZCBwZ2QgKi8KICNlbmRpZgorCW10c3ByCVNQUk5fTV9DQVNJRCwgcjMJLyogVXBkYXRlIGNvbnRleHQgKi8KIAlTWU5DCiAJYmxyCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKaW5kZXggZDZlMTk1ZS4uNWEyM2I2OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMKQEAgLTExNSw2ICsxMTUsMTQgQEAKIHsKIAlzdHJ1Y3Qgc2xiX3NoYWRvdyAqcyA9ICZzbGJfc2hhZG93W2NwdV07CiAKKwkvKgorCSAqIFdoZW4gd2UgY29tZSB0aHJvdWdoIGhlcmUgdG8gaW5pdGlhbGlzZSBib290X3BhY2EsIHRoZSBzbGJfc2hhZG93CisJICogYnVmZmVycyBhcmUgbm90IGFsbG9jYXRlZCB5ZXQuIFRoYXQncyBPSywgd2UnbGwgZ2V0IG9uZSBsYXRlciBpbgorCSAqIGJvb3QsIGJ1dCBtYWtlIHN1cmUgd2UgZG9uJ3QgY29ycnVwdCBtZW1vcnkgYXQgMC4KKwkgKi8KKwlpZiAoIXNsYl9zaGFkb3cpCisJCXJldHVybiBOVUxMOworCiAJcy0+cGVyc2lzdGVudCA9IGNwdV90b19iZTMyKFNMQl9OVU1fQk9MVEVEKTsKIAlzLT5idWZmZXJfbGVuZ3RoID0gY3B1X3RvX2JlMzIoc2l6ZW9mKCpzKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX2RuLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9kbi5jCmluZGV4IDFmNjFmYWIuLjgzZGYzMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX2RuLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfZG4uYwpAQCAtMTQ3LDEwICsxNDcsOCBAQAogCS8qIFBIQiBub2RlcyB0aGVtc2VsdmVzIG11c3Qgbm90IG1hdGNoICovCiAJdXBkYXRlX2RuX3BjaV9pbmZvKGRuLCBwaGIpOwogCXBkbiA9IGRuLT5kYXRhOwotCWlmIChwZG4pIHsKKwlpZiAocGRuKQogCQlwZG4tPmRldmZuID0gcGRuLT5idXNubyA9IC0xOwotCQlwZG4tPnBoYiA9IHBoYjsKLQl9CiAKIAkvKiBVcGRhdGUgZG4tPnBoYiBwdHJzIGZvciBuZXcgcGhiIGFuZCBjaGlsZHJlbiBkZXZpY2VzICovCiAJdHJhdmVyc2VfcGNpX2RldmljZXMoZG4sIHVwZGF0ZV9kbl9wY2lfaW5mbywgcGhiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKaW5kZXggNmE3OTliMy4uYjhlMTVjNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKQEAgLTY1Miw5ICs2NTIsNiBAQAogCWlmICghZWFybHlfaW5pdF9kdF92ZXJpZnkocGFyYW1zKSkKIAkJcGFuaWMoIkJVRzogRmFpbGVkIHZlcmlmeWluZyBmbGF0IGRldmljZSB0cmVlLCBiYWQgdmVyc2lvbj8iKTsKIAotCS8qIFNldHVwIGZsYXQgZGV2aWNlLXRyZWUgcG9pbnRlciAqLwotCWluaXRpYWxfYm9vdF9wYXJhbXMgPSBwYXJhbXM7Ci0KICNpZmRlZiBDT05GSUdfUFBDX1JUQVMKIAkvKiBTb21lIG1hY2hpbmVzIG1pZ2h0IG5lZWQgUlRBUyBpbmZvIGZvciBkZWJ1Z2dpbmcsIGdyYWIgaXQgbm93LiAqLwogCW9mX3NjYW5fZmxhdF9kdChlYXJseV9pbml0X2R0X3NjYW5fcnRhcywgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCmluZGV4IDRhZjkwNWUuLjIxYzQ1YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jCkBAIC04OTcsNyArODk3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wocnRhc19vZmZsaW5lX2NwdXNfbWFzayk7CiAKLWludCBydGFzX2libV9zdXNwZW5kX21lKHN0cnVjdCBydGFzX2FyZ3MgKmFyZ3MpCitpbnQgcnRhc19pYm1fc3VzcGVuZF9tZSh1NjQgaGFuZGxlLCBpbnQgKnZhc2lfcmV0dXJuKQogewogCWxvbmcgc3RhdGU7CiAJbG9uZyByYzsKQEAgLTkxMSw4ICs5MTEsNyBAQAogCQlyZXR1cm4gLUVOT1NZUzsKIAogCS8qIE1ha2Ugc3VyZSB0aGUgc3RhdGUgaXMgdmFsaWQgKi8KLQlyYyA9IHBscGFyX2hjYWxsKEhfVkFTSV9TVEFURSwgcmV0YnVmLAotCQkJICgodTY0KWFyZ3MtPmFyZ3NbMF0gPDwgMzIpIHwgYXJncy0+YXJnc1sxXSk7CisJcmMgPSBwbHBhcl9oY2FsbChIX1ZBU0lfU1RBVEUsIHJldGJ1ZiwgaGFuZGxlKTsKIAogCXN0YXRlID0gcmV0YnVmWzBdOwogCkBAIC05MjAsMTIgKzkxOSwxMiBAQAogCQlwcmludGsoS0VSTl9FUlIgInJ0YXNfaWJtX3N1c3BlbmRfbWU6IHZhc2lfc3RhdGUgcmV0dXJuZWQgJWxkXG4iLHJjKTsKIAkJcmV0dXJuIHJjOwogCX0gZWxzZSBpZiAoc3RhdGUgPT0gSF9WQVNJX0VOQUJMRUQpIHsKLQkJYXJncy0+YXJnc1thcmdzLT5uYXJnc10gPSBSVEFTX05PVF9TVVNQRU5EQUJMRTsKKwkJKnZhc2lfcmV0dXJuID0gUlRBU19OT1RfU1VTUEVOREFCTEU7CiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAoc3RhdGUgIT0gSF9WQVNJX1NVU1BFTkRJTkcpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJydGFzX2libV9zdXNwZW5kX21lOiB2YXNpX3N0YXRlIHJldHVybmVkIHN0YXRlICVsZFxuIiwKIAkJICAgICAgIHN0YXRlKTsKLQkJYXJncy0+YXJnc1thcmdzLT5uYXJnc10gPSAtMTsKKwkJKnZhc2lfcmV0dXJuID0gLTE7CiAJCXJldHVybiAwOwogCX0KIApAQCAtOTczLDcgKzk3Miw3IEBACiAJcmV0dXJuIGF0b21pY19yZWFkKCZkYXRhLmVycm9yKTsKIH0KICNlbHNlIC8qIENPTkZJR19QUENfUFNFUklFUyAqLwotaW50IHJ0YXNfaWJtX3N1c3BlbmRfbWUoc3RydWN0IHJ0YXNfYXJncyAqYXJncykKK2ludCBydGFzX2libV9zdXNwZW5kX21lKHU2NCBoYW5kbGUsIGludCAqdmFzaV9yZXR1cm4pCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CkBAIC0xMDUzLDcgKzEwNTIsMTYgQEAKIAogCS8qIE5lZWQgdG8gaGFuZGxlIGlibSxzdXNwZW5kX21lIGNhbGwgc3BlY2lhbGx5ICovCiAJaWYgKHRva2VuID09IGlibV9zdXNwZW5kX21lX3Rva2VuKSB7Ci0JCXJjID0gcnRhc19pYm1fc3VzcGVuZF9tZSgmYXJncyk7CisKKwkJLyoKKwkJICogcnRhc19pYm1fc3VzcGVuZF9tZSBhc3N1bWVzIGFyZ3MgYXJlIGluIGNwdSBlbmRpYW4sIG9yIGF0IGxlYXN0IHRoZQorCQkgKiBoY2FsbCB3aXRoaW4gaXQgcmVxdWlyZXMgaXQuCisJCSAqLworCQlpbnQgdmFzaV9yYyA9IDA7CisJCXU2NCBoYW5kbGUgPSAoKHU2NCliZTMyX3RvX2NwdShhcmdzLmFyZ3NbMF0pIDw8IDMyKQorCQkgICAgICAgICAgICAgIHwgYmUzMl90b19jcHUoYXJncy5hcmdzWzFdKTsKKwkJcmMgPSBydGFzX2libV9zdXNwZW5kX21lKGhhbmRsZSwgJnZhc2lfcmMpOworCQlhcmdzLnJldHNbMF0gPSBjcHVfdG9fYmUzMih2YXNpX3JjKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwogCQlnb3RvIGNvcHlfcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKaW5kZXggOGIyZDJkYy4uNmUxOWFmYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCkBAIC00MzQsMjAgKzQzNCw2IEBACiAJcHJpbnRrKEtFUk5fRVJSICJDUFUlZCBkaWRuJ3QgZGllLi4uXG4iLCBjcHUpOwogfQogCi12b2lkIGdlbmVyaWNfbWFjaF9jcHVfZGllKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IGNwdTsKLQotCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JaWRsZV90YXNrX2V4aXQoKTsKLQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkNQVSVkIG9mZmxpbmVcbiIsIGNwdSk7Ci0JX190aGlzX2NwdV93cml0ZShjcHVfc3RhdGUsIENQVV9ERUFEKTsKLQlzbXBfd21iKCk7Ci0Jd2hpbGUgKF9fdGhpc19jcHVfcmVhZChjcHVfc3RhdGUpICE9IENQVV9VUF9QUkVQQVJFKQotCQljcHVfcmVsYXgoKTsKLX0KLQogdm9pZCBnZW5lcmljX3NldF9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgY3B1KQogewogCXBlcl9jcHUoY3B1X3N0YXRlLCBjcHUpID0gQ1BVX0RFQUQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2NhbGxzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2NhbGxzLmMKaW5kZXggY2Q5YmU5YS4uYjI3MDJlOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMuYwpAQCAtMTIxLDE3ICsxMjEsMyBAQAogCXJldHVybiBzeXNfZmFkdmlzZTY0KGZkLCAodTY0KW9mZnNldF9oaWdoIDw8IDMyIHwgb2Zmc2V0X2xvdywKIAkJCSAgICAgKHU2NClsZW5faGlnaCA8PCAzMiB8IGxlbl9sb3csIGFkdmljZSk7CiB9Ci0KLXZvaWQgZG9fc2hvd19zeXNjYWxsKHVuc2lnbmVkIGxvbmcgcjMsIHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCi0JCSAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywgdW5zaWduZWQgbG9uZyByOCwKLQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlwcmludGsoInN5c2NhbGwgJWxkKCVseCwgJWx4LCAlbHgsICVseCwgJWx4LCAlbHgpIHJlZ3M9JXAgY3VycmVudD0lcCIKLQkgICAgICAgIiBjcHU9JWRcbiIsIHJlZ3MtPmdwclswXSwgcjMsIHI0LCByNSwgcjYsIHI3LCByOCwgcmVncywKLQkgICAgICAgY3VycmVudCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLX0KLQotdm9pZCBkb19zaG93X3N5c2NhbGxfZXhpdCh1bnNpZ25lZCBsb25nIHIzKQotewotCXByaW50aygiIC0+ICVseCwgY3VycmVudD0lcCBjcHU9JWRcbiIsIHIzLCBjdXJyZW50LCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCmluZGV4IGU2NTk1YjcuLjE5ZTQ3NDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKQEAgLTE3MDcsMjEgKzE3MDcsNiBAQAogfQogI2VuZGlmIC8qIENPTkZJR19BTFRJVkVDICovCiAKLSNpZmRlZiBDT05GSUdfVlNYCi12b2lkIHZzeF9hc3Npc3RfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWlmICghdXNlcl9tb2RlKHJlZ3MpKSB7Ci0JCXByaW50ayhLRVJOX0VNRVJHICJWU1ggYXNzaXN0IGV4Y2VwdGlvbiBpbiBrZXJuZWwgbW9kZSIKLQkJICAgICAgICIgYXQgJWx4XG4iLCByZWdzLT5uaXApOwotCQlkaWUoIktlcm5lbCBWU1ggYXNzaXN0IGV4Y2VwdGlvbiIsIHJlZ3MsIFNJR0lMTCk7Ci0JfQotCi0JZmx1c2hfdnN4X3RvX3RocmVhZChjdXJyZW50KTsKLQlwcmludGsoS0VSTl9JTkZPICJWU1ggYXNzaXN0IG5vdCBzdXBwb3J0ZWQgYXQgJWx4XG4iLCByZWdzLT5uaXApOwotCV9leGNlcHRpb24oU0lHSUxMLCByZWdzLCBJTExfSUxMT1BDLCByZWdzLT5uaXApOwotfQotI2VuZGlmIC8qIENPTkZJR19WU1ggKi8KLQogI2lmZGVmIENPTkZJR19GU0xfQk9PS0UKIHZvaWQgQ2FjaGVMb2NraW5nRXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCQkgICB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcgYi9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKaW5kZXggZjU3NjlmMS4uMTE4NTBmMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZwpAQCAtMjEsNiArMjEsNyBAQAogCXNlbGVjdCBQUkVFTVBUX05PVElGSUVSUwogCXNlbGVjdCBBTk9OX0lOT0RFUwogCXNlbGVjdCBIQVZFX0tWTV9FVkVOVEZECisJc2VsZWN0IFNSQ1UKIAogY29uZmlnIEtWTV9CT09LM1NfSEFORExFUgogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X2ludGVycnVwdHMuUyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X2ludGVycnVwdHMuUwppbmRleCAzNjU0MGE5Li4wZmRjNGEyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9pbnRlcnJ1cHRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfaW50ZXJydXB0cy5TCkBAIC05MywxNSArOTMsMTUgQEAKIAltZnNwcglyNSwgU1BSTl9NTUNSMQogCW1mc3ByCXI5LCBTUFJOX1NJQVIKIAltZnNwcglyMTAsIFNQUk5fU0RBUgotCXN0ZAlyNywgSFNUQVRFX01NQ1IocjEzKQotCXN0ZAlyNSwgSFNUQVRFX01NQ1IgKyA4KHIxMykKLQlzdGQJcjYsIEhTVEFURV9NTUNSICsgMTYocjEzKQotCXN0ZAlyOSwgSFNUQVRFX01NQ1IgKyAyNChyMTMpCi0Jc3RkCXIxMCwgSFNUQVRFX01NQ1IgKyAzMihyMTMpCisJc3RkCXI3LCBIU1RBVEVfTU1DUjAocjEzKQorCXN0ZAlyNSwgSFNUQVRFX01NQ1IxKHIxMykKKwlzdGQJcjYsIEhTVEFURV9NTUNSQShyMTMpCisJc3RkCXI5LCBIU1RBVEVfU0lBUihyMTMpCisJc3RkCXIxMCwgSFNUQVRFX1NEQVIocjEzKQogQkVHSU5fRlRSX1NFQ1RJT04KIAltZnNwcglyOSwgU1BSTl9TSUVSCi0Jc3RkCXI4LCBIU1RBVEVfTU1DUiArIDQwKHIxMykKLQlzdGQJcjksIEhTVEFURV9NTUNSICsgNDgocjEzKQorCXN0ZAlyOCwgSFNUQVRFX01NQ1IyKHIxMykKKwlzdGQJcjksIEhTVEFURV9TSUVSKHIxMykKIEVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0FSQ0hfMjA3UykKIAltZnNwcglyMywgU1BSTl9QTUMxCiAJbWZzcHIJcjUsIFNQUk5fUE1DMgpAQCAtMTA5LDEyICsxMDksMTIgQEAKIAltZnNwcglyNywgU1BSTl9QTUM0CiAJbWZzcHIJcjgsIFNQUk5fUE1DNQogCW1mc3ByCXI5LCBTUFJOX1BNQzYKLQlzdHcJcjMsIEhTVEFURV9QTUMocjEzKQotCXN0dwlyNSwgSFNUQVRFX1BNQyArIDQocjEzKQotCXN0dwlyNiwgSFNUQVRFX1BNQyArIDgocjEzKQotCXN0dwlyNywgSFNUQVRFX1BNQyArIDEyKHIxMykKLQlzdHcJcjgsIEhTVEFURV9QTUMgKyAxNihyMTMpCi0Jc3R3CXI5LCBIU1RBVEVfUE1DICsgMjAocjEzKQorCXN0dwlyMywgSFNUQVRFX1BNQzEocjEzKQorCXN0dwlyNSwgSFNUQVRFX1BNQzIocjEzKQorCXN0dwlyNiwgSFNUQVRFX1BNQzMocjEzKQorCXN0dwlyNywgSFNUQVRFX1BNQzQocjEzKQorCXN0dwlyOCwgSFNUQVRFX1BNQzUocjEzKQorCXN0dwlyOSwgSFNUQVRFX1BNQzYocjEzKQogMzE6CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcm1oYW5kbGVycy5TIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcm1oYW5kbGVycy5TCmluZGV4IDEwNTU0ZGYuLmJiOTRlNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3JtaGFuZGxlcnMuUworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9ybWhhbmRsZXJzLlMKQEAgLTgzLDM1ICs4MywzNSBAQAogCWNtcHdpCXI0LCAwCiAJYmVxCTIzZgkJCS8qIHNraXAgaWYgbm90ICovCiBCRUdJTl9GVFJfU0VDVElPTgotCWxkCXIzLCBIU1RBVEVfTU1DUihyMTMpCisJbGQJcjMsIEhTVEFURV9NTUNSMChyMTMpCiAJYW5kaS4JcjQsIHIzLCBNTUNSMF9QTUFPX1NZTkMgfCBNTUNSMF9QTUFPCiAJY21wd2kJcjQsIE1NQ1IwX1BNQU8KIAliZXFsCWt2bXBwY19maXhfcG1hbwogRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfUE1BT19CVUcpCi0JbHd6CXIzLCBIU1RBVEVfUE1DKHIxMykKLQlsd3oJcjQsIEhTVEFURV9QTUMgKyA0KHIxMykKLQlsd3oJcjUsIEhTVEFURV9QTUMgKyA4KHIxMykKLQlsd3oJcjYsIEhTVEFURV9QTUMgKyAxMihyMTMpCi0JbHd6CXI4LCBIU1RBVEVfUE1DICsgMTYocjEzKQotCWx3eglyOSwgSFNUQVRFX1BNQyArIDIwKHIxMykKKwlsd3oJcjMsIEhTVEFURV9QTUMxKHIxMykKKwlsd3oJcjQsIEhTVEFURV9QTUMyKHIxMykKKwlsd3oJcjUsIEhTVEFURV9QTUMzKHIxMykKKwlsd3oJcjYsIEhTVEFURV9QTUM0KHIxMykKKwlsd3oJcjgsIEhTVEFURV9QTUM1KHIxMykKKwlsd3oJcjksIEhTVEFURV9QTUM2KHIxMykKIAltdHNwcglTUFJOX1BNQzEsIHIzCiAJbXRzcHIJU1BSTl9QTUMyLCByNAogCW10c3ByCVNQUk5fUE1DMywgcjUKIAltdHNwcglTUFJOX1BNQzQsIHI2CiAJbXRzcHIJU1BSTl9QTUM1LCByOAogCW10c3ByCVNQUk5fUE1DNiwgcjkKLQlsZAlyMywgSFNUQVRFX01NQ1IocjEzKQotCWxkCXI0LCBIU1RBVEVfTU1DUiArIDgocjEzKQotCWxkCXI1LCBIU1RBVEVfTU1DUiArIDE2KHIxMykKLQlsZAlyNiwgSFNUQVRFX01NQ1IgKyAyNChyMTMpCi0JbGQJcjcsIEhTVEFURV9NTUNSICsgMzIocjEzKQorCWxkCXIzLCBIU1RBVEVfTU1DUjAocjEzKQorCWxkCXI0LCBIU1RBVEVfTU1DUjEocjEzKQorCWxkCXI1LCBIU1RBVEVfTU1DUkEocjEzKQorCWxkCXI2LCBIU1RBVEVfU0lBUihyMTMpCisJbGQJcjcsIEhTVEFURV9TREFSKHIxMykKIAltdHNwcglTUFJOX01NQ1IxLCByNAogCW10c3ByCVNQUk5fTU1DUkEsIHI1CiAJbXRzcHIJU1BSTl9TSUFSLCByNgogCW10c3ByCVNQUk5fU0RBUiwgcjcKIEJFR0lOX0ZUUl9TRUNUSU9OCi0JbGQJcjgsIEhTVEFURV9NTUNSICsgNDAocjEzKQotCWxkCXI5LCBIU1RBVEVfTU1DUiArIDQ4KHIxMykKKwlsZAlyOCwgSFNUQVRFX01NQ1IyKHIxMykKKwlsZAlyOSwgSFNUQVRFX1NJRVIocjEzKQogCW10c3ByCVNQUk5fTU1DUjIsIHI4CiAJbXRzcHIJU1BSTl9TSUVSLCByOQogRU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfQVJDSF8yMDdTKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2xpYi9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9saWIvTWFrZWZpbGUKaW5kZXggNTk3NTYyZi4uNzkwMjgwMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvbGliL01ha2VmaWxlCkBAIC05LDMzICs5LDMwIEBACiBDRkxBR1NfUkVNT1ZFX2NvZGUtcGF0Y2hpbmcubyA9IC1wZwogQ0ZMQUdTX1JFTU9WRV9mZWF0dXJlLWZpeHVwcy5vID0gLXBnCiAKLW9iai15CQkJOj0gc3RyaW5nLm8gYWxsb2MubyBcCi0JCQkgICBjcnRzYXZyZXMubyBwcGNfa3N5bXMubworb2JqLXkgKz0gc3RyaW5nLm8gYWxsb2MubyBjcnRzYXZyZXMubyBwcGNfa3N5bXMubyBjb2RlLXBhdGNoaW5nLm8gXAorCSBmZWF0dXJlLWZpeHVwcy5vCisKIG9iai0kKENPTkZJR19QUEMzMikJKz0gZGl2NjQubyBjb3B5XzMyLm8KIAotb2JqLSQoQ09ORklHX1BQQzY0KQkrPSBjb3B5cGFnZV82NC5vIGNvcHl1c2VyXzY0Lm8gXAotCQkJICAgdXNlcmNvcHlfNjQubyBtZW1fNjQubyBzdHJpbmcubyBcCi0JCQkgICBod2VpZ2h0XzY0Lm8gXAotCQkJICAgY29weXVzZXJfcG93ZXI3Lm8gc3RyaW5nXzY0Lm8gY29weXBhZ2VfcG93ZXI3Lm8KK29iajY0LXkJKz0gY29weXBhZ2VfNjQubyBjb3B5dXNlcl82NC5vIHVzZXJjb3B5XzY0Lm8gbWVtXzY0Lm8gaHdlaWdodF82NC5vIFwKKwkgICBjb3B5dXNlcl9wb3dlcjcubyBzdHJpbmdfNjQubyBjb3B5cGFnZV9wb3dlcjcubyBtZW1jcHlfcG93ZXI3Lm8gXAorCSAgIG1lbWNweV82NC5vIG1lbWNtcF82NC5vCisKK29iajY0LSQoQ09ORklHX1NNUCkJKz0gbG9ja3Mubworb2JqNjQtJChDT05GSUdfQUxUSVZFQykJKz0gdm14LWhlbHBlci5vCisKIGlmZXEgKCQoQ09ORklHX0dFTkVSSUNfQ1NVTSksKQogb2JqLXkJCQkrPSBjaGVja3N1bV8kKENPTkZJR19XT1JEX1NJWkUpLm8KIG9iai0kKENPTkZJR19QUEM2NCkJKz0gY2hlY2tzdW1fd3JhcHBlcnNfNjQubwogZW5kaWYKIAotb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gbWVtY3B5X3Bvd2VyNy5vIG1lbWNweV82NC5vIAotCiBvYmotJChDT05GSUdfUFBDX0VNVUxBVEVfU1NURVApCSs9IHNzdGVwLm8gbGRzdGZwLm8KIAotaWZlcSAoJChDT05GSUdfUFBDNjQpLHkpCi1vYmotJChDT05GSUdfU01QKQkrPSBsb2Nrcy5vCi1vYmotJChDT05GSUdfQUxUSVZFQykJKz0gdm14LWhlbHBlci5vCi1lbmRpZgotCiBvYmotJChDT05GSUdfUFBDX0xJQl9SSEVBUCkgKz0gcmhlYXAubwogCi1vYmoteQkJCSs9IGNvZGUtcGF0Y2hpbmcubwotb2JqLXkJCQkrPSBmZWF0dXJlLWZpeHVwcy5vCiBvYmotJChDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUKSArPSBmZWF0dXJlLWZpeHVwcy10ZXN0Lm8KIAogb2JqLSQoQ09ORklHX0FMVElWRUMpCSs9IHhvcl92bXgubwogQ0ZMQUdTX3hvcl92bXgubyArPSAtbWFsdGl2ZWMgLW1hYmk9YWx0aXZlYworCitvYmotJChDT05GSUdfUFBDNjQpICs9ICQob2JqNjQteSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvbWVtY21wXzY0LlMgYi9hcmNoL3Bvd2VycGMvbGliL21lbWNtcF82NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NTNkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvbGliL21lbWNtcF82NC5TCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogQXV0aG9yOiBBbnRvbiBCbGFuY2hhcmQgPGFudG9uQGF1LmlibS5jb20+CisgKiBDb3B5cmlnaHQgMjAxNSBJQk0gQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisKKyNkZWZpbmUgb2ZmOAlyNgorI2RlZmluZSBvZmYxNglyNworI2RlZmluZSBvZmYyNAlyOAorCisjZGVmaW5lIHJBCXI5CisjZGVmaW5lIHJCCXIxMAorI2RlZmluZSByQwlyMTEKKyNkZWZpbmUgckQJcjI3CisjZGVmaW5lIHJFCXIyOAorI2RlZmluZSByRglyMjkKKyNkZWZpbmUgckcJcjMwCisjZGVmaW5lIHJICXIzMQorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKyNkZWZpbmUgTEQJbGRicngKKyNlbHNlCisjZGVmaW5lIExECWxkeAorI2VuZGlmCisKK19HTE9CQUwobWVtY21wKQorCWNtcGRpCWNyMSxyNSwwCisKKwkvKiBVc2UgdGhlIHNob3J0IGxvb3AgaWYgYm90aCBzdHJpbmdzIGFyZSBub3QgOEIgYWxpZ25lZCAqLworCW9yCXI2LHIzLHI0CisJYW5kaS4JcjYscjYsNworCisJLyogVXNlIHRoZSBzaG9ydCBsb29wIGlmIGxlbmd0aCBpcyBsZXNzIHRoYW4gMzJCICovCisJY21wZGkJY3I2LHI1LDMxCisKKwliZXEJY3IxLC5MemVybworCWJuZQkuTHNob3J0CisJYmd0CWNyNiwuTGxvbmcKKworLkxzaG9ydDoKKwltdGN0cglyNQorCisxOglsYnoJckEsMChyMykKKwlsYnoJckIsMChyNCkKKwlzdWJmLglyQyxyQixyQQorCWJuZQkuTG5vbl96ZXJvCisJYmR6CS5MemVybworCisJbGJ6CXJBLDEocjMpCisJbGJ6CXJCLDEocjQpCisJc3ViZi4JckMsckIsckEKKwlibmUJLkxub25femVybworCWJkegkuTHplcm8KKworCWxieglyQSwyKHIzKQorCWxieglyQiwyKHI0KQorCXN1YmYuCXJDLHJCLHJBCisJYm5lCS5Mbm9uX3plcm8KKwliZHoJLkx6ZXJvCisKKwlsYnoJckEsMyhyMykKKwlsYnoJckIsMyhyNCkKKwlzdWJmLglyQyxyQixyQQorCWJuZQkuTG5vbl96ZXJvCisKKwlhZGRpCXIzLHIzLDQKKwlhZGRpCXI0LHI0LDQKKworCWJkbnoJMWIKKworLkx6ZXJvOgorCWxpCXIzLDAKKwlibHIKKworLkxub25femVybzoKKwltcglyMyxyQworCWJscgorCisuTGxvbmc6CisJbGkJb2ZmOCw4CisJbGkJb2ZmMTYsMTYKKwlsaQlvZmYyNCwyNAorCisJc3RkCXIzMSwtOChyMSkKKwlzdGQJcjMwLC0xNihyMSkKKwlzdGQJcjI5LC0yNChyMSkKKwlzdGQJcjI4LC0zMihyMSkKKwlzdGQJcjI3LC00MChyMSkKKworCXNyZGkJcjAscjUsNQorCW10Y3RyCXIwCisJYW5kaS4JcjUscjUsMzEKKworCUxECXJBLDAscjMKKwlMRAlyQiwwLHI0CisKKwlMRAlyQyxvZmY4LHIzCisJTEQJckQsb2ZmOCxyNAorCisJTEQJckUsb2ZmMTYscjMKKwlMRAlyRixvZmYxNixyNAorCisJTEQJckcsb2ZmMjQscjMKKwlMRAlySCxvZmYyNCxyNAorCWNtcGxkCWNyMCxyQSxyQgorCisJYWRkaQlyMyxyMywzMgorCWFkZGkJcjQscjQsMzIKKworCWJkegkuTGZpcnN0MzIKKworCUxECXJBLDAscjMKKwlMRAlyQiwwLHI0CisJY21wbGQJY3IxLHJDLHJECisKKwlMRAlyQyxvZmY4LHIzCisJTEQJckQsb2ZmOCxyNAorCWNtcGxkCWNyNixyRSxyRgorCisJTEQJckUsb2ZmMTYscjMKKwlMRAlyRixvZmYxNixyNAorCWNtcGxkCWNyNyxyRyxySAorCWJuZQljcjAsLkxjbXBBQgorCisJTEQJckcsb2ZmMjQscjMKKwlMRAlySCxvZmYyNCxyNAorCWNtcGxkCWNyMCxyQSxyQgorCWJuZQljcjEsLkxjbXBDRAorCisJYWRkaQlyMyxyMywzMgorCWFkZGkJcjQscjQsMzIKKworCWJkegkuTHNlY29uZDMyCisKKwkuYmFsaWduCTE2CisKKzE6CUxECXJBLDAscjMKKwlMRAlyQiwwLHI0CisJY21wbGQJY3IxLHJDLHJECisJYm5lCWNyNiwuTGNtcEVGCisKKwlMRAlyQyxvZmY4LHIzCisJTEQJckQsb2ZmOCxyNAorCWNtcGxkCWNyNixyRSxyRgorCWJuZQljcjcsLkxjbXBHSAorCisJTEQJckUsb2ZmMTYscjMKKwlMRAlyRixvZmYxNixyNAorCWNtcGxkCWNyNyxyRyxySAorCWJuZQljcjAsLkxjbXBBQgorCisJTEQJckcsb2ZmMjQscjMKKwlMRAlySCxvZmYyNCxyNAorCWNtcGxkCWNyMCxyQSxyQgorCWJuZQljcjEsLkxjbXBDRAorCisJYWRkaQlyMyxyMywzMgorCWFkZGkJcjQscjQsMzIKKworCWJkbnoJMWIKKworLkxzZWNvbmQzMjoKKwljbXBsZAljcjEsckMsckQKKwlibmUJY3I2LC5MY21wRUYKKworCWNtcGxkCWNyNixyRSxyRgorCWJuZQljcjcsLkxjbXBHSAorCisJY21wbGQJY3I3LHJHLHJICisJYm5lCWNyMCwuTGNtcEFCCisKKwlibmUJY3IxLC5MY21wQ0QKKwlibmUJY3I2LC5MY21wRUYKKwlibmUJY3I3LC5MY21wR0gKKworLkx0YWlsOgorCWxkCXIzMSwtOChyMSkKKwlsZAlyMzAsLTE2KHIxKQorCWxkCXIyOSwtMjQocjEpCisJbGQJcjI4LC0zMihyMSkKKwlsZAlyMjcsLTQwKHIxKQorCisJY21wZGkJcjUsMAorCWJlcQkuTHplcm8KKwliCS5Mc2hvcnQKKworLkxmaXJzdDMyOgorCWNtcGxkCWNyMSxyQyxyRAorCWNtcGxkCWNyNixyRSxyRgorCWNtcGxkCWNyNyxyRyxySAorCisJYm5lCWNyMCwuTGNtcEFCCisJYm5lCWNyMSwuTGNtcENECisJYm5lCWNyNiwuTGNtcEVGCisJYm5lCWNyNywuTGNtcEdICisKKwliCS5MdGFpbAorCisuTGNtcEFCOgorCWxpCXIzLDEKKwliZ3QJY3IwLC5Mb3V0CisJbGkJcjMsLTEKKwliCS5Mb3V0CisKKy5MY21wQ0Q6CisJbGkJcjMsMQorCWJndAljcjEsLkxvdXQKKwlsaQlyMywtMQorCWIJLkxvdXQKKworLkxjbXBFRjoKKwlsaQlyMywxCisJYmd0CWNyNiwuTG91dAorCWxpCXIzLC0xCisJYgkuTG91dAorCisuTGNtcEdIOgorCWxpCXIzLDEKKwliZ3QJY3I3LC5Mb3V0CisJbGkJcjMsLTEKKworLkxvdXQ6CisJbGQJcjMxLC04KHIxKQorCWxkCXIzMCwtMTYocjEpCisJbGQJcjI5LC0yNChyMSkKKwlsZAlyMjgsLTMyKHIxKQorCWxkCXIyNywtNDAocjEpCisJYmxyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL3N0cmluZy5TIGIvYXJjaC9wb3dlcnBjL2xpYi9zdHJpbmcuUwppbmRleCAxYjVhMGEwLi5jODBmYjQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL3N0cmluZy5TCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvc3RyaW5nLlMKQEAgLTkzLDYgKzkzLDcgQEAKIAlzdWJmCXIzLHIzLHI0CiAJYmxyCiAKKyNpZmRlZiBDT05GSUdfUFBDMzIKIF9HTE9CQUwobWVtY21wKQogCVBQQ19MQ01QSSAwLHI1LDAKIAliZXEtCTJmCkBAIC0xMDYsNiArMTA3LDcgQEAKIAlibHIKIDI6CWxpCXIzLDAKIAlibHIKKyNlbmRpZgogCiBfR0xPQkFMKG1lbWNocikKIAlQUENfTENNUEkgMCxyNSwwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vY29wcm9fZmF1bHQuYyBiL2FyY2gvcG93ZXJwYy9tbS9jb3Byb19mYXVsdC5jCmluZGV4IDVhMjM2ZjAuLjFiNTMwNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9jb3Byb19mYXVsdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9jb3Byb19mYXVsdC5jCkBAIC03Niw3ICs3Niw3IEBACiAJCWlmICgqZmx0ICYgVk1fRkFVTFRfT09NKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBvdXRfdW5sb2NrOwotCQl9IGVsc2UgaWYgKCpmbHQgJiBWTV9GQVVMVF9TSUdCVVMpIHsKKwkJfSBlbHNlIGlmICgqZmx0ICYgKFZNX0ZBVUxUX1NJR0JVUyB8IFZNX0ZBVUxUX1NJR1NFR1YpKSB7CiAJCQlyZXQgPSAtRUZBVUxUOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jCmluZGV4IGViNzk5MDcuLjYxNTRiMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jCkBAIC00MzcsNiArNDM3LDggQEAKIAkgKi8KIAlmYXVsdCA9IGhhbmRsZV9tbV9mYXVsdChtbSwgdm1hLCBhZGRyZXNzLCBmbGFncyk7CiAJaWYgKHVubGlrZWx5KGZhdWx0ICYgKFZNX0ZBVUxUX1JFVFJZfFZNX0ZBVUxUX0VSUk9SKSkpIHsKKwkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikKKwkJCWdvdG8gYmFkX2FyZWE7CiAJCXJjID0gbW1fZmF1bHRfZXJyb3IocmVncywgYWRkcmVzcywgZmF1bHQpOwogCQlpZiAocmMgPj0gTU1fRkFVTFRfUkVUVVJOKQogCQkJZ290byBiYWlsOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYyBiL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMKaW5kZXggOTRjZDcyOC4uYjQ2OTEyZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jCkBAIC02Nyw4ICs2Nyw2IEBACiAJcGh5c19hZGRyX3QgcGh5czsKIH0gdGxiY2FtX2FkZHJzW05VTV9UTEJDQU1TXTsKIAotZXh0ZXJuIHVuc2lnbmVkIGludCB0bGJjYW1faW5kZXg7Ci0KIHVuc2lnbmVkIGxvbmcgdGxiY2FtX3N6KGludCBpZHgpCiB7CiAJcmV0dXJuIHRsYmNhbV9hZGRyc1tpZHhdLmxpbWl0IC0gdGxiY2FtX2FkZHJzW2lkeF0uc3RhcnQgKyAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCA1ZmY0ZTA3Li5jZjA0NjRmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtNzE0LDYgKzcxNCwxNCBAQAogCXJldHVybiBOVUxMOwogfQogCitzdHJ1Y3QgcGFnZSAqCitmb2xsb3dfaHVnZV9wdWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJcHVkX3QgKnB1ZCwgaW50IHdyaXRlKQoreworCUJVRygpOworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBodWdlcHRlX2FkZHJfZW5kKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBzeikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYyBiL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYwppbmRleCA5Y2JhNmNiLi45ODZhZmJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCkBAIC01MiwxMiArNTIsMTUgQEAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAorI2luY2x1ZGUgIm1tdV9kZWNsLmgiCisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmlyc3RfY29udGV4dCwgbGFzdF9jb250ZXh0Owogc3RhdGljIHVuc2lnbmVkIGludCBuZXh0X2NvbnRleHQsIG5yX2ZyZWVfY29udGV4dHM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyAqY29udGV4dF9tYXA7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyAqc3RhbGVfbWFwW05SX0NQVVNdOwogc3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKipjb250ZXh0X21tOwogc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soY29udGV4dF9sb2NrKTsKK3N0YXRpYyBib29sIG5vX3NlbGVjdGl2ZV90bGJpbDsKIAogI2RlZmluZSBDVFhfTUFQX1NJWkUJXAogCShzaXplb2YodW5zaWduZWQgbG9uZykgKiAobGFzdF9jb250ZXh0IC8gQklUU19QRVJfTE9ORyArIDEpKQpAQCAtMTMzLDYgKzEzNiwzOCBAQAogfQogI2VuZGlmICAvKiBDT05GSUdfU01QICovCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3RlYWxfYWxsX2NvbnRleHRzKHZvaWQpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwl1bnNpZ25lZCBpbnQgaWQ7CisKKwlmb3IgKGlkID0gZmlyc3RfY29udGV4dDsgaWQgPD0gbGFzdF9jb250ZXh0OyBpZCsrKSB7CisJCS8qIFBpY2sgdXAgdGhlIHZpY3RpbSBtbSAqLworCQltbSA9IGNvbnRleHRfbW1baWRdOworCisJCXByX2hhcmRjb250KCIgfCBzdGVhbCAlZCBmcm9tIDB4JXAiLCBpZCwgbW0pOworCisJCS8qIE1hcmsgdGhpcyBtbSBhcyBoYXZpbmcgbm8gY29udGV4dCBhbnltb3JlICovCisJCW1tLT5jb250ZXh0LmlkID0gTU1VX05PX0NPTlRFWFQ7CisJCWlmIChpZCAhPSBmaXJzdF9jb250ZXh0KSB7CisJCQljb250ZXh0X21tW2lkXSA9IE5VTEw7CisJCQlfX2NsZWFyX2JpdChpZCwgY29udGV4dF9tYXApOworI2lmZGVmIERFQlVHX01BUF9DT05TSVNURU5DWQorCQkJbW0tPmNvbnRleHQuYWN0aXZlID0gMDsKKyNlbmRpZgorCQl9CisJCV9fY2xlYXJfYml0KGlkLCBzdGFsZV9tYXBbY3B1XSk7CisJfQorCisJLyogRmx1c2ggdGhlIFRMQiBmb3IgYWxsIGNvbnRleHRzIChub3QgdG8gYmUgdXNlZCBvbiBTTVApICovCisJX3RsYmlsX2FsbCgpOworCisJbnJfZnJlZV9jb250ZXh0cyA9IGxhc3RfY29udGV4dCAtIGZpcnN0X2NvbnRleHQ7CisKKwlyZXR1cm4gZmlyc3RfY29udGV4dDsKK30KKwogLyogTm90ZSB0aGF0IHRoaXMgd2lsbCBhbHNvIGJlIGNhbGxlZCBvbiBTTVAgaWYgYWxsIG90aGVyIENQVXMgYXJlCiAgKiBvZmZsaW5lZCwgd2hpY2ggbWVhbnMgdGhhdCBpdCBtYXkgYmUgY2FsbGVkIGZvciBjcHUgIT0gMC4gRm9yCiAgKiB0aGlzIHRvIHdvcmssIHdlIHNvbWV3aGF0IGFzc3VtZSB0aGF0IENQVXMgdGhhdCBhcmUgb25saW5lZApAQCAtMjQxLDcgKzI3NiwxMCBAQAogCQkJZ290byBzdG9sZW47CiAJCX0KICNlbmRpZiAvKiBDT05GSUdfU01QICovCi0JCWlkID0gc3RlYWxfY29udGV4dF91cChpZCk7CisJCWlmIChub19zZWxlY3RpdmVfdGxiaWwpCisJCQlpZCA9IHN0ZWFsX2FsbF9jb250ZXh0cygpOworCQllbHNlCisJCQlpZCA9IHN0ZWFsX2NvbnRleHRfdXAoaWQpOwogCQlnb3RvIHN0b2xlbjsKIAl9CiAJbnJfZnJlZV9jb250ZXh0cy0tOwpAQCAtNDA3LDEyICs0NDUsMTUgQEAKIAlpZiAobW11X2hhc19mZWF0dXJlKE1NVV9GVFJfVFlQRV84eHgpKSB7CiAJCWZpcnN0X2NvbnRleHQgPSAwOwogCQlsYXN0X2NvbnRleHQgPSAxNTsKKwkJbm9fc2VsZWN0aXZlX3RsYmlsID0gdHJ1ZTsKIAl9IGVsc2UgaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX1RZUEVfNDd4KSkgewogCQlmaXJzdF9jb250ZXh0ID0gMTsKIAkJbGFzdF9jb250ZXh0ID0gNjU1MzU7CisJCW5vX3NlbGVjdGl2ZV90bGJpbCA9IGZhbHNlOwogCX0gZWxzZSB7CiAJCWZpcnN0X2NvbnRleHQgPSAxOwogCQlsYXN0X2NvbnRleHQgPSAyNTU7CisJCW5vX3NlbGVjdGl2ZV90bGJpbCA9IGZhbHNlOwogCX0KIAogI2lmZGVmIERFQlVHX0NMQU1QX0xBU1RfQ09OVEVYVApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKaW5kZXggNTBmYWQzOC4uMDNiMWEzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCkBAIC02Myw3ICs2Myw2IEBACiAjZW5kaWYgLyogSEFWRV9CQVRTICovCiAKICNpZmRlZiBIQVZFX1RMQkNBTQotZXh0ZXJuIHVuc2lnbmVkIGludCB0bGJjYW1faW5kZXg7CiBleHRlcm4gcGh5c19hZGRyX3Qgdl9tYXBwZWRfYnlfdGxiY2FtKHVuc2lnbmVkIGxvbmcgdmEpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcF9tYXBwZWRfYnlfdGxiY2FtKHBoeXNfYWRkcl90IHBhKTsKICNlbHNlIC8qICFIQVZFX1RMQkNBTSAqLwpAQCAtNzMsMTMgKzcyLDI1IEBACiAKICNkZWZpbmUgUEdESVJfT1JERVIJKDMyICsgUEdEX1RfTE9HMiAtIFBHRElSX1NISUZUKQogCisjaWZuZGVmIENPTkZJR19QUENfNEtfUEFHRVMKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGd0YWJsZV9jYWNoZTsKKwordm9pZCBwZ3RhYmxlX2NhY2hlX2luaXQodm9pZCkKK3sKKwlwZ3RhYmxlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoIlBHRElSIGNhY2hlIiwgMSA8PCBQR0RJUl9PUkRFUiwKKwkJCQkJICAxIDw8IFBHRElSX09SREVSLCAwLCBOVUxMKTsKKwlpZiAocGd0YWJsZV9jYWNoZSA9PSBOVUxMKQorCQlwYW5pYygiQ291bGRuJ3QgYWxsb2NhdGUgcGd0YWJsZSBjYWNoZXMiKTsKK30KKyNlbmRpZgorCiBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXBnZF90ICpyZXQ7CiAKIAkvKiBwZ2RpciB0YWtlIHBhZ2Ugb3IgdHdvIHdpdGggNEsgcGFnZXMgYW5kIGEgcGFnZSBmcmFjdGlvbiBvdGhlcndpc2UgKi8KICNpZm5kZWYgQ09ORklHX1BQQ180S19QQUdFUwotCXJldCA9IGt6YWxsb2MoMSA8PCBQR0RJUl9PUkRFUiwgR0ZQX0tFUk5FTCk7CisJcmV0ID0ga21lbV9jYWNoZV9hbGxvYyhwZ3RhYmxlX2NhY2hlLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CiAjZWxzZQogCXJldCA9IChwZ2RfdCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTHxfX0dGUF9aRVJPLAogCQkJUEdESVJfT1JERVIgLSBQQUdFX1NISUZUKTsKQEAgLTkwLDcgKzEwMSw3IEBACiB2b2lkIHBnZF9mcmVlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkKQogewogI2lmbmRlZiBDT05GSUdfUFBDXzRLX1BBR0VTCi0Ja2ZyZWUoKHZvaWQgKilwZ2QpOworCWttZW1fY2FjaGVfZnJlZShwZ3RhYmxlX2NhY2hlLCAodm9pZCAqKXBnZCk7CiAjZWxzZQogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcGdkLCBQR0RJUl9PUkRFUiAtIFBBR0VfU0hJRlQpOwogI2VuZGlmCkBAIC0xNDcsNyArMTU4LDcgQEAKIGlvcmVtYXBfcHJvdChwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJLyogd3JpdGVhYmxlIGltcGxpZXMgZGlydHkgZm9yIGtlcm5lbCBhZGRyZXNzZXMgKi8KLQlpZiAoZmxhZ3MgJiBfUEFHRV9SVykKKwlpZiAoKGZsYWdzICYgKF9QQUdFX1JXIHwgX1BBR0VfUk8pKSAhPSBfUEFHRV9STykKIAkJZmxhZ3MgfD0gX1BBR0VfRElSVFkgfCBfUEFHRV9IV1dSSVRFOwogCiAJLyogd2UgZG9uJ3Qgd2FudCB0byBsZXQgX1BBR0VfVVNFUiBhbmQgX1BBR0VfRVhFQyBsZWFrIG91dCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3NsaWNlLmMgYi9hcmNoL3Bvd2VycGMvbW0vc2xpY2UuYwppbmRleCBkZWQwZWExLi4wZjQzMmE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc2xpY2UuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vc2xpY2UuYwpAQCAtNjQ1LDM1ICs2NDUsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsaWNlX2NvbnZlcnRfbG9jaywgZmxhZ3MpOwogfQogCi12b2lkIHNsaWNlX3NldF9wc2l6ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCQkgICAgIHVuc2lnbmVkIGludCBwc2l6ZSkKLXsKLQl1bnNpZ25lZCBjaGFyICpocHNpemVzOwotCXVuc2lnbmVkIGxvbmcgaSwgZmxhZ3M7Ci0JdTY0ICpscHNpemVzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNsaWNlX2NvbnZlcnRfbG9jaywgZmxhZ3MpOwotCWlmIChhZGRyZXNzIDwgU0xJQ0VfTE9XX1RPUCkgewotCQlpID0gR0VUX0xPV19TTElDRV9JTkRFWChhZGRyZXNzKTsKLQkJbHBzaXplcyA9ICZtbS0+Y29udGV4dC5sb3dfc2xpY2VzX3BzaXplOwotCQkqbHBzaXplcyA9ICgqbHBzaXplcyAmIH4oMHhmdWwgPDwgKGkgKiA0KSkpIHwKLQkJCSgodW5zaWduZWQgbG9uZykgcHNpemUgPDwgKGkgKiA0KSk7Ci0JfSBlbHNlIHsKLQkJaW50IGluZGV4LCBtYXNrX2luZGV4OwotCQlpID0gR0VUX0hJR0hfU0xJQ0VfSU5ERVgoYWRkcmVzcyk7Ci0JCWhwc2l6ZXMgPSBtbS0+Y29udGV4dC5oaWdoX3NsaWNlc19wc2l6ZTsKLQkJbWFza19pbmRleCA9IGkgJiAweDE7Ci0JCWluZGV4ID0gaSA+PiAxOwotCQlocHNpemVzW2luZGV4XSA9IChocHNpemVzW2luZGV4XSAmCi0JCQkJICB+KDB4ZiA8PCAobWFza19pbmRleCAqIDQpKSkgfAotCQkJKCgodW5zaWduZWQgbG9uZylwc2l6ZSkgPDwgKG1hc2tfaW5kZXggKiA0KSk7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xpY2VfY29udmVydF9sb2NrLCBmbGFncyk7Ci0KLQljb3Byb19mbHVzaF9hbGxfc2xicyhtbSk7Ci19Ci0KIHZvaWQgc2xpY2Vfc2V0X3JhbmdlX3BzaXplKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGludCBwc2l6ZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9zdWJwYWdlLXByb3QuYyBiL2FyY2gvcG93ZXJwYy9tbS9zdWJwYWdlLXByb3QuYwppbmRleCA2YzBiMWY1Li5mYTlmYjViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vc3VicGFnZS1wcm90LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3N1YnBhZ2UtcHJvdC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIHN0YXRpYyBpbnQgc3VicGFnZV93YWxrX3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkJICB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspCiB7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLT5wcml2YXRlOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay0+dm1hOwogCXNwbGl0X2h1Z2VfcGFnZV9wbWQodm1hLCBhZGRyLCBwbWQpOwogCXJldHVybiAwOwogfQpAQCAtMTYzLDkgKzE2Myw3IEBACiAJCWlmICh2bWEtPnZtX3N0YXJ0ID49IChhZGRyICsgbGVuKSkKIAkJCWJyZWFrOwogCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX05PSFVHRVBBR0U7Ci0JCXN1YnBhZ2VfcHJvdG9fd2Fsay5wcml2YXRlID0gdm1hOwotCQl3YWxrX3BhZ2VfcmFuZ2Uodm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsCi0JCQkJJnN1YnBhZ2VfcHJvdG9fd2Fsayk7CisJCXdhbGtfcGFnZV92bWEodm1hLCAmc3VicGFnZV9wcm90b193YWxrKTsKIAkJdm1hID0gdm1hLT52bV9uZXh0OwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaC5jCmluZGV4IGYzOGVhNGQuLmNiZDNkMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYwpAQCAtMjg0LDggKzI4NCwxNSBAQAogCXN0cnVjdCBjcHVtYXNrICpjcHVfbWFzazsKIAl1bnNpZ25lZCBpbnQgcGlkOwogCisJLyoKKwkgKiBUaGlzIGZ1bmN0aW9uIGFzIHdlbGwgYXMgX19sb2NhbF9mbHVzaF90bGJfcGFnZSgpIG11c3Qgb25seSBiZSBjYWxsZWQKKwkgKiBmb3IgdXNlciBjb250ZXh0cy4KKwkgKi8KKwlpZiAodW5saWtlbHkoV0FSTl9PTighbW0pKSkKKwkJcmV0dXJuOworCiAJcHJlZW1wdF9kaXNhYmxlKCk7Ci0JcGlkID0gbW0gPyBtbS0+Y29udGV4dC5pZCA6IDA7CisJcGlkID0gbW0tPmNvbnRleHQuaWQ7CiAJaWYgKHVubGlrZWx5KHBpZCA9PSBNTVVfTk9fQ09OVEVYVCkpCiAJCWdvdG8gYmFpbDsKIAljcHVfbWFzayA9IG1tX2NwdW1hc2sobW0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BlcmYvY29yZS1mc2wtZW1iLmMgYi9hcmNoL3Bvd2VycGMvcGVyZi9jb3JlLWZzbC1lbWIuYwppbmRleCA0YWNhZWEwLi41ZDc0N2I0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGVyZi9jb3JlLWZzbC1lbWIuYworKysgYi9hcmNoL3Bvd2VycGMvcGVyZi9jb3JlLWZzbC1lbWIuYwpAQCAtMzMwLDkgKzMzMCwxMSBAQAogCX0KIAlsb2NhbDY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CiAKLQlpZiAoIShmbGFncyAmIFBFUkZfRUZfU1RBUlQpKSB7CisJaWYgKHVubGlrZWx5KCEoZmxhZ3MgJiBQRVJGX0VGX1NUQVJUKSkpIHsKIAkJZXZlbnQtPmh3LnN0YXRlID0gUEVSRl9IRVNfU1RPUFBFRCB8IFBFUkZfSEVTX1VQVE9EQVRFOwogCQl2YWwgPSAwOworCX0gZWxzZSB7CisJCWV2ZW50LT5ody5zdGF0ZSAmPSB+KFBFUkZfSEVTX1NUT1BQRUQgfCBQRVJGX0hFU19VUFRPREFURSk7CiAJfQogCiAJd3JpdGVfcG1jKGksIHZhbCk7CkBAIC0zODksNiArMzkxLDcgQEAKIHN0YXRpYyB2b2lkIGZzbF9lbWJfcG11X3N0YXJ0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGVmX2ZsYWdzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAJczY0IGxlZnQ7CiAKIAlpZiAoZXZlbnQtPmh3LmlkeCA8IDAgfHwgIWV2ZW50LT5ody5zYW1wbGVfcGVyaW9kKQpAQCAtNDA1LDcgKzQwOCwxMCBAQAogCiAJZXZlbnQtPmh3LnN0YXRlID0gMDsKIAlsZWZ0ID0gbG9jYWw2NF9yZWFkKCZldmVudC0+aHcucGVyaW9kX2xlZnQpOwotCXdyaXRlX3BtYyhldmVudC0+aHcuaWR4LCBsZWZ0KTsKKwl2YWwgPSAwOworCWlmIChsZWZ0IDwgMHg4MDAwMDAwMEwpCisJCXZhbCA9IDB4ODAwMDAwMDBMIC0gbGVmdDsKKwl3cml0ZV9wbWMoZXZlbnQtPmh3LmlkeCwgdmFsKTsKIAogCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKIAlwZXJmX3BtdV9lbmFibGUoZXZlbnQtPnBtdSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LWNhdGFsb2cuaCBiL2FyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDctY2F0YWxvZy5oCmluZGV4IDIxYjE5ZGQuLjY5ZTJlMWZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LWNhdGFsb2cuaAorKysgYi9hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LWNhdGFsb2cuaApAQCAtMzAsNCArMzAsMjkgQEAKIAlfX3U4IHJlc2VydmVkNlsyXTsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCBodl8yNHg3X2V2ZW50X2RhdGEgeworCV9fYmUxNiBsZW5ndGg7IC8qIGluIGJ5dGVzLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYgKi8KKwlfX3U4IHJlc2VydmVkMVsyXTsKKwlfX3U4IGRvbWFpbjsgLyogQ2hpcCA9IDEsIENvcmUgPSAyICovCisJX191OCByZXNlcnZlZDJbMV07CisJX19iZTE2IGV2ZW50X2dyb3VwX3JlY29yZF9vZmZzOyAvKiBpbiBieXRlcywgbXVzdCBiZSA4IGJ5dGUgYWxpZ25lZCAqLworCV9fYmUxNiBldmVudF9ncm91cF9yZWNvcmRfbGVuOyAvKiBpbiBieXRlcyAqLworCisJLyogaW4gYnl0ZXMsIG9mZnNldCBmcm9tIGV2ZW50X2dyb3VwX3JlY29yZCAqLworCV9fYmUxNiBldmVudF9jb3VudGVyX29mZnM7CisKKwkvKiB2ZXJpZmllZF9zdGF0ZSwgdW52ZXJpZmllZF9zdGF0ZSwgY2F2ZWF0X3N0YXRlLCBicm9rZW5fc3RhdGUsIC4uLiAqLworCV9fYmUzMiBmbGFnczsKKworCV9fYmUxNiBwcmltYXJ5X2dyb3VwX2l4OworCV9fYmUxNiBncm91cF9jb3VudDsKKwlfX2JlMTYgZXZlbnRfbmFtZV9sZW47CisJX191OCByZW1haW5kZXJbXTsKKwkvKiBfX3U4IGV2ZW50X25hbWVbZXZlbnRfbmFtZV9sZW4gLSAyXTsgKi8KKwkvKiBfX2JlMTYgZXZlbnRfZGVzY3JpcHRpb25fbGVuOyAqLworCS8qIF9fdTggZXZlbnRfZGVzY1tldmVudF9kZXNjcmlwdGlvbl9sZW4gLSAyXTsgKi8KKwkvKiBfX2JlMTYgZGV0YWlsZWRfZGVzY19sZW47ICovCisJLyogX191OCBkZXRhaWxlZF9kZXNjW2RldGFpbGVkX2Rlc2NfbGVuIC0gMl07ICovCit9IF9fcGFja2VkOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDctZG9tYWlucy5oIGIvYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny1kb21haW5zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljMWVmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDctZG9tYWlucy5oCkBAIC0wLDAgKzEsMjggQEAKKworLyoKKyAqIERPTUFJTihuYW1lLCBudW0sIGluZGV4X2tpbmQsIGlzX3BoeXNpY2FsKQorICoKKyAqIEBuYW1lOglBbiBhbGwgY2FwcyB0b2tlbiwgc3VpdGFibGUgZm9yIHVzZSBpbiBnZW5lcmF0aW5nIGFuIGVudW0KKyAqCQltZW1iZXIgYW5kIGFwcGVuZGluZyB0byBhbiBldmVudCBuYW1lIGluIHN5c2ZzLgorICoKKyAqIEBudW06CVRoZSBudW1iZXIgY29ycmVzcG9uZGluZyB0byB0aGUgZG9tYWluIGFzIGdpdmVuIGluCisgKgkJZG9jdW1lbnRhdGlvbi4gV2UgYXNzdW1lIHRoZSBjYXRhbG9nIGRvbWFpbiBhbmQgdGhlIGhjYWxsCisgKgkJZG9tYWluIGhhdmUgdGhlIHNhbWUgbnVtYmVyaW5nIChzbyBmYXIgdGhleSBkbyksIGJ1dCB0aGlzCisgKgkJbWF5IG5lZWQgdG8gYmUgY2hhbmdlZCBpbiB0aGUgZnV0dXJlLgorICoKKyAqIEBpbmRleF9raW5kOiBBIHN0cmluZ2lmaWFibGUgdG9rZW4gZGVzY3JpYmluZyB0aGUgbWVhbmluZyBvZiB0aGUgaW5kZXgKKyAqCQl3aXRoaW4gdGhlIGdpdmVuIGRvbWFpbi4gTXVzdCBmaXQgdGhlIHBhcnNpbmcgcnVsZXMgb2YgdGhlCisgKgkJcGVyZiBzeXNmcyBhcGkuCisgKgorICogQGlzX3BoeXNpY2FsOiBUcnVlIGlmIHRoZSBkb21haW4gaXMgcGh5c2ljYWwsIGZhbHNlIG90aGVyd2lzZSAoaWYgdmlydHVhbCkuCisgKgorICogTm90ZTogVGhlIHRlcm1zIFBIWVNfQ0hJUCwgUEhZU19DT1JFLCBWQ1BVIGNvcnJlc3BvbmQgdG8gcGh5c2ljYWwgY2hpcCwKKyAqCSBwaHlzaWNhbCBjb3JlIGFuZCB2aXJ0dWFsIHByb2Nlc3NvciBpbiAyNHg3IENvdW50ZXJzIHNwZWNpZmljYXRpb25zLgorICovCisKK0RPTUFJTihQSFlTX0NISVAsIDB4MDEsIGNoaXAsIHRydWUpCitET01BSU4oUEhZU19DT1JFLCAweDAyLCBjb3JlLCB0cnVlKQorRE9NQUlOKFZDUFVfSE9NRV9DT1JFLCAweDAzLCB2Y3B1LCBmYWxzZSkKK0RPTUFJTihWQ1BVX0hPTUVfQ0hJUCwgMHgwNCwgdmNwdSwgZmFsc2UpCitET01BSU4oVkNQVV9IT01FX05PREUsIDB4MDUsIHZjcHUsIGZhbHNlKQorRE9NQUlOKFZDUFVfUkVNT1RFX05PREUsIDB4MDYsIHZjcHUsIGZhbHNlKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jIGIvYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jCmluZGV4IGYxNjJkMGIuLjk0NDVhODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYworKysgYi9hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMKQEAgLTEzLDE2ICsxMyw2NiBAQAogI2RlZmluZSBwcl9mbXQoZm10KSAiaHYtMjR4NzogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2h2Y2FsbC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CiAKICNpbmNsdWRlICJodi0yNHg3LmgiCiAjaW5jbHVkZSAiaHYtMjR4Ny1jYXRhbG9nLmgiCiAjaW5jbHVkZSAiaHYtY29tbW9uLmgiCiAKK3N0YXRpYyBjb25zdCBjaGFyICpldmVudF9kb21haW5fc3VmZml4KHVuc2lnbmVkIGRvbWFpbikKK3sKKwlzd2l0Y2ggKGRvbWFpbikgeworI2RlZmluZSBET01BSU4obiwgdiwgeCwgYykJCVwKKwljYXNlIEhWX1BFUkZfRE9NQUlOXyMjbjoJXAorCQlyZXR1cm4gIl9fIiAjbjsKKyNpbmNsdWRlICJodi0yNHg3LWRvbWFpbnMuaCIKKyN1bmRlZiBET01BSU4KKwlkZWZhdWx0OgorCQlXQVJOKDEsICJ1bmtub3duIGRvbWFpbiAlZFxuIiwgZG9tYWluKTsKKwkJcmV0dXJuICJfX1VOS05PV05fRE9NQUlOX1NVRkZJWCI7CisJfQorfQorCitzdGF0aWMgYm9vbCBkb21haW5faXNfdmFsaWQodW5zaWduZWQgZG9tYWluKQoreworCXN3aXRjaCAoZG9tYWluKSB7CisjZGVmaW5lIERPTUFJTihuLCB2LCB4LCBjKQkJXAorCWNhc2UgSFZfUEVSRl9ET01BSU5fIyNuOglcCisJCS8qIGZhbGwgdGhyb3VnaCAqLworI2luY2x1ZGUgImh2LTI0eDctZG9tYWlucy5oIgorI3VuZGVmIERPTUFJTgorCQlyZXR1cm4gdHJ1ZTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitzdGF0aWMgYm9vbCBpc19waHlzaWNhbF9kb21haW4odW5zaWduZWQgZG9tYWluKQoreworCXN3aXRjaCAoZG9tYWluKSB7CisjZGVmaW5lIERPTUFJTihuLCB2LCB4LCBjKQkJXAorCWNhc2UgSFZfUEVSRl9ET01BSU5fIyNuOglcCisJCXJldHVybiBjOworI2luY2x1ZGUgImh2LTI0eDctZG9tYWlucy5oIgorI3VuZGVmIERPTUFJTgorCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBib29sIGNhdGFsb2dfZW50cnlfZG9tYWluX2lzX3ZhbGlkKHVuc2lnbmVkIGRvbWFpbikKK3sKKwlyZXR1cm4gaXNfcGh5c2ljYWxfZG9tYWluKGRvbWFpbik7Cit9CisKIC8qCiAgKiBUT0RPOiBNZXJnaW5nIGV2ZW50czoKICAqIC0gVGhpbmsgb2YgdGhlIGhjYWxsIGFzIGFuIGludGVyZmFjZSB0byBhIDRkIGFycmF5IG9mIGNvdW50ZXJzOgpAQCAtNDQsMTMgKzk0LDE0IEBACiAKIC8qCiAgKiBFeGFtcGxlIHVzYWdlOgotICogIHBlcmYgc3RhdCAtZSAnaHZfMjR4Ny9kb21haW49MixvZmZzZXQ9OCxzdGFydGluZ19pbmRleD0wLGxwYXI9MHhmZmZmZmZmZi8nCisgKiAgcGVyZiBzdGF0IC1lICdodl8yNHg3L2RvbWFpbj0yLG9mZnNldD04LHZjcHU9MCxscGFyPTB4ZmZmZmZmZmYvJwogICovCiAKIC8qIHUzIDAtNiwgb25lIG9mIEhWXzI0WDdfUEVSRl9ET01BSU4gKi8KIEVWRU5UX0RFRklORV9SQU5HRV9GT1JNQVQoZG9tYWluLCBjb25maWcsIDAsIDMpOwogLyogdTE2ICovCi1FVkVOVF9ERUZJTkVfUkFOR0VfRk9STUFUKHN0YXJ0aW5nX2luZGV4LCBjb25maWcsIDE2LCAzMSk7CitFVkVOVF9ERUZJTkVfUkFOR0VfRk9STUFUKGNvcmUsIGNvbmZpZywgMTYsIDMxKTsKK0VWRU5UX0RFRklORV9SQU5HRV9GT1JNQVQodmNwdSwgY29uZmlnLCAxNiwgMzEpOwogLyogdTMyLCBzZWUgImRhdGFfb2Zmc2V0IiAqLwogRVZFTlRfREVGSU5FX1JBTkdFX0ZPUk1BVChvZmZzZXQsIGNvbmZpZywgMzIsIDYzKTsKIC8qIHUxNiAqLwpAQCAtNjMsNyArMTE0LDggQEAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpmb3JtYXRfYXR0cnNbXSA9IHsKIAkmZm9ybWF0X2F0dHJfZG9tYWluLmF0dHIsCiAJJmZvcm1hdF9hdHRyX29mZnNldC5hdHRyLAotCSZmb3JtYXRfYXR0cl9zdGFydGluZ19pbmRleC5hdHRyLAorCSZmb3JtYXRfYXR0cl9jb3JlLmF0dHIsCisJJmZvcm1hdF9hdHRyX3ZjcHUuYXR0ciwKIAkmZm9ybWF0X2F0dHJfbHBhci5hdHRyLAogCU5VTEwsCiB9OwpAQCAtNzMsOCArMTI1LDExNSBAQAogCS5hdHRycyA9IGZvcm1hdF9hdHRycywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGV2ZW50X2dyb3VwID0geworCS5uYW1lID0gImV2ZW50cyIsCisJLyogLmF0dHJzIGlzIHNldCBpbiBpbml0ICovCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBldmVudF9kZXNjX2dyb3VwID0geworCS5uYW1lID0gImV2ZW50X2Rlc2NzIiwKKwkvKiAuYXR0cnMgaXMgc2V0IGluIGluaXQgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGV2ZW50X2xvbmdfZGVzY19ncm91cCA9IHsKKwkubmFtZSA9ICJldmVudF9sb25nX2Rlc2NzIiwKKwkvKiAuYXR0cnMgaXMgc2V0IGluIGluaXQgKi8KK307CisKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqaHZfcGFnZV9jYWNoZTsKIAorc3RhdGljIGNoYXIgKmV2ZW50X25hbWUoc3RydWN0IGh2XzI0eDdfZXZlbnRfZGF0YSAqZXYsIGludCAqbGVuKQoreworCSpsZW4gPSBiZTE2X3RvX2NwdShldi0+ZXZlbnRfbmFtZV9sZW4pIC0gMjsKKwlyZXR1cm4gKGNoYXIgKilldi0+cmVtYWluZGVyOworfQorCitzdGF0aWMgY2hhciAqZXZlbnRfZGVzYyhzdHJ1Y3QgaHZfMjR4N19ldmVudF9kYXRhICpldiwgaW50ICpsZW4pCit7CisJdW5zaWduZWQgbmwgPSBiZTE2X3RvX2NwdShldi0+ZXZlbnRfbmFtZV9sZW4pOworCV9fYmUxNiAqZGVzY19sZW4gPSAoX19iZTE2ICopKGV2LT5yZW1haW5kZXIgKyBubCAtIDIpOworCSpsZW4gPSBiZTE2X3RvX2NwdSgqZGVzY19sZW4pIC0gMjsKKwlyZXR1cm4gKGNoYXIgKilldi0+cmVtYWluZGVyICsgbmw7Cit9CisKK3N0YXRpYyBjaGFyICpldmVudF9sb25nX2Rlc2Moc3RydWN0IGh2XzI0eDdfZXZlbnRfZGF0YSAqZXYsIGludCAqbGVuKQoreworCXVuc2lnbmVkIG5sID0gYmUxNl90b19jcHUoZXYtPmV2ZW50X25hbWVfbGVuKTsKKwlfX2JlMTYgKmRlc2NfbGVuXyA9IChfX2JlMTYgKikoZXYtPnJlbWFpbmRlciArIG5sIC0gMik7CisJdW5zaWduZWQgZGVzY19sZW4gPSBiZTE2X3RvX2NwdSgqZGVzY19sZW5fKTsKKwlfX2JlMTYgKmxvbmdfZGVzY19sZW4gPSAoX19iZTE2ICopKGV2LT5yZW1haW5kZXIgKyBubCArIGRlc2NfbGVuIC0gMik7CisJKmxlbiA9IGJlMTZfdG9fY3B1KCpsb25nX2Rlc2NfbGVuKSAtIDI7CisJcmV0dXJuIChjaGFyICopZXYtPnJlbWFpbmRlciArIG5sICsgZGVzY19sZW47Cit9CisKK3N0YXRpYyBib29sIGV2ZW50X2ZpeGVkX3BvcnRpb25faXNfd2l0aGluKHN0cnVjdCBodl8yNHg3X2V2ZW50X2RhdGEgKmV2LAorCQkJCQkgIHZvaWQgKmVuZCkKK3sKKwl2b2lkICpzdGFydCA9IGV2OworCisJcmV0dXJuIChzdGFydCArIG9mZnNldG9mKHN0cnVjdCBodl8yNHg3X2V2ZW50X2RhdGEsIHJlbWFpbmRlcikpIDwgZW5kOworfQorCisvKgorICogVGhpbmdzIHdlIGRvbid0IGNoZWNrOgorICogIC0gcGFkZGluZyBmb3IgZGVzYywgbmFtZSwgYW5kIGxvbmcvZGV0YWlsZWQgZGVzYyBpcyByZXF1aXJlZCB0byBiZSAnXDAnCisgKiAgICBieXRlcy4KKyAqCisgKiAgUmV0dXJuIE5VTEwgaWYgd2UgcGFzcyBlbmQsCisgKiAgT3RoZXJ3aXNlIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgYnl0ZSBqdXN0IGZvbGxvd2luZyB0aGUgZXZlbnQuCisgKi8KK3N0YXRpYyB2b2lkICpldmVudF9lbmQoc3RydWN0IGh2XzI0eDdfZXZlbnRfZGF0YSAqZXYsIHZvaWQgKmVuZCkKK3sKKwl2b2lkICpzdGFydCA9IGV2OworCV9fYmUxNiAqZGxfLCAqbGRsXzsKKwl1bnNpZ25lZCBkbCwgbGRsOworCXVuc2lnbmVkIG5sID0gYmUxNl90b19jcHUoZXYtPmV2ZW50X25hbWVfbGVuKTsKKworCWlmIChubCA8IDIpIHsKKwkJcHJfZGVidWcoIiVzOiBuYW1lIGxlbmd0aCB0b28gc2hvcnQ6ICVkIiwgX19mdW5jX18sIG5sKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKHN0YXJ0ICsgbmwgPiBlbmQpIHsKKwkJcHJfZGVidWcoIiVzOiBzdGFydD0lcCArIG5sPSV1ID4gZW5kPSVwIiwKKwkJCQlfX2Z1bmNfXywgc3RhcnQsIG5sLCBlbmQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlkbF8gPSAoX19iZTE2ICopKGV2LT5yZW1haW5kZXIgKyBubCAtIDIpOworCWlmICghSVNfQUxJR05FRCgodWludHB0cl90KWRsXywgMikpCisJCXByX3dhcm4oImRlc2MgbGVuIG5vdCBhbGlnbmVkICVwIiwgZGxfKTsKKwlkbCA9IGJlMTZfdG9fY3B1KCpkbF8pOworCWlmIChkbCA8IDIpIHsKKwkJcHJfZGVidWcoIiVzOiBkZXNjIGxlbiB0b28gc2hvcnQ6ICVkIiwgX19mdW5jX18sIGRsKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKHN0YXJ0ICsgbmwgKyBkbCA+IGVuZCkgeworCQlwcl9kZWJ1ZygiJXM6IChzdGFydD0lcCArIG5sPSV1ICsgZGw9JXUpPSVwID4gZW5kPSVwIiwKKwkJCQlfX2Z1bmNfXywgc3RhcnQsIG5sLCBkbCwgc3RhcnQgKyBubCArIGRsLCBlbmQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlsZGxfID0gKF9fYmUxNiAqKShldi0+cmVtYWluZGVyICsgbmwgKyBkbCAtIDIpOworCWlmICghSVNfQUxJR05FRCgodWludHB0cl90KWxkbF8sIDIpKQorCQlwcl93YXJuKCJsb25nIGRlc2MgbGVuIG5vdCBhbGlnbmVkICVwIiwgbGRsXyk7CisJbGRsID0gYmUxNl90b19jcHUoKmxkbF8pOworCWlmIChsZGwgPCAyKSB7CisJCXByX2RlYnVnKCIlczogbG9uZyBkZXNjIGxlbiB0b28gc2hvcnQgKGxkbD0ldSkiLAorCQkJCV9fZnVuY19fLCBsZGwpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoc3RhcnQgKyBubCArIGRsICsgbGRsID4gZW5kKSB7CisJCXByX2RlYnVnKCIlczogc3RhcnQ9JXAgKyBubD0ldSArIGRsPSV1ICsgbGRsPSV1ID4gZW5kPSVwIiwKKwkJCQlfX2Z1bmNfXywgc3RhcnQsIG5sLCBkbCwgbGRsLCBlbmQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gc3RhcnQgKyBubCArIGRsICsgbGRsOworfQorCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBoX2dldF8yNHg3X2NhdGFsb2dfcGFnZV8odW5zaWduZWQgbG9uZyBwaHlzXzQwOTYsCiAJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdmVyc2lvbiwKIAkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbmRleCkKQEAgLTk3LDYgKzI1Niw2MDkgQEAKIAkJCQkJdmVyc2lvbiwgaW5kZXgpOwogfQogCitzdGF0aWMgdW5zaWduZWQgY29yZV9kb21haW5zW10gPSB7CisJSFZfUEVSRl9ET01BSU5fUEhZU19DT1JFLAorCUhWX1BFUkZfRE9NQUlOX1ZDUFVfSE9NRV9DT1JFLAorCUhWX1BFUkZfRE9NQUlOX1ZDUFVfSE9NRV9DSElQLAorCUhWX1BFUkZfRE9NQUlOX1ZDUFVfSE9NRV9OT0RFLAorCUhWX1BFUkZfRE9NQUlOX1ZDUFVfUkVNT1RFX05PREUsCit9OworLyogY2hpcCBldmVudCBkYXRhIGFsd2F5cyB5ZWlsZHMgYSBzaW5nbGUgZXZlbnQsIGNvcmUgeWVpbGRzIG11bHRpcGxlICovCisjZGVmaW5lIE1BWF9FVkVOVFNfUEVSX0VWRU5UX0RBVEEgQVJSQVlfU0laRShjb3JlX2RvbWFpbnMpCisKK3N0YXRpYyBjaGFyICpldmVudF9mbXQoc3RydWN0IGh2XzI0eDdfZXZlbnRfZGF0YSAqZXZlbnQsIHVuc2lnbmVkIGRvbWFpbikKK3sKKwljb25zdCBjaGFyICpzaW5kZXg7CisJY29uc3QgY2hhciAqbHBhcjsKKworCWlmIChpc19waHlzaWNhbF9kb21haW4oZG9tYWluKSkgeworCQlscGFyID0gIjB4MCI7CisJCXNpbmRleCA9ICJjb3JlIjsKKwl9IGVsc2UgeworCQlscGFyID0gIj8iOworCQlzaW5kZXggPSAidmNwdSI7CisJfQorCisJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLAorCQkJImRvbWFpbj0weCV4LG9mZnNldD0weCV4LCVzPT8sbHBhcj0lcyIsCisJCQlkb21haW4sCisJCQliZTE2X3RvX2NwdShldmVudC0+ZXZlbnRfY291bnRlcl9vZmZzKSArCisJCQkJYmUxNl90b19jcHUoZXZlbnQtPmV2ZW50X2dyb3VwX3JlY29yZF9vZmZzKSwKKwkJCXNpbmRleCwKKwkJCWxwYXIpOworfQorCisvKiBBdm9pZCB0cnVzdGluZyBmdyB0byBOVUwgdGVybWluYXRlIHN0cmluZ3MgKi8KK3N0YXRpYyBjaGFyICptZW1kdXBfdG9fc3RyKGNoYXIgKm1heWJlX3N0ciwgaW50IG1heF9sZW4sIGdmcF90IGdmcCkKK3sKKwlyZXR1cm4ga2FzcHJpbnRmKGdmcCwgIiUuKnMiLCBtYXhfbGVuLCBtYXliZV9zdHIpOworfQorCitzdGF0aWMgc3NpemVfdCBkZXZpY2Vfc2hvd19zdHJpbmcoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSAqZDsKKworCWQgPSBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IGRldl9leHRfYXR0cmlidXRlLCBhdHRyKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgKGNoYXIgKilkLT52YXIpOworfQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGV2aWNlX3N0cl9hdHRyX2NyZWF0ZV8oY2hhciAqbmFtZSwgY2hhciAqc3RyKQoreworCXN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSAqYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKCphdHRyKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWF0dHIpCisJCXJldHVybiBOVUxMOworCisJYXR0ci0+dmFyID0gc3RyOworCWF0dHItPmF0dHIuYXR0ci5uYW1lID0gbmFtZTsKKwlhdHRyLT5hdHRyLmF0dHIubW9kZSA9IDA0NDQ7CisJYXR0ci0+YXR0ci5zaG93ID0gZGV2aWNlX3Nob3dfc3RyaW5nOworCXJldHVybiAmYXR0ci0+YXR0ci5hdHRyOworfQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGV2aWNlX3N0cl9hdHRyX2NyZWF0ZShjaGFyICpuYW1lLCBpbnQgbmFtZV9tYXgsCisJCQkJCQlpbnQgbmFtZV9ub25jZSwKKwkJCQkJCWNoYXIgKnN0ciwgc2l6ZV90IHN0cl9tYXgpCit7CisJY2hhciAqbjsKKwljaGFyICpzID0gbWVtZHVwX3RvX3N0cihzdHIsIHN0cl9tYXgsIEdGUF9LRVJORUwpOworCXN0cnVjdCBhdHRyaWJ1dGUgKmE7CisKKwlpZiAoIXMpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFuYW1lX25vbmNlKQorCQluID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlLipzIiwgbmFtZV9tYXgsIG5hbWUpOworCWVsc2UKKwkJbiA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJS4qc19fJWQiLCBuYW1lX21heCwgbmFtZSwKKwkJCQkJbmFtZV9ub25jZSk7CisJaWYgKCFuKQorCQlnb3RvIG91dF9zOworCisJYSA9IGRldmljZV9zdHJfYXR0cl9jcmVhdGVfKG4sIHMpOworCWlmICghYSkKKwkJZ290byBvdXRfbjsKKworCXJldHVybiBhOworb3V0X246CisJa2ZyZWUobik7CitvdXRfczoKKwlrZnJlZShzKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZGV2aWNlX3N0cl9hdHRyX2Rlc3Ryb3koc3RydWN0IGF0dHJpYnV0ZSAqYXR0cikKK3sKKwlzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUgKmQ7CisKKwlkID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSwgYXR0ci5hdHRyKTsKKwlrZnJlZShkLT52YXIpOworCWtmcmVlKGQtPmF0dHIuYXR0ci5uYW1lKTsKKwlrZnJlZShkKTsKK30KKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmV2ZW50X3RvX2F0dHIodW5zaWduZWQgaXgsCisJCQkJICAgICAgIHN0cnVjdCBodl8yNHg3X2V2ZW50X2RhdGEgKmV2ZW50LAorCQkJCSAgICAgICB1bnNpZ25lZCBkb21haW4sCisJCQkJICAgICAgIGludCBub25jZSkKK3sKKwlpbnQgZXZlbnRfbmFtZV9sZW47CisJY2hhciAqZXZfbmFtZSwgKmFfZXZfbmFtZSwgKnZhbDsKKwljb25zdCBjaGFyICpldl9zdWZmaXg7CisJc3RydWN0IGF0dHJpYnV0ZSAqYXR0cjsKKworCWlmICghZG9tYWluX2lzX3ZhbGlkKGRvbWFpbikpIHsKKwkJcHJfd2FybigiY2F0YWxvZyBldmVudCAldSBoYXMgaW52YWxpZCBkb21haW4gJXVcbiIsCisJCQkJaXgsIGRvbWFpbik7CisJCXJldHVybiBOVUxMOworCX0KKworCXZhbCA9IGV2ZW50X2ZtdChldmVudCwgZG9tYWluKTsKKwlpZiAoIXZhbCkKKwkJcmV0dXJuIE5VTEw7CisKKwlldl9zdWZmaXggPSBldmVudF9kb21haW5fc3VmZml4KGRvbWFpbik7CisJZXZfbmFtZSA9IGV2ZW50X25hbWUoZXZlbnQsICZldmVudF9uYW1lX2xlbik7CisJaWYgKCFub25jZSkKKwkJYV9ldl9uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlLipzJXMiLAorCQkJCShpbnQpZXZlbnRfbmFtZV9sZW4sIGV2X25hbWUsIGV2X3N1ZmZpeCk7CisJZWxzZQorCQlhX2V2X25hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiUuKnMlc19fJWQiLAorCQkJCShpbnQpZXZlbnRfbmFtZV9sZW4sIGV2X25hbWUsIGV2X3N1ZmZpeCwgbm9uY2UpOworCisKKwlpZiAoIWFfZXZfbmFtZSkKKwkJZ290byBvdXRfdmFsOworCisJYXR0ciA9IGRldmljZV9zdHJfYXR0cl9jcmVhdGVfKGFfZXZfbmFtZSwgdmFsKTsKKwlpZiAoIWF0dHIpCisJCWdvdG8gb3V0X25hbWU7CisKKwlyZXR1cm4gYXR0cjsKK291dF9uYW1lOgorCWtmcmVlKGFfZXZfbmFtZSk7CitvdXRfdmFsOgorCWtmcmVlKHZhbCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpldmVudF90b19kZXNjX2F0dHIoc3RydWN0IGh2XzI0eDdfZXZlbnRfZGF0YSAqZXZlbnQsCisJCQkJaW50IG5vbmNlKQoreworCWludCBubCwgZGw7CisJY2hhciAqbmFtZSA9IGV2ZW50X25hbWUoZXZlbnQsICZubCk7CisJY2hhciAqZGVzYyA9IGV2ZW50X2Rlc2MoZXZlbnQsICZkbCk7CisKKwkvKiBJZiB0aGVyZSBpc24ndCBhIGRlc2NyaXB0aW9uLCBkb24ndCBjcmVhdGUgdGhlIHN5c2ZzIGZpbGUgKi8KKwlpZiAoIWRsKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBkZXZpY2Vfc3RyX2F0dHJfY3JlYXRlKG5hbWUsIG5sLCBub25jZSwgZGVzYywgZGwpOworfQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqCitldmVudF90b19sb25nX2Rlc2NfYXR0cihzdHJ1Y3QgaHZfMjR4N19ldmVudF9kYXRhICpldmVudCwgaW50IG5vbmNlKQoreworCWludCBubCwgZGw7CisJY2hhciAqbmFtZSA9IGV2ZW50X25hbWUoZXZlbnQsICZubCk7CisJY2hhciAqZGVzYyA9IGV2ZW50X2xvbmdfZGVzYyhldmVudCwgJmRsKTsKKworCS8qIElmIHRoZXJlIGlzbid0IGEgZGVzY3JpcHRpb24sIGRvbid0IGNyZWF0ZSB0aGUgc3lzZnMgZmlsZSAqLworCWlmICghZGwpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGRldmljZV9zdHJfYXR0cl9jcmVhdGUobmFtZSwgbmwsIG5vbmNlLCBkZXNjLCBkbCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGV2ZW50X2RhdGFfdG9fYXR0cnModW5zaWduZWQgaXgsIHN0cnVjdCBhdHRyaWJ1dGUgKiphdHRycywKKwkJc3RydWN0IGh2XzI0eDdfZXZlbnRfZGF0YSAqZXZlbnQsIGludCBub25jZSkKK3sKKwl1bnNpZ25lZCBpOworCisJc3dpdGNoIChldmVudC0+ZG9tYWluKSB7CisJY2FzZSBIVl9QRVJGX0RPTUFJTl9QSFlTX0NISVA6CisJCSphdHRycyA9IGV2ZW50X3RvX2F0dHIoaXgsIGV2ZW50LCBldmVudC0+ZG9tYWluLCBub25jZSk7CisJCXJldHVybiAxOworCWNhc2UgSFZfUEVSRl9ET01BSU5fUEhZU19DT1JFOgorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb3JlX2RvbWFpbnMpOyBpKyspIHsKKwkJCWF0dHJzW2ldID0gZXZlbnRfdG9fYXR0cihpeCwgZXZlbnQsIGNvcmVfZG9tYWluc1tpXSwKKwkJCQkJCW5vbmNlKTsKKwkJCWlmICghYXR0cnNbaV0pIHsKKwkJCQlwcl93YXJuKCJjYXRhbG9nIGV2ZW50ICV1OiBpbmRpdmlkdWFsIGF0dHIgJXUgIgorCQkJCQkiY3JlYXRpb24gZmFpbHVyZVxuIiwgaXgsIGkpOworCQkJCWZvciAoOyBpOyBpLS0pCisJCQkJCWRldmljZV9zdHJfYXR0cl9kZXN0cm95KGF0dHJzW2kgLSAxXSk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBpOworCWRlZmF1bHQ6CisJCXByX3dhcm4oImNhdGFsb2cgZXZlbnQgJXU6IGRvbWFpbiAldSBpcyBub3QgYWxsb3dlZCBpbiB0aGUgIgorCQkJCSJjYXRhbG9nXG4iLCBpeCwgZXZlbnQtPmRvbWFpbik7CisJCXJldHVybiAtMTsKKwl9Cit9CisKK3N0YXRpYyBzaXplX3QgZXZlbnRfdG9fYXR0cl9jdChzdHJ1Y3QgaHZfMjR4N19ldmVudF9kYXRhICpldmVudCkKK3sKKwlzd2l0Y2ggKGV2ZW50LT5kb21haW4pIHsKKwljYXNlIEhWX1BFUkZfRE9NQUlOX1BIWVNfQ0hJUDoKKwkJcmV0dXJuIDE7CisJY2FzZSBIVl9QRVJGX0RPTUFJTl9QSFlTX0NPUkU6CisJCXJldHVybiBBUlJBWV9TSVpFKGNvcmVfZG9tYWlucyk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2bWFsbG9jX3RvX3BoeXModm9pZCAqdikKK3sKKwlzdHJ1Y3QgcGFnZSAqcCA9IHZtYWxsb2NfdG9fcGFnZSh2KTsKKworCUJVR19PTighcCk7CisJcmV0dXJuIHBhZ2VfdG9fcGh5cyhwKSArIG9mZnNldF9pbl9wYWdlKHYpOworfQorCisvKiAqLworc3RydWN0IGV2ZW50X3VuaXEgeworCXN0cnVjdCByYl9ub2RlIG5vZGU7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgbmw7CisJdW5zaWduZWQgY3Q7CisJdW5zaWduZWQgZG9tYWluOworfTsKKworc3RhdGljIGludCBtZW1vcmQoY29uc3Qgdm9pZCAqZDEsIHNpemVfdCBzMSwgY29uc3Qgdm9pZCAqZDIsIHNpemVfdCBzMikKK3sKKwlpZiAoczEgPCBzMikKKwkJcmV0dXJuIDE7CisJaWYgKHMyID4gczEpCisJCXJldHVybiAtMTsKKworCXJldHVybiBtZW1jbXAoZDEsIGQyLCBzMSk7Cit9CisKK3N0YXRpYyBpbnQgZXZfdW5pcV9vcmQoY29uc3Qgdm9pZCAqdjEsIHNpemVfdCBzMSwgdW5zaWduZWQgZDEsIGNvbnN0IHZvaWQgKnYyLAorCQkJCQlzaXplX3QgczIsIHVuc2lnbmVkIGQyKQoreworCWludCByID0gbWVtb3JkKHYxLCBzMSwgdjIsIHMyKTsKKworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlpZiAoZDEgPiBkMikKKwkJcmV0dXJuIDE7CisJaWYgKGQyID4gZDEpCisJCXJldHVybiAtMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBldmVudF91bmlxX2FkZChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sLAorCQkJCXVuc2lnbmVkIGRvbWFpbikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKm5ldyA9ICYocm9vdC0+cmJfbm9kZSksICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBldmVudF91bmlxICpkYXRhOworCisJLyogRmlndXJlIG91dCB3aGVyZSB0byBwdXQgbmV3IG5vZGUgKi8KKwl3aGlsZSAoKm5ldykgeworCQlzdHJ1Y3QgZXZlbnRfdW5pcSAqaXQ7CisJCWludCByZXN1bHQ7CisKKwkJaXQgPSBjb250YWluZXJfb2YoKm5ldywgc3RydWN0IGV2ZW50X3VuaXEsIG5vZGUpOworCQlyZXN1bHQgPSBldl91bmlxX29yZChuYW1lLCBubCwgZG9tYWluLCBpdC0+bmFtZSwgaXQtPm5sLAorCQkJCQlpdC0+ZG9tYWluKTsKKworCQlwYXJlbnQgPSAqbmV3OworCQlpZiAocmVzdWx0IDwgMCkKKwkJCW5ldyA9ICYoKCpuZXcpLT5yYl9sZWZ0KTsKKwkJZWxzZSBpZiAocmVzdWx0ID4gMCkKKwkJCW5ldyA9ICYoKCpuZXcpLT5yYl9yaWdodCk7CisJCWVsc2UgeworCQkJaXQtPmN0Kys7CisJCQlwcl9pbmZvKCJmb3VuZCBhIGR1cGxpY2F0ZSBldmVudCAlLipzLCBjdD0ldVxuIiwgbmwsCisJCQkJCQluYW1lLCBpdC0+Y3QpOworCQkJcmV0dXJuIGl0LT5jdDsKKwkJfQorCX0KKworCWRhdGEgPSBrbWFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkqZGF0YSA9IChzdHJ1Y3QgZXZlbnRfdW5pcSkgeworCQkubmFtZSA9IG5hbWUsCisJCS5ubCA9IG5sLAorCQkuY3QgPSAwLAorCQkuZG9tYWluID0gZG9tYWluLAorCX07CisKKwkvKiBBZGQgbmV3IG5vZGUgYW5kIHJlYmFsYW5jZSB0cmVlLiAqLworCXJiX2xpbmtfbm9kZSgmZGF0YS0+bm9kZSwgcGFyZW50LCBuZXcpOworCXJiX2luc2VydF9jb2xvcigmZGF0YS0+bm9kZSwgcm9vdCk7CisKKwkvKiBkYXRhLT5jdCAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBldmVudF91bmlxX2Rlc3Ryb3koc3RydWN0IHJiX3Jvb3QgKnJvb3QpCit7CisJLyoKKwkgKiB0aGUgc3RyaW5ncyB3ZSBwb2ludCB0byBhcmUgaW4gdGhlIGdpYW50IGJsb2NrIG9mIG1lbW9yeSBmaWxsZWQgYnkKKwkgKiB0aGUgY2F0YWxvZywgYW5kIGFyZSBmcmVlZCBzZXBhcmF0ZWx5LgorCSAqLworCXN0cnVjdCBldmVudF91bmlxICpwb3MsICpuOworCisJcmJ0cmVlX3Bvc3RvcmRlcl9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgcm9vdCwgbm9kZSkKKwkJa2ZyZWUocG9zKTsKK30KKworCisvKgorICogZW5zdXJlIHRoZSBldmVudCBzdHJ1Y3R1cmUncyBzaXplcyBhcmUgc2VsZiBjb25zaXN0ZW50IGFuZCBkb24ndCBjYXVzZSB1cyB0bworICogcmVhZCBvdXRzaWRlIG9mIHRoZSBldmVudAorICoKKyAqIE9uIHN1Y2Nlc3MsIHJldHVybiB0aGUgZXZlbnQgbGVuZ3RoIGluIGJ5dGVzLgorICogT3RoZXJ3aXNlLCByZXR1cm4gLTEgKGFuZCBwcmludCBhcyBhcHByb3ByaWF0ZSkuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGNhdGFsb2dfZXZlbnRfbGVuX3ZhbGlkYXRlKHN0cnVjdCBodl8yNHg3X2V2ZW50X2RhdGEgKmV2ZW50LAorCQkJCQkgIHNpemVfdCBldmVudF9pZHgsCisJCQkJCSAgc2l6ZV90IGV2ZW50X2RhdGFfYnl0ZXMsCisJCQkJCSAgc2l6ZV90IGV2ZW50X2VudHJ5X2NvdW50LAorCQkJCQkgIHNpemVfdCBvZmZzZXQsIHZvaWQgKmVuZCkKK3sKKwlzc2l6ZV90IGV2X2xlbjsKKwl2b2lkICpldl9lbmQsICpjYWxjX2V2X2VuZDsKKworCWlmIChvZmZzZXQgPj0gZXZlbnRfZGF0YV9ieXRlcykKKwkJcmV0dXJuIC0xOworCisJaWYgKGV2ZW50X2lkeCA+PSBldmVudF9lbnRyeV9jb3VudCkgeworCQlwcl9kZXZlbCgiY2F0YWxvZyBldmVudCBkYXRhIGhhcyAlenUgYnl0ZXMgb2YgcGFkZGluZyBhZnRlciBsYXN0IGV2ZW50XG4iLAorCQkJCWV2ZW50X2RhdGFfYnl0ZXMgLSBvZmZzZXQpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKCFldmVudF9maXhlZF9wb3J0aW9uX2lzX3dpdGhpbihldmVudCwgZW5kKSkgeworCQlwcl93YXJuKCJldmVudCAlenUgZml4ZWQgcG9ydGlvbiBpcyBub3Qgd2l0aGluIHJhbmdlXG4iLAorCQkJCWV2ZW50X2lkeCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlldl9sZW4gPSBiZTE2X3RvX2NwdShldmVudC0+bGVuZ3RoKTsKKworCWlmIChldl9sZW4gJSAxNikKKwkJcHJfaW5mbygiZXZlbnQgJXp1IGhhcyBsZW5ndGggJXp1IG5vdCBkaXZpc2libGUgYnkgMTY6IGV2ZW50PSVwS1xuIiwKKwkJCQlldmVudF9pZHgsIGV2X2xlbiwgZXZlbnQpOworCisJZXZfZW5kID0gKF9fdTggKilldmVudCArIGV2X2xlbjsKKwlpZiAoZXZfZW5kID4gZW5kKSB7CisJCXByX3dhcm4oImV2ZW50ICV6dSBoYXMgLmxlbmd0aD0lenUsIGVuZHMgYWZ0ZXIgYnVmZmVyIGVuZDogZXZfZW5kPSVwSyA+IGVuZD0lcEssIG9mZnNldD0lenVcbiIsCisJCQkJZXZlbnRfaWR4LCBldl9sZW4sIGV2X2VuZCwgZW5kLAorCQkJCW9mZnNldCk7CisJCXJldHVybiAtMTsKKwl9CisKKwljYWxjX2V2X2VuZCA9IGV2ZW50X2VuZChldmVudCwgZW5kKTsKKwlpZiAoIWNhbGNfZXZfZW5kKSB7CisJCXByX3dhcm4oImV2ZW50ICV6dSBoYXMgYSBjYWxjdWxhdGVkIGxlbmd0aCB3aGljaCBleGNlZWRzIGJ1ZmZlciBsZW5ndGggJXp1OiBldmVudD0lcEsgZW5kPSVwSywgb2Zmc2V0PSV6dVxuIiwKKwkJCWV2ZW50X2lkeCwgZXZlbnRfZGF0YV9ieXRlcywgZXZlbnQsIGVuZCwKKwkJCW9mZnNldCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoY2FsY19ldl9lbmQgPiBldl9lbmQpIHsKKwkJcHJfd2FybigiZXZlbnQgJXp1IGV4Y2VlZHMgaXQncyBvd24gbGVuZ3RoOiBldmVudD0lcEssIGVuZD0lcEssIG9mZnNldD0lenUsIGNhbGNfZXZfZW5kPSVwS1xuIiwKKwkJCWV2ZW50X2lkeCwgZXZlbnQsIGV2X2VuZCwgb2Zmc2V0LCBjYWxjX2V2X2VuZCk7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gZXZfbGVuOworfQorCisjZGVmaW5lIE1BWF80SyAoU0laRV9NQVggLyA0MDk2KQorCitzdGF0aWMgdm9pZCBjcmVhdGVfZXZlbnRzX2Zyb21fY2F0YWxvZyhzdHJ1Y3QgYXR0cmlidXRlICoqKmV2ZW50c18sCisJCXN0cnVjdCBhdHRyaWJ1dGUgKioqZXZlbnRfZGVzY3NfLAorCQlzdHJ1Y3QgYXR0cmlidXRlICoqKmV2ZW50X2xvbmdfZGVzY3NfKQoreworCXVuc2lnbmVkIGxvbmcgaHJldDsKKwlzaXplX3QgY2F0YWxvZ19sZW4sIGNhdGFsb2dfcGFnZV9sZW4sIGV2ZW50X2VudHJ5X2NvdW50LAorCSAgICAgICBldmVudF9kYXRhX2xlbiwgZXZlbnRfZGF0YV9vZmZzLAorCSAgICAgICBldmVudF9kYXRhX2J5dGVzLCBqdW5rX2V2ZW50cywgZXZlbnRfaWR4LCBldmVudF9hdHRyX2N0LCBpLAorCSAgICAgICBhdHRyX21heCwgZXZlbnRfaWR4X2xhc3QsIGRlc2NfY3QsIGxvbmdfZGVzY19jdDsKKwlzc2l6ZV90IGN0LCBldl9sZW47CisJdWludDMyX3QgY2F0YWxvZ192ZXJzaW9uX251bTsKKwlzdHJ1Y3QgYXR0cmlidXRlICoqZXZlbnRzLCAqKmV2ZW50X2Rlc2NzLCAqKmV2ZW50X2xvbmdfZGVzY3M7CisJc3RydWN0IGh2XzI0eDdfY2F0YWxvZ19wYWdlXzAgKnBhZ2VfMCA9CisJCWttZW1fY2FjaGVfYWxsb2MoaHZfcGFnZV9jYWNoZSwgR0ZQX0tFUk5FTCk7CisJdm9pZCAqcGFnZSA9IHBhZ2VfMDsKKwl2b2lkICpldmVudF9kYXRhLCAqZW5kOworCXN0cnVjdCBodl8yNHg3X2V2ZW50X2RhdGEgKmV2ZW50OworCXN0cnVjdCByYl9yb290IGV2X3VuaXEgPSBSQl9ST09UOworCisJaWYgKCFwYWdlKQorCQlnb3RvIGVfb3V0OworCisJaHJldCA9IGhfZ2V0XzI0eDdfY2F0YWxvZ19wYWdlKHBhZ2UsIDAsIDApOworCWlmIChocmV0KQorCQlnb3RvIGVfZnJlZTsKKworCWNhdGFsb2dfdmVyc2lvbl9udW0gPSBiZTY0X3RvX2NwdShwYWdlXzAtPnZlcnNpb24pOworCWNhdGFsb2dfcGFnZV9sZW4gPSBiZTMyX3RvX2NwdShwYWdlXzAtPmxlbmd0aCk7CisKKwlpZiAoTUFYXzRLIDwgY2F0YWxvZ19wYWdlX2xlbikgeworCQlwcl9lcnIoImludmFsaWQgcGFnZSBjb3VudDogJXp1XG4iLCBjYXRhbG9nX3BhZ2VfbGVuKTsKKwkJZ290byBlX2ZyZWU7CisJfQorCisJY2F0YWxvZ19sZW4gPSBjYXRhbG9nX3BhZ2VfbGVuICogNDA5NjsKKworCWV2ZW50X2VudHJ5X2NvdW50ID0gYmUxNl90b19jcHUocGFnZV8wLT5ldmVudF9lbnRyeV9jb3VudCk7CisJZXZlbnRfZGF0YV9vZmZzICAgPSBiZTE2X3RvX2NwdShwYWdlXzAtPmV2ZW50X2RhdGFfb2Zmcyk7CisJZXZlbnRfZGF0YV9sZW4gICAgPSBiZTE2X3RvX2NwdShwYWdlXzAtPmV2ZW50X2RhdGFfbGVuKTsKKworCXByX2RldmVsKCJjdiAlenUgY2wgJXp1IGVlYyAlenUgZWRvICV6dSBlZGwgJXp1XG4iLAorCQkJKHNpemVfdCljYXRhbG9nX3ZlcnNpb25fbnVtLCBjYXRhbG9nX2xlbiwKKwkJCWV2ZW50X2VudHJ5X2NvdW50LCBldmVudF9kYXRhX29mZnMsIGV2ZW50X2RhdGFfbGVuKTsKKworCWlmICgoTUFYXzRLIDwgZXZlbnRfZGF0YV9sZW4pCisJCQl8fCAoTUFYXzRLIDwgZXZlbnRfZGF0YV9vZmZzKQorCQkJfHwgKE1BWF80SyAtIGV2ZW50X2RhdGFfb2ZmcyA8IGV2ZW50X2RhdGFfbGVuKSkgeworCQlwcl9lcnIoImludmFsaWQgZXZlbnQgZGF0YSBvZmZzICV6dSBhbmQvb3IgbGVuICV6dVxuIiwKKwkJCQlldmVudF9kYXRhX29mZnMsIGV2ZW50X2RhdGFfbGVuKTsKKwkJZ290byBlX2ZyZWU7CisJfQorCisJaWYgKChldmVudF9kYXRhX29mZnMgKyBldmVudF9kYXRhX2xlbikgPiBjYXRhbG9nX3BhZ2VfbGVuKSB7CisJCXByX2VycigiZXZlbnQgZGF0YSAlenUtJXp1IGRvZXMgbm90IGZpdCBpbnNpZGUgY2F0YWxvZyAwLSV6dVxuIiwKKwkJCQlldmVudF9kYXRhX29mZnMsCisJCQkJZXZlbnRfZGF0YV9vZmZzICsgZXZlbnRfZGF0YV9sZW4sCisJCQkJY2F0YWxvZ19wYWdlX2xlbik7CisJCWdvdG8gZV9mcmVlOworCX0KKworCWlmIChTSVpFX01BWCAvIE1BWF9FVkVOVFNfUEVSX0VWRU5UX0RBVEEgLSAxIDwgZXZlbnRfZW50cnlfY291bnQpIHsKKwkJcHJfZXJyKCJldmVudF9lbnRyeV9jb3VudCAlenUgaXMgaW52YWxpZFxuIiwKKwkJCQlldmVudF9lbnRyeV9jb3VudCk7CisJCWdvdG8gZV9mcmVlOworCX0KKworCWV2ZW50X2RhdGFfYnl0ZXMgPSBldmVudF9kYXRhX2xlbiAqIDQwOTY7CisKKwkvKgorCSAqIGV2ZW50IGRhdGEgY2FuIHNwYW4gc2V2ZXJhbCBwYWdlcywgZXZlbnRzIGNhbiBjcm9zcyBiZXR3ZWVuIHRoZXNlCisJICogcGFnZXMuIFVzZSB2bWFsbG9jIHRvIG1ha2UgdGhpcyBlYXNpZXIuCisJICovCisJZXZlbnRfZGF0YSA9IHZtYWxsb2MoZXZlbnRfZGF0YV9ieXRlcyk7CisJaWYgKCFldmVudF9kYXRhKSB7CisJCXByX2VycigiY291bGQgbm90IGFsbG9jYXRlIGV2ZW50IGRhdGFcbiIpOworCQlnb3RvIGVfZnJlZTsKKwl9CisKKwllbmQgPSBldmVudF9kYXRhICsgZXZlbnRfZGF0YV9ieXRlczsKKworCS8qCisJICogdXNpbmcgdm1hbGxvY190b19waHlzKCkgbGlrZSB0aGlzIG9ubHkgd29ya3MgaWYgUEFHRV9TSVpFIGlzCisJICogZGl2aXNpYmxlIGJ5IDQwOTYKKwkgKi8KKwlCVUlMRF9CVUdfT04oUEFHRV9TSVpFICUgNDA5Nik7CisKKwlmb3IgKGkgPSAwOyBpIDwgZXZlbnRfZGF0YV9sZW47IGkrKykgeworCQlocmV0ID0gaF9nZXRfMjR4N19jYXRhbG9nX3BhZ2VfKAorCQkJCXZtYWxsb2NfdG9fcGh5cyhldmVudF9kYXRhICsgaSAqIDQwOTYpLAorCQkJCWNhdGFsb2dfdmVyc2lvbl9udW0sCisJCQkJaSArIGV2ZW50X2RhdGFfb2Zmcyk7CisJCWlmIChocmV0KSB7CisJCQlwcl9lcnIoImZhaWxlZCB0byBnZXQgZXZlbnQgZGF0YSBpbiBwYWdlICV6dVxuIiwKKwkJCQkJaSArIGV2ZW50X2RhdGFfb2Zmcyk7CisJCQlnb3RvIGVfZXZlbnRfZGF0YTsKKwkJfQorCX0KKworCS8qCisJICogc2NhbiB0aGUgY2F0YWxvZyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBhdHRyaWJ1dGVzIHdlIG5lZWQsIGFuZAorCSAqIHZlcmlmeSBpdCBhdCB0aGUgc2FtZSB0aW1lLgorCSAqLworCWZvciAoanVua19ldmVudHMgPSAwLCBldmVudCA9IGV2ZW50X2RhdGEsIGV2ZW50X2lkeCA9IDAsIGF0dHJfbWF4ID0gMDsKKwkgICAgIDsKKwkgICAgIGV2ZW50X2lkeCsrLCBldmVudCA9ICh2b2lkICopZXZlbnQgKyBldl9sZW4pIHsKKwkJc2l6ZV90IG9mZnNldCA9ICh2b2lkICopZXZlbnQgLSAodm9pZCAqKWV2ZW50X2RhdGE7CisJCWNoYXIgKm5hbWU7CisJCWludCBubDsKKworCQlldl9sZW4gPSBjYXRhbG9nX2V2ZW50X2xlbl92YWxpZGF0ZShldmVudCwgZXZlbnRfaWR4LAorCQkJCQkJICAgIGV2ZW50X2RhdGFfYnl0ZXMsCisJCQkJCQkgICAgZXZlbnRfZW50cnlfY291bnQsCisJCQkJCQkgICAgb2Zmc2V0LCBlbmQpOworCQlpZiAoZXZfbGVuIDwgMCkKKwkJCWJyZWFrOworCisJCW5hbWUgPSBldmVudF9uYW1lKGV2ZW50LCAmbmwpOworCisJCWlmIChldmVudC0+ZXZlbnRfZ3JvdXBfcmVjb3JkX2xlbiA9PSAwKSB7CisJCQlwcl9kZXZlbCgiaW52YWxpZCBldmVudCAlenUgKCUuKnMpOiBncm91cF9yZWNvcmRfbGVuID09IDAsIHNraXBwaW5nXG4iLAorCQkJCQlldmVudF9pZHgsIG5sLCBuYW1lKTsKKwkJCWp1bmtfZXZlbnRzKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmICghY2F0YWxvZ19lbnRyeV9kb21haW5faXNfdmFsaWQoZXZlbnQtPmRvbWFpbikpIHsKKwkJCXByX2luZm8oImV2ZW50ICV6dSAoJS4qcykgaGFzIGludmFsaWQgZG9tYWluICVkXG4iLAorCQkJCQlldmVudF9pZHgsIG5sLCBuYW1lLCBldmVudC0+ZG9tYWluKTsKKwkJCWp1bmtfZXZlbnRzKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCWF0dHJfbWF4ICs9IGV2ZW50X3RvX2F0dHJfY3QoZXZlbnQpOworCX0KKworCWV2ZW50X2lkeF9sYXN0ID0gZXZlbnRfaWR4OworCWlmIChldmVudF9pZHhfbGFzdCAhPSBldmVudF9lbnRyeV9jb3VudCkKKwkJcHJfd2FybigiZXZlbnQgYnVmZmVyIGVuZGVkIGJlZm9yZSBsaXN0ZWQgIyBvZiBldmVudHMgd2VyZSBwYXJzZWQgKGdvdCAlenUsIHdhbnRlZCAlenUsIGp1bmsgJXp1KVxuIiwKKwkJCQlldmVudF9pZHhfbGFzdCwgZXZlbnRfZW50cnlfY291bnQsIGp1bmtfZXZlbnRzKTsKKworCWV2ZW50cyA9IGttYWxsb2NfYXJyYXkoYXR0cl9tYXggKyAxLCBzaXplb2YoKmV2ZW50cyksIEdGUF9LRVJORUwpOworCWlmICghZXZlbnRzKQorCQlnb3RvIGVfZXZlbnRfZGF0YTsKKworCWV2ZW50X2Rlc2NzID0ga21hbGxvY19hcnJheShldmVudF9pZHggKyAxLCBzaXplb2YoKmV2ZW50X2Rlc2NzKSwKKwkJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWV2ZW50X2Rlc2NzKQorCQlnb3RvIGVfZXZlbnRfYXR0cnM7CisKKwlldmVudF9sb25nX2Rlc2NzID0ga21hbGxvY19hcnJheShldmVudF9pZHggKyAxLAorCQkJc2l6ZW9mKCpldmVudF9sb25nX2Rlc2NzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFldmVudF9sb25nX2Rlc2NzKQorCQlnb3RvIGVfZXZlbnRfZGVzY3M7CisKKwkvKiBJdGVyYXRlIG92ZXIgdGhlIGNhdGFsb2cgZmlsbGluZyBpbiB0aGUgYXR0cmlidXRlIHZlY3RvciAqLworCWZvciAoanVua19ldmVudHMgPSAwLCBldmVudF9hdHRyX2N0ID0gMCwgZGVzY19jdCA9IDAsIGxvbmdfZGVzY19jdCA9IDAsCisJCQkJZXZlbnQgPSBldmVudF9kYXRhLCBldmVudF9pZHggPSAwOworCQkJZXZlbnRfaWR4IDwgZXZlbnRfaWR4X2xhc3Q7CisJCQlldmVudF9pZHgrKywgZXZfbGVuID0gYmUxNl90b19jcHUoZXZlbnQtPmxlbmd0aCksCisJCQkJZXZlbnQgPSAodm9pZCAqKWV2ZW50ICsgZXZfbGVuKSB7CisJCWNoYXIgKm5hbWU7CisJCWludCBubDsKKwkJaW50IG5vbmNlOworCQkvKgorCQkgKiB0aGVzZSBhcmUgdGhlIG9ubHkgImJhZCIgZXZlbnRzIHRoYXQgYXJlIGludGVybWl4ZWQgYW5kIHRoYXQKKwkJICogd2UgY2FuIGlnbm9yZSB3aXRob3V0IGlzc3VlLiBtYWtlIHN1cmUgdG8gc2tpcCB0aGVtIGhlcmUKKwkJICovCisJCWlmIChldmVudC0+ZXZlbnRfZ3JvdXBfcmVjb3JkX2xlbiA9PSAwKQorCQkJY29udGludWU7CisJCWlmICghY2F0YWxvZ19lbnRyeV9kb21haW5faXNfdmFsaWQoZXZlbnQtPmRvbWFpbikpCisJCQljb250aW51ZTsKKworCQluYW1lICA9IGV2ZW50X25hbWUoZXZlbnQsICZubCk7CisJCW5vbmNlID0gZXZlbnRfdW5pcV9hZGQoJmV2X3VuaXEsIG5hbWUsIG5sLCBldmVudC0+ZG9tYWluKTsKKwkJY3QgICAgPSBldmVudF9kYXRhX3RvX2F0dHJzKGV2ZW50X2lkeCwgZXZlbnRzICsgZXZlbnRfYXR0cl9jdCwKKwkJCQkJICAgIGV2ZW50LCBub25jZSk7CisJCWlmIChjdCA8PSAwKSB7CisJCQlwcl93YXJuKCJldmVudCAlenUgKCUuKnMpIGNyZWF0aW9uIGZhaWx1cmUsIHNraXBwaW5nXG4iLAorCQkJCWV2ZW50X2lkeCwgbmwsIG5hbWUpOworCQkJanVua19ldmVudHMrKzsKKwkJfSBlbHNlIHsKKwkJCWV2ZW50X2F0dHJfY3QgKz0gY3Q7CisJCQlldmVudF9kZXNjc1tkZXNjX2N0XSA9IGV2ZW50X3RvX2Rlc2NfYXR0cihldmVudCwgbm9uY2UpOworCQkJaWYgKGV2ZW50X2Rlc2NzW2Rlc2NfY3RdKQorCQkJCWRlc2NfY3QrKzsKKwkJCWV2ZW50X2xvbmdfZGVzY3NbbG9uZ19kZXNjX2N0XSA9CisJCQkJCWV2ZW50X3RvX2xvbmdfZGVzY19hdHRyKGV2ZW50LCBub25jZSk7CisJCQlpZiAoZXZlbnRfbG9uZ19kZXNjc1tsb25nX2Rlc2NfY3RdKQorCQkJCWxvbmdfZGVzY19jdCsrOworCQl9CisJfQorCisJcHJfaW5mbygicmVhZCAlenUgY2F0YWxvZyBlbnRyaWVzLCBjcmVhdGVkICV6dSBldmVudCBhdHRycyAoJXp1IGZhaWx1cmVzKSwgJXp1IGRlc2NzXG4iLAorCQkJZXZlbnRfaWR4LCBldmVudF9hdHRyX2N0LCBqdW5rX2V2ZW50cywgZGVzY19jdCk7CisKKwlldmVudHNbZXZlbnRfYXR0cl9jdF0gPSBOVUxMOworCWV2ZW50X2Rlc2NzW2Rlc2NfY3RdID0gTlVMTDsKKwlldmVudF9sb25nX2Rlc2NzW2xvbmdfZGVzY19jdF0gPSBOVUxMOworCisJZXZlbnRfdW5pcV9kZXN0cm95KCZldl91bmlxKTsKKwl2ZnJlZShldmVudF9kYXRhKTsKKwlrbWVtX2NhY2hlX2ZyZWUoaHZfcGFnZV9jYWNoZSwgcGFnZSk7CisKKwkqZXZlbnRzXyA9IGV2ZW50czsKKwkqZXZlbnRfZGVzY3NfID0gZXZlbnRfZGVzY3M7CisJKmV2ZW50X2xvbmdfZGVzY3NfID0gZXZlbnRfbG9uZ19kZXNjczsKKwlyZXR1cm47CisKK2VfZXZlbnRfZGVzY3M6CisJa2ZyZWUoZXZlbnRfZGVzY3MpOworZV9ldmVudF9hdHRyczoKKwlrZnJlZShldmVudHMpOworZV9ldmVudF9kYXRhOgorCXZmcmVlKGV2ZW50X2RhdGEpOworZV9mcmVlOgorCWttZW1fY2FjaGVfZnJlZShodl9wYWdlX2NhY2hlLCBwYWdlKTsKK2Vfb3V0OgorCSpldmVudHNfID0gTlVMTDsKKwkqZXZlbnRfZGVzY3NfID0gTlVMTDsKKwkqZXZlbnRfbG9uZ19kZXNjc18gPSBOVUxMOworfQorCiBzdGF0aWMgc3NpemVfdCBjYXRhbG9nX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLAogCQkJICAgIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBjb3VudCkKQEAgLTIwNywxNiArOTY5LDEzIEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICphdHRyX2dyb3Vwc1tdID0gewogCSZmb3JtYXRfZ3JvdXAsCisJJmV2ZW50X2dyb3VwLAorCSZldmVudF9kZXNjX2dyb3VwLAorCSZldmVudF9sb25nX2Rlc2NfZ3JvdXAsCiAJJmlmX2dyb3VwLAogCU5VTEwsCiB9OwogCi1zdGF0aWMgYm9vbCBpc19waHlzaWNhbF9kb21haW4oaW50IGRvbWFpbikKLXsKLQlyZXR1cm4gIGRvbWFpbiA9PSBIVl8yNFg3X1BFUkZfRE9NQUlOX1BIWVNJQ0FMX0NISVAgfHwKLQkJZG9tYWluID09IEhWXzI0WDdfUEVSRl9ET01BSU5fUEhZU0lDQUxfQ09SRTsKLX0KLQogREVGSU5FX1BFUl9DUFUoY2hhciwgaHZfMjR4N19yZXFiWzQwOTZdKSBfX2FsaWduZWQoNDA5Nik7CiBERUZJTkVfUEVSX0NQVShjaGFyLCBodl8yNHg3X3Jlc2JbNDA5Nl0pIF9fYWxpZ25lZCg0MDk2KTsKIApAQCAtMjkxLDkgKzEwNTAsMTcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGV2ZW50XzI0eDdfcmVxdWVzdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHU2NCAqcmVzLAogCQlib29sIHN1Y2Nlc3NfZXhwZWN0ZWQpCiB7CisJdTE2IGlkeDsKKwl1bnNpZ25lZCBkb21haW4gPSBldmVudF9nZXRfZG9tYWluKGV2ZW50KTsKKworCWlmIChpc19waHlzaWNhbF9kb21haW4oZG9tYWluKSkKKwkJaWR4ID0gZXZlbnRfZ2V0X2NvcmUoZXZlbnQpOworCWVsc2UKKwkJaWR4ID0gZXZlbnRfZ2V0X3ZjcHUoZXZlbnQpOworCiAJcmV0dXJuIHNpbmdsZV8yNHg3X3JlcXVlc3QoZXZlbnRfZ2V0X2RvbWFpbihldmVudCksCiAJCQkJZXZlbnRfZ2V0X29mZnNldChldmVudCksCi0JCQkJZXZlbnRfZ2V0X3N0YXJ0aW5nX2luZGV4KGV2ZW50KSwKKwkJCQlpZHgsCiAJCQkJZXZlbnRfZ2V0X2xwYXIoZXZlbnQpLAogCQkJCXJlcywKIAkJCQlzdWNjZXNzX2V4cGVjdGVkKTsKQEAgLTM1Niw3ICsxMTIzLDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JLyogUEhZU0lDQUwgZG9tYWlucyAmIG90aGVyIGxwYXJzIHJlcXVpcmUgZXh0cmEgY2FwYWJpbGl0aWVzICovCisJLyogUGh5c2ljYWwgZG9tYWlucyAmIG90aGVyIGxwYXJzIHJlcXVpcmUgZXh0cmEgY2FwYWJpbGl0aWVzICovCiAJaWYgKCFjYXBzLmNvbGxlY3RfcHJpdmlsZWdlZCAmJiAoaXNfcGh5c2ljYWxfZG9tYWluKGRvbWFpbikgfHwKIAkJKGV2ZW50X2dldF9scGFyKGV2ZW50KSAhPSBldmVudF9nZXRfbHBhcl9tYXgoKSkpKSB7CiAJCXByX2RldmVsKCJodiBwZXJtaXNpb25zIGRpc2FsbG93OiBpc19waHlzaWNhbF9kb21haW46JWQsIGxwYXI9MHglbGx4XG4iLApAQCAtNDUyLDYgKzEyMTksMTAgQEAKIAkvKiBzYW1wbGluZyBub3Qgc3VwcG9ydGVkICovCiAJaF8yNHg3X3BtdS5jYXBhYmlsaXRpZXMgfD0gUEVSRl9QTVVfQ0FQX05PX0lOVEVSUlVQVDsKIAorCWNyZWF0ZV9ldmVudHNfZnJvbV9jYXRhbG9nKCZldmVudF9ncm91cC5hdHRycywKKwkJCQkgICAmZXZlbnRfZGVzY19ncm91cC5hdHRycywKKwkJCQkgICAmZXZlbnRfbG9uZ19kZXNjX2dyb3VwLmF0dHJzKTsKKwogCXIgPSBwZXJmX3BtdV9yZWdpc3RlcigmaF8yNHg3X3BtdSwgaF8yNHg3X3BtdS5uYW1lLCAtMSk7CiAJaWYgKHIpCiAJCXJldHVybiByOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5oIGIvYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5oCmluZGV4IDcyMGViY2UuLjY5Y2Q0ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuaAorKysgYi9hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmgKQEAgLTMsMTQgKzMsMTQgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKK2VudW0gaHZfcGVyZl9kb21haW5zIHsKKyNkZWZpbmUgRE9NQUlOKG4sIHYsIHgsIGMpIEhWX1BFUkZfRE9NQUlOXyMjbiA9IHYsCisjaW5jbHVkZSAiaHYtMjR4Ny1kb21haW5zLmgiCisjdW5kZWYgRE9NQUlOCit9OworCiBzdHJ1Y3QgaHZfMjR4N19yZXF1ZXN0IHsKIAkvKiBQSFlTSUNBTCBkb21haW5zIHJlcXVpcmUgZW5hYmxpbmcgdmlhIHBoeXAvaG1jLiAqLwotI2RlZmluZSBIVl8yNFg3X1BFUkZfRE9NQUlOX1BIWVNJQ0FMX0NISVAgMHgwMQotI2RlZmluZSBIVl8yNFg3X1BFUkZfRE9NQUlOX1BIWVNJQ0FMX0NPUkUgMHgwMgotI2RlZmluZSBIVl8yNFg3X1BFUkZfRE9NQUlOX1ZJUlRVQUxfUFJPQ0VTU09SX0hPTUVfQ09SRSAgIDB4MDMKLSNkZWZpbmUgSFZfMjRYN19QRVJGX0RPTUFJTl9WSVJUVUFMX1BST0NFU1NPUl9IT01FX0NISVAgICAweDA0Ci0jZGVmaW5lIEhWXzI0WDdfUEVSRl9ET01BSU5fVklSVFVBTF9QUk9DRVNTT1JfSE9NRV9OT0RFICAgMHgwNQotI2RlZmluZSBIVl8yNFg3X1BFUkZfRE9NQUlOX1ZJUlRVQUxfUFJPQ0VTU09SX1JFTU9URV9OT0RFIDB4MDYKIAlfX3U4IHBlcmZvcm1hbmNlX2RvbWFpbjsKIAlfX3U4IHJlc2VydmVkWzB4MV07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wZXJmL2h2LWNvbW1vbi5jIGIvYXJjaC9wb3dlcnBjL3BlcmYvaHYtY29tbW9uLmMKaW5kZXggNDdlMDJiMy4uN2RjZThmMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wZXJmL2h2LWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wZXJmL2h2LWNvbW1vbi5jCkBAIC05LDEzICs5LDEzIEBACiAJdW5zaWduZWQgbG9uZyByOwogCXN0cnVjdCBwIHsKIAkJc3RydWN0IGh2X2dldF9wZXJmX2NvdW50ZXJfaW5mb19wYXJhbXMgcGFyYW1zOwotCQlzdHJ1Y3QgY3Zfc3lzdGVtX3BlcmZvcm1hbmNlX2NhcGFiaWxpdGllcyBjYXBzOworCQlzdHJ1Y3QgaHZfZ3BjaV9zeXN0ZW1fcGVyZm9ybWFuY2VfY2FwYWJpbGl0aWVzIGNhcHM7CiAJfSBfX3BhY2tlZCBfX2FsaWduZWQoc2l6ZW9mKHVpbnQ2NF90KSk7CiAKIAlzdHJ1Y3QgcCBhcmcgPSB7CiAJCS5wYXJhbXMgPSB7CiAJCQkuY291bnRlcl9yZXF1ZXN0ID0gY3B1X3RvX2JlMzIoCi0JCQkJCUNJUl9TWVNURU1fUEVSRk9STUFOQ0VfQ0FQQUJJTElUSUVTKSwKKwkJCQlIVl9HUENJX3N5c3RlbV9wZXJmb3JtYW5jZV9jYXBhYmlsaXRpZXMpLAogCQkJLnN0YXJ0aW5nX2luZGV4ID0gY3B1X3RvX2JlMzIoLTEpLAogCQkJLmNvdW50ZXJfaW5mb192ZXJzaW9uX2luID0gMCwKIAkJfQpAQCAtMzEsOSArMzEsOSBAQAogCiAJY2Fwcy0+dmVyc2lvbiA9IGFyZy5wYXJhbXMuY291bnRlcl9pbmZvX3ZlcnNpb25fb3V0OwogCWNhcHMtPmNvbGxlY3RfcHJpdmlsZWdlZCA9ICEhYXJnLmNhcHMucGVyZl9jb2xsZWN0X3ByaXZpbGVnZWQ7Ci0JY2Fwcy0+Z2EgPSAhIShhcmcuY2Fwcy5jYXBhYmlsaXR5X21hc2sgJiBDVl9DTV9HQSk7Ci0JY2Fwcy0+ZXhwYW5kZWQgPSAhIShhcmcuY2Fwcy5jYXBhYmlsaXR5X21hc2sgJiBDVl9DTV9FWFBBTkRFRCk7Ci0JY2Fwcy0+bGFiID0gISEoYXJnLmNhcHMuY2FwYWJpbGl0eV9tYXNrICYgQ1ZfQ01fTEFCKTsKKwljYXBzLT5nYSA9ICEhKGFyZy5jYXBzLmNhcGFiaWxpdHlfbWFzayAmIEhWX0dQQ0lfQ01fR0EpOworCWNhcHMtPmV4cGFuZGVkID0gISEoYXJnLmNhcHMuY2FwYWJpbGl0eV9tYXNrICYgSFZfR1BDSV9DTV9FWFBBTkRFRCk7CisJY2Fwcy0+bGFiID0gISEoYXJnLmNhcHMuY2FwYWJpbGl0eV9tYXNrICYgSFZfR1BDSV9DTV9MQUIpOwogCiAJcmV0dXJuIHI7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGVyZi9odi1jb21tb24uaCBiL2FyY2gvcG93ZXJwYy9wZXJmL2h2LWNvbW1vbi5oCmluZGV4IDVkNzljZWMuLjM0OWFhYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wZXJmL2h2LWNvbW1vbi5oCisrKyBiL2FyY2gvcG93ZXJwYy9wZXJmL2h2LWNvbW1vbi5oCkBAIC0yMCw2ICsyMCwxNiBAQAogUE1VX0ZPUk1BVF9BVFRSKG5hbWUsICNhdHRyX3ZhciAiOiIgI2JpdF9zdGFydCAiLSIgI2JpdF9lbmQpOwkJXAogRVZFTlRfREVGSU5FX1JBTkdFKG5hbWUsIGF0dHJfdmFyLCBiaXRfc3RhcnQsIGJpdF9lbmQpCiAKKy8qCisgKiBUaGUgRVZFTlRfREVGSU5FX1JBTkdFX0ZPUk1BVCgpIG1hY3JvIGFib3ZlIGluY2x1ZGVzIGhlbHBlciBmdW5jdGlvbnMKKyAqIGZvciB0aGUgZmllbGRzIChlZzogZXZlbnRfZ2V0X3N0YXJ0aW5nX2luZGV4KCkpLiBGb3Igc29tZSBmaWVsZHMgd2UKKyAqIG5lZWQgdGhlIGJpdC1yYW5nZSBkZWZpbml0aW9uLCBidXQgbm8gdGhlIGhlbHBlciBmdW5jdGlvbnMuIERlZmluZSBhCisgKiBsaXRlIHZlcnNpb24gb2YgdGhlIGFib3ZlIG1hY3JvIHdpdGhvdXQgdGhlIGhlbHBlcnMgYW5kIHNpbGVuY2UKKyAqIGNvbXBpbGVyIHdhcm5pbmdzIHVudXNlZCBzdGF0aWMgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIEVWRU5UX0RFRklORV9SQU5HRV9GT1JNQVRfTElURShuYW1lLCBhdHRyX3ZhciwgYml0X3N0YXJ0LCBiaXRfZW5kKSBcCitQTVVfRk9STUFUX0FUVFIobmFtZSwgI2F0dHJfdmFyICI6IiAjYml0X3N0YXJ0ICItIiAjYml0X2VuZCk7CisKICNkZWZpbmUgRVZFTlRfREVGSU5FX1JBTkdFKG5hbWUsIGF0dHJfdmFyLCBiaXRfc3RhcnQsIGJpdF9lbmQpCVwKIHN0YXRpYyB1NjQgZXZlbnRfZ2V0XyMjbmFtZSMjX21heCh2b2lkKQkJCQkJXAogewkJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wZXJmL2h2LWdwY2ktcmVxdWVzdHMuaCBiL2FyY2gvcG93ZXJwYy9wZXJmL2h2LWdwY2ktcmVxdWVzdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2QxNzY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BlcmYvaHYtZ3BjaS1yZXF1ZXN0cy5oCkBAIC0wLDAgKzEsMjYxIEBACisKKyNpbmNsdWRlICJyZXEtZ2VuL19iZWdpbi5oIgorCisvKgorICogQmFzZWQgb24gdGhlIGRvY3VtZW50ICJnZXRQZXJmQ291bnRJbmZvIHYxLjA3IgorICovCisKKy8qCisgKiAjZGVmaW5lIFJFUVVFU1RfTkFNRSBjb3VudGVyX3JlcXVlc3RfbmFtZQorICogI2RlZmluZSBSRVFVRVNUX05VTSByX251bQorICogI2RlZmluZSBSRVFVRVNUX0lEWF9LSU5EIHN0YXJ0aW5nX2luZGV4X2tpbmQKKyAqICNpbmNsdWRlIEkoUkVRVUVTVF9CRUdJTikKKyAqIFJFUVVFU1QoCisgKglfX2ZpZWxkKC4uLikKKyAqCV9fZmllbGQoLi4uKQorICoJX19hcnJheSguLi4pCisgKglfX2NvdW50KC4uLikKKyAqICkKKyAqICNpbmNsdWRlIEkoUkVRVUVTVF9FTkQpCisgKgorICogLSBzdGFydGluZ19pbmRleF9raW5kIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nLCBkZXBlbmRpbmcgb24gdGhlIGV2ZW50OgorICoKKyAqICAgaHdfY2hpcF9pZDogaGFyZHdhcmUgY2hpcCBpZCBvciAtMSBmb3IgY3VycmVudCBodyBjaGlwCisgKiAgIHBhcnRpdGlvbl9pZAorICogICBzaWJsaW5nX3BhcnRfaWQsCisgKiAgIHBoeXNfcHJvY2Vzc29yX2lkeDoKKyAqICAgMHhmZmZmZmZmZmZmZmZmZmZmOiBvciAtMSwgd2hpY2ggbWVhbnMgaXQgaXMgaXJyZWxhdmFudCBmb3IgdGhlIGV2ZW50CisgKgorICogX19jb3VudChvZmZzZXQsIGJ5dGVzLCBuYW1lKToKKyAqCWEgY291bnRlciB0aGF0IHNob3VsZCBiZSBleHBvc2VkIHZpYSBwZXJmCisgKiBfX2ZpZWxkKG9mZnNldCwgYnl0ZXMsIG5hbWUpCisgKglhIG5vcm1hbCBmaWVsZAorICogX19hcnJheShvZmZzZXQsIGJ5dGVzLCBuYW1lKQorICoJYW4gYXJyYXkgb2YgYnl0ZXMKKyAqCisgKgorICoJQGJ5dGVzIGZvciBfX2NvdW50LCBhbmQgX19maWVsZCBfbXVzdF8gYmUgYSBudW1lcmFsIHRva2VuCisgKglpbiBkZWNpbWFsLCBub3QgYW4gZXhwcmVzc2lvbiBhbmQgbm90IGluIGhleC4KKyAqCisgKgorICogVE9ETzoKKyAqCS0gZXhwb3NlIHNlY29uZGFyeSBpbmRleCAoaWYgYW55IGNvdW50ZXIgZXZlciB1c2VzIGl0LCBvbmx5IDB4QTAKKyAqCSAgYXBwZWFycyB0byB1c2UgaXQgcmlnaHQgbm93LCBhbmQgaXQgZG9lc24ndCBoYXZlIGFueSBjb3VudGVycykKKyAqCS0gZW1iZWQgdmVyc2lvbmluZyBpbmZvCisgKgktIGluY2x1ZGUgY291bnRlciBkZXNjcmlwdGlvbnMKKyAqLworI2RlZmluZSBSRVFVRVNUX05BTUUgZGlzcGF0Y2hfdGltZWJhc2VfYnlfcHJvY2Vzc29yCisjZGVmaW5lIFJFUVVFU1RfTlVNIDB4MTAKKyNkZWZpbmUgUkVRVUVTVF9JRFhfS0lORCAicGh5c19wcm9jZXNzb3JfaWR4PT8iCisjaW5jbHVkZSBJKFJFUVVFU1RfQkVHSU4pCitSRVFVRVNUKF9fY291bnQoMCwJOCwJcHJvY2Vzc29yX3RpbWVfaW5fdGltZWJhc2VfY3ljbGVzKQorCV9fZmllbGQoMHg4LAk0LAlod19wcm9jZXNzb3JfaWQpCisJX19maWVsZCgweEMsCTIsCW93bmluZ19wYXJ0X2lkKQorCV9fZmllbGQoMHhFLAkxLAlwcm9jZXNzb3Jfc3RhdGUpCisJX19maWVsZCgweEYsCTEsCXZlcnNpb24pCisJX19maWVsZCgweDEwLAk0LAlod19jaGlwX2lkKQorCV9fZmllbGQoMHgxNCwJNCwJcGh5c19tb2R1bGVfaWQpCisJX19maWVsZCgweDE4LAk0LAlwcmltYXJ5X2FmZmluaXR5X2RvbWFpbl9pZHgpCisJX19maWVsZCgweDFDLAk0LAlzZWNvbmRhcnlfYWZmaW5pdHlfZG9tYWluX2lkeCkKKwlfX2ZpZWxkKDB4MjAsCTQsCXByb2Nlc3Nvcl92ZXJzaW9uKQorCV9fZmllbGQoMHgyNCwJMiwJbG9naWNhbF9wcm9jZXNzb3JfaWR4KQorCV9fZmllbGQoMHgyNiwJMiwJcmVzZXJ2ZWQpCisJX19maWVsZCgweDI4LAk0LAlwcm9jZXNzb3JfaWRfcmVnaXN0ZXIpCisJX19maWVsZCgweDJDLAk0LAlwaHlzX3Byb2Nlc3Nvcl9pZHgpCispCisjaW5jbHVkZSBJKFJFUVVFU1RfRU5EKQorCisjZGVmaW5lIFJFUVVFU1RfTkFNRSBlbnRpdGxlZF9jYXBwZWRfdW5jYXBwZWRfZG9uYXRlZF9pZGxlX3RpbWViYXNlX2J5X3BhcnRpdGlvbgorI2RlZmluZSBSRVFVRVNUX05VTSAweDIwCisjZGVmaW5lIFJFUVVFU1RfSURYX0tJTkQgInNpYmxpbmdfcGFydF9pZD0/IgorI2luY2x1ZGUgSShSRVFVRVNUX0JFR0lOKQorUkVRVUVTVChfX2ZpZWxkKDAsCTgsCXBhcnRpdGlvbl9pZCkKKwlfX2NvdW50KDB4OCwJOCwJZW50aXRsZWRfY3ljbGVzKQorCV9fY291bnQoMHgxMCwJOCwJY29uc3VtZWRfY2FwcGVkX2N5Y2xlcykKKwlfX2NvdW50KDB4MTgsCTgsCWNvbnN1bWVkX3VuY2FwcGVkX2N5Y2xlcykKKwlfX2NvdW50KDB4MjAsCTgsCWN5Y2xlc19kb25hdGVkKQorCV9fY291bnQoMHgyOCwJOCwJcHVycl9pZGxlX2N5Y2xlcykKKykKKyNpbmNsdWRlIEkoUkVRVUVTVF9FTkQpCisKKy8qCisgKiBOb3QgYXZhaWxhYmxlIGZvciBjb3VudGVyX2luZm9fdmVyc2lvbiA+PSAweDgsIHVzZQorICogcnVuX2luc3RydWN0aW9uX2N5Y2xlc19ieV9wYXJ0aXRpb24oMHgxMDApIGluc3RlYWQuCisgKi8KKyNkZWZpbmUgUkVRVUVTVF9OQU1FIHJ1bl9pbnN0cnVjdGlvbnNfcnVuX2N5Y2xlc19ieV9wYXJ0aXRpb24KKyNkZWZpbmUgUkVRVUVTVF9OVU0gMHgzMAorI2RlZmluZSBSRVFVRVNUX0lEWF9LSU5EICJzaWJsaW5nX3BhcnRfaWQ9PyIKKyNpbmNsdWRlIEkoUkVRVUVTVF9CRUdJTikKK1JFUVVFU1QoX19maWVsZCgwLAk4LAlwYXJ0aXRpb25faWQpCisJX19jb3VudCgweDgsCTgsCWluc3RydWN0aW9uc19jb21wbGV0ZWQpCisJX19jb3VudCgweDEwLAk4LAljeWNsZXMpCispCisjaW5jbHVkZSBJKFJFUVVFU1RfRU5EKQorCisjZGVmaW5lIFJFUVVFU1RfTkFNRSBzeXN0ZW1fcGVyZm9ybWFuY2VfY2FwYWJpbGl0aWVzCisjZGVmaW5lIFJFUVVFU1RfTlVNIDB4NDAKKyNkZWZpbmUgUkVRVUVTVF9JRFhfS0lORCAic3RhcnRpbmdfaW5kZXg9MHhmZmZmZmZmZmZmZmZmZmZmIgorI2luY2x1ZGUgSShSRVFVRVNUX0JFR0lOKQorUkVRVUVTVChfX2ZpZWxkKDAsCTEsCXBlcmZfY29sbGVjdF9wcml2aWxlZ2VkKQorCV9fZmllbGQoMHgxLAkxLAljYXBhYmlsaXR5X21hc2spCisJX19hcnJheSgweDIsCTB4RSwJcmVzZXJ2ZWQpCispCisjaW5jbHVkZSBJKFJFUVVFU1RfRU5EKQorCisjZGVmaW5lIFJFUVVFU1RfTkFNRSBwcm9jZXNzb3JfYnVzX3V0aWxpemF0aW9uX2FiY19saW5rcworI2RlZmluZSBSRVFVRVNUX05VTSAweDUwCisjZGVmaW5lIFJFUVVFU1RfSURYX0tJTkQgImh3X2NoaXBfaWQ9PyIKKyNpbmNsdWRlIEkoUkVRVUVTVF9CRUdJTikKK1JFUVVFU1QoX19maWVsZCgwLAk0LAlod19jaGlwX2lkKQorCV9fYXJyYXkoMHg0LAkweEMsCXJlc2VydmVkMSkKKwlfX2NvdW50KDB4MTAsCTgsCXRvdGFsX2xpbmtfY3ljbGVzKQorCV9fY291bnQoMHgxOCwJOCwJaWRsZV9jeWNsZXNfZm9yX2FfbGluaykKKwlfX2NvdW50KDB4MjAsCTgsCWlkbGVfY3ljbGVzX2Zvcl9iX2xpbmspCisJX19jb3VudCgweDI4LAk4LAlpZGxlX2N5Y2xlc19mb3JfY19saW5rKQorCV9fYXJyYXkoMHgzMCwJMHgyMCwJcmVzZXJ2ZWQyKQorKQorI2luY2x1ZGUgSShSRVFVRVNUX0VORCkKKworI2RlZmluZSBSRVFVRVNUX05BTUUgcHJvY2Vzc29yX2J1c191dGlsaXphdGlvbl93eHl6X2xpbmtzCisjZGVmaW5lIFJFUVVFU1RfTlVNIDB4NjAKKyNkZWZpbmUgUkVRVUVTVF9JRFhfS0lORCAiaHdfY2hpcF9pZD0/IgorI2luY2x1ZGUgSShSRVFVRVNUX0JFR0lOKQorUkVRVUVTVChfX2ZpZWxkKDAsCTQsCWh3X2NoaXBfaWQpCisJX19hcnJheSgweDQsCTB4QywJcmVzZXJ2ZWQxKQorCV9fY291bnQoMHgxMCwJOCwJdG90YWxfbGlua19jeWNsZXMpCisJX19jb3VudCgweDE4LAk4LAlpZGxlX2N5Y2xlc19mb3Jfd19saW5rKQorCV9fY291bnQoMHgyMCwJOCwJaWRsZV9jeWNsZXNfZm9yX3hfbGluaykKKwlfX2NvdW50KDB4MjgsCTgsCWlkbGVfY3ljbGVzX2Zvcl95X2xpbmspCisJX19jb3VudCgweDMwLAk4LAlpZGxlX2N5Y2xlc19mb3Jfel9saW5rKQorCV9fYXJyYXkoMHgzOCwJMHgyOCwJcmVzZXJ2ZWQyKQorKQorI2luY2x1ZGUgSShSRVFVRVNUX0VORCkKKworI2RlZmluZSBSRVFVRVNUX05BTUUgcHJvY2Vzc29yX2J1c191dGlsaXphdGlvbl9neF9saW5rcworI2RlZmluZSBSRVFVRVNUX05VTSAweDcwCisjZGVmaW5lIFJFUVVFU1RfSURYX0tJTkQgImh3X2NoaXBfaWQ9PyIKKyNpbmNsdWRlIEkoUkVRVUVTVF9CRUdJTikKK1JFUVVFU1QoX19maWVsZCgwLAk0LAlod19jaGlwX2lkKQorCV9fYXJyYXkoMHg0LAkweEMsCXJlc2VydmVkMSkKKwlfX2NvdW50KDB4MTAsCTgsCWd4MF9pbl9hZGRyZXNzX2N5Y2xlcykKKwlfX2NvdW50KDB4MTgsCTgsCWd4MF9pbl9kYXRhX2N5Y2xlcykKKwlfX2NvdW50KDB4MjAsCTgsCWd4MF9pbl9yZXRyaWVzKQorCV9fY291bnQoMHgyOCwJOCwJZ3gwX2luX2J1c19jeWNsZXMpCisJX19jb3VudCgweDMwLAk4LAlneDBfaW5fY3ljbGVzX3RvdGFsKQorCV9fY291bnQoMHgzOCwJOCwJZ3gwX291dF9hZGRyZXNzX2N5Y2xlcykKKwlfX2NvdW50KDB4NDAsCTgsCWd4MF9vdXRfZGF0YV9jeWNsZXMpCisJX19jb3VudCgweDQ4LAk4LAlneDBfb3V0X3JldHJpZXMpCisJX19jb3VudCgweDUwLAk4LAlneDBfb3V0X2J1c19jeWNsZXMpCisJX19jb3VudCgweDU4LAk4LAlneDBfb3V0X2N5Y2xlc190b3RhbCkKKwlfX2NvdW50KDB4NjAsCTgsCWd4MV9pbl9hZGRyZXNzX2N5Y2xlcykKKwlfX2NvdW50KDB4NjgsCTgsCWd4MV9pbl9kYXRhX2N5Y2xlcykKKwlfX2NvdW50KDB4NzAsCTgsCWd4MV9pbl9yZXRyaWVzKQorCV9fY291bnQoMHg3OCwJOCwJZ3gxX2luX2J1c19jeWNsZXMpCisJX19jb3VudCgweDgwLAk4LAlneDFfaW5fY3ljbGVzX3RvdGFsKQorCV9fY291bnQoMHg4OCwJOCwJZ3gxX291dF9hZGRyZXNzX2N5Y2xlcykKKwlfX2NvdW50KDB4OTAsCTgsCWd4MV9vdXRfZGF0YV9jeWNsZXMpCisJX19jb3VudCgweDk4LAk4LAlneDFfb3V0X3JldHJpZXMpCisJX19jb3VudCgweEEwLAk4LAlneDFfb3V0X2J1c19jeWNsZXMpCisJX19jb3VudCgweEE4LAk4LAlneDFfb3V0X2N5Y2xlc190b3RhbCkKKykKKyNpbmNsdWRlIEkoUkVRVUVTVF9FTkQpCisKKyNkZWZpbmUgUkVRVUVTVF9OQU1FIHByb2Nlc3Nvcl9idXNfdXRpbGl6YXRpb25fbWNfbGlua3MKKyNkZWZpbmUgUkVRVUVTVF9OVU0gMHg4MAorI2RlZmluZSBSRVFVRVNUX0lEWF9LSU5EICJod19jaGlwX2lkPT8iCisjaW5jbHVkZSBJKFJFUVVFU1RfQkVHSU4pCitSRVFVRVNUKF9fZmllbGQoMCwJNCwJaHdfY2hpcF9pZCkKKwlfX2FycmF5KDB4NCwJMHhDLAlyZXNlcnZlZDEpCisJX19jb3VudCgweDEwLAk4LAltYzBfZnJhbWVzKQorCV9fY291bnQoMHgxOCwJOCwJbWMwX3JlYWRzKQorCV9fY291bnQoMHgyMCwJOCwJbWMwX3dyaXRlKQorCV9fY291bnQoMHgyOCwJOCwJbWMwX3RvdGFsX2N5Y2xlcykKKwlfX2NvdW50KDB4MzAsCTgsCW1jMV9mcmFtZXMpCisJX19jb3VudCgweDM4LAk4LAltYzFfcmVhZHMpCisJX19jb3VudCgweDQwLAk4LAltYzFfd3JpdGVzKQorCV9fY291bnQoMHg0OCwJOCwJbWMxX3RvdGFsX2N5Y2xlcykKKykKKyNpbmNsdWRlIEkoUkVRVUVTVF9FTkQpCisKKy8qIFByb2Nlc3Nvcl9jb25maWcgKDB4OTApIHNraXBwZWQsIG5vIGNvdW50ZXJzICovCisvKiBDdXJyZW50X3Byb2Nlc3Nvcl9mcmVxdWVuY3kgKDB4OTEpIHNraXBwZWQsIG5vIGNvdW50ZXJzICovCisKKyNkZWZpbmUgUkVRVUVTVF9OQU1FIHByb2Nlc3Nvcl9jb3JlX3V0aWxpemF0aW9uCisjZGVmaW5lIFJFUVVFU1RfTlVNIDB4OTQKKyNkZWZpbmUgUkVRVUVTVF9JRFhfS0lORCAicGh5c19wcm9jZXNzb3JfaWR4PT8iCisjaW5jbHVkZSBJKFJFUVVFU1RfQkVHSU4pCitSRVFVRVNUKF9fZmllbGQoMCwJNCwJcGh5c19wcm9jZXNzb3JfaWR4KQorCV9fZmllbGQoMHg0LAk0LAlod19wcm9jZXNzb3JfaWQpCisJX19jb3VudCgweDgsCTgsCWN5Y2xlc19hY3Jvc3NfYW55X3RocmVhZCkKKwlfX2NvdW50KDB4MTAsCTgsCXRpbWViYXNlX2F0X2NvbGxlY3Rpb24pCisJX19jb3VudCgweDE4LAk4LAlwdXJyX2N5Y2xlcykKKwlfX2NvdW50KDB4MjAsCTgsCXN1bV9vZl9jeWNsZXNfYWNyb3NzX2FsbF90aHJlYWRzKQorCV9fY291bnQoMHgyOCwJOCwJaW5zdHJ1Y3Rpb25zX2NvbXBsZXRlZCkKKykKKyNpbmNsdWRlIEkoUkVRVUVTVF9FTkQpCisKKy8qIFByb2Nlc3Nvcl9jb3JlX3Bvd2VyX21vZGUgKDB4OTUpIHNraXBwZWQsIG5vIGNvdW50ZXJzICovCisvKiBBZmZpbml0eV9kb21haW5faW5mb3JtYXRpb25fYnlfdmlydHVhbF9wcm9jZXNzb3IgKDB4QTApIHNraXBwZWQsCisgKglubyBjb3VudGVycyAqLworLyogQWZmaW5pdHlfZG9tYWluX2luZm9ybWF0aW9uX2J5X2RvbWFpbiAoMHhCMCkgc2tpcHBlZCwgbm8gY291bnRlcnMgKi8KKy8qIEFmZmluaXR5X2RvbWFpbl9pbmZvcm1hdGlvbl9ieV9wYXJ0aXRpb24gKDB4QjEpIHNraXBwZWQsIG5vIGNvdW50ZXJzICovCisvKiBQaHlzaWNhbF9tZW1vcnlfaW5mbyAoMHhDMCkgc2tpcHBlZCwgbm8gY291bnRlcnMgKi8KKy8qIFByb2Nlc3Nvcl9idXNfdG9wb2xvZ3kgKDB4RDApIHNraXBwZWQsIG5vIGNvdW50ZXJzICovCisKKyNkZWZpbmUgUkVRVUVTVF9OQU1FIHBhcnRpdGlvbl9oeXBlcnZpc29yX3F1ZXVpbmdfdGltZXMKKyNkZWZpbmUgUkVRVUVTVF9OVU0gMHhFMAorI2RlZmluZSBSRVFVRVNUX0lEWF9LSU5EICJwYXJ0aXRpb25faWQ9PyIKKyNpbmNsdWRlIEkoUkVRVUVTVF9CRUdJTikKK1JFUVVFU1QoX19maWVsZCgwLAkyLCBwYXJ0aXRpb25faWQpCisJX19hcnJheSgweDIsCTYsIHJlc2VydmVkMSkKKwlfX2NvdW50KDB4OCwJOCwgdGltZV93YWl0aW5nX2Zvcl9lbnRpdGxlbWVudCkKKwlfX2NvdW50KDB4MTAsCTgsIHRpbWVzX3dhaXRlZF9mb3JfZW50aXRsZW1lbnQpCisJX19jb3VudCgweDE4LAk4LCB0aW1lX3dhaXRpbmdfZm9yX3BoeXNfcHJvY2Vzc29yKQorCV9fY291bnQoMHgyMCwJOCwgdGltZXNfd2FpdGVkX2Zvcl9waHlzX3Byb2Nlc3NvcikKKwlfX2NvdW50KDB4MjgsCTgsIGRpc3BhdGNoZXNfb25faG9tZV9jb3JlKQorCV9fY291bnQoMHgzMCwJOCwgZGlzcGF0Y2hlc19vbl9ob21lX3ByaW1hcnlfYWZmaW5pdHlfZG9tYWluKQorCV9fY291bnQoMHgzOCwJOCwgZGlzcGF0Y2hlc19vbl9ob21lX3NlY29uZGFyeV9hZmZpbml0eV9kb21haW4pCisJX19jb3VudCgweDQwLAk4LCBkaXNwYXRjaGVzX29mZl9ob21lX3NlY29uZGFyeV9hZmZpbml0eV9kb21haW4pCisJX19jb3VudCgweDQ4LAk4LCBkaXNwYXRjaGVzX29uX2RlZGljYXRlZF9wcm9jZXNzb3JfZG9uYXRpbmdfY3ljbGVzKQorKQorI2luY2x1ZGUgSShSRVFVRVNUX0VORCkKKworI2RlZmluZSBSRVFVRVNUX05BTUUgc3lzdGVtX2h5cGVydmlzb3JfdGltZXMKKyNkZWZpbmUgUkVRVUVTVF9OVU0gMHhGMAorI2RlZmluZSBSRVFVRVNUX0lEWF9LSU5EICJzdGFydGluZ19pbmRleD0weGZmZmZmZmZmZmZmZmZmZmYiCisjaW5jbHVkZSBJKFJFUVVFU1RfQkVHSU4pCitSRVFVRVNUKF9fY291bnQoMCwJOCwJdGltZV9zcGVudF90b19kaXNwYXRjaF92aXJ0dWFsX3Byb2Nlc3NvcnMpCisJX19jb3VudCgweDgsCTgsCXRpbWVfc3BlbnRfcHJvY2Vzc2luZ192aXJ0dWFsX3Byb2Nlc3Nvcl90aW1lcnMpCisJX19jb3VudCgweDEwLAk4LAl0aW1lX3NwZW50X21hbmFnaW5nX3BhcnRpdGlvbnNfb3Zlcl9lbnRpdGxlbWVudCkKKwlfX2NvdW50KDB4MTgsCTgsCXRpbWVfc3BlbnRfb25fc3lzdGVtX21hbmFnZW1lbnQpCispCisjaW5jbHVkZSBJKFJFUVVFU1RfRU5EKQorCisjZGVmaW5lIFJFUVVFU1RfTkFNRSBzeXN0ZW1fdGxiaWVfY291bnRfYW5kX3RpbWUKKyNkZWZpbmUgUkVRVUVTVF9OVU0gMHhGNAorI2RlZmluZSBSRVFVRVNUX0lEWF9LSU5EICJzdGFydGluZ19pbmRleD0weGZmZmZmZmZmZmZmZmZmZmYiCisjaW5jbHVkZSBJKFJFUVVFU1RfQkVHSU4pCitSRVFVRVNUKF9fY291bnQoMCwJOCwJdGxiaWVfaW5zdHJ1Y3Rpb25zX2lzc3VlZCkKKwkvKgorCSAqIEZJWE1FOiBUaGUgc3BlYyBzYXlzIHRoZSBvZmZzZXQgaGVyZSBpcyAweDEwLCB3aGljaCBJIHN1c3BlY3QKKwkgKgkgIGlzIHdyb25nLgorCSAqLworCV9fY291bnQoMHg4LAk4LAl0aW1lX3NwZW50X2lzc3VpbmdfdGxiaWVzKQorKQorI2luY2x1ZGUgSShSRVFVRVNUX0VORCkKKworI2RlZmluZSBSRVFVRVNUX05BTUUgcGFydGl0aW9uX2luc3RydWN0aW9uX2NvdW50X2FuZF90aW1lCisjZGVmaW5lIFJFUVVFU1RfTlVNIDB4MTAwCisjZGVmaW5lIFJFUVVFU1RfSURYX0tJTkQgInBhcnRpdGlvbl9pZD0/IgorI2luY2x1ZGUgSShSRVFVRVNUX0JFR0lOKQorUkVRVUVTVChfX2ZpZWxkKDAsCTIsCXBhcnRpdGlvbl9pZCkKKwlfX2FycmF5KDB4MiwJMHg2LAlyZXNlcnZlZDEpCisJX19jb3VudCgweDgsCTgsCWluc3RydWN0aW9uc19wZXJmb3JtZWQpCisJX19jb3VudCgweDEwLAk4LAl0aW1lX2NvbGxlY3RlZCkKKykKKyNpbmNsdWRlIEkoUkVRVUVTVF9FTkQpCisKKy8qIHNldF9tbWNyaCAoMHg4MDAwMTAwMCkgc2tpcHBlZCwgbm8gY291bnRlcnMgKi8KKy8qIHJldHJpZXZlX2hwbWN4ICgweDgwMDAyMDAwKSBza2lwcGVkLCBubyBjb3VudGVycyAqLworCisjaW5jbHVkZSAicmVxLWdlbi9fZW5kLmgiCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGVyZi9odi1ncGNpLmMgYi9hcmNoL3Bvd2VycGMvcGVyZi9odi1ncGNpLmMKaW5kZXggYTA1MWZlOS4uODU2ZmU2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BlcmYvaHYtZ3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wZXJmL2h2LWdwY2kuYwpAQCAtMzEsNyArMzEsMTggQEAKIC8qIHUzMiAqLwogRVZFTlRfREVGSU5FX1JBTkdFX0ZPUk1BVChyZXF1ZXN0LCBjb25maWcsIDAsIDMxKTsKIC8qIHUzMiAqLworLyoKKyAqIE5vdGUgdGhhdCBzdGFydGluZ19pbmRleCwgcGh5c19wcm9jZXNzb3JfaWR4LCBzaWJsaW5nX3BhcnRfaWQsCisgKiBod19jaGlwX2lkLCBwYXJ0aXRpb25faWQgYWxsIHJlZmVyIHRvIHRoZSBzYW1lIGJpdCByYW5nZS4gVGhleQorICogYXJlIGJhc2ljYWxseSBhbGlhc2VzIGZvciB0aGUgc3RhcnRpbmdfaW5kZXguIFRoZSBzcGVjaWZpYyBhbGlhcworICogdXNlZCBkZXBlbmRzIG9uIHRoZSBldmVudC4gU2VlIFJFUVVFU1RfSURYX0tJTkQgaW4gaHYtZ3BjaS1yZXF1ZXN0cy5oCisgKi8KIEVWRU5UX0RFRklORV9SQU5HRV9GT1JNQVQoc3RhcnRpbmdfaW5kZXgsIGNvbmZpZywgMzIsIDYzKTsKK0VWRU5UX0RFRklORV9SQU5HRV9GT1JNQVRfTElURShwaHlzX3Byb2Nlc3Nvcl9pZHgsIGNvbmZpZywgMzIsIDYzKTsKK0VWRU5UX0RFRklORV9SQU5HRV9GT1JNQVRfTElURShzaWJsaW5nX3BhcnRfaWQsIGNvbmZpZywgMzIsIDYzKTsKK0VWRU5UX0RFRklORV9SQU5HRV9GT1JNQVRfTElURShod19jaGlwX2lkLCBjb25maWcsIDMyLCA2Myk7CitFVkVOVF9ERUZJTkVfUkFOR0VfRk9STUFUX0xJVEUocGFydGl0aW9uX2lkLCBjb25maWcsIDMyLCA2Myk7CisKIC8qIHUxNiAqLwogRVZFTlRfREVGSU5FX1JBTkdFX0ZPUk1BVChzZWNvbmRhcnlfaW5kZXgsIGNvbmZpZzEsIDAsIDE1KTsKIC8qIHU4ICovCkBAIC00NCw2ICs1NSwxMCBAQAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZvcm1hdF9hdHRyc1tdID0gewogCSZmb3JtYXRfYXR0cl9yZXF1ZXN0LmF0dHIsCiAJJmZvcm1hdF9hdHRyX3N0YXJ0aW5nX2luZGV4LmF0dHIsCisJJmZvcm1hdF9hdHRyX3BoeXNfcHJvY2Vzc29yX2lkeC5hdHRyLAorCSZmb3JtYXRfYXR0cl9zaWJsaW5nX3BhcnRfaWQuYXR0ciwKKwkmZm9ybWF0X2F0dHJfaHdfY2hpcF9pZC5hdHRyLAorCSZmb3JtYXRfYXR0cl9wYXJ0aXRpb25faWQuYXR0ciwKIAkmZm9ybWF0X2F0dHJfc2Vjb25kYXJ5X2luZGV4LmF0dHIsCiAJJmZvcm1hdF9hdHRyX2NvdW50ZXJfaW5mb192ZXJzaW9uLmF0dHIsCiAKQEAgLTU3LDYgKzcyLDExIEBACiAJLmF0dHJzID0gZm9ybWF0X2F0dHJzLAogfTsKIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZXZlbnRfZ3JvdXAgPSB7CisJLm5hbWUgID0gImV2ZW50cyIsCisJLmF0dHJzID0gaHZfZ3BjaV9ldmVudF9hdHRycywKK307CisKICNkZWZpbmUgSFZfQ0FQU19BVFRSKF9uYW1lLCBfZm9ybWF0KQkJCQlcCiBzdGF0aWMgc3NpemVfdCBfbmFtZSMjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAkJCVwKIAkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXApAQCAtMTAyLDYgKzEyMiw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICphdHRyX2dyb3Vwc1tdID0gewogCSZmb3JtYXRfZ3JvdXAsCisJJmV2ZW50X2dyb3VwLAogCSZpbnRlcmZhY2VfZ3JvdXAsCiAJTlVMTCwKIH07CkBAIC0yNjUsNiArMjg2LDggQEAKIAl1bnNpZ25lZCBsb25nIGhyZXQ7CiAJc3RydWN0IGh2X3BlcmZfY2FwcyBjYXBzOwogCisJaHZfZ3BjaV9hc3NlcnRfb2Zmc2V0c19jb3JyZWN0KCk7CisKIAlpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpIHsKIAkJcHJfZGVidWcoIm5vdCBhIHZpcnR1YWxpemVkIHN5c3RlbSwgbm90IGVuYWJsaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGVyZi9odi1ncGNpLmggYi9hcmNoL3Bvd2VycGMvcGVyZi9odi1ncGNpLmgKaW5kZXggYjI1ZjQ2MC4uODZlZGU4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BlcmYvaHYtZ3BjaS5oCisrKyBiL2FyY2gvcG93ZXJwYy9wZXJmL2h2LWdwY2kuaApAQCAtNDIsMzIgKzQyLDE5IEBACiAgKi8KICNkZWZpbmUgQ09VTlRFUl9JTkZPX1ZFUlNJT05fQ1VSUkVOVCAweDgKIAotLyoKLSAqIFRoZXNlIGRldGVybWluZSB0aGUgY291bnRlcl92YWx1ZVtdIGxheW91dCBhbmQgdGhlIG1lYW5pbmcgb2Ygc3RhcnRpbmdfaW5kZXgKLSAqIGFuZCBzZWNvbmRhcnlfaW5kZXguCi0gKgotICogVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgQHNlY29uZGFyeV9pbmRleCBpcyB1bnVzZWQgYW5kIGlnbm9yZWQuCi0gKi8KLWVudW0gY291bnRlcl9pbmZvX3JlcXVlc3RzIHsKLQotCS8qIEdFTkVSQUwgKi8KLQotCS8qIEBzdGFydGluZ19pbmRleDogbXVzdCBiZSAtMSAodG8gcmVmZXIgdG8gdGhlIGN1cnJlbnQgcGFydGl0aW9uKQotCSAqLwotCUNJUl9TWVNURU1fUEVSRk9STUFOQ0VfQ0FQQUJJTElUSUVTID0gMFg0MCwKKy8qIGNhcGFiaWxpdHkgbWFzayBtYXNrcy4gKi8KK2VudW0geworCUhWX0dQQ0lfQ01fR0EgPSAoMSA8PCA3KSwKKwlIVl9HUENJX0NNX0VYUEFOREVEID0gKDEgPDwgNiksCisJSFZfR1BDSV9DTV9MQUIgPSAoMSA8PCA1KQogfTsKIAotc3RydWN0IGN2X3N5c3RlbV9wZXJmb3JtYW5jZV9jYXBhYmlsaXRpZXMgewotCS8qIElmICE9IDAsIGFsbG93ZWQgdG8gY29sbGVjdCBkYXRhIGZyb20gb3RoZXIgcGFydGl0aW9ucyAqLwotCV9fdTggcGVyZl9jb2xsZWN0X3ByaXZpbGVnZWQ7Ci0KLQkvKiBUaGVzZSBmb2xsb3dpbmcgYXJlIG9ubHkgdmFsaWQgaWYgY291bnRlcl9pbmZvX3ZlcnNpb24gPj0gMHgzICovCi0jZGVmaW5lIENWX0NNX0dBICAgICAgICgxIDw8IDcpCi0jZGVmaW5lIENWX0NNX0VYUEFOREVEICgxIDw8IDYpCi0jZGVmaW5lIENWX0NNX0xBQiAgICAgICgxIDw8IDUpCi0JLyogcmVtYWluaW5nIGJpdHMgYXJlIHJlc2VydmVkICovCi0JX191OCBjYXBhYmlsaXR5X21hc2s7Ci0JX191OCByZXNlcnZlZFsweEVdOwotfSBfX3BhY2tlZDsKKyNkZWZpbmUgUkVRVUVTVF9GSUxFICIuLi9odi1ncGNpLXJlcXVlc3RzLmgiCisjZGVmaW5lIE5BTUVfTE9XRVIgaHZfZ3BjaQorI2RlZmluZSBOQU1FX1VQUEVSIEhWX0dQQ0kKKyNpbmNsdWRlICJyZXEtZ2VuL3BlcmYuaCIKKyN1bmRlZiBSRVFVRVNUX0ZJTEUKKyN1bmRlZiBOQU1FX0xPV0VSCisjdW5kZWYgTkFNRV9VUFBFUgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wZXJmL3JlcS1nZW4vX2JlZ2luLmggYi9hcmNoL3Bvd2VycGMvcGVyZi9yZXEtZ2VuL19iZWdpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjZmIxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGVyZi9yZXEtZ2VuL19iZWdpbi5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qIEluY2x1ZGUgcGF0aHMgdG8gYmUgdXNlZCBpbiBpbnRlcmZhY2UgZGVmaW5pbmcgaGVhZGVycyAqLworI2lmbmRlZiBQT1dFUlBDX1BFUkZfUkVRX0dFTl9IXworI2RlZmluZSBQT1dFUlBDX1BFUkZfUkVRX0dFTl9IXworCisjZGVmaW5lIENBVDJfU1RSXyh0LCBzKSBfX3N0cmluZ2lmeSh0L3MpCisjZGVmaW5lIENBVDJfU1RSKHQsIHMpIENBVDJfU1RSXyh0LCBzKQorI2RlZmluZSBJKC4uLikgX19WQV9BUkdTX18KKworI2VuZGlmCisKKyNkZWZpbmUgUkVRX0dFTl9QUkVGSVggcmVxLWdlbgorI2RlZmluZSBSRVFVRVNUX0JFR0lOIENBVDJfU1RSKFJFUV9HRU5fUFJFRklYLCBfcmVxdWVzdC1iZWdpbi5oKQorI2RlZmluZSBSRVFVRVNUX0VORCAgIENBVDJfU1RSKFJFUV9HRU5fUFJFRklYLCBfcmVxdWVzdC1lbmQuaCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wZXJmL3JlcS1nZW4vX2NsZWFyLmggYi9hcmNoL3Bvd2VycGMvcGVyZi9yZXEtZ2VuL19jbGVhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMjk3NGYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGVyZi9yZXEtZ2VuL19jbGVhci5oCkBAIC0wLDAgKzEsNSBAQAorCisjdW5kZWYgX19maWVsZF8KKyN1bmRlZiBfX2NvdW50XworI3VuZGVmIF9fYXJyYXlfCisjdW5kZWYgUkVRVUVTVF8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wZXJmL3JlcS1nZW4vX2VuZC5oIGIvYXJjaC9wb3dlcnBjL3BlcmYvcmVxLWdlbi9fZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0MDY5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wZXJmL3JlcS1nZW4vX2VuZC5oCkBAIC0wLDAgKzEsNCBAQAorCisjdW5kZWYgUkVRX0dFTl9QUkVGSVgKKyN1bmRlZiBSRVFVRVNUX0JFR0lOCisjdW5kZWYgUkVRVUVTVF9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wZXJmL3JlcS1nZW4vX3JlcXVlc3QtYmVnaW4uaCBiL2FyY2gvcG93ZXJwYy9wZXJmL3JlcS1nZW4vX3JlcXVlc3QtYmVnaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmQ5ODY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BlcmYvcmVxLWdlbi9fcmVxdWVzdC1iZWdpbi5oCkBAIC0wLDAgKzEsMTUgQEAKKworI2RlZmluZSBSRVFVRVNUKHJfY29udGVudHMpIFwKKwlSRVFVRVNUXyhSRVFVRVNUX05BTUUsIFJFUVVFU1RfTlVNLCBSRVFVRVNUX0lEWF9LSU5ELCBJKHJfY29udGVudHMpKQorCisjZGVmaW5lIF9fZmllbGQoZl9vZmZzZXQsIGZfYnl0ZXMsIGZfbmFtZSkgXAorCV9fZmllbGRfKFJFUVVFU1RfTkFNRSwgUkVRVUVTVF9OVU0sIFJFUVVFU1RfSURYX0tJTkQsIFwKKwkJIGZfb2Zmc2V0LCBmX2J5dGVzLCBmX25hbWUpCisKKyNkZWZpbmUgX19hcnJheShmX29mZnNldCwgZl9ieXRlcywgZl9uYW1lKSBcCisJX19hcnJheV8oUkVRVUVTVF9OQU1FLCBSRVFVRVNUX05VTSwgUkVRVUVTVF9JRFhfS0lORCwgXAorCQkgZl9vZmZzZXQsIGZfYnl0ZXMsIGZfbmFtZSkKKworI2RlZmluZSBfX2NvdW50KGZfb2Zmc2V0LCBmX2J5dGVzLCBmX25hbWUpIFwKKwlfX2NvdW50XyhSRVFVRVNUX05BTUUsIFJFUVVFU1RfTlVNLCBSRVFVRVNUX0lEWF9LSU5ELCBcCisJCSBmX29mZnNldCwgZl9ieXRlcywgZl9uYW1lKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BlcmYvcmVxLWdlbi9fcmVxdWVzdC1lbmQuaCBiL2FyY2gvcG93ZXJwYy9wZXJmL3JlcS1nZW4vX3JlcXVlc3QtZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU3M2JlNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wZXJmL3JlcS1nZW4vX3JlcXVlc3QtZW5kLmgKQEAgLTAsMCArMSw4IEBACisjdW5kZWYgUkVRVUVTVAorI3VuZGVmIF9fZmllbGQKKyN1bmRlZiBfX2FycmF5CisjdW5kZWYgX19jb3VudAorCisjdW5kZWYgUkVRVUVTVF9OQU1FCisjdW5kZWYgUkVRVUVTVF9OVU0KKyN1bmRlZiBSRVFVRVNUX0lEWF9LSU5ECmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGVyZi9yZXEtZ2VuL3BlcmYuaCBiL2FyY2gvcG93ZXJwYy9wZXJmL3JlcS1nZW4vcGVyZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMTIyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGVyZi9yZXEtZ2VuL3BlcmYuaApAQCAtMCwwICsxLDE1NSBAQAorI2lmbmRlZiBMSU5VWF9QT1dFUlBDX1BFUkZfUkVRX0dFTl9QRVJGX0hfCisjZGVmaW5lIExJTlVYX1BPV0VSUENfUEVSRl9SRVFfR0VOX1BFUkZfSF8KKworI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKworI2lmbmRlZiBSRVFVRVNUX0ZJTEUKKyNlcnJvciAiUkVRVUVTVF9GSUxFIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIgorI2VuZGlmCisKKyNpZm5kZWYgTkFNRV9MT1dFUgorI2Vycm9yICJOQU1FX0xPV0VSIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIgorI2VuZGlmCisKKyNpZm5kZWYgTkFNRV9VUFBFUgorI2Vycm9yICJOQU1FX1VQUEVSIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIgorI2VuZGlmCisKKyNkZWZpbmUgQkVfVFlQRV9iMSBfX3U4CisjZGVmaW5lIEJFX1RZUEVfYjIgX19iZTE2CisjZGVmaW5lIEJFX1RZUEVfYjQgX19iZTMyCisjZGVmaW5lIEJFX1RZUEVfYjggX19iZTY0CisKKyNkZWZpbmUgQllURVNfVE9fQkVfVFlQRShieXRlcykgXAorCQlCRV9UWVBFX2IjI2J5dGVzCisKKyNkZWZpbmUgQ0FUMl8oYSwgYikgYSAjIyBiCisjZGVmaW5lIENBVDIoYSwgYikgQ0FUMl8oYSwgYikKKyNkZWZpbmUgQ0FUM18oYSwgYiwgYykgYSAjIyBiICMjIGMKKyNkZWZpbmUgQ0FUMyhhLCBiLCBjKSBDQVQzXyhhLCBiLCBjKQorCisvKgorICogZW51bWVyYXRlIHRoZSByZXF1ZXN0IHZhbHVlcyBhcworICogPE5BTUVfVVBQRVI+XzxyZXF1ZXN0IG5hbWU+ID0gPHJlcXVlc3QgdmFsdWU+CisgKi8KKyNkZWZpbmUgUkVRVUVTVF9WQUxVRV9fKG5hbWVfdXBwZXIsIHJfbmFtZSkgbmFtZV91cHBlciAjIyBfICMjIHJfbmFtZQorI2RlZmluZSBSRVFVRVNUX1ZBTFVFXyhuYW1lX3VwcGVyLCByX25hbWUpIFJFUVVFU1RfVkFMVUVfXyhuYW1lX3VwcGVyLCByX25hbWUpCisjZGVmaW5lIFJFUVVFU1RfVkFMVUUocl9uYW1lKSBSRVFVRVNUX1ZBTFVFXyhOQU1FX1VQUEVSLCByX25hbWUpCisKKyNpbmNsdWRlICJfY2xlYXIuaCIKKyNkZWZpbmUgUkVRVUVTVF8ocl9uYW1lLCByX3ZhbHVlLCByX2lkeF8xLCByX2ZpZWxkcykgXAorCVJFUVVFU1RfVkFMVUUocl9uYW1lKSA9IHJfdmFsdWUsCitlbnVtIENBVDIoTkFNRV9MT1dFUiwgX3JlcXVlc3RzKSB7CisjaW5jbHVkZSBSRVFVRVNUX0ZJTEUKK307CisKKy8qCisgKiBGb3IgZWFjaCByZXF1ZXN0OgorICogc3RydWN0IDxOQU1FX0xPV0VSPl88cmVxdWVzdCBuYW1lPiB7CisgKglyX2ZpZWxkcworICogfTsKKyAqLworI2luY2x1ZGUgIl9jbGVhci5oIgorI2RlZmluZSBTVFJVQ1RfTkFNRV9fKG5hbWVfbG93ZXIsIHJfbmFtZSkgbmFtZV9sb3dlciAjIyBfICMjIHJfbmFtZQorI2RlZmluZSBTVFJVQ1RfTkFNRV8obmFtZV9sb3dlciwgcl9uYW1lKSBTVFJVQ1RfTkFNRV9fKG5hbWVfbG93ZXIsIHJfbmFtZSkKKyNkZWZpbmUgU1RSVUNUX05BTUUocl9uYW1lKSBTVFJVQ1RfTkFNRV8oTkFNRV9MT1dFUiwgcl9uYW1lKQorI2RlZmluZSBSRVFVRVNUXyhyX25hbWUsIHJfdmFsdWUsIHJfaWR4XzEsIHJfZmllbGRzKQlcCitzdHJ1Y3QgU1RSVUNUX05BTUUocl9uYW1lKSB7CQkJCVwKKwlyX2ZpZWxkcwkJCQkJXAorfTsKKyNkZWZpbmUgX19maWVsZF8ocl9uYW1lLCByX3ZhbHVlLCByX2lkeF8xLCBmX29mZnNldCwgZl9ieXRlcywgZl9uYW1lKSBcCisJQllURVNfVE9fQkVfVFlQRShmX2J5dGVzKSBmX25hbWU7CisjZGVmaW5lIF9fY291bnRfKHJfbmFtZSwgcl92YWx1ZSwgcl9pZHhfMSwgZl9vZmZzZXQsIGZfYnl0ZXMsIGZfbmFtZSkgXAorCV9fZmllbGRfKHJfbmFtZSwgcl92YWx1ZSwgcl9pZHhfMSwgZl9vZmZzZXQsIGZfYnl0ZXMsIGZfbmFtZSkKKyNkZWZpbmUgX19hcnJheV8ocl9uYW1lLCByX3ZhbHVlLCByX2lkeF8xLCBhX29mZnNldCwgYV9ieXRlcywgYV9uYW1lKSBcCisJX191OCBhX25hbWVbYV9ieXRlc107CisKKyNpbmNsdWRlIFJFUVVFU1RfRklMRQorCisvKgorICogR2VuZXJhdGUgYSBjaGVjayBvZiB0aGUgZmllbGQgb2Zmc2V0cworICogPE5BTUVfTE9XRVI+X2Fzc2VydF9vZmZzZXRzX2NvcnJlY3QoKQorICovCisjaW5jbHVkZSAiX2NsZWFyLmgiCisjZGVmaW5lIFJFUVVFU1RfKHJfbmFtZSwgcl92YWx1ZSwgaW5kZXgsIHJfZmllbGRzKQkJCVwKK3JfZmllbGRzCisjZGVmaW5lIF9fZmllbGRfKHJfbmFtZSwgcl92YWx1ZSwgcl9pZHhfMSwgZl9vZmZzZXQsIGZfc2l6ZSwgZl9uYW1lKSBcCisJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBTVFJVQ1RfTkFNRShyX25hbWUpLCBmX25hbWUpICE9IGZfb2Zmc2V0KTsKKyNkZWZpbmUgX19jb3VudF8ocl9uYW1lLCByX3ZhbHVlLCByX2lkeF8xLCBjX29mZnNldCwgY19zaXplLCBjX25hbWUpIFwKKwlfX2ZpZWxkXyhyX25hbWUsIHJfdmFsdWUsIHJfaWR4XzEsIGNfb2Zmc2V0LCBjX3NpemUsIGNfbmFtZSkKKyNkZWZpbmUgX19hcnJheV8ocl9uYW1lLCByX3ZhbHVlLCByX2lkeF8xLCBhX29mZnNldCwgYV9zaXplLCBhX25hbWUpIFwKKwlfX2ZpZWxkXyhyX25hbWUsIHJfdmFsdWUsIHJfaWR4XzEsIGFfb2Zmc2V0LCBhX3NpemUsIGFfbmFtZSkKKworc3RhdGljIGlubGluZSB2b2lkIENBVDIoTkFNRV9MT1dFUiwgX2Fzc2VydF9vZmZzZXRzX2NvcnJlY3QpKHZvaWQpCit7CisjaW5jbHVkZSBSRVFVRVNUX0ZJTEUKK30KKworLyoKKyAqIEdlbmVyYXRlIGV2ZW50IGF0dHJpYnV0ZXM6CisgKiBQTVVfRVZFTlRfQVRUUl9TVFJJTkcoPHJlcXVlc3QgbmFtZT5fPGZpZWxkIG5hbWU+LAorICoJPE5BTUVfTE9XRVI+X2V2ZW50X2F0dHJfPHJlcXVlc3QgbmFtZT5fPGZpZWxkIG5hbWU+LAorICoJCSJyZXF1ZXN0PTxyZXF1ZXN0IHZhbHVlPiIKKyAqCQkic3RhcnRpbmdfaW5kZXg9PHN0YXJ0aW5nIGluZGV4IHR5cGU+IgorICoJCSJjb3VudGVyX2luZm9fdmVyc2lvbj1DVVJSRU5UX0NPVU5URVJfSU5GT19WRVJTSU9OIgorICoJCSJsZW5ndGg9PGZfc2l6ZT4iCisgKgkJIm9mZnNldD08Zl9vZmZzZXQ+IikKKyAqCisgKglUT0RPOiBjb3VudGVyX2luZm9fdmVyc2lvbiBtYXkgbmVlZCB0byB2YXJ5LCB3ZSBzaG91bGQgaW50ZXJwZXJhdGUgdGhlCisgKgl2YWx1ZSB0byBzb21lIGV4dGVudAorICovCisjZGVmaW5lIEVWRU5UX0FUVFJfTkFNRV9fKG5hbWUsIHJfbmFtZSwgY19uYW1lKSBcCisJbmFtZSAjIyBfZXZlbnRfYXR0cl8gIyMgcl9uYW1lICMjIF8gIyMgY19uYW1lCisjZGVmaW5lIEVWRU5UX0FUVFJfTkFNRV8obmFtZSwgcl9uYW1lLCBjX25hbWUpIFwKKwlFVkVOVF9BVFRSX05BTUVfXyhuYW1lLCByX25hbWUsIGNfbmFtZSkKKyNkZWZpbmUgRVZFTlRfQVRUUl9OQU1FKHJfbmFtZSwgY19uYW1lKSBcCisJRVZFTlRfQVRUUl9OQU1FXyhOQU1FX0xPV0VSLCByX25hbWUsIGNfbmFtZSkKKworI2luY2x1ZGUgIl9jbGVhci5oIgorI2RlZmluZSBfX2ZpZWxkXyhyX25hbWUsIHJfdmFsdWUsIHJfaWR4XzEsIGZfb2Zmc2V0LCBmX3NpemUsIGZfbmFtZSkKKyNkZWZpbmUgX19hcnJheV8ocl9uYW1lLCByX3ZhbHVlLCByX2lkeF8xLCBhX29mZnNldCwgYV9zaXplLCBhX25hbWUpCisjZGVmaW5lIF9fY291bnRfKHJfbmFtZSwgcl92YWx1ZSwgcl9pZHhfMSwgY19vZmZzZXQsIGNfc2l6ZSwgY19uYW1lKQlcCitQTVVfRVZFTlRfQVRUUl9TVFJJTkcoCQkJCQkJCVwKKwkJQ0FUMyhyX25hbWUsIF8sIGNfbmFtZSksCQkJCVwKKwkJRVZFTlRfQVRUUl9OQU1FKHJfbmFtZSwgY19uYW1lKSwJCQlcCisJCSJyZXF1ZXN0PSIgX19zdHJpbmdpZnkocl92YWx1ZSkgIiwiCQkJXAorCQlyX2lkeF8xICIsIgkJCQkJCVwKKwkJImNvdW50ZXJfaW5mb192ZXJzaW9uPSIJCQkJCVwKKwkJCV9fc3RyaW5naWZ5KENPVU5URVJfSU5GT19WRVJTSU9OX0NVUlJFTlQpICIsIglcCisJCSJsZW5ndGg9IiAjY19zaXplICIsIgkJCQkJXAorCQkib2Zmc2V0PSIgI2Nfb2Zmc2V0KQorI2RlZmluZSBSRVFVRVNUXyhyX25hbWUsIHJfdmFsdWUsIHJfaWR4XzEsIHJfZmllbGRzKQkJCVwKKwlyX2ZpZWxkcworCisjaW5jbHVkZSBSRVFVRVNUX0ZJTEUKKworLyoKKyAqIERlZmluZSBldmVudCBhdHRyaWJ1dGUgYXJyYXkKKyAqIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpodl9ncGNpX2V2ZW50X2F0dHJzW10gPSB7CisgKgkmPE5BTUVfTE9XRVI+X2V2ZW50X2F0dHJfPHJlcXVlc3QgbmFtZT5fPGZpZWxkIG5hbWU+LmF0dHIsCisgKiB9OworICovCisjaW5jbHVkZSAiX2NsZWFyLmgiCisjZGVmaW5lIF9fZmllbGRfKHJfbmFtZSwgcl92YWx1ZSwgcl9pZHhfMSwgZl9vZmZzZXQsIGZfc2l6ZSwgZl9uYW1lKQorI2RlZmluZSBfX2NvdW50XyhyX25hbWUsIHJfdmFsdWUsIHJfaWR4XzEsIGNfb2Zmc2V0LCBjX3NpemUsIGNfbmFtZSkJXAorCSZFVkVOVF9BVFRSX05BTUUocl9uYW1lLCBjX25hbWUpLmF0dHIuYXR0ciwKKyNkZWZpbmUgX19hcnJheV8ocl9uYW1lLCByX3ZhbHVlLCByX2lkeF8xLCBhX29mZnNldCwgYV9zaXplLCBhX25hbWUpCisjZGVmaW5lIFJFUVVFU1RfKHJfbmFtZSwgcl92YWx1ZSwgcl9pZHhfMSwgcl9maWVsZHMpCQkJXAorCXJfZmllbGRzCisKK3N0YXRpYyBfX21heWJlX3VudXNlZCBzdHJ1Y3QgYXR0cmlidXRlICpodl9ncGNpX2V2ZW50X2F0dHJzW10gPSB7CisjaW5jbHVkZSBSRVFVRVNUX0ZJTEUKKwlOVUxMCit9OworCisvKiBjbGVhbnVwICovCisjaW5jbHVkZSAiX2NsZWFyLmgiCisjdW5kZWYgRVZFTlRfQVRUUl9OQU1FCisjdW5kZWYgRVZFTlRfQVRUUl9OQU1FXworI3VuZGVmIEJJVF9OQU1FCisjdW5kZWYgQklUX05BTUVfCisjdW5kZWYgU1RSVUNUX05BTUUKKyN1bmRlZiBSRVFVRVNUX1ZBTFVFCisjdW5kZWYgUkVRVUVTVF9WQUxVRV8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZwppbmRleCBkMmFjMWMxLi41NTM4ZTU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcKQEAgLTIxNCw3ICsyMTQsNiBAQAogCXNlbGVjdCBFVEhFUk5FVAogCXNlbGVjdCBORVRfVkVORE9SX0lCTQogCXNlbGVjdCBJQk1fRU1BQ19FTUFDNAotCXNlbGVjdCBJQk1fRU1BQ19SR01JSV9XT0wKIAlzZWxlY3QgVVNCIGlmIFVTQl9TVVBQT1JUCiAJc2VsZWN0IFVTQl9PSENJX0hDRF9QTEFURk9STSBpZiBVU0JfT0hDSV9IQ0QKIAlzZWxlY3QgVVNCX0VIQ0lfSENEX1BMQVRGT1JNIGlmIFVTQl9FSENJX0hDRApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3VzYi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3VzYi5jCmluZGV4IDFhZDc0OGIuLjVjMzFkODIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC91c2IuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvdXNiLmMKQEAgLTE2Miw4ICsxNjIsNyBAQAogCiAJaW91bm1hcChpbW1hcCk7CiAKLQlpZiAoaW1tcl9ub2RlKQotCQlvZl9ub2RlX3B1dChpbW1yX25vZGUpOworCW9mX25vZGVfcHV0KGltbXJfbm9kZSk7CiAKIAkvKiBNYXAgVVNCIFNPQyBzcGFjZSAqLwogCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwppbmRleCBmMjI2MzVhLi4yZmI0YjI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZwpAQCAtMjQxLDYgKzI0MSwxMiBAQAogCWhlbHAKIAkgIEVuYWJsZSB0aGlzIHRvIHN1cHBvcnQgZnVuY3Rpb25hbGl0eSBpbiBTZXJ2ZXJneSdzIENUUy0xMDAwIHN5c3RlbXMuCiAKK2NvbmZpZyBNVk1FMjUwMAorCWJvb2wgIkFydGVzeW4gTVZNRTI1MDAiCisJc2VsZWN0IERFRkFVTFRfVUlNQUdFCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgRW1lcnNvbi9BcnRlc3luIE1WTUUyNTAwIGJvYXJkLgorCiBlbmRpZiAjIFBQQzMyCiAKIGNvbmZpZyBQUENfUUVNVV9FNTAwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUKaW5kZXggNzMwMzI2MC4uMWZlN2ZiOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQpAQCAtMzEsMyArMzEsNCBAQAogb2JqLSQoQ09ORklHX0dFX0lNUDNBKQkgICs9IGdlX2ltcDNhLm8KIG9iai0kKENPTkZJR19QUENfUUVNVV9FNTAwKSArPSBxZW11X2U1MDAubwogb2JqLSQoQ09ORklHX1NHWV9DVFMxMDAwKSArPSBzZ3lfY3RzMTAwMC5vCitvYmotJChDT05GSUdfTVZNRTI1MDApCSAgKz0gbXZtZTI1MDAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L212bWUyNTAwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXZtZTI1MDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjMzMDUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L212bWUyNTAwLmMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIEJvYXJkIHNldHVwIHJvdXRpbmVzIGZvciB0aGUgRW1lcnNvbi9BcnRlc3luIE1WTUUyNTAwCisgKgorICogQ29weXJpZ2h0IDIwMTQgRWxldHRyYS1TaW5jcm90cm9uZSBUcmllc3RlIFMuQy5wLkEuCisgKgorICogQmFzZWQgb24gZWFybGllciBjb2RlIGJ5OgorICoKKyAqCVhpYW5naHVhIFhpYW8gKHgueGlhb0BmcmVlc2NhbGUuY29tKQorICoJVG9tIEFybWlzdGVhZCAodG9tLmFybWlzdGVhZEBlbWVyc29uLmNvbSkKKyAqCUNvcHlyaWdodCAyMDEyIEVtZXJzb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEF1dGhvciBBbGVzc2lvIElnb3IgQm9nYW5pIDxhbGVzc2lvLmJvZ2FuaUBlbGV0dHJhLmV1PgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKyNpbmNsdWRlIDxhc20vbXBpYy5oPgorI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KKworI2luY2x1ZGUgIm1wYzg1eHguaCIKKwordm9pZCBfX2luaXQgbXZtZTI1MDBfcGljX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfYWxsb2MoTlVMTCwgMCwKKwkJICBNUElDX0JJR19FTkRJQU4gfCBNUElDX1NJTkdMRV9ERVNUX0NQVSwKKwkJMCwgMjU2LCAiIE9wZW5QSUMgICIpOworCUJVR19PTihtcGljID09IE5VTEwpOworCW1waWNfaW5pdChtcGljKTsKK30KKworLyoKKyAqIFNldHVwIHRoZSBhcmNoaXRlY3R1cmUKKyAqLworc3RhdGljIHZvaWQgX19pbml0IG12bWUyNTAwX3NldHVwX2FyY2godm9pZCkKK3sKKwlpZiAocHBjX21kLnByb2dyZXNzKQorCQlwcGNfbWQucHJvZ3Jlc3MoIm12bWUyNTAwX3NldHVwX2FyY2goKSIsIDApOworCWZzbF9wY2lfYXNzaWduX3ByaW1hcnkoKTsKKwlwcl9pbmZvKCJNVk1FMjUwMCBib2FyZCBmcm9tIEFydGVzeW5cbiIpOworfQorCittYWNoaW5lX2FyY2hfaW5pdGNhbGwobXZtZTI1MDAsIG1wYzg1eHhfY29tbW9uX3B1Ymxpc2hfZGV2aWNlcyk7CisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgbXZtZTI1MDBfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKwlyZXR1cm4gb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJhcnRlc3luLE1WTUUyNTAwIik7Cit9CisKK2RlZmluZV9tYWNoaW5lKG12bWUyNTAwKSB7CisJLm5hbWUJCQk9ICJNVk1FMjUwMCIsCisJLnByb2JlCQkJPSBtdm1lMjUwMF9wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBtdm1lMjUwMF9zZXR1cF9hcmNoLAorCS5pbml0X0lSUQkJPSBtdm1lMjUwMF9waWNfaW5pdCwKKyNpZmRlZiBDT05GSUdfUENJCisJLnBjaWJpb3NfZml4dXBfYnVzCT0gZnNsX3BjaWJpb3NfZml4dXBfYnVzLAorCS5wY2liaW9zX2ZpeHVwX3BoYiAgICAgID0gZnNsX3BjaWJpb3NfZml4dXBfcGhiLAorI2VuZGlmCisJLmdldF9pcnEJCT0gbXBpY19nZXRfaXJxLAorCS5yZXN0YXJ0CQk9IGZzbF9yc3Rjcl9yZXN0YXJ0LAorCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5wcm9ncmVzcwkJPSB1ZGJnX3Byb2dyZXNzLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jZWxsZWJfc2NjX3BjaWV4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2VsbGViX3NjY19wY2lleC5jCmluZGV4IGYyMjM4NzUuLjk0MTcwZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9jZWxsZWJfc2NjX3BjaWV4LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NlbGxlYl9zY2NfcGNpZXguYwpAQCAtMzk5LDggKzM5OSw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX29wcyBzY2NfcGNpZXhfcGNpX29wcyA9IHsKLQlzY2NfcGNpZXhfcmVhZF9jb25maWcsCi0Jc2NjX3BjaWV4X3dyaXRlX2NvbmZpZywKKwkucmVhZCA9IHNjY19wY2lleF9yZWFkX2NvbmZpZywKKwkud3JpdGUgPSBzY2NfcGNpZXhfd3JpdGVfY29uZmlnLAogfTsKIAogc3RhdGljIHZvaWQgcGNpZXhfY2xlYXJfaW50cl9hbGwodW5zaWduZWQgaW50IF9faW9tZW0gKmJhc2UpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc21wLmMKaW5kZXggYzgwMTdhNy4uYjY0ZTdlYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zbXAuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiB7CiAJaWljX3JlcXVlc3RfSVBJcygpOwogCi0JcmV0dXJuIGNwdW1hc2tfd2VpZ2h0KGNwdV9wb3NzaWJsZV9tYXNrKTsKKwlyZXR1cm4gbnVtX3Bvc3NpYmxlX2NwdXMoKTsKIH0KIAogc3RhdGljIHZvaWQgc21wX2NlbGxfc2V0dXBfY3B1KGludCBjcHUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L21wYzc0NDhfaHBjMi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9tcGM3NDQ4X2hwYzIuYwppbmRleCBiZWVhZjRhLi5kZjRhZDk1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L21wYzc0NDhfaHBjMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvbXBjNzQ0OF9ocGMyLmMKQEAgLTE1NiwxNyArMTU2LDYgQEAKIAlmb3IgKDs7KSA7CQkvKiBTcGluIHVudGlsIHJlc2V0IGhhcHBlbnMgKi8KIH0KIAotdm9pZCBtcGM3NDQ4X2hwYzJfcG93ZXJfb2ZmKHZvaWQpCi17Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlmb3IgKDs7KSA7CQkvKiBObyB3YXkgdG8gc2h1dCBwb3dlciBvZmYgd2l0aCBzb2Z0d2FyZSAqLwotfQotCi12b2lkIG1wYzc0NDhfaHBjMl9oYWx0KHZvaWQpCi17Ci0JbXBjNzQ0OF9ocGMyX3Bvd2VyX29mZigpOwotfQotCiAvKgogICogQ2FsbGVkIHZlcnkgZWFybHksIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jCmluZGV4IDA0NzAyZGIuLmY0MDcxYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYwpAQCAtMTMzLDE3ICsxMzMsMjMgQEAKIAl8KCgodW5zaWduZWQgaW50KShvZmYpKSAmIDB4RkNVTCkgXAogCXwxVUwpCiAKLXN0YXRpYyB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKm1hY3Jpc2NfY2ZnX2FjY2VzcyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIqIGhvc2UsCi0JCQkJCSAgICAgICB1OCBidXMsIHU4IGRldl9mbiwgdTggb2Zmc2V0KQorc3RhdGljIHZvaWQgX19pb21lbSAqbWFjcmlzY19jZmdfbWFwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkgdW5zaWduZWQgaW50IGRldl9mbiwKKwkJCQkJIGludCBvZmZzZXQpCiB7CiAJdW5zaWduZWQgaW50IGNhZGRyOworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKIAotCWlmIChidXMgPT0gaG9zZS0+Zmlyc3RfYnVzbm8pIHsKKwlob3NlID0gcGNpX2J1c190b19ob3N0KGJ1cyk7CisJaWYgKGhvc2UgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoYnVzLT5udW1iZXIgPT0gaG9zZS0+Zmlyc3RfYnVzbm8pIHsKIAkJaWYgKGRldl9mbiA8ICgxMSA8PCAzKSkKIAkJCXJldHVybiBOVUxMOwogCQljYWRkciA9IE1BQ1JJU0NfQ0ZBMChkZXZfZm4sIG9mZnNldCk7CiAJfSBlbHNlCi0JCWNhZGRyID0gTUFDUklTQ19DRkExKGJ1cywgZGV2X2ZuLCBvZmZzZXQpOworCQljYWRkciA9IE1BQ1JJU0NfQ0ZBMShidXMtPm51bWJlciwgZGV2X2ZuLCBvZmZzZXQpOwogCiAJLyogVW5pbm9ydGggd2lsbCByZXR1cm4gZ2FyYmFnZSBpZiB3ZSBkb24ndCByZWFkIGJhY2sgdGhlIHZhbHVlICEgKi8KIAlkbyB7CkBAIC0xNTQsMTI5ICsxNjAsNDYgQEAKIAlyZXR1cm4gaG9zZS0+Y2ZnX2RhdGEgKyBvZmZzZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbWFjcmlzY19yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkJICAgICAgaW50IG9mZnNldCwgaW50IGxlbiwgdTMyICp2YWwpCi17Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCXZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcjsKLQotCWhvc2UgPSBwY2lfYnVzX3RvX2hvc3QoYnVzKTsKLQlpZiAoaG9zZSA9PSBOVUxMKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCWlmIChvZmZzZXQgPj0gMHgxMDApCi0JCXJldHVybiAgUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOwotCWFkZHIgPSBtYWNyaXNjX2NmZ19hY2Nlc3MoaG9zZSwgYnVzLT5udW1iZXIsIGRldmZuLCBvZmZzZXQpOwotCWlmICghYWRkcikKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQkvKgotCSAqIE5vdGU6IHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgY2hlY2tlZCB0aGF0IG9mZnNldCBpcwotCSAqIHN1aXRhYmx5IGFsaWduZWQgYW5kIHRoYXQgbGVuIGlzIDEsIDIgb3IgNC4KLQkgKi8KLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQkJKnZhbCA9IGluXzgoYWRkcik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJKnZhbCA9IGluX2xlMTYoYWRkcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCSp2YWwgPSBpbl9sZTMyKGFkZHIpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCBtYWNyaXNjX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkJICAgICAgIGludCBvZmZzZXQsIGludCBsZW4sIHUzMiB2YWwpCi17Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCXZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcjsKLQotCWhvc2UgPSBwY2lfYnVzX3RvX2hvc3QoYnVzKTsKLQlpZiAoaG9zZSA9PSBOVUxMKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCWlmIChvZmZzZXQgPj0gMHgxMDApCi0JCXJldHVybiAgUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOwotCWFkZHIgPSBtYWNyaXNjX2NmZ19hY2Nlc3MoaG9zZSwgYnVzLT5udW1iZXIsIGRldmZuLCBvZmZzZXQpOwotCWlmICghYWRkcikKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQkvKgotCSAqIE5vdGU6IHRoZSBjYWxsZXIgaGFzIGFscmVhZHkgY2hlY2tlZCB0aGF0IG9mZnNldCBpcwotCSAqIHN1aXRhYmx5IGFsaWduZWQgYW5kIHRoYXQgbGVuIGlzIDEsIDIgb3IgNC4KLQkgKi8KLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQkJb3V0XzgoYWRkciwgdmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlvdXRfbGUxNihhZGRyLCB2YWwpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlvdXRfbGUzMihhZGRyLCB2YWwpOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQogc3RhdGljIHN0cnVjdCBwY2lfb3BzIG1hY3Jpc2NfcGNpX29wcyA9CiB7Ci0JLnJlYWQgPSBtYWNyaXNjX3JlYWRfY29uZmlnLAotCS53cml0ZSA9IG1hY3Jpc2Nfd3JpdGVfY29uZmlnLAorCS5tYXBfYnVzID0gbWFjcmlzY19jZmdfbWFwX2J1cywKKwkucmVhZCA9IHBjaV9nZW5lcmljX2NvbmZpZ19yZWFkLAorCS53cml0ZSA9IHBjaV9nZW5lcmljX2NvbmZpZ193cml0ZSwKIH07CiAKICNpZmRlZiBDT05GSUdfUFBDMzIKIC8qCiAgKiBWZXJpZnkgdGhhdCBhIHNwZWNpZmljIChidXMsIGRldl9mbikgZXhpc3RzIG9uIGNoYW9zCiAgKi8KLXN0YXRpYyBpbnQgY2hhb3NfdmFsaWRhdGVfZGV2KHN0cnVjdCBwY2lfYnVzICpidXMsIGludCBkZXZmbiwgaW50IG9mZnNldCkKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmNoYW9zX21hcF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCSAgIGludCBvZmZzZXQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAljb25zdCB1MzIgKnZlbmRvciwgKmRldmljZTsKIAogCWlmIChvZmZzZXQgPj0gMHgxMDApCi0JCXJldHVybiAgUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOworCQlyZXR1cm4gTlVMTDsKIAlucCA9IG9mX3BjaV9maW5kX2NoaWxkX2RldmljZShidXMtPmRldi5vZl9ub2RlLCBkZXZmbik7CiAJaWYgKG5wID09IE5VTEwpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJCXJldHVybiBOVUxMOwogCiAJdmVuZG9yID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAidmVuZG9yLWlkIiwgTlVMTCk7CiAJZGV2aWNlID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAiZGV2aWNlLWlkIiwgTlVMTCk7CiAJaWYgKHZlbmRvciA9PSBOVUxMIHx8IGRldmljZSA9PSBOVUxMKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCQlyZXR1cm4gTlVMTDsKIAogCWlmICgoKnZlbmRvciA9PSAweDEwNmIpICYmICgqZGV2aWNlID09IDMpICYmIChvZmZzZXQgPj0gMHgxMCkKIAkgICAgJiYgKG9mZnNldCAhPSAweDE0KSAmJiAob2Zmc2V0ICE9IDB4MTgpICYmIChvZmZzZXQgPD0gMHgyNCkpCi0JCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludAotY2hhb3NfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgb2Zmc2V0LAotCQkgIGludCBsZW4sIHUzMiAqdmFsKQotewotCWludCByZXN1bHQgPSBjaGFvc192YWxpZGF0ZV9kZXYoYnVzLCBkZXZmbiwgb2Zmc2V0KTsKLQlpZiAocmVzdWx0ID09IFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUikKLQkJKnZhbCA9IH4wVTsKLQlpZiAocmVzdWx0ICE9IFBDSUJJT1NfU1VDQ0VTU0ZVTCkKLQkJcmV0dXJuIHJlc3VsdDsKLQlyZXR1cm4gbWFjcmlzY19yZWFkX2NvbmZpZyhidXMsIGRldmZuLCBvZmZzZXQsIGxlbiwgdmFsKTsKLX0KLQotc3RhdGljIGludAotY2hhb3Nfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IG9mZnNldCwKLQkJICAgaW50IGxlbiwgdTMyIHZhbCkKLXsKLQlpbnQgcmVzdWx0ID0gY2hhb3NfdmFsaWRhdGVfZGV2KGJ1cywgZGV2Zm4sIG9mZnNldCk7Ci0JaWYgKHJlc3VsdCAhPSBQQ0lCSU9TX1NVQ0NFU1NGVUwpCi0JCXJldHVybiByZXN1bHQ7Ci0JcmV0dXJuIG1hY3Jpc2Nfd3JpdGVfY29uZmlnKGJ1cywgZGV2Zm4sIG9mZnNldCwgbGVuLCB2YWwpOworCXJldHVybiBtYWNyaXNjX2NmZ19tYXBfYnVzKGJ1cywgZGV2Zm4sIG9mZnNldCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX29wcyBjaGFvc19wY2lfb3BzID0KIHsKLQkucmVhZCA9IGNoYW9zX3JlYWRfY29uZmlnLAotCS53cml0ZSA9IGNoYW9zX3dyaXRlX2NvbmZpZywKKwkubWFwX2J1cyA9IGNoYW9zX21hcF9idXMsCisJLnJlYWQgPSBwY2lfZ2VuZXJpY19jb25maWdfcmVhZCwKKwkud3JpdGUgPSBwY2lfZ2VuZXJpY19jb25maWdfd3JpdGUsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfY2hhb3Moc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLApAQCAtNDcxLDE1ICszOTQsMjQgQEAKIAkgfCgoKHVuc2lnbmVkIGludCkob2ZmKSkgJiAweGZjVSkJXAogCSB8MVVMKQogCi1zdGF0aWMgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICp1NF9wY2llX2NmZ19hY2Nlc3Moc3RydWN0IHBjaV9jb250cm9sbGVyKiBob3NlLAotCQkJCQl1OCBidXMsIHU4IGRldl9mbiwgaW50IG9mZnNldCkKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnU0X3BjaWVfY2ZnX21hcF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cywKKwkJCQkJIHVuc2lnbmVkIGludCBkZXZfZm4sCisJCQkJCSBpbnQgb2Zmc2V0KQogeworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKIAl1bnNpZ25lZCBpbnQgY2FkZHI7CiAKLQlpZiAoYnVzID09IGhvc2UtPmZpcnN0X2J1c25vKSB7CisJaWYgKG9mZnNldCA+PSAweDEwMDApCisJCXJldHVybiBOVUxMOworCisJaG9zZSA9IHBjaV9idXNfdG9faG9zdChidXMpOworCWlmICghaG9zZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoYnVzLT5udW1iZXIgPT0gaG9zZS0+Zmlyc3RfYnVzbm8pIHsKIAkJY2FkZHIgPSBVNF9QQ0lFX0NGQTAoZGV2X2ZuLCBvZmZzZXQpOwogCX0gZWxzZQotCQljYWRkciA9IFU0X1BDSUVfQ0ZBMShidXMsIGRldl9mbiwgb2Zmc2V0KTsKKwkJY2FkZHIgPSBVNF9QQ0lFX0NGQTEoYnVzLT5udW1iZXIsIGRldl9mbiwgb2Zmc2V0KTsKIAogCS8qIFVuaW5vcnRoIHdpbGwgcmV0dXJuIGdhcmJhZ2UgaWYgd2UgZG9uJ3QgcmVhZCBiYWNrIHRoZSB2YWx1ZSAhICovCiAJZG8gewpAQCAtNDkwLDc0ICs0MjIsMTEgQEAKIAlyZXR1cm4gaG9zZS0+Y2ZnX2RhdGEgKyBvZmZzZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdTRfcGNpZV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkgICAgICAgaW50IG9mZnNldCwgaW50IGxlbiwgdTMyICp2YWwpCi17Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCXZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcjsKLQotCWhvc2UgPSBwY2lfYnVzX3RvX2hvc3QoYnVzKTsKLQlpZiAoaG9zZSA9PSBOVUxMKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCWlmIChvZmZzZXQgPj0gMHgxMDAwKQotCQlyZXR1cm4gIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKLQlhZGRyID0gdTRfcGNpZV9jZmdfYWNjZXNzKGhvc2UsIGJ1cy0+bnVtYmVyLCBkZXZmbiwgb2Zmc2V0KTsKLQlpZiAoIWFkZHIpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0JLyoKLQkgKiBOb3RlOiB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGNoZWNrZWQgdGhhdCBvZmZzZXQgaXMKLQkgKiBzdWl0YWJseSBhbGlnbmVkIGFuZCB0aGF0IGxlbiBpcyAxLCAyIG9yIDQuCi0JICovCi0Jc3dpdGNoIChsZW4pIHsKLQljYXNlIDE6Ci0JCSp2YWwgPSBpbl84KGFkZHIpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCSp2YWwgPSBpbl9sZTE2KGFkZHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkqdmFsID0gaW5fbGUzMihhZGRyKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBpbnQgdTRfcGNpZV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAotCQkJCWludCBvZmZzZXQsIGludCBsZW4sIHUzMiB2YWwpCi17Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCXZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcjsKLQotCWhvc2UgPSBwY2lfYnVzX3RvX2hvc3QoYnVzKTsKLQlpZiAoaG9zZSA9PSBOVUxMKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCWlmIChvZmZzZXQgPj0gMHgxMDAwKQotCQlyZXR1cm4gIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKLQlhZGRyID0gdTRfcGNpZV9jZmdfYWNjZXNzKGhvc2UsIGJ1cy0+bnVtYmVyLCBkZXZmbiwgb2Zmc2V0KTsKLQlpZiAoIWFkZHIpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0JLyoKLQkgKiBOb3RlOiB0aGUgY2FsbGVyIGhhcyBhbHJlYWR5IGNoZWNrZWQgdGhhdCBvZmZzZXQgaXMKLQkgKiBzdWl0YWJseSBhbGlnbmVkIGFuZCB0aGF0IGxlbiBpcyAxLCAyIG9yIDQuCi0JICovCi0Jc3dpdGNoIChsZW4pIHsKLQljYXNlIDE6Ci0JCW91dF84KGFkZHIsIHZhbCk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJb3V0X2xlMTYoYWRkciwgdmFsKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJb3V0X2xlMzIoYWRkciwgdmFsKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGNpX29wcyB1NF9wY2llX3BjaV9vcHMgPQogewotCS5yZWFkID0gdTRfcGNpZV9yZWFkX2NvbmZpZywKLQkud3JpdGUgPSB1NF9wY2llX3dyaXRlX2NvbmZpZywKKwkubWFwX2J1cyA9IHU0X3BjaWVfY2ZnX21hcF9idXMsCisJLnJlYWQgPSBwY2lfZ2VuZXJpY19jb25maWdfcmVhZCwKKwkud3JpdGUgPSBwY2lfZ2VuZXJpY19jb25maWdfd3JpdGUsCiB9OwogCiBzdGF0aWMgdm9pZCBwbWFjX3BjaV9maXh1cF91NF9vZl9ub2RlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvTWFrZWZpbGUKaW5kZXggZjI0MWFjYy4uNmYzYzVkMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIG9iai15CQkJKz0gc2V0dXAubyBvcGFsLXdyYXBwZXJzLm8gb3BhbC5vIG9wYWwtYXN5bmMubwogb2JqLXkJCQkrPSBvcGFsLXJ0Yy5vIG9wYWwtbnZyYW0ubyBvcGFsLWxwYy5vIG9wYWwtZmxhc2gubwogb2JqLXkJCQkrPSBybmcubyBvcGFsLWVsb2cubyBvcGFsLWR1bXAubyBvcGFsLXN5c3BhcmFtLm8gb3BhbC1zZW5zb3Iubwotb2JqLXkJCQkrPSBvcGFsLW1zZ2xvZy5vIG9wYWwtaG1pLm8KK29iai15CQkJKz0gb3BhbC1tc2dsb2cubyBvcGFsLWhtaS5vIG9wYWwtcG93ZXIubwogCiBvYmotJChDT05GSUdfU01QKQkrPSBzbXAubyBzdWJjb3JlLm8gc3ViY29yZS1hc20ubwogb2JqLSQoQ09ORklHX1BDSSkJKz0gcGNpLm8gcGNpLXA1aW9jMi5vIHBjaS1pb2RhLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9lZWgtcG93ZXJudi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmMKaW5kZXggMWQxOWU3OS4uZTI2MTg2OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L2VlaC1wb3dlcm52LmMKQEAgLTY4LDYgKzY4LDE3IEBACiAKIAkJaWYgKHBoYi0+bW9kZWwgPT0gUE5WX1BIQl9NT0RFTF9QN0lPQykKIAkJCWVlaF9hZGRfZmxhZyhFRUhfRU5BQkxFX0lPX0ZPUl9MT0cpOworCisJCS8qCisJCSAqIFBFIzAgc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIHZhbGlkIGJ5IEVFSCBjb3JlCisJCSAqIGlmIGl0J3Mgbm90IHRoZSByZXNlcnZlZCBvbmUuIEN1cnJlbnRseSwgd2UKKwkJICogaGF2ZSB0aGUgcmVzZXJ2ZWQgUEUjMCBhbmQgUEUjMTI3IGZvciBQSEIzCisJCSAqIGFuZCBQN0lPQyBzZXBhcmF0ZWx5LiBTbyB3ZSBzaG91bGQgcmVnYXJkCisJCSAqIFBFIzAgYXMgdmFsaWQgZm9yIFA3SU9DLgorCQkgKi8KKwkJaWYgKHBoYi0+aW9kYS5yZXNlcnZlZF9wZSAhPSAwKQorCQkJZWVoX2FkZF9mbGFnKEVFSF9WQUxJRF9QRV9aRVJPKTsKKwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLXBvd2VyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1wb3dlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4YmY1YjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC1wb3dlci5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBQb3dlck5WIE9QQUwgcG93ZXIgY29udHJvbCBmb3IgZ3JhY2VmdWwgc2h1dGRvd24gaGFuZGxpbmcKKyAqCisgKiBDb3B5cmlnaHQgMjAxNSBJQk0gQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorCisjaW5jbHVkZSA8YXNtL29wYWwuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorCisjZGVmaW5lIFNPRlRfT0ZGIDB4MDAKKyNkZWZpbmUgU09GVF9SRUJPT1QgMHgwMQorCitzdGF0aWMgaW50IG9wYWxfcG93ZXJfY29udHJvbF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIG1zZ190eXBlLCB2b2lkICptc2cpCit7CisJc3RydWN0IG9wYWxfbXNnICpwb3dlcl9tc2cgPSBtc2c7CisJdWludDY0X3QgdHlwZTsKKworCXR5cGUgPSBiZTY0X3RvX2NwdShwb3dlcl9tc2ctPnBhcmFtc1swXSk7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNPRlRfUkVCT09UOgorCQkvKiBGYWxsIHRocm91Z2guIFRoZSBzZXJ2aWNlIHByb2Nlc3NvciBpcyByZXNwb25zaWJsZSBmb3IKKwkJICogYnJpbmdpbmcgdGhlIG1hY2hpbmUgYmFjayB1cCAqLworCWNhc2UgU09GVF9PRkY6CisJCXByX2luZm8oIk9QQUw6IHBvd2Vyb2ZmIHJlcXVlc3RlZFxuIik7CisJCW9yZGVybHlfcG93ZXJvZmYodHJ1ZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2VycigiT1BBTDogcG93ZXIgY29udHJvbCB0eXBlIHVuZXhwZWN0ZWQgJTAxNmxseFxuIiwgdHlwZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgb3BhbF9wb3dlcl9jb250cm9sX25iID0geworCS5ub3RpZmllcl9jYWxsCT0gb3BhbF9wb3dlcl9jb250cm9sX2V2ZW50LAorCS5uZXh0CQk9IE5VTEwsCisJLnByaW9yaXR5CT0gMCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9wYWxfcG93ZXJfY29udHJvbF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IG9wYWxfbWVzc2FnZV9ub3RpZmllcl9yZWdpc3RlcihPUEFMX01TR19TSFVURE9XTiwKKwkJCQkJICAgICAmb3BhbF9wb3dlcl9jb250cm9sX25iKTsKKwlpZiAocmV0KSB7CisJCXByX2VycigiJXM6IENhbid0IHJlZ2lzdGVyIE9QQUwgZXZlbnQgbm90aWZpZXIgKCVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KK21hY2hpbmVfc3Vic3lzX2luaXRjYWxsKHBvd2VybnYsIG9wYWxfcG93ZXJfY29udHJvbF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvb3BhbC5jCmluZGV4IGYxMGI5ZWMuLjE4ZmQ0ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9vcGFsLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L29wYWwuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJICogc3RhcnQgY2F0Y2hpbmcvaGFuZGxpbmcgSE1JIGRpcmVjdGx5IGluIExpbnV4LgogCSAqLwogCWlmICghb3BhbF9jaGVja190b2tlbihPUEFMX0hBTkRMRV9ITUkpKSB7Ci0JCXByX2luZm8oIm9wYWw6IE9sZCBmaXJtd2FyZSBkZXRlY3RlZCwgT1BBTCBoYW5kbGVzIEhNSXMuXG4iKTsKKwkJcHJfaW5mbygiT2xkIGZpcm13YXJlIGRldGVjdGVkLCBPUEFMIGhhbmRsZXMgSE1Jcy5cbiIpOwogCQlvcGFsX3JlZ2lzdGVyX2V4Y2VwdGlvbl9oYW5kbGVyKAogCQkJCU9QQUxfSFlQRVJWSVNPUl9NQUlOVEVOQU5DRV9IQU5ETEVSLAogCQkJCTAsIGdsdWUpOwpAQCAtNjY3LDcgKzY2NywxMyBAQAogCiAJLyogUmVnaXN0ZXIga2VybmVsIGxvZyBidWZmZXIgKi8KIAlhZGRyID0gbG9nX2J1Zl9hZGRyX2dldCgpOworCWlmIChhZGRyID09IE5VTEwpCisJCXJldHVybjsKKwogCXNpemUgPSBsb2dfYnVmX2xlbl9nZXQoKTsKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm47CisKIAlyYyA9IG9wYWxfcmVnaXN0ZXJfZHVtcF9yZWdpb24oT1BBTF9EVU1QX1JFR0lPTl9MT0dfQlVGLAogCQkJCSAgICAgICBfX3BhKGFkZHIpLCBzaXplKTsKIAkvKiBEb24ndCB3YXJuIGlmIHRoaXMgaXMganVzdCBhbiBvbGRlciBPUEFMIHRoYXQgZG9lc24ndApAQCAtNjk1LDE1ICs3MDEsNTQgQEAKIAkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShucCwgTlVMTCwgTlVMTCk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBvcGFsX2lycV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4pCit7CisJY29uc3QgX19iZTMyICppcnFzOworCWludCBpLCBpcnFsZW47CisKKwkvKiBHZXQgaW50ZXJydXB0IHByb3BlcnR5ICovCisJaXJxcyA9IG9mX2dldF9wcm9wZXJ0eShvcGFsX25vZGUsICJvcGFsLWludGVycnVwdHMiLCAmaXJxbGVuKTsKKwlvcGFsX2lycV9jb3VudCA9IGlycXMgPyAoaXJxbGVuIC8gNCkgOiAwOworCXByX2RlYnVnKCJGb3VuZCAlZCBpbnRlcnJ1cHRzIHJlc2VydmVkIGZvciBPUEFMXG4iLCBvcGFsX2lycV9jb3VudCk7CisJaWYgKCFvcGFsX2lycV9jb3VudCkKKwkJcmV0dXJuOworCisJLyogSW5zdGFsbCBpbnRlcnJ1cHQgaGFuZGxlcnMgKi8KKwlvcGFsX2lycXMgPSBremFsbG9jKG9wYWxfaXJxX2NvdW50ICogc2l6ZW9mKHVuc2lnbmVkIGludCksIEdGUF9LRVJORUwpOworCWZvciAoaSA9IDA7IGlycXMgJiYgaSA8IG9wYWxfaXJxX2NvdW50OyBpKyssIGlycXMrKykgeworCQl1bnNpZ25lZCBpbnQgaXJxLCB2aXJxOworCQlpbnQgcmM7CisKKwkJLyogR2V0IGhhcmR3YXJlIGFuZCB2aXJ0dWFsIElSUSAqLworCQlpcnEgPSBiZTMyX3RvX2NwdXAoaXJxcyk7CisJCXZpcnEgPSBpcnFfY3JlYXRlX21hcHBpbmcoTlVMTCwgaXJxKTsKKwkJaWYgKHZpcnEgPT0gTk9fSVJRKSB7CisJCQlwcl93YXJuKCJGYWlsZWQgdG8gbWFwIGlycSAweCV4XG4iLCBpcnEpOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBJbnN0YWxsIGludGVycnVwdCBoYW5kbGVyICovCisJCXJjID0gcmVxdWVzdF9pcnEodmlycSwgb3BhbF9pbnRlcnJ1cHQsIDAsICJvcGFsIiwgTlVMTCk7CisJCWlmIChyYykgeworCQkJaXJxX2Rpc3Bvc2VfbWFwcGluZyh2aXJxKTsKKwkJCXByX3dhcm4oIkVycm9yICVkIHJlcXVlc3RpbmcgaXJxICVkICgweCV4KVxuIiwKKwkJCQkgcmMsIHZpcnEsIGlycSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIENhY2hlIElSUSAqLworCQlvcGFsX2lycXNbaV0gPSB2aXJxOworCX0KK30KKwogc3RhdGljIGludCBfX2luaXQgb3BhbF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCwgKmNvbnNvbGVzOwotCWNvbnN0IF9fYmUzMiAqaXJxczsKLQlpbnQgcmMsIGksIGlycWxlbjsKKwlpbnQgcmM7CiAKIAlvcGFsX25vZGUgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2libSxvcGFsIik7CiAJaWYgKCFvcGFsX25vZGUpIHsKLQkJcHJfd2Fybigib3BhbDogTm9kZSBub3QgZm91bmRcbiIpOworCQlwcl93YXJuKCJEZXZpY2Ugbm9kZSBub3QgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTcyNSwyNCArNzcwLDcgQEAKIAlvcGFsX2kyY19jcmVhdGVfZGV2cygpOwogCiAJLyogRmluZCBhbGwgT1BBTCBpbnRlcnJ1cHRzIGFuZCByZXF1ZXN0IHRoZW0gKi8KLQlpcnFzID0gb2ZfZ2V0X3Byb3BlcnR5KG9wYWxfbm9kZSwgIm9wYWwtaW50ZXJydXB0cyIsICZpcnFsZW4pOwotCXByX2RlYnVnKCJvcGFsOiBGb3VuZCAlZCBpbnRlcnJ1cHRzIHJlc2VydmVkIGZvciBPUEFMXG4iLAotCQkgaXJxcyA/IChpcnFsZW4gLyA0KSA6IDApOwotCW9wYWxfaXJxX2NvdW50ID0gaXJxbGVuIC8gNDsKLQlvcGFsX2lycXMgPSBremFsbG9jKG9wYWxfaXJxX2NvdW50ICogc2l6ZW9mKHVuc2lnbmVkIGludCksIEdGUF9LRVJORUwpOwotCWZvciAoaSA9IDA7IGlycXMgJiYgaSA8IChpcnFsZW4gLyA0KTsgaSsrLCBpcnFzKyspIHsKLQkJdW5zaWduZWQgaW50IGh3aXJxID0gYmUzMl90b19jcHVwKGlycXMpOwotCQl1bnNpZ25lZCBpbnQgaXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKE5VTEwsIGh3aXJxKTsKLQkJaWYgKGlycSA9PSBOT19JUlEpIHsKLQkJCXByX3dhcm5pbmcoIm9wYWw6IEZhaWxlZCB0byBtYXAgaXJxIDB4JXhcbiIsIGh3aXJxKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXJjID0gcmVxdWVzdF9pcnEoaXJxLCBvcGFsX2ludGVycnVwdCwgMCwgIm9wYWwiLCBOVUxMKTsKLQkJaWYgKHJjKQotCQkJcHJfd2FybmluZygib3BhbDogRXJyb3IgJWQgcmVxdWVzdGluZyBpcnEgJWQiCi0JCQkJICAgIiAoMHgleClcbiIsIHJjLCBpcnEsIGh3aXJxKTsKLQkJb3BhbF9pcnFzW2ldID0gaXJxOwotCX0KKwlvcGFsX2lycV9pbml0KG9wYWxfbm9kZSk7CiAKIAkvKiBDcmVhdGUgIm9wYWwiIGtvYmplY3QgdW5kZXIgL3N5cy9maXJtd2FyZSAqLwogCXJjID0gb3BhbF9zeXNmc19pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLWlvZGEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2ktaW9kYS5jCmluZGV4IGZhYzg4ZWQuLjZjOWZmMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2ktaW9kYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2ktaW9kYS5jCkBAIC03NSw2ICs3NSwyOCBAQAogI2RlZmluZSBwZV9pbmZvKHBlLCBmbXQsIC4uLikJCQkJCVwKIAlwZV9sZXZlbF9wcmludGsocGUsIEtFUk5fSU5GTywgZm10LCAjI19fVkFfQVJHU19fKQogCitzdGF0aWMgYm9vbCBwbnZfaW9tbXVfYnlwYXNzX2Rpc2FibGVkIF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyBpbnQgX19pbml0IGlvbW11X3NldHVwKGNoYXIgKnN0cikKK3sKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoKnN0cikgeworCQlpZiAoIXN0cm5jbXAoc3RyLCAibm9ieXBhc3MiLCA4KSkgeworCQkJcG52X2lvbW11X2J5cGFzc19kaXNhYmxlZCA9IHRydWU7CisJCQlwcl9pbmZvKCJQb3dlck5WOiBJT01NVSBieXBhc3Mgd2luZG93IGRpc2FibGVkLlxuIik7CisJCQlicmVhazsKKwkJfQorCQlzdHIgKz0gc3RyY3NwbihzdHIsICIsIik7CisJCWlmICgqc3RyID09ICcsJykKKwkJCXN0cisrOworCX0KKworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImlvbW11IiwgaW9tbXVfc2V0dXApOworCiAvKgogICogc3RkY2l4IGlzIG9ubHkgc3VwcG9zZWQgdG8gYmUgdXNlZCBpbiBoeXBlcnZpc29yIHJlYWwgbW9kZSBhcyBwZXIKICAqIHRoZSBhcmNoaXRlY3R1cmUgc3BlYwpAQCAtMzU3LDYgKzM3OSw5IEBACiAJcGhiLT5pb2RhLm02NF9zZWdzaXplID0gcGhiLT5pb2RhLm02NF9zaXplIC8gcGhiLT5pb2RhLnRvdGFsX3BlOwogCXBoYi0+aW9kYS5tNjRfYmFzZSA9IHBjaV9hZGRyOwogCisJcHJfaW5mbygiIE1FTTY0IDB4JTAxNmxseC4uMHglMDE2bGx4IC0+IDB4JTAxNmxseFxuIiwKKwkJCXJlcy0+c3RhcnQsIHJlcy0+ZW5kLCBwY2lfYWRkcik7CisKIAkvKiBVc2UgbGFzdCBNNjQgQkFSIHRvIGNvdmVyIE02NCB3aW5kb3cgKi8KIAlwaGItPmlvZGEubTY0X2Jhcl9pZHggPSAxNTsKIAlwaGItPmluaXRfbTY0ID0gcG52X2lvZGEyX2luaXRfbTY0OwpAQCAtMTM0OCw3ICsxMzczLDkgQEAKIAkJcG52X2lvZGFfc2V0dXBfYnVzX2RtYShwZSwgcGUtPnBidXMsIHRydWUpOwogCiAJLyogQWxzbyBjcmVhdGUgYSBieXBhc3Mgd2luZG93ICovCi0JcG52X3BjaV9pb2RhMl9zZXR1cF9ieXBhc3NfcGUocGhiLCBwZSk7CisJaWYgKCFwbnZfaW9tbXVfYnlwYXNzX2Rpc2FibGVkKQorCQlwbnZfcGNpX2lvZGEyX3NldHVwX2J5cGFzc19wZShwaGIsIHBlKTsKKwogCXJldHVybjsKIGZhaWw6CiAJaWYgKHBlLT50Y2UzMl9zZWcgPj0gMCkKQEAgLTE0NjAsMTUgKzE0ODcsMTUgQEAKIAogI2lmZGVmIENPTkZJR19DWExfQkFTRQogCi1zdHJ1Y3QgZGV2aWNlX25vZGUgKnBudl9wY2lfdG9fcGhiX25vZGUoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0cnVjdCBkZXZpY2Vfbm9kZSAqcG52X3BjaV9nZXRfcGhiX25vZGUoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBwY2lfYnVzX3RvX2hvc3QoZGV2LT5idXMpOwogCi0JcmV0dXJuIGhvc2UtPmRuOworCXJldHVybiBvZl9ub2RlX2dldChob3NlLT5kbik7CiB9Ci1FWFBPUlRfU1lNQk9MKHBudl9wY2lfdG9fcGhiX25vZGUpOworRVhQT1JUX1NZTUJPTChwbnZfcGNpX2dldF9waGJfbm9kZSk7CiAKLWludCBwbnZfcGhiX3RvX2N4bChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoraW50IHBudl9waGJfdG9fY3hsX21vZGUoc3RydWN0IHBjaV9kZXYgKmRldiwgdWludDY0X3QgbW9kZSkKIHsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBwY2lfYnVzX3RvX2hvc3QoZGV2LT5idXMpOwogCXN0cnVjdCBwbnZfcGhiICpwaGIgPSBob3NlLT5wcml2YXRlX2RhdGE7CkBAIC0xNDgxLDEzICsxNTA4LDEzIEBACiAKIAlwZV9pbmZvKHBlLCAiU3dpdGNoaW5nIFBIQiB0byBDWExcbiIpOwogCi0JcmMgPSBvcGFsX3BjaV9zZXRfcGhiX2N4bF9tb2RlKHBoYi0+b3BhbF9pZCwgMSwgcGUtPnBlX251bWJlcik7CisJcmMgPSBvcGFsX3BjaV9zZXRfcGhiX2N4bF9tb2RlKHBoYi0+b3BhbF9pZCwgbW9kZSwgcGUtPnBlX251bWJlcik7CiAJaWYgKHJjKQogCQlkZXZfZXJyKCZkZXYtPmRldiwgIm9wYWxfcGNpX3NldF9waGJfY3hsX21vZGUgZmFpbGVkOiAlaVxuIiwgcmMpOwogCiAJcmV0dXJuIHJjOwogfQotRVhQT1JUX1NZTUJPTChwbnZfcGhiX3RvX2N4bCk7CitFWFBPUlRfU1lNQk9MKHBudl9waGJfdG9fY3hsX21vZGUpOwogCiAvKiBGaW5kIFBIQiBmb3IgY3hsIGRldiBhbmQgYWxsb2NhdGUgTVNJIGh3aXJxcz8KICAqIFJldHVybnMgdGhlIGFic29sdXRlIGhhcmR3YXJlIElSUSBudW1iZXIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9wY2kuYwppbmRleCA0OTQ1ZTg3Li5lNjkxNDJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3BjaS5jCkBAIC03ODEsMzUgKzc4MSw2IEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9FQVJMWShQQ0lfVkVORE9SX0lEX0lCTSwgMHgzYjksIHBudl9wN2lvY19yY19xdWlyayk7CiAKLXN0YXRpYyBpbnQgcG52X3BjaV9wcm9iZV9tb2RlKHN0cnVjdCBwY2lfYnVzICpidXMpCi17Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gcGNpX2J1c190b19ob3N0KGJ1cyk7Ci0JY29uc3QgX19iZTY0ICp0c3RhbXA7Ci0JdTY0IG5vdywgdGFyZ2V0OwotCi0KLQkvKiBXZSBoaWphY2sgdGhpcyBhcyBhIHdheSB0byBlbnN1cmUgd2UgaGF2ZSB3YWl0ZWQgbG9uZwotCSAqIGVub3VnaCBzaW5jZSB0aGUgcmVzZXQgd2FzIGxpZnRlZCBvbiB0aGUgUENJIGJ1cwotCSAqLwotCWlmIChidXMgIT0gaG9zZS0+YnVzKQotCQlyZXR1cm4gUENJX1BST0JFX05PUk1BTDsKLQl0c3RhbXAgPSBvZl9nZXRfcHJvcGVydHkoaG9zZS0+ZG4sICJyZXNldC1jbGVhci10aW1lc3RhbXAiLCBOVUxMKTsKLQlpZiAoIXRzdGFtcCB8fCAhKnRzdGFtcCkKLQkJcmV0dXJuIFBDSV9QUk9CRV9OT1JNQUw7Ci0KLQlub3cgPSBtZnRiKCkgLyB0Yl90aWNrc19wZXJfdXNlYzsKLQl0YXJnZXQgPSAoYmU2NF90b19jcHVwKHRzdGFtcCkgLyB0Yl90aWNrc19wZXJfdXNlYykKLQkJKyBQQ0lfUkVTRVRfREVMQVlfVVM7Ci0KLQlwcl9kZXZlbCgicGNpICUwNGQ6IFJlc2V0IHRhcmdldDogMHglbGx4IG5vdzogMHglbGx4XG4iLAotCQkgaG9zZS0+Z2xvYmFsX251bWJlciwgdGFyZ2V0LCBub3cpOwotCi0JaWYgKG5vdyA8IHRhcmdldCkKLQkJbXNsZWVwKCh0YXJnZXQgLSBub3cgKyA5OTkpIC8gMTAwMCk7Ci0KLQlyZXR1cm4gUENJX1BST0JFX05PUk1BTDsKLX0KLQogdm9pZCBfX2luaXQgcG52X3BjaV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKQEAgLTg1Niw3ICs4MjcsNiBAQAogCXBwY19tZC50Y2VfYnVpbGRfcm0gPSBwbnZfdGNlX2J1aWxkX3JtOwogCXBwY19tZC50Y2VfZnJlZV9ybSA9IHBudl90Y2VfZnJlZV9ybTsKIAlwcGNfbWQudGNlX2dldCA9IHBudl90Y2VfZ2V0OwotCXBwY19tZC5wY2lfcHJvYmVfbW9kZSA9IHBudl9wY2lfcHJvYmVfbW9kZTsKIAlzZXRfcGNpX2RtYV9vcHMoJmRtYV9pb21tdV9vcHMpOwogCiAJLyogQ29uZmlndXJlIE1TSXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3NldHVwLmMKaW5kZXggYjcwMGEzMi4uZDJkZTdkNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L3NldHVwLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogCSAqIGFsbCBjcHVzIGF0IGJvb3QuIEdldCB0aGVzZSByZWcgdmFsdWVzIG9mIGN1cnJlbnQgY3B1IGFuZCB1c2UgdGhlCiAJICogc2FtZSBhY2Nyb3NzIGFsbCBjcHVzLgogCSAqLwotCXVpbnQ2NF90IGxwY3JfdmFsID0gbWZzcHIoU1BSTl9MUENSKTsKKwl1aW50NjRfdCBscGNyX3ZhbCA9IG1mc3ByKFNQUk5fTFBDUikgJiB+KHU2NClMUENSX1BFQ0UxOwogCXVpbnQ2NF90IGhpZDBfdmFsID0gbWZzcHIoU1BSTl9ISUQwKTsKIAl1aW50NjRfdCBoaWQxX3ZhbCA9IG1mc3ByKFNQUk5fSElEMSk7CiAJdWludDY0X3QgaGlkNF92YWwgPSBtZnNwcihTUFJOX0hJRDQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMKaW5kZXggMGM5ZjY0My4uYjBmMzQ2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9tbS5jCkBAIC0yMjMsNiArMjIzLDQ0IEBACiAJfQogfQogCitzdGF0aWMgaW50IHBzM19tbV9nZXRfcmVwb3NpdG9yeV9oaWdobWVtKHN0cnVjdCBtZW1fcmVnaW9uICpyKQoreworCWludCByZXN1bHQ7CisKKwkvKiBBc3N1bWUgYSBzaW5nbGUgaGlnaG1lbSByZWdpb24uICovCisKKwlyZXN1bHQgPSBwczNfcmVwb3NpdG9yeV9yZWFkX2hpZ2htZW1faW5mbygwLCAmci0+YmFzZSwgJnItPnNpemUpOworCisJaWYgKHJlc3VsdCkKKwkJZ290byB6ZXJvX3JlZ2lvbjsKKworCWlmICghci0+YmFzZSB8fCAhci0+c2l6ZSkgeworCQlyZXN1bHQgPSAtMTsKKwkJZ290byB6ZXJvX3JlZ2lvbjsKKwl9CisKKwlyLT5vZmZzZXQgPSByLT5iYXNlIC0gbWFwLnJtLnNpemU7CisKKwlEQkcoIiVzOiVkOiBGb3VuZCBoaWdoIHJlZ2lvbiBpbiByZXBvc2l0b3J5OiAlbGx4aCAlbGx4aFxuIiwKKwkgICAgX19mdW5jX18sIF9fTElORV9fLCByLT5iYXNlLCByLT5zaXplKTsKKworCXJldHVybiAwOworCit6ZXJvX3JlZ2lvbjoKKwlEQkcoIiVzOiVkOiBObyBoaWdoIHJlZ2lvbiBpbiByZXBvc2l0b3J5LlxuIiwgX19mdW5jX18sIF9fTElORV9fKTsKKworCXItPnNpemUgPSByLT5iYXNlID0gci0+b2Zmc2V0ID0gMDsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHBzM19tbV9zZXRfcmVwb3NpdG9yeV9oaWdobWVtKGNvbnN0IHN0cnVjdCBtZW1fcmVnaW9uICpyKQoreworCS8qIEFzc3VtZSBhIHNpbmdsZSBoaWdobWVtIHJlZ2lvbi4gKi8KKworCXJldHVybiByID8gcHMzX3JlcG9zaXRvcnlfd3JpdGVfaGlnaG1lbV9pbmZvKDAsIHItPmJhc2UsIHItPnNpemUpIDoKKwkJcHMzX3JlcG9zaXRvcnlfd3JpdGVfaGlnaG1lbV9pbmZvKDAsIDAsIDApOworfQorCiAvKioKICAqIHBzM19tbV9yZWdpb25fY3JlYXRlIC0gY3JlYXRlIGEgbWVtb3J5IHJlZ2lvbiBpbiB0aGUgdmFzCiAgKiBAcjogcG9pbnRlciB0byBhIHN0cnVjdCBtZW1fcmVnaW9uIHRvIGFjY2VwdCBpbml0aWFsaXplZCB2YWx1ZXMKQEAgLTI5MSwzNiArMzI5LDcgQEAKIAkJci0+c2l6ZSA9IHItPmJhc2UgPSByLT5vZmZzZXQgPSAwOwogCQltYXAudG90YWwgPSBtYXAucm0uc2l6ZTsKIAl9Ci19Ci0KLXN0YXRpYyBpbnQgcHMzX21tX2dldF9yZXBvc2l0b3J5X2hpZ2htZW0oc3RydWN0IG1lbV9yZWdpb24gKnIpCi17Ci0JaW50IHJlc3VsdDsKLQotCS8qIEFzc3VtZSBhIHNpbmdsZSBoaWdobWVtIHJlZ2lvbi4gKi8KLQotCXJlc3VsdCA9IHBzM19yZXBvc2l0b3J5X3JlYWRfaGlnaG1lbV9pbmZvKDAsICZyLT5iYXNlLCAmci0+c2l6ZSk7Ci0KLQlpZiAocmVzdWx0KQotCQlnb3RvIHplcm9fcmVnaW9uOwotCi0JaWYgKCFyLT5iYXNlIHx8ICFyLT5zaXplKSB7Ci0JCXJlc3VsdCA9IC0xOwotCQlnb3RvIHplcm9fcmVnaW9uOwotCX0KLQotCXItPm9mZnNldCA9IHItPmJhc2UgLSBtYXAucm0uc2l6ZTsKLQotCURCRygiJXM6JWQ6IEZvdW5kIGhpZ2ggcmVnaW9uIGluIHJlcG9zaXRvcnk6ICVsbHhoICVsbHhoXG4iLAotCSAgICBfX2Z1bmNfXywgX19MSU5FX18sIHItPmJhc2UsIHItPnNpemUpOwotCi0JcmV0dXJuIDA7Ci0KLXplcm9fcmVnaW9uOgotCURCRygiJXM6JWQ6IE5vIGhpZ2ggcmVnaW9uIGluIHJlcG9zaXRvcnkuXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwotCi0Jci0+c2l6ZSA9IHItPmJhc2UgPSByLT5vZmZzZXQgPSAwOwotCXJldHVybiByZXN1bHQ7CisJcHMzX21tX3NldF9yZXBvc2l0b3J5X2hpZ2htZW0oTlVMTCk7CiB9CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCkBAIC0xMjEwLDggKzEyMTksMTIgQEAKIAogCS8qIENoZWNrIGlmIHdlIGdvdCB0aGUgaGlnaG1lbSByZWdpb24gZnJvbSBhbiBlYXJsaWVyIGJvb3Qgc3RlcCAqLwogCi0JaWYgKHBzM19tbV9nZXRfcmVwb3NpdG9yeV9oaWdobWVtKCZtYXAucjEpKQotCQlwczNfbW1fcmVnaW9uX2NyZWF0ZSgmbWFwLnIxLCBtYXAudG90YWwgLSBtYXAucm0uc2l6ZSk7CisJaWYgKHBzM19tbV9nZXRfcmVwb3NpdG9yeV9oaWdobWVtKCZtYXAucjEpKSB7CisJCXJlc3VsdCA9IHBzM19tbV9yZWdpb25fY3JlYXRlKCZtYXAucjEsIG1hcC50b3RhbCAtIG1hcC5ybS5zaXplKTsKKworCQlpZiAoIXJlc3VsdCkKKwkJCXBzM19tbV9zZXRfcmVwb3NpdG9yeV9oaWdobWVtKCZtYXAucjEpOworCX0KIAogCS8qIGNvcnJlY3QgbWFwLnRvdGFsIGZvciB0aGUgcmVhbCB0b3RhbCBhbW91bnQgb2YgbWVtb3J5IHdlIHVzZSAqLwogCW1hcC50b3RhbCA9IG1hcC5ybS5zaXplICsgbWFwLnIxLnNpemU7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9wbGF0Zm9ybS5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvcGxhdGZvcm0uaAppbmRleCBkNzEzMjlhLi4xODA5Y2ZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9wbGF0Zm9ybS5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL3BsYXRmb3JtLmgKQEAgLTE5Niw2ICsxOTYsNyBAQAogaW50IHBzM19yZXBvc2l0b3J5X3JlYWRfaGlnaG1lbV9pbmZvKHVuc2lnbmVkIGludCByZWdpb25faW5kZXgsCiAJdTY0ICpoaWdobWVtX2Jhc2UsIHU2NCAqaGlnaG1lbV9zaXplKTsKIAorI2lmIGRlZmluZWQgKENPTkZJR19QUzNfUkVQT1NJVE9SWV9XUklURSkKIGludCBwczNfcmVwb3NpdG9yeV93cml0ZV9oaWdobWVtX3JlZ2lvbl9jb3VudCh1bnNpZ25lZCBpbnQgcmVnaW9uX2NvdW50KTsKIGludCBwczNfcmVwb3NpdG9yeV93cml0ZV9oaWdobWVtX2Jhc2UodW5zaWduZWQgaW50IHJlZ2lvbl9pbmRleCwKIAl1NjQgaGlnaG1lbV9iYXNlKTsKQEAgLTIwNCw2ICsyMDUsMTggQEAKIGludCBwczNfcmVwb3NpdG9yeV93cml0ZV9oaWdobWVtX2luZm8odW5zaWduZWQgaW50IHJlZ2lvbl9pbmRleCwKIAl1NjQgaGlnaG1lbV9iYXNlLCB1NjQgaGlnaG1lbV9zaXplKTsKIGludCBwczNfcmVwb3NpdG9yeV9kZWxldGVfaGlnaG1lbV9pbmZvKHVuc2lnbmVkIGludCByZWdpb25faW5kZXgpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHBzM19yZXBvc2l0b3J5X3dyaXRlX2hpZ2htZW1fcmVnaW9uX2NvdW50KAorCXVuc2lnbmVkIGludCByZWdpb25fY291bnQpIHtyZXR1cm4gMDt9CitzdGF0aWMgaW5saW5lIGludCBwczNfcmVwb3NpdG9yeV93cml0ZV9oaWdobWVtX2Jhc2UodW5zaWduZWQgaW50IHJlZ2lvbl9pbmRleCwKKwl1NjQgaGlnaG1lbV9iYXNlKSB7cmV0dXJuIDA7fQorc3RhdGljIGlubGluZSBpbnQgcHMzX3JlcG9zaXRvcnlfd3JpdGVfaGlnaG1lbV9zaXplKHVuc2lnbmVkIGludCByZWdpb25faW5kZXgsCisJdTY0IGhpZ2htZW1fc2l6ZSkge3JldHVybiAwO30KK3N0YXRpYyBpbmxpbmUgaW50IHBzM19yZXBvc2l0b3J5X3dyaXRlX2hpZ2htZW1faW5mbyh1bnNpZ25lZCBpbnQgcmVnaW9uX2luZGV4LAorCXU2NCBoaWdobWVtX2Jhc2UsIHU2NCBoaWdobWVtX3NpemUpIHtyZXR1cm4gMDt9CitzdGF0aWMgaW5saW5lIGludCBwczNfcmVwb3NpdG9yeV9kZWxldGVfaGlnaG1lbV9pbmZvKHVuc2lnbmVkIGludCByZWdpb25faW5kZXgpCisJe3JldHVybiAwO30KKyNlbmRpZgogCiAvKiByZXBvc2l0b3J5IHBtZSBpbmZvICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKaW5kZXggNzU2YjQ4Mi4uYTc1OGE5YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKQEAgLTM0LDYgKzM0LDE2IEBACiAJICBwcm9jZXNzb3JzLCB0aGF0IGlzLCB3aGljaCBzaGFyZSBwaHlzaWNhbCBwcm9jZXNzb3JzIGJldHdlZW4KIAkgIHR3byBvciBtb3JlIHBhcnRpdGlvbnMuCiAKK2NvbmZpZyBEVEwKKwlib29sICJEaXNwYXRjaCBUcmFjZSBMb2ciCisJZGVwZW5kcyBvbiBQUENfU1BMUEFSICYmIERFQlVHX0ZTCisJaGVscAorCSAgU1BMUEFSIG1hY2hpbmVzIGNhbiBsb2cgaHlwZXJ2aXNvciBwcmVlbXB0ICYgZGlzcGF0Y2ggZXZlbnRzIHRvIGEKKwkgIGtlcm5lbCBidWZmZXIuIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgbG9nZ2luZyB0aGVzZSBldmVudHMsCisJICB3aGljaCBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIGEgZGVidWdmcyBmaWxlLgorCisJICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KKwogY29uZmlnIFBTRVJJRVNfTVNJCiAgICAgICAgYm9vbAogICAgICAgIGRlcGVuZHMgb24gUENJX01TSSAmJiBQUENfUFNFUklFUyAmJiBFRUgKQEAgLTEyMywxMyArMTMzLDMgQEAKIAkgIHN5c3RlbXMuIDI0eDcgaXMgYXZhaWxhYmxlIG9uIFBvd2VyIDggc3lzdGVtcy4KIAogICAgICAgICAgIElmIHVuc3VyZSwgc2VsZWN0IFkuCi0KLWNvbmZpZyBEVEwKLQlib29sICJEaXNwYXRjaCBUcmFjZSBMb2ciCi0JZGVwZW5kcyBvbiBQUENfU1BMUEFSICYmIERFQlVHX0ZTCi0JaGVscAotCSAgU1BMUEFSIG1hY2hpbmVzIGNhbiBsb2cgaHlwZXJ2aXNvciBwcmVlbXB0ICYgZGlzcGF0Y2ggZXZlbnRzIHRvIGEKLQkgIGtlcm5lbCBidWZmZXIuIFNheWluZyBZIGhlcmUgd2lsbCBlbmFibGUgbG9nZ2luZyB0aGVzZSBldmVudHMsCi0JICB3aGljaCBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIGEgZGVidWdmcyBmaWxlLgotCi0JICBTYXkgTiBpZiB5b3UgYXJlIHVuc3VyZS4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKaW5kZXggZjMwY2Y0ZC4uNjI0NzU0NCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKQEAgLTI3Miw3ICsyNzIsNyBAQAogCQkgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgYWRkIGNwdSAlczsgdGhpcyBzeXN0ZW0gY29uZmlndXJhdGlvbiIKIAkJICAgICAgICIgc3VwcG9ydHMgJWQgbG9naWNhbCBjcHVzLlxuIiwgbnAtPmZ1bGxfbmFtZSwKLQkJICAgICAgIGNwdW1hc2tfd2VpZ2h0KGNwdV9wb3NzaWJsZV9tYXNrKSk7CisJCSAgICAgICBudW1fcG9zc2libGVfY3B1cygpKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21vYmlsaXR5LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbW9iaWxpdHkuYwppbmRleCBlN2NiNmQ0Li45MGNmM2RjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbW9iaWxpdHkuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbW9iaWxpdHkuYwpAQCAtMzE2LDM0ICszMTYsMjQgQEAKIHN0YXRpYyBzc2l6ZV90IG1pZ3JhdGVfc3RvcmUoc3RydWN0IGNsYXNzICpjbGFzcywgc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHJ0YXNfYXJncyBhcmdzOwogCXU2NCBzdHJlYW1pZDsKIAlpbnQgcmM7CisJaW50IHZhc2lfcmMgPSAwOwogCiAJcmMgPSBrc3RydG91NjQoYnVmLCAwLCAmc3RyZWFtaWQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwotCWFyZ3MudG9rZW4gPSBydGFzX3Rva2VuKCJpYm0sc3VzcGVuZC1tZSIpOwotCWFyZ3MubmFyZ3MgPSAyOwotCWFyZ3MubnJldCA9IDE7Ci0KLQlhcmdzLmFyZ3NbMF0gPSBzdHJlYW1pZCA+PiAzMiA7Ci0JYXJncy5hcmdzWzFdID0gc3RyZWFtaWQgJiAweGZmZmZmZmZmOwotCWFyZ3MucmV0cyA9ICZhcmdzLmFyZ3NbYXJncy5uYXJnc107Ci0KIAlkbyB7Ci0JCWFyZ3MucmV0c1swXSA9IDA7Ci0JCXJjID0gcnRhc19pYm1fc3VzcGVuZF9tZSgmYXJncyk7Ci0JCWlmICghcmMgJiYgYXJncy5yZXRzWzBdID09IFJUQVNfTk9UX1NVU1BFTkRBQkxFKQorCQlyYyA9IHJ0YXNfaWJtX3N1c3BlbmRfbWUoc3RyZWFtaWQsICZ2YXNpX3JjKTsKKwkJaWYgKCFyYyAmJiB2YXNpX3JjID09IFJUQVNfTk9UX1NVU1BFTkRBQkxFKQogCQkJc3NsZWVwKDEpOwotCX0gd2hpbGUgKCFyYyAmJiBhcmdzLnJldHNbMF0gPT0gUlRBU19OT1RfU1VTUEVOREFCTEUpOworCX0gd2hpbGUgKCFyYyAmJiB2YXNpX3JjID09IFJUQVNfTk9UX1NVU1BFTkRBQkxFKTsKIAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwotCWVsc2UgaWYgKGFyZ3MucmV0c1swXSkKLQkJcmV0dXJuIGFyZ3MucmV0c1swXTsKKwlpZiAodmFzaV9yYykKKwkJcmV0dXJuIHZhc2lfcmM7CiAKIAlwb3N0X21vYmlsaXR5X2ZpeHVwKCk7CiAJcmV0dXJuIGNvdW50OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jCmluZGV4IGMzYjJhN2UuLjAyZTRhMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yYXMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmFzLmMKQEAgLTg5LDYgKzg5LDggQEAKIAljYXNlIEVQT1dfU0hVVERPV05fT05fVVBTOgogCQlwcl9lbWVyZygiTG9zcyBvZiBwb3dlciByZXBvcnRlZCBieSBmaXJtd2FyZSwgc3lzdGVtIGlzICIKIAkJCSJydW5uaW5nIG9uIFVQUy9iYXR0ZXJ5Iik7CisJCXByX2VtZXJnKCJDaGVjayBSVEFTIGVycm9yIGxvZyBmb3IgZGV0YWlscyIpOworCQlvcmRlcmx5X3Bvd2Vyb2ZmKHRydWUpOwogCQlicmVhazsKIAogCWNhc2UgRVBPV19TSFVURE9XTl9MT1NTX09GX0NSSVRJQ0FMX0ZVTkNUSU9OUzoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKaW5kZXggNjQ1NWMxZS4uNGI3NGMyNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKQEAgLTY4LDEzICs2OCwxMCBAQAogCXUzMiB2YWwgPSAwOwogCiAJaWYgKGhvc2UtPmluZGlyZWN0X3R5cGUgJiBQUENfSU5ESVJFQ1RfVFlQRV9GU0xfQ0ZHX1JFR19MSU5LKSB7Ci0JCWlmIChob3NlLT5vcHMtPnJlYWQgPT0gZnNsX2luZGlyZWN0X3JlYWRfY29uZmlnKSB7Ci0JCQlzdHJ1Y3QgcGNpX2J1cyBidXM7Ci0JCQlidXMubnVtYmVyID0gaG9zZS0+Zmlyc3RfYnVzbm87Ci0JCQlidXMuc3lzZGF0YSA9IGhvc2U7Ci0JCQlidXMub3BzID0gaG9zZS0+b3BzOwotCQkJaW5kaXJlY3RfcmVhZF9jb25maWcoJmJ1cywgMCwgUENJRV9MVFNTTSwgNCwgJnZhbCk7Ci0JCX0gZWxzZQorCQlpZiAoaG9zZS0+b3BzLT5yZWFkID09IGZzbF9pbmRpcmVjdF9yZWFkX2NvbmZpZykKKwkJCV9faW5kaXJlY3RfcmVhZF9jb25maWcoaG9zZSwgaG9zZS0+Zmlyc3RfYnVzbm8sIDAsCisJCQkJCSAgICAgICBQQ0lFX0xUU1NNLCA0LCAmdmFsKTsKKwkJZWxzZQogCQkJZWFybHlfcmVhZF9jb25maWdfZHdvcmQoaG9zZSwgMCwgMCwgUENJRV9MVFNTTSwgJnZhbCk7CiAJCWlmICh2YWwgPCBQQ0lFX0xUU1NNX0wwKQogCQkJcmV0dXJuIDE7CkBAIC02NDUsNjEgKzY0MiwyMSBAQAogCXJldHVybiBwY2llLT5jZmdfdHlwZTEgKyBvZmZzZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXBjODN4eF9wY2llX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKLQkJCQkgICAgaW50IG9mZnNldCwgaW50IGxlbiwgdTMyICp2YWwpCi17Ci0Jdm9pZCBfX2lvbWVtICpjZmdfYWRkcjsKLQotCWNmZ19hZGRyID0gbXBjODN4eF9wY2llX3JlbWFwX2NmZyhidXMsIGRldmZuLCBvZmZzZXQpOwotCWlmICghY2ZnX2FkZHIpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQlzd2l0Y2ggKGxlbikgewotCWNhc2UgMToKLQkJKnZhbCA9IGluXzgoY2ZnX2FkZHIpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCSp2YWwgPSBpbl9sZTE2KGNmZ19hZGRyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKnZhbCA9IGluX2xlMzIoY2ZnX2FkZHIpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCiBzdGF0aWMgaW50IG1wYzgzeHhfcGNpZV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAogCQkJCSAgICAgaW50IG9mZnNldCwgaW50IGxlbiwgdTMyIHZhbCkKIHsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBwY2lfYnVzX3RvX2hvc3QoYnVzKTsKLQl2b2lkIF9faW9tZW0gKmNmZ19hZGRyOwotCi0JY2ZnX2FkZHIgPSBtcGM4M3h4X3BjaWVfcmVtYXBfY2ZnKGJ1cywgZGV2Zm4sIG9mZnNldCk7Ci0JaWYgKCFjZmdfYWRkcikKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKIAogCS8qIFBQQ19JTkRJUkVDVF9UWVBFX1NVUlBSRVNTX1BSSU1BUllfQlVTICovCiAJaWYgKG9mZnNldCA9PSBQQ0lfUFJJTUFSWV9CVVMgJiYgYnVzLT5udW1iZXIgPT0gaG9zZS0+Zmlyc3RfYnVzbm8pCiAJCXZhbCAmPSAweGZmZmZmZjAwOwogCi0Jc3dpdGNoIChsZW4pIHsKLQljYXNlIDE6Ci0JCW91dF84KGNmZ19hZGRyLCB2YWwpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCW91dF9sZTE2KGNmZ19hZGRyLCB2YWwpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlvdXRfbGUzMihjZmdfYWRkciwgdmFsKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKwlyZXR1cm4gcGNpX2dlbmVyaWNfY29uZmlnX3dyaXRlKGJ1cywgZGV2Zm4sIG9mZnNldCwgbGVuLCB2YWwpOwogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9vcHMgbXBjODN4eF9wY2llX29wcyA9IHsKLQkucmVhZCA9IG1wYzgzeHhfcGNpZV9yZWFkX2NvbmZpZywKKwkubWFwX2J1cyA9IG1wYzgzeHhfcGNpZV9yZW1hcF9jZmcsCisJLnJlYWQgPSBwY2lfZ2VuZXJpY19jb25maWdfcmVhZCwKIAkud3JpdGUgPSBtcGM4M3h4X3BjaWVfd3JpdGVfY29uZmlnLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pbmRpcmVjdF9wY2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaW5kaXJlY3RfcGNpLmMKaW5kZXggMWY2YzU3MC4uNjkyZGU5ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pbmRpcmVjdF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2luZGlyZWN0X3BjaS5jCkBAIC0yMCwzMSArMjAsMzEgQEAKICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAKLWludCBpbmRpcmVjdF9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkgaW50IG9mZnNldCwgaW50IGxlbiwgdTMyICp2YWwpCitpbnQgX19pbmRpcmVjdF9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkgICB1bnNpZ25lZCBjaGFyIGJ1c19udW1iZXIsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgIGludCBvZmZzZXQsIGludCBsZW4sIHUzMiAqdmFsKQogewotCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zdChidXMpOwogCXZvbGF0aWxlIHZvaWQgX19pb21lbSAqY2ZnX2RhdGE7CiAJdTggY2ZnX3R5cGUgPSAwOwogCXUzMiBidXNfbm8sIHJlZzsKIAogCWlmIChob3NlLT5pbmRpcmVjdF90eXBlICYgUFBDX0lORElSRUNUX1RZUEVfTk9fUENJRV9MSU5LKSB7Ci0JCWlmIChidXMtPm51bWJlciAhPSBob3NlLT5maXJzdF9idXNubykKKwkJaWYgKGJ1c19udW1iZXIgIT0gaG9zZS0+Zmlyc3RfYnVzbm8pCiAJCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwogCQlpZiAoZGV2Zm4gIT0gMCkKIAkJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CiAJfQogCiAJaWYgKHBwY19tZC5wY2lfZXhjbHVkZV9kZXZpY2UpCi0JCWlmIChwcGNfbWQucGNpX2V4Y2x1ZGVfZGV2aWNlKGhvc2UsIGJ1cy0+bnVtYmVyLCBkZXZmbikpCisJCWlmIChwcGNfbWQucGNpX2V4Y2x1ZGVfZGV2aWNlKGhvc2UsIGJ1c19udW1iZXIsIGRldmZuKSkKIAkJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CiAKIAlpZiAoaG9zZS0+aW5kaXJlY3RfdHlwZSAmIFBQQ19JTkRJUkVDVF9UWVBFX1NFVF9DRkdfVFlQRSkKLQkJaWYgKGJ1cy0+bnVtYmVyICE9IGhvc2UtPmZpcnN0X2J1c25vKQorCQlpZiAoYnVzX251bWJlciAhPSBob3NlLT5maXJzdF9idXNubykKIAkJCWNmZ190eXBlID0gMTsKIAotCWJ1c19ubyA9IChidXMtPm51bWJlciA9PSBob3NlLT5maXJzdF9idXNubykgPwotCQkJaG9zZS0+c2VsZl9idXNubyA6IGJ1cy0+bnVtYmVyOworCWJ1c19ubyA9IChidXNfbnVtYmVyID09IGhvc2UtPmZpcnN0X2J1c25vKSA/CisJCQlob3NlLT5zZWxmX2J1c25vIDogYnVzX251bWJlcjsKIAogCWlmIChob3NlLT5pbmRpcmVjdF90eXBlICYgUFBDX0lORElSRUNUX1RZUEVfRVhUX1JFRykKIAkJcmVnID0gKChvZmZzZXQgJiAweGYwMCkgPDwgMTYpIHwgKG9mZnNldCAmIDB4ZmMpOwpAQCAtNzcsNiArNzcsMTUgQEAKIAlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwogfQogCitpbnQgaW5kaXJlY3RfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJIGludCBvZmZzZXQsIGludCBsZW4sIHUzMiAqdmFsKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zdChidXMpOworCisJcmV0dXJuIF9faW5kaXJlY3RfcmVhZF9jb25maWcoaG9zZSwgYnVzLT5udW1iZXIsIGRldmZuLCBvZmZzZXQsIGxlbiwKKwkJCQkgICAgICB2YWwpOworfQorCiBpbnQgaW5kaXJlY3Rfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKIAkJCSAgaW50IG9mZnNldCwgaW50IGxlbiwgdTMyIHZhbCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKaW5kZXggYzQ2NDhhZDUuLmJiZmJiZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCkBAIC0xOTI5LDcgKzE5MjksNyBAQAogCiAJREJHKCJzbXBfbXBpY19wcm9iZSgpLi4uXG4iKTsKIAotCW5yX2NwdXMgPSBjcHVtYXNrX3dlaWdodChjcHVfcG9zc2libGVfbWFzayk7CisJbnJfY3B1cyA9IG51bV9wb3NzaWJsZV9jcHVzKCk7CiAKIAlEQkcoIm5yX2NwdXM6ICVkXG4iLCBucl9jcHVzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfaHN0YV9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcHBjNHh4X2hzdGFfbXNpLmMKaW5kZXggZWQ5OTcwZi4uZjM2NmQyZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfaHN0YV9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9oc3RhX21zaS5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlwcGM0eHhfaHN0YV9tc2kuYWRkcmVzcyA9IG1lbS0+c3RhcnQ7CiAJcHBjNHh4X2hzdGFfbXNpLmRhdGEgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CiAJcHBjNHh4X2hzdGFfbXNpLmlycV9jb3VudCA9IGlycV9jb3VudDsKLQlpZiAoSVNfRVJSKHBwYzR4eF9oc3RhX21zaS5kYXRhKSkgeworCWlmICghcHBjNHh4X2hzdGFfbXNpLmRhdGEpIHsKIAkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gbWFwIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZS5jCmluZGV4IDFmMjljZWUuLmMyNTE4Y2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWUuYwpAQCAtNDk3LDcgKzQ5Nyw3IEBACiAJICogc2F2ZWQgbWljcm9jb2RlIGluZm9ybWF0aW9uIGFuZCBwdXQgaW4gdGhlIG5ldy4KIAkgKi8KIAltZW1zZXQoJnFlX2Zpcm13YXJlX2luZm8sIDAsIHNpemVvZihxZV9maXJtd2FyZV9pbmZvKSk7Ci0Jc3RyY3B5KHFlX2Zpcm13YXJlX2luZm8uaWQsIGZpcm13YXJlLT5pZCk7CisJc3RybGNweShxZV9maXJtd2FyZV9pbmZvLmlkLCBmaXJtd2FyZS0+aWQsIHNpemVvZihxZV9maXJtd2FyZV9pbmZvLmlkKSk7CiAJcWVfZmlybXdhcmVfaW5mby5leHRlbmRlZF9tb2RlcyA9IGZpcm13YXJlLT5leHRlbmRlZF9tb2RlczsKIAltZW1jcHkocWVfZmlybXdhcmVfaW5mby52dHJhcHMsIGZpcm13YXJlLT52dHJhcHMsCiAJCXNpemVvZihmaXJtd2FyZS0+dnRyYXBzKSk7CkBAIC01ODMsOCArNTgzLDggQEAKIAkvKiBDb3B5IHRoZSBkYXRhIGludG8gcWVfZmlybXdhcmVfaW5mbyovCiAJc3Byb3AgPSBvZl9nZXRfcHJvcGVydHkoZncsICJpZCIsIE5VTEwpOwogCWlmIChzcHJvcCkKLQkJc3RybmNweShxZV9maXJtd2FyZV9pbmZvLmlkLCBzcHJvcCwKLQkJCXNpemVvZihxZV9maXJtd2FyZV9pbmZvLmlkKSAtIDEpOworCQlzdHJsY3B5KHFlX2Zpcm13YXJlX2luZm8uaWQsIHNwcm9wLAorCQkJc2l6ZW9mKHFlX2Zpcm13YXJlX2luZm8uaWQpKTsKIAogCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGZ3LCAiZXh0ZW5kZWQtbW9kZXMiLCBOVUxMKTsKIAlpZiAocHJvcCAmJiAocHJvcC0+bGVuZ3RoID09IHNpemVvZih1NjQpKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi94aWNzL3hpY3MtY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MveGljcy1jb21tb24uYwppbmRleCAzNjUyNDljLi4xMjU3NDNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MveGljcy1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3hpY3MveGljcy1jb21tb24uYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJLyogUmVnaXN0ZXIgYWxsIHRoZSBJUElzICovCiAJeGljc19yZXF1ZXN0X2lwaSgpOwogCi0JcmV0dXJuIGNwdW1hc2tfd2VpZ2h0KGNwdV9wb3NzaWJsZV9tYXNrKTsKKwlyZXR1cm4gbnVtX3Bvc3NpYmxlX2NwdXMoKTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwppbmRleCA1YjE1MGYwLi5lNTk5MjU5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvbm1pLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KIAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CkBAIC0xODMsMTQgKzE4NCw2IEBACiAjZGVmaW5lIEdFVFdPUkQodikJKCgodilbMF0gPDwgMjQpICsgKCh2KVsxXSA8PCAxNikgKyAoKHYpWzJdIDw8IDgpICsgKHYpWzNdKQogI2VuZGlmCiAKLSNkZWZpbmUgaXN4ZGlnaXQoYykJKCgnMCcgPD0gKGMpICYmIChjKSA8PSAnOScpIFwKLQkJCSB8fCAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2YnKSBcCi0JCQkgfHwgKCdBJyA8PSAoYykgJiYgKGMpIDw9ICdGJykpCi0jZGVmaW5lIGlzYWxudW0oYykJKCgnMCcgPD0gKGMpICYmIChjKSA8PSAnOScpIFwKLQkJCSB8fCAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKSBcCi0JCQkgfHwgKCdBJyA8PSAoYykgJiYgKGMpIDw9ICdaJykpCi0jZGVmaW5lIGlzc3BhY2UoYykJKGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09IDEwIHx8IGMgPT0gMTMgfHwgYyA9PSAwKQotCiBzdGF0aWMgY2hhciAqaGVscF9zdHJpbmcgPSAiXAogQ29tbWFuZHM6XG5cCiAgIGIJc2hvdyBicmVha3BvaW50c1xuXApAQCAtMzM3LDYgKzMzMCw3IEBACiAJYXJncy50b2tlbiA9IHJ0YXNfdG9rZW4oInNldC1pbmRpY2F0b3IiKTsKIAlpZiAoYXJncy50b2tlbiA9PSBSVEFTX1VOS05PV05fU0VSVklDRSkKIAkJcmV0dXJuOworCWFyZ3MudG9rZW4gPSBjcHVfdG9fYmUzMihhcmdzLnRva2VuKTsKIAlhcmdzLm5hcmdzID0gY3B1X3RvX2JlMzIoMyk7CiAJYXJncy5ucmV0ID0gY3B1X3RvX2JlMzIoMSk7CiAJYXJncy5yZXRzID0gJmFyZ3MuYXJnc1szXTsKQEAgLTIxNjQsOSArMjE1OCw2IEBACiB9CiAjZW5kaWYKIAotI2RlZmluZSBpc3hkaWdpdChjKQkoKCcwJyA8PSAoYykgJiYgKGMpIDw9ICc5JykgXAotCQkJIHx8ICgnYScgPD0gKGMpICYmIChjKSA8PSAnZicpIFwKLQkJCSB8fCAoJ0EnIDw9IChjKSAmJiAoYykgPD0gJ0YnKSkKIHN0YXRpYyB2b2lkCiBkdW1wKHZvaWQpCiB7CkBAIC0yNTY5LDcgKzI1NjAsNyBAQAogCQlpbnQgaTsKIAkJZm9yIChpPTA7IGk8NjM7IGkrKykgewogCQkJYyA9IGluY2hhcigpOwotCQkJaWYgKGlzc3BhY2UoYykpIHsKKwkJCWlmIChpc3NwYWNlKGMpIHx8IGMgPT0gJ1wwJykgewogCQkJCXRlcm1jaCA9IGM7CiAJCQkJYnJlYWs7CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDY4YjY4ZDcuLjM3M2NkNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC02Niw2ICs2Niw3IEBACiAJc2VsZWN0IEFSQ0hfSEFTX0FUT01JQzY0X0RFQ19JRl9QT1NJVElWRQogCXNlbGVjdCBBUkNIX0hBU19ERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUwogCXNlbGVjdCBBUkNIX0hBU19HQ09WX1BST0ZJTEVfQUxMCisJc2VsZWN0IEFSQ0hfSEFTX1NHX0NIQUlOCiAJc2VsZWN0IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHCiAJc2VsZWN0IEFSQ0hfSU5MSU5FX1JFQURfTE9DSwogCXNlbGVjdCBBUkNIX0lOTElORV9SRUFEX0xPQ0tfQkgKQEAgLTExNiw3ICsxMTcsNiBAQAogCXNlbGVjdCBIQVZFX0JQRl9KSVQgaWYgNjRCSVQgJiYgUEFDS19TVEFDSwogCXNlbGVjdCBIQVZFX0NNUFhDSEdfRE9VQkxFCiAJc2VsZWN0IEhBVkVfQ01QWENIR19MT0NBTAotCXNlbGVjdCBIQVZFX0NfUkVDT1JETUNPVU5UCiAJc2VsZWN0IEhBVkVfREVCVUdfS01FTUxFQUsKIAlzZWxlY3QgSEFWRV9EWU5BTUlDX0ZUUkFDRSBpZiA2NEJJVAogCXNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFX1dJVEhfUkVHUyBpZiA2NEJJVApAQCAtMTUxLDcgKzE1MSw2IEBACiAJc2VsZWN0IFRUWQogCXNlbGVjdCBWSVJUX0NQVV9BQ0NPVU5USU5HCiAJc2VsZWN0IFZJUlRfVE9fQlVTCi0Jc2VsZWN0IEFSQ0hfSEFTX1NHX0NIQUlOCiAKIGNvbmZpZyBTQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVIKIAlkZWZfYm9vbCB5CkBAIC0xODUsNiArMTg0LDEwIEBACiAJZGVmX2Jvb2wgbgogCXNlbGVjdCBIQVZFX01BUkNIX1oxOTZfRkVBVFVSRVMKIAorY29uZmlnIEhBVkVfTUFSQ0hfWjEzX0ZFQVRVUkVTCisJZGVmX2Jvb2wgbgorCXNlbGVjdCBIQVZFX01BUkNIX1pFQzEyX0ZFQVRVUkVTCisKIGNob2ljZQogCXByb21wdCAiUHJvY2Vzc29yIHR5cGUiCiAJZGVmYXVsdCBNQVJDSF9HNQpAQCAtMjQ0LDYgKzI0NywxNCBAQAogCSAgMjgyNyBzZXJpZXMpLiBUaGUga2VybmVsIHdpbGwgYmUgc2xpZ2h0bHkgZmFzdGVyIGJ1dCB3aWxsIG5vdCB3b3JrIG9uCiAJICBvbGRlciBtYWNoaW5lcy4KIAorY29uZmlnIE1BUkNIX1oxMworCWJvb2wgIklCTSB6MTMiCisJc2VsZWN0IEhBVkVfTUFSQ0hfWjEzX0ZFQVRVUkVTIGlmIDY0QklUCisJaGVscAorCSAgU2VsZWN0IHRoaXMgdG8gZW5hYmxlIG9wdGltaXphdGlvbnMgZm9yIElCTSB6MTMgKDI5NjQgc2VyaWVzKS4KKwkgIFRoZSBrZXJuZWwgd2lsbCBiZSBzbGlnaHRseSBmYXN0ZXIgYnV0IHdpbGwgbm90IHdvcmsgb24gb2xkZXIKKwkgIG1hY2hpbmVzLgorCiBlbmRjaG9pY2UKIAogY29uZmlnIE1BUkNIX0c1X1RVTkUKQEAgLTI2Nyw2ICsyNzgsOSBAQAogY29uZmlnIE1BUkNIX1pFQzEyX1RVTkUKIAlkZWZfYm9vbCBUVU5FX1pFQzEyIHx8IE1BUkNIX1pFQzEyICYmIFRVTkVfREVGQVVMVAogCitjb25maWcgTUFSQ0hfWjEzX1RVTkUKKwlkZWZfYm9vbCBUVU5FX1oxMyB8fCBNQVJDSF9aMTMgJiYgVFVORV9ERUZBVUxUCisKIGNob2ljZQogCXByb21wdCAiVHVuZSBjb2RlIGdlbmVyYXRpb24iCiAJZGVmYXVsdCBUVU5FX0RFRkFVTFQKQEAgLTMwNSw2ICszMTksOSBAQAogY29uZmlnIFRVTkVfWkVDMTIKIAlib29sICJJQk0gekJDMTIgYW5kIHpFQzEyIgogCitjb25maWcgVFVORV9aMTMKKwlib29sICJJQk0gejEzIgorCiBlbmRjaG9pY2UKIAogY29uZmlnIDY0QklUCkBAIC0zNTYsMTQgKzM3MywxNCBAQAogCSAgRXZlbiBpZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBZLgogCiBjb25maWcgTlJfQ1BVUwotCWludCAiTWF4aW11bSBudW1iZXIgb2YgQ1BVcyAoMi0yNTYpIgotCXJhbmdlIDIgMjU2CisJaW50ICJNYXhpbXVtIG51bWJlciBvZiBDUFVzICgyLTUxMikiCisJcmFuZ2UgMiA1MTIKIAlkZXBlbmRzIG9uIFNNUAogCWRlZmF1bHQgIjMyIiBpZiAhNjRCSVQKIAlkZWZhdWx0ICI2NCIgaWYgNjRCSVQKIAloZWxwCiAJICBUaGlzIGFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgbWF4aW11bSBudW1iZXIgb2YgQ1BVcyB3aGljaCB0aGlzCi0JICBrZXJuZWwgd2lsbCBzdXBwb3J0LiBUaGUgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgaXMgMjU2IGFuZCB0aGUKKwkgIGtlcm5lbCB3aWxsIHN1cHBvcnQuIFRoZSBtYXhpbXVtIHN1cHBvcnRlZCB2YWx1ZSBpcyA1MTIgYW5kIHRoZQogCSAgbWluaW11bSB2YWx1ZSB3aGljaCBtYWtlcyBzZW5zZSBpcyAyLgogCiAJICBUaGlzIGlzIHB1cmVseSB0byBzYXZlIG1lbW9yeSAtIGVhY2ggc3VwcG9ydGVkIENQVSBhZGRzCkBAIC0zNzgsMTcgKzM5NSwyNiBAQAogCSAgY2FuIGJlIGNvbnRyb2xsZWQgdGhyb3VnaCAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUjLgogCSAgU2F5IE4gaWYgeW91IHdhbnQgdG8gZGlzYWJsZSBDUFUgaG90cGx1Zy4KIAorY29uZmlnIFNDSEVEX1NNVAorCWRlZl9ib29sIG4KKwogY29uZmlnIFNDSEVEX01DCiAJZGVmX2Jvb2wgbgogCiBjb25maWcgU0NIRURfQk9PSworCWRlZl9ib29sIG4KKworY29uZmlnIFNDSEVEX1RPUE9MT0dZCiAJZGVmX2Jvb2wgeQotCXByb21wdCAiQm9vayBzY2hlZHVsZXIgc3VwcG9ydCIKKwlwcm9tcHQgIlRvcG9sb2d5IHNjaGVkdWxlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gU01QCisJc2VsZWN0IFNDSEVEX1NNVAogCXNlbGVjdCBTQ0hFRF9NQworCXNlbGVjdCBTQ0hFRF9CT09LCiAJaGVscAotCSAgQm9vayBzY2hlZHVsZXIgc3VwcG9ydCBpbXByb3ZlcyB0aGUgQ1BVIHNjaGVkdWxlcidzIGRlY2lzaW9uIG1ha2luZwotCSAgd2hlbiBkZWFsaW5nIHdpdGggbWFjaGluZXMgdGhhdCBoYXZlIHNldmVyYWwgYm9va3MuCisJICBUb3BvbG9neSBzY2hlZHVsZXIgc3VwcG9ydCBpbXByb3ZlcyB0aGUgQ1BVIHNjaGVkdWxlcidzIGRlY2lzaW9uCisJICBtYWtpbmcgd2hlbiBkZWFsaW5nIHdpdGggbWFjaGluZXMgdGhhdCBoYXZlIG11bHRpLXRocmVhZGluZywKKwkgIG11bHRpcGxlIGNvcmVzIG9yIG11bHRpcGxlIGJvb2tzLgogCiBzb3VyY2Uga2VybmVsL0tjb25maWcucHJlZW1wdAogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvTWFrZWZpbGUgYi9hcmNoL3MzOTAvTWFrZWZpbGUKaW5kZXggODc4ZTY3OS4uYWNiNjg1OSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9NYWtlZmlsZQpAQCAtNDIsNiArNDIsNyBAQAogbWZsYWdzLSQoQ09ORklHX01BUkNIX1oxMCkgICAgOj0gLW1hcmNoPXoxMAogbWZsYWdzLSQoQ09ORklHX01BUkNIX1oxOTYpICAgOj0gLW1hcmNoPXoxOTYKIG1mbGFncy0kKENPTkZJR19NQVJDSF9aRUMxMikgIDo9IC1tYXJjaD16RUMxMgorbWZsYWdzLSQoQ09ORklHX01BUkNIX1oxMykgICA6PSAtbWFyY2g9ejEzCiAKIGFmbGFncy15ICs9ICQobWZsYWdzLXkpCiBjZmxhZ3MteSArPSAkKG1mbGFncy15KQpAQCAtNTMsNiArNTQsNyBAQAogY2ZsYWdzLSQoQ09ORklHX01BUkNIX1oxMF9UVU5FKQkJKz0gLW10dW5lPXoxMAogY2ZsYWdzLSQoQ09ORklHX01BUkNIX1oxOTZfVFVORSkJKz0gLW10dW5lPXoxOTYKIGNmbGFncy0kKENPTkZJR19NQVJDSF9aRUMxMl9UVU5FKQkrPSAtbXR1bmU9ekVDMTIKK2NmbGFncy0kKENPTkZJR19NQVJDSF9aMTNfVFVORSkJKz0gLW10dW5lPXoxMwogCiAjS0JVSUxEX0lNQUdFIGlzIG5lY2Vzc2FyeSBmb3IgbWFrZSBycG0KIEtCVUlMRF9JTUFHRQk6PWFyY2gvczM5MC9ib290L2ltYWdlCkBAIC04NSw2ICs4NywxNiBAQAogY2ZsYWdzLSQoQ09ORklHX1dBUk5fRFlOQU1JQ19TVEFDSykgKz0gLW13YXJuLWR5bmFtaWNzdGFjawogZW5kaWYKIAoraWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgorIyBtYWtlIHVzZSBvZiBob3RwYXRjaCBmZWF0dXJlIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBpdAorY2NfaG90cGF0Y2gJOj0gLW1ob3RwYXRjaD0wLDMKK2lmZXEgKCQoY2FsbCBjYy1vcHRpb24teW4sJChjY19ob3RwYXRjaCkpLHkpCitDQ19GTEFHU19GVFJBQ0UgOj0gJChjY19ob3RwYXRjaCkKK0tCVUlMRF9BRkxBR1MJKz0gLURDQ19VU0lOR19IT1RQQVRDSAorS0JVSUxEX0NGTEFHUwkrPSAtRENDX1VTSU5HX0hPVFBBVENICitlbmRpZgorZW5kaWYKKwogS0JVSUxEX0NGTEFHUwkrPSAtbWJhY2tjaGFpbiAtbXNvZnQtZmxvYXQgJChjZmxhZ3MteSkKIEtCVUlMRF9DRkxBR1MJKz0gLXBpcGUgLWZuby1zdHJlbmd0aC1yZWR1Y2UgLVduby1zaWduLWNvbXBhcmUKIEtCVUlMRF9BRkxBR1MJKz0gJChhZmxhZ3MteSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9ib290L2NvbXByZXNzZWQvbWlzYy5jIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggNTdjYmFmZi4uNDI1MDZiMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKQEAgLTgsNiArOCw3IEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NjbHAuaD4KICNpbmNsdWRlIDxhc20vaXBsLmg+CiAjaW5jbHVkZSAic2l6ZXMuaCIKIApAQCAtNjMsOCArNjQsNiBAQAogI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VueHouYyIKICNlbmRpZgogCi1leHRlcm4gX3NjbHBfcHJpbnRfZWFybHkoY29uc3QgY2hhciAqKTsKLQogc3RhdGljIGludCBwdXRzKGNvbnN0IGNoYXIgKnMpCiB7CiAJX3NjbHBfcHJpbnRfZWFybHkocyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY29uZmlncy9kZWZhdWx0X2RlZmNvbmZpZyBiL2FyY2gvczM5MC9jb25maWdzL2RlZmF1bHRfZGVmY29uZmlnCmluZGV4IDk0MzJkMGYuLjY0NzA3NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jb25maWdzL2RlZmF1bHRfZGVmY29uZmlnCisrKyBiL2FyY2gvczM5MC9jb25maWdzL2RlZmF1bHRfZGVmY29uZmlnCkBAIC01NTUsNyArNTU1LDYgQEAKIENPTkZJR19ERUJVR19PQkpFQ1RTX1BFUkNQVV9DT1VOVEVSPXkKIENPTkZJR19TTFVCX0RFQlVHX09OPXkKIENPTkZJR19TTFVCX1NUQVRTPXkKLUNPTkZJR19ERUJVR19LTUVNTEVBSz15CiBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0U9eQogQ09ORklHX0RFQlVHX1ZNPXkKIENPTkZJR19ERUJVR19WTV9SQj15CkBAIC01NjMsNiArNTYyLDcgQEAKIENPTkZJR19ERUJVR19QRVJfQ1BVX01BUFM9eQogQ09ORklHX0RFQlVHX1NISVJRPXkKIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKK0NPTkZJR19QQU5JQ19PTl9PT1BTPXkKIENPTkZJR19USU1FUl9TVEFUUz15CiBDT05GSUdfREVCVUdfUlRfTVVURVhFUz15CiBDT05GSUdfREVCVUdfV1dfTVVURVhfU0xPV1BBVEg9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NvbmZpZ3MvZ2Nvdl9kZWZjb25maWcgYi9hcmNoL3MzOTAvY29uZmlncy9nY292X2RlZmNvbmZpZwppbmRleCAyMTlkY2E2Li41YzMwOTcyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY29uZmlncy9nY292X2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvY29uZmlncy9nY292X2RlZmNvbmZpZwpAQCAtNTQwLDYgKzU0MCw3IEBACiBDT05GSUdfTUFHSUNfU1lTUlE9eQogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUVNT1JZX05PVElGSUVSX0VSUk9SX0lOSkVDVD1tCitDT05GSUdfUEFOSUNfT05fT09QUz15CiBDT05GSUdfVElNRVJfU1RBVFM9eQogQ09ORklHX1JDVV9UT1JUVVJFX1RFU1Q9bQogQ09ORklHX1JDVV9DUFVfU1RBTExfVElNRU9VVD02MApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NvbmZpZ3MvcGVyZm9ybWFuY2VfZGVmY29uZmlnIGIvYXJjaC9zMzkwL2NvbmZpZ3MvcGVyZm9ybWFuY2VfZGVmY29uZmlnCmluZGV4IDgyMmMyZjIuLmJkYTcwZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jb25maWdzL3BlcmZvcm1hbmNlX2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvY29uZmlncy9wZXJmb3JtYW5jZV9kZWZjb25maWcKQEAgLTUzNyw2ICs1MzcsNyBAQAogQ09ORklHX1VOVVNFRF9TWU1CT0xTPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKK0NPTkZJR19QQU5JQ19PTl9PT1BTPXkKIENPTkZJR19USU1FUl9TVEFUUz15CiBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVD1tCiBDT05GSUdfUkNVX0NQVV9TVEFMTF9USU1FT1VUPTYwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY29uZmlncy96ZmNwZHVtcF9kZWZjb25maWcgYi9hcmNoL3MzOTAvY29uZmlncy96ZmNwZHVtcF9kZWZjb25maWcKaW5kZXggOWQ2MzA1MS4uMWIwMTg0YSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NvbmZpZ3MvemZjcGR1bXBfZGVmY29uZmlnCisrKyBiL2FyY2gvczM5MC9jb25maWdzL3pmY3BkdW1wX2RlZmNvbmZpZwpAQCAtNzEsNiArNzEsNyBAQAogQ09ORklHX0RFQlVHX0lORk89eQogQ09ORklHX0RFQlVHX0ZTPXkKIENPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX1BBTklDX09OX09PUFM9eQogIyBDT05GSUdfU0NIRURfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1JDVV9DUFVfU1RBTExfVElNRU9VVD02MAogIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYwppbmRleCAxZjI3MmIyLi41NTY2Y2U4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAogc3RhdGljIHZvaWQgYWVzX2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCwgY29uc3QgdTggKmluKQogewotCWNvbnN0IHN0cnVjdCBzMzkwX2Flc19jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXN0cnVjdCBzMzkwX2Flc19jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCiAJaWYgKHVubGlrZWx5KG5lZWRfZmFsbGJhY2soc2N0eC0+a2V5X2xlbikpKSB7CiAJCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUoc2N0eC0+ZmFsbGJhY2suY2lwLCBvdXQsIGluKTsKQEAgLTE1OSw3ICsxNTksNyBAQAogCiBzdGF0aWMgdm9pZCBhZXNfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pCiB7Ci0JY29uc3Qgc3RydWN0IHMzOTBfYWVzX2N0eCAqc2N0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJc3RydWN0IHMzOTBfYWVzX2N0eCAqc2N0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAKIAlpZiAodW5saWtlbHkobmVlZF9mYWxsYmFjayhzY3R4LT5rZXlfbGVuKSkpIHsKIAkJY3J5cHRvX2NpcGhlcl9kZWNyeXB0X29uZShzY3R4LT5mYWxsYmFjay5jaXAsIG91dCwgaW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2RlZmNvbmZpZyBiL2FyY2gvczM5MC9kZWZjb25maWcKaW5kZXggNzg1YzVmMi4uODNlZjcwMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2RlZmNvbmZpZworKysgYi9hcmNoL3MzOTAvZGVmY29uZmlnCkBAIC0xNCw3ICsxNCw2IEBACiBDT05GSUdfQ0dST1VQUz15CiBDT05GSUdfQ1BVU0VUUz15CiBDT05GSUdfQ0dST1VQX0NQVUFDQ1Q9eQotQ09ORklHX1JFU09VUkNFX0NPVU5URVJTPXkKIENPTkZJR19NRU1DRz15CiBDT05GSUdfTUVNQ0dfU1dBUD15CiBDT05GSUdfQ0dST1VQX1NDSEVEPXkKQEAgLTIyLDEyICsyMSw4IEBACiBDT05GSUdfQkxLX0NHUk9VUD15CiBDT05GSUdfTkFNRVNQQUNFUz15CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQotQ09ORklHX1JEX0JaSVAyPXkKLUNPTkZJR19SRF9MWk1BPXkKLUNPTkZJR19SRF9YWj15Ci1DT05GSUdfUkRfTFpPPXkKLUNPTkZJR19SRF9MWjQ9eQogQ09ORklHX0VYUEVSVD15CitDT05GSUdfQlBGX1NZU0NBTEw9eQogIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0CiBDT05GSUdfUFJPRklMSU5HPXkKIENPTkZJR19PUFJPRklMRT15CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvTWFrZWZpbGUgYi9hcmNoL3MzOTAvaHlwZnMvTWFrZWZpbGUKaW5kZXggMDZmOGQ5NS4uMmVlMjViYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2h5cGZzL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9oeXBmcy9NYWtlZmlsZQpAQCAtNSwzICs1LDQgQEAKIG9iai0kKENPTkZJR19TMzkwX0hZUEZTX0ZTKSArPSBzMzkwX2h5cGZzLm8KIAogczM5MF9oeXBmcy1vYmpzIDo9IGlub2RlLm8gaHlwZnNfZGlhZy5vIGh5cGZzX3ZtLm8gaHlwZnNfZGJmcy5vIGh5cGZzX3NwcnAubworczM5MF9oeXBmcy1vYmpzICs9IGh5cGZzX2RpYWcwYy5vCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnMuaCBiL2FyY2gvczM5MC9oeXBmcy9oeXBmcy5oCmluZGV4IGIzNGI1YWIuLmVlY2RlNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9oeXBmcy5oCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmcy5oCkBAIC0zNyw2ICszNywxMCBAQAogZXh0ZXJuIHZvaWQgaHlwZnNfdm1fZXhpdCh2b2lkKTsKIGV4dGVybiBpbnQgaHlwZnNfdm1fY3JlYXRlX2ZpbGVzKHN0cnVjdCBkZW50cnkgKnJvb3QpOwogCisvKiBWTSBkaWFnbm9zZSAwYyAqLworaW50IGh5cGZzX2RpYWcwY19pbml0KHZvaWQpOwordm9pZCBoeXBmc19kaWFnMGNfZXhpdCh2b2lkKTsKKwogLyogU2V0IFBhcnRpdGlvbi1SZXNvdXJjZSBQYXJhbWV0ZXIgKi8KIGludCBoeXBmc19zcHJwX2luaXQodm9pZCk7CiB2b2lkIGh5cGZzX3NwcnBfZXhpdCh2b2lkKTsKQEAgLTQ5LDcgKzUzLDYgQEAKIAl2b2lkCQkJKmJ1Zl9mcmVlX3B0cjsKIAlzaXplX3QJCQlzaXplOwogCXN0cnVjdCBoeXBmc19kYmZzX2ZpbGUJKmRiZnNfZmlsZTsKLQlzdHJ1Y3Qga3JlZgkJa3JlZjsKIH07CiAKIHN0cnVjdCBoeXBmc19kYmZzX2ZpbGUgewpAQCAtNjEsOCArNjQsNiBAQAogCQkJCQkgICB1bnNpZ25lZCBsb25nKTsKIAogCS8qIFByaXZhdGUgZGF0YSBmb3IgaHlwZnNfZGJmcy5jICovCi0Jc3RydWN0IGh5cGZzX2RiZnNfZGF0YQkqZGF0YTsKLQlzdHJ1Y3QgZGVsYXllZF93b3JrCWRhdGFfZnJlZV93b3JrOwogCXN0cnVjdCBtdXRleAkJbG9jazsKIAlzdHJ1Y3QgZGVudHJ5CQkqZGVudHJ5OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kYmZzLmMgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGJmcy5jCmluZGV4IDQ3ZmUxMDUuLjc1MmY2ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kYmZzLmMKKysrIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RiZnMuYwpAQCAtMTcsMzMgKzE3LDE2IEBACiAJZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gTlVMTDsKLQlrcmVmX2luaXQoJmRhdGEtPmtyZWYpOwogCWRhdGEtPmRiZnNfZmlsZSA9IGY7CiAJcmV0dXJuIGRhdGE7CiB9CiAKLXN0YXRpYyB2b2lkIGh5cGZzX2RiZnNfZGF0YV9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQorc3RhdGljIHZvaWQgaHlwZnNfZGJmc19kYXRhX2ZyZWUoc3RydWN0IGh5cGZzX2RiZnNfZGF0YSAqZGF0YSkKIHsKLQlzdHJ1Y3QgaHlwZnNfZGJmc19kYXRhICpkYXRhOwotCi0JZGF0YSA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgaHlwZnNfZGJmc19kYXRhLCBrcmVmKTsKIAlkYXRhLT5kYmZzX2ZpbGUtPmRhdGFfZnJlZShkYXRhLT5idWZfZnJlZV9wdHIpOwogCWtmcmVlKGRhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBkYXRhX2ZyZWVfZGVsYXllZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGh5cGZzX2RiZnNfZGF0YSAqZGF0YTsKLQlzdHJ1Y3QgaHlwZnNfZGJmc19maWxlICpkZjsKLQotCWRmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoeXBmc19kYmZzX2ZpbGUsIGRhdGFfZnJlZV93b3JrLndvcmspOwotCW11dGV4X2xvY2soJmRmLT5sb2NrKTsKLQlkYXRhID0gZGYtPmRhdGE7Ci0JZGYtPmRhdGEgPSBOVUxMOwotCW11dGV4X3VubG9jaygmZGYtPmxvY2spOwotCWtyZWZfcHV0KCZkYXRhLT5rcmVmLCBoeXBmc19kYmZzX2RhdGFfZnJlZSk7Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IGRiZnNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSBzaXplX3Qgc2l6ZSwgbG9mZl90ICpwcG9zKQogewpAQCAtNTYsMjggKzM5LDIxIEBACiAKIAlkZiA9IGZpbGVfaW5vZGUoZmlsZSktPmlfcHJpdmF0ZTsKIAltdXRleF9sb2NrKCZkZi0+bG9jayk7Ci0JaWYgKCFkZi0+ZGF0YSkgewotCQlkYXRhID0gaHlwZnNfZGJmc19kYXRhX2FsbG9jKGRmKTsKLQkJaWYgKCFkYXRhKSB7Ci0JCQltdXRleF91bmxvY2soJmRmLT5sb2NrKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCXJjID0gZGYtPmRhdGFfY3JlYXRlKCZkYXRhLT5idWYsICZkYXRhLT5idWZfZnJlZV9wdHIsCi0JCQkJICAgICAmZGF0YS0+c2l6ZSk7Ci0JCWlmIChyYykgewotCQkJbXV0ZXhfdW5sb2NrKCZkZi0+bG9jayk7Ci0JCQlrZnJlZShkYXRhKTsKLQkJCXJldHVybiByYzsKLQkJfQotCQlkZi0+ZGF0YSA9IGRhdGE7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGYtPmRhdGFfZnJlZV93b3JrLCBIWik7CisJZGF0YSA9IGh5cGZzX2RiZnNfZGF0YV9hbGxvYyhkZik7CisJaWYgKCFkYXRhKSB7CisJCW11dGV4X3VubG9jaygmZGYtPmxvY2spOworCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JZGF0YSA9IGRmLT5kYXRhOwotCWtyZWZfZ2V0KCZkYXRhLT5rcmVmKTsKKwlyYyA9IGRmLT5kYXRhX2NyZWF0ZSgmZGF0YS0+YnVmLCAmZGF0YS0+YnVmX2ZyZWVfcHRyLCAmZGF0YS0+c2l6ZSk7CisJaWYgKHJjKSB7CisJCW11dGV4X3VubG9jaygmZGYtPmxvY2spOworCQlrZnJlZShkYXRhKTsKKwkJcmV0dXJuIHJjOworCX0KIAltdXRleF91bmxvY2soJmRmLT5sb2NrKTsKIAogCXJjID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBzaXplLCBwcG9zLCBkYXRhLT5idWYsIGRhdGEtPnNpemUpOwotCWtyZWZfcHV0KCZkYXRhLT5rcmVmLCBoeXBmc19kYmZzX2RhdGFfZnJlZSk7CisJaHlwZnNfZGJmc19kYXRhX2ZyZWUoZGF0YSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xMDgsNyArODQsNiBAQAogCWlmIChJU19FUlIoZGYtPmRlbnRyeSkpCiAJCXJldHVybiBQVFJfRVJSKGRmLT5kZW50cnkpOwogCW11dGV4X2luaXQoJmRmLT5sb2NrKTsKLQlJTklUX0RFTEFZRURfV09SSygmZGYtPmRhdGFfZnJlZV93b3JrLCBkYXRhX2ZyZWVfZGVsYXllZCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnMGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGMwZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcwYy5jCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogSHlwZXJ2aXNvciBmaWxlc3lzdGVtIGZvciBMaW51eCBvbiBzMzkwCisgKgorICogRGlhZyAwQyBpbXBsZW1lbnRhdGlvbgorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxNAorICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2h5cGZzLmg+CisjaW5jbHVkZSAiaHlwZnMuaCIKKworI2RlZmluZSBEQkZTX0QwQ19IRFJfVkVSU0lPTiAwCisKKy8qCisgKiBFeGVjdXRlIGRpYWdub3NlIDBjIGluIDMxIGJpdCBtb2RlCisgKi8KK3N0YXRpYyB2b2lkIGRpYWcwYyhzdHJ1Y3QgaHlwZnNfZGlhZzBjX2VudHJ5ICplbnRyeSkKK3sKKwlhc20gdm9sYXRpbGUgKAorI2lmZGVmIENPTkZJR182NEJJVAorCQkiCXNhbTMxXG4iCisJCSIJZGlhZwklMCwlMCwweDBjXG4iCisJCSIJc2FtNjRcbiIKKyNlbHNlCisJCSIJZGlhZyAlMCwlMCwweDBjXG4iCisjZW5kaWYKKwkJOiAvKiBubyBvdXRwdXQgcmVnaXN0ZXIgKi8KKwkJOiAiYSIgKGVudHJ5KQorCQk6ICJtZW1vcnkiKTsKK30KKworLyoKKyAqIEdldCBoeXBmc19kaWFnMGNfZW50cnkgZnJvbSBDUFUgdmVjdG9yIGFuZCBzdG9yZSBkaWFnMGMgZGF0YQorICovCitzdGF0aWMgdm9pZCBkaWFnMGNfZm4odm9pZCAqZGF0YSkKK3sKKwlkaWFnMGMoKCh2b2lkICoqKSBkYXRhKVtzbXBfcHJvY2Vzc29yX2lkKCldKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGJ1ZmZlciBhbmQgc3RvcmUgZGlhZyAwYyBkYXRhCisgKi8KK3N0YXRpYyB2b2lkICpkaWFnMGNfc3RvcmUodW5zaWduZWQgaW50ICpjb3VudCkKK3sKKwlzdHJ1Y3QgaHlwZnNfZGlhZzBjX2RhdGEgKmRpYWcwY19kYXRhOworCXVuc2lnbmVkIGludCBjcHVfY291bnQsIGNwdSwgaTsKKwl2b2lkICoqY3B1X3ZlYzsKKworCWdldF9vbmxpbmVfY3B1cygpOworCWNwdV9jb3VudCA9IG51bV9vbmxpbmVfY3B1cygpOworCWNwdV92ZWMgPSBrbWFsbG9jKHNpemVvZigqY3B1X3ZlYykgKiBudW1fcG9zc2libGVfY3B1cygpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNwdV92ZWMpCisJCWdvdG8gZmFpbF9wdXRfb25saW5lX2NwdXM7CisJLyogTm90ZTogRGlhZyAwYyBuZWVkcyA4IGJ5dGUgYWxpZ25tZW50IGFuZCByZWFsIHN0b3JhZ2UgKi8KKwlkaWFnMGNfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoeXBmc19kaWFnMGNfaGRyKSArCisJCQkgICAgICBjcHVfY291bnQgKiBzaXplb2Yoc3RydWN0IGh5cGZzX2RpYWcwY19lbnRyeSksCisJCQkgICAgICBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJaWYgKCFkaWFnMGNfZGF0YSkKKwkJZ290byBmYWlsX2tmcmVlX2NwdV92ZWM7CisJaSA9IDA7CisJLyogRmlsbCBDUFUgdmVjdG9yIGZvciBlYWNoIG9ubGluZSBDUFUgKi8KKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQlkaWFnMGNfZGF0YS0+ZW50cnlbaV0uY3B1ID0gY3B1OworCQljcHVfdmVjW2NwdV0gPSAmZGlhZzBjX2RhdGEtPmVudHJ5W2krK107CisJfQorCS8qIENvbGxlY3QgZGF0YSBhbGwgQ1BVcyAqLworCW9uX2VhY2hfY3B1KGRpYWcwY19mbiwgY3B1X3ZlYywgMSk7CisJKmNvdW50ID0gY3B1X2NvdW50OworCWtmcmVlKGNwdV92ZWMpOworCXB1dF9vbmxpbmVfY3B1cygpOworCXJldHVybiBkaWFnMGNfZGF0YTsKKworZmFpbF9rZnJlZV9jcHVfdmVjOgorCWtmcmVlKGNwdV92ZWMpOworZmFpbF9wdXRfb25saW5lX2NwdXM6CisJcHV0X29ubGluZV9jcHVzKCk7CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cit9CisKKy8qCisgKiBIeXBmcyBEQkZTIGNhbGxiYWNrOiBGcmVlIGRpYWcgMGMgZGF0YQorICovCitzdGF0aWMgdm9pZCBkYmZzX2RpYWcwY19mcmVlKGNvbnN0IHZvaWQgKmRhdGEpCit7CisJa2ZyZWUoZGF0YSk7Cit9CisKKy8qCisgKiBIeXBmcyBEQkZTIGNhbGxiYWNrOiBDcmVhdGUgZGlhZyAwYyBkYXRhCisgKi8KK3N0YXRpYyBpbnQgZGJmc19kaWFnMGNfY3JlYXRlKHZvaWQgKipkYXRhLCB2b2lkICoqZGF0YV9mcmVlX3B0ciwgc2l6ZV90ICpzaXplKQoreworCXN0cnVjdCBoeXBmc19kaWFnMGNfZGF0YSAqZGlhZzBjX2RhdGE7CisJdW5zaWduZWQgaW50IGNvdW50OworCisJZGlhZzBjX2RhdGEgPSBkaWFnMGNfc3RvcmUoJmNvdW50KTsKKwlpZiAoSVNfRVJSKGRpYWcwY19kYXRhKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGlhZzBjX2RhdGEpOworCW1lbXNldCgmZGlhZzBjX2RhdGEtPmhkciwgMCwgc2l6ZW9mKGRpYWcwY19kYXRhLT5oZHIpKTsKKwlnZXRfdG9kX2Nsb2NrX2V4dChkaWFnMGNfZGF0YS0+aGRyLnRvZF9leHQpOworCWRpYWcwY19kYXRhLT5oZHIubGVuID0gY291bnQgKiBzaXplb2Yoc3RydWN0IGh5cGZzX2RpYWcwY19lbnRyeSk7CisJZGlhZzBjX2RhdGEtPmhkci52ZXJzaW9uID0gREJGU19EMENfSERSX1ZFUlNJT047CisJZGlhZzBjX2RhdGEtPmhkci5jb3VudCA9IGNvdW50OworCSpkYXRhID0gZGlhZzBjX2RhdGE7CisJKmRhdGFfZnJlZV9wdHIgPSBkaWFnMGNfZGF0YTsKKwkqc2l6ZSA9IGRpYWcwY19kYXRhLT5oZHIubGVuICsgc2l6ZW9mKHN0cnVjdCBoeXBmc19kaWFnMGNfaGRyKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEh5cGZzIERCRlMgZmlsZSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHN0cnVjdCBoeXBmc19kYmZzX2ZpbGUgZGJmc19maWxlXzBjID0geworCS5uYW1lCQk9ICJkaWFnXzBjIiwKKwkuZGF0YV9jcmVhdGUJPSBkYmZzX2RpYWcwY19jcmVhdGUsCisJLmRhdGFfZnJlZQk9IGRiZnNfZGlhZzBjX2ZyZWUsCit9OworCisvKgorICogSW5pdGlhbGl6ZSBkaWFnIDBjIGludGVyZmFjZSBmb3Igei9WTQorICovCitpbnQgX19pbml0IGh5cGZzX2RpYWcwY19pbml0KHZvaWQpCit7CisJaWYgKCFNQUNISU5FX0lTX1ZNKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gaHlwZnNfZGJmc19jcmVhdGVfZmlsZSgmZGJmc19maWxlXzBjKTsKK30KKworLyoKKyAqIFNodXRkb3duIGRpYWcgMGMgaW50ZXJmYWNlIGZvciB6L1ZNCisgKi8KK3ZvaWQgaHlwZnNfZGlhZzBjX2V4aXQodm9pZCkKK3sKKwlpZiAoIU1BQ0hJTkVfSVNfVk0pCisJCXJldHVybjsKKwloeXBmc19kYmZzX3JlbW92ZV9maWxlKCZkYmZzX2ZpbGVfMGMpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMgYi9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYwppbmRleCBjOTUyYjk4Li40YzgwMDhkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYwpAQCAtNDgyLDEwICs0ODIsMTQgQEAKIAkJcmMgPSAtRU5PREFUQTsKIAkJZ290byBmYWlsX2h5cGZzX3ZtX2V4aXQ7CiAJfQorCWlmIChoeXBmc19kaWFnMGNfaW5pdCgpKSB7CisJCXJjID0gLUVOT0RBVEE7CisJCWdvdG8gZmFpbF9oeXBmc19zcHJwX2V4aXQ7CisJfQogCXMzOTBfa29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQoInMzOTAiLCBoeXBlcnZpc29yX2tvYmopOwogCWlmICghczM5MF9rb2JqKSB7CiAJCXJjID0gLUVOT01FTTsKLQkJZ290byBmYWlsX2h5cGZzX3NwcnBfZXhpdDsKKwkJZ290byBmYWlsX2h5cGZzX2RpYWcwY19leGl0OwogCX0KIAlyYyA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmh5cGZzX3R5cGUpOwogCWlmIChyYykKQEAgLTQ5NCw2ICs0OTgsOCBAQAogCiBmYWlsX2ZpbGVzeXN0ZW06CiAJa29iamVjdF9wdXQoczM5MF9rb2JqKTsKK2ZhaWxfaHlwZnNfZGlhZzBjX2V4aXQ6CisJaHlwZnNfZGlhZzBjX2V4aXQoKTsKIGZhaWxfaHlwZnNfc3BycF9leGl0OgogCWh5cGZzX3NwcnBfZXhpdCgpOwogZmFpbF9oeXBmc192bV9leGl0OgpAQCAtNTEwLDYgKzUxNiw3IEBACiB7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZoeXBmc190eXBlKTsKIAlrb2JqZWN0X3B1dChzMzkwX2tvYmopOworCWh5cGZzX2RpYWcwY19leGl0KCk7CiAJaHlwZnNfc3BycF9leGl0KCk7CiAJaHlwZnNfdm1fZXhpdCgpOwogCWh5cGZzX2RpYWdfZXhpdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggM2UyMDM4My4uNThmYWU3ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC00LDEwICs0LDYgQEAKIC8qIENhY2hlcyBhcmVuJ3QgYnJhaW4tZGVhZCBvbiB0aGUgczM5MC4gKi8KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jYWNoZWZsdXNoLmg+CiAKLSNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCi12b2lkIGtlcm5lbF9tYXBfcGFnZXMoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBudW1wYWdlcywgaW50IGVuYWJsZSk7Ci0jZW5kaWYKLQogaW50IHNldF9tZW1vcnlfcm8odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOwogaW50IHNldF9tZW1vcnlfcncodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOwogaW50IHNldF9tZW1vcnlfbngodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdV9tZi5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NwdV9tZi5oCmluZGV4IGNiNzAwZDUuLjUyNDNhODYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jcHVfbWYuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY3B1X21mLmgKQEAgLTE4OSw2ICsxODksMjAgQEAKIAlyZXR1cm4gY2M7CiB9CiAKKy8qIFN0b3JlIENQVSBjb3VudGVyIG11bHRpcGxlIGZvciB0aGUgTVQgdXRpbGl6YXRpb24gY291bnRlciBzZXQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHN0Y2N0bTUodTY0IG51bSwgdTY0ICp2YWwpCit7CisJdHlwZWRlZiBzdHJ1Y3QgeyB1NjQgX1tudW1dOyB9IGFkZHJ0eXBlOworCWludCBjYzsKKworCWFzbSB2b2xhdGlsZSAoCisJCSIJLmluc24JcnN5LDB4ZWIwMDAwMDAwMDE3LCUyLDUsJTFcbiIKKwkJIglpcG0JJTBcbiIKKwkJIglzcmwJJTAsMjhcbiIKKwkJOiAiPWQiIChjYyksICI9USIgKCooYWRkcnR5cGUgKikgdmFsKSAgOiAiZCIgKG51bSkgOiAiY2MiKTsKKwlyZXR1cm4gY2M7Cit9CisKIC8qIFF1ZXJ5IHNhbXBsaW5nIGluZm9ybWF0aW9uICovCiBzdGF0aWMgaW5saW5lIGludCBxc2koc3RydWN0IGh3c19xc2lfaW5mb19ibG9jayAqaW5mbykKIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9lbGYuaAppbmRleCBmNmU0M2QzLi5jOWRmNDBiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZWxmLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oCkBAIC0xNjMsOCArMTYzLDggQEAKICAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCiAgICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyByYW5kb21pemVfZXRfZHluKHVuc2lnbmVkIGxvbmcgYmFzZSk7Ci0jZGVmaW5lIEVMRl9FVF9EWU5fQkFTRQkJKHJhbmRvbWl6ZV9ldF9keW4oU1RBQ0tfVE9QIC8gMyAqIDIpKQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmFuZG9taXplX2V0X2R5bih2b2lkKTsKKyNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFCQlyYW5kb21pemVfZXRfZHluKCkKIAogLyogVGhpcyB5aWVsZHMgYSBtYXNrIHRoYXQgdXNlciBwcm9ncmFtcyBjYW4gdXNlIHRvIGZpZ3VyZSBvdXQgd2hhdAogICAgaW5zdHJ1Y3Rpb24gc2V0IHRoaXMgQ1BVIHN1cHBvcnRzLiAqLwpAQCAtMjA5LDcgKzIwOSw5IEBACiB9IHdoaWxlICgwKQogI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KIAotI2RlZmluZSBTVEFDS19STkRfTUFTSwkweDdmZlVMCitleHRlcm4gdW5zaWduZWQgbG9uZyBtbWFwX3JuZF9tYXNrOworCisjZGVmaW5lIFNUQUNLX1JORF9NQVNLCShtbWFwX3JuZF9tYXNrKQogCiAjZGVmaW5lIEFSQ0hfRExJTkZPCQkJCQkJCSAgICBcCiBkbyB7CQkJCQkJCQkJICAgIFwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9mdHJhY2UuaAppbmRleCBhYmI2MThmLi44MzZjNTYyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC0zLDggKzMsMTIgQEAKIAogI2RlZmluZSBBUkNIX1NVUFBPUlRTX0ZUUkFDRV9PUFMgMQogCisjaWZkZWYgQ0NfVVNJTkdfSE9UUEFUQ0gKKyNkZWZpbmUgTUNPVU5UX0lOU05fU0laRQk2CisjZWxzZQogI2RlZmluZSBNQ09VTlRfSU5TTl9TSVpFCTI0CiAjZGVmaW5lIE1DT1VOVF9SRVRVUk5fRklYVVAJMTgKKyNlbmRpZgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCkBAIC0zNywxOCArNDEsMjkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2VfZ2VuZXJhdGVfbm9wX2luc24oc3RydWN0IGZ0cmFjZV9pbnNuICppbnNuKQogewogI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKKyNpZmRlZiBDQ19VU0lOR19IT1RQQVRDSAorCS8qIGJyY2wgMCwwICovCisJaW5zbi0+b3BjID0gMHhjMDA0OworCWluc24tPmRpc3AgPSAwOworI2Vsc2UKIAkvKiBqZyAuKzI0ICovCiAJaW5zbi0+b3BjID0gMHhjMGY0OwogCWluc24tPmRpc3AgPSBNQ09VTlRfSU5TTl9TSVpFIC8gMjsKICNlbmRpZgorI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2Z0cmFjZV9ub3Aoc3RydWN0IGZ0cmFjZV9pbnNuICppbnNuKQogewogI2lmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKKyNpZmRlZiBDQ19VU0lOR19IT1RQQVRDSAorCWlmIChpbnNuLT5kaXNwID09IDApCisJCXJldHVybiAxOworI2Vsc2UKIAlpZiAoaW5zbi0+ZGlzcCA9PSBNQ09VTlRfSU5TTl9TSVpFIC8gMikKIAkJcmV0dXJuIDE7CiAjZW5kaWYKKyNlbmRpZgogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaAppbmRleCAzNDZiMWM4Li41ODY0MmZkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBKVU1QX0xBQkVMX05PUF9TSVpFIDYKKyNkZWZpbmUgSlVNUF9MQUJFTF9OT1BfT0ZGU0VUIDIKIAogI2lmZGVmIENPTkZJR182NEJJVAogI2RlZmluZSBBU01fUFRSICIucXVhZCIKQEAgLTEzLDkgKzE0LDEzIEBACiAjZGVmaW5lIEFTTV9BTElHTiAiLmJhbGlnbiA0IgogI2VuZGlmCiAKKy8qCisgKiBXZSB1c2UgYSBicmNsIDAsMiBpbnN0cnVjdGlvbiBmb3IganVtcCBsYWJlbHMgYXQgY29tcGlsZSB0aW1lIHNvIGl0CisgKiBjYW4gYmUgZWFzaWx5IGRpc3Rpbmd1aXNoZWQgZnJvbSBhIGhvdHBhdGNoIGdlbmVyYXRlZCBpbnN0cnVjdGlvbi4KKyAqLwogc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGFyY2hfc3RhdGljX2JyYW5jaChzdHJ1Y3Qgc3RhdGljX2tleSAqa2V5KQogewotCWFzbV92b2xhdGlsZV9nb3RvKCIwOglicmNsIDAsMFxuIgorCWFzbV92b2xhdGlsZV9nb3RvKCIwOglicmNsIDAsIl9fc3RyaW5naWZ5KEpVTVBfTEFCRUxfTk9QX09GRlNFVCkiXG4iCiAJCSIucHVzaHNlY3Rpb24gX19qdW1wX3RhYmxlLCBcImF3XCJcbiIKIAkJQVNNX0FMSUdOICJcbiIKIAkJQVNNX1BUUiAiIDBiLCAlbFtsYWJlbF0sICUwXG4iCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA1ZTEwMjQyMi4uZmJiNWVlMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC05OSw3ICs5OSw3IEBACiAjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAjZGVmaW5lIFBUUlNfUEVSX1BHRAkyMDQ4CiAKLSNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTICAwCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUyAgMFVMCiAKICNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKIAlwcmludGsoIiVzOiVkOiBiYWQgcHRlICVwLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAodm9pZCAqKSBwdGVfdmFsKGUpKQpAQCAtMjQ5LDEwICsyNDksMTAgQEAKIAkJCQkgX1BBR0VfWU9VTkcpCiAKIC8qCi0gKiBoYW5kbGVfcHRlX2ZhdWx0IHVzZXMgcHRlX3ByZXNlbnQsIHB0ZV9ub25lIGFuZCBwdGVfZmlsZSB0byBmaW5kIG91dCB0aGUKLSAqIHB0ZSB0eXBlIFdJVEhPVVQgaG9sZGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrLiBUaGUgX1BBR0VfUFJFU0VOVCBiaXQKLSAqIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggcHJlc2VudCBmcm9tIG5vdC1wcmVzZW50IHB0ZXMuIEl0IGlzIGNoYW5nZWQgb25seQotICogd2l0aCB0aGUgcGFnZSB0YWJsZSBsb2NrIGhlbGQuCisgKiBoYW5kbGVfcHRlX2ZhdWx0IHVzZXMgcHRlX3ByZXNlbnQgYW5kIHB0ZV9ub25lIHRvIGZpbmQgb3V0IHRoZSBwdGUgdHlwZQorICogV0lUSE9VVCBob2xkaW5nIHRoZSBwYWdlIHRhYmxlIGxvY2suIFRoZSBfUEFHRV9QUkVTRU5UIGJpdCBpcyB1c2VkIHRvCisgKiBkaXN0aW5ndWlzaCBwcmVzZW50IGZyb20gbm90LXByZXNlbnQgcHRlcy4gSXQgaXMgY2hhbmdlZCBvbmx5IHdpdGggdGhlIHBhZ2UKKyAqIHRhYmxlIGxvY2sgaGVsZC4KICAqCiAgKiBUaGUgZm9sbG93aW5nIHRhYmxlIGdpdmVzIHRoZSBkaWZmZXJlbnQgcG9zc2libGUgYml0IGNvbWJpbmF0aW9ucyBmb3IKICAqIHRoZSBwdGUgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIGJpdHMgaW4gdGhlIGxhc3QgMTIgYml0cyBvZiBhIHB0ZToKQEAgLTI3OSw3ICsyNzksNiBAQAogICoKICAqIHB0ZV9wcmVzZW50IGlzIHRydWUgZm9yIHRoZSBiaXQgcGF0dGVybiAueHguLi54eHh4eDEsIChwdGUgJiAweDAwMSkgPT0gMHgwMDEKICAqIHB0ZV9ub25lICAgIGlzIHRydWUgZm9yIHRoZSBiaXQgcGF0dGVybiAuMTAuLi54eHh4MDAsIChwdGUgJiAweDYwMykgPT0gMHg0MDAKLSAqIHB0ZV9maWxlICAgIGlzIHRydWUgZm9yIHRoZSBiaXQgcGF0dGVybiAuMTEuLi54eHh4eDAsIChwdGUgJiAweDYwMSkgPT0gMHg2MDAKICAqIHB0ZV9zd2FwICAgIGlzIHRydWUgZm9yIHRoZSBiaXQgcGF0dGVybiAuMTAuLi54eHh4MTAsIChwdGUgJiAweDYwMykgPT0gMHg0MDIKICAqLwogCkBAIC02NzEsMTMgKzY3MCw2IEBACiAJCT09IChfUEFHRV9JTlZBTElEIHwgX1BBR0VfVFlQRSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkKLXsKLQkvKiBCaXQgcGF0dGVybjogKHB0ZSAmIDB4NjAxKSA9PSAweDYwMCAqLwotCXJldHVybiAocHRlX3ZhbChwdGUpICYgKF9QQUdFX0lOVkFMSUQgfCBfUEFHRV9QUk9URUNUIHwgX1BBR0VfUFJFU0VOVCkpCi0JCT09IChfUEFHRV9JTlZBTElEIHwgX1BBR0VfUFJPVEVDVCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9zcGVjaWFsKHB0ZV90IHB0ZSkKIHsKIAlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIF9QQUdFX1NQRUNJQUwpOwpAQCAtMTc1NiwxOSArMTc0OCw2IEBACiAjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKIAotI2lmbmRlZiBDT05GSUdfNjRCSVQKLSMgZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTI2Ci0jZWxzZSAvKiBDT05GSUdfNjRCSVQgKi8KLSMgZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTU5Ci0jZW5kaWYgLyogQ09ORklHXzY0QklUICovCi0KLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKF9fcHRlKSBcCi0JKCgoKF9fcHRlKS5wdGUgPj4gMTIpIDw8IDcpICsgKCgoX19wdGUpLnB0ZSA+PiAxKSAmIDB4N2YpKQotCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShfX29mZikgXAotCSgocHRlX3QpIHsgKCgoKF9fb2ZmKSAmIDB4N2YpIDw8IDEpICsgKCgoX19vZmYpID4+IDcpIDw8IDEyKSkgXAotCQkgICB8IF9QQUdFX0lOVkFMSUQgfCBfUEFHRV9QUk9URUNUIH0pCi0KICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKICNkZWZpbmUga2Vybl9hZGRyX3ZhbGlkKGFkZHIpICAgKDEpCkBAIC0xNzc5LDYgKzE3NTgsMTAgQEAKIGV4dGVybiBpbnQgczM5MF9lbmFibGVfc2tleSh2b2lkKTsKIGV4dGVybiB2b2lkIHMzOTBfcmVzZXRfY21tYShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiAKKy8qIHMzOTAgaGFzIGEgcHJpdmF0ZSBjb3B5IG9mIGdldCB1bm1hcHBlZCBhcmVhIHRvIGRlYWwgd2l0aCBjYWNoZSBzeW5vbnltcyAqLworI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQQorI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQV9UT1BET1dOCisKIC8qCiAgKiBObyBwYWdlIHRhYmxlIGNhY2hlcyB0byBpbml0aWFsaXNlCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBiZWQwNWVhLi5lN2NiYmRjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0yMTUsMTAgKzIxNSw3IEBACiAvKgogICogR2l2ZSB1cCB0aGUgdGltZSBzbGljZSBvZiB0aGUgdmlydHVhbCBQVS4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGNwdV9yZWxheCh2b2lkKQotewotCWJhcnJpZXIoKTsKLX0KK3ZvaWQgY3B1X3JlbGF4KHZvaWQpOwogCiAjZGVmaW5lIGNwdV9yZWxheF9sb3dsYXRlbmN5KCkgIGJhcnJpZXIoKQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcmVzZXQuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9yZXNldC5oCmluZGV4IDgwNDU3ODUuLjcyNzg2MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9yZXNldC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9yZXNldC5oCkBAIC0xNSw1ICsxNSw2IEBACiAKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX3Jlc2V0X2NhbGwoc3RydWN0IHJlc2V0X2NhbGwgKnJlc2V0KTsKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfcmVzZXRfY2FsbChzdHJ1Y3QgcmVzZXRfY2FsbCAqcmVzZXQpOwotZXh0ZXJuIHZvaWQgczM5MF9yZXNldF9zeXN0ZW0odm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmRhdGEpOworZXh0ZXJuIHZvaWQgczM5MF9yZXNldF9zeXN0ZW0odm9pZCAoKmZuX3ByZSkodm9pZCksCisJCQkgICAgICB2b2lkICgqZm5fcG9zdCkodm9pZCAqKSwgdm9pZCAqZGF0YSk7CiAjZW5kaWYgLyogX0FTTV9TMzkwX1JFU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zY2xwLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2NscC5oCmluZGV4IDFhYmE4OWIuLmVkYjQ1M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zY2xwLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NjbHAuaApAQCAtMjcsNyArMjcsNyBAQAogfTsKIAogc3RydWN0IHNjbHBfY3B1X2VudHJ5IHsKLQl1OCBhZGRyZXNzOworCXU4IGNvcmVfaWQ7CiAJdTggcmVzZXJ2ZWQwWzJdOwogCXU4IDogMzsKIAl1OCBzaWlmIDogMTsKQEAgLTUxLDYgKzUxLDkgQEAKIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2xwX2dldF9ybm1heCh2b2lkKTsKIHVuc2lnbmVkIGxvbmcgbG9uZyBzY2xwX2dldF9yem0odm9pZCk7CiB1bnNpZ25lZCBpbnQgc2NscF9nZXRfbWF4X2NwdSh2b2lkKTsKK3Vuc2lnbmVkIGludCBzY2xwX2dldF9tdGlkKHU4IGNwdV90eXBlKTsKK3Vuc2lnbmVkIGludCBzY2xwX2dldF9tdGlkX21heCh2b2lkKTsKK3Vuc2lnbmVkIGludCBzY2xwX2dldF9tdGlkX3ByZXYodm9pZCk7CiBpbnQgc2NscF9zZGlhc19ibGtfY291bnQodm9pZCk7CiBpbnQgc2NscF9zZGlhc19jb3B5KHZvaWQgKmRlc3QsIGludCBibGtfbnVtLCBpbnQgbnJfYmxrcyk7CiBpbnQgc2NscF9jaHBfY29uZmlndXJlKHN0cnVjdCBjaHBfaWQgY2hwaWQpOwpAQCAtNjgsNCArNzEsNiBAQAogaW50IHNjbHBfaGFzX3NpaWYodm9pZCk7CiB1bnNpZ25lZCBpbnQgc2NscF9nZXRfaWJjKHZvaWQpOwogCitsb25nIF9zY2xwX3ByaW50X2Vhcmx5KGNvbnN0IGNoYXIgKik7CisKICNlbmRpZiAvKiBfQVNNX1MzOTBfU0NMUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXR1cC5oCmluZGV4IDc3MzZmZGQuLmI4ZDFlNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC01Nyw2ICs1Nyw3IEBACiAjZGVmaW5lIE1BQ0hJTkVfRkxBR19URQkJKDFVTCA8PCAxNSkKICNkZWZpbmUgTUFDSElORV9GTEFHX1RMQl9MQwkoMVVMIDw8IDE3KQogI2RlZmluZSBNQUNISU5FX0ZMQUdfVlgJCSgxVUwgPDwgMTgpCisjZGVmaW5lIE1BQ0hJTkVfRkxBR19DQUQJKDFVTCA8PCAxOSkKIAogI2RlZmluZSBNQUNISU5FX0lTX1ZNCQkoUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgJiBNQUNISU5FX0ZMQUdfVk0pCiAjZGVmaW5lIE1BQ0hJTkVfSVNfS1ZNCQkoUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgJiBNQUNISU5FX0ZMQUdfS1ZNKQpAQCAtODAsNiArODEsNyBAQAogI2RlZmluZSBNQUNISU5FX0hBU19URQkJKDApCiAjZGVmaW5lIE1BQ0hJTkVfSEFTX1RMQl9MQwkoMCkKICNkZWZpbmUgTUFDSElORV9IQVNfVlgJCSgwKQorI2RlZmluZSBNQUNISU5FX0hBU19DQUQJCSgwKQogI2Vsc2UgLyogQ09ORklHXzY0QklUICovCiAjZGVmaW5lIE1BQ0hJTkVfSEFTX0lFRUUJKDEpCiAjZGVmaW5lIE1BQ0hJTkVfSEFTX0NTUAkJKDEpCkBAIC05Myw2ICs5NSw3IEBACiAjZGVmaW5lIE1BQ0hJTkVfSEFTX1RFCQkoUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgJiBNQUNISU5FX0ZMQUdfVEUpCiAjZGVmaW5lIE1BQ0hJTkVfSEFTX1RMQl9MQwkoUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgJiBNQUNISU5FX0ZMQUdfVExCX0xDKQogI2RlZmluZSBNQUNISU5FX0hBU19WWAkJKFMzOTBfbG93Y29yZS5tYWNoaW5lX2ZsYWdzICYgTUFDSElORV9GTEFHX1ZYKQorI2RlZmluZSBNQUNISU5FX0hBU19DQUQJCShTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyAmIE1BQ0hJTkVfRkxBR19DQUQpCiAjZW5kaWYgLyogQ09ORklHXzY0QklUICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2lncC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NpZ3AuaAppbmRleCBmYWQ0YWUyLi5lYzYwY2Y3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc2lncC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zaWdwLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNkZWZpbmUgU0lHUF9TRVRfQVJDSElURUNUVVJFCSAgICAgMTgKICNkZWZpbmUgU0lHUF9DT05EX0VNRVJHRU5DWV9TSUdOQUwgICAxOQogI2RlZmluZSBTSUdQX1NFTlNFX1JVTk5JTkcJICAgICAyMQorI2RlZmluZSBTSUdQX1NFVF9NVUxUSV9USFJFQURJTkcgICAgIDIyCiAjZGVmaW5lIFNJR1BfU1RPUkVfQURESVRJT05BTF9TVEFUVVMgMjMKIAogLyogU0lHUCBjb25kaXRpb24gY29kZXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCA3NjJkNGY4Li5iM2JkMDI4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc21wLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3NtcC5oCkBAIC0xNiw2ICsxNiw4IEBACiAjZGVmaW5lIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkJKFMzOTBfbG93Y29yZS5jcHVfbnIpCiAKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggc21wX2NwdV9zdGF0ZV9tdXRleDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc21wX2NwdV9tdF9zaGlmdDsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc21wX2NwdV9tdGlkOwogCiBleHRlcm4gaW50IF9fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGlkbGUpOwogCkBAIC0zNSw2ICszNyw4IEBACiAKICNlbHNlIC8qIENPTkZJR19TTVAgKi8KIAorI2RlZmluZSBzbXBfY3B1X210aWQJMAorCiBzdGF0aWMgaW5saW5lIHZvaWQgc21wX2NhbGxfaXBsX2NwdSh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqZGF0YSkKIHsKIAlmdW5jKGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2luZm8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9zeXNpbmZvLmgKaW5kZXggZjkyNDI4ZS4uNzNmMTJkMiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3N5c2luZm8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vc3lzaW5mby5oCkBAIC05MCw3ICs5MCwxMSBAQAogCXVuc2lnbmVkIHNob3J0IGNwdXNfcmVzZXJ2ZWQ7CiAJY2hhciBuYW1lWzhdOwogCXVuc2lnbmVkIGludCBjYWY7Ci0JY2hhciByZXNlcnZlZF8yWzE2XTsKKwljaGFyIHJlc2VydmVkXzJbOF07CisJdW5zaWduZWQgY2hhciBtdF9pbnN0YWxsZWQ7CisJdW5zaWduZWQgY2hhciBtdF9nZW5lcmFsOworCXVuc2lnbmVkIGNoYXIgbXRfcHNtdGlkOworCWNoYXIgcmVzZXJ2ZWRfM1s1XTsKIAl1bnNpZ25lZCBzaG9ydCBjcHVzX2RlZGljYXRlZDsKIAl1bnNpZ25lZCBzaG9ydCBjcHVzX3NoYXJlZDsKIH07CkBAIC0xMjAsMjYgKzEyNCwyOCBAQAogCiBleHRlcm4gaW50IHRvcG9sb2d5X21heF9tbmVzdDsKIAotI2RlZmluZSBUT1BPTE9HWV9DUFVfQklUUwk2NAorI2RlZmluZSBUT1BPTE9HWV9DT1JFX0JJVFMJNjQKICNkZWZpbmUgVE9QT0xPR1lfTlJfTUFHCQk2CiAKLXN0cnVjdCB0b3BvbG9neV9jcHUgewotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQwWzRdOworc3RydWN0IHRvcG9sb2d5X2NvcmUgeworCXVuc2lnbmVkIGNoYXIgbmw7CisJdW5zaWduZWQgY2hhciByZXNlcnZlZDBbM107CiAJdW5zaWduZWQgY2hhciA6NjsKIAl1bnNpZ25lZCBjaGFyIHBwOjI7CiAJdW5zaWduZWQgY2hhciByZXNlcnZlZDE7CiAJdW5zaWduZWQgc2hvcnQgb3JpZ2luOwotCXVuc2lnbmVkIGxvbmcgbWFza1tUT1BPTE9HWV9DUFVfQklUUyAvIEJJVFNfUEVSX0xPTkddOworCXVuc2lnbmVkIGxvbmcgbWFza1tUT1BPTE9HWV9DT1JFX0JJVFMgLyBCSVRTX1BFUl9MT05HXTsKIH07CiAKIHN0cnVjdCB0b3BvbG9neV9jb250YWluZXIgewotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbN107CisJdW5zaWduZWQgY2hhciBubDsKKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzZdOwogCXVuc2lnbmVkIGNoYXIgaWQ7CiB9OwogCiB1bmlvbiB0b3BvbG9neV9lbnRyeSB7CiAJdW5zaWduZWQgY2hhciBubDsKLQlzdHJ1Y3QgdG9wb2xvZ3lfY3B1IGNwdTsKKwlzdHJ1Y3QgdG9wb2xvZ3lfY29yZSBjcHU7CiAJc3RydWN0IHRvcG9sb2d5X2NvbnRhaW5lciBjb250YWluZXI7CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCmluZGV4IDU2YWY1MzAuLmM0ZmJiOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC05LDkgKzksMTEgQEAKICNpZmRlZiBDT05GSUdfU0NIRURfQk9PSwogCiBzdHJ1Y3QgY3B1X3RvcG9sb2d5X3MzOTAgeworCXVuc2lnbmVkIHNob3J0IHRocmVhZF9pZDsKIAl1bnNpZ25lZCBzaG9ydCBjb3JlX2lkOwogCXVuc2lnbmVkIHNob3J0IHNvY2tldF9pZDsKIAl1bnNpZ25lZCBzaG9ydCBib29rX2lkOworCWNwdW1hc2tfdCB0aHJlYWRfbWFzazsKIAljcHVtYXNrX3QgY29yZV9tYXNrOwogCWNwdW1hc2tfdCBib29rX21hc2s7CiB9OwpAQCAtMTksNiArMjEsOCBAQAogZXh0ZXJuIHN0cnVjdCBjcHVfdG9wb2xvZ3lfczM5MCBjcHVfdG9wb2xvZ3lbTlJfQ1BVU107CiAKICNkZWZpbmUgdG9wb2xvZ3lfcGh5c2ljYWxfcGFja2FnZV9pZChjcHUpCShjcHVfdG9wb2xvZ3lbY3B1XS5zb2NrZXRfaWQpCisjZGVmaW5lIHRvcG9sb2d5X3RocmVhZF9pZChjcHUpCQkJKGNwdV90b3BvbG9neVtjcHVdLnRocmVhZF9pZCkKKyNkZWZpbmUgdG9wb2xvZ3lfdGhyZWFkX2NwdW1hc2soY3B1KQkJKCZjcHVfdG9wb2xvZ3lbY3B1XS50aHJlYWRfbWFzaykKICNkZWZpbmUgdG9wb2xvZ3lfY29yZV9pZChjcHUpCQkJKGNwdV90b3BvbG9neVtjcHVdLmNvcmVfaWQpCiAjZGVmaW5lIHRvcG9sb2d5X2NvcmVfY3B1bWFzayhjcHUpCQkoJmNwdV90b3BvbG9neVtjcHVdLmNvcmVfbWFzaykKICNkZWZpbmUgdG9wb2xvZ3lfYm9va19pZChjcHUpCQkJKGNwdV90b3BvbG9neVtjcHVdLmJvb2tfaWQpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9oeXBmcy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvdWFwaS9hc20vaHlwZnMuaAppbmRleCAzNzk5OGI0Li5iM2ZlMTJkIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS91YXBpL2FzbS9oeXBmcy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL3VhcGkvYXNtL2h5cGZzLmgKQEAgLTEsMTYgKzEsMTkgQEAKIC8qCi0gKiBJT0NUTCBpbnRlcmZhY2UgZm9yIGh5cGZzCisgKiBTdHJ1Y3R1cmVzIGZvciBoeXBmcyBpbnRlcmZhY2UKICAqCiAgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTMKICAqCiAgKiBBdXRob3I6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KICAqLwogCi0jaWZuZGVmIF9BU01fSFlQRlNfQ1RMX0gKLSNkZWZpbmUgX0FTTV9IWVBGU19DVExfSAorI2lmbmRlZiBfQVNNX0hZUEZTX0gKKyNkZWZpbmUgX0FTTV9IWVBGU19ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCisvKgorICogSU9DVEwgZm9yIGJpbmFyeSBpbnRlcmZhY2UgL3N5cy9rZXJuZWwvZGVidWcvZGlhZ18zMDQKKyAqLwogc3RydWN0IGh5cGZzX2RpYWczMDQgewogCV9fdTMyCWFyZ3NbMl07CiAJX191NjQJZGF0YTsKQEAgLTIyLDQgKzI1LDMwIEBACiAjZGVmaW5lIEhZUEZTX0RJQUczMDQgXAogCV9JT1dSKEhZUEZTX0lPQ1RMX01BR0lDLCAweDIwLCBzdHJ1Y3QgaHlwZnNfZGlhZzMwNCkKIAorLyoKKyAqIFN0cnVjdHVyZXMgZm9yIGJpbmFyeSBpbnRlcmZhY2UgL3N5cy9rZXJuZWwvZGVidWcvZGlhZ18wYworICovCitzdHJ1Y3QgaHlwZnNfZGlhZzBjX2hkciB7CisJX191NjQJbGVuOwkJLyogTGVuZ3RoIG9mIGRpYWcwYyBidWZmZXIgd2l0aG91dCBoZWFkZXIgKi8KKwlfX3UxNgl2ZXJzaW9uOwkvKiBWZXJzaW9uIG9mIGhlYWRlciAqLworCWNoYXIJcmVzZXJ2ZWQxWzZdOwkvKiBSZXNlcnZlZCAqLworCWNoYXIJdG9kX2V4dFsxNl07CS8qIFRPRCBjbG9jayBmb3IgZGlhZzBjICovCisJX191NjQJY291bnQ7CQkvKiBOdW1iZXIgb2YgZW50cmllcyAoQ1BVcykgaW4gZGlhZzBjIGFycmF5ICovCisJY2hhcglyZXNlcnZlZDJbMjRdOwkvKiBSZXNlcnZlZCAqLworfTsKKworc3RydWN0IGh5cGZzX2RpYWcwY19lbnRyeSB7CisJY2hhcglkYXRlWzhdOwkvKiBNTS9ERC9ZWSBpbiBFQkNESUMgKi8KKwljaGFyCXRpbWVbOF07CS8qIEhIOk1NOlNTIGluIEVCQ0RJQyAqLworCV9fdTY0CXZpcnRjcHU7CS8qIFZpcnR1YWwgdGltZSBjb25zdW1lZCBieSB0aGUgdmlydCBDUFUgKHVzKSAqLworCV9fdTY0CXRvdGFscHJvYzsJLyogVG90YWwgb2YgdmlydHVhbCBhbmQgc2ltdWxhdGlvbiB0aW1lICh1cykgKi8KKwlfX3UzMgljcHU7CQkvKiBMaW51eCBsb2dpY2FsIENQVSBudW1iZXIgKi8KKwlfX3UzMglyZXNlcnZlZDsJLyogQWxpZ24gdG8gOCBieXRlICovCit9OworCitzdHJ1Y3QgaHlwZnNfZGlhZzBjX2RhdGEgeworCXN0cnVjdCBoeXBmc19kaWFnMGNfaGRyCQloZHI7CQkvKiA2NCBieXRlIGhlYWRlciAqLworCXN0cnVjdCBoeXBmc19kaWFnMGNfZW50cnkJZW50cnlbXTsJLyogZGlhZzBjIGVudHJ5IGFycmF5ICovCit9OworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCmluZGV4IDIwNGM0M2EuLjMxZmFiMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQpAQCAtNCw4ICs0LDggQEAKIAogaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogIyBEb24ndCB0cmFjZSBlYXJseSBzZXR1cCBjb2RlIGFuZCB0cmFjaW5nIGNvZGUKLUNGTEFHU19SRU1PVkVfZWFybHkubyA9IC1wZwotQ0ZMQUdTX1JFTU9WRV9mdHJhY2UubyA9IC1wZworQ0ZMQUdTX1JFTU9WRV9lYXJseS5vID0gJChDQ19GTEFHU19GVFJBQ0UpCitDRkxBR1NfUkVNT1ZFX2Z0cmFjZS5vID0gJChDQ19GTEFHU19GVFJBQ0UpCiBlbmRpZgogCiAjCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Jhc2UuUyBiL2FyY2gvczM5MC9rZXJuZWwvYmFzZS5TCmluZGV4IDc5N2E4MjMuLmY3NGE1M2QzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2Jhc2UuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2Jhc2UuUwpAQCAtOTcsNyArOTcsOCBAQAogCWxnCSVyNCwwKCVyNCkJCSMgU2F2ZSBQU1cKIAlzdHVyZwklcjQsJXIzCQkJIyBVc2Ugc3R1cmcsIGJlY2F1c2Ugb2YgbGFyZ2UgcGFnZXMKIAlsZ2hpCSVyMSwxCi0JZGlhZwklcjEsJXIxLDB4MzA4CisJbGdoaQklcjAsMAorCWRpYWcJJXIwLCVyMSwweDMwOAogLkxyZXN0YXJ0X3BhcnQyOgogCWxoaQklcjAsMAkJCSMgTG9hZCByMCB3aXRoIHplcm8KIAlsaGkJJXIxLDIJCQkjIFVzZSBtb2RlIDIgPSBFU0FNRSAoZHVtcCkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY2FjaGUuYyBiL2FyY2gvczM5MC9rZXJuZWwvY2FjaGUuYwppbmRleCBjMGIwM2MyLi42MzJmYTA2IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NhY2hlLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jYWNoZS5jCkBAIC01LDM3ICs1LDExIEBACiAgKiAgICBBdXRob3Iocyk6IEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGVpbmZvLmg+CiAjaW5jbHVkZSA8YXNtL2ZhY2lsaXR5Lmg+CiAKLXN0cnVjdCBjYWNoZSB7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCXVuc2lnbmVkIGludCBsaW5lX3NpemU7Ci0JdW5zaWduZWQgaW50IGFzc29jaWF0aXZpdHk7Ci0JdW5zaWduZWQgaW50IG5yX3NldHM7Ci0JdW5zaWduZWQgaW50IGxldmVsICAgOiAzOwotCXVuc2lnbmVkIGludCB0eXBlICAgIDogMjsKLQl1bnNpZ25lZCBpbnQgcHJpdmF0ZSA6IDE7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQotc3RydWN0IGNhY2hlX2RpciB7Ci0Jc3RydWN0IGtvYmplY3QgKmtvYmo7Ci0Jc3RydWN0IGNhY2hlX2luZGV4X2RpciAqaW5kZXg7Ci19OwotCi1zdHJ1Y3QgY2FjaGVfaW5kZXhfZGlyIHsKLQlzdHJ1Y3Qga29iamVjdCBrb2JqOwotCWludCBjcHU7Ci0Jc3RydWN0IGNhY2hlICpjYWNoZTsKLQlzdHJ1Y3QgY2FjaGVfaW5kZXhfZGlyICpuZXh0OwotfTsKLQogZW51bSB7CiAJQ0FDSEVfU0NPUEVfTk9URVhJU1RTLAogCUNBQ0hFX1NDT1BFX1BSSVZBVEUsCkBAIC00NCwxMCArMTgsMTAgQEAKIH07CiAKIGVudW0gewotCUNBQ0hFX1RZUEVfU0VQQVJBVEUsCi0JQ0FDSEVfVFlQRV9EQVRBLAotCUNBQ0hFX1RZUEVfSU5TVFJVQ1RJT04sCi0JQ0FDSEVfVFlQRV9VTklGSUVELAorCUNUWVBFX1NFUEFSQVRFLAorCUNUWVBFX0RBVEEsCisJQ1RZUEVfSU5TVFJVQ1RJT04sCisJQ1RZUEVfVU5JRklFRCwKIH07CiAKIGVudW0gewpAQCAtNzAsMzcgKzQ0LDYwIEBACiB9OwogCiAjZGVmaW5lIENBQ0hFX01BWF9MRVZFTCA4Ci0KIHVuaW9uIGNhY2hlX3RvcG9sb2d5IHsKIAlzdHJ1Y3QgY2FjaGVfaW5mbyBjaVtDQUNIRV9NQVhfTEVWRUxdOwogCXVuc2lnbmVkIGxvbmcgbG9uZyByYXc7CiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNhY2hlX3R5cGVfc3RyaW5nW10gPSB7Ci0JIkRhdGEiLAorCSIiLAogCSJJbnN0cnVjdGlvbiIsCisJIkRhdGEiLAorCSIiLAogCSJVbmlmaWVkIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2FjaGVfZGlyICpjYWNoZV9kaXJfY3B1W05SX0NQVVNdOwotc3RhdGljIExJU1RfSEVBRChjYWNoZV9saXN0KTsKK3N0YXRpYyBjb25zdCBlbnVtIGNhY2hlX3R5cGUgY2FjaGVfdHlwZV9tYXBbXSA9IHsKKwlbQ1RZUEVfU0VQQVJBVEVdID0gQ0FDSEVfVFlQRV9TRVBBUkFURSwKKwlbQ1RZUEVfREFUQV0gPSBDQUNIRV9UWVBFX0RBVEEsCisJW0NUWVBFX0lOU1RSVUNUSU9OXSA9IENBQ0hFX1RZUEVfSU5TVCwKKwlbQ1RZUEVfVU5JRklFRF0gPSBDQUNIRV9UWVBFX1VOSUZJRUQsCit9OwogCiB2b2lkIHNob3dfY2FjaGVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQlzdHJ1Y3QgY2FjaGUgKmNhY2hlOwotCWludCBpbmRleCA9IDA7CisJc3RydWN0IGNwdV9jYWNoZWluZm8gKnRoaXNfY3B1X2NpOworCXN0cnVjdCBjYWNoZWluZm8gKmNhY2hlOworCWludCBpZHg7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhY2hlLCAmY2FjaGVfbGlzdCwgbGlzdCkgewotCQlzZXFfcHJpbnRmKG0sICJjYWNoZSUtMTFkOiAiLCBpbmRleCk7CisJZ2V0X29ubGluZV9jcHVzKCk7CisJdGhpc19jcHVfY2kgPSBnZXRfY3B1X2NhY2hlaW5mbyhjcHVtYXNrX2FueShjcHVfb25saW5lX21hc2spKTsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IHRoaXNfY3B1X2NpLT5udW1fbGVhdmVzOyBpZHgrKykgeworCQljYWNoZSA9IHRoaXNfY3B1X2NpLT5pbmZvX2xpc3QgKyBpZHg7CisJCXNlcV9wcmludGYobSwgImNhY2hlJS0xMWQ6ICIsIGlkeCk7CiAJCXNlcV9wcmludGYobSwgImxldmVsPSVkICIsIGNhY2hlLT5sZXZlbCk7CiAJCXNlcV9wcmludGYobSwgInR5cGU9JXMgIiwgY2FjaGVfdHlwZV9zdHJpbmdbY2FjaGUtPnR5cGVdKTsKLQkJc2VxX3ByaW50ZihtLCAic2NvcGU9JXMgIiwgY2FjaGUtPnByaXZhdGUgPyAiUHJpdmF0ZSIgOiAiU2hhcmVkIik7Ci0JCXNlcV9wcmludGYobSwgInNpemU9JWx1SyAiLCBjYWNoZS0+c2l6ZSA+PiAxMCk7Ci0JCXNlcV9wcmludGYobSwgImxpbmVfc2l6ZT0ldSAiLCBjYWNoZS0+bGluZV9zaXplKTsKLQkJc2VxX3ByaW50ZihtLCAiYXNzb2NpYXRpdml0eT0lZCIsIGNhY2hlLT5hc3NvY2lhdGl2aXR5KTsKKwkJc2VxX3ByaW50ZihtLCAic2NvcGU9JXMgIiwKKwkJCSAgIGNhY2hlLT5kaXNhYmxlX3N5c2ZzID8gIlNoYXJlZCIgOiAiUHJpdmF0ZSIpOworCQlzZXFfcHJpbnRmKG0sICJzaXplPSVkSyAiLCBjYWNoZS0+c2l6ZSA+PiAxMCk7CisJCXNlcV9wcmludGYobSwgImxpbmVfc2l6ZT0ldSAiLCBjYWNoZS0+Y29oZXJlbmN5X2xpbmVfc2l6ZSk7CisJCXNlcV9wcmludGYobSwgImFzc29jaWF0aXZpdHk9JWQiLCBjYWNoZS0+d2F5c19vZl9hc3NvY2lhdGl2aXR5KTsKIAkJc2VxX3B1dHMobSwgIlxuIik7Ci0JCWluZGV4Kys7CiAJfQorCXB1dF9vbmxpbmVfY3B1cygpOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gY2FjaGVfdHlwZSBnZXRfY2FjaGVfdHlwZShzdHJ1Y3QgY2FjaGVfaW5mbyAqY2ksIGludCBsZXZlbCkKK3sKKwlpZiAobGV2ZWwgPj0gQ0FDSEVfTUFYX0xFVkVMKQorCQlyZXR1cm4gQ0FDSEVfVFlQRV9OT0NBQ0hFOworCisJY2kgKz0gbGV2ZWw7CisKKwlpZiAoY2ktPnNjb3BlICE9IENBQ0hFX1NDT1BFX1NIQVJFRCAmJiBjaS0+c2NvcGUgIT0gQ0FDSEVfU0NPUEVfUFJJVkFURSkKKwkJcmV0dXJuIENBQ0hFX1RZUEVfTk9DQUNIRTsKKworCXJldHVybiBjYWNoZV90eXBlX21hcFtjaS0+dHlwZV07CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBlY2FnKGludCBhaSwgaW50IGxpLCBpbnQgdGkpCkBAIC0xMTMsMjc3ICsxMTAsNzkgQEAKIAlyZXR1cm4gdmFsOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBjYWNoZV9hZGQoaW50IGxldmVsLCBpbnQgcHJpdmF0ZSwgaW50IHR5cGUpCitzdGF0aWMgdm9pZCBjaV9sZWFmX2luaXQoc3RydWN0IGNhY2hlaW5mbyAqdGhpc19sZWFmLCBpbnQgcHJpdmF0ZSwKKwkJCSBlbnVtIGNhY2hlX3R5cGUgdHlwZSwgdW5zaWduZWQgaW50IGxldmVsKQogewotCXN0cnVjdCBjYWNoZSAqY2FjaGU7Ci0JaW50IHRpOworCWludCB0aSwgbnVtX3NldHM7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAotCWNhY2hlID0ga3phbGxvYyhzaXplb2YoKmNhY2hlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjYWNoZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKHR5cGUgPT0gQ0FDSEVfVFlQRV9JTlNUUlVDVElPTikKKwlpZiAodHlwZSA9PSBDQUNIRV9UWVBFX0lOU1QpCiAJCXRpID0gQ0FDSEVfVElfSU5TVFJVQ1RJT047CiAJZWxzZQogCQl0aSA9IENBQ0hFX1RJX1VOSUZJRUQ7Ci0JY2FjaGUtPnNpemUgPSBlY2FnKEVYVFJBQ1RfU0laRSwgbGV2ZWwsIHRpKTsKLQljYWNoZS0+bGluZV9zaXplID0gZWNhZyhFWFRSQUNUX0xJTkVfU0laRSwgbGV2ZWwsIHRpKTsKLQljYWNoZS0+YXNzb2NpYXRpdml0eSA9IGVjYWcoRVhUUkFDVF9BU1NPQ0lBVElWSVRZLCBsZXZlbCwgdGkpOwotCWNhY2hlLT5ucl9zZXRzID0gY2FjaGUtPnNpemUgLyBjYWNoZS0+YXNzb2NpYXRpdml0eTsKLQljYWNoZS0+bnJfc2V0cyAvPSBjYWNoZS0+bGluZV9zaXplOwotCWNhY2hlLT5wcml2YXRlID0gcHJpdmF0ZTsKLQljYWNoZS0+bGV2ZWwgPSBsZXZlbCArIDE7Ci0JY2FjaGUtPnR5cGUgPSB0eXBlIC0gMTsKLQlsaXN0X2FkZF90YWlsKCZjYWNoZS0+bGlzdCwgJmNhY2hlX2xpc3QpOwotCXJldHVybiAwOworCisJdGhpc19sZWFmLT5sZXZlbCA9IGxldmVsICsgMTsKKwl0aGlzX2xlYWYtPnR5cGUgPSB0eXBlOworCXRoaXNfbGVhZi0+Y29oZXJlbmN5X2xpbmVfc2l6ZSA9IGVjYWcoRVhUUkFDVF9MSU5FX1NJWkUsIGxldmVsLCB0aSk7CisJdGhpc19sZWFmLT53YXlzX29mX2Fzc29jaWF0aXZpdHkgPSBlY2FnKEVYVFJBQ1RfQVNTT0NJQVRJVklUWSwKKwkJCQkJCWxldmVsLCB0aSk7CisJdGhpc19sZWFmLT5zaXplID0gZWNhZyhFWFRSQUNUX1NJWkUsIGxldmVsLCB0aSk7CisKKwludW1fc2V0cyA9IHRoaXNfbGVhZi0+c2l6ZSAvIHRoaXNfbGVhZi0+Y29oZXJlbmN5X2xpbmVfc2l6ZTsKKwludW1fc2V0cyAvPSB0aGlzX2xlYWYtPndheXNfb2ZfYXNzb2NpYXRpdml0eTsKKwl0aGlzX2xlYWYtPm51bWJlcl9vZl9zZXRzID0gbnVtX3NldHM7CisJY3B1bWFza19zZXRfY3B1KGNwdSwgJnRoaXNfbGVhZi0+c2hhcmVkX2NwdV9tYXApOworCWlmICghcHJpdmF0ZSkKKwkJdGhpc19sZWFmLT5kaXNhYmxlX3N5c2ZzID0gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGNhY2hlX2J1aWxkX2luZm8odm9pZCkKK2ludCBpbml0X2NhY2hlX2xldmVsKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0Jc3RydWN0IGNhY2hlICpjYWNoZSwgKm5leHQ7CisJc3RydWN0IGNwdV9jYWNoZWluZm8gKnRoaXNfY3B1X2NpID0gZ2V0X2NwdV9jYWNoZWluZm8oY3B1KTsKKwl1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwLCBsZWF2ZXMgPSAwOwogCXVuaW9uIGNhY2hlX3RvcG9sb2d5IGN0OwotCWludCBsZXZlbCwgcHJpdmF0ZSwgcmM7CisJZW51bSBjYWNoZV90eXBlIGN0eXBlOworCisJaWYgKCF0aGlzX2NwdV9jaSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAljdC5yYXcgPSBlY2FnKEVYVFJBQ1RfVE9QT0xPR1ksIDAsIDApOwotCWZvciAobGV2ZWwgPSAwOyBsZXZlbCA8IENBQ0hFX01BWF9MRVZFTDsgbGV2ZWwrKykgewotCQlzd2l0Y2ggKGN0LmNpW2xldmVsXS5zY29wZSkgewotCQljYXNlIENBQ0hFX1NDT1BFX1NIQVJFRDoKLQkJCXByaXZhdGUgPSAwOworCWRvIHsKKwkJY3R5cGUgPSBnZXRfY2FjaGVfdHlwZSgmY3QuY2lbMF0sIGxldmVsKTsKKwkJaWYgKGN0eXBlID09IENBQ0hFX1RZUEVfTk9DQUNIRSkKIAkJCWJyZWFrOwotCQljYXNlIENBQ0hFX1NDT1BFX1BSSVZBVEU6Ci0JCQlwcml2YXRlID0gMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuOwotCQl9Ci0JCWlmIChjdC5jaVtsZXZlbF0udHlwZSA9PSBDQUNIRV9UWVBFX1NFUEFSQVRFKSB7Ci0JCQlyYyAgPSBjYWNoZV9hZGQobGV2ZWwsIHByaXZhdGUsIENBQ0hFX1RZUEVfREFUQSk7Ci0JCQlyYyB8PSBjYWNoZV9hZGQobGV2ZWwsIHByaXZhdGUsIENBQ0hFX1RZUEVfSU5TVFJVQ1RJT04pOworCQkvKiBTZXBhcmF0ZSBpbnN0cnVjdGlvbiBhbmQgZGF0YSBjYWNoZXMgKi8KKwkJbGVhdmVzICs9IChjdHlwZSA9PSBDQUNIRV9UWVBFX1NFUEFSQVRFKSA/IDIgOiAxOworCX0gd2hpbGUgKCsrbGV2ZWwgPCBDQUNIRV9NQVhfTEVWRUwpOworCisJdGhpc19jcHVfY2ktPm51bV9sZXZlbHMgPSBsZXZlbDsKKwl0aGlzX2NwdV9jaS0+bnVtX2xlYXZlcyA9IGxlYXZlczsKKworCXJldHVybiAwOworfQorCitpbnQgcG9wdWxhdGVfY2FjaGVfbGVhdmVzKHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgaW50IGxldmVsLCBpZHgsIHB2dDsKKwl1bmlvbiBjYWNoZV90b3BvbG9neSBjdDsKKwllbnVtIGNhY2hlX3R5cGUgY3R5cGU7CisJc3RydWN0IGNwdV9jYWNoZWluZm8gKnRoaXNfY3B1X2NpID0gZ2V0X2NwdV9jYWNoZWluZm8oY3B1KTsKKwlzdHJ1Y3QgY2FjaGVpbmZvICp0aGlzX2xlYWYgPSB0aGlzX2NwdV9jaS0+aW5mb19saXN0OworCisJY3QucmF3ID0gZWNhZyhFWFRSQUNUX1RPUE9MT0dZLCAwLCAwKTsKKwlmb3IgKGlkeCA9IDAsIGxldmVsID0gMDsgbGV2ZWwgPCB0aGlzX2NwdV9jaS0+bnVtX2xldmVscyAmJgorCSAgICAgaWR4IDwgdGhpc19jcHVfY2ktPm51bV9sZWF2ZXM7IGlkeCsrLCBsZXZlbCsrKSB7CisJCWlmICghdGhpc19sZWFmKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcHZ0ID0gKGN0LmNpW2xldmVsXS5zY29wZSA9PSBDQUNIRV9TQ09QRV9QUklWQVRFKSA/IDEgOiAwOworCQljdHlwZSA9IGdldF9jYWNoZV90eXBlKCZjdC5jaVswXSwgbGV2ZWwpOworCQlpZiAoY3R5cGUgPT0gQ0FDSEVfVFlQRV9TRVBBUkFURSkgeworCQkJY2lfbGVhZl9pbml0KHRoaXNfbGVhZisrLCBwdnQsIENBQ0hFX1RZUEVfREFUQSwgbGV2ZWwpOworCQkJY2lfbGVhZl9pbml0KHRoaXNfbGVhZisrLCBwdnQsIENBQ0hFX1RZUEVfSU5TVCwgbGV2ZWwpOwogCQl9IGVsc2UgewotCQkJcmMgPSBjYWNoZV9hZGQobGV2ZWwsIHByaXZhdGUsIGN0LmNpW2xldmVsXS50eXBlKTsKKwkJCWNpX2xlYWZfaW5pdCh0aGlzX2xlYWYrKywgcHZ0LCBjdHlwZSwgbGV2ZWwpOwogCQl9Ci0JCWlmIChyYykKLQkJCWdvdG8gZXJyb3I7Ci0JfQotCXJldHVybjsKLWVycm9yOgotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjYWNoZSwgbmV4dCwgJmNhY2hlX2xpc3QsIGxpc3QpIHsKLQkJbGlzdF9kZWwoJmNhY2hlLT5saXN0KTsKLQkJa2ZyZWUoY2FjaGUpOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBjYWNoZV9kaXIgKmNhY2hlX2NyZWF0ZV9jYWNoZV9kaXIoaW50IGNwdSkKLXsKLQlzdHJ1Y3QgY2FjaGVfZGlyICpjYWNoZV9kaXI7Ci0Jc3RydWN0IGtvYmplY3QgKmtvYmogPSBOVUxMOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQotCWRldiA9IGdldF9jcHVfZGV2aWNlKGNwdSk7Ci0JaWYgKCFkZXYpCi0JCWdvdG8gb3V0OwotCWtvYmogPSBrb2JqZWN0X2NyZWF0ZV9hbmRfYWRkKCJjYWNoZSIsICZkZXYtPmtvYmopOwotCWlmICgha29iaikKLQkJZ290byBvdXQ7Ci0JY2FjaGVfZGlyID0ga3phbGxvYyhzaXplb2YoKmNhY2hlX2RpciksIEdGUF9LRVJORUwpOwotCWlmICghY2FjaGVfZGlyKQotCQlnb3RvIG91dDsKLQljYWNoZV9kaXItPmtvYmogPSBrb2JqOwotCWNhY2hlX2Rpcl9jcHVbY3B1XSA9IGNhY2hlX2RpcjsKLQlyZXR1cm4gY2FjaGVfZGlyOwotb3V0OgotCWtvYmplY3RfcHV0KGtvYmopOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IGNhY2hlX2luZGV4X2RpciAqa29ial90b19jYWNoZV9pbmRleF9kaXIoc3RydWN0IGtvYmplY3QgKmtvYmopCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgY2FjaGVfaW5kZXhfZGlyLCBrb2JqKTsKLX0KLQotc3RhdGljIHZvaWQgY2FjaGVfaW5kZXhfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKLXsKLQlzdHJ1Y3QgY2FjaGVfaW5kZXhfZGlyICppbmRleDsKLQotCWluZGV4ID0ga29ial90b19jYWNoZV9pbmRleF9kaXIoa29iaik7Ci0Ja2ZyZWUoaW5kZXgpOwotfQotCi1zdGF0aWMgc3NpemVfdCBjYWNoZV9pbmRleF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCXN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmtvYmpfYXR0cjsKLQotCWtvYmpfYXR0ciA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUsIGF0dHIpOwotCXJldHVybiBrb2JqX2F0dHItPnNob3coa29iaiwga29ial9hdHRyLCBidWYpOwotfQotCi0jZGVmaW5lIERFRklORV9DQUNIRV9BVFRSKF9uYW1lLCBfZm9ybWF0LCBfdmFsdWUpCQkJXAotc3RhdGljIHNzaXplX3QgY2FjaGVfIyNfbmFtZSMjX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosCQlcCi0JCQkJICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwJXAotCQkJCSAgICBjaGFyICpidWYpCQkJCVwKLXsJCQkJCQkJCQlcCi0Jc3RydWN0IGNhY2hlX2luZGV4X2RpciAqaW5kZXg7CQkJCQlcCi0JCQkJCQkJCQlcCi0JaW5kZXggPSBrb2JqX3RvX2NhY2hlX2luZGV4X2Rpcihrb2JqKTsJCQkJXAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgX2Zvcm1hdCwgX3ZhbHVlKTsJCQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgY2FjaGVfIyNfbmFtZSMjX2F0dHIgPQkJCVwKLQlfX0FUVFIoX25hbWUsIDA0NDQsIGNhY2hlXyMjX25hbWUjI19zaG93LCBOVUxMKTsKLQotREVGSU5FX0NBQ0hFX0FUVFIoc2l6ZSwgIiVsdUtcbiIsIGluZGV4LT5jYWNoZS0+c2l6ZSA+PiAxMCk7Ci1ERUZJTkVfQ0FDSEVfQVRUUihjb2hlcmVuY3lfbGluZV9zaXplLCAiJXVcbiIsIGluZGV4LT5jYWNoZS0+bGluZV9zaXplKTsKLURFRklORV9DQUNIRV9BVFRSKG51bWJlcl9vZl9zZXRzLCAiJXVcbiIsIGluZGV4LT5jYWNoZS0+bnJfc2V0cyk7Ci1ERUZJTkVfQ0FDSEVfQVRUUih3YXlzX29mX2Fzc29jaWF0aXZpdHksICIldVxuIiwgaW5kZXgtPmNhY2hlLT5hc3NvY2lhdGl2aXR5KTsKLURFRklORV9DQUNIRV9BVFRSKHR5cGUsICIlc1xuIiwgY2FjaGVfdHlwZV9zdHJpbmdbaW5kZXgtPmNhY2hlLT50eXBlXSk7Ci1ERUZJTkVfQ0FDSEVfQVRUUihsZXZlbCwgIiVkXG4iLCBpbmRleC0+Y2FjaGUtPmxldmVsKTsKLQotc3RhdGljIHNzaXplX3Qgc2hhcmVkX2NwdV9tYXBfZnVuYyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgaW50IHR5cGUsIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgY2FjaGVfaW5kZXhfZGlyICppbmRleDsKLQlpbnQgbGVuOwotCi0JaW5kZXggPSBrb2JqX3RvX2NhY2hlX2luZGV4X2Rpcihrb2JqKTsKLQlsZW4gPSB0eXBlID8KLQkJY3B1bGlzdF9zY25wcmludGYoYnVmLCBQQUdFX1NJWkUgLSAyLCBjcHVtYXNrX29mKGluZGV4LT5jcHUpKSA6Ci0JCWNwdW1hc2tfc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFIC0gMiwgY3B1bWFza19vZihpbmRleC0+Y3B1KSk7Ci0JbGVuICs9IHNwcmludGYoJmJ1ZltsZW5dLCAiXG4iKTsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgc3NpemVfdCBzaGFyZWRfY3B1X21hcF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXJldHVybiBzaGFyZWRfY3B1X21hcF9mdW5jKGtvYmosIDAsIGJ1Zik7Ci19Ci1zdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNhY2hlX3NoYXJlZF9jcHVfbWFwX2F0dHIgPQotCV9fQVRUUihzaGFyZWRfY3B1X21hcCwgMDQ0NCwgc2hhcmVkX2NwdV9tYXBfc2hvdywgTlVMTCk7Ci0KLXN0YXRpYyBzc2l6ZV90IHNoYXJlZF9jcHVfbGlzdF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAotCQkJCSAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc2hhcmVkX2NwdV9tYXBfZnVuYyhrb2JqLCAxLCBidWYpOwotfQotc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBjYWNoZV9zaGFyZWRfY3B1X2xpc3RfYXR0ciA9Ci0JX19BVFRSKHNoYXJlZF9jcHVfbGlzdCwgMDQ0NCwgc2hhcmVkX2NwdV9saXN0X3Nob3csIE5VTEwpOwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY2FjaGVfaW5kZXhfZGVmYXVsdF9hdHRyc1tdID0gewotCSZjYWNoZV90eXBlX2F0dHIuYXR0ciwKLQkmY2FjaGVfc2l6ZV9hdHRyLmF0dHIsCi0JJmNhY2hlX251bWJlcl9vZl9zZXRzX2F0dHIuYXR0ciwKLQkmY2FjaGVfd2F5c19vZl9hc3NvY2lhdGl2aXR5X2F0dHIuYXR0ciwKLQkmY2FjaGVfbGV2ZWxfYXR0ci5hdHRyLAotCSZjYWNoZV9jb2hlcmVuY3lfbGluZV9zaXplX2F0dHIuYXR0ciwKLQkmY2FjaGVfc2hhcmVkX2NwdV9tYXBfYXR0ci5hdHRyLAotCSZjYWNoZV9zaGFyZWRfY3B1X2xpc3RfYXR0ci5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBjYWNoZV9pbmRleF9vcHMgPSB7Ci0JLnNob3cgPSBjYWNoZV9pbmRleF9zaG93LAotfTsKLQotc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgY2FjaGVfaW5kZXhfdHlwZSA9IHsKLQkuc3lzZnNfb3BzID0gJmNhY2hlX2luZGV4X29wcywKLQkucmVsZWFzZSA9IGNhY2hlX2luZGV4X3JlbGVhc2UsCi0JLmRlZmF1bHRfYXR0cnMgPSBjYWNoZV9pbmRleF9kZWZhdWx0X2F0dHJzLAotfTsKLQotc3RhdGljIGludCBjYWNoZV9jcmVhdGVfaW5kZXhfZGlyKHN0cnVjdCBjYWNoZV9kaXIgKmNhY2hlX2RpciwKLQkJCQkgIHN0cnVjdCBjYWNoZSAqY2FjaGUsIGludCBpbmRleCwgaW50IGNwdSkKLXsKLQlzdHJ1Y3QgY2FjaGVfaW5kZXhfZGlyICppbmRleF9kaXI7Ci0JaW50IHJjOwotCi0JaW5kZXhfZGlyID0ga3phbGxvYyhzaXplb2YoKmluZGV4X2RpciksIEdGUF9LRVJORUwpOwotCWlmICghaW5kZXhfZGlyKQotCQlyZXR1cm4gLUVOT01FTTsKLQlpbmRleF9kaXItPmNhY2hlID0gY2FjaGU7Ci0JaW5kZXhfZGlyLT5jcHUgPSBjcHU7Ci0JcmMgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmaW5kZXhfZGlyLT5rb2JqLCAmY2FjaGVfaW5kZXhfdHlwZSwKLQkJCQkgIGNhY2hlX2Rpci0+a29iaiwgImluZGV4JWQiLCBpbmRleCk7Ci0JaWYgKHJjKQotCQlnb3RvIG91dDsKLQlpbmRleF9kaXItPm5leHQgPSBjYWNoZV9kaXItPmluZGV4OwotCWNhY2hlX2Rpci0+aW5kZXggPSBpbmRleF9kaXI7Ci0JcmV0dXJuIDA7Ci1vdXQ6Ci0Ja2ZyZWUoaW5kZXhfZGlyKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgY2FjaGVfYWRkX2NwdShpbnQgY3B1KQotewotCXN0cnVjdCBjYWNoZV9kaXIgKmNhY2hlX2RpcjsKLQlzdHJ1Y3QgY2FjaGUgKmNhY2hlOwotCWludCByYywgaW5kZXggPSAwOwotCi0JaWYgKGxpc3RfZW1wdHkoJmNhY2hlX2xpc3QpKQotCQlyZXR1cm4gMDsKLQljYWNoZV9kaXIgPSBjYWNoZV9jcmVhdGVfY2FjaGVfZGlyKGNwdSk7Ci0JaWYgKCFjYWNoZV9kaXIpCi0JCXJldHVybiAtRU5PTUVNOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FjaGUsICZjYWNoZV9saXN0LCBsaXN0KSB7Ci0JCWlmICghY2FjaGUtPnByaXZhdGUpCi0JCQlicmVhazsKLQkJcmMgPSBjYWNoZV9jcmVhdGVfaW5kZXhfZGlyKGNhY2hlX2RpciwgY2FjaGUsIGluZGV4LCBjcHUpOwotCQlpZiAocmMpCi0JCQlyZXR1cm4gcmM7Ci0JCWluZGV4Kys7CiAJfQogCXJldHVybiAwOwogfQotCi1zdGF0aWMgdm9pZCBjYWNoZV9yZW1vdmVfY3B1KGludCBjcHUpCi17Ci0Jc3RydWN0IGNhY2hlX2luZGV4X2RpciAqaW5kZXgsICpuZXh0OwotCXN0cnVjdCBjYWNoZV9kaXIgKmNhY2hlX2RpcjsKLQotCWNhY2hlX2RpciA9IGNhY2hlX2Rpcl9jcHVbY3B1XTsKLQlpZiAoIWNhY2hlX2RpcikKLQkJcmV0dXJuOwotCWluZGV4ID0gY2FjaGVfZGlyLT5pbmRleDsKLQl3aGlsZSAoaW5kZXgpIHsKLQkJbmV4dCA9IGluZGV4LT5uZXh0OwotCQlrb2JqZWN0X3B1dCgmaW5kZXgtPmtvYmopOwotCQlpbmRleCA9IG5leHQ7Ci0JfQotCWtvYmplY3RfcHV0KGNhY2hlX2Rpci0+a29iaik7Ci0Ja2ZyZWUoY2FjaGVfZGlyKTsKLQljYWNoZV9kaXJfY3B1W2NwdV0gPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IGNhY2hlX2hvdHBsdWcoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAotCQkJIHZvaWQgKmhjcHUpCi17Ci0JaW50IGNwdSA9IChsb25nKWhjcHU7Ci0JaW50IHJjID0gMDsKLQotCXN3aXRjaCAoYWN0aW9uICYgfkNQVV9UQVNLU19GUk9aRU4pIHsKLQljYXNlIENQVV9PTkxJTkU6Ci0JCXJjID0gY2FjaGVfYWRkX2NwdShjcHUpOwotCQlpZiAocmMpCi0JCQljYWNoZV9yZW1vdmVfY3B1KGNwdSk7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVX0RFQUQ6Ci0JCWNhY2hlX3JlbW92ZV9jcHUoY3B1KTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiByYyA/IE5PVElGWV9CQUQgOiBOT1RJRllfT0s7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNhY2hlX2luaXQodm9pZCkKLXsKLQlpbnQgY3B1OwotCi0JaWYgKCF0ZXN0X2ZhY2lsaXR5KDM0KSkKLQkJcmV0dXJuIDA7Ci0JY2FjaGVfYnVpbGRfaW5mbygpOwotCi0JY3B1X25vdGlmaWVyX3JlZ2lzdGVyX2JlZ2luKCk7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCWNhY2hlX2FkZF9jcHUoY3B1KTsKLQlfX2hvdGNwdV9ub3RpZmllcihjYWNoZV9ob3RwbHVnLCAwKTsKLQljcHVfbm90aWZpZXJfcmVnaXN0ZXJfZG9uZSgpOwotCXJldHVybiAwOwotfQotZGV2aWNlX2luaXRjYWxsKGNhY2hlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYyBiL2FyY2gvczM5MC9rZXJuZWwvZGlzLmMKaW5kZXggZjM3NjI5My4uNTMzNDMwMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Rpcy5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAlJTlNUUl9SU0lfUlJQLAogCUlOU1RSX1JTTF9MUkRGVSwgSU5TVFJfUlNMX1IwUkQsCiAJSU5TVFJfUlNZX0FBUkQsIElOU1RSX1JTWV9DQ1JELCBJTlNUUl9SU1lfUlJSRCwgSU5TVFJfUlNZX1JVUkQsCi0JSU5TVFJfUlNZX1JEUk0sCisJSU5TVFJfUlNZX1JEUk0sIElOU1RSX1JTWV9STVJELAogCUlOU1RSX1JTX0FBUkQsIElOU1RSX1JTX0NDUkQsIElOU1RSX1JTX1IwUkQsIElOU1RSX1JTX1JSUkQsCiAJSU5TVFJfUlNfUlVSRCwKIAlJTlNUUl9SWEVfRlJSRCwgSU5TVFJfUlhFX1JSUkQsIElOU1RSX1JYRV9SUlJETSwKQEAgLTIyNiw3ICsyMjYsNiBAQAogCVtVMTZfMzJdID0geyAxNiwgMzIsIDAgfSwKIAlbSjE2XzE2XSA9IHsgMTYsIDE2LCBPUEVSQU5EX1BDUkVMIH0sCiAJW0oxNl8zMl0gPSB7IDE2LCAzMiwgT1BFUkFORF9QQ1JFTCB9LAotCVtJMTZfMzJdID0geyAxNiwgMzIsIE9QRVJBTkRfU0lHTkVEIH0sCiAJW0kyNF8yNF0gPSB7IDI0LCAyNCwgT1BFUkFORF9TSUdORUQgfSwKIAlbSjMyXzE2XSA9IHsgMzIsIDE2LCBPUEVSQU5EX1BDUkVMIH0sCiAJW0kzMl8xNl0gPSB7IDMyLCAxNiwgT1BFUkFORF9TSUdORUQgfSwKQEAgLTMwOCw2ICszMDcsNyBAQAogCVtJTlNUUl9SU1lfQUFSRF0gID0geyAweGZmLCBBXzgsQV8xMixEMjBfMjAsQl8xNiwwLDAgfSwKIAlbSU5TVFJfUlNZX0NDUkRdICA9IHsgMHhmZiwgQ184LENfMTIsRDIwXzIwLEJfMTYsMCwwIH0sCiAJW0lOU1RSX1JTWV9SRFJNXSAgPSB7IDB4ZmYsIFJfOCxEMjBfMjAsQl8xNixVNF8xMiwwLDAgfSwKKwlbSU5TVFJfUlNZX1JNUkRdICA9IHsgMHhmZiwgUl84LFU0XzEyLEQyMF8yMCxCXzE2LDAsMCB9LAogCVtJTlNUUl9SU1lfUlJSRF0gID0geyAweGZmLCBSXzgsUl8xMixEMjBfMjAsQl8xNiwwLDAgfSwKIAlbSU5TVFJfUlNZX1JVUkRdICA9IHsgMHhmZiwgUl84LFU0XzEyLEQyMF8yMCxCXzE2LDAsMCB9LAogCVtJTlNUUl9SU19BQVJEXQkgID0geyAweGZmLCBBXzgsQV8xMixEXzIwLEJfMTYsMCwwIH0sCkBAIC00NTEsNyArNDUxLDggQEAKIAlMT05HX0lOU05fVkVSTExWLAogCUxPTkdfSU5TTl9WRVNSQVYsCiAJTE9OR19JTlNOX1ZFU1JMViwKLQlMT05HX0lOU05fVlNCQ0JJCisJTE9OR19JTlNOX1ZTQkNCSSwKKwlMT05HX0lOU05fU1RDQ1RNCiB9OwogCiBzdGF0aWMgY2hhciAqbG9uZ19pbnNuX25hbWVbXSA9IHsKQEAgLTUzMSw2ICs1MzIsNyBAQAogCVtMT05HX0lOU05fVkVTUkFWXSA9ICJ2ZXNyYXYiLAogCVtMT05HX0lOU05fVkVTUkxWXSA9ICJ2ZXNybHYiLAogCVtMT05HX0lOU05fVlNCQ0JJXSA9ICJ2c2JjYmkiLAorCVtMT05HX0lOU05fU1RDQ1RNXSA9ICJzdGNjdG0iLAogfTsKIAogc3RhdGljIHN0cnVjdCBzMzkwX2luc24gb3Bjb2RlW10gPSB7CkBAIC0xNjU2LDYgKzE2NTgsNyBAQAogCXsgImxyaWMiLCAweDYwLCBJTlNUUl9SU1lfUkRSTSB9LAogCXsgInN0cmljIiwgMHg2MSwgSU5TVFJfUlNZX1JEUk0gfSwKIAl7ICJtcmljIiwgMHg2MiwgSU5TVFJfUlNZX1JEUk0gfSwKKwl7IHsgMCwgTE9OR19JTlNOX1NUQ0NUTSB9LCAweDE3LCBJTlNUUl9SU1lfUk1SRCB9LAogI2VuZGlmCiAJeyAicmxsIiwgMHgxZCwgSU5TVFJfUlNZX1JSUkQgfSwKIAl7ICJtdmNsdSIsIDB4OGUsIElOU1RSX1JTWV9SUlJEIH0sCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKaW5kZXggMzAyYWMxZjcuLjcwYTMyOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZWFybHkuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Vhcmx5LmMKQEAgLTM5Myw5ICszOTMsMjcgQEAKIAkJUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX1RMQl9MQzsKIAlpZiAodGVzdF9mYWNpbGl0eSgxMjkpKQogCQlTMzkwX2xvd2NvcmUubWFjaGluZV9mbGFncyB8PSBNQUNISU5FX0ZMQUdfVlg7CisJaWYgKHRlc3RfZmFjaWxpdHkoMTI4KSkKKwkJUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgfD0gTUFDSElORV9GTEFHX0NBRDsKICNlbmRpZgogfQogCitzdGF0aWMgaW50IF9faW5pdCBub2NhZF9zZXR1cChjaGFyICpzdHIpCit7CisJUzM5MF9sb3djb3JlLm1hY2hpbmVfZmxhZ3MgJj0gfk1BQ0hJTkVfRkxBR19DQUQ7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibm9jYWQiLCBub2NhZF9zZXR1cCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGNhZF9pbml0KHZvaWQpCit7CisJaWYgKE1BQ0hJTkVfSEFTX0NBRCkKKwkJLyogRW5hYmxlIHByb2JsZW0gc3RhdGUgQ0FELiAqLworCQlfX2N0bF9zZXRfYml0KDIsIDMpOworCXJldHVybiAwOworfQorZWFybHlfaW5pdGNhbGwoY2FkX2luaXQpOworCiBzdGF0aWMgX19pbml0IHZvaWQgcmVzY3VlX2luaXRyZCh2b2lkKQogewogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oCmluZGV4IDhlNjEzOTMuLjgzNGRmMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuaAorKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LmgKQEAgLTcxLDkgKzcxLDExIEBACiBzdHJ1Y3QgZmFkdmlzZTY0XzY0X2FyZ3M7CiBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbjsKIAorbG9uZyBzeXNfcnRfc2lncmV0dXJuKHZvaWQpOworbG9uZyBzeXNfc2lncmV0dXJuKHZvaWQpOworCiBsb25nIHN5c19zMzkwX3BlcnNvbmFsaXR5KHVuc2lnbmVkIGludCBwZXJzb25hbGl0eSk7CiBsb25nIHN5c19zMzkwX3J1bnRpbWVfaW5zdHIoaW50IGNvbW1hbmQsIGludCBzaWdudW0pOwotCiBsb25nIHN5c19zMzkwX3BjaV9tbWlvX3dyaXRlKHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQgX191c2VyICosIHNpemVfdCk7CiBsb25nIHN5c19zMzkwX3BjaV9tbWlvX3JlYWQodW5zaWduZWQgbG9uZywgdm9pZCBfX3VzZXIgKiwgc2l6ZV90KTsKICNlbmRpZiAvKiBfRU5UUllfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMKaW5kZXggYjg2YmI4OC4uODJjMTk4OSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jCkBAIC00Niw2ICs0NiwxMyBAQAogICoJbGcJJXIxNCw4KCVyMTUpCQkjIG9mZnNldCAxOAogICogVGhlIGpnIGluc3RydWN0aW9uIGJyYW5jaGVzIHRvIG9mZnNldCAyNCB0byBza2lwIGFzIG1hbnkgaW5zdHJ1Y3Rpb25zCiAgKiBhcyBwb3NzaWJsZS4KKyAqIEluIGNhc2Ugd2UgdXNlIGdjYydzIGhvdHBhdGNoIGZlYXR1cmUgdGhlIG9yaWdpbmFsIGFuZCBhbHNvIHRoZSBkaXNhYmxlZAorICogZnVuY3Rpb24gcHJvbG9ndWUgY29udGFpbnMgb25seSBhIHNpbmdsZSBzaXggYnl0ZSBpbnN0cnVjdGlvbiBhbmQgbG9va3MKKyAqIGxpa2UgdGhpczoKKyAqID4JYnJjbAkwLDAJCQkjIG9mZnNldCAwCisgKiBUbyBlbmFibGUgZnRyYWNlIHRoZSBjb2RlIGdldHMgcGF0Y2hlZCBsaWtlIGFib3ZlIGFuZCBhZnRlcndhcmRzIGxvb2tzCisgKiBsaWtlIHRoaXM6CisgKiA+CWJyYXNsCSVyMCxmdHJhY2VfY2FsbGVyCSMgb2Zmc2V0IDAKICAqLwogCiB1bnNpZ25lZCBsb25nIGZ0cmFjZV9wbHQ7CkBAIC01OSw2MiArNjYsNzEgQEAKIGludCBmdHJhY2VfbWFrZV9ub3Aoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLAogCQkgICAgdW5zaWduZWQgbG9uZyBhZGRyKQogewotCXN0cnVjdCBmdHJhY2VfaW5zbiBpbnNuOwotCXVuc2lnbmVkIHNob3J0IG9wOwotCXZvaWQgKmZyb20sICp0bzsKLQlzaXplX3Qgc2l6ZTsKKwlzdHJ1Y3QgZnRyYWNlX2luc24gb3JpZywgbmV3LCBvbGQ7CiAKLQlmdHJhY2VfZ2VuZXJhdGVfbm9wX2luc24oJmluc24pOwotCXNpemUgPSBzaXplb2YoaW5zbik7Ci0JZnJvbSA9ICZpbnNuOwotCXRvID0gKHZvaWQgKikgcmVjLT5pcDsKLQlpZiAocHJvYmVfa2VybmVsX3JlYWQoJm9wLCAodm9pZCAqKSByZWMtPmlwLCBzaXplb2Yob3ApKSkKKwlpZiAocHJvYmVfa2VybmVsX3JlYWQoJm9sZCwgKHZvaWQgKikgcmVjLT5pcCwgc2l6ZW9mKG9sZCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQkvKgotCSAqIElmIHdlIGZpbmQgYSBicmVha3BvaW50IGluc3RydWN0aW9uLCBhIGtwcm9iZSBoYXMgYmVlbiBwbGFjZWQKLQkgKiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gV2Ugd3JpdGUgdGhlIGNvbnN0YW50Ci0JICogS1BST0JFX09OX0ZUUkFDRV9OT1AgaW50byB0aGUgcmVtYWluaW5nIGZvdXIgYnl0ZXMgb2YgdGhlIG9yaWdpbmFsCi0JICogaW5zdHJ1Y3Rpb24gc28gdGhhdCB0aGUga3Byb2JlcyBoYW5kbGVyIGNhbiBleGVjdXRlIGEgbm9wLCBpZiBpdAotCSAqIHJlYWNoZXMgdGhpcyBicmVha3BvaW50LgotCSAqLwotCWlmIChvcCA9PSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OKSB7Ci0JCXNpemUgLT0gMjsKLQkJZnJvbSArPSAyOwotCQl0byArPSAyOwotCQlpbnNuLmRpc3AgPSBLUFJPQkVfT05fRlRSQUNFX05PUDsKKwlpZiAoYWRkciA9PSBNQ09VTlRfQUREUikgeworCQkvKiBJbml0aWFsIGNvZGUgcmVwbGFjZW1lbnQgKi8KKyNpZmRlZiBDQ19VU0lOR19IT1RQQVRDSAorCQkvKiBXZSBleHBlY3QgdG8gc2VlIGJyY2wgMCwwICovCisJCWZ0cmFjZV9nZW5lcmF0ZV9ub3BfaW5zbigmb3JpZyk7CisjZWxzZQorCQkvKiBXZSBleHBlY3QgdG8gc2VlIHN0ZyByMTQsOChyMTUpICovCisJCW9yaWcub3BjID0gMHhlM2UwOworCQlvcmlnLmRpc3AgPSAweGYwMDgwMDI0OworI2VuZGlmCisJCWZ0cmFjZV9nZW5lcmF0ZV9ub3BfaW5zbigmbmV3KTsKKwl9IGVsc2UgaWYgKG9sZC5vcGMgPT0gQlJFQUtQT0lOVF9JTlNUUlVDVElPTikgeworCQkvKgorCQkgKiBJZiB3ZSBmaW5kIGEgYnJlYWtwb2ludCBpbnN0cnVjdGlvbiwgYSBrcHJvYmUgaGFzIGJlZW4KKwkJICogcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiBXZSB3cml0ZSB0aGUKKwkJICogY29uc3RhbnQgS1BST0JFX09OX0ZUUkFDRV9OT1AgaW50byB0aGUgcmVtYWluaW5nIGZvdXIKKwkJICogYnl0ZXMgb2YgdGhlIG9yaWdpbmFsIGluc3RydWN0aW9uIHNvIHRoYXQgdGhlIGtwcm9iZXMKKwkJICogaGFuZGxlciBjYW4gZXhlY3V0ZSBhIG5vcCwgaWYgaXQgcmVhY2hlcyB0aGlzIGJyZWFrcG9pbnQuCisJCSAqLworCQluZXcub3BjID0gb3JpZy5vcGMgPSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OOworCQlvcmlnLmRpc3AgPSBLUFJPQkVfT05fRlRSQUNFX0NBTEw7CisJCW5ldy5kaXNwID0gS1BST0JFX09OX0ZUUkFDRV9OT1A7CisJfSBlbHNlIHsKKwkJLyogUmVwbGFjZSBmdHJhY2UgY2FsbCB3aXRoIGEgbm9wLiAqLworCQlmdHJhY2VfZ2VuZXJhdGVfY2FsbF9pbnNuKCZvcmlnLCByZWMtPmlwKTsKKwkJZnRyYWNlX2dlbmVyYXRlX25vcF9pbnNuKCZuZXcpOwogCX0KLQlpZiAocHJvYmVfa2VybmVsX3dyaXRlKHRvLCBmcm9tLCBzaXplKSkKKwkvKiBWZXJpZnkgdGhhdCB0aGUgdG8gYmUgcmVwbGFjZWQgY29kZSBtYXRjaGVzIHdoYXQgd2UgZXhwZWN0LiAqLworCWlmIChtZW1jbXAoJm9yaWcsICZvbGQsIHNpemVvZihvbGQpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHByb2JlX2tlcm5lbF93cml0ZSgodm9pZCAqKSByZWMtPmlwLCAmbmV3LCBzaXplb2YobmV3KSkpCiAJCXJldHVybiAtRVBFUk07CiAJcmV0dXJuIDA7CiB9CiAKIGludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlzdHJ1Y3QgZnRyYWNlX2luc24gaW5zbjsKLQl1bnNpZ25lZCBzaG9ydCBvcDsKLQl2b2lkICpmcm9tLCAqdG87Ci0Jc2l6ZV90IHNpemU7CisJc3RydWN0IGZ0cmFjZV9pbnNuIG9yaWcsIG5ldywgb2xkOwogCi0JZnRyYWNlX2dlbmVyYXRlX2NhbGxfaW5zbigmaW5zbiwgcmVjLT5pcCk7Ci0Jc2l6ZSA9IHNpemVvZihpbnNuKTsKLQlmcm9tID0gJmluc247Ci0JdG8gPSAodm9pZCAqKSByZWMtPmlwOwotCWlmIChwcm9iZV9rZXJuZWxfcmVhZCgmb3AsICh2b2lkICopIHJlYy0+aXAsIHNpemVvZihvcCkpKQorCWlmIChwcm9iZV9rZXJuZWxfcmVhZCgmb2xkLCAodm9pZCAqKSByZWMtPmlwLCBzaXplb2Yob2xkKSkpCiAJCXJldHVybiAtRUZBVUxUOwotCS8qCi0JICogSWYgd2UgZmluZCBhIGJyZWFrcG9pbnQgaW5zdHJ1Y3Rpb24sIGEga3Byb2JlIGhhcyBiZWVuIHBsYWNlZAotCSAqIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uLiBXZSB3cml0ZSB0aGUgY29uc3RhbnQKLQkgKiBLUFJPQkVfT05fRlRSQUNFX0NBTEwgaW50byB0aGUgcmVtYWluaW5nIGZvdXIgYnl0ZXMgb2YgdGhlIG9yaWdpbmFsCi0JICogaW5zdHJ1Y3Rpb24gc28gdGhhdCB0aGUga3Byb2JlcyBoYW5kbGVyIGNhbiBleGVjdXRlIGEgYnJhc2wgaWYgaXQKLQkgKiByZWFjaGVzIHRoaXMgYnJlYWtwb2ludC4KLQkgKi8KLQlpZiAob3AgPT0gQlJFQUtQT0lOVF9JTlNUUlVDVElPTikgewotCQlzaXplIC09IDI7Ci0JCWZyb20gKz0gMjsKLQkJdG8gKz0gMjsKLQkJaW5zbi5kaXNwID0gS1BST0JFX09OX0ZUUkFDRV9DQUxMOworCWlmIChvbGQub3BjID09IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04pIHsKKwkJLyoKKwkJICogSWYgd2UgZmluZCBhIGJyZWFrcG9pbnQgaW5zdHJ1Y3Rpb24sIGEga3Byb2JlIGhhcyBiZWVuCisJCSAqIHBsYWNlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmdW5jdGlvbi4gV2Ugd3JpdGUgdGhlCisJCSAqIGNvbnN0YW50IEtQUk9CRV9PTl9GVFJBQ0VfQ0FMTCBpbnRvIHRoZSByZW1haW5pbmcgZm91cgorCQkgKiBieXRlcyBvZiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gc28gdGhhdCB0aGUga3Byb2JlcworCQkgKiBoYW5kbGVyIGNhbiBleGVjdXRlIGEgYnJhc2wgaWYgaXQgcmVhY2hlcyB0aGlzIGJyZWFrcG9pbnQuCisJCSAqLworCQluZXcub3BjID0gb3JpZy5vcGMgPSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OOworCQlvcmlnLmRpc3AgPSBLUFJPQkVfT05fRlRSQUNFX05PUDsKKwkJbmV3LmRpc3AgPSBLUFJPQkVfT05fRlRSQUNFX0NBTEw7CisJfSBlbHNlIHsKKwkJLyogUmVwbGFjZSBub3Agd2l0aCBhbiBmdHJhY2UgY2FsbC4gKi8KKwkJZnRyYWNlX2dlbmVyYXRlX25vcF9pbnNuKCZvcmlnKTsKKwkJZnRyYWNlX2dlbmVyYXRlX2NhbGxfaW5zbigmbmV3LCByZWMtPmlwKTsKIAl9Ci0JaWYgKHByb2JlX2tlcm5lbF93cml0ZSh0bywgZnJvbSwgc2l6ZSkpCisJLyogVmVyaWZ5IHRoYXQgdGhlIHRvIGJlIHJlcGxhY2VkIGNvZGUgbWF0Y2hlcyB3aGF0IHdlIGV4cGVjdC4gKi8KKwlpZiAobWVtY21wKCZvcmlnLCAmb2xkLCBzaXplb2Yob2xkKSkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChwcm9iZV9rZXJuZWxfd3JpdGUoKHZvaWQgKikgcmVjLT5pcCwgJm5ldywgc2l6ZW9mKG5ldykpKQogCQlyZXR1cm4gLUVQRVJNOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQuUwppbmRleCBkNjJlZWUxLi4xMzJmNGM5IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2hlYWQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQuUwpAQCAtNDM2LDcgKzQzNiw5IEBACiAjIGZvbGxvd2VkIGJ5IHRoZSBmYWNpbGl0eSB3b3Jkcy4KIAogI2lmIGRlZmluZWQoQ09ORklHXzY0QklUKQotI2lmIGRlZmluZWQoQ09ORklHX01BUkNIX1pFQzEyKQorI2lmIGRlZmluZWQoQ09ORklHX01BUkNIX1oxMykKKwkubG9uZyAzLCAweGMxMDBlZmYyLCAweGY0NmNlODAwLCAweDAwNDAwMDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19NQVJDSF9aRUMxMikKIAkubG9uZyAzLCAweGMxMDBlZmYyLCAweGY0NmNlODAwLCAweDAwNDAwMDAwCiAjZWxpZiBkZWZpbmVkKENPTkZJR19NQVJDSF9aMTk2KQogCS5sb25nIDIsIDB4YzEwMGVmZjIsIDB4ZjQ2YzAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMgYi9hcmNoL3MzOTAva2VybmVsL2lwbC5jCmluZGV4IDM5YmFkYjkuLjVjODY1MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwpAQCAtMjA3NCw3ICsyMDc0LDggQEAKIAogdTMyIGR1bXBfcHJlZml4X3BhZ2U7CiAKLXZvaWQgczM5MF9yZXNldF9zeXN0ZW0odm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmRhdGEpCit2b2lkIHMzOTBfcmVzZXRfc3lzdGVtKHZvaWQgKCpmbl9wcmUpKHZvaWQpLAorCQkgICAgICAgdm9pZCAoKmZuX3Bvc3QpKHZvaWQgKiksIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IF9sb3djb3JlICpsYzsKIApAQCAtMjExMiw3ICsyMTEzLDExIEBACiAJLyogU3RvcmUgc3RhdHVzIGF0IGFic29sdXRlIHplcm8gKi8KIAlzdG9yZV9zdGF0dXMoKTsKIAorCS8qIENhbGwgZnVuY3Rpb24gYmVmb3JlIHJlc2V0ICovCisJaWYgKGZuX3ByZSkKKwkJZm5fcHJlKCk7CiAJZG9fcmVzZXRfY2FsbHMoKTsKLQlpZiAoZnVuYykKLQkJZnVuYyhkYXRhKTsKKwkvKiBDYWxsIGZ1bmN0aW9uIGFmdGVyIHJlc2V0ICovCisJaWYgKGZuX3Bvc3QpCisJCWZuX3Bvc3QoZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2p1bXBfbGFiZWwuYyBiL2FyY2gvczM5MC9rZXJuZWwvanVtcF9sYWJlbC5jCmluZGV4IGI5ODdhYjIuLmNiMmQ1MWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvanVtcF9sYWJlbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvanVtcF9sYWJlbC5jCkBAIC0yMiwzMSArMjIsNjYgQEAKIAllbnVtIGp1bXBfbGFiZWxfdHlwZSB0eXBlOwogfTsKIAotc3RhdGljIHZvaWQgX19qdW1wX2xhYmVsX3RyYW5zZm9ybShzdHJ1Y3QganVtcF9lbnRyeSAqZW50cnksCi0JCQkJICAgZW51bSBqdW1wX2xhYmVsX3R5cGUgdHlwZSkKK3N0YXRpYyB2b2lkIGp1bXBfbGFiZWxfbWFrZV9ub3Aoc3RydWN0IGp1bXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5zbiAqaW5zbikKIHsKLQlzdHJ1Y3QgaW5zbiBpbnNuOwotCWludCByYzsKKwkvKiBicmNsIDAsMCAqLworCWluc24tPm9wY29kZSA9IDB4YzAwNDsKKwlpbnNuLT5vZmZzZXQgPSAwOworfQorCitzdGF0aWMgdm9pZCBqdW1wX2xhYmVsX21ha2VfYnJhbmNoKHN0cnVjdCBqdW1wX2VudHJ5ICplbnRyeSwgc3RydWN0IGluc24gKmluc24pCit7CisJLyogYnJjbCAxNSxvZmZzZXQgKi8KKwlpbnNuLT5vcGNvZGUgPSAweGMwZjQ7CisJaW5zbi0+b2Zmc2V0ID0gKGVudHJ5LT50YXJnZXQgLSBlbnRyeS0+Y29kZSkgPj4gMTsKK30KKworc3RhdGljIHZvaWQganVtcF9sYWJlbF9idWcoc3RydWN0IGp1bXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwl1bnNpZ25lZCBjaGFyICppcGMgPSAodW5zaWduZWQgY2hhciAqKWVudHJ5LT5jb2RlOworCXVuc2lnbmVkIGNoYXIgKmlwZSA9ICh1bnNpZ25lZCBjaGFyICopaW5zbjsKKworCXByX2VtZXJnKCJKdW1wIGxhYmVsIGNvZGUgbWlzbWF0Y2ggYXQgJXBTIFslcF1cbiIsIGlwYywgaXBjKTsKKwlwcl9lbWVyZygiRm91bmQ6ICAgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCQkgaXBjWzBdLCBpcGNbMV0sIGlwY1syXSwgaXBjWzNdLCBpcGNbNF0sIGlwY1s1XSk7CisJcHJfZW1lcmcoIkV4cGVjdGVkOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJIGlwZVswXSwgaXBlWzFdLCBpcGVbMl0sIGlwZVszXSwgaXBlWzRdLCBpcGVbNV0pOworCXBhbmljKCJDb3JydXB0ZWQga2VybmVsIHRleHQiKTsKK30KKworc3RhdGljIHN0cnVjdCBpbnNuIG9yaWdub3AgPSB7CisJLm9wY29kZSA9IDB4YzAwNCwKKwkub2Zmc2V0ID0gSlVNUF9MQUJFTF9OT1BfT0ZGU0VUID4+IDEsCit9OworCitzdGF0aWMgdm9pZCBfX2p1bXBfbGFiZWxfdHJhbnNmb3JtKHN0cnVjdCBqdW1wX2VudHJ5ICplbnRyeSwKKwkJCQkgICBlbnVtIGp1bXBfbGFiZWxfdHlwZSB0eXBlLAorCQkJCSAgIGludCBpbml0KQoreworCXN0cnVjdCBpbnNuIG9sZCwgbmV3OwogCiAJaWYgKHR5cGUgPT0gSlVNUF9MQUJFTF9FTkFCTEUpIHsKLQkJLyogYnJjbCAxNSxvZmZzZXQgKi8KLQkJaW5zbi5vcGNvZGUgPSAweGMwZjQ7Ci0JCWluc24ub2Zmc2V0ID0gKGVudHJ5LT50YXJnZXQgLSBlbnRyeS0+Y29kZSkgPj4gMTsKKwkJanVtcF9sYWJlbF9tYWtlX25vcChlbnRyeSwgJm9sZCk7CisJCWp1bXBfbGFiZWxfbWFrZV9icmFuY2goZW50cnksICZuZXcpOwogCX0gZWxzZSB7Ci0JCS8qIGJyY2wgMCwwICovCi0JCWluc24ub3Bjb2RlID0gMHhjMDA0OwotCQlpbnNuLm9mZnNldCA9IDA7CisJCWp1bXBfbGFiZWxfbWFrZV9icmFuY2goZW50cnksICZvbGQpOworCQlqdW1wX2xhYmVsX21ha2Vfbm9wKGVudHJ5LCAmbmV3KTsKIAl9Ci0KLQlyYyA9IHByb2JlX2tlcm5lbF93cml0ZSgodm9pZCAqKWVudHJ5LT5jb2RlLCAmaW5zbiwgSlVNUF9MQUJFTF9OT1BfU0laRSk7Ci0JV0FSTl9PTl9PTkNFKHJjIDwgMCk7CisJaWYgKGluaXQpIHsKKwkJaWYgKG1lbWNtcCgodm9pZCAqKWVudHJ5LT5jb2RlLCAmb3JpZ25vcCwgc2l6ZW9mKG9yaWdub3ApKSkKKwkJCWp1bXBfbGFiZWxfYnVnKGVudHJ5LCAmb2xkKTsKKwl9IGVsc2UgeworCQlpZiAobWVtY21wKCh2b2lkICopZW50cnktPmNvZGUsICZvbGQsIHNpemVvZihvbGQpKSkKKwkJCWp1bXBfbGFiZWxfYnVnKGVudHJ5LCAmb2xkKTsKKwl9CisJcHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopZW50cnktPmNvZGUsICZuZXcsIHNpemVvZihuZXcpKTsKIH0KIAogc3RhdGljIGludCBfX3NtX2FyY2hfanVtcF9sYWJlbF90cmFuc2Zvcm0odm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaW5zbl9hcmdzICphcmdzID0gZGF0YTsKIAotCV9fanVtcF9sYWJlbF90cmFuc2Zvcm0oYXJncy0+ZW50cnksIGFyZ3MtPnR5cGUpOworCV9fanVtcF9sYWJlbF90cmFuc2Zvcm0oYXJncy0+ZW50cnksIGFyZ3MtPnR5cGUsIDApOwogCXJldHVybiAwOwogfQogCkBAIC02NCw3ICs5OSw3IEBACiB2b2lkIGFyY2hfanVtcF9sYWJlbF90cmFuc2Zvcm1fc3RhdGljKHN0cnVjdCBqdW1wX2VudHJ5ICplbnRyeSwKIAkJCQkgICAgICBlbnVtIGp1bXBfbGFiZWxfdHlwZSB0eXBlKQogewotCV9fanVtcF9sYWJlbF90cmFuc2Zvcm0oZW50cnksIHR5cGUpOworCV9fanVtcF9sYWJlbF90cmFuc2Zvcm0oZW50cnksIHR5cGUsIDEpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggMWU0YzcxMC4uZjUxNmVkYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTY5LDcgKzY5LDggQEAKIAkJLyoKIAkJICogSWYga3Byb2JlcyBwYXRjaGVzIHRoZSBpbnN0cnVjdGlvbiB0aGF0IGlzIG1vcnBoZWQgYnkKIAkJICogZnRyYWNlIG1ha2Ugc3VyZSB0aGF0IGtwcm9iZXMgYWx3YXlzIHNlZXMgdGhlIGJyYW5jaAotCQkgKiAiamcgLisyNCIgdGhhdCBza2lwcyB0aGUgbWNvdW50IGJsb2NrCisJCSAqICJqZyAuKzI0IiB0aGF0IHNraXBzIHRoZSBtY291bnQgYmxvY2sgb3IgdGhlICJicmNsIDAsMCIKKwkJICogaW4gY2FzZSBvZiBob3RwYXRjaC4KIAkJICovCiAJCWZ0cmFjZV9nZW5lcmF0ZV9ub3BfaW5zbigoc3RydWN0IGZ0cmFjZV9pbnNuICopcC0+YWluc24uaW5zbik7CiAJCXAtPmFpbnNuLmlzX2Z0cmFjZV9pbnNuID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKaW5kZXggNDY4NTMzNy4uZmIwOTAxZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKQEAgLTEwMywyMSArMTAzLDE4IEBACiAJcmV0dXJuIDA7CiB9CiBhcmNoX2luaXRjYWxsKG1hY2hpbmVfa2R1bXBfcG1faW5pdCk7Ci0jZW5kaWYKIAogLyoKICAqIFN0YXJ0IGtkdW1wOiBXZSBleHBlY3QgaGVyZSB0aGF0IGEgc3RvcmUgc3RhdHVzIGhhcyBiZWVuIGRvbmUgb24gb3VyIENQVQogICovCiBzdGF0aWMgdm9pZCBfX2RvX21hY2hpbmVfa2R1bXAodm9pZCAqaW1hZ2UpCiB7Ci0jaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKIAlpbnQgKCpzdGFydF9rZHVtcCkoaW50KSA9ICh2b2lkICopKChzdHJ1Y3Qga2ltYWdlICopIGltYWdlKS0+c3RhcnQ7CiAKLQlzZXR1cF9yZWdzKCk7CiAJX19sb2FkX3Bzd19tYXNrKFBTV19NQVNLX0JBU0UgfCBQU1dfREVGQVVMVF9LRVkgfCBQU1dfTUFTS19FQSB8IFBTV19NQVNLX0JBKTsKIAlzdGFydF9rZHVtcCgxKTsKLSNlbmRpZgogfQorI2VuZGlmCiAKIC8qCiAgKiBDaGVjayBpZiBrZHVtcCBjaGVja3N1bXMgYXJlIHZhbGlkOiBXZSBjYWxsIHB1cmdhdG9yeSB3aXRoIHBhcmFtZXRlciAiMCIKQEAgLTI0OSwxOCArMjQ2LDE4IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fbWFjaGluZV9rZXhlYyh2b2lkICpkYXRhKQogewotCXN0cnVjdCBraW1hZ2UgKmltYWdlID0gZGF0YTsKLQogCV9fYXJjaF9sb2NhbF9pcnFfc3Rvc20oMHgwNCk7IC8qIGVuYWJsZSBEQVQgKi8KIAlwZmF1bHRfZmluaSgpOwogCXRyYWNpbmdfb2ZmKCk7CiAJZGVidWdfbG9ja3Nfb2ZmKCk7Ci0JaWYgKGltYWdlLT50eXBlID09IEtFWEVDX1RZUEVfQ1JBU0gpIHsKKyNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAorCWlmICgoKHN0cnVjdCBraW1hZ2UgKikgZGF0YSktPnR5cGUgPT0gS0VYRUNfVFlQRV9DUkFTSCkgeworCiAJCWxncl9pbmZvX2xvZygpOwotCQlzMzkwX3Jlc2V0X3N5c3RlbShfX2RvX21hY2hpbmVfa2R1bXAsIGRhdGEpOwotCX0gZWxzZSB7Ci0JCXMzOTBfcmVzZXRfc3lzdGVtKF9fZG9fbWFjaGluZV9rZXhlYywgZGF0YSk7Ci0JfQorCQlzMzkwX3Jlc2V0X3N5c3RlbShzZXR1cF9yZWdzLCBfX2RvX21hY2hpbmVfa2R1bXAsIGRhdGEpOworCX0gZWxzZQorI2VuZGlmCisJCXMzOTBfcmVzZXRfc3lzdGVtKE5VTEwsIF9fZG9fbWFjaGluZV9rZXhlYywgZGF0YSk7CiAJZGlzYWJsZWRfd2FpdCgodW5zaWduZWQgbG9uZykgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuUyBiL2FyY2gvczM5MC9rZXJuZWwvbWNvdW50LlMKaW5kZXggYjZkZmM1Yi4uZTQ5OTM3MCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9tY291bnQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL21jb3VudC5TCkBAIC0yNyw3ICsyNyw5IEBACiAJLmdsb2JsCWZ0cmFjZV9yZWdzX2NhbGxlcgogCS5zZXQJZnRyYWNlX3JlZ3NfY2FsbGVyLGZ0cmFjZV9jYWxsZXIKIAlsZ3IJJXIxLCVyMTUKKyNpZm5kZWYgQ0NfVVNJTkdfSE9UUEFUQ0gKIAlhZ2hpCSVyMCxNQ09VTlRfUkVUVVJOX0ZJWFVQCisjZW5kaWYKIAlhZ2hpCSVyMTUsLVNUQUNLX0ZSQU1FX1NJWkUKIAlzdGcJJXIxLF9fU0ZfQkFDS0NIQUlOKCVyMTUpCiAJc3RnCSVyMSwoU1RBQ0tfUFRSRUdTX0dQUlMrMTUqOCkoJXIxNSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYWE3YTgzOS4uMTNmYzA5NyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTc5LDYgKzc5LDE0IEBACiB7CiB9CiAKKyNpZmRlZiBDT05GSUdfNjRCSVQKK3ZvaWQgYXJjaF9yZWxlYXNlX3Rhc2tfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmICh0c2stPnRocmVhZC52eHJzKQorCQlrZnJlZSh0c2stPnRocmVhZC52eHJzKTsKK30KKyNlbmRpZgorCiBpbnQgY29weV90aHJlYWQodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgdW5zaWduZWQgbG9uZyBuZXdfc3RhY2twLAogCQl1bnNpZ25lZCBsb25nIGFyZywgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpAQCAtMjQzLDEzICsyNTEsMyBAQAogCXJldCA9IFBBR0VfQUxJR04obW0tPmJyayArIGJya19ybmQoKSk7CiAJcmV0dXJuIChyZXQgPiBtbS0+YnJrKSA/IHJldCA6IG1tLT5icms7CiB9Ci0KLXVuc2lnbmVkIGxvbmcgcmFuZG9taXplX2V0X2R5bih1bnNpZ25lZCBsb25nIGJhc2UpCi17Ci0JdW5zaWduZWQgbG9uZyByZXQ7Ci0KLQlpZiAoIShjdXJyZW50LT5mbGFncyAmIFBGX1JBTkRPTUlaRSkpCi0JCXJldHVybiBiYXNlOwotCXJldCA9IFBBR0VfQUxJR04oYmFzZSArIGJya19ybmQoKSk7Ci0JcmV0dXJuIChyZXQgPiBiYXNlKSA/IHJldCA6IGJhc2U7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jIGIvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzb3IuYwppbmRleCBkYmRkMzNlLi4yNjEwODIzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3Nvci5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcHJvY2Vzc29yLmMKQEAgLTgsMTYgKzgsMjQgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2VsZi5oPgogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdWlkLCBjcHVfaWQpOwogCit2b2lkIGNwdV9yZWxheCh2b2lkKQoreworCWlmICghc21wX2NwdV9tdGlkICYmIE1BQ0hJTkVfSEFTX0RJQUc0NCkKKwkJYXNtIHZvbGF0aWxlKCJkaWFnIDAsMCwweDQ0Iik7CisJYmFycmllcigpOworfQorRVhQT1JUX1NZTUJPTChjcHVfcmVsYXgpOworCiAvKgogICogY3B1X2luaXQgLSBpbml0aWFsaXplcyBzdGF0ZSB0aGF0IGlzIHBlci1DUFUuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2NscC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9zY2xwLlMKaW5kZXggYTQxZjJjOS4uN2U3N2UwMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zY2xwLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zY2xwLlMKQEAgLTI5NCw3ICsyOTQsOCBAQAogI2lmZGVmIENPTkZJR182NEJJVAogCXRtCUxDX0FSX01PREVfSUQsMQogCWpubwkuTGVzYTMKLQlsbWgJJXI2LCVyMTUsOTYoJXIxNSkJCSMgc3RvcmUgdXBwZXIgcmVnaXN0ZXIgaGFsdmVzCisJbGdmcgklcjIsJXIyCQkJCSMgc2lnbiBleHRlbmQgcmV0dXJuIHZhbHVlCisJbG1oCSVyNiwlcjE1LDk2KCVyMTUpCQkjIHJlc3RvcmUgdXBwZXIgcmVnaXN0ZXIgaGFsdmVzCiAJYWhpCSVyMTUsODAKIC5MZXNhMzoKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCmluZGV4IDRlNTMyYzYuLmJmYWM3N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKQEAgLTgxMCw2ICs4MTAsOSBAQAogCWNhc2UgMHgyODI4OgogCQlzdHJjcHkoZWxmX3BsYXRmb3JtLCAiekVDMTIiKTsKIAkJYnJlYWs7CisJY2FzZSAweDI5NjQ6CisJCXN0cmNweShlbGZfcGxhdGZvcm0sICJ6MTMiKTsKKwkJYnJlYWs7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwppbmRleCAwYjQ5OWY1Li5hNjY4OTkzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKQEAgLTcxLDkgKzcxLDMwIEBACiB9OwogCiBzdGF0aWMgdTggYm9vdF9jcHVfdHlwZTsKLXN0YXRpYyB1MTYgYm9vdF9jcHVfYWRkcmVzczsKIHN0YXRpYyBzdHJ1Y3QgcGNwdSBwY3B1X2RldmljZXNbTlJfQ1BVU107CiAKK3Vuc2lnbmVkIGludCBzbXBfY3B1X210X3NoaWZ0OworRVhQT1JUX1NZTUJPTChzbXBfY3B1X210X3NoaWZ0KTsKKwordW5zaWduZWQgaW50IHNtcF9jcHVfbXRpZDsKK0VYUE9SVF9TWU1CT0woc21wX2NwdV9tdGlkKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBzbXBfbWF4X3RocmVhZHMgX19pbml0ZGF0YSA9IC0xVTsKKworc3RhdGljIGludCBfX2luaXQgZWFybHlfbm9zbXQoY2hhciAqcykKK3sKKwlzbXBfbWF4X3RocmVhZHMgPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm5vc210IiwgZWFybHlfbm9zbXQpOworCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9zbXQoY2hhciAqcykKK3sKKwlnZXRfb3B0aW9uKCZzLCAmc21wX21heF90aHJlYWRzKTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJzbXQiLCBlYXJseV9zbXQpOworCiAvKgogICogVGhlIHNtcF9jcHVfc3RhdGVfbXV0ZXggbXVzdCBiZSBoZWxkIHdoZW4gY2hhbmdpbmcgdGhlIHN0YXRlIG9yIHBvbGFyaXphdGlvbgogICogbWVtYmVyIG9mIGEgcGNwdSBkYXRhIHN0cnVjdHVyZSB3aXRoaW4gdGhlIHBjcHVfZGV2aWNlcyBhcnJlYXkuCkBAIC0xMzIsNyArMTUzLDcgQEAKIC8qCiAgKiBGaW5kIHN0cnVjdCBwY3B1IGJ5IGNwdSBhZGRyZXNzLgogICovCi1zdGF0aWMgc3RydWN0IHBjcHUgKnBjcHVfZmluZF9hZGRyZXNzKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBpbnQgYWRkcmVzcykKK3N0YXRpYyBzdHJ1Y3QgcGNwdSAqcGNwdV9maW5kX2FkZHJlc3MoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssIHUxNiBhZGRyZXNzKQogewogCWludCBjcHU7CiAKQEAgLTI5OSw2ICszMjAsMzIgQEAKIH0KIAogLyoKKyAqIEVuYWJsZSBhZGRpdGlvbmFsIGxvZ2ljYWwgY3B1cyBmb3IgbXVsdGktdGhyZWFkaW5nLgorICovCitzdGF0aWMgaW50IHBjcHVfc2V0X3NtdCh1bnNpZ25lZCBpbnQgbXRpZCkKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzEgYXNtICgiMSIpID0gKHVuc2lnbmVkIGxvbmcpIG10aWQ7CisJaW50IGNjOworCisJaWYgKHNtcF9jcHVfbXRpZCA9PSBtdGlkKQorCQlyZXR1cm4gMDsKKwlhc20gdm9sYXRpbGUoCisJCSIJc2lncAklMSwwLCUyCSMgc2lncCBzZXQgbXVsdGktdGhyZWFkaW5nXG4iCisJCSIJaXBtCSUwXG4iCisJCSIJc3JsCSUwLDI4XG4iCisJCTogIj1kIiAoY2MpIDogImQiIChyZWcxKSwgIksiIChTSUdQX1NFVF9NVUxUSV9USFJFQURJTkcpCisJCTogImNjIik7CisJaWYgKGNjID09IDApIHsKKwkJc21wX2NwdV9tdGlkID0gbXRpZDsKKwkJc21wX2NwdV9tdF9zaGlmdCA9IDA7CisJCXdoaWxlIChzbXBfY3B1X210aWQgPj0gKDFVIDw8IHNtcF9jcHVfbXRfc2hpZnQpKQorCQkJc21wX2NwdV9tdF9zaGlmdCsrOworCQlwY3B1X2RldmljZXNbMF0uYWRkcmVzcyA9IHN0YXAoKTsKKwl9CisJcmV0dXJuIGNjOworfQorCisvKgogICogQ2FsbCBmdW5jdGlvbiBvbiBhbiBvbmxpbmUgQ1BVLgogICovCiB2b2lkIHNtcF9jYWxsX29ubGluZV9jcHUodm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmRhdGEpCkBAIC01MTIsMjIgKzU1OSwxNyBAQAogCiAjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKIAotc3RhdGljIHZvaWQgX19pbml0IHNtcF9nZXRfc2F2ZV9hcmVhKGludCBjcHUsIHUxNiBhZGRyZXNzKQorc3RhdGljIGlubGluZSB2b2lkIF9fc21wX3N0b3JlX2NwdV9zdGF0ZShpbnQgY3B1LCB1MTYgYWRkcmVzcywgaW50IGlzX2Jvb3RfY3B1KQogewogCXZvaWQgKmxjID0gcGNwdV9kZXZpY2VzWzBdLmxvd2NvcmU7CiAJc3RydWN0IHNhdmVfYXJlYV9leHQgKnNhX2V4dDsKIAl1bnNpZ25lZCBsb25nIHZ4X3NhOwogCi0JaWYgKGlzX2tkdW1wX2tlcm5lbCgpKQotCQlyZXR1cm47Ci0JaWYgKCFPTERNRU1fQkFTRSAmJiAoYWRkcmVzcyA9PSBib290X2NwdV9hZGRyZXNzIHx8Ci0JCQkgICAgIGlwbF9pbmZvLnR5cGUgIT0gSVBMX1RZUEVfRkNQX0RVTVApKQotCQlyZXR1cm47CiAJc2FfZXh0ID0gZHVtcF9zYXZlX2FyZWFfY3JlYXRlKGNwdSk7CiAJaWYgKCFzYV9leHQpCiAJCXBhbmljKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBzYXZlIGFyZWFcbiIpOwotCWlmIChhZGRyZXNzID09IGJvb3RfY3B1X2FkZHJlc3MpIHsKLQkJLyogQ29weSB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBib290IGNwdS4gKi8KKwlpZiAoaXNfYm9vdF9jcHUpIHsKKwkJLyogQ29weSB0aGUgcmVnaXN0ZXJzIG9mIHRoZSBib290IENQVS4gKi8KIAkJY29weV9vbGRtZW1fcGFnZSgxLCAodm9pZCAqKSAmc2FfZXh0LT5zYSwgc2l6ZW9mKHNhX2V4dC0+c2EpLAogCQkJCSBTQVZFX0FSRUFfQkFTRSAtIFBBR0VfU0laRSwgMCk7CiAJCWlmIChNQUNISU5FX0hBU19WWCkKQEAgLTU0OCw2ICs1OTAsNjQgQEAKIAlmcmVlX3BhZ2Uodnhfc2EpOwogfQogCisvKgorICogQ29sbGVjdCBDUFUgc3RhdGUgb2YgdGhlIHByZXZpb3VzLCBjcmFzaGVkIHN5c3RlbS4KKyAqIFRoZXJlIGFyZSBmb3VyIGNhc2VzOgorICogMSkgc3RhbmRhcmQgemZjcCBkdW1wCisgKiAgICBjb25kaXRpb246IE9MRE1FTV9CQVNFID09IE5VTEwgJiYgaXBsX2luZm8udHlwZSA9PSBJUExfVFlQRV9GQ1BfRFVNUAorICogICAgVGhlIHN0YXRlIGZvciBhbGwgQ1BVcyBleGNlcHQgdGhlIGJvb3QgQ1BVIG5lZWRzIHRvIGJlIGNvbGxlY3RlZAorICogICAgd2l0aCBzaWdwIHN0b3AtYW5kLXN0b3JlLXN0YXR1cy4gVGhlIGJvb3QgQ1BVIHN0YXRlIGlzIGxvY2F0ZWQgaW4KKyAqICAgIHRoZSBhYnNvbHV0ZSBsb3djb3JlIG9mIHRoZSBtZW1vcnkgc3RvcmVkIGluIHRoZSBIU0EuIFRoZSB6Y29yZSBjb2RlCisgKiAgICB3aWxsIGFsbG9jYXRlIHRoZSBzYXZlIGFyZWEgYW5kIGNvcHkgdGhlIGJvb3QgQ1BVIHN0YXRlIGZyb20gdGhlIEhTQS4KKyAqIDIpIHN0YW5kLWFsb25lIGtkdW1wIGZvciBTQ1NJICh6ZmNwIGR1bXAgd2l0aCBzd2FwcGVkIG1lbW9yeSkKKyAqICAgIGNvbmRpdGlvbjogT0xETUVNX0JBU0UgIT0gTlVMTCAmJiBpcGxfaW5mby50eXBlID09IElQTF9UWVBFX0ZDUF9EVU1QCisgKiAgICBUaGUgc3RhdGUgZm9yIGFsbCBDUFVzIGV4Y2VwdCB0aGUgYm9vdCBDUFUgbmVlZHMgdG8gYmUgY29sbGVjdGVkCisgKiAgICB3aXRoIHNpZ3Agc3RvcC1hbmQtc3RvcmUtc3RhdHVzLiBUaGUgZmlybXdhcmUgb3IgdGhlIGJvb3QtbG9hZGVyCisgKiAgICBzdG9yZWQgdGhlIHJlZ2lzdGVycyBvZiB0aGUgYm9vdCBDUFUgaW4gdGhlIGFic29sdXRlIGxvd2NvcmUgaW4gdGhlCisgKiAgICBtZW1vcnkgb2YgdGhlIG9sZCBzeXN0ZW0uCisgKiAzKSBrZHVtcCBhbmQgdGhlIG9sZCBrZXJuZWwgZGlkIG5vdCBzdG9yZSB0aGUgQ1BVIHN0YXRlLAorICogICAgb3Igc3RhbmQtYWxvbmUga2R1bXAgZm9yIERBU0QKKyAqICAgIGNvbmRpdGlvbjogT0xETUVNX0JBU0UgIT0gTlVMTCAmJiAhaXNfa2R1bXBfa2VybmVsKCkKKyAqICAgIFRoZSBzdGF0ZSBmb3IgYWxsIENQVXMgZXhjZXB0IHRoZSBib290IENQVSBuZWVkcyB0byBiZSBjb2xsZWN0ZWQKKyAqICAgIHdpdGggc2lncCBzdG9wLWFuZC1zdG9yZS1zdGF0dXMuIFRoZSBrZXhlYyBjb2RlIG9yIHRoZSBib290LWxvYWRlcgorICogICAgc3RvcmVkIHRoZSByZWdpc3RlcnMgb2YgdGhlIGJvb3QgQ1BVIGluIHRoZSBtZW1vcnkgb2YgdGhlIG9sZCBzeXN0ZW0uCisgKiA0KSBrZHVtcCBhbmQgdGhlIG9sZCBrZXJuZWwgc3RvcmVkIHRoZSBDUFUgc3RhdGUKKyAqICAgIGNvbmRpdGlvbjogT0xETUVNX0JBU0UgIT0gTlVMTCAmJiBpc19rZHVtcF9rZXJuZWwoKQorICogICAgVGhlIHN0YXRlIG9mIGFsbCBDUFVzIGlzIHN0b3JlZCBpbiBFTEYgc2VjdGlvbnMgaW4gdGhlIG1lbW9yeSBvZiB0aGUKKyAqICAgIG9sZCBzeXN0ZW0uIFRoZSBFTEYgc2VjdGlvbnMgYXJlIHBpY2tlZCB1cCBieSB0aGUgY3Jhc2hfZHVtcCBjb2RlCisgKiAgICB2aWEgZWxmY29yZWhkcl9hZGRyLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgc21wX3N0b3JlX2NwdV9zdGF0ZXMoc3RydWN0IHNjbHBfY3B1X2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgaW50IGNwdSwgYWRkcmVzcywgaSwgajsKKwlpbnQgaXNfYm9vdF9jcHU7CisKKwlpZiAoaXNfa2R1bXBfa2VybmVsKCkpCisJCS8qIFByZXZpb3VzIHN5c3RlbSBzdG9yZWQgdGhlIENQVSBzdGF0ZXMuIE5vdGhpbmcgdG8gZG8uICovCisJCXJldHVybjsKKwlpZiAoIShPTERNRU1fQkFTRSB8fCBpcGxfaW5mby50eXBlID09IElQTF9UWVBFX0ZDUF9EVU1QKSkKKwkJLyogTm8gcHJldmlvdXMgc3lzdGVtIHByZXNlbnQsIG5vcm1hbCBib290LiAqLworCQlyZXR1cm47CisJLyogU2V0IG11bHRpLXRocmVhZGluZyBzdGF0ZSB0byB0aGUgcHJldmlvdXMgc3lzdGVtLiAqLworCXBjcHVfc2V0X3NtdChzY2xwX2dldF9tdGlkX3ByZXYoKSk7CisJLyogQ29sbGVjdCBDUFUgc3RhdGVzLiAqLworCWNwdSA9IDA7CisJZm9yIChpID0gMDsgaSA8IGluZm8tPmNvbmZpZ3VyZWQ7IGkrKykgeworCQkvKiBTa2lwIENQVXMgd2l0aCBkaWZmZXJlbnQgQ1BVIHR5cGUuICovCisJCWlmIChpbmZvLT5oYXNfY3B1X3R5cGUgJiYgaW5mby0+Y3B1W2ldLnR5cGUgIT0gYm9vdF9jcHVfdHlwZSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDw9IHNtcF9jcHVfbXRpZDsgaisrLCBjcHUrKykgeworCQkJYWRkcmVzcyA9IChpbmZvLT5jcHVbaV0uY29yZV9pZCA8PCBzbXBfY3B1X210X3NoaWZ0KSArIGo7CisJCQlpc19ib290X2NwdSA9IChhZGRyZXNzID09IHBjcHVfZGV2aWNlc1swXS5hZGRyZXNzKTsKKwkJCWlmIChpc19ib290X2NwdSAmJiAhT0xETUVNX0JBU0UpCisJCQkJLyogU2tpcCBib290IENQVSBmb3Igc3RhbmRhcmQgemZjcCBkdW1wLiAqLworCQkJCWNvbnRpbnVlOworCQkJLyogR2V0IHN0YXRlIGZvciB0aGlzIENQdS4gKi8KKwkJCV9fc21wX3N0b3JlX2NwdV9zdGF0ZShjcHUsIGFkZHJlc3MsIGlzX2Jvb3RfY3B1KTsKKwkJfQorCX0KK30KKwogaW50IHNtcF9zdG9yZV9zdGF0dXMoaW50IGNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIHZ4X3NhOwpAQCAtNTY1LDEwICs2NjUsNiBAQAogCXJldHVybiAwOwogfQogCi0jZWxzZSAvKiBDT05GSUdfQ1JBU0hfRFVNUCAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgc21wX2dldF9zYXZlX2FyZWEoaW50IGNwdSwgdTE2IGFkZHJlc3MpIHsgfQotCiAjZW5kaWYgLyogQ09ORklHX0NSQVNIX0RVTVAgKi8KIAogdm9pZCBzbXBfY3B1X3NldF9wb2xhcml6YXRpb24oaW50IGNwdSwgaW50IHZhbCkKQEAgLTU5MCwxMSArNjg2LDEzIEBACiAJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGluZm8gJiYgKHVzZV9zaWdwX2RldGVjdGlvbiB8fCBzY2xwX2dldF9jcHVfaW5mbyhpbmZvKSkpIHsKIAkJdXNlX3NpZ3BfZGV0ZWN0aW9uID0gMTsKLQkJZm9yIChhZGRyZXNzID0gMDsgYWRkcmVzcyA8PSBNQVhfQ1BVX0FERFJFU1M7IGFkZHJlc3MrKykgeworCQlmb3IgKGFkZHJlc3MgPSAwOyBhZGRyZXNzIDw9IE1BWF9DUFVfQUREUkVTUzsKKwkJICAgICBhZGRyZXNzICs9ICgxVSA8PCBzbXBfY3B1X210X3NoaWZ0KSkgewogCQkJaWYgKF9fcGNwdV9zaWdwX3JlbGF4KGFkZHJlc3MsIFNJR1BfU0VOU0UsIDAsIE5VTEwpID09CiAJCQkgICAgU0lHUF9DQ19OT1RfT1BFUkFUSU9OQUwpCiAJCQkJY29udGludWU7Ci0JCQlpbmZvLT5jcHVbaW5mby0+Y29uZmlndXJlZF0uYWRkcmVzcyA9IGFkZHJlc3M7CisJCQlpbmZvLT5jcHVbaW5mby0+Y29uZmlndXJlZF0uY29yZV9pZCA9CisJCQkJYWRkcmVzcyA+PiBzbXBfY3B1X210X3NoaWZ0OwogCQkJaW5mby0+Y29uZmlndXJlZCsrOwogCQl9CiAJCWluZm8tPmNvbWJpbmVkID0gaW5mby0+Y29uZmlndXJlZDsKQEAgLTYwOCw3ICs3MDYsOCBAQAogewogCXN0cnVjdCBwY3B1ICpwY3B1OwogCWNwdW1hc2tfdCBhdmFpbDsKLQlpbnQgY3B1LCBuciwgaTsKKwlpbnQgY3B1LCBuciwgaSwgajsKKwl1MTYgYWRkcmVzczsKIAogCW5yID0gMDsKIAljcHVtYXNrX3hvcigmYXZhaWwsIGNwdV9wb3NzaWJsZV9tYXNrLCBjcHVfcHJlc2VudF9tYXNrKTsKQEAgLTYxNiw1MSArNzE1LDc2IEBACiAJZm9yIChpID0gMDsgKGkgPCBpbmZvLT5jb21iaW5lZCkgJiYgKGNwdSA8IG5yX2NwdV9pZHMpOyBpKyspIHsKIAkJaWYgKGluZm8tPmhhc19jcHVfdHlwZSAmJiBpbmZvLT5jcHVbaV0udHlwZSAhPSBib290X2NwdV90eXBlKQogCQkJY29udGludWU7Ci0JCWlmIChwY3B1X2ZpbmRfYWRkcmVzcyhjcHVfcHJlc2VudF9tYXNrLCBpbmZvLT5jcHVbaV0uYWRkcmVzcykpCi0JCQljb250aW51ZTsKLQkJcGNwdSA9IHBjcHVfZGV2aWNlcyArIGNwdTsKLQkJcGNwdS0+YWRkcmVzcyA9IGluZm8tPmNwdVtpXS5hZGRyZXNzOwotCQlwY3B1LT5zdGF0ZSA9IChpID49IGluZm8tPmNvbmZpZ3VyZWQpID8KLQkJCUNQVV9TVEFURV9TVEFOREJZIDogQ1BVX1NUQVRFX0NPTkZJR1VSRUQ7Ci0JCXNtcF9jcHVfc2V0X3BvbGFyaXphdGlvbihjcHUsIFBPTEFSSVpBVElPTl9VTktOT1dOKTsKLQkJc2V0X2NwdV9wcmVzZW50KGNwdSwgdHJ1ZSk7Ci0JCWlmIChzeXNmc19hZGQgJiYgc21wX2FkZF9wcmVzZW50X2NwdShjcHUpICE9IDApCi0JCQlzZXRfY3B1X3ByZXNlbnQoY3B1LCBmYWxzZSk7Ci0JCWVsc2UKLQkJCW5yKys7Ci0JCWNwdSA9IGNwdW1hc2tfbmV4dChjcHUsICZhdmFpbCk7CisJCWFkZHJlc3MgPSBpbmZvLT5jcHVbaV0uY29yZV9pZCA8PCBzbXBfY3B1X210X3NoaWZ0OworCQlmb3IgKGogPSAwOyBqIDw9IHNtcF9jcHVfbXRpZDsgaisrKSB7CisJCQlpZiAocGNwdV9maW5kX2FkZHJlc3MoY3B1X3ByZXNlbnRfbWFzaywgYWRkcmVzcyArIGopKQorCQkJCWNvbnRpbnVlOworCQkJcGNwdSA9IHBjcHVfZGV2aWNlcyArIGNwdTsKKwkJCXBjcHUtPmFkZHJlc3MgPSBhZGRyZXNzICsgajsKKwkJCXBjcHUtPnN0YXRlID0KKwkJCQkoY3B1ID49IGluZm8tPmNvbmZpZ3VyZWQqKHNtcF9jcHVfbXRpZCArIDEpKSA/CisJCQkJQ1BVX1NUQVRFX1NUQU5EQlkgOiBDUFVfU1RBVEVfQ09ORklHVVJFRDsKKwkJCXNtcF9jcHVfc2V0X3BvbGFyaXphdGlvbihjcHUsIFBPTEFSSVpBVElPTl9VTktOT1dOKTsKKwkJCXNldF9jcHVfcHJlc2VudChjcHUsIHRydWUpOworCQkJaWYgKHN5c2ZzX2FkZCAmJiBzbXBfYWRkX3ByZXNlbnRfY3B1KGNwdSkgIT0gMCkKKwkJCQlzZXRfY3B1X3ByZXNlbnQoY3B1LCBmYWxzZSk7CisJCQllbHNlCisJCQkJbnIrKzsKKwkJCWNwdSA9IGNwdW1hc2tfbmV4dChjcHUsICZhdmFpbCk7CisJCQlpZiAoY3B1ID49IG5yX2NwdV9pZHMpCisJCQkJYnJlYWs7CisJCX0KIAl9CiAJcmV0dXJuIG5yOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgc21wX2RldGVjdF9jcHVzKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGNwdSwgY19jcHVzLCBzX2NwdXM7CisJdW5zaWduZWQgaW50IGNwdSwgbXRpZCwgY19jcHVzLCBzX2NwdXM7CiAJc3RydWN0IHNjbHBfY3B1X2luZm8gKmluZm87CisJdTE2IGFkZHJlc3M7CiAKKwkvKiBHZXQgQ1BVIGluZm9ybWF0aW9uICovCiAJaW5mbyA9IHNtcF9nZXRfY3B1X2luZm8oKTsKIAlpZiAoIWluZm8pCiAJCXBhbmljKCJzbXBfZGV0ZWN0X2NwdXMgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CisKKwkvKiBGaW5kIGJvb3QgQ1BVIHR5cGUgKi8KIAlpZiAoaW5mby0+aGFzX2NwdV90eXBlKSB7Ci0JCWZvciAoY3B1ID0gMDsgY3B1IDwgaW5mby0+Y29tYmluZWQ7IGNwdSsrKSB7Ci0JCQlpZiAoaW5mby0+Y3B1W2NwdV0uYWRkcmVzcyAhPSBib290X2NwdV9hZGRyZXNzKQotCQkJCWNvbnRpbnVlOwotCQkJLyogVGhlIGJvb3QgY3B1IGRpY3RhdGVzIHRoZSBjcHUgdHlwZS4gKi8KLQkJCWJvb3RfY3B1X3R5cGUgPSBpbmZvLT5jcHVbY3B1XS50eXBlOwotCQkJYnJlYWs7Ci0JCX0KKwkJYWRkcmVzcyA9IHN0YXAoKTsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBpbmZvLT5jb21iaW5lZDsgY3B1KyspCisJCQlpZiAoaW5mby0+Y3B1W2NwdV0uY29yZV9pZCA9PSBhZGRyZXNzKSB7CisJCQkJLyogVGhlIGJvb3QgY3B1IGRpY3RhdGVzIHRoZSBjcHUgdHlwZS4gKi8KKwkJCQlib290X2NwdV90eXBlID0gaW5mby0+Y3B1W2NwdV0udHlwZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJaWYgKGNwdSA+PSBpbmZvLT5jb21iaW5lZCkKKwkJCXBhbmljKCJDb3VsZCBub3QgZmluZCBib290IENQVSB0eXBlIik7CiAJfQorCisjaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKKwkvKiBDb2xsZWN0IENQVSBzdGF0ZSBvZiBwcmV2aW91cyBzeXN0ZW0gKi8KKwlzbXBfc3RvcmVfY3B1X3N0YXRlcyhpbmZvKTsKKyNlbmRpZgorCisJLyogU2V0IG11bHRpLXRocmVhZGluZyBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgc3lzdGVtICovCisJbXRpZCA9IHNjbHBfZ2V0X210aWQoYm9vdF9jcHVfdHlwZSk7CisJbXRpZCA9IChtdGlkIDwgc21wX21heF90aHJlYWRzKSA/IG10aWQgOiBzbXBfbWF4X3RocmVhZHMgLSAxOworCXBjcHVfc2V0X3NtdChtdGlkKTsKKworCS8qIFByaW50IG51bWJlciBvZiBDUFVzICovCiAJY19jcHVzID0gc19jcHVzID0gMDsKIAlmb3IgKGNwdSA9IDA7IGNwdSA8IGluZm8tPmNvbWJpbmVkOyBjcHUrKykgewogCQlpZiAoaW5mby0+aGFzX2NwdV90eXBlICYmIGluZm8tPmNwdVtjcHVdLnR5cGUgIT0gYm9vdF9jcHVfdHlwZSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoY3B1IDwgaW5mby0+Y29uZmlndXJlZCkgewotCQkJc21wX2dldF9zYXZlX2FyZWEoY19jcHVzLCBpbmZvLT5jcHVbY3B1XS5hZGRyZXNzKTsKLQkJCWNfY3B1cysrOwotCQl9IGVsc2UKLQkJCXNfY3B1cysrOworCQlpZiAoY3B1IDwgaW5mby0+Y29uZmlndXJlZCkKKwkJCWNfY3B1cyArPSBzbXBfY3B1X210aWQgKyAxOworCQllbHNlCisJCQlzX2NwdXMgKz0gc21wX2NwdV9tdGlkICsgMTsKIAl9CiAJcHJfaW5mbygiJWQgY29uZmlndXJlZCBDUFVzLCAlZCBzdGFuZGJ5IENQVXNcbiIsIGNfY3B1cywgc19jcHVzKTsKKworCS8qIEFkZCBDUFVzIHByZXNlbnQgYXQgYm9vdCAqLwogCWdldF9vbmxpbmVfY3B1cygpOwogCV9fc21wX3Jlc2Nhbl9jcHVzKGluZm8sIDApOwogCXB1dF9vbmxpbmVfY3B1cygpOwpAQCAtNjk2LDEyICs4MjAsMjMgQEAKIGludCBfX2NwdV91cCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRpZGxlKQogewogCXN0cnVjdCBwY3B1ICpwY3B1OwotCWludCByYzsKKwlpbnQgYmFzZSwgaSwgcmM7CiAKIAlwY3B1ID0gcGNwdV9kZXZpY2VzICsgY3B1OwogCWlmIChwY3B1LT5zdGF0ZSAhPSBDUFVfU1RBVEVfQ09ORklHVVJFRCkKIAkJcmV0dXJuIC1FSU87Ci0JaWYgKHBjcHVfc2lncF9yZXRyeShwY3B1LCBTSUdQX0lOSVRJQUxfQ1BVX1JFU0VULCAwKSAhPQorCWJhc2UgPSBjcHUgLSAoY3B1ICUgKHNtcF9jcHVfbXRpZCArIDEpKTsKKwlmb3IgKGkgPSAwOyBpIDw9IHNtcF9jcHVfbXRpZDsgaSsrKSB7CisJCWlmIChiYXNlICsgaSA8IG5yX2NwdV9pZHMpCisJCQlpZiAoY3B1X29ubGluZShiYXNlICsgaSkpCisJCQkJYnJlYWs7CisJfQorCS8qCisJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgQ1BVIG9mIHRoZSBjb3JlIHRvIGdldCBvbmxpbmUKKwkgKiBkbyBhbiBpbml0aWFsIENQVSByZXNldC4KKwkgKi8KKwlpZiAoaSA+IHNtcF9jcHVfbXRpZCAmJgorCSAgICBwY3B1X3NpZ3BfcmV0cnkocGNwdV9kZXZpY2VzICsgYmFzZSwgU0lHUF9JTklUSUFMX0NQVV9SRVNFVCwgMCkgIT0KIAkgICAgU0lHUF9DQ19PUkRFUl9DT0RFX0FDQ0VQVEVEKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtNzc0LDcgKzkwOSw4IEBACiB7CiAJdW5zaWduZWQgaW50IHBvc3NpYmxlLCBzY2xwLCBjcHU7CiAKLQlzY2xwID0gc2NscF9nZXRfbWF4X2NwdSgpID86IG5yX2NwdV9pZHM7CisJc2NscCA9IG1pbihzbXBfbWF4X3RocmVhZHMsIHNjbHBfZ2V0X210aWRfbWF4KCkgKyAxKTsKKwlzY2xwID0gc2NscF9nZXRfbWF4X2NwdSgpKnNjbHAgPzogbnJfY3B1X2lkczsKIAlwb3NzaWJsZSA9IHNldHVwX3Bvc3NpYmxlX2NwdXMgPzogbnJfY3B1X2lkczsKIAlwb3NzaWJsZSA9IG1pbihwb3NzaWJsZSwgc2NscCk7CiAJZm9yIChjcHUgPSAwOyBjcHUgPCBwb3NzaWJsZSAmJiBjcHUgPCBucl9jcHVfaWRzOyBjcHUrKykKQEAgLTc5Niw5ICs5MzIsOCBAQAogewogCXN0cnVjdCBwY3B1ICpwY3B1ID0gcGNwdV9kZXZpY2VzOwogCi0JYm9vdF9jcHVfYWRkcmVzcyA9IHN0YXAoKTsKIAlwY3B1LT5zdGF0ZSA9IENQVV9TVEFURV9DT05GSUdVUkVEOwotCXBjcHUtPmFkZHJlc3MgPSBib290X2NwdV9hZGRyZXNzOworCXBjcHUtPmFkZHJlc3MgPSBzdGFwKCk7CiAJcGNwdS0+bG93Y29yZSA9IChzdHJ1Y3QgX2xvd2NvcmUgKikodW5zaWduZWQgbG9uZykgc3RvcmVfcHJlZml4KCk7CiAJcGNwdS0+YXN5bmNfc3RhY2sgPSBTMzkwX2xvd2NvcmUuYXN5bmNfc3RhY2sgLSBBU1lOQ19TSVpFCiAJCSsgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpOwpAQCAtODQ4LDcgKzk4Myw3IEBACiAJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHBjcHUgKnBjcHU7Ci0JaW50IGNwdSwgdmFsLCByYzsKKwlpbnQgY3B1LCB2YWwsIHJjLCBpOwogCWNoYXIgZGVsaW07CiAKIAlpZiAoc3NjYW5mKGJ1ZiwgIiVkICVjIiwgJnZhbCwgJmRlbGltKSAhPSAxKQpAQCAtODYwLDI5ICs5OTUsNDMgQEAKIAlyYyA9IC1FQlVTWTsKIAkvKiBkaXNhbGxvdyBjb25maWd1cmF0aW9uIGNoYW5nZXMgb2Ygb25saW5lIGNwdXMgYW5kIGNwdSAwICovCiAJY3B1ID0gZGV2LT5pZDsKLQlpZiAoY3B1X29ubGluZShjcHUpIHx8IGNwdSA9PSAwKQorCWNwdSAtPSBjcHUgJSAoc21wX2NwdV9tdGlkICsgMSk7CisJaWYgKGNwdSA9PSAwKQogCQlnb3RvIG91dDsKKwlmb3IgKGkgPSAwOyBpIDw9IHNtcF9jcHVfbXRpZDsgaSsrKQorCQlpZiAoY3B1X29ubGluZShjcHUgKyBpKSkKKwkJCWdvdG8gb3V0OwogCXBjcHUgPSBwY3B1X2RldmljZXMgKyBjcHU7CiAJcmMgPSAwOwogCXN3aXRjaCAodmFsKSB7CiAJY2FzZSAwOgogCQlpZiAocGNwdS0+c3RhdGUgIT0gQ1BVX1NUQVRFX0NPTkZJR1VSRUQpCiAJCQlicmVhazsKLQkJcmMgPSBzY2xwX2NwdV9kZWNvbmZpZ3VyZShwY3B1LT5hZGRyZXNzKTsKKwkJcmMgPSBzY2xwX2NwdV9kZWNvbmZpZ3VyZShwY3B1LT5hZGRyZXNzID4+IHNtcF9jcHVfbXRfc2hpZnQpOwogCQlpZiAocmMpCiAJCQlicmVhazsKLQkJcGNwdS0+c3RhdGUgPSBDUFVfU1RBVEVfU1RBTkRCWTsKLQkJc21wX2NwdV9zZXRfcG9sYXJpemF0aW9uKGNwdSwgUE9MQVJJWkFUSU9OX1VOS05PV04pOworCQlmb3IgKGkgPSAwOyBpIDw9IHNtcF9jcHVfbXRpZDsgaSsrKSB7CisJCQlpZiAoY3B1ICsgaSA+PSBucl9jcHVfaWRzIHx8ICFjcHVfcHJlc2VudChjcHUgKyBpKSkKKwkJCQljb250aW51ZTsKKwkJCXBjcHVbaV0uc3RhdGUgPSBDUFVfU1RBVEVfU1RBTkRCWTsKKwkJCXNtcF9jcHVfc2V0X3BvbGFyaXphdGlvbihjcHUgKyBpLAorCQkJCQkJIFBPTEFSSVpBVElPTl9VTktOT1dOKTsKKwkJfQogCQl0b3BvbG9neV9leHBlY3RfY2hhbmdlKCk7CiAJCWJyZWFrOwogCWNhc2UgMToKIAkJaWYgKHBjcHUtPnN0YXRlICE9IENQVV9TVEFURV9TVEFOREJZKQogCQkJYnJlYWs7Ci0JCXJjID0gc2NscF9jcHVfY29uZmlndXJlKHBjcHUtPmFkZHJlc3MpOworCQlyYyA9IHNjbHBfY3B1X2NvbmZpZ3VyZShwY3B1LT5hZGRyZXNzID4+IHNtcF9jcHVfbXRfc2hpZnQpOwogCQlpZiAocmMpCiAJCQlicmVhazsKLQkJcGNwdS0+c3RhdGUgPSBDUFVfU1RBVEVfQ09ORklHVVJFRDsKLQkJc21wX2NwdV9zZXRfcG9sYXJpemF0aW9uKGNwdSwgUE9MQVJJWkFUSU9OX1VOS05PV04pOworCQlmb3IgKGkgPSAwOyBpIDw9IHNtcF9jcHVfbXRpZDsgaSsrKSB7CisJCQlpZiAoY3B1ICsgaSA+PSBucl9jcHVfaWRzIHx8ICFjcHVfcHJlc2VudChjcHUgKyBpKSkKKwkJCQljb250aW51ZTsKKwkJCXBjcHVbaV0uc3RhdGUgPSBDUFVfU1RBVEVfQ09ORklHVVJFRDsKKwkJCXNtcF9jcHVfc2V0X3BvbGFyaXphdGlvbihjcHUgKyBpLAorCQkJCQkJIFBPTEFSSVpBVElPTl9VTktOT1dOKTsKKwkJfQogCQl0b3BvbG9neV9leHBlY3RfY2hhbmdlKCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3N5c2luZm8uYyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jCmluZGV4IDgxMWY1NDIuLjg1NTY1ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc3lzaW5mby5jCkBAIC0xOTQsNiArMTk0LDE0IEBACiAJc2VxX3ByaW50ZihtLCAiTFBBUiBDUFVzIFJlc2VydmVkOiAgICVkXG4iLCBpbmZvLT5jcHVzX3Jlc2VydmVkKTsKIAlzZXFfcHJpbnRmKG0sICJMUEFSIENQVXMgRGVkaWNhdGVkOiAgJWRcbiIsIGluZm8tPmNwdXNfZGVkaWNhdGVkKTsKIAlzZXFfcHJpbnRmKG0sICJMUEFSIENQVXMgU2hhcmVkOiAgICAgJWRcbiIsIGluZm8tPmNwdXNfc2hhcmVkKTsKKwlpZiAoaW5mby0+bXRfaW5zdGFsbGVkICYgMHg4MCkgeworCQlzZXFfcHJpbnRmKG0sICJMUEFSIENQVXMgRy1NVElEOiAgICAgJWRcbiIsCisJCQkgICBpbmZvLT5tdF9nZW5lcmFsICYgMHgxZik7CisJCXNlcV9wcmludGYobSwgIkxQQVIgQ1BVcyBTLU1USUQ6ICAgICAlZFxuIiwKKwkJCSAgIGluZm8tPm10X2luc3RhbGxlZCAmIDB4MWYpOworCQlzZXFfcHJpbnRmKG0sICJMUEFSIENQVXMgUFMtTVRJRDogICAgJWRcbiIsCisJCQkgICBpbmZvLT5tdF9wc210aWQgJiAweDFmKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHN0c2lfM18yXzIoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3Qgc3lzaW5mb18zXzJfMiAqaW5mbykKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYyBiL2FyY2gvczM5MC9rZXJuZWwvdG9wb2xvZ3kuYwppbmRleCBiOTNiZWQ3Li4yNGVlMzNmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90b3BvbG9neS5jCkBAIC01OSwzMiArNTksNTAgQEAKIAlyZXR1cm4gbWFzazsKIH0KIAotc3RhdGljIHN0cnVjdCBtYXNrX2luZm8gKmFkZF9jcHVzX3RvX21hc2soc3RydWN0IHRvcG9sb2d5X2NwdSAqdGxfY3B1LAorc3RhdGljIGNwdW1hc2tfdCBjcHVfdGhyZWFkX21hcCh1bnNpZ25lZCBpbnQgY3B1KQoreworCWNwdW1hc2tfdCBtYXNrOworCWludCBpOworCisJY3B1bWFza19jb3B5KCZtYXNrLCBjcHVtYXNrX29mKGNwdSkpOworCWlmICghdG9wb2xvZ3lfZW5hYmxlZCB8fCAhTUFDSElORV9IQVNfVE9QT0xPR1kpCisJCXJldHVybiBtYXNrOworCWNwdSAtPSBjcHUgJSAoc21wX2NwdV9tdGlkICsgMSk7CisJZm9yIChpID0gMDsgaSA8PSBzbXBfY3B1X210aWQ7IGkrKykKKwkJaWYgKGNwdV9wcmVzZW50KGNwdSArIGkpKQorCQkJY3B1bWFza19zZXRfY3B1KGNwdSArIGksICZtYXNrKTsKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIHN0cnVjdCBtYXNrX2luZm8gKmFkZF9jcHVzX3RvX21hc2soc3RydWN0IHRvcG9sb2d5X2NvcmUgKnRsX2NvcmUsCiAJCQkJCSAgc3RydWN0IG1hc2tfaW5mbyAqYm9vaywKIAkJCQkJICBzdHJ1Y3QgbWFza19pbmZvICpzb2NrZXQsCiAJCQkJCSAgaW50IG9uZV9zb2NrZXRfcGVyX2NwdSkKIHsKLQl1bnNpZ25lZCBpbnQgY3B1OworCXVuc2lnbmVkIGludCBjb3JlOwogCi0JZm9yX2VhY2hfc2V0X2JpdChjcHUsICZ0bF9jcHUtPm1hc2tbMF0sIFRPUE9MT0dZX0NQVV9CSVRTKSB7Ci0JCXVuc2lnbmVkIGludCByY3B1OwotCQlpbnQgbGNwdTsKKwlmb3JfZWFjaF9zZXRfYml0KGNvcmUsICZ0bF9jb3JlLT5tYXNrWzBdLCBUT1BPTE9HWV9DT1JFX0JJVFMpIHsKKwkJdW5zaWduZWQgaW50IHJjb3JlOworCQlpbnQgbGNwdSwgaTsKIAotCQlyY3B1ID0gVE9QT0xPR1lfQ1BVX0JJVFMgLSAxIC0gY3B1ICsgdGxfY3B1LT5vcmlnaW47Ci0JCWxjcHUgPSBzbXBfZmluZF9wcm9jZXNzb3JfaWQocmNwdSk7CisJCXJjb3JlID0gVE9QT0xPR1lfQ09SRV9CSVRTIC0gMSAtIGNvcmUgKyB0bF9jb3JlLT5vcmlnaW47CisJCWxjcHUgPSBzbXBfZmluZF9wcm9jZXNzb3JfaWQocmNvcmUgPDwgc21wX2NwdV9tdF9zaGlmdCk7CiAJCWlmIChsY3B1IDwgMCkKIAkJCWNvbnRpbnVlOwotCQljcHVtYXNrX3NldF9jcHUobGNwdSwgJmJvb2stPm1hc2spOwotCQljcHVfdG9wb2xvZ3lbbGNwdV0uYm9va19pZCA9IGJvb2stPmlkOwotCQljcHVtYXNrX3NldF9jcHUobGNwdSwgJnNvY2tldC0+bWFzayk7Ci0JCWNwdV90b3BvbG9neVtsY3B1XS5jb3JlX2lkID0gcmNwdTsKLQkJaWYgKG9uZV9zb2NrZXRfcGVyX2NwdSkgewotCQkJY3B1X3RvcG9sb2d5W2xjcHVdLnNvY2tldF9pZCA9IHJjcHU7Ci0JCQlzb2NrZXQgPSBzb2NrZXQtPm5leHQ7Ci0JCX0gZWxzZSB7Ci0JCQljcHVfdG9wb2xvZ3lbbGNwdV0uc29ja2V0X2lkID0gc29ja2V0LT5pZDsKKwkJZm9yIChpID0gMDsgaSA8PSBzbXBfY3B1X210aWQ7IGkrKykgeworCQkJY3B1X3RvcG9sb2d5W2xjcHUgKyBpXS5ib29rX2lkID0gYm9vay0+aWQ7CisJCQljcHVfdG9wb2xvZ3lbbGNwdSArIGldLmNvcmVfaWQgPSByY29yZTsKKwkJCWNwdV90b3BvbG9neVtsY3B1ICsgaV0udGhyZWFkX2lkID0gbGNwdSArIGk7CisJCQljcHVtYXNrX3NldF9jcHUobGNwdSArIGksICZib29rLT5tYXNrKTsKKwkJCWNwdW1hc2tfc2V0X2NwdShsY3B1ICsgaSwgJnNvY2tldC0+bWFzayk7CisJCQlpZiAob25lX3NvY2tldF9wZXJfY3B1KQorCQkJCWNwdV90b3BvbG9neVtsY3B1ICsgaV0uc29ja2V0X2lkID0gcmNvcmU7CisJCQllbHNlCisJCQkJY3B1X3RvcG9sb2d5W2xjcHUgKyBpXS5zb2NrZXRfaWQgPSBzb2NrZXQtPmlkOworCQkJc21wX2NwdV9zZXRfcG9sYXJpemF0aW9uKGxjcHUgKyBpLCB0bF9jb3JlLT5wcCk7CiAJCX0KLQkJc21wX2NwdV9zZXRfcG9sYXJpemF0aW9uKGxjcHUsIHRsX2NwdS0+cHApOworCQlpZiAob25lX3NvY2tldF9wZXJfY3B1KQorCQkJc29ja2V0ID0gc29ja2V0LT5uZXh0OwogCX0KIAlyZXR1cm4gc29ja2V0OwogfQpAQCAtMTA4LDcgKzEyNiw3IEBACiBzdGF0aWMgdW5pb24gdG9wb2xvZ3lfZW50cnkgKm5leHRfdGxlKHVuaW9uIHRvcG9sb2d5X2VudHJ5ICp0bGUpCiB7CiAJaWYgKCF0bGUtPm5sKQotCQlyZXR1cm4gKHVuaW9uIHRvcG9sb2d5X2VudHJ5ICopKChzdHJ1Y3QgdG9wb2xvZ3lfY3B1ICopdGxlICsgMSk7CisJCXJldHVybiAodW5pb24gdG9wb2xvZ3lfZW50cnkgKikoKHN0cnVjdCB0b3BvbG9neV9jb3JlICopdGxlICsgMSk7CiAJcmV0dXJuICh1bmlvbiB0b3BvbG9neV9lbnRyeSAqKSgoc3RydWN0IHRvcG9sb2d5X2NvbnRhaW5lciAqKXRsZSArIDEpOwogfQogCkBAIC0yMzEsOSArMjQ5LDExIEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdG9wb2xvZ3lfbG9jaywgZmxhZ3MpOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJY3B1X3RvcG9sb2d5W2NwdV0udGhyZWFkX21hc2sgPSBjcHVfdGhyZWFkX21hcChjcHUpOwogCQljcHVfdG9wb2xvZ3lbY3B1XS5jb3JlX21hc2sgPSBjcHVfZ3JvdXBfbWFwKCZzb2NrZXRfaW5mbywgY3B1KTsKIAkJY3B1X3RvcG9sb2d5W2NwdV0uYm9va19tYXNrID0gY3B1X2dyb3VwX21hcCgmYm9va19pbmZvLCBjcHUpOwogCQlpZiAoIU1BQ0hJTkVfSEFTX1RPUE9MT0dZKSB7CisJCQljcHVfdG9wb2xvZ3lbY3B1XS50aHJlYWRfaWQgPSBjcHU7CiAJCQljcHVfdG9wb2xvZ3lbY3B1XS5jb3JlX2lkID0gY3B1OwogCQkJY3B1X3RvcG9sb2d5W2NwdV0uc29ja2V0X2lkID0gY3B1OwogCQkJY3B1X3RvcG9sb2d5W2NwdV0uYm9va19pZCA9IGNwdTsKQEAgLTQ0NSw2ICs0NjUsMTIgQEAKIAlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKCZjcHUtPmRldi5rb2JqLCAmdG9wb2xvZ3lfY3B1X2F0dHJfZ3JvdXApOwogfQogCitjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X3RocmVhZF9tYXNrKGludCBjcHUpCit7CisJcmV0dXJuICZjcHVfdG9wb2xvZ3lbY3B1XS50aHJlYWRfbWFzazsKK30KKworCiBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X2NvcmVncm91cF9tYXNrKGludCBjcHUpCiB7CiAJcmV0dXJuICZjcHVfdG9wb2xvZ3lbY3B1XS5jb3JlX21hc2s7CkBAIC00NTYsNiArNDgyLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzY2hlZF9kb21haW5fdG9wb2xvZ3lfbGV2ZWwgczM5MF90b3BvbG9neVtdID0geworCXsgY3B1X3RocmVhZF9tYXNrLCBjcHVfc210X2ZsYWdzLCBTRF9JTklUX05BTUUoU01UKSB9LAogCXsgY3B1X2NvcmVncm91cF9tYXNrLCBjcHVfY29yZV9mbGFncywgU0RfSU5JVF9OQU1FKE1DKSB9LAogCXsgY3B1X2Jvb2tfbWFzaywgU0RfSU5JVF9OQU1FKEJPT0spIH0sCiAJeyBjcHVfY3B1X21hc2ssIFNEX0lOSVRfTkFNRShESUUpIH0sCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMgYi9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMKaW5kZXggZTM0MTIyZTUuLmU1M2QzNTkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdnRpbWUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3Z0aW1lLmMKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlIDxhc20vY3B1dGltZS5oPgogI2luY2x1ZGUgPGFzbS92dGltZXIuaD4KICNpbmNsdWRlIDxhc20vdnRpbWUuaD4KKyNpbmNsdWRlIDxhc20vY3B1X21mLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiBzdGF0aWMgdm9pZCB2aXJ0X3RpbWVyX2V4cGlyZSh2b2lkKTsKIApAQCAtMjMsNiArMjUsMTAgQEAKIHN0YXRpYyBhdG9taWM2NF90IHZpcnRfdGltZXJfY3VycmVudDsKIHN0YXRpYyBhdG9taWM2NF90IHZpcnRfdGltZXJfZWxhcHNlZDsKIAorc3RhdGljIERFRklORV9QRVJfQ1BVKHU2NCwgbXRfY3ljbGVzWzMyXSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodTY0LCBtdF9zY2FsaW5nX211bHQpID0geyAxIH07CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodTY0LCBtdF9zY2FsaW5nX2RpdikgPSB7IDEgfTsKKwogc3RhdGljIGlubGluZSB1NjQgZ2V0X3Z0aW1lcih2b2lkKQogewogCXU2NCB0aW1lcjsKQEAgLTYxLDYgKzY3LDggQEAKIHsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpID0gdGFza190aHJlYWRfaW5mbyh0c2spOwogCXU2NCB0aW1lciwgY2xvY2ssIHVzZXIsIHN5c3RlbSwgc3RlYWw7CisJdTY0IHVzZXJfc2NhbGVkLCBzeXN0ZW1fc2NhbGVkOworCWludCBpOwogCiAJdGltZXIgPSBTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfdGltZXI7CiAJY2xvY2sgPSBTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfY2xvY2s7CkBAIC03NiwxNSArODQsNDkgQEAKIAlTMzkwX2xvd2NvcmUuc3lzdGVtX3RpbWVyICs9IHRpbWVyIC0gUzM5MF9sb3djb3JlLmxhc3RfdXBkYXRlX3RpbWVyOwogCVMzOTBfbG93Y29yZS5zdGVhbF90aW1lciArPSBTMzkwX2xvd2NvcmUubGFzdF91cGRhdGVfY2xvY2sgLSBjbG9jazsKIAorCS8qIERvIE1UIHV0aWxpemF0aW9uIGNhbGN1bGF0aW9uICovCisJaWYgKHNtcF9jcHVfbXRpZCkgeworCQl1NjQgY3ljbGVzX25ld1szMl0sICpjeWNsZXNfb2xkOworCQl1NjQgZGVsdGEsIG11bHQsIGRpdjsKKworCQljeWNsZXNfb2xkID0gdGhpc19jcHVfcHRyKG10X2N5Y2xlcyk7CisJCWlmIChzdGNjdG01KHNtcF9jcHVfbXRpZCArIDEsIGN5Y2xlc19uZXcpIDwgMikgeworCQkJbXVsdCA9IGRpdiA9IDA7CisJCQlmb3IgKGkgPSAwOyBpIDw9IHNtcF9jcHVfbXRpZDsgaSsrKSB7CisJCQkJZGVsdGEgPSBjeWNsZXNfbmV3W2ldIC0gY3ljbGVzX29sZFtpXTsKKwkJCQltdWx0ICs9IGRlbHRhOworCQkJCWRpdiArPSAoaSArIDEpICogZGVsdGE7CisJCQl9CisJCQlpZiAobXVsdCA+IDApIHsKKwkJCQkvKiBVcGRhdGUgc2NhbGluZyBmYWN0b3IgKi8KKwkJCQlfX3RoaXNfY3B1X3dyaXRlKG10X3NjYWxpbmdfbXVsdCwgbXVsdCk7CisJCQkJX190aGlzX2NwdV93cml0ZShtdF9zY2FsaW5nX2RpdiwgZGl2KTsKKwkJCQltZW1jcHkoY3ljbGVzX29sZCwgY3ljbGVzX25ldywKKwkJCQkgICAgICAgc2l6ZW9mKHU2NCkgKiAoc21wX2NwdV9tdGlkICsgMSkpOworCQkJfQorCQl9CisJfQorCiAJdXNlciA9IFMzOTBfbG93Y29yZS51c2VyX3RpbWVyIC0gdGktPnVzZXJfdGltZXI7CiAJUzM5MF9sb3djb3JlLnN0ZWFsX3RpbWVyIC09IHVzZXI7CiAJdGktPnVzZXJfdGltZXIgPSBTMzkwX2xvd2NvcmUudXNlcl90aW1lcjsKLQlhY2NvdW50X3VzZXJfdGltZSh0c2ssIHVzZXIsIHVzZXIpOwogCiAJc3lzdGVtID0gUzM5MF9sb3djb3JlLnN5c3RlbV90aW1lciAtIHRpLT5zeXN0ZW1fdGltZXI7CiAJUzM5MF9sb3djb3JlLnN0ZWFsX3RpbWVyIC09IHN5c3RlbTsKIAl0aS0+c3lzdGVtX3RpbWVyID0gUzM5MF9sb3djb3JlLnN5c3RlbV90aW1lcjsKLQlhY2NvdW50X3N5c3RlbV90aW1lKHRzaywgaGFyZGlycV9vZmZzZXQsIHN5c3RlbSwgc3lzdGVtKTsKKworCXVzZXJfc2NhbGVkID0gdXNlcjsKKwlzeXN0ZW1fc2NhbGVkID0gc3lzdGVtOworCS8qIERvIE1UIHV0aWxpemF0aW9uIHNjYWxpbmcgKi8KKwlpZiAoc21wX2NwdV9tdGlkKSB7CisJCXU2NCBtdWx0ID0gX190aGlzX2NwdV9yZWFkKG10X3NjYWxpbmdfbXVsdCk7CisJCXU2NCBkaXYgPSBfX3RoaXNfY3B1X3JlYWQobXRfc2NhbGluZ19kaXYpOworCisJCXVzZXJfc2NhbGVkID0gKHVzZXJfc2NhbGVkICogbXVsdCkgLyBkaXY7CisJCXN5c3RlbV9zY2FsZWQgPSAoc3lzdGVtX3NjYWxlZCAqIG11bHQpIC8gZGl2OworCX0KKwlhY2NvdW50X3VzZXJfdGltZSh0c2ssIHVzZXIsIHVzZXJfc2NhbGVkKTsKKwlhY2NvdW50X3N5c3RlbV90aW1lKHRzaywgaGFyZGlycV9vZmZzZXQsIHN5c3RlbSwgc3lzdGVtX3NjYWxlZCk7CiAKIAlzdGVhbCA9IFMzOTBfbG93Y29yZS5zdGVhbF90aW1lcjsKIAlpZiAoKHM2NCkgc3RlYWwgPiAwKSB7CkBAIC0xMjYsNyArMTY4LDcgQEAKIHZvaWQgdnRpbWVfYWNjb3VudF9pcnFfZW50ZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8odHNrKTsKLQl1NjQgdGltZXIsIHN5c3RlbTsKKwl1NjQgdGltZXIsIHN5c3RlbSwgc3lzdGVtX3NjYWxlZDsKIAogCXRpbWVyID0gUzM5MF9sb3djb3JlLmxhc3RfdXBkYXRlX3RpbWVyOwogCVMzOTBfbG93Y29yZS5sYXN0X3VwZGF0ZV90aW1lciA9IGdldF92dGltZXIoKTsKQEAgLTEzNSw3ICsxNzcsMTUgQEAKIAlzeXN0ZW0gPSBTMzkwX2xvd2NvcmUuc3lzdGVtX3RpbWVyIC0gdGktPnN5c3RlbV90aW1lcjsKIAlTMzkwX2xvd2NvcmUuc3RlYWxfdGltZXIgLT0gc3lzdGVtOwogCXRpLT5zeXN0ZW1fdGltZXIgPSBTMzkwX2xvd2NvcmUuc3lzdGVtX3RpbWVyOwotCWFjY291bnRfc3lzdGVtX3RpbWUodHNrLCAwLCBzeXN0ZW0sIHN5c3RlbSk7CisJc3lzdGVtX3NjYWxlZCA9IHN5c3RlbTsKKwkvKiBEbyBNVCB1dGlsaXphdGlvbiBzY2FsaW5nICovCisJaWYgKHNtcF9jcHVfbXRpZCkgeworCQl1NjQgbXVsdCA9IF9fdGhpc19jcHVfcmVhZChtdF9zY2FsaW5nX211bHQpOworCQl1NjQgZGl2ID0gX190aGlzX2NwdV9yZWFkKG10X3NjYWxpbmdfZGl2KTsKKworCQlzeXN0ZW1fc2NhbGVkID0gKHN5c3RlbV9zY2FsZWQgKiBtdWx0KSAvIGRpdjsKKwl9CisJYWNjb3VudF9zeXN0ZW1fdGltZSh0c2ssIDAsIHN5c3RlbSwgc3lzdGVtX3NjYWxlZCk7CiAKIAl2aXJ0X3RpbWVyX2ZvcndhcmQoc3lzdGVtKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vS2NvbmZpZyBiL2FyY2gvczM5MC9rdm0vS2NvbmZpZwppbmRleCA2NDZkYjljNC4uNWZjZTUyYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9rdm0vS2NvbmZpZwpAQCAtMjgsNiArMjgsNyBAQAogCXNlbGVjdCBIQVZFX0tWTV9JUlFDSElQCiAJc2VsZWN0IEhBVkVfS1ZNX0lSUUZECiAJc2VsZWN0IEhBVkVfS1ZNX0lSUV9ST1VUSU5HCisJc2VsZWN0IFNSQ1UKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGhvc3RpbmcgcGFyYXZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIHRoZSBTSUUKIAkgIHZpcnR1YWxpemF0aW9uIGNhcGFiaWxpdHkgb24gdGhlIG1haW5mcmFtZS4gVGhpcyBzaG91bGQgd29yawpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jIGIvYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jCmluZGV4IDAzNGEzNWEuLmQ2Yzk5OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvc3BpbmxvY2suYworKysgYi9hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMKQEAgLTEyLDcgKzEyLDE1IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLWludCBzcGluX3JldHJ5ID0gMTAwMDsKK2ludCBzcGluX3JldHJ5ID0gLTE7CisKK3N0YXRpYyBpbnQgX19pbml0IHNwaW5fcmV0cnlfaW5pdCh2b2lkKQoreworCWlmIChzcGluX3JldHJ5IDwgMCkKKwkJc3Bpbl9yZXRyeSA9IE1BQ0hJTkVfSEFTX0NBRCA/IDEwIDogMTAwMDsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X2luaXRjYWxsKHNwaW5fcmV0cnlfaW5pdCk7CiAKIC8qKgogICogc3Bpbl9yZXRyeT0gcGFyYW1ldGVyCkBAIC0yNCw2ICszMiwxMSBAQAogfQogX19zZXR1cCgic3Bpbl9yZXRyeT0iLCBzcGluX3JldHJ5X3NldHVwKTsKIAorc3RhdGljIGlubGluZSB2b2lkIF9yYXdfY29tcGFyZV9hbmRfZGVsYXkodW5zaWduZWQgaW50ICpsb2NrLCB1bnNpZ25lZCBpbnQgb2xkKQoreworCWFzbSgiLmluc24gcnN5LDB4ZWIwMDAwMDAwMDIyLCUwLDAsJTEiIDogOiAiZCIgKG9sZCksICJRIiAoKmxvY2spKTsKK30KKwogdm9pZCBhcmNoX3NwaW5fbG9ja193YWl0KGFyY2hfc3BpbmxvY2tfdCAqbHApCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IFNQSU5MT0NLX0xPQ0tWQUw7CkBAIC00Niw2ICs1OSw4IEBACiAJCS8qIExvb3AgZm9yIGEgd2hpbGUgb24gdGhlIGxvY2sgdmFsdWUuICovCiAJCWNvdW50ID0gc3Bpbl9yZXRyeTsKIAkJZG8geworCQkJaWYgKE1BQ0hJTkVfSEFTX0NBRCkKKwkJCQlfcmF3X2NvbXBhcmVfYW5kX2RlbGF5KCZscC0+bG9jaywgb3duZXIpOwogCQkJb3duZXIgPSBBQ0NFU1NfT05DRShscC0+bG9jayk7CiAJCX0gd2hpbGUgKG93bmVyICYmIGNvdW50LS0gPiAwKTsKIAkJaWYgKCFvd25lcikKQEAgLTg0LDYgKzk5LDggQEAKIAkJLyogTG9vcCBmb3IgYSB3aGlsZSBvbiB0aGUgbG9jayB2YWx1ZS4gKi8KIAkJY291bnQgPSBzcGluX3JldHJ5OwogCQlkbyB7CisJCQlpZiAoTUFDSElORV9IQVNfQ0FEKQorCQkJCV9yYXdfY29tcGFyZV9hbmRfZGVsYXkoJmxwLT5sb2NrLCBvd25lcik7CiAJCQlvd25lciA9IEFDQ0VTU19PTkNFKGxwLT5sb2NrKTsKIAkJfSB3aGlsZSAob3duZXIgJiYgY291bnQtLSA+IDApOwogCQlpZiAoIW93bmVyKQpAQCAtMTAwLDExICsxMTcsMTkgQEAKIAogaW50IGFyY2hfc3Bpbl90cnlsb2NrX3JldHJ5KGFyY2hfc3BpbmxvY2tfdCAqbHApCiB7CisJdW5zaWduZWQgaW50IGNwdSA9IFNQSU5MT0NLX0xPQ0tWQUw7CisJdW5zaWduZWQgaW50IG93bmVyOwogCWludCBjb3VudDsKIAotCWZvciAoY291bnQgPSBzcGluX3JldHJ5OyBjb3VudCA+IDA7IGNvdW50LS0pCi0JCWlmIChhcmNoX3NwaW5fdHJ5bG9ja19vbmNlKGxwKSkKLQkJCXJldHVybiAxOworCWZvciAoY291bnQgPSBzcGluX3JldHJ5OyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKwkJb3duZXIgPSBBQ0NFU1NfT05DRShscC0+bG9jayk7CisJCS8qIFRyeSB0byBnZXQgdGhlIGxvY2sgaWYgaXQgaXMgZnJlZS4gKi8KKwkJaWYgKCFvd25lcikgeworCQkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPmxvY2ssIDAsIGNwdSkpCisJCQkJcmV0dXJuIDE7CisJCX0gZWxzZSBpZiAoTUFDSElORV9IQVNfQ0FEKQorCQkJX3Jhd19jb21wYXJlX2FuZF9kZWxheSgmbHAtPmxvY2ssIG93bmVyKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGFyY2hfc3Bpbl90cnlsb2NrX3JldHJ5KTsKQEAgLTEyNiw4ICsxNTEsMTEgQEAKIAkJfQogCQlvbGQgPSBBQ0NFU1NfT05DRShydy0+bG9jayk7CiAJCW93bmVyID0gQUNDRVNTX09OQ0UocnctPm93bmVyKTsKLQkJaWYgKChpbnQpIG9sZCA8IDApCisJCWlmICgoaW50KSBvbGQgPCAwKSB7CisJCQlpZiAoTUFDSElORV9IQVNfQ0FEKQorCQkJCV9yYXdfY29tcGFyZV9hbmRfZGVsYXkoJnJ3LT5sb2NrLCBvbGQpOwogCQkJY29udGludWU7CisJCX0KIAkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmcnctPmxvY2ssIG9sZCwgb2xkICsgMSkpCiAJCQlyZXR1cm47CiAJfQpAQCAtMTQxLDggKzE2OSwxMSBAQAogCiAJd2hpbGUgKGNvdW50LS0gPiAwKSB7CiAJCW9sZCA9IEFDQ0VTU19PTkNFKHJ3LT5sb2NrKTsKLQkJaWYgKChpbnQpIG9sZCA8IDApCisJCWlmICgoaW50KSBvbGQgPCAwKSB7CisJCQlpZiAoTUFDSElORV9IQVNfQ0FEKQorCQkJCV9yYXdfY29tcGFyZV9hbmRfZGVsYXkoJnJ3LT5sb2NrLCBvbGQpOwogCQkJY29udGludWU7CisJCX0KIAkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmcnctPmxvY2ssIG9sZCwgb2xkICsgMSkpCiAJCQlyZXR1cm4gMTsKIAl9CkBAIC0xNzMsNiArMjA0LDggQEAKIAkJfQogCQlpZiAoKG9sZCAmIDB4N2ZmZmZmZmYpID09IDAgJiYgKGludCkgcHJldiA+PSAwKQogCQkJYnJlYWs7CisJCWlmIChNQUNISU5FX0hBU19DQUQpCisJCQlfcmF3X2NvbXBhcmVfYW5kX2RlbGF5KCZydy0+bG9jaywgb2xkKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKF9yYXdfd3JpdGVfbG9ja193YWl0KTsKQEAgLTIwMSw2ICsyMzQsOCBAQAogCQkJc21wX3JtYigpOwogCQlpZiAoKG9sZCAmIDB4N2ZmZmZmZmYpID09IDAgJiYgKGludCkgcHJldiA+PSAwKQogCQkJYnJlYWs7CisJCWlmIChNQUNISU5FX0hBU19DQUQpCisJCQlfcmF3X2NvbXBhcmVfYW5kX2RlbGF5KCZydy0+bG9jaywgb2xkKTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKF9yYXdfd3JpdGVfbG9ja193YWl0KTsKQEAgLTIxNCw4ICsyNDksMTEgQEAKIAogCXdoaWxlIChjb3VudC0tID4gMCkgewogCQlvbGQgPSBBQ0NFU1NfT05DRShydy0+bG9jayk7Ci0JCWlmIChvbGQpCisJCWlmIChvbGQpIHsKKwkJCWlmIChNQUNISU5FX0hBU19DQUQpCisJCQkJX3Jhd19jb21wYXJlX2FuZF9kZWxheSgmcnctPmxvY2ssIG9sZCk7CiAJCQljb250aW51ZTsKKwkJfQogCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZydy0+bG9jaywgMCwgMHg4MDAwMDAwMCkpCiAJCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCmluZGV4IDgxMTkzN2IuLjNmZjg2NTMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC0xNzEsNyArMTcxLDcgQEAKIAkJdGFibGUgPSB0YWJsZSArICgoYWRkcmVzcyA+PiAyMCkgJiAweDdmZik7CiAJCWlmIChiYWRfYWRkcmVzcyh0YWJsZSkpCiAJCQlnb3RvIGJhZDsKLQkJcHJfY29udChLRVJOX0NPTlQgIlM6JTAxNmx4ICIsICp0YWJsZSk7CisJCXByX2NvbnQoIlM6JTAxNmx4ICIsICp0YWJsZSk7CiAJCWlmICgqdGFibGUgJiAoX1NFR01FTlRfRU5UUllfSU5WQUxJRCB8IF9TRUdNRU5UX0VOVFJZX0xBUkdFKSkKIAkJCWdvdG8gb3V0OwogCQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopKCp0YWJsZSAmIF9TRUdNRU5UX0VOVFJZX09SSUdJTik7CkBAIC0yNjEsNyArMjYxLDcgQEAKIAkJcmV0dXJuOwogCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQogCQlyZXR1cm47Ci0JcHJpbnRrKEtFUk5fQUxFUlQgIlVzZXIgcHJvY2VzcyBmYXVsdDogaW50ZXJydXB0aW9uIGNvZGUgJTA0eCBpbGM6JWQiLAorCXByaW50ayhLRVJOX0FMRVJUICJVc2VyIHByb2Nlc3MgZmF1bHQ6IGludGVycnVwdGlvbiBjb2RlICUwNHggaWxjOiVkICIsCiAJICAgICAgIHJlZ3MtPmludF9jb2RlICYgMHhmZmZmLCByZWdzLT5pbnRfY29kZSA+PiAxNyk7CiAJcHJpbnRfdm1hX2FkZHIoS0VSTl9DT05UICJpbiAiLCByZWdzLT5wc3cuYWRkciAmIFBTV19BRERSX0lOU04pOwogCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CkBAIC0zNzQsNiArMzc0LDEyIEBACiAJCQkJZG9fbm9fY29udGV4dChyZWdzKTsKIAkJCWVsc2UKIAkJCQlwYWdlZmF1bHRfb3V0X29mX21lbW9yeSgpOworCQl9IGVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHU0VHVikgeworCQkJLyogS2VybmVsIG1vZGU/IEhhbmRsZSBleGNlcHRpb25zIG9yIGRpZSAqLworCQkJaWYgKCF1c2VyX21vZGUocmVncykpCisJCQkJZG9fbm9fY29udGV4dChyZWdzKTsKKwkJCWVsc2UKKwkJCQlkb19zaWdzZWd2KHJlZ3MsIFNFR1ZfTUFQRVJSKTsKIAkJfSBlbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykgewogCQkJLyogS2VybmVsIG1vZGU/IEhhbmRsZSBleGNlcHRpb25zIG9yIGRpZSAqLwogCQkJaWYgKCF1c2VyX21vZGUocmVncykpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZ3VwLmMgYi9hcmNoL3MzOTAvbW0vZ3VwLmMKaW5kZXggNjM5ZmNlNDYuLjVjNTg2YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9ndXAuYworKysgYi9hcmNoL3MzOTAvbW0vZ3VwLmMKQEAgLTIzNSwxMCArMjM1LDggQEAKIAkvKiBUcnkgdG8gZ2V0IHRoZSByZW1haW5pbmcgcGFnZXMgd2l0aCBnZXRfdXNlcl9wYWdlcyAqLwogCXN0YXJ0ICs9IG5yIDw8IFBBR0VfU0hJRlQ7CiAJcGFnZXMgKz0gbnI7Ci0JZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCBzdGFydCwKLQkJCSAgICAgbnJfcGFnZXMgLSBuciwgd3JpdGUsIDAsIHBhZ2VzLCBOVUxMKTsKLQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXJldCA9IGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKGN1cnJlbnQsIG1tLCBzdGFydCwKKwkJCSAgICAgbnJfcGFnZXMgLSBuciwgd3JpdGUsIDAsIHBhZ2VzKTsKIAkvKiBIYXZlIHRvIGJlIGEgYml0IGNhcmVmdWwgd2l0aCByZXR1cm4gdmFsdWVzICovCiAJaWYgKG5yID4gMCkKIAkJcmV0ID0gKHJldCA8IDApID8gbnIgOiByZXQgKyBucjsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggM2M4MGQyZS4uMjEwZmZlZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9zMzkwL21tL2h1Z2V0bGJwYWdlLmMKQEAgLTE5MiwxMiArMTkyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX2FkZHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJCSAgICAgIGludCB3cml0ZSkKLXsKLQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLX0KLQogaW50IHBtZF9odWdlKHBtZF90IHBtZCkKIHsKIAlpZiAoIU1BQ0hJTkVfSEFTX0hQQUdFKQpAQCAtMjEwLDE3ICsyMDQsMyBAQAogewogCXJldHVybiAwOwogfQotCi1zdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkgICAgIHBtZF90ICpwbWRwLCBpbnQgd3JpdGUpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0KLQlpZiAoIU1BQ0hJTkVfSEFTX0hQQUdFKQotCQlyZXR1cm4gTlVMTDsKLQotCXBhZ2UgPSBwbWRfcGFnZSgqcG1kcCk7Ci0JaWYgKHBhZ2UpCi0JCXBhZ2UgKz0gKChhZGRyZXNzICYgfkhQQUdFX01BU0spID4+IFBBR0VfU0hJRlQpOwotCXJldHVybiBwYWdlOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggYzcyMzVlMC4uZDM1YjE1MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuYworKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCkBAIC03MSwxMyArNzEsMTYgQEAKIAkJYnJlYWs7CiAJY2FzZSAweDI4Mjc6CS8qIHpFQzEyICovCiAJY2FzZSAweDI4Mjg6CS8qIHpFQzEyICovCi0JZGVmYXVsdDoKIAkJb3JkZXIgPSA1OwogCQlicmVhazsKKwljYXNlIDB4Mjk2NDoJLyogejEzICovCisJZGVmYXVsdDoKKwkJb3JkZXIgPSA3OworCQlicmVhazsKIAl9CiAJLyogTGltaXQgbnVtYmVyIG9mIGVtcHR5IHplcm8gcGFnZXMgZm9yIHNtYWxsIG1lbW9yeSBzaXplcyAqLwotCWlmIChvcmRlciA+IDIgJiYgdG90YWxyYW1fcGFnZXMgPD0gMTYzODQpCi0JCW9yZGVyID0gMjsKKwl3aGlsZSAob3JkZXIgPiAyICYmICh0b3RhbHJhbV9wYWdlcyA+PiAxMCkgPCAoMVVMIDw8IG9yZGVyKSkKKwkJb3JkZXItLTsKIAogCWVtcHR5X3plcm9fcGFnZSA9IF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sIG9yZGVyKTsKIAlpZiAoIWVtcHR5X3plcm9fcGFnZSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9tbWFwLmMgYi9hcmNoL3MzOTAvbW0vbW1hcC5jCmluZGV4IDliNDM2YzIuLmQwMDhmNjM4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vbW1hcC5jCisrKyBiL2FyY2gvczM5MC9tbS9tbWFwLmMKQEAgLTI4LDggKzI4LDEyIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogCit1bnNpZ25lZCBsb25nIG1tYXBfcm5kX21hc2s7Cit1bnNpZ25lZCBsb25nIG1tYXBfYWxpZ25fbWFzazsKKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RhY2tfbWF4cmFuZG9tX3NpemUodm9pZCkKIHsKIAlpZiAoIShjdXJyZW50LT5mbGFncyAmIFBGX1JBTkRPTUlaRSkpCkBAIC02MCw4ICs2NCwxMCBAQAogewogCWlmICghKGN1cnJlbnQtPmZsYWdzICYgUEZfUkFORE9NSVpFKSkKIAkJcmV0dXJuIDA7Ci0JLyogOE1CIHJhbmRvbWl6YXRpb24gZm9yIG1tYXBfYmFzZSAqLwotCXJldHVybiAoZ2V0X3JhbmRvbV9pbnQoKSAmIDB4N2ZmVUwpIDw8IFBBR0VfU0hJRlQ7CisJaWYgKGlzXzMyYml0X3Rhc2soKSkKKwkJcmV0dXJuIChnZXRfcmFuZG9tX2ludCgpICYgMHg3ZmYpIDw8IFBBR0VfU0hJRlQ7CisJZWxzZQorCQlyZXR1cm4gKGdldF9yYW5kb21faW50KCkgJiBtbWFwX3JuZF9tYXNrKSA8PCBQQUdFX1NISUZUOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtbWFwX2Jhc2VfbGVnYWN5KHZvaWQpCkBAIC04MSw2ICs4NywxMDYgQEAKIAlyZXR1cm4gU1RBQ0tfVE9QIC0gc3RhY2tfbWF4cmFuZG9tX3NpemUoKSAtIG1tYXBfcm5kKCkgLSBnYXA7CiB9CiAKK3Vuc2lnbmVkIGxvbmcKK2FyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvIGluZm87CisJaW50IGRvX2NvbG9yX2FsaWduOworCisJaWYgKGxlbiA+IFRBU0tfU0laRSAtIG1tYXBfbWluX2FkZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGZsYWdzICYgTUFQX0ZJWEVEKQorCQlyZXR1cm4gYWRkcjsKKworCWlmIChhZGRyKSB7CisJCWFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpOworCQl2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7CisJCWlmIChUQVNLX1NJWkUgLSBsZW4gPj0gYWRkciAmJiBhZGRyID49IG1tYXBfbWluX2FkZHIgJiYKKwkJICAgICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1hLT52bV9zdGFydCkpCisJCQlyZXR1cm4gYWRkcjsKKwl9CisKKwlkb19jb2xvcl9hbGlnbiA9IDA7CisJaWYgKGZpbHAgfHwgKGZsYWdzICYgTUFQX1NIQVJFRCkpCisJCWRvX2NvbG9yX2FsaWduID0gIWlzXzMyYml0X3Rhc2soKTsKKworCWluZm8uZmxhZ3MgPSAwOworCWluZm8ubGVuZ3RoID0gbGVuOworCWluZm8ubG93X2xpbWl0ID0gbW0tPm1tYXBfYmFzZTsKKwlpbmZvLmhpZ2hfbGltaXQgPSBUQVNLX1NJWkU7CisJaW5mby5hbGlnbl9tYXNrID0gZG9fY29sb3JfYWxpZ24gPyAobW1hcF9hbGlnbl9tYXNrIDw8IFBBR0VfU0hJRlQpIDogMDsKKwlpbmZvLmFsaWduX29mZnNldCA9IHBnb2ZmIDw8IFBBR0VfU0hJRlQ7CisJcmV0dXJuIHZtX3VubWFwcGVkX2FyZWEoJmluZm8pOworfQorCit1bnNpZ25lZCBsb25nCithcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IHVuc2lnbmVkIGxvbmcgYWRkcjAsCisJCQkgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbGVuLCBjb25zdCB1bnNpZ25lZCBsb25nIHBnb2ZmLAorCQkJICBjb25zdCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CisJdW5zaWduZWQgbG9uZyBhZGRyID0gYWRkcjA7CisJc3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvOworCWludCBkb19jb2xvcl9hbGlnbjsKKworCS8qIHJlcXVlc3RlZCBsZW5ndGggdG9vIGJpZyBmb3IgZW50aXJlIGFkZHJlc3Mgc3BhY2UgKi8KKwlpZiAobGVuID4gVEFTS19TSVpFIC0gbW1hcF9taW5fYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoZmxhZ3MgJiBNQVBfRklYRUQpCisJCXJldHVybiBhZGRyOworCisJLyogcmVxdWVzdGluZyBhIHNwZWNpZmljIGFkZHJlc3MgKi8KKwlpZiAoYWRkcikgeworCQlhZGRyID0gUEFHRV9BTElHTihhZGRyKTsKKwkJdm1hID0gZmluZF92bWEobW0sIGFkZHIpOworCQlpZiAoVEFTS19TSVpFIC0gbGVuID49IGFkZHIgJiYgYWRkciA+PSBtbWFwX21pbl9hZGRyICYmCisJCQkJKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkKKwkJCXJldHVybiBhZGRyOworCX0KKworCWRvX2NvbG9yX2FsaWduID0gMDsKKwlpZiAoZmlscCB8fCAoZmxhZ3MgJiBNQVBfU0hBUkVEKSkKKwkJZG9fY29sb3JfYWxpZ24gPSAhaXNfMzJiaXRfdGFzaygpOworCisJaW5mby5mbGFncyA9IFZNX1VOTUFQUEVEX0FSRUFfVE9QRE9XTjsKKwlpbmZvLmxlbmd0aCA9IGxlbjsKKwlpbmZvLmxvd19saW1pdCA9IG1heChQQUdFX1NJWkUsIG1tYXBfbWluX2FkZHIpOworCWluZm8uaGlnaF9saW1pdCA9IG1tLT5tbWFwX2Jhc2U7CisJaW5mby5hbGlnbl9tYXNrID0gZG9fY29sb3JfYWxpZ24gPyAobW1hcF9hbGlnbl9tYXNrIDw8IFBBR0VfU0hJRlQpIDogMDsKKwlpbmZvLmFsaWduX29mZnNldCA9IHBnb2ZmIDw8IFBBR0VfU0hJRlQ7CisJYWRkciA9IHZtX3VubWFwcGVkX2FyZWEoJmluZm8pOworCisJLyoKKwkgKiBBIGZhaWxlZCBtbWFwKCkgdmVyeSBsaWtlbHkgY2F1c2VzIGFwcGxpY2F0aW9uIGZhaWx1cmUsCisJICogc28gZmFsbCBiYWNrIHRvIHRoZSBib3R0b20tdXAgZnVuY3Rpb24gaGVyZS4gVGhpcyBzY2VuYXJpbworCSAqIGNhbiBoYXBwZW4gd2l0aCBsYXJnZSBzdGFjayBsaW1pdHMgYW5kIGxhcmdlIG1tYXAoKQorCSAqIGFsbG9jYXRpb25zLgorCSAqLworCWlmIChhZGRyICYgflBBR0VfTUFTSykgeworCQlWTV9CVUdfT04oYWRkciAhPSAtRU5PTUVNKTsKKwkJaW5mby5mbGFncyA9IDA7CisJCWluZm8ubG93X2xpbWl0ID0gVEFTS19VTk1BUFBFRF9CQVNFOworCQlpbmZvLmhpZ2hfbGltaXQgPSBUQVNLX1NJWkU7CisJCWFkZHIgPSB2bV91bm1hcHBlZF9hcmVhKCZpbmZvKTsKKwl9CisKKwlyZXR1cm4gYWRkcjsKK30KKwordW5zaWduZWQgbG9uZyByYW5kb21pemVfZXRfZHluKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBiYXNlOworCisJYmFzZSA9IChTVEFDS19UT1AgLyAzICogMikgJiAofm1tYXBfYWxpZ25fbWFzayA8PCBQQUdFX1NISUZUKTsKKwlyZXR1cm4gYmFzZSArIG1tYXBfcm5kKCk7Cit9CisKICNpZm5kZWYgQ09ORklHXzY0QklUCiAKIC8qCkBAIC0xNzcsNCArMjgzLDM2IEBACiAJfQogfQogCitzdGF0aWMgaW50IF9faW5pdCBzZXR1cF9tbWFwX3JuZCh2b2lkKQoreworCXN0cnVjdCBjcHVpZCBjcHVfaWQ7CisKKwlnZXRfY3B1X2lkKCZjcHVfaWQpOworCXN3aXRjaCAoY3B1X2lkLm1hY2hpbmUpIHsKKwljYXNlIDB4OTY3MjoKKwljYXNlIDB4MjA2NDoKKwljYXNlIDB4MjA2NjoKKwljYXNlIDB4MjA4NDoKKwljYXNlIDB4MjA4NjoKKwljYXNlIDB4MjA5NDoKKwljYXNlIDB4MjA5NjoKKwljYXNlIDB4MjA5NzoKKwljYXNlIDB4MjA5ODoKKwljYXNlIDB4MjgxNzoKKwljYXNlIDB4MjgxODoKKwljYXNlIDB4MjgyNzoKKwljYXNlIDB4MjgyODoKKwkJbW1hcF9ybmRfbWFzayA9IDB4N2ZmVUw7CisJCW1tYXBfYWxpZ25fbWFzayA9IDBVTDsKKwkJYnJlYWs7CisJY2FzZSAweDI5NjQ6CS8qIHoxMyAqLworCWRlZmF1bHQ6CisJCW1tYXBfcm5kX21hc2sgPSAweDNmZjgwVUw7CisJCW1tYXBfYWxpZ25fbWFzayA9IDB4N2ZVTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorZWFybHlfaW5pdGNhbGwoc2V0dXBfbW1hcF9ybmQpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMgYi9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCmluZGV4IDNjZjhjYzAuLmIyYzE1NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwpAQCAtNTI3LDcgKzUyNyw3IEBACiAJCXRhYmxlICs9IChnYWRkciA+PiA1MykgJiAweDdmZjsKIAkJaWYgKCgqdGFibGUgJiBfUkVHSU9OX0VOVFJZX0lOVkFMSUQpICYmCiAJCSAgICBnbWFwX2FsbG9jX3RhYmxlKGdtYXAsIHRhYmxlLCBfUkVHSU9OMl9FTlRSWV9FTVBUWSwKLQkJCQkgICAgIGdhZGRyICYgMHhmZmUwMDAwMDAwMDAwMDAwKSkKKwkJCQkgICAgIGdhZGRyICYgMHhmZmUwMDAwMDAwMDAwMDAwVUwpKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXRhYmxlID0gKHVuc2lnbmVkIGxvbmcgKikoKnRhYmxlICYgX1JFR0lPTl9FTlRSWV9PUklHSU4pOwogCX0KQEAgLTUzNSw3ICs1MzUsNyBAQAogCQl0YWJsZSArPSAoZ2FkZHIgPj4gNDIpICYgMHg3ZmY7CiAJCWlmICgoKnRhYmxlICYgX1JFR0lPTl9FTlRSWV9JTlZBTElEKSAmJgogCQkgICAgZ21hcF9hbGxvY190YWJsZShnbWFwLCB0YWJsZSwgX1JFR0lPTjNfRU5UUllfRU1QVFksCi0JCQkJICAgICBnYWRkciAmIDB4ZmZmZmZjMDAwMDAwMDAwMCkpCisJCQkJICAgICBnYWRkciAmIDB4ZmZmZmZjMDAwMDAwMDAwMFVMKSkKIAkJCXJldHVybiAtRU5PTUVNOwogCQl0YWJsZSA9ICh1bnNpZ25lZCBsb25nICopKCp0YWJsZSAmIF9SRUdJT05fRU5UUllfT1JJR0lOKTsKIAl9CkBAIC01NDMsNyArNTQzLDcgQEAKIAkJdGFibGUgKz0gKGdhZGRyID4+IDMxKSAmIDB4N2ZmOwogCQlpZiAoKCp0YWJsZSAmIF9SRUdJT05fRU5UUllfSU5WQUxJRCkgJiYKIAkJICAgIGdtYXBfYWxsb2NfdGFibGUoZ21hcCwgdGFibGUsIF9TRUdNRU5UX0VOVFJZX0VNUFRZLAotCQkJCSAgICAgZ2FkZHIgJiAweGZmZmZmZmZmODAwMDAwMDApKQorCQkJCSAgICAgZ2FkZHIgJiAweGZmZmZmZmZmODAwMDAwMDBVTCkpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJdGFibGUgPSAodW5zaWduZWQgbG9uZyAqKSgqdGFibGUgJiBfUkVHSU9OX0VOVFJZX09SSUdJTik7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jIGIvYXJjaC9zMzkwL3BjaS9wY2lfbW1pby5jCmluZGV4IDYyYzVlYTYuLjhhYTI3MWIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9wY2kvcGNpX21taW8uYworKysgYi9hcmNoL3MzOTAvcGNpL3BjaV9tbWlvLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAlyZXQgPSBnZXRfcGZuKG1taW9fYWRkciwgVk1fV1JJVEUsICZwZm4pOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwotCWlvX2FkZHIgPSAodm9pZCAqKSgocGZuIDw8IFBBR0VfU0hJRlQpIHwgKG1taW9fYWRkciAmIH5QQUdFX01BU0spKTsKKwlpb19hZGRyID0gKHZvaWQgX19pb21lbSAqKSgocGZuIDw8IFBBR0VfU0hJRlQpIHwgKG1taW9fYWRkciAmIH5QQUdFX01BU0spKTsKIAogCXJldCA9IC1FRkFVTFQ7CiAJaWYgKCh1bnNpZ25lZCBsb25nKSBpb19hZGRyIDwgWlBDSV9JT01BUF9BRERSX0JBU0UpCkBAIC05Niw3ICs5Niw3IEBACiAJcmV0ID0gZ2V0X3BmbihtbWlvX2FkZHIsIFZNX1JFQUQsICZwZm4pOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwotCWlvX2FkZHIgPSAodm9pZCAqKSgocGZuIDw8IFBBR0VfU0hJRlQpIHwgKG1taW9fYWRkciAmIH5QQUdFX01BU0spKTsKKwlpb19hZGRyID0gKHZvaWQgX19pb21lbSAqKSgocGZuIDw8IFBBR0VfU0hJRlQpIHwgKG1taW9fYWRkciAmIH5QQUdFX01BU0spKTsKIAogCXJldCA9IC1FRkFVTFQ7CiAJaWYgKCh1bnNpZ25lZCBsb25nKSBpb19hZGRyIDwgWlBDSV9JT01BUF9BRERSX0JBU0UpCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLWJpdHMuaAppbmRleCA3ZDY1YTk2Li4wZTVjNmY0IDEwMDY0NAotLS0gYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3BndGFibGUtYml0cy5oCisrKyBiL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vcGd0YWJsZS1iaXRzLmgKQEAgLTYsNyArNiw2IEBACiAjZGVmaW5lIF9QQUdFX1dSSVRFCQkJKDE8PDcpCS8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCiAjZGVmaW5lIF9QQUdFX1BSRVNFTlQJCQkoMTw8OSkJLyogaW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KICNkZWZpbmUgX1BBR0VfTU9ESUZJRUQJCQkoMTw8MTApCS8qIGltcGxlbWVudGVkIGluIHNvZnR3YXJlICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJCQkoMTw8MTApCiAKICNkZWZpbmUgX1BBR0VfR0xPQkFMCQkJKDE8PDApCiAjZGVmaW5lIF9QQUdFX1ZBTElECQkJKDE8PDEpCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGRiOTZhZDkuLjA1NTNlNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIFBUUlNfUEVSX1BURQkxMDI0CiAKICNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJKDB4ODAwMDAwMDBVTC9QR0RJUl9TSVpFKQotI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAorI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMFVMCiAKICNkZWZpbmUgVk1BTExPQ19TVEFSVAkJKDB4YzAwMDAwMDBVTCkKIApAQCAtOTAsMTUgKzkwLDYgQEAKIAkoKHB0ZV90ICopcGFnZV9hZGRyZXNzKHBtZF9wYWdlKCooZGlyKSkpICsgX19wdGVfb2Zmc2V0KGFkZHJlc3MpKQogI2RlZmluZSBwdGVfdW5tYXAocHRlKSAoKHZvaWQpKHB0ZSkpCiAKLS8qCi0gKiBCaXRzIDkoX1BBR0VfUFJFU0VOVCkgYW5kIDEwKF9QQUdFX0ZJTEUpYXJlIHRha2VuLAotICogc3BsaXQgdXAgMzAgYml0cyBvZiBvZmZzZXQgaW50byB0aGlzIHJhbmdlOgotICovCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCTMwCi0jZGVmaW5lIHB0ZV90b19wZ29mZihfcHRlKQkJXAotCSgoKF9wdGUpLnB0ZSAmIDB4MWZmKSB8ICgoKF9wdGUpLnB0ZSA+PiAxMSkgPDwgOSkpCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCQlcCi0JKChwdGVfdCkgeygob2ZmKSAmIDB4MWZmKSB8ICgoKG9mZikgPj4gOSkgPDwgMTEpIHwgX1BBR0VfRklMRX0pCiAjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCQlcCiAJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSl9KQogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJKChwdGVfdCkgeyh4KS52YWx9KQpAQCAtMTY5LDggKzE2MCw4IEBACiB9CiAKICNkZWZpbmUgX19zd3BfdHlwZSh4KQkJKCh4KS52YWwgJiAweDFmKQotI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkgCSgoeCkudmFsID4+IDExKQotI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmZzZXQpICgoc3dwX2VudHJ5X3Qpeyh0eXBlKSB8ICgob2Zmc2V0KSA8PCAxMSl9KQorI2RlZmluZSBfX3N3cF9vZmZzZXQoeCkgCSgoeCkudmFsID4+IDEwKQorI2RlZmluZSBfX3N3cF9lbnRyeSh0eXBlLCBvZmZzZXQpICgoc3dwX2VudHJ5X3Qpeyh0eXBlKSB8ICgob2Zmc2V0KSA8PCAxMCl9KQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBlbXB0eV96ZXJvX3BhZ2U7CiBleHRlcm4gdW5zaWduZWQgbG9uZyB6ZXJvX3BhZ2VfbWFzazsKQEAgLTE5OCwxMSArMTg5LDYgQEAKIAlyZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfQUNDRVNTRUQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRTsKLX0KLQogI2RlZmluZSBwdGVfc3BlY2lhbChwdGUpCSgwKQogCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zY29yZS9tbS9mYXVsdC5jIGIvYXJjaC9zY29yZS9tbS9mYXVsdC5jCmluZGV4IDUyMjM4OTgzLi42ODYwYmViIDEwMDY0NAotLS0gYS9hcmNoL3Njb3JlL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zY29yZS9tbS9mYXVsdC5jCkBAIC0xMTQsNiArMTE0LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCAwZjA5ZjUyLi5lYjRlZjI3IDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogY29uZmlnIFNVUEVSSAogCWRlZl9ib29sIHkKIAlzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX1BDX1BBUlBPUlQKLQlzZWxlY3QgRVhQRVJUCisJc2VsZWN0IEhBVkVfUEFUQV9QTEFURk9STQogCXNlbGVjdCBDTEtERVZfTE9PS1VQCiAJc2VsZWN0IEhBVkVfSURFIGlmIEhBU19JT1BPUlRfTUFQCiAJc2VsZWN0IEhBVkVfTUVNQkxPQ0sKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzM0My9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtc2UvNzM0My9pcnEuYwppbmRleCA3NjQ2YmYwLi4xMDg3ZGJhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzczNDMvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83MzQzL2lycS5jCkBAIC0xNCw5ICsxNCw2IEBACiAjZGVmaW5lIERSVl9OQU1FICJTRTczNDMtRlBHQSIKICNkZWZpbmUgcHJfZm10KGZtdCkgRFJWX05BTUUgIjogIiBmbXQKIAotI2RlZmluZSBpcnFfcmVnX3JlYWRsCWlvcmVhZDE2Ci0jZGVmaW5lIGlycV9yZWdfd3JpdGVsCWlvd3JpdGUxNgotCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL2lycS5jCmluZGV4IGY1ZTJhZjFiLi4wMGU2OTkyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLXNlLzc3MjIvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1zZS83NzIyL2lycS5jCkBAIC0xMSw5ICsxMSw2IEBACiAjZGVmaW5lIERSVl9OQU1FICJTRTc3MjItRlBHQSIKICNkZWZpbmUgcHJfZm10KGZtdCkgRFJWX05BTUUgIjogIiBmbXQKIAotI2RlZmluZSBpcnFfcmVnX3JlYWRsCWlvcmVhZDE2Ci0jZGVmaW5lIGlycV9yZWdfd3JpdGVsCWlvd3JpdGUxNgotCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBjZjQzNGM2Li44OWM1MTNhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNjIsNyArNjIsNyBAQAogLyogRW50cmllcyBwZXIgbGV2ZWwgKi8KICNkZWZpbmUgUFRSU19QRVJfUFRFCShQQUdFX1NJWkUgLyAoMSA8PCBQVEVfTUFHTklUVURFKSkKIAotI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAorI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMFVMCiAKICNkZWZpbmUgUEhZU19BRERSX01BU0syOQkJMHgxZmZmZmZmZgogI2RlZmluZSBQSFlTX0FERFJfTUFTSzMyCQkweGZmZmZmZmZmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCmluZGV4IDBiY2UzZDguLmM2NDZlNTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCkBAIC0yNiw4ICsyNiw2IEBACiAgKiAgIGFuZCB0aW1pbmcgY29udHJvbCB3aGljaCAodG9nZXRoZXIgd2l0aCBiaXQgMCkgYXJlIG1vdmVkIGludG8gdGhlCiAgKiAgIG9sZC1zdHlsZSBQVEVBIG9uIHRoZSBwYXJ0cyB0aGF0IHN1cHBvcnQgaXQuCiAgKgotICogWFhYOiBMZWF2ZSB0aGUgX1BBR0VfRklMRSBhbmQgX1BBR0VfV1Qgb3ZlcmhhdWwgZm9yIGEgcmFpbnkgZGF5LgotICoKICAqIFNILVgyIE1NVXMgYW5kIGV4dGVuZGVkIFBURXMKICAqCiAgKiBTSC1YMiBzdXBwb3J0cyBhbiBleHRlbmRlZCBtb2RlIFRMQiB3aXRoIHNwbGl0IGRhdGEgYXJyYXlzIGR1ZSB0byB0aGUKQEAgLTUxLDcgKzQ5LDYgQEAKICNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDEwMAkJLyogVi1iaXQgICA6IHBhZ2UgaXMgdmFsaWQgKi8KICNkZWZpbmUgX1BBR0VfUFJPVE5PTkUJMHgyMDAJCS8qIHNvZnR3YXJlOiBpZiBub3QgcHJlc2VudCAgKi8KICNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHg0MDAJCS8qIHNvZnR3YXJlOiBwYWdlIHJlZmVyZW5jZWQgKi8KLSNkZWZpbmUgX1BBR0VfRklMRQlfUEFHRV9XVAkvKiBzb2Z0d2FyZTogcGFnZWNhY2hlIG9yIHN3YXA/ICovCiAjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHg4MDAJCS8qIHNvZnR3YXJlOiBzcGVjaWFsIHBhZ2UgKi8KIAogI2RlZmluZSBfUEFHRV9TWl9NQVNLCShfUEFHRV9TWjAgfCBfUEFHRV9TWjEpCkBAIC0xMDUsMTQgKzEwMiwxMyBAQAogLyogTWFzayB3aGljaCBkcm9wcyB1bnVzZWQgYml0cyBmcm9tIHRoZSBQVEVMIHZhbHVlICovCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykKICNkZWZpbmUgX1BBR0VfQ0xFQVJfRkxBR1MJKF9QQUdFX1BST1ROT05FIHwgX1BBR0VfQUNDRVNTRUR8IFwKLQkJCQkgX1BBR0VfRklMRQl8IF9QQUdFX1NaMQl8IFwKLQkJCQkgX1BBR0VfSFdfU0hBUkVEKQorCQkJCSAgX1BBR0VfU1oxCXwgX1BBR0VfSFdfU0hBUkVEKQogI2VsaWYgZGVmaW5lZChDT05GSUdfWDJUTEIpCiAvKiBHZXQgcmlkIG9mIHRoZSBsZWdhY3kgUFIvU1ogYml0cyB3aGVuIHVzaW5nIGV4dGVuZGVkIG1vZGUgKi8KICNkZWZpbmUgX1BBR0VfQ0xFQVJfRkxBR1MJKF9QQUdFX1BST1ROT05FIHwgX1BBR0VfQUNDRVNTRUQgfCBcCi0JCQkJIF9QQUdFX0ZJTEUgfCBfUEFHRV9QUl9NQVNLIHwgX1BBR0VfU1pfTUFTSykKKwkJCQkgX1BBR0VfUFJfTUFTSyB8IF9QQUdFX1NaX01BU0spCiAjZWxzZQotI2RlZmluZSBfUEFHRV9DTEVBUl9GTEFHUwkoX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0ZJTEUpCisjZGVmaW5lIF9QQUdFX0NMRUFSX0ZMQUdTCShfUEFHRV9QUk9UTk9ORSB8IF9QQUdFX0FDQ0VTU0VEKQogI2VuZGlmCiAKICNkZWZpbmUgX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSwkocGh5c19hZGRyX21hc2soKSAmIH4oX1BBR0VfQ0xFQVJfRkxBR1MpKQpAQCAtMzQzLDcgKzMzOSw2IEBACiAjZGVmaW5lIHB0ZV9ub3RfcHJlc2VudChwdGUpCSghKChwdGUpLnB0ZV9sb3cgJiBfUEFHRV9QUkVTRU5UKSkKICNkZWZpbmUgcHRlX2RpcnR5KHB0ZSkJCSgocHRlKS5wdGVfbG93ICYgX1BBR0VfRElSVFkpCiAjZGVmaW5lIHB0ZV95b3VuZyhwdGUpCQkoKHB0ZSkucHRlX2xvdyAmIF9QQUdFX0FDQ0VTU0VEKQotI2RlZmluZSBwdGVfZmlsZShwdGUpCQkoKHB0ZSkucHRlX2xvdyAmIF9QQUdFX0ZJTEUpCiAjZGVmaW5lIHB0ZV9zcGVjaWFsKHB0ZSkJKChwdGUpLnB0ZV9sb3cgJiBfUEFHRV9TUEVDSUFMKQogCiAjaWZkZWYgQ09ORklHX1gyVExCCkBAIC00NDUsNyArNDQwLDYgQEAKICAqIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkKICAqCiAgKiBDb25zdHJhaW50czoKLSAqCV9QQUdFX0ZJTEUgYXQgYml0IDAKICAqCV9QQUdFX1BSRVNFTlQgYXQgYml0IDgKICAqCV9QQUdFX1BST1ROT05FIGF0IGJpdCA5CiAgKgpAQCAtNDUzLDkgKzQ0Nyw3IEBACiAgKiBzd2FwIG9mZnNldCBpbnRvIGJpdHMgMTA6MzAuIEZvciB0aGUgNjQtYml0IFBURSBjYXNlLCB3ZSBrZWVwIHRoZQogICogcHJlc2VydmVkIGJpdHMgaW4gdGhlIGxvdyAzMi1iaXRzIGFuZCB1c2UgdGhlIHVwcGVyIDMyIGFzIHRoZSBzd2FwCiAgKiBvZmZzZXQgKGFsb25nIHdpdGggYSA1LWJpdCB0eXBlKSwgZm9sbG93aW5nIHRoZSBzYW1lIGFwcHJvYWNoIGFzIHg4NgotICogUEFFLiBUaGlzIGtlZXBzIHRoZSBsb2dpYyBxdWl0ZSBzaW1wbGUsIGFuZCBhbGxvd3MgZm9yIGEgZnVsbCAzMgotICogUFRFX0ZJTEVfTUFYX0JJVFMsIGFzIG9wcG9zZWQgdG8gdGhlIDI5LWJpdHMgd2UncmUgY29uc3RyYWluZWQgd2l0aAotICogaW4gdGhlIHB0ZV9sb3cgY2FzZS4KKyAqIFBBRS4gVGhpcyBrZWVwcyB0aGUgbG9naWMgcXVpdGUgc2ltcGxlLgogICoKICAqIEFzIGlzIGV2aWRlbnQgYnkgdGhlIEFscGhhIGNvZGUsIGlmIHdlIGV2ZXIgZ2V0IGEgNjQtYml0IHVuc2lnbmVkCiAgKiBsb25nIChzd3BfZW50cnlfdCkgdG8gbWF0Y2ggdXAgd2l0aCB0aGUgNjQtYml0IFBURXMsIHRoaXMgYWxsIGJlY29tZXMKQEAgLTQ3MSwxMyArNDYzLDYgQEAKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpeyAocHRlKS5wdGVfaGlnaCB9KQogI2RlZmluZSBfX3N3cF9lbnRyeV90b19wdGUoeCkJCSgocHRlX3QpeyAwLCAoeCkudmFsIH0pCiAKLS8qCi0gKiBFbmNvZGUgYW5kIGRlY29kZSBhIG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgZW50cnkKLSAqLwotI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKQkJKChwdGUpLnB0ZV9oaWdoKQotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkJKChwdGVfdCkgeyBfUEFHRV9GSUxFLCAob2ZmKSB9KQotCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTCQkzMgogI2Vsc2UKICNkZWZpbmUgX19zd3BfdHlwZSh4KQkJCSgoeCkudmFsICYgMHhmZikKICNkZWZpbmUgX19zd3Bfb2Zmc2V0KHgpCQkJKCh4KS52YWwgPj4gMTApCkBAIC00ODUsMTMgKzQ3MCw2IEBACiAKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpID4+IDEgfSkKICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCQkoKHB0ZV90KSB7ICh4KS52YWwgPDwgMSB9KQotCi0vKgotICogRW5jb2RlIGFuZCBkZWNvZGUgYSBub25saW5lYXIgZmlsZSBtYXBwaW5nIGVudHJ5Ci0gKi8KLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjkKLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkJKHB0ZV92YWwocHRlKSA+PiAxKQotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKQkoKHB0ZV90KSB7ICgob2ZmKSA8PCAxKSB8IF9QQUdFX0ZJTEUgfSkKICNlbmRpZgogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCmluZGV4IGRkYThjODIuLjA3NDI0OTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCkBAIC0xMDcsNyArMTA3LDYgQEAKICNkZWZpbmUgX1BBR0VfREVWSUNFCTB4MDAxICAvKiBDQjA6IGlmIHVuY2FjaGVhYmxlLCAxLT5kZXZpY2UgKGkuZS4gbm8gd3JpdGUtY29tYmluaW5nIG9yIHJlb3JkZXJpbmcgYXQgYnVzIGxldmVsKSAqLwogI2RlZmluZSBfUEFHRV9DQUNIQUJMRQkweDAwMiAgLyogQ0IxOiB1bmNhY2hhYmxlL2NhY2hhYmxlICovCiAjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDQgIC8qIHNvZnR3YXJlOiBwYWdlIHJlZmVyZW5jZWQgKi8KLSNkZWZpbmUgX1BBR0VfRklMRQkweDAwNCAgLyogc29mdHdhcmU6IG9ubHkgd2hlbiAhcHJlc2VudCAqLwogI2RlZmluZSBfUEFHRV9TSVpFMAkweDAwOCAgLyogU1owLWJpdCA6IHNpemUgb2YgcGFnZSAqLwogI2RlZmluZSBfUEFHRV9TSVpFMQkweDAxMCAgLyogU1oxLWJpdCA6IHNpemUgb2YgcGFnZSAqLwogI2RlZmluZSBfUEFHRV9TSEFSRUQJMHgwMjAgIC8qIHNvZnR3YXJlOiByZWZsZWN0cyBQVEVIJ3MgU0ggKi8KQEAgLTEyOSw3ICsxMjgsNyBAQAogI2RlZmluZSBfUEFHRV9XSVJFRAlfUEFHRV9FWFQoMHgwMDEpIC8qIHNvZnR3YXJlOiB3aXJlIHRoZSB0bGIgZW50cnkgKi8KICNkZWZpbmUgX1BBR0VfU1BFQ0lBTAlfUEFHRV9FWFQoMHgwMDIpCiAKLSNkZWZpbmUgX1BBR0VfQ0xFQVJfRkxBR1MJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9GSUxFIHwgX1BBR0VfU0hBUkVEIHwgXAorI2RlZmluZSBfUEFHRV9DTEVBUl9GTEFHUwkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1NIQVJFRCB8IFwKIAkJCQkgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1dJUkVEKQogCiAvKiBNYXNrIHdoaWNoIGRyb3BzIHNvZnR3YXJlIGZsYWdzICovCkBAIC0yNjAsNyArMjU5LDYgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkgIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0RJUlRZOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKSAgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfQUNDRVNTRUQ7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkgICB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKSAgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfV1JJVEU7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9zcGVjaWFsKHB0ZV90IHB0ZSl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9TUEVDSUFMOyB9CiAKQEAgLTMwNCwxMSArMzAyLDYgQEAKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCkgeyAoeCkudmFsIH0pCiAKLS8qIEVuY29kZSBhbmQgZGVjb2RlIGEgbm9ubGluZWFyIGZpbGUgbWFwcGluZyBlbnRyeSAqLwotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkJMjkKLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkJCShwdGVfdmFsKHB0ZSkpCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCQkoKHB0ZV90KSB7IChvZmYpIHwgX1BBR0VfRklMRSB9KQotCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9mYXVsdC5jIGIvYXJjaC9zaC9tbS9mYXVsdC5jCmluZGV4IDU0MWRjNjEuLmE1OGZlYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vZmF1bHQuYworKysgYi9hcmNoL3NoL21tL2ZhdWx0LmMKQEAgLTM1Myw2ICszNTMsOCBAQAogCX0gZWxzZSB7CiAJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWRvX3NpZ2J1cyhyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKKwkJZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKQorCQkJYmFkX2FyZWEocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcyk7CiAJCWVsc2UKIAkJCUJVRygpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vZ3VwLmMgYi9hcmNoL3NoL21tL2d1cC5jCmluZGV4IDM3NDU4ZjMuLmUxNWY1MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vZ3VwLmMKKysrIGIvYXJjaC9zaC9tbS9ndXAuYwpAQCAtMjU3LDEwICsyNTcsOCBAQAogCQlzdGFydCArPSBuciA8PCBQQUdFX1NISUZUOwogCQlwYWdlcyArPSBucjsKIAotCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCBzdGFydCwKLQkJCShlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVCwgd3JpdGUsIDAsIHBhZ2VzLCBOVUxMKTsKLQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJcmV0ID0gZ2V0X3VzZXJfcGFnZXNfdW5sb2NrZWQoY3VycmVudCwgbW0sIHN0YXJ0LAorCQkJKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZULCB3cml0ZSwgMCwgcGFnZXMpOwogCiAJCS8qIEhhdmUgdG8gYmUgYSBiaXQgY2FyZWZ1bCB3aXRoIHJldHVybiB2YWx1ZXMgKi8KIAkJaWYgKG5yID4gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9zaC9tbS9odWdldGxicGFnZS5jCmluZGV4IGQ3NzYyMzQuLjUzNGJjOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3NoL21tL2h1Z2V0bGJwYWdlLmMKQEAgLTY3LDEyICs2Nyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBwYWdlICpmb2xsb3dfaHVnZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgd3JpdGUpCi17Ci0JcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci19Ci0KIGludCBwbWRfaHVnZShwbWRfdCBwbWQpCiB7CiAJcmV0dXJuIDA7CkBAIC04Miw5ICs3NiwzIEBACiB7CiAJcmV0dXJuIDA7CiB9Ci0KLXN0cnVjdCBwYWdlICpmb2xsb3dfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJCSAgICAgcG1kX3QgKnBtZCwgaW50IHdyaXRlKQotewotCXJldHVybiBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2hfNjQuaAppbmRleCAzODk2NTM3Li42ODUxM2M0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2hfNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2hfNjQuaApAQCAtNzQsMTEgKzc0LDYgQEAKICNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKIAotI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKLS8qIGludGVybmFsIGRlYnVnZ2luZyBmdW5jdGlvbiAqLwotdm9pZCBrZXJuZWxfbWFwX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMsIGludCBlbmFibGUpOwotI2VuZGlmCi0KICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKICNlbmRpZiAvKiBfU1BBUkM2NF9DQUNIRUZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKaW5kZXggYjliOTFhZS4uZjA2YjM2YSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKICNkZWZpbmUgUFRSU19QRVJfUE1EICAgIAlTUk1NVV9QVFJTX1BFUl9QTUQKICNkZWZpbmUgUFRSU19QRVJfUEdEICAgIAlTUk1NVV9QVFJTX1BFUl9QR0QKICNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJUEFHRV9PRkZTRVQgLyBTUk1NVV9QR0RJUl9TSVpFCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwVUwKICNkZWZpbmUgUFRFX1NJWkUJCShQVFJTX1BFUl9QVEUqNCkKIAogI2RlZmluZSBQQUdFX05PTkUJU1JNTVVfUEFHRV9OT05FCkBAIC0xMDIsNyArMTAyLDggQEAKICAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNybW11X3N3YXAodW5zaWduZWQgbG9uZyAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3dhcCBbJTJdLCAlMCIgOiAiPSZyIiAodmFsdWUpIDogIjAiICh2YWx1ZSksICJyIiAoYWRkcikpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzd2FwIFslMl0sICUwIiA6CisJCQkiPSZyIiAodmFsdWUpIDogIjAiICh2YWx1ZSksICJyIiAoYWRkcikgOiAibWVtb3J5Iik7CiAJcmV0dXJuIHZhbHVlOwogfQogCkBAIC0yMjEsMTQgKzIyMiw2IEBACiAJcmV0dXJuIHB0ZV92YWwocHRlKSAmIFNSTU1VX1JFRjsKIH0KIAotLyoKLSAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkgaXMgbm90IHRydWUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlKHB0ZV90IHB0ZSkKLXsKLQlyZXR1cm4gcHRlX3ZhbChwdGUpICYgU1JNTVVfRklMRTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKQogewogCXJldHVybiAwOwpAQCAtMzc1LDIyICszNjgsNiBAQAogI2RlZmluZSBfX3B0ZV90b19zd3BfZW50cnkocHRlKQkJKChzd3BfZW50cnlfdCkgeyBwdGVfdmFsKHB0ZSkgfSkKICNkZWZpbmUgX19zd3BfZW50cnlfdG9fcHRlKHgpCQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKIAotLyogZmlsZS1vZmZzZXQtaW4tcHRlIGhlbHBlcnMgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfdG9fcGdvZmYocHRlX3QgcHRlKQotewotCXJldHVybiBwdGVfdmFsKHB0ZSkgPj4gU1JNTVVfUFRFX0ZJTEVfU0hJRlQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcGdvZmZfdG9fcHRlKHVuc2lnbmVkIGxvbmcgcGdvZmYpCi17Ci0JcmV0dXJuIF9fcHRlKChwZ29mZiA8PCBTUk1NVV9QVEVfRklMRV9TSElGVCkgfCBTUk1NVV9GSUxFKTsKLX0KLQotLyoKLSAqIFRoaXMgaXMgbWFkZSBhIGNvbnN0YW50IGJlY2F1c2UgbW0vZnJlbWFwLmMgcmVxdWlyZWQgYSBjb25zdGFudC4KLSAqLwotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUyAyNAotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIF9fZ2V0X3BoeXMgKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKaW5kZXggMWZmOWU3OC4uZGMxNjVlYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKQEAgLTkzLDcgKzkzLDcgQEAKICNkZWZpbmUgUFRSU19QRVJfUEdECSgxVUwgPDwgUEdESVJfQklUUykKIAogLyogS2VybmVsIGhhcyBhIHNlcGFyYXRlIDQ0Yml0IGFkZHJlc3Mgc3BhY2UuICovCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwVUwKIAogI2RlZmluZSBwbWRfRVJST1IoZSkJCQkJCQkJXAogCXByX2VycigiJXM6JWQ6IGJhZCBwbWQgJXAoJTAxNmx4KSBzZWVuIGF0ICglcFMpXG4iLAkJXApAQCAtMTM3LDcgKzEzNyw2IEBACiAjZGVmaW5lIF9QQUdFX1NPRlRfNFUJICBfQUMoMHgwMDAwMDAwMDAwMDAxRjgwLFVMKSAvKiBTb2Z0d2FyZSBiaXRzOiAgICAgICAqLwogI2RlZmluZSBfUEFHRV9FWEVDXzRVCSAgX0FDKDB4MDAwMDAwMDAwMDAwMTAwMCxVTCkgLyogRXhlY3V0YWJsZSBTVyBiaXQgICAgKi8KICNkZWZpbmUgX1BBR0VfTU9ESUZJRURfNFUgX0FDKDB4MDAwMDAwMDAwMDAwMDgwMCxVTCkgLyogTW9kaWZpZWQgKGRpcnR5KSAgICAgKi8KLSNkZWZpbmUgX1BBR0VfRklMRV80VQkgIF9BQygweDAwMDAwMDAwMDAwMDA4MDAsVUwpIC8qIFBhZ2VjYWNoZSBwYWdlICAgICAgICovCiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VEXzRVIF9BQygweDAwMDAwMDAwMDAwMDA0MDAsVUwpIC8qIEFjY2Vzc2VkIChyZWYnZCkgICAgICovCiAjZGVmaW5lIF9QQUdFX1JFQURfNFUJICBfQUMoMHgwMDAwMDAwMDAwMDAwMjAwLFVMKSAvKiBSZWFkYWJsZSBTVyBCaXQgICAgICAqLwogI2RlZmluZSBfUEFHRV9XUklURV80VQkgIF9BQygweDAwMDAwMDAwMDAwMDAxMDAsVUwpIC8qIFdyaXRhYmxlIFNXIEJpdCAgICAgICovCkBAIC0xNjcsNyArMTY2LDYgQEAKICNkZWZpbmUgX1BBR0VfRVhFQ180VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwODAsVUwpIC8qIEV4ZWN1dGFibGUgUGFnZSAgICAgICovCiAjZGVmaW5lIF9QQUdFX1dfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDQwLFVMKSAvKiBXcml0YWJsZSAgICAgICAgICAgICAqLwogI2RlZmluZSBfUEFHRV9TT0ZUXzRWCSAgX0FDKDB4MDAwMDAwMDAwMDAwMDAzMCxVTCkgLyogU29mdHdhcmUgYml0cyAgICAgICAgKi8KLSNkZWZpbmUgX1BBR0VfRklMRV80VgkgIF9BQygweDAwMDAwMDAwMDAwMDAwMjAsVUwpIC8qIFBhZ2VjYWNoZSBwYWdlICAgICAgICovCiAjZGVmaW5lIF9QQUdFX1BSRVNFTlRfNFYgIF9BQygweDAwMDAwMDAwMDAwMDAwMTAsVUwpIC8qIFByZXNlbnQgICAgICAgICAgICAgICovCiAjZGVmaW5lIF9QQUdFX1JFU1ZfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDA4LFVMKSAvKiBSZXNlcnZlZCAgICAgICAgICAgICAqLwogI2RlZmluZSBfUEFHRV9TWjE2R0JfNFYJICBfQUMoMHgwMDAwMDAwMDAwMDAwMDA3LFVMKSAvKiAxNkdCIFBhZ2UgICAgICAgICAgICAqLwpAQCAtMzMyLDIyICszMzAsNiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgcHRlX3QgcGdvZmZfdG9fcHRlKHVuc2lnbmVkIGxvbmcgb2ZmKQotewotCW9mZiA8PD0gUEFHRV9TSElGVDsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJcbjY2MToJb3IJCSUwLCAlMiwgJTBcbiIKLQkiCS5zZWN0aW9uCS5zdW40dl8xaW5zbl9wYXRjaCwgXCJheFwiXG4iCi0JIgkud29yZAkJNjYxYlxuIgotCSIJb3IJCSUwLCAlMywgJTBcbiIKLQkiCS5wcmV2aW91c1xuIgotCTogIj1yIiAob2ZmKQotCTogIjAiIChvZmYpLCAiaSIgKF9QQUdFX0ZJTEVfNFUpLCAiaSIgKF9QQUdFX0ZJTEVfNFYpKTsKLQotCXJldHVybiBfX3B0ZShvZmYpOwotfQotCiBzdGF0aWMgaW5saW5lIHBncHJvdF90IHBncHJvdF9ub25jYWNoZWQocGdwcm90X3QgcHJvdCkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHBncHJvdF92YWwocHJvdCk7CkBAIC02MDksMjIgKzU5MSw2IEBACiAJcmV0dXJuIChwdGVfdmFsKHB0ZSkgJiBtYXNrKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV9maWxlKHB0ZV90IHB0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHZhbCA9IHB0ZV92YWwocHRlKTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCSJcbjY2MToJYW5kCQklMCwgJTIsICUwXG4iCi0JIgkuc2VjdGlvbgkuc3VuNHZfMWluc25fcGF0Y2gsIFwiYXhcIlxuIgotCSIJLndvcmQJCTY2MWJcbiIKLQkiCWFuZAkJJTAsICUzLCAlMFxuIgotCSIJLnByZXZpb3VzXG4iCi0JOiAiPXIiICh2YWwpCi0JOiAiMCIgKHZhbCksICJpIiAoX1BBR0VfRklMRV80VSksICJpIiAoX1BBR0VfRklMRV80VikpOwotCi0JcmV0dXJuIHZhbDsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbCA9IHB0ZV92YWwocHRlKTsKQEAgLTk3MSwxMiArOTM3LDYgQEAKICNkZWZpbmUgX19wdGVfdG9fc3dwX2VudHJ5KHB0ZSkJCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkJKChwdGVfdCkgeyAoeCkudmFsIH0pCiAKLS8qIEZpbGUgb2Zmc2V0IGluIFBURSBzdXBwb3J0LiAqLwotdW5zaWduZWQgbG9uZyBwdGVfZmlsZShwdGVfdCk7Ci0jZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpCShwdGVfdmFsKHB0ZSkgPj4gUEFHRV9TSElGVCkKLXB0ZV90IHBnb2ZmX3RvX3B0ZSh1bnNpZ25lZCBsb25nKTsKLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJKDY0VUwgLSBQQUdFX1NISUZUIC0gMVVMKQotCiBpbnQgcGFnZV9pbl9waHlzX2F2YWlsKHVuc2lnbmVkIGxvbmcgcGFkZHIpOwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3Rzcm1tdS5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZ3Rzcm1tdS5oCmluZGV4IDc5ZGExNzguLmFlNTFhMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGd0c3JtbXUuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BndHNybW11LmgKQEAgLTgwLDEwICs4MCw2IEBACiAjZGVmaW5lIFNSTU1VX1BSSVYgICAgICAgICAweDFjCiAjZGVmaW5lIFNSTU1VX1BSSVZfUkRPTkxZICAweDE4CiAKLSNkZWZpbmUgU1JNTVVfRklMRSAgICAgICAgIDB4NDAJLyogSW1wbGVtZW50ZWQgaW4gc29mdHdhcmUgKi8KLQotI2RlZmluZSBTUk1NVV9QVEVfRklMRV9TSElGVCAgICAgOAkvKiA9PSAzMi1QVEVfRklMRV9NQVhfQklUUyAqLwotCiAjZGVmaW5lIFNSTU1VX0NIR19NQVNLICAgICgweGZmZmZmZjAwIHwgU1JNTVVfUkVGIHwgU1JNTVVfRElSVFkpCiAKIC8qIFNSTU1VIHN3YXAgZW50cnkgZW5jb2RpbmcKQEAgLTk0LDEzICs5MCwxMyBAQAogICogb29vb29vb29vb29vb29vb29vb3R0dHR0UlJSUlJSUlIKICAqIGZlZGNiYTk4NzY1NDMyMTBmZWRjYmE5ODc2NTQzMjEwCiAgKgotICogVGhlIGJvdHRvbSA4IGJpdHMgYXJlIHJlc2VydmVkIGZvciBwcm90ZWN0aW9uIGFuZCBzdGF0dXMgYml0cywgZXNwZWNpYWxseQotICogRklMRSBhbmQgUFJFU0VOVC4KKyAqIFRoZSBib3R0b20gNyBiaXRzIGFyZSByZXNlcnZlZCBmb3IgcHJvdGVjdGlvbiBhbmQgc3RhdHVzIGJpdHMsIGVzcGVjaWFsbHkKKyAqIFBSRVNFTlQuCiAgKi8KICNkZWZpbmUgU1JNTVVfU1dQX1RZUEVfTUFTSwkweDFmCi0jZGVmaW5lIFNSTU1VX1NXUF9UWVBFX1NISUZUCVNSTU1VX1BURV9GSUxFX1NISUZUCi0jZGVmaW5lIFNSTU1VX1NXUF9PRkZfTUFTSwkweDdmZmZmCi0jZGVmaW5lIFNSTU1VX1NXUF9PRkZfU0hJRlQJKFNSTU1VX1BURV9GSUxFX1NISUZUICsgNSkKKyNkZWZpbmUgU1JNTVVfU1dQX1RZUEVfU0hJRlQJNworI2RlZmluZSBTUk1NVV9TV1BfT0ZGX01BU0sJMHhmZmZmZgorI2RlZmluZSBTUk1NVV9TV1BfT0ZGX1NISUZUCShTUk1NVV9TV1BfVFlQRV9TSElGVCArIDUpCiAKIC8qIFNvbWUgZGF5IEkgd2lsbCBpbXBsZW1lbnQgdHJ1ZSBmaW5lIGdyYWluZWQgYWNjZXNzIGJpdHMgZm9yCiAgKiB1c2VyIHBhZ2VzIGJlY2F1c2UgdGhlIFNSTU1VIGdpdmVzIHVzIHRoZSBjYXBhYmlsaXRpZXMgdG8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYwppbmRleCA5MDhlOGMxLi43MGQ4MTcxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMKKysrIGIvYXJjaC9zcGFyYy9tbS9mYXVsdF8zMi5jCkBAIC0yNDksNiArMjQ5LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYwppbmRleCAxOGZjZDcxLi40Nzk4MjMyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzY0LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jCkBAIC00NDYsNiArNDQ2LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vZ3VwLmMgYi9hcmNoL3NwYXJjL21tL2d1cC5jCmluZGV4IGFlNmNlMzguLjJlNWM0ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vZ3VwLmMKKysrIGIvYXJjaC9zcGFyYy9tbS9ndXAuYwpAQCAtMjQ5LDEwICsyNDksOCBAQAogCQlzdGFydCArPSBuciA8PCBQQUdFX1NISUZUOwogCQlwYWdlcyArPSBucjsKIAotCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCBzdGFydCwKLQkJCShlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVCwgd3JpdGUsIDAsIHBhZ2VzLCBOVUxMKTsKLQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJcmV0ID0gZ2V0X3VzZXJfcGFnZXNfdW5sb2NrZWQoY3VycmVudCwgbW0sIHN0YXJ0LAorCQkJKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZULCB3cml0ZSwgMCwgcGFnZXMpOwogCiAJCS8qIEhhdmUgdG8gYmUgYSBiaXQgY2FyZWZ1bCB3aXRoIHJldHVybiB2YWx1ZXMgKi8KIAkJaWYgKG5yID4gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9zcGFyYy9tbS9odWdldGxicGFnZS5jCmluZGV4IGQzMjk1MzcuLjQyNDJlYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3NwYXJjL21tL2h1Z2V0bGJwYWdlLmMKQEAgLTIxNSwxMiArMjE1LDYgQEAKIAlyZXR1cm4gZW50cnk7CiB9CiAKLXN0cnVjdCBwYWdlICpmb2xsb3dfaHVnZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgd3JpdGUpCi17Ci0JcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci19Ci0KIGludCBwbWRfaHVnZShwbWRfdCBwbWQpCiB7CiAJcmV0dXJuIDA7CkBAIC0yMzAsOSArMjI0LDMgQEAKIHsKIAlyZXR1cm4gMDsKIH0KLQotc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCQkJICAgICBwbWRfdCAqcG1kLCBpbnQgd3JpdGUpCi17Ci0JcmV0dXJuIE5VTEw7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC90aWxlL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCA1ZDE5NTA3Li45NWE0ZjE5IDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvdGlsZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTY3LDcgKzY3LDcgQEAKIGV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgc2V0X3BhZ2VfaG9tZXModm9pZCk7CiAKLSNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTBVTAogCiAjZGVmaW5lIF9QQUdFX1BSRVNFTlQgICAgICAgICAgIEhWX1BURV9QUkVTRU5UCiAjZGVmaW5lIF9QQUdFX0hVR0VfUEFHRSAgICAgICAgIEhWX1BURV9QQUdFCkBAIC0yODUsMTcgKzI4NSw2IEBACiBleHRlcm4gdm9pZCBjaGVja19tbV9jYWNoaW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKnByZXYsIHN0cnVjdCBtbV9zdHJ1Y3QgKm5leHQpOwogCiAvKgotICogU3VwcG9ydCBub24tbGluZWFyIGZpbGUgbWFwcGluZ3MgKHNlZSBzeXNfcmVtYXBfZmlsZV9wYWdlcykuCi0gKiBUaGlzIGlzIGRlZmluZWQgYnkgQ0xJRU5UMSBzZXQgYnV0IENMSUVOVDAgYW5kIF9QQUdFX1BSRVNFTlQgY2xlYXIsIGFuZCB0aGUKLSAqIGZpbGUgb2Zmc2V0IGluIHRoZSAzMiBoaWdoIGJpdHMuCi0gKi8KLSNkZWZpbmUgX1BBR0VfRklMRSAgICAgICAgSFZfUFRFX0NMSUVOVDEKLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMgMzIKLSNkZWZpbmUgcHRlX2ZpbGUocHRlKSAgICAgKGh2X3B0ZV9nZXRfY2xpZW50MShwdGUpICYmICFodl9wdGVfZ2V0X2NsaWVudDAocHRlKSkKLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkgKChwdGUpLnZhbCA+PiAzMikKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgKChwdGVfdCkgeyAoKChsb25nIGxvbmcpKG9mZikpIDw8IDMyKSB8IF9QQUdFX0ZJTEUgfSkKLQotLyoKICAqIEVuY29kZSBhbmQgZGUtY29kZSBhIHN3YXAgZW50cnkgKHNlZSA8bGludXgvc3dhcG9wcy5oPikuCiAgKiBXZSBwdXQgdGhlIHN3YXAgZmlsZSB0eXBlK29mZnNldCBpbiB0aGUgMzIgaGlnaCBiaXRzOwogICogSSBiZWxpZXZlIHdlIGNhbiBqdXN0IGxlYXZlIHRoZSBsb3cgYml0cyBjbGVhci4KZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rZXJuZWwvcGNpLmMgYi9hcmNoL3RpbGUva2VybmVsL3BjaS5jCmluZGV4IGY3MGM3ODkuLjMyNWRmNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9rZXJuZWwvcGNpLmMKKysrIGIvYXJjaC90aWxlL2tlcm5lbC9wY2kuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CiAJaW50IHNtYWxsZXN0X21heF9wYXlsb2FkID0gMHgxOyAvKiBUaWxlIG1heGVzIG91dCBhdCAyNTYgYnl0ZXMuICovCi0JaW50IG1heF9yZWFkX3NpemUgPSAweDI7IC8qIExpbWl0IHRvIDUxMiBieXRlIHJlYWRzLiAqLworCWludCBtYXhfcmVhZF9zaXplID0gUENJX0VYUF9ERVZDVExfUkVBRFJRXzUxMkI7CiAJdTE2IG5ld192YWx1ZXM7CiAKIAkvKiBTY2FuIGZvciB0aGUgc21hbGxlc3QgbWF4aW11bSBwYXlsb2FkIHNpemUuICovCkBAIC0yNTgsNyArMjU4LDcgQEAKIAl9CiAKIAkvKiBOb3csIHNldCB0aGUgbWF4X3BheWxvYWRfc2l6ZSBmb3IgYWxsIGRldmljZXMgdG8gdGhhdCB2YWx1ZS4gKi8KLQluZXdfdmFsdWVzID0gKG1heF9yZWFkX3NpemUgPDwgMTIpIHwgKHNtYWxsZXN0X21heF9wYXlsb2FkIDw8IDUpOworCW5ld192YWx1ZXMgPSBtYXhfcmVhZF9zaXplIHwgKHNtYWxsZXN0X21heF9wYXlsb2FkIDw8IDUpOwogCWZvcl9lYWNoX3BjaV9kZXYoZGV2KQogCQlwY2llX2NhcGFiaWxpdHlfY2xlYXJfYW5kX3NldF93b3JkKGRldiwgUENJX0VYUF9ERVZDVEwsCiAJCQkJUENJX0VYUF9ERVZDVExfUEFZTE9BRCB8IFBDSV9FWFBfREVWQ1RMX1JFQURSUSwKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9rdm0vS2NvbmZpZyBiL2FyY2gvdGlsZS9rdm0vS2NvbmZpZwppbmRleCAyMjk4Y2IxLi4xZTk2OGY3IDEwMDY0NAotLS0gYS9hcmNoL3RpbGUva3ZtL0tjb25maWcKKysrIGIvYXJjaC90aWxlL2t2bS9LY29uZmlnCkBAIC0yMSw2ICsyMSw3IEBACiAJZGVwZW5kcyBvbiBIQVZFX0tWTSAmJiBNT0RVTEVTCiAJc2VsZWN0IFBSRUVNUFRfTk9USUZJRVJTCiAJc2VsZWN0IEFOT05fSU5PREVTCisJc2VsZWN0IFNSQ1UKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGhvc3RpbmcgcGFyYXZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzLgogCmRpZmYgLS1naXQgYS9hcmNoL3RpbGUvbW0vZmF1bHQuYyBiL2FyY2gvdGlsZS9tbS9mYXVsdC5jCmluZGV4IDU2NWUyNWEuLjBmNjFhNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvdGlsZS9tbS9mYXVsdC5jCisrKyBiL2FyY2gvdGlsZS9tbS9mYXVsdC5jCkBAIC00NDIsNiArNDQyLDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2FyY2gvdGlsZS9tbS9ob21lY2FjaGUuYyBiL2FyY2gvdGlsZS9tbS9ob21lY2FjaGUuYwppbmRleCBjZDMzODczLi4wMDI5YjNmIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvbW0vaG9tZWNhY2hlLmMKKysrIGIvYXJjaC90aWxlL21tL2hvbWVjYWNoZS5jCkBAIC0yNjMsMTAgKzI2Myw2IEBACiAvKiBVcGRhdGUgdGhlIGhvbWUgb2YgYSBQVEUgaWYgbmVjZXNzYXJ5IChjYW4gYWxzbyBiZSB1c2VkIGZvciBhIHBncHJvdF90KS4gKi8KIHB0ZV90IHB0ZV9zZXRfaG9tZShwdGVfdCBwdGUsIGludCBob21lKQogewotCS8qIENoZWNrIGZvciBub24tbGluZWFyIGZpbGUgbWFwcGluZyAiUFRFcyIgYW5kIHBhc3MgdGhlbSB0aHJvdWdoLiAqLwotCWlmIChwdGVfZmlsZShwdGUpKQotCQlyZXR1cm4gcHRlOwotCiAjaWYgQ0hJUF9IQVNfTU1JTygpCiAJLyogQ2hlY2sgZm9yIE1NSU8gbWFwcGluZ3MgYW5kIHBhc3MgdGhlbSB0aHJvdWdoLiAqLwogCWlmIChodl9wdGVfZ2V0X21vZGUocHRlKSA9PSBIVl9QVEVfTU9ERV9NTUlPKQpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3RpbGUvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCAzMjcwZTAwLi44NDE2MjQwIDEwMDY0NAotLS0gYS9hcmNoL3RpbGUvbW0vaHVnZXRsYnBhZ2UuYworKysgYi9hcmNoL3RpbGUvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMTUwLDEyICsxNTAsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfYWRkcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCQkJICAgICAgaW50IHdyaXRlKQotewotCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwotfQotCiBpbnQgcG1kX2h1Z2UocG1kX3QgcG1kKQogewogCXJldHVybiAhIShwbWRfdmFsKHBtZCkgJiBfUEFHRV9IVUdFX1BBR0UpOwpAQCAtMTY2LDI4ICsxNjAsNiBAQAogCXJldHVybiAhIShwdWRfdmFsKHB1ZCkgJiBfUEFHRV9IVUdFX1BBR0UpOwogfQogCi1zdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkgICAgIHBtZF90ICpwbWQsIGludCB3cml0ZSkKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCXBhZ2UgPSBwdGVfcGFnZSgqKHB0ZV90ICopcG1kKTsKLQlpZiAocGFnZSkKLQkJcGFnZSArPSAoKGFkZHJlc3MgJiB+UE1EX01BU0spID4+IFBBR0VfU0hJRlQpOwotCXJldHVybiBwYWdlOwotfQotCi1zdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfcHVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkgICAgIHB1ZF90ICpwdWQsIGludCB3cml0ZSkKLXsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQotCXBhZ2UgPSBwdGVfcGFnZSgqKHB0ZV90ICopcHVkKTsKLQlpZiAocGFnZSkKLQkJcGFnZSArPSAoKGFkZHJlc3MgJiB+UFVEX01BU0spID4+IFBBR0VfU0hJRlQpOwotCXJldHVybiBwYWdlOwotfQotCiBpbnQgaHVnZV9wbWRfdW5zaGFyZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyAqYWRkciwgcHRlX3QgKnB0ZXApCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmgKaW5kZXggZjUzNGI3My4uY2ZiZTU5NyAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaApAQCAtMjMsNyArMjMsNyBAQAogI2RlZmluZSBQVFJTX1BFUl9QVEUJMTAyNAogI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRCAoKFRBU0tfU0laRSArIChQR0RJUl9TSVpFIC0gMSkpIC8gUEdESVJfU0laRSkKICNkZWZpbmUgUFRSU19QRVJfUEdECTEwMjQKLSNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTBVTAogCiAjZGVmaW5lIHB0ZV9FUlJPUihlKSBcCiAgICAgICAgIHByaW50aygiJXM6JWQ6IGJhZCBwdGUgJXAoJTA4bHgpLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBcCkBAIC00MSwxMyArNDEsNCBAQAogI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkgX19wdGUocGZuX3RvX3BoeXMocGZuKSB8IHBncHJvdF92YWwocHJvdCkpCiAjZGVmaW5lIHBmbl9wbWQocGZuLCBwcm90KSBfX3BtZChwZm5fdG9fcGh5cyhwZm4pIHwgcGdwcm90X3ZhbChwcm90KSkKIAotLyoKLSAqIEJpdHMgMCB0aHJvdWdoIDQgYXJlIHRha2VuCi0gKi8KLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjcKLQotI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKSAocHRlX3ZhbChwdGUpID4+IDUpCi0KLSNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikgKChwdGVfdCkgeyAoKG9mZikgPDwgNSkgKyBfUEFHRV9GSUxFIH0pCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCmluZGV4IDAwMzJmOTIuLjJiNDI3NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKQEAgLTQxLDcgKzQxLDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdEICgoVEFTS19TSVpFICsgKFBHRElSX1NJWkUgLSAxKSkgLyBQR0RJUl9TSVpFKQotI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMAorI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMFVMCiAKICNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKICAgICAgICAgcHJpbnRrKCIlczolZDogYmFkIHB0ZSAlcCglMDE2bHgpLlxuIiwgX19GSUxFX18sIF9fTElORV9fLCAmKGUpLCBcCkBAIC0xMTIsMjUgKzExMiw1IEBACiAJcmV0dXJuIF9fcG1kKChwYWdlX25yIDw8IFBBR0VfU0hJRlQpIHwgcGdwcm90X3ZhbChwZ3Byb3QpKTsKIH0KIAotLyoKLSAqIEJpdHMgMCB0aHJvdWdoIDMgYXJlIHRha2VuIGluIHRoZSBsb3cgcGFydCBvZiB0aGUgcHRlLAotICogcHV0IHRoZSAzMiBiaXRzIG9mIG9mZnNldCBpbnRvIHRoZSBoaWdoIHBhcnQuCi0gKi8KLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMzIKLQotI2lmZGVmIENPTkZJR182NEJJVAotCi0jZGVmaW5lIHB0ZV90b19wZ29mZihwKSAoKHApLnB0ZSA+PiAzMikKLQotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSAoKHB0ZV90KSB7ICgob2ZmKSA8PCAzMikgfCBfUEFHRV9GSUxFIH0pCi0KLSNlbHNlCi0KLSNkZWZpbmUgcHRlX3RvX3Bnb2ZmKHB0ZSkgKChwdGUpLnB0ZV9oaWdoKQotCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpICgocHRlX3QpIHsgX1BBR0VfRklMRSwgKG9mZikgfSkKLQotI2VuZGlmCi0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGJmOTc0ZjcuLjIzMjRiNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xOCw3ICsxOCw2IEBACiAjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDgwCiAjZGVmaW5lIF9QQUdFX0RJUlRZCTB4MTAwCiAvKiBJZiBfUEFHRV9QUkVTRU5UIGlzIGNsZWFyLCB3ZSB1c2UgdGhlc2U6ICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDgJLyogbm9ubGluZWFyIGZpbGUgbWFwcGluZywgc2F2ZWQgUFRFOyB1bnNldDpzd2FwICovCiAjZGVmaW5lIF9QQUdFX1BST1ROT05FCTB4MDEwCS8qIGlmIHRoZSB1c2VyIG1hcHBlZCBpdCB3aXRoIFBST1RfTk9ORTsKIAkJCQkgICBwdGVfcHJlc2VudCBnaXZlcyB0cnVlICovCiAKQEAgLTE1MSwxNCArMTUwLDYgQEAKIAkgICAgICAgIShwdGVfZ2V0X2JpdHMocHRlLCBfUEFHRV9QUk9UTk9ORSkpKTsKIH0KIAotLyoKLSAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrcyBpZiBwdGVfcHJlc2VudCgpIGlzIG5vdCB0cnVlLgotICovCi1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIHB0ZV9nZXRfYml0cyhwdGUsIF9QQUdFX0ZJTEUpOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQogewogCXJldHVybiBwdGVfZ2V0X2JpdHMocHRlLCBfUEFHRV9ESVJUWSk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC90cmFwLmMgYi9hcmNoL3VtL2tlcm5lbC90cmFwLmMKaW5kZXggNTY3OGMzNS4uMjA5NjE3MyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvdHJhcC5jCisrKyBiL2FyY2gvdW0va2VybmVsL3RyYXAuYwpAQCAtODAsNiArODAsOCBAQAogCQlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJCWlmIChmYXVsdCAmIFZNX0ZBVUxUX09PTSkgewogCQkJCWdvdG8gb3V0X29mX21lbW9yeTsKKwkJCX0gZWxzZSBpZiAoZmF1bHQgJiBWTV9GQVVMVF9TSUdTRUdWKSB7CisJCQkJZ290byBvdXQ7CiAJCQl9IGVsc2UgaWYgKGZhdWx0ICYgVk1fRkFVTFRfU0lHQlVTKSB7CiAJCQkJZXJyID0gLUVBQ0NFUzsKIAkJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvYXNtL3BndGFibGUtaHdkZWYuaCBiL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvYXNtL3BndGFibGUtaHdkZWYuaAppbmRleCA3MzE0ZTg1Li5lMzdmYTQ3IDEwMDY0NAotLS0gYS9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLWh3ZGVmLmgKKysrIGIvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9hc20vcGd0YWJsZS1od2RlZi5oCkBAIC00NCw3ICs0NCw2IEBACiAjZGVmaW5lIFBURV9UWVBFX0lOVkFMSUQJKDMgPDwgMCkKIAogI2RlZmluZSBQVEVfUFJFU0VOVAkJKDEgPDwgMikKLSNkZWZpbmUgUFRFX0ZJTEUJCSgxIDw8IDMpCS8qIG9ubHkgd2hlbiAhUFJFU0VOVCAqLwogI2RlZmluZSBQVEVfWU9VTkcJCSgxIDw8IDMpCiAjZGVmaW5lIFBURV9ESVJUWQkJKDEgPDwgNCkKICNkZWZpbmUgUFRFX0NBQ0hFQUJMRQkJKDEgPDwgNSkKZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvdW5pY29yZTMyL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBlZDZmN2QwLi44MThkMGY1IDEwMDY0NAotLS0gYS9hcmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC91bmljb3JlMzIvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0yODMsMjAgKzI4Myw2IEBACiAjZGVmaW5lIE1BWF9TV0FQRklMRVNfQ0hFQ0soKQlcCiAJQlVJTERfQlVHX09OKE1BWF9TV0FQRklMRVNfU0hJRlQgPiBfX1NXUF9UWVBFX0JJVFMpCiAKLS8qCi0gKiBFbmNvZGUgYW5kIGRlY29kZSBhIGZpbGUgZW50cnkuICBGaWxlIGVudHJpZXMgYXJlIHN0b3JlZCBpbiB0aGUgTGludXgKLSAqIHBhZ2UgdGFibGVzIGFzIGZvbGxvd3M6Ci0gKgotICogICAzIDMgMiAyIDIgMiAyIDIgMiAyIDIgMiAxIDEgMSAxIDEgMSAxIDEgMSAxCi0gKiAgIDEgMCA5IDggNyA2IDUgNCAzIDIgMSAwIDkgOCA3IDYgNSA0IDMgMiAxIDAgOSA4IDcgNiA1IDQgMyAyIDEgMAotICogICA8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gb2Zmc2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+IDEgMCAwIDAKLSAqLwotI2RlZmluZSBwdGVfZmlsZShwdGUpCQkocHRlX3ZhbChwdGUpICYgUFRFX0ZJTEUpCi0jZGVmaW5lIHB0ZV90b19wZ29mZih4KQkJKHB0ZV92YWwoeCkgPj4gNCkKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKHgpCQlfX3B0ZSgoKHgpIDw8IDQpIHwgUFRFX0ZJTEUpCi0KLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjgKLQogLyogTmVlZHMgdG8gYmUgZGVmaW5lZCBoZXJlIGFuZCBub3QgaW4gbGludXgvbW0uaCwgYXMgaXQgaXMgYXJjaCBkZXBlbmRlbnQgKi8KIC8qIEZJWE1FOiB0aGlzIGlzIG5vdCBjb3JyZWN0ICovCiAjZGVmaW5lIGtlcm5fYWRkcl92YWxpZChhZGRyKQkoMSkKZGlmZiAtLWdpdCBhL2FyY2gvdW5pY29yZTMyL21tL3BnZC5jIGIvYXJjaC91bmljb3JlMzIvbW0vcGdkLmMKaW5kZXggMDhiOGQ0Mi4uMmFkZTIwZCAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIvbW0vcGdkLmMKKysrIGIvYXJjaC91bmljb3JlMzIvbW0vcGdkLmMKQEAgLTY5LDYgKzY5LDcgQEAKIAogbm9fcHRlOgogCXBtZF9mcmVlKG1tLCBuZXdfcG1kKTsKKwltbV9kZWNfbnJfcG1kcyhtbSk7CiBub19wbWQ6CiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyluZXdfcGdkLCAwKTsKIG5vX3BnZDoKQEAgLTk2LDcgKzk3LDkgQEAKIAlwdGUgPSBwbWRfcGd0YWJsZSgqcG1kKTsKIAlwbWRfY2xlYXIocG1kKTsKIAlwdGVfZnJlZShtbSwgcHRlKTsKKwlhdG9taWNfbG9uZ19kZWMoJm1tLT5ucl9wdGVzKTsKIAlwbWRfZnJlZShtbSwgcG1kKTsKKwltbV9kZWNfbnJfcG1kcyhtbSk7CiBmcmVlOgogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHBnZCwgMCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnIGIvYXJjaC94ODYvS2NvbmZpZwppbmRleCAwZGM5ZDAxLi4zM2NlOWEzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisrKyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTE3LDYgKzE3LDcgQEAKIAlkZXBlbmRzIG9uIDY0QklUCiAJc2VsZWN0IFg4Nl9ERVZfRE1BX09QUwogCXNlbGVjdCBBUkNIX1VTRV9DTVBYQ0hHX0xPQ0tSRUYKKwlzZWxlY3QgSEFWRV9MSVZFUEFUQ0gKIAogIyMjIEFyY2ggc2V0dGluZ3MKIGNvbmZpZyBYODYKQEAgLTEzOCw2ICsxMzksNyBAQAogCXNlbGVjdCBIQVZFX0FDUElfQVBFSV9OTUkgaWYgQUNQSQogCXNlbGVjdCBBQ1BJX0xFR0FDWV9UQUJMRVNfTE9PS1VQIGlmIEFDUEkKIAlzZWxlY3QgWDg2X0ZFQVRVUkVfTkFNRVMgaWYgUFJPQ19GUworCXNlbGVjdCBTUkNVCiAKIGNvbmZpZyBJTlNUUlVDVElPTl9ERUNPREVSCiAJZGVmX2Jvb2wgeQpAQCAtNDk2LDYgKzQ5OCwxNyBAQAogCSAgdGhpbmdzIGxpa2UgY2xvY2sgdHJlZSAoY29tbW9uIGNsb2NrIGZyYW1ld29yaykgYW5kIHBpbmNvbnRyb2wKIAkgIHdoaWNoIGFyZSBuZWVkZWQgYnkgdGhlIExQU1MgcGVyaXBoZXJhbCBkcml2ZXJzLgogCitjb25maWcgWDg2X0FNRF9QTEFURk9STV9ERVZJQ0UKKwlib29sICJBTUQgQUNQSTJQbGF0Zm9ybSBkZXZpY2VzIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBBQ1BJCisJc2VsZWN0IENPTU1PTl9DTEsKKwlzZWxlY3QgUElOQ1RSTAorCS0tLWhlbHAtLS0KKwkgIFNlbGVjdCB0byBpbnRlcnByZXQgQU1EIHNwZWNpZmljIEFDUEkgZGV2aWNlIHRvIHBsYXRmb3JtIGRldmljZQorCSAgc3VjaCBhcyBJMkMsIFVBUlQsIEdQSU8gZm91bmQgb24gQU1EIENhcnJpem8gYW5kIGxhdGVyIGNoaXBzZXRzLgorCSAgSTJDIGFuZCBVQVJUIGRlcGVuZCBvbiBDT01NT05fQ0xLIHRvIHNldCBjbG9jay4gR1BJTyBkcml2ZXIgaXMKKwkgIGltcGxlbWVudGVkIHVuZGVyIFBJTkNUUkwgc3Vic3lzdGVtLgorCiBjb25maWcgSU9TRl9NQkkKIAl0cmlzdGF0ZSAiSW50ZWwgU29DIElPU0YgU2lkZWJhbmQgc3VwcG9ydCBmb3IgU29DIHBsYXRmb3JtcyIKIAlkZXBlbmRzIG9uIFBDSQpAQCAtODU1LDYgKzg2OCwxMCBAQAogCiBzb3VyY2UgImtlcm5lbC9LY29uZmlnLnByZWVtcHQiCiAKK2NvbmZpZyBVUF9MQVRFX0lOSVQKKyAgICAgICBkZWZfYm9vbCB5CisgICAgICAgZGVwZW5kcyBvbiAhU01QICYmIFg4Nl9MT0NBTF9BUElDCisKIGNvbmZpZyBYODZfVVBfQVBJQwogCWJvb2wgIkxvY2FsIEFQSUMgc3VwcG9ydCBvbiB1bmlwcm9jZXNzb3JzIgogCWRlcGVuZHMgb24gWDg2XzMyICYmICFTTVAgJiYgIVg4Nl8zMl9OT05fU1RBTkRBUkQKQEAgLTIwMTIsNiArMjAyOSw4IEBACiAJICBUaGlzIGlzIHVzZWQgdG8gd29yayBhcm91bmQgYnJva2VuIGJvb3QgbG9hZGVycy4gIFRoaXMgc2hvdWxkCiAJICBiZSBzZXQgdG8gJ04nIHVuZGVyIG5vcm1hbCBjb25kaXRpb25zLgogCitzb3VyY2UgImtlcm5lbC9saXZlcGF0Y2gvS2NvbmZpZyIKKwogZW5kbWVudQogCiBjb25maWcgQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUcKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZSBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCBkOTk5Mzk4Li5hZDc1NGI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC05MCw3ICs5MCw3IEBACiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0xaNCkgCTo9IGx6NAogCiBSVU5fU0laRSA9ICQoc2hlbGwgJChPQkpEVU1QKSAtaCB2bWxpbnV4IHwgXAotCSAgICAgcGVybCAkKHNyY3RyZWUpL2FyY2gveDg2L3Rvb2xzL2NhbGNfcnVuX3NpemUucGwpCisJICAgICAkKENPTkZJR19TSEVMTCkgJChzcmN0cmVlKS9hcmNoL3g4Ni90b29scy9jYWxjX3J1bl9zaXplLnNoKQogcXVpZXRfY21kX21rcGlnZ3kgPSBNS1BJR0dZICRACiAgICAgICBjbWRfbWtwaWdneSA9ICQob2JqKS9ta3BpZ2d5ICQ8ICQoUlVOX1NJWkUpID4gJEAgfHwgKCBybSAtZiAkQCA7IGZhbHNlICkKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jdHlwZS5oIGIvYXJjaC94ODYvYm9vdC9jdHlwZS5oCmluZGV4IDI1ZTEzNDAuLjAyMGYxMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY3R5cGUuaAorKysgYi9hcmNoL3g4Ni9ib290L2N0eXBlLmgKQEAgLTEsNiArMSw1IEBACi0jaWZuZGVmIEJPT1RfSVNESUdJVF9ICi0KLSNkZWZpbmUgQk9PVF9JU0RJR0lUX0gKKyNpZm5kZWYgQk9PVF9DVFlQRV9ICisjZGVmaW5lIEJPT1RfQ1RZUEVfSAogCiBzdGF0aWMgaW5saW5lIGludCBpc2RpZ2l0KGludCBjaCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvZWFybHlfc2VyaWFsX2NvbnNvbGUuYyBiL2FyY2gveDg2L2Jvb3QvZWFybHlfc2VyaWFsX2NvbnNvbGUuYwppbmRleCA1ZGYyODY5Li40NWEwNzY4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9lYXJseV9zZXJpYWxfY29uc29sZS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvZWFybHlfc2VyaWFsX2NvbnNvbGUuYwpAQCAtMiw4ICsyLDYgQEAKIAogI2RlZmluZSBERUZBVUxUX1NFUklBTF9QT1JUIDB4M2Y4IC8qIHR0eVMwICovCiAKLSNkZWZpbmUgWE1UUkRZICAgICAgICAgIDB4MjAKLQogI2RlZmluZSBETEFCCQkweDgwCiAKICNkZWZpbmUgVFhSICAgICAgICAgICAgIDAgICAgICAgLyogIFRyYW5zbWl0IHJlZ2lzdGVyIChXUklURSkgKi8KQEAgLTc0LDggKzcyLDggQEAKIAkJCXN0YXRpYyBjb25zdCBpbnQgYmFzZXNbXSA9IHsgMHgzZjgsIDB4MmY4IH07CiAJCQlpbnQgaWR4ID0gMDsKIAotCQkJaWYgKCFzdHJuY21wKGFyZyArIHBvcywgInR0eVMiLCA0KSkKLQkJCQlwb3MgKz0gNDsKKwkJCS8qICs9IHN0cmxlbigidHR5UyIpOyAqLworCQkJcG9zICs9IDQ7CiAKIAkJCWlmIChhcmdbcG9zKytdID09ICcxJykKIAkJCQlpZHggPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUyBiL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKaW5kZXggODJlOGExZC4uMTU2ZWJjYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUworKysgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCkBAIC0xNzksOCArMTc5LDggQEAKIHN5c2V4aXRfZnJvbV9zeXNfY2FsbDoKIAlhbmRsICAgICR+VFNfQ09NUEFULFRJX3N0YXR1cytUSFJFQURfSU5GTyglcnNwLFJJUC1BUkdPRkZTRVQpCiAJLyogY2xlYXIgSUYsIHRoYXQgcG9wZnEgZG9lc24ndCBlbmFibGUgaW50ZXJydXB0cyBlYXJseSAqLwotCWFuZGwgICR+MHgyMDAsRUZMQUdTLVIxMSglcnNwKSAKLQltb3ZsCVJJUC1SMTEoJXJzcCksJWVkeAkJLyogVXNlciAlZWlwICovCisJYW5kbAkkfjB4MjAwLEVGTEFHUy1BUkdPRkZTRVQoJXJzcCkKKwltb3ZsCVJJUC1BUkdPRkZTRVQoJXJzcCksJWVkeAkJLyogVXNlciAlZWlwICovCiAJQ0ZJX1JFR0lTVEVSIHJpcCxyZHgKIAlSRVNUT1JFX0FSR1MgMCwyNCwwLDAsMCwwCiAJeG9ycQklcjgsJXI4CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKaW5kZXggNDY1YjMwOS4uOTIwMDNmMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaApAQCAtMTA2LDcgKzEwNiwxNCBAQAogZXh0ZXJuIHZvaWQgbmF0aXZlX2FwaWNfaWNyX3dyaXRlKHUzMiBsb3csIHUzMiBpZCk7CiBleHRlcm4gdTY0IG5hdGl2ZV9hcGljX2ljcl9yZWFkKHZvaWQpOwogCi1leHRlcm4gaW50IHgyYXBpY19tb2RlOworc3RhdGljIGlubGluZSBib29sIGFwaWNfaXNfeDJhcGljX2VuYWJsZWQodm9pZCkKK3sKKwl1NjQgbXNyOworCisJaWYgKHJkbXNybF9zYWZlKE1TUl9JQTMyX0FQSUNCQVNFLCAmbXNyKSkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiBtc3IgJiBYMkFQSUNfRU5BQkxFOworfQogCiAjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKIC8qCkBAIC0xNjksNDggKzE3NiwyMyBAQAogCXJldHVybiB2YWw7CiB9CiAKK2V4dGVybiBpbnQgeDJhcGljX21vZGU7CiBleHRlcm4gaW50IHgyYXBpY19waHlzOwotZXh0ZXJuIGludCB4MmFwaWNfcHJlZW5hYmxlZDsKLWV4dGVybiB2b2lkIGNoZWNrX3gyYXBpYyh2b2lkKTsKLWV4dGVybiB2b2lkIGVuYWJsZV94MmFwaWModm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgY2hlY2tfeDJhcGljKHZvaWQpOworZXh0ZXJuIHZvaWQgeDJhcGljX3NldHVwKHZvaWQpOwogc3RhdGljIGlubGluZSBpbnQgeDJhcGljX2VuYWJsZWQodm9pZCkKIHsKLQl1NjQgbXNyOwotCi0JaWYgKCFjcHVfaGFzX3gyYXBpYykKLQkJcmV0dXJuIDA7Ci0KLQlyZG1zcmwoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zcik7Ci0JaWYgKG1zciAmIFgyQVBJQ19FTkFCTEUpCi0JCXJldHVybiAxOwotCXJldHVybiAwOworCXJldHVybiBjcHVfaGFzX3gyYXBpYyAmJiBhcGljX2lzX3gyYXBpY19lbmFibGVkKCk7CiB9CiAKICNkZWZpbmUgeDJhcGljX3N1cHBvcnRlZCgpCShjcHVfaGFzX3gyYXBpYykKLXN0YXRpYyBpbmxpbmUgdm9pZCB4MmFwaWNfZm9yY2VfcGh5cyh2b2lkKQotewotCXgyYXBpY19waHlzID0gMTsKLX0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlzYWJsZV94MmFwaWModm9pZCkKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja194MmFwaWModm9pZCkKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfeDJhcGljKHZvaWQpCi17Ci19Ci1zdGF0aWMgaW5saW5lIGludCB4MmFwaWNfZW5hYmxlZCh2b2lkKQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSB2b2lkIHgyYXBpY19mb3JjZV9waHlzKHZvaWQpCi17Ci19CitzdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfeDJhcGljKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHgyYXBpY19zZXR1cCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHgyYXBpY19lbmFibGVkKHZvaWQpIHsgcmV0dXJuIDA7IH0KIAotI2RlZmluZQl4MmFwaWNfcHJlZW5hYmxlZCAwCi0jZGVmaW5lCXgyYXBpY19zdXBwb3J0ZWQoKQkwCisjZGVmaW5lIHgyYXBpY19tb2RlCQkoMCkKKyNkZWZpbmUJeDJhcGljX3N1cHBvcnRlZCgpCSgwKQogI2VuZGlmCiAKIGV4dGVybiB2b2lkIGVuYWJsZV9JUl94MmFwaWModm9pZCk7CkBAIC0yMTksNyArMjAxLDYgQEAKIAogZXh0ZXJuIGludCBsYXBpY19nZXRfbWF4bHZ0KHZvaWQpOwogZXh0ZXJuIHZvaWQgY2xlYXJfbG9jYWxfQVBJQyh2b2lkKTsKLWV4dGVybiB2b2lkIGNvbm5lY3RfYnNwX0FQSUModm9pZCk7CiBleHRlcm4gdm9pZCBkaXNjb25uZWN0X2JzcF9BUElDKGludCB2aXJ0X3dpcmVfc2V0dXApOwogZXh0ZXJuIHZvaWQgZGlzYWJsZV9sb2NhbF9BUElDKHZvaWQpOwogZXh0ZXJuIHZvaWQgbGFwaWNfc2h1dGRvd24odm9pZCk7CkBAIC0yMjcsOCArMjA4LDYgQEAKIGV4dGVybiB2b2lkIHN5bmNfQXJiX0lEcyh2b2lkKTsKIGV4dGVybiB2b2lkIGluaXRfYnNwX0FQSUModm9pZCk7CiBleHRlcm4gdm9pZCBzZXR1cF9sb2NhbF9BUElDKHZvaWQpOwotZXh0ZXJuIHZvaWQgZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCk7Ci1leHRlcm4gdm9pZCBic3BfZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCk7CiBleHRlcm4gdm9pZCBpbml0X2FwaWNfbWFwcGluZ3Modm9pZCk7CiB2b2lkIHJlZ2lzdGVyX2xhcGljX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIGV4dGVybiB2b2lkIHNldHVwX2Jvb3RfQVBJQ19jbG9jayh2b2lkKTsKQEAgLTIzNiw2ICsyMTUsOSBAQAogZXh0ZXJuIGludCBBUElDX2luaXRfdW5pcHJvY2Vzc29yKHZvaWQpOwogZXh0ZXJuIGludCBhcGljX2ZvcmNlX2VuYWJsZSh1bnNpZ25lZCBsb25nIGFkZHIpOwogCitleHRlcm4gaW50IGFwaWNfYnNwX3NldHVwKGJvb2wgdXBtb2RlKTsKK2V4dGVybiB2b2lkIGFwaWNfYXBfc2V0dXAodm9pZCk7CisKIC8qCiAgKiBPbiAzMmJpdCB0aGlzIGlzIG1hY2gteHh4IGxvY2FsCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhbGxpbmcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhbGxpbmcuaAppbmRleCA3NjY1OWI2Li4xZjEyOTdiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWxsaW5nLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FsbGluZy5oCkBAIC04Myw3ICs4Myw2IEBACiAjZGVmaW5lIFNTCQkxNjAKIAogI2RlZmluZSBBUkdPRkZTRVQJUjExCi0jZGVmaW5lIFNXRlJBTUUJCU9SSUdfUkFYCiAKIAkubWFjcm8gU0FWRV9BUkdTIGFkZHNraXA9MCwgc2F2ZV9yY3g9MSwgc2F2ZV9yODkxMDExPTEsIHJheF9lbm9zeXM9MAogCXN1YnEgICQ5KjgrXGFkZHNraXAsICVyc3AKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdWZlYXR1cmUuaAppbmRleCBhZWRlMmMzLi45MGE1NDg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCkBAIC0xNzQsNiArMTc0LDcgQEAKICNkZWZpbmUgWDg2X0ZFQVRVUkVfVE9QT0VYVAkoIDYqMzIrMjIpIC8qIHRvcG9sb2d5IGV4dGVuc2lvbnMgQ1BVSUQgbGVhZnMgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfUEVSRkNUUl9DT1JFICggNiozMisyMykgLyogY29yZSBwZXJmb3JtYW5jZSBjb3VudGVyIGV4dGVuc2lvbnMgKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfUEVSRkNUUl9OQiAgKCA2KjMyKzI0KSAvKiBOQiBwZXJmb3JtYW5jZSBjb3VudGVyIGV4dGVuc2lvbnMgKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfQlBFWFQJKDYqMzIrMjYpIC8qIGRhdGEgYnJlYWtwb2ludCBleHRlbnNpb24gKi8KICNkZWZpbmUgWDg2X0ZFQVRVUkVfUEVSRkNUUl9MMgkoIDYqMzIrMjgpIC8qIEwyIHBlcmZvcm1hbmNlIGNvdW50ZXIgZXh0ZW5zaW9ucyAqLwogCiAvKgpAQCAtMzg4LDYgKzM4OSw3IEBACiAjZGVmaW5lIGNwdV9oYXNfY3gxNgkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0NYMTYpCiAjZGVmaW5lIGNwdV9oYXNfZWFnZXJfZnB1CWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9FQUdFUl9GUFUpCiAjZGVmaW5lIGNwdV9oYXNfdG9wb2V4dAkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1RPUE9FWFQpCisjZGVmaW5lIGNwdV9oYXNfYnBleHQJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9CUEVYVCkKIAogI2lmIF9fR05VQ19fID49IDQKIGV4dGVybiB2b2lkIHdhcm5fcHJlX2FsdGVybmF0aXZlcyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RlYnVncmVnLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZWJ1Z3JlZy5oCmluZGV4IDYxZmQxOGIuLjEyY2I2NmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RlYnVncmVnLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVidWdyZWcuaApAQCAtMTE0LDUgKzExNCwxMCBAQAogc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3N0YWNrX3VzYWdlX2RlYyh2b2lkKSB7IH0KICNlbmRpZiAvKiBYODZfNjQgKi8KIAorI2lmZGVmIENPTkZJR19DUFVfU1VQX0FNRAorZXh0ZXJuIHZvaWQgc2V0X2RyX2FkZHJfbWFzayh1bnNpZ25lZCBsb25nIG1hc2ssIGludCBkcik7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNldF9kcl9hZGRyX21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCBpbnQgZHIpIHsgfQorI2VuZGlmCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9ERUJVR1JFR19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mcHUtaW50ZXJuYWwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZwdS1pbnRlcm5hbC5oCmluZGV4IGU5NzYyMmYuLjBkYmMwODIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZwdS1pbnRlcm5hbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2ZwdS1pbnRlcm5hbC5oCkBAIC0yMDcsNyArMjA3LDcgQEAKIAlpZiAoY29uZmlnX2VuYWJsZWQoQ09ORklHX1g4Nl8zMikpCiAJCWFzbSB2b2xhdGlsZSggImZ4c2F2ZSAlW2Z4XSIgOiBbZnhdICI9bSIgKGZwdS0+c3RhdGUtPmZ4c2F2ZSkpOwogCWVsc2UgaWYgKGNvbmZpZ19lbmFibGVkKENPTkZJR19BU19GWFNBVkVRKSkKLQkJYXNtIHZvbGF0aWxlKCJmeHNhdmVxICUwIiA6ICI9bSIgKGZwdS0+c3RhdGUtPmZ4c2F2ZSkpOworCQlhc20gdm9sYXRpbGUoImZ4c2F2ZXEgJVtmeF0iIDogW2Z4XSAiPW0iIChmcHUtPnN0YXRlLT5meHNhdmUpKTsKIAllbHNlIHsKIAkJLyogVXNpbmcgInJleDY0OyBmeHNhdmUgJTAiIGlzIGJyb2tlbiBiZWNhdXNlLCBpZiB0aGUgbWVtb3J5CiAJCSAqIG9wZXJhbmQgdXNlcyBhbnkgZXh0ZW5kZWQgcmVnaXN0ZXJzIGZvciBhZGRyZXNzaW5nLCBhIHNlY29uZApAQCAtMjkwLDkgKzI5MCwxMSBAQAogCiBzdGF0aWMgaW5saW5lIGludCByZXN0b3JlX2ZwdV9jaGVja2luZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQkvKiBBTUQgSzcvSzggQ1BVcyBkb24ndCBzYXZlL3Jlc3RvcmUgRkRQL0ZJUC9GT1AgdW5sZXNzIGFuIGV4Y2VwdGlvbgotCSAgIGlzIHBlbmRpbmcuICBDbGVhciB0aGUgeDg3IHN0YXRlIGhlcmUgYnkgc2V0dGluZyBpdCB0byBmaXhlZAotCSAgIHZhbHVlcy4gIm0iIGlzIGEgcmFuZG9tIHZhcmlhYmxlIHRoYXQgc2hvdWxkIGJlIGluIEwxICovCisJLyoKKwkgKiBBTUQgSzcvSzggQ1BVcyBkb24ndCBzYXZlL3Jlc3RvcmUgRkRQL0ZJUC9GT1AgdW5sZXNzIGFuIGV4Y2VwdGlvbiBpcworCSAqIHBlbmRpbmcuIENsZWFyIHRoZSB4ODcgc3RhdGUgaGVyZSBieSBzZXR0aW5nIGl0IHRvIGZpeGVkIHZhbHVlcy4KKwkgKiAibSIgaXMgYSByYW5kb20gdmFyaWFibGUgdGhhdCBzaG91bGQgYmUgaW4gTDEuCisJICovCiAJaWYgKHVubGlrZWx5KHN0YXRpY19jcHVfaGFzX2J1Z19zYWZlKFg4Nl9CVUdfRlhTQVZFX0xFQUspKSkgewogCQlhc20gdm9sYXRpbGUoCiAJCQkiZm5jbGV4XG5cdCIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2JyZWFrcG9pbnQuaAppbmRleCBlZjFjNGQyLi42Yzk4YmU4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19icmVha3BvaW50LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfYnJlYWtwb2ludC5oCkBAIC0xMiw2ICsxMiw3IEBACiAgKi8KIHN0cnVjdCBhcmNoX2h3X2JyZWFrcG9pbnQgewogCXVuc2lnbmVkIGxvbmcJYWRkcmVzczsKKwl1bnNpZ25lZCBsb25nCW1hc2s7CiAJdTgJCWxlbjsKIAl1OAkJdHlwZTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKaW5kZXggZWQ4MDg5ZDYuLjZlYjZmY2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2kzODcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pMzg3LmgKQEAgLTQwLDggKzQwLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGtlcm5lbF9mcHVfYmVnaW4odm9pZCkKIHsKLQlXQVJOX09OX09OQ0UoIWlycV9mcHVfdXNhYmxlKCkpOwogCXByZWVtcHRfZGlzYWJsZSgpOworCVdBUk5fT05fT05DRSghaXJxX2ZwdV91c2FibGUoKSk7CiAJX19rZXJuZWxfZnB1X2JlZ2luKCk7CiB9CiAKQEAgLTUxLDYgKzUxLDEwIEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIH0KIAorLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0IGRpc2FibGVkICovCitleHRlcm4gdm9pZCBrZXJuZWxfZnB1X2Rpc2FibGUodm9pZCk7CitleHRlcm4gdm9pZCBrZXJuZWxfZnB1X2VuYWJsZSh2b2lkKTsKKwogLyoKICAqIFNvbWUgaW5zdHJ1Y3Rpb25zIGxpa2UgVklBJ3MgcGFkbG9jayBpbnN0cnVjdGlvbnMgZ2VuZXJhdGUgYSBzcHVyaW91cwogICogRE5BIGZhdWx0IGJ1dCBkb24ndCBtb2RpZnkgU1NFIHJlZ2lzdGVycy4gQW5kIHRoZXNlIGluc3RydWN0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCmluZGV4IGJmMDA2Y2MuLjJmOTE2ODUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKQEAgLTI3OSw2ICsyNzksMTEgQEAKICNkZWZpbmUgbmF0aXZlX2lvYXBpY19zZXRfYWZmaW5pdHkJTlVMTAogI2RlZmluZSBuYXRpdmVfc2V0dXBfaW9hcGljX2VudHJ5CU5VTEwKICNkZWZpbmUgbmF0aXZlX2VvaV9pb2FwaWNfcGluCQlOVUxMCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9JT19BUElDKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGVuYWJsZV9JT19BUElDKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHNldHVwX2lvYXBpY19kZXN0KHZvaWQpIHsgfQorCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X0lPX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oCmluZGV4IGI3NzQ3YzQuLjYyMjRkMzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmgKQEAgLTMzLDggKzMzLDYgQEAKIAogI2lmZGVmIENPTkZJR19JUlFfUkVNQVAKIAotZXh0ZXJuIHZvaWQgc2V0dXBfaXJxX3JlbWFwcGluZ19vcHModm9pZCk7Ci1leHRlcm4gaW50IGlycV9yZW1hcHBpbmdfc3VwcG9ydGVkKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2V0X2lycV9yZW1hcHBpbmdfYnJva2VuKHZvaWQpOwogZXh0ZXJuIGludCBpcnFfcmVtYXBwaW5nX3ByZXBhcmUodm9pZCk7CiBleHRlcm4gaW50IGlycV9yZW1hcHBpbmdfZW5hYmxlKHZvaWQpOwpAQCAtNjAsOCArNTgsNiBAQAogCiAjZWxzZSAgLyogQ09ORklHX0lSUV9SRU1BUCAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfaXJxX3JlbWFwcGluZ19vcHModm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIGludCBpcnFfcmVtYXBwaW5nX3N1cHBvcnRlZCh2b2lkKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lycV9yZW1hcHBpbmdfYnJva2VuKHZvaWQpIHsgfQogc3RhdGljIGlubGluZSBpbnQgaXJxX3JlbWFwcGluZ19wcmVwYXJlKHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGlycV9yZW1hcHBpbmdfZW5hYmxlKHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xpdmVwYXRjaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbGl2ZXBhdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ1NWE1MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xpdmVwYXRjaC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBsaXZlcGF0Y2guaCAtIHg4Ni1zcGVjaWZpYyBLZXJuZWwgTGl2ZSBQYXRjaGluZyBDb3JlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNldGggSmVubmluZ3MgPHNqZW5uaW5nQHJlZGhhdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU1VTRQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIF9BU01fWDg2X0xJVkVQQVRDSF9ICisjZGVmaW5lIF9BU01fWDg2X0xJVkVQQVRDSF9ICisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKworI2lmZGVmIENPTkZJR19MSVZFUEFUQ0gKK3N0YXRpYyBpbmxpbmUgaW50IGtscF9jaGVja19jb21waWxlcl9zdXBwb3J0KHZvaWQpCit7CisjaWZuZGVmIENDX1VTSU5HX0ZFTlRSWQorCXJldHVybiAxOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CitleHRlcm4gaW50IGtscF93cml0ZV9tb2R1bGVfcmVsb2Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHR5cGUsCisJCQkJICB1bnNpZ25lZCBsb25nIGxvYywgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrbHBfYXJjaF9zZXRfcGMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgaXApCit7CisJcmVncy0+aXAgPSBpcDsKK30KKyNlbHNlCisjZXJyb3IgTGl2ZSBwYXRjaGluZyBzdXBwb3J0IGlzIGRpc2FibGVkOyBjaGVjayBDT05GSUdfTElWRVBBVENICisjZW5kaWYKKworI2VuZGlmIC8qIF9BU01fWDg2X0xJVkVQQVRDSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCmluZGV4IDUxYjI2ZTg5Li45YjNkZTk5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaApAQCAtMTkwLDcgKzE5MCw2IEBACiB2b2lkIG1hY2hpbmVfY2hlY2tfcG9sbChlbnVtIG1jcF9mbGFncyBmbGFncywgbWNlX2JhbmtzX3QgKmIpOwogCiBpbnQgbWNlX25vdGlmeV9pcnEodm9pZCk7Ci12b2lkIG1jZV9ub3RpZnlfcHJvY2Vzcyh2b2lkKTsKIAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtY2UsIGluamVjdG0pOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmgKaW5kZXggMTY0ZTNmOC4uZmExMTk1ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpX3g4Ni5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV94ODYuaApAQCAtOTMsOCArOTMsNiBAQAogZXh0ZXJuIGludCAoKnBjaWJpb3NfZW5hYmxlX2lycSkoc3RydWN0IHBjaV9kZXYgKmRldik7CiBleHRlcm4gdm9pZCAoKnBjaWJpb3NfZGlzYWJsZV9pcnEpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogCi1leHRlcm4gYm9vbCBtcF9zaG91bGRfa2VlcF9pcnEoc3RydWN0IGRldmljZSAqZGV2KTsKLQogc3RydWN0IHBjaV9yYXdfb3BzIHsKIAlpbnQgKCpyZWFkKSh1bnNpZ25lZCBpbnQgZG9tYWluLCB1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCiAJCQkJCQlpbnQgcmVnLCBpbnQgbGVuLCB1MzIgKnZhbCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaAppbmRleCAyMDZhODdmLi5mZDc0YTExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmgKQEAgLTYyLDQ0ICs2Miw4IEBACiAJcmV0dXJuICgodmFsdWUgPj4gcmlnaHRzaGlmdCkgJiBtYXNrKSA8PCBsZWZ0c2hpZnQ7CiB9CiAKLS8qCi0gKiBCaXRzIF9QQUdFX0JJVF9QUkVTRU5ULCBfUEFHRV9CSVRfRklMRSBhbmQgX1BBR0VfQklUX1BST1ROT05FIGFyZSB0YWtlbiwKLSAqIHNwbGl0IHVwIHRoZSAyOSBiaXRzIG9mIG9mZnNldCBpbnRvIHRoaXMgcmFuZ2UuCi0gKi8KLSNkZWZpbmUgUFRFX0ZJTEVfTUFYX0JJVFMJMjkKLSNkZWZpbmUgUFRFX0ZJTEVfU0hJRlQxCQkoX1BBR0VfQklUX1BSRVNFTlQgKyAxKQotI2RlZmluZSBQVEVfRklMRV9TSElGVDIJCShfUEFHRV9CSVRfRklMRSArIDEpCi0jZGVmaW5lIFBURV9GSUxFX1NISUZUMwkJKF9QQUdFX0JJVF9QUk9UTk9ORSArIDEpCi0jZGVmaW5lIFBURV9GSUxFX0JJVFMxCQkoUFRFX0ZJTEVfU0hJRlQyIC0gUFRFX0ZJTEVfU0hJRlQxIC0gMSkKLSNkZWZpbmUgUFRFX0ZJTEVfQklUUzIJCShQVEVfRklMRV9TSElGVDMgLSBQVEVfRklMRV9TSElGVDIgLSAxKQotCi0jZGVmaW5lIFBURV9GSUxFX01BU0sxCQkoKDFVIDw8IFBURV9GSUxFX0JJVFMxKSAtIDEpCi0jZGVmaW5lIFBURV9GSUxFX01BU0syCQkoKDFVIDw8IFBURV9GSUxFX0JJVFMyKSAtIDEpCi0KLSNkZWZpbmUgUFRFX0ZJTEVfTFNISUZUMgkoUFRFX0ZJTEVfQklUUzEpCi0jZGVmaW5lIFBURV9GSUxFX0xTSElGVDMJKFBURV9GSUxFX0JJVFMxICsgUFRFX0ZJTEVfQklUUzIpCi0KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcGdvZmZfdCBwdGVfdG9fcGdvZmYocHRlX3QgcHRlKQotewotCXJldHVybiAocGdvZmZfdCkKLQkJKHB0ZV9iaXRvcChwdGUucHRlX2xvdywgUFRFX0ZJTEVfU0hJRlQxLCBQVEVfRklMRV9NQVNLMSwgIDApCQkgICAgKwotCQkgcHRlX2JpdG9wKHB0ZS5wdGVfbG93LCBQVEVfRklMRV9TSElGVDIsIFBURV9GSUxFX01BU0syLCAgUFRFX0ZJTEVfTFNISUZUMikgKwotCQkgcHRlX2JpdG9wKHB0ZS5wdGVfbG93LCBQVEVfRklMRV9TSElGVDMsICAgICAgICAgICAtMVVMLCAgUFRFX0ZJTEVfTFNISUZUMykpOwotfQotCi1zdGF0aWMgX19hbHdheXNfaW5saW5lIHB0ZV90IHBnb2ZmX3RvX3B0ZShwZ29mZl90IG9mZikKLXsKLQlyZXR1cm4gKHB0ZV90KXsKLQkJLnB0ZV9sb3cgPQotCQkJcHRlX2JpdG9wKG9mZiwgICAgICAgICAgICAgICAgMCwgUFRFX0ZJTEVfTUFTSzEsICBQVEVfRklMRV9TSElGVDEpICsKLQkJCXB0ZV9iaXRvcChvZmYsIFBURV9GSUxFX0xTSElGVDIsIFBURV9GSUxFX01BU0syLCAgUFRFX0ZJTEVfU0hJRlQyKSArCi0JCQlwdGVfYml0b3Aob2ZmLCBQVEVfRklMRV9MU0hJRlQzLCAgICAgICAgICAgLTFVTCwgIFBURV9GSUxFX1NISUZUMykgKwotCQkJX1BBR0VfRklMRSwKLQl9OwotfQotCiAvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCi0jZGVmaW5lIFNXUF9UWVBFX0JJVFMgKF9QQUdFX0JJVF9GSUxFIC0gX1BBR0VfQklUX1BSRVNFTlQgLSAxKQorI2RlZmluZSBTV1BfVFlQRV9CSVRTIDUKICNkZWZpbmUgU1dQX09GRlNFVF9TSElGVCAoX1BBR0VfQklUX1BST1ROT05FICsgMSkKIAogI2RlZmluZSBNQVhfU1dBUEZJTEVTX0NIRUNLKCkgQlVJTERfQlVHX09OKE1BWF9TV0FQRklMRVNfU0hJRlQgPiBTV1BfVFlQRV9CSVRTKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKaW5kZXggODFiYjkxYi4uY2RhYTU4YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCkBAIC0xNzYsMTggKzE3Niw2IEBACiAjZGVmaW5lIG5hdGl2ZV9wbWRwX2dldF9hbmRfY2xlYXIoeHApIG5hdGl2ZV9sb2NhbF9wbWRwX2dldF9hbmRfY2xlYXIoeHApCiAjZW5kaWYKIAotLyoKLSAqIEJpdHMgMCwgNiBhbmQgNyBhcmUgdGFrZW4gaW4gdGhlIGxvdyBwYXJ0IG9mIHRoZSBwdGUsCi0gKiBwdXQgdGhlIDMyIGJpdHMgb2Ygb2Zmc2V0IGludG8gdGhlIGhpZ2ggcGFydC4KLSAqCi0gKiBGb3Igc29mdC1kaXJ0eSB0cmFja2luZyAxMSBiaXQgaXMgdGFrZW4gZnJvbQotICogdGhlIGxvdyBwYXJ0IG9mIHB0ZSBhcyB3ZWxsLgotICovCi0jZGVmaW5lIHB0ZV90b19wZ29mZihwdGUpICgocHRlKS5wdGVfaGlnaCkKLSNkZWZpbmUgcGdvZmZfdG9fcHRlKG9mZikJCQkJCQlcCi0JKChwdGVfdCkgeyB7IC5wdGVfbG93ID0gX1BBR0VfRklMRSwgLnB0ZV9oaWdoID0gKG9mZikgfSB9KQotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUyAgICAgICAzMgotCiAvKiBFbmNvZGUgYW5kIGRlLWNvZGUgYSBzd2FwIGVudHJ5ICovCiAjZGVmaW5lIE1BWF9TV0FQRklMRVNfQ0hFQ0soKSBCVUlMRF9CVUdfT04oTUFYX1NXQVBGSUxFU19TSElGVCA+IDUpCiAjZGVmaW5lIF9fc3dwX3R5cGUoeCkJCQkoKCh4KS52YWwpICYgMHgxZikKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBlOGE1NDU0Li4wZmUwM2Y4MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtMTE1LDExICsxMTUsNiBAQAogCXJldHVybiBwdGVfZmxhZ3MocHRlKSAmIF9QQUdFX1JXOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIHB0ZV9mbGFncyhwdGUpICYgX1BBR0VfRklMRTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgcHRlX2h1Z2UocHRlX3QgcHRlKQogewogCXJldHVybiBwdGVfZmxhZ3MocHRlKSAmIF9QQUdFX1BTRTsKQEAgLTMyOSwyMSArMzI0LDYgQEAKIAlyZXR1cm4gcG1kX3NldF9mbGFncyhwbWQsIF9QQUdFX1NPRlRfRElSVFkpOwogfQogCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9maWxlX2NsZWFyX3NvZnRfZGlydHkocHRlX3QgcHRlKQotewotCXJldHVybiBwdGVfY2xlYXJfZmxhZ3MocHRlLCBfUEFHRV9TT0ZUX0RJUlRZKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfZmlsZV9ta3NvZnRfZGlydHkocHRlX3QgcHRlKQotewotCXJldHVybiBwdGVfc2V0X2ZsYWdzKHB0ZSwgX1BBR0VfU09GVF9ESVJUWSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlX3NvZnRfZGlydHkocHRlX3QgcHRlKQotewotCXJldHVybiBwdGVfZmxhZ3MocHRlKSAmIF9QQUdFX1NPRlRfRElSVFk7Ci19Ci0KICNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX1NPRlRfRElSVFkgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfNjQuaAppbmRleCA0NTcyYjJmLi5lMjI3OTcwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV82NC5oCkBAIC0xMzMsMTAgKzEzMyw2IEBACiAvKiBQVUQgLSBMZXZlbDMgYWNjZXNzICovCiAKIC8qIFBNRCAgLSBMZXZlbCAyIGFjY2VzcyAqLwotI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKSAoKHB0ZV92YWwoKHB0ZSkpICYgUEhZU0lDQUxfUEFHRV9NQVNLKSA+PiBQQUdFX1NISUZUKQotI2RlZmluZSBwZ29mZl90b19wdGUob2ZmKSAoKHB0ZV90KSB7IC5wdGUgPSAoKG9mZikgPDwgUEFHRV9TSElGVCkgfAlcCi0JCQkJCSAgICBfUEFHRV9GSUxFIH0pCi0jZGVmaW5lIFBURV9GSUxFX01BWF9CSVRTIF9fUEhZU0lDQUxfTUFTS19TSElGVAogCiAvKiBQVEUgLSBMZXZlbCAxIGFjY2Vzcy4gKi8KIApAQCAtMTQ1LDcgKzE0MSw3IEBACiAjZGVmaW5lIHB0ZV91bm1hcChwdGUpICgodm9pZCkocHRlKSkvKiBOT1AgKi8KIAogLyogRW5jb2RlIGFuZCBkZS1jb2RlIGEgc3dhcCBlbnRyeSAqLwotI2RlZmluZSBTV1BfVFlQRV9CSVRTIChfUEFHRV9CSVRfRklMRSAtIF9QQUdFX0JJVF9QUkVTRU5UIC0gMSkKKyNkZWZpbmUgU1dQX1RZUEVfQklUUyA1CiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HCiAvKiBBdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgbmVlZHMgdG8gYmUgZGlzdGluZ3Vpc2hhYmxlIGZyb20gc3dhcCBlbnRyaWVzICovCiAjZGVmaW5lIFNXUF9PRkZTRVRfU0hJRlQgKF9QQUdFX0JJVF9QUk9UTk9ORSArIDIpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKaW5kZXggMjViY2Q0YTguLjNlMDIzMGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KICNpbmNsdWRlIDxhc20vcGFnZV90eXBlcy5oPgogCi0jZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwCisjZGVmaW5lIEZJUlNUX1VTRVJfQUREUkVTUwkwVUwKIAogI2RlZmluZSBfUEFHRV9CSVRfUFJFU0VOVAkwCS8qIGlzIHByZXNlbnQgKi8KICNkZWZpbmUgX1BBR0VfQklUX1JXCQkxCS8qIHdyaXRlYWJsZSAqLwpAQCAtMzgsOCArMzgsNiBAQAogLyogSWYgX1BBR0VfQklUX1BSRVNFTlQgaXMgY2xlYXIsIHdlIHVzZSB0aGVzZTogKi8KIC8qIC0gaWYgdGhlIHVzZXIgbWFwcGVkIGl0IHdpdGggUFJPVF9OT05FOyBwdGVfcHJlc2VudCBnaXZlcyB0cnVlICovCiAjZGVmaW5lIF9QQUdFX0JJVF9QUk9UTk9ORQlfUEFHRV9CSVRfR0xPQkFMCi0vKiAtIHNldDogbm9ubGluZWFyIGZpbGUgbWFwcGluZywgc2F2ZWQgUFRFOyB1bnNldDpzd2FwICovCi0jZGVmaW5lIF9QQUdFX0JJVF9GSUxFCQlfUEFHRV9CSVRfRElSVFkKIAogI2RlZmluZSBfUEFHRV9QUkVTRU5UCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9QUkVTRU5UKQogI2RlZmluZSBfUEFHRV9SVwkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUlcpCkBAIC0xMTQsNyArMTEyLDYgQEAKICNkZWZpbmUgX1BBR0VfTlgJKF9BVChwdGV2YWxfdCwgMCkpCiAjZW5kaWYKIAotI2RlZmluZSBfUEFHRV9GSUxFCShfQVQocHRldmFsX3QsIDEpIDw8IF9QQUdFX0JJVF9GSUxFKQogI2RlZmluZSBfUEFHRV9QUk9UTk9ORQkoX0FUKHB0ZXZhbF90LCAxKSA8PCBfUEFHRV9CSVRfUFJPVE5PTkUpCiAKICNkZWZpbmUgX1BBR0VfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfAlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wbWNfYXRvbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcG1jX2F0b20uaAppbmRleCBmYzdhMTdjLi5iYzBmYzA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wbWNfYXRvbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BtY19hdG9tLmgKQEAgLTUzLDYgKzUzLDI4IEBACiAvKiBTbGVlcCBzdGF0ZSBjb3VudGVyIGlzIGluIHVuaXRzIG9mIG9mIDMydXMgKi8KICNkZWZpbmUJUE1DX1RNUl9TSElGVAkJNQogCisvKiBQb3dlciBzdGF0dXMgb2YgcG93ZXIgaXNsYW5kcyAqLworI2RlZmluZQlQTUNfUFNTCQkJMHg5OAorCisjZGVmaW5lIFBNQ19QU1NfQklUX0dCRQkJCUJJVCgwKQorI2RlZmluZSBQTUNfUFNTX0JJVF9TQVRBCQlCSVQoMSkKKyNkZWZpbmUgUE1DX1BTU19CSVRfSERBCQkJQklUKDIpCisjZGVmaW5lIFBNQ19QU1NfQklUX1NFQwkJCUJJVCgzKQorI2RlZmluZSBQTUNfUFNTX0JJVF9QQ0lFCQlCSVQoNCkKKyNkZWZpbmUgUE1DX1BTU19CSVRfTFBTUwkJQklUKDUpCisjZGVmaW5lIFBNQ19QU1NfQklUX0xQRQkJCUJJVCg2KQorI2RlZmluZSBQTUNfUFNTX0JJVF9ERlgJCQlCSVQoNykKKyNkZWZpbmUgUE1DX1BTU19CSVRfVVNIX0NUUkwJCUJJVCg4KQorI2RlZmluZSBQTUNfUFNTX0JJVF9VU0hfU1VTCQlCSVQoOSkKKyNkZWZpbmUgUE1DX1BTU19CSVRfVVNIX1ZDQ1MJCUJJVCgxMCkKKyNkZWZpbmUgUE1DX1BTU19CSVRfVVNIX1ZDQ0EJCUJJVCgxMSkKKyNkZWZpbmUgUE1DX1BTU19CSVRfT1RHX0NUUkwJCUJJVCgxMikKKyNkZWZpbmUgUE1DX1BTU19CSVRfT1RHX1ZDQ1MJCUJJVCgxMykKKyNkZWZpbmUgUE1DX1BTU19CSVRfT1RHX1ZDQ0FfQ0xLCUJJVCgxNCkKKyNkZWZpbmUgUE1DX1BTU19CSVRfT1RHX1ZDQ0EJCUJJVCgxNSkKKyNkZWZpbmUgUE1DX1BTU19CSVRfVVNCCQkJQklUKDE2KQorI2RlZmluZSBQTUNfUFNTX0JJVF9VU0JfU1VTCQlCSVQoMTcpCisKIC8qIFRoZXNlIHJlZ2lzdGVycyByZWZsZWN0IEQzIHN0YXR1cyBvZiBmdW5jdGlvbnMgKi8KICNkZWZpbmUJUE1DX0QzX1NUU18wCQkweEEwCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcGJvb3RfaG9va3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcGJvb3RfaG9va3MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGRhNzQwOS4uMDAwMDAwMAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXBib290X2hvb2tzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKiB0d28gYWJzdHJhY3Rpb25zIHNwZWNpZmljIHRvIGtlcm5lbC9zbXBib290LmMsIG1haW5seSB0byBjYXRlciB0byB2aXN3cwotICogd2hpY2ggbmVlZHMgdG8gYWx0ZXIgdGhlbS4gKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHNtcGJvb3RfY2xlYXJfaW9fYXBpY19pcnFzKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JaW9fYXBpY19pcnFzID0gMDsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc21wYm9vdF9zZXR1cF93YXJtX3Jlc2V0X3ZlY3Rvcih1bnNpZ25lZCBsb25nIHN0YXJ0X2VpcCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7Ci0JQ01PU19XUklURSgweGEsIDB4Zik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKLQlsb2NhbF9mbHVzaF90bGIoKTsKLQlwcl9kZWJ1ZygiMS5cbiIpOwotCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcGh5c190b192aXJ0KFRSQU1QT0xJTkVfUEhZU19ISUdIKSkgPQotCQkJCQkJCXN0YXJ0X2VpcCA+PiA0OwotCXByX2RlYnVnKCIyLlxuIik7Ci0JKigodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwaHlzX3RvX3ZpcnQoVFJBTVBPTElORV9QSFlTX0xPVykpID0KLQkJCQkJCQlzdGFydF9laXAgJiAweGY7Ci0JcHJfZGVidWcoIjMuXG4iKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNtcGJvb3RfcmVzdG9yZV93YXJtX3Jlc2V0X3ZlY3Rvcih2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKgotCSAqIEluc3RhbGwgd3JpdGFibGUgcGFnZSAwIGVudHJ5IHRvIHNldCBCSU9TIGRhdGEgYXJlYS4KLQkgKi8KLQlsb2NhbF9mbHVzaF90bGIoKTsKLQotCS8qCi0JICogUGFyYW5vaWQ6ICBTZXQgd2FybSByZXNldCBjb2RlIGFuZCB2ZWN0b3IgaGVyZSBiYWNrCi0JICogdG8gZGVmYXVsdCB2YWx1ZXMuCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7Ci0JQ01PU19XUklURSgwLCAweGYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7Ci0KLQkqKCh2b2xhdGlsZSB1MzIgKilwaHlzX3RvX3ZpcnQoVFJBTVBPTElORV9QSFlTX0xPVykpID0gMDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzbXBib290X3NldHVwX2lvX2FwaWModm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQkvKgotCSAqIEhlcmUgd2UgY2FuIGJlIHN1cmUgdGhhdCB0aGVyZSBpcyBhbiBJTy1BUElDIGluIHRoZSBzeXN0ZW0uIExldCdzCi0JICogZ28gYW5kIHNldCBpdCB1cDoKLQkgKi8KLQlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCi0JCXNldHVwX0lPX0FQSUMoKTsKLQllbHNlIHsKLQkJbnJfaW9hcGljcyA9IDA7Ci0JfQotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbXBib290X2NsZWFyX2lvX2FwaWModm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQlucl9pb2FwaWNzID0gMDsKLSNlbmRpZgotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggNTQ3ZTM0NC4uZTgyZTk1YWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaApAQCAtNzUsNyArNzUsNiBAQAogI2RlZmluZSBUSUZfU1lTQ0FMTF9FTVUJCTYJLyogc3lzY2FsbCBlbXVsYXRpb24gYWN0aXZlICovCiAjZGVmaW5lIFRJRl9TWVNDQUxMX0FVRElUCTcJLyogc3lzY2FsbCBhdWRpdGluZyBhY3RpdmUgKi8KICNkZWZpbmUgVElGX1NFQ0NPTVAJCTgJLyogc2VjdXJlIGNvbXB1dGluZyAqLwotI2RlZmluZSBUSUZfTUNFX05PVElGWQkJMTAJLyogbm90aWZ5IHVzZXJzcGFjZSBvZiBhbiBNQ0UgKi8KICNkZWZpbmUgVElGX1VTRVJfUkVUVVJOX05PVElGWQkxMQkvKiBub3RpZnkga2VybmVsIG9mIHVzZXJzcGFjZSByZXR1cm4gKi8KICNkZWZpbmUgVElGX1VQUk9CRQkJMTIJLyogYnJlYWtwb2ludGVkIG9yIHNpbmdsZXN0ZXBwaW5nICovCiAjZGVmaW5lIFRJRl9OT1RTQwkJMTYJLyogVFNDIGlzIG5vdCBhY2Nlc3NpYmxlIGluIHVzZXJsYW5kICovCkBAIC0xMDAsNyArOTksNiBAQAogI2RlZmluZSBfVElGX1NZU0NBTExfRU1VCSgxIDw8IFRJRl9TWVNDQUxMX0VNVSkKICNkZWZpbmUgX1RJRl9TWVNDQUxMX0FVRElUCSgxIDw8IFRJRl9TWVNDQUxMX0FVRElUKQogI2RlZmluZSBfVElGX1NFQ0NPTVAJCSgxIDw8IFRJRl9TRUNDT01QKQotI2RlZmluZSBfVElGX01DRV9OT1RJRlkJCSgxIDw8IFRJRl9NQ0VfTk9USUZZKQogI2RlZmluZSBfVElGX1VTRVJfUkVUVVJOX05PVElGWQkoMSA8PCBUSUZfVVNFUl9SRVRVUk5fTk9USUZZKQogI2RlZmluZSBfVElGX1VQUk9CRQkJKDEgPDwgVElGX1VQUk9CRSkKICNkZWZpbmUgX1RJRl9OT1RTQwkJKDEgPDwgVElGX05PVFNDKQpAQCAtMTQwLDcgKzEzOCw3IEBACiAKIC8qIE9ubHkgdXNlZCBmb3IgNjQgYml0ICovCiAjZGVmaW5lIF9USUZfRE9fTk9USUZZX01BU0sJCQkJCQlcCi0JKF9USUZfU0lHUEVORElORyB8IF9USUZfTUNFX05PVElGWSB8IF9USUZfTk9USUZZX1JFU1VNRSB8CVwKKwkoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9OT1RJRllfUkVTVU1FIHwJCQkJXAogCSBfVElGX1VTRVJfUkVUVVJOX05PVElGWSB8IF9USUZfVVBST0JFKQogCiAvKiBmbGFncyB0byBjaGVjayBpbiBfX3N3aXRjaF90bygpICovCkBAIC0xNzAsNiArMTY4LDE3IEBACiAJcmV0dXJuIHRpOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY3VycmVudF9zdGFja19wb2ludGVyKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzcDsKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJYXNtKCJtb3YgJSVyc3AsJTAiIDogIj1nIiAoc3ApKTsKKyNlbHNlCisJYXNtKCJtb3YgJSVlc3AsJTAiIDogIj1nIiAoc3ApKTsKKyNlbmRpZgorCXJldHVybiBzcDsKK30KKwogI2Vsc2UgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAvKiBob3cgdG8gZ2V0IHRoZSB0aHJlYWQgaW5mb3JtYXRpb24gc3RydWN0IGZyb20gQVNNICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFwcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdHJhcHMuaAppbmRleCA3MDdhZGM2Li40ZTQ5ZDdkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90cmFwcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RyYXBzLmgKQEAgLTEsNiArMSw3IEBACiAjaWZuZGVmIF9BU01fWDg2X1RSQVBTX0gKICNkZWZpbmUgX0FTTV9YODZfVFJBUFNfSAogCisjaW5jbHVkZSA8bGludXgvY29udGV4dF90cmFja2luZ19zdGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9kZWJ1Z3JlZy5oPgpAQCAtMTEwLDYgKzExMSwxMSBAQAogYXNtbGlua2FnZSB2b2lkIG1jZV90aHJlc2hvbGRfaW50ZXJydXB0KHZvaWQpOwogI2VuZGlmCiAKK2V4dGVybiBlbnVtIGN0eF9zdGF0ZSBpc3RfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgaXN0X2V4aXQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGVudW0gY3R4X3N0YXRlIHByZXZfc3RhdGUpOworZXh0ZXJuIHZvaWQgaXN0X2JlZ2luX25vbl9hdG9taWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgaXN0X2VuZF9ub25fYXRvbWljKHZvaWQpOworCiAvKiBJbnRlcnJ1cHRzL0V4Y2VwdGlvbnMgKi8KIGVudW0gewogCVg4Nl9UUkFQX0RFID0gMCwJLyogIDAsIERpdmlkZS1ieS16ZXJvICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGFnZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3BhZ2UuaAppbmRleCA1ZWVhMDk5Li4zNThkY2QzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGFnZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9wYWdlLmgKQEAgLTU1LDkgKzU1LDggQEAKIAkJCQkgICBzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYgKmttYXBfb3BzLAogCQkJCSAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCk7CiBleHRlcm4gaW50IGNsZWFyX2ZvcmVpZ25fcDJtX21hcHBpbmcoc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgKnVubWFwX29wcywKLQkJCQkgICAgIHN0cnVjdCBnbnR0YWJfbWFwX2dyYW50X3JlZiAqa21hcF9vcHMsCisJCQkJICAgICBzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZiAqa3VubWFwX29wcywKIAkJCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBtMnBfZmluZF9vdmVycmlkZV9wZm4odW5zaWduZWQgbG9uZyBtZm4sIHVuc2lnbmVkIGxvbmcgcGZuKTsKIAogLyoKICAqIEhlbHBlciBmdW5jdGlvbnMgdG8gd3JpdGUgb3IgcmVhZCB1bnNpZ25lZCBsb25nIHZhbHVlcyB0by9mcm9tCkBAIC0xNTQsMjEgKzE1MywxMiBAQAogCQlyZXR1cm4gbWZuOwogCiAJcGZuID0gbWZuX3RvX3Bmbl9ub19vdmVycmlkZXMobWZuKTsKLQlpZiAoX19wZm5fdG9fbWZuKHBmbikgIT0gbWZuKSB7Ci0JCS8qCi0JCSAqIElmIHRoaXMgYXBwZWFycyB0byBiZSBhIGZvcmVpZ24gbWZuIChiZWNhdXNlIHRoZSBwZm4KLQkJICogZG9lc24ndCBtYXAgYmFjayB0byB0aGUgbWZuKSwgdGhlbiBjaGVjayB0aGUgbG9jYWwgb3ZlcnJpZGUKLQkJICogdGFibGUgdG8gc2VlIGlmIHRoZXJlJ3MgYSBiZXR0ZXIgcGZuIHRvIHVzZS4KLQkJICoKLQkJICogbTJwX2ZpbmRfb3ZlcnJpZGVfcGZuIHJldHVybnMgfjAgaWYgaXQgZG9lc24ndCBmaW5kIGFueXRoaW5nLgotCQkgKi8KLQkJcGZuID0gbTJwX2ZpbmRfb3ZlcnJpZGVfcGZuKG1mbiwgfjApOwotCX0KKwlpZiAoX19wZm5fdG9fbWZuKHBmbikgIT0gbWZuKQorCQlwZm4gPSB+MDsKIAogCS8qCi0JICogcGZuIGlzIH4wIGlmIHRoZXJlIGFyZSBubyBlbnRyaWVzIGluIHRoZSBtMnAgZm9yIG1mbiBvciBpZiB0aGUKLQkgKiBlbnRyeSBkb2Vzbid0IG1hcCBiYWNrIHRvIHRoZSBtZm4gYW5kIG0ycF9vdmVycmlkZSBkb2Vzbid0IGhhdmUgYQotCSAqIHZhbGlkIGVudHJ5IGZvciBpdC4KKwkgKiBwZm4gaXMgfjAgaWYgdGhlcmUgYXJlIG5vIGVudHJpZXMgaW4gdGhlIG0ycCBmb3IgbWZuIG9yIHRoZQorCSAqIGVudHJ5IGRvZXNuJ3QgbWFwIGJhY2sgdG8gdGhlIG1mbi4KIAkgKi8KIAlpZiAocGZuID09IH4wICYmIF9fcGZuX3RvX21mbihtZm4pID09IElERU5USVRZX0ZSQU1FKG1mbikpCiAJCXBmbiA9IG1mbjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL21zci1pbmRleC5oCmluZGV4IGM4YWE2NWQuLjUzNjI0MGZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL21zci1pbmRleC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20vbXNyLWluZGV4LmgKQEAgLTE1Miw2ICsxNTIsMTAgQEAKICNkZWZpbmUgTVNSX0NDNl9ERU1PVElPTl9QT0xJQ1lfQ09ORklHCTB4MDAwMDA2NjgKICNkZWZpbmUgTVNSX01DNl9ERU1PVElPTl9QT0xJQ1lfQ09ORklHCTB4MDAwMDA2NjkKIAorI2RlZmluZSBNU1JfQ09SRV9QRVJGX0xJTUlUX1JFQVNPTlMJMHgwMDAwMDY5MAorI2RlZmluZSBNU1JfR0ZYX1BFUkZfTElNSVRfUkVBU09OUwkweDAwMDAwNkIwCisjZGVmaW5lIE1TUl9SSU5HX1BFUkZfTElNSVRfUkVBU09OUwkweDAwMDAwNkIxCisKIC8qIEhhcmR3YXJlIFAgc3RhdGUgaW50ZXJmYWNlICovCiAjZGVmaW5lIE1TUl9QUEVSRgkJCTB4MDAwMDA2NGUKICNkZWZpbmUgTVNSX1BFUkZfTElNSVRfUkVBU09OUwkJMHgwMDAwMDY0ZgpAQCAtMjUxLDYgKzI1NSwxMCBAQAogLyogRmFtIDE2aCBNU1JzICovCiAjZGVmaW5lIE1TUl9GMTZIX0wySV9QRVJGX0NUTAkJMHhjMDAxMDIzMAogI2RlZmluZSBNU1JfRjE2SF9MMklfUEVSRl9DVFIJCTB4YzAwMTAyMzEKKyNkZWZpbmUgTVNSX0YxNkhfRFIxX0FERFJfTUFTSwkJMHhjMDAxMTAxOQorI2RlZmluZSBNU1JfRjE2SF9EUjJfQUREUl9NQVNLCQkweGMwMDExMDFhCisjZGVmaW5lIE1TUl9GMTZIX0RSM19BRERSX01BU0sJCTB4YzAwMTEwMWIKKyNkZWZpbmUgTVNSX0YxNkhfRFIwX0FERFJfTUFTSwkJMHhjMDAxMTAyNwogCiAvKiBGYW0gMTVoIE1TUnMgKi8KICNkZWZpbmUgTVNSX0YxNUhfUEVSRl9DVEwJCTB4YzAwMTAyMDAKQEAgLTM1OCw2ICszNjYsNyBAQAogCiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZfU1RBVFVTCQkweDAwMDAwMTk4CiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZfQ1RMCQkweDAwMDAwMTk5CisjZGVmaW5lIElOVEVMX1BFUkZfQ1RMX01BU0sJCTB4ZmZmZgogI2RlZmluZSBNU1JfQU1EX1BTVEFURV9ERUZfQkFTRQkJMHhjMDAxMDA2NAogI2RlZmluZSBNU1JfQU1EX1BFUkZfU1RBVFVTCQkweGMwMDEwMDYzCiAjZGVmaW5lIE1TUl9BTURfUEVSRl9DVEwJCTB4YzAwMTAwNjIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQppbmRleCA1ZDQ1MDJjLi43MzIyMjM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCkBAIC02Myw2ICs2Myw3IEBACiBvYmoteQkJCQkrPSBhcGljLwogb2JqLSQoQ09ORklHX1g4Nl9SRUJPT1RGSVhVUFMpCSs9IHJlYm9vdF9maXh1cHNfMzIubwogb2JqLSQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKQkrPSBmdHJhY2Uubworb2JqLSQoQ09ORklHX0xJVkVQQVRDSCkJCSs9IGxpdmVwYXRjaC5vCiBvYmotJChDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSKSArPSBmdHJhY2Uubwogb2JqLSQoQ09ORklHX0ZUUkFDRV9TWVNDQUxMUykJKz0gZnRyYWNlLm8KIG9iai0kKENPTkZJR19YODZfVFNDKQkJKz0gdHJhY2VfY2xvY2subwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCmluZGV4IGI5ZTMwZGEuLmFlOTdlZDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKQEAgLTY1Myw2ICs2NTMsNyBAQAogCXJldHVybiBnc2k7CiB9CiAKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIHN0YXRpYyBpbnQgYWNwaV9yZWdpc3Rlcl9nc2lfaW9hcGljKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGdzaSwKIAkJCQkgICAgaW50IHRyaWdnZXIsIGludCBwb2xhcml0eSkKIHsKQEAgLTY3NSw2ICs2NzYsNyBAQAogCW11dGV4X3VubG9jaygmYWNwaV9pb2FwaWNfbG9jayk7CiAjZW5kaWYKIH0KKyNlbmRpZgogCiBpbnQgKCpfX2FjcGlfcmVnaXN0ZXJfZ3NpKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBnc2ksCiAJCQkgICBpbnQgdHJpZ2dlciwgaW50IHBvbGFyaXR5KSA9IGFjcGlfcmVnaXN0ZXJfZ3NpX3BpYzsKQEAgLTg0MywxMyArODQ1LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWNwaV9wYXJzZV9zYmYoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSkKIHsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9ib290ICpzYjsKLQotCXNiID0gKHN0cnVjdCBhY3BpX3RhYmxlX2Jvb3QgKil0YWJsZTsKLQlpZiAoIXNiKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJVbmFibGUgdG8gbWFwIFNCRlxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwlzdHJ1Y3QgYWNwaV90YWJsZV9ib290ICpzYiA9IChzdHJ1Y3QgYWNwaV90YWJsZV9ib290ICopdGFibGU7CiAKIAlzYmZfcG9ydCA9IHNiLT5jbW9zX2luZGV4OwkvKiBTYXZlIENNT1MgcG9ydCAqLwogCkBAIC04NjMsMTMgKzg1OSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfcGFyc2VfaHBldChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKQogewotCXN0cnVjdCBhY3BpX3RhYmxlX2hwZXQgKmhwZXRfdGJsOwotCi0JaHBldF90YmwgPSAoc3RydWN0IGFjcGlfdGFibGVfaHBldCAqKXRhYmxlOwotCWlmICghaHBldF90YmwpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIlVuYWJsZSB0byBtYXAgSFBFVFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwlzdHJ1Y3QgYWNwaV90YWJsZV9ocGV0ICpocGV0X3RibCA9IChzdHJ1Y3QgYWNwaV90YWJsZV9ocGV0ICopdGFibGU7CiAKIAlpZiAoaHBldF90YmwtPmFkZHJlc3Muc3BhY2VfaWQgIT0gQUNQSV9TUEFDRV9NRU0pIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggIkhQRVQgdGltZXJzIG11c3QgYmUgbG9jYXRlZCBpbiAiCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMKaW5kZXggYjcwODczOC4uNmE3YzIzZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGJfdGltZXIuYwpAQCAtMTM1LDE0ICsxMzUsNiBAQAogCWFwYnRfdmlydF9hZGRyZXNzID0gTlVMTDsKIH0KIAotLyoKLSAqIEFQQlQgdGltZXIgaW50ZXJydXB0IGVuYWJsZSAvIGRpc2FibGUKLSAqLwotc3RhdGljIGlubGluZSBpbnQgaXNfYXBidF9jYXBhYmxlKHZvaWQpCi17Ci0JcmV0dXJuIGFwYnRfdmlydF9hZGRyZXNzID8gMSA6IDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IGFwYnRfY2xvY2tldmVudF9yZWdpc3Rlcih2b2lkKQogewogCXN0cnVjdCBzZmlfdGltZXJfdGFibGVfZW50cnkgKm10bXI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKaW5kZXggMjliNWIxOC4uYjY2NWQyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpAQCAtMTM0LDkgKzEzNCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgZm9yY2VfZW5hYmxlX2xvY2FsX2FwaWMgX19pbml0ZGF0YTsKIAotLyogQ29udHJvbCB3aGV0aGVyIHgyQVBJQyBtb2RlIGlzIGVuYWJsZWQgb3Igbm90ICovCi1zdGF0aWMgYm9vbCBub3gyYXBpYyBfX2luaXRkYXRhOwotCiAvKgogICogQVBJQyBjb21tYW5kIGxpbmUgcGFyYW1ldGVycwogICovCkBAIC0xNjEsMzMgKzE1OCw2IEBACiBfX3NldHVwKCJhcGljcG10aW1lciIsIHNldHVwX2FwaWNwbXRpbWVyKTsKICNlbmRpZgogCi1pbnQgeDJhcGljX21vZGU7Ci0jaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKLS8qIHgyYXBpYyBlbmFibGVkIGJlZm9yZSBPUyBoYW5kb3ZlciAqLwotaW50IHgyYXBpY19wcmVlbmFibGVkOwotc3RhdGljIGludCB4MmFwaWNfZGlzYWJsZWQ7Ci1zdGF0aWMgaW50IF9faW5pdCBzZXR1cF9ub3gyYXBpYyhjaGFyICpzdHIpCi17Ci0JaWYgKHgyYXBpY19lbmFibGVkKCkpIHsKLQkJaW50IGFwaWNpZCA9IG5hdGl2ZV9hcGljX21zcl9yZWFkKEFQSUNfSUQpOwotCi0JCWlmIChhcGljaWQgPj0gMjU1KSB7Ci0JCQlwcl93YXJuaW5nKCJBcGljaWQ6ICUwOHgsIGNhbm5vdCBlbmZvcmNlIG5veDJhcGljXG4iLAotCQkJCSAgIGFwaWNpZCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCXByX3dhcm5pbmcoIngyYXBpYyBhbHJlYWR5IGVuYWJsZWQuIHdpbGwgZGlzYWJsZSBpdFxuIik7Ci0JfSBlbHNlCi0JCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfWDJBUElDKTsKLQotCW5veDJhcGljID0gdHJ1ZTsKLQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm5veDJhcGljIiwgc2V0dXBfbm94MmFwaWMpOwotI2VuZGlmCi0KIHVuc2lnbmVkIGxvbmcgbXBfbGFwaWNfYWRkcjsKIGludCBkaXNhYmxlX2FwaWM7CiAvKiBEaXNhYmxlIGxvY2FsIEFQSUMgdGltZXIgZnJvbSB0aGUga2VybmVsIGNvbW1hbmRsaW5lIG9yIHZpYSBkbWkgcXVpcmsgKi8KQEAgLTE0NzUsNyArMTQ0NSw3IEBACiAjZW5kaWYKIH0KIAotdm9pZCBlbmRfbG9jYWxfQVBJQ19zZXR1cCh2b2lkKQorc3RhdGljIHZvaWQgZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCkKIHsKIAlsYXBpY19zZXR1cF9lc3IoKTsKIApAQCAtMTQ5MiwxMTYgKzE0NjIsMTg0IEBACiAJYXBpY19wbV9hY3RpdmF0ZSgpOwogfQogCi12b2lkIF9faW5pdCBic3BfZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCkKKy8qCisgKiBBUElDIHNldHVwIGZ1bmN0aW9uIGZvciBhcHBsaWNhdGlvbiBwcm9jZXNzb3JzLiBDYWxsZWQgZnJvbSBzbXBib290LmMKKyAqLwordm9pZCBhcGljX2FwX3NldHVwKHZvaWQpCiB7CisJc2V0dXBfbG9jYWxfQVBJQygpOwogCWVuZF9sb2NhbF9BUElDX3NldHVwKCk7Ci0KLQkvKgotCSAqIE5vdyB0aGF0IGxvY2FsIEFQSUMgc2V0dXAgaXMgY29tcGxldGVkIGZvciBCUCwgY29uZmlndXJlIHRoZSBmYXVsdAotCSAqIGhhbmRsaW5nIGZvciBpbnRlcnJ1cHQgcmVtYXBwaW5nLgotCSAqLwotCWlycV9yZW1hcF9lbmFibGVfZmF1bHRfaGFuZGxpbmcoKTsKLQogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKLS8qCi0gKiBOZWVkIHRvIGRpc2FibGUgeGFwaWMgYW5kIHgyYXBpYyBhdCB0aGUgc2FtZSB0aW1lIGFuZCB0aGVuIGVuYWJsZSB4YXBpYyBtb2RlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2Rpc2FibGVfeDJhcGljKHU2NCBtc3IpCi17Ci0Jd3Jtc3JsKE1TUl9JQTMyX0FQSUNCQVNFLAotCSAgICAgICBtc3IgJiB+KFgyQVBJQ19FTkFCTEUgfCBYQVBJQ19FTkFCTEUpKTsKLQl3cm1zcmwoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zciAmIH5YMkFQSUNfRU5BQkxFKTsKLX0KK2ludCB4MmFwaWNfbW9kZTsKIAotc3RhdGljIF9faW5pdCB2b2lkIGRpc2FibGVfeDJhcGljKHZvaWQpCitlbnVtIHsKKwlYMkFQSUNfT0ZGLAorCVgyQVBJQ19PTiwKKwlYMkFQSUNfRElTQUJMRUQsCit9Oworc3RhdGljIGludCB4MmFwaWNfc3RhdGU7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3gyYXBpY19kaXNhYmxlKHZvaWQpCiB7CiAJdTY0IG1zcjsKIAotCWlmICghY3B1X2hhc194MmFwaWMpCisJaWYgKGNwdV9oYXNfYXBpYykKIAkJcmV0dXJuOwogCiAJcmRtc3JsKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IpOwotCWlmIChtc3IgJiBYMkFQSUNfRU5BQkxFKSB7Ci0JCXUzMiB4MmFwaWNfaWQgPSByZWFkX2FwaWNfaWQoKTsKLQotCQlpZiAoeDJhcGljX2lkID49IDI1NSkKLQkJCXBhbmljKCJDYW5ub3QgZGlzYWJsZSB4MmFwaWMsIGlkOiAlMDh4XG4iLCB4MmFwaWNfaWQpOwotCi0JCXByX2luZm8oIkRpc2FibGluZyB4MmFwaWNcbiIpOwotCQlfX2Rpc2FibGVfeDJhcGljKG1zcik7Ci0KLQkJaWYgKG5veDJhcGljKSB7Ci0JCQljbGVhcl9jcHVfY2FwKCZjcHVfZGF0YSgwKSwgWDg2X0ZFQVRVUkVfWDJBUElDKTsKLQkJCXNldHVwX2NsZWFyX2NwdV9jYXAoWDg2X0ZFQVRVUkVfWDJBUElDKTsKLQkJfQotCi0JCXgyYXBpY19kaXNhYmxlZCA9IDE7Ci0JCXgyYXBpY19tb2RlID0gMDsKLQotCQlyZWdpc3Rlcl9sYXBpY19hZGRyZXNzKG1wX2xhcGljX2FkZHIpOwotCX0KKwlpZiAoIShtc3IgJiBYMkFQSUNfRU5BQkxFKSkKKwkJcmV0dXJuOworCS8qIERpc2FibGUgeGFwaWMgYW5kIHgyYXBpYyBmaXJzdCBhbmQgdGhlbiByZWVuYWJsZSB4YXBpYyBtb2RlICovCisJd3Jtc3JsKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IgJiB+KFgyQVBJQ19FTkFCTEUgfCBYQVBJQ19FTkFCTEUpKTsKKwl3cm1zcmwoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zciAmIH5YMkFQSUNfRU5BQkxFKTsKKwlwcmludGtfb25jZShLRVJOX0lORk8gIngyYXBpYyBkaXNhYmxlZFxuIik7CiB9CiAKLXZvaWQgY2hlY2tfeDJhcGljKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgX194MmFwaWNfZW5hYmxlKHZvaWQpCit7CisJdTY0IG1zcjsKKworCXJkbXNybChNU1JfSUEzMl9BUElDQkFTRSwgbXNyKTsKKwlpZiAobXNyICYgWDJBUElDX0VOQUJMRSkKKwkJcmV0dXJuOworCXdybXNybChNU1JfSUEzMl9BUElDQkFTRSwgbXNyIHwgWDJBUElDX0VOQUJMRSk7CisJcHJpbnRrX29uY2UoS0VSTl9JTkZPICJ4MmFwaWMgZW5hYmxlZFxuIik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX25veDJhcGljKGNoYXIgKnN0cikKIHsKIAlpZiAoeDJhcGljX2VuYWJsZWQoKSkgewotCQlwcl9pbmZvKCJ4MmFwaWMgZW5hYmxlZCBieSBCSU9TLCBzd2l0Y2hpbmcgdG8geDJhcGljIG9wc1xuIik7Ci0JCXgyYXBpY19wcmVlbmFibGVkID0geDJhcGljX21vZGUgPSAxOworCQlpbnQgYXBpY2lkID0gbmF0aXZlX2FwaWNfbXNyX3JlYWQoQVBJQ19JRCk7CisKKwkJaWYgKGFwaWNpZCA+PSAyNTUpIHsKKwkJCXByX3dhcm5pbmcoIkFwaWNpZDogJTA4eCwgY2Fubm90IGVuZm9yY2Ugbm94MmFwaWNcbiIsCisJCQkJICAgYXBpY2lkKTsKKwkJCXJldHVybiAwOworCQl9CisJCXByX3dhcm5pbmcoIngyYXBpYyBhbHJlYWR5IGVuYWJsZWQuXG4iKTsKKwkJX194MmFwaWNfZGlzYWJsZSgpOwogCX0KKwlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX1gyQVBJQyk7CisJeDJhcGljX3N0YXRlID0gWDJBUElDX0RJU0FCTEVEOworCXgyYXBpY19tb2RlID0gMDsKKwlyZXR1cm4gMDsKIH0KK2Vhcmx5X3BhcmFtKCJub3gyYXBpYyIsIHNldHVwX25veDJhcGljKTsKIAotdm9pZCBlbmFibGVfeDJhcGljKHZvaWQpCisvKiBDYWxsZWQgZnJvbSBjcHVfaW5pdCgpIHRvIGVuYWJsZSB4MmFwaWMgb24gKHNlY29uZGFyeSkgY3B1cyAqLwordm9pZCB4MmFwaWNfc2V0dXAodm9pZCkKIHsKLQl1NjQgbXNyOwotCi0JcmRtc3JsKE1TUl9JQTMyX0FQSUNCQVNFLCBtc3IpOwotCWlmICh4MmFwaWNfZGlzYWJsZWQpIHsKLQkJX19kaXNhYmxlX3gyYXBpYyhtc3IpOworCS8qCisJICogSWYgeDJhcGljIGlzIG5vdCBpbiBPTiBzdGF0ZSwgZGlzYWJsZSBpdCBpZiBhbHJlYWR5IGVuYWJsZWQKKwkgKiBmcm9tIEJJT1MuCisJICovCisJaWYgKHgyYXBpY19zdGF0ZSAhPSBYMkFQSUNfT04pIHsKKwkJX194MmFwaWNfZGlzYWJsZSgpOwogCQlyZXR1cm47CiAJfQorCV9feDJhcGljX2VuYWJsZSgpOworfQogCi0JaWYgKCF4MmFwaWNfbW9kZSkKK3N0YXRpYyBfX2luaXQgdm9pZCB4MmFwaWNfZGlzYWJsZSh2b2lkKQoreworCXUzMiB4MmFwaWNfaWQ7CisKKwlpZiAoeDJhcGljX3N0YXRlICE9IFgyQVBJQ19PTikKKwkJZ290byBvdXQ7CisKKwl4MmFwaWNfaWQgPSByZWFkX2FwaWNfaWQoKTsKKwlpZiAoeDJhcGljX2lkID49IDI1NSkKKwkJcGFuaWMoIkNhbm5vdCBkaXNhYmxlIHgyYXBpYywgaWQ6ICUwOHhcbiIsIHgyYXBpY19pZCk7CisKKwlfX3gyYXBpY19kaXNhYmxlKCk7CisJcmVnaXN0ZXJfbGFwaWNfYWRkcmVzcyhtcF9sYXBpY19hZGRyKTsKK291dDoKKwl4MmFwaWNfc3RhdGUgPSBYMkFQSUNfRElTQUJMRUQ7CisJeDJhcGljX21vZGUgPSAwOworfQorCitzdGF0aWMgX19pbml0IHZvaWQgeDJhcGljX2VuYWJsZSh2b2lkKQoreworCWlmICh4MmFwaWNfc3RhdGUgIT0gWDJBUElDX09GRikKIAkJcmV0dXJuOwogCi0JaWYgKCEobXNyICYgWDJBUElDX0VOQUJMRSkpIHsKLQkJcHJpbnRrX29uY2UoS0VSTl9JTkZPICJFbmFibGluZyB4MmFwaWNcbiIpOwotCQl3cm1zcmwoTVNSX0lBMzJfQVBJQ0JBU0UsIG1zciB8IFgyQVBJQ19FTkFCTEUpOworCXgyYXBpY19tb2RlID0gMTsKKwl4MmFwaWNfc3RhdGUgPSBYMkFQSUNfT047CisJX194MmFwaWNfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBfX2luaXQgdm9pZCB0cnlfdG9fZW5hYmxlX3gyYXBpYyhpbnQgcmVtYXBfbW9kZSkKK3sKKwlpZiAoeDJhcGljX3N0YXRlID09IFgyQVBJQ19ESVNBQkxFRCkKKwkJcmV0dXJuOworCisJaWYgKHJlbWFwX21vZGUgIT0gSVJRX1JFTUFQX1gyQVBJQ19NT0RFKSB7CisJCS8qIElSIGlzIHJlcXVpcmVkIGlmIHRoZXJlIGlzIEFQSUMgSUQgPiAyNTUgZXZlbiB3aGVuIHJ1bm5pbmcKKwkJICogdW5kZXIgS1ZNCisJCSAqLworCQlpZiAobWF4X3BoeXNpY2FsX2FwaWNpZCA+IDI1NSB8fAorCQkgICAgKElTX0VOQUJMRUQoQ09ORklHX0hZUEVSVklTT1JfR1VFU1QpICYmCisJCSAgICAgIWh5cGVydmlzb3JfeDJhcGljX2F2YWlsYWJsZSgpKSkgeworCQkJcHJfaW5mbygieDJhcGljOiBJUlEgcmVtYXBwaW5nIGRvZXNuJ3Qgc3VwcG9ydCBYMkFQSUMgbW9kZVxuIik7CisJCQl4MmFwaWNfZGlzYWJsZSgpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyoKKwkJICogd2l0aG91dCBJUiBhbGwgQ1BVcyBjYW4gYmUgYWRkcmVzc2VkIGJ5IElPQVBJQy9NU0kKKwkJICogb25seSBpbiBwaHlzaWNhbCBtb2RlCisJCSAqLworCQl4MmFwaWNfcGh5cyA9IDE7CisJfQorCXgyYXBpY19lbmFibGUoKTsKK30KKwordm9pZCBfX2luaXQgY2hlY2tfeDJhcGljKHZvaWQpCit7CisJaWYgKHgyYXBpY19lbmFibGVkKCkpIHsKKwkJcHJfaW5mbygieDJhcGljOiBlbmFibGVkIGJ5IEJJT1MsIHN3aXRjaGluZyB0byB4MmFwaWMgb3BzXG4iKTsKKwkJeDJhcGljX21vZGUgPSAxOworCQl4MmFwaWNfc3RhdGUgPSBYMkFQSUNfT047CisJfSBlbHNlIGlmICghY3B1X2hhc194MmFwaWMpIHsKKwkJeDJhcGljX3N0YXRlID0gWDJBUElDX0RJU0FCTEVEOwogCX0KIH0KLSNlbmRpZiAvKiBDT05GSUdfWDg2X1gyQVBJQyAqLwotCi1pbnQgX19pbml0IGVuYWJsZV9JUih2b2lkKQorI2Vsc2UgLyogQ09ORklHX1g4Nl9YMkFQSUMgKi8KK3N0YXRpYyBpbnQgX19pbml0IHZhbGlkYXRlX3gyYXBpYyh2b2lkKQogewotI2lmZGVmIENPTkZJR19JUlFfUkVNQVAKLQlpZiAoIWlycV9yZW1hcHBpbmdfc3VwcG9ydGVkKCkpIHsKLQkJcHJfZGVidWcoImludHItcmVtYXBwaW5nIG5vdCBzdXBwb3J0ZWRcbiIpOworCWlmICghYXBpY19pc194MmFwaWNfZW5hYmxlZCgpKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIENoZWNrbWU6IENhbiB3ZSBzaW1wbHkgdHVybiBvZmYgeDJhcGljIGhlcmUgaW5zdGVhZCBvZiBwYW5pYz8KKwkgKi8KKwlwYW5pYygiQklPUyBoYXMgZW5hYmxlZCB4MmFwaWMgYnV0IGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgeDJhcGljLCBwbGVhc2UgZGlzYWJsZSB4MmFwaWMgaW4gQklPUy5cbiIpOworfQorZWFybHlfaW5pdGNhbGwodmFsaWRhdGVfeDJhcGljKTsKKworc3RhdGljIGlubGluZSB2b2lkIHRyeV90b19lbmFibGVfeDJhcGljKGludCByZW1hcF9tb2RlKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3gyYXBpY19lbmFibGUodm9pZCkgeyB9CisjZW5kaWYgLyogIUNPTkZJR19YODZfWDJBUElDICovCisKK3N0YXRpYyBpbnQgX19pbml0IHRyeV90b19lbmFibGVfSVIodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKKwlpZiAoIXgyYXBpY19lbmFibGVkKCkgJiYgc2tpcF9pb2FwaWNfc2V0dXApIHsKKwkJcHJfaW5mbygiTm90IGVuYWJsaW5nIGludGVycnVwdCByZW1hcHBpbmcgZHVlIHRvIHNraXBwZWQgSU8tQVBJQyBzZXR1cFxuIik7CiAJCXJldHVybiAtMTsKIAl9Ci0KLQlpZiAoIXgyYXBpY19wcmVlbmFibGVkICYmIHNraXBfaW9hcGljX3NldHVwKSB7Ci0JCXByX2luZm8oIlNraXBwZWQgZW5hYmxpbmcgaW50ci1yZW1hcCBiZWNhdXNlIG9mIHNraXBwaW5nICIKLQkJCSJpby1hcGljIHNldHVwXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXJldHVybiBpcnFfcmVtYXBwaW5nX2VuYWJsZSgpOwogI2VuZGlmCi0JcmV0dXJuIC0xOworCXJldHVybiBpcnFfcmVtYXBwaW5nX2VuYWJsZSgpOwogfQogCiB2b2lkIF9faW5pdCBlbmFibGVfSVJfeDJhcGljKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0LCB4MmFwaWNfZW5hYmxlZCA9IDA7Ci0JaW50IGhhcmR3YXJlX2luaXRfcmV0OworCWludCByZXQsIGlyX3N0YXQ7CiAKLQkvKiBNYWtlIHN1cmUgaXJxX3JlbWFwX29wcyBhcmUgaW5pdGlhbGl6ZWQgKi8KLQlzZXR1cF9pcnFfcmVtYXBwaW5nX29wcygpOwotCi0JaGFyZHdhcmVfaW5pdF9yZXQgPSBpcnFfcmVtYXBwaW5nX3ByZXBhcmUoKTsKLQlpZiAoaGFyZHdhcmVfaW5pdF9yZXQgJiYgIXgyYXBpY19zdXBwb3J0ZWQoKSkKKwlpcl9zdGF0ID0gaXJxX3JlbWFwcGluZ19wcmVwYXJlKCk7CisJaWYgKGlyX3N0YXQgPCAwICYmICF4MmFwaWNfc3VwcG9ydGVkKCkpCiAJCXJldHVybjsKIAogCXJldCA9IHNhdmVfaW9hcGljX2VudHJpZXMoKTsKQEAgLTE2MTQsNDkgKzE2NTIsMTMgQEAKIAlsZWdhY3lfcGljLT5tYXNrX2FsbCgpOwogCW1hc2tfaW9hcGljX2VudHJpZXMoKTsKIAotCWlmICh4MmFwaWNfcHJlZW5hYmxlZCAmJiBub3gyYXBpYykKLQkJZGlzYWJsZV94MmFwaWMoKTsKKwkvKiBJZiBpcnFfcmVtYXBwaW5nX3ByZXBhcmUoKSBzdWNjZWRlZCwgdHJ5IHRvIGVuYWJsZSBpdCAqLworCWlmIChpcl9zdGF0ID49IDApCisJCWlyX3N0YXQgPSB0cnlfdG9fZW5hYmxlX0lSKCk7CisJLyogaXJfc3RhdCBjb250YWlucyB0aGUgcmVtYXAgbW9kZSBvciBhbiBlcnJvciBjb2RlICovCisJdHJ5X3RvX2VuYWJsZV94MmFwaWMoaXJfc3RhdCk7CiAKLQlpZiAoaGFyZHdhcmVfaW5pdF9yZXQpCi0JCXJldCA9IC0xOwotCWVsc2UKLQkJcmV0ID0gZW5hYmxlX0lSKCk7Ci0KLQlpZiAoIXgyYXBpY19zdXBwb3J0ZWQoKSkKLQkJZ290byBza2lwX3gyYXBpYzsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCS8qIElSIGlzIHJlcXVpcmVkIGlmIHRoZXJlIGlzIEFQSUMgSUQgPiAyNTUgZXZlbiB3aGVuIHJ1bm5pbmcKLQkJICogdW5kZXIgS1ZNCi0JCSAqLwotCQlpZiAobWF4X3BoeXNpY2FsX2FwaWNpZCA+IDI1NSB8fAotCQkgICAgIWh5cGVydmlzb3JfeDJhcGljX2F2YWlsYWJsZSgpKSB7Ci0JCQlpZiAoeDJhcGljX3ByZWVuYWJsZWQpCi0JCQkJZGlzYWJsZV94MmFwaWMoKTsKLQkJCWdvdG8gc2tpcF94MmFwaWM7Ci0JCX0KLQkJLyoKLQkJICogd2l0aG91dCBJUiBhbGwgQ1BVcyBjYW4gYmUgYWRkcmVzc2VkIGJ5IElPQVBJQy9NU0kKLQkJICogb25seSBpbiBwaHlzaWNhbCBtb2RlCi0JCSAqLwotCQl4MmFwaWNfZm9yY2VfcGh5cygpOwotCX0KLQotCWlmIChyZXQgPT0gSVJRX1JFTUFQX1hBUElDX01PREUpIHsKLQkJcHJfaW5mbygieDJhcGljIG5vdCBlbmFibGVkLCBJUlEgcmVtYXBwaW5nIGlzIGluIHhhcGljIG1vZGVcbiIpOwotCQlnb3RvIHNraXBfeDJhcGljOwotCX0KLQotCXgyYXBpY19lbmFibGVkID0gMTsKLQotCWlmICh4MmFwaWNfc3VwcG9ydGVkKCkgJiYgIXgyYXBpY19tb2RlKSB7Ci0JCXgyYXBpY19tb2RlID0gMTsKLQkJZW5hYmxlX3gyYXBpYygpOwotCQlwcl9pbmZvKCJFbmFibGVkIHgyYXBpY1xuIik7Ci0JfQotCi1za2lwX3gyYXBpYzoKLQlpZiAocmV0IDwgMCkgLyogSVIgZW5hYmxpbmcgZmFpbGVkICovCisJaWYgKGlyX3N0YXQgPCAwKQogCQlyZXN0b3JlX2lvYXBpY19lbnRyaWVzKCk7CiAJbGVnYWN5X3BpYy0+cmVzdG9yZV9tYXNrKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpAQCAtMTg0Nyw4MiArMTg0OSw4IEBACiAJfQogfQogCi0vKgotICogVGhpcyBpbml0aWFsaXplcyB0aGUgSU8tQVBJQyBhbmQgQVBJQyBoYXJkd2FyZSBpZiB0aGlzIGlzCi0gKiBhIFVQIGtlcm5lbC4KLSAqLwogaW50IGFwaWNfdmVyc2lvbltNQVhfTE9DQUxfQVBJQ107CiAKLWludCBfX2luaXQgQVBJQ19pbml0X3VuaXByb2Nlc3Nvcih2b2lkKQotewotCWlmIChkaXNhYmxlX2FwaWMpIHsKLQkJcHJfaW5mbygiQXBpYyBkaXNhYmxlZFxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCWlmICghY3B1X2hhc19hcGljKSB7Ci0JCWRpc2FibGVfYXBpYyA9IDE7Ci0JCXByX2luZm8oIkFwaWMgZGlzYWJsZWQgYnkgQklPU1xuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0jZWxzZQotCWlmICghc21wX2ZvdW5kX2NvbmZpZyAmJiAhY3B1X2hhc19hcGljKQotCQlyZXR1cm4gLTE7Ci0KLQkvKgotCSAqIENvbXBsYWluIGlmIHRoZSBCSU9TIHByZXRlbmRzIHRoZXJlIGlzIG9uZS4KLQkgKi8KLQlpZiAoIWNwdV9oYXNfYXBpYyAmJgotCSAgICBBUElDX0lOVEVHUkFURUQoYXBpY192ZXJzaW9uW2Jvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZF0pKSB7Ci0JCXByX2VycigiQklPUyBidWcsIGxvY2FsIEFQSUMgMHgleCBub3QgZGV0ZWN0ZWQhLi4uXG4iLAotCQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKLQkJcmV0dXJuIC0xOwotCX0KLSNlbmRpZgotCi0JZGVmYXVsdF9zZXR1cF9hcGljX3JvdXRpbmcoKTsKLQotCXZlcmlmeV9sb2NhbF9BUElDKCk7Ci0JY29ubmVjdF9ic3BfQVBJQygpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCWFwaWNfd3JpdGUoQVBJQ19JRCwgU0VUX0FQSUNfSUQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSk7Ci0jZWxzZQotCS8qCi0JICogSGFjazogSW4gY2FzZSBvZiBrZHVtcCwgYWZ0ZXIgYSBjcmFzaCwga2VybmVsIG1pZ2h0IGJlIGJvb3RpbmcKLQkgKiBvbiBhIGNwdSB3aXRoIG5vbi16ZXJvIGxhcGljIGlkLiBCdXQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkCi0JICogbWlnaHQgYmUgemVybyBpZiByZWFkIGZyb20gTVAgdGFibGVzLiBHZXQgaXQgZnJvbSBMQVBJQy4KLQkgKi8KLSMgaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKLQlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKLSMgZW5kaWYKLSNlbmRpZgotCXBoeXNpZF9zZXRfbWFza19vZl9waHlzaWQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkLCAmcGh5c19jcHVfcHJlc2VudF9tYXApOwotCXNldHVwX2xvY2FsX0FQSUMoKTsKLQotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCS8qCi0JICogTm93IGVuYWJsZSBJTy1BUElDcywgYWN0dWFsbHkgY2FsbCBjbGVhcl9JT19BUElDCi0JICogV2UgbmVlZCBjbGVhcl9JT19BUElDIGJlZm9yZSBlbmFibGluZyBlcnJvciB2ZWN0b3IKLQkgKi8KLQlpZiAoIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCi0JCWVuYWJsZV9JT19BUElDKCk7Ci0jZW5kaWYKLQotCWJzcF9lbmRfbG9jYWxfQVBJQ19zZXR1cCgpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JaWYgKHNtcF9mb3VuZF9jb25maWcgJiYgIXNraXBfaW9hcGljX3NldHVwICYmIG5yX2lvYXBpY3MpCi0JCXNldHVwX0lPX0FQSUMoKTsKLQllbHNlIHsKLQkJbnJfaW9hcGljcyA9IDA7Ci0JfQotI2VuZGlmCi0KLQl4ODZfaW5pdC50aW1lcnMuc2V0dXBfcGVyY3B1X2Nsb2NrZXYoKTsKLQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIExvY2FsIEFQSUMgaW50ZXJydXB0cwogICovCkBAIC0yMDI3LDcgKzE5NTUsNyBAQAogLyoqCiAgKiBjb25uZWN0X2JzcF9BUElDIC0gYXR0YWNoIHRoZSBBUElDIHRvIHRoZSBpbnRlcnJ1cHQgc3lzdGVtCiAgKi8KLXZvaWQgX19pbml0IGNvbm5lY3RfYnNwX0FQSUModm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBjb25uZWN0X2JzcF9BUElDKHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWlmIChwaWNfbW9kZSkgewpAQCAtMjI3NCw2ICsyMjAyLDEwMCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGFwaWNfYnNwX3VwX3NldHVwKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWFwaWNfd3JpdGUoQVBJQ19JRCwgU0VUX0FQSUNfSUQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKSk7CisjZWxzZQorCS8qCisJICogSGFjazogSW4gY2FzZSBvZiBrZHVtcCwgYWZ0ZXIgYSBjcmFzaCwga2VybmVsIG1pZ2h0IGJlIGJvb3RpbmcKKwkgKiBvbiBhIGNwdSB3aXRoIG5vbi16ZXJvIGxhcGljIGlkLiBCdXQgYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkCisJICogbWlnaHQgYmUgemVybyBpZiByZWFkIGZyb20gTVAgdGFibGVzLiBHZXQgaXQgZnJvbSBMQVBJQy4KKwkgKi8KKyMgaWZkZWYgQ09ORklHX0NSQVNIX0RVTVAKKwlib290X2NwdV9waHlzaWNhbF9hcGljaWQgPSByZWFkX2FwaWNfaWQoKTsKKyMgZW5kaWYKKyNlbmRpZgorCXBoeXNpZF9zZXRfbWFza19vZl9waHlzaWQoYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkLCAmcGh5c19jcHVfcHJlc2VudF9tYXApOworfQorCisvKioKKyAqIGFwaWNfYnNwX3NldHVwIC0gU2V0dXAgZnVuY3Rpb24gZm9yIGxvY2FsIGFwaWMgYW5kIGlvLWFwaWMKKyAqIEB1cG1vZGU6CQlGb3JjZSBVUCBtb2RlIChmb3IgQVBJQ19pbml0X3VuaXByb2Nlc3NvcikKKyAqCisgKiBSZXR1cm5zOgorICogYXBpY19pZCBvZiBCU1AgQVBJQworICovCitpbnQgX19pbml0IGFwaWNfYnNwX3NldHVwKGJvb2wgdXBtb2RlKQoreworCWludCBpZDsKKworCWNvbm5lY3RfYnNwX0FQSUMoKTsKKwlpZiAodXBtb2RlKQorCQlhcGljX2JzcF91cF9zZXR1cCgpOworCXNldHVwX2xvY2FsX0FQSUMoKTsKKworCWlmICh4MmFwaWNfbW9kZSkKKwkJaWQgPSBhcGljX3JlYWQoQVBJQ19MRFIpOworCWVsc2UKKwkJaWQgPSBHRVRfQVBJQ19MT0dJQ0FMX0lEKGFwaWNfcmVhZChBUElDX0xEUikpOworCisJZW5hYmxlX0lPX0FQSUMoKTsKKwllbmRfbG9jYWxfQVBJQ19zZXR1cCgpOworCWlycV9yZW1hcF9lbmFibGVfZmF1bHRfaGFuZGxpbmcoKTsKKwlzZXR1cF9JT19BUElDKCk7CisJLyogU2V0dXAgbG9jYWwgdGltZXIgKi8KKwl4ODZfaW5pdC50aW1lcnMuc2V0dXBfcGVyY3B1X2Nsb2NrZXYoKTsKKwlyZXR1cm4gaWQ7Cit9CisKKy8qCisgKiBUaGlzIGluaXRpYWxpemVzIHRoZSBJTy1BUElDIGFuZCBBUElDIGhhcmR3YXJlIGlmIHRoaXMgaXMKKyAqIGEgVVAga2VybmVsLgorICovCitpbnQgX19pbml0IEFQSUNfaW5pdF91bmlwcm9jZXNzb3Iodm9pZCkKK3sKKwlpZiAoZGlzYWJsZV9hcGljKSB7CisJCXByX2luZm8oIkFwaWMgZGlzYWJsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorI2lmZGVmIENPTkZJR19YODZfNjQKKwlpZiAoIWNwdV9oYXNfYXBpYykgeworCQlkaXNhYmxlX2FwaWMgPSAxOworCQlwcl9pbmZvKCJBcGljIGRpc2FibGVkIGJ5IEJJT1NcbiIpOworCQlyZXR1cm4gLTE7CisJfQorI2Vsc2UKKwlpZiAoIXNtcF9mb3VuZF9jb25maWcgJiYgIWNwdV9oYXNfYXBpYykKKwkJcmV0dXJuIC0xOworCisJLyoKKwkgKiBDb21wbGFpbiBpZiB0aGUgQklPUyBwcmV0ZW5kcyB0aGVyZSBpcyBvbmUuCisJICovCisJaWYgKCFjcHVfaGFzX2FwaWMgJiYKKwkgICAgQVBJQ19JTlRFR1JBVEVEKGFwaWNfdmVyc2lvbltib290X2NwdV9waHlzaWNhbF9hcGljaWRdKSkgeworCQlwcl9lcnIoIkJJT1MgYnVnLCBsb2NhbCBBUElDIDB4JXggbm90IGRldGVjdGVkIS4uLlxuIiwKKwkJCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7CisJCXJldHVybiAtMTsKKwl9CisjZW5kaWYKKworCWlmICghc21wX2ZvdW5kX2NvbmZpZykKKwkJZGlzYWJsZV9pb2FwaWNfc3VwcG9ydCgpOworCisJZGVmYXVsdF9zZXR1cF9hcGljX3JvdXRpbmcoKTsKKwl2ZXJpZnlfbG9jYWxfQVBJQygpOworCWFwaWNfYnNwX3NldHVwKHRydWUpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1VQX0xBVEVfSU5JVAordm9pZCBfX2luaXQgdXBfbGF0ZV9pbml0KHZvaWQpCit7CisJQVBJQ19pbml0X3VuaXByb2Nlc3NvcigpOworfQorI2VuZGlmCisKIC8qCiAgKiBQb3dlciBtYW5hZ2VtZW50CiAgKi8KQEAgLTIzNTksOSArMjM4MSw5IEBACiAJbWFza19pb2FwaWNfZW50cmllcygpOwogCWxlZ2FjeV9waWMtPm1hc2tfYWxsKCk7CiAKLQlpZiAoeDJhcGljX21vZGUpCi0JCWVuYWJsZV94MmFwaWMoKTsKLQllbHNlIHsKKwlpZiAoeDJhcGljX21vZGUpIHsKKwkJX194MmFwaWNfZW5hYmxlKCk7CisJfSBlbHNlIHsKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoZSBBUElDQkFTRSBwb2ludHMgdG8gdGhlIHJpZ2h0IGFkZHJlc3MKIAkJICoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwppbmRleCAzZjVmNjA0Li5mNGRjMjQ2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCkBAIC0xNTA3LDcgKzE1MDcsMTAgQEAKIAlpbnQgaTgyNTlfYXBpYywgaTgyNTlfcGluOwogCWludCBhcGljLCBwaW47CiAKLQlpZiAoIW5yX2xlZ2FjeV9pcnFzKCkpCisJaWYgKHNraXBfaW9hcGljX3NldHVwKQorCQlucl9pb2FwaWNzID0gMDsKKworCWlmICghbnJfbGVnYWN5X2lycXMoKSB8fCAhbnJfaW9hcGljcykKIAkJcmV0dXJuOwogCiAJZm9yX2VhY2hfaW9hcGljX3BpbihhcGljLCBwaW4pIHsKQEAgLTIyOTUsNyArMjI5OCw3IEBACiAJfQogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiBmYWlsZWQgOiguXG4iKTsKLQlpZiAoeDJhcGljX3ByZWVuYWJsZWQpCisJaWYgKGFwaWNfaXNfeDJhcGljX2VuYWJsZWQoKSkKIAkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPCiAJCQkgICAgIlBlcmhhcHMgcHJvYmxlbSB3aXRoIHRoZSBwcmUtZW5hYmxlZCB4MmFwaWMgbW9kZVxuIgogCQkJICAgICJUcnkgYm9vdGluZyB3aXRoIHgyYXBpYyBhbmQgaW50ZXJydXB0LXJlbWFwcGluZyBkaXNhYmxlZCBpbiB0aGUgYmlvcy5cbiIpOwpAQCAtMjM3Myw5ICsyMzc2LDkgQEAKIHsKIAlpbnQgaW9hcGljOwogCi0JLyoKLQkgKiBjYWxsaW5nIGVuYWJsZV9JT19BUElDKCkgaXMgbW92ZWQgdG8gc2V0dXBfbG9jYWxfQVBJQyBmb3IgQlAKLQkgKi8KKwlpZiAoc2tpcF9pb2FwaWNfc2V0dXAgfHwgIW5yX2lvYXBpY3MpCisJCXJldHVybjsKKwogCWlvX2FwaWNfaXJxcyA9IG5yX2xlZ2FjeV9pcnFzKCkgPyB+UElDX0lSUVMgOiB+MFVMOwogCiAJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiRU5BQkxJTkcgSU8tQVBJQyBJUlFzXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDE1YzVkZjkuLmEyMjAyMzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwpAQCAtODY5LDMgKzg2OSwyMiBAQAogCiAJcmV0dXJuIGZhbHNlOwogfQorCit2b2lkIHNldF9kcl9hZGRyX21hc2sodW5zaWduZWQgbG9uZyBtYXNrLCBpbnQgZHIpCit7CisJaWYgKCFjcHVfaGFzX2JwZXh0KQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGRyKSB7CisJY2FzZSAwOgorCQl3cm1zcihNU1JfRjE2SF9EUjBfQUREUl9NQVNLLCBtYXNrLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCWNhc2UgMjoKKwljYXNlIDM6CisJCXdybXNyKE1TUl9GMTZIX0RSMV9BRERSX01BU0sgLSAxICsgZHIsIG1hc2ssIDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCBjNjA0OTY1Li5iMTViZmZjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTQ5MSwxNyArNDkxLDE4IEBACiB1MTYgX19yZWFkX21vc3RseSB0bGJfbGxkXzRtW05SX0lORk9dOwogdTE2IF9fcmVhZF9tb3N0bHkgdGxiX2xsZF8xZ1tOUl9JTkZPXTsKIAotdm9pZCBjcHVfZGV0ZWN0X3RsYihzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCitzdGF0aWMgdm9pZCBjcHVfZGV0ZWN0X3RsYihzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJaWYgKHRoaXNfY3B1LT5jX2RldGVjdF90bGIpCiAJCXRoaXNfY3B1LT5jX2RldGVjdF90bGIoYyk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJMYXN0IGxldmVsIGlUTEIgZW50cmllczogNEtCICVkLCAyTUIgJWQsIDRNQiAlZFxuIgotCQkiTGFzdCBsZXZlbCBkVExCIGVudHJpZXM6IDRLQiAlZCwgMk1CICVkLCA0TUIgJWQsIDFHQiAlZFxuIiwKKwlwcl9pbmZvKCJMYXN0IGxldmVsIGlUTEIgZW50cmllczogNEtCICVkLCAyTUIgJWQsIDRNQiAlZFxuIiwKIAkJdGxiX2xsaV80a1tFTlRSSUVTXSwgdGxiX2xsaV8ybVtFTlRSSUVTXSwKLQkJdGxiX2xsaV80bVtFTlRSSUVTXSwgdGxiX2xsZF80a1tFTlRSSUVTXSwKLQkJdGxiX2xsZF8ybVtFTlRSSUVTXSwgdGxiX2xsZF80bVtFTlRSSUVTXSwKLQkJdGxiX2xsZF8xZ1tFTlRSSUVTXSk7CisJCXRsYl9sbGlfNG1bRU5UUklFU10pOworCisJcHJfaW5mbygiTGFzdCBsZXZlbCBkVExCIGVudHJpZXM6IDRLQiAlZCwgMk1CICVkLCA0TUIgJWQsIDFHQiAlZFxuIiwKKwkJdGxiX2xsZF80a1tFTlRSSUVTXSwgdGxiX2xsZF8ybVtFTlRSSUVTXSwKKwkJdGxiX2xsZF80bVtFTlRSSUVTXSwgdGxiX2xsZF8xZ1tFTlRSSUVTXSk7CiB9CiAKIHZvaWQgZGV0ZWN0X2h0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKQEAgLTEzMzIsNyArMTMzMyw3IEBACiAJYmFycmllcigpOwogCiAJeDg2X2NvbmZpZ3VyZV9ueCgpOwotCWVuYWJsZV94MmFwaWMoKTsKKwl4MmFwaWNfc2V0dXAoKTsKIAogCS8qCiAJICogc2V0IHVwIGFuZCBsb2FkIHRoZSBwZXItQ1BVIFRTUwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCmluZGV4IDljYzZiNmYuLjk0ZDdkY2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKQEAgLTQ4NywxMCArNDg3LDggQEAKIAogCQlyZG1zcmwoTVNSX0lBMzJfRU5FUkdZX1BFUkZfQklBUywgZXBiKTsKIAkJaWYgKChlcGIgJiAweEYpID09IEVORVJHWV9QRVJGX0JJQVNfUEVSRk9STUFOQ0UpIHsKLQkJCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAiRU5FUkdZX1BFUkZfQklBUzoiCi0JCQkJIiBTZXQgdG8gJ25vcm1hbCcsIHdhcyAncGVyZm9ybWFuY2UnXG4iCi0JCQkJIkVORVJHWV9QRVJGX0JJQVM6IFZpZXcgYW5kIHVwZGF0ZSB3aXRoIgotCQkJCSIgeDg2X2VuZXJneV9wZXJmX3BvbGljeSg4KVxuIik7CisJCQlwcl93YXJuX29uY2UoIkVORVJHWV9QRVJGX0JJQVM6IFNldCB0byAnbm9ybWFsJywgd2FzICdwZXJmb3JtYW5jZSdcbiIpOworCQkJcHJfd2Fybl9vbmNlKCJFTkVSR1lfUEVSRl9CSUFTOiBWaWV3IGFuZCB1cGRhdGUgd2l0aCB4ODZfZW5lcmd5X3BlcmZfcG9saWN5KDgpXG4iKTsKIAkJCWVwYiA9IChlcGIgJiB+MHhGKSB8IEVORVJHWV9QRVJGX0JJQVNfTk9STUFMOwogCQkJd3Jtc3JsKE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMsIGVwYik7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMKaW5kZXggZDJjNjExNi4uY2RmZWQ3OTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL21jZS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KIApAQCAtMTE1LDcgKzExNiw3IEBACiAgKiBDUFUvY2hpcHNldCBzcGVjaWZpYyBFREFDIGNvZGUgY2FuIHJlZ2lzdGVyIGEgbm90aWZpZXIgY2FsbCBoZXJlIHRvIHByaW50CiAgKiBNQ0UgZXJyb3JzIGluIGEgaHVtYW4tcmVhZGFibGUgZm9ybS4KICAqLwotQVRPTUlDX05PVElGSUVSX0hFQUQoeDg2X21jZV9kZWNvZGVyX2NoYWluKTsKK3N0YXRpYyBBVE9NSUNfTk9USUZJRVJfSEVBRCh4ODZfbWNlX2RlY29kZXJfY2hhaW4pOwogCiAvKiBEbyBpbml0aWFsIGluaXRpYWxpemF0aW9uIG9mIGEgc3RydWN0IG1jZSAqLwogdm9pZCBtY2Vfc2V0dXAoc3RydWN0IG1jZSAqbSkKQEAgLTMxMSw3ICszMTIsNyBAQAogCXBhbmljKCJQYW5pY2luZyBtYWNoaW5lIGNoZWNrIENQVSBkaWVkIik7CiB9CiAKLXN0YXRpYyB2b2lkIG1jZV9wYW5pYyhjaGFyICptc2csIHN0cnVjdCBtY2UgKmZpbmFsLCBjaGFyICpleHApCitzdGF0aWMgdm9pZCBtY2VfcGFuaWMoY29uc3QgY2hhciAqbXNnLCBzdHJ1Y3QgbWNlICpmaW5hbCwgY2hhciAqZXhwKQogewogCWludCBpLCBhcGVpX2VyciA9IDA7CiAKQEAgLTUyOSw3ICs1MzAsNyBAQAogCQlzY2hlZHVsZV93b3JrKHRoaXNfY3B1X3B0cigmbWNlX3dvcmspKTsKIH0KIAotREVGSU5FX1BFUl9DUFUoc3RydWN0IGlycV93b3JrLCBtY2VfaXJxX3dvcmspOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBpcnFfd29yaywgbWNlX2lycV93b3JrKTsKIAogc3RhdGljIHZvaWQgbWNlX2lycV93b3JrX2NiKHN0cnVjdCBpcnFfd29yayAqZW50cnkpCiB7CkBAIC03MzUsNyArNzM2LDcgQEAKIC8qCiAgKiBDaGVjayBpZiBhIHRpbWVvdXQgd2FpdGluZyBmb3Igb3RoZXIgQ1BVcyBoYXBwZW5lZC4KICAqLwotc3RhdGljIGludCBtY2VfdGltZWRfb3V0KHU2NCAqdCkKK3N0YXRpYyBpbnQgbWNlX3RpbWVkX291dCh1NjQgKnQsIGNvbnN0IGNoYXIgKm1zZykKIHsKIAkvKgogCSAqIFRoZSBvdGhlcnMgYWxyZWFkeSBkaWQgcGFuaWMgZm9yIHNvbWUgcmVhc29uLgpAQCAtNzUwLDggKzc1MSw3IEBACiAJCWdvdG8gb3V0OwogCWlmICgoczY0KSp0IDwgU1BJTlVOSVQpIHsKIAkJaWYgKG1jYV9jZmcudG9sZXJhbnQgPD0gMSkKLQkJCW1jZV9wYW5pYygiVGltZW91dCBzeW5jaHJvbml6aW5nIG1hY2hpbmUgY2hlY2sgb3ZlciBDUFVzIiwKLQkJCQkgIE5VTEwsIE5VTEwpOworCQkJbWNlX3BhbmljKG1zZywgTlVMTCwgTlVMTCk7CiAJCWNwdV9taXNzaW5nID0gMTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtODY3LDcgKzg2Nyw4IEBACiAJICogV2FpdCBmb3IgZXZlcnlvbmUuCiAJICovCiAJd2hpbGUgKGF0b21pY19yZWFkKCZtY2VfY2FsbGluKSAhPSBjcHVzKSB7Ci0JCWlmIChtY2VfdGltZWRfb3V0KCZ0aW1lb3V0KSkgeworCQlpZiAobWNlX3RpbWVkX291dCgmdGltZW91dCwKKwkJCQkgICJUaW1lb3V0OiBOb3QgYWxsIENQVXMgZW50ZXJlZCBicm9hZGNhc3QgZXhjZXB0aW9uIGhhbmRsZXIiKSkgewogCQkJYXRvbWljX3NldCgmZ2xvYmFsX253bywgMCk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KQEAgLTg5Miw3ICs4OTMsOCBAQAogCQkgKiBvbmx5IHNlZW4gYnkgb25lIENQVSBiZWZvcmUgY2xlYXJlZCwgYXZvaWRpbmcgZHVwbGljYXRlcy4KIAkJICovCiAJCXdoaWxlIChhdG9taWNfcmVhZCgmbWNlX2V4ZWN1dGluZykgPCBvcmRlcikgewotCQkJaWYgKG1jZV90aW1lZF9vdXQoJnRpbWVvdXQpKSB7CisJCQlpZiAobWNlX3RpbWVkX291dCgmdGltZW91dCwKKwkJCQkJICAiVGltZW91dDogU3ViamVjdCBDUFVzIHVuYWJsZSB0byBmaW5pc2ggbWFjaGluZSBjaGVjayBwcm9jZXNzaW5nIikpIHsKIAkJCQlhdG9taWNfc2V0KCZnbG9iYWxfbndvLCAwKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CkBAIC05MzYsNyArOTM4LDggQEAKIAkJICogbG9vcHMuCiAJCSAqLwogCQl3aGlsZSAoYXRvbWljX3JlYWQoJm1jZV9leGVjdXRpbmcpIDw9IGNwdXMpIHsKLQkJCWlmIChtY2VfdGltZWRfb3V0KCZ0aW1lb3V0KSkKKwkJCWlmIChtY2VfdGltZWRfb3V0KCZ0aW1lb3V0LAorCQkJCQkgICJUaW1lb3V0OiBNb25hcmNoIENQVSB1bmFibGUgdG8gZmluaXNoIG1hY2hpbmUgY2hlY2sgcHJvY2Vzc2luZyIpKQogCQkJCWdvdG8gcmVzZXQ7CiAJCQluZGVsYXkoU1BJTlVOSVQpOwogCQl9CkBAIC05NDksNyArOTUyLDggQEAKIAkJICogU3ViamVjdDogV2FpdCBmb3IgTW9uYXJjaCB0byBmaW5pc2guCiAJCSAqLwogCQl3aGlsZSAoYXRvbWljX3JlYWQoJm1jZV9leGVjdXRpbmcpICE9IDApIHsKLQkJCWlmIChtY2VfdGltZWRfb3V0KCZ0aW1lb3V0KSkKKwkJCWlmIChtY2VfdGltZWRfb3V0KCZ0aW1lb3V0LAorCQkJCQkgICJUaW1lb3V0OiBNb25hcmNoIENQVSBkaWQgbm90IGZpbmlzaCBtYWNoaW5lIGNoZWNrIHByb2Nlc3NpbmciKSkKIAkJCQlnb3RvIHJlc2V0OwogCQkJbmRlbGF5KFNQSU5VTklUKTsKIAkJfQpAQCAtMTAwMyw1MSArMTAwNyw2IEBACiB9CiAKIC8qCi0gKiBOZWVkIHRvIHNhdmUgZmF1bHRpbmcgcGh5c2ljYWwgYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggYSBwcm9jZXNzCi0gKiBpbiB0aGUgbWFjaGluZSBjaGVjayBoYW5kbGVyIHNvbWUgcGxhY2Ugd2hlcmUgd2UgY2FuIGdyYWIgaXQgYmFjawotICogbGF0ZXIgaW4gbWNlX25vdGlmeV9wcm9jZXNzKCkKLSAqLwotI2RlZmluZQlNQ0VfSU5GT19NQVgJMTYKLQotc3RydWN0IG1jZV9pbmZvIHsKLQlhdG9taWNfdAkJaW51c2U7Ci0Jc3RydWN0IHRhc2tfc3RydWN0CSp0OwotCV9fdTY0CQkJcGFkZHI7Ci0JaW50CQkJcmVzdGFydGFibGU7Ci19IG1jZV9pbmZvW01DRV9JTkZPX01BWF07Ci0KLXN0YXRpYyB2b2lkIG1jZV9zYXZlX2luZm8oX191NjQgYWRkciwgaW50IGMpCi17Ci0Jc3RydWN0IG1jZV9pbmZvICptaTsKLQotCWZvciAobWkgPSBtY2VfaW5mbzsgbWkgPCAmbWNlX2luZm9bTUNFX0lORk9fTUFYXTsgbWkrKykgewotCQlpZiAoYXRvbWljX2NtcHhjaGcoJm1pLT5pbnVzZSwgMCwgMSkgPT0gMCkgewotCQkJbWktPnQgPSBjdXJyZW50OwotCQkJbWktPnBhZGRyID0gYWRkcjsKLQkJCW1pLT5yZXN0YXJ0YWJsZSA9IGM7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQltY2VfcGFuaWMoIlRvbyBtYW55IGNvbmN1cnJlbnQgcmVjb3ZlcmFibGUgZXJyb3JzIiwgTlVMTCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWNlX2luZm8gKm1jZV9maW5kX2luZm8odm9pZCkKLXsKLQlzdHJ1Y3QgbWNlX2luZm8gKm1pOwotCi0JZm9yIChtaSA9IG1jZV9pbmZvOyBtaSA8ICZtY2VfaW5mb1tNQ0VfSU5GT19NQVhdOyBtaSsrKQotCQlpZiAoYXRvbWljX3JlYWQoJm1pLT5pbnVzZSkgJiYgbWktPnQgPT0gY3VycmVudCkKLQkJCXJldHVybiBtaTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgbWNlX2NsZWFyX2luZm8oc3RydWN0IG1jZV9pbmZvICptaSkKLXsKLQlhdG9taWNfc2V0KCZtaS0+aW51c2UsIDApOwotfQotCi0vKgogICogVGhlIGFjdHVhbCBtYWNoaW5lIGNoZWNrIGhhbmRsZXIuIFRoaXMgb25seSBoYW5kbGVzIHJlYWwKICAqIGV4Y2VwdGlvbnMgd2hlbiBzb21ldGhpbmcgZ290IGNvcnJ1cHRlZCBjb21pbmcgaW4gdGhyb3VnaCBpbnQgMTguCiAgKgpAQCAtMTA2Myw2ICsxMDIyLDcgQEAKIHsKIAlzdHJ1Y3QgbWNhX2NvbmZpZyAqY2ZnID0gJm1jYV9jZmc7CiAJc3RydWN0IG1jZSBtLCAqZmluYWw7CisJZW51bSBjdHhfc3RhdGUgcHJldl9zdGF0ZTsKIAlpbnQgaTsKIAlpbnQgd29yc3QgPSAwOwogCWludCBzZXZlcml0eTsKQEAgLTEwODQsNiArMTA0NCwxMCBAQAogCURFQ0xBUkVfQklUTUFQKHRvY2xlYXIsIE1BWF9OUl9CQU5LUyk7CiAJREVDTEFSRV9CSVRNQVAodmFsaWRfYmFua3MsIE1BWF9OUl9CQU5LUyk7CiAJY2hhciAqbXNnID0gIlVua25vd24iOworCXU2NCByZWNvdmVyX3BhZGRyID0gfjB1bGw7CisJaW50IGZsYWdzID0gTUZfQUNUSU9OX1JFUVVJUkVEOworCisJcHJldl9zdGF0ZSA9IGlzdF9lbnRlcihyZWdzKTsKIAogCXRoaXNfY3B1X2luYyhtY2VfZXhjZXB0aW9uX2NvdW50KTsKIApAQCAtMTIwMyw5ICsxMTY3LDkgQEAKIAkJaWYgKG5vX3dheV9vdXQpCiAJCQltY2VfcGFuaWMoIkZhdGFsIG1hY2hpbmUgY2hlY2sgb24gY3VycmVudCBDUFUiLCAmbSwgbXNnKTsKIAkJaWYgKHdvcnN0ID09IE1DRV9BUl9TRVZFUklUWSkgewotCQkJLyogc2NoZWR1bGUgYWN0aW9uIGJlZm9yZSByZXR1cm4gdG8gdXNlcmxhbmQgKi8KLQkJCW1jZV9zYXZlX2luZm8obS5hZGRyLCBtLm1jZ3N0YXR1cyAmIE1DR19TVEFUVVNfUklQVik7Ci0JCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01DRV9OT1RJRlkpOworCQkJcmVjb3Zlcl9wYWRkciA9IG0uYWRkcjsKKwkJCWlmICghKG0ubWNnc3RhdHVzICYgTUNHX1NUQVRVU19SSVBWKSkKKwkJCQlmbGFncyB8PSBNRl9NVVNUX0tJTEw7CiAJCX0gZWxzZSBpZiAoa2lsbF9pdCkgewogCQkJZm9yY2Vfc2lnKFNJR0JVUywgY3VycmVudCk7CiAJCX0KQEAgLTEyMTYsNiArMTE4MCwyNyBAQAogCW1jZV93cm1zcmwoTVNSX0lBMzJfTUNHX1NUQVRVUywgMCk7CiBvdXQ6CiAJc3luY19jb3JlKCk7CisKKwlpZiAocmVjb3Zlcl9wYWRkciA9PSB+MHVsbCkKKwkJZ290byBkb25lOworCisJcHJfZXJyKCJVbmNvcnJlY3RlZCBoYXJkd2FyZSBtZW1vcnkgZXJyb3IgaW4gdXNlci1hY2Nlc3MgYXQgJWxseCIsCisJCSByZWNvdmVyX3BhZGRyKTsKKwkvKgorCSAqIFdlIG11c3QgY2FsbCBtZW1vcnlfZmFpbHVyZSgpIGhlcmUgZXZlbiBpZiB0aGUgY3VycmVudCBwcm9jZXNzIGlzCisJICogZG9vbWVkLiBXZSBzdGlsbCBuZWVkIHRvIG1hcmsgdGhlIHBhZ2UgYXMgcG9pc29uZWQgYW5kIGFsZXJ0IGFueQorCSAqIG90aGVyIHVzZXJzIG9mIHRoZSBwYWdlLgorCSAqLworCWlzdF9iZWdpbl9ub25fYXRvbWljKHJlZ3MpOworCWxvY2FsX2lycV9lbmFibGUoKTsKKwlpZiAobWVtb3J5X2ZhaWx1cmUocmVjb3Zlcl9wYWRkciA+PiBQQUdFX1NISUZULCBNQ0VfVkVDVE9SLCBmbGFncykgPCAwKSB7CisJCXByX2VycigiTWVtb3J5IGVycm9yIG5vdCByZWNvdmVyZWQiKTsKKwkJZm9yY2Vfc2lnKFNJR0JVUywgY3VycmVudCk7CisJfQorCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaXN0X2VuZF9ub25fYXRvbWljKCk7Citkb25lOgorCWlzdF9leGl0KHJlZ3MsIHByZXZfc3RhdGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG9fbWFjaGluZV9jaGVjayk7CiAKQEAgLTEyMzMsNDIgKzEyMTgsNiBAQAogI2VuZGlmCiAKIC8qCi0gKiBDYWxsZWQgaW4gcHJvY2VzcyBjb250ZXh0IHRoYXQgaW50ZXJydXB0ZWQgYnkgTUNFIGFuZCBtYXJrZWQgd2l0aAotICogVElGX01DRV9OT1RJRlksIGp1c3QgYmVmb3JlIHJldHVybmluZyB0byBlcnJvbmVvdXMgdXNlcmxhbmQuCi0gKiBUaGlzIGNvZGUgaXMgYWxsb3dlZCB0byBzbGVlcC4KLSAqIEF0dGVtcHQgcG9zc2libGUgcmVjb3Zlcnkgc3VjaCBhcyBjYWxsaW5nIHRoZSBoaWdoIGxldmVsIFZNIGhhbmRsZXIgdG8KLSAqIHByb2Nlc3MgYW55IGNvcnJ1cHRlZCBwYWdlcywgYW5kIGtpbGwvc2lnbmFsIGN1cnJlbnQgcHJvY2VzcyBpZiByZXF1aXJlZC4KLSAqIEFjdGlvbiByZXF1aXJlZCBlcnJvcnMgYXJlIGhhbmRsZWQgaGVyZS4KLSAqLwotdm9pZCBtY2Vfbm90aWZ5X3Byb2Nlc3Modm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHBmbjsKLQlzdHJ1Y3QgbWNlX2luZm8gKm1pID0gbWNlX2ZpbmRfaW5mbygpOwotCWludCBmbGFncyA9IE1GX0FDVElPTl9SRVFVSVJFRDsKLQotCWlmICghbWkpCi0JCW1jZV9wYW5pYygiTG9zdCBwaHlzaWNhbCBhZGRyZXNzIGZvciB1bmNvbnN1bWVkIHVuY29ycmVjdGFibGUgZXJyb3IiLCBOVUxMLCBOVUxMKTsKLQlwZm4gPSBtaS0+cGFkZHIgPj4gUEFHRV9TSElGVDsKLQotCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9NQ0VfTk9USUZZKTsKLQotCXByX2VycigiVW5jb3JyZWN0ZWQgaGFyZHdhcmUgbWVtb3J5IGVycm9yIGluIHVzZXItYWNjZXNzIGF0ICVsbHgiLAotCQkgbWktPnBhZGRyKTsKLQkvKgotCSAqIFdlIG11c3QgY2FsbCBtZW1vcnlfZmFpbHVyZSgpIGhlcmUgZXZlbiBpZiB0aGUgY3VycmVudCBwcm9jZXNzIGlzCi0JICogZG9vbWVkLiBXZSBzdGlsbCBuZWVkIHRvIG1hcmsgdGhlIHBhZ2UgYXMgcG9pc29uZWQgYW5kIGFsZXJ0IGFueQotCSAqIG90aGVyIHVzZXJzIG9mIHRoZSBwYWdlLgotCSAqLwotCWlmICghbWktPnJlc3RhcnRhYmxlKQotCQlmbGFncyB8PSBNRl9NVVNUX0tJTEw7Ci0JaWYgKG1lbW9yeV9mYWlsdXJlKHBmbiwgTUNFX1ZFQ1RPUiwgZmxhZ3MpIDwgMCkgewotCQlwcl9lcnIoIk1lbW9yeSBlcnJvciBub3QgcmVjb3ZlcmVkIik7Ci0JCWZvcmNlX3NpZyhTSUdCVVMsIGN1cnJlbnQpOwotCX0KLQltY2VfY2xlYXJfaW5mbyhtaSk7Ci19Ci0KLS8qCiAgKiBBY3Rpb24gb3B0aW9uYWwgcHJvY2Vzc2luZyBoYXBwZW5zIGhlcmUgKHBpY2tpbmcgdXAKICAqIGZyb20gdGhlIGxpc3Qgb2YgZmF1bHRpbmcgcGFnZXMgdGhhdCBkb19tYWNoaW5lX2NoZWNrKCkKICAqIHBsYWNlZCBpbnRvIHRoZSAicmluZyIpLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svcDUuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3A1LmMKaW5kZXggYTMwNDI5OC4uZWMyNjYzYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svcDUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9wNS5jCkBAIC04LDYgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS90cmFwcy5oPgogI2luY2x1ZGUgPGFzbS9tY2UuaD4KICNpbmNsdWRlIDxhc20vbXNyLmg+CiAKQEAgLTE3LDggKzE4LDExIEBACiAvKiBNYWNoaW5lIGNoZWNrIGhhbmRsZXIgZm9yIFBlbnRpdW0gY2xhc3MgSW50ZWwgQ1BVczogKi8KIHN0YXRpYyB2b2lkIHBlbnRpdW1fbWFjaGluZV9jaGVjayhzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnJvcl9jb2RlKQogeworCWVudW0gY3R4X3N0YXRlIHByZXZfc3RhdGU7CiAJdTMyIGxvYWRkciwgaGksIGxvdHlwZTsKIAorCXByZXZfc3RhdGUgPSBpc3RfZW50ZXIocmVncyk7CisKIAlyZG1zcihNU1JfSUEzMl9QNV9NQ19BRERSLCBsb2FkZHIsIGhpKTsKIAlyZG1zcihNU1JfSUEzMl9QNV9NQ19UWVBFLCBsb3R5cGUsIGhpKTsKIApAQCAtMzMsNiArMzcsOCBAQAogCX0KIAogCWFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLLCBMT0NLREVQX05PV19VTlJFTElBQkxFKTsKKworCWlzdF9leGl0KHJlZ3MsIHByZXZfc3RhdGUpOwogfQogCiAvKiBTZXQgdXAgbWFjaGluZSBjaGVjayByZXBvcnRpbmcgZm9yIHByb2Nlc3NvcnMgd2l0aCBJbnRlbCBzdHlsZSBNQ0U6ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay93aW5jaGlwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay93aW5jaGlwLmMKaW5kZXggN2RjNTU2NC4uYmQ1ZDQ2YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svd2luY2hpcC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3dpbmNoaXAuYwpAQCAtNywxNCArNywxOSBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL21jZS5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KIAogLyogTWFjaGluZSBjaGVjayBoYW5kbGVyIGZvciBXaW5DaGlwIEM2OiAqLwogc3RhdGljIHZvaWQgd2luY2hpcF9tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVycm9yX2NvZGUpCiB7CisJZW51bSBjdHhfc3RhdGUgcHJldl9zdGF0ZSA9IGlzdF9lbnRlcihyZWdzKTsKKwogCXByaW50ayhLRVJOX0VNRVJHICJDUFUwOiBNYWNoaW5lIENoZWNrIEV4Y2VwdGlvbi5cbiIpOwogCWFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLLCBMT0NLREVQX05PV19VTlJFTElBQkxFKTsKKworCWlzdF9leGl0KHJlZ3MsIHByZXZfc3RhdGUpOwogfQogCiAvKiBTZXQgdXAgbWFjaGluZSBjaGVjayByZXBvcnRpbmcgb24gdGhlIFdpbmNoaXAgQzYgc2VyaWVzICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9jb3JlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21pY3JvY29kZS9jb3JlLmMKaW5kZXggMTVjMjkwOS4uMzZhODM2MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9taWNyb2NvZGUvY29yZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWljcm9jb2RlL2NvcmUuYwpAQCAtNTUyLDcgKzU1Miw3IEBACiAJaW50IGVycm9yOwogCiAJaWYgKHBhcmF2aXJ0X2VuYWJsZWQoKSB8fCBkaXNfdWNvZGVfbGRyKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKQogCQltaWNyb2NvZGVfb3BzID0gaW5pdF9pbnRlbF9taWNyb2NvZGUoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMKaW5kZXggOTQ0YmYwMS4uNDk4YjZkOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMKQEAgLTI0MzEsNiArMjQzMSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSA1NTogLyogMjJubSBBdG9tICJTaWx2ZXJtb250IiAgICAgICAgICAgICAgICAqLworCWNhc2UgNzY6IC8qIDE0bm0gQXRvbSAiQWlybW9udCIgICAgICAgICAgICAgICAgICAgKi8KIAljYXNlIDc3OiAvKiAyMm5tIEF0b20gIlNpbHZlcm1vbnQgQXZvdG9uL1JhbmdlbHkiICovCiAJCW1lbWNweShod19jYWNoZV9ldmVudF9pZHMsIHNsbV9od19jYWNoZV9ldmVudF9pZHMsCiAJCQlzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfcmFwbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3JhcGwuYwppbmRleCA2ZTQzNGY4Li5jNGJiOGI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfcmFwbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF9yYXBsLmMKQEAgLTE0Miw3ICsxNDIsNyBAQAogCSAqIG9yIHVzZSBsZGV4cChjb3VudCwgLTMyKS4KIAkgKiBXYXR0cyA9IEpvdWxlcy9UaW1lIGRlbHRhCiAJICovCi0JcmV0dXJuIHYgPDwgKDMyIC0gX190aGlzX2NwdV9yZWFkKHJhcGxfcG11LT5od191bml0KSk7CisJcmV0dXJuIHYgPDwgKDMyIC0gX190aGlzX2NwdV9yZWFkKHJhcGxfcG11KS0+aHdfdW5pdCk7CiB9CiAKIHN0YXRpYyB1NjQgcmFwbF9ldmVudF91cGRhdGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZS5jCmluZGV4IDEwYjhkM2UuLmM2MzViOGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfdW5jb3JlLmMKQEAgLTg0MCw3ICs4NDAsNiBAQAogCWJveC0+cGh5c19pZCA9IHBoeXNfaWQ7CiAJYm94LT5wY2lfZGV2ID0gcGRldjsKIAlib3gtPnBtdSA9IHBtdTsKLQl1bmNvcmVfYm94X2luaXQoYm94KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgYm94KTsKIAogCXJhd19zcGluX2xvY2soJnVuY29yZV9ib3hfbG9jayk7CkBAIC0xMDA0LDEwICsxMDAzLDggQEAKIAkJCXBtdSA9ICZ0eXBlLT5wbXVzW2pdOwogCQkJYm94ID0gKnBlcl9jcHVfcHRyKHBtdS0+Ym94LCBjcHUpOwogCQkJLyogY2FsbGVkIGJ5IHVuY29yZV9jcHVfaW5pdD8gKi8KLQkJCWlmIChib3ggJiYgYm94LT5waHlzX2lkID49IDApIHsKLQkJCQl1bmNvcmVfYm94X2luaXQoYm94KTsKKwkJCWlmIChib3ggJiYgYm94LT5waHlzX2lkID49IDApCiAJCQkJY29udGludWU7Ci0JCQl9CiAKIAkJCWZvcl9lYWNoX29ubGluZV9jcHUoaykgewogCQkJCWV4aXN0ID0gKnBlcl9jcHVfcHRyKHBtdS0+Ym94LCBrKTsKQEAgLTEwMjMsMTAgKzEwMjAsOCBAQAogCQkJCX0KIAkJCX0KIAotCQkJaWYgKGJveCkgeworCQkJaWYgKGJveCkKIAkJCQlib3gtPnBoeXNfaWQgPSBwaHlzX2lkOwotCQkJCXVuY29yZV9ib3hfaW5pdChib3gpOwotCQkJfQogCQl9CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZS5oIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsX3VuY29yZS5oCmluZGV4IDg2M2Q5YjAuLjZjOGMxZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbF91bmNvcmUuaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWxfdW5jb3JlLmgKQEAgLTI1Nyw2ICsyNTcsMTQgQEAKIAlyZXR1cm4gYm94LT5wbXUtPnR5cGUtPm51bV9jb3VudGVyczsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHVuY29yZV9ib3hfaW5pdChzdHJ1Y3QgaW50ZWxfdW5jb3JlX2JveCAqYm94KQoreworCWlmICghdGVzdF9hbmRfc2V0X2JpdChVTkNPUkVfQk9YX0ZMQUdfSU5JVElBVEVELCAmYm94LT5mbGFncykpIHsKKwkJaWYgKGJveC0+cG11LT50eXBlLT5vcHMtPmluaXRfYm94KQorCQkJYm94LT5wbXUtPnR5cGUtPm9wcy0+aW5pdF9ib3goYm94KTsKKwl9Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB1bmNvcmVfZGlzYWJsZV9ib3goc3RydWN0IGludGVsX3VuY29yZV9ib3ggKmJveCkKIHsKIAlpZiAoYm94LT5wbXUtPnR5cGUtPm9wcy0+ZGlzYWJsZV9ib3gpCkBAIC0yNjUsNiArMjczLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHVuY29yZV9lbmFibGVfYm94KHN0cnVjdCBpbnRlbF91bmNvcmVfYm94ICpib3gpCiB7CisJdW5jb3JlX2JveF9pbml0KGJveCk7CisKIAlpZiAoYm94LT5wbXUtPnR5cGUtPm9wcy0+ZW5hYmxlX2JveCkKIAkJYm94LT5wbXUtPnR5cGUtPm9wcy0+ZW5hYmxlX2JveChib3gpOwogfQpAQCAtMjg3LDE0ICsyOTcsNiBAQAogCXJldHVybiBib3gtPnBtdS0+dHlwZS0+b3BzLT5yZWFkX2NvdW50ZXIoYm94LCBldmVudCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmNvcmVfYm94X2luaXQoc3RydWN0IGludGVsX3VuY29yZV9ib3ggKmJveCkKLXsKLQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoVU5DT1JFX0JPWF9GTEFHX0lOSVRJQVRFRCwgJmJveC0+ZmxhZ3MpKSB7Ci0JCWlmIChib3gtPnBtdS0+dHlwZS0+b3BzLT5pbml0X2JveCkKLQkJCWJveC0+cG11LT50eXBlLT5vcHMtPmluaXRfYm94KGJveCk7Ci0JfQotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgdW5jb3JlX2JveF9pc19mYWtlKHN0cnVjdCBpbnRlbF91bmNvcmVfYm94ICpib3gpCiB7CiAJcmV0dXJuIChib3gtPnBoeXNfaWQgPCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCmluZGV4IGRkMmYwN2EuLjQ2MjAxZGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwpAQCAtMTg0LDkgKzE4NCw5IEBACiAgKiBvdmVyd3JpdHRlbiBpbiB0aGUgc2FtZSBsb2NhdGlvbiwgc3RhcnRpbmcgYXQgYmlvc21hcC4KICAqCiAgKiBUaGUgaW50ZWdlciBwb2ludGVkIHRvIGJ5IHBucl9tYXAgbXVzdCBiZSB2YWxpZCBvbiBlbnRyeSAodGhlCi0gKiBjdXJyZW50IG51bWJlciBvZiB2YWxpZCBlbnRyaWVzIGxvY2F0ZWQgYXQgYmlvc21hcCkgYW5kIHdpbGwKLSAqIGJlIHVwZGF0ZWQgb24gcmV0dXJuLCB3aXRoIHRoZSBuZXcgbnVtYmVyIG9mIHZhbGlkIGVudHJpZXMKLSAqIChzb21ldGhpbmcgbm8gbW9yZSB0aGFuIG1heF9ucl9tYXAuKQorICogY3VycmVudCBudW1iZXIgb2YgdmFsaWQgZW50cmllcyBsb2NhdGVkIGF0IGJpb3NtYXApLiBJZiB0aGUKKyAqIHNhbml0aXppbmcgc3VjY2VlZHMgdGhlICpwbnJfbWFwIHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBuZXcKKyAqIG51bWJlciBvZiB2YWxpZCBlbnRyaWVzIChzb21ldGhpbmcgbm8gbW9yZSB0aGFuIG1heF9ucl9tYXApLgogICoKICAqIFRoZSByZXR1cm4gdmFsdWUgZnJvbSBzYW5pdGl6ZV9lODIwX21hcCgpIGlzIHplcm8gaWYgaXQKICAqIHN1Y2Nlc3NmdWxseSAnc2FuaXRpemVkJyB0aGUgbWFwIGVudHJpZXMgcGFzc2VkIGluLCBhbmQgaXMgLTEKQEAgLTU2MSwyMyArNTYxLDE1IEBACiAKIHZvaWQgX19pbml0IHVwZGF0ZV9lODIwKHZvaWQpCiB7Ci0JdTMyIG5yX21hcDsKLQotCW5yX21hcCA9IGU4MjAubnJfbWFwOwotCWlmIChzYW5pdGl6ZV9lODIwX21hcChlODIwLm1hcCwgQVJSQVlfU0laRShlODIwLm1hcCksICZucl9tYXApKQorCWlmIChzYW5pdGl6ZV9lODIwX21hcChlODIwLm1hcCwgQVJSQVlfU0laRShlODIwLm1hcCksICZlODIwLm5yX21hcCkpCiAJCXJldHVybjsKLQllODIwLm5yX21hcCA9IG5yX21hcDsKIAlwcmludGsoS0VSTl9JTkZPICJlODIwOiBtb2RpZmllZCBwaHlzaWNhbCBSQU0gbWFwOlxuIik7CiAJZTgyMF9wcmludF9tYXAoIm1vZGlmaWVkIik7CiB9CiBzdGF0aWMgdm9pZCBfX2luaXQgdXBkYXRlX2U4MjBfc2F2ZWQodm9pZCkKIHsKLQl1MzIgbnJfbWFwOwotCi0JbnJfbWFwID0gZTgyMF9zYXZlZC5ucl9tYXA7Ci0JaWYgKHNhbml0aXplX2U4MjBfbWFwKGU4MjBfc2F2ZWQubWFwLCBBUlJBWV9TSVpFKGU4MjBfc2F2ZWQubWFwKSwgJm5yX21hcCkpCi0JCXJldHVybjsKLQllODIwX3NhdmVkLm5yX21hcCA9IG5yX21hcDsKKwlzYW5pdGl6ZV9lODIwX21hcChlODIwX3NhdmVkLm1hcCwgQVJSQVlfU0laRShlODIwX3NhdmVkLm1hcCksCisJCQkJJmU4MjBfc2F2ZWQubnJfbWFwKTsKIH0KICNkZWZpbmUgTUFYX0dBUF9FTkQgMHgxMDAwMDAwMDB1bGwKIC8qCkBAIC04OTgsMTEgKzg5MCw5IEBACiB2b2lkIF9faW5pdCBmaW5pc2hfZTgyMF9wYXJzaW5nKHZvaWQpCiB7CiAJaWYgKHVzZXJkZWYpIHsKLQkJdTMyIG5yID0gZTgyMC5ucl9tYXA7Ci0KLQkJaWYgKHNhbml0aXplX2U4MjBfbWFwKGU4MjAubWFwLCBBUlJBWV9TSVpFKGU4MjAubWFwKSwgJm5yKSA8IDApCisJCWlmIChzYW5pdGl6ZV9lODIwX21hcChlODIwLm1hcCwgQVJSQVlfU0laRShlODIwLm1hcCksCisJCQkJCSZlODIwLm5yX21hcCkgPCAwKQogCQkJZWFybHlfcGFuaWMoIkludmFsaWQgdXNlciBzdXBwbGllZCBtZW1vcnkgbWFwIik7Ci0JCWU4MjAubnJfbWFwID0gbnI7CiAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiZTgyMDogdXNlci1kZWZpbmVkIHBoeXNpY2FsIFJBTSBtYXA6XG4iKTsKIAkJZTgyMF9wcmludF9tYXAoInVzZXIiKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKaW5kZXggOWViYWY2My4uZGIxMzY1NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2VudHJ5XzY0LlMKQEAgLTE0Myw3ICsxNDMsOCBAQAogCW1vdnEgXHRtcCxSU1ArXG9mZnNldCglcnNwKQogCW1vdnEgJF9fVVNFUl9EUyxTUytcb2Zmc2V0KCVyc3ApCiAJbW92cSAkX19VU0VSX0NTLENTK1xvZmZzZXQoJXJzcCkKLQltb3ZxICQtMSxSQ1grXG9mZnNldCglcnNwKQorCW1vdnEgUklQK1xvZmZzZXQoJXJzcCksXHRtcCAgLyogZ2V0IHJpcCAqLworCW1vdnEgXHRtcCxSQ1grXG9mZnNldCglcnNwKSAgLyogY29weSBpdCB0byByY3ggYXMgc3lzcmV0IHdvdWxkIGRvICovCiAJbW92cSBSMTErXG9mZnNldCglcnNwKSxcdG1wICAvKiBnZXQgZWZsYWdzICovCiAJbW92cSBcdG1wLEVGTEFHUytcb2Zmc2V0KCVyc3ApCiAJLmVuZG0KQEAgLTE1NSwyNyArMTU2LDYgQEAKIAltb3ZxIFx0bXAsUjExK1xvZmZzZXQoJXJzcCkKIAkuZW5kbQogCi0JLm1hY3JvIEZBS0VfU1RBQ0tfRlJBTUUgY2hpbGRfcmlwCi0JLyogcHVzaCBpbiBvcmRlciBzcywgcnNwLCBlZmxhZ3MsIGNzLCByaXAgKi8KLQl4b3JsICVlYXgsICVlYXgKLQlwdXNocV9jZmkgJF9fS0VSTkVMX0RTIC8qIHNzICovCi0JLypDRklfUkVMX09GRlNFVAlzcywwKi8KLQlwdXNocV9jZmkgJXJheCAvKiByc3AgKi8KLQlDRklfUkVMX09GRlNFVAlyc3AsMAotCXB1c2hxX2NmaSAkKFg4Nl9FRkxBR1NfSUZ8WDg2X0VGTEFHU19GSVhFRCkgLyogZWZsYWdzIC0gaW50ZXJydXB0cyBvbiAqLwotCS8qQ0ZJX1JFTF9PRkZTRVQJcmZsYWdzLDAqLwotCXB1c2hxX2NmaSAkX19LRVJORUxfQ1MgLyogY3MgKi8KLQkvKkNGSV9SRUxfT0ZGU0VUCWNzLDAqLwotCXB1c2hxX2NmaSBcY2hpbGRfcmlwIC8qIHJpcCAqLwotCUNGSV9SRUxfT0ZGU0VUCXJpcCwwCi0JcHVzaHFfY2ZpICVyYXggLyogb3JpZyByYXggKi8KLQkuZW5kbQotCi0JLm1hY3JvIFVORkFLRV9TVEFDS19GUkFNRQotCWFkZHEgJDgqNiwgJXJzcAotCUNGSV9BREpVU1RfQ0ZBX09GRlNFVAktKDYqOCkKLQkuZW5kbQotCiAvKgogICogaW5pdGlhbCBmcmFtZSBzdGF0ZSBmb3IgaW50ZXJydXB0cyAoYW5kIGV4Y2VwdGlvbnMgd2l0aG91dCBlcnJvciBjb2RlKQogICovCkBAIC0yMzgsNTEgKzIxOCw2IEBACiAJQ0ZJX1JFTF9PRkZTRVQgcjE1LCBSMTUrXG9mZnNldAogCS5lbmRtCiAKLS8qIHNhdmUgcGFydGlhbCBzdGFjayBmcmFtZSAqLwotCS5tYWNybyBTQVZFX0FSR1NfSVJRCi0JY2xkCi0JLyogc3RhcnQgZnJvbSByYnAgaW4gcHRfcmVncyBhbmQganVtcCBvdmVyICovCi0JbW92cV9jZmkgcmRpLCAoUkRJLVJCUCkKLQltb3ZxX2NmaSByc2ksIChSU0ktUkJQKQotCW1vdnFfY2ZpIHJkeCwgKFJEWC1SQlApCi0JbW92cV9jZmkgcmN4LCAoUkNYLVJCUCkKLQltb3ZxX2NmaSByYXgsIChSQVgtUkJQKQotCW1vdnFfY2ZpICByOCwgIChSOC1SQlApCi0JbW92cV9jZmkgIHI5LCAgKFI5LVJCUCkKLQltb3ZxX2NmaSByMTAsIChSMTAtUkJQKQotCW1vdnFfY2ZpIHIxMSwgKFIxMS1SQlApCi0KLQkvKiBTYXZlIHJicCBzbyB0aGF0IHdlIGNhbiB1bndpbmQgZnJvbSBnZXRfaXJxX3JlZ3MoKSAqLwotCW1vdnFfY2ZpIHJicCwgMAotCi0JLyogU2F2ZSBwcmV2aW91cyBzdGFjayB2YWx1ZSAqLwotCW1vdnEgJXJzcCwgJXJzaQotCi0JbGVhcSAtUkJQKCVyc3ApLCVyZGkJLyogYXJnMSBmb3IgaGFuZGxlciAqLwotCXRlc3RsICQzLCBDUy1SQlAoJXJzaSkKLQlqZSAxZgotCVNXQVBHUwotCS8qCi0JICogaXJxX2NvdW50IGlzIHVzZWQgdG8gY2hlY2sgaWYgYSBDUFUgaXMgYWxyZWFkeSBvbiBhbiBpbnRlcnJ1cHQgc3RhY2sKLQkgKiBvciBub3QuIFdoaWxlIHRoaXMgaXMgZXNzZW50aWFsbHkgcmVkdW5kYW50IHdpdGggcHJlZW1wdF9jb3VudCBpdCBpcwotCSAqIGEgbGl0dGxlIGNoZWFwZXIgdG8gdXNlIGEgc2VwYXJhdGUgY291bnRlciBpbiB0aGUgUERBIChzaG9ydCBvZgotCSAqIG1vdmluZyBpcnFfZW50ZXIgaW50byBhc3NlbWJseSwgd2hpY2ggd291bGQgYmUgdG9vIG11Y2ggd29yaykKLQkgKi8KLTE6CWluY2wgUEVSX0NQVV9WQVIoaXJxX2NvdW50KQotCWNtb3Z6cSBQRVJfQ1BVX1ZBUihpcnFfc3RhY2tfcHRyKSwlcnNwCi0JQ0ZJX0RFRl9DRkFfUkVHSVNURVIJcnNpCi0KLQkvKiBTdG9yZSBwcmV2aW91cyBzdGFjayB2YWx1ZSAqLwotCXB1c2hxICVyc2kKLQlDRklfRVNDQVBFCTB4MGYgLyogRFdfQ0ZBX2RlZl9jZmFfZXhwcmVzc2lvbiAqLywgNiwgXAotCQkJMHg3NyAvKiBEV19PUF9icmVnNyAqLywgMCwgXAotCQkJMHgwNiAvKiBEV19PUF9kZXJlZiAqLywgXAotCQkJMHgwOCAvKiBEV19PUF9jb25zdDF1ICovLCBTUys4LVJCUCwgXAotCQkJMHgyMiAvKiBEV19PUF9wbHVzICovCi0JLyogV2UgZW50ZXJlZCBhbiBpbnRlcnJ1cHQgY29udGV4dCAtIGlycXMgYXJlIG9mZjogKi8KLQlUUkFDRV9JUlFTX09GRgotCS5lbmRtCi0KIEVOVFJZKHNhdmVfcGFyYW5vaWQpCiAJWENQVF9GUkFNRSAxIFJESSs4CiAJY2xkCkBAIC00MjYsMTUgKzM2MSwxMiBAQAogICogSGFzIGluY29tcGxldGUgc3RhY2sgZnJhbWUgYW5kIHVuZGVmaW5lZCB0b3Agb2Ygc3RhY2suCiAgKi8KIHJldF9mcm9tX3N5c19jYWxsOgotCW1vdmwgJF9USUZfQUxMV09SS19NQVNLLCVlZGkKLQkvKiBlZGk6CWZsYWdtYXNrICovCi1zeXNyZXRfY2hlY2s6CisJdGVzdGwgJF9USUZfQUxMV09SS19NQVNLLFRJX2ZsYWdzK1RIUkVBRF9JTkZPKCVyc3AsUklQLUFSR09GRlNFVCkKKwlqbnogaW50X3JldF9mcm9tX3N5c19jYWxsX2ZpeHVwCS8qIEdvIHRoZSB0aGUgc2xvdyBwYXRoICovCisKIAlMT0NLREVQX1NZU19FWElUCiAJRElTQUJMRV9JTlRFUlJVUFRTKENMQlJfTk9ORSkKIAlUUkFDRV9JUlFTX09GRgotCW1vdmwgVElfZmxhZ3MrVEhSRUFEX0lORk8oJXJzcCxSSVAtQVJHT0ZGU0VUKSwlZWR4Ci0JYW5kbCAlZWRpLCVlZHgKLQlqbnogIHN5c3JldF9jYXJlZnVsCiAJQ0ZJX1JFTUVNQkVSX1NUQVRFCiAJLyoKIAkgKiBzeXNyZXRxIHdpbGwgcmUtZW5hYmxlIGludGVycnVwdHM6CkBAIC00NDgsNDkgKzM4MCwxMCBAQAogCVVTRVJHU19TWVNSRVQ2NAogCiAJQ0ZJX1JFU1RPUkVfU1RBVEUKLQkvKiBIYW5kbGUgcmVzY2hlZHVsZXMgKi8KLQkvKiBlZHg6CXdvcmssIGVkaTogd29ya21hc2sgKi8KLXN5c3JldF9jYXJlZnVsOgotCWJ0ICRUSUZfTkVFRF9SRVNDSEVELCVlZHgKLQlqbmMgc3lzcmV0X3NpZ25hbAotCVRSQUNFX0lSUVNfT04KLQlFTkFCTEVfSU5URVJSVVBUUyhDTEJSX05PTkUpCi0JcHVzaHFfY2ZpICVyZGkKLQlTQ0hFRFVMRV9VU0VSCi0JcG9wcV9jZmkgJXJkaQotCWptcCBzeXNyZXRfY2hlY2sKIAotCS8qIEhhbmRsZSBhIHNpZ25hbCAqLwotc3lzcmV0X3NpZ25hbDoKLQlUUkFDRV9JUlFTX09OCi0JRU5BQkxFX0lOVEVSUlVQVFMoQ0xCUl9OT05FKQotI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKLQlidCAkVElGX1NZU0NBTExfQVVESVQsJWVkeAotCWpjIHN5c3JldF9hdWRpdAotI2VuZGlmCi0JLyoKLQkgKiBXZSBoYXZlIGEgc2lnbmFsLCBvciBleGl0IHRyYWNpbmcgb3Igc2luZ2xlLXN0ZXAuCi0JICogVGhlc2UgYWxsIHdpbmQgdXAgd2l0aCB0aGUgaXJldCByZXR1cm4gcGF0aCBhbnl3YXksCi0JICogc28ganVzdCBqb2luIHRoYXQgcGF0aCByaWdodCBub3cuCi0JICovCitpbnRfcmV0X2Zyb21fc3lzX2NhbGxfZml4dXA6CiAJRklYVVBfVE9QX09GX1NUQUNLICVyMTEsIC1BUkdPRkZTRVQKLQlqbXAgaW50X2NoZWNrX3N5c2NhbGxfZXhpdF93b3JrCi0KLSNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCi0JLyoKLQkgKiBSZXR1cm4gZmFzdCBwYXRoIGZvciBzeXNjYWxsIGF1ZGl0LiAgQ2FsbCBfX2F1ZGl0X3N5c2NhbGxfZXhpdCgpCi0JICogZGlyZWN0bHkgYW5kIHRoZW4ganVtcCBiYWNrIHRvIHRoZSBmYXN0IHBhdGggd2l0aCBUSUZfU1lTQ0FMTF9BVURJVAotCSAqIG1hc2tlZCBvZmYuCi0JICovCi1zeXNyZXRfYXVkaXQ6Ci0JbW92cSBSQVgtQVJHT0ZGU0VUKCVyc3ApLCVyc2kJLyogc2Vjb25kIGFyZywgc3lzY2FsbCByZXR1cm4gdmFsdWUgKi8KLQljbXBxICQtTUFYX0VSUk5PLCVyc2kJLyogaXMgaXQgPCAtTUFYX0VSUk5PPyAqLwotCXNldGJlICVhbAkJLyogMSBpZiBzbywgMCBpZiBub3QgKi8KLQltb3Z6YmwgJWFsLCVlZGkJCS8qIHplcm8tZXh0ZW5kIHRoYXQgaW50byAlZWRpICovCi0JY2FsbCBfX2F1ZGl0X3N5c2NhbGxfZXhpdAotCW1vdmwgJChfVElGX0FMTFdPUktfTUFTSyAmIH5fVElGX1NZU0NBTExfQVVESVQpLCVlZGkKLQlqbXAgc3lzcmV0X2NoZWNrCi0jZW5kaWYJLyogQ09ORklHX0FVRElUU1lTQ0FMTCAqLworCWptcCBpbnRfcmV0X2Zyb21fc3lzX2NhbGwKIAogCS8qIERvIHN5c2NhbGwgdHJhY2luZyAqLwogdHJhY2VzeXM6CkBAIC02MjYsMTkgKzUxOSw2IEBACiAJRk9SS19MSUtFICB2Zm9yawogCUZJWEVEX0ZSQU1FIHN0dWJfaW9wbCwgc3lzX2lvcGwKIAotRU5UUlkocHRyZWdzY2FsbF9jb21tb24pCi0JREVGQVVMVF9GUkFNRSAxIDgJLyogb2Zmc2V0IDg6IHJldHVybiBhZGRyZXNzICovCi0JUkVTVE9SRV9UT1BfT0ZfU1RBQ0sgJXIxMSwgOAotCW1vdnFfY2ZpX3Jlc3RvcmUgUjE1KzgsIHIxNQotCW1vdnFfY2ZpX3Jlc3RvcmUgUjE0KzgsIHIxNAotCW1vdnFfY2ZpX3Jlc3RvcmUgUjEzKzgsIHIxMwotCW1vdnFfY2ZpX3Jlc3RvcmUgUjEyKzgsIHIxMgotCW1vdnFfY2ZpX3Jlc3RvcmUgUkJQKzgsIHJicAotCW1vdnFfY2ZpX3Jlc3RvcmUgUkJYKzgsIHJieAotCXJldCAkUkVTVF9TS0lQCQkvKiBwb3AgZXh0ZW5kZWQgcmVnaXN0ZXJzICovCi0JQ0ZJX0VORFBST0MKLUVORChwdHJlZ3NjYWxsX2NvbW1vbikKLQogRU5UUlkoc3R1Yl9leGVjdmUpCiAJQ0ZJX1NUQVJUUFJPQwogCWFkZHEgJDgsICVyc3AKQEAgLTc3OSw3ICs2NTksNDggQEAKIAkvKiByZXNlcnZlIHB0X3JlZ3MgZm9yIHNjcmF0Y2ggcmVncyBhbmQgcmJwICovCiAJc3VicSAkT1JJR19SQVgtUkJQLCAlcnNwCiAJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIE9SSUdfUkFYLVJCUAotCVNBVkVfQVJHU19JUlEKKwljbGQKKwkvKiBzdGFydCBmcm9tIHJicCBpbiBwdF9yZWdzIGFuZCBqdW1wIG92ZXIgKi8KKwltb3ZxX2NmaSByZGksIChSREktUkJQKQorCW1vdnFfY2ZpIHJzaSwgKFJTSS1SQlApCisJbW92cV9jZmkgcmR4LCAoUkRYLVJCUCkKKwltb3ZxX2NmaSByY3gsIChSQ1gtUkJQKQorCW1vdnFfY2ZpIHJheCwgKFJBWC1SQlApCisJbW92cV9jZmkgIHI4LCAgKFI4LVJCUCkKKwltb3ZxX2NmaSAgcjksICAoUjktUkJQKQorCW1vdnFfY2ZpIHIxMCwgKFIxMC1SQlApCisJbW92cV9jZmkgcjExLCAoUjExLVJCUCkKKworCS8qIFNhdmUgcmJwIHNvIHRoYXQgd2UgY2FuIHVud2luZCBmcm9tIGdldF9pcnFfcmVncygpICovCisJbW92cV9jZmkgcmJwLCAwCisKKwkvKiBTYXZlIHByZXZpb3VzIHN0YWNrIHZhbHVlICovCisJbW92cSAlcnNwLCAlcnNpCisKKwlsZWFxIC1SQlAoJXJzcCksJXJkaQkvKiBhcmcxIGZvciBoYW5kbGVyICovCisJdGVzdGwgJDMsIENTLVJCUCglcnNpKQorCWplIDFmCisJU1dBUEdTCisJLyoKKwkgKiBpcnFfY291bnQgaXMgdXNlZCB0byBjaGVjayBpZiBhIENQVSBpcyBhbHJlYWR5IG9uIGFuIGludGVycnVwdCBzdGFjaworCSAqIG9yIG5vdC4gV2hpbGUgdGhpcyBpcyBlc3NlbnRpYWxseSByZWR1bmRhbnQgd2l0aCBwcmVlbXB0X2NvdW50IGl0IGlzCisJICogYSBsaXR0bGUgY2hlYXBlciB0byB1c2UgYSBzZXBhcmF0ZSBjb3VudGVyIGluIHRoZSBQREEgKHNob3J0IG9mCisJICogbW92aW5nIGlycV9lbnRlciBpbnRvIGFzc2VtYmx5LCB3aGljaCB3b3VsZCBiZSB0b28gbXVjaCB3b3JrKQorCSAqLworMToJaW5jbCBQRVJfQ1BVX1ZBUihpcnFfY291bnQpCisJY21vdnpxIFBFUl9DUFVfVkFSKGlycV9zdGFja19wdHIpLCVyc3AKKwlDRklfREVGX0NGQV9SRUdJU1RFUglyc2kKKworCS8qIFN0b3JlIHByZXZpb3VzIHN0YWNrIHZhbHVlICovCisJcHVzaHEgJXJzaQorCUNGSV9FU0NBUEUJMHgwZiAvKiBEV19DRkFfZGVmX2NmYV9leHByZXNzaW9uICovLCA2LCBcCisJCQkweDc3IC8qIERXX09QX2JyZWc3ICovLCAwLCBcCisJCQkweDA2IC8qIERXX09QX2RlcmVmICovLCBcCisJCQkweDA4IC8qIERXX09QX2NvbnN0MXUgKi8sIFNTKzgtUkJQLCBcCisJCQkweDIyIC8qIERXX09QX3BsdXMgKi8KKwkvKiBXZSBlbnRlcmVkIGFuIGludGVycnVwdCBjb250ZXh0IC0gaXJxcyBhcmUgb2ZmOiAqLworCVRSQUNFX0lSUVNfT0ZGCisKIAljYWxsIFxmdW5jCiAJLmVuZG0KIApAQCAtODMxLDYgKzc1Miw2MCBAQAogCSAqLwogCURJU0FCTEVfSU5URVJSVVBUUyhDTEJSX0FOWSkKIAlUUkFDRV9JUlFTX0lSRVRRCisKKwkvKgorCSAqIFRyeSB0byB1c2UgU1lTUkVUIGluc3RlYWQgb2YgSVJFVCBpZiB3ZSdyZSByZXR1cm5pbmcgdG8KKwkgKiBhIGNvbXBsZXRlbHkgY2xlYW4gNjQtYml0IHVzZXJzcGFjZSBjb250ZXh0LgorCSAqLworCW1vdnEgKFJDWC1SMTEpKCVyc3ApLCAlcmN4CisJY21wcSAlcmN4LChSSVAtUjExKSglcnNwKQkJLyogUkNYID09IFJJUCAqLworCWpuZSBvcHBvcnR1bmlzdGljX3N5c3JldF9mYWlsZWQKKworCS8qCisJICogT24gSW50ZWwgQ1BVcywgc3lzcmV0IHdpdGggbm9uLWNhbm9uaWNhbCBSQ1gvUklQIHdpbGwgI0dQCisJICogaW4ga2VybmVsIHNwYWNlLiAgVGhpcyBlc3NlbnRpYWxseSBsZXRzIHRoZSB1c2VyIHRha2Ugb3ZlcgorCSAqIHRoZSBrZXJuZWwsIHNpbmNlIHVzZXJzcGFjZSBjb250cm9scyBSU1AuICBJdCdzIG5vdCB3b3J0aAorCSAqIHRlc3RpbmcgZm9yIGNhbm9uaWNhbG5lc3MgZXhhY3RseSAtLSB0aGlzIGNoZWNrIGRldGVjdHMgYW55CisJICogb2YgdGhlIDE3IGhpZ2ggYml0cyBzZXQsIHdoaWNoIGlzIHRydWUgZm9yIG5vbi1jYW5vbmljYWwKKwkgKiBvciBrZXJuZWwgYWRkcmVzc2VzLiAgKFRoaXMgd2lsbCBwZXNzaW1pemUgdnN5c2NhbGw9bmF0aXZlLgorCSAqIEJpZyBkZWFsLikKKwkgKgorCSAqIElmIHZpcnR1YWwgYWRkcmVzc2VzIGV2ZXIgYmVjb21lIHdpZGVyLCB0aGlzIHdpbGwgbmVlZAorCSAqIHRvIGJlIHVwZGF0ZWQgdG8gcmVtYWluIGNvcnJlY3Qgb24gYm90aCBvbGQgYW5kIG5ldyBDUFVzLgorCSAqLworCS5pZm5lIF9fVklSVFVBTF9NQVNLX1NISUZUIC0gNDcKKwkuZXJyb3IgInZpcnR1YWwgYWRkcmVzcyB3aWR0aCBjaGFuZ2VkIC0tIHN5c3JldCBjaGVja3MgbmVlZCB1cGRhdGUiCisJLmVuZGlmCisJc2hyICRfX1ZJUlRVQUxfTUFTS19TSElGVCwgJXJjeAorCWpueiBvcHBvcnR1bmlzdGljX3N5c3JldF9mYWlsZWQKKworCWNtcHEgJF9fVVNFUl9DUywoQ1MtUjExKSglcnNwKQkJLyogQ1MgbXVzdCBtYXRjaCBTWVNSRVQgKi8KKwlqbmUgb3Bwb3J0dW5pc3RpY19zeXNyZXRfZmFpbGVkCisKKwltb3ZxIChSMTEtQVJHT0ZGU0VUKSglcnNwKSwgJXIxMQorCWNtcHEgJXIxMSwoRUZMQUdTLUFSR09GRlNFVCkoJXJzcCkJLyogUjExID09IFJGTEFHUyAqLworCWpuZSBvcHBvcnR1bmlzdGljX3N5c3JldF9mYWlsZWQKKworCXRlc3RxICRYODZfRUZMQUdTX1JGLCVyMTEJCS8qIHN5c3JldCBjYW4ndCByZXN0b3JlIFJGICovCisJam56IG9wcG9ydHVuaXN0aWNfc3lzcmV0X2ZhaWxlZAorCisJLyogbm90aGluZyB0byBjaGVjayBmb3IgUlNQICovCisKKwljbXBxICRfX1VTRVJfRFMsKFNTLUFSR09GRlNFVCkoJXJzcCkJLyogU1MgbXVzdCBtYXRjaCBTWVNSRVQgKi8KKwlqbmUgb3Bwb3J0dW5pc3RpY19zeXNyZXRfZmFpbGVkCisKKwkvKgorCSAqIFdlIHdpbiEgIFRoaXMgbGFiZWwgaXMgaGVyZSBqdXN0IGZvciBlYXNlIG9mIHVuZGVyc3RhbmRpbmcKKwkgKiBwZXJmIHByb2ZpbGVzLiAgTm90aGluZyBqdW1wcyBoZXJlLgorCSAqLworaXJxX3JldHVybl92aWFfc3lzcmV0OgorCUNGSV9SRU1FTUJFUl9TVEFURQorCVJFU1RPUkVfQVJHUyAxLDgsMQorCW1vdnEgKFJTUC1SSVApKCVyc3ApLCVyc3AKKwlVU0VSR1NfU1lTUkVUNjQKKwlDRklfUkVTVE9SRV9TVEFURQorCitvcHBvcnR1bmlzdGljX3N5c3JldF9mYWlsZWQ6CiAJU1dBUEdTCiAJam1wIHJlc3RvcmVfYXJncwogCkBAIC0xMDQ4LDYgKzEwMjMsMTEgQEAKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgT1JJR19SQVgtUjE1CiAKIAkuaWYgXHBhcmFub2lkCisJLmlmIFxwYXJhbm9pZCA9PSAxCisJQ0ZJX1JFTUVNQkVSX1NUQVRFCisJdGVzdGwgJDMsIENTKCVyc3ApCQkvKiBJZiBjb21pbmcgZnJvbSB1c2Vyc3BhY2UsIHN3aXRjaCAqLworCWpueiAxZgkJCQkvKiBzdGFja3MuICovCisJLmVuZGlmCiAJY2FsbCBzYXZlX3BhcmFub2lkCiAJLmVsc2UKIAljYWxsIGVycm9yX2VudHJ5CkBAIC0xMDg4LDYgKzEwNjgsMzYgQEAKIAlqbXAgZXJyb3JfZXhpdAkJCS8qICVlYng6IG5vIHN3YXBncyBmbGFnICovCiAJLmVuZGlmCiAKKwkuaWYgXHBhcmFub2lkID09IDEKKwlDRklfUkVTVE9SRV9TVEFURQorCS8qCisJICogUGFyYW5vaWQgZW50cnkgZnJvbSB1c2Vyc3BhY2UuICBTd2l0Y2ggc3RhY2tzIGFuZCB0cmVhdCBpdAorCSAqIGFzIGEgbm9ybWFsIGVudHJ5LiAgVGhpcyBtZWFucyB0aGF0IHBhcmFub2lkIGhhbmRsZXJzCisJICogcnVuIGluIHJlYWwgcHJvY2VzcyBjb250ZXh0IGlmIHVzZXJfbW9kZShyZWdzKS4KKwkgKi8KKzE6CisJY2FsbCBlcnJvcl9lbnRyeQorCisJREVGQVVMVF9GUkFNRSAwCisKKwltb3ZxICVyc3AsJXJkaQkJCS8qIHB0X3JlZ3MgcG9pbnRlciAqLworCWNhbGwgc3luY19yZWdzCisJbW92cSAlcmF4LCVyc3AJCQkvKiBzd2l0Y2ggc3RhY2sgKi8KKworCW1vdnEgJXJzcCwlcmRpCQkJLyogcHRfcmVncyBwb2ludGVyICovCisKKwkuaWYgXGhhc19lcnJvcl9jb2RlCisJbW92cSBPUklHX1JBWCglcnNwKSwlcnNpCS8qIGdldCBlcnJvciBjb2RlICovCisJbW92cSAkLTEsT1JJR19SQVgoJXJzcCkJCS8qIG5vIHN5c2NhbGwgdG8gcmVzdGFydCAqLworCS5lbHNlCisJeG9ybCAlZXNpLCVlc2kJCQkvKiBubyBlcnJvciBjb2RlICovCisJLmVuZGlmCisKKwljYWxsIFxkb19zeW0KKworCWptcCBlcnJvcl9leGl0CQkJLyogJWVieDogbm8gc3dhcGdzIGZsYWcgKi8KKwkuZW5kaWYKKwogCUNGSV9FTkRQUk9DCiBFTkQoXHN5bSkKIC5lbmRtCkBAIC0xMTA4LDcgKzExMTgsNyBAQAogaWR0ZW50cnkgYm91bmRzIGRvX2JvdW5kcyBoYXNfZXJyb3JfY29kZT0wCiBpZHRlbnRyeSBpbnZhbGlkX29wIGRvX2ludmFsaWRfb3AgaGFzX2Vycm9yX2NvZGU9MAogaWR0ZW50cnkgZGV2aWNlX25vdF9hdmFpbGFibGUgZG9fZGV2aWNlX25vdF9hdmFpbGFibGUgaGFzX2Vycm9yX2NvZGU9MAotaWR0ZW50cnkgZG91YmxlX2ZhdWx0IGRvX2RvdWJsZV9mYXVsdCBoYXNfZXJyb3JfY29kZT0xIHBhcmFub2lkPTEKK2lkdGVudHJ5IGRvdWJsZV9mYXVsdCBkb19kb3VibGVfZmF1bHQgaGFzX2Vycm9yX2NvZGU9MSBwYXJhbm9pZD0yCiBpZHRlbnRyeSBjb3Byb2Nlc3Nvcl9zZWdtZW50X292ZXJydW4gZG9fY29wcm9jZXNzb3Jfc2VnbWVudF9vdmVycnVuIGhhc19lcnJvcl9jb2RlPTAKIGlkdGVudHJ5IGludmFsaWRfVFNTIGRvX2ludmFsaWRfVFNTIGhhc19lcnJvcl9jb2RlPTEKIGlkdGVudHJ5IHNlZ21lbnRfbm90X3ByZXNlbnQgZG9fc2VnbWVudF9ub3RfcHJlc2VudCBoYXNfZXJyb3JfY29kZT0xCkBAIC0xMjg5LDE2ICsxMjk5LDE0IEBACiAjZW5kaWYKIAogCS8qCi0JICogIlBhcmFub2lkIiBleGl0IHBhdGggZnJvbSBleGNlcHRpb24gc3RhY2suCi0JICogUGFyYW5vaWQgYmVjYXVzZSB0aGlzIGlzIHVzZWQgYnkgTk1JcyBhbmQgY2Fubm90IHRha2UKLQkgKiBhbnkga2VybmVsIHN0YXRlIGZvciBncmFudGVkLgotCSAqIFdlIGRvbid0IGRvIGtlcm5lbCBwcmVlbXB0aW9uIGNoZWNrcyBoZXJlLCBiZWNhdXNlIG9ubHkKLQkgKiBOTUkgc2hvdWxkIGJlIGNvbW1vbiBhbmQgaXQgZG9lcyBub3QgZW5hYmxlIElSUXMgYW5kCi0JICogY2Fubm90IGdldCByZXNjaGVkdWxlIHRpY2tzLgorCSAqICJQYXJhbm9pZCIgZXhpdCBwYXRoIGZyb20gZXhjZXB0aW9uIHN0YWNrLiAgVGhpcyBpcyBpbnZva2VkCisJICogb25seSBvbiByZXR1cm4gZnJvbSBub24tTk1JIElTVCBpbnRlcnJ1cHRzIHRoYXQgY2FtZQorCSAqIGZyb20ga2VybmVsIHNwYWNlLgogCSAqCi0JICogInRyYWNlIiBpcyAwIGZvciB0aGUgTk1JIGhhbmRsZXIgb25seSwgYmVjYXVzZSBpcnEtdHJhY2luZwotCSAqIGlzIGZ1bmRhbWVudGFsbHkgTk1JLXVuc2FmZS4gKHdlIGNhbm5vdCBjaGFuZ2UgdGhlIHNvZnQgYW5kCi0JICogaGFyZCBmbGFncyBhdCBvbmNlLCBhdG9taWNhbGx5KQorCSAqIFdlIG1heSBiZSByZXR1cm5pbmcgdG8gdmVyeSBzdHJhbmdlIGNvbnRleHRzIChlLmcuIHZlcnkgZWFybHkKKwkgKiBpbiBzeXNjYWxsIGVudHJ5KSwgc28gY2hlY2tpbmcgZm9yIHByZWVtcHRpb24gaGVyZSB3b3VsZAorCSAqIGJlIGNvbXBsaWNhdGVkLiAgRm9ydHVuYXRlbHksIHdlIHRoZXJlJ3Mgbm8gZ29vZCByZWFzb24KKwkgKiB0byB0cnkgdG8gaGFuZGxlIHByZWVtcHRpb24gaGVyZS4KIAkgKi8KIAogCS8qIGVieDoJbm8gc3dhcGdzIGZsYWcgKi8KQEAgLTEzMDgsNDMgKzEzMTYsMTQgQEAKIAlUUkFDRV9JUlFTX09GRl9ERUJVRwogCXRlc3RsICVlYngsJWVieAkJCQkvKiBzd2FwZ3MgbmVlZGVkPyAqLwogCWpueiBwYXJhbm9pZF9yZXN0b3JlCi0JdGVzdGwgJDMsQ1MoJXJzcCkKLQlqbnogICBwYXJhbm9pZF91c2Vyc3BhY2UKLXBhcmFub2lkX3N3YXBnczoKIAlUUkFDRV9JUlFTX0lSRVRRIDAKIAlTV0FQR1NfVU5TQUZFX1NUQUNLCiAJUkVTVE9SRV9BTEwgOAotCWptcCBpcnFfcmV0dXJuCisJSU5URVJSVVBUX1JFVFVSTgogcGFyYW5vaWRfcmVzdG9yZToKIAlUUkFDRV9JUlFTX0lSRVRRX0RFQlVHIDAKIAlSRVNUT1JFX0FMTCA4Ci0Jam1wIGlycV9yZXR1cm4KLXBhcmFub2lkX3VzZXJzcGFjZToKLQlHRVRfVEhSRUFEX0lORk8oJXJjeCkKLQltb3ZsIFRJX2ZsYWdzKCVyY3gpLCVlYngKLQlhbmRsICRfVElGX1dPUktfTUFTSywlZWJ4Ci0JanogcGFyYW5vaWRfc3dhcGdzCi0JbW92cSAlcnNwLCVyZGkJCQkvKiAmcHRfcmVncyAqLwotCWNhbGwgc3luY19yZWdzCi0JbW92cSAlcmF4LCVyc3AJCQkvKiBzd2l0Y2ggc3RhY2sgZm9yIHNjaGVkdWxpbmcgKi8KLQl0ZXN0bCAkX1RJRl9ORUVEX1JFU0NIRUQsJWVieAotCWpueiBwYXJhbm9pZF9zY2hlZHVsZQotCW1vdmwgJWVieCwlZWR4CQkJLyogYXJnMzogdGhyZWFkIGZsYWdzICovCi0JVFJBQ0VfSVJRU19PTgotCUVOQUJMRV9JTlRFUlJVUFRTKENMQlJfTk9ORSkKLQl4b3JsICVlc2ksJWVzaSAJCQkvKiBhcmcyOiBvbGRzZXQgKi8KLQltb3ZxICVyc3AsJXJkaSAJCQkvKiBhcmcxOiAmcHRfcmVncyAqLwotCWNhbGwgZG9fbm90aWZ5X3Jlc3VtZQotCURJU0FCTEVfSU5URVJSVVBUUyhDTEJSX05PTkUpCi0JVFJBQ0VfSVJRU19PRkYKLQlqbXAgcGFyYW5vaWRfdXNlcnNwYWNlCi1wYXJhbm9pZF9zY2hlZHVsZToKLQlUUkFDRV9JUlFTX09OCi0JRU5BQkxFX0lOVEVSUlVQVFMoQ0xCUl9BTlkpCi0JU0NIRURVTEVfVVNFUgotCURJU0FCTEVfSU5URVJSVVBUUyhDTEJSX0FOWSkKLQlUUkFDRV9JUlFTX09GRgotCWptcCBwYXJhbm9pZF91c2Vyc3BhY2UKKwlJTlRFUlJVUFRfUkVUVVJOCiAJQ0ZJX0VORFBST0MKIEVORChwYXJhbm9pZF9leGl0KQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jIGIvYXJjaC94ODYva2VybmVsL2h3X2JyZWFrcG9pbnQuYwppbmRleCAzZDVmYjUwLi43MTE0YmEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9od19icmVha3BvaW50LmMKQEAgLTEyNiw2ICsxMjYsOCBAQAogCSpkcjcgfD0gZW5jb2RlX2RyNyhpLCBpbmZvLT5sZW4sIGluZm8tPnR5cGUpOwogCiAJc2V0X2RlYnVncmVnKCpkcjcsIDcpOworCWlmIChpbmZvLT5tYXNrKQorCQlzZXRfZHJfYWRkcl9tYXNrKGluZm8tPm1hc2ssIGkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjEsMjkgKzE2Myw4IEBACiAJKmRyNyAmPSB+X19lbmNvZGVfZHI3KGksIGluZm8tPmxlbiwgaW5mby0+dHlwZSk7CiAKIAlzZXRfZGVidWdyZWcoKmRyNywgNyk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X2hicF9sZW4odTggaGJwX2xlbikKLXsKLQl1bnNpZ25lZCBpbnQgbGVuX2luX2J5dGVzID0gMDsKLQotCXN3aXRjaCAoaGJwX2xlbikgewotCWNhc2UgWDg2X0JSRUFLUE9JTlRfTEVOXzE6Ci0JCWxlbl9pbl9ieXRlcyA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgWDg2X0JSRUFLUE9JTlRfTEVOXzI6Ci0JCWxlbl9pbl9ieXRlcyA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgWDg2X0JSRUFLUE9JTlRfTEVOXzQ6Ci0JCWxlbl9pbl9ieXRlcyA9IDQ7Ci0JCWJyZWFrOwotI2lmZGVmIENPTkZJR19YODZfNjQKLQljYXNlIFg4Nl9CUkVBS1BPSU5UX0xFTl84OgotCQlsZW5faW5fYnl0ZXMgPSA4OwotCQlicmVhazsKLSNlbmRpZgotCX0KLQlyZXR1cm4gbGVuX2luX2J5dGVzOworCWlmIChpbmZvLT5tYXNrKQorCQlzZXRfZHJfYWRkcl9tYXNrKDAsIGkpOwogfQogCiAvKgpAQCAtMTk2LDcgKzE3Nyw3IEBACiAJc3RydWN0IGFyY2hfaHdfYnJlYWtwb2ludCAqaW5mbyA9IGNvdW50ZXJfYXJjaF9icChicCk7CiAKIAl2YSA9IGluZm8tPmFkZHJlc3M7Ci0JbGVuID0gZ2V0X2hicF9sZW4oaW5mby0+bGVuKTsKKwlsZW4gPSBicC0+YXR0ci5icF9sZW47CiAKIAlyZXR1cm4gKHZhID49IFRBU0tfU0laRSkgJiYgKCh2YSArIGxlbiAtIDEpID49IFRBU0tfU0laRSk7CiB9CkBAIC0yNzcsNiArMjU4LDggQEAKIAl9CiAKIAkvKiBMZW4gKi8KKwlpbmZvLT5tYXNrID0gMDsKKwogCXN3aXRjaCAoYnAtPmF0dHIuYnBfbGVuKSB7CiAJY2FzZSBIV19CUkVBS1BPSU5UX0xFTl8xOgogCQlpbmZvLT5sZW4gPSBYODZfQlJFQUtQT0lOVF9MRU5fMTsKQEAgLTI5MywxMSArMjc2LDE3IEBACiAJCWJyZWFrOwogI2VuZGlmCiAJZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghaXNfcG93ZXJfb2ZfMihicC0+YXR0ci5icF9sZW4pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghY3B1X2hhc19icGV4dCkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJaW5mby0+bWFzayA9IGJwLT5hdHRyLmJwX2xlbiAtIDE7CisJCWluZm8tPmxlbiA9IFg4Nl9CUkVBS1BPSU5UX0xFTl8xOwogCX0KIAogCXJldHVybiAwOwogfQorCiAvKgogICogVmFsaWRhdGUgdGhlIGFyY2gtc3BlY2lmaWMgSFcgQnJlYWtwb2ludCByZWdpc3RlciBzZXR0aW5ncwogICovCkBAIC0zMTIsMTEgKzMwMSwxMSBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSAtRUlOVkFMOwotCiAJc3dpdGNoIChpbmZvLT5sZW4pIHsKIAljYXNlIFg4Nl9CUkVBS1BPSU5UX0xFTl8xOgogCQlhbGlnbiA9IDA7CisJCWlmIChpbmZvLT5tYXNrKQorCQkJYWxpZ24gPSBpbmZvLT5tYXNrOwogCQlicmVhazsKIAljYXNlIFg4Nl9CUkVBS1BPSU5UX0xFTl8yOgogCQlhbGlnbiA9IDE7CkBAIC0zMzAsNyArMzE5LDcgQEAKIAkJYnJlYWs7CiAjZW5kaWYKIAlkZWZhdWx0OgotCQlyZXR1cm4gcmV0OworCQlXQVJOX09OX09OQ0UoMSk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaTM4Ny5jCmluZGV4IGE5YTQyMjkuLjgxMDQ5ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pMzg3LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2kzODcuYwpAQCAtMTksNiArMTksMTkgQEAKICNpbmNsdWRlIDxhc20vZnB1LWludGVybmFsLmg+CiAjaW5jbHVkZSA8YXNtL3VzZXIuaD4KIAorc3RhdGljIERFRklORV9QRVJfQ1BVKGJvb2wsIGluX2tlcm5lbF9mcHUpOworCit2b2lkIGtlcm5lbF9mcHVfZGlzYWJsZSh2b2lkKQoreworCVdBUk5fT04odGhpc19jcHVfcmVhZChpbl9rZXJuZWxfZnB1KSk7CisJdGhpc19jcHVfd3JpdGUoaW5fa2VybmVsX2ZwdSwgdHJ1ZSk7Cit9CisKK3ZvaWQga2VybmVsX2ZwdV9lbmFibGUodm9pZCkKK3sKKwl0aGlzX2NwdV93cml0ZShpbl9rZXJuZWxfZnB1LCBmYWxzZSk7Cit9CisKIC8qCiAgKiBXZXJlIHdlIGluIGFuIGludGVycnVwdCB0aGF0IGludGVycnVwdGVkIGtlcm5lbCBtb2RlPwogICoKQEAgLTMzLDYgKzQ2LDkgQEAKICAqLwogc3RhdGljIGlubGluZSBib29sIGludGVycnVwdGVkX2tlcm5lbF9mcHVfaWRsZSh2b2lkKQogeworCWlmICh0aGlzX2NwdV9yZWFkKGluX2tlcm5lbF9mcHUpKQorCQlyZXR1cm4gZmFsc2U7CisKIAlpZiAodXNlX2VhZ2VyX2ZwdSgpKQogCQlyZXR1cm4gX190aHJlYWRfaGFzX2ZwdShjdXJyZW50KTsKIApAQCAtNzMsMTAgKzg5LDEwIEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICptZSA9IGN1cnJlbnQ7CiAKKwl0aGlzX2NwdV93cml0ZShpbl9rZXJuZWxfZnB1LCB0cnVlKTsKKwogCWlmIChfX3RocmVhZF9oYXNfZnB1KG1lKSkgewotCQlfX3RocmVhZF9jbGVhcl9oYXNfZnB1KG1lKTsKIAkJX19zYXZlX2luaXRfZnB1KG1lKTsKLQkJLyogV2UgZG8gJ3N0dHMoKScgaW4gX19rZXJuZWxfZnB1X2VuZCgpICovCiAJfSBlbHNlIGlmICghdXNlX2VhZ2VyX2ZwdSgpKSB7CiAJCXRoaXNfY3B1X3dyaXRlKGZwdV9vd25lcl90YXNrLCBOVUxMKTsKIAkJY2x0cygpOwpAQCAtODYsMTkgKzEwMiwxNiBAQAogCiB2b2lkIF9fa2VybmVsX2ZwdV9lbmQodm9pZCkKIHsKLQlpZiAodXNlX2VhZ2VyX2ZwdSgpKSB7Ci0JCS8qCi0JCSAqIEZvciBlYWdlciBmcHUsIG1vc3QgdGhlIHRpbWUsIHRza191c2VkX21hdGgoKSBpcyB0cnVlLgotCQkgKiBSZXN0b3JlIHRoZSB1c2VyIG1hdGggYXMgd2UgYXJlIGRvbmUgd2l0aCB0aGUga2VybmVsIHVzYWdlLgotCQkgKiBBdCBmZXcgaW5zdGFuY2VzIGR1cmluZyB0aHJlYWQgZXhpdCwgc2lnbmFsIGhhbmRsaW5nIGV0YywKLQkJICogdHNrX3VzZWRfbWF0aCgpIGlzIGZhbHNlLiBUaG9zZSBmZXcgcGxhY2VzIHdpbGwgdGFrZSBwcm9wZXIKLQkJICogYWN0aW9ucywgc28gd2UgZG9uJ3QgbmVlZCB0byByZXN0b3JlIHRoZSBtYXRoIGhlcmUuCi0JCSAqLwotCQlpZiAobGlrZWx5KHRza191c2VkX21hdGgoY3VycmVudCkpKQotCQkJbWF0aF9zdGF0ZV9yZXN0b3JlKCk7Ci0JfSBlbHNlIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lID0gY3VycmVudDsKKworCWlmIChfX3RocmVhZF9oYXNfZnB1KG1lKSkgeworCQlpZiAoV0FSTl9PTihyZXN0b3JlX2ZwdV9jaGVja2luZyhtZSkpKQorCQkJZHJvcF9pbml0X2ZwdShtZSk7CisJfSBlbHNlIGlmICghdXNlX2VhZ2VyX2ZwdSgpKSB7CiAJCXN0dHMoKTsKIAl9CisKKwl0aGlzX2NwdV93cml0ZShpbl9rZXJuZWxfZnB1LCBmYWxzZSk7CiB9CiBFWFBPUlRfU1lNQk9MKF9fa2VybmVsX2ZwdV9lbmQpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxXzMyLmMKaW5kZXggNjNjZTgzOC4uMjhkMjhmNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFfMzIuYwpAQCAtNjksMTYgKzY5LDkgQEAKIAkJICAgICA6ICJtZW1vcnkiLCAiY2MiLCAiZWR4IiwgImVjeCIsICJlYXgiKTsKIH0KIAotLyogaG93IHRvIGdldCB0aGUgY3VycmVudCBzdGFjayBwb2ludGVyIGZyb20gQyAqLwotI2RlZmluZSBjdXJyZW50X3N0YWNrX3BvaW50ZXIgKHsJCVwKLQl1bnNpZ25lZCBsb25nIHNwOwkJCVwKLQlhc20oIm1vdiAlJWVzcCwlMCIgOiAiPWciIChzcCkpOwlcCi0Jc3A7CQkJCQlcCi19KQotCiBzdGF0aWMgaW5saW5lIHZvaWQgKmN1cnJlbnRfc3RhY2sodm9pZCkKIHsKLQlyZXR1cm4gKHZvaWQgKikoY3VycmVudF9zdGFja19wb2ludGVyICYgfihUSFJFQURfU0laRSAtIDEpKTsKKwlyZXR1cm4gKHZvaWQgKikoY3VycmVudF9zdGFja19wb2ludGVyKCkgJiB+KFRIUkVBRF9TSVpFIC0gMSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtMTAzLDcgKzk2LDcgQEAKIAogCS8qIFNhdmUgdGhlIG5leHQgZXNwIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrICovCiAJcHJldl9lc3AgPSAodTMyICopaXJxc3RrOwotCSpwcmV2X2VzcCA9IGN1cnJlbnRfc3RhY2tfcG9pbnRlcjsKKwkqcHJldl9lc3AgPSBjdXJyZW50X3N0YWNrX3BvaW50ZXIoKTsKIAogCWlmICh1bmxpa2VseShvdmVyZmxvdykpCiAJCWNhbGxfb25fc3RhY2socHJpbnRfc3RhY2tfb3ZlcmZsb3csIGlzcCk7CkBAIC0xNTYsNyArMTQ5LDcgQEAKIAogCS8qIFB1c2ggdGhlIHByZXZpb3VzIGVzcCBvbnRvIHRoZSBzdGFjayAqLwogCXByZXZfZXNwID0gKHUzMiAqKWlycXN0azsKLQkqcHJldl9lc3AgPSBjdXJyZW50X3N0YWNrX3BvaW50ZXI7CisJKnByZXZfZXNwID0gY3VycmVudF9zdGFja19wb2ludGVyKCk7CiAKIAljYWxsX29uX3N0YWNrKF9fZG9fc29mdGlycSwgaXNwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzL29wdC5jIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMvb3B0LmMKaW5kZXggN2M1MjNiYi4uMGRkOGQwOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2twcm9iZXMvb3B0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMvb3B0LmMKQEAgLTMyMiw3ICszMjIsOCBAQAogICogVGFyZ2V0IGluc3RydWN0aW9ucyBNVVNUIGJlIHJlbG9jYXRhYmxlIChjaGVja2VkIGluc2lkZSkKICAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gbmV3IGFnZ3Iob3B0KXByb2JlIGlzIGFsbG9jYXRlZCBvciByZXVzZWQuCiAgKi8KLWludCBhcmNoX3ByZXBhcmVfb3B0aW1pemVkX2twcm9iZShzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3ApCitpbnQgYXJjaF9wcmVwYXJlX29wdGltaXplZF9rcHJvYmUoc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wLAorCQkJCSAgc3RydWN0IGtwcm9iZSAqX191bnVzZWQpCiB7CiAJdTggKmJ1ZjsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2xpdmVwYXRjaC5jIGIvYXJjaC94ODYva2VybmVsL2xpdmVwYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmM2MzMTAxZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9saXZlcGF0Y2guYwpAQCAtMCwwICsxLDkwIEBACisvKgorICogbGl2ZXBhdGNoLmMgLSB4ODYtc3BlY2lmaWMgS2VybmVsIExpdmUgUGF0Y2hpbmcgQ29yZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTZXRoIEplbm5pbmdzIDxzamVubmluZ0ByZWRoYXQuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNVU0UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2VsZi5oPgorI2luY2x1ZGUgPGFzbS9saXZlcGF0Y2guaD4KKworLyoqCisgKiBrbHBfd3JpdGVfbW9kdWxlX3JlbG9jKCkgLSB3cml0ZSBhIHJlbG9jYXRpb24gaW4gYSBtb2R1bGUKKyAqIEBtb2Q6CW1vZHVsZSBpbiB3aGljaCB0aGUgc2VjdGlvbiB0byBiZSBtb2RpZmllZCBpcyBmb3VuZAorICogQHR5cGU6CUVMRiByZWxvY2F0aW9uIHR5cGUgKHNlZSBhc20vZWxmLmgpCisgKiBAbG9jOglhZGRyZXNzIHRoYXQgdGhlIHJlbG9jYXRpb24gc2hvdWxkIGJlIHdyaXR0ZW4gdG8KKyAqIEB2YWx1ZToJcmVsb2NhdGlvbiB2YWx1ZSAoc3ltIGFkZHJlc3MgKyBhZGRlbmQpCisgKgorICogVGhpcyBmdW5jdGlvbiB3cml0ZXMgYSByZWxvY2F0aW9uIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gZm9yCisgKiBhIHBhcnRpY3VsYXIgbW9kdWxlLgorICovCitpbnQga2xwX3dyaXRlX21vZHVsZV9yZWxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgdHlwZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbG9jLCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCWludCByZXQsIG51bXBhZ2VzLCBzaXplID0gNDsKKwlib29sIHJlYWRvbmx5OworCXVuc2lnbmVkIGxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgY29yZSA9ICh1bnNpZ25lZCBsb25nKW1vZC0+bW9kdWxlX2NvcmU7CisJdW5zaWduZWQgbG9uZyBjb3JlX3JvX3NpemUgPSBtb2QtPmNvcmVfcm9fc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGNvcmVfc2l6ZSA9IG1vZC0+Y29yZV9zaXplOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBSX1g4Nl82NF9OT05FOgorCQlyZXR1cm4gMDsKKwljYXNlIFJfWDg2XzY0XzY0OgorCQl2YWwgPSB2YWx1ZTsKKwkJc2l6ZSA9IDg7CisJCWJyZWFrOworCWNhc2UgUl9YODZfNjRfMzI6CisJCXZhbCA9ICh1MzIpdmFsdWU7CisJCWJyZWFrOworCWNhc2UgUl9YODZfNjRfMzJTOgorCQl2YWwgPSAoczMyKXZhbHVlOworCQlicmVhazsKKwljYXNlIFJfWDg2XzY0X1BDMzI6CisJCXZhbCA9ICh1MzIpKHZhbHVlIC0gbG9jKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogdW5zdXBwb3J0ZWQgcmVsb2NhdGlvbiB0eXBlICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChsb2MgPCBjb3JlIHx8IGxvYyA+PSBjb3JlICsgY29yZV9zaXplKQorCQkvKiBsb2MgZG9lcyBub3QgcG9pbnQgdG8gYW55IHN5bWJvbCBpbnNpZGUgdGhlIG1vZHVsZSAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChsb2MgPCBjb3JlICsgY29yZV9yb19zaXplKQorCQlyZWFkb25seSA9IHRydWU7CisJZWxzZQorCQlyZWFkb25seSA9IGZhbHNlOworCisJLyogZGV0ZXJtaW5lIGlmIHRoZSByZWxvY2F0aW9uIHNwYW5zIGEgcGFnZSBib3VuZGFyeSAqLworCW51bXBhZ2VzID0gKChsb2MgJiBQQUdFX01BU0spID09ICgobG9jICsgc2l6ZSkgJiBQQUdFX01BU0spKSA/IDEgOiAyOworCisJaWYgKHJlYWRvbmx5KQorCQlzZXRfbWVtb3J5X3J3KGxvYyAmIFBBR0VfTUFTSywgbnVtcGFnZXMpOworCisJcmV0ID0gcHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopbG9jLCAmdmFsLCBzaXplKTsKKworCWlmIChyZWFkb25seSkKKwkJc2V0X21lbW9yeV9ybyhsb2MgJiBQQUdFX01BU0ssIG51bXBhZ2VzKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcG1jX2F0b20uYyBiL2FyY2gveDg2L2tlcm5lbC9wbWNfYXRvbS5jCmluZGV4IDBlZTUwMjVlLi5kNjZhNGZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcG1jX2F0b20uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcG1jX2F0b20uYwpAQCAtMjUsOCArMjUsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3BtY19hdG9tLmg+CiAKLSNkZWZpbmUJRFJJVkVSX05BTUUJS0JVSUxEX01PRE5BTUUKLQogc3RydWN0IHBtY19kZXYgewogCXUzMiBiYXNlX2FkZHI7CiAJdm9pZCBfX2lvbWVtICpyZWdtYXA7CkBAIC0zOCwxMiArMzYsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgcG1jX2RldiBwbWNfZGV2aWNlOwogc3RhdGljIHUzMiBhY3BpX2Jhc2VfYWRkcjsKIAotc3RydWN0IHBtY19kZXZfbWFwIHsKK3N0cnVjdCBwbWNfYml0X21hcCB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAl1MzIgYml0X21hc2s7CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBtY19kZXZfbWFwIGRldl9tYXBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcG1jX2JpdF9tYXAgZGV2X21hcFtdID0gewogCXsiMCAgLSBMUFNTMV9GMF9ETUEiLAkJQklUX0xQU1MxX0YwX0RNQX0sCiAJeyIxICAtIExQU1MxX0YxX1BXTTEiLAkJQklUX0xQU1MxX0YxX1BXTTF9LAogCXsiMiAgLSBMUFNTMV9GMl9QV00yIiwJCUJJVF9MUFNTMV9GMl9QV00yfSwKQEAgLTgyLDYgKzgwLDI3IEBACiAJeyIzNSAtIERGWCIsCQkJQklUX0RGWH0sCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtY19iaXRfbWFwIHBzc19tYXBbXSA9IHsKKwl7IjAgIC0gR0JFIiwJCQlQTUNfUFNTX0JJVF9HQkV9LAorCXsiMSAgLSBTQVRBIiwJCQlQTUNfUFNTX0JJVF9TQVRBfSwKKwl7IjIgIC0gSERBIiwJCQlQTUNfUFNTX0JJVF9IREF9LAorCXsiMyAgLSBTRUMiLAkJCVBNQ19QU1NfQklUX1NFQ30sCisJeyI0ICAtIFBDSUUiLAkJCVBNQ19QU1NfQklUX1BDSUV9LAorCXsiNSAgLSBMUFNTIiwJCQlQTUNfUFNTX0JJVF9MUFNTfSwKKwl7IjYgIC0gTFBFIiwJCQlQTUNfUFNTX0JJVF9MUEV9LAorCXsiNyAgLSBERlgiLAkJCVBNQ19QU1NfQklUX0RGWH0sCisJeyI4ICAtIFVTSF9DVFJMIiwJCVBNQ19QU1NfQklUX1VTSF9DVFJMfSwKKwl7IjkgIC0gVVNIX1NVUyIsCQlQTUNfUFNTX0JJVF9VU0hfU1VTfSwKKwl7IjEwIC0gVVNIX1ZDQ1MiLAkJUE1DX1BTU19CSVRfVVNIX1ZDQ1N9LAorCXsiMTEgLSBVU0hfVkNDQSIsCQlQTUNfUFNTX0JJVF9VU0hfVkNDQX0sCisJeyIxMiAtIE9UR19DVFJMIiwJCVBNQ19QU1NfQklUX09UR19DVFJMfSwKKwl7IjEzIC0gT1RHX1ZDQ1MiLAkJUE1DX1BTU19CSVRfT1RHX1ZDQ1N9LAorCXsiMTQgLSBPVEdfVkNDQV9DTEsiLAkJUE1DX1BTU19CSVRfT1RHX1ZDQ0FfQ0xLfSwKKwl7IjE1IC0gT1RHX1ZDQ0EiLAkJUE1DX1BTU19CSVRfT1RHX1ZDQ0F9LAorCXsiMTYgLSBVU0IiLAkJCVBNQ19QU1NfQklUX1VTQn0sCisJeyIxNyAtIFVTQl9TVVMiLAkJUE1DX1BTU19CSVRfVVNCX1NVU30sCit9OworCiBzdGF0aWMgaW5saW5lIHUzMiBwbWNfcmVnX3JlYWQoc3RydWN0IHBtY19kZXYgKnBtYywgaW50IHJlZ19vZmZzZXQpCiB7CiAJcmV0dXJuIHJlYWRsKHBtYy0+cmVnbWFwICsgcmVnX29mZnNldCk7CkBAIC0xNjksNiArMTg4LDMyIEBACiAJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBpbnQgcG1jX3Bzc19zdGF0ZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBwbWNfZGV2ICpwbWMgPSBzLT5wcml2YXRlOworCXUzMiBwc3MgPSBwbWNfcmVnX3JlYWQocG1jLCBQTUNfUFNTKTsKKwlpbnQgcHNzX2luZGV4OworCisJZm9yIChwc3NfaW5kZXggPSAwOyBwc3NfaW5kZXggPCBBUlJBWV9TSVpFKHBzc19tYXApOyBwc3NfaW5kZXgrKykgeworCQlzZXFfcHJpbnRmKHMsICJJc2xhbmQ6ICUtMzJzXHRTdGF0ZTogJXNcbiIsCisJCQlwc3NfbWFwW3Bzc19pbmRleF0ubmFtZSwKKwkJCXBzc19tYXBbcHNzX2luZGV4XS5iaXRfbWFzayAmIHBzcyA/ICJPZmYiIDogIk9uIik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBtY19wc3Nfc3RhdGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcG1jX3Bzc19zdGF0ZV9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG1jX3Bzc19zdGF0ZV9vcHMgPSB7CisJLm9wZW4JCT0gcG1jX3Bzc19zdGF0ZV9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiBzdGF0aWMgaW50IHBtY19zbGVlcF90bXJfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKIHsKIAlzdHJ1Y3QgcG1jX2RldiAqcG1jID0gcy0+cHJpdmF0ZTsKQEAgLTIwMiwxMSArMjQ3LDcgQEAKIAogc3RhdGljIHZvaWQgcG1jX2RiZ2ZzX3VucmVnaXN0ZXIoc3RydWN0IHBtY19kZXYgKnBtYykKIHsKLQlpZiAoIXBtYy0+ZGJnZnNfZGlyKQotCQlyZXR1cm47Ci0KIAlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUocG1jLT5kYmdmc19kaXIpOwotCXBtYy0+ZGJnZnNfZGlyID0gTlVMTDsKIH0KIAogc3RhdGljIGludCBwbWNfZGJnZnNfcmVnaXN0ZXIoc3RydWN0IHBtY19kZXYgKnBtYywgc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC0yMTcsMTkgKzI1OCwyOSBAQAogCWlmICghZGlyKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXBtYy0+ZGJnZnNfZGlyID0gZGlyOworCiAJZiA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRldl9zdGF0ZSIsIFNfSUZSRUcgfCBTX0lSVUdPLAogCQkJCWRpciwgcG1jLCAmcG1jX2Rldl9zdGF0ZV9vcHMpOwogCWlmICghZikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJkZXZfc3RhdGVzIHJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImRldl9zdGF0ZSByZWdpc3RlciBmYWlsZWRcbiIpOwogCQlnb3RvIGVycjsKIAl9CisKKwlmID0gZGVidWdmc19jcmVhdGVfZmlsZSgicHNzX3N0YXRlIiwgU19JRlJFRyB8IFNfSVJVR08sCisJCQkJZGlyLCBwbWMsICZwbWNfcHNzX3N0YXRlX29wcyk7CisJaWYgKCFmKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBzc19zdGF0ZSByZWdpc3RlciBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKIAlmID0gZGVidWdmc19jcmVhdGVfZmlsZSgic2xlZXBfc3RhdGUiLCBTX0lGUkVHIHwgU19JUlVHTywKIAkJCQlkaXIsIHBtYywgJnBtY19zbGVlcF90bXJfb3BzKTsKIAlpZiAoIWYpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAic2xlZXBfc3RhdGUgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKIAkJZ290byBlcnI7CiAJfQotCXBtYy0+ZGJnZnNfZGlyID0gZGlyOworCiAJcmV0dXJuIDA7CiBlcnI6CiAJcG1jX2RiZ2ZzX3VucmVnaXN0ZXIocG1jKTsKQEAgLTI5Miw3ICszNDMsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwbWNfYXRvbV9pbml0KHZvaWQpCiB7Ci0JaW50IGVyciA9IC1FTk9ERVY7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQ7CiAKQEAgLTMwNiwxNCArMzU2LDExIEBACiAJICovCiAJZm9yX2VhY2hfcGNpX2RldihwZGV2KSB7CiAJCWVudCA9IHBjaV9tYXRjaF9pZChwbWNfcGNpX2lkcywgcGRldik7Ci0JCWlmIChlbnQpIHsKLQkJCWVyciA9IHBtY19zZXR1cF9kZXYocGRldik7Ci0JCQlnb3RvIG91dDsKLQkJfQorCQlpZiAoZW50KQorCQkJcmV0dXJuIHBtY19zZXR1cF9kZXYocGRldik7CiAJfQogCS8qIERldmljZSBub3QgZm91bmQuICovCi1vdXQ6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogbW9kdWxlX2luaXQocG1jX2F0b21faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMKaW5kZXggY2E5NjIyYS4uZmUzZGJmZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3J0Yy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9ydGMuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiBzdGF0aWMgX19pbml0IGludCBhZGRfcnRjX2Ntb3Modm9pZCkKIHsKICNpZmRlZiBDT05GSUdfUE5QCi0Jc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCAgY29uc3QgaWRzW10gX19pbml0Y29uc3QgPQorCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaWRzW10gX19pbml0Y29uc3QgPQogCSAgICB7ICJQTlAwYjAwIiwgIlBOUDBiMDEiLCAiUE5QMGIwMiIsIH07CiAJc3RydWN0IHBucF9kZXYgKmRldjsKIAlzdHJ1Y3QgcG5wX2lkICppZDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC94ODYva2VybmVsL3NldHVwLmMKaW5kZXggYWI0NzM0ZS4uYzQ2NDhhZGEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC00MzEsMTUgKzQzMSwxMyBAQAogCiAJcGFfZGF0YSA9IGJvb3RfcGFyYW1zLmhkci5zZXR1cF9kYXRhOwogCXdoaWxlIChwYV9kYXRhKSB7Ci0JCXUzMiBkYXRhX2xlbiwgbWFwX2xlbiwgZGF0YV90eXBlOworCQl1MzIgZGF0YV9sZW4sIGRhdGFfdHlwZTsKIAotCQltYXBfbGVuID0gbWF4KFBBR0VfU0laRSAtIChwYV9kYXRhICYgflBBR0VfTUFTSyksCi0JCQkgICAgICAodTY0KXNpemVvZihzdHJ1Y3Qgc2V0dXBfZGF0YSkpOwotCQlkYXRhID0gZWFybHlfbWVtcmVtYXAocGFfZGF0YSwgbWFwX2xlbik7CisJCWRhdGEgPSBlYXJseV9tZW1yZW1hcChwYV9kYXRhLCBzaXplb2YoKmRhdGEpKTsKIAkJZGF0YV9sZW4gPSBkYXRhLT5sZW4gKyBzaXplb2Yoc3RydWN0IHNldHVwX2RhdGEpOwogCQlkYXRhX3R5cGUgPSBkYXRhLT50eXBlOwogCQlwYV9uZXh0ID0gZGF0YS0+bmV4dDsKLQkJZWFybHlfaW91bm1hcChkYXRhLCBtYXBfbGVuKTsKKwkJZWFybHlfaW91bm1hcChkYXRhLCBzaXplb2YoKmRhdGEpKTsKIAogCQlzd2l0Y2ggKGRhdGFfdHlwZSkgewogCQljYXNlIFNFVFVQX0U4MjBfRVhUOgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCmluZGV4IGVkMzdhNzYuLjJhMzNjOGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKQEAgLTc0MCwxMiArNzQwLDYgQEAKIHsKIAl1c2VyX2V4aXQoKTsKIAotI2lmZGVmIENPTkZJR19YODZfTUNFCi0JLyogbm90aWZ5IHVzZXJzcGFjZSBvZiBwZW5kaW5nIE1DRXMgKi8KLQlpZiAodGhyZWFkX2luZm9fZmxhZ3MgJiBfVElGX01DRV9OT1RJRlkpCi0JCW1jZV9ub3RpZnlfcHJvY2VzcygpOwotI2VuZGlmIC8qIENPTkZJR19YODZfNjQgJiYgQ09ORklHX1g4Nl9NQ0UgKi8KLQogCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIF9USUZfVVBST0JFKQogCQl1cHJvYmVfbm90aWZ5X3Jlc3VtZShyZWdzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggNmQ3MDIyYy4uZmViYzZhYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC03Myw3ICs3Myw2IEBACiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3V2L3V2Lmg+CiAjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxhc20vc21wYm9vdF9ob29rcy5oPgogI2luY2x1ZGUgPGFzbS9pODI1OS5oPgogI2luY2x1ZGUgPGFzbS9yZWFsbW9kZS5oPgogI2luY2x1ZGUgPGFzbS9taXNjLmg+CkBAIC0xMDQsNiArMTAzLDQzIEBACiAKIGF0b21pY190IGluaXRfZGVhc3NlcnRlZDsKIAorc3RhdGljIGlubGluZSB2b2lkIHNtcGJvb3Rfc2V0dXBfd2FybV9yZXNldF92ZWN0b3IodW5zaWduZWQgbG9uZyBzdGFydF9laXApCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOworCUNNT1NfV1JJVEUoMHhhLCAweGYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Y19sb2NrLCBmbGFncyk7CisJbG9jYWxfZmx1c2hfdGxiKCk7CisJcHJfZGVidWcoIjEuXG4iKTsKKwkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBoeXNfdG9fdmlydChUUkFNUE9MSU5FX1BIWVNfSElHSCkpID0KKwkJCQkJCQlzdGFydF9laXAgPj4gNDsKKwlwcl9kZWJ1ZygiMi5cbiIpOworCSooKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcGh5c190b192aXJ0KFRSQU1QT0xJTkVfUEhZU19MT1cpKSA9CisJCQkJCQkJc3RhcnRfZWlwICYgMHhmOworCXByX2RlYnVnKCIzLlxuIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBib290X3Jlc3RvcmVfd2FybV9yZXNldF92ZWN0b3Iodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyoKKwkgKiBJbnN0YWxsIHdyaXRhYmxlIHBhZ2UgMCBlbnRyeSB0byBzZXQgQklPUyBkYXRhIGFyZWEuCisJICovCisJbG9jYWxfZmx1c2hfdGxiKCk7CisKKwkvKgorCSAqIFBhcmFub2lkOiAgU2V0IHdhcm0gcmVzZXQgY29kZSBhbmQgdmVjdG9yIGhlcmUgYmFjaworCSAqIHRvIGRlZmF1bHQgdmFsdWVzLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOworCUNNT1NfV1JJVEUoMCwgMHhmKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOworCisJKigodm9sYXRpbGUgdTMyICopcGh5c190b192aXJ0KFRSQU1QT0xJTkVfUEhZU19MT1cpKSA9IDA7Cit9CisKIC8qCiAgKiBSZXBvcnQgYmFjayB0byB0aGUgQm9vdCBQcm9jZXNzb3IgZHVyaW5nIGJvb3QgdGltZSBvciB0byB0aGUgY2FsbGVyIHByb2Nlc3NvcgogICogZHVyaW5nIENQVSBvbmxpbmUuCkBAIC0xMzYsOCArMTcyLDcgQEAKIAkgKiBDUFUsIGZpcnN0IHRoZSBBUElDLiAodGhpcyBpcyBwcm9iYWJseSByZWR1bmRhbnQgb24gbW9zdAogCSAqIGJvYXJkcykKIAkgKi8KLQlzZXR1cF9sb2NhbF9BUElDKCk7Ci0JZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKKwlhcGljX2FwX3NldHVwKCk7CiAKIAkvKgogCSAqIE5lZWQgdG8gc2V0dXAgdmVjdG9yIG1hcHBpbmdzIGJlZm9yZSB3ZSBlbmFibGUgaW50ZXJydXB0cy4KQEAgLTk1NSw5ICs5OTAsMTIgQEAKICAqLwogc3RhdGljIF9faW5pdCB2b2lkIGRpc2FibGVfc21wKHZvaWQpCiB7CisJcHJfaW5mbygiU01QIGRpc2FibGVkXG4iKTsKKworCWRpc2FibGVfaW9hcGljX3N1cHBvcnQoKTsKKwogCWluaXRfY3B1X3ByZXNlbnQoY3B1bWFza19vZigwKSk7CiAJaW5pdF9jcHVfcG9zc2libGUoY3B1bWFza19vZigwKSk7Ci0Jc21wYm9vdF9jbGVhcl9pb19hcGljX2lycXMoKTsKIAogCWlmIChzbXBfZm91bmRfY29uZmlnKQogCQlwaHlzaWRfc2V0X21hc2tfb2ZfcGh5c2lkKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCwgJnBoeXNfY3B1X3ByZXNlbnRfbWFwKTsKQEAgLTk2Nyw2ICsxMDA1LDEzIEBACiAJY3B1bWFza19zZXRfY3B1KDAsIGNwdV9jb3JlX21hc2soMCkpOwogfQogCitlbnVtIHsKKwlTTVBfT0ssCisJU01QX05PX0NPTkZJRywKKwlTTVBfTk9fQVBJQywKKwlTTVBfRk9SQ0VfVVAsCit9OworCiAvKgogICogVmFyaW91cyBzYW5pdHkgY2hlY2tzLgogICovCkBAIC0xMDE0LDEwICsxMDU5LDcgQEAKIAlpZiAoIXNtcF9mb3VuZF9jb25maWcgJiYgIWFjcGlfbGFwaWMpIHsKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAkJcHJfbm90aWNlKCJTTVAgbW90aGVyYm9hcmQgbm90IGRldGVjdGVkXG4iKTsKLQkJZGlzYWJsZV9zbXAoKTsKLQkJaWYgKEFQSUNfaW5pdF91bmlwcm9jZXNzb3IoKSkKLQkJCXByX25vdGljZSgiTG9jYWwgQVBJQyBub3QgZGV0ZWN0ZWQuIFVzaW5nIGR1bW15IEFQSUMgZW11bGF0aW9uLlxuIik7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIFNNUF9OT19DT05GSUc7CiAJfQogCiAJLyoKQEAgLTEwNDEsOSArMTA4Myw3IEBACiAJCQkJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkKTsKIAkJCXByX2VycigiLi4uIGZvcmNpbmcgdXNlIG9mIGR1bW15IEFQSUMgZW11bGF0aW9uICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIik7CiAJCX0KLQkJc21wYm9vdF9jbGVhcl9pb19hcGljKCk7Ci0JCWRpc2FibGVfaW9hcGljX3N1cHBvcnQoKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gU01QX05PX0FQSUM7CiAJfQogCiAJdmVyaWZ5X2xvY2FsX0FQSUMoKTsKQEAgLTEwNTMsMTUgKzEwOTMsMTAgQEAKIAkgKi8KIAlpZiAoIW1heF9jcHVzKSB7CiAJCXByX2luZm8oIlNNUCBtb2RlIGRlYWN0aXZhdGVkXG4iKTsKLQkJc21wYm9vdF9jbGVhcl9pb19hcGljKCk7Ci0KLQkJY29ubmVjdF9ic3BfQVBJQygpOwotCQlzZXR1cF9sb2NhbF9BUElDKCk7Ci0JCWJzcF9lbmRfbG9jYWxfQVBJQ19zZXR1cCgpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiBTTVBfRk9SQ0VfVVA7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIFNNUF9PSzsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IHNtcF9jcHVfaW5kZXhfZGVmYXVsdCh2b2lkKQpAQCAtMTEwMSwxMCArMTEzNiwyMSBAQAogCX0KIAlzZXRfY3B1X3NpYmxpbmdfbWFwKDApOwogCi0JaWYgKHNtcF9zYW5pdHlfY2hlY2sobWF4X2NwdXMpIDwgMCkgewotCQlwcl9pbmZvKCJTTVAgZGlzYWJsZWRcbiIpOworCXN3aXRjaCAoc21wX3Nhbml0eV9jaGVjayhtYXhfY3B1cykpIHsKKwljYXNlIFNNUF9OT19DT05GSUc6CisJCWRpc2FibGVfc21wKCk7CisJCWlmIChBUElDX2luaXRfdW5pcHJvY2Vzc29yKCkpCisJCQlwcl9ub3RpY2UoIkxvY2FsIEFQSUMgbm90IGRldGVjdGVkLiBVc2luZyBkdW1teSBBUElDIGVtdWxhdGlvbi5cbiIpOworCQlyZXR1cm47CisJY2FzZSBTTVBfTk9fQVBJQzoKIAkJZGlzYWJsZV9zbXAoKTsKIAkJcmV0dXJuOworCWNhc2UgU01QX0ZPUkNFX1VQOgorCQlkaXNhYmxlX3NtcCgpOworCQlhcGljX2JzcF9zZXR1cChmYWxzZSk7CisJCXJldHVybjsKKwljYXNlIFNNUF9PSzoKKwkJYnJlYWs7CiAJfQogCiAJZGVmYXVsdF9zZXR1cF9hcGljX3JvdXRpbmcoKTsKQEAgLTExMTUsMzMgKzExNjEsMTAgQEAKIAkJLyogT3IgY2FuIHdlIHN3aXRjaCBiYWNrIHRvIFBJQyBoZXJlPyAqLwogCX0KIAotCWNvbm5lY3RfYnNwX0FQSUMoKTsKLQotCS8qCi0JICogU3dpdGNoIGZyb20gUElDIHRvIEFQSUMgbW9kZS4KLQkgKi8KLQlzZXR1cF9sb2NhbF9BUElDKCk7Ci0KLQlpZiAoeDJhcGljX21vZGUpCi0JCWNwdTBfbG9naWNhbF9hcGljaWQgPSBhcGljX3JlYWQoQVBJQ19MRFIpOwotCWVsc2UKLQkJY3B1MF9sb2dpY2FsX2FwaWNpZCA9IEdFVF9BUElDX0xPR0lDQUxfSUQoYXBpY19yZWFkKEFQSUNfTERSKSk7Ci0KLQkvKgotCSAqIEVuYWJsZSBJTyBBUElDIGJlZm9yZSBzZXR0aW5nIHVwIGVycm9yIHZlY3RvcgotCSAqLwotCWlmICghc2tpcF9pb2FwaWNfc2V0dXAgJiYgbnJfaW9hcGljcykKLQkJZW5hYmxlX0lPX0FQSUMoKTsKLQotCWJzcF9lbmRfbG9jYWxfQVBJQ19zZXR1cCgpOwotCXNtcGJvb3Rfc2V0dXBfaW9fYXBpYygpOwotCS8qCi0JICogU2V0IHVwIGxvY2FsIEFQSUMgdGltZXIgb24gYm9vdCBDUFUuCi0JICovCisJY3B1MF9sb2dpY2FsX2FwaWNpZCA9IGFwaWNfYnNwX3NldHVwKGZhbHNlKTsKIAogCXByX2luZm8oIkNQVSVkOiAiLCAwKTsKIAlwcmludF9jcHVfaW5mbygmY3B1X2RhdGEoMCkpOwotCXg4Nl9pbml0LnRpbWVycy5zZXR1cF9wZXJjcHVfY2xvY2tldigpOwogCiAJaWYgKGlzX3V2X3N5c3RlbSgpKQogCQl1dl9zeXN0ZW1faW5pdCgpOwpAQCAtMTE3Nyw5ICsxMjAwLDcgQEAKIAogCW5taV9zZWxmdGVzdCgpOwogCWltcHJlc3NfZnJpZW5kcygpOwotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogCXNldHVwX2lvYXBpY19kZXN0KCk7Ci0jZW5kaWYKIAltdHJyX2Fwc19pbml0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwcy5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKaW5kZXggODg5MDBlMi4uOWQyMDczZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzLmMKQEAgLTEwOCw2ICsxMDgsODggQEAKIAlwcmVlbXB0X2NvdW50X2RlYygpOwogfQogCitlbnVtIGN0eF9zdGF0ZSBpc3RfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJZW51bSBjdHhfc3RhdGUgcHJldl9zdGF0ZTsKKworCWlmICh1c2VyX21vZGVfdm0ocmVncykpIHsKKwkJLyogT3RoZXIgdGhhbiB0aGF0LCB3ZSdyZSBqdXN0IGFuIGV4Y2VwdGlvbi4gKi8KKwkJcHJldl9zdGF0ZSA9IGV4Y2VwdGlvbl9lbnRlcigpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFdlIG1pZ2h0IGhhdmUgaW50ZXJydXB0ZWQgcHJldHR5IG11Y2ggYW55dGhpbmcuICBJbgorCQkgKiBmYWN0LCBpZiB3ZSdyZSBhIG1hY2hpbmUgY2hlY2ssIHdlIGNhbiBldmVuIGludGVycnVwdAorCQkgKiBOTUkgcHJvY2Vzc2luZy4gIFdlIGRvbid0IHdhbnQgaW5fbm1pKCkgdG8gcmV0dXJuIHRydWUsCisJCSAqIGJ1dCB3ZSBuZWVkIHRvIG5vdGlmeSBSQ1UuCisJCSAqLworCQlyY3Vfbm1pX2VudGVyKCk7CisJCXByZXZfc3RhdGUgPSBJTl9LRVJORUw7ICAvKiB0aGUgdmFsdWUgaXMgaXJyZWxldmFudC4gKi8KKwl9CisKKwkvKgorCSAqIFdlIGFyZSBhdG9taWMgYmVjYXVzZSB3ZSdyZSBvbiB0aGUgSVNUIHN0YWNrIChvciB3ZSdyZSBvbiB4ODZfMzIsCisJICogaW4gd2hpY2ggY2FzZSB3ZSBzdGlsbCBzaG91bGRuJ3Qgc2NoZWR1bGUpLgorCSAqCisJICogVGhpcyBtdXN0IGJlIGFmdGVyIGV4Y2VwdGlvbl9lbnRlcigpLCBiZWNhdXNlIGV4Y2VwdGlvbl9lbnRlcigpCisJICogd29uJ3QgZG8gYW55dGhpbmcgaWYgaW5faW50ZXJydXB0KCkgcmV0dXJucyB0cnVlLgorCSAqLworCXByZWVtcHRfY291bnRfYWRkKEhBUkRJUlFfT0ZGU0VUKTsKKworCS8qIFRoaXMgY29kZSBpcyBhIGJpdCBmcmFnaWxlLiAgVGVzdCBpdC4gKi8KKwlyY3VfbG9ja2RlcF9hc3NlcnQocmN1X2lzX3dhdGNoaW5nKCksICJpc3RfZW50ZXIgZGlkbid0IHdvcmsiKTsKKworCXJldHVybiBwcmV2X3N0YXRlOworfQorCit2b2lkIGlzdF9leGl0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBlbnVtIGN0eF9zdGF0ZSBwcmV2X3N0YXRlKQoreworCS8qIE11c3QgYmUgYmVmb3JlIGV4Y2VwdGlvbl9leGl0LiAqLworCXByZWVtcHRfY291bnRfc3ViKEhBUkRJUlFfT0ZGU0VUKTsKKworCWlmICh1c2VyX21vZGVfdm0ocmVncykpCisJCXJldHVybiBleGNlcHRpb25fZXhpdChwcmV2X3N0YXRlKTsKKwllbHNlCisJCXJjdV9ubWlfZXhpdCgpOworfQorCisvKioKKyAqIGlzdF9iZWdpbl9ub25fYXRvbWljKCkgLSBiZWdpbiBhIG5vbi1hdG9taWMgc2VjdGlvbiBpbiBhbiBJU1QgZXhjZXB0aW9uCisgKiBAcmVnczoJcmVncyBwYXNzZWQgdG8gdGhlIElTVCBleGNlcHRpb24gaGFuZGxlcgorICoKKyAqIElTVCBleGNlcHRpb24gaGFuZGxlcnMgbm9ybWFsbHkgY2Fubm90IHNjaGVkdWxlLiAgQXMgYSBzcGVjaWFsCisgKiBleGNlcHRpb24sIGlmIHRoZSBleGNlcHRpb24gaW50ZXJydXB0ZWQgdXNlcnNwYWNlIGNvZGUgKGkuZS4KKyAqIHVzZXJfbW9kZV92bShyZWdzKSB3b3VsZCByZXR1cm4gdHJ1ZSkgYW5kIHRoZSBleGNlcHRpb24gd2FzIG5vdAorICogYSBkb3VibGUgZmF1bHQsIGl0IGNhbiBiZSBzYWZlIHRvIHNjaGVkdWxlLiAgaXN0X2JlZ2luX25vbl9hdG9taWMoKQorICogYmVnaW5zIGEgbm9uLWF0b21pYyBzZWN0aW9uIHdpdGhpbiBhbiBpc3RfZW50ZXIoKS9pc3RfZXhpdCgpIHJlZ2lvbi4KKyAqIENhbGxlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBlbmFibGluZyBpbnRlcnJ1cHRzIHRoZW1zZWx2ZXMgaW5zaWRlCisgKiB0aGUgbm9uLWF0b21pYyBzZWN0aW9uLCBhbmQgY2FsbGVycyBtdXN0IGNhbGwgaXNfZW5kX25vbl9hdG9taWMoKQorICogYmVmb3JlIGlzdF9leGl0KCkuCisgKi8KK3ZvaWQgaXN0X2JlZ2luX25vbl9hdG9taWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJQlVHX09OKCF1c2VyX21vZGVfdm0ocmVncykpOworCisJLyoKKwkgKiBTYW5pdHkgY2hlY2s6IHdlIG5lZWQgdG8gYmUgb24gdGhlIG5vcm1hbCB0aHJlYWQgc3RhY2suICBUaGlzCisJICogd2lsbCBjYXRjaCBhc20gYnVncyBhbmQgYW55IGF0dGVtcHQgdG8gdXNlIGlzdF9wcmVlbXB0X2VuYWJsZQorCSAqIGZyb20gZG91YmxlX2ZhdWx0LgorCSAqLworCUJVR19PTigoKGN1cnJlbnRfc3RhY2tfcG9pbnRlcigpIF4gdGhpc19jcHVfcmVhZF9zdGFibGUoa2VybmVsX3N0YWNrKSkKKwkJJiB+KFRIUkVBRF9TSVpFIC0gMSkpICE9IDApOworCisJcHJlZW1wdF9jb3VudF9zdWIoSEFSRElSUV9PRkZTRVQpOworfQorCisvKioKKyAqIGlzdF9lbmRfbm9uX2F0b21pYygpIC0gYmVnaW4gYSBub24tYXRvbWljIHNlY3Rpb24gaW4gYW4gSVNUIGV4Y2VwdGlvbgorICoKKyAqIEVuZHMgYSBub24tYXRvbWljIHNlY3Rpb24gc3RhcnRlZCB3aXRoIGlzdF9iZWdpbl9ub25fYXRvbWljKCkuCisgKi8KK3ZvaWQgaXN0X2VuZF9ub25fYXRvbWljKHZvaWQpCit7CisJcHJlZW1wdF9jb3VudF9hZGQoSEFSRElSUV9PRkZTRVQpOworfQorCiBzdGF0aWMgbm9rcHJvYmVfaW5saW5lIGludAogZG9fdHJhcF9ub19zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCB0cmFwbnIsIGNoYXIgKnN0ciwKIAkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncywJbG9uZyBlcnJvcl9jb2RlKQpAQCAtMjUxLDYgKzMzMyw4IEBACiAJICogZW5kIHVwIHByb21vdGluZyBpdCB0byBhIGRvdWJsZWZhdWx0LiAgSW4gdGhhdCBjYXNlLCBtb2RpZnkKIAkgKiB0aGUgc3RhY2sgdG8gbWFrZSBpdCBsb29rIGxpa2Ugd2UganVzdCBlbnRlcmVkIHRoZSAjR1AKIAkgKiBoYW5kbGVyIGZyb20gdXNlciBzcGFjZSwgc2ltaWxhciB0byBiYWRfaXJldC4KKwkgKgorCSAqIE5vIG5lZWQgZm9yIGlzdF9lbnRlciBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIFJDVS4KIAkgKi8KIAlpZiAoKChsb25nKXJlZ3MtPnNwID4+IFBHRElSX1NISUZUKSA9PSBFU1BGSVhfUEdEX0VOVFJZICYmCiAJCXJlZ3MtPmNzID09IF9fS0VSTkVMX0NTICYmCkBAIC0yNjMsMTIgKzM0NywxMiBAQAogCQlub3JtYWxfcmVncy0+b3JpZ19heCA9IDA7ICAvKiBNaXNzaW5nIChsb3N0KSAjR1AgZXJyb3IgY29kZSAqLwogCQlyZWdzLT5pcCA9ICh1bnNpZ25lZCBsb25nKWdlbmVyYWxfcHJvdGVjdGlvbjsKIAkJcmVncy0+c3AgPSAodW5zaWduZWQgbG9uZykmbm9ybWFsX3JlZ3MtPm9yaWdfYXg7CisKIAkJcmV0dXJuOwogCX0KICNlbmRpZgogCi0JZXhjZXB0aW9uX2VudGVyKCk7Ci0JLyogUmV0dXJuIG5vdCBjaGVja2VkIGJlY2F1c2UgZG91YmxlIGNoZWNrIGNhbm5vdCBiZSBpZ25vcmVkICovCisJaXN0X2VudGVyKHJlZ3MpOyAgLyogRGlzY2FyZCBwcmV2X3N0YXRlIGJlY2F1c2Ugd2Ugd29uJ3QgcmV0dXJuLiAqLwogCW5vdGlmeV9kaWUoRElFX1RSQVAsIHN0ciwgcmVncywgZXJyb3JfY29kZSwgWDg2X1RSQVBfREYsIFNJR1NFR1YpOwogCiAJdHNrLT50aHJlYWQuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CkBAIC00MzQsNyArNTE4LDcgQEAKIAlpZiAocG9rZV9pbnQzX2hhbmRsZXIocmVncykpCiAJCXJldHVybjsKIAotCXByZXZfc3RhdGUgPSBleGNlcHRpb25fZW50ZXIoKTsKKwlwcmV2X3N0YXRlID0gaXN0X2VudGVyKHJlZ3MpOwogI2lmZGVmIENPTkZJR19LR0RCX0xPV19MRVZFTF9UUkFQCiAJaWYgKGtnZGJfbGxfdHJhcChESUVfSU5UMywgImludDMiLCByZWdzLCBlcnJvcl9jb2RlLCBYODZfVFJBUF9CUCwKIAkJCQlTSUdUUkFQKSA9PSBOT1RJRllfU1RPUCkKQEAgLTQ2MCwzMyArNTQ0LDIwIEBACiAJcHJlZW1wdF9jb25kaXRpb25hbF9jbGkocmVncyk7CiAJZGVidWdfc3RhY2tfdXNhZ2VfZGVjKCk7CiBleGl0OgotCWV4Y2VwdGlvbl9leGl0KHByZXZfc3RhdGUpOworCWlzdF9leGl0KHJlZ3MsIHByZXZfc3RhdGUpOwogfQogTk9LUFJPQkVfU1lNQk9MKGRvX2ludDMpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogLyoKLSAqIEhlbHAgaGFuZGxlciBydW5uaW5nIG9uIElTVCBzdGFjayB0byBzd2l0Y2ggYmFjayB0byB1c2VyIHN0YWNrCi0gKiBmb3Igc2NoZWR1bGluZyBvciBzaWduYWwgaGFuZGxpbmcuIFRoZSBhY3R1YWwgc3RhY2sgc3dpdGNoIGlzIGRvbmUgaW4KLSAqIGVudHJ5LlMKKyAqIEhlbHAgaGFuZGxlciBydW5uaW5nIG9uIElTVCBzdGFjayB0byBzd2l0Y2ggb2ZmIHRoZSBJU1Qgc3RhY2sgaWYgdGhlCisgKiBpbnRlcnJ1cHRlZCBjb2RlIHdhcyBpbiB1c2VyIG1vZGUuIFRoZSBhY3R1YWwgc3RhY2sgc3dpdGNoIGlzIGRvbmUgaW4KKyAqIGVudHJ5XzY0LlMKICAqLwogYXNtbGlua2FnZSBfX3Zpc2libGUgbm90cmFjZSBzdHJ1Y3QgcHRfcmVncyAqc3luY19yZWdzKHN0cnVjdCBwdF9yZWdzICplcmVncykKIHsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGVyZWdzOwotCS8qIERpZCBhbHJlYWR5IHN5bmMgKi8KLQlpZiAoZXJlZ3MgPT0gKHN0cnVjdCBwdF9yZWdzICopZXJlZ3MtPnNwKQotCQk7Ci0JLyogRXhjZXB0aW9uIGZyb20gdXNlciBzcGFjZSAqLwotCWVsc2UgaWYgKHVzZXJfbW9kZShlcmVncykpCi0JCXJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7Ci0JLyoKLQkgKiBFeGNlcHRpb24gZnJvbSBrZXJuZWwgYW5kIGludGVycnVwdHMgYXJlIGVuYWJsZWQuIE1vdmUgdG8KLQkgKiBrZXJuZWwgcHJvY2VzcyBzdGFjay4KLQkgKi8KLQllbHNlIGlmIChlcmVncy0+ZmxhZ3MgJiBYODZfRUZMQUdTX0lGKQotCQlyZWdzID0gKHN0cnVjdCBwdF9yZWdzICopKGVyZWdzLT5zcCAtPSBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKLQlpZiAoZXJlZ3MgIT0gcmVncykKLQkJKnJlZ3MgPSAqZXJlZ3M7CisJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSB0YXNrX3B0X3JlZ3MoY3VycmVudCk7CisJKnJlZ3MgPSAqZXJlZ3M7CiAJcmV0dXJuIHJlZ3M7CiB9CiBOT0tQUk9CRV9TWU1CT0woc3luY19yZWdzKTsKQEAgLTU1NCw3ICs2MjUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZHI2OwogCWludCBzaV9jb2RlOwogCi0JcHJldl9zdGF0ZSA9IGV4Y2VwdGlvbl9lbnRlcigpOworCXByZXZfc3RhdGUgPSBpc3RfZW50ZXIocmVncyk7CiAKIAlnZXRfZGVidWdyZWcoZHI2LCA2KTsKIApAQCAtNjI5LDcgKzcwMCw3IEBACiAJZGVidWdfc3RhY2tfdXNhZ2VfZGVjKCk7CiAKIGV4aXQ6Ci0JZXhjZXB0aW9uX2V4aXQocHJldl9zdGF0ZSk7CisJaXN0X2V4aXQocmVncywgcHJldl9zdGF0ZSk7CiB9CiBOT0tQUk9CRV9TWU1CT0woZG9fZGVidWcpOwogCkBAIC03ODgsMTggKzg1OSwxNiBAQAogCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCX0KIAorCS8qIEF2b2lkIF9fa2VybmVsX2ZwdV9iZWdpbigpIHJpZ2h0IGFmdGVyIF9fdGhyZWFkX2ZwdV9iZWdpbigpICovCisJa2VybmVsX2ZwdV9kaXNhYmxlKCk7CiAJX190aHJlYWRfZnB1X2JlZ2luKHRzayk7Ci0KLQkvKgotCSAqIFBhcmFub2lkIHJlc3RvcmUuIHNlbmQgYSBTSUdTRUdWIGlmIHdlIGZhaWwgdG8gcmVzdG9yZSB0aGUgc3RhdGUuCi0JICovCiAJaWYgKHVubGlrZWx5KHJlc3RvcmVfZnB1X2NoZWNraW5nKHRzaykpKSB7CiAJCWRyb3BfaW5pdF9mcHUodHNrKTsKIAkJZm9yY2Vfc2lnX2luZm8oU0lHU0VHViwgU0VORF9TSUdfUFJJViwgdHNrKTsKLQkJcmV0dXJuOworCX0gZWxzZSB7CisJCXRzay0+dGhyZWFkLmZwdV9jb3VudGVyKys7CiAJfQotCi0JdHNrLT50aHJlYWQuZnB1X2NvdW50ZXIrKzsKKwlrZXJuZWxfZnB1X2VuYWJsZSgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobWF0aF9zdGF0ZV9yZXN0b3JlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwppbmRleCBmOWQxNmZmLi43ZGM3YmE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZworKysgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwpAQCAtNDAsNiArNDAsNyBAQAogCXNlbGVjdCBIQVZFX0tWTV9NU0kKIAlzZWxlY3QgSEFWRV9LVk1fQ1BVX1JFTEFYX0lOVEVSQ0VQVAogCXNlbGVjdCBLVk1fVkZJTworCXNlbGVjdCBTUkNVCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBob3N0aW5nIGZ1bGx5IHZpcnR1YWxpemVkIGd1ZXN0IG1hY2hpbmVzIHVzaW5nIGhhcmR3YXJlCiAJICB2aXJ0dWFsaXphdGlvbiBleHRlbnNpb25zLiAgWW91IHdpbGwgbmVlZCBhIGZhaXJseSByZWNlbnQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5jIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKaW5kZXggNGYwYzBiOS4uZDUyZGNmMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmMKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKQEAgLTE5Miw2ICsxOTIsOSBAQAogCQl1MTYgY2lkLCBsaWQ7CiAJCXUzMiBsZHIsIGFpZDsKIAorCQlpZiAoIWt2bV9hcGljX3ByZXNlbnQodmNwdSkpCisJCQljb250aW51ZTsKKwogCQlhaWQgPSBrdm1fYXBpY19pZChhcGljKTsKIAkJbGRyID0ga3ZtX2FwaWNfZ2V0X3JlZyhhcGljLCBBUElDX0xEUik7CiAJCWNpZCA9IGFwaWNfY2x1c3Rlcl9pZChuZXcsIGxkcik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9mYXVsdC5jIGIvYXJjaC94ODYvbW0vZmF1bHQuYwppbmRleCAzOGRjZWM0Li5lM2ZmMjdhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9mYXVsdC5jCisrKyBiL2FyY2gveDg2L21tL2ZhdWx0LmMKQEAgLTg5OCw2ICs4OTgsOCBAQAogCQlpZiAoZmF1bHQgJiAoVk1fRkFVTFRfU0lHQlVTfFZNX0ZBVUxUX0hXUE9JU09OfAogCQkJICAgICBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSkpCiAJCQlkb19zaWdidXMocmVncywgZXJyb3JfY29kZSwgYWRkcmVzcywgZmF1bHQpOworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQliYWRfYXJlYV9ub3NlbWFwaG9yZShyZWdzLCBlcnJvcl9jb2RlLCBhZGRyZXNzKTsKIAkJZWxzZQogCQkJQlVHKCk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZ3VwLmMgYi9hcmNoL3g4Ni9tbS9ndXAuYwppbmRleCBkNzU0NzgyLi44OWRmNzBlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9ndXAuYworKysgYi9hcmNoL3g4Ni9tbS9ndXAuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJCSAqLwogCQlpZiAocG1kX25vbmUocG1kKSB8fCBwbWRfdHJhbnNfc3BsaXR0aW5nKHBtZCkpCiAJCQlyZXR1cm4gMDsKLQkJaWYgKHVubGlrZWx5KHBtZF9sYXJnZShwbWQpKSkgeworCQlpZiAodW5saWtlbHkocG1kX2xhcmdlKHBtZCkgfHwgIXBtZF9wcmVzZW50KHBtZCkpKSB7CiAJCQkvKgogCQkJICogTlVNQSBoaW50aW5nIGZhdWx0cyBuZWVkIHRvIGJlIGhhbmRsZWQgaW4gdGhlIEdVUAogCQkJICogc2xvd3BhdGggZm9yIGFjY291bnRpbmcgcHVycG9zZXMgYW5kIHNvIHRoYXQgdGhleQpAQCAtMzg4LDEwICszODgsOSBAQAogCQlzdGFydCArPSBuciA8PCBQQUdFX1NISUZUOwogCQlwYWdlcyArPSBucjsKIAotCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCBzdGFydCwKLQkJCShlbmQgLSBzdGFydCkgPj4gUEFHRV9TSElGVCwgd3JpdGUsIDAsIHBhZ2VzLCBOVUxMKTsKLQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJcmV0ID0gZ2V0X3VzZXJfcGFnZXNfdW5sb2NrZWQoY3VycmVudCwgbW0sIHN0YXJ0LAorCQkJCQkgICAgICAoZW5kIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQsCisJCQkJCSAgICAgIHdyaXRlLCAwLCBwYWdlcyk7CiAKIAkJLyogSGF2ZSB0byBiZSBhIGJpdCBjYXJlZnVsIHdpdGggcmV0dXJuIHZhbHVlcyAqLwogCQlpZiAobnIgPiAwKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jIGIvYXJjaC94ODYvbW0vaHVnZXRsYnBhZ2UuYwppbmRleCA4Yjk3N2ViLi40Mjk4MmIyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gveDg2L21tL2h1Z2V0bGJwYWdlLmMKQEAgLTUyLDIzICs1MiwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgcGFnZSAqCi1mb2xsb3dfaHVnZV9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJcG1kX3QgKnBtZCwgaW50IHdyaXRlKQotewotCXJldHVybiBOVUxMOwotfQogI2Vsc2UKIAotc3RydWN0IHBhZ2UgKgotZm9sbG93X2h1Z2VfYWRkcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgd3JpdGUpCi17Ci0JcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci19Ci0KKy8qCisgKiBwbWRfaHVnZSgpIHJldHVybnMgMSBpZiBAcG1kIGlzIGh1Z2V0bGIgcmVsYXRlZCBlbnRyeSwgdGhhdCBpcyBub3JtYWwKKyAqIGh1Z2V0bGIgZW50cnkgb3Igbm9uLXByZXNlbnQgKG1pZ3JhdGlvbiBvciBod3BvaXNvbmVkKSBodWdldGxiIGVudHJ5LgorICogT3RoZXJ3aXNlLCByZXR1cm5zIDAuCisgKi8KIGludCBwbWRfaHVnZShwbWRfdCBwbWQpCiB7Ci0JcmV0dXJuICEhKHBtZF92YWwocG1kKSAmIF9QQUdFX1BTRSk7CisJcmV0dXJuICFwbWRfbm9uZShwbWQpICYmCisJCShwbWRfdmFsKHBtZCkgJiAoX1BBR0VfUFJFU0VOVHxfUEFHRV9QU0UpKSAhPSBfUEFHRV9QUkVTRU5UOwogfQogCiBpbnQgcHVkX2h1Z2UocHVkX3QgcHVkKQpAQCAtMTc4LDQgKzE3MiwxNSBAQAogCXJldHVybiAxOwogfQogX19zZXR1cCgiaHVnZXBhZ2Vzej0iLCBzZXR1cF9odWdlcGFnZXN6KTsKKworI2lmZGVmIENPTkZJR19DTUEKK3N0YXRpYyBfX2luaXQgaW50IGdpZ2FudGljX3BhZ2VzX2luaXQodm9pZCkKK3sKKwkvKiBXaXRoIENNQSB3ZSBjYW4gYWxsb2NhdGUgZ2lnYW50aWMgcGFnZXMgYXQgcnVudGltZSAqLworCWlmIChjcHVfaGFzX2dicGFnZXMgJiYgIXNpemVfdG9faHN0YXRlKDFVTCA8PCBQVURfU0hJRlQpKQorCQlodWdldGxiX2FkZF9oc3RhdGUoUFVEX1NISUZUIC0gUEFHRV9TSElGVCk7CisJcmV0dXJuIDA7Cit9CithcmNoX2luaXRjYWxsKGdpZ2FudGljX3BhZ2VzX2luaXQpOworI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXQuYyBiL2FyY2gveDg2L21tL2luaXQuYwppbmRleCAwNzljM2I2Li42NDlkYTQ3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdC5jCkBAIC02MDgsNyArNjA4LDcgQEAKICAqCiAgKgogICogT24geDg2LCBhY2Nlc3MgaGFzIHRvIGJlIGdpdmVuIHRvIHRoZSBmaXJzdCBtZWdhYnl0ZSBvZiByYW0gYmVjYXVzZSB0aGF0IGFyZWEKLSAqIGNvbnRhaW5zIGJpb3MgY29kZSBhbmQgZGF0YSByZWdpb25zIHVzZWQgYnkgWCBhbmQgZG9zZW11IGFuZCBzaW1pbGFyIGFwcHMuCisgKiBjb250YWlucyBCSU9TIGNvZGUgYW5kIGRhdGEgcmVnaW9ucyB1c2VkIGJ5IFggYW5kIGRvc2VtdSBhbmQgc2ltaWxhciBhcHBzLgogICogQWNjZXNzIGhhcyB0byBiZSBnaXZlbiB0byBub24ta2VybmVsLXJhbSBhcmVhcyBhcyB3ZWxsLCB0aGVzZSBjb250YWluIHRoZSBQQ0kKICAqIG1taW8gcmVzb3VyY2VzIGFzIHdlbGwgYXMgcG90ZW50aWFsIGJpb3MvYWNwaSBkYXRhIHJlZ2lvbnMuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BndGFibGUuYyBiL2FyY2gveDg2L21tL3BndGFibGUuYwppbmRleCA2ZmI2OTI3Li43YjIyYWRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jCkBAIC0xOTAsNyArMTkwLDcgQEAKIAogI2VuZGlmCS8qIENPTkZJR19YODZfUEFFICovCiAKLXN0YXRpYyB2b2lkIGZyZWVfcG1kcyhwbWRfdCAqcG1kc1tdKQorc3RhdGljIHZvaWQgZnJlZV9wbWRzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kc1tdKQogewogCWludCBpOwogCkBAIC0xOTgsMTAgKzE5OCwxMSBAQAogCQlpZiAocG1kc1tpXSkgewogCQkJcGd0YWJsZV9wbWRfcGFnZV9kdG9yKHZpcnRfdG9fcGFnZShwbWRzW2ldKSk7CiAJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcG1kc1tpXSk7CisJCQltbV9kZWNfbnJfcG1kcyhtbSk7CiAJCX0KIH0KIAotc3RhdGljIGludCBwcmVhbGxvY2F0ZV9wbWRzKHBtZF90ICpwbWRzW10pCitzdGF0aWMgaW50IHByZWFsbG9jYXRlX3BtZHMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWRzW10pCiB7CiAJaW50IGk7CiAJYm9vbCBmYWlsZWQgPSBmYWxzZTsKQEAgLTIxNSwxMSArMjE2LDEzIEBACiAJCQlwbWQgPSBOVUxMOwogCQkJZmFpbGVkID0gdHJ1ZTsKIAkJfQorCQlpZiAocG1kKQorCQkJbW1faW5jX25yX3BtZHMobW0pOwogCQlwbWRzW2ldID0gcG1kOwogCX0KIAogCWlmIChmYWlsZWQpIHsKLQkJZnJlZV9wbWRzKHBtZHMpOworCQlmcmVlX3BtZHMobW0sIHBtZHMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTI0Niw2ICsyNDksNyBAQAogCiAJCQlwYXJhdmlydF9yZWxlYXNlX3BtZChwZ2RfdmFsKHBnZCkgPj4gUEFHRV9TSElGVCk7CiAJCQlwbWRfZnJlZShtbSwgcG1kKTsKKwkJCW1tX2RlY19ucl9wbWRzKG1tKTsKIAkJfQogCX0KIH0KQEAgLTI4Myw3ICsyODcsNyBAQAogCiAJbW0tPnBnZCA9IHBnZDsKIAotCWlmIChwcmVhbGxvY2F0ZV9wbWRzKHBtZHMpICE9IDApCisJaWYgKHByZWFsbG9jYXRlX3BtZHMobW0sIHBtZHMpICE9IDApCiAJCWdvdG8gb3V0X2ZyZWVfcGdkOwogCiAJaWYgKHBhcmF2aXJ0X3BnZF9hbGxvYyhtbSkgIT0gMCkKQEAgLTMwNCw3ICszMDgsNyBAQAogCXJldHVybiBwZ2Q7CiAKIG91dF9mcmVlX3BtZHM6Ci0JZnJlZV9wbWRzKHBtZHMpOworCWZyZWVfcG1kcyhtbSwgcG1kcyk7CiBvdXRfZnJlZV9wZ2Q6CiAJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBnZCk7CiBvdXQ6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvYWNwaS5jIGIvYXJjaC94ODYvcGNpL2FjcGkuYwppbmRleCBjZmQxYjEzLi42YWMyNzM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvYWNwaS5jCisrKyBiL2FyY2gveDg2L3BjaS9hY3BpLmMKQEAgLTEwLDkgKzEwLDYgQEAKIHN0cnVjdCBwY2lfcm9vdF9pbmZvIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmJyaWRnZTsKIAljaGFyIG5hbWVbMTZdOwotCXVuc2lnbmVkIGludCByZXNfbnVtOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCXJlc291cmNlX3NpemVfdCAqcmVzX29mZnNldDsKIAlzdHJ1Y3QgcGNpX3N5c2RhdGEgc2Q7CiAjaWZkZWYJQ09ORklHX1BDSV9NTUNPTkZJRwogCWJvb2wgbWNmZ19hZGRlZDsKQEAgLTIxOCwxMzAgKzIxNSw0MSBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBhY3BpX3N0YXR1cyByZXNvdXJjZV90b19hZGRyKHN0cnVjdCBhY3BpX3Jlc291cmNlICpyZXNvdXJjZSwKLQkJCQkgICAgc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0ICphZGRyKQorc3RhdGljIHZvaWQgdmFsaWRhdGVfcmVzb3VyY2VzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqY3JzX3JlcywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHR5cGUpCiB7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCXN0cnVjdCBhY3BpX3Jlc291cmNlX21lbW9yeTI0ICptZW1vcnkyNDsKLQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9tZW1vcnkzMiAqbWVtb3J5MzI7Ci0Jc3RydWN0IGFjcGlfcmVzb3VyY2VfZml4ZWRfbWVtb3J5MzIgKmZpeGVkX21lbW9yeTMyOworCUxJU1RfSEVBRChsaXN0KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczEsICpyZXMyLCAqcm9vdCA9IE5VTEw7CisJc3RydWN0IHJlc291cmNlX2VudHJ5ICp0bXAsICplbnRyeSwgKmVudHJ5MjsKIAotCW1lbXNldChhZGRyLCAwLCBzaXplb2YoKmFkZHIpKTsKLQlzd2l0Y2ggKHJlc291cmNlLT50eXBlKSB7Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfTUVNT1JZMjQ6Ci0JCW1lbW9yeTI0ID0gJnJlc291cmNlLT5kYXRhLm1lbW9yeTI0OwotCQlhZGRyLT5yZXNvdXJjZV90eXBlID0gQUNQSV9NRU1PUllfUkFOR0U7Ci0JCWFkZHItPm1pbmltdW0gPSBtZW1vcnkyNC0+bWluaW11bTsKLQkJYWRkci0+YWRkcmVzc19sZW5ndGggPSBtZW1vcnkyNC0+YWRkcmVzc19sZW5ndGg7Ci0JCWFkZHItPm1heGltdW0gPSBhZGRyLT5taW5pbXVtICsgYWRkci0+YWRkcmVzc19sZW5ndGggLSAxOwotCQlyZXR1cm4gQUVfT0s7Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfTUVNT1JZMzI6Ci0JCW1lbW9yeTMyID0gJnJlc291cmNlLT5kYXRhLm1lbW9yeTMyOwotCQlhZGRyLT5yZXNvdXJjZV90eXBlID0gQUNQSV9NRU1PUllfUkFOR0U7Ci0JCWFkZHItPm1pbmltdW0gPSBtZW1vcnkzMi0+bWluaW11bTsKLQkJYWRkci0+YWRkcmVzc19sZW5ndGggPSBtZW1vcnkzMi0+YWRkcmVzc19sZW5ndGg7Ci0JCWFkZHItPm1heGltdW0gPSBhZGRyLT5taW5pbXVtICsgYWRkci0+YWRkcmVzc19sZW5ndGggLSAxOwotCQlyZXR1cm4gQUVfT0s7Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRklYRURfTUVNT1JZMzI6Ci0JCWZpeGVkX21lbW9yeTMyID0gJnJlc291cmNlLT5kYXRhLmZpeGVkX21lbW9yeTMyOwotCQlhZGRyLT5yZXNvdXJjZV90eXBlID0gQUNQSV9NRU1PUllfUkFOR0U7Ci0JCWFkZHItPm1pbmltdW0gPSBmaXhlZF9tZW1vcnkzMi0+YWRkcmVzczsKLQkJYWRkci0+YWRkcmVzc19sZW5ndGggPSBmaXhlZF9tZW1vcnkzMi0+YWRkcmVzc19sZW5ndGg7Ci0JCWFkZHItPm1heGltdW0gPSBhZGRyLT5taW5pbXVtICsgYWRkci0+YWRkcmVzc19sZW5ndGggLSAxOwotCQlyZXR1cm4gQUVfT0s7Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfQUREUkVTUzE2OgotCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0FERFJFU1MzMjoKLQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9BRERSRVNTNjQ6Ci0JCXN0YXR1cyA9IGFjcGlfcmVzb3VyY2VfdG9fYWRkcmVzczY0KHJlc291cmNlLCBhZGRyKTsKLQkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpICYmCi0JCSAgICAoYWRkci0+cmVzb3VyY2VfdHlwZSA9PSBBQ1BJX01FTU9SWV9SQU5HRSB8fAotCQkgICAgYWRkci0+cmVzb3VyY2VfdHlwZSA9PSBBQ1BJX0lPX1JBTkdFKSAmJgotCQkgICAgYWRkci0+YWRkcmVzc19sZW5ndGggPiAwKSB7Ci0JCQlyZXR1cm4gQUVfT0s7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCXJldHVybiBBRV9FUlJPUjsKLX0KKwlCVUdfT04oKHR5cGUgJiAoSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0lPKSkgPT0gMCk7CisJcm9vdCA9ICh0eXBlICYgSU9SRVNPVVJDRV9NRU0pID8gJmlvbWVtX3Jlc291cmNlIDogJmlvcG9ydF9yZXNvdXJjZTsKIAotc3RhdGljIGFjcGlfc3RhdHVzIGNvdW50X3Jlc291cmNlKHN0cnVjdCBhY3BpX3Jlc291cmNlICphY3BpX3Jlcywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyAqaW5mbyA9IGRhdGE7Ci0Jc3RydWN0IGFjcGlfcmVzb3VyY2VfYWRkcmVzczY0IGFkZHI7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOworCWxpc3Rfc3BsaWNlX2luaXQoY3JzX3JlcywgJmxpc3QpOworCXJlc291cmNlX2xpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgdG1wLCAmbGlzdCkgeworCQlib29sIGZyZWUgPSBmYWxzZTsKKwkJcmVzb3VyY2Vfc2l6ZV90IGVuZDsKIAotCXN0YXR1cyA9IHJlc291cmNlX3RvX2FkZHIoYWNwaV9yZXMsICZhZGRyKTsKLQlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpCi0JCWluZm8tPnJlc19udW0rKzsKLQlyZXR1cm4gQUVfT0s7Ci19Ci0KLXN0YXRpYyBhY3BpX3N0YXR1cyBzZXR1cF9yZXNvdXJjZShzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqYWNwaV9yZXMsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHBjaV9yb290X2luZm8gKmluZm8gPSBkYXRhOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3M2NCBhZGRyOwotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU2NCBzdGFydCwgb3JpZ19lbmQsIGVuZDsKLQotCXN0YXR1cyA9IHJlc291cmNlX3RvX2FkZHIoYWNwaV9yZXMsICZhZGRyKTsKLQlpZiAoIUFDUElfU1VDQ0VTUyhzdGF0dXMpKQotCQlyZXR1cm4gQUVfT0s7Ci0KLQlpZiAoYWRkci5yZXNvdXJjZV90eXBlID09IEFDUElfTUVNT1JZX1JBTkdFKSB7Ci0JCWZsYWdzID0gSU9SRVNPVVJDRV9NRU07Ci0JCWlmIChhZGRyLmluZm8ubWVtLmNhY2hpbmcgPT0gQUNQSV9QUkVGRVRDSEFCTEVfTUVNT1JZKQotCQkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9QUkVGRVRDSDsKLQl9IGVsc2UgaWYgKGFkZHIucmVzb3VyY2VfdHlwZSA9PSBBQ1BJX0lPX1JBTkdFKSB7Ci0JCWZsYWdzID0gSU9SRVNPVVJDRV9JTzsKLQl9IGVsc2UKLQkJcmV0dXJuIEFFX09LOwotCi0Jc3RhcnQgPSBhZGRyLm1pbmltdW0gKyBhZGRyLnRyYW5zbGF0aW9uX29mZnNldDsKLQlvcmlnX2VuZCA9IGVuZCA9IGFkZHIubWF4aW11bSArIGFkZHIudHJhbnNsYXRpb25fb2Zmc2V0OwotCi0JLyogRXhjbHVkZSBub24tYWRkcmVzc2FibGUgcmFuZ2Ugb3Igbm9uLWFkZHJlc3NhYmxlIHBvcnRpb24gb2YgcmFuZ2UgKi8KLQllbmQgPSBtaW4oZW5kLCAodTY0KWlvbWVtX3Jlc291cmNlLmVuZCk7Ci0JaWYgKGVuZCA8PSBzdGFydCkgewotCQlkZXZfaW5mbygmaW5mby0+YnJpZGdlLT5kZXYsCi0JCQkiaG9zdCBicmlkZ2Ugd2luZG93IFslI2xseC0lI2xseF0gIgotCQkJIihpZ25vcmVkLCBub3QgQ1BVIGFkZHJlc3NhYmxlKVxuIiwgc3RhcnQsIG9yaWdfZW5kKTsKLQkJcmV0dXJuIEFFX09LOwotCX0gZWxzZSBpZiAob3JpZ19lbmQgIT0gZW5kKSB7Ci0JCWRldl9pbmZvKCZpbmZvLT5icmlkZ2UtPmRldiwKLQkJCSJob3N0IGJyaWRnZSB3aW5kb3cgWyUjbGx4LSUjbGx4XSAiCi0JCQkiKFslI2xseC0lI2xseF0gaWdub3JlZCwgbm90IENQVSBhZGRyZXNzYWJsZSlcbiIsIAotCQkJc3RhcnQsIG9yaWdfZW5kLCBlbmQgKyAxLCBvcmlnX2VuZCk7Ci0JfQotCi0JcmVzID0gJmluZm8tPnJlc1tpbmZvLT5yZXNfbnVtXTsKLQlyZXMtPm5hbWUgPSBpbmZvLT5uYW1lOwotCXJlcy0+ZmxhZ3MgPSBmbGFnczsKLQlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JcmVzLT5lbmQgPSBlbmQ7Ci0JaW5mby0+cmVzX29mZnNldFtpbmZvLT5yZXNfbnVtXSA9IGFkZHIudHJhbnNsYXRpb25fb2Zmc2V0OwotCWluZm8tPnJlc19udW0rKzsKLQotCWlmICghcGNpX3VzZV9jcnMpCi0JCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmluZm8tPmJyaWRnZS0+ZGV2LAotCQkJICAgImhvc3QgYnJpZGdlIHdpbmRvdyAlcFIgKGlnbm9yZWQpXG4iLCByZXMpOwotCi0JcmV0dXJuIEFFX09LOwotfQotCi1zdGF0aWMgdm9pZCBjb2FsZXNjZV93aW5kb3dzKHN0cnVjdCBwY2lfcm9vdF9pbmZvICppbmZvLCB1bnNpZ25lZCBsb25nIHR5cGUpCi17Ci0JaW50IGksIGo7Ci0Jc3RydWN0IHJlc291cmNlICpyZXMxLCAqcmVzMjsKLQotCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5yZXNfbnVtOyBpKyspIHsKLQkJcmVzMSA9ICZpbmZvLT5yZXNbaV07CisJCXJlczEgPSBlbnRyeS0+cmVzOwogCQlpZiAoIShyZXMxLT5mbGFncyAmIHR5cGUpKQotCQkJY29udGludWU7CisJCQlnb3RvIG5leHQ7CiAKLQkJZm9yIChqID0gaSArIDE7IGogPCBpbmZvLT5yZXNfbnVtOyBqKyspIHsKLQkJCXJlczIgPSAmaW5mby0+cmVzW2pdOworCQkvKiBFeGNsdWRlIG5vbi1hZGRyZXNzYWJsZSByYW5nZSBvciBub24tYWRkcmVzc2FibGUgcG9ydGlvbiAqLworCQllbmQgPSBtaW4ocmVzMS0+ZW5kLCByb290LT5lbmQpOworCQlpZiAoZW5kIDw9IHJlczEtPnN0YXJ0KSB7CisJCQlkZXZfaW5mbyhkZXYsICJob3N0IGJyaWRnZSB3aW5kb3cgJXBSIChpZ25vcmVkLCBub3QgQ1BVIGFkZHJlc3NhYmxlKVxuIiwKKwkJCQkgcmVzMSk7CisJCQlmcmVlID0gdHJ1ZTsKKwkJCWdvdG8gbmV4dDsKKwkJfSBlbHNlIGlmIChyZXMxLT5lbmQgIT0gZW5kKSB7CisJCQlkZXZfaW5mbyhkZXYsICJob3N0IGJyaWRnZSB3aW5kb3cgJXBSIChbJSNsbHgtJSNsbHhdIGlnbm9yZWQsIG5vdCBDUFUgYWRkcmVzc2FibGUpXG4iLAorCQkJCSByZXMxLCAodW5zaWduZWQgbG9uZyBsb25nKWVuZCArIDEsCisJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzMS0+ZW5kKTsKKwkJCXJlczEtPmVuZCA9IGVuZDsKKwkJfQorCisJCXJlc291cmNlX2xpc3RfZm9yX2VhY2hfZW50cnkoZW50cnkyLCBjcnNfcmVzKSB7CisJCQlyZXMyID0gZW50cnkyLT5yZXM7CiAJCQlpZiAoIShyZXMyLT5mbGFncyAmIHR5cGUpKQogCQkJCWNvbnRpbnVlOwogCkBAIC0zNTMsMTE4ICsyNjEsOTIgQEAKIAkJCWlmIChyZXNvdXJjZV9vdmVybGFwcyhyZXMxLCByZXMyKSkgewogCQkJCXJlczItPnN0YXJ0ID0gbWluKHJlczEtPnN0YXJ0LCByZXMyLT5zdGFydCk7CiAJCQkJcmVzMi0+ZW5kID0gbWF4KHJlczEtPmVuZCwgcmVzMi0+ZW5kKTsKLQkJCQlkZXZfaW5mbygmaW5mby0+YnJpZGdlLT5kZXYsCi0JCQkJCSAiaG9zdCBicmlkZ2Ugd2luZG93IGV4cGFuZGVkIHRvICVwUjsgJXBSIGlnbm9yZWRcbiIsCisJCQkJZGV2X2luZm8oZGV2LCAiaG9zdCBicmlkZ2Ugd2luZG93IGV4cGFuZGVkIHRvICVwUjsgJXBSIGlnbm9yZWRcbiIsCiAJCQkJCSByZXMyLCByZXMxKTsKLQkJCQlyZXMxLT5mbGFncyA9IDA7CisJCQkJZnJlZSA9IHRydWU7CisJCQkJZ290byBuZXh0OwogCQkJfQogCQl9CisKK25leHQ6CisJCXJlc291cmNlX2xpc3RfZGVsKGVudHJ5KTsKKwkJaWYgKGZyZWUpCisJCQlyZXNvdXJjZV9saXN0X2ZyZWVfZW50cnkoZW50cnkpOworCQllbHNlCisJCQlyZXNvdXJjZV9saXN0X2FkZF90YWlsKGVudHJ5LCBjcnNfcmVzKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGFkZF9yZXNvdXJjZXMoc3RydWN0IHBjaV9yb290X2luZm8gKmluZm8sCi0JCQkgIHN0cnVjdCBsaXN0X2hlYWQgKnJlc291cmNlcykKKwkJCSAgc3RydWN0IGxpc3RfaGVhZCAqcmVzb3VyY2VzLAorCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpjcnNfcmVzKQogewotCWludCBpOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzLCAqcm9vdCwgKmNvbmZsaWN0OworCXN0cnVjdCByZXNvdXJjZV9lbnRyeSAqZW50cnksICp0bXA7CisJc3RydWN0IHJlc291cmNlICpyZXMsICpjb25mbGljdCwgKnJvb3QgPSBOVUxMOwogCi0JY29hbGVzY2Vfd2luZG93cyhpbmZvLCBJT1JFU09VUkNFX01FTSk7Ci0JY29hbGVzY2Vfd2luZG93cyhpbmZvLCBJT1JFU09VUkNFX0lPKTsKKwl2YWxpZGF0ZV9yZXNvdXJjZXMoJmluZm8tPmJyaWRnZS0+ZGV2LCBjcnNfcmVzLCBJT1JFU09VUkNFX01FTSk7CisJdmFsaWRhdGVfcmVzb3VyY2VzKCZpbmZvLT5icmlkZ2UtPmRldiwgY3JzX3JlcywgSU9SRVNPVVJDRV9JTyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cmVzX251bTsgaSsrKSB7Ci0JCXJlcyA9ICZpbmZvLT5yZXNbaV07Ci0KKwlyZXNvdXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgY3JzX3JlcykgeworCQlyZXMgPSBlbnRyeS0+cmVzOwogCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQogCQkJcm9vdCA9ICZpb21lbV9yZXNvdXJjZTsKIAkJZWxzZSBpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCiAJCQlyb290ID0gJmlvcG9ydF9yZXNvdXJjZTsKIAkJZWxzZQotCQkJY29udGludWU7CisJCQlCVUdfT04ocmVzKTsKIAogCQljb25mbGljdCA9IGluc2VydF9yZXNvdXJjZV9jb25mbGljdChyb290LCByZXMpOwotCQlpZiAoY29uZmxpY3QpCisJCWlmIChjb25mbGljdCkgewogCQkJZGV2X2luZm8oJmluZm8tPmJyaWRnZS0+ZGV2LAogCQkJCSAiaWdub3JpbmcgaG9zdCBicmlkZ2Ugd2luZG93ICVwUiAoY29uZmxpY3RzIHdpdGggJXMgJXBSKVxuIiwKIAkJCQkgcmVzLCBjb25mbGljdC0+bmFtZSwgY29uZmxpY3QpOwotCQllbHNlCi0JCQlwY2lfYWRkX3Jlc291cmNlX29mZnNldChyZXNvdXJjZXMsIHJlcywKLQkJCQkJaW5mby0+cmVzX29mZnNldFtpXSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBmcmVlX3BjaV9yb290X2luZm9fcmVzKHN0cnVjdCBwY2lfcm9vdF9pbmZvICppbmZvKQotewotCWtmcmVlKGluZm8tPnJlcyk7Ci0JaW5mby0+cmVzID0gTlVMTDsKLQlrZnJlZShpbmZvLT5yZXNfb2Zmc2V0KTsKLQlpbmZvLT5yZXNfb2Zmc2V0ID0gTlVMTDsKLQlpbmZvLT5yZXNfbnVtID0gMDsKLX0KLQotc3RhdGljIHZvaWQgX19yZWxlYXNlX3BjaV9yb290X2luZm8oc3RydWN0IHBjaV9yb290X2luZm8gKmluZm8pCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+cmVzX251bTsgaSsrKSB7Ci0JCXJlcyA9ICZpbmZvLT5yZXNbaV07Ci0KLQkJaWYgKCFyZXMtPnBhcmVudCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghKHJlcy0+ZmxhZ3MgJiAoSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0lPKSkpCi0JCQljb250aW51ZTsKLQotCQlyZWxlYXNlX3Jlc291cmNlKHJlcyk7CisJCQlyZXNvdXJjZV9saXN0X2Rlc3Ryb3lfZW50cnkoZW50cnkpOworCQl9CiAJfQogCi0JZnJlZV9wY2lfcm9vdF9pbmZvX3JlcyhpbmZvKTsKLQotCXRlYXJkb3duX21jZmdfbWFwKGluZm8pOwotCi0Ja2ZyZWUoaW5mbyk7CisJbGlzdF9zcGxpY2VfdGFpbChjcnNfcmVzLCByZXNvdXJjZXMpOwogfQogCiBzdGF0aWMgdm9pZCByZWxlYXNlX3BjaV9yb290X2luZm8oc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqYnJpZGdlKQogeworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCByZXNvdXJjZV9lbnRyeSAqZW50cnk7CiAJc3RydWN0IHBjaV9yb290X2luZm8gKmluZm8gPSBicmlkZ2UtPnJlbGVhc2VfZGF0YTsKIAotCV9fcmVsZWFzZV9wY2lfcm9vdF9pbmZvKGluZm8pOworCXJlc291cmNlX2xpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZicmlkZ2UtPndpbmRvd3MpIHsKKwkJcmVzID0gZW50cnktPnJlczsKKwkJaWYgKHJlcy0+cGFyZW50ICYmCisJCSAgICAocmVzLT5mbGFncyAmIChJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfSU8pKSkKKwkJCXJlbGVhc2VfcmVzb3VyY2UocmVzKTsKKwl9CisKKwl0ZWFyZG93bl9tY2ZnX21hcChpbmZvKTsKKwlrZnJlZShpbmZvKTsKIH0KIAogc3RhdGljIHZvaWQgcHJvYmVfcGNpX3Jvb3RfaW5mbyhzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyAqaW5mbywKIAkJCQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwKLQkJCQlpbnQgYnVzbnVtLCBpbnQgZG9tYWluKQorCQkJCWludCBidXNudW0sIGludCBkb21haW4sCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKLQlzaXplX3Qgc2l6ZTsKKwlpbnQgcmV0OworCXN0cnVjdCByZXNvdXJjZV9lbnRyeSAqZW50cnk7CiAKIAlzcHJpbnRmKGluZm8tPm5hbWUsICJQQ0kgQnVzICUwNHg6JTAyeCIsIGRvbWFpbiwgYnVzbnVtKTsKIAlpbmZvLT5icmlkZ2UgPSBkZXZpY2U7Ci0KLQlpbmZvLT5yZXNfbnVtID0gMDsKLQlhY3BpX3dhbGtfcmVzb3VyY2VzKGRldmljZS0+aGFuZGxlLCBNRVRIT0RfTkFNRV9fQ1JTLCBjb3VudF9yZXNvdXJjZSwKLQkJCQlpbmZvKTsKLQlpZiAoIWluZm8tPnJlc19udW0pCi0JCXJldHVybjsKLQotCXNpemUgPSBzaXplb2YoKmluZm8tPnJlcykgKiBpbmZvLT5yZXNfbnVtOwotCWluZm8tPnJlcyA9IGt6YWxsb2Nfbm9kZShzaXplLCBHRlBfS0VSTkVMLCBpbmZvLT5zZC5ub2RlKTsKLQlpZiAoIWluZm8tPnJlcykgewotCQlpbmZvLT5yZXNfbnVtID0gMDsKLQkJcmV0dXJuOwotCX0KLQotCXNpemUgPSBzaXplb2YoKmluZm8tPnJlc19vZmZzZXQpICogaW5mby0+cmVzX251bTsKLQlpbmZvLT5yZXNfbnVtID0gMDsKLQlpbmZvLT5yZXNfb2Zmc2V0ID0ga3phbGxvY19ub2RlKHNpemUsIEdGUF9LRVJORUwsIGluZm8tPnNkLm5vZGUpOwotCWlmICghaW5mby0+cmVzX29mZnNldCkgewotCQlrZnJlZShpbmZvLT5yZXMpOwotCQlpbmZvLT5yZXMgPSBOVUxMOwotCQlyZXR1cm47Ci0JfQotCi0JYWNwaV93YWxrX3Jlc291cmNlcyhkZXZpY2UtPmhhbmRsZSwgTUVUSE9EX05BTUVfX0NSUywgc2V0dXBfcmVzb3VyY2UsCi0JCQkJaW5mbyk7CisJcmV0ID0gYWNwaV9kZXZfZ2V0X3Jlc291cmNlcyhkZXZpY2UsIGxpc3QsCisJCQkJICAgICBhY3BpX2Rldl9maWx0ZXJfcmVzb3VyY2VfdHlwZV9jYiwKKwkJCQkgICAgICh2b2lkICopKElPUkVTT1VSQ0VfSU8gfCBJT1JFU09VUkNFX01FTSkpOworCWlmIChyZXQgPCAwKQorCQlkZXZfd2FybigmZGV2aWNlLT5kZXYsCisJCQkgImZhaWxlZCB0byBwYXJzZSBfQ1JTIG1ldGhvZCwgZXJyb3IgY29kZSAlZFxuIiwgcmV0KTsKKwllbHNlIGlmIChyZXQgPT0gMCkKKwkJZGV2X2RiZygmZGV2aWNlLT5kZXYsCisJCQkibm8gSU8gYW5kIG1lbW9yeSByZXNvdXJjZXMgcHJlc2VudCBpbiBfQ1JTXG4iKTsKKwllbHNlCisJCXJlc291cmNlX2xpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGxpc3QpCisJCQllbnRyeS0+cmVzLT5uYW1lID0gaW5mby0+bmFtZTsKIH0KIAogc3RydWN0IHBjaV9idXMgKnBjaV9hY3BpX3NjYW5fcm9vdChzdHJ1Y3QgYWNwaV9wY2lfcm9vdCAqcm9vdCkKQEAgLTQ3Myw2ICszNTUsOCBAQAogCXN0cnVjdCBwY2lfcm9vdF9pbmZvICppbmZvOwogCWludCBkb21haW4gPSByb290LT5zZWdtZW50OwogCWludCBidXNudW0gPSByb290LT5zZWNvbmRhcnkuc3RhcnQ7CisJc3RydWN0IHJlc291cmNlX2VudHJ5ICpyZXNfZW50cnk7CisJTElTVF9IRUFEKGNyc19yZXMpOwogCUxJU1RfSEVBRChyZXNvdXJjZXMpOwogCXN0cnVjdCBwY2lfYnVzICpidXM7CiAJc3RydWN0IHBjaV9zeXNkYXRhICpzZDsKQEAgLTUyMCwxOCArNDA0LDIyIEBACiAJCW1lbWNweShidXMtPnN5c2RhdGEsIHNkLCBzaXplb2YoKnNkKSk7CiAJCWtmcmVlKGluZm8pOwogCX0gZWxzZSB7Ci0JCXByb2JlX3BjaV9yb290X2luZm8oaW5mbywgZGV2aWNlLCBidXNudW0sIGRvbWFpbik7Ci0KIAkJLyogaW5zZXJ0IGJ1c24gcmVzIGF0IGZpcnN0ICovCiAJCXBjaV9hZGRfcmVzb3VyY2UoJnJlc291cmNlcywgICZyb290LT5zZWNvbmRhcnkpOworCiAJCS8qCiAJCSAqIF9DUlMgd2l0aCBubyBhcGVydHVyZXMgaXMgbm9ybWFsLCBzbyBvbmx5IGZhbGwgYmFjayB0bwogCQkgKiBkZWZhdWx0cyBvciBuYXRpdmUgYnJpZGdlIGluZm8gaWYgd2UncmUgaWdub3JpbmcgX0NSUy4KIAkJICovCi0JCWlmIChwY2lfdXNlX2NycykKLQkJCWFkZF9yZXNvdXJjZXMoaW5mbywgJnJlc291cmNlcyk7Ci0JCWVsc2UgewotCQkJZnJlZV9wY2lfcm9vdF9pbmZvX3JlcyhpbmZvKTsKKwkJcHJvYmVfcGNpX3Jvb3RfaW5mbyhpbmZvLCBkZXZpY2UsIGJ1c251bSwgZG9tYWluLCAmY3JzX3Jlcyk7CisJCWlmIChwY2lfdXNlX2NycykgeworCQkJYWRkX3Jlc291cmNlcyhpbmZvLCAmcmVzb3VyY2VzLCAmY3JzX3Jlcyk7CisJCX0gZWxzZSB7CisJCQlyZXNvdXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5KHJlc19lbnRyeSwgJmNyc19yZXMpCisJCQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmZGV2aWNlLT5kZXYsCisJCQkJCSAgICJob3N0IGJyaWRnZSB3aW5kb3cgJXBSIChpZ25vcmVkKVxuIiwKKwkJCQkJICAgcmVzX2VudHJ5LT5yZXMpOworCQkJcmVzb3VyY2VfbGlzdF9mcmVlKCZjcnNfcmVzKTsKIAkJCXg4Nl9wY2lfcm9vdF9idXNfcmVzb3VyY2VzKGJ1c251bSwgJnJlc291cmNlcyk7CiAJCX0KIApAQCAtNTQ2LDggKzQzNCw5IEBACiAJCQkJdG9fcGNpX2hvc3RfYnJpZGdlKGJ1cy0+YnJpZGdlKSwKIAkJCQlyZWxlYXNlX3BjaV9yb290X2luZm8sIGluZm8pOwogCQl9IGVsc2UgewotCQkJcGNpX2ZyZWVfcmVzb3VyY2VfbGlzdCgmcmVzb3VyY2VzKTsKLQkJCV9fcmVsZWFzZV9wY2lfcm9vdF9pbmZvKGluZm8pOworCQkJcmVzb3VyY2VfbGlzdF9mcmVlKCZyZXNvdXJjZXMpOworCQkJdGVhcmRvd25fbWNmZ19tYXAoaW5mbyk7CisJCQlrZnJlZShpbmZvKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2J1c19udW1hLmMgYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYwppbmRleCBmM2EyY2ZjLi43YmNmMDZhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYworKysgYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYwpAQCAtMzEsNyArMzEsNyBAQAogewogCXN0cnVjdCBwY2lfcm9vdF9pbmZvICppbmZvID0geDg2X2ZpbmRfcGNpX3Jvb3RfaW5mbyhidXMpOwogCXN0cnVjdCBwY2lfcm9vdF9yZXMgKnJvb3RfcmVzOwotCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2Vfd2luZG93ICp3aW5kb3c7CisJc3RydWN0IHJlc291cmNlX2VudHJ5ICp3aW5kb3c7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwogCiAJaWYgKCFpbmZvKQpAQCAtNDEsNyArNDEsNyBAQAogCSAgICAgICBidXMpOwogCiAJLyogYWxyZWFkeSBhZGRlZCBieSBhY3BpID8gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdpbmRvdywgcmVzb3VyY2VzLCBsaXN0KQorCXJlc291cmNlX2xpc3RfZm9yX2VhY2hfZW50cnkod2luZG93LCByZXNvdXJjZXMpCiAJCWlmICh3aW5kb3ctPnJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0JVUykgewogCQkJZm91bmQgPSB0cnVlOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvY29tbW9uLmMgYi9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKaW5kZXggN2IyMGJjYy4uM2QyNjEyYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L3BjaS9jb21tb24uYwpAQCAtNDQ4LDYgKzQ0OCwyMiBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJmdFNlcnZlciIpLAogCQl9LAogCX0sCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICAuY2FsbGJhY2sgPSBzZXRfc2Nhbl9hbGwsCisgICAgICAgICAgICAgICAgLmlkZW50ID0gIlN0cmF0dXMvTkVDIGZ0U2VydmVyIiwKKyAgICAgICAgICAgICAgICAubWF0Y2hlcyA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk5FQyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJFeHByZXNzNTgwMC9SMzIiKSwKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAgICAgLmNhbGxiYWNrID0gc2V0X3NjYW5fYWxsLAorICAgICAgICAgICAgICAgIC5pZGVudCA9ICJTdHJhdHVzL05FQyBmdFNlcnZlciIsCisgICAgICAgICAgICAgICAgLm1hdGNoZXMgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICBETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJORUMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiRXhwcmVzczU4MDAvUjMxIiksCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgfSwKIAl7fQogfTsKIApAQCAtNDk3LDYgKzUxMywzMSBAQAogCX0KIH0KIAorLyoKKyAqIFNvbWUgZGV2aWNlIGRyaXZlcnMgYXNzdW1lIGRldi0+aXJxIHdvbid0IGNoYW5nZSBhZnRlciBjYWxsaW5nCisgKiBwY2lfZGlzYWJsZV9kZXZpY2UoKS4gU28gZGVsYXkgcmVsZWFzaW5nIG9mIElSUSByZXNvdXJjZSB0byBkcml2ZXIKKyAqIHVuYmluZGluZyB0aW1lLiBPdGhlcndpc2UgaXQgd2lsbCBicmVhayBQTSBzdWJzeXN0ZW0gYW5kIGRyaXZlcnMKKyAqIGxpa2UgeGVuLXBjaWJhY2sgZXRjLgorICovCitzdGF0aWMgaW50IHBjaV9pcnFfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCisJCQkgICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2RldihkYXRhKTsKKworCWlmIChhY3Rpb24gIT0gQlVTX05PVElGWV9VTkJPVU5EX0RSSVZFUikKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJaWYgKHBjaWJpb3NfZGlzYWJsZV9pcnEpCisJCXBjaWJpb3NfZGlzYWJsZV9pcnEoZGV2KTsKKworCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcGNpX2lycV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHBjaV9pcnFfbm90aWZpZXIsCisJLnByaW9yaXR5ID0gSU5UX01JTiwKK307CisKIGludCBfX2luaXQgcGNpYmlvc19pbml0KHZvaWQpCiB7CiAJaWYgKCFyYXdfcGNpX29wcykgewpAQCAtNTA5LDYgKzU1MCw5IEBACiAKIAlpZiAocGNpX2JmX3NvcnQgPj0gcGNpX2ZvcmNlX2JmKQogCQlwY2lfc29ydF9icmVhZHRoZmlyc3QoKTsKKworCWJ1c19yZWdpc3Rlcl9ub3RpZmllcigmcGNpX2J1c190eXBlLCAmcGNpX2lycV9uYik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjY3LDEyICs3MTEsNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHBjaWJpb3NfZGlzYWJsZV9kZXZpY2UgKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JaWYgKCFwY2lfZGV2X21zaV9lbmFibGVkKGRldikgJiYgcGNpYmlvc19kaXNhYmxlX2lycSkKLQkJcGNpYmlvc19kaXNhYmxlX2lycShkZXYpOwotfQotCiBpbnQgcGNpX2V4dF9jZmdfYXZhaWwodm9pZCkKIHsKIAlpZiAocmF3X3BjaV9leHRfb3BzKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2ludGVsX21pZF9wY2kuYyBiL2FyY2gveDg2L3BjaS9pbnRlbF9taWRfcGNpLmMKaW5kZXggNDRiOTI3MS4uZWZiODQ5MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2ludGVsX21pZF9wY2kuYworKysgYi9hcmNoL3g4Ni9wY2kvaW50ZWxfbWlkX3BjaS5jCkBAIC0yMzQsMTAgKzIzNCwxMCBAQAogCiBzdGF0aWMgdm9pZCBpbnRlbF9taWRfcGNpX2lycV9kaXNhYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JaWYgKCFtcF9zaG91bGRfa2VlcF9pcnEoJmRldi0+ZGV2KSAmJiBkZXYtPmlycV9tYW5hZ2VkICYmCi0JICAgIGRldi0+aXJxID4gMCkgeworCWlmIChkZXYtPmlycV9tYW5hZ2VkICYmIGRldi0+aXJxID4gMCkgewogCQltcF91bm1hcF9pcnEoZGV2LT5pcnEpOwogCQlkZXYtPmlycV9tYW5hZ2VkID0gMDsKKwkJZGV2LT5pcnEgPSAwOwogCX0KIH0KIApAQCAtMjkzLDcgKzI5Myw2IEBACiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDA4MDEsIG1yc3RfcG93ZXJfb2ZmX3VudXNlZF9kZXYpOwogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODA5LCBtcnN0X3Bvd2VyX29mZl91bnVzZWRfZGV2KTsKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MDgwQywgbXJzdF9wb3dlcl9vZmZfdW51c2VkX2Rldik7Ci1ERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDA4MTIsIG1yc3RfcG93ZXJfb2ZmX3VudXNlZF9kZXYpOwogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODE1LCBtcnN0X3Bvd2VyX29mZl91bnVzZWRfZGV2KTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pcnEuYyBiL2FyY2gveDg2L3BjaS9pcnEuYwppbmRleCA1ZGM2Y2E1Li5lNzFiM2RiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvaXJxLmMKKysrIGIvYXJjaC94ODYvcGNpL2lycS5jCkBAIC0xMjU2LDIyICsxMjU2LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotYm9vbCBtcF9zaG91bGRfa2VlcF9pcnEoc3RydWN0IGRldmljZSAqZGV2KQotewotCWlmIChkZXYtPnBvd2VyLmlzX3ByZXBhcmVkKQotCQlyZXR1cm4gdHJ1ZTsKLSNpZmRlZiBDT05GSUdfUE0KLQlpZiAoZGV2LT5wb3dlci5ydW50aW1lX3N0YXR1cyA9PSBSUE1fU1VTUEVORElORykKLQkJcmV0dXJuIHRydWU7Ci0jZW5kaWYKLQotCXJldHVybiBmYWxzZTsKLX0KLQogc3RhdGljIHZvaWQgcGlycV9kaXNhYmxlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCWlmIChpb19hcGljX2Fzc2lnbl9wY2lfaXJxcyAmJiAhbXBfc2hvdWxkX2tlZXBfaXJxKCZkZXYtPmRldikgJiYKLQkgICAgZGV2LT5pcnFfbWFuYWdlZCAmJiBkZXYtPmlycSkgeworCWlmIChpb19hcGljX2Fzc2lnbl9wY2lfaXJxcyAmJiBkZXYtPmlycV9tYW5hZ2VkICYmIGRldi0+aXJxKSB7CiAJCW1wX3VubWFwX2lycShkZXYtPmlycSk7CiAJCWRldi0+aXJxID0gMDsKIAkJZGV2LT5pcnFfbWFuYWdlZCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMgYi9hcmNoL3g4Ni9wY2kvbW1jb25maWctc2hhcmVkLmMKaW5kZXggMzI2MTk4YS4uZGQzMGI3ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL21tY29uZmlnLXNoYXJlZC5jCisrKyBiL2FyY2gveDg2L3BjaS9tbWNvbmZpZy1zaGFyZWQuYwpAQCAtMzk3LDEyICszOTcsMTIgQEAKIAogCXN0YXR1cyA9IGFjcGlfcmVzb3VyY2VfdG9fYWRkcmVzczY0KHJlcywgJmFkZHJlc3MpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSB8fAotCSAgIChhZGRyZXNzLmFkZHJlc3NfbGVuZ3RoIDw9IDApIHx8CisJICAgKGFkZHJlc3MuYWRkcmVzcy5hZGRyZXNzX2xlbmd0aCA8PSAwKSB8fAogCSAgIChhZGRyZXNzLnJlc291cmNlX3R5cGUgIT0gQUNQSV9NRU1PUllfUkFOR0UpKQogCQlyZXR1cm4gQUVfT0s7CiAKLQlpZiAoKG1jZmdfcmVzLT5zdGFydCA+PSBhZGRyZXNzLm1pbmltdW0pICYmCi0JICAgIChtY2ZnX3Jlcy0+ZW5kIDwgKGFkZHJlc3MubWluaW11bSArIGFkZHJlc3MuYWRkcmVzc19sZW5ndGgpKSkgeworCWlmICgobWNmZ19yZXMtPnN0YXJ0ID49IGFkZHJlc3MuYWRkcmVzcy5taW5pbXVtKSAmJgorCSAgICAobWNmZ19yZXMtPmVuZCA8IChhZGRyZXNzLmFkZHJlc3MubWluaW11bSArIGFkZHJlc3MuYWRkcmVzcy5hZGRyZXNzX2xlbmd0aCkpKSB7CiAJCW1jZmdfcmVzLT5mbGFncyA9IDE7CiAJCXJldHVybiBBRV9DVFJMX1RFUk1JTkFURTsKIAl9CkBAIC02MTAsNiArNjEwLDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfQUNQSV9BUEVJCitleHRlcm4gaW50ICgqYXJjaF9hcGVpX2ZpbHRlcl9hZGRyKShpbnQgKCpmdW5jKShfX3U2NCBzdGFydCwgX191NjQgc2l6ZSwKKwkJCQkgICAgIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTsKKworc3RhdGljIGludCBwY2lfbW1jZmdfZm9yX2VhY2hfcmVnaW9uKGludCAoKmZ1bmMpKF9fdTY0IHN0YXJ0LCBfX3U2NCBzaXplLAorCQkJCSAgICAgdm9pZCAqZGF0YSksIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBjaV9tbWNmZ19yZWdpb24gKmNmZzsKKwlpbnQgcmM7CisKKwlpZiAobGlzdF9lbXB0eSgmcGNpX21tY2ZnX2xpc3QpKQorCQlyZXR1cm4gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2ZnLCAmcGNpX21tY2ZnX2xpc3QsIGxpc3QpIHsKKwkJcmMgPSBmdW5jKGNmZy0+cmVzLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZjZmctPnJlcyksIGRhdGEpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZGVmaW5lIHNldF9hcGVpX2ZpbHRlcigpIChhcmNoX2FwZWlfZmlsdGVyX2FkZHIgPSBwY2lfbW1jZmdfZm9yX2VhY2hfcmVnaW9uKQorI2Vsc2UKKyNkZWZpbmUgc2V0X2FwZWlfZmlsdGVyKCkKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgX19wY2lfbW1jZmdfaW5pdChpbnQgZWFybHkpCiB7CiAJcGNpX21tY2ZnX3JlamVjdF9icm9rZW4oZWFybHkpOwpAQCAtNjQ0LDYgKzY3MCw4IEBACiAJCWVsc2UKIAkJCWFjcGlfc2ZpX3RhYmxlX3BhcnNlKEFDUElfU0lHX01DRkcsIHBjaV9wYXJzZV9tY2ZnKTsKIAkJX19wY2lfbW1jZmdfaW5pdCgxKTsKKworCQlzZXRfYXBlaV9maWx0ZXIoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS94ZW4uYyBiL2FyY2gveDg2L3BjaS94ZW4uYwppbmRleCA5MDk4ZDg4Li5kMjJmNGI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kveGVuLmMKKysrIGIvYXJjaC94ODYvcGNpL3hlbi5jCkBAIC0yOTgsMTIgKzI5OCwxNiBAQAogCQkJbWFwX2lycS5lbnRyeV9uciA9IG52ZWM7CiAJCX0gZWxzZSBpZiAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSVgpIHsKIAkJCWludCBwb3M7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQkJdTMyIHRhYmxlX29mZnNldCwgYmlyOwogCiAJCQlwb3MgPSBkZXYtPm1zaXhfY2FwOwogCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX01TSVhfVEFCTEUsCiAJCQkJCSAgICAgICZ0YWJsZV9vZmZzZXQpOwogCQkJYmlyID0gKHU4KSh0YWJsZV9vZmZzZXQgJiBQQ0lfTVNJWF9UQUJMRV9CSVIpOworCQkJZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCBiaXIpOworCQkJaWYgKCFmbGFncyB8fCAoZmxhZ3MgJiBJT1JFU09VUkNFX1VOU0VUKSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQkJbWFwX2lycS50YWJsZV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgYmlyKTsKIAkJCW1hcF9pcnEuZW50cnlfbnIgPSBtc2lkZXNjLT5tc2lfYXR0cmliLmVudHJ5X25yOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvY2FsY19ydW5fc2l6ZS5wbCBiL2FyY2gveDg2L3Rvb2xzL2NhbGNfcnVuX3NpemUucGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMjEwYmEuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvdG9vbHMvY2FsY19ydW5fc2l6ZS5wbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLSMhL3Vzci9iaW4vcGVybAotIwotIyBDYWxjdWxhdGUgdGhlIGFtb3VudCBvZiBzcGFjZSBuZWVkZWQgdG8gcnVuIHRoZSBrZXJuZWwsIGluY2x1ZGluZyByb29tIGZvcgotIyB0aGUgLmJzcyBhbmQgLmJyayBzZWN0aW9ucy4KLSMKLSMgVXNhZ2U6Ci0jIG9iamR1bXAgLWggYS5vdXQgfCBwZXJsIGNhbGNfcnVuX3NpemUucGwKLXVzZSBzdHJpY3Q7Ci0KLW15ICRtZW1fc2l6ZSA9IDA7Ci1teSAkZmlsZV9vZmZzZXQgPSAwOwotCi1teSAkc2VjdGlvbnM9IiAqWzAtOV0rIFwuKD86YnNzfGJyaykgKyI7Ci13aGlsZSAoPD4pIHsKLQlpZiAoL14kc2VjdGlvbnMoWzAtOWEtZl0rKSArKD86WzAtOWEtZl0rICspezJ9KFswLTlhLWZdKykvKSB7Ci0JCW15ICRzaXplID0gaGV4KCQxKTsKLQkJbXkgJG9mZnNldCA9IGhleCgkMik7Ci0JCSRtZW1fc2l6ZSArPSAkc2l6ZTsKLQkJaWYgKCRmaWxlX29mZnNldCA9PSAwKSB7Ci0JCQkkZmlsZV9vZmZzZXQgPSAkb2Zmc2V0OwotCQl9IGVsc2lmICgkZmlsZV9vZmZzZXQgIT0gJG9mZnNldCkgewotCQkJIyBCRkQgbGlua2VyIHNob3dzIHRoZSBzYW1lIGZpbGUgb2Zmc2V0IGluIEVMRi4KLQkJCSMgR29sZCBsaW5rZXIgc2hvd3MgdGhlbSBhcyBjb25zZWN1dGl2ZS4KLQkJCW5leHQgaWYgKCRmaWxlX29mZnNldCArICRtZW1fc2l6ZSA9PSAkb2Zmc2V0ICsgJHNpemUpOwotCi0JCQlwcmludGYgU1RERVJSICJmaWxlX29mZnNldDogMHglbHhcbiIsICRmaWxlX29mZnNldDsKLQkJCXByaW50ZiBTVERFUlIgIm1lbV9zaXplOiAweCVseFxuIiwgJG1lbV9zaXplOwotCQkJcHJpbnRmIFNUREVSUiAib2Zmc2V0OiAweCVseFxuIiwgJG9mZnNldDsKLQkJCXByaW50ZiBTVERFUlIgInNpemU6IDB4JWx4XG4iLCAkc2l6ZTsKLQotCQkJZGllICIuYnNzIGFuZCAuYnJrIGFyZSBub24tY29udGlndW91c1xuIjsKLQkJfQotCX0KLX0KLQotaWYgKCRmaWxlX29mZnNldCA9PSAwKSB7Ci0JZGllICJOZXZlciBmb3VuZCAuYnNzIG9yIC5icmsgZmlsZSBvZmZzZXRcbiI7Ci19Ci1wcmludGYoIiVkXG4iLCAkbWVtX3NpemUgKyAkZmlsZV9vZmZzZXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdG9vbHMvY2FsY19ydW5fc2l6ZS5zaCBiL2FyY2gveDg2L3Rvb2xzL2NhbGNfcnVuX3NpemUuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0YzE3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L3Rvb2xzL2NhbGNfcnVuX3NpemUuc2gKQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisjCisjIENhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIHNwYWNlIG5lZWRlZCB0byBydW4gdGhlIGtlcm5lbCwgaW5jbHVkaW5nIHJvb20gZm9yCisjIHRoZSAuYnNzIGFuZCAuYnJrIHNlY3Rpb25zLgorIworIyBVc2FnZToKKyMgb2JqZHVtcCAtaCBhLm91dCB8IHNoIGNhbGNfcnVuX3NpemUuc2gKKworTlVNPSdcKFswLTlhLWZBLUZdKlsgXHRdKlwpJworT1VUPSQoc2VkIC1uICdzL15bIFx0MC05XSouYltzcl1bc2tdWyBcdF0qJyIkTlVNJE5VTSROVU0kTlVNIicuKi9cMVw0L3AnKQoraWYgWyAteiAiJE9VVCIgXSA7IHRoZW4KKwllY2hvICJOZXZlciBmb3VuZCAuYnNzIG9yIC5icmsgZmlsZSBvZmZzZXQiID4mMgorCWV4aXQgMQorZmkKKworT1VUPSQoZWNobyAke09VVCMgfSkKK3NpemVBPSQocHJpbnRmICIlZCIgMHgke09VVCUlICp9KQorT1VUPSR7T1VUIyogfQorb2Zmc2V0QT0kKHByaW50ZiAiJWQiIDB4JHtPVVQlJSAqfSkKK09VVD0ke09VVCMqIH0KK3NpemVCPSQocHJpbnRmICIlZCIgMHgke09VVCUlICp9KQorT1VUPSR7T1VUIyogfQorb2Zmc2V0Qj0kKHByaW50ZiAiJWQiIDB4JHtPVVQlJSAqfSkKKworcnVuX3NpemU9JCgoICRvZmZzZXRBICsgJHNpemVBICsgJHNpemVCICkpCisKKyMgQkZEIGxpbmtlciBzaG93cyB0aGUgc2FtZSBmaWxlIG9mZnNldCBpbiBFTEYuCitpZiBbICIkb2Zmc2V0QSIgLW5lICIkb2Zmc2V0QiIgXSA7IHRoZW4KKwkjIEdvbGQgbGlua2VyIHNob3dzIHRoZW0gYXMgY29uc2VjdXRpdmUuCisJZW5kQj0kKCggJG9mZnNldEIgKyAkc2l6ZUIgKSkKKwlpZiBbICIkZW5kQiIgIT0gIiRydW5fc2l6ZSIgXSA7IHRoZW4KKwkJcHJpbnRmICJzaXplQTogMHgleFxuIiAkc2l6ZUEgPiYyCisJCXByaW50ZiAib2Zmc2V0QTogMHgleFxuIiAkb2Zmc2V0QSA+JjIKKwkJcHJpbnRmICJzaXplQjogMHgleFxuIiAkc2l6ZUIgPiYyCisJCXByaW50ZiAib2Zmc2V0QjogMHgleFxuIiAkb2Zmc2V0QiA+JjIKKwkJZWNobyAiLmJzcyBhbmQgLmJyayBhcmUgbm9uLWNvbnRpZ3VvdXMiID4mMgorCQlleGl0IDEKKwlmaQorZmkKKworcHJpbnRmICIlZFxuIiAkcnVuX3NpemUKK2V4aXQgMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvdmRzby9NYWtlZmlsZSBiL2FyY2gveDg2L3Zkc28vTWFrZWZpbGUKaW5kZXggNWE0YWZmZS4uMDkyOTdjOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvdmRzby9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni92ZHNvL01ha2VmaWxlCkBAIC0yMDUsNCArMjA1LDQgQEAKIFBIT05ZICs9IHZkc29faW5zdGFsbCAkKHZkc29faW1nX2luc3R0YXJnZXRzKQogdmRzb19pbnN0YWxsOiAkKHZkc29faW1nX2luc3R0YXJnZXRzKSBGT1JDRQogCi1jbGVhbi1maWxlcyA6PSB2ZHNvMzItc3lzY2FsbCogdmRzbzMyLXN5c2VudGVyKiB2ZHNvMzItaW50ODAqCitjbGVhbi1maWxlcyA6PSB2ZHNvMzItc3lzY2FsbCogdmRzbzMyLXN5c2VudGVyKiB2ZHNvMzItaW50ODAqIHZkc282NCoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2L3hlbi9tbXUuYwppbmRleCA1YzFmOWFjLi5hZGNhOWUyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC0xNDg5LDcgKzE0ODksNyBAQAogCW5hdGl2ZV9zZXRfcHRlKHB0ZXAsIHB0ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBpbl9wYWdldGFibGVfcGZuKHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBwZm4pCitzdGF0aWMgdm9pZCBfX2luaXQgcGluX3BhZ2V0YWJsZV9wZm4odW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIHBmbikKIHsKIAlzdHJ1Y3QgbW11ZXh0X29wIG9wOwogCW9wLmNtZCA9IGNtZDsKQEAgLTE2NTcsNyArMTY1Nyw3IEBACiAgKiBMaWtlIF9fdmEoKSwgYnV0IHJldHVybnMgYWRkcmVzcyBpbiB0aGUga2VybmVsIG1hcHBpbmcgKHdoaWNoIGlzCiAgKiBhbGwgd2UgaGF2ZSB1bnRpbCB0aGUgcGh5c2ljYWwgbWVtb3J5IG1hcHBpbmcgaGFzIGJlZW4gc2V0IHVwLgogICovCi1zdGF0aWMgdm9pZCAqX19rYShwaHlzX2FkZHJfdCBwYWRkcikKK3N0YXRpYyB2b2lkICogX19pbml0IF9fa2EocGh5c19hZGRyX3QgcGFkZHIpCiB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCXJldHVybiAodm9pZCAqKShwYWRkciArIF9fU1RBUlRfS0VSTkVMX21hcCk7CkBAIC0xNjY3LDcgKzE2NjcsNyBAQAogfQogCiAvKiBDb252ZXJ0IGEgbWFjaGluZSBhZGRyZXNzIHRvIHBoeXNpY2FsIGFkZHJlc3MgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG0ycChwaHlzX2FkZHJfdCBtYWRkcikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBtMnAocGh5c19hZGRyX3QgbWFkZHIpCiB7CiAJcGh5c19hZGRyX3QgcGFkZHI7CiAKQEAgLTE2NzgsMTMgKzE2NzgsMTQgQEAKIH0KIAogLyogQ29udmVydCBhIG1hY2hpbmUgYWRkcmVzcyB0byBrZXJuZWwgdmlydHVhbCAqLwotc3RhdGljIHZvaWQgKm0ydihwaHlzX2FkZHJfdCBtYWRkcikKK3N0YXRpYyB2b2lkICogX19pbml0IG0ydihwaHlzX2FkZHJfdCBtYWRkcikKIHsKIAlyZXR1cm4gX19rYShtMnAobWFkZHIpKTsKIH0KIAogLyogU2V0IHRoZSBwYWdlIHBlcm1pc3Npb25zIG9uIGFuIGlkZW50aXR5LW1hcHBlZCBwYWdlcyAqLwotc3RhdGljIHZvaWQgc2V0X3BhZ2VfcHJvdF9mbGFncyh2b2lkICphZGRyLCBwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzKQorc3RhdGljIHZvaWQgX19pbml0IHNldF9wYWdlX3Byb3RfZmxhZ3Modm9pZCAqYWRkciwgcGdwcm90X3QgcHJvdCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAl1bnNpZ25lZCBsb25nIHBmbiA9IF9fcGEoYWRkcikgPj4gUEFHRV9TSElGVDsKIAlwdGVfdCBwdGUgPSBwZm5fcHRlKHBmbiwgcHJvdCk7CkBAIC0xNjk2LDcgKzE2OTcsNyBAQAogCWlmIChIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKCh1bnNpZ25lZCBsb25nKWFkZHIsIHB0ZSwgZmxhZ3MpKQogCQlCVUcoKTsKIH0KLXN0YXRpYyB2b2lkIHNldF9wYWdlX3Byb3Qodm9pZCAqYWRkciwgcGdwcm90X3QgcHJvdCkKK3N0YXRpYyB2b2lkIF9faW5pdCBzZXRfcGFnZV9wcm90KHZvaWQgKmFkZHIsIHBncHJvdF90IHByb3QpCiB7CiAJcmV0dXJuIHNldF9wYWdlX3Byb3RfZmxhZ3MoYWRkciwgcHJvdCwgVVZNRl9OT05FKTsKIH0KQEAgLTE3MzMsMTAgKzE3MzQsOCBAQAogCQlmb3IgKHB0ZWlkeCA9IDA7IHB0ZWlkeCA8IFBUUlNfUEVSX1BURTsgcHRlaWR4KyssIHBmbisrKSB7CiAJCQlwdGVfdCBwdGU7CiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiAJCQlpZiAocGZuID4gbWF4X3Bmbl9tYXBwZWQpCiAJCQkJbWF4X3Bmbl9tYXBwZWQgPSBwZm47Ci0jZW5kaWYKIAogCQkJaWYgKCFwdGVfbm9uZShwdGVfcGFnZVtwdGVpZHhdKSkKIAkJCQljb250aW51ZTsKQEAgLTE3NjksNyArMTc2OCw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci1zdGF0aWMgdm9pZCBjb252ZXJ0X3Bmbl9tZm4odm9pZCAqdikKK3N0YXRpYyB2b2lkIF9faW5pdCBjb252ZXJ0X3Bmbl9tZm4odm9pZCAqdikKIHsKIAlwdGVfdCAqcHRlID0gdjsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9wMm0uYyBiL2FyY2gveDg2L3hlbi9wMm0uYwppbmRleCA3MGZiNTA3Li5mMThmZDFkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vcDJtLmMKKysrIGIvYXJjaC94ODYveGVuL3AybS5jCkBAIC04NCw4ICs4NCw2IEBACiAKICNkZWZpbmUgUE1EU19QRVJfTUlEX1BBR0UJKFAyTV9NSURfUEVSX1BBR0UgLyBQVFJTX1BFUl9QVEUpCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtMnBfb3ZlcnJpZGVfaW5pdCh2b2lkKTsKLQogdW5zaWduZWQgbG9uZyAqeGVuX3AybV9hZGRyIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fcDJtX2FkZHIpOwogdW5zaWduZWQgbG9uZyB4ZW5fcDJtX3NpemUgX19yZWFkX21vc3RseTsKQEAgLTQwMiw4ICs0MDAsNiBAQAogCXhlbl9wMm1fc2l6ZSA9IHhlbl9tYXhfcDJtX3BmbjsKIAogCXhlbl9pbnZfZXh0cmFfbWVtKCk7Ci0KLQltMnBfb3ZlcnJpZGVfaW5pdCgpOwogfQogCiB1bnNpZ25lZCBsb25nIGdldF9waHlzX3RvX21hY2hpbmUodW5zaWduZWQgbG9uZyBwZm4pCkBAIC02NTIsMTAwICs2NDgsMjEgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotI2RlZmluZSBNMlBfT1ZFUlJJREVfSEFTSF9TSElGVAkxMAotI2RlZmluZSBNMlBfT1ZFUlJJREVfSEFTSAkoMSA8PCBNMlBfT1ZFUlJJREVfSEFTSF9TSElGVCkKLQotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKm0ycF9vdmVycmlkZXM7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKG0ycF9vdmVycmlkZV9sb2NrKTsKLQotc3RhdGljIHZvaWQgX19pbml0IG0ycF9vdmVycmlkZV9pbml0KHZvaWQpCi17Ci0JdW5zaWduZWQgaTsKLQotCW0ycF9vdmVycmlkZXMgPSBhbGxvY19ib290bWVtX2FsaWduKAotCQkJCXNpemVvZigqbTJwX292ZXJyaWRlcykgKiBNMlBfT1ZFUlJJREVfSEFTSCwKLQkJCQlzaXplb2YodW5zaWduZWQgbG9uZykpOwotCi0JZm9yIChpID0gMDsgaSA8IE0yUF9PVkVSUklERV9IQVNIOyBpKyspCi0JCUlOSVRfTElTVF9IRUFEKCZtMnBfb3ZlcnJpZGVzW2ldKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbWZuX2hhc2godW5zaWduZWQgbG9uZyBtZm4pCi17Ci0JcmV0dXJuIGhhc2hfbG9uZyhtZm4sIE0yUF9PVkVSUklERV9IQVNIX1NISUZUKTsKLX0KLQotLyogQWRkIGFuIE1GTiBvdmVycmlkZSBmb3IgYSBwYXJ0aWN1bGFyIHBhZ2UgKi8KLXN0YXRpYyBpbnQgbTJwX2FkZF9vdmVycmlkZSh1bnNpZ25lZCBsb25nIG1mbiwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkgICAgc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmICprbWFwX29wKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0JdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihhZGRyZXNzKTsKLQl1bnNpZ25lZCBsZXZlbDsKLQlwdGVfdCAqcHRlcCA9IE5VTEw7Ci0KLQlwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKLQlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7Ci0JCWFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylfX3ZhKHBmbiA8PCBQQUdFX1NISUZUKTsKLQkJcHRlcCA9IGxvb2t1cF9hZGRyZXNzKGFkZHJlc3MsICZsZXZlbCk7Ci0JCWlmIChXQVJOKHB0ZXAgPT0gTlVMTCB8fCBsZXZlbCAhPSBQR19MRVZFTF80SywKLQkJCSAibTJwX2FkZF9vdmVycmlkZTogcGZuICVseCBub3QgbWFwcGVkIiwgcGZuKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChrbWFwX29wICE9IE5VTEwpIHsKLQkJaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkgewotCQkJc3RydWN0IG11bHRpY2FsbF9zcGFjZSBtY3MgPQotCQkJCXhlbl9tY19lbnRyeShzaXplb2YoKmttYXBfb3ApKTsKLQotCQkJTVVMVElfZ3JhbnRfdGFibGVfb3AobWNzLm1jLAotCQkJCQlHTlRUQUJPUF9tYXBfZ3JhbnRfcmVmLCBrbWFwX29wLCAxKTsKLQotCQkJeGVuX21jX2lzc3VlKFBBUkFWSVJUX0xBWllfTU1VKTsKLQkJfQotCX0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbTJwX292ZXJyaWRlX2xvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAgJm0ycF9vdmVycmlkZXNbbWZuX2hhc2gobWZuKV0pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0ycF9vdmVycmlkZV9sb2NrLCBmbGFncyk7Ci0KLQkvKiBwMm0obTJwKG1mbikpID09IG1mbjogdGhlIG1mbiBpcyBhbHJlYWR5IHByZXNlbnQgc29tZXdoZXJlIGluCi0JICogdGhpcyBkb21haW4uIFNldCB0aGUgRk9SRUlHTl9GUkFNRV9CSVQgaW4gdGhlIHAybSBmb3IgdGhlIG90aGVyCi0JICogcGZuIHNvIHRoYXQgdGhlIGZvbGxvd2luZyBtZm5fdG9fcGZuKG1mbikgY2FsbHMgd2lsbCByZXR1cm4gdGhlCi0JICogcGZuIGZyb20gdGhlIG0ycF9vdmVycmlkZSAodGhlIGJhY2tlbmQgcGZuKSBpbnN0ZWFkLgotCSAqIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIHRoZSBwYWdlcyBzaGFyZWQgYnkgdGhlIGZyb250ZW5kCi0JICogKHhlbi1ibGtmcm9udCkgY2FuIGJlIGFscmVhZHkgbG9ja2VkIChsb2NrX3BhZ2UsIGNhbGxlZCBieQotCSAqIGRvX3JlYWRfY2FjaGVfcGFnZSk7IHdoZW4gdGhlIHVzZXJzcGFjZSBiYWNrZW5kIHRyaWVzIHRvIHVzZSB0aGVtCi0JICogd2l0aCBkaXJlY3RfSU8sIG1mbl90b19wZm4gcmV0dXJucyB0aGUgcGZuIG9mIHRoZSBmcm9udGVuZCwgc28KLQkgKiBkb19ibG9ja2Rldl9kaXJlY3RfSU8gaXMgZ29pbmcgdG8gdHJ5IHRvIGxvY2sgdGhlIHNhbWUgcGFnZXMKLQkgKiBhZ2FpbiByZXN1bHRpbmcgaW4gYSBkZWFkbG9jay4KLQkgKiBBcyBhIHNpZGUgZWZmZWN0IGdldF91c2VyX3BhZ2VzX2Zhc3QgbWlnaHQgbm90IGJlIHNhZmUgb24gdGhlCi0JICogZnJvbnRlbmQgcGFnZXMgd2hpbGUgdGhleSBhcmUgYmVpbmcgc2hhcmVkIHdpdGggdGhlIGJhY2tlbmQsCi0JICogYmVjYXVzZSBtZm5fdG9fcGZuICh0aGF0IGVuZHMgdXAgYmVpbmcgY2FsbGVkIGJ5IEdVUEYpIHdpbGwKLQkgKiByZXR1cm4gdGhlIGJhY2tlbmQgcGZuIHJhdGhlciB0aGFuIHRoZSBmcm9udGVuZCBwZm4uICovCi0JcGZuID0gbWZuX3RvX3Bmbl9ub19vdmVycmlkZXMobWZuKTsKLQlpZiAoX19wZm5fdG9fbWZuKHBmbikgPT0gbWZuKQotCQlzZXRfcGh5c190b19tYWNoaW5lKHBmbiwgRk9SRUlHTl9GUkFNRShtZm4pKTsKLQotCXJldHVybiAwOwotfQotCiBpbnQgc2V0X2ZvcmVpZ25fcDJtX21hcHBpbmcoc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmICptYXBfb3BzLAogCQkJICAgIHN0cnVjdCBnbnR0YWJfbWFwX2dyYW50X3JlZiAqa21hcF9vcHMsCiAJCQkgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGNvdW50KQogewogCWludCBpLCByZXQgPSAwOwotCWJvb2wgbGF6eSA9IGZhbHNlOwogCXB0ZV90ICpwdGU7CiAKIAlpZiAoeGVuX2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCkpCiAJCXJldHVybiAwOwogCi0JaWYgKGttYXBfb3BzICYmCi0JICAgICFpbl9pbnRlcnJ1cHQoKSAmJgotCSAgICBwYXJhdmlydF9nZXRfbGF6eV9tb2RlKCkgPT0gUEFSQVZJUlRfTEFaWV9OT05FKSB7Ci0JCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOwotCQlsYXp5ID0gdHJ1ZTsKKwlpZiAoa21hcF9vcHMpIHsKKwkJcmV0ID0gSFlQRVJWSVNPUl9ncmFudF90YWJsZV9vcChHTlRUQUJPUF9tYXBfZ3JhbnRfcmVmLAorCQkJCQkJa21hcF9vcHMsIGNvdW50KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CkBAIC03NjQsMTcwICs2ODEsMjggQEAKIAkJfQogCQlwZm4gPSBwYWdlX3RvX3BmbihwYWdlc1tpXSk7CiAKLQkJV0FSTl9PTihQYWdlUHJpdmF0ZShwYWdlc1tpXSkpOwotCQlTZXRQYWdlUHJpdmF0ZShwYWdlc1tpXSk7Ci0JCXNldF9wYWdlX3ByaXZhdGUocGFnZXNbaV0sIG1mbik7Ci0JCXBhZ2VzW2ldLT5pbmRleCA9IHBmbl90b19tZm4ocGZuKTsKKwkJV0FSTihwZm5fdG9fbWZuKHBmbikgIT0gSU5WQUxJRF9QMk1fRU5UUlksICJwYWdlIG11c3QgYmUgYmFsbG9vbmVkIik7CiAKIAkJaWYgKHVubGlrZWx5KCFzZXRfcGh5c190b19tYWNoaW5lKHBmbiwgRk9SRUlHTl9GUkFNRShtZm4pKSkpIHsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKIAkJfQotCi0JCWlmIChrbWFwX29wcykgewotCQkJcmV0ID0gbTJwX2FkZF9vdmVycmlkZShtZm4sIHBhZ2VzW2ldLCAma21hcF9vcHNbaV0pOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIG91dDsKLQkJfQogCX0KIAogb3V0OgotCWlmIChsYXp5KQotCQlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKLQogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzZXRfZm9yZWlnbl9wMm1fbWFwcGluZyk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGFnZSAqbTJwX2ZpbmRfb3ZlcnJpZGUodW5zaWduZWQgbG9uZyBtZm4pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpidWNrZXQ7Ci0Jc3RydWN0IHBhZ2UgKnAsICpyZXQ7Ci0KLQlpZiAodW5saWtlbHkoIW0ycF9vdmVycmlkZXMpKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldCA9IE5VTEw7Ci0JYnVja2V0ID0gJm0ycF9vdmVycmlkZXNbbWZuX2hhc2gobWZuKV07Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbTJwX292ZXJyaWRlX2xvY2ssIGZsYWdzKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgYnVja2V0LCBscnUpIHsKLQkJaWYgKHBhZ2VfcHJpdmF0ZShwKSA9PSBtZm4pIHsKLQkJCXJldCA9IHA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0ycF9vdmVycmlkZV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG0ycF9yZW1vdmVfb3ZlcnJpZGUoc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkgICAgICAgc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmICprbWFwX29wLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0JdW5zaWduZWQgbG9uZyB1bmluaXRpYWxpemVkX3ZhcihhZGRyZXNzKTsKLQl1bnNpZ25lZCBsZXZlbDsKLQlwdGVfdCAqcHRlcCA9IE5VTEw7Ci0KLQlwZm4gPSBwYWdlX3RvX3BmbihwYWdlKTsKLQotCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpIHsKLQkJYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKV9fdmEocGZuIDw8IFBBR0VfU0hJRlQpOwotCQlwdGVwID0gbG9va3VwX2FkZHJlc3MoYWRkcmVzcywgJmxldmVsKTsKLQotCQlpZiAoV0FSTihwdGVwID09IE5VTEwgfHwgbGV2ZWwgIT0gUEdfTEVWRUxfNEssCi0JCQkgIm0ycF9yZW1vdmVfb3ZlcnJpZGU6IHBmbiAlbHggbm90IG1hcHBlZCIsIHBmbikpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbTJwX292ZXJyaWRlX2xvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtMnBfb3ZlcnJpZGVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGttYXBfb3AgIT0gTlVMTCkgewotCQlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7Ci0JCQlzdHJ1Y3QgbXVsdGljYWxsX3NwYWNlIG1jczsKLQkJCXN0cnVjdCBnbnR0YWJfdW5tYXBfYW5kX3JlcGxhY2UgKnVubWFwX29wOwotCQkJc3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZSA9IGdldF9iYWxsb29uX3NjcmF0Y2hfcGFnZSgpOwotCQkJdW5zaWduZWQgbG9uZyBzY3JhdGNoX3BhZ2VfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKQotCQkJCV9fdmEocGFnZV90b19wZm4oc2NyYXRjaF9wYWdlKSA8PCBQQUdFX1NISUZUKTsKLQotCQkJLyoKLQkJCSAqIEl0IG1pZ2h0IGJlIHRoYXQgd2UgcXVldWVkIGFsbCB0aGUgbTJwIGdyYW50IHRhYmxlCi0JCQkgKiBoeXBlcmNhbGxzIGluIGEgbXVsdGljYWxsLCB0aGVuIG0ycF9yZW1vdmVfb3ZlcnJpZGUKLQkJCSAqIGdldCBjYWxsZWQgYmVmb3JlIHRoZSBtdWx0aWNhbGwgaGFzIGFjdHVhbGx5IGJlZW4KLQkJCSAqIGlzc3VlZC4gSW4gdGhpcyBjYXNlIGhhbmRsZSBpcyBnb2luZyB0byAtMSBiZWNhdXNlCi0JCQkgKiBpdCBoYXNuJ3QgYmVlbiBtb2RpZmllZCB5ZXQuCi0JCQkgKi8KLQkJCWlmIChrbWFwX29wLT5oYW5kbGUgPT0gLTEpCi0JCQkJeGVuX21jX2ZsdXNoKCk7Ci0JCQkvKgotCQkJICogTm93IGlmIGttYXBfb3AtPmhhbmRsZSBpcyBuZWdhdGl2ZSBpdCBtZWFucyB0aGF0IHRoZQotCQkJICogaHlwZXJjYWxsIGFjdHVhbGx5IHJldHVybmVkIGFuIGVycm9yLgotCQkJICovCi0JCQlpZiAoa21hcF9vcC0+aGFuZGxlID09IEdOVFNUX2dlbmVyYWxfZXJyb3IpIHsKLQkJCQlwcl93YXJuKCJtMnBfcmVtb3ZlX292ZXJyaWRlOiBwZm4gJWx4IG1mbiAlbHgsIGZhaWxlZCB0byBtb2RpZnkga2VybmVsIG1hcHBpbmdzIiwKLQkJCQkJcGZuLCBtZm4pOwotCQkJCXB1dF9iYWxsb29uX3NjcmF0Y2hfcGFnZSgpOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQotCQkJeGVuX21jX2JhdGNoKCk7Ci0KLQkJCW1jcyA9IF9feGVuX21jX2VudHJ5KAotCQkJCXNpemVvZihzdHJ1Y3QgZ250dGFiX3VubWFwX2FuZF9yZXBsYWNlKSk7Ci0JCQl1bm1hcF9vcCA9IG1jcy5hcmdzOwotCQkJdW5tYXBfb3AtPmhvc3RfYWRkciA9IGttYXBfb3AtPmhvc3RfYWRkcjsKLQkJCXVubWFwX29wLT5uZXdfYWRkciA9IHNjcmF0Y2hfcGFnZV9hZGRyZXNzOwotCQkJdW5tYXBfb3AtPmhhbmRsZSA9IGttYXBfb3AtPmhhbmRsZTsKLQotCQkJTVVMVElfZ3JhbnRfdGFibGVfb3AobWNzLm1jLAotCQkJCUdOVFRBQk9QX3VubWFwX2FuZF9yZXBsYWNlLCB1bm1hcF9vcCwgMSk7Ci0KLQkJCW1jcyA9IF9feGVuX21jX2VudHJ5KDApOwotCQkJTVVMVElfdXBkYXRlX3ZhX21hcHBpbmcobWNzLm1jLCBzY3JhdGNoX3BhZ2VfYWRkcmVzcywKLQkJCQkJcGZuX3B0ZShwYWdlX3RvX3BmbihzY3JhdGNoX3BhZ2UpLAotCQkJCQlQQUdFX0tFUk5FTF9STyksIDApOwotCi0JCQl4ZW5fbWNfaXNzdWUoUEFSQVZJUlRfTEFaWV9NTVUpOwotCi0JCQlrbWFwX29wLT5ob3N0X2FkZHIgPSAwOwotCQkJcHV0X2JhbGxvb25fc2NyYXRjaF9wYWdlKCk7Ci0JCX0KLQl9Ci0KLQkvKiBwMm0obTJwKG1mbikpID09IEZPUkVJR05fRlJBTUUobWZuKTogdGhlIG1mbiBpcyBhbHJlYWR5IHByZXNlbnQKLQkgKiBzb21ld2hlcmUgaW4gdGhpcyBkb21haW4sIGV2ZW4gYmVmb3JlIGJlaW5nIGFkZGVkIHRvIHRoZQotCSAqIG0ycF9vdmVycmlkZSAoc2VlIGNvbW1lbnQgYWJvdmUgaW4gbTJwX2FkZF9vdmVycmlkZSkuCi0JICogSWYgdGhlcmUgYXJlIG5vIG90aGVyIGVudHJpZXMgaW4gdGhlIG0ycF9vdmVycmlkZSBjb3JyZXNwb25kaW5nCi0JICogdG8gdGhpcyBtZm4sIHRoZW4gcmVtb3ZlIHRoZSBGT1JFSUdOX0ZSQU1FX0JJVCBmcm9tIHRoZSBwMm0gZm9yCi0JICogdGhlIG9yaWdpbmFsIHBmbiAodGhlIG9uZSBzaGFyZWQgYnkgdGhlIGZyb250ZW5kKTogdGhlIGJhY2tlbmQKLQkgKiBjYW5ub3QgZG8gYW55IElPIG9uIHRoaXMgcGFnZSBhbnltb3JlIGJlY2F1c2UgaXQgaGFzIGJlZW4KLQkgKiB1bnNoYXJlZC4gUmVtb3ZpbmcgdGhlIEZPUkVJR05fRlJBTUVfQklUIGZyb20gdGhlIHAybSBlbnRyeSBvZgotCSAqIHRoZSBvcmlnaW5hbCBwZm4gY2F1c2VzIG1mbl90b19wZm4obWZuKSB0byByZXR1cm4gdGhlIGZyb250ZW5kCi0JICogcGZuIGFnYWluLiAqLwotCW1mbiAmPSB+Rk9SRUlHTl9GUkFNRV9CSVQ7Ci0JcGZuID0gbWZuX3RvX3Bmbl9ub19vdmVycmlkZXMobWZuKTsKLQlpZiAoX19wZm5fdG9fbWZuKHBmbikgPT0gRk9SRUlHTl9GUkFNRShtZm4pICYmCi0JCQltMnBfZmluZF9vdmVycmlkZShtZm4pID09IE5VTEwpCi0JCXNldF9waHlzX3RvX21hY2hpbmUocGZuLCBtZm4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KIGludCBjbGVhcl9mb3JlaWduX3AybV9tYXBwaW5nKHN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmICp1bm1hcF9vcHMsCi0JCQkgICAgICBzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYgKmttYXBfb3BzLAorCQkJICAgICAgc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgKmt1bm1hcF9vcHMsCiAJCQkgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAJaW50IGksIHJldCA9IDA7Ci0JYm9vbCBsYXp5ID0gZmFsc2U7CiAKIAlpZiAoeGVuX2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCkpCiAJCXJldHVybiAwOwogCi0JaWYgKGttYXBfb3BzICYmCi0JICAgICFpbl9pbnRlcnJ1cHQoKSAmJgotCSAgICBwYXJhdmlydF9nZXRfbGF6eV9tb2RlKCkgPT0gUEFSQVZJUlRfTEFaWV9OT05FKSB7Ci0JCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOwotCQlsYXp5ID0gdHJ1ZTsKLQl9Ci0KIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQl1bnNpZ25lZCBsb25nIG1mbiA9IF9fcGZuX3RvX21mbihwYWdlX3RvX3BmbihwYWdlc1tpXSkpOwogCQl1bnNpZ25lZCBsb25nIHBmbiA9IHBhZ2VfdG9fcGZuKHBhZ2VzW2ldKTsKQEAgLTkzNywzNiArNzEyLDE2IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCXNldF9wYWdlX3ByaXZhdGUocGFnZXNbaV0sIElOVkFMSURfUDJNX0VOVFJZKTsKLQkJV0FSTl9PTighUGFnZVByaXZhdGUocGFnZXNbaV0pKTsKLQkJQ2xlYXJQYWdlUHJpdmF0ZShwYWdlc1tpXSk7Ci0JCXNldF9waHlzX3RvX21hY2hpbmUocGZuLCBwYWdlc1tpXS0+aW5kZXgpOwotCi0JCWlmIChrbWFwX29wcykKLQkJCXJldCA9IG0ycF9yZW1vdmVfb3ZlcnJpZGUocGFnZXNbaV0sICZrbWFwX29wc1tpXSwgbWZuKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OworCQlzZXRfcGh5c190b19tYWNoaW5lKHBmbiwgSU5WQUxJRF9QMk1fRU5UUlkpOwogCX0KLQorCWlmIChrdW5tYXBfb3BzKQorCQlyZXQgPSBIWVBFUlZJU09SX2dyYW50X3RhYmxlX29wKEdOVFRBQk9QX3VubWFwX2dyYW50X3JlZiwKKwkJCQkJCWt1bm1hcF9vcHMsIGNvdW50KTsKIG91dDoKLQlpZiAobGF6eSkKLQkJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNsZWFyX2ZvcmVpZ25fcDJtX21hcHBpbmcpOwogCi11bnNpZ25lZCBsb25nIG0ycF9maW5kX292ZXJyaWRlX3Bmbih1bnNpZ25lZCBsb25nIG1mbiwgdW5zaWduZWQgbG9uZyBwZm4pCi17Ci0Jc3RydWN0IHBhZ2UgKnAgPSBtMnBfZmluZF9vdmVycmlkZShtZm4pOwotCXVuc2lnbmVkIGxvbmcgcmV0ID0gcGZuOwotCi0JaWYgKHApCi0JCXJldCA9IHBhZ2VfdG9fcGZuKHApOwotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG0ycF9maW5kX292ZXJyaWRlX3Bmbik7Ci0KICNpZmRlZiBDT05GSUdfWEVOX0RFQlVHX0ZTCiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgImRlYnVnZnMuaCIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zZXR1cC5jIGIvYXJjaC94ODYveGVuL3NldHVwLmMKaW5kZXggODY1ZTU2Yy4uNTVmMzg4ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NldHVwLmMKKysrIGIvYXJjaC94ODYveGVuL3NldHVwLmMKQEAgLTMyLDE2ICszMiw2IEBACiAjaW5jbHVkZSAicDJtLmgiCiAjaW5jbHVkZSAibW11LmgiCiAKLS8qIFRoZXNlIGFyZSBjb2RlLCBidXQgbm90IGZ1bmN0aW9ucy4gIERlZmluZWQgaW4gZW50cnkuUyAqLwotZXh0ZXJuIGNvbnN0IGNoYXIgeGVuX2h5cGVydmlzb3JfY2FsbGJhY2tbXTsKLWV4dGVybiBjb25zdCBjaGFyIHhlbl9mYWlsc2FmZV9jYWxsYmFja1tdOwotI2lmZGVmIENPTkZJR19YODZfNjQKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgbm1pKHZvaWQpOwotI2VuZGlmCi1leHRlcm4gdm9pZCB4ZW5fc3lzZW50ZXJfdGFyZ2V0KHZvaWQpOwotZXh0ZXJuIHZvaWQgeGVuX3N5c2NhbGxfdGFyZ2V0KHZvaWQpOwotZXh0ZXJuIHZvaWQgeGVuX3N5c2NhbGwzMl90YXJnZXQodm9pZCk7Ci0KIC8qIEFtb3VudCBvZiBleHRyYSBtZW1vcnkgc3BhY2Ugd2UgYWRkIHRvIHRoZSBlODIwIHJhbmdlcyAqLwogc3RydWN0IHhlbl9tZW1vcnlfcmVnaW9uIHhlbl9leHRyYV9tZW1bWEVOX0VYVFJBX01FTV9NQVhfUkVHSU9OU10gX19pbml0ZGF0YTsKIApAQCAtNzQsNyArNjQsNyBAQAogICovCiAjZGVmaW5lIEVYVFJBX01FTV9SQVRJTwkJKDEwKQogCi1zdGF0aWMgdm9pZCBfX2luaXQgeGVuX2FkZF9leHRyYV9tZW0odTY0IHN0YXJ0LCB1NjQgc2l6ZSkKK3N0YXRpYyB2b2lkIF9faW5pdCB4ZW5fYWRkX2V4dHJhX21lbShwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3Qgc2l6ZSkKIHsKIAlpbnQgaTsKIApAQCAtOTcsMTAgKzg3LDEwIEBACiAJbWVtYmxvY2tfcmVzZXJ2ZShzdGFydCwgc2l6ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCB4ZW5fZGVsX2V4dHJhX21lbSh1NjQgc3RhcnQsIHU2NCBzaXplKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9kZWxfZXh0cmFfbWVtKHBoeXNfYWRkcl90IHN0YXJ0LCBwaHlzX2FkZHJfdCBzaXplKQogewogCWludCBpOwotCXU2NCBzdGFydF9yLCBzaXplX3I7CisJcGh5c19hZGRyX3Qgc3RhcnRfciwgc2l6ZV9yOwogCiAJZm9yIChpID0gMDsgaSA8IFhFTl9FWFRSQV9NRU1fTUFYX1JFR0lPTlM7IGkrKykgewogCQlzdGFydF9yID0geGVuX2V4dHJhX21lbVtpXS5zdGFydDsKQEAgLTI2Nyw3ICsyNTcsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IHhlbl91cGRhdGVfbWVtX3RhYmxlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBtZm4pCiB7CiAJc3RydWN0IG1tdV91cGRhdGUgdXBkYXRlID0gewotCQkucHRyID0gKCh1bnNpZ25lZCBsb25nIGxvbmcpbWZuIDw8IFBBR0VfU0hJRlQpIHwgTU1VX01BQ0hQSFlTX1VQREFURSwKKwkJLnB0ciA9ICgodWludDY0X3QpbWZuIDw8IFBBR0VfU0hJRlQpIHwgTU1VX01BQ0hQSFlTX1VQREFURSwKIAkJLnZhbCA9IHBmbgogCX07CiAKQEAgLTU0NSwyMCArNTM1LDIxIEBACiAJcmV0dXJuIG1pbihtYXhfcGFnZXMsIE1BWF9ET01BSU5fUEFHRVMpOwogfQogCi1zdGF0aWMgdm9pZCB4ZW5fYWxpZ25fYW5kX2FkZF9lODIwX3JlZ2lvbih1NjQgc3RhcnQsIHU2NCBzaXplLCBpbnQgdHlwZSkKK3N0YXRpYyB2b2lkIF9faW5pdCB4ZW5fYWxpZ25fYW5kX2FkZF9lODIwX3JlZ2lvbihwaHlzX2FkZHJfdCBzdGFydCwKKwkJCQkJCSBwaHlzX2FkZHJfdCBzaXplLCBpbnQgdHlwZSkKIHsKLQl1NjQgZW5kID0gc3RhcnQgKyBzaXplOworCXBoeXNfYWRkcl90IGVuZCA9IHN0YXJ0ICsgc2l6ZTsKIAogCS8qIEFsaWduIFJBTSByZWdpb25zIHRvIHBhZ2UgYm91bmRhcmllcy4gKi8KIAlpZiAodHlwZSA9PSBFODIwX1JBTSkgewogCQlzdGFydCA9IFBBR0VfQUxJR04oc3RhcnQpOwotCQllbmQgJj0gfigodTY0KVBBR0VfU0laRSAtIDEpOworCQllbmQgJj0gfigocGh5c19hZGRyX3QpUEFHRV9TSVpFIC0gMSk7CiAJfQogCiAJZTgyMF9hZGRfcmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCwgdHlwZSk7CiB9CiAKLXZvaWQgeGVuX2lnbm9yZV91bnVzYWJsZShzdHJ1Y3QgZTgyMGVudHJ5ICpsaXN0LCBzaXplX3QgbWFwX3NpemUpCitzdGF0aWMgdm9pZCBfX2luaXQgeGVuX2lnbm9yZV91bnVzYWJsZShzdHJ1Y3QgZTgyMGVudHJ5ICpsaXN0LCBzaXplX3QgbWFwX3NpemUpCiB7CiAJc3RydWN0IGU4MjBlbnRyeSAqZW50cnk7CiAJdW5zaWduZWQgaW50IGk7CkBAIC01NzcsNyArNTY4LDcgQEAKIAlzdGF0aWMgc3RydWN0IGU4MjBlbnRyeSBtYXBbRTgyME1BWF0gX19pbml0ZGF0YTsKIAogCXVuc2lnbmVkIGxvbmcgbWF4X3BmbiA9IHhlbl9zdGFydF9pbmZvLT5ucl9wYWdlczsKLQl1bnNpZ25lZCBsb25nIGxvbmcgbWVtX2VuZDsKKwlwaHlzX2FkZHJfdCBtZW1fZW5kOwogCWludCByYzsKIAlzdHJ1Y3QgeGVuX21lbW9yeV9tYXAgbWVtbWFwOwogCXVuc2lnbmVkIGxvbmcgbWF4X3BhZ2VzOwpAQCAtNjUyLDE2ICs2NDMsMTYgQEAKIAkJCSAgZXh0cmFfcGFnZXMpOwogCWkgPSAwOwogCXdoaWxlIChpIDwgbWVtbWFwLm5yX2VudHJpZXMpIHsKLQkJdTY0IGFkZHIgPSBtYXBbaV0uYWRkcjsKLQkJdTY0IHNpemUgPSBtYXBbaV0uc2l6ZTsKKwkJcGh5c19hZGRyX3QgYWRkciA9IG1hcFtpXS5hZGRyOworCQlwaHlzX2FkZHJfdCBzaXplID0gbWFwW2ldLnNpemU7CiAJCXUzMiB0eXBlID0gbWFwW2ldLnR5cGU7CiAKIAkJaWYgKHR5cGUgPT0gRTgyMF9SQU0pIHsKIAkJCWlmIChhZGRyIDwgbWVtX2VuZCkgewogCQkJCXNpemUgPSBtaW4oc2l6ZSwgbWVtX2VuZCAtIGFkZHIpOwogCQkJfSBlbHNlIGlmIChleHRyYV9wYWdlcykgewotCQkJCXNpemUgPSBtaW4oc2l6ZSwgKHU2NClleHRyYV9wYWdlcyAqIFBBR0VfU0laRSk7Ci0JCQkJZXh0cmFfcGFnZXMgLT0gc2l6ZSAvIFBBR0VfU0laRTsKKwkJCQlzaXplID0gbWluKHNpemUsIFBGTl9QSFlTKGV4dHJhX3BhZ2VzKSk7CisJCQkJZXh0cmFfcGFnZXMgLT0gUEZOX0RPV04oc2l6ZSk7CiAJCQkJeGVuX2FkZF9leHRyYV9tZW0oYWRkciwgc2l6ZSk7CiAJCQkJeGVuX21heF9wMm1fcGZuID0gUEZOX0RPV04oYWRkciArIHNpemUpOwogCQkJfSBlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vc21wLmMgYi9hcmNoL3g4Ni94ZW4vc21wLmMKaW5kZXggNGMwNzFhZS4uMDhlODQ4OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NtcC5jCisrKyBiL2FyY2gveDg2L3hlbi9zbXAuYwpAQCAtNTA3LDcgKzUwNyw3IEBACiBzdGF0aWMgdm9pZCB4ZW5fY3B1X2RpZSh1bnNpZ25lZCBpbnQgY3B1KQogewogCXdoaWxlICh4ZW5fcHZfZG9tYWluKCkgJiYgSFlQRVJWSVNPUl92Y3B1X29wKFZDUFVPUF9pc191cCwgY3B1LCBOVUxMKSkgewotCQljdXJyZW50LT5zdGF0ZSA9IFRBU0tfVU5JTlRFUlJVUFRJQkxFOworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJc2NoZWR1bGVfdGltZW91dChIWi8xMCk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vdGltZS5jIGIvYXJjaC94ODYveGVuL3RpbWUuYwppbmRleCA2OTA4NzM0Li41NWRhMzNiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vdGltZS5jCisrKyBiL2FyY2gveDg2L3hlbi90aW1lLmMKQEAgLTQ3OSw2ICs0NzksMTAgQEAKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCB0aW1lc3BlYyB0cDsKIAorCS8qIEFzIERvbTAgaXMgbmV2ZXIgbW92ZWQsIG5vIHBlbmFsdHkgb24gdXNpbmcgVFNDIHRoZXJlICovCisJaWYgKHhlbl9pbml0aWFsX2RvbWFpbigpKQorCQl4ZW5fY2xvY2tzb3VyY2UucmF0aW5nID0gMjc1OworCiAJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJnhlbl9jbG9ja3NvdXJjZSwgTlNFQ19QRVJfU0VDKTsKIAogCWlmIChIWVBFUlZJU09SX3ZjcHVfb3AoVkNQVU9QX3N0b3BfcGVyaW9kaWNfdGltZXIsIGNwdSwgTlVMTCkgPT0gMCkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3hlbi1vcHMuaCBiL2FyY2gveDg2L3hlbi94ZW4tb3BzLmgKaW5kZXggNTY4NmJkOS4uOWUxOTVjNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3hlbi1vcHMuaAorKysgYi9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oCkBAIC0xMCw2ICsxMCwxMiBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgeGVuX2h5cGVydmlzb3JfY2FsbGJhY2tbXTsKIGV4dGVybiBjb25zdCBjaGFyIHhlbl9mYWlsc2FmZV9jYWxsYmFja1tdOwogCit2b2lkIHhlbl9zeXNlbnRlcl90YXJnZXQodm9pZCk7CisjaWZkZWYgQ09ORklHX1g4Nl82NAordm9pZCB4ZW5fc3lzY2FsbF90YXJnZXQodm9pZCk7Cit2b2lkIHhlbl9zeXNjYWxsMzJfdGFyZ2V0KHZvaWQpOworI2VuZGlmCisKIGV4dGVybiB2b2lkICp4ZW5faW5pdGlhbF9nZHQ7CiAKIHN0cnVjdCB0cmFwX2luZm87CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggODcyYmYwMS4uYTVlOTI5YSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BndGFibGUuaApAQCAtNTcsNyArNTcsNyBAQAogI2RlZmluZSBQVFJTX1BFUl9QR0QJCTEwMjQKICNkZWZpbmUgUEdEX09SREVSCQkwCiAjZGVmaW5lIFVTRVJfUFRSU19QRVJfUEdECShUQVNLX1NJWkUvUEdESVJfU0laRSkKLSNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKKyNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTBVTAogI2RlZmluZSBGSVJTVF9VU0VSX1BHRF9OUgkoRklSU1RfVVNFUl9BRERSRVNTID4+IFBHRElSX1NISUZUKQogCiAvKgpAQCAtODksOCArODksNiBAQAogICogICAoUEFHRV9OT05FKXwgICAgUFBOICAgIHwgMCB8IDAwIHwgQURXIHwgMDEgfCAxMSB8IDExIHwKICAqCQkrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgKiAgIHN3YXAJfCAgICAgaW5kZXggICAgIHwgICB0eXBlICAgfCAwMSB8IDExIHwgMDAgfAotICoJCSstIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSsKLSAqICAgZmlsZQl8ICAgICAgICBmaWxlIG9mZnNldCAgICAgICB8IDAxIHwgMTEgfCAxMCB8CiAgKgkJKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICoKICAqIEZvciBUMTA1MCBoYXJkd2FyZSBhbmQgZWFybGllciB0aGUgbGF5b3V0IGRpZmZlcnMgZm9yIHByZXNlbnQgYW5kIChQQUdFX05PTkUpCkBAIC0xMTEsNyArMTA5LDYgQEAKICAqICAgaW5kZXggICAgICBzd2FwIG9mZnNldCAvIFBBR0VfU0laRSAoYml0IDExLTMxOiAyMSBiaXRzIC0+IDggR0IpCiAgKgkJKG5vdGUgdGhhdCB0aGUgaW5kZXggaXMgYWx3YXlzIG5vbi16ZXJvKQogICogICB0eXBlICAgICAgIHN3YXAgdHlwZSAoNSBiaXRzIC0+IDMyIHR5cGVzKQotICogICBmaWxlIG9mZnNldCAyNi1iaXQgb2Zmc2V0IGludG8gdGhlIGZpbGUsIGluIGluY3JlbWVudHMgb2YgUEFHRV9TSVpFCiAgKgogICogIE5vdGVzOgogICogICAtIChQUk9UX05PTkUpIGlzIGEgc3BlY2lhbCBjYXNlIG9mICdwcmVzZW50JyBidXQgY2F1c2VzIGFuIGV4Y2VwdGlvbiBmb3IKQEAgLTE0NCw3ICsxNDEsNiBAQAogI2RlZmluZSBfUEFHRV9IV19WQUxJRAkJMHgwMAogI2RlZmluZSBfUEFHRV9OT05FCQkweDBmCiAjZW5kaWYKLSNkZWZpbmUgX1BBR0VfRklMRQkJKDE8PDEpCS8qIGZpbGUgbWFwcGVkIHBhZ2UsIG9ubHkgaWYgIXByZXNlbnQgKi8KIAogI2RlZmluZSBfUEFHRV9VU0VSCQkoMTw8NCkJLyogdXNlciBhY2Nlc3MgKHJpbmc9MSkgKi8KIApAQCAtMjYwLDcgKzI1Niw2IEBACiBzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9XUklUQUJMRTsgfQogc3RhdGljIGlubGluZSBpbnQgcHRlX2RpcnR5KHB0ZV90IHB0ZSkgeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRElSVFk7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpICB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpIHsgcmV0dXJuIDA7IH0KIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkJCkBAIC0zOTAsMTEgKzM4NSw2IEBACiAjZGVmaW5lIF9fcHRlX3RvX3N3cF9lbnRyeShwdGUpCSgoc3dwX2VudHJ5X3QpIHsgcHRlX3ZhbChwdGUpIH0pCiAjZGVmaW5lIF9fc3dwX2VudHJ5X3RvX3B0ZSh4KQkoKHB0ZV90KSB7ICh4KS52YWwgfSkKIAotI2RlZmluZSBQVEVfRklMRV9NQVhfQklUUwkyNgotI2RlZmluZSBwdGVfdG9fcGdvZmYocHRlKQkocHRlX3ZhbChwdGUpID4+IDYpCi0jZGVmaW5lIHBnb2ZmX3RvX3B0ZShvZmYpCVwKLQkoKHB0ZV90KSB7ICgob2ZmKSA8PCA2KSB8IF9QQUdFX0NBX0lOVkFMSUQgfCBfUEFHRV9GSUxFIHwgX1BBR0VfVVNFUiB9KQotCiAjZW5kaWYgLyogICFkZWZpbmVkIChfX0FTU0VNQkxZX18pICovCiAKIApkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvbW0vZmF1bHQuYyBiL2FyY2gveHRlbnNhL21tL2ZhdWx0LmMKaW5kZXggYjU3YzRmOS4uOWUzNTcxYSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbW0vZmF1bHQuYworKysgYi9hcmNoL3h0ZW5zYS9tbS9mYXVsdC5jCkBAIC0xMTcsNiArMTE3LDggQEAKIAlpZiAodW5saWtlbHkoZmF1bHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKGZhdWx0ICYgVk1fRkFVTFRfT09NKQogCQkJZ290byBvdXRfb2ZfbWVtb3J5OworCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR1NFR1YpCisJCQlnb3RvIGJhZF9hcmVhOwogCQllbHNlIGlmIChmYXVsdCAmIFZNX0ZBVUxUX1NJR0JVUykKIAkJCWdvdG8gZG9fc2lnYnVzOwogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1tcS1zeXNmcy5jIGIvYmxvY2svYmxrLW1xLXN5c2ZzLmMKaW5kZXggNjc3NGEwZS4uMTYzMGEyMCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLW1xLXN5c2ZzLmMKKysrIGIvYmxvY2svYmxrLW1xLXN5c2ZzLmMKQEAgLTE1LDI2ICsxNSw2IEBACiAKIHN0YXRpYyB2b2lkIGJsa19tcV9zeXNmc19yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQogewotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOwotCi0JcSA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSwgbXFfa29iaik7Ci0JZnJlZV9wZXJjcHUocS0+cXVldWVfY3R4KTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX21xX2N0eF9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKQotewotCXN0cnVjdCBibGtfbXFfY3R4ICpjdHg7Ci0KLQljdHggPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGJsa19tcV9jdHgsIGtvYmopOwotCWtvYmplY3RfcHV0KCZjdHgtPnF1ZXVlLT5tcV9rb2JqKTsKLX0KLQotc3RhdGljIHZvaWQgYmxrX21xX2hjdHhfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKLXsKLQlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDsKLQotCWhjdHggPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGJsa19tcV9od19jdHgsIGtvYmopOwotCWtmcmVlKGhjdHgpOwogfQogCiBzdHJ1Y3QgYmxrX21xX2N0eF9zeXNmc19lbnRyeSB7CkBAIC0zMzgsMTMgKzMxOCwxMyBAQAogc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgYmxrX21xX2N0eF9rdHlwZSA9IHsKIAkuc3lzZnNfb3BzCT0gJmJsa19tcV9zeXNmc19vcHMsCiAJLmRlZmF1bHRfYXR0cnMJPSBkZWZhdWx0X2N0eF9hdHRycywKLQkucmVsZWFzZQk9IGJsa19tcV9jdHhfcmVsZWFzZSwKKwkucmVsZWFzZQk9IGJsa19tcV9zeXNmc19yZWxlYXNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgYmxrX21xX2h3X2t0eXBlID0gewogCS5zeXNmc19vcHMJPSAmYmxrX21xX2h3X3N5c2ZzX29wcywKIAkuZGVmYXVsdF9hdHRycwk9IGRlZmF1bHRfaHdfY3R4X2F0dHJzLAotCS5yZWxlYXNlCT0gYmxrX21xX2hjdHhfcmVsZWFzZSwKKwkucmVsZWFzZQk9IGJsa19tcV9zeXNmc19yZWxlYXNlLAogfTsKIAogc3RhdGljIHZvaWQgYmxrX21xX3VucmVnaXN0ZXJfaGN0eChzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eCkKQEAgLTM3NSw3ICszNTUsNiBAQAogCQlyZXR1cm4gcmV0OwogCiAJaGN0eF9mb3JfZWFjaF9jdHgoaGN0eCwgY3R4LCBpKSB7Ci0JCWtvYmplY3RfZ2V0KCZxLT5tcV9rb2JqKTsKIAkJcmV0ID0ga29iamVjdF9hZGQoJmN0eC0+a29iaiwgJmhjdHgtPmtvYmosICJjcHUldSIsIGN0eC0+Y3B1KTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmMgYi9ibG9jay9ibGstbXEuYwppbmRleCA5ZWUzYjg3Li4yMzkwYzU1IDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEuYworKysgYi9ibG9jay9ibGstbXEuYwpAQCAtMTg2Nyw2ICsxODY3LDI3IEBACiAJbXV0ZXhfdW5sb2NrKCZzZXQtPnRhZ19saXN0X2xvY2spOwogfQogCisvKgorICogSXQgaXMgdGhlIGFjdHVhbCByZWxlYXNlIGhhbmRsZXIgZm9yIG1xLCBidXQgd2UgZG8gaXQgZnJvbQorICogcmVxdWVzdCBxdWV1ZSdzIHJlbGVhc2UgaGFuZGxlciBmb3IgYXZvaWRpbmcgdXNlLWFmdGVyLWZyZWUKKyAqIGFuZCBoZWFkYWNoZSBiZWNhdXNlIHEtPm1xX2tvYmogc2hvdWxkbid0IGhhdmUgYmVlbiBpbnRyb2R1Y2VkLAorICogYnV0IHdlIGNhbid0IGdyb3VwIGN0eC9rY3R4IGtvYmogd2l0aG91dCBpdC4KKyAqLwordm9pZCBibGtfbXFfcmVsZWFzZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqaGN0eDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIGhjdHgga29iaiBzdGF5cyBpbiBoY3R4ICovCisJcXVldWVfZm9yX2VhY2hfaHdfY3R4KHEsIGhjdHgsIGkpCisJCWtmcmVlKGhjdHgpOworCisJa2ZyZWUocS0+cXVldWVfaHdfY3R4KTsKKworCS8qIGN0eCBrb2JqIHN0YXlzIGluIHF1ZXVlX2N0eCAqLworCWZyZWVfcGVyY3B1KHEtPnF1ZXVlX2N0eCk7Cit9CisKIHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpibGtfbXFfaW5pdF9xdWV1ZShzdHJ1Y3QgYmxrX21xX3RhZ19zZXQgKnNldCkKIHsKIAlzdHJ1Y3QgYmxrX21xX2h3X2N0eCAqKmhjdHhzOwpAQCAtMjAwMCwxMCArMjAyMSw4IEBACiAKIAlwZXJjcHVfcmVmX2V4aXQoJnEtPm1xX3VzYWdlX2NvdW50ZXIpOwogCi0Ja2ZyZWUocS0+cXVldWVfaHdfY3R4KTsKIAlrZnJlZShxLT5tcV9tYXApOwogCi0JcS0+cXVldWVfaHdfY3R4ID0gTlVMTDsKIAlxLT5tcV9tYXAgPSBOVUxMOwogCiAJbXV0ZXhfbG9jaygmYWxsX3FfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLW1xLmggYi9ibG9jay9ibGstbXEuaAppbmRleCA0ZjRmOTQzLi42YTQ4YzRjIDEwMDY0NAotLS0gYS9ibG9jay9ibGstbXEuaAorKysgYi9ibG9jay9ibGstbXEuaApAQCAtNjIsNiArNjIsOCBAQAogCiBleHRlcm4gdm9pZCBibGtfbXFfcnFfdGltZWRfb3V0KHN0cnVjdCByZXF1ZXN0ICpyZXEsIGJvb2wgcmVzZXJ2ZWQpOwogCit2b2lkIGJsa19tcV9yZWxlYXNlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKKwogLyoKICAqIEJhc2ljIGltcGxlbWVudGF0aW9uIG9mIHNwYXJzZXIgYml0bWFwLCBhbGxvd2luZyB0aGUgdXNlciB0byBzcHJlYWQKICAqIHRoZSBiaXRzIG92ZXIgbW9yZSBjYWNoZWxpbmVzLgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXN5c2ZzLmMgYi9ibG9jay9ibGstc3lzZnMuYwppbmRleCA5MzVlYTJhLi5mYWFmMzZhIDEwMDY0NAotLS0gYS9ibG9jay9ibGstc3lzZnMuYworKysgYi9ibG9jay9ibGstc3lzZnMuYwpAQCAtNTE3LDYgKzUxNyw4IEBACiAKIAlpZiAoIXEtPm1xX29wcykKIAkJYmxrX2ZyZWVfZmx1c2hfcXVldWUocS0+ZnEpOworCWVsc2UKKwkJYmxrX21xX3JlbGVhc2UocSk7CiAKIAlibGtfdHJhY2Vfc2h1dGRvd24ocSk7CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL3BhcnRpdGlvbnMvZWZpLmMgYi9ibG9jay9wYXJ0aXRpb25zL2VmaS5jCmluZGV4IDU2ZDA4ZmQuLjI2Y2I2MjQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL3BhcnRpdGlvbnMvZWZpLmMKKysrIGIvYmxvY2svcGFydGl0aW9ucy9lZmkuYwpAQCAtNzE1LDcgKzcxNSw3IEBACiAJCQlzdGF0ZS0+cGFydHNbaSArIDFdLmZsYWdzID0gQUREUEFSVF9GTEFHX1JBSUQ7CiAKIAkJaW5mbyA9ICZzdGF0ZS0+cGFydHNbaSArIDFdLmluZm87Ci0JCWVmaV9ndWlkX3VucGFyc2UoJnB0ZXNbaV0udW5pcXVlX3BhcnRpdGlvbl9ndWlkLCBpbmZvLT51dWlkKTsKKwkJZWZpX2d1aWRfdG9fc3RyKCZwdGVzW2ldLnVuaXF1ZV9wYXJ0aXRpb25fZ3VpZCwgaW5mby0+dXVpZCk7CiAKIAkJLyogTmFpdmVseSBjb252ZXJ0IFVURjE2LUxFIHRvIDcgYml0cy4gKi8KIAkJbGFiZWxfbWF4ID0gbWluKEFSUkFZX1NJWkUoaW5mby0+dm9sbmFtZSkgLSAxLApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FmX2FsZy5jIGIvY3J5cHRvL2FmX2FsZy5jCmluZGV4IDQ2NjViNzkuLjNlODBkOGIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZl9hbGcuYworKysgYi9jcnlwdG8vYWZfYWxnLmMKQEAgLTMzOCw0OSArMzM4LDMxIEBACiAJLm93bmVyCT0JVEhJU19NT0RVTEUsCiB9OwogCi1pbnQgYWZfYWxnX21ha2Vfc2coc3RydWN0IGFmX2FsZ19zZ2wgKnNnbCwgdm9pZCBfX3VzZXIgKmFkZHIsIGludCBsZW4sCi0JCSAgIGludCB3cml0ZSkKK2ludCBhZl9hbGdfbWFrZV9zZyhzdHJ1Y3QgYWZfYWxnX3NnbCAqc2dsLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIGludCBsZW4pCiB7Ci0JdW5zaWduZWQgbG9uZyBmcm9tID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKLQl1bnNpZ25lZCBsb25nIG5wYWdlczsKLQl1bnNpZ25lZCBvZmY7Ci0JaW50IGVycjsKLQlpbnQgaTsKKwlzaXplX3Qgb2ZmOworCXNzaXplX3QgbjsKKwlpbnQgbnBhZ2VzLCBpOwogCi0JZXJyID0gLUVGQVVMVDsKLQlpZiAoIWFjY2Vzc19vayh3cml0ZSA/IFZFUklGWV9SRUFEIDogVkVSSUZZX1dSSVRFLCBhZGRyLCBsZW4pKQotCQlnb3RvIG91dDsKKwluID0gaW92X2l0ZXJfZ2V0X3BhZ2VzKGl0ZXIsIHNnbC0+cGFnZXMsIGxlbiwgQUxHX01BWF9QQUdFUywgJm9mZik7CisJaWYgKG4gPCAwKQorCQlyZXR1cm4gbjsKIAotCW9mZiA9IGZyb20gJiB+UEFHRV9NQVNLOwotCW5wYWdlcyA9IChvZmYgKyBsZW4gKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwotCWlmIChucGFnZXMgPiBBTEdfTUFYX1BBR0VTKQotCQlucGFnZXMgPSBBTEdfTUFYX1BBR0VTOwotCi0JZXJyID0gZ2V0X3VzZXJfcGFnZXNfZmFzdChmcm9tLCBucGFnZXMsIHdyaXRlLCBzZ2wtPnBhZ2VzKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlucGFnZXMgPSBlcnI7Ci0JZXJyID0gLUVJTlZBTDsKKwlucGFnZXMgPSAob2ZmICsgbiArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CiAJaWYgKFdBUk5fT04obnBhZ2VzID09IDApKQotCQlnb3RvIG91dDsKLQotCWVyciA9IDA7CisJCXJldHVybiAtRUlOVkFMOwogCiAJc2dfaW5pdF90YWJsZShzZ2wtPnNnLCBucGFnZXMpOwogCi0JZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKSB7CisJZm9yIChpID0gMCwgbGVuID0gbjsgaSA8IG5wYWdlczsgaSsrKSB7CiAJCWludCBwbGVuID0gbWluX3QoaW50LCBsZW4sIFBBR0VfU0laRSAtIG9mZik7CiAKIAkJc2dfc2V0X3BhZ2Uoc2dsLT5zZyArIGksIHNnbC0+cGFnZXNbaV0sIHBsZW4sIG9mZik7CiAKIAkJb2ZmID0gMDsKIAkJbGVuIC09IHBsZW47Ci0JCWVyciArPSBwbGVuOwogCX0KLQotb3V0OgotCXJldHVybiBlcnI7CisJcmV0dXJuIG47CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhZl9hbGdfbWFrZV9zZyk7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9hbGdpZl9oYXNoLmMgYi9jcnlwdG8vYWxnaWZfaGFzaC5jCmluZGV4IDAxZjU2ZWIuLjAxZGEzNjAgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hbGdpZl9oYXNoLmMKKysrIGIvY3J5cHRvL2FsZ2lmX2hhc2guYwpAQCAtNDEsOCArNDEsNiBAQAogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBhbGdfc29jayAqYXNrID0gYWxnX3NrKHNrKTsKIAlzdHJ1Y3QgaGFzaF9jdHggKmN0eCA9IGFzay0+cHJpdmF0ZTsKLQl1bnNpZ25lZCBsb25nIGlvdmxlbjsKLQljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdjsKIAlsb25nIGNvcGllZCA9IDA7CiAJaW50IGVycjsKIApAQCAtNTgsMzcgKzU2LDI4IEBACiAKIAljdHgtPm1vcmUgPSAwOwogCi0JZm9yIChpb3YgPSBtc2ctPm1zZ19pdGVyLmlvdiwgaW92bGVuID0gbXNnLT5tc2dfaXRlci5ucl9zZWdzOyBpb3ZsZW4gPiAwOwotCSAgICAgaW92bGVuLS0sIGlvdisrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc2VnbGVuID0gaW92LT5pb3ZfbGVuOwotCQljaGFyIF9fdXNlciAqZnJvbSA9IGlvdi0+aW92X2Jhc2U7CisJd2hpbGUgKGlvdl9pdGVyX2NvdW50KCZtc2ctPm1zZ19pdGVyKSkgeworCQlpbnQgbGVuID0gaW92X2l0ZXJfY291bnQoJm1zZy0+bXNnX2l0ZXIpOwogCi0JCXdoaWxlIChzZWdsZW4pIHsKLQkJCWludCBsZW4gPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBzZWdsZW4sIGxpbWl0KTsKLQkJCWludCBuZXdsZW47CisJCWlmIChsZW4gPiBsaW1pdCkKKwkJCWxlbiA9IGxpbWl0OwogCi0JCQluZXdsZW4gPSBhZl9hbGdfbWFrZV9zZygmY3R4LT5zZ2wsIGZyb20sIGxlbiwgMCk7Ci0JCQlpZiAobmV3bGVuIDwgMCkgewotCQkJCWVyciA9IGNvcGllZCA/IDAgOiBuZXdsZW47Ci0JCQkJZ290byB1bmxvY2s7Ci0JCQl9Ci0KLQkJCWFoYXNoX3JlcXVlc3Rfc2V0X2NyeXB0KCZjdHgtPnJlcSwgY3R4LT5zZ2wuc2csIE5VTEwsCi0JCQkJCQluZXdsZW4pOwotCi0JCQllcnIgPSBhZl9hbGdfd2FpdF9mb3JfY29tcGxldGlvbigKLQkJCQljcnlwdG9fYWhhc2hfdXBkYXRlKCZjdHgtPnJlcSksCi0JCQkJJmN0eC0+Y29tcGxldGlvbik7Ci0KLQkJCWFmX2FsZ19mcmVlX3NnKCZjdHgtPnNnbCk7Ci0KLQkJCWlmIChlcnIpCi0JCQkJZ290byB1bmxvY2s7Ci0KLQkJCXNlZ2xlbiAtPSBuZXdsZW47Ci0JCQlmcm9tICs9IG5ld2xlbjsKLQkJCWNvcGllZCArPSBuZXdsZW47CisJCWxlbiA9IGFmX2FsZ19tYWtlX3NnKCZjdHgtPnNnbCwgJm1zZy0+bXNnX2l0ZXIsIGxlbik7CisJCWlmIChsZW4gPCAwKSB7CisJCQllcnIgPSBjb3BpZWQgPyAwIDogbGVuOworCQkJZ290byB1bmxvY2s7CiAJCX0KKworCQlhaGFzaF9yZXF1ZXN0X3NldF9jcnlwdCgmY3R4LT5yZXEsIGN0eC0+c2dsLnNnLCBOVUxMLCBsZW4pOworCisJCWVyciA9IGFmX2FsZ193YWl0X2Zvcl9jb21wbGV0aW9uKGNyeXB0b19haGFzaF91cGRhdGUoJmN0eC0+cmVxKSwKKwkJCQkJCSAmY3R4LT5jb21wbGV0aW9uKTsKKwkJYWZfYWxnX2ZyZWVfc2coJmN0eC0+c2dsKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gdW5sb2NrOworCisJCWNvcGllZCArPSBsZW47CisJCWlvdl9pdGVyX2FkdmFuY2UoJm1zZy0+bXNnX2l0ZXIsIGxlbik7CiAJfQogCiAJZXJyID0gMDsKZGlmZiAtLWdpdCBhL2NyeXB0by9hbGdpZl9za2NpcGhlci5jIGIvY3J5cHRvL2FsZ2lmX3NrY2lwaGVyLmMKaW5kZXggYzEyMjA3Yy4uNmZjMTJjMyAxMDA2NDQKLS0tIGEvY3J5cHRvL2FsZ2lmX3NrY2lwaGVyLmMKKysrIGIvY3J5cHRvL2FsZ2lmX3NrY2lwaGVyLmMKQEAgLTQyNiw2NyArNDI2LDU4IEBACiAJCSZjdHgtPnJlcSkpOwogCXN0cnVjdCBza2NpcGhlcl9zZ19saXN0ICpzZ2w7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQl1bnNpZ25lZCBsb25nIGlvdmxlbjsKLQljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdjsKIAlpbnQgZXJyID0gLUVBR0FJTjsKIAlpbnQgdXNlZDsKIAlsb25nIGNvcGllZCA9IDA7CiAKIAlsb2NrX3NvY2soc2spOwotCWZvciAoaW92ID0gbXNnLT5tc2dfaXRlci5pb3YsIGlvdmxlbiA9IG1zZy0+bXNnX2l0ZXIubnJfc2VnczsgaW92bGVuID4gMDsKLQkgICAgIGlvdmxlbi0tLCBpb3YrKykgewotCQl1bnNpZ25lZCBsb25nIHNlZ2xlbiA9IGlvdi0+aW92X2xlbjsKLQkJY2hhciBfX3VzZXIgKmZyb20gPSBpb3YtPmlvdl9iYXNlOworCXdoaWxlIChpb3ZfaXRlcl9jb3VudCgmbXNnLT5tc2dfaXRlcikpIHsKKwkJc2dsID0gbGlzdF9maXJzdF9lbnRyeSgmY3R4LT50c2dsLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2tjaXBoZXJfc2dfbGlzdCwgbGlzdCk7CisJCXNnID0gc2dsLT5zZzsKIAotCQl3aGlsZSAoc2VnbGVuKSB7Ci0JCQlzZ2wgPSBsaXN0X2ZpcnN0X2VudHJ5KCZjdHgtPnRzZ2wsCi0JCQkJCSAgICAgICBzdHJ1Y3Qgc2tjaXBoZXJfc2dfbGlzdCwgbGlzdCk7Ci0JCQlzZyA9IHNnbC0+c2c7CisJCXdoaWxlICghc2ctPmxlbmd0aCkKKwkJCXNnKys7CiAKLQkJCXdoaWxlICghc2ctPmxlbmd0aCkKLQkJCQlzZysrOwotCi0JCQlpZiAoIWN0eC0+dXNlZCkgewotCQkJCWVyciA9IHNrY2lwaGVyX3dhaXRfZm9yX2RhdGEoc2ssIGZsYWdzKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlnb3RvIHVubG9jazsKLQkJCX0KLQotCQkJdXNlZCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIGN0eC0+dXNlZCwgc2VnbGVuKTsKLQotCQkJdXNlZCA9IGFmX2FsZ19tYWtlX3NnKCZjdHgtPnJzZ2wsIGZyb20sIHVzZWQsIDEpOwotCQkJZXJyID0gdXNlZDsKLQkJCWlmIChlcnIgPCAwKQorCQlpZiAoIWN0eC0+dXNlZCkgeworCQkJZXJyID0gc2tjaXBoZXJfd2FpdF9mb3JfZGF0YShzaywgZmxhZ3MpOworCQkJaWYgKGVycikKIAkJCQlnb3RvIHVubG9jazsKKwkJfQogCi0JCQlpZiAoY3R4LT5tb3JlIHx8IHVzZWQgPCBjdHgtPnVzZWQpCi0JCQkJdXNlZCAtPSB1c2VkICUgYnM7CisJCXVzZWQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCBjdHgtPnVzZWQsIGlvdl9pdGVyX2NvdW50KCZtc2ctPm1zZ19pdGVyKSk7CiAKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlpZiAoIXVzZWQpCi0JCQkJZ290byBmcmVlOworCQl1c2VkID0gYWZfYWxnX21ha2Vfc2coJmN0eC0+cnNnbCwgJm1zZy0+bXNnX2l0ZXIsIHVzZWQpOworCQllcnIgPSB1c2VkOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gdW5sb2NrOwogCi0JCQlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X2NyeXB0KCZjdHgtPnJlcSwgc2csCi0JCQkJCQkgICAgIGN0eC0+cnNnbC5zZywgdXNlZCwKLQkJCQkJCSAgICAgY3R4LT5pdik7CisJCWlmIChjdHgtPm1vcmUgfHwgdXNlZCA8IGN0eC0+dXNlZCkKKwkJCXVzZWQgLT0gdXNlZCAlIGJzOwogCi0JCQllcnIgPSBhZl9hbGdfd2FpdF9mb3JfY29tcGxldGlvbigKKwkJZXJyID0gLUVJTlZBTDsKKwkJaWYgKCF1c2VkKQorCQkJZ290byBmcmVlOworCisJCWFibGtjaXBoZXJfcmVxdWVzdF9zZXRfY3J5cHQoJmN0eC0+cmVxLCBzZywKKwkJCQkJICAgICBjdHgtPnJzZ2wuc2csIHVzZWQsCisJCQkJCSAgICAgY3R4LT5pdik7CisKKwkJZXJyID0gYWZfYWxnX3dhaXRfZm9yX2NvbXBsZXRpb24oCiAJCQkJY3R4LT5lbmMgPwogCQkJCQljcnlwdG9fYWJsa2NpcGhlcl9lbmNyeXB0KCZjdHgtPnJlcSkgOgogCQkJCQljcnlwdG9fYWJsa2NpcGhlcl9kZWNyeXB0KCZjdHgtPnJlcSksCiAJCQkJJmN0eC0+Y29tcGxldGlvbik7CiAKIGZyZWU6Ci0JCQlhZl9hbGdfZnJlZV9zZygmY3R4LT5yc2dsKTsKKwkJYWZfYWxnX2ZyZWVfc2coJmN0eC0+cnNnbCk7CiAKLQkJCWlmIChlcnIpCi0JCQkJZ290byB1bmxvY2s7CisJCWlmIChlcnIpCisJCQlnb3RvIHVubG9jazsKIAotCQkJY29waWVkICs9IHVzZWQ7Ci0JCQlmcm9tICs9IHVzZWQ7Ci0JCQlzZWdsZW4gLT0gdXNlZDsKLQkJCXNrY2lwaGVyX3B1bGxfc2dsKHNrLCB1c2VkKTsKLQkJfQorCQljb3BpZWQgKz0gdXNlZDsKKwkJc2tjaXBoZXJfcHVsbF9zZ2woc2ssIHVzZWQpOworCQlpb3ZfaXRlcl9hZHZhbmNlKCZtc2ctPm1zZ19pdGVyLCB1c2VkKTsKIAl9CiAKIAllcnIgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVycy9LY29uZmlnCmluZGV4IDY5NGQ1YTcuLmM3MGQ2ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL0tjb25maWcKQEAgLTEzNCw4ICsxMzQsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvcGxhdGZvcm0vS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL3NvYy9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvY2xrL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9od3NwaW5sb2NrL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvS2NvbmZpZyBiL2RyaXZlcnMvYWNwaS9LY29uZmlnCmluZGV4IDg5NTFjZWZiLi5lNmMzZGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL2FjcGkvS2NvbmZpZwpAQCAtMzE1LDYgKzMxNSwxMiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKIAkgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWNwaV9tZW1ob3RwbHVnLgogCitjb25maWcgQUNQSV9IT1RQTFVHX0lPQVBJQworCWJvb2wKKwlkZXBlbmRzIG9uIFBDSQorCWRlcGVuZHMgb24gWDg2X0lPX0FQSUMKKwlkZWZhdWx0IHkKKwogY29uZmlnIEFDUElfU0JTCiAJdHJpc3RhdGUgIlNtYXJ0IEJhdHRlcnkgU3lzdGVtIgogCWRlcGVuZHMgb24gWDg2CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvTWFrZWZpbGUgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKaW5kZXggZjc0MzE3Yy4uYjE4Y2QyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQpAQCAtNDAsNyArNDAsNyBAQAogYWNwaS15CQkJCSs9IGVjLm8KIGFjcGktJChDT05GSUdfQUNQSV9ET0NLKQkrPSBkb2NrLm8KIGFjcGkteQkJCQkrPSBwY2lfcm9vdC5vIHBjaV9saW5rLm8gcGNpX2lycS5vCi1hY3BpLXkJCQkJKz0gYWNwaV9scHNzLm8KK2FjcGkteQkJCQkrPSBhY3BpX2xwc3MubyBhY3BpX2FwZC5vCiBhY3BpLXkJCQkJKz0gYWNwaV9wbGF0Zm9ybS5vCiBhY3BpLXkJCQkJKz0gYWNwaV9wbnAubwogYWNwaS15CQkJCSs9IGludDM0MHhfdGhlcm1hbC5vCkBAIC03MCw2ICs3MCw3IEBACiBvYmoteQkJCQkrPSBjb250YWluZXIubwogb2JqLSQoQ09ORklHX0FDUElfVEhFUk1BTCkJKz0gdGhlcm1hbC5vCiBvYmoteQkJCQkrPSBhY3BpX21lbWhvdHBsdWcubworb2JqLSQoQ09ORklHX0FDUElfSE9UUExVR19JT0FQSUMpICs9IGlvYXBpYy5vCiBvYmotJChDT05GSUdfQUNQSV9CQVRURVJZKQkrPSBiYXR0ZXJ5Lm8KIG9iai0kKENPTkZJR19BQ1BJX1NCUykJCSs9IHNic2hjLm8KIG9iai0kKENPTkZJR19BQ1BJX1NCUykJCSs9IHNicy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaV9hcGQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpX2FwZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ODRlYTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaV9hcGQuYwpAQCAtMCwwICsxLDE1MCBAQAorLyoKKyAqIEFNRCBBQ1BJIHN1cHBvcnQgZm9yIEFDUEkycGxhdGZvcm0gZGV2aWNlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCwyMDE1IEFNRCBDb3Jwb3JhdGlvbi4KKyAqIEF1dGhvcnM6IEtlbiBYdWUgPEtlbi5YdWVAYW1kLmNvbT4KKyAqCVd1LCBKZWZmIDxKZWZmLld1QGFtZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fZG9tYWluLmg+CisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitBQ1BJX01PRFVMRV9OQU1FKCJhY3BpX2FwZCIpOworc3RydWN0IGFwZF9wcml2YXRlX2RhdGE7CisKKy8qKgorICogQUNQSV9BUERfU1lTRlMgOiBhZGQgZGV2aWNlIGF0dHJpYnV0ZXMgaW4gc3lzZnMKKyAqIEFDUElfQVBEX1BNIDogYXR0YWNoIHBvd2VyIGRvbWFpbiB0byBkZXZpY2UKKyAqLworI2RlZmluZSBBQ1BJX0FQRF9TWVNGUwlCSVQoMCkKKyNkZWZpbmUgQUNQSV9BUERfUE0JQklUKDEpCisKKy8qKgorICogc3RydWN0IGFwZF9kZXZpY2VfZGVzYyAtIGEgZGVzY3JpcHRvciBmb3IgYXBkIGRldmljZQorICogQGZsYWdzOiBkZXZpY2UgZmxhZ3MgbGlrZSAlQUNQSV9BUERfU1lTRlMsICVBQ1BJX0FQRF9QTQorICogQGZpeGVkX2Nsa19yYXRlOiBmaXhlZCByYXRlIGlucHV0IGNsb2NrIHNvdXJjZSBmb3IgYWNwaSBkZXZpY2U7CisgKgkJCTAgbWVhbnMgbm8gZml4ZWQgcmF0ZSBpbnB1dCBjbG9jayBzb3VyY2UKKyAqIEBzZXR1cDogYSBob29rIHJvdXRpbmUgdG8gc2V0IGRldmljZSByZXNvdXJjZSBkdXJpbmcgY3JlYXRlIHBsYXRmb3JtIGRldmljZQorICoKKyAqIERldmljZSBkZXNjcmlwdGlvbiBkZWZpbmVkIGFzIGFjcGlfZGV2aWNlX2lkLmRyaXZlcl9kYXRhCisgKi8KK3N0cnVjdCBhcGRfZGV2aWNlX2Rlc2MgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBpbnQgZml4ZWRfY2xrX3JhdGU7CisJaW50ICgqc2V0dXApKHN0cnVjdCBhcGRfcHJpdmF0ZV9kYXRhICpwZGF0YSk7Cit9OworCitzdHJ1Y3QgYXBkX3ByaXZhdGVfZGF0YSB7CisJc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBhY3BpX2RldmljZSAqYWRldjsKKwljb25zdCBzdHJ1Y3QgYXBkX2RldmljZV9kZXNjICpkZXZfZGVzYzsKK307CisKKyNpZmRlZiBDT05GSUdfWDg2X0FNRF9QTEFURk9STV9ERVZJQ0UKKyNkZWZpbmUgQVBEX0FERFIoZGVzYykJKCh1bnNpZ25lZCBsb25nKSZkZXNjKQorCitzdGF0aWMgaW50IGFjcGlfYXBkX3NldHVwKHN0cnVjdCBhcGRfcHJpdmF0ZV9kYXRhICpwZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgYXBkX2RldmljZV9kZXNjICpkZXZfZGVzYyA9IHBkYXRhLT5kZXZfZGVzYzsKKwlzdHJ1Y3QgY2xrICpjbGsgPSBFUlJfUFRSKC1FTk9ERVYpOworCisJaWYgKGRldl9kZXNjLT5maXhlZF9jbGtfcmF0ZSkgeworCQljbGsgPSBjbGtfcmVnaXN0ZXJfZml4ZWRfcmF0ZSgmcGRhdGEtPmFkZXYtPmRldiwKKwkJCQkJZGV2X25hbWUoJnBkYXRhLT5hZGV2LT5kZXYpLAorCQkJCQlOVUxMLCBDTEtfSVNfUk9PVCwKKwkJCQkJZGV2X2Rlc2MtPmZpeGVkX2Nsa19yYXRlKTsKKwkJY2xrX3JlZ2lzdGVyX2Nsa2RldihjbGssIE5VTEwsIGRldl9uYW1lKCZwZGF0YS0+YWRldi0+ZGV2KSk7CisJCXBkYXRhLT5jbGsgPSBjbGs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYXBkX2RldmljZV9kZXNjIGN6X2kyY19kZXNjID0geworCS5zZXR1cCA9IGFjcGlfYXBkX3NldHVwLAorCS5maXhlZF9jbGtfcmF0ZSA9IDEzMzAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXBkX2RldmljZV9kZXNjIGN6X3VhcnRfZGVzYyA9IHsKKwkuc2V0dXAgPSBhY3BpX2FwZF9zZXR1cCwKKwkuZml4ZWRfY2xrX3JhdGUgPSA0ODAwMDAwMCwKK307CisKKyNlbHNlCisKKyNkZWZpbmUgQVBEX0FERFIoZGVzYykgKDBVTCkKKworI2VuZGlmIC8qIENPTkZJR19YODZfQU1EX1BMQVRGT1JNX0RFVklDRSAqLworCisvKioKKyogQ3JlYXRlIHBsYXRmb3JtIGRldmljZSBkdXJpbmcgYWNwaSBzY2FuIGF0dGFjaCBoYW5kbGUuCisqIFJldHVybiB2YWx1ZSA+IDAgb24gc3VjY2VzcyBvZiBjcmVhdGluZyBkZXZpY2UuCisqLworc3RhdGljIGludCBhY3BpX2FwZF9jcmVhdGVfZGV2aWNlKHN0cnVjdCBhY3BpX2RldmljZSAqYWRldiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgKmlkKQoreworCWNvbnN0IHN0cnVjdCBhcGRfZGV2aWNlX2Rlc2MgKmRldl9kZXNjID0gKHZvaWQgKilpZC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGFwZF9wcml2YXRlX2RhdGEgKnBkYXRhOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJaW50IHJldDsKKworCWlmICghZGV2X2Rlc2MpIHsKKwkJcGRldiA9IGFjcGlfY3JlYXRlX3BsYXRmb3JtX2RldmljZShhZGV2KTsKKwkJcmV0dXJuIElTX0VSUl9PUl9OVUxMKHBkZXYpID8gUFRSX0VSUihwZGV2KSA6IDE7CisJfQorCisJcGRhdGEgPSBremFsbG9jKHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBkYXRhLT5hZGV2ID0gYWRldjsKKwlwZGF0YS0+ZGV2X2Rlc2MgPSBkZXZfZGVzYzsKKworCWlmIChkZXZfZGVzYy0+c2V0dXApIHsKKwkJcmV0ID0gZGV2X2Rlc2MtPnNldHVwKHBkYXRhKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX291dDsKKwl9CisKKwlhZGV2LT5kcml2ZXJfZGF0YSA9IHBkYXRhOworCXBkZXYgPSBhY3BpX2NyZWF0ZV9wbGF0Zm9ybV9kZXZpY2UoYWRldik7CisJaWYgKCFJU19FUlJfT1JfTlVMTChwZGV2KSkKKwkJcmV0dXJuIDE7CisKKwlyZXQgPSBQVFJfRVJSKHBkZXYpOworCWFkZXYtPmRyaXZlcl9kYXRhID0gTlVMTDsKKworIGVycl9vdXQ6CisJa2ZyZWUocGRhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgYWNwaV9hcGRfZGV2aWNlX2lkc1tdID0geworCS8qIEdlbmVyaWMgYXBkIGRldmljZXMgKi8KKwl7ICJBTUQwMDEwIiwgQVBEX0FERFIoY3pfaTJjX2Rlc2MpIH0sCisJeyAiQU1EMDAyMCIsIEFQRF9BRERSKGN6X3VhcnRfZGVzYykgfSwKKwl7ICJBTUQwMDMwIiwgfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9zY2FuX2hhbmRsZXIgYXBkX2hhbmRsZXIgPSB7CisJLmlkcyA9IGFjcGlfYXBkX2RldmljZV9pZHMsCisJLmF0dGFjaCA9IGFjcGlfYXBkX2NyZWF0ZV9kZXZpY2UsCit9OworCit2b2lkIF9faW5pdCBhY3BpX2FwZF9pbml0KHZvaWQpCit7CisJYWNwaV9zY2FuX2FkZF9oYW5kbGVyKCZhcGRfaGFuZGxlcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaV9scHNzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaV9scHNzLmMKaW5kZXggNGYzZmViZi4uMDJlODM1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGlfbHBzcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpX2xwc3MuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBBQ1BJIHN1cHBvcnQgZm9yIEludGVsIEx5bnhwb2ludCBMUFNTLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCwgSW50ZWwgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxMywgSW50ZWwgQ29ycG9yYXRpb24KICAqIEF1dGhvcnM6IE1pa2EgV2VzdGVyYmVyZyA8bWlrYS53ZXN0ZXJiZXJnQGxpbnV4LmludGVsLmNvbT4KICAqICAgICAgICAgIFJhZmFlbCBKLiBXeXNvY2tpIDxyYWZhZWwuai53eXNvY2tpQGludGVsLmNvbT4KICAqCkBAIC02MCw4ICs2MCw2IEBACiAjZGVmaW5lIExQU1NfQ0xLX0RJVklERVIJCUJJVCgyKQogI2RlZmluZSBMUFNTX0xUUgkJCUJJVCgzKQogI2RlZmluZSBMUFNTX1NBVkVfQ1RYCQkJQklUKDQpCi0jZGVmaW5lIExQU1NfREVWX1BST1hZCQkJQklUKDUpCi0jZGVmaW5lIExQU1NfUFJPWFlfUkVRCQkJQklUKDYpCiAKIHN0cnVjdCBscHNzX3ByaXZhdGVfZGF0YTsKIApAQCAtNzIsMTAgKzcwLDggQEAKIAl2b2lkICgqc2V0dXApKHN0cnVjdCBscHNzX3ByaXZhdGVfZGF0YSAqcGRhdGEpOwogfTsKIAotc3RhdGljIHN0cnVjdCBkZXZpY2UgKnByb3h5X2RldmljZTsKLQogc3RhdGljIHN0cnVjdCBscHNzX2RldmljZV9kZXNjIGxwc3NfZG1hX2Rlc2MgPSB7Ci0JLmZsYWdzID0gTFBTU19DTEsgfCBMUFNTX1BST1hZX1JFUSwKKwkuZmxhZ3MgPSBMUFNTX0NMSywKIH07CiAKIHN0cnVjdCBscHNzX3ByaXZhdGVfZGF0YSB7CkBAIC0xMjksNyArMTI1LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbHBzc19kZXZpY2VfZGVzYyBscHRfaTJjX2Rldl9kZXNjID0gewotCS5mbGFncyA9IExQU1NfQ0xLIHwgTFBTU19DTEtfR0FURSB8IExQU1NfTFRSLAorCS5mbGFncyA9IExQU1NfQ0xLIHwgTFBTU19MVFIsCiAJLnBydl9vZmZzZXQgPSAweDgwMCwKIH07CiAKQEAgLTE1MCwyNCArMTQ2LDIyIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGxwc3NfZGV2aWNlX2Rlc2MgYnl0X3VhcnRfZGV2X2Rlc2MgPSB7Ci0JLmZsYWdzID0gTFBTU19DTEsgfCBMUFNTX0NMS19HQVRFIHwgTFBTU19DTEtfRElWSURFUiB8IExQU1NfU0FWRV9DVFggfAotCQkgTFBTU19ERVZfUFJPWFksCisJLmZsYWdzID0gTFBTU19DTEsgfCBMUFNTX0NMS19HQVRFIHwgTFBTU19DTEtfRElWSURFUiB8IExQU1NfU0FWRV9DVFgsCiAJLnBydl9vZmZzZXQgPSAweDgwMCwKIAkuc2V0dXAgPSBscHNzX3VhcnRfc2V0dXAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGxwc3NfZGV2aWNlX2Rlc2MgYnl0X3NwaV9kZXZfZGVzYyA9IHsKLQkuZmxhZ3MgPSBMUFNTX0NMSyB8IExQU1NfQ0xLX0dBVEUgfCBMUFNTX0NMS19ESVZJREVSIHwgTFBTU19TQVZFX0NUWCB8Ci0JCSBMUFNTX0RFVl9QUk9YWSwKKwkuZmxhZ3MgPSBMUFNTX0NMSyB8IExQU1NfQ0xLX0dBVEUgfCBMUFNTX0NMS19ESVZJREVSIHwgTFBTU19TQVZFX0NUWCwKIAkucHJ2X29mZnNldCA9IDB4NDAwLAogfTsKIAogc3RhdGljIHN0cnVjdCBscHNzX2RldmljZV9kZXNjIGJ5dF9zZGlvX2Rldl9kZXNjID0gewotCS5mbGFncyA9IExQU1NfQ0xLIHwgTFBTU19ERVZfUFJPWFksCisJLmZsYWdzID0gTFBTU19DTEssCiB9OwogCiBzdGF0aWMgc3RydWN0IGxwc3NfZGV2aWNlX2Rlc2MgYnl0X2kyY19kZXZfZGVzYyA9IHsKLQkuZmxhZ3MgPSBMUFNTX0NMSyB8IExQU1NfU0FWRV9DVFggfCBMUFNTX0RFVl9QUk9YWSwKKwkuZmxhZ3MgPSBMUFNTX0NMSyB8IExQU1NfU0FWRV9DVFgsCiAJLnBydl9vZmZzZXQgPSAweDgwMCwKIAkuc2V0dXAgPSBieXRfaTJjX3NldHVwLAogfTsKQEAgLTMxMyw3ICszMDcsNyBAQAogewogCXN0cnVjdCBscHNzX2RldmljZV9kZXNjICpkZXZfZGVzYzsKIAlzdHJ1Y3QgbHBzc19wcml2YXRlX2RhdGEgKnBkYXRhOwotCXN0cnVjdCByZXNvdXJjZV9saXN0X2VudHJ5ICpyZW50cnk7CisJc3RydWN0IHJlc291cmNlX2VudHJ5ICpyZW50cnk7CiAJc3RydWN0IGxpc3RfaGVhZCByZXNvdXJjZV9saXN0OwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IHJldDsKQEAgLTMzMywxMyArMzI3LDE1IEBACiAJCWdvdG8gZXJyX291dDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocmVudHJ5LCAmcmVzb3VyY2VfbGlzdCwgbm9kZSkKLQkJaWYgKHJlc291cmNlX3R5cGUoJnJlbnRyeS0+cmVzKSA9PSBJT1JFU09VUkNFX01FTSkgeworCQlpZiAocmVzb3VyY2VfdHlwZShyZW50cnktPnJlcykgPT0gSU9SRVNPVVJDRV9NRU0pIHsKIAkJCWlmIChkZXZfZGVzYy0+cHJ2X3NpemVfb3ZlcnJpZGUpCiAJCQkJcGRhdGEtPm1taW9fc2l6ZSA9IGRldl9kZXNjLT5wcnZfc2l6ZV9vdmVycmlkZTsKIAkJCWVsc2UKLQkJCQlwZGF0YS0+bW1pb19zaXplID0gcmVzb3VyY2Vfc2l6ZSgmcmVudHJ5LT5yZXMpOwotCQkJcGRhdGEtPm1taW9fYmFzZSA9IGlvcmVtYXAocmVudHJ5LT5yZXMuc3RhcnQsCisJCQkJcGRhdGEtPm1taW9fc2l6ZSA9IHJlc291cmNlX3NpemUocmVudHJ5LT5yZXMpOworCQkJcGRhdGEtPm1taW9fYmFzZSA9IGlvcmVtYXAocmVudHJ5LT5yZXMtPnN0YXJ0LAogCQkJCQkJICAgcGRhdGEtPm1taW9fc2l6ZSk7CisJCQlpZiAoIXBkYXRhLT5tbWlvX2Jhc2UpCisJCQkJZ290byBlcnJfb3V0OwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMzc0LDggKzM3MCw2IEBACiAJYWRldi0+ZHJpdmVyX2RhdGEgPSBwZGF0YTsKIAlwZGV2ID0gYWNwaV9jcmVhdGVfcGxhdGZvcm1fZGV2aWNlKGFkZXYpOwogCWlmICghSVNfRVJSX09SX05VTEwocGRldikpIHsKLQkJaWYgKCFwcm94eV9kZXZpY2UgJiYgZGV2X2Rlc2MtPmZsYWdzICYgTFBTU19ERVZfUFJPWFkpCi0JCQlwcm94eV9kZXZpY2UgPSAmcGRldi0+ZGV2OwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTYwMCwxNCArNTk0LDcgQEAKIAlpZiAocGRhdGEtPmRldl9kZXNjLT5mbGFncyAmIExQU1NfU0FWRV9DVFgpCiAJCWFjcGlfbHBzc19zYXZlX2N0eChkZXYsIHBkYXRhKTsKIAotCXJldCA9IGFjcGlfZGV2X3J1bnRpbWVfc3VzcGVuZChkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlpZiAocGRhdGEtPmRldl9kZXNjLT5mbGFncyAmIExQU1NfUFJPWFlfUkVRICYmIHByb3h5X2RldmljZSkKLQkJcmV0dXJuIHBtX3J1bnRpbWVfcHV0X3N5bmNfc3VzcGVuZChwcm94eV9kZXZpY2UpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGFjcGlfZGV2X3J1bnRpbWVfc3VzcGVuZChkZXYpOwogfQogCiBzdGF0aWMgaW50IGFjcGlfbHBzc19ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC02MTUsMTIgKzYwMiw2IEBACiAJc3RydWN0IGxwc3NfcHJpdmF0ZV9kYXRhICpwZGF0YSA9IGFjcGlfZHJpdmVyX2RhdGEoQUNQSV9DT01QQU5JT04oZGV2KSk7CiAJaW50IHJldDsKIAotCWlmIChwZGF0YS0+ZGV2X2Rlc2MtPmZsYWdzICYgTFBTU19QUk9YWV9SRVEgJiYgcHJveHlfZGV2aWNlKSB7Ci0JCXJldCA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMocHJveHlfZGV2aWNlKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQotCiAJcmV0ID0gYWNwaV9kZXZfcnVudGltZV9yZXN1bWUoZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jIGIvZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jCmluZGV4IDIzZTIzMTkuLmVlMjhmNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMKQEAgLTEwMSw4ICsxMDEsOCBAQAogCQkvKiBDYW4gd2UgY29tYmluZSB0aGUgcmVzb3VyY2UgcmFuZ2UgaW5mb3JtYXRpb24/ICovCiAJCWlmICgoaW5mby0+Y2FjaGluZyA9PSBhZGRyZXNzNjQuaW5mby5tZW0uY2FjaGluZykgJiYKIAkJICAgIChpbmZvLT53cml0ZV9wcm90ZWN0ID09IGFkZHJlc3M2NC5pbmZvLm1lbS53cml0ZV9wcm90ZWN0KSAmJgotCQkgICAgKGluZm8tPnN0YXJ0X2FkZHIgKyBpbmZvLT5sZW5ndGggPT0gYWRkcmVzczY0Lm1pbmltdW0pKSB7Ci0JCQlpbmZvLT5sZW5ndGggKz0gYWRkcmVzczY0LmFkZHJlc3NfbGVuZ3RoOworCQkgICAgKGluZm8tPnN0YXJ0X2FkZHIgKyBpbmZvLT5sZW5ndGggPT0gYWRkcmVzczY0LmFkZHJlc3MubWluaW11bSkpIHsKKwkJCWluZm8tPmxlbmd0aCArPSBhZGRyZXNzNjQuYWRkcmVzcy5hZGRyZXNzX2xlbmd0aDsKIAkJCXJldHVybiBBRV9PSzsKIAkJfQogCX0KQEAgLTExNCw4ICsxMTQsOCBAQAogCUlOSVRfTElTVF9IRUFEKCZuZXctPmxpc3QpOwogCW5ldy0+Y2FjaGluZyA9IGFkZHJlc3M2NC5pbmZvLm1lbS5jYWNoaW5nOwogCW5ldy0+d3JpdGVfcHJvdGVjdCA9IGFkZHJlc3M2NC5pbmZvLm1lbS53cml0ZV9wcm90ZWN0OwotCW5ldy0+c3RhcnRfYWRkciA9IGFkZHJlc3M2NC5taW5pbXVtOwotCW5ldy0+bGVuZ3RoID0gYWRkcmVzczY0LmFkZHJlc3NfbGVuZ3RoOworCW5ldy0+c3RhcnRfYWRkciA9IGFkZHJlc3M2NC5hZGRyZXNzLm1pbmltdW07CisJbmV3LT5sZW5ndGggPSBhZGRyZXNzNjQuYWRkcmVzcy5hZGRyZXNzX2xlbmd0aDsKIAlsaXN0X2FkZF90YWlsKCZuZXctPmxpc3QsICZtZW1fZGV2aWNlLT5yZXNfbGlzdCk7CiAKIAlyZXR1cm4gQUVfT0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9hY3BpL2FjcGlfcGxhdGZvcm0uYwppbmRleCA2YmE4YmViLi4xMjg0MTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaV9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpX3BsYXRmb3JtLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFjcGlfcGFyZW50OwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaW5mbyBwZGV2aW5mbzsKLQlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF9lbnRyeSAqcmVudHJ5OworCXN0cnVjdCByZXNvdXJjZV9lbnRyeSAqcmVudHJ5OwogCXN0cnVjdCBsaXN0X2hlYWQgcmVzb3VyY2VfbGlzdDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlcyA9IE5VTEw7CiAJaW50IGNvdW50OwpAQCAtNzEsNyArNzEsNyBAQAogCQl9CiAJCWNvdW50ID0gMDsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShyZW50cnksICZyZXNvdXJjZV9saXN0LCBub2RlKQotCQkJcmVzb3VyY2VzW2NvdW50KytdID0gcmVudHJ5LT5yZXM7CisJCQlyZXNvdXJjZXNbY291bnQrK10gPSAqcmVudHJ5LT5yZXM7CiAKIAkJYWNwaV9kZXZfZnJlZV9yZXNvdXJjZV9saXN0KCZyZXNvdXJjZV9saXN0KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjYXBwcy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2FwcHMuaAppbmRleCAzZDJjODgyLi5kODYzMDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjYXBwcy5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNhcHBzLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00Nyw3ICs0Nyw3IEBACiAvKiBDb21tb24gaW5mbyBmb3IgdG9vbCBzaWdub25zICovCiAKICNkZWZpbmUgQUNQSUNBX05BTUUgICAgICAgICAgICAgICAgICJJbnRlbCBBQ1BJIENvbXBvbmVudCBBcmNoaXRlY3R1cmUiCi0jZGVmaW5lIEFDUElDQV9DT1BZUklHSFQgICAgICAgICAgICAiQ29weXJpZ2h0IChjKSAyMDAwIC0gMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbiIKKyNkZWZpbmUgQUNQSUNBX0NPUFlSSUdIVCAgICAgICAgICAgICJDb3B5cmlnaHQgKGMpIDIwMDAgLSAyMDE1IEludGVsIENvcnBvcmF0aW9uIgogCiAjaWYgQUNQSV9NQUNISU5FX1dJRFRIID09IDY0CiAjZGVmaW5lIEFDUElfV0lEVEggICAgICAgICAgIi02NCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb21tb24uaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNjb21tb24uaAppbmRleCA2ZjFjNjE2Li44NTNhYTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjY29tbW9uLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2NvbW1vbi5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2RlYnVnLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZGVidWcuaAppbmRleCAxZDAyNmZmLi40MTY5YmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZGVidWcuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZGVidWcuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNkaXNwYXQuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNkaXNwYXQuaAppbmRleCBkM2UyY2MzLi40MDhmMDRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZGlzcGF0LmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2Rpc3BhdC5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2V2ZW50cy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2V2ZW50cy5oCmluZGV4IDdhNzgxMWEuLjIyODcwNGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZXZlbnRzLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2V2ZW50cy5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTQzLDggKzE0Myw2IEBACiBhY3BpX3N0YXR1cwogYWNwaV9ldl93YWxrX2dwZV9saXN0KGFjcGlfZ3BlX2NhbGxiYWNrIGdwZV93YWxrX2NhbGxiYWNrLCB2b2lkICpjb250ZXh0KTsKIAotdTggYWNwaV9ldl92YWxpZF9ncGVfZXZlbnQoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvKTsKLQogYWNwaV9zdGF0dXMKIGFjcGlfZXZfZ2V0X2dwZV9kZXZpY2Uoc3RydWN0IGFjcGlfZ3BlX3hydXB0X2luZm8gKmdwZV94cnVwdF9pbmZvLAogCQkgICAgICAgc3RydWN0IGFjcGlfZ3BlX2Jsb2NrX2luZm8gKmdwZV9ibG9jaywgdm9pZCAqY29udGV4dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZ2xvYmFsLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjZ2xvYmFsLmgKaW5kZXggN2Y2MDU4Mi4uYTE2NWQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2dsb2JhbC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNnbG9iYWwuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNod2FyZS5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmgKaW5kZXggYzMxOGQzZS4uMTk2YTU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2h3YXJlLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaW50ZXJwLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjaW50ZXJwLmgKaW5kZXggYjAxZjcxYy4uMTg4NmJkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2ludGVycC5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNpbnRlcnAuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKaW5kZXggNjgwZDIzYi4uN2FkZDMyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbWFjcm9zLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbWFjcm9zLmgKaW5kZXggNGJjZWIxMS4uY2Y2MDdmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY21hY3Jvcy5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNtYWNyb3MuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNuYW1lc3AuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNuYW1lc3AuaAppbmRleCBlZTFjMDQwLi45NTJmYmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjbmFtZXNwLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY25hbWVzcC5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY29iamVjdC5oCmluZGV4IDhhYmIzOTMuLjNlOTcyMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvYmplY3QuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb2JqZWN0LmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb3Bjb2RlLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjb3Bjb2RlLmgKaW5kZXggZGRhMGU2YS4uYTVmMTdkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY29wY29kZS5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNvcGNvZGUuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwYXJzZXIuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwYXJzZXIuaAppbmRleCA2MTY4Yjg1Li43NGEzOTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcGFyc2VyLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3BhcnNlci5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3ByZWRlZi5oCmluZGV4IGJkMzkwOGQuLmE5NzJkMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNwcmVkZWYuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcHJlZGVmLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjcmVzcmMuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNyZXNyYy5oCmluZGV4IDRiMDA4ZTguLmVmYzRjNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNyZXNyYy5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNyZXNyYy5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3N0cnVjdC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3N0cnVjdC5oCmluZGV4IGNmNzM0NjEuLmQxNGI1NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNzdHJ1Y3QuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Fjc3RydWN0LmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdGFibGVzLmggYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FjdGFibGVzLmgKaW5kZXggMWFmZTQ2ZS4uMWMxMjdhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3RhYmxlcy5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN0YWJsZXMuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWN1dGlscy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3V0aWxzLmgKaW5kZXggNDg2ZDM0Mi4uYzJmMDNlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY3V0aWxzLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY3V0aWxzLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2FtbGNvZGUuaCBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1sY29kZS5oCmluZGV4IDU5MDhjY2UuLjNhOTUwNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1sY29kZS5oCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1sY29kZS5oCkBAIC03LDcgKzcsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9hbWxyZXNyYy5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hbWxyZXNyYy5oCmluZGV4IDNhMGJlZWIuLmVlMGNkZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYW1scmVzcmMuaAorKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2FtbHJlc3JjLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzYXJncy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc2FyZ3MuYwppbmRleCA3MjBiMWNkLi4zZTY5ODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzYXJncy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNhcmdzLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzY29udHJvbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc2NvbnRyb2wuYwppbmRleCA4ZGFmOWRlLi4zOWRhOWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzY29udHJvbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNjb250cm9sLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzZmllbGQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNmaWVsZC5jCmluZGV4IGM1NzY2NjEuLjQzYjQwZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNmaWVsZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNmaWVsZC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc2luaXQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNpbml0LmMKaW5kZXggYWVlNWU0NWYuLmJiZTc0YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc2luaXQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtZXRob2QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtZXRob2QuYwppbmRleCAzYzdmNzM3Li5kNzI1NjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbWV0aG9kLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc21ldGhvZC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc210aGRhdC5jCmluZGV4IGI2NzUyMmQuLjJlNGM0MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNtdGhkYXQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2RzbXRoZGF0LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc29iamVjdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc29iamVjdC5jCmluZGV4IGExZTdlNmIuLjhhN2IwN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvYmplY3QuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb2JqZWN0LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb3Bjb2RlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzb3Bjb2RlLmMKaW5kZXggNmMwNzU5Yy4uNzcyNDQxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc29wY29kZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHNvcGNvZGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN1dGlscy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3V0aWxzLmMKaW5kZXggOWY3NDc5NS4uZTVmZjg5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3V0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3V0aWxzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dleGVjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2V4ZWMuYwppbmRleCBmN2Y1MTA3Li5kZjU0ZDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2V4ZWMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2V4ZWMuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3bG9hZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dsb2FkLmMKaW5kZXggMTU2MjNkYS4uODQzOTQyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dsb2FkLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dsb2FkLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2xvYWQyLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd2xvYWQyLmMKaW5kZXggMmFjMjhkMi4uZmNhYTMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dsb2FkMi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3bG9hZDIuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3c2NvcGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3c2NvcGUuYwppbmRleCA5ZDZlMmMxLi40M2IzZWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd3Njb3BlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dzY29wZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dzdGF0ZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9kc3dzdGF0ZS5jCmluZGV4IDI0ZjdkNWUuLjg5YWMyMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZHN3c3RhdGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2Rzd3N0YXRlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2ZXZlbnQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZldmVudC5jCmluZGV4IGM3YmZmZmYuLmJmNjg3M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZldmVudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZldmVudC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdsb2NrLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z2xvY2suYwppbmRleCAzMzkzYTczLi5iNzhkYzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z2xvY2suYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z2xvY2suYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYwppbmRleCBhYTcwMTU0Li41ZWQwNjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTE0LDE3ICsxMTQsNiBAQAogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShldl9lbmFibGVfZ3BlKTsKIAotCS8qCi0JICogV2Ugd2lsbCBvbmx5IGFsbG93IGEgR1BFIHRvIGJlIGVuYWJsZWQgaWYgaXQgaGFzIGVpdGhlciBhbiBhc3NvY2lhdGVkCi0JICogbWV0aG9kIChfTHh4L19FeHgpIG9yIGEgaGFuZGxlciwgb3IgaXMgdXNpbmcgdGhlIGltcGxpY2l0IG5vdGlmeQotCSAqIGZlYXR1cmUuIE90aGVyd2lzZSwgdGhlIEdQRSB3aWxsIGJlIGltbWVkaWF0ZWx5IGRpc2FibGVkIGJ5Ci0JICogYWNwaV9ldl9ncGVfZGlzcGF0Y2ggdGhlIGZpcnN0IHRpbWUgaXQgZmlyZXMuCi0JICovCi0JaWYgKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSA9PQotCSAgICBBQ1BJX0dQRV9ESVNQQVRDSF9OT05FKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9OT19IQU5ETEVSKTsKLQl9Ci0KIAkvKiBDbGVhciB0aGUgR1BFIChvZiBzdGFsZSBldmVudHMpICovCiAKIAlzdGF0dXMgPSBhY3BpX2h3X2NsZWFyX2dwZShncGVfZXZlbnRfaW5mbyk7CkBAIC0zMzksNyArMzI4LDExIEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCXN0cnVjdCBhY3BpX2dwZV9ibG9ja19pbmZvICpncGVfYmxvY2s7CisJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmdwZV9kZXZpY2U7CiAJc3RydWN0IGFjcGlfZ3BlX3JlZ2lzdGVyX2luZm8gKmdwZV9yZWdpc3Rlcl9pbmZvOworCXN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbzsKKwl1MzIgZ3BlX251bWJlcjsKKwlzdHJ1Y3QgYWNwaV9ncGVfaGFuZGxlcl9pbmZvICpncGVfaGFuZGxlcl9pbmZvOwogCXUzMiBpbnRfc3RhdHVzID0gQUNQSV9JTlRFUlJVUFRfTk9UX0hBTkRMRUQ7CiAJdTggZW5hYmxlZF9zdGF0dXNfYnl0ZTsKIAl1MzIgc3RhdHVzX3JlZzsKQEAgLTM2Nyw2ICszNjAsOCBAQAogCiAJZ3BlX2Jsb2NrID0gZ3BlX3hydXB0X2xpc3QtPmdwZV9ibG9ja19saXN0X2hlYWQ7CiAJd2hpbGUgKGdwZV9ibG9jaykgeworCQlncGVfZGV2aWNlID0gZ3BlX2Jsb2NrLT5ub2RlOworCiAJCS8qCiAJCSAqIFJlYWQgYWxsIG9mIHRoZSA4LWJpdCBHUEUgc3RhdHVzIGFuZCBlbmFibGUgcmVnaXN0ZXJzIGluIHRoaXMgR1BFCiAJCSAqIGJsb2NrLCBzYXZpbmcgYWxsIG9mIHRoZW0uIEZpbmQgYWxsIGN1cnJlbnRseSBhY3RpdmUgR1AgZXZlbnRzLgpAQCAtNDQyLDE2ICs0MzcsNjggQEAKIAogCQkJCS8qIEV4YW1pbmUgb25lIEdQRSBiaXQgKi8KIAorCQkJCWdwZV9ldmVudF9pbmZvID0KKwkJCQkgICAgJmdwZV9ibG9jay0+CisJCQkJICAgIGV2ZW50X2luZm9bKChhY3BpX3NpemUpIGkgKgorCQkJCQkJQUNQSV9HUEVfUkVHSVNURVJfV0lEVEgpICsgal07CisJCQkJZ3BlX251bWJlciA9CisJCQkJICAgIGogKyBncGVfcmVnaXN0ZXJfaW5mby0+YmFzZV9ncGVfbnVtYmVyOworCiAJCQkJaWYgKGVuYWJsZWRfc3RhdHVzX2J5dGUgJiAoMSA8PCBqKSkgewotCQkJCQkvKgotCQkJCQkgKiBGb3VuZCBhbiBhY3RpdmUgR1BFLiBEaXNwYXRjaCB0aGUgZXZlbnQgdG8gYSBoYW5kbGVyCi0JCQkJCSAqIG9yIG1ldGhvZC4KLQkJCQkJICovCi0JCQkJCWludF9zdGF0dXMgfD0KLQkJCQkJICAgIGFjcGlfZXZfZ3BlX2Rpc3BhdGNoKGdwZV9ibG9jay0+Ci0JCQkJCQkJCSBub2RlLAotCQkJCQkJCQkgJmdwZV9ibG9jay0+Ci0JCQkJCQkJCSBldmVudF9pbmZvWygoYWNwaV9zaXplKSBpICogQUNQSV9HUEVfUkVHSVNURVJfV0lEVEgpICsgal0sIGogKyBncGVfcmVnaXN0ZXJfaW5mby0+YmFzZV9ncGVfbnVtYmVyKTsKKworCQkJCQkvKiBJbnZva2UgZ2xvYmFsIGV2ZW50IGhhbmRsZXIgaWYgcHJlc2VudCAqLworCisJCQkJCWFjcGlfZ3BlX2NvdW50Kys7CisJCQkJCWlmIChhY3BpX2dibF9nbG9iYWxfZXZlbnRfaGFuZGxlcikgeworCQkJCQkJYWNwaV9nYmxfZ2xvYmFsX2V2ZW50X2hhbmRsZXIKKwkJCQkJCSAgICAoQUNQSV9FVkVOVF9UWVBFX0dQRSwKKwkJCQkJCSAgICAgZ3BlX2RldmljZSwgZ3BlX251bWJlciwKKwkJCQkJCSAgICAgYWNwaV9nYmxfZ2xvYmFsX2V2ZW50X2hhbmRsZXJfY29udGV4dCk7CisJCQkJCX0KKworCQkJCQkvKiBGb3VuZCBhbiBhY3RpdmUgR1BFICovCisKKwkJCQkJaWYgKEFDUElfR1BFX0RJU1BBVENIX1RZUEUKKwkJCQkJICAgIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MpID09CisJCQkJCSAgICBBQ1BJX0dQRV9ESVNQQVRDSF9SQVdfSEFORExFUikgeworCisJCQkJCQkvKiBEaXNwYXRjaCB0aGUgZXZlbnQgdG8gYSByYXcgaGFuZGxlciAqLworCisJCQkJCQlncGVfaGFuZGxlcl9pbmZvID0KKwkJCQkJCSAgICBncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2guCisJCQkJCQkgICAgaGFuZGxlcjsKKworCQkJCQkJLyoKKwkJCQkJCSAqIFRoZXJlIGlzIG5vIHByb3RlY3Rpb24gYXJvdW5kIHRoZSBuYW1lc3BhY2Ugbm9kZQorCQkJCQkJICogYW5kIHRoZSBHUEUgaGFuZGxlciB0byBlbnN1cmUgYSBzYWZlIGRlc3RydWN0aW9uCisJCQkJCQkgKiBiZWNhdXNlOgorCQkJCQkJICogMS4gVGhlIG5hbWVzcGFjZSBub2RlIGlzIGV4cGVjdGVkIHRvIGFsd2F5cworCQkJCQkJICogICAgZXhpc3QgYWZ0ZXIgbG9hZGluZyBhIHRhYmxlLgorCQkJCQkJICogMi4gVGhlIEdQRSBoYW5kbGVyIGlzIGV4cGVjdGVkIHRvIGJlIGZsdXNoZWQgYnkKKwkJCQkJCSAqICAgIGFjcGlfb3Nfd2FpdF9ldmVudHNfY29tcGxldGUoKSBiZWZvcmUgdGhlCisJCQkJCQkgKiAgICBkZXN0cnVjdGlvbi4KKwkJCQkJCSAqLworCQkJCQkJYWNwaV9vc19yZWxlYXNlX2xvY2sKKwkJCQkJCSAgICAoYWNwaV9nYmxfZ3BlX2xvY2ssIGZsYWdzKTsKKwkJCQkJCWludF9zdGF0dXMgfD0KKwkJCQkJCSAgICBncGVfaGFuZGxlcl9pbmZvLT4KKwkJCQkJCSAgICBhZGRyZXNzKGdwZV9kZXZpY2UsCisJCQkJCQkJICAgIGdwZV9udW1iZXIsCisJCQkJCQkJICAgIGdwZV9oYW5kbGVyX2luZm8tPgorCQkJCQkJCSAgICBjb250ZXh0KTsKKwkJCQkJCWZsYWdzID0KKwkJCQkJCSAgICBhY3BpX29zX2FjcXVpcmVfbG9jaworCQkJCQkJICAgIChhY3BpX2dibF9ncGVfbG9jayk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKgorCQkJCQkJICogRGlzcGF0Y2ggdGhlIGV2ZW50IHRvIGEgc3RhbmRhcmQgaGFuZGxlciBvcgorCQkJCQkJICogbWV0aG9kLgorCQkJCQkJICovCisJCQkJCQlpbnRfc3RhdHVzIHw9CisJCQkJCQkgICAgYWNwaV9ldl9ncGVfZGlzcGF0Y2gKKwkJCQkJCSAgICAoZ3BlX2RldmljZSwgZ3BlX2V2ZW50X2luZm8sCisJCQkJCQkgICAgIGdwZV9udW1iZXIpOworCQkJCQl9CiAJCQkJfQogCQkJfQogCQl9CkBAIC00ODQsNTIgKzUzMSwxNSBAQAogc3RhdGljIHZvaWQgQUNQSV9TWVNURU1fWEZBQ0UgYWNwaV9ldl9hc3luY2hfZXhlY3V0ZV9ncGVfbWV0aG9kKHZvaWQgKmNvbnRleHQpCiB7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvID0gY29udGV4dDsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmxvY2FsX2dwZV9ldmVudF9pbmZvOworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCXN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm87CiAJc3RydWN0IGFjcGlfZ3BlX25vdGlmeV9pbmZvICpub3RpZnk7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2FzeW5jaF9leGVjdXRlX2dwZV9tZXRob2QpOwogCi0JLyogQWxsb2NhdGUgYSBsb2NhbCBHUEUgYmxvY2sgKi8KLQotCWxvY2FsX2dwZV9ldmVudF9pbmZvID0KLQkgICAgQUNQSV9BTExPQ0FURV9aRVJPRUQoc2l6ZW9mKHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvKSk7Ci0JaWYgKCFsb2NhbF9ncGVfZXZlbnRfaW5mbykgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfTk9fTUVNT1JZLCAid2hpbGUgaGFuZGxpbmcgYSBHUEUiKSk7Ci0JCXJldHVybl9WT0lEOwotCX0KLQotCXN0YXR1cyA9IGFjcGlfdXRfYWNxdWlyZV9tdXRleChBQ1BJX01UWF9FVkVOVFMpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0ZSRUUobG9jYWxfZ3BlX2V2ZW50X2luZm8pOwotCQlyZXR1cm5fVk9JRDsKLQl9Ci0KLQkvKiBNdXN0IHJldmFsaWRhdGUgdGhlIGdwZV9udW1iZXIvZ3BlX2Jsb2NrICovCi0KLQlpZiAoIWFjcGlfZXZfdmFsaWRfZ3BlX2V2ZW50KGdwZV9ldmVudF9pbmZvKSkgewotCQlzdGF0dXMgPSBhY3BpX3V0X3JlbGVhc2VfbXV0ZXgoQUNQSV9NVFhfRVZFTlRTKTsKLQkJQUNQSV9GUkVFKGxvY2FsX2dwZV9ldmVudF9pbmZvKTsKLQkJcmV0dXJuX1ZPSUQ7Ci0JfQotCi0JLyoKLQkgKiBUYWtlIGEgc25hcHNob3Qgb2YgdGhlIEdQRSBpbmZvIGZvciB0aGlzIGxldmVsIC0gd2UgY29weSB0aGUgaW5mbyB0bwotCSAqIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHJlbW92ZV9oYW5kbGVyL3JlbW92ZV9ibG9jay4KLQkgKi8KLQlBQ1BJX01FTUNQWShsb2NhbF9ncGVfZXZlbnRfaW5mbywgZ3BlX2V2ZW50X2luZm8sCi0JCSAgICBzaXplb2Yoc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8pKTsKLQotCXN0YXR1cyA9IGFjcGlfdXRfcmVsZWFzZV9tdXRleChBQ1BJX01UWF9FVkVOVFMpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0ZSRUUobG9jYWxfZ3BlX2V2ZW50X2luZm8pOwotCQlyZXR1cm5fVk9JRDsKLQl9Ci0KIAkvKiBEbyB0aGUgY29ycmVjdCBkaXNwYXRjaCAtIG5vcm1hbCBtZXRob2Qgb3IgaW1wbGljaXQgbm90aWZ5ICovCiAKLQlzd2l0Y2ggKGxvY2FsX2dwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0spIHsKKwlzd2l0Y2ggKEFDUElfR1BFX0RJU1BBVENIX1RZUEUoZ3BlX2V2ZW50X2luZm8tPmZsYWdzKSkgewogCWNhc2UgQUNQSV9HUEVfRElTUEFUQ0hfTk9USUZZOgogCQkvKgogCQkgKiBJbXBsaWNpdCBub3RpZnkuCkBAIC01NDIsNyArNTUyLDcgQEAKIAkJICogSnVuZSAyMDEyOiBFeHBhbmQgaW1wbGljaXQgbm90aWZ5IG1lY2hhbmlzbSB0byBzdXBwb3J0CiAJCSAqIG5vdGlmaWVzIG9uIG11bHRpcGxlIGRldmljZSBvYmplY3RzLgogCQkgKi8KLQkJbm90aWZ5ID0gbG9jYWxfZ3BlX2V2ZW50X2luZm8tPmRpc3BhdGNoLm5vdGlmeV9saXN0OworCQlub3RpZnkgPSBncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2gubm90aWZ5X2xpc3Q7CiAJCXdoaWxlIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSAmJiBub3RpZnkpIHsKIAkJCXN0YXR1cyA9CiAJCQkgICAgYWNwaV9ldl9xdWV1ZV9ub3RpZnlfcmVxdWVzdChub3RpZnktPmRldmljZV9ub2RlLApAQCAtNTY2LDcgKzU3Niw3IEBACiAJCQkgKiBfTHh4L19FeHggY29udHJvbCBtZXRob2QgdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIEdQRQogCQkJICovCiAJCQlpbmZvLT5wcmVmaXhfbm9kZSA9Ci0JCQkgICAgbG9jYWxfZ3BlX2V2ZW50X2luZm8tPmRpc3BhdGNoLm1ldGhvZF9ub2RlOworCQkJICAgIGdwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC5tZXRob2Rfbm9kZTsKIAkJCWluZm8tPmZsYWdzID0gQUNQSV9JR05PUkVfUkVUVVJOX1ZBTFVFOwogCiAJCQlzdGF0dXMgPSBhY3BpX25zX2V2YWx1YXRlKGluZm8pOwpAQCAtNTc2LDI1ICs1ODYsMjcgQEAKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAogCQkJCQkid2hpbGUgZXZhbHVhdGluZyBHUEUgbWV0aG9kIFslNC40c10iLAotCQkJCQlhY3BpX3V0X2dldF9ub2RlX25hbWUKLQkJCQkJKGxvY2FsX2dwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC4KLQkJCQkJIG1ldGhvZF9ub2RlKSkpOworCQkJCQlhY3BpX3V0X2dldF9ub2RlX25hbWUoZ3BlX2V2ZW50X2luZm8tPgorCQkJCQkJCSAgICAgIGRpc3BhdGNoLgorCQkJCQkJCSAgICAgIG1ldGhvZF9ub2RlKSkpOwogCQl9CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKIAotCQlyZXR1cm5fVk9JRDsJLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlnb3RvIGVycm9yX2V4aXQ7CS8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KIAl9CiAKIAkvKiBEZWZlciBlbmFibGluZyBvZiBHUEUgdW50aWwgYWxsIG5vdGlmeSBoYW5kbGVycyBhcmUgZG9uZSAqLwogCiAJc3RhdHVzID0gYWNwaV9vc19leGVjdXRlKE9TTF9OT1RJRllfSEFORExFUiwKLQkJCQkgYWNwaV9ldl9hc3luY2hfZW5hYmxlX2dwZSwKLQkJCQkgbG9jYWxfZ3BlX2V2ZW50X2luZm8pOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0ZSRUUobG9jYWxfZ3BlX2V2ZW50X2luZm8pOworCQkJCSBhY3BpX2V2X2FzeW5jaF9lbmFibGVfZ3BlLCBncGVfZXZlbnRfaW5mbyk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisJCXJldHVybl9WT0lEOwogCX0KKworZXJyb3JfZXhpdDoKKwlhY3BpX2V2X2FzeW5jaF9lbmFibGVfZ3BlKGdwZV9ldmVudF9pbmZvKTsKIAlyZXR1cm5fVk9JRDsKIH0KIApAQCAtNjIyLDcgKzYzNCw2IEBACiAJKHZvaWQpYWNwaV9ldl9maW5pc2hfZ3BlKGdwZV9ldmVudF9pbmZvKTsKIAlhY3BpX29zX3JlbGVhc2VfbG9jayhhY3BpX2dibF9ncGVfbG9jaywgZmxhZ3MpOwogCi0JQUNQSV9GUkVFKGdwZV9ldmVudF9pbmZvKTsKIAlyZXR1cm47CiB9CiAKQEAgLTY5MiwxNSArNzAzLDYgQEAKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfZ3BlX2Rpc3BhdGNoKTsKIAotCS8qIEludm9rZSBnbG9iYWwgZXZlbnQgaGFuZGxlciBpZiBwcmVzZW50ICovCi0KLQlhY3BpX2dwZV9jb3VudCsrOwotCWlmIChhY3BpX2dibF9nbG9iYWxfZXZlbnRfaGFuZGxlcikgewotCQlhY3BpX2dibF9nbG9iYWxfZXZlbnRfaGFuZGxlcihBQ1BJX0VWRU5UX1RZUEVfR1BFLCBncGVfZGV2aWNlLAotCQkJCQkgICAgICBncGVfbnVtYmVyLAotCQkJCQkgICAgICBhY3BpX2dibF9nbG9iYWxfZXZlbnRfaGFuZGxlcl9jb250ZXh0KTsKLQl9Ci0KIAkvKgogCSAqIEFsd2F5cyBkaXNhYmxlIHRoZSBHUEUgc28gdGhhdCBpdCBkb2VzIG5vdCBrZWVwIGZpcmluZyBiZWZvcmUKIAkgKiBhbnkgYXN5bmNocm9ub3VzIGFjdGl2aXR5IGNvbXBsZXRlcyAoZWl0aGVyIGZyb20gdGhlIGV4ZWN1dGlvbgpAQCAtNzQxLDcgKzc0Myw3IEBACiAJICogSWYgdGhlcmUgaXMgbmVpdGhlciBhIGhhbmRsZXIgbm9yIGEgbWV0aG9kLCBsZWF2ZSB0aGUgR1BFCiAJICogZGlzYWJsZWQuCiAJICovCi0Jc3dpdGNoIChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSB7CisJc3dpdGNoIChBQ1BJX0dQRV9ESVNQQVRDSF9UWVBFKGdwZV9ldmVudF9pbmZvLT5mbGFncykpIHsKIAljYXNlIEFDUElfR1BFX0RJU1BBVENIX0hBTkRMRVI6CiAKIAkJLyogSW52b2tlIHRoZSBpbnN0YWxsZWQgaGFuZGxlciAoYXQgaW50ZXJydXB0IGxldmVsKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWJsay5jCmluZGV4IGQ4NjY5OWUuLmUwZjI0YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVibGsuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlYmxrLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00NzQsMTAgKzQ3NCwxMiBAQAogCQkJICogSWdub3JlIEdQRXMgdGhhdCBoYXZlIG5vIGNvcnJlc3BvbmRpbmcgX0x4eC9fRXh4IG1ldGhvZAogCQkJICogYW5kIEdQRXMgdGhhdCBhcmUgdXNlZCB0byB3YWtlIHRoZSBzeXN0ZW0KIAkJCSAqLwotCQkJaWYgKCgoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSykgPT0KKwkJCWlmICgoQUNQSV9HUEVfRElTUEFUQ0hfVFlQRShncGVfZXZlbnRfaW5mby0+ZmxhZ3MpID09CiAJCQkgICAgIEFDUElfR1BFX0RJU1BBVENIX05PTkUpCi0JCQkgICAgfHwgKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKQotCQkJCT09IEFDUElfR1BFX0RJU1BBVENIX0hBTkRMRVIpCisJCQkgICAgfHwgKEFDUElfR1BFX0RJU1BBVENIX1RZUEUoZ3BlX2V2ZW50X2luZm8tPmZsYWdzKSA9PQorCQkJCUFDUElfR1BFX0RJU1BBVENIX0hBTkRMRVIpCisJCQkgICAgfHwgKEFDUElfR1BFX0RJU1BBVENIX1RZUEUoZ3BlX2V2ZW50X2luZm8tPmZsYWdzKSA9PQorCQkJCUFDUElfR1BFX0RJU1BBVENIX1JBV19IQU5ETEVSKQogCQkJICAgIHx8IChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9DQU5fV0FLRSkpIHsKIAkJCQljb250aW51ZTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVpbml0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlaW5pdC5jCmluZGV4IDdiZTkyODMuLjg4NDAyOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGVpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZWluaXQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQwMSwxNSArNDAxLDE3IEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9PSyk7CiAJfQogCi0JaWYgKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSA9PQotCSAgICBBQ1BJX0dQRV9ESVNQQVRDSF9IQU5ETEVSKSB7CisJaWYgKChBQ1BJX0dQRV9ESVNQQVRDSF9UWVBFKGdwZV9ldmVudF9pbmZvLT5mbGFncykgPT0KKwkgICAgIEFDUElfR1BFX0RJU1BBVENIX0hBTkRMRVIpIHx8CisJICAgIChBQ1BJX0dQRV9ESVNQQVRDSF9UWVBFKGdwZV9ldmVudF9pbmZvLT5mbGFncykgPT0KKwkgICAgIEFDUElfR1BFX0RJU1BBVENIX1JBV19IQU5ETEVSKSkgewogCiAJCS8qIElmIHRoZXJlIGlzIGFscmVhZHkgYSBoYW5kbGVyLCBpZ25vcmUgdGhpcyBHUEUgbWV0aG9kICovCiAKIAkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX09LKTsKIAl9CiAKLQlpZiAoKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0spID09CisJaWYgKEFDUElfR1BFX0RJU1BBVENIX1RZUEUoZ3BlX2V2ZW50X2luZm8tPmZsYWdzKSA9PQogCSAgICBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QpIHsKIAkJLyoKIAkJICogSWYgdGhlcmUgaXMgYWxyZWFkeSBhIG1ldGhvZCwgaWdub3JlIHRoaXMgbWV0aG9kLiBCdXQgY2hlY2sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGV1dGlsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BldXRpbC5jCmluZGV4IDE3ZTRiYmYuLjNhOTU4ZjM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZXV0aWwuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BldXRpbC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMTA4LDUzICsxMDgsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2V2X3ZhbGlkX2dwZV9ldmVudAotICoKLSAqIFBBUkFNRVRFUlM6ICBncGVfZXZlbnRfaW5mbyAgICAgICAgICAgICAgLSBJbmZvIGZvciB0aGlzIEdQRQotICoKLSAqIFJFVFVSTjogICAgICBUUlVFIGlmIHRoZSBncGVfZXZlbnQgaXMgdmFsaWQKLSAqCi0gKiBERVNDUklQVElPTjogVmFsaWRhdGUgYSBHUEUgZXZlbnQuIERPIE5PVCBDQUxMIEZST00gSU5URVJSVVBUIExFVkVMLgotICogICAgICAgICAgICAgIFNob3VsZCBiZSBjYWxsZWQgb25seSB3aGVuIHRoZSBHUEUgbGlzdHMgYXJlIHNlbWFwaG9yZSBsb2NrZWQKLSAqICAgICAgICAgICAgICBhbmQgbm90IHN1YmplY3QgdG8gY2hhbmdlLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXU4IGFjcGlfZXZfdmFsaWRfZ3BlX2V2ZW50KHN0cnVjdCBhY3BpX2dwZV9ldmVudF9pbmZvICpncGVfZXZlbnRfaW5mbykKLXsKLQlzdHJ1Y3QgYWNwaV9ncGVfeHJ1cHRfaW5mbyAqZ3BlX3hydXB0X2Jsb2NrOwotCXN0cnVjdCBhY3BpX2dwZV9ibG9ja19pbmZvICpncGVfYmxvY2s7Ci0KLQlBQ1BJX0ZVTkNUSU9OX0VOVFJZKCk7Ci0KLQkvKiBObyBuZWVkIGZvciBzcGluIGxvY2sgc2luY2Ugd2UgYXJlIG5vdCBjaGFuZ2luZyBhbnkgbGlzdCBlbGVtZW50cyAqLwotCi0JLyogV2FsayB0aGUgR1BFIGludGVycnVwdCBsZXZlbHMgKi8KLQotCWdwZV94cnVwdF9ibG9jayA9IGFjcGlfZ2JsX2dwZV94cnVwdF9saXN0X2hlYWQ7Ci0Jd2hpbGUgKGdwZV94cnVwdF9ibG9jaykgewotCQlncGVfYmxvY2sgPSBncGVfeHJ1cHRfYmxvY2stPmdwZV9ibG9ja19saXN0X2hlYWQ7Ci0KLQkJLyogV2FsayB0aGUgR1BFIGJsb2NrcyBvbiB0aGlzIGludGVycnVwdCBsZXZlbCAqLwotCi0JCXdoaWxlIChncGVfYmxvY2spIHsKLQkJCWlmICgoJmdwZV9ibG9jay0+ZXZlbnRfaW5mb1swXSA8PSBncGVfZXZlbnRfaW5mbykgJiYKLQkJCSAgICAoJmdwZV9ibG9jay0+ZXZlbnRfaW5mb1tncGVfYmxvY2stPmdwZV9jb3VudF0gPgotCQkJICAgICBncGVfZXZlbnRfaW5mbykpIHsKLQkJCQlyZXR1cm4gKFRSVUUpOwotCQkJfQotCi0JCQlncGVfYmxvY2sgPSBncGVfYmxvY2stPm5leHQ7Ci0JCX0KLQotCQlncGVfeHJ1cHRfYmxvY2sgPSBncGVfeHJ1cHRfYmxvY2stPm5leHQ7Ci0JfQotCi0JcmV0dXJuIChGQUxTRSk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogRlVOQ1RJT046ICAgIGFjcGlfZXZfZ2V0X2dwZV9kZXZpY2UKICAqCiAgKiBQQVJBTUVURVJTOiAgR1BFX1dBTEtfQ0FMTEJBQ0sKQEAgLTM3MSw4ICszMjQsMTAgQEAKIAkJCQkJCQkJIEFDUElfR1BFX1JFR0lTVEVSX1dJRFRIKQogCQkJCQkJCQkrIGpdOwogCi0JCQlpZiAoKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0spID09Ci0JCQkgICAgQUNQSV9HUEVfRElTUEFUQ0hfSEFORExFUikgeworCQkJaWYgKChBQ1BJX0dQRV9ESVNQQVRDSF9UWVBFKGdwZV9ldmVudF9pbmZvLT5mbGFncykgPT0KKwkJCSAgICAgQUNQSV9HUEVfRElTUEFUQ0hfSEFORExFUikgfHwKKwkJCSAgICAoQUNQSV9HUEVfRElTUEFUQ0hfVFlQRShncGVfZXZlbnRfaW5mby0+ZmxhZ3MpID09CisJCQkgICAgIEFDUElfR1BFX0RJU1BBVENIX1JBV19IQU5ETEVSKSkgewogCiAJCQkJLyogRGVsZXRlIGFuIGluc3RhbGxlZCBoYW5kbGVyIGJsb2NrICovCiAKQEAgLTM4MCwxMCArMzM1LDggQEAKIAkJCQlncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2guaGFuZGxlciA9IE5VTEw7CiAJCQkJZ3BlX2V2ZW50X2luZm8tPmZsYWdzICY9CiAJCQkJICAgIH5BQ1BJX0dQRV9ESVNQQVRDSF9NQVNLOwotCQkJfSBlbHNlCi0JCQkgICAgaWYgKChncGVfZXZlbnRfaW5mby0+Ci0JCQkJIGZsYWdzICYgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSykgPT0KLQkJCQlBQ1BJX0dQRV9ESVNQQVRDSF9OT1RJRlkpIHsKKwkJCX0gZWxzZSBpZiAoQUNQSV9HUEVfRElTUEFUQ0hfVFlQRShncGVfZXZlbnRfaW5mby0+ZmxhZ3MpCisJCQkJICAgPT0gQUNQSV9HUEVfRElTUEFUQ0hfTk9USUZZKSB7CiAKIAkJCQkvKiBEZWxldGUgdGhlIGltcGxpY2l0IG5vdGlmaWNhdGlvbiBkZXZpY2UgbGlzdCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2aGFuZGxlci5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmhhbmRsZXIuYwppbmRleCA3OGFjMjkzLi43NGU4NTk1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldmhhbmRsZXIuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2aGFuZGxlci5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldm1pc2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZtaXNjLmMKaW5kZXggMjRlYTM0Mi4uZjdjOWRmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldm1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2bWlzYy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJlZ2lvbi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJlZ2lvbi5jCmluZGV4IDhlYjg1NzUuLjlhYmFjZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZWdpb24uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmVnaW9uLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmduaW5pLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2cmduaW5pLmMKaW5kZXggMWIxNDhhNC4uZGEzMjMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnJnbmluaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZyZ25pbmkuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZzY2kuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZzY2kuYwppbmRleCAyOTYzMGUzLi4wMzY2NzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2c2NpLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnNjaS5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmFjZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmYWNlLmMKaW5kZXggNTVhNThmMy4uODFmMmQ5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmYWNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmYWNlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC01MSw2ICs1MSwxNiBAQAogCiAjZGVmaW5lIF9DT01QT05FTlQgICAgICAgICAgQUNQSV9FVkVOVFMKIEFDUElfTU9EVUxFX05BTUUoImV2eGZhY2UiKQorI2lmICghQUNQSV9SRURVQ0VEX0hBUkRXQVJFKQorLyogTG9jYWwgcHJvdG90eXBlcyAqLworc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX2V2X2luc3RhbGxfZ3BlX2hhbmRsZXIoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwKKwkJCSAgICB1MzIgZ3BlX251bWJlciwKKwkJCSAgICB1MzIgdHlwZSwKKwkJCSAgICB1OCBpc19yYXdfaGFuZGxlciwKKwkJCSAgICBhY3BpX2dwZV9oYW5kbGVyIGFkZHJlc3MsIHZvaWQgKmNvbnRleHQpOworCisjZW5kaWYKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzYsNiArODYsNyBAQAogICogICAgICAgICAgICAgIGhhbmRsZXJzLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKIGFjcGlfc3RhdHVzCiBhY3BpX2luc3RhbGxfbm90aWZ5X2hhbmRsZXIoYWNwaV9oYW5kbGUgZGV2aWNlLAogCQkJICAgIHUzMiBoYW5kbGVyX3R5cGUsCkBAIC03MTcsMzIgKzcyOCwzNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX2luc3RhbGxfZ3BlX2hhbmRsZXIKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2V2X2luc3RhbGxfZ3BlX2hhbmRsZXIKICAqCiAgKiBQQVJBTUVURVJTOiAgZ3BlX2RldmljZSAgICAgIC0gTmFtZXNwYWNlIG5vZGUgZm9yIHRoZSBHUEUgKE5VTEwgZm9yIEZBRFQKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVkIEdQRXMpCiAgKiAgICAgICAgICAgICAgZ3BlX251bWJlciAgICAgIC0gVGhlIEdQRSBudW1iZXIgd2l0aGluIHRoZSBHUEUgYmxvY2sKICAqICAgICAgICAgICAgICB0eXBlICAgICAgICAgICAgLSBXaGV0aGVyIHRoaXMgR1BFIHNob3VsZCBiZSB0cmVhdGVkIGFzIGFuCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS0gb3IgbGV2ZWwtdHJpZ2dlcmVkIGludGVycnVwdC4KKyAqICAgICAgICAgICAgICBpc19yYXdfaGFuZGxlciAgLSBXaGV0aGVyIHRoaXMgR1BFIHNob3VsZCBiZSBoYW5kbGVkIHVzaW5nCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHNwZWNpYWwgR1BFIGhhbmRsZXIgbW9kZS4KICAqICAgICAgICAgICAgICBhZGRyZXNzICAgICAgICAgLSBBZGRyZXNzIG9mIHRoZSBoYW5kbGVyCiAgKiAgICAgICAgICAgICAgY29udGV4dCAgICAgICAgIC0gVmFsdWUgcGFzc2VkIHRvIHRoZSBoYW5kbGVyIG9uIGVhY2ggR1BFCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cwogICoKLSAqIERFU0NSSVBUSU9OOiBJbnN0YWxsIGEgaGFuZGxlciBmb3IgYSBHZW5lcmFsIFB1cnBvc2UgRXZlbnQuCisgKiBERVNDUklQVElPTjogSW50ZXJuYWwgZnVuY3Rpb24gdG8gaW5zdGFsbCBhIGhhbmRsZXIgZm9yIGEgR2VuZXJhbCBQdXJwb3NlCisgKiAgICAgICAgICAgICAgRXZlbnQuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWFjcGlfc3RhdHVzCi1hY3BpX2luc3RhbGxfZ3BlX2hhbmRsZXIoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwKLQkJCSB1MzIgZ3BlX251bWJlciwKLQkJCSB1MzIgdHlwZSwgYWNwaV9ncGVfaGFuZGxlciBhZGRyZXNzLCB2b2lkICpjb250ZXh0KQorc3RhdGljIGFjcGlfc3RhdHVzCithY3BpX2V2X2luc3RhbGxfZ3BlX2hhbmRsZXIoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwKKwkJCSAgICB1MzIgZ3BlX251bWJlciwKKwkJCSAgICB1MzIgdHlwZSwKKwkJCSAgICB1OCBpc19yYXdfaGFuZGxlciwKKwkJCSAgICBhY3BpX2dwZV9oYW5kbGVyIGFkZHJlc3MsIHZvaWQgKmNvbnRleHQpCiB7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOwogCXN0cnVjdCBhY3BpX2dwZV9oYW5kbGVyX2luZm8gKmhhbmRsZXI7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOwogCi0JQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2luc3RhbGxfZ3BlX2hhbmRsZXIpOworCUFDUElfRlVOQ1RJT05fVFJBQ0UoZXZfaW5zdGFsbF9ncGVfaGFuZGxlcik7CiAKIAkvKiBQYXJhbWV0ZXIgdmFsaWRhdGlvbiAqLwogCkBAIC03NzUsOCArNzkxLDEwIEBACiAKIAkvKiBNYWtlIHN1cmUgdGhhdCB0aGVyZSBpc24ndCBhIGhhbmRsZXIgdGhlcmUgYWxyZWFkeSAqLwogCi0JaWYgKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSA9PQotCSAgICBBQ1BJX0dQRV9ESVNQQVRDSF9IQU5ETEVSKSB7CisJaWYgKChBQ1BJX0dQRV9ESVNQQVRDSF9UWVBFKGdwZV9ldmVudF9pbmZvLT5mbGFncykgPT0KKwkgICAgIEFDUElfR1BFX0RJU1BBVENIX0hBTkRMRVIpIHx8CisJICAgIChBQ1BJX0dQRV9ESVNQQVRDSF9UWVBFKGdwZV9ldmVudF9pbmZvLT5mbGFncykgPT0KKwkgICAgIEFDUElfR1BFX0RJU1BBVENIX1JBV19IQU5ETEVSKSkgewogCQlzdGF0dXMgPSBBRV9BTFJFQURZX0VYSVNUUzsKIAkJZ290byBmcmVlX2FuZF9leGl0OwogCX0KQEAgLTc5Myw5ICs4MTEsMTAgQEAKIAkgKiBhdXRvbWF0aWNhbGx5IGR1cmluZyBpbml0aWFsaXphdGlvbiwgaW4gd2hpY2ggY2FzZSBpdCBoYXMgdG8gYmUKIAkgKiBkaXNhYmxlZCBub3cgdG8gYXZvaWQgc3B1cmlvdXMgZXhlY3V0aW9uIG9mIHRoZSBoYW5kbGVyLgogCSAqLwotCWlmICgoKGhhbmRsZXItPm9yaWdpbmFsX2ZsYWdzICYgQUNQSV9HUEVfRElTUEFUQ0hfTUVUSE9EKSB8fAotCSAgICAgKGhhbmRsZXItPm9yaWdpbmFsX2ZsYWdzICYgQUNQSV9HUEVfRElTUEFUQ0hfTk9USUZZKSkgJiYKLQkgICAgZ3BlX2V2ZW50X2luZm8tPnJ1bnRpbWVfY291bnQpIHsKKwlpZiAoKChBQ1BJX0dQRV9ESVNQQVRDSF9UWVBFKGhhbmRsZXItPm9yaWdpbmFsX2ZsYWdzKSA9PQorCSAgICAgIEFDUElfR1BFX0RJU1BBVENIX01FVEhPRCkgfHwKKwkgICAgIChBQ1BJX0dQRV9ESVNQQVRDSF9UWVBFKGhhbmRsZXItPm9yaWdpbmFsX2ZsYWdzKSA9PQorCSAgICAgIEFDUElfR1BFX0RJU1BBVENIX05PVElGWSkpICYmIGdwZV9ldmVudF9pbmZvLT5ydW50aW1lX2NvdW50KSB7CiAJCWhhbmRsZXItPm9yaWdpbmFsbHlfZW5hYmxlZCA9IFRSVUU7CiAJCSh2b2lkKWFjcGlfZXZfcmVtb3ZlX2dwZV9yZWZlcmVuY2UoZ3BlX2V2ZW50X2luZm8pOwogCkBAIC04MTYsNyArODM1LDEwIEBACiAKIAlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJj0KIAkgICAgfihBQ1BJX0dQRV9YUlVQVF9UWVBFX01BU0sgfCBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKTsKLQlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgfD0gKHU4KSh0eXBlIHwgQUNQSV9HUEVfRElTUEFUQ0hfSEFORExFUik7CisJZ3BlX2V2ZW50X2luZm8tPmZsYWdzIHw9CisJICAgICh1OCkodHlwZSB8CisJCSAoaXNfcmF3X2hhbmRsZXIgPyBBQ1BJX0dQRV9ESVNQQVRDSF9SQVdfSEFORExFUiA6CisJCSAgQUNQSV9HUEVfRElTUEFUQ0hfSEFORExFUikpOwogCiAJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2ssIGZsYWdzKTsKIApAQCAtODMwLDEwICs4NTIsNzggQEAKIAlnb3RvIHVubG9ja19hbmRfZXhpdDsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9pbnN0YWxsX2dwZV9oYW5kbGVyCisgKgorICogUEFSQU1FVEVSUzogIGdwZV9kZXZpY2UgICAgICAtIE5hbWVzcGFjZSBub2RlIGZvciB0aGUgR1BFIChOVUxMIGZvciBGQURUCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBHUEVzKQorICogICAgICAgICAgICAgIGdwZV9udW1iZXIgICAgICAtIFRoZSBHUEUgbnVtYmVyIHdpdGhpbiB0aGUgR1BFIGJsb2NrCisgKiAgICAgICAgICAgICAgdHlwZSAgICAgICAgICAgIC0gV2hldGhlciB0aGlzIEdQRSBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2UtIG9yIGxldmVsLXRyaWdnZXJlZCBpbnRlcnJ1cHQuCisgKiAgICAgICAgICAgICAgYWRkcmVzcyAgICAgICAgIC0gQWRkcmVzcyBvZiB0aGUgaGFuZGxlcgorICogICAgICAgICAgICAgIGNvbnRleHQgICAgICAgICAtIFZhbHVlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBvbiBlYWNoIEdQRQorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogSW5zdGFsbCBhIGhhbmRsZXIgZm9yIGEgR2VuZXJhbCBQdXJwb3NlIEV2ZW50LgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2FjcGlfc3RhdHVzCithY3BpX2luc3RhbGxfZ3BlX2hhbmRsZXIoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwKKwkJCSB1MzIgZ3BlX251bWJlciwKKwkJCSB1MzIgdHlwZSwgYWNwaV9ncGVfaGFuZGxlciBhZGRyZXNzLCB2b2lkICpjb250ZXh0KQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9pbnN0YWxsX2dwZV9oYW5kbGVyKTsKKworCXN0YXR1cyA9CisJICAgIGFjcGlfZXZfaW5zdGFsbF9ncGVfaGFuZGxlcihncGVfZGV2aWNlLCBncGVfbnVtYmVyLCB0eXBlLCBGQUxTRSwKKwkJCQkJYWRkcmVzcywgY29udGV4dCk7CisKKwlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKK30KKwogQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfaW5zdGFsbF9ncGVfaGFuZGxlcikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCisgKiBGVU5DVElPTjogICAgYWNwaV9pbnN0YWxsX2dwZV9yYXdfaGFuZGxlcgorICoKKyAqIFBBUkFNRVRFUlM6ICBncGVfZGV2aWNlICAgICAgLSBOYW1lc3BhY2Ugbm9kZSBmb3IgdGhlIEdQRSAoTlVMTCBmb3IgRkFEVAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZWQgR1BFcykKKyAqICAgICAgICAgICAgICBncGVfbnVtYmVyICAgICAgLSBUaGUgR1BFIG51bWJlciB3aXRoaW4gdGhlIEdQRSBibG9jaworICogICAgICAgICAgICAgIHR5cGUgICAgICAgICAgICAtIFdoZXRoZXIgdGhpcyBHUEUgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLSBvciBsZXZlbC10cmlnZ2VyZWQgaW50ZXJydXB0LgorICogICAgICAgICAgICAgIGFkZHJlc3MgICAgICAgICAtIEFkZHJlc3Mgb2YgdGhlIGhhbmRsZXIKKyAqICAgICAgICAgICAgICBjb250ZXh0ICAgICAgICAgLSBWYWx1ZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgb24gZWFjaCBHUEUKKyAqCisgKiBSRVRVUk46ICAgICAgU3RhdHVzCisgKgorICogREVTQ1JJUFRJT046IEluc3RhbGwgYSBoYW5kbGVyIGZvciBhIEdlbmVyYWwgUHVycG9zZSBFdmVudC4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworYWNwaV9zdGF0dXMKK2FjcGlfaW5zdGFsbF9ncGVfcmF3X2hhbmRsZXIoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwKKwkJCSAgICAgdTMyIGdwZV9udW1iZXIsCisJCQkgICAgIHUzMiB0eXBlLCBhY3BpX2dwZV9oYW5kbGVyIGFkZHJlc3MsIHZvaWQgKmNvbnRleHQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX2luc3RhbGxfZ3BlX3Jhd19oYW5kbGVyKTsKKworCXN0YXR1cyA9IGFjcGlfZXZfaW5zdGFsbF9ncGVfaGFuZGxlcihncGVfZGV2aWNlLCBncGVfbnVtYmVyLCB0eXBlLCBUUlVFLAorCQkJCQkgICAgIGFkZHJlc3MsIGNvbnRleHQpOworCisJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Cit9CisKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX2luc3RhbGxfZ3BlX3Jhd19oYW5kbGVyKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX3JlbW92ZV9ncGVfaGFuZGxlcgogICoKICAqIFBBUkFNRVRFUlM6ICBncGVfZGV2aWNlICAgICAgLSBOYW1lc3BhY2Ugbm9kZSBmb3IgdGhlIEdQRSAoTlVMTCBmb3IgRkFEVApAQCAtODgwLDggKzk3MCwxMCBAQAogCiAJLyogTWFrZSBzdXJlIHRoYXQgYSBoYW5kbGVyIGlzIGluZGVlZCBpbnN0YWxsZWQgKi8KIAotCWlmICgoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSykgIT0KLQkgICAgQUNQSV9HUEVfRElTUEFUQ0hfSEFORExFUikgeworCWlmICgoQUNQSV9HUEVfRElTUEFUQ0hfVFlQRShncGVfZXZlbnRfaW5mby0+ZmxhZ3MpICE9CisJICAgICBBQ1BJX0dQRV9ESVNQQVRDSF9IQU5ETEVSKSAmJgorCSAgICAoQUNQSV9HUEVfRElTUEFUQ0hfVFlQRShncGVfZXZlbnRfaW5mby0+ZmxhZ3MpICE9CisJICAgICBBQ1BJX0dQRV9ESVNQQVRDSF9SQVdfSEFORExFUikpIHsKIAkJc3RhdHVzID0gQUVfTk9UX0VYSVNUOwogCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAl9CkBAIC04OTYsNiArOTg4LDcgQEAKIAkvKiBSZW1vdmUgdGhlIGhhbmRsZXIgKi8KIAogCWhhbmRsZXIgPSBncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2guaGFuZGxlcjsKKwlncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2guaGFuZGxlciA9IE5VTEw7CiAKIAkvKiBSZXN0b3JlIE1ldGhvZCBub2RlIChpZiBhbnkpLCBzZXQgZGlzcGF0Y2ggZmxhZ3MgKi8KIApAQCAtOTA5LDkgKzEwMDIsMTAgQEAKIAkgKiBlbmFibGVkLCBpdCBzaG91bGQgYmUgZW5hYmxlZCBhdCB0aGlzIHBvaW50IHRvIHJlc3RvcmUgdGhlCiAJICogcG9zdC1pbml0aWFsaXphdGlvbiBjb25maWd1cmF0aW9uLgogCSAqLwotCWlmICgoKGhhbmRsZXItPm9yaWdpbmFsX2ZsYWdzICYgQUNQSV9HUEVfRElTUEFUQ0hfTUVUSE9EKSB8fAotCSAgICAgKGhhbmRsZXItPm9yaWdpbmFsX2ZsYWdzICYgQUNQSV9HUEVfRElTUEFUQ0hfTk9USUZZKSkgJiYKLQkgICAgaGFuZGxlci0+b3JpZ2luYWxseV9lbmFibGVkKSB7CisJaWYgKCgoQUNQSV9HUEVfRElTUEFUQ0hfVFlQRShoYW5kbGVyLT5vcmlnaW5hbF9mbGFncykgPT0KKwkgICAgICBBQ1BJX0dQRV9ESVNQQVRDSF9NRVRIT0QpIHx8CisJICAgICAoQUNQSV9HUEVfRElTUEFUQ0hfVFlQRShoYW5kbGVyLT5vcmlnaW5hbF9mbGFncykgPT0KKwkgICAgICBBQ1BJX0dQRV9ESVNQQVRDSF9OT1RJRlkpKSAmJiBoYW5kbGVyLT5vcmlnaW5hbGx5X2VuYWJsZWQpIHsKIAkJKHZvaWQpYWNwaV9ldl9hZGRfZ3BlX3JlZmVyZW5jZShncGVfZXZlbnRfaW5mbyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZldm50LmMKaW5kZXggYmI4Y2JmNS4uZGYwNmEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZXZudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmV2bnQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZmdwZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZ3BlLmMKaW5kZXggZTg4OWE1My4uNzBlYjQ3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZ3BlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZ3BlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0xMzIsNyArMTMyLDcgQEAKIAkgKi8KIAlncGVfZXZlbnRfaW5mbyA9IGFjcGlfZXZfZ2V0X2dwZV9ldmVudF9pbmZvKGdwZV9kZXZpY2UsIGdwZV9udW1iZXIpOwogCWlmIChncGVfZXZlbnRfaW5mbykgewotCQlpZiAoKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0spICE9CisJCWlmIChBQ1BJX0dQRV9ESVNQQVRDSF9UWVBFKGdwZV9ldmVudF9pbmZvLT5mbGFncykgIT0KIAkJICAgIEFDUElfR1BFX0RJU1BBVENIX05PTkUpIHsKIAkJCXN0YXR1cyA9IGFjcGlfZXZfYWRkX2dwZV9yZWZlcmVuY2UoZ3BlX2V2ZW50X2luZm8pOwogCQl9IGVsc2UgewpAQCAtMTgzLDYgKzE4Myw3NyBAQAogCiBBQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9kaXNhYmxlX2dwZSkKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBGVU5DVElPTjogICAgYWNwaV9zZXRfZ3BlCisgKgorICogUEFSQU1FVEVSUzogIGdwZV9kZXZpY2UgICAgICAgICAgLSBQYXJlbnQgR1BFIERldmljZS4gTlVMTCBmb3IgR1BFMC9HUEUxCisgKiAgICAgICAgICAgICAgZ3BlX251bWJlciAgICAgICAgICAtIEdQRSBsZXZlbCB3aXRoaW4gdGhlIEdQRSBibG9jaworICogICAgICAgICAgICAgIGFjdGlvbiAgICAgICAgICAgICAgLSBBQ1BJX0dQRV9FTkFCTEUgb3IgQUNQSV9HUEVfRElTQUJMRQorICoKKyAqIFJFVFVSTjogICAgICBTdGF0dXMKKyAqCisgKiBERVNDUklQVElPTjogRW5hYmxlIG9yIGRpc2FibGUgYW4gaW5kaXZpZHVhbCBHUEUuIFRoaXMgZnVuY3Rpb24gYnlwYXNzZXMKKyAqICAgICAgICAgICAgICB0aGUgcmVmZXJlbmNlIGNvdW50IG1lY2hhbmlzbSB1c2VkIGluIHRoZSBhY3BpX2VuYWJsZV9ncGUoKSwKKyAqICAgICAgICAgICAgICBhY3BpX2Rpc2FibGVfZ3BlKCkgaW50ZXJmYWNlcy4KKyAqICAgICAgICAgICAgICBUaGlzIEFQSSBpcyB0eXBpY2FsbHkgdXNlZCBieSB0aGUgR1BFIHJhdyBoYW5kbGVyIG1vZGUgZHJpdmVyCisgKiAgICAgICAgICAgICAgdG8gc3dpdGNoIGJldHdlZW4gdGhlIHBvbGxpbmcgbW9kZSBhbmQgdGhlIGludGVycnVwdCBtb2RlIGFmdGVyCisgKiAgICAgICAgICAgICAgdGhlIGRyaXZlciBoYXMgZW5hYmxlZCB0aGUgR1BFLgorICogICAgICAgICAgICAgIFRoZSBBUElzIHNob3VsZCBiZSBpbnZva2VkIGluIHRoaXMgb3JkZXI6CisgKiAgICAgICAgICAgICAgIGFjcGlfZW5hYmxlX2dwZSgpICAgICAgICAgICAgPC0gRW5zdXJlIHRoZSByZWZlcmVuY2UgY291bnQgPiAwCisgKiAgICAgICAgICAgICAgIGFjcGlfc2V0X2dwZShBQ1BJX0dQRV9ESVNBQkxFKSA8LSBFbnRlciBwb2xsaW5nIG1vZGUKKyAqICAgICAgICAgICAgICAgYWNwaV9zZXRfZ3BlKEFDUElfR1BFX0VOQUJMRSkgPC0gTGVhdmUgcG9sbGluZyBtb2RlCisgKiAgICAgICAgICAgICAgIGFjcGlfZGlzYWJsZV9ncGUoKSAgICAgICAgICAgPC0gRGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICoKKyAqIE5vdGU6IElmIGEgR1BFIGlzIHNoYXJlZCBieSAyIHNpbGljb24gY29tcG9uZW50cywgdGhlbiBib3RoIHRoZSBkcml2ZXJzCisgKiAgICAgICBzaG91bGQgc3VwcG9ydCBHUEUgcG9sbGluZyBtb2RlIG9yIGRpc2FibGluZyB0aGUgR1BFIGZvciBsb25nIHBlcmlvZAorICogICAgICAgZm9yIG9uZSBkcml2ZXIgbWF5IGJyZWFrIHRoZSBvdGhlci4gU28gdXNlIGl0IHdpdGggY2FyZSBzaW5jZSBhbGwKKyAqICAgICAgIGZpcm13YXJlIF9MeHgvX0V4eCBoYW5kbGVycyBjdXJyZW50bHkgcmVseSBvbiB0aGUgR1BFIGludGVycnVwdCBtb2RlLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCithY3BpX3N0YXR1cyBhY3BpX3NldF9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIsIHU4IGFjdGlvbikKK3sKKwlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOworCisJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3NldF9ncGUpOworCisJZmxhZ3MgPSBhY3BpX29zX2FjcXVpcmVfbG9jayhhY3BpX2dibF9ncGVfbG9jayk7CisKKwkvKiBFbnN1cmUgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgR1BFIG51bWJlciAqLworCisJZ3BlX2V2ZW50X2luZm8gPSBhY3BpX2V2X2dldF9ncGVfZXZlbnRfaW5mbyhncGVfZGV2aWNlLCBncGVfbnVtYmVyKTsKKwlpZiAoIWdwZV9ldmVudF9pbmZvKSB7CisJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CisJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCX0KKworCS8qIFBlcmZvcm0gdGhlIGFjdGlvbiAqLworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIEFDUElfR1BFX0VOQUJMRToKKworCQlzdGF0dXMgPSBhY3BpX2h3X2xvd19zZXRfZ3BlKGdwZV9ldmVudF9pbmZvLCBBQ1BJX0dQRV9FTkFCTEUpOworCQlicmVhazsKKworCWNhc2UgQUNQSV9HUEVfRElTQUJMRToKKworCQlzdGF0dXMgPSBhY3BpX2h3X2xvd19zZXRfZ3BlKGdwZV9ldmVudF9pbmZvLCBBQ1BJX0dQRV9ESVNBQkxFKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCisJCXN0YXR1cyA9IEFFX0JBRF9QQVJBTUVURVI7CisJCWJyZWFrOworCX0KKwordW5sb2NrX2FuZF9leGl0OgorCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrLCBmbGFncyk7CisJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7Cit9CisKK0FDUElfRVhQT1JUX1NZTUJPTChhY3BpX3NldF9ncGUpCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzEzLDcgKzM4NCw3IEBACiAJICoga25vd24gYXMgYW4gImltcGxpY2l0IG5vdGlmeSIuIE5vdGU6IFRoZSBHUEUgaXMgYXNzdW1lZCB0byBiZQogCSAqIGxldmVsLXRyaWdnZXJlZCAoZm9yIHdpbmRvd3MgY29tcGF0aWJpbGl0eSkuCiAJICovCi0JaWYgKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSA9PQorCWlmIChBQ1BJX0dQRV9ESVNQQVRDSF9UWVBFKGdwZV9ldmVudF9pbmZvLT5mbGFncykgPT0KIAkgICAgQUNQSV9HUEVfRElTUEFUQ0hfTk9ORSkgewogCQkvKgogCQkgKiBUaGlzIGlzIHRoZSBmaXJzdCBkZXZpY2UgZm9yIGltcGxpY2l0IG5vdGlmeSBvbiB0aGlzIEdQRS4KQEAgLTMyNyw3ICszOTgsNyBAQAogCSAqIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbXBsaWNpdCBub3RpZnkgb24gdGhpcyBHUEUsIGFkZAogCSAqIHRoaXMgZGV2aWNlIHRvIHRoZSBub3RpZnkgbGlzdC4KIAkgKi8KLQlpZiAoKGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0spID09CisJaWYgKEFDUElfR1BFX0RJU1BBVENIX1RZUEUoZ3BlX2V2ZW50X2luZm8tPmZsYWdzKSA9PQogCSAgICBBQ1BJX0dQRV9ESVNQQVRDSF9OT1RJRlkpIHsKIAogCQkvKiBFbnN1cmUgdGhhdCB0aGUgZGV2aWNlIGlzIG5vdCBhbHJlYWR5IGluIHRoZSBsaXN0ICovCkBAIC01MzAsNiArNjAxLDQ5IEBACiAKIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9ncGVfc3RhdHVzKQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEZVTkNUSU9OOiAgICBhY3BpX2ZpbmlzaF9ncGUKKyAqCisgKiBQQVJBTUVURVJTOiAgZ3BlX2RldmljZSAgICAgICAgICAtIE5hbWVzcGFjZSBub2RlIGZvciB0aGUgR1BFIEJsb2NrCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOVUxMIGZvciBGQURUIGRlZmluZWQgR1BFcykKKyAqICAgICAgICAgICAgICBncGVfbnVtYmVyICAgICAgICAgIC0gR1BFIGxldmVsIHdpdGhpbiB0aGUgR1BFIGJsb2NrCisgKgorICogUkVUVVJOOiAgICAgIFN0YXR1cworICoKKyAqIERFU0NSSVBUSU9OOiBDbGVhciBhbmQgY29uZGl0aW9uYWxseSByZWVuYWJsZSBhIEdQRS4gVGhpcyBjb21wbGV0ZXMgdGhlIEdQRQorICogICAgICAgICAgICAgIHByb2Nlc3NpbmcuIEludGVuZGVkIGZvciB1c2UgYnkgYXN5bmNocm9ub3VzIGhvc3QtaW5zdGFsbGVkCisgKiAgICAgICAgICAgICAgR1BFIGhhbmRsZXJzLiBUaGUgR1BFIGlzIG9ubHkgcmVlbmFibGVkIGlmIHRoZSBlbmFibGVfZm9yX3J1biBiaXQKKyAqICAgICAgICAgICAgICBpcyBzZXQgaW4gdGhlIEdQRSBpbmZvLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCithY3BpX3N0YXR1cyBhY3BpX2ZpbmlzaF9ncGUoYWNwaV9oYW5kbGUgZ3BlX2RldmljZSwgdTMyIGdwZV9udW1iZXIpCit7CisJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmdwZV9ldmVudF9pbmZvOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlhY3BpX2NwdV9mbGFncyBmbGFnczsKKworCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV9maW5pc2hfZ3BlKTsKKworCWZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOworCisJLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIEdQRSBudW1iZXIgKi8KKworCWdwZV9ldmVudF9pbmZvID0gYWNwaV9ldl9nZXRfZ3BlX2V2ZW50X2luZm8oZ3BlX2RldmljZSwgZ3BlX251bWJlcik7CisJaWYgKCFncGVfZXZlbnRfaW5mbykgeworCQlzdGF0dXMgPSBBRV9CQURfUEFSQU1FVEVSOworCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwl9CisKKwlzdGF0dXMgPSBhY3BpX2V2X2ZpbmlzaF9ncGUoZ3BlX2V2ZW50X2luZm8pOworCit1bmxvY2tfYW5kX2V4aXQ6CisJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKK30KKworQUNQSV9FWFBPUlRfU1lNQk9MKGFjcGlfZmluaXNoX2dwZSkKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIEZVTkNUSU9OOiAgICBhY3BpX2Rpc2FibGVfYWxsX2dwZXMKQEAgLTYwNCw3ICs3MTgsNiBAQAogICogICAgICAgICAgICAgIGFsbCBHUEUgYmxvY2tzLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIGFjcGlfc3RhdHVzIGFjcGlfZW5hYmxlX2FsbF93YWtldXBfZ3Blcyh2b2lkKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZnJlZ24uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZ4ZnJlZ24uYwppbmRleCAyZDZmMTg3Li5mMjFhZmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZyZWduLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmcmVnbi5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbmZpZy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbmZpZy5jCmluZGV4IDdkMjk0OTQuLjZlMGRmMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb25maWcuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29uZmlnLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29udnJ0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y29udnJ0LmMKaW5kZXggYzU0NTM4Ni4uODlhOTc2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGNvbnZydC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjb252cnQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjcmVhdGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhjcmVhdGUuYwppbmRleCA5NWQyM2RhLi5hYWVlYTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4Y3JlYXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGNyZWF0ZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGRlYnVnLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZGVidWcuYwppbmRleCA2ZmJmYWQ0Li5lNjdkMGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZGVidWcuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZGVidWcuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhkdW1wLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZHVtcC5jCmluZGV4IDBmMjNjM2YuLjdjMjEzYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhkdW1wLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGR1bXAuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmaWVsZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGZpZWxkLmMKaW5kZXggYjk5NDg0NS4uYzE2MWRkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leGZpZWxkLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leGZpZWxkLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4ZmxkaW8uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCmluZGV4IDFkMWIyN2EuLjQ5NDc5OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhmbGRpby5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG1pc2MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhtaXNjLmMKaW5kZXggMjIwN2U2Mi4uYjU2ZmM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bWlzYy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG11dGV4LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bXV0ZXguYwppbmRleCBiNDllYTJhLi40NzIwMzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bXV0ZXguYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4bXV0ZXguYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhuYW1lcy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG5hbWVzLmMKaW5kZXggZGJiMDNiNS4uNDUzYjAwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG5hbWVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG5hbWVzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcxLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcxLmMKaW5kZXggMWI4ZTk0MS4uNzc5MzA2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzEuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzIuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzIuYwppbmRleCAyZWRlNjU2Li5mY2M2MThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmcyLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMi5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnMy5jCmluZGV4IDM2Mzc2N2MuLmI4MTNmZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3BhcmczLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3Bhcmc2LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4b3Bhcmc2LmMKaW5kZXggMjllOWU5OS4uYzkzMGVkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leG9wYXJnNi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhvcGFyZzYuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhwcmVwLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cHJlcC5jCmluZGV4IDExOGU5NDIuLjRjMjgzNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhwcmVwLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHByZXAuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYwppbmRleCBjZDUyODhhLi4wZmUxODhlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlZ2lvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZWdpb24uYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNudGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNudGUuYwppbmRleCBhYjA2MDI2Li5jN2UzYjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzbnRlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc250ZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc29sdi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHJlc29sdi5jCmluZGV4IDNjZGU1NTMuLmI2YjdmM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvbHYuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzb2x2LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4cmVzb3AuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvcC5jCmluZGV4IDNhZjhkZTMuLmQyOTY0YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhyZXNvcC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmUuYwppbmRleCBkYWY0OWY3Li5hN2VlZTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmUuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yZW4uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yZW4uYwppbmRleCAwNGJkMTZjLi4zMTAxNjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3RvcmVuLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3Jlbi5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JvYi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHN0b3JvYi5jCmluZGV4IGZkMTEwMTguLjZmYTNjOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzdG9yb2IuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3Rvcm9iLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3lzdGVtLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V4c3lzdGVtLmMKaW5kZXggZjdkYTY0MS4uMDU0NTA2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHN5c3RlbS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXhzeXN0ZW0uYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXh1dGlscy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHV0aWxzLmMKaW5kZXggZDlkNzJkZi4uM2Y0MjI1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9leHV0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9leHV0aWxzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3YWNwaS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od2FjcGkuYwppbmRleCAxZTY2ZDk2Li5lNWM1OTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3YWNwaS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdhY3BpLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3ZXNsZWVwLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3ZXNsZWVwLmMKaW5kZXggODU4ZmRkNi4uZTU1OTlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od2VzbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdlc2xlZXAuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdncGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdncGUuYwppbmRleCA0OTQwMjdmLi44NGJjNTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3Z3BlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od2dwZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTQsNiArNTQsMTAgQEAKIAkJCQlzdHJ1Y3QgYWNwaV9ncGVfYmxvY2tfaW5mbyAqZ3BlX2Jsb2NrLAogCQkJCXZvaWQgKmNvbnRleHQpOwogCitzdGF0aWMgYWNwaV9zdGF0dXMKK2FjcGlfaHdfZ3BlX2VuYWJsZV93cml0ZSh1OCBlbmFibGVfbWFzaywKKwkJCSBzdHJ1Y3QgYWNwaV9ncGVfcmVnaXN0ZXJfaW5mbyAqZ3BlX3JlZ2lzdGVyX2luZm8pOworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogRlVOQ1RJT046CWFjcGlfaHdfZ2V0X2dwZV9yZWdpc3Rlcl9iaXQKQEAgLTE0Niw3ICsxNTAsNyBAQAogCiAJc3RhdHVzID0gYWNwaV9od193cml0ZShlbmFibGVfbWFzaywgJmdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfYWRkcmVzcyk7CiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpICYmIChhY3Rpb24gJiBBQ1BJX0dQRV9TQVZFX01BU0spKSB7Ci0JCWdwZV9yZWdpc3Rlcl9pbmZvLT5lbmFibGVfbWFzayA9IGVuYWJsZV9tYXNrOworCQlncGVfcmVnaXN0ZXJfaW5mby0+ZW5hYmxlX21hc2sgPSAodTgpZW5hYmxlX21hc2s7CiAJfQogCXJldHVybiAoc3RhdHVzKTsKIH0KQEAgLTIyMSw3ICsyMjUsNyBAQAogCiAJLyogR1BFIGN1cnJlbnRseSBoYW5kbGVkPyAqLwogCi0JaWYgKChncGVfZXZlbnRfaW5mby0+ZmxhZ3MgJiBBQ1BJX0dQRV9ESVNQQVRDSF9NQVNLKSAhPQorCWlmIChBQ1BJX0dQRV9ESVNQQVRDSF9UWVBFKGdwZV9ldmVudF9pbmZvLT5mbGFncykgIT0KIAkgICAgQUNQSV9HUEVfRElTUEFUQ0hfTk9ORSkgewogCQlsb2NhbF9ldmVudF9zdGF0dXMgfD0gQUNQSV9FVkVOVF9GTEFHX0hBU19IQU5ETEVSOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdwY2kuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdwY2kuYwppbmRleCA2YWFkZThlLi5jNTIxNGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3cGNpLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3BjaS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdyZWdzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3cmVncy5jCmluZGV4IGE0YzM0ZDIuLjNjZjc3YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdyZWdzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3JlZ3MuYwpAQCAtNiw3ICs2LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3c2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdzbGVlcC5jCmluZGV4IGQ1OTA2OTMuLjdkMjFjYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdzbGVlcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHdzbGVlcC5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3RpbWVyLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3dGltZXIuYwppbmRleCA3NmFiNWMxLi42NzVjNzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3dGltZXIuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3dGltZXIuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd2YWxpZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3ZhbGlkLmMKaW5kZXggNmI5MTkxMi4uMmJkMzNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9od3ZhbGlkLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3ZhbGlkLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZmFjZS5jCmluZGV4IDk2ZDAwN2RmLi41Zjk3NDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3eGZhY2UuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3eGZhY2UuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZnNsZWVwLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2h3eGZzbGVlcC5jCmluZGV4IDY5MjFjN2YuLjNiMzc2NzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvaHd4ZnNsZWVwLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9od3hmc2xlZXAuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhY2Nlc3MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhY2Nlc3MuYwppbmRleCBmMTI0OWUzLi4yNGZhMTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYWNjZXNzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FjY2Vzcy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhbGxvYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FsbG9jLmMKaW5kZXggNjA3ZWI5ZS4uZTEwN2Y5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FsbG9jLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FsbG9jLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FyZ3VtZW50cy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2FyZ3VtZW50cy5jCmluZGV4IDgwZmNmYzguLjVkMzQ3YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNhcmd1bWVudHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zYXJndW1lbnRzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zY29udmVydC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2NvbnZlcnQuYwppbmRleCBiNTU2NDJjLi4xYThiMzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zY29udmVydC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNjb252ZXJ0LmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXAuYwppbmRleCAzZDg4ZWY0Li44MGYwOTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcGR2LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZHVtcGR2LmMKaW5kZXggNDJkMzcxMC4uN2RjMzY3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc2R1bXBkdi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNkdW1wZHYuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zZXZhbC5jCmluZGV4IGU2MzRhMDUuLjdiY2M2OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2V2YWwuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2luaXQuYwppbmRleCBhM2ZiN2U0Li40YTg1YzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zaW5pdC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNpbml0LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc2xvYWQuYwppbmRleCA3YzlkMDE4Li5iZDZjZDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbG9hZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNsb2FkLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zbmFtZXMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNuYW1lcy5jCmluZGV4IDdlZWUwYTYuLmQyOTNkOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNuYW1lcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNuYW1lcy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNvYmplY3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNvYmplY3QuYwppbmRleCBhNDJlZTlkLi42NzdiYzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zb2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc29iamVjdC5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwYXJzZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3BhcnNlLmMKaW5kZXggZTgzY2ZmMy4uYzk1YTExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3BhcnNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3BhcnNlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlZGVmLmMKaW5kZXggMzkyOTEwZi4uMGViNTQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3ByZWRlZi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwcmVkZWYuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwcmVwa2cuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNwcmVwa2cuYwppbmRleCAxYjEzYjkyLi44Yjc5OTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcHJlcGtnLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3ByZXBrZy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpci5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpci5jCmluZGV4IDdlNDE3YWEuLjE1MWZjZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyMi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3JlcGFpcjIuYwppbmRleCBiMDllNmJlLi5jMzA2NzJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zcmVwYWlyMi5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNyZXBhaXIyLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zc2VhcmNoLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zc2VhcmNoLmMKaW5kZXggYWYxY2M0Mi4uNGE5ZDRhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3NlYXJjaC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnNzZWFyY2guYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zdXRpbHMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCmluZGV4IDRhNWUzZjUuLjZhZDAyMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN1dGlscy5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3dhbGsuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN3YWxrLmMKaW5kZXggNDc1OGExZi4uYzY4NjA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3dhbGsuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zd2Fsay5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmZXZhbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmZXZhbC5jCmluZGV4IDRiZDU1OGIuLmI2MDMwYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4ZmV2YWwuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZldmFsLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmbmFtZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9uc3hmbmFtZS5jCmluZGV4IDhjNmMxMWMuLmQ2NmMzMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm5hbWUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZuYW1lLmMKQEAgLTYsNyArNiw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL25zeGZvYmouYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm9iai5jCmluZGV4IGRhZTk0MDEuLjc5MzM4MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm9iai5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvbnN4Zm9iai5jCkBAIC02LDcgKzYsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTUzLDUwICs1Myw2IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X2lkCi0gKgotICogUEFSQU1FVEVSUzogIEhhbmRsZSAgICAgICAgICAtIEhhbmRsZSBvZiBvYmplY3Qgd2hvc2UgaWQgaXMgZGVzaXJlZAotICogICAgICAgICAgICAgIHJldF9pZCAgICAgICAgICAtIFdoZXJlIHRoZSBpZCB3aWxsIGJlIHBsYWNlZAotICoKLSAqIFJFVFVSTjogICAgICBTdGF0dXMKLSAqCi0gKiBERVNDUklQVElPTjogVGhpcyByb3V0aW5lIHJldHVybnMgdGhlIG93bmVyIGlkIGFzc29jaWF0ZWQgd2l0aCBhIGhhbmRsZQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1hY3BpX3N0YXR1cyBhY3BpX2dldF9pZChhY3BpX2hhbmRsZSBoYW5kbGUsIGFjcGlfb3duZXJfaWQgKiByZXRfaWQpCi17Ci0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm5vZGU7Ci0JYWNwaV9zdGF0dXMgc3RhdHVzOwotCi0JLyogUGFyYW1ldGVyIFZhbGlkYXRpb24gKi8KLQotCWlmICghcmV0X2lkKSB7Ci0JCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQotCi0Jc3RhdHVzID0gYWNwaV91dF9hY3F1aXJlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybiAoc3RhdHVzKTsKLQl9Ci0KLQkvKiBDb252ZXJ0IGFuZCB2YWxpZGF0ZSB0aGUgaGFuZGxlICovCi0KLQlub2RlID0gYWNwaV9uc192YWxpZGF0ZV9oYW5kbGUoaGFuZGxlKTsKLQlpZiAoIW5vZGUpIHsKLQkJKHZvaWQpYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JCXJldHVybiAoQUVfQkFEX1BBUkFNRVRFUik7Ci0JfQotCi0JKnJldF9pZCA9IG5vZGUtPm93bmVyX2lkOwotCi0Jc3RhdHVzID0gYWNwaV91dF9yZWxlYXNlX211dGV4KEFDUElfTVRYX05BTUVTUEFDRSk7Ci0JcmV0dXJuIChzdGF0dXMpOwotfQotCi1BQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV9nZXRfaWQpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X3R5cGUKICAqCiAgKiBQQVJBTUVURVJTOiAgaGFuZGxlICAgICAgICAgIC0gSGFuZGxlIG9mIG9iamVjdCB3aG9zZSB0eXBlIGlzIGRlc2lyZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNhcmdzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzYXJncy5jCmluZGV4IDMxNGQzMTQuLjZkMDM4NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNhcmdzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc2FyZ3MuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNsb29wLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzbG9vcC5jCmluZGV4IGIwNThlMjMuLjkwNDM3MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNsb29wLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc2xvb3AuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNvYmplY3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNvYmplY3QuYwppbmRleCBhNjg4NTA3Li4yZjVkZGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzb2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc29iamVjdC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc29wY29kZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc29wY29kZS5jCmluZGV4IDE3NTVkMmEuLjFhZjRhNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNvcGNvZGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzb3Bjb2RlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzb3BpbmZvLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzb3BpbmZvLmMKaW5kZXggMGQ4ZDM3ZmYuLmUxOGU3YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNvcGluZm8uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzb3BpbmZvLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzcGFyc2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNwYXJzZS5jCmluZGV4IDZkMjdiNTkuLmE1NTVmN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNwYXJzZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHNwYXJzZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3Njb3BlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzc2NvcGUuYwppbmRleCAzMmQyNTBmLi45ZDY2OWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzc2NvcGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzc2NvcGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN0cmVlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzdHJlZS5jCmluZGV4IDBiNjQxODEuLjg5OTg0ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN0cmVlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3RyZWUuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN1dGlscy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3V0aWxzLmMKaW5kZXggM2NkNDg4MC4uOTYwNTA1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9wc3V0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3V0aWxzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzd2Fsay5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9wc3dhbGsuYwppbmRleCA5Y2IwN2UxLi5iYTVmNjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3Bzd2Fsay5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN3YWxrLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3BzeGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN4ZmFjZS5jCmluZGV4IGUxMzVhY2EuLjg0MWE1ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcHN4ZmFjZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2FkZHIuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNhZGRyLmMKaW5kZXggOTE2ZmQwOS4uNjZkNDA2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2FkZHIuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzYWRkci5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc0LDcgKzc0LDcgQEAKIAkgKiBBZGRyZXNzIFRyYW5zbGF0aW9uIE9mZnNldAogCSAqIEFkZHJlc3MgTGVuZ3RoCiAJICovCi0Je0FDUElfUlNDX01PVkUxNiwgQUNQSV9SU19PRkZTRVQoZGF0YS5hZGRyZXNzMTYuZ3JhbnVsYXJpdHkpLAorCXtBQ1BJX1JTQ19NT1ZFMTYsIEFDUElfUlNfT0ZGU0VUKGRhdGEuYWRkcmVzczE2LmFkZHJlc3MuZ3JhbnVsYXJpdHkpLAogCSBBTUxfT0ZGU0VUKGFkZHJlc3MxNi5ncmFudWxhcml0eSksCiAJIDV9LAogCkBAIC0xMTIsNyArMTEyLDcgQEAKIAkgKiBBZGRyZXNzIFRyYW5zbGF0aW9uIE9mZnNldAogCSAqIEFkZHJlc3MgTGVuZ3RoCiAJICovCi0Je0FDUElfUlNDX01PVkUzMiwgQUNQSV9SU19PRkZTRVQoZGF0YS5hZGRyZXNzMzIuZ3JhbnVsYXJpdHkpLAorCXtBQ1BJX1JTQ19NT1ZFMzIsIEFDUElfUlNfT0ZGU0VUKGRhdGEuYWRkcmVzczMyLmFkZHJlc3MuZ3JhbnVsYXJpdHkpLAogCSBBTUxfT0ZGU0VUKGFkZHJlc3MzMi5ncmFudWxhcml0eSksCiAJIDV9LAogCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkgKiBBZGRyZXNzIFRyYW5zbGF0aW9uIE9mZnNldAogCSAqIEFkZHJlc3MgTGVuZ3RoCiAJICovCi0Je0FDUElfUlNDX01PVkU2NCwgQUNQSV9SU19PRkZTRVQoZGF0YS5hZGRyZXNzNjQuZ3JhbnVsYXJpdHkpLAorCXtBQ1BJX1JTQ19NT1ZFNjQsIEFDUElfUlNfT0ZGU0VUKGRhdGEuYWRkcmVzczY0LmFkZHJlc3MuZ3JhbnVsYXJpdHkpLAogCSBBTUxfT0ZGU0VUKGFkZHJlc3M2NC5ncmFudWxhcml0eSksCiAJIDV9LAogCkBAIC0xOTQsNyArMTk0LDggQEAKIAkgKiBBZGRyZXNzIExlbmd0aAogCSAqIFR5cGUtU3BlY2lmaWMgQXR0cmlidXRlCiAJICovCi0Je0FDUElfUlNDX01PVkU2NCwgQUNQSV9SU19PRkZTRVQoZGF0YS5leHRfYWRkcmVzczY0LmdyYW51bGFyaXR5KSwKKwl7QUNQSV9SU0NfTU9WRTY0LAorCSBBQ1BJX1JTX09GRlNFVChkYXRhLmV4dF9hZGRyZXNzNjQuYWRkcmVzcy5ncmFudWxhcml0eSksCiAJIEFNTF9PRkZTRVQoZXh0X2FkZHJlc3M2NC5ncmFudWxhcml0eSksCiAJIDZ9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NhbGMuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjYWxjLmMKaW5kZXggNjg5NTU2Ny4uY2I3MzlhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NhbGMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY2FsYy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjcmVhdGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNjcmVhdGUuYwppbmRleCAwNDlkOWMyLi4xNTQzNGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzY3JlYXRlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2NyZWF0ZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNkdW1wLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzZHVtcC5jCmluZGV4IGMzYzU2YjUuLjE1MzkzOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNkdW1wLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2R1bXAuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzZHVtcGluZm8uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNkdW1waW5mby5jCmluZGV4IDJmOTMzMmQuLmIyOWQ5ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNkdW1waW5mby5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNkdW1waW5mby5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTE4MywxNSArMTgzLDE1IEBACiAJe0FDUElfUlNEX1RJVExFLCBBQ1BJX1JTRF9UQUJMRV9TSVpFKGFjcGlfcnNfZHVtcF9hZGRyZXNzMTYpLAogCSAiMTYtQml0IFdPUkQgQWRkcmVzcyBTcGFjZSIsIE5VTEx9LAogCXtBQ1BJX1JTRF9BRERSRVNTLCAwLCBOVUxMLCBOVUxMfSwKLQl7QUNQSV9SU0RfVUlOVDE2LCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczE2LmdyYW51bGFyaXR5KSwgIkdyYW51bGFyaXR5IiwKLQkgTlVMTH0sCi0Je0FDUElfUlNEX1VJTlQxNiwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MxNi5taW5pbXVtKSwgIkFkZHJlc3MgTWluaW11bSIsCi0JIE5VTEx9LAotCXtBQ1BJX1JTRF9VSU5UMTYsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzMTYubWF4aW11bSksICJBZGRyZXNzIE1heGltdW0iLAotCSBOVUxMfSwKLQl7QUNQSV9SU0RfVUlOVDE2LCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczE2LnRyYW5zbGF0aW9uX29mZnNldCksCisJe0FDUElfUlNEX1VJTlQxNiwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MxNi5hZGRyZXNzLmdyYW51bGFyaXR5KSwKKwkgIkdyYW51bGFyaXR5IiwgTlVMTH0sCisJe0FDUElfUlNEX1VJTlQxNiwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MxNi5hZGRyZXNzLm1pbmltdW0pLAorCSAiQWRkcmVzcyBNaW5pbXVtIiwgTlVMTH0sCisJe0FDUElfUlNEX1VJTlQxNiwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MxNi5hZGRyZXNzLm1heGltdW0pLAorCSAiQWRkcmVzcyBNYXhpbXVtIiwgTlVMTH0sCisJe0FDUElfUlNEX1VJTlQxNiwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MxNi5hZGRyZXNzLnRyYW5zbGF0aW9uX29mZnNldCksCiAJICJUcmFuc2xhdGlvbiBPZmZzZXQiLCBOVUxMfSwKLQl7QUNQSV9SU0RfVUlOVDE2LCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczE2LmFkZHJlc3NfbGVuZ3RoKSwKKwl7QUNQSV9SU0RfVUlOVDE2LCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczE2LmFkZHJlc3MuYWRkcmVzc19sZW5ndGgpLAogCSAiQWRkcmVzcyBMZW5ndGgiLCBOVUxMfSwKIAl7QUNQSV9SU0RfU09VUkNFLCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczE2LnJlc291cmNlX3NvdXJjZSksIE5VTEwsIE5VTEx9CiB9OwpAQCAtMjAwLDE1ICsyMDAsMTUgQEAKIAl7QUNQSV9SU0RfVElUTEUsIEFDUElfUlNEX1RBQkxFX1NJWkUoYWNwaV9yc19kdW1wX2FkZHJlc3MzMiksCiAJICIzMi1CaXQgRFdPUkQgQWRkcmVzcyBTcGFjZSIsIE5VTEx9LAogCXtBQ1BJX1JTRF9BRERSRVNTLCAwLCBOVUxMLCBOVUxMfSwKLQl7QUNQSV9SU0RfVUlOVDMyLCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczMyLmdyYW51bGFyaXR5KSwgIkdyYW51bGFyaXR5IiwKLQkgTlVMTH0sCi0Je0FDUElfUlNEX1VJTlQzMiwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MzMi5taW5pbXVtKSwgIkFkZHJlc3MgTWluaW11bSIsCi0JIE5VTEx9LAotCXtBQ1BJX1JTRF9VSU5UMzIsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzMzIubWF4aW11bSksICJBZGRyZXNzIE1heGltdW0iLAotCSBOVUxMfSwKLQl7QUNQSV9SU0RfVUlOVDMyLCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczMyLnRyYW5zbGF0aW9uX29mZnNldCksCisJe0FDUElfUlNEX1VJTlQzMiwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MzMi5hZGRyZXNzLmdyYW51bGFyaXR5KSwKKwkgIkdyYW51bGFyaXR5IiwgTlVMTH0sCisJe0FDUElfUlNEX1VJTlQzMiwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MzMi5hZGRyZXNzLm1pbmltdW0pLAorCSAiQWRkcmVzcyBNaW5pbXVtIiwgTlVMTH0sCisJe0FDUElfUlNEX1VJTlQzMiwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MzMi5hZGRyZXNzLm1heGltdW0pLAorCSAiQWRkcmVzcyBNYXhpbXVtIiwgTlVMTH0sCisJe0FDUElfUlNEX1VJTlQzMiwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3MzMi5hZGRyZXNzLnRyYW5zbGF0aW9uX29mZnNldCksCiAJICJUcmFuc2xhdGlvbiBPZmZzZXQiLCBOVUxMfSwKLQl7QUNQSV9SU0RfVUlOVDMyLCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczMyLmFkZHJlc3NfbGVuZ3RoKSwKKwl7QUNQSV9SU0RfVUlOVDMyLCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczMyLmFkZHJlc3MuYWRkcmVzc19sZW5ndGgpLAogCSAiQWRkcmVzcyBMZW5ndGgiLCBOVUxMfSwKIAl7QUNQSV9SU0RfU09VUkNFLCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczMyLnJlc291cmNlX3NvdXJjZSksIE5VTEwsIE5VTEx9CiB9OwpAQCAtMjE3LDE1ICsyMTcsMTUgQEAKIAl7QUNQSV9SU0RfVElUTEUsIEFDUElfUlNEX1RBQkxFX1NJWkUoYWNwaV9yc19kdW1wX2FkZHJlc3M2NCksCiAJICI2NC1CaXQgUVdPUkQgQWRkcmVzcyBTcGFjZSIsIE5VTEx9LAogCXtBQ1BJX1JTRF9BRERSRVNTLCAwLCBOVUxMLCBOVUxMfSwKLQl7QUNQSV9SU0RfVUlOVDY0LCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczY0LmdyYW51bGFyaXR5KSwgIkdyYW51bGFyaXR5IiwKLQkgTlVMTH0sCi0Je0FDUElfUlNEX1VJTlQ2NCwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3M2NC5taW5pbXVtKSwgIkFkZHJlc3MgTWluaW11bSIsCi0JIE5VTEx9LAotCXtBQ1BJX1JTRF9VSU5UNjQsIEFDUElfUlNEX09GRlNFVChhZGRyZXNzNjQubWF4aW11bSksICJBZGRyZXNzIE1heGltdW0iLAotCSBOVUxMfSwKLQl7QUNQSV9SU0RfVUlOVDY0LCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczY0LnRyYW5zbGF0aW9uX29mZnNldCksCisJe0FDUElfUlNEX1VJTlQ2NCwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3M2NC5hZGRyZXNzLmdyYW51bGFyaXR5KSwKKwkgIkdyYW51bGFyaXR5IiwgTlVMTH0sCisJe0FDUElfUlNEX1VJTlQ2NCwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3M2NC5hZGRyZXNzLm1pbmltdW0pLAorCSAiQWRkcmVzcyBNaW5pbXVtIiwgTlVMTH0sCisJe0FDUElfUlNEX1VJTlQ2NCwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3M2NC5hZGRyZXNzLm1heGltdW0pLAorCSAiQWRkcmVzcyBNYXhpbXVtIiwgTlVMTH0sCisJe0FDUElfUlNEX1VJTlQ2NCwgQUNQSV9SU0RfT0ZGU0VUKGFkZHJlc3M2NC5hZGRyZXNzLnRyYW5zbGF0aW9uX29mZnNldCksCiAJICJUcmFuc2xhdGlvbiBPZmZzZXQiLCBOVUxMfSwKLQl7QUNQSV9SU0RfVUlOVDY0LCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczY0LmFkZHJlc3NfbGVuZ3RoKSwKKwl7QUNQSV9SU0RfVUlOVDY0LCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczY0LmFkZHJlc3MuYWRkcmVzc19sZW5ndGgpLAogCSAiQWRkcmVzcyBMZW5ndGgiLCBOVUxMfSwKIAl7QUNQSV9SU0RfU09VUkNFLCBBQ1BJX1JTRF9PRkZTRVQoYWRkcmVzczY0LnJlc291cmNlX3NvdXJjZSksIE5VTEwsIE5VTEx9CiB9OwpAQCAtMjM0LDE1ICsyMzQsMTYgQEAKIAl7QUNQSV9SU0RfVElUTEUsIEFDUElfUlNEX1RBQkxFX1NJWkUoYWNwaV9yc19kdW1wX2V4dF9hZGRyZXNzNjQpLAogCSAiNjQtQml0IEV4dGVuZGVkIEFkZHJlc3MgU3BhY2UiLCBOVUxMfSwKIAl7QUNQSV9SU0RfQUREUkVTUywgMCwgTlVMTCwgTlVMTH0sCi0Je0FDUElfUlNEX1VJTlQ2NCwgQUNQSV9SU0RfT0ZGU0VUKGV4dF9hZGRyZXNzNjQuZ3JhbnVsYXJpdHkpLAorCXtBQ1BJX1JTRF9VSU5UNjQsIEFDUElfUlNEX09GRlNFVChleHRfYWRkcmVzczY0LmFkZHJlc3MuZ3JhbnVsYXJpdHkpLAogCSAiR3JhbnVsYXJpdHkiLCBOVUxMfSwKLQl7QUNQSV9SU0RfVUlOVDY0LCBBQ1BJX1JTRF9PRkZTRVQoZXh0X2FkZHJlc3M2NC5taW5pbXVtKSwKKwl7QUNQSV9SU0RfVUlOVDY0LCBBQ1BJX1JTRF9PRkZTRVQoZXh0X2FkZHJlc3M2NC5hZGRyZXNzLm1pbmltdW0pLAogCSAiQWRkcmVzcyBNaW5pbXVtIiwgTlVMTH0sCi0Je0FDUElfUlNEX1VJTlQ2NCwgQUNQSV9SU0RfT0ZGU0VUKGV4dF9hZGRyZXNzNjQubWF4aW11bSksCisJe0FDUElfUlNEX1VJTlQ2NCwgQUNQSV9SU0RfT0ZGU0VUKGV4dF9hZGRyZXNzNjQuYWRkcmVzcy5tYXhpbXVtKSwKIAkgIkFkZHJlc3MgTWF4aW11bSIsIE5VTEx9LAotCXtBQ1BJX1JTRF9VSU5UNjQsIEFDUElfUlNEX09GRlNFVChleHRfYWRkcmVzczY0LnRyYW5zbGF0aW9uX29mZnNldCksCisJe0FDUElfUlNEX1VJTlQ2NCwKKwkgQUNQSV9SU0RfT0ZGU0VUKGV4dF9hZGRyZXNzNjQuYWRkcmVzcy50cmFuc2xhdGlvbl9vZmZzZXQpLAogCSAiVHJhbnNsYXRpb24gT2Zmc2V0IiwgTlVMTH0sCi0Je0FDUElfUlNEX1VJTlQ2NCwgQUNQSV9SU0RfT0ZGU0VUKGV4dF9hZGRyZXNzNjQuYWRkcmVzc19sZW5ndGgpLAorCXtBQ1BJX1JTRF9VSU5UNjQsIEFDUElfUlNEX09GRlNFVChleHRfYWRkcmVzczY0LmFkZHJlc3MuYWRkcmVzc19sZW5ndGgpLAogCSAiQWRkcmVzcyBMZW5ndGgiLCBOVUxMfSwKIAl7QUNQSV9SU0RfVUlOVDY0LCBBQ1BJX1JTRF9PRkZTRVQoZXh0X2FkZHJlc3M2NC50eXBlX3NwZWNpZmljKSwKIAkgIlR5cGUtU3BlY2lmaWMgQXR0cmlidXRlIiwgTlVMTH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpbmZvLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaW5mby5jCmluZGV4IDlkM2Y4YTkuLmVkZWNmYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpbmZvLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2luZm8uYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaW8uYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpby5jCmluZGV4IDE5ZDY0ODcuLjVhZGJhMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpby5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpby5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpcnEuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNpcnEuYwppbmRleCAzNDYxZjdkLi4wN2NmYTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzaXJxLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2lycS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNsaXN0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbGlzdC5jCmluZGV4IDc3MjkxMjkuLjUwZDViZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNsaXN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc2xpc3QuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbWVtb3J5LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbWVtb3J5LmMKaW5kZXggZWFiNDQ4My4uYzZiODA4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc21lbW9yeS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNtZW1vcnkuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbWlzYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc21pc2MuYwppbmRleCA0MWVlYTRiLi4xZmU0OWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzbWlzYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNtaXNjLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc3NlcmlhbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS9yc3NlcmlhbC5jCmluZGV4IDllODQwNzIuLjRjOGM2ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnNzZXJpYWwuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3Jzc2VyaWFsLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9yc3V0aWxzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzdXRpbHMuYwppbmRleCA4OTdhNWNlLi5lY2UzY2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzdXRpbHMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzdXRpbHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzeGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvcnN4ZmFjZS5jCmluZGV4IDg3N2FiOTIuLjhlNjI3NmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzeGZhY2UuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3JzeGZhY2UuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02MCwxMSArNjAsMTEgQEAKIAlBQ1BJX0NPUFlfRklFTEQob3V0LCBpbiwgbWluX2FkZHJlc3NfZml4ZWQpOyAgICAgICAgIFwKIAlBQ1BJX0NPUFlfRklFTEQob3V0LCBpbiwgbWF4X2FkZHJlc3NfZml4ZWQpOyAgICAgICAgIFwKIAlBQ1BJX0NPUFlfRklFTEQob3V0LCBpbiwgaW5mbyk7ICAgICAgICAgICAgICAgICAgICAgIFwKLQlBQ1BJX0NPUFlfRklFTEQob3V0LCBpbiwgZ3JhbnVsYXJpdHkpOyAgICAgICAgICAgICAgIFwKLQlBQ1BJX0NPUFlfRklFTEQob3V0LCBpbiwgbWluaW11bSk7ICAgICAgICAgICAgICAgICAgIFwKLQlBQ1BJX0NPUFlfRklFTEQob3V0LCBpbiwgbWF4aW11bSk7ICAgICAgICAgICAgICAgICAgIFwKLQlBQ1BJX0NPUFlfRklFTEQob3V0LCBpbiwgdHJhbnNsYXRpb25fb2Zmc2V0KTsgICAgICAgIFwKLQlBQ1BJX0NPUFlfRklFTEQob3V0LCBpbiwgYWRkcmVzc19sZW5ndGgpOyAgICAgICAgICAgIFwKKwlBQ1BJX0NPUFlfRklFTEQob3V0LCBpbiwgYWRkcmVzcy5ncmFudWxhcml0eSk7ICAgICAgIFwKKwlBQ1BJX0NPUFlfRklFTEQob3V0LCBpbiwgYWRkcmVzcy5taW5pbXVtKTsgICAgICAgICAgIFwKKwlBQ1BJX0NPUFlfRklFTEQob3V0LCBpbiwgYWRkcmVzcy5tYXhpbXVtKTsgICAgICAgICAgIFwKKwlBQ1BJX0NPUFlfRklFTEQob3V0LCBpbiwgYWRkcmVzcy50cmFuc2xhdGlvbl9vZmZzZXQpOyBcCisJQUNQSV9DT1BZX0ZJRUxEKG91dCwgaW4sIGFkZHJlc3MuYWRkcmVzc19sZW5ndGgpOyAgICBcCiAJQUNQSV9DT1BZX0ZJRUxEKG91dCwgaW4sIHJlc291cmNlX3NvdXJjZSk7CiAvKiBMb2NhbCBwcm90b3R5cGVzICovCiBzdGF0aWMgYWNwaV9zdGF0dXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJkYXRhLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZGF0YS5jCmluZGV4IGY0OTljMTAuLjZhMTQ0OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJkYXRhLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YmRhdGEuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmYWR0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmFkdC5jCmluZGV4IDQxNTE5YTkuLjdkMjQ4NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmYWR0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YmZhZHQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmaW5kLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiZmluZC5jCmluZGV4IGNiOTQ3NzAuLjBiODc5ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJmaW5kLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YmZpbmQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJpbnN0YWwuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJpbnN0YWwuYwppbmRleCA3NTViOTBjLi45YmFkNDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RiaW5zdGFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90Ymluc3RhbC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS90YnByaW50LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RicHJpbnQuYwppbmRleCBkZjNiYjIwLi5lZjE2YzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RicHJpbnQuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RicHJpbnQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ1dGlscy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YnV0aWxzLmMKaW5kZXggNmIxY2E5OS4uNjU1OWE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90YnV0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90YnV0aWxzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZmFjZS5jCmluZGV4IDY0ODJiMGQuLjYwZTk0ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZmFjZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjY1LDQ1ICsyNjUsNiBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIEZVTkNUSU9OOiAgICBhY3BpX3VubG9hZF90YWJsZV9pZAotICoKLSAqIFBBUkFNRVRFUlM6ICBpZCAgICAgICAgICAgIC0gT3duZXIgSUQgb2YgdGhlIHRhYmxlIHRvIGJlIHJlbW92ZWQuCi0gKgotICogUkVUVVJOOiAgICAgIFN0YXR1cwotICoKLSAqIERFU0NSSVBUSU9OOiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBmb3JjZSB0aGUgdW5sb2FkIG9mIGEgdGFibGUgKGJ5IGlkKQotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1hY3BpX3N0YXR1cyBhY3BpX3VubG9hZF90YWJsZV9pZChhY3BpX293bmVyX2lkIGlkKQotewotCWludCBpOwotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX05PVF9FWElTVDsKLQotCUFDUElfRlVOQ1RJT05fVFJBQ0UoYWNwaV91bmxvYWRfdGFibGVfaWQpOwotCi0JLyogRmluZCB0YWJsZSBpbiB0aGUgZ2xvYmFsIHRhYmxlIGxpc3QgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LmN1cnJlbnRfdGFibGVfY291bnQ7ICsraSkgewotCQlpZiAoaWQgIT0gYWNwaV9nYmxfcm9vdF90YWJsZV9saXN0LnRhYmxlc1tpXS5vd25lcl9pZCkgewotCQkJY29udGludWU7Ci0JCX0KLQkJLyoKLQkJICogRGVsZXRlIGFsbCBuYW1lc3BhY2Ugb2JqZWN0cyBvd25lZCBieSB0aGlzIHRhYmxlLiBOb3RlIHRoYXQgdGhlc2UKLQkJICogb2JqZWN0cyBjYW4gYXBwZWFyIGFueXdoZXJlIGluIHRoZSBuYW1lc3BhY2UgYnkgdmlydHVlIG9mIHRoZSBBTUwKLQkJICogIlNjb3BlIiBvcGVyYXRvci4gVGh1cywgd2UgbmVlZCB0byB0cmFjayBvd25lcnNoaXAgYnkgYW4gSUQsIG5vdAotCQkgKiBzaW1wbHkgYSBwb3NpdGlvbiB3aXRoaW4gdGhlIGhpZXJhcmNoeQotCQkgKi8KLQkJYWNwaV90Yl9kZWxldGVfbmFtZXNwYWNlX2J5X293bmVyKGkpOwotCQlzdGF0dXMgPSBhY3BpX3RiX3JlbGVhc2Vfb3duZXJfaWQoaSk7Ci0JCWFjcGlfdGJfc2V0X3RhYmxlX2xvYWRlZF9mbGFnKGksIEZBTFNFKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotfQotCi1BQ1BJX0VYUE9SVF9TWU1CT0woYWNwaV91bmxvYWRfdGFibGVfaWQpCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgogICogRlVOQ1RJT046ICAgIGFjcGlfZ2V0X3RhYmxlX3dpdGhfc2l6ZQogICoKICAqIFBBUkFNRVRFUlM6ICBzaWduYXR1cmUgICAgICAgICAgIC0gQUNQSSBzaWduYXR1cmUgb2YgbmVlZGVkIHRhYmxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZsb2FkLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZsb2FkLmMKaW5kZXggYWI1MzA4Yi4uYWFkYjMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS90YnhmbG9hZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZmxvYWQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZnJvb3QuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdGJ4ZnJvb3QuYwppbmRleCA0M2E1NGFmLi5lYWM1MmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3RieGZyb290LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS90Ynhmcm9vdC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGFkZHJlc3MuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRhZGRyZXNzLmMKaW5kZXggYTFhY2VjOWQuLjEyNzlmNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRhZGRyZXNzLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGFkZHJlc3MuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRhbGxvYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGFsbG9jLmMKaW5kZXggZWZhYzgzYy4uNjFkOGY2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGFsbG9jLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGFsbG9jLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0YnVmZmVyLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0YnVmZmVyLmMKaW5kZXggMDM4ZWE4OC4uMjQyYmQwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGJ1ZmZlci5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRidWZmZXIuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRjYWNoZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGNhY2hlLmMKaW5kZXggNzhmZGUwYS4uZWFjYzVlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGNhY2hlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGNhY2hlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Y29weS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGNvcHkuYwppbmRleCBmZjYwMWMwLi5jMzdlYzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Y29weS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRjb3B5LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVidWcuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWJ1Zy5jCmluZGV4IGU1MTYyNTQuLjU3MDc4ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWJ1Zy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWJ1Zy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlY29kZS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlY29kZS5jCmluZGV4IDQwZTkyM2UuLjk4OGUyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWNvZGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVjb2RlLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVsZXRlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZGVsZXRlLmMKaW5kZXggYTM1MTZkZS4uNzFmY2UzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGRlbGV0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRkZWxldGUuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZXJyb3IuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRlcnJvci5jCmluZGV4IDhlNTQ0ZDQuLjllZjgwZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRlcnJvci5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRlcnJvci5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRldmFsLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZXZhbC5jCmluZGV4IDhmZWQxNDguLjZjNzM4ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRldmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGV2YWwuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRleGNlcC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGV4Y2VwLmMKaW5kZXggMDQwM2RjYS4uNzQzYTBhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGV4Y2VwLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGV4Y2VwLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGZpbGVpby5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGZpbGVpby5jCmluZGV4IDRlMjYzYTguLjdlMTE2OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRmaWxlaW8uYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0ZmlsZWlvLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGdsb2JhbC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGdsb2JhbC5jCmluZGV4IDc3Y2VhYzcuLjVlOGRmOTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0Z2xvYmFsLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGdsb2JhbC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGhleC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGhleC5jCmluZGV4IDlhZmE5NDQuLmFhNDQ4MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRoZXguYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aGV4LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aWRzLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aWRzLmMKaW5kZXggNGIxMjg4MC4uMjc0MzFjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dGlkcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpZHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpbml0LmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0aW5pdC5jCmluZGV4IDc3MTIwZWMuLmU0MDJlMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGluaXQuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRsb2NrLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bG9jay5jCmluZGV4IGRjNmU5NjUuLjA4OWY3OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRsb2NrLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dGxvY2suYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtYXRoLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bWF0aC5jCmluZGV4IGQ0NGRlZTYuLmY5ZmYxMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtYXRoLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG1hdGguYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bWlzYy5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG1pc2MuYwppbmRleCAyZTJiYjE0Li41NmJiYWNkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG1pc2MuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0bWlzYy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRtdXRleC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG11dGV4LmMKaW5kZXggODI3MTdmZi4uMzdiOGI1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG11dGV4LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG11dGV4LmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG9iamVjdC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG9iamVjdC5jCmluZGV4IGRmYTkwMDliLi43ZDgzZWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0b2JqZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG9iamVjdC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dG9zaS5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG9zaS5jCmluZGV4IDY4NTc2NmYuLjU3NGNkMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRvc2kuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0b3NpLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0b3duZXJpZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dG93bmVyaWQuYwppbmRleCAzNmJlYzU3Li4yOTU5MjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0b3duZXJpZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRvd25lcmlkLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHByZWRlZi5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHByZWRlZi5jCmluZGV4IGRiMzBjYWYuLjI5ZTQ0OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRwcmVkZWYuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0cHJlZGVmLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0cHJpbnQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRwcmludC5jCmluZGV4IDBjZTNmNWEuLjgyY2E5MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRwcmludC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRwcmludC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHJlc3JjLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0cmVzcmMuYwppbmRleCBiYzFmZjgyLi5iMzUwNWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0cmVzcmMuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0cmVzcmMuYwpAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0c3RhdGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRzdGF0ZS5jCmluZGV4IDFjYzk3YTcuLjgyNzRjYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRzdGF0ZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRzdGF0ZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRzdHJpbmcuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXRzdHJpbmcuYwppbmRleCA2ZGM1NGIzLi44M2I2YzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0c3RyaW5nLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHN0cmluZy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR0cmFjay5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHRyYWNrLmMKaW5kZXggN2QwZWU5Ni4uMTMwZGQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHRyYWNrLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHRyYWNrLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0dXVpZC5jIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHV1aWQuYwppbmRleCA0ZGMzMzEzLi5jNjE0OWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0dXVpZC5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR1dWlkLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0eGZhY2UuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCmluZGV4IDQ5Yzg3M2MuLjA5MjkxODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmFjZS5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmZXJyb3IuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmVycm9yLmMKaW5kZXggODhlZjc3Zi4uMzA2ZTc4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmZXJyb3IuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0eGZlcnJvci5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmluaXQuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4ZmluaXQuYwppbmRleCBiMWZkNjg4Li4wODNhNzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0eGZpbml0LmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmaW5pdC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmbXV0ZXguYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvdXR4Zm11dGV4LmMKaW5kZXggMmEwZjllMC4uZjI2MDZhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS91dHhmbXV0ZXguYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL3V0eGZtdXRleC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hcGVpL2FwZWktYmFzZS5jIGIvZHJpdmVycy9hY3BpL2FwZWkvYXBlaS1iYXNlLmMKaW5kZXggMmNkN2JkZC4uYTg1YWMwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FwZWkvYXBlaS1iYXNlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FwZWkvYXBlaS1iYXNlLmMKQEAgLTQ0OSw3ICs0NDksNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYXBlaV9yZXNvdXJjZXNfc3ViKTsKIAotc3RhdGljIGludCBhcGVpX2dldF9udnNfY2FsbGJhY2soX191NjQgc3RhcnQsIF9fdTY0IHNpemUsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGFwZWlfZ2V0X3Jlc19jYWxsYmFjayhfX3U2NCBzdGFydCwgX191NjQgc2l6ZSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgYXBlaV9yZXNvdXJjZXMgKnJlc291cmNlcyA9IGRhdGE7CiAJcmV0dXJuIGFwZWlfcmVzX2FkZCgmcmVzb3VyY2VzLT5pb21lbSwgc3RhcnQsIHNpemUpOwpAQCAtNDU3LDcgKzQ1NywxNSBAQAogCiBzdGF0aWMgaW50IGFwZWlfZ2V0X252c19yZXNvdXJjZXMoc3RydWN0IGFwZWlfcmVzb3VyY2VzICpyZXNvdXJjZXMpCiB7Ci0JcmV0dXJuIGFjcGlfbnZzX2Zvcl9lYWNoX3JlZ2lvbihhcGVpX2dldF9udnNfY2FsbGJhY2ssIHJlc291cmNlcyk7CisJcmV0dXJuIGFjcGlfbnZzX2Zvcl9lYWNoX3JlZ2lvbihhcGVpX2dldF9yZXNfY2FsbGJhY2ssIHJlc291cmNlcyk7Cit9CisKK2ludCAoKmFyY2hfYXBlaV9maWx0ZXJfYWRkcikoaW50ICgqZnVuYykoX191NjQgc3RhcnQsIF9fdTY0IHNpemUsCisJCQkJICAgICB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CitzdGF0aWMgaW50IGFwZWlfZ2V0X2FyY2hfcmVzb3VyY2VzKHN0cnVjdCBhcGVpX3Jlc291cmNlcyAqcmVzb3VyY2VzKQorCit7CisJcmV0dXJuIGFyY2hfYXBlaV9maWx0ZXJfYWRkcihhcGVpX2dldF9yZXNfY2FsbGJhY2ssIHJlc291cmNlcyk7CiB9CiAKIC8qCkBAIC00NzAsNyArNDc4LDcgQEAKIHsKIAlzdHJ1Y3QgYXBlaV9yZXMgKnJlcywgKnJlc19iYWsgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqcjsKLQlzdHJ1Y3QgYXBlaV9yZXNvdXJjZXMgbnZzX3Jlc291cmNlczsKKwlzdHJ1Y3QgYXBlaV9yZXNvdXJjZXMgbnZzX3Jlc291cmNlcywgYXJjaF9yZXM7CiAJaW50IHJjOwogCiAJcmMgPSBhcGVpX3Jlc291cmNlc19zdWIocmVzb3VyY2VzLCAmYXBlaV9yZXNvdXJjZXNfYWxsKTsKQEAgLTQ4NSwxMCArNDkzLDIwIEBACiAJYXBlaV9yZXNvdXJjZXNfaW5pdCgmbnZzX3Jlc291cmNlcyk7CiAJcmMgPSBhcGVpX2dldF9udnNfcmVzb3VyY2VzKCZudnNfcmVzb3VyY2VzKTsKIAlpZiAocmMpCi0JCWdvdG8gcmVzX2Zpbmk7CisJCWdvdG8gbnZzX3Jlc19maW5pOwogCXJjID0gYXBlaV9yZXNvdXJjZXNfc3ViKHJlc291cmNlcywgJm52c19yZXNvdXJjZXMpOwogCWlmIChyYykKLQkJZ290byByZXNfZmluaTsKKwkJZ290byBudnNfcmVzX2Zpbmk7CisKKwlpZiAoYXJjaF9hcGVpX2ZpbHRlcl9hZGRyKSB7CisJCWFwZWlfcmVzb3VyY2VzX2luaXQoJmFyY2hfcmVzKTsKKwkJcmMgPSBhcGVpX2dldF9hcmNoX3Jlc291cmNlcygmYXJjaF9yZXMpOworCQlpZiAocmMpCisJCQlnb3RvIGFyY2hfcmVzX2Zpbmk7CisJCXJjID0gYXBlaV9yZXNvdXJjZXNfc3ViKHJlc291cmNlcywgJmFyY2hfcmVzKTsKKwkJaWYgKHJjKQorCQkJZ290byBhcmNoX3Jlc19maW5pOworCX0KIAogCXJjID0gLUVJTlZBTDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcywgJnJlc291cmNlcy0+aW9tZW0sIGxpc3QpIHsKQEAgLTUzNiw3ICs1NTQsOSBAQAogCQkJYnJlYWs7CiAJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQpOwogCX0KLXJlc19maW5pOgorYXJjaF9yZXNfZmluaToKKwlhcGVpX3Jlc291cmNlc19maW5pKCZhcmNoX3Jlcyk7CitudnNfcmVzX2Zpbmk6CiAJYXBlaV9yZXNvdXJjZXNfZmluaSgmbnZzX3Jlc291cmNlcyk7CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2RldmljZV9wbS5jIGIvZHJpdmVycy9hY3BpL2RldmljZV9wbS5jCmluZGV4IGMwZDQ0ZDMuLjczNWRiMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kZXZpY2VfcG0uYworKysgYi9kcml2ZXJzL2FjcGkvZGV2aWNlX3BtLmMKQEAgLTEwMjcsNyArMTAyNyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGV2X3BtX2RvbWFpbiBhY3BpX2dlbmVyYWxfcG1fZG9tYWluID0gewogCS5vcHMgPSB7Ci0jaWZkZWYgQ09ORklHX1BNCiAJCS5ydW50aW1lX3N1c3BlbmQgPSBhY3BpX3N1YnN5c19ydW50aW1lX3N1c3BlbmQsCiAJCS5ydW50aW1lX3Jlc3VtZSA9IGFjcGlfc3Vic3lzX3J1bnRpbWVfcmVzdW1lLAogI2lmZGVmIENPTkZJR19QTV9TTEVFUApAQCAtMTA0MSw3ICsxMDQwLDYgQEAKIAkJLnBvd2Vyb2ZmX2xhdGUgPSBhY3BpX3N1YnN5c19zdXNwZW5kX2xhdGUsCiAJCS5yZXN0b3JlX2Vhcmx5ID0gYWNwaV9zdWJzeXNfcmVzdW1lX2Vhcmx5LAogI2VuZGlmCi0jZW5kaWYKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2VjLmMgYi9kcml2ZXJzL2FjcGkvZWMuYwppbmRleCAxYjU4NTNmLi4xNGQwYzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZWMuYworKysgYi9kcml2ZXJzL2FjcGkvZWMuYwpAQCAtMSw4ICsxLDggQEAKIC8qCi0gKiAgZWMuYyAtIEFDUEkgRW1iZWRkZWQgQ29udHJvbGxlciBEcml2ZXIgKHYyLjIpCisgKiAgZWMuYyAtIEFDUEkgRW1iZWRkZWQgQ29udHJvbGxlciBEcml2ZXIgKHYzKQogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgotICogICAgQXV0aG9yOiAyMDE0ICAgICAgIEx2IFpoZW5nIDxsdi56aGVuZ0BpbnRlbC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgSW50ZWwgQ29ycG9yYXRpb24KKyAqICAgIEF1dGhvcjogMjAxNCwgMjAxNSBMdiBaaGVuZyA8bHYuemhlbmdAaW50ZWwuY29tPgogICogICAgICAgICAgICAyMDA2LCAyMDA3IEFsZXhleSBTdGFyaWtvdnNraXkgPGFsZXhleS55LnN0YXJpa292c2tpeUBpbnRlbC5jb20+CiAgKiAgICAgICAgICAgIDIwMDYgICAgICAgRGVuaXMgU2FkeWtvdiA8ZGVuaXMubS5zYWR5a292QGludGVsLmNvbT4KICAqICAgICAgICAgICAgMjAwNCAgICAgICBMdW1pbmcgWXUgPGx1bWluZy55dUBpbnRlbC5jb20+CkBAIC0zMSw2ICszMSw3IEBACiAKIC8qIFVuY29tbWVudCBuZXh0IGxpbmUgdG8gZ2V0IHZlcmJvc2UgcHJpbnRvdXQgKi8KIC8qICNkZWZpbmUgREVCVUcgKi8KKyNkZWZpbmUgREVCVUdfUkVGIDAKICNkZWZpbmUgcHJfZm10KGZtdCkgIkFDUEkgOiBFQzogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNzEsMjAgKzcyLDMyIEBACiAjZGVmaW5lIEFDUElfRUNfREVMQVkJCTUwMAkvKiBXYWl0IDUwMG1zIG1heC4gZHVyaW5nIEVDIG9wcyAqLwogI2RlZmluZSBBQ1BJX0VDX1VERUxBWV9HTEsJMTAwMAkvKiBXYWl0IDFtcyBtYXguIHRvIGdldCBnbG9iYWwgbG9jayAqLwogI2RlZmluZSBBQ1BJX0VDX01TSV9VREVMQVkJNTUwCS8qIFdhaXQgNTUwdXMgZm9yIE1TSSBFQyAqLworI2RlZmluZSBBQ1BJX0VDX1VERUxBWV9QT0xMCTEwMDAJLyogV2FpdCAxbXMgZm9yIEVDIHRyYW5zYWN0aW9uIHBvbGxpbmcgKi8KICNkZWZpbmUgQUNQSV9FQ19DTEVBUl9NQVgJMTAwCS8qIE1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyB0byBxdWVyeQogCQkJCQkgKiB3aGVuIHRyeWluZyB0byBjbGVhciB0aGUgRUMgKi8KIAogZW51bSB7Ci0JRUNfRkxBR1NfUVVFUllfUEVORElORywJCS8qIFF1ZXJ5IGlzIHBlbmRpbmcgKi8KLQlFQ19GTEFHU19HUEVfU1RPUk0sCQkvKiBHUEUgc3Rvcm0gZGV0ZWN0ZWQgKi8KKwlFQ19GTEFHU19FVkVOVF9FTkFCTEVELAkJLyogRXZlbnQgaXMgZW5hYmxlZCAqLworCUVDX0ZMQUdTX0VWRU5UX1BFTkRJTkcsCQkvKiBFdmVudCBpcyBwZW5kaW5nICovCisJRUNfRkxBR1NfRVZFTlRfREVURUNURUQsCS8qIEV2ZW50IGlzIGRldGVjdGVkICovCiAJRUNfRkxBR1NfSEFORExFUlNfSU5TVEFMTEVELAkvKiBIYW5kbGVycyBmb3IgR1BFIGFuZAogCQkJCQkgKiBPcFJlZyBhcmUgaW5zdGFsbGVkICovCi0JRUNfRkxBR1NfQkxPQ0tFRCwJCS8qIFRyYW5zYWN0aW9ucyBhcmUgYmxvY2tlZCAqLworCUVDX0ZMQUdTX1NUQVJURUQsCQkvKiBEcml2ZXIgaXMgc3RhcnRlZCAqLworCUVDX0ZMQUdTX1NUT1BQRUQsCQkvKiBEcml2ZXIgaXMgc3RvcHBlZCAqLworCUVDX0ZMQUdTX0NPTU1BTkRfU1RPUk0sCQkvKiBHUEUgc3Rvcm1zIG9jY3VycmVkIHRvIHRoZQorCQkJCQkgKiBjdXJyZW50IGNvbW1hbmQgcHJvY2Vzc2luZyAqLwogfTsKIAogI2RlZmluZSBBQ1BJX0VDX0NPTU1BTkRfUE9MTAkJMHgwMSAvKiBBdmFpbGFibGUgZm9yIGNvbW1hbmQgYnl0ZSAqLwogI2RlZmluZSBBQ1BJX0VDX0NPTU1BTkRfQ09NUExFVEUJMHgwMiAvKiBDb21wbGV0ZWQgbGFzdCBieXRlICovCiAKKyNkZWZpbmUgZWNfZGVidWdfcmVmKGVjLCBmbXQsIC4uLikJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCWlmIChERUJVR19SRUYpCQkJCQkJXAorCQkJcHJfZGVidWcoIiVsdTogIiBmbXQsIGVjLT5yZWZlcmVuY2VfY291bnQsCVwKKwkJCQkgIyMgX19WQV9BUkdTX18pOwkJCVwKKwl9IHdoaWxlICgwKQorCiAvKiBlYy5jIGlzIGNvbXBpbGVkIGluIGFjcGkgbmFtZXNwYWNlIHNvIHRoaXMgc2hvd3MgdXAgYXMgYWNwaS5lY19kZWxheSBwYXJhbSAqLwogc3RhdGljIHVuc2lnbmVkIGludCBlY19kZWxheSBfX3JlYWRfbW9zdGx5ID0gQUNQSV9FQ19ERUxBWTsKIG1vZHVsZV9wYXJhbShlY19kZWxheSwgdWludCwgMDY0NCk7CkBAIC0xMDUsNiArMTE4LDcgQEAKIAlhY3BpX2hhbmRsZSBoYW5kbGU7CiAJdm9pZCAqZGF0YTsKIAl1OCBxdWVyeV9iaXQ7CisJc3RydWN0IGtyZWYga3JlZjsKIH07CiAKIHN0cnVjdCB0cmFuc2FjdGlvbiB7CkBAIC0xMTcsOCArMTMxLDEyIEBACiAJdTggd2xlbjsKIAl1OCBybGVuOwogCXU4IGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOwogfTsKIAorc3RhdGljIGludCBhY3BpX2VjX3F1ZXJ5KHN0cnVjdCBhY3BpX2VjICplYywgdTggKmRhdGEpOworc3RhdGljIHZvaWQgYWR2YW5jZV90cmFuc2FjdGlvbihzdHJ1Y3QgYWNwaV9lYyAqZWMpOworCiBzdHJ1Y3QgYWNwaV9lYyAqYm9vdF9lYywgKmZpcnN0X2VjOwogRVhQT1JUX1NZTUJPTChmaXJzdF9lYyk7CiAKQEAgLTEyOSw3ICsxNDcsMjggQEAKIHN0YXRpYyBpbnQgRUNfRkxBR1NfUVVFUllfSEFORFNIQUtFOyAvKiBOZWVkcyBRUl9FQyBpc3N1ZWQgd2hlbiBTQ0lfRVZUIHNldCAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiBNYW5hZ2VtZW50CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIERldmljZSBGbGFncworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGJvb2wgYWNwaV9lY19zdGFydGVkKHN0cnVjdCBhY3BpX2VjICplYykKK3sKKwlyZXR1cm4gdGVzdF9iaXQoRUNfRkxBR1NfU1RBUlRFRCwgJmVjLT5mbGFncykgJiYKKwkgICAgICAgIXRlc3RfYml0KEVDX0ZMQUdTX1NUT1BQRUQsICZlYy0+ZmxhZ3MpOworfQorCitzdGF0aWMgYm9vbCBhY3BpX2VjX2ZsdXNoZWQoc3RydWN0IGFjcGlfZWMgKmVjKQoreworCXJldHVybiBlYy0+cmVmZXJlbmNlX2NvdW50ID09IDE7Cit9CisKK3N0YXRpYyBib29sIGFjcGlfZWNfaGFzX3BlbmRpbmdfZXZlbnQoc3RydWN0IGFjcGlfZWMgKmVjKQoreworCXJldHVybiB0ZXN0X2JpdChFQ19GTEFHU19FVkVOVF9ERVRFQ1RFRCwgJmVjLT5mbGFncykgfHwKKwkgICAgICAgdGVzdF9iaXQoRUNfRkxBR1NfRVZFTlRfUEVORElORywgJmVjLT5mbGFncyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIEVDIFJlZ2lzdGVycwogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGlubGluZSB1OCBhY3BpX2VjX3JlYWRfc3RhdHVzKHN0cnVjdCBhY3BpX2VjICplYykKQEAgLTE1MSw2ICsxOTAsNyBAQAogewogCXU4IHggPSBpbmIoZWMtPmRhdGFfYWRkcik7CiAKKwllYy0+Y3Vyci0+dGltZXN0YW1wID0gamlmZmllczsKIAlwcl9kZWJ1ZygiRUNfREFUQShSKSA9IDB4JTIuMnhcbiIsIHgpOwogCXJldHVybiB4OwogfQpAQCAtMTU5LDEyICsxOTksMTQgQEAKIHsKIAlwcl9kZWJ1ZygiRUNfU0MoVykgPSAweCUyLjJ4XG4iLCBjb21tYW5kKTsKIAlvdXRiKGNvbW1hbmQsIGVjLT5jb21tYW5kX2FkZHIpOworCWVjLT5jdXJyLT50aW1lc3RhbXAgPSBqaWZmaWVzOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9lY193cml0ZV9kYXRhKHN0cnVjdCBhY3BpX2VjICplYywgdTggZGF0YSkKIHsKIAlwcl9kZWJ1ZygiRUNfREFUQShXKSA9IDB4JTIuMnhcbiIsIGRhdGEpOwogCW91dGIoZGF0YSwgZWMtPmRhdGFfYWRkcik7CisJZWMtPmN1cnItPnRpbWVzdGFtcCA9IGppZmZpZXM7CiB9CiAKICNpZmRlZiBERUJVRwpAQCAtMTg4LDYgKzIzMCwyMDMgQEAKICNkZWZpbmUgYWNwaV9lY19jbWRfc3RyaW5nKGNtZCkJCSJVTkRFRiIKICNlbmRpZgogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogICAgICAgICAgICAgICAgICAgICAgICAgICBHUEUgUmVnaXN0ZXJzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW5saW5lIGJvb2wgYWNwaV9lY19pc19ncGVfcmFpc2VkKHN0cnVjdCBhY3BpX2VjICplYykKK3sKKwlhY3BpX2V2ZW50X3N0YXR1cyBncGVfc3RhdHVzID0gMDsKKworCSh2b2lkKWFjcGlfZ2V0X2dwZV9zdGF0dXMoTlVMTCwgZWMtPmdwZSwgJmdwZV9zdGF0dXMpOworCXJldHVybiAoZ3BlX3N0YXR1cyAmIEFDUElfRVZFTlRfRkxBR19TRVQpID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9lY19lbmFibGVfZ3BlKHN0cnVjdCBhY3BpX2VjICplYywgYm9vbCBvcGVuKQoreworCWlmIChvcGVuKQorCQlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CisJZWxzZSB7CisJCUJVR19PTihlYy0+cmVmZXJlbmNlX2NvdW50IDwgMSk7CisJCWFjcGlfc2V0X2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9FTkFCTEUpOworCX0KKwlpZiAoYWNwaV9lY19pc19ncGVfcmFpc2VkKGVjKSkgeworCQkvKgorCQkgKiBPbiBzb21lIHBsYXRmb3JtcywgRU49MSB3cml0ZXMgY2Fubm90IHRyaWdnZXIgR1BFLiBTbworCQkgKiBzb2Z0d2FyZSBuZWVkIHRvIG1hbnVhbGx5IHRyaWdnZXIgYSBwc2V1ZG8gR1BFIGV2ZW50IG9uCisJCSAqIEVOPTEgd3JpdGVzLgorCQkgKi8KKwkJcHJfZGVidWcoIioqKioqIFBvbGxpbmcgcXVpcmsgKioqKipcbiIpOworCQlhZHZhbmNlX3RyYW5zYWN0aW9uKGVjKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX2VjX2Rpc2FibGVfZ3BlKHN0cnVjdCBhY3BpX2VjICplYywgYm9vbCBjbG9zZSkKK3sKKwlpZiAoY2xvc2UpCisJCWFjcGlfZGlzYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CisJZWxzZSB7CisJCUJVR19PTihlYy0+cmVmZXJlbmNlX2NvdW50IDwgMSk7CisJCWFjcGlfc2V0X2dwZShOVUxMLCBlYy0+Z3BlLCBBQ1BJX0dQRV9ESVNBQkxFKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX2VjX2NsZWFyX2dwZShzdHJ1Y3QgYWNwaV9lYyAqZWMpCit7CisJLyoKKwkgKiBHUEUgU1RTIGlzIGEgVzFDIHJlZ2lzdGVyLCB3aGljaCBtZWFuczoKKwkgKiAxLiBTb2Z0d2FyZSBjYW4gY2xlYXIgaXQgd2l0aG91dCB3b3JyeWluZyBhYm91dCBjbGVhcmluZyBvdGhlcgorCSAqICAgIEdQRXMnIFNUUyBiaXRzIHdoZW4gdGhlIGhhcmR3YXJlIHNldHMgdGhlbSBpbiBwYXJhbGxlbC4KKwkgKiAyLiBBcyBsb25nIGFzIHNvZnR3YXJlIGNhbiBlbnN1cmUgb25seSBjbGVhcmluZyBpdCB3aGVuIGl0IGlzCisJICogICAgc2V0LCBoYXJkd2FyZSB3b24ndCBzZXQgaXQgaW4gcGFyYWxsZWwuCisJICogU28gc29mdHdhcmUgY2FuIGNsZWFyIEdQRSBpbiBhbnkgY29udGV4dHMuCisJICogV2FybmluZzogZG8gbm90IG1vdmUgdGhlIGNoZWNrIGludG8gYWR2YW5jZV90cmFuc2FjdGlvbigpIGFzIHRoZQorCSAqIEVDIGNvbW1hbmRzIHdpbGwgYmUgc2VudCB3aXRob3V0IEdQRSByYWlzZWQuCisJICovCisJaWYgKCFhY3BpX2VjX2lzX2dwZV9yYWlzZWQoZWMpKQorCQlyZXR1cm47CisJYWNwaV9jbGVhcl9ncGUoTlVMTCwgZWMtPmdwZSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uIE1hbmFnZW1lbnQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkIGFjcGlfZWNfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGFjcGlfZWMgKmVjKQoreworCWVjLT5yZWZlcmVuY2VfY291bnQrKzsKKwlpZiAoZWMtPnJlZmVyZW5jZV9jb3VudCA9PSAxKQorCQlhY3BpX2VjX2VuYWJsZV9ncGUoZWMsIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBhY3BpX2VjX2NvbXBsZXRlX3JlcXVlc3Qoc3RydWN0IGFjcGlfZWMgKmVjKQoreworCWJvb2wgZmx1c2hlZCA9IGZhbHNlOworCisJZWMtPnJlZmVyZW5jZV9jb3VudC0tOworCWlmIChlYy0+cmVmZXJlbmNlX2NvdW50ID09IDApCisJCWFjcGlfZWNfZGlzYWJsZV9ncGUoZWMsIHRydWUpOworCWZsdXNoZWQgPSBhY3BpX2VjX2ZsdXNoZWQoZWMpOworCWlmIChmbHVzaGVkKQorCQl3YWtlX3VwKCZlYy0+d2FpdCk7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfZWNfc2V0X3N0b3JtKHN0cnVjdCBhY3BpX2VjICplYywgdTggZmxhZykKK3sKKwlpZiAoIXRlc3RfYml0KGZsYWcsICZlYy0+ZmxhZ3MpKSB7CisJCWFjcGlfZWNfZGlzYWJsZV9ncGUoZWMsIGZhbHNlKTsKKwkJcHJfZGVidWcoIisrKysrIFBvbGxpbmcgZW5hYmxlZCArKysrK1xuIik7CisJCXNldF9iaXQoZmxhZywgJmVjLT5mbGFncyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBhY3BpX2VjX2NsZWFyX3N0b3JtKHN0cnVjdCBhY3BpX2VjICplYywgdTggZmxhZykKK3sKKwlpZiAodGVzdF9iaXQoZmxhZywgJmVjLT5mbGFncykpIHsKKwkJY2xlYXJfYml0KGZsYWcsICZlYy0+ZmxhZ3MpOworCQlhY3BpX2VjX2VuYWJsZV9ncGUoZWMsIGZhbHNlKTsKKwkJcHJfZGVidWcoIisrKysrIFBvbGxpbmcgZGlzYWJsZWQgKysrKytcbiIpOworCX0KK30KKworLyoKKyAqIGFjcGlfZWNfc3VibWl0X2ZsdXNoYWJsZV9yZXF1ZXN0KCkgLSBJbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IHVubGVzcworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBmbHVzaCBvcGVyYXRpb24gaXMgbm90IGluCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MKKyAqIEBlYzogdGhlIEVDIGRldmljZQorICogQGFsbG93X2V2ZW50OiB3aGV0aGVyIGV2ZW50IHNob3VsZCBiZSBoYW5kbGVkCisgKgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIHVzZWQgYmVmb3JlIHRha2luZyBhIG5ldyBhY3Rpb24gdGhhdCBzaG91bGQgaG9sZAorICogdGhlIHJlZmVyZW5jZSBjb3VudC4gIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBmYWxzZSwgdGhlbiB0aGUgYWN0aW9uCisgKiBtdXN0IGJlIGRpc2NhcmRlZCBvciBpdCB3aWxsIHByZXZlbnQgdGhlIGZsdXNoIG9wZXJhdGlvbiBmcm9tIGJlaW5nCisgKiBjb21wbGV0ZWQuCisgKgorICogRHVyaW5nIGZsdXNoaW5nLCBRUl9FQyBjb21tYW5kIG5lZWQgdG8gcGFzcyB0aGlzIGNoZWNrIHdoZW4gdGhlcmUgaXMgYQorICogcGVuZGluZyBldmVudCwgc28gdGhhdCB0aGUgcmVmZXJlbmNlIGNvdW50IGhlbGQgZm9yIHRoZSBwZW5kaW5nIGV2ZW50CisgKiBjYW4gYmUgZGVjcmVhc2VkIGJ5IHRoZSBjb21wbGV0aW9uIG9mIHRoZSBRUl9FQyBjb21tYW5kLgorICovCitzdGF0aWMgYm9vbCBhY3BpX2VjX3N1Ym1pdF9mbHVzaGFibGVfcmVxdWVzdChzdHJ1Y3QgYWNwaV9lYyAqZWMsCisJCQkJCSAgICAgYm9vbCBhbGxvd19ldmVudCkKK3sKKwlpZiAoIWFjcGlfZWNfc3RhcnRlZChlYykpIHsKKwkJaWYgKCFhbGxvd19ldmVudCB8fCAhYWNwaV9lY19oYXNfcGVuZGluZ19ldmVudChlYykpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWFjcGlfZWNfc3VibWl0X3JlcXVlc3QoZWMpOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBhY3BpX2VjX3N1Ym1pdF9ldmVudChzdHJ1Y3QgYWNwaV9lYyAqZWMpCit7CisJaWYgKCF0ZXN0X2JpdChFQ19GTEFHU19FVkVOVF9ERVRFQ1RFRCwgJmVjLT5mbGFncykgfHwKKwkgICAgIXRlc3RfYml0KEVDX0ZMQUdTX0VWRU5UX0VOQUJMRUQsICZlYy0+ZmxhZ3MpKQorCQlyZXR1cm47CisJLyogSG9sZCByZWZlcmVuY2UgZm9yIHBlbmRpbmcgZXZlbnQgKi8KKwlpZiAoIWFjcGlfZWNfc3VibWl0X2ZsdXNoYWJsZV9yZXF1ZXN0KGVjLCB0cnVlKSkKKwkJcmV0dXJuOworCWVjX2RlYnVnX3JlZihlYywgIkluY3JlYXNlIGV2ZW50XG4iKTsKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoRUNfRkxBR1NfRVZFTlRfUEVORElORywgJmVjLT5mbGFncykpIHsKKwkJcHJfZGVidWcoIioqKioqIEV2ZW50IHF1ZXJ5IHN0YXJ0ZWQgKioqKipcbiIpOworCQlzY2hlZHVsZV93b3JrKCZlYy0+d29yayk7CisJCXJldHVybjsKKwl9CisJYWNwaV9lY19jb21wbGV0ZV9yZXF1ZXN0KGVjKTsKKwllY19kZWJ1Z19yZWYoZWMsICJEZWNyZWFzZSBldmVudFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfZWNfY29tcGxldGVfZXZlbnQoc3RydWN0IGFjcGlfZWMgKmVjKQoreworCWlmIChlYy0+Y3Vyci0+Y29tbWFuZCA9PSBBQ1BJX0VDX0NPTU1BTkRfUVVFUlkpIHsKKwkJY2xlYXJfYml0KEVDX0ZMQUdTX0VWRU5UX1BFTkRJTkcsICZlYy0+ZmxhZ3MpOworCQlwcl9kZWJ1ZygiKioqKiogRXZlbnQgcXVlcnkgc3RvcHBlZCAqKioqKlxuIik7CisJCS8qIFVuaG9sZCByZWZlcmVuY2UgZm9yIHBlbmRpbmcgZXZlbnQgKi8KKwkJYWNwaV9lY19jb21wbGV0ZV9yZXF1ZXN0KGVjKTsKKwkJZWNfZGVidWdfcmVmKGVjLCAiRGVjcmVhc2UgZXZlbnRcbiIpOworCQkvKiBDaGVjayBpZiB0aGVyZSBpcyBhbm90aGVyIFNDSV9FVlQgZGV0ZWN0ZWQgKi8KKwkJYWNwaV9lY19zdWJtaXRfZXZlbnQoZWMpOworCX0KK30KKworc3RhdGljIHZvaWQgYWNwaV9lY19zdWJtaXRfZGV0ZWN0aW9uKHN0cnVjdCBhY3BpX2VjICplYykKK3sKKwkvKiBIb2xkIHJlZmVyZW5jZSBmb3IgcXVlcnkgc3VibWlzc2lvbiAqLworCWlmICghYWNwaV9lY19zdWJtaXRfZmx1c2hhYmxlX3JlcXVlc3QoZWMsIGZhbHNlKSkKKwkJcmV0dXJuOworCWVjX2RlYnVnX3JlZihlYywgIkluY3JlYXNlIHF1ZXJ5XG4iKTsKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoRUNfRkxBR1NfRVZFTlRfREVURUNURUQsICZlYy0+ZmxhZ3MpKSB7CisJCXByX2RlYnVnKCIqKioqKiBFdmVudCBkZXRlY3Rpb24gYmxvY2tlZCAqKioqKlxuIik7CisJCWFjcGlfZWNfc3VibWl0X2V2ZW50KGVjKTsKKwkJcmV0dXJuOworCX0KKwlhY3BpX2VjX2NvbXBsZXRlX3JlcXVlc3QoZWMpOworCWVjX2RlYnVnX3JlZihlYywgIkRlY3JlYXNlIHF1ZXJ5XG4iKTsKK30KKworc3RhdGljIHZvaWQgYWNwaV9lY19jb21wbGV0ZV9kZXRlY3Rpb24oc3RydWN0IGFjcGlfZWMgKmVjKQoreworCWlmIChlYy0+Y3Vyci0+Y29tbWFuZCA9PSBBQ1BJX0VDX0NPTU1BTkRfUVVFUlkpIHsKKwkJY2xlYXJfYml0KEVDX0ZMQUdTX0VWRU5UX0RFVEVDVEVELCAmZWMtPmZsYWdzKTsKKwkJcHJfZGVidWcoIioqKioqIEV2ZW50IGRldGV0aW9uIHVuYmxvY2tlZCAqKioqKlxuIik7CisJCS8qIFVuaG9sZCByZWZlcmVuY2UgZm9yIHF1ZXJ5IHN1Ym1pc3Npb24gKi8KKwkJYWNwaV9lY19jb21wbGV0ZV9yZXF1ZXN0KGVjKTsKKwkJZWNfZGVidWdfcmVmKGVjLCAiRGVjcmVhc2UgcXVlcnlcbiIpOworCX0KK30KKworc3RhdGljIHZvaWQgYWNwaV9lY19lbmFibGVfZXZlbnQoc3RydWN0IGFjcGlfZWMgKmVjKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWMtPmxvY2ssIGZsYWdzKTsKKwlzZXRfYml0KEVDX0ZMQUdTX0VWRU5UX0VOQUJMRUQsICZlYy0+ZmxhZ3MpOworCS8qCisJICogQW4gZXZlbnQgbWF5IGJlIHBlbmRpbmcgZXZlbiB3aXRoIFNDSV9FVlQ9MCwgc28gUVJfRUMgc2hvdWxkCisJICogYWx3YXlzIGJlIGlzc3VlZCByaWdodCBhZnRlciBzdGFydGVkLgorCSAqLworCWFjcGlfZWNfc3VibWl0X2RldGVjdGlvbihlYyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWMtPmxvY2ssIGZsYWdzKTsKK30KKwogc3RhdGljIGludCBlY190cmFuc2FjdGlvbl9jb21wbGV0ZWQoc3RydWN0IGFjcGlfZWMgKmVjKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yMDAsNyArNDM5LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgYm9vbCBhZHZhbmNlX3RyYW5zYWN0aW9uKHN0cnVjdCBhY3BpX2VjICplYykKK3N0YXRpYyB2b2lkIGFkdmFuY2VfdHJhbnNhY3Rpb24oc3RydWN0IGFjcGlfZWMgKmVjKQogewogCXN0cnVjdCB0cmFuc2FjdGlvbiAqdDsKIAl1OCBzdGF0dXM7CkBAIC0yMDgsNiArNDQ3LDEyIEBACiAKIAlwcl9kZWJ1ZygiPT09PT0gJXMgKCVkKSA9PT09PVxuIiwKIAkJIGluX2ludGVycnVwdCgpID8gIklSUSIgOiAiVEFTSyIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJLyoKKwkgKiBCeSBhbHdheXMgY2xlYXJpbmcgU1RTIGJlZm9yZSBoYW5kbGluZyBhbGwgaW5kaWNhdGlvbnMsIHdlIGNhbgorCSAqIGVuc3VyZSBhIGhhcmR3YXJlIFNUUyAwLT4xIGNoYW5nZSBhZnRlciB0aGlzIGNsZWFyaW5nIGNhbiBhbHdheXMKKwkgKiB0cmlnZ2VyIGEgR1BFIGludGVycnVwdC4KKwkgKi8KKwlhY3BpX2VjX2NsZWFyX2dwZShlYyk7CiAJc3RhdHVzID0gYWNwaV9lY19yZWFkX3N0YXR1cyhlYyk7CiAJdCA9IGVjLT5jdXJyOwogCWlmICghdCkKQEAgLTIyMyw2ICs0NjgsNyBAQAogCQkJCXQtPnJkYXRhW3QtPnJpKytdID0gYWNwaV9lY19yZWFkX2RhdGEoZWMpOwogCQkJCWlmICh0LT5ybGVuID09IHQtPnJpKSB7CiAJCQkJCXQtPmZsYWdzIHw9IEFDUElfRUNfQ09NTUFORF9DT01QTEVURTsKKwkJCQkJYWNwaV9lY19jb21wbGV0ZV9ldmVudChlYyk7CiAJCQkJCWlmICh0LT5jb21tYW5kID09IEFDUElfRUNfQ09NTUFORF9RVUVSWSkKIAkJCQkJCXByX2RlYnVnKCIqKioqKiBDb21tYW5kKCVzKSBoYXJkd2FyZSBjb21wbGV0aW9uICoqKioqXG4iLAogCQkJCQkJCSBhY3BpX2VjX2NtZF9zdHJpbmcodC0+Y29tbWFuZCkpOwpAQCAtMjMzLDI1ICs0NzksMjkgQEAKIAkJfSBlbHNlIGlmICh0LT53bGVuID09IHQtPndpICYmCiAJCQkgICAoc3RhdHVzICYgQUNQSV9FQ19GTEFHX0lCRikgPT0gMCkgewogCQkJdC0+ZmxhZ3MgfD0gQUNQSV9FQ19DT01NQU5EX0NPTVBMRVRFOworCQkJYWNwaV9lY19jb21wbGV0ZV9ldmVudChlYyk7CiAJCQl3YWtldXAgPSB0cnVlOwogCQl9Ci0JCXJldHVybiB3YWtldXA7CisJCWdvdG8gb3V0OwogCX0gZWxzZSB7CiAJCWlmIChFQ19GTEFHU19RVUVSWV9IQU5EU0hBS0UgJiYKIAkJICAgICEoc3RhdHVzICYgQUNQSV9FQ19GTEFHX1NDSSkgJiYKIAkJICAgICh0LT5jb21tYW5kID09IEFDUElfRUNfQ09NTUFORF9RVUVSWSkpIHsKIAkJCXQtPmZsYWdzIHw9IEFDUElfRUNfQ09NTUFORF9QT0xMOworCQkJYWNwaV9lY19jb21wbGV0ZV9kZXRlY3Rpb24oZWMpOwogCQkJdC0+cmRhdGFbdC0+cmkrK10gPSAweDAwOwogCQkJdC0+ZmxhZ3MgfD0gQUNQSV9FQ19DT01NQU5EX0NPTVBMRVRFOworCQkJYWNwaV9lY19jb21wbGV0ZV9ldmVudChlYyk7CiAJCQlwcl9kZWJ1ZygiKioqKiogQ29tbWFuZCglcykgc29mdHdhcmUgY29tcGxldGlvbiAqKioqKlxuIiwKIAkJCQkgYWNwaV9lY19jbWRfc3RyaW5nKHQtPmNvbW1hbmQpKTsKIAkJCXdha2V1cCA9IHRydWU7CiAJCX0gZWxzZSBpZiAoKHN0YXR1cyAmIEFDUElfRUNfRkxBR19JQkYpID09IDApIHsKIAkJCWFjcGlfZWNfd3JpdGVfY21kKGVjLCB0LT5jb21tYW5kKTsKIAkJCXQtPmZsYWdzIHw9IEFDUElfRUNfQ09NTUFORF9QT0xMOworCQkJYWNwaV9lY19jb21wbGV0ZV9kZXRlY3Rpb24oZWMpOwogCQl9IGVsc2UKIAkJCWdvdG8gZXJyOwotCQlyZXR1cm4gd2FrZXVwOworCQlnb3RvIG91dDsKIAl9CiBlcnI6CiAJLyoKQEAgLTI1OSwyOCArNTA5LDI3IEBACiAJICogb3RoZXJ3aXNlIHdpbGwgdGFrZSBhIG5vdCBoYW5kbGVkIElSUSBhcyBhIGZhbHNlIG9uZS4KIAkgKi8KIAlpZiAoIShzdGF0dXMgJiBBQ1BJX0VDX0ZMQUdfU0NJKSkgewotCQlpZiAoaW5faW50ZXJydXB0KCkgJiYgdCkKLQkJCSsrdC0+aXJxX2NvdW50OworCQlpZiAoaW5faW50ZXJydXB0KCkgJiYgdCkgeworCQkJaWYgKHQtPmlycV9jb3VudCA8IGVjX3N0b3JtX3RocmVzaG9sZCkKKwkJCQkrK3QtPmlycV9jb3VudDsKKwkJCS8qIEFsbG93IHRyaWdnZXJpbmcgb24gMCB0aHJlc2hvbGQgKi8KKwkJCWlmICh0LT5pcnFfY291bnQgPT0gZWNfc3Rvcm1fdGhyZXNob2xkKQorCQkJCWFjcGlfZWNfc2V0X3N0b3JtKGVjLCBFQ19GTEFHU19DT01NQU5EX1NUT1JNKTsKKwkJfQogCX0KLQlyZXR1cm4gd2FrZXVwOworb3V0OgorCWlmIChzdGF0dXMgJiBBQ1BJX0VDX0ZMQUdfU0NJKQorCQlhY3BpX2VjX3N1Ym1pdF9kZXRlY3Rpb24oZWMpOworCWlmICh3YWtldXAgJiYgaW5faW50ZXJydXB0KCkpCisJCXdha2VfdXAoJmVjLT53YWl0KTsKIH0KIAogc3RhdGljIHZvaWQgc3RhcnRfdHJhbnNhY3Rpb24oc3RydWN0IGFjcGlfZWMgKmVjKQogewogCWVjLT5jdXJyLT5pcnFfY291bnQgPSBlYy0+Y3Vyci0+d2kgPSBlYy0+Y3Vyci0+cmkgPSAwOwogCWVjLT5jdXJyLT5mbGFncyA9IDA7Ci0JKHZvaWQpYWR2YW5jZV90cmFuc2FjdGlvbihlYyk7Ci19Ci0KLXN0YXRpYyBpbnQgYWNwaV9lY19zeW5jX3F1ZXJ5KHN0cnVjdCBhY3BpX2VjICplYywgdTggKmRhdGEpOwotCi1zdGF0aWMgaW50IGVjX2NoZWNrX3NjaV9zeW5jKHN0cnVjdCBhY3BpX2VjICplYywgdTggc3RhdGUpCi17Ci0JaWYgKHN0YXRlICYgQUNQSV9FQ19GTEFHX1NDSSkgewotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoRUNfRkxBR1NfUVVFUllfUEVORElORywgJmVjLT5mbGFncykpCi0JCQlyZXR1cm4gYWNwaV9lY19zeW5jX3F1ZXJ5KGVjLCBOVUxMKTsKLQl9Ci0JcmV0dXJuIDA7CisJZWMtPmN1cnItPnRpbWVzdGFtcCA9IGppZmZpZXM7CisJYWR2YW5jZV90cmFuc2FjdGlvbihlYyk7CiB9CiAKIHN0YXRpYyBpbnQgZWNfcG9sbChzdHJ1Y3QgYWNwaV9lYyAqZWMpCkBAIC0yOTEsMjAgKzU0MCwyNSBAQAogCXdoaWxlIChyZXBlYXQtLSkgewogCQl1bnNpZ25lZCBsb25nIGRlbGF5ID0gamlmZmllcyArCiAJCQltc2Vjc190b19qaWZmaWVzKGVjX2RlbGF5KTsKKwkJdW5zaWduZWQgbG9uZyB1c2VjcyA9IEFDUElfRUNfVURFTEFZX1BPTEw7CiAJCWRvIHsKIAkJCS8qIGRvbid0IHNsZWVwIHdpdGggZGlzYWJsZWQgaW50ZXJydXB0cyAqLwogCQkJaWYgKEVDX0ZMQUdTX01TSSB8fCBpcnFzX2Rpc2FibGVkKCkpIHsKLQkJCQl1ZGVsYXkoQUNQSV9FQ19NU0lfVURFTEFZKTsKKwkJCQl1c2VjcyA9IEFDUElfRUNfTVNJX1VERUxBWTsKKwkJCQl1ZGVsYXkodXNlY3MpOwogCQkJCWlmIChlY190cmFuc2FjdGlvbl9jb21wbGV0ZWQoZWMpKQogCQkJCQlyZXR1cm4gMDsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKHdhaXRfZXZlbnRfdGltZW91dChlYy0+d2FpdCwKIAkJCQkJCWVjX3RyYW5zYWN0aW9uX2NvbXBsZXRlZChlYyksCi0JCQkJCQltc2Vjc190b19qaWZmaWVzKDEpKSkKKwkJCQkJCXVzZWNzX3RvX2ppZmZpZXModXNlY3MpKSkKIAkJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWMtPmxvY2ssIGZsYWdzKTsKLQkJCSh2b2lkKWFkdmFuY2VfdHJhbnNhY3Rpb24oZWMpOworCQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKKwkJCQkJZWMtPmN1cnItPnRpbWVzdGFtcCArCisJCQkJCXVzZWNzX3RvX2ppZmZpZXModXNlY3MpKSkKKwkJCQlhZHZhbmNlX3RyYW5zYWN0aW9uKGVjKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVjLT5sb2NrLCBmbGFncyk7CiAJCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlbGF5KSk7CiAJCXByX2RlYnVnKCJjb250cm9sbGVyIHJlc2V0LCByZXN0YXJ0IHRyYW5zYWN0aW9uXG4iKTsKQEAgLTMyNSwyMSArNTc5LDI5IEBACiAJCXVkZWxheShBQ1BJX0VDX01TSV9VREVMQVkpOwogCS8qIHN0YXJ0IHRyYW5zYWN0aW9uICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVjLT5sb2NrLCB0bXApOworCS8qIEVuYWJsZSBHUEUgZm9yIGNvbW1hbmQgcHJvY2Vzc2luZyAoSUJGPTAvT0JGPTEpICovCisJaWYgKCFhY3BpX2VjX3N1Ym1pdF9mbHVzaGFibGVfcmVxdWVzdChlYywgdHJ1ZSkpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byB1bmxvY2s7CisJfQorCWVjX2RlYnVnX3JlZihlYywgIkluY3JlYXNlIGNvbW1hbmRcbiIpOwogCS8qIGZvbGxvd2luZyB0d28gYWN0aW9ucyBzaG91bGQgYmUga2VwdCBhdG9taWMgKi8KIAllYy0+Y3VyciA9IHQ7CiAJcHJfZGVidWcoIioqKioqIENvbW1hbmQoJXMpIHN0YXJ0ZWQgKioqKipcbiIsCiAJCSBhY3BpX2VjX2NtZF9zdHJpbmcodC0+Y29tbWFuZCkpOwogCXN0YXJ0X3RyYW5zYWN0aW9uKGVjKTsKLQlpZiAoZWMtPmN1cnItPmNvbW1hbmQgPT0gQUNQSV9FQ19DT01NQU5EX1FVRVJZKSB7Ci0JCWNsZWFyX2JpdChFQ19GTEFHU19RVUVSWV9QRU5ESU5HLCAmZWMtPmZsYWdzKTsKLQkJcHJfZGVidWcoIioqKioqIEV2ZW50IHN0b3BwZWQgKioqKipcbiIpOwotCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlYy0+bG9jaywgdG1wKTsKIAlyZXQgPSBlY19wb2xsKGVjKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZWMtPmxvY2ssIHRtcCk7CisJaWYgKHQtPmlycV9jb3VudCA9PSBlY19zdG9ybV90aHJlc2hvbGQpCisJCWFjcGlfZWNfY2xlYXJfc3Rvcm0oZWMsIEVDX0ZMQUdTX0NPTU1BTkRfU1RPUk0pOwogCXByX2RlYnVnKCIqKioqKiBDb21tYW5kKCVzKSBzdG9wcGVkICoqKioqXG4iLAogCQkgYWNwaV9lY19jbWRfc3RyaW5nKHQtPmNvbW1hbmQpKTsKIAllYy0+Y3VyciA9IE5VTEw7CisJLyogRGlzYWJsZSBHUEUgZm9yIGNvbW1hbmQgcHJvY2Vzc2luZyAoSUJGPTAvT0JGPTEpICovCisJYWNwaV9lY19jb21wbGV0ZV9yZXF1ZXN0KGVjKTsKKwllY19kZWJ1Z19yZWYoZWMsICJEZWNyZWFzZSBjb21tYW5kXG4iKTsKK3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlYy0+bG9jaywgdG1wKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzU0LDEwICs2MTYsNiBAQAogCWlmICh0LT5yZGF0YSkKIAkJbWVtc2V0KHQtPnJkYXRhLCAwLCB0LT5ybGVuKTsKIAltdXRleF9sb2NrKCZlYy0+bXV0ZXgpOwotCWlmICh0ZXN0X2JpdChFQ19GTEFHU19CTE9DS0VELCAmZWMtPmZsYWdzKSkgewotCQlzdGF0dXMgPSAtRUlOVkFMOwotCQlnb3RvIHVubG9jazsKLQl9CiAJaWYgKGVjLT5nbG9iYWxfbG9jaykgewogCQlzdGF0dXMgPSBhY3BpX2FjcXVpcmVfZ2xvYmFsX2xvY2soQUNQSV9FQ19VREVMQVlfR0xLLCAmZ2xrKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CkBAIC0zNjUsMjYgKzYyMywxMSBAQAogCQkJZ290byB1bmxvY2s7CiAJCX0KIAl9Ci0JLyogZGlzYWJsZSBHUEUgZHVyaW5nIHRyYW5zYWN0aW9uIGlmIHN0b3JtIGlzIGRldGVjdGVkICovCi0JaWYgKHRlc3RfYml0KEVDX0ZMQUdTX0dQRV9TVE9STSwgJmVjLT5mbGFncykpIHsKLQkJLyogSXQgaGFzIHRvIGJlIGRpc2FibGVkLCBzbyB0aGF0IGl0IGRvZXNuJ3QgdHJpZ2dlci4gKi8KLQkJYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKLQl9CiAKIAlzdGF0dXMgPSBhY3BpX2VjX3RyYW5zYWN0aW9uX3VubG9ja2VkKGVjLCB0KTsKIAotCS8qIGNoZWNrIGlmIHdlIHJlY2VpdmVkIFNDSSBkdXJpbmcgdHJhbnNhY3Rpb24gKi8KLQllY19jaGVja19zY2lfc3luYyhlYywgYWNwaV9lY19yZWFkX3N0YXR1cyhlYykpOwotCWlmICh0ZXN0X2JpdChFQ19GTEFHU19HUEVfU1RPUk0sICZlYy0+ZmxhZ3MpKSB7CisJaWYgKHRlc3RfYml0KEVDX0ZMQUdTX0NPTU1BTkRfU1RPUk0sICZlYy0+ZmxhZ3MpKQogCQltc2xlZXAoMSk7Ci0JCS8qIEl0IGlzIHNhZmUgdG8gZW5hYmxlIHRoZSBHUEUgb3V0c2lkZSBvZiB0aGUgdHJhbnNhY3Rpb24uICovCi0JCWFjcGlfZW5hYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKLQl9IGVsc2UgaWYgKHQtPmlycV9jb3VudCA+IGVjX3N0b3JtX3RocmVzaG9sZCkgewotCQlwcl9pbmZvKCJHUEUgc3Rvcm0gZGV0ZWN0ZWQoJWQgR1BFcyksICIKLQkJCSJ0cmFuc2FjdGlvbnMgd2lsbCB1c2UgcG9sbGluZyBtb2RlXG4iLAotCQkJdC0+aXJxX2NvdW50KTsKLQkJc2V0X2JpdChFQ19GTEFHU19HUEVfU1RPUk0sICZlYy0+ZmxhZ3MpOwotCX0KIAlpZiAoZWMtPmdsb2JhbF9sb2NrKQogCQlhY3BpX3JlbGVhc2VfZ2xvYmFsX2xvY2soZ2xrKTsKIHVubG9jazoKQEAgLTUwMCw3ICs3NDMsNyBAQAogCXU4IHZhbHVlID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBBQ1BJX0VDX0NMRUFSX01BWDsgaSsrKSB7Ci0JCXN0YXR1cyA9IGFjcGlfZWNfc3luY19xdWVyeShlYywgJnZhbHVlKTsKKwkJc3RhdHVzID0gYWNwaV9lY19xdWVyeShlYywgJnZhbHVlKTsKIAkJaWYgKHN0YXR1cyB8fCAhdmFsdWUpCiAJCQlicmVhazsKIAl9CkBAIC01MTEsNiArNzU0LDU3IEBACiAJCXByX2luZm8oIiVkIHN0YWxlIEVDIGV2ZW50cyBjbGVhcmVkXG4iLCBpKTsKIH0KIAorc3RhdGljIHZvaWQgYWNwaV9lY19zdGFydChzdHJ1Y3QgYWNwaV9lYyAqZWMsIGJvb2wgcmVzdW1pbmcpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlYy0+bG9jaywgZmxhZ3MpOworCWlmICghdGVzdF9hbmRfc2V0X2JpdChFQ19GTEFHU19TVEFSVEVELCAmZWMtPmZsYWdzKSkgeworCQlwcl9kZWJ1ZygiKysrKysgU3RhcnRpbmcgRUMgKysrKytcbiIpOworCQkvKiBFbmFibGUgR1BFIGZvciBldmVudCBwcm9jZXNzaW5nIChTQ0lfRVZUPTEpICovCisJCWlmICghcmVzdW1pbmcpIHsKKwkJCWFjcGlfZWNfc3VibWl0X3JlcXVlc3QoZWMpOworCQkJZWNfZGVidWdfcmVmKGVjLCAiSW5jcmVhc2UgZHJpdmVyXG4iKTsKKwkJfQorCQlwcl9pbmZvKCIrKysrKyBFQyBzdGFydGVkICsrKysrXG4iKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWMtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGJvb2wgYWNwaV9lY19zdG9wcGVkKHN0cnVjdCBhY3BpX2VjICplYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWJvb2wgZmx1c2hlZDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlYy0+bG9jaywgZmxhZ3MpOworCWZsdXNoZWQgPSBhY3BpX2VjX2ZsdXNoZWQoZWMpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVjLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIGZsdXNoZWQ7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfZWNfc3RvcChzdHJ1Y3QgYWNwaV9lYyAqZWMsIGJvb2wgc3VzcGVuZGluZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVjLT5sb2NrLCBmbGFncyk7CisJaWYgKGFjcGlfZWNfc3RhcnRlZChlYykpIHsKKwkJcHJfZGVidWcoIisrKysrIFN0b3BwaW5nIEVDICsrKysrXG4iKTsKKwkJc2V0X2JpdChFQ19GTEFHU19TVE9QUEVELCAmZWMtPmZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWMtPmxvY2ssIGZsYWdzKTsKKwkJd2FpdF9ldmVudChlYy0+d2FpdCwgYWNwaV9lY19zdG9wcGVkKGVjKSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZlYy0+bG9jaywgZmxhZ3MpOworCQkvKiBEaXNhYmxlIEdQRSBmb3IgZXZlbnQgcHJvY2Vzc2luZyAoU0NJX0VWVD0xKSAqLworCQlpZiAoIXN1c3BlbmRpbmcpIHsKKwkJCWFjcGlfZWNfY29tcGxldGVfcmVxdWVzdChlYyk7CisJCQllY19kZWJ1Z19yZWYoZWMsICJEZWNyZWFzZSBkcml2ZXJcbiIpOworCQl9CisJCWNsZWFyX2JpdChFQ19GTEFHU19TVEFSVEVELCAmZWMtPmZsYWdzKTsKKwkJY2xlYXJfYml0KEVDX0ZMQUdTX1NUT1BQRUQsICZlYy0+ZmxhZ3MpOworCQlwcl9pbmZvKCIrKysrKyBFQyBzdG9wcGVkICsrKysrXG4iKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWMtPmxvY2ssIGZsYWdzKTsKK30KKwogdm9pZCBhY3BpX2VjX2Jsb2NrX3RyYW5zYWN0aW9ucyh2b2lkKQogewogCXN0cnVjdCBhY3BpX2VjICplYyA9IGZpcnN0X2VjOwpAQCAtNTIwLDcgKzgxNCw3IEBACiAKIAltdXRleF9sb2NrKCZlYy0+bXV0ZXgpOwogCS8qIFByZXZlbnQgdHJhbnNhY3Rpb25zIGZyb20gYmVpbmcgY2FycmllZCBvdXQgKi8KLQlzZXRfYml0KEVDX0ZMQUdTX0JMT0NLRUQsICZlYy0+ZmxhZ3MpOworCWFjcGlfZWNfc3RvcChlYywgdHJ1ZSk7CiAJbXV0ZXhfdW5sb2NrKCZlYy0+bXV0ZXgpOwogfQogCkBAIC01MzEsMTQgKzgyNSwxMSBAQAogCWlmICghZWMpCiAJCXJldHVybjsKIAotCW11dGV4X2xvY2soJmVjLT5tdXRleCk7CiAJLyogQWxsb3cgdHJhbnNhY3Rpb25zIHRvIGJlIGNhcnJpZWQgb3V0IGFnYWluICovCi0JY2xlYXJfYml0KEVDX0ZMQUdTX0JMT0NLRUQsICZlYy0+ZmxhZ3MpOworCWFjcGlfZWNfc3RhcnQoZWMsIHRydWUpOwogCiAJaWYgKEVDX0ZMQUdTX0NMRUFSX09OX1JFU1VNRSkKIAkJYWNwaV9lY19jbGVhcihlYyk7Ci0KLQltdXRleF91bmxvY2soJmVjLT5tdXRleCk7CiB9CiAKIHZvaWQgYWNwaV9lY191bmJsb2NrX3RyYW5zYWN0aW9uc19lYXJseSh2b2lkKQpAQCAtNTQ4LDM2ICs4MzksMzMgQEAKIAkgKiBhdG9taWMgY29udGV4dCBkdXJpbmcgd2FrZXVwLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGFjcXVpcmUgdGhlIG11dGV4KS4KIAkgKi8KIAlpZiAoZmlyc3RfZWMpCi0JCWNsZWFyX2JpdChFQ19GTEFHU19CTE9DS0VELCAmZmlyc3RfZWMtPmZsYWdzKTsKLX0KLQotc3RhdGljIGludCBhY3BpX2VjX3F1ZXJ5X3VubG9ja2VkKHN0cnVjdCBhY3BpX2VjICplYywgdTggKmRhdGEpCi17Ci0JaW50IHJlc3VsdDsKLQl1OCBkOwotCXN0cnVjdCB0cmFuc2FjdGlvbiB0ID0gey5jb21tYW5kID0gQUNQSV9FQ19DT01NQU5EX1FVRVJZLAotCQkJCS53ZGF0YSA9IE5VTEwsIC5yZGF0YSA9ICZkLAotCQkJCS53bGVuID0gMCwgLnJsZW4gPSAxfTsKLQotCWlmICghZWMgfHwgIWRhdGEpCi0JCXJldHVybiAtRUlOVkFMOwotCS8qCi0JICogUXVlcnkgdGhlIEVDIHRvIGZpbmQgb3V0IHdoaWNoIF9ReHggbWV0aG9kIHdlIG5lZWQgdG8gZXZhbHVhdGUuCi0JICogTm90ZSB0aGF0IHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiB0aGUgcXVlcnkgY2F1c2VzIHRoZSBBQ1BJX0VDX1NDSQotCSAqIGJpdCB0byBiZSBjbGVhcmVkIChhbmQgdGh1cyBjbGVhcmluZyB0aGUgaW50ZXJydXB0IHNvdXJjZSkuCi0JICovCi0JcmVzdWx0ID0gYWNwaV9lY190cmFuc2FjdGlvbl91bmxvY2tlZChlYywgJnQpOwotCWlmIChyZXN1bHQpCi0JCXJldHVybiByZXN1bHQ7Ci0JaWYgKCFkKQotCQlyZXR1cm4gLUVOT0RBVEE7Ci0JKmRhdGEgPSBkOwotCXJldHVybiAwOworCQlhY3BpX2VjX3N0YXJ0KGZpcnN0X2VjLCB0cnVlKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnQgTWFuYWdlbWVudAogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBzdHJ1Y3QgYWNwaV9lY19xdWVyeV9oYW5kbGVyICoKK2FjcGlfZWNfZ2V0X3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFjcGlfZWNfcXVlcnlfaGFuZGxlciAqaGFuZGxlcikKK3sKKwlpZiAoaGFuZGxlcikKKwkJa3JlZl9nZXQoJmhhbmRsZXItPmtyZWYpOworCXJldHVybiBoYW5kbGVyOworfQorCitzdGF0aWMgdm9pZCBhY3BpX2VjX3F1ZXJ5X2hhbmRsZXJfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgYWNwaV9lY19xdWVyeV9oYW5kbGVyICpoYW5kbGVyID0KKwkJY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBhY3BpX2VjX3F1ZXJ5X2hhbmRsZXIsIGtyZWYpOworCisJa2ZyZWUoaGFuZGxlcik7Cit9CisKK3N0YXRpYyB2b2lkIGFjcGlfZWNfcHV0X3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFjcGlfZWNfcXVlcnlfaGFuZGxlciAqaGFuZGxlcikKK3sKKwlrcmVmX3B1dCgmaGFuZGxlci0+a3JlZiwgYWNwaV9lY19xdWVyeV9oYW5kbGVyX3JlbGVhc2UpOworfQorCiBpbnQgYWNwaV9lY19hZGRfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYWNwaV9lYyAqZWMsIHU4IHF1ZXJ5X2JpdCwKIAkJCSAgICAgIGFjcGlfaGFuZGxlIGhhbmRsZSwgYWNwaV9lY19xdWVyeV9mdW5jIGZ1bmMsCiAJCQkgICAgICB2b2lkICpkYXRhKQpAQCAtNTkzLDYgKzg4MSw3IEBACiAJaGFuZGxlci0+ZnVuYyA9IGZ1bmM7CiAJaGFuZGxlci0+ZGF0YSA9IGRhdGE7CiAJbXV0ZXhfbG9jaygmZWMtPm11dGV4KTsKKwlrcmVmX2luaXQoJmhhbmRsZXItPmtyZWYpOwogCWxpc3RfYWRkKCZoYW5kbGVyLT5ub2RlLCAmZWMtPmxpc3QpOwogCW11dGV4X3VubG9jaygmZWMtPm11dGV4KTsKIAlyZXR1cm4gMDsKQEAgLTYwMiwxNSArODkxLDE4IEBACiB2b2lkIGFjcGlfZWNfcmVtb3ZlX3F1ZXJ5X2hhbmRsZXIoc3RydWN0IGFjcGlfZWMgKmVjLCB1OCBxdWVyeV9iaXQpCiB7CiAJc3RydWN0IGFjcGlfZWNfcXVlcnlfaGFuZGxlciAqaGFuZGxlciwgKnRtcDsKKwlMSVNUX0hFQUQoZnJlZV9saXN0KTsKIAogCW11dGV4X2xvY2soJmVjLT5tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhhbmRsZXIsIHRtcCwgJmVjLT5saXN0LCBub2RlKSB7CiAJCWlmIChxdWVyeV9iaXQgPT0gaGFuZGxlci0+cXVlcnlfYml0KSB7Ci0JCQlsaXN0X2RlbCgmaGFuZGxlci0+bm9kZSk7Ci0JCQlrZnJlZShoYW5kbGVyKTsKKwkJCWxpc3RfZGVsX2luaXQoJmhhbmRsZXItPm5vZGUpOworCQkJbGlzdF9hZGQoJmhhbmRsZXItPm5vZGUsICZmcmVlX2xpc3QpOwogCQl9CiAJfQogCW11dGV4X3VubG9jaygmZWMtPm11dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZXIsICZmcmVlX2xpc3QsIG5vZGUpCisJCWFjcGlfZWNfcHV0X3F1ZXJ5X2hhbmRsZXIoaGFuZGxlcik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhY3BpX2VjX3JlbW92ZV9xdWVyeV9oYW5kbGVyKTsKIApAQCAtNjI2LDU5ICs5MTgsNTggQEAKIAllbHNlIGlmIChoYW5kbGVyLT5oYW5kbGUpCiAJCWFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZXItPmhhbmRsZSwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJcHJfZGVidWcoIiMjIyMjIFF1ZXJ5KDB4JTAyeCkgc3RvcHBlZCAjIyMjI1xuIiwgaGFuZGxlci0+cXVlcnlfYml0KTsKLQlrZnJlZShoYW5kbGVyKTsKKwlhY3BpX2VjX3B1dF9xdWVyeV9oYW5kbGVyKGhhbmRsZXIpOwogfQogCi1zdGF0aWMgaW50IGFjcGlfZWNfc3luY19xdWVyeShzdHJ1Y3QgYWNwaV9lYyAqZWMsIHU4ICpkYXRhKQorc3RhdGljIGludCBhY3BpX2VjX3F1ZXJ5KHN0cnVjdCBhY3BpX2VjICplYywgdTggKmRhdGEpCiB7CiAJdTggdmFsdWUgPSAwOwotCWludCBzdGF0dXM7Ci0Jc3RydWN0IGFjcGlfZWNfcXVlcnlfaGFuZGxlciAqaGFuZGxlciwgKmNvcHk7CisJaW50IHJlc3VsdDsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfZWNfcXVlcnlfaGFuZGxlciAqaGFuZGxlcjsKKwlzdHJ1Y3QgdHJhbnNhY3Rpb24gdCA9IHsuY29tbWFuZCA9IEFDUElfRUNfQ09NTUFORF9RVUVSWSwKKwkJCQkud2RhdGEgPSBOVUxMLCAucmRhdGEgPSAmdmFsdWUsCisJCQkJLndsZW4gPSAwLCAucmxlbiA9IDF9OwogCi0Jc3RhdHVzID0gYWNwaV9lY19xdWVyeV91bmxvY2tlZChlYywgJnZhbHVlKTsKKwkvKgorCSAqIFF1ZXJ5IHRoZSBFQyB0byBmaW5kIG91dCB3aGljaCBfUXh4IG1ldGhvZCB3ZSBuZWVkIHRvIGV2YWx1YXRlLgorCSAqIE5vdGUgdGhhdCBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgdGhlIHF1ZXJ5IGNhdXNlcyB0aGUgQUNQSV9FQ19TQ0kKKwkgKiBiaXQgdG8gYmUgY2xlYXJlZCAoYW5kIHRodXMgY2xlYXJpbmcgdGhlIGludGVycnVwdCBzb3VyY2UpLgorCSAqLworCXJlc3VsdCA9IGFjcGlfZWNfdHJhbnNhY3Rpb24oZWMsICZ0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OwogCWlmIChkYXRhKQogCQkqZGF0YSA9IHZhbHVlOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIC1FTk9EQVRBOwogCisJbXV0ZXhfbG9jaygmZWMtPm11dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZXIsICZlYy0+bGlzdCwgbm9kZSkgewogCQlpZiAodmFsdWUgPT0gaGFuZGxlci0+cXVlcnlfYml0KSB7CiAJCQkvKiBoYXZlIGN1c3RvbSBoYW5kbGVyIGZvciB0aGlzIGJpdCAqLwotCQkJY29weSA9IGttYWxsb2Moc2l6ZW9mKCpoYW5kbGVyKSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWNvcHkpCi0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQltZW1jcHkoY29weSwgaGFuZGxlciwgc2l6ZW9mKCpjb3B5KSk7CisJCQloYW5kbGVyID0gYWNwaV9lY19nZXRfcXVlcnlfaGFuZGxlcihoYW5kbGVyKTsKIAkJCXByX2RlYnVnKCIjIyMjIyBRdWVyeSgweCUwMngpIHNjaGVkdWxlZCAjIyMjI1xuIiwKIAkJCQkgaGFuZGxlci0+cXVlcnlfYml0KTsKLQkJCXJldHVybiBhY3BpX29zX2V4ZWN1dGUoKGNvcHktPmZ1bmMpID8KKwkJCXN0YXR1cyA9IGFjcGlfb3NfZXhlY3V0ZSgoaGFuZGxlci0+ZnVuYykgPwogCQkJCU9TTF9OT1RJRllfSEFORExFUiA6IE9TTF9HUEVfSEFORExFUiwKLQkJCQlhY3BpX2VjX3J1biwgY29weSk7CisJCQkJYWNwaV9lY19ydW4sIGhhbmRsZXIpOworCQkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQkJCXJlc3VsdCA9IC1FQlVTWTsKKwkJCWJyZWFrOwogCQl9CiAJfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBhY3BpX2VjX2dwZV9xdWVyeSh2b2lkICplY19jeHQpCi17Ci0Jc3RydWN0IGFjcGlfZWMgKmVjID0gZWNfY3h0OwotCi0JaWYgKCFlYykKLQkJcmV0dXJuOwotCW11dGV4X2xvY2soJmVjLT5tdXRleCk7Ci0JYWNwaV9lY19zeW5jX3F1ZXJ5KGVjLCBOVUxMKTsKIAltdXRleF91bmxvY2soJmVjLT5tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBlY19jaGVja19zY2koc3RydWN0IGFjcGlfZWMgKmVjLCB1OCBzdGF0ZSkKK3N0YXRpYyB2b2lkIGFjcGlfZWNfZ3BlX3BvbGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0JaWYgKHN0YXRlICYgQUNQSV9FQ19GTEFHX1NDSSkgewotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoRUNfRkxBR1NfUVVFUllfUEVORElORywgJmVjLT5mbGFncykpIHsKLQkJCXByX2RlYnVnKCIqKioqKiBFdmVudCBzdGFydGVkICoqKioqXG4iKTsKLQkJCXJldHVybiBhY3BpX29zX2V4ZWN1dGUoT1NMX05PVElGWV9IQU5ETEVSLAotCQkJCWFjcGlfZWNfZ3BlX3F1ZXJ5LCBlYyk7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7CisJc3RydWN0IGFjcGlfZWMgKmVjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhY3BpX2VjLCB3b3JrKTsKKworCXByX2RlYnVnKCIqKioqKiBFdmVudCBwb2xsZXIgc3RhcnRlZCAqKioqKlxuIik7CisJYWNwaV9lY19xdWVyeShlYywgTlVMTCk7CisJcHJfZGVidWcoIioqKioqIEV2ZW50IHBvbGxlciBzdG9wcGVkICoqKioqXG4iKTsKIH0KIAogc3RhdGljIHUzMiBhY3BpX2VjX2dwZV9oYW5kbGVyKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsCkBAIC02ODgsMTEgKzk3OSw5IEBACiAJc3RydWN0IGFjcGlfZWMgKmVjID0gZGF0YTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZlYy0+bG9jaywgZmxhZ3MpOwotCWlmIChhZHZhbmNlX3RyYW5zYWN0aW9uKGVjKSkKLQkJd2FrZV91cCgmZWMtPndhaXQpOworCWFkdmFuY2VfdHJhbnNhY3Rpb24oZWMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVjLT5sb2NrLCBmbGFncyk7Ci0JZWNfY2hlY2tfc2NpKGVjLCBhY3BpX2VjX3JlYWRfc3RhdHVzKGVjKSk7Ci0JcmV0dXJuIEFDUElfSU5URVJSVVBUX0hBTkRMRUQgfCBBQ1BJX1JFRU5BQkxFX0dQRTsKKwlyZXR1cm4gQUNQSV9JTlRFUlJVUFRfSEFORExFRDsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTc1MCwxMSArMTAzOSwxMSBAQAogCiAJaWYgKCFlYykKIAkJcmV0dXJuIE5VTEw7Ci0JZWMtPmZsYWdzID0gMSA8PCBFQ19GTEFHU19RVUVSWV9QRU5ESU5HOwogCW11dGV4X2luaXQoJmVjLT5tdXRleCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZWMtPndhaXQpOwogCUlOSVRfTElTVF9IRUFEKCZlYy0+bGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmVjLT5sb2NrKTsKKwlJTklUX1dPUksoJmVjLT53b3JrLCBhY3BpX2VjX2dwZV9wb2xsZXIpOwogCXJldHVybiBlYzsKIH0KIApAQCAtODEwLDEzICsxMDk5LDEzIEBACiAKIAlpZiAodGVzdF9iaXQoRUNfRkxBR1NfSEFORExFUlNfSU5TVEFMTEVELCAmZWMtPmZsYWdzKSkKIAkJcmV0dXJuIDA7Ci0Jc3RhdHVzID0gYWNwaV9pbnN0YWxsX2dwZV9oYW5kbGVyKE5VTEwsIGVjLT5ncGUsCisJc3RhdHVzID0gYWNwaV9pbnN0YWxsX2dwZV9yYXdfaGFuZGxlcihOVUxMLCBlYy0+Z3BlLAogCQkJCSAgQUNQSV9HUEVfRURHRV9UUklHR0VSRUQsCiAJCQkJICAmYWNwaV9lY19ncGVfaGFuZGxlciwgZWMpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlhY3BpX2VuYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CisJYWNwaV9lY19zdGFydChlYywgZmFsc2UpOwogCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9hZGRyZXNzX3NwYWNlX2hhbmRsZXIoZWMtPmhhbmRsZSwKIAkJCQkJCSAgICBBQ1BJX0FEUl9TUEFDRV9FQywKIAkJCQkJCSAgICAmYWNwaV9lY19zcGFjZV9oYW5kbGVyLApAQCAtODMxLDcgKzExMjAsNyBAQAogCQkJcHJfZXJyKCJGYWlsIGluIGV2YWx1YXRpbmcgdGhlIF9SRUcgb2JqZWN0IgogCQkJCSIgb2YgRUMgZGV2aWNlLiBCcm9rZW4gYmlvcyBpcyBzdXNwZWN0ZWQuXG4iKTsKIAkJfSBlbHNlIHsKLQkJCWFjcGlfZGlzYWJsZV9ncGUoTlVMTCwgZWMtPmdwZSk7CisJCQlhY3BpX2VjX3N0b3AoZWMsIGZhbHNlKTsKIAkJCWFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKE5VTEwsIGVjLT5ncGUsCiAJCQkJJmFjcGlfZWNfZ3BlX2hhbmRsZXIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CkBAIC04NDYsNyArMTEzNSw3IEBACiB7CiAJaWYgKCF0ZXN0X2JpdChFQ19GTEFHU19IQU5ETEVSU19JTlNUQUxMRUQsICZlYy0+ZmxhZ3MpKQogCQlyZXR1cm47Ci0JYWNwaV9kaXNhYmxlX2dwZShOVUxMLCBlYy0+Z3BlKTsKKwlhY3BpX2VjX3N0b3AoZWMsIGZhbHNlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfcmVtb3ZlX2FkZHJlc3Nfc3BhY2VfaGFuZGxlcihlYy0+aGFuZGxlLAogCQkJCUFDUElfQURSX1NQQUNFX0VDLCAmYWNwaV9lY19zcGFjZV9oYW5kbGVyKSkpCiAJCXByX2VycigiZmFpbGVkIHRvIHJlbW92ZSBzcGFjZSBoYW5kbGVyXG4iKTsKQEAgLTkwMCwxNCArMTE4OSwxMSBAQAogCXJldCA9IGVjX2luc3RhbGxfaGFuZGxlcnMoZWMpOwogCiAJLyogRUMgaXMgZnVsbHkgb3BlcmF0aW9uYWwsIGFsbG93IHF1ZXJpZXMgKi8KLQljbGVhcl9iaXQoRUNfRkxBR1NfUVVFUllfUEVORElORywgJmVjLT5mbGFncyk7CisJYWNwaV9lY19lbmFibGVfZXZlbnQoZWMpOwogCiAJLyogQ2xlYXIgc3RhbGUgX1EgZXZlbnRzIGlmIGhhcmR3YXJlIG1pZ2h0IHJlcXVpcmUgdGhhdCAqLwotCWlmIChFQ19GTEFHU19DTEVBUl9PTl9SRVNVTUUpIHsKLQkJbXV0ZXhfbG9jaygmZWMtPm11dGV4KTsKKwlpZiAoRUNfRkxBR1NfQ0xFQVJfT05fUkVTVU1FKQogCQlhY3BpX2VjX2NsZWFyKGVjKTsKLQkJbXV0ZXhfdW5sb2NrKCZlYy0+bXV0ZXgpOwotCX0KIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnQuYyBiL2RyaXZlcnMvYWNwaS9ldmVudC5jCmluZGV4IGVmMmQ3MzAuLmUyNGVhNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudC5jCkBAIC0xMDAsNyArMTAwLDYgQEAKIAlzdHJ1Y3QgYWNwaV9nZW5sX2V2ZW50ICpldmVudDsKIAl2b2lkICptc2dfaGVhZGVyOwogCWludCBzaXplOwotCWludCByZXN1bHQ7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KIAlzaXplID0gbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBhY3BpX2dlbmxfZXZlbnQpKSArCkBAIC0xMzcsMTEgKzEzNiw3IEBACiAJZXZlbnQtPmRhdGEgPSBkYXRhOwogCiAJLyogc2VuZCBtdWx0aWNhc3QgZ2VuZXRsaW5rIG1lc3NhZ2UgKi8KLQlyZXN1bHQgPSBnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkZXIpOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCW5sbXNnX2ZyZWUoc2tiKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9CisJZ2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZGVyKTsKIAogCWdlbmxtc2dfbXVsdGljYXN0KCZhY3BpX2V2ZW50X2dlbmxfZmFtaWx5LCBza2IsIDAsIDAsIEdGUF9BVE9NSUMpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2ludGVybmFsLmggYi9kcml2ZXJzL2FjcGkvaW50ZXJuYWwuaAppbmRleCAxNjNlODJmNS4uNTZiMzIxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9hY3BpL2ludGVybmFsLmgKQEAgLTM1LDYgKzM1LDEzIEBACiBpbnQgYWNwaV9zeXNmc19pbml0KHZvaWQpOwogdm9pZCBhY3BpX2NvbnRhaW5lcl9pbml0KHZvaWQpOwogdm9pZCBhY3BpX21lbW9yeV9ob3RwbHVnX2luaXQodm9pZCk7CisjaWZkZWYJQ09ORklHX0FDUElfSE9UUExVR19JT0FQSUMKK2ludCBhY3BpX2lvYXBpY19hZGQoc3RydWN0IGFjcGlfcGNpX3Jvb3QgKnJvb3QpOworaW50IGFjcGlfaW9hcGljX3JlbW92ZShzdHJ1Y3QgYWNwaV9wY2lfcm9vdCAqcm9vdCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgYWNwaV9pb2FwaWNfYWRkKHN0cnVjdCBhY3BpX3BjaV9yb290ICpyb290KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBhY3BpX2lvYXBpY19yZW1vdmUoc3RydWN0IGFjcGlfcGNpX3Jvb3QgKnJvb3QpIHsgcmV0dXJuIDA7IH0KKyNlbmRpZgogI2lmZGVmIENPTkZJR19BQ1BJX0RPQ0sKIHZvaWQgcmVnaXN0ZXJfZG9ja19kZXBlbmRlbnRfZGV2aWNlKHN0cnVjdCBhY3BpX2RldmljZSAqYWRldiwKIAkJCQkgICAgYWNwaV9oYW5kbGUgZHNoYW5kbGUpOwpAQCAtNjgsNiArNzUsOCBAQAogI2VuZGlmCiB2b2lkIGFjcGlfbHBzc19pbml0KHZvaWQpOwogCit2b2lkIGFjcGlfYXBkX2luaXQodm9pZCk7CisKIGFjcGlfc3RhdHVzIGFjcGlfaG90cGx1Z19zY2hlZHVsZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXYsIHUzMiBzcmMpOwogYm9vbCBhY3BpX3F1ZXVlX2hvdHBsdWdfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBhY3BpX2RldmljZV9ob3RwbHVnKHN0cnVjdCBhY3BpX2RldmljZSAqYWRldiwgdTMyIHNyYyk7CkBAIC0xMjIsMTEgKzEzMSwxMyBAQAogCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyOwogCXVuc2lnbmVkIGxvbmcgZ2xvYmFsX2xvY2s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHJlZmVyZW5jZV9jb3VudDsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IHRyYW5zYWN0aW9uICpjdXJyOwogCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgYWNwaV9lYyAqZmlyc3RfZWM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaW9hcGljLmMgYi9kcml2ZXJzL2FjcGkvaW9hcGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkYzhkYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYWNwaS9pb2FwaWMuYwpAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqIElPQVBJQy9JT3hBUElDL0lPU0FQSUMgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEZ1aml0c3UgTGltaXRlZC4KKyAqIChjKSBDb3B5cmlnaHQgMjAwOSBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQmFzZWQgb24gb3JpZ2luYWwgZHJpdmVycy9wY2kvaW9hcGljLmMKKyAqCVlpbmdoYWkgTHUgPHlpbmdoYWlAa2VybmVsLm9yZz4KKyAqCUppYW5nIExpdSA8amlhbmcubGl1QGludGVsLmNvbT4KKyAqLworCisvKgorICogVGhpcyBkcml2ZXIgbWFuYWdlcyBJL08gQVBJQ3MgYWRkZWQgYnkgaG90cGx1ZyBhZnRlciBib290LgorICogV2UgdHJ5IHRvIGNsYWltIGFsbCBJL08gQVBJQyBkZXZpY2VzLCBidXQgdGhvc2UgcHJlc2VudCBhdCBib290IHdlcmUKKyAqIHJlZ2lzdGVyZWQgd2hlbiB3ZSBwYXJzZWQgdGhlIEFDUEkgTUFEVC4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpICJBQ1BJIDogSU9BUElDOiAiIGZtdAorCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KKworc3RydWN0IGFjcGlfcGNpX2lvYXBpYyB7CisJYWNwaV9oYW5kbGUJcm9vdF9oYW5kbGU7CisJYWNwaV9oYW5kbGUJaGFuZGxlOworCXUzMgkJZ3NpX2Jhc2U7CisJc3RydWN0IHJlc291cmNlCXJlczsKKwlzdHJ1Y3QgcGNpX2RldgkqcGRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKGlvYXBpY19saXN0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoaW9hcGljX2xpc3RfbG9jayk7CisKK3N0YXRpYyBhY3BpX3N0YXR1cyBzZXR1cF9yZXMoc3RydWN0IGFjcGlfcmVzb3VyY2UgKmFjcGlfcmVzLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2Vfd2luIHdpbjsKKworCXJlcy0+ZmxhZ3MgPSAwOworCWlmIChhY3BpX2Rldl9maWx0ZXJfcmVzb3VyY2VfdHlwZShhY3BpX3JlcywgSU9SRVNPVVJDRV9NRU0pID09IDApCisJCXJldHVybiBBRV9PSzsKKworCWlmICghYWNwaV9kZXZfcmVzb3VyY2VfbWVtb3J5KGFjcGlfcmVzLCByZXMpKSB7CisJCWlmIChhY3BpX2Rldl9yZXNvdXJjZV9hZGRyZXNzX3NwYWNlKGFjcGlfcmVzLCAmd2luKSB8fAorCQkgICAgYWNwaV9kZXZfcmVzb3VyY2VfZXh0X2FkZHJlc3Nfc3BhY2UoYWNwaV9yZXMsICZ3aW4pKQorCQkJKnJlcyA9IHdpbi5yZXM7CisJfQorCWlmICgocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfUFJFRkVUQ0gpIHx8CisJICAgIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9ESVNBQkxFRCkpCisJCXJlcy0+ZmxhZ3MgPSAwOworCisJcmV0dXJuIEFFX0NUUkxfVEVSTUlOQVRFOworfQorCitzdGF0aWMgYm9vbCBhY3BpX2lzX2lvYXBpYyhhY3BpX2hhbmRsZSBoYW5kbGUsIGNoYXIgKip0eXBlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2VfaW5mbyAqaW5mbzsKKwljaGFyICpoaWQgPSBOVUxMOworCWJvb2wgbWF0Y2ggPSBmYWxzZTsKKworCWlmICghYWNwaV9oYXNfbWV0aG9kKGhhbmRsZSwgIl9HU0IiKSkKKwkJcmV0dXJuIGZhbHNlOworCisJc3RhdHVzID0gYWNwaV9nZXRfb2JqZWN0X2luZm8oaGFuZGxlLCAmaW5mbyk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisJCWlmIChpbmZvLT52YWxpZCAmIEFDUElfVkFMSURfSElEKQorCQkJaGlkID0gaW5mby0+aGFyZHdhcmVfaWQuc3RyaW5nOworCQlpZiAoaGlkKSB7CisJCQlpZiAoc3RyY21wKGhpZCwgIkFDUEkwMDA5IikgPT0gMCkgeworCQkJCSp0eXBlID0gIklPeEFQSUMiOworCQkJCW1hdGNoID0gdHJ1ZTsKKwkJCX0gZWxzZSBpZiAoc3RyY21wKGhpZCwgIkFDUEkwMDBBIikgPT0gMCkgeworCQkJCSp0eXBlID0gIklPQVBJQyI7CisJCQkJbWF0Y2ggPSB0cnVlOworCQkJfQorCQl9CisJCWtmcmVlKGluZm8pOworCX0KKworCXJldHVybiBtYXRjaDsKK30KKworc3RhdGljIGFjcGlfc3RhdHVzIGhhbmRsZV9pb2FwaWNfYWRkKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGx2bCwKKwkJCQkgICAgIHZvaWQgKmNvbnRleHQsIHZvaWQgKipydikKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBsb25nIGdzaV9iYXNlOworCXN0cnVjdCBhY3BpX3BjaV9pb2FwaWMgKmlvYXBpYzsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IE5VTEw7CisJY2hhciAqdHlwZSA9IE5VTEw7CisKKwlpZiAoIWFjcGlfaXNfaW9hcGljKGhhbmRsZSwgJnR5cGUpKQorCQlyZXR1cm4gQUVfT0s7CisKKwltdXRleF9sb2NrKCZpb2FwaWNfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvYXBpYywgJmlvYXBpY19saXN0LCBsaXN0KQorCQlpZiAoaW9hcGljLT5oYW5kbGUgPT0gaGFuZGxlKSB7CisJCQltdXRleF91bmxvY2soJmlvYXBpY19saXN0X2xvY2spOworCQkJcmV0dXJuIEFFX09LOworCQl9CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiX0dTQiIsIE5VTEwsICZnc2lfYmFzZSk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCWFjcGlfaGFuZGxlX3dhcm4oaGFuZGxlLCAiZmFpbGVkIHRvIGV2YWx1YXRlIF9HU0IgbWV0aG9kXG4iKTsKKwkJZ290byBleGl0OworCX0KKworCWlvYXBpYyA9IGt6YWxsb2Moc2l6ZW9mKCppb2FwaWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWlvYXBpYykgeworCQlwcl9lcnIoImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBJT0FQSUNcbiIpOworCQlnb3RvIGV4aXQ7CisJfSBlbHNlIHsKKwkJaW9hcGljLT5yb290X2hhbmRsZSA9IChhY3BpX2hhbmRsZSljb250ZXh0OworCQlpb2FwaWMtPmhhbmRsZSA9IGhhbmRsZTsKKwkJaW9hcGljLT5nc2lfYmFzZSA9ICh1MzIpZ3NpX2Jhc2U7CisJCUlOSVRfTElTVF9IRUFEKCZpb2FwaWMtPmxpc3QpOworCX0KKworCWlmIChhY3BpX2lvYXBpY19yZWdpc3RlcmVkKGhhbmRsZSwgKHUzMilnc2lfYmFzZSkpCisJCWdvdG8gZG9uZTsKKworCWRldiA9IGFjcGlfZ2V0X3BjaV9kZXYoaGFuZGxlKTsKKwlpZiAoZGV2ICYmIHBjaV9yZXNvdXJjZV9sZW4oZGV2LCAwKSkgeworCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSA8IDApCisJCQlnb3RvIGV4aXRfcHV0OworCQlwY2lfc2V0X21hc3RlcihkZXYpOworCQlpZiAocGNpX3JlcXVlc3RfcmVnaW9uKGRldiwgMCwgdHlwZSkpCisJCQlnb3RvIGV4aXRfZGlzYWJsZTsKKwkJcmVzID0gJmRldi0+cmVzb3VyY2VbMF07CisJCWlvYXBpYy0+cGRldiA9IGRldjsKKwl9IGVsc2UgeworCQlwY2lfZGV2X3B1dChkZXYpOworCQlkZXYgPSBOVUxMOworCisJCXJlcyA9ICZpb2FwaWMtPnJlczsKKwkJYWNwaV93YWxrX3Jlc291cmNlcyhoYW5kbGUsIE1FVEhPRF9OQU1FX19DUlMsIHNldHVwX3JlcywgcmVzKTsKKwkJaWYgKHJlcy0+ZmxhZ3MgPT0gMCkgeworCQkJYWNwaV9oYW5kbGVfd2FybihoYW5kbGUsICJmYWlsZWQgdG8gZ2V0IHJlc291cmNlXG4iKTsKKwkJCWdvdG8gZXhpdF9mcmVlOworCQl9IGVsc2UgaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByZXMpKSB7CisJCQlhY3BpX2hhbmRsZV93YXJuKGhhbmRsZSwgImZhaWxlZCB0byBpbnNlcnQgcmVzb3VyY2VcbiIpOworCQkJZ290byBleGl0X2ZyZWU7CisJCX0KKwl9CisKKwlpZiAoYWNwaV9yZWdpc3Rlcl9pb2FwaWMoaGFuZGxlLCByZXMtPnN0YXJ0LCAodTMyKWdzaV9iYXNlKSkgeworCQlhY3BpX2hhbmRsZV93YXJuKGhhbmRsZSwgImZhaWxlZCB0byByZWdpc3RlciBJT0FQSUNcbiIpOworCQlnb3RvIGV4aXRfcmVsZWFzZTsKKwl9Citkb25lOgorCWxpc3RfYWRkKCZpb2FwaWMtPmxpc3QsICZpb2FwaWNfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZpb2FwaWNfbGlzdF9sb2NrKTsKKworCWlmIChkZXYpCisJCWRldl9pbmZvKCZkZXYtPmRldiwgIiVzIGF0ICVwUiwgR1NJICV1XG4iLAorCQkJIHR5cGUsIHJlcywgKHUzMilnc2lfYmFzZSk7CisJZWxzZQorCQlhY3BpX2hhbmRsZV9pbmZvKGhhbmRsZSwgIiVzIGF0ICVwUiwgR1NJICV1XG4iLAorCQkJCSB0eXBlLCByZXMsICh1MzIpZ3NpX2Jhc2UpOworCisJcmV0dXJuIEFFX09LOworCitleGl0X3JlbGVhc2U6CisJaWYgKGRldikKKwkJcGNpX3JlbGVhc2VfcmVnaW9uKGRldiwgMCk7CisJZWxzZQorCQlyZWxlYXNlX3Jlc291cmNlKHJlcyk7CitleGl0X2Rpc2FibGU6CisJaWYgKGRldikKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CitleGl0X3B1dDoKKwlwY2lfZGV2X3B1dChkZXYpOworZXhpdF9mcmVlOgorCWtmcmVlKGlvYXBpYyk7CitleGl0OgorCW11dGV4X3VubG9jaygmaW9hcGljX2xpc3RfbG9jayk7CisJKihhY3BpX3N0YXR1cyAqKXJ2ID0gQUVfRVJST1I7CisJcmV0dXJuIEFFX09LOworfQorCitpbnQgYWNwaV9pb2FwaWNfYWRkKHN0cnVjdCBhY3BpX3BjaV9yb290ICpyb290KQoreworCWFjcGlfc3RhdHVzIHN0YXR1cywgcmV0dmFsID0gQUVfT0s7CisKKwlzdGF0dXMgPSBhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9ERVZJQ0UsIHJvb3QtPmRldmljZS0+aGFuZGxlLAorCQkJCSAgICAgVUlOVF9NQVgsIGhhbmRsZV9pb2FwaWNfYWRkLCBOVUxMLAorCQkJCSAgICAgcm9vdC0+ZGV2aWNlLT5oYW5kbGUsICh2b2lkICoqKSZyZXR2YWwpOworCisJcmV0dXJuIEFDUElfU1VDQ0VTUyhzdGF0dXMpICYmIEFDUElfU1VDQ0VTUyhyZXR2YWwpID8gMCA6IC1FTk9ERVY7Cit9CisKK2ludCBhY3BpX2lvYXBpY19yZW1vdmUoc3RydWN0IGFjcGlfcGNpX3Jvb3QgKnJvb3QpCit7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IGFjcGlfcGNpX2lvYXBpYyAqaW9hcGljLCAqdG1wOworCisJbXV0ZXhfbG9jaygmaW9hcGljX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlvYXBpYywgdG1wLCAmaW9hcGljX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHJvb3QtPmRldmljZS0+aGFuZGxlICE9IGlvYXBpYy0+cm9vdF9oYW5kbGUpCisJCQljb250aW51ZTsKKworCQlpZiAoYWNwaV91bnJlZ2lzdGVyX2lvYXBpYyhpb2FwaWMtPmhhbmRsZSwgaW9hcGljLT5nc2lfYmFzZSkpCisJCQlyZXR2YWwgPSAtRUJVU1k7CisKKwkJaWYgKGlvYXBpYy0+cGRldikgeworCQkJcGNpX3JlbGVhc2VfcmVnaW9uKGlvYXBpYy0+cGRldiwgMCk7CisJCQlwY2lfZGlzYWJsZV9kZXZpY2UoaW9hcGljLT5wZGV2KTsKKwkJCXBjaV9kZXZfcHV0KGlvYXBpYy0+cGRldik7CisJCX0gZWxzZSBpZiAoaW9hcGljLT5yZXMuZmxhZ3MgJiYgaW9hcGljLT5yZXMucGFyZW50KSB7CisJCQlyZWxlYXNlX3Jlc291cmNlKCZpb2FwaWMtPnJlcyk7CisJCX0KKwkJbGlzdF9kZWwoJmlvYXBpYy0+bGlzdCk7CisJCWtmcmVlKGlvYXBpYyk7CisJfQorCW11dGV4X3VubG9jaygmaW9hcGljX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gcmV0dmFsOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL251bWEuYyBiL2RyaXZlcnMvYWNwaS9udW1hLmMKaW5kZXggMjRiNTQ3Ni4uMTMzM2NiZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9udW1hLmMKKysrIGIvZHJpdmVycy9hY3BpL251bWEuYwpAQCAtMTc3LDEyICsxNzcsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX3BhcnNlX3NsaXQoc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZSkKIHsKLQlzdHJ1Y3QgYWNwaV90YWJsZV9zbGl0ICpzbGl0OwotCi0JaWYgKCF0YWJsZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzbGl0ID0gKHN0cnVjdCBhY3BpX3RhYmxlX3NsaXQgKil0YWJsZTsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9zbGl0ICpzbGl0ID0gKHN0cnVjdCBhY3BpX3RhYmxlX3NsaXQgKil0YWJsZTsKIAogCWlmICghc2xpdF92YWxpZChzbGl0KSkgewogCQlwcmludGsoS0VSTl9JTkZPICJBQ1BJOiBTTElUIHRhYmxlIGxvb2tzIGludmFsaWQuIE5vdCB1c2VkLlxuIik7CkBAIC0yNjAsMTEgKzI1NSw4IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfcGFyc2Vfc3JhdChzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKnRhYmxlKQogewotCXN0cnVjdCBhY3BpX3RhYmxlX3NyYXQgKnNyYXQ7Ci0JaWYgKCF0YWJsZSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IGFjcGlfdGFibGVfc3JhdCAqc3JhdCA9IChzdHJ1Y3QgYWNwaV90YWJsZV9zcmF0ICopdGFibGU7CiAKLQlzcmF0ID0gKHN0cnVjdCBhY3BpX3RhYmxlX3NyYXQgKil0YWJsZTsKIAlhY3BpX3NyYXRfcmV2aXNpb24gPSBzcmF0LT5oZWFkZXIucmV2aXNpb247CiAKIAkvKiBSZWFsIHdvcmsgZG9uZSBpbiBhY3BpX3RhYmxlX3BhcnNlX3NyYXQgYmVsb3cuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcGNpX2lycS5jIGIvZHJpdmVycy9hY3BpL3BjaV9pcnEuYwppbmRleCBiMWRlZjQxLi5lN2Y3MThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcGNpX2lycS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wY2lfaXJxLmMKQEAgLTQ4NSwxNCArNDg1LDYgQEAKIAlpZiAoIXBpbiB8fCAhZGV2LT5pcnFfbWFuYWdlZCB8fCBkZXYtPmlycSA8PSAwKQogCQlyZXR1cm47CiAKLQkvKiBLZWVwIElPQVBJQyBwaW4gY29uZmlndXJhdGlvbiB3aGVuIHN1c3BlbmRpbmcgKi8KLQlpZiAoZGV2LT5kZXYucG93ZXIuaXNfcHJlcGFyZWQpCi0JCXJldHVybjsKLSNpZmRlZglDT05GSUdfUE0KLQlpZiAoZGV2LT5kZXYucG93ZXIucnVudGltZV9zdGF0dXMgPT0gUlBNX1NVU1BFTkRJTkcpCi0JCXJldHVybjsKLSNlbmRpZgotCiAJZW50cnkgPSBhY3BpX3BjaV9pcnFfbG9va3VwKGRldiwgcGluKTsKIAlpZiAoIWVudHJ5KQogCQlyZXR1cm47CkBAIC01MTMsNSArNTA1LDYgQEAKIAlpZiAoZ3NpID49IDApIHsKIAkJYWNwaV91bnJlZ2lzdGVyX2dzaShnc2kpOwogCQlkZXYtPmlycV9tYW5hZ2VkID0gMDsKKwkJZGV2LT5pcnEgPSAwOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wY2lfcm9vdC5jIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKaW5kZXggYzZiY2I4Yy4uNjhhNWY3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKKysrIGIvZHJpdmVycy9hY3BpL3BjaV9yb290LmMKQEAgLTExMiwxMCArMTEyLDEwIEBACiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm4gQUVfT0s7CiAKLQlpZiAoKGFkZHJlc3MuYWRkcmVzc19sZW5ndGggPiAwKSAmJgorCWlmICgoYWRkcmVzcy5hZGRyZXNzLmFkZHJlc3NfbGVuZ3RoID4gMCkgJiYKIAkgICAgKGFkZHJlc3MucmVzb3VyY2VfdHlwZSA9PSBBQ1BJX0JVU19OVU1CRVJfUkFOR0UpKSB7Ci0JCXJlcy0+c3RhcnQgPSBhZGRyZXNzLm1pbmltdW07Ci0JCXJlcy0+ZW5kID0gYWRkcmVzcy5taW5pbXVtICsgYWRkcmVzcy5hZGRyZXNzX2xlbmd0aCAtIDE7CisJCXJlcy0+c3RhcnQgPSBhZGRyZXNzLmFkZHJlc3MubWluaW11bTsKKwkJcmVzLT5lbmQgPSBhZGRyZXNzLmFkZHJlc3MubWluaW11bSArIGFkZHJlc3MuYWRkcmVzcy5hZGRyZXNzX2xlbmd0aCAtIDE7CiAJfQogCiAJcmV0dXJuIEFFX09LOwpAQCAtNjIxLDYgKzYyMSw3IEBACiAJaWYgKGhvdGFkZCkgewogCQlwY2liaW9zX3Jlc291cmNlX3N1cnZleV9idXMocm9vdC0+YnVzKTsKIAkJcGNpX2Fzc2lnbl91bmFzc2lnbmVkX3Jvb3RfYnVzX3Jlc291cmNlcyhyb290LT5idXMpOworCQlhY3BpX2lvYXBpY19hZGQocm9vdCk7CiAJfQogCiAJcGNpX2xvY2tfcmVzY2FuX3JlbW92ZSgpOwpAQCAtNjQ0LDYgKzY0NSw4IEBACiAKIAlwY2lfc3RvcF9yb290X2J1cyhyb290LT5idXMpOwogCisJV0FSTl9PTihhY3BpX2lvYXBpY19yZW1vdmUocm9vdCkpOworCiAJZGV2aWNlX3NldF9ydW5fd2FrZShyb290LT5idXMtPmJyaWRnZSwgZmFsc2UpOwogCXBjaV9hY3BpX3JlbW92ZV9idXNfcG1fbm90aWZpZXIoZGV2aWNlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwppbmRleCAwMmU0ODM5Li43OTYyNjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYwpAQCAtNCw2ICs0LDEwIEBACiAgKgogICoJQWxleCBDaGlhbmcgPGFjaGlhbmdAaHAuY29tPgogICoJLSBVbmlmaWVkIHg4Ni9pYTY0IGltcGxlbWVudGF0aW9ucworICoKKyAqIEkvTyBBUElDIGhvdHBsdWcgc3VwcG9ydAorICoJWWluZ2hhaSBMdSA8eWluZ2hhaUBrZXJuZWwub3JnPgorICoJSmlhbmcgTGl1IDxqaWFuZy5saXVAaW50ZWwuY29tPgogICovCiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgpAQCAtMTIsNiArMTYsMjEgQEAKICNkZWZpbmUgX0NPTVBPTkVOVAkJQUNQSV9QUk9DRVNTT1JfQ09NUE9ORU5UCiBBQ1BJX01PRFVMRV9OQU1FKCJwcm9jZXNzb3JfY29yZSIpOwogCitzdGF0aWMgc3RydWN0IGFjcGlfdGFibGVfbWFkdCAqZ2V0X21hZHRfdGFibGUodm9pZCkKK3sKKwlzdGF0aWMgc3RydWN0IGFjcGlfdGFibGVfbWFkdCAqbWFkdDsKKwlzdGF0aWMgaW50IHJlYWRfbWFkdDsKKworCWlmICghcmVhZF9tYWR0KSB7CisJCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfTUFEVCwgMCwKKwkJCQkJKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikmbWFkdCkpKQorCQkJbWFkdCA9IE5VTEw7CisJCXJlYWRfbWFkdCsrOworCX0KKworCXJldHVybiBtYWR0OworfQorCiBzdGF0aWMgaW50IG1hcF9sYXBpY19pZChzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKmVudHJ5LAogCQkgdTMyIGFjcGlfaWQsIGludCAqYXBpY19pZCkKIHsKQEAgLTY3LDE3ICs4NiwxMCBAQAogc3RhdGljIGludCBtYXBfbWFkdF9lbnRyeShpbnQgdHlwZSwgdTMyIGFjcGlfaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBtYWR0X2VuZCwgZW50cnk7Ci0Jc3RhdGljIHN0cnVjdCBhY3BpX3RhYmxlX21hZHQgKm1hZHQ7Ci0Jc3RhdGljIGludCByZWFkX21hZHQ7CiAJaW50IHBoeXNfaWQgPSAtMTsJLyogQ1BVIGhhcmR3YXJlIElEICovCisJc3RydWN0IGFjcGlfdGFibGVfbWFkdCAqbWFkdDsKIAotCWlmICghcmVhZF9tYWR0KSB7Ci0JCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9nZXRfdGFibGUoQUNQSV9TSUdfTUFEVCwgMCwKLQkJCQkJKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikmbWFkdCkpKQotCQkJbWFkdCA9IE5VTEw7Ci0JCXJlYWRfbWFkdCsrOwotCX0KLQorCW1hZHQgPSBnZXRfbWFkdF90YWJsZSgpOwogCWlmICghbWFkdCkKIAkJcmV0dXJuIHBoeXNfaWQ7CiAKQEAgLTIwMywzICsyMTUsOTYgQEAKIAlyZXR1cm4gYWNwaV9tYXBfY3B1aWQocGh5c19pZCwgYWNwaV9pZCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhY3BpX2dldF9jcHVpZCk7CisKKyNpZmRlZiBDT05GSUdfQUNQSV9IT1RQTFVHX0lPQVBJQworc3RhdGljIGludCBnZXRfaW9hcGljX2lkKHN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqZW50cnksIHUzMiBnc2lfYmFzZSwKKwkJCSB1NjQgKnBoeXNfYWRkciwgaW50ICppb2FwaWNfaWQpCit7CisJc3RydWN0IGFjcGlfbWFkdF9pb19hcGljICppb2FwaWMgPSAoc3RydWN0IGFjcGlfbWFkdF9pb19hcGljICopZW50cnk7CisKKwlpZiAoaW9hcGljLT5nbG9iYWxfaXJxX2Jhc2UgIT0gZ3NpX2Jhc2UpCisJCXJldHVybiAwOworCisJKnBoeXNfYWRkciA9IGlvYXBpYy0+YWRkcmVzczsKKwkqaW9hcGljX2lkID0gaW9hcGljLT5pZDsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBwYXJzZV9tYWR0X2lvYXBpY19lbnRyeSh1MzIgZ3NpX2Jhc2UsIHU2NCAqcGh5c19hZGRyKQoreworCXN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGRyOworCXVuc2lnbmVkIGxvbmcgbWFkdF9lbmQsIGVudHJ5OworCXN0cnVjdCBhY3BpX3RhYmxlX21hZHQgKm1hZHQ7CisJaW50IGFwaWNfaWQgPSAtMTsKKworCW1hZHQgPSBnZXRfbWFkdF90YWJsZSgpOworCWlmICghbWFkdCkKKwkJcmV0dXJuIGFwaWNfaWQ7CisKKwllbnRyeSA9ICh1bnNpZ25lZCBsb25nKW1hZHQ7CisJbWFkdF9lbmQgPSBlbnRyeSArIG1hZHQtPmhlYWRlci5sZW5ndGg7CisKKwkvKiBQYXJzZSBhbGwgZW50cmllcyBsb29raW5nIGZvciBhIG1hdGNoLiAqLworCWVudHJ5ICs9IHNpemVvZihzdHJ1Y3QgYWNwaV90YWJsZV9tYWR0KTsKKwl3aGlsZSAoZW50cnkgKyBzaXplb2Yoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyKSA8IG1hZHRfZW5kKSB7CisJCWhkciA9IChzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIgKillbnRyeTsKKwkJaWYgKGhkci0+dHlwZSA9PSBBQ1BJX01BRFRfVFlQRV9JT19BUElDICYmCisJCSAgICBnZXRfaW9hcGljX2lkKGhkciwgZ3NpX2Jhc2UsIHBoeXNfYWRkciwgJmFwaWNfaWQpKQorCQkJYnJlYWs7CisJCWVsc2UKKwkJCWVudHJ5ICs9IGhkci0+bGVuZ3RoOworCX0KKworCXJldHVybiBhcGljX2lkOworfQorCitzdGF0aWMgaW50IHBhcnNlX21hdF9pb2FwaWNfZW50cnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZ3NpX2Jhc2UsCisJCQkJICB1NjQgKnBoeXNfYWRkcikKK3sKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0geyBBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTCB9OworCXN0cnVjdCBhY3BpX3N1YnRhYmxlX2hlYWRlciAqaGVhZGVyOworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJaW50IGFwaWNfaWQgPSAtMTsKKworCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9ldmFsdWF0ZV9vYmplY3QoaGFuZGxlLCAiX01BVCIsIE5VTEwsICZidWZmZXIpKSkKKwkJZ290byBleGl0OworCisJaWYgKCFidWZmZXIubGVuZ3RoIHx8ICFidWZmZXIucG9pbnRlcikKKwkJZ290byBleGl0OworCisJb2JqID0gYnVmZmVyLnBvaW50ZXI7CisJaWYgKG9iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSIHx8CisJICAgIG9iai0+YnVmZmVyLmxlbmd0aCA8IHNpemVvZihzdHJ1Y3QgYWNwaV9zdWJ0YWJsZV9oZWFkZXIpKQorCQlnb3RvIGV4aXQ7CisKKwloZWFkZXIgPSAoc3RydWN0IGFjcGlfc3VidGFibGVfaGVhZGVyICopb2JqLT5idWZmZXIucG9pbnRlcjsKKwlpZiAoaGVhZGVyLT50eXBlID09IEFDUElfTUFEVF9UWVBFX0lPX0FQSUMpCisJCWdldF9pb2FwaWNfaWQoaGVhZGVyLCBnc2lfYmFzZSwgcGh5c19hZGRyLCAmYXBpY19pZCk7CisKK2V4aXQ6CisJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybiBhcGljX2lkOworfQorCisvKioKKyAqIGFjcGlfZ2V0X2lvYXBpY19pZCAtIEdldCBJT0FQSUMgSUQgYW5kIHBoeXNpY2FsIGFkZHJlc3MgbWF0Y2hpbmcgQGdzaV9iYXNlCisgKiBAaGFuZGxlOglBQ1BJIG9iamVjdCBmb3IgSU9BUElDIGRldmljZQorICogQGdzaV9iYXNlOglHU0kgYmFzZSB0byBtYXRjaCB3aXRoCisgKiBAcGh5c19hZGRyOglQb2ludGVyIHRvIHN0b3JlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgbWF0Y2hpbmcgSU9BUElDIHJlY29yZAorICoKKyAqIFdhbGsgcmVzb3VyY2VzIHJldHVybmVkIGJ5IEFDUElfTUFUIG1ldGhvZCwgdGhlbiBBQ1BJIE1BRFQgdGFibGUsIHRvIHNlYXJjaAorICogZm9yIGFuIEFDUEkgSU9BUElDIHJlY29yZCBtYXRjaGluZyBAZ3NpX2Jhc2UuCisgKiBSZXR1cm4gSU9BUElDIGlkIGFuZCBzdG9yZSBwaHlzaWNhbCBhZGRyZXNzIGluIEBwaHlzX2FkZHIgaWYgZm91bmQgYSBtYXRjaCwKKyAqIG90aGVyd2lzZSByZXR1cm4gPDAuCisgKi8KK2ludCBhY3BpX2dldF9pb2FwaWNfaWQoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZ3NpX2Jhc2UsIHU2NCAqcGh5c19hZGRyKQoreworCWludCBhcGljX2lkOworCisJYXBpY19pZCA9IHBhcnNlX21hdF9pb2FwaWNfZW50cnkoaGFuZGxlLCBnc2lfYmFzZSwgcGh5c19hZGRyKTsKKwlpZiAoYXBpY19pZCA9PSAtMSkKKwkJYXBpY19pZCA9IHBhcnNlX21hZHRfaW9hcGljX2VudHJ5KGdzaV9iYXNlLCBwaHlzX2FkZHIpOworCisJcmV0dXJuIGFwaWNfaWQ7Cit9CisjZW5kaWYgLyogQ09ORklHX0FDUElfSE9UUExVR19JT0FQSUMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKaW5kZXggODdiNzA0ZS4uYzI1NmJkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9pZGxlLmMKQEAgLTY4MSwxNSArNjgxLDEzIEBACiB9CiAKIC8qKgotICogYWNwaV9pZGxlX2RvX2VudHJ5IC0gYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBkb2VzIEMyIGFuZCBDMyB0eXBlIGVudHJ5CisgKiBhY3BpX2lkbGVfZG9fZW50cnkgLSBlbnRlciBpZGxlIHN0YXRlIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBtZXRob2QKICAqIEBjeDogY3N0YXRlIGRhdGEKICAqCiAgKiBDYWxsZXIgZGlzYWJsZXMgaW50ZXJydXB0IGJlZm9yZSBjYWxsIGFuZCBlbmFibGVzIGludGVycnVwdCBhZnRlciByZXR1cm4uCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX2lkbGVfZG9fZW50cnkoc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCkKK3N0YXRpYyB2b2lkIGFjcGlfaWRsZV9kb19lbnRyeShzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4KQogewotCS8qIERvbid0IHRyYWNlIGlycXMgb2ZmIGZvciBpZGxlICovCi0Jc3RvcF9jcml0aWNhbF90aW1pbmdzKCk7CiAJaWYgKGN4LT5lbnRyeV9tZXRob2QgPT0gQUNQSV9DU1RBVEVfRkZIKSB7CiAJCS8qIENhbGwgaW50byBhcmNoaXRlY3R1cmFsIEZGSCBiYXNlZCBDLXN0YXRlICovCiAJCWFjcGlfcHJvY2Vzc29yX2ZmaF9jc3RhdGVfZW50ZXIoY3gpOwpAQCAtNzAzLDM4ICs3MDEsOSBAQAogCQkgICBnZXRzIGFzc2VydGVkIGluIHRpbWUgdG8gZnJlZXplIGV4ZWN1dGlvbiBwcm9wZXJseS4gKi8KIAkJaW5sKGFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrLmFkZHJlc3MpOwogCX0KLQlzdGFydF9jcml0aWNhbF90aW1pbmdzKCk7CiB9CiAKIC8qKgotICogYWNwaV9pZGxlX2VudGVyX2MxIC0gZW50ZXJzIGFuIEFDUEkgQzEgc3RhdGUtdHlwZQotICogQGRldjogdGhlIHRhcmdldCBDUFUKLSAqIEBkcnY6IGNwdWlkbGUgZHJpdmVyIGNvbnRhaW5pbmcgY3B1aWRsZSBzdGF0ZSBpbmZvCi0gKiBAaW5kZXg6IGluZGV4IG9mIHRhcmdldCBzdGF0ZQotICoKLSAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgSEFMVCBpbnN0cnVjdGlvbi4KLSAqLwotc3RhdGljIGludCBhY3BpX2lkbGVfZW50ZXJfYzEoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBjcHVpZGxlX2RyaXZlciAqZHJ2LCBpbnQgaW5kZXgpCi17Ci0Jc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcjsKLQlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4ID0gcGVyX2NwdShhY3BpX2NzdGF0ZVtpbmRleF0sIGRldi0+Y3B1KTsKLQotCXByID0gX190aGlzX2NwdV9yZWFkKHByb2Nlc3NvcnMpOwotCi0JaWYgKHVubGlrZWx5KCFwcikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbGFwaWNfdGltZXJfc3RhdGVfYnJvYWRjYXN0KHByLCBjeCwgMSk7Ci0JYWNwaV9pZGxlX2RvX2VudHJ5KGN4KTsKLQotCWxhcGljX3RpbWVyX3N0YXRlX2Jyb2FkY2FzdChwciwgY3gsIDApOwotCi0JcmV0dXJuIGluZGV4OwotfQotCi0KLS8qKgogICogYWNwaV9pZGxlX3BsYXlfZGVhZCAtIGVudGVycyBhbiBBQ1BJIHN0YXRlIGZvciBsb25nLXRlcm0gaWRsZSAoaS5lLiBvZmYtbGluaW5nKQogICogQGRldjogdGhlIHRhcmdldCBDUFUKICAqIEBpbmRleDogdGhlIGluZGV4IG9mIHN1Z2dlc3RlZCBzdGF0ZQpAQCAtNzYxLDQ3ICs3MzAsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBhY3BpX2lkbGVfZW50ZXJfc2ltcGxlIC0gZW50ZXJzIGFuIEFDUEkgc3RhdGUgd2l0aG91dCBCTSBoYW5kbGluZwotICogQGRldjogdGhlIHRhcmdldCBDUFUKLSAqIEBkcnY6IGNwdWlkbGUgZHJpdmVyIHdpdGggY3B1aWRsZSBzdGF0ZSBpbmZvcm1hdGlvbgotICogQGluZGV4OiB0aGUgaW5kZXggb2Ygc3VnZ2VzdGVkIHN0YXRlCi0gKi8KLXN0YXRpYyBpbnQgYWNwaV9pZGxlX2VudGVyX3NpbXBsZShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldiwKLQkJc3RydWN0IGNwdWlkbGVfZHJpdmVyICpkcnYsIGludCBpbmRleCkKK3N0YXRpYyBib29sIGFjcGlfaWRsZV9mYWxsYmFja190b19jMShzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQogewotCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHI7Ci0Jc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCA9IHBlcl9jcHUoYWNwaV9jc3RhdGVbaW5kZXhdLCBkZXYtPmNwdSk7Ci0KLQlwciA9IF9fdGhpc19jcHVfcmVhZChwcm9jZXNzb3JzKTsKLQotCWlmICh1bmxpa2VseSghcHIpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotCWlmICgoY3gtPnR5cGUgIT0gQUNQSV9TVEFURV9DMSkgJiYgKG51bV9vbmxpbmVfY3B1cygpID4gMSkgJiYKLQkgICAgIXByLT5mbGFncy5oYXNfY3N0ICYmCi0JICAgICEoYWNwaV9nYmxfRkFEVC5mbGFncyAmIEFDUElfRkFEVF9DMl9NUF9TVVBQT1JURUQpKQotCQlyZXR1cm4gYWNwaV9pZGxlX2VudGVyX2MxKGRldiwgZHJ2LCBDUFVJRExFX0RSSVZFUl9TVEFURV9TVEFSVCk7Ci0jZW5kaWYKLQotCS8qCi0JICogTXVzdCBiZSBkb25lIGJlZm9yZSBidXNtYXN0ZXIgZGlzYWJsZSBhcyB3ZSBtaWdodCBuZWVkIHRvCi0JICogYWNjZXNzIEhQRVQgIQotCSAqLwotCWxhcGljX3RpbWVyX3N0YXRlX2Jyb2FkY2FzdChwciwgY3gsIDEpOwotCi0JaWYgKGN4LT50eXBlID09IEFDUElfU1RBVEVfQzMpCi0JCUFDUElfRkxVU0hfQ1BVX0NBQ0hFKCk7Ci0KLQkvKiBUZWxsIHRoZSBzY2hlZHVsZXIgdGhhdCB3ZSBhcmUgZ29pbmcgZGVlcC1pZGxlOiAqLwotCXNjaGVkX2Nsb2NrX2lkbGVfc2xlZXBfZXZlbnQoKTsKLQlhY3BpX2lkbGVfZG9fZW50cnkoY3gpOwotCi0Jc2NoZWRfY2xvY2tfaWRsZV93YWtldXBfZXZlbnQoMCk7Ci0KLQlsYXBpY190aW1lcl9zdGF0ZV9icm9hZGNhc3QocHIsIGN4LCAwKTsKLQlyZXR1cm4gaW5kZXg7CisJcmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0hPVFBMVUdfQ1BVKSAmJiBudW1fb25saW5lX2NwdXMoKSA+IDEgJiYKKwkJIShhY3BpX2dibF9GQURULmZsYWdzICYgQUNQSV9GQURUX0MyX01QX1NVUFBPUlRFRCkgJiYKKwkJIXByLT5mbGFncy5oYXNfY3N0OwogfQogCiBzdGF0aWMgaW50IGMzX2NwdV9jb3VudDsKQEAgLTgwOSw0NCArNzQyLDE0IEBACiAKIC8qKgogICogYWNwaV9pZGxlX2VudGVyX2JtIC0gZW50ZXJzIEMzIHdpdGggcHJvcGVyIEJNIGhhbmRsaW5nCi0gKiBAZGV2OiB0aGUgdGFyZ2V0IENQVQotICogQGRydjogY3B1aWRsZSBkcml2ZXIgY29udGFpbmluZyBzdGF0ZSBkYXRhCi0gKiBAaW5kZXg6IHRoZSBpbmRleCBvZiBzdWdnZXN0ZWQgc3RhdGUKLSAqCi0gKiBJZiBCTSBpcyBkZXRlY3RlZCwgdGhlIGRlZXBlc3Qgbm9uLUMzIGlkbGUgc3RhdGUgaXMgZW50ZXJlZCBpbnN0ZWFkLgorICogQHByOiBUYXJnZXQgcHJvY2Vzc29yCisgKiBAY3g6IFRhcmdldCBzdGF0ZSBjb250ZXh0CiAgKi8KLXN0YXRpYyBpbnQgYWNwaV9pZGxlX2VudGVyX2JtKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2LAotCQlzdHJ1Y3QgY3B1aWRsZV9kcml2ZXIgKmRydiwgaW50IGluZGV4KQorc3RhdGljIHZvaWQgYWNwaV9pZGxlX2VudGVyX2JtKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCisJCQkgICAgICAgc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCkKIHsKLQlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByOwotCXN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9jeCAqY3ggPSBwZXJfY3B1KGFjcGlfY3N0YXRlW2luZGV4XSwgZGV2LT5jcHUpOwotCi0JcHIgPSBfX3RoaXNfY3B1X3JlYWQocHJvY2Vzc29ycyk7Ci0KLQlpZiAodW5saWtlbHkoIXByKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQlpZiAoKGN4LT50eXBlICE9IEFDUElfU1RBVEVfQzEpICYmIChudW1fb25saW5lX2NwdXMoKSA+IDEpICYmCi0JICAgICFwci0+ZmxhZ3MuaGFzX2NzdCAmJgotCSAgICAhKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfQzJfTVBfU1VQUE9SVEVEKSkKLQkJcmV0dXJuIGFjcGlfaWRsZV9lbnRlcl9jMShkZXYsIGRydiwgQ1BVSURMRV9EUklWRVJfU1RBVEVfU1RBUlQpOwotI2VuZGlmCi0KLQlpZiAoIWN4LT5ibV9zdHNfc2tpcCAmJiBhY3BpX2lkbGVfYm1fY2hlY2soKSkgewotCQlpZiAoZHJ2LT5zYWZlX3N0YXRlX2luZGV4ID49IDApIHsKLQkJCXJldHVybiBkcnYtPnN0YXRlc1tkcnYtPnNhZmVfc3RhdGVfaW5kZXhdLmVudGVyKGRldiwKLQkJCQkJCWRydiwgZHJ2LT5zYWZlX3N0YXRlX2luZGV4KTsKLQkJfSBlbHNlIHsKLQkJCWFjcGlfc2FmZV9oYWx0KCk7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0JfQotCiAJYWNwaV91bmxhenlfdGxiKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKLQkvKiBUZWxsIHRoZSBzY2hlZHVsZXIgdGhhdCB3ZSBhcmUgZ29pbmcgZGVlcC1pZGxlOiAqLwotCXNjaGVkX2Nsb2NrX2lkbGVfc2xlZXBfZXZlbnQoKTsKIAkvKgogCSAqIE11c3QgYmUgZG9uZSBiZWZvcmUgYnVzbWFzdGVyIGRpc2FibGUgYXMgd2UgbWlnaHQgbmVlZCB0bwogCSAqIGFjY2VzcyBIUEVUICEKQEAgLTg1NiwzNyArNzU5LDcxIEBACiAJLyoKIAkgKiBkaXNhYmxlIGJ1cyBtYXN0ZXIKIAkgKiBibV9jaGVjayBpbXBsaWVzIHdlIG5lZWQgQVJCX0RJUwotCSAqICFibV9jaGVjayBpbXBsaWVzIHdlIG5lZWQgY2FjaGUgZmx1c2gKIAkgKiBibV9jb250cm9sIGltcGxpZXMgd2hldGhlciB3ZSBjYW4gZG8gQVJCX0RJUwogCSAqCiAJICogVGhhdCBsZWF2ZXMgYSBjYXNlIHdoZXJlIGJtX2NoZWNrIGlzIHNldCBhbmQgYm1fY29udHJvbCBpcwogCSAqIG5vdCBzZXQuIEluIHRoYXQgY2FzZSB3ZSBjYW5ub3QgZG8gbXVjaCwgd2UgZW50ZXIgQzMKIAkgKiB3aXRob3V0IGRvaW5nIGFueXRoaW5nLgogCSAqLwotCWlmIChwci0+ZmxhZ3MuYm1fY2hlY2sgJiYgcHItPmZsYWdzLmJtX2NvbnRyb2wpIHsKKwlpZiAocHItPmZsYWdzLmJtX2NvbnRyb2wpIHsKIAkJcmF3X3NwaW5fbG9jaygmYzNfbG9jayk7CiAJCWMzX2NwdV9jb3VudCsrOwogCQkvKiBEaXNhYmxlIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gd2hlbiBhbGwgQ1BVcyBhcmUgaW4gQzMgKi8KIAkJaWYgKGMzX2NwdV9jb3VudCA9PSBudW1fb25saW5lX2NwdXMoKSkKIAkJCWFjcGlfd3JpdGVfYml0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0FSQl9ESVNBQkxFLCAxKTsKIAkJcmF3X3NwaW5fdW5sb2NrKCZjM19sb2NrKTsKLQl9IGVsc2UgaWYgKCFwci0+ZmxhZ3MuYm1fY2hlY2spIHsKLQkJQUNQSV9GTFVTSF9DUFVfQ0FDSEUoKTsKIAl9CiAKIAlhY3BpX2lkbGVfZG9fZW50cnkoY3gpOwogCiAJLyogUmUtZW5hYmxlIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gKi8KLQlpZiAocHItPmZsYWdzLmJtX2NoZWNrICYmIHByLT5mbGFncy5ibV9jb250cm9sKSB7CisJaWYgKHByLT5mbGFncy5ibV9jb250cm9sKSB7CiAJCXJhd19zcGluX2xvY2soJmMzX2xvY2spOwogCQlhY3BpX3dyaXRlX2JpdF9yZWdpc3RlcihBQ1BJX0JJVFJFR19BUkJfRElTQUJMRSwgMCk7CiAJCWMzX2NwdV9jb3VudC0tOwogCQlyYXdfc3Bpbl91bmxvY2soJmMzX2xvY2spOwogCX0KIAotCXNjaGVkX2Nsb2NrX2lkbGVfd2FrZXVwX2V2ZW50KDApOworCWxhcGljX3RpbWVyX3N0YXRlX2Jyb2FkY2FzdChwciwgY3gsIDApOworfQorCitzdGF0aWMgaW50IGFjcGlfaWRsZV9lbnRlcihzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBjcHVpZGxlX2RyaXZlciAqZHJ2LCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCA9IHBlcl9jcHUoYWNwaV9jc3RhdGVbaW5kZXhdLCBkZXYtPmNwdSk7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcjsKKworCXByID0gX190aGlzX2NwdV9yZWFkKHByb2Nlc3NvcnMpOworCWlmICh1bmxpa2VseSghcHIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjeC0+dHlwZSAhPSBBQ1BJX1NUQVRFX0MxKSB7CisJCWlmIChhY3BpX2lkbGVfZmFsbGJhY2tfdG9fYzEocHIpKSB7CisJCQlpbmRleCA9IENQVUlETEVfRFJJVkVSX1NUQVRFX1NUQVJUOworCQkJY3ggPSBwZXJfY3B1KGFjcGlfY3N0YXRlW2luZGV4XSwgZGV2LT5jcHUpOworCQl9IGVsc2UgaWYgKGN4LT50eXBlID09IEFDUElfU1RBVEVfQzMgJiYgcHItPmZsYWdzLmJtX2NoZWNrKSB7CisJCQlpZiAoY3gtPmJtX3N0c19za2lwIHx8ICFhY3BpX2lkbGVfYm1fY2hlY2soKSkgeworCQkJCWFjcGlfaWRsZV9lbnRlcl9ibShwciwgY3gpOworCQkJCXJldHVybiBpbmRleDsKKwkJCX0gZWxzZSBpZiAoZHJ2LT5zYWZlX3N0YXRlX2luZGV4ID49IDApIHsKKwkJCQlpbmRleCA9IGRydi0+c2FmZV9zdGF0ZV9pbmRleDsKKwkJCQljeCA9IHBlcl9jcHUoYWNwaV9jc3RhdGVbaW5kZXhdLCBkZXYtPmNwdSk7CisJCQl9IGVsc2UgeworCQkJCWFjcGlfc2FmZV9oYWx0KCk7CisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCX0KKwkJfQorCX0KKworCWxhcGljX3RpbWVyX3N0YXRlX2Jyb2FkY2FzdChwciwgY3gsIDEpOworCisJaWYgKGN4LT50eXBlID09IEFDUElfU1RBVEVfQzMpCisJCUFDUElfRkxVU0hfQ1BVX0NBQ0hFKCk7CisKKwlhY3BpX2lkbGVfZG9fZW50cnkoY3gpOwogCiAJbGFwaWNfdGltZXJfc3RhdGVfYnJvYWRjYXN0KHByLCBjeCwgMCk7CisKIAlyZXR1cm4gaW5kZXg7CiB9CiAKQEAgLTk4MSwyNyArOTE4LDEyIEBACiAJCXN0cm5jcHkoc3RhdGUtPmRlc2MsIGN4LT5kZXNjLCBDUFVJRExFX0RFU0NfTEVOKTsKIAkJc3RhdGUtPmV4aXRfbGF0ZW5jeSA9IGN4LT5sYXRlbmN5OwogCQlzdGF0ZS0+dGFyZ2V0X3Jlc2lkZW5jeSA9IGN4LT5sYXRlbmN5ICogbGF0ZW5jeV9mYWN0b3I7CisJCXN0YXRlLT5lbnRlciA9IGFjcGlfaWRsZV9lbnRlcjsKIAogCQlzdGF0ZS0+ZmxhZ3MgPSAwOwotCQlzd2l0Y2ggKGN4LT50eXBlKSB7Ci0JCQljYXNlIEFDUElfU1RBVEVfQzE6Ci0KLQkJCXN0YXRlLT5lbnRlciA9IGFjcGlfaWRsZV9lbnRlcl9jMTsKKwkJaWYgKGN4LT50eXBlID09IEFDUElfU1RBVEVfQzEgfHwgY3gtPnR5cGUgPT0gQUNQSV9TVEFURV9DMikgewogCQkJc3RhdGUtPmVudGVyX2RlYWQgPSBhY3BpX2lkbGVfcGxheV9kZWFkOwogCQkJZHJ2LT5zYWZlX3N0YXRlX2luZGV4ID0gY291bnQ7Ci0JCQlicmVhazsKLQotCQkJY2FzZSBBQ1BJX1NUQVRFX0MyOgotCQkJc3RhdGUtPmVudGVyID0gYWNwaV9pZGxlX2VudGVyX3NpbXBsZTsKLQkJCXN0YXRlLT5lbnRlcl9kZWFkID0gYWNwaV9pZGxlX3BsYXlfZGVhZDsKLQkJCWRydi0+c2FmZV9zdGF0ZV9pbmRleCA9IGNvdW50OwotCQkJYnJlYWs7Ci0KLQkJCWNhc2UgQUNQSV9TVEFURV9DMzoKLQkJCXN0YXRlLT5lbnRlciA9IHByLT5mbGFncy5ibV9jaGVjayA/Ci0JCQkJCWFjcGlfaWRsZV9lbnRlcl9ibSA6Ci0JCQkJCWFjcGlfaWRsZV9lbnRlcl9zaW1wbGU7Ci0JCQlicmVhazsKIAkJfQogCiAJCWNvdW50Kys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcmVzb3VyY2UuYyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZS5jCmluZGV4IDc4MmEwZDEuLjQ3NTJiOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9yZXNvdXJjZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9yZXNvdXJjZS5jCkBAIC0zNCwyMSArMzQsMzQgQEAKICNkZWZpbmUgdmFsaWRfSVJRKGkpICh0cnVlKQogI2VuZGlmCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGFjcGlfZGV2X21lbXJlc291cmNlX2ZsYWdzKHU2NCBsZW4sIHU4IHdyaXRlX3Byb3RlY3QsCi0JCQkJCQlib29sIHdpbmRvdykKK3N0YXRpYyBib29sIGFjcGlfZGV2X3Jlc291cmNlX2xlbl92YWxpZCh1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBsZW4sIGJvb2wgaW8pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCXU2NCByZXNsZW4gPSBlbmQgLSBzdGFydCArIDE7CiAKLQlpZiAobGVuID09IDApCi0JCWZsYWdzIHw9IElPUkVTT1VSQ0VfRElTQUJMRUQ7CisJLyoKKwkgKiBDSEVDS01FOiBsZW4gbWlnaHQgYmUgcmVxdWlyZWQgdG8gY2hlY2sgdmVyc3VzIGEgbWluaW11bQorCSAqIGxlbmd0aCBhcyB3ZWxsLiAxIGZvciBpbyBpcyBmaW5lLCBidXQgZm9yIG1lbW9yeSBpdCBkb2VzCisJICogbm90IG1ha2UgYW55IHNlbnNlIGF0IGFsbC4KKwkgKi8KKwlpZiAobGVuICYmIHJlc2xlbiAmJiByZXNsZW4gPT0gbGVuICYmIHN0YXJ0IDw9IGVuZCkKKwkJcmV0dXJuIHRydWU7CisKKwlwcl9pbmZvKCJBQ1BJOiBpbnZhbGlkIG9yIHVuYXNzaWduZWQgcmVzb3VyY2UgJXMgWyUwMTZsbHggLSAlMDE2bGx4XSBsZW5ndGggWyUwMTZsbHhdXG4iLAorCQlpbyA/ICJpbyIgOiAibWVtIiwgc3RhcnQsIGVuZCwgbGVuKTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgYWNwaV9kZXZfbWVtcmVzb3VyY2VfZmxhZ3Moc3RydWN0IHJlc291cmNlICpyZXMsIHU2NCBsZW4sCisJCQkJICAgICAgIHU4IHdyaXRlX3Byb3RlY3QpCit7CisJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCisJaWYgKCFhY3BpX2Rldl9yZXNvdXJjZV9sZW5fdmFsaWQocmVzLT5zdGFydCwgcmVzLT5lbmQsIGxlbiwgZmFsc2UpKQorCQlyZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfRElTQUJMRUQgfCBJT1JFU09VUkNFX1VOU0VUOwogCiAJaWYgKHdyaXRlX3Byb3RlY3QgPT0gQUNQSV9SRUFEX1dSSVRFX01FTU9SWSkKLQkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9NRU1fV1JJVEVBQkxFOwotCi0JaWYgKHdpbmRvdykKLQkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9XSU5ET1c7Ci0KLQlyZXR1cm4gZmxhZ3M7CisJCXJlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9NRU1fV1JJVEVBQkxFOwogfQogCiBzdGF0aWMgdm9pZCBhY3BpX2Rldl9nZXRfbWVtcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyZXMsIHU2NCBzdGFydCwgdTY0IGxlbiwKQEAgLTU2LDcgKzY5LDcgQEAKIHsKIAlyZXMtPnN0YXJ0ID0gc3RhcnQ7CiAJcmVzLT5lbmQgPSBzdGFydCArIGxlbiAtIDE7Ci0JcmVzLT5mbGFncyA9IGFjcGlfZGV2X21lbXJlc291cmNlX2ZsYWdzKGxlbiwgd3JpdGVfcHJvdGVjdCwgZmFsc2UpOworCWFjcGlfZGV2X21lbXJlc291cmNlX2ZsYWdzKHJlcywgbGVuLCB3cml0ZV9wcm90ZWN0KTsKIH0KIAogLyoqCkBAIC02Nyw2ICs4MCwxMSBAQAogICogQ2hlY2sgaWYgdGhlIGdpdmVuIEFDUEkgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudHMgYSBtZW1vcnkgcmVzb3VyY2UgYW5kCiAgKiBpZiB0aGF0J3MgdGhlIGNhc2UsIHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gaXQgdG8gcG9wdWxhdGUgdGhlIGdlbmVyaWMKICAqIHJlc291cmNlIG9iamVjdCBwb2ludGVkIHRvIGJ5IEByZXMuCisgKgorICogUmV0dXJuOgorICogMSkgZmFsc2Ugd2l0aCByZXMtPmZsYWdzIHNldHRpbmcgdG8gemVybzogbm90IHRoZSBleHBlY3RlZCByZXNvdXJjZSB0eXBlCisgKiAyKSBmYWxzZSB3aXRoIElPUkVTT1VSQ0VfRElTQUJMRUQgaW4gcmVzLT5mbGFnczogdmFsaWQgdW5hc3NpZ25lZCByZXNvdXJjZQorICogMykgdHJ1ZTogdmFsaWQgYXNzaWduZWQgcmVzb3VyY2UKICAqLwogYm9vbCBhY3BpX2Rldl9yZXNvdXJjZV9tZW1vcnkoc3RydWN0IGFjcGlfcmVzb3VyY2UgKmFyZXMsIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewpAQCAtNzcsNjAgKzk1LDUyIEBACiAJc3dpdGNoIChhcmVzLT50eXBlKSB7CiAJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfTUVNT1JZMjQ6CiAJCW1lbW9yeTI0ID0gJmFyZXMtPmRhdGEubWVtb3J5MjQ7Ci0JCWlmICghbWVtb3J5MjQtPm1pbmltdW0gJiYgIW1lbW9yeTI0LT5hZGRyZXNzX2xlbmd0aCkKLQkJCXJldHVybiBmYWxzZTsKLQkJYWNwaV9kZXZfZ2V0X21lbXJlc291cmNlKHJlcywgbWVtb3J5MjQtPm1pbmltdW0sCi0JCQkJCSBtZW1vcnkyNC0+YWRkcmVzc19sZW5ndGgsCisJCWFjcGlfZGV2X2dldF9tZW1yZXNvdXJjZShyZXMsIG1lbW9yeTI0LT5taW5pbXVtIDw8IDgsCisJCQkJCSBtZW1vcnkyNC0+YWRkcmVzc19sZW5ndGggPDwgOCwKIAkJCQkJIG1lbW9yeTI0LT53cml0ZV9wcm90ZWN0KTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfTUVNT1JZMzI6CiAJCW1lbW9yeTMyID0gJmFyZXMtPmRhdGEubWVtb3J5MzI7Ci0JCWlmICghbWVtb3J5MzItPm1pbmltdW0gJiYgIW1lbW9yeTMyLT5hZGRyZXNzX2xlbmd0aCkKLQkJCXJldHVybiBmYWxzZTsKIAkJYWNwaV9kZXZfZ2V0X21lbXJlc291cmNlKHJlcywgbWVtb3J5MzItPm1pbmltdW0sCiAJCQkJCSBtZW1vcnkzMi0+YWRkcmVzc19sZW5ndGgsCiAJCQkJCSBtZW1vcnkzMi0+d3JpdGVfcHJvdGVjdCk7CiAJCWJyZWFrOwogCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0ZJWEVEX01FTU9SWTMyOgogCQlmaXhlZF9tZW1vcnkzMiA9ICZhcmVzLT5kYXRhLmZpeGVkX21lbW9yeTMyOwotCQlpZiAoIWZpeGVkX21lbW9yeTMyLT5hZGRyZXNzICYmICFmaXhlZF9tZW1vcnkzMi0+YWRkcmVzc19sZW5ndGgpCi0JCQlyZXR1cm4gZmFsc2U7CiAJCWFjcGlfZGV2X2dldF9tZW1yZXNvdXJjZShyZXMsIGZpeGVkX21lbW9yeTMyLT5hZGRyZXNzLAogCQkJCQkgZml4ZWRfbWVtb3J5MzItPmFkZHJlc3NfbGVuZ3RoLAogCQkJCQkgZml4ZWRfbWVtb3J5MzItPndyaXRlX3Byb3RlY3QpOwogCQlicmVhazsKIAlkZWZhdWx0OgorCQlyZXMtPmZsYWdzID0gMDsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiAhKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0RJU0FCTEVEKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFjcGlfZGV2X3Jlc291cmNlX21lbW9yeSk7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYWNwaV9kZXZfaW9yZXNvdXJjZV9mbGFncyh1NjQgc3RhcnQsIHU2NCBlbmQsIHU4IGlvX2RlY29kZSwKLQkJCQkJICAgICAgYm9vbCB3aW5kb3cpCitzdGF0aWMgdm9pZCBhY3BpX2Rldl9pb3Jlc291cmNlX2ZsYWdzKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1NjQgbGVuLAorCQkJCSAgICAgIHU4IGlvX2RlY29kZSkKIHsKLQlpbnQgZmxhZ3MgPSBJT1JFU09VUkNFX0lPOworCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX0lPOworCisJaWYgKCFhY3BpX2Rldl9yZXNvdXJjZV9sZW5fdmFsaWQocmVzLT5zdGFydCwgcmVzLT5lbmQsIGxlbiwgdHJ1ZSkpCisJCXJlcy0+ZmxhZ3MgfD0gSU9SRVNPVVJDRV9ESVNBQkxFRCB8IElPUkVTT1VSQ0VfVU5TRVQ7CisKKwlpZiAocmVzLT5lbmQgPj0gMHgxMDAwMykKKwkJcmVzLT5mbGFncyB8PSBJT1JFU09VUkNFX0RJU0FCTEVEIHwgSU9SRVNPVVJDRV9VTlNFVDsKIAogCWlmIChpb19kZWNvZGUgPT0gQUNQSV9ERUNPREVfMTYpCi0JCWZsYWdzIHw9IElPUkVTT1VSQ0VfSU9fMTZCSVRfQUREUjsKLQotCWlmIChzdGFydCA+IGVuZCB8fCBlbmQgPj0gMHgxMDAwMykKLQkJZmxhZ3MgfD0gSU9SRVNPVVJDRV9ESVNBQkxFRDsKLQotCWlmICh3aW5kb3cpCi0JCWZsYWdzIHw9IElPUkVTT1VSQ0VfV0lORE9XOwotCi0JcmV0dXJuIGZsYWdzOworCQlyZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfSU9fMTZCSVRfQUREUjsKIH0KIAogc3RhdGljIHZvaWQgYWNwaV9kZXZfZ2V0X2lvcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyZXMsIHU2NCBzdGFydCwgdTY0IGxlbiwKIAkJCQkgICAgdTggaW9fZGVjb2RlKQogewotCXU2NCBlbmQgPSBzdGFydCArIGxlbiAtIDE7Ci0KIAlyZXMtPnN0YXJ0ID0gc3RhcnQ7Ci0JcmVzLT5lbmQgPSBlbmQ7Ci0JcmVzLT5mbGFncyA9IGFjcGlfZGV2X2lvcmVzb3VyY2VfZmxhZ3Moc3RhcnQsIGVuZCwgaW9fZGVjb2RlLCBmYWxzZSk7CisJcmVzLT5lbmQgPSBzdGFydCArIGxlbiAtIDE7CisJYWNwaV9kZXZfaW9yZXNvdXJjZV9mbGFncyhyZXMsIGxlbiwgaW9fZGVjb2RlKTsKIH0KIAogLyoqCkBAIC0xNDEsNiArMTUxLDExIEBACiAgKiBDaGVjayBpZiB0aGUgZ2l2ZW4gQUNQSSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50cyBhbiBJL08gcmVzb3VyY2UgYW5kCiAgKiBpZiB0aGF0J3MgdGhlIGNhc2UsIHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gaXQgdG8gcG9wdWxhdGUgdGhlIGdlbmVyaWMKICAqIHJlc291cmNlIG9iamVjdCBwb2ludGVkIHRvIGJ5IEByZXMuCisgKgorICogUmV0dXJuOgorICogMSkgZmFsc2Ugd2l0aCByZXMtPmZsYWdzIHNldHRpbmcgdG8gemVybzogbm90IHRoZSBleHBlY3RlZCByZXNvdXJjZSB0eXBlCisgKiAyKSBmYWxzZSB3aXRoIElPUkVTT1VSQ0VfRElTQUJMRUQgaW4gcmVzLT5mbGFnczogdmFsaWQgdW5hc3NpZ25lZCByZXNvdXJjZQorICogMykgdHJ1ZTogdmFsaWQgYXNzaWduZWQgcmVzb3VyY2UKICAqLwogYm9vbCBhY3BpX2Rldl9yZXNvdXJjZV9pbyhzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqYXJlcywgc3RydWN0IHJlc291cmNlICpyZXMpCiB7CkBAIC0xNTAsMTM1ICsxNjUsMTQzIEBACiAJc3dpdGNoIChhcmVzLT50eXBlKSB7CiAJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfSU86CiAJCWlvID0gJmFyZXMtPmRhdGEuaW87Ci0JCWlmICghaW8tPm1pbmltdW0gJiYgIWlvLT5hZGRyZXNzX2xlbmd0aCkKLQkJCXJldHVybiBmYWxzZTsKIAkJYWNwaV9kZXZfZ2V0X2lvcmVzb3VyY2UocmVzLCBpby0+bWluaW11bSwKIAkJCQkJaW8tPmFkZHJlc3NfbGVuZ3RoLAogCQkJCQlpby0+aW9fZGVjb2RlKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRklYRURfSU86CiAJCWZpeGVkX2lvID0gJmFyZXMtPmRhdGEuZml4ZWRfaW87Ci0JCWlmICghZml4ZWRfaW8tPmFkZHJlc3MgJiYgIWZpeGVkX2lvLT5hZGRyZXNzX2xlbmd0aCkKLQkJCXJldHVybiBmYWxzZTsKIAkJYWNwaV9kZXZfZ2V0X2lvcmVzb3VyY2UocmVzLCBmaXhlZF9pby0+YWRkcmVzcywKIAkJCQkJZml4ZWRfaW8tPmFkZHJlc3NfbGVuZ3RoLAogCQkJCQlBQ1BJX0RFQ09ERV8xMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCXJlcy0+ZmxhZ3MgPSAwOwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCXJldHVybiB0cnVlOworCisJcmV0dXJuICEocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfRElTQUJMRUQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9kZXZfcmVzb3VyY2VfaW8pOwogCi0vKioKLSAqIGFjcGlfZGV2X3Jlc291cmNlX2FkZHJlc3Nfc3BhY2UgLSBFeHRyYWN0IEFDUEkgYWRkcmVzcyBzcGFjZSBpbmZvcm1hdGlvbi4KLSAqIEBhcmVzOiBJbnB1dCBBQ1BJIHJlc291cmNlIG9iamVjdC4KLSAqIEByZXM6IE91dHB1dCBnZW5lcmljIHJlc291cmNlIG9iamVjdC4KLSAqCi0gKiBDaGVjayBpZiB0aGUgZ2l2ZW4gQUNQSSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50cyBhbiBhZGRyZXNzIHNwYWNlIHJlc291cmNlCi0gKiBhbmQgaWYgdGhhdCdzIHRoZSBjYXNlLCB1c2UgdGhlIGluZm9ybWF0aW9uIGluIGl0IHRvIHBvcHVsYXRlIHRoZSBnZW5lcmljCi0gKiByZXNvdXJjZSBvYmplY3QgcG9pbnRlZCB0byBieSBAcmVzLgotICovCi1ib29sIGFjcGlfZGV2X3Jlc291cmNlX2FkZHJlc3Nfc3BhY2Uoc3RydWN0IGFjcGlfcmVzb3VyY2UgKmFyZXMsCi0JCQkJICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3N0YXRpYyBib29sIGFjcGlfZGVjb2RlX3NwYWNlKHN0cnVjdCByZXNvdXJjZV93aW4gKndpbiwKKwkJCSAgICAgIHN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3MgKmFkZHIsCisJCQkgICAgICBzdHJ1Y3QgYWNwaV9hZGRyZXNzNjRfYXR0cmlidXRlICphdHRyKQogewotCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzNjQgYWRkcjsKLQlib29sIHdpbmRvdzsKLQl1NjQgbGVuOwotCXU4IGlvX2RlY29kZTsKKwl1OCBpb2RlYyA9IGF0dHItPmdyYW51bGFyaXR5ID09IDB4ZmZmID8gQUNQSV9ERUNPREVfMTAgOiBBQ1BJX0RFQ09ERV8xNjsKKwlib29sIHdwID0gYWRkci0+aW5mby5tZW0ud3JpdGVfcHJvdGVjdDsKKwl1NjQgbGVuID0gYXR0ci0+YWRkcmVzc19sZW5ndGg7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSAmd2luLT5yZXM7CiAKLQlzd2l0Y2ggKGFyZXMtPnR5cGUpIHsKLQljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9BRERSRVNTMTY6Ci0JY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfQUREUkVTUzMyOgotCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0FERFJFU1M2NDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIGZhbHNlOworCS8qCisJICogRmlsdGVyIG91dCBpbnZhbGlkIGRlc2NyaXB0b3IgYWNjb3JkaW5nIHRvIEFDUEkgU3BlYyA1LjAsIHNlY3Rpb24KKwkgKiA2LjQuMy41IEFkZHJlc3MgU3BhY2UgUmVzb3VyY2UgRGVzY3JpcHRvcnMuCisJICovCisJaWYgKChhZGRyLT5taW5fYWRkcmVzc19maXhlZCAhPSBhZGRyLT5tYXhfYWRkcmVzc19maXhlZCAmJiBsZW4pIHx8CisJICAgIChhZGRyLT5taW5fYWRkcmVzc19maXhlZCAmJiBhZGRyLT5tYXhfYWRkcmVzc19maXhlZCAmJiAhbGVuKSkKKwkJcHJfZGVidWcoIkFDUEk6IEludmFsaWQgYWRkcmVzcyBzcGFjZSBtaW5fYWRkcl9maXggJWQsIG1heF9hZGRyX2ZpeCAlZCwgbGVuICVsbHhcbiIsCisJCQkgYWRkci0+bWluX2FkZHJlc3NfZml4ZWQsIGFkZHItPm1heF9hZGRyZXNzX2ZpeGVkLCBsZW4pOworCisJcmVzLT5zdGFydCA9IGF0dHItPm1pbmltdW07CisJcmVzLT5lbmQgPSBhdHRyLT5tYXhpbXVtOworCisJLyoKKwkgKiBGb3IgYnJpZGdlcyB0aGF0IHRyYW5zbGF0ZSBhZGRyZXNzZXMgYWNyb3NzIHRoZSBicmlkZ2UsCisJICogdHJhbnNsYXRpb25fb2Zmc2V0IGlzIHRoZSBvZmZzZXQgdGhhdCBtdXN0IGJlIGFkZGVkIHRvIHRoZQorCSAqIGFkZHJlc3Mgb24gdGhlIHNlY29uZGFyeSBzaWRlIHRvIG9idGFpbiB0aGUgYWRkcmVzcyBvbiB0aGUKKwkgKiBwcmltYXJ5IHNpZGUuIE5vbi1icmlkZ2UgZGV2aWNlcyBtdXN0IGxpc3QgMCBmb3IgYWxsIEFkZHJlc3MKKwkgKiBUcmFuc2xhdGlvbiBvZmZzZXQgYml0cy4KKwkgKi8KKwlpZiAoYWRkci0+cHJvZHVjZXJfY29uc3VtZXIgPT0gQUNQSV9QUk9EVUNFUikgeworCQlyZXMtPnN0YXJ0ICs9IGF0dHItPnRyYW5zbGF0aW9uX29mZnNldDsKKwkJcmVzLT5lbmQgKz0gYXR0ci0+dHJhbnNsYXRpb25fb2Zmc2V0OworCX0gZWxzZSBpZiAoYXR0ci0+dHJhbnNsYXRpb25fb2Zmc2V0KSB7CisJCXByX2RlYnVnKCJBQ1BJOiB0cmFuc2xhdGlvbl9vZmZzZXQoJWxsZCkgaXMgaW52YWxpZCBmb3Igbm9uLWJyaWRnZSBkZXZpY2UuXG4iLAorCQkJIGF0dHItPnRyYW5zbGF0aW9uX29mZnNldCk7CiAJfQogCi0Jc3RhdHVzID0gYWNwaV9yZXNvdXJjZV90b19hZGRyZXNzNjQoYXJlcywgJmFkZHIpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmVzLT5zdGFydCA9IGFkZHIubWluaW11bTsKLQlyZXMtPmVuZCA9IGFkZHIubWF4aW11bTsKLQl3aW5kb3cgPSBhZGRyLnByb2R1Y2VyX2NvbnN1bWVyID09IEFDUElfUFJPRFVDRVI7Ci0KLQlzd2l0Y2goYWRkci5yZXNvdXJjZV90eXBlKSB7CisJc3dpdGNoIChhZGRyLT5yZXNvdXJjZV90eXBlKSB7CiAJY2FzZSBBQ1BJX01FTU9SWV9SQU5HRToKLQkJbGVuID0gYWRkci5tYXhpbXVtIC0gYWRkci5taW5pbXVtICsgMTsKLQkJcmVzLT5mbGFncyA9IGFjcGlfZGV2X21lbXJlc291cmNlX2ZsYWdzKGxlbiwKLQkJCQkJCWFkZHIuaW5mby5tZW0ud3JpdGVfcHJvdGVjdCwKLQkJCQkJCXdpbmRvdyk7CisJCWFjcGlfZGV2X21lbXJlc291cmNlX2ZsYWdzKHJlcywgbGVuLCB3cCk7CiAJCWJyZWFrOwogCWNhc2UgQUNQSV9JT19SQU5HRToKLQkJaW9fZGVjb2RlID0gYWRkci5ncmFudWxhcml0eSA9PSAweGZmZiA/Ci0JCQkJQUNQSV9ERUNPREVfMTAgOiBBQ1BJX0RFQ09ERV8xNjsKLQkJcmVzLT5mbGFncyA9IGFjcGlfZGV2X2lvcmVzb3VyY2VfZmxhZ3MoYWRkci5taW5pbXVtLAotCQkJCQkJICAgICAgIGFkZHIubWF4aW11bSwKLQkJCQkJCSAgICAgICBpb19kZWNvZGUsIHdpbmRvdyk7CisJCWFjcGlfZGV2X2lvcmVzb3VyY2VfZmxhZ3MocmVzLCBsZW4sIGlvZGVjKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX0JVU19OVU1CRVJfUkFOR0U6CiAJCXJlcy0+ZmxhZ3MgPSBJT1JFU09VUkNFX0JVUzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmVzLT5mbGFncyA9IDA7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlyZXR1cm4gdHJ1ZTsKKwl3aW4tPm9mZnNldCA9IGF0dHItPnRyYW5zbGF0aW9uX29mZnNldDsKKworCWlmIChhZGRyLT5wcm9kdWNlcl9jb25zdW1lciA9PSBBQ1BJX1BST0RVQ0VSKQorCQlyZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfV0lORE9XOworCisJaWYgKGFkZHItPmluZm8ubWVtLmNhY2hpbmcgPT0gQUNQSV9QUkVGRVRDSEFCTEVfTUVNT1JZKQorCQlyZXMtPmZsYWdzIHw9IElPUkVTT1VSQ0VfUFJFRkVUQ0g7CisKKwlyZXR1cm4gIShyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9ESVNBQkxFRCk7Cit9CisKKy8qKgorICogYWNwaV9kZXZfcmVzb3VyY2VfYWRkcmVzc19zcGFjZSAtIEV4dHJhY3QgQUNQSSBhZGRyZXNzIHNwYWNlIGluZm9ybWF0aW9uLgorICogQGFyZXM6IElucHV0IEFDUEkgcmVzb3VyY2Ugb2JqZWN0LgorICogQHdpbjogT3V0cHV0IGdlbmVyaWMgcmVzb3VyY2Ugb2JqZWN0LgorICoKKyAqIENoZWNrIGlmIHRoZSBnaXZlbiBBQ1BJIHJlc291cmNlIG9iamVjdCByZXByZXNlbnRzIGFuIGFkZHJlc3Mgc3BhY2UgcmVzb3VyY2UKKyAqIGFuZCBpZiB0aGF0J3MgdGhlIGNhc2UsIHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gaXQgdG8gcG9wdWxhdGUgdGhlIGdlbmVyaWMKKyAqIHJlc291cmNlIG9iamVjdCBwb2ludGVkIHRvIGJ5IEB3aW4uCisgKgorICogUmV0dXJuOgorICogMSkgZmFsc2Ugd2l0aCB3aW4tPnJlcy5mbGFncyBzZXR0aW5nIHRvIHplcm86IG5vdCB0aGUgZXhwZWN0ZWQgcmVzb3VyY2UgdHlwZQorICogMikgZmFsc2Ugd2l0aCBJT1JFU09VUkNFX0RJU0FCTEVEIGluIHdpbi0+cmVzLmZsYWdzOiB2YWxpZCB1bmFzc2lnbmVkCisgKiAgICByZXNvdXJjZQorICogMykgdHJ1ZTogdmFsaWQgYXNzaWduZWQgcmVzb3VyY2UKKyAqLworYm9vbCBhY3BpX2Rldl9yZXNvdXJjZV9hZGRyZXNzX3NwYWNlKHN0cnVjdCBhY3BpX3Jlc291cmNlICphcmVzLAorCQkJCSAgICAgc3RydWN0IHJlc291cmNlX3dpbiAqd2luKQoreworCXN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3M2NCBhZGRyOworCisJd2luLT5yZXMuZmxhZ3MgPSAwOworCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9yZXNvdXJjZV90b19hZGRyZXNzNjQoYXJlcywgJmFkZHIpKSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIGFjcGlfZGVjb2RlX3NwYWNlKHdpbiwgKHN0cnVjdCBhY3BpX3Jlc291cmNlX2FkZHJlc3MgKikmYWRkciwKKwkJCQkgJmFkZHIuYWRkcmVzcyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhY3BpX2Rldl9yZXNvdXJjZV9hZGRyZXNzX3NwYWNlKTsKIAogLyoqCiAgKiBhY3BpX2Rldl9yZXNvdXJjZV9leHRfYWRkcmVzc19zcGFjZSAtIEV4dHJhY3QgQUNQSSBhZGRyZXNzIHNwYWNlIGluZm9ybWF0aW9uLgogICogQGFyZXM6IElucHV0IEFDUEkgcmVzb3VyY2Ugb2JqZWN0LgotICogQHJlczogT3V0cHV0IGdlbmVyaWMgcmVzb3VyY2Ugb2JqZWN0LgorICogQHdpbjogT3V0cHV0IGdlbmVyaWMgcmVzb3VyY2Ugb2JqZWN0LgogICoKICAqIENoZWNrIGlmIHRoZSBnaXZlbiBBQ1BJIHJlc291cmNlIG9iamVjdCByZXByZXNlbnRzIGFuIGV4dGVuZGVkIGFkZHJlc3Mgc3BhY2UKICAqIHJlc291cmNlIGFuZCBpZiB0aGF0J3MgdGhlIGNhc2UsIHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gaXQgdG8gcG9wdWxhdGUgdGhlCi0gKiBnZW5lcmljIHJlc291cmNlIG9iamVjdCBwb2ludGVkIHRvIGJ5IEByZXMuCisgKiBnZW5lcmljIHJlc291cmNlIG9iamVjdCBwb2ludGVkIHRvIGJ5IEB3aW4uCisgKgorICogUmV0dXJuOgorICogMSkgZmFsc2Ugd2l0aCB3aW4tPnJlcy5mbGFncyBzZXR0aW5nIHRvIHplcm86IG5vdCB0aGUgZXhwZWN0ZWQgcmVzb3VyY2UgdHlwZQorICogMikgZmFsc2Ugd2l0aCBJT1JFU09VUkNFX0RJU0FCTEVEIGluIHdpbi0+cmVzLmZsYWdzOiB2YWxpZCB1bmFzc2lnbmVkCisgKiAgICByZXNvdXJjZQorICogMykgdHJ1ZTogdmFsaWQgYXNzaWduZWQgcmVzb3VyY2UKICAqLwogYm9vbCBhY3BpX2Rldl9yZXNvdXJjZV9leHRfYWRkcmVzc19zcGFjZShzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqYXJlcywKLQkJCQkJIHN0cnVjdCByZXNvdXJjZSAqcmVzKQorCQkJCQkgc3RydWN0IHJlc291cmNlX3dpbiAqd2luKQogewogCXN0cnVjdCBhY3BpX3Jlc291cmNlX2V4dGVuZGVkX2FkZHJlc3M2NCAqZXh0X2FkZHI7Ci0JYm9vbCB3aW5kb3c7Ci0JdTY0IGxlbjsKLQl1OCBpb19kZWNvZGU7CiAKKwl3aW4tPnJlcy5mbGFncyA9IDA7CiAJaWYgKGFyZXMtPnR5cGUgIT0gQUNQSV9SRVNPVVJDRV9UWVBFX0VYVEVOREVEX0FERFJFU1M2NCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJZXh0X2FkZHIgPSAmYXJlcy0+ZGF0YS5leHRfYWRkcmVzczY0OwogCi0JcmVzLT5zdGFydCA9IGV4dF9hZGRyLT5taW5pbXVtOwotCXJlcy0+ZW5kID0gZXh0X2FkZHItPm1heGltdW07Ci0Jd2luZG93ID0gZXh0X2FkZHItPnByb2R1Y2VyX2NvbnN1bWVyID09IEFDUElfUFJPRFVDRVI7Ci0KLQlzd2l0Y2goZXh0X2FkZHItPnJlc291cmNlX3R5cGUpIHsKLQljYXNlIEFDUElfTUVNT1JZX1JBTkdFOgotCQlsZW4gPSBleHRfYWRkci0+bWF4aW11bSAtIGV4dF9hZGRyLT5taW5pbXVtICsgMTsKLQkJcmVzLT5mbGFncyA9IGFjcGlfZGV2X21lbXJlc291cmNlX2ZsYWdzKGxlbiwKLQkJCQkJZXh0X2FkZHItPmluZm8ubWVtLndyaXRlX3Byb3RlY3QsCi0JCQkJCXdpbmRvdyk7Ci0JCWJyZWFrOwotCWNhc2UgQUNQSV9JT19SQU5HRToKLQkJaW9fZGVjb2RlID0gZXh0X2FkZHItPmdyYW51bGFyaXR5ID09IDB4ZmZmID8KLQkJCQlBQ1BJX0RFQ09ERV8xMCA6IEFDUElfREVDT0RFXzE2OwotCQlyZXMtPmZsYWdzID0gYWNwaV9kZXZfaW9yZXNvdXJjZV9mbGFncyhleHRfYWRkci0+bWluaW11bSwKLQkJCQkJCSAgICAgICBleHRfYWRkci0+bWF4aW11bSwKLQkJCQkJCSAgICAgICBpb19kZWNvZGUsIHdpbmRvdyk7Ci0JCWJyZWFrOwotCWNhc2UgQUNQSV9CVVNfTlVNQkVSX1JBTkdFOgotCQlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9CVVM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJlcy0+ZmxhZ3MgPSAwOwotCX0KLQotCXJldHVybiB0cnVlOworCXJldHVybiBhY3BpX2RlY29kZV9zcGFjZSh3aW4sIChzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzICopZXh0X2FkZHIsCisJCQkJICZleHRfYWRkci0+YWRkcmVzcyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChhY3BpX2Rldl9yZXNvdXJjZV9leHRfYWRkcmVzc19zcGFjZSk7CiAKQEAgLTMxMCw3ICszMzMsNyBAQAogewogCXJlcy0+c3RhcnQgPSBnc2k7CiAJcmVzLT5lbmQgPSBnc2k7Ci0JcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9ESVNBQkxFRDsKKwlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0RJU0FCTEVEIHwgSU9SRVNPVVJDRV9VTlNFVDsKIH0KIAogc3RhdGljIHZvaWQgYWNwaV9kZXZfZ2V0X2lycXJlc291cmNlKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgZ3NpLApAQCAtMzY5LDYgKzM5MiwxMSBAQAogICogcmVwcmVzZW50ZWQgYnkgdGhlIHJlc291cmNlIGFuZCBwb3B1bGF0ZSB0aGUgZ2VuZXJpYyByZXNvdXJjZSBvYmplY3QgcG9pbnRlZAogICogdG8gYnkgQHJlcyBhY2NvcmRpbmdseS4gIElmIHRoZSByZWdpc3RyYXRpb24gb2YgdGhlIEdTSSBpcyBub3Qgc3VjY2Vzc2Z1bCwKICAqIElPUkVTT1VSQ0VfRElTQUJMRUQgd2lsbCBiZSBzZXQgaXQgdGhhdCBvYmplY3QncyBmbGFncy4KKyAqCisgKiBSZXR1cm46CisgKiAxKSBmYWxzZSB3aXRoIHJlcy0+ZmxhZ3Mgc2V0dGluZyB0byB6ZXJvOiBub3QgdGhlIGV4cGVjdGVkIHJlc291cmNlIHR5cGUKKyAqIDIpIGZhbHNlIHdpdGggSU9SRVNPVVJDRV9ESVNBQkxFRCBpbiByZXMtPmZsYWdzOiB2YWxpZCB1bmFzc2lnbmVkIHJlc291cmNlCisgKiAzKSB0cnVlOiB2YWxpZCBhc3NpZ25lZCByZXNvdXJjZQogICovCiBib29sIGFjcGlfZGV2X3Jlc291cmNlX2ludGVycnVwdChzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqYXJlcywgaW50IGluZGV4LAogCQkJCSBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKQEAgLTQwMiw2ICs0MzAsNyBAQAogCQkJCQkgZXh0X2lycS0+c2hhcmFibGUsIGZhbHNlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJcmVzLT5mbGFncyA9IDA7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKQEAgLTQxNSwxMiArNDQ0LDcgQEAKICAqLwogdm9pZCBhY3BpX2Rldl9mcmVlX3Jlc291cmNlX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKLQlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF9lbnRyeSAqcmVudHJ5LCAqcmU7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVudHJ5LCByZSwgbGlzdCwgbm9kZSkgewotCQlsaXN0X2RlbCgmcmVudHJ5LT5ub2RlKTsKLQkJa2ZyZWUocmVudHJ5KTsKLQl9CisJcmVzb3VyY2VfbGlzdF9mcmVlKGxpc3QpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9kZXZfZnJlZV9yZXNvdXJjZV9saXN0KTsKIApAQCAtNDMyLDE4ICs0NTYsMTkgQEAKIAlpbnQgZXJyb3I7CiB9OwogCi1zdGF0aWMgYWNwaV9zdGF0dXMgYWNwaV9kZXZfbmV3X3Jlc291cmNlX2VudHJ5KHN0cnVjdCByZXNvdXJjZSAqciwKK3N0YXRpYyBhY3BpX3N0YXR1cyBhY3BpX2Rldl9uZXdfcmVzb3VyY2VfZW50cnkoc3RydWN0IHJlc291cmNlX3dpbiAqd2luLAogCQkJCQkgICAgICAgc3RydWN0IHJlc19wcm9jX2NvbnRleHQgKmMpCiB7Ci0Jc3RydWN0IHJlc291cmNlX2xpc3RfZW50cnkgKnJlbnRyeTsKKwlzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKnJlbnRyeTsKIAotCXJlbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCpyZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlyZW50cnkgPSByZXNvdXJjZV9saXN0X2NyZWF0ZV9lbnRyeShOVUxMLCAwKTsKIAlpZiAoIXJlbnRyeSkgewogCQljLT5lcnJvciA9IC1FTk9NRU07CiAJCXJldHVybiBBRV9OT19NRU1PUlk7CiAJfQotCXJlbnRyeS0+cmVzID0gKnI7Ci0JbGlzdF9hZGRfdGFpbCgmcmVudHJ5LT5ub2RlLCBjLT5saXN0KTsKKwkqcmVudHJ5LT5yZXMgPSB3aW4tPnJlczsKKwlyZW50cnktPm9mZnNldCA9IHdpbi0+b2Zmc2V0OworCXJlc291cmNlX2xpc3RfYWRkX3RhaWwocmVudHJ5LCBjLT5saXN0KTsKIAljLT5jb3VudCsrOwogCXJldHVybiBBRV9PSzsKIH0KQEAgLTQ1Miw3ICs0NzcsOCBAQAogCQkJCQkgICAgIHZvaWQgKmNvbnRleHQpCiB7CiAJc3RydWN0IHJlc19wcm9jX2NvbnRleHQgKmMgPSBjb250ZXh0OwotCXN0cnVjdCByZXNvdXJjZSByOworCXN0cnVjdCByZXNvdXJjZV93aW4gd2luOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gJndpbi5yZXM7CiAJaW50IGk7CiAKIAlpZiAoYy0+cHJlcHJvYykgewpAQCAtNDY3LDE4ICs0OTMsMTggQEAKIAkJfQogCX0KIAotCW1lbXNldCgmciwgMCwgc2l6ZW9mKHIpKTsKKwltZW1zZXQoJndpbiwgMCwgc2l6ZW9mKHdpbikpOwogCi0JaWYgKGFjcGlfZGV2X3Jlc291cmNlX21lbW9yeShhcmVzLCAmcikKLQkgICAgfHwgYWNwaV9kZXZfcmVzb3VyY2VfaW8oYXJlcywgJnIpCi0JICAgIHx8IGFjcGlfZGV2X3Jlc291cmNlX2FkZHJlc3Nfc3BhY2UoYXJlcywgJnIpCi0JICAgIHx8IGFjcGlfZGV2X3Jlc291cmNlX2V4dF9hZGRyZXNzX3NwYWNlKGFyZXMsICZyKSkKLQkJcmV0dXJuIGFjcGlfZGV2X25ld19yZXNvdXJjZV9lbnRyeSgmciwgYyk7CisJaWYgKGFjcGlfZGV2X3Jlc291cmNlX21lbW9yeShhcmVzLCByZXMpCisJICAgIHx8IGFjcGlfZGV2X3Jlc291cmNlX2lvKGFyZXMsIHJlcykKKwkgICAgfHwgYWNwaV9kZXZfcmVzb3VyY2VfYWRkcmVzc19zcGFjZShhcmVzLCAmd2luKQorCSAgICB8fCBhY3BpX2Rldl9yZXNvdXJjZV9leHRfYWRkcmVzc19zcGFjZShhcmVzLCAmd2luKSkKKwkJcmV0dXJuIGFjcGlfZGV2X25ld19yZXNvdXJjZV9lbnRyeSgmd2luLCBjKTsKIAotCWZvciAoaSA9IDA7IGFjcGlfZGV2X3Jlc291cmNlX2ludGVycnVwdChhcmVzLCBpLCAmcik7IGkrKykgeworCWZvciAoaSA9IDA7IGFjcGlfZGV2X3Jlc291cmNlX2ludGVycnVwdChhcmVzLCBpLCByZXMpOyBpKyspIHsKIAkJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JCXN0YXR1cyA9IGFjcGlfZGV2X25ld19yZXNvdXJjZV9lbnRyeSgmciwgYyk7CisJCXN0YXR1cyA9IGFjcGlfZGV2X25ld19yZXNvdXJjZV9lbnRyeSgmd2luLCBjKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQkJcmV0dXJuIHN0YXR1czsKIAl9CkBAIC01MDMsNyArNTI5LDcgQEAKICAqIHJldHVybmVkIGFzIHRoZSBmaW5hbCBlcnJvciBjb2RlLgogICoKICAqIFRoZSByZXN1bHRhbnQgc3RydWN0IHJlc291cmNlIG9iamVjdHMgYXJlIHB1dCBvbiB0aGUgbGlzdCBwb2ludGVkIHRvIGJ5Ci0gKiBAbGlzdCwgdGhhdCBtdXN0IGJlIGVtcHR5IGluaXRpYWxseSwgYXMgbWVtYmVycyBvZiBzdHJ1Y3QgcmVzb3VyY2VfbGlzdF9lbnRyeQorICogQGxpc3QsIHRoYXQgbXVzdCBiZSBlbXB0eSBpbml0aWFsbHksIGFzIG1lbWJlcnMgb2Ygc3RydWN0IHJlc291cmNlX2VudHJ5CiAgKiBvYmplY3RzLiAgQ2FsbGVycyBvZiB0aGlzIHJvdXRpbmUgc2hvdWxkIHVzZSAlYWNwaV9kZXZfZnJlZV9yZXNvdXJjZV9saXN0KCkgdG8KICAqIGZyZWUgdGhhdCBsaXN0LgogICoKQEAgLTUzOCwzICs1NjQsNTggQEAKIAlyZXR1cm4gYy5jb3VudDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFjcGlfZGV2X2dldF9yZXNvdXJjZXMpOworCisvKioKKyAqIGFjcGlfZGV2X2ZpbHRlcl9yZXNvdXJjZV90eXBlIC0gRmlsdGVyIEFDUEkgcmVzb3VyY2UgYWNjb3JkaW5nIHRvIHJlc291cmNlCisgKgkJCQkgICB0eXBlcworICogQGFyZXM6IElucHV0IEFDUEkgcmVzb3VyY2Ugb2JqZWN0LgorICogQHR5cGVzOiBWYWxpZCByZXNvdXJjZSB0eXBlcyBvZiBJT1JFU09VUkNFX1hYWAorICoKKyAqIFRoaXMgaXMgYSBoZXBsZXIgZnVuY3Rpb24gdG8gc3VwcG9ydCBhY3BpX2Rldl9nZXRfcmVzb3VyY2VzKCksIHdoaWNoIGZpbHRlcnMKKyAqIEFDUEkgcmVzb3VyY2Ugb2JqZWN0cyBhY2NvcmRpbmcgdG8gcmVzb3VyY2UgdHlwZXMuCisgKi8KK2ludCBhY3BpX2Rldl9maWx0ZXJfcmVzb3VyY2VfdHlwZShzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqYXJlcywKKwkJCQkgIHVuc2lnbmVkIGxvbmcgdHlwZXMpCit7CisJdW5zaWduZWQgbG9uZyB0eXBlID0gMDsKKworCXN3aXRjaCAoYXJlcy0+dHlwZSkgeworCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX01FTU9SWTI0OgorCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX01FTU9SWTMyOgorCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0ZJWEVEX01FTU9SWTMyOgorCQl0eXBlID0gSU9SRVNPVVJDRV9NRU07CisJCWJyZWFrOworCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0lPOgorCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0ZJWEVEX0lPOgorCQl0eXBlID0gSU9SRVNPVVJDRV9JTzsKKwkJYnJlYWs7CisJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfSVJROgorCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0VYVEVOREVEX0lSUToKKwkJdHlwZSA9IElPUkVTT1VSQ0VfSVJROworCQlicmVhazsKKwljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9ETUE6CisJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRklYRURfRE1BOgorCQl0eXBlID0gSU9SRVNPVVJDRV9ETUE7CisJCWJyZWFrOworCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0dFTkVSSUNfUkVHSVNURVI6CisJCXR5cGUgPSBJT1JFU09VUkNFX1JFRzsKKwkJYnJlYWs7CisJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfQUREUkVTUzE2OgorCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0FERFJFU1MzMjoKKwljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9BRERSRVNTNjQ6CisJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRVhURU5ERURfQUREUkVTUzY0OgorCQlpZiAoYXJlcy0+ZGF0YS5hZGRyZXNzLnJlc291cmNlX3R5cGUgPT0gQUNQSV9NRU1PUllfUkFOR0UpCisJCQl0eXBlID0gSU9SRVNPVVJDRV9NRU07CisJCWVsc2UgaWYgKGFyZXMtPmRhdGEuYWRkcmVzcy5yZXNvdXJjZV90eXBlID09IEFDUElfSU9fUkFOR0UpCisJCQl0eXBlID0gSU9SRVNPVVJDRV9JTzsKKwkJZWxzZSBpZiAoYXJlcy0+ZGF0YS5hZGRyZXNzLnJlc291cmNlX3R5cGUgPT0KKwkJCSBBQ1BJX0JVU19OVU1CRVJfUkFOR0UpCisJCQl0eXBlID0gSU9SRVNPVVJDRV9CVVM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJldHVybiAodHlwZSAmIHR5cGVzKSA/IDAgOiAxOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYWNwaV9kZXZfZmlsdGVyX3Jlc291cmNlX3R5cGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NjYW4uYyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKaW5kZXggZGM0ZDg5Ni4uYmJjYTc4MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zY2FuLmMKKysrIGIvZHJpdmVycy9hY3BpL3NjYW4uYwpAQCAtMjU0NCw2ICsyNTQ0LDcgQEAKIAlhY3BpX3BjaV9saW5rX2luaXQoKTsKIAlhY3BpX3Byb2Nlc3Nvcl9pbml0KCk7CiAJYWNwaV9scHNzX2luaXQoKTsKKwlhY3BpX2FwZF9pbml0KCk7CiAJYWNwaV9jbW9zX3J0Y19pbml0KCk7CiAJYWNwaV9jb250YWluZXJfaW5pdCgpOwogCWFjcGlfbWVtb3J5X2hvdHBsdWdfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NsZWVwLmMgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwppbmRleCA4YWE5MjU0Li43ZjI1MWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvc2xlZXAuYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJe30sCiB9OwogCi1zdGF0aWMgdm9pZCBhY3BpX3NsZWVwX2RtaV9jaGVjayh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGFjcGlfc2xlZXBfZG1pX2NoZWNrKHZvaWQpCiB7CiAJaW50IHllYXI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlby5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKaW5kZXggMDMyZGI0NS4uODhhNGY5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKQEAgLTUyMiw2ICs1MjIsMjQgQEAKIAkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICIzNzBSNEUvMzcwUjRWLzM3MFI1RS8zNTcwUkUvMzcwUjVWIiksCiAJCX0sCiAJfSwKKwl7CisJIC8qIGh0dHBzOi8vYnVnemlsbGEucmVkaGF0LmNvbS9zaG93X2J1Zy5jZ2k/aWQ9MTE4NjA5NyAqLworCSAuY2FsbGJhY2sgPSB2aWRlb19kaXNhYmxlX25hdGl2ZV9iYWNrbGlnaHQsCisJIC5pZGVudCA9ICJTQU1TVU5HIDM1NzBSLzM3MFIvNDcwUi80NTBSLzUxMFIvNDQ1MFJWIiwKKwkgLm1hdGNoZXMgPSB7CisJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCisJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiMzU3MFIvMzcwUi80NzBSLzQ1MFIvNTEwUi80NDUwUlYiKSwKKwkJfSwKKwl9LAorCXsKKwkgLyogaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xMDk0OTQ4ICovCisJIC5jYWxsYmFjayA9IHZpZGVvX2Rpc2FibGVfbmF0aXZlX2JhY2tsaWdodCwKKwkgLmlkZW50ID0gIlNBTVNVTkcgNzMwVTNFLzc0MFUzRSIsCisJIC5tYXRjaGVzID0geworCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAorCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIjczMFUzRS83NDBVM0UiKSwKKwkJfSwKKwl9LAogCiAJewogCSAvKiBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTExNjM1NzQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW1iYS9idXMuYyBiL2RyaXZlcnMvYW1iYS9idXMuYwppbmRleCA1MmRkZDlmLi5mMDA5OTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FtYmEvYnVzLmMKKysrIGIvZHJpdmVycy9hbWJhL2J1cy5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcG1fZG9tYWluLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KICNpbmNsdWRlIDxsaW51eC9zaXplcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCkBAIC00Myw2ICs0NCwxMCBAQAogCXN0cnVjdCBhbWJhX2RldmljZSAqcGNkZXYgPSB0b19hbWJhX2RldmljZShkZXYpOwogCXN0cnVjdCBhbWJhX2RyaXZlciAqcGNkcnYgPSB0b19hbWJhX2RyaXZlcihkcnYpOwogCisJLyogV2hlbiBkcml2ZXJfb3ZlcnJpZGUgaXMgc2V0LCBvbmx5IGJpbmQgdG8gdGhlIG1hdGNoaW5nIGRyaXZlciAqLworCWlmIChwY2Rldi0+ZHJpdmVyX292ZXJyaWRlKQorCQlyZXR1cm4gIXN0cmNtcChwY2Rldi0+ZHJpdmVyX292ZXJyaWRlLCBkcnYtPm5hbWUpOworCiAJcmV0dXJuIGFtYmFfbG9va3VwKHBjZHJ2LT5pZF90YWJsZSwgcGNkZXYpICE9IE5VTEw7CiB9CiAKQEAgLTU5LDYgKzY0LDQ3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RhdGljIHNzaXplX3QgZHJpdmVyX292ZXJyaWRlX3Nob3coc3RydWN0IGRldmljZSAqX2RldiwKKwkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldiA9IHRvX2FtYmFfZGV2aWNlKF9kZXYpOworCisJaWYgKCFkZXYtPmRyaXZlcl9vdmVycmlkZSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGV2LT5kcml2ZXJfb3ZlcnJpZGUpOworfQorCitzdGF0aWMgc3NpemVfdCBkcml2ZXJfb3ZlcnJpZGVfc3RvcmUoc3RydWN0IGRldmljZSAqX2RldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGFtYmFfZGV2aWNlICpkZXYgPSB0b19hbWJhX2RldmljZShfZGV2KTsKKwljaGFyICpkcml2ZXJfb3ZlcnJpZGUsICpvbGQgPSBkZXYtPmRyaXZlcl9vdmVycmlkZSwgKmNwOworCisJaWYgKGNvdW50ID4gUEFUSF9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJZHJpdmVyX292ZXJyaWRlID0ga3N0cm5kdXAoYnVmLCBjb3VudCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkcml2ZXJfb3ZlcnJpZGUpCisJCXJldHVybiAtRU5PTUVNOworCisJY3AgPSBzdHJjaHIoZHJpdmVyX292ZXJyaWRlLCAnXG4nKTsKKwlpZiAoY3ApCisJCSpjcCA9ICdcMCc7CisKKwlpZiAoc3RybGVuKGRyaXZlcl9vdmVycmlkZSkpIHsKKwkJZGV2LT5kcml2ZXJfb3ZlcnJpZGUgPSBkcml2ZXJfb3ZlcnJpZGU7CisJfSBlbHNlIHsKKwkgICAgICAga2ZyZWUoZHJpdmVyX292ZXJyaWRlKTsKKwkgICAgICAgZGV2LT5kcml2ZXJfb3ZlcnJpZGUgPSBOVUxMOworCX0KKworCWtmcmVlKG9sZCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKICNkZWZpbmUgYW1iYV9hdHRyX2Z1bmMobmFtZSxmbXQsYXJnLi4uKQkJCQkJXAogc3RhdGljIHNzaXplX3QgbmFtZSMjX3Nob3coc3RydWN0IGRldmljZSAqX2RldiwJCQkJXAogCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXApAQCAtODEsNiArMTI3LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhbWJhX2Rldl9hdHRyc1tdID0gewogCV9fQVRUUl9STyhpZCksCiAJX19BVFRSX1JPKHJlc291cmNlKSwKKwlfX0FUVFJfUlcoZHJpdmVyX292ZXJyaWRlKSwKIAlfX0FUVFJfTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2kuaCBiL2RyaXZlcnMvYXRhL2FoY2kuaAppbmRleCA0MGYwZTM0Li43MTI2MmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmgKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5oCkBAIC0zMzMsNyArMzMzLDcgQEAKIAl1MzIJCQllbV9tc2dfdHlwZTsJLyogRU0gbWVzc2FnZSB0eXBlICovCiAJYm9vbAkJCWdvdF9ydW50aW1lX3BtOyAvKiBEaWQgd2UgZG8gcG1fcnVudGltZV9nZXQ/ICovCiAJc3RydWN0IGNsawkJKmNsa3NbQUhDSV9NQVhfQ0xLU107IC8qIE9wdGlvbmFsICovCi0Jc3RydWN0IHJlZ3VsYXRvcgkqdGFyZ2V0X3B3cjsJLyogT3B0aW9uYWwgKi8KKwlzdHJ1Y3QgcmVndWxhdG9yCSoqdGFyZ2V0X3B3cnM7CS8qIE9wdGlvbmFsICovCiAJLyoKIAkgKiBJZiBwbGF0Zm9ybSB1c2VzIFBIWXMuIFRoZXJlIGlzIGEgMToxIHJlbGF0aW9uIGJldHdlZW4gdGhlIHBvcnQgbnVtYmVyIGFuZAogCSAqIHRoZSBQSFkgcG9zaXRpb24gaW4gdGhpcyBhcnJheS4KQEAgLTM1NCw2ICszNTQsMTAgQEAKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYWhjaV9zaG9zdF9hdHRyc1tdOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphaGNpX3NkZXZfYXR0cnNbXTsKIAorLyoKKyAqIFRoaXMgbXVzdCBiZSBpbnN0YW50aWF0ZWQgYnkgdGhlIGVkZ2UgZHJpdmVycy4gIFJlYWQgdGhlIGNvbW1lbnRzCisgKiBmb3IgQVRBX0JBU0VfU0hUCisgKi8KICNkZWZpbmUgQUhDSV9TSFQoZHJ2X25hbWUpCQkJCQkJXAogCUFUQV9OQ1FfU0hUKGRydl9uYW1lKSwJCQkJCQlcCiAJLmNhbl9xdWV1ZQkJPSBBSENJX01BWF9DTURTIC0gMSwJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpX2RhODUwLmMgYi9kcml2ZXJzL2F0YS9haGNpX2RhODUwLmMKaW5kZXggY2U4YTdhNi4uMjY3YTNkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaV9kYTg1MC5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2lfZGE4NTAuYwpAQCAtMTYsNiArMTYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2FoY2lfcGxhdGZvcm0uaD4KICNpbmNsdWRlICJhaGNpLmgiCiAKKyNkZWZpbmUgRFJWX05BTUUgImFoY2lfZGE4NTAiCisKIC8qIFNBVEEgUEhZIENvbnRyb2wgUmVnaXN0ZXIgb2Zmc2V0IGZyb20gQUhDSSBiYXNlICovCiAjZGVmaW5lIFNBVEFfUDBQSFlDUl9SRUcJMHgxNzgKIApAQCAtNTksNiArNjEsMTAgQEAKIAkucG9ydF9vcHMJPSAmYWhjaV9wbGF0Zm9ybV9vcHMsCiB9OwogCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhaGNpX3BsYXRmb3JtX3NodCA9IHsKKwlBSENJX1NIVChEUlZfTkFNRSksCit9OworCiBzdGF0aWMgaW50IGFoY2lfZGE4NTBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwpAQCAtODUsNyArOTEsOCBAQAogCiAJZGE4NTBfc2F0YV9pbml0KGRldiwgcHdyZG5fcmVnLCBocHJpdi0+bW1pbyk7CiAKLQlyYyA9IGFoY2lfcGxhdGZvcm1faW5pdF9ob3N0KHBkZXYsIGhwcml2LCAmYWhjaV9kYTg1MF9wb3J0X2luZm8pOworCXJjID0gYWhjaV9wbGF0Zm9ybV9pbml0X2hvc3QocGRldiwgaHByaXYsICZhaGNpX2RhODUwX3BvcnRfaW5mbywKKwkJCQkgICAgICZhaGNpX3BsYXRmb3JtX3NodCk7CiAJaWYgKHJjKQogCQlnb3RvIGRpc2FibGVfcmVzb3VyY2VzOwogCkBAIC0xMDIsNyArMTA5LDcgQEAKIAkucHJvYmUgPSBhaGNpX2RhODUwX3Byb2JlLAogCS5yZW1vdmUgPSBhdGFfcGxhdGZvcm1fcmVtb3ZlX29uZSwKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJhaGNpX2RhODUwIiwKKwkJLm5hbWUgPSBEUlZfTkFNRSwKIAkJLnBtID0gJmFoY2lfZGE4NTBfcG1fb3BzLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaV9pbXguYyBiL2RyaXZlcnMvYXRhL2FoY2lfaW14LmMKaW5kZXggMzVkNTFjNS4uM2YzYTdkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaV9pbXguYworKysgYi9kcml2ZXJzL2F0YS9haGNpX2lteC5jCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAjaW5jbHVkZSAiYWhjaS5oIgogCisjZGVmaW5lIERSVl9OQU1FICJhaGNpLWlteCIKKwogZW51bSB7CiAJLyogVGltZXIgMS1tcyBSZWdpc3RlciAqLwogCUlNWF9USU1FUjFNUwkJCQk9IDB4MDBlMCwKQEAgLTIyMSwxMSArMjIzLDkgQEAKIAlpZiAoaW14cHJpdi0+bm9fZGV2aWNlKQogCQlyZXR1cm4gMDsKIAotCWlmIChocHJpdi0+dGFyZ2V0X3B3cikgewotCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGhwcml2LT50YXJnZXRfcHdyKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0JfQorCXJldCA9IGFoY2lfcGxhdGZvcm1fZW5hYmxlX3JlZ3VsYXRvcnMoaHByaXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaW14cHJpdi0+c2F0YV9yZWZfY2xrKTsKIAlpZiAocmV0IDwgMCkKQEAgLTI3MCw4ICsyNzAsNyBAQAogZGlzYWJsZV9jbGs6CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlteHByaXYtPnNhdGFfcmVmX2Nsayk7CiBkaXNhYmxlX3JlZ3VsYXRvcjoKLQlpZiAoaHByaXYtPnRhcmdldF9wd3IpCi0JCXJlZ3VsYXRvcl9kaXNhYmxlKGhwcml2LT50YXJnZXRfcHdyKTsKKwlhaGNpX3BsYXRmb3JtX2Rpc2FibGVfcmVndWxhdG9ycyhocHJpdik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjkxLDggKzI5MCw3IEBACiAKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoaW14cHJpdi0+c2F0YV9yZWZfY2xrKTsKIAotCWlmIChocHJpdi0+dGFyZ2V0X3B3cikKLQkJcmVndWxhdG9yX2Rpc2FibGUoaHByaXYtPnRhcmdldF9wd3IpOworCWFoY2lfcGxhdGZvcm1fZGlzYWJsZV9yZWd1bGF0b3JzKGhwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgYWhjaV9pbXhfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtNTI0LDYgKzUyMiwxMCBAQAogCXJldHVybiByZWdfdmFsdWU7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFoY2lfcGxhdGZvcm1fc2h0ID0geworCUFIQ0lfU0hUKERSVl9OQU1FKSwKK307CisKIHN0YXRpYyBpbnQgaW14X2FoY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwpAQCAtNjIwLDcgKzYyMiw4IEBACiAJcmVnX3ZhbCA9IGNsa19nZXRfcmF0ZShpbXhwcml2LT5haGJfY2xrKSAvIDEwMDA7CiAJd3JpdGVsKHJlZ192YWwsIGhwcml2LT5tbWlvICsgSU1YX1RJTUVSMU1TKTsKIAotCXJldCA9IGFoY2lfcGxhdGZvcm1faW5pdF9ob3N0KHBkZXYsIGhwcml2LCAmYWhjaV9pbXhfcG9ydF9pbmZvKTsKKwlyZXQgPSBhaGNpX3BsYXRmb3JtX2luaXRfaG9zdChwZGV2LCBocHJpdiwgJmFoY2lfaW14X3BvcnRfaW5mbywKKwkJCQkgICAgICAmYWhjaV9wbGF0Zm9ybV9zaHQpOwogCWlmIChyZXQpCiAJCWdvdG8gZGlzYWJsZV9zYXRhOwogCkBAIC02NzgsNyArNjgxLDcgQEAKIAkucHJvYmUgPSBpbXhfYWhjaV9wcm9iZSwKIAkucmVtb3ZlID0gYXRhX3BsYXRmb3JtX3JlbW92ZV9vbmUsCiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiYWhjaS1pbXgiLAorCQkubmFtZSA9IERSVl9OQU1FLAogCQkub2ZfbWF0Y2hfdGFibGUgPSBpbXhfYWhjaV9vZl9tYXRjaCwKIAkJLnBtID0gJmFoY2lfaW14X3BtX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaV9tdmVidS5jIGIvZHJpdmVycy9hdGEvYWhjaV9tdmVidS5jCmluZGV4IDY0YmIwODQuLjIzNzE2ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2lfbXZlYnUuYworKysgYi9kcml2ZXJzL2F0YS9haGNpX212ZWJ1LmMKQEAgLTE5LDYgKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlICJhaGNpLmgiCiAKKyNkZWZpbmUgRFJWX05BTUUgImFoY2ktbXZlYnUiCisKICNkZWZpbmUgQUhDSV9WRU5ET1JfU1BFQ0lGSUNfMF9BRERSICAweGEwCiAjZGVmaW5lIEFIQ0lfVkVORE9SX1NQRUNJRklDXzBfREFUQSAgMHhhNAogCkBAIC02Nyw2ICs2OSwxMCBAQAogCS5wb3J0X29wcyAgPSAmYWhjaV9wbGF0Zm9ybV9vcHMsCiB9OwogCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhaGNpX3BsYXRmb3JtX3NodCA9IHsKKwlBSENJX1NIVChEUlZfTkFNRSksCit9OworCiBzdGF0aWMgaW50IGFoY2lfbXZlYnVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2OwpAQCAtODgsNyArOTQsOCBAQAogCWFoY2lfbXZlYnVfbWJ1c19jb25maWcoaHByaXYsIGRyYW0pOwogCWFoY2lfbXZlYnVfcmVncmV0X29wdGlvbihocHJpdik7CiAKLQlyYyA9IGFoY2lfcGxhdGZvcm1faW5pdF9ob3N0KHBkZXYsIGhwcml2LCAmYWhjaV9tdmVidV9wb3J0X2luZm8pOworCXJjID0gYWhjaV9wbGF0Zm9ybV9pbml0X2hvc3QocGRldiwgaHByaXYsICZhaGNpX212ZWJ1X3BvcnRfaW5mbywKKwkJCQkgICAgICZhaGNpX3BsYXRmb3JtX3NodCk7CiAJaWYgKHJjKQogCQlnb3RvIGRpc2FibGVfcmVzb3VyY2VzOwogCkBAIC0xMTQsNyArMTIxLDcgQEAKIAkucHJvYmUgPSBhaGNpX212ZWJ1X3Byb2JlLAogCS5yZW1vdmUgPSBhdGFfcGxhdGZvcm1fcmVtb3ZlX29uZSwKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJhaGNpLW12ZWJ1IiwKKwkJLm5hbWUgPSBEUlZfTkFNRSwKIAkJLm9mX21hdGNoX3RhYmxlID0gYWhjaV9tdmVidV9vZl9tYXRjaCwKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2lfcGxhdGZvcm0uYyBiL2RyaXZlcnMvYXRhL2FoY2lfcGxhdGZvcm0uYwppbmRleCAxOGQ1Mzk4Li43OGQ2YWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaV9wbGF0Zm9ybS5jCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSA8bGludXgvYWhjaV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgImFoY2kuaCIKIAorI2RlZmluZSBEUlZfTkFNRSAiYWhjaSIKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvIGFoY2lfcG9ydF9pbmZvID0gewogCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAogCS5waW9fbWFzawk9IEFUQV9QSU80LApAQCAtMjksNiArMzEsMTAgQEAKIAkucG9ydF9vcHMJPSAmYWhjaV9wbGF0Zm9ybV9vcHMsCiB9OwogCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhaGNpX3BsYXRmb3JtX3NodCA9IHsKKwlBSENJX1NIVChEUlZfTkFNRSksCit9OworCiBzdGF0aWMgaW50IGFoY2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwpAQCAtNDYsNyArNTIsOCBAQAogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYtPm9mX25vZGUsICJoaXNpbGljb24saGlzaS1haGNpIikpCiAJCWhwcml2LT5mbGFncyB8PSBBSENJX0hGTEFHX05PX0ZCUyB8IEFIQ0lfSEZMQUdfTk9fTkNROwogCi0JcmMgPSBhaGNpX3BsYXRmb3JtX2luaXRfaG9zdChwZGV2LCBocHJpdiwgJmFoY2lfcG9ydF9pbmZvKTsKKwlyYyA9IGFoY2lfcGxhdGZvcm1faW5pdF9ob3N0KHBkZXYsIGhwcml2LCAmYWhjaV9wb3J0X2luZm8sCisJCQkJICAgICAmYWhjaV9wbGF0Zm9ybV9zaHQpOwogCWlmIChyYykKIAkJZ290byBkaXNhYmxlX3Jlc291cmNlczsKIApAQCAtNzUsNyArODIsNyBAQAogCS5wcm9iZSA9IGFoY2lfcHJvYmUsCiAJLnJlbW92ZSA9IGF0YV9wbGF0Zm9ybV9yZW1vdmVfb25lLAogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImFoY2kiLAorCQkubmFtZSA9IERSVl9OQU1FLAogCQkub2ZfbWF0Y2hfdGFibGUgPSBhaGNpX29mX21hdGNoLAogCQkucG0gPSAmYWhjaV9wbV9vcHMsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2lfc3QuYyBiL2RyaXZlcnMvYXRhL2FoY2lfc3QuYwppbmRleCAyZjllODMxLi5iYzk3MWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpX3N0LmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaV9zdC5jCkBAIC0yMyw2ICsyMyw4IEBACiAKICNpbmNsdWRlICJhaGNpLmgiCiAKKyNkZWZpbmUgRFJWX05BTUUgICJzdF9haGNpIgorCiAjZGVmaW5lIFNUX0FIQ0lfT09CUgkJCTB4YmMKICNkZWZpbmUgU1RfQUhDSV9PT0JSX1dFCQkJQklUKDMxKQogI2RlZmluZSBTVF9BSENJX09PQlJfQ1dNSU5fU0hJRlQJMjQKQEAgLTE0MCw2ICsxNDIsMTAgQEAKIAkucG9ydF9vcHMgICAgICAgPSAmc3RfYWhjaV9wb3J0X29wcywKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFoY2lfcGxhdGZvcm1fc2h0ID0geworCUFIQ0lfU0hUKERSVl9OQU1FKSwKK307CisKIHN0YXRpYyBpbnQgc3RfYWhjaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzdF9haGNpX2Rydl9kYXRhICpkcnZfZGF0YTsKQEAgLTE2Niw3ICsxNzIsOCBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBhaGNpX3BsYXRmb3JtX2luaXRfaG9zdChwZGV2LCBocHJpdiwgJnN0X2FoY2lfcG9ydF9pbmZvKTsKKwllcnIgPSBhaGNpX3BsYXRmb3JtX2luaXRfaG9zdChwZGV2LCBocHJpdiwgJnN0X2FoY2lfcG9ydF9pbmZvLAorCQkJCSAgICAgICZhaGNpX3BsYXRmb3JtX3NodCk7CiAJaWYgKGVycikgewogCQlhaGNpX3BsYXRmb3JtX2Rpc2FibGVfcmVzb3VyY2VzKGhwcml2KTsKIAkJcmV0dXJuIGVycjsKQEAgLTIyOSw3ICsyMzYsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdF9haGNpX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJzdF9haGNpIiwKKwkJLm5hbWUgPSBEUlZfTkFNRSwKIAkJLnBtID0gJnN0X2FoY2lfcG1fb3BzLAogCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoc3RfYWhjaV9tYXRjaCksCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2lfc3VueGkuYyBiL2RyaXZlcnMvYXRhL2FoY2lfc3VueGkuYwppbmRleCBlMmUwZGE1Li5iMjY0Mzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpX3N1bnhpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaV9zdW54aS5jCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSAiYWhjaS5oIgogCisjZGVmaW5lIERSVl9OQU1FICJhaGNpLXN1bnhpIgorCiAvKiBJbnNtb2QgcGFyYW1ldGVycyAqLwogc3RhdGljIGJvb2wgZW5hYmxlX3BtcDsKIG1vZHVsZV9wYXJhbShlbmFibGVfcG1wLCBib29sLCAwKTsKQEAgLTE2OSw2ICsxNzEsMTAgQEAKIAkucG9ydF9vcHMJPSAmYWhjaV9wbGF0Zm9ybV9vcHMsCiB9OwogCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBhaGNpX3BsYXRmb3JtX3NodCA9IHsKKwlBSENJX1NIVChEUlZfTkFNRSksCit9OworCiBzdGF0aWMgaW50IGFoY2lfc3VueGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwpAQCAtMjAwLDcgKzIwNiw4IEBACiAJaWYgKCFlbmFibGVfcG1wKQogCQlocHJpdi0+ZmxhZ3MgfD0gQUhDSV9IRkxBR19OT19QTVA7CiAKLQlyYyA9IGFoY2lfcGxhdGZvcm1faW5pdF9ob3N0KHBkZXYsIGhwcml2LCAmYWhjaV9zdW54aV9wb3J0X2luZm8pOworCXJjID0gYWhjaV9wbGF0Zm9ybV9pbml0X2hvc3QocGRldiwgaHByaXYsICZhaGNpX3N1bnhpX3BvcnRfaW5mbywKKwkJCQkgICAgICZhaGNpX3BsYXRmb3JtX3NodCk7CiAJaWYgKHJjKQogCQlnb3RvIGRpc2FibGVfcmVzb3VyY2VzOwogCkBAIC0yNTEsNyArMjU4LDcgQEAKIAkucHJvYmUgPSBhaGNpX3N1bnhpX3Byb2JlLAogCS5yZW1vdmUgPSBhdGFfcGxhdGZvcm1fcmVtb3ZlX29uZSwKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJhaGNpLXN1bnhpIiwKKwkJLm5hbWUgPSBEUlZfTkFNRSwKIAkJLm9mX21hdGNoX3RhYmxlID0gYWhjaV9zdW54aV9vZl9tYXRjaCwKIAkJLnBtID0gJmFoY2lfc3VueGlfcG1fb3BzLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9haGNpX3RlZ3JhLmMgYi9kcml2ZXJzL2F0YS9haGNpX3RlZ3JhLmMKaW5kZXggMDMyOTA0NC4uM2E2MmViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYWhjaV90ZWdyYS5jCisrKyBiL2RyaXZlcnMvYXRhL2FoY2lfdGVncmEuYwpAQCAtMzEsNiArMzEsOCBAQAogCiAjaW5jbHVkZSAiYWhjaS5oIgogCisjZGVmaW5lIERSVl9OQU1FICJ0ZWdyYS1haGNpIgorCiAjZGVmaW5lIFNBVEFfQ09ORklHVVJBVElPTl8wCQkJCTB4MTgwCiAjZGVmaW5lIFNBVEFfQ09ORklHVVJBVElPTl9FTl9GUENJCQkJQklUKDApCiAKQEAgLTI4OSw2ICsyOTEsMTAgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0ZWdyYV9haGNpX29mX21hdGNoKTsKIAorc3RhdGljIHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgYWhjaV9wbGF0Zm9ybV9zaHQgPSB7CisJQUhDSV9TSFQoRFJWX05BTUUpLAorfTsKKwogc3RhdGljIGludCB0ZWdyYV9haGNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdjsKQEAgLTM1NCw3ICszNjAsOCBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBhaGNpX3BsYXRmb3JtX2luaXRfaG9zdChwZGV2LCBocHJpdiwgJmFoY2lfdGVncmFfcG9ydF9pbmZvKTsKKwlyZXQgPSBhaGNpX3BsYXRmb3JtX2luaXRfaG9zdChwZGV2LCBocHJpdiwgJmFoY2lfdGVncmFfcG9ydF9pbmZvLAorCQkJCSAgICAgICZhaGNpX3BsYXRmb3JtX3NodCk7CiAJaWYgKHJldCkKIAkJZ290byBkZWluaXRfY29udHJvbGxlcjsKIApAQCAtMzcwLDcgKzM3Nyw3IEBACiAJLnByb2JlID0gdGVncmFfYWhjaV9wcm9iZSwKIAkucmVtb3ZlID0gYXRhX3BsYXRmb3JtX3JlbW92ZV9vbmUsCiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAidGVncmEtYWhjaSIsCisJCS5uYW1lID0gRFJWX05BTUUsCiAJCS5vZl9tYXRjaF90YWJsZSA9IHRlZ3JhX2FoY2lfb2ZfbWF0Y2gsCiAJfSwKIAkvKiBMUDAgc3VzcGVuZCBzdXBwb3J0IG5vdCBpbXBsZW1lbnRlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaV94Z2VuZS5jIGIvZHJpdmVycy9hdGEvYWhjaV94Z2VuZS5jCmluZGV4IGNiY2QyMDgxLi4yZThiYjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpX3hnZW5lLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaV94Z2VuZS5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgogI2luY2x1ZGUgImFoY2kuaCIKIAorI2RlZmluZSBEUlZfTkFNRSAieGdlbmUtYWhjaSIKKwogLyogTWF4ICMgb2YgZGlzayBwZXIgYSBjb250cm9sbGVyICovCiAjZGVmaW5lIE1BWF9BSENJX0NITl9QRVJDVFIJCTIKIApAQCAtODUsNiArODcsNyBAQAogCXN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXY7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXU4IGxhc3RfY21kW01BWF9BSENJX0NITl9QRVJDVFJdOyAvKiB0cmFja2luZyB0aGUgbGFzdCBjb21tYW5kIGlzc3VlZCovCisJdTMyIGNsYXNzW01BWF9BSENJX0NITl9QRVJDVFJdOyAvKiB0cmFja2luZyB0aGUgY2xhc3Mgb2YgZGV2aWNlICovCiAJdm9pZCBfX2lvbWVtICpjc3JfY29yZTsJCS8qIENvcmUgQ1NSIGFkZHJlc3Mgb2YgSVAgKi8KIAl2b2lkIF9faW9tZW0gKmNzcl9kaWFnOwkJLyogRGlhZyBDU1IgYWRkcmVzcyBvZiBJUCAqLwogCXZvaWQgX19pb21lbSAqY3NyX2F4aTsJCS8qIEFYSSBDU1IgYWRkcmVzcyBvZiBJUCAqLwpAQCAtMTA1LDE3ICsxMDgsNjkgQEAKIH0KIAogLyoqCisgKiB4Z2VuZV9haGNpX3BvbGxfcmVnX3ZhbC0gUG9sbCBhIHJlZ2lzdGVyIG9uIGEgc3BlY2lmaWMgdmFsdWUuCisgKiBAYXAgOiBBVEEgcG9ydCBvZiBpbnRlcmVzdC4KKyAqIEByZWcgOiBSZWdpc3RlciBvZiBpbnRlcmVzdC4KKyAqIEB2YWwgOiBWYWx1ZSB0byBiZSBhdHRhaW5lZC4KKyAqIEBpbnRlcnZhbCA6IHdhaXRpbmcgaW50ZXJ2YWwgZm9yIHBvbGxpbmcuCisgKiBAdGltZW91dCA6IHRpbWVvdXQgZm9yIGFjaGlldmluZyB0aGUgdmFsdWUuCisgKi8KK3N0YXRpYyBpbnQgeGdlbmVfYWhjaV9wb2xsX3JlZ192YWwoc3RydWN0IGF0YV9wb3J0ICphcCwKKwkJCQkgICB2b2lkIF9faW9tZW0gKnJlZywgdW5zaWduZWQKKwkJCQkgICBpbnQgdmFsLCB1bnNpZ25lZCBsb25nIGludGVydmFsLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwl1bnNpZ25lZCBsb25nIGRlYWRsaW5lOworCXVuc2lnbmVkIGludCB0bXA7CisKKwl0bXAgPSBpb3JlYWQzMihyZWcpOworCWRlYWRsaW5lID0gYXRhX2RlYWRsaW5lKGppZmZpZXMsIHRpbWVvdXQpOworCisJd2hpbGUgKHRtcCAhPSB2YWwgJiYgdGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKSB7CisJCWF0YV9tc2xlZXAoYXAsIGludGVydmFsKTsKKwkJdG1wID0gaW9yZWFkMzIocmVnKTsKKwl9CisKKwlyZXR1cm4gdG1wOworfQorCisvKioKICAqIHhnZW5lX2FoY2lfcmVzdGFydF9lbmdpbmUgLSBSZXN0YXJ0IHRoZSBkbWEgZW5naW5lLgogICogQGFwIDogQVRBIHBvcnQgb2YgaW50ZXJlc3QKICAqCi0gKiBSZXN0YXJ0cyB0aGUgZG1hIGVuZ2luZSBpbnNpZGUgdGhlIGNvbnRyb2xsZXIuCisgKiBXYWl0cyBmb3IgY29tcGxldGlvbiBvZiBtdWx0aXBsZSBjb21tYW5kcyBhbmQgcmVzdGFydHMKKyAqIHRoZSBETUEgZW5naW5lIGluc2lkZSB0aGUgY29udHJvbGxlci4KICAqLwogc3RhdGljIGludCB4Z2VuZV9haGNpX3Jlc3RhcnRfZW5naW5lKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGFoY2lfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShhcCk7CisJdTMyIGZiczsKKworCS8qCisJICogSW4gY2FzZSBvZiBQTVAgbXVsdGlwbGUgSURFTlRJRlkgREVWSUNFIGNvbW1hbmRzIGNhbiBiZQorCSAqIGlzc3VlZCBpbnNpZGUgUHhDSS4gU28gbmVlZCB0byBwb2xsIFB4Q0kgZm9yIHRoZQorCSAqIGNvbXBsZXRpb24gb2Ygb3V0c3RhbmRpbmcgSURFTlRJRlkgREVWSUNFIGNvbW1hbmRzIGJlZm9yZQorCSAqIHdlIHJlc3RhcnQgdGhlIERNQSBlbmdpbmUuCisJICovCisJaWYgKHhnZW5lX2FoY2lfcG9sbF9yZWdfdmFsKGFwLCBwb3J0X21taW8gKworCQkJCSAgICBQT1JUX0NNRF9JU1NVRSwgMHgwLCAxLCAxMDApKQorCQkgIHJldHVybiAtRUJVU1k7CiAKIAlhaGNpX3N0b3BfZW5naW5lKGFwKTsKIAlhaGNpX3N0YXJ0X2Zpc19yeChhcCk7CisKKwkvKgorCSAqIEVuYWJsZSB0aGUgUHhGQlMuRkJTX0VOIGJpdCBhcyBpdAorCSAqIGdldHMgY2xlYXJlZCBkdWUgdG8gc3RvcHBpbmcgdGhlIGVuZ2luZS4KKwkgKi8KKwlpZiAocHAtPmZic19zdXBwb3J0ZWQpIHsKKwkJZmJzID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9GQlMpOworCQl3cml0ZWwoZmJzIHwgUE9SVF9GQlNfRU4sIHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwkJZmJzID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9GQlMpOworCX0KKwogCWhwcml2LT5zdGFydF9lbmdpbmUoYXApOwogCiAJcmV0dXJuIDA7CkBAIC0xMjUsMTEgKzE4MCwxNyBAQAogICogeGdlbmVfYWhjaV9xY19pc3N1ZSAtIElzc3VlIGNvbW1hbmRzIHRvIHRoZSBkZXZpY2UKICAqIEBxYzogQ29tbWFuZCB0byBpc3N1ZQogICoKLSAqIER1ZSB0byBIYXJkd2FyZSBlcnJhdGEgZm9yIElERU5USUZZIERFVklDRSBjb21tYW5kIGFuZCBQQUNLRVQKLSAqIGNvbW1hbmQgb2YgQVRBUEkgcHJvdG9jb2wgc2V0LCB0aGUgY29udHJvbGxlciBjYW5ub3QgY2xlYXIgdGhlIEJTWSBiaXQKLSAqIGFmdGVyIHJlY2VpdmluZyB0aGUgUElPIHNldHVwIEZJUy4gVGhpcyByZXN1bHRzIGluIHRoZSBETUEgc3RhdGUgbWFjaGluZQotICogZ29pbmcgaW50byB0aGUgQ01GYXRhbEVycm9yVXBkYXRlIHN0YXRlIGFuZCBsb2NrcyB1cC4gQnkgcmVzdGFydGluZyB0aGUKLSAqIERNQSBlbmdpbmUsIGl0IHJlbW92ZXMgdGhlIGNvbnRyb2xsZXIgb3V0IG9mIGxvY2sgdXAgc3RhdGUuCisgKiBEdWUgdG8gSGFyZHdhcmUgZXJyYXRhIGZvciBJREVOVElGWSBERVZJQ0UgY29tbWFuZCwgdGhlIGNvbnRyb2xsZXIgY2Fubm90CisgKiBjbGVhciB0aGUgQlNZIGJpdCBhZnRlciByZWNlaXZpbmcgdGhlIFBJTyBzZXR1cCBGSVMuIFRoaXMgcmVzdWx0cyBpbiB0aGUgZG1hCisgKiBzdGF0ZSBtYWNoaW5lIGdvZXMgaW50byB0aGUgQ01GYXRhbEVycm9yVXBkYXRlIHN0YXRlIGFuZCBsb2NrcyB1cC4gQnkKKyAqIHJlc3RhcnRpbmcgdGhlIGRtYSBlbmdpbmUsIGl0IHJlbW92ZXMgdGhlIGNvbnRyb2xsZXIgb3V0IG9mIGxvY2sgdXAgc3RhdGUuCisgKgorICogRHVlIHRvIEgvVyBlcnJhdGEsIHRoZSBjb250cm9sbGVyIGlzIHVuYWJsZSB0byBzYXZlIHRoZSBQTVAKKyAqIGZpZWxkIGZldGNoZWQgZnJvbSBjb21tYW5kIGhlYWRlciBiZWZvcmUgc2VuZGluZyB0aGUgSDJEIEZJUy4KKyAqIFdoZW4gdGhlIGRldmljZSByZXR1cm5zIHRoZSBQTVAgcG9ydCBmaWVsZCBpbiB0aGUgRDJIIEZJUywgdGhlcmUgaXMKKyAqIGEgbWlzbWF0Y2ggYW5kIHJlc3VsdHMgaW4gY29tbWFuZCBjb21wbGV0aW9uIGZhaWx1cmUuIFRoZQorICogd29ya2Fyb3VuZCBpcyB0byB3cml0ZSB0aGUgcG1wIHZhbHVlIHRvIFB4RkJTLkRFViBmaWVsZCBiZWZvcmUgaXNzdWluZworICogYW55IGNvbW1hbmQgdG8gUE1QLgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHhnZW5lX2FoY2lfcWNfaXNzdWUoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKQEAgLTEzNyw5ICsxOTgsMjMgQEAKIAlzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2ID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgeGdlbmVfYWhjaV9jb250ZXh0ICpjdHggPSBocHJpdi0+cGxhdF9kYXRhOwogCWludCByYyA9IDA7CisJdTMyIHBvcnRfZmJzOworCXZvaWQgKnBvcnRfbW1pbyA9IGFoY2lfcG9ydF9iYXNlKGFwKTsKKworCS8qCisJICogV3JpdGUgdGhlIHBtcCB2YWx1ZSB0byBQeEZCUy5ERVYKKwkgKiBmb3IgY2FzZSBvZiBQb3J0IE11bGl0cGxpZXIuCisJICovCisJaWYgKGN0eC0+Y2xhc3NbYXAtPnBvcnRfbm9dID09IEFUQV9ERVZfUE1QKSB7CisJCXBvcnRfZmJzID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9GQlMpOworCQlwb3J0X2ZicyAmPSB+UE9SVF9GQlNfREVWX01BU0s7CisJCXBvcnRfZmJzIHw9IHFjLT5kZXYtPmxpbmstPnBtcCA8PCBQT1JUX0ZCU19ERVZfT0ZGU0VUOworCQl3cml0ZWwocG9ydF9mYnMsIHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwl9CiAKIAlpZiAodW5saWtlbHkoKGN0eC0+bGFzdF9jbWRbYXAtPnBvcnRfbm9dID09IEFUQV9DTURfSURfQVRBKSB8fAotCSAgICAoY3R4LT5sYXN0X2NtZFthcC0+cG9ydF9ub10gPT0gQVRBX0NNRF9QQUNLRVQpKSkKKwkgICAgKGN0eC0+bGFzdF9jbWRbYXAtPnBvcnRfbm9dID09IEFUQV9DTURfUEFDS0VUKSB8fAorCSAgICAoY3R4LT5sYXN0X2NtZFthcC0+cG9ydF9ub10gPT0gQVRBX0NNRF9TTUFSVCkpKQogCQl4Z2VuZV9haGNpX3Jlc3RhcnRfZW5naW5lKGFwKTsKIAogCXJjID0gYWhjaV9xY19pc3N1ZShxYyk7CkBAIC0zNjUsMTYgKzQ0MCwxMTkgQEAKIAlhaGNpX3BsYXRmb3JtX2Rpc2FibGVfcmVzb3VyY2VzKGhwcml2KTsKIH0KIAorLyoqCisgKiB4Z2VuZV9haGNpX3BtcF9zb2Z0cmVzZXQgLSBJc3N1ZSB0aGUgc29mdHJlc2V0IHRvIHRoZSBkcml2ZXMgY29ubmVjdGVkCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBQb3J0IE11bHRpcGxpZXIuCisgKiBAbGluazogbGluayB0byByZXNldAorICogQGNsYXNzOiBSZXR1cm4gdmFsdWUgdG8gaW5kaWNhdGUgY2xhc3Mgb2YgZGV2aWNlCisgKiBAZGVhZGxpbmU6IGRlYWRsaW5lIGppZmZpZXMgZm9yIHRoZSBvcGVyYXRpb24KKyAqCisgKiBEdWUgdG8gSC9XIGVycmF0YSwgdGhlIGNvbnRyb2xsZXIgaXMgdW5hYmxlIHRvIHNhdmUgdGhlIFBNUAorICogZmllbGQgZmV0Y2hlZCBmcm9tIGNvbW1hbmQgaGVhZGVyIGJlZm9yZSBzZW5kaW5nIHRoZSBIMkQgRklTLgorICogV2hlbiB0aGUgZGV2aWNlIHJldHVybnMgdGhlIFBNUCBwb3J0IGZpZWxkIGluIHRoZSBEMkggRklTLCB0aGVyZSBpcworICogYSBtaXNtYXRjaCBhbmQgcmVzdWx0cyBpbiBjb21tYW5kIGNvbXBsZXRpb24gZmFpbHVyZS4gVGhlIHdvcmthcm91bmQKKyAqIGlzIHRvIHdyaXRlIHRoZSBwbXAgdmFsdWUgdG8gUHhGQlMuREVWIGZpZWxkIGJlZm9yZSBpc3N1aW5nIGFueSBjb21tYW5kCisgKiB0byBQTVAuCisgKi8KK3N0YXRpYyBpbnQgeGdlbmVfYWhjaV9wbXBfc29mdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKKwkJCSAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKK3sKKwlpbnQgcG1wID0gc2F0YV9zcnN0X3BtcChsaW5rKTsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7CisJdTMyIHJjOworCXZvaWQgKnBvcnRfbW1pbyA9IGFoY2lfcG9ydF9iYXNlKGFwKTsKKwl1MzIgcG9ydF9mYnM7CisKKwkvKgorCSAqIFNldCBQeEZCUy5ERVYgZmllbGQgd2l0aCBwbXAKKwkgKiB2YWx1ZS4KKwkgKi8KKwlwb3J0X2ZicyA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwlwb3J0X2ZicyAmPSB+UE9SVF9GQlNfREVWX01BU0s7CisJcG9ydF9mYnMgfD0gcG1wIDw8IFBPUlRfRkJTX0RFVl9PRkZTRVQ7CisJd3JpdGVsKHBvcnRfZmJzLCBwb3J0X21taW8gKyBQT1JUX0ZCUyk7CisKKwlyYyA9IGFoY2lfZG9fc29mdHJlc2V0KGxpbmssIGNsYXNzLCBwbXAsIGRlYWRsaW5lLCBhaGNpX2NoZWNrX3JlYWR5KTsKKworCXJldHVybiByYzsKK30KKworLyoqCisgKiB4Z2VuZV9haGNpX3NvZnRyZXNldCAtIElzc3VlIHRoZSBzb2Z0cmVzZXQgdG8gdGhlIGRyaXZlLgorICogQGxpbms6IGxpbmsgdG8gcmVzZXQKKyAqIEBjbGFzczogUmV0dXJuIHZhbHVlIHRvIGluZGljYXRlIGNsYXNzIG9mIGRldmljZQorICogQGRlYWRsaW5lOiBkZWFkbGluZSBqaWZmaWVzIGZvciB0aGUgb3BlcmF0aW9uCisgKgorICogRHVlIHRvIEgvVyBlcnJhdGEsIHRoZSBjb250cm9sbGVyIGlzIHVuYWJsZSB0byBzYXZlIHRoZSBQTVAKKyAqIGZpZWxkIGZldGNoZWQgZnJvbSBjb21tYW5kIGhlYWRlciBiZWZvcmUgc2VuZGluZyB0aGUgSDJEIEZJUy4KKyAqIFdoZW4gdGhlIGRldmljZSByZXR1cm5zIHRoZSBQTVAgcG9ydCBmaWVsZCBpbiB0aGUgRDJIIEZJUywgdGhlcmUgaXMKKyAqIGEgbWlzbWF0Y2ggYW5kIHJlc3VsdHMgaW4gY29tbWFuZCBjb21wbGV0aW9uIGZhaWx1cmUuIFRoZSB3b3JrYXJvdW5kCisgKiBpcyB0byB3cml0ZSB0aGUgcG1wIHZhbHVlIHRvIFB4RkJTLkRFViBmaWVsZCBiZWZvcmUgaXNzdWluZyBhbnkgY29tbWFuZAorICogdG8gUE1QLiBIZXJlIGlzIHRoZSBhbGdvcml0aG0gdG8gZGV0ZWN0IFBNUCA6CisgKgorICogMS4gU2F2ZSB0aGUgUHhGQlMgdmFsdWUKKyAqIDIuIFByb2dyYW0gUHhGQlMuREVWIHdpdGggcG1wIHZhbHVlIHNlbmQgYnkgZnJhbWV3b3JrLiBGcmFtZXdvcmsgc2VuZHMKKyAqICAgIDB4RiBmb3IgYm90aCBQTVAvTk9OLVBNUCBpbml0aWFsbHkKKyAqIDMuIElzc3VlIHNvZnRyZXNldAorICogNC4gSWYgc2lnbmF0dXJlIGNsYXNzIGlzIFBNUCBnb3RvIDYKKyAqIDUuIHJlc3RvcmUgdGhlIG9yaWdpbmFsIFB4RkJTIGFuZCBnb3RvIDMKKyAqIDYuIHJldHVybgorICovCitzdGF0aWMgaW50IHhnZW5lX2FoY2lfc29mdHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKKwkJCSAgdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKK3sKKwlpbnQgcG1wID0gc2F0YV9zcnN0X3BtcChsaW5rKTsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7CisJc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHhnZW5lX2FoY2lfY29udGV4dCAqY3R4ID0gaHByaXYtPnBsYXRfZGF0YTsKKwl2b2lkICpwb3J0X21taW8gPSBhaGNpX3BvcnRfYmFzZShhcCk7CisJdTMyIHBvcnRfZmJzOworCXUzMiBwb3J0X2Zic19zYXZlOworCXUzMiByZXRyeSA9IDE7CisJdTMyIHJjOworCisJcG9ydF9mYnNfc2F2ZSA9IHJlYWRsKHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKworCS8qCisJICogU2V0IFB4RkJTLkRFViBmaWVsZCB3aXRoIHBtcAorCSAqIHZhbHVlLgorCSAqLworCXBvcnRfZmJzID0gcmVhZGwocG9ydF9tbWlvICsgUE9SVF9GQlMpOworCXBvcnRfZmJzICY9IH5QT1JUX0ZCU19ERVZfTUFTSzsKKwlwb3J0X2ZicyB8PSBwbXAgPDwgUE9SVF9GQlNfREVWX09GRlNFVDsKKwl3cml0ZWwocG9ydF9mYnMsIHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKworc29mdHJlc2V0X3JldHJ5OgorCXJjID0gYWhjaV9kb19zb2Z0cmVzZXQobGluaywgY2xhc3MsIHBtcCwKKwkJCSAgICAgICBkZWFkbGluZSwgYWhjaV9jaGVja19yZWFkeSk7CisKKwljdHgtPmNsYXNzW2FwLT5wb3J0X25vXSA9ICpjbGFzczsKKwlpZiAoKmNsYXNzICE9IEFUQV9ERVZfUE1QKSB7CisJCS8qCisJCSAqIFJldHJ5IGZvciBub3JtYWwgZHJpdmVzIHdpdGhvdXQKKwkJICogc2V0dGluZyBQeEZCUy5ERVYgZmllbGQgd2l0aCBwbXAgdmFsdWUuCisJCSAqLworCQlpZiAocmV0cnktLSkgeworCQkJd3JpdGVsKHBvcnRfZmJzX3NhdmUsIHBvcnRfbW1pbyArIFBPUlRfRkJTKTsKKwkJCWdvdG8gc29mdHJlc2V0X3JldHJ5OworCQl9CisJfQorCisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgeGdlbmVfYWhjaV9vcHMgPSB7CiAJLmluaGVyaXRzID0gJmFoY2lfb3BzLAogCS5ob3N0X3N0b3AgPSB4Z2VuZV9haGNpX2hvc3Rfc3RvcCwKIAkuaGFyZHJlc2V0ID0geGdlbmVfYWhjaV9oYXJkcmVzZXQsCiAJLnJlYWRfaWQgPSB4Z2VuZV9haGNpX3JlYWRfaWQsCiAJLnFjX2lzc3VlID0geGdlbmVfYWhjaV9xY19pc3N1ZSwKKwkuc29mdHJlc2V0ID0geGdlbmVfYWhjaV9zb2Z0cmVzZXQsCisJLnBtcF9zb2Z0cmVzZXQgPSB4Z2VuZV9haGNpX3BtcF9zb2Z0cmVzZXQKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyB4Z2VuZV9haGNpX3BvcnRfaW5mbyA9IHsKLQkuZmxhZ3MgPSBBSENJX0ZMQUdfQ09NTU9OLAorCS5mbGFncyA9IEFIQ0lfRkxBR19DT01NT04gfCBBVEFfRkxBR19QTVAsCiAJLnBpb19tYXNrID0gQVRBX1BJTzQsCiAJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkucG9ydF9vcHMgPSAmeGdlbmVfYWhjaV9vcHMsCkBAIC00NDYsNiArNjI0LDEwIEBACiAJcmV0dXJuIHZhbCAmIENGR19TQVRBX0VORVRfU0VMRUNUX01BU0sgPyAtMSA6IDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFoY2lfcGxhdGZvcm1fc2h0ID0geworCUFIQ0lfU0hUKERSVl9OQU1FKSwKK307CisKIHN0YXRpYyBpbnQgeGdlbmVfYWhjaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CkBAIC01MjMsNyArNzA1LDggQEAKIHNraXBfY2xrX3BoeToKIAlocHJpdi0+ZmxhZ3MgPSBBSENJX0hGTEFHX05PX1BNUCB8IEFIQ0lfSEZMQUdfTk9fTkNROwogCi0JcmMgPSBhaGNpX3BsYXRmb3JtX2luaXRfaG9zdChwZGV2LCBocHJpdiwgJnhnZW5lX2FoY2lfcG9ydF9pbmZvKTsKKwlyYyA9IGFoY2lfcGxhdGZvcm1faW5pdF9ob3N0KHBkZXYsIGhwcml2LCAmeGdlbmVfYWhjaV9wb3J0X2luZm8sCisJCQkJICAgICAmYWhjaV9wbGF0Zm9ybV9zaHQpOwogCWlmIChyYykKIAkJZ290byBkaXNhYmxlX3Jlc291cmNlczsKIApAQCAtNTQ1LDcgKzcyOCw3IEBACiAJLnByb2JlID0geGdlbmVfYWhjaV9wcm9iZSwKIAkucmVtb3ZlID0gYXRhX3BsYXRmb3JtX3JlbW92ZV9vbmUsCiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAieGdlbmUtYWhjaSIsCisJCS5uYW1lID0gRFJWX05BTUUsCiAJCS5vZl9tYXRjaF90YWJsZSA9IHhnZW5lX2FoY2lfb2ZfbWF0Y2gsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhaGNpX3BsYXRmb3JtLmMgYi9kcml2ZXJzL2F0YS9saWJhaGNpX3BsYXRmb3JtLmMKaW5kZXggMGIwM2Y5MC4uZDg5MzA1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYWhjaV9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmFoY2lfcGxhdGZvcm0uYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FoY2lfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSAiYWhjaS5oIgogCiBzdGF0aWMgdm9pZCBhaGNpX2hvc3Rfc3RvcChzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpOwpAQCAtMzQsMTAgKzM1LDYgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChhaGNpX3BsYXRmb3JtX29wcyk7CiAKLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIGFoY2lfcGxhdGZvcm1fc2h0ID0gewotCUFIQ0lfU0hUKCJhaGNpX3BsYXRmb3JtIiksCi19OwotCiAvKioKICAqIGFoY2lfcGxhdGZvcm1fZW5hYmxlX3BoeXMgLSBFbmFibGUgUEhZcwogICogQGhwcml2OiBob3N0IHByaXZhdGUgYXJlYSB0byBzdG9yZSBjb25maWcgdmFsdWVzCkBAIC01NCw5ICs1MSw2IEBACiAJaW50IHJjLCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGhwcml2LT5ucG9ydHM7IGkrKykgewotCQlpZiAoIWhwcml2LT5waHlzW2ldKQotCQkJY29udGludWU7Ci0KIAkJcmMgPSBwaHlfaW5pdChocHJpdi0+cGh5c1tpXSk7CiAJCWlmIChyYykKIAkJCWdvdG8gZGlzYWJsZV9waHlzOwpAQCAtODksOSArODMsNiBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGhwcml2LT5ucG9ydHM7IGkrKykgewotCQlpZiAoIWhwcml2LT5waHlzW2ldKQotCQkJY29udGludWU7Ci0KIAkJcGh5X3Bvd2VyX29mZihocHJpdi0+cGh5c1tpXSk7CiAJCXBoeV9leGl0KGhwcml2LT5waHlzW2ldKTsKIAl9CkBAIC0xNDQsNiArMTM1LDU5IEBACiBFWFBPUlRfU1lNQk9MX0dQTChhaGNpX3BsYXRmb3JtX2Rpc2FibGVfY2xrcyk7CiAKIC8qKgorICogYWhjaV9wbGF0Zm9ybV9lbmFibGVfcmVndWxhdG9ycyAtIEVuYWJsZSByZWd1bGF0b3JzCisgKiBAaHByaXY6IGhvc3QgcHJpdmF0ZSBhcmVhIHRvIHN0b3JlIGNvbmZpZyB2YWx1ZXMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgYWxsIHRoZSByZWd1bGF0b3JzIGZvdW5kIGluCisgKiBocHJpdi0+dGFyZ2V0X3B3cnMsIGlmIGFueS4gIElmIGEgcmVndWxhdG9yIGZhaWxzIHRvIGJlIGVuYWJsZWQsIGl0CisgKiBkaXNhYmxlcyBhbGwgdGhlIHJlZ3VsYXRvcnMgYWxyZWFkeSBlbmFibGVkIGluIHJldmVyc2Ugb3JkZXIgYW5kCisgKiByZXR1cm5zIGFuIGVycm9yLgorICoKKyAqIFJFVFVSTlM6CisgKiAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICovCitpbnQgYWhjaV9wbGF0Zm9ybV9lbmFibGVfcmVndWxhdG9ycyhzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2KQoreworCWludCByYywgaTsKKworCWZvciAoaSA9IDA7IGkgPCBocHJpdi0+bnBvcnRzOyBpKyspIHsKKwkJaWYgKCFocHJpdi0+dGFyZ2V0X3B3cnNbaV0pCisJCQljb250aW51ZTsKKworCQlyYyA9IHJlZ3VsYXRvcl9lbmFibGUoaHByaXYtPnRhcmdldF9wd3JzW2ldKTsKKwkJaWYgKHJjKQorCQkJZ290byBkaXNhYmxlX3RhcmdldF9wd3JzOworCX0KKworCXJldHVybiAwOworCitkaXNhYmxlX3RhcmdldF9wd3JzOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJaWYgKGhwcml2LT50YXJnZXRfcHdyc1tpXSkKKwkJCXJlZ3VsYXRvcl9kaXNhYmxlKGhwcml2LT50YXJnZXRfcHdyc1tpXSk7CisKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhaGNpX3BsYXRmb3JtX2VuYWJsZV9yZWd1bGF0b3JzKTsKKworLyoqCisgKiBhaGNpX3BsYXRmb3JtX2Rpc2FibGVfcmVndWxhdG9ycyAtIERpc2FibGUgcmVndWxhdG9ycworICogQGhwcml2OiBob3N0IHByaXZhdGUgYXJlYSB0byBzdG9yZSBjb25maWcgdmFsdWVzCisgKgorICogVGhpcyBmdW5jdGlvbiBkaXNhYmxlcyBhbGwgcmVndWxhdG9ycyBmb3VuZCBpbiBocHJpdi0+dGFyZ2V0X3B3cnMuCisgKi8KK3ZvaWQgYWhjaV9wbGF0Zm9ybV9kaXNhYmxlX3JlZ3VsYXRvcnMoc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBocHJpdi0+bnBvcnRzOyBpKyspIHsKKwkJaWYgKCFocHJpdi0+dGFyZ2V0X3B3cnNbaV0pCisJCQljb250aW51ZTsKKwkJcmVndWxhdG9yX2Rpc2FibGUoaHByaXYtPnRhcmdldF9wd3JzW2ldKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChhaGNpX3BsYXRmb3JtX2Rpc2FibGVfcmVndWxhdG9ycyk7CisvKioKICAqIGFoY2lfcGxhdGZvcm1fZW5hYmxlX3Jlc291cmNlcyAtIEVuYWJsZSBwbGF0Zm9ybSByZXNvdXJjZXMKICAqIEBocHJpdjogaG9zdCBwcml2YXRlIGFyZWEgdG8gc3RvcmUgY29uZmlnIHZhbHVlcwogICoKQEAgLTE2MywxMSArMjA3LDkgQEAKIHsKIAlpbnQgcmM7CiAKLQlpZiAoaHByaXYtPnRhcmdldF9wd3IpIHsKLQkJcmMgPSByZWd1bGF0b3JfZW5hYmxlKGhwcml2LT50YXJnZXRfcHdyKTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCX0KKwlyYyA9IGFoY2lfcGxhdGZvcm1fZW5hYmxlX3JlZ3VsYXRvcnMoaHByaXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCiAJcmMgPSBhaGNpX3BsYXRmb3JtX2VuYWJsZV9jbGtzKGhwcml2KTsKIAlpZiAocmMpCkBAIC0xODMsOCArMjI1LDggQEAKIAlhaGNpX3BsYXRmb3JtX2Rpc2FibGVfY2xrcyhocHJpdik7CiAKIGRpc2FibGVfcmVndWxhdG9yOgotCWlmIChocHJpdi0+dGFyZ2V0X3B3cikKLQkJcmVndWxhdG9yX2Rpc2FibGUoaHByaXYtPnRhcmdldF9wd3IpOworCWFoY2lfcGxhdGZvcm1fZGlzYWJsZV9yZWd1bGF0b3JzKGhwcml2KTsKKwogCXJldHVybiByYzsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFoY2lfcGxhdGZvcm1fZW5hYmxlX3Jlc291cmNlcyk7CkBAIC0yMDUsOCArMjQ3LDcgQEAKIAogCWFoY2lfcGxhdGZvcm1fZGlzYWJsZV9jbGtzKGhwcml2KTsKIAotCWlmIChocHJpdi0+dGFyZ2V0X3B3cikKLQkJcmVndWxhdG9yX2Rpc2FibGUoaHByaXYtPnRhcmdldF9wd3IpOworCWFoY2lfcGxhdGZvcm1fZGlzYWJsZV9yZWd1bGF0b3JzKGhwcml2KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGFoY2lfcGxhdGZvcm1fZGlzYWJsZV9yZXNvdXJjZXMpOwogCkBAIC0yMjIsNiArMjYzLDY5IEBACiAKIAlmb3IgKGMgPSAwOyBjIDwgQUhDSV9NQVhfQ0xLUyAmJiBocHJpdi0+Y2xrc1tjXTsgYysrKQogCQljbGtfcHV0KGhwcml2LT5jbGtzW2NdKTsKKwkvKgorCSAqIFRoZSByZWd1bGF0b3JzIGFyZSB0aWVkIHRvIGNoaWxkIG5vZGUgZGV2aWNlIGFuZCBub3QgdG8gdGhlCisJICogU0FUQSBkZXZpY2UgaXRzZWxmLiBTbyB3ZSBjYW4ndCB1c2UgZGV2bSBmb3IgYXV0b21hdGljYWxseQorCSAqIHJlbGVhc2luZyB0aGVtLiBXZSBoYXZlIHRvIGRvIGl0IG1hbnVhbGx5IGhlcmUuCisJICovCisJZm9yIChjID0gMDsgYyA8IGhwcml2LT5ucG9ydHM7IGMrKykKKwkJaWYgKGhwcml2LT50YXJnZXRfcHdycyAmJiBocHJpdi0+dGFyZ2V0X3B3cnNbY10pCisJCQlyZWd1bGF0b3JfcHV0KGhwcml2LT50YXJnZXRfcHdyc1tjXSk7CisKKwlrZnJlZShocHJpdi0+dGFyZ2V0X3B3cnMpOworfQorCitzdGF0aWMgaW50IGFoY2lfcGxhdGZvcm1fZ2V0X3BoeShzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2LCB1MzIgcG9ydCwKKwkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlpbnQgcmM7CisKKwlocHJpdi0+cGh5c1twb3J0XSA9IGRldm1fb2ZfcGh5X2dldChkZXYsIG5vZGUsIE5VTEwpOworCisJaWYgKCFJU19FUlIoaHByaXYtPnBoeXNbcG9ydF0pKQorCQlyZXR1cm4gMDsKKworCXJjID0gUFRSX0VSUihocHJpdi0+cGh5c1twb3J0XSk7CisJc3dpdGNoIChyYykgeworCWNhc2UgLUVOT1NZUzoKKwkJLyogTm8gUEhZIHN1cHBvcnQuIENoZWNrIGlmIFBIWSBpcyByZXF1aXJlZC4gKi8KKwkJaWYgKG9mX2ZpbmRfcHJvcGVydHkobm9kZSwgInBoeXMiLCBOVUxMKSkgeworCQkJZGV2X2VycihkZXYsCisJCQkJImNvdWxkbid0IGdldCBQSFkgaW4gbm9kZSAlczogRU5PU1lTXG4iLAorCQkJCW5vZGUtPm5hbWUpOworCQkJYnJlYWs7CisJCX0KKwljYXNlIC1FTk9ERVY6CisJCS8qIGNvbnRpbnVlIG5vcm1hbGx5ICovCisJCWhwcml2LT5waHlzW3BvcnRdID0gTlVMTDsKKwkJcmMgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LAorCQkJImNvdWxkbid0IGdldCBQSFkgaW4gbm9kZSAlczogJWRcbiIsCisJCQlub2RlLT5uYW1lLCByYyk7CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGFoY2lfcGxhdGZvcm1fZ2V0X3JlZ3VsYXRvcihzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2LCB1MzIgcG9ydCwKKwkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHJlZ3VsYXRvciAqdGFyZ2V0X3B3cjsKKwlpbnQgcmMgPSAwOworCisJdGFyZ2V0X3B3ciA9IHJlZ3VsYXRvcl9nZXRfb3B0aW9uYWwoZGV2LCAidGFyZ2V0Iik7CisKKwlpZiAoIUlTX0VSUih0YXJnZXRfcHdyKSkKKwkJaHByaXYtPnRhcmdldF9wd3JzW3BvcnRdID0gdGFyZ2V0X3B3cjsKKwllbHNlCisJCXJjID0gUFRSX0VSUih0YXJnZXRfcHdyKTsKKworCXJldHVybiByYzsKIH0KIAogLyoqCkBAIC0yNDYsNyArMzUwLDcgQEAKIAlzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2OwogCXN0cnVjdCBjbGsgKmNsazsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwotCWludCBpLCBlbmFibGVkX3BvcnRzID0gMCwgcmMgPSAtRU5PTUVNOworCWludCBpLCBzeiwgZW5hYmxlZF9wb3J0cyA9IDAsIHJjID0gLUVOT01FTSwgY2hpbGRfbm9kZXM7CiAJdTMyIG1hc2tfcG9ydF9tYXAgPSAwOwogCiAJaWYgKCFkZXZyZXNfb3Blbl9ncm91cChkZXYsIE5VTEwsIEdGUF9LRVJORUwpKQpAQCAtMjY3LDE0ICszNzEsNiBAQAogCQlnb3RvIGVycl9vdXQ7CiAJfQogCi0JaHByaXYtPnRhcmdldF9wd3IgPSBkZXZtX3JlZ3VsYXRvcl9nZXRfb3B0aW9uYWwoZGV2LCAidGFyZ2V0Iik7Ci0JaWYgKElTX0VSUihocHJpdi0+dGFyZ2V0X3B3cikpIHsKLQkJcmMgPSBQVFJfRVJSKGhwcml2LT50YXJnZXRfcHdyKTsKLQkJaWYgKHJjID09IC1FUFJPQkVfREVGRVIpCi0JCQlnb3RvIGVycl9vdXQ7Ci0JCWhwcml2LT50YXJnZXRfcHdyID0gTlVMTDsKLQl9Ci0KIAlmb3IgKGkgPSAwOyBpIDwgQUhDSV9NQVhfQ0xLUzsgaSsrKSB7CiAJCS8qCiAJCSAqIEZvciBub3cgd2UgbXVzdCB1c2UgY2xrX2dldChkZXYsIE5VTEwpIGZvciB0aGUgZmlyc3QgY2xvY2ssCkBAIC0yOTYsMTkgKzM5MiwzMyBAQAogCQlocHJpdi0+Y2xrc1tpXSA9IGNsazsKIAl9CiAKLQlocHJpdi0+bnBvcnRzID0gb2ZfZ2V0X2NoaWxkX2NvdW50KGRldi0+b2Zfbm9kZSk7CisJaHByaXYtPm5wb3J0cyA9IGNoaWxkX25vZGVzID0gb2ZfZ2V0X2NoaWxkX2NvdW50KGRldi0+b2Zfbm9kZSk7CiAKLQlpZiAoaHByaXYtPm5wb3J0cykgewotCQlocHJpdi0+cGh5cyA9IGRldm1fa3phbGxvYyhkZXYsCi0JCQkJCSAgIGhwcml2LT5ucG9ydHMgKiBzaXplb2YoKmhwcml2LT5waHlzKSwKLQkJCQkJICAgR0ZQX0tFUk5FTCk7Ci0JCWlmICghaHByaXYtPnBoeXMpIHsKLQkJCXJjID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyX291dDsKLQkJfQorCS8qCisJICogSWYgbm8gc3ViLW5vZGUgd2FzIGZvdW5kLCB3ZSBzdGlsbCBuZWVkIHRvIHNldCBucG9ydHMgdG8KKwkgKiBvbmUgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgdGhlCisJICogYWhjaV9wbGF0Zm9ybV9bZW58ZGlzXWFibGVfW3BoeXN8cmVndWxhdG9yc10gZnVuY3Rpb25zLgorCSAqLworCWlmICghY2hpbGRfbm9kZXMpCisJCWhwcml2LT5ucG9ydHMgPSAxOwogCisJc3ogPSBocHJpdi0+bnBvcnRzICogc2l6ZW9mKCpocHJpdi0+cGh5cyk7CisJaHByaXYtPnBoeXMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFocHJpdi0+cGh5cykgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKKwl9CisJc3ogPSBocHJpdi0+bnBvcnRzICogc2l6ZW9mKCpocHJpdi0+dGFyZ2V0X3B3cnMpOworCWhwcml2LT50YXJnZXRfcHdycyA9IGt6YWxsb2Moc3osIEdGUF9LRVJORUwpOworCWlmICghaHByaXYtPnRhcmdldF9wd3JzKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCWlmIChjaGlsZF9ub2RlcykgewogCQlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGRldi0+b2Zfbm9kZSwgY2hpbGQpIHsKIAkJCXUzMiBwb3J0OworCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcG9ydF9kZXYgX19tYXliZV91bnVzZWQ7CiAKIAkJCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShjaGlsZCkpCiAJCQkJY29udGludWU7CkBAIC0zMjIsMTcgKzQzMiwyNCBAQAogCQkJCWRldl93YXJuKGRldiwgImludmFsaWQgcG9ydCBudW1iZXIgJWRcbiIsIHBvcnQpOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCiAJCQltYXNrX3BvcnRfbWFwIHw9IEJJVChwb3J0KTsKIAotCQkJaHByaXYtPnBoeXNbcG9ydF0gPSBkZXZtX29mX3BoeV9nZXQoZGV2LCBjaGlsZCwgTlVMTCk7Ci0JCQlpZiAoSVNfRVJSKGhwcml2LT5waHlzW3BvcnRdKSkgewotCQkJCXJjID0gUFRSX0VSUihocHJpdi0+cGh5c1twb3J0XSk7Ci0JCQkJZGV2X2VycihkZXYsCi0JCQkJCSJjb3VsZG4ndCBnZXQgUEhZIGluIG5vZGUgJXM6ICVkXG4iLAotCQkJCQljaGlsZC0+bmFtZSwgcmMpOwotCQkJCWdvdG8gZXJyX291dDsKKyNpZmRlZiBDT05GSUdfT0ZfQUREUkVTUworCQkJb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShjaGlsZCwgTlVMTCwgTlVMTCk7CisKKwkJCXBvcnRfZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShjaGlsZCk7CisKKwkJCWlmIChwb3J0X2RldikgeworCQkJCXJjID0gYWhjaV9wbGF0Zm9ybV9nZXRfcmVndWxhdG9yKGhwcml2LCBwb3J0LAorCQkJCQkJCQkmcG9ydF9kZXYtPmRldik7CisJCQkJaWYgKHJjID09IC1FUFJPQkVfREVGRVIpCisJCQkJCWdvdG8gZXJyX291dDsKIAkJCX0KKyNlbmRpZgorCisJCQlyYyA9IGFoY2lfcGxhdGZvcm1fZ2V0X3BoeShocHJpdiwgcG9ydCwgZGV2LCBjaGlsZCk7CisJCQlpZiAocmMpCisJCQkJZ290byBlcnJfb3V0OwogCiAJCQllbmFibGVkX3BvcnRzKys7CiAJCX0KQEAgLTM0OSwzOCArNDY2LDE0IEBACiAJCSAqIElmIG5vIHN1Yi1ub2RlIHdhcyBmb3VuZCwga2VlcCB0aGlzIGZvciBkZXZpY2UgdHJlZQogCQkgKiBjb21wYXRpYmlsaXR5CiAJCSAqLwotCQlzdHJ1Y3QgcGh5ICpwaHkgPSBkZXZtX3BoeV9nZXQoZGV2LCAic2F0YS1waHkiKTsKLQkJaWYgKCFJU19FUlIocGh5KSkgewotCQkJaHByaXYtPnBoeXMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmhwcml2LT5waHlzKSwKLQkJCQkJCSAgIEdGUF9LRVJORUwpOwotCQkJaWYgKCFocHJpdi0+cGh5cykgewotCQkJCXJjID0gLUVOT01FTTsKLQkJCQlnb3RvIGVycl9vdXQ7Ci0JCQl9CisJCXJjID0gYWhjaV9wbGF0Zm9ybV9nZXRfcGh5KGhwcml2LCAwLCBkZXYsIGRldi0+b2Zfbm9kZSk7CisJCWlmIChyYykKKwkJCWdvdG8gZXJyX291dDsKIAotCQkJaHByaXYtPnBoeXNbMF0gPSBwaHk7Ci0JCQlocHJpdi0+bnBvcnRzID0gMTsKLQkJfSBlbHNlIHsKLQkJCXJjID0gUFRSX0VSUihwaHkpOwotCQkJc3dpdGNoIChyYykgewotCQkJCWNhc2UgLUVOT1NZUzoKLQkJCQkJLyogTm8gUEhZIHN1cHBvcnQuIENoZWNrIGlmIFBIWSBpcyByZXF1aXJlZC4gKi8KLQkJCQkJaWYgKG9mX2ZpbmRfcHJvcGVydHkoZGV2LT5vZl9ub2RlLCAicGh5cyIsIE5VTEwpKSB7Ci0JCQkJCQlkZXZfZXJyKGRldiwgImNvdWxkbid0IGdldCBzYXRhLXBoeTogRU5PU1lTXG4iKTsKLQkJCQkJCWdvdG8gZXJyX291dDsKLQkJCQkJfQotCQkJCWNhc2UgLUVOT0RFVjoKLQkJCQkJLyogY29udGludWUgbm9ybWFsbHkgKi8KLQkJCQkJaHByaXYtPnBoeXMgPSBOVUxMOwotCQkJCQlicmVhazsKLQotCQkJCWRlZmF1bHQ6Ci0JCQkJCWdvdG8gZXJyX291dDsKLQotCQkJfQotCQl9CisJCXJjID0gYWhjaV9wbGF0Zm9ybV9nZXRfcmVndWxhdG9yKGhwcml2LCAwLCBkZXYpOworCQlpZiAocmMgPT0gLUVQUk9CRV9ERUZFUikKKwkJCWdvdG8gZXJyX291dDsKIAl9Ci0KIAlwbV9ydW50aW1lX2VuYWJsZShkZXYpOwogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsKIAlocHJpdi0+Z290X3J1bnRpbWVfcG0gPSB0cnVlOwpAQCAtMzk5LDYgKzQ5Miw3IEBACiAgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlIHBvaW50ZXIgZm9yIHRoZSBob3N0CiAgKiBAaHByaXY6IGFoY2ktaG9zdCBwcml2YXRlIGRhdGEgZm9yIHRoZSBob3N0CiAgKiBAcGlfdGVtcGxhdGU6IHRlbXBsYXRlIGZvciB0aGUgYXRhX3BvcnRfaW5mbyB0byB1c2UKKyAqIEBzaHQ6IHNjc2lfaG9zdF90ZW1wbGF0ZSB0byB1c2Ugd2hlbiByZWdpc3RlcmluZwogICoKICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhbGwgdGhlIHVzdWFsIHN0ZXBzIG5lZWRlZCB0byBicmluZyB1cCBhbgogICogYWhjaS1wbGF0Zm9ybSBob3N0LCBub3RlIGFueSBuZWNlc3NhcnkgcmVzb3VyY2VzIChpZSBjbGtzLCBwaHlzLCBldGMuKQpAQCAtNDA5LDcgKzUwMyw4IEBACiAgKi8KIGludCBhaGNpX3BsYXRmb3JtX2luaXRfaG9zdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJICAgIHN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYsCi0JCQkgICAgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBpX3RlbXBsYXRlKQorCQkJICAgIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwaV90ZW1wbGF0ZSwKKwkJCSAgICBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBwaSA9ICpwaV90ZW1wbGF0ZTsKQEAgLTQ5Myw3ICs1ODgsNyBAQAogCWFoY2lfaW5pdF9jb250cm9sbGVyKGhvc3QpOwogCWFoY2lfcHJpbnRfaW5mbyhob3N0LCAicGxhdGZvcm0iKTsKIAotCXJldHVybiBhaGNpX2hvc3RfYWN0aXZhdGUoaG9zdCwgaXJxLCAmYWhjaV9wbGF0Zm9ybV9zaHQpOworCXJldHVybiBhaGNpX2hvc3RfYWN0aXZhdGUoaG9zdCwgaXJxLCBzaHQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYWhjaV9wbGF0Zm9ybV9pbml0X2hvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCBkMWEwNWY5Li40YjBkNWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTE3NTIsMzMgKzE3NTIsNiBAQAogfQogCiAvKioKLSAqCWF0YV9kb19zaW1wbGVfY21kIC0gZXhlY3V0ZSBzaW1wbGUgaW50ZXJuYWwgY29tbWFuZAotICoJQGRldjogRGV2aWNlIHRvIHdoaWNoIHRoZSBjb21tYW5kIGlzIHNlbnQKLSAqCUBjbWQ6IE9wY29kZSB0byBleGVjdXRlCi0gKgotICoJRXhlY3V0ZSBhICdzaW1wbGUnIGNvbW1hbmQsIHRoYXQgb25seSBjb25zaXN0cyBvZiB0aGUgb3Bjb2RlCi0gKgknY21kJyBpdHNlbGYsIHdpdGhvdXQgZmlsbGluZyBhbnkgb3RoZXIgcmVnaXN0ZXJzCi0gKgotICoJTE9DS0lORzoKLSAqCUtlcm5lbCB0aHJlYWQgY29udGV4dCAobWF5IHNsZWVwKS4KLSAqCi0gKglSRVRVUk5TOgotICoJWmVybyBvbiBzdWNjZXNzLCBBQ19FUlJfKiBtYXNrIG9uIGZhaWx1cmUKLSAqLwotdW5zaWduZWQgaW50IGF0YV9kb19zaW1wbGVfY21kKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsIHU4IGNtZCkKLXsKLQlzdHJ1Y3QgYXRhX3Rhc2tmaWxlIHRmOwotCi0JYXRhX3RmX2luaXQoZGV2LCAmdGYpOwotCi0JdGYuY29tbWFuZCA9IGNtZDsKLQl0Zi5mbGFncyB8PSBBVEFfVEZMQUdfREVWSUNFOwotCXRmLnByb3RvY29sID0gQVRBX1BST1RfTk9EQVRBOwotCi0JcmV0dXJuIGF0YV9leGVjX2ludGVybmFsKGRldiwgJnRmLCBOVUxMLCBETUFfTk9ORSwgTlVMTCwgMCwgMCk7Ci19Ci0KLS8qKgogICoJYXRhX3Bpb19uZWVkX2lvcmR5CS0JY2hlY2sgaWYgaW9yZHkgbmVlZGVkCiAgKglAYWRldjogQVRBIGRldmljZQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKaW5kZXggOGQwMGMyNi4uZDIwMjlhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMKQEAgLTE2MzUsNyArMTYzNSw2IEBACiAKIAlEUFJJTlRLKCJBVEFQSSByZXF1ZXN0IHNlbnNlXG4iKTsKIAotCS8qIEZJWE1FOiBpcyB0aGlzIG5lZWRlZD8gKi8KIAltZW1zZXQoc2Vuc2VfYnVmLCAwLCBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwogCiAJLyogaW5pdGlhbGl6ZSBzZW5zZV9idWYgd2l0aCB0aGUgZXJyb3IgcmVnaXN0ZXIsCkBAIC0yNDgyLDcgKzI0ODEsNiBAQAogCWZvciAodGFnID0gMDsgdGFnIDwgQVRBX01BWF9RVUVVRTsgdGFnKyspIHsKIAkJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyA9IF9fYXRhX3FjX2Zyb21fdGFnKGFwLCB0YWcpOwogCQlzdHJ1Y3QgYXRhX3Rhc2tmaWxlICpjbWQgPSAmcWMtPnRmLCAqcmVzID0gJnFjLT5yZXN1bHRfdGY7Ci0JCWNvbnN0IHU4ICpjZGIgPSBxYy0+Y2RiOwogCQljaGFyIGRhdGFfYnVmWzIwXSA9ICIiOwogCQljaGFyIGNkYl9idWZbNzBdID0gIiI7CiAKQEAgLTI1MTAsMTYgKzI1MDgsMTUgQEAKIAkJfQogCiAJCWlmIChhdGFfaXNfYXRhcGkocWMtPnRmLnByb3RvY29sKSkgewotCQkJaWYgKHFjLT5zY3NpY21kKQotCQkJCXNjc2lfcHJpbnRfY29tbWFuZChxYy0+c2NzaWNtZCk7Ci0JCQllbHNlCi0JCQkJc25wcmludGYoY2RiX2J1Ziwgc2l6ZW9mKGNkYl9idWYpLAotCQkJCSAiY2RiICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAgIgotCQkJCSAiJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4gICAgICAgICAiLAotCQkJCSBjZGJbMF0sIGNkYlsxXSwgY2RiWzJdLCBjZGJbM10sCi0JCQkJIGNkYls0XSwgY2RiWzVdLCBjZGJbNl0sIGNkYls3XSwKLQkJCQkgY2RiWzhdLCBjZGJbOV0sIGNkYlsxMF0sIGNkYlsxMV0sCi0JCQkJIGNkYlsxMl0sIGNkYlsxM10sIGNkYlsxNF0sIGNkYlsxNV0pOworCQkJY29uc3QgdTggKmNkYiA9IHFjLT5jZGI7CisJCQlzaXplX3QgY2RiX2xlbiA9IHFjLT5kZXYtPmNkYl9sZW47CisKKwkJCWlmIChxYy0+c2NzaWNtZCkgeworCQkJCWNkYiA9IHFjLT5zY3NpY21kLT5jbW5kOworCQkJCWNkYl9sZW4gPSBxYy0+c2NzaWNtZC0+Y21kX2xlbjsKKwkJCX0KKwkJCV9fc2NzaV9mb3JtYXRfY29tbWFuZChjZGJfYnVmLCBzaXplb2YoY2RiX2J1ZiksCisJCQkJCSAgICAgIGNkYiwgY2RiX2xlbik7CiAJCX0gZWxzZSB7CiAJCQljb25zdCBjaGFyICpkZXNjciA9IGF0YV9nZXRfY21kX2Rlc2NyaXB0KGNtZC0+Y29tbWFuZCk7CiAJCQlpZiAoZGVzY3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwppbmRleCA2YWJkMTdhLi4yODA3MjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKQEAgLTE5OTUsOCArMTk5NSw4IEBACiAKIAlWUFJJTlRLKCJFTlRFUlxuIik7CiAKLQkvKiBzZXQgc2NzaSByZW1vdmVhYmxlIChSTUIpIGJpdCBwZXIgYXRhIGJpdCAqLwotCWlmIChhdGFfaWRfcmVtb3ZlYWJsZShhcmdzLT5pZCkpCisJLyogc2V0IHNjc2kgcmVtb3ZhYmxlIChSTUIpIGJpdCBwZXIgYXRhIGJpdCAqLworCWlmIChhdGFfaWRfcmVtb3ZhYmxlKGFyZ3MtPmlkKSkKIAkJaGRyWzFdIHw9ICgxIDw8IDcpOwogCiAJaWYgKGFyZ3MtPmRldi0+Y2xhc3MgPT0gQVRBX0RFVl9aQUMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS5oIGIvZHJpdmVycy9hdGEvbGliYXRhLmgKaW5kZXggNWY0ZTBjYy4uODJlYmUyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLmgKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLmgKQEAgLTc2LDcgKzc2LDYgQEAKIAkJCQkgICAgIHN0cnVjdCBhdGFfdGFza2ZpbGUgKnRmLCBjb25zdCB1OCAqY2RiLAogCQkJCSAgICAgaW50IGRtYV9kaXIsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCiAJCQkJICAgICB1bnNpZ25lZCBpbnQgbl9lbGVtLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBhdGFfZG9fc2ltcGxlX2NtZChzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LCB1OCBjbWQpOwogZXh0ZXJuIGludCBhdGFfd2FpdF9yZWFkeShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUsCiAJCQkgIGludCAoKmNoZWNrX3JlYWR5KShzdHJ1Y3QgYXRhX2xpbmsgKmxpbmspKTsKIGV4dGVybiBpbnQgYXRhX2Rldl9yZWFkX2lkKHN0cnVjdCBhdGFfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCAqcF9jbGFzcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCmluZGV4IDQ4YWU0YjQuLmY5Y2E3MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYwpAQCAtMjc2LDEwICsyNzYsOCBAQAogCXBjaV9kZXZfcHV0KGNzNTUzMF8wKTsKIAlyZXR1cm4gMDsKIGZhaWxfcHV0OgotCWlmIChtYXN0ZXJfMCkKLQkJcGNpX2Rldl9wdXQobWFzdGVyXzApOwotCWlmIChjczU1MzBfMCkKLQkJcGNpX2Rldl9wdXQoY3M1NTMwXzApOworCXBjaV9kZXZfcHV0KG1hc3Rlcl8wKTsKKwlwY2lfZGV2X3B1dChjczU1MzBfMCk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb2ZfcGxhdGZvcm0uYyBiL2RyaXZlcnMvYXRhL3BhdGFfb2ZfcGxhdGZvcm0uYwppbmRleCBkY2M0MDhhLi5iNmI3YWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29mX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9vZl9wbGF0Zm9ybS5jCkBAIC0xNiw2ICsxNiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCisjZGVmaW5lIERSVl9OQU1FICJwYXRhX29mX3BsYXRmb3JtIgorCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBwYXRhX3BsYXRmb3JtX3NodCA9IHsKKwlBVEFfUElPX1NIVChEUlZfTkFNRSksCit9OworCiBzdGF0aWMgaW50IHBhdGFfb2ZfcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpCiB7CiAJaW50IHJldDsKQEAgLTYzLDcgKzY5LDcgQEAKIAlwaW9fbWFzayB8PSAoMSA8PCBwaW9fbW9kZSkgLSAxOwogCiAJcmV0dXJuIF9fcGF0YV9wbGF0Zm9ybV9wcm9iZSgmb2ZkZXYtPmRldiwgJmlvX3JlcywgJmN0bF9yZXMsIGlycV9yZXMsCi0JCQkJICAgICByZWdfc2hpZnQsIHBpb19tYXNrKTsKKwkJCQkgICAgIHJlZ19zaGlmdCwgcGlvX21hc2ssICZwYXRhX3BsYXRmb3JtX3NodCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBhdGFfb2ZfcGxhdGZvcm1fbWF0Y2hbXSA9IHsKQEAgLTc0LDcgKzgwLDcgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGF0YV9vZl9wbGF0Zm9ybV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAicGF0YV9vZl9wbGF0Zm9ybSIsCisJCS5uYW1lID0gRFJWX05BTUUsCiAJCS5vZl9tYXRjaF90YWJsZSA9IHBhdGFfb2ZfcGxhdGZvcm1fbWF0Y2gsCiAJfSwKIAkucHJvYmUJCT0gcGF0YV9vZl9wbGF0Zm9ybV9wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYyBiL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYwppbmRleCA0ZDA2YTVjLi5kY2E4MjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KQEAgLTYwNSw3ICs2MDYsNyBAQAogCXZvaWQgX19pb21lbSAqbW1pb19iYXNlID0gaG9zdC0+aW9tYXBbUERDX01NSU9fQkFSXTsKIAl1MzIgc2NyOwogCWxvbmcgc3RhcnRfY291bnQsIGVuZF9jb3VudDsKLQlzdHJ1Y3QgdGltZXZhbCBzdGFydF90aW1lLCBlbmRfdGltZTsKKwlrdGltZV90IHN0YXJ0X3RpbWUsIGVuZF90aW1lOwogCWxvbmcgcGxsX2Nsb2NrLCB1c2VjX2VsYXBzZWQ7CiAKIAkvKiBTdGFydCB0aGUgdGVzdCBtb2RlICovCkBAIC02MTYsMTQgKzYxNywxNCBAQAogCiAJLyogUmVhZCBjdXJyZW50IGNvdW50ZXIgdmFsdWUgKi8KIAlzdGFydF9jb3VudCA9IHBkY19yZWFkX2NvdW50ZXIoaG9zdCk7Ci0JZG9fZ2V0dGltZW9mZGF5KCZzdGFydF90aW1lKTsKKwlzdGFydF90aW1lID0ga3RpbWVfZ2V0KCk7CiAKIAkvKiBMZXQgdGhlIGNvdW50ZXIgcnVuIGZvciAxMDAgbXMuICovCiAJbWRlbGF5KDEwMCk7CiAKIAkvKiBSZWFkIHRoZSBjb3VudGVyIHZhbHVlcyBhZ2FpbiAqLwogCWVuZF9jb3VudCA9IHBkY19yZWFkX2NvdW50ZXIoaG9zdCk7Ci0JZG9fZ2V0dGltZW9mZGF5KCZlbmRfdGltZSk7CisJZW5kX3RpbWUgPSBrdGltZV9nZXQoKTsKIAogCS8qIFN0b3AgdGhlIHRlc3QgbW9kZSAqLwogCXNjciA9IGlvcmVhZDMyKG1taW9fYmFzZSArIFBEQ19TWVNfQ1RMKTsKQEAgLTYzMiw4ICs2MzMsNyBAQAogCWlvcmVhZDMyKG1taW9fYmFzZSArIFBEQ19TWVNfQ1RMKTsgLyogZmx1c2ggKi8KIAogCS8qIGNhbGN1bGF0ZSB0aGUgaW5wdXQgY2xvY2sgaW4gSHogKi8KLQl1c2VjX2VsYXBzZWQgPSAoZW5kX3RpbWUudHZfc2VjIC0gc3RhcnRfdGltZS50dl9zZWMpICogMTAwMDAwMCArCi0JCShlbmRfdGltZS50dl91c2VjIC0gc3RhcnRfdGltZS50dl91c2VjKTsKKwl1c2VjX2VsYXBzZWQgPSAobG9uZykga3RpbWVfdXNfZGVsdGEoZW5kX3RpbWUsIHN0YXJ0X3RpbWUpOwogCiAJcGxsX2Nsb2NrID0gKChzdGFydF9jb3VudCAtIGVuZF9jb3VudCkgJiAweDNmZmZmZmZmKSAvIDEwMCAqCiAJCSgxMDAwMDAwMDAgLyB1c2VjX2VsYXBzZWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wbGF0Zm9ybS5jIGIvZHJpdmVycy9hdGEvcGF0YV9wbGF0Zm9ybS5jCmluZGV4IDFlZWRmZTQuLmM1MDNkZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BsYXRmb3JtLmMKQEAgLTc4LDYgKzc4LDcgQEAKICAqCUBpcnFfcmVzOiBSZXNvdXJjZSByZXByZXNlbnRpbmcgSVJRIGFuZCBpdHMgZmxhZ3MKICAqCUBpb3BvcnRfc2hpZnQ6IEkvTyBwb3J0IHNoaWZ0CiAgKglAX19waW9fbWFzazogUElPIG1hc2sKKyAqCUBzaHQ6IHNjc2lfaG9zdF90ZW1wbGF0ZSB0byB1c2Ugd2hlbiByZWdpc3RlcmluZwogICoKICAqCVJlZ2lzdGVyIGEgcGxhdGZvcm0gYnVzIElERSBpbnRlcmZhY2UuIFN1Y2ggaW50ZXJmYWNlcyBhcmUgUElPIGFuZCB3ZQogICoJYXNzdW1lIGRvIG5vdCBzdXBwb3J0IElSUSBzaGFyaW5nLgpAQCAtOTksNyArMTAwLDggQEAKICAqLwogaW50IF9fcGF0YV9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqaW9fcmVzLAogCQkJICBzdHJ1Y3QgcmVzb3VyY2UgKmN0bF9yZXMsIHN0cnVjdCByZXNvdXJjZSAqaXJxX3JlcywKLQkJCSAgdW5zaWduZWQgaW50IGlvcG9ydF9zaGlmdCwgaW50IF9fcGlvX21hc2spCisJCQkgIHVuc2lnbmVkIGludCBpb3BvcnRfc2hpZnQsIGludCBfX3Bpb19tYXNrLAorCQkJICBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQpCiB7CiAJc3RydWN0IGF0YV9ob3N0ICpob3N0OwogCXN0cnVjdCBhdGFfcG9ydCAqYXA7CkBAIC0xNzAsNyArMTcyLDcgQEAKIAogCS8qIGFjdGl2YXRlICovCiAJcmV0dXJuIGF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIGlycSwgaXJxID8gYXRhX3NmZl9pbnRlcnJ1cHQgOiBOVUxMLAotCQkJCSBpcnFfZmxhZ3MsICZwYXRhX3BsYXRmb3JtX3NodCk7CisJCQkJIGlycV9mbGFncywgc2h0KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fcGF0YV9wbGF0Zm9ybV9wcm9iZSk7CiAKQEAgLTIxNiw3ICsyMTgsNyBAQAogCiAJcmV0dXJuIF9fcGF0YV9wbGF0Zm9ybV9wcm9iZSgmcGRldi0+ZGV2LCBpb19yZXMsIGN0bF9yZXMsIGlycV9yZXMsCiAJCQkJICAgICBwcF9pbmZvID8gcHBfaW5mby0+aW9wb3J0X3NoaWZ0IDogMCwKLQkJCQkgICAgIHBpb19tYXNrKTsKKwkJCQkgICAgIHBpb19tYXNrLCAmcGF0YV9wbGF0Zm9ybV9zaHQpOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwYXRhX3BsYXRmb3JtX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfZHdjXzQ2MGV4LmMgYi9kcml2ZXJzL2F0YS9zYXRhX2R3Y180NjBleC5jCmluZGV4IDhlODI0ODE3Li5mZGIwZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX2R3Y180NjBleC5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfZHdjXzQ2MGV4LmMKQEAgLTQ4LDYgKzQ4LDE4IEBACiAjZGVmaW5lIERSVl9OQU1FICAgICAgICAic2F0YS1kd2MiCiAjZGVmaW5lIERSVl9WRVJTSU9OICAgICAiMS4zIgogCisjaWZuZGVmIG91dF9sZTMyCisjZGVmaW5lIG91dF9sZTMyKGEsIHYpCV9fcmF3X3dyaXRlbChfX2NwdV90b19sZTMyKHYpLCAodm9pZCBfX2lvbWVtICopKGEpKQorI2VuZGlmCisKKyNpZm5kZWYgaW5fbGUzMgorI2RlZmluZSBpbl9sZTMyKGEpCV9fbGUzMl90b19jcHUoX19yYXdfcmVhZGwoKHZvaWQgX19pb21lbSAqKShhKSkpCisjZW5kaWYKKworI2lmbmRlZiBOT19JUlEKKyNkZWZpbmUgTk9fSVJRCQkwCisjZW5kaWYKKwogLyogU0FUQSBETUEgZHJpdmVyIEdsb2JhbHMgKi8KICNkZWZpbmUgRE1BX05VTV9DSEFOUwkJMQogI2RlZmluZSBETUFfTlVNX0NIQU5fUkVHUwk4CkBAIC0yNzMsNyArMjg1LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwkJLyogZ2VuZXJpYyBkZXZpY2Ugc3RydWN0ICovCiAJc3RydWN0IGF0YV9wcm9iZV9lbnQJKnBlOwkJLyogcHRyIHRvIHByb2JlLWVudCAqLwogCXN0cnVjdCBhdGFfaG9zdAkJKmhvc3Q7Ci0JdTgJCQkqcmVnX2Jhc2U7CisJdTggX19pb21lbQkJKnJlZ19iYXNlOwogCXN0cnVjdCBzYXRhX2R3Y19yZWdzCSpzYXRhX2R3Y19yZWdzOwkvKiBEVyBTeW5vcHN5cyBTQVRBIHNwZWNpZmljICovCiAJaW50CQkJaXJxX2RtYTsKIH07CkBAIC0zMjMsNyArMzM1LDkgQEAKIAlzdHJ1Y3QJZGV2aWNlCSpkd2NfZGV2OwogCWludAlkbWFfY2hhbm5lbDsKIH07Ci1zdHJ1Y3Qgc2F0YV9kd2NfaG9zdF9wcml2IGhvc3RfcHZ0OworCitzdGF0aWMgc3RydWN0IHNhdGFfZHdjX2hvc3RfcHJpdiBob3N0X3B2dDsKKwogLyoKICAqIFByb3RvdHlwZXMKICAqLwpAQCAtNTgwLDkgKzU5NCw5IEBACiAKIAlzbXNfdmFsID0gMDsKIAlkbXNfdmFsID0gMSArIGhvc3RfcHZ0LmRtYV9jaGFubmVsOwotCWRldl9kYmcoaG9zdF9wdnQuZHdjX2RldiwgIiVzOiBzZz0lcCBuZWxlbT0lZCBsbGk9JXAgZG1hX2xsaT0weCUwOHgiCi0JCSIgZG1hZHI9MHglMDh4XG4iLCBfX2Z1bmNfXywgc2csIG51bV9lbGVtcywgbGxpLCAodTMyKWRtYV9sbGksCi0JCSh1MzIpZG1hZHJfYWRkcik7CisJZGV2X2RiZyhob3N0X3B2dC5kd2NfZGV2LAorCQkiJXM6IHNnPSVwIG5lbGVtPSVkIGxsaT0lcCBkbWFfbGxpPTB4JXBhZCBkbWFkcj0weCVwXG4iLAorCQlfX2Z1bmNfXywgc2csIG51bV9lbGVtcywgbGxpLCAmZG1hX2xsaSwgZG1hZHJfYWRkcik7CiAKIAlibCA9IGdldF9idXJzdF9sZW5ndGhfZW5jb2RlKEFIQl9ETUFfQlJTVF9ERkxUKTsKIApAQCAtNzczLDcgKzc4Nyw3IEBACiB7CiAJZGV2X2RiZyhob3N0X3B2dC5kd2NfZGV2LCAiJXM6XG4iLCBfX2Z1bmNfXyk7CiAJaWYgKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MpIHsKLQkJaW91bm1hcChob3N0X3B2dC5zYXRhX2RtYV9yZWdzKTsKKwkJaW91bm1hcCgodm9pZCBfX2lvbWVtICopaG9zdF9wdnQuc2F0YV9kbWFfcmVncyk7CiAJCWhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MgPSBOVUxMOwogCX0KIApAQCAtODE4LDcgKzgzMiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCSp2YWwgPSBpbl9sZTMyKCh2b2lkICopbGluay0+YXAtPmlvYWRkci5zY3JfYWRkciArIChzY3IgKiA0KSk7CisJKnZhbCA9IGluX2xlMzIobGluay0+YXAtPmlvYWRkci5zY3JfYWRkciArIChzY3IgKiA0KSk7CiAJZGV2X2RiZyhsaW5rLT5hcC0+ZGV2LCAiJXM6IGlkPSVkIHJlZz0lZCB2YWw9dmFsPTB4JTA4eFxuIiwKIAkJX19mdW5jX18sIGxpbmstPmFwLT5wcmludF9pZCwgc2NyLCAqdmFsKTsKIApAQCAtODM0LDIxICs4NDgsMTkgQEAKIAkJCSBfX2Z1bmNfXywgc2NyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCW91dF9sZTMyKCh2b2lkICopbGluay0+YXAtPmlvYWRkci5zY3JfYWRkciArIChzY3IgKiA0KSwgdmFsKTsKKwlvdXRfbGUzMihsaW5rLT5hcC0+aW9hZGRyLnNjcl9hZGRyICsgKHNjciAqIDQpLCB2YWwpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1MzIgY29yZV9zY3JfcmVhZCh1bnNpZ25lZCBpbnQgc2NyKQogewotCXJldHVybiBpbl9sZTMyKCh2b2lkIF9faW9tZW0gKikoaG9zdF9wdnQuc2NyX2FkZHJfc3N0YXR1cykgK1wKLQkJCShzY3IgKiA0KSk7CisJcmV0dXJuIGluX2xlMzIoaG9zdF9wdnQuc2NyX2FkZHJfc3N0YXR1cyArIChzY3IgKiA0KSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcmVfc2NyX3dyaXRlKHVuc2lnbmVkIGludCBzY3IsIHUzMiB2YWwpCiB7Ci0Jb3V0X2xlMzIoKHZvaWQgX19pb21lbSAqKShob3N0X3B2dC5zY3JfYWRkcl9zc3RhdHVzKSArIChzY3IgKiA0KSwKLQkJdmFsKTsKKwlvdXRfbGUzMihob3N0X3B2dC5zY3JfYWRkcl9zc3RhdHVzICsgKHNjciAqIDQpLCB2YWwpOwogfQogCiBzdGF0aWMgdm9pZCBjbGVhcl9zZXJyb3Iodm9pZCkKQEAgLTg1Niw3ICs4NjgsNiBAQAogCXUzMiB2YWw7CiAJdmFsID0gY29yZV9zY3JfcmVhZChTQ1JfRVJST1IpOwogCWNvcmVfc2NyX3dyaXRlKFNDUl9FUlJPUiwgdmFsKTsKLQogfQogCiBzdGF0aWMgdm9pZCBjbGVhcl9pbnRlcnJ1cHRfYml0KHN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKmhzZGV2LCB1MzIgYml0KQpAQCAtMTI1NiwyNCArMTI2NywyNCBAQAogCiBzdGF0aWMgdm9pZCBzYXRhX2R3Y19zZXR1cF9wb3J0KHN0cnVjdCBhdGFfaW9wb3J0cyAqcG9ydCwgdW5zaWduZWQgbG9uZyBiYXNlKQogewotCXBvcnQtPmNtZF9hZGRyID0gKHZvaWQgKiliYXNlICsgMHgwMDsKLQlwb3J0LT5kYXRhX2FkZHIgPSAodm9pZCAqKWJhc2UgKyAweDAwOworCXBvcnQtPmNtZF9hZGRyID0gKHZvaWQgX19pb21lbSAqKWJhc2UgKyAweDAwOworCXBvcnQtPmRhdGFfYWRkciA9ICh2b2lkIF9faW9tZW0gKiliYXNlICsgMHgwMDsKIAotCXBvcnQtPmVycm9yX2FkZHIgPSAodm9pZCAqKWJhc2UgKyAweDA0OwotCXBvcnQtPmZlYXR1cmVfYWRkciA9ICh2b2lkICopYmFzZSArIDB4MDQ7CisJcG9ydC0+ZXJyb3JfYWRkciA9ICh2b2lkIF9faW9tZW0gKiliYXNlICsgMHgwNDsKKwlwb3J0LT5mZWF0dXJlX2FkZHIgPSAodm9pZCBfX2lvbWVtICopYmFzZSArIDB4MDQ7CiAKLQlwb3J0LT5uc2VjdF9hZGRyID0gKHZvaWQgKiliYXNlICsgMHgwODsKKwlwb3J0LT5uc2VjdF9hZGRyID0gKHZvaWQgX19pb21lbSAqKWJhc2UgKyAweDA4OwogCi0JcG9ydC0+bGJhbF9hZGRyID0gKHZvaWQgKiliYXNlICsgMHgwYzsKLQlwb3J0LT5sYmFtX2FkZHIgPSAodm9pZCAqKWJhc2UgKyAweDEwOwotCXBvcnQtPmxiYWhfYWRkciA9ICh2b2lkICopYmFzZSArIDB4MTQ7CisJcG9ydC0+bGJhbF9hZGRyID0gKHZvaWQgX19pb21lbSAqKWJhc2UgKyAweDBjOworCXBvcnQtPmxiYW1fYWRkciA9ICh2b2lkIF9faW9tZW0gKiliYXNlICsgMHgxMDsKKwlwb3J0LT5sYmFoX2FkZHIgPSAodm9pZCBfX2lvbWVtICopYmFzZSArIDB4MTQ7CiAKLQlwb3J0LT5kZXZpY2VfYWRkciA9ICh2b2lkICopYmFzZSArIDB4MTg7Ci0JcG9ydC0+Y29tbWFuZF9hZGRyID0gKHZvaWQgKiliYXNlICsgMHgxYzsKLQlwb3J0LT5zdGF0dXNfYWRkciA9ICh2b2lkICopYmFzZSArIDB4MWM7CisJcG9ydC0+ZGV2aWNlX2FkZHIgPSAodm9pZCBfX2lvbWVtICopYmFzZSArIDB4MTg7CisJcG9ydC0+Y29tbWFuZF9hZGRyID0gKHZvaWQgX19pb21lbSAqKWJhc2UgKyAweDFjOworCXBvcnQtPnN0YXR1c19hZGRyID0gKHZvaWQgX19pb21lbSAqKWJhc2UgKyAweDFjOwogCi0JcG9ydC0+YWx0c3RhdHVzX2FkZHIgPSAodm9pZCAqKWJhc2UgKyAweDIwOwotCXBvcnQtPmN0bF9hZGRyID0gKHZvaWQgKiliYXNlICsgMHgyMDsKKwlwb3J0LT5hbHRzdGF0dXNfYWRkciA9ICh2b2lkIF9faW9tZW0gKiliYXNlICsgMHgyMDsKKwlwb3J0LT5jdGxfYWRkciA9ICh2b2lkIF9faW9tZW0gKiliYXNlICsgMHgyMDsKIH0KIAogLyoKQEAgLTEzMTQsNyArMTMyNSw3IEBACiAJZm9yIChpID0gMDsgaSA8IFNBVEFfRFdDX1FDTURfTUFYOyBpKyspCiAJCWhzZGV2cC0+Y21kX2lzc3VlZFtpXSA9IFNBVEFfRFdDX0NNRF9JU1NVRURfTk9UOwogCi0JYXAtPmJtZG1hX3ByZCA9IDA7CS8qIHNldCB0aGVzZSBzbyBsaWJhdGEgZG9lc24ndCB1c2UgdGhlbSAqLworCWFwLT5ibWRtYV9wcmQgPSBOVUxMOwkvKiBzZXQgdGhlc2Ugc28gbGliYXRhIGRvZXNuJ3QgdXNlIHRoZW0gKi8KIAlhcC0+Ym1kbWFfcHJkX2RtYSA9IDA7CiAKIAkvKgpAQCAtMTUxMSw4ICsxNTIyLDggQEAKIAogCWRtYV9jaGFuID0gZG1hX2R3Y194ZmVyX3NldHVwKHNnLCBxYy0+bl9lbGVtLCBoc2RldnAtPmxsaXRbdGFnXSwKIAkJCQkgICAgICBoc2RldnAtPmxsaXRfZG1hW3RhZ10sCi0JCQkJICAgICAgKHZvaWQgKl9faW9tZW0pKCZoc2Rldi0+c2F0YV9kd2NfcmVncy0+XAotCQkJCSAgICAgIGRtYWRyKSwgcWMtPmRtYV9kaXIpOworCQkJCSAgICAgICh2b2lkIF9faW9tZW0gKikmaHNkZXYtPnNhdGFfZHdjX3JlZ3MtPmRtYWRyLAorCQkJCSAgICAgIHFjLT5kbWFfZGlyKTsKIAlpZiAoZG1hX2NoYW4gPCAwKSB7CiAJCWRldl9lcnIoYXAtPmRldiwgIiVzOiBkbWFfZHdjX3hmZXJfc2V0dXAgcmV0dXJucyBlcnIgJWRcbiIsCiAJCQlfX2Z1bmNfXywgZG1hX2NoYW4pOwpAQCAtMTU4NSw4ICsxNTk2LDggQEAKIAlhdGFfc2ZmX2Vycm9yX2hhbmRsZXIoYXApOwogfQogCi1pbnQgc2F0YV9kd2NfaGFyZHJlc2V0KHN0cnVjdCBhdGFfbGluayAqbGluaywgdW5zaWduZWQgaW50ICpjbGFzcywKLQkJCXVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCitzdGF0aWMgaW50IHNhdGFfZHdjX2hhcmRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3MsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGRlYWRsaW5lKQogewogCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKmhzZGV2ID0gSFNERVZfRlJPTV9BUChsaW5rLT5hcCk7CiAJaW50IHJldDsKQEAgLTE2MTgsNyArMTYyOSw3IEBACiAJICogbWF4IG9mIDEuIFRoaXMgd2lsbCBnZXQgZml4ZWQgaW4gaW4gYSBmdXR1cmUgcmVsZWFzZS4KIAkgKi8KIAkuc2dfdGFibGVzaXplCQk9IExJQkFUQV9NQVhfUFJELAotCS5jYW5fcXVldWUJCT0gQVRBX0RFRl9RVUVVRSwJLyogQVRBX01BWF9RVUVVRSAqLworCS8qIC5jYW5fcXVldWUJCT0gQVRBX01BWF9RVUVVRSwgKi8KIAkuZG1hX2JvdW5kYXJ5CQk9IEFUQV9ETUFfQk9VTkRBUlksCiB9OwogCkBAIC0xNjU1LDcgKzE2NjYsNyBAQAogCXN0cnVjdCBzYXRhX2R3Y19kZXZpY2UgKmhzZGV2OwogCXUzMiBpZHIsIHZlcnNpb25yOwogCWNoYXIgKnZlciA9IChjaGFyICopJnZlcnNpb25yOwotCXU4ICpiYXNlID0gTlVMTDsKKwl1OCBfX2lvbWVtICpiYXNlOwogCWludCBlcnIgPSAwOwogCWludCBpcnE7CiAJc3RydWN0IGF0YV9ob3N0ICpob3N0OwpAQCAtMTY2NSwxMiArMTY3NiwxMiBAQAogCXUzMiBkbWFfY2hhbjsKIAogCS8qIEFsbG9jYXRlIERXQyBTQVRBIGRldmljZSAqLwotCWhzZGV2ID0ga3phbGxvYyhzaXplb2YoKmhzZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGhzZGV2ID09IE5VTEwpIHsKLQkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImttYWxsb2MgZmFpbGVkIGZvciBoc2RldlxuIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyb3I7Ci0JfQorCWhvc3QgPSBhdGFfaG9zdF9hbGxvY19waW5mbygmb2ZkZXYtPmRldiwgcHBpLCBTQVRBX0RXQ19NQVhfUE9SVFMpOworCWhzZGV2ID0gZGV2bV9remFsbG9jKCZvZmRldi0+ZGV2LCBzaXplb2YoKmhzZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFob3N0IHx8ICFoc2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlob3N0LT5wcml2YXRlX2RhdGEgPSBoc2RldjsKIAogCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImRtYS1jaGFubmVsIiwgJmRtYV9jaGFuKSkgewogCQlkZXZfd2Fybigmb2ZkZXYtPmRldiwgIm5vIGRtYS1jaGFubmVsIHByb3BlcnR5IHNldC4iCkBAIC0xNjgwLDEyICsxNjkxLDExIEBACiAJaG9zdF9wdnQuZG1hX2NoYW5uZWwgPSBkbWFfY2hhbjsKIAogCS8qIElvcmVtYXAgU0FUQSByZWdpc3RlcnMgKi8KLQliYXNlID0gb2ZfaW9tYXAob2ZkZXYtPmRldi5vZl9ub2RlLCAwKTsKKwliYXNlID0gb2ZfaW9tYXAobnAsIDApOwogCWlmICghYmFzZSkgewogCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsZWQgZm9yIFNBVEEgcmVnaXN0ZXIiCiAJCQkiIGFkZHJlc3NcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVycm9yX2ttYWxsb2M7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAloc2Rldi0+cmVnX2Jhc2UgPSBiYXNlOwogCWRldl9kYmcoJm9mZGV2LT5kZXYsICJpb3JlbWFwIGRvbmUgZm9yIFNBVEEgcmVnaXN0ZXIgYWRkcmVzc1xuIik7CkBAIC0xNjkzLDE2ICsxNzAzLDYgQEAKIAkvKiBTeW5vcHN5cyBEV0MgU0FUQSBzcGVjaWZpYyBSZWdpc3RlcnMgKi8KIAloc2Rldi0+c2F0YV9kd2NfcmVncyA9ICh2b2lkICpfX2lvbWVtKShiYXNlICsgU0FUQV9EV0NfUkVHX09GRlNFVCk7CiAKLQkvKiBBbGxvY2F0ZSBhbmQgZmlsbCBob3N0ICovCi0JaG9zdCA9IGF0YV9ob3N0X2FsbG9jX3BpbmZvKCZvZmRldi0+ZGV2LCBwcGksIFNBVEFfRFdDX01BWF9QT1JUUyk7Ci0JaWYgKCFob3N0KSB7Ci0JCWRldl9lcnIoJm9mZGV2LT5kZXYsICJhdGFfaG9zdF9hbGxvY19waW5mbyBmYWlsZWRcbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yX2lvbWFwOwotCX0KLQotCWhvc3QtPnByaXZhdGVfZGF0YSA9IGhzZGV2OwotCiAJLyogU2V0dXAgcG9ydCAqLwogCWhvc3QtPnBvcnRzWzBdLT5pb2FkZHIuY21kX2FkZHIgPSBiYXNlOwogCWhvc3QtPnBvcnRzWzBdLT5pb2FkZHIuc2NyX2FkZHIgPSBiYXNlICsgU0FUQV9EV0NfU0NSX09GRlNFVDsKQEAgLTE3MTYsNyArMTcxNiw3IEBACiAJCSAgIGlkciwgdmVyWzBdLCB2ZXJbMV0sIHZlclsyXSk7CiAKIAkvKiBHZXQgU0FUQSBETUEgaW50ZXJydXB0IG51bWJlciAqLwotCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9mZGV2LT5kZXYub2Zfbm9kZSwgMSk7CisJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDEpOwogCWlmIChpcnEgPT0gTk9fSVJRKSB7CiAJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJubyBTQVRBIERNQSBpcnFcbiIpOwogCQllcnIgPSAtRU5PREVWOwpAQCAtMTcyNCw3ICsxNzI0LDcgQEAKIAl9CiAKIAkvKiBHZXQgcGh5c2ljYWwgU0FUQSBETUEgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzICovCi0JaG9zdF9wdnQuc2F0YV9kbWFfcmVncyA9IG9mX2lvbWFwKG9mZGV2LT5kZXYub2Zfbm9kZSwgMSk7CisJaG9zdF9wdnQuc2F0YV9kbWFfcmVncyA9ICh2b2lkICopb2ZfaW9tYXAobnAsIDEpOwogCWlmICghKGhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MpKSB7CiAJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZCBmb3IgQUhCRE1BIHJlZ2lzdGVyIgogCQkJIiBhZGRyZXNzXG4iKTsKQEAgLTE3NDQsNyArMTc0NCw3IEBACiAJc2F0YV9kd2NfZW5hYmxlX2ludGVycnVwdHMoaHNkZXYpOwogCiAJLyogR2V0IFNBVEEgaW50ZXJydXB0IG51bWJlciAqLwotCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9mZGV2LT5kZXYub2Zfbm9kZSwgMCk7CisJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogCWlmIChpcnEgPT0gTk9fSVJRKSB7CiAJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJubyBTQVRBIERNQSBpcnFcbiIpOwogCQllcnIgPSAtRU5PREVWOwpAQCAtMTc3MCw5ICsxNzcwLDYgQEAKIAlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilob3N0X3B2dC5zYXRhX2RtYV9yZWdzKTsKIGVycm9yX2lvbWFwOgogCWlvdW5tYXAoYmFzZSk7Ci1lcnJvcl9rbWFsbG9jOgotCWtmcmVlKGhzZGV2KTsKLWVycm9yOgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE3ODMsMTUgKzE3ODAsMTIgQEAKIAlzdHJ1Y3Qgc2F0YV9kd2NfZGV2aWNlICpoc2RldiA9IGhvc3QtPnByaXZhdGVfZGF0YTsKIAogCWF0YV9ob3N0X2RldGFjaChob3N0KTsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCS8qIEZyZWUgU0FUQSBETUEgcmVzb3VyY2VzICovCiAJZG1hX2R3Y19leGl0KGhzZGV2KTsKIAogCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWhvc3RfcHZ0LnNhdGFfZG1hX3JlZ3MpOwogCWlvdW5tYXAoaHNkZXYtPnJlZ19iYXNlKTsKLQlrZnJlZShoc2Rldik7Ci0Ja2ZyZWUoaG9zdCk7CiAJZGV2X2RiZygmb2ZkZXYtPmRldiwgImRvbmVcbiIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCmluZGV4IGY5YTBlMzQuLmY4YzMzZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYworKysgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKQEAgLTQxODUsOCArNDE4NSw3IEBACiAJCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaHByaXYtPnBvcnRfY2xrc1twb3J0XSk7CiAJCQljbGtfcHV0KGhwcml2LT5wb3J0X2Nsa3NbcG9ydF0pOwogCQl9Ci0JCWlmIChocHJpdi0+cG9ydF9waHlzW3BvcnRdKQotCQkJcGh5X3Bvd2VyX29mZihocHJpdi0+cG9ydF9waHlzW3BvcnRdKTsKKwkJcGh5X3Bvd2VyX29mZihocHJpdi0+cG9ydF9waHlzW3BvcnRdKTsKIAl9CiAKIAlyZXR1cm4gcmM7CkBAIC00MjE2LDggKzQyMTUsNyBAQAogCQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhwcml2LT5wb3J0X2Nsa3NbcG9ydF0pOwogCQkJY2xrX3B1dChocHJpdi0+cG9ydF9jbGtzW3BvcnRdKTsKIAkJfQotCQlpZiAoaHByaXYtPnBvcnRfcGh5c1twb3J0XSkKLQkJCXBoeV9wb3dlcl9vZmYoaHByaXYtPnBvcnRfcGh5c1twb3J0XSk7CisJCXBoeV9wb3dlcl9vZmYoaHByaXYtPnBvcnRfcGh5c1twb3J0XSk7CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvc2F0YV9yY2FyLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3JjYXIuYwppbmRleCBjYjBkMmU2NC4uZDQ5YTUxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9yY2FyLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9yY2FyLmMKQEAgLTIsOCArMiw4IEBACiAgKiBSZW5lc2FzIFItQ2FyIFNBVEEgZHJpdmVyCiAgKgogICogQXV0aG9yOiBWbGFkaW1pciBCYXJpbm92IDxzb3VyY2VAY29nZW50ZW1iZWRkZWQuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEzIENvZ2VudCBFbWJlZGRlZCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEzIFJlbmVzYXMgU29sdXRpb25zIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBDb2dlbnQgRW1iZWRkZWQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IFJlbmVzYXMgU29sdXRpb25zIENvcnAuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTk5Miw5ICs5OTIsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzYXRhX3JjYXJfcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNhdGFfcmNhcl9wcml2ICpwcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCisJY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmNsayk7CisKKwlzYXRhX3JjYXJfc2V0dXBfcG9ydChob3N0KTsKKworCS8qIGluaXRpYWxpemUgaG9zdCBjb250cm9sbGVyICovCisJc2F0YV9yY2FyX2luaXRfY29udHJvbGxlcihob3N0KTsKKworCWF0YV9ob3N0X3Jlc3VtZShob3N0KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc2F0YV9yY2FyX3BtX29wcyA9IHsKIAkuc3VzcGVuZAk9IHNhdGFfcmNhcl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2F0YV9yY2FyX3Jlc3VtZSwKKwkuZnJlZXplCQk9IHNhdGFfcmNhcl9zdXNwZW5kLAorCS50aGF3CQk9IHNhdGFfcmNhcl9yZXN1bWUsCisJLnBvd2Vyb2ZmCT0gc2F0YV9yY2FyX3N1c3BlbmQsCisJLnJlc3RvcmUJPSBzYXRhX3JjYXJfcmVzdG9yZSwKIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZW5pLmMgYi9kcml2ZXJzL2F0bS9lbmkuYwppbmRleCBjN2ZhYjNlLi42MzM5ZWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9lbmkuYworKysgYi9kcml2ZXJzL2F0bS9lbmkuYwpAQCAtMzU0LDkgKzM1NCw5IEBACiAJZW5pX3ZjYyA9IEVOSV9WQ0ModmNjKTsKIAlwYWRkciA9IDA7IC8qIEdDQywgc2h1dCB1cCAqLwogCWlmIChza2IpIHsKLQkJcGFkZHIgPSBwY2lfbWFwX3NpbmdsZShlbmlfZGV2LT5wY2lfZGV2LHNrYi0+ZGF0YSxza2ItPmxlbiwKLQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IoZW5pX2Rldi0+cGNpX2RldiwgcGFkZHIpKQorCQlwYWRkciA9IGRtYV9tYXBfc2luZ2xlKCZlbmlfZGV2LT5wY2lfZGV2LT5kZXYsc2tiLT5kYXRhLHNrYi0+bGVuLAorCQkJCSAgICAgICBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJmVuaV9kZXYtPnBjaV9kZXYtPmRldiwgcGFkZHIpKQogCQkJZ290byBkbWFfbWFwX2Vycm9yOwogCQlFTklfUFJWX1BBRERSKHNrYikgPSBwYWRkcjsKIAkJaWYgKHBhZGRyICYgMykKQEAgLTQ4MSw4ICs0ODEsOCBAQAogCiB0cm91YmxlOgogCWlmIChwYWRkcikKLQkJcGNpX3VubWFwX3NpbmdsZShlbmlfZGV2LT5wY2lfZGV2LHBhZGRyLHNrYi0+bGVuLAotCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZSgmZW5pX2Rldi0+cGNpX2Rldi0+ZGV2LHBhZGRyLHNrYi0+bGVuLAorCQkJCSBETUFfRlJPTV9ERVZJQ0UpOwogZG1hX21hcF9lcnJvcjoKIAlpZiAoc2tiKSBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCXJldHVybiAtMTsKQEAgLTc1OCw4ICs3NTgsOCBAQAogCQl9CiAJCWVuaV92Y2MtPnJ4aW5nLS07CiAJCWVuaV92Y2MtPnJ4X3BvcyA9IEVOSV9QUlZfUE9TKHNrYikgJiAoZW5pX3ZjYy0+d29yZHMtMSk7Ci0JCXBjaV91bm1hcF9zaW5nbGUoZW5pX2Rldi0+cGNpX2RldixFTklfUFJWX1BBRERSKHNrYiksc2tiLT5sZW4sCi0JCSAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZSgmZW5pX2Rldi0+cGNpX2Rldi0+ZGV2LEVOSV9QUlZfUEFERFIoc2tiKSxza2ItPmxlbiwKKwkJCSAgICAgICAgIERNQV9UT19ERVZJQ0UpOwogCQlpZiAoIXNrYi0+bGVuKSBkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCQllbHNlIHsKIAkJCUVWRU5UKCJwdXNoaW5nIChsZW49JWxkKVxuIixza2ItPmxlbiwwKTsKQEAgLTExMTIsOCArMTExMiw4IEBACiAJCSAgICB2Y2MtPmRldi0+bnVtYmVyKTsKIAkJcmV0dXJuIGVucV9qYW07CiAJfQotCXBhZGRyID0gcGNpX21hcF9zaW5nbGUoZW5pX2Rldi0+cGNpX2Rldixza2ItPmRhdGEsc2tiLT5sZW4sCi0JICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCXBhZGRyID0gZG1hX21hcF9zaW5nbGUoJmVuaV9kZXYtPnBjaV9kZXYtPmRldixza2ItPmRhdGEsc2tiLT5sZW4sCisJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CiAJRU5JX1BSVl9QQUREUihza2IpID0gcGFkZHI7CiAJLyogcHJlcGFyZSBETUEgcXVldWUgZW50cmllcyAqLwogCWogPSAwOwpAQCAtMTIyNiw4ICsxMjI2LDggQEAKIAkJCWJyZWFrOwogCQl9CiAJCUVOSV9WQ0ModmNjKS0+dHhpbmcgLT0gRU5JX1BSVl9TSVpFKHNrYik7Ci0JCXBjaV91bm1hcF9zaW5nbGUoZW5pX2Rldi0+cGNpX2RldixFTklfUFJWX1BBRERSKHNrYiksc2tiLT5sZW4sCi0JCSAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZSgmZW5pX2Rldi0+cGNpX2Rldi0+ZGV2LEVOSV9QUlZfUEFERFIoc2tiKSxza2ItPmxlbiwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CiAJCWlmICh2Y2MtPnBvcCkgdmNjLT5wb3AodmNjLHNrYik7CiAJCWVsc2UgZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAkJYXRvbWljX2luYygmdmNjLT5zdGF0cy0+dHgpOwpAQCAtMjI0MCwxMyArMjI0MCwxOCBAQAogCWlmIChyYyA8IDApCiAJCWdvdG8gb3V0OwogCisJcmMgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwY2lfZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMikpOworCWlmIChyYyA8IDApCisJCWdvdG8gb3V0OworCiAJcmMgPSAtRU5PTUVNOwogCWVuaV9kZXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZW5pX2RldiksIEdGUF9LRVJORUwpOwogCWlmICghZW5pX2RldikKIAkJZ290byBlcnJfZGlzYWJsZTsKIAogCXplcm8gPSAmZW5pX2Rldi0+emVybzsKLQl6ZXJvLT5hZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGNpX2RldiwgRU5JX1pFUk9FU19TSVpFLCAmemVyby0+ZG1hKTsKKwl6ZXJvLT5hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwY2lfZGV2LT5kZXYsCisJCQkJCUVOSV9aRVJPRVNfU0laRSwgJnplcm8tPmRtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF6ZXJvLT5hZGRyKQogCQlnb3RvIGVycl9rZnJlZTsKIApAQCAtMjI3Nyw3ICsyMjgyLDcgQEAKIGVycl91bnJlZ2lzdGVyOgogCWF0bV9kZXZfZGVyZWdpc3RlcihkZXYpOwogZXJyX2ZyZWVfY29uc2lzdGVudDoKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHBjaV9kZXYsIEVOSV9aRVJPRVNfU0laRSwgemVyby0+YWRkciwgemVyby0+ZG1hKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcGNpX2Rldi0+ZGV2LCBFTklfWkVST0VTX1NJWkUsIHplcm8tPmFkZHIsIHplcm8tPmRtYSk7CiBlcnJfa2ZyZWU6CiAJa2ZyZWUoZW5pX2Rldik7CiBlcnJfZGlzYWJsZToKQEAgLTIzMDIsNyArMjMwNyw3IEBACiAKIAllbmlfZG9fcmVsZWFzZShkZXYpOwogCWF0bV9kZXZfZGVyZWdpc3RlcihkZXYpOwotCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgRU5JX1pFUk9FU19TSVpFLCB6ZXJvLT5hZGRyLCB6ZXJvLT5kbWEpOworCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIEVOSV9aRVJPRVNfU0laRSwgemVyby0+YWRkciwgemVyby0+ZG1hKTsKIAlrZnJlZShlZCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYyBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKaW5kZXggZDVkOWVhZi4uNzVkZGU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYworKysgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCkBAIC00MjUsNyArNDI1LDcgQEAKIHN0YXRpYyB1MzIKIGZvcmUyMDBlX3BjYV9kbWFfbWFwKHN0cnVjdCBmb3JlMjAwZSogZm9yZTIwMGUsIHZvaWQqIHZpcnRfYWRkciwgaW50IHNpemUsIGludCBkaXJlY3Rpb24pCiB7Ci0gICAgdTMyIGRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUoKHN0cnVjdCBwY2lfZGV2Kilmb3JlMjAwZS0+YnVzX2RldiwgdmlydF9hZGRyLCBzaXplLCBkaXJlY3Rpb24pOworICAgIHUzMiBkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKCYoKHN0cnVjdCBwY2lfZGV2ICopIGZvcmUyMDBlLT5idXNfZGV2KS0+ZGV2LCB2aXJ0X2FkZHIsIHNpemUsIGRpcmVjdGlvbik7CiAKICAgICBEUFJJTlRLKDMsICJQQ0kgRFZNQSBtYXBwaW5nOiB2aXJ0X2FkZHIgPSAweCVwLCBzaXplID0gJWQsIGRpcmVjdGlvbiA9ICVkLCAgLS0+IGRtYV9hZGRyID0gMHglMDh4XG4iLAogCSAgICB2aXJ0X2FkZHIsIHNpemUsIGRpcmVjdGlvbiwgZG1hX2FkZHIpOwpAQCAtNDQwLDcgKzQ0MCw3IEBACiAgICAgRFBSSU5USygzLCAiUENJIERWTUEgdW5tYXBwaW5nOiBkbWFfYWRkciA9IDB4JTA4eCwgc2l6ZSA9ICVkLCBkaXJlY3Rpb24gPSAlZFxuIiwKIAkgICAgZG1hX2FkZHIsIHNpemUsIGRpcmVjdGlvbik7CiAKLSAgICBwY2lfdW5tYXBfc2luZ2xlKChzdHJ1Y3QgcGNpX2RldiopZm9yZTIwMGUtPmJ1c19kZXYsIGRtYV9hZGRyLCBzaXplLCBkaXJlY3Rpb24pOworICAgIGRtYV91bm1hcF9zaW5nbGUoJigoc3RydWN0IHBjaV9kZXYgKikgZm9yZTIwMGUtPmJ1c19kZXYpLT5kZXYsIGRtYV9hZGRyLCBzaXplLCBkaXJlY3Rpb24pOwogfQogCiAKQEAgLTQ0OSw3ICs0NDksNyBAQAogewogICAgIERQUklOVEsoMywgIlBDSSBEVk1BIHN5bmM6IGRtYV9hZGRyID0gMHglMDh4LCBzaXplID0gJWQsIGRpcmVjdGlvbiA9ICVkXG4iLCBkbWFfYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKIAotICAgIHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSgoc3RydWN0IHBjaV9kZXYqKWZvcmUyMDBlLT5idXNfZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKKyAgICBkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgmKChzdHJ1Y3QgcGNpX2RldiAqKSBmb3JlMjAwZS0+YnVzX2RldiktPmRldiwgZG1hX2FkZHIsIHNpemUsIGRpcmVjdGlvbik7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC00NTcsNyArNDU3LDcgQEAKIHsKICAgICBEUFJJTlRLKDMsICJQQ0kgRFZNQSBzeW5jOiBkbWFfYWRkciA9IDB4JTA4eCwgc2l6ZSA9ICVkLCBkaXJlY3Rpb24gPSAlZFxuIiwgZG1hX2FkZHIsIHNpemUsIGRpcmVjdGlvbik7CiAKLSAgICBwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoKHN0cnVjdCBwY2lfZGV2Kilmb3JlMjAwZS0+YnVzX2RldiwgZG1hX2FkZHIsIHNpemUsIGRpcmVjdGlvbik7CisgICAgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoJigoc3RydWN0IHBjaV9kZXYgKikgZm9yZTIwMGUtPmJ1c19kZXYpLT5kZXYsIGRtYV9hZGRyLCBzaXplLCBkaXJlY3Rpb24pOwogfQogCiAKQEAgLTQ3MCw5ICs0NzAsMTAgQEAKIHsKICAgICAvKiByZXR1cm5lZCBjaHVua3MgYXJlIHBhZ2UtYWxpZ25lZCAqLwogICAgIGNodW5rLT5hbGxvY19zaXplID0gc2l6ZSAqIG5icjsKLSAgICBjaHVuay0+YWxsb2NfYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KChzdHJ1Y3QgcGNpX2RldiopZm9yZTIwMGUtPmJ1c19kZXYsCi0JCQkJCSAgICAgY2h1bmstPmFsbG9jX3NpemUsCi0JCQkJCSAgICAgJmNodW5rLT5kbWFfYWRkcik7CisgICAgY2h1bmstPmFsbG9jX2FkZHIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJigoc3RydWN0IHBjaV9kZXYgKikgZm9yZTIwMGUtPmJ1c19kZXYpLT5kZXYsCisJCQkJCSAgIGNodW5rLT5hbGxvY19zaXplLAorCQkJCQkgICAmY2h1bmstPmRtYV9hZGRyLAorCQkJCQkgICBHRlBfS0VSTkVMKTsKICAgICAKICAgICBpZiAoKGNodW5rLT5hbGxvY19hZGRyID09IE5VTEwpIHx8IChjaHVuay0+ZG1hX2FkZHIgPT0gMCkpCiAJcmV0dXJuIC1FTk9NRU07CkBAIC00ODgsNyArNDg5LDcgQEAKIHN0YXRpYyB2b2lkCiBmb3JlMjAwZV9wY2FfZG1hX2NodW5rX2ZyZWUoc3RydWN0IGZvcmUyMDBlKiBmb3JlMjAwZSwgc3RydWN0IGNodW5rKiBjaHVuaykKIHsKLSAgICBwY2lfZnJlZV9jb25zaXN0ZW50KChzdHJ1Y3QgcGNpX2RldiopZm9yZTIwMGUtPmJ1c19kZXYsCisgICAgZG1hX2ZyZWVfY29oZXJlbnQoJigoc3RydWN0IHBjaV9kZXYgKikgZm9yZTIwMGUtPmJ1c19kZXYpLT5kZXYsCiAJCQljaHVuay0+YWxsb2Nfc2l6ZSwKIAkJCWNodW5rLT5hbGxvY19hZGRyLAogCQkJY2h1bmstPmRtYV9hZGRyKTsKQEAgLTI3MDcsNiArMjcwOCwxMSBAQAogCWVyciA9IC1FSU5WQUw7CiAJZ290byBvdXQ7CiAgICAgfQorCisgICAgaWYgKGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoJnBjaV9kZXYtPmRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKKwllcnIgPSAtRUlOVkFMOworCWdvdG8gb3V0OworICAgIH0KICAgICAKICAgICBmb3JlMjAwZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmb3JlMjAwZSksIEdGUF9LRVJORUwpOwogICAgIGlmIChmb3JlMjAwZSA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9oZS5jIGIvZHJpdmVycy9hdG0vaGUuYwppbmRleCBjMzk3MDJiLi45M2RjYTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9oZS5jCisrKyBiL2RyaXZlcnMvYXRtL2hlLmMKQEAgLTM1OSw3ICszNTksNyBAQAogCiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaV9kZXYpKQogCQlyZXR1cm4gLUVJTzsKLQlpZiAocGNpX3NldF9kbWFfbWFzayhwY2lfZGV2LCBETUFfQklUX01BU0soMzIpKSAhPSAwKSB7CisJaWYgKGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoJnBjaV9kZXYtPmRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJoZTogbm8gc3VpdGFibGUgZG1hIGF2YWlsYWJsZVxuIik7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gaW5pdF9vbmVfZmFpbHVyZTsKQEAgLTUzMyw5ICs1MzMsOSBAQAogCiBzdGF0aWMgaW50IGhlX2luaXRfdHBkcnEoc3RydWN0IGhlX2RldiAqaGVfZGV2KQogewotCWhlX2Rldi0+dHBkcnFfYmFzZSA9IHBjaV96YWxsb2NfY29uc2lzdGVudChoZV9kZXYtPnBjaV9kZXYsCi0JCQkJCQkgICBDT05GSUdfVFBEUlFfU0laRSAqIHNpemVvZihzdHJ1Y3QgaGVfdHBkcnEpLAotCQkJCQkJICAgJmhlX2Rldi0+dHBkcnFfcGh5cyk7CisJaGVfZGV2LT50cGRycV9iYXNlID0gZG1hX3phbGxvY19jb2hlcmVudCgmaGVfZGV2LT5wY2lfZGV2LT5kZXYsCisJCQkJCQkgQ09ORklHX1RQRFJRX1NJWkUgKiBzaXplb2Yoc3RydWN0IGhlX3RwZHJxKSwKKwkJCQkJCSAmaGVfZGV2LT50cGRycV9waHlzLCBHRlBfS0VSTkVMKTsKIAlpZiAoaGVfZGV2LT50cGRycV9iYXNlID09IE5VTEwpIHsKIAkJaHByaW50aygiZmFpbGVkIHRvIGFsbG9jIHRwZHJxXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC03OTYsMTYgKzc5NiwxNiBAQAogCX0KIAogCS8qIGxhcmdlIGJ1ZmZlciBwb29sICovCi0JaGVfZGV2LT5yYnBsX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoInJicGwiLCBoZV9kZXYtPnBjaV9kZXYsCisJaGVfZGV2LT5yYnBsX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoInJicGwiLCAmaGVfZGV2LT5wY2lfZGV2LT5kZXYsCiAJCQkJCSAgICBDT05GSUdfUkJQTF9CVUZTSVpFLCA2NCwgMCk7CiAJaWYgKGhlX2Rldi0+cmJwbF9wb29sID09IE5VTEwpIHsKIAkJaHByaW50aygidW5hYmxlIHRvIGNyZWF0ZSByYnBsIHBvb2xcbiIpOwogCQlnb3RvIG91dF9mcmVlX3JicGxfdmlydDsKIAl9CiAKLQloZV9kZXYtPnJicGxfYmFzZSA9IHBjaV96YWxsb2NfY29uc2lzdGVudChoZV9kZXYtPnBjaV9kZXYsCi0JCQkJCQkgIENPTkZJR19SQlBMX1NJWkUgKiBzaXplb2Yoc3RydWN0IGhlX3JicCksCi0JCQkJCQkgICZoZV9kZXYtPnJicGxfcGh5cyk7CisJaGVfZGV2LT5yYnBsX2Jhc2UgPSBkbWFfemFsbG9jX2NvaGVyZW50KCZoZV9kZXYtPnBjaV9kZXYtPmRldiwKKwkJCQkJCUNPTkZJR19SQlBMX1NJWkUgKiBzaXplb2Yoc3RydWN0IGhlX3JicCksCisJCQkJCQkmaGVfZGV2LT5yYnBsX3BoeXMsIEdGUF9LRVJORUwpOwogCWlmIChoZV9kZXYtPnJicGxfYmFzZSA9PSBOVUxMKSB7CiAJCWhwcmludGsoImZhaWxlZCB0byBhbGxvYyByYnBsX2Jhc2VcbiIpOwogCQlnb3RvIG91dF9kZXN0cm95X3JicGxfcG9vbDsKQEAgLTgxNSw3ICs4MTUsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IENPTkZJR19SQlBMX1NJWkU7ICsraSkgewogCi0JCWhlYiA9IHBjaV9wb29sX2FsbG9jKGhlX2Rldi0+cmJwbF9wb29sLCBHRlBfS0VSTkVMfEdGUF9ETUEsICZtYXBwaW5nKTsKKwkJaGViID0gZG1hX3Bvb2xfYWxsb2MoaGVfZGV2LT5yYnBsX3Bvb2wsIEdGUF9LRVJORUwsICZtYXBwaW5nKTsKIAkJaWYgKCFoZWIpCiAJCQlnb3RvIG91dF9mcmVlX3JicGw7CiAJCWhlYi0+bWFwcGluZyA9IG1hcHBpbmc7CkBAIC04NDIsOSArODQyLDkgQEAKIAogCS8qIHJ4IGJ1ZmZlciByZWFkeSBxdWV1ZSAqLwogCi0JaGVfZGV2LT5yYnJxX2Jhc2UgPSBwY2lfemFsbG9jX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LAotCQkJCQkJICBDT05GSUdfUkJSUV9TSVpFICogc2l6ZW9mKHN0cnVjdCBoZV9yYnJxKSwKLQkJCQkJCSAgJmhlX2Rldi0+cmJycV9waHlzKTsKKwloZV9kZXYtPnJicnFfYmFzZSA9IGRtYV96YWxsb2NfY29oZXJlbnQoJmhlX2Rldi0+cGNpX2Rldi0+ZGV2LAorCQkJCQkJQ09ORklHX1JCUlFfU0laRSAqIHNpemVvZihzdHJ1Y3QgaGVfcmJycSksCisJCQkJCQkmaGVfZGV2LT5yYnJxX3BoeXMsIEdGUF9LRVJORUwpOwogCWlmIChoZV9kZXYtPnJicnFfYmFzZSA9PSBOVUxMKSB7CiAJCWhwcmludGsoImZhaWxlZCB0byBhbGxvY2F0ZSByYnJxXG4iKTsKIAkJZ290byBvdXRfZnJlZV9yYnBsOwpAQCAtODY2LDkgKzg2Niw5IEBACiAKIAkvKiB0eCBidWZmZXIgcmVhZHkgcXVldWUgKi8KIAotCWhlX2Rldi0+dGJycV9iYXNlID0gcGNpX3phbGxvY19jb25zaXN0ZW50KGhlX2Rldi0+cGNpX2RldiwKLQkJCQkJCSAgQ09ORklHX1RCUlFfU0laRSAqIHNpemVvZihzdHJ1Y3QgaGVfdGJycSksCi0JCQkJCQkgICZoZV9kZXYtPnRicnFfcGh5cyk7CisJaGVfZGV2LT50YnJxX2Jhc2UgPSBkbWFfemFsbG9jX2NvaGVyZW50KCZoZV9kZXYtPnBjaV9kZXYtPmRldiwKKwkJCQkJCUNPTkZJR19UQlJRX1NJWkUgKiBzaXplb2Yoc3RydWN0IGhlX3RicnEpLAorCQkJCQkJJmhlX2Rldi0+dGJycV9waHlzLCBHRlBfS0VSTkVMKTsKIAlpZiAoaGVfZGV2LT50YnJxX2Jhc2UgPT0gTlVMTCkgewogCQlocHJpbnRrKCJmYWlsZWQgdG8gYWxsb2NhdGUgdGJycVxuIik7CiAJCWdvdG8gb3V0X2ZyZWVfcmJwcV9iYXNlOwpAQCAtODg0LDE4ICs4ODQsMTggQEAKIAlyZXR1cm4gMDsKIAogb3V0X2ZyZWVfcmJwcV9iYXNlOgotCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LCBDT05GSUdfUkJSUV9TSVpFICoKLQkJCXNpemVvZihzdHJ1Y3QgaGVfcmJycSksIGhlX2Rldi0+cmJycV9iYXNlLAotCQkJaGVfZGV2LT5yYnJxX3BoeXMpOworCWRtYV9mcmVlX2NvaGVyZW50KCZoZV9kZXYtPnBjaV9kZXYtPmRldiwgQ09ORklHX1JCUlFfU0laRSAqCisJCQkgIHNpemVvZihzdHJ1Y3QgaGVfcmJycSksIGhlX2Rldi0+cmJycV9iYXNlLAorCQkJICBoZV9kZXYtPnJicnFfcGh5cyk7CiBvdXRfZnJlZV9yYnBsOgogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShoZWIsIG5leHQsICZoZV9kZXYtPnJicGxfb3V0c3RhbmRpbmcsIGVudHJ5KQotCQlwY2lfcG9vbF9mcmVlKGhlX2Rldi0+cmJwbF9wb29sLCBoZWIsIGhlYi0+bWFwcGluZyk7CisJCWRtYV9wb29sX2ZyZWUoaGVfZGV2LT5yYnBsX3Bvb2wsIGhlYiwgaGViLT5tYXBwaW5nKTsKIAotCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LCBDT05GSUdfUkJQTF9TSVpFICoKLQkJCXNpemVvZihzdHJ1Y3QgaGVfcmJwKSwgaGVfZGV2LT5yYnBsX2Jhc2UsCi0JCQloZV9kZXYtPnJicGxfcGh5cyk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmhlX2Rldi0+cGNpX2Rldi0+ZGV2LCBDT05GSUdfUkJQTF9TSVpFICoKKwkJCSAgc2l6ZW9mKHN0cnVjdCBoZV9yYnApLCBoZV9kZXYtPnJicGxfYmFzZSwKKwkJCSAgaGVfZGV2LT5yYnBsX3BoeXMpOwogb3V0X2Rlc3Ryb3lfcmJwbF9wb29sOgotCXBjaV9wb29sX2Rlc3Ryb3koaGVfZGV2LT5yYnBsX3Bvb2wpOworCWRtYV9wb29sX2Rlc3Ryb3koaGVfZGV2LT5yYnBsX3Bvb2wpOwogb3V0X2ZyZWVfcmJwbF92aXJ0OgogCWtmcmVlKGhlX2Rldi0+cmJwbF92aXJ0KTsKIG91dF9mcmVlX3JicGxfdGFibGU6CkBAIC05MTEsOCArOTExLDExIEBACiAJLyogMi45LjMuNSAgdGFpbCBvZmZzZXQgZm9yIGVhY2ggaW50ZXJydXB0IHF1ZXVlIGlzIGxvY2F0ZWQgYWZ0ZXIgdGhlCiAJCSAgICBlbmQgb2YgdGhlIGludGVycnVwdCBxdWV1ZSAqLwogCi0JaGVfZGV2LT5pcnFfYmFzZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGhlX2Rldi0+cGNpX2RldiwKLQkJCShDT05GSUdfSVJRX1NJWkUrMSkgKiBzaXplb2Yoc3RydWN0IGhlX2lycSksICZoZV9kZXYtPmlycV9waHlzKTsKKwloZV9kZXYtPmlycV9iYXNlID0gZG1hX3phbGxvY19jb2hlcmVudCgmaGVfZGV2LT5wY2lfZGV2LT5kZXYsCisJCQkJCSAgICAgICAoQ09ORklHX0lSUV9TSVpFICsgMSkKKwkJCQkJICAgICAgICogc2l6ZW9mKHN0cnVjdCBoZV9pcnEpLAorCQkJCQkgICAgICAgJmhlX2Rldi0+aXJxX3BoeXMsCisJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoaGVfZGV2LT5pcnFfYmFzZSA9PSBOVUxMKSB7CiAJCWhwcmludGsoImZhaWxlZCB0byBhbGxvY2F0ZSBpcnFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE0MTksMTAgKzE0MjIsMTAgQEAKIAogCWhlX2luaXRfdHBkcnEoaGVfZGV2KTsKIAotCWhlX2Rldi0+dHBkX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoInRwZCIsIGhlX2Rldi0+cGNpX2RldiwKLQkJc2l6ZW9mKHN0cnVjdCBoZV90cGQpLCBUUERfQUxJR05NRU5ULCAwKTsKKwloZV9kZXYtPnRwZF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlKCJ0cGQiLCAmaGVfZGV2LT5wY2lfZGV2LT5kZXYsCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgaGVfdHBkKSwgVFBEX0FMSUdOTUVOVCwgMCk7CiAJaWYgKGhlX2Rldi0+dHBkX3Bvb2wgPT0gTlVMTCkgewotCQlocHJpbnRrKCJ1bmFibGUgdG8gY3JlYXRlIHRwZCBwY2lfcG9vbFxuIik7CisJCWhwcmludGsoInVuYWJsZSB0byBjcmVhdGUgdHBkIGRtYV9wb29sXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07ICAgICAgICAgCiAJfQogCkBAIC0xNDU5LDkgKzE0NjIsOSBAQAogCiAJLyogaG9zdCBzdGF0dXMgcGFnZSAqLwogCi0JaGVfZGV2LT5oc3AgPSBwY2lfemFsbG9jX2NvbnNpc3RlbnQoaGVfZGV2LT5wY2lfZGV2LAotCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBoZV9oc3ApLAotCQkJCQkgICAgJmhlX2Rldi0+aHNwX3BoeXMpOworCWhlX2Rldi0+aHNwID0gZG1hX3phbGxvY19jb2hlcmVudCgmaGVfZGV2LT5wY2lfZGV2LT5kZXYsCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCBoZV9oc3ApLAorCQkJCQkgICZoZV9kZXYtPmhzcF9waHlzLCBHRlBfS0VSTkVMKTsKIAlpZiAoaGVfZGV2LT5oc3AgPT0gTlVMTCkgewogCQlocHJpbnRrKCJmYWlsZWQgdG8gYWxsb2NhdGUgaG9zdCBzdGF0dXMgcGFnZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTU1OCw0MSArMTU2MSw0MSBAQAogCQlmcmVlX2lycShoZV9kZXYtPmlycSwgaGVfZGV2KTsKIAogCWlmIChoZV9kZXYtPmlycV9iYXNlKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGhlX2Rldi0+cGNpX2RldiwgKENPTkZJR19JUlFfU0laRSsxKQotCQkJKiBzaXplb2Yoc3RydWN0IGhlX2lycSksIGhlX2Rldi0+aXJxX2Jhc2UsIGhlX2Rldi0+aXJxX3BoeXMpOworCQlkbWFfZnJlZV9jb2hlcmVudCgmaGVfZGV2LT5wY2lfZGV2LT5kZXYsIChDT05GSUdfSVJRX1NJWkUgKyAxKQorCQkJCSAgKiBzaXplb2Yoc3RydWN0IGhlX2lycSksIGhlX2Rldi0+aXJxX2Jhc2UsIGhlX2Rldi0+aXJxX3BoeXMpOwogCiAJaWYgKGhlX2Rldi0+aHNwKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGhlX2Rldi0+cGNpX2Rldiwgc2l6ZW9mKHN0cnVjdCBoZV9oc3ApLAotCQkJCQkJaGVfZGV2LT5oc3AsIGhlX2Rldi0+aHNwX3BoeXMpOworCQlkbWFfZnJlZV9jb2hlcmVudCgmaGVfZGV2LT5wY2lfZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgaGVfaHNwKSwKKwkJCQkgIGhlX2Rldi0+aHNwLCBoZV9kZXYtPmhzcF9waHlzKTsKIAogCWlmIChoZV9kZXYtPnJicGxfYmFzZSkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaGViLCBuZXh0LCAmaGVfZGV2LT5yYnBsX291dHN0YW5kaW5nLCBlbnRyeSkKLQkJCXBjaV9wb29sX2ZyZWUoaGVfZGV2LT5yYnBsX3Bvb2wsIGhlYiwgaGViLT5tYXBwaW5nKTsKKwkJCWRtYV9wb29sX2ZyZWUoaGVfZGV2LT5yYnBsX3Bvb2wsIGhlYiwgaGViLT5tYXBwaW5nKTsKIAotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGhlX2Rldi0+cGNpX2RldiwgQ09ORklHX1JCUExfU0laRQotCQkJKiBzaXplb2Yoc3RydWN0IGhlX3JicCksIGhlX2Rldi0+cmJwbF9iYXNlLCBoZV9kZXYtPnJicGxfcGh5cyk7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZoZV9kZXYtPnBjaV9kZXYtPmRldiwgQ09ORklHX1JCUExfU0laRQorCQkJCSAgKiBzaXplb2Yoc3RydWN0IGhlX3JicCksIGhlX2Rldi0+cmJwbF9iYXNlLCBoZV9kZXYtPnJicGxfcGh5cyk7CiAJfQogCiAJa2ZyZWUoaGVfZGV2LT5yYnBsX3ZpcnQpOwogCWtmcmVlKGhlX2Rldi0+cmJwbF90YWJsZSk7CiAKIAlpZiAoaGVfZGV2LT5yYnBsX3Bvb2wpCi0JCXBjaV9wb29sX2Rlc3Ryb3koaGVfZGV2LT5yYnBsX3Bvb2wpOworCQlkbWFfcG9vbF9kZXN0cm95KGhlX2Rldi0+cmJwbF9wb29sKTsKIAogCWlmIChoZV9kZXYtPnJicnFfYmFzZSkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChoZV9kZXYtPnBjaV9kZXYsIENPTkZJR19SQlJRX1NJWkUgKiBzaXplb2Yoc3RydWN0IGhlX3JicnEpLAotCQkJCQkJCWhlX2Rldi0+cmJycV9iYXNlLCBoZV9kZXYtPnJicnFfcGh5cyk7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZoZV9kZXYtPnBjaV9kZXYtPmRldiwgQ09ORklHX1JCUlFfU0laRSAqIHNpemVvZihzdHJ1Y3QgaGVfcmJycSksCisJCQkJICBoZV9kZXYtPnJicnFfYmFzZSwgaGVfZGV2LT5yYnJxX3BoeXMpOwogCiAJaWYgKGhlX2Rldi0+dGJycV9iYXNlKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGhlX2Rldi0+cGNpX2RldiwgQ09ORklHX1RCUlFfU0laRSAqIHNpemVvZihzdHJ1Y3QgaGVfdGJycSksCi0JCQkJCQkJaGVfZGV2LT50YnJxX2Jhc2UsIGhlX2Rldi0+dGJycV9waHlzKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmhlX2Rldi0+cGNpX2Rldi0+ZGV2LCBDT05GSUdfVEJSUV9TSVpFICogc2l6ZW9mKHN0cnVjdCBoZV90YnJxKSwKKwkJCQkgIGhlX2Rldi0+dGJycV9iYXNlLCBoZV9kZXYtPnRicnFfcGh5cyk7CiAKIAlpZiAoaGVfZGV2LT50cGRycV9iYXNlKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGhlX2Rldi0+cGNpX2RldiwgQ09ORklHX1RCUlFfU0laRSAqIHNpemVvZihzdHJ1Y3QgaGVfdGJycSksCi0JCQkJCQkJaGVfZGV2LT50cGRycV9iYXNlLCBoZV9kZXYtPnRwZHJxX3BoeXMpOworCQlkbWFfZnJlZV9jb2hlcmVudCgmaGVfZGV2LT5wY2lfZGV2LT5kZXYsIENPTkZJR19UQlJRX1NJWkUgKiBzaXplb2Yoc3RydWN0IGhlX3RicnEpLAorCQkJCSAgaGVfZGV2LT50cGRycV9iYXNlLCBoZV9kZXYtPnRwZHJxX3BoeXMpOwogCiAJaWYgKGhlX2Rldi0+dHBkX3Bvb2wpCi0JCXBjaV9wb29sX2Rlc3Ryb3koaGVfZGV2LT50cGRfcG9vbCk7CisJCWRtYV9wb29sX2Rlc3Ryb3koaGVfZGV2LT50cGRfcG9vbCk7CiAKIAlpZiAoaGVfZGV2LT5wY2lfZGV2KSB7CiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGhlX2Rldi0+cGNpX2RldiwgUENJX0NPTU1BTkQsICZjb21tYW5kKTsKQEAgLTE2MTAsNyArMTYxMyw3IEBACiAJc3RydWN0IGhlX3RwZCAqdHBkOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKIAotCXRwZCA9IHBjaV9wb29sX2FsbG9jKGhlX2Rldi0+dHBkX3Bvb2wsIEdGUF9BVE9NSUN8R0ZQX0RNQSwgJm1hcHBpbmcpOworCXRwZCA9IGRtYV9wb29sX2FsbG9jKGhlX2Rldi0+dHBkX3Bvb2wsIEdGUF9BVE9NSUMsICZtYXBwaW5nKTsKIAlpZiAodHBkID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCQkJCkBAIC0xNjgxLDcgKzE2ODQsNyBAQAogCQkJaWYgKCFSQlJRX0hCVUZfRVJSKGhlX2Rldi0+cmJycV9oZWFkKSkgewogCQkJCWNsZWFyX2JpdChpLCBoZV9kZXYtPnJicGxfdGFibGUpOwogCQkJCWxpc3RfZGVsKCZoZWItPmVudHJ5KTsKLQkJCQlwY2lfcG9vbF9mcmVlKGhlX2Rldi0+cmJwbF9wb29sLCBoZWIsIGhlYi0+bWFwcGluZyk7CisJCQkJZG1hX3Bvb2xfZnJlZShoZV9kZXYtPnJicGxfcG9vbCwgaGViLCBoZWItPm1hcHBpbmcpOwogCQkJfQogCQkJCQkKIAkJCWdvdG8gbmV4dF9yYnJxX2VudHJ5OwpAQCAtMTc3NCw3ICsxNzc3LDcgQEAKIAkJKytwZHVzX2Fzc2VtYmxlZDsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaGViLCBuZXh0LCAmaGVfdmNjLT5idWZmZXJzLCBlbnRyeSkKLQkJCXBjaV9wb29sX2ZyZWUoaGVfZGV2LT5yYnBsX3Bvb2wsIGhlYiwgaGViLT5tYXBwaW5nKTsKKwkJCWRtYV9wb29sX2ZyZWUoaGVfZGV2LT5yYnBsX3Bvb2wsIGhlYiwgaGViLT5tYXBwaW5nKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmhlX3ZjYy0+YnVmZmVycyk7CiAJCWhlX3ZjYy0+cGR1X2xlbiA9IDA7CiAKQEAgLTE4NDMsMTAgKzE4NDYsMTAgQEAKIAogCQlmb3IgKHNsb3QgPSAwOyBzbG90IDwgVFBEX01BWElPVjsgKytzbG90KSB7CiAJCQlpZiAodHBkLT5pb3ZlY1tzbG90XS5hZGRyKQotCQkJCXBjaV91bm1hcF9zaW5nbGUoaGVfZGV2LT5wY2lfZGV2LAorCQkJCWRtYV91bm1hcF9zaW5nbGUoJmhlX2Rldi0+cGNpX2Rldi0+ZGV2LAogCQkJCQl0cGQtPmlvdmVjW3Nsb3RdLmFkZHIsCiAJCQkJCXRwZC0+aW92ZWNbc2xvdF0ubGVuICYgVFBEX0xFTl9NQVNLLAotCQkJCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCQkJCURNQV9UT19ERVZJQ0UpOwogCQkJaWYgKHRwZC0+aW92ZWNbc2xvdF0ubGVuICYgVFBEX0xTVCkKIAkJCQlicmVhazsKIAkJCQkKQEAgLTE4NjEsNyArMTg2NCw3IEBACiAKIG5leHRfdGJycV9lbnRyeToKIAkJaWYgKHRwZCkKLQkJCXBjaV9wb29sX2ZyZWUoaGVfZGV2LT50cGRfcG9vbCwgdHBkLCBUUERfQUREUih0cGQtPnN0YXR1cykpOworCQkJZG1hX3Bvb2xfZnJlZShoZV9kZXYtPnRwZF9wb29sLCB0cGQsIFRQRF9BRERSKHRwZC0+c3RhdHVzKSk7CiAJCWhlX2Rldi0+dGJycV9oZWFkID0gKHN0cnVjdCBoZV90YnJxICopCiAJCQkJKCh1bnNpZ25lZCBsb25nKSBoZV9kZXYtPnRicnFfYmFzZSB8CiAJCQkJCVRCUlFfTUFTSyhoZV9kZXYtPnRicnFfaGVhZCArIDEpKTsKQEAgLTE5MDUsNyArMTkwOCw3IEBACiAJCX0KIAkJaGVfZGV2LT5yYnBsX2hpbnQgPSBpICsgMTsKIAotCQloZWIgPSBwY2lfcG9vbF9hbGxvYyhoZV9kZXYtPnJicGxfcG9vbCwgR0ZQX0FUT01JQ3xHRlBfRE1BLCAmbWFwcGluZyk7CisJCWhlYiA9IGRtYV9wb29sX2FsbG9jKGhlX2Rldi0+cmJwbF9wb29sLCBHRlBfQVRPTUlDLCAmbWFwcGluZyk7CiAJCWlmICghaGViKQogCQkJYnJlYWs7CiAJCWhlYi0+bWFwcGluZyA9IG1hcHBpbmc7CkBAIC0yMDg0LDEwICsyMDg3LDEwIEBACiAJCQkgKi8KIAkJCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBUUERfTUFYSU9WOyArK3Nsb3QpIHsKIAkJCQlpZiAodHBkLT5pb3ZlY1tzbG90XS5hZGRyKQotCQkJCQlwY2lfdW5tYXBfc2luZ2xlKGhlX2Rldi0+cGNpX2RldiwKKwkJCQkJZG1hX3VubWFwX3NpbmdsZSgmaGVfZGV2LT5wY2lfZGV2LT5kZXYsCiAJCQkJCQl0cGQtPmlvdmVjW3Nsb3RdLmFkZHIsCiAJCQkJCQl0cGQtPmlvdmVjW3Nsb3RdLmxlbiAmIFRQRF9MRU5fTUFTSywKLQkJCQkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQkJCQkJCURNQV9UT19ERVZJQ0UpOwogCQkJfQogCQkJaWYgKHRwZC0+c2tiKSB7CiAJCQkJaWYgKHRwZC0+dmNjLT5wb3ApCkBAIC0yMDk2LDcgKzIwOTksNyBAQAogCQkJCQlkZXZfa2ZyZWVfc2tiX2FueSh0cGQtPnNrYik7CiAJCQkJYXRvbWljX2luYygmdHBkLT52Y2MtPnN0YXRzLT50eF9lcnIpOwogCQkJfQotCQkJcGNpX3Bvb2xfZnJlZShoZV9kZXYtPnRwZF9wb29sLCB0cGQsIFRQRF9BRERSKHRwZC0+c3RhdHVzKSk7CisJCQlkbWFfcG9vbF9mcmVlKGhlX2Rldi0+dHBkX3Bvb2wsIHRwZCwgVFBEX0FERFIodHBkLT5zdGF0dXMpKTsKIAkJCXJldHVybjsKIAkJfQogCX0KQEAgLTI1NTAsOCArMjU1Myw4IEBACiAJfQogCiAjaWZkZWYgVVNFX1NDQVRURVJHQVRIRVIKLQl0cGQtPmlvdmVjW3Nsb3RdLmFkZHIgPSBwY2lfbWFwX3NpbmdsZShoZV9kZXYtPnBjaV9kZXYsIHNrYi0+ZGF0YSwKLQkJCQlza2JfaGVhZGxlbihza2IpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwl0cGQtPmlvdmVjW3Nsb3RdLmFkZHIgPSBkbWFfbWFwX3NpbmdsZSgmaGVfZGV2LT5wY2lfZGV2LT5kZXYsIHNrYi0+ZGF0YSwKKwkJCQlza2JfaGVhZGxlbihza2IpLCBETUFfVE9fREVWSUNFKTsKIAl0cGQtPmlvdmVjW3Nsb3RdLmxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAJKytzbG90OwogCkBAIC0yNTc5LDkgKzI1ODIsOSBAQAogCQkJc2xvdCA9IDA7CiAJCX0KIAotCQl0cGQtPmlvdmVjW3Nsb3RdLmFkZHIgPSBwY2lfbWFwX3NpbmdsZShoZV9kZXYtPnBjaV9kZXYsCisJCXRwZC0+aW92ZWNbc2xvdF0uYWRkciA9IGRtYV9tYXBfc2luZ2xlKCZoZV9kZXYtPnBjaV9kZXYtPmRldiwKIAkJCSh2b2lkICopIHBhZ2VfYWRkcmVzcyhmcmFnLT5wYWdlKSArIGZyYWctPnBhZ2Vfb2Zmc2V0LAotCQkJCWZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCWZyYWctPnNpemUsIERNQV9UT19ERVZJQ0UpOwogCQl0cGQtPmlvdmVjW3Nsb3RdLmxlbiA9IGZyYWctPnNpemU7CiAJCSsrc2xvdDsKIApAQCAtMjU4OSw3ICsyNTkyLDcgQEAKIAogCXRwZC0+aW92ZWNbc2xvdCAtIDFdLmxlbiB8PSBUUERfTFNUOwogI2Vsc2UKLQl0cGQtPmFkZHJlc3MwID0gcGNpX21hcF9zaW5nbGUoaGVfZGV2LT5wY2lfZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwl0cGQtPmFkZHJlc3MwID0gZG1hX21hcF9zaW5nbGUoJmhlX2Rldi0+cGNpX2Rldi0+ZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAl0cGQtPmxlbmd0aDAgPSBza2ItPmxlbiB8IFRQRF9MU1Q7CiAjZW5kaWYKIAl0cGQtPnN0YXR1cyB8PSBUUERfSU5UOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaGUuaCBiL2RyaXZlcnMvYXRtL2hlLmgKaW5kZXggMTEwYTI3ZC4uZjNmNTM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaGUuaAorKysgYi9kcml2ZXJzL2F0bS9oZS5oCkBAIC0yODEsNyArMjgxLDcgQEAKIAlpbnQgaXJxX3BlYWs7CiAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdGFza2xldDsKLQlzdHJ1Y3QgcGNpX3Bvb2wgKnRwZF9wb29sOworCXN0cnVjdCBkbWFfcG9vbCAqdHBkX3Bvb2w7CiAJc3RydWN0IGxpc3RfaGVhZCBvdXRzdGFuZGluZ190cGRzOwogCiAJZG1hX2FkZHJfdCB0cGRycV9waHlzOwpAQCAtMjk2LDcgKzI5Niw3IEBACiAJc3RydWN0IGhlX2J1ZmYgKipyYnBsX3ZpcnQ7CiAJdW5zaWduZWQgbG9uZyAqcmJwbF90YWJsZTsKIAl1bnNpZ25lZCBsb25nIHJicGxfaGludDsKLQlzdHJ1Y3QgcGNpX3Bvb2wgKnJicGxfcG9vbDsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKnJicGxfcG9vbDsKIAlkbWFfYWRkcl90IHJicGxfcGh5czsKIAlzdHJ1Y3QgaGVfcmJwICpyYnBsX2Jhc2UsICpyYnBsX3RhaWw7CiAJc3RydWN0IGxpc3RfaGVhZCByYnBsX291dHN0YW5kaW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaG9yaXpvbi5jIGIvZHJpdmVycy9hdG0vaG9yaXpvbi5jCmluZGV4IDFkYzA1MTkuLjUyN2JiZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2hvcml6b24uYworKysgYi9kcml2ZXJzL2F0bS9ob3Jpem9uLmMKQEAgLTQ1OCwxMiArNDU4LDYgQEAKICAgICByZXR1cm47CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTE2IHF1ZXJ5X3R4X2NoYW5uZWxfY29uZmlnIChocnpfZGV2ICogZGV2LCBzaG9ydCBjaGFuLCB1OCBtb2RlKSB7Ci0gIHdyX3JlZ3cgKGRldiwgVFhfQ0hBTk5FTF9DT05GSUdfQ09NTUFORF9PRkYsCi0JICAgY2hhbiAqIFRYX0NIQU5ORUxfQ09ORklHX01VTFQgfCBtb2RlKTsKLSAgICByZXR1cm4gcmRfcmVndyAoZGV2LCBUWF9DSEFOTkVMX0NPTkZJR19EQVRBX09GRik7Ci19Ci0KIC8qKioqKioqKioqIGR1bXAgZnVuY3Rpb25zICoqKioqKioqKiovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3NrYiAoY2hhciAqIHByZWZpeCwgdW5zaWduZWQgaW50IHZjLCBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYikgewpAQCAtNTEzLDE2ICs1MDcsNiBAQAogCiAvKiBSWCBjaGFubmVscyBhcmUgMTAgYml0IGludGVnZXJzLCB0aGVzZSBmbnMgYXJlIHF1aXRlIHBhcmFub2lkICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGNoYW5uZWxfdG9fdnBpdmNpIChjb25zdCB1MTYgY2hhbm5lbCwgc2hvcnQgKiB2cGksIGludCAqIHZjaSkgewotICB1bnNpZ25lZCBzaG9ydCB2Y2lfYml0cyA9IDEwIC0gdnBpX2JpdHM7Ci0gIGlmICgoY2hhbm5lbCAmIFJYX0NIQU5ORUxfTUFTSykgPT0gY2hhbm5lbCkgewotICAgICp2Y2kgPSBjaGFubmVsICYgKCh+MCk8PHZjaV9iaXRzKTsKLSAgICAqdnBpID0gY2hhbm5lbCA+PiB2Y2lfYml0czsKLSAgICByZXR1cm4gY2hhbm5lbCA/IDAgOiAtRUlOVkFMOwotICB9Ci0gIHJldHVybiAtRUlOVkFMOwotfQotCiBzdGF0aWMgaW5saW5lIGludCB2cGl2Y2lfdG9fY2hhbm5lbCAodTE2ICogY2hhbm5lbCwgY29uc3Qgc2hvcnQgdnBpLCBjb25zdCBpbnQgdmNpKSB7CiAgIHVuc2lnbmVkIHNob3J0IHZjaV9iaXRzID0gMTAgLSB2cGlfYml0czsKICAgaWYgKDAgPD0gdnBpICYmIHZwaSA8IDE8PHZwaV9iaXRzICYmIDAgPD0gdmNpICYmIHZjaSA8IDE8PHZjaV9iaXRzKSB7CkBAIC0xMjYwLDE0ICsxMjQ0LDYgQEAKICAgcmV0dXJuIHJ4X3F1ZXVlX2VudHJ5OwogfQogCi0vKioqKioqKioqKiBoYW5kbGUgUlggZGlzYWJsZWQgYnkgZGV2aWNlICoqKioqKioqKiovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCByeF9kaXNhYmxlZF9oYW5kbGVyIChocnpfZGV2ICogZGV2KSB7Ci0gIHdyX3JlZ3cgKGRldiwgUlhfQ09ORklHX09GRiwgcmRfcmVndyAoZGV2LCBSWF9DT05GSUdfT0ZGKSB8IFJYX0VOQUJMRSk7Ci0gIC8vIGNvdW50IG1lIHBsZWFzZQotICBQUklOVEsgKEtFUk5fV0FSTklORywgIlJYIHdhcyBkaXNhYmxlZCEiKTsKLX0KLQogLyoqKioqKioqKiogaGFuZGxlIFJYIGRhdGEgcmVjZWl2ZWQgYnkgZGV2aWNlICoqKioqKioqKiovCiAKIC8vIGNhbGxlZCBmcm9tIElSUSBoYW5kbGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jIGIvZHJpdmVycy9hdG0vaWR0NzcyNTIuYwppbmRleCAyYjI0ZWQwLi4wNzQ2MTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jCisrKyBiL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMKQEAgLTY0MSw3ICs2NDEsOCBAQAogCXNjcSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzY3FfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghc2NxKQogCQlyZXR1cm4gTlVMTDsKLQlzY3EtPmJhc2UgPSBwY2lfemFsbG9jX2NvbnNpc3RlbnQoY2FyZC0+cGNpZGV2LCBTQ1FfU0laRSwgJnNjcS0+cGFkZHIpOworCXNjcS0+YmFzZSA9IGRtYV96YWxsb2NfY29oZXJlbnQoJmNhcmQtPnBjaWRldi0+ZGV2LCBTQ1FfU0laRSwKKwkJCQkJJnNjcS0+cGFkZHIsIEdGUF9LRVJORUwpOwogCWlmIChzY3EtPmJhc2UgPT0gTlVMTCkgewogCQlrZnJlZShzY3EpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTY2OSwxMiArNjcwLDEyIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCi0JcGNpX2ZyZWVfY29uc2lzdGVudChjYXJkLT5wY2lkZXYsIFNDUV9TSVpFLAotCQkJICAgIHNjcS0+YmFzZSwgc2NxLT5wYWRkcik7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmNhcmQtPnBjaWRldi0+ZGV2LCBTQ1FfU0laRSwKKwkJCSAgc2NxLT5iYXNlLCBzY3EtPnBhZGRyKTsKIAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnNjcS0+dHJhbnNtaXQpKSkgewotCQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPnBjaWRldiwgSURUNzcyNTJfUFJWX1BBRERSKHNrYiksCi0JCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZSgmY2FyZC0+cGNpZGV2LT5kZXYsIElEVDc3MjUyX1BSVl9QQUREUihza2IpLAorCQkJCSBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CiAKIAkJdmNjID0gQVRNX1NLQihza2IpLT52Y2M7CiAJCWlmICh2Y2MtPnBvcCkKQEAgLTY4NCw4ICs2ODUsOCBAQAogCX0KIAogCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnNjcS0+cGVuZGluZykpKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoY2FyZC0+cGNpZGV2LCBJRFQ3NzI1Ml9QUlZfUEFERFIoc2tiKSwKLQkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2luZ2xlKCZjYXJkLT5wY2lkZXYtPmRldiwgSURUNzcyNTJfUFJWX1BBRERSKHNrYiksCisJCQkJIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAogCQl2Y2MgPSBBVE1fU0tCKHNrYiktPnZjYzsKIAkJaWYgKHZjYy0+cG9wKQpAQCAtODAwLDggKzgwMSw4IEBACiAJaWYgKHNrYikgewogCQlUWFBSSU5USygiJXM6IGZyZWVpbmcgc2tiIGF0ICVwLlxuIiwgY2FyZC0+bmFtZSwgc2tiKTsKIAotCQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPnBjaWRldiwgSURUNzcyNTJfUFJWX1BBRERSKHNrYiksCi0JCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZSgmY2FyZC0+cGNpZGV2LT5kZXYsIElEVDc3MjUyX1BSVl9QQUREUihza2IpLAorCQkJCSBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CiAKIAkJdmNjID0gQVRNX1NLQihza2IpLT52Y2M7CiAKQEAgLTg0Niw4ICs4NDcsOCBAQAogCXRiZCA9ICZJRFQ3NzI1Ml9QUlZfVEJEKHNrYik7CiAJdmNjID0gQVRNX1NLQihza2IpLT52Y2M7CiAKLQlJRFQ3NzI1Ml9QUlZfUEFERFIoc2tiKSA9IHBjaV9tYXBfc2luZ2xlKGNhcmQtPnBjaWRldiwgc2tiLT5kYXRhLAotCQkJCQkJIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwlJRFQ3NzI1Ml9QUlZfUEFERFIoc2tiKSA9IGRtYV9tYXBfc2luZ2xlKCZjYXJkLT5wY2lkZXYtPmRldiwgc2tiLT5kYXRhLAorCQkJCQkJIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAogCWVycm9yID0gLUVJTlZBTDsKIApAQCAtOTI0LDggKzkyNSw4IEBACiAJcmV0dXJuIDA7CiAKIGVycm91dDoKLQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPnBjaWRldiwgSURUNzcyNTJfUFJWX1BBRERSKHNrYiksCi0JCQkgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCWRtYV91bm1hcF9zaW5nbGUoJmNhcmQtPnBjaWRldi0+ZGV2LCBJRFQ3NzI1Ml9QUlZfUEFERFIoc2tiKSwKKwkJCSBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC05NzAsOCArOTcxLDggQEAKIHsKIAlzdHJ1Y3QgcnNxX2VudHJ5ICpyc3FlOwogCi0JY2FyZC0+cnNxLmJhc2UgPSBwY2lfemFsbG9jX2NvbnNpc3RlbnQoY2FyZC0+cGNpZGV2LCBSU1FTSVpFLAotCQkJCQkgICAgICAgJmNhcmQtPnJzcS5wYWRkcik7CisJY2FyZC0+cnNxLmJhc2UgPSBkbWFfemFsbG9jX2NvaGVyZW50KCZjYXJkLT5wY2lkZXYtPmRldiwgUlNRU0laRSwKKwkJCQkJICAgICAmY2FyZC0+cnNxLnBhZGRyLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2FyZC0+cnNxLmJhc2UgPT0gTlVMTCkgewogCQlwcmludGsoIiVzOiBjYW4ndCBhbGxvY2F0ZSBSU1EuXG4iLCBjYXJkLT5uYW1lKTsKIAkJcmV0dXJuIC0xOwpAQCAtMTAwMSw4ICsxMDAyLDggQEAKIHN0YXRpYyB2b2lkCiBkZWluaXRfcnNxKHN0cnVjdCBpZHQ3NzI1Ml9kZXYgKmNhcmQpCiB7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChjYXJkLT5wY2lkZXYsIFJTUVNJWkUsCi0JCQkgICAgY2FyZC0+cnNxLmJhc2UsIGNhcmQtPnJzcS5wYWRkcik7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmNhcmQtPnBjaWRldi0+ZGV2LCBSU1FTSVpFLAorCQkJICBjYXJkLT5yc3EuYmFzZSwgY2FyZC0+cnNxLnBhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEwNTcsOSArMTA1OCw5IEBACiAKIAl2Y2MgPSB2Yy0+cnhfdmNjOwogCi0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGNhcmQtPnBjaWRldiwgSURUNzcyNTJfUFJWX1BBRERSKHNrYiksCi0JCQkJICAgIHNrYl9lbmRfcG9pbnRlcihza2IpIC0gc2tiLT5kYXRhLAotCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZjYXJkLT5wY2lkZXYtPmRldiwgSURUNzcyNTJfUFJWX1BBRERSKHNrYiksCisJCQkJc2tiX2VuZF9wb2ludGVyKHNrYikgLSBza2ItPmRhdGEsCisJCQkJRE1BX0ZST01fREVWSUNFKTsKIAogCWlmICgodmNjLT5xb3MuYWFsID09IEFUTV9BQUwwKSB8fAogCSAgICAodmNjLT5xb3MuYWFsID09IEFUTV9BQUwzNCkpIHsKQEAgLTExODAsOSArMTE4MSw5IEBACiAJCQlyZXR1cm47CiAJCX0KIAotCQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPnBjaWRldiwgSURUNzcyNTJfUFJWX1BBRERSKHNrYiksCisJCWRtYV91bm1hcF9zaW5nbGUoJmNhcmQtPnBjaWRldi0+ZGV2LCBJRFQ3NzI1Ml9QUlZfUEFERFIoc2tiKSwKIAkJCQkgc2tiX2VuZF9wb2ludGVyKHNrYikgLSBza2ItPmRhdGEsCi0JCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAJCXNiX3Bvb2xfcmVtb3ZlKGNhcmQsIHNrYik7CiAKIAkJc2tiX3RyaW0oc2tiLCBsZW4pOwpAQCAtMTI1NCw5ICsxMjU1LDkgQEAKIAloZWFkID0gSURUNzcyNTJfUFJWX1BBRERSKHF1ZXVlKSArIChxdWV1ZS0+ZGF0YSAtIHF1ZXVlLT5oZWFkIC0gMTYpOwogCXRhaWwgPSByZWFkbChTQVJfUkVHX1JBV0NUKTsKIAotCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShjYXJkLT5wY2lkZXYsIElEVDc3MjUyX1BSVl9QQUREUihxdWV1ZSksCi0JCQkJICAgIHNrYl9lbmRfb2Zmc2V0KHF1ZXVlKSAtIDE2LAotCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZjYXJkLT5wY2lkZXYtPmRldiwgSURUNzcyNTJfUFJWX1BBRERSKHF1ZXVlKSwKKwkJCQlza2JfZW5kX29mZnNldChxdWV1ZSkgLSAxNiwKKwkJCQlETUFfRlJPTV9ERVZJQ0UpOwogCiAJd2hpbGUgKGhlYWQgIT0gdGFpbCkgewogCQl1bnNpZ25lZCBpbnQgdnBpLCB2Y2k7CkBAIC0xMzQ4LDExICsxMzQ5LDExIEBACiAJCQlpZiAobmV4dCkgewogCQkJCWNhcmQtPnJhd19jZWxsX2hlYWQgPSBuZXh0OwogCQkJCXF1ZXVlID0gY2FyZC0+cmF3X2NlbGxfaGVhZDsKLQkJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoY2FyZC0+cGNpZGV2LAotCQkJCQkJCSAgICBJRFQ3NzI1Ml9QUlZfUEFERFIocXVldWUpLAotCQkJCQkJCSAgICAoc2tiX2VuZF9wb2ludGVyKHF1ZXVlKSAtCi0JCQkJCQkJICAgICBxdWV1ZS0+ZGF0YSksCi0JCQkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoJmNhcmQtPnBjaWRldi0+ZGV2LAorCQkJCQkJCUlEVDc3MjUyX1BSVl9QQUREUihxdWV1ZSksCisJCQkJCQkJKHNrYl9lbmRfcG9pbnRlcihxdWV1ZSkgLQorCQkJCQkJCSBxdWV1ZS0+ZGF0YSksCisJCQkJCQkJRE1BX0ZST01fREVWSUNFKTsKIAkJCX0gZWxzZSB7CiAJCQkJY2FyZC0+cmF3X2NlbGxfaGVhZCA9IE5VTEw7CiAJCQkJcHJpbnRrKCIlczogcmF3IGNlbGwgcXVldWUgb3ZlcnJ1blxuIiwKQEAgLTEzNzUsOCArMTM3Niw4IEBACiB7CiAJc3RydWN0IHRzcV9lbnRyeSAqdHNxZTsKIAotCWNhcmQtPnRzcS5iYXNlID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoY2FyZC0+cGNpZGV2LCBSU1FTSVpFLAotCQkJCQkgICAgICAmY2FyZC0+dHNxLnBhZGRyKTsKKwljYXJkLT50c3EuYmFzZSA9IGRtYV9hbGxvY19jb2hlcmVudCgmY2FyZC0+cGNpZGV2LT5kZXYsIFJTUVNJWkUsCisJCQkJCSAgICAmY2FyZC0+dHNxLnBhZGRyLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2FyZC0+dHNxLmJhc2UgPT0gTlVMTCkgewogCQlwcmludGsoIiVzOiBjYW4ndCBhbGxvY2F0ZSBUU1EuXG4iLCBjYXJkLT5uYW1lKTsKIAkJcmV0dXJuIC0xOwpAQCAtMTM5OCw4ICsxMzk5LDggQEAKIHN0YXRpYyB2b2lkCiBkZWluaXRfdHNxKHN0cnVjdCBpZHQ3NzI1Ml9kZXYgKmNhcmQpCiB7Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChjYXJkLT5wY2lkZXYsIFRTUVNJWkUsCi0JCQkgICAgY2FyZC0+dHNxLmJhc2UsIGNhcmQtPnRzcS5wYWRkcik7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmNhcmQtPnBjaWRldi0+ZGV2LCBUU1FTSVpFLAorCQkJICBjYXJkLT50c3EuYmFzZSwgY2FyZC0+dHNxLnBhZGRyKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE4NjEsOSArMTg2Miw5IEBACiAJCQlnb3RvIG91dGZyZWU7CiAJCX0KIAotCQlwYWRkciA9IHBjaV9tYXBfc2luZ2xlKGNhcmQtPnBjaWRldiwgc2tiLT5kYXRhLAorCQlwYWRkciA9IGRtYV9tYXBfc2luZ2xlKCZjYXJkLT5wY2lkZXYtPmRldiwgc2tiLT5kYXRhLAogCQkJCSAgICAgICBza2JfZW5kX3BvaW50ZXIoc2tiKSAtIHNrYi0+ZGF0YSwKLQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKIAkJSURUNzcyNTJfUFJWX1BBRERSKHNrYikgPSBwYWRkcjsKIAogCQlpZiAocHVzaF9yeF9za2IoY2FyZCwgc2tiLCBxdWV1ZSkpIHsKQEAgLTE4NzUsOCArMTg3Niw4IEBACiAJcmV0dXJuOwogCiBvdXR1bm1hcDoKLQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPnBjaWRldiwgSURUNzcyNTJfUFJWX1BBRERSKHNrYiksCi0JCQkgc2tiX2VuZF9wb2ludGVyKHNrYikgLSBza2ItPmRhdGEsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJZG1hX3VubWFwX3NpbmdsZSgmY2FyZC0+cGNpZGV2LT5kZXYsIElEVDc3MjUyX1BSVl9QQUREUihza2IpLAorCQkJIHNrYl9lbmRfcG9pbnRlcihza2IpIC0gc2tiLT5kYXRhLCBETUFfRlJPTV9ERVZJQ0UpOwogCiAJaGFuZGxlID0gSURUNzcyNTJfUFJWX1BPT0woc2tiKTsKIAljYXJkLT5zYnBvb2xbUE9PTF9RVUVVRShoYW5kbGUpXS5za2JbUE9PTF9JTkRFWChoYW5kbGUpXSA9IE5VTEw7CkBAIC0xODkyLDE1ICsxODkzLDE1IEBACiAJdTMyIGhhbmRsZSA9IElEVDc3MjUyX1BSVl9QT09MKHNrYik7CiAJaW50IGVycjsKIAotCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShjYXJkLT5wY2lkZXYsIElEVDc3MjUyX1BSVl9QQUREUihza2IpLAotCQkJCSAgICAgICBza2JfZW5kX3BvaW50ZXIoc2tiKSAtIHNrYi0+ZGF0YSwKLQkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSgmY2FyZC0+cGNpZGV2LT5kZXYsIElEVDc3MjUyX1BSVl9QQUREUihza2IpLAorCQkJCSAgIHNrYl9lbmRfcG9pbnRlcihza2IpIC0gc2tiLT5kYXRhLAorCQkJCSAgIERNQV9GUk9NX0RFVklDRSk7CiAKIAllcnIgPSBwdXNoX3J4X3NrYihjYXJkLCBza2IsIFBPT0xfUVVFVUUoaGFuZGxlKSk7CiAJaWYgKGVycikgewotCQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPnBjaWRldiwgSURUNzcyNTJfUFJWX1BBRERSKHNrYiksCisJCWRtYV91bm1hcF9zaW5nbGUoJmNhcmQtPnBjaWRldi0+ZGV2LCBJRFQ3NzI1Ml9QUlZfUEFERFIoc2tiKSwKIAkJCQkgc2tiX2VuZF9wb2ludGVyKHNrYikgLSBza2ItPmRhdGEsCi0JCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAJCXNiX3Bvb2xfcmVtb3ZlKGNhcmQsIHNrYik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAl9CkBAIC0zMDU4LDExICszMDU5LDExIEBACiAJCWZvciAoaiA9IDA7IGogPCBGQlFfU0laRTsgaisrKSB7CiAJCQlza2IgPSBjYXJkLT5zYnBvb2xbaV0uc2tiW2pdOwogCQkJaWYgKHNrYikgewotCQkJCXBjaV91bm1hcF9zaW5nbGUoY2FyZC0+cGNpZGV2LAorCQkJCWRtYV91bm1hcF9zaW5nbGUoJmNhcmQtPnBjaWRldi0+ZGV2LAogCQkJCQkJIElEVDc3MjUyX1BSVl9QQUREUihza2IpLAogCQkJCQkJIChza2JfZW5kX3BvaW50ZXIoc2tiKSAtCiAJCQkJCQkgIHNrYi0+ZGF0YSksCi0JCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOwogCQkJCWNhcmQtPnNicG9vbFtpXS5za2Jbal0gPSBOVUxMOwogCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCX0KQEAgLTMwNzYsOCArMzA3Nyw4IEBACiAJdmZyZWUoY2FyZC0+dmNzKTsKIAogCWlmIChjYXJkLT5yYXdfY2VsbF9obmQpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChjYXJkLT5wY2lkZXYsIDIgKiBzaXplb2YodTMyKSwKLQkJCQkgICAgY2FyZC0+cmF3X2NlbGxfaG5kLCBjYXJkLT5yYXdfY2VsbF9wYWRkcik7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZjYXJkLT5wY2lkZXYtPmRldiwgMiAqIHNpemVvZih1MzIpLAorCQkJCSAgY2FyZC0+cmF3X2NlbGxfaG5kLCBjYXJkLT5yYXdfY2VsbF9wYWRkcik7CiAJfQogCiAJaWYgKGNhcmQtPnJzcS5iYXNlKSB7CkBAIC0zMzk3LDkgKzMzOTgsMTAgQEAKIAl3cml0ZWwoMCwgU0FSX1JFR19HUCk7CiAKIAkvKiBJbml0aWFsaXplIFJBVyBDZWxsIEhhbmRsZSBSZWdpc3RlciAgKi8KLQljYXJkLT5yYXdfY2VsbF9obmQgPSBwY2lfemFsbG9jX2NvbnNpc3RlbnQoY2FyZC0+cGNpZGV2LAotCQkJCQkJICAgMiAqIHNpemVvZih1MzIpLAotCQkJCQkJICAgJmNhcmQtPnJhd19jZWxsX3BhZGRyKTsKKwljYXJkLT5yYXdfY2VsbF9obmQgPSBkbWFfemFsbG9jX2NvaGVyZW50KCZjYXJkLT5wY2lkZXYtPmRldiwKKwkJCQkJCSAyICogc2l6ZW9mKHUzMiksCisJCQkJCQkgJmNhcmQtPnJhd19jZWxsX3BhZGRyLAorCQkJCQkJIEdGUF9LRVJORUwpOwogCWlmICghY2FyZC0+cmF3X2NlbGxfaG5kKSB7CiAJCXByaW50aygiJXM6IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUuXG4iLCBjYXJkLT5uYW1lKTsKIAkJZGVpbml0X2NhcmQoY2FyZCk7CkBAIC0zNjExLDYgKzM2MTMsMTEgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKKwlpZiAoKGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoJnBjaWRldi0+ZGV2LCBETUFfQklUX01BU0soMzIpKSkpIHsKKwkJcHJpbnRrKCJpZHQ3NzI1MjogY2FuJ3QgZW5hYmxlIERNQSBmb3IgUENJIGRldmljZSBhdCAlc1xuIiwgcGNpX25hbWUocGNpZGV2KSk7CisJCXJldHVybiBlcnI7CisJfQorCiAJY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpZHQ3NzI1Ml9kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNhcmQpIHsKIAkJcHJpbnRrKCJpZHQ3NzI1Mi0lZDogY2FuJ3QgYWxsb2NhdGUgcHJpdmF0ZSBkYXRhXG4iLCBpbmRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pcGhhc2UuYyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCmluZGV4IDQyMTdmMjkuLjkyNGY4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2lwaGFzZS5jCisrKyBiL2RyaXZlcnMvYXRtL2lwaGFzZS5jCkBAIC0xMTg1LDggKzExODUsOCBAQAogCiAJLyogQnVpbGQgdGhlIERMRSBzdHJ1Y3R1cmUgKi8gIAogCXdyX3B0ciA9IGlhZGV2LT5yeF9kbGVfcS53cml0ZTsgIAotCXdyX3B0ci0+c3lzX3BrdF9hZGRyID0gcGNpX21hcF9zaW5nbGUoaWFkZXYtPnBjaSwgc2tiLT5kYXRhLAotCQlsZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CisJd3JfcHRyLT5zeXNfcGt0X2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmaWFkZXYtPnBjaS0+ZGV2LCBza2ItPmRhdGEsCisJCQkJCSAgICAgIGxlbiwgRE1BX0ZST01fREVWSUNFKTsKIAl3cl9wdHItPmxvY2FsX3BrdF9hZGRyID0gYnVmX2FkZHI7ICAKIAl3cl9wdHItPmJ5dGVzID0gbGVuOwkvKiBXZSBkb24ndCBrbm93IHRoaXMgZG8gd2UgPz8gKi8gIAogCXdyX3B0ci0+bW9kZSA9IERNQV9JTlRfRU5BQkxFOyAgCkBAIC0xMzA2LDggKzEzMDYsOCBAQAogICAgICAgICAgIHVfc2hvcnQgbGVuZ3RoOwogICAgICAgICAgIHN0cnVjdCBpYV92Y2MgKmlhX3ZjYzsKIAotCSAgcGNpX3VubWFwX3NpbmdsZShpYWRldi0+cGNpLCBpYWRldi0+cnhfZGxlX3Eud3JpdGUtPnN5c19wa3RfYWRkciwKLQkgIAlsZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CisJICBkbWFfdW5tYXBfc2luZ2xlKCZpYWRldi0+cGNpLT5kZXYsIGlhZGV2LT5yeF9kbGVfcS53cml0ZS0+c3lzX3BrdF9hZGRyLAorCQkJICAgbGVuLCBETUFfRlJPTV9ERVZJQ0UpOwogICAgICAgICAgIC8qIG5vIFZDQyByZWxhdGVkIGhvdXNla2VlcGluZyBkb25lIGFzIHlldC4gbGV0cyBzZWUgKi8gIAogICAgICAgICAgIHZjYyA9IEFUTV9TS0Ioc2tiKS0+dmNjOwogCSAgaWYgKCF2Y2MpIHsKQEAgLTE0MzAsOCArMTQzMCw4IEBACiAgIC8vICAgIHNwaW5fbG9ja19pbml0KCZpYWRldi0+cnhfbG9jayk7IAogICAKIAkvKiBBbGxvY2F0ZSA0ayBieXRlcyAtIG1vcmUgYWxpZ25lZCB0aGFuIG5lZWRlZCAoNGsgYm91bmRhcnkpICovCi0JZGxlX2FkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpYWRldi0+cGNpLCBETEVfVE9UQUxfU0laRSwKLQkJCQkJJmlhZGV2LT5yeF9kbGVfZG1hKTsgIAorCWRsZV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZpYWRldi0+cGNpLT5kZXYsIERMRV9UT1RBTF9TSVpFLAorCQkJCSAgICAgICZpYWRldi0+cnhfZGxlX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkbGVfYWRkcikgIHsgIAogCQlwcmludGsoS0VSTl9FUlIgREVWX0xBQkVMICJjYW4ndCBhbGxvY2F0ZSBETEVzXG4iKTsKIAkJZ290byBlcnJfb3V0OwpAQCAtMTYzMSw4ICsxNjMxLDggQEAKIAlyZXR1cm4gMDsgIAogCiBlcnJfZnJlZV9kbGU6Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChpYWRldi0+cGNpLCBETEVfVE9UQUxfU0laRSwgaWFkZXYtPnJ4X2RsZV9xLnN0YXJ0LAotCQkJICAgIGlhZGV2LT5yeF9kbGVfZG1hKTsgIAorCWRtYV9mcmVlX2NvaGVyZW50KCZpYWRldi0+cGNpLT5kZXYsIERMRV9UT1RBTF9TSVpFLCBpYWRldi0+cnhfZGxlX3Euc3RhcnQsCisJCQkgIGlhZGV2LT5yeF9kbGVfZG1hKTsKIGVycl9vdXQ6CiAJcmV0dXJuIC1FTk9NRU07CiB9ICAKQEAgLTE3MDIsOCArMTcwMiw4IEBACiAKIAkgICAgLyogUmV2ZW5nZSBvZiB0aGUgMiBkbGUgKHNrYiArIHRyYWlsZXIpIHVzZWQgaW4gaWFfcGt0X3R4KCkgKi8KIAkgICAgaWYgKCEoKGRsZSAtIGlhZGV2LT50eF9kbGVfcS5zdGFydCklKDIqc2l6ZW9mKHN0cnVjdCBkbGUpKSkpIHsKLQkJcGNpX3VubWFwX3NpbmdsZShpYWRldi0+cGNpLCBkbGUtPnN5c19wa3RfYWRkciwgc2tiLT5sZW4sCi0JCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2luZ2xlKCZpYWRldi0+cGNpLT5kZXYsIGRsZS0+c3lzX3BrdF9hZGRyLCBza2ItPmxlbiwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CiAJICAgIH0KICAgICAgICAgICAgIHZjYyA9IEFUTV9TS0Ioc2tiKS0+dmNjOwogICAgICAgICAgICAgaWYgKCF2Y2MpIHsKQEAgLTE5MTcsOCArMTkxNyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR3KGlhZGV2LT5zZWdfcmVnK1NFR19NQVNLX1JFRykpOykgIAogCiAJLyogQWxsb2NhdGUgNGsgKGJvdW5kYXJ5IGFsaWduZWQpIGJ5dGVzICovCi0JZGxlX2FkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChpYWRldi0+cGNpLCBETEVfVE9UQUxfU0laRSwKLQkJCQkJJmlhZGV2LT50eF9kbGVfZG1hKTsgIAorCWRsZV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZpYWRldi0+cGNpLT5kZXYsIERMRV9UT1RBTF9TSVpFLAorCQkJCSAgICAgICZpYWRldi0+dHhfZGxlX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkbGVfYWRkcikgIHsKIAkJcHJpbnRrKEtFUk5fRVJSIERFVl9MQUJFTCAiY2FuJ3QgYWxsb2NhdGUgRExFc1xuIik7CiAJCWdvdG8gZXJyX291dDsKQEAgLTE5ODksOCArMTk4OSwxMCBAQAogCQlnb3RvIGVycl9mcmVlX3R4X2J1ZnM7CiAgICAgICAgICAgICB9CiAJICAgIGlhZGV2LT50eF9idWZbaV0uY3BjcyA9IGNwY3M7Ci0JICAgIGlhZGV2LT50eF9idWZbaV0uZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShpYWRldi0+cGNpLAotCQljcGNzLCBzaXplb2YoKmNwY3MpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkgICAgaWFkZXYtPnR4X2J1ZltpXS5kbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKCZpYWRldi0+cGNpLT5kZXYsCisJCQkJCQkgICAgICAgY3BjcywKKwkJCQkJCSAgICAgICBzaXplb2YoKmNwY3MpLAorCQkJCQkJICAgICAgIERNQV9UT19ERVZJQ0UpOwogICAgICAgICB9CiAgICAgICAgIGlhZGV2LT5kZXNjX3RibCA9IGttYWxsb2MoaWFkZXYtPm51bV90eF9kZXNjICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBkZXNjX3RibF90KSwgR0ZQX0tFUk5FTCk7CkBAIC0yMTk4LDE0ICsyMjAwLDE0IEBACiAJd2hpbGUgKC0taSA+PSAwKSB7CiAJCXN0cnVjdCBjcGNzX3RyYWlsZXJfZGVzYyAqZGVzYyA9IGlhZGV2LT50eF9idWYgKyBpOwogCi0JCXBjaV91bm1hcF9zaW5nbGUoaWFkZXYtPnBjaSwgZGVzYy0+ZG1hX2FkZHIsCi0JCQlzaXplb2YoKmRlc2MtPmNwY3MpLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJZG1hX3VubWFwX3NpbmdsZSgmaWFkZXYtPnBjaS0+ZGV2LCBkZXNjLT5kbWFfYWRkciwKKwkJCQkgc2l6ZW9mKCpkZXNjLT5jcGNzKSwgRE1BX1RPX0RFVklDRSk7CiAJCWtmcmVlKGRlc2MtPmNwY3MpOwogCX0KIAlrZnJlZShpYWRldi0+dHhfYnVmKTsKIGVycl9mcmVlX2RsZToKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGlhZGV2LT5wY2ksIERMRV9UT1RBTF9TSVpFLCBpYWRldi0+dHhfZGxlX3Euc3RhcnQsCi0JCQkgICAgaWFkZXYtPnR4X2RsZV9kbWEpOyAgCisJZG1hX2ZyZWVfY29oZXJlbnQoJmlhZGV2LT5wY2ktPmRldiwgRExFX1RPVEFMX1NJWkUsIGlhZGV2LT50eF9kbGVfcS5zdGFydCwKKwkJCSAgaWFkZXYtPnR4X2RsZV9kbWEpOwogZXJyX291dDoKIAlyZXR1cm4gLUVOT01FTTsKIH0gICAKQEAgLTI0NzYsMjAgKzI0NzgsMjAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaWFkZXYtPm51bV90eF9kZXNjOyBpKyspIHsKIAkJc3RydWN0IGNwY3NfdHJhaWxlcl9kZXNjICpkZXNjID0gaWFkZXYtPnR4X2J1ZiArIGk7CiAKLQkJcGNpX3VubWFwX3NpbmdsZShpYWRldi0+cGNpLCBkZXNjLT5kbWFfYWRkciwKLQkJCXNpemVvZigqZGVzYy0+Y3BjcyksIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlkbWFfdW5tYXBfc2luZ2xlKCZpYWRldi0+cGNpLT5kZXYsIGRlc2MtPmRtYV9hZGRyLAorCQkJCSBzaXplb2YoKmRlc2MtPmNwY3MpLCBETUFfVE9fREVWSUNFKTsKIAkJa2ZyZWUoZGVzYy0+Y3Bjcyk7CiAJfQogCWtmcmVlKGlhZGV2LT50eF9idWYpOwotCXBjaV9mcmVlX2NvbnNpc3RlbnQoaWFkZXYtPnBjaSwgRExFX1RPVEFMX1NJWkUsIGlhZGV2LT50eF9kbGVfcS5zdGFydCwKLQkJCSAgICBpYWRldi0+dHhfZGxlX2RtYSk7ICAKKwlkbWFfZnJlZV9jb2hlcmVudCgmaWFkZXYtPnBjaS0+ZGV2LCBETEVfVE9UQUxfU0laRSwgaWFkZXYtPnR4X2RsZV9xLnN0YXJ0LAorCQkJICBpYWRldi0+dHhfZGxlX2RtYSk7CiB9CiAKIHN0YXRpYyB2b2lkIGlhX2ZyZWVfcngoSUFERVYgKmlhZGV2KQogewogCWtmcmVlKGlhZGV2LT5yeF9vcGVuKTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGlhZGV2LT5wY2ksIERMRV9UT1RBTF9TSVpFLCBpYWRldi0+cnhfZGxlX3Euc3RhcnQsCi0JCQkgIGlhZGV2LT5yeF9kbGVfZG1hKTsgIAorCWRtYV9mcmVlX2NvaGVyZW50KCZpYWRldi0+cGNpLT5kZXYsIERMRV9UT1RBTF9TSVpFLCBpYWRldi0+cnhfZGxlX3Euc3RhcnQsCisJCQkgIGlhZGV2LT5yeF9kbGVfZG1hKTsKIH0KIAogc3RhdGljIGludCBpYV9zdGFydChzdHJ1Y3QgYXRtX2RldiAqZGV2KQpAQCAtMzAwOSw4ICszMDExLDggQEAKIAkvKiBCdWlsZCB0aGUgRExFIHN0cnVjdHVyZSAqLyAgCiAJd3JfcHRyID0gaWFkZXYtPnR4X2RsZV9xLndyaXRlOyAgCiAJbWVtc2V0KChjYWRkcl90KXdyX3B0ciwgMCwgc2l6ZW9mKCp3cl9wdHIpKTsgIAotCXdyX3B0ci0+c3lzX3BrdF9hZGRyID0gcGNpX21hcF9zaW5nbGUoaWFkZXYtPnBjaSwgc2tiLT5kYXRhLAotCQlza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJd3JfcHRyLT5zeXNfcGt0X2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmaWFkZXYtPnBjaS0+ZGV2LCBza2ItPmRhdGEsCisJCQkJCSAgICAgIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKTsKIAl3cl9wdHItPmxvY2FsX3BrdF9hZGRyID0gKGJ1Zl9kZXNjX3B0ci0+YnVmX3N0YXJ0X2hpIDw8IDE2KSB8IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZfZGVzY19wdHItPmJ1Zl9zdGFydF9sbzsgIAogCS8qIHdyX3B0ci0+Ynl0ZXMgPSBzd2FwX2J5dGVfb3JkZXIodG90YWxfbGVuKTsgZGlkbid0IHNlZW0gdG8gYWZmZWN0Pz8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2xhbmFpLmMgYi9kcml2ZXJzL2F0bS9sYW5haS5jCmluZGV4IDkzZWFmOGQuLmNlNDNhZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2xhbmFpLmMKKysrIGIvZHJpdmVycy9hdG0vbGFuYWkuYwpAQCAtMzQ2LDcgKzM0Niw4IEBACiAJCSAqIGV2ZXJ5dGhpbmcsIGJ1dCB0aGUgd2F5IHRoZSBsYW5haSB1c2VzIERNQSBtZW1vcnkgd291bGQKIAkJICogbWFrZSB0aGF0IGEgdGVycmlmaWMgcGFpbi4gIFRoaXMgaXMgbXVjaCBzaW1wbGVyLgogCQkgKi8KLQkJYnVmLT5zdGFydCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBjaSwgc2l6ZSwgJmJ1Zi0+ZG1hYWRkcik7CisJCWJ1Zi0+c3RhcnQgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBjaS0+ZGV2LAorCQkJCQkJc2l6ZSwgJmJ1Zi0+ZG1hYWRkciwgR0ZQX0tFUk5FTCk7CiAJCWlmIChidWYtPnN0YXJ0ICE9IE5VTEwpIHsJLyogU3VjY2VzcyAqLwogCQkJLyogTGFuYWkgcmVxdWlyZXMgMjU2LWJ5dGUgYWxpZ25tZW50IG9mIERNQSBidWZzICovCiAJCQlBUFJJTlRLKChidWYtPmRtYWFkZHIgJiB+MHhGRkZGRkYwMCkgPT0gMCwKQEAgLTM3Miw4ICszNzMsOCBAQAogCXN0cnVjdCBwY2lfZGV2ICpwY2kpCiB7CiAJaWYgKGJ1Zi0+c3RhcnQgIT0gTlVMTCkgewotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBjaSwgbGFuYWlfYnVmX3NpemUoYnVmKSwKLQkJICAgIGJ1Zi0+c3RhcnQsIGJ1Zi0+ZG1hYWRkcik7CisJCWRtYV9mcmVlX2NvaGVyZW50KCZwY2ktPmRldiwgbGFuYWlfYnVmX3NpemUoYnVmKSwKKwkJCQkgIGJ1Zi0+c3RhcnQsIGJ1Zi0+ZG1hYWRkcik7CiAJCWJ1Zi0+c3RhcnQgPSBidWYtPmVuZCA9IGJ1Zi0+cHRyID0gTlVMTDsKIAl9CiB9CkBAIC02ODEsMTUgKzY4Miw2IEBACiAJcmV0dXJuIGNlbGxzICogNDg7CiB9CiAKLS8qIEhvdyBtYW55IGJ5dGVzIGNhbiB3ZSBzZW5kIGlmIHdlIGhhdmUgInNwYWNlIiBzcGFjZSwgYXNzdW1pbmcgd2UgaGF2ZQotICogdG8gc2VuZCBmdWxsIGNlbGxzCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFhbDVfc3BhY2Vmb3IoaW50IHNwYWNlKQotewotCWludCBjZWxscyA9IHNwYWNlIC8gNDg7Ci0JcmV0dXJuIGNlbGxzICogNDg7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEZSRUUgQU4gQVRNIFNLQjogKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGxhbmFpX2ZyZWVfc2tiKHN0cnVjdCBhdG1fdmNjICphdG12Y2MsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xOTUzLDEyICsxOTQ1LDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAJcGNpX3NldF9tYXN0ZXIocGNpKTsKLQlpZiAocGNpX3NldF9kbWFfbWFzayhwY2ksIERNQV9CSVRfTUFTSygzMikpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBERVZfTEFCRUwKLQkJICAgICIoaXRmICVkKTogTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIsIGxhbmFpLT5udW1iZXIpOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQlpZiAocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBjaSwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkgeworCWlmIChkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwY2ktPmRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERFVl9MQUJFTAogCQkgICAgIihpdGYgJWQpOiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIiwgbGFuYWktPm51bWJlcik7CiAJCXJldHVybiAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9uaWNzdGFyLmMgYi9kcml2ZXJzL2F0bS9uaWNzdGFyLmMKaW5kZXggOTk4OGFjOS4uYjdlMWNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vbmljc3Rhci5jCisrKyBiL2RyaXZlcnMvYXRtL25pY3N0YXIuYwpAQCAtMjUyLDEwICsyNTIsMTAgQEAKIAkJCWZyZWVfc2NxKGNhcmQsIGNhcmQtPnNjZDJ2Y1tqXS0+c2NxLCBjYXJkLT5zY2QydmNbal0tPnR4X3ZjYyk7CiAJfQogCWlkcl9kZXN0cm95KCZjYXJkLT5pZHIpOwotCXBjaV9mcmVlX2NvbnNpc3RlbnQoY2FyZC0+cGNpZGV2LCBOU19SU1FTSVpFICsgTlNfUlNRX0FMSUdOTUVOVCwKLQkJCSAgICBjYXJkLT5yc3Eub3JnLCBjYXJkLT5yc3EuZG1hKTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGNhcmQtPnBjaWRldiwgTlNfVFNRU0laRSArIE5TX1RTUV9BTElHTk1FTlQsCi0JCQkgICAgY2FyZC0+dHNxLm9yZywgY2FyZC0+dHNxLmRtYSk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmNhcmQtPnBjaWRldi0+ZGV2LCBOU19SU1FTSVpFICsgTlNfUlNRX0FMSUdOTUVOVCwKKwkJCSAgY2FyZC0+cnNxLm9yZywgY2FyZC0+cnNxLmRtYSk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmNhcmQtPnBjaWRldi0+ZGV2LCBOU19UU1FTSVpFICsgTlNfVFNRX0FMSUdOTUVOVCwKKwkJCSAgY2FyZC0+dHNxLm9yZywgY2FyZC0+dHNxLmRtYSk7CiAJZnJlZV9pcnEoY2FyZC0+cGNpZGV2LT5pcnEsIGNhcmQpOwogCWlvdW5tYXAoY2FyZC0+bWVtYmFzZSk7CiAJa2ZyZWUoY2FyZCk7CkBAIC0zNzAsOCArMzcwLDcgQEAKIAkJbnNfaW5pdF9jYXJkX2Vycm9yKGNhcmQsIGVycm9yKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KLSAgICAgICAgaWYgKChwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkgfHwKLQkgICAgKHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSygzMikpICE9IDApKSB7CisgICAgICAgIGlmIChkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwY2lkZXYtPmRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkgewogICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJuaWNzdGFyJWQ6IE5vIHN1aXRhYmxlIERNQSBhdmFpbGFibGUuXG4iLCBpKTsKIAkJZXJyb3IgPSAyOwpAQCAtNTM1LDkgKzUzNCw5IEBACiAJd3JpdGVsKDB4MDAwMDAwMDAsIGNhcmQtPm1lbWJhc2UgKyBWUE0pOwogCiAJLyogSW5pdGlhbGl6ZSBUU1EgKi8KLQljYXJkLT50c3Eub3JnID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoY2FyZC0+cGNpZGV2LAotCQkJCQkgICAgIE5TX1RTUVNJWkUgKyBOU19UU1FfQUxJR05NRU5ULAotCQkJCQkgICAgICZjYXJkLT50c3EuZG1hKTsKKwljYXJkLT50c3Eub3JnID0gZG1hX2FsbG9jX2NvaGVyZW50KCZjYXJkLT5wY2lkZXYtPmRldiwKKwkJCQkJICAgTlNfVFNRU0laRSArIE5TX1RTUV9BTElHTk1FTlQsCisJCQkJCSAgICZjYXJkLT50c3EuZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2FyZC0+dHNxLm9yZyA9PSBOVUxMKSB7CiAJCXByaW50aygibmljc3RhciVkOiBjYW4ndCBhbGxvY2F0ZSBUU1EuXG4iLCBpKTsKIAkJZXJyb3IgPSAxMDsKQEAgLTU1NCw5ICs1NTMsOSBAQAogCVBSSU5USygibmljc3RhciVkOiBUU1EgYmFzZSBhdCAweCVwLlxuIiwgaSwgY2FyZC0+dHNxLmJhc2UpOwogCiAJLyogSW5pdGlhbGl6ZSBSU1EgKi8KLQljYXJkLT5yc3Eub3JnID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoY2FyZC0+cGNpZGV2LAotCQkJCQkgICAgIE5TX1JTUVNJWkUgKyBOU19SU1FfQUxJR05NRU5ULAotCQkJCQkgICAgICZjYXJkLT5yc3EuZG1hKTsKKwljYXJkLT5yc3Eub3JnID0gZG1hX2FsbG9jX2NvaGVyZW50KCZjYXJkLT5wY2lkZXYtPmRldiwKKwkJCQkJICAgTlNfUlNRU0laRSArIE5TX1JTUV9BTElHTk1FTlQsCisJCQkJCSAgICZjYXJkLT5yc3EuZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2FyZC0+cnNxLm9yZyA9PSBOVUxMKSB7CiAJCXByaW50aygibmljc3RhciVkOiBjYW4ndCBhbGxvY2F0ZSBSU1EuXG4iLCBpKTsKIAkJZXJyb3IgPSAxMTsKQEAgLTg3NCw3ICs4NzMsOCBAQAogCXNjcSA9IGttYWxsb2Moc2l6ZW9mKHNjcV9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzY3EpCiAJCXJldHVybiBOVUxMOwotICAgICAgICBzY3EtPm9yZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGNhcmQtPnBjaWRldiwgMiAqIHNpemUsICZzY3EtPmRtYSk7CisgICAgICAgIHNjcS0+b3JnID0gZG1hX2FsbG9jX2NvaGVyZW50KCZjYXJkLT5wY2lkZXYtPmRldiwKKwkJCQkgICAgICAyICogc2l6ZSwgICZzY3EtPmRtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzY3EtPm9yZykgewogCQlrZnJlZShzY3EpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTkzNiwxMCArOTM2LDEwIEBACiAJCQl9CiAJfQogCWtmcmVlKHNjcS0+c2tiKTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGNhcmQtPnBjaWRldiwKLQkJCSAgICAyICogKHNjcS0+bnVtX2VudHJpZXMgPT0gVkJSX1NDUV9OVU1fRU5UUklFUyA/Ci0JCQkJIFZCUl9TQ1FTSVpFIDogQ0JSX1NDUVNJWkUpLAotCQkJICAgIHNjcS0+b3JnLCBzY3EtPmRtYSk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmNhcmQtPnBjaWRldi0+ZGV2LAorCQkJICAyICogKHNjcS0+bnVtX2VudHJpZXMgPT0gVkJSX1NDUV9OVU1fRU5UUklFUyA/CisJCQkgICAgICAgVkJSX1NDUVNJWkUgOiBDQlJfU0NRU0laRSksCisJCQkgIHNjcS0+b3JnLCBzY3EtPmRtYSk7CiAJa2ZyZWUoc2NxKTsKIH0KIApAQCAtOTU3LDExICs5NTcsMTEgQEAKIAloYW5kbGUyID0gTlVMTDsKIAlhZGRyMiA9IDA7CiAJaGFuZGxlMSA9IHNrYjsKLQlhZGRyMSA9IHBjaV9tYXBfc2luZ2xlKGNhcmQtPnBjaWRldiwKKwlhZGRyMSA9IGRtYV9tYXBfc2luZ2xlKCZjYXJkLT5wY2lkZXYtPmRldiwKIAkJCSAgICAgICBza2ItPmRhdGEsCiAJCQkgICAgICAgKE5TX1BSVl9CVUZUWVBFKHNrYikgPT0gQlVGX1NNCiAJCQkJPyBOU19TTVNLQlNJWkUgOiBOU19MR1NLQlNJWkUpLAotCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJICAgICAgIERNQV9UT19ERVZJQ0UpOwogCU5TX1BSVl9ETUEoc2tiKSA9IGFkZHIxOyAvKiBzYXZlIHNvIHdlIGNhbiB1bm1hcCBsYXRlciAqLwogCiAjaWZkZWYgR0VORVJBTF9ERUJVRwpAQCAtMTY3MCw4ICsxNjcwLDggQEAKIAogCUFUTV9TS0Ioc2tiKS0+dmNjID0gdmNjOwogCi0JTlNfUFJWX0RNQShza2IpID0gcGNpX21hcF9zaW5nbGUoY2FyZC0+cGNpZGV2LCBza2ItPmRhdGEsCi0JCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJTlNfUFJWX0RNQShza2IpID0gZG1hX21hcF9zaW5nbGUoJmNhcmQtPnBjaWRldi0+ZGV2LCBza2ItPmRhdGEsCisJCQkJCSBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CiAKIAlpZiAodmNjLT5xb3MuYWFsID09IEFUTV9BQUw1KSB7CiAJCWJ1ZmxlbiA9IChza2ItPmxlbiArIDQ3ICsgOCkgLyA0OCAqIDQ4OwkvKiBNdWx0aXBsZSBvZiA0OCAqLwpAQCAtMTkzMCwxMCArMTkzMCwxMCBAQAogCQlYUFJJTlRLKCJuaWNzdGFyJWQ6IGZyZWVpbmcgc2tiIGF0IDB4JXAgKGluZGV4ICVkKS5cbiIsCiAJCQljYXJkLT5pbmRleCwgc2tiLCBpKTsKIAkJaWYgKHNrYiAhPSBOVUxMKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKGNhcmQtPnBjaWRldiwKKwkJCWRtYV91bm1hcF9zaW5nbGUoJmNhcmQtPnBjaWRldi0+ZGV2LAogCQkJCQkgTlNfUFJWX0RNQShza2IpLAogCQkJCQkgc2tiLT5sZW4sCi0JCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQkJIERNQV9UT19ERVZJQ0UpOwogCQkJdmNjID0gQVRNX1NLQihza2IpLT52Y2M7CiAJCQlpZiAodmNjICYmIHZjYy0+cG9wICE9IE5VTEwpIHsKIAkJCQl2Y2MtPnBvcCh2Y2MsIHNrYik7CkBAIC0xOTkyLDE2ICsxOTkyLDE2IEBACiAJCXJldHVybjsKIAl9CiAJaWRyX3JlbW92ZSgmY2FyZC0+aWRyLCBpZCk7Ci0gICAgICAgIHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShjYXJkLT5wY2lkZXYsCi0JCQkJICAgIE5TX1BSVl9ETUEoc2tiKSwKLQkJCQkgICAgKE5TX1BSVl9CVUZUWVBFKHNrYikgPT0gQlVGX1NNCi0JCQkJICAgICA/IE5TX1NNU0tCU0laRSA6IE5TX0xHU0tCU0laRSksCi0JCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JcGNpX3VubWFwX3NpbmdsZShjYXJkLT5wY2lkZXYsCisJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoJmNhcmQtPnBjaWRldi0+ZGV2LAorCQkJCU5TX1BSVl9ETUEoc2tiKSwKKwkJCQkoTlNfUFJWX0JVRlRZUEUoc2tiKSA9PSBCVUZfU00KKwkJCQkgPyBOU19TTVNLQlNJWkUgOiBOU19MR1NLQlNJWkUpLAorCQkJCURNQV9GUk9NX0RFVklDRSk7CisJZG1hX3VubWFwX3NpbmdsZSgmY2FyZC0+cGNpZGV2LT5kZXYsCiAJCQkgTlNfUFJWX0RNQShza2IpLAogCQkJIChOU19QUlZfQlVGVFlQRShza2IpID09IEJVRl9TTQogCQkJICA/IE5TX1NNU0tCU0laRSA6IE5TX0xHU0tCU0laRSksCi0JCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCSBETUFfRlJPTV9ERVZJQ0UpOwogCXZwaSA9IG5zX3JzcWVfdnBpKHJzcWUpOwogCXZjaSA9IG5zX3JzcWVfdmNpKHJzcWUpOwogCWlmICh2cGkgPj0gMVVMIDw8IGNhcmQtPnZwaWJpdHMgfHwgdmNpID49IDFVTCA8PCBjYXJkLT52Y2liaXRzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYyBiL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCmluZGV4IDIxYjBiYzYuLjc0ZTE4YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCisrKyBiL2RyaXZlcnMvYXRtL3NvbG9zLXBjaS5jCkBAIC03ODUsOCArNzg1LDggQEAKIAkJCQlza2IgPSBjYXJkLT5yeF9za2JbcG9ydF07CiAJCQkJY2FyZC0+cnhfc2tiW3BvcnRdID0gTlVMTDsKIAotCQkJCXBjaV91bm1hcF9zaW5nbGUoY2FyZC0+ZGV2LCBTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCi0JCQkJCQkgUlhfRE1BX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJZG1hX3VubWFwX3NpbmdsZSgmY2FyZC0+ZGV2LT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBSWF9ETUFfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKIAogCQkJCWhlYWRlciA9ICh2b2lkICopc2tiLT5kYXRhOwogCQkJCXNpemUgPSBsZTE2X3RvX2NwdShoZWFkZXItPnNpemUpOwpAQCAtODcyLDggKzg3Miw4IEBACiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWxsb2Nfc2tiKFJYX0RNQV9TSVpFLCBHRlBfQVRPTUlDKTsKIAkJCWlmIChza2IpIHsKIAkJCQlTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIgPQotCQkJCQlwY2lfbWFwX3NpbmdsZShjYXJkLT5kZXYsIHNrYi0+ZGF0YSwKLQkJCQkJCSAgICAgICBSWF9ETUFfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkJZG1hX21hcF9zaW5nbGUoJmNhcmQtPmRldi0+ZGV2LCBza2ItPmRhdGEsCisJCQkJCQkgICAgICAgUlhfRE1BX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiAJCQkJaW93cml0ZTMyKFNLQl9DQihza2IpLT5kbWFfYWRkciwKIAkJCQkJICBjYXJkLT5jb25maWdfcmVncyArIFJYX0RNQV9BRERSKHBvcnQpKTsKIAkJCQljYXJkLT5yeF9za2JbcG9ydF0gPSBza2I7CkBAIC0xMDY5LDggKzEwNjksOCBAQAogCQlpZiAodHhfcGVuZGluZyAmIDEpIHsKIAkJCXN0cnVjdCBza19idWZmICpvbGRza2IgPSBjYXJkLT50eF9za2JbcG9ydF07CiAJCQlpZiAob2xkc2tiKSB7Ci0JCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihvbGRza2IpLT5kbWFfYWRkciwKLQkJCQkJCSBvbGRza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJZG1hX3VubWFwX3NpbmdsZSgmY2FyZC0+ZGV2LT5kZXYsIFNLQl9DQihvbGRza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBvbGRza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CiAJCQkJY2FyZC0+dHhfc2tiW3BvcnRdID0gTlVMTDsKIAkJCX0KIAkJCXNwaW5fbG9jaygmY2FyZC0+dHhfcXVldWVfbG9jayk7CkBAIC0xMDg5LDggKzEwODksOCBAQAogCQkJCQlkYXRhID0gY2FyZC0+ZG1hX2JvdW5jZSArIChCVUZfU0laRSAqIHBvcnQpOwogCQkJCQltZW1jcHkoZGF0YSwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAJCQkJfQotCQkJCVNLQl9DQihza2IpLT5kbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGNhcmQtPmRldiwgZGF0YSwKLQkJCQkJCQkJICAgICAgIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIgPSBkbWFfbWFwX3NpbmdsZSgmY2FyZC0+ZGV2LT5kZXYsIGRhdGEsCisJCQkJCQkJCSAgICAgICBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CiAJCQkJY2FyZC0+dHhfc2tiW3BvcnRdID0gc2tiOwogCQkJCWlvd3JpdGUzMihTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCiAJCQkJCSAgY2FyZC0+Y29uZmlnX3JlZ3MgKyBUWF9ETUFfQUREUihwb3J0KSk7CkBAIC0xMjEwLDcgKzEyMTAsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJZXJyID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudCgmZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMikpOwogCWlmIChlcnIpIHsKIAkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCAzMi1iaXQgRE1BIG1hc2tcbiIpOwogCQlnb3RvIG91dDsKQEAgLTE0MTEsMTQgKzE0MTEsMTQgQEAKIAogCQkJc2tiID0gY2FyZC0+cnhfc2tiW2ldOwogCQkJaWYgKHNrYikgewotCQkJCXBjaV91bm1hcF9zaW5nbGUoY2FyZC0+ZGV2LCBTS0JfQ0Ioc2tiKS0+ZG1hX2FkZHIsCi0JCQkJCQkgUlhfRE1BX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJZG1hX3VubWFwX3NpbmdsZSgmY2FyZC0+ZGV2LT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBSWF9ETUFfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKIAkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQl9CiAJCQlza2IgPSBjYXJkLT50eF9za2JbaV07CiAJCQlpZiAoc2tiKSB7Ci0JCQkJcGNpX3VubWFwX3NpbmdsZShjYXJkLT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKLQkJCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJZG1hX3VubWFwX3NpbmdsZSgmY2FyZC0+ZGV2LT5kZXYsIFNLQl9DQihza2IpLT5kbWFfYWRkciwKKwkJCQkJCSBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CiAJCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJfQogCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmY2FyZC0+dHhfcXVldWVbaV0pKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL3phdG0uYyBiL2RyaXZlcnMvYXRtL3phdG0uYwppbmRleCA5NjljM2MyLi5jZWNmYjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS96YXRtLmMKKysrIGIvZHJpdmVycy9hdG0vemF0bS5jCkBAIC0xMzA2LDE5ICsxMzA2LDIwIEBACiAKIAkJaWYgKCFtYnhfZW50cmllc1tpXSkKIAkJCWNvbnRpbnVlOwotCQltYnggPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCAyKk1CWF9TSVpFKGkpLCAmbWJ4X2RtYSk7CisJCW1ieCA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGRldi0+ZGV2LAorCQkJCQkgMiAqIE1CWF9TSVpFKGkpLCAmbWJ4X2RtYSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghbWJ4KSB7CiAJCQllcnJvciA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKIAkJfQogCQkvKgotCQkgKiBBbGlnbm1lbnQgcHJvdmlkZWQgYnkgcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSBpc24ndCBlbm91Z2gKKwkJICogQWxpZ25tZW50IHByb3ZpZGVkIGJ5IGRtYV9hbGxvY19jb2hlcmVudCgpIGlzbid0IGVub3VnaAogCQkgKiBmb3IgdGhpcyBkZXZpY2UuCiAJCSAqLwogCQlpZiAoKCh1bnNpZ25lZCBsb25nKW1ieCBeIG1ieF9kbWEpICYgMHhmZmZmKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgREVWX0xBQkVMICIoaXRmICVkKTogc3lzdGVtICIKIAkJCSAgICAgICAiYnVzIGluY29tcGF0aWJsZSB3aXRoIGRyaXZlclxuIiwgZGV2LT5udW1iZXIpOwotCQkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCAyKk1CWF9TSVpFKGkpLCBtYngsIG1ieF9kbWEpOworCQkJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgMipNQlhfU0laRShpKSwgbWJ4LCBtYnhfZG1hKTsKIAkJCWVycm9yID0gLUVOT0RFVjsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0xMzU0LDkgKzEzNTUsOSBAQAogCWtmcmVlKHphdG1fZGV2LT50eF9tYXApOwogb3V0OgogCXdoaWxlIChpLS0gPiAwKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgMipNQlhfU0laRShpKSwgCi0JCQkJICAgICh2b2lkICopemF0bV9kZXYtPm1ieF9zdGFydFtpXSwKLQkJCQkgICAgemF0bV9kZXYtPm1ieF9kbWFbaV0pOworCQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCAyICogTUJYX1NJWkUoaSksCisJCQkJICAodm9pZCAqKXphdG1fZGV2LT5tYnhfc3RhcnRbaV0sCisJCQkJICB6YXRtX2Rldi0+bWJ4X2RtYVtpXSk7CiAJfQogCWZyZWVfaXJxKHphdG1fZGV2LT5pcnEsIGRldik7CiAJZ290byBkb25lOwpAQCAtMTYwOCw2ICsxNjA5LDEwIEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X2Rpc2FibGU7CiAKKwlyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KCZwY2lfZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMikpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9kaXNhYmxlOworCiAJemF0bV9kZXYtPnBjaV9kZXYgPSBwY2lfZGV2OwogCWRldi0+ZGV2X2RhdGEgPSB6YXRtX2RldjsKIAl6YXRtX2Rldi0+Y29wcGVyID0gKGludCllbnQtPmRyaXZlcl9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL2NvbW1vbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2NvbW1vbi5jCmluZGV4IGIwZjEzODguLmYzMmI4MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9jb21tb24uYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvY29tbW9uLmMKQEAgLTE5LDggKzE5LDggQEAKICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCiAgKgogICogSWYgcG93ZXIuc3Vic3lzX2RhdGEgaXMgTlVMTCwgcG9pbnQgaXQgdG8gYSBuZXcgb2JqZWN0LCBvdGhlcndpc2UgaW5jcmVtZW50Ci0gKiBpdHMgcmVmZXJlbmNlIGNvdW50ZXIuICBSZXR1cm4gMSBpZiBhIG5ldyBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgb3RoZXJ3aXNlCi0gKiByZXR1cm4gMCBvciBlcnJvciBjb2RlLgorICogaXRzIHJlZmVyZW5jZSBjb3VudGVyLiAgUmV0dXJuIDAgaWYgbmV3IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkIG9yIHJlZmNvdW50CisgKiBpbmNyZWFzZWQsIG90aGVyd2lzZSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogICovCiBpbnQgZGV2X3BtX2dldF9zdWJzeXNfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC01NiwxMyArNTYsMTEgQEAKICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCiAgKgogICogSWYgdGhlIHJlZmVyZW5jZSBjb3VudGVyIG9mIHBvd2VyLnN1YnN5c19kYXRhIGlzIHplcm8gYWZ0ZXIgZHJvcHBpbmcgdGhlCi0gKiByZWZlcmVuY2UsIHBvd2VyLnN1YnN5c19kYXRhIGlzIHJlbW92ZWQuICBSZXR1cm4gMSBpZiB0aGF0IGhhcHBlbnMgb3IgMAotICogb3RoZXJ3aXNlLgorICogcmVmZXJlbmNlLCBwb3dlci5zdWJzeXNfZGF0YSBpcyByZW1vdmVkLgogICovCi1pbnQgZGV2X3BtX3B1dF9zdWJzeXNfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYpCit2b2lkIGRldl9wbV9wdXRfc3Vic3lzX2RhdGEoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwbV9zdWJzeXNfZGF0YSAqcHNkOwotCWludCByZXQgPSAxOwogCiAJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKIApAQCAtNzAsMTggKzY4LDE0IEBACiAJaWYgKCFwc2QpCiAJCWdvdG8gb3V0OwogCi0JaWYgKC0tcHNkLT5yZWZjb3VudCA9PSAwKSB7CisJaWYgKC0tcHNkLT5yZWZjb3VudCA9PSAwKQogCQlkZXYtPnBvd2VyLnN1YnN5c19kYXRhID0gTlVMTDsKLQl9IGVsc2UgeworCWVsc2UKIAkJcHNkID0gTlVMTDsKLQkJcmV0ID0gMDsKLQl9CiAKICBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOwogCWtmcmVlKHBzZCk7Ci0KLQlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2X3BtX3B1dF9zdWJzeXNfZGF0YSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9kb21haW4uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9kb21haW4uYwppbmRleCAwZDg3ODBjLi5iYTRhYmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvZG9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL2RvbWFpbi5jCkBAIC0zNDQsMTQgKzM0NCw3IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwogCiAJZ3BkX2RhdGEgPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbl9kYXRhLCBuYik7Ci0KLQltdXRleF9sb2NrKCZncGRfZGF0YS0+bG9jayk7CiAJZGV2ID0gZ3BkX2RhdGEtPmJhc2UuZGV2OwotCWlmICghZGV2KSB7Ci0JCW11dGV4X3VubG9jaygmZ3BkX2RhdGEtPmxvY2spOwotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0JfQotCW11dGV4X3VubG9jaygmZ3BkX2RhdGEtPmxvY2spOwogCiAJZm9yICg7OykgewogCQlzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKmdlbnBkOwpAQCAtMTM4NCwyNSArMTM3Nyw2NiBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCiAKLXN0YXRpYyBzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW5fZGF0YSAqX19wbV9nZW5wZF9hbGxvY19kZXZfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluX2RhdGEgKmdlbnBkX2FsbG9jX2Rldl9kYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZCwKKwkJCQkJc3RydWN0IGdwZF90aW1pbmdfZGF0YSAqdGQpCiB7CiAJc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluX2RhdGEgKmdwZF9kYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBkZXZfcG1fZ2V0X3N1YnN5c19kYXRhKGRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAogCWdwZF9kYXRhID0ga3phbGxvYyhzaXplb2YoKmdwZF9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFncGRfZGF0YSkKLQkJcmV0dXJuIE5VTEw7CisJaWYgKCFncGRfZGF0YSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9wdXQ7CisJfQogCi0JbXV0ZXhfaW5pdCgmZ3BkX2RhdGEtPmxvY2spOworCWlmICh0ZCkKKwkJZ3BkX2RhdGEtPnRkID0gKnRkOworCisJZ3BkX2RhdGEtPmJhc2UuZGV2ID0gZGV2OworCWdwZF9kYXRhLT5uZWVkX3Jlc3RvcmUgPSAtMTsKKwlncGRfZGF0YS0+dGQuY29uc3RyYWludF9jaGFuZ2VkID0gdHJ1ZTsKKwlncGRfZGF0YS0+dGQuZWZmZWN0aXZlX2NvbnN0cmFpbnRfbnMgPSAtMTsKIAlncGRfZGF0YS0+bmIubm90aWZpZXJfY2FsbCA9IGdlbnBkX2Rldl9wbV9xb3Nfbm90aWZpZXI7Ci0JZGV2X3BtX3Fvc19hZGRfbm90aWZpZXIoZGV2LCAmZ3BkX2RhdGEtPm5iKTsKKworCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKKwlpZiAoZGV2LT5wb3dlci5zdWJzeXNfZGF0YS0+ZG9tYWluX2RhdGEpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZnJlZTsKKwl9CisKKwlkZXYtPnBvd2VyLnN1YnN5c19kYXRhLT5kb21haW5fZGF0YSA9ICZncGRfZGF0YS0+YmFzZTsKKwlkZXYtPnBtX2RvbWFpbiA9ICZnZW5wZC0+ZG9tYWluOworCisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCiAJcmV0dXJuIGdwZF9kYXRhOworCisgZXJyX2ZyZWU6CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOworCWtmcmVlKGdwZF9kYXRhKTsKKyBlcnJfcHV0OgorCWRldl9wbV9wdXRfc3Vic3lzX2RhdGEoZGV2KTsKKwlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi1zdGF0aWMgdm9pZCBfX3BtX2dlbnBkX2ZyZWVfZGV2X2RhdGEoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluX2RhdGEgKmdwZF9kYXRhKQorc3RhdGljIHZvaWQgZ2VucGRfZnJlZV9kZXZfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluX2RhdGEgKmdwZF9kYXRhKQogewotCWRldl9wbV9xb3NfcmVtb3ZlX25vdGlmaWVyKGRldiwgJmdwZF9kYXRhLT5uYik7CisJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKworCWRldi0+cG1fZG9tYWluID0gTlVMTDsKKwlkZXYtPnBvd2VyLnN1YnN5c19kYXRhLT5kb21haW5fZGF0YSA9IE5VTEw7CisKKwlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisKIAlrZnJlZShncGRfZGF0YSk7CisJZGV2X3BtX3B1dF9zdWJzeXNfZGF0YShkZXYpOwogfQogCiAvKioKQEAgLTE0MTQsOCArMTQ0OCw3IEBACiBpbnQgX19wbV9nZW5wZF9hZGRfZGV2aWNlKHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqZ2VucGQsIHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgc3RydWN0IGdwZF90aW1pbmdfZGF0YSAqdGQpCiB7Ci0Jc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluX2RhdGEgKmdwZF9kYXRhX25ldywgKmdwZF9kYXRhID0gTlVMTDsKLQlzdHJ1Y3QgcG1fZG9tYWluX2RhdGEgKnBkZDsKKwlzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW5fZGF0YSAqZ3BkX2RhdGE7CiAJaW50IHJldCA9IDA7CiAKIAlkZXZfZGJnKGRldiwgIiVzKClcbiIsIF9fZnVuY19fKTsKQEAgLTE0MjMsOSArMTQ1Niw5IEBACiAJaWYgKElTX0VSUl9PUl9OVUxMKGdlbnBkKSB8fCBJU19FUlJfT1JfTlVMTChkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWdwZF9kYXRhX25ldyA9IF9fcG1fZ2VucGRfYWxsb2NfZGV2X2RhdGEoZGV2KTsKLQlpZiAoIWdwZF9kYXRhX25ldykKLQkJcmV0dXJuIC1FTk9NRU07CisJZ3BkX2RhdGEgPSBnZW5wZF9hbGxvY19kZXZfZGF0YShkZXYsIGdlbnBkLCB0ZCk7CisJaWYgKElTX0VSUihncGRfZGF0YSkpCisJCXJldHVybiBQVFJfRVJSKGdwZF9kYXRhKTsKIAogCWdlbnBkX2FjcXVpcmVfbG9jayhnZW5wZCk7CiAKQEAgLTE0MzQsNTAgKzE0NjcsMjIgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwZGQsICZnZW5wZC0+ZGV2X2xpc3QsIGxpc3Rfbm9kZSkKLQkJaWYgKHBkZC0+ZGV2ID09IGRldikgewotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQlyZXQgPSBkZXZfcG1fZ2V0X3N1YnN5c19kYXRhKGRldik7CisJcmV0ID0gZ2VucGQtPmF0dGFjaF9kZXYgPyBnZW5wZC0+YXR0YWNoX2RldihnZW5wZCwgZGV2KSA6IDA7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKIAlnZW5wZC0+ZGV2aWNlX2NvdW50Kys7CiAJZ2VucGQtPm1heF9vZmZfdGltZV9jaGFuZ2VkID0gdHJ1ZTsKIAotCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7Ci0KLQlkZXYtPnBtX2RvbWFpbiA9ICZnZW5wZC0+ZG9tYWluOwotCWlmIChkZXYtPnBvd2VyLnN1YnN5c19kYXRhLT5kb21haW5fZGF0YSkgewotCQlncGRfZGF0YSA9IHRvX2dwZF9kYXRhKGRldi0+cG93ZXIuc3Vic3lzX2RhdGEtPmRvbWFpbl9kYXRhKTsKLQl9IGVsc2UgewotCQlncGRfZGF0YSA9IGdwZF9kYXRhX25ldzsKLQkJZGV2LT5wb3dlci5zdWJzeXNfZGF0YS0+ZG9tYWluX2RhdGEgPSAmZ3BkX2RhdGEtPmJhc2U7Ci0JfQotCWdwZF9kYXRhLT5yZWZjb3VudCsrOwotCWlmICh0ZCkKLQkJZ3BkX2RhdGEtPnRkID0gKnRkOwotCi0Jc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOwotCi0JaWYgKGdlbnBkLT5hdHRhY2hfZGV2KQotCQlnZW5wZC0+YXR0YWNoX2RldihnZW5wZCwgZGV2KTsKLQotCW11dGV4X2xvY2soJmdwZF9kYXRhLT5sb2NrKTsKLQlncGRfZGF0YS0+YmFzZS5kZXYgPSBkZXY7CiAJbGlzdF9hZGRfdGFpbCgmZ3BkX2RhdGEtPmJhc2UubGlzdF9ub2RlLCAmZ2VucGQtPmRldl9saXN0KTsKLQlncGRfZGF0YS0+bmVlZF9yZXN0b3JlID0gLTE7Ci0JZ3BkX2RhdGEtPnRkLmNvbnN0cmFpbnRfY2hhbmdlZCA9IHRydWU7Ci0JZ3BkX2RhdGEtPnRkLmVmZmVjdGl2ZV9jb25zdHJhaW50X25zID0gLTE7Ci0JbXV0ZXhfdW5sb2NrKCZncGRfZGF0YS0+bG9jayk7CiAKICBvdXQ6CiAJZ2VucGRfcmVsZWFzZV9sb2NrKGdlbnBkKTsKIAotCWlmIChncGRfZGF0YSAhPSBncGRfZGF0YV9uZXcpCi0JCV9fcG1fZ2VucGRfZnJlZV9kZXZfZGF0YShkZXYsIGdwZF9kYXRhX25ldyk7CisJaWYgKHJldCkKKwkJZ2VucGRfZnJlZV9kZXZfZGF0YShkZXYsIGdwZF9kYXRhKTsKKwllbHNlCisJCWRldl9wbV9xb3NfYWRkX25vdGlmaWVyKGRldiwgJmdwZF9kYXRhLT5uYik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUwNCw3ICsxNTA5LDYgQEAKIHsKIAlzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW5fZGF0YSAqZ3BkX2RhdGE7CiAJc3RydWN0IHBtX2RvbWFpbl9kYXRhICpwZGQ7Ci0JYm9vbCByZW1vdmUgPSBmYWxzZTsKIAlpbnQgcmV0ID0gMDsKIAogCWRldl9kYmcoZGV2LCAiJXMoKVxuIiwgX19mdW5jX18pOwpAQCAtMTUxNCw2ICsxNTE4LDExIEBACiAJICAgIHx8ICBwZF90b19nZW5wZChkZXYtPnBtX2RvbWFpbikgIT0gZ2VucGQpCiAJCXJldHVybiAtRUlOVkFMOwogCisJLyogVGhlIGFib3ZlIHZhbGlkYXRpb24gYWxzbyBtZWFucyB3ZSBoYXZlIGV4aXN0aW5nIGRvbWFpbl9kYXRhLiAqLworCXBkZCA9IGRldi0+cG93ZXIuc3Vic3lzX2RhdGEtPmRvbWFpbl9kYXRhOworCWdwZF9kYXRhID0gdG9fZ3BkX2RhdGEocGRkKTsKKwlkZXZfcG1fcW9zX3JlbW92ZV9ub3RpZmllcihkZXYsICZncGRfZGF0YS0+bmIpOworCiAJZ2VucGRfYWNxdWlyZV9sb2NrKGdlbnBkKTsKIAogCWlmIChnZW5wZC0+cHJlcGFyZWRfY291bnQgPiAwKSB7CkBAIC0xNTI3LDU4ICsxNTM2LDIyIEBACiAJaWYgKGdlbnBkLT5kZXRhY2hfZGV2KQogCQlnZW5wZC0+ZGV0YWNoX2RldihnZW5wZCwgZGV2KTsKIAotCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7Ci0KLQlkZXYtPnBtX2RvbWFpbiA9IE5VTEw7Ci0JcGRkID0gZGV2LT5wb3dlci5zdWJzeXNfZGF0YS0+ZG9tYWluX2RhdGE7CiAJbGlzdF9kZWxfaW5pdCgmcGRkLT5saXN0X25vZGUpOwotCWdwZF9kYXRhID0gdG9fZ3BkX2RhdGEocGRkKTsKLQlpZiAoLS1ncGRfZGF0YS0+cmVmY291bnQgPT0gMCkgewotCQlkZXYtPnBvd2VyLnN1YnN5c19kYXRhLT5kb21haW5fZGF0YSA9IE5VTEw7Ci0JCXJlbW92ZSA9IHRydWU7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBvd2VyLmxvY2spOwotCi0JbXV0ZXhfbG9jaygmZ3BkX2RhdGEtPmxvY2spOwotCXBkZC0+ZGV2ID0gTlVMTDsKLQltdXRleF91bmxvY2soJmdwZF9kYXRhLT5sb2NrKTsKIAogCWdlbnBkX3JlbGVhc2VfbG9jayhnZW5wZCk7CiAKLQlkZXZfcG1fcHV0X3N1YnN5c19kYXRhKGRldik7Ci0JaWYgKHJlbW92ZSkKLQkJX19wbV9nZW5wZF9mcmVlX2Rldl9kYXRhKGRldiwgZ3BkX2RhdGEpOworCWdlbnBkX2ZyZWVfZGV2X2RhdGEoZGV2LCBncGRfZGF0YSk7CiAKIAlyZXR1cm4gMDsKIAogIG91dDoKIAlnZW5wZF9yZWxlYXNlX2xvY2soZ2VucGQpOworCWRldl9wbV9xb3NfYWRkX25vdGlmaWVyKGRldiwgJmdwZF9kYXRhLT5uYik7CiAKIAlyZXR1cm4gcmV0OwogfQogCiAvKioKLSAqIHBtX2dlbnBkX2Rldl9uZWVkX3Jlc3RvcmUgLSBTZXQvdW5zZXQgdGhlIGRldmljZSdzICJuZWVkIHJlc3RvcmUiIGZsYWcuCi0gKiBAZGV2OiBEZXZpY2UgdG8gc2V0L3Vuc2V0IHRoZSBmbGFnIGZvci4KLSAqIEB2YWw6IFRoZSBuZXcgdmFsdWUgb2YgdGhlIGRldmljZSdzICJuZWVkIHJlc3RvcmUiIGZsYWcuCi0gKi8KLXZvaWQgcG1fZ2VucGRfZGV2X25lZWRfcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgdmFsKQotewotCXN0cnVjdCBwbV9zdWJzeXNfZGF0YSAqcHNkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5wb3dlci5sb2NrLCBmbGFncyk7Ci0KLQlwc2QgPSBkZXZfdG9fcHNkKGRldik7Ci0JaWYgKHBzZCAmJiBwc2QtPmRvbWFpbl9kYXRhKQotCQl0b19ncGRfZGF0YShwc2QtPmRvbWFpbl9kYXRhKS0+bmVlZF9yZXN0b3JlID0gdmFsID8gMSA6IDA7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnBvd2VyLmxvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBtX2dlbnBkX2Rldl9uZWVkX3Jlc3RvcmUpOwotCi0vKioKICAqIHBtX2dlbnBkX2FkZF9zdWJkb21haW4gLSBBZGQgYSBzdWJkb21haW4gdG8gYW4gSS9PIFBNIGRvbWFpbi4KICAqIEBnZW5wZDogTWFzdGVyIFBNIGRvbWFpbiB0byBhZGQgdGhlIHN1YmRvbWFpbiB0by4KICAqIEBzdWJkb21haW46IFN1YmRvbWFpbiB0byBiZSBhZGRlZC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9vcHAuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9vcHAuYwppbmRleCAxMDZjNjkzLi4xNWJmMjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvb3BwLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL29wcC5jCkBAIC0xMTcsMjAgKzExNywyMCBAQAogfSB3aGlsZSAoMCkKIAogLyoqCi0gKiBmaW5kX2RldmljZV9vcHAoKSAtIGZpbmQgZGV2aWNlX29wcCBzdHJ1Y3QgdXNpbmcgZGV2aWNlIHBvaW50ZXIKKyAqIF9maW5kX2RldmljZV9vcHAoKSAtIGZpbmQgZGV2aWNlX29wcCBzdHJ1Y3QgdXNpbmcgZGV2aWNlIHBvaW50ZXIKICAqIEBkZXY6CWRldmljZSBwb2ludGVyIHVzZWQgdG8gbG9va3VwIGRldmljZSBPUFBzCiAgKgogICogU2VhcmNoIGxpc3Qgb2YgZGV2aWNlIE9QUHMgZm9yIG9uZSBjb250YWluaW5nIG1hdGNoaW5nIGRldmljZS4gRG9lcyBhIFJDVQogICogcmVhZGVyIG9wZXJhdGlvbiB0byBncmFiIHRoZSBwb2ludGVyIG5lZWRlZC4KICAqCi0gKiBSZXR1cm5zIHBvaW50ZXIgdG8gJ3N0cnVjdCBkZXZpY2Vfb3BwJyBpZiBmb3VuZCwgb3RoZXJ3aXNlIC1FTk9ERVYgb3IKKyAqIFJldHVybjogcG9pbnRlciB0byAnc3RydWN0IGRldmljZV9vcHAnIGlmIGZvdW5kLCBvdGhlcndpc2UgLUVOT0RFViBvcgogICogLUVJTlZBTCBiYXNlZCBvbiB0eXBlIG9mIGVycm9yLgogICoKICAqIExvY2tpbmc6IFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpLiBkZXZpY2Vfb3BwCiAgKiBpcyBhIFJDVSBwcm90ZWN0ZWQgcG9pbnRlci4gVGhpcyBtZWFucyB0aGF0IGRldmljZV9vcHAgaXMgdmFsaWQgYXMgbG9uZwogICogYXMgd2UgYXJlIHVuZGVyIFJDVSBsb2NrLgogICovCi1zdGF0aWMgc3RydWN0IGRldmljZV9vcHAgKmZpbmRfZGV2aWNlX29wcChzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IGRldmljZV9vcHAgKl9maW5kX2RldmljZV9vcHAoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkZXZpY2Vfb3BwICp0bXBfZGV2X29wcCwgKmRldl9vcHAgPSBFUlJfUFRSKC1FTk9ERVYpOwogCkBAIC0xNTMsNyArMTUzLDcgQEAKICAqIGRldl9wbV9vcHBfZ2V0X3ZvbHRhZ2UoKSAtIEdldHMgdGhlIHZvbHRhZ2UgY29ycmVzcG9uZGluZyB0byBhbiBhdmFpbGFibGUgb3BwCiAgKiBAb3BwOglvcHAgZm9yIHdoaWNoIHZvbHRhZ2UgaGFzIHRvIGJlIHJldHVybmVkIGZvcgogICoKLSAqIFJldHVybiB2b2x0YWdlIGluIG1pY3JvIHZvbHQgY29ycmVzcG9uZGluZyB0byB0aGUgb3BwLCBlbHNlCisgKiBSZXR1cm46IHZvbHRhZ2UgaW4gbWljcm8gdm9sdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBvcHAsIGVsc2UKICAqIHJldHVybiAwCiAgKgogICogTG9ja2luZzogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkuIG9wcCBpcyBhIHJjdQpAQCAtMTY5LDYgKzE2OSw4IEBACiAJc3RydWN0IGRldl9wbV9vcHAgKnRtcF9vcHA7CiAJdW5zaWduZWQgbG9uZyB2ID0gMDsKIAorCW9wcF9yY3VfbG9ja2RlcF9hc3NlcnQoKTsKKwogCXRtcF9vcHAgPSByY3VfZGVyZWZlcmVuY2Uob3BwKTsKIAlpZiAodW5saWtlbHkoSVNfRVJSX09SX05VTEwodG1wX29wcCkpIHx8ICF0bXBfb3BwLT5hdmFpbGFibGUpCiAJCXByX2VycigiJXM6IEludmFsaWQgcGFyYW1ldGVyc1xuIiwgX19mdW5jX18pOwpAQCAtMTgzLDcgKzE4NSw3IEBACiAgKiBkZXZfcG1fb3BwX2dldF9mcmVxKCkgLSBHZXRzIHRoZSBmcmVxdWVuY3kgY29ycmVzcG9uZGluZyB0byBhbiBhdmFpbGFibGUgb3BwCiAgKiBAb3BwOglvcHAgZm9yIHdoaWNoIGZyZXF1ZW5jeSBoYXMgdG8gYmUgcmV0dXJuZWQgZm9yCiAgKgotICogUmV0dXJuIGZyZXF1ZW5jeSBpbiBoZXJ0eiBjb3JyZXNwb25kaW5nIHRvIHRoZSBvcHAsIGVsc2UKKyAqIFJldHVybjogZnJlcXVlbmN5IGluIGhlcnR6IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9wcCwgZWxzZQogICogcmV0dXJuIDAKICAqCiAgKiBMb2NraW5nOiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKS4gb3BwIGlzIGEgcmN1CkBAIC0xOTksNiArMjAxLDggQEAKIAlzdHJ1Y3QgZGV2X3BtX29wcCAqdG1wX29wcDsKIAl1bnNpZ25lZCBsb25nIGYgPSAwOwogCisJb3BwX3JjdV9sb2NrZGVwX2Fzc2VydCgpOworCiAJdG1wX29wcCA9IHJjdV9kZXJlZmVyZW5jZShvcHApOwogCWlmICh1bmxpa2VseShJU19FUlJfT1JfTlVMTCh0bXBfb3BwKSkgfHwgIXRtcF9vcHAtPmF2YWlsYWJsZSkKIAkJcHJfZXJyKCIlczogSW52YWxpZCBwYXJhbWV0ZXJzXG4iLCBfX2Z1bmNfXyk7CkBAIC0yMTMsNyArMjE3LDcgQEAKICAqIGRldl9wbV9vcHBfZ2V0X29wcF9jb3VudCgpIC0gR2V0IG51bWJlciBvZiBvcHBzIGF2YWlsYWJsZSBpbiB0aGUgb3BwIGxpc3QKICAqIEBkZXY6CWRldmljZSBmb3Igd2hpY2ggd2UgZG8gdGhpcyBvcGVyYXRpb24KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgb3BwcyBpZiB0aGVyZSBhcmUgYW55LAorICogUmV0dXJuOiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgb3BwcyBpZiB0aGVyZSBhcmUgYW55LAogICogZWxzZSByZXR1cm5zIDAgaWYgbm9uZSBvciB0aGUgY29ycmVzcG9uZGluZyBlcnJvciB2YWx1ZS4KICAqCiAgKiBMb2NraW5nOiBUaGlzIGZ1bmN0aW9uIHRha2VzIHJjdV9yZWFkX2xvY2soKS4KQEAgLTIyNiw3ICsyMzAsNyBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0JZGV2X29wcCA9IGZpbmRfZGV2aWNlX29wcChkZXYpOworCWRldl9vcHAgPSBfZmluZF9kZXZpY2Vfb3BwKGRldik7CiAJaWYgKElTX0VSUihkZXZfb3BwKSkgewogCQljb3VudCA9IFBUUl9FUlIoZGV2X29wcCk7CiAJCWRldl9lcnIoZGV2LCAiJXM6IGRldmljZSBPUFAgbm90IGZvdW5kICglZClcbiIsCkBAIC0yNTEsOSArMjU1LDkgQEAKICAqIEBmcmVxOgkJZnJlcXVlbmN5IHRvIHNlYXJjaCBmb3IKICAqIEBhdmFpbGFibGU6CQl0cnVlL2ZhbHNlIC0gbWF0Y2ggZm9yIGF2YWlsYWJsZSBvcHAKICAqCi0gKiBTZWFyY2hlcyBmb3IgZXhhY3QgbWF0Y2ggaW4gdGhlIG9wcCBsaXN0IGFuZCByZXR1cm5zIHBvaW50ZXIgdG8gdGhlIG1hdGNoaW5nCi0gKiBvcHAgaWYgZm91bmQsIGVsc2UgcmV0dXJucyBFUlJfUFRSIGluIGNhc2Ugb2YgZXJyb3IgYW5kIHNob3VsZCBiZSBoYW5kbGVkCi0gKiB1c2luZyBJU19FUlIuIEVycm9yIHJldHVybiB2YWx1ZXMgY2FuIGJlOgorICogUmV0dXJuOiBTZWFyY2hlcyBmb3IgZXhhY3QgbWF0Y2ggaW4gdGhlIG9wcCBsaXN0IGFuZCByZXR1cm5zIHBvaW50ZXIgdG8gdGhlCisgKiBtYXRjaGluZyBvcHAgaWYgZm91bmQsIGVsc2UgcmV0dXJucyBFUlJfUFRSIGluIGNhc2Ugb2YgZXJyb3IgYW5kIHNob3VsZAorICogYmUgaGFuZGxlZCB1c2luZyBJU19FUlIuIEVycm9yIHJldHVybiB2YWx1ZXMgY2FuIGJlOgogICogRUlOVkFMOglmb3IgYmFkIHBvaW50ZXIKICAqIEVSQU5HRToJbm8gbWF0Y2ggZm91bmQgZm9yIHNlYXJjaAogICogRU5PREVWOglpZiBkZXZpY2Ugbm90IGZvdW5kIGluIGxpc3Qgb2YgcmVnaXN0ZXJlZCBkZXZpY2VzCkBAIC0yODAsNyArMjg0LDcgQEAKIAogCW9wcF9yY3VfbG9ja2RlcF9hc3NlcnQoKTsKIAotCWRldl9vcHAgPSBmaW5kX2RldmljZV9vcHAoZGV2KTsKKwlkZXZfb3BwID0gX2ZpbmRfZGV2aWNlX29wcChkZXYpOwogCWlmIChJU19FUlIoZGV2X29wcCkpIHsKIAkJaW50IHIgPSBQVFJfRVJSKGRldl9vcHApOwogCQlkZXZfZXJyKGRldiwgIiVzOiBkZXZpY2UgT1BQIG5vdCBmb3VuZCAoJWQpXG4iLCBfX2Z1bmNfXywgcik7CkBAIC0zMDcsNyArMzExLDcgQEAKICAqIFNlYXJjaCBmb3IgdGhlIG1hdGNoaW5nIGNlaWwgKmF2YWlsYWJsZSogT1BQIGZyb20gYSBzdGFydGluZyBmcmVxCiAgKiBmb3IgYSBkZXZpY2UuCiAgKgotICogUmV0dXJucyBtYXRjaGluZyAqb3BwIGFuZCByZWZyZXNoZXMgKmZyZXEgYWNjb3JkaW5nbHksIGVsc2UgcmV0dXJucworICogUmV0dXJuOiBtYXRjaGluZyAqb3BwIGFuZCByZWZyZXNoZXMgKmZyZXEgYWNjb3JkaW5nbHksIGVsc2UgcmV0dXJucwogICogRVJSX1BUUiBpbiBjYXNlIG9mIGVycm9yIGFuZCBzaG91bGQgYmUgaGFuZGxlZCB1c2luZyBJU19FUlIuIEVycm9yIHJldHVybgogICogdmFsdWVzIGNhbiBiZToKICAqIEVJTlZBTDoJZm9yIGJhZCBwb2ludGVyCkBAIC0zMzMsNyArMzM3LDcgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCi0JZGV2X29wcCA9IGZpbmRfZGV2aWNlX29wcChkZXYpOworCWRldl9vcHAgPSBfZmluZF9kZXZpY2Vfb3BwKGRldik7CiAJaWYgKElTX0VSUihkZXZfb3BwKSkKIAkJcmV0dXJuIEVSUl9DQVNUKGRldl9vcHApOwogCkBAIC0zNTcsNyArMzYxLDcgQEAKICAqIFNlYXJjaCBmb3IgdGhlIG1hdGNoaW5nIGZsb29yICphdmFpbGFibGUqIE9QUCBmcm9tIGEgc3RhcnRpbmcgZnJlcQogICogZm9yIGEgZGV2aWNlLgogICoKLSAqIFJldHVybnMgbWF0Y2hpbmcgKm9wcCBhbmQgcmVmcmVzaGVzICpmcmVxIGFjY29yZGluZ2x5LCBlbHNlIHJldHVybnMKKyAqIFJldHVybjogbWF0Y2hpbmcgKm9wcCBhbmQgcmVmcmVzaGVzICpmcmVxIGFjY29yZGluZ2x5LCBlbHNlIHJldHVybnMKICAqIEVSUl9QVFIgaW4gY2FzZSBvZiBlcnJvciBhbmQgc2hvdWxkIGJlIGhhbmRsZWQgdXNpbmcgSVNfRVJSLiBFcnJvciByZXR1cm4KICAqIHZhbHVlcyBjYW4gYmU6CiAgKiBFSU5WQUw6CWZvciBiYWQgcG9pbnRlcgpAQCAtMzgzLDcgKzM4Nyw3IEBACiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KIAotCWRldl9vcHAgPSBmaW5kX2RldmljZV9vcHAoZGV2KTsKKwlkZXZfb3BwID0gX2ZpbmRfZGV2aWNlX29wcChkZXYpOwogCWlmIChJU19FUlIoZGV2X29wcCkpCiAJCXJldHVybiBFUlJfQ0FTVChkZXZfb3BwKTsKIApAQCAtNDAzLDcgKzQwNywxNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2X3BtX29wcF9maW5kX2ZyZXFfZmxvb3IpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9vcHAgKmFkZF9kZXZpY2Vfb3BwKHN0cnVjdCBkZXZpY2UgKmRldikKKy8qKgorICogX2FkZF9kZXZpY2Vfb3BwKCkgLSBBbGxvY2F0ZSBhIG5ldyBkZXZpY2UgT1BQIHRhYmxlCisgKiBAZGV2OglkZXZpY2UgZm9yIHdoaWNoIHdlIGRvIHRoaXMgb3BlcmF0aW9uCisgKgorICogTmV3IGRldmljZSBub2RlIHdoaWNoIHVzZXMgT1BQcyAtIHVzZWQgd2hlbiBtdWx0aXBsZSBkZXZpY2VzIHdpdGggT1BQIHRhYmxlcworICogYXJlIG1haW50YWluZWQuCisgKgorICogUmV0dXJuOiB2YWxpZCBkZXZpY2Vfb3BwIHBvaW50ZXIgaWYgc3VjY2VzcywgZWxzZSBOVUxMLgorICovCitzdGF0aWMgc3RydWN0IGRldmljZV9vcHAgKl9hZGRfZGV2aWNlX29wcChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRldmljZV9vcHAgKmRldl9vcHA7CiAKQEAgLTQyNCw4ICs0MzcsMzUgQEAKIAlyZXR1cm4gZGV2X29wcDsKIH0KIAotc3RhdGljIGludCBkZXZfcG1fb3BwX2FkZF9keW5hbWljKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxLAotCQkJCSAgdW5zaWduZWQgbG9uZyB1X3ZvbHQsIGJvb2wgZHluYW1pYykKKy8qKgorICogX29wcF9hZGRfZHluYW1pYygpIC0gQWxsb2NhdGUgYSBkeW5hbWljIE9QUC4KKyAqIEBkZXY6CWRldmljZSBmb3Igd2hpY2ggd2UgZG8gdGhpcyBvcGVyYXRpb24KKyAqIEBmcmVxOglGcmVxdWVuY3kgaW4gSHogZm9yIHRoaXMgT1BQCisgKiBAdV92b2x0OglWb2x0YWdlIGluIHVWb2x0cyBmb3IgdGhpcyBPUFAKKyAqIEBkeW5hbWljOglEeW5hbWljYWxseSBhZGRlZCBPUFBzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gYWRkcyBhbiBvcHAgZGVmaW5pdGlvbiB0byB0aGUgb3BwIGxpc3QgYW5kIHJldHVybnMgc3RhdHVzLgorICogVGhlIG9wcCBpcyBtYWRlIGF2YWlsYWJsZSBieSBkZWZhdWx0IGFuZCBpdCBjYW4gYmUgY29udHJvbGxlZCB1c2luZworICogZGV2X3BtX29wcF9lbmFibGUvZGlzYWJsZSBmdW5jdGlvbnMgYW5kIG1heSBiZSByZW1vdmVkIGJ5IGRldl9wbV9vcHBfcmVtb3ZlLgorICoKKyAqIE5PVEU6ICJkeW5hbWljIiBwYXJhbWV0ZXIgaW1wYWN0cyBPUFBzIGFkZGVkIGJ5IHRoZSBvZl9pbml0X29wcF90YWJsZSBhbmQKKyAqIGZyZWVkIGJ5IG9mX2ZyZWVfb3BwX3RhYmxlLgorICoKKyAqIExvY2tpbmc6IFRoZSBpbnRlcm5hbCBkZXZpY2Vfb3BwIGFuZCBvcHAgc3RydWN0dXJlcyBhcmUgUkNVIHByb3RlY3RlZC4KKyAqIEhlbmNlIHRoaXMgZnVuY3Rpb24gaW50ZXJuYWxseSB1c2VzIFJDVSB1cGRhdGVyIHN0cmF0ZWd5IHdpdGggbXV0ZXggbG9ja3MKKyAqIHRvIGtlZXAgdGhlIGludGVncml0eSBvZiB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLiBDYWxsZXJzIHNob3VsZCBlbnN1cmUKKyAqIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyAqTk9UKiBjYWxsZWQgdW5kZXIgUkNVIHByb3RlY3Rpb24gb3IgaW4gY29udGV4dHMgd2hlcmUKKyAqIG11dGV4IGNhbm5vdCBiZSBsb2NrZWQuCisgKgorICogUmV0dXJuOgorICogMAkJT24gc3VjY2VzcyBPUgorICoJCUR1cGxpY2F0ZSBPUFBzIChib3RoIGZyZXEgYW5kIHZvbHQgYXJlIHNhbWUpIGFuZCBvcHAtPmF2YWlsYWJsZQorICogLUVFWElTVAlGcmVxIGFyZSBzYW1lIGFuZCB2b2x0IGFyZSBkaWZmZXJlbnQgT1IKKyAqCQlEdXBsaWNhdGUgT1BQcyAoYm90aCBmcmVxIGFuZCB2b2x0IGFyZSBzYW1lKSBhbmQgIW9wcC0+YXZhaWxhYmxlCisgKiAtRU5PTUVNCU1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUKKyAqLworc3RhdGljIGludCBfb3BwX2FkZF9keW5hbWljKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxLAorCQkJICAgIGxvbmcgdV92b2x0LCBib29sIGR5bmFtaWMpCiB7CiAJc3RydWN0IGRldmljZV9vcHAgKmRldl9vcHAgPSBOVUxMOwogCXN0cnVjdCBkZXZfcG1fb3BwICpvcHAsICpuZXdfb3BwOwpAQCAtNDQ5LDkgKzQ4OSw5IEBACiAJbmV3X29wcC0+ZHluYW1pYyA9IGR5bmFtaWM7CiAKIAkvKiBDaGVjayBmb3IgZXhpc3RpbmcgbGlzdCBmb3IgJ2RldicgKi8KLQlkZXZfb3BwID0gZmluZF9kZXZpY2Vfb3BwKGRldik7CisJZGV2X29wcCA9IF9maW5kX2RldmljZV9vcHAoZGV2KTsKIAlpZiAoSVNfRVJSKGRldl9vcHApKSB7Ci0JCWRldl9vcHAgPSBhZGRfZGV2aWNlX29wcChkZXYpOworCQlkZXZfb3BwID0gX2FkZF9kZXZpY2Vfb3BwKGRldik7CiAJCWlmICghZGV2X29wcCkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gZnJlZV9vcHA7CkBAIC01MTksMzQgKzU1OSw1MyBAQAogICogbXV0ZXggY2Fubm90IGJlIGxvY2tlZC4KICAqCiAgKiBSZXR1cm46Ci0gKiAwOgkJT24gc3VjY2VzcyBPUgorICogMAkJT24gc3VjY2VzcyBPUgogICoJCUR1cGxpY2F0ZSBPUFBzIChib3RoIGZyZXEgYW5kIHZvbHQgYXJlIHNhbWUpIGFuZCBvcHAtPmF2YWlsYWJsZQotICogLUVFWElTVDoJRnJlcSBhcmUgc2FtZSBhbmQgdm9sdCBhcmUgZGlmZmVyZW50IE9SCisgKiAtRUVYSVNUCUZyZXEgYXJlIHNhbWUgYW5kIHZvbHQgYXJlIGRpZmZlcmVudCBPUgogICoJCUR1cGxpY2F0ZSBPUFBzIChib3RoIGZyZXEgYW5kIHZvbHQgYXJlIHNhbWUpIGFuZCAhb3BwLT5hdmFpbGFibGUKLSAqIC1FTk9NRU06CU1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUKKyAqIC1FTk9NRU0JTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQogICovCiBpbnQgZGV2X3BtX29wcF9hZGQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXEsIHVuc2lnbmVkIGxvbmcgdV92b2x0KQogewotCXJldHVybiBkZXZfcG1fb3BwX2FkZF9keW5hbWljKGRldiwgZnJlcSwgdV92b2x0LCB0cnVlKTsKKwlyZXR1cm4gX29wcF9hZGRfZHluYW1pYyhkZXYsIGZyZXEsIHVfdm9sdCwgdHJ1ZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfcG1fb3BwX2FkZCk7CiAKLXN0YXRpYyB2b2lkIGtmcmVlX29wcF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQorLyoqCisgKiBfa2ZyZWVfb3BwX3JjdSgpIC0gRnJlZSBPUFAgUkNVIGhhbmRsZXIKKyAqIEBoZWFkOglSQ1UgaGVhZAorICovCitzdGF0aWMgdm9pZCBfa2ZyZWVfb3BwX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7CiAJc3RydWN0IGRldl9wbV9vcHAgKm9wcCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgZGV2X3BtX29wcCwgcmN1X2hlYWQpOwogCiAJa2ZyZWVfcmN1KG9wcCwgcmN1X2hlYWQpOwogfQogCi1zdGF0aWMgdm9pZCBrZnJlZV9kZXZpY2VfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKKy8qKgorICogX2tmcmVlX2RldmljZV9yY3UoKSAtIEZyZWUgZGV2aWNlX29wcCBSQ1UgaGFuZGxlcgorICogQGhlYWQ6CVJDVSBoZWFkCisgKi8KK3N0YXRpYyB2b2lkIF9rZnJlZV9kZXZpY2VfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX29wcCAqZGV2aWNlX29wcCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgZGV2aWNlX29wcCwgcmN1X2hlYWQpOwogCiAJa2ZyZWVfcmN1KGRldmljZV9vcHAsIHJjdV9oZWFkKTsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZfcG1fb3BwX3JlbW92ZShzdHJ1Y3QgZGV2aWNlX29wcCAqZGV2X29wcCwKLQkJCQlzdHJ1Y3QgZGV2X3BtX29wcCAqb3BwKQorLyoqCisgKiBfb3BwX3JlbW92ZSgpICAtIFJlbW92ZSBhbiBPUFAgZnJvbSBhIHRhYmxlIGRlZmluaXRpb24KKyAqIEBkZXZfb3BwOglwb2ludHMgYmFjayB0byB0aGUgZGV2aWNlX29wcCBzdHJ1Y3QgdGhpcyBvcHAgYmVsb25ncyB0bworICogQG9wcDoJcG9pbnRlciB0byB0aGUgT1BQIHRvIHJlbW92ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhbiBvcHAgZGVmaW5pdGlvbiBmcm9tIHRoZSBvcHAgbGlzdC4KKyAqCisgKiBMb2NraW5nOiBUaGUgaW50ZXJuYWwgZGV2aWNlX29wcCBhbmQgb3BwIHN0cnVjdHVyZXMgYXJlIFJDVSBwcm90ZWN0ZWQuCisgKiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGNhbGxlciBob2xkcyByZXF1aXJlZCBtdXRleCBmb3IgYW4gUkNVIHVwZGF0ZXIKKyAqIHN0cmF0ZWd5LgorICovCitzdGF0aWMgdm9pZCBfb3BwX3JlbW92ZShzdHJ1Y3QgZGV2aWNlX29wcCAqZGV2X29wcCwKKwkJCXN0cnVjdCBkZXZfcG1fb3BwICpvcHApCiB7CiAJLyoKIAkgKiBOb3RpZnkgdGhlIGNoYW5nZXMgaW4gdGhlIGF2YWlsYWJpbGl0eSBvZiB0aGUgb3BlcmFibGUKQEAgLTU1NCwxMiArNjEzLDEyIEBACiAJICovCiAJc3JjdV9ub3RpZmllcl9jYWxsX2NoYWluKCZkZXZfb3BwLT5zcmN1X2hlYWQsIE9QUF9FVkVOVF9SRU1PVkUsIG9wcCk7CiAJbGlzdF9kZWxfcmN1KCZvcHAtPm5vZGUpOwotCWNhbGxfc3JjdSgmZGV2X29wcC0+c3JjdV9oZWFkLnNyY3UsICZvcHAtPnJjdV9oZWFkLCBrZnJlZV9vcHBfcmN1KTsKKwljYWxsX3NyY3UoJmRldl9vcHAtPnNyY3VfaGVhZC5zcmN1LCAmb3BwLT5yY3VfaGVhZCwgX2tmcmVlX29wcF9yY3UpOwogCiAJaWYgKGxpc3RfZW1wdHkoJmRldl9vcHAtPm9wcF9saXN0KSkgewogCQlsaXN0X2RlbF9yY3UoJmRldl9vcHAtPm5vZGUpOwogCQljYWxsX3NyY3UoJmRldl9vcHAtPnNyY3VfaGVhZC5zcmN1LCAmZGV2X29wcC0+cmN1X2hlYWQsCi0JCQkgIGtmcmVlX2RldmljZV9yY3UpOworCQkJICBfa2ZyZWVfZGV2aWNlX3JjdSk7CiAJfQogfQogCkBAIC01NjksNiArNjI4LDEyIEBACiAgKiBAZnJlcToJT1BQIHRvIHJlbW92ZSB3aXRoIG1hdGNoaW5nICdmcmVxJwogICoKICAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhbiBvcHAgZnJvbSB0aGUgb3BwIGxpc3QuCisgKgorICogTG9ja2luZzogVGhlIGludGVybmFsIGRldmljZV9vcHAgYW5kIG9wcCBzdHJ1Y3R1cmVzIGFyZSBSQ1UgcHJvdGVjdGVkLgorICogSGVuY2UgdGhpcyBmdW5jdGlvbiBpbnRlcm5hbGx5IHVzZXMgUkNVIHVwZGF0ZXIgc3RyYXRlZ3kgd2l0aCBtdXRleCBsb2NrcworICogdG8ga2VlcCB0aGUgaW50ZWdyaXR5IG9mIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuIENhbGxlcnMgc2hvdWxkIGVuc3VyZQorICogdGhhdCB0aGlzIGZ1bmN0aW9uIGlzICpOT1QqIGNhbGxlZCB1bmRlciBSQ1UgcHJvdGVjdGlvbiBvciBpbiBjb250ZXh0cyB3aGVyZQorICogbXV0ZXggY2Fubm90IGJlIGxvY2tlZC4KICAqLwogdm9pZCBkZXZfcG1fb3BwX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcSkKIHsKQEAgLTU3OSw3ICs2NDQsNyBAQAogCS8qIEhvbGQgb3VyIGxpc3QgbW9kaWZpY2F0aW9uIGxvY2sgaGVyZSAqLwogCW11dGV4X2xvY2soJmRldl9vcHBfbGlzdF9sb2NrKTsKIAotCWRldl9vcHAgPSBmaW5kX2RldmljZV9vcHAoZGV2KTsKKwlkZXZfb3BwID0gX2ZpbmRfZGV2aWNlX29wcChkZXYpOwogCWlmIChJU19FUlIoZGV2X29wcCkpCiAJCWdvdG8gdW5sb2NrOwogCkBAIC01OTYsMTQgKzY2MSwxNCBAQAogCQlnb3RvIHVubG9jazsKIAl9CiAKLQlfX2Rldl9wbV9vcHBfcmVtb3ZlKGRldl9vcHAsIG9wcCk7CisJX29wcF9yZW1vdmUoZGV2X29wcCwgb3BwKTsKIHVubG9jazoKIAltdXRleF91bmxvY2soJmRldl9vcHBfbGlzdF9sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9wbV9vcHBfcmVtb3ZlKTsKIAogLyoqCi0gKiBvcHBfc2V0X2F2YWlsYWJpbGl0eSgpIC0gaGVscGVyIHRvIHNldCB0aGUgYXZhaWxhYmlsaXR5IG9mIGFuIG9wcAorICogX29wcF9zZXRfYXZhaWxhYmlsaXR5KCkgLSBoZWxwZXIgdG8gc2V0IHRoZSBhdmFpbGFiaWxpdHkgb2YgYW4gb3BwCiAgKiBAZGV2OgkJZGV2aWNlIGZvciB3aGljaCB3ZSBkbyB0aGlzIG9wZXJhdGlvbgogICogQGZyZXE6CQlPUFAgZnJlcXVlbmN5IHRvIG1vZGlmeSBhdmFpbGFiaWxpdHkKICAqIEBhdmFpbGFiaWxpdHlfcmVxOglhdmFpbGFiaWxpdHkgc3RhdHVzIHJlcXVlc3RlZCBmb3IgdGhpcyBvcHAKQEAgLTYxMSw3ICs2NzYsNyBAQAogICogU2V0IHRoZSBhdmFpbGFiaWxpdHkgb2YgYW4gT1BQIHdpdGggYW4gUkNVIG9wZXJhdGlvbiwgb3BwX3tlbmFibGUsZGlzYWJsZX0KICAqIHNoYXJlIGEgY29tbW9uIGxvZ2ljIHdoaWNoIGlzIGlzb2xhdGVkIGhlcmUuCiAgKgotICogUmV0dXJucyAtRUlOVkFMIGZvciBiYWQgcG9pbnRlcnMsIC1FTk9NRU0gaWYgbm8gbWVtb3J5IGF2YWlsYWJsZSBmb3IgdGhlCisgKiBSZXR1cm46IC1FSU5WQUwgZm9yIGJhZCBwb2ludGVycywgLUVOT01FTSBpZiBubyBtZW1vcnkgYXZhaWxhYmxlIGZvciB0aGUKICAqIGNvcHkgb3BlcmF0aW9uLCByZXR1cm5zIDAgaWYgbm8gbW9kaWZjYXRpb24gd2FzIGRvbmUgT1IgbW9kaWZpY2F0aW9uIHdhcwogICogc3VjY2Vzc2Z1bC4KICAqCkBAIC02MjEsOCArNjg2LDggQEAKICAqIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyAqTk9UKiBjYWxsZWQgdW5kZXIgUkNVIHByb3RlY3Rpb24gb3IgaW4gY29udGV4dHMgd2hlcmUKICAqIG11dGV4IGxvY2tpbmcgb3Igc3luY2hyb25pemVfcmN1KCkgYmxvY2tpbmcgY2FsbHMgY2Fubm90IGJlIHVzZWQuCiAgKi8KLXN0YXRpYyBpbnQgb3BwX3NldF9hdmFpbGFiaWxpdHkoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXEsCi0JCWJvb2wgYXZhaWxhYmlsaXR5X3JlcSkKK3N0YXRpYyBpbnQgX29wcF9zZXRfYXZhaWxhYmlsaXR5KHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxLAorCQkJCSBib29sIGF2YWlsYWJpbGl0eV9yZXEpCiB7CiAJc3RydWN0IGRldmljZV9vcHAgKmRldl9vcHA7CiAJc3RydWN0IGRldl9wbV9vcHAgKm5ld19vcHAsICp0bXBfb3BwLCAqb3BwID0gRVJSX1BUUigtRU5PREVWKTsKQEAgLTYzOCw3ICs3MDMsNyBAQAogCW11dGV4X2xvY2soJmRldl9vcHBfbGlzdF9sb2NrKTsKIAogCS8qIEZpbmQgdGhlIGRldmljZV9vcHAgKi8KLQlkZXZfb3BwID0gZmluZF9kZXZpY2Vfb3BwKGRldik7CisJZGV2X29wcCA9IF9maW5kX2RldmljZV9vcHAoZGV2KTsKIAlpZiAoSVNfRVJSKGRldl9vcHApKSB7CiAJCXIgPSBQVFJfRVJSKGRldl9vcHApOwogCQlkZXZfd2FybihkZXYsICIlczogRGV2aWNlIE9QUCBub3QgZm91bmQgKCVkKVxuIiwgX19mdW5jX18sIHIpOwpAQCAtNjY4LDcgKzczMyw3IEBACiAKIAlsaXN0X3JlcGxhY2VfcmN1KCZvcHAtPm5vZGUsICZuZXdfb3BwLT5ub2RlKTsKIAltdXRleF91bmxvY2soJmRldl9vcHBfbGlzdF9sb2NrKTsKLQljYWxsX3NyY3UoJmRldl9vcHAtPnNyY3VfaGVhZC5zcmN1LCAmb3BwLT5yY3VfaGVhZCwga2ZyZWVfb3BwX3JjdSk7CisJY2FsbF9zcmN1KCZkZXZfb3BwLT5zcmN1X2hlYWQuc3JjdSwgJm9wcC0+cmN1X2hlYWQsIF9rZnJlZV9vcHBfcmN1KTsKIAogCS8qIE5vdGlmeSB0aGUgY2hhbmdlIG9mIHRoZSBPUFAgYXZhaWxhYmlsaXR5ICovCiAJaWYgKGF2YWlsYWJpbGl0eV9yZXEpCkBAIC03MDAsMTAgKzc2NSwxNCBAQAogICogaW50ZWdyaXR5IG9mIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuIENhbGxlcnMgc2hvdWxkIGVuc3VyZSB0aGF0CiAgKiB0aGlzIGZ1bmN0aW9uIGlzICpOT1QqIGNhbGxlZCB1bmRlciBSQ1UgcHJvdGVjdGlvbiBvciBpbiBjb250ZXh0cyB3aGVyZQogICogbXV0ZXggbG9ja2luZyBvciBzeW5jaHJvbml6ZV9yY3UoKSBibG9ja2luZyBjYWxscyBjYW5ub3QgYmUgdXNlZC4KKyAqCisgKiBSZXR1cm46IC1FSU5WQUwgZm9yIGJhZCBwb2ludGVycywgLUVOT01FTSBpZiBubyBtZW1vcnkgYXZhaWxhYmxlIGZvciB0aGUKKyAqIGNvcHkgb3BlcmF0aW9uLCByZXR1cm5zIDAgaWYgbm8gbW9kaWZjYXRpb24gd2FzIGRvbmUgT1IgbW9kaWZpY2F0aW9uIHdhcworICogc3VjY2Vzc2Z1bC4KICAqLwogaW50IGRldl9wbV9vcHBfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxKQogewotCXJldHVybiBvcHBfc2V0X2F2YWlsYWJpbGl0eShkZXYsIGZyZXEsIHRydWUpOworCXJldHVybiBfb3BwX3NldF9hdmFpbGFiaWxpdHkoZGV2LCBmcmVxLCB0cnVlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9wbV9vcHBfZW5hYmxlKTsKIApAQCAtNzIyLDI2ICs3OTEsNDEgQEAKICAqIGludGVncml0eSBvZiB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLiBDYWxsZXJzIHNob3VsZCBlbnN1cmUgdGhhdAogICogdGhpcyBmdW5jdGlvbiBpcyAqTk9UKiBjYWxsZWQgdW5kZXIgUkNVIHByb3RlY3Rpb24gb3IgaW4gY29udGV4dHMgd2hlcmUKICAqIG11dGV4IGxvY2tpbmcgb3Igc3luY2hyb25pemVfcmN1KCkgYmxvY2tpbmcgY2FsbHMgY2Fubm90IGJlIHVzZWQuCisgKgorICogUmV0dXJuOiAtRUlOVkFMIGZvciBiYWQgcG9pbnRlcnMsIC1FTk9NRU0gaWYgbm8gbWVtb3J5IGF2YWlsYWJsZSBmb3IgdGhlCisgKiBjb3B5IG9wZXJhdGlvbiwgcmV0dXJucyAwIGlmIG5vIG1vZGlmY2F0aW9uIHdhcyBkb25lIE9SIG1vZGlmaWNhdGlvbiB3YXMKKyAqIHN1Y2Nlc3NmdWwuCiAgKi8KIGludCBkZXZfcG1fb3BwX2Rpc2FibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXEpCiB7Ci0JcmV0dXJuIG9wcF9zZXRfYXZhaWxhYmlsaXR5KGRldiwgZnJlcSwgZmFsc2UpOworCXJldHVybiBfb3BwX3NldF9hdmFpbGFiaWxpdHkoZGV2LCBmcmVxLCBmYWxzZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfcG1fb3BwX2Rpc2FibGUpOwogCiAvKioKICAqIGRldl9wbV9vcHBfZ2V0X25vdGlmaWVyKCkgLSBmaW5kIG5vdGlmaWVyX2hlYWQgb2YgdGhlIGRldmljZSB3aXRoIG9wcAogICogQGRldjoJZGV2aWNlIHBvaW50ZXIgdXNlZCB0byBsb29rdXAgZGV2aWNlIE9QUHMuCisgKgorICogUmV0dXJuOiBwb2ludGVyIHRvICBub3RpZmllciBoZWFkIGlmIGZvdW5kLCBvdGhlcndpc2UgLUVOT0RFViBvcgorICogLUVJTlZBTCBiYXNlZCBvbiB0eXBlIG9mIGVycm9yIGNhc3RlZCBhcyBwb2ludGVyLiB2YWx1ZSBtdXN0IGJlIGNoZWNrZWQKKyAqICB3aXRoIElTX0VSUiB0byBkZXRlcm1pbmUgdmFsaWQgcG9pbnRlciBvciBlcnJvciByZXN1bHQuCisgKgorICogTG9ja2luZzogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkuIGRldl9vcHAgaXMgYSBSQ1UKKyAqIHByb3RlY3RlZCBwb2ludGVyLiBUaGUgcmVhc29uIGZvciB0aGUgc2FtZSBpcyB0aGF0IHRoZSBvcHAgcG9pbnRlciB3aGljaCBpcworICogcmV0dXJuZWQgd2lsbCByZW1haW4gdmFsaWQgZm9yIHVzZSB3aXRoIG9wcF9nZXRfe3ZvbHRhZ2UsIGZyZXF9IG9ubHkgd2hpbGUKKyAqIHVuZGVyIHRoZSBsb2NrZWQgYXJlYS4gVGhlIHBvaW50ZXIgcmV0dXJuZWQgbXVzdCBiZSB1c2VkIHByaW9yIHRvIHVubG9ja2luZworICogd2l0aCByY3VfcmVhZF91bmxvY2soKSB0byBtYWludGFpbiB0aGUgaW50ZWdyaXR5IG9mIHRoZSBwb2ludGVyLgogICovCiBzdHJ1Y3Qgc3JjdV9ub3RpZmllcl9oZWFkICpkZXZfcG1fb3BwX2dldF9ub3RpZmllcihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRldmljZV9vcHAgKmRldl9vcHAgPSBmaW5kX2RldmljZV9vcHAoZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlX29wcCAqZGV2X29wcCA9IF9maW5kX2RldmljZV9vcHAoZGV2KTsKIAogCWlmIChJU19FUlIoZGV2X29wcCkpCiAJCXJldHVybiBFUlJfQ0FTVChkZXZfb3BwKTsgLyogbWF0Y2hpbmcgdHlwZSAqLwogCiAJcmV0dXJuICZkZXZfb3BwLT5zcmN1X2hlYWQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChkZXZfcG1fb3BwX2dldF9ub3RpZmllcik7CiAKICNpZmRlZiBDT05GSUdfT0YKIC8qKgpAQCAtNzQ5LDYgKzgzMywyMiBAQAogICogQGRldjoJZGV2aWNlIHBvaW50ZXIgdXNlZCB0byBsb29rdXAgZGV2aWNlIE9QUHMuCiAgKgogICogUmVnaXN0ZXIgdGhlIGluaXRpYWwgT1BQIHRhYmxlIHdpdGggdGhlIE9QUCBsaWJyYXJ5IGZvciBnaXZlbiBkZXZpY2UuCisgKgorICogTG9ja2luZzogVGhlIGludGVybmFsIGRldmljZV9vcHAgYW5kIG9wcCBzdHJ1Y3R1cmVzIGFyZSBSQ1UgcHJvdGVjdGVkLgorICogSGVuY2UgdGhpcyBmdW5jdGlvbiBpbmRpcmVjdGx5IHVzZXMgUkNVIHVwZGF0ZXIgc3RyYXRlZ3kgd2l0aCBtdXRleCBsb2NrcworICogdG8ga2VlcCB0aGUgaW50ZWdyaXR5IG9mIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuIENhbGxlcnMgc2hvdWxkIGVuc3VyZQorICogdGhhdCB0aGlzIGZ1bmN0aW9uIGlzICpOT1QqIGNhbGxlZCB1bmRlciBSQ1UgcHJvdGVjdGlvbiBvciBpbiBjb250ZXh0cyB3aGVyZQorICogbXV0ZXggY2Fubm90IGJlIGxvY2tlZC4KKyAqCisgKiBSZXR1cm46CisgKiAwCQlPbiBzdWNjZXNzIE9SCisgKgkJRHVwbGljYXRlIE9QUHMgKGJvdGggZnJlcSBhbmQgdm9sdCBhcmUgc2FtZSkgYW5kIG9wcC0+YXZhaWxhYmxlCisgKiAtRUVYSVNUCUZyZXEgYXJlIHNhbWUgYW5kIHZvbHQgYXJlIGRpZmZlcmVudCBPUgorICoJCUR1cGxpY2F0ZSBPUFBzIChib3RoIGZyZXEgYW5kIHZvbHQgYXJlIHNhbWUpIGFuZCAhb3BwLT5hdmFpbGFibGUKKyAqIC1FTk9NRU0JTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQorICogLUVOT0RFVgl3aGVuICdvcGVyYXRpbmctcG9pbnRzJyBwcm9wZXJ0eSBpcyBub3QgZm91bmQgb3IgaXMgaW52YWxpZCBkYXRhCisgKgkJaW4gZGV2aWNlIG5vZGUuCisgKiAtRU5PREFUQQl3aGVuIGVtcHR5ICdvcGVyYXRpbmctcG9pbnRzJyBwcm9wZXJ0eSBpcyBmb3VuZAogICovCiBpbnQgb2ZfaW5pdF9vcHBfdGFibGUoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtNzc3LDcgKzg3Nyw3IEBACiAJCXVuc2lnbmVkIGxvbmcgZnJlcSA9IGJlMzJfdG9fY3B1cCh2YWwrKykgKiAxMDAwOwogCQl1bnNpZ25lZCBsb25nIHZvbHQgPSBiZTMyX3RvX2NwdXAodmFsKyspOwogCi0JCWlmIChkZXZfcG1fb3BwX2FkZF9keW5hbWljKGRldiwgZnJlcSwgdm9sdCwgZmFsc2UpKQorCQlpZiAoX29wcF9hZGRfZHluYW1pYyhkZXYsIGZyZXEsIHZvbHQsIGZhbHNlKSkKIAkJCWRldl93YXJuKGRldiwgIiVzOiBGYWlsZWQgdG8gYWRkIE9QUCAlbGRcbiIsCiAJCQkJIF9fZnVuY19fLCBmcmVxKTsKIAkJbnIgLT0gMjsKQEAgLTc5Miw2ICs4OTIsMTIgQEAKICAqIEBkZXY6CWRldmljZSBwb2ludGVyIHVzZWQgdG8gbG9va3VwIGRldmljZSBPUFBzLgogICoKICAqIEZyZWUgT1BQcyBjcmVhdGVkIHVzaW5nIHN0YXRpYyBlbnRyaWVzIHByZXNlbnQgaW4gRFQuCisgKgorICogTG9ja2luZzogVGhlIGludGVybmFsIGRldmljZV9vcHAgYW5kIG9wcCBzdHJ1Y3R1cmVzIGFyZSBSQ1UgcHJvdGVjdGVkLgorICogSGVuY2UgdGhpcyBmdW5jdGlvbiBpbmRpcmVjdGx5IHVzZXMgUkNVIHVwZGF0ZXIgc3RyYXRlZ3kgd2l0aCBtdXRleCBsb2NrcworICogdG8ga2VlcCB0aGUgaW50ZWdyaXR5IG9mIHRoZSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuIENhbGxlcnMgc2hvdWxkIGVuc3VyZQorICogdGhhdCB0aGlzIGZ1bmN0aW9uIGlzICpOT1QqIGNhbGxlZCB1bmRlciBSQ1UgcHJvdGVjdGlvbiBvciBpbiBjb250ZXh0cyB3aGVyZQorICogbXV0ZXggY2Fubm90IGJlIGxvY2tlZC4KICAqLwogdm9pZCBvZl9mcmVlX29wcF90YWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC03OTksNyArOTA1LDcgQEAKIAlzdHJ1Y3QgZGV2X3BtX29wcCAqb3BwLCAqdG1wOwogCiAJLyogQ2hlY2sgZm9yIGV4aXN0aW5nIGxpc3QgZm9yICdkZXYnICovCi0JZGV2X29wcCA9IGZpbmRfZGV2aWNlX29wcChkZXYpOworCWRldl9vcHAgPSBfZmluZF9kZXZpY2Vfb3BwKGRldik7CiAJaWYgKElTX0VSUihkZXZfb3BwKSkgewogCQlpbnQgZXJyb3IgPSBQVFJfRVJSKGRldl9vcHApOwogCQlpZiAoZXJyb3IgIT0gLUVOT0RFVikKQEAgLTgxNiw3ICs5MjIsNyBAQAogCS8qIEZyZWUgc3RhdGljIE9QUHMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob3BwLCB0bXAsICZkZXZfb3BwLT5vcHBfbGlzdCwgbm9kZSkgewogCQlpZiAoIW9wcC0+ZHluYW1pYykKLQkJCV9fZGV2X3BtX29wcF9yZW1vdmUoZGV2X29wcCwgb3BwKTsKKwkJCV9vcHBfcmVtb3ZlKGRldl9vcHAsIG9wcCk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZkZXZfb3BwX2xpc3RfbG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcW9zLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcW9zLmMKaW5kZXggYThmZTRjMS4uZTU2ZDUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3Fvcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9xb3MuYwpAQCAtNjQsNiArNjQsOCBAQAogCXN0cnVjdCBwbV9xb3NfZmxhZ3MgKnBxZjsKIAlzMzIgdmFsOwogCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2LT5wb3dlci5sb2NrKTsKKwogCWlmIChJU19FUlJfT1JfTlVMTChxb3MpKQogCQlyZXR1cm4gUE1fUU9TX0ZMQUdTX1VOREVGSU5FRDsKIApAQCAtMTA0LDYgKzEwNiw4IEBACiAgKi8KIHMzMiBfX2Rldl9wbV9xb3NfcmVhZF92YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZGV2LT5wb3dlci5sb2NrKTsKKwogCXJldHVybiBJU19FUlJfT1JfTlVMTChkZXYtPnBvd2VyLnFvcykgPwogCQkwIDogcG1fcW9zX3JlYWRfdmFsdWUoJmRldi0+cG93ZXIucW9zLT5yZXN1bWVfbGF0ZW5jeSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL2ludGVybmFsLmggYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL2ludGVybmFsLmgKaW5kZXggMGRhNTg2NS4uYmViOGIyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3JlZ21hcC9pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvYmFzZS9yZWdtYXAvaW50ZXJuYWwuaApAQCAtNTEsOSArNTEsMTEgQEAKIHN0cnVjdCByZWdtYXAgewogCXVuaW9uIHsKIAkJc3RydWN0IG11dGV4IG11dGV4OwotCQlzcGlubG9ja190IHNwaW5sb2NrOworCQlzdHJ1Y3QgeworCQkJc3BpbmxvY2tfdCBzcGlubG9jazsKKwkJCXVuc2lnbmVkIGxvbmcgc3BpbmxvY2tfZmxhZ3M7CisJCX07CiAJfTsKLQl1bnNpZ25lZCBsb25nIHNwaW5sb2NrX2ZsYWdzOwogCXJlZ21hcF9sb2NrIGxvY2s7CiAJcmVnbWFwX3VubG9jayB1bmxvY2s7CiAJdm9pZCAqbG9ja19hcmc7IC8qIFRoaXMgaXMgcGFzc2VkIHRvIGxvY2svdW5sb2NrIGZ1bmN0aW9ucyAqLwpAQCAtMjMzLDYgKzIzNSwxMCBAQAogCiB2b2lkIHJlZ21hcF9hc3luY19jb21wbGV0ZV9jYihzdHJ1Y3QgcmVnbWFwX2FzeW5jICphc3luYywgaW50IHJldCk7CiAKK2VudW0gcmVnbWFwX2VuZGlhbiByZWdtYXBfZ2V0X3ZhbF9lbmRpYW4oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgY29uc3Qgc3RydWN0IHJlZ21hcF9idXMgKmJ1cywKKwkJCQkJIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnICpjb25maWcpOworCiBleHRlcm4gc3RydWN0IHJlZ2NhY2hlX29wcyByZWdjYWNoZV9yYnRyZWVfb3BzOwogZXh0ZXJuIHN0cnVjdCByZWdjYWNoZV9vcHMgcmVnY2FjaGVfbHpvX29wczsKIGV4dGVybiBzdHJ1Y3QgcmVnY2FjaGVfb3BzIHJlZ2NhY2hlX2ZsYXRfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAtYWM5Ny5jIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAtYWM5Ny5jCmluZGV4IGU0YzQ1ZDIuLjhkMzA0ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLWFjOTcuYworKysgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1hYzk3LmMKQEAgLTc0LDggKzc0LDggQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfYnVzIGFjOTdfcmVnbWFwX2J1cyA9IHsKLQkJLnJlZ193cml0ZSA9IHJlZ21hcF9hYzk3X3JlZ193cml0ZSwKLQkJLnJlZ19yZWFkID0gcmVnbWFwX2FjOTdfcmVnX3JlYWQsCisJLnJlZ193cml0ZSA9IHJlZ21hcF9hYzk3X3JlZ193cml0ZSwKKwkucmVnX3JlYWQgPSByZWdtYXBfYWM5N19yZWdfcmVhZCwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAtaTJjLmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1pMmMuYwppbmRleCAwNTMxNTBhLi40Yjc2ZTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1pMmMuYworKysgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC1pMmMuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogc3RhdGljIGludCByZWdtYXBfc21idXNfYnl0ZV9yZWdfcmVhZCh2b2lkICpjb250ZXh0LCB1bnNpZ25lZCBpbnQgcmVnLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCAqdmFsKQpAQCAtODcsNiArODgsNDIgQEAKIAkucmVnX3JlYWQgPSByZWdtYXBfc21idXNfd29yZF9yZWdfcmVhZCwKIH07CiAKK3N0YXRpYyBpbnQgcmVnbWFwX3NtYnVzX3dvcmRfcmVhZF9zd2FwcGVkKHZvaWQgKmNvbnRleHQsIHVuc2lnbmVkIGludCByZWcsCisJCQkJCSAgdW5zaWduZWQgaW50ICp2YWwpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjID0gdG9faTJjX2NsaWVudChkZXYpOworCWludCByZXQ7CisKKwlpZiAocmVnID4gMHhmZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQoaTJjLCByZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJKnZhbCA9IHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJlZ21hcF9zbWJ1c193b3JkX3dyaXRlX3N3YXBwZWQodm9pZCAqY29udGV4dCwgdW5zaWduZWQgaW50IHJlZywKKwkJCQkJICAgdW5zaWduZWQgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250ZXh0OworCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSB0b19pMmNfY2xpZW50KGRldik7CisKKwlpZiAodmFsID4gMHhmZmZmIHx8IHJlZyA+IDB4ZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV93b3JkX3N3YXBwZWQoaTJjLCByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwX2J1cyByZWdtYXBfc21idXNfd29yZF9zd2FwcGVkID0geworCS5yZWdfd3JpdGUgPSByZWdtYXBfc21idXNfd29yZF93cml0ZV9zd2FwcGVkLAorCS5yZWdfcmVhZCA9IHJlZ21hcF9zbWJ1c193b3JkX3JlYWRfc3dhcHBlZCwKK307CisKIHN0YXRpYyBpbnQgcmVnbWFwX2kyY193cml0ZSh2b2lkICpjb250ZXh0LCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGV4dDsKQEAgLTE4MCw3ICsyMTcsMTQgQEAKIAllbHNlIGlmIChjb25maWctPnZhbF9iaXRzID09IDE2ICYmIGNvbmZpZy0+cmVnX2JpdHMgPT0gOCAmJgogCQkgaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoaTJjLT5hZGFwdGVyLAogCQkJCQkgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBKSkKLQkJcmV0dXJuICZyZWdtYXBfc21idXNfd29yZDsKKwkJc3dpdGNoIChyZWdtYXBfZ2V0X3ZhbF9lbmRpYW4oJmkyYy0+ZGV2LCBOVUxMLCBjb25maWcpKSB7CisJCWNhc2UgUkVHTUFQX0VORElBTl9MSVRUTEU6CisJCQlyZXR1cm4gJnJlZ21hcF9zbWJ1c193b3JkOworCQljYXNlIFJFR01BUF9FTkRJQU5fQklHOgorCQkJcmV0dXJuICZyZWdtYXBfc21idXNfd29yZF9zd2FwcGVkOworCQlkZWZhdWx0OgkJLyogZXZlcnl0aGluZyBlbHNlIGlzIG5vdCBzdXBwb3J0ZWQgKi8KKwkJCWJyZWFrOworCQl9CiAJZWxzZSBpZiAoY29uZmlnLT52YWxfYml0cyA9PSA4ICYmIGNvbmZpZy0+cmVnX2JpdHMgPT0gOCAmJgogCQkgaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoaTJjLT5hZGFwdGVyLAogCQkJCQkgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLmMgYi9kcml2ZXJzL2Jhc2UvcmVnbWFwL3JlZ21hcC5jCmluZGV4IGQyZjhhODEuLmY5OWIwOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9yZWdtYXAvcmVnbWFwLmMKKysrIGIvZHJpdmVycy9iYXNlL3JlZ21hcC9yZWdtYXAuYwpAQCAtNDczLDkgKzQ3Myw5IEBACiAJcmV0dXJuIFJFR01BUF9FTkRJQU5fQklHOwogfQogCi1zdGF0aWMgZW51bSByZWdtYXBfZW5kaWFuIHJlZ21hcF9nZXRfdmFsX2VuZGlhbihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCWNvbnN0IHN0cnVjdCByZWdtYXBfYnVzICpidXMsCi0JCQkJCWNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnICpjb25maWcpCitlbnVtIHJlZ21hcF9lbmRpYW4gcmVnbWFwX2dldF92YWxfZW5kaWFuKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJIGNvbnN0IHN0cnVjdCByZWdtYXBfYnVzICpidXMsCisJCQkJCSBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyAqY29uZmlnKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAJZW51bSByZWdtYXBfZW5kaWFuIGVuZGlhbjsKQEAgLTUxMyw2ICs1MTMsNyBAQAogCS8qIFVzZSB0aGlzIGlmIG5vIG90aGVyIHZhbHVlIHdhcyBmb3VuZCAqLwogCXJldHVybiBSRUdNQVBfRU5ESUFOX0JJRzsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ21hcF9nZXRfdmFsX2VuZGlhbik7CiAKIC8qKgogICogcmVnbWFwX2luaXQoKTogSW5pdGlhbGlzZSByZWdpc3RlciBtYXAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9iY21hX3ByaXZhdGUuaCBiL2RyaXZlcnMvYmNtYS9iY21hX3ByaXZhdGUuaAppbmRleCAzMTRhZTQwLi5hYzZjNWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JjbWEvYmNtYV9wcml2YXRlLmgKKysrIGIvZHJpdmVycy9iY21hL2JjbWFfcHJpdmF0ZS5oCkBAIC0yNSwyMiArMjUsMTggQEAKIGJvb2wgYmNtYV93YWl0X3ZhbHVlKHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgdTE2IHJlZywgdTMyIG1hc2ssIHUzMiB2YWx1ZSwKIAkJICAgICBpbnQgdGltZW91dCk7CiB2b2lkIGJjbWFfcHJlcGFyZV9jb3JlKHN0cnVjdCBiY21hX2J1cyAqYnVzLCBzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUpOwordm9pZCBiY21hX2luaXRfYnVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKTsKIGludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7CiB2b2lkIGJjbWFfYnVzX3VucmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpOwotaW50IF9faW5pdCBiY21hX2J1c19lYXJseV9yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cywKLQkJCQkgICBzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmVfY2MsCi0JCQkJICAgc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlX21pcHMpOworaW50IF9faW5pdCBiY21hX2J1c19lYXJseV9yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7CiAjaWZkZWYgQ09ORklHX1BNCiBpbnQgYmNtYV9idXNfc3VzcGVuZChzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7CiBpbnQgYmNtYV9idXNfcmVzdW1lKHN0cnVjdCBiY21hX2J1cyAqYnVzKTsKICNlbmRpZgogCiAvKiBzY2FuLmMgKi8KK3ZvaWQgYmNtYV9kZXRlY3RfY2hpcChzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7CiBpbnQgYmNtYV9idXNfc2NhbihzdHJ1Y3QgYmNtYV9idXMgKmJ1cyk7Ci1pbnQgX19pbml0IGJjbWFfYnVzX3NjYW5fZWFybHkoc3RydWN0IGJjbWFfYnVzICpidXMsCi0JCQkgICAgICAgc3RydWN0IGJjbWFfZGV2aWNlX2lkICptYXRjaCwKLQkJCSAgICAgICBzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUpOwotdm9pZCBiY21hX2luaXRfYnVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKTsKIAogLyogc3Byb20uYyAqLwogaW50IGJjbWFfc3Byb21fZ2V0KHN0cnVjdCBiY21hX2J1cyAqYnVzKTsKQEAgLTExMSw2ICsxMDcsMTQgQEAKICNpZmRlZiBDT05GSUdfQkNNQV9EUklWRVJfUENJX0hPU1RNT0RFCiBib29sIGJjbWFfY29yZV9wY2lfaXNfaW5faG9zdG1vZGUoc3RydWN0IGJjbWFfZHJ2X3BjaSAqcGMpOwogdm9pZCBiY21hX2NvcmVfcGNpX2hvc3Rtb2RlX2luaXQoc3RydWN0IGJjbWFfZHJ2X3BjaSAqcGMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgYm9vbCBiY21hX2NvcmVfcGNpX2lzX2luX2hvc3Rtb2RlKHN0cnVjdCBiY21hX2Rydl9wY2kgKnBjKQoreworCXJldHVybiBmYWxzZTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBiY21hX2NvcmVfcGNpX2hvc3Rtb2RlX2luaXQoc3RydWN0IGJjbWFfZHJ2X3BjaSAqcGMpCit7Cit9CiAjZW5kaWYgLyogQ09ORklHX0JDTUFfRFJJVkVSX1BDSV9IT1NUTU9ERSAqLwogCiAjaWZkZWYgQ09ORklHX0JDTUFfRFJJVkVSX0dQSU8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9kcml2ZXJfY2hpcGNvbW1vbi5jIGIvZHJpdmVycy9iY21hL2RyaXZlcl9jaGlwY29tbW9uLmMKaW5kZXggMTlmNjc5Ni4uYjdjOGE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iY21hL2RyaXZlcl9jaGlwY29tbW9uLmMKKysrIGIvZHJpdmVycy9iY21hL2RyaXZlcl9jaGlwY29tbW9uLmMKQEAgLTc5LDcgKzc5LDkgQEAKIAogCWlmIChjYy0+Y2FwYWJpbGl0aWVzICYgQkNNQV9DQ19DQVBfUE1VKSB7CiAJCWlmIChidXMtPmNoaXBpbmZvLmlkID09IEJDTUFfQ0hJUF9JRF9CQ000NzA2KQotCQkJLyogNDcwNiBDQyBhbmQgUE1VIHdhdGNoZG9ncyBhcmUgY2xvY2tlZCBhdCAxLzQgb2YgQUxQIGNsb2NrICovCisJCQkvKiA0NzA2IENDIGFuZCBQTVUgd2F0Y2hkb2dzIGFyZSBjbG9ja2VkIGF0IDEvNCBvZiBBTFAKKwkJCSAqIGNsb2NrCisJCQkgKi8KIAkJCXJldHVybiBiY21hX2NoaXBjb19nZXRfYWxwX2Nsb2NrKGNjKSAvIDQwMDA7CiAJCWVsc2UKIAkJCS8qIGJhc2VkIG9uIDMyS0h6IElMUCBjbG9jayAqLwpAQCAtOTcsNyArOTksOCBAQAogCXdkdC5kcml2ZXJfZGF0YSA9IGNjOwogCXdkdC50aW1lcl9zZXQgPSBiY21hX2NoaXBjb193YXRjaGRvZ190aW1lcl9zZXRfd2R0OwogCXdkdC50aW1lcl9zZXRfbXMgPSBiY21hX2NoaXBjb193YXRjaGRvZ190aW1lcl9zZXRfbXNfd2R0OwotCXdkdC5tYXhfdGltZXJfbXMgPSBiY21hX2NoaXBjb193YXRjaGRvZ19nZXRfbWF4X3RpbWVyKGNjKSAvIGNjLT50aWNrc19wZXJfbXM7CisJd2R0Lm1heF90aW1lcl9tcyA9CisJCWJjbWFfY2hpcGNvX3dhdGNoZG9nX2dldF9tYXhfdGltZXIoY2MpIC8gY2MtPnRpY2tzX3Blcl9tczsKIAogCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YShOVUxMLCAiYmNtNDd4eC13ZHQiLAogCQkJCQkgICAgIGNjLT5jb3JlLT5idXMtPm51bSwgJndkdCwKQEAgLTE3NSw3ICsxNzgsNiBAQAogdTMyIGJjbWFfY2hpcGNvX3dhdGNoZG9nX3RpbWVyX3NldChzdHJ1Y3QgYmNtYV9kcnZfY2MgKmNjLCB1MzIgdGlja3MpCiB7CiAJdTMyIG1heHQ7Ci0JZW51bSBiY21hX2Nsa21vZGUgY2xrbW9kZTsKIAogCW1heHQgPSBiY21hX2NoaXBjb193YXRjaGRvZ19nZXRfbWF4X3RpbWVyKGNjKTsKIAlpZiAoY2MtPmNhcGFiaWxpdGllcyAmIEJDTUFfQ0NfQ0FQX1BNVSkgewpAQCAtMTg1LDggKzE4NywxMyBAQAogCQkJdGlja3MgPSBtYXh0OwogCQliY21hX2NjX3dyaXRlMzIoY2MsIEJDTUFfQ0NfUE1VX1dBVENIRE9HLCB0aWNrcyk7CiAJfSBlbHNlIHsKLQkJY2xrbW9kZSA9IHRpY2tzID8gQkNNQV9DTEtNT0RFX0ZBU1QgOiBCQ01BX0NMS01PREVfRFlOQU1JQzsKLQkJYmNtYV9jb3JlX3NldF9jbG9ja21vZGUoY2MtPmNvcmUsIGNsa21vZGUpOworCQlzdHJ1Y3QgYmNtYV9idXMgKmJ1cyA9IGNjLT5jb3JlLT5idXM7CisKKwkJaWYgKGJ1cy0+Y2hpcGluZm8uaWQgIT0gQkNNQV9DSElQX0lEX0JDTTQ3MDcgJiYKKwkJICAgIGJ1cy0+Y2hpcGluZm8uaWQgIT0gQkNNQV9DSElQX0lEX0JDTTUzMDE4KQorCQkJYmNtYV9jb3JlX3NldF9jbG9ja21vZGUoY2MtPmNvcmUsCisJCQkJCQl0aWNrcyA/IEJDTUFfQ0xLTU9ERV9GQVNUIDogQkNNQV9DTEtNT0RFX0RZTkFNSUMpOworCiAJCWlmICh0aWNrcyA+IG1heHQpCiAJCQl0aWNrcyA9IG1heHQ7CiAJCS8qIGluc3RhbnQgTk1JICovCkBAIC0zMzUsNyArMzQyLDggQEAKIAkJCQkgICAgICAgfCBCQ01BX0NDX0NPUkVDVExfVUFSVENMS0VOKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWJjbWFfZXJyKGNjLT5jb3JlLT5idXMsICJzZXJpYWwgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGRldmljZSBjY3JldjogMHgleFxuIiwgY2NyZXYpOworCQliY21hX2VycihjYy0+Y29yZS0+YnVzLCAic2VyaWFsIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UgY2NyZXY6IDB4JXhcbiIsCisJCQkgY2NyZXYpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvZHJpdmVyX3BjaS5jIGIvZHJpdmVycy9iY21hL2RyaXZlcl9wY2kuYwppbmRleCA1MDMyOWQxLi43ODY2NjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JjbWEvZHJpdmVyX3BjaS5jCisrKyBiL2RyaXZlcnMvYmNtYS9kcml2ZXJfcGNpLmMKQEAgLTE0NSw2ICsxNDUsNDcgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFYXJseSBpbml0LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBiY21hX2NvcmVfcGNpX2ZpeGNmZyhzdHJ1Y3QgYmNtYV9kcnZfcGNpICpwYykKK3sKKwlzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUgPSBwYy0+Y29yZTsKKwl1MTYgdmFsMTYsIGNvcmVfaW5kZXg7CisJdWludCByZWdvZmY7CisKKwlyZWdvZmYgPSBCQ01BX0NPUkVfUENJX1NQUk9NKEJDTUFfQ09SRV9QQ0lfU1BST01fUElfT0ZGU0VUKTsKKwljb3JlX2luZGV4ID0gKHUxNiljb3JlLT5jb3JlX2luZGV4OworCisJdmFsMTYgPSBwY2ljb3JlX3JlYWQxNihwYywgcmVnb2ZmKTsKKwlpZiAoKCh2YWwxNiAmIEJDTUFfQ09SRV9QQ0lfU1BST01fUElfTUFTSykgPj4gQkNNQV9DT1JFX1BDSV9TUFJPTV9QSV9TSElGVCkKKwkgICAgICE9IGNvcmVfaW5kZXgpIHsKKwkJdmFsMTYgPSAoY29yZV9pbmRleCA8PCBCQ01BX0NPUkVfUENJX1NQUk9NX1BJX1NISUZUKSB8CisJCQkodmFsMTYgJiB+QkNNQV9DT1JFX1BDSV9TUFJPTV9QSV9NQVNLKTsKKwkJcGNpY29yZV93cml0ZTE2KHBjLCByZWdvZmYsIHZhbDE2KTsKKwl9Cit9CisKKy8qCisgKiBBcHBseSBzb21lIGVhcmx5IGZpeGVzIHJlcXVpcmVkIGJlZm9yZSBhY2Nlc3NpbmcgU1BST00uCisgKiBTZWUgYWxzbyBzaV9wY2lfZml4Y2ZnLgorICovCit2b2lkIGJjbWFfY29yZV9wY2lfZWFybHlfaW5pdChzdHJ1Y3QgYmNtYV9kcnZfcGNpICpwYykKK3sKKwlpZiAocGMtPmVhcmx5X3NldHVwX2RvbmUpCisJCXJldHVybjsKKworCXBjLT5ob3N0bW9kZSA9IGJjbWFfY29yZV9wY2lfaXNfaW5faG9zdG1vZGUocGMpOworCWlmIChwYy0+aG9zdG1vZGUpCisJCWdvdG8gb3V0OworCisJYmNtYV9jb3JlX3BjaV9maXhjZmcocGMpOworCitvdXQ6CisJcGMtPmVhcmx5X3NldHVwX2RvbmUgPSB0cnVlOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFdvcmthcm91bmRzLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0xNzUsMjQgKzIxNiw2IEBACiAJCSAgICAgICAgICAgICAgICAgICAgIHRtcCAmIH5CQ01BX0NPUkVfUENJX1BMTF9DVFJMX0ZSRVFERVRfRU4pOwogfQogCi1zdGF0aWMgdm9pZCBiY21hX2NvcmVfcGNpX2ZpeGNmZyhzdHJ1Y3QgYmNtYV9kcnZfcGNpICpwYykKLXsKLQlzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUgPSBwYy0+Y29yZTsKLQl1MTYgdmFsMTYsIGNvcmVfaW5kZXg7Ci0JdWludCByZWdvZmY7Ci0KLQlyZWdvZmYgPSBCQ01BX0NPUkVfUENJX1NQUk9NKEJDTUFfQ09SRV9QQ0lfU1BST01fUElfT0ZGU0VUKTsKLQljb3JlX2luZGV4ID0gKHUxNiljb3JlLT5jb3JlX2luZGV4OwotCi0JdmFsMTYgPSBwY2ljb3JlX3JlYWQxNihwYywgcmVnb2ZmKTsKLQlpZiAoKCh2YWwxNiAmIEJDTUFfQ09SRV9QQ0lfU1BST01fUElfTUFTSykgPj4gQkNNQV9DT1JFX1BDSV9TUFJPTV9QSV9TSElGVCkKLQkgICAgICE9IGNvcmVfaW5kZXgpIHsKLQkJdmFsMTYgPSAoY29yZV9pbmRleCA8PCBCQ01BX0NPUkVfUENJX1NQUk9NX1BJX1NISUZUKSB8Ci0JCQkodmFsMTYgJiB+QkNNQV9DT1JFX1BDSV9TUFJPTV9QSV9NQVNLKTsKLQkJcGNpY29yZV93cml0ZTE2KHBjLCByZWdvZmYsIHZhbDE2KTsKLQl9Ci19Ci0KIC8qIEZpeCBNSVNDIGNvbmZpZyB0byBhbGxvdyBjb21pbmcgb3V0IG9mIEwyL0wzLVJlYWR5IHN0YXRlIHcvbyBQUlNUICovCiAvKiBOZWVkcyB0byBoYXBwZW4gd2hlbiBjb21pbmcgb3V0IG9mICdzdGFuZGJ5Jy8naGliZXJuYXRlJyAqLwogc3RhdGljIHZvaWQgYmNtYV9jb3JlX3BjaV9jb25maWdfZml4dXAoc3RydWN0IGJjbWFfZHJ2X3BjaSAqcGMpCkBAIC0yMTYsNyArMjM5LDYgQEAKIAogc3RhdGljIHZvaWQgYmNtYV9jb3JlX3BjaV9jbGllbnRtb2RlX2luaXQoc3RydWN0IGJjbWFfZHJ2X3BjaSAqcGMpCiB7Ci0JYmNtYV9jb3JlX3BjaV9maXhjZmcocGMpOwogCWJjbWFfcGNpY29yZV9zZXJkZXNfd29ya2Fyb3VuZChwYyk7CiAJYmNtYV9jb3JlX3BjaV9jb25maWdfZml4dXAocGMpOwogfQpAQCAtMjI2LDEzICsyNDgsMTEgQEAKIAlpZiAocGMtPnNldHVwX2RvbmUpCiAJCXJldHVybjsKIAotI2lmZGVmIENPTkZJR19CQ01BX0RSSVZFUl9QQ0lfSE9TVE1PREUKLQlwYy0+aG9zdG1vZGUgPSBiY21hX2NvcmVfcGNpX2lzX2luX2hvc3Rtb2RlKHBjKTsKKwliY21hX2NvcmVfcGNpX2Vhcmx5X2luaXQocGMpOworCiAJaWYgKHBjLT5ob3N0bW9kZSkKIAkJYmNtYV9jb3JlX3BjaV9ob3N0bW9kZV9pbml0KHBjKTsKLSNlbmRpZiAvKiBDT05GSUdfQkNNQV9EUklWRVJfUENJX0hPU1RNT0RFICovCi0KLQlpZiAoIXBjLT5ob3N0bW9kZSkKKwllbHNlCiAJCWJjbWFfY29yZV9wY2lfY2xpZW50bW9kZV9pbml0KHBjKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL2hvc3RfcGNpLmMgYi9kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYwppbmRleCBjZDkxNjFhLi41M2M2YThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYworKysgYi9kcml2ZXJzL2JjbWEvaG9zdF9wY2kuYwpAQCAtMTMsMTAgKzEzLDEyIEBACiAKIHN0YXRpYyB2b2lkIGJjbWFfaG9zdF9wY2lfc3dpdGNoX2NvcmUoc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlKQogeworCWludCB3aW4yID0gY29yZS0+YnVzLT5ob3N0X2lzX3BjaWUyID8KKwkJQkNNQV9QQ0lFMl9CQVIwX1dJTjIgOiBCQ01BX1BDSV9CQVIwX1dJTjI7CisKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGNvcmUtPmJ1cy0+aG9zdF9wY2ksIEJDTUFfUENJX0JBUjBfV0lOLAogCQkJICAgICAgIGNvcmUtPmFkZHIpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoY29yZS0+YnVzLT5ob3N0X3BjaSwgQkNNQV9QQ0lfQkFSMF9XSU4yLAotCQkJICAgICAgIGNvcmUtPndyYXApOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoY29yZS0+YnVzLT5ob3N0X3BjaSwgd2luMiwgY29yZS0+d3JhcCk7CiAJY29yZS0+YnVzLT5tYXBwZWRfY29yZSA9IGNvcmU7CiAJYmNtYV9kZWJ1Zyhjb3JlLT5idXMsICJTd2l0Y2hlZCB0byBjb3JlOiAweCVYXG4iLCBjb3JlLT5pZC5pZCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JjbWEvaG9zdF9zb2MuYyBiL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jCmluZGV4IDMzNWNiY2YuLjJkY2UzNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jCisrKyBiL2RyaXZlcnMvYmNtYS9ob3N0X3NvYy5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAlpbnQgZXJyOwogCiAJLyogU2NhbiBidXMgYW5kIGluaXRpYWxpemUgaXQgKi8KLQllcnIgPSBiY21hX2J1c19lYXJseV9yZWdpc3RlcihidXMsICZzb2MtPmNvcmVfY2MsICZzb2MtPmNvcmVfbWlwcyk7CisJZXJyID0gYmNtYV9idXNfZWFybHlfcmVnaXN0ZXIoYnVzKTsKIAlpZiAoZXJyKQogCQlpb3VubWFwKGJ1cy0+bW1pbyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9tYWluLmMgYi9kcml2ZXJzL2JjbWEvbWFpbi5jCmluZGV4IDUzNGUxMzMuLjM4YmRlNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmNtYS9tYWluLmMKKysrIGIvZHJpdmVycy9iY21hL21haW4uYwpAQCAtMjY4LDYgKzI2OCwxOCBAQAogCX0KIH0KIAordm9pZCBiY21hX2luaXRfYnVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKQoreworCW11dGV4X2xvY2soJmJjbWFfYnVzZXNfbXV0ZXgpOworCWJ1cy0+bnVtID0gYmNtYV9idXNfbmV4dF9udW0rKzsKKwltdXRleF91bmxvY2soJmJjbWFfYnVzZXNfbXV0ZXgpOworCisJSU5JVF9MSVNUX0hFQUQoJmJ1cy0+Y29yZXMpOworCWJ1cy0+bnJfY29yZXMgPSAwOworCisJYmNtYV9kZXRlY3RfY2hpcChidXMpOworfQorCiBzdGF0aWMgdm9pZCBiY21hX3JlZ2lzdGVyX2NvcmUoc3RydWN0IGJjbWFfYnVzICpidXMsIHN0cnVjdCBiY21hX2RldmljZSAqY29yZSkKIHsKIAlpbnQgZXJyOwpAQCAtMzU2LDEyICszNjgsMTkgQEAKIAlzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmUsICp0bXA7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29yZSwgdG1wLCAmYnVzLT5jb3JlcywgbGlzdCkgeworCQlpZiAoIWNvcmUtPmRldl9yZWdpc3RlcmVkKQorCQkJY29udGludWU7CiAJCWxpc3RfZGVsKCZjb3JlLT5saXN0KTsKLQkJaWYgKGNvcmUtPmRldl9yZWdpc3RlcmVkKQotCQkJZGV2aWNlX3VucmVnaXN0ZXIoJmNvcmUtPmRldik7CisJCWRldmljZV91bnJlZ2lzdGVyKCZjb3JlLT5kZXYpOwogCX0KIAlpZiAoYnVzLT5ob3N0dHlwZSA9PSBCQ01BX0hPU1RUWVBFX1NPQykKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoYnVzLT5kcnZfY2Mud2F0Y2hkb2cpOworCisJLyogTm93IG5vb25lIHVzZXMgaW50ZXJuYWxseS1oYW5kbGVkIGNvcmVzLCB3ZSBjYW4gZnJlZSB0aGVtICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvcmUsIHRtcCwgJmJ1cy0+Y29yZXMsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmNvcmUtPmxpc3QpOworCQlrZnJlZShjb3JlKTsKKwl9CiB9CiAKIGludCBiY21hX2J1c19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9idXMgKmJ1cykKQEAgLTM2OSwxMCArMzg4LDYgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBiY21hX2RldmljZSAqY29yZTsKIAotCW11dGV4X2xvY2soJmJjbWFfYnVzZXNfbXV0ZXgpOwotCWJ1cy0+bnVtID0gYmNtYV9idXNfbmV4dF9udW0rKzsKLQltdXRleF91bmxvY2soJmJjbWFfYnVzZXNfbXV0ZXgpOwotCiAJLyogU2NhbiBmb3IgZGV2aWNlcyAoY29yZXMpICovCiAJZXJyID0gYmNtYV9idXNfc2NhbihidXMpOwogCWlmIChlcnIpIHsKQEAgLTM4Nyw2ICs0MDIsMTMgQEAKIAkJYmNtYV9jb3JlX2NoaXBjb21tb25fZWFybHlfaW5pdCgmYnVzLT5kcnZfY2MpOwogCX0KIAorCS8qIEVhcmx5IGluaXQgUENJRSBjb3JlICovCisJY29yZSA9IGJjbWFfZmluZF9jb3JlKGJ1cywgQkNNQV9DT1JFX1BDSUUpOworCWlmIChjb3JlKSB7CisJCWJ1cy0+ZHJ2X3BjaVswXS5jb3JlID0gY29yZTsKKwkJYmNtYV9jb3JlX3BjaV9lYXJseV9pbml0KCZidXMtPmRydl9wY2lbMF0pOworCX0KKwogCS8qIENvcmVzIHByb3ZpZGluZyBmbGFzaCBhY2Nlc3MgZ28gYmVmb3JlIFNQUk9NIGluaXQgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvcmUsICZidXMtPmNvcmVzLCBsaXN0KSB7CiAJCWlmIChiY21hX2lzX2NvcmVfbmVlZGVkX2Vhcmx5KGNvcmUtPmlkLmlkKSkKQEAgLTQ1OSw3ICs0ODEsNiBAQAogCiB2b2lkIGJjbWFfYnVzX3VucmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMpCiB7Ci0Jc3RydWN0IGJjbWFfZGV2aWNlICpjb3Jlc1szXTsKIAlpbnQgZXJyOwogCiAJZXJyID0gYmNtYV9ncGlvX3VucmVnaXN0ZXIoJmJ1cy0+ZHJ2X2NjKTsKQEAgLTQ3MCw0NiArNDkxLDIzIEBACiAKIAliY21hX2NvcmVfY2hpcGNvbW1vbl9iX2ZyZWUoJmJ1cy0+ZHJ2X2NjX2IpOwogCi0JY29yZXNbMF0gPSBiY21hX2ZpbmRfY29yZShidXMsIEJDTUFfQ09SRV9NSVBTXzc0Syk7Ci0JY29yZXNbMV0gPSBiY21hX2ZpbmRfY29yZShidXMsIEJDTUFfQ09SRV9QQ0lFKTsKLQljb3Jlc1syXSA9IGJjbWFfZmluZF9jb3JlKGJ1cywgQkNNQV9DT1JFXzQ3MDZfTUFDX0dCSVRfQ09NTU9OKTsKLQogCWJjbWFfdW5yZWdpc3Rlcl9jb3JlcyhidXMpOwotCi0Ja2ZyZWUoY29yZXNbMl0pOwotCWtmcmVlKGNvcmVzWzFdKTsKLQlrZnJlZShjb3Jlc1swXSk7CiB9CiAKLWludCBfX2luaXQgYmNtYV9idXNfZWFybHlfcmVnaXN0ZXIoc3RydWN0IGJjbWFfYnVzICpidXMsCi0JCQkJICAgc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlX2NjLAotCQkJCSAgIHN0cnVjdCBiY21hX2RldmljZSAqY29yZV9taXBzKQorLyoKKyAqIFRoaXMgaXMgYSBzcGVjaWFsIHZlcnNpb24gb2YgYnVzIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbiBkZXNpZ25lZCBmb3IgU29Dcy4KKyAqIEl0IHNjYW5zIGJ1cyBhbmQgcGVyZm9ybXMgYmFzaWMgaW5pdGlhbGl6YXRpb24gb2YgbWFpbiBjb3JlcyBvbmx5LgorICogUGxlYXNlIG5vdGUgaXQgcmVxdWlyZXMgbWVtb3J5IGFsbG9jYXRpb24sIGhvd2V2ZXIgaXQgd29uJ3QgdHJ5IHRvIHNsZWVwLgorICovCitpbnQgX19pbml0IGJjbWFfYnVzX2Vhcmx5X3JlZ2lzdGVyKHN0cnVjdCBiY21hX2J1cyAqYnVzKQogewogCWludCBlcnI7CiAJc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlOwotCXN0cnVjdCBiY21hX2RldmljZV9pZCBtYXRjaDsKIAotCW1hdGNoLm1hbnVmID0gQkNNQV9NQU5VRl9CQ007Ci0JbWF0Y2guaWQgPSBiY21hX2NjX2NvcmVfaWQoYnVzKTsKLQltYXRjaC5jbGFzcyA9IEJDTUFfQ0xfU0lNOwotCW1hdGNoLnJldiA9IEJDTUFfQU5ZX1JFVjsKLQotCS8qIFNjYW4gZm9yIGNoaXAgY29tbW9uIGNvcmUgKi8KLQllcnIgPSBiY21hX2J1c19zY2FuX2Vhcmx5KGJ1cywgJm1hdGNoLCBjb3JlX2NjKTsKKwkvKiBTY2FuIGZvciBkZXZpY2VzIChjb3JlcykgKi8KKwllcnIgPSBiY21hX2J1c19zY2FuKGJ1cyk7CiAJaWYgKGVycikgewotCQliY21hX2VycihidXMsICJGYWlsZWQgdG8gc2NhbiBmb3IgY29tbW9uIGNvcmU6ICVkXG4iLCBlcnIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JbWF0Y2gubWFudWYgPSBCQ01BX01BTlVGX01JUFM7Ci0JbWF0Y2guaWQgPSBCQ01BX0NPUkVfTUlQU183NEs7Ci0JbWF0Y2guY2xhc3MgPSBCQ01BX0NMX1NJTTsKLQltYXRjaC5yZXYgPSBCQ01BX0FOWV9SRVY7Ci0KLQkvKiBTY2FuIGZvciBtaXBzIGNvcmUgKi8KLQllcnIgPSBiY21hX2J1c19zY2FuX2Vhcmx5KGJ1cywgJm1hdGNoLCBjb3JlX21pcHMpOwotCWlmIChlcnIpIHsKLQkJYmNtYV9lcnIoYnVzLCAiRmFpbGVkIHRvIHNjYW4gZm9yIG1pcHMgY29yZTogJWRcbiIsIGVycik7CisJCWJjbWFfZXJyKGJ1cywgIkZhaWxlZCB0byBzY2FuIGJ1czogJWRcbiIsIGVycik7CiAJCXJldHVybiAtMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmNtYS9zY2FuLmMgYi9kcml2ZXJzL2JjbWEvc2Nhbi5jCmluZGV4IDkxNzUyMDcuLmRmODA2YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmNtYS9zY2FuLmMKKysrIGIvZHJpdmVycy9iY21hL3NjYW4uYwpAQCAtNDM1LDE1ICs0MzUsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBiY21hX2luaXRfYnVzKHN0cnVjdCBiY21hX2J1cyAqYnVzKQordm9pZCBiY21hX2RldGVjdF9jaGlwKHN0cnVjdCBiY21hX2J1cyAqYnVzKQogewogCXMzMiB0bXA7CiAJc3RydWN0IGJjbWFfY2hpcGluZm8gKmNoaXBpbmZvID0gJihidXMtPmNoaXBpbmZvKTsKIAljaGFyIGNoaXBfaWRbOF07CiAKLQlJTklUX0xJU1RfSEVBRCgmYnVzLT5jb3Jlcyk7Ci0JYnVzLT5ucl9jb3JlcyA9IDA7Ci0KIAliY21hX3NjYW5fc3dpdGNoX2NvcmUoYnVzLCBCQ01BX0FERFJfQkFTRSk7CiAKIAl0bXAgPSBiY21hX3NjYW5fcmVhZDMyKGJ1cywgMCwgQkNNQV9DQ19JRCk7CkBAIC00NjQsNiArNDYxLDEwIEBACiAKIAlpbnQgZXJyLCBjb3JlX251bSA9IDA7CiAKKwkvKiBTa2lwIGlmIGJ1cyB3YXMgYWxyZWFkeSBzY2FubmVkIChlLmcuIGR1cmluZyBlYXJseSByZWdpc3RlcikgKi8KKwlpZiAoYnVzLT5ucl9jb3JlcykKKwkJcmV0dXJuIDA7CisKIAllcm9tYmFzZSA9IGJjbWFfc2Nhbl9yZWFkMzIoYnVzLCAwLCBCQ01BX0NDX0VST00pOwogCWlmIChidXMtPmhvc3R0eXBlID09IEJDTUFfSE9TVFRZUEVfU09DKSB7CiAJCWVyb21wdHIgPSBpb3JlbWFwX25vY2FjaGUoZXJvbWJhc2UsIEJDTUFfQ09SRV9TSVpFKTsKQEAgLTUyMiw2MSArNTIzLDMgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0KLWludCBfX2luaXQgYmNtYV9idXNfc2Nhbl9lYXJseShzdHJ1Y3QgYmNtYV9idXMgKmJ1cywKLQkJCSAgICAgICBzdHJ1Y3QgYmNtYV9kZXZpY2VfaWQgKm1hdGNoLAotCQkJICAgICAgIHN0cnVjdCBiY21hX2RldmljZSAqY29yZSkKLXsKLQl1MzIgZXJvbWJhc2U7Ci0JdTMyIF9faW9tZW0gKmVyb21wdHIsICplcm9tZW5kOwotCi0JaW50IGVyciA9IC1FTk9ERVY7Ci0JaW50IGNvcmVfbnVtID0gMDsKLQotCWVyb21iYXNlID0gYmNtYV9zY2FuX3JlYWQzMihidXMsIDAsIEJDTUFfQ0NfRVJPTSk7Ci0JaWYgKGJ1cy0+aG9zdHR5cGUgPT0gQkNNQV9IT1NUVFlQRV9TT0MpIHsKLQkJZXJvbXB0ciA9IGlvcmVtYXBfbm9jYWNoZShlcm9tYmFzZSwgQkNNQV9DT1JFX1NJWkUpOwotCQlpZiAoIWVyb21wdHIpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQl9IGVsc2UgewotCQllcm9tcHRyID0gYnVzLT5tbWlvOwotCX0KLQotCWVyb21lbmQgPSBlcm9tcHRyICsgQkNNQV9DT1JFX1NJWkUgLyBzaXplb2YodTMyKTsKLQotCWJjbWFfc2Nhbl9zd2l0Y2hfY29yZShidXMsIGVyb21iYXNlKTsKLQotCXdoaWxlIChlcm9tcHRyIDwgZXJvbWVuZCkgewotCQltZW1zZXQoY29yZSwgMCwgc2l6ZW9mKCpjb3JlKSk7Ci0JCUlOSVRfTElTVF9IRUFEKCZjb3JlLT5saXN0KTsKLQkJY29yZS0+YnVzID0gYnVzOwotCi0JCWVyciA9IGJjbWFfZ2V0X25leHRfY29yZShidXMsICZlcm9tcHRyLCBtYXRjaCwgY29yZV9udW0sIGNvcmUpOwotCQlpZiAoZXJyID09IC1FTk9ERVYpIHsKLQkJCWNvcmVfbnVtKys7Ci0JCQljb250aW51ZTsKLQkJfSBlbHNlIGlmIChlcnIgPT0gLUVOWElPKQotCQkJY29udGludWU7Ci0JCWVsc2UgaWYgKGVyciA9PSAtRVNQSVBFKQotCQkJYnJlYWs7Ci0JCWVsc2UgaWYgKGVyciA8IDApCi0JCQlnb3RvIG91dDsKLQotCQljb3JlLT5jb3JlX2luZGV4ID0gY29yZV9udW0rKzsKLQkJYnVzLT5ucl9jb3JlcysrOwotCQliY21hX2luZm8oYnVzLCAiQ29yZSAlZCBmb3VuZDogJXMgKG1hbnVmIDB4JTAzWCwgaWQgMHglMDNYLCByZXYgMHglMDJYLCBjbGFzcyAweCVYKVxuIiwKLQkJCSAgY29yZS0+Y29yZV9pbmRleCwgYmNtYV9kZXZpY2VfbmFtZSgmY29yZS0+aWQpLAotCQkJICBjb3JlLT5pZC5tYW51ZiwgY29yZS0+aWQuaWQsIGNvcmUtPmlkLnJldiwKLQkJCSAgY29yZS0+aWQuY2xhc3MpOwotCi0JCWxpc3RfYWRkX3RhaWwoJmNvcmUtPmxpc3QsICZidXMtPmNvcmVzKTsKLQkJZXJyID0gMDsKLQkJYnJlYWs7Ci0JfQotCi1vdXQ6Ci0JaWYgKGJ1cy0+aG9zdHR5cGUgPT0gQkNNQV9IT1NUVFlQRV9TT0MpCi0JCWlvdW5tYXAoZXJvbXB0cik7Ci0KLQlyZXR1cm4gZXJyOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iY21hL3Nwcm9tLmMgYi9kcml2ZXJzL2JjbWEvc3Byb20uYwppbmRleCBlZmIwMzdmLi4yMDZlZGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JjbWEvc3Byb20uYworKysgYi9kcml2ZXJzL2JjbWEvc3Byb20uYwpAQCAtNTc5LDcgKzU3OSw4IEBACiAJdTE2IG9mZnNldCA9IEJDTUFfQ0NfU1BST007CiAJdTE2ICpzcHJvbTsKIAlzaXplX3Qgc3Byb21fc2l6ZXNbXSA9IHsgU1NCX1NQUk9NU0laRV9XT1JEU19SNCwKLQkJCQkgU1NCX1NQUk9NU0laRV9XT1JEU19SMTAsIH07CisJCQkJIFNTQl9TUFJPTVNJWkVfV09SRFNfUjEwLAorCQkJCSBTU0JfU1BST01TSVpFX1dPUkRTX1IxMSwgfTsKIAlpbnQgaSwgZXJyID0gMDsKIAogCWlmICghYnVzLT5kcnZfY2MuY29yZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcmJkLmMgYi9kcml2ZXJzL2Jsb2NrL3JiZC5jCmluZGV4IDNlYzg1ZGYuLjhhODZiNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcmJkLmMKKysrIGIvZHJpdmVycy9ibG9jay9yYmQuYwpAQCAtMjA5OCwzMiArMjA5OCwyNiBAQAogICogSWYgYW4gaW1hZ2UgaGFzIGEgbm9uLXplcm8gcGFyZW50IG92ZXJsYXAsIGdldCBhIHJlZmVyZW5jZSB0byBpdHMKICAqIHBhcmVudC4KICAqCi0gKiBXZSBtdXN0IGdldCB0aGUgcmVmZXJlbmNlIGJlZm9yZSBjaGVja2luZyBmb3IgdGhlIG92ZXJsYXAgdG8KLSAqIGNvb3JkaW5hdGUgcHJvcGVybHkgd2l0aCB6ZXJvaW5nIHRoZSBwYXJlbnQgb3ZlcmxhcCBpbgotICogcmJkX2Rldl92Ml9wYXJlbnRfaW5mbygpIHdoZW4gYW4gaW1hZ2UgZ2V0cyBmbGF0dGVuZWQuICBXZQotICogZHJvcCBpdCBhZ2FpbiBpZiB0aGVyZSBpcyBubyBvdmVybGFwLgotICoKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmJkIGRldmljZSBoYXMgYSBwYXJlbnQgd2l0aCBhIG5vbi16ZXJvCiAgKiBvdmVybGFwIGFuZCBhIHJlZmVyZW5jZSBmb3IgaXQgd2FzIHN1Y2Nlc3NmdWxseSB0YWtlbiwgb3IKICAqIGZhbHNlIG90aGVyd2lzZS4KICAqLwogc3RhdGljIGJvb2wgcmJkX2Rldl9wYXJlbnRfZ2V0KHN0cnVjdCByYmRfZGV2aWNlICpyYmRfZGV2KQogewotCWludCBjb3VudGVyOworCWludCBjb3VudGVyID0gMDsKIAogCWlmICghcmJkX2Rldi0+cGFyZW50X3NwZWMpCiAJCXJldHVybiBmYWxzZTsKIAotCWNvdW50ZXIgPSBhdG9taWNfaW5jX3JldHVybl9zYWZlKCZyYmRfZGV2LT5wYXJlbnRfcmVmKTsKLQlpZiAoY291bnRlciA+IDAgJiYgcmJkX2Rldi0+cGFyZW50X292ZXJsYXApCi0JCXJldHVybiB0cnVlOwotCi0JLyogSW1hZ2Ugd2FzIGZsYXR0ZW5lZCwgYnV0IHBhcmVudCBpcyBub3QgeWV0IHRvcm4gZG93biAqLworCWRvd25fcmVhZCgmcmJkX2Rldi0+aGVhZGVyX3J3c2VtKTsKKwlpZiAocmJkX2Rldi0+cGFyZW50X292ZXJsYXApCisJCWNvdW50ZXIgPSBhdG9taWNfaW5jX3JldHVybl9zYWZlKCZyYmRfZGV2LT5wYXJlbnRfcmVmKTsKKwl1cF9yZWFkKCZyYmRfZGV2LT5oZWFkZXJfcndzZW0pOwogCiAJaWYgKGNvdW50ZXIgPCAwKQogCQlyYmRfd2FybihyYmRfZGV2LCAicGFyZW50IHJlZmVyZW5jZSBvdmVyZmxvdyIpOwogCi0JcmV0dXJuIGZhbHNlOworCXJldHVybiBjb3VudGVyID4gMDsKIH0KIAogLyoKQEAgLTQyMzksNyArNDIzMyw2IEBACiAJCSAqLwogCQlpZiAocmJkX2Rldi0+cGFyZW50X292ZXJsYXApIHsKIAkJCXJiZF9kZXYtPnBhcmVudF9vdmVybGFwID0gMDsKLQkJCXNtcF9tYigpOwogCQkJcmJkX2Rldl9wYXJlbnRfcHV0KHJiZF9kZXYpOwogCQkJcHJfaW5mbygiJXM6IGNsb25lIGltYWdlIGhhcyBiZWVuIGZsYXR0ZW5lZFxuIiwKIAkJCQlyYmRfZGV2LT5kaXNrLT5kaXNrX25hbWUpOwpAQCAtNDI4NSw3ICs0Mjc4LDYgQEAKIAkgKiB0cmVhdCBpdCBzcGVjaWFsbHkuCiAJICovCiAJcmJkX2Rldi0+cGFyZW50X292ZXJsYXAgPSBvdmVybGFwOwotCXNtcF9tYigpOwogCWlmICghb3ZlcmxhcCkgewogCiAJCS8qIEEgbnVsbCBwYXJlbnRfc3BlYyBpbmRpY2F0ZXMgaXQncyB0aGUgaW5pdGlhbCBwcm9iZSAqLwpAQCAtNTExNCwxMCArNTEwNiw3IEBACiB7CiAJc3RydWN0IHJiZF9pbWFnZV9oZWFkZXIJKmhlYWRlcjsKIAotCS8qIERyb3AgcGFyZW50IHJlZmVyZW5jZSB1bmxlc3MgaXQncyBhbHJlYWR5IGJlZW4gZG9uZSAob3Igbm9uZSkgKi8KLQotCWlmIChyYmRfZGV2LT5wYXJlbnRfb3ZlcmxhcCkKLQkJcmJkX2Rldl9wYXJlbnRfcHV0KHJiZF9kZXYpOworCXJiZF9kZXZfcGFyZW50X3B1dChyYmRfZGV2KTsKIAogCS8qIEZyZWUgZHluYW1pYyBmaWVsZHMgZnJvbSB0aGUgaGVhZGVyLCB0aGVuIHplcm8gaXQgb3V0ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2svYmxrYmFjay5jIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay9ibGtiYWNrLmMKaW5kZXggNjNmYzdmMC4uMmEwNGQzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay9ibGtiYWNrLmMKKysrIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay9ibGtiYWNrLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxhc20veGVuL2h5cGVydmlzb3IuaD4KICNpbmNsdWRlIDxhc20veGVuL2h5cGVyY2FsbC5oPgogI2luY2x1ZGUgPHhlbi9iYWxsb29uLmg+CisjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxlLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKIC8qCkBAIC0xMDAsNyArMTAxLDcgQEAKIAogI2RlZmluZSBCTEtCQUNLX0lOVkFMSURfSEFORExFICh+MCkKIAotLyogTnVtYmVyIG9mIGZyZWUgcGFnZXMgdG8gcmVtb3ZlIG9uIGVhY2ggY2FsbCB0byBmcmVlX3hlbmJhbGxvb25lZF9wYWdlcyAqLworLyogTnVtYmVyIG9mIGZyZWUgcGFnZXMgdG8gcmVtb3ZlIG9uIGVhY2ggY2FsbCB0byBnbnR0YWJfZnJlZV9wYWdlcyAqLwogI2RlZmluZSBOVU1fQkFUQ0hfRlJFRV9QQUdFUyAxMAogCiBzdGF0aWMgaW5saW5lIGludCBnZXRfZnJlZV9wYWdlKHN0cnVjdCB4ZW5fYmxraWYgKmJsa2lmLCBzdHJ1Y3QgcGFnZSAqKnBhZ2UpCkBAIC0xMTEsNyArMTEyLDcgQEAKIAlpZiAobGlzdF9lbXB0eSgmYmxraWYtPmZyZWVfcGFnZXMpKSB7CiAJCUJVR19PTihibGtpZi0+ZnJlZV9wYWdlc19udW0gIT0gMCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJsa2lmLT5mcmVlX3BhZ2VzX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIGFsbG9jX3hlbmJhbGxvb25lZF9wYWdlcygxLCBwYWdlLCBmYWxzZSk7CisJCXJldHVybiBnbnR0YWJfYWxsb2NfcGFnZXMoMSwgcGFnZSk7CiAJfQogCUJVR19PTihibGtpZi0+ZnJlZV9wYWdlc19udW0gPT0gMCk7CiAJcGFnZVswXSA9IGxpc3RfZmlyc3RfZW50cnkoJmJsa2lmLT5mcmVlX3BhZ2VzLCBzdHJ1Y3QgcGFnZSwgbHJ1KTsKQEAgLTE1MSwxNCArMTUyLDE0IEBACiAJCWJsa2lmLT5mcmVlX3BhZ2VzX251bS0tOwogCQlpZiAoKytudW1fcGFnZXMgPT0gTlVNX0JBVENIX0ZSRUVfUEFHRVMpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJsa2lmLT5mcmVlX3BhZ2VzX2xvY2ssIGZsYWdzKTsKLQkJCWZyZWVfeGVuYmFsbG9vbmVkX3BhZ2VzKG51bV9wYWdlcywgcGFnZSk7CisJCQlnbnR0YWJfZnJlZV9wYWdlcyhudW1fcGFnZXMsIHBhZ2UpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmJsa2lmLT5mcmVlX3BhZ2VzX2xvY2ssIGZsYWdzKTsKIAkJCW51bV9wYWdlcyA9IDA7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmxraWYtPmZyZWVfcGFnZXNfbG9jaywgZmxhZ3MpOwogCWlmIChudW1fcGFnZXMgIT0gMCkKLQkJZnJlZV94ZW5iYWxsb29uZWRfcGFnZXMobnVtX3BhZ2VzLCBwYWdlKTsKKwkJZ250dGFiX2ZyZWVfcGFnZXMobnVtX3BhZ2VzLCBwYWdlKTsKIH0KIAogI2RlZmluZSB2YWRkcihwYWdlKSAoKHVuc2lnbmVkIGxvbmcpcGZuX3RvX2thZGRyKHBhZ2VfdG9fcGZuKHBhZ2UpKSkKQEAgLTI2Miw2ICsyNjMsMTcgQEAKIAlhdG9taWNfZGVjKCZibGtpZi0+cGVyc2lzdGVudF9nbnRfaW5fdXNlKTsKIH0KIAorc3RhdGljIHZvaWQgZnJlZV9wZXJzaXN0ZW50X2dudHNfdW5tYXBfY2FsbGJhY2soaW50IHJlc3VsdCwKKwkJCQkJCXN0cnVjdCBnbnRhYl91bm1hcF9xdWV1ZV9kYXRhICpkYXRhKQoreworCXN0cnVjdCBjb21wbGV0aW9uICpjID0gZGF0YS0+ZGF0YTsKKworCS8qIEJVR19PTiB1c2VkIHRvIHJlcHJvZHVjZSBleGlzdGluZyBiZWhhdmlvdXIsCisJICAgYnV0IGlzIHRoaXMgdGhlIGJlc3Qgd2F5IHRvIGRlYWwgd2l0aCB0aGlzPyAqLworCUJVR19PTihyZXN1bHQpOworCWNvbXBsZXRlKGMpOworfQorCiBzdGF0aWMgdm9pZCBmcmVlX3BlcnNpc3RlbnRfZ250cyhzdHJ1Y3QgeGVuX2Jsa2lmICpibGtpZiwgc3RydWN0IHJiX3Jvb3QgKnJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnVtKQogewpAQCAtMjY5LDggKzI4MSwxNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlc1tCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1RdOwogCXN0cnVjdCBwZXJzaXN0ZW50X2dudCAqcGVyc2lzdGVudF9nbnQ7CiAJc3RydWN0IHJiX25vZGUgKm47Ci0JaW50IHJldCA9IDA7CiAJaW50IHNlZ3NfdG9fdW5tYXAgPSAwOworCXN0cnVjdCBnbnRhYl91bm1hcF9xdWV1ZV9kYXRhIHVubWFwX2RhdGE7CisJc3RydWN0IGNvbXBsZXRpb24gdW5tYXBfY29tcGxldGlvbjsKKworCWluaXRfY29tcGxldGlvbigmdW5tYXBfY29tcGxldGlvbik7CisKKwl1bm1hcF9kYXRhLmRhdGEgPSAmdW5tYXBfY29tcGxldGlvbjsKKwl1bm1hcF9kYXRhLmRvbmUgPSAmZnJlZV9wZXJzaXN0ZW50X2dudHNfdW5tYXBfY2FsbGJhY2s7CisJdW5tYXBfZGF0YS5wYWdlcyA9IHBhZ2VzOworCXVubWFwX2RhdGEudW5tYXBfb3BzID0gdW5tYXA7CisJdW5tYXBfZGF0YS5rdW5tYXBfb3BzID0gTlVMTDsKIAogCWZvcmVhY2hfZ3JhbnRfc2FmZShwZXJzaXN0ZW50X2dudCwgbiwgcm9vdCwgbm9kZSkgewogCQlCVUdfT04ocGVyc2lzdGVudF9nbnQtPmhhbmRsZSA9PQpAQCAtMjg1LDkgKzMwNiwxMSBAQAogCiAJCWlmICgrK3NlZ3NfdG9fdW5tYXAgPT0gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUIHx8CiAJCQkhcmJfbmV4dCgmcGVyc2lzdGVudF9nbnQtPm5vZGUpKSB7Ci0JCQlyZXQgPSBnbnR0YWJfdW5tYXBfcmVmcyh1bm1hcCwgTlVMTCwgcGFnZXMsCi0JCQkJc2Vnc190b191bm1hcCk7Ci0JCQlCVUdfT04ocmV0KTsKKworCQkJdW5tYXBfZGF0YS5jb3VudCA9IHNlZ3NfdG9fdW5tYXA7CisJCQlnbnR0YWJfdW5tYXBfcmVmc19hc3luYygmdW5tYXBfZGF0YSk7CisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ1bm1hcF9jb21wbGV0aW9uKTsKKwogCQkJcHV0X2ZyZWVfcGFnZXMoYmxraWYsIHBhZ2VzLCBzZWdzX3RvX3VubWFwKTsKIAkJCXNlZ3NfdG9fdW5tYXAgPSAwOwogCQl9CkBAIC02NTMsMTggKzY3NiwxNCBAQAogCXNocmlua19mcmVlX3BhZ2Vwb29sKGJsa2lmLCAwIC8qIEFsbCAqLyk7CiB9CiAKLS8qCi0gKiBVbm1hcCB0aGUgZ3JhbnQgcmVmZXJlbmNlcywgYW5kIGFsc28gcmVtb3ZlIHRoZSBNMlAgb3Zlci1yaWRlcwotICogdXNlZCBpbiB0aGUgJ3BlbmRpbmdfcmVxJy4KLSAqLwotc3RhdGljIHZvaWQgeGVuX2Jsa2JrX3VubWFwKHN0cnVjdCB4ZW5fYmxraWYgKmJsa2lmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBncmFudF9wYWdlICpwYWdlc1tdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW0pCitzdGF0aWMgdW5zaWduZWQgaW50IHhlbl9ibGtia191bm1hcF9wcmVwYXJlKAorCXN0cnVjdCB4ZW5fYmxraWYgKmJsa2lmLAorCXN0cnVjdCBncmFudF9wYWdlICoqcGFnZXMsCisJdW5zaWduZWQgaW50IG51bSwKKwlzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZiAqdW5tYXBfb3BzLAorCXN0cnVjdCBwYWdlICoqdW5tYXBfcGFnZXMpCiB7Ci0Jc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgdW5tYXBbQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUXTsKLQlzdHJ1Y3QgcGFnZSAqdW5tYXBfcGFnZXNbQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUXTsKIAl1bnNpZ25lZCBpbnQgaSwgaW52Y291bnQgPSAwOwotCWludCByZXQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKIAkJaWYgKHBhZ2VzW2ldLT5wZXJzaXN0ZW50X2dudCAhPSBOVUxMKSB7CkBAIC02NzQsMjEgKzY5Myw5NSBAQAogCQlpZiAocGFnZXNbaV0tPmhhbmRsZSA9PSBCTEtCQUNLX0lOVkFMSURfSEFORExFKQogCQkJY29udGludWU7CiAJCXVubWFwX3BhZ2VzW2ludmNvdW50XSA9IHBhZ2VzW2ldLT5wYWdlOwotCQlnbnR0YWJfc2V0X3VubWFwX29wKCZ1bm1hcFtpbnZjb3VudF0sIHZhZGRyKHBhZ2VzW2ldLT5wYWdlKSwKKwkJZ250dGFiX3NldF91bm1hcF9vcCgmdW5tYXBfb3BzW2ludmNvdW50XSwgdmFkZHIocGFnZXNbaV0tPnBhZ2UpLAogCQkJCSAgICBHTlRNQVBfaG9zdF9tYXAsIHBhZ2VzW2ldLT5oYW5kbGUpOwogCQlwYWdlc1tpXS0+aGFuZGxlID0gQkxLQkFDS19JTlZBTElEX0hBTkRMRTsKLQkJaWYgKCsraW52Y291bnQgPT0gQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKSB7Ci0JCQlyZXQgPSBnbnR0YWJfdW5tYXBfcmVmcyh1bm1hcCwgTlVMTCwgdW5tYXBfcGFnZXMsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBpbnZjb3VudCk7CisJCWludmNvdW50Kys7CisgICAgICAgfQorCisgICAgICAgcmV0dXJuIGludmNvdW50OworfQorCitzdGF0aWMgdm9pZCB4ZW5fYmxrYmtfdW5tYXBfYW5kX3Jlc3BvbmRfY2FsbGJhY2soaW50IHJlc3VsdCwgc3RydWN0IGdudGFiX3VubWFwX3F1ZXVlX2RhdGEgKmRhdGEpCit7CisJc3RydWN0IHBlbmRpbmdfcmVxKiBwZW5kaW5nX3JlcSA9IChzdHJ1Y3QgcGVuZGluZ19yZXEqKSAoZGF0YS0+ZGF0YSk7CisJc3RydWN0IHhlbl9ibGtpZiAqYmxraWYgPSBwZW5kaW5nX3JlcS0+YmxraWY7CisKKwkvKiBCVUdfT04gdXNlZCB0byByZXByb2R1Y2UgZXhpc3RpbmcgYmVoYXZpb3VyLAorCSAgIGJ1dCBpcyB0aGlzIHRoZSBiZXN0IHdheSB0byBkZWFsIHdpdGggdGhpcz8gKi8KKwlCVUdfT04ocmVzdWx0KTsKKworCXB1dF9mcmVlX3BhZ2VzKGJsa2lmLCBkYXRhLT5wYWdlcywgZGF0YS0+Y291bnQpOworCW1ha2VfcmVzcG9uc2UoYmxraWYsIHBlbmRpbmdfcmVxLT5pZCwKKwkJICAgICAgcGVuZGluZ19yZXEtPm9wZXJhdGlvbiwgcGVuZGluZ19yZXEtPnN0YXR1cyk7CisJZnJlZV9yZXEoYmxraWYsIHBlbmRpbmdfcmVxKTsKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBpcyBmcmVlZCBiZWZvcmUgcmVsZWFzaW5nIGJsa2lmLAorCSAqIG9yIHRoZXJlIGNvdWxkIGJlIGEgcmFjZSBiZXR3ZWVuIGZyZWVfcmVxIGFuZCB0aGUKKwkgKiBjbGVhbnVwIGRvbmUgaW4geGVuX2Jsa2lmX2ZyZWUgZHVyaW5nIHNodXRkb3duLgorCSAqCisJICogTkI6IFRoZSBmYWN0IHRoYXQgd2UgbWlnaHQgdHJ5IHRvIHdha2UgdXAgcGVuZGluZ19mcmVlX3dxCisJICogYmVmb3JlIGRyYWluX2NvbXBsZXRlIChpbiBjYXNlIHRoZXJlJ3MgYSBkcmFpbiBnb2luZyBvbikKKwkgKiBpdCdzIG5vdCBhIHByb2JsZW0gd2l0aCBvdXIgY3VycmVudCBpbXBsZW1lbnRhdGlvbgorCSAqIGJlY2F1c2Ugd2UgY2FuIGFzc3VyZSB0aGVyZSdzIG5vIHRocmVhZCB3YWl0aW5nIG9uCisJICogcGVuZGluZ19mcmVlX3dxIGlmIHRoZXJlJ3MgYSBkcmFpbiBnb2luZyBvbiwgYnV0IGl0IGhhcworCSAqIHRvIGJlIHRha2VuIGludG8gYWNjb3VudCBpZiB0aGUgY3VycmVudCBtb2RlbCBpcyBjaGFuZ2VkLgorCSAqLworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZibGtpZi0+aW5mbGlnaHQpICYmIGF0b21pY19yZWFkKCZibGtpZi0+ZHJhaW4pKSB7CisJCWNvbXBsZXRlKCZibGtpZi0+ZHJhaW5fY29tcGxldGUpOworCX0KKwl4ZW5fYmxraWZfcHV0KGJsa2lmKTsKK30KKworc3RhdGljIHZvaWQgeGVuX2Jsa2JrX3VubWFwX2FuZF9yZXNwb25kKHN0cnVjdCBwZW5kaW5nX3JlcSAqcmVxKQoreworCXN0cnVjdCBnbnRhYl91bm1hcF9xdWV1ZV9kYXRhKiB3b3JrID0gJnJlcS0+Z250dGFiX3VubWFwX2RhdGE7CisJc3RydWN0IHhlbl9ibGtpZiAqYmxraWYgPSByZXEtPmJsa2lmOworCXN0cnVjdCBncmFudF9wYWdlICoqcGFnZXMgPSByZXEtPnNlZ21lbnRzOworCXVuc2lnbmVkIGludCBpbnZjb3VudDsKKworCWludmNvdW50ID0geGVuX2Jsa2JrX3VubWFwX3ByZXBhcmUoYmxraWYsIHBhZ2VzLCByZXEtPm5yX3BhZ2VzLAorCQkJCQkgICByZXEtPnVubWFwLCByZXEtPnVubWFwX3BhZ2VzKTsKKworCXdvcmstPmRhdGEgPSByZXE7CisJd29yay0+ZG9uZSA9IHhlbl9ibGtia191bm1hcF9hbmRfcmVzcG9uZF9jYWxsYmFjazsKKwl3b3JrLT51bm1hcF9vcHMgPSByZXEtPnVubWFwOworCXdvcmstPmt1bm1hcF9vcHMgPSBOVUxMOworCXdvcmstPnBhZ2VzID0gcmVxLT51bm1hcF9wYWdlczsKKwl3b3JrLT5jb3VudCA9IGludmNvdW50OworCisJZ250dGFiX3VubWFwX3JlZnNfYXN5bmMoJnJlcS0+Z250dGFiX3VubWFwX2RhdGEpOworfQorCisKKy8qCisgKiBVbm1hcCB0aGUgZ3JhbnQgcmVmZXJlbmNlcy4KKyAqCisgKiBUaGlzIGNvdWxkIGFjY3VtdWxhdGUgb3BzIHVwIHRvIHRoZSBiYXRjaCBzaXplIHRvIHJlZHVjZSB0aGUgbnVtYmVyCisgKiBvZiBoeXBlcmNhbGxzLCBidXQgc2luY2UgdGhpcyBpcyBvbmx5IHVzZWQgaW4gZXJyb3IgcGF0aHMgdGhlcmUncworICogbm8gcmVhbCBuZWVkLgorICovCitzdGF0aWMgdm9pZCB4ZW5fYmxrYmtfdW5tYXAoc3RydWN0IHhlbl9ibGtpZiAqYmxraWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdyYW50X3BhZ2UgKnBhZ2VzW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZiB1bm1hcFtCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1RdOworCXN0cnVjdCBwYWdlICp1bm1hcF9wYWdlc1tCTEtJRl9NQVhfU0VHTUVOVFNfUEVSX1JFUVVFU1RdOworCXVuc2lnbmVkIGludCBpbnZjb3VudCA9IDA7CisJaW50IHJldDsKKworCXdoaWxlIChudW0pIHsKKwkJdW5zaWduZWQgaW50IGJhdGNoID0gbWluKG51bSwgQkxLSUZfTUFYX1NFR01FTlRTX1BFUl9SRVFVRVNUKTsKKwkJCisJCWludmNvdW50ID0geGVuX2Jsa2JrX3VubWFwX3ByZXBhcmUoYmxraWYsIHBhZ2VzLCBiYXRjaCwKKwkJCQkJCSAgIHVubWFwLCB1bm1hcF9wYWdlcyk7CisJCWlmIChpbnZjb3VudCkgeworCQkJcmV0ID0gZ250dGFiX3VubWFwX3JlZnModW5tYXAsIE5VTEwsIHVubWFwX3BhZ2VzLCBpbnZjb3VudCk7CiAJCQlCVUdfT04ocmV0KTsKIAkJCXB1dF9mcmVlX3BhZ2VzKGJsa2lmLCB1bm1hcF9wYWdlcywgaW52Y291bnQpOwotCQkJaW52Y291bnQgPSAwOwogCQl9Ci0JfQotCWlmIChpbnZjb3VudCkgewotCQlyZXQgPSBnbnR0YWJfdW5tYXBfcmVmcyh1bm1hcCwgTlVMTCwgdW5tYXBfcGFnZXMsIGludmNvdW50KTsKLQkJQlVHX09OKHJldCk7Ci0JCXB1dF9mcmVlX3BhZ2VzKGJsa2lmLCB1bm1hcF9wYWdlcywgaW52Y291bnQpOworCQlwYWdlcyArPSBiYXRjaDsKKwkJbnVtIC09IGJhdGNoOwogCX0KIH0KIApAQCAtOTgyLDMyICsxMDc1LDggQEAKIAkgKiB0aGUgZ3JhbnQgcmVmZXJlbmNlcyBhc3NvY2lhdGVkIHdpdGggJ3JlcXVlc3QnIGFuZCBwcm92aWRlCiAJICogdGhlIHByb3BlciByZXNwb25zZSBvbiB0aGUgcmluZy4KIAkgKi8KLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcGVuZGluZ19yZXEtPnBlbmRjbnQpKSB7Ci0JCXN0cnVjdCB4ZW5fYmxraWYgKmJsa2lmID0gcGVuZGluZ19yZXEtPmJsa2lmOwotCi0JCXhlbl9ibGtia191bm1hcChibGtpZiwKLQkJICAgICAgICAgICAgICAgIHBlbmRpbmdfcmVxLT5zZWdtZW50cywKLQkJICAgICAgICAgICAgICAgIHBlbmRpbmdfcmVxLT5ucl9wYWdlcyk7Ci0JCW1ha2VfcmVzcG9uc2UoYmxraWYsIHBlbmRpbmdfcmVxLT5pZCwKLQkJCSAgICAgIHBlbmRpbmdfcmVxLT5vcGVyYXRpb24sIHBlbmRpbmdfcmVxLT5zdGF0dXMpOwotCQlmcmVlX3JlcShibGtpZiwgcGVuZGluZ19yZXEpOwotCQkvKgotCQkgKiBNYWtlIHN1cmUgdGhlIHJlcXVlc3QgaXMgZnJlZWQgYmVmb3JlIHJlbGVhc2luZyBibGtpZiwKLQkJICogb3IgdGhlcmUgY291bGQgYmUgYSByYWNlIGJldHdlZW4gZnJlZV9yZXEgYW5kIHRoZQotCQkgKiBjbGVhbnVwIGRvbmUgaW4geGVuX2Jsa2lmX2ZyZWUgZHVyaW5nIHNodXRkb3duLgotCQkgKgotCQkgKiBOQjogVGhlIGZhY3QgdGhhdCB3ZSBtaWdodCB0cnkgdG8gd2FrZSB1cCBwZW5kaW5nX2ZyZWVfd3EKLQkJICogYmVmb3JlIGRyYWluX2NvbXBsZXRlIChpbiBjYXNlIHRoZXJlJ3MgYSBkcmFpbiBnb2luZyBvbikKLQkJICogaXQncyBub3QgYSBwcm9ibGVtIHdpdGggb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24KLQkJICogYmVjYXVzZSB3ZSBjYW4gYXNzdXJlIHRoZXJlJ3Mgbm8gdGhyZWFkIHdhaXRpbmcgb24KLQkJICogcGVuZGluZ19mcmVlX3dxIGlmIHRoZXJlJ3MgYSBkcmFpbiBnb2luZyBvbiwgYnV0IGl0IGhhcwotCQkgKiB0byBiZSB0YWtlbiBpbnRvIGFjY291bnQgaWYgdGhlIGN1cnJlbnQgbW9kZWwgaXMgY2hhbmdlZC4KLQkJICovCi0JCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZibGtpZi0+aW5mbGlnaHQpICYmIGF0b21pY19yZWFkKCZibGtpZi0+ZHJhaW4pKSB7Ci0JCQljb21wbGV0ZSgmYmxraWYtPmRyYWluX2NvbXBsZXRlKTsKLQkJfQotCQl4ZW5fYmxraWZfcHV0KGJsa2lmKTsKLQl9CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBlbmRpbmdfcmVxLT5wZW5kY250KSkKKwkJeGVuX2Jsa2JrX3VubWFwX2FuZF9yZXNwb25kKHBlbmRpbmdfcmVxKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2svY29tbW9uLmggYi9kcml2ZXJzL2Jsb2NrL3hlbi1ibGtiYWNrL2NvbW1vbi5oCmluZGV4IGY2NWI4MDcuLmNjOTBhODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveGVuLWJsa2JhY2svY29tbW9uLmgKKysrIGIvZHJpdmVycy9ibG9jay94ZW4tYmxrYmFjay9jb21tb24uaApAQCAtMzUwLDYgKzM1MCw5IEBACiAJc3RydWN0IGdyYW50X3BhZ2UJKmluZGlyZWN0X3BhZ2VzW01BWF9JTkRJUkVDVF9QQUdFU107CiAJc3RydWN0IHNlZ19idWYJCXNlZ1tNQVhfSU5ESVJFQ1RfU0VHTUVOVFNdOwogCXN0cnVjdCBiaW8JCSpiaW9saXN0W01BWF9JTkRJUkVDVF9TRUdNRU5UU107CisJc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgdW5tYXBbTUFYX0lORElSRUNUX1NFR01FTlRTXTsKKwlzdHJ1Y3QgcGFnZSAgICAgICAgICAgICAgICAgICAqdW5tYXBfcGFnZXNbTUFYX0lORElSRUNUX1NFR01FTlRTXTsKKwlzdHJ1Y3QgZ250YWJfdW5tYXBfcXVldWVfZGF0YSBnbnR0YWJfdW5tYXBfZGF0YTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMKaW5kZXggMWVlMjdhYy4uZGU0Yzg0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jCkBAIC0xMDgsNiArMTA4LDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzOTMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzNDAyKSB9LAogCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzQwOCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDM0MjMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzNDMyKSB9LAogCiAJLyogQXRoZXJvcyBBUjVCQlUxMiB3aXRoIHNmbGFzaCBmaXJtd2FyZSAqLwpAQCAtMTYyLDYgKzE2Myw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzkzKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfQVRIMzAxMiB9LAogCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzQwMiksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0FUSDMwMTIgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDM0MDgpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCisJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzNDIzKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfQVRIMzAxMiB9LAogCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzQzMiksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0FUSDMwMTIgfSwKIAogCS8qIEF0aGVyb3MgQVI1QkJVMjIgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8KQEAgLTE3NCw2ICsxNzYsOCBAQAogI2RlZmluZSBVU0JfUkVRX0RGVV9ETkxPQUQJMQogI2RlZmluZSBCVUxLX1NJWkUJCTQwOTYKICNkZWZpbmUgRldfSERSX1NJWkUJCTIwCisjZGVmaW5lIFRJTUVHQVBfVVNFQ19NSU4JNTAKKyNkZWZpbmUgVElNRUdBUF9VU0VDX01BWAkxMDAKIAogc3RhdGljIGludCBhdGgza19sb2FkX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAogCQkJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUpCkBAIC0yMDUsNiArMjA5LDkgQEAKIAlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIDB4MDIpOwogCiAJd2hpbGUgKGNvdW50KSB7CisJCS8qIHdvcmthcm91bmQgdGhlIGNvbXBhdGliaWxpdHkgaXNzdWUgd2l0aCB4SENJIGNvbnRyb2xsZXIqLworCQl1c2xlZXBfcmFuZ2UoVElNRUdBUF9VU0VDX01JTiwgVElNRUdBUF9VU0VDX01BWCk7CisKIAkJc2l6ZSA9IG1pbl90KHVpbnQsIGNvdW50LCBCVUxLX1NJWkUpOwogCQltZW1jcHkoc2VuZF9idWYsIGZpcm13YXJlLT5kYXRhICsgc2VudCwgc2l6ZSk7CiAKQEAgLTMwMiw2ICszMDksOSBAQAogCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUodWRldiwgMHgwMik7CiAKIAl3aGlsZSAoY291bnQpIHsKKwkJLyogd29ya2Fyb3VuZCB0aGUgY29tcGF0aWJpbGl0eSBpc3N1ZSB3aXRoIHhIQ0kgY29udHJvbGxlciovCisJCXVzbGVlcF9yYW5nZShUSU1FR0FQX1VTRUNfTUlOLCBUSU1FR0FQX1VTRUNfTUFYKTsKKwogCQlzaXplID0gbWluX3QodWludCwgY291bnQsIEJVTEtfU0laRSk7CiAJCW1lbWNweShzZW5kX2J1ZiwgZmlybXdhcmUtPmRhdGEgKyBzZW50LCBzaXplKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMKaW5kZXggYjJlN2U5NC4uZmNmYjcyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jCkBAIC02OTYsNiArNjk2LDggQEAKIAloZGV2LT5mbHVzaCA9IGJmdXNiX2ZsdXNoOwogCWhkZXYtPnNlbmQgID0gYmZ1c2Jfc2VuZF9mcmFtZTsKIAorCXNldF9iaXQoSENJX1FVSVJLX0JST0tFTl9MT0NBTF9DT01NQU5EUywgJmhkZXYtPnF1aXJrcyk7CisKIAlpZiAoaGNpX3JlZ2lzdGVyX2RldihoZGV2KSA8IDApIHsKIAkJQlRfRVJSKCJDYW4ndCByZWdpc3RlciBIQ0kgZGV2aWNlIik7CiAJCWhjaV9mcmVlX2RldihoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9kcnYuaCBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9kcnYuaAppbmRleCAzMzBmOGY4Li5lNzVmOGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfZHJ2LmgKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX2Rydi5oCkBAIC0yOCw5ICsyOCw5IEBACiAjZGVmaW5lIEJUTV9VUExEX1NJWkUJCQkyMzEyCiAKIC8qIFRpbWUgdG8gd2FpdCB1bnRpbCBIb3N0IFNsZWVwIHN0YXRlIGNoYW5nZSBpbiBtaWxsaXNlY29uZCAqLwotI2RlZmluZSBXQUlUX1VOVElMX0hTX1NUQVRFX0NIQU5HRUQJNTAwMAorI2RlZmluZSBXQUlUX1VOVElMX0hTX1NUQVRFX0NIQU5HRUQJbXNlY3NfdG9famlmZmllcyg1MDAwKQogLyogVGltZSB0byB3YWl0IGZvciBjb21tYW5kIHJlc3BvbnNlIGluIG1pbGxpc2Vjb25kICovCi0jZGVmaW5lIFdBSVRfVU5USUxfQ01EX1JFU1AJCTUwMDAKKyNkZWZpbmUgV0FJVF9VTlRJTF9DTURfUkVTUAkJbXNlY3NfdG9famlmZmllcyg1MDAwKQogCiBlbnVtIHJkd3Jfc3RhdHVzIHsKIAlSRFdSX1NUQVRVU19TVUNDRVNTID0gMCwKQEAgLTEwNCw2ICsxMDQsNyBAQAogI2lmZGVmIENPTkZJR19ERUJVR19GUwogCXZvaWQgKmRlYnVnZnNfZGF0YTsKICNlbmRpZgorCWJvb2wgc3VycHJpc2VfcmVtb3ZlZDsKIH07CiAKICNkZWZpbmUgTVJWTF9WRU5ET1JfUEtUCQkJMHhGRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX21haW4uYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9tYWluLmMKaW5kZXggMzA5MzljOS4uNDEzNTk3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX21haW4uYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfbWFpbi5jCkBAIC0xNzgsNiArMTc4LDExIEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaGNpX2NvbW1hbmRfaGRyICpoZHI7CiAKKwlpZiAocHJpdi0+c3VycHJpc2VfcmVtb3ZlZCkgeworCQlCVF9FUlIoIkNhcmQgaXMgcmVtb3ZlZCIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKIAlza2IgPSBidF9za2JfYWxsb2MoSENJX0NPTU1BTkRfSERSX1NJWkUgKyBsZW4sIEdGUF9BVE9NSUMpOwogCWlmIChza2IgPT0gTlVMTCkgewogCQlCVF9FUlIoIk5vIGZyZWUgc2tiIik7CkBAIC0yMDIsMTAgKzIwNywxNCBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+bWFpbl90aHJlYWQud2FpdF9xKTsKIAogCWlmICghd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+YWRhcHRlci0+Y21kX3dhaXRfcSwKLQkJCQlwcml2LT5hZGFwdGVyLT5jbWRfY29tcGxldGUsCi0JCQkJbXNlY3NfdG9famlmZmllcyhXQUlUX1VOVElMX0NNRF9SRVNQKSkpCisJCQkJCSAgICAgIHByaXYtPmFkYXB0ZXItPmNtZF9jb21wbGV0ZSB8fAorCQkJCQkgICAgICBwcml2LT5zdXJwcmlzZV9yZW1vdmVkLAorCQkJCQkgICAgICBXQUlUX1VOVElMX0NNRF9SRVNQKSkKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAKKwlpZiAocHJpdi0+c3VycHJpc2VfcmVtb3ZlZCkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg3LDkgKzI5NiwxMCBAQAogCX0KIAogCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGFkYXB0ZXItPmV2ZW50X2hzX3dhaXRfcSwKLQkJCQkJICAgICAgIGFkYXB0ZXItPmhzX3N0YXRlLAotCQkJbXNlY3NfdG9famlmZmllcyhXQUlUX1VOVElMX0hTX1NUQVRFX0NIQU5HRUQpKTsKLQlpZiAocmV0IDwgMCkgeworCQkJCQkgICAgICAgYWRhcHRlci0+aHNfc3RhdGUgfHwKKwkJCQkJICAgICAgIHByaXYtPnN1cnByaXNlX3JlbW92ZWQsCisJCQkJCSAgICAgICBXQUlUX1VOVElMX0hTX1NUQVRFX0NIQU5HRUQpOworCWlmIChyZXQgPCAwIHx8IHByaXYtPnN1cnByaXNlX3JlbW92ZWQpIHsKIAkJQlRfRVJSKCJldmVudF9oc193YWl0X3EgdGVybWluYXRlZCAoJWQpOiAlZCwlZCwlZCIsCiAJCSAgICAgICByZXQsIGFkYXB0ZXItPmhzX3N0YXRlLCBhZGFwdGVyLT5wc19zdGF0ZSwKIAkJICAgICAgIGFkYXB0ZXItPndha2V1cF90cmllcyk7CkBAIC01MzgsOCArNTQ4LDExIEBACiBzdGF0aWMgaW50IGJ0bXJ2bF9zZXR1cChzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKIAlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7CisJaW50IHJldDsKIAotCWJ0bXJ2bF9zZW5kX21vZHVsZV9jZmdfY21kKHByaXYsIE1PRFVMRV9CUklOR1VQX1JFUSk7CisJcmV0ID0gYnRtcnZsX3NlbmRfbW9kdWxlX2NmZ19jbWQocHJpdiwgTU9EVUxFX0JSSU5HVVBfUkVRKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJcHJpdi0+YnRtcnZsX2Rldi5ncGlvX2dhcCA9IDB4ZmZmZjsKIApAQCAtNTk3LDcgKzYxMCw3IEBACiAJCWFkZF93YWl0X3F1ZXVlKCZ0aHJlYWQtPndhaXRfcSwgJndhaXQpOwogCiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fCBwcml2LT5zdXJwcmlzZV9yZW1vdmVkKSB7CiAJCQlCVF9EQkcoIm1haW5fdGhyZWFkOiBicmVhayBmcm9tIG1haW4gdGhyZWFkIik7CiAJCQlicmVhazsKIAkJfQpAQCAtNjE2LDYgKzYyOSwxMSBAQAogCiAJCUJUX0RCRygibWFpbl90aHJlYWQgd29rZSB1cCIpOwogCisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgcHJpdi0+c3VycHJpc2VfcmVtb3ZlZCkgeworCQkJQlRfREJHKCJtYWluX3RocmVhZDogYnJlYWsgZnJvbSBtYWluIHRocmVhZCIpOworCQkJYnJlYWs7CisJCX0KKwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJaWYgKGFkYXB0ZXItPmludF9jb3VudCkgewogCQkJYWRhcHRlci0+aW50X2NvdW50ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jCmluZGV4IDAwNTdjMGIuLjAxZDZkYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYwpAQCAtNTczLDcgKzU3Myw3IEBACiAJCW9mZnNldCArPSB0eGxlbjsKIAl9IHdoaWxlICh0cnVlKTsKIAotCUJUX0RCRygiRlcgZG93bmxvYWQgb3Zlciwgc2l6ZSAlZCBieXRlcyIsIG9mZnNldCk7CisJQlRfSU5GTygiRlcgZG93bmxvYWQgb3Zlciwgc2l6ZSAlZCBieXRlcyIsIG9mZnNldCk7CiAKIAlyZXQgPSAwOwogCkBAIC03OTgsNiArNzk4LDkgQEAKIAogCXByaXYgPSBjYXJkLT5wcml2OwogCisJaWYgKHByaXYtPnN1cnByaXNlX3JlbW92ZWQpCisJCXJldHVybjsKKwogCWlmIChjYXJkLT5yZWctPmludF9yZWFkX3RvX2NsZWFyKQogCQlyZXQgPSBidG1ydmxfc2Rpb19yZWFkX3RvX2NsZWFyKGNhcmQsICZpcmVnKTsKIAllbHNlCkBAIC0xNDY2LDYgKzE0NjksNyBAQAogCQkJCWJ0bXJ2bF9zZGlvX2Rpc2FibGVfaG9zdF9pbnQoY2FyZCk7CiAJCQl9CiAJCQlCVF9EQkcoInVucmVnZXN0ZXIgZGV2Iik7CisJCQljYXJkLT5wcml2LT5zdXJwcmlzZV9yZW1vdmVkID0gdHJ1ZTsKIAkJCWJ0bXJ2bF9zZGlvX3VucmVnaXN0ZXJfZGV2KGNhcmQpOwogCQkJYnRtcnZsX3JlbW92ZV9jYXJkKGNhcmQtPnByaXYpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwppbmRleCAxOWNmMmNmLi5iODc2ODg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KIAotI2RlZmluZSBWRVJTSU9OICIwLjYiCisjZGVmaW5lIFZFUlNJT04gIjAuNyIKIAogc3RhdGljIGJvb2wgZGlzYWJsZV9zY29maXg7CiBzdGF0aWMgYm9vbCBmb3JjZV9zY29maXg7CkBAIC00OSwxMSArNDksMTcgQEAKICNkZWZpbmUgQlRVU0JfSU5URUxfQk9PVAkweDIwMAogI2RlZmluZSBCVFVTQl9CQ01fUEFUQ0hSQU0JMHg0MDAKICNkZWZpbmUgQlRVU0JfTUFSVkVMTAkJMHg4MDAKKyNkZWZpbmUgQlRVU0JfU1dBVkUJCTB4MTAwMAorI2RlZmluZSBCVFVTQl9JTlRFTF9ORVcJCTB4MjAwMAorI2RlZmluZSBCVFVTQl9BTVAJCTB4NDAwMAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgYnR1c2JfdGFibGVbXSA9IHsKIAkvKiBHZW5lcmljIEJsdWV0b290aCBVU0IgZGV2aWNlICovCiAJeyBVU0JfREVWSUNFX0lORk8oMHhlMCwgMHgwMSwgMHgwMSkgfSwKIAorCS8qIEdlbmVyaWMgQmx1ZXRvb3RoIEFNUCBkZXZpY2UgKi8KKwl7IFVTQl9ERVZJQ0VfSU5GTygweGUwLCAweDAxLCAweDA0KSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfQU1QIH0sCisKIAkvKiBBcHBsZS1zcGVjaWZpYyAoQnJvYWRjb20pIGRldmljZXMgKi8KIAl7IFVTQl9WRU5ET1JfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MDVhYywgMHhmZiwgMHgwMSwgMHgwMSkgfSwKIApAQCAtODUsNyArOTEsNyBAQAogCXsgVVNCX0RFVklDRSgweDA1YWMsIDB4ODI4MSkgfSwKIAogCS8qIEFWTSBCbHVlRlJJVFohIFVTQiB2Mi4wICovCi0JeyBVU0JfREVWSUNFKDB4MDU3YywgMHgzODAwKSB9LAorCXsgVVNCX0RFVklDRSgweDA1N2MsIDB4MzgwMCksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX1NXQVZFIH0sCiAKIAkvKiBCbHVldG9vdGggVWx0cmFwb3J0IE1vZHVsZSBmcm9tIElCTSAqLwogCXsgVVNCX0RFVklDRSgweDA0YmYsIDB4MDMwYSkgfSwKQEAgLTEwOSwxNiArMTE1LDI0IEBACiAJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzNDA0KSwKIAkgIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0JDTV9QQVRDSFJBTSB9LAogCisJLyogQnJvYWRjb20gQkNNMjA3MDJCMCAoRHluZXgvSW5zaWduaWEpICovCisJeyBVU0JfREVWSUNFKDB4MTlmZiwgMHgwMjM5KSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfQkNNX1BBVENIUkFNIH0sCisKIAkvKiBGb3hjb25uIC0gSG9uIEhhaSAqLwogCXsgVVNCX1ZFTkRPUl9BTkRfSU5URVJGQUNFX0lORk8oMHgwNDg5LCAweGZmLCAweDAxLCAweDAxKSwKIAkgIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0JDTV9QQVRDSFJBTSB9LAogCisJLyogTGl0ZS1PbiBUZWNobm9sb2d5IC0gQnJvYWRjb20gYmFzZWQgKi8KKwl7IFVTQl9WRU5ET1JfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MDRjYSwgMHhmZiwgMHgwMSwgMHgwMSksCisJICAuZHJpdmVyX2luZm8gPSBCVFVTQl9CQ01fUEFUQ0hSQU0gfSwKKwogCS8qIEJyb2FkY29tIGRldmljZXMgd2l0aCB2ZW5kb3Igc3BlY2lmaWMgaWQgKi8KIAl7IFVTQl9WRU5ET1JfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MGE1YywgMHhmZiwgMHgwMSwgMHgwMSksCiAJICAuZHJpdmVyX2luZm8gPSBCVFVTQl9CQ01fUEFUQ0hSQU0gfSwKIAogCS8qIEFTVVNUZWsgQ29tcHV0ZXIgLSBCcm9hZGNvbSBiYXNlZCAqLwotCXsgVVNCX1ZFTkRPUl9BTkRfSU5URVJGQUNFX0lORk8oMHgwYjA1LCAweGZmLCAweDAxLCAweDAxKSB9LAorCXsgVVNCX1ZFTkRPUl9BTkRfSU5URVJGQUNFX0lORk8oMHgwYjA1LCAweGZmLCAweDAxLCAweDAxKSwKKwkgIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0JDTV9QQVRDSFJBTSB9LAogCiAJLyogQmVsa2luIEY4MDY1YmYgLSBCcm9hZGNvbSBiYXNlZCAqLwogCXsgVVNCX1ZFTkRPUl9BTkRfSU5URVJGQUNFX0lORk8oMHgwNTBkLCAweGZmLCAweDAxLCAweDAxKSB9LApAQCAtMTg4LDYgKzIwMiw3IEBACiAJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzkzKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfQVRIMzAxMiB9LAogCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzQwMiksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0FUSDMwMTIgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDM0MDgpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sCisJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzNDIzKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfQVRIMzAxMiB9LAogCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzQzMiksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0FUSDMwMTIgfSwKIAogCS8qIEF0aGVyb3MgQVI1QkJVMTIgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8KQEAgLTIzNyw2ICsyNTIsOSBAQAogCS8qIENPTldJU0UgVGVjaG5vbG9neSBiYXNlZCBhZGFwdGVycyB3aXRoIGJ1Z2d5IFNDTyBzdXBwb3J0ICovCiAJeyBVU0JfREVWSUNFKDB4MGU1ZSwgMHg2NjIyKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfQlJPS0VOX0lTT0MgfSwKIAorCS8qIFJvcGVyIENsYXNzIDEgQmx1ZXRvb3RoIERvbmdsZSAoU2lsaWNvbiBXYXZlIGJhc2VkKSAqLworCXsgVVNCX0RFVklDRSgweDEzMDAsIDB4MDAwMSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX1NXQVZFIH0sCisKIAkvKiBEaWdpYW5zd2VyIGRldmljZXMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwOGZkLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9ESUdJQU5TV0VSIH0sCiAJeyBVU0JfREVWSUNFKDB4MDhmZCwgMHgwMDAyKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfSUdOT1JFIH0sCkBAIC0yNDksMTQgKzI2NywxOSBAQAogCXsgVVNCX0RFVklDRSgweDE2ZDMsIDB4MDAwMiksCiAJICAuZHJpdmVyX2luZm8gPSBCVFVTQl9TTklGRkVSIHwgQlRVU0JfQlJPS0VOX0lTT0MgfSwKIAotCS8qIEludGVsIEJsdWV0b290aCBkZXZpY2UgKi8KLQl7IFVTQl9ERVZJQ0UoMHg4MDg3LCAweDA3ZGMpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JTlRFTCB9LAotCXsgVVNCX0RFVklDRSgweDgwODcsIDB4MGEyYSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lOVEVMIH0sCi0KLQkvKiBNYXJ2ZWxsIGRldmljZSAqLworCS8qIE1hcnZlbGwgQmx1ZXRvb3RoIGRldmljZXMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMjg2LCAweDIwNDQpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9NQVJWRUxMIH0sCiAJeyBVU0JfREVWSUNFKDB4MTI4NiwgMHgyMDQ2KSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfTUFSVkVMTCB9LAogCisJLyogSW50ZWwgQmx1ZXRvb3RoIGRldmljZXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHg4MDg3LCAweDA3ZGMpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JTlRFTCB9LAorCXsgVVNCX0RFVklDRSgweDgwODcsIDB4MGEyYSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lOVEVMIH0sCisJeyBVU0JfREVWSUNFKDB4ODA4NywgMHgwYTJiKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfSU5URUxfTkVXIH0sCisKKwkvKiBPdGhlciBJbnRlbCBCbHVldG9vdGggZGV2aWNlcyAqLworCXsgVVNCX1ZFTkRPUl9BTkRfSU5URVJGQUNFX0lORk8oMHg4MDg3LCAweGUwLCAweDAxLCAweDAxKSwKKwkgIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9LAorCiAJeyB9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCkBAIC0yNjcsNiArMjkwLDExIEBACiAjZGVmaW5lIEJUVVNCX0lTT0NfUlVOTklORwkyCiAjZGVmaW5lIEJUVVNCX1NVU1BFTkRJTkcJMwogI2RlZmluZSBCVFVTQl9ESURfSVNPX1JFU1VNRQk0CisjZGVmaW5lIEJUVVNCX0JPT1RMT0FERVIJNQorI2RlZmluZSBCVFVTQl9ET1dOTE9BRElORwk2CisjZGVmaW5lIEJUVVNCX0ZJUk1XQVJFX0xPQURFRAk3CisjZGVmaW5lIEJUVVNCX0ZJUk1XQVJFX0ZBSUxFRAk4CisjZGVmaW5lIEJUVVNCX0JPT1RJTkcJCTkKIAogc3RydWN0IGJ0dXNiX2RhdGEgewogCXN0cnVjdCBoY2lfZGV2ICAgICAgICpoZGV2OwpAQCAtMzAwLDE0ICszMjgsMjYgQEAKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmlzb2NfcnhfZXA7CiAKIAlfX3U4IGNtZHJlcV90eXBlOworCV9fdTggY21kcmVxOwogCiAJdW5zaWduZWQgaW50IHNjb19udW07CiAJaW50IGlzb2NfYWx0c2V0dGluZzsKIAlpbnQgc3VzcGVuZF9jb3VudDsKIAorCWludCAoKnJlY3ZfZXZlbnQpKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlpbnQgKCpyZWN2X2J1bGspKHN0cnVjdCBidHVzYl9kYXRhICpkYXRhLCB2b2lkICpidWZmZXIsIGludCBjb3VudCk7CiB9OwogCitzdGF0aWMgaW50IGJ0dXNiX3dhaXRfb25fYml0X3RpbWVvdXQodm9pZCAqd29yZCwgaW50IGJpdCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LAorCQkJCSAgICAgdW5zaWduZWQgbW9kZSkKK3sKKwltaWdodF9zbGVlcCgpOworCWlmICghdGVzdF9iaXQoYml0LCB3b3JkKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIG91dF9vZl9saW5lX3dhaXRfb25fYml0X3RpbWVvdXQod29yZCwgYml0LCBiaXRfd2FpdF90aW1lb3V0LAorCQkJCQkgICAgICAgbW9kZSwgdGltZW91dCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBidHVzYl9mcmVlX2ZyYWdzKHN0cnVjdCBidHVzYl9kYXRhICpkYXRhKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zNzAsNyArNDEwLDcgQEAKIAogCQlpZiAoYnRfY2Ioc2tiKS0+ZXhwZWN0ID09IDApIHsKIAkJCS8qIENvbXBsZXRlIGZyYW1lICovCi0JCQloY2lfcmVjdl9mcmFtZShkYXRhLT5oZGV2LCBza2IpOworCQkJZGF0YS0+cmVjdl9ldmVudChkYXRhLT5oZGV2LCBza2IpOwogCQkJc2tiID0gTlVMTDsKIAkJfQogCX0KQEAgLTk1Miw3ICs5OTIsNyBAQAogCX0KIAogCWRyLT5iUmVxdWVzdFR5cGUgPSBkYXRhLT5jbWRyZXFfdHlwZTsKLQlkci0+YlJlcXVlc3QgICAgID0gMDsKKwlkci0+YlJlcXVlc3QgICAgID0gZGF0YS0+Y21kcmVxOwogCWRyLT53SW5kZXggICAgICAgPSAwOwogCWRyLT53VmFsdWUgICAgICAgPSAwOwogCWRyLT53TGVuZ3RoICAgICAgPSBfX2NwdV90b19sZTE2KHNrYi0+bGVuKTsKQEAgLTEyOTAsNiArMTMzMCwyNiBAQAogCXU4IGZ3X3BhdGNoX251bTsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCBpbnRlbF9ib290X3BhcmFtcyB7CisJX191OCAgICAgc3RhdHVzOworCV9fdTggICAgIG90cF9mb3JtYXQ7CisJX191OCAgICAgb3RwX2NvbnRlbnQ7CisJX191OCAgICAgb3RwX3BhdGNoOworCV9fbGUxNiAgIGRldl9yZXZpZDsKKwlfX3U4ICAgICBzZWN1cmVfYm9vdDsKKwlfX3U4ICAgICBrZXlfZnJvbV9oZHI7CisJX191OCAgICAga2V5X3R5cGU7CisJX191OCAgICAgb3RwX2xvY2s7CisJX191OCAgICAgYXBpX2xvY2s7CisJX191OCAgICAgZGVidWdfbG9jazsKKwliZGFkZHJfdCBvdHBfYmRhZGRyOworCV9fdTggICAgIG1pbl9md19idWlsZF9ubjsKKwlfX3U4ICAgICBtaW5fZndfYnVpbGRfY3c7CisJX191OCAgICAgbWluX2Z3X2J1aWxkX3l5OworCV9fdTggICAgIGxpbWl0ZWRfY2NlOworCV9fdTggICAgIHVubG9ja2VkX3N0YXRlOworfSBfX3BhY2tlZDsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYnR1c2Jfc2V0dXBfaW50ZWxfZ2V0X2Z3KHN0cnVjdCBoY2lfZGV2ICpoZGV2LAogCQkJCQkJICAgICAgIHN0cnVjdCBpbnRlbF92ZXJzaW9uICp2ZXIpCiB7CkBAIC0xNjk4LDYgKzE3NTgsNTYyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaW5qZWN0X2NtZF9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgX191MTYgb3Bjb2RlKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGhjaV9ldmVudF9oZHIgKmhkcjsKKwlzdHJ1Y3QgaGNpX2V2X2NtZF9jb21wbGV0ZSAqZXZ0OworCisJc2tiID0gYnRfc2tiX2FsbG9jKHNpemVvZigqaGRyKSArIHNpemVvZigqZXZ0KSArIDEsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhkciA9IChzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqKXNrYl9wdXQoc2tiLCBzaXplb2YoKmhkcikpOworCWhkci0+ZXZ0ID0gSENJX0VWX0NNRF9DT01QTEVURTsKKwloZHItPnBsZW4gPSBzaXplb2YoKmV2dCkgKyAxOworCisJZXZ0ID0gKHN0cnVjdCBoY2lfZXZfY21kX2NvbXBsZXRlICopc2tiX3B1dChza2IsIHNpemVvZigqZXZ0KSk7CisJZXZ0LT5uY21kID0gMHgwMTsKKwlldnQtPm9wY29kZSA9IGNwdV90b19sZTE2KG9wY29kZSk7CisKKwkqc2tiX3B1dChza2IsIDEpID0gMHgwMDsKKworCWJ0X2NiKHNrYiktPnBrdF90eXBlID0gSENJX0VWRU5UX1BLVDsKKworCXJldHVybiBoY2lfcmVjdl9mcmFtZShoZGV2LCBza2IpOworfQorCitzdGF0aWMgaW50IGJ0dXNiX3JlY3ZfYnVsa19pbnRlbChzdHJ1Y3QgYnR1c2JfZGF0YSAqZGF0YSwgdm9pZCAqYnVmZmVyLAorCQkJCSBpbnQgY291bnQpCit7CisJLyogV2hlbiB0aGUgZGV2aWNlIGlzIGluIGJvb3Rsb2FkZXIgbW9kZSwgdGhlbiBpdCBjYW4gc2VuZAorCSAqIGV2ZW50cyB2aWEgdGhlIGJ1bGsgZW5kcG9pbnQuIFRoZXNlIGV2ZW50cyBhcmUgdHJlYXRlZCB0aGUKKwkgKiBzYW1lIHdheSBhcyB0aGUgb25lcyByZWNlaXZlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQuCisJICovCisJaWYgKHRlc3RfYml0KEJUVVNCX0JPT1RMT0FERVIsICZkYXRhLT5mbGFncykpCisJCXJldHVybiBidHVzYl9yZWN2X2ludHIoZGF0YSwgYnVmZmVyLCBjb3VudCk7CisKKwlyZXR1cm4gYnR1c2JfcmVjdl9idWxrKGRhdGEsIGJ1ZmZlciwgY291bnQpOworfQorCitzdGF0aWMgaW50IGJ0dXNiX3JlY3ZfZXZlbnRfaW50ZWwoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGEgPSBoY2lfZ2V0X2RydmRhdGEoaGRldik7CisKKwlpZiAodGVzdF9iaXQoQlRVU0JfQk9PVExPQURFUiwgJmRhdGEtPmZsYWdzKSkgeworCQlzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqaGRyID0gKHZvaWQgKilza2ItPmRhdGE7CisKKwkJLyogV2hlbiB0aGUgZmlybXdhcmUgbG9hZGluZyBjb21wbGV0ZXMgdGhlIGRldmljZSBzZW5kcworCQkgKiBvdXQgYSB2ZW5kb3Igc3BlY2lmaWMgZXZlbnQgaW5kaWNhdGluZyB0aGUgcmVzdWx0IG9mCisJCSAqIHRoZSBmaXJtd2FyZSBsb2FkaW5nLgorCQkgKi8KKwkJaWYgKHNrYi0+bGVuID09IDcgJiYgaGRyLT5ldnQgPT0gMHhmZiAmJiBoZHItPnBsZW4gPT0gMHgwNSAmJgorCQkgICAgc2tiLT5kYXRhWzJdID09IDB4MDYpIHsKKwkJCWlmIChza2ItPmRhdGFbM10gIT0gMHgwMCkKKwkJCQl0ZXN0X2JpdChCVFVTQl9GSVJNV0FSRV9GQUlMRUQsICZkYXRhLT5mbGFncyk7CisKKwkJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQlRVU0JfRE9XTkxPQURJTkcsCisJCQkJCSAgICAgICAmZGF0YS0+ZmxhZ3MpICYmCisJCQkgICAgdGVzdF9iaXQoQlRVU0JfRklSTVdBUkVfTE9BREVELCAmZGF0YS0+ZmxhZ3MpKSB7CisJCQkJc21wX21iX19hZnRlcl9hdG9taWMoKTsKKwkJCQl3YWtlX3VwX2JpdCgmZGF0YS0+ZmxhZ3MsIEJUVVNCX0RPV05MT0FESU5HKTsKKwkJCX0KKwkJfQorCisJCS8qIFdoZW4gc3dpdGNoaW5nIHRvIHRoZSBvcGVyYXRpb25hbCBmaXJtd2FyZSB0aGUgZGV2aWNlCisJCSAqIHNlbmRzIGEgdmVuZG9yIHNwZWNpZmljIGV2ZW50IGluZGljYXRpbmcgdGhhdCB0aGUgYm9vdHVwCisJCSAqIGNvbXBsZXRlZC4KKwkJICovCisJCWlmIChza2ItPmxlbiA9PSA5ICYmIGhkci0+ZXZ0ID09IDB4ZmYgJiYgaGRyLT5wbGVuID09IDB4MDcgJiYKKwkJICAgIHNrYi0+ZGF0YVsyXSA9PSAweDAyKSB7CisJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEJUVVNCX0JPT1RJTkcsICZkYXRhLT5mbGFncykpIHsKKwkJCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOworCQkJCXdha2VfdXBfYml0KCZkYXRhLT5mbGFncywgQlRVU0JfQk9PVElORyk7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gaGNpX3JlY3ZfZnJhbWUoaGRldiwgc2tiKTsKK30KKworc3RhdGljIGludCBidHVzYl9zZW5kX2ZyYW1lX2ludGVsKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBidHVzYl9kYXRhICpkYXRhID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpOworCXN0cnVjdCB1cmIgKnVyYjsKKworCUJUX0RCRygiJXMiLCBoZGV2LT5uYW1lKTsKKworCWlmICghdGVzdF9iaXQoSENJX1JVTk5JTkcsICZoZGV2LT5mbGFncykpCisJCXJldHVybiAtRUJVU1k7CisKKwlzd2l0Y2ggKGJ0X2NiKHNrYiktPnBrdF90eXBlKSB7CisJY2FzZSBIQ0lfQ09NTUFORF9QS1Q6CisJCWlmICh0ZXN0X2JpdChCVFVTQl9CT09UTE9BREVSLCAmZGF0YS0+ZmxhZ3MpKSB7CisJCQlzdHJ1Y3QgaGNpX2NvbW1hbmRfaGRyICpjbWQgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJCV9fdTE2IG9wY29kZSA9IGxlMTZfdG9fY3B1KGNtZC0+b3Bjb2RlKTsKKworCQkJLyogV2hlbiBpbiBib290bG9hZGVyIG1vZGUgYW5kIHRoZSBjb21tYW5kIDB4ZmMwOQorCQkJICogaXMgcmVjZWl2ZWQsIGl0IG5lZWRzIHRvIGJlIHNlbmQgZG93biB0aGUKKwkJCSAqIGJ1bGsgZW5kcG9pbnQuIFNvIGFsbG9jYXRlIGEgYnVsayBVUkIgaW5zdGVhZC4KKwkJCSAqLworCQkJaWYgKG9wY29kZSA9PSAweGZjMDkpCisJCQkJdXJiID0gYWxsb2NfYnVsa191cmIoaGRldiwgc2tiKTsKKwkJCWVsc2UKKwkJCQl1cmIgPSBhbGxvY19jdHJsX3VyYihoZGV2LCBza2IpOworCisJCQkvKiBXaGVuIHRoZSAweGZjMDEgY29tbWFuZCBpcyBpc3N1ZWQgdG8gYm9vdCBpbnRvCisJCQkgKiB0aGUgb3BlcmF0aW9uYWwgZmlybXdhcmUsIGl0IHdpbGwgYWN0dWFsbHkgbm90CisJCQkgKiBzZW5kIGEgY29tbWFuZCBjb21wbGV0ZSBldmVudC4gVG8ga2VlcCB0aGUgZmxvdworCQkJICogY29udHJvbCB3b3JraW5nIGluamVjdCB0aGF0IGV2ZW50IGhlcmUuCisJCQkgKi8KKwkJCWlmIChvcGNvZGUgPT0gMHhmYzAxKQorCQkJCWluamVjdF9jbWRfY29tcGxldGUoaGRldiwgb3Bjb2RlKTsKKwkJfSBlbHNlIHsKKwkJCXVyYiA9IGFsbG9jX2N0cmxfdXJiKGhkZXYsIHNrYik7CisJCX0KKwkJaWYgKElTX0VSUih1cmIpKQorCQkJcmV0dXJuIFBUUl9FUlIodXJiKTsKKworCQloZGV2LT5zdGF0LmNtZF90eCsrOworCQlyZXR1cm4gc3VibWl0X29yX3F1ZXVlX3R4X3VyYihoZGV2LCB1cmIpOworCisJY2FzZSBIQ0lfQUNMREFUQV9QS1Q6CisJCXVyYiA9IGFsbG9jX2J1bGtfdXJiKGhkZXYsIHNrYik7CisJCWlmIChJU19FUlIodXJiKSkKKwkJCXJldHVybiBQVFJfRVJSKHVyYik7CisKKwkJaGRldi0+c3RhdC5hY2xfdHgrKzsKKwkJcmV0dXJuIHN1Ym1pdF9vcl9xdWV1ZV90eF91cmIoaGRldiwgdXJiKTsKKworCWNhc2UgSENJX1NDT0RBVEFfUEtUOgorCQlpZiAoaGNpX2Nvbm5fbnVtKGhkZXYsIFNDT19MSU5LKSA8IDEpCisJCQlyZXR1cm4gLUVOT0RFVjsKKworCQl1cmIgPSBhbGxvY19pc29jX3VyYihoZGV2LCBza2IpOworCQlpZiAoSVNfRVJSKHVyYikpCisJCQlyZXR1cm4gUFRSX0VSUih1cmIpOworCisJCWhkZXYtPnN0YXQuc2NvX3R4Kys7CisJCXJldHVybiBzdWJtaXRfdHhfdXJiKGhkZXYsIHVyYik7CisJfQorCisJcmV0dXJuIC1FSUxTRVE7Cit9CisKK3N0YXRpYyBpbnQgYnR1c2JfaW50ZWxfc2VjdXJlX3NlbmQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IGZyYWdtZW50X3R5cGUsCisJCQkJICAgdTMyIHBsZW4sIGNvbnN0IHZvaWQgKnBhcmFtKQoreworCXdoaWxlIChwbGVuID4gMCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQl1OCBjbWRfcGFyYW1bMjUzXSwgZnJhZ21lbnRfbGVuID0gKHBsZW4gPiAyNTIpID8gMjUyIDogcGxlbjsKKworCQljbWRfcGFyYW1bMF0gPSBmcmFnbWVudF90eXBlOworCQltZW1jcHkoY21kX3BhcmFtICsgMSwgcGFyYW0sIGZyYWdtZW50X2xlbik7CisKKwkJc2tiID0gX19oY2lfY21kX3N5bmMoaGRldiwgMHhmYzA5LCBmcmFnbWVudF9sZW4gKyAxLAorCQkJCSAgICAgY21kX3BhcmFtLCBIQ0lfSU5JVF9USU1FT1VUKTsKKwkJaWYgKElTX0VSUihza2IpKQorCQkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKKworCQlrZnJlZV9za2Ioc2tiKTsKKworCQlwbGVuIC09IGZyYWdtZW50X2xlbjsKKwkJcGFyYW0gKz0gZnJhZ21lbnRfbGVuOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBidHVzYl9pbnRlbF92ZXJzaW9uX2luZm8oc3RydWN0IGhjaV9kZXYgKmhkZXYsCisJCQkJICAgICBzdHJ1Y3QgaW50ZWxfdmVyc2lvbiAqdmVyKQoreworCWNvbnN0IGNoYXIgKnZhcmlhbnQ7CisKKwlzd2l0Y2ggKHZlci0+ZndfdmFyaWFudCkgeworCWNhc2UgMHgwNjoKKwkJdmFyaWFudCA9ICJCb290bG9hZGVyIjsKKwkJYnJlYWs7CisJY2FzZSAweDIzOgorCQl2YXJpYW50ID0gIkZpcm13YXJlIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCUJUX0lORk8oIiVzOiAlcyByZXZpc2lvbiAldS4ldSBidWlsZCAldSB3ZWVrICV1ICV1IiwgaGRldi0+bmFtZSwKKwkJdmFyaWFudCwgdmVyLT5md19yZXZpc2lvbiA+PiA0LCB2ZXItPmZ3X3JldmlzaW9uICYgMHgwZiwKKwkJdmVyLT5md19idWlsZF9udW0sIHZlci0+ZndfYnVpbGRfd3csIDIwMDAgKyB2ZXItPmZ3X2J1aWxkX3l5KTsKK30KKworc3RhdGljIGludCBidHVzYl9zZXR1cF9pbnRlbF9uZXcoc3RydWN0IGhjaV9kZXYgKmhkZXYpCit7CisJc3RhdGljIGNvbnN0IHU4IHJlc2V0X3BhcmFtW10gPSB7IDB4MDAsIDB4MDEsIDB4MDAsIDB4MDEsCisJCQkJCSAgMHgwMCwgMHgwOCwgMHgwNCwgMHgwMCB9OworCXN0cnVjdCBidHVzYl9kYXRhICpkYXRhID0gaGNpX2dldF9kcnZkYXRhKGhkZXYpOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGludGVsX3ZlcnNpb24gKnZlcjsKKwlzdHJ1Y3QgaW50ZWxfYm9vdF9wYXJhbXMgKnBhcmFtczsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IHU4ICpmd19wdHI7CisJY2hhciBmd25hbWVbNjRdOworCWt0aW1lX3QgY2FsbHRpbWUsIGRlbHRhLCByZXR0aW1lOworCXVuc2lnbmVkIGxvbmcgbG9uZyBkdXJhdGlvbjsKKwlpbnQgZXJyOworCisJQlRfREJHKCIlcyIsIGhkZXYtPm5hbWUpOworCisJY2FsbHRpbWUgPSBrdGltZV9nZXQoKTsKKworCS8qIFJlYWQgdGhlIEludGVsIHZlcnNpb24gaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIGlmIHRoZSBkZXZpY2UKKwkgKiBpcyBpbiBib290bG9hZGVyIG1vZGUgb3IgaWYgaXQgYWxyZWFkeSBoYXMgb3BlcmF0aW9uYWwgZmlybXdhcmUKKwkgKiBsb2FkZWQuCisJICovCisJc2tiID0gX19oY2lfY21kX3N5bmMoaGRldiwgMHhmYzA1LCAwLCBOVUxMLCBIQ0lfSU5JVF9USU1FT1VUKTsKKwlpZiAoSVNfRVJSKHNrYikpIHsKKwkJQlRfRVJSKCIlczogUmVhZGluZyBJbnRlbCB2ZXJzaW9uIGluZm9ybWF0aW9uIGZhaWxlZCAoJWxkKSIsCisJCSAgICAgICBoZGV2LT5uYW1lLCBQVFJfRVJSKHNrYikpOworCQlyZXR1cm4gUFRSX0VSUihza2IpOworCX0KKworCWlmIChza2ItPmxlbiAhPSBzaXplb2YoKnZlcikpIHsKKwkJQlRfRVJSKCIlczogSW50ZWwgdmVyc2lvbiBldmVudCBzaXplIG1pc21hdGNoIiwgaGRldi0+bmFtZSk7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gLUVJTFNFUTsKKwl9CisKKwl2ZXIgPSAoc3RydWN0IGludGVsX3ZlcnNpb24gKilza2ItPmRhdGE7CisJaWYgKHZlci0+c3RhdHVzKSB7CisJCUJUX0VSUigiJXM6IEludGVsIHZlcnNpb24gY29tbWFuZCBmYWlsdXJlICglMDJ4KSIsCisJCSAgICAgICBoZGV2LT5uYW1lLCB2ZXItPnN0YXR1cyk7CisJCWVyciA9IC1idF90b19lcnJubyh2ZXItPnN0YXR1cyk7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gZXJyOworCX0KKworCS8qIFRoZSBoYXJkd2FyZSBwbGF0Zm9ybSBudW1iZXIgaGFzIGEgZml4ZWQgdmFsdWUgb2YgMHgzNyBhbmQKKwkgKiBmb3Igbm93IG9ubHkgYWNjZXB0IHRoaXMgc2luZ2xlIHZhbHVlLgorCSAqLworCWlmICh2ZXItPmh3X3BsYXRmb3JtICE9IDB4MzcpIHsKKwkJQlRfRVJSKCIlczogVW5zdXBwb3J0ZWQgSW50ZWwgaGFyZHdhcmUgcGxhdGZvcm0gKCV1KSIsCisJCSAgICAgICBoZGV2LT5uYW1lLCB2ZXItPmh3X3BsYXRmb3JtKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEF0IHRoZSBtb21lbnQgb25seSB0aGUgaGFyZHdhcmUgdmFyaWFudCBpQlQgMy4wIChMblAvU2ZQKSBpcworCSAqIHN1cHBvcnRlZCBieSB0aGlzIGZpcm13YXJlIGxvYWRpbmcgbWV0aG9kLiBUaGlzIGNoZWNrIGhhcyBiZWVuCisJICogcHV0IGluIHBsYWNlIHRvIGVuc3VyZSBjb3JyZWN0IGZvcndhcmQgY29tcGF0aWJpbGl0eSBvcHRpb25zCisJICogd2hlbiBuZXdlciBoYXJkd2FyZSB2YXJpYW50cyBjb21lIGFsb25nLgorCSAqLworCWlmICh2ZXItPmh3X3ZhcmlhbnQgIT0gMHgwYikgeworCQlCVF9FUlIoIiVzOiBVbnN1cHBvcnRlZCBJbnRlbCBoYXJkd2FyZSB2YXJpYW50ICgldSkiLAorCQkgICAgICAgaGRldi0+bmFtZSwgdmVyLT5od192YXJpYW50KTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWJ0dXNiX2ludGVsX3ZlcnNpb25faW5mbyhoZGV2LCB2ZXIpOworCisJLyogVGhlIGZpcm13YXJlIHZhcmlhbnQgZGV0ZXJtaW5lcyBpZiB0aGUgZGV2aWNlIGlzIGluIGJvb3Rsb2FkZXIKKwkgKiBtb2RlIG9yIGlzIHJ1bm5pbmcgb3BlcmF0aW9uYWwgZmlybXdhcmUuIFRoZSB2YWx1ZSAweDA2IGlkZW50aWZpZXMKKwkgKiB0aGUgYm9vdGxvYWRlciBhbmQgdGhlIHZhbHVlIDB4MjMgaWRlbnRpZmllcyB0aGUgb3BlcmF0aW9uYWwKKwkgKiBmaXJtd2FyZS4KKwkgKgorCSAqIFdoZW4gdGhlIG9wZXJhdGlvbmFsIGZpcm13YXJlIGlzIGFscmVhZHkgcHJlc2VudCwgdGhlbiBvbmx5CisJICogdGhlIGNoZWNrIGZvciB2YWxpZCBCbHVldG9vdGggZGV2aWNlIGFkZHJlc3MgaXMgbmVlZGVkLiBUaGlzCisJICogZGV0ZXJtaW5lcyBpZiB0aGUgZGV2aWNlIHdpbGwgYmUgYWRkZWQgYXMgY29uZmlndXJlZCBvcgorCSAqIHVuY29uZmlndXJlZCBjb250cm9sbGVyLgorCSAqCisJICogSXQgaXMgbm90IHBvc3NpYmxlIHRvIHVzZSB0aGUgU2VjdXJlIEJvb3QgUGFyYW1ldGVycyBpbiB0aGlzCisJICogY2FzZSBzaW5jZSB0aGF0IGNvbW1hbmQgaXMgb25seSBhdmFpbGFibGUgaW4gYm9vdGxvYWRlciBtb2RlLgorCSAqLworCWlmICh2ZXItPmZ3X3ZhcmlhbnQgPT0gMHgyMykgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJY2xlYXJfYml0KEJUVVNCX0JPT1RMT0FERVIsICZkYXRhLT5mbGFncyk7CisJCWJ0dXNiX2NoZWNrX2JkYWRkcl9pbnRlbChoZGV2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSWYgdGhlIGRldmljZSBpcyBub3QgaW4gYm9vdGxvYWRlciBtb2RlLCB0aGVuIHRoZSBvbmx5IHBvc3NpYmxlCisJICogY2hvaWNlIGlzIHRvIHJldHVybiBhbiBlcnJvciBhbmQgYWJvcnQgdGhlIGRldmljZSBpbml0aWFsaXphdGlvbi4KKwkgKi8KKwlpZiAodmVyLT5md192YXJpYW50ICE9IDB4MDYpIHsKKwkJQlRfRVJSKCIlczogVW5zdXBwb3J0ZWQgSW50ZWwgZmlybXdhcmUgdmFyaWFudCAoJXUpIiwKKwkJICAgICAgIGhkZXYtPm5hbWUsIHZlci0+ZndfdmFyaWFudCk7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlrZnJlZV9za2Ioc2tiKTsKKworCS8qIFJlYWQgdGhlIHNlY3VyZSBib290IHBhcmFtZXRlcnMgdG8gaWRlbnRpZnkgdGhlIG9wZXJhdGluZworCSAqIGRldGFpbHMgb2YgdGhlIGJvb3Rsb2FkZXIuCisJICovCisJc2tiID0gX19oY2lfY21kX3N5bmMoaGRldiwgMHhmYzBkLCAwLCBOVUxMLCBIQ0lfSU5JVF9USU1FT1VUKTsKKwlpZiAoSVNfRVJSKHNrYikpIHsKKwkJQlRfRVJSKCIlczogUmVhZGluZyBJbnRlbCBib290IHBhcmFtZXRlcnMgZmFpbGVkICglbGQpIiwKKwkJICAgICAgIGhkZXYtPm5hbWUsIFBUUl9FUlIoc2tiKSk7CisJCXJldHVybiBQVFJfRVJSKHNrYik7CisJfQorCisJaWYgKHNrYi0+bGVuICE9IHNpemVvZigqcGFyYW1zKSkgeworCQlCVF9FUlIoIiVzOiBJbnRlbCBib290IHBhcmFtZXRlcnMgc2l6ZSBtaXNtYXRjaCIsIGhkZXYtPm5hbWUpOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIC1FSUxTRVE7CisJfQorCisJcGFyYW1zID0gKHN0cnVjdCBpbnRlbF9ib290X3BhcmFtcyAqKXNrYi0+ZGF0YTsKKwlpZiAocGFyYW1zLT5zdGF0dXMpIHsKKwkJQlRfRVJSKCIlczogSW50ZWwgYm9vdCBwYXJhbWV0ZXJzIGNvbW1hbmQgZmFpbHVyZSAoJTAyeCkiLAorCQkgICAgICAgaGRldi0+bmFtZSwgcGFyYW1zLT5zdGF0dXMpOworCQllcnIgPSAtYnRfdG9fZXJybm8ocGFyYW1zLT5zdGF0dXMpOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlCVF9JTkZPKCIlczogRGV2aWNlIHJldmlzaW9uIGlzICV1IiwgaGRldi0+bmFtZSwKKwkJbGUxNl90b19jcHUocGFyYW1zLT5kZXZfcmV2aWQpKTsKKworCUJUX0lORk8oIiVzOiBTZWN1cmUgYm9vdCBpcyAlcyIsIGhkZXYtPm5hbWUsCisJCXBhcmFtcy0+c2VjdXJlX2Jvb3QgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKKworCUJUX0lORk8oIiVzOiBNaW5pbXVtIGZpcm13YXJlIGJ1aWxkICV1IHdlZWsgJXUgJXUiLCBoZGV2LT5uYW1lLAorCQlwYXJhbXMtPm1pbl9md19idWlsZF9ubiwgcGFyYW1zLT5taW5fZndfYnVpbGRfY3csCisJCTIwMDAgKyBwYXJhbXMtPm1pbl9md19idWlsZF95eSk7CisKKwkvKiBJdCBpcyByZXF1aXJlZCB0aGF0IGV2ZXJ5IHNpbmdsZSBmaXJtd2FyZSBmcmFnbWVudCBpcyBhY2tub3dsZWRnZWQKKwkgKiB3aXRoIGEgY29tbWFuZCBjb21wbGV0ZSBldmVudC4gSWYgdGhlIGJvb3QgcGFyYW1ldGVycyBpbmRpY2F0ZQorCSAqIHRoYXQgdGhpcyBib290bG9hZGVyIGRvZXMgbm90IHNlbmQgdGhlbSwgdGhlbiBhYm9ydCB0aGUgc2V0dXAuCisJICovCisJaWYgKHBhcmFtcy0+bGltaXRlZF9jY2UgIT0gMHgwMCkgeworCQlCVF9FUlIoIiVzOiBVbnN1cHBvcnRlZCBJbnRlbCBmaXJtd2FyZSBsb2FkaW5nIG1ldGhvZCAoJXUpIiwKKwkJICAgICAgIGhkZXYtPm5hbWUsIHBhcmFtcy0+bGltaXRlZF9jY2UpOworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogSWYgdGhlIE9UUCBoYXMgbm8gdmFsaWQgQmx1ZXRvb3RoIGRldmljZSBhZGRyZXNzLCB0aGVuIHRoZXJlIHdpbGwKKwkgKiBhbHNvIGJlIG5vIHZhbGlkIGFkZHJlc3MgZm9yIHRoZSBvcGVyYXRpb25hbCBmaXJtd2FyZS4KKwkgKi8KKwlpZiAoIWJhY21wKCZwYXJhbXMtPm90cF9iZGFkZHIsIEJEQUREUl9BTlkpKSB7CisJCUJUX0lORk8oIiVzOiBObyBkZXZpY2UgYWRkcmVzcyBjb25maWd1cmVkIiwgaGRldi0+bmFtZSk7CisJCXNldF9iaXQoSENJX1FVSVJLX0lOVkFMSURfQkRBRERSLCAmaGRldi0+cXVpcmtzKTsKKwl9CisKKwkvKiBXaXRoIHRoaXMgSW50ZWwgYm9vdGxvYWRlciBvbmx5IHRoZSBoYXJkd2FyZSB2YXJpYW50IGFuZCBkZXZpY2UKKwkgKiByZXZpc2lvbiBpbmZvcm1hdGlvbiBhcmUgdXNlZCB0byBzZWxlY3QgdGhlIHJpZ2h0IGZpcm13YXJlLgorCSAqCisJICogQ3VycmVudGx5IHRoaXMgYm9vdGxvYWRlciBzdXBwb3J0IGlzIGxpbWl0ZWQgdG8gaGFyZHdhcmUgdmFyaWFudAorCSAqIGlCVCAzLjAgKExuUC9TZlApIHdoaWNoIGlzIGlkZW50aWZpZWQgYnkgdGhlIHZhbHVlIDExICgweDBiKS4KKwkgKi8KKwlzbnByaW50Zihmd25hbWUsIHNpemVvZihmd25hbWUpLCAiaW50ZWwvaWJ0LTExLSV1LnNmaSIsCisJCSBsZTE2X3RvX2NwdShwYXJhbXMtPmRldl9yZXZpZCkpOworCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3bmFtZSwgJmhkZXYtPmRldik7CisJaWYgKGVyciA8IDApIHsKKwkJQlRfRVJSKCIlczogRmFpbGVkIHRvIGxvYWQgSW50ZWwgZmlybXdhcmUgZmlsZSAoJWQpIiwKKwkJICAgICAgIGhkZXYtPm5hbWUsIGVycik7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gZXJyOworCX0KKworCUJUX0lORk8oIiVzOiBGb3VuZCBkZXZpY2UgZmlybXdhcmU6ICVzIiwgaGRldi0+bmFtZSwgZnduYW1lKTsKKworCWtmcmVlX3NrYihza2IpOworCisJaWYgKGZ3LT5zaXplIDwgNjQ0KSB7CisJCUJUX0VSUigiJXM6IEludmFsaWQgc2l6ZSBvZiBmaXJtd2FyZSBmaWxlICglenUpIiwKKwkJICAgICAgIGhkZXYtPm5hbWUsIGZ3LT5zaXplKTsKKwkJZXJyID0gLUVCQURGOworCQlnb3RvIGRvbmU7CisJfQorCisJc2V0X2JpdChCVFVTQl9ET1dOTE9BRElORywgJmRhdGEtPmZsYWdzKTsKKworCS8qIFN0YXJ0IHRoZSBmaXJtd2FyZSBkb3dubG9hZCB0cmFuc2FjdGlvbiB3aXRoIHRoZSBJbml0IGZyYWdtZW50CisJICogcmVwcmVzZW50ZWQgYnkgdGhlIDEyOCBieXRlcyBvZiBDU1MgaGVhZGVyLgorCSAqLworCWVyciA9IGJ0dXNiX2ludGVsX3NlY3VyZV9zZW5kKGhkZXYsIDB4MDAsIDEyOCwgZnctPmRhdGEpOworCWlmIChlcnIgPCAwKSB7CisJCUJUX0VSUigiJXM6IEZhaWxlZCB0byBzZW5kIGZpcm13YXJlIGhlYWRlciAoJWQpIiwKKwkJICAgICAgIGhkZXYtPm5hbWUsIGVycik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBTZW5kIHRoZSAyNTYgYnl0ZXMgb2YgcHVibGljIGtleSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmaXJtd2FyZQorCSAqIGFzIHRoZSBQS2V5IGZyYWdtZW50LgorCSAqLworCWVyciA9IGJ0dXNiX2ludGVsX3NlY3VyZV9zZW5kKGhkZXYsIDB4MDMsIDI1NiwgZnctPmRhdGEgKyAxMjgpOworCWlmIChlcnIgPCAwKSB7CisJCUJUX0VSUigiJXM6IEZhaWxlZCB0byBzZW5kIGZpcm13YXJlIHB1YmxpYyBrZXkgKCVkKSIsCisJCSAgICAgICBoZGV2LT5uYW1lLCBlcnIpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogU2VuZCB0aGUgMjU2IGJ5dGVzIG9mIHNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBmaXJtd2FyZQorCSAqIGFzIHRoZSBTaWduIGZyYWdtZW50LgorCSAqLworCWVyciA9IGJ0dXNiX2ludGVsX3NlY3VyZV9zZW5kKGhkZXYsIDB4MDIsIDI1NiwgZnctPmRhdGEgKyAzODgpOworCWlmIChlcnIgPCAwKSB7CisJCUJUX0VSUigiJXM6IEZhaWxlZCB0byBzZW5kIGZpcm13YXJlIHNpZ25hdHVyZSAoJWQpIiwKKwkJICAgICAgIGhkZXYtPm5hbWUsIGVycik7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlmd19wdHIgPSBmdy0+ZGF0YSArIDY0NDsKKworCXdoaWxlIChmd19wdHIgLSBmdy0+ZGF0YSA8IGZ3LT5zaXplKSB7CisJCXN0cnVjdCBoY2lfY29tbWFuZF9oZHIgKmNtZCA9ICh2b2lkICopZndfcHRyOworCQl1OCBjbWRfbGVuOworCisJCWNtZF9sZW4gPSBzaXplb2YoKmNtZCkgKyBjbWQtPnBsZW47CisKKwkJLyogU2VuZCBlYWNoIGNvbW1hbmQgZnJvbSB0aGUgZmlybXdhcmUgZGF0YSBidWZmZXIgYXMKKwkJICogYSBzaW5nbGUgRGF0YSBmcmFnbWVudC4KKwkJICovCisJCWVyciA9IGJ0dXNiX2ludGVsX3NlY3VyZV9zZW5kKGhkZXYsIDB4MDEsIGNtZF9sZW4sIGZ3X3B0cik7CisJCWlmIChlcnIgPCAwKSB7CisJCQlCVF9FUlIoIiVzOiBGYWlsZWQgdG8gc2VuZCBmaXJtd2FyZSBkYXRhICglZCkiLAorCQkJICAgICAgIGhkZXYtPm5hbWUsIGVycik7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlmd19wdHIgKz0gY21kX2xlbjsKKwl9CisKKwlzZXRfYml0KEJUVVNCX0ZJUk1XQVJFX0xPQURFRCwgJmRhdGEtPmZsYWdzKTsKKworCUJUX0lORk8oIiVzOiBXYWl0aW5nIGZvciBmaXJtd2FyZSBkb3dubG9hZCB0byBjb21wbGV0ZSIsIGhkZXYtPm5hbWUpOworCisJLyogQmVmb3JlIHN3aXRjaGluZyB0aGUgZGV2aWNlIGludG8gb3BlcmF0aW9uYWwgbW9kZSBhbmQgd2l0aCB0aGF0CisJICogYm9vdGluZyB0aGUgbG9hZGVkIGZpcm13YXJlLCB3YWl0IGZvciB0aGUgYm9vdGxvYWRlciBub3RpZmljYXRpb24KKwkgKiB0aGF0IGFsbCBmcmFnbWVudHMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSByZWNlaXZlZC4KKwkgKgorCSAqIFdoZW4gdGhlIGV2ZW50IHByb2Nlc3NpbmcgcmVjZWl2ZXMgdGhlIG5vdGlmaWNhdGlvbiwgdGhlbiB0aGUKKwkgKiBCVFVTQl9ET1dOTE9BRElORyBmbGFnIHdpbGwgYmUgY2xlYXJlZC4KKwkgKgorCSAqIFRoZSBmaXJtd2FyZSBsb2FkaW5nIHNob3VsZCBub3QgdGFrZSBsb25nZXIgdGhhbiA1IHNlY29uZHMKKwkgKiBhbmQgdGh1cyBqdXN0IHRpbWVvdXQgaWYgdGhhdCBoYXBwZW5zIGFuZCBmYWlsIHRoZSBzZXR1cAorCSAqIG9mIHRoaXMgZGV2aWNlLgorCSAqLworCWVyciA9IGJ0dXNiX3dhaXRfb25fYml0X3RpbWVvdXQoJmRhdGEtPmZsYWdzLCBCVFVTQl9ET1dOTE9BRElORywKKwkJCQkJbXNlY3NfdG9famlmZmllcyg1MDAwKSwKKwkJCQkJVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlpZiAoZXJyID09IDEpIHsKKwkJQlRfRVJSKCIlczogRmlybXdhcmUgbG9hZGluZyBpbnRlcnJ1cHRlZCIsIGhkZXYtPm5hbWUpOworCQllcnIgPSAtRUlOVFI7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlpZiAoZXJyKSB7CisJCUJUX0VSUigiJXM6IEZpcm13YXJlIGxvYWRpbmcgdGltZW91dCIsIGhkZXYtPm5hbWUpOworCQllcnIgPSAtRVRJTUVET1VUOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHRlc3RfYml0KEJUVVNCX0ZJUk1XQVJFX0ZBSUxFRCwgJmRhdGEtPmZsYWdzKSkgeworCQlCVF9FUlIoIiVzOiBGaXJtd2FyZSBsb2FkaW5nIGZhaWxlZCIsIGhkZXYtPm5hbWUpOworCQllcnIgPSAtRU5PRVhFQzsKKwkJZ290byBkb25lOworCX0KKworCXJldHRpbWUgPSBrdGltZV9nZXQoKTsKKwlkZWx0YSA9IGt0aW1lX3N1YihyZXR0aW1lLCBjYWxsdGltZSk7CisJZHVyYXRpb24gPSAodW5zaWduZWQgbG9uZyBsb25nKSBrdGltZV90b19ucyhkZWx0YSkgPj4gMTA7CisKKwlCVF9JTkZPKCIlczogRmlybXdhcmUgbG9hZGVkIGluICVsbHUgdXNlY3MiLCBoZGV2LT5uYW1lLCBkdXJhdGlvbik7CisKK2RvbmU6CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWNhbGx0aW1lID0ga3RpbWVfZ2V0KCk7CisKKwlzZXRfYml0KEJUVVNCX0JPT1RJTkcsICZkYXRhLT5mbGFncyk7CisKKwlza2IgPSBfX2hjaV9jbWRfc3luYyhoZGV2LCAweGZjMDEsIHNpemVvZihyZXNldF9wYXJhbSksIHJlc2V0X3BhcmFtLAorCQkJICAgICBIQ0lfSU5JVF9USU1FT1VUKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlrZnJlZV9za2Ioc2tiKTsKKworCS8qIFRoZSBib290bG9hZGVyIHdpbGwgbm90IGluZGljYXRlIHdoZW4gdGhlIGRldmljZSBpcyByZWFkeS4gVGhpcworCSAqIGlzIGRvbmUgYnkgdGhlIG9wZXJhdGlvbmFsIGZpcm13YXJlIHNlbmRpbmcgYm9vdHVwIG5vdGlmaWNhdGlvbi4KKwkgKgorCSAqIEJvb3RpbmcgaW50byBvcGVyYXRpb25hbCBmaXJtd2FyZSBzaG91bGQgbm90IHRha2UgbG9uZ2VyIHRoYW4KKwkgKiAxIHNlY29uZC4gSG93ZXZlciBpZiB0aGF0IGhhcHBlbnMsIHRoZW4ganVzdCBmYWlsIHRoZSBzZXR1cAorCSAqIHNpbmNlIHNvbWV0aGluZyB3ZW50IHdyb25nLgorCSAqLworCUJUX0lORk8oIiVzOiBXYWl0aW5nIGZvciBkZXZpY2UgdG8gYm9vdCIsIGhkZXYtPm5hbWUpOworCisJZXJyID0gYnR1c2Jfd2FpdF9vbl9iaXRfdGltZW91dCgmZGF0YS0+ZmxhZ3MsIEJUVVNCX0JPT1RJTkcsCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCksCisJCQkJCVRBU0tfSU5URVJSVVBUSUJMRSk7CisKKwlpZiAoZXJyID09IDEpIHsKKwkJQlRfRVJSKCIlczogRGV2aWNlIGJvb3QgaW50ZXJydXB0ZWQiLCBoZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5UUjsKKwl9CisKKwlpZiAoZXJyKSB7CisJCUJUX0VSUigiJXM6IERldmljZSBib290IHRpbWVvdXQiLCBoZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJcmV0dGltZSA9IGt0aW1lX2dldCgpOworCWRlbHRhID0ga3RpbWVfc3ViKHJldHRpbWUsIGNhbGx0aW1lKTsKKwlkdXJhdGlvbiA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIGt0aW1lX3RvX25zKGRlbHRhKSA+PiAxMDsKKworCUJUX0lORk8oIiVzOiBEZXZpY2UgYm9vdGVkIGluICVsbHUgdXNlY3MiLCBoZGV2LT5uYW1lLCBkdXJhdGlvbik7CisKKwljbGVhcl9iaXQoQlRVU0JfQk9PVExPQURFUiwgJmRhdGEtPmZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBidHVzYl9od19lcnJvcl9pbnRlbChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggY29kZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXU4IHR5cGUgPSAweDAwOworCisJQlRfRVJSKCIlczogSGFyZHdhcmUgZXJyb3IgMHglMi4yeCIsIGhkZXYtPm5hbWUsIGNvZGUpOworCisJc2tiID0gX19oY2lfY21kX3N5bmMoaGRldiwgSENJX09QX1JFU0VULCAwLCBOVUxMLCBIQ0lfSU5JVF9USU1FT1VUKTsKKwlpZiAoSVNfRVJSKHNrYikpIHsKKwkJQlRfRVJSKCIlczogUmVzZXQgYWZ0ZXIgaGFyZHdhcmUgZXJyb3IgZmFpbGVkICglbGQpIiwKKwkJICAgICAgIGhkZXYtPm5hbWUsIFBUUl9FUlIoc2tiKSk7CisJCXJldHVybjsKKwl9CisJa2ZyZWVfc2tiKHNrYik7CisKKwlza2IgPSBfX2hjaV9jbWRfc3luYyhoZGV2LCAweGZjMjIsIDEsICZ0eXBlLCBIQ0lfSU5JVF9USU1FT1VUKTsKKwlpZiAoSVNfRVJSKHNrYikpIHsKKwkJQlRfRVJSKCIlczogUmV0cmlldmluZyBJbnRlbCBleGNlcHRpb24gaW5mbyBmYWlsZWQgKCVsZCkiLAorCQkgICAgICAgaGRldi0+bmFtZSwgUFRSX0VSUihza2IpKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChza2ItPmxlbiAhPSAxMykgeworCQlCVF9FUlIoIiVzOiBFeGNlcHRpb24gaW5mbyBzaXplIG1pc21hdGNoIiwgaGRldi0+bmFtZSk7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm47CisJfQorCisJaWYgKHNrYi0+ZGF0YVswXSAhPSAweDAwKSB7CisJCUJUX0VSUigiJXM6IEV4Y2VwdGlvbiBpbmZvIGNvbW1hbmQgZmFpbHVyZSAoJTAyeCkiLAorCQkgICAgICAgaGRldi0+bmFtZSwgc2tiLT5kYXRhWzBdKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybjsKKwl9CisKKwlCVF9FUlIoIiVzOiBFeGNlcHRpb24gaW5mbyAlcyIsIGhkZXYtPm5hbWUsIChjaGFyICopKHNrYi0+ZGF0YSArIDEpKTsKKworCWtmcmVlX3NrYihza2IpOworfQorCiBzdGF0aWMgaW50IGJ0dXNiX3NldF9iZGFkZHJfaW50ZWwoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGNvbnN0IGJkYWRkcl90ICpiZGFkZHIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTE5NDMsNiArMjU1OSwzMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJ0dXNiX3NldF9iZGFkZHJfYXRoMzAxMihzdHJ1Y3QgaGNpX2RldiAqaGRldiwKKwkJCQkgICAgY29uc3QgYmRhZGRyX3QgKmJkYWRkcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXU4IGJ1ZlsxMF07CisJbG9uZyByZXQ7CisKKwlidWZbMF0gPSAweDAxOworCWJ1ZlsxXSA9IDB4MDE7CisJYnVmWzJdID0gMHgwMDsKKwlidWZbM10gPSBzaXplb2YoYmRhZGRyX3QpOworCW1lbWNweShidWYgKyA0LCBiZGFkZHIsIHNpemVvZihiZGFkZHJfdCkpOworCisJc2tiID0gX19oY2lfY21kX3N5bmMoaGRldiwgMHhmYzBiLCBzaXplb2YoYnVmKSwgYnVmLCBIQ0lfSU5JVF9USU1FT1VUKTsKKwlpZiAoSVNfRVJSKHNrYikpIHsKKwkJcmV0ID0gUFRSX0VSUihza2IpOworCQlCVF9FUlIoIiVzOiBDaGFuZ2UgYWRkcmVzcyBjb21tYW5kIGZhaWxlZCAoJWxkKSIsCisJCSAgICAgICBoZGV2LT5uYW1lLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlrZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewpAQCAtMjAwMyw3ICsyNjQ0LDEzIEBACiAJaWYgKCFkYXRhLT5pbnRyX2VwIHx8ICFkYXRhLT5idWxrX3R4X2VwIHx8ICFkYXRhLT5idWxrX3J4X2VwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWRhdGEtPmNtZHJlcV90eXBlID0gVVNCX1RZUEVfQ0xBU1M7CisJaWYgKGlkLT5kcml2ZXJfaW5mbyAmIEJUVVNCX0FNUCkgeworCQlkYXRhLT5jbWRyZXFfdHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgMHgwMTsKKwkJZGF0YS0+Y21kcmVxID0gMHgyYjsKKwl9IGVsc2UgeworCQlkYXRhLT5jbWRyZXFfdHlwZSA9IFVTQl9UWVBFX0NMQVNTOworCQlkYXRhLT5jbWRyZXEgPSAweDAwOworCX0KIAogCWRhdGEtPnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCWRhdGEtPmludGYgPSBpbnRmOwpAQCAtMjAxOSw3ICsyNjY2LDE0IEBACiAJaW5pdF91c2JfYW5jaG9yKCZkYXRhLT5pc29jX2FuY2hvcik7CiAJc3Bpbl9sb2NrX2luaXQoJmRhdGEtPnJ4bG9jayk7CiAKLQlkYXRhLT5yZWN2X2J1bGsgPSBidHVzYl9yZWN2X2J1bGs7CisJaWYgKGlkLT5kcml2ZXJfaW5mbyAmIEJUVVNCX0lOVEVMX05FVykgeworCQlkYXRhLT5yZWN2X2V2ZW50ID0gYnR1c2JfcmVjdl9ldmVudF9pbnRlbDsKKwkJZGF0YS0+cmVjdl9idWxrID0gYnR1c2JfcmVjdl9idWxrX2ludGVsOworCQlzZXRfYml0KEJUVVNCX0JPT1RMT0FERVIsICZkYXRhLT5mbGFncyk7CisJfSBlbHNlIHsKKwkJZGF0YS0+cmVjdl9ldmVudCA9IGhjaV9yZWN2X2ZyYW1lOworCQlkYXRhLT5yZWN2X2J1bGsgPSBidHVzYl9yZWN2X2J1bGs7CisJfQogCiAJaGRldiA9IGhjaV9hbGxvY19kZXYoKTsKIAlpZiAoIWhkZXYpCkBAIC0yMDI4LDYgKzI2ODIsMTEgQEAKIAloZGV2LT5idXMgPSBIQ0lfVVNCOwogCWhjaV9zZXRfZHJ2ZGF0YShoZGV2LCBkYXRhKTsKIAorCWlmIChpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9BTVApCisJCWhkZXYtPmRldl90eXBlID0gSENJX0FNUDsKKwllbHNlCisJCWhkZXYtPmRldl90eXBlID0gSENJX0JSRURSOworCiAJZGF0YS0+aGRldiA9IGhkZXY7CiAKIAlTRVRfSENJREVWX0RFVihoZGV2LCAmaW50Zi0+ZGV2KTsKQEAgLTIwNTAsMTYgKzI3MDksNDAgQEAKIAlpZiAoaWQtPmRyaXZlcl9pbmZvICYgQlRVU0JfSU5URUwpIHsKIAkJaGRldi0+c2V0dXAgPSBidHVzYl9zZXR1cF9pbnRlbDsKIAkJaGRldi0+c2V0X2JkYWRkciA9IGJ0dXNiX3NldF9iZGFkZHJfaW50ZWw7CisJCXNldF9iaXQoSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSLCAmaGRldi0+cXVpcmtzKTsKKwl9CisKKwlpZiAoaWQtPmRyaXZlcl9pbmZvICYgQlRVU0JfSU5URUxfTkVXKSB7CisJCWhkZXYtPnNlbmQgPSBidHVzYl9zZW5kX2ZyYW1lX2ludGVsOworCQloZGV2LT5zZXR1cCA9IGJ0dXNiX3NldHVwX2ludGVsX25ldzsKKwkJaGRldi0+aHdfZXJyb3IgPSBidHVzYl9od19lcnJvcl9pbnRlbDsKKwkJaGRldi0+c2V0X2JkYWRkciA9IGJ0dXNiX3NldF9iZGFkZHJfaW50ZWw7CisJCXNldF9iaXQoSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSLCAmaGRldi0+cXVpcmtzKTsKIAl9CiAKIAlpZiAoaWQtPmRyaXZlcl9pbmZvICYgQlRVU0JfTUFSVkVMTCkKIAkJaGRldi0+c2V0X2JkYWRkciA9IGJ0dXNiX3NldF9iZGFkZHJfbWFydmVsbDsKIAorCWlmIChpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9TV0FWRSkgeworCQlzZXRfYml0KEhDSV9RVUlSS19GSVhVUF9JTlFVSVJZX01PREUsICZoZGV2LT5xdWlya3MpOworCQlzZXRfYml0KEhDSV9RVUlSS19CUk9LRU5fTE9DQUxfQ09NTUFORFMsICZoZGV2LT5xdWlya3MpOworCX0KKwogCWlmIChpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9JTlRFTF9CT09UKQogCQlzZXRfYml0KEhDSV9RVUlSS19SQVdfREVWSUNFLCAmaGRldi0+cXVpcmtzKTsKIAotCS8qIEludGVyZmFjZSBudW1iZXJzIGFyZSBoYXJkY29kZWQgaW4gdGhlIHNwZWNpZmljYXRpb24gKi8KLQlkYXRhLT5pc29jID0gdXNiX2lmbnVtX3RvX2lmKGRhdGEtPnVkZXYsIDEpOworCWlmIChpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9BVEgzMDEyKSB7CisJCWhkZXYtPnNldF9iZGFkZHIgPSBidHVzYl9zZXRfYmRhZGRyX2F0aDMwMTI7CisJCXNldF9iaXQoSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSLCAmaGRldi0+cXVpcmtzKTsKKwl9CisKKwlpZiAoaWQtPmRyaXZlcl9pbmZvICYgQlRVU0JfQU1QKSB7CisJCS8qIEFNUCBjb250cm9sbGVycyBkbyBub3Qgc3VwcG9ydCBTQ08gcGFja2V0cyAqLworCQlkYXRhLT5pc29jID0gTlVMTDsKKwl9IGVsc2UgeworCQkvKiBJbnRlcmZhY2UgbnVtYmVycyBhcmUgaGFyZGNvZGVkIGluIHRoZSBzcGVjaWZpY2F0aW9uICovCisJCWRhdGEtPmlzb2MgPSB1c2JfaWZudW1fdG9faWYoZGF0YS0+dWRldiwgMSk7CisJfQogCiAJaWYgKCFyZXNldCkKIAkJc2V0X2JpdChIQ0lfUVVJUktfUkVTRVRfT05fQ0xPU0UsICZoZGV2LT5xdWlya3MpOwpAQCAtMjE1Myw3ICsyODM2LDYgQEAKIAllbHNlIGlmIChkYXRhLT5pc29jKQogCQl1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKCZidHVzYl9kcml2ZXIsIGRhdGEtPmlzb2MpOwogCi0JYnR1c2JfZnJlZV9mcmFncyhkYXRhKTsKIAloY2lfZnJlZV9kZXYoaGRldik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ocGV0LmMgYi9kcml2ZXJzL2NoYXIvaHBldC5jCmluZGV4IGQ1ZDRjZDguLjVjMGJhYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ocGV0LmMKKysrIGIvZHJpdmVycy9jaGFyL2hwZXQuYwpAQCAtOTc2LDggKzk3Niw4IEBACiAJc3RhdHVzID0gYWNwaV9yZXNvdXJjZV90b19hZGRyZXNzNjQocmVzLCAmYWRkcik7CiAKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJaGRwLT5oZF9waHlzX2FkZHJlc3MgPSBhZGRyLm1pbmltdW07Ci0JCWhkcC0+aGRfYWRkcmVzcyA9IGlvcmVtYXAoYWRkci5taW5pbXVtLCBhZGRyLmFkZHJlc3NfbGVuZ3RoKTsKKwkJaGRwLT5oZF9waHlzX2FkZHJlc3MgPSBhZGRyLmFkZHJlc3MubWluaW11bTsKKwkJaGRwLT5oZF9hZGRyZXNzID0gaW9yZW1hcChhZGRyLmFkZHJlc3MubWluaW11bSwgYWRkci5hZGRyZXNzLmFkZHJlc3NfbGVuZ3RoKTsKIAogCQlpZiAoaHBldF9pc19rbm93bihoZHApKSB7CiAJCQlpb3VubWFwKGhkcC0+aGRfYWRkcmVzcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggMDQ2NDVjMC4uOWNkNjk2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtNTY5LDE5ICs1NjksMTkgQEAKIAlfX3UzMiBjID0gZi0+cG9vbFsyXSwJZCA9IGYtPnBvb2xbM107CiAKIAlhICs9IGI7CQkJYyArPSBkOwotCWIgPSByb2wzMihhLCA2KTsJZCA9IHJvbDMyKGMsIDI3KTsKKwliID0gcm9sMzIoYiwgNik7CWQgPSByb2wzMihkLCAyNyk7CiAJZCBePSBhOwkJCWIgXj0gYzsKIAogCWEgKz0gYjsJCQljICs9IGQ7Ci0JYiA9IHJvbDMyKGEsIDE2KTsJZCA9IHJvbDMyKGMsIDE0KTsKKwliID0gcm9sMzIoYiwgMTYpOwlkID0gcm9sMzIoZCwgMTQpOwogCWQgXj0gYTsJCQliIF49IGM7CiAKIAlhICs9IGI7CQkJYyArPSBkOwotCWIgPSByb2wzMihhLCA2KTsJZCA9IHJvbDMyKGMsIDI3KTsKKwliID0gcm9sMzIoYiwgNik7CWQgPSByb2wzMihkLCAyNyk7CiAJZCBePSBhOwkJCWIgXj0gYzsKIAogCWEgKz0gYjsJCQljICs9IGQ7Ci0JYiA9IHJvbDMyKGEsIDE2KTsJZCA9IHJvbDMyKGMsIDE0KTsKKwliID0gcm9sMzIoYiwgMTYpOwlkID0gcm9sMzIoZCwgMTQpOwogCWQgXj0gYTsJCQliIF49IGM7CiAKIAlmLT5wb29sWzBdID0gYTsgIGYtPnBvb2xbMV0gPSBiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL3RwbS9LY29uZmlnCmluZGV4IGM1NGNhYzMuLjlkNGUzNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvdHBtL0tjb25maWcKQEAgLTEwMCwxNSArMTAwLDE1IEBACiAJICB3aWxsIGJlIGFjY2Vzc2libGUgZnJvbSB3aXRoaW4gTGludXguICBUbyBjb21waWxlIHRoaXMgZHJpdmVyCiAJICBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTsgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0cG1faWJtdnRwbS4KIAotY29uZmlnIFRDR19TVDMzX0kyQwotCXRyaXN0YXRlICJTVE1pY3JvZWxlY3Ryb25pY3MgU1QzMyBJMkMgVFBNIgorY29uZmlnIFRDR19USVNfSTJDX1NUMzMKKwl0cmlzdGF0ZSAiVFBNIEludGVyZmFjZSBTcGVjaWZpY2F0aW9uIDEuMiBJbnRlcmZhY2UgKEkyQyAtIFNUTWljcm9lbGVjdHJvbmljcykiCiAJZGVwZW5kcyBvbiBJMkMKIAlkZXBlbmRzIG9uIEdQSU9MSUIKIAktLS1oZWxwLS0tCiAJICBJZiB5b3UgaGF2ZSBhIFRQTSBzZWN1cml0eSBjaGlwIGZyb20gU1RNaWNyb2VsZWN0cm9uaWNzIHdvcmtpbmcgd2l0aAogCSAgYW4gSTJDIGJ1cyBzYXkgWWVzIGFuZCBpdCB3aWxsIGJlIGFjY2Vzc2libGUgZnJvbSB3aXRoaW4gTGludXguCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOyB0aGUgbW9kdWxlIHdpbGwgYmUKLQkgIGNhbGxlZCB0cG1fc3RtX3N0MzNfaTJjLgorCSAgY2FsbGVkIHRwbV9pMmNfc3RtX3N0MzMuCiAKIGNvbmZpZyBUQ0dfWEVOCiAJdHJpc3RhdGUgIlhFTiBUUE0gSW50ZXJmYWNlIgpAQCAtMTIyLDQgKzEyMiwxMyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTsgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgeGVuLXRwbWZyb250LgogCitjb25maWcgVENHX0NSQgorCXRyaXN0YXRlICJUUE0gMi4wIENSQiBJbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBYODYgJiYgQUNQSQorCS0tLWhlbHAtLS0KKwkgIElmIHlvdSBoYXZlIGEgVFBNIHNlY3VyaXR5IGNoaXAgdGhhdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUKKwkgIFRDRyBDUkIgMi4wIFRQTSBzcGVjaWZpY2F0aW9uIHNheSBZZXMgYW5kIGl0IHdpbGwgYmUgYWNjZXNzaWJsZQorCSAgZnJvbSB3aXRoaW4gTGludXguICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UKKwkgIE0gaGVyZTsgdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0cG1fY3JiLgorCiBlbmRpZiAjIFRDR19UUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvdHBtL01ha2VmaWxlCmluZGV4IDRkODVkZDYuLjk5MGNmMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL3RwbS9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgdHBtIGRldmljZSBkcml2ZXJzLgogIwogb2JqLSQoQ09ORklHX1RDR19UUE0pICs9IHRwbS5vCi10cG0teSA6PSB0cG0taW50ZXJmYWNlLm8gdHBtLWRldi5vIHRwbS1zeXNmcy5vCit0cG0teSA6PSB0cG0taW50ZXJmYWNlLm8gdHBtLWRldi5vIHRwbS1zeXNmcy5vIHRwbS1jaGlwLm8gdHBtMi1jbWQubwogdHBtLSQoQ09ORklHX0FDUEkpICs9IHRwbV9wcGkubwogCiBpZmRlZiBDT05GSUdfQUNQSQpAQCAtMjAsNSArMjAsNiBAQAogb2JqLSQoQ09ORklHX1RDR19BVE1FTCkgKz0gdHBtX2F0bWVsLm8KIG9iai0kKENPTkZJR19UQ0dfSU5GSU5FT04pICs9IHRwbV9pbmZpbmVvbi5vCiBvYmotJChDT05GSUdfVENHX0lCTVZUUE0pICs9IHRwbV9pYm12dHBtLm8KLW9iai0kKENPTkZJR19UQ0dfU1QzM19JMkMpICs9IHRwbV9pMmNfc3RtX3N0MzMubworb2JqLSQoQ09ORklHX1RDR19USVNfSTJDX1NUMzMpICs9IHRwbV9pMmNfc3RtX3N0MzMubwogb2JqLSQoQ09ORklHX1RDR19YRU4pICs9IHhlbi10cG1mcm9udC5vCitvYmotJChDT05GSUdfVENHX0NSQikgKz0gdHBtX2NyYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS1jaGlwLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS1jaGlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyNzhjYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLWNoaXAuYwpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBJQk0gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIEF1dGhvcnM6CisgKiBKYXJra28gU2Fra2luZW4gPGphcmtrby5zYWtraW5lbkBsaW51eC5pbnRlbC5jb20+CisgKiBMZWVuZGVydCB2YW4gRG9vcm4gPGxlZW5kZXJ0QHdhdHNvbi5pYm0uY29tPgorICogRGF2ZSBTYWZmb3JkIDxzYWZmb3JkQHdhdHNvbi5pYm0uY29tPgorICogUmVpbmVyIFNhaWxlciA8c2FpbGVyQHdhdHNvbi5pYm0uY29tPgorICogS3lsZW5lIEhhbGwgPGtqaGFsbEB1cy5pYm0uY29tPgorICoKKyAqIE1haW50YWluZWQgYnk6IDx0cG1kZC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgKgorICogVFBNIGNoaXAgbWFuYWdlbWVudCByb3V0aW5lcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUKKyAqIExpY2Vuc2UuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlICJ0cG0uaCIKKyNpbmNsdWRlICJ0cG1fZXZlbnRsb2cuaCIKKworc3RhdGljIERFQ0xBUkVfQklUTUFQKGRldl9tYXNrLCBUUE1fTlVNX0RFVklDRVMpOworc3RhdGljIExJU1RfSEVBRCh0cG1fY2hpcF9saXN0KTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHJpdmVyX2xvY2spOworCitzdHJ1Y3QgY2xhc3MgKnRwbV9jbGFzczsKK2Rldl90IHRwbV9kZXZ0OworCisvKgorICogdHBtX2NoaXBfZmluZF9nZXQgLSByZXR1cm4gdHBtX2NoaXAgZm9yIGEgZ2l2ZW4gY2hpcCBudW1iZXIKKyAqIEBjaGlwX251bSB0aGUgZGV2aWNlIG51bWJlciBmb3IgdGhlIGNoaXAKKyAqLworc3RydWN0IHRwbV9jaGlwICp0cG1fY2hpcF9maW5kX2dldChpbnQgY2hpcF9udW0pCit7CisJc3RydWN0IHRwbV9jaGlwICpwb3MsICpjaGlwID0gTlVMTDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3MsICZ0cG1fY2hpcF9saXN0LCBsaXN0KSB7CisJCWlmIChjaGlwX251bSAhPSBUUE1fQU5ZX05VTSAmJiBjaGlwX251bSAhPSBwb3MtPmRldl9udW0pCisJCQljb250aW51ZTsKKworCQlpZiAodHJ5X21vZHVsZV9nZXQocG9zLT5wZGV2LT5kcml2ZXItPm93bmVyKSkgeworCQkJY2hpcCA9IHBvczsKKwkJCWJyZWFrOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBjaGlwOworfQorCisvKioKKyAqIHRwbV9kZXZfcmVsZWFzZSgpIC0gZnJlZSBjaGlwIG1lbW9yeSBhbmQgdGhlIGRldmljZSBudW1iZXIKKyAqIEBkZXY6IHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGZvciB0aGUgVFBNIGNoaXAKKyAqCisgKiBUaGlzIGlzIHVzZWQgYXMgdGhlIHJlbGVhc2UgZnVuY3Rpb24gZm9yIHRoZSBjaGFyYWN0ZXIgZGV2aWNlLgorICovCitzdGF0aWMgdm9pZCB0cG1fZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCB0cG1fY2hpcCwgZGV2KTsKKworCXNwaW5fbG9jaygmZHJpdmVyX2xvY2spOworCWNsZWFyX2JpdChjaGlwLT5kZXZfbnVtLCBkZXZfbWFzayk7CisJc3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsKKwlrZnJlZShjaGlwKTsKK30KKworLyoqCisgKiB0cG1tX2NoaXBfYWxsb2MoKSAtIGFsbG9jYXRlIGEgbmV3IHN0cnVjdCB0cG1fY2hpcCBpbnN0YW5jZQorICogQGRldjogZGV2aWNlIHRvIHdoaWNoIHRoZSBjaGlwIGlzIGFzc29jaWF0ZWQKKyAqIEBvcHM6IHN0cnVjdCB0cG1fY2xhc3Nfb3BzIGluc3RhbmNlCisgKgorICogQWxsb2NhdGVzIGEgbmV3IHN0cnVjdCB0cG1fY2hpcCBpbnN0YW5jZSBhbmQgYXNzaWducyBhIGZyZWUKKyAqIGRldmljZSBudW1iZXIgZm9yIGl0LiBDYWxsZXIgZG9lcyBub3QgaGF2ZSB0byB3b3JyeSBhYm91dAorICogZnJlZWluZyB0aGUgYWxsb2NhdGVkIHJlc291cmNlcy4gV2hlbiB0aGUgZGV2aWNlcyBpcyByZW1vdmVkCisgKiBkZXZyZXMgY2FsbHMgdHBtbV9jaGlwX3JlbW92ZSgpIHRvIGRvIHRoZSBqb2IuCisgKi8KK3N0cnVjdCB0cG1fY2hpcCAqdHBtbV9jaGlwX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgY29uc3Qgc3RydWN0IHRwbV9jbGFzc19vcHMgKm9wcykKK3sKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXA7CisKKwljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2hpcCA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW11dGV4X2luaXQoJmNoaXAtPnRwbV9tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNoaXAtPmxpc3QpOworCisJY2hpcC0+b3BzID0gb3BzOworCisJc3Bpbl9sb2NrKCZkcml2ZXJfbG9jayk7CisJY2hpcC0+ZGV2X251bSA9IGZpbmRfZmlyc3RfemVyb19iaXQoZGV2X21hc2ssIFRQTV9OVU1fREVWSUNFUyk7CisJc3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsKKworCWlmIChjaGlwLT5kZXZfbnVtID49IFRQTV9OVU1fREVWSUNFUykgeworCQlkZXZfZXJyKGRldiwgIk5vIGF2YWlsYWJsZSB0cG0gZGV2aWNlIG51bWJlcnNcbiIpOworCQlrZnJlZShjaGlwKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJc2V0X2JpdChjaGlwLT5kZXZfbnVtLCBkZXZfbWFzayk7CisKKwlzY25wcmludGYoY2hpcC0+ZGV2bmFtZSwgc2l6ZW9mKGNoaXAtPmRldm5hbWUpLCAidHBtJWQiLCBjaGlwLT5kZXZfbnVtKTsKKworCWNoaXAtPnBkZXYgPSBkZXY7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBjaGlwKTsKKworCWNoaXAtPmRldi5jbGFzcyA9IHRwbV9jbGFzczsKKwljaGlwLT5kZXYucmVsZWFzZSA9IHRwbV9kZXZfcmVsZWFzZTsKKwljaGlwLT5kZXYucGFyZW50ID0gY2hpcC0+cGRldjsKKworCWlmIChjaGlwLT5kZXZfbnVtID09IDApCisJCWNoaXAtPmRldi5kZXZ0ID0gTUtERVYoTUlTQ19NQUpPUiwgVFBNX01JTk9SKTsKKwllbHNlCisJCWNoaXAtPmRldi5kZXZ0ID0gTUtERVYoTUFKT1IodHBtX2RldnQpLCBjaGlwLT5kZXZfbnVtKTsKKworCWRldl9zZXRfbmFtZSgmY2hpcC0+ZGV2LCAiJXMiLCBjaGlwLT5kZXZuYW1lKTsKKworCWRldmljZV9pbml0aWFsaXplKCZjaGlwLT5kZXYpOworCisJY2hpcC0+Y2Rldi5vd25lciA9IGNoaXAtPnBkZXYtPmRyaXZlci0+b3duZXI7CisJY2Rldl9pbml0KCZjaGlwLT5jZGV2LCAmdHBtX2ZvcHMpOworCisJcmV0dXJuIGNoaXA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG1tX2NoaXBfYWxsb2MpOworCitzdGF0aWMgaW50IHRwbV9kZXZfYWRkX2RldmljZShzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCit7CisJaW50IHJjOworCisJcmMgPSBkZXZpY2VfYWRkKCZjaGlwLT5kZXYpOworCWlmIChyYykgeworCQlkZXZfZXJyKCZjaGlwLT5kZXYsCisJCQkidW5hYmxlIHRvIGRldmljZV9yZWdpc3RlcigpICVzLCBtYWpvciAlZCwgbWlub3IgJWQsIGVycj0lZFxuIiwKKwkJCWNoaXAtPmRldm5hbWUsIE1BSk9SKGNoaXAtPmRldi5kZXZ0KSwKKwkJCU1JTk9SKGNoaXAtPmRldi5kZXZ0KSwgcmMpOworCisJCXJldHVybiByYzsKKwl9CisKKwlyYyA9IGNkZXZfYWRkKCZjaGlwLT5jZGV2LCBjaGlwLT5kZXYuZGV2dCwgMSk7CisJaWYgKHJjKSB7CisJCWRldl9lcnIoJmNoaXAtPmRldiwKKwkJCSJ1bmFibGUgdG8gY2Rldl9hZGQoKSAlcywgbWFqb3IgJWQsIG1pbm9yICVkLCBlcnI9JWRcbiIsCisJCQljaGlwLT5kZXZuYW1lLCBNQUpPUihjaGlwLT5kZXYuZGV2dCksCisJCQlNSU5PUihjaGlwLT5kZXYuZGV2dCksIHJjKTsKKworCQlkZXZpY2VfdW5yZWdpc3RlcigmY2hpcC0+ZGV2KTsKKwkJcmV0dXJuIHJjOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgdHBtX2Rldl9kZWxfZGV2aWNlKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKK3sKKwljZGV2X2RlbCgmY2hpcC0+Y2Rldik7CisJZGV2aWNlX3VucmVnaXN0ZXIoJmNoaXAtPmRldik7Cit9CisKKy8qCisgKiB0cG1fY2hpcF9yZWdpc3RlcigpIC0gY3JlYXRlIGEgY2hhcmFjdGVyIGRldmljZSBmb3IgdGhlIFRQTSBjaGlwCisgKiBAY2hpcDogVFBNIGNoaXAgdG8gdXNlLgorICoKKyAqIENyZWF0ZXMgYSBjaGFyYWN0ZXIgZGV2aWNlIGZvciB0aGUgVFBNIGNoaXAgYW5kIGFkZHMgc3lzZnMgaW50ZXJmYWNlcyBmb3IKKyAqIHRoZSBkZXZpY2UsIFBQSSBhbmQgVENQQS4gQXMgdGhlIGxhc3Qgc3RlcCB0aGlzIGZ1bmN0aW9uIGFkZHMgdGhlCisgKiBjaGlwIHRvIHRoZSBsaXN0IG9mIFRQTSBjaGlwcyBhdmFpbGFibGUgZm9yIHVzZS4KKyAqCisgKiBOT1RFOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBhZnRlciB0aGUgY2hpcCBpbml0aWFsaXphdGlvbgorICogaXMgY29tcGxldGUuCisgKgorICogQ2FsbGVkIGZyb20gdHBtXzxzcGVjaWZpYz4uYyBwcm9iZSBmdW5jdGlvbiBvbmx5IGZvciBkZXZpY2VzCisgKiB0aGUgZHJpdmVyIGhhcyBkZXRlcm1pbmVkIGl0IHNob3VsZCBjbGFpbS4gIFByaW9yIHRvIGNhbGxpbmcKKyAqIHRoaXMgZnVuY3Rpb24gdGhlIHNwZWNpZmljIHByb2JlIGZ1bmN0aW9uIGhhcyBjYWxsZWQgcGNpX2VuYWJsZV9kZXZpY2UKKyAqIHVwb24gZXJyYW50IGV4aXQgZnJvbSB0aGlzIGZ1bmN0aW9uIHNwZWNpZmljIHByb2JlIGZ1bmN0aW9uIHNob3VsZCBjYWxsCisgKiBwY2lfZGlzYWJsZV9kZXZpY2UKKyAqLworaW50IHRwbV9jaGlwX3JlZ2lzdGVyKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHRwbV9kZXZfYWRkX2RldmljZShjaGlwKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCS8qIFBvcHVsYXRlIHN5c2ZzIGZvciBUUE0xIGRldmljZXMuICovCisJaWYgKCEoY2hpcC0+ZmxhZ3MgJiBUUE1fQ0hJUF9GTEFHX1RQTTIpKSB7CisJCXJjID0gdHBtX3N5c2ZzX2FkZF9kZXZpY2UoY2hpcCk7CisJCWlmIChyYykKKwkJCWdvdG8gZGVsX21pc2M7CisKKwkJcmMgPSB0cG1fYWRkX3BwaShjaGlwKTsKKwkJaWYgKHJjKQorCQkJZ290byBkZWxfc3lzZnM7CisKKwkJY2hpcC0+Ymlvc19kaXIgPSB0cG1fYmlvc19sb2dfc2V0dXAoY2hpcC0+ZGV2bmFtZSk7CisJfQorCisJLyogTWFrZSB0aGUgY2hpcCBhdmFpbGFibGUuICovCisJc3Bpbl9sb2NrKCZkcml2ZXJfbG9jayk7CisJbGlzdF9hZGRfcmN1KCZjaGlwLT5saXN0LCAmdHBtX2NoaXBfbGlzdCk7CisJc3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsKKworCWNoaXAtPmZsYWdzIHw9IFRQTV9DSElQX0ZMQUdfUkVHSVNURVJFRDsKKworCXJldHVybiAwOworZGVsX3N5c2ZzOgorCXRwbV9zeXNmc19kZWxfZGV2aWNlKGNoaXApOworZGVsX21pc2M6CisJdHBtX2Rldl9kZWxfZGV2aWNlKGNoaXApOworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9jaGlwX3JlZ2lzdGVyKTsKKworLyoKKyAqIHRwbV9jaGlwX3VucmVnaXN0ZXIoKSAtIHJlbGVhc2UgdGhlIFRQTSBkcml2ZXIKKyAqIEBjaGlwOiBUUE0gY2hpcCB0byB1c2UuCisgKgorICogVGFrZXMgdGhlIGNoaXAgZmlyc3QgYXdheSBmcm9tIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBUUE0gY2hpcHMgYW5kIHRoZW4KKyAqIGNsZWFucyB1cCBhbGwgdGhlIHJlc291cmNlcyByZXNlcnZlZCBieSB0cG1fY2hpcF9yZWdpc3RlcigpLgorICoKKyAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIG9ubHkgY2FsbGVkIGJlZm9yZSBkZWluaXRpYWxpemluZyBjaGlwCisgKiByZXNvdXJjZXMuCisgKi8KK3ZvaWQgdHBtX2NoaXBfdW5yZWdpc3RlcihzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCit7CisJaWYgKCEoY2hpcC0+ZmxhZ3MgJiBUUE1fQ0hJUF9GTEFHX1JFR0lTVEVSRUQpKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJmRyaXZlcl9sb2NrKTsKKwlsaXN0X2RlbF9yY3UoJmNoaXAtPmxpc3QpOworCXNwaW5fdW5sb2NrKCZkcml2ZXJfbG9jayk7CisJc3luY2hyb25pemVfcmN1KCk7CisKKwlpZiAoIShjaGlwLT5mbGFncyAmIFRQTV9DSElQX0ZMQUdfVFBNMikpIHsKKwkJaWYgKGNoaXAtPmJpb3NfZGlyKQorCQkJdHBtX2Jpb3NfbG9nX3RlYXJkb3duKGNoaXAtPmJpb3NfZGlyKTsKKwkJdHBtX3JlbW92ZV9wcGkoY2hpcCk7CisJCXRwbV9zeXNmc19kZWxfZGV2aWNlKGNoaXApOworCX0KKworCXRwbV9kZXZfZGVsX2RldmljZShjaGlwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbV9jaGlwX3VucmVnaXN0ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0tZGV2LmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS1kZXYuYwppbmRleCBkOWI3NzRlLi5kZTAzMzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS1kZXYuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS1kZXYuYwpAQCAtMTcsNyArMTcsNiBAQAogICogTGljZW5zZS4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlICJ0cG0uaCIKQEAgLTU0LDE2ICs1MywxNSBAQAogCiBzdGF0aWMgaW50IHRwbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBtaXNjZGV2aWNlICptaXNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGNvbnRhaW5lcl9vZihtaXNjLCBzdHJ1Y3QgdHBtX2NoaXAsCi0JCQkJCSAgICAgdmVuZG9yLm1pc2NkZXYpOworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9CisJCWNvbnRhaW5lcl9vZihpbm9kZS0+aV9jZGV2LCBzdHJ1Y3QgdHBtX2NoaXAsIGNkZXYpOwogCXN0cnVjdCBmaWxlX3ByaXYgKnByaXY7CiAKIAkvKiBJdCdzIGFzc3VyZWQgdGhhdCB0aGUgY2hpcCB3aWxsIGJlIG9wZW5lZCBqdXN0IG9uY2UsCiAJICogYnkgdGhlIGNoZWNrIG9mIGlzX29wZW4gdmFyaWFibGUsIHdoaWNoIGlzIHByb3RlY3RlZAogCSAqIGJ5IGRyaXZlcl9sb2NrLiAqLwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICZjaGlwLT5pc19vcGVuKSkgewotCQlkZXZfZGJnKGNoaXAtPmRldiwgIkFub3RoZXIgcHJvY2VzcyBvd25zIHRoaXMgVFBNXG4iKTsKKwkJZGV2X2RiZyhjaGlwLT5wZGV2LCAiQW5vdGhlciBwcm9jZXNzIG93bnMgdGhpcyBUUE1cbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtODEsNyArNzksNyBAQAogCUlOSVRfV09SSygmcHJpdi0+d29yaywgdGltZW91dF93b3JrKTsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHByaXY7Ci0JZ2V0X2RldmljZShjaGlwLT5kZXYpOworCWdldF9kZXZpY2UoY2hpcC0+cGRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2OCwxMiArMTY2LDEyIEBACiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAlhdG9taWNfc2V0KCZwcml2LT5kYXRhX3BlbmRpbmcsIDApOwogCWNsZWFyX2JpdCgwLCAmcHJpdi0+Y2hpcC0+aXNfb3Blbik7Ci0JcHV0X2RldmljZShwcml2LT5jaGlwLT5kZXYpOworCXB1dF9kZXZpY2UocHJpdi0+Y2hpcC0+cGRldik7CiAJa2ZyZWUocHJpdik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRwbV9mb3BzID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0cG1fZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubGxzZWVrID0gbm9fbGxzZWVrLAogCS5vcGVuID0gdHBtX29wZW4sCkBAIC0xODIsMzIgKzE4MCw0IEBACiAJLnJlbGVhc2UgPSB0cG1fcmVsZWFzZSwKIH07CiAKLWludCB0cG1fZGV2X2FkZF9kZXZpY2Uoc3RydWN0IHRwbV9jaGlwICpjaGlwKQotewotCWludCByYzsKIAotCWNoaXAtPnZlbmRvci5taXNjZGV2LmZvcHMgPSAmdHBtX2ZvcHM7Ci0JaWYgKGNoaXAtPmRldl9udW0gPT0gMCkKLQkJY2hpcC0+dmVuZG9yLm1pc2NkZXYubWlub3IgPSBUUE1fTUlOT1I7Ci0JZWxzZQotCQljaGlwLT52ZW5kb3IubWlzY2Rldi5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUjsKLQotCWNoaXAtPnZlbmRvci5taXNjZGV2Lm5hbWUgPSBjaGlwLT5kZXZuYW1lOwotCWNoaXAtPnZlbmRvci5taXNjZGV2LnBhcmVudCA9IGNoaXAtPmRldjsKLQotCXJjID0gbWlzY19yZWdpc3RlcigmY2hpcC0+dmVuZG9yLm1pc2NkZXYpOwotCWlmIChyYykgewotCQljaGlwLT52ZW5kb3IubWlzY2Rldi5uYW1lID0gTlVMTDsKLQkJZGV2X2VycihjaGlwLT5kZXYsCi0JCQkidW5hYmxlIHRvIG1pc2NfcmVnaXN0ZXIgJXMsIG1pbm9yICVkIGVycj0lZFxuIiwKLQkJCWNoaXAtPnZlbmRvci5taXNjZGV2Lm5hbWUsCi0JCQljaGlwLT52ZW5kb3IubWlzY2Rldi5taW5vciwgcmMpOwotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLXZvaWQgdHBtX2Rldl9kZWxfZGV2aWNlKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKLXsKLQlpZiAoY2hpcC0+dmVuZG9yLm1pc2NkZXYubmFtZSkKLQkJbWlzY19kZXJlZ2lzdGVyKCZjaGlwLT52ZW5kb3IubWlzY2Rldik7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS1pbnRlcmZhY2UuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLWludGVyZmFjZS5jCmluZGV4IDZhZjE3MDAuLmJmNTNhMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtLWludGVyZmFjZS5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLWludGVyZmFjZS5jCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNCBJQk0gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgogICoKICAqIEF1dGhvcnM6CiAgKiBMZWVuZGVydCB2YW4gRG9vcm4gPGxlZW5kZXJ0QHdhdHNvbi5pYm0uY29tPgpAQCAtNDcsMTAgKzQ4LDYgQEAKIE1PRFVMRV9QQVJNX0RFU0Moc3VzcGVuZF9wY3IsCiAJCSAiUENSIHRvIHVzZSBmb3IgZHVtbXkgd3JpdGVzIHRvIGZhY2lsdGF0ZSBmbHVzaCBvbiBzdXNwZW5kLiIpOwogCi1zdGF0aWMgTElTVF9IRUFEKHRwbV9jaGlwX2xpc3QpOwotc3RhdGljIERFRklORV9TUElOTE9DSyhkcml2ZXJfbG9jayk7Ci1zdGF0aWMgREVDTEFSRV9CSVRNQVAoZGV2X21hc2ssIFRQTV9OVU1fREVWSUNFUyk7Ci0KIC8qCiAgKiBBcnJheSB3aXRoIG9uZSBlbnRyeSBwZXIgb3JkaW5hbCBkZWZpbmluZyB0aGUgbWF4aW11bSBhbW91bnQKICAqIG9mIHRpbWUgdGhlIGNoaXAgY291bGQgdGFrZSB0byByZXR1cm4gdGhlIHJlc3VsdC4gIFRoZSBvcmRpbmFsCkBAIC0zNDYsNyArMzQzLDcgQEAKIAlpZiAoY291bnQgPT0gMCkKIAkJcmV0dXJuIC1FTk9EQVRBOwogCWlmIChjb3VudCA+IGJ1ZnNpeikgewotCQlkZXZfZXJyKGNoaXAtPmRldiwKKwkJZGV2X2VycihjaGlwLT5wZGV2LAogCQkJImludmFsaWQgY291bnQgdmFsdWUgJXggJXp4XG4iLCBjb3VudCwgYnVmc2l6KTsKIAkJcmV0dXJuIC1FMkJJRzsKIAl9CkBAIC0zNTUsNyArMzUyLDcgQEAKIAogCXJjID0gY2hpcC0+b3BzLT5zZW5kKGNoaXAsICh1OCAqKSBidWYsIGNvdW50KTsKIAlpZiAocmMgPCAwKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LAorCQlkZXZfZXJyKGNoaXAtPnBkZXYsCiAJCQkidHBtX3RyYW5zbWl0OiB0cG1fc2VuZDogZXJyb3IgJXpkXG4iLCByYyk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTM2Myw3ICszNjAsMTAgQEAKIAlpZiAoY2hpcC0+dmVuZG9yLmlycSkKIAkJZ290byBvdXRfcmVjdjsKIAotCXN0b3AgPSBqaWZmaWVzICsgdHBtX2NhbGNfb3JkaW5hbF9kdXJhdGlvbihjaGlwLCBvcmRpbmFsKTsKKwlpZiAoY2hpcC0+ZmxhZ3MgJiBUUE1fQ0hJUF9GTEFHX1RQTTIpCisJCXN0b3AgPSBqaWZmaWVzICsgdHBtMl9jYWxjX29yZGluYWxfZHVyYXRpb24oY2hpcCwgb3JkaW5hbCk7CisJZWxzZQorCQlzdG9wID0gamlmZmllcyArIHRwbV9jYWxjX29yZGluYWxfZHVyYXRpb24oY2hpcCwgb3JkaW5hbCk7CiAJZG8gewogCQl1OCBzdGF0dXMgPSBjaGlwLT5vcHMtPnN0YXR1cyhjaGlwKTsKIAkJaWYgKChzdGF0dXMgJiBjaGlwLT5vcHMtPnJlcV9jb21wbGV0ZV9tYXNrKSA9PQpAQCAtMzcxLDcgKzM3MSw3IEBACiAJCQlnb3RvIG91dF9yZWN2OwogCiAJCWlmIChjaGlwLT5vcHMtPnJlcV9jYW5jZWxlZChjaGlwLCBzdGF0dXMpKSB7Ci0JCQlkZXZfZXJyKGNoaXAtPmRldiwgIk9wZXJhdGlvbiBDYW5jZWxlZFxuIik7CisJCQlkZXZfZXJyKGNoaXAtPnBkZXYsICJPcGVyYXRpb24gQ2FuY2VsZWRcbiIpOwogCQkJcmMgPSAtRUNBTkNFTEVEOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTM4MSwxNCArMzgxLDE0IEBACiAJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgc3RvcCkpOwogCiAJY2hpcC0+b3BzLT5jYW5jZWwoY2hpcCk7Ci0JZGV2X2VycihjaGlwLT5kZXYsICJPcGVyYXRpb24gVGltZWQgb3V0XG4iKTsKKwlkZXZfZXJyKGNoaXAtPnBkZXYsICJPcGVyYXRpb24gVGltZWQgb3V0XG4iKTsKIAlyYyA9IC1FVElNRTsKIAlnb3RvIG91dDsKIAogb3V0X3JlY3Y6CiAJcmMgPSBjaGlwLT5vcHMtPnJlY3YoY2hpcCwgKHU4ICopIGJ1ZiwgYnVmc2l6KTsKIAlpZiAocmMgPCAwKQotCQlkZXZfZXJyKGNoaXAtPmRldiwKKwkJZGV2X2VycihjaGlwLT5wZGV2LAogCQkJInRwbV90cmFuc21pdDogdHBtX3JlY3Y6IGVycm9yICV6ZFxuIiwgcmMpOwogb3V0OgogCW11dGV4X3VubG9jaygmY2hpcC0+dHBtX211dGV4KTsKQEAgLTM5OCw5ICszOTgsMTAgQEAKICNkZWZpbmUgVFBNX0RJR0VTVF9TSVpFIDIwCiAjZGVmaW5lIFRQTV9SRVRfQ09ERV9JRFggNgogCi1zdGF0aWMgc3NpemVfdCB0cmFuc21pdF9jbWQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCBzdHJ1Y3QgdHBtX2NtZF90ICpjbWQsCi0JCQkgICAgaW50IGxlbiwgY29uc3QgY2hhciAqZGVzYykKK3NzaXplX3QgdHBtX3RyYW5zbWl0X2NtZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHZvaWQgKmNtZCwKKwkJCSBpbnQgbGVuLCBjb25zdCBjaGFyICpkZXNjKQogeworCXN0cnVjdCB0cG1fb3V0cHV0X2hlYWRlciAqaGVhZGVyOwogCWludCBlcnI7CiAKIAlsZW4gPSB0cG1fdHJhbnNtaXQoY2hpcCwgKHU4ICopIGNtZCwgbGVuKTsKQEAgLTQwOSw5ICs0MTAsMTIgQEAKIAllbHNlIGlmIChsZW4gPCBUUE1fSEVBREVSX1NJWkUpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZXJyID0gYmUzMl90b19jcHUoY21kLT5oZWFkZXIub3V0LnJldHVybl9jb2RlKTsKKwloZWFkZXIgPSBjbWQ7CisKKwllcnIgPSBiZTMyX3RvX2NwdShoZWFkZXItPnJldHVybl9jb2RlKTsKIAlpZiAoZXJyICE9IDAgJiYgZGVzYykKLQkJZGV2X2VycihjaGlwLT5kZXYsICJBIFRQTSBlcnJvciAoJWQpIG9jY3VycmVkICVzXG4iLCBlcnIsIGRlc2MpOworCQlkZXZfZXJyKGNoaXAtPnBkZXYsICJBIFRQTSBlcnJvciAoJWQpIG9jY3VycmVkICVzXG4iLCBlcnIsCisJCQlkZXNjKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC00NDgsNyArNDUyLDcgQEAKIAkJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcF9zaXplID0gY3B1X3RvX2JlMzIoNCk7CiAJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXAgPSBzdWJjYXBfaWQ7CiAJfQotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZ0cG1fY21kLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIGRlc2MpOworCXJjID0gdHBtX3RyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLCBkZXNjKTsKIAlpZiAoIXJjKQogCQkqY2FwID0gdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX291dC5jYXA7CiAJcmV0dXJuIHJjOwpAQCAtNDY0LDggKzQ2OCw4IEBACiAJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcF9zaXplID0gY3B1X3RvX2JlMzIoNCk7CiAJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcCA9IFRQTV9DQVBfUFJPUF9USVNfVElNRU9VVDsKIAotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZ0cG1fY21kLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCi0JCQkiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXRzIik7CisJcmMgPSB0cG1fdHJhbnNtaXRfY21kKGNoaXAsICZ0cG1fY21kLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsCisJCQkgICAgICAiYXR0ZW1wdGluZyB0byBkZXRlcm1pbmUgdGhlIHRpbWVvdXRzIik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0cG1fZ2VuX2ludGVycnVwdCk7CiAKQEAgLTQ4Myw5ICs0ODcsMTAgQEAKIHsKIAlzdHJ1Y3QgdHBtX2NtZF90IHN0YXJ0X2NtZDsKIAlzdGFydF9jbWQuaGVhZGVyLmluID0gdHBtX3N0YXJ0dXBfaGVhZGVyOworCiAJc3RhcnRfY21kLnBhcmFtcy5zdGFydHVwX2luLnN0YXJ0dXBfdHlwZSA9IHN0YXJ0dXBfdHlwZTsKLQlyZXR1cm4gdHJhbnNtaXRfY21kKGNoaXAsICZzdGFydF9jbWQsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKLQkJCSAgICAiYXR0ZW1wdGluZyB0byBzdGFydCB0aGUgVFBNIik7CisJcmV0dXJuIHRwbV90cmFuc21pdF9jbWQoY2hpcCwgJnN0YXJ0X2NtZCwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAorCQkJCSJhdHRlbXB0aW5nIHRvIHN0YXJ0IHRoZSBUUE0iKTsKIH0KIAogaW50IHRwbV9nZXRfdGltZW91dHMoc3RydWN0IHRwbV9jaGlwICpjaGlwKQpAQCAtNTAwLDEyICs1MDUsMTIgQEAKIAl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uY2FwID0gVFBNX0NBUF9QUk9QOwogCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXBfc2l6ZSA9IGNwdV90b19iZTMyKDQpOwogCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXAgPSBUUE1fQ0FQX1BST1BfVElTX1RJTUVPVVQ7Ci0JcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwgTlVMTCk7CisJcmMgPSB0cG1fdHJhbnNtaXRfY21kKGNoaXAsICZ0cG1fY21kLCBUUE1fSU5URVJOQUxfUkVTVUxUX1NJWkUsIE5VTEwpOwogCiAJaWYgKHJjID09IFRQTV9FUlJfSU5WQUxJRF9QT1NUSU5JVCkgewogCQkvKiBUaGUgVFBNIGlzIG5vdCBzdGFydGVkLCB3ZSBhcmUgdGhlIGZpcnN0IHRvIHRhbGsgdG8gaXQuCiAJCSAgIEV4ZWN1dGUgYSBzdGFydHVwIGNvbW1hbmQuICovCi0JCWRldl9pbmZvKGNoaXAtPmRldiwgIklzc3VpbmcgVFBNX1NUQVJUVVAiKTsKKwkJZGV2X2luZm8oY2hpcC0+cGRldiwgIklzc3VpbmcgVFBNX1NUQVJUVVAiKTsKIAkJaWYgKHRwbV9zdGFydHVwKGNoaXAsIFRQTV9TVF9DTEVBUikpCiAJCQlyZXR1cm4gcmM7CiAKQEAgLTUxMywxMSArNTE4LDExIEBACiAJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5jYXAgPSBUUE1fQ0FQX1BST1A7CiAJCXRwbV9jbWQucGFyYW1zLmdldGNhcF9pbi5zdWJjYXBfc2l6ZSA9IGNwdV90b19iZTMyKDQpOwogCQl0cG1fY21kLnBhcmFtcy5nZXRjYXBfaW4uc3ViY2FwID0gVFBNX0NBUF9QUk9QX1RJU19USU1FT1VUOwotCQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAorCQlyYyA9IHRwbV90cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKIAkJCQkgIE5VTEwpOwogCX0KIAlpZiAocmMpIHsKLQkJZGV2X2VycihjaGlwLT5kZXYsCisJCWRldl9lcnIoY2hpcC0+cGRldiwKIAkJCSJBIFRQTSBlcnJvciAoJXpkKSBvY2N1cnJlZCBhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgdGltZW91dHNcbiIsCiAJCQlyYyk7CiAJCWdvdG8gZHVyYXRpb247CkBAIC01NTYsNyArNTYxLDcgQEAKIAogCS8qIFJlcG9ydCBhZGp1c3RlZCB0aW1lb3V0cyAqLwogCWlmIChjaGlwLT52ZW5kb3IudGltZW91dF9hZGp1c3RlZCkgewotCQlkZXZfaW5mbyhjaGlwLT5kZXYsCisJCWRldl9pbmZvKGNoaXAtPnBkZXYsCiAJCQkgSFdfRVJSICJBZGp1c3RpbmcgcmVwb3J0ZWQgdGltZW91dHM6IEEgJWx1LT4lbHV1cyBCICVsdS0+JWx1dXMgQyAlbHUtPiVsdXVzIEQgJWx1LT4lbHV1c1xuIiwKIAkJCSBvbGRfdGltZW91dFswXSwgbmV3X3RpbWVvdXRbMF0sCiAJCQkgb2xkX3RpbWVvdXRbMV0sIG5ld190aW1lb3V0WzFdLApAQCAtNTc1LDggKzU4MCw4IEBACiAJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcF9zaXplID0gY3B1X3RvX2JlMzIoNCk7CiAJdHBtX2NtZC5wYXJhbXMuZ2V0Y2FwX2luLnN1YmNhcCA9IFRQTV9DQVBfUFJPUF9USVNfRFVSQVRJT047CiAKLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgVFBNX0lOVEVSTkFMX1JFU1VMVF9TSVpFLAotCQkJImF0dGVtcHRpbmcgdG8gZGV0ZXJtaW5lIHRoZSBkdXJhdGlvbnMiKTsKKwlyYyA9IHRwbV90cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsIFRQTV9JTlRFUk5BTF9SRVNVTFRfU0laRSwKKwkJCSAgICAgICJhdHRlbXB0aW5nIHRvIGRldGVybWluZSB0aGUgZHVyYXRpb25zIik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTYwMyw3ICs2MDgsNyBAQAogCQljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX01FRElVTV0gKj0gMTAwMDsKIAkJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9MT05HXSAqPSAxMDAwOwogCQljaGlwLT52ZW5kb3IuZHVyYXRpb25fYWRqdXN0ZWQgPSB0cnVlOwotCQlkZXZfaW5mbyhjaGlwLT5kZXYsICJBZGp1c3RpbmcgVFBNIHRpbWVvdXQgcGFyYW1ldGVycy4iKTsKKwkJZGV2X2luZm8oY2hpcC0+cGRldiwgIkFkanVzdGluZyBUUE0gdGltZW91dCBwYXJhbWV0ZXJzLiIpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTYzMSwzMiArNjM2LDExIEBACiAJc3RydWN0IHRwbV9jbWRfdCBjbWQ7CiAKIAljbWQuaGVhZGVyLmluID0gY29udGludWVfc2VsZnRlc3RfaGVhZGVyOwotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZjbWQsIENPTlRJTlVFX1NFTEZURVNUX1JFU1VMVF9TSVpFLAotCQkJICAiY29udGludWUgc2VsZnRlc3QiKTsKKwlyYyA9IHRwbV90cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgQ09OVElOVUVfU0VMRlRFU1RfUkVTVUxUX1NJWkUsCisJCQkgICAgICAiY29udGludWUgc2VsZnRlc3QiKTsKIAlyZXR1cm4gcmM7CiB9CiAKLS8qCi0gKiB0cG1fY2hpcF9maW5kX2dldCAtIHJldHVybiB0cG1fY2hpcCBmb3IgZ2l2ZW4gY2hpcCBudW1iZXIKLSAqLwotc3RhdGljIHN0cnVjdCB0cG1fY2hpcCAqdHBtX2NoaXBfZmluZF9nZXQoaW50IGNoaXBfbnVtKQotewotCXN0cnVjdCB0cG1fY2hpcCAqcG9zLCAqY2hpcCA9IE5VTEw7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG9zLCAmdHBtX2NoaXBfbGlzdCwgbGlzdCkgewotCQlpZiAoY2hpcF9udW0gIT0gVFBNX0FOWV9OVU0gJiYgY2hpcF9udW0gIT0gcG9zLT5kZXZfbnVtKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHRyeV9tb2R1bGVfZ2V0KHBvcy0+ZGV2LT5kcml2ZXItPm93bmVyKSkgewotCQkJY2hpcCA9IHBvczsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiBjaGlwOwotfQotCiAjZGVmaW5lIFRQTV9PUkRJTkFMX1BDUlJFQUQgY3B1X3RvX2JlMzIoMjEpCiAjZGVmaW5lIFJFQURfUENSX1JFU1VMVF9TSVpFIDMwCiBzdGF0aWMgc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgcGNycmVhZF9oZWFkZXIgPSB7CkBAIC02NzIsOCArNjU2LDggQEAKIAogCWNtZC5oZWFkZXIuaW4gPSBwY3JyZWFkX2hlYWRlcjsKIAljbWQucGFyYW1zLnBjcnJlYWRfaW4ucGNyX2lkeCA9IGNwdV90b19iZTMyKHBjcl9pZHgpOwotCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZjbWQsIFJFQURfUENSX1JFU1VMVF9TSVpFLAotCQkJICAiYXR0ZW1wdGluZyB0byByZWFkIGEgcGNyIHZhbHVlIik7CisJcmMgPSB0cG1fdHJhbnNtaXRfY21kKGNoaXAsICZjbWQsIFJFQURfUENSX1JFU1VMVF9TSVpFLAorCQkJICAgICAgImF0dGVtcHRpbmcgdG8gcmVhZCBhIHBjciB2YWx1ZSIpOwogCiAJaWYgKHJjID09IDApCiAJCW1lbWNweShyZXNfYnVmLCBjbWQucGFyYW1zLnBjcnJlYWRfb3V0LnBjcl9yZXN1bHQsCkBAIC03MDAsNyArNjg0LDEwIEBACiAJY2hpcCA9IHRwbV9jaGlwX2ZpbmRfZ2V0KGNoaXBfbnVtKTsKIAlpZiAoY2hpcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlyYyA9IHRwbV9wY3JfcmVhZF9kZXYoY2hpcCwgcGNyX2lkeCwgcmVzX2J1Zik7CisJaWYgKGNoaXAtPmZsYWdzICYgVFBNX0NISVBfRkxBR19UUE0yKQorCQlyYyA9IHRwbTJfcGNyX3JlYWQoY2hpcCwgcGNyX2lkeCwgcmVzX2J1Zik7CisJZWxzZQorCQlyYyA9IHRwbV9wY3JfcmVhZF9kZXYoY2hpcCwgcGNyX2lkeCwgcmVzX2J1Zik7CiAJdHBtX2NoaXBfcHV0KGNoaXApOwogCXJldHVybiByYzsKIH0KQEAgLTczNCwxMSArNzIxLDE3IEBACiAJaWYgKGNoaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlpZiAoY2hpcC0+ZmxhZ3MgJiBUUE1fQ0hJUF9GTEFHX1RQTTIpIHsKKwkJcmMgPSB0cG0yX3Bjcl9leHRlbmQoY2hpcCwgcGNyX2lkeCwgaGFzaCk7CisJCXRwbV9jaGlwX3B1dChjaGlwKTsKKwkJcmV0dXJuIHJjOworCX0KKwogCWNtZC5oZWFkZXIuaW4gPSBwY3JleHRlbmRfaGVhZGVyOwogCWNtZC5wYXJhbXMucGNyZXh0ZW5kX2luLnBjcl9pZHggPSBjcHVfdG9fYmUzMihwY3JfaWR4KTsKIAltZW1jcHkoY21kLnBhcmFtcy5wY3JleHRlbmRfaW4uaGFzaCwgaGFzaCwgVFBNX0RJR0VTVF9TSVpFKTsKLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCAmY21kLCBFWFRFTkRfUENSX1JFU1VMVF9TSVpFLAotCQkJICAiYXR0ZW1wdGluZyBleHRlbmQgYSBQQ1IgdmFsdWUiKTsKKwlyYyA9IHRwbV90cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgRVhURU5EX1BDUl9SRVNVTFRfU0laRSwKKwkJCSAgICAgICJhdHRlbXB0aW5nIGV4dGVuZCBhIFBDUiB2YWx1ZSIpOwogCiAJdHBtX2NoaXBfcHV0KGNoaXApOwogCXJldHVybiByYzsKQEAgLTc4MSw3ICs3NzQsNyBAQAogCQkgKiBhcm91bmQgMzAwbXMgd2hpbGUgdGhlIHNlbGYgdGVzdCBpcyBvbmdvaW5nLCBrZWVwIHRyeWluZwogCQkgKiB1bnRpbCB0aGUgc2VsZiB0ZXN0IGR1cmF0aW9uIGV4cGlyZXMuICovCiAJCWlmIChyYyA9PSAtRVRJTUUpIHsKLQkJCWRldl9pbmZvKGNoaXAtPmRldiwgSFdfRVJSICJUUE0gY29tbWFuZCB0aW1lZCBvdXQgZHVyaW5nIGNvbnRpbnVlIHNlbGYgdGVzdCIpOworCQkJZGV2X2luZm8oY2hpcC0+cGRldiwgSFdfRVJSICJUUE0gY29tbWFuZCB0aW1lZCBvdXQgZHVyaW5nIGNvbnRpbnVlIHNlbGYgdGVzdCIpOwogCQkJbXNsZWVwKGRlbGF5X21zZWMpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTc5MSw3ICs3ODQsNyBAQAogCiAJCXJjID0gYmUzMl90b19jcHUoY21kLmhlYWRlci5vdXQucmV0dXJuX2NvZGUpOwogCQlpZiAocmMgPT0gVFBNX0VSUl9ESVNBQkxFRCB8fCByYyA9PSBUUE1fRVJSX0RFQUNUSVZBVEVEKSB7Ci0JCQlkZXZfaW5mbyhjaGlwLT5kZXYsCisJCQlkZXZfaW5mbyhjaGlwLT5wZGV2LAogCQkJCSAiVFBNIGlzIGRpc2FibGVkL2RlYWN0aXZhdGVkICgweCVYKVxuIiwgcmMpOwogCQkJLyogVFBNIGlzIGRpc2FibGVkIGFuZC9vciBkZWFjdGl2YXRlZDsgZHJpdmVyIGNhbgogCQkJICogcHJvY2VlZCBhbmQgVFBNIGRvZXMgaGFuZGxlIGNvbW1hbmRzIGZvcgpAQCAtODE3LDcgKzgxMCw3IEBACiAJaWYgKGNoaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyYyA9IHRyYW5zbWl0X2NtZChjaGlwLCBjbWQsIGJ1ZmxlbiwgImF0dGVtcHRpbmcgdHBtX2NtZCIpOworCXJjID0gdHBtX3RyYW5zbWl0X2NtZChjaGlwLCBjbWQsIGJ1ZmxlbiwgImF0dGVtcHRpbmcgdHBtX2NtZCIpOwogCiAJdHBtX2NoaXBfcHV0KGNoaXApOwogCXJldHVybiByYzsKQEAgLTg4NCwzMCArODc3LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHdhaXRfZm9yX3RwbV9zdGF0KTsKIAotdm9pZCB0cG1fcmVtb3ZlX2hhcmR3YXJlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCWlmIChjaGlwID09IE5VTEwpIHsKLQkJZGV2X2VycihkZXYsICJObyBkZXZpY2UgZGF0YSBmb3VuZFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzcGluX2xvY2soJmRyaXZlcl9sb2NrKTsKLQlsaXN0X2RlbF9yY3UoJmNoaXAtPmxpc3QpOwotCXNwaW5fdW5sb2NrKCZkcml2ZXJfbG9jayk7Ci0Jc3luY2hyb25pemVfcmN1KCk7Ci0KLQl0cG1fZGV2X2RlbF9kZXZpY2UoY2hpcCk7Ci0JdHBtX3N5c2ZzX2RlbF9kZXZpY2UoY2hpcCk7Ci0JdHBtX3JlbW92ZV9wcGkoJmRldi0+a29iaik7Ci0JdHBtX2Jpb3NfbG9nX3RlYXJkb3duKGNoaXAtPmJpb3NfZGlyKTsKLQotCS8qIHdyaXRlIGl0IHRoaXMgd2F5IHRvIGJlIGV4cGxpY2l0IChjaGlwLT5kZXYgPT0gZGV2KSAqLwotCXB1dF9kZXZpY2UoY2hpcC0+ZGV2KTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHRwbV9yZW1vdmVfaGFyZHdhcmUpOwotCiAjZGVmaW5lIFRQTV9PUkRfU0FWRVNUQVRFIGNwdV90b19iZTMyKDE1MikKICNkZWZpbmUgU0FWRVNUQVRFX1JFU1VMVF9TSVpFIDEwCiAKQEAgLTkzMiwyMCArOTAxLDIzIEBACiAJaWYgKGNoaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlpZiAoY2hpcC0+ZmxhZ3MgJiBUUE1fQ0hJUF9GTEFHX1RQTTIpCisJCXJldHVybiB0cG0yX3NodXRkb3duKGNoaXAsIFRQTTJfU1VfQ0xFQVIpOworCiAJLyogZm9yIGJ1Z2d5IHRwbSwgZmx1c2ggcGNycyB3aXRoIGV4dGVuZCB0byBzZWxlY3RlZCBkdW1teSAqLwogCWlmICh0cG1fc3VzcGVuZF9wY3IpIHsKIAkJY21kLmhlYWRlci5pbiA9IHBjcmV4dGVuZF9oZWFkZXI7CiAJCWNtZC5wYXJhbXMucGNyZXh0ZW5kX2luLnBjcl9pZHggPSBjcHVfdG9fYmUzMih0cG1fc3VzcGVuZF9wY3IpOwogCQltZW1jcHkoY21kLnBhcmFtcy5wY3JleHRlbmRfaW4uaGFzaCwgZHVtbXlfaGFzaCwKIAkJICAgICAgIFRQTV9ESUdFU1RfU0laRSk7Ci0JCXJjID0gdHJhbnNtaXRfY21kKGNoaXAsICZjbWQsIEVYVEVORF9QQ1JfUkVTVUxUX1NJWkUsCi0JCQkJICAiZXh0ZW5kaW5nIGR1bW15IHBjciBiZWZvcmUgc3VzcGVuZCIpOworCQlyYyA9IHRwbV90cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgRVhURU5EX1BDUl9SRVNVTFRfU0laRSwKKwkJCQkgICAgICAiZXh0ZW5kaW5nIGR1bW15IHBjciBiZWZvcmUgc3VzcGVuZCIpOwogCX0KIAogCS8qIG5vdyBkbyB0aGUgYWN0dWFsIHNhdmVzdGF0ZSAqLwogCWZvciAodHJ5ID0gMDsgdHJ5IDwgVFBNX1JFVFJZOyB0cnkrKykgewogCQljbWQuaGVhZGVyLmluID0gc2F2ZXN0YXRlX2hlYWRlcjsKLQkJcmMgPSB0cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgU0FWRVNUQVRFX1JFU1VMVF9TSVpFLCBOVUxMKTsKKwkJcmMgPSB0cG1fdHJhbnNtaXRfY21kKGNoaXAsICZjbWQsIFNBVkVTVEFURV9SRVNVTFRfU0laRSwgTlVMTCk7CiAKIAkJLyoKIAkJICogSWYgdGhlIFRQTSBpbmRpY2F0ZXMgdGhhdCBpdCBpcyB0b28gYnVzeSB0byByZXNwb25kIHRvCkBAIC05NjMsMTAgKzkzNSwxMCBAQAogCX0KIAogCWlmIChyYykKLQkJZGV2X2VycihjaGlwLT5kZXYsCisJCWRldl9lcnIoY2hpcC0+cGRldiwKIAkJCSJFcnJvciAoJWQpIHNlbmRpbmcgc2F2ZXN0YXRlIGJlZm9yZSBzdXNwZW5kXG4iLCByYyk7CiAJZWxzZSBpZiAodHJ5ID4gMCkKLQkJZGV2X3dhcm4oY2hpcC0+ZGV2LCAiVFBNIHNhdmVzdGF0ZSB0b29rICVkbXNcbiIsCisJCWRldl93YXJuKGNoaXAtPnBkZXYsICJUUE0gc2F2ZXN0YXRlIHRvb2sgJWRtc1xuIiwKIAkJCSB0cnkgKiBUUE1fVElNRU9VVF9SRVRSWSk7CiAKIAlyZXR1cm4gcmM7CkBAIC0xMDE4LDExICs5OTAsMTcgQEAKIAlpZiAoY2hpcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWlmIChjaGlwLT5mbGFncyAmIFRQTV9DSElQX0ZMQUdfVFBNMikgeworCQllcnIgPSB0cG0yX2dldF9yYW5kb20oY2hpcCwgb3V0LCBtYXgpOworCQl0cG1fY2hpcF9wdXQoY2hpcCk7CisJCXJldHVybiBlcnI7CisJfQorCiAJZG8gewogCQl0cG1fY21kLmhlYWRlci5pbiA9IHRwbV9nZXRyYW5kb21faGVhZGVyOwogCQl0cG1fY21kLnBhcmFtcy5nZXRyYW5kb21faW4ubnVtX2J5dGVzID0gY3B1X3RvX2JlMzIobnVtX2J5dGVzKTsKIAotCQllcnIgPSB0cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsCisJCWVyciA9IHRwbV90cmFuc21pdF9jbWQoY2hpcCwgJnRwbV9jbWQsCiAJCQkJICAgVFBNX0dFVFJBTkRPTV9SRVNVTFRfU0laRSArIG51bV9ieXRlcywKIAkJCQkgICAiYXR0ZW1wdGluZyBnZXQgcmFuZG9tIik7CiAJCWlmIChlcnIpCkBAIC0xMDQxLDEwMyArMTAxOSwzNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwodHBtX2dldF9yYW5kb20pOwogCi0vKiBJbiBjYXNlIHZlbmRvciBwcm92aWRlZCByZWxlYXNlIGZ1bmN0aW9uLCBjYWxsIGl0IHRvby4qLwotCi12b2lkIHRwbV9kZXZfdmVuZG9yX3JlbGVhc2Uoc3RydWN0IHRwbV9jaGlwICpjaGlwKQorc3RhdGljIGludCBfX2luaXQgdHBtX2luaXQodm9pZCkKIHsKLQlpZiAoIWNoaXApCi0JCXJldHVybjsKKwlpbnQgcmM7CiAKLQljbGVhcl9iaXQoY2hpcC0+ZGV2X251bSwgZGV2X21hc2spOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodHBtX2Rldl92ZW5kb3JfcmVsZWFzZSk7Ci0KLQotLyoKLSAqIE9uY2UgYWxsIHJlZmVyZW5jZXMgdG8gcGxhdGZvcm0gZGV2aWNlIGFyZSBkb3duIHRvIDAsCi0gKiByZWxlYXNlIGFsbCBhbGxvY2F0ZWQgc3RydWN0dXJlcy4KLSAqLwotc3RhdGljIHZvaWQgdHBtX2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCWlmICghY2hpcCkKLQkJcmV0dXJuOwotCi0JdHBtX2Rldl92ZW5kb3JfcmVsZWFzZShjaGlwKTsKLQotCWNoaXAtPnJlbGVhc2UoZGV2KTsKLQlrZnJlZShjaGlwKTsKLX0KLQotLyoKLSAqIENhbGxlZCBmcm9tIHRwbV88c3BlY2lmaWM+LmMgcHJvYmUgZnVuY3Rpb24gb25seSBmb3IgZGV2aWNlcwotICogdGhlIGRyaXZlciBoYXMgZGV0ZXJtaW5lZCBpdCBzaG91bGQgY2xhaW0uICBQcmlvciB0byBjYWxsaW5nCi0gKiB0aGlzIGZ1bmN0aW9uIHRoZSBzcGVjaWZpYyBwcm9iZSBmdW5jdGlvbiBoYXMgY2FsbGVkIHBjaV9lbmFibGVfZGV2aWNlCi0gKiB1cG9uIGVycmFudCBleGl0IGZyb20gdGhpcyBmdW5jdGlvbiBzcGVjaWZpYyBwcm9iZSBmdW5jdGlvbiBzaG91bGQgY2FsbAotICogcGNpX2Rpc2FibGVfZGV2aWNlCi0gKi8KLXN0cnVjdCB0cG1fY2hpcCAqdHBtX3JlZ2lzdGVyX2hhcmR3YXJlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgICAgY29uc3Qgc3RydWN0IHRwbV9jbGFzc19vcHMgKm9wcykKLXsKLQlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXA7Ci0KLQkvKiBEcml2ZXIgc3BlY2lmaWMgcGVyLWRldmljZSBkYXRhICovCi0JY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAoY2hpcCA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCW11dGV4X2luaXQoJmNoaXAtPnRwbV9tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNoaXAtPmxpc3QpOwotCi0JY2hpcC0+b3BzID0gb3BzOwotCWNoaXAtPmRldl9udW0gPSBmaW5kX2ZpcnN0X3plcm9fYml0KGRldl9tYXNrLCBUUE1fTlVNX0RFVklDRVMpOwotCi0JaWYgKGNoaXAtPmRldl9udW0gPj0gVFBNX05VTV9ERVZJQ0VTKSB7Ci0JCWRldl9lcnIoZGV2LCAiTm8gYXZhaWxhYmxlIHRwbSBkZXZpY2UgbnVtYmVyc1xuIik7Ci0JCWdvdG8gb3V0X2ZyZWU7CisJdHBtX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAidHBtIik7CisJaWYgKElTX0VSUih0cG1fY2xhc3MpKSB7CisJCXByX2VycigiY291bGRuJ3QgY3JlYXRlIHRwbSBjbGFzc1xuIik7CisJCXJldHVybiBQVFJfRVJSKHRwbV9jbGFzcyk7CiAJfQogCi0Jc2V0X2JpdChjaGlwLT5kZXZfbnVtLCBkZXZfbWFzayk7CisJcmMgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZ0cG1fZGV2dCwgMCwgVFBNX05VTV9ERVZJQ0VTLCAidHBtIik7CisJaWYgKHJjIDwgMCkgeworCQlwcl9lcnIoInRwbTogZmFpbGVkIHRvIGFsbG9jYXRlIGNoYXIgZGV2IHJlZ2lvblxuIik7CisJCWNsYXNzX2Rlc3Ryb3kodHBtX2NsYXNzKTsKKwkJcmV0dXJuIHJjOworCX0KIAotCXNjbnByaW50ZihjaGlwLT5kZXZuYW1lLCBzaXplb2YoY2hpcC0+ZGV2bmFtZSksICIlcyVkIiwgInRwbSIsCi0JCSAgY2hpcC0+ZGV2X251bSk7Ci0KLQljaGlwLT5kZXYgPSBnZXRfZGV2aWNlKGRldik7Ci0JY2hpcC0+cmVsZWFzZSA9IGRldi0+cmVsZWFzZTsKLQlkZXYtPnJlbGVhc2UgPSB0cG1fZGV2X3JlbGVhc2U7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgY2hpcCk7Ci0KLQlpZiAodHBtX2Rldl9hZGRfZGV2aWNlKGNoaXApKQotCQlnb3RvIHB1dF9kZXZpY2U7Ci0KLQlpZiAodHBtX3N5c2ZzX2FkZF9kZXZpY2UoY2hpcCkpCi0JCWdvdG8gZGVsX21pc2M7Ci0KLQlpZiAodHBtX2FkZF9wcGkoJmRldi0+a29iaikpCi0JCWdvdG8gZGVsX3N5c2ZzOwotCi0JY2hpcC0+Ymlvc19kaXIgPSB0cG1fYmlvc19sb2dfc2V0dXAoY2hpcC0+ZGV2bmFtZSk7Ci0KLQkvKiBNYWtlIGNoaXAgYXZhaWxhYmxlICovCi0Jc3Bpbl9sb2NrKCZkcml2ZXJfbG9jayk7Ci0JbGlzdF9hZGRfcmN1KCZjaGlwLT5saXN0LCAmdHBtX2NoaXBfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmRyaXZlcl9sb2NrKTsKLQotCXJldHVybiBjaGlwOwotCi1kZWxfc3lzZnM6Ci0JdHBtX3N5c2ZzX2RlbF9kZXZpY2UoY2hpcCk7Ci1kZWxfbWlzYzoKLQl0cG1fZGV2X2RlbF9kZXZpY2UoY2hpcCk7Ci1wdXRfZGV2aWNlOgotCXB1dF9kZXZpY2UoY2hpcC0+ZGV2KTsKLW91dF9mcmVlOgotCWtmcmVlKGNoaXApOwotCXJldHVybiBOVUxMOworCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTF9HUEwodHBtX3JlZ2lzdGVyX2hhcmR3YXJlKTsKKworc3RhdGljIHZvaWQgX19leGl0IHRwbV9leGl0KHZvaWQpCit7CisJY2xhc3NfZGVzdHJveSh0cG1fY2xhc3MpOworCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbih0cG1fZGV2dCwgVFBNX05VTV9ERVZJQ0VTKTsKK30KKworc3Vic3lzX2luaXRjYWxsKHRwbV9pbml0KTsKK21vZHVsZV9leGl0KHRwbV9leGl0KTsKIAogTU9EVUxFX0FVVEhPUigiTGVlbmRlcnQgdmFuIERvb3JuIChsZWVuZGVydEB3YXRzb24uaWJtLmNvbSkiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVFBNIERyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG0tc3lzZnMuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLXN5c2ZzLmMKaW5kZXggMDE3MzBhMi4uZWU2NmZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG0tc3lzZnMuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbS1zeXNmcy5jCkBAIC0yMCwyNSArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgInRwbS5oIgogCi0vKiBYWFggZm9yIG5vdyB0aGlzIGhlbHBlciBpcyBkdXBsaWNhdGVkIGluIHRwbS1pbnRlcmZhY2UuYyAqLwotc3RhdGljIHNzaXplX3QgdHJhbnNtaXRfY21kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgc3RydWN0IHRwbV9jbWRfdCAqY21kLAotCQkJICAgIGludCBsZW4sIGNvbnN0IGNoYXIgKmRlc2MpCi17Ci0JaW50IGVycjsKLQotCWxlbiA9IHRwbV90cmFuc21pdChjaGlwLCAodTggKikgY21kLCBsZW4pOwotCWlmIChsZW4gPCAgMCkKLQkJcmV0dXJuIGxlbjsKLQllbHNlIGlmIChsZW4gPCBUUE1fSEVBREVSX1NJWkUpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZXJyID0gYmUzMl90b19jcHUoY21kLT5oZWFkZXIub3V0LnJldHVybl9jb2RlKTsKLQlpZiAoZXJyICE9IDAgJiYgZGVzYykKLQkJZGV2X2VycihjaGlwLT5kZXYsICJBIFRQTSBlcnJvciAoJWQpIG9jY3VycmVkICVzXG4iLCBlcnIsIGRlc2MpOwotCi0JcmV0dXJuIGVycjsKLX0KLQogI2RlZmluZSBSRUFEX1BVQkVLX1JFU1VMVF9TSVpFIDMxNAogI2RlZmluZSBUUE1fT1JEX1JFQURQVUJFSyBjcHVfdG9fYmUzMigxMjQpCiBzdGF0aWMgc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgdHBtX3JlYWRwdWJla19oZWFkZXIgPSB7CkBAIC01OCw4ICszOSw4IEBACiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKIAl0cG1fY21kLmhlYWRlci5pbiA9IHRwbV9yZWFkcHViZWtfaGVhZGVyOwotCWVyciA9IHRyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgUkVBRF9QVUJFS19SRVNVTFRfU0laRSwKLQkJCSAgICJhdHRlbXB0aW5nIHRvIHJlYWQgdGhlIFBVQkVLIik7CisJZXJyID0gdHBtX3RyYW5zbWl0X2NtZChjaGlwLCAmdHBtX2NtZCwgUkVBRF9QVUJFS19SRVNVTFRfU0laRSwKKwkJCSAgICAgICAiYXR0ZW1wdGluZyB0byByZWFkIHRoZSBQVUJFSyIpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0zMDMsMTYgKzI4NCwxNiBAQAogaW50IHRwbV9zeXNmc19hZGRfZGV2aWNlKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKIAlpbnQgZXJyOwotCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2hpcC0+ZGV2LT5rb2JqLAorCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2hpcC0+cGRldi0+a29iaiwKIAkJCQkgJnRwbV9kZXZfZ3JvdXApOwogCiAJaWYgKGVycikKLQkJZGV2X2VycihjaGlwLT5kZXYsCisJCWRldl9lcnIoY2hpcC0+cGRldiwKIAkJCSJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGF0dHJpYnV0ZXMsICVkXG4iLCBlcnIpOwogCXJldHVybiBlcnI7CiB9CiAKIHZvaWQgdHBtX3N5c2ZzX2RlbF9kZXZpY2Uoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2hpcC0+ZGV2LT5rb2JqLCAmdHBtX2Rldl9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjaGlwLT5wZGV2LT5rb2JqLCAmdHBtX2Rldl9ncm91cCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oIGIvZHJpdmVycy9jaGFyL3RwbS90cG0uaAppbmRleCBlNGQwODg4Li43YjA3MjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbS5oCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtLmgKQEAgLTEwLDIzICsxMCwyNCBAQAogICogTWFpbnRhaW5lZCBieTogPHRwbWRkLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KICAqCiAgKiBEZXZpY2UgZHJpdmVyIGZvciBUQ0cvVENQQSBUUE0gKHRydXN0ZWQgcGxhdGZvcm0gbW9kdWxlKS4KLSAqIFNwZWNpZmljYXRpb25zIGF0IHd3dy50cnVzdGVkY29tcHV0aW5nZ3JvdXAub3JnCSAKKyAqIFNwZWNpZmljYXRpb25zIGF0IHd3dy50cnVzdGVkY29tcHV0aW5nZ3JvdXAub3JnCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlCiAgKiBMaWNlbnNlLgotICogCisgKgogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC90cG0uaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogCiBlbnVtIHRwbV9jb25zdCB7CiAJVFBNX01JTk9SID0gMjI0LAkvKiBvZmZpY2lhbGx5IGFzc2lnbmVkICovCkBAIC02MSw2ICs2Miw1OSBAQAogI2RlZmluZSBUUE1fRVJSX0lOVkFMSURfUE9TVElOSVQgMzgKIAogI2RlZmluZSBUUE1fSEVBREVSX1NJWkUJCTEwCisKK2VudW0gdHBtMl9jb25zdCB7CisJVFBNMl9QTEFURk9STV9QQ1IJPSAyNCwKKwlUUE0yX1BDUl9TRUxFQ1RfTUlOCT0gKChUUE0yX1BMQVRGT1JNX1BDUiArIDcpIC8gOCksCisJVFBNMl9USU1FT1VUX0EJCT0gNzUwLAorCVRQTTJfVElNRU9VVF9CCQk9IDIwMDAsCisJVFBNMl9USU1FT1VUX0MJCT0gMjAwLAorCVRQTTJfVElNRU9VVF9ECQk9IDMwLAorCVRQTTJfRFVSQVRJT05fU0hPUlQJPSAyMCwKKwlUUE0yX0RVUkFUSU9OX01FRElVTQk9IDc1MCwKKwlUUE0yX0RVUkFUSU9OX0xPTkcJPSAyMDAwLAorfTsKKworZW51bSB0cG0yX3N0cnVjdHVyZXMgeworCVRQTTJfU1RfTk9fU0VTU0lPTlMJPSAweDgwMDEsCisJVFBNMl9TVF9TRVNTSU9OUwk9IDB4ODAwMiwKK307CisKK2VudW0gdHBtMl9yZXR1cm5fY29kZXMgeworCVRQTTJfUkNfSU5JVElBTElaRQk9IDB4MDEwMCwKKwlUUE0yX1JDX1RFU1RJTkcJCT0gMHgwOTBBLAorCVRQTTJfUkNfRElTQUJMRUQJPSAweDAxMjAsCit9OworCitlbnVtIHRwbTJfYWxnb3JpdGhtcyB7CisJVFBNMl9BTEdfU0hBMQkJPSAweDAwMDQsCit9OworCitlbnVtIHRwbTJfY29tbWFuZF9jb2RlcyB7CisJVFBNMl9DQ19GSVJTVAkJPSAweDAxMUYsCisJVFBNMl9DQ19TRUxGX1RFU1QJPSAweDAxNDMsCisJVFBNMl9DQ19TVEFSVFVQCQk9IDB4MDE0NCwKKwlUUE0yX0NDX1NIVVRET1dOCT0gMHgwMTQ1LAorCVRQTTJfQ0NfR0VUX0NBUEFCSUxJVFkJPSAweDAxN0EsCisJVFBNMl9DQ19HRVRfUkFORE9NCT0gMHgwMTdCLAorCVRQTTJfQ0NfUENSX1JFQUQJPSAweDAxN0UsCisJVFBNMl9DQ19QQ1JfRVhURU5ECT0gMHgwMTgyLAorCVRQTTJfQ0NfTEFTVAkJPSAweDAxOEYsCit9OworCitlbnVtIHRwbTJfcGVybWFuZW50X2hhbmRsZXMgeworCVRQTTJfUlNfUFcJCT0gMHg0MDAwMDAwOSwKK307CisKK2VudW0gdHBtMl9jYXBhYmlsaXRpZXMgeworCVRQTTJfQ0FQX1RQTV9QUk9QRVJUSUVTID0gNiwKK307CisKK2VudW0gdHBtMl9zdGFydHVwX3R5cGVzIHsKKwlUUE0yX1NVX0NMRUFSCT0gMHgwMDAwLAorCVRQTTJfU1VfU1RBVEUJPSAweDAwMDEsCit9OworCiBzdHJ1Y3QgdHBtX2NoaXA7CiAKIHN0cnVjdCB0cG1fdmVuZG9yX3NwZWNpZmljIHsKQEAgLTczLDcgKzEyNyw2IEBACiAJaW50IHJlZ2lvbl9zaXplOwogCWludCBoYXZlX3JlZ2lvbjsKIAotCXN0cnVjdCBtaXNjZGV2aWNlIG1pc2NkZXY7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWludCBsb2NhbGl0eTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXRfYSwgdGltZW91dF9iLCB0aW1lb3V0X2MsIHRpbWVvdXRfZDsgLyogamlmZmllcyAqLwpAQCAtODgsMTUgKzE0MSwyNyBAQAogCXUxNiBtYW51ZmFjdHVyZXJfaWQ7CiB9OwogCi0jZGVmaW5lIFRQTV9WUFJJVihjKQkoYyktPnZlbmRvci5wcml2CisjZGVmaW5lIFRQTV9WUFJJVihjKSAgICAgKChjKS0+dmVuZG9yLnByaXYpCiAKICNkZWZpbmUgVFBNX1ZJRF9JTlRFTCAgICAweDgwODYKICNkZWZpbmUgVFBNX1ZJRF9XSU5CT05EICAweDEwNTAKICNkZWZpbmUgVFBNX1ZJRF9TVE0gICAgICAweDEwNEEKIAorI2RlZmluZSBUUE1fUFBJX1ZFUlNJT05fTEVOCQkzCisKK2VudW0gdHBtX2NoaXBfZmxhZ3MgeworCVRQTV9DSElQX0ZMQUdfUkVHSVNURVJFRAk9IEJJVCgwKSwKKwlUUE1fQ0hJUF9GTEFHX1BQSQkJPSBCSVQoMSksCisJVFBNX0NISVBfRkxBR19UUE0yCQk9IEJJVCgyKSwKK307CisKIHN0cnVjdCB0cG1fY2hpcCB7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwkvKiBEZXZpY2Ugc3R1ZmYgKi8KKwlzdHJ1Y3QgZGV2aWNlICpwZGV2OwkvKiBEZXZpY2Ugc3R1ZmYgKi8KKwlzdHJ1Y3QgZGV2aWNlIGRldjsKKwlzdHJ1Y3QgY2RldiBjZGV2OworCiAJY29uc3Qgc3RydWN0IHRwbV9jbGFzc19vcHMgKm9wczsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKIAlpbnQgZGV2X251bTsJCS8qIC9kZXYvdHBtIyAqLwogCWNoYXIgZGV2bmFtZVs3XTsKQEAgLTEwOSwxNSArMTc0LDE5IEBACiAKIAlzdHJ1Y3QgZGVudHJ5ICoqYmlvc19kaXI7CiAKKyNpZmRlZiBDT05GSUdfQUNQSQorCWFjcGlfaGFuZGxlIGFjcGlfZGV2X2hhbmRsZTsKKwljaGFyIHBwaV92ZXJzaW9uW1RQTV9QUElfVkVSU0lPTl9MRU4gKyAxXTsKKyNlbmRpZiAvKiBDT05GSUdfQUNQSSAqLworCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXZvaWQgKCpyZWxlYXNlKSAoc3RydWN0IGRldmljZSAqKTsKIH07CiAKICNkZWZpbmUgdG9fdHBtX2NoaXAobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCB0cG1fY2hpcCwgdmVuZG9yKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdHBtX2NoaXBfcHV0KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKLQltb2R1bGVfcHV0KGNoaXAtPmRldi0+ZHJpdmVyLT5vd25lcik7CisJbW9kdWxlX3B1dChjaGlwLT5wZGV2LT5kcml2ZXItPm93bmVyKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdHBtX3JlYWRfaW5kZXgoaW50IGJhc2UsIGludCBpbmRleCkKQEAgLTMxMyw0MCArMzgyLDU3IEBACiAJdHBtX2NtZF9wYXJhbXMJcGFyYW1zOwogfSBfX3BhY2tlZDsKIAotc3NpemVfdAl0cG1fZ2V0Y2FwKHN0cnVjdCBkZXZpY2UgKiwgX19iZTMyLCBjYXBfdCAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHN0cnVjdCBjbGFzcyAqdHBtX2NsYXNzOworZXh0ZXJuIGRldl90IHRwbV9kZXZ0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHBtX2ZvcHM7CiAKK3NzaXplX3QJdHBtX2dldGNhcChzdHJ1Y3QgZGV2aWNlICosIF9fYmUzMiwgY2FwX3QgKiwgY29uc3QgY2hhciAqKTsKIHNzaXplX3QgdHBtX3RyYW5zbWl0KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgY29uc3QgY2hhciAqYnVmLAogCQkgICAgIHNpemVfdCBidWZzaXopOworc3NpemVfdCB0cG1fdHJhbnNtaXRfY21kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdm9pZCAqY21kLCBpbnQgbGVuLAorCQkJIGNvbnN0IGNoYXIgKmRlc2MpOwogZXh0ZXJuIGludCB0cG1fZ2V0X3RpbWVvdXRzKHN0cnVjdCB0cG1fY2hpcCAqKTsKIGV4dGVybiB2b2lkIHRwbV9nZW5faW50ZXJydXB0KHN0cnVjdCB0cG1fY2hpcCAqKTsKIGV4dGVybiBpbnQgdHBtX2RvX3NlbGZ0ZXN0KHN0cnVjdCB0cG1fY2hpcCAqKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRwbV9jYWxjX29yZGluYWxfZHVyYXRpb24oc3RydWN0IHRwbV9jaGlwICosIHUzMik7Ci1leHRlcm4gc3RydWN0IHRwbV9jaGlwKiB0cG1fcmVnaXN0ZXJfaGFyZHdhcmUoc3RydWN0IGRldmljZSAqLAotCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgdHBtX2NsYXNzX29wcyAqb3BzKTsKLWV4dGVybiB2b2lkIHRwbV9kZXZfdmVuZG9yX3JlbGVhc2Uoc3RydWN0IHRwbV9jaGlwICopOwotZXh0ZXJuIHZvaWQgdHBtX3JlbW92ZV9oYXJkd2FyZShzdHJ1Y3QgZGV2aWNlICopOwogZXh0ZXJuIGludCB0cG1fcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICopOwogZXh0ZXJuIGludCB0cG1fcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKik7CiBleHRlcm4gaW50IHdhaXRfZm9yX3RwbV9zdGF0KHN0cnVjdCB0cG1fY2hpcCAqLCB1OCwgdW5zaWduZWQgbG9uZywKIAkJCSAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgKiwgYm9vbCk7CiAKLWludCB0cG1fZGV2X2FkZF9kZXZpY2Uoc3RydWN0IHRwbV9jaGlwICpjaGlwKTsKLXZvaWQgdHBtX2Rldl9kZWxfZGV2aWNlKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCk7CitzdHJ1Y3QgdHBtX2NoaXAgKnRwbV9jaGlwX2ZpbmRfZ2V0KGludCBjaGlwX251bSk7CitleHRlcm4gc3RydWN0IHRwbV9jaGlwICp0cG1tX2NoaXBfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdHBtX2NsYXNzX29wcyAqb3BzKTsKK2V4dGVybiBpbnQgdHBtX2NoaXBfcmVnaXN0ZXIoc3RydWN0IHRwbV9jaGlwICpjaGlwKTsKK2V4dGVybiB2b2lkIHRwbV9jaGlwX3VucmVnaXN0ZXIoc3RydWN0IHRwbV9jaGlwICpjaGlwKTsKKwogaW50IHRwbV9zeXNmc19hZGRfZGV2aWNlKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCk7CiB2b2lkIHRwbV9zeXNmc19kZWxfZGV2aWNlKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCk7CiAKIGludCB0cG1fcGNyX3JlYWRfZGV2KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgaW50IHBjcl9pZHgsIHU4ICpyZXNfYnVmKTsKIAogI2lmZGVmIENPTkZJR19BQ1BJCi1leHRlcm4gaW50IHRwbV9hZGRfcHBpKHN0cnVjdCBrb2JqZWN0ICopOwotZXh0ZXJuIHZvaWQgdHBtX3JlbW92ZV9wcGkoc3RydWN0IGtvYmplY3QgKik7CitleHRlcm4gaW50IHRwbV9hZGRfcHBpKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCk7CitleHRlcm4gdm9pZCB0cG1fcmVtb3ZlX3BwaShzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHRwbV9hZGRfcHBpKHN0cnVjdCBrb2JqZWN0ICpwYXJlbnQpCitzdGF0aWMgaW5saW5lIGludCB0cG1fYWRkX3BwaShzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0cG1fcmVtb3ZlX3BwaShzdHJ1Y3Qga29iamVjdCAqcGFyZW50KQorc3RhdGljIGlubGluZSB2b2lkIHRwbV9yZW1vdmVfcHBpKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKIH0KICNlbmRpZgorCitpbnQgdHBtMl9wY3JfcmVhZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIGludCBwY3JfaWR4LCB1OCAqcmVzX2J1Zik7CitpbnQgdHBtMl9wY3JfZXh0ZW5kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgaW50IHBjcl9pZHgsIGNvbnN0IHU4ICpoYXNoKTsKK2ludCB0cG0yX2dldF9yYW5kb20oc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCAqb3V0LCBzaXplX3QgbWF4KTsKK3NzaXplX3QgdHBtMl9nZXRfdHBtX3B0KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTMyIHByb3BlcnR5X2lkLAorCQkJdTMyICp2YWx1ZSwgY29uc3QgY2hhciAqZGVzYyk7CisKK2V4dGVybiBpbnQgdHBtMl9zdGFydHVwKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTE2IHN0YXJ0dXBfdHlwZSk7CitleHRlcm4gaW50IHRwbTJfc2h1dGRvd24oc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1MTYgc2h1dGRvd25fdHlwZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyB0cG0yX2NhbGNfb3JkaW5hbF9kdXJhdGlvbihzdHJ1Y3QgdHBtX2NoaXAgKiwgdTMyKTsKK2V4dGVybiBpbnQgdHBtMl9kb19zZWxmdGVzdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApOworZXh0ZXJuIGludCB0cG0yX2dlbl9pbnRlcnJ1cHQoc3RydWN0IHRwbV9jaGlwICpjaGlwLCBib29sIHF1aWV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtMi1jbWQuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtMi1jbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWJlNjUwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG0yLWNtZC5jCkBAIC0wLDAgKzEsNjE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIEphcmtrbyBTYWtraW5lbiA8amFya2tvLnNha2tpbmVuQGxpbnV4LmludGVsLmNvbT4KKyAqCisgKiBNYWludGFpbmVkIGJ5OiA8dHBtZGQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBUUE0yIHByb3RvY29sIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgY29tbWFuZHMKKyAqIHVzZWQgYnkgdGhlIGtlcm5lbCBpbnRlcm5hbGx5LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSAidHBtLmgiCisKK3N0cnVjdCB0cG0yX3N0YXJ0dXBfaW4geworCV9fYmUxNglzdGFydHVwX3R5cGU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgdHBtMl9zZWxmX3Rlc3RfaW4geworCXU4CWZ1bGxfdGVzdDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB0cG0yX3Bjcl9yZWFkX2luIHsKKwlfX2JlMzIJcGNyX3NlbGVjdHNfY250OworCV9fYmUxNgloYXNoX2FsZzsKKwl1OAlwY3Jfc2VsZWN0X3NpemU7CisJdTgJcGNyX3NlbGVjdFtUUE0yX1BDUl9TRUxFQ1RfTUlOXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB0cG0yX3Bjcl9yZWFkX291dCB7CisJX19iZTMyCXVwZGF0ZV9jbnQ7CisJX19iZTMyCXBjcl9zZWxlY3RzX2NudDsKKwlfX2JlMTYJaGFzaF9hbGc7CisJdTgJcGNyX3NlbGVjdF9zaXplOworCXU4CXBjcl9zZWxlY3RbVFBNMl9QQ1JfU0VMRUNUX01JTl07CisJX19iZTMyCWRpZ2VzdHNfY250OworCV9fYmUxNglkaWdlc3Rfc2l6ZTsKKwl1OAlkaWdlc3RbVFBNX0RJR0VTVF9TSVpFXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB0cG0yX251bGxfYXV0aF9hcmVhIHsKKwlfX2JlMzIJCQloYW5kbGU7CisJX19iZTE2CQkJbm9uY2Vfc2l6ZTsKKwl1OAkJCWF0dHJpYnV0ZXM7CisJX19iZTE2CQkJYXV0aF9zaXplOworfSBfX3BhY2tlZDsKKworc3RydWN0IHRwbTJfcGNyX2V4dGVuZF9pbiB7CisJX19iZTMyCQkJCXBjcl9pZHg7CisJX19iZTMyCQkJCWF1dGhfYXJlYV9zaXplOworCXN0cnVjdCB0cG0yX251bGxfYXV0aF9hcmVhCWF1dGhfYXJlYTsKKwlfX2JlMzIJCQkJZGlnZXN0X2NudDsKKwlfX2JlMTYJCQkJaGFzaF9hbGc7CisJdTgJCQkJZGlnZXN0W1RQTV9ESUdFU1RfU0laRV07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgdHBtMl9nZXRfdHBtX3B0X2luIHsKKwlfX2JlMzIJY2FwX2lkOworCV9fYmUzMglwcm9wZXJ0eV9pZDsKKwlfX2JlMzIJcHJvcGVydHlfY250OworfSBfX3BhY2tlZDsKKworc3RydWN0IHRwbTJfZ2V0X3RwbV9wdF9vdXQgeworCXU4CW1vcmVfZGF0YTsKKwlfX2JlMzIJc3ViY2FwX2lkOworCV9fYmUzMglwcm9wZXJ0eV9jbnQ7CisJX19iZTMyCXByb3BlcnR5X2lkOworCV9fYmUzMgl2YWx1ZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB0cG0yX2dldF9yYW5kb21faW4geworCV9fYmUxNglzaXplOworfSBfX3BhY2tlZDsKKworc3RydWN0IHRwbTJfZ2V0X3JhbmRvbV9vdXQgeworCV9fYmUxNglzaXplOworCXU4CWJ1ZmZlcltUUE1fTUFYX1JOR19EQVRBXTsKK30gX19wYWNrZWQ7CisKK3VuaW9uIHRwbTJfY21kX3BhcmFtcyB7CisJc3RydWN0CXRwbTJfc3RhcnR1cF9pbgkJc3RhcnR1cF9pbjsKKwlzdHJ1Y3QJdHBtMl9zZWxmX3Rlc3RfaW4Jc2VsZnRlc3RfaW47CisJc3RydWN0CXRwbTJfcGNyX3JlYWRfaW4JcGNycmVhZF9pbjsKKwlzdHJ1Y3QJdHBtMl9wY3JfcmVhZF9vdXQJcGNycmVhZF9vdXQ7CisJc3RydWN0CXRwbTJfcGNyX2V4dGVuZF9pbglwY3JleHRlbmRfaW47CisJc3RydWN0CXRwbTJfZ2V0X3RwbV9wdF9pbglnZXRfdHBtX3B0X2luOworCXN0cnVjdAl0cG0yX2dldF90cG1fcHRfb3V0CWdldF90cG1fcHRfb3V0OworCXN0cnVjdAl0cG0yX2dldF9yYW5kb21faW4JZ2V0cmFuZG9tX2luOworCXN0cnVjdAl0cG0yX2dldF9yYW5kb21fb3V0CWdldHJhbmRvbV9vdXQ7Cit9OworCitzdHJ1Y3QgdHBtMl9jbWQgeworCXRwbV9jbWRfaGVhZGVyCQloZWFkZXI7CisJdW5pb24gdHBtMl9jbWRfcGFyYW1zCXBhcmFtczsKK30gX19wYWNrZWQ7CisKKy8qCisgKiBBcnJheSB3aXRoIG9uZSBlbnRyeSBwZXIgb3JkaW5hbCBkZWZpbmluZyB0aGUgbWF4aW11bSBhbW91bnQKKyAqIG9mIHRpbWUgdGhlIGNoaXAgY291bGQgdGFrZSB0byByZXR1cm4gdGhlIHJlc3VsdC4gVGhlIHZhbHVlcworICogb2YgdGhlIFNIT1JULCBNRURJVU0sIGFuZCBMT05HIGR1cmF0aW9ucyBhcmUgdGFrZW4gZnJvbSB0aGUKKyAqIFBDIENsaWVudCBQcm9maWxlIChQVFApIHNwZWNpZmljYXRpb24uCisgKi8KK3N0YXRpYyBjb25zdCB1OCB0cG0yX29yZGluYWxfZHVyYXRpb25bVFBNMl9DQ19MQVNUIC0gVFBNMl9DQ19GSVJTVCArIDFdID0geworCVRQTV9VTkRFRklORUQsCQkvKiAxMUYgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTIwICovCisJVFBNX0xPTkcsCQkvKiAxMjEgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTIyICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDEyMyAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxMjQgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTI1ICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDEyNiAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxMjcgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTI4ICovCisJVFBNX0xPTkcsCQkvKiAxMjkgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTJhICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDEyYiAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxMmMgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTJkICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDEyZSAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxMmYgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTMwICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDEzMSAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxMzIgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTMzICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDEzNCAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxMzUgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTM2ICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDEzNyAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxMzggKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTM5ICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDEzYSAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxM2IgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTNjICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDEzZCAqLworCVRQTV9NRURJVU0sCQkvKiAxM2UgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTNmICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE0MCAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNDEgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTQyICovCisJVFBNX0xPTkcsCQkvKiAxNDMgKi8KKwlUUE1fTUVESVVNLAkJLyogMTQ0ICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE0NSAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNDYgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTQ3ICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE0OCAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNDkgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTRhICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE0YiAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNGMgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTRkICovCisJVFBNX0xPTkcsCQkvKiAxNGUgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTRmICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE1MCAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNTEgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTUyICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE1MyAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNTQgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTU1ICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE1NiAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNTcgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTU4ICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE1OSAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNWEgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTViICovCisJVFBNX01FRElVTSwJCS8qIDE1YyAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNWQgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTVlICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE1ZiAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNjAgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTYxICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE2MiAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNjMgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTY0ICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE2NSAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNjYgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTY3ICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE2OCAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNjkgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTZhICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE2YiAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNmMgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTZkICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE2ZSAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNmYgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTcwICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE3MSAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNzIgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTczICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE3NCAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxNzUgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTc2ICovCisJVFBNX0xPTkcsCQkvKiAxNzcgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTc4ICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE3OSAqLworCVRQTV9NRURJVU0sCQkvKiAxN2EgKi8KKwlUUE1fTE9ORywJCS8qIDE3YiAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxN2MgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTdkICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE3ZSAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxN2YgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTgwICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE4MSAqLworCVRQTV9NRURJVU0sCQkvKiAxODIgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTgzICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE4NCAqLworCVRQTV9NRURJVU0sCQkvKiAxODUgKi8KKwlUUE1fTUVESVVNLAkJLyogMTg2ICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE4NyAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxODggKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMTg5ICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE4YSAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxOGIgKi8KKwlUUE1fVU5ERUZJTkVELAkJLyogMThjICovCisJVFBNX1VOREVGSU5FRCwJCS8qIDE4ZCAqLworCVRQTV9VTkRFRklORUQsCQkvKiAxOGUgKi8KKwlUUE1fVU5ERUZJTkVECQkvKiAxOGYgKi8KK307CisKKyNkZWZpbmUgVFBNMl9QQ1JfUkVBRF9JTl9TSVpFIFwKKwkoc2l6ZW9mKHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyKSArIFwKKwkgc2l6ZW9mKHN0cnVjdCB0cG0yX3Bjcl9yZWFkX2luKSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyIHRwbTJfcGNycmVhZF9oZWFkZXIgPSB7CisJLnRhZyA9IGNwdV90b19iZTE2KFRQTTJfU1RfTk9fU0VTU0lPTlMpLAorCS5sZW5ndGggPSBjcHVfdG9fYmUzMihUUE0yX1BDUl9SRUFEX0lOX1NJWkUpLAorCS5vcmRpbmFsID0gY3B1X3RvX2JlMzIoVFBNMl9DQ19QQ1JfUkVBRCkKK307CisKKy8qKgorICogdHBtMl9wY3JfcmVhZCgpIC0gcmVhZCBhIFBDUiB2YWx1ZQorICogQGNoaXA6CVRQTSBjaGlwIHRvIHVzZS4KKyAqIEBwY3JfaWR4OglpbmRleCBvZiB0aGUgUENSIHRvIHJlYWQuCisgKiBAcmVmX2J1ZjoJYnVmZmVyIHRvIHN0b3JlIHRoZSByZXN1bHRpbmcgaGFzaCwKKyAqCisgKiAwIGlzIHJldHVybmVkIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLiBJZiBhIG5lZ2F0aXZlIG51bWJlciBpcworICogcmV0dXJuZWQgaXQgcmVtYXJrcyBhIFBPU0lYIGVycm9yIGNvZGUuIElmIGEgcG9zaXRpdmUgbnVtYmVyIGlzIHJldHVybmVkCisgKiBpdCByZW1hcmtzIGEgVFBNIGVycm9yLgorICovCitpbnQgdHBtMl9wY3JfcmVhZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIGludCBwY3JfaWR4LCB1OCAqcmVzX2J1ZikKK3sKKwlpbnQgcmM7CisJc3RydWN0IHRwbTJfY21kIGNtZDsKKwl1OCAqYnVmOworCisJaWYgKHBjcl9pZHggPj0gVFBNMl9QTEFURk9STV9QQ1IpCisJCXJldHVybiAtRUlOVkFMOworCisJY21kLmhlYWRlci5pbiA9IHRwbTJfcGNycmVhZF9oZWFkZXI7CisJY21kLnBhcmFtcy5wY3JyZWFkX2luLnBjcl9zZWxlY3RzX2NudCA9IGNwdV90b19iZTMyKDEpOworCWNtZC5wYXJhbXMucGNycmVhZF9pbi5oYXNoX2FsZyA9IGNwdV90b19iZTE2KFRQTTJfQUxHX1NIQTEpOworCWNtZC5wYXJhbXMucGNycmVhZF9pbi5wY3Jfc2VsZWN0X3NpemUgPSBUUE0yX1BDUl9TRUxFQ1RfTUlOOworCisJbWVtc2V0KGNtZC5wYXJhbXMucGNycmVhZF9pbi5wY3Jfc2VsZWN0LCAwLAorCSAgICAgICBzaXplb2YoY21kLnBhcmFtcy5wY3JyZWFkX2luLnBjcl9zZWxlY3QpKTsKKwljbWQucGFyYW1zLnBjcnJlYWRfaW4ucGNyX3NlbGVjdFtwY3JfaWR4ID4+IDNdID0gMSA8PCAocGNyX2lkeCAmIDB4Nyk7CisKKwlyYyA9IHRwbV90cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgc2l6ZW9mKGNtZCksCisJCQkgICAgICAiYXR0ZW1wdGluZyB0byByZWFkIGEgcGNyIHZhbHVlIik7CisJaWYgKHJjID09IDApIHsKKwkJYnVmID0gY21kLnBhcmFtcy5wY3JyZWFkX291dC5kaWdlc3Q7CisJCW1lbWNweShyZXNfYnVmLCBidWYsIFRQTV9ESUdFU1RfU0laRSk7CisJfQorCisJcmV0dXJuIHJjOworfQorCisjZGVmaW5lIFRQTTJfR0VUX1BDUkVYVEVORF9JTl9TSVpFIFwKKwkoc2l6ZW9mKHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyKSArIFwKKwkgc2l6ZW9mKHN0cnVjdCB0cG0yX3Bjcl9leHRlbmRfaW4pKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgdHBtMl9wY3JleHRlbmRfaGVhZGVyID0geworCS50YWcgPSBjcHVfdG9fYmUxNihUUE0yX1NUX1NFU1NJT05TKSwKKwkubGVuZ3RoID0gY3B1X3RvX2JlMzIoVFBNMl9HRVRfUENSRVhURU5EX0lOX1NJWkUpLAorCS5vcmRpbmFsID0gY3B1X3RvX2JlMzIoVFBNMl9DQ19QQ1JfRVhURU5EKQorfTsKKworLyoqCisgKiB0cG0yX3Bjcl9leHRlbmQoKSAtIGV4dGVuZCBhIFBDUiB2YWx1ZQorICogQGNoaXA6CVRQTSBjaGlwIHRvIHVzZS4KKyAqIEBwY3JfaWR4OglpbmRleCBvZiB0aGUgUENSLgorICogQGhhc2g6CWhhc2ggdmFsdWUgdG8gdXNlIGZvciB0aGUgZXh0ZW5kIG9wZXJhdGlvbi4KKyAqCisgKiAwIGlzIHJldHVybmVkIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLiBJZiBhIG5lZ2F0aXZlIG51bWJlciBpcworICogcmV0dXJuZWQgaXQgcmVtYXJrcyBhIFBPU0lYIGVycm9yIGNvZGUuIElmIGEgcG9zaXRpdmUgbnVtYmVyIGlzIHJldHVybmVkCisgKiBpdCByZW1hcmtzIGEgVFBNIGVycm9yLgorICovCitpbnQgdHBtMl9wY3JfZXh0ZW5kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgaW50IHBjcl9pZHgsIGNvbnN0IHU4ICpoYXNoKQoreworCXN0cnVjdCB0cG0yX2NtZCBjbWQ7CisJaW50IHJjOworCisJY21kLmhlYWRlci5pbiA9IHRwbTJfcGNyZXh0ZW5kX2hlYWRlcjsKKwljbWQucGFyYW1zLnBjcmV4dGVuZF9pbi5wY3JfaWR4ID0gY3B1X3RvX2JlMzIocGNyX2lkeCk7CisJY21kLnBhcmFtcy5wY3JleHRlbmRfaW4uYXV0aF9hcmVhX3NpemUgPQorCQljcHVfdG9fYmUzMihzaXplb2Yoc3RydWN0IHRwbTJfbnVsbF9hdXRoX2FyZWEpKTsKKwljbWQucGFyYW1zLnBjcmV4dGVuZF9pbi5hdXRoX2FyZWEuaGFuZGxlID0KKwkJY3B1X3RvX2JlMzIoVFBNMl9SU19QVyk7CisJY21kLnBhcmFtcy5wY3JleHRlbmRfaW4uYXV0aF9hcmVhLm5vbmNlX3NpemUgPSAwOworCWNtZC5wYXJhbXMucGNyZXh0ZW5kX2luLmF1dGhfYXJlYS5hdHRyaWJ1dGVzID0gMDsKKwljbWQucGFyYW1zLnBjcmV4dGVuZF9pbi5hdXRoX2FyZWEuYXV0aF9zaXplID0gMDsKKwljbWQucGFyYW1zLnBjcmV4dGVuZF9pbi5kaWdlc3RfY250ID0gY3B1X3RvX2JlMzIoMSk7CisJY21kLnBhcmFtcy5wY3JleHRlbmRfaW4uaGFzaF9hbGcgPSBjcHVfdG9fYmUxNihUUE0yX0FMR19TSEExKTsKKwltZW1jcHkoY21kLnBhcmFtcy5wY3JleHRlbmRfaW4uZGlnZXN0LCBoYXNoLCBUUE1fRElHRVNUX1NJWkUpOworCisJcmMgPSB0cG1fdHJhbnNtaXRfY21kKGNoaXAsICZjbWQsIHNpemVvZihjbWQpLAorCQkJICAgICAgImF0dGVtcHRpbmcgZXh0ZW5kIGEgUENSIHZhbHVlIik7CisKKwlyZXR1cm4gcmM7Cit9CisKKyNkZWZpbmUgVFBNMl9HRVRSQU5ET01fSU5fU0laRSBcCisJKHNpemVvZihzdHJ1Y3QgdHBtX2lucHV0X2hlYWRlcikgKyBcCisJIHNpemVvZihzdHJ1Y3QgdHBtMl9nZXRfcmFuZG9tX2luKSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyIHRwbTJfZ2V0cmFuZG9tX2hlYWRlciA9IHsKKwkudGFnID0gY3B1X3RvX2JlMTYoVFBNMl9TVF9OT19TRVNTSU9OUyksCisJLmxlbmd0aCA9IGNwdV90b19iZTMyKFRQTTJfR0VUUkFORE9NX0lOX1NJWkUpLAorCS5vcmRpbmFsID0gY3B1X3RvX2JlMzIoVFBNMl9DQ19HRVRfUkFORE9NKQorfTsKKworLyoqCisgKiB0cG0yX2dldF9yYW5kb20oKSAtIGdldCByYW5kb20gYnl0ZXMgZnJvbSB0aGUgVFBNIFJORworICogQGNoaXA6IFRQTSBjaGlwIHRvIHVzZQorICogQG91dDogZGVzdGluYXRpb24gYnVmZmVyIGZvciB0aGUgcmFuZG9tIGJ5dGVzCisgKiBAbWF4OiB0aGUgbWF4IG51bWJlciBvZiBieXRlcyB0byB3cml0ZSB0byBAb3V0CisgKgorICogMCBpcyByZXR1cm5lZCB3aGVuIHRoZSBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bC4gSWYgYSBuZWdhdGl2ZSBudW1iZXIgaXMKKyAqIHJldHVybmVkIGl0IHJlbWFya3MgYSBQT1NJWCBlcnJvciBjb2RlLiBJZiBhIHBvc2l0aXZlIG51bWJlciBpcyByZXR1cm5lZAorICogaXQgcmVtYXJrcyBhIFRQTSBlcnJvci4KKyAqLworaW50IHRwbTJfZ2V0X3JhbmRvbShzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4ICpvdXQsIHNpemVfdCBtYXgpCit7CisJc3RydWN0IHRwbTJfY21kIGNtZDsKKwl1MzIgcmVjZDsKKwl1MzIgbnVtX2J5dGVzOworCWludCBlcnI7CisJaW50IHRvdGFsID0gMDsKKwlpbnQgcmV0cmllcyA9IDU7CisJdTggKmRlc3QgPSBvdXQ7CisKKwludW1fYnl0ZXMgPSBtaW5fdCh1MzIsIG1heCwgc2l6ZW9mKGNtZC5wYXJhbXMuZ2V0cmFuZG9tX291dC5idWZmZXIpKTsKKworCWlmICghb3V0IHx8ICFudW1fYnl0ZXMgfHwKKwkgICAgbWF4ID4gc2l6ZW9mKGNtZC5wYXJhbXMuZ2V0cmFuZG9tX291dC5idWZmZXIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRvIHsKKwkJY21kLmhlYWRlci5pbiA9IHRwbTJfZ2V0cmFuZG9tX2hlYWRlcjsKKwkJY21kLnBhcmFtcy5nZXRyYW5kb21faW4uc2l6ZSA9IGNwdV90b19iZTE2KG51bV9ieXRlcyk7CisKKwkJZXJyID0gdHBtX3RyYW5zbWl0X2NtZChjaGlwLCAmY21kLCBzaXplb2YoY21kKSwKKwkJCQkgICAgICAgImF0dGVtcHRpbmcgZ2V0IHJhbmRvbSIpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisKKwkJcmVjZCA9IG1pbl90KHUzMiwgYmUxNl90b19jcHUoY21kLnBhcmFtcy5nZXRyYW5kb21fb3V0LnNpemUpLAorCQkJICAgICBudW1fYnl0ZXMpOworCQltZW1jcHkoZGVzdCwgY21kLnBhcmFtcy5nZXRyYW5kb21fb3V0LmJ1ZmZlciwgcmVjZCk7CisKKwkJZGVzdCArPSByZWNkOworCQl0b3RhbCArPSByZWNkOworCQludW1fYnl0ZXMgLT0gcmVjZDsKKwl9IHdoaWxlIChyZXRyaWVzLS0gJiYgdG90YWwgPCBtYXgpOworCisJcmV0dXJuIHRvdGFsID8gdG90YWwgOiAtRUlPOworfQorCisjZGVmaW5lIFRQTTJfR0VUX1RQTV9QVF9JTl9TSVpFIFwKKwkoc2l6ZW9mKHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyKSArIFwKKwkgc2l6ZW9mKHN0cnVjdCB0cG0yX2dldF90cG1fcHRfaW4pKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgdHBtMl9nZXRfdHBtX3B0X2hlYWRlciA9IHsKKwkudGFnID0gY3B1X3RvX2JlMTYoVFBNMl9TVF9OT19TRVNTSU9OUyksCisJLmxlbmd0aCA9IGNwdV90b19iZTMyKFRQTTJfR0VUX1RQTV9QVF9JTl9TSVpFKSwKKwkub3JkaW5hbCA9IGNwdV90b19iZTMyKFRQTTJfQ0NfR0VUX0NBUEFCSUxJVFkpCit9OworCisvKioKKyAqIHRwbTJfZ2V0X3RwbV9wdCgpIC0gZ2V0IHZhbHVlIG9mIGEgVFBNX0NBUF9UUE1fUFJPUEVSVElFUyB0eXBlIHByb3BlcnR5CisgKiBAY2hpcDoJCVRQTSBjaGlwIHRvIHVzZS4KKyAqIEBwcm9wZXJ0eV9pZDoJcHJvcGVydHkgSUQuCisgKiBAdmFsdWU6CQlvdXRwdXQgdmFyaWFibGUuCisgKiBAZGVzYzoJCXBhc3NlZCB0byB0cG1fdHJhbnNtaXRfY21kKCkKKyAqCisgKiAwIGlzIHJldHVybmVkIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLiBJZiBhIG5lZ2F0aXZlIG51bWJlciBpcworICogcmV0dXJuZWQgaXQgcmVtYXJrcyBhIFBPU0lYIGVycm9yIGNvZGUuIElmIGEgcG9zaXRpdmUgbnVtYmVyIGlzIHJldHVybmVkCisgKiBpdCByZW1hcmtzIGEgVFBNIGVycm9yLgorICovCitzc2l6ZV90IHRwbTJfZ2V0X3RwbV9wdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHUzMiBwcm9wZXJ0eV9pZCwgIHUzMiAqdmFsdWUsCisJCQljb25zdCBjaGFyICpkZXNjKQoreworCXN0cnVjdCB0cG0yX2NtZCBjbWQ7CisJaW50IHJjOworCisJY21kLmhlYWRlci5pbiA9IHRwbTJfZ2V0X3RwbV9wdF9oZWFkZXI7CisJY21kLnBhcmFtcy5nZXRfdHBtX3B0X2luLmNhcF9pZCA9IGNwdV90b19iZTMyKFRQTTJfQ0FQX1RQTV9QUk9QRVJUSUVTKTsKKwljbWQucGFyYW1zLmdldF90cG1fcHRfaW4ucHJvcGVydHlfaWQgPSBjcHVfdG9fYmUzMihwcm9wZXJ0eV9pZCk7CisJY21kLnBhcmFtcy5nZXRfdHBtX3B0X2luLnByb3BlcnR5X2NudCA9IGNwdV90b19iZTMyKDEpOworCisJcmMgPSB0cG1fdHJhbnNtaXRfY21kKGNoaXAsICZjbWQsIHNpemVvZihjbWQpLCBkZXNjKTsKKwlpZiAoIXJjKQorCQkqdmFsdWUgPSBjbWQucGFyYW1zLmdldF90cG1fcHRfb3V0LnZhbHVlOworCisJcmV0dXJuIHJjOworfQorCisjZGVmaW5lIFRQTTJfU1RBUlRVUF9JTl9TSVpFIFwKKwkoc2l6ZW9mKHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyKSArIFwKKwkgc2l6ZW9mKHN0cnVjdCB0cG0yX3N0YXJ0dXBfaW4pKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRwbV9pbnB1dF9oZWFkZXIgdHBtMl9zdGFydHVwX2hlYWRlciA9IHsKKwkudGFnID0gY3B1X3RvX2JlMTYoVFBNMl9TVF9OT19TRVNTSU9OUyksCisJLmxlbmd0aCA9IGNwdV90b19iZTMyKFRQTTJfU1RBUlRVUF9JTl9TSVpFKSwKKwkub3JkaW5hbCA9IGNwdV90b19iZTMyKFRQTTJfQ0NfU1RBUlRVUCkKK307CisKKy8qKgorICogdHBtMl9zdGFydHVwKCkgLSBzZW5kIHN0YXJ0dXAgY29tbWFuZCB0byB0aGUgVFBNIGNoaXAKKyAqIEBjaGlwOgkJVFBNIGNoaXAgdG8gdXNlLgorICogQHN0YXJ0dXBfdHlwZQlzdGFydHVwIHR5cGUuIFRoZSB2YWx1ZSBpcyBlaXRoZXIKKyAqCQkJVFBNX1NVX0NMRUFSIG9yIFRQTV9TVV9TVEFURS4KKyAqCisgKiAwIGlzIHJldHVybmVkIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLiBJZiBhIG5lZ2F0aXZlIG51bWJlciBpcworICogcmV0dXJuZWQgaXQgcmVtYXJrcyBhIFBPU0lYIGVycm9yIGNvZGUuIElmIGEgcG9zaXRpdmUgbnVtYmVyIGlzIHJldHVybmVkCisgKiBpdCByZW1hcmtzIGEgVFBNIGVycm9yLgorICovCitpbnQgdHBtMl9zdGFydHVwKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTE2IHN0YXJ0dXBfdHlwZSkKK3sKKwlzdHJ1Y3QgdHBtMl9jbWQgY21kOworCisJY21kLmhlYWRlci5pbiA9IHRwbTJfc3RhcnR1cF9oZWFkZXI7CisKKwljbWQucGFyYW1zLnN0YXJ0dXBfaW4uc3RhcnR1cF90eXBlID0gY3B1X3RvX2JlMTYoc3RhcnR1cF90eXBlKTsKKwlyZXR1cm4gdHBtX3RyYW5zbWl0X2NtZChjaGlwLCAmY21kLCBzaXplb2YoY21kKSwKKwkJCQkiYXR0ZW1wdGluZyB0byBzdGFydCB0aGUgVFBNIik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0cG0yX3N0YXJ0dXApOworCisjZGVmaW5lIFRQTTJfU0hVVERPV05fSU5fU0laRSBcCisJKHNpemVvZihzdHJ1Y3QgdHBtX2lucHV0X2hlYWRlcikgKyBcCisJIHNpemVvZihzdHJ1Y3QgdHBtMl9zdGFydHVwX2luKSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyIHRwbTJfc2h1dGRvd25faGVhZGVyID0geworCS50YWcgPSBjcHVfdG9fYmUxNihUUE0yX1NUX05PX1NFU1NJT05TKSwKKwkubGVuZ3RoID0gY3B1X3RvX2JlMzIoVFBNMl9TSFVURE9XTl9JTl9TSVpFKSwKKwkub3JkaW5hbCA9IGNwdV90b19iZTMyKFRQTTJfQ0NfU0hVVERPV04pCit9OworCisvKioKKyAqIHRwbTJfc2h1dGRvd24oKSAtIHNlbmQgc2h1dGRvd24gY29tbWFuZCB0byB0aGUgVFBNIGNoaXAKKyAqIEBjaGlwOgkJVFBNIGNoaXAgdG8gdXNlLgorICogQHNodXRkb3duX3R5cGUJc2h1dGRvd24gdHlwZS4gVGhlIHZhbHVlIGlzIGVpdGhlcgorICoJCQlUUE1fU1VfQ0xFQVIgb3IgVFBNX1NVX1NUQVRFLgorICoKKyAqIDAgaXMgcmV0dXJuZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwuIElmIGEgbmVnYXRpdmUgbnVtYmVyIGlzCisgKiByZXR1cm5lZCBpdCByZW1hcmtzIGEgUE9TSVggZXJyb3IgY29kZS4gSWYgYSBwb3NpdGl2ZSBudW1iZXIgaXMgcmV0dXJuZWQKKyAqIGl0IHJlbWFya3MgYSBUUE0gZXJyb3IuCisgKi8KK2ludCB0cG0yX3NodXRkb3duKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTE2IHNodXRkb3duX3R5cGUpCit7CisJc3RydWN0IHRwbTJfY21kIGNtZDsKKworCWNtZC5oZWFkZXIuaW4gPSB0cG0yX3NodXRkb3duX2hlYWRlcjsKKworCWNtZC5wYXJhbXMuc3RhcnR1cF9pbi5zdGFydHVwX3R5cGUgPSBjcHVfdG9fYmUxNihzaHV0ZG93bl90eXBlKTsKKwlyZXR1cm4gdHBtX3RyYW5zbWl0X2NtZChjaGlwLCAmY21kLCBzaXplb2YoY21kKSwKKwkJCQkic3RvcHBpbmcgdGhlIFRQTSIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHBtMl9zaHV0ZG93bik7CisKKy8qCisgKiB0cG0yX2NhbGNfb3JkaW5hbF9kdXJhdGlvbigpIC0gbWF4aW11bSBkdXJhdGlvbiBmb3IgYSBjb21tYW5kCisgKiBAY2hpcDoJVFBNIGNoaXAgdG8gdXNlLgorICogQG9yZGluYWw6CWNvbW1hbmQgY29kZSBudW1iZXIuCisgKgorICogMCBpcyByZXR1cm5lZCB3aGVuIHRoZSBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bC4gSWYgYSBuZWdhdGl2ZSBudW1iZXIgaXMKKyAqIHJldHVybmVkIGl0IHJlbWFya3MgYSBQT1NJWCBlcnJvciBjb2RlLiBJZiBhIHBvc2l0aXZlIG51bWJlciBpcyByZXR1cm5lZAorICogaXQgcmVtYXJrcyBhIFRQTSBlcnJvci4KKyAqLwordW5zaWduZWQgbG9uZyB0cG0yX2NhbGNfb3JkaW5hbF9kdXJhdGlvbihzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHUzMiBvcmRpbmFsKQoreworCWludCBpbmRleCA9IFRQTV9VTkRFRklORUQ7CisJaW50IGR1cmF0aW9uID0gMDsKKworCWlmIChvcmRpbmFsID49IFRQTTJfQ0NfRklSU1QgJiYgb3JkaW5hbCA8PSBUUE0yX0NDX0xBU1QpCisJCWluZGV4ID0gdHBtMl9vcmRpbmFsX2R1cmF0aW9uW29yZGluYWwgLSBUUE0yX0NDX0ZJUlNUXTsKKworCWlmIChpbmRleCAhPSBUUE1fVU5ERUZJTkVEKQorCQlkdXJhdGlvbiA9IGNoaXAtPnZlbmRvci5kdXJhdGlvbltpbmRleF07CisKKwlpZiAoZHVyYXRpb24gPD0gMCkKKwkJZHVyYXRpb24gPSAyICogNjAgKiBIWjsKKworCXJldHVybiBkdXJhdGlvbjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbTJfY2FsY19vcmRpbmFsX2R1cmF0aW9uKTsKKworI2RlZmluZSBUUE0yX1NFTEZfVEVTVF9JTl9TSVpFIFwKKwkoc2l6ZW9mKHN0cnVjdCB0cG1faW5wdXRfaGVhZGVyKSArIFwKKwkgc2l6ZW9mKHN0cnVjdCB0cG0yX3NlbGZfdGVzdF9pbikpCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHBtX2lucHV0X2hlYWRlciB0cG0yX3NlbGZ0ZXN0X2hlYWRlciA9IHsKKwkudGFnID0gY3B1X3RvX2JlMTYoVFBNMl9TVF9OT19TRVNTSU9OUyksCisJLmxlbmd0aCA9IGNwdV90b19iZTMyKFRQTTJfU0VMRl9URVNUX0lOX1NJWkUpLAorCS5vcmRpbmFsID0gY3B1X3RvX2JlMzIoVFBNMl9DQ19TRUxGX1RFU1QpCit9OworCisvKioKKyAqIHRwbTJfY29udGludWVfc2VsZnRlc3QoKSAtIHN0YXJ0IGEgc2VsZiB0ZXN0CisgKiBAY2hpcDogVFBNIGNoaXAgdG8gdXNlCisgKiBAZnVsbDogdGVzdCBhbGwgY29tbWFuZHMgaW5zdGVhZCBvZiB0ZXN0aW5nIG9ubHkgdGhvc2UgdGhhdCB3ZXJlIG5vdAorICogICAgICAgIHByZXZpb3VzbHkgdGVzdGVkLgorICoKKyAqIDAgaXMgcmV0dXJuZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGlzIHN1Y2Nlc3NmdWwuIElmIGEgbmVnYXRpdmUgbnVtYmVyIGlzCisgKiByZXR1cm5lZCBpdCByZW1hcmtzIGEgUE9TSVggZXJyb3IgY29kZS4gSWYgYSBwb3NpdGl2ZSBudW1iZXIgaXMgcmV0dXJuZWQKKyAqIGl0IHJlbWFya3MgYSBUUE0gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgdHBtMl9zdGFydF9zZWxmdGVzdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIGJvb2wgZnVsbCkKK3sKKwlpbnQgcmM7CisJc3RydWN0IHRwbTJfY21kIGNtZDsKKworCWNtZC5oZWFkZXIuaW4gPSB0cG0yX3NlbGZ0ZXN0X2hlYWRlcjsKKwljbWQucGFyYW1zLnNlbGZ0ZXN0X2luLmZ1bGxfdGVzdCA9IGZ1bGw7CisKKwlyYyA9IHRwbV90cmFuc21pdF9jbWQoY2hpcCwgJmNtZCwgVFBNMl9TRUxGX1RFU1RfSU5fU0laRSwKKwkJCSAgICAgICJjb250aW51ZSBzZWxmdGVzdCIpOworCisJLyogQXQgbGVhc3Qgc29tZSBwcm90b3R5cGUgY2hpcHMgc2VlbSB0byBnaXZlIFJDX1RFU1RJTkcgZXJyb3IKKwkgKiBpbW1lZGlhdGVseS4gVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHRoYXQuCisJICovCisJaWYgKHJjID09IFRQTTJfUkNfVEVTVElORykgeworCQlkZXZfd2FybihjaGlwLT5wZGV2LCAiR290IFJDX1RFU1RJTkcsIGlnbm9yaW5nXG4iKTsKKwkJcmMgPSAwOworCX0KKworCXJldHVybiByYzsKK30KKworLyoqCisgKiB0cG0yX2RvX3NlbGZ0ZXN0KCkgLSBydW4gYSBmdWxsIHNlbGYgdGVzdAorICogQGNoaXA6IFRQTSBjaGlwIHRvIHVzZQorICoKKyAqIER1cmluZyB0aGUgc2VsZiB0ZXN0IFRQTTIgY29tbWFuZHMgcmV0dXJuIHdpdGggdGhlIGVycm9yIGNvZGUgUkNfVEVTVElORy4KKyAqIFdhaXRpbmcgaXMgZG9uZSBieSBpc3N1aW5nIFBDUiByZWFkIHVudGlsIGl0IGV4ZWN1dGVzIHN1Y2Nlc3NmdWxseS4KKyAqCisgKiAwIGlzIHJldHVybmVkIHdoZW4gdGhlIG9wZXJhdGlvbiBpcyBzdWNjZXNzZnVsLiBJZiBhIG5lZ2F0aXZlIG51bWJlciBpcworICogcmV0dXJuZWQgaXQgcmVtYXJrcyBhIFBPU0lYIGVycm9yIGNvZGUuIElmIGEgcG9zaXRpdmUgbnVtYmVyIGlzIHJldHVybmVkCisgKiBpdCByZW1hcmtzIGEgVFBNIGVycm9yLgorICovCitpbnQgdHBtMl9kb19zZWxmdGVzdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCit7CisJaW50IHJjOworCXVuc2lnbmVkIGludCBsb29wczsKKwl1bnNpZ25lZCBpbnQgZGVsYXlfbXNlYyA9IDEwMDsKKwl1bnNpZ25lZCBsb25nIGR1cmF0aW9uOworCXN0cnVjdCB0cG0yX2NtZCBjbWQ7CisJaW50IGk7CisKKwlkdXJhdGlvbiA9IHRwbTJfY2FsY19vcmRpbmFsX2R1cmF0aW9uKGNoaXAsIFRQTTJfQ0NfU0VMRl9URVNUKTsKKworCWxvb3BzID0gamlmZmllc190b19tc2VjcyhkdXJhdGlvbikgLyBkZWxheV9tc2VjOworCisJcmMgPSB0cG0yX3N0YXJ0X3NlbGZ0ZXN0KGNoaXAsIHRydWUpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJZm9yIChpID0gMDsgaSA8IGxvb3BzOyBpKyspIHsKKwkJLyogQXR0ZW1wdCB0byByZWFkIGEgUENSIHZhbHVlICovCisJCWNtZC5oZWFkZXIuaW4gPSB0cG0yX3BjcnJlYWRfaGVhZGVyOworCQljbWQucGFyYW1zLnBjcnJlYWRfaW4ucGNyX3NlbGVjdHNfY250ID0gY3B1X3RvX2JlMzIoMSk7CisJCWNtZC5wYXJhbXMucGNycmVhZF9pbi5oYXNoX2FsZyA9IGNwdV90b19iZTE2KFRQTTJfQUxHX1NIQTEpOworCQljbWQucGFyYW1zLnBjcnJlYWRfaW4ucGNyX3NlbGVjdF9zaXplID0gVFBNMl9QQ1JfU0VMRUNUX01JTjsKKwkJY21kLnBhcmFtcy5wY3JyZWFkX2luLnBjcl9zZWxlY3RbMF0gPSAweDAxOworCQljbWQucGFyYW1zLnBjcnJlYWRfaW4ucGNyX3NlbGVjdFsxXSA9IDB4MDA7CisJCWNtZC5wYXJhbXMucGNycmVhZF9pbi5wY3Jfc2VsZWN0WzJdID0gMHgwMDsKKworCQlyYyA9IHRwbV90cmFuc21pdF9jbWQoY2hpcCwgKHU4ICopICZjbWQsIHNpemVvZihjbWQpLCBOVUxMKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWJyZWFrOworCisJCXJjID0gYmUzMl90b19jcHUoY21kLmhlYWRlci5vdXQucmV0dXJuX2NvZGUpOworCQlpZiAocmMgIT0gVFBNMl9SQ19URVNUSU5HKQorCQkJYnJlYWs7CisKKwkJbXNsZWVwKGRlbGF5X21zZWMpOworCX0KKworCXJldHVybiByYzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRwbTJfZG9fc2VsZnRlc3QpOworCisvKioKKyAqIHRwbTJfZ2VuX2ludGVycnVwdCgpIC0gZ2VuZXJhdGUgYW4gaW50ZXJydXB0CisgKiBAY2hpcDogVFBNIGNoaXAgdG8gdXNlCisgKiBAcXVpZXQ6IHN1cnByZXNzIHRoZSBlcnJvciBtZXNzYWdlCisgKgorICogMCBpcyByZXR1cm5lZCB3aGVuIHRoZSBvcGVyYXRpb24gaXMgc3VjY2Vzc2Z1bC4gSWYgYSBuZWdhdGl2ZSBudW1iZXIgaXMKKyAqIHJldHVybmVkIGl0IHJlbWFya3MgYSBQT1NJWCBlcnJvciBjb2RlLiBJZiBhIHBvc2l0aXZlIG51bWJlciBpcyByZXR1cm5lZAorICogaXQgcmVtYXJrcyBhIFRQTSBlcnJvci4KKyAqLworaW50IHRwbTJfZ2VuX2ludGVycnVwdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIGJvb2wgcXVpZXQpCit7CisJY29uc3QgY2hhciAqZGVzYyA9IE5VTEw7CisJdTMyIGR1bW15OworCisJaWYgKCFxdWlldCkKKwkJZGVzYyA9ICJhdHRlbXB0aW5nIHRvIGdlbmVyYXRlIGFuIGludGVycnVwdCI7CisKKwlyZXR1cm4gdHBtMl9nZXRfdHBtX3B0KGNoaXAsIFRQTTJfQ0FQX1RQTV9QUk9QRVJUSUVTLCAmZHVtbXksIGRlc2MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodHBtMl9nZW5faW50ZXJydXB0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5jCmluZGV4IDQzNWM4YjkuLmRmYWRhZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuYwpAQCAtNDksNyArNDksNyBAQAogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKIAkJc3RhdHVzID0gaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsgMSk7CiAJCWlmICgoc3RhdHVzICYgQVRNTF9TVEFUVVNfREFUQV9BVkFJTCkgPT0gMCkgewotCQkJZGV2X2VycihjaGlwLT5kZXYsICJlcnJvciByZWFkaW5nIGhlYWRlclxuIik7CisJCQlkZXZfZXJyKGNoaXAtPnBkZXYsICJlcnJvciByZWFkaW5nIGhlYWRlclxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCQkqYnVmKysgPSBpb3JlYWQ4KGNoaXAtPnZlbmRvci5pb2Jhc2UpOwpAQCAtNjAsMTIgKzYwLDEyIEBACiAJc2l6ZSA9IGJlMzJfdG9fY3B1KCpuYXRpdmVfc2l6ZSk7CiAKIAlpZiAoY291bnQgPCBzaXplKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LAorCQlkZXZfZXJyKGNoaXAtPnBkZXYsCiAJCQkiUmVjdiBzaXplKCVkKSBsZXNzIHRoYW4gYXZhaWxhYmxlIHNwYWNlXG4iLCBzaXplKTsKIAkJZm9yICg7IGkgPCBzaXplOyBpKyspIHsJLyogY2xlYXIgdGhlIHdhaXRpbmcgZGF0YSBhbnl3YXkgKi8KIAkJCXN0YXR1cyA9IGlvcmVhZDgoY2hpcC0+dmVuZG9yLmlvYmFzZSArIDEpOwogCQkJaWYgKChzdGF0dXMgJiBBVE1MX1NUQVRVU19EQVRBX0FWQUlMKSA9PSAwKSB7Ci0JCQkJZGV2X2VycihjaGlwLT5kZXYsICJlcnJvciByZWFkaW5nIGRhdGFcbiIpOworCQkJCWRldl9lcnIoY2hpcC0+cGRldiwgImVycm9yIHJlYWRpbmcgZGF0YVxuIik7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CiAJCX0KQEAgLTc2LDcgKzc2LDcgQEAKIAlmb3IgKDsgaSA8IHNpemU7IGkrKykgewogCQlzdGF0dXMgPSBpb3JlYWQ4KGNoaXAtPnZlbmRvci5pb2Jhc2UgKyAxKTsKIAkJaWYgKChzdGF0dXMgJiBBVE1MX1NUQVRVU19EQVRBX0FWQUlMKSA9PSAwKSB7Ci0JCQlkZXZfZXJyKGNoaXAtPmRldiwgImVycm9yIHJlYWRpbmcgZGF0YVxuIik7CisJCQlkZXZfZXJyKGNoaXAtPnBkZXYsICJlcnJvciByZWFkaW5nIGRhdGFcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAkJKmJ1ZisrID0gaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlKTsKQEAgLTg2LDcgKzg2LDcgQEAKIAlzdGF0dXMgPSBpb3JlYWQ4KGNoaXAtPnZlbmRvci5pb2Jhc2UgKyAxKTsKIAogCWlmIChzdGF0dXMgJiBBVE1MX1NUQVRVU19EQVRBX0FWQUlMKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiZGF0YSBhdmFpbGFibGUgaXMgc3R1Y2tcbiIpOworCQlkZXZfZXJyKGNoaXAtPnBkZXYsICJkYXRhIGF2YWlsYWJsZSBpcyBzdHVja1xuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtOTcsOSArOTcsOSBAQAogewogCWludCBpOwogCi0JZGV2X2RiZyhjaGlwLT5kZXYsICJ0cG1fYXRtbF9zZW5kOlxuIik7CisJZGV2X2RiZyhjaGlwLT5wZGV2LCAidHBtX2F0bWxfc2VuZDpcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCWRldl9kYmcoY2hpcC0+ZGV2LCAiJWQgMHgleCglZClcbiIsICBpLCBidWZbaV0sIGJ1ZltpXSk7CisJCWRldl9kYmcoY2hpcC0+cGRldiwgIiVkIDB4JXgoJWQpXG4iLCAgaSwgYnVmW2ldLCBidWZbaV0pOwogIAkJaW93cml0ZTgoYnVmW2ldLCBjaGlwLT52ZW5kb3IuaW9iYXNlKTsKIAl9CiAKQEAgLTEzOCwxMSArMTM4LDExIEBACiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwogCiAJaWYgKGNoaXApIHsKKwkJdHBtX2NoaXBfdW5yZWdpc3RlcihjaGlwKTsKIAkJaWYgKGNoaXAtPnZlbmRvci5oYXZlX3JlZ2lvbikKIAkJCWF0bWVsX3JlbGVhc2VfcmVnaW9uKGNoaXAtPnZlbmRvci5iYXNlLAogCQkJCQkgICAgIGNoaXAtPnZlbmRvci5yZWdpb25fc2l6ZSk7CiAJCWF0bWVsX3B1dF9iYXNlX2FkZHIoY2hpcC0+dmVuZG9yLmlvYmFzZSk7Ci0JCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKIAkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CiAJfQogfQpAQCAtMTgzLDggKzE4Myw5IEBACiAJCWdvdG8gZXJyX3JlbF9yZWc7CiAJfQogCi0JaWYgKCEoY2hpcCA9IHRwbV9yZWdpc3Rlcl9oYXJkd2FyZSgmcGRldi0+ZGV2LCAmdHBtX2F0bWVsKSkpIHsKLQkJcmMgPSAtRU5PREVWOworCWNoaXAgPSB0cG1tX2NoaXBfYWxsb2MoJnBkZXYtPmRldiwgJnRwbV9hdG1lbCk7CisJaWYgKElTX0VSUihjaGlwKSkgeworCQlyYyA9IFBUUl9FUlIoY2hpcCk7CiAJCWdvdG8gZXJyX3VucmVnX2RldjsKIAl9CiAKQEAgLTE5Myw2ICsxOTQsMTAgQEAKIAljaGlwLT52ZW5kb3IuaGF2ZV9yZWdpb24gPSBoYXZlX3JlZ2lvbjsKIAljaGlwLT52ZW5kb3IucmVnaW9uX3NpemUgPSByZWdpb25fc2l6ZTsKIAorCXJjID0gdHBtX2NoaXBfcmVnaXN0ZXIoY2hpcCk7CisJaWYgKHJjKQorCQlnb3RvIGVycl91bnJlZ19kZXY7CisKIAlyZXR1cm4gMDsKIAogZXJyX3VucmVnX2RldjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2NyYi5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fY3JiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RkMjNjZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2NyYi5jCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisgKgorICogQXV0aG9yczoKKyAqIEphcmtrbyBTYWtraW5lbiA8amFya2tvLnNha2tpbmVuQGxpbnV4LmludGVsLmNvbT4KKyAqCisgKiBNYWludGFpbmVkIGJ5OiA8dHBtZGQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICoKKyAqIFRoaXMgZGV2aWNlIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBUUE0gaW50ZXJmYWNlIGFzIGRlZmluZWQgaW4KKyAqIHRoZSBUQ0cgQ1JCIDIuMCBUUE0gc3BlY2lmaWNhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgInRwbS5oIgorCisjZGVmaW5lIEFDUElfU0lHX1RQTTIgIlRQTTIiCisKK3N0YXRpYyBjb25zdCB1OCBDUkJfQUNQSV9TVEFSVF9VVUlEW10gPSB7CisJLyogMDAwMCAqLyAweEFCLCAweDZDLCAweEJGLCAweDZCLCAweDYzLCAweDU0LCAweDE0LCAweDQ3LAorCS8qIDAwMDggKi8gMHhCNywgMHhDRCwgMHhGMCwgMHgyMCwgMHgzQywgMHgwMywgMHg2OCwgMHhENAorfTsKKworZW51bSBjcmJfZGVmYXVsdHMgeworCUNSQl9BQ1BJX1NUQVJUX1JFVklTSU9OX0lEID0gMSwKKwlDUkJfQUNQSV9TVEFSVF9JTkRFWCA9IDEsCit9OworCitlbnVtIGNyYl9zdGFydF9tZXRob2QgeworCUNSQl9TTV9BQ1BJX1NUQVJUID0gMiwKKwlDUkJfU01fQ1JCID0gNywKKwlDUkJfU01fQ1JCX1dJVEhfQUNQSV9TVEFSVCA9IDgsCit9OworCitzdHJ1Y3QgYWNwaV90cG0yIHsKKwlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgaGRyOworCXUxNiBwbGF0Zm9ybV9jbGFzczsKKwl1MTYgcmVzZXJ2ZWQ7CisJdTY0IGNvbnRyb2xfYXJlYV9wYTsKKwl1MzIgc3RhcnRfbWV0aG9kOworfSBfX3BhY2tlZDsKKworZW51bSBjcmJfY2FfcmVxdWVzdCB7CisJQ1JCX0NBX1JFUV9HT19JRExFCT0gQklUKDApLAorCUNSQl9DQV9SRVFfQ01EX1JFQURZCT0gQklUKDEpLAorfTsKKworZW51bSBjcmJfY2Ffc3RhdHVzIHsKKwlDUkJfQ0FfU1RTX0VSUk9SCT0gQklUKDApLAorCUNSQl9DQV9TVFNfVFBNX0lETEUJPSBCSVQoMSksCit9OworCitlbnVtIGNyYl9zdGFydCB7CisJQ1JCX1NUQVJUX0lOVk9LRQk9IEJJVCgwKSwKK307CisKK2VudW0gY3JiX2NhbmNlbCB7CisJQ1JCX0NBTkNFTF9JTlZPS0UJPSBCSVQoMCksCit9OworCitzdHJ1Y3QgY3JiX2NvbnRyb2xfYXJlYSB7CisJdTMyIHJlcTsKKwl1MzIgc3RzOworCXUzMiBjYW5jZWw7CisJdTMyIHN0YXJ0OworCXUzMiBpbnRfZW5hYmxlOworCXUzMiBpbnRfc3RzOworCXUzMiBjbWRfc2l6ZTsKKwl1NjQgY21kX3BhOworCXUzMiByc3Bfc2l6ZTsKKwl1NjQgcnNwX3BhOworfSBfX3BhY2tlZDsKKworZW51bSBjcmJfc3RhdHVzIHsKKwlDUkJfU1RTX0NPTVBMRVRFCT0gQklUKDApLAorfTsKKworZW51bSBjcmJfZmxhZ3MgeworCUNSQl9GTF9BQ1BJX1NUQVJUCT0gQklUKDApLAorCUNSQl9GTF9DUkJfU1RBUlQJPSBCSVQoMSksCit9OworCitzdHJ1Y3QgY3JiX3ByaXYgeworCXVuc2lnbmVkIGludCBmbGFnczsKKwlzdHJ1Y3QgY3JiX2NvbnRyb2xfYXJlYSBfX2lvbWVtICpjY2E7CisJdTggX19pb21lbSAqY21kOworCXU4IF9faW9tZW0gKnJzcDsKK307CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK3N0YXRpYyBpbnQgY3JiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IHJjOworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmMgPSB0cG0yX3NodXRkb3duKGNoaXAsIFRQTTJfU1VfU1RBVEUpOworCWlmICghcmMpCisJCXJjID0gdHBtMl9kb19zZWxmdGVzdChjaGlwKTsKKworCXJldHVybiByYzsKK30KKyNlbmRpZgorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoY3JiX3BtLCB0cG1fcG1fc3VzcGVuZCwgY3JiX3Jlc3VtZSk7CisKK3N0YXRpYyB1OCBjcmJfc3RhdHVzKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3QgY3JiX3ByaXYgKnByaXYgPSBjaGlwLT52ZW5kb3IucHJpdjsKKwl1OCBzdHMgPSAwOworCisJaWYgKChsZTMyX3RvX2NwdShpb3JlYWQzMigmcHJpdi0+Y2NhLT5zdGFydCkpICYgQ1JCX1NUQVJUX0lOVk9LRSkgIT0KKwkgICAgQ1JCX1NUQVJUX0lOVk9LRSkKKwkJc3RzIHw9IENSQl9TVFNfQ09NUExFVEU7CisKKwlyZXR1cm4gc3RzOworfQorCitzdGF0aWMgaW50IGNyYl9yZWN2KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjcmJfcHJpdiAqcHJpdiA9IGNoaXAtPnZlbmRvci5wcml2OworCXVuc2lnbmVkIGludCBleHBlY3RlZDsKKworCS8qIHNhbml0eSBjaGVjayAqLworCWlmIChjb3VudCA8IDYpCisJCXJldHVybiAtRUlPOworCisJaWYgKGxlMzJfdG9fY3B1KGlvcmVhZDMyKCZwcml2LT5jY2EtPnN0cykpICYgQ1JCX0NBX1NUU19FUlJPUikKKwkJcmV0dXJuIC1FSU87CisKKwltZW1jcHlfZnJvbWlvKGJ1ZiwgcHJpdi0+cnNwLCA2KTsKKwlleHBlY3RlZCA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopICZidWZbMl0pOworCisJaWYgKGV4cGVjdGVkID4gY291bnQpCisJCXJldHVybiAtRUlPOworCisJbWVtY3B5X2Zyb21pbygmYnVmWzZdLCAmcHJpdi0+cnNwWzZdLCBleHBlY3RlZCAtIDYpOworCisJcmV0dXJuIGV4cGVjdGVkOworfQorCitzdGF0aWMgaW50IGNyYl9kb19hY3BpX3N0YXJ0KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKK3sKKwl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCWludCByYzsKKworCW9iaiA9IGFjcGlfZXZhbHVhdGVfZHNtKGNoaXAtPmFjcGlfZGV2X2hhbmRsZSwKKwkJCQlDUkJfQUNQSV9TVEFSVF9VVUlELAorCQkJCUNSQl9BQ1BJX1NUQVJUX1JFVklTSU9OX0lELAorCQkJCUNSQl9BQ1BJX1NUQVJUX0lOREVYLAorCQkJCU5VTEwpOworCWlmICghb2JqKQorCQlyZXR1cm4gLUVOWElPOworCXJjID0gb2JqLT5pbnRlZ2VyLnZhbHVlID09IDAgPyAwIDogLUVOWElPOworCUFDUElfRlJFRShvYmopOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBjcmJfc2VuZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4ICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGNyYl9wcml2ICpwcml2ID0gY2hpcC0+dmVuZG9yLnByaXY7CisJaW50IHJjID0gMDsKKworCWlmIChsZW4gPiBsZTMyX3RvX2NwdShpb3JlYWQzMigmcHJpdi0+Y2NhLT5jbWRfc2l6ZSkpKSB7CisJCWRldl9lcnIoJmNoaXAtPmRldiwKKwkJCSJpbnZhbGlkIGNvbW1hbmQgY291bnQgdmFsdWUgJXggJXp4XG4iLAorCQkJKHVuc2lnbmVkIGludCkgbGVuLAorCQkJKHNpemVfdCkgbGUzMl90b19jcHUoaW9yZWFkMzIoJnByaXYtPmNjYS0+Y21kX3NpemUpKSk7CisJCXJldHVybiAtRTJCSUc7CisJfQorCisJbWVtY3B5X3RvaW8ocHJpdi0+Y21kLCBidWYsIGxlbik7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBjbWQgaXMgcG9wdWxhdGVkIGJlZm9yZSBpc3N1aW5nIHN0YXJ0LiAqLworCXdtYigpOworCisJaWYgKHByaXYtPmZsYWdzICYgQ1JCX0ZMX0NSQl9TVEFSVCkKKwkJaW93cml0ZTMyKGNwdV90b19sZTMyKENSQl9TVEFSVF9JTlZPS0UpLCAmcHJpdi0+Y2NhLT5zdGFydCk7CisKKwlpZiAocHJpdi0+ZmxhZ3MgJiBDUkJfRkxfQUNQSV9TVEFSVCkKKwkJcmMgPSBjcmJfZG9fYWNwaV9zdGFydChjaGlwKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgY3JiX2NhbmNlbChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCit7CisJc3RydWN0IGNyYl9wcml2ICpwcml2ID0gY2hpcC0+dmVuZG9yLnByaXY7CisKKwlpb3dyaXRlMzIoY3B1X3RvX2xlMzIoQ1JCX0NBTkNFTF9JTlZPS0UpLCAmcHJpdi0+Y2NhLT5jYW5jZWwpOworCisJLyogTWFrZSBzdXJlIHRoYXQgY21kIGlzIHBvcHVsYXRlZCBiZWZvcmUgaXNzdWluZyBjYW5jZWwuICovCisJd21iKCk7CisKKwlpZiAoKHByaXYtPmZsYWdzICYgQ1JCX0ZMX0FDUElfU1RBUlQpICYmIGNyYl9kb19hY3BpX3N0YXJ0KGNoaXApKQorCQlkZXZfZXJyKCZjaGlwLT5kZXYsICJBQ1BJIFN0YXJ0IGZhaWxlZFxuIik7CisKKwlpb3dyaXRlMzIoMCwgJnByaXYtPmNjYS0+Y2FuY2VsKTsKK30KKworc3RhdGljIGJvb2wgY3JiX3JlcV9jYW5jZWxlZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4IHN0YXR1cykKK3sKKwlzdHJ1Y3QgY3JiX3ByaXYgKnByaXYgPSBjaGlwLT52ZW5kb3IucHJpdjsKKwl1MzIgY2FuY2VsID0gbGUzMl90b19jcHUoaW9yZWFkMzIoJnByaXYtPmNjYS0+Y2FuY2VsKSk7CisKKwlyZXR1cm4gKGNhbmNlbCAmIENSQl9DQU5DRUxfSU5WT0tFKSA9PSBDUkJfQ0FOQ0VMX0lOVk9LRTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0cG1fY2xhc3Nfb3BzIHRwbV9jcmIgPSB7CisJLnN0YXR1cyA9IGNyYl9zdGF0dXMsCisJLnJlY3YgPSBjcmJfcmVjdiwKKwkuc2VuZCA9IGNyYl9zZW5kLAorCS5jYW5jZWwgPSBjcmJfY2FuY2VsLAorCS5yZXFfY2FuY2VsZWQgPSBjcmJfcmVxX2NhbmNlbGVkLAorCS5yZXFfY29tcGxldGVfbWFzayA9IENSQl9TVFNfQ09NUExFVEUsCisJLnJlcV9jb21wbGV0ZV92YWwgPSBDUkJfU1RTX0NPTVBMRVRFLAorfTsKKworc3RhdGljIGludCBjcmJfYWNwaV9hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwOworCXN0cnVjdCBhY3BpX3RwbTIgKmJ1ZjsKKwlzdHJ1Y3QgY3JiX3ByaXYgKnByaXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmRldmljZS0+ZGV2OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl1MzIgc207CisJdTY0IHBhOworCWludCByYzsKKworCWNoaXAgPSB0cG1tX2NoaXBfYWxsb2MoZGV2LCAmdHBtX2NyYik7CisJaWYgKElTX0VSUihjaGlwKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2hpcCk7CisKKwljaGlwLT5mbGFncyA9IFRQTV9DSElQX0ZMQUdfVFBNMjsKKworCXN0YXR1cyA9IGFjcGlfZ2V0X3RhYmxlKEFDUElfU0lHX1RQTTIsIDEsCisJCQkJKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqKikgJmJ1Zik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBUUE0yIEFDUEkgdGFibGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoYnVmLT5oZHIubGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBhY3BpX3RwbTIpKSB7CisJCWRldl9lcnIoZGV2LCAiVFBNMiBBQ1BJIHRhYmxlIGhhcyB3cm9uZyBzaXplIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXByaXYgPSAoc3RydWN0IGNyYl9wcml2ICopIGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgY3JiX3ByaXYpLAorCQkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGRldm1fa3phbGxvYyBmb3IgcHJpdmF0ZSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc20gPSBsZTMyX3RvX2NwdShidWYtPnN0YXJ0X21ldGhvZCk7CisKKwkvKiBUaGUgcmVhc29uIGZvciB0aGUgZXh0cmEgcXVpcmsgaXMgdGhhdCB0aGUgUFRUIGluIDR0aCBHZW4gQ29yZSBDUFVzCisJICogcmVwb3J0IG9ubHkgQUNQSSBzdGFydCBidXQgaW4gcHJhY3RpY2Ugc2VlbXMgdG8gcmVxdWlyZSBib3RoCisJICogQUNQSSBzdGFydCBhbmQgQ1JCIHN0YXJ0LgorCSAqLworCWlmIChzbSA9PSBDUkJfU01fQ1JCIHx8IHNtID09IENSQl9TTV9DUkJfV0lUSF9BQ1BJX1NUQVJUIHx8CisJICAgICFzdHJjbXAoYWNwaV9kZXZpY2VfaGlkKGRldmljZSksICJNU0ZUMDEwMSIpKQorCQlwcml2LT5mbGFncyB8PSBDUkJfRkxfQ1JCX1NUQVJUOworCisJaWYgKHNtID09IENSQl9TTV9BQ1BJX1NUQVJUIHx8IHNtID09IENSQl9TTV9DUkJfV0lUSF9BQ1BJX1NUQVJUKQorCQlwcml2LT5mbGFncyB8PSBDUkJfRkxfQUNQSV9TVEFSVDsKKworCXByaXYtPmNjYSA9IChzdHJ1Y3QgY3JiX2NvbnRyb2xfYXJlYSBfX2lvbWVtICopCisJCWRldm1faW9yZW1hcF9ub2NhY2hlKGRldiwgYnVmLT5jb250cm9sX2FyZWFfcGEsIDB4MTAwMCk7CisJaWYgKCFwcml2LT5jY2EpIHsKKwkJZGV2X2VycihkZXYsICJpb3JlbWFwIG9mIHRoZSBjb250cm9sIGFyZWEgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5X2Zyb21pbygmcGEsICZwcml2LT5jY2EtPmNtZF9wYSwgOCk7CisJcGEgPSBsZTY0X3RvX2NwdShwYSk7CisJcHJpdi0+Y21kID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoZGV2LCBsZTY0X3RvX2NwdShwYSksCisJCQkJCSBpb3JlYWQzMigmcHJpdi0+Y2NhLT5jbWRfc2l6ZSkpOworCWlmICghcHJpdi0+Y21kKSB7CisJCWRldl9lcnIoZGV2LCAiaW9yZW1hcCBvZiB0aGUgY29tbWFuZCBidWZmZXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtY3B5X2Zyb21pbygmcGEsICZwcml2LT5jY2EtPnJzcF9wYSwgOCk7CisJcGEgPSBsZTY0X3RvX2NwdShwYSk7CisJcHJpdi0+cnNwID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoZGV2LCBsZTY0X3RvX2NwdShwYSksCisJCQkJCSBpb3JlYWQzMigmcHJpdi0+Y2NhLT5yc3Bfc2l6ZSkpOworCWlmICghcHJpdi0+cnNwKSB7CisJCWRldl9lcnIoZGV2LCAiaW9yZW1hcCBvZiB0aGUgcmVzcG9uc2UgYnVmZmVyIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWNoaXAtPnZlbmRvci5wcml2ID0gcHJpdjsKKworCS8qIERlZmF1bHQgdGltZW91dHMgYW5kIGR1cmF0aW9ucyAqLworCWNoaXAtPnZlbmRvci50aW1lb3V0X2EgPSBtc2Vjc190b19qaWZmaWVzKFRQTTJfVElNRU9VVF9BKTsKKwljaGlwLT52ZW5kb3IudGltZW91dF9iID0gbXNlY3NfdG9famlmZmllcyhUUE0yX1RJTUVPVVRfQik7CisJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYyA9IG1zZWNzX3RvX2ppZmZpZXMoVFBNMl9USU1FT1VUX0MpOworCWNoaXAtPnZlbmRvci50aW1lb3V0X2QgPSBtc2Vjc190b19qaWZmaWVzKFRQTTJfVElNRU9VVF9EKTsKKwljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX1NIT1JUXSA9CisJCW1zZWNzX3RvX2ppZmZpZXMoVFBNMl9EVVJBVElPTl9TSE9SVCk7CisJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9NRURJVU1dID0KKwkJbXNlY3NfdG9famlmZmllcyhUUE0yX0RVUkFUSU9OX01FRElVTSk7CisJY2hpcC0+dmVuZG9yLmR1cmF0aW9uW1RQTV9MT05HXSA9CisJCW1zZWNzX3RvX2ppZmZpZXMoVFBNMl9EVVJBVElPTl9MT05HKTsKKworCWNoaXAtPmFjcGlfZGV2X2hhbmRsZSA9IGRldmljZS0+aGFuZGxlOworCisJcmMgPSB0cG0yX2RvX3NlbGZ0ZXN0KGNoaXApOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmV0dXJuIHRwbV9jaGlwX3JlZ2lzdGVyKGNoaXApOworfQorCitzdGF0aWMgaW50IGNyYl9hY3BpX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZGV2aWNlLT5kZXY7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwl0cG1fY2hpcF91bnJlZ2lzdGVyKGNoaXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGNyYl9kZXZpY2VfaWRzW10gPSB7CisJeyJNU0ZUMDEwMSIsIDB9LAorCXsiIiwgMH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBjcmJfZGV2aWNlX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgY3JiX2FjcGlfZHJpdmVyID0geworCS5uYW1lID0gInRwbV9jcmIiLAorCS5pZHMgPSBjcmJfZGV2aWNlX2lkcywKKwkub3BzID0geworCQkuYWRkID0gY3JiX2FjcGlfYWRkLAorCQkucmVtb3ZlID0gY3JiX2FjcGlfcmVtb3ZlLAorCX0sCisJLmRydiA9IHsKKwkJLnBtID0gJmNyYl9wbSwKKwl9LAorfTsKKworbW9kdWxlX2FjcGlfZHJpdmVyKGNyYl9hY3BpX2RyaXZlcik7CitNT0RVTEVfQVVUSE9SKCJKYXJra28gU2Fra2luZW4gPGphcmtrby5zYWtraW5lbkBsaW51eC5pbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRQTTIgRHJpdmVyIik7CitNT0RVTEVfVkVSU0lPTigiMC4xIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfYXRtZWwuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2kyY19hdG1lbC5jCmluZGV4IDc3MjcyOTIuLjdhMGNhNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2kyY19hdG1lbC5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2kyY19hdG1lbC5jCkBAIC01Miw3ICs1Miw3IEBACiBzdGF0aWMgaW50IGkyY19hdG1lbF9zZW5kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgcHJpdl9kYXRhICpwcml2ID0gY2hpcC0+dmVuZG9yLnByaXY7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoY2hpcC0+ZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChjaGlwLT5wZGV2KTsKIAlzMzIgc3RhdHVzOwogCiAJcHJpdi0+bGVuID0gMDsKQEAgLTYyLDcgKzYyLDcgQEAKIAogCXN0YXR1cyA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgbGVuKTsKIAotCWRldl9kYmcoY2hpcC0+ZGV2LAorCWRldl9kYmcoY2hpcC0+cGRldiwKIAkJIiVzKGJ1Zj0lKnBoIGxlbj0lMHp4KSAtPiBzdHM9JWRcbiIsIF9fZnVuY19fLAogCQkoaW50KW1pbl90KHNpemVfdCwgNjQsIGxlbiksIGJ1ZiwgbGVuLCBzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CkBAIC03MSw3ICs3MSw3IEBACiBzdGF0aWMgaW50IGkyY19hdG1lbF9yZWN2KHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBwcml2X2RhdGEgKnByaXYgPSBjaGlwLT52ZW5kb3IucHJpdjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChjaGlwLT5kZXYpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGNoaXAtPnBkZXYpOwogCXN0cnVjdCB0cG1fb3V0cHV0X2hlYWRlciAqaGRyID0KIAkJKHN0cnVjdCB0cG1fb3V0cHV0X2hlYWRlciAqKXByaXYtPmJ1ZmZlcjsKIAl1MzIgZXhwZWN0ZWRfbGVuOwpAQCAtODgsNyArODgsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmIChwcml2LT5sZW4gPj0gZXhwZWN0ZWRfbGVuKSB7Ci0JCWRldl9kYmcoY2hpcC0+ZGV2LAorCQlkZXZfZGJnKGNoaXAtPnBkZXYsCiAJCQkiJXMgZWFybHkoYnVmPSUqcGggY291bnQ9JTB6eCkgLT4gcmV0PSVkXG4iLCBfX2Z1bmNfXywKIAkJCShpbnQpbWluX3Qoc2l6ZV90LCA2NCwgZXhwZWN0ZWRfbGVuKSwgYnVmLCBjb3VudCwKIAkJCWV4cGVjdGVkX2xlbik7CkBAIC05Nyw3ICs5Nyw3IEBACiAJfQogCiAJcmMgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYsIGV4cGVjdGVkX2xlbik7Ci0JZGV2X2RiZyhjaGlwLT5kZXYsCisJZGV2X2RiZyhjaGlwLT5wZGV2LAogCQkiJXMgcmVyZWFkKGJ1Zj0lKnBoIGNvdW50PSUwengpIC0+IHJldD0lZFxuIiwgX19mdW5jX18sCiAJCShpbnQpbWluX3Qoc2l6ZV90LCA2NCwgZXhwZWN0ZWRfbGVuKSwgYnVmLCBjb3VudCwKIAkJZXhwZWN0ZWRfbGVuKTsKQEAgLTEwNiwxMyArMTA2LDEzIEBACiAKIHN0YXRpYyB2b2lkIGkyY19hdG1lbF9jYW5jZWwoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCWRldl9lcnIoY2hpcC0+ZGV2LCAiVFBNIG9wZXJhdGlvbiBjYW5jZWxsYXRpb24gd2FzIHJlcXVlc3RlZCwgYnV0IGlzIG5vdCBzdXBwb3J0ZWQiKTsKKwlkZXZfZXJyKGNoaXAtPnBkZXYsICJUUE0gb3BlcmF0aW9uIGNhbmNlbGxhdGlvbiB3YXMgcmVxdWVzdGVkLCBidXQgaXMgbm90IHN1cHBvcnRlZCIpOwogfQogCiBzdGF0aWMgdTggaTJjX2F0bWVsX3JlYWRfc3RhdHVzKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKIAlzdHJ1Y3QgcHJpdl9kYXRhICpwcml2ID0gY2hpcC0+dmVuZG9yLnByaXY7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoY2hpcC0+ZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChjaGlwLT5wZGV2KTsKIAlpbnQgcmM7CiAKIAkvKiBUaGUgVFBNIGZhaWxzIHRoZSBJMkMgcmVhZCB1bnRpbCBpdCBpcyByZWFkeSwgc28gd2UgZG8gdGhlIGVudGlyZQpAQCAtMTI1LDcgKzEyNSw3IEBACiAJLyogT25jZSB0aGUgVFBNIGhhcyBjb21wbGV0ZWQgdGhlIGNvbW1hbmQgdGhlIGNvbW1hbmQgcmVtYWlucyByZWFkYWJsZQogCSAqIHVudGlsIGFub3RoZXIgY29tbWFuZCBpcyBpc3N1ZWQuICovCiAJcmMgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBwcml2LT5idWZmZXIsIHNpemVvZihwcml2LT5idWZmZXIpKTsKLQlkZXZfZGJnKGNoaXAtPmRldiwKKwlkZXZfZGJnKGNoaXAtPnBkZXYsCiAJCSIlczogc3RzPSVkIiwgX19mdW5jX18sIHJjKTsKIAlpZiAocmMgPD0gMCkKIAkJcmV0dXJuIDA7CkBAIC0xNTMsMjEgKzE1MywyMCBAQAogc3RhdGljIGludCBpMmNfYXRtZWxfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlpbnQgcmM7CiAJc3RydWN0IHRwbV9jaGlwICpjaGlwOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWNoaXAgPSB0cG1fcmVnaXN0ZXJfaGFyZHdhcmUoZGV2LCAmaTJjX2F0bWVsKTsKLQlpZiAoIWNoaXApIHsKLQkJZGV2X2VycihkZXYsICIlcygpIGVycm9yIGluIHRwbV9yZWdpc3Rlcl9oYXJkd2FyZVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJY2hpcCA9IHRwbW1fY2hpcF9hbGxvYyhkZXYsICZpMmNfYXRtZWwpOworCWlmIChJU19FUlIoY2hpcCkpCisJCXJldHVybiBQVFJfRVJSKGNoaXApOwogCiAJY2hpcC0+dmVuZG9yLnByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IHByaXZfZGF0YSksCiAJCQkJCSBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoaXAtPnZlbmRvci5wcml2KQorCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIERlZmF1bHQgdGltZW91dHMgKi8KIAljaGlwLT52ZW5kb3IudGltZW91dF9hID0gbXNlY3NfdG9famlmZmllcyhUUE1fSTJDX1NIT1JUX1RJTUVPVVQpOwpAQCAtMTc5LDMzICsxNzgsMjAgQEAKIAkvKiBUaGVyZSBpcyBubyBrbm93biB3YXkgdG8gcHJvYmUgZm9yIHRoaXMgZGV2aWNlLCBhbmQgYWxsIHZlcnNpb24KIAkgKiBpbmZvcm1hdGlvbiBzZWVtcyB0byBiZSByZWFkIHZpYSBUUE0gY29tbWFuZHMuIFRodXMgd2UgcmVseSBvbiB0aGUKIAkgKiBUUE0gc3RhcnR1cCBwcm9jZXNzIGluIHRoZSBjb21tb24gY29kZSB0byBkZXRlY3QgdGhlIGRldmljZS4gKi8KLQlpZiAodHBtX2dldF90aW1lb3V0cyhjaGlwKSkgewotCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2VycjsKLQl9CisJaWYgKHRwbV9nZXRfdGltZW91dHMoY2hpcCkpCisJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKHRwbV9kb19zZWxmdGVzdChjaGlwKSkgewotCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2VycjsKLQl9CisJaWYgKHRwbV9kb19zZWxmdGVzdChjaGlwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gMDsKLQotb3V0X2VycjoKLQl0cG1fZGV2X3ZlbmRvcl9yZWxlYXNlKGNoaXApOwotCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHRwbV9jaGlwX3JlZ2lzdGVyKGNoaXApOwogfQogCiBzdGF0aWMgaW50IGkyY19hdG1lbF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmKGNsaWVudC0+ZGV2KTsKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQotCWlmIChjaGlwKQotCQl0cG1fZGV2X3ZlbmRvcl9yZWxlYXNlKGNoaXApOwotCXRwbV9yZW1vdmVfaGFyZHdhcmUoZGV2KTsKLQlrZnJlZShjaGlwKTsKKwl0cG1fY2hpcF91bnJlZ2lzdGVyKGNoaXApOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfaW5maW5lb24uYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2kyY19pbmZpbmVvbi5jCmluZGV4IDQ3MmFmNGIuLjMzYzVmMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2kyY19pbmZpbmVvbi5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2kyY19pbmZpbmVvbi5jCkBAIC00NDYsNyArNDQ2LDcgQEAKIAkvKiByZWFkIGZpcnN0IDEwIGJ5dGVzLCBpbmNsdWRpbmcgdGFnLCBwYXJhbXNpemUsIGFuZCByZXN1bHQgKi8KIAlzaXplID0gcmVjdl9kYXRhKGNoaXAsIGJ1ZiwgVFBNX0hFQURFUl9TSVpFKTsKIAlpZiAoc2l6ZSA8IFRQTV9IRUFERVJfU0laRSkgewotCQlkZXZfZXJyKGNoaXAtPmRldiwgIlVuYWJsZSB0byByZWFkIGhlYWRlclxuIik7CisJCWRldl9lcnIoY2hpcC0+cGRldiwgIlVuYWJsZSB0byByZWFkIGhlYWRlclxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNDU5LDE0ICs0NTksMTQgQEAKIAlzaXplICs9IHJlY3ZfZGF0YShjaGlwLCAmYnVmW1RQTV9IRUFERVJfU0laRV0sCiAJCQkgIGV4cGVjdGVkIC0gVFBNX0hFQURFUl9TSVpFKTsKIAlpZiAoc2l6ZSA8IGV4cGVjdGVkKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQgcmVtYWluZGVyIG9mIHJlc3VsdFxuIik7CisJCWRldl9lcnIoY2hpcC0+cGRldiwgIlVuYWJsZSB0byByZWFkIHJlbWFpbmRlciBvZiByZXN1bHRcbiIpOwogCQlzaXplID0gLUVUSU1FOwogCQlnb3RvIG91dDsKIAl9CiAKIAl3YWl0X2Zvcl9zdGF0KGNoaXAsIFRQTV9TVFNfVkFMSUQsIGNoaXAtPnZlbmRvci50aW1lb3V0X2MsICZzdGF0dXMpOwogCWlmIChzdGF0dXMgJiBUUE1fU1RTX0RBVEFfQVZBSUwpIHsJLyogcmV0cnk/ICovCi0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiRXJyb3IgbGVmdCBvdmVyIGRhdGFcbiIpOworCQlkZXZfZXJyKGNoaXAtPnBkZXYsICJFcnJvciBsZWZ0IG92ZXIgZGF0YVxuIik7CiAJCXNpemUgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC01ODEsMTIgKzU4MSw5IEBACiAJaW50IHJjID0gMDsKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXA7CiAKLQljaGlwID0gdHBtX3JlZ2lzdGVyX2hhcmR3YXJlKGRldiwgJnRwbV90aXNfaTJjKTsKLQlpZiAoIWNoaXApIHsKLQkJZGV2X2VycihkZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgaGFyZHdhcmVcbiIpOwotCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2VycjsKLQl9CisJY2hpcCA9IHRwbW1fY2hpcF9hbGxvYyhkZXYsICZ0cG1fdGlzX2kyYyk7CisJaWYgKElTX0VSUihjaGlwKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2hpcCk7CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAljaGlwLT52ZW5kb3IuaXJxID0gMDsKQEAgLTYwMCw3ICs1OTcsNyBAQAogCWlmIChyZXF1ZXN0X2xvY2FsaXR5KGNoaXAsIDApICE9IDApIHsKIAkJZGV2X2VycihkZXYsICJjb3VsZCBub3QgcmVxdWVzdCBsb2NhbGl0eVxuIik7CiAJCXJjID0gLUVOT0RFVjsKLQkJZ290byBvdXRfdmVuZG9yOworCQlnb3RvIG91dF9lcnI7CiAJfQogCiAJLyogcmVhZCBmb3VyIGJ5dGVzIGZyb20gRElEX1ZJRCByZWdpc3RlciAqLwpAQCAtNjI4LDIxICs2MjUsOSBAQAogCXRwbV9nZXRfdGltZW91dHMoY2hpcCk7CiAJdHBtX2RvX3NlbGZ0ZXN0KGNoaXApOwogCi0JcmV0dXJuIDA7Ci0KKwlyZXR1cm4gdHBtX2NoaXBfcmVnaXN0ZXIoY2hpcCk7CiBvdXRfcmVsZWFzZToKIAlyZWxlYXNlX2xvY2FsaXR5KGNoaXAsIGNoaXAtPnZlbmRvci5sb2NhbGl0eSwgMSk7Ci0KLW91dF92ZW5kb3I6Ci0JLyogY2xvc2UgZmlsZSBoYW5kbGVzICovCi0JdHBtX2Rldl92ZW5kb3JfcmVsZWFzZShjaGlwKTsKLQotCS8qIHJlbW92ZSBoYXJkd2FyZSAqLwotCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKLQotCS8qIHJlc2V0IHRoZXNlIHBvaW50ZXJzLCBvdGhlcndpc2Ugd2Ugb29wcyAqLwotCWNoaXAtPmRldi0+cmVsZWFzZSA9IE5VTEw7Ci0JY2hpcC0+cmVsZWFzZSA9IE5VTEw7CiAJdHBtX2Rldi5jbGllbnQgPSBOVUxMOwogb3V0X2VycjoKIAlyZXR1cm4gcmM7CkBAIC03MTIsMTcgKzY5Nyw5IEBACiBzdGF0aWMgaW50IHRwbV90aXNfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IHRwbV9kZXYuY2hpcDsKKworCXRwbV9jaGlwX3VucmVnaXN0ZXIoY2hpcCk7CiAJcmVsZWFzZV9sb2NhbGl0eShjaGlwLCBjaGlwLT52ZW5kb3IubG9jYWxpdHksIDEpOwotCi0JLyogY2xvc2UgZmlsZSBoYW5kbGVzICovCi0JdHBtX2Rldl92ZW5kb3JfcmVsZWFzZShjaGlwKTsKLQotCS8qIHJlbW92ZSBoYXJkd2FyZSAqLwotCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKLQotCS8qIHJlc2V0IHRoZXNlIHBvaW50ZXJzLCBvdGhlcndpc2Ugd2Ugb29wcyAqLwotCWNoaXAtPmRldi0+cmVsZWFzZSA9IE5VTEw7Ci0JY2hpcC0+cmVsZWFzZSA9IE5VTEw7CiAJdHBtX2Rldi5jbGllbnQgPSBOVUxMOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfbnV2b3Rvbi5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX251dm90b24uYwppbmRleCA3YjE1OGVmLi45ZDQyYjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfbnV2b3Rvbi5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2kyY19udXZvdG9uLmMKQEAgLTk2LDEzICs5NiwxMyBAQAogLyogcmVhZCBUUE1fU1RTIHJlZ2lzdGVyICovCiBzdGF0aWMgdTggaTJjX251dm90b25fcmVhZF9zdGF0dXMoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGNoaXAtPmRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoY2hpcC0+cGRldik7CiAJczMyIHN0YXR1czsKIAl1OCBkYXRhOwogCiAJc3RhdHVzID0gaTJjX251dm90b25fcmVhZF9idWYoY2xpZW50LCBUUE1fU1RTLCAxLCAmZGF0YSk7CiAJaWYgKHN0YXR1cyA8PSAwKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiJXMoKSBlcnJvciByZXR1cm4gJWRcbiIsIF9fZnVuY19fLAorCQlkZXZfZXJyKGNoaXAtPnBkZXYsICIlcygpIGVycm9yIHJldHVybiAlZFxuIiwgX19mdW5jX18sCiAJCQlzdGF0dXMpOwogCQlkYXRhID0gVFBNX1NUU19FUlJfVkFMOwogCX0KQEAgLTEyNywxMyArMTI3LDEzIEBACiAvKiB3cml0ZSBjb21tYW5kUmVhZHkgdG8gVFBNX1NUUyByZWdpc3RlciAqLwogc3RhdGljIHZvaWQgaTJjX251dm90b25fcmVhZHkoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGNoaXAtPmRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoY2hpcC0+cGRldik7CiAJczMyIHN0YXR1czsKIAogCS8qIHRoaXMgY2F1c2VzIHRoZSBjdXJyZW50IGNvbW1hbmQgdG8gYmUgYWJvcnRlZCAqLwogCXN0YXR1cyA9IGkyY19udXZvdG9uX3dyaXRlX3N0YXR1cyhjbGllbnQsIFRQTV9TVFNfQ09NTUFORF9SRUFEWSk7CiAJaWYgKHN0YXR1cyA8IDApCi0JCWRldl9lcnIoY2hpcC0+ZGV2LAorCQlkZXZfZXJyKGNoaXAtPnBkZXYsCiAJCQkiJXMoKSBmYWlsIHRvIHdyaXRlIFRQTV9TVFMuY29tbWFuZFJlYWR5XG4iLCBfX2Z1bmNfXyk7CiB9CiAKQEAgLTIxMiw3ICsyMTIsNyBAQAogCQkJCXJldHVybiAwOwogCQl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzdG9wKSk7CiAJfQotCWRldl9lcnIoY2hpcC0+ZGV2LCAiJXMoJTAyeCwgJTAyeCkgLT4gdGltZW91dFxuIiwgX19mdW5jX18sIG1hc2ssCisJZGV2X2VycihjaGlwLT5wZGV2LCAiJXMoJTAyeCwgJTAyeCkgLT4gdGltZW91dFxuIiwgX19mdW5jX18sIG1hc2ssCiAJCXZhbHVlKTsKIAlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KQEAgLTI0MCw3ICsyNDAsNyBAQAogCQkJCQkgICAgICAgJmNoaXAtPnZlbmRvci5yZWFkX3F1ZXVlKSA9PSAwKSB7CiAJCWJ1cnN0X2NvdW50ID0gaTJjX251dm90b25fZ2V0X2J1cnN0Y291bnQoY2xpZW50LCBjaGlwKTsKIAkJaWYgKGJ1cnN0X2NvdW50IDwgMCkgewotCQkJZGV2X2VycihjaGlwLT5kZXYsCisJCQlkZXZfZXJyKGNoaXAtPnBkZXYsCiAJCQkJIiVzKCkgZmFpbCB0byByZWFkIGJ1cnN0Q291bnQ9JWRcbiIsIF9fZnVuY19fLAogCQkJCWJ1cnN0X2NvdW50KTsKIAkJCXJldHVybiAtRUlPOwpAQCAtMjQ5LDEyICsyNDksMTIgQEAKIAkJcmMgPSBpMmNfbnV2b3Rvbl9yZWFkX2J1ZihjbGllbnQsIFRQTV9EQVRBX0ZJRk9fUiwKIAkJCQkJICBieXRlczJyZWFkLCAmYnVmW3NpemVdKTsKIAkJaWYgKHJjIDwgMCkgewotCQkJZGV2X2VycihjaGlwLT5kZXYsCisJCQlkZXZfZXJyKGNoaXAtPnBkZXYsCiAJCQkJIiVzKCkgZmFpbCBvbiBpMmNfbnV2b3Rvbl9yZWFkX2J1ZigpPSVkXG4iLAogCQkJCV9fZnVuY19fLCByYyk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQotCQlkZXZfZGJnKGNoaXAtPmRldiwgIiVzKCVkKToiLCBfX2Z1bmNfXywgYnl0ZXMycmVhZCk7CisJCWRldl9kYmcoY2hpcC0+cGRldiwgIiVzKCVkKToiLCBfX2Z1bmNfXywgYnl0ZXMycmVhZCk7CiAJCXNpemUgKz0gYnl0ZXMycmVhZDsKIAl9CiAKQEAgLTI2NCw3ICsyNjQsNyBAQAogLyogUmVhZCBUUE0gY29tbWFuZCByZXN1bHRzICovCiBzdGF0aWMgaW50IGkyY19udXZvdG9uX3JlY3Yoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1OCAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gY2hpcC0+ZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNoaXAtPnBkZXY7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzMzIgcmM7CiAJaW50IGV4cGVjdGVkLCBzdGF0dXMsIGJ1cnN0X2NvdW50LCByZXRyaWVzLCBzaXplID0gMDsKQEAgLTMzNCw3ICszMzQsNyBAQAogCQlicmVhazsKIAl9CiAJaTJjX251dm90b25fcmVhZHkoY2hpcCk7Ci0JZGV2X2RiZyhjaGlwLT5kZXYsICIlcygpIC0+ICVkXG4iLCBfX2Z1bmNfXywgc2l6ZSk7CisJZGV2X2RiZyhjaGlwLT5wZGV2LCAiJXMoKSAtPiAlZFxuIiwgX19mdW5jX18sIHNpemUpOwogCXJldHVybiBzaXplOwogfQogCkBAIC0zNDcsNyArMzQ3LDcgQEAKICAqLwogc3RhdGljIGludCBpMmNfbnV2b3Rvbl9zZW5kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggKmJ1Ziwgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjaGlwLT5kZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY2hpcC0+cGRldjsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXUzMiBvcmRpbmFsOwogCXNpemVfdCBjb3VudCA9IDA7CkBAIC01MzAsMTQgKzUzMCwxNSBAQAogCWRldl9pbmZvKGRldiwgIlZJRDogJTA0WCBESUQ6ICUwMlggUklEOiAlMDJYXG4iLCAodTE2KSB2aWQsCiAJCSAodTgpICh2aWQgPj4gMTYpLCAodTgpICh2aWQgPj4gMjQpKTsKIAotCWNoaXAgPSB0cG1fcmVnaXN0ZXJfaGFyZHdhcmUoZGV2LCAmdHBtX2kyYyk7Ci0JaWYgKCFjaGlwKSB7Ci0JCWRldl9lcnIoZGV2LCAiJXMoKSBlcnJvciBpbiB0cG1fcmVnaXN0ZXJfaGFyZHdhcmVcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCWNoaXAgPSB0cG1tX2NoaXBfYWxsb2MoZGV2LCAmdHBtX2kyYyk7CisJaWYgKElTX0VSUihjaGlwKSkKKwkJcmV0dXJuIFBUUl9FUlIoY2hpcCk7CiAKIAljaGlwLT52ZW5kb3IucHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgcHJpdl9kYXRhKSwKIAkJCQkJIEdGUF9LRVJORUwpOworCWlmICghY2hpcC0+dmVuZG9yLnByaXYpCisJCXJldHVybiAtRU5PTUVNOworCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2hpcC0+dmVuZG9yLnJlYWRfcXVldWUpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoaXAtPnZlbmRvci5pbnRfcXVldWUpOwogCkBAIC01NTksNyArNTYwLDcgQEAKIAkJcmMgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgY2hpcC0+dmVuZG9yLmlycSwKIAkJCQkgICAgICBpMmNfbnV2b3Rvbl9pbnRfaGFuZGxlciwKIAkJCQkgICAgICBJUlFGX1RSSUdHRVJfTE9XLAotCQkJCSAgICAgIGNoaXAtPnZlbmRvci5taXNjZGV2Lm5hbWUsCisJCQkJICAgICAgY2hpcC0+ZGV2bmFtZSwKIAkJCQkgICAgICBjaGlwKTsKIAkJaWYgKHJjKSB7CiAJCQlkZXZfZXJyKGRldiwgIiVzKCkgVW5hYmxlIHRvIHJlcXVlc3QgaXJxOiAlZCBmb3IgdXNlXG4iLApAQCAtNTg0LDcgKzU4NSw3IEBACiAJCQkJCQkJICAgVFBNX0RBVEFfRklGT19XLAogCQkJCQkJCSAgIDEsICh1OCAqKSAoJnJjKSk7CiAJCQkJaWYgKHJjIDwgMCkKLQkJCQkJZ290byBvdXRfZXJyOworCQkJCQlyZXR1cm4gcmM7CiAJCQkJLyogVFBNX1NUUyA8LSAweDQwIChjb21tYW5kUmVhZHkpICovCiAJCQkJaTJjX251dm90b25fcmVhZHkoY2hpcCk7CiAJCQl9IGVsc2UgewpAQCAtNTk0LDQ1ICs1OTUsMjkgQEAKIAkJCQkgKiBvbmx5IFRQTV9TVFNfVkFMSUQgc2hvdWxkIGJlIHNldAogCQkJCSAqLwogCQkJCWlmIChpMmNfbnV2b3Rvbl9yZWFkX3N0YXR1cyhjaGlwKSAhPQotCQkJCSAgICBUUE1fU1RTX1ZBTElEKSB7Ci0JCQkJCXJjID0gLUVJTzsKLQkJCQkJZ290byBvdXRfZXJyOwotCQkJCX0KKwkJCQkgICAgVFBNX1NUU19WQUxJRCkKKwkJCQkJcmV0dXJuIC1FSU87CiAJCQl9CiAJCX0KIAl9CiAKLQlpZiAodHBtX2dldF90aW1lb3V0cyhjaGlwKSkgewotCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2VycjsKLQl9CisJaWYgKHRwbV9nZXRfdGltZW91dHMoY2hpcCkpCisJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKHRwbV9kb19zZWxmdGVzdChjaGlwKSkgewotCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2VycjsKLQl9CisJaWYgKHRwbV9kb19zZWxmdGVzdChjaGlwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gMDsKLQotb3V0X2VycjoKLQl0cG1fZGV2X3ZlbmRvcl9yZWxlYXNlKGNoaXApOwotCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHRwbV9jaGlwX3JlZ2lzdGVyKGNoaXApOwogfQogCiBzdGF0aWMgaW50IGkyY19udXZvdG9uX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICYoY2xpZW50LT5kZXYpOwogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCi0JaWYgKGNoaXApCi0JCXRwbV9kZXZfdmVuZG9yX3JlbGVhc2UoY2hpcCk7Ci0JdHBtX3JlbW92ZV9oYXJkd2FyZShkZXYpOwotCWtmcmVlKGNoaXApOworCXRwbV9jaGlwX3VucmVnaXN0ZXIoY2hpcCk7CiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGkyY19udXZvdG9uX2lkW10gPSB7CiAJe0kyQ19EUklWRVJfTkFNRSwgMH0sCiAJe30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2kyY19zdG1fc3QzMy5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX3N0bV9zdDMzLmMKaW5kZXggNDY2OWUzNy4uNjEyODQ1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX3N0bV9zdDMzLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX3N0bV9zdDMzLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogU1RNaWNyb2VsZWN0cm9uaWNzIFRQTSBJMkMgTGludXggZHJpdmVyIGZvciBUUE0gU1QzM1pQMjQKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCAgU1RNaWNyb2VsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTQgIFNUTWljcm9lbGVjdHJvbmljcwogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTIsMTEgKzEyLDEwIEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogICoKLSAqIFNUTWljcm9lbGVjdHJvbmljcyB2ZXJzaW9uIDEuMi4wLCBDb3B5cmlnaHQgKEMpIDIwMTAKKyAqIFNUTWljcm9lbGVjdHJvbmljcyB2ZXJzaW9uIDEuMi4xLCBDb3B5cmlnaHQgKEMpIDIwMTQKICAqIFNUTWljcm9lbGVjdHJvbmljcyBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCiAgKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgKiB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuCkBAIC0yNyw3ICsyNiw3IEBACiAgKgogICogQFN5bm9wc2lzOgogICoJMDkvMTUvMjAxMDoJRmlyc3Qgc2hvdCBkcml2ZXIgdHBtX3RpcyBkcml2ZXIgZm9yCi0JCQkgbHBjIGlzIHVzZWQgYXMgbW9kZWwuCisgKgkJCSBscGMgaXMgdXNlZCBhcyBtb2RlbC4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0zOSwxOCArMzgsMzggQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL3RwbV9zdG1fc3QzMy5oPgogI2luY2x1ZGUgInRwbS5oIgotI2luY2x1ZGUgInRwbV9pMmNfc3RtX3N0MzMuaCIKKworI2RlZmluZSBUUE1fQUNDRVNTCQkJMHgwCisjZGVmaW5lIFRQTV9TVFMJCQkJMHgxOAorI2RlZmluZSBUUE1fSEFTSF9FTkQJCQkweDIwCisjZGVmaW5lIFRQTV9EQVRBX0ZJRk8JCQkweDI0CisjZGVmaW5lIFRQTV9IQVNIX0RBVEEJCQkweDI0CisjZGVmaW5lIFRQTV9IQVNIX1NUQVJUCQkJMHgyOAorI2RlZmluZSBUUE1fSU5URl9DQVBBQklMSVRZCQkweDE0CisjZGVmaW5lIFRQTV9JTlRfU1RBVFVTCQkJMHgxMAorI2RlZmluZSBUUE1fSU5UX0VOQUJMRQkJCTB4MDgKKworI2RlZmluZSBUUE1fRFVNTVlfQllURQkJCTB4QUEKKyNkZWZpbmUgVFBNX1dSSVRFX0RJUkVDVElPTgkJMHg4MAorI2RlZmluZSBUUE1fSEVBREVSX1NJWkUJCQkxMAorI2RlZmluZSBUUE1fQlVGU0laRQkJCTIwNDgKKworI2RlZmluZSBMT0NBTElUWTAJCTAKKwogCiBlbnVtIHN0bTMzenAyNF9hY2Nlc3MgewogCVRQTV9BQ0NFU1NfVkFMSUQgPSAweDgwLApAQCAtODIsNiArMTAxLDE0IEBACiAJVElTX0xPTkdfVElNRU9VVCA9IDIwMDAsCiB9OwogCitzdHJ1Y3QgdHBtX3N0bV9kZXYgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwOworCXU4IGJ1ZltUUE1fQlVGU0laRSArIDFdOworCXUzMiBpbnRyczsKKwlpbnQgaW9fbHBjcGQ7Cit9OworCiAvKgogICogd3JpdGU4X3JlZwogICogU2VuZCBieXRlIHRvIHRoZSBUSVMgcmVnaXN0ZXIgYWNjb3JkaW5nIHRvIHRoZSBTVDMzWlAyNCBJMkMgcHJvdG9jb2wuCkBAIC05MCwxNyArMTE3LDEyIEBACiAgKiBAcGFyYW06IHRwbV9zaXplLCBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhCiAgKiBAcmV0dXJuOiBSZXR1cm5zIG5lZ2F0aXZlIGVycm5vLCBvciBlbHNlIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KICAqLwotc3RhdGljIGludCB3cml0ZThfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHRwbV9yZWdpc3RlciwKK3N0YXRpYyBpbnQgd3JpdGU4X3JlZyhzdHJ1Y3QgdHBtX3N0bV9kZXYgKnRwbV9kZXYsIHU4IHRwbV9yZWdpc3RlciwKIAkJICAgICAgdTggKnRwbV9kYXRhLCB1MTYgdHBtX3NpemUpCiB7Ci0Jc3RydWN0IHN0MzN6cDI0X3BsYXRmb3JtX2RhdGEgKnBpbl9pbmZvczsKLQotCXBpbl9pbmZvcyA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0KLQlwaW5faW5mb3MtPnRwbV9pMmNfYnVmZmVyWzBdWzBdID0gdHBtX3JlZ2lzdGVyOwotCW1lbWNweSgmcGluX2luZm9zLT50cG1faTJjX2J1ZmZlclswXVsxXSwgdHBtX2RhdGEsIHRwbV9zaXplKTsKLQlyZXR1cm4gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgcGluX2luZm9zLT50cG1faTJjX2J1ZmZlclswXSwKLQkJCQl0cG1fc2l6ZSArIDEpOworCXRwbV9kZXYtPmJ1ZlswXSA9IHRwbV9yZWdpc3RlcjsKKwltZW1jcHkodHBtX2Rldi0+YnVmICsgMSwgdHBtX2RhdGEsIHRwbV9zaXplKTsKKwlyZXR1cm4gaTJjX21hc3Rlcl9zZW5kKHRwbV9kZXYtPmNsaWVudCwgdHBtX2Rldi0+YnVmLCB0cG1fc2l6ZSArIDEpOwogfSAvKiB3cml0ZThfcmVnKCkgKi8KIAogLyoKQEAgLTExMSwxMTggKzEzMyw3MyBAQAogICogQHBhcmFtOiB0cG1fc2l6ZSwgdHBtIFRQTSByZXNwb25zZSBzaXplIHRvIHJlYWQuCiAgKiBAcmV0dXJuOiBudW1iZXIgb2YgYnl0ZSByZWFkIHN1Y2Nlc3NmdWxseTogc2hvdWxkIGJlIG9uZSBpZiBzdWNjZXNzLgogICovCi1zdGF0aWMgaW50IHJlYWQ4X3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCB0cG1fcmVnaXN0ZXIsCitzdGF0aWMgaW50IHJlYWQ4X3JlZyhzdHJ1Y3QgdHBtX3N0bV9kZXYgKnRwbV9kZXYsIHU4IHRwbV9yZWdpc3RlciwKIAkJICAgIHU4ICp0cG1fZGF0YSwgaW50IHRwbV9zaXplKQogewogCXU4IHN0YXR1cyA9IDA7CiAJdTggZGF0YTsKIAogCWRhdGEgPSBUUE1fRFVNTVlfQllURTsKLQlzdGF0dXMgPSB3cml0ZThfcmVnKGNsaWVudCwgdHBtX3JlZ2lzdGVyLCAmZGF0YSwgMSk7CisJc3RhdHVzID0gd3JpdGU4X3JlZyh0cG1fZGV2LCB0cG1fcmVnaXN0ZXIsICZkYXRhLCAxKTsKIAlpZiAoc3RhdHVzID09IDIpCi0JCXN0YXR1cyA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIHRwbV9kYXRhLCB0cG1fc2l6ZSk7CisJCXN0YXR1cyA9IGkyY19tYXN0ZXJfcmVjdih0cG1fZGV2LT5jbGllbnQsIHRwbV9kYXRhLCB0cG1fc2l6ZSk7CiAJcmV0dXJuIHN0YXR1czsKIH0gLyogcmVhZDhfcmVnKCkgKi8KIAogLyoKICAqIEkyQ19XUklURV9EQVRBCiAgKiBTZW5kIGJ5dGUgdG8gdGhlIFRJUyByZWdpc3RlciBhY2NvcmRpbmcgdG8gdGhlIFNUMzNaUDI0IEkyQyBwcm90b2NvbC4KLSAqIEBwYXJhbTogY2xpZW50LCB0aGUgY2hpcCBkZXNjcmlwdGlvbgorICogQHBhcmFtOiB0cG1fZGV2LCB0aGUgY2hpcCBkZXNjcmlwdGlvbgogICogQHBhcmFtOiB0cG1fcmVnaXN0ZXIsIHRoZSB0cG0gdGlzIHJlZ2lzdGVyIHdoZXJlIHRoZSBkYXRhIHNob3VsZCBiZSB3cml0dGVuCiAgKiBAcGFyYW06IHRwbV9kYXRhLCB0aGUgdHBtX2RhdGEgdG8gd3JpdGUgaW5zaWRlIHRoZSB0cG1fcmVnaXN0ZXIKICAqIEBwYXJhbTogdHBtX3NpemUsIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEKICAqIEByZXR1cm46IG51bWJlciBvZiBieXRlIHdyaXR0ZW4gc3VjY2Vzc2Z1bGx5OiBzaG91bGQgYmUgb25lIGlmIHN1Y2Nlc3MuCiAgKi8KLSNkZWZpbmUgSTJDX1dSSVRFX0RBVEEoY2xpZW50LCB0cG1fcmVnaXN0ZXIsIHRwbV9kYXRhLCB0cG1fc2l6ZSkgXAotCSh3cml0ZThfcmVnKGNsaWVudCwgdHBtX3JlZ2lzdGVyIHwgXAorI2RlZmluZSBJMkNfV1JJVEVfREFUQSh0cG1fZGV2LCB0cG1fcmVnaXN0ZXIsIHRwbV9kYXRhLCB0cG1fc2l6ZSkgXAorCSh3cml0ZThfcmVnKHRwbV9kZXYsIHRwbV9yZWdpc3RlciB8IFwKIAlUUE1fV1JJVEVfRElSRUNUSU9OLCB0cG1fZGF0YSwgdHBtX3NpemUpKQogCiAvKgogICogSTJDX1JFQURfREFUQQogICogUmVjdiBieXRlIGZyb20gdGhlIFRJUyByZWdpc3RlciBhY2NvcmRpbmcgdG8gdGhlIFNUMzNaUDI0IEkyQyBwcm90b2NvbC4KLSAqIEBwYXJhbTogdHBtLCB0aGUgY2hpcCBkZXNjcmlwdGlvbgorICogQHBhcmFtOiB0cG1fZGV2LCB0aGUgY2hpcCBkZXNjcmlwdGlvbgogICogQHBhcmFtOiB0cG1fcmVnaXN0ZXIsIHRoZSB0cG0gdGlzIHJlZ2lzdGVyIHdoZXJlIHRoZSBkYXRhIHNob3VsZCBiZSByZWFkCiAgKiBAcGFyYW06IHRwbV9kYXRhLCB0aGUgVFBNIHJlc3BvbnNlCiAgKiBAcGFyYW06IHRwbV9zaXplLCB0cG0gVFBNIHJlc3BvbnNlIHNpemUgdG8gcmVhZC4KICAqIEByZXR1cm46IG51bWJlciBvZiBieXRlIHJlYWQgc3VjY2Vzc2Z1bGx5OiBzaG91bGQgYmUgb25lIGlmIHN1Y2Nlc3MuCiAgKi8KLSNkZWZpbmUgSTJDX1JFQURfREFUQShjbGllbnQsIHRwbV9yZWdpc3RlciwgdHBtX2RhdGEsIHRwbV9zaXplKSBcCi0JKHJlYWQ4X3JlZyhjbGllbnQsIHRwbV9yZWdpc3RlciwgdHBtX2RhdGEsIHRwbV9zaXplKSkKKyNkZWZpbmUgSTJDX1JFQURfREFUQSh0cG1fZGV2LCB0cG1fcmVnaXN0ZXIsIHRwbV9kYXRhLCB0cG1fc2l6ZSkgXAorCShyZWFkOF9yZWcodHBtX2RldiwgdHBtX3JlZ2lzdGVyLCB0cG1fZGF0YSwgdHBtX3NpemUpKQogCiAvKgogICogY2xlYXJfaW50ZXJydXB0aW9uCiAgKiBjbGVhciB0aGUgVFBNIGludGVycnVwdCByZWdpc3Rlci4KICAqIEBwYXJhbTogdHBtLCB0aGUgY2hpcCBkZXNjcmlwdGlvbgorICogQHJldHVybjogdGhlIFRQTV9JTlRfU1RBVFVTIHZhbHVlCiAgKi8KLXN0YXRpYyB2b2lkIGNsZWFyX2ludGVycnVwdGlvbihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIHU4IGNsZWFyX2ludGVycnVwdGlvbihzdHJ1Y3QgdHBtX3N0bV9kZXYgKnRwbV9kZXYpCiB7CiAJdTggaW50ZXJydXB0OwotCUkyQ19SRUFEX0RBVEEoY2xpZW50LCBUUE1fSU5UX1NUQVRVUywgJmludGVycnVwdCwgMSk7Ci0JSTJDX1dSSVRFX0RBVEEoY2xpZW50LCBUUE1fSU5UX1NUQVRVUywgJmludGVycnVwdCwgMSk7Ci0JSTJDX1JFQURfREFUQShjbGllbnQsIFRQTV9JTlRfU1RBVFVTLCAmaW50ZXJydXB0LCAxKTsKKworCUkyQ19SRUFEX0RBVEEodHBtX2RldiwgVFBNX0lOVF9TVEFUVVMsICZpbnRlcnJ1cHQsIDEpOworCUkyQ19XUklURV9EQVRBKHRwbV9kZXYsIFRQTV9JTlRfU1RBVFVTLCAmaW50ZXJydXB0LCAxKTsKKwlyZXR1cm4gaW50ZXJydXB0OwogfSAvKiBjbGVhcl9pbnRlcnJ1cHRpb24oKSAqLwogCiAvKgotICogX3dhaXRfZm9yX2ludGVycnVwdF9zZXJpcnFfdGltZW91dAotICogQHBhcmFtOiB0cG0sIHRoZSBjaGlwIGRlc2NyaXB0aW9uCi0gKiBAcGFyYW06IHRpbWVvdXQsIHRoZSB0aW1lb3V0IG9mIHRoZSBpbnRlcnJ1cHQKLSAqIEByZXR1cm46IHRoZSBzdGF0dXMgb2YgdGhlIGludGVycnVwdGlvbi4KLSAqLwotc3RhdGljIGxvbmcgX3dhaXRfZm9yX2ludGVycnVwdF9zZXJpcnFfdGltZW91dChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsCi0JCQkJCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQpCi17Ci0JbG9uZyBzdGF0dXM7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3Qgc3QzM3pwMjRfcGxhdGZvcm1fZGF0YSAqcGluX2luZm9zOwotCi0JY2xpZW50ID0gKHN0cnVjdCBpMmNfY2xpZW50ICopVFBNX1ZQUklWKGNoaXApOwotCXBpbl9pbmZvcyA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0KLQlzdGF0dXMgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKLQkJCQkJJnBpbl9pbmZvcy0+aXJxX2RldGVjdGlvbiwKLQkJCQkJCXRpbWVvdXQpOwotCWlmIChzdGF0dXMgPiAwKQotCQllbmFibGVfaXJxKGdwaW9fdG9faXJxKHBpbl9pbmZvcy0+aW9fc2VyaXJxKSk7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQocGluX2luZm9zLT5pb19zZXJpcnEpOwotCi0JcmV0dXJuIHN0YXR1czsKLX0gLyogd2FpdF9mb3JfaW50ZXJydXB0X3NlcmlycV90aW1lb3V0KCkgKi8KLQotc3RhdGljIGludCB3YWl0X2Zvcl9zZXJpcnFfdGltZW91dChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIGJvb2wgY29uZGl0aW9uLAotCQkJCSB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCi17Ci0JaW50IHN0YXR1cyA9IDI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQotCWNsaWVudCA9IChzdHJ1Y3QgaTJjX2NsaWVudCAqKVRQTV9WUFJJVihjaGlwKTsKLQotCXN0YXR1cyA9IF93YWl0X2Zvcl9pbnRlcnJ1cHRfc2VyaXJxX3RpbWVvdXQoY2hpcCwgdGltZW91dCk7Ci0JaWYgKCFzdGF0dXMpIHsKLQkJc3RhdHVzID0gLUVCVVNZOwotCX0gZWxzZSB7Ci0JCWNsZWFyX2ludGVycnVwdGlvbihjbGllbnQpOwotCQlpZiAoY29uZGl0aW9uKQotCQkJc3RhdHVzID0gMTsKLQl9Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoKICAqIHRwbV9zdG1faTJjX2NhbmNlbCwgY2FuY2VsIGlzIG5vdCBpbXBsZW1lbnRlZC4KICAqIEBwYXJhbTogY2hpcCwgdGhlIHRwbV9jaGlwIGRlc2NyaXB0aW9uIGFzIHNwZWNpZmllZCBpbiBkcml2ZXIvY2hhci90cG0vdHBtLmgKICAqLwogc3RhdGljIHZvaWQgdHBtX3N0bV9pMmNfY2FuY2VsKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB0cG1fc3RtX2RldiAqdHBtX2RldjsKIAl1OCBkYXRhOwogCi0JY2xpZW50ID0gKHN0cnVjdCBpMmNfY2xpZW50ICopVFBNX1ZQUklWKGNoaXApOworCXRwbV9kZXYgPSAoc3RydWN0IHRwbV9zdG1fZGV2ICopVFBNX1ZQUklWKGNoaXApOwogCiAJZGF0YSA9IFRQTV9TVFNfQ09NTUFORF9SRUFEWTsKLQlJMkNfV1JJVEVfREFUQShjbGllbnQsIFRQTV9TVFMsICZkYXRhLCAxKTsKLQlpZiAoY2hpcC0+dmVuZG9yLmlycSkKLQkJd2FpdF9mb3Jfc2VyaXJxX3RpbWVvdXQoY2hpcCwgMSwgY2hpcC0+dmVuZG9yLnRpbWVvdXRfYSk7Ci19CS8qIHRwbV9zdG1faTJjX2NhbmNlbCgpICovCisJSTJDX1dSSVRFX0RBVEEodHBtX2RldiwgVFBNX1NUUywgJmRhdGEsIDEpOworfSAvKiB0cG1fc3RtX2kyY19jYW5jZWwoKSAqLwogCiAvKgogICogdHBtX3N0bV9zcGlfc3RhdHVzIHJldHVybiB0aGUgVFBNX1NUUyByZWdpc3RlcgpAQCAtMjMxLDEzICsyMDgsMTQgQEAKICAqLwogc3RhdGljIHU4IHRwbV9zdG1faTJjX3N0YXR1cyhzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgdHBtX3N0bV9kZXYgKnRwbV9kZXY7CiAJdTggZGF0YTsKLQljbGllbnQgPSAoc3RydWN0IGkyY19jbGllbnQgKilUUE1fVlBSSVYoY2hpcCk7CiAKLQlJMkNfUkVBRF9EQVRBKGNsaWVudCwgVFBNX1NUUywgJmRhdGEsIDEpOworCXRwbV9kZXYgPSAoc3RydWN0IHRwbV9zdG1fZGV2ICopVFBNX1ZQUklWKGNoaXApOworCisJSTJDX1JFQURfREFUQSh0cG1fZGV2LCBUUE1fU1RTLCAmZGF0YSwgMSk7CiAJcmV0dXJuIGRhdGE7Ci19CQkJCS8qIHRwbV9zdG1faTJjX3N0YXR1cygpICovCit9IC8qIHRwbV9zdG1faTJjX3N0YXR1cygpICovCiAKIAogLyoKQEAgLTI0NywyMCArMjI1LDE5IEBACiAgKi8KIHN0YXRpYyBpbnQgY2hlY2tfbG9jYWxpdHkoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHRwbV9zdG1fZGV2ICp0cG1fZGV2OwogCXU4IGRhdGE7CiAJdTggc3RhdHVzOwogCi0JY2xpZW50ID0gKHN0cnVjdCBpMmNfY2xpZW50ICopVFBNX1ZQUklWKGNoaXApOworCXRwbV9kZXYgPSAoc3RydWN0IHRwbV9zdG1fZGV2ICopVFBNX1ZQUklWKGNoaXApOwogCi0Jc3RhdHVzID0gSTJDX1JFQURfREFUQShjbGllbnQsIFRQTV9BQ0NFU1MsICZkYXRhLCAxKTsKKwlzdGF0dXMgPSBJMkNfUkVBRF9EQVRBKHRwbV9kZXYsIFRQTV9BQ0NFU1MsICZkYXRhLCAxKTsKIAlpZiAoc3RhdHVzICYmIChkYXRhICYKIAkJKFRQTV9BQ0NFU1NfQUNUSVZFX0xPQ0FMSVRZIHwgVFBNX0FDQ0VTU19WQUxJRCkpID09CiAJCShUUE1fQUNDRVNTX0FDVElWRV9MT0NBTElUWSB8IFRQTV9BQ0NFU1NfVkFMSUQpKQogCQlyZXR1cm4gY2hpcC0+dmVuZG9yLmxvY2FsaXR5OwogCiAJcmV0dXJuIC1FQUNDRVM7Ci0KIH0gLyogY2hlY2tfbG9jYWxpdHkoKSAqLwogCiAvKgpAQCAtMjcxLDM3ICsyNDgsMzEgQEAKIHN0YXRpYyBpbnQgcmVxdWVzdF9sb2NhbGl0eShzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCiB7CiAJdW5zaWduZWQgbG9uZyBzdG9wOwotCWxvbmcgcmM7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlsb25nIHJldDsKKwlzdHJ1Y3QgdHBtX3N0bV9kZXYgKnRwbV9kZXY7CiAJdTggZGF0YTsKIAotCWNsaWVudCA9IChzdHJ1Y3QgaTJjX2NsaWVudCAqKVRQTV9WUFJJVihjaGlwKTsKLQogCWlmIChjaGVja19sb2NhbGl0eShjaGlwKSA9PSBjaGlwLT52ZW5kb3IubG9jYWxpdHkpCiAJCXJldHVybiBjaGlwLT52ZW5kb3IubG9jYWxpdHk7CiAKKwl0cG1fZGV2ID0gKHN0cnVjdCB0cG1fc3RtX2RldiAqKVRQTV9WUFJJVihjaGlwKTsKKwogCWRhdGEgPSBUUE1fQUNDRVNTX1JFUVVFU1RfVVNFOwotCXJjID0gSTJDX1dSSVRFX0RBVEEoY2xpZW50LCBUUE1fQUNDRVNTLCAmZGF0YSwgMSk7Ci0JaWYgKHJjIDwgMCkKKwlyZXQgPSBJMkNfV1JJVEVfREFUQSh0cG1fZGV2LCBUUE1fQUNDRVNTLCAmZGF0YSwgMSk7CisJaWYgKHJldCA8IDApCiAJCWdvdG8gZW5kOwogCi0JaWYgKGNoaXAtPnZlbmRvci5pcnEpIHsKLQkJcmMgPSB3YWl0X2Zvcl9zZXJpcnFfdGltZW91dChjaGlwLCAoY2hlY2tfbG9jYWxpdHkKLQkJCQkJCSAgICAgICAoY2hpcCkgPj0gMCksCi0JCQkJCQkgICAgICBjaGlwLT52ZW5kb3IudGltZW91dF9hKTsKLQkJaWYgKHJjID4gMCkKKwlzdG9wID0gamlmZmllcyArIGNoaXAtPnZlbmRvci50aW1lb3V0X2E7CisKKwkvKiBSZXF1ZXN0IGxvY2FsaXR5IGlzIHVzdWFsbHkgZWZmZWN0aXZlIGFmdGVyIHRoZSByZXF1ZXN0ICovCisJZG8geworCQlpZiAoY2hlY2tfbG9jYWxpdHkoY2hpcCkgPj0gMCkKIAkJCXJldHVybiBjaGlwLT52ZW5kb3IubG9jYWxpdHk7Ci0JfSBlbHNlIHsKLQkJc3RvcCA9IGppZmZpZXMgKyBjaGlwLT52ZW5kb3IudGltZW91dF9hOwotCQlkbyB7Ci0JCQlpZiAoY2hlY2tfbG9jYWxpdHkoY2hpcCkgPj0gMCkKLQkJCQlyZXR1cm4gY2hpcC0+dmVuZG9yLmxvY2FsaXR5OwotCQkJbXNsZWVwKFRQTV9USU1FT1VUKTsKLQkJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgc3RvcCkpOwotCX0KLQlyYyA9IC1FQUNDRVM7CisJCW1zbGVlcChUUE1fVElNRU9VVCk7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgc3RvcCkpOworCXJldCA9IC1FQUNDRVM7CiBlbmQ6Ci0JcmV0dXJuIHJjOworCXJldHVybiByZXQ7CiB9IC8qIHJlcXVlc3RfbG9jYWxpdHkoKSAqLwogCiAvKgpAQCAtMzEwLDEzICsyODEsMTMgQEAKICAqLwogc3RhdGljIHZvaWQgcmVsZWFzZV9sb2NhbGl0eShzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgdHBtX3N0bV9kZXYgKnRwbV9kZXY7CiAJdTggZGF0YTsKIAotCWNsaWVudCA9IChzdHJ1Y3QgaTJjX2NsaWVudCAqKVRQTV9WUFJJVihjaGlwKTsKKwl0cG1fZGV2ID0gKHN0cnVjdCB0cG1fc3RtX2RldiAqKVRQTV9WUFJJVihjaGlwKTsKIAlkYXRhID0gVFBNX0FDQ0VTU19BQ1RJVkVfTE9DQUxJVFk7CiAKLQlJMkNfV1JJVEVfREFUQShjbGllbnQsIFRQTV9BQ0NFU1MsICZkYXRhLCAxKTsKKwlJMkNfV1JJVEVfREFUQSh0cG1fZGV2LCBUUE1fQUNDRVNTLCAmZGF0YSwgMSk7CiB9CiAKIC8qCkBAIC0zMjksMTkgKzMwMCwyMCBAQAogCXVuc2lnbmVkIGxvbmcgc3RvcDsKIAlpbnQgYnVyc3RjbnQsIHN0YXR1czsKIAl1OCB0cG1fcmVnLCB0ZW1wOworCXN0cnVjdCB0cG1fc3RtX2RldiAqdHBtX2RldjsKIAotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSAoc3RydWN0IGkyY19jbGllbnQgKilUUE1fVlBSSVYoY2hpcCk7CisJdHBtX2RldiA9IChzdHJ1Y3QgdHBtX3N0bV9kZXYgKilUUE1fVlBSSVYoY2hpcCk7CiAKIAlzdG9wID0gamlmZmllcyArIGNoaXAtPnZlbmRvci50aW1lb3V0X2Q7CiAJZG8gewogCQl0cG1fcmVnID0gVFBNX1NUUyArIDE7Ci0JCXN0YXR1cyA9IEkyQ19SRUFEX0RBVEEoY2xpZW50LCB0cG1fcmVnLCAmdGVtcCwgMSk7CisJCXN0YXR1cyA9IEkyQ19SRUFEX0RBVEEodHBtX2RldiwgdHBtX3JlZywgJnRlbXAsIDEpOwogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCWdvdG8gZW5kOwogCiAJCXRwbV9yZWcgPSB0cG1fcmVnICsgMTsKIAkJYnVyc3RjbnQgPSB0ZW1wOwotCQlzdGF0dXMgPSBJMkNfUkVBRF9EQVRBKGNsaWVudCwgdHBtX3JlZywgJnRlbXAsIDEpOworCQlzdGF0dXMgPSBJMkNfUkVBRF9EQVRBKHRwbV9kZXYsIHRwbV9yZWcsICZ0ZW1wLCAxKTsKIAkJaWYgKHN0YXR1cyA8IDApCiAJCQlnb3RvIGVuZDsKIApAQCAtMzU1LDM2ICszMjcsMTA3IEBACiAJcmV0dXJuIC1FQlVTWTsKIH0gLyogZ2V0X2J1cnN0Y291bnQoKSAqLwogCitzdGF0aWMgYm9vbCB3YWl0X2Zvcl90cG1fc3RhdF9jb25kKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggbWFzaywKKwkJCQlib29sIGNoZWNrX2NhbmNlbCwgYm9vbCAqY2FuY2VsZWQpCit7CisJdTggc3RhdHVzID0gY2hpcC0+b3BzLT5zdGF0dXMoY2hpcCk7CisKKwkqY2FuY2VsZWQgPSBmYWxzZTsKKwlpZiAoKHN0YXR1cyAmIG1hc2spID09IG1hc2spCisJCXJldHVybiB0cnVlOworCWlmIChjaGVja19jYW5jZWwgJiYgY2hpcC0+b3BzLT5yZXFfY2FuY2VsZWQoY2hpcCwgc3RhdHVzKSkgeworCQkqY2FuY2VsZWQgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogaW50ZXJydXB0X3RvX3N0YXR1cworICogQHBhcmFtOiBpcnFfbWFzaywgdGhlIGlycSBtYXNrIHZhbHVlIHRvIHdhaXQKKyAqIEByZXR1cm46IHRoZSBjb3JyZXNwb25kaW5nIHRwbV9zdHMgdmFsdWUKKyAqLworc3RhdGljIHU4IGludGVycnVwdF90b19zdGF0dXModTggaXJxX21hc2spCit7CisJdTggc3RhdHVzID0gMDsKKworCWlmICgoaXJxX21hc2sgJiBUUE1fSU5URl9TVFNfVkFMSURfSU5UKSA9PSBUUE1fSU5URl9TVFNfVkFMSURfSU5UKQorCQlzdGF0dXMgfD0gVFBNX1NUU19WQUxJRDsKKwlpZiAoKGlycV9tYXNrICYgVFBNX0lOVEZfREFUQV9BVkFJTF9JTlQpID09IFRQTV9JTlRGX0RBVEFfQVZBSUxfSU5UKQorCQlzdGF0dXMgfD0gVFBNX1NUU19EQVRBX0FWQUlMOworCWlmICgoaXJxX21hc2sgJiBUUE1fSU5URl9DTURfUkVBRFlfSU5UKSA9PSBUUE1fSU5URl9DTURfUkVBRFlfSU5UKQorCQlzdGF0dXMgfD0gVFBNX1NUU19DT01NQU5EX1JFQURZOworCisJcmV0dXJuIHN0YXR1czsKK30gLyogc3RhdHVzX3RvX2ludGVycnVwdCgpICovCisKIC8qCiAgKiB3YWl0X2Zvcl9zdGF0IHdhaXQgZm9yIGEgVFBNX1NUUyB2YWx1ZQogICogQHBhcmFtOiBjaGlwLCB0aGUgdHBtIGNoaXAgZGVzY3JpcHRpb24KICAqIEBwYXJhbTogbWFzaywgdGhlIHZhbHVlIG1hc2sgdG8gd2FpdAogICogQHBhcmFtOiB0aW1lb3V0LCB0aGUgdGltZW91dAogICogQHBhcmFtOiBxdWV1ZSwgdGhlIHdhaXQgcXVldWUuCisgKiBAcGFyYW06IGNoZWNrX2NhbmNlbCwgZG9lcyB0aGUgY29tbWFuZCBjYW4gYmUgY2FuY2VsbGVkID8KICAqIEByZXR1cm46IHRoZSB0cG0gc3RhdHVzLCAwIGlmIHN1Y2Nlc3MsIC1FVElNRSBpZiB0aW1lb3V0IGlzIHJlYWNoZWQuCiAgKi8KIHN0YXRpYyBpbnQgd2FpdF9mb3Jfc3RhdChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4IG1hc2ssIHVuc2lnbmVkIGxvbmcgdGltZW91dCwKLQkJCSB3YWl0X3F1ZXVlX2hlYWRfdCAqcXVldWUpCisJCQl3YWl0X3F1ZXVlX2hlYWRfdCAqcXVldWUsIGJvb2wgY2hlY2tfY2FuY2VsKQogewogCXVuc2lnbmVkIGxvbmcgc3RvcDsKLQlsb25nIHJjOwotCXU4IHN0YXR1czsKKwlpbnQgcmV0OworCWJvb2wgY2FuY2VsZWQgPSBmYWxzZTsKKwlib29sIGNvbmRpdGlvbjsKKwl1MzIgY3VyX2ludHJzOworCXU4IGludGVycnVwdCwgc3RhdHVzOworCXN0cnVjdCB0cG1fc3RtX2RldiAqdHBtX2RldjsKIAotCSBpZiAoY2hpcC0+dmVuZG9yLmlycSkgewotCQlyYyA9IHdhaXRfZm9yX3NlcmlycV90aW1lb3V0KGNoaXAsICgodHBtX3N0bV9pMmNfc3RhdHVzCi0JCQkJCQkJKGNoaXApICYgbWFzaykgPT0KLQkJCQkJCSAgICAgICBtYXNrKSwgdGltZW91dCk7Ci0JCWlmIChyYyA+IDApCisJdHBtX2RldiA9IChzdHJ1Y3QgdHBtX3N0bV9kZXYgKilUUE1fVlBSSVYoY2hpcCk7CisKKwkvKiBjaGVjayBjdXJyZW50IHN0YXR1cyAqLworCXN0YXR1cyA9IHRwbV9zdG1faTJjX3N0YXR1cyhjaGlwKTsKKwlpZiAoKHN0YXR1cyAmIG1hc2spID09IG1hc2spCisJCXJldHVybiAwOworCisJc3RvcCA9IGppZmZpZXMgKyB0aW1lb3V0OworCisJaWYgKGNoaXAtPnZlbmRvci5pcnEpIHsKKwkJY3VyX2ludHJzID0gdHBtX2Rldi0+aW50cnM7CisJCWludGVycnVwdCA9IGNsZWFyX2ludGVycnVwdGlvbih0cG1fZGV2KTsKKwkJZW5hYmxlX2lycShjaGlwLT52ZW5kb3IuaXJxKTsKKworYWdhaW46CisJCXRpbWVvdXQgPSBzdG9wIC0gamlmZmllczsKKwkJaWYgKChsb25nKSB0aW1lb3V0IDw9IDApCisJCQlyZXR1cm4gLTE7CisKKwkJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoKnF1ZXVlLAorCQkJCQljdXJfaW50cnMgIT0gdHBtX2Rldi0+aW50cnMsIHRpbWVvdXQpOworCisJCWludGVycnVwdCB8PSBjbGVhcl9pbnRlcnJ1cHRpb24odHBtX2Rldik7CisJCXN0YXR1cyA9IGludGVycnVwdF90b19zdGF0dXMoaW50ZXJydXB0KTsKKwkJY29uZGl0aW9uID0gd2FpdF9mb3JfdHBtX3N0YXRfY29uZChjaGlwLCBtYXNrLAorCQkJCQkJICAgY2hlY2tfY2FuY2VsLCAmY2FuY2VsZWQpOworCisJCWlmIChyZXQgPj0gMCAmJiBjb25kaXRpb24pIHsKKwkJCWlmIChjYW5jZWxlZCkKKwkJCQlyZXR1cm4gLUVDQU5DRUxFRDsKIAkJCXJldHVybiAwOworCQl9CisJCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTICYmIGZyZWV6aW5nKGN1cnJlbnQpKSB7CisJCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfU0lHUEVORElORyk7CisJCQlnb3RvIGFnYWluOworCQl9CisJCWRpc2FibGVfaXJxX25vc3luYyhjaGlwLT52ZW5kb3IuaXJxKTsKKwogCX0gZWxzZSB7Ci0JCXN0b3AgPSBqaWZmaWVzICsgdGltZW91dDsKIAkJZG8gewogCQkJbXNsZWVwKFRQTV9USU1FT1VUKTsKLQkJCXN0YXR1cyA9IHRwbV9zdG1faTJjX3N0YXR1cyhjaGlwKTsKKwkJCXN0YXR1cyA9IGNoaXAtPm9wcy0+c3RhdHVzKGNoaXApOwogCQkJaWYgKChzdGF0dXMgJiBtYXNrKSA9PSBtYXNrKQogCQkJCXJldHVybiAwOwogCQl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzdG9wKSk7CiAJfQorCiAJcmV0dXJuIC1FVElNRTsKIH0gLyogd2FpdF9mb3Jfc3RhdCgpICovCiAKQEAgLTM5NywyMiArNDQwLDI0IEBACiAgKi8KIHN0YXRpYyBpbnQgcmVjdl9kYXRhKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCWludCBzaXplID0gMCwgYnVyc3RjbnQsIGxlbjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCWludCBzaXplID0gMCwgYnVyc3RjbnQsIGxlbiwgcmV0OworCXN0cnVjdCB0cG1fc3RtX2RldiAqdHBtX2RldjsKIAotCWNsaWVudCA9IChzdHJ1Y3QgaTJjX2NsaWVudCAqKVRQTV9WUFJJVihjaGlwKTsKKwl0cG1fZGV2ID0gKHN0cnVjdCB0cG1fc3RtX2RldiAqKVRQTV9WUFJJVihjaGlwKTsKIAogCXdoaWxlIChzaXplIDwgY291bnQgJiYKIAkgICAgICAgd2FpdF9mb3Jfc3RhdChjaGlwLAogCQkJICAgICBUUE1fU1RTX0RBVEFfQVZBSUwgfCBUUE1fU1RTX1ZBTElELAogCQkJICAgICBjaGlwLT52ZW5kb3IudGltZW91dF9jLAotCQkJICAgICAmY2hpcC0+dmVuZG9yLnJlYWRfcXVldWUpCi0JICAgICAgID09IDApIHsKKwkJCSAgICAgJmNoaXAtPnZlbmRvci5yZWFkX3F1ZXVlLCB0cnVlKSA9PSAwKSB7CiAJCWJ1cnN0Y250ID0gZ2V0X2J1cnN0Y291bnQoY2hpcCk7CiAJCWlmIChidXJzdGNudCA8IDApCiAJCQlyZXR1cm4gYnVyc3RjbnQ7CiAJCWxlbiA9IG1pbl90KGludCwgYnVyc3RjbnQsIGNvdW50IC0gc2l6ZSk7Ci0JCUkyQ19SRUFEX0RBVEEoY2xpZW50LCBUUE1fREFUQV9GSUZPLCBidWYgKyBzaXplLCBsZW4pOworCQlyZXQgPSBJMkNfUkVBRF9EQVRBKHRwbV9kZXYsIFRQTV9EQVRBX0ZJRk8sIGJ1ZiArIHNpemUsIGxlbik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwogCQlzaXplICs9IGxlbjsKIAl9CiAJcmV0dXJuIHNpemU7CkBAIC00MjcsMTUgKzQ3MiwxNCBAQAogc3RhdGljIGlycXJldHVybl90IHRwbV9pb3NlcmlycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfaWQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3Qgc3QzM3pwMjRfcGxhdGZvcm1fZGF0YSAqcGluX2luZm9zOworCXN0cnVjdCB0cG1fc3RtX2RldiAqdHBtX2RldjsKIAotCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCXRwbV9kZXYgPSAoc3RydWN0IHRwbV9zdG1fZGV2ICopVFBNX1ZQUklWKGNoaXApOwogCi0JY2xpZW50ID0gKHN0cnVjdCBpMmNfY2xpZW50ICopVFBNX1ZQUklWKGNoaXApOwotCXBpbl9pbmZvcyA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdHBtX2Rldi0+aW50cnMrKzsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNoaXAtPnZlbmRvci5yZWFkX3F1ZXVlKTsKKwlkaXNhYmxlX2lycV9ub3N5bmMoY2hpcC0+dmVuZG9yLmlycSk7CiAKLQljb21wbGV0ZSgmcGluX2luZm9zLT5pcnFfZGV0ZWN0aW9uKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9IC8qIHRwbV9pb3NlcmlycV9oYW5kbGVyKCkgKi8KIApAQCAtNDU3LDEzICs1MDEsMTUgQEAKIAlpbnQgcmV0OwogCXU4IGRhdGE7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgdHBtX3N0bV9kZXYgKnRwbV9kZXY7CiAKLQlpZiAoY2hpcCA9PSBOVUxMKQorCWlmICghY2hpcCkKIAkJcmV0dXJuIC1FQlVTWTsKIAlpZiAobGVuIDwgVFBNX0hFQURFUl9TSVpFKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JY2xpZW50ID0gKHN0cnVjdCBpMmNfY2xpZW50ICopVFBNX1ZQUklWKGNoaXApOworCXRwbV9kZXYgPSAoc3RydWN0IHRwbV9zdG1fZGV2ICopVFBNX1ZQUklWKGNoaXApOworCWNsaWVudCA9IHRwbV9kZXYtPmNsaWVudDsKIAogCWNsaWVudC0+ZmxhZ3MgPSAwOwogCkBAIC00NzYsNyArNTIyLDcgQEAKIAkJdHBtX3N0bV9pMmNfY2FuY2VsKGNoaXApOwogCQlpZiAod2FpdF9mb3Jfc3RhdAogCQkgICAgKGNoaXAsIFRQTV9TVFNfQ09NTUFORF9SRUFEWSwgY2hpcC0+dmVuZG9yLnRpbWVvdXRfYiwKLQkJICAgICAmY2hpcC0+dmVuZG9yLmludF9xdWV1ZSkgPCAwKSB7CisJCSAgICAgJmNoaXAtPnZlbmRvci5yZWFkX3F1ZXVlLCBmYWxzZSkgPCAwKSB7CiAJCQlyZXQgPSAtRVRJTUU7CiAJCQlnb3RvIG91dF9lcnI7CiAJCX0KQEAgLTQ4Nyw3ICs1MzMsNyBAQAogCQlpZiAoYnVyc3RjbnQgPCAwKQogCQkJcmV0dXJuIGJ1cnN0Y250OwogCQlzaXplID0gbWluX3QoaW50LCBsZW4gLSBpIC0gMSwgYnVyc3RjbnQpOwotCQlyZXQgPSBJMkNfV1JJVEVfREFUQShjbGllbnQsIFRQTV9EQVRBX0ZJRk8sIGJ1Ziwgc2l6ZSk7CisJCXJldCA9IEkyQ19XUklURV9EQVRBKHRwbV9kZXYsIFRQTV9EQVRBX0ZJRk8sIGJ1ZiArIGksIHNpemUpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0X2VycjsKIApAQCAtNTAwLDcgKzU0Niw3IEBACiAJCWdvdG8gb3V0X2VycjsKIAl9CiAKLQlyZXQgPSBJMkNfV1JJVEVfREFUQShjbGllbnQsIFRQTV9EQVRBX0ZJRk8sIGJ1ZiArIGxlbiAtIDEsIDEpOworCXJldCA9IEkyQ19XUklURV9EQVRBKHRwbV9kZXYsIFRQTV9EQVRBX0ZJRk8sIGJ1ZiArIGxlbiAtIDEsIDEpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF9lcnI7CiAKQEAgLTUxMSw3ICs1NTcsNyBAQAogCX0KIAogCWRhdGEgPSBUUE1fU1RTX0dPOwotCUkyQ19XUklURV9EQVRBKGNsaWVudCwgVFBNX1NUUywgJmRhdGEsIDEpOworCUkyQ19XUklURV9EQVRBKHRwbV9kZXYsIFRQTV9TVFMsICZkYXRhLCAxKTsKIAogCXJldHVybiBsZW47CiBvdXRfZXJyOgpAQCAtNTI2LDcgKzU3Miw3IEBACiAgKiBAcGFyYW06IGJ1ZiwJdGhlIGJ1ZmZlciB0byBzdG9yZSBkYXRhcy4KICAqIEBwYXJhbTogY291bnQsIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gc2VuZC4KICAqIEByZXR1cm46IEluIGNhc2Ugb2Ygc3VjY2VzcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkLgotICoJCUluIG90aGVyIGNhc2UsIGEgPCAwIHZhbHVlIGRlc2NyaWJpbmcgdGhlIGlzc3VlLgorICoJICAgIEluIG90aGVyIGNhc2UsIGEgPCAwIHZhbHVlIGRlc2NyaWJpbmcgdGhlIGlzc3VlLgogICovCiBzdGF0aWMgaW50IHRwbV9zdG1faTJjX3JlY3Yoc3RydWN0IHRwbV9jaGlwICpjaGlwLCB1bnNpZ25lZCBjaGFyICpidWYsCiAJCQkgICAgc2l6ZV90IGNvdW50KQpAQCAtNTM0LDcgKzU4MCw3IEBACiAJaW50IHNpemUgPSAwOwogCWludCBleHBlY3RlZDsKIAotCWlmIChjaGlwID09IE5VTEwpCisJaWYgKCFjaGlwKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKGNvdW50IDwgVFBNX0hFQURFUl9TSVpFKSB7CkBAIC01NDQsNyArNTkwLDcgQEAKIAogCXNpemUgPSByZWN2X2RhdGEoY2hpcCwgYnVmLCBUUE1fSEVBREVSX1NJWkUpOwogCWlmIChzaXplIDwgVFBNX0hFQURFUl9TSVpFKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQgaGVhZGVyXG4iKTsKKwkJZGV2X2VycihjaGlwLT5wZGV2LCAiVW5hYmxlIHRvIHJlYWQgaGVhZGVyXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC01NTUsOSArNjAxLDkgQEAKIAl9CiAKIAlzaXplICs9IHJlY3ZfZGF0YShjaGlwLCAmYnVmW1RQTV9IRUFERVJfU0laRV0sCi0JCQkJCWV4cGVjdGVkIC0gVFBNX0hFQURFUl9TSVpFKTsKKwkJCWV4cGVjdGVkIC0gVFBNX0hFQURFUl9TSVpFKTsKIAlpZiAoc2l6ZSA8IGV4cGVjdGVkKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQgcmVtYWluZGVyIG9mIHJlc3VsdFxuIik7CisJCWRldl9lcnIoY2hpcC0+cGRldiwgIlVuYWJsZSB0byByZWFkIHJlbWFpbmRlciBvZiByZXN1bHRcbiIpOwogCQlzaXplID0gLUVUSU1FOwogCQlnb3RvIG91dDsKIAl9CkBAIC01NjgsNyArNjE0LDcgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAotc3RhdGljIGJvb2wgdHBtX3N0MzNfaTJjX3JlcV9jYW5jZWxlZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4IHN0YXR1cykKK3N0YXRpYyBib29sIHRwbV9zdG1faTJjX3JlcV9jYW5jZWxlZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4IHN0YXR1cykKIHsKIAlyZXR1cm4gKHN0YXR1cyA9PSBUUE1fU1RTX0NPTU1BTkRfUkVBRFkpOwogfQpAQCAtNTgwLDc1ICs2MjYsMTM0IEBACiAJLnN0YXR1cyA9IHRwbV9zdG1faTJjX3N0YXR1cywKIAkucmVxX2NvbXBsZXRlX21hc2sgPSBUUE1fU1RTX0RBVEFfQVZBSUwgfCBUUE1fU1RTX1ZBTElELAogCS5yZXFfY29tcGxldGVfdmFsID0gVFBNX1NUU19EQVRBX0FWQUlMIHwgVFBNX1NUU19WQUxJRCwKLQkucmVxX2NhbmNlbGVkID0gdHBtX3N0MzNfaTJjX3JlcV9jYW5jZWxlZCwKKwkucmVxX2NhbmNlbGVkID0gdHBtX3N0bV9pMmNfcmVxX2NhbmNlbGVkLAogfTsKIAotc3RhdGljIGludCBpbnRlcnJ1cHRzOwotbW9kdWxlX3BhcmFtKGludGVycnVwdHMsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGludGVycnVwdHMsICJFbmFibGUgaW50ZXJydXB0cyIpOworI2lmZGVmIENPTkZJR19PRgorc3RhdGljIGludCB0cG1fc3RtX2kyY19vZl9yZXF1ZXN0X3Jlc291cmNlcyhzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwcDsKKwlzdHJ1Y3QgdHBtX3N0bV9kZXYgKnRwbV9kZXYgPSAoc3RydWN0IHRwbV9zdG1fZGV2ICopVFBNX1ZQUklWKGNoaXApOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0cG1fZGV2LT5jbGllbnQ7CisJaW50IGdwaW87CisJaW50IHJldDsKIAotc3RhdGljIGludCBwb3dlcl9tZ3QgPSAxOwotbW9kdWxlX3BhcmFtKHBvd2VyX21ndCwgaW50LCAwNDQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocG93ZXJfbWd0LCAiUG93ZXIgTWFuYWdlbWVudCIpOworCXBwID0gY2xpZW50LT5kZXYub2Zfbm9kZTsKKwlpZiAoIXBwKSB7CisJCWRldl9lcnIoY2hpcC0+cGRldiwgIk5vIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBHZXQgR1BJTyBmcm9tIGRldmljZSB0cmVlICovCisJZ3BpbyA9IG9mX2dldF9uYW1lZF9ncGlvKHBwLCAibHBjcGQtZ3Bpb3MiLCAwKTsKKwlpZiAoZ3BpbyA8IDApIHsKKwkJZGV2X2VycihjaGlwLT5wZGV2LCAiRmFpbGVkIHRvIHJldHJpZXZlIGxwY3BkLWdwaW9zIGZyb20gZHRzLlxuIik7CisJCXRwbV9kZXYtPmlvX2xwY3BkID0gLTE7CisJCS8qCisJCSAqIGxwY3BkIHBpbiBpcyBub3Qgc3BlY2lmaWVkLiBUaGlzIGlzIG5vdCBhbiBpc3N1ZSBhcworCQkgKiBwb3dlciBtYW5hZ2VtZW50IGNhbiBiZSBhbHNvIG1hbmFnZWQgYnkgVFBNIHNwZWNpZmljCisJCSAqIGNvbW1hbmRzLiBTbyBsZWF2ZSB3aXRoIGEgc3VjY2VzcyBzdGF0dXMgY29kZS4KKwkJICovCisJCXJldHVybiAwOworCX0KKwkvKiBHUElPIHJlcXVlc3QgYW5kIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSBkZXZtX2dwaW9fcmVxdWVzdF9vbmUoJmNsaWVudC0+ZGV2LCBncGlvLAorCQkJR1BJT0ZfT1VUX0lOSVRfSElHSCwgIlRQTSBJTyBMUENQRCIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihjaGlwLT5wZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgbHBjcGQgcGluXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXRwbV9kZXYtPmlvX2xwY3BkID0gZ3BpbzsKKworCXJldHVybiAwOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgdHBtX3N0bV9pMmNfb2ZfcmVxdWVzdF9yZXNvdXJjZXMoc3RydWN0IHRwbV9jaGlwICpjaGlwKQoreworCXJldHVybiAtRU5PREVWOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgdHBtX3N0bV9pMmNfcmVxdWVzdF9yZXNvdXJjZXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkJIHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3Qgc3QzM3pwMjRfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IHRwbV9zdG1fZGV2ICp0cG1fZGV2ID0gKHN0cnVjdCB0cG1fc3RtX2RldiAqKVRQTV9WUFJJVihjaGlwKTsKKwlpbnQgcmV0OworCisJcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycihjaGlwLT5wZGV2LCAiTm8gcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIHN0b3JlIGZvciBsYXRlIHVzZSAqLworCXRwbV9kZXYtPmlvX2xwY3BkID0gcGRhdGEtPmlvX2xwY3BkOworCisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmlvX2xwY3BkKSkgeworCQlyZXQgPSBkZXZtX2dwaW9fcmVxdWVzdF9vbmUoJmNsaWVudC0+ZGV2LAorCQkJCXBkYXRhLT5pb19scGNwZCwgR1BJT0ZfT1VUX0lOSVRfSElHSCwKKwkJCQkiVFBNIElPX0xQQ1BEIik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoY2hpcC0+cGRldiwgIiVzIDogcmVzZXQgZ3Bpb19yZXF1ZXN0IGZhaWxlZFxuIiwKKwkJCQlfX0ZJTEVfXyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CiAKIC8qCi0gKiB0cG1fc3QzM19pMmNfcHJvYmUgaW5pdGlhbGl6ZSB0aGUgVFBNIGRldmljZQorICogdHBtX3N0bV9pMmNfcHJvYmUgaW5pdGlhbGl6ZSB0aGUgVFBNIGRldmljZQogICogQHBhcmFtOiBjbGllbnQsIHRoZSBpMmNfY2xpZW50IGRyZXNjcmlwdGlvbiAoVFBNIEkyQyBkZXNjcmlwdGlvbikuCiAgKiBAcGFyYW06IGlkLCB0aGUgaTJjX2RldmljZV9pZCBzdHJ1Y3QuCiAgKiBAcmV0dXJuOiAwIGluIGNhc2Ugb2Ygc3VjY2Vzcy4KICAqCSAtMSBpbiBvdGhlciBjYXNlLgogICovCiBzdGF0aWMgaW50Ci10cG1fc3QzM19pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQordHBtX3N0bV9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewotCWludCBlcnI7Ci0JdTggaW50bWFzazsKKwlpbnQgcmV0OworCXU4IGludG1hc2sgPSAwOwogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcDsKIAlzdHJ1Y3Qgc3QzM3pwMjRfcGxhdGZvcm1fZGF0YSAqcGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgdHBtX3N0bV9kZXYgKnRwbV9kZXY7CiAKLQlpZiAoY2xpZW50ID09IE5VTEwpIHsKKwlpZiAoIWNsaWVudCkgewogCQlwcl9pbmZvKCIlczogaTJjIGNsaWVudCBpcyBOVUxMLiBEZXZpY2Ugbm90IGFjY2Vzc2libGUuXG4iLAogCQkJX19mdW5jX18pOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVuZDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKIAkJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiY2xpZW50IG5vdCBpMmMgY2FwYWJsZVxuIik7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gZW5kOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQljaGlwID0gdHBtX3JlZ2lzdGVyX2hhcmR3YXJlKCZjbGllbnQtPmRldiwgJnN0X2kyY190cG0pOwotCWlmICghY2hpcCkgewotCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJmYWlsIGNoaXBcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIGVuZDsKLQl9CisJdHBtX2RldiA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZihzdHJ1Y3QgdHBtX3N0bV9kZXYpLAorCQkJICAgICAgIEdGUF9LRVJORUwpOworCWlmICghdHBtX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljaGlwID0gdHBtbV9jaGlwX2FsbG9jKCZjbGllbnQtPmRldiwgJnN0X2kyY190cG0pOworCWlmIChJU19FUlIoY2hpcCkpCisJCXJldHVybiBQVFJfRVJSKGNoaXApOworCisJVFBNX1ZQUklWKGNoaXApID0gdHBtX2RldjsKKwl0cG1fZGV2LT5jbGllbnQgPSBjbGllbnQ7CiAKIAlwbGF0Zm9ybV9kYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKLQotCWlmICghcGxhdGZvcm1fZGF0YSkgewotCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJjaGlwIG5vdCBhdmFpbGFibGVcbiIpOwotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIF90cG1fY2xlYW5fYW5zd2VyOworCWlmICghcGxhdGZvcm1fZGF0YSAmJiBjbGllbnQtPmRldi5vZl9ub2RlKSB7CisJCXJldCA9IHRwbV9zdG1faTJjX29mX3JlcXVlc3RfcmVzb3VyY2VzKGNoaXApOworCQlpZiAocmV0KQorCQkJZ290byBfdHBtX2NsZWFuX2Fuc3dlcjsKKwl9IGVsc2UgaWYgKHBsYXRmb3JtX2RhdGEpIHsKKwkJcmV0ID0gdHBtX3N0bV9pMmNfcmVxdWVzdF9yZXNvdXJjZXMoY2xpZW50LCBjaGlwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gX3RwbV9jbGVhbl9hbnN3ZXI7CiAJfQogCi0JcGxhdGZvcm1fZGF0YS0+dHBtX2kyY19idWZmZXJbMF0gPQotCSAgICBrbWFsbG9jKFRQTV9CVUZTSVpFICogc2l6ZW9mKHU4KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBsYXRmb3JtX2RhdGEtPnRwbV9pMmNfYnVmZmVyWzBdID09IE5VTEwpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBfdHBtX2NsZWFuX2Fuc3dlcjsKLQl9Ci0JcGxhdGZvcm1fZGF0YS0+dHBtX2kyY19idWZmZXJbMV0gPQotCSAgICBrbWFsbG9jKFRQTV9CVUZTSVpFICogc2l6ZW9mKHU4KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBsYXRmb3JtX2RhdGEtPnRwbV9pMmNfYnVmZmVyWzFdID09IE5VTEwpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBfdHBtX2NsZWFuX3Jlc3BvbnNlMTsKLQl9Ci0KLQlUUE1fVlBSSVYoY2hpcCkgPSBjbGllbnQ7Ci0KIAljaGlwLT52ZW5kb3IudGltZW91dF9hID0gbXNlY3NfdG9famlmZmllcyhUSVNfU0hPUlRfVElNRU9VVCk7CiAJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYiA9IG1zZWNzX3RvX2ppZmZpZXMoVElTX0xPTkdfVElNRU9VVCk7CiAJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYyA9IG1zZWNzX3RvX2ppZmZpZXMoVElTX1NIT1JUX1RJTUVPVVQpOwpAQCAtNjU2LDU5ICs3NjEsNDQgQEAKIAogCWNoaXAtPnZlbmRvci5sb2NhbGl0eSA9IExPQ0FMSVRZMDsKIAotCWlmIChwb3dlcl9tZ3QpIHsKLQkJZXJyID0gZ3Bpb19yZXF1ZXN0KHBsYXRmb3JtX2RhdGEtPmlvX2xwY3BkLCAiVFBNIElPX0xQQ1BEIik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIF9ncGlvX2luaXQxOwotCQlncGlvX3NldF92YWx1ZShwbGF0Zm9ybV9kYXRhLT5pb19scGNwZCwgMSk7Ci0JfQorCWlmIChjbGllbnQtPmlycSkgeworCQkvKiBJTlRFUlJVUFQgU2V0dXAgKi8KKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2hpcC0+dmVuZG9yLnJlYWRfcXVldWUpOworCQl0cG1fZGV2LT5pbnRycyA9IDA7CiAKLQlpZiAoaW50ZXJydXB0cykgewotCQlpbml0X2NvbXBsZXRpb24oJnBsYXRmb3JtX2RhdGEtPmlycV9kZXRlY3Rpb24pOwogCQlpZiAocmVxdWVzdF9sb2NhbGl0eShjaGlwKSAhPSBMT0NBTElUWTApIHsKLQkJCWVyciA9IC1FTk9ERVY7Ci0JCQlnb3RvIF90cG1fY2xlYW5fcmVzcG9uc2UyOworCQkJcmV0ID0gLUVOT0RFVjsKKwkJCWdvdG8gX3RwbV9jbGVhbl9hbnN3ZXI7CiAJCX0KLQkJZXJyID0gZ3Bpb19yZXF1ZXN0KHBsYXRmb3JtX2RhdGEtPmlvX3NlcmlycSwgIlRQTSBJT19TRVJJUlEiKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gX2dwaW9faW5pdDI7CiAKLQkJY2xlYXJfaW50ZXJydXB0aW9uKGNsaWVudCk7Ci0JCWVyciA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKHBsYXRmb3JtX2RhdGEtPmlvX3NlcmlycSksCi0JCQkJJnRwbV9pb3NlcmlycV9oYW5kbGVyLAorCQljbGVhcl9pbnRlcnJ1cHRpb24odHBtX2Rldik7CisJCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJmNsaWVudC0+ZGV2LCBjbGllbnQtPmlycSwKKwkJCQl0cG1faW9zZXJpcnFfaGFuZGxlciwKIAkJCQlJUlFGX1RSSUdHRVJfSElHSCwKIAkJCQkiVFBNIFNFUklSUSBtYW5hZ2VtZW50IiwgY2hpcCk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlkZXZfZXJyKGNoaXAtPmRldiAsICJUUE0gU0VSSVJRIHNpZ25hbHMgJWQgbm90IGF2YWlsYWJsZVxuIiwKLQkJCQlncGlvX3RvX2lycShwbGF0Zm9ybV9kYXRhLT5pb19zZXJpcnEpKTsKLQkJCWdvdG8gX2lycV9zZXQ7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGNoaXAtPnBkZXYsICJUUE0gU0VSSVJRIHNpZ25hbHMgJWQgbm90IGF2YWlsYWJsZVxuIiwKKwkJCQljbGllbnQtPmlycSk7CisJCQlnb3RvIF90cG1fY2xlYW5fYW5zd2VyOwogCQl9CiAKLQkJZXJyID0gSTJDX1JFQURfREFUQShjbGllbnQsIFRQTV9JTlRfRU5BQkxFLCAmaW50bWFzaywgMSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBfaXJxX3NldDsKLQogCQlpbnRtYXNrIHw9IFRQTV9JTlRGX0NNRF9SRUFEWV9JTlQKLQkJCXwgIFRQTV9JTlRGX0ZJRk9fQVZBTEFJQkxFX0lOVAotCQkJfCAgVFBNX0lOVEZfV0FLRV9VUF9SRUFEWV9JTlQKLQkJCXwgIFRQTV9JTlRGX0xPQ0FMSVRZX0NIQU5HRV9JTlQKIAkJCXwgIFRQTV9JTlRGX1NUU19WQUxJRF9JTlQKIAkJCXwgIFRQTV9JTlRGX0RBVEFfQVZBSUxfSU5UOwogCi0JCWVyciA9IEkyQ19XUklURV9EQVRBKGNsaWVudCwgVFBNX0lOVF9FTkFCTEUsICZpbnRtYXNrLCAxKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIF9pcnFfc2V0OworCQlyZXQgPSBJMkNfV1JJVEVfREFUQSh0cG1fZGV2LCBUUE1fSU5UX0VOQUJMRSwgJmludG1hc2ssIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gX3RwbV9jbGVhbl9hbnN3ZXI7CiAKIAkJaW50bWFzayA9IFRQTV9HTE9CQUxfSU5UX0VOQUJMRTsKLQkJZXJyID0gSTJDX1dSSVRFX0RBVEEoY2xpZW50LCAoVFBNX0lOVF9FTkFCTEUgKyAzKSwgJmludG1hc2ssIDEpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gX2lycV9zZXQ7CisJCXJldCA9IEkyQ19XUklURV9EQVRBKHRwbV9kZXYsIChUUE1fSU5UX0VOQUJMRSArIDMpLAorCQkJCSAgICAgJmludG1hc2ssIDEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gX3RwbV9jbGVhbl9hbnN3ZXI7CiAKLQkJZXJyID0gSTJDX1JFQURfREFUQShjbGllbnQsIFRQTV9JTlRfU1RBVFVTLCAmaW50bWFzaywgMSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJZ290byBfaXJxX3NldDsKKwkJY2hpcC0+dmVuZG9yLmlycSA9IGNsaWVudC0+aXJxOwogCi0JCWNoaXAtPnZlbmRvci5pcnEgPSBpbnRlcnJ1cHRzOworCQlkaXNhYmxlX2lycV9ub3N5bmMoY2hpcC0+dmVuZG9yLmlycSk7CiAKIAkJdHBtX2dlbl9pbnRlcnJ1cHQoY2hpcCk7CiAJfQpAQCAtNzE2LDEzMCArODA2LDEwNiBAQAogCXRwbV9nZXRfdGltZW91dHMoY2hpcCk7CiAJdHBtX2RvX3NlbGZ0ZXN0KGNoaXApOwogCi0JZGV2X2luZm8oY2hpcC0+ZGV2LCAiVFBNIEkyQyBJbml0aWFsaXplZFxuIik7Ci0JcmV0dXJuIDA7Ci1faXJxX3NldDoKLQlmcmVlX2lycShncGlvX3RvX2lycShwbGF0Zm9ybV9kYXRhLT5pb19zZXJpcnEpLCAodm9pZCAqKWNoaXApOwotX2dwaW9faW5pdDI6Ci0JaWYgKGludGVycnVwdHMpCi0JCWdwaW9fZnJlZShwbGF0Zm9ybV9kYXRhLT5pb19zZXJpcnEpOwotX2dwaW9faW5pdDE6Ci0JaWYgKHBvd2VyX21ndCkKLQkJZ3Bpb19mcmVlKHBsYXRmb3JtX2RhdGEtPmlvX2xwY3BkKTsKLV90cG1fY2xlYW5fcmVzcG9uc2UyOgotCWt6ZnJlZShwbGF0Zm9ybV9kYXRhLT50cG1faTJjX2J1ZmZlclsxXSk7Ci0JcGxhdGZvcm1fZGF0YS0+dHBtX2kyY19idWZmZXJbMV0gPSBOVUxMOwotX3RwbV9jbGVhbl9yZXNwb25zZTE6Ci0Ja3pmcmVlKHBsYXRmb3JtX2RhdGEtPnRwbV9pMmNfYnVmZmVyWzBdKTsKLQlwbGF0Zm9ybV9kYXRhLT50cG1faTJjX2J1ZmZlclswXSA9IE5VTEw7CisJcmV0dXJuIHRwbV9jaGlwX3JlZ2lzdGVyKGNoaXApOwogX3RwbV9jbGVhbl9hbnN3ZXI6Ci0JdHBtX3JlbW92ZV9oYXJkd2FyZShjaGlwLT5kZXYpOwotZW5kOgotCXByX2luZm8oIlRQTSBJMkMgaW5pdGlhbGlzYXRpb24gZmFpbFxuIik7Ci0JcmV0dXJuIGVycjsKKwlkZXZfaW5mbyhjaGlwLT5wZGV2LCAiVFBNIEkyQyBpbml0aWFsaXNhdGlvbiBmYWlsXG4iKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgotICogdHBtX3N0MzNfaTJjX3JlbW92ZSByZW1vdmUgdGhlIFRQTSBkZXZpY2UKLSAqIEBwYXJhbTogY2xpZW50LCB0aGUgaTJjX2NsaWVudCBkcmVzY3JpcHRpb24gKFRQTSBJMkMgZGVzY3JpcHRpb24pLgotCQljbGVhcl9iaXQoMCwgJmNoaXAtPmlzX29wZW4pOworICogdHBtX3N0bV9pMmNfcmVtb3ZlIHJlbW92ZSB0aGUgVFBNIGRldmljZQorICogQHBhcmFtOiBjbGllbnQsIHRoZSBpMmNfY2xpZW50IGRlc2NyaXB0aW9uIChUUE0gSTJDIGRlc2NyaXB0aW9uKS4KICAqIEByZXR1cm46IDAgaW4gY2FzZSBvZiBzdWNjZXNzLgogICovCi1zdGF0aWMgaW50IHRwbV9zdDMzX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgdHBtX3N0bV9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IHRwbV9jaGlwICpjaGlwID0gKHN0cnVjdCB0cG1fY2hpcCAqKWkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXN0cnVjdCBzdDMzenAyNF9wbGF0Zm9ybV9kYXRhICpwaW5faW5mb3MgPQotCQkoKHN0cnVjdCBpMmNfY2xpZW50ICopVFBNX1ZQUklWKGNoaXApKS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwID0KKwkJKHN0cnVjdCB0cG1fY2hpcCAqKSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCWlmIChwaW5faW5mb3MgIT0gTlVMTCkgewotCQlmcmVlX2lycShwaW5faW5mb3MtPmlvX3NlcmlycSwgY2hpcCk7Ci0KLQkJZ3Bpb19mcmVlKHBpbl9pbmZvcy0+aW9fc2VyaXJxKTsKLQkJZ3Bpb19mcmVlKHBpbl9pbmZvcy0+aW9fbHBjcGQpOwotCi0JCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKLQotCQlpZiAocGluX2luZm9zLT50cG1faTJjX2J1ZmZlclsxXSAhPSBOVUxMKSB7Ci0JCQlremZyZWUocGluX2luZm9zLT50cG1faTJjX2J1ZmZlclsxXSk7Ci0JCQlwaW5faW5mb3MtPnRwbV9pMmNfYnVmZmVyWzFdID0gTlVMTDsKLQkJfQotCQlpZiAocGluX2luZm9zLT50cG1faTJjX2J1ZmZlclswXSAhPSBOVUxMKSB7Ci0JCQlremZyZWUocGluX2luZm9zLT50cG1faTJjX2J1ZmZlclswXSk7Ci0JCQlwaW5faW5mb3MtPnRwbV9pMmNfYnVmZmVyWzBdID0gTlVMTDsKLQkJfQotCX0KKwlpZiAoY2hpcCkKKwkJdHBtX2NoaXBfdW5yZWdpc3RlcihjaGlwKTsKIAogCXJldHVybiAwOwogfQogCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAvKgotICogdHBtX3N0MzNfaTJjX3BtX3N1c3BlbmQgc3VzcGVuZCB0aGUgVFBNIGRldmljZQorICogdHBtX3N0bV9pMmNfcG1fc3VzcGVuZCBzdXNwZW5kIHRoZSBUUE0gZGV2aWNlCiAgKiBAcGFyYW06IGNsaWVudCwgdGhlIGkyY19jbGllbnQgZHJlc2NyaXB0aW9uIChUUE0gSTJDIGRlc2NyaXB0aW9uKS4KICAqIEBwYXJhbTogbWVzZywgdGhlIHBvd2VyIG1hbmFnZW1lbnQgbWVzc2FnZS4KICAqIEByZXR1cm46IDAgaW4gY2FzZSBvZiBzdWNjZXNzLgogICovCi1zdGF0aWMgaW50IHRwbV9zdDMzX2kyY19wbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgdHBtX3N0bV9pMmNfcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHN0MzN6cDI0X3BsYXRmb3JtX2RhdGEgKnBpbl9pbmZvcyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChwb3dlcl9tZ3QpIHsKKwlpZiAoZ3Bpb19pc192YWxpZChwaW5faW5mb3MtPmlvX2xwY3BkKSkKIAkJZ3Bpb19zZXRfdmFsdWUocGluX2luZm9zLT5pb19scGNwZCwgMCk7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXJldCA9IHRwbV9wbV9zdXNwZW5kKGRldik7Ci0JfQorCiAJcmV0dXJuIHJldDsKLX0JCQkJLyogdHBtX3N0MzNfaTJjX3N1c3BlbmQoKSAqLworfSAvKiB0cG1fc3RtX2kyY19zdXNwZW5kKCkgKi8KIAogLyoKLSAqIHRwbV9zdDMzX2kyY19wbV9yZXN1bWUgcmVzdW1lIHRoZSBUUE0gZGV2aWNlCisgKiB0cG1fc3RtX2kyY19wbV9yZXN1bWUgcmVzdW1lIHRoZSBUUE0gZGV2aWNlCiAgKiBAcGFyYW06IGNsaWVudCwgdGhlIGkyY19jbGllbnQgZHJlc2NyaXB0aW9uIChUUE0gSTJDIGRlc2NyaXB0aW9uKS4KICAqIEByZXR1cm46IDAgaW4gY2FzZSBvZiBzdWNjZXNzLgogICovCi1zdGF0aWMgaW50IHRwbV9zdDMzX2kyY19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCB0cG1fc3RtX2kyY19wbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzdDMzenAyNF9wbGF0Zm9ybV9kYXRhICpwaW5faW5mb3MgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKIAlpbnQgcmV0ID0gMDsKIAotCWlmIChwb3dlcl9tZ3QpIHsKKwlpZiAoZ3Bpb19pc192YWxpZChwaW5faW5mb3MtPmlvX2xwY3BkKSkgewogCQlncGlvX3NldF92YWx1ZShwaW5faW5mb3MtPmlvX2xwY3BkLCAxKTsKLQkJcmV0ID0gd2FpdF9mb3Jfc2VyaXJxX3RpbWVvdXQoY2hpcCwKLQkJCQkJICAoY2hpcC0+b3BzLT5zdGF0dXMoY2hpcCkgJgotCQkJCQkgIFRQTV9TVFNfVkFMSUQpID09IFRQTV9TVFNfVkFMSUQsCi0JCQkJCSAgY2hpcC0+dmVuZG9yLnRpbWVvdXRfYik7CisJCXJldCA9IHdhaXRfZm9yX3N0YXQoY2hpcCwKKwkJCQlUUE1fU1RTX1ZBTElELCBjaGlwLT52ZW5kb3IudGltZW91dF9iLAorCQkJCSZjaGlwLT52ZW5kb3IucmVhZF9xdWV1ZSwgZmFsc2UpOwogCX0gZWxzZSB7CiAJCXJldCA9IHRwbV9wbV9yZXN1bWUoZGV2KTsKIAkJaWYgKCFyZXQpCiAJCQl0cG1fZG9fc2VsZnRlc3QoY2hpcCk7CiAJfQogCXJldHVybiByZXQ7Ci19CQkJCS8qIHRwbV9zdDMzX2kyY19wbV9yZXN1bWUoKSAqLworfSAvKiB0cG1fc3RtX2kyY19wbV9yZXN1bWUoKSAqLwogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0cG1fc3QzM19pMmNfaWRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0cG1fc3RtX2kyY19pZFtdID0gewogCXtUUE1fU1QzM19JMkMsIDB9LAogCXt9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHRwbV9zdDMzX2kyY19pZCk7Ci1zdGF0aWMgU0lNUExFX0RFVl9QTV9PUFModHBtX3N0MzNfaTJjX29wcywgdHBtX3N0MzNfaTJjX3BtX3N1c3BlbmQsCi0JdHBtX3N0MzNfaTJjX3BtX3Jlc3VtZSk7Ci1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHBtX3N0MzNfaTJjX2RyaXZlciA9IHsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCB0cG1fc3RtX2kyY19pZCk7CisKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3N0MzN6cDI0X2kyY19tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAic3Qsc3QzM3pwMjQtaTJjIiwgfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9mX3N0MzN6cDI0X2kyY19tYXRjaCk7CisjZW5kaWYKKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKHRwbV9zdG1faTJjX29wcywgdHBtX3N0bV9pMmNfcG1fc3VzcGVuZCwKKwkJCSB0cG1fc3RtX2kyY19wbV9yZXN1bWUpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgdHBtX3N0bV9pMmNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAotCQkgICAubmFtZSA9IFRQTV9TVDMzX0kyQywKLQkJICAgLnBtID0gJnRwbV9zdDMzX2kyY19vcHMsCi0JCSAgIH0sCi0JLnByb2JlID0gdHBtX3N0MzNfaTJjX3Byb2JlLAotCS5yZW1vdmUgPSB0cG1fc3QzM19pMmNfcmVtb3ZlLAotCS5pZF90YWJsZSA9IHRwbV9zdDMzX2kyY19pZAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSBUUE1fU1QzM19JMkMsCisJCS5wbSA9ICZ0cG1fc3RtX2kyY19vcHMsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihvZl9zdDMzenAyNF9pMmNfbWF0Y2gpLAorCX0sCisJLnByb2JlID0gdHBtX3N0bV9pMmNfcHJvYmUsCisJLnJlbW92ZSA9IHRwbV9zdG1faTJjX3JlbW92ZSwKKwkuaWRfdGFibGUgPSB0cG1fc3RtX2kyY19pZAogfTsKIAotbW9kdWxlX2kyY19kcml2ZXIodHBtX3N0MzNfaTJjX2RyaXZlcik7Cittb2R1bGVfaTJjX2RyaXZlcih0cG1fc3RtX2kyY19kcml2ZXIpOwogCiBNT0RVTEVfQVVUSE9SKCJDaHJpc3RvcGhlIFJpY2FyZCAodHBtc3VwcG9ydEBzdC5jb20pIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNUTSBUUE0gSTJDIFNUMzMgRHJpdmVyIik7Ci1NT0RVTEVfVkVSU0lPTigiMS4yLjAiKTsKK01PRFVMRV9WRVJTSU9OKCIxLjIuMSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1faTJjX3N0bV9zdDMzLmggYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfc3RtX3N0MzMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM5YTQzMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pMmNfc3RtX3N0MzMuaAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qCi0gKiBTVE1pY3JvZWxlY3Ryb25pY3MgVFBNIEkyQyBMaW51eCBkcml2ZXIgZm9yIFRQTSBTVDMzWlAyNAotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwICBTVE1pY3JvZWxlY3Ryb25pY3MKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICoKLSAqIFNUTWljcm9lbGVjdHJvbmljcyB2ZXJzaW9uIDEuMi4wLCBDb3B5cmlnaHQgKEMpIDIwMTAKLSAqIFNUTWljcm9lbGVjdHJvbmljcyBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuCi0gKiBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0Ci0gKiB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuCi0gKgotICogQEF1dGhvcjogQ2hyaXN0b3BoZSBSSUNBUkQgdHBtc3VwcG9ydEBzdC5jb20KLSAqCi0gKiBARmlsZTogc3RtX3N0MzNfdHBtX2kyYy5oCi0gKgotICogQERhdGU6IDA5LzE1LzIwMTAKLSAqLwotI2lmbmRlZiBfX1NUTV9TVDMzX1RQTV9JMkNfTUFJTl9IX18KLSNkZWZpbmUgX19TVE1fU1QzM19UUE1fSTJDX01BSU5fSF9fCi0KLSNkZWZpbmUgVFBNX0FDQ0VTUwkJCSgweDApCi0jZGVmaW5lIFRQTV9TVFMJCQkJKDB4MTgpCi0jZGVmaW5lIFRQTV9IQVNIX0VORAkJCSgweDIwKQotI2RlZmluZSBUUE1fREFUQV9GSUZPCQkJKDB4MjQpCi0jZGVmaW5lIFRQTV9IQVNIX0RBVEEJCQkoMHgyNCkKLSNkZWZpbmUgVFBNX0hBU0hfU1RBUlQJCQkoMHgyOCkKLSNkZWZpbmUgVFBNX0lOVEZfQ0FQQUJJTElUWQkJKDB4MTQpCi0jZGVmaW5lIFRQTV9JTlRfU1RBVFVTCQkJKDB4MTApCi0jZGVmaW5lIFRQTV9JTlRfRU5BQkxFCQkJKDB4MDgpCi0KLSNkZWZpbmUgVFBNX0RVTU1ZX0JZVEUJCQkweEFBCi0jZGVmaW5lIFRQTV9XUklURV9ESVJFQ1RJT04JCTB4ODAKLSNkZWZpbmUgVFBNX0hFQURFUl9TSVpFCQkJMTAKLSNkZWZpbmUgVFBNX0JVRlNJWkUJCQkyMDQ4Ci0KLSNkZWZpbmUgTE9DQUxJVFkwCQkwCi0KLSNkZWZpbmUgVFBNX1NUMzNfSTJDCQkJInN0MzN6cDI0X2kyYyIKLQotc3RydWN0IHN0MzN6cDI0X3BsYXRmb3JtX2RhdGEgewotCWludCBpb19zZXJpcnE7Ci0JaW50IGlvX2xwY3BkOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JdTggKnRwbV9pMmNfYnVmZmVyWzJdOyAvKiAwIFJlcXVlc3QgMSBSZXNwb25zZSAqLwotCXN0cnVjdCBjb21wbGV0aW9uIGlycV9kZXRlY3Rpb247Ci0Jc3RydWN0IG11dGV4IGxvY2s7Ci19OwotCi0jZW5kaWYgLyogX19TVE1fU1QzM19UUE1fSTJDX01BSU5fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pYm12dHBtLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pYm12dHBtLmMKaW5kZXggYWY3NGM1Ny4uMDg0MDM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1faWJtdnRwbS5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2libXZ0cG0uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSUJNIENvcnBvcmF0aW9uCiAgKgotICogQXV0aG9yOiBBc2hsZXkgTGFpIDxhZGxhaUB1cy5pYm0uY29tPgorICogQXV0aG9yOiBBc2hsZXkgTGFpIDxhc2hsZXlkbGFpQGdtYWlsLmNvbT4KICAqCiAgKiBNYWludGFpbmVkIGJ5OiA8dHBtZGQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgogICoKQEAgLTI3MCw4ICsyNzAsMTEgQEAKIHN0YXRpYyBpbnQgdHBtX2libXZ0cG1fcmVtb3ZlKHN0cnVjdCB2aW9fZGV2ICp2ZGV2KQogewogCXN0cnVjdCBpYm12dHBtX2RldiAqaWJtdnRwbSA9IGlibXZ0cG1fZ2V0X2RhdGEoJnZkZXYtPmRldik7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGlibXZ0cG0tPmRldik7CiAJaW50IHJjID0gMDsKIAorCXRwbV9jaGlwX3VucmVnaXN0ZXIoY2hpcCk7CisKIAlmcmVlX2lycSh2ZGV2LT5pcnEsIGlibXZ0cG0pOwogCiAJZG8gewpAQCAtMjkwLDggKzI5Myw2IEBACiAJCWtmcmVlKGlibXZ0cG0tPnJ0Y2VfYnVmKTsKIAl9CiAKLQl0cG1fcmVtb3ZlX2hhcmR3YXJlKGlibXZ0cG0tPmRldik7Ci0KIAlrZnJlZShpYm12dHBtKTsKIAogCXJldHVybiAwOwpAQCAtMzA3LDYgKzMwOCwxNCBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgdHBtX2libXZ0cG1fZ2V0X2Rlc2lyZWRfZG1hKHN0cnVjdCB2aW9fZGV2ICp2ZGV2KQogewogCXN0cnVjdCBpYm12dHBtX2RldiAqaWJtdnRwbSA9IGlibXZ0cG1fZ2V0X2RhdGEoJnZkZXYtPmRldik7CisKKwkvKiBpYm12dHBtIGluaXRpYWxpemVzIGF0IHByb2JlIHRpbWUsIHNvIHRoZSBkYXRhIHdlIGFyZQorCSogYXNraW5nIGZvciBtYXkgbm90IGJlIHNldCB5ZXQuIEVzdGltYXRlIHRoYXQgNEsgcmVxdWlyZWQKKwkqIGZvciBUQ0UtbWFwcGVkIGJ1ZmZlciBpbiBhZGRpdGlvbiB0byBDUlEuCisJKi8KKwlpZiAoIWlibXZ0cG0pCisJCXJldHVybiBDUlFfUkVTX0JVRl9TSVpFICsgUEFHRV9TSVpFOworCiAJcmV0dXJuIENSUV9SRVNfQlVGX1NJWkUgKyBpYm12dHBtLT5ydGNlX3NpemU7CiB9CiAKQEAgLTU1NSwxMSArNTY0LDkgQEAKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXA7CiAJaW50IHJjID0gLUVOT01FTSwgcmMxOwogCi0JY2hpcCA9IHRwbV9yZWdpc3Rlcl9oYXJkd2FyZShkZXYsICZ0cG1faWJtdnRwbSk7Ci0JaWYgKCFjaGlwKSB7Ci0JCWRldl9lcnIoZGV2LCAidHBtX3JlZ2lzdGVyX2hhcmR3YXJlIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwljaGlwID0gdHBtbV9jaGlwX2FsbG9jKGRldiwgJnRwbV9pYm12dHBtKTsKKwlpZiAoSVNfRVJSKGNoaXApKQorCQlyZXR1cm4gUFRSX0VSUihjaGlwKTsKIAogCWlibXZ0cG0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWJtdnRwbV9kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWlibXZ0cG0pIHsKQEAgLTYyOSw3ICs2MzYsNyBAQAogCWlmIChyYykKIAkJZ290byBpbml0X2lycV9jbGVhbnVwOwogCi0JcmV0dXJuIHJjOworCXJldHVybiB0cG1fY2hpcF9yZWdpc3RlcihjaGlwKTsKIGluaXRfaXJxX2NsZWFudXA6CiAJZG8gewogCQlyYzEgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9GUkVFX0NSUSwgdmlvX2Rldi0+dW5pdF9hZGRyZXNzKTsKQEAgLTY0NCw4ICs2NTEsNiBAQAogCQlrZnJlZShpYm12dHBtKTsKIAl9CiAKLQl0cG1fcmVtb3ZlX2hhcmR3YXJlKGRldik7Ci0KIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX2libXZ0cG0uaCBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2libXZ0cG0uaAppbmRleCBiZDgyYTc5Li5mNTk1ZjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pYm12dHBtLmgKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1faWJtdnRwbS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBJQk0gQ29ycG9yYXRpb24KICAqCi0gKiBBdXRob3I6IEFzaGxleSBMYWkgPGFkbGFpQHVzLmlibS5jb20+CisgKiBBdXRob3I6IEFzaGxleSBMYWkgPGFzaGxleWRsYWlAZ21haWwuY29tPgogICoKICAqIE1haW50YWluZWQgYnk6IDx0cG1kZC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1faW5maW5lb24uYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2luZmluZW9uLmMKaW5kZXggZGMwYTI1NS4uNmQ0OTIxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1faW5maW5lb24uYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9pbmZpbmVvbi5jCkBAIC0xOTUsOSArMTk1LDkgQEAKIAl9CiAJaWYgKGkgPT0gVFBNX01BWF9UUklFUykgewkvKiB0aW1lb3V0IG9jY3VycyAqLwogCQlpZiAod2FpdF9mb3JfYml0ID09IFNUQVRfWEZFKQotCQkJZGV2X2VycihjaGlwLT5kZXYsICJUaW1lb3V0IGluIHdhaXQoU1RBVF9YRkUpXG4iKTsKKwkJCWRldl9lcnIoY2hpcC0+cGRldiwgIlRpbWVvdXQgaW4gd2FpdChTVEFUX1hGRSlcbiIpOwogCQlpZiAod2FpdF9mb3JfYml0ID09IFNUQVRfUkRBKQotCQkJZGV2X2VycihjaGlwLT5kZXYsICJUaW1lb3V0IGluIHdhaXQoU1RBVF9SREEpXG4iKTsKKwkJCWRldl9lcnIoY2hpcC0+cGRldiwgIlRpbWVvdXQgaW4gd2FpdChTVEFUX1JEQSlcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yMjAsNyArMjIwLDcgQEAKIHN0YXRpYyB2b2lkIHRwbV93dHgoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewogCW51bWJlcl9vZl93dHgrKzsKLQlkZXZfaW5mbyhjaGlwLT5kZXYsICJHcmFudGluZyBXVFggKCUwMmQgLyAlMDJkKVxuIiwKKwlkZXZfaW5mbyhjaGlwLT5wZGV2LCAiR3JhbnRpbmcgV1RYICglMDJkIC8gJTAyZClcbiIsCiAJCSBudW1iZXJfb2Zfd3R4LCBUUE1fTUFYX1dUWF9QQUNLQUdFUyk7CiAJd2FpdF9hbmRfc2VuZChjaGlwLCBUUE1fVkxfVkVSKTsKIAl3YWl0X2FuZF9zZW5kKGNoaXAsIFRQTV9DVFJMX1dUWCk7CkBAIC0yMzEsNyArMjMxLDcgQEAKIAogc3RhdGljIHZvaWQgdHBtX3d0eF9hYm9ydChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCiB7Ci0JZGV2X2luZm8oY2hpcC0+ZGV2LCAiQWJvcnRpbmcgV1RYXG4iKTsKKwlkZXZfaW5mbyhjaGlwLT5wZGV2LCAiQWJvcnRpbmcgV1RYXG4iKTsKIAl3YWl0X2FuZF9zZW5kKGNoaXAsIFRQTV9WTF9WRVIpOwogCXdhaXRfYW5kX3NlbmQoY2hpcCwgVFBNX0NUUkxfV1RYX0FCT1JUKTsKIAl3YWl0X2FuZF9zZW5kKGNoaXAsIDB4MDApOwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJfQogCiAJaWYgKGJ1ZlswXSAhPSBUUE1fVkxfVkVSKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LAorCQlkZXZfZXJyKGNoaXAtPnBkZXYsCiAJCQkiV3JvbmcgdHJhbnNwb3J0IHByb3RvY29sIGltcGxlbWVudGF0aW9uIVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTI3Miw3ICsyNzIsNyBAQAogCQl9CiAKIAkJaWYgKChzaXplID09IDB4NkQwMCkgJiYgKGJ1ZlsxXSA9PSAweDgwKSkgewotCQkJZGV2X2VycihjaGlwLT5kZXYsICJFcnJvciBoYW5kbGluZyBvbiB2ZW5kb3IgbGF5ZXIhXG4iKTsKKwkJCWRldl9lcnIoY2hpcC0+cGRldiwgIkVycm9yIGhhbmRsaW5nIG9uIHZlbmRvciBsYXllciFcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIApAQCAtMjg0LDcgKzI4NCw3IEBACiAJfQogCiAJaWYgKGJ1ZlsxXSA9PSBUUE1fQ1RSTF9XVFgpIHsKLQkJZGV2X2luZm8oY2hpcC0+ZGV2LCAiV1RYLXBhY2thZ2UgcmVjZWl2ZWRcbiIpOworCQlkZXZfaW5mbyhjaGlwLT5wZGV2LCAiV1RYLXBhY2thZ2UgcmVjZWl2ZWRcbiIpOwogCQlpZiAobnVtYmVyX29mX3d0eCA8IFRQTV9NQVhfV1RYX1BBQ0tBR0VTKSB7CiAJCQl0cG1fd3R4KGNoaXApOwogCQkJZ290byByZWN2X2JlZ2luOwpAQCAtMjk1LDE0ICsyOTUsMTQgQEAKIAl9CiAKIAlpZiAoYnVmWzFdID09IFRQTV9DVFJMX1dUWF9BQk9SVF9BQ0spIHsKLQkJZGV2X2luZm8oY2hpcC0+ZGV2LCAiV1RYLWFib3J0IGFja25vd2xlZGdlZFxuIik7CisJCWRldl9pbmZvKGNoaXAtPnBkZXYsICJXVFgtYWJvcnQgYWNrbm93bGVkZ2VkXG4iKTsKIAkJcmV0dXJuIHNpemU7CiAJfQogCiAJaWYgKGJ1ZlsxXSA9PSBUUE1fQ1RSTF9FUlJPUikgewotCQlkZXZfZXJyKGNoaXAtPmRldiwgIkVSUk9SLXBhY2thZ2UgcmVjZWl2ZWQ6XG4iKTsKKwkJZGV2X2VycihjaGlwLT5wZGV2LCAiRVJST1ItcGFja2FnZSByZWNlaXZlZDpcbiIpOwogCQlpZiAoYnVmWzRdID09IFRQTV9JTkZfTkFLKQotCQkJZGV2X2VycihjaGlwLT5kZXYsCisJCQlkZXZfZXJyKGNoaXAtPnBkZXYsCiAJCQkJIi0+IE5lZ2F0aXZlIGFja25vd2xlZGdlbWVudCIKIAkJCQkiIC0gcmV0cmFuc21pdCBjb21tYW5kIVxuIik7CiAJCXJldHVybiAtRUlPOwpAQCAtMzIxLDcgKzMyMSw3IEBACiAKIAlyZXQgPSBlbXB0eV9maWZvKGNoaXAsIDEpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycihjaGlwLT5kZXYsICJUaW1lb3V0IHdoaWxlIGNsZWFyaW5nIEZJRk9cbiIpOworCQlkZXZfZXJyKGNoaXAtPnBkZXYsICJUaW1lb3V0IHdoaWxlIGNsZWFyaW5nIEZJRk9cbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTU0Niw3ICs1NDYsMTQgQEAKIAkJCSB2ZW5kb3JpZFswXSwgdmVuZG9yaWRbMV0sCiAJCQkgcHJvZHVjdGlkWzBdLCBwcm9kdWN0aWRbMV0sIGNoaXBuYW1lKTsKIAotCQlpZiAoIShjaGlwID0gdHBtX3JlZ2lzdGVyX2hhcmR3YXJlKCZkZXYtPmRldiwgJnRwbV9pbmYpKSkKKwkJY2hpcCA9IHRwbW1fY2hpcF9hbGxvYygmZGV2LT5kZXYsICZ0cG1faW5mKTsKKwkJaWYgKElTX0VSUihjaGlwKSkgeworCQkJcmMgPSBQVFJfRVJSKGNoaXApOworCQkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CisJCX0KKworCQlyYyA9IHRwbV9jaGlwX3JlZ2lzdGVyKGNoaXApOworCQlpZiAocmMpCiAJCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAogCQlyZXR1cm4gMDsKQEAgLTU3MiwxNyArNTc5LDE1IEBACiB7CiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gcG5wX2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAoY2hpcCkgewotCQlpZiAodHBtX2Rldi5pb3R5cGUgPT0gVFBNX0lORl9JT19QT1JUKSB7Ci0JCQlyZWxlYXNlX3JlZ2lvbih0cG1fZGV2LmRhdGFfcmVncywgdHBtX2Rldi5kYXRhX3NpemUpOwotCQkJcmVsZWFzZV9yZWdpb24odHBtX2Rldi5jb25maWdfcG9ydCwKLQkJCQkgICAgICAgdHBtX2Rldi5jb25maWdfc2l6ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlpb3VubWFwKHRwbV9kZXYubWVtX2Jhc2UpOwotCQkJcmVsZWFzZV9tZW1fcmVnaW9uKHRwbV9kZXYubWFwX2Jhc2UsIHRwbV9kZXYubWFwX3NpemUpOwotCQl9Ci0JCXRwbV9kZXZfdmVuZG9yX3JlbGVhc2UoY2hpcCk7Ci0JCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKKwl0cG1fY2hpcF91bnJlZ2lzdGVyKGNoaXApOworCisJaWYgKHRwbV9kZXYuaW90eXBlID09IFRQTV9JTkZfSU9fUE9SVCkgeworCQlyZWxlYXNlX3JlZ2lvbih0cG1fZGV2LmRhdGFfcmVncywgdHBtX2Rldi5kYXRhX3NpemUpOworCQlyZWxlYXNlX3JlZ2lvbih0cG1fZGV2LmNvbmZpZ19wb3J0LAorCQkJICAgICAgIHRwbV9kZXYuY29uZmlnX3NpemUpOworCX0gZWxzZSB7CisJCWlvdW5tYXAodHBtX2Rldi5tZW1fYmFzZSk7CisJCXJlbGVhc2VfbWVtX3JlZ2lvbih0cG1fZGV2Lm1hcF9iYXNlLCB0cG1fZGV2Lm1hcF9zaXplKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX25zYy5jIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fbnNjLmMKaW5kZXggNGQwYTE3ZS4uMjg5Mzg5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fbnNjLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fbnNjLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCX0KIAl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgc3RvcCkpOwogCi0JZGV2X2luZm8oY2hpcC0+ZGV2LCAid2FpdCBmb3IgcmVhZHkgZmFpbGVkXG4iKTsKKwlkZXZfaW5mbyhjaGlwLT5wZGV2LCAid2FpdCBmb3IgcmVhZHkgZmFpbGVkXG4iKTsKIAlyZXR1cm4gLUVCVVNZOwogfQogCkBAIC0xMjksMTIgKzEyOSwxMiBAQAogCQlyZXR1cm4gLUVJTzsKIAogCWlmICh3YWl0X2Zvcl9zdGF0KGNoaXAsIE5TQ19TVEFUVVNfRjAsIE5TQ19TVEFUVVNfRjAsICZkYXRhKSA8IDApIHsKLQkJZGV2X2VycihjaGlwLT5kZXYsICJGMCB0aW1lb3V0XG4iKTsKKwkJZGV2X2VycihjaGlwLT5wZGV2LCAiRjAgdGltZW91dFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlpZiAoKGRhdGEgPQogCSAgICAgaW5iKGNoaXAtPnZlbmRvci5iYXNlICsgTlNDX0RBVEEpKSAhPSBOU0NfQ09NTUFORF9OT1JNQUwpIHsKLQkJZGV2X2VycihjaGlwLT5kZXYsICJub3QgaW4gbm9ybWFsIG1vZGUgKDB4JXgpXG4iLAorCQlkZXZfZXJyKGNoaXAtPnBkZXYsICJub3QgaW4gbm9ybWFsIG1vZGUgKDB4JXgpXG4iLAogCQkJZGF0YSk7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTE0Myw3ICsxNDMsNyBAQAogCWZvciAocCA9IGJ1ZmZlcjsgcCA8ICZidWZmZXJbY291bnRdOyBwKyspIHsKIAkJaWYgKHdhaXRfZm9yX3N0YXQKIAkJICAgIChjaGlwLCBOU0NfU1RBVFVTX09CRiwgTlNDX1NUQVRVU19PQkYsICZkYXRhKSA8IDApIHsKLQkJCWRldl9lcnIoY2hpcC0+ZGV2LAorCQkJZGV2X2VycihjaGlwLT5wZGV2LAogCQkJCSJPQkYgdGltZW91dCAod2hpbGUgcmVhZGluZyBkYXRhKVxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQpAQCAtMTU0LDExICsxNTQsMTEgQEAKIAogCWlmICgoZGF0YSAmIE5TQ19TVEFUVVNfRjApID09IDAgJiYKIAkod2FpdF9mb3Jfc3RhdChjaGlwLCBOU0NfU1RBVFVTX0YwLCBOU0NfU1RBVFVTX0YwLCAmZGF0YSkgPCAwKSkgewotCQlkZXZfZXJyKGNoaXAtPmRldiwgIkYwIG5vdCBzZXRcbiIpOworCQlkZXZfZXJyKGNoaXAtPnBkZXYsICJGMCBub3Qgc2V0XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWlmICgoZGF0YSA9IGluYihjaGlwLT52ZW5kb3IuYmFzZSArIE5TQ19EQVRBKSkgIT0gTlNDX0NPTU1BTkRfRU9DKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LAorCQlkZXZfZXJyKGNoaXAtPnBkZXYsCiAJCQkiZXhwZWN0ZWQgZW5kIG9mIGNvbW1hbmQoMHgleClcbiIsIGRhdGEpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0xODksMTkgKzE4OSwxOSBAQAogCQlyZXR1cm4gLUVJTzsKIAogCWlmICh3YWl0X2Zvcl9zdGF0KGNoaXAsIE5TQ19TVEFUVVNfSUJGLCAwLCAmZGF0YSkgPCAwKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiSUJGIHRpbWVvdXRcbiIpOworCQlkZXZfZXJyKGNoaXAtPnBkZXYsICJJQkYgdGltZW91dFxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCW91dGIoTlNDX0NPTU1BTkRfTk9STUFMLCBjaGlwLT52ZW5kb3IuYmFzZSArIE5TQ19DT01NQU5EKTsKIAlpZiAod2FpdF9mb3Jfc3RhdChjaGlwLCBOU0NfU1RBVFVTX0lCUiwgTlNDX1NUQVRVU19JQlIsICZkYXRhKSA8IDApIHsKLQkJZGV2X2VycihjaGlwLT5kZXYsICJJQlIgdGltZW91dFxuIik7CisJCWRldl9lcnIoY2hpcC0+cGRldiwgIklCUiB0aW1lb3V0XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJaWYgKHdhaXRfZm9yX3N0YXQoY2hpcCwgTlNDX1NUQVRVU19JQkYsIDAsICZkYXRhKSA8IDApIHsKLQkJCWRldl9lcnIoY2hpcC0+ZGV2LAorCQkJZGV2X2VycihjaGlwLT5wZGV2LAogCQkJCSJJQkYgdGltZW91dCAod2hpbGUgd3JpdGluZyBkYXRhKVxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQpAQCAtMjA5LDcgKzIwOSw3IEBACiAJfQogCiAJaWYgKHdhaXRfZm9yX3N0YXQoY2hpcCwgTlNDX1NUQVRVU19JQkYsIDAsICZkYXRhKSA8IDApIHsKLQkJZGV2X2VycihjaGlwLT5kZXYsICJJQkYgdGltZW91dFxuIik7CisJCWRldl9lcnIoY2hpcC0+cGRldiwgIklCRiB0aW1lb3V0XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCW91dGIoTlNDX0NPTU1BTkRfRU9DLCBjaGlwLT52ZW5kb3IuYmFzZSArIE5TQ19DT01NQU5EKTsKQEAgLTI0NywxMCArMjQ3LDkgQEAKIHN0YXRpYyB2b2lkIHRwbV9uc2NfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpZiAoIGNoaXAgKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGNoaXAtPnZlbmRvci5iYXNlLCAyKTsKLQkJdHBtX3JlbW92ZV9oYXJkd2FyZShjaGlwLT5kZXYpOwotCX0KKworCXRwbV9jaGlwX3VucmVnaXN0ZXIoY2hpcCk7CisJcmVsZWFzZV9yZWdpb24oY2hpcC0+dmVuZG9yLmJhc2UsIDIpOwogfQogCiBzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFModHBtX25zY19wbSwgdHBtX3BtX3N1c3BlbmQsIHRwbV9wbV9yZXN1bWUpOwpAQCAtMzA3LDExICszMDYsMTYgQEAKIAkJZ290byBlcnJfZGVsX2RldjsKIAl9CiAKLQlpZiAoIShjaGlwID0gdHBtX3JlZ2lzdGVyX2hhcmR3YXJlKCZwZGV2LT5kZXYsICZ0cG1fbnNjKSkpIHsKKwljaGlwID0gdHBtbV9jaGlwX2FsbG9jKCZwZGV2LT5kZXYsICZ0cG1fbnNjKTsKKwlpZiAoSVNfRVJSKGNoaXApKSB7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byBlcnJfcmVsX3JlZzsKIAl9CiAKKwlyYyA9IHRwbV9jaGlwX3JlZ2lzdGVyKGNoaXApOworCWlmIChyYykKKwkJZ290byBlcnJfcmVsX3JlZzsKKwogCWRldl9kYmcoJnBkZXYtPmRldiwgIk5TQyBUUE0gZGV0ZWN0ZWRcbiIpOwogCWRldl9kYmcoJnBkZXYtPmRldiwKIAkJIk5TQyBMRE4gMHgleCwgU0lEIDB4JXgsIFNSSUQgMHgleFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0vdHBtX29mLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9vZi5jCmluZGV4IDk4YmEyYmQuLmMwMDJkMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX29mLmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS90cG1fb2YuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgMjAxMiBJQk0gQ29ycG9yYXRpb24KICAqCi0gKiBBdXRob3I6IEFzaGxleSBMYWkgPGFkbGFpQHVzLmlibS5jb20+CisgKiBBdXRob3I6IEFzaGxleSBMYWkgPGFzaGxleWRsYWlAZ21haWwuY29tPgogICoKICAqIE1haW50YWluZWQgYnk6IDx0cG1kZC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fcHBpLmMgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9wcGkuYwppbmRleCA2MWRjYzgwLi42Y2E5YjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV9wcGkuYworKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9wcGkuYwpAQCAtMSwzICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3JzOgorICogWGlhb3lhbiBaaGFuZyA8eGlhb3lhbi56aGFuZ0BpbnRlbC5jb20+CisgKiBKaWFuZyBMaXUgPGppYW5nLmxpdUBsaW51eC5pbnRlbC5jb20+CisgKiBKYXJra28gU2Fra2luZW4gPGphcmtrby5zYWtraW5lbkBsaW51eC5pbnRlbC5jb20+CisgKgorICogTWFpbnRhaW5lZCBieTogPHRwbWRkLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgUFBJLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZS4KKyAqLworCisKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSAidHBtLmgiCiAKQEAgLTEyLDcgKzMxLDYgQEAKICNkZWZpbmUgUFBJX1RQTV9SRVFfTUFYCQkyMgogI2RlZmluZSBQUElfVlNfUkVRX1NUQVJUCTEyOAogI2RlZmluZSBQUElfVlNfUkVRX0VORAkJMjU1Ci0jZGVmaW5lIFBQSV9WRVJTSU9OX0xFTgkJMwogCiBzdGF0aWMgY29uc3QgdTggdHBtX3BwaV91dWlkW10gPSB7CiAJMHhBNiwgMHhGQSwgMHhERCwgMHgzRCwKQEAgLTIyLDQ1ICs0MCwyMiBAQAogCTB4OEQsIDB4MTAsIDB4MDgsIDB4OUQsIDB4MTYsIDB4NTMKIH07CiAKLXN0YXRpYyBjaGFyIHRwbV9wcGlfdmVyc2lvbltQUElfVkVSU0lPTl9MRU4gKyAxXTsKLXN0YXRpYyBhY3BpX2hhbmRsZSB0cG1fcHBpX2hhbmRsZTsKLQotc3RhdGljIGFjcGlfc3RhdHVzIHBwaV9jYWxsYmFjayhhY3BpX2hhbmRsZSBoYW5kbGUsIHUzMiBsZXZlbCwgdm9pZCAqY29udGV4dCwKLQkJCQl2b2lkICoqcmV0dXJuX3ZhbHVlKQotewotCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7Ci0KLQlpZiAoIWFjcGlfY2hlY2tfZHNtKGhhbmRsZSwgdHBtX3BwaV91dWlkLCBUUE1fUFBJX1JFVklTSU9OX0lELAotCQkJICAgIDEgPDwgVFBNX1BQSV9GTl9WRVJTSU9OKSkKLQkJcmV0dXJuIEFFX09LOwotCi0JLyogQ2FjaGUgdmVyc2lvbiBzdHJpbmcgKi8KLQlvYmogPSBhY3BpX2V2YWx1YXRlX2RzbV90eXBlZChoYW5kbGUsIHRwbV9wcGlfdXVpZCwKLQkJCQkgICAgICBUUE1fUFBJX1JFVklTSU9OX0lELCBUUE1fUFBJX0ZOX1ZFUlNJT04sCi0JCQkJICAgICAgTlVMTCwgQUNQSV9UWVBFX1NUUklORyk7Ci0JaWYgKG9iaikgewotCQlzdHJsY3B5KHRwbV9wcGlfdmVyc2lvbiwgb2JqLT5zdHJpbmcucG9pbnRlciwKLQkJCVBQSV9WRVJTSU9OX0xFTiArIDEpOwotCQlBQ1BJX0ZSRUUob2JqKTsKLQl9Ci0KLQkqcmV0dXJuX3ZhbHVlID0gaGFuZGxlOwotCi0JcmV0dXJuIEFFX0NUUkxfVEVSTUlOQVRFOwotfQotCiBzdGF0aWMgaW5saW5lIHVuaW9uIGFjcGlfb2JqZWN0ICoKLXRwbV9ldmFsX2RzbShpbnQgZnVuYywgYWNwaV9vYmplY3RfdHlwZSB0eXBlLCB1bmlvbiBhY3BpX29iamVjdCAqYXJndjQpCit0cG1fZXZhbF9kc20oYWNwaV9oYW5kbGUgcHBpX2hhbmRsZSwgaW50IGZ1bmMsIGFjcGlfb2JqZWN0X3R5cGUgdHlwZSwKKwkgICAgIHVuaW9uIGFjcGlfb2JqZWN0ICphcmd2NCkKIHsKLQlCVUdfT04oIXRwbV9wcGlfaGFuZGxlKTsKLQlyZXR1cm4gYWNwaV9ldmFsdWF0ZV9kc21fdHlwZWQodHBtX3BwaV9oYW5kbGUsIHRwbV9wcGlfdXVpZCwKLQkJCQkgICAgICAgVFBNX1BQSV9SRVZJU0lPTl9JRCwgZnVuYywgYXJndjQsIHR5cGUpOworCUJVR19PTighcHBpX2hhbmRsZSk7CisJcmV0dXJuIGFjcGlfZXZhbHVhdGVfZHNtX3R5cGVkKHBwaV9oYW5kbGUsIHRwbV9wcGlfdXVpZCwKKwkJCQkgICAgICAgVFBNX1BQSV9SRVZJU0lPTl9JRCwKKwkJCQkgICAgICAgZnVuYywgYXJndjQsIHR5cGUpOwogfQogCiBzdGF0aWMgc3NpemVfdCB0cG1fc2hvd19wcGlfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCB0cG1fcHBpX3ZlcnNpb24pOworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBjaGlwLT5wcGlfdmVyc2lvbik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHRwbV9zaG93X3BwaV9yZXF1ZXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTY4LDggKzYzLDEwIEBACiB7CiAJc3NpemVfdCBzaXplID0gLUVJTlZBTDsKIAl1bmlvbiBhY3BpX29iamVjdCAqb2JqOworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0Jb2JqID0gdHBtX2V2YWxfZHNtKFRQTV9QUElfRk5fR0VUUkVRLCBBQ1BJX1RZUEVfUEFDS0FHRSwgTlVMTCk7CisJb2JqID0gdHBtX2V2YWxfZHNtKGNoaXAtPmFjcGlfZGV2X2hhbmRsZSwgVFBNX1BQSV9GTl9HRVRSRVEsCisJCQkgICBBQ1BJX1RZUEVfUEFDS0FHRSwgTlVMTCk7CiAJaWYgKCFvYmopCiAJCXJldHVybiAtRU5YSU87CiAKQEAgLTEwMywxNCArMTAwLDE1IEBACiAJaW50IGZ1bmMgPSBUUE1fUFBJX0ZOX1NVQlJFUTsKIAl1bmlvbiBhY3BpX29iamVjdCAqb2JqLCB0bXA7CiAJdW5pb24gYWNwaV9vYmplY3QgYXJndjQgPSBBQ1BJX0lOSVRfRFNNX0FSR1Y0KDEsICZ0bXApOworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJLyoKIAkgKiB0aGUgZnVuY3Rpb24gdG8gc3VibWl0IFRQTSBvcGVyYXRpb24gcmVxdWVzdCB0byBwcmUtb3MgZW52aXJvbm1lbnQKIAkgKiBpcyB1cGRhdGVkIHdpdGggZnVuY3Rpb24gaW5kZXggZnJvbSBTVUJSRVEgdG8gU1VCUkVRMiBzaW5jZSBQUEkKIAkgKiB2ZXJzaW9uIDEuMQogCSAqLwotCWlmIChhY3BpX2NoZWNrX2RzbSh0cG1fcHBpX2hhbmRsZSwgdHBtX3BwaV91dWlkLCBUUE1fUFBJX1JFVklTSU9OX0lELAotCQkJICAgMSA8PCBUUE1fUFBJX0ZOX1NVQlJFUTIpKQorCWlmIChhY3BpX2NoZWNrX2RzbShjaGlwLT5hY3BpX2Rldl9oYW5kbGUsIHRwbV9wcGlfdXVpZCwKKwkJCSAgIFRQTV9QUElfUkVWSVNJT05fSUQsIDEgPDwgVFBNX1BQSV9GTl9TVUJSRVEyKSkKIAkJZnVuYyA9IFRQTV9QUElfRk5fU1VCUkVRMjsKIAogCS8qCkBAIC0xMTksNyArMTE3LDcgQEAKIAkgKiBzdHJpbmcvcGFja2FnZSB0eXBlLiBGb3IgUFBJIHZlcnNpb24gMS4wIGFuZCAxLjEsIHVzZSBidWZmZXIgdHlwZQogCSAqIGZvciBjb21wYXRpYmlsaXR5LCBhbmQgdXNlIHBhY2thZ2UgdHlwZSBzaW5jZSAxLjIgYWNjb3JkaW5nIHRvIHNwZWMuCiAJICovCi0JaWYgKHN0cmNtcCh0cG1fcHBpX3ZlcnNpb24sICIxLjIiKSA8IDApIHsKKwlpZiAoc3RyY21wKGNoaXAtPnBwaV92ZXJzaW9uLCAiMS4yIikgPCAwKSB7CiAJCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmcmVxKSAhPSAxKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWFyZ3Y0LnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOwpAQCAtMTMxLDcgKzEyOSw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlvYmogPSB0cG1fZXZhbF9kc20oZnVuYywgQUNQSV9UWVBFX0lOVEVHRVIsICZhcmd2NCk7CisJb2JqID0gdHBtX2V2YWxfZHNtKGNoaXAtPmFjcGlfZGV2X2hhbmRsZSwgZnVuYywgQUNQSV9UWVBFX0lOVEVHRVIsCisJCQkgICAmYXJndjQpOwogCWlmICghb2JqKSB7CiAJCXJldHVybiAtRU5YSU87CiAJfSBlbHNlIHsKQEAgLTE1Nyw2ICsxNTYsNyBAQAogCQkuYnVmZmVyLmxlbmd0aCA9IDAsCiAJCS5idWZmZXIucG9pbnRlciA9IE5VTEwKIAl9OworCXN0cnVjdCB0cG1fY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJc3RhdGljIGNoYXIgKmluZm9bXSA9IHsKIAkJIk5vbmUiLApAQCAtMTcxLDkgKzE3MSwxMCBAQAogCSAqIChlLmcuIENhcGVsbGEgd2l0aCBQUEkgMS4wKSBuZWVkIGludGVnZXIvc3RyaW5nL2J1ZmZlciB0eXBlLCBzbyBmb3IKIAkgKiBjb21wYXRpYmlsaXR5LCBkZWZpbmUgcGFyYW1zWzNdLnR5cGUgYXMgYnVmZmVyLCBpZiBQUEkgdmVyc2lvbiA8IDEuMgogCSAqLwotCWlmIChzdHJjbXAodHBtX3BwaV92ZXJzaW9uLCAiMS4yIikgPCAwKQorCWlmIChzdHJjbXAoY2hpcC0+cHBpX3ZlcnNpb24sICIxLjIiKSA8IDApCiAJCW9iaiA9ICZ0bXA7Ci0Jb2JqID0gdHBtX2V2YWxfZHNtKFRQTV9QUElfRk5fR0VUQUNULCBBQ1BJX1RZUEVfSU5URUdFUiwgb2JqKTsKKwlvYmogPSB0cG1fZXZhbF9kc20oY2hpcC0+YWNwaV9kZXZfaGFuZGxlLCBUUE1fUFBJX0ZOX0dFVEFDVCwKKwkJCSAgIEFDUElfVFlQRV9JTlRFR0VSLCBvYmopOwogCWlmICghb2JqKSB7CiAJCXJldHVybiAtRU5YSU87CiAJfSBlbHNlIHsKQEAgLTE5Niw4ICsxOTcsMTAgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSAtRUlOVkFMOwogCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmosICpyZXRfb2JqOwogCXU2NCByZXEsIHJlczsKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAotCW9iaiA9IHRwbV9ldmFsX2RzbShUUE1fUFBJX0ZOX0dFVFJTUCwgQUNQSV9UWVBFX1BBQ0tBR0UsIE5VTEwpOworCW9iaiA9IHRwbV9ldmFsX2RzbShjaGlwLT5hY3BpX2Rldl9oYW5kbGUsIFRQTV9QUElfRk5fR0VUUlNQLAorCQkJICAgQUNQSV9UWVBFX1BBQ0tBR0UsIE5VTEwpOwogCWlmICghb2JqKQogCQlyZXR1cm4gLUVOWElPOwogCkBAIC0yNDgsNyArMjUxLDggQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X3BwaV9vcGVyYXRpb25zKGNoYXIgKmJ1ZiwgdTMyIHN0YXJ0LCB1MzIgZW5kKQorc3RhdGljIHNzaXplX3Qgc2hvd19wcGlfb3BlcmF0aW9ucyhhY3BpX2hhbmRsZSBkZXZfaGFuZGxlLCBjaGFyICpidWYsIHUzMiBzdGFydCwKKwkJCQkgICB1MzIgZW5kKQogewogCWludCBpOwogCXUzMiByZXQ7CkBAIC0yNjQsMTQgKzI2OCwxNSBAQAogCQkiVXNlciBub3QgcmVxdWlyZWQiLAogCX07CiAKLQlpZiAoIWFjcGlfY2hlY2tfZHNtKHRwbV9wcGlfaGFuZGxlLCB0cG1fcHBpX3V1aWQsIFRQTV9QUElfUkVWSVNJT05fSUQsCisJaWYgKCFhY3BpX2NoZWNrX2RzbShkZXZfaGFuZGxlLCB0cG1fcHBpX3V1aWQsIFRQTV9QUElfUkVWSVNJT05fSUQsCiAJCQkgICAgMSA8PCBUUE1fUFBJX0ZOX0dFVE9QUikpCiAJCXJldHVybiAtRVBFUk07CiAKIAl0bXAuaW50ZWdlci50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CiAJZm9yIChpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHsKIAkJdG1wLmludGVnZXIudmFsdWUgPSBpOwotCQlvYmogPSB0cG1fZXZhbF9kc20oVFBNX1BQSV9GTl9HRVRPUFIsIEFDUElfVFlQRV9JTlRFR0VSLCAmYXJndik7CisJCW9iaiA9IHRwbV9ldmFsX2RzbShkZXZfaGFuZGxlLCBUUE1fUFBJX0ZOX0dFVE9QUiwKKwkJCQkgICBBQ1BJX1RZUEVfSU5URUdFUiwgJmFyZ3YpOwogCQlpZiAoIW9iaikgewogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0gZWxzZSB7CkBAIC0yOTEsMTQgKzI5NiwyMCBAQAogCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJICAgY2hhciAqYnVmKQogewotCXJldHVybiBzaG93X3BwaV9vcGVyYXRpb25zKGJ1ZiwgMCwgUFBJX1RQTV9SRVFfTUFYKTsKKwlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzaG93X3BwaV9vcGVyYXRpb25zKGNoaXAtPmFjcGlfZGV2X2hhbmRsZSwgYnVmLCAwLAorCQkJCSAgIFBQSV9UUE1fUkVRX01BWCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHRwbV9zaG93X3BwaV92c19vcGVyYXRpb25zKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkJICBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNob3dfcHBpX29wZXJhdGlvbnMoYnVmLCBQUElfVlNfUkVRX1NUQVJULCBQUElfVlNfUkVRX0VORCk7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc2hvd19wcGlfb3BlcmF0aW9ucyhjaGlwLT5hY3BpX2Rldl9oYW5kbGUsIGJ1ZiwgUFBJX1ZTX1JFUV9TVEFSVCwKKwkJCQkgICBQUElfVlNfUkVRX0VORCk7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUih2ZXJzaW9uLCBTX0lSVUdPLCB0cG1fc2hvd19wcGlfdmVyc2lvbiwgTlVMTCk7CkBAIC0zMjMsMTYgKzMzNCwzOCBAQAogCS5hdHRycyA9IHBwaV9hdHRycwogfTsKIAotaW50IHRwbV9hZGRfcHBpKHN0cnVjdCBrb2JqZWN0ICpwYXJlbnQpCitpbnQgdHBtX2FkZF9wcGkoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCS8qIENhY2hlIFRQTSBBQ1BJIGhhbmRsZSBhbmQgdmVyc2lvbiBzdHJpbmcgKi8KLQlhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9ERVZJQ0UsIEFDUElfUk9PVF9PQkpFQ1QsIEFDUElfVUlOVDMyX01BWCwKLQkJCSAgICBwcGlfY2FsbGJhY2ssIE5VTEwsIE5VTEwsICZ0cG1fcHBpX2hhbmRsZSk7Ci0JcmV0dXJuIHRwbV9wcGlfaGFuZGxlID8gc3lzZnNfY3JlYXRlX2dyb3VwKHBhcmVudCwgJnBwaV9hdHRyX2dycCkgOiAwOworCXVuaW9uIGFjcGlfb2JqZWN0ICpvYmo7CisJaW50IHJjOworCisJaWYgKCFjaGlwLT5hY3BpX2Rldl9oYW5kbGUpCisJCXJldHVybiAwOworCisJaWYgKCFhY3BpX2NoZWNrX2RzbShjaGlwLT5hY3BpX2Rldl9oYW5kbGUsIHRwbV9wcGlfdXVpZCwKKwkJCSAgICBUUE1fUFBJX1JFVklTSU9OX0lELCAxIDw8IFRQTV9QUElfRk5fVkVSU0lPTikpCisJCXJldHVybiAwOworCisJLyogQ2FjaGUgUFBJIHZlcnNpb24gc3RyaW5nLiAqLworCW9iaiA9IGFjcGlfZXZhbHVhdGVfZHNtX3R5cGVkKGNoaXAtPmFjcGlfZGV2X2hhbmRsZSwgdHBtX3BwaV91dWlkLAorCQkJCSAgICAgIFRQTV9QUElfUkVWSVNJT05fSUQsIFRQTV9QUElfRk5fVkVSU0lPTiwKKwkJCQkgICAgICBOVUxMLCBBQ1BJX1RZUEVfU1RSSU5HKTsKKwlpZiAob2JqKSB7CisJCXN0cmxjcHkoY2hpcC0+cHBpX3ZlcnNpb24sIG9iai0+c3RyaW5nLnBvaW50ZXIsCisJCQlzaXplb2YoY2hpcC0+cHBpX3ZlcnNpb24pKTsKKwkJQUNQSV9GUkVFKG9iaik7CisJfQorCisJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNoaXAtPnBkZXYtPmtvYmosICZwcGlfYXR0cl9ncnApOworCisJaWYgKCFyYykKKwkJY2hpcC0+ZmxhZ3MgfD0gVFBNX0NISVBfRkxBR19QUEk7CisKKwlyZXR1cm4gcmM7CiB9CiAKLXZvaWQgdHBtX3JlbW92ZV9wcGkoc3RydWN0IGtvYmplY3QgKnBhcmVudCkKK3ZvaWQgdHBtX3JlbW92ZV9wcGkoc3RydWN0IHRwbV9jaGlwICpjaGlwKQogewotCWlmICh0cG1fcHBpX2hhbmRsZSkKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKHBhcmVudCwgJnBwaV9hdHRyX2dycCk7CisJaWYgKGNoaXAtPmZsYWdzICYgVFBNX0NISVBfRkxBR19QUEkpCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2hpcC0+cGRldi0+a29iaiwgJnBwaV9hdHRyX2dycCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCmluZGV4IDZmMTk4NTQuLjY3MjViZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBJQk0gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgogICoKICAqIEF1dGhvcnM6CiAgKiBMZWVuZGVydCB2YW4gRG9vcm4gPGxlZW5kZXJ0QHdhdHNvbi5pYm0uY29tPgpAQCAtNjQsMTkgKzY1LDMwIEBACiAJVElTX0xPTkdfVElNRU9VVCA9IDIwMDAsCS8qIDIgc2VjICovCiB9OwogCisKKy8qIFNvbWUgdGltZW91dCB2YWx1ZXMgYXJlIG5lZWRlZCBiZWZvcmUgaXQgaXMga25vd24gd2hldGhlciB0aGUgY2hpcCBpcworICogVFBNIDEuMCBvciBUUE0gMi4wLgorICovCisjZGVmaW5lIFRJU19USU1FT1VUX0FfTUFYCW1heChUSVNfU0hPUlRfVElNRU9VVCwgVFBNMl9USU1FT1VUX0EpCisjZGVmaW5lIFRJU19USU1FT1VUX0JfTUFYCW1heChUSVNfTE9OR19USU1FT1VULCBUUE0yX1RJTUVPVVRfQikKKyNkZWZpbmUgVElTX1RJTUVPVVRfQ19NQVgJbWF4KFRJU19TSE9SVF9USU1FT1VULCBUUE0yX1RJTUVPVVRfQykKKyNkZWZpbmUgVElTX1RJTUVPVVRfRF9NQVgJbWF4KFRJU19TSE9SVF9USU1FT1VULCBUUE0yX1RJTUVPVVRfRCkKKwogI2RlZmluZQlUUE1fQUNDRVNTKGwpCQkJKDB4MDAwMCB8ICgobCkgPDwgMTIpKQogI2RlZmluZQlUUE1fSU5UX0VOQUJMRShsKQkJKDB4MDAwOCB8ICgobCkgPDwgMTIpKQogI2RlZmluZQlUUE1fSU5UX1ZFQ1RPUihsKQkJKDB4MDAwQyB8ICgobCkgPDwgMTIpKQogI2RlZmluZQlUUE1fSU5UX1NUQVRVUyhsKQkJKDB4MDAxMCB8ICgobCkgPDwgMTIpKQogI2RlZmluZQlUUE1fSU5URl9DQVBTKGwpCQkoMHgwMDE0IHwgKChsKSA8PCAxMikpCiAjZGVmaW5lCVRQTV9TVFMobCkJCQkoMHgwMDE4IHwgKChsKSA8PCAxMikpCisjZGVmaW5lCVRQTV9TVFMzKGwpCQkJKDB4MDAxYiB8ICgobCkgPDwgMTIpKQogI2RlZmluZQlUUE1fREFUQV9GSUZPKGwpCQkoMHgwMDI0IHwgKChsKSA8PCAxMikpCiAKICNkZWZpbmUJVFBNX0RJRF9WSUQobCkJCQkoMHgwRjAwIHwgKChsKSA8PCAxMikpCiAjZGVmaW5lCVRQTV9SSUQobCkJCQkoMHgwRjA0IHwgKChsKSA8PCAxMikpCiAKLXN0YXRpYyBMSVNUX0hFQUQodGlzX2NoaXBzKTsKLXN0YXRpYyBERUZJTkVfTVVURVgodGlzX2xvY2spOworc3RydWN0IHByaXZfZGF0YSB7CisJYm9vbCBpcnFfdGVzdGVkOworfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1BOUCkgJiYgZGVmaW5lZChDT05GSUdfQUNQSSkKIHN0YXRpYyBpbnQgaXNfaXRwbShzdHJ1Y3QgcG5wX2RldiAqZGV2KQpAQCAtMjQxLDcgKzI1Myw3IEBACiAJLyogcmVhZCBmaXJzdCAxMCBieXRlcywgaW5jbHVkaW5nIHRhZywgcGFyYW1zaXplLCBhbmQgcmVzdWx0ICovCiAJaWYgKChzaXplID0KIAkgICAgIHJlY3ZfZGF0YShjaGlwLCBidWYsIFRQTV9IRUFERVJfU0laRSkpIDwgVFBNX0hFQURFUl9TSVpFKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiVW5hYmxlIHRvIHJlYWQgaGVhZGVyXG4iKTsKKwkJZGV2X2VycihjaGlwLT5wZGV2LCAiVW5hYmxlIHRvIHJlYWQgaGVhZGVyXG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yNTQsNyArMjY2LDcgQEAKIAlpZiAoKHNpemUgKz0KIAkgICAgIHJlY3ZfZGF0YShjaGlwLCAmYnVmW1RQTV9IRUFERVJfU0laRV0sCiAJCSAgICAgICBleHBlY3RlZCAtIFRQTV9IRUFERVJfU0laRSkpIDwgZXhwZWN0ZWQpIHsKLQkJZGV2X2VycihjaGlwLT5kZXYsICJVbmFibGUgdG8gcmVhZCByZW1haW5kZXIgb2YgcmVzdWx0XG4iKTsKKwkJZGV2X2VycihjaGlwLT5wZGV2LCAiVW5hYmxlIHRvIHJlYWQgcmVtYWluZGVyIG9mIHJlc3VsdFxuIik7CiAJCXNpemUgPSAtRVRJTUU7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTI2Myw3ICsyNzUsNyBAQAogCQkJICAmY2hpcC0+dmVuZG9yLmludF9xdWV1ZSwgZmFsc2UpOwogCXN0YXR1cyA9IHRwbV90aXNfc3RhdHVzKGNoaXApOwogCWlmIChzdGF0dXMgJiBUUE1fU1RTX0RBVEFfQVZBSUwpIHsJLyogcmV0cnk/ICovCi0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiRXJyb3IgbGVmdCBvdmVyIGRhdGFcbiIpOworCQlkZXZfZXJyKGNoaXAtPnBkZXYsICJFcnJvciBsZWZ0IG92ZXIgZGF0YVxuIik7CiAJCXNpemUgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zMzgsMTUgKzM1MCwzMSBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIHZvaWQgZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCkKK3sKKwl1MzIgaW50bWFzazsKKworCWludG1hc2sgPQorCSAgICBpb3JlYWQzMihjaGlwLT52ZW5kb3IuaW9iYXNlICsKKwkJICAgICBUUE1fSU5UX0VOQUJMRShjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKKwlpbnRtYXNrICY9IH5UUE1fR0xPQkFMX0lOVF9FTkFCTEU7CisJaW93cml0ZTMyKGludG1hc2ssCisJCSAgY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCSAgVFBNX0lOVF9FTkFCTEUoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7CisJZnJlZV9pcnEoY2hpcC0+dmVuZG9yLmlycSwgY2hpcCk7CisJY2hpcC0+dmVuZG9yLmlycSA9IDA7Cit9CisKIC8qCiAgKiBJZiBpbnRlcnJ1cHRzIGFyZSB1c2VkIChzaWduYWxlZCBieSBhbiBpcnEgc2V0IGluIHRoZSB2ZW5kb3Igc3RydWN0dXJlKQogICogdHBtLmMgY2FuIHNraXAgcG9sbGluZyBmb3IgdGhlIGRhdGEgdG8gYmUgYXZhaWxhYmxlIGFzIHRoZSBpbnRlcnJ1cHQgaXMKICAqIHdhaXRlZCBmb3IgaGVyZQogICovCi1zdGF0aWMgaW50IHRwbV90aXNfc2VuZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4ICpidWYsIHNpemVfdCBsZW4pCitzdGF0aWMgaW50IHRwbV90aXNfc2VuZF9tYWluKHN0cnVjdCB0cG1fY2hpcCAqY2hpcCwgdTggKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlpbnQgcmM7CiAJdTMyIG9yZGluYWw7CisJdW5zaWduZWQgbG9uZyBkdXI7CiAKIAlyYyA9IHRwbV90aXNfc2VuZF9kYXRhKGNoaXAsIGJ1ZiwgbGVuKTsKIAlpZiAocmMgPCAwKQpAQCAtMzU4LDkgKzM4NiwxNCBAQAogCiAJaWYgKGNoaXAtPnZlbmRvci5pcnEpIHsKIAkJb3JkaW5hbCA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAoYnVmICsgNikpKTsKKworCQlpZiAoY2hpcC0+ZmxhZ3MgJiBUUE1fQ0hJUF9GTEFHX1RQTTIpCisJCQlkdXIgPSB0cG0yX2NhbGNfb3JkaW5hbF9kdXJhdGlvbihjaGlwLCBvcmRpbmFsKTsKKwkJZWxzZQorCQkJZHVyID0gdHBtX2NhbGNfb3JkaW5hbF9kdXJhdGlvbihjaGlwLCBvcmRpbmFsKTsKKwogCQlpZiAod2FpdF9mb3JfdHBtX3N0YXQKLQkJICAgIChjaGlwLCBUUE1fU1RTX0RBVEFfQVZBSUwgfCBUUE1fU1RTX1ZBTElELAotCQkgICAgIHRwbV9jYWxjX29yZGluYWxfZHVyYXRpb24oY2hpcCwgb3JkaW5hbCksCisJCSAgICAoY2hpcCwgVFBNX1NUU19EQVRBX0FWQUlMIHwgVFBNX1NUU19WQUxJRCwgZHVyLAogCQkgICAgICZjaGlwLT52ZW5kb3IucmVhZF9xdWV1ZSwgZmFsc2UpIDwgMCkgewogCQkJcmMgPSAtRVRJTUU7CiAJCQlnb3RvIG91dF9lcnI7CkBAIC0zNzMsNiArNDA2LDMwIEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IHRwbV90aXNfc2VuZChzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAsIHU4ICpidWYsIHNpemVfdCBsZW4pCit7CisJaW50IHJjLCBpcnE7CisJc3RydWN0IHByaXZfZGF0YSAqcHJpdiA9IGNoaXAtPnZlbmRvci5wcml2OworCisJaWYgKCFjaGlwLT52ZW5kb3IuaXJxIHx8IHByaXYtPmlycV90ZXN0ZWQpCisJCXJldHVybiB0cG1fdGlzX3NlbmRfbWFpbihjaGlwLCBidWYsIGxlbik7CisKKwkvKiBWZXJpZnkgcmVjZWlwdCBvZiB0aGUgZXhwZWN0ZWQgSVJRICovCisJaXJxID0gY2hpcC0+dmVuZG9yLmlycTsKKwljaGlwLT52ZW5kb3IuaXJxID0gMDsKKwlyYyA9IHRwbV90aXNfc2VuZF9tYWluKGNoaXAsIGJ1ZiwgbGVuKTsKKwljaGlwLT52ZW5kb3IuaXJxID0gaXJxOworCWlmICghcHJpdi0+aXJxX3Rlc3RlZCkKKwkJbXNsZWVwKDEpOworCWlmICghcHJpdi0+aXJxX3Rlc3RlZCkgeworCQlkaXNhYmxlX2ludGVycnVwdHMoY2hpcCk7CisJCWRldl9lcnIoY2hpcC0+cGRldiwKKwkJCUZXX0JVRyAiVFBNIGludGVycnVwdCBub3Qgd29ya2luZywgcG9sbGluZyBpbnN0ZWFkXG4iKTsKKwl9CisJcHJpdi0+aXJxX3Rlc3RlZCA9IHRydWU7CisJcmV0dXJuIHJjOworfQorCiBzdHJ1Y3QgdGlzX3ZlbmRvcl90aW1lb3V0X292ZXJyaWRlIHsKIAl1MzIgZGlkX3ZpZDsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXRfdXNbNF07CkBAIC00MzYsNyArNDkzLDcgQEAKIAogCXJjID0gdHBtX3Rpc19zZW5kX2RhdGEoY2hpcCwgY21kX2dldHRpY2tzLCBsZW4pOwogCWlmIChyYyA9PSAwKSB7Ci0JCWRldl9pbmZvKGNoaXAtPmRldiwgIkRldGVjdGVkIGFuIGlUUE0uXG4iKTsKKwkJZGV2X2luZm8oY2hpcC0+cGRldiwgIkRldGVjdGVkIGFuIGlUUE0uXG4iKTsKIAkJcmMgPSAxOwogCX0gZWxzZQogCQlyYyA9IC1FRkFVTFQ7CkBAIC01MDUsNiArNTYyLDcgQEAKIAlpZiAoaW50ZXJydXB0ID09IDApCiAJCXJldHVybiBJUlFfTk9ORTsKIAorCSgoc3RydWN0IHByaXZfZGF0YSAqKWNoaXAtPnZlbmRvci5wcml2KS0+aXJxX3Rlc3RlZCA9IHRydWU7CiAJaWYgKGludGVycnVwdCAmIFRQTV9JTlRGX0RBVEFfQVZBSUxfSU5UKQogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNoaXAtPnZlbmRvci5yZWFkX3F1ZXVlKTsKIAlpZiAoaW50ZXJydXB0ICYgVFBNX0lOVEZfTE9DQUxJVFlfQ0hBTkdFX0lOVCkKQEAgLTUyOCwyNyArNTg2LDQ4IEBACiBtb2R1bGVfcGFyYW0oaW50ZXJydXB0cywgYm9vbCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGludGVycnVwdHMsICJFbmFibGUgaW50ZXJydXB0cyIpOwogCi1zdGF0aWMgaW50IHRwbV90aXNfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHJlc291cmNlX3NpemVfdCBzdGFydCwKLQkJCXJlc291cmNlX3NpemVfdCBsZW4sIHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCB0cG1fdGlzX3JlbW92ZShzdHJ1Y3QgdHBtX2NoaXAgKmNoaXApCit7CisJaW93cml0ZTMyKH5UUE1fR0xPQkFMX0lOVF9FTkFCTEUgJgorCQkgIGlvcmVhZDMyKGNoaXAtPnZlbmRvci5pb2Jhc2UgKworCQkJICAgVFBNX0lOVF9FTkFCTEUoY2hpcC0+dmVuZG9yLgorCQkJCQkgIGxvY2FsaXR5KSksCisJCSAgY2hpcC0+dmVuZG9yLmlvYmFzZSArCisJCSAgVFBNX0lOVF9FTkFCTEUoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7CisJcmVsZWFzZV9sb2NhbGl0eShjaGlwLCBjaGlwLT52ZW5kb3IubG9jYWxpdHksIDEpOworfQorCitzdGF0aWMgaW50IHRwbV90aXNfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGFjcGlfaGFuZGxlIGFjcGlfZGV2X2hhbmRsZSwKKwkJCXJlc291cmNlX3NpemVfdCBzdGFydCwgcmVzb3VyY2Vfc2l6ZV90IGxlbiwKKwkJCXVuc2lnbmVkIGludCBpcnEpCiB7CiAJdTMyIHZlbmRvciwgaW50ZmNhcHMsIGludG1hc2s7CiAJaW50IHJjLCBpLCBpcnFfcywgaXJxX2UsIHByb2JlOwogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcDsKKwlzdHJ1Y3QgcHJpdl9kYXRhICpwcml2OwogCi0JaWYgKCEoY2hpcCA9IHRwbV9yZWdpc3Rlcl9oYXJkd2FyZShkZXYsICZ0cG1fdGlzKSkpCi0JCXJldHVybiAtRU5PREVWOworCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IHByaXZfZGF0YSksIEdGUF9LRVJORUwpOworCWlmIChwcml2ID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCi0JY2hpcC0+dmVuZG9yLmlvYmFzZSA9IGlvcmVtYXAoc3RhcnQsIGxlbik7Ci0JaWYgKCFjaGlwLT52ZW5kb3IuaW9iYXNlKSB7Ci0JCXJjID0gLUVJTzsKLQkJZ290byBvdXRfZXJyOwotCX0KKwljaGlwID0gdHBtbV9jaGlwX2FsbG9jKGRldiwgJnRwbV90aXMpOworCWlmIChJU19FUlIoY2hpcCkpCisJCXJldHVybiBQVFJfRVJSKGNoaXApOwogCi0JLyogRGVmYXVsdCB0aW1lb3V0cyAqLwotCWNoaXAtPnZlbmRvci50aW1lb3V0X2EgPSBtc2Vjc190b19qaWZmaWVzKFRJU19TSE9SVF9USU1FT1VUKTsKLQljaGlwLT52ZW5kb3IudGltZW91dF9iID0gbXNlY3NfdG9famlmZmllcyhUSVNfTE9OR19USU1FT1VUKTsKLQljaGlwLT52ZW5kb3IudGltZW91dF9jID0gbXNlY3NfdG9famlmZmllcyhUSVNfU0hPUlRfVElNRU9VVCk7Ci0JY2hpcC0+dmVuZG9yLnRpbWVvdXRfZCA9IG1zZWNzX3RvX2ppZmZpZXMoVElTX1NIT1JUX1RJTUVPVVQpOworCWNoaXAtPnZlbmRvci5wcml2ID0gcHJpdjsKKyNpZmRlZiBDT05GSUdfQUNQSQorCWNoaXAtPmFjcGlfZGV2X2hhbmRsZSA9IGFjcGlfZGV2X2hhbmRsZTsKKyNlbmRpZgorCisJY2hpcC0+dmVuZG9yLmlvYmFzZSA9IGRldm1faW9yZW1hcChkZXYsIHN0YXJ0LCBsZW4pOworCWlmICghY2hpcC0+dmVuZG9yLmlvYmFzZSkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBNYXhpbXVtIHRpbWVvdXRzICovCisJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYSA9IFRJU19USU1FT1VUX0FfTUFYOworCWNoaXAtPnZlbmRvci50aW1lb3V0X2IgPSBUSVNfVElNRU9VVF9CX01BWDsKKwljaGlwLT52ZW5kb3IudGltZW91dF9jID0gVElTX1RJTUVPVVRfQ19NQVg7CisJY2hpcC0+dmVuZG9yLnRpbWVvdXRfZCA9IFRJU19USU1FT1VUX0RfTUFYOwogCiAJaWYgKHdhaXRfc3RhcnR1cChjaGlwLCAwKSAhPSAwKSB7CiAJCXJjID0gLUVOT0RFVjsKQEAgLTU2MCwxMSArNjM5LDE4IEBACiAJCWdvdG8gb3V0X2VycjsKIAl9CiAKKwkvKiBFdmVyeSBUUE0gMi54IGNvbW1hbmQgaGFzIGEgaGlnaGVyIG9yZGluYWwgdGhhbiBUUE0gMS54IGNvbW1hbmRzLgorCSAqIFRoZXJlZm9yZSwgd2UgY2FuIHVzZSBhbiBpZGVtcG90ZW50IFRQTSAyLnggY29tbWFuZCB0byBwcm9iZSBUUE0gMi54LgorCSAqLworCXJjID0gdHBtMl9nZW5faW50ZXJydXB0KGNoaXAsIHRydWUpOworCWlmIChyYyA9PSAwIHx8IHJjID09IFRQTTJfUkNfSU5JVElBTElaRSkKKwkJY2hpcC0+ZmxhZ3MgfD0gVFBNX0NISVBfRkxBR19UUE0yOworCiAJdmVuZG9yID0gaW9yZWFkMzIoY2hpcC0+dmVuZG9yLmlvYmFzZSArIFRQTV9ESURfVklEKDApKTsKIAljaGlwLT52ZW5kb3IubWFudWZhY3R1cmVyX2lkID0gdmVuZG9yOwogCi0JZGV2X2luZm8oZGV2LAotCQkgIjEuMiBUUE0gKGRldmljZS1pZCAweCVYLCByZXYtaWQgJWQpXG4iLAorCWRldl9pbmZvKGRldiwgIiVzIFRQTSAoZGV2aWNlLWlkIDB4JVgsIHJldi1pZCAlZClcbiIsCisJCSAoY2hpcC0+ZmxhZ3MgJiBUUE1fQ0hJUF9GTEFHX1RQTTIpID8gIjIuMCIgOiAiMS4yIiwKIAkJIHZlbmRvciA+PiAxNiwgaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsgVFBNX1JJRCgwKSkpOwogCiAJaWYgKCFpdHBtKSB7CkBAIC02MDUsMTkgKzY5MSw2IEBACiAJaWYgKGludGZjYXBzICYgVFBNX0lOVEZfREFUQV9BVkFJTF9JTlQpCiAJCWRldl9kYmcoZGV2LCAiXHREYXRhIEF2YWlsIEludCBTdXBwb3J0XG4iKTsKIAotCS8qIGdldCB0aGUgdGltZW91dHMgYmVmb3JlIHRlc3RpbmcgZm9yIGlycXMgKi8KLQlpZiAodHBtX2dldF90aW1lb3V0cyhjaGlwKSkgewotCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBnZXQgVFBNIHRpbWVvdXRzIGFuZCBkdXJhdGlvbnNcbiIpOwotCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2VycjsKLQl9Ci0KLQlpZiAodHBtX2RvX3NlbGZ0ZXN0KGNoaXApKSB7Ci0JCWRldl9lcnIoZGV2LCAiVFBNIHNlbGYgdGVzdCBmYWlsZWRcbiIpOwotCQlyYyA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2VycjsKLQl9Ci0KIAkvKiBJTlRFUlJVUFQgU2V0dXAgKi8KIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaGlwLT52ZW5kb3IucmVhZF9xdWV1ZSk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2hpcC0+dmVuZG9yLmludF9xdWV1ZSk7CkBAIC02NDksMTAgKzcyMiwxMCBAQAogCQlmb3IgKGkgPSBpcnFfczsgaSA8PSBpcnFfZSAmJiBjaGlwLT52ZW5kb3IuaXJxID09IDA7IGkrKykgewogCQkJaW93cml0ZTgoaSwgY2hpcC0+dmVuZG9yLmlvYmFzZSArCiAJCQkJIFRQTV9JTlRfVkVDVE9SKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOwotCQkJaWYgKHJlcXVlc3RfaXJxCi0JCQkgICAgKGksIHRpc19pbnRfcHJvYmUsIElSUUZfU0hBUkVELAotCQkJICAgICBjaGlwLT52ZW5kb3IubWlzY2Rldi5uYW1lLCBjaGlwKSAhPSAwKSB7Ci0JCQkJZGV2X2luZm8oY2hpcC0+ZGV2LAorCQkJaWYgKGRldm1fcmVxdWVzdF9pcnEKKwkJCSAgICAoZGV2LCBpLCB0aXNfaW50X3Byb2JlLCBJUlFGX1NIQVJFRCwKKwkJCSAgICAgY2hpcC0+ZGV2bmFtZSwgY2hpcCkgIT0gMCkgeworCQkJCWRldl9pbmZvKGNoaXAtPnBkZXYsCiAJCQkJCSAiVW5hYmxlIHRvIHJlcXVlc3QgaXJxOiAlZCBmb3IgcHJvYmVcbiIsCiAJCQkJCSBpKTsKIAkJCQljb250aW51ZTsKQEAgLTY3Myw3ICs3NDYsMTAgQEAKIAkJCWNoaXAtPnZlbmRvci5wcm9iZWRfaXJxID0gMDsKIAogCQkJLyogR2VuZXJhdGUgSW50ZXJydXB0cyAqLwotCQkJdHBtX2dlbl9pbnRlcnJ1cHQoY2hpcCk7CisJCQlpZiAoY2hpcC0+ZmxhZ3MgJiBUUE1fQ0hJUF9GTEFHX1RQTTIpCisJCQkJdHBtMl9nZW5faW50ZXJydXB0KGNoaXAsIGZhbHNlKTsKKwkJCWVsc2UKKwkJCQl0cG1fZ2VuX2ludGVycnVwdChjaGlwKTsKIAogCQkJY2hpcC0+dmVuZG9yLmlycSA9IGNoaXAtPnZlbmRvci5wcm9iZWRfaXJxOwogCkBAIC02OTAsMTcgKzc2NiwxNiBAQAogCQkJaW93cml0ZTMyKGludG1hc2ssCiAJCQkJICBjaGlwLT52ZW5kb3IuaW9iYXNlICsKIAkJCQkgIFRQTV9JTlRfRU5BQkxFKGNoaXAtPnZlbmRvci5sb2NhbGl0eSkpOwotCQkJZnJlZV9pcnEoaSwgY2hpcCk7CiAJCX0KIAl9CiAJaWYgKGNoaXAtPnZlbmRvci5pcnEpIHsKIAkJaW93cml0ZTgoY2hpcC0+dmVuZG9yLmlycSwKIAkJCSBjaGlwLT52ZW5kb3IuaW9iYXNlICsKIAkJCSBUUE1fSU5UX1ZFQ1RPUihjaGlwLT52ZW5kb3IubG9jYWxpdHkpKTsKLQkJaWYgKHJlcXVlc3RfaXJxCi0JCSAgICAoY2hpcC0+dmVuZG9yLmlycSwgdGlzX2ludF9oYW5kbGVyLCBJUlFGX1NIQVJFRCwKLQkJICAgICBjaGlwLT52ZW5kb3IubWlzY2Rldi5uYW1lLCBjaGlwKSAhPSAwKSB7Ci0JCQlkZXZfaW5mbyhjaGlwLT5kZXYsCisJCWlmIChkZXZtX3JlcXVlc3RfaXJxCisJCSAgICAoZGV2LCBjaGlwLT52ZW5kb3IuaXJxLCB0aXNfaW50X2hhbmRsZXIsIElSUUZfU0hBUkVELAorCQkgICAgIGNoaXAtPmRldm5hbWUsIGNoaXApICE9IDApIHsKKwkJCWRldl9pbmZvKGNoaXAtPnBkZXYsCiAJCQkJICJVbmFibGUgdG8gcmVxdWVzdCBpcnE6ICVkIGZvciB1c2VcbiIsCiAJCQkJIGNoaXAtPnZlbmRvci5pcnEpOwogCQkJY2hpcC0+dmVuZG9yLmlycSA9IDA7CkBAIC03MTksMTcgKzc5NCw0OSBAQAogCQl9CiAJfQogCi0JSU5JVF9MSVNUX0hFQUQoJmNoaXAtPnZlbmRvci5saXN0KTsKLQltdXRleF9sb2NrKCZ0aXNfbG9jayk7Ci0JbGlzdF9hZGQoJmNoaXAtPnZlbmRvci5saXN0LCAmdGlzX2NoaXBzKTsKLQltdXRleF91bmxvY2soJnRpc19sb2NrKTsKKwlpZiAoY2hpcC0+ZmxhZ3MgJiBUUE1fQ0hJUF9GTEFHX1RQTTIpIHsKKwkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfYSA9IG1zZWNzX3RvX2ppZmZpZXMoVFBNMl9USU1FT1VUX0EpOworCQljaGlwLT52ZW5kb3IudGltZW91dF9iID0gbXNlY3NfdG9famlmZmllcyhUUE0yX1RJTUVPVVRfQik7CisJCWNoaXAtPnZlbmRvci50aW1lb3V0X2MgPSBtc2Vjc190b19qaWZmaWVzKFRQTTJfVElNRU9VVF9DKTsKKwkJY2hpcC0+dmVuZG9yLnRpbWVvdXRfZCA9IG1zZWNzX3RvX2ppZmZpZXMoVFBNMl9USU1FT1VUX0QpOworCQljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX1NIT1JUXSA9CisJCQltc2Vjc190b19qaWZmaWVzKFRQTTJfRFVSQVRJT05fU0hPUlQpOworCQljaGlwLT52ZW5kb3IuZHVyYXRpb25bVFBNX01FRElVTV0gPQorCQkJbXNlY3NfdG9famlmZmllcyhUUE0yX0RVUkFUSU9OX01FRElVTSk7CisJCWNoaXAtPnZlbmRvci5kdXJhdGlvbltUUE1fTE9OR10gPQorCQkJbXNlY3NfdG9famlmZmllcyhUUE0yX0RVUkFUSU9OX0xPTkcpOwogCisJCXJjID0gdHBtMl9kb19zZWxmdGVzdChjaGlwKTsKKwkJaWYgKHJjID09IFRQTTJfUkNfSU5JVElBTElaRSkgeworCQkJZGV2X3dhcm4oZGV2LCAiRmlybXdhcmUgaGFzIG5vdCBzdGFydGVkIFRQTVxuIik7CisJCQlyYyAgPSB0cG0yX3N0YXJ0dXAoY2hpcCwgVFBNMl9TVV9DTEVBUik7CisJCQlpZiAoIXJjKQorCQkJCXJjID0gdHBtMl9kb19zZWxmdGVzdChjaGlwKTsKKwkJfQogCi0JcmV0dXJuIDA7CisJCWlmIChyYykgeworCQkJZGV2X2VycihkZXYsICJUUE0gc2VsZiB0ZXN0IGZhaWxlZFxuIik7CisJCQlpZiAocmMgPiAwKQorCQkJCXJjID0gLUVOT0RFVjsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCX0gZWxzZSB7CisJCWlmICh0cG1fZ2V0X3RpbWVvdXRzKGNoaXApKSB7CisJCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBnZXQgVFBNIHRpbWVvdXRzIGFuZCBkdXJhdGlvbnNcbiIpOworCQkJcmMgPSAtRU5PREVWOworCQkJZ290byBvdXRfZXJyOworCQl9CisKKwkJaWYgKHRwbV9kb19zZWxmdGVzdChjaGlwKSkgeworCQkJZGV2X2VycihkZXYsICJUUE0gc2VsZiB0ZXN0IGZhaWxlZFxuIik7CisJCQlyYyA9IC1FTk9ERVY7CisJCQlnb3RvIG91dF9lcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gdHBtX2NoaXBfcmVnaXN0ZXIoY2hpcCk7CiBvdXRfZXJyOgotCWlmIChjaGlwLT52ZW5kb3IuaW9iYXNlKQotCQlpb3VubWFwKGNoaXAtPnZlbmRvci5pb2Jhc2UpOwotCXRwbV9yZW1vdmVfaGFyZHdhcmUoY2hpcC0+ZGV2KTsKKwl0cG1fdGlzX3JlbW92ZShjaGlwKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTc1OCwxNCArODY1LDIzIEBACiBzdGF0aWMgaW50IHRwbV90aXNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCiAJaWYgKGNoaXAtPnZlbmRvci5pcnEpCiAJCXRwbV90aXNfcmVlbmFibGVfaW50ZXJydXB0cyhjaGlwKTsKIAotCXJldCA9IHRwbV9wbV9yZXN1bWUoZGV2KTsKLQlpZiAoIXJldCkKLQkJdHBtX2RvX3NlbGZ0ZXN0KGNoaXApOworCWlmIChjaGlwLT5mbGFncyAmIFRQTV9DSElQX0ZMQUdfVFBNMikgeworCQkvKiBOT1AgaWYgZmlybXdhcmUgcHJvcGVybHkgZG9lcyB0aGlzLiAqLworCQl0cG0yX3N0YXJ0dXAoY2hpcCwgVFBNMl9TVV9TVEFURSk7CisKKwkJcmV0ID0gdHBtMl9zaHV0ZG93bihjaGlwLCBUUE0yX1NVX1NUQVRFKTsKKwkJaWYgKCFyZXQpCisJCQlyZXQgPSB0cG0yX2RvX3NlbGZ0ZXN0KGNoaXApOworCX0gZWxzZSB7CisJCXJldCA9IHRwbV9wbV9yZXN1bWUoZGV2KTsKKwkJaWYgKCFyZXQpCisJCQl0cG1fZG9fc2VsZnRlc3QoY2hpcCk7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTc3OSw2ICs4OTUsNyBAQAogewogCXJlc291cmNlX3NpemVfdCBzdGFydCwgbGVuOwogCXVuc2lnbmVkIGludCBpcnEgPSAwOworCWFjcGlfaGFuZGxlIGFjcGlfZGV2X2hhbmRsZSA9IE5VTEw7CiAKIAlzdGFydCA9IHBucF9tZW1fc3RhcnQocG5wX2RldiwgMCk7CiAJbGVuID0gcG5wX21lbV9sZW4ocG5wX2RldiwgMCk7CkBAIC03OTEsNyArOTA4LDEyIEBACiAJaWYgKGlzX2l0cG0ocG5wX2RldikpCiAJCWl0cG0gPSB0cnVlOwogCi0JcmV0dXJuIHRwbV90aXNfaW5pdCgmcG5wX2Rldi0+ZGV2LCBzdGFydCwgbGVuLCBpcnEpOworI2lmZGVmIENPTkZJR19BQ1BJCisJaWYgKHBucF9hY3BpX2RldmljZShwbnBfZGV2KSkKKwkJYWNwaV9kZXZfaGFuZGxlID0gcG5wX2FjcGlfZGV2aWNlKHBucF9kZXYpLT5oYW5kbGU7CisjZW5kaWYKKworCXJldHVybiB0cG1fdGlzX2luaXQoJnBucF9kZXYtPmRldiwgYWNwaV9kZXZfaGFuZGxlLCBzdGFydCwgbGVuLCBpcnEpOwogfQogCiBzdGF0aWMgc3RydWN0IHBucF9kZXZpY2VfaWQgdHBtX3BucF90YmxbXSA9IHsKQEAgLTgxMSwxMyArOTMzLDEwIEBACiBzdGF0aWMgdm9pZCB0cG1fdGlzX3BucF9yZW1vdmUoc3RydWN0IHBucF9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgdHBtX2NoaXAgKmNoaXAgPSBwbnBfZ2V0X2RydmRhdGEoZGV2KTsKLQotCXRwbV9kZXZfdmVuZG9yX3JlbGVhc2UoY2hpcCk7Ci0KLQlrZnJlZShjaGlwKTsKKwl0cG1fY2hpcF91bnJlZ2lzdGVyKGNoaXApOworCXRwbV90aXNfcmVtb3ZlKGNoaXApOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgcG5wX2RyaXZlciB0aXNfcG5wX2RyaXZlciA9IHsKIAkubmFtZSA9ICJ0cG1fdGlzIiwKIAkuaWRfdGFibGUgPSB0cG1fcG5wX3RibCwKQEAgLTgzNiw3ICs5NTUsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aXNfZHJ2ID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInRwbV90aXMiLAorCQkubmFtZQkJPSAidHBtX3RpcyIsCiAJCS5wbQkJPSAmdHBtX3Rpc19wbSwKIAl9LAogfTsKQEAgLTg2Miw3ICs5ODEsNyBAQAogCQlyYyA9IFBUUl9FUlIocGRldik7CiAJCWdvdG8gZXJyX2RldjsKIAl9Ci0JcmMgPSB0cG1fdGlzX2luaXQoJnBkZXYtPmRldiwgVElTX01FTV9CQVNFLCBUSVNfTUVNX0xFTiwgMCk7CisJcmMgPSB0cG1fdGlzX2luaXQoJnBkZXYtPmRldiwgTlVMTCwgVElTX01FTV9CQVNFLCBUSVNfTUVNX0xFTiwgMCk7CiAJaWYgKHJjKQogCQlnb3RvIGVycl9pbml0OwogCXJldHVybiAwOwpAQCAtODc1LDMxICs5OTQsMTYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfdGlzKHZvaWQpCiB7Ci0Jc3RydWN0IHRwbV92ZW5kb3Jfc3BlY2lmaWMgKmksICpqOwogCXN0cnVjdCB0cG1fY2hpcCAqY2hpcDsKLQltdXRleF9sb2NrKCZ0aXNfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGksIGosICZ0aXNfY2hpcHMsIGxpc3QpIHsKLQkJY2hpcCA9IHRvX3RwbV9jaGlwKGkpOwotCQl0cG1fcmVtb3ZlX2hhcmR3YXJlKGNoaXAtPmRldik7Ci0JCWlvd3JpdGUzMih+VFBNX0dMT0JBTF9JTlRfRU5BQkxFICYKLQkJCSAgaW9yZWFkMzIoY2hpcC0+dmVuZG9yLmlvYmFzZSArCi0JCQkJICAgVFBNX0lOVF9FTkFCTEUoY2hpcC0+dmVuZG9yLgotCQkJCQkJICBsb2NhbGl0eSkpLAotCQkJICBjaGlwLT52ZW5kb3IuaW9iYXNlICsKLQkJCSAgVFBNX0lOVF9FTkFCTEUoY2hpcC0+dmVuZG9yLmxvY2FsaXR5KSk7Ci0JCXJlbGVhc2VfbG9jYWxpdHkoY2hpcCwgY2hpcC0+dmVuZG9yLmxvY2FsaXR5LCAxKTsKLQkJaWYgKGNoaXAtPnZlbmRvci5pcnEpCi0JCQlmcmVlX2lycShjaGlwLT52ZW5kb3IuaXJxLCBjaGlwKTsKLQkJaW91bm1hcChpLT5pb2Jhc2UpOwotCQlsaXN0X2RlbCgmaS0+bGlzdCk7Ci0JfQotCW11dGV4X3VubG9jaygmdGlzX2xvY2spOwogI2lmZGVmIENPTkZJR19QTlAKIAlpZiAoIWZvcmNlKSB7CiAJCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmdGlzX3BucF9kcml2ZXIpOwogCQlyZXR1cm47CiAJfQogI2VuZGlmCisJY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwl0cG1fY2hpcF91bnJlZ2lzdGVyKGNoaXApOworCXRwbV90aXNfcmVtb3ZlKGNoaXApOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOwogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ0aXNfZHJ2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90cG0veGVuLXRwbWZyb250LmMgYi9kcml2ZXJzL2NoYXIvdHBtL3hlbi10cG1mcm9udC5jCmluZGV4IDQ0MWI0NGUuLmMzYjRmNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0veGVuLXRwbWZyb250LmMKKysrIGIvZHJpdmVycy9jaGFyL3RwbS94ZW4tdHBtZnJvbnQuYwpAQCAtMTc1LDkgKzE3NSw5IEBACiB7CiAJc3RydWN0IHRwbV9jaGlwICpjaGlwOwogCi0JY2hpcCA9IHRwbV9yZWdpc3Rlcl9oYXJkd2FyZShkZXYsICZ0cG1fdnRwbSk7Ci0JaWYgKCFjaGlwKQotCQlyZXR1cm4gLUVOT0RFVjsKKwljaGlwID0gdHBtbV9jaGlwX2FsbG9jKGRldiwgJnRwbV92dHBtKTsKKwlpZiAoSVNfRVJSKGNoaXApKQorCQlyZXR1cm4gUFRSX0VSUihjaGlwKTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoaXAtPnZlbmRvci5yZWFkX3F1ZXVlKTsKIApAQCAtMjg2LDYgKzI4Niw3IEBACiAJCWNvbnN0IHN0cnVjdCB4ZW5idXNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdHBtX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IHRwbV9jaGlwICpjaGlwOwogCWludCBydjsKIAogCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwpAQCAtMzAyLDIxICszMDMsMjIgQEAKIAogCXJ2ID0gc2V0dXBfcmluZyhkZXYsIHByaXYpOwogCWlmIChydikgewotCQl0cG1fcmVtb3ZlX2hhcmR3YXJlKCZkZXYtPmRldik7CisJCWNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKKwkJdHBtX2NoaXBfdW5yZWdpc3RlcihjaGlwKTsKIAkJcmluZ19mcmVlKHByaXYpOwogCQlyZXR1cm4gcnY7CiAJfQogCiAJdHBtX2dldF90aW1lb3V0cyhwcml2LT5jaGlwKTsKIAotCXJldHVybiBydjsKKwlyZXR1cm4gdHBtX2NoaXBfcmVnaXN0ZXIocHJpdi0+Y2hpcCk7CiB9CiAKIHN0YXRpYyBpbnQgdHBtZnJvbnRfcmVtb3ZlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHRwbV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7CiAJc3RydWN0IHRwbV9wcml2YXRlICpwcml2ID0gVFBNX1ZQUklWKGNoaXApOwotCXRwbV9yZW1vdmVfaGFyZHdhcmUoJmRldi0+ZGV2KTsKKwl0cG1fY2hpcF91bnJlZ2lzdGVyKGNoaXApOwogCXJpbmdfZnJlZShwcml2KTsKIAlUUE1fVlBSSVYoY2hpcCkgPSBOVUxMOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvS2NvbmZpZyBiL2RyaXZlcnMvY2xrL0tjb25maWcKaW5kZXggM2Y0NGYyOS4uOTFmODYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbGsvS2NvbmZpZworKysgYi9kcml2ZXJzL2Nsay9LY29uZmlnCkBAIC0xMyw2ICsxMyw3IEBACiAJYm9vbAogCXNlbGVjdCBIQVZFX0NMS19QUkVQQVJFCiAJc2VsZWN0IENMS0RFVl9MT09LVVAKKwlzZWxlY3QgU1JDVQogCS0tLWhlbHAtLS0KIAkgIFRoZSBjb21tb24gY2xvY2sgZnJhbWV3b3JrIGlzIGEgc2luZ2xlIGRlZmluaXRpb24gb2Ygc3RydWN0CiAJICBjbGssIHVzZWZ1bCBhY3Jvc3MgbWFueSBwbGF0Zm9ybXMsIGFzIHdlbGwgYXMgYW4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMyODguYyBiL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMyODguYwppbmRleCAxMTE5NGI4Li5jYmNkZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9yb2NrY2hpcC9jbGstcmszMjg4LmMKKysrIGIvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzI4OC5jCkBAIC0xOTAsNyArMTkwLDcgQEAKIFBOQU1FKG11eF91YXJ0M19wKQk9IHsgInVhcnQzX3NyYyIsICJ1YXJ0M19mcmFjIiwgInhpbjI0bSIgfTsKIFBOQU1FKG11eF91YXJ0NF9wKQk9IHsgInVhcnQ0X3NyYyIsICJ1YXJ0NF9mcmFjIiwgInhpbjI0bSIgfTsKIFBOQU1FKG11eF9jaWZfb3V0X3ApCT0geyAiY2lmX3NyYyIsICJ4aW4yNG0iIH07Ci1QTkFNRShtdXhfbWFjcmVmX3ApCT0geyAibWFjX3NyYyIsICJleHRfZ21hYyIgfTsKK1BOQU1FKG11eF9tYWNfcCkJPSB7ICJtYWNfcGxsX3NyYyIsICJleHRfZ21hYyIgfTsKIFBOQU1FKG11eF9oc2FkY291dF9wKQk9IHsgImhzYWRjX3NyYyIsICJleHRfaHNhZGMiIH07CiBQTkFNRShtdXhfZWRwXzI0bV9wKQk9IHsgImV4dF9lZHBfMjRtIiwgInhpbjI0bSIgfTsKIFBOQU1FKG11eF90c3BvdXRfcCkJPSB7ICJjcGxsIiwgImdwbGwiLCAibnBsbCIsICJ4aW4yN20iIH07CkBAIC01NzUsMTggKzU3NSwxOCBAQAogCU1VWChTQ0xLX1VBUlQ0LCAic2Nsa191YXJ0NCIsIG11eF91YXJ0NF9wLCAwLAogCQkJUkszMjg4X0NMS1NFTF9DT04oMyksIDgsIDIsIE1GTEFHUyksCiAKLQlDT01QT1NJVEUoMCwgIm1hY19zcmMiLCBtdXhfcGxsX3NyY19ucGxsX2NwbGxfZ3BsbF9wLCAwLAorCUNPTVBPU0lURSgwLCAibWFjX3BsbF9zcmMiLCBtdXhfcGxsX3NyY19ucGxsX2NwbGxfZ3BsbF9wLCAwLAogCQkJUkszMjg4X0NMS1NFTF9DT04oMjEpLCAwLCAyLCBNRkxBR1MsIDgsIDUsIERGTEFHUywKIAkJCVJLMzI4OF9DTEtHQVRFX0NPTigyKSwgNSwgR0ZMQUdTKSwKLQlNVVgoMCwgIm1hY3JlZiIsIG11eF9tYWNyZWZfcCwgMCwKKwlNVVgoU0NMS19NQUMsICJtYWNfY2xrIiwgbXV4X21hY19wLCAwLAogCQkJUkszMjg4X0NMS1NFTF9DT04oMjEpLCA0LCAxLCBNRkxBR1MpLAotCUdBVEUoMCwgInNjbGtfbWFjcmVmX291dCIsICJtYWNyZWYiLCAwLAorCUdBVEUoU0NMS19NQUNSRUZfT1VULCAic2Nsa19tYWNyZWZfb3V0IiwgIm1hY19jbGsiLCAwLAogCQkJUkszMjg4X0NMS0dBVEVfQ09OKDUpLCAzLCBHRkxBR1MpLAotCUdBVEUoU0NMS19NQUNSRUYsICJzY2xrX21hY3JlZiIsICJtYWNyZWYiLCAwLAorCUdBVEUoU0NMS19NQUNSRUYsICJzY2xrX21hY3JlZiIsICJtYWNfY2xrIiwgMCwKIAkJCVJLMzI4OF9DTEtHQVRFX0NPTig1KSwgMiwgR0ZMQUdTKSwKLQlHQVRFKFNDTEtfTUFDX1JYLCAic2Nsa19tYWNfcngiLCAibWFjcmVmIiwgMCwKKwlHQVRFKFNDTEtfTUFDX1JYLCAic2Nsa19tYWNfcngiLCAibWFjX2NsayIsIDAsCiAJCQlSSzMyODhfQ0xLR0FURV9DT04oNSksIDAsIEdGTEFHUyksCi0JR0FURShTQ0xLX01BQ19UWCwgInNjbGtfbWFjX3R4IiwgIm1hY3JlZiIsIDAsCisJR0FURShTQ0xLX01BQ19UWCwgInNjbGtfbWFjX3R4IiwgIm1hY19jbGsiLCAwLAogCQkJUkszMjg4X0NMS0dBVEVfQ09OKDUpLCAxLCBHRkxBR1MpLAogCiAJQ09NUE9TSVRFKDAsICJoc2FkY19zcmMiLCBtdXhfcGxsX3NyY19jcGxsX2dwbGxfcCwgMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZwppbmRleCBmYzAxZWMyLi44YTE0NzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWcKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnCkBAIC0yMjksNCArMjI5LDExIEBACiAJZGVwZW5kcyBvbiBNSVBTX0dJQwogCXNlbGVjdCBDTEtTUkNfT0YKIAorY29uZmlnIENMS1NSQ19QWEEKKwlkZWZfYm9vbCB5IGlmIEFSQ0hfUFhBIHx8IEFSQ0hfU0ExMTAwCisJc2VsZWN0IENMS1NSQ19PRiBpZiBVU0VfT0YKKwloZWxwCisJICBUaGlzIGVuYWJsZXMgT1NUMCBzdXBwb3J0IGF2YWlsYWJsZSBvbiBQWEEgYW5kIFNBLTExeDAKKwkgIHBsYXRmb3Jtcy4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZSBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKaW5kZXggOTRkOTBiMi4uYWE1MjZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCkBAIC0yMSw3ICsyMSw3IEBACiBvYmotJChDT05GSUdfQVJDSF9NQVJDTykJKz0gdGltZXItbWFyY28ubwogb2JqLSQoQ09ORklHX0FSQ0hfTU9YQVJUKQkrPSBtb3hhcnRfdGltZXIubwogb2JqLSQoQ09ORklHX0FSQ0hfTVhTKQkJKz0gbXhzX3RpbWVyLm8KLW9iai0kKENPTkZJR19BUkNIX1BYQSkJCSs9IHB4YV90aW1lci5vCitvYmotJChDT05GSUdfQ0xLU1JDX1BYQSkJKz0gcHhhX3RpbWVyLm8KIG9iai0kKENPTkZJR19BUkNIX1BSSU1BMikJKz0gdGltZXItcHJpbWEyLm8KIG9iai0kKENPTkZJR19BUkNIX1UzMDApCQkrPSB0aW1lci11MzAwLm8KIG9iai0kKENPTkZJR19TVU40SV9USU1FUikJKz0gc3VuNGlfdGltZXIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9hcm1fYXJjaF90aW1lci5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9hcm1fYXJjaF90aW1lci5jCmluZGV4IDA5NWMxNzcuLmEzMDI1ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvYXJtX2FyY2hfdGltZXIuYworKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL2FybV9hcmNoX3RpbWVyLmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVfcG0uaD4KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZyBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCmluZGV4IDI5YjJlZjUuLmExNzFmZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCiBjb25maWcgQ1BVX0ZSRVEKIAlib29sICJDUFUgRnJlcXVlbmN5IHNjYWxpbmciCisJc2VsZWN0IFNSQ1UKIAloZWxwCiAJICBDUFUgRnJlcXVlbmN5IHNjYWxpbmcgYWxsb3dzIHlvdSB0byBjaGFuZ2UgdGhlIGNsb2NrIHNwZWVkIG9mIAogCSAgQ1BVcyBvbiB0aGUgZmx5LiBUaGlzIGlzIGEgbmljZSBtZXRob2QgdG8gc2F2ZSBwb3dlciwgYmVjYXVzZSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnLng4NiBiL2RyaXZlcnMvY3B1ZnJlcS9LY29uZmlnLng4NgppbmRleCA4OWFlODhmLi5jNTliZGNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZy54ODYKKysrIGIvZHJpdmVycy9jcHVmcmVxL0tjb25maWcueDg2CkBAIC01Nyw2ICs1NywxNiBAQAogCSAgQnkgZW5hYmxpbmcgdGhpcyBvcHRpb24gdGhlIGFjcGlfY3B1ZnJlcSBkcml2ZXIgcHJvdmlkZXMgdGhlIG9sZAogCSAgZW50cnkgaW4gYWRkaXRpb24gdG8gdGhlIG5ldyBib29zdCBvbmVzLCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLgogCitjb25maWcgWDg2X1NGSV9DUFVGUkVRCisJdHJpc3RhdGUgIlNGSSBQZXJmb3JtYW5jZS1TdGF0ZXMgZHJpdmVyIgorCWRlcGVuZHMgb24gWDg2X0lOVEVMX01JRCAmJiBTRkkKKwloZWxwCisJICBUaGlzIGFkZHMgYSBDUFVGcmVxIGRyaXZlciBmb3Igc29tZSBTaWx2ZXJtb250IGJhc2VkIEludGVsIEF0b20KKwkgIGFyY2hpdGVjdHVyZXMgbGlrZSBaMzR4eCBhbmQgWjM1eHggd2hpY2ggZW51bWVyYXRlIHByb2Nlc3NvcgorCSAgcGVyZm9ybWFuY2Ugc3RhdGVzIHRocm91Z2ggU0ZJLgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4uCisKIGNvbmZpZyBFTEFOX0NQVUZSRVEKIAl0cmlzdGF0ZSAiQU1EIEVsYW4gU0M0MDAgYW5kIFNDNDEwIgogCWRlcGVuZHMgb24gTUVMQU4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9NYWtlZmlsZSBiL2RyaXZlcnMvY3B1ZnJlcS9NYWtlZmlsZQppbmRleCBiM2NhN2IwLi44YjQyMjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jcHVmcmVxL01ha2VmaWxlCkBAIC00MSw2ICs0MSw3IEBACiBvYmotJChDT05GSUdfWDg2X0NQVUZSRVFfTkZPUkNFMikJKz0gY3B1ZnJlcS1uZm9yY2UyLm8KIG9iai0kKENPTkZJR19YODZfSU5URUxfUFNUQVRFKQkJKz0gaW50ZWxfcHN0YXRlLm8KIG9iai0kKENPTkZJR19YODZfQU1EX0ZSRVFfU0VOU0lUSVZJVFkpCSs9IGFtZF9mcmVxX3NlbnNpdGl2aXR5Lm8KK29iai0kKENPTkZJR19YODZfU0ZJX0NQVUZSRVEpCQkrPSBzZmktY3B1ZnJlcS5vCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQVJNIFNvQyBkcml2ZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS1kdC5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEtZHQuYwppbmRleCBmZGU5N2Q2Li5iYWI2N2RiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS1kdC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLWR0LmMKQEAgLTMyMCw4ICszMjAsNyBAQAogewogCXN0cnVjdCBwcml2YXRlX2RhdGEgKnByaXYgPSBwb2xpY3ktPmRyaXZlcl9kYXRhOwogCi0JaWYgKHByaXYtPmNkZXYpCi0JCWNwdWZyZXFfY29vbGluZ191bnJlZ2lzdGVyKHByaXYtPmNkZXYpOworCWNwdWZyZXFfY29vbGluZ191bnJlZ2lzdGVyKHByaXYtPmNkZXYpOwogCWRldl9wbV9vcHBfZnJlZV9jcHVmcmVxX3RhYmxlKHByaXYtPmNwdV9kZXYsICZwb2xpY3ktPmZyZXFfdGFibGUpOwogCW9mX2ZyZWVfb3BwX3RhYmxlKHByaXYtPmNwdV9kZXYpOwogCWNsa19wdXQocG9saWN5LT5jbGspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggNDZiZWQ0Zi4uMjhlNTlhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC0yNyw5ICsyNywyMSBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvcG93ZXIuaD4KIAorLyogTWFjcm9zIHRvIGl0ZXJhdGUgb3ZlciBsaXN0cyAqLworLyogSXRlcmF0ZSBvdmVyIG9ubGluZSBDUFVzIHBvbGljaWVzICovCitzdGF0aWMgTElTVF9IRUFEKGNwdWZyZXFfcG9saWN5X2xpc3QpOworI2RlZmluZSBmb3JfZWFjaF9wb2xpY3koX19wb2xpY3kpCQkJCVwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KF9fcG9saWN5LCAmY3B1ZnJlcV9wb2xpY3lfbGlzdCwgcG9saWN5X2xpc3QpCisKKy8qIEl0ZXJhdGUgb3ZlciBnb3Zlcm5vcnMgKi8KK3N0YXRpYyBMSVNUX0hFQUQoY3B1ZnJlcV9nb3Zlcm5vcl9saXN0KTsKKyNkZWZpbmUgZm9yX2VhY2hfZ292ZXJub3IoX19nb3Zlcm5vcikJCQkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoX19nb3Zlcm5vciwgJmNwdWZyZXFfZ292ZXJub3JfbGlzdCwgZ292ZXJub3JfbGlzdCkKKwogLyoqCiAgKiBUaGUgImNwdWZyZXEgZHJpdmVyIiAtIHRoZSBhcmNoLSBvciBoYXJkd2FyZS1kZXBlbmRlbnQgbG93CiAgKiBsZXZlbCBkcml2ZXIgb2YgQ1BVRnJlcSBzdXBwb3J0LCBhbmQgaXRzIHNwaW5sb2NrLiBUaGlzIGxvY2sKQEAgLTQwLDcgKzUyLDYgQEAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKiwgY3B1ZnJlcV9jcHVfZGF0YV9mYWxsYmFjayk7CiBzdGF0aWMgREVGSU5FX1JXTE9DSyhjcHVmcmVxX2RyaXZlcl9sb2NrKTsKIERFRklORV9NVVRFWChjcHVmcmVxX2dvdmVybm9yX2xvY2spOwotc3RhdGljIExJU1RfSEVBRChjcHVmcmVxX3BvbGljeV9saXN0KTsKIAogLyogVGhpcyBvbmUga2VlcHMgdHJhY2sgb2YgdGhlIHByZXZpb3VzbHkgc2V0IGdvdmVybm9yIG9mIGEgcmVtb3ZlZCBDUFUgKi8KIHN0YXRpYyBERUZJTkVfUEVSX0NQVShjaGFyW0NQVUZSRVFfTkFNRV9MRU5dLCBjcHVmcmVxX2NwdV9nb3Zlcm5vcik7CkBAIC02Miw3ICs3Myw3IEBACiAvKiBpbnRlcm5hbCBwcm90b3R5cGVzICovCiBzdGF0aWMgaW50IF9fY3B1ZnJlcV9nb3Zlcm5vcihzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJdW5zaWduZWQgaW50IGV2ZW50KTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19jcHVmcmVxX2dldCh1bnNpZ25lZCBpbnQgY3B1KTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19jcHVmcmVxX2dldChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSk7CiBzdGF0aWMgdm9pZCBoYW5kbGVfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKIC8qKgpAQCAtOTMsNyArMTA0LDYgQEAKIHsKIAlvZmYgPSAxOwogfQotc3RhdGljIExJU1RfSEVBRChjcHVmcmVxX2dvdmVybm9yX2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWChjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKIAogYm9vbCBoYXZlX2dvdmVybm9yX3Blcl9wb2xpY3kodm9pZCkKQEAgLTIwMiw3ICsyMTIsNyBAQAogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5ID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGNwdWZyZXFfZGlzYWJsZWQoKSB8fCAoY3B1ID49IG5yX2NwdV9pZHMpKQorCWlmIChjcHUgPj0gbnJfY3B1X2lkcykKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAoIWRvd25fcmVhZF90cnlsb2NrKCZjcHVmcmVxX3J3c2VtKSkKQEAgLTIyOSw5ICsyMzksNiBAQAogCiB2b2lkIGNwdWZyZXFfY3B1X3B1dChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKLQlpZiAoY3B1ZnJlcV9kaXNhYmxlZCgpKQotCQlyZXR1cm47Ci0KIAlrb2JqZWN0X3B1dCgmcG9saWN5LT5rb2JqKTsKIAl1cF9yZWFkKCZjcHVmcmVxX3J3c2VtKTsKIH0KQEAgLTI0OSwxMiArMjU2LDEyIEBACiAgKiBzeXN0ZW1zIGFzIGVhY2ggQ1BVIG1pZ2h0IGJlIHNjYWxlZCBkaWZmZXJlbnRseS4gU28sIHVzZSB0aGUgYXJjaAogICogcGVyLUNQVSBsb29wc19wZXJfamlmZnkgdmFsdWUgd2hlcmV2ZXIgcG9zc2libGUuCiAgKi8KLSNpZm5kZWYgQ09ORklHX1NNUAotc3RhdGljIHVuc2lnbmVkIGxvbmcgbF9wX2pfcmVmOwotc3RhdGljIHVuc2lnbmVkIGludCBsX3Bfal9yZWZfZnJlcTsKLQogc3RhdGljIHZvaWQgYWRqdXN0X2ppZmZpZXModW5zaWduZWQgbG9uZyB2YWwsIHN0cnVjdCBjcHVmcmVxX2ZyZXFzICpjaSkKIHsKKyNpZm5kZWYgQ09ORklHX1NNUAorCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxfcF9qX3JlZjsKKwlzdGF0aWMgdW5zaWduZWQgaW50IGxfcF9qX3JlZl9mcmVxOworCiAJaWYgKGNpLT5mbGFncyAmIENQVUZSRVFfQ09OU1RfTE9PUFMpCiAJCXJldHVybjsKIApAQCAtMjcwLDEzICsyNzcsOCBAQAogCQlwcl9kZWJ1Zygic2NhbGluZyBsb29wc19wZXJfamlmZnkgdG8gJWx1IGZvciBmcmVxdWVuY3kgJXUga0h6XG4iLAogCQkJIGxvb3BzX3Blcl9qaWZmeSwgY2ktPm5ldyk7CiAJfQotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RfamlmZmllcyh1bnNpZ25lZCBsb25nIHZhbCwgc3RydWN0IGNwdWZyZXFfZnJlcXMgKmNpKQotewotCXJldHVybjsKLX0KICNlbmRpZgorfQogCiBzdGF0aWMgdm9pZCBfX2NwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCXN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxcywgdW5zaWduZWQgaW50IHN0YXRlKQpAQCAtNDMyLDExICs0MzQsMTEgQEAKIH0KIGRlZmluZV9vbmVfZ2xvYmFsX3J3KGJvb3N0KTsKIAotc3RhdGljIHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICpfX2ZpbmRfZ292ZXJub3IoY29uc3QgY2hhciAqc3RyX2dvdmVybm9yKQorc3RhdGljIHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICpmaW5kX2dvdmVybm9yKGNvbnN0IGNoYXIgKnN0cl9nb3Zlcm5vcikKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciAqdDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmNwdWZyZXFfZ292ZXJub3JfbGlzdCwgZ292ZXJub3JfbGlzdCkKKwlmb3JfZWFjaF9nb3Zlcm5vcih0KQogCQlpZiAoIXN0cm5jYXNlY21wKHN0cl9nb3Zlcm5vciwgdC0+bmFtZSwgQ1BVRlJFUV9OQU1FX0xFTikpCiAJCQlyZXR1cm4gdDsKIApAQCAtNDYzLDEyICs0NjUsMTIgQEAKIAkJCSpwb2xpY3kgPSBDUFVGUkVRX1BPTElDWV9QT1dFUlNBVkU7CiAJCQllcnIgPSAwOwogCQl9Ci0JfSBlbHNlIGlmIChoYXNfdGFyZ2V0KCkpIHsKKwl9IGVsc2UgewogCQlzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciAqdDsKIAogCQltdXRleF9sb2NrKCZjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKIAotCQl0ID0gX19maW5kX2dvdmVybm9yKHN0cl9nb3Zlcm5vcik7CisJCXQgPSBmaW5kX2dvdmVybm9yKHN0cl9nb3Zlcm5vcik7CiAKIAkJaWYgKHQgPT0gTlVMTCkgewogCQkJaW50IHJldDsKQEAgLTQ3OCw3ICs0ODAsNyBAQAogCQkJbXV0ZXhfbG9jaygmY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7CiAKIAkJCWlmIChyZXQgPT0gMCkKLQkJCQl0ID0gX19maW5kX2dvdmVybm9yKHN0cl9nb3Zlcm5vcik7CisJCQkJdCA9IGZpbmRfZ292ZXJub3Ioc3RyX2dvdmVybm9yKTsKIAkJfQogCiAJCWlmICh0ICE9IE5VTEwpIHsKQEAgLTUxMyw4ICs1MTUsNyBAQAogc2hvd19vbmUoc2NhbGluZ19taW5fZnJlcSwgbWluKTsKIHNob3dfb25lKHNjYWxpbmdfbWF4X2ZyZXEsIG1heCk7CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfc2NhbGluZ19jdXJfZnJlcSgKLQlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19zY2FsaW5nX2N1cl9mcmVxKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCBjaGFyICpidWYpCiB7CiAJc3NpemVfdCByZXQ7CiAKQEAgLTU2Myw3ICs1NjQsNyBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19jcHVpbmZvX2N1cl9mcmVxKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJCQljaGFyICpidWYpCiB7Ci0JdW5zaWduZWQgaW50IGN1cl9mcmVxID0gX19jcHVmcmVxX2dldChwb2xpY3ktPmNwdSk7CisJdW5zaWduZWQgaW50IGN1cl9mcmVxID0gX19jcHVmcmVxX2dldChwb2xpY3kpOwogCWlmICghY3VyX2ZyZXEpCiAJCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjx1bmtub3duPiIpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBjdXJfZnJlcSk7CkBAIC02MzksNyArNjQwLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmY3B1ZnJlcV9nb3Zlcm5vcl9saXN0LCBnb3Zlcm5vcl9saXN0KSB7CisJZm9yX2VhY2hfZ292ZXJub3IodCkgewogCQlpZiAoaSA+PSAoc3NpemVfdCkgKChQQUdFX1NJWkUgLyBzaXplb2YoY2hhcikpCiAJCSAgICAtIChDUFVGUkVRX05BTUVfTEVOICsgMikpKQogCQkJZ290byBvdXQ7CkBAIC05MDIsNyArOTAzLDcgQEAKIAogCS8qIHNldCB1cCBmaWxlcyBmb3IgdGhpcyBjcHUgZGV2aWNlICovCiAJZHJ2X2F0dHIgPSBjcHVmcmVxX2RyaXZlci0+YXR0cjsKLQl3aGlsZSAoKGRydl9hdHRyKSAmJiAoKmRydl9hdHRyKSkgeworCXdoaWxlIChkcnZfYXR0ciAmJiAqZHJ2X2F0dHIpIHsKIAkJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnBvbGljeS0+a29iaiwgJigoKmRydl9hdHRyKS0+YXR0cikpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKQEAgLTkzNiw3ICs5MzcsNyBAQAogCW1lbWNweSgmbmV3X3BvbGljeSwgcG9saWN5LCBzaXplb2YoKnBvbGljeSkpOwogCiAJLyogVXBkYXRlIGdvdmVybm9yIG9mIG5ld19wb2xpY3kgdG8gdGhlIGdvdmVybm9yIHVzZWQgYmVmb3JlIGhvdHBsdWcgKi8KLQlnb3YgPSBfX2ZpbmRfZ292ZXJub3IocGVyX2NwdShjcHVmcmVxX2NwdV9nb3Zlcm5vciwgcG9saWN5LT5jcHUpKTsKKwlnb3YgPSBmaW5kX2dvdmVybm9yKHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIHBvbGljeS0+Y3B1KSk7CiAJaWYgKGdvdikKIAkJcHJfZGVidWcoIlJlc3RvcmluZyBnb3Zlcm5vciAlcyBmb3IgY3B1ICVkXG4iLAogCQkJCXBvbGljeS0+Z292ZXJub3ItPm5hbWUsIHBvbGljeS0+Y3B1KTsKQEAgLTk1OCw3ICs5NTksNiBAQAogCX0KIH0KIAotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogc3RhdGljIGludCBjcHVmcmVxX2FkZF9wb2xpY3lfY3B1KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJCSAgdW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtOTk2LDcgKzk5Niw2IEBACiAKIAlyZXR1cm4gc3lzZnNfY3JlYXRlX2xpbmsoJmRldi0+a29iaiwgJnBvbGljeS0+a29iaiwgImNwdWZyZXEiKTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjcHVmcmVxX3BvbGljeV9yZXN0b3JlKHVuc2lnbmVkIGludCBjcHUpCiB7CkBAIC0xMDMzLDYgKzEwMzIsOCBAQAogCWluaXRfcndzZW0oJnBvbGljeS0+cndzZW0pOwogCXNwaW5fbG9ja19pbml0KCZwb2xpY3ktPnRyYW5zaXRpb25fbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcG9saWN5LT50cmFuc2l0aW9uX3dhaXQpOworCWluaXRfY29tcGxldGlvbigmcG9saWN5LT5rb2JqX3VucmVnaXN0ZXIpOworCUlOSVRfV09SSygmcG9saWN5LT51cGRhdGUsIGhhbmRsZV91cGRhdGUpOwogCiAJcmV0dXJuIHBvbGljeTsKIApAQCAtMTA5MSwxNSArMTA5Miw5IEBACiAJfQogCiAJZG93bl93cml0ZSgmcG9saWN5LT5yd3NlbSk7Ci0KLQlwb2xpY3ktPmxhc3RfY3B1ID0gcG9saWN5LT5jcHU7CiAJcG9saWN5LT5jcHUgPSBjcHU7Ci0KIAl1cF93cml0ZSgmcG9saWN5LT5yd3NlbSk7CiAKLQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZjcHVmcmVxX3BvbGljeV9ub3RpZmllcl9saXN0LAotCQkJQ1BVRlJFUV9VUERBVEVfUE9MSUNZX0NQVSwgcG9saWN5KTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xMTEwLDQxICsxMTA1LDMyIEBACiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlib29sIHJlY292ZXJfcG9saWN5ID0gY3B1ZnJlcV9zdXNwZW5kZWQ7Ci0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0Jc3RydWN0IGNwdWZyZXFfcG9saWN5ICp0cG9saWN5OwotI2VuZGlmCiAKIAlpZiAoY3B1X2lzX29mZmxpbmUoY3B1KSkKIAkJcmV0dXJuIDA7CiAKIAlwcl9kZWJ1ZygiYWRkaW5nIENQVSAldVxuIiwgY3B1KTsKIAotI2lmZGVmIENPTkZJR19TTVAKIAkvKiBjaGVjayB3aGV0aGVyIGEgZGlmZmVyZW50IENQVSBhbHJlYWR5IHJlZ2lzdGVyZWQgdGhpcwogCSAqIENQVSBiZWNhdXNlIGl0IGlzIGluIHRoZSBzYW1lIGJvYXQuICovCi0JcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0KGNwdSk7Ci0JaWYgKHVubGlrZWx5KHBvbGljeSkpIHsKLQkJY3B1ZnJlcV9jcHVfcHV0KHBvbGljeSk7CisJcG9saWN5ID0gY3B1ZnJlcV9jcHVfZ2V0X3JhdyhjcHUpOworCWlmICh1bmxpa2VseShwb2xpY3kpKQogCQlyZXR1cm4gMDsKLQl9Ci0jZW5kaWYKIAogCWlmICghZG93bl9yZWFkX3RyeWxvY2soJmNwdWZyZXFfcndzZW0pKQogCQlyZXR1cm4gMDsKIAotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCS8qIENoZWNrIGlmIHRoaXMgY3B1IHdhcyBob3QtdW5wbHVnZ2VkIGVhcmxpZXIgYW5kIGhhcyBzaWJsaW5ncyAqLwogCXJlYWRfbG9ja19pcnFzYXZlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0cG9saWN5LCAmY3B1ZnJlcV9wb2xpY3lfbGlzdCwgcG9saWN5X2xpc3QpIHsKLQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCB0cG9saWN5LT5yZWxhdGVkX2NwdXMpKSB7CisJZm9yX2VhY2hfcG9saWN5KHBvbGljeSkgeworCQlpZiAoY3B1bWFza190ZXN0X2NwdShjcHUsIHBvbGljeS0+cmVsYXRlZF9jcHVzKSkgewogCQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmY3B1ZnJlcV9kcml2ZXJfbG9jaywgZmxhZ3MpOwotCQkJcmV0ID0gY3B1ZnJlcV9hZGRfcG9saWN5X2NwdSh0cG9saWN5LCBjcHUsIGRldik7CisJCQlyZXQgPSBjcHVmcmVxX2FkZF9wb2xpY3lfY3B1KHBvbGljeSwgY3B1LCBkZXYpOwogCQkJdXBfcmVhZCgmY3B1ZnJlcV9yd3NlbSk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKLSNlbmRpZgogCiAJLyoKIAkgKiBSZXN0b3JlIHRoZSBzYXZlZCBwb2xpY3kgd2hlbiBkb2luZyBsaWdodC13ZWlnaHQgaW5pdCBhbmQgZmFsbCBiYWNrCkBAIC0xMTcxLDkgKzExNTcsNiBAQAogCiAJY3B1bWFza19jb3B5KHBvbGljeS0+Y3B1cywgY3B1bWFza19vZihjcHUpKTsKIAotCWluaXRfY29tcGxldGlvbigmcG9saWN5LT5rb2JqX3VucmVnaXN0ZXIpOwotCUlOSVRfV09SSygmcG9saWN5LT51cGRhdGUsIGhhbmRsZV91cGRhdGUpOwotCiAJLyogY2FsbCBkcml2ZXIuIEZyb20gdGhlbiBvbiB0aGUgY3B1ZnJlcSBtdXN0IGJlIGFibGUKIAkgKiB0byBhY2NlcHQgYWxsIGNhbGxzIHRvIC0+dmVyaWZ5IGFuZCAtPnNldHBvbGljeSBmb3IgdGhpcyBDUFUKIAkgKi8KQEAgLTEzNzEsMTEgKzEzNTQsMTAgQEAKIAkJCXByX2VycigiJXM6IEZhaWxlZCB0byBzdG9wIGdvdmVybm9yXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0JfQogCi0JaWYgKCFjcHVmcmVxX2RyaXZlci0+c2V0cG9saWN5KQogCQlzdHJuY3B5KHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSksCiAJCQlwb2xpY3ktPmdvdmVybm9yLT5uYW1lLCBDUFVGUkVRX05BTUVfTEVOKTsKKwl9CiAKIAlkb3duX3JlYWQoJnBvbGljeS0+cndzZW0pOwogCWNwdXMgPSBjcHVtYXNrX3dlaWdodChwb2xpY3ktPmNwdXMpOwpAQCAtMTQxNiw5ICsxMzk4LDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeTsKIAotCXJlYWRfbG9ja19pcnFzYXZlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CiAJcG9saWN5ID0gcGVyX2NwdShjcHVmcmVxX2NwdV9kYXRhLCBjcHUpOwotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKKwlwZXJfY3B1KGNwdWZyZXFfY3B1X2RhdGEsIGNwdSkgPSBOVUxMOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CiAKIAlpZiAoIXBvbGljeSkgewogCQlwcl9kZWJ1ZygiJXM6IE5vIGNwdV9kYXRhIGZvdW5kXG4iLCBfX2Z1bmNfXyk7CkBAIC0xNDczLDcgKzE0NTYsNiBAQAogCQl9CiAJfQogCi0JcGVyX2NwdShjcHVmcmVxX2NwdV9kYXRhLCBjcHUpID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUxMCwzMCArMTQ5MiwyMyBAQAogLyoqCiAgKgljcHVmcmVxX291dF9vZl9zeW5jIC0gSWYgYWN0dWFsIGFuZCBzYXZlZCBDUFUgZnJlcXVlbmN5IGRpZmZlcnMsIHdlJ3JlCiAgKglpbiBkZWVwIHRyb3VibGUuCi0gKglAY3B1OiBjcHUgbnVtYmVyCi0gKglAb2xkX2ZyZXE6IENQVSBmcmVxdWVuY3kgdGhlIGtlcm5lbCB0aGlua3MgdGhlIENQVSBydW5zIGF0CisgKglAcG9saWN5OiBwb2xpY3kgbWFuYWdpbmcgQ1BVcwogICoJQG5ld19mcmVxOiBDUFUgZnJlcXVlbmN5IHRoZSBDUFUgYWN0dWFsbHkgcnVucyBhdAogICoKICAqCVdlIGFkanVzdCB0byBjdXJyZW50IGZyZXF1ZW5jeSBmaXJzdCwgYW5kIG5lZWQgdG8gY2xlYW4gdXAgbGF0ZXIuCiAgKglTbyBlaXRoZXIgY2FsbCB0byBjcHVmcmVxX3VwZGF0ZV9wb2xpY3koKSBvciBzY2hlZHVsZSBoYW5kbGVfdXBkYXRlKCkpLgogICovCi1zdGF0aWMgdm9pZCBjcHVmcmVxX291dF9vZl9zeW5jKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBvbGRfZnJlcSwKK3N0YXRpYyB2b2lkIGNwdWZyZXFfb3V0X29mX3N5bmMoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkJdW5zaWduZWQgaW50IG5ld19mcmVxKQogewotCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5OwogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzIGZyZXFzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlwcl9kZWJ1ZygiV2FybmluZzogQ1BVIGZyZXF1ZW5jeSBvdXQgb2Ygc3luYzogY3B1ZnJlcSBhbmQgdGltaW5nIGNvcmUgdGhpbmtzIG9mICV1LCBpcyAldSBrSHpcbiIsCi0JCSBvbGRfZnJlcSwgbmV3X2ZyZXEpOworCQkgcG9saWN5LT5jdXIsIG5ld19mcmVxKTsKIAotCWZyZXFzLm9sZCA9IG9sZF9mcmVxOworCWZyZXFzLm9sZCA9IHBvbGljeS0+Y3VyOwogCWZyZXFzLm5ldyA9IG5ld19mcmVxOwogCi0JcmVhZF9sb2NrX2lycXNhdmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQlwb2xpY3kgPSBwZXJfY3B1KGNwdWZyZXFfY3B1X2RhdGEsIGNwdSk7Ci0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmY3B1ZnJlcV9kcml2ZXJfbG9jaywgZmxhZ3MpOwotCiAJY3B1ZnJlcV9mcmVxX3RyYW5zaXRpb25fYmVnaW4ocG9saWN5LCAmZnJlcXMpOwogCWNwdWZyZXFfZnJlcV90cmFuc2l0aW9uX2VuZChwb2xpY3ksICZmcmVxcywgMCk7CiB9CkBAIC0xNTgzLDIyICsxNTU4LDIxIEBACiB9CiBFWFBPUlRfU1lNQk9MKGNwdWZyZXFfcXVpY2tfZ2V0X21heCk7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19jcHVmcmVxX2dldCh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIHVuc2lnbmVkIGludCBfX2NwdWZyZXFfZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewotCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5ID0gcGVyX2NwdShjcHVmcmVxX2NwdV9kYXRhLCBjcHUpOwogCXVuc2lnbmVkIGludCByZXRfZnJlcSA9IDA7CiAKIAlpZiAoIWNwdWZyZXFfZHJpdmVyLT5nZXQpCiAJCXJldHVybiByZXRfZnJlcTsKIAotCXJldF9mcmVxID0gY3B1ZnJlcV9kcml2ZXItPmdldChjcHUpOworCXJldF9mcmVxID0gY3B1ZnJlcV9kcml2ZXItPmdldChwb2xpY3ktPmNwdSk7CiAKIAlpZiAocmV0X2ZyZXEgJiYgcG9saWN5LT5jdXIgJiYKIAkJIShjcHVmcmVxX2RyaXZlci0+ZmxhZ3MgJiBDUFVGUkVRX0NPTlNUX0xPT1BTKSkgewogCQkvKiB2ZXJpZnkgbm8gZGlzY3JlcGFuY3kgYmV0d2VlbiBhY3R1YWwgYW5kCiAJCQkJCXNhdmVkIHZhbHVlIGV4aXN0cyAqLwogCQlpZiAodW5saWtlbHkocmV0X2ZyZXEgIT0gcG9saWN5LT5jdXIpKSB7Ci0JCQljcHVmcmVxX291dF9vZl9zeW5jKGNwdSwgcG9saWN5LT5jdXIsIHJldF9mcmVxKTsKKwkJCWNwdWZyZXFfb3V0X29mX3N5bmMocG9saWN5LCByZXRfZnJlcSk7CiAJCQlzY2hlZHVsZV93b3JrKCZwb2xpY3ktPnVwZGF0ZSk7CiAJCX0KIAl9CkBAIC0xNjE5LDcgKzE1OTMsNyBAQAogCiAJaWYgKHBvbGljeSkgewogCQlkb3duX3JlYWQoJnBvbGljeS0+cndzZW0pOwotCQlyZXRfZnJlcSA9IF9fY3B1ZnJlcV9nZXQoY3B1KTsKKwkJcmV0X2ZyZXEgPSBfX2NwdWZyZXFfZ2V0KHBvbGljeSk7CiAJCXVwX3JlYWQoJnBvbGljeS0+cndzZW0pOwogCiAJCWNwdWZyZXFfY3B1X3B1dChwb2xpY3kpOwpAQCAtMTY4Miw3ICsxNjU2LDcgQEAKIAogCXByX2RlYnVnKCIlczogU3VzcGVuZGluZyBHb3Zlcm5vcnNcbiIsIF9fZnVuY19fKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9saWN5LCAmY3B1ZnJlcV9wb2xpY3lfbGlzdCwgcG9saWN5X2xpc3QpIHsKKwlmb3JfZWFjaF9wb2xpY3kocG9saWN5KSB7CiAJCWlmIChfX2NwdWZyZXFfZ292ZXJub3IocG9saWN5LCBDUFVGUkVRX0dPVl9TVE9QKSkKIAkJCXByX2VycigiJXM6IEZhaWxlZCB0byBzdG9wIGdvdmVybm9yIGZvciBwb2xpY3k6ICVwXG4iLAogCQkJCV9fZnVuY19fLCBwb2xpY3kpOwpAQCAtMTcxNiw3ICsxNjkwLDcgQEAKIAogCXByX2RlYnVnKCIlczogUmVzdW1pbmcgR292ZXJub3JzXG4iLCBfX2Z1bmNfXyk7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvbGljeSwgJmNwdWZyZXFfcG9saWN5X2xpc3QsIHBvbGljeV9saXN0KSB7CisJZm9yX2VhY2hfcG9saWN5KHBvbGljeSkgewogCQlpZiAoY3B1ZnJlcV9kcml2ZXItPnJlc3VtZSAmJiBjcHVmcmVxX2RyaXZlci0+cmVzdW1lKHBvbGljeSkpCiAJCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gcmVzdW1lIGRyaXZlcjogJXBcbiIsIF9fZnVuY19fLAogCQkJCXBvbGljeSk7CkBAIC0yMDA2LDEwICsxOTgwLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNwdWZyZXFfZHJpdmVyX3RhcmdldCk7CiAKLS8qCi0gKiB3aGVuICJldmVudCIgaXMgQ1BVRlJFUV9HT1ZfTElNSVRTCi0gKi8KLQogc3RhdGljIGludCBfX2NwdWZyZXFfZ292ZXJub3Ioc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkJCXVuc2lnbmVkIGludCBldmVudCkKIHsKQEAgLTIxMDcsNyArMjA3Nyw3IEBACiAKIAlnb3Zlcm5vci0+aW5pdGlhbGl6ZWQgPSAwOwogCWVyciA9IC1FQlVTWTsKLQlpZiAoX19maW5kX2dvdmVybm9yKGdvdmVybm9yLT5uYW1lKSA9PSBOVUxMKSB7CisJaWYgKCFmaW5kX2dvdmVybm9yKGdvdmVybm9yLT5uYW1lKSkgewogCQllcnIgPSAwOwogCQlsaXN0X2FkZCgmZ292ZXJub3ItPmdvdmVybm9yX2xpc3QsICZjcHVmcmVxX2dvdmVybm9yX2xpc3QpOwogCX0KQEAgLTIzMDcsOCArMjI3Nyw3IEBACiAJCQlwb2xpY3ktPmN1ciA9IG5ld19wb2xpY3kuY3VyOwogCQl9IGVsc2UgewogCQkJaWYgKHBvbGljeS0+Y3VyICE9IG5ld19wb2xpY3kuY3VyICYmIGhhc190YXJnZXQoKSkKLQkJCQljcHVmcmVxX291dF9vZl9zeW5jKGNwdSwgcG9saWN5LT5jdXIsCi0JCQkJCQkJCW5ld19wb2xpY3kuY3VyKTsKKwkJCQljcHVmcmVxX291dF9vZl9zeW5jKHBvbGljeSwgbmV3X3BvbGljeS5jdXIpOwogCQl9CiAJfQogCkBAIC0yMzY0LDcgKzIzMzMsNyBAQAogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5OwogCWludCByZXQgPSAtRUlOVkFMOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb2xpY3ksICZjcHVmcmVxX3BvbGljeV9saXN0LCBwb2xpY3lfbGlzdCkgeworCWZvcl9lYWNoX3BvbGljeShwb2xpY3kpIHsKIAkJZnJlcV90YWJsZSA9IGNwdWZyZXFfZnJlcXVlbmN5X2dldF90YWJsZShwb2xpY3ktPmNwdSk7CiAJCWlmIChmcmVxX3RhYmxlKSB7CiAJCQlyZXQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9jcHVpbmZvKHBvbGljeSwKQEAgLTI0NTQsOSArMjQyMyw2IEBACiAKIAlwcl9kZWJ1ZygidHJ5aW5nIHRvIHJlZ2lzdGVyIGRyaXZlciAlc1xuIiwgZHJpdmVyX2RhdGEtPm5hbWUpOwogCi0JaWYgKGRyaXZlcl9kYXRhLT5zZXRwb2xpY3kpCi0JCWRyaXZlcl9kYXRhLT5mbGFncyB8PSBDUFVGUkVRX0NPTlNUX0xPT1BTOwotCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CiAJaWYgKGNwdWZyZXFfZHJpdmVyKSB7CiAJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CkBAIC0yNDY1LDYgKzI0MzEsOSBAQAogCWNwdWZyZXFfZHJpdmVyID0gZHJpdmVyX2RhdGE7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAorCWlmIChkcml2ZXJfZGF0YS0+c2V0cG9saWN5KQorCQlkcml2ZXJfZGF0YS0+ZmxhZ3MgfD0gQ1BVRlJFUV9DT05TVF9MT09QUzsKKwogCWlmIChjcHVmcmVxX2Jvb3N0X3N1cHBvcnRlZCgpKSB7CiAJCS8qCiAJCSAqIENoZWNrIGlmIGRyaXZlciBwcm92aWRlcyBmdW5jdGlvbiB0byBlbmFibGUgYm9vc3QgLQpAQCAtMjQ4NSwyMyArMjQ1NCwxMiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2Jvb3N0X3VucmVnOwogCi0JaWYgKCEoY3B1ZnJlcV9kcml2ZXItPmZsYWdzICYgQ1BVRlJFUV9TVElDS1kpKSB7Ci0JCWludCBpOwotCQlyZXQgPSAtRU5PREVWOwotCi0JCS8qIGNoZWNrIGZvciBhdCBsZWFzdCBvbmUgd29ya2luZyBDUFUgKi8KLQkJZm9yIChpID0gMDsgaSA8IG5yX2NwdV9pZHM7IGkrKykKLQkJCWlmIChjcHVfcG9zc2libGUoaSkgJiYgcGVyX2NwdShjcHVmcmVxX2NwdV9kYXRhLCBpKSkgewotCQkJCXJldCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KKwlpZiAoIShjcHVmcmVxX2RyaXZlci0+ZmxhZ3MgJiBDUFVGUkVRX1NUSUNLWSkgJiYKKwkgICAgbGlzdF9lbXB0eSgmY3B1ZnJlcV9wb2xpY3lfbGlzdCkpIHsKIAkJLyogaWYgYWxsIC0+aW5pdCgpIGNhbGxzIGZhaWxlZCwgdW5yZWdpc3RlciAqLwotCQlpZiAocmV0KSB7Ci0JCQlwcl9kZWJ1Zygibm8gQ1BVIGluaXRpYWxpemVkIGZvciBkcml2ZXIgJXNcbiIsCi0JCQkJIGRyaXZlcl9kYXRhLT5uYW1lKTsKLQkJCWdvdG8gZXJyX2lmX3VucmVnOwotCQl9CisJCXByX2RlYnVnKCIlczogTm8gQ1BVIGluaXRpYWxpemVkIGZvciBkcml2ZXIgJXNcbiIsIF9fZnVuY19fLAorCQkJIGRyaXZlcl9kYXRhLT5uYW1lKTsKKwkJZ290byBlcnJfaWZfdW5yZWc7CiAJfQogCiAJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZjcHVmcmVxX2NwdV9ub3RpZmllcik7CkBAIC0yNTU2LDYgKzI1MTQsMTQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIpOwogCisvKgorICogU3RvcCBjcHVmcmVxIGF0IHNodXRkb3duIHRvIG1ha2Ugc3VyZSBpdCBpc24ndCBob2xkaW5nIGFueSBsb2NrcworICogb3IgbXV0ZXhlcyB3aGVuIHNlY29uZGFyeSBDUFVzIGFyZSBoYWx0ZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgY3B1ZnJlcV9zeXNjb3JlX29wcyA9IHsKKwkuc2h1dGRvd24gPSBjcHVmcmVxX3N1c3BlbmQsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBjcHVmcmVxX2NvcmVfaW5pdCh2b2lkKQogewogCWlmIChjcHVmcmVxX2Rpc2FibGVkKCkpCkBAIC0yNTY0LDYgKzI1MzAsOCBAQAogCWNwdWZyZXFfZ2xvYmFsX2tvYmplY3QgPSBrb2JqZWN0X2NyZWF0ZSgpOwogCUJVR19PTighY3B1ZnJlcV9nbG9iYWxfa29iamVjdCk7CiAKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmY3B1ZnJlcV9zeXNjb3JlX29wcyk7CisKIAlyZXR1cm4gMDsKIH0KIGNvcmVfaW5pdGNhbGwoY3B1ZnJlcV9jb3JlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKaW5kZXggMGNkOWI0ZC4uNWUzNzBhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCkBAIC0xOCw3ICsxOCw2IEBACiBzdGF0aWMgc3BpbmxvY2tfdCBjcHVmcmVxX3N0YXRzX2xvY2s7CiAKIHN0cnVjdCBjcHVmcmVxX3N0YXRzIHsKLQl1bnNpZ25lZCBpbnQgY3B1OwogCXVuc2lnbmVkIGludCB0b3RhbF90cmFuczsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbGFzdF90aW1lOwogCXVuc2lnbmVkIGludCBtYXhfc3RhdGU7CkBAIC0zMSw1MCArMzAsMzMgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHVmcmVxX3N0YXRzICosIGNwdWZyZXFfc3RhdHNfdGFibGUpOwotCi1zdHJ1Y3QgY3B1ZnJlcV9zdGF0c19hdHRyaWJ1dGUgewotCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90KCpzaG93KSAoc3RydWN0IGNwdWZyZXFfc3RhdHMgKiwgY2hhciAqKTsKLX07Ci0KLXN0YXRpYyBpbnQgY3B1ZnJlcV9zdGF0c191cGRhdGUodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyBpbnQgY3B1ZnJlcV9zdGF0c191cGRhdGUoc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXRzKQogewotCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0OwotCXVuc2lnbmVkIGxvbmcgbG9uZyBjdXJfdGltZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY3VyX3RpbWUgPSBnZXRfamlmZmllc182NCgpOwogCi0JY3VyX3RpbWUgPSBnZXRfamlmZmllc182NCgpOwogCXNwaW5fbG9jaygmY3B1ZnJlcV9zdGF0c19sb2NrKTsKLQlzdGF0ID0gcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBjcHUpOwotCWlmIChzdGF0LT50aW1lX2luX3N0YXRlKQotCQlzdGF0LT50aW1lX2luX3N0YXRlW3N0YXQtPmxhc3RfaW5kZXhdICs9Ci0JCQljdXJfdGltZSAtIHN0YXQtPmxhc3RfdGltZTsKLQlzdGF0LT5sYXN0X3RpbWUgPSBjdXJfdGltZTsKKwlzdGF0cy0+dGltZV9pbl9zdGF0ZVtzdGF0cy0+bGFzdF9pbmRleF0gKz0gY3VyX3RpbWUgLSBzdGF0cy0+bGFzdF90aW1lOworCXN0YXRzLT5sYXN0X3RpbWUgPSBjdXJfdGltZTsKIAlzcGluX3VubG9jaygmY3B1ZnJlcV9zdGF0c19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd190b3RhbF90cmFucyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogewotCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0ID0gcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBwb2xpY3ktPmNwdSk7Ci0JaWYgKCFzdGF0KQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwKLQkJCXBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgc3RhdC0+Y3B1KS0+dG90YWxfdHJhbnMpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwb2xpY3ktPnN0YXRzLT50b3RhbF90cmFucyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfdGltZV9pbl9zdGF0ZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogeworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0cyA9IHBvbGljeS0+c3RhdHM7CiAJc3NpemVfdCBsZW4gPSAwOwogCWludCBpOwotCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0ID0gcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBwb2xpY3ktPmNwdSk7Ci0JaWYgKCFzdGF0KQotCQlyZXR1cm4gMDsKLQljcHVmcmVxX3N0YXRzX3VwZGF0ZShzdGF0LT5jcHUpOwotCWZvciAoaSA9IDA7IGkgPCBzdGF0LT5zdGF0ZV9udW07IGkrKykgewotCQlsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICIldSAlbGx1XG4iLCBzdGF0LT5mcmVxX3RhYmxlW2ldLAorCisJY3B1ZnJlcV9zdGF0c191cGRhdGUoc3RhdHMpOworCWZvciAoaSA9IDA7IGkgPCBzdGF0cy0+c3RhdGVfbnVtOyBpKyspIHsKKwkJbGVuICs9IHNwcmludGYoYnVmICsgbGVuLCAiJXUgJWxsdVxuIiwgc3RhdHMtPmZyZXFfdGFibGVbaV0sCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKQotCQkJamlmZmllc182NF90b19jbG9ja190KHN0YXQtPnRpbWVfaW5fc3RhdGVbaV0pKTsKKwkJCWppZmZpZXNfNjRfdG9fY2xvY2tfdChzdGF0cy0+dGltZV9pbl9zdGF0ZVtpXSkpOwogCX0KIAlyZXR1cm4gbGVuOwogfQpAQCAtODIsMzggKzY0LDM1IEBACiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRX1NUQVRfREVUQUlMUwogc3RhdGljIHNzaXplX3Qgc2hvd190cmFuc190YWJsZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgY2hhciAqYnVmKQogeworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0cyA9IHBvbGljeS0+c3RhdHM7CiAJc3NpemVfdCBsZW4gPSAwOwogCWludCBpLCBqOwogCi0Jc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQgPSBwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIHBvbGljeS0+Y3B1KTsKLQlpZiAoIXN0YXQpCi0JCXJldHVybiAwOwotCWNwdWZyZXFfc3RhdHNfdXBkYXRlKHN0YXQtPmNwdSk7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiICAgRnJvbSAgOiAgICBUb1xuIik7CiAJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiICAgICAgICAgOiAiKTsKLQlmb3IgKGkgPSAwOyBpIDwgc3RhdC0+c3RhdGVfbnVtOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgc3RhdHMtPnN0YXRlX251bTsgaSsrKSB7CiAJCWlmIChsZW4gPj0gUEFHRV9TSVpFKQogCQkJYnJlYWs7CiAJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIiU5dSAiLAotCQkJCXN0YXQtPmZyZXFfdGFibGVbaV0pOworCQkJCXN0YXRzLT5mcmVxX3RhYmxlW2ldKTsKIAl9CiAJaWYgKGxlbiA+PSBQQUdFX1NJWkUpCiAJCXJldHVybiBQQUdFX1NJWkU7CiAKIAlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICJcbiIpOwogCi0JZm9yIChpID0gMDsgaSA8IHN0YXQtPnN0YXRlX251bTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHN0YXRzLT5zdGF0ZV9udW07IGkrKykgewogCQlpZiAobGVuID49IFBBR0VfU0laRSkKIAkJCWJyZWFrOwogCiAJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIFBBR0VfU0laRSAtIGxlbiwgIiU5dTogIiwKLQkJCQlzdGF0LT5mcmVxX3RhYmxlW2ldKTsKKwkJCQlzdGF0cy0+ZnJlcV90YWJsZVtpXSk7CiAKLQkJZm9yIChqID0gMDsgaiA8IHN0YXQtPnN0YXRlX251bTsgaisrKSB7CisJCWZvciAoaiA9IDA7IGogPCBzdGF0cy0+c3RhdGVfbnVtOyBqKyspIHsKIAkJCWlmIChsZW4gPj0gUEFHRV9TSVpFKQogCQkJCWJyZWFrOwogCQkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgUEFHRV9TSVpFIC0gbGVuLCAiJTl1ICIsCi0JCQkJCXN0YXQtPnRyYW5zX3RhYmxlW2kqc3RhdC0+bWF4X3N0YXRlK2pdKTsKKwkJCQkJc3RhdHMtPnRyYW5zX3RhYmxlW2kqc3RhdHMtPm1heF9zdGF0ZStqXSk7CiAJCX0KIAkJaWYgKGxlbiA+PSBQQUdFX1NJWkUpCiAJCQlicmVhazsKQEAgLTE0MiwyOCArMTIxLDI5IEBACiAJLm5hbWUgPSAic3RhdHMiCiB9OwogCi1zdGF0aWMgaW50IGZyZXFfdGFibGVfZ2V0X2luZGV4KHN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0LCB1bnNpZ25lZCBpbnQgZnJlcSkKK3N0YXRpYyBpbnQgZnJlcV90YWJsZV9nZXRfaW5kZXgoc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXRzLCB1bnNpZ25lZCBpbnQgZnJlcSkKIHsKIAlpbnQgaW5kZXg7Ci0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgc3RhdC0+bWF4X3N0YXRlOyBpbmRleCsrKQotCQlpZiAoc3RhdC0+ZnJlcV90YWJsZVtpbmRleF0gPT0gZnJlcSkKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzdGF0cy0+bWF4X3N0YXRlOyBpbmRleCsrKQorCQlpZiAoc3RhdHMtPmZyZXFfdGFibGVbaW5kZXhdID09IGZyZXEpCiAJCQlyZXR1cm4gaW5kZXg7CiAJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgdm9pZCBfX2NwdWZyZXFfc3RhdHNfZnJlZV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKLQlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdCA9IHBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgcG9saWN5LT5jcHUpOworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0cyA9IHBvbGljeS0+c3RhdHM7CiAKLQlpZiAoIXN0YXQpCisJLyogQWxyZWFkeSBmcmVlZCAqLworCWlmICghc3RhdHMpCiAJCXJldHVybjsKIAotCXByX2RlYnVnKCIlczogRnJlZSBzdGF0IHRhYmxlXG4iLCBfX2Z1bmNfXyk7CisJcHJfZGVidWcoIiVzOiBGcmVlIHN0YXRzIHRhYmxlXG4iLCBfX2Z1bmNfXyk7CiAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBvbGljeS0+a29iaiwgJnN0YXRzX2F0dHJfZ3JvdXApOwotCWtmcmVlKHN0YXQtPnRpbWVfaW5fc3RhdGUpOwotCWtmcmVlKHN0YXQpOwotCXBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgcG9saWN5LT5jcHUpID0gTlVMTDsKKwlrZnJlZShzdGF0cy0+dGltZV9pbl9zdGF0ZSk7CisJa2ZyZWUoc3RhdHMpOworCXBvbGljeS0+c3RhdHMgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBjcHVmcmVxX3N0YXRzX2ZyZWVfdGFibGUodW5zaWduZWQgaW50IGNwdSkKQEAgLTE3NCwzNyArMTU0LDMzIEBACiAJaWYgKCFwb2xpY3kpCiAJCXJldHVybjsKIAotCWlmIChjcHVmcmVxX2ZyZXF1ZW5jeV9nZXRfdGFibGUocG9saWN5LT5jcHUpKQotCQlfX2NwdWZyZXFfc3RhdHNfZnJlZV90YWJsZShwb2xpY3kpOworCV9fY3B1ZnJlcV9zdGF0c19mcmVlX3RhYmxlKHBvbGljeSk7CiAKIAljcHVmcmVxX2NwdV9wdXQocG9saWN5KTsKIH0KIAogc3RhdGljIGludCBfX2NwdWZyZXFfc3RhdHNfY3JlYXRlX3RhYmxlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQogewotCXVuc2lnbmVkIGludCBpLCBjb3VudCA9IDAsIHJldCA9IDA7Ci0Jc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQ7CisJdW5zaWduZWQgaW50IGkgPSAwLCBjb3VudCA9IDAsIHJldCA9IC1FTk9NRU07CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXRzOwogCXVuc2lnbmVkIGludCBhbGxvY19zaXplOwogCXVuc2lnbmVkIGludCBjcHUgPSBwb2xpY3ktPmNwdTsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnBvcywgKnRhYmxlOwogCisJLyogV2UgbmVlZCBjcHVmcmVxIHRhYmxlIGZvciBjcmVhdGluZyBzdGF0cyB0YWJsZSAqLwogCXRhYmxlID0gY3B1ZnJlcV9mcmVxdWVuY3lfZ2V0X3RhYmxlKGNwdSk7CiAJaWYgKHVubGlrZWx5KCF0YWJsZSkpCiAJCXJldHVybiAwOwogCi0JaWYgKHBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgY3B1KSkKLQkJcmV0dXJuIC1FQlVTWTsKLQlzdGF0ID0ga3phbGxvYyhzaXplb2YoKnN0YXQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoKHN0YXQpID09IE5VTEwpCisJLyogc3RhdHMgYWxyZWFkeSBpbml0aWFsaXplZCAqLworCWlmIChwb2xpY3ktPnN0YXRzKQorCQlyZXR1cm4gLUVFWElTVDsKKworCXN0YXRzID0ga3phbGxvYyhzaXplb2YoKnN0YXRzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0cykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBvbGljeS0+a29iaiwgJnN0YXRzX2F0dHJfZ3JvdXApOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyb3Jfb3V0OwotCi0Jc3RhdC0+Y3B1ID0gY3B1OwotCXBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgY3B1KSA9IHN0YXQ7Ci0KKwkvKiBGaW5kIHRvdGFsIGFsbG9jYXRpb24gc2l6ZSAqLwogCWNwdWZyZXFfZm9yX2VhY2hfdmFsaWRfZW50cnkocG9zLCB0YWJsZSkKIAkJY291bnQrKzsKIApAQCAtMjEzLDMyICsxODksNDAgQEAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTCiAJYWxsb2Nfc2l6ZSArPSBjb3VudCAqIGNvdW50ICogc2l6ZW9mKGludCk7CiAjZW5kaWYKLQlzdGF0LT5tYXhfc3RhdGUgPSBjb3VudDsKLQlzdGF0LT50aW1lX2luX3N0YXRlID0ga3phbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN0YXQtPnRpbWVfaW5fc3RhdGUpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJvcl9hbGxvYzsKLQl9Ci0Jc3RhdC0+ZnJlcV90YWJsZSA9ICh1bnNpZ25lZCBpbnQgKikoc3RhdC0+dGltZV9pbl9zdGF0ZSArIGNvdW50KTsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGltZV9pbl9zdGF0ZS9mcmVxX3RhYmxlL3RyYW5zX3RhYmxlIGluIG9uZSBnbyAqLworCXN0YXRzLT50aW1lX2luX3N0YXRlID0ga3phbGxvYyhhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN0YXRzLT50aW1lX2luX3N0YXRlKQorCQlnb3RvIGZyZWVfc3RhdDsKKworCXN0YXRzLT5mcmVxX3RhYmxlID0gKHVuc2lnbmVkIGludCAqKShzdGF0cy0+dGltZV9pbl9zdGF0ZSArIGNvdW50KTsKIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMKLQlzdGF0LT50cmFuc190YWJsZSA9IHN0YXQtPmZyZXFfdGFibGUgKyBjb3VudDsKKwlzdGF0cy0+dHJhbnNfdGFibGUgPSBzdGF0cy0+ZnJlcV90YWJsZSArIGNvdW50OwogI2VuZGlmCi0JaSA9IDA7CisKKwlzdGF0cy0+bWF4X3N0YXRlID0gY291bnQ7CisKKwkvKiBGaW5kIHZhbGlkLXVuaXF1ZSBlbnRyaWVzICovCiAJY3B1ZnJlcV9mb3JfZWFjaF92YWxpZF9lbnRyeShwb3MsIHRhYmxlKQotCQlpZiAoZnJlcV90YWJsZV9nZXRfaW5kZXgoc3RhdCwgcG9zLT5mcmVxdWVuY3kpID09IC0xKQotCQkJc3RhdC0+ZnJlcV90YWJsZVtpKytdID0gcG9zLT5mcmVxdWVuY3k7Ci0Jc3RhdC0+c3RhdGVfbnVtID0gaTsKLQlzcGluX2xvY2soJmNwdWZyZXFfc3RhdHNfbG9jayk7Ci0Jc3RhdC0+bGFzdF90aW1lID0gZ2V0X2ppZmZpZXNfNjQoKTsKLQlzdGF0LT5sYXN0X2luZGV4ID0gZnJlcV90YWJsZV9nZXRfaW5kZXgoc3RhdCwgcG9saWN5LT5jdXIpOwotCXNwaW5fdW5sb2NrKCZjcHVmcmVxX3N0YXRzX2xvY2spOwotCXJldHVybiAwOwotZXJyb3JfYWxsb2M6Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZwb2xpY3ktPmtvYmosICZzdGF0c19hdHRyX2dyb3VwKTsKLWVycm9yX291dDoKLQlrZnJlZShzdGF0KTsKLQlwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIGNwdSkgPSBOVUxMOworCQlpZiAoZnJlcV90YWJsZV9nZXRfaW5kZXgoc3RhdHMsIHBvcy0+ZnJlcXVlbmN5KSA9PSAtMSkKKwkJCXN0YXRzLT5mcmVxX3RhYmxlW2krK10gPSBwb3MtPmZyZXF1ZW5jeTsKKworCXN0YXRzLT5zdGF0ZV9udW0gPSBpOworCXN0YXRzLT5sYXN0X3RpbWUgPSBnZXRfamlmZmllc182NCgpOworCXN0YXRzLT5sYXN0X2luZGV4ID0gZnJlcV90YWJsZV9nZXRfaW5kZXgoc3RhdHMsIHBvbGljeS0+Y3VyKTsKKworCXBvbGljeS0+c3RhdHMgPSBzdGF0czsKKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBvbGljeS0+a29iaiwgJnN0YXRzX2F0dHJfZ3JvdXApOworCWlmICghcmV0KQorCQlyZXR1cm4gMDsKKworCS8qIFdlIGZhaWxlZCwgcmVsZWFzZSByZXNvdXJjZXMgKi8KKwlwb2xpY3ktPnN0YXRzID0gTlVMTDsKKwlrZnJlZShzdGF0cy0+dGltZV9pbl9zdGF0ZSk7CitmcmVlX3N0YXQ6CisJa2ZyZWUoc3RhdHMpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjU5LDMwICsyNDMsMTIgQEAKIAljcHVmcmVxX2NwdV9wdXQocG9saWN5KTsKIH0KIAotc3RhdGljIHZvaWQgY3B1ZnJlcV9zdGF0c191cGRhdGVfcG9saWN5X2NwdShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKLXsKLQlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdCA9IHBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwKLQkJCXBvbGljeS0+bGFzdF9jcHUpOwotCi0JcHJfZGVidWcoIlVwZGF0aW5nIHN0YXRzX3RhYmxlIGZvciBuZXdfY3B1ICV1IGZyb20gbGFzdF9jcHUgJXVcbiIsCi0JCQlwb2xpY3ktPmNwdSwgcG9saWN5LT5sYXN0X2NwdSk7Ci0JcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBwb2xpY3ktPmNwdSkgPSBwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsCi0JCQlwb2xpY3ktPmxhc3RfY3B1KTsKLQlwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIHBvbGljeS0+bGFzdF9jcHUpID0gTlVMTDsKLQlzdGF0LT5jcHUgPSBwb2xpY3ktPmNwdTsKLX0KLQogc3RhdGljIGludCBjcHVmcmVxX3N0YXRfbm90aWZpZXJfcG9saWN5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5ID0gZGF0YTsKIAotCWlmICh2YWwgPT0gQ1BVRlJFUV9VUERBVEVfUE9MSUNZX0NQVSkgewotCQljcHVmcmVxX3N0YXRzX3VwZGF0ZV9wb2xpY3lfY3B1KHBvbGljeSk7Ci0JCXJldHVybiAwOwotCX0KLQogCWlmICh2YWwgPT0gQ1BVRlJFUV9DUkVBVEVfUE9MSUNZKQogCQlyZXQgPSBfX2NwdWZyZXFfc3RhdHNfY3JlYXRlX3RhYmxlKHBvbGljeSk7CiAJZWxzZSBpZiAodmFsID09IENQVUZSRVFfUkVNT1ZFX1BPTElDWSkKQEAgLTI5NSwzNSArMjYxLDQ1IEBACiAJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxID0gZGF0YTsKLQlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdDsKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSA9IGNwdWZyZXFfY3B1X2dldChmcmVxLT5jcHUpOworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0czsKIAlpbnQgb2xkX2luZGV4LCBuZXdfaW5kZXg7CiAKKwlpZiAoIXBvbGljeSkgeworCQlwcl9lcnIoIiVzOiBObyBwb2xpY3kgZm91bmRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKHZhbCAhPSBDUFVGUkVRX1BPU1RDSEFOR0UpCi0JCXJldHVybiAwOworCQlnb3RvIHB1dF9wb2xpY3k7CiAKLQlzdGF0ID0gcGVyX2NwdShjcHVmcmVxX3N0YXRzX3RhYmxlLCBmcmVxLT5jcHUpOwotCWlmICghc3RhdCkKLQkJcmV0dXJuIDA7CisJaWYgKCFwb2xpY3ktPnN0YXRzKSB7CisJCXByX2RlYnVnKCIlczogTm8gc3RhdHMgZm91bmRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBwdXRfcG9saWN5OworCX0KIAotCW9sZF9pbmRleCA9IHN0YXQtPmxhc3RfaW5kZXg7Ci0JbmV3X2luZGV4ID0gZnJlcV90YWJsZV9nZXRfaW5kZXgoc3RhdCwgZnJlcS0+bmV3KTsKKwlzdGF0cyA9IHBvbGljeS0+c3RhdHM7CiAKLQkvKiBXZSBjYW4ndCBkbyBzdGF0LT50aW1lX2luX3N0YXRlWy0xXT0gLi4gKi8KKwlvbGRfaW5kZXggPSBzdGF0cy0+bGFzdF9pbmRleDsKKwluZXdfaW5kZXggPSBmcmVxX3RhYmxlX2dldF9pbmRleChzdGF0cywgZnJlcS0+bmV3KTsKKworCS8qIFdlIGNhbid0IGRvIHN0YXRzLT50aW1lX2luX3N0YXRlWy0xXT0gLi4gKi8KIAlpZiAob2xkX2luZGV4ID09IC0xIHx8IG5ld19pbmRleCA9PSAtMSkKLQkJcmV0dXJuIDA7Ci0KLQljcHVmcmVxX3N0YXRzX3VwZGF0ZShmcmVxLT5jcHUpOworCQlnb3RvIHB1dF9wb2xpY3k7CiAKIAlpZiAob2xkX2luZGV4ID09IG5ld19pbmRleCkKLQkJcmV0dXJuIDA7CisJCWdvdG8gcHV0X3BvbGljeTsKIAotCXNwaW5fbG9jaygmY3B1ZnJlcV9zdGF0c19sb2NrKTsKLQlzdGF0LT5sYXN0X2luZGV4ID0gbmV3X2luZGV4OworCWNwdWZyZXFfc3RhdHNfdXBkYXRlKHN0YXRzKTsKKworCXN0YXRzLT5sYXN0X2luZGV4ID0gbmV3X2luZGV4OwogI2lmZGVmIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMKLQlzdGF0LT50cmFuc190YWJsZVtvbGRfaW5kZXggKiBzdGF0LT5tYXhfc3RhdGUgKyBuZXdfaW5kZXhdKys7CisJc3RhdHMtPnRyYW5zX3RhYmxlW29sZF9pbmRleCAqIHN0YXRzLT5tYXhfc3RhdGUgKyBuZXdfaW5kZXhdKys7CiAjZW5kaWYKLQlzdGF0LT50b3RhbF90cmFucysrOwotCXNwaW5fdW5sb2NrKCZjcHVmcmVxX3N0YXRzX2xvY2spOworCXN0YXRzLT50b3RhbF90cmFucysrOworCitwdXRfcG9saWN5OgorCWNwdWZyZXFfY3B1X3B1dChwb2xpY3kpOwogCXJldHVybiAwOwogfQogCkBAIC0zNzQsOCArMzUwLDcgQEAKIH0KIAogTU9EVUxFX0FVVEhPUigiWm91IE5hbiBoYWkgPG5hbmhhaS56b3VAaW50ZWwuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCInY3B1ZnJlcV9zdGF0cycgLSBBIGRyaXZlciB0byBleHBvcnQgY3B1ZnJlcSBzdGF0cyAiCi0JCQkJInRocm91Z2ggc3lzZnMgZmlsZXN5c3RlbSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJFeHBvcnQgY3B1ZnJlcSBzdGF0cyB2aWEgc3lzZnMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogbW9kdWxlX2luaXQoY3B1ZnJlcV9zdGF0c19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9pbnRlbF9wc3RhdGUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9pbnRlbF9wc3RhdGUuYwppbmRleCA3NDJlZWZiLi44NzJjNTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvaW50ZWxfcHN0YXRlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2ludGVsX3BzdGF0ZS5jCkBAIC0xNDgsNiArMTQ4LDggQEAKIAlpbnQzMl90IG1pbl9wZXJmOwogCWludCBtYXhfcG9saWN5X3BjdDsKIAlpbnQgbWF4X3N5c2ZzX3BjdDsKKwlpbnQgbWluX3BvbGljeV9wY3Q7CisJaW50IG1pbl9zeXNmc19wY3Q7CiB9OwogCiBzdGF0aWMgc3RydWN0IHBlcmZfbGltaXRzIGxpbWl0cyA9IHsKQEAgLTE1OSw2ICsxNjEsOCBAQAogCS5taW5fcGVyZiA9IDAsCiAJLm1heF9wb2xpY3lfcGN0ID0gMTAwLAogCS5tYXhfc3lzZnNfcGN0ID0gMTAwLAorCS5taW5fcG9saWN5X3BjdCA9IDAsCisJLm1pbl9zeXNmc19wY3QgPSAwLAogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIHBpZF9yZXNldChzdHJ1Y3QgX3BpZCAqcGlkLCBpbnQgc2V0cG9pbnQsIGludCBidXN5LApAQCAtMzM4LDYgKzM0MiwzMyBAQAogCQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgbGltaXRzLm9iamVjdCk7CQlcCiAJfQogCitzdGF0aWMgc3NpemVfdCBzaG93X3R1cmJvX3BjdChzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQlzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGNwdWRhdGEgKmNwdTsKKwlpbnQgdG90YWwsIG5vX3R1cmJvLCB0dXJib19wY3Q7CisJdWludDMyX3QgdHVyYm9fZnA7CisKKwljcHUgPSBhbGxfY3B1X2RhdGFbMF07CisKKwl0b3RhbCA9IGNwdS0+cHN0YXRlLnR1cmJvX3BzdGF0ZSAtIGNwdS0+cHN0YXRlLm1pbl9wc3RhdGUgKyAxOworCW5vX3R1cmJvID0gY3B1LT5wc3RhdGUubWF4X3BzdGF0ZSAtIGNwdS0+cHN0YXRlLm1pbl9wc3RhdGUgKyAxOworCXR1cmJvX2ZwID0gZGl2X2ZwKGludF90b2ZwKG5vX3R1cmJvKSwgaW50X3RvZnAodG90YWwpKTsKKwl0dXJib19wY3QgPSAxMDAgLSBmcF90b2ludChtdWxfZnAodHVyYm9fZnAsIGludF90b2ZwKDEwMCkpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgdHVyYm9fcGN0KTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19udW1fcHN0YXRlcyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQlzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGNwdWRhdGEgKmNwdTsKKwlpbnQgdG90YWw7CisKKwljcHUgPSBhbGxfY3B1X2RhdGFbMF07CisJdG90YWwgPSBjcHUtPnBzdGF0ZS50dXJib19wc3RhdGUgLSBjcHUtPnBzdGF0ZS5taW5fcHN0YXRlICsgMTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgdG90YWwpOworfQorCiBzdGF0aWMgc3NpemVfdCBzaG93X25vX3R1cmJvKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC00MDQsNyArNDM1LDkgQEAKIAlyZXQgPSBzc2NhbmYoYnVmLCAiJXUiLCAmaW5wdXQpOwogCWlmIChyZXQgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JbGltaXRzLm1pbl9wZXJmX3BjdCA9IGNsYW1wX3QoaW50LCBpbnB1dCwgMCAsIDEwMCk7CisKKwlsaW1pdHMubWluX3N5c2ZzX3BjdCA9IGNsYW1wX3QoaW50LCBpbnB1dCwgMCAsIDEwMCk7CisJbGltaXRzLm1pbl9wZXJmX3BjdCA9IG1heChsaW1pdHMubWluX3BvbGljeV9wY3QsIGxpbWl0cy5taW5fc3lzZnNfcGN0KTsKIAlsaW1pdHMubWluX3BlcmYgPSBkaXZfZnAoaW50X3RvZnAobGltaXRzLm1pbl9wZXJmX3BjdCksIGludF90b2ZwKDEwMCkpOwogCiAJaWYgKGh3cF9hY3RpdmUpCkBAIC00MTgsMTEgKzQ1MSwxNSBAQAogZGVmaW5lX29uZV9nbG9iYWxfcncobm9fdHVyYm8pOwogZGVmaW5lX29uZV9nbG9iYWxfcncobWF4X3BlcmZfcGN0KTsKIGRlZmluZV9vbmVfZ2xvYmFsX3J3KG1pbl9wZXJmX3BjdCk7CitkZWZpbmVfb25lX2dsb2JhbF9ybyh0dXJib19wY3QpOworZGVmaW5lX29uZV9nbG9iYWxfcm8obnVtX3BzdGF0ZXMpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaW50ZWxfcHN0YXRlX2F0dHJpYnV0ZXNbXSA9IHsKIAkmbm9fdHVyYm8uYXR0ciwKIAkmbWF4X3BlcmZfcGN0LmF0dHIsCiAJJm1pbl9wZXJmX3BjdC5hdHRyLAorCSZ0dXJib19wY3QuYXR0ciwKKwkmbnVtX3BzdGF0ZXMuYXR0ciwKIAlOVUxMCiB9OwogCkBAIC04MjUsNiArODYyLDcgQEAKIAlJQ1BVKDB4NDYsIGNvcmVfcGFyYW1zKSwKIAlJQ1BVKDB4NDcsIGNvcmVfcGFyYW1zKSwKIAlJQ1BVKDB4NGMsIGJ5dF9wYXJhbXMpLAorCUlDUFUoMHg0ZSwgY29yZV9wYXJhbXMpLAogCUlDUFUoMHg0ZiwgY29yZV9wYXJhbXMpLAogCUlDUFUoMHg1NiwgY29yZV9wYXJhbXMpLAogCXt9CkBAIC04ODcsNyArOTI1LDkgQEAKIAlpZiAoIXBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAocG9saWN5LT5wb2xpY3kgPT0gQ1BVRlJFUV9QT0xJQ1lfUEVSRk9STUFOQ0UpIHsKKwlpZiAocG9saWN5LT5wb2xpY3kgPT0gQ1BVRlJFUV9QT0xJQ1lfUEVSRk9STUFOQ0UgJiYKKwkgICAgcG9saWN5LT5tYXggPj0gcG9saWN5LT5jcHVpbmZvLm1heF9mcmVxKSB7CisJCWxpbWl0cy5taW5fcG9saWN5X3BjdCA9IDEwMDsKIAkJbGltaXRzLm1pbl9wZXJmX3BjdCA9IDEwMDsKIAkJbGltaXRzLm1pbl9wZXJmID0gaW50X3RvZnAoMSk7CiAJCWxpbWl0cy5tYXhfcG9saWN5X3BjdCA9IDEwMDsKQEAgLTg5Nyw4ICs5MzcsOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlsaW1pdHMubWluX3BlcmZfcGN0ID0gKHBvbGljeS0+bWluICogMTAwKSAvIHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcTsKLQlsaW1pdHMubWluX3BlcmZfcGN0ID0gY2xhbXBfdChpbnQsIGxpbWl0cy5taW5fcGVyZl9wY3QsIDAgLCAxMDApOworCWxpbWl0cy5taW5fcG9saWN5X3BjdCA9IChwb2xpY3ktPm1pbiAqIDEwMCkgLyBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXE7CisJbGltaXRzLm1pbl9wb2xpY3lfcGN0ID0gY2xhbXBfdChpbnQsIGxpbWl0cy5taW5fcG9saWN5X3BjdCwgMCAsIDEwMCk7CisJbGltaXRzLm1pbl9wZXJmX3BjdCA9IG1heChsaW1pdHMubWluX3BvbGljeV9wY3QsIGxpbWl0cy5taW5fc3lzZnNfcGN0KTsKIAlsaW1pdHMubWluX3BlcmYgPSBkaXZfZnAoaW50X3RvZnAobGltaXRzLm1pbl9wZXJmX3BjdCksIGludF90b2ZwKDEwMCkpOwogCiAJbGltaXRzLm1heF9wb2xpY3lfcGN0ID0gKHBvbGljeS0+bWF4ICogMTAwKSAvIHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcTsKQEAgLTk3OCw2ICsxMDE5LDcgQEAKIAogc3RhdGljIGludCBfX2luaXRkYXRhIG5vX2xvYWQ7CiBzdGF0aWMgaW50IF9faW5pdGRhdGEgbm9faHdwOworc3RhdGljIGludCBfX2luaXRkYXRhIGh3cF9vbmx5Owogc3RhdGljIHVuc2lnbmVkIGludCBmb3JjZV9sb2FkOwogCiBzdGF0aWMgaW50IGludGVsX3BzdGF0ZV9tc3JzX25vdF92YWxpZCh2b2lkKQpAQCAtMTE3NSw2ICsxMjE3LDkgQEAKIAlpZiAoY3B1X2hhcyhjLFg4Nl9GRUFUVVJFX0hXUCkgJiYgIW5vX2h3cCkKIAkJaW50ZWxfcHN0YXRlX2h3cF9lbmFibGUoKTsKIAorCWlmICghaHdwX2FjdGl2ZSAmJiBod3Bfb25seSkKKwkJZ290byBvdXQ7CisKIAlyYyA9IGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZpbnRlbF9wc3RhdGVfZHJpdmVyKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwpAQCAtMTIwOSw2ICsxMjU0LDggQEAKIAkJbm9faHdwID0gMTsKIAlpZiAoIXN0cmNtcChzdHIsICJmb3JjZSIpKQogCQlmb3JjZV9sb2FkID0gMTsKKwlpZiAoIXN0cmNtcChzdHIsICJod3Bfb25seSIpKQorCQlod3Bfb25seSA9IDE7CiAJcmV0dXJuIDA7CiB9CiBlYXJseV9wYXJhbSgiaW50ZWxfcHN0YXRlIiwgaW50ZWxfcHN0YXRlX3NldHVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9sczF4LWNwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9sczF4LWNwdWZyZXEuYwppbmRleCAyNWZiZDZhMS4uZjA5MTNlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2xzMXgtY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9sczF4LWNwdWZyZXEuYwpAQCAtMjEwLDcgKzIxMCw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsczF4X2NwdWZyZXFfcGxhdGRydiA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZQk9ICJsczF4LWNwdWZyZXEiLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZQkJPSBsczF4X2NwdWZyZXFfcHJvYmUsCiAJLnJlbW92ZQkJPSBsczF4X2NwdWZyZXFfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL3NmaS1jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvc2ZpLWNwdWZyZXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmEzMzg5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcHVmcmVxL3NmaS1jcHVmcmVxLmMKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiAgU0ZJIFBlcmZvcm1hbmNlIFN0YXRlcyBEcml2ZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIEF1dGhvcjogVmlzaHdlc2ggTSBSdWRyYW11bmkgPHZpc2h3ZXNoLm0ucnVkcmFtdW5pQGludGVsLmNvbT4KKyAqICBBdXRob3I6IFNyaW5pZGhpIEthc2FnYXIgPHNyaW5pZGhpLmthc2FnYXJAaW50ZWwuY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NmaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKworI2luY2x1ZGUgPGFzbS9tc3IuaD4KKworc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpmcmVxX3RhYmxlOworc3RhdGljIHN0cnVjdCBzZmlfZnJlcV90YWJsZV9lbnRyeSAqc2ZpX2NwdWZyZXFfYXJyYXk7CitzdGF0aWMgaW50IG51bV9mcmVxX3RhYmxlX2VudHJpZXM7CisKK3N0YXRpYyBpbnQgc2ZpX3BhcnNlX2ZyZXEoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRhYmxlKQoreworCXN0cnVjdCBzZmlfdGFibGVfc2ltcGxlICpzYjsKKwlzdHJ1Y3Qgc2ZpX2ZyZXFfdGFibGVfZW50cnkgKnBlbnRyeTsKKwlpbnQgdG90YWxsZW47CisKKwlzYiA9IChzdHJ1Y3Qgc2ZpX3RhYmxlX3NpbXBsZSAqKXRhYmxlOworCW51bV9mcmVxX3RhYmxlX2VudHJpZXMgPSBTRklfR0VUX05VTV9FTlRSSUVTKHNiLAorCQkJc3RydWN0IHNmaV9mcmVxX3RhYmxlX2VudHJ5KTsKKwlpZiAobnVtX2ZyZXFfdGFibGVfZW50cmllcyA8PSAxKSB7CisJCXByX2VycigiTm8gcC1zdGF0ZXMgZGlzY292ZXJlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBlbnRyeSA9IChzdHJ1Y3Qgc2ZpX2ZyZXFfdGFibGVfZW50cnkgKilzYi0+cGVudHJ5OworCXRvdGFsbGVuID0gbnVtX2ZyZXFfdGFibGVfZW50cmllcyAqIHNpemVvZigqcGVudHJ5KTsKKworCXNmaV9jcHVmcmVxX2FycmF5ID0ga3phbGxvYyh0b3RhbGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZmlfY3B1ZnJlcV9hcnJheSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkoc2ZpX2NwdWZyZXFfYXJyYXksIHBlbnRyeSwgdG90YWxsZW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2ZpX2NwdWZyZXFfdGFyZ2V0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgaW50IG5leHRfcGVyZl9zdGF0ZSA9IDA7IC8qIEluZGV4IGludG8gcGVyZiB0YWJsZSAqLworCXUzMiBsbywgaGk7CisKKwluZXh0X3BlcmZfc3RhdGUgPSBwb2xpY3ktPmZyZXFfdGFibGVbaW5kZXhdLmRyaXZlcl9kYXRhOworCisJcmRtc3Jfb25fY3B1KHBvbGljeS0+Y3B1LCBNU1JfSUEzMl9QRVJGX0NUTCwgJmxvLCAmaGkpOworCWxvID0gKGxvICYgfklOVEVMX1BFUkZfQ1RMX01BU0spIHwKKwkJKCh1MzIpIHNmaV9jcHVmcmVxX2FycmF5W25leHRfcGVyZl9zdGF0ZV0uY3RybF92YWwgJgorCQlJTlRFTF9QRVJGX0NUTF9NQVNLKTsKKwl3cm1zcl9vbl9jcHUocG9saWN5LT5jcHUsIE1TUl9JQTMyX1BFUkZfQ1RMLCBsbywgaGkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2ZpX2NwdWZyZXFfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CisJcG9saWN5LT5zaGFyZWRfdHlwZSA9IENQVUZSRVFfU0hBUkVEX1RZUEVfSFc7CisJcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IDEwMDAwMDsJLyogMTAwdXMgKi8KKworCXJldHVybiBjcHVmcmVxX3RhYmxlX3ZhbGlkYXRlX2FuZF9zaG93KHBvbGljeSwgZnJlcV90YWJsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIgc2ZpX2NwdWZyZXFfZHJpdmVyID0geworCS5mbGFncwkJPSBDUFVGUkVRX0NPTlNUX0xPT1BTLAorCS52ZXJpZnkJCT0gY3B1ZnJlcV9nZW5lcmljX2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnksCisJLnRhcmdldF9pbmRleAk9IHNmaV9jcHVmcmVxX3RhcmdldCwKKwkuaW5pdAkJPSBzZmlfY3B1ZnJlcV9jcHVfaW5pdCwKKwkubmFtZQkJPSAic2ZpLWNwdWZyZXEiLAorCS5hdHRyCQk9IGNwdWZyZXFfZ2VuZXJpY19hdHRyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2ZpX2NwdWZyZXFfaW5pdCh2b2lkKQoreworCWludCByZXQsIGk7CisKKwkvKiBwYXJzZSB0aGUgZnJlcSB0YWJsZSBmcm9tIFNGSSAqLworCXJldCA9IHNmaV90YWJsZV9wYXJzZShTRklfU0lHX0ZSRVEsIE5VTEwsIE5VTEwsIHNmaV9wYXJzZV9mcmVxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZnJlcV90YWJsZSA9IGt6YWxsb2Moc2l6ZW9mKCpmcmVxX3RhYmxlKSAqCisJCQkobnVtX2ZyZXFfdGFibGVfZW50cmllcyArIDEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWZyZXFfdGFibGUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9hcnJheTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2ZyZXFfdGFibGVfZW50cmllczsgaSsrKSB7CisJCWZyZXFfdGFibGVbaV0uZHJpdmVyX2RhdGEgPSBpOworCQlmcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeSA9IHNmaV9jcHVmcmVxX2FycmF5W2ldLmZyZXFfbWh6ICogMTAwMDsKKwl9CisJZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKKworCXJldCA9IGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZzZmlfY3B1ZnJlcV9kcml2ZXIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2ZyZWVfdGJsOworCisJcmV0dXJuIHJldDsKKworZXJyX2ZyZWVfdGJsOgorCWtmcmVlKGZyZXFfdGFibGUpOworZXJyX2ZyZWVfYXJyYXk6CisJa2ZyZWUoc2ZpX2NwdWZyZXFfYXJyYXkpOworCXJldHVybiByZXQ7Cit9CitsYXRlX2luaXRjYWxsKHNmaV9jcHVmcmVxX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgc2ZpX2NwdWZyZXFfZXhpdCh2b2lkKQoreworCWNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoJnNmaV9jcHVmcmVxX2RyaXZlcik7CisJa2ZyZWUoZnJlcV90YWJsZSk7CisJa2ZyZWUoc2ZpX2NwdWZyZXFfYXJyYXkpOworfQorbW9kdWxlX2V4aXQoc2ZpX2NwdWZyZXFfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlZpc2h3ZXNoIE0gUnVkcmFtdW5pIDx2aXNod2VzaC5tLnJ1ZHJhbXVuaUBpbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNGSSBQZXJmb3JtYW5jZS1TdGF0ZXMgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvS2NvbmZpZy5hcm02NCBiL2RyaXZlcnMvY3B1aWRsZS9LY29uZmlnLmFybTY0CmluZGV4IGQwYTA4ZWQuLjZlZmZiMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9LY29uZmlnLmFybTY0CisrKyBiL2RyaXZlcnMvY3B1aWRsZS9LY29uZmlnLmFybTY0CkBAIC00LDcgKzQsNiBAQAogCiBjb25maWcgQVJNNjRfQ1BVSURMRQogCWJvb2wgIkdlbmVyaWMgQVJNNjQgQ1BVIGlkbGUgRHJpdmVyIgotCXNlbGVjdCBBUk02NF9DUFVfU1VTUEVORAogCXNlbGVjdCBEVF9JRExFX1NUQVRFUwogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIHRvIGVuYWJsZSBnZW5lcmljIGNwdWlkbGUgZHJpdmVyIGZvciBBUk02NC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLWFybTY0LmMgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1hcm02NC5jCmluZGV4IDgwNzA0YjkuLjM5YTJjNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLWFybTY0LmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtYXJtNjQuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAKICNpbmNsdWRlIDxhc20vY3B1aWRsZS5oPgotI2luY2x1ZGUgPGFzbS9zdXNwZW5kLmg+CiAKICNpbmNsdWRlICJkdF9pZGxlX3N0YXRlcy5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1iaWdfbGl0dGxlLmMgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS1iaWdfbGl0dGxlLmMKaW5kZXggZTNlMjI1Zi4uNDBjMzRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2NwdWlkbGUtYmlnX2xpdHRsZS5jCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLWJpZ19saXR0bGUuYwpAQCAtMTgyLDYgKzE4MiwxMCBAQAogCSAqLwogCWlmICghb2ZfbWF0Y2hfbm9kZShjb21wYXRpYmxlX21hY2hpbmVfbWF0Y2gsIHJvb3QpKQogCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghbWNwbV9pc19hdmFpbGFibGUoKSkKKwkJcmV0dXJuIC1FVU5BVENIOworCiAJLyoKIAkgKiBGb3Igbm93IHRoZSBkaWZmZXJlbnRpYXRpb24gYmV0d2VlbiBsaXR0bGUgYW5kIGJpZyBjb3JlcwogCSAqIGlzIGJhc2VkIG9uIHRoZSBwYXJ0IG51bWJlci4gQTcgY29yZXMgYXJlIGNvbnNpZGVyZWQgbGl0dGxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RldmZyZXEvS2NvbmZpZyBiL2RyaXZlcnMvZGV2ZnJlcS9LY29uZmlnCmluZGV4IGZhZjRlNzAuLjY0MjgxYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZGV2ZnJlcS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZGV2ZnJlcS9LY29uZmlnCkBAIC0xLDUgKzEsNiBAQAogbWVudWNvbmZpZyBQTV9ERVZGUkVRCiAJYm9vbCAiR2VuZXJpYyBEeW5hbWljIFZvbHRhZ2UgYW5kIEZyZXF1ZW5jeSBTY2FsaW5nIChEVkZTKSBzdXBwb3J0IgorCXNlbGVjdCBTUkNVCiAJaGVscAogCSAgQSBkZXZpY2UgbWF5IGhhdmUgYSBsaXN0IG9mIGZyZXF1ZW5jaWVzIGFuZCB2b2x0YWdlcyBhdmFpbGFibGUuCiAJICBkZXZmcmVxLCBhIGdlbmVyaWMgRFZGUyBmcmFtZXdvcmsgY2FuIGJlIHJlZ2lzdGVyZWQgZm9yIGEgZGV2aWNlCkBAIC04Nyw0ICs4OCwxNiBAQAogCSAgSXQgcmVhZHMgUFBNVSBjb3VudGVycyBvZiBtZW1vcnkgY29udHJvbGxlcnMgYW5kIGFkanVzdHMgdGhlCiAJICBvcGVyYXRpbmcgZnJlcXVlbmNpZXMgYW5kIHZvbHRhZ2VzIHdpdGggT1BQIHN1cHBvcnQuCiAKK2NvbmZpZyBBUk1fVEVHUkFfREVWRlJFUQorICAgICAgIHRyaXN0YXRlICJUZWdyYSBERVZGUkVRIERyaXZlciIKKyAgICAgICBkZXBlbmRzIG9uIEFSQ0hfVEVHUkFfMTI0X1NPQworICAgICAgIHNlbGVjdCBERVZGUkVRX0dPVl9TSU1QTEVfT05ERU1BTkQKKyAgICAgICBzZWxlY3QgUE1fT1BQCisgICAgICAgaGVscAorICAgICAgICAgVGhpcyBhZGRzIHRoZSBERVZGUkVRIGRyaXZlciBmb3IgdGhlIFRlZ3JhIGZhbWlseSBvZiBTb0NzLgorICAgICAgICAgSXQgcmVhZHMgQUNUTU9OIGNvdW50ZXJzIG9mIG1lbW9yeSBjb250cm9sbGVycyBhbmQgYWRqdXN0cyB0aGUKKyAgICAgICAgIG9wZXJhdGluZyBmcmVxdWVuY2llcyBhbmQgdm9sdGFnZXMgd2l0aCBPUFAgc3VwcG9ydC4KKworc291cmNlICJkcml2ZXJzL2RldmZyZXEvZXZlbnQvS2NvbmZpZyIKKwogZW5kaWYgIyBQTV9ERVZGUkVRCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RldmZyZXEvTWFrZWZpbGUgYi9kcml2ZXJzL2RldmZyZXEvTWFrZWZpbGUKaW5kZXggMTYxMzhjOS4uNTEzNGY5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kZXZmcmVxL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZGV2ZnJlcS9NYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKIG9iai0kKENPTkZJR19QTV9ERVZGUkVRKQkrPSBkZXZmcmVxLm8KK29iai0kKENPTkZJR19QTV9ERVZGUkVRX0VWRU5UKQkrPSBkZXZmcmVxLWV2ZW50Lm8KIG9iai0kKENPTkZJR19ERVZGUkVRX0dPVl9TSU1QTEVfT05ERU1BTkQpCSs9IGdvdmVybm9yX3NpbXBsZW9uZGVtYW5kLm8KIG9iai0kKENPTkZJR19ERVZGUkVRX0dPVl9QRVJGT1JNQU5DRSkJKz0gZ292ZXJub3JfcGVyZm9ybWFuY2Uubwogb2JqLSQoQ09ORklHX0RFVkZSRVFfR09WX1BPV0VSU0FWRSkJKz0gZ292ZXJub3JfcG93ZXJzYXZlLm8KQEAgLTcsMyArOCw3IEBACiAjIERFVkZSRVEgRHJpdmVycwogb2JqLSQoQ09ORklHX0FSTV9FWFlOT1M0X0JVU19ERVZGUkVRKQkrPSBleHlub3MvCiBvYmotJChDT05GSUdfQVJNX0VYWU5PUzVfQlVTX0RFVkZSRVEpCSs9IGV4eW5vcy8KK29iai0kKENPTkZJR19BUk1fVEVHUkFfREVWRlJFUSkJCSs9IHRlZ3JhLWRldmZyZXEubworCisjIERFVkZSRVEgRXZlbnQgRHJpdmVycworb2JqLSQoQ09ORklHX1BNX0RFVkZSRVFfRVZFTlQpCQkrPSBldmVudC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGV2ZnJlcS9kZXZmcmVxLWV2ZW50LmMgYi9kcml2ZXJzL2RldmZyZXEvZGV2ZnJlcS1ldmVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMDRhMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RldmZyZXEvZGV2ZnJlcS1ldmVudC5jCkBAIC0wLDAgKzEsNDk0IEBACisvKgorICogZGV2ZnJlcS1ldmVudDogYSBmcmFtZXdvcmsgdG8gcHJvdmlkZSByYXcgZGF0YSBhbmQgZXZlbnRzIG9mIGRldmZyZXEgZGV2aWNlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBBdXRob3I6IENoYW53b28gQ2hvaSA8Y3cwMC5jaG9pQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gZHJpdmVycy9kZXZmcmVxL2RldmZyZXEuYy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2ZnJlcS1ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKmRldmZyZXFfZXZlbnRfY2xhc3M7CisKKy8qIFRoZSBsaXN0IG9mIGFsbCBkZXZmcmVxIGV2ZW50IGxpc3QgKi8KK3N0YXRpYyBMSVNUX0hFQUQoZGV2ZnJlcV9ldmVudF9saXN0KTsKK3N0YXRpYyBERUZJTkVfTVVURVgoZGV2ZnJlcV9ldmVudF9saXN0X2xvY2spOworCisjZGVmaW5lIHRvX2RldmZyZXFfZXZlbnQoREVWKSBjb250YWluZXJfb2YoREVWLCBzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYsIGRldikKKworLyoqCisgKiBkZXZmcmVxX2V2ZW50X2VuYWJsZV9lZGV2KCkgLSBFbmFibGUgdGhlIGRldmZyZXEtZXZlbnQgZGV2IGFuZCBpbmNyZWFzZQorICoJCQkJIHRoZSBlbmFibGVfY291bnQgb2YgZGV2ZnJlcS1ldmVudCBkZXYuCisgKiBAZWRldgk6IHRoZSBkZXZmcmVxLWV2ZW50IGRldmljZQorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGluY3JlYXNlIHRoZSBlbmFibGVfY291bnQgYW5kIGVuYWJsZSB0aGUKKyAqIGRldmZyZXEtZXZlbnQgZGV2aWNlLiBUaGUgZGV2ZnJlcS1ldmVudCBkZXZpY2Ugc2hvdWxkIGJlIGVuYWJsZWQgYmVmb3JlCisgKiB1c2luZyBpdCBieSBkZXZmcmVxIGRldmljZS4KKyAqLworaW50IGRldmZyZXFfZXZlbnRfZW5hYmxlX2VkZXYoc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2KQoreworCWludCByZXQgPSAwOworCisJaWYgKCFlZGV2IHx8ICFlZGV2LT5kZXNjKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmVkZXYtPmxvY2spOworCWlmIChlZGV2LT5kZXNjLT5vcHMgJiYgZWRldi0+ZGVzYy0+b3BzLT5lbmFibGUKKwkJCSYmIGVkZXYtPmVuYWJsZV9jb3VudCA9PSAwKSB7CisJCXJldCA9IGVkZXYtPmRlc2MtPm9wcy0+ZW5hYmxlKGVkZXYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyOworCX0KKwllZGV2LT5lbmFibGVfY291bnQrKzsKK2VycjoKKwltdXRleF91bmxvY2soJmVkZXYtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldmZyZXFfZXZlbnRfZW5hYmxlX2VkZXYpOworCisvKioKKyAqIGRldmZyZXFfZXZlbnRfZGlzYWJsZV9lZGV2KCkgLSBEaXNhYmxlIHRoZSBkZXZmcmVxLWV2ZW50IGRldiBhbmQgZGVjcmVhc2UKKyAqCQkJCSAgdGhlIGVuYWJsZV9jb3VudCBvZiB0aGUgZGV2ZnJlcS1ldmVudCBkZXYuCisgKiBAZWRldgk6IHRoZSBkZXZmcmVxLWV2ZW50IGRldmljZQorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGRlY3JlYXNlIHRoZSBlbmFibGVfY291bnQgYW5kIGRpc2FibGUgdGhlCisgKiBkZXZmcmVxLWV2ZW50IGRldmljZS4gQWZ0ZXIgdGhlIGRldmZyZXEtZXZlbnQgZGV2aWNlIGlzIGRpc2FibGVkLAorICogZGV2ZnJlcSBkZXZpY2UgY2FuJ3QgdXNlIHRoZSBkZXZmcmVxLWV2ZW50IGRldmljZSBmb3IgZ2V0L3NldC9yZXNldAorICogb3BlcmF0aW9ucy4KKyAqLworaW50IGRldmZyZXFfZXZlbnRfZGlzYWJsZV9lZGV2KHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZWRldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZWRldiB8fCAhZWRldi0+ZGVzYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZlZGV2LT5sb2NrKTsKKwlpZiAoZWRldi0+ZW5hYmxlX2NvdW50IDw9IDApIHsKKwkJZGV2X3dhcm4oJmVkZXYtPmRldiwgInVuYmFsYW5jZWQgZW5hYmxlX2NvdW50XG4iKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBlcnI7CisJfQorCisJaWYgKGVkZXYtPmRlc2MtPm9wcyAmJiBlZGV2LT5kZXNjLT5vcHMtPmRpc2FibGUKKwkJCSYmIGVkZXYtPmVuYWJsZV9jb3VudCA9PSAxKSB7CisJCXJldCA9IGVkZXYtPmRlc2MtPm9wcy0+ZGlzYWJsZShlZGV2KTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycjsKKwl9CisJZWRldi0+ZW5hYmxlX2NvdW50LS07CitlcnI6CisJbXV0ZXhfdW5sb2NrKCZlZGV2LT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZXZmcmVxX2V2ZW50X2Rpc2FibGVfZWRldik7CisKKy8qKgorICogZGV2ZnJlcV9ldmVudF9pc19lbmFibGVkKCkgLSBDaGVjayB3aGV0aGVyIGRldmZyZXEtZXZlbnQgZGV2IGlzIGVuYWJsZWQgb3IKKyAqCQkJCW5vdC4KKyAqIEBlZGV2CTogdGhlIGRldmZyZXEtZXZlbnQgZGV2aWNlCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gY2hlY2sgd2hldGhlciBkZXZmcmVxLWV2ZW50IGRldiBpcyBlbmFibGVkIG9yIG5vdC4KKyAqIElmIHJldHVybiB0cnVlLCB0aGUgZGV2ZnJlcS1ldmVudCBkZXYgaXMgZW5hYmVsZC4gSWYgcmV0dXJuIGZhbHNlLCB0aGUKKyAqIGRldmZyZXEtZXZlbnQgZGV2IGlzIGRpc2FibGVkLgorICovCitib29sIGRldmZyZXFfZXZlbnRfaXNfZW5hYmxlZChzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKmVkZXYpCit7CisJYm9vbCBlbmFibGVkID0gZmFsc2U7CisKKwlpZiAoIWVkZXYgfHwgIWVkZXYtPmRlc2MpCisJCXJldHVybiBlbmFibGVkOworCisJbXV0ZXhfbG9jaygmZWRldi0+bG9jayk7CisKKwlpZiAoZWRldi0+ZW5hYmxlX2NvdW50ID4gMCkKKwkJZW5hYmxlZCA9IHRydWU7CisKKwltdXRleF91bmxvY2soJmVkZXYtPmxvY2spOworCisJcmV0dXJuIGVuYWJsZWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZXZmcmVxX2V2ZW50X2lzX2VuYWJsZWQpOworCisvKioKKyAqIGRldmZyZXFfZXZlbnRfc2V0X2V2ZW50KCkgLSBTZXQgZXZlbnQgdG8gZGV2ZnJlcS1ldmVudCBkZXYgdG8gc3RhcnQuCisgKiBAZWRldgk6IHRoZSBkZXZmcmVxLWV2ZW50IGRldmljZQorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNldCB0aGUgZXZlbnQgdG8gdGhlIGRldmZyZXEtZXZlbnQgZGV2aWNlIHRvIHN0YXJ0CisgKiBmb3IgZ2V0dGluZyB0aGUgZXZlbnQgZGF0YSB3aGljaCBjb3VsZCBiZSB2YXJpb3VzIGV2ZW50IHR5cGUuCisgKi8KK2ludCBkZXZmcmVxX2V2ZW50X3NldF9ldmVudChzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKmVkZXYpCit7CisJaW50IHJldDsKKworCWlmICghZWRldiB8fCAhZWRldi0+ZGVzYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWVkZXYtPmRlc2MtPm9wcyB8fCAhZWRldi0+ZGVzYy0+b3BzLT5zZXRfZXZlbnQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFkZXZmcmVxX2V2ZW50X2lzX2VuYWJsZWQoZWRldikpCisJCXJldHVybiAtRVBFUk07CisKKwltdXRleF9sb2NrKCZlZGV2LT5sb2NrKTsKKwlyZXQgPSBlZGV2LT5kZXNjLT5vcHMtPnNldF9ldmVudChlZGV2KTsKKwltdXRleF91bmxvY2soJmVkZXYtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldmZyZXFfZXZlbnRfc2V0X2V2ZW50KTsKKworLyoqCisgKiBkZXZmcmVxX2V2ZW50X2dldF9ldmVudCgpIC0gR2V0IHtsb2FkfHRvdGFsfV9jb3VudCBmcm9tIGRldmZyZXEtZXZlbnQgZGV2LgorICogQGVkZXYJOiB0aGUgZGV2ZnJlcS1ldmVudCBkZXZpY2UKKyAqIEBlZGF0YQk6IHRoZSBjYWxjdWxhdGVkIGRhdGEgb2YgZGV2ZnJlcS1ldmVudCBkZXZpY2UKKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBnZXQgdGhlIGNhbGN1bGF0ZWQgZXZlbnQgZGF0YSBmcm9tIGRldmZyZXEtZXZlbnQgZGV2CisgKiBhZnRlciBzdG9waW5nIHRoZSBwcm9ncmVzcyBvZiB3aG9sZSBzZXF1ZW5jZSBvZiBkZXZmcmVxLWV2ZW50IGRldi4KKyAqLworaW50IGRldmZyZXFfZXZlbnRfZ2V0X2V2ZW50KHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZWRldiwKKwkJCSAgICBzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kYXRhICplZGF0YSkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFlZGV2IHx8ICFlZGV2LT5kZXNjKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZWRldi0+ZGVzYy0+b3BzIHx8ICFlZGV2LT5kZXNjLT5vcHMtPmdldF9ldmVudCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWRldmZyZXFfZXZlbnRfaXNfZW5hYmxlZChlZGV2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllZGF0YS0+dG90YWxfY291bnQgPSBlZGF0YS0+bG9hZF9jb3VudCA9IDA7CisKKwltdXRleF9sb2NrKCZlZGV2LT5sb2NrKTsKKwlyZXQgPSBlZGV2LT5kZXNjLT5vcHMtPmdldF9ldmVudChlZGV2LCBlZGF0YSk7CisJaWYgKHJldCA8IDApCisJCWVkYXRhLT50b3RhbF9jb3VudCA9IGVkYXRhLT5sb2FkX2NvdW50ID0gMDsKKwltdXRleF91bmxvY2soJmVkZXYtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldmZyZXFfZXZlbnRfZ2V0X2V2ZW50KTsKKworLyoqCisgKiBkZXZmcmVxX2V2ZW50X3Jlc2V0X2V2ZW50KCkgLSBSZXNldCBhbGwgb3BlYXRpb25zIG9mIGRldmZyZXEtZXZlbnQgZGV2LgorICogQGVkZXYJOiB0aGUgZGV2ZnJlcS1ldmVudCBkZXZpY2UKKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzdG9wIGFsbCBvcGVyYXRpb25zIG9mIGRldmZyZXEtZXZlbnQgZGV2IGFuZCByZXNldAorICogdGhlIGN1cnJlbnQgZXZlbnQgZGF0YSB0byBtYWtlIHRoZSBkZXZmcmVxLWV2ZW50IGRldmljZSBpbnRvIGluaXRpYWwgc3RhdGUuCisgKi8KK2ludCBkZXZmcmVxX2V2ZW50X3Jlc2V0X2V2ZW50KHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZWRldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZWRldiB8fCAhZWRldi0+ZGVzYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWRldmZyZXFfZXZlbnRfaXNfZW5hYmxlZChlZGV2KSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCW11dGV4X2xvY2soJmVkZXYtPmxvY2spOworCWlmIChlZGV2LT5kZXNjLT5vcHMgJiYgZWRldi0+ZGVzYy0+b3BzLT5yZXNldCkKKwkJcmV0ID0gZWRldi0+ZGVzYy0+b3BzLT5yZXNldChlZGV2KTsKKwltdXRleF91bmxvY2soJmVkZXYtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldmZyZXFfZXZlbnRfcmVzZXRfZXZlbnQpOworCisvKioKKyAqIGRldmZyZXFfZXZlbnRfZ2V0X2VkZXZfYnlfcGhhbmRsZSgpIC0gR2V0IHRoZSBkZXZmcmVxLWV2ZW50IGRldiBmcm9tCisgKgkJCQkJIGRldmljZXRyZWUuCisgKiBAZGV2CQk6IHRoZSBwb2ludGVyIHRvIHRoZSBnaXZlbiBkZXZpY2UKKyAqIEBpbmRleAk6IHRoZSBpbmRleCBpbnRvIGxpc3Qgb2YgZGV2ZnJlcS1ldmVudCBkZXZpY2UKKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm4gdGhlIHBvaW50ZXIgb2YgZGV2ZnJlcS1ldmVudCBkZXZpY2UuCisgKi8KK3N0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZGV2ZnJlcV9ldmVudF9nZXRfZWRldl9ieV9waGFuZGxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCSAgICAgIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CisJc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2OworCisJaWYgKCFkZXYtPm9mX25vZGUpIHsKKwkJZGV2X2VycihkZXYsICJkZXZpY2UgZG9lcyBub3QgaGF2ZSBhIGRldmljZSBub2RlIGVudHJ5XG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAiZGV2ZnJlcS1ldmVudHMiLCBpbmRleCk7CisJaWYgKCFub2RlKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBwaGFuZGxlIGluICVzIG5vZGVcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworCX0KKworCW11dGV4X2xvY2soJmRldmZyZXFfZXZlbnRfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVkZXYsICZkZXZmcmVxX2V2ZW50X2xpc3QsIG5vZGUpIHsKKwkJaWYgKCFzdHJjbXAoZWRldi0+ZGVzYy0+bmFtZSwgbm9kZS0+bmFtZSkpCisJCQlnb3RvIG91dDsKKwl9CisJZWRldiA9IE5VTEw7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkZXZmcmVxX2V2ZW50X2xpc3RfbG9jayk7CisKKwlpZiAoIWVkZXYpIHsKKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gZ2V0IGRldmZyZXEtZXZlbnQgZGV2aWNlIDogJXNcbiIsCisJCQlub2RlLT5uYW1lKTsKKwkJb2Zfbm9kZV9wdXQobm9kZSk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworCX0KKworCW9mX25vZGVfcHV0KG5vZGUpOworCisJcmV0dXJuIGVkZXY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZXZmcmVxX2V2ZW50X2dldF9lZGV2X2J5X3BoYW5kbGUpOworCisvKioKKyAqIGRldmZyZXFfZXZlbnRfZ2V0X2VkZXZfY291bnQoKSAtIEdldCB0aGUgY291bnQgb2YgZGV2ZnJlcS1ldmVudCBkZXYKKyAqIEBkZXYJCTogdGhlIHBvaW50ZXIgdG8gdGhlIGdpdmVuIGRldmljZQorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHJldHVybiB0aGUgY291bnQgb2YgZGV2ZnJlcS1ldmVudCBkZXZpY2VzLgorICovCitpbnQgZGV2ZnJlcV9ldmVudF9nZXRfZWRldl9jb3VudChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGNvdW50OworCisJaWYgKCFkZXYtPm9mX25vZGUpIHsKKwkJZGV2X2VycihkZXYsICJkZXZpY2UgZG9lcyBub3QgaGF2ZSBhIGRldmljZSBub2RlIGVudHJ5XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY291bnQgPSBvZl9wcm9wZXJ0eV9jb3VudF9lbGVtc19vZl9zaXplKGRldi0+b2Zfbm9kZSwgImRldmZyZXEtZXZlbnRzIiwKKwkJCQkJCXNpemVvZih1MzIpKTsKKwlpZiAoY291bnQgPCAwICkgeworCQlkZXZfZXJyKGRldiwKKwkJCSJmYWlsZWQgdG8gZ2V0IHRoZSBjb3VudCBvZiBkZXZmcmVxLWV2ZW50IGluICVzIG5vZGVcbiIsCisJCQlkZXYtPm9mX25vZGUtPmZ1bGxfbmFtZSk7CisJCXJldHVybiBjb3VudDsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZXZmcmVxX2V2ZW50X2dldF9lZGV2X2NvdW50KTsKKworc3RhdGljIHZvaWQgZGV2ZnJlcV9ldmVudF9yZWxlYXNlX2VkZXYoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZWRldiA9IHRvX2RldmZyZXFfZXZlbnQoZGV2KTsKKworCWtmcmVlKGVkZXYpOworfQorCisvKioKKyAqIGRldmZyZXFfZXZlbnRfYWRkX2VkZXYoKSAtIEFkZCBuZXcgZGV2ZnJlcS1ldmVudCBkZXZpY2UuCisgKiBAZGV2CQk6IHRoZSBkZXZpY2Ugb3duaW5nIHRoZSBkZXZmcmVxLWV2ZW50IGRldmljZSBiZWluZyBjcmVhdGVkCisgKiBAZGVzYwk6IHRoZSBkZXZmcmVxLWV2ZW50IGRldmljZSdzIGRlY3JpcHRvciB3aGljaCBpbmNsdWRlIGVzc2VudGlhbAorICoJCSAgZGF0YSBmb3IgZGV2ZnJlcS1ldmVudCBkZXZpY2UuCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gYWRkIG5ldyBkZXZmcmVxLWV2ZW50IGRldmljZSB0byBkZXZmcmVxLWV2ZW50IGNsYXNzCisgKiBsaXN0IGFuZCByZWdpc3RlciB0aGUgZGV2aWNlIG9mIHRoZSBkZXZmcmVxLWV2ZW50IGRldmljZS4KKyAqLworc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICpkZXZmcmVxX2V2ZW50X2FkZF9lZGV2KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCXN0cnVjdCBkZXZmcmVxX2V2ZW50X2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2OworCXN0YXRpYyBhdG9taWNfdCBldmVudF9ubyA9IEFUT01JQ19JTklUKDApOworCWludCByZXQ7CisKKwlpZiAoIWRldiB8fCAhZGVzYykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlpZiAoIWRlc2MtPm5hbWUgfHwgIWRlc2MtPm9wcykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlpZiAoIWRlc2MtPm9wcy0+c2V0X2V2ZW50IHx8ICFkZXNjLT5vcHMtPmdldF9ldmVudCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwllZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlZGV2KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW11dGV4X2luaXQoJmVkZXYtPmxvY2spOworCWVkZXYtPmRlc2MgPSBkZXNjOworCWVkZXYtPmVuYWJsZV9jb3VudCA9IDA7CisJZWRldi0+ZGV2LnBhcmVudCA9IGRldjsKKwllZGV2LT5kZXYuY2xhc3MgPSBkZXZmcmVxX2V2ZW50X2NsYXNzOworCWVkZXYtPmRldi5yZWxlYXNlID0gZGV2ZnJlcV9ldmVudF9yZWxlYXNlX2VkZXY7CisKKwlkZXZfc2V0X25hbWUoJmVkZXYtPmRldiwgImV2ZW50LiVkIiwgYXRvbWljX2luY19yZXR1cm4oJmV2ZW50X25vKSAtIDEpOworCXJldCA9IGRldmljZV9yZWdpc3RlcigmZWRldi0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlwdXRfZGV2aWNlKCZlZGV2LT5kZXYpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKwlkZXZfc2V0X2RydmRhdGEoJmVkZXYtPmRldiwgZWRldik7CisKKwlJTklUX0xJU1RfSEVBRCgmZWRldi0+bm9kZSk7CisKKwltdXRleF9sb2NrKCZkZXZmcmVxX2V2ZW50X2xpc3RfbG9jayk7CisJbGlzdF9hZGQoJmVkZXYtPm5vZGUsICZkZXZmcmVxX2V2ZW50X2xpc3QpOworCW11dGV4X3VubG9jaygmZGV2ZnJlcV9ldmVudF9saXN0X2xvY2spOworCisJcmV0dXJuIGVkZXY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChkZXZmcmVxX2V2ZW50X2FkZF9lZGV2KTsKKworLyoqCisgKiBkZXZmcmVxX2V2ZW50X3JlbW92ZV9lZGV2KCkgLSBSZW1vdmUgdGhlIGRldmZyZXEtZXZlbnQgZGV2aWNlIHJlZ2lzdGVyZWQuCisgKiBAZGV2CQk6IHRoZSBkZXZmcmVxLWV2ZW50IGRldmljZQorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHJlbW92ZSB0aGUgcmVnaXN0ZXJlZCBkZXZmcmVxLWV2ZW50IGRldmljZS4KKyAqLworaW50IGRldmZyZXFfZXZlbnRfcmVtb3ZlX2VkZXYoc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2KQoreworCWlmICghZWRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlXQVJOX09OKGVkZXYtPmVuYWJsZV9jb3VudCk7CisKKwltdXRleF9sb2NrKCZkZXZmcmVxX2V2ZW50X2xpc3RfbG9jayk7CisJbGlzdF9kZWwoJmVkZXYtPm5vZGUpOworCW11dGV4X3VubG9jaygmZGV2ZnJlcV9ldmVudF9saXN0X2xvY2spOworCisJZGV2aWNlX3VucmVnaXN0ZXIoJmVkZXYtPmRldik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldmZyZXFfZXZlbnRfcmVtb3ZlX2VkZXYpOworCitzdGF0aWMgaW50IGRldm1fZGV2ZnJlcV9ldmVudF9tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKipyID0gcmVzOworCisJaWYgKFdBUk5fT04oIXIgfHwgISpyKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gKnIgPT0gZGF0YTsKK30KKworc3RhdGljIHZvaWQgZGV2bV9kZXZmcmVxX2V2ZW50X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpyZXMpCit7CisJZGV2ZnJlcV9ldmVudF9yZW1vdmVfZWRldigqKHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqKilyZXMpOworfQorCisvKioKKyAqIGRldm1fZGV2ZnJlcV9ldmVudF9hZGRfZWRldigpIC0gUmVzb3VyY2UtbWFuYWdlZCBkZXZmcmVxX2V2ZW50X2FkZF9lZGV2KCkKKyAqIEBkZXYJCTogdGhlIGRldmljZSBvd25pbmcgdGhlIGRldmZyZXEtZXZlbnQgZGV2aWNlIGJlaW5nIGNyZWF0ZWQKKyAqIEBkZXNjCTogdGhlIGRldmZyZXEtZXZlbnQgZGV2aWNlJ3MgZGVjcmlwdG9yIHdoaWNoIGluY2x1ZGUgZXNzZW50aWFsCisgKgkJICBkYXRhIGZvciBkZXZmcmVxLWV2ZW50IGRldmljZS4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBtYW5hZ2VzIGF1dG9tYXRpY2FsbHkgdGhlIG1lbW9yeSBvZiBkZXZmcmVxLWV2ZW50CisgKiBkZXZpY2UgdXNpbmcgZGV2aWNlIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIHNpbXBsaWZ5IHRoZSBmcmVlIG9wZXJhdGlvbgorICogZm9yIG1lbW9yeSBvZiBkZXZmcmVxLWV2ZW50IGRldmljZS4KKyAqLworc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICpkZXZtX2RldmZyZXFfZXZlbnRfYWRkX2VkZXYoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJc3RydWN0IGRldmZyZXFfZXZlbnRfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKipwdHIsICplZGV2OworCisJcHRyID0gZGV2cmVzX2FsbG9jKGRldm1fZGV2ZnJlcV9ldmVudF9yZWxlYXNlLCBzaXplb2YoKnB0ciksIEdGUF9LRVJORUwpOworCWlmICghcHRyKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWVkZXYgPSBkZXZmcmVxX2V2ZW50X2FkZF9lZGV2KGRldiwgZGVzYyk7CisJaWYgKElTX0VSUihlZGV2KSkgeworCQlkZXZyZXNfZnJlZShwdHIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwkqcHRyID0gZWRldjsKKwlkZXZyZXNfYWRkKGRldiwgcHRyKTsKKworCXJldHVybiBlZGV2OworfQorRVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9kZXZmcmVxX2V2ZW50X2FkZF9lZGV2KTsKKworLyoqCisgKiBkZXZtX2RldmZyZXFfZXZlbnRfcmVtb3ZlX2VkZXYoKS0gUmVzb3VyY2UtbWFuYWdlZCBkZXZmcmVxX2V2ZW50X3JlbW92ZV9lZGV2KCkKKyAqIEBkZXYJCTogdGhlIGRldmljZSBvd25pbmcgdGhlIGRldmZyZXEtZXZlbnQgZGV2aWNlIGJlaW5nIGNyZWF0ZWQKKyAqIEBlZGV2CTogdGhlIGRldmZyZXEtZXZlbnQgZGV2aWNlCisgKgorICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbWFuYWdlcyBhdXRvbWF0aWNhbGx5IHRoZSBtZW1vcnkgb2YgZGV2ZnJlcS1ldmVudAorICogZGV2aWNlIHVzaW5nIGRldmljZSByZXNvdXJjZSBtYW5hZ2VtZW50LgorICovCit2b2lkIGRldm1fZGV2ZnJlcV9ldmVudF9yZW1vdmVfZWRldihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2KQoreworCVdBUk5fT04oZGV2cmVzX3JlbGVhc2UoZGV2LCBkZXZtX2RldmZyZXFfZXZlbnRfcmVsZWFzZSwKKwkJCSAgICAgICBkZXZtX2RldmZyZXFfZXZlbnRfbWF0Y2gsIGVkZXYpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRldm1fZGV2ZnJlcV9ldmVudF9yZW1vdmVfZWRldik7CisKKy8qCisgKiBEZXZpY2UgYXR0cmlidXRlcyBmb3IgZGV2ZnJlcS1ldmVudCBjbGFzcy4KKyAqLworc3RhdGljIHNzaXplX3QgbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZWRldiA9IHRvX2RldmZyZXFfZXZlbnQoZGV2KTsKKworCWlmICghZWRldiB8fCAhZWRldi0+ZGVzYykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZWRldi0+ZGVzYy0+bmFtZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFJfUk8obmFtZSk7CisKK3N0YXRpYyBzc2l6ZV90IGVuYWJsZV9jb3VudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2ID0gdG9fZGV2ZnJlcV9ldmVudChkZXYpOworCisJaWYgKCFlZGV2IHx8ICFlZGV2LT5kZXNjKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBlZGV2LT5lbmFibGVfY291bnQpOworfQorc3RhdGljIERFVklDRV9BVFRSX1JPKGVuYWJsZV9jb3VudCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZXZmcmVxX2V2ZW50X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX25hbWUuYXR0ciwKKwkmZGV2X2F0dHJfZW5hYmxlX2NvdW50LmF0dHIsCisJTlVMTCwKK307CitBVFRSSUJVVEVfR1JPVVBTKGRldmZyZXFfZXZlbnQpOworCitzdGF0aWMgaW50IF9faW5pdCBkZXZmcmVxX2V2ZW50X2luaXQodm9pZCkKK3sKKwlkZXZmcmVxX2V2ZW50X2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAiZGV2ZnJlcS1ldmVudCIpOworCWlmIChJU19FUlIoZGV2ZnJlcV9ldmVudF9jbGFzcykpIHsKKwkJcHJfZXJyKCIlczogY291bGRuJ3QgY3JlYXRlIGNsYXNzXG4iLCBfX0ZJTEVfXyk7CisJCXJldHVybiBQVFJfRVJSKGRldmZyZXFfZXZlbnRfY2xhc3MpOworCX0KKworCWRldmZyZXFfZXZlbnRfY2xhc3MtPmRldl9ncm91cHMgPSBkZXZmcmVxX2V2ZW50X2dyb3VwczsKKworCXJldHVybiAwOworfQorc3Vic3lzX2luaXRjYWxsKGRldmZyZXFfZXZlbnRfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBkZXZmcmVxX2V2ZW50X2V4aXQodm9pZCkKK3sKKwljbGFzc19kZXN0cm95KGRldmZyZXFfZXZlbnRfY2xhc3MpOworfQorbW9kdWxlX2V4aXQoZGV2ZnJlcV9ldmVudF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQ2hhbndvbyBDaG9pIDxjdzAwLmNob2lAc2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRFVkZSRVEtRXZlbnQgY2xhc3Mgc3VwcG9ydCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kZXZmcmVxL2V2ZW50L0tjb25maWcgYi9kcml2ZXJzL2RldmZyZXEvZXZlbnQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTE3MjBhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kZXZmcmVxL2V2ZW50L0tjb25maWcKQEAgLTAsMCArMSwyNSBAQAorbWVudWNvbmZpZyBQTV9ERVZGUkVRX0VWRU5UCisJYm9vbCAiREVWRlJFUS1FdmVudCBkZXZpY2UgU3VwcG9ydCIKKwloZWxwCisJICBUaGUgZGV2ZnJlcS1ldmVudCBkZXZpY2UgcHJvdmlkZSB0aGUgcmF3IGRhdGEgYW5kIGV2ZW50cyB3aGljaAorCSAgaW5kaWNhdGUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgZGV2ZnJlcS1ldmVudCBkZXZpY2UuIFRoZSBwcm92aWRlZAorCSAgZGF0YSBmcm9tIGRldmZyZXEtZXZlbnQgZGV2aWNlIGlzIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RhdGUgb2YKKwkgIGRldmljZSBhbmQgZGV0ZXJtaW5lIHRoZSBzdWl0YWJsZSBzaXplIG9mIHJlc291cmNlIHRvIHJlZHVjZSB0aGUKKwkgIHdhc3RlZCByZXNvdXJjZS4KKworCSAgVGhlIGRldmZyZXEtZXZlbnQgZGV2aWNlIGNhbiBzdXBwb3J0IHRoZSB2YXJpb3VzIHR5cGUgb2YgZXZlbnRzCisJICAoZS5nLiwgcmF3IGRhdGEsIHV0aWxpemF0aW9uLCBsYXRlbmN5LCBiYW5kd2lkdGgpLiBUaGUgZXZlbnRzCisJICBtYXkgYmUgdXNlZCBieSBkZXZmcmVxIGdvdmVybm9yIGFuZCBvdGhlciBzdWJzeXN0ZW0uCisKK2lmIFBNX0RFVkZSRVFfRVZFTlQKKworY29uZmlnIERFVkZSRVFfRVZFTlRfRVhZTk9TX1BQTVUKKwlib29sICJFWFlOT1MgUFBNVSAoUGxhdGZvcm0gUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBVbml0KSBERVZGUkVRIGV2ZW50IERyaXZlciIKKwlkZXBlbmRzIG9uIEFSQ0hfRVhZTk9TCisJc2VsZWN0IFBNX09QUAorCWhlbHAKKwkgIFRoaXMgYWRkIHRoZSBkZXZmcmVxLWV2ZW50IGRyaXZlciBmb3IgRXh5bm9zIFNvQy4gSXQgcHJvdmlkZXMgUFBNVQorCSAgKFBsYXRmb3JtIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCkgY291bnRlcnMgdG8gZXN0aW1hdGUgdGhlCisJICB1dGlsaXphdGlvbiBvZiBlYWNoIG1vZHVsZS4KKworZW5kaWYgIyBQTV9ERVZGUkVRX0VWRU5UCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RldmZyZXEvZXZlbnQvTWFrZWZpbGUgYi9kcml2ZXJzL2RldmZyZXEvZXZlbnQvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUxNDZlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZGV2ZnJlcS9ldmVudC9NYWtlZmlsZQpAQCAtMCwwICsxLDIgQEAKKyMgRXh5bm9zIERFVkZSRVEgRXZlbnQgRHJpdmVycworb2JqLSQoQ09ORklHX0RFVkZSRVFfRVZFTlRfRVhZTk9TX1BQTVUpICs9IGV4eW5vcy1wcG11Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGV2ZnJlcS9ldmVudC9leHlub3MtcHBtdS5jIGIvZHJpdmVycy9kZXZmcmVxL2V2ZW50L2V4eW5vcy1wcG11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTM1YmUwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZGV2ZnJlcS9ldmVudC9leHlub3MtcHBtdS5jCkBAIC0wLDAgKzEsMzc0IEBACisvKgorICogZXh5bm9zX3BwbXUuYyAtIEVYWU5PUyBQUE1VIChQbGF0Zm9ybSBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQpIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIEF1dGhvciA6IENoYW53b28gQ2hvaSA8Y3cwMC5jaG9pQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gZHJpdmVycy9kZXZmcmVxL2V4eW5vcy9leHlub3NfcHBtdS5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmZyZXEtZXZlbnQuaD4KKworI2luY2x1ZGUgImV4eW5vcy1wcG11LmgiCisKK3N0cnVjdCBleHlub3NfcHBtdV9kYXRhIHsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJc3RydWN0IGNsayAqY2xrOworfTsKKworc3RydWN0IGV4eW5vc19wcG11IHsKKwlzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKiplZGV2OworCXN0cnVjdCBkZXZmcmVxX2V2ZW50X2Rlc2MgKmRlc2M7CisJdW5zaWduZWQgaW50IG51bV9ldmVudHM7CisKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG11dGV4IGxvY2s7CisKKwlzdHJ1Y3QgZXh5bm9zX3BwbXVfZGF0YSBwcG11OworfTsKKworI2RlZmluZSBQUE1VX0VWRU5UKG5hbWUpCQkJXAorCXsgInBwbXUtZXZlbnQwLSIjbmFtZSwgUFBNVV9QTU5DTlQwIH0sCVwKKwl7ICJwcG11LWV2ZW50MS0iI25hbWUsIFBQTVVfUE1OQ05UMSB9LAlcCisJeyAicHBtdS1ldmVudDItIiNuYW1lLCBQUE1VX1BNTkNOVDIgfSwJXAorCXsgInBwbXUtZXZlbnQzLSIjbmFtZSwgUFBNVV9QTU5DTlQzIH0KKworc3RydWN0IF9fZXh5bm9zX3BwbXVfZXZlbnRzIHsKKwljaGFyICpuYW1lOworCWludCBpZDsKK30gcHBtdV9ldmVudHNbXSA9IHsKKwkvKiBGb3IgRXh5bm9zMzI1MCwgRXh5bm9zNCBhbmQgRXh5bm9zNTI2MCAqLworCVBQTVVfRVZFTlQoZzNkKSwKKwlQUE1VX0VWRU5UKGZzeXMpLAorCisJLyogRm9yIEV4eW5vczQgU29DcyBhbmQgRXh5bm9zMzI1MCAqLworCVBQTVVfRVZFTlQoZG1jMCksCisJUFBNVV9FVkVOVChkbWMxKSwKKwlQUE1VX0VWRU5UKGNwdSksCisJUFBNVV9FVkVOVChyaWdodGJ1cyksCisJUFBNVV9FVkVOVChsZWZ0YnVzKSwKKwlQUE1VX0VWRU5UKGxjZDApLAorCVBQTVVfRVZFTlQoY2FtaWYpLAorCisJLyogT25seSBmb3IgRXh5bm9zMzI1MCBhbmQgRXh5bm9zNTI2MCAqLworCVBQTVVfRVZFTlQobWZjKSwKKworCS8qIE9ubHkgZm9yIEV4eW5vczQgU29DcyAqLworCVBQTVVfRVZFTlQobWZjLWxlZnQpLAorCVBQTVVfRVZFTlQobWZjLXJpZ2h0KSwKKworCS8qIE9ubHkgZm9yIEV4eW5vczUyNjAgU29DcyAqLworCVBQTVVfRVZFTlQoZHJleDAtczApLAorCVBQTVVfRVZFTlQoZHJleDAtczEpLAorCVBQTVVfRVZFTlQoZHJleDEtczApLAorCVBQTVVfRVZFTlQoZHJleDEtczEpLAorCVBQTVVfRVZFTlQoZWFnbGUpLAorCVBQTVVfRVZFTlQoa2ZjKSwKKwlQUE1VX0VWRU5UKGlzcCksCisJUFBNVV9FVkVOVChmaW1jKSwKKwlQUE1VX0VWRU5UKGdzY2wpLAorCVBQTVVfRVZFTlQobXNjbCksCisJUFBNVV9FVkVOVChmaW1kMHgpLAorCVBQTVVfRVZFTlQoZmltZDF4KSwKKwl7IC8qIHNlbnRpbmVsICovIH0sCit9OworCitzdGF0aWMgaW50IGV4eW5vc19wcG11X2ZpbmRfcHBtdV9pZChzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKmVkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcG11X2V2ZW50cyk7IGkrKykKKwkJaWYgKCFzdHJjbXAoZWRldi0+ZGVzYy0+bmFtZSwgcHBtdV9ldmVudHNbaV0ubmFtZSkpCisJCQlyZXR1cm4gcHBtdV9ldmVudHNbaV0uaWQ7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBleHlub3NfcHBtdV9kaXNhYmxlKHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZWRldikKK3sKKwlzdHJ1Y3QgZXh5bm9zX3BwbXUgKmluZm8gPSBkZXZmcmVxX2V2ZW50X2dldF9kcnZkYXRhKGVkZXYpOworCXUzMiBwbW5jOworCisJLyogRGlzYWJsZSBhbGwgY291bnRlcnMgKi8KKwlfX3Jhd193cml0ZWwoUFBNVV9DQ05UX01BU0sgfAorCQkgICAgIFBQTVVfUE1DTlQwX01BU0sgfAorCQkgICAgIFBQTVVfUE1DTlQxX01BU0sgfAorCQkgICAgIFBQTVVfUE1DTlQyX01BU0sgfAorCQkgICAgIFBQTVVfUE1DTlQzX01BU0ssCisJCSAgICAgaW5mby0+cHBtdS5iYXNlICsgUFBNVV9DTlRFTkMpOworCisJLyogRGlzYWJsZSBQUE1VICovCisJcG1uYyA9IF9fcmF3X3JlYWRsKGluZm8tPnBwbXUuYmFzZSArIFBQTVVfUE1OQyk7CisJcG1uYyAmPSB+UFBNVV9QTU5DX0VOQUJMRV9NQVNLOworCV9fcmF3X3dyaXRlbChwbW5jLCBpbmZvLT5wcG11LmJhc2UgKyBQUE1VX1BNTkMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX3BwbXVfc2V0X2V2ZW50KHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZWRldikKK3sKKwlzdHJ1Y3QgZXh5bm9zX3BwbXUgKmluZm8gPSBkZXZmcmVxX2V2ZW50X2dldF9kcnZkYXRhKGVkZXYpOworCWludCBpZCA9IGV4eW5vc19wcG11X2ZpbmRfcHBtdV9pZChlZGV2KTsKKwl1MzIgcG1uYywgY250ZW5zOworCisJaWYgKGlkIDwgMCkKKwkJcmV0dXJuIGlkOworCisJLyogRW5hYmxlIHNwZWNpZmljIGNvdW50ZXIgKi8KKwljbnRlbnMgPSBfX3Jhd19yZWFkbChpbmZvLT5wcG11LmJhc2UgKyBQUE1VX0NOVEVOUyk7CisJY250ZW5zIHw9IChQUE1VX0NDTlRfTUFTSyB8IChQUE1VX0VOQUJMRSA8PCBpZCkpOworCV9fcmF3X3dyaXRlbChjbnRlbnMsIGluZm8tPnBwbXUuYmFzZSArIFBQTVVfQ05URU5TKTsKKworCS8qIFNldCB0aGUgZXZlbnQgb2YgUmVhZC9Xcml0ZSBkYXRhIGNvdW50ICAqLworCV9fcmF3X3dyaXRlbChQUE1VX1JPX0RBVEFfQ05UIHwgUFBNVV9XT19EQVRBX0NOVCwKKwkJCWluZm8tPnBwbXUuYmFzZSArIFBQTVVfQkVWVHhTRUwoaWQpKTsKKworCS8qIFJlc2V0IGN5Y2xlIGNvdW50ZXIvcGVyZm9ybWFuY2UgY291bnRlciBhbmQgZW5hYmxlIFBQTVUgKi8KKwlwbW5jID0gX19yYXdfcmVhZGwoaW5mby0+cHBtdS5iYXNlICsgUFBNVV9QTU5DKTsKKwlwbW5jICY9IH4oUFBNVV9QTU5DX0VOQUJMRV9NQVNLCisJCQl8IFBQTVVfUE1OQ19DT1VOVEVSX1JFU0VUX01BU0sKKwkJCXwgUFBNVV9QTU5DX0NDX1JFU0VUX01BU0spOworCXBtbmMgfD0gKFBQTVVfRU5BQkxFIDw8IFBQTVVfUE1OQ19FTkFCTEVfU0hJRlQpOworCXBtbmMgfD0gKFBQTVVfRU5BQkxFIDw8IFBQTVVfUE1OQ19DT1VOVEVSX1JFU0VUX1NISUZUKTsKKwlwbW5jIHw9IChQUE1VX0VOQUJMRSA8PCBQUE1VX1BNTkNfQ0NfUkVTRVRfU0hJRlQpOworCV9fcmF3X3dyaXRlbChwbW5jLCBpbmZvLT5wcG11LmJhc2UgKyBQUE1VX1BNTkMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX3BwbXVfZ2V0X2V2ZW50KHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZWRldiwKKwkJCQlzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kYXRhICplZGF0YSkKK3sKKwlzdHJ1Y3QgZXh5bm9zX3BwbXUgKmluZm8gPSBkZXZmcmVxX2V2ZW50X2dldF9kcnZkYXRhKGVkZXYpOworCWludCBpZCA9IGV4eW5vc19wcG11X2ZpbmRfcHBtdV9pZChlZGV2KTsKKwl1MzIgcG1uYywgY250ZW5jOworCisJaWYgKGlkIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBEaXNhYmxlIFBQTVUgKi8KKwlwbW5jID0gX19yYXdfcmVhZGwoaW5mby0+cHBtdS5iYXNlICsgUFBNVV9QTU5DKTsKKwlwbW5jICY9IH5QUE1VX1BNTkNfRU5BQkxFX01BU0s7CisJX19yYXdfd3JpdGVsKHBtbmMsIGluZm8tPnBwbXUuYmFzZSArIFBQTVVfUE1OQyk7CisKKwkvKiBSZWFkIGN5Y2xlIGNvdW50ICovCisJZWRhdGEtPnRvdGFsX2NvdW50ID0gX19yYXdfcmVhZGwoaW5mby0+cHBtdS5iYXNlICsgUFBNVV9DQ05UKTsKKworCS8qIFJlYWQgcGVyZm9ybWFuY2UgY291bnQgKi8KKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBQUE1VX1BNTkNOVDA6CisJY2FzZSBQUE1VX1BNTkNOVDE6CisJY2FzZSBQUE1VX1BNTkNOVDI6CisJCWVkYXRhLT5sb2FkX2NvdW50CisJCQk9IF9fcmF3X3JlYWRsKGluZm8tPnBwbXUuYmFzZSArIFBQTVVfUE1OQ1QoaWQpKTsKKwkJYnJlYWs7CisJY2FzZSBQUE1VX1BNTkNOVDM6CisJCWVkYXRhLT5sb2FkX2NvdW50ID0KKwkJCSgoX19yYXdfcmVhZGwoaW5mby0+cHBtdS5iYXNlICsgUFBNVV9QTUNOVDNfSElHSCkgPDwgOCkKKwkJCXwgX19yYXdfcmVhZGwoaW5mby0+cHBtdS5iYXNlICsgUFBNVV9QTUNOVDNfTE9XKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIERpc2FibGUgc3BlY2lmaWMgY291bnRlciAqLworCWNudGVuYyA9IF9fcmF3X3JlYWRsKGluZm8tPnBwbXUuYmFzZSArIFBQTVVfQ05URU5DKTsKKwljbnRlbmMgfD0gKFBQTVVfQ0NOVF9NQVNLIHwgKFBQTVVfRU5BQkxFIDw8IGlkKSk7CisJX19yYXdfd3JpdGVsKGNudGVuYywgaW5mby0+cHBtdS5iYXNlICsgUFBNVV9DTlRFTkMpOworCisJZGV2X2RiZygmZWRldi0+ZGV2LCAiJXMgKGV2ZW50OiAlbGQvJWxkKVxuIiwgZWRldi0+ZGVzYy0+bmFtZSwKKwkJCQkJZWRhdGEtPmxvYWRfY291bnQsIGVkYXRhLT50b3RhbF9jb3VudCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZmcmVxX2V2ZW50X29wcyBleHlub3NfcHBtdV9vcHMgPSB7CisJLmRpc2FibGUgPSBleHlub3NfcHBtdV9kaXNhYmxlLAorCS5zZXRfZXZlbnQgPSBleHlub3NfcHBtdV9zZXRfZXZlbnQsCisJLmdldF9ldmVudCA9IGV4eW5vc19wcG11X2dldF9ldmVudCwKK307CisKK3N0YXRpYyBpbnQgb2ZfZ2V0X2RldmZyZXFfZXZlbnRzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJIHN0cnVjdCBleHlub3NfcHBtdSAqaW5mbykKK3sKKwlzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXNjICpkZXNjOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGluZm8tPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmV2ZW50c19ucCwgKm5vZGU7CisJaW50IGksIGosIGNvdW50OworCisJZXZlbnRzX25wID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsICJldmVudHMiKTsKKwlpZiAoIWV2ZW50c19ucCkgeworCQlkZXZfZXJyKGRldiwKKwkJCSJmYWlsZWQgdG8gZ2V0IGNoaWxkIG5vZGUgb2YgZGV2ZnJlcS1ldmVudCBkZXZpY2VzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY291bnQgPSBvZl9nZXRfY2hpbGRfY291bnQoZXZlbnRzX25wKTsKKwlkZXNjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpkZXNjKSAqIGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlc2MpCisJCXJldHVybiAtRU5PTUVNOworCWluZm8tPm51bV9ldmVudHMgPSBjb3VudDsKKworCWogPSAwOworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoZXZlbnRzX25wLCBub2RlKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBwbXVfZXZlbnRzKTsgaSsrKSB7CisJCQlpZiAoIXBwbXVfZXZlbnRzW2ldLm5hbWUpCisJCQkJY29udGludWU7CisKKwkJCWlmICghb2Zfbm9kZV9jbXAobm9kZS0+bmFtZSwgcHBtdV9ldmVudHNbaV0ubmFtZSkpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHBwbXVfZXZlbnRzKSkgeworCQkJZGV2X3dhcm4oZGV2LAorCQkJCSJkb24ndCBrbm93IGhvdyB0byBjb25maWd1cmUgZXZlbnRzIDogJXNcbiIsCisJCQkJbm9kZS0+bmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWRlc2Nbal0ub3BzID0gJmV4eW5vc19wcG11X29wczsKKwkJZGVzY1tqXS5kcml2ZXJfZGF0YSA9IGluZm87CisKKwkJb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobm9kZSwgImV2ZW50LW5hbWUiLCAmZGVzY1tqXS5uYW1lKTsKKworCQlqKys7CisKKwkJb2Zfbm9kZV9wdXQobm9kZSk7CisJfQorCWluZm8tPmRlc2MgPSBkZXNjOworCisJb2Zfbm9kZV9wdXQoZXZlbnRzX25wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV4eW5vc19wcG11X3BhcnNlX2R0KHN0cnVjdCBleHlub3NfcHBtdSAqaW5mbykKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpbmZvLT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghbnApIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZmluZCBkZXZpY2V0cmVlIG5vZGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBNYXBzIHRoZSBtZW1vcnkgbWFwcGVkIElPIHRvIGNvbnRyb2wgUFBNVSByZWdpc3RlciAqLworCWluZm8tPnBwbXUuYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKKwlpZiAoSVNfRVJSX09SX05VTEwoaW5mby0+cHBtdS5iYXNlKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWluZm8tPnBwbXUuY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInBwbXUiKTsKKwlpZiAoSVNfRVJSKGluZm8tPnBwbXUuY2xrKSkgeworCQlpbmZvLT5wcG11LmNsayA9IE5VTEw7CisJCWRldl93YXJuKGRldiwgImNhbm5vdCBnZXQgUFBNVSBjbG9ja1xuIik7CisJfQorCisJcmV0ID0gb2ZfZ2V0X2RldmZyZXFfZXZlbnRzKG5wLCBpbmZvKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBwYXJzZSBleHlub3MgcHBtdSBkdCBub2RlXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlpb3VubWFwKGluZm8tPnBwbXUuYmFzZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGV4eW5vc19wcG11X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGV4eW5vc19wcG11ICppbmZvOworCXN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqKmVkZXY7CisJc3RydWN0IGRldmZyZXFfZXZlbnRfZGVzYyAqZGVzYzsKKwlpbnQgaSwgcmV0ID0gMCwgc2l6ZTsKKworCWluZm8gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2luaXQoJmluZm8tPmxvY2spOworCWluZm8tPmRldiA9ICZwZGV2LT5kZXY7CisKKwkvKiBQYXJzZSBkdCBkYXRhIHRvIGdldCByZXNvdXJjZSAqLworCXJldCA9IGV4eW5vc19wcG11X3BhcnNlX2R0KGluZm8pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gcGFyc2UgZGV2aWNldHJlZSBmb3IgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlkZXNjID0gaW5mby0+ZGVzYzsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICopICogaW5mby0+bnVtX2V2ZW50czsKKwlpbmZvLT5lZGV2ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemUsIEdGUF9LRVJORUwpOworCWlmICghaW5mby0+ZWRldikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBkZXZmcmVxLWV2ZW50IGRldmljZXNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZWRldiA9IGluZm8tPmVkZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+bnVtX2V2ZW50czsgaSsrKSB7CisJCWVkZXZbaV0gPSBkZXZtX2RldmZyZXFfZXZlbnRfYWRkX2VkZXYoJnBkZXYtPmRldiwgJmRlc2NbaV0pOworCQlpZiAoSVNfRVJSKGVkZXYpKSB7CisJCQlyZXQgPSBQVFJfRVJSKGVkZXYpOworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gYWRkIGRldmZyZXEtZXZlbnQgZGV2aWNlXG4iKTsKKwkJCWdvdG8gZXJyOworCQl9CisJfQorCisJY2xrX3ByZXBhcmVfZW5hYmxlKGluZm8tPnBwbXUuY2xrKTsKKworCXJldHVybiAwOworZXJyOgorCWlvdW5tYXAoaW5mby0+cHBtdS5iYXNlKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZXh5bm9zX3BwbXVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGV4eW5vc19wcG11ICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaW5mby0+cHBtdS5jbGspOworCWlvdW5tYXAoaW5mby0+cHBtdS5iYXNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBleHlub3NfcHBtdV9pZF9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3MtcHBtdSIsIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZXh5bm9zX3BwbXVfZHJpdmVyID0geworCS5wcm9iZQk9IGV4eW5vc19wcG11X3Byb2JlLAorCS5yZW1vdmUJPSBleHlub3NfcHBtdV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiZXh5bm9zLXBwbXUiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBleHlub3NfcHBtdV9pZF9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoZXh5bm9zX3BwbXVfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJFeHlub3MgUFBNVShQbGF0Zm9ybSBQZXJmb3JtYW5jZSBNb25pdG9yaW5nIFVuaXQpIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQ2hhbndvbyBDaG9pIDxjdzAwLmNob2lAc2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RldmZyZXEvZXZlbnQvZXh5bm9zLXBwbXUuaCBiL2RyaXZlcnMvZGV2ZnJlcS9ldmVudC9leHlub3MtcHBtdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlODMxZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2RldmZyZXEvZXZlbnQvZXh5bm9zLXBwbXUuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogZXh5bm9zX3BwbXUuaCAtIEVYWU5PUyBQUE1VIGhlYWRlciBmaWxlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE1IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKiBBdXRob3IgOiBDaGFud29vIENob2kgPGN3MDAuY2hvaUBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19FWFlOT1NfUFBNVV9IX18KKyNkZWZpbmUgX19FWFlOT1NfUFBNVV9IX18KKworZW51bSBwcG11X3N0YXRlIHsKKwlQUE1VX0RJU0FCTEUgPSAwLAorCVBQTVVfRU5BQkxFLAorfTsKKworZW51bSBwcG11X2NvdW50ZXIgeworCVBQTVVfUE1OQ05UMCA9IDAsCisJUFBNVV9QTU5DTlQxLAorCVBQTVVfUE1OQ05UMiwKKwlQUE1VX1BNTkNOVDMsCisKKwlQUE1VX1BNTkNOVF9NQVgsCit9OworCitlbnVtIHBwbXVfZXZlbnRfdHlwZSB7CisJUFBNVV9ST19CVVNZX0NZQ0xFX0NOVAk9IDB4MCwKKwlQUE1VX1dPX0JVU1lfQ1lDTEVfQ05UCT0gMHgxLAorCVBQTVVfUldfQlVTWV9DWUNMRV9DTlQJPSAweDIsCisJUFBNVV9ST19SRVFVRVNUX0NOVAk9IDB4MywKKwlQUE1VX1dPX1JFUVVFU1RfQ05UCT0gMHg0LAorCVBQTVVfUk9fREFUQV9DTlQJPSAweDUsCisJUFBNVV9XT19EQVRBX0NOVAk9IDB4NiwKKwlQUE1VX1JPX0xBVEVOQ1kJCT0gMHgxMiwKKwlQUE1VX1dPX0xBVEVOQ1kJCT0gMHgxNiwKK307CisKK2VudW0gcHBtdV9yZWcgeworCS8qIFBQQyBjb250cm9sIHJlZ2lzdGVyICovCisJUFBNVV9QTU5DCQk9IDB4MDAsCisJUFBNVV9DTlRFTlMJCT0gMHgxMCwKKwlQUE1VX0NOVEVOQwkJPSAweDIwLAorCVBQTVVfSU5URU5TCQk9IDB4MzAsCisJUFBNVV9JTlRFTkMJCT0gMHg0MCwKKwlQUE1VX0ZMQUcJCT0gMHg1MCwKKworCS8qIEN5Y2xlIENvdW50ZXIgYW5kIFBlcmZvcm1hbmNlIEV2ZW50IENvdW50ZXIgUmVnaXN0ZXIgKi8KKwlQUE1VX0NDTlQJCT0gMHgxMDAsCisJUFBNVV9QTUNOVDAJCT0gMHgxMTAsCisJUFBNVV9QTUNOVDEJCT0gMHgxMjAsCisJUFBNVV9QTUNOVDIJCT0gMHgxMzAsCisJUFBNVV9QTUNOVDNfSElHSAk9IDB4MTQwLAorCVBQTVVfUE1DTlQzX0xPVwkJPSAweDE1MCwKKworCS8qIEJ1cyBFdmVudCBHZW5lcmF0b3IgKi8KKwlQUE1VX0JFVlQwU0VMCQk9IDB4MTAwMCwKKwlQUE1VX0JFVlQxU0VMCQk9IDB4MTEwMCwKKwlQUE1VX0JFVlQyU0VMCQk9IDB4MTIwMCwKKwlQUE1VX0JFVlQzU0VMCQk9IDB4MTMwMCwKKwlQUE1VX0NPVU5URVJfUkVTRVQJPSAweDE4MTAsCisJUFBNVV9SRUFEX09WRVJGTE9XX0NOVAk9IDB4MTgxMCwKKwlQUE1VX1JFQURfVU5ERVJGTE9XX0NOVAk9IDB4MTgxNCwKKwlQUE1VX1dSSVRFX09WRVJGTE9XX0NOVAk9IDB4MTg1MCwKKwlQUE1VX1dSSVRFX1VOREVSRkxPV19DTlQgPSAweDE4NTQsCisJUFBNVV9SRUFEX1BFTkRJTkdfQ05UCT0gMHgxODgwLAorCVBQTVVfV1JJVEVfUEVORElOR19DTlQJPSAweDE4ODQKK307CisKKy8qIFBNTkMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUFBNVV9QTU5DX0NDX1JFU0VUX1NISUZUCTIKKyNkZWZpbmUgUFBNVV9QTU5DX0NPVU5URVJfUkVTRVRfU0hJRlQJMQorI2RlZmluZSBQUE1VX1BNTkNfRU5BQkxFX1NISUZUCQkwCisjZGVmaW5lIFBQTVVfUE1OQ19TVEFSVF9NT0RFX01BU0sJQklUKDE2KQorI2RlZmluZSBQUE1VX1BNTkNfQ0NfRElWSURFUl9NQVNLCUJJVCgzKQorI2RlZmluZSBQUE1VX1BNTkNfQ0NfUkVTRVRfTUFTSwkJQklUKDIpCisjZGVmaW5lIFBQTVVfUE1OQ19DT1VOVEVSX1JFU0VUX01BU0sJQklUKDEpCisjZGVmaW5lIFBQTVVfUE1OQ19FTkFCTEVfTUFTSwkJQklUKDApCisKKy8qIENOVEVOUy9DTlRFTkMvSU5URU5TL0lOVEVOQy9GTEFHIHJlZ2lzdGVyICovCisjZGVmaW5lIFBQTVVfQ0NOVF9NQVNLCQkJQklUKDMxKQorI2RlZmluZSBQUE1VX1BNQ05UM19NQVNLCQlCSVQoMykKKyNkZWZpbmUgUFBNVV9QTUNOVDJfTUFTSwkJQklUKDIpCisjZGVmaW5lIFBQTVVfUE1DTlQxX01BU0sJCUJJVCgxKQorI2RlZmluZSBQUE1VX1BNQ05UMF9NQVNLCQlCSVQoMCkKKworLyogUFBNVV9QTU5DVHgvUFBNVV9CRVR4U0VMIHJlZ2lzdGVycyAqLworI2RlZmluZSBQUE1VX1BNTkNUKHgpCQkJKFBQTVVfUE1DTlQwICsgKDB4MTAgKiB4KSkKKyNkZWZpbmUgUFBNVV9CRVZUeFNFTCh4KQkJKFBQTVVfQkVWVDBTRUwgKyAoMHgxMDAgKiB4KSkKKworI2VuZGlmIC8qIF9fRVhZTk9TX1BQTVVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RldmZyZXEvdGVncmEtZGV2ZnJlcS5jIGIvZHJpdmVycy9kZXZmcmVxL3RlZ3JhLWRldmZyZXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDc5MDk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kZXZmcmVxL3RlZ3JhLWRldmZyZXEuYwpAQCAtMCwwICsxLDcxOCBAQAorLyoKKyAqIEEgZGV2ZnJlcSBkcml2ZXIgZm9yIE5WSURJQSBUZWdyYSBTb0NzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0IE5WSURJQSBDT1JQT1JBVElPTi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBHb29nbGUsIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX29wcC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+CisKKyNpbmNsdWRlICJnb3Zlcm5vci5oIgorCisjZGVmaW5lIEFDVE1PTl9HTEJfU1RBVFVTCQkJCQkweDAKKyNkZWZpbmUgQUNUTU9OX0dMQl9QRVJJT0RfQ1RSTAkJCQkJMHg0CisKKyNkZWZpbmUgQUNUTU9OX0RFVl9DVFJMCQkJCQkJMHgwCisjZGVmaW5lIEFDVE1PTl9ERVZfQ1RSTF9LX1ZBTF9TSElGVAkJCQkxMAorI2RlZmluZSBBQ1RNT05fREVWX0NUUkxfRU5CX1BFUklPRElDCQkJCUJJVCgxOCkKKyNkZWZpbmUgQUNUTU9OX0RFVl9DVFJMX0FWR19CRUxPV19XTUFSS19FTgkJCUJJVCgyMCkKKyNkZWZpbmUgQUNUTU9OX0RFVl9DVFJMX0FWR19BQk9WRV9XTUFSS19FTgkJCUJJVCgyMSkKKyNkZWZpbmUgQUNUTU9OX0RFVl9DVFJMX0NPTlNFQ1VUSVZFX0JFTE9XX1dNQVJLX05VTV9TSElGVAkyMworI2RlZmluZSBBQ1RNT05fREVWX0NUUkxfQ09OU0VDVVRJVkVfQUJPVkVfV01BUktfTlVNX1NISUZUCTI2CisjZGVmaW5lIEFDVE1PTl9ERVZfQ1RSTF9DT05TRUNVVElWRV9CRUxPV19XTUFSS19FTgkJQklUKDI5KQorI2RlZmluZSBBQ1RNT05fREVWX0NUUkxfQ09OU0VDVVRJVkVfQUJPVkVfV01BUktfRU4JCUJJVCgzMCkKKyNkZWZpbmUgQUNUTU9OX0RFVl9DVFJMX0VOQgkJCQkJQklUKDMxKQorCisjZGVmaW5lIEFDVE1PTl9ERVZfVVBQRVJfV01BUksJCQkJCTB4NAorI2RlZmluZSBBQ1RNT05fREVWX0xPV0VSX1dNQVJLCQkJCQkweDgKKyNkZWZpbmUgQUNUTU9OX0RFVl9JTklUX0FWRwkJCQkJMHhjCisjZGVmaW5lIEFDVE1PTl9ERVZfQVZHX1VQUEVSX1dNQVJLCQkJCTB4MTAKKyNkZWZpbmUgQUNUTU9OX0RFVl9BVkdfTE9XRVJfV01BUksJCQkJMHgxNAorI2RlZmluZSBBQ1RNT05fREVWX0NPVU5UX1dFSUdIVAkJCQkJMHgxOAorI2RlZmluZSBBQ1RNT05fREVWX0FWR19DT1VOVAkJCQkJMHgyMAorI2RlZmluZSBBQ1RNT05fREVWX0lOVFJfU1RBVFVTCQkJCQkweDI0CisKKyNkZWZpbmUgQUNUTU9OX0lOVFJfU1RBVFVTX0NMRUFSCQkJCTB4ZmZmZmZmZmYKKworI2RlZmluZSBBQ1RNT05fREVWX0lOVFJfQ09OU0VDVVRJVkVfVVBQRVIJCQlCSVQoMzEpCisjZGVmaW5lIEFDVE1PTl9ERVZfSU5UUl9DT05TRUNVVElWRV9MT1dFUgkJCUJJVCgzMCkKKworI2RlZmluZSBBQ1RNT05fQUJPVkVfV01BUktfV0lORE9XCQkJCTEKKyNkZWZpbmUgQUNUTU9OX0JFTE9XX1dNQVJLX1dJTkRPVwkJCQkzCisjZGVmaW5lIEFDVE1PTl9CT09TVF9GUkVRX1NURVAJCQkJCTE2MDAwCisKKy8qIGFjdGl2aXR5IGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgZXZlcnkgMjU2IG1lbW9yeSB0cmFuc2FjdGlvbnMsIGFuZCBlYWNoCisgKiB0cmFuc2FjdGlvbiB0YWtlcyA0IEVNQyBjbG9ja3MgZm9yIFRlZ3JhMTI0OyBTbyB0aGUgQ09VTlRfV0VJR0hUIGlzCisgKiA0ICogMjU2ID0gMTAyNC4KKyAqLworI2RlZmluZSBBQ1RNT05fQ09VTlRfV0VJR0hUCQkJCQkweDQwMAorCisvKgorICogQUNUTU9OX0FWRVJBR0VfV0lORE9XX0xPRzI6IGRlZmF1bHQgdmFsdWUgZm9yIEBERVZfQ1RSTF9LX1ZBTCwgd2hpY2gKKyAqIHRyYW5zbGF0ZXMgdG8gMiBeIChLX1ZBTCArIDEpLiBleDogMiBeICg2ICsgMSkgPSAxMjgKKyAqLworI2RlZmluZSBBQ1RNT05fQVZFUkFHRV9XSU5ET1dfTE9HMgkJCTYKKyNkZWZpbmUgQUNUTU9OX1NBTVBMSU5HX1BFUklPRAkJCQkxMiAvKiBtcyAqLworI2RlZmluZSBBQ1RNT05fREVGQVVMVF9BVkdfQkFORAkJCQk2ICAvKiAxLzEwIG9mICUgKi8KKworI2RlZmluZSBLSFoJCQkJCQkJMTAwMAorCisvKiBBc3N1bWUgdGhhdCB0aGUgYnVzIGlzIHNhdHVyYXRlZCBpZiB0aGUgdXRpbGl6YXRpb24gaXMgMjUlICovCisjZGVmaW5lIEJVU19TQVRVUkFUSU9OX1JBVElPCQkJCQkyNQorCisvKioKKyAqIHN0cnVjdCB0ZWdyYV9kZXZmcmVxX2RldmljZV9jb25maWcgLSBjb25maWd1cmF0aW9uIHNwZWNpZmljIHRvIGFuIEFDVE1PTgorICogZGV2aWNlCisgKgorICogQ29lZmZpY2llbnRzIGFuZCB0aHJlc2hvbGRzIGFyZSBpbiAlCisgKi8KK3N0cnVjdCB0ZWdyYV9kZXZmcmVxX2RldmljZV9jb25maWcgeworCXUzMgkJb2Zmc2V0OworCXUzMgkJaXJxX21hc2s7CisKKwl1bnNpZ25lZCBpbnQJYm9vc3RfdXBfY29lZmY7CisJdW5zaWduZWQgaW50CWJvb3N0X2Rvd25fY29lZmY7CisJdW5zaWduZWQgaW50CWJvb3N0X3VwX3RocmVzaG9sZDsKKwl1bnNpZ25lZCBpbnQJYm9vc3RfZG93bl90aHJlc2hvbGQ7CisJdTMyCQlhdmdfZGVwZW5kZW5jeV90aHJlc2hvbGQ7Cit9OworCitlbnVtIHRlZ3JhX2FjdG1vbl9kZXZpY2UgeworCU1DQUxMID0gMCwKKwlNQ0NQVSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGVncmFfZGV2ZnJlcV9kZXZpY2VfY29uZmlnIGFjdG1vbl9kZXZpY2VfY29uZmlnc1tdID0geworCXsKKwkJLyogTUNBTEwgKi8KKwkJLm9mZnNldCA9IDB4MWMwLAorCQkuaXJxX21hc2sgPSAxIDw8IDI2LAorCQkuYm9vc3RfdXBfY29lZmYgPSAyMDAsCisJCS5ib29zdF9kb3duX2NvZWZmID0gNTAsCisJCS5ib29zdF91cF90aHJlc2hvbGQgPSA2MCwKKwkJLmJvb3N0X2Rvd25fdGhyZXNob2xkID0gNDAsCisJfSwKKwl7CisJCS8qIE1DQ1BVICovCisJCS5vZmZzZXQgPSAweDIwMCwKKwkJLmlycV9tYXNrID0gMSA8PCAyNSwKKwkJLmJvb3N0X3VwX2NvZWZmID0gODAwLAorCQkuYm9vc3RfZG93bl9jb2VmZiA9IDkwLAorCQkuYm9vc3RfdXBfdGhyZXNob2xkID0gMjcsCisJCS5ib29zdF9kb3duX3RocmVzaG9sZCA9IDEwLAorCQkuYXZnX2RlcGVuZGVuY3lfdGhyZXNob2xkID0gNTAwMDAsCisJfSwKK307CisKKy8qKgorICogc3RydWN0IHRlZ3JhX2RldmZyZXFfZGV2aWNlIC0gc3RhdGUgc3BlY2lmaWMgdG8gYW4gQUNUTU9OIGRldmljZQorICoKKyAqIEZyZXF1ZW5jaWVzIGFyZSBpbiBrSHouCisgKi8KK3N0cnVjdCB0ZWdyYV9kZXZmcmVxX2RldmljZSB7CisJY29uc3Qgc3RydWN0IHRlZ3JhX2RldmZyZXFfZGV2aWNlX2NvbmZpZyAqY29uZmlnOworCisJdm9pZCBfX2lvbWVtCSpyZWdzOworCXUzMgkJYXZnX2JhbmRfZnJlcTsKKwl1MzIJCWF2Z19jb3VudDsKKworCXVuc2lnbmVkIGxvbmcJdGFyZ2V0X2ZyZXE7CisJdW5zaWduZWQgbG9uZwlib29zdF9mcmVxOworfTsKKworc3RydWN0IHRlZ3JhX2RldmZyZXEgeworCXN0cnVjdCBkZXZmcmVxCQkqZGV2ZnJlcTsKKworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CisJc3RydWN0IHJlc2V0X2NvbnRyb2wJKnJlc2V0OworCXN0cnVjdCBjbGsJCSpjbG9jazsKKwl2b2lkIF9faW9tZW0JCSpyZWdzOworCisJc3BpbmxvY2tfdAkJbG9jazsKKworCXN0cnVjdCBjbGsJCSplbWNfY2xvY2s7CisJdW5zaWduZWQgbG9uZwkJbWF4X2ZyZXE7CisJdW5zaWduZWQgbG9uZwkJY3VyX2ZyZXE7CisJc3RydWN0IG5vdGlmaWVyX2Jsb2NrCXJhdGVfY2hhbmdlX25iOworCisJc3RydWN0IHRlZ3JhX2RldmZyZXFfZGV2aWNlIGRldmljZXNbQVJSQVlfU0laRShhY3Rtb25fZGV2aWNlX2NvbmZpZ3MpXTsKK307CisKK3N0cnVjdCB0ZWdyYV9hY3Rtb25fZW1jX3JhdGlvIHsKKwl1bnNpZ25lZCBsb25nIGNwdV9mcmVxOworCXVuc2lnbmVkIGxvbmcgZW1jX2ZyZXE7Cit9OworCitzdGF0aWMgc3RydWN0IHRlZ3JhX2FjdG1vbl9lbWNfcmF0aW8gYWN0bW9uX2VtY19yYXRpb3NbXSA9IHsKKwl7IDE0MDAwMDAsIFVMT05HX01BWCB9LAorCXsgMTIwMDAwMCwgICAgNzUwMDAwIH0sCisJeyAxMTAwMDAwLCAgICA2MDAwMDAgfSwKKwl7IDEwMDAwMDAsICAgIDUwMDAwMCB9LAorCXsgIDgwMDAwMCwgICAgMzc1MDAwIH0sCisJeyAgNTAwMDAwLCAgICAyMDAwMDAgfSwKKwl7ICAyNTAwMDAsICAgIDEwMDAwMCB9LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fcGVyY2VudCh1bnNpZ25lZCBsb25nIHZhbCwgdW5zaWduZWQgaW50IHBjdCkKK3sKKwlyZXR1cm4gdmFsICogcGN0IC8gMTAwOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9kZXZmcmVxX3VwZGF0ZV9hdmdfd21hcmsoc3RydWN0IHRlZ3JhX2RldmZyZXFfZGV2aWNlICpkZXYpCit7CisJdTMyIGF2ZyA9IGRldi0+YXZnX2NvdW50OworCXUzMiBiYW5kID0gZGV2LT5hdmdfYmFuZF9mcmVxICogQUNUTU9OX1NBTVBMSU5HX1BFUklPRDsKKworCXdyaXRlbChhdmcgKyBiYW5kLCBkZXYtPnJlZ3MgKyBBQ1RNT05fREVWX0FWR19VUFBFUl9XTUFSSyk7CisJYXZnID0gbWF4KGF2ZywgYmFuZCk7CisJd3JpdGVsKGF2ZyAtIGJhbmQsIGRldi0+cmVncyArIEFDVE1PTl9ERVZfQVZHX0xPV0VSX1dNQVJLKTsKK30KKworc3RhdGljIHZvaWQgdGVncmFfZGV2ZnJlcV91cGRhdGVfd21hcmsoc3RydWN0IHRlZ3JhX2RldmZyZXEgKnRlZ3JhLAorCQkJCSAgICAgICBzdHJ1Y3QgdGVncmFfZGV2ZnJlcV9kZXZpY2UgKmRldikKK3sKKwl1MzIgdmFsID0gdGVncmEtPmN1cl9mcmVxICogQUNUTU9OX1NBTVBMSU5HX1BFUklPRDsKKworCXdyaXRlbChkb19wZXJjZW50KHZhbCwgZGV2LT5jb25maWctPmJvb3N0X3VwX3RocmVzaG9sZCksCisJICAgICAgIGRldi0+cmVncyArIEFDVE1PTl9ERVZfVVBQRVJfV01BUkspOworCisJd3JpdGVsKGRvX3BlcmNlbnQodmFsLCBkZXYtPmNvbmZpZy0+Ym9vc3RfZG93bl90aHJlc2hvbGQpLAorCSAgICAgICBkZXYtPnJlZ3MgKyBBQ1RNT05fREVWX0xPV0VSX1dNQVJLKTsKK30KKworc3RhdGljIHZvaWQgYWN0bW9uX3dyaXRlX2JhcnJpZXIoc3RydWN0IHRlZ3JhX2RldmZyZXEgKnRlZ3JhKQoreworCS8qIGVuc3VyZSB0aGUgdXBkYXRlIGhhcyByZWFjaGVkIHRoZSBBQ1RNT04gKi8KKwl3bWIoKTsKKwlyZWFkbCh0ZWdyYS0+cmVncyArIEFDVE1PTl9HTEJfU1RBVFVTKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGFjdG1vbl9pc3IoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdGVncmFfZGV2ZnJlcSAqdGVncmEgPSBkYXRhOworCXN0cnVjdCB0ZWdyYV9kZXZmcmVxX2RldmljZSAqZGV2ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisJdW5zaWduZWQgaW50IGk7CisKKwl2YWwgPSByZWFkbCh0ZWdyYS0+cmVncyArIEFDVE1PTl9HTEJfU1RBVFVTKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRlZ3JhLT5kZXZpY2VzKTsgaSsrKSB7CisJCWlmICh2YWwgJiB0ZWdyYS0+ZGV2aWNlc1tpXS5jb25maWctPmlycV9tYXNrKSB7CisJCQlkZXYgPSB0ZWdyYS0+ZGV2aWNlcyArIGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZGV2KQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdGVncmEtPmxvY2ssIGZsYWdzKTsKKworCWRldi0+YXZnX2NvdW50ID0gcmVhZGwoZGV2LT5yZWdzICsgQUNUTU9OX0RFVl9BVkdfQ09VTlQpOworCXRlZ3JhX2RldmZyZXFfdXBkYXRlX2F2Z193bWFyayhkZXYpOworCisJdmFsID0gcmVhZGwoZGV2LT5yZWdzICsgQUNUTU9OX0RFVl9JTlRSX1NUQVRVUyk7CisJaWYgKHZhbCAmIEFDVE1PTl9ERVZfSU5UUl9DT05TRUNVVElWRV9VUFBFUikgeworCQl2YWwgPSByZWFkbChkZXYtPnJlZ3MgKyBBQ1RNT05fREVWX0NUUkwpIHwKKwkJCUFDVE1PTl9ERVZfQ1RSTF9DT05TRUNVVElWRV9BQk9WRV9XTUFSS19FTiB8CisJCQlBQ1RNT05fREVWX0NUUkxfQ09OU0VDVVRJVkVfQkVMT1dfV01BUktfRU47CisKKwkJLyoKKwkJICogbmV3X2Jvb3N0ID0gbWluKG9sZF9ib29zdCAqIHVwX2NvZWYgKyBzdGVwLCBtYXhfZnJlcSkKKwkJICovCisJCWRldi0+Ym9vc3RfZnJlcSA9IGRvX3BlcmNlbnQoZGV2LT5ib29zdF9mcmVxLAorCQkJCQkgICAgIGRldi0+Y29uZmlnLT5ib29zdF91cF9jb2VmZik7CisJCWRldi0+Ym9vc3RfZnJlcSArPSBBQ1RNT05fQk9PU1RfRlJFUV9TVEVQOworCQlpZiAoZGV2LT5ib29zdF9mcmVxID49IHRlZ3JhLT5tYXhfZnJlcSkgeworCQkJZGV2LT5ib29zdF9mcmVxID0gdGVncmEtPm1heF9mcmVxOworCQkJdmFsICY9IH5BQ1RNT05fREVWX0NUUkxfQ09OU0VDVVRJVkVfQUJPVkVfV01BUktfRU47CisJCX0KKwkJd3JpdGVsKHZhbCwgZGV2LT5yZWdzICsgQUNUTU9OX0RFVl9DVFJMKTsKKwl9IGVsc2UgaWYgKHZhbCAmIEFDVE1PTl9ERVZfSU5UUl9DT05TRUNVVElWRV9MT1dFUikgeworCQl2YWwgPSByZWFkbChkZXYtPnJlZ3MgKyBBQ1RNT05fREVWX0NUUkwpIHwKKwkJCUFDVE1PTl9ERVZfQ1RSTF9DT05TRUNVVElWRV9BQk9WRV9XTUFSS19FTiB8CisJCQlBQ1RNT05fREVWX0NUUkxfQ09OU0VDVVRJVkVfQkVMT1dfV01BUktfRU47CisKKwkJLyoKKwkJICogbmV3X2Jvb3N0ID0gb2xkX2Jvb3N0ICogZG93bl9jb2VmCisJCSAqIG9yIDAgaWYgKG9sZF9ib29zdCAqIGRvd25fY29lZiA8IHN0ZXAgLyAyKQorCQkgKi8KKwkJZGV2LT5ib29zdF9mcmVxID0gZG9fcGVyY2VudChkZXYtPmJvb3N0X2ZyZXEsCisJCQkJCSAgICAgZGV2LT5jb25maWctPmJvb3N0X2Rvd25fY29lZmYpOworCQlpZiAoZGV2LT5ib29zdF9mcmVxIDwgKEFDVE1PTl9CT09TVF9GUkVRX1NURVAgPj4gMSkpIHsKKwkJCWRldi0+Ym9vc3RfZnJlcSA9IDA7CisJCQl2YWwgJj0gfkFDVE1PTl9ERVZfQ1RSTF9DT05TRUNVVElWRV9CRUxPV19XTUFSS19FTjsKKwkJfQorCQl3cml0ZWwodmFsLCBkZXYtPnJlZ3MgKyBBQ1RNT05fREVWX0NUUkwpOworCX0KKworCWlmIChkZXYtPmNvbmZpZy0+YXZnX2RlcGVuZGVuY3lfdGhyZXNob2xkKSB7CisJCXZhbCA9IHJlYWRsKGRldi0+cmVncyArIEFDVE1PTl9ERVZfQ1RSTCk7CisJCWlmIChkZXYtPmF2Z19jb3VudCA+PSBkZXYtPmNvbmZpZy0+YXZnX2RlcGVuZGVuY3lfdGhyZXNob2xkKQorCQkJdmFsIHw9IEFDVE1PTl9ERVZfQ1RSTF9DT05TRUNVVElWRV9CRUxPV19XTUFSS19FTjsKKwkJZWxzZSBpZiAoZGV2LT5ib29zdF9mcmVxID09IDApCisJCQl2YWwgJj0gfkFDVE1PTl9ERVZfQ1RSTF9DT05TRUNVVElWRV9CRUxPV19XTUFSS19FTjsKKwkJd3JpdGVsKHZhbCwgZGV2LT5yZWdzICsgQUNUTU9OX0RFVl9DVFJMKTsKKwl9CisKKwl3cml0ZWwoQUNUTU9OX0lOVFJfU1RBVFVTX0NMRUFSLCBkZXYtPnJlZ3MgKyBBQ1RNT05fREVWX0lOVFJfU1RBVFVTKTsKKworCWFjdG1vbl93cml0ZV9iYXJyaWVyKHRlZ3JhKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRlZ3JhLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gSVJRX1dBS0VfVEhSRUFEOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhY3Rtb25fY3B1X3RvX2VtY19yYXRlKHN0cnVjdCB0ZWdyYV9kZXZmcmVxICp0ZWdyYSwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgY3B1X2ZyZXEpCit7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHRlZ3JhX2FjdG1vbl9lbWNfcmF0aW8gKnJhdGlvID0gYWN0bW9uX2VtY19yYXRpb3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhY3Rtb25fZW1jX3JhdGlvcyk7IGkrKywgcmF0aW8rKykgeworCQlpZiAoY3B1X2ZyZXEgPj0gcmF0aW8tPmNwdV9mcmVxKSB7CisJCQlpZiAocmF0aW8tPmVtY19mcmVxID49IHRlZ3JhLT5tYXhfZnJlcSkKKwkJCQlyZXR1cm4gdGVncmEtPm1heF9mcmVxOworCQkJZWxzZQorCQkJCXJldHVybiByYXRpby0+ZW1jX2ZyZXE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWN0bW9uX3VwZGF0ZV90YXJnZXQoc3RydWN0IHRlZ3JhX2RldmZyZXEgKnRlZ3JhLAorCQkJCSBzdHJ1Y3QgdGVncmFfZGV2ZnJlcV9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGNwdV9mcmVxID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXRpY19jcHVfZW1jX2ZyZXEgPSAwOworCXVuc2lnbmVkIGludCBhdmdfc3VzdGFpbl9jb2VmOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZGV2LT5jb25maWctPmF2Z19kZXBlbmRlbmN5X3RocmVzaG9sZCkgeworCQljcHVfZnJlcSA9IGNwdWZyZXFfZ2V0KDApOworCQlzdGF0aWNfY3B1X2VtY19mcmVxID0gYWN0bW9uX2NwdV90b19lbWNfcmF0ZSh0ZWdyYSwgY3B1X2ZyZXEpOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0ZWdyYS0+bG9jaywgZmxhZ3MpOworCisJZGV2LT50YXJnZXRfZnJlcSA9IGRldi0+YXZnX2NvdW50IC8gQUNUTU9OX1NBTVBMSU5HX1BFUklPRDsKKwlhdmdfc3VzdGFpbl9jb2VmID0gMTAwICogMTAwIC8gZGV2LT5jb25maWctPmJvb3N0X3VwX3RocmVzaG9sZDsKKwlkZXYtPnRhcmdldF9mcmVxID0gZG9fcGVyY2VudChkZXYtPnRhcmdldF9mcmVxLCBhdmdfc3VzdGFpbl9jb2VmKTsKKwlkZXYtPnRhcmdldF9mcmVxICs9IGRldi0+Ym9vc3RfZnJlcTsKKworCWlmIChkZXYtPmF2Z19jb3VudCA+PSBkZXYtPmNvbmZpZy0+YXZnX2RlcGVuZGVuY3lfdGhyZXNob2xkKQorCQlkZXYtPnRhcmdldF9mcmVxID0gbWF4KGRldi0+dGFyZ2V0X2ZyZXEsIHN0YXRpY19jcHVfZW1jX2ZyZXEpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGVncmEtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IGFjdG1vbl90aHJlYWRfaXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHRlZ3JhX2RldmZyZXEgKnRlZ3JhID0gZGF0YTsKKworCW11dGV4X2xvY2soJnRlZ3JhLT5kZXZmcmVxLT5sb2NrKTsKKwl1cGRhdGVfZGV2ZnJlcSh0ZWdyYS0+ZGV2ZnJlcSk7CisJbXV0ZXhfdW5sb2NrKCZ0ZWdyYS0+ZGV2ZnJlcS0+bG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfYWN0bW9uX3JhdGVfbm90aWZ5X2NiKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpwdHIpCit7CisJc3RydWN0IGNsa19ub3RpZmllcl9kYXRhICpkYXRhID0gcHRyOworCXN0cnVjdCB0ZWdyYV9kZXZmcmVxICp0ZWdyYSA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IHRlZ3JhX2RldmZyZXEsCisJCQkJCQkgICByYXRlX2NoYW5nZV9uYik7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0ZWdyYS0+bG9jaywgZmxhZ3MpOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIFBPU1RfUkFURV9DSEFOR0U6CisJCXRlZ3JhLT5jdXJfZnJlcSA9IGRhdGEtPm5ld19yYXRlIC8gS0haOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRlZ3JhLT5kZXZpY2VzKTsgaSsrKQorCQkJdGVncmFfZGV2ZnJlcV91cGRhdGVfd21hcmsodGVncmEsIHRlZ3JhLT5kZXZpY2VzICsgaSk7CisKKwkJYWN0bW9uX3dyaXRlX2JhcnJpZXIodGVncmEpOworCQlicmVhazsKKwljYXNlIFBSRV9SQVRFX0NIQU5HRToKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBBQk9SVF9SQVRFX0NIQU5HRToKKwkJYnJlYWs7CisJfTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRlZ3JhLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9hY3Rtb25fY29uZmlndXJlX2RldmljZShzdHJ1Y3QgdGVncmFfZGV2ZnJlcSAqdGVncmEsCisJCQkJCSAgc3RydWN0IHRlZ3JhX2RldmZyZXFfZGV2aWNlICpkZXYpCit7CisJdTMyIHZhbDsKKworCWRldi0+YXZnX2JhbmRfZnJlcSA9IHRlZ3JhLT5tYXhfZnJlcSAqIEFDVE1PTl9ERUZBVUxUX0FWR19CQU5EIC8gS0haOworCWRldi0+dGFyZ2V0X2ZyZXEgPSB0ZWdyYS0+Y3VyX2ZyZXE7CisKKwlkZXYtPmF2Z19jb3VudCA9IHRlZ3JhLT5jdXJfZnJlcSAqIEFDVE1PTl9TQU1QTElOR19QRVJJT0Q7CisJd3JpdGVsKGRldi0+YXZnX2NvdW50LCBkZXYtPnJlZ3MgKyBBQ1RNT05fREVWX0lOSVRfQVZHKTsKKworCXRlZ3JhX2RldmZyZXFfdXBkYXRlX2F2Z193bWFyayhkZXYpOworCXRlZ3JhX2RldmZyZXFfdXBkYXRlX3dtYXJrKHRlZ3JhLCBkZXYpOworCisJd3JpdGVsKEFDVE1PTl9DT1VOVF9XRUlHSFQsIGRldi0+cmVncyArIEFDVE1PTl9ERVZfQ09VTlRfV0VJR0hUKTsKKwl3cml0ZWwoQUNUTU9OX0lOVFJfU1RBVFVTX0NMRUFSLCBkZXYtPnJlZ3MgKyBBQ1RNT05fREVWX0lOVFJfU1RBVFVTKTsKKworCXZhbCA9IDA7CisJdmFsIHw9IEFDVE1PTl9ERVZfQ1RSTF9FTkJfUEVSSU9ESUMgfAorCSAgICAgICBBQ1RNT05fREVWX0NUUkxfQVZHX0FCT1ZFX1dNQVJLX0VOIHwKKwkgICAgICAgQUNUTU9OX0RFVl9DVFJMX0FWR19CRUxPV19XTUFSS19FTjsKKwl2YWwgfD0gKEFDVE1PTl9BVkVSQUdFX1dJTkRPV19MT0cyIC0gMSkKKwkJPDwgQUNUTU9OX0RFVl9DVFJMX0tfVkFMX1NISUZUOworCXZhbCB8PSAoQUNUTU9OX0JFTE9XX1dNQVJLX1dJTkRPVyAtIDEpCisJCTw8IEFDVE1PTl9ERVZfQ1RSTF9DT05TRUNVVElWRV9CRUxPV19XTUFSS19OVU1fU0hJRlQ7CisJdmFsIHw9IChBQ1RNT05fQUJPVkVfV01BUktfV0lORE9XIC0gMSkKKwkJPDwgQUNUTU9OX0RFVl9DVFJMX0NPTlNFQ1VUSVZFX0FCT1ZFX1dNQVJLX05VTV9TSElGVDsKKwl2YWwgfD0gQUNUTU9OX0RFVl9DVFJMX0NPTlNFQ1VUSVZFX0JFTE9XX1dNQVJLX0VOIHwKKwkgICAgICAgQUNUTU9OX0RFVl9DVFJMX0NPTlNFQ1VUSVZFX0FCT1ZFX1dNQVJLX0VOOworCisJd3JpdGVsKHZhbCwgZGV2LT5yZWdzICsgQUNUTU9OX0RFVl9DVFJMKTsKKworCWFjdG1vbl93cml0ZV9iYXJyaWVyKHRlZ3JhKTsKKworCXZhbCA9IHJlYWRsKGRldi0+cmVncyArIEFDVE1PTl9ERVZfQ1RSTCk7CisJdmFsIHw9IEFDVE1PTl9ERVZfQ1RSTF9FTkI7CisJd3JpdGVsKHZhbCwgZGV2LT5yZWdzICsgQUNUTU9OX0RFVl9DVFJMKTsKKworCWFjdG1vbl93cml0ZV9iYXJyaWVyKHRlZ3JhKTsKK30KKworc3RhdGljIGludCB0ZWdyYV9kZXZmcmVxX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHRlZ3JhX2RldmZyZXEgKnRlZ3JhOworCXN0cnVjdCB0ZWdyYV9kZXZmcmVxX2RldmljZSAqYWN0bW9uX2RldjsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgdmFsOworCisJcGRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldik7CisJdGVncmEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRlZ3JhLT5kZXZpY2VzKTsgaSsrKSB7CisJCWFjdG1vbl9kZXYgPSAmdGVncmEtPmRldmljZXNbaV07CisKKwkJdmFsID0gcmVhZGwoYWN0bW9uX2Rldi0+cmVncyArIEFDVE1PTl9ERVZfQ1RSTCk7CisJCXZhbCAmPSB+QUNUTU9OX0RFVl9DVFJMX0VOQjsKKwkJd3JpdGVsKHZhbCwgYWN0bW9uX2Rldi0+cmVncyArIEFDVE1PTl9ERVZfQ1RSTCk7CisKKwkJd3JpdGVsKEFDVE1PTl9JTlRSX1NUQVRVU19DTEVBUiwKKwkJICAgICAgIGFjdG1vbl9kZXYtPnJlZ3MgKyBBQ1RNT05fREVWX0lOVFJfU1RBVFVTKTsKKworCQlhY3Rtb25fd3JpdGVfYmFycmllcih0ZWdyYSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfZGV2ZnJlcV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHRlZ3JhX2RldmZyZXEgKnRlZ3JhOworCXN0cnVjdCB0ZWdyYV9kZXZmcmVxX2RldmljZSAqYWN0bW9uX2RldjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCXRlZ3JhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0ZWdyYS0+ZGV2aWNlcyk7IGkrKykgeworCQlhY3Rtb25fZGV2ID0gJnRlZ3JhLT5kZXZpY2VzW2ldOworCisJCXRlZ3JhX2FjdG1vbl9jb25maWd1cmVfZGV2aWNlKHRlZ3JhLCBhY3Rtb25fZGV2KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9kZXZmcmVxX3RhcmdldChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgKmZyZXEsCisJCQkJdTMyIGZsYWdzKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHRlZ3JhX2RldmZyZXEgKnRlZ3JhOworCXN0cnVjdCBkZXZfcG1fb3BwICpvcHA7CisJdW5zaWduZWQgbG9uZyByYXRlID0gKmZyZXEgKiBLSFo7CisKKwlwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKKwl0ZWdyYSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmN1X3JlYWRfbG9jaygpOworCW9wcCA9IGRldmZyZXFfcmVjb21tZW5kZWRfb3BwKGRldiwgJnJhdGUsIGZsYWdzKTsKKwlpZiAoSVNfRVJSKG9wcCkpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGZpbmQgb3BwIGZvciAlbHUgS0h6XG4iLCAqZnJlcSk7CisJCXJldHVybiBQVFJfRVJSKG9wcCk7CisJfQorCXJhdGUgPSBkZXZfcG1fb3BwX2dldF9mcmVxKG9wcCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkvKiBUT0RPOiBPbmNlIHdlIGhhdmUgcGVyLXVzZXIgY2xrIGNvbnN0cmFpbnRzLCBzZXQgYSBmbG9vciAqLworCWNsa19zZXRfcmF0ZSh0ZWdyYS0+ZW1jX2Nsb2NrLCByYXRlKTsKKworCS8qIFRPRE86IFNldCB2b2x0YWdlIGFzIHdlbGwgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlZ3JhX2RldmZyZXFfZ2V0X2Rldl9zdGF0dXMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2ZnJlcV9kZXZfc3RhdHVzICpzdGF0KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHRlZ3JhX2RldmZyZXEgKnRlZ3JhOworCXN0cnVjdCB0ZWdyYV9kZXZmcmVxX2RldmljZSAqYWN0bW9uX2RldjsKKworCXBkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCXRlZ3JhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlzdGF0LT5jdXJyZW50X2ZyZXF1ZW5jeSA9IHRlZ3JhLT5jdXJfZnJlcTsKKworCS8qIFRvIGJlIHVzZWQgYnkgdGhlIHRlZ3JhIGdvdmVybm9yICovCisJc3RhdC0+cHJpdmF0ZV9kYXRhID0gdGVncmE7CisKKwkvKiBUaGUgYmVsb3cgYXJlIHRvIGJlIHVzZWQgYnkgdGhlIG90aGVyIGdvdmVybm9ycyAqLworCisJYWN0bW9uX2RldiA9ICZ0ZWdyYS0+ZGV2aWNlc1tNQ0FMTF07CisKKwkvKiBOdW1iZXIgb2YgY3ljbGVzIHNwZW50IG9uIG1lbW9yeSBhY2Nlc3MgKi8KKwlzdGF0LT5idXN5X3RpbWUgPSBhY3Rtb25fZGV2LT5hdmdfY291bnQ7CisKKwkvKiBUaGUgYnVzIGNhbiBiZSBjb25zaWRlcmVkIHRvIGJlIHNhdHVyYXRlZCB3YXkgYmVmb3JlIDEwMCUgKi8KKwlzdGF0LT5idXN5X3RpbWUgKj0gMTAwIC8gQlVTX1NBVFVSQVRJT05fUkFUSU87CisKKwkvKiBOdW1iZXIgb2YgY3ljbGVzIGluIGEgc2FtcGxpbmcgcGVyaW9kICovCisJc3RhdC0+dG90YWxfdGltZSA9IEFDVE1PTl9TQU1QTElOR19QRVJJT0QgKiB0ZWdyYS0+Y3VyX2ZyZXE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9kZXZmcmVxX2dldF90YXJnZXQoc3RydWN0IGRldmZyZXEgKmRldmZyZXEsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKmZyZXEpCit7CisJc3RydWN0IGRldmZyZXFfZGV2X3N0YXR1cyBzdGF0OworCXN0cnVjdCB0ZWdyYV9kZXZmcmVxICp0ZWdyYTsKKwlzdHJ1Y3QgdGVncmFfZGV2ZnJlcV9kZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBsb25nIHRhcmdldF9mcmVxID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZXJyOworCisJZXJyID0gZGV2ZnJlcS0+cHJvZmlsZS0+Z2V0X2Rldl9zdGF0dXMoZGV2ZnJlcS0+ZGV2LnBhcmVudCwgJnN0YXQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl0ZWdyYSA9IHN0YXQucHJpdmF0ZV9kYXRhOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGVncmEtPmRldmljZXMpOyBpKyspIHsKKwkJZGV2ID0gJnRlZ3JhLT5kZXZpY2VzW2ldOworCisJCWFjdG1vbl91cGRhdGVfdGFyZ2V0KHRlZ3JhLCBkZXYpOworCisJCXRhcmdldF9mcmVxID0gbWF4KHRhcmdldF9mcmVxLCBkZXYtPnRhcmdldF9mcmVxKTsKKwl9CisKKwkqZnJlcSA9IHRhcmdldF9mcmVxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVncmFfZGV2ZnJlcV9ldmVudF9oYW5kbGVyKHN0cnVjdCBkZXZmcmVxICpkZXZmcmVxLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2ZnJlcV9nb3Zlcm5vciB0ZWdyYV9kZXZmcmVxX2dvdmVybm9yID0geworCS5uYW1lID0gInRlZ3JhIiwKKwkuZ2V0X3RhcmdldF9mcmVxID0gdGVncmFfZGV2ZnJlcV9nZXRfdGFyZ2V0LAorCS5ldmVudF9oYW5kbGVyID0gdGVncmFfZGV2ZnJlcV9ldmVudF9oYW5kbGVyLAorfTsKKworc3RhdGljIHN0cnVjdCBkZXZmcmVxX2Rldl9wcm9maWxlIHRlZ3JhX2RldmZyZXFfcHJvZmlsZSA9IHsKKwkucG9sbGluZ19tcwk9IDAsCisJLnRhcmdldAkJPSB0ZWdyYV9kZXZmcmVxX3RhcmdldCwKKwkuZ2V0X2Rldl9zdGF0dXMJPSB0ZWdyYV9kZXZmcmVxX2dldF9kZXZfc3RhdHVzLAorfTsKKworc3RhdGljIGludCB0ZWdyYV9kZXZmcmVxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHRlZ3JhX2RldmZyZXEgKnRlZ3JhOworCXN0cnVjdCB0ZWdyYV9kZXZmcmVxX2RldmljZSAqZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXVuc2lnbmVkIGxvbmcgbWF4X2ZyZXE7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGlycTsKKwlpbnQgZXJyOworCisJdGVncmEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCp0ZWdyYSksIEdGUF9LRVJORUwpOworCWlmICghdGVncmEpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJnRlZ3JhLT5sb2NrKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCByZWdzIHJlc291cmNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJdGVncmEtPnJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHRlZ3JhLT5yZWdzKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IElPIG1lbW9yeVxuIik7CisJCXJldHVybiBQVFJfRVJSKHRlZ3JhLT5yZWdzKTsKKwl9CisKKwl0ZWdyYS0+cmVzZXQgPSBkZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0KCZwZGV2LT5kZXYsICJhY3Rtb24iKTsKKwlpZiAoSVNfRVJSKHRlZ3JhLT5yZXNldCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCByZXNldFxuIik7CisJCXJldHVybiBQVFJfRVJSKHRlZ3JhLT5yZXNldCk7CisJfQorCisJdGVncmEtPmNsb2NrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJhY3Rtb24iKTsKKwlpZiAoSVNfRVJSKHRlZ3JhLT5jbG9jaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBhY3Rtb24gY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUih0ZWdyYS0+Y2xvY2spOworCX0KKworCXRlZ3JhLT5lbWNfY2xvY2sgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImVtYyIpOworCWlmIChJU19FUlIodGVncmEtPmVtY19jbG9jaykpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBlbWMgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUih0ZWdyYS0+ZW1jX2Nsb2NrKTsKKwl9CisKKwllcnIgPSBvZl9pbml0X29wcF90YWJsZSgmcGRldi0+ZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBpbml0IG9wZXJhdGluZyBwb2ludCB0YWJsZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJdGVncmEtPnJhdGVfY2hhbmdlX25iLm5vdGlmaWVyX2NhbGwgPSB0ZWdyYV9hY3Rtb25fcmF0ZV9ub3RpZnlfY2I7CisJZXJyID0gY2xrX25vdGlmaWVyX3JlZ2lzdGVyKHRlZ3JhLT5lbWNfY2xvY2ssICZ0ZWdyYS0+cmF0ZV9jaGFuZ2VfbmIpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byByZWdpc3RlciByYXRlIGNoYW5nZSBub3RpZmllclxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmVzZXRfY29udHJvbF9hc3NlcnQodGVncmEtPnJlc2V0KTsKKworCWVyciA9IGNsa19wcmVwYXJlX2VuYWJsZSh0ZWdyYS0+Y2xvY2spOworCWlmIChlcnIpIHsKKwkJcmVzZXRfY29udHJvbF9kZWFzc2VydCh0ZWdyYS0+cmVzZXQpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQodGVncmEtPnJlc2V0KTsKKworCW1heF9mcmVxID0gY2xrX3JvdW5kX3JhdGUodGVncmEtPmVtY19jbG9jaywgVUxPTkdfTUFYKTsKKwl0ZWdyYS0+bWF4X2ZyZXEgPSBtYXhfZnJlcSAvIEtIWjsKKworCWNsa19zZXRfcmF0ZSh0ZWdyYS0+ZW1jX2Nsb2NrLCBtYXhfZnJlcSk7CisKKwl0ZWdyYS0+Y3VyX2ZyZXEgPSBjbGtfZ2V0X3JhdGUodGVncmEtPmVtY19jbG9jaykgLyBLSFo7CisKKwl3cml0ZWwoQUNUTU9OX1NBTVBMSU5HX1BFUklPRCAtIDEsCisJICAgICAgIHRlZ3JhLT5yZWdzICsgQUNUTU9OX0dMQl9QRVJJT0RfQ1RSTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhY3Rtb25fZGV2aWNlX2NvbmZpZ3MpOyBpKyspIHsKKwkJZGV2ID0gdGVncmEtPmRldmljZXMgKyBpOworCQlkZXYtPmNvbmZpZyA9IGFjdG1vbl9kZXZpY2VfY29uZmlncyArIGk7CisJCWRldi0+cmVncyA9IHRlZ3JhLT5yZWdzICsgZGV2LT5jb25maWctPm9mZnNldDsKKworCQl0ZWdyYV9hY3Rtb25fY29uZmlndXJlX2RldmljZSh0ZWdyYSwgdGVncmEtPmRldmljZXMgKyBpKTsKKwl9CisKKwllcnIgPSBkZXZmcmVxX2FkZF9nb3Zlcm5vcigmdGVncmFfZGV2ZnJlcV9nb3Zlcm5vcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWRkIGdvdmVybm9yXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl0ZWdyYV9kZXZmcmVxX3Byb2ZpbGUuaW5pdGlhbF9mcmVxID0gY2xrX2dldF9yYXRlKHRlZ3JhLT5lbWNfY2xvY2spOworCXRlZ3JhLT5kZXZmcmVxID0gZGV2bV9kZXZmcmVxX2FkZF9kZXZpY2UoJnBkZXYtPmRldiwKKwkJCQkJCSAmdGVncmFfZGV2ZnJlcV9wcm9maWxlLAorCQkJCQkJICJ0ZWdyYSIsCisJCQkJCQkgTlVMTCk7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWVyciA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoJnBkZXYtPmRldiwgaXJxLCBhY3Rtb25faXNyLAorCQkJCQlhY3Rtb25fdGhyZWFkX2lzciwgSVJRRl9TSEFSRUQsCisJCQkJCSJ0ZWdyYS1kZXZmcmVxIiwgdGVncmEpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW50ZXJydXB0IHJlcXVlc3QgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB0ZWdyYSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9kZXZmcmVxX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0ZWdyYV9kZXZmcmVxICp0ZWdyYSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJY2xrX25vdGlmaWVyX3VucmVnaXN0ZXIodGVncmEtPmVtY19jbG9jaywgJnRlZ3JhLT5yYXRlX2NoYW5nZV9uYik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUodGVncmEtPmNsb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFModGVncmFfZGV2ZnJlcV9wbV9vcHMsCisJCQkgdGVncmFfZGV2ZnJlcV9zdXNwZW5kLAorCQkJIHRlZ3JhX2RldmZyZXFfcmVzdW1lKTsKKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgdGVncmFfZGV2ZnJlcV9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhMTI0LWFjdG1vbiIgfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0ZWdyYV9kZXZmcmVxX2RyaXZlciA9IHsKKwkucHJvYmUJPSB0ZWdyYV9kZXZmcmVxX3Byb2JlLAorCS5yZW1vdmUJPSB0ZWdyYV9kZXZmcmVxX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAidGVncmEtZGV2ZnJlcSIsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gdGVncmFfZGV2ZnJlcV9vZl9tYXRjaCwKKwkJLnBtCQk9ICZ0ZWdyYV9kZXZmcmVxX3BtX29wcywKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIodGVncmFfZGV2ZnJlcV9kcml2ZXIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRlZ3JhIGRldmZyZXEgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJUb21ldSBWaXpvc28gPHRvbWV1LnZpem9zb0Bjb2xsYWJvcmEuY29tPiIpOworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdGVncmFfZGV2ZnJlcV9vZl9tYXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9hY3BpLWRtYS5jIGIvZHJpdmVycy9kbWEvYWNwaS1kbWEuYwppbmRleCBkZTM2MWExLi41YTYzNTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9hY3BpLWRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2FjcGktZG1hLmMKQEAgLTQzLDcgKzQzLDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgYWNwaV9jc3J0X3NoYXJlZF9pbmZvICpzaTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlc291cmNlX2xpc3Q7Ci0Jc3RydWN0IHJlc291cmNlX2xpc3RfZW50cnkgKnJlbnRyeTsKKwlzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKnJlbnRyeTsKIAlyZXNvdXJjZV9zaXplX3QgbWVtID0gMCwgaXJxID0gMDsKIAlpbnQgcmV0OwogCkBAIC01NiwxMCArNTYsMTAgQEAKIAkJcmV0dXJuIDA7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlbnRyeSwgJnJlc291cmNlX2xpc3QsIG5vZGUpIHsKLQkJaWYgKHJlc291cmNlX3R5cGUoJnJlbnRyeS0+cmVzKSA9PSBJT1JFU09VUkNFX01FTSkKLQkJCW1lbSA9IHJlbnRyeS0+cmVzLnN0YXJ0OwotCQllbHNlIGlmIChyZXNvdXJjZV90eXBlKCZyZW50cnktPnJlcykgPT0gSU9SRVNPVVJDRV9JUlEpCi0JCQlpcnEgPSByZW50cnktPnJlcy5zdGFydDsKKwkJaWYgKHJlc291cmNlX3R5cGUocmVudHJ5LT5yZXMpID09IElPUkVTT1VSQ0VfTUVNKQorCQkJbWVtID0gcmVudHJ5LT5yZXMtPnN0YXJ0OworCQllbHNlIGlmIChyZXNvdXJjZV90eXBlKHJlbnRyeS0+cmVzKSA9PSBJT1JFU09VUkNFX0lSUSkKKwkJCWlycSA9IHJlbnRyeS0+cmVzLT5zdGFydDsKIAl9CiAKIAlhY3BpX2Rldl9mcmVlX3Jlc291cmNlX2xpc3QoJnJlc291cmNlX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL0tjb25maWcgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwppbmRleCA0OWMyNjUyLi5jYjU5NjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvS2NvbmZpZworKysgYi9kcml2ZXJzL2VkYWMvS2NvbmZpZwpAQCAtMzg1LDQgKzM4NSwxMSBAQAogCSAgcHJlbG9hZGVyIG11c3QgaW5pdGlhbGl6ZSB0aGUgU0RSQU0gYmVmb3JlIGxvYWRpbmcKIAkgIHRoZSBrZXJuZWwuCiAKK2NvbmZpZyBFREFDX1NZTk9QU1lTCisJdHJpc3RhdGUgIlN5bm9wc3lzIEREUiBNZW1vcnkgQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIEVEQUNfTU1fRURBQyAmJiBBUkNIX1pZTlEKKwloZWxwCisJICBTdXBwb3J0IGZvciBlcnJvciBkZXRlY3Rpb24gYW5kIGNvcnJlY3Rpb24gb24gdGhlIFN5bm9wc3lzIEREUgorCSAgbWVtb3J5IGNvbnRyb2xsZXIuCisKIGVuZGlmICMgRURBQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL01ha2VmaWxlIGIvZHJpdmVycy9lZGFjL01ha2VmaWxlCmluZGV4IGQ0MGM2OWEuLmIyNTVmMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2VkYWMvTWFrZWZpbGUKQEAgLTY3LDMgKzY3LDQgQEAKIG9iai0kKENPTkZJR19FREFDX09DVEVPTl9QQ0kpCQkrPSBvY3Rlb25fZWRhYy1wY2kubwogCiBvYmotJChDT05GSUdfRURBQ19BTFRFUkFfTUMpCQkrPSBhbHRlcmFfZWRhYy5vCitvYmotJChDT05GSUdfRURBQ19TWU5PUFNZUykJCSs9IHN5bm9wc3lzX2VkYWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2VkYWNfbWNfc3lzZnMuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jX3N5c2ZzLmMKaW5kZXggNjcwZDI4Mi4uYzg0ZWVjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfbWNfc3lzZnMuYworKysgYi9kcml2ZXJzL2VkYWMvZWRhY19tY19zeXNmcy5jCkBAIC0xNTcsNyArMTU3LDcgQEAKIH07CiAKICNkZWZpbmUgREVWSUNFX0NIQU5ORUwoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlLCBfdmFyKSBcCi0Jc3RydWN0IGRldl9jaF9hdHRyaWJ1dGUgZGV2X2F0dHJfbGVnYWN5XyMjX25hbWUgPSBcCisJc3RhdGljIHN0cnVjdCBkZXZfY2hfYXR0cmlidXRlIGRldl9hdHRyX2xlZ2FjeV8jI19uYW1lID0gXAogCQl7IF9fQVRUUihfbmFtZSwgX21vZGUsIF9zaG93LCBfc3RvcmUpLCAoX3ZhcikgfQogCiAjZGVmaW5lIHRvX2NoYW5uZWwoaykgKGNvbnRhaW5lcl9vZihrLCBzdHJ1Y3QgZGV2X2NoX2F0dHJpYnV0ZSwgYXR0ciktPmNoYW5uZWwpCkBAIC04NTAsMjAgKzg1MCwyMCBAQAogI2VuZGlmCiAKIC8qIGRlZmF1bHQgQ29udHJvbCBmaWxlICovCi1ERVZJQ0VfQVRUUihyZXNldF9jb3VudGVycywgU19JV1VTUiwgTlVMTCwgbWNpX3Jlc2V0X2NvdW50ZXJzX3N0b3JlKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXNldF9jb3VudGVycywgU19JV1VTUiwgTlVMTCwgbWNpX3Jlc2V0X2NvdW50ZXJzX3N0b3JlKTsKIAogLyogZGVmYXVsdCBBdHRyaWJ1dGUgZmlsZXMgKi8KLURFVklDRV9BVFRSKG1jX25hbWUsIFNfSVJVR08sIG1jaV9jdGxfbmFtZV9zaG93LCBOVUxMKTsKLURFVklDRV9BVFRSKHNpemVfbWIsIFNfSVJVR08sIG1jaV9zaXplX21iX3Nob3csIE5VTEwpOwotREVWSUNFX0FUVFIoc2Vjb25kc19zaW5jZV9yZXNldCwgU19JUlVHTywgbWNpX3NlY29uZHNfc2hvdywgTlVMTCk7Ci1ERVZJQ0VfQVRUUih1ZV9ub2luZm9fY291bnQsIFNfSVJVR08sIG1jaV91ZV9ub2luZm9fc2hvdywgTlVMTCk7Ci1ERVZJQ0VfQVRUUihjZV9ub2luZm9fY291bnQsIFNfSVJVR08sIG1jaV9jZV9ub2luZm9fc2hvdywgTlVMTCk7Ci1ERVZJQ0VfQVRUUih1ZV9jb3VudCwgU19JUlVHTywgbWNpX3VlX2NvdW50X3Nob3csIE5VTEwpOwotREVWSUNFX0FUVFIoY2VfY291bnQsIFNfSVJVR08sIG1jaV9jZV9jb3VudF9zaG93LCBOVUxMKTsKLURFVklDRV9BVFRSKG1heF9sb2NhdGlvbiwgU19JUlVHTywgbWNpX21heF9sb2NhdGlvbl9zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihtY19uYW1lLCBTX0lSVUdPLCBtY2lfY3RsX25hbWVfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoc2l6ZV9tYiwgU19JUlVHTywgbWNpX3NpemVfbWJfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoc2Vjb25kc19zaW5jZV9yZXNldCwgU19JUlVHTywgbWNpX3NlY29uZHNfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIodWVfbm9pbmZvX2NvdW50LCBTX0lSVUdPLCBtY2lfdWVfbm9pbmZvX3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGNlX25vaW5mb19jb3VudCwgU19JUlVHTywgbWNpX2NlX25vaW5mb19zaG93LCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUih1ZV9jb3VudCwgU19JUlVHTywgbWNpX3VlX2NvdW50X3Nob3csIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGNlX2NvdW50LCBTX0lSVUdPLCBtY2lfY2VfY291bnRfc2hvdywgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIobWF4X2xvY2F0aW9uLCBTX0lSVUdPLCBtY2lfbWF4X2xvY2F0aW9uX3Nob3csIE5VTEwpOwogCiAvKiBtZW1vcnkgc2NydWJiZXIgYXR0cmlidXRlIGZpbGUgKi8KLURFVklDRV9BVFRSKHNkcmFtX3NjcnViX3JhdGUsIDAsIE5VTEwsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHNkcmFtX3NjcnViX3JhdGUsIDAsIE5VTEwsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWNpX2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX3Jlc2V0X2NvdW50ZXJzLmF0dHIsCkBAIC05ODksNyArOTg5LDcgQEAKIAogCWVyciA9IGJ1c19yZWdpc3RlcihtY2ktPmJ1cyk7CiAJaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJCWdvdG8gZmFpbF9mcmVlX25hbWU7CiAKIAkvKiBnZXQgdGhlIC9zeXMvZGV2aWNlcy9zeXN0ZW0vZWRhYyBzdWJzeXMgcmVmZXJlbmNlICovCiAJbWNpLT5kZXYudHlwZSA9ICZtY2lfYXR0cl90eXBlOwpAQCAtMTAwNSw5ICsxMDA1LDcgQEAKIAllcnIgPSBkZXZpY2VfYWRkKCZtY2ktPmRldik7CiAJaWYgKGVyciA8IDApIHsKIAkJZWRhY19kYmcoMSwgImZhaWx1cmU6IGNyZWF0ZSBkZXZpY2UgJXNcbiIsIGRldl9uYW1lKCZtY2ktPmRldikpOwotCQlidXNfdW5yZWdpc3RlcihtY2ktPmJ1cyk7Ci0JCWtmcmVlKG1jaS0+YnVzLT5uYW1lKTsKLQkJcmV0dXJuIGVycjsKKwkJZ290byBmYWlsX3VucmVnaXN0ZXJfYnVzOwogCX0KIAogCWlmIChtY2ktPnNldF9zZHJhbV9zY3J1Yl9yYXRlIHx8IG1jaS0+Z2V0X3NkcmFtX3NjcnViX3JhdGUpIHsKQEAgLTEwMTUsMTUgKzEwMTMsMTYgQEAKIAkJCWRldl9hdHRyX3NkcmFtX3NjcnViX3JhdGUuYXR0ci5tb2RlIHw9IFNfSVJVR087CiAJCQlkZXZfYXR0cl9zZHJhbV9zY3J1Yl9yYXRlLnNob3cgPSAmbWNpX3NkcmFtX3NjcnViX3JhdGVfc2hvdzsKIAkJfQorCiAJCWlmIChtY2ktPnNldF9zZHJhbV9zY3J1Yl9yYXRlKSB7CiAJCQlkZXZfYXR0cl9zZHJhbV9zY3J1Yl9yYXRlLmF0dHIubW9kZSB8PSBTX0lXVVNSOwogCQkJZGV2X2F0dHJfc2RyYW1fc2NydWJfcmF0ZS5zdG9yZSA9ICZtY2lfc2RyYW1fc2NydWJfcmF0ZV9zdG9yZTsKIAkJfQotCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm1jaS0+ZGV2LAotCQkJCQkgJmRldl9hdHRyX3NkcmFtX3NjcnViX3JhdGUpOworCisJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbWNpLT5kZXYsICZkZXZfYXR0cl9zZHJhbV9zY3J1Yl9yYXRlKTsKIAkJaWYgKGVycikgewogCQkJZWRhY19kYmcoMSwgImZhaWx1cmU6IGNyZWF0ZSBzZHJhbV9zY3J1Yl9yYXRlXG4iKTsKLQkJCWdvdG8gZmFpbDI7CisJCQlnb3RvIGZhaWxfdW5yZWdpc3Rlcl9kZXY7CiAJCX0KIAl9CiAJLyoKQEAgLTEwMzIsOCArMTAzMSw5IEBACiAJZm9yIChpID0gMDsgaSA8IG1jaS0+dG90X2RpbW1zOyBpKyspIHsKIAkJc3RydWN0IGRpbW1faW5mbyAqZGltbSA9IG1jaS0+ZGltbXNbaV07CiAJCS8qIE9ubHkgZXhwb3NlIHBvcHVsYXRlZCBESU1NcyAqLwotCQlpZiAoZGltbS0+bnJfcGFnZXMgPT0gMCkKKwkJaWYgKCFkaW1tLT5ucl9wYWdlcykKIAkJCWNvbnRpbnVlOworCiAjaWZkZWYgQ09ORklHX0VEQUNfREVCVUcKIAkJZWRhY19kYmcoMSwgImNyZWF0aW5nIGRpbW0lZCwgbG9jYXRlZCBhdCAiLCBpKTsKIAkJaWYgKGVkYWNfZGVidWdfbGV2ZWwgPj0gMSkgewpAQCAtMTA0OCwxNCArMTA0OCwxNCBAQAogCQllcnIgPSBlZGFjX2NyZWF0ZV9kaW1tX29iamVjdChtY2ksIGRpbW0sIGkpOwogCQlpZiAoZXJyKSB7CiAJCQllZGFjX2RiZygxLCAiZmFpbHVyZTogY3JlYXRlIGRpbW0gJWQgb2JqXG4iLCBpKTsKLQkJCWdvdG8gZmFpbDsKKwkJCWdvdG8gZmFpbF91bnJlZ2lzdGVyX2RpbW07CiAJCX0KIAl9CiAKICNpZmRlZiBDT05GSUdfRURBQ19MRUdBQ1lfU1lTRlMKIAllcnIgPSBlZGFjX2NyZWF0ZV9jc3Jvd19vYmplY3RzKG1jaSk7CiAJaWYgKGVyciA8IDApCi0JCWdvdG8gZmFpbDsKKwkJZ290byBmYWlsX3VucmVnaXN0ZXJfZGltbTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0VEQUNfREVCVUcKQEAgLTEwNjMsMTYgKzEwNjMsMTkgQEAKICNlbmRpZgogCXJldHVybiAwOwogCi1mYWlsOgorZmFpbF91bnJlZ2lzdGVyX2RpbW06CiAJZm9yIChpLS07IGkgPj0gMDsgaS0tKSB7CiAJCXN0cnVjdCBkaW1tX2luZm8gKmRpbW0gPSBtY2ktPmRpbW1zW2ldOwotCQlpZiAoZGltbS0+bnJfcGFnZXMgPT0gMCkKKwkJaWYgKCFkaW1tLT5ucl9wYWdlcykKIAkJCWNvbnRpbnVlOworCiAJCWRldmljZV91bnJlZ2lzdGVyKCZkaW1tLT5kZXYpOwogCX0KLWZhaWwyOgorZmFpbF91bnJlZ2lzdGVyX2RldjoKIAlkZXZpY2VfdW5yZWdpc3RlcigmbWNpLT5kZXYpOworZmFpbF91bnJlZ2lzdGVyX2J1czoKIAlidXNfdW5yZWdpc3RlcihtY2ktPmJ1cyk7CitmYWlsX2ZyZWVfbmFtZToKIAlrZnJlZShtY2ktPmJ1cy0+bmFtZSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9pNTEwMF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvaTUxMDBfZWRhYy5jCmluZGV4IDYyNDdkMTguLmU5ZjhhMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9pNTEwMF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2k1MTAwX2VkYWMuYwpAQCAtMjc5LDExICsyNzksNiBAQAogCXJldHVybiBpNTEwMF9ucmVjbWVtYV9yYW5rKGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBpNTEwMF9yZWNtZW1hX2RtX2J1Zl9pZCh1MzIgYSkKLXsKLQlyZXR1cm4gaTUxMDBfbnJlY21lbWFfZG1fYnVmX2lkKGEpOwotfQotCiBzdGF0aWMgaW5saW5lIHUzMiBpNTEwMF9yZWNtZW1iX2Nhcyh1MzIgYSkKIHsKIAlyZXR1cm4gaTUxMDBfbnJlY21lbWJfY2FzKGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21jZV9hbWRfaW5qLmMgYi9kcml2ZXJzL2VkYWMvbWNlX2FtZF9pbmouYwppbmRleCAwYmQ5MWE4Li5mNzY4MWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvbWNlX2FtZF9pbmouYworKysgYi9kcml2ZXJzL2VkYWMvbWNlX2FtZF9pbmouYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAKIERFRklORV9TSU1QTEVfQVRUUklCVVRFKGJhbmtfZm9wcywgaW5qX2JhbmtfZ2V0LCBpbmpfYmFua19zZXQsICIlbGx1XG4iKTsKIAotc3RydWN0IGRmc19ub2RlIHsKK3N0YXRpYyBzdHJ1Y3QgZGZzX25vZGUgewogCWNoYXIgKm5hbWU7CiAJc3RydWN0IGRlbnRyeSAqZDsKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCmluZGV4IGZmYjFhOWEuLjFmYTc2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogRnJlZXNjYWxlIE1QQzg1eHggTWVtb3J5IENvbnRyb2xsZXIga2VuZWwgbW9kdWxlCisgKiBGcmVlc2NhbGUgTVBDODV4eCBNZW1vcnkgQ29udHJvbGxlciBrZXJuZWwgbW9kdWxlCiAgKgogICogUGFydHMgQ29weXJpZ2h0ZWQgKGMpIDIwMTMgYnkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmggYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmgKaW5kZXggOGM2MjU2NC4uNDQ5OGJhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5oCisrKyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBGcmVlc2NhbGUgTVBDODV4eCBNZW1vcnkgQ29udHJvbGxlciBrZW5lbCBtb2R1bGUKKyAqIEZyZWVzY2FsZSBNUEM4NXh4IE1lbW9yeSBDb250cm9sbGVyIGtlcm5lbCBtb2R1bGUKICAqIEF1dGhvcjogRGF2ZSBKaWFuZyA8ZGppYW5nQG12aXN0YS5jb20+CiAgKgogICogMjAwNi0yMDA3IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL212NjR4NjBfZWRhYy5jIGIvZHJpdmVycy9lZGFjL212NjR4NjBfZWRhYy5jCmluZGV4IDYzNjZlODguLjA1NzRlMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tdjY0eDYwX2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvbXY2NHg2MF9lZGFjLmMKQEAgLTc4OSw3ICs3ODksOCBAQAogCWN0bCA9IChjdGwgJiAweGZmMDBmZmZmKSB8IDB4MTAwMDA7CiAJb3V0X2xlMzIocGRhdGEtPm1jX3ZiYXNlICsgTVY2NFg2MF9TRFJBTV9FUlJfRUNDX0NOVEwsIGN0bCk7CiAKLQlpZiAoZWRhY19tY19hZGRfbWMobWNpKSkgeworCXJlcyA9IGVkYWNfbWNfYWRkX21jKG1jaSk7CisJaWYgKHJlcykgewogCQllZGFjX2RiZygzLCAiZmFpbGVkIGVkYWNfbWNfYWRkX21jKClcbiIpOwogCQlnb3RvIGVycjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvc3lub3BzeXNfZWRhYy5jIGIvZHJpdmVycy9lZGFjL3N5bm9wc3lzX2VkYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzk2OTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9lZGFjL3N5bm9wc3lzX2VkYWMuYwpAQCAtMCwwICsxLDUzNSBAQAorLyoKKyAqIFN5bm9wc3lzIEREUiBFQ0MgRHJpdmVyCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiBwcGM0eHhfZWRhYy5jIGRyaXZlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDE0IFhpbGlueCwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscworICovCisKKyNpbmNsdWRlIDxsaW51eC9lZGFjLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlICJlZGFjX2NvcmUuaCIKKworLyogTnVtYmVyIG9mIGNzX3Jvd3MgbmVlZGVkIHBlciBtZW1vcnkgY29udHJvbGxlciAqLworI2RlZmluZSBTWU5QU19FREFDX05SX0NTUk9XUwkxCisKKy8qIE51bWJlciBvZiBjaGFubmVscyBwZXIgbWVtb3J5IGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgU1lOUFNfRURBQ19OUl9DSEFOUwkxCisKKy8qIEdyYW51bGFyaXR5IG9mIHJlcG9ydGVkIGVycm9yIGluIGJ5dGVzICovCisjZGVmaW5lIFNZTlBTX0VEQUNfRVJSX0dSQUlOCTEKKworI2RlZmluZSBTWU5QU19FREFDX01TR19TSVpFCTI1NgorCisjZGVmaW5lIFNZTlBTX0VEQUNfTU9EX1NUUklORwkic3lucHNfZWRhYyIKKyNkZWZpbmUgU1lOUFNfRURBQ19NT0RfVkVSCSIxIgorCisvKiBTeW5vcHN5cyBERFIgbWVtb3J5IGNvbnRyb2xsZXIgcmVnaXN0ZXJzIHRoYXQgYXJlIHJlbGV2YW50IHRvIEVDQyAqLworI2RlZmluZSBDVFJMX09GU1QJCTB4MAorI2RlZmluZSBUX1pRX09GU1QJCTB4QTQKKworLyogRUNDIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRUNDX0NUUkxfT0ZTVAkJMHhDNAorLyogRUNDIGxvZyByZWdpc3RlciAqLworI2RlZmluZSBDRV9MT0dfT0ZTVAkJMHhDOAorLyogRUNDIGFkZHJlc3MgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0VfQUREUl9PRlNUCQkweENDCisvKiBFQ0MgZGF0YVszMTowXSByZWdpc3RlciAqLworI2RlZmluZSBDRV9EQVRBXzMxXzBfT0ZTVAkweEQwCisKKy8qIFVuY29ycmVjdGFibGUgZXJyb3IgaW5mbyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVUVfTE9HX09GU1QJCTB4REMKKyNkZWZpbmUgVUVfQUREUl9PRlNUCQkweEUwCisjZGVmaW5lIFVFX0RBVEFfMzFfMF9PRlNUCTB4RTQKKworI2RlZmluZSBTVEFUX09GU1QJCTB4RjAKKyNkZWZpbmUgU0NSVUJfT0ZTVAkJMHhGNAorCisvKiBDb250cm9sIHJlZ2lzdGVyIGJpdCBmaWVsZCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBDVFJMX0JXX01BU0sJCTB4QworI2RlZmluZSBDVFJMX0JXX1NISUZUCQkyCisKKyNkZWZpbmUgRERSQ1RMX1dEVEhfMTYJCTEKKyNkZWZpbmUgRERSQ1RMX1dEVEhfMzIJCTAKKworLyogWlEgcmVnaXN0ZXIgYml0IGZpZWxkIGRlZmluaXRpb25zICovCisjZGVmaW5lIFRfWlFfRERSTU9ERV9NQVNLCTB4MgorCisvKiBFQ0MgY29udHJvbCByZWdpc3RlciBiaXQgZmllbGQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRUNDX0NUUkxfQ0xSX0NFX0VSUgkweDIKKyNkZWZpbmUgRUNDX0NUUkxfQ0xSX1VFX0VSUgkweDEKKworLyogRUNDIGNvcnJlY3RhYmxlL3VuY29ycmVjdGFibGUgZXJyb3IgbG9nIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIExPR19WQUxJRAkJMHgxCisjZGVmaW5lIENFX0xPR19CSVRQT1NfTUFTSwkweEZFCisjZGVmaW5lIENFX0xPR19CSVRQT1NfU0hJRlQJMQorCisvKiBFQ0MgY29ycmVjdGFibGUvdW5jb3JyZWN0YWJsZSBlcnJvciBhZGRyZXNzIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIEFERFJfQ09MX01BU0sJCTB4RkZGCisjZGVmaW5lIEFERFJfUk9XX01BU0sJCTB4RkZGRjAwMAorI2RlZmluZSBBRERSX1JPV19TSElGVAkJMTIKKyNkZWZpbmUgQUREUl9CQU5LX01BU0sJCTB4NzAwMDAwMDAKKyNkZWZpbmUgQUREUl9CQU5LX1NISUZUCQkyOAorCisvKiBFQ0Mgc3RhdGlzdGljIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIFNUQVRfVUVDTlRfTUFTSwkJMHhGRgorI2RlZmluZSBTVEFUX0NFQ05UX01BU0sJCTB4RkYwMAorI2RlZmluZSBTVEFUX0NFQ05UX1NISUZUCTgKKworLyogRUNDIHNjcnViIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIFNDUlVCX01PREVfTUFTSwkJMHg3CisjZGVmaW5lIFNDUlVCX01PREVfU0VDREVECTB4NAorCisvKioKKyAqIHN0cnVjdCBlY2NfZXJyb3JfaW5mbyAtIEVDQyBlcnJvciBsb2cgaW5mb3JtYXRpb24KKyAqIEByb3c6CVJvdyBudW1iZXIKKyAqIEBjb2w6CUNvbHVtbiBudW1iZXIKKyAqIEBiYW5rOglCYW5rIG51bWJlcgorICogQGJpdHBvczoJQml0IHBvc2l0aW9uCisgKiBAZGF0YToJRGF0YSBjYXVzaW5nIHRoZSBlcnJvcgorICovCitzdHJ1Y3QgZWNjX2Vycm9yX2luZm8geworCXUzMiByb3c7CisJdTMyIGNvbDsKKwl1MzIgYmFuazsKKwl1MzIgYml0cG9zOworCXUzMiBkYXRhOworfTsKKworLyoqCisgKiBzdHJ1Y3Qgc3lucHNfZWNjX3N0YXR1cyAtIEVDQyBzdGF0dXMgaW5mb3JtYXRpb24gdG8gcmVwb3J0CisgKiBAY2VfY250OglDb3JyZWN0YWJsZSBlcnJvciBjb3VudAorICogQHVlX2NudDoJVW5jb3JyZWN0YWJsZSBlcnJvciBjb3VudAorICogQGNlaW5mbzoJQ29ycmVjdGFibGUgZXJyb3IgbG9nIGluZm9ybWF0aW9uCisgKiBAdWVpbmZvOglVbmNvcnJlY3RhYmxlIGVycm9yIGxvZyBpbmZvcm1hdGlvbgorICovCitzdHJ1Y3Qgc3lucHNfZWNjX3N0YXR1cyB7CisJdTMyIGNlX2NudDsKKwl1MzIgdWVfY250OworCXN0cnVjdCBlY2NfZXJyb3JfaW5mbyBjZWluZm87CisJc3RydWN0IGVjY19lcnJvcl9pbmZvIHVlaW5mbzsKK307CisKKy8qKgorICogc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAtIEREUiBtZW1vcnkgY29udHJvbGxlciBwcml2YXRlIGluc3RhbmNlIGRhdGEKKyAqIEBiYXNlYWRkcjoJQmFzZSBhZGRyZXNzIG9mIHRoZSBERFIgY29udHJvbGxlcgorICogQG1lc3NhZ2U6CUJ1ZmZlciBmb3IgZnJhbWluZyB0aGUgZXZlbnQgc3BlY2lmaWMgaW5mbworICogQHN0YXQ6CUVDQyBzdGF0dXMgaW5mb3JtYXRpb24KKyAqIEBjZV9jbnQ6CUNvcnJlY3RhYmxlIEVycm9yIGNvdW50CisgKiBAdWVfY250OglVbmNvcnJlY3RhYmxlIEVycm9yIGNvdW50CisgKi8KK3N0cnVjdCBzeW5wc19lZGFjX3ByaXYgeworCXZvaWQgX19pb21lbSAqYmFzZWFkZHI7CisJY2hhciBtZXNzYWdlW1NZTlBTX0VEQUNfTVNHX1NJWkVdOworCXN0cnVjdCBzeW5wc19lY2Nfc3RhdHVzIHN0YXQ7CisJdTMyIGNlX2NudDsKKwl1MzIgdWVfY250OworfTsKKworLyoqCisgKiBzeW5wc19lZGFjX2dldGVycm9yX2luZm8gLSBHZXQgdGhlIGN1cnJlbnQgZWNjIGVycm9yIGluZm8KKyAqIEBiYXNlOglQb2ludGVyIHRvIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGRkciBtZW1vcnkgY29udHJvbGxlcgorICogQHA6CQlQb2ludGVyIHRvIHRoZSBzeW5vcHN5cyBlY2Mgc3RhdHVzIHN0cnVjdHVyZQorICoKKyAqIERldGVybWluZXMgdGhlcmUgaXMgYW55IGVjYyBlcnJvciBvciBub3QKKyAqCisgKiBSZXR1cm46IG9uZSBpZiB0aGVyZSBpcyBubyBlcnJvciBvdGhlcndpc2UgcmV0dXJucyB6ZXJvCisgKi8KK3N0YXRpYyBpbnQgc3lucHNfZWRhY19nZXRlcnJvcl9pbmZvKHZvaWQgX19pb21lbSAqYmFzZSwKKwkJCQkgICAgc3RydWN0IHN5bnBzX2VjY19zdGF0dXMgKnApCit7CisJdTMyIHJlZ3ZhbCwgY2xlYXJ2YWwgPSAwOworCisJcmVndmFsID0gcmVhZGwoYmFzZSArIFNUQVRfT0ZTVCk7CisJaWYgKCFyZWd2YWwpCisJCXJldHVybiAxOworCisJcC0+Y2VfY250ID0gKHJlZ3ZhbCAmIFNUQVRfQ0VDTlRfTUFTSykgPj4gU1RBVF9DRUNOVF9TSElGVDsKKwlwLT51ZV9jbnQgPSByZWd2YWwgJiBTVEFUX1VFQ05UX01BU0s7CisKKwlyZWd2YWwgPSByZWFkbChiYXNlICsgQ0VfTE9HX09GU1QpOworCWlmICghKHAtPmNlX2NudCAmJiAocmVndmFsICYgTE9HX1ZBTElEKSkpCisJCWdvdG8gdWVfZXJyOworCisJcC0+Y2VpbmZvLmJpdHBvcyA9IChyZWd2YWwgJiBDRV9MT0dfQklUUE9TX01BU0spID4+IENFX0xPR19CSVRQT1NfU0hJRlQ7CisJcmVndmFsID0gcmVhZGwoYmFzZSArIENFX0FERFJfT0ZTVCk7CisJcC0+Y2VpbmZvLnJvdyA9IChyZWd2YWwgJiBBRERSX1JPV19NQVNLKSA+PiBBRERSX1JPV19TSElGVDsKKwlwLT5jZWluZm8uY29sID0gcmVndmFsICYgQUREUl9DT0xfTUFTSzsKKwlwLT5jZWluZm8uYmFuayA9IChyZWd2YWwgJiBBRERSX0JBTktfTUFTSykgPj4gQUREUl9CQU5LX1NISUZUOworCXAtPmNlaW5mby5kYXRhID0gcmVhZGwoYmFzZSArIENFX0RBVEFfMzFfMF9PRlNUKTsKKwllZGFjX2RiZygzLCAiY2UgYml0IHBvc2l0aW9uOiAlZCBkYXRhOiAlZFxuIiwgcC0+Y2VpbmZvLmJpdHBvcywKKwkJIHAtPmNlaW5mby5kYXRhKTsKKwljbGVhcnZhbCA9IEVDQ19DVFJMX0NMUl9DRV9FUlI7CisKK3VlX2VycjoKKwlyZWd2YWwgPSByZWFkbChiYXNlICsgVUVfTE9HX09GU1QpOworCWlmICghKHAtPnVlX2NudCAmJiAocmVndmFsICYgTE9HX1ZBTElEKSkpCisJCWdvdG8gb3V0OworCisJcmVndmFsID0gcmVhZGwoYmFzZSArIFVFX0FERFJfT0ZTVCk7CisJcC0+dWVpbmZvLnJvdyA9IChyZWd2YWwgJiBBRERSX1JPV19NQVNLKSA+PiBBRERSX1JPV19TSElGVDsKKwlwLT51ZWluZm8uY29sID0gcmVndmFsICYgQUREUl9DT0xfTUFTSzsKKwlwLT51ZWluZm8uYmFuayA9IChyZWd2YWwgJiBBRERSX0JBTktfTUFTSykgPj4gQUREUl9CQU5LX1NISUZUOworCXAtPnVlaW5mby5kYXRhID0gcmVhZGwoYmFzZSArIFVFX0RBVEFfMzFfMF9PRlNUKTsKKwljbGVhcnZhbCB8PSBFQ0NfQ1RSTF9DTFJfVUVfRVJSOworCitvdXQ6CisJd3JpdGVsKGNsZWFydmFsLCBiYXNlICsgRUNDX0NUUkxfT0ZTVCk7CisJd3JpdGVsKDB4MCwgYmFzZSArIEVDQ19DVFJMX09GU1QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc3lucHNfZWRhY19oYW5kbGVfZXJyb3IgLSBIYW5kbGUgY29udHJvbGxlciBlcnJvciB0eXBlcyBDRSBhbmQgVUUKKyAqIEBtY2k6CVBvaW50ZXIgdG8gdGhlIGVkYWMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqIEBwOgkJUG9pbnRlciB0byB0aGUgc3lub3BzeXMgZWNjIHN0YXR1cyBzdHJ1Y3R1cmUKKyAqCisgKiBIYW5kbGVzIHRoZSBjb250cm9sbGVyIEVDQyBjb3JyZWN0YWJsZSBhbmQgdW4gY29ycmVjdGFibGUgZXJyb3IuCisgKi8KK3N0YXRpYyB2b2lkIHN5bnBzX2VkYWNfaGFuZGxlX2Vycm9yKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKKwkJCQkgICAgc3RydWN0IHN5bnBzX2VjY19zdGF0dXMgKnApCit7CisJc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdiA9IG1jaS0+cHZ0X2luZm87CisJc3RydWN0IGVjY19lcnJvcl9pbmZvICpwaW5mOworCisJaWYgKHAtPmNlX2NudCkgeworCQlwaW5mID0gJnAtPmNlaW5mbzsKKwkJc25wcmludGYocHJpdi0+bWVzc2FnZSwgU1lOUFNfRURBQ19NU0dfU0laRSwKKwkJCSAiRERSIEVDQyBlcnJvciB0eXBlIDolcyBSb3cgJWQgQmFuayAlZCBDb2wgJWQgIiwKKwkJCSAiQ0UiLCBwaW5mLT5yb3csIHBpbmYtPmJhbmssIHBpbmYtPmNvbCk7CisJCWVkYWNfbWNfaGFuZGxlX2Vycm9yKEhXX0VWRU5UX0VSUl9DT1JSRUNURUQsIG1jaSwKKwkJCQkgICAgIHAtPmNlX2NudCwgMCwgMCwgMCwgMCwgMCwgLTEsCisJCQkJICAgICBwcml2LT5tZXNzYWdlLCAiIik7CisJfQorCisJaWYgKHAtPnVlX2NudCkgeworCQlwaW5mID0gJnAtPnVlaW5mbzsKKwkJc25wcmludGYocHJpdi0+bWVzc2FnZSwgU1lOUFNfRURBQ19NU0dfU0laRSwKKwkJCSAiRERSIEVDQyBlcnJvciB0eXBlIDolcyBSb3cgJWQgQmFuayAlZCBDb2wgJWQgIiwKKwkJCSAiVUUiLCBwaW5mLT5yb3csIHBpbmYtPmJhbmssIHBpbmYtPmNvbCk7CisJCWVkYWNfbWNfaGFuZGxlX2Vycm9yKEhXX0VWRU5UX0VSUl9VTkNPUlJFQ1RFRCwgbWNpLAorCQkJCSAgICAgcC0+dWVfY250LCAwLCAwLCAwLCAwLCAwLCAtMSwKKwkJCQkgICAgIHByaXYtPm1lc3NhZ2UsICIiKTsKKwl9CisKKwltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Cit9CisKKy8qKgorICogc3lucHNfZWRhY19jaGVjayAtIENoZWNrIGNvbnRyb2xsZXIgZm9yIEVDQyBlcnJvcnMKKyAqIEBtY2k6CVBvaW50ZXIgdG8gdGhlIGVkYWMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqCisgKiBVc2VkIHRvIGNoZWNrIGFuZCBwb3N0IEVDQyBlcnJvcnMuIENhbGxlZCBieSB0aGUgcG9sbGluZyB0aHJlYWQKKyAqLworc3RhdGljIHZvaWQgc3lucHNfZWRhY19jaGVjayhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2kpCit7CisJc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdiA9IG1jaS0+cHZ0X2luZm87CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IHN5bnBzX2VkYWNfZ2V0ZXJyb3JfaW5mbyhwcml2LT5iYXNlYWRkciwgJnByaXYtPnN0YXQpOworCWlmIChzdGF0dXMpCisJCXJldHVybjsKKworCXByaXYtPmNlX2NudCArPSBwcml2LT5zdGF0LmNlX2NudDsKKwlwcml2LT51ZV9jbnQgKz0gcHJpdi0+c3RhdC51ZV9jbnQ7CisJc3lucHNfZWRhY19oYW5kbGVfZXJyb3IobWNpLCAmcHJpdi0+c3RhdCk7CisKKwllZGFjX2RiZygzLCAiVG90YWwgZXJyb3IgY291bnQgY2UgJWQgdWUgJWRcbiIsCisJCSBwcml2LT5jZV9jbnQsIHByaXYtPnVlX2NudCk7Cit9CisKKy8qKgorICogc3lucHNfZWRhY19nZXRfZHR5cGUgLSBSZXR1cm4gdGhlIGNvbnRyb2xsZXIgbWVtb3J5IHdpZHRoCisgKiBAYmFzZToJUG9pbnRlciB0byB0aGUgZGRyIG1lbW9yeSBjb250cm9sbGVyIGJhc2UgYWRkcmVzcworICoKKyAqIEdldCB0aGUgRURBQyBkZXZpY2UgdHlwZSB3aWR0aCBhcHByb3ByaWF0ZSBmb3IgdGhlIGN1cnJlbnQgY29udHJvbGxlcgorICogY29uZmlndXJhdGlvbi4KKyAqCisgKiBSZXR1cm46IGEgZGV2aWNlIHR5cGUgd2lkdGggZW51bWVyYXRpb24uCisgKi8KK3N0YXRpYyBlbnVtIGRldl90eXBlIHN5bnBzX2VkYWNfZ2V0X2R0eXBlKGNvbnN0IHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwllbnVtIGRldl90eXBlIGR0OworCXUzMiB3aWR0aDsKKworCXdpZHRoID0gcmVhZGwoYmFzZSArIENUUkxfT0ZTVCk7CisJd2lkdGggPSAod2lkdGggJiBDVFJMX0JXX01BU0spID4+IENUUkxfQldfU0hJRlQ7CisKKwlzd2l0Y2ggKHdpZHRoKSB7CisJY2FzZSBERFJDVExfV0RUSF8xNjoKKwkJZHQgPSBERVZfWDI7CisJCWJyZWFrOworCWNhc2UgRERSQ1RMX1dEVEhfMzI6CisJCWR0ID0gREVWX1g0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkdCA9IERFVl9VTktOT1dOOworCX0KKworCXJldHVybiBkdDsKK30KKworLyoqCisgKiBzeW5wc19lZGFjX2dldF9lY2NzdGF0ZSAtIFJldHVybiB0aGUgY29udHJvbGxlciBlY2MgZW5hYmxlL2Rpc2FibGUgc3RhdHVzCisgKiBAYmFzZToJUG9pbnRlciB0byB0aGUgZGRyIG1lbW9yeSBjb250cm9sbGVyIGJhc2UgYWRkcmVzcworICoKKyAqIEdldCB0aGUgRUNDIGVuYWJsZS9kaXNhYmxlIHN0YXR1cyBmb3IgdGhlIGNvbnRyb2xsZXIKKyAqCisgKiBSZXR1cm46IGEgZWNjIHN0YXR1cyBib29sZWFuIGkuZSB0cnVlL2ZhbHNlIC0gZW5hYmxlZC9kaXNhYmxlZC4KKyAqLworc3RhdGljIGJvb2wgc3lucHNfZWRhY19nZXRfZWNjc3RhdGUodm9pZCBfX2lvbWVtICpiYXNlKQoreworCWVudW0gZGV2X3R5cGUgZHQ7CisJdTMyIGVjY3R5cGU7CisJYm9vbCBzdGF0ZSA9IGZhbHNlOworCisJZHQgPSBzeW5wc19lZGFjX2dldF9kdHlwZShiYXNlKTsKKwlpZiAoZHQgPT0gREVWX1VOS05PV04pCisJCXJldHVybiBzdGF0ZTsKKworCWVjY3R5cGUgPSByZWFkbChiYXNlICsgU0NSVUJfT0ZTVCkgJiBTQ1JVQl9NT0RFX01BU0s7CisJaWYgKChlY2N0eXBlID09IFNDUlVCX01PREVfU0VDREVEKSAmJiAoZHQgPT0gREVWX1gyKSkKKwkJc3RhdGUgPSB0cnVlOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKioKKyAqIHN5bnBzX2VkYWNfZ2V0X21lbXNpemUgLSByZWFkcyB0aGUgc2l6ZSBvZiB0aGUgYXR0YWNoZWQgbWVtb3J5IGRldmljZQorICoKKyAqIFJldHVybjogdGhlIG1lbW9yeSBzaXplIGluIGJ5dGVzCisgKi8KK3N0YXRpYyB1MzIgc3lucHNfZWRhY19nZXRfbWVtc2l6ZSh2b2lkKQoreworCXN0cnVjdCBzeXNpbmZvIGluZjsKKworCXNpX21lbWluZm8oJmluZik7CisKKwlyZXR1cm4gaW5mLnRvdGFscmFtICogaW5mLm1lbV91bml0OworfQorCisvKioKKyAqIHN5bnBzX2VkYWNfZ2V0X210eXBlIC0gUmV0dXJucyBjb250cm9sbGVyIG1lbW9yeSB0eXBlCisgKiBAYmFzZToJcG9pbnRlciB0byB0aGUgc3lub3BzeXMgZWNjIHN0YXR1cyBzdHJ1Y3R1cmUKKyAqCisgKiBHZXQgdGhlIEVEQUMgbWVtb3J5IHR5cGUgYXBwcm9wcmlhdGUgZm9yIHRoZSBjdXJyZW50IGNvbnRyb2xsZXIKKyAqIGNvbmZpZ3VyYXRpb24uCisgKgorICogUmV0dXJuOiBhIG1lbW9yeSB0eXBlIGVudW1lcmF0aW9uLgorICovCitzdGF0aWMgZW51bSBtZW1fdHlwZSBzeW5wc19lZGFjX2dldF9tdHlwZShjb25zdCB2b2lkIF9faW9tZW0gKmJhc2UpCit7CisJZW51bSBtZW1fdHlwZSBtdDsKKwl1MzIgbWVtdHlwZTsKKworCW1lbXR5cGUgPSByZWFkbChiYXNlICsgVF9aUV9PRlNUKTsKKworCWlmIChtZW10eXBlICYgVF9aUV9ERFJNT0RFX01BU0spCisJCW10ID0gTUVNX0REUjM7CisJZWxzZQorCQltdCA9IE1FTV9ERFIyOworCisJcmV0dXJuIG10OworfQorCisvKioKKyAqIHN5bnBzX2VkYWNfaW5pdF9jc3Jvd3MgLSBJbml0aWFsaXplIHRoZSBjcyByb3cgZGF0YQorICogQG1jaToJUG9pbnRlciB0byB0aGUgZWRhYyBtZW1vcnkgY29udHJvbGxlciBpbnN0YW5jZQorICoKKyAqIEluaXRpYWxpemVzIHRoZSBjaGlwIHNlbGVjdCByb3dzIGFzc29jaWF0ZWQgd2l0aCB0aGUgRURBQyBtZW1vcnkKKyAqIGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqCisgKiBSZXR1cm46IFVuY29uZGl0aW9uYWxseSAwLgorICovCitzdGF0aWMgaW50IHN5bnBzX2VkYWNfaW5pdF9jc3Jvd3Moc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQoreworCXN0cnVjdCBjc3Jvd19pbmZvICpjc2k7CisJc3RydWN0IGRpbW1faW5mbyAqZGltbTsKKwlzdHJ1Y3Qgc3lucHNfZWRhY19wcml2ICpwcml2ID0gbWNpLT5wdnRfaW5mbzsKKwl1MzIgc2l6ZTsKKwlpbnQgcm93LCBqOworCisJZm9yIChyb3cgPSAwOyByb3cgPCBtY2ktPm5yX2Nzcm93czsgcm93KyspIHsKKwkJY3NpID0gbWNpLT5jc3Jvd3Nbcm93XTsKKwkJc2l6ZSA9IHN5bnBzX2VkYWNfZ2V0X21lbXNpemUoKTsKKworCQlmb3IgKGogPSAwOyBqIDwgY3NpLT5ucl9jaGFubmVsczsgaisrKSB7CisJCQlkaW1tICAgICAgICAgICAgPSBjc2ktPmNoYW5uZWxzW2pdLT5kaW1tOworCQkJZGltbS0+ZWRhY19tb2RlID0gRURBQ19GTEFHX1NFQ0RFRDsKKwkJCWRpbW0tPm10eXBlICAgICA9IHN5bnBzX2VkYWNfZ2V0X210eXBlKHByaXYtPmJhc2VhZGRyKTsKKwkJCWRpbW0tPm5yX3BhZ2VzICA9IChzaXplID4+IFBBR0VfU0hJRlQpIC8gY3NpLT5ucl9jaGFubmVsczsKKwkJCWRpbW0tPmdyYWluICAgICA9IFNZTlBTX0VEQUNfRVJSX0dSQUlOOworCQkJZGltbS0+ZHR5cGUgICAgID0gc3lucHNfZWRhY19nZXRfZHR5cGUocHJpdi0+YmFzZWFkZHIpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc3lucHNfZWRhY19tY19pbml0IC0gSW5pdGlhbGl6ZSBkcml2ZXIgaW5zdGFuY2UKKyAqIEBtY2k6CVBvaW50ZXIgdG8gdGhlIGVkYWMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqIEBwZGV2OglQb2ludGVyIHRvIHRoZSBwbGF0Zm9ybV9kZXZpY2Ugc3RydWN0CisgKgorICogUGVyZm9ybXMgaW5pdGlhbGl6YXRpb24gb2YgdGhlIEVEQUMgbWVtb3J5IGNvbnRyb2xsZXIgaW5zdGFuY2UgYW5kCisgKiByZWxhdGVkIGRyaXZlci1wcml2YXRlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZW1vcnkgY29udHJvbGxlciB0aGUKKyAqIGluc3RhbmNlIGlzIGJvdW5kIHRvLgorICoKKyAqIFJldHVybjogQWx3YXlzIHplcm8uCisgKi8KK3N0YXRpYyBpbnQgc3lucHNfZWRhY19tY19pbml0KHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKKwkJCQkgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBzeW5wc19lZGFjX3ByaXYgKnByaXY7CisKKwltY2ktPnBkZXYgPSAmcGRldi0+ZGV2OworCXByaXYgPSBtY2ktPnB2dF9pbmZvOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1jaSk7CisKKwkvKiBJbml0aWFsaXplIGNvbnRyb2xsZXIgY2FwYWJpbGl0aWVzIGFuZCBjb25maWd1cmF0aW9uICovCisJbWNpLT5tdHlwZV9jYXAgPSBNRU1fRkxBR19ERFIzIHwgTUVNX0ZMQUdfRERSMjsKKwltY2ktPmVkYWNfY3RsX2NhcCA9IEVEQUNfRkxBR19OT05FIHwgRURBQ19GTEFHX1NFQ0RFRDsKKwltY2ktPnNjcnViX2NhcCA9IFNDUlVCX0hXX1NSQzsKKwltY2ktPnNjcnViX21vZGUgPSBTQ1JVQl9OT05FOworCisJbWNpLT5lZGFjX2NhcCA9IEVEQUNfRkxBR19TRUNERUQ7CisJbWNpLT5jdGxfbmFtZSA9ICJzeW5wc19kZHJfY29udHJvbGxlciI7CisJbWNpLT5kZXZfbmFtZSA9IFNZTlBTX0VEQUNfTU9EX1NUUklORzsKKwltY2ktPm1vZF9uYW1lID0gU1lOUFNfRURBQ19NT0RfVkVSOworCW1jaS0+bW9kX3ZlciA9ICIxIjsKKworCWVkYWNfb3Bfc3RhdGUgPSBFREFDX09QU1RBVEVfUE9MTDsKKwltY2ktPmVkYWNfY2hlY2sgPSBzeW5wc19lZGFjX2NoZWNrOworCW1jaS0+Y3RsX3BhZ2VfdG9fcGh5cyA9IE5VTEw7CisKKwlzdGF0dXMgPSBzeW5wc19lZGFjX2luaXRfY3Nyb3dzKG1jaSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHN5bnBzX2VkYWNfbWNfcHJvYmUgLSBDaGVjayBjb250cm9sbGVyIGFuZCBiaW5kIGRyaXZlcgorICogQHBkZXY6CVBvaW50ZXIgdG8gdGhlIHBsYXRmb3JtX2RldmljZSBzdHJ1Y3QKKyAqCisgKiBQcm9iZXMgYSBzcGVjaWZpYyBjb250cm9sbGVyIGluc3RhbmNlIGZvciBiaW5kaW5nIHdpdGggdGhlIGRyaXZlci4KKyAqCisgKiBSZXR1cm46IDAgaWYgdGhlIGNvbnRyb2xsZXIgaW5zdGFuY2Ugd2FzIHN1Y2Nlc3NmdWxseSBib3VuZCB0byB0aGUKKyAqIGRyaXZlcjsgb3RoZXJ3aXNlLCA8IDAgb24gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgc3lucHNfZWRhY19tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaTsKKwlzdHJ1Y3QgZWRhY19tY19sYXllciBsYXllcnNbMl07CisJc3RydWN0IHN5bnBzX2VkYWNfcHJpdiAqcHJpdjsKKwlpbnQgcmM7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdm9pZCBfX2lvbWVtICpiYXNlYWRkcjsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJYmFzZWFkZHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGJhc2VhZGRyKSkKKwkJcmV0dXJuIFBUUl9FUlIoYmFzZWFkZHIpOworCisJaWYgKCFzeW5wc19lZGFjX2dldF9lY2NzdGF0ZShiYXNlYWRkcikpIHsKKwkJZWRhY19wcmludGsoS0VSTl9JTkZPLCBFREFDX01DLCAiRUNDIG5vdCBlbmFibGVkXG4iKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisKKwlsYXllcnNbMF0udHlwZSA9IEVEQUNfTUNfTEFZRVJfQ0hJUF9TRUxFQ1Q7CisJbGF5ZXJzWzBdLnNpemUgPSBTWU5QU19FREFDX05SX0NTUk9XUzsKKwlsYXllcnNbMF0uaXNfdmlydF9jc3JvdyA9IHRydWU7CisJbGF5ZXJzWzFdLnR5cGUgPSBFREFDX01DX0xBWUVSX0NIQU5ORUw7CisJbGF5ZXJzWzFdLnNpemUgPSBTWU5QU19FREFDX05SX0NIQU5TOworCWxheWVyc1sxXS5pc192aXJ0X2Nzcm93ID0gZmFsc2U7CisKKwltY2kgPSBlZGFjX21jX2FsbG9jKDAsIEFSUkFZX1NJWkUobGF5ZXJzKSwgbGF5ZXJzLAorCQkJICAgIHNpemVvZihzdHJ1Y3Qgc3lucHNfZWRhY19wcml2KSk7CisJaWYgKCFtY2kpIHsKKwkJZWRhY19wcmludGsoS0VSTl9FUlIsIEVEQUNfTUMsCisJCQkgICAgIkZhaWxlZCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgbWMgaW5zdGFuY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwcml2ID0gbWNpLT5wdnRfaW5mbzsKKwlwcml2LT5iYXNlYWRkciA9IGJhc2VhZGRyOworCXJjID0gc3lucHNfZWRhY19tY19pbml0KG1jaSwgcGRldik7CisJaWYgKHJjKSB7CisJCWVkYWNfcHJpbnRrKEtFUk5fRVJSLCBFREFDX01DLAorCQkJICAgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBpbnN0YW5jZVxuIik7CisJCWdvdG8gZnJlZV9lZGFjX21jOworCX0KKworCXJjID0gZWRhY19tY19hZGRfbWMobWNpKTsKKwlpZiAocmMpIHsKKwkJZWRhY19wcmludGsoS0VSTl9FUlIsIEVEQUNfTUMsCisJCQkgICAgIkZhaWxlZCB0byByZWdpc3RlciB3aXRoIEVEQUMgY29yZVxuIik7CisJCWdvdG8gZnJlZV9lZGFjX21jOworCX0KKworCS8qCisJICogU3RhcnQgY2FwdHVyaW5nIHRoZSBjb3JyZWN0YWJsZSBhbmQgdW5jb3JyZWN0YWJsZSBlcnJvcnMuIEEgd3JpdGUgb2YKKwkgKiAwIHN0YXJ0cyB0aGUgY291bnRlcnMuCisJICovCisJd3JpdGVsKDB4MCwgYmFzZWFkZHIgKyBFQ0NfQ1RSTF9PRlNUKTsKKwlyZXR1cm4gcmM7CisKK2ZyZWVfZWRhY19tYzoKKwllZGFjX21jX2ZyZWUobWNpKTsKKworCXJldHVybiByYzsKK30KKworLyoqCisgKiBzeW5wc19lZGFjX21jX3JlbW92ZSAtIFVuYmluZCBkcml2ZXIgZnJvbSBjb250cm9sbGVyCisgKiBAcGRldjoJUG9pbnRlciB0byB0aGUgcGxhdGZvcm1fZGV2aWNlIHN0cnVjdAorICoKKyAqIFJldHVybjogVW5jb25kaXRpb25hbGx5IDAKKyAqLworc3RhdGljIGludCBzeW5wc19lZGFjX21jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZWRhY19tY19kZWxfbWMoJnBkZXYtPmRldik7CisJZWRhY19tY19mcmVlKG1jaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgc3lucHNfZWRhY19tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAieGxueCx6eW5xLWRkcmMtYTA1IiwgfSwKKwl7IC8qIGVuZCBvZiB0YWJsZSAqLyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzeW5wc19lZGFjX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3lucHNfZWRhY19tY19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAic3lub3BzeXMtZWRhYyIsCisJCSAgIC5vZl9tYXRjaF90YWJsZSA9IHN5bnBzX2VkYWNfbWF0Y2gsCisJCSAgIH0sCisJLnByb2JlID0gc3lucHNfZWRhY19tY19wcm9iZSwKKwkucmVtb3ZlID0gc3lucHNfZWRhY19tY19yZW1vdmUsCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHN5bnBzX2VkYWNfbWNfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiWGlsaW54IEluYyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTeW5vcHN5cyBERFIgRUNDIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL0tjb25maWcKaW5kZXggZjcxMmQ0Ny4uOGRlNGRhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvS2NvbmZpZworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9LY29uZmlnCkBAIC0xMiwxMSArMTIsMTEgQEAKIAogCSAgTm90ZSB0aGF0IHVzaW5nIHRoaXMgZHJpdmVyIGluIGNvbmNlcnQgd2l0aCBlZmlib290bWdyIHJlcXVpcmVzCiAJICBhdCBsZWFzdCB0ZXN0IHJlbGVhc2UgdmVyc2lvbiAwLjUuMC10ZXN0MyBvciBsYXRlciwgd2hpY2ggaXMKLQkgIGF2YWlsYWJsZSBmcm9tIE1hdHQgRG9tc2NoJ3Mgd2Vic2l0ZSBsb2NhdGVkIGF0OgorCSAgYXZhaWxhYmxlIGZyb206CiAJICA8aHR0cDovL2xpbnV4LmRlbGwuY29tL2VmaWJvb3RtZ3IvdGVzdGluZy9lZmlib290bWdyLTAuNS4wLXRlc3QzLnRhci5nej4KIAogCSAgU3Vic2VxdWVudCBlZmlib290bWdyIHJlbGVhc2VzIG1heSBiZSBmb3VuZCBhdDoKLQkgIDxodHRwOi8vbGludXguZGVsbC5jb20vZWZpYm9vdG1ncj4KKwkgIDxodHRwOi8vZ2l0aHViLmNvbS92YXRocGVsYS9lZmlib290bWdyPgogCiBjb25maWcgRUZJX1ZBUlNfUFNUT1JFCiAJdHJpc3RhdGUgIlJlZ2lzdGVyIGVmaXZhcnMgYmFja2VuZCBmb3IgcHN0b3JlIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwppbmRleCA5MDM1YzFiLi4zMDYxYmI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZmkuYwpAQCAtMTE1LDE1ICsxMTUsMjQgQEAKIEVGSV9BVFRSX1NIT1cocnVudGltZSk7CiBFRklfQVRUUl9TSE9XKGNvbmZpZ190YWJsZSk7CiAKK3N0YXRpYyBzc2l6ZV90IGZ3X3BsYXRmb3JtX3NpemVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBlZmlfZW5hYmxlZChFRklfNjRCSVQpID8gNjQgOiAzMik7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZWZpX2F0dHJfZndfdmVuZG9yID0gX19BVFRSX1JPKGZ3X3ZlbmRvcik7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGVmaV9hdHRyX3J1bnRpbWUgPSBfX0FUVFJfUk8ocnVudGltZSk7CiBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGVmaV9hdHRyX2NvbmZpZ190YWJsZSA9IF9fQVRUUl9STyhjb25maWdfdGFibGUpOworc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBlZmlfYXR0cl9md19wbGF0Zm9ybV9zaXplID0KKwlfX0FUVFJfUk8oZndfcGxhdGZvcm1fc2l6ZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICplZmlfc3Vic3lzX2F0dHJzW10gPSB7CiAJJmVmaV9hdHRyX3N5c3RhYi5hdHRyLAogCSZlZmlfYXR0cl9md192ZW5kb3IuYXR0ciwKIAkmZWZpX2F0dHJfcnVudGltZS5hdHRyLAogCSZlZmlfYXR0cl9jb25maWdfdGFibGUuYXR0ciwKKwkmZWZpX2F0dHJfZndfcGxhdGZvcm1fc2l6ZS5hdHRyLAogCU5VTEwsCiB9OwogCkBAIC0yNzIsMTUgKzI4MSwxMCBAQAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyB0YWJsZSwKIAkJCQkgICAgIGVmaV9jb25maWdfdGFibGVfdHlwZV90ICp0YWJsZV90eXBlcykKIHsKLQl1OCBzdHJbRUZJX1ZBUklBQkxFX0dVSURfTEVOICsgMV07CiAJaW50IGk7CiAKIAlpZiAodGFibGVfdHlwZXMpIHsKLQkJZWZpX2d1aWRfdW5wYXJzZShndWlkLCBzdHIpOwotCiAJCWZvciAoaSA9IDA7IGVmaV9ndWlkY21wKHRhYmxlX3R5cGVzW2ldLmd1aWQsIE5VTExfR1VJRCk7IGkrKykgewotCQkJZWZpX2d1aWRfdW5wYXJzZSgmdGFibGVfdHlwZXNbaV0uZ3VpZCwgc3RyKTsKLQogCQkJaWYgKCFlZmlfZ3VpZGNtcCgqZ3VpZCwgdGFibGVfdHlwZXNbaV0uZ3VpZCkpIHsKIAkJCQkqKHRhYmxlX3R5cGVzW2ldLnB0cikgPSB0YWJsZTsKIAkJCQlwcl9jb250KCIgJXM9MHglbHggIiwKQEAgLTI5MywxMCArMjk3LDQ5IEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBfX2luaXQgZWZpX2NvbmZpZ19wYXJzZV90YWJsZXModm9pZCAqY29uZmlnX3RhYmxlcywgaW50IGNvdW50LCBpbnQgc3osCisJCQkJICAgZWZpX2NvbmZpZ190YWJsZV90eXBlX3QgKmFyY2hfdGFibGVzKQoreworCXZvaWQgKnRhYmxlcDsKKwlpbnQgaTsKKworCXRhYmxlcCA9IGNvbmZpZ190YWJsZXM7CisJcHJfaW5mbygiIik7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJZWZpX2d1aWRfdCBndWlkOworCQl1bnNpZ25lZCBsb25nIHRhYmxlOworCisJCWlmIChlZmlfZW5hYmxlZChFRklfNjRCSVQpKSB7CisJCQl1NjQgdGFibGU2NDsKKwkJCWd1aWQgPSAoKGVmaV9jb25maWdfdGFibGVfNjRfdCAqKXRhYmxlcCktPmd1aWQ7CisJCQl0YWJsZTY0ID0gKChlZmlfY29uZmlnX3RhYmxlXzY0X3QgKil0YWJsZXApLT50YWJsZTsKKwkJCXRhYmxlID0gdGFibGU2NDsKKyNpZm5kZWYgQ09ORklHXzY0QklUCisJCQlpZiAodGFibGU2NCA+PiAzMikgeworCQkJCXByX2NvbnQoIlxuIik7CisJCQkJcHJfZXJyKCJUYWJsZSBsb2NhdGVkIGFib3ZlIDRHQiwgZGlzYWJsaW5nIEVGSS5cbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorI2VuZGlmCisJCX0gZWxzZSB7CisJCQlndWlkID0gKChlZmlfY29uZmlnX3RhYmxlXzMyX3QgKil0YWJsZXApLT5ndWlkOworCQkJdGFibGUgPSAoKGVmaV9jb25maWdfdGFibGVfMzJfdCAqKXRhYmxlcCktPnRhYmxlOworCQl9CisKKwkJaWYgKCFtYXRjaF9jb25maWdfdGFibGUoJmd1aWQsIHRhYmxlLCBjb21tb25fdGFibGVzKSkKKwkJCW1hdGNoX2NvbmZpZ190YWJsZSgmZ3VpZCwgdGFibGUsIGFyY2hfdGFibGVzKTsKKworCQl0YWJsZXAgKz0gc3o7CisJfQorCXByX2NvbnQoIlxuIik7CisJc2V0X2JpdChFRklfQ09ORklHX1RBQkxFUywgJmVmaS5mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKIGludCBfX2luaXQgZWZpX2NvbmZpZ19pbml0KGVmaV9jb25maWdfdGFibGVfdHlwZV90ICphcmNoX3RhYmxlcykKIHsKLQl2b2lkICpjb25maWdfdGFibGVzLCAqdGFibGVwOwotCWludCBpLCBzejsKKwl2b2lkICpjb25maWdfdGFibGVzOworCWludCBzeiwgcmV0OwogCiAJaWYgKGVmaV9lbmFibGVkKEVGSV82NEJJVCkpCiAJCXN6ID0gc2l6ZW9mKGVmaV9jb25maWdfdGFibGVfNjRfdCk7CkBAIC0zMTMsNDIgKzM1NiwxMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQl0YWJsZXAgPSBjb25maWdfdGFibGVzOwotCXByX2luZm8oIiIpOwotCWZvciAoaSA9IDA7IGkgPCBlZmkuc3lzdGFiLT5ucl90YWJsZXM7IGkrKykgewotCQllZmlfZ3VpZF90IGd1aWQ7Ci0JCXVuc2lnbmVkIGxvbmcgdGFibGU7CisJcmV0ID0gZWZpX2NvbmZpZ19wYXJzZV90YWJsZXMoY29uZmlnX3RhYmxlcywgZWZpLnN5c3RhYi0+bnJfdGFibGVzLCBzeiwKKwkJCQkgICAgICBhcmNoX3RhYmxlcyk7CiAKLQkJaWYgKGVmaV9lbmFibGVkKEVGSV82NEJJVCkpIHsKLQkJCXU2NCB0YWJsZTY0OwotCQkJZ3VpZCA9ICgoZWZpX2NvbmZpZ190YWJsZV82NF90ICopdGFibGVwKS0+Z3VpZDsKLQkJCXRhYmxlNjQgPSAoKGVmaV9jb25maWdfdGFibGVfNjRfdCAqKXRhYmxlcCktPnRhYmxlOwotCQkJdGFibGUgPSB0YWJsZTY0OwotI2lmbmRlZiBDT05GSUdfNjRCSVQKLQkJCWlmICh0YWJsZTY0ID4+IDMyKSB7Ci0JCQkJcHJfY29udCgiXG4iKTsKLQkJCQlwcl9lcnIoIlRhYmxlIGxvY2F0ZWQgYWJvdmUgNEdCLCBkaXNhYmxpbmcgRUZJLlxuIik7Ci0JCQkJZWFybHlfbWVtdW5tYXAoY29uZmlnX3RhYmxlcywKLQkJCQkJICAgICAgIGVmaS5zeXN0YWItPm5yX3RhYmxlcyAqIHN6KTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLSNlbmRpZgotCQl9IGVsc2UgewotCQkJZ3VpZCA9ICgoZWZpX2NvbmZpZ190YWJsZV8zMl90ICopdGFibGVwKS0+Z3VpZDsKLQkJCXRhYmxlID0gKChlZmlfY29uZmlnX3RhYmxlXzMyX3QgKil0YWJsZXApLT50YWJsZTsKLQkJfQotCi0JCWlmICghbWF0Y2hfY29uZmlnX3RhYmxlKCZndWlkLCB0YWJsZSwgY29tbW9uX3RhYmxlcykpCi0JCQltYXRjaF9jb25maWdfdGFibGUoJmd1aWQsIHRhYmxlLCBhcmNoX3RhYmxlcyk7Ci0KLQkJdGFibGVwICs9IHN6OwotCX0KLQlwcl9jb250KCJcbiIpOwogCWVhcmx5X21lbXVubWFwKGNvbmZpZ190YWJsZXMsIGVmaS5zeXN0YWItPm5yX3RhYmxlcyAqIHN6KTsKLQotCXNldF9iaXQoRUZJX0NPTkZJR19UQUJMRVMsICZlZmkuZmxhZ3MpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogI2lmZGVmIENPTkZJR19FRklfVkFSU19NT0RVTEUKQEAgLTQwMyw4ICs0MTUsNyBAQAogCXU2NCB2YWw7CiAJaW50IGksIGxlbjsKIAotCWlmIChkZXB0aCAhPSAxIHx8Ci0JICAgIChzdHJjbXAodW5hbWUsICJjaG9zZW4iKSAhPSAwICYmIHN0cmNtcCh1bmFtZSwgImNob3NlbkAwIikgIT0gMCkpCisJaWYgKGRlcHRoICE9IDEgfHwgc3RyY21wKHVuYW1lLCAiY2hvc2VuIikgIT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkdF9wYXJhbXMpOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaXZhcnMuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2VmaXZhcnMuYwppbmRleCBmMjU2ZWNkLi43YjJlMDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9lZml2YXJzLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvZWZpdmFycy5jCkBAIC0zOSw3ICszOSw3IEBACiAgKiAgIGZpeCBsb2NraW5nIHBlciBQZXRlciBDaHViYidzIGZpbmRpbmdzCiAgKgogICogIDI1IE1hciAyMDAyIC0gTWF0dCBEb21zY2ggPE1hdHRfRG9tc2NoQGRlbGwuY29tPgotICogICBtb3ZlIHV1aWRfdW5wYXJzZSgpIHRvIGluY2x1ZGUvYXNtLWlhNjQvZWZpLmg6ZWZpX2d1aWRfdW5wYXJzZSgpCisgKiAgIG1vdmUgdXVpZF91bnBhcnNlKCkgdG8gaW5jbHVkZS9hc20taWE2NC9lZmkuaDplZmlfZ3VpZF90b19zdHIoKQogICoKICAqICAxMiBGZWIgMjAwMiAtIE1hdHQgRG9tc2NoIDxNYXR0X0RvbXNjaEBkZWxsLmNvbT4KICAqICAgdXNlIGxpc3RfZm9yX2VhY2hfc2FmZSB3aGVuIGRlbGV0aW5nIHZhcnMuCkBAIC0xMjgsNyArMTI4LDcgQEAKIAlpZiAoIWVudHJ5IHx8ICFidWYpCiAJCXJldHVybiAwOwogCi0JZWZpX2d1aWRfdW5wYXJzZSgmdmFyLT5WZW5kb3JHdWlkLCBzdHIpOworCWVmaV9ndWlkX3RvX3N0cigmdmFyLT5WZW5kb3JHdWlkLCBzdHIpOwogCXN0ciArPSBzdHJsZW4oc3RyKTsKIAlzdHIgKz0gc3ByaW50ZihzdHIsICJcbiIpOwogCkBAIC01NjksNyArNTY5LDcgQEAKIAkgICBwcml2YXRlIHZhcmlhYmxlcyBmcm9tIGFub3RoZXIncy4gICAgICAgICAqLwogCiAJKihzaG9ydF9uYW1lICsgc3RybGVuKHNob3J0X25hbWUpKSA9ICctJzsKLQllZmlfZ3VpZF91bnBhcnNlKCZuZXdfdmFyLT52YXIuVmVuZG9yR3VpZCwKKwllZmlfZ3VpZF90b19zdHIoJm5ld192YXItPnZhci5WZW5kb3JHdWlkLAogCQkJIHNob3J0X25hbWUgKyBzdHJsZW4oc2hvcnRfbmFtZSkpOwogCiAJbmV3X3Zhci0+a29iai5rc2V0ID0gZWZpdmFyc19rc2V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9NYWtlZmlsZSBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvTWFrZWZpbGUKaW5kZXggYjE0YmMyYi4uODkwMmY1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL01ha2VmaWxlCkBAIC0yNCwzICsyNCwxNyBAQAogbGliLSQoQ09ORklHX0VGSV9BUk1TVFVCKQkrPSBhcm0tc3R1Yi5vIGZkdC5vCiAKIENGTEFHU19mZHQubwkJCSs9IC1JJChzcmN0cmVlKS9zY3JpcHRzL2R0Yy9saWJmZHQvCisKKyMKKyMgYXJtNjQgcHV0cyB0aGUgc3R1YiBpbiB0aGUga2VybmVsIHByb3Blciwgd2hpY2ggd2lsbCB1bm5lY2Vzc2FyaWx5IHJldGFpbiBhbGwKKyMgY29kZSBpbmRlZmluaXRlbHkgdW5sZXNzIGl0IGlzIGFubm90YXRlZCBhcyBfX2luaXQvX19pbml0ZGF0YS9fX2luaXRjb25zdCBldGMuCisjIFNvIGxldCdzIGFwcGx5IHRoZSBfX2luaXQgYW5ub3RhdGlvbnMgYXQgdGhlIHNlY3Rpb24gbGV2ZWwsIGJ5IHByZWZpeGluZworIyB0aGUgc2VjdGlvbiBuYW1lcyBkaXJlY3RseS4gVGhpcyB3aWxsIGVuc3VyZSB0aGF0IGV2ZW4gYWxsIHRoZSBpbmxpbmUgc3RyaW5nCisjIGxpdGVyYWxzIGFyZSBjb3ZlcmVkLgorIworZXh0cmEtJChDT05GSUdfQVJNNjQpCQk6PSAkKGxpYi15KQorbGliLSQoQ09ORklHX0FSTTY0KQkJOj0gJChwYXRzdWJzdCAlLm8sJS5pbml0Lm8sJChsaWIteSkpCisKK09CSkNPUFlGTEFHUyA6PSAtLXByZWZpeC1hbGxvYy1zZWN0aW9ucz0uaW5pdAorJChvYmopLyUuaW5pdC5vOiAkKG9iaikvJS5vIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsb2JqY29weSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvYXJtLXN0dWIuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvYXJtLXN0dWIuYwppbmRleCBlYjQ4YTFhLi5kY2FlNDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2FybS1zdHViLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9hcm0tc3R1Yi5jCkBAIC0xNywxMCArMTcsMTAgQEAKIAogI2luY2x1ZGUgImVmaXN0dWIuaCIKIAotc3RhdGljIGludCBfX2luaXQgZWZpX3NlY3VyZWJvb3RfZW5hYmxlZChlZmlfc3lzdGVtX3RhYmxlX3QgKnN5c190YWJsZV9hcmcpCitzdGF0aWMgaW50IGVmaV9zZWN1cmVib290X2VuYWJsZWQoZWZpX3N5c3RlbV90YWJsZV90ICpzeXNfdGFibGVfYXJnKQogewotCXN0YXRpYyBlZmlfZ3VpZF90IGNvbnN0IHZhcl9ndWlkIF9faW5pdGNvbnN0ID0gRUZJX0dMT0JBTF9WQVJJQUJMRV9HVUlEOwotCXN0YXRpYyBlZmlfY2hhcjE2X3QgY29uc3QgdmFyX25hbWVbXSBfX2luaXRjb25zdCA9IHsKKwlzdGF0aWMgZWZpX2d1aWRfdCBjb25zdCB2YXJfZ3VpZCA9IEVGSV9HTE9CQUxfVkFSSUFCTEVfR1VJRDsKKwlzdGF0aWMgZWZpX2NoYXIxNl90IGNvbnN0IHZhcl9uYW1lW10gPSB7CiAJCSdTJywgJ2UnLCAnYycsICd1JywgJ3InLCAnZScsICdCJywgJ28nLCAnbycsICd0JywgMCB9OwogCiAJZWZpX2dldF92YXJpYWJsZV90ICpmX2dldHZhciA9IHN5c190YWJsZV9hcmctPnJ1bnRpbWUtPmdldF92YXJpYWJsZTsKQEAgLTE2NCw3ICsxNjQsNyBAQAogICogZm9yIGJvdGggYXJjaGljdGVjdHVyZXMsIHdpdGggdGhlIGFyY2gtc3BlY2lmaWMgY29kZSBwcm92aWRlZCBpbiB0aGUKICAqIGhhbmRsZV9rZXJuZWxfaW1hZ2UoKSBmdW5jdGlvbi4KICAqLwotdW5zaWduZWQgbG9uZyBfX2luaXQgZWZpX2VudHJ5KHZvaWQgKmhhbmRsZSwgZWZpX3N5c3RlbV90YWJsZV90ICpzeXNfdGFibGUsCit1bnNpZ25lZCBsb25nIGVmaV9lbnRyeSh2b2lkICpoYW5kbGUsIGVmaV9zeXN0ZW1fdGFibGVfdCAqc3lzX3RhYmxlLAogCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmltYWdlX2FkZHIpCiB7CiAJZWZpX2xvYWRlZF9pbWFnZV90ICppbWFnZTsKQEAgLTI5NSwzICsyOTUsNjIgQEAKIGZhaWw6CiAJcmV0dXJuIEVGSV9FUlJPUjsKIH0KKworLyoKKyAqIFRoaXMgaXMgdGhlIGJhc2UgYWRkcmVzcyBhdCB3aGljaCB0byBzdGFydCBhbGxvY2F0aW5nIHZpcnR1YWwgbWVtb3J5IHJhbmdlcworICogZm9yIFVFRkkgUnVudGltZSBTZXJ2aWNlcy4gVGhpcyBpcyBpbiB0aGUgbG93IFRUQlIwIHJhbmdlIHNvIHRoYXQgd2UgY2FuIHVzZQorICogYW55IGFsbG9jYXRpb24gd2UgY2hvb3NlLCBhbmQgZWxpbWluYXRlIHRoZSByaXNrIG9mIGEgY29uZmxpY3QgYWZ0ZXIga2V4ZWMuCisgKiBUaGUgdmFsdWUgY2hvc2VuIGlzIHRoZSBsYXJnZXN0IG5vbi16ZXJvIHBvd2VyIG9mIDIgc3VpdGFibGUgZm9yIHRoaXMgcHVycG9zZQorICogYm90aCBvbiAzMi1iaXQgYW5kIDY0LWJpdCBBUk0gQ1BVcywgdG8gbWF4aW1pemUgdGhlIGxpa2VsaWhvb2QgdGhhdCBpdCBjYW4KKyAqIGJlIG1hcHBlZCBlZmZpY2llbnRseS4KKyAqLworI2RlZmluZSBFRklfUlRfVklSVFVBTF9CQVNFCTB4NDAwMDAwMDAKKworLyoKKyAqIGVmaV9nZXRfdmlydG1hcCgpIC0gY3JlYXRlIGEgdmlydHVhbCBtYXBwaW5nIGZvciB0aGUgRUZJIG1lbW9yeSBtYXAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHBvcHVsYXRlcyB0aGUgdmlydF9hZGRyIGZpZWxkcyBvZiBhbGwgbWVtb3J5IHJlZ2lvbiBkZXNjcmlwdG9ycworICogaW4gQG1lbW9yeV9tYXAgd2hvc2UgRUZJX01FTU9SWV9SVU5USU1FIGF0dHJpYnV0ZSBpcyBzZXQuIFRob3NlIGRlc2NyaXB0b3JzCisgKiBhcmUgYWxzbyBjb3BpZWQgdG8gQHJ1bnRpbWVfbWFwLCBhbmQgdGhlaXIgdG90YWwgY291bnQgaXMgcmV0dXJuZWQgaW4gQGNvdW50LgorICovCit2b2lkIGVmaV9nZXRfdmlydG1hcChlZmlfbWVtb3J5X2Rlc2NfdCAqbWVtb3J5X21hcCwgdW5zaWduZWQgbG9uZyBtYXBfc2l6ZSwKKwkJICAgICB1bnNpZ25lZCBsb25nIGRlc2Nfc2l6ZSwgZWZpX21lbW9yeV9kZXNjX3QgKnJ1bnRpbWVfbWFwLAorCQkgICAgIGludCAqY291bnQpCit7CisJdTY0IGVmaV92aXJ0X2Jhc2UgPSBFRklfUlRfVklSVFVBTF9CQVNFOworCWVmaV9tZW1vcnlfZGVzY190ICpvdXQgPSBydW50aW1lX21hcDsKKwlpbnQgbDsKKworCWZvciAobCA9IDA7IGwgPCBtYXBfc2l6ZTsgbCArPSBkZXNjX3NpemUpIHsKKwkJZWZpX21lbW9yeV9kZXNjX3QgKmluID0gKHZvaWQgKiltZW1vcnlfbWFwICsgbDsKKwkJdTY0IHBhZGRyLCBzaXplOworCisJCWlmICghKGluLT5hdHRyaWJ1dGUgJiBFRklfTUVNT1JZX1JVTlRJTUUpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogTWFrZSB0aGUgbWFwcGluZyBjb21wYXRpYmxlIHdpdGggNjRrIHBhZ2VzOiB0aGlzIGFsbG93cworCQkgKiBhIDRrIHBhZ2Ugc2l6ZSBrZXJuZWwgdG8ga2V4ZWMgYSA2NGsgcGFnZSBzaXplIGtlcm5lbCBhbmQKKwkJICogdmljZSB2ZXJzYS4KKwkJICovCisJCXBhZGRyID0gcm91bmRfZG93bihpbi0+cGh5c19hZGRyLCBTWl82NEspOworCQlzaXplID0gcm91bmRfdXAoaW4tPm51bV9wYWdlcyAqIEVGSV9QQUdFX1NJWkUgKworCQkJCWluLT5waHlzX2FkZHIgLSBwYWRkciwgU1pfNjRLKTsKKworCQkvKgorCQkgKiBBdm9pZCB3YXN0aW5nIG1lbW9yeSBvbiBQVEVzIGJ5IGNob29zaW5nIGEgdmlydHVhbCBiYXNlIHRoYXQKKwkJICogaXMgY29tcGF0aWJsZSB3aXRoIHNlY3Rpb24gbWFwcGluZ3MgaWYgdGhpcyByZWdpb24gaGFzIHRoZQorCQkgKiBhcHByb3ByaWF0ZSBzaXplIGFuZCBwaHlzaWNhbCBhbGlnbm1lbnQuIChTZWN0aW9ucyBhcmUgMiBNQgorCQkgKiBvbiA0ayBncmFudWxlIGtlcm5lbHMpCisJCSAqLworCQlpZiAoSVNfQUxJR05FRChpbi0+cGh5c19hZGRyLCBTWl8yTSkgJiYgc2l6ZSA+PSBTWl8yTSkKKwkJCWVmaV92aXJ0X2Jhc2UgPSByb3VuZF91cChlZmlfdmlydF9iYXNlLCBTWl8yTSk7CisKKwkJaW4tPnZpcnRfYWRkciA9IGVmaV92aXJ0X2Jhc2UgKyBpbi0+cGh5c19hZGRyIC0gcGFkZHI7CisJCWVmaV92aXJ0X2Jhc2UgKz0gc2l6ZTsKKworCQltZW1jcHkob3V0LCBpbiwgZGVzY19zaXplKTsKKwkJb3V0ID0gKHZvaWQgKilvdXQgKyBkZXNjX3NpemU7CisJCSsrKmNvdW50OworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaS1zdHViLWhlbHBlci5jCmluZGV4IGE5MjBmZWMuLmFmNWQ2M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZWZpLXN0dWItaGVscGVyLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmktc3R1Yi1oZWxwZXIuYwpAQCAtMzIsNiArMzIsMTUgQEAKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19jaHVua19zaXplID0gRUZJX1JFQURfQ0hVTktfU0laRTsKIAorLyoKKyAqIEFsbG93IHRoZSBwbGF0Zm9ybSB0byBvdmVycmlkZSB0aGUgYWxsb2NhdGlvbiBncmFudWxhcml0eTogdGhpcyBhbGxvd3MKKyAqIHN5c3RlbXMgdGhhdCBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIHJ1biB3aXRoIGEgbGFyZ2VyIHBhZ2Ugc2l6ZSB0byBkZWFsCisgKiB3aXRoIHRoZSBhbGxvY2F0aW9ucyBmb3IgaW5pdHJkIGFuZCBmZHQgbW9yZSBlZmZpY2llbnRseS4KKyAqLworI2lmbmRlZiBFRklfQUxMT0NfQUxJR04KKyNkZWZpbmUgRUZJX0FMTE9DX0FMSUdOCQlFRklfUEFHRV9TSVpFCisjZW5kaWYKKwogc3RydWN0IGZpbGVfaW5mbyB7CiAJZWZpX2ZpbGVfaGFuZGxlX3QgKmhhbmRsZTsKIAl1NjQgc2l6ZTsKQEAgLTY2LDI1ICs3NSwyOSBAQAogCXVuc2lnbmVkIGxvbmcga2V5OwogCXUzMiBkZXNjX3ZlcnNpb247CiAKLQkqbWFwX3NpemUgPSBzaXplb2YoKm0pICogMzI7Ci1hZ2FpbjoKKwkqbWFwX3NpemUgPSAwOworCSpkZXNjX3NpemUgPSAwOworCWtleSA9IDA7CisJc3RhdHVzID0gZWZpX2NhbGxfZWFybHkoZ2V0X21lbW9yeV9tYXAsIG1hcF9zaXplLCBOVUxMLAorCQkJCSZrZXksIGRlc2Nfc2l6ZSwgJmRlc2NfdmVyc2lvbik7CisJaWYgKHN0YXR1cyAhPSBFRklfQlVGRkVSX1RPT19TTUFMTCkKKwkJcmV0dXJuIEVGSV9MT0FEX0VSUk9SOworCiAJLyoKIAkgKiBBZGQgYW4gYWRkaXRpb25hbCBlZmlfbWVtb3J5X2Rlc2NfdCBiZWNhdXNlIHdlJ3JlIGRvaW5nIGFuCiAJICogYWxsb2NhdGlvbiB3aGljaCBtYXkgYmUgaW4gYSBuZXcgZGVzY3JpcHRvciByZWdpb24uCiAJICovCi0JKm1hcF9zaXplICs9IHNpemVvZigqbSk7CisJKm1hcF9zaXplICs9ICpkZXNjX3NpemU7CiAJc3RhdHVzID0gZWZpX2NhbGxfZWFybHkoYWxsb2NhdGVfcG9vbCwgRUZJX0xPQURFUl9EQVRBLAogCQkJCSptYXBfc2l6ZSwgKHZvaWQgKiopJm0pOwogCWlmIChzdGF0dXMgIT0gRUZJX1NVQ0NFU1MpCiAJCWdvdG8gZmFpbDsKIAotCSpkZXNjX3NpemUgPSAwOwotCWtleSA9IDA7CiAJc3RhdHVzID0gZWZpX2NhbGxfZWFybHkoZ2V0X21lbW9yeV9tYXAsIG1hcF9zaXplLCBtLAogCQkJCSZrZXksIGRlc2Nfc2l6ZSwgJmRlc2NfdmVyc2lvbik7CiAJaWYgKHN0YXR1cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkgewogCQllZmlfY2FsbF9lYXJseShmcmVlX3Bvb2wsIG0pOwotCQlnb3RvIGFnYWluOworCQlyZXR1cm4gRUZJX0xPQURfRVJST1I7CiAJfQogCiAJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykKQEAgLTEwMSw3ICsxMTQsNyBAQAogfQogCiAKLXVuc2lnbmVkIGxvbmcgX19pbml0IGdldF9kcmFtX2Jhc2UoZWZpX3N5c3RlbV90YWJsZV90ICpzeXNfdGFibGVfYXJnKQordW5zaWduZWQgbG9uZyBnZXRfZHJhbV9iYXNlKGVmaV9zeXN0ZW1fdGFibGVfdCAqc3lzX3RhYmxlX2FyZykKIHsKIAllZmlfc3RhdHVzX3Qgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgbWFwX3NpemU7CkBAIC0xNTAsMTAgKzE2MywxMCBAQAogCSAqIGEgc3BlY2lmaWMgYWRkcmVzcy4gIFdlIGFyZSBkb2luZyBwYWdlLWJhc2VkIGFsbG9jYXRpb25zLAogCSAqIHNvIHdlIG11c3QgYmUgYWxpZ25lZCB0byBhIHBhZ2UuCiAJICovCi0JaWYgKGFsaWduIDwgRUZJX1BBR0VfU0laRSkKLQkJYWxpZ24gPSBFRklfUEFHRV9TSVpFOworCWlmIChhbGlnbiA8IEVGSV9BTExPQ19BTElHTikKKwkJYWxpZ24gPSBFRklfQUxMT0NfQUxJR047CiAKLQlucl9wYWdlcyA9IHJvdW5kX3VwKHNpemUsIEVGSV9QQUdFX1NJWkUpIC8gRUZJX1BBR0VfU0laRTsKKwlucl9wYWdlcyA9IHJvdW5kX3VwKHNpemUsIEVGSV9BTExPQ19BTElHTikgLyBFRklfUEFHRV9TSVpFOwogYWdhaW46CiAJZm9yIChpID0gMDsgaSA8IG1hcF9zaXplIC8gZGVzY19zaXplOyBpKyspIHsKIAkJZWZpX21lbW9yeV9kZXNjX3QgKmRlc2M7CkBAIC0yMzUsMTAgKzI0OCwxMCBAQAogCSAqIGEgc3BlY2lmaWMgYWRkcmVzcy4gIFdlIGFyZSBkb2luZyBwYWdlLWJhc2VkIGFsbG9jYXRpb25zLAogCSAqIHNvIHdlIG11c3QgYmUgYWxpZ25lZCB0byBhIHBhZ2UuCiAJICovCi0JaWYgKGFsaWduIDwgRUZJX1BBR0VfU0laRSkKLQkJYWxpZ24gPSBFRklfUEFHRV9TSVpFOworCWlmIChhbGlnbiA8IEVGSV9BTExPQ19BTElHTikKKwkJYWxpZ24gPSBFRklfQUxMT0NfQUxJR047CiAKLQlucl9wYWdlcyA9IHJvdW5kX3VwKHNpemUsIEVGSV9QQUdFX1NJWkUpIC8gRUZJX1BBR0VfU0laRTsKKwlucl9wYWdlcyA9IHJvdW5kX3VwKHNpemUsIEVGSV9BTExPQ19BTElHTikgLyBFRklfUEFHRV9TSVpFOwogCWZvciAoaSA9IDA7IGkgPCBtYXBfc2l6ZSAvIGRlc2Nfc2l6ZTsgaSsrKSB7CiAJCWVmaV9tZW1vcnlfZGVzY190ICpkZXNjOwogCQl1bnNpZ25lZCBsb25nIG0gPSAodW5zaWduZWQgbG9uZyltYXA7CkBAIC0yOTIsNyArMzA1LDcgQEAKIAlpZiAoIXNpemUpCiAJCXJldHVybjsKIAotCW5yX3BhZ2VzID0gcm91bmRfdXAoc2l6ZSwgRUZJX1BBR0VfU0laRSkgLyBFRklfUEFHRV9TSVpFOworCW5yX3BhZ2VzID0gcm91bmRfdXAoc2l6ZSwgRUZJX0FMTE9DX0FMSUdOKSAvIEVGSV9QQUdFX1NJWkU7CiAJZWZpX2NhbGxfZWFybHkoZnJlZV9wYWdlcywgYWRkciwgbnJfcGFnZXMpOwogfQogCkBAIC01NjEsNyArNTc0LDcgQEAKIAkgKiB0byB0aGUgcHJlZmVycmVkIGFkZHJlc3MuICBJZiB0aGF0IGZhaWxzLCBhbGxvY2F0ZSBhcyBsb3cKIAkgKiBhcyBwb3NzaWJsZSB3aGlsZSByZXNwZWN0aW5nIHRoZSByZXF1aXJlZCBhbGlnbm1lbnQuCiAJICovCi0JbnJfcGFnZXMgPSByb3VuZF91cChhbGxvY19zaXplLCBFRklfUEFHRV9TSVpFKSAvIEVGSV9QQUdFX1NJWkU7CisJbnJfcGFnZXMgPSByb3VuZF91cChhbGxvY19zaXplLCBFRklfQUxMT0NfQUxJR04pIC8gRUZJX1BBR0VfU0laRTsKIAlzdGF0dXMgPSBlZmlfY2FsbF9lYXJseShhbGxvY2F0ZV9wYWdlcywKIAkJCQlFRklfQUxMT0NBVEVfQUREUkVTUywgRUZJX0xPQURFUl9EQVRBLAogCQkJCW5yX3BhZ2VzLCAmZWZpX2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9lZmlzdHViLmggYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaAppbmRleCAzMDRhYjI5Li4yYmUxMDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaAorKysgYi9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2VmaXN0dWIuaApAQCAtMzksNCArMzksOCBAQAogCiB2b2lkICpnZXRfZmR0KGVmaV9zeXN0ZW1fdGFibGVfdCAqc3lzX3RhYmxlKTsKIAordm9pZCBlZmlfZ2V0X3ZpcnRtYXAoZWZpX21lbW9yeV9kZXNjX3QgKm1lbW9yeV9tYXAsIHVuc2lnbmVkIGxvbmcgbWFwX3NpemUsCisJCSAgICAgdW5zaWduZWQgbG9uZyBkZXNjX3NpemUsIGVmaV9tZW1vcnlfZGVzY190ICpydW50aW1lX21hcCwKKwkJICAgICBpbnQgKmNvdW50KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2ZkdC5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvbGlic3R1Yi9mZHQuYwppbmRleCBjODQ2YTk2Li45MWRhNTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9saWJzdHViL2ZkdC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL2xpYnN0dWIvZmR0LmMKQEAgLTE0LDYgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC9saWJmZHQuaD4KICNpbmNsdWRlIDxhc20vZWZpLmg+CiAKKyNpbmNsdWRlICJlZmlzdHViLmgiCisKIGVmaV9zdGF0dXNfdCB1cGRhdGVfZmR0KGVmaV9zeXN0ZW1fdGFibGVfdCAqc3lzX3RhYmxlLCB2b2lkICpvcmlnX2ZkdCwKIAkJCXVuc2lnbmVkIGxvbmcgb3JpZ19mZHRfc2l6ZSwKIAkJCXZvaWQgKmZkdCwgaW50IG5ld19mZHRfc2l6ZSwgY2hhciAqY21kbGluZV9wdHIsCkBAIC0xOTMsOSArMTk1LDI2IEBACiAJdW5zaWduZWQgbG9uZyBtYXBfc2l6ZSwgZGVzY19zaXplOwogCXUzMiBkZXNjX3ZlcjsKIAl1bnNpZ25lZCBsb25nIG1tYXBfa2V5OwotCWVmaV9tZW1vcnlfZGVzY190ICptZW1vcnlfbWFwOworCWVmaV9tZW1vcnlfZGVzY190ICptZW1vcnlfbWFwLCAqcnVudGltZV9tYXA7CiAJdW5zaWduZWQgbG9uZyBuZXdfZmR0X3NpemU7CiAJZWZpX3N0YXR1c190IHN0YXR1czsKKwlpbnQgcnVudGltZV9lbnRyeV9jb3VudCA9IDA7CisKKwkvKgorCSAqIEdldCBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgbWVtb3J5IG1hcCB0aGF0IHdlIHdpbGwgdXNlIHRvIHByZXBhcmUKKwkgKiB0aGUgaW5wdXQgZm9yIFNldFZpcnR1YWxBZGRyZXNzTWFwKCkuIFdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQKKwkgKiBzdWJzZXF1ZW50IGFsbG9jYXRpb25zIGFkZGluZyBlbnRyaWVzLCBzaW5jZSB0aGV5IGNvdWxkIG5vdCBhZmZlY3QKKwkgKiB0aGUgbnVtYmVyIG9mIEVGSV9NRU1PUllfUlVOVElNRSByZWdpb25zLgorCSAqLworCXN0YXR1cyA9IGVmaV9nZXRfbWVtb3J5X21hcChzeXNfdGFibGUsICZydW50aW1lX21hcCwgJm1hcF9zaXplLAorCQkJCSAgICAmZGVzY19zaXplLCAmZGVzY192ZXIsICZtbWFwX2tleSk7CisJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgeworCQlwcl9lZmlfZXJyKHN5c190YWJsZSwgIlVuYWJsZSB0byByZXRyaWV2ZSBVRUZJIG1lbW9yeSBtYXAuXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlwcl9lZmkoc3lzX3RhYmxlLAorCSAgICAgICAiRXhpdGluZyBib290IHNlcnZpY2VzIGFuZCBpbnN0YWxsaW5nIHZpcnR1YWwgYWRkcmVzcyBtYXAuLi5cbiIpOwogCiAJLyoKIAkgKiBFc3RpbWF0ZSBzaXplIG9mIG5ldyBGRFQsIGFuZCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGl0LiBXZQpAQCAtMjQ4LDEyICsyNjcsNDggQEAKIAkJfQogCX0KIAorCS8qCisJICogVXBkYXRlIHRoZSBtZW1vcnkgbWFwIHdpdGggdmlydHVhbCBhZGRyZXNzZXMuIFRoZSBmdW5jdGlvbiB3aWxsIGFsc28KKwkgKiBwb3B1bGF0ZSBAcnVudGltZV9tYXAgd2l0aCBjb3BpZXMgb2YganVzdCB0aGUgRUZJX01FTU9SWV9SVU5USU1FCisJICogZW50cmllcyBzbyB0aGF0IHdlIGNhbiBwYXNzIGl0IHN0cmFpZ2h0IGludG8gU2V0VmlydHVhbEFkZHJlc3NNYXAoKQorCSAqLworCWVmaV9nZXRfdmlydG1hcChtZW1vcnlfbWFwLCBtYXBfc2l6ZSwgZGVzY19zaXplLCBydW50aW1lX21hcCwKKwkJCSZydW50aW1lX2VudHJ5X2NvdW50KTsKKwogCS8qIE5vdyB3ZSBhcmUgcmVhZHkgdG8gZXhpdF9ib290X3NlcnZpY2VzLiovCiAJc3RhdHVzID0gc3lzX3RhYmxlLT5ib290dGltZS0+ZXhpdF9ib290X3NlcnZpY2VzKGhhbmRsZSwgbW1hcF9rZXkpOwogCisJaWYgKHN0YXR1cyA9PSBFRklfU1VDQ0VTUykgeworCQllZmlfc2V0X3ZpcnR1YWxfYWRkcmVzc19tYXBfdCAqc3ZhbTsKIAotCWlmIChzdGF0dXMgPT0gRUZJX1NVQ0NFU1MpCi0JCXJldHVybiBzdGF0dXM7CisJCS8qIEluc3RhbGwgdGhlIG5ldyB2aXJ0dWFsIGFkZHJlc3MgbWFwICovCisJCXN2YW0gPSBzeXNfdGFibGUtPnJ1bnRpbWUtPnNldF92aXJ0dWFsX2FkZHJlc3NfbWFwOworCQlzdGF0dXMgPSBzdmFtKHJ1bnRpbWVfZW50cnlfY291bnQgKiBkZXNjX3NpemUsIGRlc2Nfc2l6ZSwKKwkJCSAgICAgIGRlc2NfdmVyLCBydW50aW1lX21hcCk7CisKKwkJLyoKKwkJICogV2UgYXJlIGJleW9uZCB0aGUgcG9pbnQgb2Ygbm8gcmV0dXJuIGhlcmUsIHNvIGlmIHRoZSBjYWxsIHRvCisJCSAqIFNldFZpcnR1YWxBZGRyZXNzTWFwKCkgZmFpbGVkLCB3ZSBuZWVkIHRvIHNpZ25hbCB0aGF0IHRvIHRoZQorCQkgKiBpbmNvbWluZyBrZXJuZWwgYnV0IHByb2NlZWQgbm9ybWFsbHkgb3RoZXJ3aXNlLgorCQkgKi8KKwkJaWYgKHN0YXR1cyAhPSBFRklfU1VDQ0VTUykgeworCQkJaW50IGw7CisKKwkJCS8qCisJCQkgKiBTZXQgdGhlIHZpcnR1YWwgYWRkcmVzcyBmaWVsZCBvZiBhbGwKKwkJCSAqIEVGSV9NRU1PUllfUlVOVElNRSBlbnRyaWVzIHRvIDAuIFRoaXMgd2lsbCBzaWduYWwKKwkJCSAqIHRoZSBpbmNvbWluZyBrZXJuZWwgdGhhdCBubyB2aXJ0dWFsIHRyYW5zbGF0aW9uIGhhcworCQkJICogYmVlbiBpbnN0YWxsZWQuCisJCQkgKi8KKwkJCWZvciAobCA9IDA7IGwgPCBtYXBfc2l6ZTsgbCArPSBkZXNjX3NpemUpIHsKKwkJCQllZmlfbWVtb3J5X2Rlc2NfdCAqcCA9ICh2b2lkICopbWVtb3J5X21hcCArIGw7CisKKwkJCQlpZiAocC0+YXR0cmlidXRlICYgRUZJX01FTU9SWV9SVU5USU1FKQorCQkJCQlwLT52aXJ0X2FkZHIgPSAwOworCQkJfQorCQl9CisJCXJldHVybiBFRklfU1VDQ0VTUzsKKwl9CiAKIAlwcl9lZmlfZXJyKHN5c190YWJsZSwgIkV4aXQgYm9vdCBzZXJ2aWNlcyBmYWlsZWQuXG4iKTsKIApAQCAtMjY0LDYgKzMxOSw3IEBACiAJZWZpX2ZyZWUoc3lzX3RhYmxlLCBuZXdfZmR0X3NpemUsICpuZXdfZmR0X2FkZHIpOwogCiBmYWlsOgorCXN5c190YWJsZS0+Ym9vdHRpbWUtPmZyZWVfcG9vbChydW50aW1lX21hcCk7CiAJcmV0dXJuIEVGSV9MT0FEX0VSUk9SOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9ydW50aW1lLW1hcC5jIGIvZHJpdmVycy9maXJtd2FyZS9lZmkvcnVudGltZS1tYXAuYwppbmRleCAwMThjMjlhLi44N2I4ZTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VmaS9ydW50aW1lLW1hcC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpL3J1bnRpbWUtbWFwLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogCiAJcmV0dXJuIDA7CiBvdXRfYWRkX2VudHJ5OgotCWZvciAoaiA9IGkgLSAxOyBqID4gMDsgai0tKSB7CisJZm9yIChqID0gaSAtIDE7IGogPj0gMDsgai0tKSB7CiAJCWVudHJ5ID0gKihtYXBfZW50cmllcyArIGopOwogCQlrb2JqZWN0X3B1dCgmZW50cnktPmtvYmopOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnIGIvZHJpdmVycy9ncGlvL0tjb25maWcKaW5kZXggNjMzZWMyMS4uYzFlMmNhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL0tjb25maWcKKysrIGIvZHJpdmVycy9ncGlvL0tjb25maWcKQEAgLTE5Nyw5ICsxOTcsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbAogCSAgYmUgY2FsbGVkIGY3MTg4eC1ncGlvLgogCitjb25maWcgR1BJT19NQjg2UzdYCisJYm9vbCAiR1BJTyBzdXBwb3J0IGZvciBGdWppdHN1IE1CODZTN3ggUGxhdGZvcm1zIgorCWRlcGVuZHMgb24gQVJDSF9NQjg2UzdYCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgdGhlIEdQSU8gY29udHJvbGxlciBpbiBGdWppdHN1IE1CODZTNzAgU29Dcy4KKwogY29uZmlnIEdQSU9fTU9YQVJUCiAJYm9vbCAiTU9YQVJUIEdQSU8gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfTU9YQVJUCisJc2VsZWN0IEdQSU9fR0VORVJJQwogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgR1BJTyBkcml2ZXIgZm9yCiAJICBNT1hBIEFSVCBTb0MgZGV2aWNlcy4KQEAgLTI4NSw2ICsyOTIsNyBAQAogY29uZmlnIEdQSU9fUkNBUgogCXRyaXN0YXRlICJSZW5lc2FzIFItQ2FyIEdQSU8iCiAJZGVwZW5kcyBvbiBBUk0gJiYgKEFSQ0hfU0hNT0JJTEUgfHwgQ09NUElMRV9URVNUKQorCXNlbGVjdCBHUElPTElCX0lSUUNISVAKIAloZWxwCiAJICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCBHUElPIG9uIFJlbmVzYXMgUi1DYXIgU29Dcy4KIApAQCAtMzY1LDkgKzM3MywxNyBAQAogCSAgdGhlIGdlbmVyaWMgZmxhc2ggY29udHJvbGxlcidzIGFkZHJlc3MgYW5kIGRhdGEgcGlucy4gU2F5IHllcwogCSAgaGVyZSB0byBlbmFibGUgdGhlIEdGQyBHUElPIGZ1bmN0aW9uYWxpdHkuCiAKK2NvbmZpZyBHUElPX1hHRU5FX1NCCisJdHJpc3RhdGUgIkFQTSBYLUdlbmUgR1BJTyBzdGFuZGJ5IGNvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfWEdFTkUgJiYgT0ZfR1BJTworCXNlbGVjdCBHUElPX0dFTkVSSUMKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgR1BJTyBibG9jayB3aXRoaW4gdGhlIEFQTSBYLUdlbmUKKwkgIFN0YW5kYnkgRG9tYWluLiBTYXkgeWVzIGhlcmUgdG8gZW5hYmxlIHRoZSBHUElPIGZ1bmN0aW9uYWxpdHkuCisKIGNvbmZpZyBHUElPX1hJTElOWAotCWJvb2wgIlhpbGlueCBHUElPIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBQUENfT0YgfHwgTUlDUk9CTEFaRSB8fCBBUkNIX1pZTlEKKwl0cmlzdGF0ZSAiWGlsaW54IEdQSU8gc3VwcG9ydCIKKwlkZXBlbmRzIG9uIE9GX0dQSU8gJiYgKFBQQyB8fCBNSUNST0JMQVpFIHx8IEFSQ0hfWllOUSB8fCBYODYpCiAJaGVscAogCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgdGhlIFhpbGlueCBGUEdBIEdQSU8gZGV2aWNlCiAKQEAgLTM5NCwyNSArNDEwLDMyIEBACiAJICBTYXkgeWVzIGhlcmUgdG8gc3VwcG9ydCB0aGUgTkVDIFZSNDEwMCBzZXJpZXMgR2VuZXJhbC1wdXJwb3NlIEkvTyBVaW50CiAKIGNvbmZpZyBHUElPX1NDSAotCXRyaXN0YXRlICJJbnRlbCBTQ0gvVHVubmVsQ3JlZWsvQ2VudGVydG9uIEdQSU8iCisJdHJpc3RhdGUgIkludGVsIFNDSC9UdW5uZWxDcmVlay9DZW50ZXJ0b24vUXVhcmsgWDEwMDAgR1BJTyIKIAlkZXBlbmRzIG9uIFBDSSAmJiBYODYKIAlzZWxlY3QgTUZEX0NPUkUKIAlzZWxlY3QgTFBDX1NDSAogCWhlbHAKIAkgIFNheSB5ZXMgaGVyZSB0byBzdXBwb3J0IEdQSU8gaW50ZXJmYWNlIG9uIEludGVsIFBvdWxzYm8gU0NILAotCSAgSW50ZWwgVHVubmVsIENyZWVrIHByb2Nlc3NvciBvciBJbnRlbCBDZW50ZXJ0b24gcHJvY2Vzc29yLgorCSAgSW50ZWwgVHVubmVsIENyZWVrIHByb2Nlc3NvciwgSW50ZWwgQ2VudGVydG9uIHByb2Nlc3NvciBvcgorCSAgSW50ZWwgUXVhcmsgWDEwMDAgU29DLgorCiAJICBUaGUgSW50ZWwgU0NIIGNvbnRhaW5zIGEgdG90YWwgb2YgMTQgR1BJTyBwaW5zLiBUZW4gR1BJT3MgYXJlCiAJICBwb3dlcmVkIGJ5IHRoZSBjb3JlIHBvd2VyIHJhaWwgYW5kIGFyZSB0dXJuZWQgb2ZmIGR1cmluZyBzbGVlcAogCSAgbW9kZXMgKFMzIGFuZCBoaWdoZXIpLiBUaGUgcmVtYWluaW5nIGZvdXIgR1BJT3MgYXJlIHBvd2VyZWQgYnkKIAkgIHRoZSBJbnRlbCBTQ0ggc3VzcGVuZCBwb3dlciBzdXBwbHkuIFRoZXNlIEdQSU9zIHJlbWFpbgogCSAgYWN0aXZlIGR1cmluZyBTMy4gVGhlIHN1c3BlbmQgcG93ZXJlZCBHUElPcyBjYW4gYmUgdXNlZCB0byB3YWtlIHRoZQogCSAgc3lzdGVtIGZyb20gdGhlIFN1c3BlbmQtdG8tUkFNIHN0YXRlLgorCiAJICBUaGUgSW50ZWwgVHVubmVsIENyZWVrIHByb2Nlc3NvciBoYXMgNSBHUElPcyBwb3dlcmVkIGJ5IHRoZQogCSAgY29yZSBwb3dlciByYWlsIGFuZCA5IGZyb20gc3VzcGVuZCBwb3dlciBzdXBwbHkuCisKIAkgIFRoZSBJbnRlbCBDZW50ZXJ0b24gcHJvY2Vzc29yIGhhcyBhIHRvdGFsIG9mIDMwIEdQSU8gcGlucy4KIAkgIFR3ZW50eS1vbmUgYXJlIHBvd2VyZWQgYnkgdGhlIGNvcmUgcG93ZXIgcmFpbCBhbmQgOSBmcm9tIHRoZQogCSAgc3VzcGVuZCBwb3dlciBzdXBwbHkuCiAKKwkgIFRoZSBJbnRlbCBRdWFyayBYMTAwMCBTb0MgaGFzIDIgR1BJT3MgcG93ZXJlZCBieSB0aGUgY29yZQorCSAgcG93ZXIgd2VsbCBhbmQgNiBmcm9tIHRoZSBzdXNwZW5kIHBvd2VyIHdlbGwuCisKIGNvbmZpZyBHUElPX0lDSAogCXRyaXN0YXRlICJJbnRlbCBJQ0ggR1BJTyIKIAlkZXBlbmRzIG9uIFBDSSAmJiBYODYKQEAgLTQ1MCw2ICs0NzMsNyBAQAogY29uZmlnIEdQSU9fR0VfRlBHQQogCWJvb2wgIkdFIEZQR0EgYmFzZWQgR1BJTyIKIAlkZXBlbmRzIG9uIEdFX0ZQR0EKKwlzZWxlY3QgR1BJT19HRU5FUklDCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgY29tbW9uIEdQSU8gZnVuY3Rpb25hbGl0eSBwcm92aWRlZCBvbiBzb21lIEdFIFNpbmdsZSBCb2FyZAogCSAgQ29tcHV0ZXJzLgpAQCAtNTE5LDYgKzU0Myw3IEBACiBjb25maWcgR1BJT19NQVg3MzJYCiAJdHJpc3RhdGUgIk1BWDczMTksIE1BWDczMjAtNzMyNyBJMkMgUG9ydCBFeHBhbmRlcnMiCiAJZGVwZW5kcyBvbiBJMkMKKwlzZWxlY3QgSVJRX0RPTUFJTgogCWhlbHAKIAkgIFNheSB5ZXMgaGVyZSB0byBzdXBwb3J0IHRoZSBNQVg3MzE5LCBNQVg3MzIwLTczMjcgc2VyaWVzIG9mIEkyQwogCSAgUG9ydCBFeHBhbmRlcnMuIEVhY2ggSU8gcG9ydCBvbiB0aGVzZSBjaGlwcyBoYXMgYSBmaXhlZCByb2xlIG9mCkBAIC02MTMsNiArNjM4LDcgQEAKIGNvbmZpZyBHUElPX1NYMTUwWAogCWJvb2wgIlNlbXRlY2ggU1gxNTB4IEkyQyBHUElPIGV4cGFuZGVyIgogCWRlcGVuZHMgb24gSTJDPXkKKwlzZWxlY3QgR1BJT0xJQl9JUlFDSElQCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgU2F5IHllcyBoZXJlIHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgU2VtdGVjaCBTWDE1MC1zZXJpZXMgSTJDCkBAIC02MjQsNiArNjUwLDcgQEAKIGNvbmZpZyBHUElPX1NUTVBFCiAJYm9vbCAiU1RNUEUgR1BJT3MiCiAJZGVwZW5kcyBvbiBNRkRfU1RNUEUKKwlkZXBlbmRzIG9uIE9GX0dQSU8KIAlzZWxlY3QgR1BJT0xJQl9JUlFDSElQCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBHUElPcyBmb3VuZCBvbiB0aGUgU1RNUEUgSS9PCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vTWFrZWZpbGUgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKaW5kZXggODE3NTVmMS4uYmRkYTZhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQpAQCAtNDgsNiArNDgsNyBAQAogb2JqLSQoQ09ORklHX0dQSU9fTUFYNzMwMCkJKz0gZ3Bpby1tYXg3MzAwLm8KIG9iai0kKENPTkZJR19HUElPX01BWDczMDEpCSs9IGdwaW8tbWF4NzMwMS5vCiBvYmotJChDT05GSUdfR1BJT19NQVg3MzJYKQkrPSBncGlvLW1heDczMngubworb2JqLSQoQ09ORklHX0dQSU9fTUI4NlM3WCkJKz0gZ3Bpby1tYjg2czd4Lm8KIG9iai0kKENPTkZJR19HUElPX01DMzM4ODApCSs9IGdwaW8tbWMzMzg4MC5vCiBvYmotJChDT05GSUdfR1BJT19NQzlTMDhEWjYwKQkrPSBncGlvLW1jOXMwOGR6NjAubwogb2JqLSQoQ09ORklHX0dQSU9fTUNQMjNTMDgpCSs9IGdwaW8tbWNwMjNzMDgubwpAQCAtMTA1LDYgKzEwNiw3IEBACiBvYmotJChDT05GSUdfR1BJT19XTTgzNTApCSs9IGdwaW8td204MzUwLm8KIG9iai0kKENPTkZJR19HUElPX1dNODk5NCkJKz0gZ3Bpby13bTg5OTQubwogb2JqLSQoQ09ORklHX0dQSU9fWEdFTkUpCSs9IGdwaW8teGdlbmUubworb2JqLSQoQ09ORklHX0dQSU9fWEdFTkVfU0IpCSs9IGdwaW8teGdlbmUtc2Iubwogb2JqLSQoQ09ORklHX0dQSU9fWElMSU5YKQkrPSBncGlvLXhpbGlueC5vCiBvYmotJChDT05GSUdfR1BJT19YVEVOU0EpCSs9IGdwaW8teHRlbnNhLm8KIG9iai0kKENPTkZJR19HUElPX1pFVklPKQkrPSBncGlvLXpldmlvLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLWFtZDgxMTEuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWFtZDgxMTEuYwppbmRleCBkM2QyZDEwLi5kMDBkODE5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tYW1kODExMS5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWFtZDgxMTEuYwpAQCAtMjEzLDYgKzIxMywxMiBAQAogCQlnb3RvIG91dDsKIAl9CiAJZ3AucG0gPSBpb3BvcnRfbWFwKGdwLnBtYmFzZSArIFBNQkFTRV9PRkZTRVQsIFBNQkFTRV9TSVpFKTsKKwlpZiAoIWdwLnBtKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkbid0IG1hcCBpbyBwb3J0IGludG8gaW8gbWVtb3J5XG4iKTsKKwkJcmVsZWFzZV9yZWdpb24oZ3AucG1iYXNlICsgUE1CQVNFX09GRlNFVCwgUE1CQVNFX1NJWkUpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAJZ3AucGRldiA9IHBkZXY7CiAJZ3AuY2hpcC5kZXYgPSAmcGRldi0+ZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1kbG4yLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1kbG4yLmMKaW5kZXggY2UzYzE1NS4uZGJkYjRkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tZGxuMi5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWRsbjIuYwpAQCAtMzk2LDYgKzM5Niw3IEBACiAJCQkgICAgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKIHsKIAlpbnQgcGluLCBpcnE7CisKIAljb25zdCBzdHJ1Y3QgewogCQlfX2xlMTYgY291bnQ7CiAJCV9fdTggdHlwZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1kd2FwYi5jCmluZGV4IGI0ZWI2YTYuLjU4ZmFmMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLWR3YXBiLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tZHdhcGIuYwpAQCAtNDY5LDE1ICs0NjksMTMgQEAKIAlpZiAobnBvcnRzID09IDApCiAJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogCi0JcGRhdGEgPSBremFsbG9jKHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKKwlwZGF0YSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcGRhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBkYXRhKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCXBkYXRhLT5wcm9wZXJ0aWVzID0ga2NhbGxvYyhucG9ydHMsIHNpemVvZigqcHApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBkYXRhLT5wcm9wZXJ0aWVzKSB7Ci0JCWtmcmVlKHBkYXRhKTsKKwlwZGF0YS0+cHJvcGVydGllcyA9IGRldm1fa2NhbGxvYyhkZXYsIG5wb3J0cywgc2l6ZW9mKCpwcCksIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEtPnByb3BlcnRpZXMpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KIAogCXBkYXRhLT5ucG9ydHMgPSBucG9ydHM7CiAKQEAgLTQ5MCw4ICs0ODgsNiBAQAogCQkgICAgcHAtPmlkeCA+PSBEV0FQQl9NQVhfUE9SVFMpIHsKIAkJCWRldl9lcnIoZGV2LCAibWlzc2luZy9pbnZhbGlkIHBvcnQgaW5kZXggZm9yICVzXG4iLAogCQkJCXBvcnRfbnAtPmZ1bGxfbmFtZSk7Ci0JCQlrZnJlZShwZGF0YS0+cHJvcGVydGllcyk7Ci0JCQlrZnJlZShwZGF0YSk7CiAJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAkJfQogCkBAIC01MjMsMTUgKzUxOSw2IEBACiAJcmV0dXJuIHBkYXRhOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHdhcGJfZnJlZV9wZGF0YV9vZihzdHJ1Y3QgZHdhcGJfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCi17Ci0JaWYgKCFJU19FTkFCTEVEKENPTkZJR19PRl9HUElPKSB8fCAhcGRhdGEpCi0JCXJldHVybjsKLQotCWtmcmVlKHBkYXRhLT5wcm9wZXJ0aWVzKTsKLQlrZnJlZShwZGF0YSk7Ci19Ci0KIHN0YXRpYyBpbnQgZHdhcGJfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtNTQwLDQwICs1MjcsMzIgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJc3RydWN0IGR3YXBiX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShkZXYpOwotCWJvb2wgaXNfcGRhdGFfYWxsb2MgPSAhcGRhdGE7CiAKLQlpZiAoaXNfcGRhdGFfYWxsb2MpIHsKKwlpZiAoIXBkYXRhKSB7CiAJCXBkYXRhID0gZHdhcGJfZ3Bpb19nZXRfcGRhdGFfb2YoZGV2KTsKIAkJaWYgKElTX0VSUihwZGF0YSkpCiAJCQlyZXR1cm4gUFRSX0VSUihwZGF0YSk7CiAJfQogCi0JaWYgKCFwZGF0YS0+bnBvcnRzKSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X2VycjsKLQl9CisJaWYgKCFwZGF0YS0+bnBvcnRzKQorCQlyZXR1cm4gLUVOT0RFVjsKIAogCWdwaW8gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpncGlvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFncGlvKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0X2VycjsKLQl9CisJaWYgKCFncGlvKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWdwaW8tPmRldiA9ICZwZGV2LT5kZXY7CiAJZ3Bpby0+bnJfcG9ydHMgPSBwZGF0YS0+bnBvcnRzOwogCiAJZ3Bpby0+cG9ydHMgPSBkZXZtX2tjYWxsb2MoJnBkZXYtPmRldiwgZ3Bpby0+bnJfcG9ydHMsCiAJCQkJICAgc2l6ZW9mKCpncGlvLT5wb3J0cyksIEdGUF9LRVJORUwpOwotCWlmICghZ3Bpby0+cG9ydHMpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXRfZXJyOwotCX0KKwlpZiAoIWdwaW8tPnBvcnRzKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJZ3Bpby0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOwotCWlmIChJU19FUlIoZ3Bpby0+cmVncykpIHsKLQkJZXJyID0gUFRSX0VSUihncGlvLT5yZWdzKTsKLQkJZ290byBvdXRfZXJyOwotCX0KKwlpZiAoSVNfRVJSKGdwaW8tPnJlZ3MpKQorCQlyZXR1cm4gUFRSX0VSUihncGlvLT5yZWdzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBncGlvLT5ucl9wb3J0czsgaSsrKSB7CiAJCWVyciA9IGR3YXBiX2dwaW9fYWRkX3BvcnQoZ3BpbywgJnBkYXRhLT5wcm9wZXJ0aWVzW2ldLCBpKTsKQEAgLTU4MiwxNiArNTYxLDEyIEBACiAJfQogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGdwaW8pOwogCi0JZ290byBvdXRfZXJyOworCXJldHVybiAwOwogCiBvdXRfdW5yZWdpc3RlcjoKIAlkd2FwYl9ncGlvX3VucmVnaXN0ZXIoZ3Bpbyk7CiAJZHdhcGJfaXJxX3RlYXJkb3duKGdwaW8pOwogCi1vdXRfZXJyOgotCWlmIChpc19wZGF0YV9hbGxvYykKLQkJZHdhcGJfZnJlZV9wZGF0YV9vZihwZGF0YSk7Ci0KIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1nZS5jIGIvZHJpdmVycy9ncGlvL2dwaW8tZ2UuYwppbmRleCBhZWE1YzJhLi5mOWFjM2YzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1nZS5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWdlLmMKQEAgLTE5LDkgKzE5LDEyIEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jhc2ljX21taW9fZ3Bpby5oPgogCiAjZGVmaW5lIEdFRl9HUElPX0RJUkVDVAkJMHgwMAogI2RlZmluZSBHRUZfR1BJT19JTgkJMHgwNApAQCAtMzMsNTMgKzM2LDYgQEAKICNkZWZpbmUgR0VGX0dQSU9fT1ZFUlJVTgkweDFDCiAjZGVmaW5lIEdFRl9HUElPX01PREUJCTB4MjAKIAotc3RhdGljIHZvaWQgZ2VmX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQotewotCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tY2hpcCA9IHRvX29mX21tX2dwaW9fY2hpcChjaGlwKTsKLQl1bnNpZ25lZCBpbnQgZGF0YTsKLQotCWRhdGEgPSBpb3JlYWQzMmJlKG1tY2hpcC0+cmVncyArIEdFRl9HUElPX09VVCk7Ci0JaWYgKHZhbHVlKQotCQlkYXRhID0gZGF0YSB8IEJJVChvZmZzZXQpOwotCWVsc2UKLQkJZGF0YSA9IGRhdGEgJiB+QklUKG9mZnNldCk7Ci0JaW93cml0ZTMyYmUoZGF0YSwgbW1jaGlwLT5yZWdzICsgR0VGX0dQSU9fT1VUKTsKLX0KLQotc3RhdGljIGludCBnZWZfZ3Bpb19kaXJfaW4oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCXVuc2lnbmVkIGludCBkYXRhOwotCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tY2hpcCA9IHRvX29mX21tX2dwaW9fY2hpcChjaGlwKTsKLQotCWRhdGEgPSBpb3JlYWQzMmJlKG1tY2hpcC0+cmVncyArIEdFRl9HUElPX0RJUkVDVCk7Ci0JZGF0YSA9IGRhdGEgfCBCSVQob2Zmc2V0KTsKLQlpb3dyaXRlMzJiZShkYXRhLCBtbWNoaXAtPnJlZ3MgKyBHRUZfR1BJT19ESVJFQ1QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ2VmX2dwaW9fZGlyX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKLXsKLQl1bnNpZ25lZCBpbnQgZGF0YTsKLQlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbWNoaXAgPSB0b19vZl9tbV9ncGlvX2NoaXAoY2hpcCk7Ci0KLQkvKiBTZXQgdmFsdWUgYmVmb3JlIHN3aXRjaGluZyB0byBvdXRwdXQgKi8KLQlnZWZfZ3Bpb19zZXQobW1jaGlwLT5yZWdzICsgR0VGX0dQSU9fT1VULCBvZmZzZXQsIHZhbHVlKTsKLQotCWRhdGEgPSBpb3JlYWQzMmJlKG1tY2hpcC0+cmVncyArIEdFRl9HUElPX0RJUkVDVCk7Ci0JZGF0YSA9IGRhdGEgJiB+QklUKG9mZnNldCk7Ci0JaW93cml0ZTMyYmUoZGF0YSwgbW1jaGlwLT5yZWdzICsgR0VGX0dQSU9fRElSRUNUKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGdlZl9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1jaGlwID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGNoaXApOwotCi0JcmV0dXJuICEhKGlvcmVhZDMyYmUobW1jaGlwLT5yZWdzICsgR0VGX0dQSU9fSU4pICYgQklUKG9mZnNldCkpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBnZWZfZ3Bpb19pZHNbXSA9IHsKIAl7CiAJCS5jb21wYXRpYmxlCT0gImdlZixzYmM2MTAtZ3BpbyIsCkBAIC05OSwyMiArNTUsNTAgQEAKIHsKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpvZl9pZCA9CiAJCW9mX21hdGNoX2RldmljZShnZWZfZ3Bpb19pZHMsICZwZGV2LT5kZXYpOwotCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tY2hpcDsKKwlzdHJ1Y3QgYmdwaW9fY2hpcCAqYmdjOworCXZvaWQgX19pb21lbSAqcmVnczsKKwlpbnQgcmV0OwogCi0JbW1jaGlwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqbW1jaGlwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtbWNoaXApCisJYmdjID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqYmdjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiZ2MpCiAJCXJldHVybiAtRU5PTUVNOwogCisJcmVncyA9IG9mX2lvbWFwKHBkZXYtPmRldi5vZl9ub2RlLCAwKTsKKwlpZiAoIXJlZ3MpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gYmdwaW9faW5pdChiZ2MsICZwZGV2LT5kZXYsIDQsIHJlZ3MgKyBHRUZfR1BJT19JTiwKKwkJCSByZWdzICsgR0VGX0dQSU9fT1VULCBOVUxMLCBOVUxMLAorCQkJIHJlZ3MgKyBHRUZfR1BJT19ESVJFQ1QsIEJHUElPRl9CSUdfRU5ESUFOX0JZVEVfT1JERVIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiYmdwaW9faW5pdCBmYWlsZWRcbiIpOworCQlnb3RvIGVycjA7CisJfQorCiAJLyogU2V0dXAgcG9pbnRlcnMgdG8gY2hpcCBmdW5jdGlvbnMgKi8KLQltbWNoaXAtPmdjLm5ncGlvID0gKHUxNikodWludHB0cl90KW9mX2lkLT5kYXRhOwotCW1tY2hpcC0+Z2Mub2ZfZ3Bpb19uX2NlbGxzID0gMjsKLQltbWNoaXAtPmdjLmRpcmVjdGlvbl9pbnB1dCA9IGdlZl9ncGlvX2Rpcl9pbjsKLQltbWNoaXAtPmdjLmRpcmVjdGlvbl9vdXRwdXQgPSBnZWZfZ3Bpb19kaXJfb3V0OwotCW1tY2hpcC0+Z2MuZ2V0ID0gZ2VmX2dwaW9fZ2V0OwotCW1tY2hpcC0+Z2Muc2V0ID0gZ2VmX2dwaW9fc2V0OworCWJnYy0+Z2MubGFiZWwgPSBkZXZtX2tzdHJkdXAoJnBkZXYtPmRldiwgcGRldi0+ZGV2Lm9mX25vZGUtPmZ1bGxfbmFtZSwKKwkJCQkgICAgIEdGUF9LRVJORUwpOworCWlmICghYmdjLT5nYy5sYWJlbCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycjA7CisJfQorCisJYmdjLT5nYy5iYXNlID0gLTE7CisJYmdjLT5nYy5uZ3BpbyA9ICh1MTYpKHVpbnRwdHJfdClvZl9pZC0+ZGF0YTsKKwliZ2MtPmdjLm9mX2dwaW9fbl9jZWxscyA9IDI7CisJYmdjLT5nYy5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7CiAKIAkvKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSBtZW1vcnkgbWFwcGVkIEdQSU8gY2hpcCAqLwotCXJldHVybiBvZl9tbV9ncGlvY2hpcF9hZGQocGRldi0+ZGV2Lm9mX25vZGUsIG1tY2hpcCk7CisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZiZ2MtPmdjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjA7CisKKwlyZXR1cm4gMDsKK2VycjA6CisJaW91bm1hcChyZWdzKTsKKwlwcl9lcnIoIiVzOiBHUElPIGNoaXAgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIiwKKwkJCXBkZXYtPmRldi5vZl9ub2RlLT5mdWxsX25hbWUpOworCXJldHVybiByZXQ7CiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBnZWZfZ3Bpb19kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1nZW5lcmljLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1nZW5lcmljLmMKaW5kZXggMTZmNjExNS4uYjkyYTY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLWdlbmVyaWMuYwpAQCAtMTkwLDYgKzE5MCw3OSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJnYy0+bG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZCBiZ3Bpb19tdWx0aXBsZV9nZXRfbWFza3Moc3RydWN0IGJncGlvX2NoaXAgKmJnYywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKm1hc2ssIHVuc2lnbmVkIGxvbmcgKmJpdHMsCisJCQkJICAgICB1bnNpZ25lZCBsb25nICpzZXRfbWFzaywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKmNsZWFyX21hc2spCit7CisJaW50IGk7CisKKwkqc2V0X21hc2sgPSAwOworCSpjbGVhcl9tYXNrID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBiZ2MtPmJpdHM7IGkrKykgeworCQlpZiAoKm1hc2sgPT0gMCkKKwkJCWJyZWFrOworCQlpZiAoX190ZXN0X2FuZF9jbGVhcl9iaXQoaSwgbWFzaykpIHsKKwkJCWlmICh0ZXN0X2JpdChpLCBiaXRzKSkKKwkJCQkqc2V0X21hc2sgfD0gYmdjLT5waW4ybWFzayhiZ2MsIGkpOworCQkJZWxzZQorCQkJCSpjbGVhcl9tYXNrIHw9IGJnYy0+cGluMm1hc2soYmdjLCBpKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYmdwaW9fc2V0X211bHRpcGxlX3NpbmdsZV9yZWcoc3RydWN0IGJncGlvX2NoaXAgKmJnYywKKwkJCQkJICB1bnNpZ25lZCBsb25nICptYXNrLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgKmJpdHMsCisJCQkJCSAgdm9pZCBfX2lvbWVtICpyZWcpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHNldF9tYXNrLCBjbGVhcl9tYXNrOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJnYy0+bG9jaywgZmxhZ3MpOworCisJYmdwaW9fbXVsdGlwbGVfZ2V0X21hc2tzKGJnYywgbWFzaywgYml0cywgJnNldF9tYXNrLCAmY2xlYXJfbWFzayk7CisKKwliZ2MtPmRhdGEgfD0gc2V0X21hc2s7CisJYmdjLT5kYXRhICY9IH5jbGVhcl9tYXNrOworCisJYmdjLT53cml0ZV9yZWcocmVnLCBiZ2MtPmRhdGEpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmdjLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGJncGlvX3NldF9tdWx0aXBsZShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgbG9uZyAqbWFzaywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nICpiaXRzKQoreworCXN0cnVjdCBiZ3Bpb19jaGlwICpiZ2MgPSB0b19iZ3Bpb19jaGlwKGdjKTsKKworCWJncGlvX3NldF9tdWx0aXBsZV9zaW5nbGVfcmVnKGJnYywgbWFzaywgYml0cywgYmdjLT5yZWdfZGF0KTsKK30KKworc3RhdGljIHZvaWQgYmdwaW9fc2V0X211bHRpcGxlX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgbG9uZyAqbWFzaywKKwkJCQkgICB1bnNpZ25lZCBsb25nICpiaXRzKQoreworCXN0cnVjdCBiZ3Bpb19jaGlwICpiZ2MgPSB0b19iZ3Bpb19jaGlwKGdjKTsKKworCWJncGlvX3NldF9tdWx0aXBsZV9zaW5nbGVfcmVnKGJnYywgbWFzaywgYml0cywgYmdjLT5yZWdfc2V0KTsKK30KKworc3RhdGljIHZvaWQgYmdwaW9fc2V0X211bHRpcGxlX3dpdGhfY2xlYXIoc3RydWN0IGdwaW9fY2hpcCAqZ2MsCisJCQkJCSAgdW5zaWduZWQgbG9uZyAqbWFzaywKKwkJCQkJICB1bnNpZ25lZCBsb25nICpiaXRzKQoreworCXN0cnVjdCBiZ3Bpb19jaGlwICpiZ2MgPSB0b19iZ3Bpb19jaGlwKGdjKTsKKwl1bnNpZ25lZCBsb25nIHNldF9tYXNrLCBjbGVhcl9tYXNrOworCisJYmdwaW9fbXVsdGlwbGVfZ2V0X21hc2tzKGJnYywgbWFzaywgYml0cywgJnNldF9tYXNrLCAmY2xlYXJfbWFzayk7CisKKwlpZiAoc2V0X21hc2spCisJCWJnYy0+d3JpdGVfcmVnKGJnYy0+cmVnX3NldCwgc2V0X21hc2spOworCWlmIChjbGVhcl9tYXNrKQorCQliZ2MtPndyaXRlX3JlZyhiZ2MtPnJlZ19jbHIsIGNsZWFyX21hc2spOworfQorCiBzdGF0aWMgaW50IGJncGlvX3NpbXBsZV9kaXJfaW4oc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvKQogewogCXJldHVybiAwOwpAQCAtMzU0LDExICs0MjcsMTQgQEAKIAkJYmdjLT5yZWdfc2V0ID0gc2V0OwogCQliZ2MtPnJlZ19jbHIgPSBjbHI7CiAJCWJnYy0+Z2Muc2V0ID0gYmdwaW9fc2V0X3dpdGhfY2xlYXI7CisJCWJnYy0+Z2Muc2V0X211bHRpcGxlID0gYmdwaW9fc2V0X211bHRpcGxlX3dpdGhfY2xlYXI7CiAJfSBlbHNlIGlmIChzZXQgJiYgIWNscikgewogCQliZ2MtPnJlZ19zZXQgPSBzZXQ7CiAJCWJnYy0+Z2Muc2V0ID0gYmdwaW9fc2V0X3NldDsKKwkJYmdjLT5nYy5zZXRfbXVsdGlwbGUgPSBiZ3Bpb19zZXRfbXVsdGlwbGVfc2V0OwogCX0gZWxzZSB7CiAJCWJnYy0+Z2Muc2V0ID0gYmdwaW9fc2V0OworCQliZ2MtPmdjLnNldF9tdWx0aXBsZSA9IGJncGlvX3NldF9tdWx0aXBsZTsKIAl9CiAKIAliZ2MtPmdjLmdldCA9IGJncGlvX2dldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLWdyZ3Bpby5jIGIvZHJpdmVycy9ncGlvL2dwaW8tZ3JncGlvLmMKaW5kZXggM2E1YTcxMC4uMzVhMDI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tZ3JncGlvLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tZ3JncGlvLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogewogCXN0cnVjdCBncmdwaW9fcHJpdiAqcHJpdiA9IGdyZ3Bpb19nY190b19wcml2KGdjKTsKIAotCWlmIChvZmZzZXQgPiBnYy0+bmdwaW8pCisJaWYgKG9mZnNldCA+PSBnYy0+bmdwaW8pCiAJCXJldHVybiAtRU5YSU87CiAKIAlpZiAocHJpdi0+bGlycXNbb2Zmc2V0XS5pbmRleCA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1tYXg3MzJ4LmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1tYXg3MzJ4LmMKaW5kZXggNmM2NzYyMi4uYTA5NWIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tbWF4NzMyeC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW1heDczMnguYwpAQCAtMTksOCArMTksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL21heDczMnguaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogCiAKIC8qCkBAIC0xMTYsNiArMTE4LDIyIEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG1heDczMnhfaWQpOwogCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtYXg3MzJ4X29mX3RhYmxlW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3MzE5IiB9LAorCXsgLmNvbXBhdGlibGUgPSAibWF4aW0sbWF4NzMyMCIgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1heGltLG1heDczMjEiIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3MzIyIiB9LAorCXsgLmNvbXBhdGlibGUgPSAibWF4aW0sbWF4NzMyMyIgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1heGltLG1heDczMjQiIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtYXhpbSxtYXg3MzI1IiB9LAorCXsgLmNvbXBhdGlibGUgPSAibWF4aW0sbWF4NzMyNiIgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1heGltLG1heDczMjciIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbWF4NzMyeF9vZl90YWJsZSk7CisjZW5kaWYKKwogc3RydWN0IG1heDczMnhfY2hpcCB7CiAJc3RydWN0IGdwaW9fY2hpcCBncGlvX2NoaXA7CiAKQEAgLTEzMiwxNiArMTUwLDIyIEBACiAJdWludDhfdAkJcmVnX291dFsyXTsKIAogI2lmZGVmIENPTkZJR19HUElPX01BWDczMlhfSVJRCi0Jc3RydWN0IG11dGV4CWlycV9sb2NrOwotCWludAkJaXJxX2Jhc2U7Ci0JdWludDhfdAkJaXJxX21hc2s7Ci0JdWludDhfdAkJaXJxX21hc2tfY3VyOwotCXVpbnQ4X3QJCWlycV90cmlnX3JhaXNlOwotCXVpbnQ4X3QJCWlycV90cmlnX2ZhbGw7Ci0JdWludDhfdAkJaXJxX2ZlYXR1cmVzOworCXN0cnVjdCBpcnFfZG9tYWluCSppcnFfZG9tYWluOworCXN0cnVjdCBtdXRleAkJaXJxX2xvY2s7CisJaW50CQkJaXJxX2Jhc2U7CisJdWludDhfdAkJCWlycV9tYXNrOworCXVpbnQ4X3QJCQlpcnFfbWFza19jdXI7CisJdWludDhfdAkJCWlycV90cmlnX3JhaXNlOworCXVpbnQ4X3QJCQlpcnFfdHJpZ19mYWxsOworCXVpbnQ4X3QJCQlpcnFfZmVhdHVyZXM7CiAjZW5kaWYKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1heDczMnhfY2hpcCAqdG9fbWF4NzMyeChzdHJ1Y3QgZ3Bpb19jaGlwICpnYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgbWF4NzMyeF9jaGlwLCBncGlvX2NoaXApOworfQorCiBzdGF0aWMgaW50IG1heDczMnhfd3JpdGViKHN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAsIGludCBncm91cF9hLCB1aW50OF90IHZhbCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwpAQCAtMTgwLDEyICsyMDQsMTAgQEAKIAogc3RhdGljIGludCBtYXg3MzJ4X2dwaW9fZ2V0X3ZhbHVlKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBvZmYpCiB7Ci0Jc3RydWN0IG1heDczMnhfY2hpcCAqY2hpcDsKKwlzdHJ1Y3QgbWF4NzMyeF9jaGlwICpjaGlwID0gdG9fbWF4NzMyeChnYyk7CiAJdWludDhfdCByZWdfdmFsOwogCWludCByZXQ7CiAKLQljaGlwID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgbWF4NzMyeF9jaGlwLCBncGlvX2NoaXApOwotCiAJcmV0ID0gbWF4NzMyeF9yZWFkYihjaGlwLCBpc19ncm91cF9hKGNoaXAsIG9mZiksICZyZWdfdmFsKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIDA7CkBAIC0xOTMsMTggKzIxNSwxNyBAQAogCXJldHVybiByZWdfdmFsICYgKDF1IDw8IChvZmYgJiAweDcpKTsKIH0KIAotc3RhdGljIHZvaWQgbWF4NzMyeF9ncGlvX3NldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgb2ZmLCBpbnQgdmFsKQorc3RhdGljIHZvaWQgbWF4NzMyeF9ncGlvX3NldF9tYXNrKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBvZmYsIGludCBtYXNrLAorCQkJCSAgaW50IHZhbCkKIHsKLQlzdHJ1Y3QgbWF4NzMyeF9jaGlwICpjaGlwOwotCXVpbnQ4X3QgcmVnX291dCwgbWFzayA9IDF1IDw8IChvZmYgJiAweDcpOworCXN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAgPSB0b19tYXg3MzJ4KGdjKTsKKwl1aW50OF90IHJlZ19vdXQ7CiAJaW50IHJldDsKIAotCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBtYXg3MzJ4X2NoaXAsIGdwaW9fY2hpcCk7Ci0KIAltdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsKIAogCXJlZ19vdXQgPSAob2ZmID4gNykgPyBjaGlwLT5yZWdfb3V0WzFdIDogY2hpcC0+cmVnX291dFswXTsKLQlyZWdfb3V0ID0gKHZhbCkgPyByZWdfb3V0IHwgbWFzayA6IHJlZ19vdXQgJiB+bWFzazsKKwlyZWdfb3V0ID0gKHJlZ19vdXQgJiB+bWFzaykgfCAodmFsICYgbWFzayk7CiAKIAlyZXQgPSBtYXg3MzJ4X3dyaXRlYihjaGlwLCBpc19ncm91cF9hKGNoaXAsIG9mZiksIHJlZ19vdXQpOwogCWlmIChyZXQgPCAwKQpAQCAtMjE5LDEzICsyNDAsMzEgQEAKIAltdXRleF91bmxvY2soJmNoaXAtPmxvY2spOwogfQogCitzdGF0aWMgdm9pZCBtYXg3MzJ4X2dwaW9fc2V0X3ZhbHVlKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBvZmYsIGludCB2YWwpCit7CisJdW5zaWduZWQgYmFzZSA9IG9mZiAmIH4weDc7CisJdWludDhfdCBtYXNrID0gMXUgPDwgKG9mZiAmIDB4Nyk7CisKKwltYXg3MzJ4X2dwaW9fc2V0X21hc2soZ2MsIGJhc2UsIG1hc2ssIHZhbCA8PCAob2ZmICYgMHg3KSk7Cit9CisKK3N0YXRpYyB2b2lkIG1heDczMnhfZ3Bpb19zZXRfbXVsdGlwbGUoc3RydWN0IGdwaW9fY2hpcCAqZ2MsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqbWFzaywgdW5zaWduZWQgbG9uZyAqYml0cykKK3sKKwl1bnNpZ25lZCBtYXNrX2xvID0gbWFza1swXSAmIDB4ZmY7CisJdW5zaWduZWQgbWFza19oaSA9IChtYXNrWzBdID4+IDgpICYgMHhmZjsKKworCWlmIChtYXNrX2xvKQorCQltYXg3MzJ4X2dwaW9fc2V0X21hc2soZ2MsIDAsIG1hc2tfbG8sIGJpdHNbMF0gJiAweGZmKTsKKwlpZiAobWFza19oaSkKKwkJbWF4NzMyeF9ncGlvX3NldF9tYXNrKGdjLCA4LCBtYXNrX2hpLCAoYml0c1swXSA+PiA4KSAmIDB4ZmYpOworfQorCiBzdGF0aWMgaW50IG1heDczMnhfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZikKIHsKLQlzdHJ1Y3QgbWF4NzMyeF9jaGlwICpjaGlwOworCXN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAgPSB0b19tYXg3MzJ4KGdjKTsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDF1IDw8IG9mZjsKIAotCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBtYXg3MzJ4X2NoaXAsIGdwaW9fY2hpcCk7Ci0KIAlpZiAoKG1hc2sgJiBjaGlwLT5kaXJfaW5wdXQpID09IDApIHsKIAkJZGV2X2RiZygmY2hpcC0+Y2xpZW50LT5kZXYsICIlcyBwb3J0ICVkIGlzIG91dHB1dCBvbmx5XG4iLAogCQkJY2hpcC0+Y2xpZW50LT5uYW1lLCBvZmYpOwpAQCAtMjQ1LDExICsyODQsOSBAQAogc3RhdGljIGludCBtYXg3MzJ4X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKIAkJdW5zaWduZWQgb2ZmLCBpbnQgdmFsKQogewotCXN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXA7CisJc3RydWN0IG1heDczMnhfY2hpcCAqY2hpcCA9IHRvX21heDczMngoZ2MpOwogCXVuc2lnbmVkIGludCBtYXNrID0gMXUgPDwgb2ZmOwogCi0JY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IG1heDczMnhfY2hpcCwgZ3Bpb19jaGlwKTsKLQogCWlmICgobWFzayAmIGNoaXAtPmRpcl9vdXRwdXQpID09IDApIHsKIAkJZGV2X2RiZygmY2hpcC0+Y2xpZW50LT5kZXYsICIlcyBwb3J0ICVkIGlzIGlucHV0IG9ubHlcbiIsCiAJCQljaGlwLT5jbGllbnQtPm5hbWUsIG9mZik7CkBAIC0zMjEsMjQgKzM1OCwyOCBAQAogCiBzdGF0aWMgaW50IG1heDczMnhfZ3Bpb190b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZikKIHsKLQlzdHJ1Y3QgbWF4NzMyeF9jaGlwICpjaGlwOworCXN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAgPSB0b19tYXg3MzJ4KGdjKTsKIAotCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBtYXg3MzJ4X2NoaXAsIGdwaW9fY2hpcCk7Ci0JcmV0dXJuIGNoaXAtPmlycV9iYXNlICsgb2ZmOworCWlmIChjaGlwLT5pcnFfZG9tYWluKSB7CisJCXJldHVybiBpcnFfY3JlYXRlX21hcHBpbmcoY2hpcC0+aXJxX2RvbWFpbiwKKwkJCQljaGlwLT5pcnFfYmFzZSArIG9mZik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIG1heDczMnhfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKIAotCWNoaXAtPmlycV9tYXNrX2N1ciAmPSB+KDEgPDwgKGQtPmlycSAtIGNoaXAtPmlycV9iYXNlKSk7CisJY2hpcC0+aXJxX21hc2tfY3VyICY9IH4oMSA8PCBkLT5od2lycSk7CiB9CiAKIHN0YXRpYyB2b2lkIG1heDczMnhfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IG1heDczMnhfY2hpcCAqY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCi0JY2hpcC0+aXJxX21hc2tfY3VyIHw9IDEgPDwgKGQtPmlycSAtIGNoaXAtPmlycV9iYXNlKTsKKwljaGlwLT5pcnFfbWFza19jdXIgfD0gMSA8PCBkLT5od2lycTsKIH0KIAogc3RhdGljIHZvaWQgbWF4NzMyeF9pcnFfYnVzX2xvY2soc3RydWN0IGlycV9kYXRhICpkKQpAQCAtMzUyLDE1ICszOTMsMjUgQEAKIHN0YXRpYyB2b2lkIG1heDczMnhfaXJxX2J1c19zeW5jX3VubG9jayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IG1heDczMnhfY2hpcCAqY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXVpbnQxNl90IG5ld19pcnFzOworCXVpbnQxNl90IGxldmVsOwogCiAJbWF4NzMyeF9pcnFfdXBkYXRlX21hc2soY2hpcCk7CisKKwluZXdfaXJxcyA9IGNoaXAtPmlycV90cmlnX2ZhbGwgfCBjaGlwLT5pcnFfdHJpZ19yYWlzZTsKKwl3aGlsZSAobmV3X2lycXMpIHsKKwkJbGV2ZWwgPSBfX2ZmcyhuZXdfaXJxcyk7CisJCW1heDczMnhfZ3Bpb19kaXJlY3Rpb25faW5wdXQoJmNoaXAtPmdwaW9fY2hpcCwgbGV2ZWwpOworCQluZXdfaXJxcyAmPSB+KDEgPDwgbGV2ZWwpOworCX0KKwogCW11dGV4X3VubG9jaygmY2hpcC0+aXJxX2xvY2spOwogfQogCiBzdGF0aWMgaW50IG1heDczMnhfaXJxX3NldF90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IHR5cGUpCiB7CiAJc3RydWN0IG1heDczMnhfY2hpcCAqY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCXVpbnQxNl90IG9mZiA9IGQtPmlycSAtIGNoaXAtPmlycV9iYXNlOworCXVpbnQxNl90IG9mZiA9IGQtPmh3aXJxOwogCXVpbnQxNl90IG1hc2sgPSAxIDw8IG9mZjsKIAogCWlmICghKG1hc2sgJiBjaGlwLT5kaXJfaW5wdXQpKSB7CkBAIC0zODUsNyArNDM2LDcgQEAKIAllbHNlCiAJCWNoaXAtPmlycV90cmlnX3JhaXNlICY9IH5tYXNrOwogCi0JcmV0dXJuIG1heDczMnhfZ3Bpb19kaXJlY3Rpb25faW5wdXQoJmNoaXAtPmdwaW9fY2hpcCwgb2ZmKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtYXg3MzJ4X2lycV9jaGlwID0gewpAQCAtNDQxLDcgKzQ5Miw3IEBACiAKIAlkbyB7CiAJCWxldmVsID0gX19mZnMocGVuZGluZyk7Ci0JCWhhbmRsZV9uZXN0ZWRfaXJxKGxldmVsICsgY2hpcC0+aXJxX2Jhc2UpOworCQloYW5kbGVfbmVzdGVkX2lycShpcnFfZmluZF9tYXBwaW5nKGNoaXAtPmlycV9kb21haW4sIGxldmVsKSk7CiAKIAkJcGVuZGluZyAmPSB+KDEgPDwgbGV2ZWwpOwogCX0gd2hpbGUgKHBlbmRpbmcpOwpAQCAtNDQ5LDYgKzUwMCw0NCBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorc3RhdGljIGludCBtYXg3MzJ4X2lycV9tYXAoc3RydWN0IGlycV9kb21haW4gKmgsIHVuc2lnbmVkIGludCB2aXJxLAorCQlpcnFfaHdfbnVtYmVyX3QgaHcpCit7CisJc3RydWN0IG1heDczMnhfY2hpcCAqY2hpcCA9IGgtPmhvc3RfZGF0YTsKKworCWlmICghKGNoaXAtPmRpcl9pbnB1dCAmICgxIDw8IGh3KSkpIHsKKwkJZGV2X2VycigmY2hpcC0+Y2xpZW50LT5kZXYsCisJCQkJIkF0dGVtcHQgdG8gbWFwIG91dHB1dCBsaW5lIGFzIElSUSBsaW5lOiAlbHVcbiIsCisJCQkJaHcpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlycV9zZXRfY2hpcF9kYXRhKHZpcnEsIGNoaXApOworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmbWF4NzMyeF9pcnFfY2hpcCwKKwkJCWhhbmRsZV9lZGdlX2lycSk7CisJaXJxX3NldF9uZXN0ZWRfdGhyZWFkKHZpcnEsIDEpOworI2lmZGVmIENPTkZJR19BUk0KKwkvKiBBUk0gbmVlZHMgdXMgdG8gZXhwbGljaXRseSBmbGFnIHRoZSBJUlEgYXMgdmFsaWQKKwkgKiBhbmQgd2lsbCBzZXQgdGhlbSBub3Byb2JlIHdoZW4gd2UgZG8gc28uICovCisJc2V0X2lycV9mbGFncyh2aXJxLCBJUlFGX1ZBTElEKTsKKyNlbHNlCisJaXJxX3NldF9ub3Byb2JlKHZpcnEpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluX29wcyBtYXg3MzJ4X2lycV9kb21haW5fb3BzID0geworCS5tYXAJPSBtYXg3MzJ4X2lycV9tYXAsCisJLnhsYXRlCT0gaXJxX2RvbWFpbl94bGF0ZV90d29jZWxsLAorfTsKKworc3RhdGljIHZvaWQgbWF4NzMyeF9pcnFfdGVhcmRvd24oc3RydWN0IG1heDczMnhfY2hpcCAqY2hpcCkKK3sKKwlpZiAoY2hpcC0+Y2xpZW50LT5pcnEgJiYgY2hpcC0+aXJxX2RvbWFpbikKKwkJaXJxX2RvbWFpbl9yZW1vdmUoY2hpcC0+aXJxX2RvbWFpbik7Cit9CisKIHN0YXRpYyBpbnQgbWF4NzMyeF9pcnFfc2V0dXAoc3RydWN0IG1heDczMnhfY2hpcCAqY2hpcCwKIAkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewpAQCAtNDU3LDI4ICs1NDYsMTkgQEAKIAlpbnQgaGFzX2lycSA9IG1heDczMnhfZmVhdHVyZXNbaWQtPmRyaXZlcl9kYXRhXSA+PiAzMjsKIAlpbnQgcmV0OwogCi0JaWYgKHBkYXRhLT5pcnFfYmFzZSAmJiBoYXNfaXJxICE9IElOVF9OT05FKSB7Ci0JCWludCBsdmw7Ci0KLQkJY2hpcC0+aXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7CisJaWYgKCgocGRhdGEgJiYgcGRhdGEtPmlycV9iYXNlKSB8fCBjbGllbnQtPmlycSkKKwkJCSYmIGhhc19pcnEgIT0gSU5UX05PTkUpIHsKKwkJaWYgKHBkYXRhKQorCQkJY2hpcC0+aXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7CiAJCWNoaXAtPmlycV9mZWF0dXJlcyA9IGhhc19pcnE7CiAJCW11dGV4X2luaXQoJmNoaXAtPmlycV9sb2NrKTsKIAotCQlmb3IgKGx2bCA9IDA7IGx2bCA8IGNoaXAtPmdwaW9fY2hpcC5uZ3BpbzsgbHZsKyspIHsKLQkJCWludCBpcnEgPSBsdmwgKyBjaGlwLT5pcnFfYmFzZTsKLQotCQkJaWYgKCEoY2hpcC0+ZGlyX2lucHV0ICYgKDEgPDwgbHZsKSkpCi0JCQkJY29udGludWU7Ci0KLQkJCWlycV9zZXRfY2hpcF9kYXRhKGlycSwgY2hpcCk7Ci0JCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmbWF4NzMyeF9pcnFfY2hpcCwKLQkJCQkJCSBoYW5kbGVfZWRnZV9pcnEpOwotCQkJaXJxX3NldF9uZXN0ZWRfdGhyZWFkKGlycSwgMSk7Ci0jaWZkZWYgQ09ORklHX0FSTQotCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOwotI2Vsc2UKLQkJCWlycV9zZXRfbm9wcm9iZShpcnEpOwotI2VuZGlmCisJCWNoaXAtPmlycV9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9zaW1wbGUoY2xpZW50LT5kZXYub2Zfbm9kZSwKKwkJCQljaGlwLT5ncGlvX2NoaXAubmdwaW8sIGNoaXAtPmlycV9iYXNlLAorCQkJCSZtYXg3MzJ4X2lycV9kb21haW5fb3BzLCBjaGlwKTsKKwkJaWYgKCFjaGlwLT5pcnFfZG9tYWluKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgSVJRIGRvbWFpblxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCiAJCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGNsaWVudC0+aXJxLApAQCAtNDk4LDE1ICs1NzgsMTAgQEAKIAlyZXR1cm4gMDsKIAogb3V0X2ZhaWxlZDoKLQljaGlwLT5pcnFfYmFzZSA9IDA7CisJbWF4NzMyeF9pcnFfdGVhcmRvd24oY2hpcCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgbWF4NzMyeF9pcnFfdGVhcmRvd24oc3RydWN0IG1heDczMnhfY2hpcCAqY2hpcCkKLXsKLQlpZiAoY2hpcC0+aXJxX2Jhc2UpCi0JCWZyZWVfaXJxKGNoaXAtPmNsaWVudC0+aXJxLCBjaGlwKTsKLX0KICNlbHNlIC8qIENPTkZJR19HUElPX01BWDczMlhfSVJRICovCiBzdGF0aWMgaW50IG1heDczMnhfaXJxX3NldHVwKHN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXAsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKQEAgLTUxNSw3ICs1OTAsNyBAQAogCXN0cnVjdCBtYXg3MzJ4X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmY2xpZW50LT5kZXYpOwogCWludCBoYXNfaXJxID0gbWF4NzMyeF9mZWF0dXJlc1tpZC0+ZHJpdmVyX2RhdGFdID4+IDMyOwogCi0JaWYgKHBkYXRhLT5pcnFfYmFzZSAmJiBoYXNfaXJxICE9IElOVF9OT05FKQorCWlmICgoKHBkYXRhICYmIHBkYXRhLT5pcnFfYmFzZSkgfHwgY2xpZW50LT5pcnEpICYmIGhhc19pcnEgIT0gSU5UX05PTkUpCiAJCWRldl93YXJuKCZjbGllbnQtPmRldiwgImludGVycnVwdCBzdXBwb3J0IG5vdCBjb21waWxlZCBpblxuIik7CiAKIAlyZXR1cm4gMDsKQEAgLTU2Miw2ICs2MzcsNyBAQAogCWlmIChjaGlwLT5kaXJfb3V0cHV0KSB7CiAJCWdjLT5kaXJlY3Rpb25fb3V0cHV0ID0gbWF4NzMyeF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CiAJCWdjLT5zZXQgPSBtYXg3MzJ4X2dwaW9fc2V0X3ZhbHVlOworCQlnYy0+c2V0X211bHRpcGxlID0gbWF4NzMyeF9ncGlvX3NldF9tdWx0aXBsZTsKIAl9CiAJZ2MtPmdldCA9IG1heDczMnhfZ3Bpb19nZXRfdmFsdWU7CiAJZ2MtPmNhbl9zbGVlcCA9IHRydWU7CkBAIC01NzQsMjggKzY1MCw0NyBAQAogCXJldHVybiBwb3J0OwogfQogCitzdGF0aWMgc3RydWN0IG1heDczMnhfcGxhdGZvcm1fZGF0YSAqb2ZfZ3Bpb19tYXg3MzJ4KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWF4NzMyeF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKworCXBkYXRhID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEpCisJCXJldHVybiBOVUxMOworCisJcGRhdGEtPmdwaW9fYmFzZSA9IC0xOworCisJcmV0dXJuIHBkYXRhOworfQorCiBzdGF0aWMgaW50IG1heDczMnhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IG1heDczMnhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwogCXN0cnVjdCBtYXg3MzJ4X2NoaXAgKmNoaXA7CiAJc3RydWN0IGkyY19jbGllbnQgKmM7CiAJdWludDE2X3QgYWRkcl9hLCBhZGRyX2I7CiAJaW50IHJldCwgbnJfcG9ydDsKIAogCXBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmY2xpZW50LT5kZXYpOwotCWlmIChwZGF0YSA9PSBOVUxMKSB7CisJbm9kZSA9IGNsaWVudC0+ZGV2Lm9mX25vZGU7CisKKwlpZiAoIXBkYXRhICYmIG5vZGUpCisJCXBkYXRhID0gb2ZfZ3Bpb19tYXg3MzJ4KCZjbGllbnQtPmRldik7CisKKwlpZiAoIXBkYXRhKSB7CiAJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWNoaXAgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2Yoc3RydWN0IG1heDczMnhfY2hpcCksCi0JCQlHRlBfS0VSTkVMKTsKKwljaGlwID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNoaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJY2hpcC0+Y2xpZW50ID0gY2xpZW50OwogCiAJbnJfcG9ydCA9IG1heDczMnhfc2V0dXBfZ3BpbyhjaGlwLCBpZCwgcGRhdGEtPmdwaW9fYmFzZSk7CisJY2hpcC0+Z3Bpb19jaGlwLmRldiA9ICZjbGllbnQtPmRldjsKIAogCWFkZHJfYSA9IChjbGllbnQtPmFkZHIgJiAweDBmKSB8IDB4NjA7CiAJYWRkcl9iID0gKGNsaWVudC0+YWRkciAmIDB4MGYpIHwgMHg1MDsKQEAgLTY0Myw3ICs3MzgsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2ZhaWxlZDsKIAotCWlmIChwZGF0YS0+c2V0dXApIHsKKwlpZiAocGRhdGEgJiYgcGRhdGEtPnNldHVwKSB7CiAJCXJldCA9IHBkYXRhLT5zZXR1cChjbGllbnQsIGNoaXAtPmdwaW9fY2hpcC5iYXNlLAogCQkJCWNoaXAtPmdwaW9fY2hpcC5uZ3BpbywgcGRhdGEtPmNvbnRleHQpOwogCQlpZiAocmV0IDwgMCkKQEAgLTY2NCw5ICs3NTksMTAgQEAKIHsKIAlzdHJ1Y3QgbWF4NzMyeF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJmNsaWVudC0+ZGV2KTsKIAlzdHJ1Y3QgbWF4NzMyeF9jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IHJldDsKIAotCWlmIChwZGF0YS0+dGVhcmRvd24pIHsKKwlpZiAocGRhdGEgJiYgcGRhdGEtPnRlYXJkb3duKSB7CisJCWludCByZXQ7CisKIAkJcmV0ID0gcGRhdGEtPnRlYXJkb3duKGNsaWVudCwgY2hpcC0+Z3Bpb19jaGlwLmJhc2UsCiAJCQkJY2hpcC0+Z3Bpb19jaGlwLm5ncGlvLCBwZGF0YS0+Y29udGV4dCk7CiAJCWlmIChyZXQgPCAwKSB7CkBAIC02ODksOCArNzg1LDkgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDczMnhfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gIm1heDczMngiLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJCT0gIm1heDczMngiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZQk9IG9mX21hdGNoX3B0cihtYXg3MzJ4X29mX3RhYmxlKSwKIAl9LAogCS5wcm9iZQkJPSBtYXg3MzJ4X3Byb2JlLAogCS5yZW1vdmUJCT0gbWF4NzMyeF9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1tYjg2czd4LmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1tYjg2czd4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiMWNlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW1iODZzN3guYwpAQCAtMCwwICsxLDIzMiBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL2dwaW8vZ3Bpby1tYjg2czd4LmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDE1IEZ1aml0c3UgU2VtaWNvbmR1Y3RvciBMaW1pdGVkCisgKiAgQ29weXJpZ2h0IChDKSAyMDE1IExpbmFybyBMdGQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworLyoKKyAqIE9ubHkgZmlyc3QgOGJpdHMgb2YgYSByZWdpc3RlciBjb3JyZXNwb25kIHRvIGVhY2ggcGluLAorICogc28gdGhlcmUgYXJlIDQgcmVnaXN0ZXJzIGZvciAzMiBwaW5zLgorICovCisjZGVmaW5lIFBEUih4KQkoMHgwICsgeCAvIDggKiA0KQorI2RlZmluZSBERFIoeCkJKDB4MTAgKyB4IC8gOCAqIDQpCisjZGVmaW5lIFBGUih4KQkoMHgyMCArIHggLyA4ICogNCkKKworI2RlZmluZSBPRkZTRVQoeCkJQklUKCh4KSAlIDgpCisKK3N0cnVjdCBtYjg2czcwX2dwaW9fY2hpcCB7CisJc3RydWN0IGdwaW9fY2hpcCBnYzsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJc3RydWN0IGNsayAqY2xrOworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1iODZzNzBfZ3Bpb19jaGlwICpjaGlwX3RvX21iODZzNzAoc3RydWN0IGdwaW9fY2hpcCAqZ2MpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihnYywgc3RydWN0IG1iODZzNzBfZ3Bpb19jaGlwLCBnYyk7Cit9CisKK3N0YXRpYyBpbnQgbWI4NnM3MF9ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGdwaW8pCit7CisJc3RydWN0IG1iODZzNzBfZ3Bpb19jaGlwICpnY2hpcCA9IGNoaXBfdG9fbWI4NnM3MChnYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdjaGlwLT5sb2NrLCBmbGFncyk7CisKKwl2YWwgPSByZWFkbChnY2hpcC0+YmFzZSArIFBGUihncGlvKSk7CisJdmFsICY9IH5PRkZTRVQoZ3Bpbyk7CisJd3JpdGVsKHZhbCwgZ2NoaXAtPmJhc2UgKyBQRlIoZ3BpbykpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2NoaXAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtYjg2czcwX2dwaW9fZnJlZShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgbWI4NnM3MF9ncGlvX2NoaXAgKmdjaGlwID0gY2hpcF90b19tYjg2czcwKGdjKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2NoaXAtPmxvY2ssIGZsYWdzKTsKKworCXZhbCA9IHJlYWRsKGdjaGlwLT5iYXNlICsgUEZSKGdwaW8pKTsKKwl2YWwgfD0gT0ZGU0VUKGdwaW8pOworCXdyaXRlbCh2YWwsIGdjaGlwLT5iYXNlICsgUEZSKGdwaW8pKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdjaGlwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbWI4NnM3MF9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgbWI4NnM3MF9ncGlvX2NoaXAgKmdjaGlwID0gY2hpcF90b19tYjg2czcwKGdjKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdjaGlwLT5sb2NrLCBmbGFncyk7CisKKwl2YWwgPSByZWFkbChnY2hpcC0+YmFzZSArIEREUihncGlvKSk7CisJdmFsICY9IH5PRkZTRVQoZ3Bpbyk7CisJd3JpdGVsKHZhbCwgZ2NoaXAtPmJhc2UgKyBERFIoZ3BpbykpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2NoaXAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1iODZzNzBfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmdjLAorCQkJCQkgdW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCXN0cnVjdCBtYjg2czcwX2dwaW9fY2hpcCAqZ2NoaXAgPSBjaGlwX3RvX21iODZzNzAoZ2MpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgY2hhciB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2NoaXAtPmxvY2ssIGZsYWdzKTsKKworCXZhbCA9IHJlYWRsKGdjaGlwLT5iYXNlICsgUERSKGdwaW8pKTsKKwlpZiAodmFsdWUpCisJCXZhbCB8PSBPRkZTRVQoZ3Bpbyk7CisJZWxzZQorCQl2YWwgJj0gfk9GRlNFVChncGlvKTsKKwl3cml0ZWwodmFsLCBnY2hpcC0+YmFzZSArIFBEUihncGlvKSk7CisKKwl2YWwgPSByZWFkbChnY2hpcC0+YmFzZSArIEREUihncGlvKSk7CisJdmFsIHw9IE9GRlNFVChncGlvKTsKKwl3cml0ZWwodmFsLCBnY2hpcC0+YmFzZSArIEREUihncGlvKSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnY2hpcC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWI4NnM3MF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgbWI4NnM3MF9ncGlvX2NoaXAgKmdjaGlwID0gY2hpcF90b19tYjg2czcwKGdjKTsKKworCXJldHVybiAhIShyZWFkbChnY2hpcC0+YmFzZSArIFBEUihncGlvKSkgJiBPRkZTRVQoZ3BpbykpOworfQorCitzdGF0aWMgdm9pZCBtYjg2czcwX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG1iODZzNzBfZ3Bpb19jaGlwICpnY2hpcCA9IGNoaXBfdG9fbWI4NnM3MChnYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZnY2hpcC0+bG9jaywgZmxhZ3MpOworCisJdmFsID0gcmVhZGwoZ2NoaXAtPmJhc2UgKyBQRFIoZ3BpbykpOworCWlmICh2YWx1ZSkKKwkJdmFsIHw9IE9GRlNFVChncGlvKTsKKwllbHNlCisJCXZhbCAmPSB+T0ZGU0VUKGdwaW8pOworCXdyaXRlbCh2YWwsIGdjaGlwLT5iYXNlICsgUERSKGdwaW8pKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdjaGlwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgbWI4NnM3MF9ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1iODZzNzBfZ3Bpb19jaGlwICpnY2hpcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0OworCisJZ2NoaXAgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpnY2hpcCksIEdGUF9LRVJORUwpOworCWlmIChnY2hpcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGdjaGlwKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJZ2NoaXAtPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGdjaGlwLT5iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIoZ2NoaXAtPmJhc2UpOworCisJZ2NoaXAtPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGdjaGlwLT5jbGspKQorCQlyZXR1cm4gUFRSX0VSUihnY2hpcC0+Y2xrKTsKKworCWNsa19wcmVwYXJlX2VuYWJsZShnY2hpcC0+Y2xrKTsKKworCXNwaW5fbG9ja19pbml0KCZnY2hpcC0+bG9jayk7CisKKwlnY2hpcC0+Z2MuZGlyZWN0aW9uX291dHB1dCA9IG1iODZzNzBfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0OworCWdjaGlwLT5nYy5kaXJlY3Rpb25faW5wdXQgPSBtYjg2czcwX2dwaW9fZGlyZWN0aW9uX2lucHV0OworCWdjaGlwLT5nYy5yZXF1ZXN0ID0gbWI4NnM3MF9ncGlvX3JlcXVlc3Q7CisJZ2NoaXAtPmdjLmZyZWUgPSBtYjg2czcwX2dwaW9fZnJlZTsKKwlnY2hpcC0+Z2MuZ2V0ID0gbWI4NnM3MF9ncGlvX2dldDsKKwlnY2hpcC0+Z2Muc2V0ID0gbWI4NnM3MF9ncGlvX3NldDsKKwlnY2hpcC0+Z2MubGFiZWwgPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKKwlnY2hpcC0+Z2MubmdwaW8gPSAzMjsKKwlnY2hpcC0+Z2Mub3duZXIgPSBUSElTX01PRFVMRTsKKwlnY2hpcC0+Z2MuZGV2ID0gJnBkZXYtPmRldjsKKwlnY2hpcC0+Z2MuYmFzZSA9IC0xOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZ2NoaXApOworCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZnY2hpcC0+Z2MpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGRuJ3QgcmVnaXN0ZXIgZ3BpbyBkcml2ZXJcbiIpOworCQljbGtfZGlzYWJsZV91bnByZXBhcmUoZ2NoaXAtPmNsayk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYjg2czcwX2dwaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1iODZzNzBfZ3Bpb19jaGlwICpnY2hpcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZ3Bpb2NoaXBfcmVtb3ZlKCZnY2hpcC0+Z2MpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShnY2hpcC0+Y2xrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtYjg2czcwX2dwaW9fZHRfaWRzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJmdWppdHN1LG1iODZzNzAtZ3BpbyIgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtYjg2czcwX2dwaW9fZHRfaWRzKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWI4NnM3MF9ncGlvX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJtYjg2czcwLWdwaW8iLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBtYjg2czcwX2dwaW9fZHRfaWRzLAorCX0sCisJLnByb2JlID0gbWI4NnM3MF9ncGlvX3Byb2JlLAorCS5yZW1vdmUgPSBtYjg2czcwX2dwaW9fcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWI4NnM3MF9ncGlvX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYjg2czcwX2dwaW9fZHJpdmVyKTsKK30KK21vZHVsZV9pbml0KG1iODZzNzBfZ3Bpb19pbml0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJNQjg2Uzd4IEdQSU8gRHJpdmVyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1iODZzNzAtZ3BpbyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tbWNwMjNzMDguYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW1jcDIzczA4LmMKaW5kZXggZGE5YzMxNi4uZWVhNWQ3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tbWNwMjNzMDguYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1tY3AyM3MwOC5jCkBAIC04MDEsOSArODAxLDExIEBACiAJCWNsaWVudC0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoY2xpZW50LT5kZXYub2Zfbm9kZSwgMCk7CiAJfSBlbHNlIHsKIAkJcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZjbGllbnQtPmRldik7Ci0JCWlmICghcGRhdGEgfHwgIWdwaW9faXNfdmFsaWQocGRhdGEtPmJhc2UpKSB7Ci0JCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImludmFsaWQgcGxhdGZvcm0gZGF0YVxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFwZGF0YSkgeworCQkJcGRhdGEgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LAorCQkJCQlzaXplb2Yoc3RydWN0IG1jcDIzczA4X3BsYXRmb3JtX2RhdGEpLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJCXBkYXRhLT5iYXNlID0gLTE7CiAJCX0KIAl9CiAKQEAgLTkyNCwxMCArOTI2LDExIEBACiAJfSBlbHNlIHsKIAkJdHlwZSA9IHNwaV9nZXRfZGV2aWNlX2lkKHNwaSktPmRyaXZlcl9kYXRhOwogCQlwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnNwaS0+ZGV2KTsKLQkJaWYgKCFwZGF0YSB8fCAhZ3Bpb19pc192YWxpZChwZGF0YS0+YmFzZSkpIHsKLQkJCWRldl9kYmcoJnNwaS0+ZGV2LAotCQkJCQkiaW52YWxpZCBvciBtaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmICghcGRhdGEpIHsKKwkJCXBkYXRhID0gZGV2bV9remFsbG9jKCZzcGktPmRldiwKKwkJCQkJc2l6ZW9mKHN0cnVjdCBtY3AyM3MwOF9wbGF0Zm9ybV9kYXRhKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJCQlwZGF0YS0+YmFzZSA9IC0xOwogCQl9CiAKIAkJZm9yIChhZGRyID0gMDsgYWRkciA8IEFSUkFZX1NJWkUocGRhdGEtPmNoaXApOyBhZGRyKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLW1tLWxhbnRpcS5jIGIvZHJpdmVycy9ncGlvL2dwaW8tbW0tbGFudGlxLmMKaW5kZXggZjIyOGIxYy4uZjY3ZWYyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tbW0tbGFudGlxLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tbW0tbGFudGlxLmMKQEAgLTEwNCwzNSArMTA0LDM0IEBACiAKIHN0YXRpYyBpbnQgbHRxX21tX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCXN0cnVjdCBsdHFfbW0gKmNoaXA7Ci0JY29uc3QgX19iZTMyICpzaGFkb3c7Ci0JaW50IHJldCA9IDA7CisJdTMyIHNoYWRvdzsKIAotCWlmICghcmVzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlc291cmNlXG4iKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJY2hpcCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNoaXApCiAJCXJldHVybiAtRU5PTUVNOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2hpcCk7CisKIAljaGlwLT5tbWNoaXAuZ2MubmdwaW8gPSAxNjsKLQljaGlwLT5tbWNoaXAuZ2MubGFiZWwgPSAiZ3Bpby1tbS1sdHEiOwogCWNoaXAtPm1tY2hpcC5nYy5kaXJlY3Rpb25fb3V0cHV0ID0gbHRxX21tX2Rpcl9vdXQ7CiAJY2hpcC0+bW1jaGlwLmdjLnNldCA9IGx0cV9tbV9zZXQ7CiAJY2hpcC0+bW1jaGlwLnNhdmVfcmVncyA9IGx0cV9tbV9zYXZlX3JlZ3M7CiAKIAkvKiBzdG9yZSB0aGUgc2hhZG93IHZhbHVlIGlmIG9uZSB3YXMgcGFzc2VkIGJ5IHRoZSBkZXZpY2V0cmVlICovCi0Jc2hhZG93ID0gb2ZfZ2V0X3Byb3BlcnR5KHBkZXYtPmRldi5vZl9ub2RlLCAibGFudGlxLHNoYWRvdyIsIE5VTEwpOwotCWlmIChzaGFkb3cpCi0JCWNoaXAtPnNoYWRvdyA9IGJlMzJfdG9fY3B1KCpzaGFkb3cpOworCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIocGRldi0+ZGV2Lm9mX25vZGUsICJsYW50aXEsc2hhZG93IiwgJnNoYWRvdykpCisJCWNoaXAtPnNoYWRvdyA9IHNoYWRvdzsKIAotCXJldCA9IG9mX21tX2dwaW9jaGlwX2FkZChwZGV2LT5kZXYub2Zfbm9kZSwgJmNoaXAtPm1tY2hpcCk7Ci0JaWYgKHJldCkKLQkJa2ZyZWUoY2hpcCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gb2ZfbW1fZ3Bpb2NoaXBfYWRkKHBkZXYtPmRldi5vZl9ub2RlLCAmY2hpcC0+bW1jaGlwKTsKK30KKworc3RhdGljIGludCBsdHFfbW1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGx0cV9tbSAqY2hpcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJb2ZfbW1fZ3Bpb2NoaXBfcmVtb3ZlKCZjaGlwLT5tbWNoaXApOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGx0cV9tbV9tYXRjaFtdID0gewpAQCAtMTQzLDYgKzE0Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGx0cV9tbV9kcml2ZXIgPSB7CiAJLnByb2JlID0gbHRxX21tX3Byb2JlLAorCS5yZW1vdmUgPSBsdHFfbW1fcmVtb3ZlLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gImdwaW8tbW0tbHRxIiwKIAkJLm9mX21hdGNoX3RhYmxlID0gbHRxX21tX21hdGNoLApAQCAtMTU1LDMgKzE1NSw5IEBACiB9CiAKIHN1YnN5c19pbml0Y2FsbChsdHFfbW1faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBsdHFfbW1fZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZsdHFfbW1fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KGx0cV9tbV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLW1veGFydC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tbW94YXJ0LmMKaW5kZXggMzFlMjU1MS4uYzNhYjQ2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tbW94YXJ0LmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tbW94YXJ0LmMKQEAgLTIzLDIxICsyMywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iYXNpY19tbWlvX2dwaW8uaD4KIAogI2RlZmluZSBHUElPX0RBVEFfT1VUCQkweDAwCiAjZGVmaW5lIEdQSU9fREFUQV9JTgkJMHgwNAogI2RlZmluZSBHUElPX1BJTl9ESVJFQ1RJT04JMHgwOAogCi1zdHJ1Y3QgbW94YXJ0X2dwaW9fY2hpcCB7Ci0Jc3RydWN0IGdwaW9fY2hpcCBncGlvOwotCXZvaWQgX19pb21lbSAqYmFzZTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1veGFydF9ncGlvX2NoaXAgKnRvX21veGFydF9ncGlvKHN0cnVjdCBncGlvX2NoaXAgKmNoaXApCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbW94YXJ0X2dwaW9fY2hpcCwgZ3Bpbyk7Ci19Ci0KIHN0YXRpYyBpbnQgbW94YXJ0X2dwaW9fcmVxdWVzdChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJcmV0dXJuIHBpbmN0cmxfcmVxdWVzdF9ncGlvKG9mZnNldCk7CkBAIC00OCw5MCArMzksNjAgQEAKIAlwaW5jdHJsX2ZyZWVfZ3BpbyhvZmZzZXQpOwogfQogCi1zdGF0aWMgdm9pZCBtb3hhcnRfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCi17Ci0Jc3RydWN0IG1veGFydF9ncGlvX2NoaXAgKmdjID0gdG9fbW94YXJ0X2dwaW8oY2hpcCk7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBnYy0+YmFzZSArIEdQSU9fREFUQV9PVVQ7Ci0JdTMyIHJlZyA9IHJlYWRsKGlvYWRkcik7Ci0KLQlpZiAodmFsdWUpCi0JCXJlZyA9IHJlZyB8IEJJVChvZmZzZXQpOwotCWVsc2UKLQkJcmVnID0gcmVnICYgfkJJVChvZmZzZXQpOwotCi0Jd3JpdGVsKHJlZywgaW9hZGRyKTsKLX0KLQogc3RhdGljIGludCBtb3hhcnRfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXN0cnVjdCBtb3hhcnRfZ3Bpb19jaGlwICpnYyA9IHRvX21veGFydF9ncGlvKGNoaXApOwotCXUzMiByZXQgPSByZWFkbChnYy0+YmFzZSArIEdQSU9fUElOX0RJUkVDVElPTik7CisJc3RydWN0IGJncGlvX2NoaXAgKmJnYyA9IHRvX2JncGlvX2NoaXAoY2hpcCk7CisJdTMyIHJldCA9IGJnYy0+cmVhZF9yZWcoYmdjLT5yZWdfZGlyKTsKIAogCWlmIChyZXQgJiBCSVQob2Zmc2V0KSkKLQkJcmV0dXJuICEhKHJlYWRsKGdjLT5iYXNlICsgR1BJT19EQVRBX09VVCkgJiBCSVQob2Zmc2V0KSk7CisJCXJldHVybiAhIShiZ2MtPnJlYWRfcmVnKGJnYy0+cmVnX3NldCkgJiBCSVQob2Zmc2V0KSk7CiAJZWxzZQotCQlyZXR1cm4gISEocmVhZGwoZ2MtPmJhc2UgKyBHUElPX0RBVEFfSU4pICYgQklUKG9mZnNldCkpOworCQlyZXR1cm4gISEoYmdjLT5yZWFkX3JlZyhiZ2MtPnJlZ19kYXQpICYgQklUKG9mZnNldCkpOwogfQogCi1zdGF0aWMgaW50IG1veGFydF9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IG1veGFydF9ncGlvX2NoaXAgKmdjID0gdG9fbW94YXJ0X2dwaW8oY2hpcCk7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBnYy0+YmFzZSArIEdQSU9fUElOX0RJUkVDVElPTjsKLQotCXdyaXRlbChyZWFkbChpb2FkZHIpICYgfkJJVChvZmZzZXQpLCBpb2FkZHIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1veGFydF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKLQkJCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCi17Ci0Jc3RydWN0IG1veGFydF9ncGlvX2NoaXAgKmdjID0gdG9fbW94YXJ0X2dwaW8oY2hpcCk7Ci0Jdm9pZCBfX2lvbWVtICppb2FkZHIgPSBnYy0+YmFzZSArIEdQSU9fUElOX0RJUkVDVElPTjsKLQotCW1veGFydF9ncGlvX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTsKLQl3cml0ZWwocmVhZGwoaW9hZGRyKSB8IEJJVChvZmZzZXQpLCBpb2FkZHIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGdwaW9fY2hpcCBtb3hhcnRfdGVtcGxhdGVfY2hpcCA9IHsKLQkubGFiZWwJCQk9ICJtb3hhcnQtZ3BpbyIsCi0JLnJlcXVlc3QJCT0gbW94YXJ0X2dwaW9fcmVxdWVzdCwKLQkuZnJlZQkJCT0gbW94YXJ0X2dwaW9fZnJlZSwKLQkuZGlyZWN0aW9uX2lucHV0CT0gbW94YXJ0X2dwaW9fZGlyZWN0aW9uX2lucHV0LAotCS5kaXJlY3Rpb25fb3V0cHV0CT0gbW94YXJ0X2dwaW9fZGlyZWN0aW9uX291dHB1dCwKLQkuc2V0CQkJPSBtb3hhcnRfZ3Bpb19zZXQsCi0JLmdldAkJCT0gbW94YXJ0X2dwaW9fZ2V0LAotCS5uZ3BpbwkJCT0gMzIsCi0JLm93bmVyCQkJPSBUSElTX01PRFVMRSwKLX07Ci0KIHN0YXRpYyBpbnQgbW94YXJ0X2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCXN0cnVjdCBtb3hhcnRfZ3Bpb19jaGlwICptZ2M7CisJc3RydWN0IGJncGlvX2NoaXAgKmJnYzsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CiAJaW50IHJldDsKIAotCW1nYyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWdjKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtZ2MpCisJYmdjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpiZ2MpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJnYykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWdjLT5ncGlvID0gbW94YXJ0X3RlbXBsYXRlX2NoaXA7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCW1nYy0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7Ci0JaWYgKElTX0VSUihtZ2MtPmJhc2UpKQotCQlyZXR1cm4gUFRSX0VSUihtZ2MtPmJhc2UpOworCWJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOworCWlmIChJU19FUlIoYmFzZSkpCisJCXJldHVybiBQVFJfRVJSKGJhc2UpOwogCi0JbWdjLT5ncGlvLmRldiA9IGRldjsKKwlyZXQgPSBiZ3Bpb19pbml0KGJnYywgZGV2LCA0LCBiYXNlICsgR1BJT19EQVRBX0lOLAorCQkgICAgYmFzZSArIEdQSU9fREFUQV9PVVQsIE5VTEwsCisJCSAgICBiYXNlICsgR1BJT19QSU5fRElSRUNUSU9OLCBOVUxMLCAwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImJncGlvX2luaXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKLQlyZXQgPSBncGlvY2hpcF9hZGQoJm1nYy0+Z3Bpbyk7CisJYmdjLT5nYy5sYWJlbCA9ICJtb3hhcnQtZ3BpbyI7CisJYmdjLT5nYy5yZXF1ZXN0ID0gbW94YXJ0X2dwaW9fcmVxdWVzdDsKKwliZ2MtPmdjLmZyZWUgPSBtb3hhcnRfZ3Bpb19mcmVlOworCWJnYy0+Z2MuZ2V0ID0gbW94YXJ0X2dwaW9fZ2V0OworCWJnYy0+ZGF0YSA9IGJnYy0+cmVhZF9yZWcoYmdjLT5yZWdfc2V0KTsKKwliZ2MtPmdjLmJhc2UgPSAwOworCWJnYy0+Z2MubmdwaW8gPSAzMjsKKwliZ2MtPmdjLmRldiA9IGRldjsKKwliZ2MtPmdjLm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlyZXQgPSBncGlvY2hpcF9hZGQoJmJnYy0+Z2MpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkZXYsICIlczogZ3Bpb2NoaXBfYWRkIGZhaWxlZFxuIiwKIAkJCWRldi0+b2Zfbm9kZS0+ZnVsbF9uYW1lKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtb3hhcnRfZ3Bpb19tYXRjaFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tbXBjNTIwMC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tbXBjNTIwMC5jCmluZGV4IDhjZTZjOTUuLjRjNTQyMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLW1wYzUyMDAuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1tcGM1MjAwLmMKQEAgLTE1NSwxMCArMTU1LDEyIEBACiAJc3RydWN0IGdwaW9fY2hpcCAqZ2M7CiAJaW50IHJldDsKIAotCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworCWNoaXAgPSBkZXZtX2t6YWxsb2MoJm9mZGV2LT5kZXYsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwogCWlmICghY2hpcCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShvZmRldiwgY2hpcCk7CisKIAlnYyA9ICZjaGlwLT5tbWNoaXAuZ2M7CiAKIAlnYy0+bmdwaW8gICAgICAgICAgICA9IDg7CkBAIC0xODEsNyArMTgzLDExIEBACiAKIHN0YXRpYyBpbnQgbXBjNTJ4eF9ncGlvY2hpcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpCiB7Ci0JcmV0dXJuIC1FQlVTWTsKKwlzdHJ1Y3QgbXBjNTJ4eF9ncGlvY2hpcCAqY2hpcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKG9mZGV2KTsKKworCW9mX21tX2dwaW9jaGlwX3JlbW92ZSgmY2hpcC0+bW1jaGlwKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtcGM1Mnh4X3drdXBfZ3Bpb2NoaXBfbWF0Y2hbXSA9IHsKQEAgLTMxNCwxMCArMzIwLDEyIEBACiAJc3RydWN0IG1wYzUyeHhfZ3BpbyBfX2lvbWVtICpyZWdzOwogCWludCByZXQ7CiAKLQljaGlwID0ga3phbGxvYyhzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKKwljaGlwID0gZGV2bV9remFsbG9jKCZvZmRldi0+ZGV2LCBzaXplb2YoKmNoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNoaXApCiAJCXJldHVybiAtRU5PTUVNOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEob2ZkZXYsIGNoaXApOworCiAJZ2MgPSAmY2hpcC0+bW1jaGlwLmdjOwogCiAJZ2MtPm5ncGlvICAgICAgICAgICAgPSAzMjsKQEAgLTM2MywxMSArMzcxLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogLyogTWFrZSBzdXJlIHdlIGdldCBpbml0aWFsaXNlZCBiZWZvcmUgYW55b25lIGVsc2UgdHJpZXMgdG8gdXNlIHVzICovCiBzdWJzeXNfaW5pdGNhbGwobXBjNTJ4eF9ncGlvX2luaXQpOwogCi0vKiBObyBleGl0IGNhbGwgYXQgdGhlIG1vbWVudCBhcyB3ZSBjYW5ub3QgdW5yZWdpc3RlciBvZiBncGlvIGNoaXBzICovCitzdGF0aWMgdm9pZCBfX2V4aXQgbXBjNTJ4eF9ncGlvX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXBjNTJ4eF93a3VwX2dwaW9jaGlwX2RyaXZlcik7CisKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXBjNTJ4eF9zaW1wbGVfZ3Bpb2NoaXBfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1wYzUyeHhfZ3Bpb19leGl0KTsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgTVBDNTJ4eCBncGlvIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1tcGM4eHh4LmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1tcGM4eHh4LmMKaW5kZXggZDFmZjg3OS4uYTY5NTJiYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLW1wYzh4eHguYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1tcGM4eHh4LmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CkBAIC0zOSw2ICs0MCw3IEBACiAJICovCiAJdTMyIGRhdGE7CiAJc3RydWN0IGlycV9kb21haW4gKmlycTsKKwl1bnNpZ25lZCBpbnQgaXJxbjsKIAljb25zdCB2b2lkICpvZl9kZXZfaWRfZGF0YTsKIH07CiAKQEAgLTM0MiwyMCArMzQ0LDIwIEBACiAJe30KIH07CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtcGM4eHh4X2FkZF9jb250cm9sbGVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCitzdGF0aWMgaW50IG1wYzh4eHhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7CiAJc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwICptcGM4eHh4X2djOwogCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djOwogCXN0cnVjdCBncGlvX2NoaXAgKmdjOwogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmlkOwotCXVuc2lnbmVkIGh3aXJxOwogCWludCByZXQ7CiAKLQltcGM4eHh4X2djID0ga3phbGxvYyhzaXplb2YoKm1wYzh4eHhfZ2MpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1wYzh4eHhfZ2MpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnI7Ci0JfQorCW1wYzh4eHhfZ2MgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCptcGM4eHh4X2djKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtcGM4eHh4X2djKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1wYzh4eHhfZ2MpOwogCiAJc3Bpbl9sb2NrX2luaXQoJm1wYzh4eHhfZ2MtPmxvY2spOwogCkBAIC0zNzUsMTYgKzM3NywxNiBAQAogCiAJcmV0ID0gb2ZfbW1fZ3Bpb2NoaXBfYWRkKG5wLCBtbV9nYyk7CiAJaWYgKHJldCkKLQkJZ290byBlcnI7CisJCXJldHVybiByZXQ7CiAKLQlod2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKLQlpZiAoaHdpcnEgPT0gTk9fSVJRKQotCQlnb3RvIHNraXBfaXJxOworCW1wYzh4eHhfZ2MtPmlycW4gPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJaWYgKG1wYzh4eHhfZ2MtPmlycW4gPT0gTk9fSVJRKQorCQlyZXR1cm4gMDsKIAogCW1wYzh4eHhfZ2MtPmlycSA9IGlycV9kb21haW5fYWRkX2xpbmVhcihucCwgTVBDOFhYWF9HUElPX1BJTlMsCiAJCQkJCSZtcGM4eHh4X2dwaW9faXJxX29wcywgbXBjOHh4eF9nYyk7CiAJaWYgKCFtcGM4eHh4X2djLT5pcnEpCi0JCWdvdG8gc2tpcF9pcnE7CisJCXJldHVybiAwOwogCiAJaWQgPSBvZl9tYXRjaF9ub2RlKG1wYzh4eHhfZ3Bpb19pZHMsIG5wKTsKIAlpZiAoaWQpCkBAIC0zOTQsMjcgKzM5NiwzOSBAQAogCW91dF9iZTMyKG1tX2djLT5yZWdzICsgR1BJT19JRVIsIDB4ZmZmZmZmZmYpOwogCW91dF9iZTMyKG1tX2djLT5yZWdzICsgR1BJT19JTVIsIDApOwogCi0JaXJxX3NldF9oYW5kbGVyX2RhdGEoaHdpcnEsIG1wYzh4eHhfZ2MpOwotCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKGh3aXJxLCBtcGM4eHh4X2dwaW9faXJxX2Nhc2NhZGUpOwotCi1za2lwX2lycToKLQlyZXR1cm47Ci0KLWVycjoKLQlwcl9lcnIoIiVzOiByZWdpc3RyYXRpb24gZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLAotCSAgICAgICBucC0+ZnVsbF9uYW1lLCByZXQpOwotCWtmcmVlKG1wYzh4eHhfZ2MpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBtcGM4eHh4X2FkZF9ncGlvY2hpcHModm9pZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JZm9yX2VhY2hfbWF0Y2hpbmdfbm9kZShucCwgbXBjOHh4eF9ncGlvX2lkcykKLQkJbXBjOHh4eF9hZGRfY29udHJvbGxlcihucCk7CisJaXJxX3NldF9oYW5kbGVyX2RhdGEobXBjOHh4eF9nYy0+aXJxbiwgbXBjOHh4eF9nYyk7CisJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIobXBjOHh4eF9nYy0+aXJxbiwgbXBjOHh4eF9ncGlvX2lycV9jYXNjYWRlKTsKIAogCXJldHVybiAwOwogfQotYXJjaF9pbml0Y2FsbChtcGM4eHh4X2FkZF9ncGlvY2hpcHMpOworCitzdGF0aWMgaW50IG1wYzh4eHhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1wYzh4eHhfZ3Bpb19jaGlwICptcGM4eHh4X2djID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAobXBjOHh4eF9nYy0+aXJxKSB7CisJCWlycV9zZXRfaGFuZGxlcl9kYXRhKG1wYzh4eHhfZ2MtPmlycW4sIE5VTEwpOworCQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihtcGM4eHh4X2djLT5pcnFuLCBOVUxMKTsKKwkJaXJxX2RvbWFpbl9yZW1vdmUobXBjOHh4eF9nYy0+aXJxKTsKKwl9CisKKwlvZl9tbV9ncGlvY2hpcF9yZW1vdmUoJm1wYzh4eHhfZ2MtPm1tX2djKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtcGM4eHh4X3BsYXRfZHJpdmVyID0geworCS5wcm9iZQkJPSBtcGM4eHh4X3Byb2JlLAorCS5yZW1vdmUJCT0gbXBjOHh4eF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lID0gImdwaW8tbXBjOHh4eCIsCisJCS5vZl9tYXRjaF90YWJsZQk9IG1wYzh4eHhfZ3Bpb19pZHMsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1wYzh4eHhfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1wYzh4eHhfcGxhdF9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKG1wYzh4eHhfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1tdmVidS5jIGIvZHJpdmVycy9ncGlvL2dwaW8tbXZlYnUuYwppbmRleCA3YmMzZTliLi5kMGJjMTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1tdmVidS5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW12ZWJ1LmMKQEAgLTU5LDcgKzU5LDcgQEAKICNkZWZpbmUgR1BJT19MRVZFTF9NQVNLX09GRgkweDAwMWMKIAogLyogVGhlIE1WNzgyMDAgaGFzIHBlci1DUFUgcmVnaXN0ZXJzIGZvciBlZGdlIG1hc2sgYW5kIGxldmVsIG1hc2sgKi8KLSNkZWZpbmUgR1BJT19FREdFX01BU0tfTVY3ODIwMF9PRkYoY3B1KSAgICgoY3B1KSA/IDB4MzAgOiAweDE4KQorI2RlZmluZSBHUElPX0VER0VfTUFTS19NVjc4MjAwX09GRihjcHUpCSAgKChjcHUpID8gMHgzMCA6IDB4MTgpCiAjZGVmaW5lIEdQSU9fTEVWRUxfTUFTS19NVjc4MjAwX09GRihjcHUpICAoKGNwdSkgPyAweDM0IDogMHgxQykKIAogLyogVGhlIEFybWFkYSBYUCBoYXMgcGVyLUNQVSByZWdpc3RlcnMgZm9yIGludGVycnVwdCBjYXVzZSwgaW50ZXJydXB0CkBAIC02OSwxMSArNjksMTEgQEAKICNkZWZpbmUgR1BJT19FREdFX01BU0tfQVJNQURBWFBfT0ZGKGNwdSkgICgweDEwICsgKGNwdSkgKiAweDQpCiAjZGVmaW5lIEdQSU9fTEVWRUxfTUFTS19BUk1BREFYUF9PRkYoY3B1KSAoMHgyMCArIChjcHUpICogMHg0KQogCi0jZGVmaW5lIE1WRUJVX0dQSU9fU09DX1ZBUklBTlRfT1JJT04gICAgMHgxCi0jZGVmaW5lIE1WRUJVX0dQSU9fU09DX1ZBUklBTlRfTVY3ODIwMCAgMHgyCisjZGVmaW5lIE1WRUJVX0dQSU9fU09DX1ZBUklBTlRfT1JJT04JMHgxCisjZGVmaW5lIE1WRUJVX0dQSU9fU09DX1ZBUklBTlRfTVY3ODIwMAkweDIKICNkZWZpbmUgTVZFQlVfR1BJT19TT0NfVkFSSUFOVF9BUk1BREFYUCAweDMKIAotI2RlZmluZSBNVkVCVV9NQVhfR1BJT19QRVJfQkFOSyAgICAgICAgIDMyCisjZGVmaW5lIE1WRUJVX01BWF9HUElPX1BFUl9CQU5LCQkzMgogCiBzdHJ1Y3QgbXZlYnVfZ3Bpb19jaGlwIHsKIAlzdHJ1Y3QgZ3Bpb19jaGlwICAgY2hpcDsKQEAgLTgyLDkgKzgyLDkgQEAKIAl2b2lkIF9faW9tZW0JICAqcGVyY3B1X21lbWJhc2U7CiAJaW50CQkgICBpcnFiYXNlOwogCXN0cnVjdCBpcnFfZG9tYWluICpkb21haW47Ci0JaW50ICAgICAgICAgICAgICAgIHNvY192YXJpYW50OworCWludAkJICAgc29jX3ZhcmlhbnQ7CiAKLQkvKiBVc2VkIHRvIHByZXNlcnZlIEdQSU8gcmVnaXN0ZXJzIGFjY3Jvc3Mgc3VzcGVuZC9yZXN1bWUgKi8KKwkvKiBVc2VkIHRvIHByZXNlcnZlIEdQSU8gcmVnaXN0ZXJzIGFjcm9zcyBzdXNwZW5kL3Jlc3VtZSAqLwogCXUzMiAgICAgICAgICAgICAgICBvdXRfcmVnOwogCXUzMiAgICAgICAgICAgICAgICBpb19jb25mX3JlZzsKIAl1MzIgICAgICAgICAgICAgICAgYmxpbmtfZW5fcmVnOwpAQCAtMTA3LDcgKzEwNyw4IEBACiAJcmV0dXJuIG12Y2hpcC0+bWVtYmFzZSArIEdQSU9fQkxJTktfRU5fT0ZGOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqbXZlYnVfZ3Bpb3JlZ19pb19jb25mKHN0cnVjdCBtdmVidV9ncGlvX2NoaXAgKm12Y2hpcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKK212ZWJ1X2dwaW9yZWdfaW9fY29uZihzdHJ1Y3QgbXZlYnVfZ3Bpb19jaGlwICptdmNoaXApCiB7CiAJcmV0dXJuIG12Y2hpcC0+bWVtYmFzZSArIEdQSU9fSU9fQ09ORl9PRkY7CiB9CkBAIC0xMTcsMTIgKzExOCwxNCBAQAogCXJldHVybiBtdmNoaXAtPm1lbWJhc2UgKyBHUElPX0lOX1BPTF9PRkY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICptdmVidV9ncGlvcmVnX2RhdGFfaW4oc3RydWN0IG12ZWJ1X2dwaW9fY2hpcCAqbXZjaGlwKQorc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgorbXZlYnVfZ3Bpb3JlZ19kYXRhX2luKHN0cnVjdCBtdmVidV9ncGlvX2NoaXAgKm12Y2hpcCkKIHsKIAlyZXR1cm4gbXZjaGlwLT5tZW1iYXNlICsgR1BJT19EQVRBX0lOX09GRjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKm12ZWJ1X2dwaW9yZWdfZWRnZV9jYXVzZShzdHJ1Y3QgbXZlYnVfZ3Bpb19jaGlwICptdmNoaXApCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCittdmVidV9ncGlvcmVnX2VkZ2VfY2F1c2Uoc3RydWN0IG12ZWJ1X2dwaW9fY2hpcCAqbXZjaGlwKQogewogCWludCBjcHU7CiAKQEAgLTEzMiwxMyArMTM1LDE1IEBACiAJCXJldHVybiBtdmNoaXAtPm1lbWJhc2UgKyBHUElPX0VER0VfQ0FVU0VfT0ZGOwogCWNhc2UgTVZFQlVfR1BJT19TT0NfVkFSSUFOVF9BUk1BREFYUDoKIAkJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCQlyZXR1cm4gbXZjaGlwLT5wZXJjcHVfbWVtYmFzZSArIEdQSU9fRURHRV9DQVVTRV9BUk1BREFYUF9PRkYoY3B1KTsKKwkJcmV0dXJuIG12Y2hpcC0+cGVyY3B1X21lbWJhc2UgKworCQkJR1BJT19FREdFX0NBVVNFX0FSTUFEQVhQX09GRihjcHUpOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKm12ZWJ1X2dwaW9yZWdfZWRnZV9tYXNrKHN0cnVjdCBtdmVidV9ncGlvX2NoaXAgKm12Y2hpcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKK212ZWJ1X2dwaW9yZWdfZWRnZV9tYXNrKHN0cnVjdCBtdmVidV9ncGlvX2NoaXAgKm12Y2hpcCkKIHsKIAlpbnQgY3B1OwogCkBAIC0xNTAsNyArMTU1LDggQEAKIAkJcmV0dXJuIG12Y2hpcC0+bWVtYmFzZSArIEdQSU9fRURHRV9NQVNLX01WNzgyMDBfT0ZGKGNwdSk7CiAJY2FzZSBNVkVCVV9HUElPX1NPQ19WQVJJQU5UX0FSTUFEQVhQOgogCQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JCXJldHVybiBtdmNoaXAtPnBlcmNwdV9tZW1iYXNlICsgR1BJT19FREdFX01BU0tfQVJNQURBWFBfT0ZGKGNwdSk7CisJCXJldHVybiBtdmNoaXAtPnBlcmNwdV9tZW1iYXNlICsKKwkJCUdQSU9fRURHRV9NQVNLX0FSTUFEQVhQX09GRihjcHUpOwogCWRlZmF1bHQ6CiAJCUJVRygpOwogCX0KQEAgLTE2OCw3ICsxNzQsOCBAQAogCQlyZXR1cm4gbXZjaGlwLT5tZW1iYXNlICsgR1BJT19MRVZFTF9NQVNLX01WNzgyMDBfT0ZGKGNwdSk7CiAJY2FzZSBNVkVCVV9HUElPX1NPQ19WQVJJQU5UX0FSTUFEQVhQOgogCQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JCXJldHVybiBtdmNoaXAtPnBlcmNwdV9tZW1iYXNlICsgR1BJT19MRVZFTF9NQVNLX0FSTUFEQVhQX09GRihjcHUpOworCQlyZXR1cm4gbXZjaGlwLT5wZXJjcHVfbWVtYmFzZSArCisJCQlHUElPX0xFVkVMX01BU0tfQVJNQURBWFBfT0ZGKGNwdSk7CiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQpAQCAtMzY0LDIyICszNzEsMjIgQEAKICAqIHZhbHVlIG9mIHRoZSBsaW5lIG9yIHRoZSBvcHBvc2l0ZSB2YWx1ZS4KICAqCiAgKiBMZXZlbCBJUlEgaGFuZGxlcnM6IERBVEFfSU4gaXMgdXNlZCBkaXJlY3RseSBhcyBjYXVzZSByZWdpc3Rlci4KLSAqICAgICAgICAgICAgICAgICAgICAgSW50ZXJydXB0IGFyZSBtYXNrZWQgYnkgTEVWRUxfTUFTSyByZWdpc3RlcnMuCisgKgkJICAgICAgIEludGVycnVwdCBhcmUgbWFza2VkIGJ5IExFVkVMX01BU0sgcmVnaXN0ZXJzLgogICogRWRnZSBJUlEgaGFuZGxlcnM6ICBDaGFuZ2UgaW4gREFUQV9JTiBhcmUgbGF0Y2hlZCBpbiBFREdFX0NBVVNFLgotICogICAgICAgICAgICAgICAgICAgICBJbnRlcnJ1cHQgYXJlIG1hc2tlZCBieSBFREdFX01BU0sgcmVnaXN0ZXJzLgorICoJCSAgICAgICBJbnRlcnJ1cHQgYXJlIG1hc2tlZCBieSBFREdFX01BU0sgcmVnaXN0ZXJzLgogICogQm90aC1lZGdlIGhhbmRsZXJzOiBTaW1pbGFyIHRvIHJlZ3VsYXIgRWRnZSBoYW5kbGVycywgYnV0IGFsc28gc3dhcHMKLSAqICAgICAgICAgICAgICAgICAgICAgdGhlIHBvbGFyaXR5IHRvIGNhdGNoIHRoZSBuZXh0IGxpbmUgdHJhbnNhY3Rpb24uCi0gKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IG1pZ2h0IG5vdCBwZXJmZWN0bHkKLSAqICAgICAgICAgICAgICAgICAgICAgd29yayBvbiBzb21lIHVzZSBjYXNlcy4KKyAqCQkgICAgICAgdGhlIHBvbGFyaXR5IHRvIGNhdGNoIHRoZSBuZXh0IGxpbmUgdHJhbnNhY3Rpb24uCisgKgkJICAgICAgIFRoaXMgaXMgYSByYWNlIGNvbmRpdGlvbiB0aGF0IG1pZ2h0IG5vdCBwZXJmZWN0bHkKKyAqCQkgICAgICAgd29yayBvbiBzb21lIHVzZSBjYXNlcy4KICAqCiAgKiBFdmVyeSBlaWdodCBHUElPIGxpbmVzIGFyZSBncm91cGVkIChPUidlZCkgYmVmb3JlIGdvaW5nIHVwIHRvIG1haW4KICAqIGNhdXNlIHJlZ2lzdGVyLgogICoKLSAqICAgICAgICAgICAgICAgICAgICBFREdFICBjYXVzZSAgICBtYXNrCi0gKiAgICAgICAgZGF0YS1pbiAgIC8tLS0tLS0tLXwgfC0tLS0tfCB8LS0tLVwKLSAqICAgICAtLS0tLXwgfC0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0gdG8gbWFpbiBjYXVzZSByZWcKLSAqICAgICAgICAgICBYICAgICAgXC0tLS0tLS0tLS0tLS0tLS18IHwtLS0tLwotICogICAgICAgIHBvbGFyaXR5ICAgIExFVkVMICAgICAgICAgIG1hc2sKKyAqCQkgICAgICBFREdFICBjYXVzZSAgICBtYXNrCisgKgkgIGRhdGEtaW4gICAvLS0tLS0tLS18IHwtLS0tLXwgfC0tLS1cCisgKiAgICAgLS0tLS18IHwtLS0tLQkJCSAgICAgLS0tLSB0byBtYWluIGNhdXNlIHJlZworICoJICAgICBYCSAgICBcLS0tLS0tLS0tLS0tLS0tLXwgfC0tLS0vCisgKgkgIHBvbGFyaXR5ICAgIExFVkVMCSAgICAgbWFzawogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC0zOTQsOSArNDAxLDggQEAKIAlwaW4gPSBkLT5od2lycTsKIAogCXUgPSByZWFkbF9yZWxheGVkKG12ZWJ1X2dwaW9yZWdfaW9fY29uZihtdmNoaXApKSAmICgxIDw8IHBpbik7Ci0JaWYgKCF1KSB7CisJaWYgKCF1KQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAl0eXBlICY9IElSUV9UWVBFX1NFTlNFX01BU0s7CiAJaWYgKHR5cGUgPT0gSVJRX1RZUEVfTk9ORSkKQEAgLTUyOSwxMyArNTM1LDEzIEBACiAJCQkgICAoZGF0YV9pbiBeIGluX3BvbCkgJiBtc2sgID8gImhpIiA6ICJsbyIsCiAJCQkgICBpbl9wb2wgJiBtc2sgPyAibG8iIDogImhpIik7CiAJCWlmICghKChlZGdfbXNrIHwgbHZsX21zaykgJiBtc2spKSB7Ci0JCQlzZXFfcHJpbnRmKHMsICIgZGlzYWJsZWRcbiIpOworCQkJc2VxX3B1dHMocywgIiBkaXNhYmxlZFxuIik7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoZWRnX21zayAmIG1zaykKLQkJCXNlcV9wcmludGYocywgIiBlZGdlICIpOworCQkJc2VxX3B1dHMocywgIiBlZGdlICIpOwogCQlpZiAobHZsX21zayAmIG1zaykKLQkJCXNlcV9wcmludGYocywgIiBsZXZlbCIpOworCQkJc2VxX3B1dHMocywgIiBsZXZlbCIpOwogCQlzZXFfcHJpbnRmKHMsICIgKCVzKVxuIiwgY2F1c2UgJiBtc2sgPyAicGVuZGluZyIgOiAiY2xlYXIgICIpOwogCX0KIH0KQEAgLTU0NiwxNSArNTUyLDE1IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdmVidV9ncGlvX29mX21hdGNoW10gPSB7CiAJewogCQkuY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG9yaW9uLWdwaW8iLAotCQkuZGF0YSAgICAgICA9ICh2b2lkICopIE1WRUJVX0dQSU9fU09DX1ZBUklBTlRfT1JJT04sCisJCS5kYXRhCSAgICA9ICh2b2lkICopIE1WRUJVX0dQSU9fU09DX1ZBUklBTlRfT1JJT04sCiAJfSwKIAl7CiAJCS5jb21wYXRpYmxlID0gIm1hcnZlbGwsbXY3ODIwMC1ncGlvIiwKLQkJLmRhdGEgICAgICAgPSAodm9pZCAqKSBNVkVCVV9HUElPX1NPQ19WQVJJQU5UX01WNzgyMDAsCisJCS5kYXRhCSAgICA9ICh2b2lkICopIE1WRUJVX0dQSU9fU09DX1ZBUklBTlRfTVY3ODIwMCwKIAl9LAogCXsKIAkJLmNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGF4cC1ncGlvIiwKLQkJLmRhdGEgICAgICAgPSAodm9pZCAqKSBNVkVCVV9HUElPX1NPQ19WQVJJQU5UX0FSTUFEQVhQLAorCQkuZGF0YQkgICAgPSAodm9pZCAqKSBNVkVCVV9HUElPX1NPQ19WQVJJQU5UX0FSTUFEQVhQLAogCX0sCiAJewogCQkvKiBzZW50aW5lbCAqLwpAQCAtNjYxLDYgKzY2Nyw3IEBACiAJdW5zaWduZWQgaW50IG5ncGlvczsKIAlpbnQgc29jX3ZhcmlhbnQ7CiAJaW50IGksIGNwdSwgaWQ7CisJaW50IGVycjsKIAogCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG12ZWJ1X2dwaW9fb2ZfbWF0Y2gsICZwZGV2LT5kZXYpOwogCWlmIChtYXRjaCkKQEAgLTY2OCw3ICs2NzUsOCBAQAogCWVsc2UKIAkJc29jX3ZhcmlhbnQgPSBNVkVCVV9HUElPX1NPQ19WQVJJQU5UX09SSU9OOwogCi0JbXZjaGlwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgbXZlYnVfZ3Bpb19jaGlwKSwgR0ZQX0tFUk5FTCk7CisJbXZjaGlwID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgbXZlYnVfZ3Bpb19jaGlwKSwKKwkJCSAgICAgIEdGUF9LRVJORUwpOwogCWlmICghbXZjaGlwKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNzY3LDggKzc3NSw4IEBACiAJICogaW50ZXJydXB0IGhhbmRsZXJzLCB3aXRoIGVhY2ggaGFuZGxlciBkZWFsaW5nIHdpdGggOCBHUElPCiAJICogcGlucy4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWludCBpcnE7Ci0JCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgaSk7CisJCWludCBpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkpOworCiAJCWlmIChpcnEgPCAwKQogCQkJY29udGludWU7CiAJCWlycV9zZXRfaGFuZGxlcl9kYXRhKGlycSwgbXZjaGlwKTsKQEAgLTc3OCwxNCArNzg2LDE2IEBACiAJbXZjaGlwLT5pcnFiYXNlID0gaXJxX2FsbG9jX2Rlc2NzKC0xLCAwLCBuZ3Bpb3MsIC0xKTsKIAlpZiAobXZjaGlwLT5pcnFiYXNlIDwgMCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnFzXG4iKTsKLQkJcmV0dXJuIG12Y2hpcC0+aXJxYmFzZTsKKwkJZXJyID0gbXZjaGlwLT5pcnFiYXNlOworCQlnb3RvIGVycl9ncGlvY2hpcF9hZGQ7CiAJfQogCiAJZ2MgPSBpcnFfYWxsb2NfZ2VuZXJpY19jaGlwKCJtdmVidV9ncGlvX2lycSIsIDIsIG12Y2hpcC0+aXJxYmFzZSwKIAkJCQkgICAgbXZjaGlwLT5tZW1iYXNlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAlpZiAoIWdjKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSBnZW5lcmljIGlycV9jaGlwXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2dwaW9jaGlwX2FkZDsKIAl9CiAKIAlnYy0+cHJpdmF0ZSA9IG12Y2hpcDsKQEAgLTgxNiwxOCArODI2LDI2IEBACiAJaWYgKCFtdmNoaXAtPmRvbWFpbikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZG4ndCBhbGxvY2F0ZSBpcnEgZG9tYWluICVzIChEVCkuXG4iLAogCQkJbXZjaGlwLT5jaGlwLmxhYmVsKTsKLQkJaXJxX3JlbW92ZV9nZW5lcmljX2NoaXAoZ2MsIElSUV9NU0sobmdwaW9zKSwgSVJRX05PUkVRVUVTVCwKLQkJCQkJSVJRX0xFVkVMIHwgSVJRX05PUFJPQkUpOwotCQlrZnJlZShnYyk7Ci0JCXJldHVybiAtRU5PREVWOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9nZW5lcmljX2NoaXA7CiAJfQogCiAJcmV0dXJuIDA7CisKK2Vycl9nZW5lcmljX2NoaXA6CisJaXJxX3JlbW92ZV9nZW5lcmljX2NoaXAoZ2MsIElSUV9NU0sobmdwaW9zKSwgSVJRX05PUkVRVUVTVCwKKwkJCQlJUlFfTEVWRUwgfCBJUlFfTk9QUk9CRSk7CisJa2ZyZWUoZ2MpOworCitlcnJfZ3Bpb2NoaXBfYWRkOgorCWdwaW9jaGlwX3JlbW92ZSgmbXZjaGlwLT5jaGlwKTsKKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG12ZWJ1X2dwaW9fZHJpdmVyID0gewogCS5kcml2ZXIJCT0gewotCQkubmFtZQkgICAgICAgID0gIm12ZWJ1LWdwaW8iLAorCQkubmFtZQkJPSAibXZlYnUtZ3BpbyIsCiAJCS5vZl9tYXRjaF90YWJsZSA9IG12ZWJ1X2dwaW9fb2ZfbWF0Y2gsCiAJfSwKIAkucHJvYmUJCT0gbXZlYnVfZ3Bpb19wcm9iZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLW9tYXAuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLW9tYXAuYwppbmRleCAzMDY0NmNmLi5mNDc2YWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby1vbWFwLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tb21hcC5jCkBAIC04OCw2ICs4OCw4IEBACiAjZGVmaW5lIEJBTktfVVNFRChiYW5rKSAoYmFuay0+bW9kX3VzYWdlIHx8IGJhbmstPmlycV91c2FnZSkKICNkZWZpbmUgTElORV9VU0VEKGxpbmUsIG9mZnNldCkgKGxpbmUgJiAoQklUKG9mZnNldCkpKQogCitzdGF0aWMgdm9pZCBvbWFwX2dwaW9fdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpOworCiBzdGF0aWMgaW50IG9tYXBfaXJxX3RvX2dwaW8oc3RydWN0IGdwaW9fYmFuayAqYmFuaywgdW5zaWduZWQgaW50IGdwaW9faXJxKQogewogCXJldHVybiBiYW5rLT5jaGlwLmJhc2UgKyBncGlvX2lycTsKQEAgLTQ3Nyw2ICs0NzksMTYgQEAKIAlyZXR1cm4gcmVhZGxfcmVsYXhlZChyZWcpICYgbWFzazsKIH0KIAorc3RhdGljIHZvaWQgb21hcF9ncGlvX2luaXRfaXJxKHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIHVuc2lnbmVkIGdwaW8sCisJCQkgICAgICAgdW5zaWduZWQgb2Zmc2V0KQoreworCWlmICghTElORV9VU0VEKGJhbmstPm1vZF91c2FnZSwgb2Zmc2V0KSkgeworCQlvbWFwX2VuYWJsZV9ncGlvX21vZHVsZShiYW5rLCBvZmZzZXQpOworCQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihiYW5rLCBvZmZzZXQsIDEpOworCX0KKwliYW5rLT5pcnFfdXNhZ2UgfD0gQklUKEdQSU9fSU5ERVgoYmFuaywgZ3BpbykpOworfQorCiBzdGF0aWMgaW50IG9tYXBfZ3Bpb19pcnFfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIHR5cGUpCiB7CiAJc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IG9tYXBfaXJxX2RhdGFfZ2V0X2JhbmsoZCk7CkBAIC01MDYsMTUgKzUxOCwxMSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJb2Zmc2V0ID0gR1BJT19JTkRFWChiYW5rLCBncGlvKTsKIAlyZXR2YWwgPSBvbWFwX3NldF9ncGlvX3RyaWdnZXJpbmcoYmFuaywgb2Zmc2V0LCB0eXBlKTsKLQlpZiAoIUxJTkVfVVNFRChiYW5rLT5tb2RfdXNhZ2UsIG9mZnNldCkpIHsKLQkJb21hcF9lbmFibGVfZ3Bpb19tb2R1bGUoYmFuaywgb2Zmc2V0KTsKLQkJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24oYmFuaywgb2Zmc2V0LCAxKTsKLQl9IGVsc2UgaWYgKCFvbWFwX2dwaW9faXNfaW5wdXQoYmFuaywgQklUKG9mZnNldCkpKSB7CisJb21hcF9ncGlvX2luaXRfaXJxKGJhbmssIGdwaW8sIG9mZnNldCk7CisJaWYgKCFvbWFwX2dwaW9faXNfaW5wdXQoYmFuaywgQklUKG9mZnNldCkpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCi0JYmFuay0+aXJxX3VzYWdlIHw9IEJJVChHUElPX0lOREVYKGJhbmssIGdwaW8pKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAodHlwZSAmIChJUlFfVFlQRV9MRVZFTF9MT1cgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKSkKQEAgLTc5Miw2ICs4MDAsMjQgQEAKIAlwbV9ydW50aW1lX3B1dChiYW5rLT5kZXYpOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IG9tYXBfZ3Bpb19pcnFfc3RhcnR1cChzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IG9tYXBfaXJxX2RhdGFfZ2V0X2JhbmsoZCk7CisJdW5zaWduZWQgaW50IGdwaW8gPSBvbWFwX2lycV90b19ncGlvKGJhbmssIGQtPmh3aXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIG9mZnNldCA9IEdQSU9fSU5ERVgoYmFuaywgZ3Bpbyk7CisKKwlpZiAoIUJBTktfVVNFRChiYW5rKSkKKwkJcG1fcnVudGltZV9nZXRfc3luYyhiYW5rLT5kZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKKwlvbWFwX2dwaW9faW5pdF9pcnEoYmFuaywgZ3Bpbywgb2Zmc2V0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CisJb21hcF9ncGlvX3VubWFza19pcnEoZCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgb21hcF9ncGlvX2lycV9zaHV0ZG93bihzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IG9tYXBfaXJxX2RhdGFfZ2V0X2JhbmsoZCk7CkBAIC0xMTgxLDYgKzEyMDcsNyBAQAogCWlmICghaXJxYykKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlpcnFjLT5pcnFfc3RhcnR1cCA9IG9tYXBfZ3Bpb19pcnFfc3RhcnR1cCwKIAlpcnFjLT5pcnFfc2h1dGRvd24gPSBvbWFwX2dwaW9faXJxX3NodXRkb3duLAogCWlycWMtPmlycV9hY2sgPSBvbWFwX2dwaW9fYWNrX2lycSwKIAlpcnFjLT5pcnFfbWFzayA9IG9tYXBfZ3Bpb19tYXNrX2lycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXB4YS5jIGIvZHJpdmVycy9ncGlvL2dwaW8tcHhhLmMKaW5kZXggYWQzZmVlYy4uMmZkYjA0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tcHhhLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tcHhhLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby1weGEuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9jaGFpbmVkX2lycS5oPgpAQCAtMjcsOCArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCi0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0KIC8qCiAgKiBXZSBoYW5kbGUgdGhlIEdQSU9zIGJ5IGJhbmtzLCBlYWNoIGJhbmsgY292ZXJzIHVwIHRvIDMyIEdQSU9zIHdpdGgKICAqIG9uZSBzZXQgb2YgcmVnaXN0ZXJzLiBUaGUgcmVnaXN0ZXIgb2Zmc2V0cyBhcmUgb3JnYW5pemVkIGJlbG93OgpAQCAtNDIsOSArNDEsMTIgQEAKICAqIEJBTksgNCAtIDB4MDEwNCAgMHgwMTEwICAweDAxMUMgIDB4MDEyOCAgMHgwMTM0ICAweDAxNDAgIDB4MDE0QwogICogQkFOSyA1IC0gMHgwMTA4ICAweDAxMTQgIDB4MDEyMCAgMHgwMTJDICAweDAxMzggIDB4MDE0NCAgMHgwMTUwCiAgKgorICogQkFOSyA2IC0gMHgwMjAwICAweDAyMEMgIDB4MDIxOCAgMHgwMjI0ICAweDAyMzAgIDB4MDIzQyAgMHgwMjQ4CisgKgogICogTk9URToKICAqICAgQkFOSyAzIGlzIG9ubHkgYXZhaWxhYmxlIG9uIFBYQTI3eCBhbmQgbGF0ZXIgcHJvY2Vzc29ycy4KLSAqICAgQkFOSyA0IGFuZCA1IGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBQWEE5MzUKKyAqICAgQkFOSyA0IGFuZCA1IGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBQWEE5MzUsIFBYQTE5MjgKKyAqICAgQkFOSyA2IGlzIG9ubHkgYXZhaWxhYmxlIG9uIFBYQTE5MjgKICAqLwogCiAjZGVmaW5lIEdQTFJfT0ZGU0VUCTB4MDAKQEAgLTU3LDcgKzU5LDggQEAKICNkZWZpbmUgR0FGUl9PRkZTRVQJMHg1NAogI2RlZmluZSBFRF9NQVNLX09GRlNFVAkweDlDCS8qIEdQSU8gZWRnZSBkZXRlY3Rpb24gZm9yIEFQIHNpZGUgKi8KIAotI2RlZmluZSBCQU5LX09GRihuKQkoKChuKSA8IDMpID8gKG4pIDw8IDIgOiAweDEwMCArICgoKG4pIC0gMykgPDwgMikpCisjZGVmaW5lIEJBTktfT0ZGKG4pCSgoKG4pIDwgMykgPyAobikgPDwgMiA6ICgobikgPiA1ID8gMHgyMDAgOiAweDEwMCkJXAorCQkJKyAoKChuKSAlIDMpIDw8IDIpKQogCiBpbnQgcHhhX2xhc3RfZ3BpbzsKIHN0YXRpYyBpbnQgaXJxX2Jhc2U7CkBAIC05Myw2ICs5Niw3IEBACiAJUFhBOTNYX0dQSU8sCiAJTU1QX0dQSU8gPSAweDEwLAogCU1NUDJfR1BJTywKKwlQWEExOTI4X0dQSU8sCiB9OwogCiBzdHJ1Y3QgcHhhX2dwaW9faWQgewpAQCAtMTQwLDYgKzE0NCwxMSBAQAogCS5ncGlvX251bXMJPSAxOTIsCiB9OwogCitzdGF0aWMgc3RydWN0IHB4YV9ncGlvX2lkIHB4YTE5MjhfaWQgPSB7CisJLnR5cGUJCT0gUFhBMTkyOF9HUElPLAorCS5ncGlvX251bXMJPSAyMjQsCit9OworCiAjZGVmaW5lIGZvcl9lYWNoX2dwaW9fY2hpcChpLCBjKQkJCVwKIAlmb3IgKGkgPSAwLCBjID0gJnB4YV9ncGlvX2NoaXBzWzBdOyBpIDw9IHB4YV9sYXN0X2dwaW87IGkgKz0gMzIsIGMrKykKIApAQCAtNDg3LDYgKzQ5Niw3IEBACiAJY2FzZSBQWEE5M1hfR1BJTzoKIAljYXNlIE1NUF9HUElPOgogCWNhc2UgTU1QMl9HUElPOgorCWNhc2UgUFhBMTkyOF9HUElPOgogCQlncGlvX3R5cGUgPSBweGFfaWQtPnR5cGU7CiAJCWNvdW50ID0gcHhhX2lkLT5ncGlvX251bXMgLSAxOwogCQlicmVhazsKQEAgLTUwNiw2ICs1MTYsNyBAQAogCXsgLmNvbXBhdGlibGUgPSAibWFydmVsbCxweGE5M3gtZ3BpbyIsCS5kYXRhID0gJnB4YTkzeF9pZCwgfSwKIAl7IC5jb21wYXRpYmxlID0gIm1hcnZlbGwsbW1wLWdwaW8iLAkuZGF0YSA9ICZtbXBfaWQsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLG1tcDItZ3BpbyIsCS5kYXRhID0gJm1tcDJfaWQsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtYXJ2ZWxsLHB4YTE5MjgtZ3BpbyIsCS5kYXRhID0gJnB4YTE5MjhfaWQsIH0sCiAJe30KIH07CiAKQEAgLTYyOSwxOSArNjQwLDE4IEBACiAJfQogCiAJaWYgKCF1c2Vfb2YpIHsKLSNpZmRlZiBDT05GSUdfQVJDSF9QWEEKLQkJaXJxID0gZ3Bpb190b19pcnEoMCk7Ci0JCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZweGFfbXV4ZWRfZ3Bpb19jaGlwLAotCQkJCQkgaGFuZGxlX2VkZ2VfaXJxKTsKLQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKLQkJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoSVJRX0dQSU8wLCBweGFfZ3Bpb19kZW11eF9oYW5kbGVyKTsKLQotCQlpcnEgPSBncGlvX3RvX2lycSgxKTsKLQkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJnB4YV9tdXhlZF9ncGlvX2NoaXAsCi0JCQkJCSBoYW5kbGVfZWRnZV9pcnEpOwotCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOwotCQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihJUlFfR1BJTzEsIHB4YV9ncGlvX2RlbXV4X2hhbmRsZXIpOwotI2VuZGlmCisJCWlmIChpcnEwID4gMCkgeworCQkJaXJxID0gZ3Bpb190b19pcnEoMCk7CisJCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmcHhhX211eGVkX2dwaW9fY2hpcCwKKwkJCQkJCSBoYW5kbGVfZWRnZV9pcnEpOworCQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKKwkJfQorCQlpZiAoaXJxMSA+IDApIHsKKwkJCWlycSA9IGdwaW9fdG9faXJxKDEpOworCQkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJnB4YV9tdXhlZF9ncGlvX2NoaXAsCisJCQkJCQkgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJCX0KIAogCQlmb3IgKGlycSAgPSBncGlvX3RvX2lycShncGlvX29mZnNldCk7CiAJCQlpcnEgPD0gZ3Bpb190b19pcnEocHhhX2xhc3RfZ3Bpbyk7IGlycSsrKSB7CkBAIC02NDksMTMgKzY1OSwxMyBAQAogCQkJCQkJIGhhbmRsZV9lZGdlX2lycSk7CiAJCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOwogCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGlycTAgPiAwKQotCQkJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoaXJxMCwgcHhhX2dwaW9fZGVtdXhfaGFuZGxlcik7Ci0JCWlmIChpcnExID4gMCkKLQkJCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKGlycTEsIHB4YV9ncGlvX2RlbXV4X2hhbmRsZXIpOwogCX0KIAorCWlmIChpcnEwID4gMCkKKwkJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoaXJxMCwgcHhhX2dwaW9fZGVtdXhfaGFuZGxlcik7CisJaWYgKGlycTEgPiAwKQorCQlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihpcnExLCBweGFfZ3Bpb19kZW11eF9oYW5kbGVyKTsKKwogCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKGlycV9tdXgsIHB4YV9ncGlvX2RlbXV4X2hhbmRsZXIpOwogCXJldHVybiAwOwogfQpAQCAtNjY4LDYgKzY3OCw3IEBACiAJeyAicHhhOTN4LWdwaW8iLAkodW5zaWduZWQgbG9uZykmcHhhOTN4X2lkIH0sCiAJeyAibW1wLWdwaW8iLAkJKHVuc2lnbmVkIGxvbmcpJm1tcF9pZCB9LAogCXsgIm1tcDItZ3BpbyIsCQkodW5zaWduZWQgbG9uZykmbW1wMl9pZCB9LAorCXsgInB4YTE5MjgtZ3BpbyIsCSh1bnNpZ25lZCBsb25nKSZweGExOTI4X2lkIH0sCiAJeyB9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tcmNhci5jIGIvZHJpdmVycy9ncGlvL2dwaW8tcmNhci5jCmluZGV4IDU4NDQ4NGUuLmM0OTUyMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXJjYXIuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby1yY2FyLmMKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycWRvbWFpbi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPgpAQCAtMzgsNyArMzcsNiBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJc3RydWN0IGdwaW9fY2hpcCBncGlvX2NoaXA7CiAJc3RydWN0IGlycV9jaGlwIGlycV9jaGlwOwotCXN0cnVjdCBpcnFfZG9tYWluICppcnFfZG9tYWluOwogfTsKIAogI2RlZmluZSBJT0lOVFNFTCAweDAwCkBAIC04MiwxNCArODAsMTggQEAKIAogc3RhdGljIHZvaWQgZ3Bpb19yY2FyX2lycV9kaXNhYmxlKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlzdHJ1Y3QgZ3Bpb19yY2FyX3ByaXYgKnAgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBncGlvX3JjYXJfcHJpdiAqcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IGdwaW9fcmNhcl9wcml2LAorCQkJCQkJZ3Bpb19jaGlwKTsKIAogCWdwaW9fcmNhcl93cml0ZShwLCBJTlRNU0ssIH5CSVQoaXJxZF90b19od2lycShkKSkpOwogfQogCiBzdGF0aWMgdm9pZCBncGlvX3JjYXJfaXJxX2VuYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jc3RydWN0IGdwaW9fcmNhcl9wcml2ICpwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IGdwaW9fY2hpcCAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgZ3Bpb19yY2FyX3ByaXYgKnAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBncGlvX3JjYXJfcHJpdiwKKwkJCQkJCWdwaW9fY2hpcCk7CiAKIAlncGlvX3JjYXJfd3JpdGUocCwgTVNLQ0xSLCBCSVQoaXJxZF90b19od2lycShkKSkpOwogfQpAQCAtMTMxLDcgKzEzMyw5IEBACiAKIHN0YXRpYyBpbnQgZ3Bpb19yY2FyX2lycV9zZXRfdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCB0eXBlKQogewotCXN0cnVjdCBncGlvX3JjYXJfcHJpdiAqcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJc3RydWN0IGdwaW9fcmNhcl9wcml2ICpwID0gY29udGFpbmVyX29mKGdjLCBzdHJ1Y3QgZ3Bpb19yY2FyX3ByaXYsCisJCQkJCQlncGlvX2NoaXApOwogCXVuc2lnbmVkIGludCBod2lycSA9IGlycWRfdG9faHdpcnEoZCk7CiAKIAlkZXZfZGJnKCZwLT5wZGV2LT5kZXYsICJzZW5zZSBpcnEgPSAlZCwgdHlwZSA9ICVkXG4iLCBod2lycSwgdHlwZSk7CkBAIC0xNzUsNyArMTc5LDggQEAKIAkJCSAgZ3Bpb19yY2FyX3JlYWQocCwgSU5UTVNLKSkpIHsKIAkJb2Zmc2V0ID0gX19mZnMocGVuZGluZyk7CiAJCWdwaW9fcmNhcl93cml0ZShwLCBJTlRDTFIsIEJJVChvZmZzZXQpKTsKLQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycV9maW5kX21hcHBpbmcocC0+aXJxX2RvbWFpbiwgb2Zmc2V0KSk7CisJCWdlbmVyaWNfaGFuZGxlX2lycShpcnFfZmluZF9tYXBwaW5nKHAtPmdwaW9fY2hpcC5pcnFkb21haW4sCisJCQkJCQkgICAgb2Zmc2V0KSk7CiAJCWlycXNfaGFuZGxlZCsrOwogCX0KIApAQCAtMjY1LDI5ICsyNzAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdwaW9fcmNhcl90b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQotewotCXJldHVybiBpcnFfY3JlYXRlX21hcHBpbmcoZ3Bpb190b19wcml2KGNoaXApLT5pcnFfZG9tYWluLCBvZmZzZXQpOwotfQotCi1zdGF0aWMgaW50IGdwaW9fcmNhcl9pcnFfZG9tYWluX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqaCwgdW5zaWduZWQgaW50IGlycSwKLQkJCQkgaXJxX2h3X251bWJlcl90IGh3aXJxKQotewotCXN0cnVjdCBncGlvX3JjYXJfcHJpdiAqcCA9IGgtPmhvc3RfZGF0YTsKLQotCWRldl9kYmcoJnAtPnBkZXYtPmRldiwgIm1hcCBodyBpcnEgPSAlZCwgaXJxID0gJWRcbiIsIChpbnQpaHdpcnEsIGlycSk7Ci0KLQlpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGgtPmhvc3RfZGF0YSk7Ci0JaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJnAtPmlycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7IC8qIGtpbGwgbWUgbm93ICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgZ3Bpb19yY2FyX2lycV9kb21haW5fb3BzID0gewotCS5tYXAJPSBncGlvX3JjYXJfaXJxX2RvbWFpbl9tYXAsCi0JLnhsYXRlCT0gaXJxX2RvbWFpbl94bGF0ZV90d29jZWxsLAotfTsKLQogc3RydWN0IGdwaW9fcmNhcl9pbmZvIHsKIAlib29sIGhhc19ib3RoX2VkZ2VfdHJpZ2dlcjsKIH07CkBAIC0zNzIsMTAgKzM1NCw4IEBACiAJaW50IHJldDsKIAogCXAgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXApIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnIwOwotCX0KKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOwogCiAJcC0+cGRldiA9IHBkZXY7CiAJc3Bpbl9sb2NrX2luaXQoJnAtPmxvY2spOwpAQCAtNDEzLDcgKzM5Myw2IEBACiAJZ3Bpb19jaGlwLT5nZXQgPSBncGlvX3JjYXJfZ2V0OwogCWdwaW9fY2hpcC0+ZGlyZWN0aW9uX291dHB1dCA9IGdwaW9fcmNhcl9kaXJlY3Rpb25fb3V0cHV0OwogCWdwaW9fY2hpcC0+c2V0ID0gZ3Bpb19yY2FyX3NldDsKLQlncGlvX2NoaXAtPnRvX2lycSA9IGdwaW9fcmNhcl90b19pcnE7CiAJZ3Bpb19jaGlwLT5sYWJlbCA9IG5hbWU7CiAJZ3Bpb19jaGlwLT5kZXYgPSBkZXY7CiAJZ3Bpb19jaGlwLT5vd25lciA9IFRISVNfTU9EVUxFOwpAQCAtNDI4LDE2ICs0MDcsMTkgQEAKIAlpcnFfY2hpcC0+ZmxhZ3MJPSBJUlFDSElQX1NLSVBfU0VUX1dBS0UgfCBJUlFDSElQX1NFVF9UWVBFX01BU0tFRAogCQkJIHwgSVJRQ0hJUF9NQVNLX09OX1NVU1BFTkQ7CiAKLQlwLT5pcnFfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfc2ltcGxlKHBkZXYtPmRldi5vZl9ub2RlLAotCQkJCQkgICAgICBwLT5jb25maWcubnVtYmVyX29mX3BpbnMsCi0JCQkJCSAgICAgIHAtPmNvbmZpZy5pcnFfYmFzZSwKLQkJCQkJICAgICAgJmdwaW9fcmNhcl9pcnFfZG9tYWluX29wcywgcCk7Ci0JaWYgKCFwLT5pcnFfZG9tYWluKSB7Ci0JCXJldCA9IC1FTlhJTzsKLQkJZGV2X2VycihkZXYsICJjYW5ub3QgaW5pdGlhbGl6ZSBpcnEgZG9tYWluXG4iKTsKKwlyZXQgPSBncGlvY2hpcF9hZGQoZ3Bpb19jaGlwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBHUElPIGNvbnRyb2xsZXJcbiIpOwogCQlnb3RvIGVycjA7CiAJfQogCisJcmV0ID0gZ3Bpb2NoaXBfaXJxY2hpcF9hZGQoJnAtPmdwaW9fY2hpcCwgaXJxX2NoaXAsIHAtPmNvbmZpZy5pcnFfYmFzZSwKKwkJCQkgICBoYW5kbGVfbGV2ZWxfaXJxLCBJUlFfVFlQRV9OT05FKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IGFkZCBpcnFjaGlwXG4iKTsKKwkJZ290byBlcnIxOworCX0KKwogCWlmIChkZXZtX3JlcXVlc3RfaXJxKGRldiwgaXJxLT5zdGFydCwgZ3Bpb19yY2FyX2lycV9oYW5kbGVyLAogCQkJICAgICBJUlFGX1NIQVJFRCwgbmFtZSwgcCkpIHsKIAkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBJUlFcbiIpOwpAQCAtNDQ1LDE3ICs0MjcsMTEgQEAKIAkJZ290byBlcnIxOwogCX0KIAotCXJldCA9IGdwaW9jaGlwX2FkZChncGlvX2NoaXApOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYWRkIEdQSU8gY29udHJvbGxlclxuIik7Ci0JCWdvdG8gZXJyMTsKLQl9Ci0KIAlkZXZfaW5mbyhkZXYsICJkcml2aW5nICVkIEdQSU9zXG4iLCBwLT5jb25maWcubnVtYmVyX29mX3BpbnMpOwogCiAJLyogd2FybiBpbiBjYXNlIG9mIG1pc21hdGNoIGlmIGlycSBiYXNlIGlzIHNwZWNpZmllZCAqLwogCWlmIChwLT5jb25maWcuaXJxX2Jhc2UpIHsKLQkJcmV0ID0gaXJxX2ZpbmRfbWFwcGluZyhwLT5pcnFfZG9tYWluLCAwKTsKKwkJcmV0ID0gaXJxX2ZpbmRfbWFwcGluZyhwLT5ncGlvX2NoaXAuaXJxZG9tYWluLCAwKTsKIAkJaWYgKHAtPmNvbmZpZy5pcnFfYmFzZSAhPSByZXQpCiAJCQlkZXZfd2FybihkZXYsICJpcnEgYmFzZSBtaXNtYXRjaCAoJXUvJXUpXG4iLAogCQkJCSBwLT5jb25maWcuaXJxX2Jhc2UsIHJldCk7CkBAIC00NzEsNyArNDQ3LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyMToKLQlpcnFfZG9tYWluX3JlbW92ZShwLT5pcnFfZG9tYWluKTsKKwlncGlvY2hpcF9yZW1vdmUoJnAtPmdwaW9fY2hpcCk7CiBlcnIwOgogCXBtX3J1bnRpbWVfcHV0KGRldik7CiAJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CkBAIC00ODQsNyArNDYwLDYgQEAKIAogCWdwaW9jaGlwX3JlbW92ZSgmcC0+Z3Bpb19jaGlwKTsKIAotCWlycV9kb21haW5fcmVtb3ZlKHAtPmlycV9kb21haW4pOwogCXBtX3J1bnRpbWVfcHV0KCZwZGV2LT5kZXYpOwogCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXNhMTEwMC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tc2ExMTAwLmMKaW5kZXggYTkwYmUzNC4uYmVjMzk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tc2ExMTAwLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KIApAQCAtNTAsNyArNTEsNyBAQAogCiBzdGF0aWMgaW50IHNhMTEwMF90b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCXJldHVybiBvZmZzZXQgPCAxMSA/IChJUlFfR1BJTzAgKyBvZmZzZXQpIDogKElSUV9HUElPMTEgLSAxMSArIG9mZnNldCk7CisJcmV0dXJuIElSUV9HUElPMCArIG9mZnNldDsKIH0KIAogc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgc2ExMTAwX2dwaW9fY2hpcCA9IHsKQEAgLTY0LDcgKzY1LDIwMyBAQAogCS5uZ3BpbwkJCT0gR1BJT19NQVggKyAxLAogfTsKIAorLyoKKyAqIFNBMTEwMCBHUElPIGVkZ2UgZGV0ZWN0aW9uIGZvciBJUlFzOgorICogSVJRcyBhcmUgZ2VuZXJhdGVkIG9uIEZhbGxpbmctRWRnZSwgUmlzaW5nLUVkZ2UsIG9yIGJvdGguCisgKiBVc2UgdGhpcyBpbnN0ZWFkIG9mIGRpcmVjdGx5IHNldHRpbmcgR1JFUi9HRkVSLgorICovCitzdGF0aWMgaW50IEdQSU9fSVJRX3Jpc2luZ19lZGdlOworc3RhdGljIGludCBHUElPX0lSUV9mYWxsaW5nX2VkZ2U7CitzdGF0aWMgaW50IEdQSU9fSVJRX21hc2s7CisKK3N0YXRpYyBpbnQgc2ExMTAwX2dwaW9fdHlwZShzdHJ1Y3QgaXJxX2RhdGEgKmQsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXVuc2lnbmVkIGludCBtYXNrOworCisJbWFzayA9IEJJVChkLT5od2lycSk7CisKKwlpZiAodHlwZSA9PSBJUlFfVFlQRV9QUk9CRSkgeworCQlpZiAoKEdQSU9fSVJRX3Jpc2luZ19lZGdlIHwgR1BJT19JUlFfZmFsbGluZ19lZGdlKSAmIG1hc2spCisJCQlyZXR1cm4gMDsKKwkJdHlwZSA9IElSUV9UWVBFX0VER0VfUklTSU5HIHwgSVJRX1RZUEVfRURHRV9GQUxMSU5HOworCX0KKworCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCisJCUdQSU9fSVJRX3Jpc2luZ19lZGdlIHw9IG1hc2s7CisJZWxzZQorCQlHUElPX0lSUV9yaXNpbmdfZWRnZSAmPSB+bWFzazsKKwlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykKKwkJR1BJT19JUlFfZmFsbGluZ19lZGdlIHw9IG1hc2s7CisJZWxzZQorCQlHUElPX0lSUV9mYWxsaW5nX2VkZ2UgJj0gfm1hc2s7CisKKwlHUkVSID0gR1BJT19JUlFfcmlzaW5nX2VkZ2UgJiBHUElPX0lSUV9tYXNrOworCUdGRVIgPSBHUElPX0lSUV9mYWxsaW5nX2VkZ2UgJiBHUElPX0lSUV9tYXNrOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBHUElPIElSUXMgbXVzdCBiZSBhY2tub3dsZWRnZWQuCisgKi8KK3N0YXRpYyB2b2lkIHNhMTEwMF9ncGlvX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJR0VEUiA9IEJJVChkLT5od2lycSk7Cit9CisKK3N0YXRpYyB2b2lkIHNhMTEwMF9ncGlvX21hc2soc3RydWN0IGlycV9kYXRhICpkKQoreworCXVuc2lnbmVkIGludCBtYXNrID0gQklUKGQtPmh3aXJxKTsKKworCUdQSU9fSVJRX21hc2sgJj0gfm1hc2s7CisKKwlHUkVSICY9IH5tYXNrOworCUdGRVIgJj0gfm1hc2s7Cit9CisKK3N0YXRpYyB2b2lkIHNhMTEwMF9ncGlvX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJdW5zaWduZWQgaW50IG1hc2sgPSBCSVQoZC0+aHdpcnEpOworCisJR1BJT19JUlFfbWFzayB8PSBtYXNrOworCisJR1JFUiA9IEdQSU9fSVJRX3Jpc2luZ19lZGdlICYgR1BJT19JUlFfbWFzazsKKwlHRkVSID0gR1BJT19JUlFfZmFsbGluZ19lZGdlICYgR1BJT19JUlFfbWFzazsKK30KKworc3RhdGljIGludCBzYTExMDBfZ3Bpb193YWtlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IG9uKQoreworCWlmIChvbikKKwkJUFdFUiB8PSBCSVQoZC0+aHdpcnEpOworCWVsc2UKKwkJUFdFUiAmPSB+QklUKGQtPmh3aXJxKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoaXMgaXMgZm9yIEdQSU8gSVJRcworICovCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNhMTEwMF9ncGlvX2lycV9jaGlwID0geworCS5uYW1lCQk9ICJHUElPIiwKKwkuaXJxX2Fjawk9IHNhMTEwMF9ncGlvX2FjaywKKwkuaXJxX21hc2sJPSBzYTExMDBfZ3Bpb19tYXNrLAorCS5pcnFfdW5tYXNrCT0gc2ExMTAwX2dwaW9fdW5tYXNrLAorCS5pcnFfc2V0X3R5cGUJPSBzYTExMDBfZ3Bpb190eXBlLAorCS5pcnFfc2V0X3dha2UJPSBzYTExMDBfZ3Bpb193YWtlLAorfTsKKworc3RhdGljIGludCBzYTExMDBfZ3Bpb19pcnFkb21haW5fbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkLAorCQl1bnNpZ25lZCBpbnQgaXJxLCBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCit7CisJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJnNhMTEwMF9ncGlvX2lycV9jaGlwLAorCQkJCSBoYW5kbGVfZWRnZV9pcnEpOworCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfZG9tYWluX29wcyBzYTExMDBfZ3Bpb19pcnFkb21haW5fb3BzID0geworCS5tYXAgPSBzYTExMDBfZ3Bpb19pcnFkb21haW5fbWFwLAorCS54bGF0ZSA9IGlycV9kb21haW5feGxhdGVfb25ldHdvY2VsbCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2RvbWFpbiAqc2ExMTAwX2dwaW9faXJxZG9tYWluOworCisvKgorICogSVJRIDAtMTEgKEdQSU8pIGhhbmRsZXIuICBXZSBlbnRlciBoZXJlIHdpdGggdGhlCisgKiBpcnFfY29udHJvbGxlcl9sb2NrIGhlbGQsIGFuZCBJUlFzIGRpc2FibGVkLiAgRGVjb2RlIHRoZSBJUlEKKyAqIGFuZCBjYWxsIHRoZSBoYW5kbGVyLgorICovCitzdGF0aWMgdm9pZAorc2ExMTAwX2dwaW9faGFuZGxlcih1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdW5zaWduZWQgaW50IG1hc2s7CisKKwltYXNrID0gR0VEUjsKKwlkbyB7CisJCS8qCisJCSAqIGNsZWFyIGRvd24gYWxsIGN1cnJlbnRseSBhY3RpdmUgSVJRIHNvdXJjZXMuCisJCSAqIFdlIHdpbGwgYmUgcHJvY2Vzc2luZyB0aGVtIGFsbC4KKwkJICovCisJCUdFRFIgPSBtYXNrOworCisJCWlycSA9IElSUV9HUElPMDsKKwkJZG8geworCQkJaWYgKG1hc2sgJiAxKQorCQkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOworCQkJbWFzayA+Pj0gMTsKKwkJCWlycSsrOworCQl9IHdoaWxlIChtYXNrKTsKKworCQltYXNrID0gR0VEUjsKKwl9IHdoaWxlIChtYXNrKTsKK30KKworc3RhdGljIGludCBzYTExMDBfZ3Bpb19zdXNwZW5kKHZvaWQpCit7CisJLyoKKwkgKiBTZXQgdGhlIGFwcHJvcHJpYXRlIGVkZ2VzIGZvciB3YWtldXAuCisJICovCisJR1JFUiA9IFBXRVIgJiBHUElPX0lSUV9yaXNpbmdfZWRnZTsKKwlHRkVSID0gUFdFUiAmIEdQSU9fSVJRX2ZhbGxpbmdfZWRnZTsKKworCS8qCisJICogQ2xlYXIgYW55IHBlbmRpbmcgR1BJTyBpbnRlcnJ1cHRzLgorCSAqLworCUdFRFIgPSBHRURSOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNhMTEwMF9ncGlvX3Jlc3VtZSh2b2lkKQoreworCUdSRVIgPSBHUElPX0lSUV9yaXNpbmdfZWRnZSAmIEdQSU9fSVJRX21hc2s7CisJR0ZFUiA9IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZSAmIEdQSU9fSVJRX21hc2s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgc2ExMTAwX2dwaW9fc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQJPSBzYTExMDBfZ3Bpb19zdXNwZW5kLAorCS5yZXN1bWUJCT0gc2ExMTAwX2dwaW9fcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2ExMTAwX2dwaW9faW5pdF9kZXZpY2Vmcyh2b2lkKQoreworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzYTExMDBfZ3Bpb19zeXNjb3JlX29wcyk7CisJcmV0dXJuIDA7Cit9CisKK2RldmljZV9pbml0Y2FsbChzYTExMDBfZ3Bpb19pbml0X2RldmljZWZzKTsKKwogdm9pZCBfX2luaXQgc2ExMTAwX2luaXRfZ3Bpbyh2b2lkKQogeworCS8qIGNsZWFyIGFsbCBHUElPIGVkZ2UgZGV0ZWN0cyAqLworCUdGRVIgPSAwOworCUdSRVIgPSAwOworCUdFRFIgPSAtMTsKKwogCWdwaW9jaGlwX2FkZCgmc2ExMTAwX2dwaW9fY2hpcCk7CisKKwlzYTExMDBfZ3Bpb19pcnFkb21haW4gPSBpcnFfZG9tYWluX2FkZF9zaW1wbGUoTlVMTCwKKwkJCTI4LCBJUlFfR1BJTzAsCisJCQkmc2ExMTAwX2dwaW9faXJxZG9tYWluX29wcywgTlVMTCk7CisKKwkvKgorCSAqIEluc3RhbGwgaGFuZGxlcnMgZm9yIEdQSU8gMC0xMCBlZGdlIGRldGVjdCBpbnRlcnJ1cHRzCisJICovCisJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoSVJRX0dQSU8wX1NDLCBzYTExMDBfZ3Bpb19oYW5kbGVyKTsKKwlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihJUlFfR1BJTzFfU0MsIHNhMTEwMF9ncGlvX2hhbmRsZXIpOworCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPMl9TQywgc2ExMTAwX2dwaW9faGFuZGxlcik7CisJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoSVJRX0dQSU8zX1NDLCBzYTExMDBfZ3Bpb19oYW5kbGVyKTsKKwlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihJUlFfR1BJTzRfU0MsIHNhMTEwMF9ncGlvX2hhbmRsZXIpOworCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPNV9TQywgc2ExMTAwX2dwaW9faGFuZGxlcik7CisJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoSVJRX0dQSU82X1NDLCBzYTExMDBfZ3Bpb19oYW5kbGVyKTsKKwlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihJUlFfR1BJTzdfU0MsIHNhMTEwMF9ncGlvX2hhbmRsZXIpOworCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKElSUV9HUElPOF9TQywgc2ExMTAwX2dwaW9faGFuZGxlcik7CisJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoSVJRX0dQSU85X1NDLCBzYTExMDBfZ3Bpb19oYW5kbGVyKTsKKwlpcnFfc2V0X2NoYWluZWRfaGFuZGxlcihJUlFfR1BJTzEwX1NDLCBzYTExMDBfZ3Bpb19oYW5kbGVyKTsKKwkvKgorCSAqIEluc3RhbGwgaGFuZGxlciBmb3IgR1BJTyAxMS0yNyBlZGdlIGRldGVjdCBpbnRlcnJ1cHRzCisJICovCisJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoSVJRX0dQSU8xMV8yNywgc2ExMTAwX2dwaW9faGFuZGxlcik7CisKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXNjaC5jIGIvZHJpdmVycy9ncGlvL2dwaW8tc2NoLmMKaW5kZXggMGEwY2YxMy4uYjcyOTA2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tc2NoLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tc2NoLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAl1bnNpZ25lZCBzaG9ydCByZXN1bWVfYmFzZTsKIH07CiAKLSNkZWZpbmUgdG9fc2NoX2dwaW8oYykJY29udGFpbmVyX29mKGMsIHN0cnVjdCBzY2hfZ3BpbywgY2hpcCkKKyNkZWZpbmUgdG9fc2NoX2dwaW8oZ2MpCWNvbnRhaW5lcl9vZihnYywgc3RydWN0IHNjaF9ncGlvLCBjaGlwKQogCiBzdGF0aWMgdW5zaWduZWQgc2NoX2dwaW9fb2Zmc2V0KHN0cnVjdCBzY2hfZ3BpbyAqc2NoLCB1bnNpZ25lZCBncGlvLAogCQkJCXVuc2lnbmVkIHJlZykKQEAgLTYzLDc1ICs2Myw1OSBAQAogCXJldHVybiBncGlvICUgODsKIH0KIAotc3RhdGljIHZvaWQgc2NoX2dwaW9fZW5hYmxlKHN0cnVjdCBzY2hfZ3BpbyAqc2NoLCB1bnNpZ25lZCBncGlvKQotewotCXVuc2lnbmVkIHNob3J0IG9mZnNldCwgYml0OwotCXU4IGVuYWJsZTsKLQotCXNwaW5fbG9jaygmc2NoLT5sb2NrKTsKLQotCW9mZnNldCA9IHNjaF9ncGlvX29mZnNldChzY2gsIGdwaW8sIEdFTik7Ci0JYml0ID0gc2NoX2dwaW9fYml0KHNjaCwgZ3Bpbyk7Ci0KLQllbmFibGUgPSBpbmIoc2NoLT5pb2Jhc2UgKyBvZmZzZXQpOwotCWlmICghKGVuYWJsZSAmICgxIDw8IGJpdCkpKQotCQlvdXRiKGVuYWJsZSB8ICgxIDw8IGJpdCksIHNjaC0+aW9iYXNlICsgb2Zmc2V0KTsKLQotCXNwaW5fdW5sb2NrKCZzY2gtPmxvY2spOwotfQotCi1zdGF0aWMgaW50IHNjaF9ncGlvX2RpcmVjdGlvbl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgIGdwaW9fbnVtKQorc3RhdGljIGludCBzY2hfZ3Bpb19yZWdfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCByZWcpCiB7CiAJc3RydWN0IHNjaF9ncGlvICpzY2ggPSB0b19zY2hfZ3BpbyhnYyk7Ci0JdTggY3Vycl9kaXJzOwogCXVuc2lnbmVkIHNob3J0IG9mZnNldCwgYml0OworCXU4IHJlZ192YWw7CisKKwlvZmZzZXQgPSBzY2hfZ3Bpb19vZmZzZXQoc2NoLCBncGlvLCByZWcpOworCWJpdCA9IHNjaF9ncGlvX2JpdChzY2gsIGdwaW8pOworCisJcmVnX3ZhbCA9ICEhKGluYihzY2gtPmlvYmFzZSArIG9mZnNldCkgJiBCSVQoYml0KSk7CisKKwlyZXR1cm4gcmVnX3ZhbDsKK30KKworc3RhdGljIHZvaWQgc2NoX2dwaW9fcmVnX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgcmVnLAorCQkJICAgICBpbnQgdmFsKQoreworCXN0cnVjdCBzY2hfZ3BpbyAqc2NoID0gdG9fc2NoX2dwaW8oZ2MpOworCXVuc2lnbmVkIHNob3J0IG9mZnNldCwgYml0OworCXU4IHJlZ192YWw7CisKKwlvZmZzZXQgPSBzY2hfZ3Bpb19vZmZzZXQoc2NoLCBncGlvLCByZWcpOworCWJpdCA9IHNjaF9ncGlvX2JpdChzY2gsIGdwaW8pOworCisJcmVnX3ZhbCA9IGluYihzY2gtPmlvYmFzZSArIG9mZnNldCk7CisKKwlpZiAodmFsKQorCQlvdXRiKHJlZ192YWwgfCBCSVQoYml0KSwgc2NoLT5pb2Jhc2UgKyBvZmZzZXQpOworCWVsc2UKKwkJb3V0YigocmVnX3ZhbCAmIH5CSVQoYml0KSksIHNjaC0+aW9iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGludCBzY2hfZ3Bpb19kaXJlY3Rpb25faW4oc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGdwaW9fbnVtKQoreworCXN0cnVjdCBzY2hfZ3BpbyAqc2NoID0gdG9fc2NoX2dwaW8oZ2MpOwogCiAJc3Bpbl9sb2NrKCZzY2gtPmxvY2spOwotCi0Jb2Zmc2V0ID0gc2NoX2dwaW9fb2Zmc2V0KHNjaCwgZ3Bpb19udW0sIEdJTyk7Ci0JYml0ID0gc2NoX2dwaW9fYml0KHNjaCwgZ3Bpb19udW0pOwotCi0JY3Vycl9kaXJzID0gaW5iKHNjaC0+aW9iYXNlICsgb2Zmc2V0KTsKLQotCWlmICghKGN1cnJfZGlycyAmICgxIDw8IGJpdCkpKQotCQlvdXRiKGN1cnJfZGlycyB8ICgxIDw8IGJpdCksIHNjaC0+aW9iYXNlICsgb2Zmc2V0KTsKLQorCXNjaF9ncGlvX3JlZ19zZXQoZ2MsIGdwaW9fbnVtLCBHSU8sIDEpOwogCXNwaW5fdW5sb2NrKCZzY2gtPmxvY2spOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNjaF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgZ3Bpb19udW0pCiB7Ci0Jc3RydWN0IHNjaF9ncGlvICpzY2ggPSB0b19zY2hfZ3BpbyhnYyk7Ci0JaW50IHJlczsKLQl1bnNpZ25lZCBzaG9ydCBvZmZzZXQsIGJpdDsKLQotCW9mZnNldCA9IHNjaF9ncGlvX29mZnNldChzY2gsIGdwaW9fbnVtLCBHTFYpOwotCWJpdCA9IHNjaF9ncGlvX2JpdChzY2gsIGdwaW9fbnVtKTsKLQotCXJlcyA9ICEhKGluYihzY2gtPmlvYmFzZSArIG9mZnNldCkgJiAoMSA8PCBiaXQpKTsKLQotCXJldHVybiByZXM7CisJcmV0dXJuIHNjaF9ncGlvX3JlZ19nZXQoZ2MsIGdwaW9fbnVtLCBHTFYpOwogfQogCiBzdGF0aWMgdm9pZCBzY2hfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGdwaW9fbnVtLCBpbnQgdmFsKQogewogCXN0cnVjdCBzY2hfZ3BpbyAqc2NoID0gdG9fc2NoX2dwaW8oZ2MpOwotCXU4IGN1cnJfdmFsczsKLQl1bnNpZ25lZCBzaG9ydCBvZmZzZXQsIGJpdDsKIAogCXNwaW5fbG9jaygmc2NoLT5sb2NrKTsKLQotCW9mZnNldCA9IHNjaF9ncGlvX29mZnNldChzY2gsIGdwaW9fbnVtLCBHTFYpOwotCWJpdCA9IHNjaF9ncGlvX2JpdChzY2gsIGdwaW9fbnVtKTsKLQotCWN1cnJfdmFscyA9IGluYihzY2gtPmlvYmFzZSArIG9mZnNldCk7Ci0KLQlpZiAodmFsKQotCQlvdXRiKGN1cnJfdmFscyB8ICgxIDw8IGJpdCksIHNjaC0+aW9iYXNlICsgb2Zmc2V0KTsKLQllbHNlCi0JCW91dGIoKGN1cnJfdmFscyAmIH4oMSA8PCBiaXQpKSwgc2NoLT5pb2Jhc2UgKyBvZmZzZXQpOwotCisJc2NoX2dwaW9fcmVnX3NldChnYywgZ3Bpb19udW0sIEdMViwgdmFsKTsKIAlzcGluX3VubG9jaygmc2NoLT5sb2NrKTsKIH0KIApAQCAtMTM5LDE4ICsxMjMsOSBAQAogCQkJCSAgaW50IHZhbCkKIHsKIAlzdHJ1Y3Qgc2NoX2dwaW8gKnNjaCA9IHRvX3NjaF9ncGlvKGdjKTsKLQl1OCBjdXJyX2RpcnM7Ci0JdW5zaWduZWQgc2hvcnQgb2Zmc2V0LCBiaXQ7CiAKIAlzcGluX2xvY2soJnNjaC0+bG9jayk7Ci0KLQlvZmZzZXQgPSBzY2hfZ3Bpb19vZmZzZXQoc2NoLCBncGlvX251bSwgR0lPKTsKLQliaXQgPSBzY2hfZ3Bpb19iaXQoc2NoLCBncGlvX251bSk7Ci0KLQljdXJyX2RpcnMgPSBpbmIoc2NoLT5pb2Jhc2UgKyBvZmZzZXQpOwotCWlmIChjdXJyX2RpcnMgJiAoMSA8PCBiaXQpKQotCQlvdXRiKGN1cnJfZGlycyAmIH4oMSA8PCBiaXQpLCBzY2gtPmlvYmFzZSArIG9mZnNldCk7Ci0KKwlzY2hfZ3Bpb19yZWdfc2V0KGdjLCBncGlvX251bSwgR0lPLCAwKTsKIAlzcGluX3VubG9jaygmc2NoLT5sb2NrKTsKIAogCS8qCkBAIC0yMDksMTMgKzE4NCwxMyBAQAogCQkgKiBHUElPNyBpcyBjb25maWd1cmVkIGJ5IHRoZSBDTUMgYXMgU0xQSU9WUgogCQkgKiBFbmFibGUgR1BJT1s5OjhdIGNvcmUgcG93ZXJlZCBncGlvcyBleHBsaWNpdGx5CiAJCSAqLwotCQlzY2hfZ3Bpb19lbmFibGUoc2NoLCA4KTsKLQkJc2NoX2dwaW9fZW5hYmxlKHNjaCwgOSk7CisJCXNjaF9ncGlvX3JlZ19zZXQoJnNjaC0+Y2hpcCwgOCwgR0VOLCAxKTsKKwkJc2NoX2dwaW9fcmVnX3NldCgmc2NoLT5jaGlwLCA5LCBHRU4sIDEpOwogCQkvKgogCQkgKiBTVVNfR1BJT1syOjBdIGVuYWJsZWQgYnkgZGVmYXVsdAogCQkgKiBFbmFibGUgU1VTX0dQSU8zIHJlc3VtZSBwb3dlcmVkIGdwaW8gZXhwbGljaXRseQogCQkgKi8KLQkJc2NoX2dwaW9fZW5hYmxlKHNjaCwgMTMpOworCQlzY2hfZ3Bpb19yZWdfc2V0KCZzY2gtPmNoaXAsIDEzLCBHRU4sIDEpOwogCQlicmVhazsKIAogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JVENfTFBDOgpAQCAtMjMwLDYgKzIwNSwxMiBAQAogCQlzY2gtPmNoaXAubmdwaW8gPSAzMDsKIAkJYnJlYWs7CiAKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfUVVBUktfWDEwMDBfSUxCOgorCQlzY2gtPmNvcmVfYmFzZSA9IDA7CisJCXNjaC0+cmVzdW1lX2Jhc2UgPSAyOworCQlzY2gtPmNoaXAubmdwaW8gPSA4OworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXN0bXBlLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby1zdG1wZS5jCmluZGV4IDg1YzViMTkuLmRhYmZiOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXN0bXBlLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tc3RtcGUuYwpAQCAtMzAsNyArMzAsNyBAQAogCXN0cnVjdCBzdG1wZSAqc3RtcGU7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBtdXRleCBpcnFfbG9jazsKLQl1bnNpZ25lZCBub3JlcXVlc3RfbWFzazsKKwl1MzIgbm9yZXF1ZXN0X21hc2s7CiAJLyogQ2FjaGVzIG9mIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVycyBmb3IgYnVzX2xvY2sgKi8KIAl1OCByZWdzW0NBQ0hFX05SX1JFR1NdW0NBQ0hFX05SX0JBTktTXTsKIAl1OCBvbGRyZWdzW0NBQ0hFX05SX1JFR1NdW0NBQ0hFX05SX0JBTktTXTsKQEAgLTM0MCwxMyArMzQwLDEwIEBACiB7CiAJc3RydWN0IHN0bXBlICpzdG1wZSA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7Ci0Jc3RydWN0IHN0bXBlX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IHN0bXBlX2dwaW8gKnN0bXBlX2dwaW87CiAJaW50IHJldDsKIAlpbnQgaXJxID0gMDsKIAotCXBkYXRhID0gc3RtcGUtPnBkYXRhLT5ncGlvOwotCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAogCXN0bXBlX2dwaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3RtcGVfZ3BpbyksIEdGUF9LRVJORUwpOwpAQCAtMzYwLDE5ICszNTcsMTQgQEAKIAlzdG1wZV9ncGlvLT5jaGlwID0gdGVtcGxhdGVfY2hpcDsKIAlzdG1wZV9ncGlvLT5jaGlwLm5ncGlvID0gc3RtcGUtPm51bV9ncGlvczsKIAlzdG1wZV9ncGlvLT5jaGlwLmRldiA9ICZwZGV2LT5kZXY7Ci0jaWZkZWYgQ09ORklHX09GCiAJc3RtcGVfZ3Bpby0+Y2hpcC5vZl9ub2RlID0gbnA7Ci0jZW5kaWYKIAlzdG1wZV9ncGlvLT5jaGlwLmJhc2UgPSAtMTsKIAogCWlmIChJU19FTkFCTEVEKENPTkZJR19ERUJVR19GUykpCiAgICAgICAgICAgICAgICAgc3RtcGVfZ3Bpby0+Y2hpcC5kYmdfc2hvdyA9IHN0bXBlX2RiZ19zaG93OwogCi0JaWYgKHBkYXRhKQotCQlzdG1wZV9ncGlvLT5ub3JlcXVlc3RfbWFzayA9IHBkYXRhLT5ub3JlcXVlc3RfbWFzazsKLQllbHNlIGlmIChucCkKLQkJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJzdCxub3JlcXVlc3QtbWFzayIsCi0JCQkJJnN0bXBlX2dwaW8tPm5vcmVxdWVzdF9tYXNrKTsKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInN0LG5vcmVxdWVzdC1tYXNrIiwKKwkJCSZzdG1wZV9ncGlvLT5ub3JlcXVlc3RfbWFzayk7CiAKIAlpZiAoaXJxIDwgMCkKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwKQEAgLTQxNCw5ICs0MDYsNiBAQAogCQkJCQkgICAgIE5VTEwpOwogCX0KIAotCWlmIChwZGF0YSAmJiBwZGF0YS0+c2V0dXApCi0JCXBkYXRhLT5zZXR1cChzdG1wZSwgc3RtcGVfZ3Bpby0+Y2hpcC5iYXNlKTsKLQogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHN0bXBlX2dwaW8pOwogCiAJcmV0dXJuIDA7CkBAIC00MzMsMTUgKzQyMiw5IEBACiB7CiAJc3RydWN0IHN0bXBlX2dwaW8gKnN0bXBlX2dwaW8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc3RtcGUgKnN0bXBlID0gc3RtcGVfZ3Bpby0+c3RtcGU7Ci0Jc3RydWN0IHN0bXBlX2dwaW9fcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzdG1wZS0+cGRhdGEtPmdwaW87Ci0KLQlpZiAocGRhdGEgJiYgcGRhdGEtPnJlbW92ZSkKLQkJcGRhdGEtPnJlbW92ZShzdG1wZSwgc3RtcGVfZ3Bpby0+Y2hpcC5iYXNlKTsKIAogCWdwaW9jaGlwX3JlbW92ZSgmc3RtcGVfZ3Bpby0+Y2hpcCk7Ci0KIAlzdG1wZV9kaXNhYmxlKHN0bXBlLCBTVE1QRV9CTE9DS19HUElPKTsKLQogCWtmcmVlKHN0bXBlX2dwaW8pOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby1zeDE1MHguYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXN4MTUweC5jCmluZGV4IGJjZTZjNjEuLjQ1OGQ5ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXN4MTUweC5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXN4MTUweC5jCkBAIC0yMywyMyArMjMsNTEgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvc3gxNTB4Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogCiAjZGVmaW5lIE5PX1VQREFURV9QRU5ESU5HCS0xCiAKLXN0cnVjdCBzeDE1MHhfZGV2aWNlX2RhdGEgewotCXU4IHJlZ19wdWxsdXA7Ci0JdTggcmVnX3B1bGxkbjsKKy8qIFRoZSBjaGlwIG1vZGVscyBvZiBzeDE1MHggKi8KKyNkZWZpbmUgU1gxNTBYXzQ1NiAwCisjZGVmaW5lIFNYMTUwWF83ODkgMQorCitzdHJ1Y3Qgc3gxNTB4XzQ1Nl9wcmkgeworCXU4IHJlZ19wbGRfbW9kZTsKKwl1OCByZWdfcGxkX3RhYmxlMDsKKwl1OCByZWdfcGxkX3RhYmxlMTsKKwl1OCByZWdfcGxkX3RhYmxlMjsKKwl1OCByZWdfcGxkX3RhYmxlMzsKKwl1OCByZWdfcGxkX3RhYmxlNDsKKwl1OCByZWdfYWR2YW5jZTsKK307CisKK3N0cnVjdCBzeDE1MHhfNzg5X3ByaSB7CiAJdTggcmVnX2RyYWluOwogCXU4IHJlZ19wb2xhcml0eTsKKwl1OCByZWdfY2xvY2s7CisJdTggcmVnX21pc2M7CisJdTggcmVnX3Jlc2V0OworCXU4IG5ncGlvczsKK307CisKK3N0cnVjdCBzeDE1MHhfZGV2aWNlX2RhdGEgeworCXU4IG1vZGVsOworCXU4IHJlZ19wdWxsdXA7CisJdTggcmVnX3B1bGxkbjsKIAl1OCByZWdfZGlyOwogCXU4IHJlZ19kYXRhOwogCXU4IHJlZ19pcnFfbWFzazsKIAl1OCByZWdfaXJxX3NyYzsKIAl1OCByZWdfc2Vuc2U7Ci0JdTggcmVnX2Nsb2NrOwotCXU4IHJlZ19taXNjOwotCXU4IHJlZ19yZXNldDsKIAl1OCBuZ3Bpb3M7CisJdW5pb24geworCQlzdHJ1Y3Qgc3gxNTB4XzQ1Nl9wcmkgeDQ1NjsKKwkJc3RydWN0IHN4MTUweF83ODlfcHJpIHg3ODk7CisJfSBwcmk7CiB9OwogCiBzdHJ1Y3Qgc3gxNTB4X2NoaXAgewpAQCAtNTksNDQgKzg3LDc5IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3gxNTB4X2RldmljZV9kYXRhIHN4MTUweF9kZXZpY2VzW10gPSB7CiAJWzBdID0geyAvKiBzeDE1MDhxICovCi0JCS5yZWdfcHVsbHVwICAgPSAweDAzLAotCQkucmVnX3B1bGxkbiAgID0gMHgwNCwKLQkJLnJlZ19kcmFpbiAgICA9IDB4MDUsCi0JCS5yZWdfcG9sYXJpdHkgPSAweDA2LAotCQkucmVnX2RpciAgICAgID0gMHgwNywKLQkJLnJlZ19kYXRhICAgICA9IDB4MDgsCi0JCS5yZWdfaXJxX21hc2sgPSAweDA5LAotCQkucmVnX2lycV9zcmMgID0gMHgwYywKLQkJLnJlZ19zZW5zZSAgICA9IDB4MGIsCi0JCS5yZWdfY2xvY2sgICAgPSAweDBmLAotCQkucmVnX21pc2MgICAgID0gMHgxMCwKLQkJLnJlZ19yZXNldCAgICA9IDB4N2QsCi0JCS5uZ3Bpb3MgICAgICAgPSA4CisJCS5tb2RlbCA9IFNYMTUwWF83ODksCisJCS5yZWdfcHVsbHVwCT0gMHgwMywKKwkJLnJlZ19wdWxsZG4JPSAweDA0LAorCQkucmVnX2Rpcgk9IDB4MDcsCisJCS5yZWdfZGF0YQk9IDB4MDgsCisJCS5yZWdfaXJxX21hc2sJPSAweDA5LAorCQkucmVnX2lycV9zcmMJPSAweDBjLAorCQkucmVnX3NlbnNlCT0gMHgwYiwKKwkJLnByaS54Nzg5ID0geworCQkJLnJlZ19kcmFpbgk9IDB4MDUsCisJCQkucmVnX3BvbGFyaXR5CT0gMHgwNiwKKwkJCS5yZWdfY2xvY2sJPSAweDBmLAorCQkJLnJlZ19taXNjCT0gMHgxMCwKKwkJCS5yZWdfcmVzZXQJPSAweDdkLAorCQl9LAorCQkubmdwaW9zID0gOCwKIAl9LAogCVsxXSA9IHsgLyogc3gxNTA5cSAqLwotCQkucmVnX3B1bGx1cCAgID0gMHgwNywKLQkJLnJlZ19wdWxsZG4gICA9IDB4MDksCi0JCS5yZWdfZHJhaW4gICAgPSAweDBiLAotCQkucmVnX3BvbGFyaXR5ID0gMHgwZCwKLQkJLnJlZ19kaXIgICAgICA9IDB4MGYsCi0JCS5yZWdfZGF0YSAgICAgPSAweDExLAotCQkucmVnX2lycV9tYXNrID0gMHgxMywKLQkJLnJlZ19pcnFfc3JjICA9IDB4MTksCi0JCS5yZWdfc2Vuc2UgICAgPSAweDE3LAotCQkucmVnX2Nsb2NrICAgID0gMHgxZSwKLQkJLnJlZ19taXNjICAgICA9IDB4MWYsCi0JCS5yZWdfcmVzZXQgICAgPSAweDdkLAotCQkubmdwaW9zICAgICAgID0gMTYKKwkJLm1vZGVsID0gU1gxNTBYXzc4OSwKKwkJLnJlZ19wdWxsdXAJPSAweDA3LAorCQkucmVnX3B1bGxkbgk9IDB4MDksCisJCS5yZWdfZGlyCT0gMHgwZiwKKwkJLnJlZ19kYXRhCT0gMHgxMSwKKwkJLnJlZ19pcnFfbWFzawk9IDB4MTMsCisJCS5yZWdfaXJxX3NyYwk9IDB4MTksCisJCS5yZWdfc2Vuc2UJPSAweDE3LAorCQkucHJpLng3ODkgPSB7CisJCQkucmVnX2RyYWluCT0gMHgwYiwKKwkJCS5yZWdfcG9sYXJpdHkJPSAweDBkLAorCQkJLnJlZ19jbG9jawk9IDB4MWUsCisJCQkucmVnX21pc2MJPSAweDFmLAorCQkJLnJlZ19yZXNldAk9IDB4N2QsCisJCX0sCisJCS5uZ3Bpb3MJPSAxNgorCX0sCisJWzJdID0geyAvKiBzeDE1MDZxICovCisJCS5tb2RlbCA9IFNYMTUwWF80NTYsCisJCS5yZWdfcHVsbHVwCT0gMHgwNSwKKwkJLnJlZ19wdWxsZG4JPSAweDA3LAorCQkucmVnX2Rpcgk9IDB4MDMsCisJCS5yZWdfZGF0YQk9IDB4MDEsCisJCS5yZWdfaXJxX21hc2sJPSAweDA5LAorCQkucmVnX2lycV9zcmMJPSAweDBmLAorCQkucmVnX3NlbnNlCT0gMHgwZCwKKwkJLnByaS54NDU2ID0geworCQkJLnJlZ19wbGRfbW9kZQk9IDB4MjEsCisJCQkucmVnX3BsZF90YWJsZTAJPSAweDIzLAorCQkJLnJlZ19wbGRfdGFibGUxCT0gMHgyNSwKKwkJCS5yZWdfcGxkX3RhYmxlMgk9IDB4MjcsCisJCQkucmVnX3BsZF90YWJsZTMJPSAweDI5LAorCQkJLnJlZ19wbGRfdGFibGU0CT0gMHgyYiwKKwkJCS5yZWdfYWR2YW5jZQk9IDB4YWQsCisJCX0sCisJCS5uZ3Bpb3MJPSAxNgogCX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc3gxNTB4X2lkW10gPSB7CiAJeyJzeDE1MDhxIiwgMH0sCiAJeyJzeDE1MDlxIiwgMX0sCisJeyJzeDE1MDZxIiwgMn0sCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc3gxNTB4X2lkKTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3gxNTB4X29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJzZW10ZWNoLHN4MTUwOHEiIH0sCisJeyAuY29tcGF0aWJsZSA9ICJzZW10ZWNoLHN4MTUwOXEiIH0sCisJeyAuY29tcGF0aWJsZSA9ICJzZW10ZWNoLHN4MTUwNnEiIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc3gxNTB4X29mX21hdGNoKTsKKwogc3RhdGljIHMzMiBzeDE1MHhfaTJjX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsKQogewogCXMzMiBlcnIgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpOwpAQCAtMTkxLDcgKzI1NCw3IEBACiBzdGF0aWMgdm9pZCBzeDE1MHhfc2V0X29zY2lvKHN0cnVjdCBzeDE1MHhfY2hpcCAqY2hpcCwgaW50IHZhbCkKIHsKIAlzeDE1MHhfaTJjX3dyaXRlKGNoaXAtPmNsaWVudCwKLQkJCWNoaXAtPmRldl9jZmctPnJlZ19jbG9jaywKKwkJCWNoaXAtPmRldl9jZmctPnByaS54Nzg5LnJlZ19jbG9jaywKIAkJCSh2YWwgPyAweDFmIDogMHgxMCkpOwogfQogCkBAIC0yOTMsMjcgKzM1NiwxMSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbnQgc3gxNTB4X2dwaW9fdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IHN4MTUweF9jaGlwICpjaGlwOwotCi0JY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHN4MTUweF9jaGlwLCBncGlvX2NoaXApOwotCi0JaWYgKG9mZnNldCA+PSBjaGlwLT5kZXZfY2ZnLT5uZ3Bpb3MpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGNoaXAtPmlycV9iYXNlIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gY2hpcC0+aXJxX2Jhc2UgKyBvZmZzZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIHN4MTUweF9pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3RydWN0IHN4MTUweF9jaGlwICpjaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0JdW5zaWduZWQgbjsKKwl1bnNpZ25lZCBuID0gZC0+aHdpcnE7CiAKLQluID0gZC0+aXJxIC0gY2hpcC0+aXJxX2Jhc2U7CiAJY2hpcC0+aXJxX21hc2tlZCB8PSAoMSA8PCBuKTsKIAljaGlwLT5pcnFfdXBkYXRlID0gbjsKIH0KQEAgLTMyMSw5ICszNjgsOCBAQAogc3RhdGljIHZvaWQgc3gxNTB4X2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXN0cnVjdCBzeDE1MHhfY2hpcCAqY2hpcCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwotCXVuc2lnbmVkIG47CisJdW5zaWduZWQgbiA9IGQtPmh3aXJxOwogCi0JbiA9IGQtPmlycSAtIGNoaXAtPmlycV9iYXNlOwogCWNoaXAtPmlycV9tYXNrZWQgJj0gfigxIDw8IG4pOwogCWNoaXAtPmlycV91cGRhdGUgPSBuOwogfQpAQCAtMzM2LDcgKzM4Miw3IEBACiAJaWYgKGZsb3dfdHlwZSAmIChJUlFfVFlQRV9MRVZFTF9ISUdIIHwgSVJRX1RZUEVfTEVWRUxfTE9XKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQluID0gZC0+aXJxIC0gY2hpcC0+aXJxX2Jhc2U7CisJbiA9IGQtPmh3aXJxOwogCiAJaWYgKGZsb3dfdHlwZSAmIElSUV9UWVBFX0VER0VfUklTSU5HKQogCQl2YWwgfD0gMHgxOwpAQCAtMzcxLDcgKzQxNyw5IEBACiAJCQkJdmFsKTsKIAkJZm9yIChuID0gMDsgbiA8IDg7ICsrbikgewogCQkJaWYgKHZhbCAmICgxIDw8IG4pKSB7Ci0JCQkJc3ViX2lycSA9IGNoaXAtPmlycV9iYXNlICsgKGkgKiA4KSArIG47CisJCQkJc3ViX2lycSA9IGlycV9maW5kX21hcHBpbmcoCisJCQkJCWNoaXAtPmdwaW9fY2hpcC5pcnFkb21haW4sCisJCQkJCShpICogOCkgKyBuKTsKIAkJCQloYW5kbGVfbmVzdGVkX2lycShzdWJfaXJxKTsKIAkJCQkrK25oYW5kbGVkOwogCQkJfQpAQCAtNDAxLDcgKzQ0OSw3IEBACiAKIAkvKiBBdm9pZCB1cGRhdGVzIGlmIG5vdGhpbmcgY2hhbmdlZCAqLwogCWlmIChjaGlwLT5kZXZfc2Vuc2UgPT0gY2hpcC0+aXJxX3NlbnNlICYmCi0JICAgIGNoaXAtPmRldl9zZW5zZSA9PSBjaGlwLT5pcnFfbWFza2VkKQorCSAgICBjaGlwLT5kZXZfbWFza2VkID09IGNoaXAtPmlycV9tYXNrZWQpCiAJCWdvdG8gb3V0OwogCiAJY2hpcC0+ZGV2X3NlbnNlID0gY2hpcC0+aXJxX3NlbnNlOwpAQCAtNDI4LDE1ICs0NzYsMTkgQEAKIAogCWNoaXAtPmNsaWVudCAgICAgICAgICAgICAgICAgICAgID0gY2xpZW50OwogCWNoaXAtPmRldl9jZmcgICAgICAgICAgICAgICAgICAgID0gJnN4MTUweF9kZXZpY2VzW2RyaXZlcl9kYXRhXTsKKwljaGlwLT5ncGlvX2NoaXAuZGV2ICAgICAgICAgICAgICA9ICZjbGllbnQtPmRldjsKIAljaGlwLT5ncGlvX2NoaXAubGFiZWwgICAgICAgICAgICA9IGNsaWVudC0+bmFtZTsKIAljaGlwLT5ncGlvX2NoaXAuZGlyZWN0aW9uX2lucHV0ICA9IHN4MTUweF9ncGlvX2RpcmVjdGlvbl9pbnB1dDsKIAljaGlwLT5ncGlvX2NoaXAuZGlyZWN0aW9uX291dHB1dCA9IHN4MTUweF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQ7CiAJY2hpcC0+Z3Bpb19jaGlwLmdldCAgICAgICAgICAgICAgPSBzeDE1MHhfZ3Bpb19nZXQ7CiAJY2hpcC0+Z3Bpb19jaGlwLnNldCAgICAgICAgICAgICAgPSBzeDE1MHhfZ3Bpb19zZXQ7Ci0JY2hpcC0+Z3Bpb19jaGlwLnRvX2lycSAgICAgICAgICAgPSBzeDE1MHhfZ3Bpb190b19pcnE7CiAJY2hpcC0+Z3Bpb19jaGlwLmJhc2UgICAgICAgICAgICAgPSBwZGF0YS0+Z3Bpb19iYXNlOwogCWNoaXAtPmdwaW9fY2hpcC5jYW5fc2xlZXAgICAgICAgID0gdHJ1ZTsKIAljaGlwLT5ncGlvX2NoaXAubmdwaW8gICAgICAgICAgICA9IGNoaXAtPmRldl9jZmctPm5ncGlvczsKKyNpZmRlZiBDT05GSUdfT0ZfR1BJTworCWNoaXAtPmdwaW9fY2hpcC5vZl9ub2RlICAgICAgICAgID0gY2xpZW50LT5kZXYub2Zfbm9kZTsKKwljaGlwLT5ncGlvX2NoaXAub2ZfZ3Bpb19uX2NlbGxzICA9IDI7CisjZW5kaWYKIAlpZiAocGRhdGEtPm9zY2lvX2lzX2dwbykKIAkJKytjaGlwLT5ncGlvX2NoaXAubmdwaW87CiAKQEAgLTQ3MCwxMyArNTIyLDEzIEBACiAJaW50IGVycjsKIAogCWVyciA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2hpcC0+Y2xpZW50LAotCQkJCQljaGlwLT5kZXZfY2ZnLT5yZWdfcmVzZXQsCisJCQkJCWNoaXAtPmRldl9jZmctPnByaS54Nzg5LnJlZ19yZXNldCwKIAkJCQkJMHgxMik7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKIAllcnIgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNoaXAtPmNsaWVudCwKLQkJCQkJY2hpcC0+ZGV2X2NmZy0+cmVnX3Jlc2V0LAorCQkJCQljaGlwLT5kZXZfY2ZnLT5wcmkueDc4OS5yZWdfcmVzZXQsCiAJCQkJCTB4MzQpOwogCXJldHVybiBlcnI7CiB9CkBAIC00OTIsOSArNTQ0LDE0IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAotCWVyciA9IHN4MTUweF9pMmNfd3JpdGUoY2hpcC0+Y2xpZW50LAotCQkJY2hpcC0+ZGV2X2NmZy0+cmVnX21pc2MsCi0JCQkweDAxKTsKKwlpZiAoY2hpcC0+ZGV2X2NmZy0+bW9kZWwgPT0gU1gxNTBYXzc4OSkKKwkJZXJyID0gc3gxNTB4X2kyY193cml0ZShjaGlwLT5jbGllbnQsCisJCQkJY2hpcC0+ZGV2X2NmZy0+cHJpLng3ODkucmVnX21pc2MsCisJCQkJMHgwMSk7CisJZWxzZQorCQllcnIgPSBzeDE1MHhfaTJjX3dyaXRlKGNoaXAtPmNsaWVudCwKKwkJCQljaGlwLT5kZXZfY2ZnLT5wcmkueDQ1Ni5yZWdfYWR2YW5jZSwKKwkJCQkweDA0KTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtNTA4LDE1ICs1NjUsMjcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAotCWVyciA9IHN4MTUweF9pbml0X2lvKGNoaXAsIGNoaXAtPmRldl9jZmctPnJlZ19kcmFpbiwKLQkJCXBkYXRhLT5pb19vcGVuX2RyYWluX2VuYSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CisJaWYgKGNoaXAtPmRldl9jZmctPm1vZGVsID09IFNYMTUwWF83ODkpIHsKKwkJZXJyID0gc3gxNTB4X2luaXRfaW8oY2hpcCwKKwkJCQljaGlwLT5kZXZfY2ZnLT5wcmkueDc4OS5yZWdfZHJhaW4sCisJCQkJcGRhdGEtPmlvX29wZW5fZHJhaW5fZW5hKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gc3gxNTB4X2luaXRfaW8oY2hpcCwgY2hpcC0+ZGV2X2NmZy0+cmVnX3BvbGFyaXR5LAotCQkJcGRhdGEtPmlvX3BvbGFyaXR5KTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwkJZXJyID0gc3gxNTB4X2luaXRfaW8oY2hpcCwKKwkJCQljaGlwLT5kZXZfY2ZnLT5wcmkueDc4OS5yZWdfcG9sYXJpdHksCisJCQkJcGRhdGEtPmlvX3BvbGFyaXR5KTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0gZWxzZSB7CisJCS8qIFNldCBhbGwgcGlucyB0byB3b3JrIGluIG5vcm1hbCBtb2RlICovCisJCWVyciA9IHN4MTUweF9pbml0X2lvKGNoaXAsCisJCQkJY2hpcC0+ZGV2X2NmZy0+cHJpLng0NTYucmVnX3BsZF9tb2RlLAorCQkJCTApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAKIAlpZiAocGRhdGEtPm9zY2lvX2lzX2dwbykKIAkJc3gxNTB4X3NldF9vc2NpbyhjaGlwLCAwKTsKQEAgLTUyOSwzMSArNTk4LDI0IEBACiAJCQkJaW50IGlycV9iYXNlKQogewogCWludCBlcnI7Ci0JdW5zaWduZWQgbjsKLQl1bnNpZ25lZCBpcnE7CiAKIAljaGlwLT5pcnFfc3VtbWFyeSA9IGlycV9zdW1tYXJ5OwogCWNoaXAtPmlycV9iYXNlICAgID0gaXJxX2Jhc2U7CiAKLQlmb3IgKG4gPSAwOyBuIDwgY2hpcC0+ZGV2X2NmZy0+bmdwaW9zOyArK24pIHsKLQkJaXJxID0gaXJxX2Jhc2UgKyBuOwotCQlpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGNoaXApOwotCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaXJxLCAmY2hpcC0+aXJxX2NoaXAsIGhhbmRsZV9lZGdlX2lycSk7Ci0JCWlycV9zZXRfbmVzdGVkX3RocmVhZChpcnEsIDEpOwotI2lmZGVmIENPTkZJR19BUk0KLQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOwotI2Vsc2UKLQkJaXJxX3NldF9ub3Byb2JlKGlycSk7Ci0jZW5kaWYKKwkvKiBBZGQgZ3BpbyBjaGlwIHRvIGlycSBzdWJzeXN0ZW0gKi8KKwllcnIgPSBncGlvY2hpcF9pcnFjaGlwX2FkZCgmY2hpcC0+Z3Bpb19jaGlwLAorCQkmY2hpcC0+aXJxX2NoaXAsIGNoaXAtPmlycV9iYXNlLAorCQloYW5kbGVfZWRnZV9pcnEsIElSUV9UWVBFX0VER0VfQk9USCk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZjaGlwLT5jbGllbnQtPmRldiwKKwkJCSJjb3VsZCBub3QgY29ubmVjdCBpcnFjaGlwIHRvIGdwaW9jaGlwXG4iKTsKKwkJcmV0dXJuICBlcnI7CiAJfQogCiAJZXJyID0gZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycSgmY2hpcC0+Y2xpZW50LT5kZXYsCi0JCQkJaXJxX3N1bW1hcnksCi0JCQkJTlVMTCwKLQkJCQlzeDE1MHhfaXJxX3RocmVhZF9mbiwKLQkJCQlJUlFGX1NIQVJFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJCWNoaXAtPmlycV9jaGlwLm5hbWUsCi0JCQkJY2hpcCk7CisJCQlpcnFfc3VtbWFyeSwgTlVMTCwgc3gxNTB4X2lycV90aHJlYWRfZm4sCisJCQlJUlFGX09ORVNIT1QgfCBJUlFGX1NIQVJFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJY2hpcC0+aXJxX2NoaXAubmFtZSwgY2hpcCk7CiAJaWYgKGVyciA8IDApIHsKIAkJY2hpcC0+aXJxX3N1bW1hcnkgPSAtMTsKIAkJY2hpcC0+aXJxX2Jhc2UgICAgPSAtMTsKQEAgLTU2MiwxNyArNjI0LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBzeDE1MHhfcmVtb3ZlX2lycV9jaGlwKHN0cnVjdCBzeDE1MHhfY2hpcCAqY2hpcCkKLXsKLQl1bnNpZ25lZCBuOwotCXVuc2lnbmVkIGlycTsKLQotCWZvciAobiA9IDA7IG4gPCBjaGlwLT5kZXZfY2ZnLT5uZ3Bpb3M7ICsrbikgewotCQlpcnEgPSBjaGlwLT5pcnFfYmFzZSArIG47Ci0JCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIE5VTEwsIE5VTEwpOwotCX0KLX0KLQogc3RhdGljIGludCBzeDE1MHhfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CkBAIC02MjYsMTYgKzY3NywxNCBAQAogCWNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlncGlvY2hpcF9yZW1vdmUoJmNoaXAtPmdwaW9fY2hpcCk7CiAKLQlpZiAoY2hpcC0+aXJxX3N1bW1hcnkgPj0gMCkKLQkJc3gxNTB4X3JlbW92ZV9pcnFfY2hpcChjaGlwKTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc3gxNTB4X2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJzeDE1MHgiLAotCQkub3duZXIgPSBUSElTX01PRFVMRQorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHN4MTUweF9vZl9tYXRjaCksCiAJfSwKIAkucHJvYmUgICAgPSBzeDE1MHhfcHJvYmUsCiAJLnJlbW92ZSAgID0gc3gxNTB4X3JlbW92ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXRjMzU4OXguYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXRjMzU4OXguYwppbmRleCBhYmRjZjU4Li4xMWFlZDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby10YzM1ODl4LmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8tdGMzNTg5eC5jCkBAIC0yMzIsMTYgKzIzMiwxMyBAQAogc3RhdGljIGludCB0YzM1ODl4X2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKLQlzdHJ1Y3QgdGMzNTg5eF9ncGlvX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgdGMzNTg5eF9ncGlvICp0YzM1ODl4X2dwaW87CiAJaW50IHJldDsKIAlpbnQgaXJxOwogCi0JcGRhdGEgPSB0YzM1ODl4LT5wZGF0YS0+Z3BpbzsKLQotCWlmICghKHBkYXRhIHx8IG5wKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBwbGF0Zm9ybSBkYXRhIG9yIERldmljZSBUcmVlIGZvdW5kXG4iKTsKKwlpZiAoIW5wKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIERldmljZSBUcmVlIG5vZGUgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTMwNSw5ICszMDIsNiBAQAogCQkJCSAgICAgaXJxLAogCQkJCSAgICAgTlVMTCk7CiAKLQlpZiAocGRhdGEgJiYgcGRhdGEtPnNldHVwKQotCQlwZGF0YS0+c2V0dXAodGMzNTg5eCwgdGMzNTg5eF9ncGlvLT5jaGlwLmJhc2UpOwotCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdGMzNTg5eF9ncGlvKTsKIAogCXJldHVybiAwOwpAQCAtMzE2LDExICszMTAsNiBAQAogc3RhdGljIGludCB0YzM1ODl4X2dwaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHRjMzU4OXhfZ3BpbyAqdGMzNTg5eF9ncGlvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IHRjMzU4OXggKnRjMzU4OXggPSB0YzM1ODl4X2dwaW8tPnRjMzU4OXg7Ci0Jc3RydWN0IHRjMzU4OXhfZ3Bpb19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHRjMzU4OXgtPnBkYXRhLT5ncGlvOwotCi0JaWYgKHBkYXRhICYmIHBkYXRhLT5yZW1vdmUpCi0JCXBkYXRhLT5yZW1vdmUodGMzNTg5eCwgdGMzNTg5eF9ncGlvLT5jaGlwLmJhc2UpOwogCiAJZ3Bpb2NoaXBfcmVtb3ZlKCZ0YzM1ODl4X2dwaW8tPmNoaXApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby10ejEwOTAtcGRjLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby10ejEwOTAtcGRjLmMKaW5kZXggZDc1MzYyMi4uZWRlN2U0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tdHoxMDkwLXBkYy5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXR6MTA5MC1wZGMuYwpAQCAtMTkwLDcgKzE5MCw3IEBACiAKIAkvKiBJb3JlbWFwIHRoZSByZWdpc3RlcnMgKi8KIAlwcml2LT5yZWcgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzX3JlZ3MtPnN0YXJ0LAotCQkJCSByZXNfcmVncy0+ZW5kIC0gcmVzX3JlZ3MtPnN0YXJ0KTsKKwkJCQkgcmVzb3VyY2Vfc2l6ZShyZXNfcmVncykpOwogCWlmICghcHJpdi0+cmVnKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBpb3JlbWFwIHJlZ2lzdGVyc1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tdHoxMDkwLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby10ejEwOTAuYwppbmRleCBlMzAyNGJiLi40NDU2NjBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby10ejEwOTAuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby10ejEwOTAuYwpAQCAtNTczLDcgKzU3Myw3IEBACiAKIAkvKiBJb3JlbWFwIHRoZSByZWdpc3RlcnMgKi8KIAlwcml2LnJlZyA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXNfcmVncy0+c3RhcnQsCi0JCQkJIHJlc19yZWdzLT5lbmQgLSByZXNfcmVncy0+c3RhcnQpOworCQkJCXJlc291cmNlX3NpemUocmVzX3JlZ3MpKTsKIAlpZiAoIXByaXYucmVnKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byBpb3JlbWFwIHJlZ2lzdGVyc1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW8tdmY2MTAuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXZmNjEwLmMKaW5kZXggNGVlNGNlZS4uOTcxYzczOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8tdmY2MTAuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpby12ZjYxMC5jCkBAIC0yNzgsNyArMjc4LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZmNjEwX2dwaW9fZHJpdmVyID0gewogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJncGlvLXZmNjEwIiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5vZl9tYXRjaF90YWJsZSA9IHZmNjEwX2dwaW9fZHRfaWRzLAogCX0sCiAJLnByb2JlCQk9IHZmNjEwX2dwaW9fcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby12eDg1NS5jIGIvZHJpdmVycy9ncGlvL2dwaW8tdng4NTUuYwppbmRleCA5ZDIxZDJmLi41N2I0NzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpby12eDg1NS5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvLXZ4ODU1LmMKQEAgLTUyLDggKzUyLDYgQEAKIAlzcGlubG9ja190IGxvY2s7CiAJdTMyIGlvX2dwaTsKIAl1MzIgaW9fZ3BvOwotCWJvb2wgZ3BpX3Jlc2VydmVkOwotCWJvb2wgZ3BvX3Jlc2VydmVkOwogfTsKIAogLyogcmVzb2x2ZSBhIEdQSXggaW50byB0aGUgY29ycmVzcG9uZGluZyBiaXQgcG9zaXRpb24gKi8KQEAgLTIyNCwxNCArMjIyLDEzIEBACiAJc3RydWN0IHJlc291cmNlICpyZXNfZ3BpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzX2dwbzsKIAlzdHJ1Y3Qgdng4NTVfZ3BpbyAqdmc7Ci0JaW50IHJldDsKIAogCXJlc19ncGkgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CiAJcmVzX2dwbyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAxKTsKIAlpZiAoIXJlc19ncGkgfHwgIXJlc19ncG8pCiAJCXJldHVybiAtRUJVU1k7CiAKLQl2ZyA9IGt6YWxsb2Moc2l6ZW9mKCp2ZyksIEdGUF9LRVJORUwpOworCXZnID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqdmcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXZnKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjUwLDU2ICsyNDcsMjcgQEAKIAkgKiBzdWNjZWVkLiBJZ25vcmUgYW5kIGNvbnRpbnVlLgogCSAqLwogCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihyZXNfZ3BpLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXNfZ3BpKSwKLQkJCU1PRFVMRV9OQU1FICJfZ3BpIikpCisJaWYgKCFkZXZtX3JlcXVlc3RfcmVnaW9uKCZwZGV2LT5kZXYsIHJlc19ncGktPnN0YXJ0LAorCQkJCSByZXNvdXJjZV9zaXplKHJlc19ncGkpLCBNT0RVTEVfTkFNRSAiX2dwaSIpKQogCQlkZXZfd2FybigmcGRldi0+ZGV2LAogCQkJIkdQSSBJL08gcmVzb3VyY2UgYnVzeSwgcHJvYmFibHkgY2xhaW1lZCBieSBBQ1BJXG4iKTsKLQllbHNlCi0JCXZnLT5ncGlfcmVzZXJ2ZWQgPSB0cnVlOwogCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihyZXNfZ3BvLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXNfZ3BvKSwKLQkJCU1PRFVMRV9OQU1FICJfZ3BvIikpCisJaWYgKCFkZXZtX3JlcXVlc3RfcmVnaW9uKCZwZGV2LT5kZXYsIHJlc19ncG8tPnN0YXJ0LAorCQkJCSByZXNvdXJjZV9zaXplKHJlc19ncG8pLCBNT0RVTEVfTkFNRSAiX2dwbyIpKQogCQlkZXZfd2FybigmcGRldi0+ZGV2LAogCQkJIkdQTyBJL08gcmVzb3VyY2UgYnVzeSwgcHJvYmFibHkgY2xhaW1lZCBieSBBQ1BJXG4iKTsKLQllbHNlCi0JCXZnLT5ncG9fcmVzZXJ2ZWQgPSB0cnVlOwogCiAJdng4NTVncGlvX2dwaW9fc2V0dXAodmcpOwogCi0JcmV0ID0gZ3Bpb2NoaXBfYWRkKCZ2Zy0+Z3Bpbyk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgR1BJT3NcbiIpOwotCQlnb3RvIG91dF9yZWxlYXNlOwotCX0KLQotCXJldHVybiAwOwotCi1vdXRfcmVsZWFzZToKLQlpZiAodmctPmdwaV9yZXNlcnZlZCkKLQkJcmVsZWFzZV9yZWdpb24ocmVzX2dwaS0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzX2dwaSkpOwotCWlmICh2Zy0+Z3BvX3Jlc2VydmVkKQotCQlyZWxlYXNlX3JlZ2lvbihyZXNfZ3BpLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXNfZ3BvKSk7Ci0Ja2ZyZWUodmcpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIGdwaW9jaGlwX2FkZCgmdmctPmdwaW8pOwogfQogCiBzdGF0aWMgaW50IHZ4ODU1Z3Bpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgdng4NTVfZ3BpbyAqdmcgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCWdwaW9jaGlwX3JlbW92ZSgmdmctPmdwaW8pOwogCi0JaWYgKHZnLT5ncGlfcmVzZXJ2ZWQpIHsKLQkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOwotCQlyZWxlYXNlX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwotCX0KLQlpZiAodmctPmdwb19yZXNlcnZlZCkgewotCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMSk7Ci0JCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci0JfQotCi0Ja2ZyZWUodmcpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpby14Z2VuZS1zYi5jIGIvZHJpdmVycy9ncGlvL2dwaW8teGdlbmUtc2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmExNWMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8teGdlbmUtc2IuYwpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIEFwcGxpZWRNaWNybyBYLUdlbmUgU29DIEdQSU8tU3RhbmRieSBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEFwcGxpZWQgTWljcm8gQ2lyY3VpdHMgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogCVRpbiBIdXluaCA8dG5odXluaEBhcG0uY29tPi4KKyAqIAkJWSBWbyA8eXZvQGFwbS5jb20+LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvL2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L2Jhc2ljX21taW9fZ3Bpby5oPgorCisjZGVmaW5lIFhHRU5FX01BWF9HUElPX0RTCQkyMgorI2RlZmluZSBYR0VORV9NQVhfR1BJT19EU19JUlEJCTYKKworI2RlZmluZSBHUElPX01BU0soeCkJCQkoMVUgPDwgKCh4KSAlIDMyKSkKKworI2RlZmluZSBNUEFfR1BJT19JTlRfTFZMCQkweDAyOTAKKyNkZWZpbmUgTVBBX0dQSU9fT0VfQUREUgkJMHgwMjljCisjZGVmaW5lIE1QQV9HUElPX09VVF9BRERSCQkweDAyYTAKKyNkZWZpbmUgTVBBX0dQSU9fSU5fQUREUiAJCTB4MDJhNAorI2RlZmluZSBNUEFfR1BJT19TRUxfTE8gCQkweDAyOTQKKworLyoqCisgKiBzdHJ1Y3QgeGdlbmVfZ3Bpb19zYiAtIEdQSU8tU3RhbmRieSBwcml2YXRlIGRhdGEgc3RydWN0dXJlLgorICogQGJnYzoJCQltZW1vcnktbWFwcGVkIEdQSU8gY29udHJvbGxlcnMuCisgKiBAaXJxOgkJCU1hcHBpbmcgR1BJTyBwaW5zIGFuZCBpbnRlcnJ1cHQgbnVtYmVyCisgKiBuaXJxOgkJCU51bWJlciBvZiBHUElPIHBpbnMgdGhhdCBzdXBwb3J0cyBpbnRlcnJ1cHQKKyAqLworc3RydWN0IHhnZW5lX2dwaW9fc2IgeworCXN0cnVjdCBiZ3Bpb19jaGlwCWJnYzsKKwl1MzIgKmlycTsKKwl1MzIgbmlycTsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHhnZW5lX2dwaW9fc2IgKnRvX3hnZW5lX2dwaW9fc2Ioc3RydWN0IGdwaW9fY2hpcCAqZ2MpCit7CisJc3RydWN0IGJncGlvX2NoaXAgKmJnYyA9IHRvX2JncGlvX2NoaXAoZ2MpOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihiZ2MsIHN0cnVjdCB4Z2VuZV9ncGlvX3NiLCBiZ2MpOworfQorCitzdGF0aWMgdm9pZCB4Z2VuZV9ncGlvX3NldF9iaXQoc3RydWN0IGJncGlvX2NoaXAgKmJnYywgdm9pZCBfX2lvbWVtICpyZWcsIHUzMiBncGlvLCBpbnQgdmFsKQoreworCXUzMiBkYXRhOworCisJZGF0YSA9IGJnYy0+cmVhZF9yZWcocmVnKTsKKwlpZiAodmFsKQorCQlkYXRhIHw9IEdQSU9fTUFTSyhncGlvKTsKKwllbHNlCisJCWRhdGEgJj0gfkdQSU9fTUFTSyhncGlvKTsKKwliZ2MtPndyaXRlX3JlZyhyZWcsIGRhdGEpOworfQorCitzdGF0aWMgaW50IGFwbV9ncGlvX3NiX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdTMyIGdwaW8pCit7CisJc3RydWN0IHhnZW5lX2dwaW9fc2IgKnByaXYgPSB0b194Z2VuZV9ncGlvX3NiKGdjKTsKKworCWlmIChwcml2LT5pcnFbZ3Bpb10pCisJCXJldHVybiBwcml2LT5pcnFbZ3Bpb107CisKKwlyZXR1cm4gLUVOWElPOworfQorCitzdGF0aWMgaW50IHhnZW5lX2dwaW9fc2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgeGdlbmVfZ3Bpb19zYiAqcHJpdjsKKwl1MzIgcmV0LCBpOworCXUzMiBkZWZhdWx0X2xpbmVzW10gPSB7MHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRH07CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCisJcHJpdiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKCFyZWdzKQorCQlyZXR1cm4gUFRSX0VSUihyZWdzKTsKKworCXJldCA9IGJncGlvX2luaXQoJnByaXYtPmJnYywgJnBkZXYtPmRldiwgNCwKKwkJCXJlZ3MgKyBNUEFfR1BJT19JTl9BRERSLAorCQkJcmVncyArIE1QQV9HUElPX09VVF9BRERSLCBOVUxMLAorCQkJcmVncyArIE1QQV9HUElPX09FX0FERFIsIE5VTEwsIDApOworICAgICAgICBpZiAocmV0KQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisKKwlwcml2LT5iZ2MuZ2MudG9faXJxID0gYXBtX2dwaW9fc2JfdG9faXJxOworCXByaXYtPmJnYy5nYy5uZ3BpbyA9IFhHRU5FX01BWF9HUElPX0RTOworCisJcHJpdi0+bmlycSA9IFhHRU5FX01BWF9HUElPX0RTX0lSUTsKKworCXByaXYtPmlycSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YodTMyKSAqIFhHRU5FX01BWF9HUElPX0RTLAorCQkJCSAgIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+aXJxKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1zZXQocHJpdi0+aXJxLCAwLCBzaXplb2YodTMyKSAqIFhHRU5FX01BWF9HUElPX0RTKTsKKworCWZvciAoaSA9IDA7IGkgPCBwcml2LT5uaXJxOyBpKyspIHsKKwkJcHJpdi0+aXJxW2RlZmF1bHRfbGluZXNbaV1dID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCBpKTsKKwkJeGdlbmVfZ3Bpb19zZXRfYml0KCZwcml2LT5iZ2MsIHJlZ3MgKyBNUEFfR1BJT19TRUxfTE8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfbGluZXNbaV0gKiAyLCAxKTsKKwkJeGdlbmVfZ3Bpb19zZXRfYml0KCZwcml2LT5iZ2MsIHJlZ3MgKyBNUEFfR1BJT19JTlRfTFZMLCBpLCAxKTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwcml2KTsKKworCXJldCA9IGdwaW9jaGlwX2FkZCgmcHJpdi0+YmdjLmdjKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgWC1HZW5lIEdQSU8gU3RhbmRieSBkcml2ZXJcbiIpOworCWVsc2UKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlgtR2VuZSBHUElPIFN0YW5kYnkgZHJpdmVyIHJlZ2lzdGVyZWRcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB4Z2VuZV9ncGlvX3NiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB4Z2VuZV9ncGlvX3NiICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlyZXR1cm4gYmdwaW9fcmVtb3ZlKCZwcml2LT5iZ2MpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4Z2VuZV9ncGlvX3NiX29mX21hdGNoW10gPSB7CisJey5jb21wYXRpYmxlID0gImFwbSx4Z2VuZS1ncGlvLXNiIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4Z2VuZV9ncGlvX3NiX29mX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeGdlbmVfZ3Bpb19zYl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm5hbWUgPSAieGdlbmUtZ3Bpby1zYiIsCisJCSAgIC5vZl9tYXRjaF90YWJsZSA9IHhnZW5lX2dwaW9fc2Jfb2ZfbWF0Y2gsCisJCSAgIH0sCisJLnByb2JlID0geGdlbmVfZ3Bpb19zYl9wcm9iZSwKKwkucmVtb3ZlID0geGdlbmVfZ3Bpb19zYl9yZW1vdmUsCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih4Z2VuZV9ncGlvX3NiX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkFwcGxpZWRNaWNybyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBUE0gWC1HZW5lIEdQSU8gU3RhbmRieSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXhpbGlueC5jIGIvZHJpdmVycy9ncGlvL2dwaW8teGlsaW54LmMKaW5kZXggYmExOGIwNi4uNjEyNDNkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW8teGlsaW54LmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8teGlsaW54LmMKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgWEdQSU9fQ0hBTk5FTF9PRkZTRVQJMHg4CiAKIC8qIFJlYWQvV3JpdGUgYWNjZXNzIHRvIHRoZSBHUElPIHJlZ2lzdGVycyAqLwotI2lmZGVmIENPTkZJR19BUkNIX1pZTlEKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX1pZTlEpIHx8IGRlZmluZWQoQ09ORklHX1g4NikKICMgZGVmaW5lIHhncGlvX3JlYWRyZWcob2Zmc2V0KQkJcmVhZGwob2Zmc2V0KQogIyBkZWZpbmUgeGdwaW9fd3JpdGVyZWcob2Zmc2V0LCB2YWwpCXdyaXRlbCh2YWwsIG9mZnNldCkKICNlbHNlCkBAIC00MCwzNyArNDAsNjYgQEAKIAogLyoqCiAgKiBzdHJ1Y3QgeGdwaW9faW5zdGFuY2UgLSBTdG9yZXMgaW5mb3JtYXRpb24gYWJvdXQgR1BJTyBkZXZpY2UKLSAqIHN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgbW1jaGlwOiBPRiBHUElPIGNoaXAgZm9yIG1lbW9yeSBtYXBwZWQgYmFua3MKLSAqIGdwaW9fc3RhdGU6IEdQSU8gc3RhdGUgc2hhZG93IHJlZ2lzdGVyCi0gKiBncGlvX2RpcjogR1BJTyBkaXJlY3Rpb24gc2hhZG93IHJlZ2lzdGVyCi0gKiBvZmZzZXQ6IEdQSU8gY2hhbm5lbCBvZmZzZXQKLSAqIGdwaW9fbG9jazogTG9jayB1c2VkIGZvciBzeW5jaHJvbml6YXRpb24KKyAqIEBtbWNoaXA6IE9GIEdQSU8gY2hpcCBmb3IgbWVtb3J5IG1hcHBlZCBiYW5rcworICogQGdwaW9fc3RhdGU6IEdQSU8gc3RhdGUgc2hhZG93IHJlZ2lzdGVyCisgKiBAZ3Bpb19kaXI6IEdQSU8gZGlyZWN0aW9uIHNoYWRvdyByZWdpc3RlcgorICogQGdwaW9fbG9jazogTG9jayB1c2VkIGZvciBzeW5jaHJvbml6YXRpb24KKyAqIEBpbml0ZWQ6IFRydWUgaWYgdGhlIHBvcnQgaGFzIGJlZW4gaW5pdGVkCiAgKi8KIHN0cnVjdCB4Z3Bpb19pbnN0YW5jZSB7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCBtbWNoaXA7Ci0JdTMyIGdwaW9fc3RhdGU7Ci0JdTMyIGdwaW9fZGlyOwotCXUzMiBvZmZzZXQ7Ci0Jc3BpbmxvY2tfdCBncGlvX2xvY2s7CisJdW5zaWduZWQgaW50IGdwaW9fd2lkdGhbMl07CisJdTMyIGdwaW9fc3RhdGVbMl07CisJdTMyIGdwaW9fZGlyWzJdOworCXNwaW5sb2NrX3QgZ3Bpb19sb2NrWzJdOwogfTsKIAorc3RhdGljIGlubGluZSBpbnQgeGdwaW9faW5kZXgoc3RydWN0IHhncGlvX2luc3RhbmNlICpjaGlwLCBpbnQgZ3BpbykKK3sKKwlpZiAoZ3BpbyA+PSBjaGlwLT5ncGlvX3dpZHRoWzBdKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB4Z3Bpb19yZWdvZmZzZXQoc3RydWN0IHhncGlvX2luc3RhbmNlICpjaGlwLCBpbnQgZ3BpbykKK3sKKwlpZiAoeGdwaW9faW5kZXgoY2hpcCwgZ3BpbykpCisJCXJldHVybiBYR1BJT19DSEFOTkVMX09GRlNFVDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCB4Z3Bpb19vZmZzZXQoc3RydWN0IHhncGlvX2luc3RhbmNlICpjaGlwLCBpbnQgZ3BpbykKK3sKKwlpZiAoeGdwaW9faW5kZXgoY2hpcCwgZ3BpbykpCisJCXJldHVybiBncGlvIC0gY2hpcC0+Z3Bpb193aWR0aFswXTsKKworCXJldHVybiBncGlvOworfQorCiAvKioKICAqIHhncGlvX2dldCAtIFJlYWQgdGhlIHNwZWNpZmllZCBzaWduYWwgb2YgdGhlIEdQSU8gZGV2aWNlLgogICogQGdjOiAgICAgUG9pbnRlciB0byBncGlvX2NoaXAgZGV2aWNlIHN0cnVjdHVyZS4KICAqIEBncGlvOiAgIEdQSU8gc2lnbmFsIG51bWJlci4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgc2lnbmFsIG9mIHRoZSBHUElPIGRldmljZS4gSXQgcmV0dXJucyAwIGlmCi0gKiB0aGUgc2lnbmFsIGNsZWFyLCAxIGlmIHNpZ25hbCBpcyBzZXQgb3IgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IuCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgc2lnbmFsIG9mIHRoZSBHUElPIGRldmljZS4KKyAqCisgKiBSZXR1cm46CisgKiAwIGlmIGRpcmVjdGlvbiBvZiBHUElPIHNpZ25hbHMgaXMgc2V0IGFzIGlucHV0IG90aGVyd2lzZSBpdAorICogcmV0dXJucyBuZWdhdGl2ZSBlcnJvciB2YWx1ZS4KICAqLwogc3RhdGljIGludCB4Z3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvKQogewogCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKIAlzdHJ1Y3QgeGdwaW9faW5zdGFuY2UgKmNoaXAgPQogCSAgICBjb250YWluZXJfb2YobW1fZ2MsIHN0cnVjdCB4Z3Bpb19pbnN0YW5jZSwgbW1jaGlwKTsKKwl1MzIgdmFsOwogCi0Jdm9pZCBfX2lvbWVtICpyZWdzID0gbW1fZ2MtPnJlZ3MgKyBjaGlwLT5vZmZzZXQ7CisJdmFsID0geGdwaW9fcmVhZHJlZyhtbV9nYy0+cmVncyArIFhHUElPX0RBVEFfT0ZGU0VUICsKKwkJCSAgICB4Z3Bpb19yZWdvZmZzZXQoY2hpcCwgZ3BpbykpOwogCi0JcmV0dXJuICEhKHhncGlvX3JlYWRyZWcocmVncyArIFhHUElPX0RBVEFfT0ZGU0VUKSAmIEJJVChncGlvKSk7CisJcmV0dXJuICEhKHZhbCAmIEJJVCh4Z3Bpb19vZmZzZXQoY2hpcCwgZ3BpbykpKTsKIH0KIAogLyoqCkBAIC04OCwyMCArMTE3LDIxIEBACiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOwogCXN0cnVjdCB4Z3Bpb19pbnN0YW5jZSAqY2hpcCA9CiAJICAgIGNvbnRhaW5lcl9vZihtbV9nYywgc3RydWN0IHhncGlvX2luc3RhbmNlLCBtbWNoaXApOwotCXZvaWQgX19pb21lbSAqcmVncyA9IG1tX2djLT5yZWdzOworCWludCBpbmRleCA9ICB4Z3Bpb19pbmRleChjaGlwLCBncGlvKTsKKwlpbnQgb2Zmc2V0ID0gIHhncGlvX29mZnNldChjaGlwLCBncGlvKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5ncGlvX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+Z3Bpb19sb2NrW2luZGV4XSwgZmxhZ3MpOwogCiAJLyogV3JpdGUgdG8gR1BJTyBzaWduYWwgYW5kIHNldCBpdHMgZGlyZWN0aW9uIHRvIG91dHB1dCAqLwogCWlmICh2YWwpCi0JCWNoaXAtPmdwaW9fc3RhdGUgfD0gQklUKGdwaW8pOworCQljaGlwLT5ncGlvX3N0YXRlW2luZGV4XSB8PSBCSVQob2Zmc2V0KTsKIAllbHNlCi0JCWNoaXAtPmdwaW9fc3RhdGUgJj0gfkJJVChncGlvKTsKKwkJY2hpcC0+Z3Bpb19zdGF0ZVtpbmRleF0gJj0gfkJJVChvZmZzZXQpOwogCi0JeGdwaW9fd3JpdGVyZWcocmVncyArIGNoaXAtPm9mZnNldCArIFhHUElPX0RBVEFfT0ZGU0VULAotCQkJCQkJCSBjaGlwLT5ncGlvX3N0YXRlKTsKKwl4Z3Bpb193cml0ZXJlZyhtbV9nYy0+cmVncyArIFhHUElPX0RBVEFfT0ZGU0VUICsKKwkJICAgICAgIHhncGlvX3JlZ29mZnNldChjaGlwLCBncGlvKSwgY2hpcC0+Z3Bpb19zdGF0ZVtpbmRleF0pOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+Z3Bpb19sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+Z3Bpb19sb2NrW2luZGV4XSwgZmxhZ3MpOwogfQogCiAvKioKQEAgLTEwOSw5ICsxMzksOSBAQAogICogQGdjOiAgICAgUG9pbnRlciB0byBncGlvX2NoaXAgZGV2aWNlIHN0cnVjdHVyZS4KICAqIEBncGlvOiAgIEdQSU8gc2lnbmFsIG51bWJlci4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRpcmVjdGlvbiBvZiBzcGVjaWZpZWQgR1BJTyBzaWduYWwgYXMgaW5wdXQuCi0gKiBJdCByZXR1cm5zIDAgaWYgZGlyZWN0aW9uIG9mIEdQSU8gc2lnbmFscyBpcyBzZXQgYXMgaW5wdXQgb3RoZXJ3aXNlIGl0Ci0gKiByZXR1cm5zIG5lZ2F0aXZlIGVycm9yIHZhbHVlLgorICogUmV0dXJuOgorICogMCAtIGlmIGRpcmVjdGlvbiBvZiBHUElPIHNpZ25hbHMgaXMgc2V0IGFzIGlucHV0CisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBuZWdhdGl2ZSBlcnJvciB2YWx1ZS4KICAqLwogc3RhdGljIGludCB4Z3Bpb19kaXJfaW4oc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvKQogewpAQCAtMTE5LDE1ICsxNDksMTcgQEAKIAlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyA9IHRvX29mX21tX2dwaW9fY2hpcChnYyk7CiAJc3RydWN0IHhncGlvX2luc3RhbmNlICpjaGlwID0KIAkgICAgY29udGFpbmVyX29mKG1tX2djLCBzdHJ1Y3QgeGdwaW9faW5zdGFuY2UsIG1tY2hpcCk7Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gbW1fZ2MtPnJlZ3M7CisJaW50IGluZGV4ID0gIHhncGlvX2luZGV4KGNoaXAsIGdwaW8pOworCWludCBvZmZzZXQgPSAgeGdwaW9fb2Zmc2V0KGNoaXAsIGdwaW8pOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmdwaW9fbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5ncGlvX2xvY2tbaW5kZXhdLCBmbGFncyk7CiAKIAkvKiBTZXQgdGhlIEdQSU8gYml0IGluIHNoYWRvdyByZWdpc3RlciBhbmQgc2V0IGRpcmVjdGlvbiBhcyBpbnB1dCAqLwotCWNoaXAtPmdwaW9fZGlyIHw9IEJJVChncGlvKTsKLQl4Z3Bpb193cml0ZXJlZyhyZWdzICsgY2hpcC0+b2Zmc2V0ICsgWEdQSU9fVFJJX09GRlNFVCwgY2hpcC0+Z3Bpb19kaXIpOworCWNoaXAtPmdwaW9fZGlyW2luZGV4XSB8PSBCSVQob2Zmc2V0KTsKKwl4Z3Bpb193cml0ZXJlZyhtbV9nYy0+cmVncyArIFhHUElPX1RSSV9PRkZTRVQgKworCQkgICAgICAgeGdwaW9fcmVnb2Zmc2V0KGNoaXAsIGdwaW8pLCBjaGlwLT5ncGlvX2RpcltpbmRleF0pOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+Z3Bpb19sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+Z3Bpb19sb2NrW2luZGV4XSwgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzgsOCArMTcwLDEwIEBACiAgKiBAZ3BpbzogICBHUElPIHNpZ25hbCBudW1iZXIuCiAgKiBAdmFsOiAgICBWYWx1ZSB0byBiZSB3cml0dGVuIHRvIHNwZWNpZmllZCBzaWduYWwuCiAgKgotICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBkaXJlY3Rpb24gb2Ygc3BlY2lmaWVkIEdQSU8gc2lnbmFsIGFzIG91dHB1dC4gSWYgYWxsCi0gKiBHUElPIHNpZ25hbHMgb2YgR1BJTyBjaGlwIGlzIGNvbmZpZ3VyZWQgYXMgaW5wdXQgdGhlbiBpdCByZXR1cm5zCisgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGRpcmVjdGlvbiBvZiBzcGVjaWZpZWQgR1BJTyBzaWduYWwgYXMgb3V0cHV0LgorICoKKyAqIFJldHVybjoKKyAqIElmIGFsbCBHUElPIHNpZ25hbHMgb2YgR1BJTyBjaGlwIGlzIGNvbmZpZ3VyZWQgYXMgaW5wdXQgdGhlbiBpdCByZXR1cm5zCiAgKiBlcnJvciBvdGhlcndpc2UgaXQgcmV0dXJucyAwLgogICovCiBzdGF0aWMgaW50IHhncGlvX2Rpcl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQpAQCAtMTQ4LDgwICsxODIsMTI4IEBACiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOwogCXN0cnVjdCB4Z3Bpb19pbnN0YW5jZSAqY2hpcCA9CiAJICAgIGNvbnRhaW5lcl9vZihtbV9nYywgc3RydWN0IHhncGlvX2luc3RhbmNlLCBtbWNoaXApOwotCXZvaWQgX19pb21lbSAqcmVncyA9IG1tX2djLT5yZWdzOworCWludCBpbmRleCA9ICB4Z3Bpb19pbmRleChjaGlwLCBncGlvKTsKKwlpbnQgb2Zmc2V0ID0gIHhncGlvX29mZnNldChjaGlwLCBncGlvKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5ncGlvX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+Z3Bpb19sb2NrW2luZGV4XSwgZmxhZ3MpOwogCiAJLyogV3JpdGUgc3RhdGUgb2YgR1BJTyBzaWduYWwgKi8KIAlpZiAodmFsKQotCQljaGlwLT5ncGlvX3N0YXRlIHw9IEJJVChncGlvKTsKKwkJY2hpcC0+Z3Bpb19zdGF0ZVtpbmRleF0gfD0gQklUKG9mZnNldCk7CiAJZWxzZQotCQljaGlwLT5ncGlvX3N0YXRlICY9IH5CSVQoZ3Bpbyk7Ci0JeGdwaW9fd3JpdGVyZWcocmVncyArIGNoaXAtPm9mZnNldCArIFhHUElPX0RBVEFfT0ZGU0VULAotCQkgICAgICAgY2hpcC0+Z3Bpb19zdGF0ZSk7CisJCWNoaXAtPmdwaW9fc3RhdGVbaW5kZXhdICY9IH5CSVQob2Zmc2V0KTsKKwl4Z3Bpb193cml0ZXJlZyhtbV9nYy0+cmVncyArIFhHUElPX0RBVEFfT0ZGU0VUICsKKwkJCXhncGlvX3JlZ29mZnNldChjaGlwLCBncGlvKSwgY2hpcC0+Z3Bpb19zdGF0ZVtpbmRleF0pOwogCiAJLyogQ2xlYXIgdGhlIEdQSU8gYml0IGluIHNoYWRvdyByZWdpc3RlciBhbmQgc2V0IGRpcmVjdGlvbiBhcyBvdXRwdXQgKi8KLQljaGlwLT5ncGlvX2RpciAmPSB+QklUKGdwaW8pOwotCXhncGlvX3dyaXRlcmVnKHJlZ3MgKyBjaGlwLT5vZmZzZXQgKyBYR1BJT19UUklfT0ZGU0VULCBjaGlwLT5ncGlvX2Rpcik7CisJY2hpcC0+Z3Bpb19kaXJbaW5kZXhdICY9IH5CSVQob2Zmc2V0KTsKKwl4Z3Bpb193cml0ZXJlZyhtbV9nYy0+cmVncyArIFhHUElPX1RSSV9PRkZTRVQgKworCQkJeGdwaW9fcmVnb2Zmc2V0KGNoaXAsIGdwaW8pLCBjaGlwLT5ncGlvX2RpcltpbmRleF0pOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+Z3Bpb19sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+Z3Bpb19sb2NrW2luZGV4XSwgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgogICogeGdwaW9fc2F2ZV9yZWdzIC0gU2V0IGluaXRpYWwgdmFsdWVzIG9mIEdQSU8gcGlucwotICogQG1tX2djOiBwb2ludGVyIHRvIG1lbW9yeSBtYXBwZWQgR1BJTyBjaGlwIHN0cnVjdHVyZQorICogQG1tX2djOiBQb2ludGVyIHRvIG1lbW9yeSBtYXBwZWQgR1BJTyBjaGlwIHN0cnVjdHVyZQogICovCiBzdGF0aWMgdm9pZCB4Z3Bpb19zYXZlX3JlZ3Moc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MpCiB7CiAJc3RydWN0IHhncGlvX2luc3RhbmNlICpjaGlwID0KIAkgICAgY29udGFpbmVyX29mKG1tX2djLCBzdHJ1Y3QgeGdwaW9faW5zdGFuY2UsIG1tY2hpcCk7CiAKLQl4Z3Bpb193cml0ZXJlZyhtbV9nYy0+cmVncyArIGNoaXAtPm9mZnNldCArIFhHUElPX0RBVEFfT0ZGU0VULAotCQkJCQkJCWNoaXAtPmdwaW9fc3RhdGUpOwotCXhncGlvX3dyaXRlcmVnKG1tX2djLT5yZWdzICsgY2hpcC0+b2Zmc2V0ICsgWEdQSU9fVFJJX09GRlNFVCwKLQkJCQkJCQkgY2hpcC0+Z3Bpb19kaXIpOworCXhncGlvX3dyaXRlcmVnKG1tX2djLT5yZWdzICsgWEdQSU9fREFUQV9PRkZTRVQsCWNoaXAtPmdwaW9fc3RhdGVbMF0pOworCXhncGlvX3dyaXRlcmVnKG1tX2djLT5yZWdzICsgWEdQSU9fVFJJX09GRlNFVCwgY2hpcC0+Z3Bpb19kaXJbMF0pOworCisJaWYgKCFjaGlwLT5ncGlvX3dpZHRoWzFdKQorCQlyZXR1cm47CisKKwl4Z3Bpb193cml0ZXJlZyhtbV9nYy0+cmVncyArIFhHUElPX0RBVEFfT0ZGU0VUICsgWEdQSU9fVFJJX09GRlNFVCwKKwkJICAgICAgIGNoaXAtPmdwaW9fc3RhdGVbMV0pOworCXhncGlvX3dyaXRlcmVnKG1tX2djLT5yZWdzICsgWEdQSU9fVFJJX09GRlNFVCArIFhHUElPX1RSSV9PRkZTRVQsCisJCSAgICAgICBjaGlwLT5ncGlvX2RpclsxXSk7Cit9CisKKy8qKgorICogeGdwaW9fcmVtb3ZlIC0gUmVtb3ZlIG1ldGhvZCBmb3IgdGhlIEdQSU8gZGV2aWNlLgorICogQHBkZXY6IHBvaW50ZXIgdG8gdGhlIHBsYXRmb3JtIGRldmljZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmVtb3ZlIGdwaW9jaGlwcyBhbmQgZnJlZXMgYWxsIHRoZSBhbGxvY2F0ZWQgcmVzb3VyY2VzLgorICovCitzdGF0aWMgaW50IHhncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB4Z3Bpb19pbnN0YW5jZSAqY2hpcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJb2ZfbW1fZ3Bpb2NoaXBfcmVtb3ZlKCZjaGlwLT5tbWNoaXApOworCisJcmV0dXJuIDA7CiB9CiAKIC8qKgogICogeGdwaW9fb2ZfcHJvYmUgLSBQcm9iZSBtZXRob2QgZm9yIHRoZSBHUElPIGRldmljZS4KLSAqIEBucDogcG9pbnRlciB0byBkZXZpY2UgdHJlZSBub2RlCisgKiBAcGRldjogcG9pbnRlciB0byB0aGUgcGxhdGZvcm0gZGV2aWNlCiAgKgotICogVGhpcyBmdW5jdGlvbiBwcm9iZXMgdGhlIEdQSU8gZGV2aWNlIGluIHRoZSBkZXZpY2UgdHJlZS4gSXQgaW5pdGlhbGl6ZXMgdGhlCi0gKiBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUuIEl0IHJldHVybnMgMCwgaWYgdGhlIGRyaXZlciBpcyBib3VuZCB0byB0aGUgR1BJTwotICogZGV2aWNlLCBvciBhIG5lZ2F0aXZlIHZhbHVlIGlmIHRoZXJlIGlzIGFuIGVycm9yLgorICogUmV0dXJuOgorICogSXQgcmV0dXJucyAwLCBpZiB0aGUgZHJpdmVyIGlzIGJvdW5kIHRvIHRoZSBHUElPIGRldmljZSwgb3IKKyAqIGEgbmVnYXRpdmUgdmFsdWUgaWYgdGhlcmUgaXMgYW4gZXJyb3IuCiAgKi8KLXN0YXRpYyBpbnQgeGdwaW9fb2ZfcHJvYmUoc3RydWN0IGRldmljZV9ub2RlICpucCkKK3N0YXRpYyBpbnQgeGdwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgeGdwaW9faW5zdGFuY2UgKmNoaXA7CiAJaW50IHN0YXR1cyA9IDA7Ci0JY29uc3QgdTMyICp0cmVlX2luZm87Ci0JdTMyIG5ncGlvOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwl1MzIgaXNfZHVhbDsKIAotCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOworCWNoaXAgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjaGlwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIFVwZGF0ZSBHUElPIHN0YXRlIHNoYWRvdyByZWdpc3RlciB3aXRoIGRlZmF1bHQgdmFsdWUgKi8KLQlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInhsbngsZG91dC1kZWZhdWx0IiwgJmNoaXAtPmdwaW9fc3RhdGUpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNoaXApOwogCi0JLyogQnkgZGVmYXVsdCwgYWxsIHBpbnMgYXJlIGlucHV0cyAqLwotCWNoaXAtPmdwaW9fZGlyID0gMHhGRkZGRkZGRjsKKwkvKiBVcGRhdGUgR1BJTyBzdGF0ZSBzaGFkb3cgcmVnaXN0ZXIgd2l0aCBkZWZhdWx0IHZhbHVlICovCisJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJ4bG54LGRvdXQtZGVmYXVsdCIsICZjaGlwLT5ncGlvX3N0YXRlWzBdKTsKIAogCS8qIFVwZGF0ZSBHUElPIGRpcmVjdGlvbiBzaGFkb3cgcmVnaXN0ZXIgd2l0aCBkZWZhdWx0IHZhbHVlICovCi0Jb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJ4bG54LHRyaS1kZWZhdWx0IiwgJmNoaXAtPmdwaW9fZGlyKTsKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJ4bG54LHRyaS1kZWZhdWx0IiwgJmNoaXAtPmdwaW9fZGlyWzBdKSkKKwkJY2hpcC0+Z3Bpb19kaXJbMF0gPSAweEZGRkZGRkZGOwogCiAJLyoKIAkgKiBDaGVjayBkZXZpY2Ugbm9kZSBhbmQgcGFyZW50IGRldmljZSBub2RlIGZvciBkZXZpY2Ugd2lkdGgKIAkgKiBhbmQgYXNzdW1lIGRlZmF1bHQgd2lkdGggb2YgMzIKIAkgKi8KLQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJ4bG54LGdwaW8td2lkdGgiLCAmbmdwaW8pKQotCQluZ3BpbyA9IDMyOwotCWNoaXAtPm1tY2hpcC5nYy5uZ3BpbyA9ICh1MTYpbmdwaW87CisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAieGxueCxncGlvLXdpZHRoIiwgJmNoaXAtPmdwaW9fd2lkdGhbMF0pKQorCQljaGlwLT5ncGlvX3dpZHRoWzBdID0gMzI7CiAKLQlzcGluX2xvY2tfaW5pdCgmY2hpcC0+Z3Bpb19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmY2hpcC0+Z3Bpb19sb2NrWzBdKTsKIAorCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInhsbngsaXMtZHVhbCIsICZpc19kdWFsKSkKKwkJaXNfZHVhbCA9IDA7CisKKwlpZiAoaXNfZHVhbCkgeworCQkvKiBVcGRhdGUgR1BJTyBzdGF0ZSBzaGFkb3cgcmVnaXN0ZXIgd2l0aCBkZWZhdWx0IHZhbHVlICovCisJCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAieGxueCxkb3V0LWRlZmF1bHQtMiIsCisJCQkJICAgICAmY2hpcC0+Z3Bpb19zdGF0ZVsxXSk7CisKKwkJLyogVXBkYXRlIEdQSU8gZGlyZWN0aW9uIHNoYWRvdyByZWdpc3RlciB3aXRoIGRlZmF1bHQgdmFsdWUgKi8KKwkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAieGxueCx0cmktZGVmYXVsdC0yIiwKKwkJCQkJICZjaGlwLT5ncGlvX2RpclsxXSkpCisJCQljaGlwLT5ncGlvX2RpclsxXSA9IDB4RkZGRkZGRkY7CisKKwkJLyoKKwkJICogQ2hlY2sgZGV2aWNlIG5vZGUgYW5kIHBhcmVudCBkZXZpY2Ugbm9kZSBmb3IgZGV2aWNlIHdpZHRoCisJCSAqIGFuZCBhc3N1bWUgZGVmYXVsdCB3aWR0aCBvZiAzMgorCQkgKi8KKwkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAieGxueCxncGlvMi13aWR0aCIsCisJCQkJCSAmY2hpcC0+Z3Bpb193aWR0aFsxXSkpCisJCQljaGlwLT5ncGlvX3dpZHRoWzFdID0gMzI7CisKKwkJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmdwaW9fbG9ja1sxXSk7CisJfQorCisJY2hpcC0+bW1jaGlwLmdjLm5ncGlvID0gY2hpcC0+Z3Bpb193aWR0aFswXSArIGNoaXAtPmdwaW9fd2lkdGhbMV07CisJY2hpcC0+bW1jaGlwLmdjLmRldiA9ICZwZGV2LT5kZXY7CiAJY2hpcC0+bW1jaGlwLmdjLmRpcmVjdGlvbl9pbnB1dCA9IHhncGlvX2Rpcl9pbjsKIAljaGlwLT5tbWNoaXAuZ2MuZGlyZWN0aW9uX291dHB1dCA9IHhncGlvX2Rpcl9vdXQ7CiAJY2hpcC0+bW1jaGlwLmdjLmdldCA9IHhncGlvX2dldDsKQEAgLTIzMiw2MyArMzE0LDExIEBACiAJLyogQ2FsbCB0aGUgT0YgZ3BpbyBoZWxwZXIgdG8gc2V0dXAgYW5kIHJlZ2lzdGVyIHRoZSBHUElPIGRldmljZSAqLwogCXN0YXR1cyA9IG9mX21tX2dwaW9jaGlwX2FkZChucCwgJmNoaXAtPm1tY2hpcCk7CiAJaWYgKHN0YXR1cykgewotCQlrZnJlZShjaGlwKTsKIAkJcHJfZXJyKCIlczogZXJyb3IgaW4gcHJvYmUgZnVuY3Rpb24gd2l0aCBzdGF0dXMgJWRcbiIsCiAJCSAgICAgICBucC0+ZnVsbF9uYW1lLCBzdGF0dXMpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAotCXByX2luZm8oIlhHcGlvOiAlczogcmVnaXN0ZXJlZCwgYmFzZSBpcyAlZFxuIiwgbnAtPmZ1bGxfbmFtZSwKLQkJCQkJCQljaGlwLT5tbWNoaXAuZ2MuYmFzZSk7Ci0KLQl0cmVlX2luZm8gPSBvZl9nZXRfcHJvcGVydHkobnAsICJ4bG54LGlzLWR1YWwiLCBOVUxMKTsKLQlpZiAodHJlZV9pbmZvICYmIGJlMzJfdG9fY3B1cCh0cmVlX2luZm8pKSB7Ci0JCWNoaXAgPSBremFsbG9jKHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwotCQlpZiAoIWNoaXApCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQkvKiBBZGQgZHVhbCBjaGFubmVsIG9mZnNldCAqLwotCQljaGlwLT5vZmZzZXQgPSBYR1BJT19DSEFOTkVMX09GRlNFVDsKLQotCQkvKiBVcGRhdGUgR1BJTyBzdGF0ZSBzaGFkb3cgcmVnaXN0ZXIgd2l0aCBkZWZhdWx0IHZhbHVlICovCi0JCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAieGxueCxkb3V0LWRlZmF1bHQtMiIsCi0JCQkJICAgICAmY2hpcC0+Z3Bpb19zdGF0ZSk7Ci0KLQkJLyogQnkgZGVmYXVsdCwgYWxsIHBpbnMgYXJlIGlucHV0cyAqLwotCQljaGlwLT5ncGlvX2RpciA9IDB4RkZGRkZGRkY7Ci0KLQkJLyogVXBkYXRlIEdQSU8gZGlyZWN0aW9uIHNoYWRvdyByZWdpc3RlciB3aXRoIGRlZmF1bHQgdmFsdWUgKi8KLQkJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJ4bG54LHRyaS1kZWZhdWx0LTIiLCAmY2hpcC0+Z3Bpb19kaXIpOwotCi0JCS8qCi0JCSAqIENoZWNrIGRldmljZSBub2RlIGFuZCBwYXJlbnQgZGV2aWNlIG5vZGUgZm9yIGRldmljZSB3aWR0aAotCQkgKiBhbmQgYXNzdW1lIGRlZmF1bHQgd2lkdGggb2YgMzIKLQkJICovCi0JCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInhsbngsZ3BpbzItd2lkdGgiLCAmbmdwaW8pKQotCQkJbmdwaW8gPSAzMjsKLQkJY2hpcC0+bW1jaGlwLmdjLm5ncGlvID0gKHUxNiluZ3BpbzsKLQotCQlzcGluX2xvY2tfaW5pdCgmY2hpcC0+Z3Bpb19sb2NrKTsKLQotCQljaGlwLT5tbWNoaXAuZ2MuZGlyZWN0aW9uX2lucHV0ID0geGdwaW9fZGlyX2luOwotCQljaGlwLT5tbWNoaXAuZ2MuZGlyZWN0aW9uX291dHB1dCA9IHhncGlvX2Rpcl9vdXQ7Ci0JCWNoaXAtPm1tY2hpcC5nYy5nZXQgPSB4Z3Bpb19nZXQ7Ci0JCWNoaXAtPm1tY2hpcC5nYy5zZXQgPSB4Z3Bpb19zZXQ7Ci0KLQkJY2hpcC0+bW1jaGlwLnNhdmVfcmVncyA9IHhncGlvX3NhdmVfcmVnczsKLQotCQkvKiBDYWxsIHRoZSBPRiBncGlvIGhlbHBlciB0byBzZXR1cCBhbmQgcmVnaXN0ZXIgdGhlIEdQSU8gZGV2ICovCi0JCXN0YXR1cyA9IG9mX21tX2dwaW9jaGlwX2FkZChucCwgJmNoaXAtPm1tY2hpcCk7Ci0JCWlmIChzdGF0dXMpIHsKLQkJCWtmcmVlKGNoaXApOwotCQkJcHJfZXJyKCIlczogZXJyb3IgaW4gcHJvYmUgZnVuY3Rpb24gd2l0aCBzdGF0dXMgJWRcbiIsCi0JCQlucC0+ZnVsbF9uYW1lLCBzdGF0dXMpOwotCQkJcmV0dXJuIHN0YXR1czsKLQkJfQotCQlwcl9pbmZvKCJYR3BpbzogJXM6IGR1YWwgY2hhbm5lbCByZWdpc3RlcmVkLCBiYXNlIGlzICVkXG4iLAotCQkJCQlucC0+ZnVsbF9uYW1lLCBjaGlwLT5tbWNoaXAuZ2MuYmFzZSk7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI5NywxOSArMzI3LDI5IEBACiAJeyAvKiBlbmQgb2YgbGlzdCAqLyB9LAogfTsKIAorTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeGdwaW9fb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4Z3Bpb19wbGF0X2RyaXZlciA9IHsKKwkucHJvYmUJCT0geGdwaW9fcHJvYmUsCisJLnJlbW92ZQkJPSB4Z3Bpb19yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCQkubmFtZSA9ICJncGlvLXhpbGlueCIsCisJCQkub2ZfbWF0Y2hfdGFibGUJPSB4Z3Bpb19vZl9tYXRjaCwKKwl9LAorfTsKKwogc3RhdGljIGludCBfX2luaXQgeGdwaW9faW5pdCh2b2lkKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0KLQlmb3JfZWFjaF9tYXRjaGluZ19ub2RlKG5wLCB4Z3Bpb19vZl9tYXRjaCkKLQkJeGdwaW9fb2ZfcHJvYmUobnApOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmeGdwaW9fcGxhdF9kcml2ZXIpOwogfQogCi0vKiBNYWtlIHN1cmUgd2UgZ2V0IGluaXRpYWxpemVkIGJlZm9yZSBhbnlvbmUgZWxzZSB0cmllcyB0byB1c2UgdXMgKi8KIHN1YnN5c19pbml0Y2FsbCh4Z3Bpb19pbml0KTsKLS8qIE5vIGV4aXQgY2FsbCBhdCB0aGUgbW9tZW50IGFzIHdlIGNhbm5vdCB1bnJlZ2lzdGVyIG9mIEdQSU8gY2hpcHMgKi8KKworc3RhdGljIHZvaWQgX19leGl0IHhncGlvX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmeGdwaW9fcGxhdF9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoeGdwaW9fZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIlhpbGlueCwgSW5jLiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJYaWxpbnggR1BJTyBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvLXpldmlvLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpby16ZXZpby5jCmluZGV4IGY3NjljZDUuLjZmMDJkN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvLXpldmlvLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW8temV2aW8uYwpAQCAtMTgxLDYgKzE4MSw4IEBACiAJaWYgKCFjb250cm9sbGVyKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGNvbnRyb2xsZXIpOworCiAJLyogQ29weSBvdXIgcmVmZXJlbmNlICovCiAJY29udHJvbGxlci0+Y2hpcC5nYyA9IHpldmlvX2dwaW9fY2hpcDsKIAljb250cm9sbGVyLT5jaGlwLmdjLmRldiA9ICZwZGV2LT5kZXY7CkBAIC0yMDIsNiArMjA0LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgemV2aW9fZ3Bpb19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgemV2aW9fZ3BpbyAqY29udHJvbGxlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJb2ZfbW1fZ3Bpb2NoaXBfcmVtb3ZlKCZjb250cm9sbGVyLT5jaGlwKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB6ZXZpb19ncGlvX29mX21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJsc2ksemV2aW8tZ3BpbyIsIH0sCiAJeyB9LApAQCAtMjE1LDYgKzIyNiw3IEBACiAJCS5vZl9tYXRjaF90YWJsZSA9IHpldmlvX2dwaW9fb2ZfbWF0Y2gsCiAJfSwKIAkucHJvYmUJCT0gemV2aW9fZ3Bpb19wcm9iZSwKKwkucmVtb3ZlCQk9IHpldmlvX2dwaW9fcmVtb3ZlLAogfTsKIG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoemV2aW9fZ3Bpb19kcml2ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jIGIvZHJpdmVycy9ncGlvL2dwaW9saWItb2YuYwppbmRleCAwODI2MWYyLi44Y2FkOGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1vZi5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLW9mLmMKQEAgLTIxMCw2ICsyMTAsMjMgQEAKIH0KIEVYUE9SVF9TWU1CT0wob2ZfbW1fZ3Bpb2NoaXBfYWRkKTsKIAorLyoqCisgKiBvZl9tbV9ncGlvY2hpcF9yZW1vdmUgLSBSZW1vdmUgbWVtb3J5IG1hcHBlZCBHUElPIGNoaXAgKGJhbmspCisgKiBAbW1fZ2M6CXBvaW50ZXIgdG8gdGhlIG9mX21tX2dwaW9fY2hpcCBhbGxvY2F0ZWQgc3RydWN0dXJlCisgKi8KK3ZvaWQgb2ZfbW1fZ3Bpb2NoaXBfcmVtb3ZlKHN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djKQoreworCXN0cnVjdCBncGlvX2NoaXAgKmdjID0gJm1tX2djLT5nYzsKKworCWlmICghbW1fZ2MpCisJCXJldHVybjsKKworCWdwaW9jaGlwX3JlbW92ZShnYyk7CisJaW91bm1hcChtbV9nYy0+cmVncyk7CisJa2ZyZWUoZ2MtPmxhYmVsKTsKK30KK0VYUE9SVF9TWU1CT0wob2ZfbW1fZ3Bpb2NoaXBfcmVtb3ZlKTsKKwogI2lmZGVmIENPTkZJR19QSU5DVFJMCiBzdGF0aWMgdm9pZCBvZl9ncGlvY2hpcF9hZGRfcGluX3JhbmdlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXApCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1zeXNmcy5jIGIvZHJpdmVycy9ncGlvL2dwaW9saWItc3lzZnMuYwppbmRleCBmNjJhYTExLi43NzIyZWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi1zeXNmcy5jCisrKyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLXN5c2ZzLmMKQEAgLTY0OCw2ICs2NDgsNyBAQAogCQlpZiAodGRldiAhPSBOVUxMKSB7CiAJCQlzdGF0dXMgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2LT5rb2JqLCAmdGRldi0+a29iaiwKIAkJCQkJCW5hbWUpOworCQkJcHV0X2RldmljZSh0ZGV2KTsKIAkJfSBlbHNlIHsKIAkJCXN0YXR1cyA9IC1FTk9ERVY7CiAJCX0KQEAgLTY5NSw3ICs2OTYsNyBAQAogCX0KIAogCXN0YXR1cyA9IHN5c2ZzX3NldF9hY3RpdmVfbG93KGRlc2MsIGRldiwgdmFsdWUpOwotCisJcHV0X2RldmljZShkZXYpOwogdW5sb2NrOgogCW11dGV4X3VubG9jaygmc3lzZnNfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCmluZGV4IDU2OGFhMmIuLjFjYTkyOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKKysrIGIvZHJpdmVycy9ncGlvL2dwaW9saWIuYwpAQCAtMTY1OSw3ICsxNjU5LDcgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgaWR4LAogCQkJCSAgICAgIGVudW0gZ3Bpb19sb29rdXBfZmxhZ3MgKmZsYWdzKQogewotCXN0YXRpYyBjb25zdCBjaGFyICpzdWZmaXhlc1tdID0geyAiZ3Bpb3MiLCAiZ3BpbyIgfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN1ZmZpeGVzW10gPSB7ICJncGlvcyIsICJncGlvIiB9OwogCWNoYXIgcHJvcF9uYW1lWzMyXTsgLyogMzIgaXMgbWF4IHNpemUgb2YgcHJvcGVydHkgbmFtZSAqLwogCWVudW0gb2ZfZ3Bpb19mbGFncyBvZl9mbGFnczsKIAlzdHJ1Y3QgZ3Bpb19kZXNjICpkZXNjOwpAQCAtMTY2Nyw5ICsxNjY3LDExIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdWZmaXhlcyk7IGkrKykgewogCQlpZiAoY29uX2lkKQotCQkJc25wcmludGYocHJvcF9uYW1lLCAzMiwgIiVzLSVzIiwgY29uX2lkLCBzdWZmaXhlc1tpXSk7CisJCQlzbnByaW50Zihwcm9wX25hbWUsIHNpemVvZihwcm9wX25hbWUpLCAiJXMtJXMiLCBjb25faWQsCisJCQkJCQkJICAgICAgIHN1ZmZpeGVzW2ldKTsKIAkJZWxzZQotCQkJc25wcmludGYocHJvcF9uYW1lLCAzMiwgIiVzIiwgc3VmZml4ZXNbaV0pOworCQkJc25wcmludGYocHJvcF9uYW1lLCBzaXplb2YocHJvcF9uYW1lKSwgIiVzIiwKKwkJCQkJCQkgICAgICAgc3VmZml4ZXNbaV0pOwogCiAJCWRlc2MgPSBvZl9nZXRfbmFtZWRfZ3Bpb2RfZmxhZ3MoZGV2LT5vZl9ub2RlLCBwcm9wX25hbWUsIGlkeCwKIAkJCQkJCSZvZl9mbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlLmMKaW5kZXggNjMzNTMyYS4uMjViYzQ3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2UuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJrZmRfcHJpdi5oIgogI2luY2x1ZGUgImtmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5oIgorI2luY2x1ZGUgImtmZF9wbTRfaGVhZGVycy5oIgogCiAjZGVmaW5lIE1RRF9TSVpFX0FMSUdORUQgNzY4CiAKQEAgLTE2OSw5ICsxNzAsOCBAQAogCWtmZC0+c2hhcmVkX3Jlc291cmNlcyA9ICpncHVfcmVzb3VyY2VzOwogCiAJLyogY2FsY3VsYXRlIG1heCBzaXplIG9mIG1xZHMgbmVlZGVkIGZvciBxdWV1ZXMgKi8KLQlzaXplID0gbWF4X251bV9vZl9wcm9jZXNzZXMgKgotCQltYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2VzcyAqCi0JCWtmZC0+ZGV2aWNlX2luZm8tPm1xZF9zaXplX2FsaWduZWQ7CisJc2l6ZSA9IG1heF9udW1fb2ZfcXVldWVzX3Blcl9kZXZpY2UgKgorCQkJa2ZkLT5kZXZpY2VfaW5mby0+bXFkX3NpemVfYWxpZ25lZDsKIAogCS8qIGFkZCBhbm90aGVyIDUxMktCIGZvciBhbGwgb3RoZXIgYWxsb2NhdGlvbnMgb24gZ2FydCAqLwogCXNpemUgKz0gNTEyICogMTAyNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9kZXZpY2VfcXVldWVfbWFuYWdlci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmMKaW5kZXggMzBjOGZkYS4uMGZkNTkyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmMKQEAgLTE4Myw2ICsxODMsMTMgQEAKIAogCW11dGV4X2xvY2soJmRxbS0+bG9jayk7CiAKKwlpZiAoZHFtLT50b3RhbF9xdWV1ZV9jb3VudCA+PSBtYXhfbnVtX29mX3F1ZXVlc19wZXJfZGV2aWNlKSB7CisJCXByX3dhcm4oImFtZGtmZDogQ2FuJ3QgY3JlYXRlIG5ldyB1c2VybW9kZSBxdWV1ZSBiZWNhdXNlICVkIHF1ZXVlcyB3ZXJlIGFscmVhZHkgY3JlYXRlZFxuIiwKKwkJCQlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50KTsKKwkJbXV0ZXhfdW5sb2NrKCZkcW0tPmxvY2spOworCQlyZXR1cm4gLUVQRVJNOworCX0KKwogCWlmIChsaXN0X2VtcHR5KCZxcGQtPnF1ZXVlc19saXN0KSkgewogCQlyZXR2YWwgPSBhbGxvY2F0ZV92bWlkKGRxbSwgcXBkLCBxKTsKIAkJaWYgKHJldHZhbCAhPSAwKSB7CkBAIC0yMDcsNiArMjE0LDE0IEBACiAJbGlzdF9hZGQoJnEtPmxpc3QsICZxcGQtPnF1ZXVlc19saXN0KTsKIAlkcW0tPnF1ZXVlX2NvdW50Kys7CiAKKwkvKgorCSAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgdGhpcyBjb3VudGVyLCByZWdhcmRsZXNzIG9mIHRoZSBxdWV1ZSdzCisJICogdHlwZSBvciB3aGV0aGVyIHRoZSBxdWV1ZSBpcyBhY3RpdmUuCisJICovCisJZHFtLT50b3RhbF9xdWV1ZV9jb3VudCsrOworCXByX2RlYnVnKCJUb3RhbCBvZiAlZCBxdWV1ZXMgYXJlIGFjY291bnRhYmxlIHNvIGZhclxuIiwKKwkJCWRxbS0+dG90YWxfcXVldWVfY291bnQpOworCiAJbXV0ZXhfdW5sb2NrKCZkcW0tPmxvY2spOwogCXJldHVybiAwOwogfQpAQCAtMzI2LDYgKzM0MSwxNSBAQAogCWlmIChsaXN0X2VtcHR5KCZxcGQtPnF1ZXVlc19saXN0KSkKIAkJZGVhbGxvY2F0ZV92bWlkKGRxbSwgcXBkLCBxKTsKIAlkcW0tPnF1ZXVlX2NvdW50LS07CisKKwkvKgorCSAqIFVuY29uZGl0aW9uYWxseSBkZWNyZW1lbnQgdGhpcyBjb3VudGVyLCByZWdhcmRsZXNzIG9mIHRoZSBxdWV1ZSdzCisJICogdHlwZQorCSAqLworCWRxbS0+dG90YWxfcXVldWVfY291bnQtLTsKKwlwcl9kZWJ1ZygiVG90YWwgb2YgJWQgcXVldWVzIGFyZSBhY2NvdW50YWJsZSBzbyBmYXJcbiIsCisJCQlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50KTsKKwogb3V0OgogCW11dGV4X3VubG9jaygmZHFtLT5sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtNTQxLDEwICs1NjUsMTQgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBwaXBlc19udW07IGkrKykgewogCQlpbnggPSBpICsgZmlyc3RfcGlwZTsKKwkJLyoKKwkJICogSFBEIGJ1ZmZlciBvbiBHVFQgaXMgYWxsb2NhdGVkIGJ5IGFtZGtmZCwgbm8gbmVlZCB0byB3YXN0ZQorCQkgKiBzcGFjZSBpbiBHVFQgZm9yIHBpcGVsaW5lcyB3ZSBkb24ndCBpbml0aWFsaXplCisJCSAqLwogCQlwaXBlX2hwZF9hZGRyID0gZHFtLT5waXBlbGluZXNfYWRkciArIGkgKiBDSUtfSFBEX0VPUF9CWVRFUzsKIAkJcHJfZGVidWcoImtmZDogcGlwZWxpbmUgYWRkcmVzcyAlbGxYXG4iLCBwaXBlX2hwZF9hZGRyKTsKIAkJLyogPSBsb2cyKGJ5dGVzLzQpLTEgKi8KLQkJa2ZkMmtnZC0+aW5pdF9waXBlbGluZShkcW0tPmRldi0+a2dkLCBpLAorCQlrZmQya2dkLT5pbml0X3BpcGVsaW5lKGRxbS0+ZGV2LT5rZ2QsIGlueCwKIAkJCQlDSUtfSFBEX0VPUF9CWVRFU19MT0cyIC0gMywgcGlwZV9ocGRfYWRkcik7CiAJfQogCkBAIC01NjAsNyArNTg4LDcgQEAKIAogCXByX2RlYnVnKCJrZmQ6IEluICVzXG4iLCBfX2Z1bmNfXyk7CiAKLQlyZXR2YWwgPSBpbml0X3BpcGVsaW5lcyhkcW0sIGdldF9waXBlc19udW0oZHFtKSwgS0ZEX0RRTV9GSVJTVF9QSVBFKTsKKwlyZXR2YWwgPSBpbml0X3BpcGVsaW5lcyhkcW0sIGdldF9waXBlc19udW0oZHFtKSwgZ2V0X2ZpcnN0X3BpcGUoZHFtKSk7CiAJaWYgKHJldHZhbCAhPSAwKQogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC03NTIsNiArNzgwLDIxIEBACiAJcHJfZGVidWcoImtmZDogSW4gZnVuYyAlc1xuIiwgX19mdW5jX18pOwogCiAJbXV0ZXhfbG9jaygmZHFtLT5sb2NrKTsKKwlpZiAoZHFtLT50b3RhbF9xdWV1ZV9jb3VudCA+PSBtYXhfbnVtX29mX3F1ZXVlc19wZXJfZGV2aWNlKSB7CisJCXByX3dhcm4oImFtZGtmZDogQ2FuJ3QgY3JlYXRlIG5ldyBrZXJuZWwgcXVldWUgYmVjYXVzZSAlZCBxdWV1ZXMgd2VyZSBhbHJlYWR5IGNyZWF0ZWRcbiIsCisJCQkJZHFtLT50b3RhbF9xdWV1ZV9jb3VudCk7CisJCW11dGV4X3VubG9jaygmZHFtLT5sb2NrKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwkvKgorCSAqIFVuY29uZGl0aW9uYWxseSBpbmNyZW1lbnQgdGhpcyBjb3VudGVyLCByZWdhcmRsZXNzIG9mIHRoZSBxdWV1ZSdzCisJICogdHlwZSBvciB3aGV0aGVyIHRoZSBxdWV1ZSBpcyBhY3RpdmUuCisJICovCisJZHFtLT50b3RhbF9xdWV1ZV9jb3VudCsrOworCXByX2RlYnVnKCJUb3RhbCBvZiAlZCBxdWV1ZXMgYXJlIGFjY291bnRhYmxlIHNvIGZhclxuIiwKKwkJCWRxbS0+dG90YWxfcXVldWVfY291bnQpOworCiAJbGlzdF9hZGQoJmtxLT5saXN0LCAmcXBkLT5wcml2X3F1ZXVlX2xpc3QpOwogCWRxbS0+cXVldWVfY291bnQrKzsKIAlxcGQtPmlzX2RlYnVnID0gdHJ1ZTsKQEAgLTc3NSw2ICs4MTgsMTMgQEAKIAlkcW0tPnF1ZXVlX2NvdW50LS07CiAJcXBkLT5pc19kZWJ1ZyA9IGZhbHNlOwogCWV4ZWN1dGVfcXVldWVzX2Nwc2NoKGRxbSwgZmFsc2UpOworCS8qCisJICogVW5jb25kaXRpb25hbGx5IGRlY3JlbWVudCB0aGlzIGNvdW50ZXIsIHJlZ2FyZGxlc3Mgb2YgdGhlIHF1ZXVlJ3MKKwkgKiB0eXBlLgorCSAqLworCWRxbS0+dG90YWxfcXVldWVfY291bnQtLTsKKwlwcl9kZWJ1ZygiVG90YWwgb2YgJWQgcXVldWVzIGFyZSBhY2NvdW50YWJsZSBzbyBmYXJcbiIsCisJCQlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50KTsKIAltdXRleF91bmxvY2soJmRxbS0+bG9jayk7CiB9CiAKQEAgLTc5Myw2ICs4NDMsMTMgQEAKIAogCW11dGV4X2xvY2soJmRxbS0+bG9jayk7CiAKKwlpZiAoZHFtLT50b3RhbF9xdWV1ZV9jb3VudCA+PSBtYXhfbnVtX29mX3F1ZXVlc19wZXJfZGV2aWNlKSB7CisJCXByX3dhcm4oImFtZGtmZDogQ2FuJ3QgY3JlYXRlIG5ldyB1c2VybW9kZSBxdWV1ZSBiZWNhdXNlICVkIHF1ZXVlcyB3ZXJlIGFscmVhZHkgY3JlYXRlZFxuIiwKKwkJCQlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50KTsKKwkJcmV0dmFsID0gLUVQRVJNOworCQlnb3RvIG91dDsKKwl9CisKIAltcWQgPSBkcW0tPmdldF9tcWRfbWFuYWdlcihkcW0sIEtGRF9NUURfVFlQRV9DSUtfQ1ApOwogCWlmIChtcWQgPT0gTlVMTCkgewogCQltdXRleF91bmxvY2soJmRxbS0+bG9jayk7CkBAIC04MTAsNiArODY3LDE1IEBACiAJCXJldHZhbCA9IGV4ZWN1dGVfcXVldWVzX2Nwc2NoKGRxbSwgZmFsc2UpOwogCX0KIAorCS8qCisJICogVW5jb25kaXRpb25hbGx5IGluY3JlbWVudCB0aGlzIGNvdW50ZXIsIHJlZ2FyZGxlc3Mgb2YgdGhlIHF1ZXVlJ3MKKwkgKiB0eXBlIG9yIHdoZXRoZXIgdGhlIHF1ZXVlIGlzIGFjdGl2ZS4KKwkgKi8KKwlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50Kys7CisKKwlwcl9kZWJ1ZygiVG90YWwgb2YgJWQgcXVldWVzIGFyZSBhY2NvdW50YWJsZSBzbyBmYXJcbiIsCisJCQlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50KTsKKwogb3V0OgogCW11dGV4X3VubG9jaygmZHFtLT5sb2NrKTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtOTMwLDYgKzk5NiwxNCBAQAogCiAJbXFkLT51bmluaXRfbXFkKG1xZCwgcS0+bXFkLCBxLT5tcWRfbWVtX29iaik7CiAKKwkvKgorCSAqIFVuY29uZGl0aW9uYWxseSBkZWNyZW1lbnQgdGhpcyBjb3VudGVyLCByZWdhcmRsZXNzIG9mIHRoZSBxdWV1ZSdzCisJICogdHlwZQorCSAqLworCWRxbS0+dG90YWxfcXVldWVfY291bnQtLTsKKwlwcl9kZWJ1ZygiVG90YWwgb2YgJWQgcXVldWVzIGFyZSBhY2NvdW50YWJsZSBzbyBmYXJcbiIsCisJCQlkcW0tPnRvdGFsX3F1ZXVlX2NvdW50KTsKKwogCW11dGV4X3VubG9jaygmZHFtLT5sb2NrKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfZGV2aWNlX3F1ZXVlX21hbmFnZXIuaAppbmRleCBjM2YxODllOC4uNTIwMzViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX2RldmljZV9xdWV1ZV9tYW5hZ2VyLmgKQEAgLTEzMCw2ICsxMzAsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQJcXVldWVzOwogCXVuc2lnbmVkIGludAkJcHJvY2Vzc2VzX2NvdW50OwogCXVuc2lnbmVkIGludAkJcXVldWVfY291bnQ7CisJdW5zaWduZWQgaW50CQl0b3RhbF9xdWV1ZV9jb3VudDsKIAl1bnNpZ25lZCBpbnQJCW5leHRfcGlwZV90b19hbGxvY2F0ZTsKIAl1bnNpZ25lZCBpbnQJCSphbGxvY2F0ZWRfcXVldWVzOwogCXVuc2lnbmVkIGludAkJdm1pZF9iaXRtYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbW9kdWxlLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfbW9kdWxlLmMKaW5kZXggOTVkNWFmMS4uMWMzODVjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX21vZHVsZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9tb2R1bGUuYwpAQCAtNTAsMTUgKzUwLDEwIEBACiBNT0RVTEVfUEFSTV9ERVNDKHNjaGVkX3BvbGljeSwKIAkiS2VybmVsIGNtZGxpbmUgcGFyYW1ldGVyIHRoYXQgZGVmaW5lcyB0aGUgYW1ka2ZkIHNjaGVkdWxpbmcgcG9saWN5Iik7CiAKLWludCBtYXhfbnVtX29mX3Byb2Nlc3NlcyA9IEtGRF9NQVhfTlVNX09GX1BST0NFU1NFU19ERUZBVUxUOwotbW9kdWxlX3BhcmFtKG1heF9udW1fb2ZfcHJvY2Vzc2VzLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhtYXhfbnVtX29mX3Byb2Nlc3NlcywKLQkiS2VybmVsIGNtZGxpbmUgcGFyYW1ldGVyIHRoYXQgZGVmaW5lcyB0aGUgYW1ka2ZkIG1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBwcm9jZXNzZXMiKTsKLQotaW50IG1heF9udW1fb2ZfcXVldWVzX3Blcl9wcm9jZXNzID0gS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9QUk9DRVNTX0RFRkFVTFQ7Ci1tb2R1bGVfcGFyYW0obWF4X251bV9vZl9xdWV1ZXNfcGVyX3Byb2Nlc3MsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG1heF9udW1fb2ZfcXVldWVzX3Blcl9wcm9jZXNzLAotCSJLZXJuZWwgY21kbGluZSBwYXJhbWV0ZXIgdGhhdCBkZWZpbmVzIHRoZSBhbWRrZmQgbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHF1ZXVlcyBwZXIgcHJvY2VzcyIpOworaW50IG1heF9udW1fb2ZfcXVldWVzX3Blcl9kZXZpY2UgPSBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX0RFVklDRV9ERUZBVUxUOworbW9kdWxlX3BhcmFtKG1heF9udW1fb2ZfcXVldWVzX3Blcl9kZXZpY2UsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9udW1fb2ZfcXVldWVzX3Blcl9kZXZpY2UsCisJIk1heGltdW0gbnVtYmVyIG9mIHN1cHBvcnRlZCBxdWV1ZXMgcGVyIGRldmljZSAoMSA9IE1pbmltdW0sIDQwOTYgPSBkZWZhdWx0KSIpOwogCiBib29sIGtnZDJrZmRfaW5pdCh1bnNpZ25lZCBpbnRlcmZhY2VfdmVyc2lvbiwKIAkJICBjb25zdCBzdHJ1Y3Qga2ZkMmtnZF9jYWxscyAqZjJnLApAQCAtMTAwLDE2ICs5NSwxMCBAQAogCX0KIAogCS8qIFZlcmlmeSBtb2R1bGUgcGFyYW1ldGVycyAqLwotCWlmICgobWF4X251bV9vZl9wcm9jZXNzZXMgPCAwKSB8fAotCQkobWF4X251bV9vZl9wcm9jZXNzZXMgPiBLRkRfTUFYX05VTV9PRl9QUk9DRVNTRVMpKSB7Ci0JCXByX2Vycigia2ZkOiBtYXhfbnVtX29mX3Byb2Nlc3NlcyBtdXN0IGJlIGJldHdlZW4gMCB0byBLRkRfTUFYX05VTV9PRl9QUk9DRVNTRVNcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKChtYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2VzcyA8IDApIHx8Ci0JCShtYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2VzcyA+Ci0JCQlLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1MpKSB7Ci0JCXByX2Vycigia2ZkOiBtYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2VzcyBtdXN0IGJlIGJldHdlZW4gMCB0byBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1NcbiIpOworCWlmICgobWF4X251bV9vZl9xdWV1ZXNfcGVyX2RldmljZSA8IDEpIHx8CisJCShtYXhfbnVtX29mX3F1ZXVlc19wZXJfZGV2aWNlID4KKwkJCUtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfREVWSUNFKSkgeworCQlwcl9lcnIoImtmZDogbWF4X251bV9vZl9xdWV1ZXNfcGVyX2RldmljZSBtdXN0IGJlIGJldHdlZW4gMSB0byBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX0RFVklDRVxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wYXNpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Bhc2lkLmMKaW5kZXggNGMyNWVmNS4uNmNmZTdmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Bhc2lkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Bhc2lkLmMKQEAgLTMwLDcgKzMwLDcgQEAKIAogaW50IGtmZF9wYXNpZF9pbml0KHZvaWQpCiB7Ci0JcGFzaWRfbGltaXQgPSBtYXhfbnVtX29mX3Byb2Nlc3NlczsKKwlwYXNpZF9saW1pdCA9IEtGRF9NQVhfTlVNX09GX1BST0NFU1NFUzsKIAogCXBhc2lkX2JpdG1hcCA9IGtjYWxsb2MoQklUU19UT19MT05HUyhwYXNpZF9saW1pdCksIHNpemVvZihsb25nKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwYXNpZF9iaXRtYXApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJpdi5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3ByaXYuaAppbmRleCBiM2RjMTNjLi45NmRjMTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJpdi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1ka2ZkL2tmZF9wcml2LmgKQEAgLTUyLDIwICs1MiwxOSBAQAogI2RlZmluZSBrZmRfYWxsb2Nfc3RydWN0KHB0cl90b19zdHJ1Y3QpCVwKIAkoKHR5cGVvZihwdHJfdG9fc3RydWN0KSkga3phbGxvYyhzaXplb2YoKnB0cl90b19zdHJ1Y3QpLCBHRlBfS0VSTkVMKSkKIAotLyogS2VybmVsIG1vZHVsZSBwYXJhbWV0ZXIgdG8gc3BlY2lmeSBtYXhpbXVtIG51bWJlciBvZiBzdXBwb3J0ZWQgcHJvY2Vzc2VzICovCi1leHRlcm4gaW50IG1heF9udW1fb2ZfcHJvY2Vzc2VzOwotCi0jZGVmaW5lIEtGRF9NQVhfTlVNX09GX1BST0NFU1NFU19ERUZBVUxUIDMyCiAjZGVmaW5lIEtGRF9NQVhfTlVNX09GX1BST0NFU1NFUyA1MTIKKyNkZWZpbmUgS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9QUk9DRVNTIDEwMjQKIAogLyoKLSAqIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVyIHRvIHNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHF1ZXVlcwotICogcGVyIHByb2Nlc3MKKyAqIEtlcm5lbCBtb2R1bGUgcGFyYW1ldGVyIHRvIHNwZWNpZnkgbWF4aW11bSBudW1iZXIgb2Ygc3VwcG9ydGVkIHF1ZXVlcyBwZXIKKyAqIGRldmljZQogICovCi1leHRlcm4gaW50IG1heF9udW1fb2ZfcXVldWVzX3Blcl9wcm9jZXNzOworZXh0ZXJuIGludCBtYXhfbnVtX29mX3F1ZXVlc19wZXJfZGV2aWNlOwogCi0jZGVmaW5lIEtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfUFJPQ0VTU19ERUZBVUxUIDEyOAotI2RlZmluZSBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1MgMTAyNAorI2RlZmluZSBLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX0RFVklDRV9ERUZBVUxUIDQwOTYKKyNkZWZpbmUgS0ZEX01BWF9OVU1fT0ZfUVVFVUVTX1BFUl9ERVZJQ0UJCVwKKwkoS0ZEX01BWF9OVU1fT0ZfUFJPQ0VTU0VTICoJCQlcCisJCQlLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1MpCiAKICNkZWZpbmUgS0ZEX0tFUk5FTF9RVUVVRV9TSVpFIDIwNDgKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nlc3NfcXVldWVfbWFuYWdlci5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nlc3NfcXVldWVfbWFuYWdlci5jCmluZGV4IDQ3NTI2NzguLjJmZGExOTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGtmZC9rZmRfcHJvY2Vzc19xdWV1ZV9tYW5hZ2VyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQva2ZkX3Byb2Nlc3NfcXVldWVfbWFuYWdlci5jCkBAIC01NCwxMSArNTQsMTEgQEAKIAlwcl9kZWJ1Zygia2ZkOiBpbiAlc1xuIiwgX19mdW5jX18pOwogCiAJZm91bmQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHBxbS0+cXVldWVfc2xvdF9iaXRtYXAsCi0JCQltYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2Vzcyk7CisJCQlLRkRfTUFYX05VTV9PRl9RVUVVRVNfUEVSX1BST0NFU1MpOwogCiAJcHJfZGVidWcoImtmZDogdGhlIG5ldyBzbG90IGlkICVsdVxuIiwgZm91bmQpOwogCi0JaWYgKGZvdW5kID49IG1heF9udW1fb2ZfcXVldWVzX3Blcl9wcm9jZXNzKSB7CisJaWYgKGZvdW5kID49IEtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfUFJPQ0VTUykgewogCQlwcl9pbmZvKCJhbWRrZmQ6IENhbiBub3Qgb3BlbiBtb3JlIHF1ZXVlcyBmb3IgcHJvY2VzcyB3aXRoIHBhc2lkICVkXG4iLAogCQkJCXBxbS0+cHJvY2Vzcy0+cGFzaWQpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTc2LDcgKzc2LDcgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZwcW0tPnF1ZXVlcyk7CiAJcHFtLT5xdWV1ZV9zbG90X2JpdG1hcCA9Ci0JCQlremFsbG9jKERJVl9ST1VORF9VUChtYXhfbnVtX29mX3F1ZXVlc19wZXJfcHJvY2VzcywKKwkJCWt6YWxsb2MoRElWX1JPVU5EX1VQKEtGRF9NQVhfTlVNX09GX1FVRVVFU19QRVJfUFJPQ0VTUywKIAkJCQkJQklUU19QRVJfQllURSksIEdGUF9LRVJORUwpOwogCWlmIChwcW0tPnF1ZXVlX3Nsb3RfYml0bWFwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjAzLDYgKzIwMyw3IEBACiAJCXBxbi0+a3EgPSBOVUxMOwogCQlyZXR2YWwgPSBkZXYtPmRxbS0+Y3JlYXRlX3F1ZXVlKGRldi0+ZHFtLCBxLCAmcGRkLT5xcGQsCiAJCQkJCQkmcS0+cHJvcGVydGllcy52bWlkKTsKKwkJcHJfZGVidWcoIkRRTSByZXR1cm5lZCAlZCBmb3IgY3JlYXRlX3F1ZXVlXG4iLCByZXR2YWwpOwogCQlwcmludF9xdWV1ZShxKTsKIAkJYnJlYWs7CiAJY2FzZSBLRkRfUVVFVUVfVFlQRV9ESVE6CkBAIC0yMjIsNyArMjIzLDcgQEAKIAl9CiAKIAlpZiAocmV0dmFsICE9IDApIHsKLQkJcHJfZXJyKCJrZmQ6IGVycm9yIGRxbSBjcmVhdGUgcXVldWVcbiIpOworCQlwcl9kZWJ1ZygiRXJyb3IgZHFtIGNyZWF0ZSBxdWV1ZVxuIik7CiAJCWdvdG8gZXJyX2NyZWF0ZV9xdWV1ZTsKIAl9CiAKQEAgLTI0MSw3ICsyNDIsMTAgQEAKIGVycl9jcmVhdGVfcXVldWU6CiAJa2ZyZWUocHFuKTsKIGVycl9hbGxvY2F0ZV9wcW46CisJLyogY2hlY2sgaWYgcXVldWVzIGxpc3QgaXMgZW1wdHkgdW5yZWdpc3RlciBwcm9jZXNzIGZyb20gZGV2aWNlICovCiAJY2xlYXJfYml0KCpxaWQsIHBxbS0+cXVldWVfc2xvdF9iaXRtYXApOworCWlmIChsaXN0X2VtcHR5KCZwcW0tPnF1ZXVlcykpCisJCWRldi0+ZHFtLT51bnJlZ2lzdGVyX3Byb2Nlc3MoZGV2LT5kcW0sICZwZGQtPnFwZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMzExLDcgKzMxNSwxMSBAQAogCUJVR19PTighcHFtKTsKIAogCXBxbiA9IGdldF9xdWV1ZV9ieV9xaWQocHFtLCBxaWQpOwotCUJVR19PTighcHFuKTsKKwlpZiAoIXBxbikgeworCQlwcl9kZWJ1ZygiYW1ka2ZkOiBObyBxdWV1ZSAlZCBleGlzdHMgZm9yIHVwZGF0ZSBvcGVyYXRpb25cbiIsCisJCQkJcWlkKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQogCiAJcHFuLT5xLT5wcm9wZXJ0aWVzLnF1ZXVlX2FkZHJlc3MgPSBwLT5xdWV1ZV9hZGRyZXNzOwogCXBxbi0+cS0+cHJvcGVydGllcy5xdWV1ZV9zaXplID0gcC0+cXVldWVfc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9jaXJydXMvY2lycnVzX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2NpcnJ1cy9jaXJydXNfZHJ2LmMKaW5kZXggYzJhMWNiYS4uYjkxNDAwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2NpcnJ1cy9jaXJydXNfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2NpcnJ1cy9jaXJydXNfZHJ2LmMKQEAgLTE2LDkgKzE2LDEyIEBACiAjaW5jbHVkZSAiY2lycnVzX2Rydi5oIgogCiBpbnQgY2lycnVzX21vZGVzZXQgPSAtMTsKK2ludCBjaXJydXNfYnBwID0gMjQ7CiAKIE1PRFVMRV9QQVJNX0RFU0MobW9kZXNldCwgIkRpc2FibGUvRW5hYmxlIG1vZGVzZXR0aW5nIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQobW9kZXNldCwgY2lycnVzX21vZGVzZXQsIGludCwgMDQwMCk7CitNT0RVTEVfUEFSTV9ERVNDKGJwcCwgIk1heCBiaXRzLXBlci1waXhlbCAoZGVmYXVsdDoyNCkiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChicHAsIGNpcnJ1c19icHAsIGludCwgMDQwMCk7CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBnZW5lcmljIGRyaXZlciBjb2RlLiBUaGlzIGJpbmRzIHRoZSBkcml2ZXIgdG8gdGhlIGRybSBjb3JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2NpcnJ1cy9jaXJydXNfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vY2lycnVzL2NpcnJ1c19kcnYuaAppbmRleCA2OTNhNDU2Li43MDUwNjE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vY2lycnVzL2NpcnJ1c19kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vY2lycnVzL2NpcnJ1c19kcnYuaApAQCAtMjYyLDQgKzI2Miw3IEBACiAKIGludCBjaXJydXNfYm9fcHVzaF9zeXNyYW0oc3RydWN0IGNpcnJ1c19ibyAqYm8pOwogaW50IGNpcnJ1c19ib19waW4oc3RydWN0IGNpcnJ1c19ibyAqYm8sIHUzMiBwbF9mbGFnLCB1NjQgKmdwdV9hZGRyKTsKKworZXh0ZXJuIGludCBjaXJydXNfYnBwOworCiAjZW5kaWYJCQkJLyogX19DSVJSVVNfRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2NpcnJ1cy9jaXJydXNfbWFpbi5jIGIvZHJpdmVycy9ncHUvZHJtL2NpcnJ1cy9jaXJydXNfbWFpbi5jCmluZGV4IDRjMmQ2OGUuLmU0Yjk3NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9jaXJydXMvY2lycnVzX21haW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vY2lycnVzL2NpcnJ1c19tYWluLmMKQEAgLTMyMCw2ICszMjAsOCBAQAogCWNvbnN0IGludCBtYXhfcGl0Y2ggPSAweDFGRiA8PCAzOyAvKiAoNDA5NiAtIDEpICYgfjExMWIgYnl0ZXMgKi8KIAljb25zdCBpbnQgbWF4X3NpemUgPSBjZGV2LT5tYy52cmFtX3NpemU7CiAKKwlpZiAoYnBwID4gY2lycnVzX2JwcCkKKwkJcmV0dXJuIGZhbHNlOwogCWlmIChicHAgPiAzMikKIAkJcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vY2lycnVzL2NpcnJ1c19tb2RlLmMgYi9kcml2ZXJzL2dwdS9kcm0vY2lycnVzL2NpcnJ1c19tb2RlLmMKaW5kZXggOTlkNGE3NC4uNjEzODVmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2NpcnJ1cy9jaXJydXNfbW9kZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9jaXJydXMvY2lycnVzX21vZGUuYwpAQCAtNTAxLDggKzUwMSwxMyBAQAogCWludCBjb3VudDsKIAogCS8qIEp1c3QgYWRkIGEgc3RhdGljIGxpc3Qgb2YgbW9kZXMgKi8KLQljb3VudCA9IGRybV9hZGRfbW9kZXNfbm9lZGlkKGNvbm5lY3RvciwgMTI4MCwgMTAyNCk7Ci0JZHJtX3NldF9wcmVmZXJyZWRfbW9kZShjb25uZWN0b3IsIDEwMjQsIDc2OCk7CisJaWYgKGNpcnJ1c19icHAgPD0gMjQpIHsKKwkJY291bnQgPSBkcm1fYWRkX21vZGVzX25vZWRpZChjb25uZWN0b3IsIDEyODAsIDEwMjQpOworCQlkcm1fc2V0X3ByZWZlcnJlZF9tb2RlKGNvbm5lY3RvciwgMTAyNCwgNzY4KTsKKwl9IGVsc2UgeworCQljb3VudCA9IGRybV9hZGRfbW9kZXNfbm9lZGlkKGNvbm5lY3RvciwgODAwLCA2MDApOworCQlkcm1fc2V0X3ByZWZlcnJlZF9tb2RlKGNvbm5lY3RvciwgODAwLCA2MDApOworCX0KIAlyZXR1cm4gY291bnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCmluZGV4IGNmNzc1YTQuLmRjMzg2ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpAQCAtMTQ1LDYgKzE0NSwzMSBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2FkZF9vbmVfY29ubmVjdG9yKTsKIAorc3RhdGljIHZvaWQgcmVtb3ZlX2Zyb21fbW9kZXNldChzdHJ1Y3QgZHJtX21vZGVfc2V0ICpzZXQsCisJCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJaW50IGksIGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2V0LT5udW1fY29ubmVjdG9yczsgaSsrKSB7CisJCWlmIChzZXQtPmNvbm5lY3RvcnNbaV0gPT0gY29ubmVjdG9yKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPT0gc2V0LT5udW1fY29ubmVjdG9ycykKKwkJcmV0dXJuOworCisJZm9yIChqID0gaSArIDE7IGogPCBzZXQtPm51bV9jb25uZWN0b3JzOyBqKyspIHsKKwkJc2V0LT5jb25uZWN0b3JzW2ogLSAxXSA9IHNldC0+Y29ubmVjdG9yc1tqXTsKKwl9CisJc2V0LT5udW1fY29ubmVjdG9ycy0tOworCisJLyogYmVjYXVzZSBpOTE1IGlzIHBpc3N5IGFib3V0IHRoaXMuLgorCSAqIFRPRE8gbWF5YmUgbmVlZCB0byBtYWtlcyBzdXJlIHdlIHNldCBpdCBiYWNrIHRvICE9TlVMTCBzb21ld2hlcmU/CisJICovCisJaWYgKHNldC0+bnVtX2Nvbm5lY3RvcnMgPT0gMCkKKwkJc2V0LT5mYiA9IE5VTEw7Cit9CisKIGludCBkcm1fZmJfaGVscGVyX3JlbW92ZV9vbmVfY29ubmVjdG9yKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJCQkJICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CkBAIC0xNjcsNiArMTkyLDExIEBACiAJfQogCWZiX2hlbHBlci0+Y29ubmVjdG9yX2NvdW50LS07CiAJa2ZyZWUoZmJfaGVscGVyX2Nvbm5lY3Rvcik7CisKKwkvKiBhbHNvIGNsZWFudXAgZGFuZ2xpbmcgcmVmZXJlbmNlcyB0byB0aGUgY29ubmVjdG9yOiAqLworCWZvciAoaSA9IDA7IGkgPCBmYl9oZWxwZXItPmNydGNfY291bnQ7IGkrKykKKwkJcmVtb3ZlX2Zyb21fbW9kZXNldCgmZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQsIGNvbm5lY3Rvcik7CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9yZW1vdmVfb25lX2Nvbm5lY3Rvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtYV9tYW5hZ2VyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtYV9tYW5hZ2VyLmMKaW5kZXggNjNiNDcxMi4uNjhjMWYzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV92bWFfbWFuYWdlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm1hX21hbmFnZXIuYwpAQCAtNTAsOCArNTAsNyBAQAogICoKICAqIFlvdSBtdXN0IG5vdCB1c2UgbXVsdGlwbGUgb2Zmc2V0IG1hbmFnZXJzIG9uIGEgc2luZ2xlIGFkZHJlc3Nfc3BhY2UuCiAgKiBPdGhlcndpc2UsIG1tLWNvcmUgd2lsbCBiZSB1bmFibGUgdG8gdGVhciBkb3duIG1lbW9yeSBtYXBwaW5ncyBhcyB0aGUgVk0gd2lsbAotICogbm8gbG9uZ2VyIGJlIGxpbmVhci4gUGxlYXNlIHVzZSBWTV9OT05MSU5FQVIgaW4gdGhhdCBjYXNlIGFuZCBpbXBsZW1lbnQgeW91cgotICogb3duIG9mZnNldCBtYW5hZ2Vycy4KKyAqIG5vIGxvbmdlciBiZSBsaW5lYXIuCiAgKgogICogVGhpcyBvZmZzZXQgbWFuYWdlciB3b3JrcyBvbiBwYWdlLWJhc2VkIGFkZHJlc3Nlcy4gVGhhdCBpcywgZXZlcnkgYXJndW1lbnQKICAqIGFuZCByZXR1cm4gY29kZSAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGRybV92bWFfbm9kZV9vZmZzZXRfYWRkcigpKSBpcyBnaXZlbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2kyYy90ZGE5OTh4X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2kyYy90ZGE5OTh4X2Rydi5jCmluZGV4IGQ0NzYyNzkuLmE5MDQxZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pMmMvdGRhOTk4eF9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTJjL3RkYTk5OHhfZHJ2LmMKQEAgLTMyLDYgKzMyLDggQEAKIHN0cnVjdCB0ZGE5OTh4X3ByaXYgewogCXN0cnVjdCBpMmNfY2xpZW50ICpjZWM7CiAJc3RydWN0IGkyY19jbGllbnQgKmhkbWk7CisJc3RydWN0IG11dGV4IG11dGV4OworCXN0cnVjdCBkZWxheWVkX3dvcmsgZHdvcms7CiAJdWludDE2X3QgcmV2OwogCXVpbnQ4X3QgY3VycmVudF9wYWdlOwogCWludCBkcG1zOwpAQCAtNDAyLDkgKzQwNCwxMCBAQAogCXVpbnQ4X3QgYWRkciA9IFJFRzJBRERSKHJlZyk7CiAJaW50IHJldDsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlyZXQgPSBzZXRfcGFnZShwcml2LCByZWcpOwogCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dDsKIAogCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsICZhZGRyLCBzaXplb2YoYWRkcikpOwogCWlmIChyZXQgPCAwKQpAQCAtNDE0LDEwICs0MTcsMTIgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBmYWlsOwogCi0JcmV0dXJuIHJldDsKKwlnb3RvIG91dDsKIAogZmFpbDoKIAlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkVycm9yICVkIHJlYWRpbmcgZnJvbSAweCV4XG4iLCByZXQsIHJlZyk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDMxLDEzICs0MzYsMTYgQEAKIAlidWZbMF0gPSBSRUcyQUREUihyZWcpOwogCW1lbWNweSgmYnVmWzFdLCBwLCBjbnQpOwogCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldCA9IHNldF9wYWdlKHByaXYsIHJlZyk7CiAJaWYgKHJldCA8IDApCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIGNudCArIDEpOwogCWlmIChyZXQgPCAwKQogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkVycm9yICVkIHdyaXRpbmcgdG8gMHgleFxuIiwgcmV0LCByZWcpOworb3V0OgorCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50CkBAIC00NTksMTMgKzQ2NywxNiBAQAogCXVpbnQ4X3QgYnVmW10gPSB7UkVHMkFERFIocmVnKSwgdmFsfTsKIAlpbnQgcmV0OwogCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldCA9IHNldF9wYWdlKHByaXYsIHJlZyk7CiAJaWYgKHJldCA8IDApCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIHNpemVvZihidWYpKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJFcnJvciAlZCB3cml0aW5nIHRvIDB4JXhcbiIsIHJldCwgcmVnKTsKK291dDoKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQ3NSwxMyArNDg2LDE2IEBACiAJdWludDhfdCBidWZbXSA9IHtSRUcyQUREUihyZWcpLCB2YWwgPj4gOCwgdmFsfTsKIAlpbnQgcmV0OwogCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldCA9IHNldF9wYWdlKHByaXYsIHJlZyk7CiAJaWYgKHJldCA8IDApCi0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIHNpemVvZihidWYpKTsKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJFcnJvciAlZCB3cml0aW5nIHRvIDB4JXhcbiIsIHJldCwgcmVnKTsKK291dDoKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTUzNiw2ICs1NTAsMTcgQEAKIAlyZWdfd3JpdGUocHJpdiwgUkVHX01VWF9WUF9WSVBfT1VULCAweDI0KTsKIH0KIAorLyogaGFuZGxlIEhETUkgY29ubmVjdC9kaXNjb25uZWN0ICovCitzdGF0aWMgdm9pZCB0ZGE5OTh4X2hwZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSB0b19kZWxheWVkX3dvcmsod29yayk7CisJc3RydWN0IHRkYTk5OHhfcHJpdiAqcHJpdiA9CisJCQljb250YWluZXJfb2YoZHdvcmssIHN0cnVjdCB0ZGE5OTh4X3ByaXYsIGR3b3JrKTsKKworCWlmIChwcml2LT5lbmNvZGVyICYmIHByaXYtPmVuY29kZXItPmRldikKKwkJZHJtX2ttc19oZWxwZXJfaG90cGx1Z19ldmVudChwcml2LT5lbmNvZGVyLT5kZXYpOworfQorCiAvKgogICogb25seSAyIGludGVycnVwdHMgbWF5IG9jY3VyOiBzY3JlZW4gcGx1Zy91bnBsdWcgYW5kIEVESUQgcmVhZAogICovCkBAIC01NTksOCArNTg0LDcgQEAKIAkJcHJpdi0+d3FfZWRpZF93YWl0ID0gMDsKIAkJd2FrZV91cCgmcHJpdi0+d3FfZWRpZCk7CiAJfSBlbHNlIGlmIChjZWMgIT0gMCkgewkJCS8qIEhQRCBjaGFuZ2UgKi8KLQkJaWYgKHByaXYtPmVuY29kZXIgJiYgcHJpdi0+ZW5jb2Rlci0+ZGV2KQotCQkJZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KHByaXYtPmVuY29kZXItPmRldik7CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcHJpdi0+ZHdvcmssIEhaLzEwKTsKIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTE3MCw4ICsxMTk0LDEwIEBACiAJLyogZGlzYWJsZSBhbGwgSVJRcyBhbmQgZnJlZSB0aGUgSVJRIGhhbmRsZXIgKi8KIAljZWNfd3JpdGUocHJpdiwgUkVHX0NFQ19SWFNIUERJTlRFTkEsIDApOwogCXJlZ19jbGVhcihwcml2LCBSRUdfSU5UX0ZMQUdTXzIsIElOVF9GTEFHU18yX0VESURfQkxLX1JEKTsKLQlpZiAocHJpdi0+aGRtaS0+aXJxKQorCWlmIChwcml2LT5oZG1pLT5pcnEpIHsKIAkJZnJlZV9pcnEocHJpdi0+aGRtaS0+aXJxLCBwcml2KTsKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5kd29yayk7CisJfQogCiAJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKHByaXYtPmNlYyk7CiB9CkBAIC0xMjU1LDYgKzEyODEsNyBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBjbGllbnQtPmRldi5vZl9ub2RlOwogCXUzMiB2aWRlbzsKIAlpbnQgcmV2X2xvLCByZXZfaGksIHJldDsKKwl1bnNpZ25lZCBzaG9ydCBjZWNfYWRkcjsKIAogCXByaXYtPnZpcF9jbnRybF8wID0gVklQX0NOVFJMXzBfU1dBUF9BKDIpIHwgVklQX0NOVFJMXzBfU1dBUF9CKDMpOwogCXByaXYtPnZpcF9jbnRybF8xID0gVklQX0NOVFJMXzFfU1dBUF9DKDApIHwgVklQX0NOVFJMXzFfU1dBUF9EKDEpOwpAQCAtMTI2MiwxMiArMTI4OSwxNiBAQAogCiAJcHJpdi0+Y3VycmVudF9wYWdlID0gMHhmZjsKIAlwcml2LT5oZG1pID0gY2xpZW50OwotCXByaXYtPmNlYyA9IGkyY19uZXdfZHVtbXkoY2xpZW50LT5hZGFwdGVyLCAweDM0KTsKKwkvKiBDRUMgSTJDIGFkZHJlc3MgYm91bmQgdG8gVERBOTk4eCBJMkMgYWRkciBieSBjb25maWd1cmF0aW9uIHBpbnMgKi8KKwljZWNfYWRkciA9IDB4MzQgKyAoY2xpZW50LT5hZGRyICYgMHgwMyk7CisJcHJpdi0+Y2VjID0gaTJjX25ld19kdW1teShjbGllbnQtPmFkYXB0ZXIsIGNlY19hZGRyKTsKIAlpZiAoIXByaXYtPmNlYykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlwcml2LT5kcG1zID0gRFJNX01PREVfRFBNU19PRkY7CiAKKwltdXRleF9pbml0KCZwcml2LT5tdXRleCk7CS8qIHByb3RlY3QgdGhlIHBhZ2UgYWNjZXNzICovCisKIAkvKiB3YWtlIHVwIHRoZSBkZXZpY2U6ICovCiAJY2VjX3dyaXRlKHByaXYsIFJFR19DRUNfRU5BTU9EUywKIAkJCUNFQ19FTkFNT0RTX0VOX1JYU0VOUyB8IENFQ19FTkFNT0RTX0VOX0hETUkpOwpAQCAtMTMyMyw4ICsxMzU0LDkgQEAKIAlpZiAoY2xpZW50LT5pcnEpIHsKIAkJaW50IGlycWZfdHJpZ2dlcjsKIAotCQkvKiBpbml0IHJlYWQgRURJRCB3YWl0cXVldWUgKi8KKwkJLyogaW5pdCByZWFkIEVESUQgd2FpdHF1ZXVlIGFuZCBIRFAgd29yayAqLwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT53cV9lZGlkKTsKKwkJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmR3b3JrLCB0ZGE5OTh4X2hwZCk7CiAKIAkJLyogY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovCiAJCXJlZ19yZWFkKHByaXYsIFJFR19JTlRfRkxBR1NfMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCBlY2VlM2JjLi4yNmIzMTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTgzMCw2ICs4MzAsOCBAQAogCiAJaW50ZWxfcnVudGltZV9wbV9lbmFibGUoZGV2X3ByaXYpOwogCisJaTkxNV9hdWRpb19jb21wb25lbnRfaW5pdChkZXZfcHJpdik7CisKIAlyZXR1cm4gMDsKIAogb3V0X3Bvd2VyX3dlbGw6CkBAIC04NzAsNiArODcyLDggQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWludCByZXQ7CiAKKwlpOTE1X2F1ZGlvX2NvbXBvbmVudF9jbGVhbnVwKGRldl9wcml2KTsKKwogCXJldCA9IGk5MTVfZ2VtX3N1c3BlbmQoZGV2KTsKIAlpZiAocmV0KSB7CiAJCURSTV9FUlJPUigiZmFpbGVkIHRvIGlkbGUgaGFyZHdhcmU6ICVkXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggNTc0MDU3Yy4uNDg5YjIyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC00NjIsMTkgKzQ2MiwxMyBAQAogCQkJfSBlbHNlIGlmIChpZCA9PSBJTlRFTF9QQ0hfTFBUX0RFVklDRV9JRF9UWVBFKSB7CiAJCQkJZGV2X3ByaXYtPnBjaF90eXBlID0gUENIX0xQVDsKIAkJCQlEUk1fREVCVUdfS01TKCJGb3VuZCBMeW54UG9pbnQgUENIXG4iKTsKLQkJCQlXQVJOX09OKCFJU19IQVNXRUxMKGRldikpOwotCQkJCVdBUk5fT04oSVNfSFNXX1VMVChkZXYpKTsKLQkJCX0gZWxzZSBpZiAoSVNfQlJPQURXRUxMKGRldikpIHsKLQkJCQlkZXZfcHJpdi0+cGNoX3R5cGUgPSBQQ0hfTFBUOwotCQkJCWRldl9wcml2LT5wY2hfaWQgPQotCQkJCQlJTlRFTF9QQ0hfTFBUX0xQX0RFVklDRV9JRF9UWVBFOwotCQkJCURSTV9ERUJVR19LTVMoIlRoaXMgaXMgQnJvYWR3ZWxsLCBhc3N1bWluZyAiCi0JCQkJCSAgICAgICJMeW54UG9pbnQgTFAgUENIXG4iKTsKKwkJCQlXQVJOX09OKCFJU19IQVNXRUxMKGRldikgJiYgIUlTX0JST0FEV0VMTChkZXYpKTsKKwkJCQlXQVJOX09OKElTX0hTV19VTFQoZGV2KSB8fCBJU19CRFdfVUxUKGRldikpOwogCQkJfSBlbHNlIGlmIChpZCA9PSBJTlRFTF9QQ0hfTFBUX0xQX0RFVklDRV9JRF9UWVBFKSB7CiAJCQkJZGV2X3ByaXYtPnBjaF90eXBlID0gUENIX0xQVDsKIAkJCQlEUk1fREVCVUdfS01TKCJGb3VuZCBMeW54UG9pbnQgTFAgUENIXG4iKTsKLQkJCQlXQVJOX09OKCFJU19IQVNXRUxMKGRldikpOwotCQkJCVdBUk5fT04oIUlTX0hTV19VTFQoZGV2KSk7CisJCQkJV0FSTl9PTighSVNfSEFTV0VMTChkZXYpICYmICFJU19CUk9BRFdFTEwoZGV2KSk7CisJCQkJV0FSTl9PTighSVNfSFNXX1VMVChkZXYpICYmICFJU19CRFdfVUxUKGRldikpOwogCQkJfSBlbHNlIGlmIChpZCA9PSBJTlRFTF9QQ0hfU1BUX0RFVklDRV9JRF9UWVBFKSB7CiAJCQkJZGV2X3ByaXYtPnBjaF90eXBlID0gUENIX1NQVDsKIAkJCQlEUk1fREVCVUdfS01TKCJGb3VuZCBTdW5yaXNlUG9pbnQgUENIXG4iKTsKQEAgLTk0MCw4ICs5MzQsNyBAQAogCiBzdGF0aWMgaW50IGk5MTVfcG1fc3VzcGVuZF9sYXRlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZHJtX2RldiA9IGRldl90b19pOTE1KGRldiktPmRldjsKIAogCS8qCiAJICogV2UgaGF2ZSBhIHN1c3BlZG4gb3JkZXJpbmcgaXNzdWUgd2l0aCB0aGUgc25kLWhkYSBkcml2ZXIgYWxzbwpAQCAtOTYwLDggKzk1Myw3IEBACiAKIHN0YXRpYyBpbnQgaTkxNV9wbV9yZXN1bWVfZWFybHkoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZGV2X3RvX2k5MTUoZGV2KS0+ZGV2OwogCiAJaWYgKGRybV9kZXYtPnN3aXRjaF9wb3dlcl9zdGF0ZSA9PSBEUk1fU1dJVENIX1BPV0VSX09GRikKIAkJcmV0dXJuIDA7CkBAIC05NzEsOCArOTYzLDcgQEAKIAogc3RhdGljIGludCBpOTE1X3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRybV9kZXZpY2UgKmRybV9kZXYgPSBkZXZfdG9faTkxNShkZXYpLT5kZXY7CiAKIAlpZiAoZHJtX2Rldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID09IERSTV9TV0lUQ0hfUE9XRVJfT0ZGKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCmluZGV4IGU5Zjg5MWMuLjI0Y2MzNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaApAQCAtMTY5OCw2ICsxNjk4LDkgQEAKIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpicm9hZGNhc3RfcmdiX3Byb3BlcnR5OwogCXN0cnVjdCBkcm1fcHJvcGVydHkgKmZvcmNlX2F1ZGlvX3Byb3BlcnR5OwogCisJLyogaGRhL2k5MTUgYXVkaW8gY29tcG9uZW50ICovCisJYm9vbCBhdWRpb19jb21wb25lbnRfcmVnaXN0ZXJlZDsKKwogCXVpbnQzMl90IGh3X2NvbnRleHRfc2l6ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNvbnRleHRfbGlzdDsKIApAQCAtMTc4MSw2ICsxNzg0LDExIEBACiAJcmV0dXJuIGRldi0+ZGV2X3ByaXZhdGU7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl90b19pOTE1KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gdG9faTkxNShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7Cit9CisKIC8qIEl0ZXJhdGUgb3ZlciBpbml0aWFsaXNlZCByaW5ncyAqLwogI2RlZmluZSBmb3JfZWFjaF9yaW5nKHJpbmdfXywgZGV2X3ByaXZfXywgaV9fKSBcCiAJZm9yICgoaV9fKSA9IDA7IChpX18pIDwgSTkxNV9OVU1fUklOR1M7IChpX18pKyspIFwKQEAgLTIxNTksOCArMjE2Nyw3IEBACiAjZGVmaW5lIElTX0hTV19FQVJMWV9TRFYoZGV2KQkoSVNfSEFTV0VMTChkZXYpICYmIFwKIAkJCQkgKElOVEVMX0RFVklEKGRldikgJiAweEZGMDApID09IDB4MEMwMCkKICNkZWZpbmUgSVNfQkRXX1VMVChkZXYpCQkoSVNfQlJPQURXRUxMKGRldikgJiYgXAotCQkJCSAoKElOVEVMX0RFVklEKGRldikgJiAweGYpID09IDB4MiAgfHwgXAotCQkJCSAoSU5URUxfREVWSUQoZGV2KSAmIDB4ZikgPT0gMHg2IHx8IFwKKwkJCQkgKChJTlRFTF9ERVZJRChkZXYpICYgMHhmKSA9PSAweDYgfHwJXAogCQkJCSAoSU5URUxfREVWSUQoZGV2KSAmIDB4ZikgPT0gMHhlKSkKICNkZWZpbmUgSVNfQkRXX0dUMyhkZXYpCQkoSVNfQlJPQURXRUxMKGRldikgJiYgXAogCQkJCSAoSU5URUxfREVWSUQoZGV2KSAmIDB4MDBGMCkgPT0gMHgwMDIwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggNzYzNTRkMy4uNWY2MTQ4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0zMTQ4LDYgKzMxNDgsMTMgQEAKIAkJdTMyIHNpemUgPSBpOTE1X2dlbV9vYmpfZ2d0dF9zaXplKG9iaik7CiAJCXVpbnQ2NF90IHZhbDsKIAorCQkvKiBBZGp1c3QgZmVuY2Ugc2l6ZSB0byBtYXRjaCB0aWxlZCBhcmVhICovCisJCWlmIChvYmotPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX05PTkUpIHsKKwkJCXVpbnQzMl90IHJvd19zaXplID0gb2JqLT5zdHJpZGUgKgorCQkJCShvYmotPnRpbGluZ19tb2RlID09IEk5MTVfVElMSU5HX1kgPyAzMiA6IDgpOworCQkJc2l6ZSA9IChzaXplIC8gcm93X3NpemUpICogcm93X3NpemU7CisJCX0KKwogCQl2YWwgPSAodWludDY0X3QpKChpOTE1X2dlbV9vYmpfZ2d0dF9vZmZzZXQob2JqKSArIHNpemUgLSA0MDk2KSAmCiAJCQkJIDB4ZmZmZmYwMDApIDw8IDMyOwogCQl2YWwgfD0gaTkxNV9nZW1fb2JqX2dndHRfb2Zmc2V0KG9iaikgJiAweGZmZmZmMDAwOwpAQCAtNDg4NCwxMyArNDg5MSwxMiBAQAogCWZvciAoaSA9IDA7IGkgPCBOVU1fTDNfU0xJQ0VTKGRldik7IGkrKykKIAkJaTkxNV9nZW1fbDNfcmVtYXAoJmRldl9wcml2LT5yaW5nW1JDU10sIGkpOwogCi0JLyoKLQkgKiBYWFg6IENvbnRleHRzIHNob3VsZCBvbmx5IGJlIGluaXRpYWxpemVkIG9uY2UuIERvaW5nIGEgc3dpdGNoIHRvIHRoZQotCSAqIGRlZmF1bHQgY29udGV4dCBzd2l0Y2ggaG93ZXZlciBpcyBzb21ldGhpbmcgd2UnZCBsaWtlIHRvIGRvIGFmdGVyCi0JICogcmVzZXQgb3IgdGhhdyAodGhlIGxhdHRlciBtYXkgbm90IGFjdHVhbGx5IGJlIG5lY2Vzc2FyeSBmb3IgSFcsIGJ1dAotCSAqIGdvZXMgd2l0aCBvdXIgY29kZSBiZXR0ZXIpLiBDb250ZXh0IHN3aXRjaGluZyByZXF1aXJlcyByaW5ncyAoZm9yCi0JICogdGhlIGRvX3N3aXRjaCksIGJ1dCBiZWZvcmUgZW5hYmxpbmcgUFBHVFQuIFNvIGRvbid0IG1vdmUgdGhpcy4KLQkgKi8KKwlyZXQgPSBpOTE1X3BwZ3R0X2luaXRfaHcoZGV2KTsKKwlpZiAocmV0ICYmIHJldCAhPSAtRUlPKSB7CisJCURSTV9FUlJPUigiUFBHVFQgZW5hYmxlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKGRldik7CisJfQorCiAJcmV0ID0gaTkxNV9nZW1fY29udGV4dF9lbmFibGUoZGV2X3ByaXYpOwogCWlmIChyZXQgJiYgcmV0ICE9IC1FSU8pIHsKIAkJRFJNX0VSUk9SKCJDb250ZXh0IGVuYWJsZSBmYWlsZWQgJWRcbiIsIHJldCk7CkBAIC00ODk5LDEyICs0OTA1LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBpOTE1X3BwZ3R0X2luaXRfaHcoZGV2KTsKLQlpZiAocmV0ICYmIHJldCAhPSAtRUlPKSB7Ci0JCURSTV9FUlJPUigiUFBHVFQgZW5hYmxlIGZhaWxlZCAlZFxuIiwgcmV0KTsKLQkJaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKGRldik7Ci0JfQotCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXVkaW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F1ZGlvLmMKaW5kZXggMmM3ZWQ1Yy4uZWU0MWI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYXVkaW8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdWRpby5jCkBAIC0yMiw2ICsyMiw5IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBvbmVudC5oPgorI2luY2x1ZGUgPGRybS9pOTE1X2NvbXBvbmVudC5oPgorI2luY2x1ZGUgImludGVsX2Rydi5oIgogCiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4KQEAgLTQ2MSwzICs0NjQsMTEwIEBACiAJCWRldl9wcml2LT5kaXNwbGF5LmF1ZGlvX2NvZGVjX2Rpc2FibGUgPSBpbGtfYXVkaW9fY29kZWNfZGlzYWJsZTsKIAl9CiB9CisKK3N0YXRpYyB2b2lkIGk5MTVfYXVkaW9fY29tcG9uZW50X2dldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50ZWxfZGlzcGxheV9wb3dlcl9nZXQoZGV2X3RvX2k5MTUoZGV2KSwgUE9XRVJfRE9NQUlOX0FVRElPKTsKK30KKworc3RhdGljIHZvaWQgaTkxNV9hdWRpb19jb21wb25lbnRfcHV0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnRlbF9kaXNwbGF5X3Bvd2VyX3B1dChkZXZfdG9faTkxNShkZXYpLCBQT1dFUl9ET01BSU5fQVVESU8pOworfQorCisvKiBHZXQgQ0RDTEsgaW4ga0h6ICAqLworc3RhdGljIGludCBpOTE1X2F1ZGlvX2NvbXBvbmVudF9nZXRfY2RjbGtfZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2X3RvX2k5MTUoZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKFdBUk5fT05fT05DRSghSEFTX0RESShkZXZfcHJpdikpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWludGVsX2Rpc3BsYXlfcG93ZXJfZ2V0KGRldl9wcml2LCBQT1dFUl9ET01BSU5fQVVESU8pOworCXJldCA9IGludGVsX2RkaV9nZXRfY2RjbGtfZnJlcShkZXZfcHJpdik7CisJaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9BVURJTyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGk5MTVfYXVkaW9fY29tcG9uZW50X29wcyBpOTE1X2F1ZGlvX2NvbXBvbmVudF9vcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5nZXRfcG93ZXIJPSBpOTE1X2F1ZGlvX2NvbXBvbmVudF9nZXRfcG93ZXIsCisJLnB1dF9wb3dlcgk9IGk5MTVfYXVkaW9fY29tcG9uZW50X3B1dF9wb3dlciwKKwkuZ2V0X2NkY2xrX2ZyZXEJPSBpOTE1X2F1ZGlvX2NvbXBvbmVudF9nZXRfY2RjbGtfZnJlcSwKK307CisKK3N0YXRpYyBpbnQgaTkxNV9hdWRpb19jb21wb25lbnRfYmluZChzdHJ1Y3QgZGV2aWNlICppOTE1X2RldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2UgKmhkYV9kZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGk5MTVfYXVkaW9fY29tcG9uZW50ICphY29tcCA9IGRhdGE7CisKKwlpZiAoV0FSTl9PTihhY29tcC0+b3BzIHx8IGFjb21wLT5kZXYpKQorCQlyZXR1cm4gLUVFWElTVDsKKworCWFjb21wLT5vcHMgPSAmaTkxNV9hdWRpb19jb21wb25lbnRfb3BzOworCWFjb21wLT5kZXYgPSBpOTE1X2RldjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpOTE1X2F1ZGlvX2NvbXBvbmVudF91bmJpbmQoc3RydWN0IGRldmljZSAqaTkxNV9kZXYsCisJCQkJCXN0cnVjdCBkZXZpY2UgKmhkYV9kZXYsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGk5MTVfYXVkaW9fY29tcG9uZW50ICphY29tcCA9IGRhdGE7CisKKwlhY29tcC0+b3BzID0gTlVMTDsKKwlhY29tcC0+ZGV2ID0gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfb3BzIGk5MTVfYXVkaW9fY29tcG9uZW50X2JpbmRfb3BzID0geworCS5iaW5kCT0gaTkxNV9hdWRpb19jb21wb25lbnRfYmluZCwKKwkudW5iaW5kCT0gaTkxNV9hdWRpb19jb21wb25lbnRfdW5iaW5kLAorfTsKKworLyoqCisgKiBpOTE1X2F1ZGlvX2NvbXBvbmVudF9pbml0IC0gaW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgdGhlIGF1ZGlvIGNvbXBvbmVudAorICogQGRldl9wcml2OiBpOTE1IGRldmljZSBpbnN0YW5jZQorICoKKyAqIFRoaXMgd2lsbCByZWdpc3RlciB3aXRoIHRoZSBjb21wb25lbnQgZnJhbWV3b3JrIGEgY2hpbGQgY29tcG9uZW50IHdoaWNoCisgKiB3aWxsIGJpbmQgZHluYW1pY2FsbHkgdG8gdGhlIHNuZF9oZGFfaW50ZWwgZHJpdmVyJ3MgY29ycmVzcG9uZGluZyBtYXN0ZXIKKyAqIGNvbXBvbmVudCB3aGVuIHRoZSBsYXR0ZXIgaXMgcmVnaXN0ZXJlZC4gRHVyaW5nIGJpbmRpbmcgdGhlIGNoaWxkCisgKiBpbml0aWFsaXplcyBhbiBpbnN0YW5jZSBvZiBzdHJ1Y3QgaTkxNV9hdWRpb19jb21wb25lbnQgd2hpY2ggaXQgcmVjZWl2ZXMKKyAqIGZyb20gdGhlIG1hc3Rlci4gVGhlIG1hc3RlciBjYW4gdGhlbiBzdGFydCB0byB1c2UgdGhlIGludGVyZmFjZSBkZWZpbmVkIGJ5CisgKiB0aGlzIHN0cnVjdC4gRWFjaCBzaWRlIGNhbiBicmVhayB0aGUgYmluZGluZyBhdCBhbnkgcG9pbnQgYnkgZGVyZWdpc3RlcmluZworICogaXRzIG93biBjb21wb25lbnQgYWZ0ZXIgd2hpY2ggZWFjaCBzaWRlJ3MgY29tcG9uZW50IHVuYmluZCBjYWxsYmFjayBpcworICogY2FsbGVkLgorICoKKyAqIFdlIGlnbm9yZSBhbnkgZXJyb3IgZHVyaW5nIHJlZ2lzdHJhdGlvbiBhbmQgY29udGludWUgd2l0aCByZWR1Y2VkCisgKiBmdW5jdGlvbmFsaXR5IChpLmUuIHdpdGhvdXQgSERNSSBhdWRpbykuCisgKi8KK3ZvaWQgaTkxNV9hdWRpb19jb21wb25lbnRfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50IHJldDsKKworCXJldCA9IGNvbXBvbmVudF9hZGQoZGV2X3ByaXYtPmRldi0+ZGV2LCAmaTkxNV9hdWRpb19jb21wb25lbnRfYmluZF9vcHMpOworCWlmIChyZXQgPCAwKSB7CisJCURSTV9FUlJPUigiZmFpbGVkIHRvIGFkZCBhdWRpbyBjb21wb25lbnQgKCVkKVxuIiwgcmV0KTsKKwkJLyogY29udGludWUgd2l0aCByZWR1Y2VkIGZ1bmN0aW9uYWxpdHkgKi8KKwkJcmV0dXJuOworCX0KKworCWRldl9wcml2LT5hdWRpb19jb21wb25lbnRfcmVnaXN0ZXJlZCA9IHRydWU7Cit9CisKKy8qKgorICogaTkxNV9hdWRpb19jb21wb25lbnRfY2xlYW51cCAtIGRlcmVnaXN0ZXIgdGhlIGF1ZGlvIGNvbXBvbmVudAorICogQGRldl9wcml2OiBpOTE1IGRldmljZSBpbnN0YW5jZQorICoKKyAqIERlcmVnaXN0ZXJzIHRoZSBhdWRpbyBjb21wb25lbnQsIGJyZWFraW5nIGFueSBleGlzdGluZyBiaW5kaW5nIHRvIHRoZQorICogY29ycmVzcG9uZGluZyBzbmRfaGRhX2ludGVsIGRyaXZlcidzIG1hc3RlciBjb21wb25lbnQuCisgKi8KK3ZvaWQgaTkxNV9hdWRpb19jb21wb25lbnRfY2xlYW51cChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaWYgKCFkZXZfcHJpdi0+YXVkaW9fY29tcG9uZW50X3JlZ2lzdGVyZWQpCisJCXJldHVybjsKKworCWNvbXBvbmVudF9kZWwoZGV2X3ByaXYtPmRldi0+ZGV2LCAmaTkxNV9hdWRpb19jb21wb25lbnRfYmluZF9vcHMpOworCWRldl9wcml2LT5hdWRpb19jb21wb25lbnRfcmVnaXN0ZXJlZCA9IGZhbHNlOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCAzYjQwYTE3Li4yOWJhOTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtODczLDYgKzg3Myw4IEBACiB2b2lkIGludGVsX2luaXRfYXVkaW8oc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiB2b2lkIGludGVsX2F1ZGlvX2NvZGVjX2VuYWJsZShzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqZW5jb2Rlcik7CiB2b2lkIGludGVsX2F1ZGlvX2NvZGVjX2Rpc2FibGUoc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXIpOwordm9pZCBpOTE1X2F1ZGlvX2NvbXBvbmVudF9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cit2b2lkIGk5MTVfYXVkaW9fY29tcG9uZW50X2NsZWFudXAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKIAogLyogaW50ZWxfZGlzcGxheS5jICovCiBjb25zdCBjaGFyICppbnRlbF9vdXRwdXRfbmFtZShpbnQgb3V0cHV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jCmluZGV4IDRkNjM4MzkuLmRmYjc4M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYwpAQCAtOTYyLDcgKzk2Miw3IEBACiAKIAlXQVJOX09OKHBhbmVsLT5iYWNrbGlnaHQubWF4ID09IDApOwogCi0JaWYgKHBhbmVsLT5iYWNrbGlnaHQubGV2ZWwgPT0gMCkgeworCWlmIChwYW5lbC0+YmFja2xpZ2h0LmxldmVsIDw9IHBhbmVsLT5iYWNrbGlnaHQubWluKSB7CiAJCXBhbmVsLT5iYWNrbGlnaHQubGV2ZWwgPSBwYW5lbC0+YmFja2xpZ2h0Lm1heDsKIAkJaWYgKHBhbmVsLT5iYWNrbGlnaHQuZGV2aWNlKQogCQkJcGFuZWwtPmJhY2tsaWdodC5kZXZpY2UtPnByb3BzLmJyaWdodG5lc3MgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcnVudGltZV9wbS5jCmluZGV4IGFjNmRhNzEuLjM5ZGRmNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3J1bnRpbWVfcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ydW50aW1lX3BtLmMKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgImk5MTVfZHJ2LmgiCiAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCi0jaW5jbHVkZSA8ZHJtL2k5MTVfcG93ZXJ3ZWxsLmg+CiAKIC8qKgogICogRE9DOiBydW50aW1lIHBtCkBAIC01MCw4ICs0OSw2IEBACiAgKiBwcmVzZW50IGZvciBhIGdpdmVuIHBsYXRmb3JtLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTkxNV9wb3dlcl9kb21haW5zICpoc3dfcHdyOwotCiAjZGVmaW5lIGZvcl9lYWNoX3Bvd2VyX3dlbGwoaSwgcG93ZXJfd2VsbCwgZG9tYWluX21hc2ssIHBvd2VyX2RvbWFpbnMpCVwKIAlmb3IgKGkgPSAwOwkJCQkJCQlcCiAJICAgICBpIDwgKHBvd2VyX2RvbWFpbnMpLT5wb3dlcl93ZWxsX2NvdW50ICYmCQkJXApAQCAtMTA3MSwxMCArMTA2OCw4IEBACiAJICovCiAJaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYtPmRldikpIHsKIAkJc2V0X3Bvd2VyX3dlbGxzKHBvd2VyX2RvbWFpbnMsIGhzd19wb3dlcl93ZWxscyk7Ci0JCWhzd19wd3IgPSBwb3dlcl9kb21haW5zOwogCX0gZWxzZSBpZiAoSVNfQlJPQURXRUxMKGRldl9wcml2LT5kZXYpKSB7CiAJCXNldF9wb3dlcl93ZWxscyhwb3dlcl9kb21haW5zLCBiZHdfcG93ZXJfd2VsbHMpOwotCQloc3dfcHdyID0gcG93ZXJfZG9tYWluczsKIAl9IGVsc2UgaWYgKElTX0NIRVJSWVZJRVcoZGV2X3ByaXYtPmRldikpIHsKIAkJc2V0X3Bvd2VyX3dlbGxzKHBvd2VyX2RvbWFpbnMsIGNodl9wb3dlcl93ZWxscyk7CiAJfSBlbHNlIGlmIChJU19WQUxMRVlWSUVXKGRldl9wcml2LT5kZXYpKSB7CkBAIC0xMTE4LDggKzExMTMsNiBAQAogCSAqIHRoZSBwb3dlciB3ZWxsIGlzIG5vdCBlbmFibGVkLCBzbyBqdXN0IGVuYWJsZSBpdCBpbiBjYXNlCiAJICogd2UncmUgZ29pbmcgdG8gdW5sb2FkL3JlbG9hZC4gKi8KIAlpbnRlbF9kaXNwbGF5X3NldF9pbml0X3Bvd2VyKGRldl9wcml2LCB0cnVlKTsKLQotCWhzd19wd3IgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBpbnRlbF9wb3dlcl9kb21haW5zX3Jlc3VtZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCkBAIC0xMzI4LDUyICsxMzIxLDMgQEAKIAlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChkZXZpY2UpOwogfQogCi0vKiBEaXNwbGF5IGF1ZGlvIGRyaXZlciBwb3dlciB3ZWxsIHJlcXVlc3QgKi8KLWludCBpOTE1X3JlcXVlc3RfcG93ZXJfd2VsbCh2b2lkKQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdjsKLQotCWlmICghaHN3X3B3cikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlkZXZfcHJpdiA9IGNvbnRhaW5lcl9vZihoc3dfcHdyLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwKLQkJCQlwb3dlcl9kb21haW5zKTsKLQlpbnRlbF9kaXNwbGF5X3Bvd2VyX2dldChkZXZfcHJpdiwgUE9XRVJfRE9NQUlOX0FVRElPKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGk5MTVfcmVxdWVzdF9wb3dlcl93ZWxsKTsKLQotLyogRGlzcGxheSBhdWRpbyBkcml2ZXIgcG93ZXIgd2VsbCByZWxlYXNlICovCi1pbnQgaTkxNV9yZWxlYXNlX3Bvd2VyX3dlbGwodm9pZCkKLXsKLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXY7Ci0KLQlpZiAoIWhzd19wd3IpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGV2X3ByaXYgPSBjb250YWluZXJfb2YoaHN3X3B3ciwgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUsCi0JCQkJcG93ZXJfZG9tYWlucyk7Ci0JaW50ZWxfZGlzcGxheV9wb3dlcl9wdXQoZGV2X3ByaXYsIFBPV0VSX0RPTUFJTl9BVURJTyk7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpOTE1X3JlbGVhc2VfcG93ZXJfd2VsbCk7Ci0KLS8qCi0gKiBQcml2YXRlIGludGVyZmFjZSBmb3IgdGhlIGF1ZGlvIGRyaXZlciB0byBnZXQgQ0RDTEsgaW4ga0h6LgotICoKLSAqIENhbGxlciBtdXN0IHJlcXVlc3QgcG93ZXIgd2VsbCB1c2luZyBpOTE1X3JlcXVlc3RfcG93ZXJfd2VsbCgpIHByaW9yIHRvCi0gKiBtYWtpbmcgdGhlIGNhbGwuCi0gKi8KLWludCBpOTE1X2dldF9jZGNsa19mcmVxKHZvaWQpCi17Ci0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2OwotCi0JaWYgKCFoc3dfcHdyKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRldl9wcml2ID0gY29udGFpbmVyX29mKGhzd19wd3IsIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlLAotCQkJCXBvd2VyX2RvbWFpbnMpOwotCi0JcmV0dXJuIGludGVsX2RkaV9nZXRfY2RjbGtfZnJlcShkZXZfcHJpdik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpOTE1X2dldF9jZGNsa19mcmVxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrX3NkbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vY2lrX3NkbWEuYwppbmRleCBhMDEzM2M3Li40MmNkMGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2Npa19zZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9jaWtfc2RtYS5jCkBAIC04MTYsNyArODE2LDYgQEAKIAkJZm9yICg7IG5kdyA+IDA7IG5kdyAtPSAyLCAtLWNvdW50LCBwZSArPSA4KSB7CiAJCQlpZiAoZmxhZ3MgJiBSNjAwX1BURV9TWVNURU0pIHsKIAkJCQl2YWx1ZSA9IHJhZGVvbl92bV9tYXBfZ2FydChyZGV2LCBhZGRyKTsKLQkJCQl2YWx1ZSAmPSAweEZGRkZGRkZGRkZGRkYwMDBVTEw7CiAJCQl9IGVsc2UgaWYgKGZsYWdzICYgUjYwMF9QVEVfVkFMSUQpIHsKIAkJCQl2YWx1ZSA9IGFkZHI7CiAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmlfZG1hLmMKaW5kZXggNGJlMmJiNy4uY2U3ODdhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pX2RtYS5jCkBAIC0zNzIsNyArMzcyLDYgQEAKIAkJZm9yICg7IG5kdyA+IDA7IG5kdyAtPSAyLCAtLWNvdW50LCBwZSArPSA4KSB7CiAJCQlpZiAoZmxhZ3MgJiBSNjAwX1BURV9TWVNURU0pIHsKIAkJCQl2YWx1ZSA9IHJhZGVvbl92bV9tYXBfZ2FydChyZGV2LCBhZGRyKTsKLQkJCQl2YWx1ZSAmPSAweEZGRkZGRkZGRkZGRkYwMDBVTEw7CiAJCQl9IGVsc2UgaWYgKGZsYWdzICYgUjYwMF9QVEVfVkFMSUQpIHsKIAkJCQl2YWx1ZSA9IGFkZHI7CiAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwppbmRleCA3NGYwNmQ1Li4yNzk4MDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYwpAQCAtNjQ0LDYgKzY0NCw3IEBACiAJCXJldHVybiByOwogCXJkZXYtPmdhcnQudGFibGVfc2l6ZSA9IHJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyAqIDQ7CiAJcmRldi0+YXNpYy0+Z2FydC50bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2g7CisJcmRldi0+YXNpYy0+Z2FydC5nZXRfcGFnZV9lbnRyeSA9ICZyMTAwX3BjaV9nYXJ0X2dldF9wYWdlX2VudHJ5OwogCXJkZXYtPmFzaWMtPmdhcnQuc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZTsKIAlyZXR1cm4gcmFkZW9uX2dhcnRfdGFibGVfcmFtX2FsbG9jKHJkZXYpOwogfQpAQCAtNjgxLDExICs2ODIsMTYgQEAKIAlXUkVHMzIoUkFERU9OX0FJQ19ISV9BRERSLCAwKTsKIH0KIAordWludDY0X3QgcjEwMF9wY2lfZ2FydF9nZXRfcGFnZV9lbnRyeSh1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncykKK3sKKwlyZXR1cm4gYWRkcjsKK30KKwogdm9pZCByMTAwX3BjaV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCBpLAotCQkJICAgIHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKQorCQkJICAgIHVpbnQ2NF90IGVudHJ5KQogewogCXUzMiAqZ3R0ID0gcmRldi0+Z2FydC5wdHI7Ci0JZ3R0W2ldID0gY3B1X3RvX2xlMzIobG93ZXJfMzJfYml0cyhhZGRyKSk7CisJZ3R0W2ldID0gY3B1X3RvX2xlMzIobG93ZXJfMzJfYml0cyhlbnRyeSkpOwogfQogCiB2b2lkIHIxMDBfcGNpX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKaW5kZXggMDY0YWQ1NS4uMDhkNjhmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKQEAgLTczLDExICs3Myw4IEBACiAjZGVmaW5lIFIzMDBfUFRFX1dSSVRFQUJMRSAoMSA8PCAyKQogI2RlZmluZSBSMzAwX1BURV9SRUFEQUJMRSAgKDEgPDwgMykKIAotdm9pZCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIGksCi0JCQkgICAgICB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncykKK3VpbnQ2NF90IHJ2MzcwX3BjaWVfZ2FydF9nZXRfcGFnZV9lbnRyeSh1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncykKIHsKLQl2b2lkIF9faW9tZW0gKnB0ciA9IHJkZXYtPmdhcnQucHRyOwotCiAJYWRkciA9IChsb3dlcl8zMl9iaXRzKGFkZHIpID4+IDgpIHwKIAkJKCh1cHBlcl8zMl9iaXRzKGFkZHIpICYgMHhmZikgPDwgMjQpOwogCWlmIChmbGFncyAmIFJBREVPTl9HQVJUX1BBR0VfUkVBRCkKQEAgLTg2LDEwICs4MywxOCBAQAogCQlhZGRyIHw9IFIzMDBfUFRFX1dSSVRFQUJMRTsKIAlpZiAoIShmbGFncyAmIFJBREVPTl9HQVJUX1BBR0VfU05PT1ApKQogCQlhZGRyIHw9IFIzMDBfUFRFX1VOU05PT1BFRDsKKwlyZXR1cm4gYWRkcjsKK30KKwordm9pZCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIGksCisJCQkgICAgICB1aW50NjRfdCBlbnRyeSkKK3sKKwl2b2lkIF9faW9tZW0gKnB0ciA9IHJkZXYtPmdhcnQucHRyOworCiAJLyogb24geDg2IHdlIHdhbnQgdGhpcyB0byBiZSBDUFUgZW5kaWFuLCBvbiBwb3dlcnBjCiAJICogb24gcG93ZXJwYyB3aXRob3V0IEhXIHN3YXBwZXJzLCBpdCdsbCBnZXQgc3dhcHBlZCBvbiB3YXkKIAkgKiBpbnRvIFZSQU0gLSBzbyBubyBuZWVkIGZvciBjcHVfdG9fbGUzMiBvbiBWUkFNIHRhYmxlcyAqLwotCXdyaXRlbChhZGRyLCAoKHZvaWQgX19pb21lbSAqKXB0cikgKyAoaSAqIDQpKTsKKwl3cml0ZWwoZW50cnksICgodm9pZCBfX2lvbWVtICopcHRyKSArIChpICogNCkpOwogfQogCiBpbnQgcnYzNzBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCkBAIC0xMDksNiArMTE0LDcgQEAKIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVnaXN0ZXIgZGVidWdmcyBmaWxlIGZvciBQQ0lFIGdhcnQgIVxuIik7CiAJcmRldi0+Z2FydC50YWJsZV9zaXplID0gcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzICogNDsKIAlyZGV2LT5hc2ljLT5nYXJ0LnRsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoOworCXJkZXYtPmFzaWMtPmdhcnQuZ2V0X3BhZ2VfZW50cnkgPSAmcnYzNzBfcGNpZV9nYXJ0X2dldF9wYWdlX2VudHJ5OwogCXJkZXYtPmFzaWMtPmdhcnQuc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlOwogCXJldHVybiByYWRlb25fZ2FydF90YWJsZV92cmFtX2FsbG9jKHJkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKaW5kZXggNTQ1MjliOC4uM2YyYThkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC0yNDIsNiArMjQyLDcgQEAKICAqIER1bW15IHBhZ2UKICAqLwogc3RydWN0IHJhZGVvbl9kdW1teV9wYWdlIHsKKwl1aW50NjRfdAllbnRyeTsKIAlzdHJ1Y3QgcGFnZQkqcGFnZTsKIAlkbWFfYWRkcl90CWFkZHI7CiB9OwpAQCAtNjQ1LDcgKzY0Niw3IEBACiAJdW5zaWduZWQJCQludW1fY3B1X3BhZ2VzOwogCXVuc2lnbmVkCQkJdGFibGVfc2l6ZTsKIAlzdHJ1Y3QgcGFnZQkJCSoqcGFnZXM7Ci0JZG1hX2FkZHJfdAkJCSpwYWdlc19hZGRyOworCXVpbnQ2NF90CQkJKnBhZ2VzX2VudHJ5OwogCWJvb2wJCQkJcmVhZHk7CiB9OwogCkBAIC0xODQ3LDggKzE4NDgsOSBAQAogCS8qIGdhcnQgKi8KIAlzdHJ1Y3QgewogCQl2b2lkICgqdGxiX2ZsdXNoKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisJCXVpbnQ2NF90ICgqZ2V0X3BhZ2VfZW50cnkpKHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKTsKIAkJdm9pZCAoKnNldF9wYWdlKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgaSwKLQkJCQkgdWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpOworCQkJCSB1aW50NjRfdCBlbnRyeSk7CiAJfSBnYXJ0OwogCXN0cnVjdCB7CiAJCWludCAoKmluaXQpKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTI4NTIsNyArMjg1NCw4IEBACiAjZGVmaW5lIHJhZGVvbl92Z2Ffc2V0X3N0YXRlKHJkZXYsIHN0YXRlKSAocmRldiktPmFzaWMtPnZnYV9zZXRfc3RhdGUoKHJkZXYpLCAoc3RhdGUpKQogI2RlZmluZSByYWRlb25fYXNpY19yZXNldChyZGV2KSAocmRldiktPmFzaWMtPmFzaWNfcmVzZXQoKHJkZXYpKQogI2RlZmluZSByYWRlb25fZ2FydF90bGJfZmx1c2gocmRldikgKHJkZXYpLT5hc2ljLT5nYXJ0LnRsYl9mbHVzaCgocmRldikpCi0jZGVmaW5lIHJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIGksIHAsIGYpIChyZGV2KS0+YXNpYy0+Z2FydC5zZXRfcGFnZSgocmRldiksIChpKSwgKHApLCAoZikpCisjZGVmaW5lIHJhZGVvbl9nYXJ0X2dldF9wYWdlX2VudHJ5KGEsIGYpIChyZGV2KS0+YXNpYy0+Z2FydC5nZXRfcGFnZV9lbnRyeSgoYSksIChmKSkKKyNkZWZpbmUgcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgaSwgZSkgKHJkZXYpLT5hc2ljLT5nYXJ0LnNldF9wYWdlKChyZGV2KSwgKGkpLCAoZSkpCiAjZGVmaW5lIHJhZGVvbl9hc2ljX3ZtX2luaXQocmRldikgKHJkZXYpLT5hc2ljLT52bS5pbml0KChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX2FzaWNfdm1fZmluaShyZGV2KSAocmRldiktPmFzaWMtPnZtLmZpbmkoKHJkZXYpKQogI2RlZmluZSByYWRlb25fYXNpY192bV9jb3B5X3BhZ2VzKHJkZXYsIGliLCBwZSwgc3JjLCBjb3VudCkgKChyZGV2KS0+YXNpYy0+dm0uY29weV9wYWdlcygocmRldiksIChpYiksIChwZSksIChzcmMpLCAoY291bnQpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYwppbmRleCAxMjFhZmY2Li5lZDBlMTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCkBAIC0xNTksMTEgKzE1OSwxMyBAQAogCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJRSBtb2RlXG4iKTsKIAkJcmRldi0+ZmxhZ3MgfD0gUkFERU9OX0lTX1BDSUU7CiAJCXJkZXYtPmFzaWMtPmdhcnQudGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2g7CisJCXJkZXYtPmFzaWMtPmdhcnQuZ2V0X3BhZ2VfZW50cnkgPSAmcnYzNzBfcGNpZV9nYXJ0X2dldF9wYWdlX2VudHJ5OwogCQlyZGV2LT5hc2ljLT5nYXJ0LnNldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKIAl9IGVsc2UgewogCQlEUk1fSU5GTygiRm9yY2luZyBBR1AgdG8gUENJIG1vZGVcbiIpOwogCQlyZGV2LT5mbGFncyB8PSBSQURFT05fSVNfUENJOwogCQlyZGV2LT5hc2ljLT5nYXJ0LnRsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaDsKKwkJcmRldi0+YXNpYy0+Z2FydC5nZXRfcGFnZV9lbnRyeSA9ICZyMTAwX3BjaV9nYXJ0X2dldF9wYWdlX2VudHJ5OwogCQlyZGV2LT5hc2ljLT5nYXJ0LnNldF9wYWdlID0gJnIxMDBfcGNpX2dhcnRfc2V0X3BhZ2U7CiAJfQogCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OwpAQCAtMTk5LDYgKzIwMSw3IEBACiAJLm1jX3dhaXRfZm9yX2lkbGUgPSAmcjEwMF9tY193YWl0X2Zvcl9pZGxlLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnIxMDBfcGNpX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcjEwMF9wY2lfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnIxMDBfcGNpX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTI2NSw2ICsyNjgsNyBAQAogCS5tY193YWl0X2Zvcl9pZGxlID0gJnIxMDBfbWNfd2FpdF9mb3JfaWRsZSwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZyMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnIxMDBfcGNpX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyMTAwX3BjaV9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC0zNTksNiArMzYzLDcgQEAKIAkubWNfd2FpdF9mb3JfaWRsZSA9ICZyMzAwX21jX3dhaXRfZm9yX2lkbGUsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmcjEwMF9wY2lfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyMTAwX3BjaV9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcjEwMF9wY2lfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewpAQCAtNDI1LDYgKzQzMCw3IEBACiAJLm1jX3dhaXRfZm9yX2lkbGUgPSAmcjMwMF9tY193YWl0X2Zvcl9pZGxlLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZydjM3MF9wY2llX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTQ5MSw2ICs0OTcsNyBAQAogCS5tY193YWl0X2Zvcl9pZGxlID0gJnIzMDBfbWNfd2FpdF9mb3JfaWRsZSwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnYzNzBfcGNpZV9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC01NTcsNiArNTY0LDcgQEAKIAkubWNfd2FpdF9mb3JfaWRsZSA9ICZyczQwMF9tY193YWl0X2Zvcl9pZGxlLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnJzNDAwX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnM0MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJzNDAwX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTYyMyw2ICs2MzEsNyBAQAogCS5tY193YWl0X2Zvcl9pZGxlID0gJnJzNjAwX21jX3dhaXRfZm9yX2lkbGUsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmcnM2MDBfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewpAQCAtNjkxLDYgKzcwMCw3IEBACiAJLm1jX3dhaXRfZm9yX2lkbGUgPSAmcnM2OTBfbWNfd2FpdF9mb3JfaWRsZSwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZyczQwMF9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNDAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczQwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC03NTksNiArNzY5LDcgQEAKIAkubWNfd2FpdF9mb3JfaWRsZSA9ICZydjUxNV9tY193YWl0X2Zvcl9pZGxlLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZydjM3MF9wY2llX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTgyNSw2ICs4MzYsNyBAQAogCS5tY193YWl0X2Zvcl9pZGxlID0gJnI1MjBfbWNfd2FpdF9mb3JfaWRsZSwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnYzNzBfcGNpZV9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC05MTksNiArOTMxLDcgQEAKIAkuZ2V0X2dwdV9jbG9ja19jb3VudGVyID0gJnI2MDBfZ2V0X2dwdV9jbG9ja19jb3VudGVyLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnI2MDBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC0xMDA0LDYgKzEwMTcsNyBAQAogCS5nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIgPSAmcjYwMF9nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnM2MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTEwOTUsNiArMTEwOSw3IEBACiAJLmdldF9ncHVfY2xvY2tfY291bnRlciA9ICZyNjAwX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewpAQCAtMTE5OSw2ICsxMjE0LDcgQEAKIAkuZ2V0X2dwdV9jbG9ja19jb3VudGVyID0gJnI2MDBfZ2V0X2dwdV9jbG9ja19jb3VudGVyLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJnI2MDBfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC0xMzE3LDYgKzEzMzMsNyBAQAogCS5nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIgPSAmcjYwMF9nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmZXZlcmdyZWVuX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS5yaW5nID0gewpAQCAtMTQwOSw2ICsxNDI2LDcgQEAKIAkuZ2V0X2dwdV9jbG9ja19jb3VudGVyID0gJnI2MDBfZ2V0X2dwdV9jbG9ja19jb3VudGVyLAogCS5nYXJ0ID0gewogCQkudGxiX2ZsdXNoID0gJmV2ZXJncmVlbl9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnM2MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkucmluZyA9IHsKQEAgLTE1MDAsNiArMTUxOCw3IEBACiAJLmdldF9ncHVfY2xvY2tfY291bnRlciA9ICZyNjAwX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZldmVyZ3JlZW5fcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnJpbmcgPSB7CkBAIC0xNjM1LDYgKzE2NTQsNyBAQAogCS5nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIgPSAmcjYwMF9nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmY2F5bWFuX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS52bSA9IHsKQEAgLTE3MzgsNiArMTc1OCw3IEBACiAJLmdldF9ncHVfY2xvY2tfY291bnRlciA9ICZyNjAwX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZjYXltYW5fcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnZtID0gewpAQCAtMTg3MSw2ICsxODkyLDcgQEAKIAkuZ2V0X2dwdV9jbG9ja19jb3VudGVyID0gJnNpX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZzaV9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCQkuZ2V0X3BhZ2VfZW50cnkgPSAmcnM2MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSwKIAkJLnNldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJfSwKIAkudm0gPSB7CkBAIC0yMDMyLDYgKzIwNTQsNyBAQAogCS5nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIgPSAmY2lrX2dldF9ncHVfY2xvY2tfY291bnRlciwKIAkuZ2FydCA9IHsKIAkJLnRsYl9mbHVzaCA9ICZjaWtfcGNpZV9nYXJ0X3RsYl9mbHVzaCwKKwkJLmdldF9wYWdlX2VudHJ5ID0gJnJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnksCiAJCS5zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCX0sCiAJLnZtID0gewpAQCAtMjEzOSw2ICsyMTYyLDcgQEAKIAkuZ2V0X2dwdV9jbG9ja19jb3VudGVyID0gJmNpa19nZXRfZ3B1X2Nsb2NrX2NvdW50ZXIsCiAJLmdhcnQgPSB7CiAJCS50bGJfZmx1c2ggPSAmY2lrX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJCS5nZXRfcGFnZV9lbnRyeSA9ICZyczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5LAogCQkuc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAl9LAogCS52bSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAppbmRleCAyYTQ1ZDU0Li44ZDc4N2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCkBAIC02Nyw4ICs2Nyw5IEBACiBpbnQgcjEwMF9hc2ljX3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHUzMiByMTAwX2dldF92YmxhbmtfY291bnRlcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGNydGMpOwogdm9pZCByMTAwX3BjaV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit1aW50NjRfdCByMTAwX3BjaV9nYXJ0X2dldF9wYWdlX2VudHJ5KHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKTsKIHZvaWQgcjEwMF9wY2lfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgaSwKLQkJCSAgICB1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncyk7CisJCQkgICAgdWludDY0X3QgZW50cnkpOwogdm9pZCByMTAwX3Jpbmdfc3RhcnQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fcmluZyAqcmluZyk7CiBpbnQgcjEwMF9pcnFfc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGludCByMTAwX2lycV9wcm9jZXNzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTE3Miw4ICsxNzMsOSBAQAogCQkJCXN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKIGV4dGVybiBpbnQgcjMwMF9jc19wYXJzZShzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlciAqcCk7CiBleHRlcm4gdm9pZCBydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB1aW50NjRfdCBydjM3MF9wY2llX2dhcnRfZ2V0X3BhZ2VfZW50cnkodWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpOwogZXh0ZXJuIHZvaWQgcnYzNzBfcGNpZV9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCBpLAotCQkJCSAgICAgdWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpOworCQkJCSAgICAgdWludDY0X3QgZW50cnkpOwogZXh0ZXJuIHZvaWQgcnYzNzBfc2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBsYW5lcyk7CiBleHRlcm4gaW50IHJ2MzcwX2dldF9wY2llX2xhbmVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHIzMDBfc2V0X3JlZ19zYWZlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTIwOCw4ICsyMTAsOSBAQAogZXh0ZXJuIGludCByczQwMF9zdXNwZW5kKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcnM0MDBfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIHZvaWQgcnM0MDBfZ2FydF90bGJfZmx1c2goc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordWludDY0X3QgcnM0MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSh1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncyk7CiB2b2lkIHJzNDAwX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIGksCi0JCQkgdWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpOworCQkJIHVpbnQ2NF90IGVudHJ5KTsKIHVpbnQzMl90IHJzNDAwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZyk7CiB2b2lkIHJzNDAwX21jX3dyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IHJlZywgdWludDMyX3Qgdik7CiBpbnQgcnM0MDBfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTIzMiw4ICsyMzUsOSBAQAogdm9pZCByczYwMF9pcnFfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB1MzIgcnM2MDBfZ2V0X3ZibGFua19jb3VudGVyKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgY3J0Yyk7CiB2b2lkIHJzNjAwX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3VpbnQ2NF90IHJzNjAwX2dhcnRfZ2V0X3BhZ2VfZW50cnkodWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpOwogdm9pZCByczYwMF9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCBpLAotCQkJIHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKTsKKwkJCSB1aW50NjRfdCBlbnRyeSk7CiB1aW50MzJfdCByczYwMF9tY19ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpOwogdm9pZCByczYwMF9tY193cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcsIHVpbnQzMl90IHYpOwogdm9pZCByczYwMF9iYW5kd2lkdGhfdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmVuY2htYXJrLmMKaW5kZXggOWU3ZjIzZGQuLjg3ZDVmYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2JlbmNobWFyay5jCkBAIC0zNCw3ICszNCw4IEBACiAKIHN0YXRpYyBpbnQgcmFkZW9uX2JlbmNobWFya19kb19tb3ZlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCBzaXplLAogCQkJCSAgICB1aW50NjRfdCBzYWRkciwgdWludDY0X3QgZGFkZHIsCi0JCQkJICAgIGludCBmbGFnLCBpbnQgbikKKwkJCQkgICAgaW50IGZsYWcsIGludCBuLAorCQkJCSAgICBzdHJ1Y3QgcmVzZXJ2YXRpb25fb2JqZWN0ICpyZXN2KQogewogCXVuc2lnbmVkIGxvbmcgc3RhcnRfamlmZmllczsKIAl1bnNpZ25lZCBsb25nIGVuZF9qaWZmaWVzOwpAQCAtNDcsMTIgKzQ4LDEyIEBACiAJCWNhc2UgUkFERU9OX0JFTkNITUFSS19DT1BZX0RNQToKIAkJCWZlbmNlID0gcmFkZW9uX2NvcHlfZG1hKHJkZXYsIHNhZGRyLCBkYWRkciwKIAkJCQkJCXNpemUgLyBSQURFT05fR1BVX1BBR0VfU0laRSwKLQkJCQkJCU5VTEwpOworCQkJCQkJcmVzdik7CiAJCQlicmVhazsKIAkJY2FzZSBSQURFT05fQkVOQ0hNQVJLX0NPUFlfQkxJVDoKIAkJCWZlbmNlID0gcmFkZW9uX2NvcHlfYmxpdChyZGV2LCBzYWRkciwgZGFkZHIsCiAJCQkJCQkgc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFLAotCQkJCQkJIE5VTEwpOworCQkJCQkJIHJlc3YpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlEUk1fRVJST1IoIlVua25vd24gY29weSBtZXRob2RcbiIpOwpAQCAtMTIwLDcgKzEyMSw4IEBACiAKIAlpZiAocmRldi0+YXNpYy0+Y29weS5kbWEpIHsKIAkJdGltZSA9IHJhZGVvbl9iZW5jaG1hcmtfZG9fbW92ZShyZGV2LCBzaXplLCBzYWRkciwgZGFkZHIsCi0JCQkJCQlSQURFT05fQkVOQ0hNQVJLX0NPUFlfRE1BLCBuKTsKKwkJCQkJCVJBREVPTl9CRU5DSE1BUktfQ09QWV9ETUEsIG4sCisJCQkJCQlkb2JqLT50Ym8ucmVzdik7CiAJCWlmICh0aW1lIDwgMCkKIAkJCWdvdG8gb3V0X2NsZWFudXA7CiAJCWlmICh0aW1lID4gMCkKQEAgLTEzMCw3ICsxMzIsOCBAQAogCiAJaWYgKHJkZXYtPmFzaWMtPmNvcHkuYmxpdCkgewogCQl0aW1lID0gcmFkZW9uX2JlbmNobWFya19kb19tb3ZlKHJkZXYsIHNpemUsIHNhZGRyLCBkYWRkciwKLQkJCQkJCVJBREVPTl9CRU5DSE1BUktfQ09QWV9CTElULCBuKTsKKwkJCQkJCVJBREVPTl9CRU5DSE1BUktfQ09QWV9CTElULCBuLAorCQkJCQkJZG9iai0+dGJvLnJlc3YpOwogCQlpZiAodGltZSA8IDApCiAJCQlnb3RvIG91dF9jbGVhbnVwOwogCQlpZiAodGltZSA+IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCmluZGV4IDBlYzY1MTYuLmJkNzUxOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jCkBAIC03NzQsNiArNzc0LDggQEAKIAkJcmRldi0+ZHVtbXlfcGFnZS5wYWdlID0gTlVMTDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCXJkZXYtPmR1bW15X3BhZ2UuZW50cnkgPSByYWRlb25fZ2FydF9nZXRfcGFnZV9lbnRyeShyZGV2LT5kdW1teV9wYWdlLmFkZHIsCisJCQkJCQkJICAgIFJBREVPTl9HQVJUX1BBR0VfRFVNTVkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKaW5kZXggMTAyMTE2OS4uOTEzZmFmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwpAQCAtOTYwLDYgKzk2MCw5IEBACiAJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9GUkFDX0ZCX0RJViAmJgogCSAgICBwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9VU0VfUkVGX0RJVikKIAkJcmVmX2Rpdl9tYXggPSBwbGwtPnJlZmVyZW5jZV9kaXY7CisJZWxzZSBpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfUFJFRkVSX01JTk1fT1ZFUl9NQVhQKQorCQkvKiBmaXggZm9yIHByb2JsZW1zIG9uIFJTODgwICovCisJCXJlZl9kaXZfbWF4ID0gbWluKHBsbC0+bWF4X3JlZl9kaXYsIDd1KTsKIAllbHNlCiAJCXJlZl9kaXZfbWF4ID0gcGxsLT5tYXhfcmVmX2RpdjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCmluZGV4IDg0MTQ2ZDUuLjU0NTBmYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKQEAgLTE2NSw2ICsxNjUsMTkgQEAKIAkJcmFkZW9uX2JvX3VucGluKHJkZXYtPmdhcnQucm9iaik7CiAJcmFkZW9uX2JvX3VucmVzZXJ2ZShyZGV2LT5nYXJ0LnJvYmopOwogCXJkZXYtPmdhcnQudGFibGVfYWRkciA9IGdwdV9hZGRyOworCisJaWYgKCFyKSB7CisJCWludCBpOworCisJCS8qIFdlIG1pZ2h0IGhhdmUgZHJvcHBlZCBzb21lIEdBUlQgdGFibGUgdXBkYXRlcyB3aGlsZSBpdCB3YXNuJ3QKKwkJICogbWFwcGVkLCByZXN0b3JlIGFsbCBlbnRyaWVzCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzOyBpKyspCisJCQlyYWRlb25fZ2FydF9zZXRfcGFnZShyZGV2LCBpLCByZGV2LT5nYXJ0LnBhZ2VzX2VudHJ5W2ldKTsKKwkJbWIoKTsKKwkJcmFkZW9uX2dhcnRfdGxiX2ZsdXNoKHJkZXYpOworCX0KKwogCXJldHVybiByOwogfQogCkBAIC0yMjgsNyArMjQxLDYgQEAKIAl1bnNpZ25lZCB0OwogCXVuc2lnbmVkIHA7CiAJaW50IGksIGo7Ci0JdTY0IHBhZ2VfYmFzZTsKIAogCWlmICghcmRldi0+Z2FydC5yZWFkeSkgewogCQlXQVJOKDEsICJ0cnlpbmcgdG8gdW5iaW5kIG1lbW9yeSBmcm9tIHVuaW5pdGlhbGl6ZWQgR0FSVCAhXG4iKTsKQEAgLTIzOSwxNCArMjUxLDEyIEBACiAJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyssIHArKykgewogCQlpZiAocmRldi0+Z2FydC5wYWdlc1twXSkgewogCQkJcmRldi0+Z2FydC5wYWdlc1twXSA9IE5VTEw7Ci0JCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF0gPSByZGV2LT5kdW1teV9wYWdlLmFkZHI7Ci0JCQlwYWdlX2Jhc2UgPSByZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF07CiAJCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsgaisrLCB0KyspIHsKKwkJCQlyZGV2LT5nYXJ0LnBhZ2VzX2VudHJ5W3RdID0gcmRldi0+ZHVtbXlfcGFnZS5lbnRyeTsKIAkJCQlpZiAocmRldi0+Z2FydC5wdHIpIHsKLQkJCQkJcmFkZW9uX2dhcnRfc2V0X3BhZ2UocmRldiwgdCwgcGFnZV9iYXNlLAotCQkJCQkJCSAgICAgUkFERU9OX0dBUlRfUEFHRV9EVU1NWSk7CisJCQkJCXJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIHQsCisJCQkJCQkJICAgICByZGV2LT5kdW1teV9wYWdlLmVudHJ5KTsKIAkJCQl9Ci0JCQkJcGFnZV9iYXNlICs9IFJBREVPTl9HUFVfUEFHRV9TSVpFOwogCQkJfQogCQl9CiAJfQpAQCAtMjc0LDcgKzI4NCw3IEBACiB7CiAJdW5zaWduZWQgdDsKIAl1bnNpZ25lZCBwOwotCXVpbnQ2NF90IHBhZ2VfYmFzZTsKKwl1aW50NjRfdCBwYWdlX2Jhc2UsIHBhZ2VfZW50cnk7CiAJaW50IGksIGo7CiAKIAlpZiAoIXJkZXYtPmdhcnQucmVhZHkpIHsKQEAgLTI4NSwxNCArMjk1LDE1IEBACiAJcCA9IHQgLyAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOwogCiAJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyssIHArKykgewotCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF0gPSBkbWFfYWRkcltpXTsKIAkJcmRldi0+Z2FydC5wYWdlc1twXSA9IHBhZ2VsaXN0W2ldOwotCQlpZiAocmRldi0+Z2FydC5wdHIpIHsKLQkJCXBhZ2VfYmFzZSA9IHJkZXYtPmdhcnQucGFnZXNfYWRkcltwXTsKLQkJCWZvciAoaiA9IDA7IGogPCAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOyBqKyssIHQrKykgewotCQkJCXJhZGVvbl9nYXJ0X3NldF9wYWdlKHJkZXYsIHQsIHBhZ2VfYmFzZSwgZmxhZ3MpOwotCQkJCXBhZ2VfYmFzZSArPSBSQURFT05fR1BVX1BBR0VfU0laRTsKKwkJcGFnZV9iYXNlID0gZG1hX2FkZHJbaV07CisJCWZvciAoaiA9IDA7IGogPCAoUEFHRV9TSVpFIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUpOyBqKyssIHQrKykgeworCQkJcGFnZV9lbnRyeSA9IHJhZGVvbl9nYXJ0X2dldF9wYWdlX2VudHJ5KHBhZ2VfYmFzZSwgZmxhZ3MpOworCQkJcmRldi0+Z2FydC5wYWdlc19lbnRyeVt0XSA9IHBhZ2VfZW50cnk7CisJCQlpZiAocmRldi0+Z2FydC5wdHIpIHsKKwkJCQlyYWRlb25fZ2FydF9zZXRfcGFnZShyZGV2LCB0LCBwYWdlX2VudHJ5KTsKIAkJCX0KKwkJCXBhZ2VfYmFzZSArPSBSQURFT05fR1BVX1BBR0VfU0laRTsKIAkJfQogCX0KIAltYigpOwpAQCAtMzM0LDE2ICszNDUsMTUgQEAKIAkJcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCXJkZXYtPmdhcnQucGFnZXNfYWRkciA9IHZ6YWxsb2Moc2l6ZW9mKGRtYV9hZGRyX3QpICoKLQkJCQkJcmRldi0+Z2FydC5udW1fY3B1X3BhZ2VzKTsKLQlpZiAocmRldi0+Z2FydC5wYWdlc19hZGRyID09IE5VTEwpIHsKKwlyZGV2LT5nYXJ0LnBhZ2VzX2VudHJ5ID0gdm1hbGxvYyhzaXplb2YodWludDY0X3QpICoKKwkJCQkJIHJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyk7CisJaWYgKHJkZXYtPmdhcnQucGFnZXNfZW50cnkgPT0gTlVMTCkgewogCQlyYWRlb25fZ2FydF9maW5pKHJkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJLyogc2V0IEdBUlQgZW50cnkgdG8gcG9pbnQgdG8gdGhlIGR1bW15IHBhZ2UgYnkgZGVmYXVsdCAqLwotCWZvciAoaSA9IDA7IGkgPCByZGV2LT5nYXJ0Lm51bV9jcHVfcGFnZXM7IGkrKykgewotCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbaV0gPSByZGV2LT5kdW1teV9wYWdlLmFkZHI7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCByZGV2LT5nYXJ0Lm51bV9ncHVfcGFnZXM7IGkrKykKKwkJcmRldi0+Z2FydC5wYWdlc19lbnRyeVtpXSA9IHJkZXYtPmR1bW15X3BhZ2UuZW50cnk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1NiwxNSArMzY2LDE1IEBACiAgKi8KIHZvaWQgcmFkZW9uX2dhcnRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlpZiAocmRldi0+Z2FydC5wYWdlcyAmJiByZGV2LT5nYXJ0LnBhZ2VzX2FkZHIgJiYgcmRldi0+Z2FydC5yZWFkeSkgeworCWlmIChyZGV2LT5nYXJ0LnJlYWR5KSB7CiAJCS8qIHVuYmluZCBwYWdlcyAqLwogCQlyYWRlb25fZ2FydF91bmJpbmQocmRldiwgMCwgcmRldi0+Z2FydC5udW1fY3B1X3BhZ2VzKTsKIAl9CiAJcmRldi0+Z2FydC5yZWFkeSA9IGZhbHNlOwogCXZmcmVlKHJkZXYtPmdhcnQucGFnZXMpOwotCXZmcmVlKHJkZXYtPmdhcnQucGFnZXNfYWRkcik7CisJdmZyZWUocmRldi0+Z2FydC5wYWdlc19lbnRyeSk7CiAJcmRldi0+Z2FydC5wYWdlcyA9IE5VTEw7Ci0JcmRldi0+Z2FydC5wYWdlc19hZGRyID0gTlVMTDsKKwlyZGV2LT5nYXJ0LnBhZ2VzX2VudHJ5ID0gTlVMTDsKIAogCXJhZGVvbl9kdW1teV9wYWdlX2ZpbmkocmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jCmluZGV4IGQwYjRmN2QuLmFjM2MxMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jCkBAIC0xNDYsNyArMTQ2LDggQEAKIAlzdHJ1Y3QgcmFkZW9uX2JvX3ZhICpib192YTsKIAlpbnQgcjsKIAotCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0NBWU1BTikgeworCWlmICgocmRldi0+ZmFtaWx5IDwgQ0hJUF9DQVlNQU4pIHx8CisJICAgICghcmRldi0+YWNjZWxfd29ya2luZykpIHsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNzYsNyArMTc3LDggQEAKIAlzdHJ1Y3QgcmFkZW9uX2JvX3ZhICpib192YTsKIAlpbnQgcjsKIAotCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX0NBWU1BTikgeworCWlmICgocmRldi0+ZmFtaWx5IDwgQ0hJUF9DQVlNQU4pIHx8CisJICAgICghcmRldi0+YWNjZWxfd29ya2luZykpIHsKIAkJcmV0dXJuOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa2ZkLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rZmQuYwppbmRleCA4YmY4N2YxLi5iZWY5YTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rZmQuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rZmQuYwpAQCAtNDM2LDcgKzQzNiw3IEBACiBzdGF0aWMgaW50IGtnZF9pbml0X3BpcGVsaW5lKHN0cnVjdCBrZ2RfZGV2ICprZ2QsIHVpbnQzMl90IHBpcGVfaWQsCiAJCQkJdWludDMyX3QgaHBkX3NpemUsIHVpbnQ2NF90IGhwZF9ncHVfYWRkcikKIHsKLQl1aW50MzJfdCBtZWMgPSAoKytwaXBlX2lkIC8gQ0lLX1BJUEVfUEVSX01FQykgKyAxOworCXVpbnQzMl90IG1lYyA9IChwaXBlX2lkIC8gQ0lLX1BJUEVfUEVSX01FQykgKyAxOwogCXVpbnQzMl90IHBpcGUgPSAocGlwZV9pZCAlIENJS19QSVBFX1BFUl9NRUMpOwogCiAJbG9ja19zcmJtKGtnZCwgbWVjLCBwaXBlLCAwLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKaW5kZXggM2NmOWMxZi4uNjg2NDExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKQEAgLTYwNSwxNCArNjA1LDE0IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCi0JCXZtID0gJmZwcml2LT52bTsKLQkJciA9IHJhZGVvbl92bV9pbml0KHJkZXYsIHZtKTsKLQkJaWYgKHIpIHsKLQkJCWtmcmVlKGZwcml2KTsKLQkJCXJldHVybiByOwotCQl9Ci0KIAkJaWYgKHJkZXYtPmFjY2VsX3dvcmtpbmcpIHsKKwkJCXZtID0gJmZwcml2LT52bTsKKwkJCXIgPSByYWRlb25fdm1faW5pdChyZGV2LCB2bSk7CisJCQlpZiAocikgeworCQkJCWtmcmVlKGZwcml2KTsKKwkJCQlyZXR1cm4gcjsKKwkJCX0KKwogCQkJciA9IHJhZGVvbl9ib19yZXNlcnZlKHJkZXYtPnJpbmdfdG1wX2JvLmJvLCBmYWxzZSk7CiAJCQlpZiAocikgewogCQkJCXJhZGVvbl92bV9maW5pKHJkZXYsIHZtKTsKQEAgLTY2OCw5ICs2NjgsOSBAQAogCQkJCQlyYWRlb25fdm1fYm9fcm12KHJkZXYsIHZtLT5pYl9ib192YSk7CiAJCQkJcmFkZW9uX2JvX3VucmVzZXJ2ZShyZGV2LT5yaW5nX3RtcF9iby5ibyk7CiAJCQl9CisJCQlyYWRlb25fdm1fZmluaShyZGV2LCB2bSk7CiAJCX0KIAotCQlyYWRlb25fdm1fZmluaShyZGV2LCB2bSk7CiAJCWtmcmVlKGZwcml2KTsKIAkJZmlsZV9wcml2LT5kcml2ZXJfcHJpdiA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCmluZGV4IDA3YjUwNmIuLjc5MTgxODE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCkBAIC0xMTksMTEgKzExOSwxMSBAQAogCQlpZiAocmluZyA9PSBSNjAwX1JJTkdfVFlQRV9ETUFfSU5ERVgpCiAJCQlmZW5jZSA9IHJhZGVvbl9jb3B5X2RtYShyZGV2LCBndHRfYWRkciwgdnJhbV9hZGRyLAogCQkJCQkJc2l6ZSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFLAotCQkJCQkJTlVMTCk7CisJCQkJCQl2cmFtX29iai0+dGJvLnJlc3YpOwogCQllbHNlCiAJCQlmZW5jZSA9IHJhZGVvbl9jb3B5X2JsaXQocmRldiwgZ3R0X2FkZHIsIHZyYW1fYWRkciwKIAkJCQkJCSBzaXplIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUsCi0JCQkJCQkgTlVMTCk7CisJCQkJCQkgdnJhbV9vYmotPnRiby5yZXN2KTsKIAkJaWYgKElTX0VSUihmZW5jZSkpIHsKIAkJCURSTV9FUlJPUigiRmFpbGVkIEdUVC0+VlJBTSBjb3B5ICVkXG4iLCBpKTsKIAkJCXIgPSBQVFJfRVJSKGZlbmNlKTsKQEAgLTE3MCwxMSArMTcwLDExIEBACiAJCWlmIChyaW5nID09IFI2MDBfUklOR19UWVBFX0RNQV9JTkRFWCkKIAkJCWZlbmNlID0gcmFkZW9uX2NvcHlfZG1hKHJkZXYsIHZyYW1fYWRkciwgZ3R0X2FkZHIsCiAJCQkJCQlzaXplIC8gUkFERU9OX0dQVV9QQUdFX1NJWkUsCi0JCQkJCQlOVUxMKTsKKwkJCQkJCXZyYW1fb2JqLT50Ym8ucmVzdik7CiAJCWVsc2UKIAkJCWZlbmNlID0gcmFkZW9uX2NvcHlfYmxpdChyZGV2LCB2cmFtX2FkZHIsIGd0dF9hZGRyLAogCQkJCQkJIHNpemUgLyBSQURFT05fR1BVX1BBR0VfU0laRSwKLQkJCQkJCSBOVUxMKTsKKwkJCQkJCSB2cmFtX29iai0+dGJvLnJlc3YpOwogCQlpZiAoSVNfRVJSKGZlbmNlKSkgewogCQkJRFJNX0VSUk9SKCJGYWlsZWQgVlJBTS0+R1RUIGNvcHkgJWRcbiIsIGkpOwogCQkJciA9IFBUUl9FUlIoZmVuY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3ZtLmMKaW5kZXggY2RlNDhjNC4uMmE1YTRhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdm0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl92bS5jCkBAIC01ODcsMTAgKzU4Nyw4IEBACiAJdWludDY0X3QgcmVzdWx0OwogCiAJLyogcGFnZSB0YWJsZSBvZmZzZXQgKi8KLQlyZXN1bHQgPSByZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbYWRkciA+PiBQQUdFX1NISUZUXTsKLQotCS8qIGluIGNhc2UgY3B1IHBhZ2Ugc2l6ZSAhPSBncHUgcGFnZSBzaXplKi8KLQlyZXN1bHQgfD0gYWRkciAmICh+UEFHRV9NQVNLKTsKKwlyZXN1bHQgPSByZGV2LT5nYXJ0LnBhZ2VzX2VudHJ5W2FkZHIgPj4gUkFERU9OX0dQVV9QQUdFX1NISUZUXTsKKwlyZXN1bHQgJj0gflJBREVPTl9HUFVfUEFHRV9NQVNLOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTc0NSw5ICs3NDMsMTEgQEAKIAkgKi8KIAogCS8qIE5JIGlzIG9wdGltaXplZCBmb3IgMjU2S0IgZnJhZ21lbnRzLCBTSSBhbmQgbmV3ZXIgZm9yIDY0S0IgKi8KLQl1aW50NjRfdCBmcmFnX2ZsYWdzID0gcmRldi0+ZmFtaWx5ID09IENISVBfQ0FZTUFOID8KKwl1aW50NjRfdCBmcmFnX2ZsYWdzID0gKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9DQVlNQU4pIHx8CisJCQkgICAgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX0FSVUJBKSkgPwogCQkJUjYwMF9QVEVfRlJBR18yNTZLQiA6IFI2MDBfUFRFX0ZSQUdfNjRLQjsKLQl1aW50NjRfdCBmcmFnX2FsaWduID0gcmRldi0+ZmFtaWx5ID09IENISVBfQ0FZTUFOID8gMHgyMDAgOiAweDgwOworCXVpbnQ2NF90IGZyYWdfYWxpZ24gPSAoKHJkZXYtPmZhbWlseSA9PSBDSElQX0NBWU1BTikgfHwKKwkJCSAgICAgICAocmRldi0+ZmFtaWx5ID09IENISVBfQVJVQkEpKSA/IDB4MjAwIDogMHg4MDsKIAogCXVpbnQ2NF90IGZyYWdfc3RhcnQgPSBBTElHTihwZV9zdGFydCwgZnJhZ19hbGlnbik7CiAJdWludDY0X3QgZnJhZ19lbmQgPSBwZV9lbmQgJiB+KGZyYWdfYWxpZ24gLSAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwppbmRleCBjNTc5OWYxNi4uMzRlMzIzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwpAQCAtMjEyLDExICsyMTIsOSBAQAogI2RlZmluZSBSUzQwMF9QVEVfV1JJVEVBQkxFICgxIDw8IDIpCiAjZGVmaW5lIFJTNDAwX1BURV9SRUFEQUJMRSAgKDEgPDwgMykKIAotdm9pZCByczQwMF9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCBpLAotCQkJIHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKQordWludDY0X3QgcnM0MDBfZ2FydF9nZXRfcGFnZV9lbnRyeSh1aW50NjRfdCBhZGRyLCB1aW50MzJfdCBmbGFncykKIHsKIAl1aW50MzJfdCBlbnRyeTsKLQl1MzIgKmd0dCA9IHJkZXYtPmdhcnQucHRyOwogCiAJZW50cnkgPSAobG93ZXJfMzJfYml0cyhhZGRyKSAmIFBBR0VfTUFTSykgfAogCQkoKHVwcGVyXzMyX2JpdHMoYWRkcikgJiAweGZmKSA8PCA0KTsKQEAgLTIyNiw4ICsyMjQsMTQgQEAKIAkJZW50cnkgfD0gUlM0MDBfUFRFX1dSSVRFQUJMRTsKIAlpZiAoIShmbGFncyAmIFJBREVPTl9HQVJUX1BBR0VfU05PT1ApKQogCQllbnRyeSB8PSBSUzQwMF9QVEVfVU5TTk9PUEVEOwotCWVudHJ5ID0gY3B1X3RvX2xlMzIoZW50cnkpOwotCWd0dFtpXSA9IGVudHJ5OworCXJldHVybiBlbnRyeTsKK30KKwordm9pZCByczQwMF9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1bnNpZ25lZCBpLAorCQkJIHVpbnQ2NF90IGVudHJ5KQoreworCXUzMiAqZ3R0ID0gcmRldi0+Z2FydC5wdHI7CisJZ3R0W2ldID0gY3B1X3RvX2xlMzIobG93ZXJfMzJfYml0cyhlbnRyeSkpOwogfQogCiBpbnQgcnM0MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwppbmRleCA5YWNiMWMzLi43NGJjZTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCkBAIC02MjUsMTEgKzYyNSw4IEBACiAJcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9mcmVlKHJkZXYpOwogfQogCi12b2lkIHJzNjAwX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIGksCi0JCQkgdWludDY0X3QgYWRkciwgdWludDMyX3QgZmxhZ3MpCit1aW50NjRfdCByczYwMF9nYXJ0X2dldF9wYWdlX2VudHJ5KHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IGZsYWdzKQogewotCXZvaWQgX19pb21lbSAqcHRyID0gKHZvaWQgKilyZGV2LT5nYXJ0LnB0cjsKLQogCWFkZHIgPSBhZGRyICYgMHhGRkZGRkZGRkZGRkZGMDAwVUxMOwogCWFkZHIgfD0gUjYwMF9QVEVfU1lTVEVNOwogCWlmIChmbGFncyAmIFJBREVPTl9HQVJUX1BBR0VfVkFMSUQpCkBAIC02NDAsNyArNjM3LDE0IEBACiAJCWFkZHIgfD0gUjYwMF9QVEVfV1JJVEVBQkxFOwogCWlmIChmbGFncyAmIFJBREVPTl9HQVJUX1BBR0VfU05PT1ApCiAJCWFkZHIgfD0gUjYwMF9QVEVfU05PT1BFRDsKLQl3cml0ZXEoYWRkciwgcHRyICsgKGkgKiA4KSk7CisJcmV0dXJuIGFkZHI7Cit9CisKK3ZvaWQgcnM2MDBfZ2FydF9zZXRfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgaSwKKwkJCSB1aW50NjRfdCBlbnRyeSkKK3sKKwl2b2lkIF9faW9tZW0gKnB0ciA9ICh2b2lkICopcmRldi0+Z2FydC5wdHI7CisJd3JpdGVxKGVudHJ5LCBwdHIgKyAoaSAqIDgpKTsKIH0KIAogaW50IHJzNjAwX2lycV9zZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9zaV9kbWEuYwppbmRleCBhYTdiODcyLi44MzIwNzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3NpX2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vc2lfZG1hLmMKQEAgLTEyMyw3ICsxMjMsNiBAQAogCQlmb3IgKDsgbmR3ID4gMDsgbmR3IC09IDIsIC0tY291bnQsIHBlICs9IDgpIHsKIAkJCWlmIChmbGFncyAmIFI2MDBfUFRFX1NZU1RFTSkgewogCQkJCXZhbHVlID0gcmFkZW9uX3ZtX21hcF9nYXJ0KHJkZXYsIGFkZHIpOwotCQkJCXZhbHVlICY9IDB4RkZGRkZGRkZGRkZGRjAwMFVMTDsKIAkJCX0gZWxzZSBpZiAoZmxhZ3MgJiBSNjAwX1BURV9WQUxJRCkgewogCQkJCXZhbHVlID0gYWRkcjsKIAkJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCmluZGV4IDdiNWQyMjEuLjZjNmI2NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2Rydi5jCkBAIC00MDYsMTEgKzQwNiw5IEBACiAJCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCQktLWRldl9wcml2LT5udW1fM2RfcmVzb3VyY2VzOwogCX0gZWxzZSBpZiAodW5oaWRlX3N2Z2EpIHsKLQkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19FTkFCTEUsCiAJCQkgIHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19FTkFCTEUpICYKIAkJCSAgflNWR0FfUkVHX0VOQUJMRV9ISURFKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCX0KIAogCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnJlbGVhc2VfbXV0ZXgpOwpAQCAtNDMzLDEzICs0MzEsMTAgQEAKIAltdXRleF9sb2NrKCZkZXZfcHJpdi0+cmVsZWFzZV9tdXRleCk7CiAJaWYgKHVubGlrZWx5KC0tZGV2X3ByaXYtPm51bV8zZF9yZXNvdXJjZXMgPT0gMCkpCiAJCXZtd19yZWxlYXNlX2RldmljZShkZXZfcHJpdik7Ci0JZWxzZSBpZiAoaGlkZV9zdmdhKSB7Ci0JCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJZWxzZSBpZiAoaGlkZV9zdmdhKQogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0VOQUJMRSwKIAkJCSAgdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0VOQUJMRSkgfAogCQkJICBTVkdBX1JFR19FTkFCTEVfSElERSk7Ci0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKLQl9CiAKIAluM2QgPSAoaW50MzJfdCkgZGV2X3ByaXYtPm51bV8zZF9yZXNvdXJjZXM7CiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cmVsZWFzZV9tdXRleCk7CkBAIC02MDAsMTIgKzU5NSwxNCBAQAogCWRldl9wcml2LT5kZXYgPSBkZXY7CiAJZGV2X3ByaXYtPnZtd19jaGlwc2V0ID0gY2hpcHNldDsKIAlkZXZfcHJpdi0+bGFzdF9yZWFkX3NlcW5vID0gKHVpbnQzMl90KSAtMTAwOwotCW11dGV4X2luaXQoJmRldl9wcml2LT5od19tdXRleCk7CiAJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPmNtZGJ1Zl9tdXRleCk7CiAJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnJlbGVhc2VfbXV0ZXgpOwogCW11dGV4X2luaXQoJmRldl9wcml2LT5iaW5kaW5nX211dGV4KTsKIAlyd2xvY2tfaW5pdCgmZGV2X3ByaXYtPnJlc291cmNlX2xvY2spOwogCXR0bV9sb2NrX2luaXQoJmRldl9wcml2LT5yZXNlcnZhdGlvbl9zZW0pOworCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+aHdfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT53YWl0ZXJfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT5jYXBfbG9jayk7CiAKIAlmb3IgKGkgPSB2bXdfcmVzX2NvbnRleHQ7IGkgPCB2bXdfcmVzX21heDsgKytpKSB7CiAJCWlkcl9pbml0KCZkZXZfcHJpdi0+cmVzX2lkcltpXSk7CkBAIC02MjYsMTQgKzYyMywxMSBAQAogCiAJZGV2X3ByaXYtPmVuYWJsZV9mYiA9IGVuYWJsZV9mYmRldjsKIAotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7Ci0KIAl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lELCBTVkdBX0lEXzIpOwogCXN2Z2FfaWQgPSB2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfSUQpOwogCWlmIChzdmdhX2lkICE9IFNWR0FfSURfMikgewogCQlyZXQgPSAtRU5PU1lTOwogCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIFNWR0EgSUQgMHgleFxuIiwgc3ZnYV9pZCk7Ci0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAkJZ290byBvdXRfZXJyMDsKIAl9CiAKQEAgLTY4MywxMCArNjc3LDggQEAKIAkJZGV2X3ByaXYtPnByaW1fYmJfbWVtID0gZGV2X3ByaXYtPnZyYW1fc2l6ZTsKIAogCXJldCA9IHZtd19kbWFfbWFza3MoZGV2X3ByaXYpOwotCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCiAJCWdvdG8gb3V0X2VycjA7Ci0JfQogCiAJLyoKIAkgKiBMaW1pdCBiYWNrIGJ1ZmZlciBzaXplIHRvIFZSQU0gc2l6ZS4gIFJlbW92ZSB0aGlzIG9uY2UKQEAgLTY5NSw4ICs2ODcsNiBAQAogCWlmIChkZXZfcHJpdi0+cHJpbV9iYl9tZW0gPiBkZXZfcHJpdi0+dnJhbV9zaXplKQogCQlkZXZfcHJpdi0+cHJpbV9iYl9tZW0gPSBkZXZfcHJpdi0+dnJhbV9zaXplOwogCi0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwotCiAJdm13X3ByaW50X2NhcGFiaWxpdGllcyhkZXZfcHJpdi0+Y2FwYWJpbGl0aWVzKTsKIAogCWlmIChkZXZfcHJpdi0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9DQVBfR01SMikgewpAQCAtMTE2MCw5ICsxMTUwLDcgQEAKIAkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKIAkJCXJldHVybiByZXQ7CiAJCXZtd19rbXNfc2F2ZV92Z2EoZGV2X3ByaXYpOwotCQltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX1RSQUNFUywgMCk7Ci0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAl9CiAKIAlpZiAoYWN0aXZlKSB7CkBAIC0xMTk2LDkgKzExODQsNyBAQAogCWlmICghZGV2X3ByaXYtPmVuYWJsZV9mYikgewogCQl2bXdfa21zX3Jlc3RvcmVfdmdhKGRldl9wcml2KTsKIAkJdm13XzNkX3Jlc291cmNlX2RlYyhkZXZfcHJpdiwgdHJ1ZSk7Ci0JCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfVFJBQ0VTLCAxKTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMTIzMyw5ICsxMjE5LDcgQEAKIAkJCURSTV9FUlJPUigiVW5hYmxlIHRvIGNsZWFuIFZSQU0gb24gbWFzdGVyIGRyb3AuXG4iKTsKIAkJdm13X2ttc19yZXN0b3JlX3ZnYShkZXZfcHJpdik7CiAJCXZtd18zZF9yZXNvdXJjZV9kZWMoZGV2X3ByaXYsIHRydWUpOwotCQltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX1RSQUNFUywgMSk7Ci0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAl9CiAKIAlkZXZfcHJpdi0+YWN0aXZlX21hc3RlciA9ICZkZXZfcHJpdi0+ZmJkZXZfbWFzdGVyOwpAQCAtMTM2NywxMCArMTM1MSw4IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2ID0gdm13X3ByaXYoZGV2KTsKIAotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19JRCwgU1ZHQV9JRF8yKTsKIAkodm9pZCkgdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0lEKTsKLQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAKIAkvKioKIAkgKiBSZWNsYWltIDNkIHJlZmVyZW5jZSBoZWxkIGJ5IGZiZGV2IGFuZCBwb3RlbnRpYWxseQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAppbmRleCA0ZWU3OTliLi5kMjZhNmRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9kcnYuaApAQCAtMzk5LDcgKzM5OSw4IEBACiAJdWludDMyX3QgbWVtb3J5X3NpemU7CiAJYm9vbCBoYXNfZ21yOwogCWJvb2wgaGFzX21vYjsKLQlzdHJ1Y3QgbXV0ZXggaHdfbXV0ZXg7CisJc3BpbmxvY2tfdCBod19sb2NrOworCXNwaW5sb2NrX3QgY2FwX2xvY2s7CiAKIAkvKgogCSAqIFZHQSByZWdpc3RlcnMuCkBAIC00NDksOCArNDUwLDkgQEAKIAlhdG9taWNfdCBtYXJrZXJfc2VxOwogCXdhaXRfcXVldWVfaGVhZF90IGZlbmNlX3F1ZXVlOwogCXdhaXRfcXVldWVfaGVhZF90IGZpZm9fcXVldWU7Ci0JaW50IGZlbmNlX3F1ZXVlX3dhaXRlcnM7IC8qIFByb3RlY3RlZCBieSBod19tdXRleCAqLwotCWludCBnb2FsX3F1ZXVlX3dhaXRlcnM7IC8qIFByb3RlY3RlZCBieSBod19tdXRleCAqLworCXNwaW5sb2NrX3Qgd2FpdGVyX2xvY2s7CisJaW50IGZlbmNlX3F1ZXVlX3dhaXRlcnM7IC8qIFByb3RlY3RlZCBieSB3YWl0ZXJfbG9jayAqLworCWludCBnb2FsX3F1ZXVlX3dhaXRlcnM7IC8qIFByb3RlY3RlZCBieSB3YWl0ZXJfbG9jayAqLwogCWF0b21pY190IGZpZm9fcXVldWVfd2FpdGVyczsKIAl1aW50MzJfdCBsYXN0X3JlYWRfc2Vxbm87CiAJc3BpbmxvY2tfdCBpcnFfbG9jazsKQEAgLTU1MywyMCArNTU1LDM1IEBACiAJcmV0dXJuIChzdHJ1Y3Qgdm13X21hc3RlciAqKSBtYXN0ZXItPmRyaXZlcl9wcml2OwogfQogCisvKgorICogVGhlIGxvY2tpbmcgaGVyZSBpcyBmaW5lLWdyYWluZWQsIHNvIHRoYXQgaXQgaXMgcGVyZm9ybWVkIG9uY2UKKyAqIGZvciBldmVyeSByZWFkLSBhbmQgd3JpdGUgb3BlcmF0aW9uLiBUaGlzIGlzIG9mIGNvdXJzZSBjb3N0bHksIGJ1dCB3ZQorICogZG9uJ3QgcGVyZm9ybSBtdWNoIHJlZ2lzdGVyIGFjY2VzcyBpbiB0aGUgdGltaW5nIGNyaXRpY2FsIHBhdGhzIGFueXdheS4KKyAqIEluc3RlYWQgd2UgaGF2ZSB0aGUgZXh0cmEgYmVuZWZpdCBvZiBiZWluZyBzdXJlIHRoYXQgd2UgZG9uJ3QgZm9yZ2V0CisgKiB0aGUgaHcgbG9jayBhcm91bmQgcmVnaXN0ZXIgYWNjZXNzZXMuCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB2bXdfd3JpdGUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJCSAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgdWludDMyX3QgdmFsdWUpCiB7CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmh3X2xvY2ssIGlycV9mbGFncyk7CiAJb3V0bChvZmZzZXQsIGRldl9wcml2LT5pb19zdGFydCArIFZNV0dGWF9JTkRFWF9QT1JUKTsKIAlvdXRsKHZhbHVlLCBkZXZfcHJpdi0+aW9fc3RhcnQgKyBWTVdHRlhfVkFMVUVfUE9SVCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmh3X2xvY2ssIGlycV9mbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdWludDMyX3Qgdm13X3JlYWQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwKIAkJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewotCXVpbnQzMl90IHZhbDsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKKwl1MzIgdmFsOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5od19sb2NrLCBpcnFfZmxhZ3MpOwogCW91dGwob2Zmc2V0LCBkZXZfcHJpdi0+aW9fc3RhcnQgKyBWTVdHRlhfSU5ERVhfUE9SVCk7CiAJdmFsID0gaW5sKGRldl9wcml2LT5pb19zdGFydCArIFZNV0dGWF9WQUxVRV9QT1JUKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aHdfbG9jaywgaXJxX2ZsYWdzKTsKKwogCXJldHVybiB2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZlbmNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9mZW5jZS5jCmluZGV4IGI3NTk0Y2IuLjk0NWYxZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZlbmNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmVuY2UuYwpAQCAtMzUsNyArMzUsNyBAQAogCXN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXY7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgZmVuY2VfbGlzdDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaywgcGluZ193b3JrOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCXUzMiB1c2VyX2ZlbmNlX3NpemU7CiAJdTMyIGZlbmNlX3NpemU7CiAJdTMyIGV2ZW50X2ZlbmNlX2FjdGlvbl9zaXplOwpAQCAtMTM0LDE0ICsxMzQsNiBAQAogCXJldHVybiAic3ZnYSI7CiB9CiAKLXN0YXRpYyB2b2lkIHZtd19mZW5jZV9waW5nX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCB2bXdfZmVuY2VfbWFuYWdlciAqZm1hbiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdm13X2ZlbmNlX21hbmFnZXIsIHBpbmdfd29yayk7Ci0KLQl2bXdfZmlmb19waW5nX2hvc3QoZm1hbi0+ZGV2X3ByaXYsIFNWR0FfU1lOQ19HRU5FUklDKTsKLX0KLQogc3RhdGljIGJvb2wgdm13X2ZlbmNlX2VuYWJsZV9zaWduYWxpbmcoc3RydWN0IGZlbmNlICpmKQogewogCXN0cnVjdCB2bXdfZmVuY2Vfb2JqICpmZW5jZSA9CkBAIC0xNTUsMTEgKzE0Nyw3IEBACiAJaWYgKHNlcW5vIC0gZmVuY2UtPmJhc2Uuc2Vxbm8gPCBWTVdfRkVOQ0VfV1JBUCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWYgKG11dGV4X3RyeWxvY2soJmRldl9wcml2LT5od19tdXRleCkpIHsKLQkJdm13X2ZpZm9fcGluZ19ob3N0X2xvY2tlZChkZXZfcHJpdiwgU1ZHQV9TWU5DX0dFTkVSSUMpOwotCQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7Ci0JfSBlbHNlCi0JCXNjaGVkdWxlX3dvcmsoJmZtYW4tPnBpbmdfd29yayk7CisJdm13X2ZpZm9fcGluZ19ob3N0KGRldl9wcml2LCBTVkdBX1NZTkNfR0VORVJJQyk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTMwNSw3ICsyOTMsNiBAQAogCUlOSVRfTElTVF9IRUFEKCZmbWFuLT5mZW5jZV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmZm1hbi0+Y2xlYW51cF9saXN0KTsKIAlJTklUX1dPUksoJmZtYW4tPndvcmssICZ2bXdfZmVuY2Vfd29ya19mdW5jKTsKLQlJTklUX1dPUksoJmZtYW4tPnBpbmdfd29yaywgJnZtd19mZW5jZV9waW5nX2Z1bmMpOwogCWZtYW4tPmZpZm9fZG93biA9IHRydWU7CiAJZm1hbi0+dXNlcl9mZW5jZV9zaXplID0gdHRtX3JvdW5kX3BvdChzaXplb2Yoc3RydWN0IHZtd191c2VyX2ZlbmNlKSk7CiAJZm1hbi0+ZmVuY2Vfc2l6ZSA9IHR0bV9yb3VuZF9wb3Qoc2l6ZW9mKHN0cnVjdCB2bXdfZmVuY2Vfb2JqKSk7CkBAIC0zMjMsNyArMzEwLDYgQEAKIAlib29sIGxpc3RzX2VtcHR5OwogCiAJKHZvaWQpIGNhbmNlbF93b3JrX3N5bmMoJmZtYW4tPndvcmspOwotCSh2b2lkKSBjYW5jZWxfd29ya19zeW5jKCZmbWFuLT5waW5nX3dvcmspOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmZtYW4tPmxvY2ssIGlycV9mbGFncyk7CiAJbGlzdHNfZW1wdHkgPSBsaXN0X2VtcHR5KCZmbWFuLT5mZW5jZV9saXN0KSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfZmlmby5jCmluZGV4IDA5ZTEwYWUuLjM5ZjJiMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9maWZvLmMKQEAgLTQ0LDEwICs0NCwxMCBAQAogCQlpZiAoIWRldl9wcml2LT5oYXNfbW9iKQogCQkJcmV0dXJuIGZhbHNlOwogCi0JCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJCXNwaW5fbG9jaygmZGV2X3ByaXYtPmNhcF9sb2NrKTsKIAkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19ERVZfQ0FQLCBTVkdBM0RfREVWQ0FQXzNEKTsKIAkJcmVzdWx0ID0gdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0RFVl9DQVApOwotCQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+Y2FwX2xvY2spOwogCiAJCXJldHVybiAocmVzdWx0ICE9IDApOwogCX0KQEAgLTEyMCw3ICsxMjAsNiBAQAogCURSTV9JTkZPKCJoZWlnaHQgJWRcbiIsIHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19IRUlHSFQpKTsKIAlEUk1fSU5GTygiYnBwICVkXG4iLCB2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfQklUU19QRVJfUElYRUwpKTsKIAotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAJZGV2X3ByaXYtPmVuYWJsZV9zdGF0ZSA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19FTkFCTEUpOwogCWRldl9wcml2LT5jb25maWdfZG9uZV9zdGF0ZSA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19DT05GSUdfRE9ORSk7CiAJZGV2X3ByaXYtPnRyYWNlc19zdGF0ZSA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19UUkFDRVMpOwpAQCAtMTQzLDcgKzE0Miw2IEBACiAJbWIoKTsKIAogCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfQ09ORklHX0RPTkUsIDEpOwotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAogCW1heCA9IGlvcmVhZDMyKGZpZm9fbWVtICsgU1ZHQV9GSUZPX01BWCk7CiAJbWluID0gaW9yZWFkMzIoZmlmb19tZW0gICsgU1ZHQV9GSUZPX01JTik7CkBAIC0xNjAsMzEgKzE1OCwyOCBAQAogCXJldHVybiB2bXdfZmlmb19zZW5kX2ZlbmNlKGRldl9wcml2LCAmZHVtbXkpOwogfQogCi12b2lkIHZtd19maWZvX3BpbmdfaG9zdF9sb2NrZWQoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdWludDMyX3QgcmVhc29uKQordm9pZCB2bXdfZmlmb19waW5nX2hvc3Qoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiwgdWludDMyX3QgcmVhc29uKQogewogCV9fbGUzMiBfX2lvbWVtICpmaWZvX21lbSA9IGRldl9wcml2LT5tbWlvX3ZpcnQ7CisJc3RhdGljIERFRklORV9TUElOTE9DSyhwaW5nX2xvY2spOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCisJLyoKKwkgKiBUaGUgcGluZ19sb2NrIGlzIG5lZWRlZCBiZWNhdXNlIHdlIGRvbid0IGhhdmUgYW4gYXRvbWljCisJICogdGVzdC1hbmQtc2V0IG9mIHRoZSBTVkdBX0ZJRk9fQlVTWSByZWdpc3Rlci4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcGluZ19sb2NrLCBpcnFfZmxhZ3MpOwogCWlmICh1bmxpa2VseShpb3JlYWQzMihmaWZvX21lbSArIFNWR0FfRklGT19CVVNZKSA9PSAwKSkgewogCQlpb3dyaXRlMzIoMSwgZmlmb19tZW0gKyBTVkdBX0ZJRk9fQlVTWSk7CiAJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfU1lOQywgcmVhc29uKTsKIAl9Ci19Ci0KLXZvaWQgdm13X2ZpZm9fcGluZ19ob3N0KHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsIHVpbnQzMl90IHJlYXNvbikKLXsKLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwotCi0Jdm13X2ZpZm9fcGluZ19ob3N0X2xvY2tlZChkZXZfcHJpdiwgcmVhc29uKTsKLQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwaW5nX2xvY2ssIGlycV9mbGFncyk7CiB9CiAKIHZvaWQgdm13X2ZpZm9fcmVsZWFzZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCBzdHJ1Y3Qgdm13X2ZpZm9fc3RhdGUgKmZpZm8pCiB7CiAJX19sZTMyIF9faW9tZW0gKmZpZm9fbWVtID0gZGV2X3ByaXYtPm1taW9fdmlydDsKIAotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7Ci0KIAl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX1NZTkMsIFNWR0FfU1lOQ19HRU5FUklDKTsKIAl3aGlsZSAodm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0JVU1kpICE9IDApCiAJCTsKQEAgLTE5OCw3ICsxOTMsNiBAQAogCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfVFJBQ0VTLAogCQkgIGRldl9wcml2LT50cmFjZXNfc3RhdGUpOwogCi0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOwogCXZtd19tYXJrZXJfcXVldWVfdGFrZWRvd24oJmZpZm8tPm1hcmtlcl9xdWV1ZSk7CiAKIAlpZiAobGlrZWx5KGZpZm8tPnN0YXRpY19idWZmZXIgIT0gTlVMTCkpIHsKQEAgLTI3MSw3ICsyNjUsNyBAQAogCQlyZXR1cm4gdm13X2ZpZm9fd2FpdF9ub2lycShkZXZfcHJpdiwgYnl0ZXMsCiAJCQkJCSAgIGludGVycnVwdGlibGUsIHRpbWVvdXQpOwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX2xvY2soJmRldl9wcml2LT53YWl0ZXJfbG9jayk7CiAJaWYgKGF0b21pY19hZGRfcmV0dXJuKDEsICZkZXZfcHJpdi0+Zmlmb19xdWV1ZV93YWl0ZXJzKSA+IDApIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxX2ZsYWdzKTsKIAkJb3V0bChTVkdBX0lSUUZMQUdfRklGT19QUk9HUkVTUywKQEAgLTI4MCw3ICsyNzQsNyBAQAogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lSUU1BU0ssIGRldl9wcml2LT5pcnFfbWFzayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxX2ZsYWdzKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogCiAJaWYgKGludGVycnVwdGlibGUpCiAJCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0CkBAIC0yOTYsMTQgKzI5MCwxNCBAQAogCWVsc2UgaWYgKGxpa2VseShyZXQgPiAwKSkKIAkJcmV0ID0gMDsKIAotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXZfcHJpdi0+Zmlmb19xdWV1ZV93YWl0ZXJzKSkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFfZmxhZ3MpOwogCQlkZXZfcHJpdi0+aXJxX21hc2sgJj0gflNWR0FfSVJRRkxBR19GSUZPX1BST0dSRVNTOwogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lSUU1BU0ssIGRldl9wcml2LT5pcnFfbWFzayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxX2ZsYWdzKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pb2N0bC5jCmluZGV4IDM3ODgxZWMuLjY5YzhjZTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2lvY3RsLmMKQEAgLTEzNSwxMyArMTM1LDEzIEBACiAJCShwYWlyX29mZnNldCArIG1heF9zaXplICogc2l6ZW9mKFNWR0EzZENhcFBhaXIpKSAvIHNpemVvZih1MzIpOwogCWNvbXBhdF9jYXAtPmhlYWRlci50eXBlID0gU1ZHQTNEQ0FQU19SRUNPUkRfREVWQ0FQUzsKIAotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+Y2FwX2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBtYXhfc2l6ZTsgKytpKSB7CiAJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfREVWX0NBUCwgaSk7CiAJCWNvbXBhdF9jYXAtPnBhaXJzW2ldWzBdID0gaTsKIAkJY29tcGF0X2NhcC0+cGFpcnNbaV1bMV0gPSB2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfREVWX0NBUCk7CiAJfQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPmNhcF9sb2NrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTkxLDEyICsxOTEsMTIgQEAKIAkJaWYgKG51bSA+IFNWR0EzRF9ERVZDQVBfTUFYKQogCQkJbnVtID0gU1ZHQTNEX0RFVkNBUF9NQVg7CiAKLQkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+Y2FwX2xvY2spOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyArK2kpIHsKIAkJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfREVWX0NBUCwgaSk7CiAJCQkqYm91bmNlMzIrKyA9IHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19ERVZfQ0FQKTsKIAkJfQotCQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+Y2FwX2xvY2spOwogCX0gZWxzZSBpZiAoZ2Jfb2JqZWN0cykgewogCQlyZXQgPSB2bXdfZmlsbF9jb21wYXRfY2FwKGRldl9wcml2LCBib3VuY2UsIHNpemUpOwogCQlpZiAodW5saWtlbHkocmV0ICE9IDApKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfaXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYwppbmRleCAwYzQyMzc2Li45ZmU5ODI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L3Ztd2dmeF9pcnEuYwpAQCAtNjIsMTMgKzYyLDggQEAKIAogc3RhdGljIGJvb2wgdm13X2ZpZm9faWRsZShzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2LCB1aW50MzJfdCBzZXFubykKIHsKLQl1aW50MzJfdCBidXN5OwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKLQlidXN5ID0gdm13X3JlYWQoZGV2X3ByaXYsIFNWR0FfUkVHX0JVU1kpOwotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKLQotCXJldHVybiAoYnVzeSA9PSAwKTsKKwlyZXR1cm4gKHZtd19yZWFkKGRldl9wcml2LCBTVkdBX1JFR19CVVNZKSA9PSAwKTsKIH0KIAogdm9pZCB2bXdfdXBkYXRlX3NlcW5vKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0xODQsNyArMTc5LDcgQEAKIAogdm9pZCB2bXdfc2Vxbm9fd2FpdGVyX2FkZChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogewotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogCWlmIChkZXZfcHJpdi0+ZmVuY2VfcXVldWVfd2FpdGVycysrID09IDApIHsKIAkJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKQEAgLTE5NSwxMiArMTkwLDEyIEBACiAJCXZtd193cml0ZShkZXZfcHJpdiwgU1ZHQV9SRUdfSVJRTUFTSywgZGV2X3ByaXYtPmlycV9tYXNrKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFfZmxhZ3MpOwogCX0KLQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT53YWl0ZXJfbG9jayk7CiB9CiAKIHZvaWQgdm13X3NlcW5vX3dhaXRlcl9yZW1vdmUoc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdikKIHsKLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXNwaW5fbG9jaygmZGV2X3ByaXYtPndhaXRlcl9sb2NrKTsKIAlpZiAoLS1kZXZfcHJpdi0+ZmVuY2VfcXVldWVfd2FpdGVycyA9PSAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCkBAIC0yMDksMTMgKzIwNCwxMyBAQAogCQl2bXdfd3JpdGUoZGV2X3ByaXYsIFNWR0FfUkVHX0lSUU1BU0ssIGRldl9wcml2LT5pcnFfbWFzayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5pcnFfbG9jaywgaXJxX2ZsYWdzKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+aHdfbXV0ZXgpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogfQogCiAKIHZvaWQgdm13X2dvYWxfd2FpdGVyX2FkZChzdHJ1Y3Qgdm13X3ByaXZhdGUgKmRldl9wcml2KQogewotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+d2FpdGVyX2xvY2spOwogCWlmIChkZXZfcHJpdi0+Z29hbF9xdWV1ZV93YWl0ZXJzKysgPT0gMCkgewogCQl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKIApAQCAtMjI2LDEyICsyMjEsMTIgQEAKIAkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19JUlFNQVNLLCBkZXZfcHJpdi0+aXJxX21hc2spOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycV9mbGFncyk7CiAJfQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPndhaXRlcl9sb2NrKTsKIH0KIAogdm9pZCB2bXdfZ29hbF93YWl0ZXJfcmVtb3ZlKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX2xvY2soJmRldl9wcml2LT53YWl0ZXJfbG9jayk7CiAJaWYgKC0tZGV2X3ByaXYtPmdvYWxfcXVldWVfd2FpdGVycyA9PSAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCkBAIC0yNDAsNyArMjM1LDcgQEAKIAkJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19JUlFNQVNLLCBkZXZfcHJpdi0+aXJxX21hc2spOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycV9mbGFncyk7CiAJfQotCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPndhaXRlcl9sb2NrKTsKIH0KIAogaW50IHZtd193YWl0X3NlcW5vKHN0cnVjdCB2bXdfcHJpdmF0ZSAqZGV2X3ByaXYsCkBAIC0zMTUsOSArMzEwLDcgQEAKIAlpZiAoIShkZXZfcHJpdi0+Y2FwYWJpbGl0aWVzICYgU1ZHQV9DQVBfSVJRTUFTSykpCiAJCXJldHVybjsKIAotCW11dGV4X2xvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAJdm13X3dyaXRlKGRldl9wcml2LCBTVkdBX1JFR19JUlFNQVNLLCAwKTsKLQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAKIAlzdGF0dXMgPSBpbmwoZGV2X3ByaXYtPmlvX3N0YXJ0ICsgVk1XR0ZYX0lSUVNUQVRVU19QT1JUKTsKIAlvdXRsKHN0YXR1cywgZGV2X3ByaXYtPmlvX3N0YXJ0ICsgVk1XR0ZYX0lSUVNUQVRVU19QT1JUKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92bXdnZngvdm13Z2Z4X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKaW5kZXggMzcyNWI1Mi4uODcyNWI3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3Ztd2dmeC92bXdnZnhfa21zLmMKQEAgLTE4MjgsOSArMTgyOCw3IEBACiAJc3RydWN0IHZtd19wcml2YXRlICpkZXZfcHJpdiA9IHZtd19wcml2KGRldik7CiAJc3RydWN0IHZtd19kaXNwbGF5X3VuaXQgKmR1ID0gdm13X2Nvbm5lY3Rvcl90b19kdShjb25uZWN0b3IpOwogCi0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPmh3X211dGV4KTsKIAludW1fZGlzcGxheXMgPSB2bXdfcmVhZChkZXZfcHJpdiwgU1ZHQV9SRUdfTlVNX0RJU1BMQVlTKTsKLQltdXRleF91bmxvY2soJmRldl9wcml2LT5od19tdXRleCk7CiAKIAlyZXR1cm4gKCh2bXdfY29ubmVjdG9yX3RvX2R1KGNvbm5lY3RvciktPnVuaXQgPCBudW1fZGlzcGxheXMgJiYKIAkJIGR1LT5wcmVmX2FjdGl2ZSkgPwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvS2NvbmZpZyBiL2RyaXZlcnMvaGlkL0tjb25maWcKaW5kZXggZGZkYzI2OS4uMTUyYjAwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvS2NvbmZpZworKysgYi9kcml2ZXJzL2hpZC9LY29uZmlnCkBAIC0xNDcsNiArMTQ3LDE2IEBACiAJLS0taGVscC0tLQogCVN1cHBvcnQgZm9yIEJlbGtpbiBGbGlwIEtWTSBhbmQgV2lyZWxlc3Mga2V5Ym9hcmQuCiAKK2NvbmZpZyBISURfQkVUT1BfRkYKKwl0cmlzdGF0ZSAiQmV0b3AgUHJvZHVjdGlvbiBJbmMuIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0JfSElECisJc2VsZWN0IElOUFVUX0ZGX01FTUxFU1MKKwktLS1oZWxwLS0tCisJU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgZm9yY2UgZmVlZGJhY2sgc3VwcG9ydCBmb3IgZGV2aWNlcyBieQorCUJFVE9QIFByb2R1Y3Rpb24gTHRkLgorCUN1cnJlbnRseSB0aGUgZm9sbG93aW5nIGRldmljZXMgYXJlIGtub3duIHRvIGJlIHN1cHBvcnRlZDoKKwkgLSBCRVRPUCAyMTg1IFBDICYgQkZNIE1PREUKKwogY29uZmlnIEhJRF9DSEVSUlkKIAl0cmlzdGF0ZSAiQ2hlcnJ5IEN5bW90aW9uIGtleWJvYXJkIiBpZiBFWFBFUlQKIAlkZXBlbmRzIG9uIEhJRApAQCAtMzg5LDcgKzM5OSw3IEBACiAJU2F5IFkgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgTG9naXRlY2ggZGV2aWNlcyByZWx5aW5nIG9uIHRoZSBISUQrKwogCXNwZWNpZmljYXRpb24uIFN1Y2ggZGV2aWNlcyBhcmUgdGhlIHZhcmlvdXMgTG9naXRlY2ggVG91Y2hwYWRzIChUNjUwLAogCVQ2NTEsIFRLODIwKSwgc29tZSBtaWNlIChab25lIFRvdWNoIG1vdXNlKSwgb3IgZXZlbiBrZXlib2FyZHMgKFNvbGFyCi0JS2VheWJvYXJkKS4KKwlLZXlib2FyZCkuCiAKIGNvbmZpZyBMT0dJVEVDSF9GRgogCWJvb2wgIkxvZ2l0ZWNoIGZvcmNlIGZlZWRiYWNrIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9NYWtlZmlsZSBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCmluZGV4IGRlYmQxNWIuLjZmMTk5NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaGlkL01ha2VmaWxlCkBAIC0yLDEwICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBISUQgZHJpdmVyCiAjCiBoaWQteQkJCTo9IGhpZC1jb3JlLm8gaGlkLWlucHV0Lm8KLQotaWZkZWYgQ09ORklHX0RFQlVHX0ZTCi0JaGlkLW9ianMJCSs9IGhpZC1kZWJ1Zy5vCi1lbmRpZgoraGlkLSQoQ09ORklHX0RFQlVHX0ZTKQkJKz0gaGlkLWRlYnVnLm8KIAogb2JqLSQoQ09ORklHX0hJRCkJCSs9IGhpZC5vCiBvYmotJChDT05GSUdfVUhJRCkJCSs9IHVoaWQubwpAQCAtMTUsMjMgKzEyLDEzIEBACiBoaWQtJChDT05GSUdfSElEUkFXKQkJKz0gaGlkcmF3Lm8KIAogaGlkLWxvZ2l0ZWNoLXkJCTo9IGhpZC1sZy5vCi1pZmRlZiBDT05GSUdfTE9HSVRFQ0hfRkYKLQloaWQtbG9naXRlY2gteQkrPSBoaWQtbGdmZi5vCi1lbmRpZgotaWZkZWYgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGCi0JaGlkLWxvZ2l0ZWNoLXkJKz0gaGlkLWxnMmZmLm8KLWVuZGlmCi1pZmRlZiBDT05GSUdfTE9HSUc5NDBfRkYKLQloaWQtbG9naXRlY2gteQkrPSBoaWQtbGczZmYubwotZW5kaWYKLWlmZGVmIENPTkZJR19MT0dJV0hFRUxTX0ZGCi0JaGlkLWxvZ2l0ZWNoLXkJKz0gaGlkLWxnNGZmLm8KLWVuZGlmCitoaWQtbG9naXRlY2gtJChDT05GSUdfTE9HSVRFQ0hfRkYpCSs9IGhpZC1sZ2ZmLm8KK2hpZC1sb2dpdGVjaC0kKENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRikJKz0gaGlkLWxnMmZmLm8KK2hpZC1sb2dpdGVjaC0kKENPTkZJR19MT0dJRzk0MF9GRikJKz0gaGlkLWxnM2ZmLm8KK2hpZC1sb2dpdGVjaC0kKENPTkZJR19MT0dJV0hFRUxTX0ZGKQkrPSBoaWQtbGc0ZmYubwogCiBoaWQtd2lpbW90ZS15CQk6PSBoaWQtd2lpbW90ZS1jb3JlLm8gaGlkLXdpaW1vdGUtbW9kdWxlcy5vCi1pZmRlZiBDT05GSUdfREVCVUdfRlMKLQloaWQtd2lpbW90ZS15CSs9IGhpZC13aWltb3RlLWRlYnVnLm8KLWVuZGlmCitoaWQtd2lpbW90ZS0kKENPTkZJR19ERUJVR19GUykJKz0gaGlkLXdpaW1vdGUtZGVidWcubwogCiBvYmotJChDT05GSUdfSElEX0E0VEVDSCkJKz0gaGlkLWE0dGVjaC5vCiBvYmotJChDT05GSUdfSElEX0FDUlVYKQkJKz0gaGlkLWF4ZmYubwpAQCAtMzksNiArMjYsNyBAQAogb2JqLSQoQ09ORklHX0hJRF9BUFBMRUlSKQkrPSBoaWQtYXBwbGVpci5vCiBvYmotJChDT05GSUdfSElEX0FVUkVBTCkgICAgICAgICs9IGhpZC1hdXJlYWwubwogb2JqLSQoQ09ORklHX0hJRF9CRUxLSU4pCSs9IGhpZC1iZWxraW4ubworb2JqLSQoQ09ORklHX0hJRF9CRVRPUF9GRikJKz0gaGlkLWJldG9wZmYubwogb2JqLSQoQ09ORklHX0hJRF9DSEVSUlkpCSs9IGhpZC1jaGVycnkubwogb2JqLSQoQ09ORklHX0hJRF9DSElDT05ZKQkrPSBoaWQtY2hpY29ueS5vCiBvYmotJChDT05GSUdfSElEX0NQMjExMikJKz0gaGlkLWNwMjExMi5vCkBAIC03NiwyNCArNjQsMTIgQEAKIG9iai0kKENPTkZJR19ISURfUEVUQUxZTlgpCSs9IGhpZC1wZXRhbHlueC5vCiBvYmotJChDT05GSUdfSElEX1BJQ09MQ0QpCSs9IGhpZC1waWNvbGNkLm8KIGhpZC1waWNvbGNkLXkJCQkrPSBoaWQtcGljb2xjZF9jb3JlLm8KLWlmZGVmIENPTkZJR19ISURfUElDT0xDRF9GQgotaGlkLXBpY29sY2QteQkJCSs9IGhpZC1waWNvbGNkX2ZiLm8KLWVuZGlmCi1pZmRlZiBDT05GSUdfSElEX1BJQ09MQ0RfQkFDS0xJR0hUCi1oaWQtcGljb2xjZC15CQkJKz0gaGlkLXBpY29sY2RfYmFja2xpZ2h0Lm8KLWVuZGlmCi1pZmRlZiBDT05GSUdfSElEX1BJQ09MQ0RfTENECi1oaWQtcGljb2xjZC15CQkJKz0gaGlkLXBpY29sY2RfbGNkLm8KLWVuZGlmCi1pZmRlZiBDT05GSUdfSElEX1BJQ09MQ0RfTEVEUwotaGlkLXBpY29sY2QteQkJCSs9IGhpZC1waWNvbGNkX2xlZHMubwotZW5kaWYKLWlmZGVmIENPTkZJR19ISURfUElDT0xDRF9DSVIKLWhpZC1waWNvbGNkLXkJCQkrPSBoaWQtcGljb2xjZF9jaXIubwotZW5kaWYKLWlmZGVmIENPTkZJR19ERUJVR19GUwotaGlkLXBpY29sY2QteQkJCSs9IGhpZC1waWNvbGNkX2RlYnVnZnMubwotZW5kaWYKK2hpZC1waWNvbGNkLSQoQ09ORklHX0hJRF9QSUNPTENEX0ZCKQkrPSBoaWQtcGljb2xjZF9mYi5vCitoaWQtcGljb2xjZC0kKENPTkZJR19ISURfUElDT0xDRF9CQUNLTElHSFQpCSs9IGhpZC1waWNvbGNkX2JhY2tsaWdodC5vCitoaWQtcGljb2xjZC0kKENPTkZJR19ISURfUElDT0xDRF9MQ0QpCSs9IGhpZC1waWNvbGNkX2xjZC5vCitoaWQtcGljb2xjZC0kKENPTkZJR19ISURfUElDT0xDRF9MRURTKQkrPSBoaWQtcGljb2xjZF9sZWRzLm8KK2hpZC1waWNvbGNkLSQoQ09ORklHX0hJRF9QSUNPTENEX0NJUikJKz0gaGlkLXBpY29sY2RfY2lyLm8KK2hpZC1waWNvbGNkLSQoQ09ORklHX0RFQlVHX0ZTKQkJKz0gaGlkLXBpY29sY2RfZGVidWdmcy5vCiAKIG9iai0kKENPTkZJR19ISURfUExBTlRST05JQ1MpCSs9IGhpZC1wbGFudHJvbmljcy5vCiBvYmotJChDT05GSUdfSElEX1BSSU1BWCkJKz0gaGlkLXByaW1heC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtYmV0b3BmZi5jIGIvZHJpdmVycy9oaWQvaGlkLWJldG9wZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWNmYzhkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9oaWQvaGlkLWJldG9wZmYuYwpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqICBGb3JjZSBmZWVkYmFjayBzdXBwb3J0IGZvciBCZXRvcCBiYXNlZCBkZXZpY2VzCisgKgorICogIFRoZSBkZXZpY2VzIGFyZSBkaXN0cmlidXRlZCB1bmRlciB2YXJpb3VzIG5hbWVzIGFuZCB0aGUgc2FtZSBVU0IgZGV2aWNlIElECisgKiAgY2FuIGJlIHVzZWQgaW4gYm90aCBhZGFwdGVycyBhbmQgYWN0dWFsIGdhbWUgY29udHJvbGxlcnMuCisgKgorICogIDB4MTFjMjoweDIyMDggIkJUUDIxODUgQkZNIG1vZGUgSm95c3RpY2siCisgKiAgIC0gdGVzdGVkIHdpdGggQlRQMjE4NSBCRk0gTW9kZS4KKyAqCisgKiAgMHgxMUMwOjB4NTUwNiAiQlRQMjE4NSBQQyBtb2RlIEpveXN0aWNrIgorICogICAtIHRlc3RlZCB3aXRoIEJUUDIxODUgUEMgTW9kZS4KKyAqCisgKiAgMHg4MzgwOjB4MTg1MCAiQlRQMjE4NSBWMiBQQyBtb2RlIFVTQiBHYW1lcGFkIgorICogICAtIHRlc3RlZCB3aXRoIEJUUDIxODUgUEMgTW9kZSB3aXRoIGFub3RoZXIgdmVyc2lvbi4KKyAqCisgKiAgMHgyMGJjOjB4NTUwMCAiQlRQMjE4NSBWMiBCRk0gbW9kZSBKb3lzdGljayIKKyAqICAgLSB0ZXN0ZWQgd2l0aCBCVFAyMTcxcy4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMTQgSHVhbmcgQm8gPGh1YW5nYm9idXB0QDE2My5jb20+CisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworCisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaGlkLmg+CisKKyNpbmNsdWRlICJoaWQtaWRzLmgiCisKK3N0cnVjdCBiZXRvcGZmX2RldmljZSB7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKK307CisKK3N0YXRpYyBpbnQgaGlkX2JldG9wZmZfcGxheShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHZvaWQgKmRhdGEsCisJCQkgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBiZXRvcGZmX2RldmljZSAqYmV0b3BmZiA9IGRhdGE7CisJX191MTYgbGVmdCwgcmlnaHQ7CisKKwlsZWZ0ID0gZWZmZWN0LT51LnJ1bWJsZS5zdHJvbmdfbWFnbml0dWRlOworCXJpZ2h0ID0gZWZmZWN0LT51LnJ1bWJsZS53ZWFrX21hZ25pdHVkZTsKKworCWJldG9wZmYtPnJlcG9ydC0+ZmllbGRbMl0tPnZhbHVlWzBdID0gbGVmdCAvIDI1NjsKKwliZXRvcGZmLT5yZXBvcnQtPmZpZWxkWzNdLT52YWx1ZVswXSA9IHJpZ2h0IC8gMjU2OworCisJaGlkX2h3X3JlcXVlc3QoaGlkLCBiZXRvcGZmLT5yZXBvcnQsIEhJRF9SRVFfU0VUX1JFUE9SVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZXRvcGZmX2luaXQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCkKK3sKKwlzdHJ1Y3QgYmV0b3BmZl9kZXZpY2UgKmJldG9wZmY7CisJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKKwlzdHJ1Y3QgaGlkX2lucHV0ICpoaWRpbnB1dCA9CisJCQlsaXN0X2ZpcnN0X2VudHJ5KCZoaWQtPmlucHV0cywgc3RydWN0IGhpZF9pbnB1dCwgbGlzdCk7CisJc3RydWN0IGxpc3RfaGVhZCAqcmVwb3J0X2xpc3QgPQorCQkJJmhpZC0+cmVwb3J0X2VudW1bSElEX09VVFBVVF9SRVBPUlRdLnJlcG9ydF9saXN0OworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhpZGlucHV0LT5pbnB1dDsKKwlpbnQgZmllbGRfY291bnQgPSAwOworCWludCBlcnJvcjsKKwlpbnQgaSwgajsKKworCWlmIChsaXN0X2VtcHR5KHJlcG9ydF9saXN0KSkgeworCQloaWRfZXJyKGhpZCwgIm5vIG91dHB1dCByZXBvcnRzIGZvdW5kXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcmVwb3J0ID0gbGlzdF9maXJzdF9lbnRyeShyZXBvcnRfbGlzdCwgc3RydWN0IGhpZF9yZXBvcnQsIGxpc3QpOworCS8qCisJICogQWN0dWFsbHkgdGhlcmUgYXJlIDQgZmllbGRzIGZvciA0IEJ5dGVzIGFzIGJlbG93OgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogQnl0ZTAgIEJ5dGUxICBCeXRlMgkgIEJ5dGUzCisJICogMHgwMCAgIDB4MDAgICBsZWZ0X21vdG9yIHJpZ2h0X21vdG9yCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiBEbyBpbml0IHRoZW0gd2l0aCBkZWZhdWx0IHZhbHVlLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCByZXBvcnQtPm1heGZpZWxkOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IHJlcG9ydC0+ZmllbGRbaV0tPnJlcG9ydF9jb3VudDsgaisrKSB7CisJCQlyZXBvcnQtPmZpZWxkW2ldLT52YWx1ZVtqXSA9IDB4MDA7CisJCQlmaWVsZF9jb3VudCsrOworCQl9CisJfQorCisJaWYgKGZpZWxkX2NvdW50IDwgNCkgeworCQloaWRfZXJyKGhpZCwgIm5vdCBlbm91Z2ggZmllbGRzIGluIHRoZSByZXBvcnQ6ICVkXG4iLAorCQkJCWZpZWxkX2NvdW50KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJYmV0b3BmZiA9IGt6YWxsb2Moc2l6ZW9mKCpiZXRvcGZmKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFiZXRvcGZmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNldF9iaXQoRkZfUlVNQkxFLCBkZXYtPmZmYml0KTsKKworCWVycm9yID0gaW5wdXRfZmZfY3JlYXRlX21lbWxlc3MoZGV2LCBiZXRvcGZmLCBoaWRfYmV0b3BmZl9wbGF5KTsKKwlpZiAoZXJyb3IpIHsKKwkJa2ZyZWUoYmV0b3BmZik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwliZXRvcGZmLT5yZXBvcnQgPSByZXBvcnQ7CisJaGlkX2h3X3JlcXVlc3QoaGlkLCBiZXRvcGZmLT5yZXBvcnQsIEhJRF9SRVFfU0VUX1JFUE9SVCk7CisKKwloaWRfaW5mbyhoaWQsICJGb3JjZSBmZWVkYmFjayBmb3IgYmV0b3AgZGV2aWNlcyBieSBodWFuZ2JvIDxodWFuZ2JvYnVwdEAxNjMuY29tPlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZXRvcF9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQ7CisKKwlpZiAoaWQtPmRyaXZlcl9kYXRhKQorCQloZGV2LT5xdWlya3MgfD0gSElEX1FVSVJLX01VTFRJX0lOUFVUOworCisJcmV0ID0gaGlkX3BhcnNlKGhkZXYpOworCWlmIChyZXQpIHsKKwkJaGlkX2VycihoZGV2LCAicGFyc2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gaGlkX2h3X3N0YXJ0KGhkZXYsIEhJRF9DT05ORUNUX0RFRkFVTFQgJiB+SElEX0NPTk5FQ1RfRkYpOworCWlmIChyZXQpIHsKKwkJaGlkX2VycihoZGV2LCAiaHcgc3RhcnQgZmFpbGVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJYmV0b3BmZl9pbml0KGhkZXYpOworCisJcmV0dXJuIDA7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIGJldG9wX2RldmljZXNbXSA9IHsKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkVUT1BfMjE4NUJGTSwgMHgyMjA4KSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CRVRPUF8yMTg1UEMsIDB4NTUwNikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkVUT1BfMjE4NVYyUEMsIDB4MTg1MCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkVUT1BfMjE4NVYyQkZNLCAweDU1MDApIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShoaWQsIGJldG9wX2RldmljZXMpOworCitzdGF0aWMgc3RydWN0IGhpZF9kcml2ZXIgYmV0b3BfZHJpdmVyID0geworCS5uYW1lID0gImJldG9wIiwKKwkuaWRfdGFibGUgPSBiZXRvcF9kZXZpY2VzLAorCS5wcm9iZSA9IGJldG9wX3Byb2JlLAorfTsKK21vZHVsZV9oaWRfZHJpdmVyKGJldG9wX2RyaXZlcik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMgYi9kcml2ZXJzL2hpZC9oaWQtY29yZS5jCmluZGV4IDhiNjM4NzkuLmRiNGZiNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWNvcmUuYwpAQCAtNjk4LDE1ICs2OTgsMjUgQEAKIHN0YXRpYyB2b2lkIGhpZF9zY2FuX2NvbGxlY3Rpb24oc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgdW5zaWduZWQgdHlwZSkKIHsKIAlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkID0gcGFyc2VyLT5kZXZpY2U7CisJaW50IGk7CiAKIAlpZiAoKChwYXJzZXItPmdsb2JhbC51c2FnZV9wYWdlIDw8IDE2KSA9PSBISURfVVBfU0VOU09SKSAmJgogCSAgICB0eXBlID09IEhJRF9DT0xMRUNUSU9OX1BIWVNJQ0FMKQogCQloaWQtPmdyb3VwID0gSElEX0dST1VQX1NFTlNPUl9IVUI7CiAKIAlpZiAoaGlkLT52ZW5kb3IgPT0gVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQgJiYKLQkgICAgaGlkLT5wcm9kdWN0ID09IFVTQl9ERVZJQ0VfSURfTVNfVFlQRV9DT1ZFUl8zICYmCisJICAgIChoaWQtPnByb2R1Y3QgPT0gVVNCX0RFVklDRV9JRF9NU19UWVBFX0NPVkVSXzMgfHwKKwkgICAgIGhpZC0+cHJvZHVjdCA9PSBVU0JfREVWSUNFX0lEX01TX1RZUEVfQ09WRVJfM19KUCkgJiYKIAkgICAgaGlkLT5ncm91cCA9PSBISURfR1JPVVBfTVVMVElUT1VDSCkKIAkJaGlkLT5ncm91cCA9IEhJRF9HUk9VUF9HRU5FUklDOworCisJaWYgKChwYXJzZXItPmdsb2JhbC51c2FnZV9wYWdlIDw8IDE2KSA9PSBISURfVVBfR0VOREVTSykKKwkJZm9yIChpID0gMDsgaSA8IHBhcnNlci0+bG9jYWwudXNhZ2VfaW5kZXg7IGkrKykKKwkJCWlmIChwYXJzZXItPmxvY2FsLnVzYWdlW2ldID09IEhJRF9HRF9QT0lOVEVSKQorCQkJCXBhcnNlci0+c2Nhbl9mbGFncyB8PSBISURfU0NBTl9GTEFHX0dEX1BPSU5URVI7CisKKwlpZiAoKHBhcnNlci0+Z2xvYmFsLnVzYWdlX3BhZ2UgPDwgMTYpID49IEhJRF9VUF9NU1ZFTkRPUikKKwkJcGFyc2VyLT5zY2FuX2ZsYWdzIHw9IEhJRF9TQ0FOX0ZMQUdfVkVORE9SX1NQRUNJRklDOwogfQogCiBzdGF0aWMgaW50IGhpZF9zY2FuX21haW4oc3RydWN0IGhpZF9wYXJzZXIgKnBhcnNlciwgc3RydWN0IGhpZF9pdGVtICppdGVtKQpAQCAtNzkyLDExICs4MDIsMTQgQEAKIAkJaGlkLT5ncm91cCA9IEhJRF9HUk9VUF9XQUNPTTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfVkVORE9SX0lEX1NZTkFQVElDUzoKLQkJaWYgKChoaWQtPmdyb3VwID09IEhJRF9HUk9VUF9HRU5FUklDKSAmJgotCQkgICAgKGhpZC0+YnVzICE9IEJVU19VU0IgfHwgaGlkLT50eXBlID09IEhJRF9UWVBFX1VTQk1PVVNFKSkKLQkJCS8qIGhpZC1ybWkgc2hvdWxkIG9ubHkgYmluZCB0byB0aGUgbW91c2UgaW50ZXJmYWNlIG9mCi0JCQkgKiBjb21wb3NpdGUgVVNCIGRldmljZXMgKi8KLQkJCWhpZC0+Z3JvdXAgPSBISURfR1JPVVBfUk1JOworCQlpZiAoaGlkLT5ncm91cCA9PSBISURfR1JPVVBfR0VORVJJQykKKwkJCWlmICgocGFyc2VyLT5zY2FuX2ZsYWdzICYgSElEX1NDQU5fRkxBR19WRU5ET1JfU1BFQ0lGSUMpCisJCQkgICAgJiYgKHBhcnNlci0+c2Nhbl9mbGFncyAmIEhJRF9TQ0FOX0ZMQUdfR0RfUE9JTlRFUikpCisJCQkJLyoKKwkJCQkgKiBoaWQtcm1pIHNob3VsZCB0YWtlIGNhcmUgb2YgdGhlbSwKKwkJCQkgKiBub3QgaGlkLWdlbmVyaWMKKwkJCQkgKi8KKwkJCQloaWQtPmdyb3VwID0gSElEX0dST1VQX1JNSTsKIAkJYnJlYWs7CiAJfQogCkBAIC0xNzU3LDYgKzE3NzAsMTAgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsIFVTQl9ERVZJQ0VfSURfQVBQTEVfR0VZU0VSMV9UUF9PTkxZKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BVVJFQUwsIFVTQl9ERVZJQ0VfSURfQVVSRUFMX1cwMVJOKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CRUxLSU4sIFVTQl9ERVZJQ0VfSURfRkxJUF9LVk0pIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JFVE9QXzIxODVCRk0sIDB4MjIwOCkgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQkVUT1BfMjE4NVBDLCAweDU1MDYpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JFVE9QXzIxODVWMlBDLCAweDE4NTApIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JFVE9QXzIxODVWMkJGTSwgMHg1NTAwKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CVEMsIFVTQl9ERVZJQ0VfSURfQlRDX0VNUFJFWF9SRU1PVEUpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JUQywgVVNCX0RFVklDRV9JRF9CVENfRU1QUkVYX1JFTU9URV8yKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9DSEVSUlksIFVTQl9ERVZJQ0VfSURfQ0hFUlJZX0NZTU9USU9OKSB9LApAQCAtMTg2MSw2ICsxODc4LDcgQEAKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZULCBVU0JfREVWSUNFX0lEX1dJUkVMRVNTX09QVElDQUxfREVTS1RPUF8zXzApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19PRkZJQ0VfS0IpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19UWVBFX0NPVkVSXzMpIH0sCisJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19UWVBFX0NPVkVSXzNfSlApIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01PTlRFUkVZLCBVU0JfREVWSUNFX0lEX0dFTklVU19LQjI5RSkgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTVNJLCBVU0JfREVWSUNFX0lEX01TSV9HVDY4M1JfTEVEX1BBTkVMKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OVFJJRywgVVNCX0RFVklDRV9JRF9OVFJJR19UT1VDSF9TQ1JFRU4pIH0sCkBAIC0xOTcxLDYgKzE5ODksNyBAQAogCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfTVNfUFJFU0VOVEVSXzhLX0JUKSB9LAogCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OSU5URU5ETywgVVNCX0RFVklDRV9JRF9OSU5URU5ET19XSUlNT1RFKSB9LAogCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OSU5URU5ETywgVVNCX0RFVklDRV9JRF9OSU5URU5ET19XSUlNT1RFMikgfSwKKwl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUkFaRVIsIFVTQl9ERVZJQ0VfSURfUkFaRVJfQkxBREVfMTQpIH0sCiAJeyB9CiB9OwogCkBAIC0yMzI4LDYgKzIzNDcsNyBAQAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NQ0MsIFVTQl9ERVZJQ0VfSURfTUNDX1BNRDEyMDhMUykgfSwKIAl7IEhJRF9VU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTUlDUk9DSElQLCBVU0JfREVWSUNFX0lEX1BJQ0tJVDEpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPQ0hJUCwgVVNCX0RFVklDRV9JRF9QSUNLSVQyKSB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST0NISVAsIFVTQl9ERVZJQ0VfSURfUElDSzE2RjE0NTQpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05BVElPTkFMX1NFTUlDT05EVUNUT1IsIFVTQl9ERVZJQ0VfSURfTl9TX0hBUk1PTlkpIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwKSB9LAogCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDIwKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWh5cGVydi5jIGIvZHJpdmVycy9oaWQvaGlkLWh5cGVydi5jCmluZGV4IDMxZmFkNjQuLjYwMzlmMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1oeXBlcnYuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtaHlwZXJ2LmMKQEAgLTM4MSw3ICszODEsNyBAQAogc3RhdGljIGludCBtb3VzZXZzY19jb25uZWN0X3RvX3ZzcChzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpCiB7CiAJaW50IHJldCA9IDA7Ci0JaW50IHQ7CisJdW5zaWduZWQgbG9uZyB0OwogCXN0cnVjdCBtb3VzZXZzY19kZXYgKmlucHV0X2RldiA9IGh2X2dldF9kcnZkYXRhKGRldmljZSk7CiAJc3RydWN0IG1vdXNldnNjX3BydF9tc2cgKnJlcXVlc3Q7CiAJc3RydWN0IG1vdXNldnNjX3BydF9tc2cgKnJlc3BvbnNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWlkcy5oIGIvZHJpdmVycy9oaWQvaGlkLWlkcy5oCmluZGV4IDkyNDMzNTkuLjQ2ZWRiNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1pZHMuaAorKysgYi9kcml2ZXJzL2hpZC9oaWQtaWRzLmgKQEAgLTE4OSw2ICsxODksMTEgQEAKICNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9CRVJLU0hJUkUJCTB4MGM5OAogI2RlZmluZSBVU0JfREVWSUNFX0lEX0JFUktTSElSRV9QQ1dECTB4MTE0MAogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQkVUT1BfMjE4NUJGTQkweDExYzIKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9CRVRPUF8yMTg1UEMJMHgxMWMwCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQkVUT1BfMjE4NVYyUEMJMHg4MzgwCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQkVUT1BfMjE4NVYyQkZNCTB4MjBiYworCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfQlRDCQkweDA0NmUKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9CVENfRU1QUkVYX1JFTU9URQkweDU1NzgKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9CVENfRU1QUkVYX1JFTU9URV8yCTB4NTU3NwpAQCAtNjM4LDYgKzY0Myw3IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUElDS0lUMgkJMHgwMDMzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUElDT0xDRAkJMHhjMDAyCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUElDT0xDRF9CT09UTE9BREVSCTB4ZjAwMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX1BJQ0sxNkYxNDU0CTB4MDA0MgogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZUCQkweDA0NWUKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9TSURFV0lOREVSX0dWCTB4MDAzYgpAQCAtNjU0LDYgKzY2MCw3IEBACiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfVE9VQ0hfQ09WRVJfMiAgIDB4MDdhNwogI2RlZmluZSBVU0JfREVWSUNFX0lEX01TX1RZUEVfQ09WRVJfMiAgICAweDA3YTkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NU19UWVBFX0NPVkVSXzMgICAgMHgwN2RjCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTVNfVFlQRV9DT1ZFUl8zX0pQIDB4MDdkZAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfTU9KTwkJMHg4MjgyCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUkVUUk9fQURBUFRFUgkweDMyMDEKQEAgLTc2OCw2ICs3NzUsOSBAQAogI2RlZmluZSBVU0JfREVWSUNFX0lEX1FVQU5UQV9PUFRJQ0FMX1RPVUNIXzMwMDEJCTB4MzAwMQogI2RlZmluZSBVU0JfREVWSUNFX0lEX1FVQU5UQV9PUFRJQ0FMX1RPVUNIXzMwMDgJCTB4MzAwOAogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfUkFaRVIgICAgICAgICAgICAweDE1MzIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9SQVpFUl9CTEFERV8xNCAgIDB4MDExRAorCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfUkVBTFRFSwkJMHgwYmRhCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUkVBTFRFS19SRUFERVIJMHgwMTUyCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZC1pbnB1dC5jIGIvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKaW5kZXggOTUwNTYwNS4uMDUyODY5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkLWlucHV0LmMKQEAgLTMwNiwxMCArMzA2LDEzIEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGlkX2RldmljZV9pZCBoaWRfYmF0dGVyeV9xdWlya3NbXSA9IHsKIAl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsCi0JCQlVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU18yMDA5X0lTTyksCi0JSElEX0JBVFRFUllfUVVJUktfUEVSQ0VOVCB8IEhJRF9CQVRURVJZX1FVSVJLX0ZFQVRVUkUgfSwKKwkJVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAwOV9JU08pLAorCSAgSElEX0JBVFRFUllfUVVJUktfUEVSQ0VOVCB8IEhJRF9CQVRURVJZX1FVSVJLX0ZFQVRVUkUgfSwKIAl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsCi0JCQkgICAgICAgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAxMV9BTlNJKSwKKwkJVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAwOV9BTlNJKSwKKwkgIEhJRF9CQVRURVJZX1FVSVJLX1BFUkNFTlQgfCBISURfQkFUVEVSWV9RVUlSS19GRUFUVVJFIH0sCisJeyBISURfQkxVRVRPT1RIX0RFVklDRShVU0JfVkVORE9SX0lEX0FQUExFLAorCQlVU0JfREVWSUNFX0lEX0FQUExFX0FMVV9XSVJFTEVTU18yMDExX0FOU0kpLAogCSAgSElEX0JBVFRFUllfUVVJUktfUEVSQ0VOVCB8IEhJRF9CQVRURVJZX1FVSVJLX0ZFQVRVUkUgfSwKIAl7IEhJRF9CTFVFVE9PVEhfREVWSUNFKFVTQl9WRU5ET1JfSURfQVBQTEUsCiAJCQkgICAgICAgVVNCX0RFVklDRV9JRF9BUFBMRV9BTFVfV0lSRUxFU1NfMjAxMV9JU08pLApAQCAtMTEwNCw2ICsxMTA3LDIzIEBACiAJCXJldHVybjsKIAl9CiAKKwkvKgorCSAqIElnbm9yZSByZXBvcnRzIGZvciBhYnNvbHV0ZSBkYXRhIGlmIHRoZSBkYXRhIGRpZG4ndCBjaGFuZ2UuIFRoaXMgaXMKKwkgKiBub3Qgb25seSBhbiBvcHRpbWl6YXRpb24gYnV0IGFsc28gZml4ZXMgJ2RlYWQnIGtleSByZXBvcnRzLiBTb21lCisJICogUm9sbE92ZXIgaW1wbGVtZW50YXRpb25zIGZvciBsb2NhbGl6ZWQga2V5cyAobGlrZSBCQUNLU0xBU0gvUElQRTsgSElECisJICogMHgzMSBhbmQgMHgzMikgcmVwb3J0IG11bHRpcGxlIGtleXMsIGV2ZW4gdGhvdWdoIGEgbG9jYWxpemVkIGtleWJvYXJkCisJICogY2FuIG9ubHkgaGF2ZSBvbmUgb2YgdGhlbSBwaHlzaWNhbGx5IGF2YWlsYWJsZS4gVGhlICdkZWFkJyBrZXlzCisJICogcmVwb3J0IGNvbnN0YW50IDAuIEFzIGFsbCBtYXAgdG8gdGhlIHNhbWUga2V5Y29kZSwgdGhleSdkIGNvbmZ1c2UKKwkgKiB0aGUgaW5wdXQgbGF5ZXIuIElmIHdlIGZpbHRlciB0aGUgJ2RlYWQnIGtleXMgb24gdGhlIEhJRCBsZXZlbCwgd2UKKwkgKiBza2lwIHRoZSBrZXljb2RlIHRyYW5zbGF0aW9uIGFuZCBvbmx5IGZvcndhcmQgcmVhbCBldmVudHMuCisJICovCisJaWYgKCEoZmllbGQtPmZsYWdzICYgKEhJRF9NQUlOX0lURU1fUkVMQVRJVkUgfAorCSAgICAgICAgICAgICAgICAgICAgICBISURfTUFJTl9JVEVNX0JVRkZFUkVEX0JZVEUpKSAmJgorCQkJICAgICAgKGZpZWxkLT5mbGFncyAmIEhJRF9NQUlOX0lURU1fVkFSSUFCTEUpICYmCisJICAgIHVzYWdlLT51c2FnZV9pbmRleCA8IGZpZWxkLT5tYXh1c2FnZSAmJgorCSAgICB2YWx1ZSA9PSBmaWVsZC0+dmFsdWVbdXNhZ2UtPnVzYWdlX2luZGV4XSkKKwkJcmV0dXJuOworCiAJLyogcmVwb3J0IHRoZSB1c2FnZSBjb2RlIGFzIHNjYW5jb2RlIGlmIHRoZSBrZXkgc3RhdHVzIGhhcyBjaGFuZ2VkICovCiAJaWYgKHVzYWdlLT50eXBlID09IEVWX0tFWSAmJiAhIXRlc3RfYml0KHVzYWdlLT5jb2RlLCBpbnB1dC0+a2V5KSAhPSB2YWx1ZSkKIAkJaW5wdXRfZXZlbnQoaW5wdXQsIEVWX01TQywgTVNDX1NDQU4sIHVzYWdlLT5oaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxlbm92by5jIGIvZHJpdmVycy9oaWQvaGlkLWxlbm92by5jCmluZGV4IDRjNTVmNGQuLmM0YzNmMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1sZW5vdm8uYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbGVub3ZvLmMKQEAgLTM4LDYgKzM4LDcgQEAKIAogc3RydWN0IGxlbm92b19kcnZkYXRhX2NwdGtiZCB7CiAJYm9vbCBmbl9sb2NrOworCWludCBzZW5zaXRpdml0eTsKIH07CiAKICNkZWZpbmUgbWFwX2tleV9jbGVhcihjKSBoaWRfbWFwX3VzYWdlX2NsZWFyKGhpLCB1c2FnZSwgYml0LCBtYXgsIEVWX0tFWSwgKGMpKQpAQCAtOTEsNiArOTIsMzggQEAKIAkJY2FzZSAweDAwZmE6IC8qIEZuLUVzYzogRm4tbG9jayB0b2dnbGUgKi8KIAkJCW1hcF9rZXlfY2xlYXIoS0VZX0ZOX0VTQyk7CiAJCQlyZXR1cm4gMTsKKwkJY2FzZSAweDAwZmI6IC8qIE1pZGRsZSBtb3VzZSBidXR0b24gKGluIG5hdGl2ZSBtb2RlKSAqLworCQkJbWFwX2tleV9jbGVhcihCVE5fTUlERExFKTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCisJLyogQ29tcGF0aWJpbGl0eSBtaWRkbGUvd2hlZWwgbWFwcGluZ3Mgc2hvdWxkIGJlIGlnbm9yZWQgKi8KKwlpZiAodXNhZ2UtPmhpZCA9PSBISURfR0RfV0hFRUwpCisJCXJldHVybiAtMTsKKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgPT0gSElEX1VQX0JVVFRPTiAmJgorCQkJKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpID09IDB4MDAzKQorCQlyZXR1cm4gLTE7CisJaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpID09IEhJRF9VUF9DT05TVU1FUiAmJgorCQkJKHVzYWdlLT5oaWQgJiBISURfVVNBR0UpID09IDB4MjM4KQorCQlyZXR1cm4gLTE7CisKKwkvKiBNYXAgd2hlZWwgZW11bGF0aW9uIHJlcG9ydHM6IDB4ZmZhMSA9IFVTQiwgMHhmZjEwID0gQlQgKi8KKwlpZiAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgPT0gMHhmZjEwMDAwMCB8fAorCSAgICAodXNhZ2UtPmhpZCAmIEhJRF9VU0FHRV9QQUdFKSA9PSAweGZmYTEwMDAwKSB7CisJCWZpZWxkLT5mbGFncyB8PSBISURfTUFJTl9JVEVNX1JFTEFUSVZFIHwgSElEX01BSU5fSVRFTV9WQVJJQUJMRTsKKwkJZmllbGQtPmxvZ2ljYWxfbWluaW11bSA9IC0xMjc7CisJCWZpZWxkLT5sb2dpY2FsX21heGltdW0gPSAxMjc7CisKKwkJc3dpdGNoICh1c2FnZS0+aGlkICYgSElEX1VTQUdFKSB7CisJCWNhc2UgMHgwMDAwOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9SRUwsIDB4MDYpOworCQkJcmV0dXJuIDE7CisJCWNhc2UgMHgwMDAxOgorCQkJaGlkX21hcF91c2FnZShoaSwgdXNhZ2UsIGJpdCwgbWF4LCBFVl9SRUwsIDB4MDgpOworCQkJcmV0dXJuIDE7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CiAKQEAgLTE0NSw2ICsxNzgsNyBAQAogCXN0cnVjdCBsZW5vdm9fZHJ2ZGF0YV9jcHRrYmQgKmNwdGtiZF9kYXRhID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOwogCiAJcmV0ID0gbGVub3ZvX3NlbmRfY21kX2NwdGtiZChoZGV2LCAweDA1LCBjcHRrYmRfZGF0YS0+Zm5fbG9jayk7CisJcmV0ID0gbGVub3ZvX3NlbmRfY21kX2NwdGtiZChoZGV2LCAweDAyLCBjcHRrYmRfZGF0YS0+c2Vuc2l0aXZpdHkpOwogCWlmIChyZXQpCiAJCWhpZF9lcnIoaGRldiwgIkZuLWxvY2sgc2V0dGluZyBmYWlsZWQ6ICVkXG4iLCByZXQpOwogfQpAQCAtMTc5LDEzICsyMTMsNTAgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGF0dHJfc2Vuc2l0aXZpdHlfc2hvd19jcHRrYmQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBoaWRfZGV2aWNlICpoZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGhpZF9kZXZpY2UsIGRldik7CisJc3RydWN0IGxlbm92b19kcnZkYXRhX2NwdGtiZCAqY3B0a2JkX2RhdGEgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwKKwkJY3B0a2JkX2RhdGEtPnNlbnNpdGl2aXR5KTsKK30KKworc3RhdGljIHNzaXplX3QgYXR0cl9zZW5zaXRpdml0eV9zdG9yZV9jcHRrYmQoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLAorCQlzaXplX3QgY291bnQpCit7CisJc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgaGlkX2RldmljZSwgZGV2KTsKKwlzdHJ1Y3QgbGVub3ZvX2RydmRhdGFfY3B0a2JkICpjcHRrYmRfZGF0YSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKKwlpbnQgdmFsdWU7CisKKwlpZiAoa3N0cnRvaW50KGJ1ZiwgMTAsICZ2YWx1ZSkgfHwgdmFsdWUgPCAxIHx8IHZhbHVlID4gMjU1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNwdGtiZF9kYXRhLT5zZW5zaXRpdml0eSA9IHZhbHVlOworCWxlbm92b19mZWF0dXJlc19zZXRfY3B0a2JkKGhkZXYpOworCisJcmV0dXJuIGNvdW50OworfQorCisKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9mbl9sb2NrX2NwdGtiZCA9CiAJX19BVFRSKGZuX2xvY2ssIFNfSVdVU1IgfCBTX0lSVUdPLAogCQkJYXR0cl9mbl9sb2NrX3Nob3dfY3B0a2JkLAogCQkJYXR0cl9mbl9sb2NrX3N0b3JlX2NwdGtiZCk7CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9zZW5zaXRpdml0eV9jcHRrYmQgPQorCV9fQVRUUihzZW5zaXRpdml0eSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlhdHRyX3NlbnNpdGl2aXR5X3Nob3dfY3B0a2JkLAorCQkJYXR0cl9zZW5zaXRpdml0eV9zdG9yZV9jcHRrYmQpOworCisKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpsZW5vdm9fYXR0cmlidXRlc19jcHRrYmRbXSA9IHsKIAkmZGV2X2F0dHJfZm5fbG9ja19jcHRrYmQuYXR0ciwKKwkmZGV2X2F0dHJfc2Vuc2l0aXZpdHlfY3B0a2JkLmF0dHIsCiAJTlVMTAogfTsKIApAQCAtNTk0LDggKzY2NSwxNCBAQAogCWlmIChyZXQpCiAJCWhpZF93YXJuKGhkZXYsICJGYWlsZWQgdG8gc3dpdGNoIEY3LzkvMTEgbW9kZTogJWRcbiIsIHJldCk7CiAKLQkvKiBUdXJuIEZuLUxvY2sgb24gYnkgZGVmYXVsdCAqLworCS8qIFN3aXRjaCBtaWRkbGUgYnV0dG9uIHRvIG5hdGl2ZSBtb2RlICovCisJcmV0ID0gbGVub3ZvX3NlbmRfY21kX2NwdGtiZChoZGV2LCAweDA5LCAweDAxKTsKKwlpZiAocmV0KQorCQloaWRfd2FybihoZGV2LCAiRmFpbGVkIHRvIHN3aXRjaCBtaWRkbGUgYnV0dG9uOiAlZFxuIiwgcmV0KTsKKworCS8qIFNldCBrZXlib2FyZCBzZXR0aW5ncyB0byBrbm93biBzdGF0ZSAqLwogCWNwdGtiZF9kYXRhLT5mbl9sb2NrID0gdHJ1ZTsKKwljcHRrYmRfZGF0YS0+c2Vuc2l0aXZpdHkgPSAweDA1OwogCWxlbm92b19mZWF0dXJlc19zZXRfY3B0a2JkKGhkZXYpOwogCiAJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZoZGV2LT5kZXYua29iaiwgJmxlbm92b19hdHRyX2dyb3VwX2NwdGtiZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtbGc0ZmYuYyBiL2RyaXZlcnMvaGlkL2hpZC1sZzRmZi5jCmluZGV4IDc4MzU3MTcuLmRiMGRkOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1sZzRmZi5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1sZzRmZi5jCkBAIC00OSwxMCArNDksNiBAQAogCiBzdGF0aWMgdm9pZCBoaWRfbGc0ZmZfc2V0X3JhbmdlX2RmcChzdHJ1Y3QgaGlkX2RldmljZSAqaGlkLCB1MTYgcmFuZ2UpOwogc3RhdGljIHZvaWQgaGlkX2xnNGZmX3NldF9yYW5nZV9nMjUoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgdTE2IHJhbmdlKTsKLXN0YXRpYyBzc2l6ZV90IGxnNGZmX3JhbmdlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKLXN0YXRpYyBzc2l6ZV90IGxnNGZmX3JhbmdlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKLQotc3RhdGljIERFVklDRV9BVFRSKHJhbmdlLCBTX0lSV1hVIHwgU19JUldYRyB8IFNfSVJPVEgsIGxnNGZmX3JhbmdlX3Nob3csIGxnNGZmX3JhbmdlX3N0b3JlKTsKIAogc3RydWN0IGxnNGZmX2RldmljZV9lbnRyeSB7CiAJX191MzIgcHJvZHVjdF9pZDsKQEAgLTQxNiw3ICs0MTIsOCBAQAogfQogCiAvKiBSZWFkIGN1cnJlbnQgcmFuZ2UgYW5kIGRpc3BsYXkgaXQgaW4gdGVybWluYWwgKi8KLXN0YXRpYyBzc2l6ZV90IGxnNGZmX3JhbmdlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgcmFuZ2Vfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjaGFyICpidWYpCiB7CiAJc3RydWN0IGhpZF9kZXZpY2UgKmhpZCA9IHRvX2hpZF9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbGc0ZmZfZGV2aWNlX2VudHJ5ICplbnRyeTsKQEAgLTQ0MSw3ICs0MzgsOCBAQAogCiAvKiBTZXQgcmFuZ2UgdG8gdXNlciBzcGVjaWZpZWQgdmFsdWUsIGNhbGwgYXBwcm9wcmlhdGUgZnVuY3Rpb24KICAqIGFjY29yZGluZyB0byB0aGUgdHlwZSBvZiB0aGUgd2hlZWwgKi8KLXN0YXRpYyBzc2l6ZV90IGxnNGZmX3JhbmdlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RhdGljIHNzaXplX3QgcmFuZ2Vfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWQgPSB0b19oaWRfZGV2aWNlKGRldik7CiAJc3RydWN0IGxnNGZmX2RldmljZV9lbnRyeSAqZW50cnk7CkBAIC00NzIsNiArNDcwLDcgQEAKIAogCXJldHVybiBjb3VudDsKIH0KK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyhyYW5nZSk7CiAKICNpZmRlZiBDT05GSUdfTEVEU19DTEFTUwogc3RhdGljIHZvaWQgbGc0ZmZfc2V0X2xlZHMoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgX191OCBsZWRzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLWxvZ2l0ZWNoLWhpZHBwLmMgYi9kcml2ZXJzL2hpZC9oaWQtbG9naXRlY2gtaGlkcHAuYwppbmRleCBhOTNjZWZlLi5lNzc2NThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC9oaWQtbG9naXRlY2gtaGlkcHAuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbG9naXRlY2gtaGlkcHAuYwpAQCAtODksNiArODksNyBAQAogCXN0cnVjdCBoaWRfZGV2aWNlICpoaWRfZGV2OwogCXN0cnVjdCBtdXRleCBzZW5kX211dGV4OwogCXZvaWQgKnNlbmRfcmVjZWl2ZV9idWY7CisJY2hhciAqbmFtZTsJCS8qIHdpbGwgbmV2ZXIgYmUgTlVMTCBhbmQgc2hvdWxkIG5vdCBiZSBmcmVlZCAqLwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CiAJYm9vbCBhbnN3ZXJfYXZhaWxhYmxlOwogCXU4IHByb3RvY29sX21ham9yOwpAQCAtMTA1LDYgKzEwNiw3IEBACiB9OwogCiAKKy8qIEhJRCsrIDEuMCBlcnJvciBjb2RlcyAqLwogI2RlZmluZSBISURQUF9FUlJPUgkJCQkweDhmCiAjZGVmaW5lIEhJRFBQX0VSUk9SX1NVQ0NFU1MJCQkweDAwCiAjZGVmaW5lIEhJRFBQX0VSUk9SX0lOVkFMSURfU1VCSUQJCTB4MDEKQEAgLTExOSw2ICsxMjEsOCBAQAogI2RlZmluZSBISURQUF9FUlJPUl9SRVFVRVNUX1VOQVZBSUxBQkxFCQkweDBhCiAjZGVmaW5lIEhJRFBQX0VSUk9SX0lOVkFMSURfUEFSQU1fVkFMVUUJCTB4MGIKICNkZWZpbmUgSElEUFBfRVJST1JfV1JPTkdfUElOX0NPREUJCTB4MGMKKy8qIEhJRCsrIDIuMCBlcnJvciBjb2RlcyAqLworI2RlZmluZSBISURQUDIwX0VSUk9SCQkJCTB4ZmYKIAogc3RhdGljIHZvaWQgaGlkcHBfY29ubmVjdF9ldmVudChzdHJ1Y3QgaGlkcHBfZGV2aWNlICpoaWRwcF9kZXYpOwogCkBAIC0xOTIsOSArMTk2LDE2IEBACiAJfQogCiAJaWYgKHJlc3BvbnNlLT5yZXBvcnRfaWQgPT0gUkVQT1JUX0lEX0hJRFBQX1NIT1JUICYmCi0JICAgIHJlc3BvbnNlLT5mYXAuZmVhdHVyZV9pbmRleCA9PSBISURQUF9FUlJPUikgeworCSAgICByZXNwb25zZS0+cmFwLnN1Yl9pZCA9PSBISURQUF9FUlJPUikgeworCQlyZXQgPSByZXNwb25zZS0+cmFwLnBhcmFtc1sxXTsKKwkJZGJnX2hpZCgiJXM6Z290IGhpZHBwIGVycm9yICUwMlhcbiIsIF9fZnVuY19fLCByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHJlc3BvbnNlLT5yZXBvcnRfaWQgPT0gUkVQT1JUX0lEX0hJRFBQX0xPTkcgJiYKKwkgICAgcmVzcG9uc2UtPmZhcC5mZWF0dXJlX2luZGV4ID09IEhJRFBQMjBfRVJST1IpIHsKIAkJcmV0ID0gcmVzcG9uc2UtPmZhcC5wYXJhbXNbMV07Ci0JCWRiZ19oaWQoIl9faGlkcHBfc2VuZF9yZXBvcnQgZ290IGhpZHBwIGVycm9yICUwMlhcbiIsIHJldCk7CisJCWRiZ19oaWQoIiVzOmdvdCBoaWRwcCAyLjAgZXJyb3IgJTAyWFxuIiwgX19mdW5jX18sIHJldCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTI3MSw3ICsyODIsOCBAQAogc3RhdGljIGlubGluZSBib29sIGhpZHBwX21hdGNoX2Vycm9yKHN0cnVjdCBoaWRwcF9yZXBvcnQgKnF1ZXN0aW9uLAogCQlzdHJ1Y3QgaGlkcHBfcmVwb3J0ICphbnN3ZXIpCiB7Ci0JcmV0dXJuIChhbnN3ZXItPmZhcC5mZWF0dXJlX2luZGV4ID09IEhJRFBQX0VSUk9SKSAmJgorCXJldHVybiAoKGFuc3dlci0+cmFwLnN1Yl9pZCA9PSBISURQUF9FUlJPUikgfHwKKwkgICAgKGFuc3dlci0+ZmFwLmZlYXR1cmVfaW5kZXggPT0gSElEUFAyMF9FUlJPUikpICYmCiAJICAgIChhbnN3ZXItPmZhcC5mdW5jaW5kZXhfY2xpZW50aWQgPT0gcXVlc3Rpb24tPmZhcC5mZWF0dXJlX2luZGV4KSAmJgogCSAgICAoYW5zd2VyLT5mYXAucGFyYW1zWzBdID09IHF1ZXN0aW9uLT5mYXAuZnVuY2luZGV4X2NsaWVudGlkKTsKIH0KQEAgLTkwMywyNCArOTE1LDI0IEBACiAJcmV0dXJuIDA7CiB9OwogCi1zdGF0aWMgdm9pZCB3dHBfY29ubmVjdChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgYm9vbCBjb25uZWN0ZWQpCitzdGF0aWMgaW50IHd0cF9jb25uZWN0KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBib29sIGNvbm5lY3RlZCkKIHsKIAlzdHJ1Y3QgaGlkcHBfZGV2aWNlICpoaWRwcCA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKIAlzdHJ1Y3Qgd3RwX2RhdGEgKndkID0gaGlkcHAtPnByaXZhdGVfZGF0YTsKIAlpbnQgcmV0OwogCiAJaWYgKCFjb25uZWN0ZWQpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAlpZiAoIXdkLT54X3NpemUpIHsKIAkJcmV0ID0gd3RwX2dldF9jb25maWcoaGlkcHApOwogCQlpZiAocmV0KSB7CiAJCQloaWRfZXJyKGhkZXYsICJDYW4gbm90IGdldCB3dHAgY29uZmlnOiAlZFxuIiwgcmV0KTsKLQkJCXJldHVybjsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKLQloaWRwcF90b3VjaHBhZF9zZXRfcmF3X3JlcG9ydF9zdGF0ZShoaWRwcCwgd2QtPm10X2ZlYXR1cmVfaW5kZXgsCisJcmV0dXJuIGhpZHBwX3RvdWNocGFkX3NldF9yYXdfcmVwb3J0X3N0YXRlKGhpZHBwLCB3ZC0+bXRfZmVhdHVyZV9pbmRleCwKIAkJCXRydWUsIHRydWUpOwogfQogCkBAIC05NjUsNyArOTc3LDcgQEAKIAogCS8qCiAJICogSWYgdGhlIG11dGV4IGlzIGxvY2tlZCB0aGVuIHdlIGhhdmUgYSBwZW5kaW5nIGFuc3dlciBmcm9tIGEKLQkgKiBwcmV2aW91bHNseSBzZW50IGNvbW1hbmQKKwkgKiBwcmV2aW91c2x5IHNlbnQgY29tbWFuZC4KIAkgKi8KIAlpZiAodW5saWtlbHkobXV0ZXhfaXNfbG9ja2VkKCZoaWRwcC0+c2VuZF9tdXRleCkpKSB7CiAJCS8qCkBAIC05OTYsOSArMTAwOCw2IEBACiAJCXJldHVybiAxOwogCX0KIAotCWlmIChoaWRwcC0+cXVpcmtzICYgSElEUFBfUVVJUktfQ0xBU1NfV1RQKQotCQlyZXR1cm4gd3RwX3Jhd19ldmVudChoaWRwcC0+aGlkX2RldiwgZGF0YSwgc2l6ZSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAwNiw3ICsxMDE1LDkgQEAKIAkJdTggKmRhdGEsIGludCBzaXplKQogewogCXN0cnVjdCBoaWRwcF9kZXZpY2UgKmhpZHBwID0gaGlkX2dldF9kcnZkYXRhKGhkZXYpOworCWludCByZXQgPSAwOwogCisJLyogR2VuZXJpYyBISUQrKyBwcm9jZXNzaW5nLiAqLwogCXN3aXRjaCAoZGF0YVswXSkgewogCWNhc2UgUkVQT1JUX0lEX0hJRFBQX0xPTkc6CiAJCWlmIChzaXplICE9IEhJRFBQX1JFUE9SVF9MT05HX0xFTkdUSCkgewpAQCAtMTAxNCwxNiArMTAyNSwyMyBAQAogCQkJCXNpemUpOwogCQkJcmV0dXJuIDE7CiAJCX0KLQkJcmV0dXJuIGhpZHBwX3Jhd19oaWRwcF9ldmVudChoaWRwcCwgZGF0YSwgc2l6ZSk7CisJCXJldCA9IGhpZHBwX3Jhd19oaWRwcF9ldmVudChoaWRwcCwgZGF0YSwgc2l6ZSk7CisJCWJyZWFrOwogCWNhc2UgUkVQT1JUX0lEX0hJRFBQX1NIT1JUOgogCQlpZiAoc2l6ZSAhPSBISURQUF9SRVBPUlRfU0hPUlRfTEVOR1RIKSB7CiAJCQloaWRfZXJyKGhkZXYsICJyZWNlaXZlZCBoaWQrKyByZXBvcnQgb2YgYmFkIHNpemUgKCVkKSIsCiAJCQkJc2l6ZSk7CiAJCQlyZXR1cm4gMTsKIAkJfQotCQlyZXR1cm4gaGlkcHBfcmF3X2hpZHBwX2V2ZW50KGhpZHBwLCBkYXRhLCBzaXplKTsKKwkJcmV0ID0gaGlkcHBfcmF3X2hpZHBwX2V2ZW50KGhpZHBwLCBkYXRhLCBzaXplKTsKKwkJYnJlYWs7CiAJfQogCisJLyogSWYgbm8gcmVwb3J0IGlzIGF2YWlsYWJsZSBmb3IgZnVydGhlciBwcm9jZXNzaW5nLCBza2lwIGNhbGxpbmcKKwkgKiByYXdfZXZlbnQgb2Ygc3ViY2xhc3Nlcy4gKi8KKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKIAlpZiAoaGlkcHAtPnF1aXJrcyAmIEhJRFBQX1FVSVJLX0NMQVNTX1dUUCkKIAkJcmV0dXJuIHd0cF9yYXdfZXZlbnQoaGRldiwgZGF0YSwgc2l6ZSk7CiAKQEAgLTEwNzAsNiArMTA4OCw3IEBACiBzdGF0aWMgc3RydWN0IGlucHV0X2RldiAqaGlkcHBfYWxsb2NhdGVfaW5wdXQoc3RydWN0IGhpZF9kZXZpY2UgKmhkZXYpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gZGV2bV9pbnB1dF9hbGxvY2F0ZV9kZXZpY2UoJmhkZXYtPmRldik7CisJc3RydWN0IGhpZHBwX2RldmljZSAqaGlkcHAgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CiAKIAlpZiAoIWlucHV0X2RldikKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMDc4LDcgKzEwOTcsNyBAQAogCWlucHV0X2Rldi0+b3BlbiA9IGhpZHBwX2lucHV0X29wZW47CiAJaW5wdXRfZGV2LT5jbG9zZSA9IGhpZHBwX2lucHV0X2Nsb3NlOwogCi0JaW5wdXRfZGV2LT5uYW1lID0gaGRldi0+bmFtZTsKKwlpbnB1dF9kZXYtPm5hbWUgPSBoaWRwcC0+bmFtZTsKIAlpbnB1dF9kZXYtPnBoeXMgPSBoZGV2LT5waHlzOwogCWlucHV0X2Rldi0+dW5pcSA9IGhkZXYtPnVuaXE7CiAJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gaGRldi0+YnVzOwpAQCAtMTA5OCw4ICsxMTE3LDExIEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CiAJY2hhciAqbmFtZSwgKmRldm1fbmFtZTsKIAotCWlmIChoaWRwcC0+cXVpcmtzICYgSElEUFBfUVVJUktfQ0xBU1NfV1RQKQotCQl3dHBfY29ubmVjdChoZGV2LCBjb25uZWN0ZWQpOworCWlmIChoaWRwcC0+cXVpcmtzICYgSElEUFBfUVVJUktfQ0xBU1NfV1RQKSB7CisJCXJldCA9IHd0cF9jb25uZWN0KGhkZXYsIGNvbm5lY3RlZCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm47CisJfQogCiAJaWYgKCFjb25uZWN0ZWQgfHwgaGlkcHAtPmRlbGF5ZWRfaW5wdXQpCiAJCXJldHVybjsKQEAgLTExMTcsMjIgKzExMzksMjggQEAKIAloaWRfaW5mbyhoZGV2LCAiSElEKysgJXUuJXUgZGV2aWNlIGNvbm5lY3RlZC5cbiIsCiAJCSBoaWRwcC0+cHJvdG9jb2xfbWFqb3IsIGhpZHBwLT5wcm90b2NvbF9taW5vcik7CiAKKwlpZiAoIWhpZHBwLT5uYW1lIHx8IGhpZHBwLT5uYW1lID09IGhkZXYtPm5hbWUpIHsKKwkJbmFtZSA9IGhpZHBwX2dldF9kZXZpY2VfbmFtZShoaWRwcCk7CisJCWlmICghbmFtZSkgeworCQkJaGlkX2VycihoZGV2LAorCQkJCSJ1bmFibGUgdG8gcmV0cmlldmUgdGhlIG5hbWUgb2YgdGhlIGRldmljZSIpOworCQkJcmV0dXJuOworCQl9CisKKwkJZGV2bV9uYW1lID0gZGV2bV9rYXNwcmludGYoJmhkZXYtPmRldiwgR0ZQX0tFUk5FTCwgIiVzIiwgbmFtZSk7CisJCWtmcmVlKG5hbWUpOworCQlpZiAoIWRldm1fbmFtZSkKKwkJCXJldHVybjsKKworCQloaWRwcC0+bmFtZSA9IGRldm1fbmFtZTsKKwl9CisKIAlpbnB1dCA9IGhpZHBwX2FsbG9jYXRlX2lucHV0KGhkZXYpOwogCWlmICghaW5wdXQpIHsKIAkJaGlkX2VycihoZGV2LCAiY2Fubm90IGFsbG9jYXRlIG5ldyBpbnB1dCBkZXZpY2U6ICVkXG4iLCByZXQpOwogCQlyZXR1cm47CiAJfQogCi0JbmFtZSA9IGhpZHBwX2dldF9kZXZpY2VfbmFtZShoaWRwcCk7Ci0JaWYgKCFuYW1lKSB7Ci0JCWhpZF9lcnIoaGRldiwgInVuYWJsZSB0byByZXRyaWV2ZSB0aGUgbmFtZSBvZiB0aGUgZGV2aWNlIik7Ci0JfSBlbHNlIHsKLQkJZGV2bV9uYW1lID0gZGV2bV9rYXNwcmludGYoJmhkZXYtPmRldiwgR0ZQX0tFUk5FTCwgIiVzIiwgbmFtZSk7Ci0JCWlmIChkZXZtX25hbWUpCi0JCQlpbnB1dC0+bmFtZSA9IGRldm1fbmFtZTsKLQkJa2ZyZWUobmFtZSk7Ci0JfQotCiAJaGlkcHBfcG9wdWxhdGVfaW5wdXQoaGlkcHAsIGlucHV0LCBmYWxzZSk7CiAKIAlyZXQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXQpOwpAQCAtMTE1NSw2ICsxMTgzLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAloaWRwcC0+aGlkX2RldiA9IGhkZXY7CisJaGlkcHAtPm5hbWUgPSBoZGV2LT5uYW1lOwogCWhpZF9zZXRfZHJ2ZGF0YShoZGV2LCBoaWRwcCk7CiAKIAloaWRwcC0+cXVpcmtzID0gaWQtPmRyaXZlcl9kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9oaWQvaGlkLW1pY3Jvc29mdC5jIGIvZHJpdmVycy9oaWQvaGlkLW1pY3Jvc29mdC5jCmluZGV4IGNhY2RhNDMuLmZiYWVhNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL2hpZC1taWNyb3NvZnQuYworKysgYi9kcml2ZXJzL2hpZC9oaWQtbWljcm9zb2Z0LmMKQEAgLTI3Niw2ICsyNzYsOCBAQAogCQkuZHJpdmVyX2RhdGEgPSBNU19EVVBMSUNBVEVfVVNBR0VTIH0sCiAJeyBISURfVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01JQ1JPU09GVCwgVVNCX0RFVklDRV9JRF9NU19UWVBFX0NPVkVSXzMpLAogCQkuZHJpdmVyX2RhdGEgPSBNU19ISURJTlBVVCB9LAorCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfTVNfVFlQRV9DT1ZFUl8zX0pQKSwKKwkJLmRyaXZlcl9kYXRhID0gTVNfSElESU5QVVQgfSwKIAogCXsgSElEX0JMVUVUT09USF9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfTVNfUFJFU0VOVEVSXzhLX0JUKSwKIAkJLmRyaXZlcl9kYXRhID0gTVNfUFJFU0VOVEVSIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC9oaWQtcm1pLmMgYi9kcml2ZXJzL2hpZC9oaWQtcm1pLmMKaW5kZXggYjUxMjAwZi4uNDlkNGZlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkLXJtaS5jCisrKyBiL2RyaXZlcnMvaGlkL2hpZC1ybWkuYwpAQCAtMzMsNiArMzMsMTAgQEAKICNkZWZpbmUgUk1JX1JFQURfREFUQV9QRU5ESU5HCQlCSVQoMSkKICNkZWZpbmUgUk1JX1NUQVJURUQJCQlCSVQoMikKIAorLyogZGV2aWNlIGZsYWdzICovCisjZGVmaW5lIFJNSV9ERVZJQ0UJCQlCSVQoMCkKKyNkZWZpbmUgUk1JX0RFVklDRV9IQVNfUEhZU19CVVRUT05TCUJJVCgxKQorCiBlbnVtIHJtaV9tb2RlX3R5cGUgewogCVJNSV9NT0RFX09GRgkJCT0gMCwKIAlSTUlfTU9ERV9BVFROX1JFUE9SVFMJCT0gMSwKQEAgLTExOCw2ICsxMjIsOCBAQAogCiAJc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3dvcms7CiAJc3RydWN0IGhpZF9kZXZpY2UgKmhkZXY7CisKKwl1bnNpZ25lZCBsb25nIGRldmljZV9mbGFnczsKIH07CiAKICNkZWZpbmUgUk1JX1BBR0UoYWRkcikgKCgoYWRkcikgPj4gOCkgJiAweGZmKQpAQCAtNDUyLDkgKzQ1OCwzMiBAQAogCQlyZXR1cm4gcm1pX3JlYWRfZGF0YV9ldmVudChoZGV2LCBkYXRhLCBzaXplKTsKIAljYXNlIFJNSV9BVFROX1JFUE9SVF9JRDoKIAkJcmV0dXJuIHJtaV9pbnB1dF9ldmVudChoZGV2LCBkYXRhLCBzaXplKTsKLQljYXNlIFJNSV9NT1VTRV9SRVBPUlRfSUQ6CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm1pX2V2ZW50KHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LCBzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwKKwkJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCBfX3MzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgcm1pX2RhdGEgKmRhdGEgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwlpZiAoKGRhdGEtPmRldmljZV9mbGFncyAmIFJNSV9ERVZJQ0UpICYmCisJICAgIChmaWVsZC0+YXBwbGljYXRpb24gPT0gSElEX0dEX1BPSU5URVIgfHwKKwkgICAgZmllbGQtPmFwcGxpY2F0aW9uID09IEhJRF9HRF9NT1VTRSkpIHsKKwkJaWYgKGRhdGEtPmRldmljZV9mbGFncyAmIFJNSV9ERVZJQ0VfSEFTX1BIWVNfQlVUVE9OUykgeworCQkJaWYgKCh1c2FnZS0+aGlkICYgSElEX1VTQUdFX1BBR0UpID09IEhJRF9VUF9CVVRUT04pCisJCQkJcmV0dXJuIDA7CisKKwkJCWlmICgodXNhZ2UtPmhpZCA9PSBISURfR0RfWCB8fCB1c2FnZS0+aGlkID09IEhJRF9HRF9ZKQorCQkJICAgICYmICF2YWx1ZSkKKwkJCQlyZXR1cm4gMTsKKwkJfQorCiAJCXJtaV9zY2hlZHVsZV9yZXNldChoZGV2KTsKLQkJYnJlYWs7CisJCXJldHVybiAxOwogCX0KIAogCXJldHVybiAwOwpAQCAtODU2LDYgKzg4NSw5IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuOwogCisJaWYgKCEoZGF0YS0+ZGV2aWNlX2ZsYWdzICYgUk1JX0RFVklDRSkpCisJCXJldHVybjsKKwogCS8qIEFsbG93IGluY29taW5nIGhpZCByZXBvcnRzICovCiAJaGlkX2RldmljZV9pb19zdGFydChoZGV2KTsKIApAQCAtOTE0LDggKzk0NiwzOCBAQAogCQlzdHJ1Y3QgaGlkX2lucHV0ICpoaSwgc3RydWN0IGhpZF9maWVsZCAqZmllbGQsCiAJCXN0cnVjdCBoaWRfdXNhZ2UgKnVzYWdlLCB1bnNpZ25lZCBsb25nICoqYml0LCBpbnQgKm1heCkKIHsKLQkvKiB3ZSB3YW50IHRvIG1ha2UgSElEIGlnbm9yZSB0aGUgYWR2ZXJ0aXNlZCBISUQgY29sbGVjdGlvbiAqLwotCXJldHVybiAtMTsKKwlzdHJ1Y3Qgcm1pX2RhdGEgKmRhdGEgPSBoaWRfZ2V0X2RydmRhdGEoaGRldik7CisKKwkvKgorCSAqIHdlIHdhbnQgdG8gbWFrZSBISUQgaWdub3JlIHRoZSBhZHZlcnRpc2VkIEhJRCBjb2xsZWN0aW9uCisJICogZm9yIFJNSSBkZWl2Y2VzCisJICovCisJaWYgKGRhdGEtPmRldmljZV9mbGFncyAmIFJNSV9ERVZJQ0UpIHsKKwkJaWYgKChkYXRhLT5kZXZpY2VfZmxhZ3MgJiBSTUlfREVWSUNFX0hBU19QSFlTX0JVVFRPTlMpICYmCisJCSAgICAoKHVzYWdlLT5oaWQgJiBISURfVVNBR0VfUEFHRSkgPT0gSElEX1VQX0JVVFRPTikpCisJCQlyZXR1cm4gMDsKKworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm1pX2NoZWNrX3ZhbGlkX3JlcG9ydF9pZChzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgdW5zaWduZWQgdHlwZSwKKwkJdW5zaWduZWQgaWQsIHN0cnVjdCBoaWRfcmVwb3J0ICoqcmVwb3J0KQoreworCWludCBpOworCisJKnJlcG9ydCA9IGhkZXYtPnJlcG9ydF9lbnVtW3R5cGVdLnJlcG9ydF9pZF9oYXNoW2lkXTsKKwlpZiAoKnJlcG9ydCkgeworCQlmb3IgKGkgPSAwOyBpIDwgKCpyZXBvcnQpLT5tYXhmaWVsZDsgaSsrKSB7CisJCQl1bnNpZ25lZCBhcHAgPSAoKnJlcG9ydCktPmZpZWxkW2ldLT5hcHBsaWNhdGlvbjsKKwkJCWlmICgoYXBwICYgSElEX1VTQUdFX1BBR0UpID49IEhJRF9VUF9NU1ZFTkRPUikKKwkJCQlyZXR1cm4gMTsKKwkJfQorCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJtaV9wcm9iZShzdHJ1Y3QgaGlkX2RldmljZSAqaGRldiwgY29uc3Qgc3RydWN0IGhpZF9kZXZpY2VfaWQgKmlkKQpAQCAtOTI1LDYgKzk4Nyw3IEBACiAJc2l6ZV90IGFsbG9jX3NpemU7CiAJc3RydWN0IGhpZF9yZXBvcnQgKmlucHV0X3JlcG9ydDsKIAlzdHJ1Y3QgaGlkX3JlcG9ydCAqb3V0cHV0X3JlcG9ydDsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqZmVhdHVyZV9yZXBvcnQ7CiAKIAlkYXRhID0gZGV2bV9remFsbG9jKCZoZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3Qgcm1pX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRhdGEpCkBAIC05NDMsMjcgKzEwMDYsMzcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpbnB1dF9yZXBvcnQgPSBoZGV2LT5yZXBvcnRfZW51bVtISURfSU5QVVRfUkVQT1JUXQotCQkJLnJlcG9ydF9pZF9oYXNoW1JNSV9BVFROX1JFUE9SVF9JRF07Ci0JaWYgKCFpbnB1dF9yZXBvcnQpIHsKLQkJaGlkX2VycihoZGV2LCAiZGV2aWNlIGRvZXMgbm90IGhhdmUgZXhwZWN0ZWQgaW5wdXQgcmVwb3J0XG4iKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJcmV0dXJuIHJldDsKKwlpZiAoaWQtPmRyaXZlcl9kYXRhKQorCQlkYXRhLT5kZXZpY2VfZmxhZ3MgPSBpZC0+ZHJpdmVyX2RhdGE7CisKKwkvKgorCSAqIENoZWNrIGZvciB0aGUgUk1JIHNwZWNpZmljIHJlcG9ydCBpZHMuIElmIHRoZXkgYXJlIG1pc2lzbmcKKwkgKiBzaW1wbHkgcmV0dXJuIGFuZCBsZXQgdGhlIGV2ZW50cyBiZSBwcm9jZXNzZWQgYnkgaGlkLWlucHV0CisJICovCisJaWYgKCFybWlfY2hlY2tfdmFsaWRfcmVwb3J0X2lkKGhkZXYsIEhJRF9GRUFUVVJFX1JFUE9SVCwKKwkgICAgUk1JX1NFVF9STUlfTU9ERV9SRVBPUlRfSUQsICZmZWF0dXJlX3JlcG9ydCkpIHsKKwkJaGlkX2RiZyhoZGV2LCAiZGV2aWNlIGRvZXMgbm90IGhhdmUgc2V0IG1vZGUgZmVhdHVyZSByZXBvcnRcbiIpOworCQlnb3RvIHN0YXJ0OwogCX0KIAotCWRhdGEtPmlucHV0X3JlcG9ydF9zaXplID0gKGlucHV0X3JlcG9ydC0+c2l6ZSA+PiAzKSArIDEgLyogcmVwb3J0IGlkICovOwotCi0Jb3V0cHV0X3JlcG9ydCA9IGhkZXYtPnJlcG9ydF9lbnVtW0hJRF9PVVRQVVRfUkVQT1JUXQotCQkJLnJlcG9ydF9pZF9oYXNoW1JNSV9XUklURV9SRVBPUlRfSURdOwotCWlmICghb3V0cHV0X3JlcG9ydCkgewotCQloaWRfZXJyKGhkZXYsICJkZXZpY2UgZG9lcyBub3QgaGF2ZSBleHBlY3RlZCBvdXRwdXQgcmVwb3J0XG4iKTsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJcmV0dXJuIHJldDsKKwlpZiAoIXJtaV9jaGVja192YWxpZF9yZXBvcnRfaWQoaGRldiwgSElEX0lOUFVUX1JFUE9SVCwKKwkgICAgUk1JX0FUVE5fUkVQT1JUX0lELCAmaW5wdXRfcmVwb3J0KSkgeworCQloaWRfZGJnKGhkZXYsICJkZXZpY2UgZG9lcyBub3QgaGF2ZSBhdHRlbnRpb24gaW5wdXQgcmVwb3J0XG4iKTsKKwkJZ290byBzdGFydDsKIAl9CiAKLQlkYXRhLT5vdXRwdXRfcmVwb3J0X3NpemUgPSAob3V0cHV0X3JlcG9ydC0+c2l6ZSA+PiAzKQotCQkJCQkrIDEgLyogcmVwb3J0IGlkICovOworCWRhdGEtPmlucHV0X3JlcG9ydF9zaXplID0gaGlkX3JlcG9ydF9sZW4oaW5wdXRfcmVwb3J0KTsKIAorCWlmICghcm1pX2NoZWNrX3ZhbGlkX3JlcG9ydF9pZChoZGV2LCBISURfT1VUUFVUX1JFUE9SVCwKKwkgICAgUk1JX1dSSVRFX1JFUE9SVF9JRCwgJm91dHB1dF9yZXBvcnQpKSB7CisJCWhpZF9kYmcoaGRldiwKKwkJCSJkZXZpY2UgZG9lcyBub3QgaGF2ZSBybWkgd3JpdGUgb3V0cHV0IHJlcG9ydFxuIik7CisJCWdvdG8gc3RhcnQ7CisJfQorCisJZGF0YS0+b3V0cHV0X3JlcG9ydF9zaXplID0gaGlkX3JlcG9ydF9sZW4ob3V0cHV0X3JlcG9ydCk7CisKKwlkYXRhLT5kZXZpY2VfZmxhZ3MgfD0gUk1JX0RFVklDRTsKIAlhbGxvY19zaXplID0gZGF0YS0+b3V0cHV0X3JlcG9ydF9zaXplICsgZGF0YS0+aW5wdXRfcmVwb3J0X3NpemU7CiAKIAlkYXRhLT53cml0ZVJlcG9ydCA9IGRldm1fa3phbGxvYygmaGRldi0+ZGV2LCBhbGxvY19zaXplLCBHRlBfS0VSTkVMKTsKQEAgLTk3OCwxMyArMTA1MSwxNSBAQAogCiAJbXV0ZXhfaW5pdCgmZGF0YS0+cGFnZV9tdXRleCk7CiAKK3N0YXJ0OgogCXJldCA9IGhpZF9od19zdGFydChoZGV2LCBISURfQ09OTkVDVF9ERUZBVUxUKTsKIAlpZiAocmV0KSB7CiAJCWhpZF9lcnIoaGRldiwgImh3IHN0YXJ0IGZhaWxlZFxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKCF0ZXN0X2JpdChSTUlfU1RBUlRFRCwgJmRhdGEtPmZsYWdzKSkKKwlpZiAoKGRhdGEtPmRldmljZV9mbGFncyAmIFJNSV9ERVZJQ0UpICYmCisJICAgICF0ZXN0X2JpdChSTUlfU1RBUlRFRCwgJmRhdGEtPmZsYWdzKSkKIAkJLyoKIAkJICogVGhlIGRldmljZSBtYXliZSBpbiB0aGUgYm9vdGxvYWRlciBpZiBybWlfaW5wdXRfY29uZmlndXJlZAogCQkgKiBmYWlsZWQgdG8gZmluZCBGMTEgaW4gdGhlIFBEVC4gUHJpbnQgYW4gZXJyb3IsIGJ1dCBkb24ndApAQCAtMTAwNyw2ICsxMDgyLDggQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBoaWRfZGV2aWNlX2lkIHJtaV9pZFtdID0geworCXsgSElEX1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9SQVpFUiwgVVNCX0RFVklDRV9JRF9SQVpFUl9CTEFERV8xNCksCisJCS5kcml2ZXJfZGF0YSA9IFJNSV9ERVZJQ0VfSEFTX1BIWVNfQlVUVE9OUyB9LAogCXsgSElEX0RFVklDRShISURfQlVTX0FOWSwgSElEX0dST1VQX1JNSSwgSElEX0FOWV9JRCwgSElEX0FOWV9JRCkgfSwKIAl7IH0KIH07CkBAIC0xMDE3LDYgKzEwOTQsNyBAQAogCS5pZF90YWJsZQkJPSBybWlfaWQsCiAJLnByb2JlCQkJPSBybWlfcHJvYmUsCiAJLnJlbW92ZQkJCT0gcm1pX3JlbW92ZSwKKwkuZXZlbnQJCQk9IHJtaV9ldmVudCwKIAkucmF3X2V2ZW50CQk9IHJtaV9yYXdfZXZlbnQsCiAJLmlucHV0X21hcHBpbmcJCT0gcm1pX2lucHV0X21hcHBpbmcsCiAJLmlucHV0X2NvbmZpZ3VyZWQJPSBybWlfaW5wdXRfY29uZmlndXJlZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9NYWtlZmlsZSBiL2RyaXZlcnMvaGlkL3VzYmhpZC9NYWtlZmlsZQppbmRleCBkYjNjZjMxLi44OTBmMjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL01ha2VmaWxlCkBAIC0yLDE3ICsyLDkgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBVU0IgaW5wdXQgZHJpdmVycwogIwogCi0jIE11bHRpcGFydCBvYmplY3RzLgogdXNiaGlkLXkJOj0gaGlkLWNvcmUubyBoaWQtcXVpcmtzLm8KLQotIyBPcHRpb25hbCBwYXJ0cyBvZiBtdWx0aXBhcnQgb2JqZWN0cy4KLQotaWZlcSAoJChDT05GSUdfVVNCX0hJRERFVikseSkKLQl1c2JoaWQteQkrPSBoaWRkZXYubwotZW5kaWYKLWlmZXEgKCQoQ09ORklHX0hJRF9QSUQpLHkpCi0JdXNiaGlkLXkJKz0gaGlkLXBpZGZmLm8KLWVuZGlmCit1c2JoaWQtJChDT05GSUdfVVNCX0hJRERFVikJKz0gaGlkZGV2Lm8KK3VzYmhpZC0kKENPTkZJR19ISURfUElEKQkrPSBoaWQtcGlkZmYubwogCiBvYmotJChDT05GSUdfVVNCX0hJRCkJCSs9IHVzYmhpZC5vCiBvYmotJChDT05GSUdfVVNCX0tCRCkJCSs9IHVzYmtiZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXBpZGZmLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXBpZGZmLmMKaW5kZXggMTBiNjE2Ny4uMGI1MzFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1waWRmZi5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtcGlkZmYuYwpAQCAtMTI1Miw2ICsxMjUyLDggQEAKIAogCXBpZGZmLT5oaWQgPSBoaWQ7CiAKKwloaWRfZGV2aWNlX2lvX3N0YXJ0KGhpZCk7CisKIAlwaWRmZl9maW5kX3JlcG9ydHMoaGlkLCBISURfT1VUUFVUX1JFUE9SVCwgcGlkZmYpOwogCXBpZGZmX2ZpbmRfcmVwb3J0cyhoaWQsIEhJRF9GRUFUVVJFX1JFUE9SVCwgcGlkZmYpOwogCkBAIC0xMzE1LDkgKzEzMTcsMTMgQEAKIAogCWhpZF9pbmZvKGRldiwgIkZvcmNlIGZlZWRiYWNrIGZvciBVU0IgSElEIFBJRCBkZXZpY2VzIGJ5IEFuc3NpIEhhbm51bGEgPGFuc3NpLmhhbm51bGFAZ21haWwuY29tPlxuIik7CiAKKwloaWRfZGV2aWNlX2lvX3N0b3AoaGlkKTsKKwogCXJldHVybiAwOwogCiAgZmFpbDoKKwloaWRfZGV2aWNlX2lvX3N0b3AoaGlkKTsKKwogCWtmcmVlKHBpZGZmKTsKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYwppbmRleCBiMjdiM2QzLi45YmU5OWE2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1xdWlya3MuYworKysgYi9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLXF1aXJrcy5jCkBAIC04MCw2ICs4MCw3IEBACiAJeyBVU0JfVkVORE9SX0lEX0ZSRUVTQ0FMRSwgVVNCX0RFVklDRV9JRF9GUkVFU0NBTEVfTVgyOCwgSElEX1FVSVJLX05PR0VUIH0sCiAJeyBVU0JfVkVORE9SX0lEX01HRSwgVVNCX0RFVklDRV9JRF9NR0VfVVBTLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfTUlDUk9TT0ZULCBVU0JfREVWSUNFX0lEX01TX1RZUEVfQ09WRVJfMywgSElEX1FVSVJLX05PX0lOSVRfUkVQT1JUUyB9LAorCXsgVVNCX1ZFTkRPUl9JRF9NSUNST1NPRlQsIFVTQl9ERVZJQ0VfSURfTVNfVFlQRV9DT1ZFUl8zX0pQLCBISURfUVVJUktfTk9fSU5JVF9SRVBPUlRTIH0sCiAJeyBVU0JfVkVORE9SX0lEX01TSSwgVVNCX0RFVklDRV9JRF9NU0lfR1Q2ODNSX0xFRF9QQU5FTCwgSElEX1FVSVJLX05PX0lOSVRfUkVQT1JUUyB9LAogCXsgVVNCX1ZFTkRPUl9JRF9ORVhJTywgVVNCX0RFVklDRV9JRF9ORVhJT19NVUxUSVRPVUNIX1BUSTA3NTAsIEhJRF9RVUlSS19OT19JTklUX1JFUE9SVFMgfSwKIAl7IFVTQl9WRU5ET1JfSURfTk9WQVRFSywgVVNCX0RFVklDRV9JRF9OT1ZBVEVLX01PVVNFLCBISURfUVVJUktfTk9fSU5JVF9SRVBPUlRTIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC93YWNvbV9zeXMuYyBiL2RyaXZlcnMvaGlkL3dhY29tX3N5cy5jCmluZGV4IDY1NDIwMjkuLmYwNTY4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3dhY29tX3N5cy5jCisrKyBiL2RyaXZlcnMvaGlkL3dhY29tX3N5cy5jCkBAIC0xNzMsMTAgKzE3Myw4IEBACiB7CiAJc3RydWN0IHdhY29tICp3YWNvbSA9IGhpZF9nZXRfZHJ2ZGF0YShoZGV2KTsKIAlzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKmZlYXR1cmVzID0gJndhY29tLT53YWNvbV93YWMuZmVhdHVyZXM7Ci0JYm9vbCBmaW5nZXIgPSAoZmllbGQtPmxvZ2ljYWwgPT0gSElEX0RHX0ZJTkdFUikgfHwKLQkJICAgICAgKGZpZWxkLT5waHlzaWNhbCA9PSBISURfREdfRklOR0VSKTsKLQlib29sIHBlbiA9IChmaWVsZC0+bG9naWNhbCA9PSBISURfREdfU1RZTFVTKSB8fAotCQkgICAoZmllbGQtPnBoeXNpY2FsID09IEhJRF9ER19TVFlMVVMpOworCWJvb2wgZmluZ2VyID0gV0FDT01fRklOR0VSX0ZJRUxEKGZpZWxkKTsKKwlib29sIHBlbiA9IFdBQ09NX1BFTl9GSUVMRChmaWVsZCk7CiAKIAkvKgogCSogUmVxdWlyaW5nIFN0eWx1cyBVc2FnZSB3aWxsIGlnbm9yZSBib290IG1vdXNlCkBAIC00MDUsNiArNDAzLDkgQEAKIAkJZWxzZSBpZiAoZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fMjRIRFQgfHwgZmVhdHVyZXMtPnR5cGUgPT0gQ0lOVElRX0hZQlJJRCkgewogCQkJcmV0dXJuIHdhY29tX3NldF9kZXZpY2VfbW9kZShoZGV2LCAxOCwgMywgMik7CiAJCX0KKwkJZWxzZSBpZiAoZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fMjdRSERUKSB7CisJCQlyZXR1cm4gd2Fjb21fc2V0X2RldmljZV9tb2RlKGhkZXYsIDEzMSwgMywgMik7CisJCX0KIAl9IGVsc2UgaWYgKGZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9PSBCVE5fVE9PTF9QRU4pIHsKIAkJaWYgKGZlYXR1cmVzLT50eXBlIDw9IEJBTUJPT19QVCAmJiBmZWF0dXJlcy0+dHlwZSAhPSBXSVJFTEVTUykgewogCQkJcmV0dXJuIHdhY29tX3NldF9kZXZpY2VfbW9kZShoZGV2LCAyLCAyLCAyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3dhY29tX3dhYy5jIGIvZHJpdmVycy9oaWQvd2Fjb21fd2FjLmMKaW5kZXggYWM3NDQ3Yy4uMWE2NTA3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvd2Fjb21fd2FjLmMKKysrIGIvZHJpdmVycy9oaWQvd2Fjb21fd2FjLmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlICJ3YWNvbV93YWMuaCIKICNpbmNsdWRlICJ3YWNvbS5oIgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L210Lmg+Ci0jaW5jbHVkZSA8bGludXgvaGlkLmg+CiAKIC8qIHJlc29sdXRpb24gZm9yIHBlbmFibGVkIGRldmljZXMgKi8KICNkZWZpbmUgV0FDT01fUExfUkVTCQkyMApAQCAtNDQ0LDkgKzQ0Myw2IEBACiAKIAkvKiBFbnRlciByZXBvcnQgKi8KIAlpZiAoKGRhdGFbMV0gJiAweGZjKSA9PSAweGMwKSB7Ci0JCWlmIChmZWF0dXJlcy0+cXVpcmtzICYgV0FDT01fUVVJUktfTVVMVElfSU5QVVQpCi0JCQl3YWNvbS0+c2hhcmVkLT5zdHlsdXNfaW5fcHJveGltaXR5ID0gdHJ1ZTsKLQogCQkvKiBzZXJpYWwgbnVtYmVyIG9mIHRoZSB0b29sICovCiAJCXdhY29tLT5zZXJpYWxbaWR4XSA9ICgoZGF0YVszXSAmIDB4MGYpIDw8IDI4KSArCiAJCQkoZGF0YVs0XSA8PCAyMCkgKyAoZGF0YVs1XSA8PCAxMikgKwpAQCAtNTM1LDI0ICs1MzEsNDYgQEAKIAkJcmV0dXJuIDE7CiAJfQogCisJLyoKKwkgKiBkb24ndCByZXBvcnQgZXZlbnRzIGZvciBpbnZhbGlkIGRhdGEKKwkgKi8KIAkvKiBvbGRlciBJNCBzdHlsaSBkb24ndCB3b3JrIHdpdGggbmV3IENpbnRpcXMgKi8KLQlpZiAoISgod2Fjb20tPmlkW2lkeF0gPj4gMjApICYgMHgwMSkgJiYKLQkJCShmZWF0dXJlcy0+dHlwZSA9PSBXQUNPTV8yMVVYMikpCisJaWYgKCghKCh3YWNvbS0+aWRbaWR4XSA+PiAyMCkgJiAweDAxKSAmJgorCQkJKGZlYXR1cmVzLT50eXBlID09IFdBQ09NXzIxVVgyKSkgfHwKKwkgICAgLyogT25seSBsYXJnZSBJbnR1b3Mgc3VwcG9ydCBMZW5zZSBDdXJzb3IgKi8KKwkgICAgKHdhY29tLT50b29sW2lkeF0gPT0gQlROX1RPT0xfTEVOUyAmJgorCQkoZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TMyB8fAorCQkgZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TM1MgfHwKKwkJIGZlYXR1cmVzLT50eXBlID09IElOVFVPUzQgfHwKKwkJIGZlYXR1cmVzLT50eXBlID09IElOVFVPUzRTIHx8CisJCSBmZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1M1IHx8CisJCSBmZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1M1UyB8fAorCQkgZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TUE0gfHwKKwkJIGZlYXR1cmVzLT50eXBlID09IElOVFVPU1BTKSkgfHwKKwkgICAvKiBDaW50aXEgZG9lc24ndCBzZW5kIGRhdGEgd2hlbiBSRFkgYml0IGlzbid0IHNldCAqLworCSAgIChmZWF0dXJlcy0+dHlwZSA9PSBDSU5USVEgJiYgIShkYXRhWzFdICYgMHg0MCkpKQogCQlyZXR1cm4gMTsKIAotCS8qIFJhbmdlIFJlcG9ydCAqLwotCWlmICgoZGF0YVsxXSAmIDB4ZmUpID09IDB4MjApIHsKKwlpZiAoZmVhdHVyZXMtPnF1aXJrcyAmIFdBQ09NX1FVSVJLX01VTFRJX0lOUFVUKQorCQl3YWNvbS0+c2hhcmVkLT5zdHlsdXNfaW5fcHJveGltaXR5ID0gdHJ1ZTsKKworCS8qIGluIFJhbmdlIHdoaWxlIGV4aXRpbmcgKi8KKwlpZiAoKChkYXRhWzFdICYgMHhmZSkgPT0gMHgyMCkgJiYgd2Fjb20tPnJlcG9ydGluZ19kYXRhKSB7CiAJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9UT1VDSCwgMCk7CiAJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19QUkVTU1VSRSwgMCk7CiAJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19ESVNUQU5DRSwgd2Fjb20tPmZlYXR1cmVzLmRpc3RhbmNlX21heCk7Ci0JCWlmIChmZWF0dXJlcy0+cXVpcmtzICYgV0FDT01fUVVJUktfTVVMVElfSU5QVVQpCi0JCQl3YWNvbS0+c2hhcmVkLT5zdHlsdXNfaW5fcHJveGltaXR5ID0gdHJ1ZTsKKwkJcmV0dXJuIDI7CiAJfQogCiAJLyogRXhpdCByZXBvcnQgKi8KIAlpZiAoKGRhdGFbMV0gJiAweGZlKSA9PSAweDgwKSB7CiAJCWlmIChmZWF0dXJlcy0+cXVpcmtzICYgV0FDT01fUVVJUktfTVVMVElfSU5QVVQpCiAJCQl3YWNvbS0+c2hhcmVkLT5zdHlsdXNfaW5fcHJveGltaXR5ID0gZmFsc2U7CisJCXdhY29tLT5yZXBvcnRpbmdfZGF0YSA9IGZhbHNlOworCisJCS8qIGRvbid0IHJlcG9ydCBleGl0IGlmIHdlIGRvbid0IGtub3cgdGhlIElEICovCisJCWlmICghd2Fjb20tPmlkW2lkeF0pCisJCQlyZXR1cm4gMTsKIAogCQkvKgogCQkgKiBSZXNldCBhbGwgc3RhdGVzIG90aGVyd2lzZSB3ZSBsb3NlIHRoZSBpbml0aWFsIHN0YXRlcwpAQCAtNTg2LDYgKzYwNCwxMSBAQAogCQl3YWNvbS0+aWRbaWR4XSA9IDA7CiAJCXJldHVybiAyOwogCX0KKworCS8qIGRvbid0IHJlcG9ydCBvdGhlciBldmVudHMgaWYgd2UgZG9uJ3Qga25vdyB0aGUgSUQgKi8KKwlpZiAoIXdhY29tLT5pZFtpZHhdKQorCQlyZXR1cm4gMTsKKwogCXJldHVybiAwOwogfQogCkBAIC02MzMsNiArNjU2LDggQEAKIAkgICAgZGF0YVswXSAhPSBXQUNPTV9SRVBPUlRfSU5UVU9TUkVBRCAmJgogCSAgICBkYXRhWzBdICE9IFdBQ09NX1JFUE9SVF9JTlRVT1NXUklURSAmJgogCSAgICBkYXRhWzBdICE9IFdBQ09NX1JFUE9SVF9JTlRVT1NQQUQgJiYKKwkgICAgZGF0YVswXSAhPSBXQUNPTV9SRVBPUlRfQ0lOVElRICYmCisJICAgIGRhdGFbMF0gIT0gV0FDT01fUkVQT1JUX0NJTlRJUVBBRCAmJgogCSAgICBkYXRhWzBdICE9IFdBQ09NX1JFUE9SVF9JTlRVT1M1UEFEKSB7CiAJCWRldl9kYmcoaW5wdXQtPmRldi5wYXJlbnQsCiAJCQkiJXM6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZFxuIiwgX19mdW5jX18sIGRhdGFbMF0pOwpAQCAtNjQ0LDcgKzY2OSw4IEBACiAJCWlkeCA9IGRhdGFbMV0gJiAweDAxOwogCiAJLyogcGFkIHBhY2tldHMuIFdvcmtzIGFzIGEgc2Vjb25kIHRvb2wgYW5kIGlzIGFsd2F5cyBpbiBwcm94ICovCi0JaWYgKGRhdGFbMF0gPT0gV0FDT01fUkVQT1JUX0lOVFVPU1BBRCB8fCBkYXRhWzBdID09IFdBQ09NX1JFUE9SVF9JTlRVT1M1UEFEKSB7CisJaWYgKGRhdGFbMF0gPT0gV0FDT01fUkVQT1JUX0lOVFVPU1BBRCB8fCBkYXRhWzBdID09IFdBQ09NX1JFUE9SVF9JTlRVT1M1UEFEIHx8CisJICAgIGRhdGFbMF0gPT0gV0FDT01fUkVQT1JUX0NJTlRJUVBBRCkgewogCQlpbnB1dCA9IHdhY29tLT5wYWRfaW5wdXQ7CiAJCWlmIChmZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1M0UyAmJiBmZWF0dXJlcy0+dHlwZSA8PSBJTlRVT1M0TCkgewogCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROXzAsIChkYXRhWzJdICYgMHgwMSkpOwpAQCAtNzQ0LDYgKzc3MCwxNCBAQAogCQkJfSBlbHNlIHsKIAkJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTUlTQywgMCk7CiAJCQl9CisJCX0gZWxzZSBpZiAoZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fMjdRSEQpIHsKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEtFWV9QUk9HMSwgZGF0YVsyXSAmIDB4MDEpOworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgS0VZX1BST0cyLCBkYXRhWzJdICYgMHgwMik7CisJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBLRVlfUFJPRzMsIGRhdGFbMl0gJiAweDA0KTsKKworCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1gsIGJlMTZfdG9fY3B1cCgoX19iZTE2ICopJmRhdGFbNF0pKTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19ZLCBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSZkYXRhWzZdKSk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfWiwgYmUxNl90b19jcHVwKChfX2JlMTYgKikmZGF0YVs4XSkpOwogCQl9IGVsc2UgaWYgKGZlYXR1cmVzLT50eXBlID09IENJTlRJUV9IWUJSSUQpIHsKIAkJCS8qCiAJCQkgKiBEbyBub3Qgc2VuZCBoYXJkd2FyZSBidXR0b25zIHVuZGVyIEFuZHJvaWQuIFRoZXkKQEAgLTc2MCw2ICs3OTQsMTIgQEAKIAkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl83LCAoZGF0YVs0XSAmIDB4NDApKTsgIC8qIExlZnQgICAqLwogCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROXzgsIChkYXRhWzRdICYgMHg4MCkpOyAgLyogRG93biAgICovCiAJCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fMCwgKGRhdGFbM10gJiAweDAxKSk7ICAvKiBDZW50ZXIgKi8KKworCQkJaWYgKGRhdGFbNF0gfCAoZGF0YVszXSAmIDB4MDEpKSB7CisJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01JU0MsIFBBRF9ERVZJQ0VfSUQpOworCQkJfSBlbHNlIHsKKwkJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTUlTQywgMCk7CisJCQl9CiAJCX0gZWxzZSBpZiAoZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TNVMgJiYgZmVhdHVyZXMtPnR5cGUgPD0gSU5UVU9TUEwpIHsKIAkJCWludCBpOwogCkBAIC04NDMsMjggKzg4Myw2IEBACiAJaWYgKHJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0IC0gMTsKIAotCS8qIGRvbid0IHByb2NlZWQgaWYgd2UgZG9uJ3Qga25vdyB0aGUgSUQgKi8KLQlpZiAoIXdhY29tLT5pZFtpZHhdKQotCQlyZXR1cm4gMDsKLQotCS8qIE9ubHkgbGFyZ2UgSW50dW9zIHN1cHBvcnQgTGVuc2UgQ3Vyc29yICovCi0JaWYgKHdhY29tLT50b29sW2lkeF0gPT0gQlROX1RPT0xfTEVOUyAmJgotCSAgICAoZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TMyB8fAotCSAgICAgZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TM1MgfHwKLQkgICAgIGZlYXR1cmVzLT50eXBlID09IElOVFVPUzQgfHwKLQkgICAgIGZlYXR1cmVzLT50eXBlID09IElOVFVPUzRTIHx8Ci0JICAgICBmZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1M1IHx8Ci0JICAgICBmZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1M1UyB8fAotCSAgICAgZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TUE0gfHwKLQkgICAgIGZlYXR1cmVzLT50eXBlID09IElOVFVPU1BTKSkgewotCi0JCXJldHVybiAwOwotCX0KLQotCS8qIENpbnRpcSBkb2Vzbid0IHNlbmQgZGF0YSB3aGVuIFJEWSBiaXQgaXNuJ3Qgc2V0ICovCi0JaWYgKGZlYXR1cmVzLT50eXBlID09IENJTlRJUSAmJiAhKGRhdGFbMV0gJiAweDQwKSkKLSAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KIAlpZiAoZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TM1MpIHsKIAkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX1gsIChkYXRhWzJdIDw8IDkpIHwgKGRhdGFbM10gPDwgMSkgfCAoKGRhdGFbOV0gPj4gMSkgJiAxKSk7CiAJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19ZLCAoZGF0YVs0XSA8PCA5KSB8IChkYXRhWzVdIDw8IDEpIHwgKGRhdGFbOV0gJiAxKSk7CkBAIC05NTEsNiArOTY5LDcgQEAKIAlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTUlTQywgd2Fjb20tPmlkW2lkeF0pOyAvKiByZXBvcnQgdG9vbCBpZCAqLwogCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIHdhY29tLT50b29sW2lkeF0sIDEpOwogCWlucHV0X2V2ZW50KGlucHV0LCBFVl9NU0MsIE1TQ19TRVJJQUwsIHdhY29tLT5zZXJpYWxbaWR4XSk7CisJd2Fjb20tPnJlcG9ydGluZ19kYXRhID0gdHJ1ZTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTAxOSw4ICsxMDM4LDIwIEBACiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSB3YWNvbS0+aW5wdXQ7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOwogCWludCBpOwotCWludCBjdXJyZW50X251bV9jb250YWN0cyA9IGRhdGFbNjFdOworCWludCBjdXJyZW50X251bV9jb250YWN0cyA9IDA7CiAJaW50IGNvbnRhY3RzX3RvX3NlbmQgPSAwOworCWludCBudW1fY29udGFjdHNfbGVmdCA9IDQ7IC8qIG1heGltdW0gY29udGFjdHMgcGVyIHBhY2tldCAqLworCWludCBieXRlX3Blcl9wYWNrZXQgPSBXQUNPTV9CWVRFU19QRVJfMjRIRFRfUEFDS0VUOworCWludCB5X29mZnNldCA9IDI7CisKKwlpZiAod2Fjb20tPmZlYXR1cmVzLnR5cGUgPT0gV0FDT01fMjdRSERUKSB7CisJCWN1cnJlbnRfbnVtX2NvbnRhY3RzID0gZGF0YVs2M107CisJCW51bV9jb250YWN0c19sZWZ0ID0gMTA7CisJCWJ5dGVfcGVyX3BhY2tldCA9IFdBQ09NX0JZVEVTX1BFUl9RSERUSElEX1BBQ0tFVDsKKwkJeV9vZmZzZXQgPSAwOworCX0gZWxzZSB7CisJCWN1cnJlbnRfbnVtX2NvbnRhY3RzID0gZGF0YVs2MV07CisJfQogCiAJLyoKIAkgKiBGaXJzdCBwYWNrZXQgcmVzZXRzIHRoZSBjb3VudGVyIHNpbmNlIG9ubHkgdGhlIGZpcnN0CkBAIC0xMDI5LDEyICsxMDYwLDExIEBACiAJaWYgKGN1cnJlbnRfbnVtX2NvbnRhY3RzKQogCQl3YWNvbS0+bnVtX2NvbnRhY3RzX2xlZnQgPSBjdXJyZW50X251bV9jb250YWN0czsKIAotCS8qIFRoZXJlIGFyZSBhdCBtb3N0IDQgY29udGFjdHMgcGVyIHBhY2tldCAqLwotCWNvbnRhY3RzX3RvX3NlbmQgPSBtaW4oNCwgd2Fjb20tPm51bV9jb250YWN0c19sZWZ0KTsKKwljb250YWN0c190b19zZW5kID0gbWluKG51bV9jb250YWN0c19sZWZ0LCB3YWNvbS0+bnVtX2NvbnRhY3RzX2xlZnQpOwogCiAJZm9yIChpID0gMDsgaSA8IGNvbnRhY3RzX3RvX3NlbmQ7IGkrKykgewotCQlpbnQgb2Zmc2V0ID0gKFdBQ09NX0JZVEVTX1BFUl8yNEhEVF9QQUNLRVQgKiBpKSArIDE7Ci0JCWJvb2wgdG91Y2ggPSBkYXRhW29mZnNldF0gJiAweDEgJiYgIXdhY29tLT5zaGFyZWQtPnN0eWx1c19pbl9wcm94aW1pdHk7CisJCWludCBvZmZzZXQgPSAoYnl0ZV9wZXJfcGFja2V0ICogaSkgKyAxOworCQlib29sIHRvdWNoID0gKGRhdGFbb2Zmc2V0XSAmIDB4MSkgJiYgIXdhY29tLT5zaGFyZWQtPnN0eWx1c19pbl9wcm94aW1pdHk7CiAJCWludCBzbG90ID0gaW5wdXRfbXRfZ2V0X3Nsb3RfYnlfa2V5KGlucHV0LCBkYXRhW29mZnNldCArIDFdKTsKIAogCQlpZiAoc2xvdCA8IDApCkBAIC0xMDQ0LDE4ICsxMDc0LDIzIEBACiAKIAkJaWYgKHRvdWNoKSB7CiAJCQlpbnQgdF94ID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZkYXRhW29mZnNldCArIDJdKTsKLQkJCWludCBjX3ggPSBnZXRfdW5hbGlnbmVkX2xlMTYoJmRhdGFbb2Zmc2V0ICsgNF0pOwotCQkJaW50IHRfeSA9IGdldF91bmFsaWduZWRfbGUxNigmZGF0YVtvZmZzZXQgKyA2XSk7Ci0JCQlpbnQgY195ID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZkYXRhW29mZnNldCArIDhdKTsKLQkJCWludCB3ID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZkYXRhW29mZnNldCArIDEwXSk7Ci0JCQlpbnQgaCA9IGdldF91bmFsaWduZWRfbGUxNigmZGF0YVtvZmZzZXQgKyAxMl0pOworCQkJaW50IHRfeSA9IGdldF91bmFsaWduZWRfbGUxNigmZGF0YVtvZmZzZXQgKyA0ICsgeV9vZmZzZXRdKTsKIAogCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1gsIHRfeCk7CiAJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWSwgdF95KTsKLQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9UT1VDSF9NQUpPUiwgbWluKHcsaCkpOwotCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1dJRFRIX01BSk9SLCBtaW4odywgaCkgKyBpbnRfZGlzdCh0X3gsIHRfeSwgY194LCBjX3kpKTsKLQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9XSURUSF9NSU5PUiwgbWluKHcsIGgpKTsKLQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9PUklFTlRBVElPTiwgdyA+IGgpOworCisJCQlpZiAod2Fjb20tPmZlYXR1cmVzLnR5cGUgIT0gV0FDT01fMjdRSERUKSB7CisJCQkJaW50IGNfeCA9IGdldF91bmFsaWduZWRfbGUxNigmZGF0YVtvZmZzZXQgKyA0XSk7CisJCQkJaW50IGNfeSA9IGdldF91bmFsaWduZWRfbGUxNigmZGF0YVtvZmZzZXQgKyA4XSk7CisJCQkJaW50IHcgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJmRhdGFbb2Zmc2V0ICsgMTBdKTsKKwkJCQlpbnQgaCA9IGdldF91bmFsaWduZWRfbGUxNigmZGF0YVtvZmZzZXQgKyAxMl0pOworCisJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1RPVUNIX01BSk9SLCBtaW4odyxoKSk7CisJCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1dJRFRIX01BSk9SLAorCQkJCQkJIG1pbih3LCBoKSArIGludF9kaXN0KHRfeCwgdF95LCBjX3gsIGNfeSkpOworCQkJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9XSURUSF9NSU5PUiwgbWluKHcsIGgpKTsKKwkJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfT1JJRU5UQVRJT04sIHcgPiBoKTsKKwkJCX0KIAkJfQogCX0KIAlpbnB1dF9tdF9yZXBvcnRfcG9pbnRlcl9lbXVsYXRpb24oaW5wdXQsIHRydWUpOwpAQCAtMTA2NCw2ICsxMDk5LDcgQEAKIAlpZiAod2Fjb20tPm51bV9jb250YWN0c19sZWZ0IDw9IDApCiAJCXdhY29tLT5udW1fY29udGFjdHNfbGVmdCA9IDA7CiAKKwl3YWNvbS0+c2hhcmVkLT50b3VjaF9kb3duID0gKHdhY29tLT5udW1fY29udGFjdHNfbGVmdCA+IDApOwogCXJldHVybiAxOwogfQogCkBAIC0xMDkyLDcgKzExMjgsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGNvbnRhY3RzX3RvX3NlbmQ7IGkrKykgewogCQlpbnQgb2Zmc2V0ID0gKFdBQ09NX0JZVEVTX1BFUl9NVF9QQUNLRVQgKyB4X29mZnNldCkgKiBpICsgMzsKLQkJYm9vbCB0b3VjaCA9IGRhdGFbb2Zmc2V0XSAmIDB4MTsKKwkJYm9vbCB0b3VjaCA9IChkYXRhW29mZnNldF0gJiAweDEpICYmICF3YWNvbS0+c2hhcmVkLT5zdHlsdXNfaW5fcHJveGltaXR5OwogCQlpbnQgaWQgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJmRhdGFbb2Zmc2V0ICsgMV0pOwogCQlpbnQgc2xvdCA9IGlucHV0X210X2dldF9zbG90X2J5X2tleShpbnB1dCwgaWQpOwogCkBAIC0xMTE0LDYgKzExNTAsNyBAQAogCWlmICh3YWNvbS0+bnVtX2NvbnRhY3RzX2xlZnQgPCAwKQogCQl3YWNvbS0+bnVtX2NvbnRhY3RzX2xlZnQgPSAwOwogCisJd2Fjb20tPnNoYXJlZC0+dG91Y2hfZG93biA9ICh3YWNvbS0+bnVtX2NvbnRhY3RzX2xlZnQgPiAwKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMTUxNCwxMyArMTU1MSw2IEBACiAJd2Fjb21fd2FjLT5zaGFyZWQtPnRvdWNoX2Rvd24gPSB3YWNvbV93YWNfZmluZ2VyX2NvdW50X3RvdWNoZXMoaGRldik7CiB9CiAKLSNkZWZpbmUgV0FDT01fUEVOX0ZJRUxEKGYpCSgoKGYpLT5sb2dpY2FsID09IEhJRF9ER19TVFlMVVMpIHx8IFwKLQkJCQkgKChmKS0+cGh5c2ljYWwgPT0gSElEX0RHX1NUWUxVUykgfHwgXAotCQkJCSAoKGYpLT5hcHBsaWNhdGlvbiA9PSBISURfREdfUEVOKSkKLSNkZWZpbmUgV0FDT01fRklOR0VSX0ZJRUxEKGYpCSgoKGYpLT5sb2dpY2FsID09IEhJRF9ER19GSU5HRVIpIHx8IFwKLQkJCQkgKChmKS0+cGh5c2ljYWwgPT0gSElEX0RHX0ZJTkdFUikgfHwgXAotCQkJCSAoKGYpLT5hcHBsaWNhdGlvbiA9PSBISURfREdfVE9VQ0hTQ1JFRU4pKQotCiB2b2lkIHdhY29tX3dhY191c2FnZV9tYXBwaW5nKHN0cnVjdCBoaWRfZGV2aWNlICpoZGV2LAogCQlzdHJ1Y3QgaGlkX2ZpZWxkICpmaWVsZCwgc3RydWN0IGhpZF91c2FnZSAqdXNhZ2UpCiB7CkBAIC0xODkxLDYgKzE5MjEsNyBAQAogCWNhc2UgV0FDT01fMjFVWDI6CiAJY2FzZSBXQUNPTV8yMkhEOgogCWNhc2UgV0FDT01fMjRIRDoKKwljYXNlIFdBQ09NXzI3UUhEOgogCWNhc2UgRFRLOgogCWNhc2UgQ0lOVElRX0hZQlJJRDoKIAkJc3luYyA9IHdhY29tX2ludHVvc19pcnEod2Fjb21fd2FjKTsKQEAgLTE5MDEsNiArMTkzMiw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBXQUNPTV8yNEhEVDoKKwljYXNlIFdBQ09NXzI3UUhEVDoKIAkJc3luYyA9IHdhY29tXzI0aGR0X2lycSh3YWNvbV93YWMpOwogCQlicmVhazsKIApAQCAtMjA4Niw4ICsyMTE4LDE0IEBACiAJd2Fjb21fYWJzX3NldF9heGlzKGlucHV0X2Rldiwgd2Fjb21fd2FjKTsKIAogCXN3aXRjaCAoZmVhdHVyZXMtPnR5cGUpIHsKKwljYXNlIEdSQVBISVJFX0JUOgorCQlfX2NsZWFyX2JpdChBQlNfTUlTQywgaW5wdXRfZGV2LT5hYnNiaXQpOworCiAJY2FzZSBXQUNPTV9NTzoKIAljYXNlIFdBQ09NX0c0OgorCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ESVNUQU5DRSwgMCwKKwkJCQkJICAgICAgZmVhdHVyZXMtPmRpc3RhbmNlX21heCwKKwkJCQkJICAgICAgMCwgMCk7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCiAJY2FzZSBHUkFQSElSRToKQEAgLTIxMDYsNTIgKzIxNDQsMTUgQEAKIAkJX19zZXRfYml0KElOUFVUX1BST1BfUE9JTlRFUiwgaW5wdXRfZGV2LT5wcm9wYml0KTsKIAkJYnJlYWs7CiAKLQljYXNlIEdSQVBISVJFX0JUOgotCQlfX2NsZWFyX2JpdChBQlNfTUlTQywgaW5wdXRfZGV2LT5hYnNiaXQpOwotCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ESVNUQU5DRSwgMCwKLQkJCQkJICAgICAgZmVhdHVyZXMtPmRpc3RhbmNlX21heCwKLQkJCQkJICAgICAgMCwgMCk7Ci0KLQkJaW5wdXRfc2V0X2NhcGFiaWxpdHkoaW5wdXRfZGV2LCBFVl9SRUwsIFJFTF9XSEVFTCk7Ci0KLQkJX19zZXRfYml0KEJUTl9MRUZULCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCV9fc2V0X2JpdChCVE5fUklHSFQsIGlucHV0X2Rldi0+a2V5Yml0KTsKLQkJX19zZXRfYml0KEJUTl9NSURETEUsIGlucHV0X2Rldi0+a2V5Yml0KTsKLQotCQlfX3NldF9iaXQoQlROX1RPT0xfUlVCQkVSLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCV9fc2V0X2JpdChCVE5fVE9PTF9QRU4sIGlucHV0X2Rldi0+a2V5Yml0KTsKLQkJX19zZXRfYml0KEJUTl9UT09MX01PVVNFLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCV9fc2V0X2JpdChCVE5fU1RZTFVTLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0JCV9fc2V0X2JpdChCVE5fU1RZTFVTMiwgaW5wdXRfZGV2LT5rZXliaXQpOwotCi0JCV9fc2V0X2JpdChJTlBVVF9QUk9QX1BPSU5URVIsIGlucHV0X2Rldi0+cHJvcGJpdCk7Ci0JCWJyZWFrOwotCisJY2FzZSBXQUNPTV8yN1FIRDoKIAljYXNlIFdBQ09NXzI0SEQ6Ci0JCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1osIC05MDAsIDg5OSwgMCwgMCk7Ci0JCWlucHV0X2Fic19zZXRfcmVzKGlucHV0X2RldiwgQUJTX1osIDI4Nyk7Ci0JCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1RIUk9UVExFLCAwLCA3MSwgMCwgMCk7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCiAJY2FzZSBEVEs6Ci0JCV9fc2V0X2JpdChJTlBVVF9QUk9QX0RJUkVDVCwgaW5wdXRfZGV2LT5wcm9wYml0KTsKLQotCQl3YWNvbV9zZXR1cF9jaW50aXEod2Fjb21fd2FjKTsKLQkJYnJlYWs7Ci0KIAljYXNlIFdBQ09NXzIySEQ6CiAJY2FzZSBXQUNPTV8yMVVYMjoKIAljYXNlIFdBQ09NX0JFRToKIAljYXNlIENJTlRJUToKLQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWiwgLTkwMCwgODk5LCAwLCAwKTsKLQkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXRfZGV2LCBBQlNfWiwgMjg3KTsKLQotCQlfX3NldF9iaXQoSU5QVVRfUFJPUF9ESVJFQ1QsIGlucHV0X2Rldi0+cHJvcGJpdCk7Ci0KLQkJd2Fjb21fc2V0dXBfY2ludGlxKHdhY29tX3dhYyk7Ci0JCWJyZWFrOwotCiAJY2FzZSBXQUNPTV8xM0hEOgorCWNhc2UgQ0lOVElRX0hZQlJJRDoKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWiwgLTkwMCwgODk5LCAwLCAwKTsKIAkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXRfZGV2LCBBQlNfWiwgMjg3KTsKIAkJX19zZXRfYml0KElOUFVUX1BST1BfRElSRUNULCBpbnB1dF9kZXYtPnByb3BiaXQpOwpAQCAtMjE2MSw2ICsyMTYyLDEwIEBACiAJY2FzZSBJTlRVT1MzOgogCWNhc2UgSU5UVU9TM0w6CiAJY2FzZSBJTlRVT1MzUzoKKwljYXNlIElOVFVPUzQ6CisJY2FzZSBJTlRVT1M0V0w6CisJY2FzZSBJTlRVT1M0TDoKKwljYXNlIElOVFVPUzRTOgogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19aLCAtOTAwLCA4OTksIDAsIDApOwogCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dF9kZXYsIEFCU19aLCAyODcpOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTIxOTksMTcgKzIyMDQsNiBAQAogCQl9CiAJCWJyZWFrOwogCi0JY2FzZSBJTlRVT1M0OgotCWNhc2UgSU5UVU9TNFdMOgotCWNhc2UgSU5UVU9TNEw6Ci0JY2FzZSBJTlRVT1M0UzoKLQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWiwgLTkwMCwgODk5LCAwLCAwKTsKLQkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXRfZGV2LCBBQlNfWiwgMjg3KTsKLQkJd2Fjb21fc2V0dXBfaW50dW9zKHdhY29tX3dhYyk7Ci0KLQkJX19zZXRfYml0KElOUFVUX1BST1BfUE9JTlRFUiwgaW5wdXRfZGV2LT5wcm9wYml0KTsKLQkJYnJlYWs7Ci0KIAljYXNlIFdBQ09NXzI0SERUOgogCQlpZiAoZmVhdHVyZXMtPmRldmljZV90eXBlID09IEJUTl9UT09MX0ZJTkdFUikgewogCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfTVRfVE9VQ0hfTUFKT1IsIDAsIGZlYXR1cmVzLT54X21heCwgMCwgMCk7CkBAIC0yMjE5LDYgKzIyMTMsNyBAQAogCQl9CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCisJY2FzZSBXQUNPTV8yN1FIRFQ6CiAJY2FzZSBNVFNDUkVFTjoKIAljYXNlIE1UVFBDOgogCWNhc2UgTVRUUENfQjoKQEAgLTIzMDUsMTQgKzIzMDAsNiBAQAogCQkJCQkgICAgICAwLCAwKTsKIAkJfQogCQlicmVhazsKLQotCWNhc2UgQ0lOVElRX0hZQlJJRDoKLQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWiwgLTkwMCwgODk5LCAwLCAwKTsKLQkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXRfZGV2LCBBQlNfWiwgMjg3KTsKLQkJX19zZXRfYml0KElOUFVUX1BST1BfRElSRUNULCBpbnB1dF9kZXYtPnByb3BiaXQpOwotCi0JCXdhY29tX3NldHVwX2NpbnRpcSh3YWNvbV93YWMpOwotCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzc0LDYgKzIzNjEsMTkgQEAKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfVEhST1RUTEUsIDAsIDcxLCAwLCAwKTsKIAkJYnJlYWs7CiAKKwljYXNlIFdBQ09NXzI3UUhEOgorCQlfX3NldF9iaXQoS0VZX1BST0cxLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJCV9fc2V0X2JpdChLRVlfUFJPRzIsIGlucHV0X2Rldi0+a2V5Yml0KTsKKwkJX19zZXRfYml0KEtFWV9QUk9HMywgaW5wdXRfZGV2LT5rZXliaXQpOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YLCAtMjA0OCwgMjA0OCwgMCwgMCk7CisJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0X2RldiwgQUJTX1gsIDEwMjQpOyAvKiBwb2ludHMvZyAqLworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLCAtMjA0OCwgMjA0OCwgMCwgMCk7CisJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0X2RldiwgQUJTX1ksIDEwMjQpOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19aLCAtMjA0OCwgMjA0OCwgMCwgMCk7CisJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0X2RldiwgQUJTX1osIDEwMjQpOworCQlfX3NldF9iaXQoSU5QVVRfUFJPUF9BQ0NFTEVST01FVEVSLCBpbnB1dF9kZXYtPnByb3BiaXQpOworCQlicmVhazsKKwogCWNhc2UgRFRLOgogCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQkJX19zZXRfYml0KEJUTl8wICsgaSwgaW5wdXRfZGV2LT5rZXliaXQpOwpAQCAtMjcyNCw2ICsyNzI0LDE4IEBACiAJeyAiV2Fjb20gQ2ludGlxIDI0SEQgdG91Y2giLCAudHlwZSA9IFdBQ09NXzI0SERULCAvKiBUb3VjaCAqLwogCSAgLm9WaWQgPSBVU0JfVkVORE9SX0lEX1dBQ09NLCAub1BpZCA9IDB4ZjgsIC50b3VjaF9tYXggPSAxMCwKIAkgIC5jaGVja19mb3JfaGlkX3R5cGUgPSB0cnVlLCAuaGlkX3R5cGUgPSBISURfVFlQRV9VU0JOT05FIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MzJBID0KKwl7ICJXYWNvbSBDaW50aXEgMjdRSEQiLCAxMTk3NDAsIDY3NTIwLCAyMDQ3LAorCSAgNjMsIFdBQ09NXzI3UUhELCBXQUNPTV9JTlRVT1MzX1JFUywgV0FDT01fSU5UVU9TM19SRVMsCisJICBXQUNPTV8yN1FIRCwgV0FDT01fSU5UVU9TM19SRVMsIFdBQ09NX0lOVFVPUzNfUkVTIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MzJCID0KKwl7ICJXYWNvbSBDaW50aXEgMjdRSEQgdG91Y2giLCAxMTk3NDAsIDY3NTIwLCAyMDQ3LCA2MywKKwkgIFdBQ09NXzI3UUhELCBXQUNPTV9JTlRVT1MzX1JFUywgV0FDT01fSU5UVU9TM19SRVMsCisJICBXQUNPTV9DSU5USVFfT0ZGU0VULCBXQUNPTV9DSU5USVFfT0ZGU0VULAorCSAgLm9WaWQgPSBVU0JfVkVORE9SX0lEX1dBQ09NLCAub1BpZCA9IDB4MzJDIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4MzJDID0KKwl7ICJXYWNvbSBDaW50aXEgMjdRSEQgdG91Y2giLCAudHlwZSA9IFdBQ09NXzI3UUhEVCwKKwkgIC5vVmlkID0gVVNCX1ZFTkRPUl9JRF9XQUNPTSwgLm9QaWQgPSAweDMyQiwgLnRvdWNoX21heCA9IDEwIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4M0YgPQogCXsgIldhY29tIENpbnRpcSAyMVVYIiwgODcyMDAsIDY1NjAwLCAxMDIzLCA2MywKIAkgIENJTlRJUSwgV0FDT01fSU5UVU9TM19SRVMsIFdBQ09NX0lOVFVPUzNfUkVTIH07CkBAIC0zMDkwLDYgKzMxMDIsOSBAQAogCXsgVVNCX0RFVklDRV9XQUNPTSgweDMxNSkgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHgzMTcpIH0sCiAJeyBVU0JfREVWSUNFX1dBQ09NKDB4MzIzKSB9LAorCXsgVVNCX0RFVklDRV9XQUNPTSgweDMyQSkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHgzMkIpIH0sCisJeyBVU0JfREVWSUNFX1dBQ09NKDB4MzJDKSB9LAogCXsgVVNCX0RFVklDRV9XQUNPTSgweDMyRikgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHg0MDAxKSB9LAogCXsgVVNCX0RFVklDRV9XQUNPTSgweDQwMDQpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC93YWNvbV93YWMuaCBiL2RyaXZlcnMvaGlkL3dhY29tX3dhYy5oCmluZGV4IGJmYWQ4MTUuLjAyMWVlMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaGlkL3dhY29tX3dhYy5oCisrKyBiL2RyaXZlcnMvaGlkL3dhY29tX3dhYy5oCkBAIC0xMCw5ICsxMCwxMCBAQAogI2RlZmluZSBXQUNPTV9XQUNfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWQuaD4KIAogLyogbWF4aW11bSBwYWNrZXQgbGVuZ3RoIGZvciBVU0IgZGV2aWNlcyAqLwotI2RlZmluZSBXQUNPTV9QS0dMRU5fTUFYCTY4CisjZGVmaW5lIFdBQ09NX1BLR0xFTl9NQVgJMTkyCiAKICNkZWZpbmUgV0FDT01fTkFNRV9NQVgJCTY0CiAKQEAgLTM2LDYgKzM3LDcgQEAKIC8qIHdhY29tIGRhdGEgc2l6ZSBwZXIgTVQgY29udGFjdCAqLwogI2RlZmluZSBXQUNPTV9CWVRFU19QRVJfTVRfUEFDS0VUCTExCiAjZGVmaW5lIFdBQ09NX0JZVEVTX1BFUl8yNEhEVF9QQUNLRVQJMTQKKyNkZWZpbmUgV0FDT01fQllURVNfUEVSX1FIRFRISURfUEFDS0VUCSA2CiAKIC8qIGRldmljZSBJRHMgKi8KICNkZWZpbmUgU1RZTFVTX0RFVklDRV9JRAkweDAyCkBAIC01Nyw2ICs1OSw4IEBACiAjZGVmaW5lIFdBQ09NX1JFUE9SVF9UUENNVAkJMTMKICNkZWZpbmUgV0FDT01fUkVQT1JUX1RQQ01UMgkJMwogI2RlZmluZSBXQUNPTV9SRVBPUlRfVFBDSElECQkxNQorI2RlZmluZSBXQUNPTV9SRVBPUlRfQ0lOVElRCQkxNgorI2RlZmluZSBXQUNPTV9SRVBPUlRfQ0lOVElRUEFECQkxNwogI2RlZmluZSBXQUNPTV9SRVBPUlRfVFBDU1QJCTE2CiAjZGVmaW5lIFdBQ09NX1JFUE9SVF9EVFVTCQkxNwogI2RlZmluZSBXQUNPTV9SRVBPUlRfVFBDMUZHRQkJMTgKQEAgLTcxLDYgKzc1LDE0IEBACiAjZGVmaW5lIFdBQ09NX1FVSVJLX01PTklUT1IJCTB4MDAwOAogI2RlZmluZSBXQUNPTV9RVUlSS19CQVRURVJZCQkweDAwMTAKIAorI2RlZmluZSBXQUNPTV9QRU5fRklFTEQoZikJKCgoZiktPmxvZ2ljYWwgPT0gSElEX0RHX1NUWUxVUykgfHwgXAorCQkJCSAoKGYpLT5waHlzaWNhbCA9PSBISURfREdfU1RZTFVTKSB8fCBcCisJCQkJICgoZiktPnBoeXNpY2FsID09IEhJRF9ER19QRU4pIHx8IFwKKwkJCQkgKChmKS0+YXBwbGljYXRpb24gPT0gSElEX0RHX1BFTikpCisjZGVmaW5lIFdBQ09NX0ZJTkdFUl9GSUVMRChmKQkoKChmKS0+bG9naWNhbCA9PSBISURfREdfRklOR0VSKSB8fCBcCisJCQkJICgoZiktPnBoeXNpY2FsID09IEhJRF9ER19GSU5HRVIpIHx8IFwKKwkJCQkgKChmKS0+YXBwbGljYXRpb24gPT0gSElEX0RHX1RPVUNIU0NSRUVOKSkKKwogZW51bSB7CiAJUEVOUEFSVE5FUiA9IDAsCiAJR1JBUEhJUkUsCkBAIC0xMDAsNiArMTEyLDcgQEAKIAlXQUNPTV8yMkhELAogCURUSywKIAlXQUNPTV8yNEhELAorCVdBQ09NXzI3UUhELAogCUNJTlRJUV9IWUJSSUQsCiAJQ0lOVElRLAogCVdBQ09NX0JFRSwKQEAgLTEwOCw2ICsxMjEsNyBAQAogCVdJUkVMRVNTLAogCUJBTUJPT19QVCwKIAlXQUNPTV8yNEhEVCwKKwlXQUNPTV8yN1FIRFQsCiAJVEFCTEVUUEMsICAgLyogYWRkIG5ldyBUUEMgYmVsb3cgKi8KIAlUQUJMRVRQQ0UsCiAJVEFCTEVUUEMyRkcsCkBAIC0xODAsNiArMTk0LDcgQEAKIAlpbnQgdG9vbFsyXTsKIAlpbnQgaWRbMl07CiAJX191MzIgc2VyaWFsWzJdOworCWJvb2wgcmVwb3J0aW5nX2RhdGE7CiAJc3RydWN0IHdhY29tX2ZlYXR1cmVzIGZlYXR1cmVzOwogCXN0cnVjdCB3YWNvbV9zaGFyZWQgKnNoYXJlZDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHNpL2NsaWVudHMvbm9raWEtbW9kZW0uYyBiL2RyaXZlcnMvaHNpL2NsaWVudHMvbm9raWEtbW9kZW0uYwppbmRleCBmMGMyMTQ1Li5lYjRkYzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hzaS9jbGllbnRzL25va2lhLW1vZGVtLmMKKysrIGIvZHJpdmVycy9oc2kvY2xpZW50cy9ub2tpYS1tb2RlbS5jCkBAIC0xNjIsNiArMTYyLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG1vZGVtKTsKKwltb2RlbS0+ZGV2aWNlID0gZGV2OwogCiAJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogCWlmICghaXJxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jIGIvZHJpdmVycy9odi92bWJ1c19kcnYuYwppbmRleCA0ZDZiMjY5Li5iYjM3MjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h2L3ZtYnVzX2Rydi5jCisrKyBiL2RyaXZlcnMvaHYvdm1idXNfZHJ2LmMKQEAgLTg2MSw4ICs4NjEsOCBAQAogCQlicmVhazsKIAogCWNhc2UgQUNQSV9SRVNPVVJDRV9UWVBFX0FERFJFU1M2NDoKLQkJaHlwZXJ2X21taW8uc3RhcnQgPSByZXMtPmRhdGEuYWRkcmVzczY0Lm1pbmltdW07Ci0JCWh5cGVydl9tbWlvLmVuZCA9IHJlcy0+ZGF0YS5hZGRyZXNzNjQubWF4aW11bTsKKwkJaHlwZXJ2X21taW8uc3RhcnQgPSByZXMtPmRhdGEuYWRkcmVzczY0LmFkZHJlc3MubWluaW11bTsKKwkJaHlwZXJ2X21taW8uZW5kID0gcmVzLT5kYXRhLmFkZHJlc3M2NC5hZGRyZXNzLm1heGltdW07CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IGE3ZGUyNmQuLmQ5MzFjYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTEzODksNiArMTM4OSw3IEBACiBjb25maWcgU0VOU09SU19BRFM3ODI4CiAJdHJpc3RhdGUgIlRleGFzIEluc3RydW1lbnRzIEFEUzc4MjggYW5kIGNvbXBhdGlibGVzIgogCWRlcGVuZHMgb24gSTJDCisJc2VsZWN0IFJFR01BUF9JMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgVGV4YXMgSW5zdHJ1bWVudHMgQURTNzgyOCBhbmQKIAkgIEFEUzc4MzAgOC1jaGFubmVsIEEvRCBjb252ZXJ0ZXJzLiBBRFM3ODI4IHJlc29sdXRpb24gaXMgMTItYml0LCB3aGlsZQpAQCAtMTQzMCw4ICsxNDMxLDggQEAKIAl0cmlzdGF0ZSAiVGV4YXMgSW5zdHJ1bWVudHMgSU5BMjE5IGFuZCBjb21wYXRpYmxlcyIKIAlkZXBlbmRzIG9uIEkyQwogCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBJTkEyMTksIElOQTIyMCwgSU5BMjI2LCBhbmQKLQkgIElOQTIzMCBwb3dlciBtb25pdG9yIGNoaXBzLgorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIElOQTIxOSwgSU5BMjIwLCBJTkEyMjYsCisJICBJTkEyMzAsIGFuZCBJTkEyMzEgcG93ZXIgbW9uaXRvciBjaGlwcy4KIAogCSAgVGhlIElOQTJ4eCBkcml2ZXIgaXMgY29uZmlndXJlZCBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvZgogCSAgdGhlIHBhcnQgYXMgZGVzY3JpYmVkIGluIHRoZSBkYXRhc2hlZXQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FieDUwMC5jIGIvZHJpdmVycy9od21vbi9hYng1MDAuYwppbmRleCAxMzg3NTk2Li42Y2I4OWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FieDUwMC5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWJ4NTAwLmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogCXN0cnVjdCBhYng1MDBfdGVtcCAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgZGF0YS0+bWluW2F0dHItPmluZGV4XSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCBkYXRhLT5taW5bYXR0ci0+aW5kZXhdKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19tYXgoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMjMwLDcgKzIzMCw3IEBACiAJc3RydWN0IGFieDUwMF90ZW1wICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCBkYXRhLT5tYXhbYXR0ci0+aW5kZXhdKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGRhdGEtPm1heFthdHRyLT5pbmRleF0pOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X21heF9oeXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTIzOSw3ICsyMzksNyBAQAogCXN0cnVjdCBhYng1MDBfdGVtcCAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgZGF0YS0+bWF4X2h5c3RbYXR0ci0+aW5kZXhdKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGRhdGEtPm1heF9oeXN0W2F0dHItPmluZGV4XSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfbWluX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWQ3MzE0LmMgYi9kcml2ZXJzL2h3bW9uL2FkNzMxNC5jCmluZGV4IGY0ZjliMjEuLjExOTU1NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWQ3MzE0LmMKKysrIGIvZHJpdmVycy9od21vbi9hZDczMTQuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogLyoKICAqIEFENzMxNCB0ZW1wZXJhdHVyZSBtYXNrcwpAQCAtNjcsNyArNjgsNyBAQAogCXN3aXRjaCAoc3BpX2dldF9kZXZpY2VfaWQoY2hpcC0+c3BpX2RldiktPmRyaXZlcl9kYXRhKSB7CiAJY2FzZSBhZDczMTQ6CiAJCWRhdGEgPSAocmV0ICYgQUQ3MzE0X1RFTVBfTUFTSykgPj4gQUQ3MzE0X1RFTVBfU0hJRlQ7Ci0JCWRhdGEgPSAoZGF0YSA8PCA2KSA+PiA2OworCQlkYXRhID0gc2lnbl9leHRlbmQzMihkYXRhLCA5KTsKIAogCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgMjUwICogZGF0YSk7CiAJY2FzZSBhZHQ3MzAxOgpAQCAtNzgsNyArNzksNyBAQAogCQkgKiByZWdpc3Rlci4gIDFsc2IgLSAzMS4yNSBtaWxsaSBkZWdyZWVzIGNlbnRpZ3JhZGUKIAkJICovCiAJCWRhdGEgPSByZXQgJiBBRFQ3MzAxX1RFTVBfTUFTSzsKLQkJZGF0YSA9IChkYXRhIDw8IDIpID4+IDI7CisJCWRhdGEgPSBzaWduX2V4dGVuZDMyKGRhdGEsIDEzKTsKIAogCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwKIAkJCSAgICAgICBESVZfUk9VTkRfQ0xPU0VTVChkYXRhICogMzEyNSwgMTAwKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkYzEyOGQ4MTguYyBiL2RyaXZlcnMvaHdtb24vYWRjMTI4ZDgxOC5jCmluZGV4IDA2MjVlNTAuLmFkMmI0N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRjMTI4ZDgxOC5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRjMTI4ZDgxOC5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogLyogQWRkcmVzc2VzIHRvIHNjYW4KICAqIFRoZSBjaGlwIGFsc28gc3VwcG9ydHMgYWRkcmVzc2VzIDB4MzUuLjB4MzcuIERvbid0IHNjYW4gdGhvc2UgYWRkcmVzc2VzCkBAIC0xODksNyArMTkwLDcgQEAKIAlpZiAoSVNfRVJSKGRhdGEpKQogCQlyZXR1cm4gUFRSX0VSUihkYXRhKTsKIAotCXRlbXAgPSAoZGF0YS0+dGVtcFtpbmRleF0gPDwgNykgPj4gNzsJLyogc2lnbiBleHRlbmQgKi8KKwl0ZW1wID0gc2lnbl9leHRlbmQzMihkYXRhLT50ZW1wW2luZGV4XSwgOCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXAgKiA1MDApOy8qIDAuNSBkZWdyZWVzIEMgcmVzb2x1dGlvbiAqLwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2Fkczc4MjguYyBiL2RyaXZlcnMvaHdtb24vYWRzNzgyOC5jCmluZGV4IGE2MjJkNDAuLmJjZTRlOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRzNzgyOC5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRzNzgyOC5jCkBAIC0zMCwxNCArMzAsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2Fkczc4MjguaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKIC8qIFRoZSBBRFM3ODI4IHJlZ2lzdGVycyAqLwotI2RlZmluZSBBRFM3ODI4X05DSAkJOAkvKiA4IGNoYW5uZWxzIHN1cHBvcnRlZCAqLwogI2RlZmluZSBBRFM3ODI4X0NNRF9TRF9TRQkweDgwCS8qIFNpbmdsZSBlbmRlZCBpbnB1dHMgKi8KICNkZWZpbmUgQURTNzgyOF9DTURfUEQxCQkweDA0CS8qIEludGVybmFsIHZyZWYgT0ZGICYmIEEvRCBPTiAqLwogI2RlZmluZSBBRFM3ODI4X0NNRF9QRDMJCTB4MEMJLyogSW50ZXJuYWwgdnJlZiBPTiAmJiBBL0QgT04gKi8KQEAgLTUwLDE3ICs0OCw5IEBACiAKIC8qIENsaWVudCBzcGVjaWZpYyBkYXRhICovCiBzdHJ1Y3QgYWRzNzgyOF9kYXRhIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsJLyogTXV0ZXggcHJvdGVjdGluZyB1cGRhdGVzICovCi0JdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIExhc3QgdXBkYXRlZCB0aW1lIChpbiBqaWZmaWVzKSAqLwotCXUxNiBhZGNfaW5wdXRbQURTNzgyOF9OQ0hdOwkvKiBBRFM3ODI4X05DSCBzYW1wbGVzICovCi0JYm9vbCB2YWxpZDsJCQkvKiBWYWxpZGl0eSBmbGFnICovCi0JYm9vbCBkaWZmX2lucHV0OwkJLyogRGlmZmVyZW50aWFsIGlucHV0ICovCi0JYm9vbCBleHRfdnJlZjsJCQkvKiBFeHRlcm5hbCB2b2x0YWdlIHJlZmVyZW5jZSAqLwotCXVuc2lnbmVkIGludCB2cmVmX212OwkJLyogdm9sdGFnZSByZWZlcmVuY2UgdmFsdWUgKi8KKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CiAJdTggY21kX2J5dGU7CQkJLyogQ29tbWFuZCBieXRlIHdpdGhvdXQgY2hhbm5lbCBiaXRzICovCiAJdW5zaWduZWQgaW50IGxzYl9yZXNvbDsJCS8qIFJlc29sdXRpb24gb2YgdGhlIEFEQyBzYW1wbGUgTFNCICovCi0JczMyICgqcmVhZF9jaGFubmVsKShjb25zdCBzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kKTsKIH07CiAKIC8qIENvbW1hbmQgYnl0ZSBDMixDMSxDMCAtIHNlZSBkYXRhc2hlZXQgKi8KQEAgLTY5LDQyICs1OSwyMiBAQAogCXJldHVybiBjbWQgfCAoKChjaCA+PiAxKSB8IChjaCAmIDB4MDEpIDw8IDIpIDw8IDQpOwogfQogCi0vKiBVcGRhdGUgZGF0YSBmb3IgdGhlIGRldmljZSAoYWxsIDggY2hhbm5lbHMpICovCi1zdGF0aWMgc3RydWN0IGFkczc4MjhfZGF0YSAqYWRzNzgyOF91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYWRzNzgyOF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKLQotCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaICsgSFogLyAyKQotCQkJfHwgIWRhdGEtPnZhbGlkKSB7Ci0JCXVuc2lnbmVkIGludCBjaDsKLQkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJTdGFydGluZyBhZHM3ODI4IHVwZGF0ZVxuIik7Ci0KLQkJZm9yIChjaCA9IDA7IGNoIDwgQURTNzgyOF9OQ0g7IGNoKyspIHsKLQkJCXU4IGNtZCA9IGFkczc4MjhfY21kX2J5dGUoZGF0YS0+Y21kX2J5dGUsIGNoKTsKLQkJCWRhdGEtPmFkY19pbnB1dFtjaF0gPSBkYXRhLT5yZWFkX2NoYW5uZWwoY2xpZW50LCBjbWQpOwotCQl9Ci0JCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7Ci0JCWRhdGEtPnZhbGlkID0gdHJ1ZTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCXJldHVybiBkYXRhOwotfQotCiAvKiBzeXNmcyBjYWxsYmFjayBmdW5jdGlvbiAqLwogc3RhdGljIHNzaXplX3QgYWRzNzgyOF9zaG93X2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAogCQkJICAgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGEpOwotCXN0cnVjdCBhZHM3ODI4X2RhdGEgKmRhdGEgPSBhZHM3ODI4X3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQl1bnNpZ25lZCBpbnQgdmFsdWUgPSBESVZfUk9VTkRfQ0xPU0VTVChkYXRhLT5hZGNfaW5wdXRbYXR0ci0+aW5kZXhdICoKLQkJCQkJICAgICAgIGRhdGEtPmxzYl9yZXNvbCwgMTAwMCk7CisJc3RydWN0IGFkczc4MjhfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXU4IGNtZCA9IGFkczc4MjhfY21kX2J5dGUoZGF0YS0+Y21kX2J5dGUsIGF0dHItPmluZGV4KTsKKwl1bnNpZ25lZCBpbnQgcmVndmFsOworCWludCBlcnI7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsdWUpOworCWVyciA9IHJlZ21hcF9yZWFkKGRhdGEtPnJlZ21hcCwgY21kLCAmcmVndmFsKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAorCQkgICAgICAgRElWX1JPVU5EX0NMT1NFU1QocmVndmFsICogZGF0YS0+bHNiX3Jlc29sLCAxMDAwKSk7CiB9CiAKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4wX2lucHV0LCBTX0lSVUdPLCBhZHM3ODI4X3Nob3dfaW4sIE5VTEwsIDApOwpAQCAtMTMwLDYgKzEwMCwxNiBAQAogCiBBVFRSSUJVVEVfR1JPVVBTKGFkczc4MjgpOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYWRzMjgyOF9yZWdtYXBfY29uZmlnID0geworCS5yZWdfYml0cyA9IDgsCisJLnZhbF9iaXRzID0gMTYsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgYWRzMjgzMF9yZWdtYXBfY29uZmlnID0geworCS5yZWdfYml0cyA9IDgsCisJLnZhbF9iaXRzID0gOCwKK307CisKIHN0YXRpYyBpbnQgYWRzNzgyOF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKQEAgLTEzNyw0MiArMTE3LDQwIEBACiAJc3RydWN0IGFkczc4MjhfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKGRldik7CiAJc3RydWN0IGFkczc4MjhfZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbl9kZXY7CisJdW5zaWduZWQgaW50IHZyZWZfbXYgPSBBRFM3ODI4X0lOVF9WUkVGX01WOworCWJvb2wgZGlmZl9pbnB1dCA9IGZhbHNlOworCWJvb2wgZXh0X3ZyZWYgPSBmYWxzZTsKIAogCWRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IGFkczc4MjhfZGF0YSksIEdGUF9LRVJORUwpOwogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAocGRhdGEpIHsKLQkJZGF0YS0+ZGlmZl9pbnB1dCA9IHBkYXRhLT5kaWZmX2lucHV0OwotCQlkYXRhLT5leHRfdnJlZiA9IHBkYXRhLT5leHRfdnJlZjsKLQkJaWYgKGRhdGEtPmV4dF92cmVmKQotCQkJZGF0YS0+dnJlZl9tdiA9IHBkYXRhLT52cmVmX212OworCQlkaWZmX2lucHV0ID0gcGRhdGEtPmRpZmZfaW5wdXQ7CisJCWV4dF92cmVmID0gcGRhdGEtPmV4dF92cmVmOworCQlpZiAoZXh0X3ZyZWYgJiYgcGRhdGEtPnZyZWZfbXYpCisJCQl2cmVmX212ID0gcGRhdGEtPnZyZWZfbXY7CiAJfQogCi0JLyogQm91bmQgVnJlZiB3aXRoIG1pbi9tYXggdmFsdWVzIGlmIGl0IHdhcyBwcm92aWRlZCAqLwotCWlmIChkYXRhLT52cmVmX212KQotCQlkYXRhLT52cmVmX212ID0gY2xhbXBfdmFsKGRhdGEtPnZyZWZfbXYsCi0JCQkJCSAgQURTNzgyOF9FWFRfVlJFRl9NVl9NSU4sCi0JCQkJCSAgQURTNzgyOF9FWFRfVlJFRl9NVl9NQVgpOwotCWVsc2UKLQkJZGF0YS0+dnJlZl9tdiA9IEFEUzc4MjhfSU5UX1ZSRUZfTVY7CisJLyogQm91bmQgVnJlZiB3aXRoIG1pbi9tYXggdmFsdWVzICovCisJdnJlZl9tdiA9IGNsYW1wX3ZhbCh2cmVmX212LCBBRFM3ODI4X0VYVF9WUkVGX01WX01JTiwKKwkJCSAgICBBRFM3ODI4X0VYVF9WUkVGX01WX01BWCk7CiAKIAkvKiBBRFM3ODI4IHVzZXMgMTItYml0IHNhbXBsZXMsIHdoaWxlIEFEUzc4MzAgaXMgOC1iaXQgKi8KIAlpZiAoaWQtPmRyaXZlcl9kYXRhID09IGFkczc4MjgpIHsKLQkJZGF0YS0+bHNiX3Jlc29sID0gRElWX1JPVU5EX0NMT1NFU1QoZGF0YS0+dnJlZl9tdiAqIDEwMDAsIDQwOTYpOwotCQlkYXRhLT5yZWFkX2NoYW5uZWwgPSBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQ7CisJCWRhdGEtPmxzYl9yZXNvbCA9IERJVl9ST1VORF9DTE9TRVNUKHZyZWZfbXYgKiAxMDAwLCA0MDk2KTsKKwkJZGF0YS0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LAorCQkJCQkJICAgICZhZHMyODI4X3JlZ21hcF9jb25maWcpOwogCX0gZWxzZSB7Ci0JCWRhdGEtPmxzYl9yZXNvbCA9IERJVl9ST1VORF9DTE9TRVNUKGRhdGEtPnZyZWZfbXYgKiAxMDAwLCAyNTYpOwotCQlkYXRhLT5yZWFkX2NoYW5uZWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGE7CisJCWRhdGEtPmxzYl9yZXNvbCA9IERJVl9ST1VORF9DTE9TRVNUKHZyZWZfbXYgKiAxMDAwLCAyNTYpOworCQlkYXRhLT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsCisJCQkJCQkgICAgJmFkczI4MzBfcmVnbWFwX2NvbmZpZyk7CiAJfQogCi0JZGF0YS0+Y21kX2J5dGUgPSBkYXRhLT5leHRfdnJlZiA/IEFEUzc4MjhfQ01EX1BEMSA6IEFEUzc4MjhfQ01EX1BEMzsKLQlpZiAoIWRhdGEtPmRpZmZfaW5wdXQpCisJZGF0YS0+Y21kX2J5dGUgPSBleHRfdnJlZiA/IEFEUzc4MjhfQ01EX1BEMSA6IEFEUzc4MjhfQ01EX1BEMzsKKwlpZiAoIWRpZmZfaW5wdXQpCiAJCWRhdGEtPmNtZF9ieXRlIHw9IEFEUzc4MjhfQ01EX1NEX1NFOwogCi0JZGF0YS0+Y2xpZW50ID0gY2xpZW50OwotCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQogCWh3bW9uX2RldiA9IGRldm1faHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfZ3JvdXBzKGRldiwgY2xpZW50LT5uYW1lLAogCQkJCQkJCSAgIGRhdGEsCiAJCQkJCQkJICAgYWRzNzgyOF9ncm91cHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9pbmEyeHguYyBiL2RyaXZlcnMvaHdtb24vaW5hMnh4LmMKaW5kZXggZTAxZmViYS4uZDE1NDJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pbmEyeHguYworKysgYi9kcml2ZXJzL2h3bW9uL2luYTJ4eC5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9pbmEyeHguaD4KIApAQCAtNTEsNyArNTIsNiBAQAogI2RlZmluZSBJTkEyMjZfQUxFUlRfTElNSVQJCTB4MDcKICNkZWZpbmUgSU5BMjI2X0RJRV9JRAkJCTB4RkYKIAotCiAvKiByZWdpc3RlciBjb3VudCAqLwogI2RlZmluZSBJTkEyMTlfUkVHSVNURVJTCQk2CiAjZGVmaW5lIElOQTIyNl9SRUdJU1RFUlMJCTgKQEAgLTY0LDYgKzY0LDI0IEBACiAKIC8qIHdvcnN0IGNhc2UgaXMgNjguMTAgbXMgKH4xNC42SHosIGluYTIxOSkgKi8KICNkZWZpbmUgSU5BMlhYX0NPTlZFUlNJT05fUkFURQkJMTUKKyNkZWZpbmUgSU5BMlhYX01BWF9ERUxBWQkJNjkgLyogd29yc3QgY2FzZSBkZWxheSBpbiBtcyAqLworCisjZGVmaW5lIElOQTJYWF9SU0hVTlRfREVGQVVMVAkJMTAwMDAKKworLyogYml0IG1hc2sgZm9yIHJlYWRpbmcgdGhlIGF2ZXJhZ2luZyBzZXR0aW5nIGluIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICovCisjZGVmaW5lIElOQTIyNl9BVkdfUkRfTUFTSwkJMHgwRTAwCisKKyNkZWZpbmUgSU5BMjI2X1JFQURfQVZHKHJlZykJCSgoKHJlZykgJiBJTkEyMjZfQVZHX1JEX01BU0spID4+IDkpCisjZGVmaW5lIElOQTIyNl9TSElGVF9BVkcodmFsKQkJKCh2YWwpIDw8IDkpCisKKy8qIGNvbW1vbiBhdHRycywgaW5hMjI2IGF0dHJzIGFuZCBOVUxMICovCisjZGVmaW5lIElOQTJYWF9NQVhfQVRUUklCVVRFX0dST1VQUwkzCisKKy8qCisgKiBCb3RoIGJ1cyB2b2x0YWdlIGFuZCBzaHVudCB2b2x0YWdlIGNvbnZlcnNpb24gdGltZXMgZm9yIGluYTIyNiBhcmUgc2V0CisgKiB0byAwYjAxMDAgb24gUE9SLCB3aGljaCB0cmFuc2xhdGVzIHRvIDIyMDAgbWljcm9zZWNvbmRzIGluIHRvdGFsLgorICovCisjZGVmaW5lIElOQTIyNl9UT1RBTF9DT05WX1RJTUVfREVGQVVMVAkyMjAwCiAKIGVudW0gaW5hMnh4X2lkcyB7IGluYTIxOSwgaW5hMjI2IH07CiAKQEAgLTgxLDExICs5OSwxNiBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJY29uc3Qgc3RydWN0IGluYTJ4eF9jb25maWcgKmNvbmZpZzsKIAorCWxvbmcgcnNodW50OworCXUxNiBjdXJyX2NvbmZpZzsKKwogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAlib29sIHZhbGlkOwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOworCWludCB1cGRhdGVfaW50ZXJ2YWw7IC8qIGluIGppZmZpZXMgKi8KIAogCWludCBraW5kOworCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmdyb3Vwc1tJTkEyWFhfTUFYX0FUVFJJQlVURV9HUk9VUFNdOwogCXUxNiByZWdzW0lOQTJYWF9NQVhfUkVHSVNURVJTXTsKIH07CiAKQEAgLTExMCwzNCArMTMzLDE1NiBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGluYTJ4eF9kYXRhICppbmEyeHhfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCisvKgorICogQXZhaWxhYmxlIGF2ZXJhZ2luZyByYXRlcyBmb3IgaW5hMjI2LiBUaGUgaW5kaWNlcyBjb3JyZXNwb25kIHdpdGgKKyAqIHRoZSBiaXQgdmFsdWVzIGV4cGVjdGVkIGJ5IHRoZSBjaGlwIChhY2NvcmRpbmcgdG8gdGhlIGluYTIyNiBkYXRhc2hlZXQsCisgKiB0YWJsZSAzIEFWRyBiaXQgc2V0dGluZ3MsIGZvdW5kIGF0CisgKiBodHRwOi8vd3d3LnRpLmNvbS9saXQvZHMvc3ltbGluay9pbmEyMjYucGRmLgorICovCitzdGF0aWMgY29uc3QgaW50IGluYTIyNl9hdmdfdGFiW10gPSB7IDEsIDQsIDE2LCA2NCwgMTI4LCAyNTYsIDUxMiwgMTAyNCB9OworCitzdGF0aWMgaW50IGluYTIyNl9hdmdfYml0cyhpbnQgYXZnKQoreworCWludCBpOworCisJLyogR2V0IHRoZSBjbG9zZXN0IGF2ZXJhZ2UgZnJvbSB0aGUgdGFiLiAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluYTIyNl9hdmdfdGFiKSAtIDE7IGkrKykgeworCQlpZiAoYXZnIDw9IChpbmEyMjZfYXZnX3RhYltpXSArIGluYTIyNl9hdmdfdGFiW2kgKyAxXSkgLyAyKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGk7IC8qIFJldHVybiAwYjAxMTEgZm9yIHZhbHVlcyBncmVhdGVyIHRoYW4gMTAyNC4gKi8KK30KKworc3RhdGljIGludCBpbmEyMjZfcmVnX3RvX2ludGVydmFsKHUxNiBjb25maWcpCit7CisJaW50IGF2ZyA9IGluYTIyNl9hdmdfdGFiW0lOQTIyNl9SRUFEX0FWRyhjb25maWcpXTsKKworCS8qCisJICogTXVsdGlwbHkgdGhlIHRvdGFsIGNvbnZlcnNpb24gdGltZSBieSB0aGUgbnVtYmVyIG9mIGF2ZXJhZ2VzLgorCSAqIFJldHVybiB0aGUgcmVzdWx0IGluIG1pbGxpc2Vjb25kcy4KKwkgKi8KKwlyZXR1cm4gRElWX1JPVU5EX0NMT1NFU1QoYXZnICogSU5BMjI2X1RPVEFMX0NPTlZfVElNRV9ERUZBVUxULCAxMDAwKTsKK30KKworc3RhdGljIHUxNiBpbmEyMjZfaW50ZXJ2YWxfdG9fcmVnKGludCBpbnRlcnZhbCwgdTE2IGNvbmZpZykKK3sKKwlpbnQgYXZnLCBhdmdfYml0czsKKworCWF2ZyA9IERJVl9ST1VORF9DTE9TRVNUKGludGVydmFsICogMTAwMCwKKwkJCQlJTkEyMjZfVE9UQUxfQ09OVl9USU1FX0RFRkFVTFQpOworCWF2Z19iaXRzID0gaW5hMjI2X2F2Z19iaXRzKGF2Zyk7CisKKwlyZXR1cm4gKGNvbmZpZyAmIH5JTkEyMjZfQVZHX1JEX01BU0spIHwgSU5BMjI2X1NISUZUX0FWRyhhdmdfYml0cyk7Cit9CisKK3N0YXRpYyB2b2lkIGluYTIyNl9zZXRfdXBkYXRlX2ludGVydmFsKHN0cnVjdCBpbmEyeHhfZGF0YSAqZGF0YSkKK3sKKwlpbnQgbXM7CisKKwltcyA9IGluYTIyNl9yZWdfdG9faW50ZXJ2YWwoZGF0YS0+Y3Vycl9jb25maWcpOworCWRhdGEtPnVwZGF0ZV9pbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMobXMpOworfQorCitzdGF0aWMgaW50IGluYTJ4eF9jYWxpYnJhdGUoc3RydWN0IGluYTJ4eF9kYXRhICpkYXRhKQoreworCXUxNiB2YWwgPSBESVZfUk9VTkRfQ0xPU0VTVChkYXRhLT5jb25maWctPmNhbGlicmF0aW9uX2ZhY3RvciwKKwkJCQkgICAgZGF0YS0+cnNodW50KTsKKworCXJldHVybiBpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGRhdGEtPmNsaWVudCwKKwkJCQkJICAgIElOQTJYWF9DQUxJQlJBVElPTiwgdmFsKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGNhbGlicmF0aW9uIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIGludCBpbmEyeHhfaW5pdChzdHJ1Y3QgaW5hMnh4X2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRhdGEtPmNsaWVudDsKKwlpbnQgcmV0OworCisJLyogZGV2aWNlIGNvbmZpZ3VyYXRpb24gKi8KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgSU5BMlhYX0NPTkZJRywKKwkJCQkJICAgZGF0YS0+Y3Vycl9jb25maWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBTZXQgY3VycmVudCBMU0IgdG8gMW1BLCBzaHVudCBpcyBpbiB1T2htcworCSAqIChlcXVhdGlvbiAxMyBpbiBkYXRhc2hlZXQpLgorCSAqLworCXJldHVybiBpbmEyeHhfY2FsaWJyYXRlKGRhdGEpOworfQorCitzdGF0aWMgaW50IGluYTJ4eF9kb191cGRhdGUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBpbmEyeHhfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkYXRhLT5jbGllbnQ7CisJaW50IGksIHJ2LCByZXRyeTsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU3RhcnRpbmcgaW5hMnh4IHVwZGF0ZVxuIik7CisKKwlmb3IgKHJldHJ5ID0gNTsgcmV0cnk7IHJldHJ5LS0pIHsKKwkJLyogUmVhZCBhbGwgcmVnaXN0ZXJzICovCisJCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5jb25maWctPnJlZ2lzdGVyczsgaSsrKSB7CisJCQlydiA9IGkyY19zbWJ1c19yZWFkX3dvcmRfc3dhcHBlZChjbGllbnQsIGkpOworCQkJaWYgKHJ2IDwgMCkKKwkJCQlyZXR1cm4gcnY7CisJCQlkYXRhLT5yZWdzW2ldID0gcnY7CisJCX0KKworCQkvKgorCQkgKiBJZiB0aGUgY3VycmVudCB2YWx1ZSBpbiB0aGUgY2FsaWJyYXRpb24gcmVnaXN0ZXIgaXMgMCwgdGhlCisJCSAqIHBvd2VyIGFuZCBjdXJyZW50IHJlZ2lzdGVycyB3aWxsIGFsc28gcmVtYWluIGF0IDAuIEluIGNhc2UKKwkJICogdGhlIGNoaXAgaGFzIGJlZW4gcmVzZXQgbGV0J3MgY2hlY2sgdGhlIGNhbGlicmF0aW9uCisJCSAqIHJlZ2lzdGVyIGFuZCByZWluaXRpYWxpemUgaWYgbmVlZGVkLgorCQkgKi8KKwkJaWYgKGRhdGEtPnJlZ3NbSU5BMlhYX0NBTElCUkFUSU9OXSA9PSAwKSB7CisJCQlkZXZfd2FybihkZXYsICJjaGlwIG5vdCBjYWxpYnJhdGVkLCByZWluaXRpYWxpemluZ1xuIik7CisKKwkJCXJ2ID0gaW5hMnh4X2luaXQoZGF0YSk7CisJCQlpZiAocnYgPCAwKQorCQkJCXJldHVybiBydjsKKworCQkJLyoKKwkJCSAqIExldCdzIG1ha2Ugc3VyZSB0aGUgcG93ZXIgYW5kIGN1cnJlbnQgcmVnaXN0ZXJzCisJCQkgKiBoYXZlIGJlZW4gdXBkYXRlZCBiZWZvcmUgdHJ5aW5nIGFnYWluLgorCQkJICovCisJCQltc2xlZXAoSU5BMlhYX01BWF9ERUxBWSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CisJCWRhdGEtPnZhbGlkID0gMTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIElmIHdlJ3JlIGhlcmUgdGhlbiBhbHRob3VnaCBhbGwgd3JpdGUgb3BlcmF0aW9ucyBzdWNjZWVkZWQsIHRoZQorCSAqIGNoaXAgc3RpbGwgcmV0dXJucyAwIGluIHRoZSBjYWxpYnJhdGlvbiByZWdpc3Rlci4gTm90aGluZyBtb3JlIHdlCisJICogY2FuIGRvIGhlcmUuCisJICovCisJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gcmVpbml0aWFsaXplIHRoZSBjaGlwXG4iKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHN0cnVjdCBpbmEyeHhfZGF0YSAqaW5hMnh4X3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpbmEyeHhfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBpbmEyeHhfZGF0YSAqcmV0ID0gZGF0YTsKKwl1bnNpZ25lZCBsb25nIGFmdGVyOworCWludCBydjsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArCi0JCSAgICAgICBIWiAvIElOQTJYWF9DT05WRVJTSU9OX1JBVEUpIHx8ICFkYXRhLT52YWxpZCkgewotCi0JCWludCBpOwotCi0JCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU3RhcnRpbmcgaW5hMnh4IHVwZGF0ZVxuIik7Ci0KLQkJLyogUmVhZCBhbGwgcmVnaXN0ZXJzICovCi0JCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5jb25maWctPnJlZ2lzdGVyczsgaSsrKSB7Ci0JCQlpbnQgcnYgPSBpMmNfc21idXNfcmVhZF93b3JkX3N3YXBwZWQoY2xpZW50LCBpKTsKLQkJCWlmIChydiA8IDApIHsKLQkJCQlyZXQgPSBFUlJfUFRSKHJ2KTsKLQkJCQlnb3RvIGFib3J0OwotCQkJfQotCQkJZGF0YS0+cmVnc1tpXSA9IHJ2OwotCQl9Ci0JCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7Ci0JCWRhdGEtPnZhbGlkID0gMTsKKwlhZnRlciA9IGRhdGEtPmxhc3RfdXBkYXRlZCArIGRhdGEtPnVwZGF0ZV9pbnRlcnZhbDsKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBhZnRlcikgfHwgIWRhdGEtPnZhbGlkKSB7CisJCXJ2ID0gaW5hMnh4X2RvX3VwZGF0ZShkZXYpOworCQlpZiAocnYgPCAwKQorCQkJcmV0ID0gRVJSX1BUUihydik7CiAJfQotYWJvcnQ6CisKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTY0LDYgKzMwOSwxMCBAQAogCQkvKiBzaWduZWQgcmVnaXN0ZXIsIExTQj0xbUEgKHNlbGVjdGVkKSwgaW4gbUEgKi8KIAkJdmFsID0gKHMxNilkYXRhLT5yZWdzW3JlZ107CiAJCWJyZWFrOworCWNhc2UgSU5BMlhYX0NBTElCUkFUSU9OOgorCQl2YWwgPSBESVZfUk9VTkRfQ0xPU0VTVChkYXRhLT5jb25maWctPmNhbGlicmF0aW9uX2ZhY3RvciwKKwkJCQkJZGF0YS0+cmVnc1tyZWddKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogcHJvZ3JhbW1lciBnb29mZWQgKi8KIAkJV0FSTl9PTl9PTkNFKDEpOwpAQCAtMTg3LDYgKzMzNiw4NSBAQAogCQkJaW5hMnh4X2dldF92YWx1ZShkYXRhLCBhdHRyLT5pbmRleCkpOwogfQogCitzdGF0aWMgc3NpemVfdCBpbmEyeHhfc2V0X3NodW50KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGluYTJ4eF9kYXRhICpkYXRhID0gaW5hMnh4X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgc3RhdHVzOworCisJaWYgKElTX0VSUihkYXRhKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CisKKwlzdGF0dXMgPSBrc3RydG91bChidWYsIDEwLCAmdmFsKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmICh2YWwgPT0gMCB8fAorCSAgICAvKiBWYWx1ZXMgZ3JlYXRlciB0aGFuIHRoZSBjYWxpYnJhdGlvbiBmYWN0b3IgbWFrZSBubyBzZW5zZS4gKi8KKwkgICAgdmFsID4gZGF0YS0+Y29uZmlnLT5jYWxpYnJhdGlvbl9mYWN0b3IpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnJzaHVudCA9IHZhbDsKKwlzdGF0dXMgPSBpbmEyeHhfY2FsaWJyYXRlKGRhdGEpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBpbmEyMjZfc2V0X2ludGVydmFsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsCisJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGluYTJ4eF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHN0YXR1czsKKworCXN0YXR1cyA9IGtzdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJaWYgKHZhbCA+IElOVF9NQVggfHwgdmFsID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPmN1cnJfY29uZmlnID0gaW5hMjI2X2ludGVydmFsX3RvX3JlZyh2YWwsCisJCQkJCQkgICBkYXRhLT5yZWdzW0lOQTJYWF9DT05GSUddKTsKKwlzdGF0dXMgPSBpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGRhdGEtPmNsaWVudCwKKwkJCQkJICAgICAgSU5BMlhYX0NPTkZJRywKKwkJCQkJICAgICAgZGF0YS0+Y3Vycl9jb25maWcpOworCisJaW5hMjI2X3NldF91cGRhdGVfaW50ZXJ2YWwoZGF0YSk7CisJLyogTWFrZSBzdXJlIHRoZSBuZXh0IGFjY2VzcyByZS1yZWFkcyBhbGwgcmVnaXN0ZXJzLiAqLworCWRhdGEtPnZhbGlkID0gMDsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgaW5hMjI2X3Nob3dfaW50ZXJ2YWwoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGEsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaW5hMnh4X2RhdGEgKmRhdGEgPSBpbmEyeHhfdXBkYXRlX2RldmljZShkZXYpOworCisJaWYgKElTX0VSUihkYXRhKSkKKwkJcmV0dXJuIFBUUl9FUlIoZGF0YSk7CisKKwkvKgorCSAqIFdlIGRvbid0IHVzZSBkYXRhLT51cGRhdGVfaW50ZXJ2YWwgaGVyZSBhcyB3ZSB3YW50IHRvIGRpc3BsYXkKKwkgKiB0aGUgYWN0dWFsIGludGVydmFsIHVzZWQgYnkgdGhlIGNoaXAgYW5kIGppZmZpZXNfdG9fbXNlY3MoKQorCSAqIGRvZXNuJ3Qgc2VlbSB0byBiZSBhY2N1cmF0ZSBlbm91Z2guCisJICovCisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsCisJCQlpbmEyMjZfcmVnX3RvX2ludGVydmFsKGRhdGEtPnJlZ3NbSU5BMlhYX0NPTkZJR10pKTsKK30KKwogLyogc2h1bnQgdm9sdGFnZSAqLwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjBfaW5wdXQsIFNfSVJVR08sIGluYTJ4eF9zaG93X3ZhbHVlLCBOVUxMLAogCQkJICBJTkEyWFhfU0hVTlRfVk9MVEFHRSk7CkBAIC0yMDMsMTUgKzQzMSwzNyBAQAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwb3dlcjFfaW5wdXQsIFNfSVJVR08sIGluYTJ4eF9zaG93X3ZhbHVlLCBOVUxMLAogCQkJICBJTkEyWFhfUE9XRVIpOwogCisvKiBzaHVudCByZXNpc3RhbmNlICovCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHNodW50X3Jlc2lzdG9yLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgaW5hMnh4X3Nob3dfdmFsdWUsIGluYTJ4eF9zZXRfc2h1bnQsCisJCQkgIElOQTJYWF9DQUxJQlJBVElPTik7CisKKy8qIHVwZGF0ZSBpbnRlcnZhbCAoaW5hMjI2IG9ubHkpICovCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHVwZGF0ZV9pbnRlcnZhbCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIGluYTIyNl9zaG93X2ludGVydmFsLCBpbmEyMjZfc2V0X2ludGVydmFsLCAwKTsKKwogLyogcG9pbnRlcnMgdG8gY3JlYXRlZCBkZXZpY2UgYXR0cmlidXRlcyAqLwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmluYTJ4eF9hdHRyc1tdID0gewogCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2N1cnIxX2lucHV0LmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wb3dlcjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3NodW50X3Jlc2lzdG9yLmRldl9hdHRyLmF0dHIsCiAJTlVMTCwKIH07Ci1BVFRSSUJVVEVfR1JPVVBTKGluYTJ4eCk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGluYTJ4eF9ncm91cCA9IHsKKwkuYXR0cnMgPSBpbmEyeHhfYXR0cnMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaW5hMjI2X2F0dHJzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl91cGRhdGVfaW50ZXJ2YWwuZGV2X2F0dHIuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaW5hMjI2X2dyb3VwID0geworCS5hdHRycyA9IGluYTIyNl9hdHRycywKK307CiAKIHN0YXRpYyBpbnQgaW5hMnh4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCkBAIC0yMjEsOSArNDcxLDggQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CiAJc3RydWN0IGluYTJ4eF9kYXRhICpkYXRhOwogCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKLQlsb25nIHNodW50ID0gMTAwMDA7IC8qIGRlZmF1bHQgc2h1bnQgdmFsdWUgMTBtT2htcyAqLwogCXUzMiB2YWw7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBncm91cCA9IDA7CiAKIAlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSkpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMjM0LDUwICs0ODMsNTIgQEAKIAogCWlmIChkZXZfZ2V0X3BsYXRkYXRhKGRldikpIHsKIAkJcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKGRldik7Ci0JCXNodW50ID0gcGRhdGEtPnNodW50X3VvaG1zOworCQlkYXRhLT5yc2h1bnQgPSBwZGF0YS0+c2h1bnRfdW9obXM7CiAJfSBlbHNlIGlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLAogCQkJCQkgInNodW50LXJlc2lzdG9yIiwgJnZhbCkpIHsKLQkJc2h1bnQgPSB2YWw7CisJCWRhdGEtPnJzaHVudCA9IHZhbDsKKwl9IGVsc2UgeworCQlkYXRhLT5yc2h1bnQgPSBJTkEyWFhfUlNIVU5UX0RFRkFVTFQ7CiAJfQogCi0JaWYgKHNodW50IDw9IDApCi0JCXJldHVybiAtRU5PREVWOwotCiAJLyogc2V0IHRoZSBkZXZpY2UgdHlwZSAqLwogCWRhdGEtPmtpbmQgPSBpZC0+ZHJpdmVyX2RhdGE7CiAJZGF0YS0+Y29uZmlnID0gJmluYTJ4eF9jb25maWdbZGF0YS0+a2luZF07Ci0KLQkvKiBkZXZpY2UgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IGkyY19zbWJ1c193cml0ZV93b3JkX3N3YXBwZWQoY2xpZW50LCBJTkEyWFhfQ09ORklHLAotCQkJCQkgICBkYXRhLT5jb25maWctPmNvbmZpZ19kZWZhdWx0KTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGRldiwKLQkJCSJlcnJvciB3cml0aW5nIHRvIHRoZSBjb25maWcgcmVnaXN0ZXI6ICVkIiwgcmV0KTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCWRhdGEtPmN1cnJfY29uZmlnID0gZGF0YS0+Y29uZmlnLT5jb25maWdfZGVmYXVsdDsKKwlkYXRhLT5jbGllbnQgPSBjbGllbnQ7CiAKIAkvKgotCSAqIFNldCBjdXJyZW50IExTQiB0byAxbUEsIHNodW50IGlzIGluIHVPaG1zCi0JICogKGVxdWF0aW9uIDEzIGluIGRhdGFzaGVldCkuCisJICogSW5hMjI2IGhhcyBhIHZhcmlhYmxlIHVwZGF0ZV9pbnRlcnZhbC4gRm9yIGluYTIxOSB3ZQorCSAqIHVzZSBhIGNvbnN0YW50IHZhbHVlLgogCSAqLwotCXJldCA9IGkyY19zbWJ1c193cml0ZV93b3JkX3N3YXBwZWQoY2xpZW50LCBJTkEyWFhfQ0FMSUJSQVRJT04sCi0JCQkJZGF0YS0+Y29uZmlnLT5jYWxpYnJhdGlvbl9mYWN0b3IgLyBzaHVudCk7CisJaWYgKGRhdGEtPmtpbmQgPT0gaW5hMjI2KQorCQlpbmEyMjZfc2V0X3VwZGF0ZV9pbnRlcnZhbChkYXRhKTsKKwllbHNlCisJCWRhdGEtPnVwZGF0ZV9pbnRlcnZhbCA9IEhaIC8gSU5BMlhYX0NPTlZFUlNJT05fUkFURTsKKworCWlmIChkYXRhLT5yc2h1bnQgPD0gMCB8fAorCSAgICBkYXRhLT5yc2h1bnQgPiBkYXRhLT5jb25maWctPmNhbGlicmF0aW9uX2ZhY3RvcikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBpbmEyeHhfaW5pdChkYXRhKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGRldiwKLQkJCSJlcnJvciB3cml0aW5nIHRvIHRoZSBjYWxpYnJhdGlvbiByZWdpc3RlcjogJWQiLCByZXQpOworCQlkZXZfZXJyKGRldiwgImVycm9yIGNvbmZpZ3VyaW5nIHRoZSBkZXZpY2U6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkYXRhLT5jbGllbnQgPSBjbGllbnQ7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCisJZGF0YS0+Z3JvdXBzW2dyb3VwKytdID0gJmluYTJ4eF9ncm91cDsKKwlpZiAoZGF0YS0+a2luZCA9PSBpbmEyMjYpCisJCWRhdGEtPmdyb3Vwc1tncm91cCsrXSA9ICZpbmEyMjZfZ3JvdXA7CisKIAlod21vbl9kZXYgPSBkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3VwcyhkZXYsIGNsaWVudC0+bmFtZSwKLQkJCQkJCQkgICBkYXRhLCBpbmEyeHhfZ3JvdXBzKTsKKwkJCQkJCQkgICBkYXRhLCBkYXRhLT5ncm91cHMpOwogCWlmIChJU19FUlIoaHdtb25fZGV2KSkKIAkJcmV0dXJuIFBUUl9FUlIoaHdtb25fZGV2KTsKIAogCWRldl9pbmZvKGRldiwgInBvd2VyIG1vbml0b3IgJXMgKFJzaHVudCA9ICVsaSB1T2htKVxuIiwKLQkJIGlkLT5uYW1lLCBzaHVudCk7CisJCSBpZC0+bmFtZSwgZGF0YS0+cnNodW50KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjg3LDYgKzUzOCw3IEBACiAJeyAiaW5hMjIwIiwgaW5hMjE5IH0sCiAJeyAiaW5hMjI2IiwgaW5hMjI2IH0sCiAJeyAiaW5hMjMwIiwgaW5hMjI2IH0sCisJeyAiaW5hMjMxIiwgaW5hMjI2IH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGluYTJ4eF9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2pjNDIuYyBiL2RyaXZlcnMvaHdtb24vamM0Mi5jCmluZGV4IDM4OGY4YmMuLjk5NmJkZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vamM0Mi5jCisrKyBiL2RyaXZlcnMvaHdtb24vamM0Mi5jCkBAIC0yMDEsNyArMjAxLDcgQEAKICNkZWZpbmUgSkM0Ml9URU1QX01JTgkJMAogI2RlZmluZSBKQzQyX1RFTVBfTUFYCQkxMjUwMDAKIAotc3RhdGljIHUxNiBqYzQyX3RlbXBfdG9fcmVnKGludCB0ZW1wLCBib29sIGV4dGVuZGVkKQorc3RhdGljIHUxNiBqYzQyX3RlbXBfdG9fcmVnKGxvbmcgdGVtcCwgYm9vbCBleHRlbmRlZCkKIHsKIAlpbnQgbnRlbXAgPSBjbGFtcF92YWwodGVtcCwKIAkJCSAgICAgIGV4dGVuZGVkID8gSkM0Ml9URU1QX01JTl9FWFRFTkRFRCA6CkBAIC0yMTMsMTEgKzIxMyw3IEBACiAKIHN0YXRpYyBpbnQgamM0Ml90ZW1wX2Zyb21fcmVnKHMxNiByZWcpCiB7Ci0JcmVnICY9IDB4MWZmZjsKLQotCS8qIHNpZ24gZXh0ZW5kIHJlZ2lzdGVyICovCi0JaWYgKHJlZyAmIDB4MTAwMCkKLQkJcmVnIHw9IDB4ZjAwMDsKKwlyZWcgPSBzaWduX2V4dGVuZDMyKHJlZywgMTIpOwogCiAJLyogY29udmVydCBmcm9tIDAuMDYyNSB0byAwLjAwMSByZXNvbHV0aW9uICovCiAJcmV0dXJuIHJlZyAqIDEyNSAvIDI7CkBAIC0zMDgsMTUgKzMwNCwxOCBAQAogCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGpjNDJfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXVuc2lnbmVkIGxvbmcgdmFsOworCWxvbmcgdmFsOwogCWludCBkaWZmLCBoeXN0OwogCWludCBlcnI7CiAJaW50IHJldCA9IGNvdW50OwogCi0JaWYgKGtzdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpIDwgMCkKKwlpZiAoa3N0cnRvbChidWYsIDEwLCAmdmFsKSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCisJdmFsID0gY2xhbXBfdmFsKHZhbCwgKGRhdGEtPmV4dGVuZGVkID8gSkM0Ml9URU1QX01JTl9FWFRFTkRFRCA6CisJCQkgICAgICBKQzQyX1RFTVBfTUlOKSAtIDYwMDAsIEpDNDJfVEVNUF9NQVgpOwogCWRpZmYgPSBqYzQyX3RlbXBfZnJvbV9yZWcoZGF0YS0+dGVtcFt0X2NyaXRdKSAtIHZhbDsKKwogCWh5c3QgPSAwOwogCWlmIChkaWZmID4gMCkgewogCQlpZiAoZGlmZiA8IDIyNTApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL25jdDc4MDIuYyBiL2RyaXZlcnMvaHdtb24vbmN0NzgwMi5jCmluZGV4IGVjNTY3ODIuLjU1NzY1NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbmN0NzgwMi5jCisrKyBiL2RyaXZlcnMvaHdtb24vbmN0NzgwMi5jCkBAIC03NzksNyArNzc5LDcgQEAKIAlyZXR1cm4gcmVnICE9IFJFR19CQU5LICYmIHJlZyA8PSAweDIwOwogfQogCi1zdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgbmN0NzgwMl9yZWdtYXBfY29uZmlnID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG5jdDc4MDJfcmVnbWFwX2NvbmZpZyA9IHsKIAkucmVnX2JpdHMgPSA4LAogCS52YWxfYml0cyA9IDgsCiAJLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9SQlRSRUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3RtcDEwMi5jIGIvZHJpdmVycy9od21vbi90bXAxMDIuYwppbmRleCBiYTlmNDc4Li45ZGEyNzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3RtcDEwMi5jCisrKyBiL2RyaXZlcnMvaHdtb24vdG1wMTAyLmMKQEAgLTI1Myw3ICsyNTMsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BNCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgaW50IHRtcDEwMl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwpAQCAtMjc5LDE3ICsyNzksMTAgQEAKIAljb25maWcgJj0gflRNUDEwMl9DT05GX1NEOwogCXJldHVybiBpMmNfc21idXNfd3JpdGVfd29yZF9zd2FwcGVkKGNsaWVudCwgVE1QMTAyX0NPTkZfUkVHLCBjb25maWcpOwogfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdG1wMTAyX2Rldl9wbV9vcHMgPSB7Ci0JLnN1c3BlbmQJPSB0bXAxMDJfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHRtcDEwMl9yZXN1bWUsCi19OwotCi0jZGVmaW5lIFRNUDEwMl9ERVZfUE1fT1BTICgmdG1wMTAyX2Rldl9wbV9vcHMpCi0jZWxzZQotI2RlZmluZQlUTVAxMDJfREVWX1BNX09QUyBOVUxMCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyh0bXAxMDJfZGV2X3BtX29wcywgdG1wMTAyX3N1c3BlbmQsIHRtcDEwMl9yZXN1bWUpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgdG1wMTAyX2lkW10gPSB7CiAJeyAidG1wMTAyIiwgMCB9LAogCXsgfQpAQCAtMjk4LDcgKzI5MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB0bXAxMDJfZHJpdmVyID0gewogCS5kcml2ZXIubmFtZQk9IERSSVZFUl9OQU1FLAotCS5kcml2ZXIucG0JPSBUTVAxMDJfREVWX1BNX09QUywKKwkuZHJpdmVyLnBtCT0gJnRtcDEwMl9kZXZfcG1fb3BzLAogCS5wcm9iZQkJPSB0bXAxMDJfcHJvYmUsCiAJLnJlbW92ZQkJPSB0bXAxMDJfcmVtb3ZlLAogCS5pZF90YWJsZQk9IHRtcDEwMl9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKaW5kZXggMzFlODMwOC4uYWI4MzhkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKQEAgLTg4MSw2ICs4ODEsNyBAQAogY29uZmlnIEkyQ19SQ0FSCiAJdHJpc3RhdGUgIlJlbmVzYXMgUi1DYXIgSTJDIENvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBBUkNIX1NITU9CSUxFIHx8IENPTVBJTEVfVEVTVAorCXNlbGVjdCBJMkNfU0xBVkUKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyB0byB0aGlzIG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGZvciB0aGUKIAkgIFItQ2FyIEkyQyBjb250cm9sbGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zM2MyNDEwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwppbmRleCBiZmYyMGE1Li45NThjOGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwpAQCAtNzg1LDE0ICs3ODUsMTYgQEAKIAlpbnQgcmV0OwogCiAJcG1fcnVudGltZV9nZXRfc3luYygmYWRhcC0+ZGV2KTsKLQljbGtfcHJlcGFyZV9lbmFibGUoaTJjLT5jbGspOworCXJldCA9IGNsa19lbmFibGUoaTJjLT5jbGspOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlmb3IgKHJldHJ5ID0gMDsgcmV0cnkgPCBhZGFwLT5yZXRyaWVzOyByZXRyeSsrKSB7CiAKIAkJcmV0ID0gczNjMjR4eF9pMmNfZG94ZmVyKGkyYywgbXNncywgbnVtKTsKIAogCQlpZiAocmV0ICE9IC1FQUdBSU4pIHsKLQkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShpMmMtPmNsayk7CisJCQljbGtfZGlzYWJsZShpMmMtPmNsayk7CiAJCQlwbV9ydW50aW1lX3B1dCgmYWRhcC0+ZGV2KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KQEAgLTgwMiw3ICs4MDQsNyBAQAogCQl1ZGVsYXkoMTAwKTsKIAl9CiAKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJjLT5jbGspOworCWNsa19kaXNhYmxlKGkyYy0+Y2xrKTsKIAlwbV9ydW50aW1lX3B1dCgmYWRhcC0+ZGV2KTsKIAlyZXR1cm4gLUVSRU1PVEVJTzsKIH0KQEAgLTExOTcsNyArMTE5OSw3IEBACiAKIAljbGtfcHJlcGFyZV9lbmFibGUoaTJjLT5jbGspOwogCXJldCA9IHMzYzI0eHhfaTJjX2luaXQoaTJjKTsKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJjLT5jbGspOworCWNsa19kaXNhYmxlKGkyYy0+Y2xrKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiSTJDIGNvbnRyb2xsZXIgaW5pdCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmV0OwpAQCAtMTIxMCw2ICsxMjEyLDcgQEAKIAkJaTJjLT5pcnEgPSByZXQgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCQlpZiAocmV0IDw9IDApIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBmaW5kIElSUVxuIik7CisJCQljbGtfdW5wcmVwYXJlKGkyYy0+Y2xrKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIApAQCAtMTIxOCw2ICsxMjIxLDcgQEAKIAogCQlpZiAocmV0ICE9IDApIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBjbGFpbSBJUlEgJWRcbiIsIGkyYy0+aXJxKTsKKwkJCWNsa191bnByZXBhcmUoaTJjLT5jbGspOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTEyMjUsNiArMTIyOSw3IEBACiAJcmV0ID0gczNjMjR4eF9pMmNfcmVnaXN0ZXJfY3B1ZnJlcShpMmMpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBjcHVmcmVxIG5vdGlmaWVyXG4iKTsKKwkJY2xrX3VucHJlcGFyZShpMmMtPmNsayk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xMjQxLDYgKzEyNDYsNyBAQAogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgYnVzIHRvIGkyYyBjb3JlXG4iKTsKIAkJczNjMjR4eF9pMmNfZGVyZWdpc3Rlcl9jcHVmcmVxKGkyYyk7CisJCWNsa191bnByZXBhcmUoaTJjLT5jbGspOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTI2Miw2ICsxMjY4LDggQEAKIHsKIAlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCisJY2xrX3VucHJlcGFyZShpMmMtPmNsayk7CisKIAlwbV9ydW50aW1lX2Rpc2FibGUoJmkyYy0+YWRhcC5kZXYpOwogCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKIApAQCAtMTI5MywxMyArMTMwMSwxNiBAQAogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgczNjMjR4eF9pMmMgKmkyYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CiAKIAlpZiAoIUlTX0VSUihpMmMtPnN5c3JlZykpCiAJCXJlZ21hcF93cml0ZShpMmMtPnN5c3JlZywgRVhZTk9TNV9TWVNfSTJDX0NGRywgaTJjLT5zeXNfaTJjX2NmZyk7CiAKLQljbGtfcHJlcGFyZV9lbmFibGUoaTJjLT5jbGspOworCXJldCA9IGNsa19lbmFibGUoaTJjLT5jbGspOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAJczNjMjR4eF9pMmNfaW5pdChpMmMpOwotCWNsa19kaXNhYmxlX3VucHJlcGFyZShpMmMtPmNsayk7CisJY2xrX2Rpc2FibGUoaTJjLT5jbGspOwogCWkyYy0+c3VzcGVuZGVkID0gMDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaF9tb2JpbGUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2hfbW9iaWxlLmMKaW5kZXggNDQwZDVkYi4uMDA3ODE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaF9tb2JpbGUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNoX21vYmlsZS5jCkBAIC0xMzksNiArMTM5LDcgQEAKIAlpbnQgcG9zOwogCWludCBzcjsKIAlib29sIHNlbmRfc3RvcDsKKwlib29sIHN0b3BfYWZ0ZXJfZG1hOwogCiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IGRtYV9jaGFuICpkbWFfdHg7CkBAIC00MDcsNyArNDA4LDcgQEAKIAogCWlmIChwZC0+cG9zID09IHBkLT5tc2ctPmxlbikgewogCQkvKiBTZW5kIHN0b3AgaWYgd2UgaGF2ZW4ndCB5ZXQgKERNQSBjYXNlKSAqLwotCQlpZiAocGQtPnNlbmRfc3RvcCAmJiAoaWljX3JkKHBkLCBJQ0NSKSAmIElDQ1JfQkJTWSkpCisJCWlmIChwZC0+c2VuZF9zdG9wICYmIHBkLT5zdG9wX2FmdGVyX2RtYSkKIAkJCWkyY19vcChwZCwgT1BfVFhfU1RPUCwgMCk7CiAJCXJldHVybiAxOwogCX0KQEAgLTQ0OSw2ICs0NTAsMTMgQEAKIAkJcmVhbF9wb3MgPSBwZC0+cG9zIC0gMjsKIAogCQlpZiAocGQtPnBvcyA9PSBwZC0+bXNnLT5sZW4pIHsKKwkJCWlmIChwZC0+c3RvcF9hZnRlcl9kbWEpIHsKKwkJCQkvKiBTaW11bGF0ZSBQSU8gZW5kIGNvbmRpdGlvbiBhZnRlciBETUEgdHJhbnNmZXIgKi8KKwkJCQlpMmNfb3AocGQsIE9QX1JYX1NUT1AsIDApOworCQkJCXBkLT5wb3MrKzsKKwkJCQlicmVhazsKKwkJCX0KKwogCQkJaWYgKHJlYWxfcG9zIDwgMCkgewogCQkJCWkyY19vcChwZCwgT1BfUlhfU1RPUCwgMCk7CiAJCQkJYnJlYWs7CkBAIC01MzYsNiArNTQ0LDcgQEAKIAogCXNoX21vYmlsZV9pMmNfZG1hX3VubWFwKHBkKTsKIAlwZC0+cG9zID0gcGQtPm1zZy0+bGVuOworCXBkLT5zdG9wX2FmdGVyX2RtYSA9IHRydWU7CiAKIAlpaWNfc2V0X2NscihwZCwgSUNJQywgMCwgSUNJQ19URE1BRSB8IElDSUNfUkRNQUUpOwogfQpAQCAtNzI2LDYgKzczNSw3IEBACiAJCWJvb2wgZG9fc3RhcnQgPSBwZC0+c2VuZF9zdG9wIHx8ICFpOwogCQltc2cgPSAmbXNnc1tpXTsKIAkJcGQtPnNlbmRfc3RvcCA9IGkgPT0gbnVtIC0gMSB8fCBtc2ctPmZsYWdzICYgSTJDX01fU1RPUDsKKwkJcGQtPnN0b3BfYWZ0ZXJfZG1hID0gZmFsc2U7CiAKIAkJZXJyID0gc3RhcnRfY2gocGQsIG1zZywgZG9fc3RhcnQpOwogCQlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggMzlkMjVhOC4uZTllYWU1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC0yOTcyLDYgKzI5NzIsNyBAQAogfQogRVhQT1JUX1NZTUJPTChpMmNfc21idXNfeGZlcik7CiAKKyNpZiBJU19FTkFCTEVEKENPTkZJR19JMkNfU0xBVkUpCiBpbnQgaTJjX3NsYXZlX3JlZ2lzdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGkyY19zbGF2ZV9jYl90IHNsYXZlX2NiKQogewogCWludCByZXQ7CkBAIC0zMDE5LDYgKzMwMjAsNyBAQAogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpMmNfc2xhdmVfdW5yZWdpc3Rlcik7CisjZW5kaWYKIAogTU9EVUxFX0FVVEhPUigiU2ltb24gRy4gVm9nbCA8c2ltb25AdGsudW5pLWxpbnouYWMuYXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkkyQy1CdXMgbWFpbiBtb2R1bGUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2kyYy1zbGF2ZS1lZXByb20uYyBiL2RyaXZlcnMvaTJjL2kyYy1zbGF2ZS1lZXByb20uYwppbmRleCA2NjMxNDAwLi5jZjliMDlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtc2xhdmUtZWVwcm9tLmMKKysrIGIvZHJpdmVycy9pMmMvaTJjLXNsYXZlLWVlcHJvbS5jCkBAIC03NCw3ICs3NCw3IEBACiAJc3RydWN0IGVlcHJvbV9kYXRhICplZXByb207CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChvZmYgKyBjb3VudCA+PSBhdHRyLT5zaXplKQorCWlmIChvZmYgKyBjb3VudCA+IGF0dHItPnNpemUpCiAJCXJldHVybiAtRUZCSUc7CiAKIAllZXByb20gPSBkZXZfZ2V0X2RydmRhdGEoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopKTsKQEAgLTkyLDcgKzkyLDcgQEAKIAlzdHJ1Y3QgZWVwcm9tX2RhdGEgKmVlcHJvbTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKG9mZiArIGNvdW50ID49IGF0dHItPnNpemUpCisJaWYgKG9mZiArIGNvdW50ID4gYXR0ci0+c2l6ZSkKIAkJcmV0dXJuIC1FRkJJRzsKIAogCWVlcHJvbSA9IGRldl9nZXRfZHJ2ZGF0YShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9paW8vYWRjL3RpX2FtMzM1eF9hZGMuYyBiL2RyaXZlcnMvaWlvL2FkYy90aV9hbTMzNXhfYWRjLmMKaW5kZXggYjczMDg2NC4uYWRiYTIzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9paW8vYWRjL3RpX2FtMzM1eF9hZGMuYworKysgYi9kcml2ZXJzL2lpby9hZGMvdGlfYW0zMzV4X2FkYy5jCkBAIC04NiwxOSArODYsMTggQEAKIHsKIAlzdHJ1Y3QgdGlhZGNfZGV2aWNlICphZGNfZGV2ID0gaWlvX3ByaXYoaW5kaW9fZGV2KTsKIAl1bnNpZ25lZCBpbnQgc3RlcGNvbmZpZzsKLQlpbnQgaSwgc3RlcHM7CisJaW50IGksIHN0ZXBzID0gMDsKIAogCS8qCiAJICogVGhlcmUgYXJlIDE2IGNvbmZpZ3VyYWJsZSBzdGVwcyBhbmQgOCBhbmFsb2cgaW5wdXQKIAkgKiBsaW5lcyBhdmFpbGFibGUgd2hpY2ggYXJlIHNoYXJlZCBiZXR3ZWVuIFRvdWNoc2NyZWVuIGFuZCBBREMuCiAJICoKLQkgKiBTdGVwcyBiYWNrd2FyZHMgaS5lLiBmcm9tIDE2IHRvd2FyZHMgMCBhcmUgdXNlZCBieSBBREMKKwkgKiBTdGVwcyBmb3J3YXJkcyBpLmUuIGZyb20gMCB0b3dhcmRzIDE2IGFyZSB1c2VkIGJ5IEFEQwogCSAqIGRlcGVuZGluZyBvbiBudW1iZXIgb2YgaW5wdXQgbGluZXMgbmVlZGVkLgogCSAqIENoYW5uZWwgd291bGQgcmVwcmVzZW50IHdoaWNoIGFuYWxvZyBpbnB1dAogCSAqIG5lZWRzIHRvIGJlIGdpdmVuIHRvIEFEQyB0byBkaWdpdGFsaXplIGRhdGEuCiAJICovCiAKLQlzdGVwcyA9IFRPVEFMX1NURVBTIC0gYWRjX2Rldi0+Y2hhbm5lbHM7CiAJaWYgKGlpb19idWZmZXJfZW5hYmxlZChpbmRpb19kZXYpKQogCQlzdGVwY29uZmlnID0gU1RFUENPTkZJR19BVkdfMTYgfCBTVEVQQ09ORklHX0ZJRk8xCiAJCQkJCXwgU1RFUENPTkZJR19NT0RFX1NXQ05UOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaAppbmRleCBiNzE2YjA4Li42NDNjMDhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaApAQCAtMjU4LDYgKzI1OCw1IEBACiAKIElCX1VWRVJCU19ERUNMQVJFX0VYX0NNRChjcmVhdGVfZmxvdyk7CiBJQl9VVkVSQlNfREVDTEFSRV9FWF9DTUQoZGVzdHJveV9mbG93KTsKLUlCX1VWRVJCU19ERUNMQVJFX0VYX0NNRChxdWVyeV9kZXZpY2UpOwogCiAjZW5kaWYgLyogVVZFUkJTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYwppbmRleCA1MzJkOGViYTguLmI3OTQzZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKQEAgLTQwMCw1MiArNDAwLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBjb3B5X3F1ZXJ5X2Rldl9maWVsZHMoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAotCQkJCSAgc3RydWN0IGliX3V2ZXJic19xdWVyeV9kZXZpY2VfcmVzcCAqcmVzcCwKLQkJCQkgIHN0cnVjdCBpYl9kZXZpY2VfYXR0ciAqYXR0cikKLXsKLQlyZXNwLT5md192ZXIJCT0gYXR0ci0+ZndfdmVyOwotCXJlc3AtPm5vZGVfZ3VpZAkJPSBmaWxlLT5kZXZpY2UtPmliX2Rldi0+bm9kZV9ndWlkOwotCXJlc3AtPnN5c19pbWFnZV9ndWlkCT0gYXR0ci0+c3lzX2ltYWdlX2d1aWQ7Ci0JcmVzcC0+bWF4X21yX3NpemUJPSBhdHRyLT5tYXhfbXJfc2l6ZTsKLQlyZXNwLT5wYWdlX3NpemVfY2FwCT0gYXR0ci0+cGFnZV9zaXplX2NhcDsKLQlyZXNwLT52ZW5kb3JfaWQJCT0gYXR0ci0+dmVuZG9yX2lkOwotCXJlc3AtPnZlbmRvcl9wYXJ0X2lkCT0gYXR0ci0+dmVuZG9yX3BhcnRfaWQ7Ci0JcmVzcC0+aHdfdmVyCQk9IGF0dHItPmh3X3ZlcjsKLQlyZXNwLT5tYXhfcXAJCT0gYXR0ci0+bWF4X3FwOwotCXJlc3AtPm1heF9xcF93cgkJPSBhdHRyLT5tYXhfcXBfd3I7Ci0JcmVzcC0+ZGV2aWNlX2NhcF9mbGFncwk9IGF0dHItPmRldmljZV9jYXBfZmxhZ3M7Ci0JcmVzcC0+bWF4X3NnZQkJPSBhdHRyLT5tYXhfc2dlOwotCXJlc3AtPm1heF9zZ2VfcmQJPSBhdHRyLT5tYXhfc2dlX3JkOwotCXJlc3AtPm1heF9jcQkJPSBhdHRyLT5tYXhfY3E7Ci0JcmVzcC0+bWF4X2NxZQkJPSBhdHRyLT5tYXhfY3FlOwotCXJlc3AtPm1heF9tcgkJPSBhdHRyLT5tYXhfbXI7Ci0JcmVzcC0+bWF4X3BkCQk9IGF0dHItPm1heF9wZDsKLQlyZXNwLT5tYXhfcXBfcmRfYXRvbQk9IGF0dHItPm1heF9xcF9yZF9hdG9tOwotCXJlc3AtPm1heF9lZV9yZF9hdG9tCT0gYXR0ci0+bWF4X2VlX3JkX2F0b207Ci0JcmVzcC0+bWF4X3Jlc19yZF9hdG9tCT0gYXR0ci0+bWF4X3Jlc19yZF9hdG9tOwotCXJlc3AtPm1heF9xcF9pbml0X3JkX2F0b20JPSBhdHRyLT5tYXhfcXBfaW5pdF9yZF9hdG9tOwotCXJlc3AtPm1heF9lZV9pbml0X3JkX2F0b20JPSBhdHRyLT5tYXhfZWVfaW5pdF9yZF9hdG9tOwotCXJlc3AtPmF0b21pY19jYXAJCT0gYXR0ci0+YXRvbWljX2NhcDsKLQlyZXNwLT5tYXhfZWUJCQk9IGF0dHItPm1heF9lZTsKLQlyZXNwLT5tYXhfcmRkCQkJPSBhdHRyLT5tYXhfcmRkOwotCXJlc3AtPm1heF9tdwkJCT0gYXR0ci0+bWF4X213OwotCXJlc3AtPm1heF9yYXdfaXB2Nl9xcAkJPSBhdHRyLT5tYXhfcmF3X2lwdjZfcXA7Ci0JcmVzcC0+bWF4X3Jhd19ldGh5X3FwCQk9IGF0dHItPm1heF9yYXdfZXRoeV9xcDsKLQlyZXNwLT5tYXhfbWNhc3RfZ3JwCQk9IGF0dHItPm1heF9tY2FzdF9ncnA7Ci0JcmVzcC0+bWF4X21jYXN0X3FwX2F0dGFjaAk9IGF0dHItPm1heF9tY2FzdF9xcF9hdHRhY2g7Ci0JcmVzcC0+bWF4X3RvdGFsX21jYXN0X3FwX2F0dGFjaAk9IGF0dHItPm1heF90b3RhbF9tY2FzdF9xcF9hdHRhY2g7Ci0JcmVzcC0+bWF4X2FoCQkJPSBhdHRyLT5tYXhfYWg7Ci0JcmVzcC0+bWF4X2ZtcgkJCT0gYXR0ci0+bWF4X2ZtcjsKLQlyZXNwLT5tYXhfbWFwX3Blcl9mbXIJCT0gYXR0ci0+bWF4X21hcF9wZXJfZm1yOwotCXJlc3AtPm1heF9zcnEJCQk9IGF0dHItPm1heF9zcnE7Ci0JcmVzcC0+bWF4X3NycV93cgkJPSBhdHRyLT5tYXhfc3JxX3dyOwotCXJlc3AtPm1heF9zcnFfc2dlCQk9IGF0dHItPm1heF9zcnFfc2dlOwotCXJlc3AtPm1heF9wa2V5cwkJCT0gYXR0ci0+bWF4X3BrZXlzOwotCXJlc3AtPmxvY2FsX2NhX2Fja19kZWxheQk9IGF0dHItPmxvY2FsX2NhX2Fja19kZWxheTsKLQlyZXNwLT5waHlzX3BvcnRfY250CQk9IGZpbGUtPmRldmljZS0+aWJfZGV2LT5waHlzX3BvcnRfY250OwotfQotCiBzc2l6ZV90IGliX3V2ZXJic19xdWVyeV9kZXZpY2Uoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLAogCQkJICAgICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgICAgICAgaW50IGluX2xlbiwgaW50IG91dF9sZW4pCkBAIC00NjYsNyArNDIwLDQ3IEBACiAJCXJldHVybiByZXQ7CiAKIAltZW1zZXQoJnJlc3AsIDAsIHNpemVvZiByZXNwKTsKLQljb3B5X3F1ZXJ5X2Rldl9maWVsZHMoZmlsZSwgJnJlc3AsICZhdHRyKTsKKworCXJlc3AuZndfdmVyIAkJICAgICAgID0gYXR0ci5md192ZXI7CisJcmVzcC5ub2RlX2d1aWQgCQkgICAgICAgPSBmaWxlLT5kZXZpY2UtPmliX2Rldi0+bm9kZV9ndWlkOworCXJlc3Auc3lzX2ltYWdlX2d1aWQgCSAgICAgICA9IGF0dHIuc3lzX2ltYWdlX2d1aWQ7CisJcmVzcC5tYXhfbXJfc2l6ZSAJICAgICAgID0gYXR0ci5tYXhfbXJfc2l6ZTsKKwlyZXNwLnBhZ2Vfc2l6ZV9jYXAgCSAgICAgICA9IGF0dHIucGFnZV9zaXplX2NhcDsKKwlyZXNwLnZlbmRvcl9pZCAJCSAgICAgICA9IGF0dHIudmVuZG9yX2lkOworCXJlc3AudmVuZG9yX3BhcnRfaWQgCSAgICAgICA9IGF0dHIudmVuZG9yX3BhcnRfaWQ7CisJcmVzcC5od192ZXIgCQkgICAgICAgPSBhdHRyLmh3X3ZlcjsKKwlyZXNwLm1heF9xcCAJCSAgICAgICA9IGF0dHIubWF4X3FwOworCXJlc3AubWF4X3FwX3dyIAkJICAgICAgID0gYXR0ci5tYXhfcXBfd3I7CisJcmVzcC5kZXZpY2VfY2FwX2ZsYWdzIAkgICAgICAgPSBhdHRyLmRldmljZV9jYXBfZmxhZ3M7CisJcmVzcC5tYXhfc2dlIAkJICAgICAgID0gYXR0ci5tYXhfc2dlOworCXJlc3AubWF4X3NnZV9yZCAJICAgICAgID0gYXR0ci5tYXhfc2dlX3JkOworCXJlc3AubWF4X2NxIAkJICAgICAgID0gYXR0ci5tYXhfY3E7CisJcmVzcC5tYXhfY3FlIAkJICAgICAgID0gYXR0ci5tYXhfY3FlOworCXJlc3AubWF4X21yIAkJICAgICAgID0gYXR0ci5tYXhfbXI7CisJcmVzcC5tYXhfcGQgCQkgICAgICAgPSBhdHRyLm1heF9wZDsKKwlyZXNwLm1heF9xcF9yZF9hdG9tIAkgICAgICAgPSBhdHRyLm1heF9xcF9yZF9hdG9tOworCXJlc3AubWF4X2VlX3JkX2F0b20gCSAgICAgICA9IGF0dHIubWF4X2VlX3JkX2F0b207CisJcmVzcC5tYXhfcmVzX3JkX2F0b20gCSAgICAgICA9IGF0dHIubWF4X3Jlc19yZF9hdG9tOworCXJlc3AubWF4X3FwX2luaXRfcmRfYXRvbSAgICAgICA9IGF0dHIubWF4X3FwX2luaXRfcmRfYXRvbTsKKwlyZXNwLm1heF9lZV9pbml0X3JkX2F0b20gICAgICAgPSBhdHRyLm1heF9lZV9pbml0X3JkX2F0b207CisJcmVzcC5hdG9taWNfY2FwIAkgICAgICAgPSBhdHRyLmF0b21pY19jYXA7CisJcmVzcC5tYXhfZWUgCQkgICAgICAgPSBhdHRyLm1heF9lZTsKKwlyZXNwLm1heF9yZGQgCQkgICAgICAgPSBhdHRyLm1heF9yZGQ7CisJcmVzcC5tYXhfbXcgCQkgICAgICAgPSBhdHRyLm1heF9tdzsKKwlyZXNwLm1heF9yYXdfaXB2Nl9xcCAJICAgICAgID0gYXR0ci5tYXhfcmF3X2lwdjZfcXA7CisJcmVzcC5tYXhfcmF3X2V0aHlfcXAgCSAgICAgICA9IGF0dHIubWF4X3Jhd19ldGh5X3FwOworCXJlc3AubWF4X21jYXN0X2dycCAJICAgICAgID0gYXR0ci5tYXhfbWNhc3RfZ3JwOworCXJlc3AubWF4X21jYXN0X3FwX2F0dGFjaCAgICAgICA9IGF0dHIubWF4X21jYXN0X3FwX2F0dGFjaDsKKwlyZXNwLm1heF90b3RhbF9tY2FzdF9xcF9hdHRhY2ggPSBhdHRyLm1heF90b3RhbF9tY2FzdF9xcF9hdHRhY2g7CisJcmVzcC5tYXhfYWggCQkgICAgICAgPSBhdHRyLm1heF9haDsKKwlyZXNwLm1heF9mbXIgCQkgICAgICAgPSBhdHRyLm1heF9mbXI7CisJcmVzcC5tYXhfbWFwX3Blcl9mbXIgCSAgICAgICA9IGF0dHIubWF4X21hcF9wZXJfZm1yOworCXJlc3AubWF4X3NycSAJCSAgICAgICA9IGF0dHIubWF4X3NycTsKKwlyZXNwLm1heF9zcnFfd3IgCSAgICAgICA9IGF0dHIubWF4X3NycV93cjsKKwlyZXNwLm1heF9zcnFfc2dlIAkgICAgICAgPSBhdHRyLm1heF9zcnFfc2dlOworCXJlc3AubWF4X3BrZXlzIAkJICAgICAgID0gYXR0ci5tYXhfcGtleXM7CisJcmVzcC5sb2NhbF9jYV9hY2tfZGVsYXkgICAgICAgID0gYXR0ci5sb2NhbF9jYV9hY2tfZGVsYXk7CisJcmVzcC5waHlzX3BvcnRfY250CSAgICAgICA9IGZpbGUtPmRldmljZS0+aWJfZGV2LT5waHlzX3BvcnRfY250OwogCiAJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKikgKHVuc2lnbmVkIGxvbmcpIGNtZC5yZXNwb25zZSwKIAkJCSAmcmVzcCwgc2l6ZW9mIHJlc3ApKQpAQCAtMzI5Myw1MiArMzI4NywzIEBACiAKIAlyZXR1cm4gcmV0ID8gcmV0IDogaW5fbGVuOwogfQotCi1pbnQgaWJfdXZlcmJzX2V4X3F1ZXJ5X2RldmljZShzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGUsCi0JCQkgICAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVjb3JlLAotCQkJICAgICAgc3RydWN0IGliX3VkYXRhICp1aHcpCi17Ci0Jc3RydWN0IGliX3V2ZXJic19leF9xdWVyeV9kZXZpY2VfcmVzcCByZXNwOwotCXN0cnVjdCBpYl91dmVyYnNfZXhfcXVlcnlfZGV2aWNlICBjbWQ7Ci0Jc3RydWN0IGliX2RldmljZV9hdHRyIGF0dHI7Ci0Jc3RydWN0IGliX2RldmljZSAqZGV2aWNlOwotCWludCBlcnI7Ci0KLQlkZXZpY2UgPSBmaWxlLT5kZXZpY2UtPmliX2RldjsKLQlpZiAodWNvcmUtPmlubGVuIDwgc2l6ZW9mKGNtZCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZXJyID0gaWJfY29weV9mcm9tX3VkYXRhKCZjbWQsIHVjb3JlLCBzaXplb2YoY21kKSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmIChjbWQucmVzZXJ2ZWQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZXJyID0gZGV2aWNlLT5xdWVyeV9kZXZpY2UoZGV2aWNlLCAmYXR0cik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mKHJlc3ApKTsKLQljb3B5X3F1ZXJ5X2Rldl9maWVsZHMoZmlsZSwgJnJlc3AuYmFzZSwgJmF0dHIpOwotCXJlc3AuY29tcF9tYXNrID0gMDsKLQotI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX09OX0RFTUFORF9QQUdJTkcKLQlpZiAoY21kLmNvbXBfbWFzayAmIElCX1VTRVJfVkVSQlNfRVhfUVVFUllfREVWSUNFX09EUCkgewotCQlyZXNwLm9kcF9jYXBzLmdlbmVyYWxfY2FwcyA9IGF0dHIub2RwX2NhcHMuZ2VuZXJhbF9jYXBzOwotCQlyZXNwLm9kcF9jYXBzLnBlcl90cmFuc3BvcnRfY2Fwcy5yY19vZHBfY2FwcyA9Ci0JCQlhdHRyLm9kcF9jYXBzLnBlcl90cmFuc3BvcnRfY2Fwcy5yY19vZHBfY2FwczsKLQkJcmVzcC5vZHBfY2Fwcy5wZXJfdHJhbnNwb3J0X2NhcHMudWNfb2RwX2NhcHMgPQotCQkJYXR0ci5vZHBfY2Fwcy5wZXJfdHJhbnNwb3J0X2NhcHMudWNfb2RwX2NhcHM7Ci0JCXJlc3Aub2RwX2NhcHMucGVyX3RyYW5zcG9ydF9jYXBzLnVkX29kcF9jYXBzID0KLQkJCWF0dHIub2RwX2NhcHMucGVyX3RyYW5zcG9ydF9jYXBzLnVkX29kcF9jYXBzOwotCQlyZXNwLmNvbXBfbWFzayB8PSBJQl9VU0VSX1ZFUkJTX0VYX1FVRVJZX0RFVklDRV9PRFA7Ci0JfQotI2VuZGlmCi0KLQllcnIgPSBpYl9jb3B5X3RvX3VkYXRhKHVjb3JlLCAmcmVzcCwgc2l6ZW9mKHJlc3ApKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwppbmRleCBlNmMyM2I5Li41ZGIxYThjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKQEAgLTEyMyw3ICsxMjMsNiBAQAogCQkJCSAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVodykgPSB7CiAJW0lCX1VTRVJfVkVSQlNfRVhfQ01EX0NSRUFURV9GTE9XXQk9IGliX3V2ZXJic19leF9jcmVhdGVfZmxvdywKIAlbSUJfVVNFUl9WRVJCU19FWF9DTURfREVTVFJPWV9GTE9XXQk9IGliX3V2ZXJic19leF9kZXN0cm95X2Zsb3csCi0JW0lCX1VTRVJfVkVSQlNfRVhfQ01EX1FVRVJZX0RFVklDRV0JPSBpYl91dmVyYnNfZXhfcXVlcnlfZGV2aWNlCiB9OwogCiBzdGF0aWMgdm9pZCBpYl91dmVyYnNfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYwppbmRleCA5ZWRjMjAwLi41NzE3NmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYwpAQCAtMjM1LDE5ICsyMzUsMTkgQEAKIAogc3RhdGljIHZvaWQgc2V0X2Vtc3Moc3RydWN0IGM0aXdfZXAgKmVwLCB1MTYgb3B0KQogewotCWVwLT5lbXNzID0gZXAtPmNvbS5kZXYtPnJkZXYubGxkaS5tdHVzW0dFVF9UQ1BPUFRfTVNTKG9wdCldIC0KKwllcC0+ZW1zcyA9IGVwLT5jb20uZGV2LT5yZGV2LmxsZGkubXR1c1tUQ1BPUFRfTVNTX0cob3B0KV0gLQogCQkgICAoKEFGX0lORVQgPT0gZXAtPmNvbS5yZW1vdGVfYWRkci5zc19mYW1pbHkpID8KIAkJICAgIHNpemVvZihzdHJ1Y3QgaXBoZHIpIDogc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSkgLQogCQkgICBzaXplb2Yoc3RydWN0IHRjcGhkcik7CiAJZXAtPm1zcyA9IGVwLT5lbXNzOwotCWlmIChHRVRfVENQT1BUX1RTVEFNUChvcHQpKQorCWlmIChUQ1BPUFRfVFNUQU1QX0cob3B0KSkKIAkJZXAtPmVtc3MgLT0gcm91bmRfdXAoVENQT0xFTl9USU1FU1RBTVAsIDQpOwogCWlmIChlcC0+ZW1zcyA8IDEyOCkKIAkJZXAtPmVtc3MgPSAxMjg7CiAJaWYgKGVwLT5lbXNzICYgNykKIAkJUERCRygiV2FybmluZzogbWlzYWxpZ25lZCBtdHUgaWR4ICV1IG1zcyAldSBlbXNzPSV1XG4iLAotCQkgICAgIEdFVF9UQ1BPUFRfTVNTKG9wdCksIGVwLT5tc3MsIGVwLT5lbXNzKTsKLQlQREJHKCIlcyBtc3NfaWR4ICV1IG1zcyAldSBlbXNzPSV1XG4iLCBfX2Z1bmNfXywgR0VUX1RDUE9QVF9NU1Mob3B0KSwKKwkJICAgICBUQ1BPUFRfTVNTX0cob3B0KSwgZXAtPm1zcywgZXAtPmVtc3MpOworCVBEQkcoIiVzIG1zc19pZHggJXUgbXNzICV1IGVtc3M9JXVcbiIsIF9fZnVuY19fLCBUQ1BPUFRfTVNTX0cob3B0KSwKIAkgICAgIGVwLT5tc3MsIGVwLT5lbXNzKTsKIH0KIApAQCAtNjUyLDI5ICs2NTIsMjkgQEAKIAlpZiAod2luID4gUkNWX0JVRlNJWl9NKQogCQl3aW4gPSBSQ1ZfQlVGU0laX007CiAKLQlvcHQwID0gKG5vY29uZyA/IE5PX0NPTkcoMSkgOiAwKSB8CisJb3B0MCA9IChub2NvbmcgPyBOT19DT05HX0YgOiAwKSB8CiAJICAgICAgIEtFRVBfQUxJVkVfRiB8Ci0JICAgICAgIERFTEFDSygxKSB8CisJICAgICAgIERFTEFDS19GIHwKIAkgICAgICAgV05EX1NDQUxFX1Yod3NjYWxlKSB8CiAJICAgICAgIE1TU19JRFhfVihtdHVfaWR4KSB8CiAJICAgICAgIEwyVF9JRFhfVihlcC0+bDJ0LT5pZHgpIHwKIAkgICAgICAgVFhfQ0hBTl9WKGVwLT50eF9jaGFuKSB8CiAJICAgICAgIFNNQUNfU0VMX1YoZXAtPnNtYWNfaWR4KSB8Ci0JICAgICAgIERTQ1AoZXAtPnRvcykgfAorCSAgICAgICBEU0NQX1YoZXAtPnRvcykgfAogCSAgICAgICBVTFBfTU9ERV9WKFVMUF9NT0RFX1RDUEREUCkgfAogCSAgICAgICBSQ1ZfQlVGU0laX1Yod2luKTsKIAlvcHQyID0gUlhfQ0hBTk5FTF9WKDApIHwKLQkgICAgICAgQ0NUUkxfRUNOKGVuYWJsZV9lY24pIHwKKwkgICAgICAgQ0NUUkxfRUNOX1YoZW5hYmxlX2VjbikgfAogCSAgICAgICBSU1NfUVVFVUVfVkFMSURfRiB8IFJTU19RVUVVRV9WKGVwLT5yc3NfcWlkKTsKIAlpZiAoZW5hYmxlX3RjcF90aW1lc3RhbXBzKQotCQlvcHQyIHw9IFRTVEFNUFNfRU4oMSk7CisJCW9wdDIgfD0gVFNUQU1QU19FTl9GOwogCWlmIChlbmFibGVfdGNwX3NhY2spCi0JCW9wdDIgfD0gU0FDS19FTigxKTsKKwkJb3B0MiB8PSBTQUNLX0VOX0Y7CiAJaWYgKHdzY2FsZSAmJiBlbmFibGVfdGNwX3dpbmRvd19zY2FsaW5nKQogCQlvcHQyIHw9IFdORF9TQ0FMRV9FTl9GOwogCWlmIChpc190NShlcC0+Y29tLmRldi0+cmRldi5sbGRpLmFkYXB0ZXJfdHlwZSkpIHsKIAkJb3B0MiB8PSBUNV9PUFRfMl9WQUxJRF9GOwotCQlvcHQyIHw9IFZfQ09OR19DTlRSTChDT05HX0FMR19UQUhPRSk7CisJCW9wdDIgfD0gQ09OR19DTlRSTF9WKENPTkdfQUxHX1RBSE9FKTsKIAkJb3B0MiB8PSBDT05HX0NOVFJMX1ZBTElEOyAvKiBPUFRfMl9JU1MgZm9yIFQ1ICovCiAJfQogCXQ0X3NldF9hcnBfZXJyX2hhbmRsZXIoc2tiLCBlcCwgYWN0X29wZW5fcmVxX2FycF9mYWlsdXJlKTsKQEAgLTEwNDIsNyArMTA0Miw3IEBACiAJc3RydWN0IGM0aXdfZXAgKmVwOwogCXN0cnVjdCBjcGxfYWN0X2VzdGFibGlzaCAqcmVxID0gY3BsaGRyKHNrYik7CiAJdW5zaWduZWQgaW50IHRpZCA9IEdFVF9USUQocmVxKTsKLQl1bnNpZ25lZCBpbnQgYXRpZCA9IEdFVF9USURfVElEKG50b2hsKHJlcS0+dG9zX2F0aWQpKTsKKwl1bnNpZ25lZCBpbnQgYXRpZCA9IFRJRF9USURfRyhudG9obChyZXEtPnRvc19hdGlkKSk7CiAJc3RydWN0IHRpZF9pbmZvICp0ID0gZGV2LT5yZGV2LmxsZGkudGlkczsKIAogCWVwID0gbG9va3VwX2F0aWQodCwgYXRpZCk7CkBAIC0xMjU4LDggKzEyNTgsOCBAQAogCU9QQ09ERV9USUQocmVxKSA9IGNwdV90b19iZTMyKE1LX09QQ09ERV9USUQoQ1BMX1JYX0RBVEFfQUNLLAogCQkJCQkJICAgIGVwLT5od3RpZCkpOwogCXJlcS0+Y3JlZGl0X2RhY2sgPSBjcHVfdG9fYmUzMihjcmVkaXRzIHwgUlhfRk9SQ0VfQUNLX0YgfAotCQkJCSAgICAgICBGX1JYX0RBQ0tfQ0hBTkdFIHwKLQkJCQkgICAgICAgVl9SWF9EQUNLX01PREUoZGFja19tb2RlKSk7CisJCQkJICAgICAgIFJYX0RBQ0tfQ0hBTkdFX0YgfAorCQkJCSAgICAgICBSWF9EQUNLX01PREVfVihkYWNrX21vZGUpKTsKIAlzZXRfd3JfdHhxKHNrYiwgQ1BMX1BSSU9SSVRZX0FDSywgZXAtPmN0cmxxX2lkeCk7CiAJYzRpd19vZmxkX3NlbmQoJmVwLT5jb20uZGV2LT5yZGV2LCBza2IpOwogCXJldHVybiBjcmVkaXRzOwpAQCAtMTc1MSw3ICsxNzUxLDcgQEAKIAlza2IgPSBnZXRfc2tiKE5VTEwsIHNpemVvZigqcmVxKSwgR0ZQX0tFUk5FTCk7CiAJcmVxID0gKHN0cnVjdCBmd19vZmxkX2Nvbm5lY3Rpb25fd3IgKilfX3NrYl9wdXQoc2tiLCBzaXplb2YoKnJlcSkpOwogCW1lbXNldChyZXEsIDAsIHNpemVvZigqcmVxKSk7Ci0JcmVxLT5vcF9jb21wbCA9IGh0b25sKFZfV1JfT1AoRldfT0ZMRF9DT05ORUNUSU9OX1dSKSk7CisJcmVxLT5vcF9jb21wbCA9IGh0b25sKFdSX09QX1YoRldfT0ZMRF9DT05ORUNUSU9OX1dSKSk7CiAJcmVxLT5sZW4xNl9wa2QgPSBodG9ubChGV19XUl9MRU4xNl9WKERJVl9ST1VORF9VUChzaXplb2YoKnJlcSksIDE2KSkpOwogCXJlcS0+bGUuZmlsdGVyID0gY3B1X3RvX2JlMzIoY3hnYjRfc2VsZWN0X250dXBsZSgKIAkJCQkgICAgIGVwLT5jb20uZGV2LT5yZGV2LmxsZGkucG9ydHNbMF0sCkBAIC0xNzgyLDI3ICsxNzgyLDI3IEBACiAJaWYgKHdpbiA+IFJDVl9CVUZTSVpfTSkKIAkJd2luID0gUkNWX0JVRlNJWl9NOwogCi0JcmVxLT50Y2Iub3B0MCA9IChfX2ZvcmNlIF9fYmU2NCkgKFRDQU1fQllQQVNTKDEpIHwKLQkJKG5vY29uZyA/IE5PX0NPTkcoMSkgOiAwKSB8CisJcmVxLT50Y2Iub3B0MCA9IChfX2ZvcmNlIF9fYmU2NCkgKFRDQU1fQllQQVNTX0YgfAorCQkobm9jb25nID8gTk9fQ09OR19GIDogMCkgfAogCQlLRUVQX0FMSVZFX0YgfAotCQlERUxBQ0soMSkgfAorCQlERUxBQ0tfRiB8CiAJCVdORF9TQ0FMRV9WKHdzY2FsZSkgfAogCQlNU1NfSURYX1YobXR1X2lkeCkgfAogCQlMMlRfSURYX1YoZXAtPmwydC0+aWR4KSB8CiAJCVRYX0NIQU5fVihlcC0+dHhfY2hhbikgfAogCQlTTUFDX1NFTF9WKGVwLT5zbWFjX2lkeCkgfAotCQlEU0NQKGVwLT50b3MpIHwKKwkJRFNDUF9WKGVwLT50b3MpIHwKIAkJVUxQX01PREVfVihVTFBfTU9ERV9UQ1BERFApIHwKIAkJUkNWX0JVRlNJWl9WKHdpbikpOwotCXJlcS0+dGNiLm9wdDIgPSAoX19mb3JjZSBfX2JlMzIpIChQQUNFKDEpIHwKLQkJVFhfUVVFVUUoZXAtPmNvbS5kZXYtPnJkZXYubGxkaS50eF9tb2RxW2VwLT50eF9jaGFuXSkgfAorCXJlcS0+dGNiLm9wdDIgPSAoX19mb3JjZSBfX2JlMzIpIChQQUNFX1YoMSkgfAorCQlUWF9RVUVVRV9WKGVwLT5jb20uZGV2LT5yZGV2LmxsZGkudHhfbW9kcVtlcC0+dHhfY2hhbl0pIHwKIAkJUlhfQ0hBTk5FTF9WKDApIHwKLQkJQ0NUUkxfRUNOKGVuYWJsZV9lY24pIHwKKwkJQ0NUUkxfRUNOX1YoZW5hYmxlX2VjbikgfAogCQlSU1NfUVVFVUVfVkFMSURfRiB8IFJTU19RVUVVRV9WKGVwLT5yc3NfcWlkKSk7CiAJaWYgKGVuYWJsZV90Y3BfdGltZXN0YW1wcykKLQkJcmVxLT50Y2Iub3B0MiB8PSAoX19mb3JjZSBfX2JlMzIpVFNUQU1QU19FTigxKTsKKwkJcmVxLT50Y2Iub3B0MiB8PSAoX19mb3JjZSBfX2JlMzIpVFNUQU1QU19FTl9GOwogCWlmIChlbmFibGVfdGNwX3NhY2spCi0JCXJlcS0+dGNiLm9wdDIgfD0gKF9fZm9yY2UgX19iZTMyKVNBQ0tfRU4oMSk7CisJCXJlcS0+dGNiLm9wdDIgfD0gKF9fZm9yY2UgX19iZTMyKVNBQ0tfRU5fRjsKIAlpZiAod3NjYWxlICYmIGVuYWJsZV90Y3Bfd2luZG93X3NjYWxpbmcpCiAJCXJlcS0+dGNiLm9wdDIgfD0gKF9fZm9yY2UgX19iZTMyKVdORF9TQ0FMRV9FTl9GOwogCXJlcS0+dGNiLm9wdDAgPSBjcHVfdG9fYmU2NCgoX19mb3JjZSB1NjQpcmVxLT50Y2Iub3B0MCk7CkBAIC0yMDIzLDEwICsyMDIzLDEwIEBACiB7CiAJc3RydWN0IGM0aXdfZXAgKmVwOwogCXN0cnVjdCBjcGxfYWN0X29wZW5fcnBsICpycGwgPSBjcGxoZHIoc2tiKTsKLQl1bnNpZ25lZCBpbnQgYXRpZCA9IEdFVF9USURfVElEKEdFVF9BT1BFTl9BVElEKAotCQkJCQludG9obChycGwtPmF0aWRfc3RhdHVzKSkpOworCXVuc2lnbmVkIGludCBhdGlkID0gVElEX1RJRF9HKEFPUEVOX0FUSURfRygKKwkJCQkgICAgICBudG9obChycGwtPmF0aWRfc3RhdHVzKSkpOwogCXN0cnVjdCB0aWRfaW5mbyAqdCA9IGRldi0+cmRldi5sbGRpLnRpZHM7Ci0JaW50IHN0YXR1cyA9IEdFVF9BT1BFTl9TVEFUVVMobnRvaGwocnBsLT5hdGlkX3N0YXR1cykpOworCWludCBzdGF0dXMgPSBBT1BFTl9TVEFUVVNfRyhudG9obChycGwtPmF0aWRfc3RhdHVzKSk7CiAJc3RydWN0IHNvY2thZGRyX2luICpsYTsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnJhOwogCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmxhNjsKQEAgLTIwNjQsNyArMjA2NCw3IEBACiAJCWlmIChlcC0+Y29tLmxvY2FsX2FkZHIuc3NfZmFtaWx5ID09IEFGX0lORVQgJiYKIAkJICAgIGRldi0+cmRldi5sbGRpLmVuYWJsZV9md19vZmxkX2Nvbm4pIHsKIAkJCXNlbmRfZndfYWN0X29wZW5fcmVxKGVwLAotCQkJCQkgICAgIEdFVF9USURfVElEKEdFVF9BT1BFTl9BVElEKAorCQkJCQkgICAgIFRJRF9USURfRyhBT1BFTl9BVElEX0coCiAJCQkJCSAgICAgbnRvaGwocnBsLT5hdGlkX3N0YXR1cykpKSk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMjE4MSwzOSArMjE4MSwzOSBAQAogCXdpbiA9IGVwLT5yY3Zfd2luID4+IDEwOwogCWlmICh3aW4gPiBSQ1ZfQlVGU0laX00pCiAJCXdpbiA9IFJDVl9CVUZTSVpfTTsKLQlvcHQwID0gKG5vY29uZyA/IE5PX0NPTkcoMSkgOiAwKSB8CisJb3B0MCA9IChub2NvbmcgPyBOT19DT05HX0YgOiAwKSB8CiAJICAgICAgIEtFRVBfQUxJVkVfRiB8Ci0JICAgICAgIERFTEFDSygxKSB8CisJICAgICAgIERFTEFDS19GIHwKIAkgICAgICAgV05EX1NDQUxFX1Yod3NjYWxlKSB8CiAJICAgICAgIE1TU19JRFhfVihtdHVfaWR4KSB8CiAJICAgICAgIEwyVF9JRFhfVihlcC0+bDJ0LT5pZHgpIHwKIAkgICAgICAgVFhfQ0hBTl9WKGVwLT50eF9jaGFuKSB8CiAJICAgICAgIFNNQUNfU0VMX1YoZXAtPnNtYWNfaWR4KSB8Ci0JICAgICAgIERTQ1AoZXAtPnRvcyA+PiAyKSB8CisJICAgICAgIERTQ1BfVihlcC0+dG9zID4+IDIpIHwKIAkgICAgICAgVUxQX01PREVfVihVTFBfTU9ERV9UQ1BERFApIHwKIAkgICAgICAgUkNWX0JVRlNJWl9WKHdpbik7CiAJb3B0MiA9IFJYX0NIQU5ORUxfVigwKSB8CiAJICAgICAgIFJTU19RVUVVRV9WQUxJRF9GIHwgUlNTX1FVRVVFX1YoZXAtPnJzc19xaWQpOwogCiAJaWYgKGVuYWJsZV90Y3BfdGltZXN0YW1wcyAmJiByZXEtPnRjcG9wdC50c3RhbXApCi0JCW9wdDIgfD0gVFNUQU1QU19FTigxKTsKKwkJb3B0MiB8PSBUU1RBTVBTX0VOX0Y7CiAJaWYgKGVuYWJsZV90Y3Bfc2FjayAmJiByZXEtPnRjcG9wdC5zYWNrKQotCQlvcHQyIHw9IFNBQ0tfRU4oMSk7CisJCW9wdDIgfD0gU0FDS19FTl9GOwogCWlmICh3c2NhbGUgJiYgZW5hYmxlX3RjcF93aW5kb3dfc2NhbGluZykKIAkJb3B0MiB8PSBXTkRfU0NBTEVfRU5fRjsKIAlpZiAoZW5hYmxlX2VjbikgewogCQljb25zdCBzdHJ1Y3QgdGNwaGRyICp0Y3BoOwogCQl1MzIgaGxlbiA9IG50b2hsKHJlcS0+aGRyX2xlbik7CiAKLQkJdGNwaCA9IChjb25zdCB2b2lkICopKHJlcSArIDEpICsgR19FVEhfSERSX0xFTihobGVuKSArCi0JCQlHX0lQX0hEUl9MRU4oaGxlbik7CisJCXRjcGggPSAoY29uc3Qgdm9pZCAqKShyZXEgKyAxKSArIEVUSF9IRFJfTEVOX0coaGxlbikgKworCQkJSVBfSERSX0xFTl9HKGhsZW4pOwogCQlpZiAodGNwaC0+ZWNlICYmIHRjcGgtPmN3cikKLQkJCW9wdDIgfD0gQ0NUUkxfRUNOKDEpOworCQkJb3B0MiB8PSBDQ1RSTF9FQ05fVigxKTsKIAl9CiAJaWYgKGlzX3Q1KGVwLT5jb20uZGV2LT5yZGV2LmxsZGkuYWRhcHRlcl90eXBlKSkgewogCQl1MzIgaXNuID0gKHByYW5kb21fdTMyKCkgJiB+N1VMKSAtIDE7CiAJCW9wdDIgfD0gVDVfT1BUXzJfVkFMSURfRjsKLQkJb3B0MiB8PSBWX0NPTkdfQ05UUkwoQ09OR19BTEdfVEFIT0UpOworCQlvcHQyIHw9IENPTkdfQ05UUkxfVihDT05HX0FMR19UQUhPRSk7CiAJCW9wdDIgfD0gQ09OR19DTlRSTF9WQUxJRDsgLyogT1BUXzJfSVNTIGZvciBUNSAqLwogCQlycGw1ID0gKHZvaWQgKilycGw7CiAJCW1lbXNldCgmcnBsNS0+aXNzLCAwLCByb3VuZHVwKHNpemVvZigqcnBsNSktc2l6ZW9mKCpycGwpLCAxNikpOwpAQCAtMjI0NSw4ICsyMjQ1LDggQEAKIAkJICAgICAgIF9fdTggKmxvY2FsX2lwLCBfX3U4ICpwZWVyX2lwLAogCQkgICAgICAgX19iZTE2ICpsb2NhbF9wb3J0LCBfX2JlMTYgKnBlZXJfcG9ydCkKIHsKLQlpbnQgZXRoX2xlbiA9IEdfRVRIX0hEUl9MRU4oYmUzMl90b19jcHUocmVxLT5oZHJfbGVuKSk7Ci0JaW50IGlwX2xlbiA9IEdfSVBfSERSX0xFTihiZTMyX3RvX2NwdShyZXEtPmhkcl9sZW4pKTsKKwlpbnQgZXRoX2xlbiA9IEVUSF9IRFJfTEVOX0coYmUzMl90b19jcHUocmVxLT5oZHJfbGVuKSk7CisJaW50IGlwX2xlbiA9IElQX0hEUl9MRU5fRyhiZTMyX3RvX2NwdShyZXEtPmhkcl9sZW4pKTsKIAlzdHJ1Y3QgaXBoZHIgKmlwID0gKHN0cnVjdCBpcGhkciAqKSgodTggKikocmVxICsgMSkgKyBldGhfbGVuKTsKIAlzdHJ1Y3QgaXB2NmhkciAqaXA2ID0gKHN0cnVjdCBpcHY2aGRyICopKCh1OCAqKShyZXEgKyAxKSArIGV0aF9sZW4pOwogCXN0cnVjdCB0Y3BoZHIgKnRjcCA9IChzdHJ1Y3QgdGNwaGRyICopCkBAIC0yMjc3LDcgKzIyNzcsNyBAQAogewogCXN0cnVjdCBjNGl3X2VwICpjaGlsZF9lcCA9IE5VTEwsICpwYXJlbnRfZXA7CiAJc3RydWN0IGNwbF9wYXNzX2FjY2VwdF9yZXEgKnJlcSA9IGNwbGhkcihza2IpOwotCXVuc2lnbmVkIGludCBzdGlkID0gR0VUX1BPUEVOX1RJRChudG9obChyZXEtPnRvc19zdGlkKSk7CisJdW5zaWduZWQgaW50IHN0aWQgPSBQQVNTX09QRU5fVElEX0cobnRvaGwocmVxLT50b3Nfc3RpZCkpOwogCXN0cnVjdCB0aWRfaW5mbyAqdCA9IGRldi0+cmRldi5sbGRpLnRpZHM7CiAJdW5zaWduZWQgaW50IGh3dGlkID0gR0VUX1RJRChyZXEpOwogCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKQEAgLTIzMTAsMTQgKzIzMTAsMTQgQEAKIAkJICAgICBudG9ocyhwZWVyX3BvcnQpLCBwZWVyX21zcyk7CiAJCWRzdCA9IGZpbmRfcm91dGUoZGV2LCAqKF9fYmUzMiAqKWxvY2FsX2lwLCAqKF9fYmUzMiAqKXBlZXJfaXAsCiAJCQkJIGxvY2FsX3BvcnQsIHBlZXJfcG9ydCwKLQkJCQkgR0VUX1BPUEVOX1RPUyhudG9obChyZXEtPnRvc19zdGlkKSkpOworCQkJCSBQQVNTX09QRU5fVE9TX0cobnRvaGwocmVxLT50b3Nfc3RpZCkpKTsKIAl9IGVsc2UgewogCQlQREJHKCIlcyBwYXJlbnQgZXAgJXAgaHd0aWQgJXUgbGFkZHIgJXBJNiByYWRkciAlcEk2IGxwb3J0ICVkIHJwb3J0ICVkIHBlZXJfbXNzICVkXG4iCiAJCSAgICAgLCBfX2Z1bmNfXywgcGFyZW50X2VwLCBod3RpZCwKIAkJICAgICBsb2NhbF9pcCwgcGVlcl9pcCwgbnRvaHMobG9jYWxfcG9ydCksCiAJCSAgICAgbnRvaHMocGVlcl9wb3J0KSwgcGVlcl9tc3MpOwogCQlkc3QgPSBmaW5kX3JvdXRlNihkZXYsIGxvY2FsX2lwLCBwZWVyX2lwLCBsb2NhbF9wb3J0LCBwZWVyX3BvcnQsCi0JCQkJICBQQVNTX09QRU5fVE9TKG50b2hsKHJlcS0+dG9zX3N0aWQpKSwKKwkJCQkgIFBBU1NfT1BFTl9UT1NfRyhudG9obChyZXEtPnRvc19zdGlkKSksCiAJCQkJICAoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikKIAkJCQkgICZwYXJlbnRfZXAtPmNvbS5sb2NhbF9hZGRyKS0+c2luNl9zY29wZV9pZCk7CiAJfQpAQCAtMjM3NSw3ICsyMzc1LDcgQEAKIAl9CiAJYzRpd19nZXRfZXAoJnBhcmVudF9lcC0+Y29tKTsKIAljaGlsZF9lcC0+cGFyZW50X2VwID0gcGFyZW50X2VwOwotCWNoaWxkX2VwLT50b3MgPSBHRVRfUE9QRU5fVE9TKG50b2hsKHJlcS0+dG9zX3N0aWQpKTsKKwljaGlsZF9lcC0+dG9zID0gUEFTU19PUEVOX1RPU19HKG50b2hsKHJlcS0+dG9zX3N0aWQpKTsKIAljaGlsZF9lcC0+ZHN0ID0gZHN0OwogCWNoaWxkX2VwLT5od3RpZCA9IGh3dGlkOwogCkBAIC0zNTAwLDI0ICszNTAwLDI0IEBACiAKIAlyZXEgPSAoc3RydWN0IGNwbF9wYXNzX2FjY2VwdF9yZXEgKilfX3NrYl9wdXNoKHNrYiwgc2l6ZW9mKCpyZXEpKTsKIAltZW1zZXQocmVxLCAwLCBzaXplb2YoKnJlcSkpOwotCXJlcS0+bDJpbmZvID0gY3B1X3RvX2JlMTYoVl9TWU5fSU5URihpbnRmKSB8Ci0JCQkgVl9TWU5fTUFDX0lEWChHX1JYX01BQ0lEWCgKKwlyZXEtPmwyaW5mbyA9IGNwdV90b19iZTE2KFNZTl9JTlRGX1YoaW50ZikgfAorCQkJIFNZTl9NQUNfSURYX1YoUlhfTUFDSURYX0coCiAJCQkgKF9fZm9yY2UgaW50KSBodG9ubChsMmluZm8pKSkgfAotCQkJIEZfU1lOX1hBQ1RfTUFUQ0gpOworCQkJIFNZTl9YQUNUX01BVENIX0YpOwogCWV0aF9oZHJfbGVuID0gaXNfdDQoZGV2LT5yZGV2LmxsZGkuYWRhcHRlcl90eXBlKSA/Ci0JCQkgICAgR19SWF9FVEhIRFJfTEVOKChfX2ZvcmNlIGludCkgaHRvbmwobDJpbmZvKSkgOgotCQkJICAgIEdfUlhfVDVfRVRISERSX0xFTigoX19mb3JjZSBpbnQpIGh0b25sKGwyaW5mbykpOwotCXJlcS0+aGRyX2xlbiA9IGNwdV90b19iZTMyKFZfU1lOX1JYX0NIQU4oR19SWF9DSEFOKAorCQkJICAgIFJYX0VUSEhEUl9MRU5fRygoX19mb3JjZSBpbnQpaHRvbmwobDJpbmZvKSkgOgorCQkJICAgIFJYX1Q1X0VUSEhEUl9MRU5fRygoX19mb3JjZSBpbnQpaHRvbmwobDJpbmZvKSk7CisJcmVxLT5oZHJfbGVuID0gY3B1X3RvX2JlMzIoU1lOX1JYX0NIQU5fVihSWF9DSEFOX0coCiAJCQkJCShfX2ZvcmNlIGludCkgaHRvbmwobDJpbmZvKSkpIHwKLQkJCQkgICBWX1RDUF9IRFJfTEVOKEdfUlhfVENQSERSX0xFTigKKwkJCQkgICBUQ1BfSERSX0xFTl9WKFJYX1RDUEhEUl9MRU5fRygKIAkJCQkJKF9fZm9yY2UgaW50KSBodG9ucyhoZHJfbGVuKSkpIHwKLQkJCQkgICBWX0lQX0hEUl9MRU4oR19SWF9JUEhEUl9MRU4oCisJCQkJICAgSVBfSERSX0xFTl9WKFJYX0lQSERSX0xFTl9HKAogCQkJCQkoX19mb3JjZSBpbnQpIGh0b25zKGhkcl9sZW4pKSkgfAotCQkJCSAgIFZfRVRIX0hEUl9MRU4oR19SWF9FVEhIRFJfTEVOKGV0aF9oZHJfbGVuKSkpOworCQkJCSAgIEVUSF9IRFJfTEVOX1YoUlhfRVRISERSX0xFTl9HKGV0aF9oZHJfbGVuKSkpOwogCXJlcS0+dmxhbiA9IChfX2ZvcmNlIF9fYmUxNikgdmxhbnRhZzsKIAlyZXEtPmxlbiA9IChfX2ZvcmNlIF9fYmUxNikgbGVuOwotCXJlcS0+dG9zX3N0aWQgPSBjcHVfdG9fYmUzMihQQVNTX09QRU5fVElEKHN0aWQpIHwKLQkJCQkgICAgUEFTU19PUEVOX1RPUyh0b3MpKTsKKwlyZXEtPnRvc19zdGlkID0gY3B1X3RvX2JlMzIoUEFTU19PUEVOX1RJRF9WKHN0aWQpIHwKKwkJCQkgICAgUEFTU19PUEVOX1RPU19WKHRvcykpOwogCXJlcS0+dGNwb3B0Lm1zcyA9IGh0b25zKHRtcF9vcHQubXNzX2NsYW1wKTsKIAlpZiAodG1wX29wdC53c2NhbGVfb2spCiAJCXJlcS0+dGNwb3B0LndzZiA9IHRtcF9vcHQuc25kX3dzY2FsZTsKQEAgLTM1NDIsNyArMzU0Miw3IEBACiAJcmVxX3NrYiA9IGFsbG9jX3NrYihzaXplb2Yoc3RydWN0IGZ3X29mbGRfY29ubmVjdGlvbl93ciksIEdGUF9LRVJORUwpOwogCXJlcSA9IChzdHJ1Y3QgZndfb2ZsZF9jb25uZWN0aW9uX3dyICopX19za2JfcHV0KHJlcV9za2IsIHNpemVvZigqcmVxKSk7CiAJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKCpyZXEpKTsKLQlyZXEtPm9wX2NvbXBsID0gaHRvbmwoVl9XUl9PUChGV19PRkxEX0NPTk5FQ1RJT05fV1IpIHwgRldfV1JfQ09NUExfRik7CisJcmVxLT5vcF9jb21wbCA9IGh0b25sKFdSX09QX1YoRldfT0ZMRF9DT05ORUNUSU9OX1dSKSB8IEZXX1dSX0NPTVBMX0YpOwogCXJlcS0+bGVuMTZfcGtkID0gaHRvbmwoRldfV1JfTEVOMTZfVihESVZfUk9VTkRfVVAoc2l6ZW9mKCpyZXEpLCAxNikpKTsKIAlyZXEtPmxlLnZlcnNpb25fY3BsID0gaHRvbmwoRldfT0ZMRF9DT05ORUNUSU9OX1dSX0NQTF9GKTsKIAlyZXEtPmxlLmZpbHRlciA9IChfX2ZvcmNlIF9fYmUzMikgZmlsdGVyOwpAQCAtMzU1Niw3ICszNTU2LDcgQEAKIAkJIGh0b25sKEZXX09GTERfQ09OTkVDVElPTl9XUl9UX1NUQVRFX1YoVENQX1NZTl9SRUNWKSB8CiAJCQlGV19PRkxEX0NPTk5FQ1RJT05fV1JfUkNWX1NDQUxFX1YoY3BsLT50Y3BvcHQud3NmKSB8CiAJCQlGV19PRkxEX0NPTk5FQ1RJT05fV1JfQVNUSURfVigKLQkJCUdFVF9QQVNTX09QRU5fVElEKG50b2hsKGNwbC0+dG9zX3N0aWQpKSkpOworCQkJUEFTU19PUEVOX1RJRF9HKG50b2hsKGNwbC0+dG9zX3N0aWQpKSkpOwogCiAJLyoKIAkgKiBXZSBzdG9yZSB0aGUgcWlkIGluIG9wdDIgd2hpY2ggd2lsbCBiZSB1c2VkIGJ5IHRoZSBmaXJtd2FyZQpAQCAtMzYxMyw3ICszNjEzLDcgQEAKIAlzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaDsKIAogCS8qIERyb3AgYWxsIG5vbi1TWU4gcGFja2V0cyAqLwotCWlmICghKGNwbC0+bDJpbmZvICYgY3B1X3RvX2JlMzIoRl9SWEZfU1lOKSkpCisJaWYgKCEoY3BsLT5sMmluZm8gJiBjcHVfdG9fYmUzMihSWEZfU1lOX0YpKSkKIAkJZ290byByZWplY3Q7CiAKIAkvKgpAQCAtMzYzNSw4ICszNjM1LDggQEAKIAl9CiAKIAlldGhfaGRyX2xlbiA9IGlzX3Q0KGRldi0+cmRldi5sbGRpLmFkYXB0ZXJfdHlwZSkgPwotCQkJICAgIEdfUlhfRVRISERSX0xFTihodG9ubChjcGwtPmwyaW5mbykpIDoKLQkJCSAgICBHX1JYX1Q1X0VUSEhEUl9MRU4oaHRvbmwoY3BsLT5sMmluZm8pKTsKKwkJCSAgICBSWF9FVEhIRFJfTEVOX0coaHRvbmwoY3BsLT5sMmluZm8pKSA6CisJCQkgICAgUlhfVDVfRVRISERSX0xFTl9HKGh0b25sKGNwbC0+bDJpbmZvKSk7CiAJaWYgKGV0aF9oZHJfbGVuID09IEVUSF9ITEVOKSB7CiAJCWVoID0gKHN0cnVjdCBldGhoZHIgKikocmVxICsgMSk7CiAJCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoZWggKyAxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NxLmMKaW5kZXggZTlmZDNhMC4uYWI3NjkyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NxLmMKQEAgLTUyLDcgKzUyLDcgQEAKIAltZW1zZXQocmVzX3dyLCAwLCB3cl9sZW4pOwogCXJlc193ci0+b3BfbnJlcyA9IGNwdV90b19iZTMyKAogCQkJRldfV1JfT1BfVihGV19SSV9SRVNfV1IpIHwKLQkJCVZfRldfUklfUkVTX1dSX05SRVMoMSkgfAorCQkJRldfUklfUkVTX1dSX05SRVNfVigxKSB8CiAJCQlGV19XUl9DT01QTF9GKTsKIAlyZXNfd3ItPmxlbjE2X3BrZCA9IGNwdV90b19iZTMyKERJVl9ST1VORF9VUCh3cl9sZW4sIDE2KSk7CiAJcmVzX3dyLT5jb29raWUgPSAodW5zaWduZWQgbG9uZykgJndyX3dhaXQ7CkBAIC0xMjIsNyArMTIyLDcgQEAKIAltZW1zZXQocmVzX3dyLCAwLCB3cl9sZW4pOwogCXJlc193ci0+b3BfbnJlcyA9IGNwdV90b19iZTMyKAogCQkJRldfV1JfT1BfVihGV19SSV9SRVNfV1IpIHwKLQkJCVZfRldfUklfUkVTX1dSX05SRVMoMSkgfAorCQkJRldfUklfUkVTX1dSX05SRVNfVigxKSB8CiAJCQlGV19XUl9DT01QTF9GKTsKIAlyZXNfd3ItPmxlbjE2X3BrZCA9IGNwdV90b19iZTMyKERJVl9ST1VORF9VUCh3cl9sZW4sIDE2KSk7CiAJcmVzX3dyLT5jb29raWUgPSAodW5zaWduZWQgbG9uZykgJndyX3dhaXQ7CkBAIC0xMzEsMTcgKzEzMSwxNyBAQAogCXJlcy0+dS5jcS5vcCA9IEZXX1JJX1JFU19PUF9XUklURTsKIAlyZXMtPnUuY3EuaXFpZCA9IGNwdV90b19iZTMyKGNxLT5jcWlkKTsKIAlyZXMtPnUuY3EuaXFhbmRzdF90b19pcWFuZHN0aW5kZXggPSBjcHVfdG9fYmUzMigKLQkJCVZfRldfUklfUkVTX1dSX0lRQU5VUygwKSB8Ci0JCQlWX0ZXX1JJX1JFU19XUl9JUUFOVUQoMSkgfAotCQkJRl9GV19SSV9SRVNfV1JfSVFBTkRTVCB8Ci0JCQlWX0ZXX1JJX1JFU19XUl9JUUFORFNUSU5ERVgoCisJCQlGV19SSV9SRVNfV1JfSVFBTlVTX1YoMCkgfAorCQkJRldfUklfUkVTX1dSX0lRQU5VRF9WKDEpIHwKKwkJCUZXX1JJX1JFU19XUl9JUUFORFNUX0YgfAorCQkJRldfUklfUkVTX1dSX0lRQU5EU1RJTkRFWF9WKAogCQkJCXJkZXYtPmxsZGkuY2lxX2lkc1tjcS0+dmVjdG9yXSkpOwogCXJlcy0+dS5jcS5pcWRyb3Byc3NfdG9faXFlc2l6ZSA9IGNwdV90b19iZTE2KAotCQkJRl9GV19SSV9SRVNfV1JfSVFEUk9QUlNTIHwKLQkJCVZfRldfUklfUkVTX1dSX0lRUENJRUNIKDIpIHwKLQkJCVZfRldfUklfUkVTX1dSX0lRSU5UQ05UVEhSRVNIKDApIHwKLQkJCUZfRldfUklfUkVTX1dSX0lRTyB8Ci0JCQlWX0ZXX1JJX1JFU19XUl9JUUVTSVpFKDEpKTsKKwkJCUZXX1JJX1JFU19XUl9JUURST1BSU1NfRiB8CisJCQlGV19SSV9SRVNfV1JfSVFQQ0lFQ0hfVigyKSB8CisJCQlGV19SSV9SRVNfV1JfSVFJTlRDTlRUSFJFU0hfVigwKSB8CisJCQlGV19SSV9SRVNfV1JfSVFPX0YgfAorCQkJRldfUklfUkVTX1dSX0lRRVNJWkVfVigxKSk7CiAJcmVzLT51LmNxLmlxc2l6ZSA9IGNwdV90b19iZTE2KGNxLT5zaXplKTsKIAlyZXMtPnUuY3EuaXFhZGRyID0gY3B1X3RvX2JlNjQoY3EtPmRtYV9hZGRyKTsKIApAQCAtMTgyLDEyICsxODIsMTIgQEAKIAlQREJHKCIlcyB3cSAlcCBjcSAlcCBzd19jaWR4ICV1IHN3X3BpZHggJXVcbiIsIF9fZnVuY19fLAogCSAgICAgd3EsIGNxLCBjcS0+c3dfY2lkeCwgY3EtPnN3X3BpZHgpOwogCW1lbXNldCgmY3FlLCAwLCBzaXplb2YoY3FlKSk7Ci0JY3FlLmhlYWRlciA9IGNwdV90b19iZTMyKFZfQ1FFX1NUQVRVUyhUNF9FUlJfU1dGTFVTSCkgfAotCQkJCSBWX0NRRV9PUENPREUoRldfUklfU0VORCkgfAotCQkJCSBWX0NRRV9UWVBFKDApIHwKLQkJCQkgVl9DUUVfU1dDUUUoMSkgfAotCQkJCSBWX0NRRV9RUElEKHdxLT5zcS5xaWQpKTsKLQljcWUuYml0c190eXBlX3RzID0gY3B1X3RvX2JlNjQoVl9DUUVfR0VOQklUKCh1NjQpY3EtPmdlbikpOworCWNxZS5oZWFkZXIgPSBjcHVfdG9fYmUzMihDUUVfU1RBVFVTX1YoVDRfRVJSX1NXRkxVU0gpIHwKKwkJCQkgQ1FFX09QQ09ERV9WKEZXX1JJX1NFTkQpIHwKKwkJCQkgQ1FFX1RZUEVfVigwKSB8CisJCQkJIENRRV9TV0NRRV9WKDEpIHwKKwkJCQkgQ1FFX1FQSURfVih3cS0+c3EucWlkKSk7CisJY3FlLmJpdHNfdHlwZV90cyA9IGNwdV90b19iZTY0KENRRV9HRU5CSVRfVigodTY0KWNxLT5nZW4pKTsKIAljcS0+c3dfcXVldWVbY3EtPnN3X3BpZHhdID0gY3FlOwogCXQ0X3N3Y3FfcHJvZHVjZShjcSk7CiB9CkBAIC0yMTUsMTMgKzIxNSwxMyBAQAogCVBEQkcoIiVzIHdxICVwIGNxICVwIHN3X2NpZHggJXUgc3dfcGlkeCAldVxuIiwgX19mdW5jX18sCiAJICAgICB3cSwgY3EsIGNxLT5zd19jaWR4LCBjcS0+c3dfcGlkeCk7CiAJbWVtc2V0KCZjcWUsIDAsIHNpemVvZihjcWUpKTsKLQljcWUuaGVhZGVyID0gY3B1X3RvX2JlMzIoVl9DUUVfU1RBVFVTKFQ0X0VSUl9TV0ZMVVNIKSB8Ci0JCQkJIFZfQ1FFX09QQ09ERShzd2NxZS0+b3Bjb2RlKSB8Ci0JCQkJIFZfQ1FFX1RZUEUoMSkgfAotCQkJCSBWX0NRRV9TV0NRRSgxKSB8Ci0JCQkJIFZfQ1FFX1FQSUQod3EtPnNxLnFpZCkpOworCWNxZS5oZWFkZXIgPSBjcHVfdG9fYmUzMihDUUVfU1RBVFVTX1YoVDRfRVJSX1NXRkxVU0gpIHwKKwkJCQkgQ1FFX09QQ09ERV9WKHN3Y3FlLT5vcGNvZGUpIHwKKwkJCQkgQ1FFX1RZUEVfVigxKSB8CisJCQkJIENRRV9TV0NRRV9WKDEpIHwKKwkJCQkgQ1FFX1FQSURfVih3cS0+c3EucWlkKSk7CiAJQ1FFX1dSSURfU1FfSURYKCZjcWUpID0gc3djcWUtPmlkeDsKLQljcWUuYml0c190eXBlX3RzID0gY3B1X3RvX2JlNjQoVl9DUUVfR0VOQklUKCh1NjQpY3EtPmdlbikpOworCWNxZS5iaXRzX3R5cGVfdHMgPSBjcHVfdG9fYmU2NChDUUVfR0VOQklUX1YoKHU2NCljcS0+Z2VuKSk7CiAJY3EtPnN3X3F1ZXVlW2NxLT5zd19waWR4XSA9IGNxZTsKIAl0NF9zd2NxX3Byb2R1Y2UoY3EpOwogfQpAQCAtMjg0LDcgKzI4NCw3IEBACiAJCQkgKi8KIAkJCVBEQkcoIiVzIG1vdmluZyBjcWUgaW50byBzd2NxIHNxIGlkeCAldSBjcSBpZHggJXVcbiIsCiAJCQkJCV9fZnVuY19fLCBjaWR4LCBjcS0+c3dfcGlkeCk7Ci0JCQlzd3NxZS0+Y3FlLmhlYWRlciB8PSBodG9ubChWX0NRRV9TV0NRRSgxKSk7CisJCQlzd3NxZS0+Y3FlLmhlYWRlciB8PSBodG9ubChDUUVfU1dDUUVfVigxKSk7CiAJCQljcS0+c3dfcXVldWVbY3EtPnN3X3BpZHhdID0gc3dzcWUtPmNxZTsKIAkJCXQ0X3N3Y3FfcHJvZHVjZShjcSk7CiAJCQlzd3NxZS0+Zmx1c2hlZCA9IDE7CkBAIC0zMDEsMTAgKzMwMSwxMCBAQAogewogCXJlYWRfY3FlLT51LnNjcWUuY2lkeCA9IHdxLT5zcS5vbGRlc3RfcmVhZC0+aWR4OwogCXJlYWRfY3FlLT5sZW4gPSBodG9ubCh3cS0+c3Eub2xkZXN0X3JlYWQtPnJlYWRfbGVuKTsKLQlyZWFkX2NxZS0+aGVhZGVyID0gaHRvbmwoVl9DUUVfUVBJRChDUUVfUVBJRChod19jcWUpKSB8Ci0JCQlWX0NRRV9TV0NRRShTV19DUUUoaHdfY3FlKSkgfAotCQkJVl9DUUVfT1BDT0RFKEZXX1JJX1JFQURfUkVRKSB8Ci0JCQlWX0NRRV9UWVBFKDEpKTsKKwlyZWFkX2NxZS0+aGVhZGVyID0gaHRvbmwoQ1FFX1FQSURfVihDUUVfUVBJRChod19jcWUpKSB8CisJCQlDUUVfU1dDUUVfVihTV19DUUUoaHdfY3FlKSkgfAorCQkJQ1FFX09QQ09ERV9WKEZXX1JJX1JFQURfUkVRKSB8CisJCQlDUUVfVFlQRV9WKDEpKTsKIAlyZWFkX2NxZS0+Yml0c190eXBlX3RzID0gaHdfY3FlLT5iaXRzX3R5cGVfdHM7CiB9CiAKQEAgLTQwMCw3ICs0MDAsNyBAQAogCQl9IGVsc2UgewogCQkJc3djcWUgPSAmY2hwLT5jcS5zd19xdWV1ZVtjaHAtPmNxLnN3X3BpZHhdOwogCQkJKnN3Y3FlID0gKmh3X2NxZTsKLQkJCXN3Y3FlLT5oZWFkZXIgfD0gY3B1X3RvX2JlMzIoVl9DUUVfU1dDUUUoMSkpOworCQkJc3djcWUtPmhlYWRlciB8PSBjcHVfdG9fYmUzMihDUUVfU1dDUUVfVigxKSk7CiAJCQl0NF9zd2NxX3Byb2R1Y2UoJmNocC0+Y3EpOwogCQl9CiBuZXh0X2NxZToKQEAgLTU3Niw3ICs1NzYsNyBAQAogCQl9CiAJCWlmICh1bmxpa2VseSgoQ1FFX1dSSURfTVNOKGh3X2NxZSkgIT0gKHdxLT5ycS5tc24pKSkpIHsKIAkJCXQ0X3NldF93cV9pbl9lcnJvcih3cSk7Ci0JCQlod19jcWUtPmhlYWRlciB8PSBodG9ubChWX0NRRV9TVEFUVVMoVDRfRVJSX01TTikpOworCQkJaHdfY3FlLT5oZWFkZXIgfD0gaHRvbmwoQ1FFX1NUQVRVU19WKFQ0X0VSUl9NU04pKTsKIAkJCWdvdG8gcHJvY19jcWU7CiAJCX0KIAkJZ290byBwcm9jX2NxZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9kZXZpY2UuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9kZXZpY2UuYwppbmRleCBlYjVkZjRlLi5hYWZkYmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvZGV2aWNlLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2RldmljZS5jCkBAIC0zODAsMTIgKzM4MCwxMiBAQAogCQkgICAgICAic3RhZzogaWR4IDB4JXggdmFsaWQgJWQga2V5IDB4JXggc3RhdGUgJWQgcGRpZCAlZCAiCiAJCSAgICAgICJwZXJtIDB4JXggcHMgJWQgbGVuIDB4JWxseCB2YSAweCVsbHhcbiIsCiAJCSAgICAgICh1MzIpaWQ8PDgsCi0JCSAgICAgIEdfRldfUklfVFBURV9WQUxJRChudG9obCh0cHRlLnZhbGlkX3RvX3BkaWQpKSwKLQkJICAgICAgR19GV19SSV9UUFRFX1NUQUdLRVkobnRvaGwodHB0ZS52YWxpZF90b19wZGlkKSksCi0JCSAgICAgIEdfRldfUklfVFBURV9TVEFHU1RBVEUobnRvaGwodHB0ZS52YWxpZF90b19wZGlkKSksCi0JCSAgICAgIEdfRldfUklfVFBURV9QRElEKG50b2hsKHRwdGUudmFsaWRfdG9fcGRpZCkpLAotCQkgICAgICBHX0ZXX1JJX1RQVEVfUEVSTShudG9obCh0cHRlLmxvY3JlYWRfdG9fcXBpZCkpLAotCQkgICAgICBHX0ZXX1JJX1RQVEVfUFMobnRvaGwodHB0ZS5sb2NyZWFkX3RvX3FwaWQpKSwKKwkJICAgICAgRldfUklfVFBURV9WQUxJRF9HKG50b2hsKHRwdGUudmFsaWRfdG9fcGRpZCkpLAorCQkgICAgICBGV19SSV9UUFRFX1NUQUdLRVlfRyhudG9obCh0cHRlLnZhbGlkX3RvX3BkaWQpKSwKKwkJICAgICAgRldfUklfVFBURV9TVEFHU1RBVEVfRyhudG9obCh0cHRlLnZhbGlkX3RvX3BkaWQpKSwKKwkJICAgICAgRldfUklfVFBURV9QRElEX0cobnRvaGwodHB0ZS52YWxpZF90b19wZGlkKSksCisJCSAgICAgIEZXX1JJX1RQVEVfUEVSTV9HKG50b2hsKHRwdGUubG9jcmVhZF90b19xcGlkKSksCisJCSAgICAgIEZXX1JJX1RQVEVfUFNfRyhudG9obCh0cHRlLmxvY3JlYWRfdG9fcXBpZCkpLAogCQkgICAgICAoKHU2NCludG9obCh0cHRlLmxlbl9oaSkgPDwgMzIpIHwgbnRvaGwodHB0ZS5sZW5fbG8pLAogCQkgICAgICAoKHU2NCludG9obCh0cHRlLnZhX2hpKSA8PCAzMikgfCBudG9obCh0cHRlLnZhX2xvX2ZibykpOwogCWlmIChjYyA8IHNwYWNlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2V2LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvZXYuYwppbmRleCBjOWRmMDU0Li43OTQ1NTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvZXYuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvZXYuYwpAQCAtNTAsMTIgKzUwLDEyIEBACiAJUERCRygic3RhZyBpZHggMHgleCB2YWxpZCAlZCBrZXkgMHgleCBzdGF0ZSAlZCBwZGlkICVkICIKIAkgICAgICAgInBlcm0gMHgleCBwcyAlZCBsZW4gMHglbGx4IHZhIDB4JWxseFxuIiwKIAkgICAgICAgc3RhZyAmIDB4ZmZmZmZmMDAsCi0JICAgICAgIEdfRldfUklfVFBURV9WQUxJRChudG9obCh0cHRlLnZhbGlkX3RvX3BkaWQpKSwKLQkgICAgICAgR19GV19SSV9UUFRFX1NUQUdLRVkobnRvaGwodHB0ZS52YWxpZF90b19wZGlkKSksCi0JICAgICAgIEdfRldfUklfVFBURV9TVEFHU1RBVEUobnRvaGwodHB0ZS52YWxpZF90b19wZGlkKSksCi0JICAgICAgIEdfRldfUklfVFBURV9QRElEKG50b2hsKHRwdGUudmFsaWRfdG9fcGRpZCkpLAotCSAgICAgICBHX0ZXX1JJX1RQVEVfUEVSTShudG9obCh0cHRlLmxvY3JlYWRfdG9fcXBpZCkpLAotCSAgICAgICBHX0ZXX1JJX1RQVEVfUFMobnRvaGwodHB0ZS5sb2NyZWFkX3RvX3FwaWQpKSwKKwkgICAgICAgRldfUklfVFBURV9WQUxJRF9HKG50b2hsKHRwdGUudmFsaWRfdG9fcGRpZCkpLAorCSAgICAgICBGV19SSV9UUFRFX1NUQUdLRVlfRyhudG9obCh0cHRlLnZhbGlkX3RvX3BkaWQpKSwKKwkgICAgICAgRldfUklfVFBURV9TVEFHU1RBVEVfRyhudG9obCh0cHRlLnZhbGlkX3RvX3BkaWQpKSwKKwkgICAgICAgRldfUklfVFBURV9QRElEX0cobnRvaGwodHB0ZS52YWxpZF90b19wZGlkKSksCisJICAgICAgIEZXX1JJX1RQVEVfUEVSTV9HKG50b2hsKHRwdGUubG9jcmVhZF90b19xcGlkKSksCisJICAgICAgIEZXX1JJX1RQVEVfUFNfRyhudG9obCh0cHRlLmxvY3JlYWRfdG9fcXBpZCkpLAogCSAgICAgICAoKHU2NCludG9obCh0cHRlLmxlbl9oaSkgPDwgMzIpIHwgbnRvaGwodHB0ZS5sZW5fbG8pLAogCSAgICAgICAoKHU2NCludG9obCh0cHRlLnZhX2hpKSA8PCAzMikgfCBudG9obCh0cHRlLnZhX2xvX2ZibykpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L21lbS5jCmluZGV4IGNiNDNjMjIuLjY3OTFmZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9tZW0uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvbWVtLmMKQEAgLTg2LDE0ICs4NiwxNCBAQAogCXJlcS0+d3Iud3JfbG8gPSB3YWl0ID8gKF9fZm9yY2UgX19iZTY0KSh1bnNpZ25lZCBsb25nKSAmd3Jfd2FpdCA6IDBMOwogCXJlcS0+d3Iud3JfbWlkID0gY3B1X3RvX2JlMzIoRldfV1JfTEVOMTZfVihESVZfUk9VTkRfVVAod3JfbGVuLCAxNikpKTsKIAlyZXEtPmNtZCA9IGNwdV90b19iZTMyKFVMUFRYX0NNRF9WKFVMUF9UWF9NRU1fV1JJVEUpKTsKLQlyZXEtPmNtZCB8PSBjcHVfdG9fYmUzMihWX1Q1X1VMUF9NRU1JT19PUkRFUigxKSk7CisJcmVxLT5jbWQgfD0gY3B1X3RvX2JlMzIoVDVfVUxQX01FTUlPX09SREVSX1YoMSkpOwogCXJlcS0+ZGxlbiA9IGNwdV90b19iZTMyKFVMUF9NRU1JT19EQVRBX0xFTl9WKGxlbj4+NSkpOwogCXJlcS0+bGVuMTYgPSBjcHVfdG9fYmUzMihESVZfUk9VTkRfVVAod3JfbGVuLXNpemVvZihyZXEtPndyKSwgMTYpKTsKIAlyZXEtPmxvY2tfYWRkciA9IGNwdV90b19iZTMyKFVMUF9NRU1JT19BRERSX1YoYWRkcikpOwogCiAJc2dsID0gKHN0cnVjdCB1bHB0eF9zZ2wgKikocmVxICsgMSk7CiAJc2dsLT5jbWRfbnNnZSA9IGNwdV90b19iZTMyKFVMUFRYX0NNRF9WKFVMUF9UWF9TQ19EU0dMKSB8Ci0JCQkJICAgIFVMUFRYX05TR0UoMSkpOworCQkJCSAgICBVTFBUWF9OU0dFX1YoMSkpOwogCXNnbC0+bGVuMCA9IGNwdV90b19iZTMyKGxlbik7CiAJc2dsLT5hZGRyMCA9IGNwdV90b19iZTY0KGRhdGEpOwogCkBAIC0yODYsMTcgKzI4NiwxNyBAQAogCWlmIChyZXNldF90cHRfZW50cnkpCiAJCW1lbXNldCgmdHB0LCAwLCBzaXplb2YodHB0KSk7CiAJZWxzZSB7Ci0JCXRwdC52YWxpZF90b19wZGlkID0gY3B1X3RvX2JlMzIoRl9GV19SSV9UUFRFX1ZBTElEIHwKLQkJCVZfRldfUklfVFBURV9TVEFHS0VZKCgqc3RhZyAmIE1fRldfUklfVFBURV9TVEFHS0VZKSkgfAotCQkJVl9GV19SSV9UUFRFX1NUQUdTVEFURShzdGFnX3N0YXRlKSB8Ci0JCQlWX0ZXX1JJX1RQVEVfU1RBR1RZUEUodHlwZSkgfCBWX0ZXX1JJX1RQVEVfUERJRChwZGlkKSk7Ci0JCXRwdC5sb2NyZWFkX3RvX3FwaWQgPSBjcHVfdG9fYmUzMihWX0ZXX1JJX1RQVEVfUEVSTShwZXJtKSB8Ci0JCQkoYmluZF9lbmFibGVkID8gRl9GV19SSV9UUFRFX01XQklOREVOIDogMCkgfAotCQkJVl9GV19SSV9UUFRFX0FERFJUWVBFKCh6YnZhID8gRldfUklfWkVST19CQVNFRF9UTyA6CisJCXRwdC52YWxpZF90b19wZGlkID0gY3B1X3RvX2JlMzIoRldfUklfVFBURV9WQUxJRF9GIHwKKwkJCUZXX1JJX1RQVEVfU1RBR0tFWV9WKCgqc3RhZyAmIEZXX1JJX1RQVEVfU1RBR0tFWV9NKSkgfAorCQkJRldfUklfVFBURV9TVEFHU1RBVEVfVihzdGFnX3N0YXRlKSB8CisJCQlGV19SSV9UUFRFX1NUQUdUWVBFX1YodHlwZSkgfCBGV19SSV9UUFRFX1BESURfVihwZGlkKSk7CisJCXRwdC5sb2NyZWFkX3RvX3FwaWQgPSBjcHVfdG9fYmUzMihGV19SSV9UUFRFX1BFUk1fVihwZXJtKSB8CisJCQkoYmluZF9lbmFibGVkID8gRldfUklfVFBURV9NV0JJTkRFTl9GIDogMCkgfAorCQkJRldfUklfVFBURV9BRERSVFlQRV9WKCh6YnZhID8gRldfUklfWkVST19CQVNFRF9UTyA6CiAJCQkJCQkgICAgICBGV19SSV9WQV9CQVNFRF9UTykpfAotCQkJVl9GV19SSV9UUFRFX1BTKHBhZ2Vfc2l6ZSkpOworCQkJRldfUklfVFBURV9QU19WKHBhZ2Vfc2l6ZSkpOwogCQl0cHQubm9zbm9vcF9wYmxhZGRyID0gIXBibF9zaXplID8gMCA6IGNwdV90b19iZTMyKAotCQkJVl9GV19SSV9UUFRFX1BCTEFERFIoUEJMX09GRihyZGV2LCBwYmxfYWRkcik+PjMpKTsKKwkJCUZXX1JJX1RQVEVfUEJMQUREUl9WKFBCTF9PRkYocmRldiwgcGJsX2FkZHIpPj4zKSk7CiAJCXRwdC5sZW5fbG8gPSBjcHVfdG9fYmUzMigodTMyKShsZW4gJiAweGZmZmZmZmZmVUwpKTsKIAkJdHB0LnZhX2hpID0gY3B1X3RvX2JlMzIoKHUzMikodG8gPj4gMzIpKTsKIAkJdHB0LnZhX2xvX2ZibyA9IGNwdV90b19iZTMyKCh1MzIpKHRvICYgMHhmZmZmZmZmZlVMKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCmluZGV4IGJiODVkNDcuLjE1Y2FlNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIAltZW1zZXQocmVzX3dyLCAwLCB3cl9sZW4pOwogCXJlc193ci0+b3BfbnJlcyA9IGNwdV90b19iZTMyKAogCQkJRldfV1JfT1BfVihGV19SSV9SRVNfV1IpIHwKLQkJCVZfRldfUklfUkVTX1dSX05SRVMoMikgfAorCQkJRldfUklfUkVTX1dSX05SRVNfVigyKSB8CiAJCQlGV19XUl9DT01QTF9GKTsKIAlyZXNfd3ItPmxlbjE2X3BrZCA9IGNwdV90b19iZTMyKERJVl9ST1VORF9VUCh3cl9sZW4sIDE2KSk7CiAJcmVzX3dyLT5jb29raWUgPSAodW5zaWduZWQgbG9uZykgJndyX3dhaXQ7CkBAIC0yODcsMTkgKzI4NywxOSBAQAogCQlyZGV2LT5od19xdWV1ZS50NF9lcV9zdGF0dXNfZW50cmllczsKIAogCXJlcy0+dS5zcXJxLmZldGNoc3ptX3RvX2lxaWQgPSBjcHVfdG9fYmUzMigKLQkJVl9GV19SSV9SRVNfV1JfSE9TVEZDTU9ERSgwKSB8CS8qIG5vIGhvc3QgY2lkeCB1cGRhdGVzICovCi0JCVZfRldfUklfUkVTX1dSX0NQUklPKDApIHwJLyogZG9uJ3Qga2VlcCBpbiBjaGlwIGNhY2hlICovCi0JCVZfRldfUklfUkVTX1dSX1BDSUVDSE4oMCkgfAkvKiBzZXQgYnkgdVAgYXQgcmlfaW5pdCB0aW1lICovCi0JCSh0NF9zcV9vbmNoaXAoJndxLT5zcSkgPyBGX0ZXX1JJX1JFU19XUl9PTkNISVAgOiAwKSB8Ci0JCVZfRldfUklfUkVTX1dSX0lRSUQoc2NxLT5jcWlkKSk7CisJCUZXX1JJX1JFU19XUl9IT1NURkNNT0RFX1YoMCkgfAkvKiBubyBob3N0IGNpZHggdXBkYXRlcyAqLworCQlGV19SSV9SRVNfV1JfQ1BSSU9fVigwKSB8CS8qIGRvbid0IGtlZXAgaW4gY2hpcCBjYWNoZSAqLworCQlGV19SSV9SRVNfV1JfUENJRUNITl9WKDApIHwJLyogc2V0IGJ5IHVQIGF0IHJpX2luaXQgdGltZSAqLworCQkodDRfc3Ffb25jaGlwKCZ3cS0+c3EpID8gRldfUklfUkVTX1dSX09OQ0hJUF9GIDogMCkgfAorCQlGV19SSV9SRVNfV1JfSVFJRF9WKHNjcS0+Y3FpZCkpOwogCXJlcy0+dS5zcXJxLmRjYWVuX3RvX2Vxc2l6ZSA9IGNwdV90b19iZTMyKAotCQlWX0ZXX1JJX1JFU19XUl9EQ0FFTigwKSB8Ci0JCVZfRldfUklfUkVTX1dSX0RDQUNQVSgwKSB8Ci0JCVZfRldfUklfUkVTX1dSX0ZCTUlOKDIpIHwKLQkJVl9GV19SSV9SRVNfV1JfRkJNQVgoMikgfAotCQlWX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSE8oMCkgfAotCQlWX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSCgwKSB8Ci0JCVZfRldfUklfUkVTX1dSX0VRU0laRShlcXNpemUpKTsKKwkJRldfUklfUkVTX1dSX0RDQUVOX1YoMCkgfAorCQlGV19SSV9SRVNfV1JfRENBQ1BVX1YoMCkgfAorCQlGV19SSV9SRVNfV1JfRkJNSU5fVigyKSB8CisJCUZXX1JJX1JFU19XUl9GQk1BWF9WKDIpIHwKKwkJRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIT19WKDApIHwKKwkJRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIX1YoMCkgfAorCQlGV19SSV9SRVNfV1JfRVFTSVpFX1YoZXFzaXplKSk7CiAJcmVzLT51LnNxcnEuZXFpZCA9IGNwdV90b19iZTMyKHdxLT5zcS5xaWQpOwogCXJlcy0+dS5zcXJxLmVxYWRkciA9IGNwdV90b19iZTY0KHdxLT5zcS5kbWFfYWRkcik7CiAJcmVzKys7CkBAIC0zMTIsMTggKzMxMiwxOCBAQAogCWVxc2l6ZSA9IHdxLT5ycS5zaXplICogVDRfUlFfTlVNX1NMT1RTICsKIAkJcmRldi0+aHdfcXVldWUudDRfZXFfc3RhdHVzX2VudHJpZXM7CiAJcmVzLT51LnNxcnEuZmV0Y2hzem1fdG9faXFpZCA9IGNwdV90b19iZTMyKAotCQlWX0ZXX1JJX1JFU19XUl9IT1NURkNNT0RFKDApIHwJLyogbm8gaG9zdCBjaWR4IHVwZGF0ZXMgKi8KLQkJVl9GV19SSV9SRVNfV1JfQ1BSSU8oMCkgfAkvKiBkb24ndCBrZWVwIGluIGNoaXAgY2FjaGUgKi8KLQkJVl9GV19SSV9SRVNfV1JfUENJRUNITigwKSB8CS8qIHNldCBieSB1UCBhdCByaV9pbml0IHRpbWUgKi8KLQkJVl9GV19SSV9SRVNfV1JfSVFJRChyY3EtPmNxaWQpKTsKKwkJRldfUklfUkVTX1dSX0hPU1RGQ01PREVfVigwKSB8CS8qIG5vIGhvc3QgY2lkeCB1cGRhdGVzICovCisJCUZXX1JJX1JFU19XUl9DUFJJT19WKDApIHwJLyogZG9uJ3Qga2VlcCBpbiBjaGlwIGNhY2hlICovCisJCUZXX1JJX1JFU19XUl9QQ0lFQ0hOX1YoMCkgfAkvKiBzZXQgYnkgdVAgYXQgcmlfaW5pdCB0aW1lICovCisJCUZXX1JJX1JFU19XUl9JUUlEX1YocmNxLT5jcWlkKSk7CiAJcmVzLT51LnNxcnEuZGNhZW5fdG9fZXFzaXplID0gY3B1X3RvX2JlMzIoCi0JCVZfRldfUklfUkVTX1dSX0RDQUVOKDApIHwKLQkJVl9GV19SSV9SRVNfV1JfRENBQ1BVKDApIHwKLQkJVl9GV19SSV9SRVNfV1JfRkJNSU4oMikgfAotCQlWX0ZXX1JJX1JFU19XUl9GQk1BWCgyKSB8Ci0JCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNITygwKSB8Ci0JCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIKDApIHwKLQkJVl9GV19SSV9SRVNfV1JfRVFTSVpFKGVxc2l6ZSkpOworCQlGV19SSV9SRVNfV1JfRENBRU5fVigwKSB8CisJCUZXX1JJX1JFU19XUl9EQ0FDUFVfVigwKSB8CisJCUZXX1JJX1JFU19XUl9GQk1JTl9WKDIpIHwKKwkJRldfUklfUkVTX1dSX0ZCTUFYX1YoMikgfAorCQlGV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0hPX1YoMCkgfAorCQlGV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0hfVigwKSB8CisJCUZXX1JJX1JFU19XUl9FUVNJWkVfVihlcXNpemUpKTsKIAlyZXMtPnUuc3FycS5lcWlkID0gY3B1X3RvX2JlMzIod3EtPnJxLnFpZCk7CiAJcmVzLT51LnNxcnEuZXFhZGRyID0gY3B1X3RvX2JlNjQod3EtPnJxLmRtYV9hZGRyKTsKIApAQCAtNDQ0LDE5ICs0NDQsMTkgQEAKIAljYXNlIElCX1dSX1NFTkQ6CiAJCWlmICh3ci0+c2VuZF9mbGFncyAmIElCX1NFTkRfU09MSUNJVEVEKQogCQkJd3FlLT5zZW5kLnNlbmRvcF9wa2QgPSBjcHVfdG9fYmUzMigKLQkJCQlWX0ZXX1JJX1NFTkRfV1JfU0VORE9QKEZXX1JJX1NFTkRfV0lUSF9TRSkpOworCQkJCUZXX1JJX1NFTkRfV1JfU0VORE9QX1YoRldfUklfU0VORF9XSVRIX1NFKSk7CiAJCWVsc2UKIAkJCXdxZS0+c2VuZC5zZW5kb3BfcGtkID0gY3B1X3RvX2JlMzIoCi0JCQkJVl9GV19SSV9TRU5EX1dSX1NFTkRPUChGV19SSV9TRU5EKSk7CisJCQkJRldfUklfU0VORF9XUl9TRU5ET1BfVihGV19SSV9TRU5EKSk7CiAJCXdxZS0+c2VuZC5zdGFnX2ludiA9IDA7CiAJCWJyZWFrOwogCWNhc2UgSUJfV1JfU0VORF9XSVRIX0lOVjoKIAkJaWYgKHdyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9TT0xJQ0lURUQpCiAJCQl3cWUtPnNlbmQuc2VuZG9wX3BrZCA9IGNwdV90b19iZTMyKAotCQkJCVZfRldfUklfU0VORF9XUl9TRU5ET1AoRldfUklfU0VORF9XSVRIX1NFX0lOVikpOworCQkJCUZXX1JJX1NFTkRfV1JfU0VORE9QX1YoRldfUklfU0VORF9XSVRIX1NFX0lOVikpOwogCQllbHNlCiAJCQl3cWUtPnNlbmQuc2VuZG9wX3BrZCA9IGNwdV90b19iZTMyKAotCQkJCVZfRldfUklfU0VORF9XUl9TRU5ET1AoRldfUklfU0VORF9XSVRIX0lOVikpOworCQkJCUZXX1JJX1NFTkRfV1JfU0VORE9QX1YoRldfUklfU0VORF9XSVRIX0lOVikpOwogCQl3cWUtPnNlbmQuc3RhZ19pbnYgPSBjcHVfdG9fYmUzMih3ci0+ZXguaW52YWxpZGF0ZV9ya2V5KTsKIAkJYnJlYWs7CiAKQEAgLTEyODMsOCArMTI4Myw4IEBACiAKIAl3cWUtPnUuaW5pdC50eXBlID0gRldfUklfVFlQRV9JTklUOwogCXdxZS0+dS5pbml0Lm1wYXJlcWJpdF9wMnB0eXBlID0KLQkJVl9GV19SSV9XUl9NUEFSRVFCSVQocWhwLT5hdHRyLm1wYV9hdHRyLmluaXRpYXRvcikgfAotCQlWX0ZXX1JJX1dSX1AyUFRZUEUocWhwLT5hdHRyLm1wYV9hdHRyLnAycF90eXBlKTsKKwkJRldfUklfV1JfTVBBUkVRQklUX1YocWhwLT5hdHRyLm1wYV9hdHRyLmluaXRpYXRvcikgfAorCQlGV19SSV9XUl9QMlBUWVBFX1YocWhwLT5hdHRyLm1wYV9hdHRyLnAycF90eXBlKTsKIAl3cWUtPnUuaW5pdC5tcGFfYXR0cnMgPSBGV19SSV9NUEFfSUVURl9FTkFCTEU7CiAJaWYgKHFocC0+YXR0ci5tcGFfYXR0ci5yZWN2X21hcmtlcl9lbmFibGVkKQogCQl3cWUtPnUuaW5pdC5tcGFfYXR0cnMgfD0gRldfUklfTVBBX1JYX01BUktFUl9FTkFCTEU7CkBAIC0xNzc2LDcgKzE3NzYsNyBAQAogCQlpZiAobW01KSB7CiAJCQltbTUtPmtleSA9IHVyZXNwLm1hX3N5bmNfa2V5OwogCQkJbW01LT5hZGRyID0gKHBjaV9yZXNvdXJjZV9zdGFydChyaHAtPnJkZXYubGxkaS5wZGV2LCAwKQotCQkJCSAgICArIEFfUENJRV9NQV9TWU5DKSAmIFBBR0VfTUFTSzsKKwkJCQkgICAgKyBQQ0lFX01BX1NZTkNfQSkgJiBQQUdFX01BU0s7CiAJCQltbTUtPmxlbiA9IFBBR0VfU0laRTsKIAkJCWluc2VydF9tbWFwKHVjb250ZXh0LCBtbTUpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvdDQuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC90NC5oCmluZGV4IGMwNGU1MTMuLjg3MWNkY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC90NC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC90NC5oCkBAIC00MSw3ICs0MSw3IEBACiAjZGVmaW5lIFQ0X1BBR0VTSVpFX01BU0sgMHhmZmZmMDAwICAvKiA0S0ItMTI4TUIgKi8KICNkZWZpbmUgVDRfU1RBR19VTlNFVCAweGZmZmZmZmZmCiAjZGVmaW5lIFQ0X0ZXX01BSiAwCi0jZGVmaW5lIEFfUENJRV9NQV9TWU5DIDB4MzBiNAorI2RlZmluZSBQQ0lFX01BX1NZTkNfQSAweDMwYjQKIAogc3RydWN0IHQ0X3N0YXR1c19wYWdlIHsKIAlfX2JlMzIgcnN2ZDE7CS8qIGZsaXQgMCAtIGh3IG93bnMgKi8KQEAgLTE4NCw0NCArMTg0LDQ0IEBACiAKIC8qIG1hY3JvcyBmb3IgZmxpdCAwIG9mIHRoZSBjcWUgKi8KIAotI2RlZmluZSBTX0NRRV9RUElEICAgICAgICAxMgotI2RlZmluZSBNX0NRRV9RUElEICAgICAgICAweEZGRkZGCi0jZGVmaW5lIEdfQ1FFX1FQSUQoeCkgICAgICgoKCh4KSA+PiBTX0NRRV9RUElEKSkgJiBNX0NRRV9RUElEKQotI2RlZmluZSBWX0NRRV9RUElEKHgpCSAgKCh4KTw8U19DUUVfUVBJRCkKKyNkZWZpbmUgQ1FFX1FQSURfUyAgICAgICAgMTIKKyNkZWZpbmUgQ1FFX1FQSURfTSAgICAgICAgMHhGRkZGRgorI2RlZmluZSBDUUVfUVBJRF9HKHgpICAgICAoKCgoeCkgPj4gQ1FFX1FQSURfUykpICYgQ1FFX1FQSURfTSkKKyNkZWZpbmUgQ1FFX1FQSURfVih4KQkgICgoeCk8PENRRV9RUElEX1MpCiAKLSNkZWZpbmUgU19DUUVfU1dDUUUgICAgICAgMTEKLSNkZWZpbmUgTV9DUUVfU1dDUUUgICAgICAgMHgxCi0jZGVmaW5lIEdfQ1FFX1NXQ1FFKHgpICAgICgoKCh4KSA+PiBTX0NRRV9TV0NRRSkpICYgTV9DUUVfU1dDUUUpCi0jZGVmaW5lIFZfQ1FFX1NXQ1FFKHgpCSAgKCh4KTw8U19DUUVfU1dDUUUpCisjZGVmaW5lIENRRV9TV0NRRV9TICAgICAgIDExCisjZGVmaW5lIENRRV9TV0NRRV9NICAgICAgIDB4MQorI2RlZmluZSBDUUVfU1dDUUVfRyh4KSAgICAoKCgoeCkgPj4gQ1FFX1NXQ1FFX1MpKSAmIENRRV9TV0NRRV9NKQorI2RlZmluZSBDUUVfU1dDUUVfVih4KQkgICgoeCk8PENRRV9TV0NRRV9TKQogCi0jZGVmaW5lIFNfQ1FFX1NUQVRVUyAgICAgIDUKLSNkZWZpbmUgTV9DUUVfU1RBVFVTICAgICAgMHgxRgotI2RlZmluZSBHX0NRRV9TVEFUVVMoeCkgICAoKCgoeCkgPj4gU19DUUVfU1RBVFVTKSkgJiBNX0NRRV9TVEFUVVMpCi0jZGVmaW5lIFZfQ1FFX1NUQVRVUyh4KSAgICgoeCk8PFNfQ1FFX1NUQVRVUykKKyNkZWZpbmUgQ1FFX1NUQVRVU19TICAgICAgNQorI2RlZmluZSBDUUVfU1RBVFVTX00gICAgICAweDFGCisjZGVmaW5lIENRRV9TVEFUVVNfRyh4KSAgICgoKCh4KSA+PiBDUUVfU1RBVFVTX1MpKSAmIENRRV9TVEFUVVNfTSkKKyNkZWZpbmUgQ1FFX1NUQVRVU19WKHgpICAgKCh4KTw8Q1FFX1NUQVRVU19TKQogCi0jZGVmaW5lIFNfQ1FFX1RZUEUgICAgICAgIDQKLSNkZWZpbmUgTV9DUUVfVFlQRSAgICAgICAgMHgxCi0jZGVmaW5lIEdfQ1FFX1RZUEUoeCkgICAgICgoKCh4KSA+PiBTX0NRRV9UWVBFKSkgJiBNX0NRRV9UWVBFKQotI2RlZmluZSBWX0NRRV9UWVBFKHgpICAgICAoKHgpPDxTX0NRRV9UWVBFKQorI2RlZmluZSBDUUVfVFlQRV9TICAgICAgICA0CisjZGVmaW5lIENRRV9UWVBFX00gICAgICAgIDB4MQorI2RlZmluZSBDUUVfVFlQRV9HKHgpICAgICAoKCgoeCkgPj4gQ1FFX1RZUEVfUykpICYgQ1FFX1RZUEVfTSkKKyNkZWZpbmUgQ1FFX1RZUEVfVih4KSAgICAgKCh4KTw8Q1FFX1RZUEVfUykKIAotI2RlZmluZSBTX0NRRV9PUENPREUgICAgICAwCi0jZGVmaW5lIE1fQ1FFX09QQ09ERSAgICAgIDB4RgotI2RlZmluZSBHX0NRRV9PUENPREUoeCkgICAoKCgoeCkgPj4gU19DUUVfT1BDT0RFKSkgJiBNX0NRRV9PUENPREUpCi0jZGVmaW5lIFZfQ1FFX09QQ09ERSh4KSAgICgoeCk8PFNfQ1FFX09QQ09ERSkKKyNkZWZpbmUgQ1FFX09QQ09ERV9TICAgICAgMAorI2RlZmluZSBDUUVfT1BDT0RFX00gICAgICAweEYKKyNkZWZpbmUgQ1FFX09QQ09ERV9HKHgpICAgKCgoKHgpID4+IENRRV9PUENPREVfUykpICYgQ1FFX09QQ09ERV9NKQorI2RlZmluZSBDUUVfT1BDT0RFX1YoeCkgICAoKHgpPDxDUUVfT1BDT0RFX1MpCiAKLSNkZWZpbmUgU1dfQ1FFKHgpICAgICAgICAgKEdfQ1FFX1NXQ1FFKGJlMzJfdG9fY3B1KCh4KS0+aGVhZGVyKSkpCi0jZGVmaW5lIENRRV9RUElEKHgpICAgICAgIChHX0NRRV9RUElEKGJlMzJfdG9fY3B1KCh4KS0+aGVhZGVyKSkpCi0jZGVmaW5lIENRRV9UWVBFKHgpICAgICAgIChHX0NRRV9UWVBFKGJlMzJfdG9fY3B1KCh4KS0+aGVhZGVyKSkpCisjZGVmaW5lIFNXX0NRRSh4KSAgICAgICAgIChDUUVfU1dDUUVfRyhiZTMyX3RvX2NwdSgoeCktPmhlYWRlcikpKQorI2RlZmluZSBDUUVfUVBJRCh4KSAgICAgICAoQ1FFX1FQSURfRyhiZTMyX3RvX2NwdSgoeCktPmhlYWRlcikpKQorI2RlZmluZSBDUUVfVFlQRSh4KSAgICAgICAoQ1FFX1RZUEVfRyhiZTMyX3RvX2NwdSgoeCktPmhlYWRlcikpKQogI2RlZmluZSBTUV9UWVBFKHgpCSAgKENRRV9UWVBFKCh4KSkpCiAjZGVmaW5lIFJRX1RZUEUoeCkJICAoIUNRRV9UWVBFKCh4KSkpCi0jZGVmaW5lIENRRV9TVEFUVVMoeCkgICAgIChHX0NRRV9TVEFUVVMoYmUzMl90b19jcHUoKHgpLT5oZWFkZXIpKSkKLSNkZWZpbmUgQ1FFX09QQ09ERSh4KSAgICAgKEdfQ1FFX09QQ09ERShiZTMyX3RvX2NwdSgoeCktPmhlYWRlcikpKQorI2RlZmluZSBDUUVfU1RBVFVTKHgpICAgICAoQ1FFX1NUQVRVU19HKGJlMzJfdG9fY3B1KCh4KS0+aGVhZGVyKSkpCisjZGVmaW5lIENRRV9PUENPREUoeCkgICAgIChDUUVfT1BDT0RFX0coYmUzMl90b19jcHUoKHgpLT5oZWFkZXIpKSkKIAogI2RlZmluZSBDUUVfU0VORF9PUENPREUoeCkoIFwKLQkoR19DUUVfT1BDT0RFKGJlMzJfdG9fY3B1KCh4KS0+aGVhZGVyKSkgPT0gRldfUklfU0VORCkgfHwgXAotCShHX0NRRV9PUENPREUoYmUzMl90b19jcHUoKHgpLT5oZWFkZXIpKSA9PSBGV19SSV9TRU5EX1dJVEhfU0UpIHx8IFwKLQkoR19DUUVfT1BDT0RFKGJlMzJfdG9fY3B1KCh4KS0+aGVhZGVyKSkgPT0gRldfUklfU0VORF9XSVRIX0lOVikgfHwgXAotCShHX0NRRV9PUENPREUoYmUzMl90b19jcHUoKHgpLT5oZWFkZXIpKSA9PSBGV19SSV9TRU5EX1dJVEhfU0VfSU5WKSkKKwkoQ1FFX09QQ09ERV9HKGJlMzJfdG9fY3B1KCh4KS0+aGVhZGVyKSkgPT0gRldfUklfU0VORCkgfHwgXAorCShDUUVfT1BDT0RFX0coYmUzMl90b19jcHUoKHgpLT5oZWFkZXIpKSA9PSBGV19SSV9TRU5EX1dJVEhfU0UpIHx8IFwKKwkoQ1FFX09QQ09ERV9HKGJlMzJfdG9fY3B1KCh4KS0+aGVhZGVyKSkgPT0gRldfUklfU0VORF9XSVRIX0lOVikgfHwgXAorCShDUUVfT1BDT0RFX0coYmUzMl90b19jcHUoKHgpLT5oZWFkZXIpKSA9PSBGV19SSV9TRU5EX1dJVEhfU0VfSU5WKSkKIAogI2RlZmluZSBDUUVfTEVOKHgpICAgICAgICAoYmUzMl90b19jcHUoKHgpLT5sZW4pKQogCkBAIC0yMzcsMjUgKzIzNywyNSBAQAogI2RlZmluZSBDUUVfV1JJRF9MT1coeCkJCShiZTMyX3RvX2NwdSgoeCktPnUuZ2VuLndyaWRfbG93KSkKIAogLyogbWFjcm9zIGZvciBmbGl0IDMgb2YgdGhlIGNxZSAqLwotI2RlZmluZSBTX0NRRV9HRU5CSVQJNjMKLSNkZWZpbmUgTV9DUUVfR0VOQklUCTB4MQotI2RlZmluZSBHX0NRRV9HRU5CSVQoeCkJKCgoeCkgPj4gU19DUUVfR0VOQklUKSAmIE1fQ1FFX0dFTkJJVCkKLSNkZWZpbmUgVl9DUUVfR0VOQklUKHgpICgoeCk8PFNfQ1FFX0dFTkJJVCkKKyNkZWZpbmUgQ1FFX0dFTkJJVF9TCTYzCisjZGVmaW5lIENRRV9HRU5CSVRfTQkweDEKKyNkZWZpbmUgQ1FFX0dFTkJJVF9HKHgpCSgoKHgpID4+IENRRV9HRU5CSVRfUykgJiBDUUVfR0VOQklUX00pCisjZGVmaW5lIENRRV9HRU5CSVRfVih4KSAoKHgpPDxDUUVfR0VOQklUX1MpCiAKLSNkZWZpbmUgU19DUUVfT1ZGQklUCTYyCi0jZGVmaW5lIE1fQ1FFX09WRkJJVAkweDEKLSNkZWZpbmUgR19DUUVfT1ZGQklUKHgpCSgoKCh4KSA+PiBTX0NRRV9PVkZCSVQpKSAmIE1fQ1FFX09WRkJJVCkKKyNkZWZpbmUgQ1FFX09WRkJJVF9TCTYyCisjZGVmaW5lIENRRV9PVkZCSVRfTQkweDEKKyNkZWZpbmUgQ1FFX09WRkJJVF9HKHgpCSgoKCh4KSA+PiBDUUVfT1ZGQklUX1MpKSAmIENRRV9PVkZCSVRfTSkKIAotI2RlZmluZSBTX0NRRV9JUVRZUEUJNjAKLSNkZWZpbmUgTV9DUUVfSVFUWVBFCTB4MwotI2RlZmluZSBHX0NRRV9JUVRZUEUoeCkJKCgoKHgpID4+IFNfQ1FFX0lRVFlQRSkpICYgTV9DUUVfSVFUWVBFKQorI2RlZmluZSBDUUVfSVFUWVBFX1MJNjAKKyNkZWZpbmUgQ1FFX0lRVFlQRV9NCTB4MworI2RlZmluZSBDUUVfSVFUWVBFX0coeCkJKCgoKHgpID4+IENRRV9JUVRZUEVfUykpICYgQ1FFX0lRVFlQRV9NKQogCi0jZGVmaW5lIE1fQ1FFX1RTCTB4MGZmZmZmZmZmZmZmZmZmZlVMTAotI2RlZmluZSBHX0NRRV9UUyh4KQkoKHgpICYgTV9DUUVfVFMpCisjZGVmaW5lIENRRV9UU19NCTB4MGZmZmZmZmZmZmZmZmZmZlVMTAorI2RlZmluZSBDUUVfVFNfRyh4KQkoKHgpICYgQ1FFX1RTX00pCiAKLSNkZWZpbmUgQ1FFX09WRkJJVCh4KQkoKHVuc2lnbmVkKUdfQ1FFX09WRkJJVChiZTY0X3RvX2NwdSgoeCktPmJpdHNfdHlwZV90cykpKQotI2RlZmluZSBDUUVfR0VOQklUKHgpCSgodW5zaWduZWQpR19DUUVfR0VOQklUKGJlNjRfdG9fY3B1KCh4KS0+Yml0c190eXBlX3RzKSkpCi0jZGVmaW5lIENRRV9UUyh4KQkoR19DUUVfVFMoYmU2NF90b19jcHUoKHgpLT5iaXRzX3R5cGVfdHMpKSkKKyNkZWZpbmUgQ1FFX09WRkJJVCh4KQkoKHVuc2lnbmVkKUNRRV9PVkZCSVRfRyhiZTY0X3RvX2NwdSgoeCktPmJpdHNfdHlwZV90cykpKQorI2RlZmluZSBDUUVfR0VOQklUKHgpCSgodW5zaWduZWQpQ1FFX0dFTkJJVF9HKGJlNjRfdG9fY3B1KCh4KS0+Yml0c190eXBlX3RzKSkpCisjZGVmaW5lIENRRV9UUyh4KQkoQ1FFX1RTX0coYmU2NF90b19jcHUoKHgpLT5iaXRzX3R5cGVfdHMpKSkKIAogc3RydWN0IHQ0X3N3c3FlIHsKIAl1NjQJCQl3cl9pZDsKQEAgLTQ2NSwxNCArNDY1LDE0IEBACiAJCX0gZWxzZSB7CiAJCQlQREJHKCIlczogREIgd3EtPnNxLnBpZHggPSAlZFxuIiwKIAkJCSAgICAgX19mdW5jX18sIHdxLT5zcS5waWR4KTsKLQkJCXdyaXRlbChQSURYX1Q1KGluYyksIHdxLT5zcS51ZGIpOworCQkJd3JpdGVsKFBJRFhfVDVfVihpbmMpLCB3cS0+c3EudWRiKTsKIAkJfQogCiAJCS8qIEZsdXNoIHVzZXIgZG9vcmJlbGwgYXJlYSB3cml0ZXMuICovCiAJCXdtYigpOwogCQlyZXR1cm47CiAJfQotCXdyaXRlbChRSUQod3EtPnNxLnFpZCkgfCBQSURYKGluYyksIHdxLT5kYik7CisJd3JpdGVsKFFJRF9WKHdxLT5zcS5xaWQpIHwgUElEWF9WKGluYyksIHdxLT5kYik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0NF9yaW5nX3JxX2RiKHN0cnVjdCB0NF93cSAqd3EsIHUxNiBpbmMsIHU4IHQ1LApAQCAtNDg5LDE0ICs0ODksMTQgQEAKIAkJfSBlbHNlIHsKIAkJCVBEQkcoIiVzOiBEQiB3cS0+cnEucGlkeCA9ICVkXG4iLAogCQkJICAgICBfX2Z1bmNfXywgd3EtPnJxLnBpZHgpOwotCQkJd3JpdGVsKFBJRFhfVDUoaW5jKSwgd3EtPnJxLnVkYik7CisJCQl3cml0ZWwoUElEWF9UNV9WKGluYyksIHdxLT5ycS51ZGIpOwogCQl9CiAKIAkJLyogRmx1c2ggdXNlciBkb29yYmVsbCBhcmVhIHdyaXRlcy4gKi8KIAkJd21iKCk7CiAJCXJldHVybjsKIAl9Ci0Jd3JpdGVsKFFJRCh3cS0+cnEucWlkKSB8IFBJRFgoaW5jKSwgd3EtPmRiKTsKKwl3cml0ZWwoUUlEX1Yod3EtPnJxLnFpZCkgfCBQSURYX1YoaW5jKSwgd3EtPmRiKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgdDRfd3FfaW5fZXJyb3Ioc3RydWN0IHQ0X3dxICp3cSkKQEAgLTU2MSwxNCArNTYxLDE0IEBACiAJdTMyIHZhbDsKIAogCXNldF9iaXQoQ1FfQVJNRUQsICZjcS0+ZmxhZ3MpOwotCXdoaWxlIChjcS0+Y2lkeF9pbmMgPiBDSURYSU5DX01BU0spIHsKLQkJdmFsID0gU0VJTlRBUk0oMCkgfCBDSURYSU5DKENJRFhJTkNfTUFTSykgfCBUSU1FUlJFRyg3KSB8Ci0JCSAgICAgIElOR1JFU1NRSUQoY3EtPmNxaWQpOworCXdoaWxlIChjcS0+Y2lkeF9pbmMgPiBDSURYSU5DX00pIHsKKwkJdmFsID0gU0VJTlRBUk1fVigwKSB8IENJRFhJTkNfVihDSURYSU5DX00pIHwgVElNRVJSRUdfVig3KSB8CisJCSAgICAgIElOR1JFU1NRSURfVihjcS0+Y3FpZCk7CiAJCXdyaXRlbCh2YWwsIGNxLT5ndHMpOwotCQljcS0+Y2lkeF9pbmMgLT0gQ0lEWElOQ19NQVNLOworCQljcS0+Y2lkeF9pbmMgLT0gQ0lEWElOQ19NOwogCX0KLQl2YWwgPSBTRUlOVEFSTShzZSkgfCBDSURYSU5DKGNxLT5jaWR4X2luYykgfCBUSU1FUlJFRyg2KSB8Ci0JICAgICAgSU5HUkVTU1FJRChjcS0+Y3FpZCk7CisJdmFsID0gU0VJTlRBUk1fVihzZSkgfCBDSURYSU5DX1YoY3EtPmNpZHhfaW5jKSB8IFRJTUVSUkVHX1YoNikgfAorCSAgICAgIElOR1JFU1NRSURfVihjcS0+Y3FpZCk7CiAJd3JpdGVsKHZhbCwgY3EtPmd0cyk7CiAJY3EtPmNpZHhfaW5jID0gMDsKIAlyZXR1cm4gMDsKQEAgLTU5NywxMSArNTk3LDExIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgdDRfaHdjcV9jb25zdW1lKHN0cnVjdCB0NF9jcSAqY3EpCiB7CiAJY3EtPmJpdHNfdHlwZV90cyA9IGNxLT5xdWV1ZVtjcS0+Y2lkeF0uYml0c190eXBlX3RzOwotCWlmICgrK2NxLT5jaWR4X2luYyA9PSAoY3EtPnNpemUgPj4gNCkgfHwgY3EtPmNpZHhfaW5jID09IENJRFhJTkNfTUFTSykgeworCWlmICgrK2NxLT5jaWR4X2luYyA9PSAoY3EtPnNpemUgPj4gNCkgfHwgY3EtPmNpZHhfaW5jID09IENJRFhJTkNfTSkgewogCQl1MzIgdmFsOwogCi0JCXZhbCA9IFNFSU5UQVJNKDApIHwgQ0lEWElOQyhjcS0+Y2lkeF9pbmMpIHwgVElNRVJSRUcoNykgfAotCQkgICAgICBJTkdSRVNTUUlEKGNxLT5jcWlkKTsKKwkJdmFsID0gU0VJTlRBUk1fVigwKSB8IENJRFhJTkNfVihjcS0+Y2lkeF9pbmMpIHwgVElNRVJSRUdfVig3KSB8CisJCSAgICAgIElOR1JFU1NRSURfVihjcS0+Y3FpZCk7CiAJCXdyaXRlbCh2YWwsIGNxLT5ndHMpOwogCQljcS0+Y2lkeF9pbmMgPSAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC90NGZ3X3JpX2FwaS5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Q0ZndfcmlfYXBpLmgKaW5kZXggNTcwOWU3N2YuLjVlNTMzMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC90NGZ3X3JpX2FwaS5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC90NGZ3X3JpX2FwaS5oCkBAIC0xNjIsMTAyICsxNjIsMTAyIEBACiAJX19iZTMyIGxlbl9oaTsKIH07CiAKLSNkZWZpbmUgU19GV19SSV9UUFRFX1ZBTElECQkzMQotI2RlZmluZSBNX0ZXX1JJX1RQVEVfVkFMSUQJCTB4MQotI2RlZmluZSBWX0ZXX1JJX1RQVEVfVkFMSUQoeCkJCSgoeCkgPDwgU19GV19SSV9UUFRFX1ZBTElEKQotI2RlZmluZSBHX0ZXX1JJX1RQVEVfVkFMSUQoeCkJCVwKLSAgICAoKCh4KSA+PiBTX0ZXX1JJX1RQVEVfVkFMSUQpICYgTV9GV19SSV9UUFRFX1ZBTElEKQotI2RlZmluZSBGX0ZXX1JJX1RQVEVfVkFMSUQJCVZfRldfUklfVFBURV9WQUxJRCgxVSkKKyNkZWZpbmUgRldfUklfVFBURV9WQUxJRF9TCQkzMQorI2RlZmluZSBGV19SSV9UUFRFX1ZBTElEX00JCTB4MQorI2RlZmluZSBGV19SSV9UUFRFX1ZBTElEX1YoeCkJCSgoeCkgPDwgRldfUklfVFBURV9WQUxJRF9TKQorI2RlZmluZSBGV19SSV9UUFRFX1ZBTElEX0coeCkJCVwKKwkoKCh4KSA+PiBGV19SSV9UUFRFX1ZBTElEX1MpICYgRldfUklfVFBURV9WQUxJRF9NKQorI2RlZmluZSBGV19SSV9UUFRFX1ZBTElEX0YJCUZXX1JJX1RQVEVfVkFMSURfVigxVSkKIAotI2RlZmluZSBTX0ZXX1JJX1RQVEVfU1RBR0tFWQkJMjMKLSNkZWZpbmUgTV9GV19SSV9UUFRFX1NUQUdLRVkJCTB4ZmYKLSNkZWZpbmUgVl9GV19SSV9UUFRFX1NUQUdLRVkoeCkJCSgoeCkgPDwgU19GV19SSV9UUFRFX1NUQUdLRVkpCi0jZGVmaW5lIEdfRldfUklfVFBURV9TVEFHS0VZKHgpCQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9UUFRFX1NUQUdLRVkpICYgTV9GV19SSV9UUFRFX1NUQUdLRVkpCisjZGVmaW5lIEZXX1JJX1RQVEVfU1RBR0tFWV9TCQkyMworI2RlZmluZSBGV19SSV9UUFRFX1NUQUdLRVlfTQkJMHhmZgorI2RlZmluZSBGV19SSV9UUFRFX1NUQUdLRVlfVih4KQkJKCh4KSA8PCBGV19SSV9UUFRFX1NUQUdLRVlfUykKKyNkZWZpbmUgRldfUklfVFBURV9TVEFHS0VZX0coeCkJCVwKKwkoKCh4KSA+PiBGV19SSV9UUFRFX1NUQUdLRVlfUykgJiBGV19SSV9UUFRFX1NUQUdLRVlfTSkKIAotI2RlZmluZSBTX0ZXX1JJX1RQVEVfU1RBR1NUQVRFCQkyMgotI2RlZmluZSBNX0ZXX1JJX1RQVEVfU1RBR1NUQVRFCQkweDEKLSNkZWZpbmUgVl9GV19SSV9UUFRFX1NUQUdTVEFURSh4KQkoKHgpIDw8IFNfRldfUklfVFBURV9TVEFHU1RBVEUpCi0jZGVmaW5lIEdfRldfUklfVFBURV9TVEFHU1RBVEUoeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfVFBURV9TVEFHU1RBVEUpICYgTV9GV19SSV9UUFRFX1NUQUdTVEFURSkKLSNkZWZpbmUgRl9GV19SSV9UUFRFX1NUQUdTVEFURQkJVl9GV19SSV9UUFRFX1NUQUdTVEFURSgxVSkKKyNkZWZpbmUgRldfUklfVFBURV9TVEFHU1RBVEVfUwkJMjIKKyNkZWZpbmUgRldfUklfVFBURV9TVEFHU1RBVEVfTQkJMHgxCisjZGVmaW5lIEZXX1JJX1RQVEVfU1RBR1NUQVRFX1YoeCkJKCh4KSA8PCBGV19SSV9UUFRFX1NUQUdTVEFURV9TKQorI2RlZmluZSBGV19SSV9UUFRFX1NUQUdTVEFURV9HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9UUFRFX1NUQUdTVEFURV9TKSAmIEZXX1JJX1RQVEVfU1RBR1NUQVRFX00pCisjZGVmaW5lIEZXX1JJX1RQVEVfU1RBR1NUQVRFX0YJCUZXX1JJX1RQVEVfU1RBR1NUQVRFX1YoMVUpCiAKLSNkZWZpbmUgU19GV19SSV9UUFRFX1NUQUdUWVBFCQkyMAotI2RlZmluZSBNX0ZXX1JJX1RQVEVfU1RBR1RZUEUJCTB4MwotI2RlZmluZSBWX0ZXX1JJX1RQVEVfU1RBR1RZUEUoeCkJKCh4KSA8PCBTX0ZXX1JJX1RQVEVfU1RBR1RZUEUpCi0jZGVmaW5lIEdfRldfUklfVFBURV9TVEFHVFlQRSh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9UUFRFX1NUQUdUWVBFKSAmIE1fRldfUklfVFBURV9TVEFHVFlQRSkKKyNkZWZpbmUgRldfUklfVFBURV9TVEFHVFlQRV9TCQkyMAorI2RlZmluZSBGV19SSV9UUFRFX1NUQUdUWVBFX00JCTB4MworI2RlZmluZSBGV19SSV9UUFRFX1NUQUdUWVBFX1YoeCkJKCh4KSA8PCBGV19SSV9UUFRFX1NUQUdUWVBFX1MpCisjZGVmaW5lIEZXX1JJX1RQVEVfU1RBR1RZUEVfRyh4KQlcCisJKCgoeCkgPj4gRldfUklfVFBURV9TVEFHVFlQRV9TKSAmIEZXX1JJX1RQVEVfU1RBR1RZUEVfTSkKIAotI2RlZmluZSBTX0ZXX1JJX1RQVEVfUERJRAkJMAotI2RlZmluZSBNX0ZXX1JJX1RQVEVfUERJRAkJMHhmZmZmZgotI2RlZmluZSBWX0ZXX1JJX1RQVEVfUERJRCh4KQkJKCh4KSA8PCBTX0ZXX1JJX1RQVEVfUERJRCkKLSNkZWZpbmUgR19GV19SSV9UUFRFX1BESUQoeCkJCVwKLSAgICAoKCh4KSA+PiBTX0ZXX1JJX1RQVEVfUERJRCkgJiBNX0ZXX1JJX1RQVEVfUERJRCkKKyNkZWZpbmUgRldfUklfVFBURV9QRElEX1MJCTAKKyNkZWZpbmUgRldfUklfVFBURV9QRElEX00JCTB4ZmZmZmYKKyNkZWZpbmUgRldfUklfVFBURV9QRElEX1YoeCkJCSgoeCkgPDwgRldfUklfVFBURV9QRElEX1MpCisjZGVmaW5lIEZXX1JJX1RQVEVfUERJRF9HKHgpCQlcCisJKCgoeCkgPj4gRldfUklfVFBURV9QRElEX1MpICYgRldfUklfVFBURV9QRElEX00pCiAKLSNkZWZpbmUgU19GV19SSV9UUFRFX1BFUk0JCTI4Ci0jZGVmaW5lIE1fRldfUklfVFBURV9QRVJNCQkweGYKLSNkZWZpbmUgVl9GV19SSV9UUFRFX1BFUk0oeCkJCSgoeCkgPDwgU19GV19SSV9UUFRFX1BFUk0pCi0jZGVmaW5lIEdfRldfUklfVFBURV9QRVJNKHgpCQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9UUFRFX1BFUk0pICYgTV9GV19SSV9UUFRFX1BFUk0pCisjZGVmaW5lIEZXX1JJX1RQVEVfUEVSTV9TCQkyOAorI2RlZmluZSBGV19SSV9UUFRFX1BFUk1fTQkJMHhmCisjZGVmaW5lIEZXX1JJX1RQVEVfUEVSTV9WKHgpCQkoKHgpIDw8IEZXX1JJX1RQVEVfUEVSTV9TKQorI2RlZmluZSBGV19SSV9UUFRFX1BFUk1fRyh4KQkJXAorCSgoKHgpID4+IEZXX1JJX1RQVEVfUEVSTV9TKSAmIEZXX1JJX1RQVEVfUEVSTV9NKQogCi0jZGVmaW5lIFNfRldfUklfVFBURV9SRU1JTlZESVMJCTI3Ci0jZGVmaW5lIE1fRldfUklfVFBURV9SRU1JTlZESVMJCTB4MQotI2RlZmluZSBWX0ZXX1JJX1RQVEVfUkVNSU5WRElTKHgpCSgoeCkgPDwgU19GV19SSV9UUFRFX1JFTUlOVkRJUykKLSNkZWZpbmUgR19GV19SSV9UUFRFX1JFTUlOVkRJUyh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9UUFRFX1JFTUlOVkRJUykgJiBNX0ZXX1JJX1RQVEVfUkVNSU5WRElTKQotI2RlZmluZSBGX0ZXX1JJX1RQVEVfUkVNSU5WRElTCQlWX0ZXX1JJX1RQVEVfUkVNSU5WRElTKDFVKQorI2RlZmluZSBGV19SSV9UUFRFX1JFTUlOVkRJU19TCQkyNworI2RlZmluZSBGV19SSV9UUFRFX1JFTUlOVkRJU19NCQkweDEKKyNkZWZpbmUgRldfUklfVFBURV9SRU1JTlZESVNfVih4KQkoKHgpIDw8IEZXX1JJX1RQVEVfUkVNSU5WRElTX1MpCisjZGVmaW5lIEZXX1JJX1RQVEVfUkVNSU5WRElTX0coeCkJXAorCSgoKHgpID4+IEZXX1JJX1RQVEVfUkVNSU5WRElTX1MpICYgRldfUklfVFBURV9SRU1JTlZESVNfTSkKKyNkZWZpbmUgRldfUklfVFBURV9SRU1JTlZESVNfRgkJRldfUklfVFBURV9SRU1JTlZESVNfVigxVSkKIAotI2RlZmluZSBTX0ZXX1JJX1RQVEVfQUREUlRZUEUJCTI2Ci0jZGVmaW5lIE1fRldfUklfVFBURV9BRERSVFlQRQkJMQotI2RlZmluZSBWX0ZXX1JJX1RQVEVfQUREUlRZUEUoeCkJKCh4KSA8PCBTX0ZXX1JJX1RQVEVfQUREUlRZUEUpCi0jZGVmaW5lIEdfRldfUklfVFBURV9BRERSVFlQRSh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9UUFRFX0FERFJUWVBFKSAmIE1fRldfUklfVFBURV9BRERSVFlQRSkKLSNkZWZpbmUgRl9GV19SSV9UUFRFX0FERFJUWVBFCQlWX0ZXX1JJX1RQVEVfQUREUlRZUEUoMVUpCisjZGVmaW5lIEZXX1JJX1RQVEVfQUREUlRZUEVfUwkJMjYKKyNkZWZpbmUgRldfUklfVFBURV9BRERSVFlQRV9NCQkxCisjZGVmaW5lIEZXX1JJX1RQVEVfQUREUlRZUEVfVih4KQkoKHgpIDw8IEZXX1JJX1RQVEVfQUREUlRZUEVfUykKKyNkZWZpbmUgRldfUklfVFBURV9BRERSVFlQRV9HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9UUFRFX0FERFJUWVBFX1MpICYgRldfUklfVFBURV9BRERSVFlQRV9NKQorI2RlZmluZSBGV19SSV9UUFRFX0FERFJUWVBFX0YJCUZXX1JJX1RQVEVfQUREUlRZUEVfVigxVSkKIAotI2RlZmluZSBTX0ZXX1JJX1RQVEVfTVdCSU5ERU4JCTI1Ci0jZGVmaW5lIE1fRldfUklfVFBURV9NV0JJTkRFTgkJMHgxCi0jZGVmaW5lIFZfRldfUklfVFBURV9NV0JJTkRFTih4KQkoKHgpIDw8IFNfRldfUklfVFBURV9NV0JJTkRFTikKLSNkZWZpbmUgR19GV19SSV9UUFRFX01XQklOREVOKHgpCVwKLSAgICAoKCh4KSA+PiBTX0ZXX1JJX1RQVEVfTVdCSU5ERU4pICYgTV9GV19SSV9UUFRFX01XQklOREVOKQotI2RlZmluZSBGX0ZXX1JJX1RQVEVfTVdCSU5ERU4JCVZfRldfUklfVFBURV9NV0JJTkRFTigxVSkKKyNkZWZpbmUgRldfUklfVFBURV9NV0JJTkRFTl9TCQkyNQorI2RlZmluZSBGV19SSV9UUFRFX01XQklOREVOX00JCTB4MQorI2RlZmluZSBGV19SSV9UUFRFX01XQklOREVOX1YoeCkJKCh4KSA8PCBGV19SSV9UUFRFX01XQklOREVOX1MpCisjZGVmaW5lIEZXX1JJX1RQVEVfTVdCSU5ERU5fRyh4KQlcCisJKCgoeCkgPj4gRldfUklfVFBURV9NV0JJTkRFTl9TKSAmIEZXX1JJX1RQVEVfTVdCSU5ERU5fTSkKKyNkZWZpbmUgRldfUklfVFBURV9NV0JJTkRFTl9GCQlGV19SSV9UUFRFX01XQklOREVOX1YoMVUpCiAKLSNkZWZpbmUgU19GV19SSV9UUFRFX1BTCQkJMjAKLSNkZWZpbmUgTV9GV19SSV9UUFRFX1BTCQkJMHgxZgotI2RlZmluZSBWX0ZXX1JJX1RQVEVfUFMoeCkJCSgoeCkgPDwgU19GV19SSV9UUFRFX1BTKQotI2RlZmluZSBHX0ZXX1JJX1RQVEVfUFMoeCkJCVwKLSAgICAoKCh4KSA+PiBTX0ZXX1JJX1RQVEVfUFMpICYgTV9GV19SSV9UUFRFX1BTKQorI2RlZmluZSBGV19SSV9UUFRFX1BTX1MJCQkyMAorI2RlZmluZSBGV19SSV9UUFRFX1BTX00JCQkweDFmCisjZGVmaW5lIEZXX1JJX1RQVEVfUFNfVih4KQkJKCh4KSA8PCBGV19SSV9UUFRFX1BTX1MpCisjZGVmaW5lIEZXX1JJX1RQVEVfUFNfRyh4KQkJXAorCSgoKHgpID4+IEZXX1JJX1RQVEVfUFNfUykgJiBGV19SSV9UUFRFX1BTX00pCiAKLSNkZWZpbmUgU19GV19SSV9UUFRFX1FQSUQJCTAKLSNkZWZpbmUgTV9GV19SSV9UUFRFX1FQSUQJCTB4ZmZmZmYKLSNkZWZpbmUgVl9GV19SSV9UUFRFX1FQSUQoeCkJCSgoeCkgPDwgU19GV19SSV9UUFRFX1FQSUQpCi0jZGVmaW5lIEdfRldfUklfVFBURV9RUElEKHgpCQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9UUFRFX1FQSUQpICYgTV9GV19SSV9UUFRFX1FQSUQpCisjZGVmaW5lIEZXX1JJX1RQVEVfUVBJRF9TCQkwCisjZGVmaW5lIEZXX1JJX1RQVEVfUVBJRF9NCQkweGZmZmZmCisjZGVmaW5lIEZXX1JJX1RQVEVfUVBJRF9WKHgpCQkoKHgpIDw8IEZXX1JJX1RQVEVfUVBJRF9TKQorI2RlZmluZSBGV19SSV9UUFRFX1FQSURfRyh4KQkJXAorCSgoKHgpID4+IEZXX1JJX1RQVEVfUVBJRF9TKSAmIEZXX1JJX1RQVEVfUVBJRF9NKQogCi0jZGVmaW5lIFNfRldfUklfVFBURV9OT1NOT09QCQkzMAotI2RlZmluZSBNX0ZXX1JJX1RQVEVfTk9TTk9PUAkJMHgxCi0jZGVmaW5lIFZfRldfUklfVFBURV9OT1NOT09QKHgpCQkoKHgpIDw8IFNfRldfUklfVFBURV9OT1NOT09QKQotI2RlZmluZSBHX0ZXX1JJX1RQVEVfTk9TTk9PUCh4KQkJXAotICAgICgoKHgpID4+IFNfRldfUklfVFBURV9OT1NOT09QKSAmIE1fRldfUklfVFBURV9OT1NOT09QKQotI2RlZmluZSBGX0ZXX1JJX1RQVEVfTk9TTk9PUAkJVl9GV19SSV9UUFRFX05PU05PT1AoMVUpCisjZGVmaW5lIEZXX1JJX1RQVEVfTk9TTk9PUF9TCQkzMAorI2RlZmluZSBGV19SSV9UUFRFX05PU05PT1BfTQkJMHgxCisjZGVmaW5lIEZXX1JJX1RQVEVfTk9TTk9PUF9WKHgpCQkoKHgpIDw8IEZXX1JJX1RQVEVfTk9TTk9PUF9TKQorI2RlZmluZSBGV19SSV9UUFRFX05PU05PT1BfRyh4KQkJXAorCSgoKHgpID4+IEZXX1JJX1RQVEVfTk9TTk9PUF9TKSAmIEZXX1JJX1RQVEVfTk9TTk9PUF9NKQorI2RlZmluZSBGV19SSV9UUFRFX05PU05PT1BfRgkJRldfUklfVFBURV9OT1NOT09QX1YoMVUpCiAKLSNkZWZpbmUgU19GV19SSV9UUFRFX1BCTEFERFIJCTAKLSNkZWZpbmUgTV9GV19SSV9UUFRFX1BCTEFERFIJCTB4MWZmZmZmZmYKLSNkZWZpbmUgVl9GV19SSV9UUFRFX1BCTEFERFIoeCkJCSgoeCkgPDwgU19GV19SSV9UUFRFX1BCTEFERFIpCi0jZGVmaW5lIEdfRldfUklfVFBURV9QQkxBRERSKHgpCQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9UUFRFX1BCTEFERFIpICYgTV9GV19SSV9UUFRFX1BCTEFERFIpCisjZGVmaW5lIEZXX1JJX1RQVEVfUEJMQUREUl9TCQkwCisjZGVmaW5lIEZXX1JJX1RQVEVfUEJMQUREUl9NCQkweDFmZmZmZmZmCisjZGVmaW5lIEZXX1JJX1RQVEVfUEJMQUREUl9WKHgpCQkoKHgpIDw8IEZXX1JJX1RQVEVfUEJMQUREUl9TKQorI2RlZmluZSBGV19SSV9UUFRFX1BCTEFERFJfRyh4KQkJXAorCSgoKHgpID4+IEZXX1JJX1RQVEVfUEJMQUREUl9TKSAmIEZXX1JJX1RQVEVfUEJMQUREUl9NKQogCi0jZGVmaW5lIFNfRldfUklfVFBURV9EQ0EJCTI0Ci0jZGVmaW5lIE1fRldfUklfVFBURV9EQ0EJCTB4MWYKLSNkZWZpbmUgVl9GV19SSV9UUFRFX0RDQSh4KQkJKCh4KSA8PCBTX0ZXX1JJX1RQVEVfRENBKQotI2RlZmluZSBHX0ZXX1JJX1RQVEVfRENBKHgpCQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9UUFRFX0RDQSkgJiBNX0ZXX1JJX1RQVEVfRENBKQorI2RlZmluZSBGV19SSV9UUFRFX0RDQV9TCQkyNAorI2RlZmluZSBGV19SSV9UUFRFX0RDQV9NCQkweDFmCisjZGVmaW5lIEZXX1JJX1RQVEVfRENBX1YoeCkJCSgoeCkgPDwgRldfUklfVFBURV9EQ0FfUykKKyNkZWZpbmUgRldfUklfVFBURV9EQ0FfRyh4KQkJXAorCSgoKHgpID4+IEZXX1JJX1RQVEVfRENBX1MpICYgRldfUklfVFBURV9EQ0FfTSkKIAotI2RlZmluZSBTX0ZXX1JJX1RQVEVfTVdCQ05UX1BTVEFHCTAKLSNkZWZpbmUgTV9GV19SSV9UUFRFX01XQkNOVF9QU1RBRwkweGZmZmZmZgotI2RlZmluZSBWX0ZXX1JJX1RQVEVfTVdCQ05UX1BTVEFUKHgpCVwKLSAgICAoKHgpIDw8IFNfRldfUklfVFBURV9NV0JDTlRfUFNUQUcpCi0jZGVmaW5lIEdfRldfUklfVFBURV9NV0JDTlRfUFNUQUcoeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfVFBURV9NV0JDTlRfUFNUQUcpICYgTV9GV19SSV9UUFRFX01XQkNOVF9QU1RBRykKKyNkZWZpbmUgRldfUklfVFBURV9NV0JDTlRfUFNUQUdfUwkwCisjZGVmaW5lIEZXX1JJX1RQVEVfTVdCQ05UX1BTVEFHX00JMHhmZmZmZmYKKyNkZWZpbmUgRldfUklfVFBURV9NV0JDTlRfUFNUQVRfVih4KQlcCisJKCh4KSA8PCBGV19SSV9UUFRFX01XQkNOVF9QU1RBR19TKQorI2RlZmluZSBGV19SSV9UUFRFX01XQkNOVF9QU1RBR19HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9UUFRFX01XQkNOVF9QU1RBR19TKSAmIEZXX1JJX1RQVEVfTVdCQ05UX1BTVEFHX00pCiAKIGVudW0gZndfcmlfcmVzX3R5cGUgewogCUZXX1JJX1JFU19UWVBFX1NRLApAQCAtMzA4LDIyMiArMzA4LDIyMiBAQAogI2VuZGlmCiB9OwogCi0jZGVmaW5lIFNfRldfUklfUkVTX1dSX05SRVMJMAotI2RlZmluZSBNX0ZXX1JJX1JFU19XUl9OUkVTCTB4ZmYKLSNkZWZpbmUgVl9GV19SSV9SRVNfV1JfTlJFUyh4KQkoKHgpIDw8IFNfRldfUklfUkVTX1dSX05SRVMpCi0jZGVmaW5lIEdfRldfUklfUkVTX1dSX05SRVMoeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfUkVTX1dSX05SRVMpICYgTV9GV19SSV9SRVNfV1JfTlJFUykKKyNkZWZpbmUgRldfUklfUkVTX1dSX05SRVNfUwkwCisjZGVmaW5lIEZXX1JJX1JFU19XUl9OUkVTX00JMHhmZgorI2RlZmluZSBGV19SSV9SRVNfV1JfTlJFU19WKHgpCSgoeCkgPDwgRldfUklfUkVTX1dSX05SRVNfUykKKyNkZWZpbmUgRldfUklfUkVTX1dSX05SRVNfRyh4KQlcCisJKCgoeCkgPj4gRldfUklfUkVTX1dSX05SRVNfUykgJiBGV19SSV9SRVNfV1JfTlJFU19NKQogCi0jZGVmaW5lIFNfRldfUklfUkVTX1dSX0ZFVENIU1pNCQkyNgotI2RlZmluZSBNX0ZXX1JJX1JFU19XUl9GRVRDSFNaTQkJMHgxCi0jZGVmaW5lIFZfRldfUklfUkVTX1dSX0ZFVENIU1pNKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfRkVUQ0hTWk0pCi0jZGVmaW5lIEdfRldfUklfUkVTX1dSX0ZFVENIU1pNKHgpCVwKLSAgICAoKCh4KSA+PiBTX0ZXX1JJX1JFU19XUl9GRVRDSFNaTSkgJiBNX0ZXX1JJX1JFU19XUl9GRVRDSFNaTSkKLSNkZWZpbmUgRl9GV19SSV9SRVNfV1JfRkVUQ0hTWk0JVl9GV19SSV9SRVNfV1JfRkVUQ0hTWk0oMVUpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9GRVRDSFNaTV9TCQkyNgorI2RlZmluZSBGV19SSV9SRVNfV1JfRkVUQ0hTWk1fTQkJMHgxCisjZGVmaW5lIEZXX1JJX1JFU19XUl9GRVRDSFNaTV9WKHgpCSgoeCkgPDwgRldfUklfUkVTX1dSX0ZFVENIU1pNX1MpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9GRVRDSFNaTV9HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9SRVNfV1JfRkVUQ0hTWk1fUykgJiBGV19SSV9SRVNfV1JfRkVUQ0hTWk1fTSkKKyNkZWZpbmUgRldfUklfUkVTX1dSX0ZFVENIU1pNX0YJRldfUklfUkVTX1dSX0ZFVENIU1pNX1YoMVUpCiAKLSNkZWZpbmUgU19GV19SSV9SRVNfV1JfU1RBVFVTUEdOUwkyNQotI2RlZmluZSBNX0ZXX1JJX1JFU19XUl9TVEFUVVNQR05TCTB4MQotI2RlZmluZSBWX0ZXX1JJX1JFU19XUl9TVEFUVVNQR05TKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfU1RBVFVTUEdOUykKLSNkZWZpbmUgR19GV19SSV9SRVNfV1JfU1RBVFVTUEdOUyh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9SRVNfV1JfU1RBVFVTUEdOUykgJiBNX0ZXX1JJX1JFU19XUl9TVEFUVVNQR05TKQotI2RlZmluZSBGX0ZXX1JJX1JFU19XUl9TVEFUVVNQR05TCVZfRldfUklfUkVTX1dSX1NUQVRVU1BHTlMoMVUpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9TVEFUVVNQR05TX1MJMjUKKyNkZWZpbmUgRldfUklfUkVTX1dSX1NUQVRVU1BHTlNfTQkweDEKKyNkZWZpbmUgRldfUklfUkVTX1dSX1NUQVRVU1BHTlNfVih4KQkoKHgpIDw8IEZXX1JJX1JFU19XUl9TVEFUVVNQR05TX1MpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9TVEFUVVNQR05TX0coeCkJXAorCSgoKHgpID4+IEZXX1JJX1JFU19XUl9TVEFUVVNQR05TX1MpICYgRldfUklfUkVTX1dSX1NUQVRVU1BHTlNfTSkKKyNkZWZpbmUgRldfUklfUkVTX1dSX1NUQVRVU1BHTlNfRglGV19SSV9SRVNfV1JfU1RBVFVTUEdOU19WKDFVKQogCi0jZGVmaW5lIFNfRldfUklfUkVTX1dSX1NUQVRVU1BHUk8JMjQKLSNkZWZpbmUgTV9GV19SSV9SRVNfV1JfU1RBVFVTUEdSTwkweDEKLSNkZWZpbmUgVl9GV19SSV9SRVNfV1JfU1RBVFVTUEdSTyh4KQkoKHgpIDw8IFNfRldfUklfUkVTX1dSX1NUQVRVU1BHUk8pCi0jZGVmaW5lIEdfRldfUklfUkVTX1dSX1NUQVRVU1BHUk8oeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfUkVTX1dSX1NUQVRVU1BHUk8pICYgTV9GV19SSV9SRVNfV1JfU1RBVFVTUEdSTykKLSNkZWZpbmUgRl9GV19SSV9SRVNfV1JfU1RBVFVTUEdSTwlWX0ZXX1JJX1JFU19XUl9TVEFUVVNQR1JPKDFVKQorI2RlZmluZSBGV19SSV9SRVNfV1JfU1RBVFVTUEdST19TCTI0CisjZGVmaW5lIEZXX1JJX1JFU19XUl9TVEFUVVNQR1JPX00JMHgxCisjZGVmaW5lIEZXX1JJX1JFU19XUl9TVEFUVVNQR1JPX1YoeCkJKCh4KSA8PCBGV19SSV9SRVNfV1JfU1RBVFVTUEdST19TKQorI2RlZmluZSBGV19SSV9SRVNfV1JfU1RBVFVTUEdST19HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9SRVNfV1JfU1RBVFVTUEdST19TKSAmIEZXX1JJX1JFU19XUl9TVEFUVVNQR1JPX00pCisjZGVmaW5lIEZXX1JJX1JFU19XUl9TVEFUVVNQR1JPX0YJRldfUklfUkVTX1dSX1NUQVRVU1BHUk9fVigxVSkKIAotI2RlZmluZSBTX0ZXX1JJX1JFU19XUl9GRVRDSE5TCQkyMwotI2RlZmluZSBNX0ZXX1JJX1JFU19XUl9GRVRDSE5TCQkweDEKLSNkZWZpbmUgVl9GV19SSV9SRVNfV1JfRkVUQ0hOUyh4KQkoKHgpIDw8IFNfRldfUklfUkVTX1dSX0ZFVENITlMpCi0jZGVmaW5lIEdfRldfUklfUkVTX1dSX0ZFVENITlMoeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfUkVTX1dSX0ZFVENITlMpICYgTV9GV19SSV9SRVNfV1JfRkVUQ0hOUykKLSNkZWZpbmUgRl9GV19SSV9SRVNfV1JfRkVUQ0hOUwlWX0ZXX1JJX1JFU19XUl9GRVRDSE5TKDFVKQorI2RlZmluZSBGV19SSV9SRVNfV1JfRkVUQ0hOU19TCQkyMworI2RlZmluZSBGV19SSV9SRVNfV1JfRkVUQ0hOU19NCQkweDEKKyNkZWZpbmUgRldfUklfUkVTX1dSX0ZFVENITlNfVih4KQkoKHgpIDw8IEZXX1JJX1JFU19XUl9GRVRDSE5TX1MpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9GRVRDSE5TX0coeCkJXAorCSgoKHgpID4+IEZXX1JJX1JFU19XUl9GRVRDSE5TX1MpICYgRldfUklfUkVTX1dSX0ZFVENITlNfTSkKKyNkZWZpbmUgRldfUklfUkVTX1dSX0ZFVENITlNfRglGV19SSV9SRVNfV1JfRkVUQ0hOU19WKDFVKQogCi0jZGVmaW5lIFNfRldfUklfUkVTX1dSX0ZFVENIUk8JCTIyCi0jZGVmaW5lIE1fRldfUklfUkVTX1dSX0ZFVENIUk8JCTB4MQotI2RlZmluZSBWX0ZXX1JJX1JFU19XUl9GRVRDSFJPKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfRkVUQ0hSTykKLSNkZWZpbmUgR19GV19SSV9SRVNfV1JfRkVUQ0hSTyh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9SRVNfV1JfRkVUQ0hSTykgJiBNX0ZXX1JJX1JFU19XUl9GRVRDSFJPKQotI2RlZmluZSBGX0ZXX1JJX1JFU19XUl9GRVRDSFJPCVZfRldfUklfUkVTX1dSX0ZFVENIUk8oMVUpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9GRVRDSFJPX1MJCTIyCisjZGVmaW5lIEZXX1JJX1JFU19XUl9GRVRDSFJPX00JCTB4MQorI2RlZmluZSBGV19SSV9SRVNfV1JfRkVUQ0hST19WKHgpCSgoeCkgPDwgRldfUklfUkVTX1dSX0ZFVENIUk9fUykKKyNkZWZpbmUgRldfUklfUkVTX1dSX0ZFVENIUk9fRyh4KQlcCisJKCgoeCkgPj4gRldfUklfUkVTX1dSX0ZFVENIUk9fUykgJiBGV19SSV9SRVNfV1JfRkVUQ0hST19NKQorI2RlZmluZSBGV19SSV9SRVNfV1JfRkVUQ0hST19GCUZXX1JJX1JFU19XUl9GRVRDSFJPX1YoMVUpCiAKLSNkZWZpbmUgU19GV19SSV9SRVNfV1JfSE9TVEZDTU9ERQkyMAotI2RlZmluZSBNX0ZXX1JJX1JFU19XUl9IT1NURkNNT0RFCTB4MwotI2RlZmluZSBWX0ZXX1JJX1JFU19XUl9IT1NURkNNT0RFKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfSE9TVEZDTU9ERSkKLSNkZWZpbmUgR19GV19SSV9SRVNfV1JfSE9TVEZDTU9ERSh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9SRVNfV1JfSE9TVEZDTU9ERSkgJiBNX0ZXX1JJX1JFU19XUl9IT1NURkNNT0RFKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSE9TVEZDTU9ERV9TCTIwCisjZGVmaW5lIEZXX1JJX1JFU19XUl9IT1NURkNNT0RFX00JMHgzCisjZGVmaW5lIEZXX1JJX1JFU19XUl9IT1NURkNNT0RFX1YoeCkJKCh4KSA8PCBGV19SSV9SRVNfV1JfSE9TVEZDTU9ERV9TKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSE9TVEZDTU9ERV9HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9SRVNfV1JfSE9TVEZDTU9ERV9TKSAmIEZXX1JJX1JFU19XUl9IT1NURkNNT0RFX00pCiAKLSNkZWZpbmUgU19GV19SSV9SRVNfV1JfQ1BSSU8JMTkKLSNkZWZpbmUgTV9GV19SSV9SRVNfV1JfQ1BSSU8JMHgxCi0jZGVmaW5lIFZfRldfUklfUkVTX1dSX0NQUklPKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfQ1BSSU8pCi0jZGVmaW5lIEdfRldfUklfUkVTX1dSX0NQUklPKHgpCVwKLSAgICAoKCh4KSA+PiBTX0ZXX1JJX1JFU19XUl9DUFJJTykgJiBNX0ZXX1JJX1JFU19XUl9DUFJJTykKLSNkZWZpbmUgRl9GV19SSV9SRVNfV1JfQ1BSSU8JVl9GV19SSV9SRVNfV1JfQ1BSSU8oMVUpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9DUFJJT19TCTE5CisjZGVmaW5lIEZXX1JJX1JFU19XUl9DUFJJT19NCTB4MQorI2RlZmluZSBGV19SSV9SRVNfV1JfQ1BSSU9fVih4KQkoKHgpIDw8IEZXX1JJX1JFU19XUl9DUFJJT19TKQorI2RlZmluZSBGV19SSV9SRVNfV1JfQ1BSSU9fRyh4KQlcCisJKCgoeCkgPj4gRldfUklfUkVTX1dSX0NQUklPX1MpICYgRldfUklfUkVTX1dSX0NQUklPX00pCisjZGVmaW5lIEZXX1JJX1JFU19XUl9DUFJJT19GCUZXX1JJX1JFU19XUl9DUFJJT19WKDFVKQogCi0jZGVmaW5lIFNfRldfUklfUkVTX1dSX09OQ0hJUAkJMTgKLSNkZWZpbmUgTV9GV19SSV9SRVNfV1JfT05DSElQCQkweDEKLSNkZWZpbmUgVl9GV19SSV9SRVNfV1JfT05DSElQKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfT05DSElQKQotI2RlZmluZSBHX0ZXX1JJX1JFU19XUl9PTkNISVAoeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfUkVTX1dSX09OQ0hJUCkgJiBNX0ZXX1JJX1JFU19XUl9PTkNISVApCi0jZGVmaW5lIEZfRldfUklfUkVTX1dSX09OQ0hJUAlWX0ZXX1JJX1JFU19XUl9PTkNISVAoMVUpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9PTkNISVBfUwkJMTgKKyNkZWZpbmUgRldfUklfUkVTX1dSX09OQ0hJUF9NCQkweDEKKyNkZWZpbmUgRldfUklfUkVTX1dSX09OQ0hJUF9WKHgpCSgoeCkgPDwgRldfUklfUkVTX1dSX09OQ0hJUF9TKQorI2RlZmluZSBGV19SSV9SRVNfV1JfT05DSElQX0coeCkJXAorCSgoKHgpID4+IEZXX1JJX1JFU19XUl9PTkNISVBfUykgJiBGV19SSV9SRVNfV1JfT05DSElQX00pCisjZGVmaW5lIEZXX1JJX1JFU19XUl9PTkNISVBfRglGV19SSV9SRVNfV1JfT05DSElQX1YoMVUpCiAKLSNkZWZpbmUgU19GV19SSV9SRVNfV1JfUENJRUNITgkJMTYKLSNkZWZpbmUgTV9GV19SSV9SRVNfV1JfUENJRUNITgkJMHgzCi0jZGVmaW5lIFZfRldfUklfUkVTX1dSX1BDSUVDSE4oeCkJKCh4KSA8PCBTX0ZXX1JJX1JFU19XUl9QQ0lFQ0hOKQotI2RlZmluZSBHX0ZXX1JJX1JFU19XUl9QQ0lFQ0hOKHgpCVwKLSAgICAoKCh4KSA+PiBTX0ZXX1JJX1JFU19XUl9QQ0lFQ0hOKSAmIE1fRldfUklfUkVTX1dSX1BDSUVDSE4pCisjZGVmaW5lIEZXX1JJX1JFU19XUl9QQ0lFQ0hOX1MJCTE2CisjZGVmaW5lIEZXX1JJX1JFU19XUl9QQ0lFQ0hOX00JCTB4MworI2RlZmluZSBGV19SSV9SRVNfV1JfUENJRUNITl9WKHgpCSgoeCkgPDwgRldfUklfUkVTX1dSX1BDSUVDSE5fUykKKyNkZWZpbmUgRldfUklfUkVTX1dSX1BDSUVDSE5fRyh4KQlcCisJKCgoeCkgPj4gRldfUklfUkVTX1dSX1BDSUVDSE5fUykgJiBGV19SSV9SRVNfV1JfUENJRUNITl9NKQogCi0jZGVmaW5lIFNfRldfUklfUkVTX1dSX0lRSUQJMAotI2RlZmluZSBNX0ZXX1JJX1JFU19XUl9JUUlECTB4ZmZmZgotI2RlZmluZSBWX0ZXX1JJX1JFU19XUl9JUUlEKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfSVFJRCkKLSNkZWZpbmUgR19GV19SSV9SRVNfV1JfSVFJRCh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9SRVNfV1JfSVFJRCkgJiBNX0ZXX1JJX1JFU19XUl9JUUlEKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFJRF9TCTAKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRSURfTQkweGZmZmYKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRSURfVih4KQkoKHgpIDw8IEZXX1JJX1JFU19XUl9JUUlEX1MpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUlEX0coeCkJXAorCSgoKHgpID4+IEZXX1JJX1JFU19XUl9JUUlEX1MpICYgRldfUklfUkVTX1dSX0lRSURfTSkKIAotI2RlZmluZSBTX0ZXX1JJX1JFU19XUl9EQ0FFTgkzMQotI2RlZmluZSBNX0ZXX1JJX1JFU19XUl9EQ0FFTgkweDEKLSNkZWZpbmUgVl9GV19SSV9SRVNfV1JfRENBRU4oeCkJKCh4KSA8PCBTX0ZXX1JJX1JFU19XUl9EQ0FFTikKLSNkZWZpbmUgR19GV19SSV9SRVNfV1JfRENBRU4oeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfUkVTX1dSX0RDQUVOKSAmIE1fRldfUklfUkVTX1dSX0RDQUVOKQotI2RlZmluZSBGX0ZXX1JJX1JFU19XUl9EQ0FFTglWX0ZXX1JJX1JFU19XUl9EQ0FFTigxVSkKKyNkZWZpbmUgRldfUklfUkVTX1dSX0RDQUVOX1MJMzEKKyNkZWZpbmUgRldfUklfUkVTX1dSX0RDQUVOX00JMHgxCisjZGVmaW5lIEZXX1JJX1JFU19XUl9EQ0FFTl9WKHgpCSgoeCkgPDwgRldfUklfUkVTX1dSX0RDQUVOX1MpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9EQ0FFTl9HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9SRVNfV1JfRENBRU5fUykgJiBGV19SSV9SRVNfV1JfRENBRU5fTSkKKyNkZWZpbmUgRldfUklfUkVTX1dSX0RDQUVOX0YJRldfUklfUkVTX1dSX0RDQUVOX1YoMVUpCiAKLSNkZWZpbmUgU19GV19SSV9SRVNfV1JfRENBQ1BVCQkyNgotI2RlZmluZSBNX0ZXX1JJX1JFU19XUl9EQ0FDUFUJCTB4MWYKLSNkZWZpbmUgVl9GV19SSV9SRVNfV1JfRENBQ1BVKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfRENBQ1BVKQotI2RlZmluZSBHX0ZXX1JJX1JFU19XUl9EQ0FDUFUoeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfUkVTX1dSX0RDQUNQVSkgJiBNX0ZXX1JJX1JFU19XUl9EQ0FDUFUpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9EQ0FDUFVfUwkJMjYKKyNkZWZpbmUgRldfUklfUkVTX1dSX0RDQUNQVV9NCQkweDFmCisjZGVmaW5lIEZXX1JJX1JFU19XUl9EQ0FDUFVfVih4KQkoKHgpIDw8IEZXX1JJX1JFU19XUl9EQ0FDUFVfUykKKyNkZWZpbmUgRldfUklfUkVTX1dSX0RDQUNQVV9HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9SRVNfV1JfRENBQ1BVX1MpICYgRldfUklfUkVTX1dSX0RDQUNQVV9NKQogCi0jZGVmaW5lIFNfRldfUklfUkVTX1dSX0ZCTUlOCTIzCi0jZGVmaW5lIE1fRldfUklfUkVTX1dSX0ZCTUlOCTB4NwotI2RlZmluZSBWX0ZXX1JJX1JFU19XUl9GQk1JTih4KQkoKHgpIDw8IFNfRldfUklfUkVTX1dSX0ZCTUlOKQotI2RlZmluZSBHX0ZXX1JJX1JFU19XUl9GQk1JTih4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9SRVNfV1JfRkJNSU4pICYgTV9GV19SSV9SRVNfV1JfRkJNSU4pCisjZGVmaW5lIEZXX1JJX1JFU19XUl9GQk1JTl9TCTIzCisjZGVmaW5lIEZXX1JJX1JFU19XUl9GQk1JTl9NCTB4NworI2RlZmluZSBGV19SSV9SRVNfV1JfRkJNSU5fVih4KQkoKHgpIDw8IEZXX1JJX1JFU19XUl9GQk1JTl9TKQorI2RlZmluZSBGV19SSV9SRVNfV1JfRkJNSU5fRyh4KQlcCisJKCgoeCkgPj4gRldfUklfUkVTX1dSX0ZCTUlOX1MpICYgRldfUklfUkVTX1dSX0ZCTUlOX00pCiAKLSNkZWZpbmUgU19GV19SSV9SRVNfV1JfRkJNQVgJMjAKLSNkZWZpbmUgTV9GV19SSV9SRVNfV1JfRkJNQVgJMHg3Ci0jZGVmaW5lIFZfRldfUklfUkVTX1dSX0ZCTUFYKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfRkJNQVgpCi0jZGVmaW5lIEdfRldfUklfUkVTX1dSX0ZCTUFYKHgpCVwKLSAgICAoKCh4KSA+PiBTX0ZXX1JJX1JFU19XUl9GQk1BWCkgJiBNX0ZXX1JJX1JFU19XUl9GQk1BWCkKKyNkZWZpbmUgRldfUklfUkVTX1dSX0ZCTUFYX1MJMjAKKyNkZWZpbmUgRldfUklfUkVTX1dSX0ZCTUFYX00JMHg3CisjZGVmaW5lIEZXX1JJX1JFU19XUl9GQk1BWF9WKHgpCSgoeCkgPDwgRldfUklfUkVTX1dSX0ZCTUFYX1MpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9GQk1BWF9HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9SRVNfV1JfRkJNQVhfUykgJiBGV19SSV9SRVNfV1JfRkJNQVhfTSkKIAotI2RlZmluZSBTX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSE8JMTkKLSNkZWZpbmUgTV9GV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0hPCTB4MQotI2RlZmluZSBWX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSE8oeCkJKCh4KSA8PCBTX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSE8pCi0jZGVmaW5lIEdfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNITyh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0hPKSAmIE1fRldfUklfUkVTX1dSX0NJRFhGVEhSRVNITykKLSNkZWZpbmUgRl9GV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0hPCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNITygxVSkKKyNkZWZpbmUgRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIT19TCTE5CisjZGVmaW5lIEZXX1JJX1JFU19XUl9DSURYRlRIUkVTSE9fTQkweDEKKyNkZWZpbmUgRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIT19WKHgpCSgoeCkgPDwgRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIT19TKQorI2RlZmluZSBGV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0hPX0coeCkJXAorCSgoKHgpID4+IEZXX1JJX1JFU19XUl9DSURYRlRIUkVTSE9fUykgJiBGV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0hPX00pCisjZGVmaW5lIEZXX1JJX1JFU19XUl9DSURYRlRIUkVTSE9fRglGV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0hPX1YoMVUpCiAKLSNkZWZpbmUgU19GV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0gJMTYKLSNkZWZpbmUgTV9GV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0gJMHg3Ci0jZGVmaW5lIFZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0gpCi0jZGVmaW5lIEdfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIKHgpCVwKLSAgICAoKCh4KSA+PiBTX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSCkgJiBNX0ZXX1JJX1JFU19XUl9DSURYRlRIUkVTSCkKKyNkZWZpbmUgRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIX1MJMTYKKyNkZWZpbmUgRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIX00JMHg3CisjZGVmaW5lIEZXX1JJX1JFU19XUl9DSURYRlRIUkVTSF9WKHgpCSgoeCkgPDwgRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIX1MpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9DSURYRlRIUkVTSF9HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0hfUykgJiBGV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0hfTSkKIAotI2RlZmluZSBTX0ZXX1JJX1JFU19XUl9FUVNJWkUJCTAKLSNkZWZpbmUgTV9GV19SSV9SRVNfV1JfRVFTSVpFCQkweGZmZmYKLSNkZWZpbmUgVl9GV19SSV9SRVNfV1JfRVFTSVpFKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfRVFTSVpFKQotI2RlZmluZSBHX0ZXX1JJX1JFU19XUl9FUVNJWkUoeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfUkVTX1dSX0VRU0laRSkgJiBNX0ZXX1JJX1JFU19XUl9FUVNJWkUpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9FUVNJWkVfUwkJMAorI2RlZmluZSBGV19SSV9SRVNfV1JfRVFTSVpFX00JCTB4ZmZmZgorI2RlZmluZSBGV19SSV9SRVNfV1JfRVFTSVpFX1YoeCkJKCh4KSA8PCBGV19SSV9SRVNfV1JfRVFTSVpFX1MpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9FUVNJWkVfRyh4KQlcCisJKCgoeCkgPj4gRldfUklfUkVTX1dSX0VRU0laRV9TKSAmIEZXX1JJX1JFU19XUl9FUVNJWkVfTSkKIAotI2RlZmluZSBTX0ZXX1JJX1JFU19XUl9JUUFORFNUCQkxNQotI2RlZmluZSBNX0ZXX1JJX1JFU19XUl9JUUFORFNUCQkweDEKLSNkZWZpbmUgVl9GV19SSV9SRVNfV1JfSVFBTkRTVCh4KQkoKHgpIDw8IFNfRldfUklfUkVTX1dSX0lRQU5EU1QpCi0jZGVmaW5lIEdfRldfUklfUkVTX1dSX0lRQU5EU1QoeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfUkVTX1dSX0lRQU5EU1QpICYgTV9GV19SSV9SRVNfV1JfSVFBTkRTVCkKLSNkZWZpbmUgRl9GV19SSV9SRVNfV1JfSVFBTkRTVAlWX0ZXX1JJX1JFU19XUl9JUUFORFNUKDFVKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFBTkRTVF9TCQkxNQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFBTkRTVF9NCQkweDEKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRQU5EU1RfVih4KQkoKHgpIDw8IEZXX1JJX1JFU19XUl9JUUFORFNUX1MpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUFORFNUX0coeCkJXAorCSgoKHgpID4+IEZXX1JJX1JFU19XUl9JUUFORFNUX1MpICYgRldfUklfUkVTX1dSX0lRQU5EU1RfTSkKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRQU5EU1RfRglGV19SSV9SRVNfV1JfSVFBTkRTVF9WKDFVKQogCi0jZGVmaW5lIFNfRldfUklfUkVTX1dSX0lRQU5VUwkJMTQKLSNkZWZpbmUgTV9GV19SSV9SRVNfV1JfSVFBTlVTCQkweDEKLSNkZWZpbmUgVl9GV19SSV9SRVNfV1JfSVFBTlVTKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfSVFBTlVTKQotI2RlZmluZSBHX0ZXX1JJX1JFU19XUl9JUUFOVVMoeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfUkVTX1dSX0lRQU5VUykgJiBNX0ZXX1JJX1JFU19XUl9JUUFOVVMpCi0jZGVmaW5lIEZfRldfUklfUkVTX1dSX0lRQU5VUwlWX0ZXX1JJX1JFU19XUl9JUUFOVVMoMVUpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUFOVVNfUwkJMTQKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRQU5VU19NCQkweDEKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRQU5VU19WKHgpCSgoeCkgPDwgRldfUklfUkVTX1dSX0lRQU5VU19TKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFBTlVTX0coeCkJXAorCSgoKHgpID4+IEZXX1JJX1JFU19XUl9JUUFOVVNfUykgJiBGV19SSV9SRVNfV1JfSVFBTlVTX00pCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUFOVVNfRglGV19SSV9SRVNfV1JfSVFBTlVTX1YoMVUpCiAKLSNkZWZpbmUgU19GV19SSV9SRVNfV1JfSVFBTlVECQkxMgotI2RlZmluZSBNX0ZXX1JJX1JFU19XUl9JUUFOVUQJCTB4MwotI2RlZmluZSBWX0ZXX1JJX1JFU19XUl9JUUFOVUQoeCkJKCh4KSA8PCBTX0ZXX1JJX1JFU19XUl9JUUFOVUQpCi0jZGVmaW5lIEdfRldfUklfUkVTX1dSX0lRQU5VRCh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9SRVNfV1JfSVFBTlVEKSAmIE1fRldfUklfUkVTX1dSX0lRQU5VRCkKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRQU5VRF9TCQkxMgorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFBTlVEX00JCTB4MworI2RlZmluZSBGV19SSV9SRVNfV1JfSVFBTlVEX1YoeCkJKCh4KSA8PCBGV19SSV9SRVNfV1JfSVFBTlVEX1MpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUFOVURfRyh4KQlcCisJKCgoeCkgPj4gRldfUklfUkVTX1dSX0lRQU5VRF9TKSAmIEZXX1JJX1JFU19XUl9JUUFOVURfTSkKIAotI2RlZmluZSBTX0ZXX1JJX1JFU19XUl9JUUFORFNUSU5ERVgJMAotI2RlZmluZSBNX0ZXX1JJX1JFU19XUl9JUUFORFNUSU5ERVgJMHhmZmYKLSNkZWZpbmUgVl9GV19SSV9SRVNfV1JfSVFBTkRTVElOREVYKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfSVFBTkRTVElOREVYKQotI2RlZmluZSBHX0ZXX1JJX1JFU19XUl9JUUFORFNUSU5ERVgoeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfUkVTX1dSX0lRQU5EU1RJTkRFWCkgJiBNX0ZXX1JJX1JFU19XUl9JUUFORFNUSU5ERVgpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUFORFNUSU5ERVhfUwkwCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUFORFNUSU5ERVhfTQkweGZmZgorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFBTkRTVElOREVYX1YoeCkJKCh4KSA8PCBGV19SSV9SRVNfV1JfSVFBTkRTVElOREVYX1MpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUFORFNUSU5ERVhfRyh4KQlcCisJKCgoeCkgPj4gRldfUklfUkVTX1dSX0lRQU5EU1RJTkRFWF9TKSAmIEZXX1JJX1JFU19XUl9JUUFORFNUSU5ERVhfTSkKIAotI2RlZmluZSBTX0ZXX1JJX1JFU19XUl9JUURST1BSU1MJMTUKLSNkZWZpbmUgTV9GV19SSV9SRVNfV1JfSVFEUk9QUlNTCTB4MQotI2RlZmluZSBWX0ZXX1JJX1JFU19XUl9JUURST1BSU1MoeCkJKCh4KSA8PCBTX0ZXX1JJX1JFU19XUl9JUURST1BSU1MpCi0jZGVmaW5lIEdfRldfUklfUkVTX1dSX0lRRFJPUFJTUyh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9SRVNfV1JfSVFEUk9QUlNTKSAmIE1fRldfUklfUkVTX1dSX0lRRFJPUFJTUykKLSNkZWZpbmUgRl9GV19SSV9SRVNfV1JfSVFEUk9QUlNTCVZfRldfUklfUkVTX1dSX0lRRFJPUFJTUygxVSkKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRRFJPUFJTU19TCTE1CisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUURST1BSU1NfTQkweDEKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRRFJPUFJTU19WKHgpCSgoeCkgPDwgRldfUklfUkVTX1dSX0lRRFJPUFJTU19TKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFEUk9QUlNTX0coeCkJXAorCSgoKHgpID4+IEZXX1JJX1JFU19XUl9JUURST1BSU1NfUykgJiBGV19SSV9SRVNfV1JfSVFEUk9QUlNTX00pCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUURST1BSU1NfRglGV19SSV9SRVNfV1JfSVFEUk9QUlNTX1YoMVUpCiAKLSNkZWZpbmUgU19GV19SSV9SRVNfV1JfSVFHVFNNT0RFCTE0Ci0jZGVmaW5lIE1fRldfUklfUkVTX1dSX0lRR1RTTU9ERQkweDEKLSNkZWZpbmUgVl9GV19SSV9SRVNfV1JfSVFHVFNNT0RFKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfSVFHVFNNT0RFKQotI2RlZmluZSBHX0ZXX1JJX1JFU19XUl9JUUdUU01PREUoeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfUkVTX1dSX0lRR1RTTU9ERSkgJiBNX0ZXX1JJX1JFU19XUl9JUUdUU01PREUpCi0jZGVmaW5lIEZfRldfUklfUkVTX1dSX0lRR1RTTU9ERQlWX0ZXX1JJX1JFU19XUl9JUUdUU01PREUoMVUpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUdUU01PREVfUwkxNAorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFHVFNNT0RFX00JMHgxCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUdUU01PREVfVih4KQkoKHgpIDw8IEZXX1JJX1JFU19XUl9JUUdUU01PREVfUykKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRR1RTTU9ERV9HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9SRVNfV1JfSVFHVFNNT0RFX1MpICYgRldfUklfUkVTX1dSX0lRR1RTTU9ERV9NKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFHVFNNT0RFX0YJRldfUklfUkVTX1dSX0lRR1RTTU9ERV9WKDFVKQogCi0jZGVmaW5lIFNfRldfUklfUkVTX1dSX0lRUENJRUNICQkxMgotI2RlZmluZSBNX0ZXX1JJX1JFU19XUl9JUVBDSUVDSAkJMHgzCi0jZGVmaW5lIFZfRldfUklfUkVTX1dSX0lRUENJRUNIKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfSVFQQ0lFQ0gpCi0jZGVmaW5lIEdfRldfUklfUkVTX1dSX0lRUENJRUNIKHgpCVwKLSAgICAoKCh4KSA+PiBTX0ZXX1JJX1JFU19XUl9JUVBDSUVDSCkgJiBNX0ZXX1JJX1JFU19XUl9JUVBDSUVDSCkKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRUENJRUNIX1MJCTEyCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUVBDSUVDSF9NCQkweDMKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRUENJRUNIX1YoeCkJKCh4KSA8PCBGV19SSV9SRVNfV1JfSVFQQ0lFQ0hfUykKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRUENJRUNIX0coeCkJXAorCSgoKHgpID4+IEZXX1JJX1JFU19XUl9JUVBDSUVDSF9TKSAmIEZXX1JJX1JFU19XUl9JUVBDSUVDSF9NKQogCi0jZGVmaW5lIFNfRldfUklfUkVTX1dSX0lRRENBRU4JCTExCi0jZGVmaW5lIE1fRldfUklfUkVTX1dSX0lRRENBRU4JCTB4MQotI2RlZmluZSBWX0ZXX1JJX1JFU19XUl9JUURDQUVOKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfSVFEQ0FFTikKLSNkZWZpbmUgR19GV19SSV9SRVNfV1JfSVFEQ0FFTih4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9SRVNfV1JfSVFEQ0FFTikgJiBNX0ZXX1JJX1JFU19XUl9JUURDQUVOKQotI2RlZmluZSBGX0ZXX1JJX1JFU19XUl9JUURDQUVOCVZfRldfUklfUkVTX1dSX0lRRENBRU4oMVUpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUURDQUVOX1MJCTExCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUURDQUVOX00JCTB4MQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFEQ0FFTl9WKHgpCSgoeCkgPDwgRldfUklfUkVTX1dSX0lRRENBRU5fUykKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRRENBRU5fRyh4KQlcCisJKCgoeCkgPj4gRldfUklfUkVTX1dSX0lRRENBRU5fUykgJiBGV19SSV9SRVNfV1JfSVFEQ0FFTl9NKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFEQ0FFTl9GCUZXX1JJX1JFU19XUl9JUURDQUVOX1YoMVUpCiAKLSNkZWZpbmUgU19GV19SSV9SRVNfV1JfSVFEQ0FDUFUJCTYKLSNkZWZpbmUgTV9GV19SSV9SRVNfV1JfSVFEQ0FDUFUJCTB4MWYKLSNkZWZpbmUgVl9GV19SSV9SRVNfV1JfSVFEQ0FDUFUoeCkJKCh4KSA8PCBTX0ZXX1JJX1JFU19XUl9JUURDQUNQVSkKLSNkZWZpbmUgR19GV19SSV9SRVNfV1JfSVFEQ0FDUFUoeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfUkVTX1dSX0lRRENBQ1BVKSAmIE1fRldfUklfUkVTX1dSX0lRRENBQ1BVKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFEQ0FDUFVfUwkJNgorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFEQ0FDUFVfTQkJMHgxZgorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFEQ0FDUFVfVih4KQkoKHgpIDw8IEZXX1JJX1JFU19XUl9JUURDQUNQVV9TKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFEQ0FDUFVfRyh4KQlcCisJKCgoeCkgPj4gRldfUklfUkVTX1dSX0lRRENBQ1BVX1MpICYgRldfUklfUkVTX1dSX0lRRENBQ1BVX00pCiAKLSNkZWZpbmUgU19GV19SSV9SRVNfV1JfSVFJTlRDTlRUSFJFU0gJCTQKLSNkZWZpbmUgTV9GV19SSV9SRVNfV1JfSVFJTlRDTlRUSFJFU0gJCTB4MwotI2RlZmluZSBWX0ZXX1JJX1JFU19XUl9JUUlOVENOVFRIUkVTSCh4KQlcCi0gICAgKCh4KSA8PCBTX0ZXX1JJX1JFU19XUl9JUUlOVENOVFRIUkVTSCkKLSNkZWZpbmUgR19GV19SSV9SRVNfV1JfSVFJTlRDTlRUSFJFU0goeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfUkVTX1dSX0lRSU5UQ05UVEhSRVNIKSAmIE1fRldfUklfUkVTX1dSX0lRSU5UQ05UVEhSRVNIKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFJTlRDTlRUSFJFU0hfUwkJNAorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFJTlRDTlRUSFJFU0hfTQkJMHgzCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUlOVENOVFRIUkVTSF9WKHgpCVwKKwkoKHgpIDw8IEZXX1JJX1JFU19XUl9JUUlOVENOVFRIUkVTSF9TKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFJTlRDTlRUSFJFU0hfRyh4KQlcCisJKCgoeCkgPj4gRldfUklfUkVTX1dSX0lRSU5UQ05UVEhSRVNIX1MpICYgRldfUklfUkVTX1dSX0lRSU5UQ05UVEhSRVNIX00pCiAKLSNkZWZpbmUgU19GV19SSV9SRVNfV1JfSVFPCTMKLSNkZWZpbmUgTV9GV19SSV9SRVNfV1JfSVFPCTB4MQotI2RlZmluZSBWX0ZXX1JJX1JFU19XUl9JUU8oeCkJKCh4KSA8PCBTX0ZXX1JJX1JFU19XUl9JUU8pCi0jZGVmaW5lIEdfRldfUklfUkVTX1dSX0lRTyh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9SRVNfV1JfSVFPKSAmIE1fRldfUklfUkVTX1dSX0lRTykKLSNkZWZpbmUgRl9GV19SSV9SRVNfV1JfSVFPCVZfRldfUklfUkVTX1dSX0lRTygxVSkKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRT19TCTMKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRT19NCTB4MQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFPX1YoeCkJKCh4KSA8PCBGV19SSV9SRVNfV1JfSVFPX1MpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUU9fRyh4KQlcCisJKCgoeCkgPj4gRldfUklfUkVTX1dSX0lRT19TKSAmIEZXX1JJX1JFU19XUl9JUU9fTSkKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRT19GCUZXX1JJX1JFU19XUl9JUU9fVigxVSkKIAotI2RlZmluZSBTX0ZXX1JJX1JFU19XUl9JUUNQUklPCQkyCi0jZGVmaW5lIE1fRldfUklfUkVTX1dSX0lRQ1BSSU8JCTB4MQotI2RlZmluZSBWX0ZXX1JJX1JFU19XUl9JUUNQUklPKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfSVFDUFJJTykKLSNkZWZpbmUgR19GV19SSV9SRVNfV1JfSVFDUFJJTyh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9SRVNfV1JfSVFDUFJJTykgJiBNX0ZXX1JJX1JFU19XUl9JUUNQUklPKQotI2RlZmluZSBGX0ZXX1JJX1JFU19XUl9JUUNQUklPCVZfRldfUklfUkVTX1dSX0lRQ1BSSU8oMVUpCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUNQUklPX1MJCTIKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRQ1BSSU9fTQkJMHgxCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUNQUklPX1YoeCkJKCh4KSA8PCBGV19SSV9SRVNfV1JfSVFDUFJJT19TKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFDUFJJT19HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9SRVNfV1JfSVFDUFJJT19TKSAmIEZXX1JJX1JFU19XUl9JUUNQUklPX00pCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUNQUklPX0YJRldfUklfUkVTX1dSX0lRQ1BSSU9fVigxVSkKIAotI2RlZmluZSBTX0ZXX1JJX1JFU19XUl9JUUVTSVpFCQkwCi0jZGVmaW5lIE1fRldfUklfUkVTX1dSX0lRRVNJWkUJCTB4MwotI2RlZmluZSBWX0ZXX1JJX1JFU19XUl9JUUVTSVpFKHgpCSgoeCkgPDwgU19GV19SSV9SRVNfV1JfSVFFU0laRSkKLSNkZWZpbmUgR19GV19SSV9SRVNfV1JfSVFFU0laRSh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9SRVNfV1JfSVFFU0laRSkgJiBNX0ZXX1JJX1JFU19XUl9JUUVTSVpFKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFFU0laRV9TCQkwCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUUVTSVpFX00JCTB4MworI2RlZmluZSBGV19SSV9SRVNfV1JfSVFFU0laRV9WKHgpCSgoeCkgPDwgRldfUklfUkVTX1dSX0lRRVNJWkVfUykKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRRVNJWkVfRyh4KQlcCisJKCgoeCkgPj4gRldfUklfUkVTX1dSX0lRRVNJWkVfUykgJiBGV19SSV9SRVNfV1JfSVFFU0laRV9NKQogCi0jZGVmaW5lIFNfRldfUklfUkVTX1dSX0lRTlMJMzEKLSNkZWZpbmUgTV9GV19SSV9SRVNfV1JfSVFOUwkweDEKLSNkZWZpbmUgVl9GV19SSV9SRVNfV1JfSVFOUyh4KQkoKHgpIDw8IFNfRldfUklfUkVTX1dSX0lRTlMpCi0jZGVmaW5lIEdfRldfUklfUkVTX1dSX0lRTlMoeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfUkVTX1dSX0lRTlMpICYgTV9GV19SSV9SRVNfV1JfSVFOUykKLSNkZWZpbmUgRl9GV19SSV9SRVNfV1JfSVFOUwlWX0ZXX1JJX1JFU19XUl9JUU5TKDFVKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFOU19TCTMxCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUU5TX00JMHgxCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUU5TX1YoeCkJKCh4KSA8PCBGV19SSV9SRVNfV1JfSVFOU19TKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFOU19HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9SRVNfV1JfSVFOU19TKSAmIEZXX1JJX1JFU19XUl9JUU5TX00pCisjZGVmaW5lIEZXX1JJX1JFU19XUl9JUU5TX0YJRldfUklfUkVTX1dSX0lRTlNfVigxVSkKIAotI2RlZmluZSBTX0ZXX1JJX1JFU19XUl9JUVJPCTMwCi0jZGVmaW5lIE1fRldfUklfUkVTX1dSX0lRUk8JMHgxCi0jZGVmaW5lIFZfRldfUklfUkVTX1dSX0lRUk8oeCkJKCh4KSA8PCBTX0ZXX1JJX1JFU19XUl9JUVJPKQotI2RlZmluZSBHX0ZXX1JJX1JFU19XUl9JUVJPKHgpCVwKLSAgICAoKCh4KSA+PiBTX0ZXX1JJX1JFU19XUl9JUVJPKSAmIE1fRldfUklfUkVTX1dSX0lRUk8pCi0jZGVmaW5lIEZfRldfUklfUkVTX1dSX0lRUk8JVl9GV19SSV9SRVNfV1JfSVFSTygxVSkKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRUk9fUwkzMAorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFST19NCTB4MQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFST19WKHgpCSgoeCkgPDwgRldfUklfUkVTX1dSX0lRUk9fUykKKyNkZWZpbmUgRldfUklfUkVTX1dSX0lRUk9fRyh4KQlcCisJKCgoeCkgPj4gRldfUklfUkVTX1dSX0lRUk9fUykgJiBGV19SSV9SRVNfV1JfSVFST19NKQorI2RlZmluZSBGV19SSV9SRVNfV1JfSVFST19GCUZXX1JJX1JFU19XUl9JUVJPX1YoMVUpCiAKIHN0cnVjdCBmd19yaV9yZG1hX3dyaXRlX3dyIHsKIAlfX3U4ICAgb3Bjb2RlOwpAQCAtNTYyLDExICs1NjIsMTEgQEAKICNlbmRpZgogfTsKIAotI2RlZmluZSBTX0ZXX1JJX1NFTkRfV1JfU0VORE9QCQkwCi0jZGVmaW5lIE1fRldfUklfU0VORF9XUl9TRU5ET1AJCTB4ZgotI2RlZmluZSBWX0ZXX1JJX1NFTkRfV1JfU0VORE9QKHgpCSgoeCkgPDwgU19GV19SSV9TRU5EX1dSX1NFTkRPUCkKLSNkZWZpbmUgR19GV19SSV9TRU5EX1dSX1NFTkRPUCh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9TRU5EX1dSX1NFTkRPUCkgJiBNX0ZXX1JJX1NFTkRfV1JfU0VORE9QKQorI2RlZmluZSBGV19SSV9TRU5EX1dSX1NFTkRPUF9TCQkwCisjZGVmaW5lIEZXX1JJX1NFTkRfV1JfU0VORE9QX00JCTB4ZgorI2RlZmluZSBGV19SSV9TRU5EX1dSX1NFTkRPUF9WKHgpCSgoeCkgPDwgRldfUklfU0VORF9XUl9TRU5ET1BfUykKKyNkZWZpbmUgRldfUklfU0VORF9XUl9TRU5ET1BfRyh4KQlcCisJKCgoeCkgPj4gRldfUklfU0VORF9XUl9TRU5ET1BfUykgJiBGV19SSV9TRU5EX1dSX1NFTkRPUF9NKQogCiBzdHJ1Y3QgZndfcmlfcmRtYV9yZWFkX3dyIHsKIAlfX3U4ICAgb3Bjb2RlOwpAQCAtNjEyLDI1ICs2MTIsMjUgQEAKIAlfX2JlNjQgcjQ7CiB9OwogCi0jZGVmaW5lIFNfRldfUklfQklORF9NV19XUl9RUEJJTkRFCTYKLSNkZWZpbmUgTV9GV19SSV9CSU5EX01XX1dSX1FQQklOREUJMHgxCi0jZGVmaW5lIFZfRldfUklfQklORF9NV19XUl9RUEJJTkRFKHgpCSgoeCkgPDwgU19GV19SSV9CSU5EX01XX1dSX1FQQklOREUpCi0jZGVmaW5lIEdfRldfUklfQklORF9NV19XUl9RUEJJTkRFKHgpCVwKLSAgICAoKCh4KSA+PiBTX0ZXX1JJX0JJTkRfTVdfV1JfUVBCSU5ERSkgJiBNX0ZXX1JJX0JJTkRfTVdfV1JfUVBCSU5ERSkKLSNkZWZpbmUgRl9GV19SSV9CSU5EX01XX1dSX1FQQklOREUJVl9GV19SSV9CSU5EX01XX1dSX1FQQklOREUoMVUpCisjZGVmaW5lIEZXX1JJX0JJTkRfTVdfV1JfUVBCSU5ERV9TCTYKKyNkZWZpbmUgRldfUklfQklORF9NV19XUl9RUEJJTkRFX00JMHgxCisjZGVmaW5lIEZXX1JJX0JJTkRfTVdfV1JfUVBCSU5ERV9WKHgpCSgoeCkgPDwgRldfUklfQklORF9NV19XUl9RUEJJTkRFX1MpCisjZGVmaW5lIEZXX1JJX0JJTkRfTVdfV1JfUVBCSU5ERV9HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9CSU5EX01XX1dSX1FQQklOREVfUykgJiBGV19SSV9CSU5EX01XX1dSX1FQQklOREVfTSkKKyNkZWZpbmUgRldfUklfQklORF9NV19XUl9RUEJJTkRFX0YJRldfUklfQklORF9NV19XUl9RUEJJTkRFX1YoMVUpCiAKLSNkZWZpbmUgU19GV19SSV9CSU5EX01XX1dSX05TCQk1Ci0jZGVmaW5lIE1fRldfUklfQklORF9NV19XUl9OUwkJMHgxCi0jZGVmaW5lIFZfRldfUklfQklORF9NV19XUl9OUyh4KQkoKHgpIDw8IFNfRldfUklfQklORF9NV19XUl9OUykKLSNkZWZpbmUgR19GV19SSV9CSU5EX01XX1dSX05TKHgpCVwKLSAgICAoKCh4KSA+PiBTX0ZXX1JJX0JJTkRfTVdfV1JfTlMpICYgTV9GV19SSV9CSU5EX01XX1dSX05TKQotI2RlZmluZSBGX0ZXX1JJX0JJTkRfTVdfV1JfTlMJVl9GV19SSV9CSU5EX01XX1dSX05TKDFVKQorI2RlZmluZSBGV19SSV9CSU5EX01XX1dSX05TX1MJCTUKKyNkZWZpbmUgRldfUklfQklORF9NV19XUl9OU19NCQkweDEKKyNkZWZpbmUgRldfUklfQklORF9NV19XUl9OU19WKHgpCSgoeCkgPDwgRldfUklfQklORF9NV19XUl9OU19TKQorI2RlZmluZSBGV19SSV9CSU5EX01XX1dSX05TX0coeCkJXAorCSgoKHgpID4+IEZXX1JJX0JJTkRfTVdfV1JfTlNfUykgJiBGV19SSV9CSU5EX01XX1dSX05TX00pCisjZGVmaW5lIEZXX1JJX0JJTkRfTVdfV1JfTlNfRglGV19SSV9CSU5EX01XX1dSX05TX1YoMVUpCiAKLSNkZWZpbmUgU19GV19SSV9CSU5EX01XX1dSX0RDQUNQVQkwCi0jZGVmaW5lIE1fRldfUklfQklORF9NV19XUl9EQ0FDUFUJMHgxZgotI2RlZmluZSBWX0ZXX1JJX0JJTkRfTVdfV1JfRENBQ1BVKHgpCSgoeCkgPDwgU19GV19SSV9CSU5EX01XX1dSX0RDQUNQVSkKLSNkZWZpbmUgR19GV19SSV9CSU5EX01XX1dSX0RDQUNQVSh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9CSU5EX01XX1dSX0RDQUNQVSkgJiBNX0ZXX1JJX0JJTkRfTVdfV1JfRENBQ1BVKQorI2RlZmluZSBGV19SSV9CSU5EX01XX1dSX0RDQUNQVV9TCTAKKyNkZWZpbmUgRldfUklfQklORF9NV19XUl9EQ0FDUFVfTQkweDFmCisjZGVmaW5lIEZXX1JJX0JJTkRfTVdfV1JfRENBQ1BVX1YoeCkJKCh4KSA8PCBGV19SSV9CSU5EX01XX1dSX0RDQUNQVV9TKQorI2RlZmluZSBGV19SSV9CSU5EX01XX1dSX0RDQUNQVV9HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9CSU5EX01XX1dSX0RDQUNQVV9TKSAmIEZXX1JJX0JJTkRfTVdfV1JfRENBQ1BVX00pCiAKIHN0cnVjdCBmd19yaV9mcl9uc21yX3dyIHsKIAlfX3U4ICAgb3Bjb2RlOwpAQCAtNjQ5LDI1ICs2NDksMjUgQEAKIAlfX2JlMzIgdmFfbG9fZmJvOwogfTsKIAotI2RlZmluZSBTX0ZXX1JJX0ZSX05TTVJfV1JfUVBCSU5ERQk2Ci0jZGVmaW5lIE1fRldfUklfRlJfTlNNUl9XUl9RUEJJTkRFCTB4MQotI2RlZmluZSBWX0ZXX1JJX0ZSX05TTVJfV1JfUVBCSU5ERSh4KQkoKHgpIDw8IFNfRldfUklfRlJfTlNNUl9XUl9RUEJJTkRFKQotI2RlZmluZSBHX0ZXX1JJX0ZSX05TTVJfV1JfUVBCSU5ERSh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9GUl9OU01SX1dSX1FQQklOREUpICYgTV9GV19SSV9GUl9OU01SX1dSX1FQQklOREUpCi0jZGVmaW5lIEZfRldfUklfRlJfTlNNUl9XUl9RUEJJTkRFCVZfRldfUklfRlJfTlNNUl9XUl9RUEJJTkRFKDFVKQorI2RlZmluZSBGV19SSV9GUl9OU01SX1dSX1FQQklOREVfUwk2CisjZGVmaW5lIEZXX1JJX0ZSX05TTVJfV1JfUVBCSU5ERV9NCTB4MQorI2RlZmluZSBGV19SSV9GUl9OU01SX1dSX1FQQklOREVfVih4KQkoKHgpIDw8IEZXX1JJX0ZSX05TTVJfV1JfUVBCSU5ERV9TKQorI2RlZmluZSBGV19SSV9GUl9OU01SX1dSX1FQQklOREVfRyh4KQlcCisJKCgoeCkgPj4gRldfUklfRlJfTlNNUl9XUl9RUEJJTkRFX1MpICYgRldfUklfRlJfTlNNUl9XUl9RUEJJTkRFX00pCisjZGVmaW5lIEZXX1JJX0ZSX05TTVJfV1JfUVBCSU5ERV9GCUZXX1JJX0ZSX05TTVJfV1JfUVBCSU5ERV9WKDFVKQogCi0jZGVmaW5lIFNfRldfUklfRlJfTlNNUl9XUl9OUwkJNQotI2RlZmluZSBNX0ZXX1JJX0ZSX05TTVJfV1JfTlMJCTB4MQotI2RlZmluZSBWX0ZXX1JJX0ZSX05TTVJfV1JfTlMoeCkJKCh4KSA8PCBTX0ZXX1JJX0ZSX05TTVJfV1JfTlMpCi0jZGVmaW5lIEdfRldfUklfRlJfTlNNUl9XUl9OUyh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9GUl9OU01SX1dSX05TKSAmIE1fRldfUklfRlJfTlNNUl9XUl9OUykKLSNkZWZpbmUgRl9GV19SSV9GUl9OU01SX1dSX05TCVZfRldfUklfRlJfTlNNUl9XUl9OUygxVSkKKyNkZWZpbmUgRldfUklfRlJfTlNNUl9XUl9OU19TCQk1CisjZGVmaW5lIEZXX1JJX0ZSX05TTVJfV1JfTlNfTQkJMHgxCisjZGVmaW5lIEZXX1JJX0ZSX05TTVJfV1JfTlNfVih4KQkoKHgpIDw8IEZXX1JJX0ZSX05TTVJfV1JfTlNfUykKKyNkZWZpbmUgRldfUklfRlJfTlNNUl9XUl9OU19HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9GUl9OU01SX1dSX05TX1MpICYgRldfUklfRlJfTlNNUl9XUl9OU19NKQorI2RlZmluZSBGV19SSV9GUl9OU01SX1dSX05TX0YJRldfUklfRlJfTlNNUl9XUl9OU19WKDFVKQogCi0jZGVmaW5lIFNfRldfUklfRlJfTlNNUl9XUl9EQ0FDUFUJMAotI2RlZmluZSBNX0ZXX1JJX0ZSX05TTVJfV1JfRENBQ1BVCTB4MWYKLSNkZWZpbmUgVl9GV19SSV9GUl9OU01SX1dSX0RDQUNQVSh4KQkoKHgpIDw8IFNfRldfUklfRlJfTlNNUl9XUl9EQ0FDUFUpCi0jZGVmaW5lIEdfRldfUklfRlJfTlNNUl9XUl9EQ0FDUFUoeCkJXAotICAgICgoKHgpID4+IFNfRldfUklfRlJfTlNNUl9XUl9EQ0FDUFUpICYgTV9GV19SSV9GUl9OU01SX1dSX0RDQUNQVSkKKyNkZWZpbmUgRldfUklfRlJfTlNNUl9XUl9EQ0FDUFVfUwkwCisjZGVmaW5lIEZXX1JJX0ZSX05TTVJfV1JfRENBQ1BVX00JMHgxZgorI2RlZmluZSBGV19SSV9GUl9OU01SX1dSX0RDQUNQVV9WKHgpCSgoeCkgPDwgRldfUklfRlJfTlNNUl9XUl9EQ0FDUFVfUykKKyNkZWZpbmUgRldfUklfRlJfTlNNUl9XUl9EQ0FDUFVfRyh4KQlcCisJKCgoeCkgPj4gRldfUklfRlJfTlNNUl9XUl9EQ0FDUFVfUykgJiBGV19SSV9GUl9OU01SX1dSX0RDQUNQVV9NKQogCiBzdHJ1Y3QgZndfcmlfaW52X2xzdGFnX3dyIHsKIAlfX3U4ICAgb3Bjb2RlOwpAQCAtNzQwLDE4ICs3NDAsMTggQEAKIAl9IHU7CiB9OwogCi0jZGVmaW5lIFNfRldfUklfV1JfTVBBUkVRQklUCTcKLSNkZWZpbmUgTV9GV19SSV9XUl9NUEFSRVFCSVQJMHgxCi0jZGVmaW5lIFZfRldfUklfV1JfTVBBUkVRQklUKHgpCSgoeCkgPDwgU19GV19SSV9XUl9NUEFSRVFCSVQpCi0jZGVmaW5lIEdfRldfUklfV1JfTVBBUkVRQklUKHgpCVwKLSAgICAoKCh4KSA+PiBTX0ZXX1JJX1dSX01QQVJFUUJJVCkgJiBNX0ZXX1JJX1dSX01QQVJFUUJJVCkKLSNkZWZpbmUgRl9GV19SSV9XUl9NUEFSRVFCSVQJVl9GV19SSV9XUl9NUEFSRVFCSVQoMVUpCisjZGVmaW5lIEZXX1JJX1dSX01QQVJFUUJJVF9TCTcKKyNkZWZpbmUgRldfUklfV1JfTVBBUkVRQklUX00JMHgxCisjZGVmaW5lIEZXX1JJX1dSX01QQVJFUUJJVF9WKHgpCSgoeCkgPDwgRldfUklfV1JfTVBBUkVRQklUX1MpCisjZGVmaW5lIEZXX1JJX1dSX01QQVJFUUJJVF9HKHgpCVwKKwkoKCh4KSA+PiBGV19SSV9XUl9NUEFSRVFCSVRfUykgJiBGV19SSV9XUl9NUEFSRVFCSVRfTSkKKyNkZWZpbmUgRldfUklfV1JfTVBBUkVRQklUX0YJRldfUklfV1JfTVBBUkVRQklUX1YoMVUpCiAKLSNkZWZpbmUgU19GV19SSV9XUl9QMlBUWVBFCTAKLSNkZWZpbmUgTV9GV19SSV9XUl9QMlBUWVBFCTB4ZgotI2RlZmluZSBWX0ZXX1JJX1dSX1AyUFRZUEUoeCkJKCh4KSA8PCBTX0ZXX1JJX1dSX1AyUFRZUEUpCi0jZGVmaW5lIEdfRldfUklfV1JfUDJQVFlQRSh4KQlcCi0gICAgKCgoeCkgPj4gU19GV19SSV9XUl9QMlBUWVBFKSAmIE1fRldfUklfV1JfUDJQVFlQRSkKKyNkZWZpbmUgRldfUklfV1JfUDJQVFlQRV9TCTAKKyNkZWZpbmUgRldfUklfV1JfUDJQVFlQRV9NCTB4ZgorI2RlZmluZSBGV19SSV9XUl9QMlBUWVBFX1YoeCkJKCh4KSA8PCBGV19SSV9XUl9QMlBUWVBFX1MpCisjZGVmaW5lIEZXX1JJX1dSX1AyUFRZUEVfRyh4KQlcCisJKCgoeCkgPj4gRldfUklfV1JfUDJQVFlQRV9TKSAmIEZXX1JJX1dSX1AyUFRZUEVfTSkKIAogc3RydWN0IHRjcF9vcHRpb25zIHsKIAlfX2JlMTYgbXNzOwpAQCAtNzgzLDU4ICs3ODMsNTggQEAKIH07CiAKIC8qIGNwbF9wYXNzX2FjY2VwdF9yZXEuaGRyX2xlbiBmaWVsZHMgKi8KLSNkZWZpbmUgU19TWU5fUlhfQ0hBTiAgICAwCi0jZGVmaW5lIE1fU1lOX1JYX0NIQU4gICAgMHhGCi0jZGVmaW5lIFZfU1lOX1JYX0NIQU4oeCkgKCh4KSA8PCBTX1NZTl9SWF9DSEFOKQotI2RlZmluZSBHX1NZTl9SWF9DSEFOKHgpICgoKHgpID4+IFNfU1lOX1JYX0NIQU4pICYgTV9TWU5fUlhfQ0hBTikKKyNkZWZpbmUgU1lOX1JYX0NIQU5fUyAgICAwCisjZGVmaW5lIFNZTl9SWF9DSEFOX00gICAgMHhGCisjZGVmaW5lIFNZTl9SWF9DSEFOX1YoeCkgKCh4KSA8PCBTWU5fUlhfQ0hBTl9TKQorI2RlZmluZSBTWU5fUlhfQ0hBTl9HKHgpICgoKHgpID4+IFNZTl9SWF9DSEFOX1MpICYgU1lOX1JYX0NIQU5fTSkKIAotI2RlZmluZSBTX1RDUF9IRFJfTEVOICAgIDEwCi0jZGVmaW5lIE1fVENQX0hEUl9MRU4gICAgMHgzRgotI2RlZmluZSBWX1RDUF9IRFJfTEVOKHgpICgoeCkgPDwgU19UQ1BfSERSX0xFTikKLSNkZWZpbmUgR19UQ1BfSERSX0xFTih4KSAoKCh4KSA+PiBTX1RDUF9IRFJfTEVOKSAmIE1fVENQX0hEUl9MRU4pCisjZGVmaW5lIFRDUF9IRFJfTEVOX1MgICAgMTAKKyNkZWZpbmUgVENQX0hEUl9MRU5fTSAgICAweDNGCisjZGVmaW5lIFRDUF9IRFJfTEVOX1YoeCkgKCh4KSA8PCBUQ1BfSERSX0xFTl9TKQorI2RlZmluZSBUQ1BfSERSX0xFTl9HKHgpICgoKHgpID4+IFRDUF9IRFJfTEVOX1MpICYgVENQX0hEUl9MRU5fTSkKIAotI2RlZmluZSBTX0lQX0hEUl9MRU4gICAgMTYKLSNkZWZpbmUgTV9JUF9IRFJfTEVOICAgIDB4M0ZGCi0jZGVmaW5lIFZfSVBfSERSX0xFTih4KSAoKHgpIDw8IFNfSVBfSERSX0xFTikKLSNkZWZpbmUgR19JUF9IRFJfTEVOKHgpICgoKHgpID4+IFNfSVBfSERSX0xFTikgJiBNX0lQX0hEUl9MRU4pCisjZGVmaW5lIElQX0hEUl9MRU5fUyAgICAxNgorI2RlZmluZSBJUF9IRFJfTEVOX00gICAgMHgzRkYKKyNkZWZpbmUgSVBfSERSX0xFTl9WKHgpICgoeCkgPDwgSVBfSERSX0xFTl9TKQorI2RlZmluZSBJUF9IRFJfTEVOX0coeCkgKCgoeCkgPj4gSVBfSERSX0xFTl9TKSAmIElQX0hEUl9MRU5fTSkKIAotI2RlZmluZSBTX0VUSF9IRFJfTEVOICAgIDI2Ci0jZGVmaW5lIE1fRVRIX0hEUl9MRU4gICAgMHgxRgotI2RlZmluZSBWX0VUSF9IRFJfTEVOKHgpICgoeCkgPDwgU19FVEhfSERSX0xFTikKLSNkZWZpbmUgR19FVEhfSERSX0xFTih4KSAoKCh4KSA+PiBTX0VUSF9IRFJfTEVOKSAmIE1fRVRIX0hEUl9MRU4pCisjZGVmaW5lIEVUSF9IRFJfTEVOX1MgICAgMjYKKyNkZWZpbmUgRVRIX0hEUl9MRU5fTSAgICAweDFGCisjZGVmaW5lIEVUSF9IRFJfTEVOX1YoeCkgKCh4KSA8PCBFVEhfSERSX0xFTl9TKQorI2RlZmluZSBFVEhfSERSX0xFTl9HKHgpICgoKHgpID4+IEVUSF9IRFJfTEVOX1MpICYgRVRIX0hEUl9MRU5fTSkKIAogLyogY3BsX3Bhc3NfYWNjZXB0X3JlcS5sMmluZm8gZmllbGRzICovCi0jZGVmaW5lIFNfU1lOX01BQ19JRFggICAgMAotI2RlZmluZSBNX1NZTl9NQUNfSURYICAgIDB4MUZGCi0jZGVmaW5lIFZfU1lOX01BQ19JRFgoeCkgKCh4KSA8PCBTX1NZTl9NQUNfSURYKQotI2RlZmluZSBHX1NZTl9NQUNfSURYKHgpICgoKHgpID4+IFNfU1lOX01BQ19JRFgpICYgTV9TWU5fTUFDX0lEWCkKKyNkZWZpbmUgU1lOX01BQ19JRFhfUyAgICAwCisjZGVmaW5lIFNZTl9NQUNfSURYX00gICAgMHgxRkYKKyNkZWZpbmUgU1lOX01BQ19JRFhfVih4KSAoKHgpIDw8IFNZTl9NQUNfSURYX1MpCisjZGVmaW5lIFNZTl9NQUNfSURYX0coeCkgKCgoeCkgPj4gU1lOX01BQ19JRFhfUykgJiBTWU5fTUFDX0lEWF9NKQogCi0jZGVmaW5lIFNfU1lOX1hBQ1RfTUFUQ0ggICAgOQotI2RlZmluZSBWX1NZTl9YQUNUX01BVENIKHgpICgoeCkgPDwgU19TWU5fWEFDVF9NQVRDSCkKLSNkZWZpbmUgRl9TWU5fWEFDVF9NQVRDSCAgICBWX1NZTl9YQUNUX01BVENIKDFVKQorI2RlZmluZSBTWU5fWEFDVF9NQVRDSF9TICAgIDkKKyNkZWZpbmUgU1lOX1hBQ1RfTUFUQ0hfVih4KSAoKHgpIDw8IFNZTl9YQUNUX01BVENIX1MpCisjZGVmaW5lIFNZTl9YQUNUX01BVENIX0YgICAgU1lOX1hBQ1RfTUFUQ0hfVigxVSkKIAotI2RlZmluZSBTX1NZTl9JTlRGICAgIDEyCi0jZGVmaW5lIE1fU1lOX0lOVEYgICAgMHhGCi0jZGVmaW5lIFZfU1lOX0lOVEYoeCkgKCh4KSA8PCBTX1NZTl9JTlRGKQotI2RlZmluZSBHX1NZTl9JTlRGKHgpICgoKHgpID4+IFNfU1lOX0lOVEYpICYgTV9TWU5fSU5URikKKyNkZWZpbmUgU1lOX0lOVEZfUyAgICAxMgorI2RlZmluZSBTWU5fSU5URl9NICAgIDB4RgorI2RlZmluZSBTWU5fSU5URl9WKHgpICgoeCkgPDwgU1lOX0lOVEZfUykKKyNkZWZpbmUgU1lOX0lOVEZfRyh4KSAoKCh4KSA+PiBTWU5fSU5URl9TKSAmIFNZTl9JTlRGX00pCiAKIHN0cnVjdCB1bHB0eF9pZGF0YSB7CiAJX19iZTMyIGNtZF9tb3JlOwogCV9fYmUzMiBsZW47CiB9OwogCi0jZGVmaW5lIFNfVUxQVFhfTlNHRSAgICAwCi0jZGVmaW5lIE1fVUxQVFhfTlNHRSAgICAweEZGRkYKLSNkZWZpbmUgVl9VTFBUWF9OU0dFKHgpICgoeCkgPDwgU19VTFBUWF9OU0dFKQorI2RlZmluZSBVTFBUWF9OU0dFX1MgICAgMAorI2RlZmluZSBVTFBUWF9OU0dFX00gICAgMHhGRkZGCisjZGVmaW5lIFVMUFRYX05TR0VfVih4KSAoKHgpIDw8IFVMUFRYX05TR0VfUykKIAotI2RlZmluZSBTX1JYX0RBQ0tfTU9ERSAgICAyOQotI2RlZmluZSBNX1JYX0RBQ0tfTU9ERSAgICAweDMKLSNkZWZpbmUgVl9SWF9EQUNLX01PREUoeCkgKCh4KSA8PCBTX1JYX0RBQ0tfTU9ERSkKLSNkZWZpbmUgR19SWF9EQUNLX01PREUoeCkgKCgoeCkgPj4gU19SWF9EQUNLX01PREUpICYgTV9SWF9EQUNLX01PREUpCisjZGVmaW5lIFJYX0RBQ0tfTU9ERV9TICAgIDI5CisjZGVmaW5lIFJYX0RBQ0tfTU9ERV9NICAgIDB4MworI2RlZmluZSBSWF9EQUNLX01PREVfVih4KSAoKHgpIDw8IFJYX0RBQ0tfTU9ERV9TKQorI2RlZmluZSBSWF9EQUNLX01PREVfRyh4KSAoKCh4KSA+PiBSWF9EQUNLX01PREVfUykgJiBSWF9EQUNLX01PREVfTSkKIAotI2RlZmluZSBTX1JYX0RBQ0tfQ0hBTkdFICAgIDMxCi0jZGVmaW5lIFZfUlhfREFDS19DSEFOR0UoeCkgKCh4KSA8PCBTX1JYX0RBQ0tfQ0hBTkdFKQotI2RlZmluZSBGX1JYX0RBQ0tfQ0hBTkdFICAgIFZfUlhfREFDS19DSEFOR0UoMVUpCisjZGVmaW5lIFJYX0RBQ0tfQ0hBTkdFX1MgICAgMzEKKyNkZWZpbmUgUlhfREFDS19DSEFOR0VfVih4KSAoKHgpIDw8IFJYX0RBQ0tfQ0hBTkdFX1MpCisjZGVmaW5lIFJYX0RBQ0tfQ0hBTkdFX0YgICAgUlhfREFDS19DSEFOR0VfVigxVSkKIAogZW51bSB7ICAgICAgICAgICAgICAgICAgICAgLyogVENQIGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG1zICovCiAJQ09OR19BTEdfUkVOTywKQEAgLTg0MywxMCArODQzLDEwIEBACiAJQ09OR19BTEdfSElHSFNQRUVECiB9OwogCi0jZGVmaW5lIFNfQ09OR19DTlRSTCAgICAxNAotI2RlZmluZSBNX0NPTkdfQ05UUkwgICAgMHgzCi0jZGVmaW5lIFZfQ09OR19DTlRSTCh4KSAoKHgpIDw8IFNfQ09OR19DTlRSTCkKLSNkZWZpbmUgR19DT05HX0NOVFJMKHgpICgoKHgpID4+IFNfQ09OR19DTlRSTCkgJiBNX0NPTkdfQ05UUkwpCisjZGVmaW5lIENPTkdfQ05UUkxfUyAgICAxNAorI2RlZmluZSBDT05HX0NOVFJMX00gICAgMHgzCisjZGVmaW5lIENPTkdfQ05UUkxfVih4KSAoKHgpIDw8IENPTkdfQ05UUkxfUykKKyNkZWZpbmUgQ09OR19DTlRSTF9HKHgpICgoKHgpID4+IENPTkdfQ05UUkxfUykgJiBDT05HX0NOVFJMX00pCiAKICNkZWZpbmUgQ09OR19DTlRSTF9WQUxJRCAgICgxIDw8IDE4KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9haC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvYWguYwppbmRleCAyZDhjMzM5Li5mNTBhNTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9haC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L2FoLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L21seDQvZHJpdmVyLmg+CiAKICNpbmNsdWRlICJtbHg0X2liLmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L2FsaWFzX0dVSUQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L2FsaWFzX0dVSUQuYwppbmRleCAwZWIxNDFjLi5hMzFlMDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9hbGlhc19HVUlELmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvYWxpYXNfR1VJRC5jCkBAIC0xNTQsNyArMTU0LDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXNsYXZlX2lkID0gKGJsb2NrX251bSAqIE5VTV9BTElBU19HVUlEX0lOX1JFQykgKyBpIDsKLQkJaWYgKHNsYXZlX2lkID49IGRldi0+ZGV2LT5udW1fdmZzICsgMSkKKwkJaWYgKHNsYXZlX2lkID49IGRldi0+ZGV2LT5wZXJzaXN0LT5udW1fdmZzICsgMSkKIAkJCXJldHVybjsKIAkJdG1wX2N1cl9hZyA9ICooX19iZTY0ICopJnBfZGF0YVtpICogR1VJRF9SRUNfU0laRV07CiAJCWZvcm1fY2FjaGVfYWcgPSBnZXRfY2FjaGVkX2FsaWFzX2d1aWQoZGV2LCBwb3J0X251bSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9jcS5jCmluZGV4IGEzYjcwZjYuLjU0M2VjZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L2NxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvY3EuYwpAQCAtMTg4LDYgKzE4OCw4IEBACiAJc3Bpbl9sb2NrX2luaXQoJmNxLT5sb2NrKTsKIAljcS0+cmVzaXplX2J1ZiA9IE5VTEw7CiAJY3EtPnJlc2l6ZV91bWVtID0gTlVMTDsKKwlJTklUX0xJU1RfSEVBRCgmY3EtPnNlbmRfcXBfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNxLT5yZWN2X3FwX2xpc3QpOwogCiAJaWYgKGNvbnRleHQpIHsKIAkJc3RydWN0IG1seDRfaWJfY3JlYXRlX2NxIHVjbWQ7CkBAIC01OTQsNiArNTk2LDU1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIG1seDRfaWJfcXBfc3dfY29tcChzdHJ1Y3QgbWx4NF9pYl9xcCAqcXAsIGludCBudW1fZW50cmllcywKKwkJCSAgICAgICBzdHJ1Y3QgaWJfd2MgKndjLCBpbnQgKm5wb2xsZWQsIGludCBpc19zZW5kKQoreworCXN0cnVjdCBtbHg0X2liX3dxICp3cTsKKwl1bnNpZ25lZCBjdXI7CisJaW50IGk7CisKKwl3cSA9IGlzX3NlbmQgPyAmcXAtPnNxIDogJnFwLT5ycTsKKwljdXIgPSB3cS0+aGVhZCAtIHdxLT50YWlsOworCisJaWYgKGN1ciA9PSAwKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyAgaSA8IGN1ciAmJiAqbnBvbGxlZCA8IG51bV9lbnRyaWVzOyBpKyspIHsKKwkJd2MtPndyX2lkID0gd3EtPndyaWRbd3EtPnRhaWwgJiAod3EtPndxZV9jbnQgLSAxKV07CisJCXdjLT5zdGF0dXMgPSBJQl9XQ19XUl9GTFVTSF9FUlI7CisJCXdjLT52ZW5kb3JfZXJyID0gTUxYNF9DUUVfU1lORFJPTUVfV1JfRkxVU0hfRVJSOworCQl3cS0+dGFpbCsrOworCQkoKm5wb2xsZWQpKys7CisJCXdjLT5xcCA9ICZxcC0+aWJxcDsKKwkJd2MrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1seDRfaWJfcG9sbF9zd19jb21wKHN0cnVjdCBtbHg0X2liX2NxICpjcSwgaW50IG51bV9lbnRyaWVzLAorCQkJCSBzdHJ1Y3QgaWJfd2MgKndjLCBpbnQgKm5wb2xsZWQpCit7CisJc3RydWN0IG1seDRfaWJfcXAgKnFwOworCisJKm5wb2xsZWQgPSAwOworCS8qIEZpbmQgdW5jb21wbGV0ZWQgV1FFcyBiZWxvbmdpbmcgdG8gdGhhdCBjcSBhbmQgcmV0cnVuCisJICogc2ltdWxhdGVkIEZMVVNIX0VSUiBjb21wbGV0aW9ucworCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocXAsICZjcS0+c2VuZF9xcF9saXN0LCBjcV9zZW5kX2xpc3QpIHsKKwkJbWx4NF9pYl9xcF9zd19jb21wKHFwLCBudW1fZW50cmllcywgd2MsIG5wb2xsZWQsIDEpOworCQlpZiAoKm5wb2xsZWQgPj0gbnVtX2VudHJpZXMpCisJCQlnb3RvIG91dDsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHFwLCAmY3EtPnJlY3ZfcXBfbGlzdCwgY3FfcmVjdl9saXN0KSB7CisJCW1seDRfaWJfcXBfc3dfY29tcChxcCwgbnVtX2VudHJpZXMsIHdjICsgKm5wb2xsZWQsIG5wb2xsZWQsIDApOworCQlpZiAoKm5wb2xsZWQgPj0gbnVtX2VudHJpZXMpCisJCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm47Cit9CisKIHN0YXRpYyBpbnQgbWx4NF9pYl9wb2xsX29uZShzdHJ1Y3QgbWx4NF9pYl9jcSAqY3EsCiAJCQkgICAgc3RydWN0IG1seDRfaWJfcXAgKipjdXJfcXAsCiAJCQkgICAgc3RydWN0IGliX3djICp3YykKQEAgLTgzNiw4ICs4ODcsMTMgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBucG9sbGVkOwogCWludCBlcnIgPSAwOworCXN0cnVjdCBtbHg0X2liX2RldiAqbWRldiA9IHRvX21kZXYoY3EtPmliY3EuZGV2aWNlKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcS0+bG9jaywgZmxhZ3MpOworCWlmIChtZGV2LT5kZXYtPnBlcnNpc3QtPnN0YXRlICYgTUxYNF9ERVZJQ0VfU1RBVEVfSU5URVJOQUxfRVJST1IpIHsKKwkJbWx4NF9pYl9wb2xsX3N3X2NvbXAoY3EsIG51bV9lbnRyaWVzLCB3YywgJm5wb2xsZWQpOworCQlnb3RvIG91dDsKKwl9CiAKIAlmb3IgKG5wb2xsZWQgPSAwOyBucG9sbGVkIDwgbnVtX2VudHJpZXM7ICsrbnBvbGxlZCkgewogCQllcnIgPSBtbHg0X2liX3BvbGxfb25lKGNxLCAmY3VyX3FwLCB3YyArIG5wb2xsZWQpOwpAQCAtODQ3LDYgKzkwMyw3IEBACiAKIAltbHg0X2NxX3NldF9jaSgmY3EtPm1jcSk7CiAKK291dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcS0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKGVyciA9PSAwIHx8IGVyciA9PSAtRUFHQUlOKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYwppbmRleCA4MmE3ZGQ4Li5jNzYxOTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWQuYwpAQCAtMTk1MSw3ICsxOTUxLDggQEAKIAljdHgtPmliX2RldiA9ICZkZXYtPmliX2RldjsKIAogCWZvciAoaSA9IDA7Ci0JICAgICBpIDwgbWluKGRldi0+ZGV2LT5jYXBzLnNxcF9kZW11eCwgKHUxNikoZGV2LT5kZXYtPm51bV92ZnMgKyAxKSk7CisJICAgICBpIDwgbWluKGRldi0+ZGV2LT5jYXBzLnNxcF9kZW11eCwKKwkgICAgICh1MTYpKGRldi0+ZGV2LT5wZXJzaXN0LT5udW1fdmZzICsgMSkpOwogCSAgICAgaSsrKSB7CiAJCXN0cnVjdCBtbHg0X2FjdGl2ZV9wb3J0cyBhY3R2X3BvcnRzID0KIAkJCW1seDRfZ2V0X2FjdGl2ZV9wb3J0cyhkZXYtPmRldiwgaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKaW5kZXggOTExN2I3YS4uZWI4ZTIxNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tYWluLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogCiAJcHJvcHMtPnZlbmRvcl9pZAkgICA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopIChvdXRfbWFkLT5kYXRhICsgMzYpKSAmCiAJCTB4ZmZmZmZmOwotCXByb3BzLT52ZW5kb3JfcGFydF9pZAkgICA9IGRldi0+ZGV2LT5wZGV2LT5kZXZpY2U7CisJcHJvcHMtPnZlbmRvcl9wYXJ0X2lkCSAgID0gZGV2LT5kZXYtPnBlcnNpc3QtPnBkZXYtPmRldmljZTsKIAlwcm9wcy0+aHdfdmVyCQkgICA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopIChvdXRfbWFkLT5kYXRhICsgMzIpKTsKIAltZW1jcHkoJnByb3BzLT5zeXNfaW1hZ2VfZ3VpZCwgb3V0X21hZC0+ZGF0YSArCTQsIDgpOwogCkBAIC0zNTEsNiArMzUxLDcgQEAKIAllbnVtIGliX210dSB0bXA7CiAJc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3g7CiAJaW50IGVyciA9IDA7CisJaW50IGlzX2JvbmRlZCA9IG1seDRfaXNfYm9uZGVkKG1kZXYtPmRldik7CiAKIAltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChtZGV2LT5kZXYpOwogCWlmIChJU19FUlIobWFpbGJveCkpCkBAIC0zNzQsOCArMzc1LDEyIEBACiAJcHJvcHMtPnN0YXRlCQk9IElCX1BPUlRfRE9XTjsKIAlwcm9wcy0+cGh5c19zdGF0ZQk9IHN0YXRlX3RvX3BoeXNfc3RhdGUocHJvcHMtPnN0YXRlKTsKIAlwcm9wcy0+YWN0aXZlX210dQk9IElCX01UVV8yNTY7CisJaWYgKGlzX2JvbmRlZCkKKwkJcnRubF9sb2NrKCk7IC8qIHJlcXVpcmVkIHRvIGdldCB1cHBlciBkZXYgKi8KIAlzcGluX2xvY2tfYmgoJmlib2UtPmxvY2spOwogCW5kZXYgPSBpYm9lLT5uZXRkZXZzW3BvcnQgLSAxXTsKKwlpZiAobmRldiAmJiBpc19ib25kZWQpCisJCW5kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQobmRldik7CiAJaWYgKCFuZGV2KQogCQlnb3RvIG91dF91bmxvY2s7CiAKQEAgLTM4Nyw2ICszOTIsOCBAQAogCXByb3BzLT5waHlzX3N0YXRlCT0gc3RhdGVfdG9fcGh5c19zdGF0ZShwcm9wcy0+c3RhdGUpOwogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19iaCgmaWJvZS0+bG9jayk7CisJaWYgKGlzX2JvbmRlZCkKKwkJcnRubF91bmxvY2soKTsKIG91dDoKIAltbHg0X2ZyZWVfY21kX21haWxib3gobWRldi0+ZGV2LCBtYWlsYm94KTsKIAlyZXR1cm4gZXJyOwpAQCAtODQ0LDcgKzg1MSw3IEBACiAKIHN0cnVjdCBtbHg0X2liX3N0ZWVyaW5nIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JdTY0IHJlZ19pZDsKKwlzdHJ1Y3QgbWx4NF9mbG93X3JlZ19pZCByZWdfaWQ7CiAJdW5pb24gaWJfZ2lkIGdpZDsKIH07CiAKQEAgLTExMzUsOSArMTE0MiwxMSBAQAogCQkJCSAgICBzdHJ1Y3QgaWJfZmxvd19hdHRyICpmbG93X2F0dHIsCiAJCQkJICAgIGludCBkb21haW4pCiB7Ci0JaW50IGVyciA9IDAsIGkgPSAwOworCWludCBlcnIgPSAwLCBpID0gMCwgaiA9IDA7CiAJc3RydWN0IG1seDRfaWJfZmxvdyAqbWZsb3c7CiAJZW51bSBtbHg0X25ldF90cmFuc19wcm9taXNjX21vZGUgdHlwZVsyXTsKKwlzdHJ1Y3QgbWx4NF9kZXYgKmRldiA9ICh0b19tZGV2KHFwLT5kZXZpY2UpKS0+ZGV2OworCWludCBpc19ib25kZWQgPSBtbHg0X2lzX2JvbmRlZChkZXYpOwogCiAJbWVtc2V0KHR5cGUsIDAsIHNpemVvZih0eXBlKSk7CiAKQEAgLTExNzIsMjYgKzExODEsNTggQEAKIAogCXdoaWxlIChpIDwgQVJSQVlfU0laRSh0eXBlKSAmJiB0eXBlW2ldKSB7CiAJCWVyciA9IF9fbWx4NF9pYl9jcmVhdGVfZmxvdyhxcCwgZmxvd19hdHRyLCBkb21haW4sIHR5cGVbaV0sCi0JCQkJCSAgICAmbWZsb3ctPnJlZ19pZFtpXSk7CisJCQkJCSAgICAmbWZsb3ctPnJlZ19pZFtpXS5pZCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycl9jcmVhdGVfZmxvdzsKIAkJaSsrOworCQlpZiAoaXNfYm9uZGVkKSB7CisJCQkvKiBBcHBsaWNhdGlvbiBhbHdheXMgc2VlcyBvbmUgcG9ydCBzbyB0aGUgbWlycm9yIHJ1bGUKKwkJCSAqIG11c3QgYmUgb24gcG9ydCAjMgorCQkJICovCisJCQlmbG93X2F0dHItPnBvcnQgPSAyOworCQkJZXJyID0gX19tbHg0X2liX2NyZWF0ZV9mbG93KHFwLCBmbG93X2F0dHIsCisJCQkJCQkgICAgZG9tYWluLCB0eXBlW2pdLAorCQkJCQkJICAgICZtZmxvdy0+cmVnX2lkW2pdLm1pcnJvcik7CisJCQlmbG93X2F0dHItPnBvcnQgPSAxOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycl9jcmVhdGVfZmxvdzsKKwkJCWorKzsKKwkJfQorCiAJfQogCiAJaWYgKGkgPCBBUlJBWV9TSVpFKHR5cGUpICYmIGZsb3dfYXR0ci0+dHlwZSA9PSBJQl9GTE9XX0FUVFJfTk9STUFMKSB7Ci0JCWVyciA9IG1seDRfaWJfdHVubmVsX3N0ZWVyX2FkZChxcCwgZmxvd19hdHRyLCAmbWZsb3ctPnJlZ19pZFtpXSk7CisJCWVyciA9IG1seDRfaWJfdHVubmVsX3N0ZWVyX2FkZChxcCwgZmxvd19hdHRyLAorCQkJCQkgICAgICAgJm1mbG93LT5yZWdfaWRbaV0uaWQpOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfY3JlYXRlX2Zsb3c7CiAJCWkrKzsKKwkJaWYgKGlzX2JvbmRlZCkgeworCQkJZmxvd19hdHRyLT5wb3J0ID0gMjsKKwkJCWVyciA9IG1seDRfaWJfdHVubmVsX3N0ZWVyX2FkZChxcCwgZmxvd19hdHRyLAorCQkJCQkJICAgICAgICZtZmxvdy0+cmVnX2lkW2pdLm1pcnJvcik7CisJCQlmbG93X2F0dHItPnBvcnQgPSAxOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGVycl9jcmVhdGVfZmxvdzsKKwkJCWorKzsKKwkJfQorCQkvKiBmdW5jdGlvbiB0byBjcmVhdGUgbWlycm9yIHJ1bGUgKi8KIAl9CiAKIAlyZXR1cm4gJm1mbG93LT5pYmZsb3c7CiAKIGVycl9jcmVhdGVfZmxvdzoKIAl3aGlsZSAoaSkgewotCQkodm9pZClfX21seDRfaWJfZGVzdHJveV9mbG93KHRvX21kZXYocXAtPmRldmljZSktPmRldiwgbWZsb3ctPnJlZ19pZFtpXSk7CisJCSh2b2lkKV9fbWx4NF9pYl9kZXN0cm95X2Zsb3codG9fbWRldihxcC0+ZGV2aWNlKS0+ZGV2LAorCQkJCQkgICAgIG1mbG93LT5yZWdfaWRbaV0uaWQpOwogCQlpLS07CiAJfQorCisJd2hpbGUgKGopIHsKKwkJKHZvaWQpX19tbHg0X2liX2Rlc3Ryb3lfZmxvdyh0b19tZGV2KHFwLT5kZXZpY2UpLT5kZXYsCisJCQkJCSAgICAgbWZsb3ctPnJlZ19pZFtqXS5taXJyb3IpOworCQlqLS07CisJfQogZXJyX2ZyZWU6CiAJa2ZyZWUobWZsb3cpOwogCXJldHVybiBFUlJfUFRSKGVycik7CkBAIC0xMjA0LDEwICsxMjQ1LDE2IEBACiAJc3RydWN0IG1seDRfaWJfZGV2ICptZGV2ID0gdG9fbWRldihmbG93X2lkLT5xcC0+ZGV2aWNlKTsKIAlzdHJ1Y3QgbWx4NF9pYl9mbG93ICptZmxvdyA9IHRvX21mbG93KGZsb3dfaWQpOwogCi0Jd2hpbGUgKGkgPCBBUlJBWV9TSVpFKG1mbG93LT5yZWdfaWQpICYmIG1mbG93LT5yZWdfaWRbaV0pIHsKLQkJZXJyID0gX19tbHg0X2liX2Rlc3Ryb3lfZmxvdyhtZGV2LT5kZXYsIG1mbG93LT5yZWdfaWRbaV0pOworCXdoaWxlIChpIDwgQVJSQVlfU0laRShtZmxvdy0+cmVnX2lkKSAmJiBtZmxvdy0+cmVnX2lkW2ldLmlkKSB7CisJCWVyciA9IF9fbWx4NF9pYl9kZXN0cm95X2Zsb3cobWRldi0+ZGV2LCBtZmxvdy0+cmVnX2lkW2ldLmlkKTsKIAkJaWYgKGVycikKIAkJCXJldCA9IGVycjsKKwkJaWYgKG1mbG93LT5yZWdfaWRbaV0ubWlycm9yKSB7CisJCQllcnIgPSBfX21seDRfaWJfZGVzdHJveV9mbG93KG1kZXYtPmRldiwKKwkJCQkJCSAgICAgbWZsb3ctPnJlZ19pZFtpXS5taXJyb3IpOworCQkJaWYgKGVycikKKwkJCQlyZXQgPSBlcnI7CisJCX0KIAkJaSsrOwogCX0KIApAQCAtMTIxOSwxMSArMTI2NiwxMiBAQAogewogCWludCBlcnI7CiAJc3RydWN0IG1seDRfaWJfZGV2ICptZGV2ID0gdG9fbWRldihpYnFwLT5kZXZpY2UpOworCXN0cnVjdCBtbHg0X2RldgkqZGV2ID0gbWRldi0+ZGV2OwogCXN0cnVjdCBtbHg0X2liX3FwICptcXAgPSB0b19tcXAoaWJxcCk7Ci0JdTY0IHJlZ19pZDsKIAlzdHJ1Y3QgbWx4NF9pYl9zdGVlcmluZyAqaWJfc3RlZXJpbmcgPSBOVUxMOwogCWVudW0gbWx4NF9wcm90b2NvbCBwcm90ID0gKGdpZC0+cmF3WzFdID09IDB4MGUpID8KIAkJTUxYNF9QUk9UX0lCX0lQVjQgOiBNTFg0X1BST1RfSUJfSVBWNjsKKwlzdHJ1Y3QgbWx4NF9mbG93X3JlZ19pZAlyZWdfaWQ7CiAKIAlpZiAobWRldi0+ZGV2LT5jYXBzLnN0ZWVyaW5nX21vZGUgPT0KIAkgICAgTUxYNF9TVEVFUklOR19NT0RFX0RFVklDRV9NQU5BR0VEKSB7CkBAIC0xMjM1LDEwICsxMjgzLDIxIEBACiAJZXJyID0gbWx4NF9tdWx0aWNhc3RfYXR0YWNoKG1kZXYtPmRldiwgJm1xcC0+bXFwLCBnaWQtPnJhdywgbXFwLT5wb3J0LAogCQkJCSAgICAhIShtcXAtPmZsYWdzICYKIAkJCQkgICAgICAgTUxYNF9JQl9RUF9CTE9DS19NVUxUSUNBU1RfTE9PUEJBQ0spLAotCQkJCSAgICBwcm90LCAmcmVnX2lkKTsKKwkJCQkgICAgcHJvdCwgJnJlZ19pZC5pZCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfbWFsbG9jOwogCisJcmVnX2lkLm1pcnJvciA9IDA7CisJaWYgKG1seDRfaXNfYm9uZGVkKGRldikpIHsKKwkJZXJyID0gbWx4NF9tdWx0aWNhc3RfYXR0YWNoKG1kZXYtPmRldiwgJm1xcC0+bXFwLCBnaWQtPnJhdywKKwkJCQkJICAgIChtcXAtPnBvcnQgPT0gMSkgPyAyIDogMSwKKwkJCQkJICAgICEhKG1xcC0+ZmxhZ3MgJgorCQkJCQkgICAgTUxYNF9JQl9RUF9CTE9DS19NVUxUSUNBU1RfTE9PUEJBQ0spLAorCQkJCQkgICAgcHJvdCwgJnJlZ19pZC5taXJyb3IpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfYWRkOworCX0KKwogCWVyciA9IGFkZF9naWRfZW50cnkoaWJxcCwgZ2lkKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9hZGQ7CkBAIC0xMjU0LDcgKzEzMTMsMTAgQEAKIAogZXJyX2FkZDoKIAltbHg0X211bHRpY2FzdF9kZXRhY2gobWRldi0+ZGV2LCAmbXFwLT5tcXAsIGdpZC0+cmF3LAotCQkJICAgICAgcHJvdCwgcmVnX2lkKTsKKwkJCSAgICAgIHByb3QsIHJlZ19pZC5pZCk7CisJaWYgKHJlZ19pZC5taXJyb3IpCisJCW1seDRfbXVsdGljYXN0X2RldGFjaChtZGV2LT5kZXYsICZtcXAtPm1xcCwgZ2lkLT5yYXcsCisJCQkJICAgICAgcHJvdCwgcmVnX2lkLm1pcnJvcik7CiBlcnJfbWFsbG9jOgogCWtmcmVlKGliX3N0ZWVyaW5nKTsKIApAQCAtMTI4MSwxMCArMTM0MywxMiBAQAogewogCWludCBlcnI7CiAJc3RydWN0IG1seDRfaWJfZGV2ICptZGV2ID0gdG9fbWRldihpYnFwLT5kZXZpY2UpOworCXN0cnVjdCBtbHg0X2RldiAqZGV2ID0gbWRldi0+ZGV2OwogCXN0cnVjdCBtbHg0X2liX3FwICptcXAgPSB0b19tcXAoaWJxcCk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CiAJc3RydWN0IG1seDRfaWJfZ2lkX2VudHJ5ICpnZTsKLQl1NjQgcmVnX2lkID0gMDsKKwlzdHJ1Y3QgbWx4NF9mbG93X3JlZ19pZCByZWdfaWQgPSB7MCwgMH07CisKIAllbnVtIG1seDRfcHJvdG9jb2wgcHJvdCA9IChnaWQtPnJhd1sxXSA9PSAweDBlKSA/CiAJCU1MWDRfUFJPVF9JQl9JUFY0IDogTUxYNF9QUk9UX0lCX0lQVjY7CiAKQEAgLTEzMDksMTAgKzEzNzMsMTcgQEAKIAl9CiAKIAllcnIgPSBtbHg0X211bHRpY2FzdF9kZXRhY2gobWRldi0+ZGV2LCAmbXFwLT5tcXAsIGdpZC0+cmF3LAotCQkJCSAgICBwcm90LCByZWdfaWQpOworCQkJCSAgICBwcm90LCByZWdfaWQuaWQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwlpZiAobWx4NF9pc19ib25kZWQoZGV2KSkgeworCQllcnIgPSBtbHg0X211bHRpY2FzdF9kZXRhY2gobWRldi0+ZGV2LCAmbXFwLT5tcXAsIGdpZC0+cmF3LAorCQkJCQkgICAgcHJvdCwgcmVnX2lkLm1pcnJvcik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwogCW11dGV4X2xvY2soJm1xcC0+bXV0ZXgpOwogCWdlID0gZmluZF9naWRfZW50cnkobXFwLCBnaWQtPnJhdyk7CiAJaWYgKGdlKSB7CkBAIC0xMzc2LDcgKzE0NDcsNyBAQAogewogCXN0cnVjdCBtbHg0X2liX2RldiAqZGV2ID0KIAkJY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IG1seDRfaWJfZGV2LCBpYl9kZXYuZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICJNVCVkXG4iLCBkZXYtPmRldi0+cGRldi0+ZGV2aWNlKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICJNVCVkXG4iLCBkZXYtPmRldi0+cGVyc2lzdC0+cGRldi0+ZGV2aWNlKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19md192ZXIoc3RydWN0IGRldmljZSAqZGV2aWNlLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTE0NDAsNiArMTUxMSw3IEBACiAJdW5pb24gaWJfZ2lkICpnaWRzOwogCWludCBlcnI7CiAJc3RydWN0IG1seDRfZGV2CSpkZXYgPSBndy0+ZGV2LT5kZXY7CisJaW50IGlzX2JvbmRlZCA9IG1seDRfaXNfYm9uZGVkKGRldik7CiAKIAlpZiAoIWd3LT5kZXYtPmliX2FjdGl2ZSkKIAkJcmV0dXJuOwpAQCAtMTQ1OSw3ICsxNTMxLDEwIEBACiAJaWYgKGVycikKIAkJcHJfd2Fybigic2V0IHBvcnQgY29tbWFuZCBmYWlsZWRcbiIpOwogCWVsc2UKLQkJbWx4NF9pYl9kaXNwYXRjaF9ldmVudChndy0+ZGV2LCBndy0+cG9ydCwgSUJfRVZFTlRfR0lEX0NIQU5HRSk7CisJCWlmICgoZ3ctPnBvcnQgPT0gMSkgfHwgIWlzX2JvbmRlZCkKKwkJCW1seDRfaWJfZGlzcGF0Y2hfZXZlbnQoZ3ctPmRldiwKKwkJCQkJICAgICAgIGlzX2JvbmRlZCA/IDEgOiBndy0+cG9ydCwKKwkJCQkJICAgICAgIElCX0VWRU5UX0dJRF9DSEFOR0UpOwogCiAJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7CiAJa2ZyZWUoZ3cpOwpAQCAtMTg3NSw3ICsxOTUwLDggQEAKIAkJCQkgKiBkb24ndCB3YW50IHRoZSBib25kIElQIGJhc2VkIGdpZHMgaW4gdGhlIHRhYmxlIHNpbmNlCiAJCQkJICogZmxvd3MgdGhhdCBzZWxlY3QgcG9ydCBieSBnaWQgbWF5IGdldCB0aGUgZG93biBwb3J0LgogCQkJCSovCi0JCQkJaWYgKHBvcnRfc3RhdGUgPT0gSUJfUE9SVF9ET1dOKSB7CisJCQkJaWYgKHBvcnRfc3RhdGUgPT0gSUJfUE9SVF9ET1dOICYmCisJCQkJICAgICFtbHg0X2lzX2JvbmRlZChpYmRldi0+ZGV2KSkgewogCQkJCQlyZXNldF9naWRfdGFibGUoaWJkZXYsIHBvcnQpOwogCQkJCQltbHg0X2liX3NldF9kZWZhdWx0X2dpZChpYmRldiwKIAkJCQkJCQkJY3Vycl9uZXRkZXYsCkBAIC0xOTM4LDcgKzIwMTQsOCBAQAogCWludCBpOwogCiAJaWYgKG1seDRfaXNfbWFzdGVyKGliZGV2LT5kZXYpKSB7Ci0JCWZvciAoc2xhdmUgPSAwOyBzbGF2ZSA8PSBpYmRldi0+ZGV2LT5udW1fdmZzOyArK3NsYXZlKSB7CisJCWZvciAoc2xhdmUgPSAwOyBzbGF2ZSA8PSBpYmRldi0+ZGV2LT5wZXJzaXN0LT5udW1fdmZzOworCQkgICAgICsrc2xhdmUpIHsKIAkJCWZvciAocG9ydCA9IDE7IHBvcnQgPD0gaWJkZXYtPmRldi0+Y2Fwcy5udW1fcG9ydHM7ICsrcG9ydCkgewogCQkJCWZvciAoaSA9IDA7CiAJCQkJICAgICBpIDwgaWJkZXYtPmRldi0+cGh5c19jYXBzLnBrZXlfcGh5c190YWJsZV9sZW5bcG9ydF07CkBAIC0xOTk1LDcgKzIwNzIsNyBAQAogCW1seDRfZm9yZWFjaF9wb3J0KGksIGRldiwgTUxYNF9QT1JUX1RZUEVfSUIpIHsKIAkJZm9yIChqID0gMDsgaiA8IGVxX3Blcl9wb3J0OyBqKyspIHsKIAkJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIm1seDQtaWItJWQtJWRAJXMiLAotCQkJCSBpLCBqLCBkZXYtPnBkZXYtPmJ1cy0+bmFtZSk7CisJCQkJIGksIGosIGRldi0+cGVyc2lzdC0+cGRldi0+YnVzLT5uYW1lKTsKIAkJCS8qIFNldCBJUlEgZm9yIHNwZWNpZmljIG5hbWUgKHBlciByaW5nKSAqLwogCQkJaWYgKG1seDRfYXNzaWduX2VxKGRldiwgbmFtZSwgTlVMTCwKIAkJCQkJICAgJmliZGV2LT5lcV90YWJsZVtlcV0pKSB7CkBAIC0yMDQ2LDYgKzIxMjMsNyBAQAogCWludCBlcnI7CiAJc3RydWN0IG1seDRfaWJfaWJvZSAqaWJvZTsKIAlpbnQgaWJfbnVtX3BvcnRzID0gMDsKKwlpbnQgbnVtX3JlcV9jb3VudGVyczsKIAogCXByX2luZm9fb25jZSgiJXMiLCBtbHg0X2liX3ZlcnNpb24pOwogCkBAIC0yMDU5LDcgKzIxMzcsOCBAQAogCiAJaWJkZXYgPSAoc3RydWN0IG1seDRfaWJfZGV2ICopIGliX2FsbG9jX2RldmljZShzaXplb2YgKmliZGV2KTsKIAlpZiAoIWliZGV2KSB7Ci0JCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiRGV2aWNlIHN0cnVjdCBhbGxvYyBmYWlsZWRcbiIpOworCQlkZXZfZXJyKCZkZXYtPnBlcnNpc3QtPnBkZXYtPmRldiwKKwkJCSJEZXZpY2Ugc3RydWN0IGFsbG9jIGZhaWxlZFxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtMjA3OCwxNSArMjE1NywxNyBAQAogCU1MWDRfSU5JVF9ET09SQkVMTF9MT0NLKCZpYmRldi0+dWFyX2xvY2spOwogCiAJaWJkZXYtPmRldiA9IGRldjsKKwlpYmRldi0+Ym9uZF9uZXh0X3BvcnQJPSAwOwogCiAJc3RybGNweShpYmRldi0+aWJfZGV2Lm5hbWUsICJtbHg0XyVkIiwgSUJfREVWSUNFX05BTUVfTUFYKTsKIAlpYmRldi0+aWJfZGV2Lm93bmVyCQk9IFRISVNfTU9EVUxFOwogCWliZGV2LT5pYl9kZXYubm9kZV90eXBlCQk9IFJETUFfTk9ERV9JQl9DQTsKIAlpYmRldi0+aWJfZGV2LmxvY2FsX2RtYV9sa2V5CT0gZGV2LT5jYXBzLnJlc2VydmVkX2xrZXk7CiAJaWJkZXYtPm51bV9wb3J0cwkJPSBudW1fcG9ydHM7Ci0JaWJkZXYtPmliX2Rldi5waHlzX3BvcnRfY250ICAgICA9IGliZGV2LT5udW1fcG9ydHM7CisJaWJkZXYtPmliX2Rldi5waHlzX3BvcnRfY250ICAgICA9IG1seDRfaXNfYm9uZGVkKGRldikgPworCQkJCQkJMSA6IGliZGV2LT5udW1fcG9ydHM7CiAJaWJkZXYtPmliX2Rldi5udW1fY29tcF92ZWN0b3JzCT0gZGV2LT5jYXBzLm51bV9jb21wX3ZlY3RvcnM7Ci0JaWJkZXYtPmliX2Rldi5kbWFfZGV2aWNlCT0gJmRldi0+cGRldi0+ZGV2OworCWliZGV2LT5pYl9kZXYuZG1hX2RldmljZQk9ICZkZXYtPnBlcnNpc3QtPnBkZXYtPmRldjsKIAogCWlmIChkZXYtPmNhcHMudXNlcnNwYWNlX2NhcHMpCiAJCWliZGV2LT5pYl9kZXYudXZlcmJzX2FiaV92ZXIgPSBNTFg0X0lCX1VWRVJCU19BQklfVkVSU0lPTjsKQEAgLTIyMDUsNyArMjI4Niw4IEBACiAJaWYgKGluaXRfbm9kZV9kYXRhKGliZGV2KSkKIAkJZ290byBlcnJfbWFwOwogCi0JZm9yIChpID0gMDsgaSA8IGliZGV2LT5udW1fcG9ydHM7ICsraSkgeworCW51bV9yZXFfY291bnRlcnMgPSBtbHg0X2lzX2JvbmRlZChkZXYpID8gMSA6IGliZGV2LT5udW1fcG9ydHM7CisJZm9yIChpID0gMDsgaSA8IG51bV9yZXFfY291bnRlcnM7ICsraSkgewogCQltdXRleF9pbml0KCZpYmRldi0+cXAxX3Byb3h5X2xvY2tbaV0pOwogCQlpZiAobWx4NF9pYl9wb3J0X2xpbmtfbGF5ZXIoJmliZGV2LT5pYl9kZXYsIGkgKyAxKSA9PQogCQkJCQkJSUJfTElOS19MQVlFUl9FVEhFUk5FVCkgewpAQCAtMjIxNiwxMiArMjI5OCwxOCBAQAogCQkJaWJkZXYtPmNvdW50ZXJzW2ldID0gLTE7CiAJCX0KIAl9CisJaWYgKG1seDRfaXNfYm9uZGVkKGRldikpCisJCWZvciAoaSA9IDE7IGkgPCBpYmRldi0+bnVtX3BvcnRzIDsgKytpKQorCQkJaWJkZXYtPmNvdW50ZXJzW2ldID0gaWJkZXYtPmNvdW50ZXJzWzBdOworCiAKIAltbHg0X2ZvcmVhY2hfcG9ydChpLCBkZXYsIE1MWDRfUE9SVF9UWVBFX0lCKQogCQlpYl9udW1fcG9ydHMrKzsKIAogCXNwaW5fbG9ja19pbml0KCZpYmRldi0+c21fbG9jayk7CiAJbXV0ZXhfaW5pdCgmaWJkZXYtPmNhcF9tYXNrX211dGV4KTsKKwlJTklUX0xJU1RfSEVBRCgmaWJkZXYtPnFwX2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZpYmRldi0+cmVzZXRfZmxvd19yZXNvdXJjZV9sb2NrKTsKIAogCWlmIChpYmRldi0+c3RlZXJpbmdfc3VwcG9ydCA9PSBNTFg0X1NURUVSSU5HX01PREVfREVWSUNFX01BTkFHRUQgJiYKIAkgICAgaWJfbnVtX3BvcnRzKSB7CkBAIC0yMjM3LDcgKzIzMjUsOCBAQAogCQkJCXNpemVvZihsb25nKSwKIAkJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKCFpYmRldi0+aWJfdWNfcXBuc19iaXRtYXApIHsKLQkJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiYml0IG1hcCBhbGxvYyBmYWlsZWRcbiIpOworCQkJZGV2X2VycigmZGV2LT5wZXJzaXN0LT5wZGV2LT5kZXYsCisJCQkJImJpdCBtYXAgYWxsb2MgZmFpbGVkXG4iKTsKIAkJCWdvdG8gZXJyX3N0ZWVyX3FwX3JlbGVhc2U7CiAJCX0KIApAQCAtMjUzNSw2ICsyNjI0LDk5IEBACiAJcmV0dXJuOwogfQogCitzdGF0aWMgdm9pZCBtbHg0X2liX2hhbmRsZV9jYXRhc19lcnJvcihzdHJ1Y3QgbWx4NF9pYl9kZXYgKmliZGV2KQoreworCXN0cnVjdCBtbHg0X2liX3FwICptcXA7CisJdW5zaWduZWQgbG9uZyBmbGFnc19xcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzX2NxOworCXN0cnVjdCBtbHg0X2liX2NxICpzZW5kX21jcSwgKnJlY3ZfbWNxOworCXN0cnVjdCBsaXN0X2hlYWQgICAgY3Ffbm90aWZ5X2xpc3Q7CisJc3RydWN0IG1seDRfY3EgKm1jcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHJfd2FybigibWx4NF9pYl9oYW5kbGVfY2F0YXNfZXJyb3Igd2FzIHN0YXJ0ZWRcbiIpOworCUlOSVRfTElTVF9IRUFEKCZjcV9ub3RpZnlfbGlzdCk7CisKKwkvKiBHbyBvdmVyIHFwIGxpc3QgcmVzaWRlIG9uIHRoYXQgaWJkZXYsIHN5bmMgd2l0aCBjcmVhdGUvZGVzdHJveSBxcC4qLworCXNwaW5fbG9ja19pcnFzYXZlKCZpYmRldi0+cmVzZXRfZmxvd19yZXNvdXJjZV9sb2NrLCBmbGFncyk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1xcCwgJmliZGV2LT5xcF9saXN0LCBxcHNfbGlzdCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbXFwLT5zcS5sb2NrLCBmbGFnc19xcCk7CisJCWlmIChtcXAtPnNxLnRhaWwgIT0gbXFwLT5zcS5oZWFkKSB7CisJCQlzZW5kX21jcSA9IHRvX21jcShtcXAtPmlicXAuc2VuZF9jcSk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2VuZF9tY3EtPmxvY2ssIGZsYWdzX2NxKTsKKwkJCWlmIChzZW5kX21jcS0+bWNxLmNvbXAgJiYKKwkJCSAgICBtcXAtPmlicXAuc2VuZF9jcS0+Y29tcF9oYW5kbGVyKSB7CisJCQkJaWYgKCFzZW5kX21jcS0+bWNxLnJlc2V0X25vdGlmeV9hZGRlZCkgeworCQkJCQlzZW5kX21jcS0+bWNxLnJlc2V0X25vdGlmeV9hZGRlZCA9IDE7CisJCQkJCWxpc3RfYWRkX3RhaWwoJnNlbmRfbWNxLT5tY3EucmVzZXRfbm90aWZ5LAorCQkJCQkJICAgICAgJmNxX25vdGlmeV9saXN0KTsKKwkJCQl9CisJCQl9CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzZW5kX21jcS0+bG9jaywgZmxhZ3NfY3EpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1xcC0+c3EubG9jaywgZmxhZ3NfcXApOworCQkvKiBOb3csIGhhbmRsZSB0aGUgUVAncyByZWNlaXZlIHF1ZXVlICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZtcXAtPnJxLmxvY2ssIGZsYWdzX3FwKTsKKwkJLyogbm8gaGFuZGxpbmcgaXMgbmVlZGVkIGZvciBTUlEgKi8KKwkJaWYgKCFtcXAtPmlicXAuc3JxKSB7CisJCQlpZiAobXFwLT5ycS50YWlsICE9IG1xcC0+cnEuaGVhZCkgeworCQkJCXJlY3ZfbWNxID0gdG9fbWNxKG1xcC0+aWJxcC5yZWN2X2NxKTsKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmVjdl9tY3EtPmxvY2ssIGZsYWdzX2NxKTsKKwkJCQlpZiAocmVjdl9tY3EtPm1jcS5jb21wICYmCisJCQkJICAgIG1xcC0+aWJxcC5yZWN2X2NxLT5jb21wX2hhbmRsZXIpIHsKKwkJCQkJaWYgKCFyZWN2X21jcS0+bWNxLnJlc2V0X25vdGlmeV9hZGRlZCkgeworCQkJCQkJcmVjdl9tY3EtPm1jcS5yZXNldF9ub3RpZnlfYWRkZWQgPSAxOworCQkJCQkJbGlzdF9hZGRfdGFpbCgmcmVjdl9tY3EtPm1jcS5yZXNldF9ub3RpZnksCisJCQkJCQkJICAgICAgJmNxX25vdGlmeV9saXN0KTsKKwkJCQkJfQorCQkJCX0KKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZWN2X21jcS0+bG9jaywKKwkJCQkJCSAgICAgICBmbGFnc19jcSk7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXFwLT5ycS5sb2NrLCBmbGFnc19xcCk7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtY3EsICZjcV9ub3RpZnlfbGlzdCwgcmVzZXRfbm90aWZ5KSB7CisJCW1jcS0+Y29tcChtY3EpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpYmRldi0+cmVzZXRfZmxvd19yZXNvdXJjZV9sb2NrLCBmbGFncyk7CisJcHJfd2FybigibWx4NF9pYl9oYW5kbGVfY2F0YXNfZXJyb3IgZW5kZWRcbiIpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfYm9uZGVkX3BvcnRfc3RhdGVfZXZlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpYl9ldmVudF93b3JrICpldyA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWJfZXZlbnRfd29yaywgd29yayk7CisJc3RydWN0IG1seDRfaWJfZGV2ICppYmRldiA9IGV3LT5pYl9kZXY7CisJZW51bSBpYl9wb3J0X3N0YXRlIGJvbmRlZF9wb3J0X3N0YXRlID0gSUJfUE9SVF9OT1A7CisJaW50IGk7CisJc3RydWN0IGliX2V2ZW50IGliZXY7CisKKwlrZnJlZShldyk7CisJc3Bpbl9sb2NrX2JoKCZpYmRldi0+aWJvZS5sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUxYNF9NQVhfUE9SVFM7ICsraSkgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqY3Vycl9uZXRkZXYgPSBpYmRldi0+aWJvZS5uZXRkZXZzW2ldOworCisJCWVudW0gaWJfcG9ydF9zdGF0ZSBjdXJyX3BvcnRfc3RhdGUgPQorCQkJKG5ldGlmX3J1bm5pbmcoY3Vycl9uZXRkZXYpICYmCisJCQkgbmV0aWZfY2Fycmllcl9vayhjdXJyX25ldGRldikpID8KKwkJCUlCX1BPUlRfQUNUSVZFIDogSUJfUE9SVF9ET1dOOworCisJCWJvbmRlZF9wb3J0X3N0YXRlID0gKGJvbmRlZF9wb3J0X3N0YXRlICE9IElCX1BPUlRfQUNUSVZFKSA/CisJCQljdXJyX3BvcnRfc3RhdGUgOiBJQl9QT1JUX0FDVElWRTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmliZGV2LT5pYm9lLmxvY2spOworCisJaWJldi5kZXZpY2UgPSAmaWJkZXYtPmliX2RldjsKKwlpYmV2LmVsZW1lbnQucG9ydF9udW0gPSAxOworCWliZXYuZXZlbnQgPSAoYm9uZGVkX3BvcnRfc3RhdGUgPT0gSUJfUE9SVF9BQ1RJVkUpID8KKwkJSUJfRVZFTlRfUE9SVF9BQ1RJVkUgOiBJQl9FVkVOVF9QT1JUX0VSUjsKKworCWliX2Rpc3BhdGNoX2V2ZW50KCZpYmV2KTsKK30KKwogc3RhdGljIHZvaWQgbWx4NF9pYl9ldmVudChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdm9pZCAqaWJkZXZfcHRyLAogCQkJICBlbnVtIG1seDRfZGV2X2V2ZW50IGV2ZW50LCB1bnNpZ25lZCBsb25nIHBhcmFtKQogewpAQCAtMjU0NCw2ICsyNzI2LDE4IEBACiAJc3RydWN0IGliX2V2ZW50X3dvcmsgKmV3OwogCWludCBwID0gMDsKIAorCWlmIChtbHg0X2lzX2JvbmRlZChkZXYpICYmCisJICAgICgoZXZlbnQgPT0gTUxYNF9ERVZfRVZFTlRfUE9SVF9VUCkgfHwKKwkgICAgKGV2ZW50ID09IE1MWDRfREVWX0VWRU5UX1BPUlRfRE9XTikpKSB7CisJCWV3ID0ga21hbGxvYyhzaXplb2YoKmV3KSwgR0ZQX0FUT01JQyk7CisJCWlmICghZXcpCisJCQlyZXR1cm47CisJCUlOSVRfV09SSygmZXctPndvcmssIGhhbmRsZV9ib25kZWRfcG9ydF9zdGF0ZV9ldmVudCk7CisJCWV3LT5pYl9kZXYgPSBpYmRldjsKKwkJcXVldWVfd29yayh3cSwgJmV3LT53b3JrKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChldmVudCA9PSBNTFg0X0RFVl9FVkVOVF9QT1JUX01HTVRfQ0hBTkdFKQogCQllcWUgPSAoc3RydWN0IG1seDRfZXFlICopcGFyYW07CiAJZWxzZQpAQCAtMjU3MCw2ICsyNzY0LDcgQEAKIAljYXNlIE1MWDRfREVWX0VWRU5UX0NBVEFTVFJPUEhJQ19FUlJPUjoKIAkJaWJkZXYtPmliX2FjdGl2ZSA9IGZhbHNlOwogCQlpYmV2LmV2ZW50ID0gSUJfRVZFTlRfREVWSUNFX0ZBVEFMOworCQltbHg0X2liX2hhbmRsZV9jYXRhc19lcnJvcihpYmRldik7CiAJCWJyZWFrOwogCiAJY2FzZSBNTFg0X0RFVl9FVkVOVF9QT1JUX01HTVRfQ0hBTkdFOgpAQCAtMjYwNCw3ICsyNzk5LDcgQEAKIAl9CiAKIAlpYmV2LmRldmljZQkgICAgICA9IGliZGV2X3B0cjsKLQlpYmV2LmVsZW1lbnQucG9ydF9udW0gPSAodTgpIHA7CisJaWJldi5lbGVtZW50LnBvcnRfbnVtID0gbWx4NF9pc19ib25kZWQoaWJkZXYtPmRldikgPyAxIDogKHU4KXA7CiAKIAlpYl9kaXNwYXRjaF9ldmVudCgmaWJldik7CiB9CkBAIC0yNjEzLDcgKzI4MDgsOCBAQAogCS5hZGQJCT0gbWx4NF9pYl9hZGQsCiAJLnJlbW92ZQkJPSBtbHg0X2liX3JlbW92ZSwKIAkuZXZlbnQJCT0gbWx4NF9pYl9ldmVudCwKLQkucHJvdG9jb2wJPSBNTFg0X1BST1RfSUJfSVBWNgorCS5wcm90b2NvbAk9IE1MWDRfUFJPVF9JQl9JUFY2LAorCS5mbGFncwkJPSBNTFg0X0lOVEZGX0JPTkRJTkcKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1seDRfaWJfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWx4NF9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbWx4NF9pYi5oCmluZGV4IDZlYjc0M2YuLmY4MjlmZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21seDRfaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tbHg0X2liLmgKQEAgLTExMCw2ICsxMTAsOSBAQAogCXN0cnVjdCBtdXRleAkJcmVzaXplX211dGV4OwogCXN0cnVjdCBpYl91bWVtCSAgICAgICAqdW1lbTsKIAlzdHJ1Y3QgaWJfdW1lbQkgICAgICAgKnJlc2l6ZV91bWVtOworCS8qIExpc3Qgb2YgcXBzIHRoYXQgaXQgc2VydmVzLiovCisJc3RydWN0IGxpc3RfaGVhZAkJc2VuZF9xcF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJCXJlY3ZfcXBfbGlzdDsKIH07CiAKIHN0cnVjdCBtbHg0X2liX21yIHsKQEAgLTEzNCwxMCArMTM3LDE3IEBACiAJc3RydWN0IG1seDRfZm1yICAgICAgICAgbWZtcjsKIH07CiAKKyNkZWZpbmUgTUFYX1JFR1NfUEVSX0ZMT1cgMgorCitzdHJ1Y3QgbWx4NF9mbG93X3JlZ19pZCB7CisJdTY0IGlkOworCXU2NCBtaXJyb3I7Cit9OworCiBzdHJ1Y3QgbWx4NF9pYl9mbG93IHsKIAlzdHJ1Y3QgaWJfZmxvdyBpYmZsb3c7CiAJLyogdHJhbnNsYXRpbmcgRE1GUyB2ZXJicyBzbmlmZmVyIHJ1bGUgdG8gRlcgQVBJIHJlcXVpcmVzIHR3byByZWcgSURzICovCi0JdTY0IHJlZ19pZFsyXTsKKwlzdHJ1Y3QgbWx4NF9mbG93X3JlZ19pZCByZWdfaWRbTUFYX1JFR1NfUEVSX0ZMT1ddOwogfTsKIAogc3RydWN0IG1seDRfaWJfd3EgewpAQCAtMjkzLDYgKzMwMyw5IEBACiAJc3RydWN0IG1seDRfcm9jZV9zbWFjX3ZsYW5faW5mbyBwcmk7CiAJc3RydWN0IG1seDRfcm9jZV9zbWFjX3ZsYW5faW5mbyBhbHQ7CiAJdTY0CQkJcmVnX2lkOworCXN0cnVjdCBsaXN0X2hlYWQJcXBzX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAljcV9yZWN2X2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAljcV9zZW5kX2xpc3Q7CiB9OwogCiBzdHJ1Y3QgbWx4NF9pYl9zcnEgewpAQCAtNTI3LDYgKzU0MCwxMCBAQAogCXN0cnVjdCBtbHg0X2liX3FwICAgICAgKnFwMV9wcm94eVtNTFg0X01BWF9QT1JUU107CiAJLyogbG9jayB3aGVuIGRlc3Ryb3lpbmcgcXAxX3Byb3h5IGFuZCBnZXR0aW5nIG5ldGRldiBldmVudHMgKi8KIAlzdHJ1Y3QgbXV0ZXgJCXFwMV9wcm94eV9sb2NrW01MWDRfTUFYX1BPUlRTXTsKKwl1OAkJCWJvbmRfbmV4dF9wb3J0OworCS8qIHByb3RlY3QgcmVzb3VyY2VzIG5lZWRlZCBhcyBwYXJ0IG9mIHJlc2V0IGZsb3cgKi8KKwlzcGlubG9ja190CQlyZXNldF9mbG93X3Jlc291cmNlX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZAkJcXBfbGlzdDsKIH07CiAKIHN0cnVjdCBpYl9ldmVudF93b3JrIHsKQEAgLTYyMiw2ICs2MzksMTMgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKGliYWgsIHN0cnVjdCBtbHg0X2liX2FoLCBpYmFoKTsKIH0KIAorc3RhdGljIGlubGluZSB1OCBtbHg0X2liX2JvbmRfbmV4dF9wb3J0KHN0cnVjdCBtbHg0X2liX2RldiAqZGV2KQoreworCWRldi0+Ym9uZF9uZXh0X3BvcnQgPSAoZGV2LT5ib25kX25leHRfcG9ydCArIDEpICUgZGV2LT5udW1fcG9ydHM7CisKKwlyZXR1cm4gZGV2LT5ib25kX25leHRfcG9ydCArIDE7Cit9CisKIGludCBtbHg0X2liX2luaXRfc3Jpb3Yoc3RydWN0IG1seDRfaWJfZGV2ICpkZXYpOwogdm9pZCBtbHg0X2liX2Nsb3NlX3NyaW92KHN0cnVjdCBtbHg0X2liX2RldiAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L21yLmMKaW5kZXggYzM2Y2NiZC4uZTBkMjcxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvbXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9tci5jCkBAIC00MDEsNyArNDAxLDggQEAKIAlpZiAoIW1mcnBsLT5pYmZycGwucGFnZV9saXN0KQogCQlnb3RvIGVycl9mcmVlOwogCi0JbWZycGwtPm1hcHBlZF9wYWdlX2xpc3QgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmRldi0+ZGV2LT5wZGV2LT5kZXYsCisJbWZycGwtPm1hcHBlZF9wYWdlX2xpc3QgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmRldi0+ZGV2LT5wZXJzaXN0LT4KKwkJCQkJCSAgICAgcGRldi0+ZGV2LAogCQkJCQkJICAgICBzaXplLCAmbWZycGwtPm1hcCwKIAkJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtZnJwbC0+bWFwcGVkX3BhZ2VfbGlzdCkKQEAgLTQyMyw3ICs0MjQsOCBAQAogCXN0cnVjdCBtbHg0X2liX2Zhc3RfcmVnX3BhZ2VfbGlzdCAqbWZycGwgPSB0b19tZnJwbChwYWdlX2xpc3QpOwogCWludCBzaXplID0gcGFnZV9saXN0LT5tYXhfcGFnZV9saXN0X2xlbiAqIHNpemVvZiAodTY0KTsKIAotCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPmRldi0+cGRldi0+ZGV2LCBzaXplLCBtZnJwbC0+bWFwcGVkX3BhZ2VfbGlzdCwKKwlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5kZXYtPnBlcnNpc3QtPnBkZXYtPmRldiwgc2l6ZSwKKwkJCSAgbWZycGwtPm1hcHBlZF9wYWdlX2xpc3QsCiAJCQkgIG1mcnBsLT5tYXApOwogCWtmcmVlKG1mcnBsLT5pYmZycGwucGFnZV9saXN0KTsKIAlrZnJlZShtZnJwbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYwppbmRleCBjZjAwMGI3Li5kZmM2Y2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKQEAgLTQwLDExICs0MCwxNyBAQAogI2luY2x1ZGUgPHJkbWEvaWJfYWRkci5oPgogI2luY2x1ZGUgPHJkbWEvaWJfbWFkLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9tbHg0L2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L21seDQvcXAuaD4KIAogI2luY2x1ZGUgIm1seDRfaWIuaCIKICNpbmNsdWRlICJ1c2VyLmgiCiAKK3N0YXRpYyB2b2lkIG1seDRfaWJfbG9ja19jcXMoc3RydWN0IG1seDRfaWJfY3EgKnNlbmRfY3EsCisJCQkgICAgIHN0cnVjdCBtbHg0X2liX2NxICpyZWN2X2NxKTsKK3N0YXRpYyB2b2lkIG1seDRfaWJfdW5sb2NrX2NxcyhzdHJ1Y3QgbWx4NF9pYl9jcSAqc2VuZF9jcSwKKwkJCSAgICAgICBzdHJ1Y3QgbWx4NF9pYl9jcSAqcmVjdl9jcSk7CisKIGVudW0gewogCU1MWDRfSUJfQUNLX1JFUV9GUkVRCT0gOCwKIH07CkBAIC05MywxNyArOTksNiBAQAogI2lmbmRlZiBFVEhfQUxFTgogI2RlZmluZSBFVEhfQUxFTiAgICAgICAgNgogI2VuZGlmCi1zdGF0aWMgaW5saW5lIHU2NCBtbHg0X21hY190b191NjQodTggKmFkZHIpCi17Ci0JdTY0IG1hYyA9IDA7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykgewotCQltYWMgPDw9IDg7Ci0JCW1hYyB8PSBhZGRyW2ldOwotCX0KLQlyZXR1cm4gbWFjOwotfQogCiBzdGF0aWMgY29uc3QgX19iZTMyIG1seDRfaWJfb3Bjb2RlW10gPSB7CiAJW0lCX1dSX1NFTkRdCQkJCT0gY3B1X3RvX2JlMzIoTUxYNF9PUENPREVfU0VORCksCkBAIC02MjgsNiArNjIzLDggQEAKIAlzdHJ1Y3QgbWx4NF9pYl9zcXAgKnNxcDsKIAlzdHJ1Y3QgbWx4NF9pYl9xcCAqcXA7CiAJZW51bSBtbHg0X2liX3FwX3R5cGUgcXBfdHlwZSA9IChlbnVtIG1seDRfaWJfcXBfdHlwZSkgaW5pdF9hdHRyLT5xcF90eXBlOworCXN0cnVjdCBtbHg0X2liX2NxICptY3E7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFdoZW4gdHVubmVsaW5nIHNwZWNpYWwgcXBzLCB3ZSB1c2UgYSBwbGFpbiBVRCBxcCAqLwogCWlmIChzcXBuKSB7CkBAIC04MzgsNiArODM1LDI0IEBACiAJcXAtPm1xcC5ldmVudCA9IG1seDRfaWJfcXBfZXZlbnQ7CiAJaWYgKCEqY2FsbGVyX3FwKQogCQkqY2FsbGVyX3FwID0gcXA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5yZXNldF9mbG93X3Jlc291cmNlX2xvY2ssIGZsYWdzKTsKKwltbHg0X2liX2xvY2tfY3FzKHRvX21jcShpbml0X2F0dHItPnNlbmRfY3EpLAorCQkJIHRvX21jcShpbml0X2F0dHItPnJlY3ZfY3EpKTsKKwkvKiBNYWludGFpbiBkZXZpY2UgdG8gUVBzIGFjY2VzcywgbmVlZGVkIGZvciBmdXJ0aGVyIGhhbmRsaW5nCisJICogdmlhIHJlc2V0IGZsb3cKKwkgKi8KKwlsaXN0X2FkZF90YWlsKCZxcC0+cXBzX2xpc3QsICZkZXYtPnFwX2xpc3QpOworCS8qIE1haW50YWluIENRIHRvIFFQcyBhY2Nlc3MsIG5lZWRlZCBmb3IgZnVydGhlciBoYW5kbGluZworCSAqIHZpYSByZXNldCBmbG93CisJICovCisJbWNxID0gdG9fbWNxKGluaXRfYXR0ci0+c2VuZF9jcSk7CisJbGlzdF9hZGRfdGFpbCgmcXAtPmNxX3NlbmRfbGlzdCwgJm1jcS0+c2VuZF9xcF9saXN0KTsKKwltY3EgPSB0b19tY3EoaW5pdF9hdHRyLT5yZWN2X2NxKTsKKwlsaXN0X2FkZF90YWlsKCZxcC0+Y3FfcmVjdl9saXN0LCAmbWNxLT5yZWN2X3FwX2xpc3QpOworCW1seDRfaWJfdW5sb2NrX2Nxcyh0b19tY3EoaW5pdF9hdHRyLT5zZW5kX2NxKSwKKwkJCSAgIHRvX21jcShpbml0X2F0dHItPnJlY3ZfY3EpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJlc2V0X2Zsb3dfcmVzb3VyY2VfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogCiBlcnJfcXBuOgpAQCAtODk2LDEzICs5MTEsMTMgQEAKIAlfX2FjcXVpcmVzKCZzZW5kX2NxLT5sb2NrKSBfX2FjcXVpcmVzKCZyZWN2X2NxLT5sb2NrKQogewogCWlmIChzZW5kX2NxID09IHJlY3ZfY3EpIHsKLQkJc3Bpbl9sb2NrX2lycSgmc2VuZF9jcS0+bG9jayk7CisJCXNwaW5fbG9jaygmc2VuZF9jcS0+bG9jayk7CiAJCV9fYWNxdWlyZSgmcmVjdl9jcS0+bG9jayk7CiAJfSBlbHNlIGlmIChzZW5kX2NxLT5tY3EuY3FuIDwgcmVjdl9jcS0+bWNxLmNxbikgewotCQlzcGluX2xvY2tfaXJxKCZzZW5kX2NxLT5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZzZW5kX2NxLT5sb2NrKTsKIAkJc3Bpbl9sb2NrX25lc3RlZCgmcmVjdl9jcS0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCX0gZWxzZSB7Ci0JCXNwaW5fbG9ja19pcnEoJnJlY3ZfY3EtPmxvY2spOworCQlzcGluX2xvY2soJnJlY3ZfY3EtPmxvY2spOwogCQlzcGluX2xvY2tfbmVzdGVkKCZzZW5kX2NxLT5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJfQogfQpAQCAtOTEyLDEzICs5MjcsMTMgQEAKIHsKIAlpZiAoc2VuZF9jcSA9PSByZWN2X2NxKSB7CiAJCV9fcmVsZWFzZSgmcmVjdl9jcS0+bG9jayk7Ci0JCXNwaW5fdW5sb2NrX2lycSgmc2VuZF9jcS0+bG9jayk7CisJCXNwaW5fdW5sb2NrKCZzZW5kX2NxLT5sb2NrKTsKIAl9IGVsc2UgaWYgKHNlbmRfY3EtPm1jcS5jcW4gPCByZWN2X2NxLT5tY3EuY3FuKSB7CiAJCXNwaW5fdW5sb2NrKCZyZWN2X2NxLT5sb2NrKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZzZW5kX2NxLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnNlbmRfY3EtPmxvY2spOwogCX0gZWxzZSB7CiAJCXNwaW5fdW5sb2NrKCZzZW5kX2NxLT5sb2NrKTsKLQkJc3Bpbl91bmxvY2tfaXJxKCZyZWN2X2NxLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJnJlY3ZfY3EtPmxvY2spOwogCX0KIH0KIApAQCAtOTYzLDYgKzk3OCw3IEBACiAJCQkgICAgICBpbnQgaXNfdXNlcikKIHsKIAlzdHJ1Y3QgbWx4NF9pYl9jcSAqc2VuZF9jcSwgKnJlY3ZfY3E7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChxcC0+c3RhdGUgIT0gSUJfUVBTX1JFU0VUKSB7CiAJCWlmIChtbHg0X3FwX21vZGlmeShkZXYtPmRldiwgTlVMTCwgdG9fbWx4NF9zdGF0ZShxcC0+c3RhdGUpLApAQCAtOTk0LDggKzEwMTAsMTMgQEAKIAogCWdldF9jcXMocXAsICZzZW5kX2NxLCAmcmVjdl9jcSk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5yZXNldF9mbG93X3Jlc291cmNlX2xvY2ssIGZsYWdzKTsKIAltbHg0X2liX2xvY2tfY3FzKHNlbmRfY3EsIHJlY3ZfY3EpOwogCisJLyogZGVsIGZyb20gbGlzdHMgdW5kZXIgYm90aCBsb2NrcyBhYm92ZSB0byBwcm90ZWN0IHJlc2V0IGZsb3cgcGF0aHMgKi8KKwlsaXN0X2RlbCgmcXAtPnFwc19saXN0KTsKKwlsaXN0X2RlbCgmcXAtPmNxX3NlbmRfbGlzdCk7CisJbGlzdF9kZWwoJnFwLT5jcV9yZWN2X2xpc3QpOwogCWlmICghaXNfdXNlcikgewogCQlfX21seDRfaWJfY3FfY2xlYW4ocmVjdl9jcSwgcXAtPm1xcC5xcG4sCiAJCQkJIHFwLT5pYnFwLnNycSA/IHRvX21zcnEocXAtPmlicXAuc3JxKTogTlVMTCk7CkBAIC0xMDA2LDYgKzEwMjcsNyBAQAogCW1seDRfcXBfcmVtb3ZlKGRldi0+ZGV2LCAmcXAtPm1xcCk7CiAKIAltbHg0X2liX3VubG9ja19jcXMoc2VuZF9jcSwgcmVjdl9jcSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5yZXNldF9mbG93X3Jlc291cmNlX2xvY2ssIGZsYWdzKTsKIAogCW1seDRfcXBfZnJlZShkZXYtPmRldiwgJnFwLT5tcXApOwogCkBAIC0xOTE1LDYgKzE5MzcsMjIgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKG1seDRfaXNfYm9uZGVkKGRldi0+ZGV2KSAmJiAoYXR0cl9tYXNrICYgSUJfUVBfUE9SVCkpIHsKKwkJaWYgKChjdXJfc3RhdGUgPT0gSUJfUVBTX1JFU0VUKSAmJiAobmV3X3N0YXRlID09IElCX1FQU19JTklUKSkgeworCQkJaWYgKChpYnFwLT5xcF90eXBlID09IElCX1FQVF9SQykgfHwKKwkJCSAgICAoaWJxcC0+cXBfdHlwZSA9PSBJQl9RUFRfVUQpIHx8CisJCQkgICAgKGlicXAtPnFwX3R5cGUgPT0gSUJfUVBUX1VDKSB8fAorCQkJICAgIChpYnFwLT5xcF90eXBlID09IElCX1FQVF9SQVdfUEFDS0VUKSB8fAorCQkJICAgIChpYnFwLT5xcF90eXBlID09IElCX1FQVF9YUkNfSU5JKSkgeworCQkJCWF0dHItPnBvcnRfbnVtID0gbWx4NF9pYl9ib25kX25leHRfcG9ydChkZXYpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogbm8gc2Vuc2UgaW4gY2hhbmdpbmcgcG9ydF9udW0KKwkJCSAqIHdoZW4gcG9ydHMgYXJlIGJvbmRlZCAqLworCQkJYXR0cl9tYXNrICY9IH5JQl9RUF9QT1JUOworCQl9CisJfQorCiAJaWYgKChhdHRyX21hc2sgJiBJQl9RUF9QT1JUKSAmJgogCSAgICAoYXR0ci0+cG9ydF9udW0gPT0gMCB8fCBhdHRyLT5wb3J0X251bSA+IGRldi0+bnVtX3BvcnRzKSkgewogCQlwcl9kZWJ1ZygicXBuIDB4JXg6IGludmFsaWQgcG9ydCBudW1iZXIgKCVkKSBzcGVjaWZpZWQgIgpAQCAtMTk2NSw2ICsyMDAzLDkgQEAKIAogCWVyciA9IF9fbWx4NF9pYl9tb2RpZnlfcXAoaWJxcCwgYXR0ciwgYXR0cl9tYXNrLCBjdXJfc3RhdGUsIG5ld19zdGF0ZSk7CiAKKwlpZiAobWx4NF9pc19ib25kZWQoZGV2LT5kZXYpICYmIChhdHRyX21hc2sgJiBJQl9RUF9QT1JUKSkKKwkJYXR0ci0+cG9ydF9udW0gPSAxOworCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZxcC0+bXV0ZXgpOwogCXJldHVybiBlcnI7CkBAIC0yNjA5LDggKzI2NTAsMTUgQEAKIAlfX2JlMzIgdW5pbml0aWFsaXplZF92YXIobHNvX2hkcl9zeik7CiAJX19iZTMyIGJsaDsKIAlpbnQgaTsKKwlzdHJ1Y3QgbWx4NF9pYl9kZXYgKm1kZXYgPSB0b19tZGV2KGlicXAtPmRldmljZSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnNxLmxvY2ssIGZsYWdzKTsKKwlpZiAobWRldi0+ZGV2LT5wZXJzaXN0LT5zdGF0ZSAmIE1MWDRfREVWSUNFX1NUQVRFX0lOVEVSTkFMX0VSUk9SKSB7CisJCWVyciA9IC1FSU87CisJCSpiYWRfd3IgPSB3cjsKKwkJbnJlcSA9IDA7CisJCWdvdG8gb3V0OworCX0KIAogCWluZCA9IHFwLT5zcV9uZXh0X3dxZTsKIApAQCAtMjkwOCwxMCArMjk1NiwxOCBAQAogCWludCBpbmQ7CiAJaW50IG1heF9nczsKIAlpbnQgaTsKKwlzdHJ1Y3QgbWx4NF9pYl9kZXYgKm1kZXYgPSB0b19tZGV2KGlicXAtPmRldmljZSk7CiAKIAltYXhfZ3MgPSBxcC0+cnEubWF4X2dzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+cnEubG9jaywgZmxhZ3MpOwogCisJaWYgKG1kZXYtPmRldi0+cGVyc2lzdC0+c3RhdGUgJiBNTFg0X0RFVklDRV9TVEFURV9JTlRFUk5BTF9FUlJPUikgeworCQllcnIgPSAtRUlPOworCQkqYmFkX3dyID0gd3I7CisJCW5yZXEgPSAwOworCQlnb3RvIG91dDsKKwl9CisKIAlpbmQgPSBxcC0+cnEuaGVhZCAmIChxcC0+cnEud3FlX2NudCAtIDEpOwogCiAJZm9yIChucmVxID0gMDsgd3I7ICsrbnJlcSwgd3IgPSB3ci0+bmV4dCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3JxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zcnEuYwppbmRleCA2MmQ5Mjg1Li5kY2U1ZGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zcnEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zcnEuYwpAQCAtMzE2LDggKzMxNiwxNSBAQAogCWludCBlcnIgPSAwOwogCWludCBucmVxOwogCWludCBpOworCXN0cnVjdCBtbHg0X2liX2RldiAqbWRldiA9IHRvX21kZXYoaWJzcnEtPmRldmljZSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc3JxLT5sb2NrLCBmbGFncyk7CisJaWYgKG1kZXYtPmRldi0+cGVyc2lzdC0+c3RhdGUgJiBNTFg0X0RFVklDRV9TVEFURV9JTlRFUk5BTF9FUlJPUikgeworCQllcnIgPSAtRUlPOworCQkqYmFkX3dyID0gd3I7CisJCW5yZXEgPSAwOworCQlnb3RvIG91dDsKKwl9CiAKIAlmb3IgKG5yZXEgPSAwOyB3cjsgKytucmVxLCB3ciA9IHdyLT5uZXh0KSB7CiAJCWlmICh1bmxpa2VseSh3ci0+bnVtX3NnZSA+IHNycS0+bXNycS5tYXhfZ3MpKSB7CkBAIC0zNjIsNiArMzY5LDcgQEAKIAogCQkqc3JxLT5kYi5kYiA9IGNwdV90b19iZTMyKHNycS0+d3FlX2N0cik7CiAJfQorb3V0OgogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3JxLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9zeXNmcy5jCmluZGV4IGNiNGM2NmUuLmQxMGMyYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3N5c2ZzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvc3lzZnMuYwpAQCAtMzc1LDcgKzM3NSw3IEBACiAJY2hhciBiYXNlX25hbWVbOV07CiAKIAkvKiBwY2lfbmFtZSBmb3JtYXQgaXM6IGJ1czpkZXY6ZnVuYyAtPiB4eHh4Onl5Onp6Lm4gKi8KLQlzdHJsY3B5KG5hbWUsIHBjaV9uYW1lKGRldi0+ZGV2LT5wZGV2KSwgbWF4KTsKKwlzdHJsY3B5KG5hbWUsIHBjaV9uYW1lKGRldi0+ZGV2LT5wZXJzaXN0LT5wZGV2KSwgbWF4KTsKIAlzdHJuY3B5KGJhc2VfbmFtZSwgbmFtZSwgOCk7IC8qdGlsbCB4eHh4Onl5OiovCiAJYmFzZV9uYW1lWzhdID0gJ1wwJzsKIAkvKiB3aXRoIG5vIEFSSSBvbmx5IDMgbGFzdCBiaXRzIGFyZSB1c2VkIHNvIHdoZW4gdGhlIGZuIGlzIGhpZ2hlciB0aGFuIDgKQEAgLTc5Miw3ICs3OTIsNyBAQAogCWlmICghbWx4NF9pc19tYXN0ZXIoZGV2aWNlLT5kZXYpKQogCQlyZXR1cm4gMDsKIAotCWZvciAoaSA9IDA7IGkgPD0gZGV2aWNlLT5kZXYtPm51bV92ZnM7ICsraSkKKwlmb3IgKGkgPSAwOyBpIDw9IGRldmljZS0+ZGV2LT5wZXJzaXN0LT5udW1fdmZzOyArK2kpCiAJCXJlZ2lzdGVyX29uZV9wa2V5X3RyZWUoZGV2aWNlLCBpKTsKIAogCXJldHVybiAwOwpAQCAtODA3LDcgKzgwNyw3IEBACiAJaWYgKCFtbHg0X2lzX21hc3RlcihkZXZpY2UtPmRldikpCiAJCXJldHVybjsKIAotCWZvciAoc2xhdmUgPSBkZXZpY2UtPmRldi0+bnVtX3Zmczsgc2xhdmUgPj0gMDsgLS1zbGF2ZSkgeworCWZvciAoc2xhdmUgPSBkZXZpY2UtPmRldi0+cGVyc2lzdC0+bnVtX3Zmczsgc2xhdmUgPj0gMDsgLS1zbGF2ZSkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdCwKIAkJCQkJICZkZXZpY2UtPnBrZXlzLnBrZXlfcG9ydF9saXN0W3NsYXZlXSwKIAkJCQkJIGVudHJ5KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tYWluLmMKaW5kZXggOGE4NzQwNC4uMDNiZjgxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDUvbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21haW4uYwpAQCAtMTMzMSw4ICsxMzMxLDYgQEAKIAkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9TUlEpCQl8CiAJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9YU1JRKQkJfAogCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9PUEVOX1FQKTsKLQlkZXYtPmliX2Rldi51dmVyYnNfZXhfY21kX21hc2sgPQotCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0VYX0NNRF9RVUVSWV9ERVZJQ0UpOwogCiAJZGV2LT5pYl9kZXYucXVlcnlfZGV2aWNlCT0gbWx4NV9pYl9xdWVyeV9kZXZpY2U7CiAJZGV2LT5pYl9kZXYucXVlcnlfcG9ydAkJPSBtbHg1X2liX3F1ZXJ5X3BvcnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NS9tZW0uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21lbS5jCmluZGV4IGI1NmU0YzUuLjYxMWE5ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21lbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg1L21lbS5jCkBAIC04MSw3ICs4MSw3IEBACiAJCWZvciAoayA9IDA7IGsgPCBsZW47IGsrKykgewogCQkJaWYgKCEoaSAmIG1hc2spKSB7CiAJCQkJdG1wID0gKHVuc2lnbmVkIGxvbmcpcGZuOwotCQkJCW0gPSBtaW4obSwgZmluZF9maXJzdF9iaXQoJnRtcCwgc2l6ZW9mKHRtcCkpKTsKKwkJCQltID0gbWluX3QodW5zaWduZWQgbG9uZywgbSwgZmluZF9maXJzdF9iaXQoJnRtcCwgc2l6ZW9mKHRtcCkpKTsKIAkJCQlza2lwID0gMSA8PCBtOwogCQkJCW1hc2sgPSBza2lwIC0gMTsKIAkJCQliYXNlID0gcGZuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwppbmRleCA0OWViNTExLi43MGFjZGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwpAQCAtMzczLDExICszNzMsMTEgQEAKIAl3cWVfZnJhZ21lbnRfbGVuZ3RoID0gKF9fbGUxNiAqKSZuaWNfc3FlLT53cWVfd29yZHNbTkVTX05JQ19TUV9XUUVfTEVOR1RIXzBfVEFHX0lEWF07CiAKIAkvKiBzZXR1cCB0aGUgVkxBTiB0YWcgaWYgcHJlc2VudCAqLwotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgewogCQluZXNfZGVidWcoTkVTX0RCR19OSUNfVFgsICIlczogVkxBTiBwYWNrZXQgdG8gc2VuZC4uLiBWTEFOID0gJTA4WFxuIiwKLQkJCQluZXRkZXYtPm5hbWUsIHZsYW5fdHhfdGFnX2dldChza2IpKTsKKwkJCQluZXRkZXYtPm5hbWUsIHNrYl92bGFuX3RhZ19nZXQoc2tiKSk7CiAJCXdxZV9taXNjID0gTkVTX05JQ19TUV9XUUVfVEFHVkFMVUVfRU5BQkxFOwotCQl3cWVfZnJhZ21lbnRfbGVuZ3RoWzBdID0gKF9fZm9yY2UgX19sZTE2KSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwkJd3FlX2ZyYWdtZW50X2xlbmd0aFswXSA9IChfX2ZvcmNlIF9fbGUxNikgc2tiX3ZsYW5fdGFnX2dldChza2IpOwogCX0gZWxzZQogCQl3cWVfbWlzYyA9IDA7CiAKQEAgLTU3NiwxMSArNTc2LDEyIEBACiAJCQkJd3FlX2ZyYWdtZW50X2xlbmd0aCA9CiAJCQkJCQkoX19sZTE2ICopJm5pY19zcWUtPndxZV93b3Jkc1tORVNfTklDX1NRX1dRRV9MRU5HVEhfMF9UQUdfSURYXTsKIAkJCQkvKiBzZXR1cCB0aGUgVkxBTiB0YWcgaWYgcHJlc2VudCAqLwotCQkJCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwkJCQlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgewogCQkJCQluZXNfZGVidWcoTkVTX0RCR19OSUNfVFgsICIlczogVkxBTiBwYWNrZXQgdG8gc2VuZC4uLiBWTEFOID0gJTA4WFxuIiwKLQkJCQkJCQluZXRkZXYtPm5hbWUsIHZsYW5fdHhfdGFnX2dldChza2IpICk7CisJCQkJCQkJbmV0ZGV2LT5uYW1lLAorCQkJCQkJICBza2Jfdmxhbl90YWdfZ2V0KHNrYikpOwogCQkJCQl3cWVfbWlzYyA9IE5FU19OSUNfU1FfV1FFX1RBR1ZBTFVFX0VOQUJMRTsKLQkJCQkJd3FlX2ZyYWdtZW50X2xlbmd0aFswXSA9IChfX2ZvcmNlIF9fbGUxNikgdmxhbl90eF90YWdfZ2V0KHNrYik7CisJCQkJCXdxZV9mcmFnbWVudF9sZW5ndGhbMF0gPSAoX19mb3JjZSBfX2xlMTYpIHNrYl92bGFuX3RhZ19nZXQoc2tiKTsKIAkJCQl9IGVsc2UKIAkJCQkJd3FlX21pc2MgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmggYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKaW5kZXggOGJhODBhNi4uZDc1NjJiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaApAQCAtOTgsMTUgKzk4LDkgQEAKIAogCUlQT0lCX01DQVNUX0ZMQUdfRk9VTkQJICA9IDAsCS8qIHVzZWQgaW4gc2V0X211bHRpY2FzdF9saXN0ICovCiAJSVBPSUJfTUNBU1RfRkxBR19TRU5ET05MWSA9IDEsCi0JLyoKLQkgKiBGb3IgSVBPSUJfTUNBU1RfRkxBR19CVVNZCi0JICogV2hlbiBzZXQsIGluIGZsaWdodCBqb2luIGFuZCBtY2FzdC0+bWMgaXMgdW5yZWxpYWJsZQotCSAqIFdoZW4gY2xlYXIgYW5kIG1jYXN0LT5tYyBJU19FUlJfT1JfTlVMTCwgbmVlZCB0byByZXN0YXJ0IG9yCi0JICogICBoYXZlbid0IHN0YXJ0ZWQgeWV0Ci0JICogV2hlbiBjbGVhciBhbmQgbWNhc3QtPm1jIGlzIHZhbGlkIHBvaW50ZXIsIGpvaW4gd2FzIHN1Y2Nlc3NmdWwKLQkgKi8KLQlJUE9JQl9NQ0FTVF9GTEFHX0JVU1kJICA9IDIsCisJSVBPSUJfTUNBU1RfRkxBR19CVVNZCSAgPSAyLAkvKiBqb2luaW5nIG9yIGFscmVhZHkgam9pbmVkICovCiAJSVBPSUJfTUNBU1RfRkxBR19BVFRBQ0hFRCA9IDMsCisJSVBPSUJfTUNBU1RfSk9JTl9TVEFSVEVEICA9IDQsCiAKIAlNQVhfU0VORF9DUUUJCSAgPSAxNiwKIAlJUE9JQl9DTV9DT1BZQlJFQUsJICA9IDI1NiwKQEAgLTMyMyw3ICszMTcsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbXVsdGljYXN0X2xpc3Q7CiAJc3RydWN0IHJiX3Jvb3QgbXVsdGljYXN0X3RyZWU7CiAKLQlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBtY2FzdF90YXNrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBjYXJyaWVyX29uX3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IGZsdXNoX2xpZ2h0OwpAQCAtNDg0LDEwICs0NzcsMTAgQEAKIHZvaWQgaXBvaWJfcGtleV9ldmVudChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBpcG9pYl9pYl9kZXZfY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotaW50IGlwb2liX2liX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IGlwb2liX2liX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmbHVzaCk7CiBpbnQgaXBvaWJfaWJfZGV2X3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGlwb2liX2liX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGlwb2liX2liX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IGlwb2liX2liX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmbHVzaCk7CitpbnQgaXBvaWJfaWJfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZsdXNoKTsKIHZvaWQgaXBvaWJfcGtleV9kZXZfY2hlY2tfcHJlc2VuY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKIGludCBpcG9pYl9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWJfZGV2aWNlICpjYSwgaW50IHBvcnQpOwpAQCAtNDk5LDcgKzQ5Miw3IEBACiAKIHZvaWQgaXBvaWJfbWNhc3RfcmVzdGFydF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBpbnQgaXBvaWJfbWNhc3Rfc3RhcnRfdGhyZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotaW50IGlwb2liX21jYXN0X3N0b3BfdGhyZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworaW50IGlwb2liX21jYXN0X3N0b3BfdGhyZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmbHVzaCk7CiAKIHZvaWQgaXBvaWJfbWNhc3RfZGV2X2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIGlwb2liX21jYXN0X2Rldl9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfY20uYwppbmRleCA1Njk1OWFkLi45MzNlZmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jCkBAIC00NzQsNyArNDc0LDcgQEAKIAl9CiAKIAlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d3EsCisJcXVldWVfZGVsYXllZF93b3JrKGlwb2liX3dvcmtxdWV1ZSwKIAkJCSAgICZwcml2LT5jbS5zdGFsZV90YXNrLCBJUE9JQl9DTV9SWF9ERUxBWSk7CiAJLyogQWRkIHRoaXMgZW50cnkgdG8gcGFzc2l2ZSBpZHMgbGlzdCBoZWFkLCBidXQgZG8gbm90IHJlLWFkZCBpdAogCSAqIGlmIElCX0VWRU5UX1FQX0xBU1RfV1FFX1JFQUNIRUQgaGFzIG1vdmVkIGl0IHRvIGZsdXNoIGxpc3QuICovCkBAIC01NzYsNyArNTc2LDcgQEAKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCQlsaXN0X3NwbGljZV9pbml0KCZwcml2LT5jbS5yeF9kcmFpbl9saXN0LCAmcHJpdi0+Y20ucnhfcmVhcF9saXN0KTsKIAkJCWlwb2liX2NtX3N0YXJ0X3J4X2RyYWluKHByaXYpOwotCQkJcXVldWVfd29yayhwcml2LT53cSwgJnByaXYtPmNtLnJ4X3JlYXBfdGFzayk7CisJCQlxdWV1ZV93b3JrKGlwb2liX3dvcmtxdWV1ZSwgJnByaXYtPmNtLnJ4X3JlYXBfdGFzayk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCX0gZWxzZQogCQkJaXBvaWJfd2Fybihwcml2LCAiY20gcmVjdiBjb21wbGV0aW9uIGV2ZW50IHdpdGggd3JpZCAlZCAoPiAlZClcbiIsCkBAIC02MDMsNyArNjAzLDcgQEAKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCQkJCWxpc3RfbW92ZSgmcC0+bGlzdCwgJnByaXYtPmNtLnJ4X3JlYXBfbGlzdCk7CiAJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQkJCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZwcml2LT5jbS5yeF9yZWFwX3Rhc2spOworCQkJCXF1ZXVlX3dvcmsoaXBvaWJfd29ya3F1ZXVlLCAmcHJpdi0+Y20ucnhfcmVhcF90YXNrKTsKIAkJCX0KIAkJCXJldHVybjsKIAkJfQpAQCAtODI3LDcgKzgyNyw3IEBACiAKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJUE9JQl9GTEFHX0lOSVRJQUxJWkVELCAmdHgtPmZsYWdzKSkgewogCQkJbGlzdF9tb3ZlKCZ0eC0+bGlzdCwgJnByaXYtPmNtLnJlYXBfbGlzdCk7Ci0JCQlxdWV1ZV93b3JrKHByaXYtPndxLCAmcHJpdi0+Y20ucmVhcF90YXNrKTsKKwkJCXF1ZXVlX3dvcmsoaXBvaWJfd29ya3F1ZXVlLCAmcHJpdi0+Y20ucmVhcF90YXNrKTsKIAkJfQogCiAJCWNsZWFyX2JpdChJUE9JQl9GTEFHX09QRVJfVVAsICZ0eC0+ZmxhZ3MpOwpAQCAtMTI1NSw3ICsxMjU1LDcgQEAKIAogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KElQT0lCX0ZMQUdfSU5JVElBTElaRUQsICZ0eC0+ZmxhZ3MpKSB7CiAJCQlsaXN0X21vdmUoJnR4LT5saXN0LCAmcHJpdi0+Y20ucmVhcF9saXN0KTsKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZwcml2LT5jbS5yZWFwX3Rhc2spOworCQkJcXVldWVfd29yayhpcG9pYl93b3JrcXVldWUsICZwcml2LT5jbS5yZWFwX3Rhc2spOwogCQl9CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMTI4NCw3ICsxMjg0LDcgQEAKIAl0eC0+ZGV2ID0gZGV2OwogCWxpc3RfYWRkKCZ0eC0+bGlzdCwgJnByaXYtPmNtLnN0YXJ0X2xpc3QpOwogCXNldF9iaXQoSVBPSUJfRkxBR19JTklUSUFMSVpFRCwgJnR4LT5mbGFncyk7Ci0JcXVldWVfd29yayhwcml2LT53cSwgJnByaXYtPmNtLnN0YXJ0X3Rhc2spOworCXF1ZXVlX3dvcmsoaXBvaWJfd29ya3F1ZXVlLCAmcHJpdi0+Y20uc3RhcnRfdGFzayk7CiAJcmV0dXJuIHR4OwogfQogCkBAIC0xMjk1LDcgKzEyOTUsNyBAQAogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSVBPSUJfRkxBR19JTklUSUFMSVpFRCwgJnR4LT5mbGFncykpIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJbGlzdF9tb3ZlKCZ0eC0+bGlzdCwgJnByaXYtPmNtLnJlYXBfbGlzdCk7Ci0JCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZwcml2LT5jbS5yZWFwX3Rhc2spOworCQlxdWV1ZV93b3JrKGlwb2liX3dvcmtxdWV1ZSwgJnByaXYtPmNtLnJlYXBfdGFzayk7CiAJCWlwb2liX2RiZyhwcml2LCAiUmVhcCBjb25uZWN0aW9uIGZvciBnaWQgJXBJNlxuIiwKIAkJCSAgdHgtPm5laWdoLT5kYWRkciArIDQpOwogCQl0eC0+bmVpZ2ggPSBOVUxMOwpAQCAtMTQxNyw3ICsxNDE3LDcgQEAKIAogCXNrYl9xdWV1ZV90YWlsKCZwcml2LT5jbS5za2JfcXVldWUsIHNrYik7CiAJaWYgKGUpCi0JCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZwcml2LT5jbS5za2JfdGFzayk7CisJCXF1ZXVlX3dvcmsoaXBvaWJfd29ya3F1ZXVlLCAmcHJpdi0+Y20uc2tiX3Rhc2spOwogfQogCiBzdGF0aWMgdm9pZCBpcG9pYl9jbV9yeF9yZWFwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTE0NTAsNyArMTQ1MCw3IEBACiAJfQogCiAJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT5jbS5wYXNzaXZlX2lkcykpCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53cSwKKwkJcXVldWVfZGVsYXllZF93b3JrKGlwb2liX3dvcmtxdWV1ZSwKIAkJCQkgICAmcHJpdi0+Y20uc3RhbGVfdGFzaywgSVBPSUJfQ01fUlhfREVMQVkpOwogCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+bG9jayk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKaW5kZXggZmU2NWFiYi4uNzI2MjZjMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKQEAgLTY1NSw3ICs2NTUsNyBAQAogCV9faXBvaWJfcmVhcF9haChkZXYpOwogCiAJaWYgKCF0ZXN0X2JpdChJUE9JQl9TVE9QX1JFQVBFUiwgJnByaXYtPmZsYWdzKSkKLQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndxLCAmcHJpdi0+YWhfcmVhcF90YXNrLAorCQlxdWV1ZV9kZWxheWVkX3dvcmsoaXBvaWJfd29ya3F1ZXVlLCAmcHJpdi0+YWhfcmVhcF90YXNrLAogCQkJCSAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFopKTsKIH0KIApAQCAtNjY0LDcgKzY2NCw3IEBACiAJZHJhaW5fdHhfY3EoKHN0cnVjdCBuZXRfZGV2aWNlICopY3R4KTsKIH0KIAotaW50IGlwb2liX2liX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgaXBvaWJfaWJfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZsdXNoKQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJldDsKQEAgLTY5Niw3ICs2OTYsNyBAQAogCX0KIAogCWNsZWFyX2JpdChJUE9JQl9TVE9QX1JFQVBFUiwgJnByaXYtPmZsYWdzKTsKLQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d3EsICZwcml2LT5haF9yZWFwX3Rhc2ssCisJcXVldWVfZGVsYXllZF93b3JrKGlwb2liX3dvcmtxdWV1ZSwgJnByaXYtPmFoX3JlYXBfdGFzaywKIAkJCSAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoSFopKTsKIAogCWlmICghdGVzdF9hbmRfc2V0X2JpdChJUE9JQl9GTEFHX0lOSVRJQUxJWkVELCAmcHJpdi0+ZmxhZ3MpKQpAQCAtNzA2LDcgKzcwNiw3IEBACiBkZXZfc3RvcDoKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSVBPSUJfRkxBR19JTklUSUFMSVpFRCwgJnByaXYtPmZsYWdzKSkKIAkJbmFwaV9lbmFibGUoJnByaXYtPm5hcGkpOwotCWlwb2liX2liX2Rldl9zdG9wKGRldik7CisJaXBvaWJfaWJfZGV2X3N0b3AoZGV2LCBmbHVzaCk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC03MzgsNyArNzM4LDcgQEAKIAlyZXR1cm4gaXBvaWJfbWNhc3Rfc3RhcnRfdGhyZWFkKGRldik7CiB9CiAKLWludCBpcG9pYl9pYl9kZXZfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGlwb2liX2liX2Rldl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmbHVzaCkKIHsKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC03NDcsNyArNzQ3LDcgQEAKIAljbGVhcl9iaXQoSVBPSUJfRkxBR19PUEVSX1VQLCAmcHJpdi0+ZmxhZ3MpOwogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAKLQlpcG9pYl9tY2FzdF9zdG9wX3RocmVhZChkZXYpOworCWlwb2liX21jYXN0X3N0b3BfdGhyZWFkKGRldiwgZmx1c2gpOwogCWlwb2liX21jYXN0X2Rldl9mbHVzaChkZXYpOwogCiAJaXBvaWJfZmx1c2hfcGF0aHMoZGV2KTsKQEAgLTgwNyw3ICs4MDcsNyBAQAogCWxvY2FsX2JoX2VuYWJsZSgpOwogfQogCi1pbnQgaXBvaWJfaWJfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK2ludCBpcG9pYl9pYl9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZmx1c2gpCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaWJfcXBfYXR0ciBxcF9hdHRyOwpAQCAtODgwLDcgKzg4MCw4IEBACiAJLyogV2FpdCBmb3IgYWxsIEFIcyB0byBiZSByZWFwZWQgKi8KIAlzZXRfYml0KElQT0lCX1NUT1BfUkVBUEVSLCAmcHJpdi0+ZmxhZ3MpOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmFoX3JlYXBfdGFzayk7Ci0JZmx1c2hfd29ya3F1ZXVlKHByaXYtPndxKTsKKwlpZiAoZmx1c2gpCisJCWZsdXNoX3dvcmtxdWV1ZShpcG9pYl93b3JrcXVldWUpOwogCiAJYmVnaW4gPSBqaWZmaWVzOwogCkBAIC05MTcsNyArOTE4LDcgQEAKIAkJICAgICh1bnNpZ25lZCBsb25nKSBkZXYpOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApIHsKLQkJaWYgKGlwb2liX2liX2Rldl9vcGVuKGRldikpIHsKKwkJaWYgKGlwb2liX2liX2Rldl9vcGVuKGRldiwgMSkpIHsKIAkJCWlwb2liX3RyYW5zcG9ydF9kZXZfY2xlYW51cChkZXYpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KQEAgLTEwMzksMTIgKzEwNDAsMTIgQEAKIAl9CiAKIAlpZiAobGV2ZWwgPj0gSVBPSUJfRkxVU0hfTk9STUFMKQotCQlpcG9pYl9pYl9kZXZfZG93bihkZXYpOworCQlpcG9pYl9pYl9kZXZfZG93bihkZXYsIDApOwogCiAJaWYgKGxldmVsID09IElQT0lCX0ZMVVNIX0hFQVZZKSB7CiAJCWlmICh0ZXN0X2JpdChJUE9JQl9GTEFHX0lOSVRJQUxJWkVELCAmcHJpdi0+ZmxhZ3MpKQotCQkJaXBvaWJfaWJfZGV2X3N0b3AoZGV2KTsKLQkJaWYgKGlwb2liX2liX2Rldl9vcGVuKGRldikgIT0gMCkKKwkJCWlwb2liX2liX2Rldl9zdG9wKGRldiwgMCk7CisJCWlmIChpcG9pYl9pYl9kZXZfb3BlbihkZXYsIDApICE9IDApCiAJCQlyZXR1cm47CiAJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCiAJCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwpAQCAtMTA5Niw3ICsxMDk3LDcgQEAKIAkgKi8KIAlpcG9pYl9mbHVzaF9wYXRocyhkZXYpOwogCi0JaXBvaWJfbWNhc3Rfc3RvcF90aHJlYWQoZGV2KTsKKwlpcG9pYl9tY2FzdF9zdG9wX3RocmVhZChkZXYsIDEpOwogCWlwb2liX21jYXN0X2Rldl9mbHVzaChkZXYpOwogCiAJaXBvaWJfdHJhbnNwb3J0X2Rldl9jbGVhbnVwKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCmluZGV4IDZiYWQxN2QuLjU4YjVhYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbWFpbi5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAogCXNldF9iaXQoSVBPSUJfRkxBR19BRE1JTl9VUCwgJnByaXYtPmZsYWdzKTsKIAotCWlmIChpcG9pYl9pYl9kZXZfb3BlbihkZXYpKSB7CisJaWYgKGlwb2liX2liX2Rldl9vcGVuKGRldiwgMSkpIHsKIAkJaWYgKCF0ZXN0X2JpdChJUE9JQl9QS0VZX0FTU0lHTkVELCAmcHJpdi0+ZmxhZ3MpKQogCQkJcmV0dXJuIDA7CiAJCWdvdG8gZXJyX2Rpc2FibGU7CkBAIC0xMzksNyArMTM5LDcgQEAKIAlyZXR1cm4gMDsKIAogZXJyX3N0b3A6Ci0JaXBvaWJfaWJfZGV2X3N0b3AoZGV2KTsKKwlpcG9pYl9pYl9kZXZfc3RvcChkZXYsIDEpOwogCiBlcnJfZGlzYWJsZToKIAljbGVhcl9iaXQoSVBPSUJfRkxBR19BRE1JTl9VUCwgJnByaXYtPmZsYWdzKTsKQEAgLTE1Nyw4ICsxNTcsOCBAQAogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JaXBvaWJfaWJfZGV2X2Rvd24oZGV2KTsKLQlpcG9pYl9pYl9kZXZfc3RvcChkZXYpOworCWlwb2liX2liX2Rldl9kb3duKGRldiwgMSk7CisJaXBvaWJfaWJfZGV2X3N0b3AoZGV2LCAwKTsKIAogCWlmICghdGVzdF9iaXQoSVBPSUJfRkxBR19TVUJJTlRFUkZBQ0UsICZwcml2LT5mbGFncykpIHsKIAkJc3RydWN0IGlwb2liX2Rldl9wcml2ICpjcHJpdjsKQEAgLTgzOSw3ICs4MzksNyBAQAogCQlyZXR1cm47CiAJfQogCi0JcXVldWVfd29yayhwcml2LT53cSwgJnByaXYtPnJlc3RhcnRfdGFzayk7CisJcXVldWVfd29yayhpcG9pYl93b3JrcXVldWUsICZwcml2LT5yZXN0YXJ0X3Rhc2spOwogfQogCiBzdGF0aWMgdTMyIGlwb2liX2FkZHJfaGFzaChzdHJ1Y3QgaXBvaWJfbmVpZ2hfaGFzaCAqaHRibCwgdTggKmRhZGRyKQpAQCAtOTU0LDcgKzk1NCw3IEBACiAJX19pcG9pYl9yZWFwX25laWdoKHByaXYpOwogCiAJaWYgKCF0ZXN0X2JpdChJUE9JQl9TVE9QX05FSUdIX0dDLCAmcHJpdi0+ZmxhZ3MpKQotCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d3EsICZwcml2LT5uZWlnaF9yZWFwX3Rhc2ssCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhpcG9pYl93b3JrcXVldWUsICZwcml2LT5uZWlnaF9yZWFwX3Rhc2ssCiAJCQkJICAgYXJwX3RibC5nY19pbnRlcnZhbCk7CiB9CiAKQEAgLTExMzMsNyArMTEzMyw3IEBACiAKIAkvKiBzdGFydCBnYXJiYWdlIGNvbGxlY3Rpb24gKi8KIAljbGVhcl9iaXQoSVBPSUJfU1RPUF9ORUlHSF9HQywgJnByaXYtPmZsYWdzKTsKLQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d3EsICZwcml2LT5uZWlnaF9yZWFwX3Rhc2ssCisJcXVldWVfZGVsYXllZF93b3JrKGlwb2liX3dvcmtxdWV1ZSwgJnByaXYtPm5laWdoX3JlYXBfdGFzaywKIAkJCSAgIGFycF90YmwuZ2NfaW50ZXJ2YWwpOwogCiAJcmV0dXJuIDA7CkBAIC0xMjYyLDEzICsxMjYyLDE1IEBACiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAorCWlmIChpcG9pYl9uZWlnaF9oYXNoX2luaXQocHJpdikgPCAwKQorCQlnb3RvIG91dDsKIAkvKiBBbGxvY2F0ZSBSWC9UWCAicmluZ3MiIHRvIGhvbGQgcXVldWVkIHNrYnMgKi8KIAlwcml2LT5yeF9yaW5nID0Ja3phbGxvYyhpcG9pYl9yZWN2cV9zaXplICogc2l6ZW9mICpwcml2LT5yeF9yaW5nLAogCQkJCUdGUF9LRVJORUwpOwogCWlmICghcHJpdi0+cnhfcmluZykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIFJYIHJpbmcgKCVkIGVudHJpZXMpXG4iLAogCQkgICAgICAgY2EtPm5hbWUsIGlwb2liX3JlY3ZxX3NpemUpOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfbmVpZ2hfaGFzaF9jbGVhbnVwOwogCX0KIAogCXByaXYtPnR4X3JpbmcgPSB2emFsbG9jKGlwb2liX3NlbmRxX3NpemUgKiBzaXplb2YgKnByaXYtPnR4X3JpbmcpOwpAQCAtMTI4MywyNCArMTI4NSwxNiBAQAogCWlmIChpcG9pYl9pYl9kZXZfaW5pdChkZXYsIGNhLCBwb3J0KSkKIAkJZ290byBvdXRfdHhfcmluZ19jbGVhbnVwOwogCi0JLyoKLQkgKiBNdXN0IGJlIGFmdGVyIGlwb2liX2liX2Rldl9pbml0IHNvIHdlIGNhbiBhbGxvY2F0ZSBhIHBlcgotCSAqIGRldmljZSB3cSB0aGVyZSBhbmQgdXNlIGl0IGhlcmUKLQkgKi8KLQlpZiAoaXBvaWJfbmVpZ2hfaGFzaF9pbml0KHByaXYpIDwgMCkKLQkJZ290byBvdXRfZGV2X3VuaW5pdDsKLQogCXJldHVybiAwOwogCi1vdXRfZGV2X3VuaW5pdDoKLQlpcG9pYl9pYl9kZXZfY2xlYW51cChkZXYpOwotCiBvdXRfdHhfcmluZ19jbGVhbnVwOgogCXZmcmVlKHByaXYtPnR4X3JpbmcpOwogCiBvdXRfcnhfcmluZ19jbGVhbnVwOgogCWtmcmVlKHByaXYtPnJ4X3JpbmcpOwogCitvdXRfbmVpZ2hfaGFzaF9jbGVhbnVwOgorCWlwb2liX25laWdoX2hhc2hfdW5pbml0KGRldik7CiBvdXQ6CiAJcmV0dXJuIC1FTk9NRU07CiB9CkBAIC0xMzIzLDEyICsxMzE3LDYgQEAKIAl9CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSgmaGVhZCk7CiAKLQkvKgotCSAqIE11c3QgYmUgYmVmb3JlIGlwb2liX2liX2Rldl9jbGVhbnVwIG9yIHdlIGRlbGV0ZSBhbiBpbiB1c2UKLQkgKiB3b3JrIHF1ZXVlCi0JICovCi0JaXBvaWJfbmVpZ2hfaGFzaF91bmluaXQoZGV2KTsKLQogCWlwb2liX2liX2Rldl9jbGVhbnVwKGRldik7CiAKIAlrZnJlZShwcml2LT5yeF9yaW5nKTsKQEAgLTEzMzYsNiArMTMyNCw4IEBACiAKIAlwcml2LT5yeF9yaW5nID0gTlVMTDsKIAlwcml2LT50eF9yaW5nID0gTlVMTDsKKworCWlwb2liX25laWdoX2hhc2hfdW5pbml0KGRldik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBpcG9pYl9oZWFkZXJfb3BzID0gewpAQCAtMTY0Niw3ICsxNjM2LDcgQEAKIAkvKiBTdG9wIEdDIGlmIHN0YXJ0ZWQgYmVmb3JlIGZsdXNoICovCiAJc2V0X2JpdChJUE9JQl9TVE9QX05FSUdIX0dDLCAmcHJpdi0+ZmxhZ3MpOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPm5laWdoX3JlYXBfdGFzayk7Ci0JZmx1c2hfd29ya3F1ZXVlKHByaXYtPndxKTsKKwlmbHVzaF93b3JrcXVldWUoaXBvaWJfd29ya3F1ZXVlKTsKIAogZXZlbnRfZmFpbGVkOgogCWlwb2liX2Rldl9jbGVhbnVwKHByaXYtPmRldik7CkBAIC0xNzE3LDcgKzE3MDcsNyBAQAogCQkvKiBTdG9wIEdDICovCiAJCXNldF9iaXQoSVBPSUJfU1RPUF9ORUlHSF9HQywgJnByaXYtPmZsYWdzKTsKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+bmVpZ2hfcmVhcF90YXNrKTsKLQkJZmx1c2hfd29ya3F1ZXVlKHByaXYtPndxKTsKKwkJZmx1c2hfd29ya3F1ZXVlKGlwb2liX3dvcmtxdWV1ZSk7CiAKIAkJdW5yZWdpc3Rlcl9uZXRkZXYocHJpdi0+ZGV2KTsKIAkJZnJlZV9uZXRkZXYocHJpdi0+ZGV2KTsKQEAgLTE3NTgsMTMgKzE3NDgsOCBAQAogCSAqIHVucmVnaXN0ZXJfbmV0ZGV2KCkgYW5kIGxpbmt3YXRjaF9ldmVudCB0YWtlIHRoZSBydG5sIGxvY2ssCiAJICogc28gZmx1c2hfc2NoZWR1bGVkX3dvcmsoKSBjYW4gZGVhZGxvY2sgZHVyaW5nIGRldmljZQogCSAqIHJlbW92YWwuCi0JICoKLQkgKiBJbiBhZGRpdGlvbiwgYnJpbmdpbmcgb25lIGRldmljZSB1cCBhbmQgYW5vdGhlciBkb3duIGF0IHRoZQotCSAqIHNhbWUgdGltZSBjYW4gZGVhZGxvY2sgYSBzaW5nbGUgd29ya3F1ZXVlLCBzbyB3ZSBoYXZlIHRoaXMKLQkgKiBnbG9iYWwgZmFsbGJhY2sgd29ya3F1ZXVlLCBidXQgd2UgYWxzbyBhdHRlbXB0IHRvIG9wZW4gYQotCSAqIHBlciBkZXZpY2Ugd29ya3F1ZXVlIGVhY2ggdGltZSB3ZSBicmluZyBhbiBpbnRlcmZhY2UgdXAKIAkgKi8KLQlpcG9pYl93b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiaXBvaWJfZmx1c2giKTsKKwlpcG9pYl93b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiaXBvaWIiKTsKIAlpZiAoIWlwb2liX3dvcmtxdWV1ZSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9mczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCmluZGV4IGJjNTBkZDAuLmZmYjgzYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwpAQCAtMTkwLDYgKzE5MCwxMiBAQAogCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogCQlwcml2LT50eF93ci53ci51ZC5yZW1vdGVfcWtleSA9IHByaXYtPnFrZXk7CiAJCXNldF9xa2V5ID0gMTsKKworCQlpZiAoIWlwb2liX2NtX2FkbWluX2VuYWJsZWQoZGV2KSkgeworCQkJcnRubF9sb2NrKCk7CisJCQlkZXZfc2V0X210dShkZXYsIG1pbihwcml2LT5tY2FzdF9tdHUsIHByaXYtPmFkbWluX210dSkpOworCQkJcnRubF91bmxvY2soKTsKKwkJfQogCX0KIAogCWlmICghdGVzdF9iaXQoSVBPSUJfTUNBU1RfRkxBR19TRU5ET05MWSwgJm1jYXN0LT5mbGFncykpIHsKQEAgLTI3MSwyNyArMjc3LDE2IEBACiAJc3RydWN0IGlwb2liX21jYXN0ICptY2FzdCA9IG11bHRpY2FzdC0+Y29udGV4dDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbWNhc3QtPmRldjsKIAotCS8qCi0JICogV2UgaGF2ZSB0byB0YWtlIHRoZSBtdXRleCB0byBmb3JjZSBtY2FzdF9zZW5kb25seV9qb2luIHRvCi0JICogcmV0dXJuIGZyb20gaWJfc2FfbXVsdGljYXN0X2pvaW4gYW5kIHNldCBtY2FzdC0+bWMgdG8gYQotCSAqIHZhbGlkIHZhbHVlLiAgT3RoZXJ3aXNlIHdlIHdlcmUgcmFjaW5nIHdpdGggb3Vyc2VsdmVzIGluCi0JICogdGhhdCB3ZSBtaWdodCBmYWlsIGhlcmUsIGJ1dCBnZXQgYSB2YWxpZCByZXR1cm4gZnJvbQotCSAqIGliX3NhX211bHRpY2FzdF9qb2luIGFmdGVyIHdlIGhhZCBjbGVhcmVkIG1jYXN0LT5tYyBoZXJlLAotCSAqIHJlc3VsdGluZyBpbiBtaXMtbWF0Y2hlZCBqb2lucyBhbmQgbGVhdmVzIGFuZCBhIGRlYWRsb2NrCi0JICovCi0JbXV0ZXhfbG9jaygmbWNhc3RfbXV0ZXgpOwotCiAJLyogV2UgdHJhcCBmb3IgcG9ydCBldmVudHMgb3Vyc2VsdmVzLiAqLwogCWlmIChzdGF0dXMgPT0gLUVORVRSRVNFVCkKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCiAJaWYgKCFzdGF0dXMpCiAJCXN0YXR1cyA9IGlwb2liX21jYXN0X2pvaW5fZmluaXNoKG1jYXN0LCAmbXVsdGljYXN0LT5yZWMpOwogCiAJaWYgKHN0YXR1cykgewogCQlpZiAobWNhc3QtPmxvZ2NvdW50KysgPCAyMCkKLQkJCWlwb2liX2RiZ19tY2FzdChuZXRkZXZfcHJpdihkZXYpLCAic2VuZG9ubHkgbXVsdGljYXN0ICIKLQkJCQkJImpvaW4gZmFpbGVkIGZvciAlcEk2LCBzdGF0dXMgJWRcbiIsCisJCQlpcG9pYl9kYmdfbWNhc3QobmV0ZGV2X3ByaXYoZGV2KSwgIm11bHRpY2FzdCBqb2luIGZhaWxlZCBmb3IgJXBJNiwgc3RhdHVzICVkXG4iLAogCQkJCQltY2FzdC0+bWNtZW1iZXIubWdpZC5yYXcsIHN0YXR1cyk7CiAKIAkJLyogRmx1c2ggb3V0IGFueSBxdWV1ZWQgcGFja2V0cyAqLwpAQCAtMzAxLDE1ICsyOTYsMTEgQEAKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYl9kZXF1ZXVlKCZtY2FzdC0+cGt0X3F1ZXVlKSk7CiAJCX0KIAkJbmV0aWZfdHhfdW5sb2NrX2JoKGRldik7CisKKwkJLyogQ2xlYXIgdGhlIGJ1c3kgZmxhZyBzbyB3ZSB0cnkgYWdhaW4gKi8KKwkJc3RhdHVzID0gdGVzdF9hbmRfY2xlYXJfYml0KElQT0lCX01DQVNUX0ZMQUdfQlVTWSwKKwkJCQkJICAgICZtY2FzdC0+ZmxhZ3MpOwogCX0KLW91dDoKLQljbGVhcl9iaXQoSVBPSUJfTUNBU1RfRkxBR19CVVNZLCAmbWNhc3QtPmZsYWdzKTsKLQlpZiAoc3RhdHVzKQotCQltY2FzdC0+bWMgPSBOVUxMOwotCWNvbXBsZXRlKCZtY2FzdC0+ZG9uZSk7Ci0JaWYgKHN0YXR1cyA9PSAtRU5FVFJFU0VUKQotCQlzdGF0dXMgPSAwOwotCW11dGV4X3VubG9jaygmbWNhc3RfbXV0ZXgpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTMyNywxNCArMzE4LDEyIEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIXRlc3RfYml0KElQT0lCX0ZMQUdfT1BFUl9VUCwgJnByaXYtPmZsYWdzKSkgewotCQlpcG9pYl9kYmdfbWNhc3QocHJpdiwgImRldmljZSBzaHV0dGluZyBkb3duLCBubyBzZW5kb25seSAiCi0JCQkJIm11bHRpY2FzdCBqb2luc1xuIik7CisJCWlwb2liX2RiZ19tY2FzdChwcml2LCAiZGV2aWNlIHNodXR0aW5nIGRvd24sIG5vIG11bHRpY2FzdCBqb2luc1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWlmICh0ZXN0X2JpdChJUE9JQl9NQ0FTVF9GTEFHX0JVU1ksICZtY2FzdC0+ZmxhZ3MpKSB7Ci0JCWlwb2liX2RiZ19tY2FzdChwcml2LCAibXVsdGljYXN0IGVudHJ5IGJ1c3ksIHNraXBwaW5nICIKLQkJCQkic2VuZG9ubHkgam9pblxuIik7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoSVBPSUJfTUNBU1RfRkxBR19CVVNZLCAmbWNhc3QtPmZsYWdzKSkgeworCQlpcG9pYl9kYmdfbWNhc3QocHJpdiwgIm11bHRpY2FzdCBlbnRyeSBidXN5LCBza2lwcGluZ1xuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0zNDIsOSArMzMxLDYgQEAKIAlyZWMucG9ydF9naWQgPSBwcml2LT5sb2NhbF9naWQ7CiAJcmVjLnBrZXkgICAgID0gY3B1X3RvX2JlMTYocHJpdi0+cGtleSk7CiAKLQltdXRleF9sb2NrKCZtY2FzdF9tdXRleCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZtY2FzdC0+ZG9uZSk7Ci0Jc2V0X2JpdChJUE9JQl9NQ0FTVF9GTEFHX0JVU1ksICZtY2FzdC0+ZmxhZ3MpOwogCW1jYXN0LT5tYyA9IGliX3NhX2pvaW5fbXVsdGljYXN0KCZpcG9pYl9zYV9jbGllbnQsIHByaXYtPmNhLAogCQkJCQkgcHJpdi0+cG9ydCwgJnJlYywKIAkJCQkJIElCX1NBX01DTUVNQkVSX1JFQ19NR0lECXwKQEAgLTM1NywxNCArMzQzLDEyIEBACiAJaWYgKElTX0VSUihtY2FzdC0+bWMpKSB7CiAJCXJldCA9IFBUUl9FUlIobWNhc3QtPm1jKTsKIAkJY2xlYXJfYml0KElQT0lCX01DQVNUX0ZMQUdfQlVTWSwgJm1jYXN0LT5mbGFncyk7Ci0JCWNvbXBsZXRlKCZtY2FzdC0+ZG9uZSk7Ci0JCWlwb2liX3dhcm4ocHJpdiwgImliX3NhX2pvaW5fbXVsdGljYXN0IGZvciBzZW5kb25seSBqb2luICIKLQkJCSAgICJmYWlsZWQgKHJldCA9ICVkKVxuIiwgcmV0KTsKKwkJaXBvaWJfd2Fybihwcml2LCAiaWJfc2Ffam9pbl9tdWx0aWNhc3QgZmFpbGVkIChyZXQgPSAlZClcbiIsCisJCQkgICByZXQpOwogCX0gZWxzZSB7Ci0JCWlwb2liX2RiZ19tY2FzdChwcml2LCAibm8gbXVsdGljYXN0IHJlY29yZCBmb3IgJXBJNiwgc3RhcnRpbmcgIgotCQkJCSJzZW5kb25seSBqb2luXG4iLCBtY2FzdC0+bWNtZW1iZXIubWdpZC5yYXcpOworCQlpcG9pYl9kYmdfbWNhc3QocHJpdiwgIm5vIG11bHRpY2FzdCByZWNvcmQgZm9yICVwSTYsIHN0YXJ0aW5nIGpvaW5cbiIsCisJCQkJbWNhc3QtPm1jbWVtYmVyLm1naWQucmF3KTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZtY2FzdF9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzc1LDI5ICszNTksMTggQEAKIAkJCQkJCSAgIGNhcnJpZXJfb25fdGFzayk7CiAJc3RydWN0IGliX3BvcnRfYXR0ciBhdHRyOwogCisJLyoKKwkgKiBUYWtlIHJ0bmxfbG9jayB0byBhdm9pZCByYWNpbmcgd2l0aCBpcG9pYl9zdG9wKCkgYW5kCisJICogdHVybmluZyB0aGUgY2FycmllciBiYWNrIG9uIHdoaWxlIGEgZGV2aWNlIGlzIGJlaW5nCisJICogcmVtb3ZlZC4KKwkgKi8KIAlpZiAoaWJfcXVlcnlfcG9ydChwcml2LT5jYSwgcHJpdi0+cG9ydCwgJmF0dHIpIHx8CiAJICAgIGF0dHIuc3RhdGUgIT0gSUJfUE9SVF9BQ1RJVkUpIHsKIAkJaXBvaWJfZGJnKHByaXYsICJLZWVwaW5nIGNhcnJpZXIgb2ZmIHVudGlsIElCIHBvcnQgaXMgYWN0aXZlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCS8qCi0JICogVGFrZSBydG5sX2xvY2sgdG8gYXZvaWQgcmFjaW5nIHdpdGggaXBvaWJfc3RvcCgpIGFuZAotCSAqIHR1cm5pbmcgdGhlIGNhcnJpZXIgYmFjayBvbiB3aGlsZSBhIGRldmljZSBpcyBiZWluZwotCSAqIHJlbW92ZWQuICBIb3dldmVyLCBpcG9pYl9zdG9wKCkgd2lsbCBhdHRlbXB0IHRvIGZsdXNoCi0JICogdGhlIHdvcmtxdWV1ZSB3aGlsZSBob2xkaW5nIHRoZSBydG5sIGxvY2ssIHNvIGxvb3AKLQkgKiBvbiB0cnlsb2NrIHVudGlsIGVpdGhlciB3ZSBnZXQgdGhlIGxvY2sgb3Igd2Ugc2VlCi0JICogRkxBR19BRE1JTl9VUCBnbyBhd2F5IGFzIHRoYXQgc2lnbmFscyB0aGF0IHdlIGFyZSBiYWlsaW5nCi0JICogYW5kIGNhbiBzYWZlbHkgaWdub3JlIHRoZSBjYXJyaWVyIG9uIHdvcmsuCi0JICovCi0Jd2hpbGUgKCFydG5sX3RyeWxvY2soKSkgewotCQlpZiAoIXRlc3RfYml0KElQT0lCX0ZMQUdfQURNSU5fVVAsICZwcml2LT5mbGFncykpCi0JCQlyZXR1cm47Ci0JCWVsc2UKLQkJCW1zbGVlcCgyMCk7Ci0JfQotCWlmICghaXBvaWJfY21fYWRtaW5fZW5hYmxlZChwcml2LT5kZXYpKQotCQlkZXZfc2V0X210dShwcml2LT5kZXYsIG1pbihwcml2LT5tY2FzdF9tdHUsIHByaXYtPmFkbWluX210dSkpOworCXJ0bmxfbG9jaygpOwogCW5ldGlmX2NhcnJpZXJfb24ocHJpdi0+ZGV2KTsKIAlydG5sX3VubG9jaygpOwogfQpAQCAtNDEyLDYzICszODUsNjAgQEAKIAlpcG9pYl9kYmdfbWNhc3QocHJpdiwgImpvaW4gY29tcGxldGlvbiBmb3IgJXBJNiAoc3RhdHVzICVkKVxuIiwKIAkJCW1jYXN0LT5tY21lbWJlci5tZ2lkLnJhdywgc3RhdHVzKTsKIAotCS8qCi0JICogV2UgaGF2ZSB0byB0YWtlIHRoZSBtdXRleCB0byBmb3JjZSBtY2FzdF9qb2luIHRvCi0JICogcmV0dXJuIGZyb20gaWJfc2FfbXVsdGljYXN0X2pvaW4gYW5kIHNldCBtY2FzdC0+bWMgdG8gYQotCSAqIHZhbGlkIHZhbHVlLiAgT3RoZXJ3aXNlIHdlIHdlcmUgcmFjaW5nIHdpdGggb3Vyc2VsdmVzIGluCi0JICogdGhhdCB3ZSBtaWdodCBmYWlsIGhlcmUsIGJ1dCBnZXQgYSB2YWxpZCByZXR1cm4gZnJvbQotCSAqIGliX3NhX211bHRpY2FzdF9qb2luIGFmdGVyIHdlIGhhZCBjbGVhcmVkIG1jYXN0LT5tYyBoZXJlLAotCSAqIHJlc3VsdGluZyBpbiBtaXMtbWF0Y2hlZCBqb2lucyBhbmQgbGVhdmVzIGFuZCBhIGRlYWRsb2NrCi0JICovCi0JbXV0ZXhfbG9jaygmbWNhc3RfbXV0ZXgpOwotCiAJLyogV2UgdHJhcCBmb3IgcG9ydCBldmVudHMgb3Vyc2VsdmVzLiAqLwotCWlmIChzdGF0dXMgPT0gLUVORVRSRVNFVCkKKwlpZiAoc3RhdHVzID09IC1FTkVUUkVTRVQpIHsKKwkJc3RhdHVzID0gMDsKIAkJZ290byBvdXQ7CisJfQogCiAJaWYgKCFzdGF0dXMpCiAJCXN0YXR1cyA9IGlwb2liX21jYXN0X2pvaW5fZmluaXNoKG1jYXN0LCAmbXVsdGljYXN0LT5yZWMpOwogCiAJaWYgKCFzdGF0dXMpIHsKIAkJbWNhc3QtPmJhY2tvZmYgPSAxOworCQltdXRleF9sb2NrKCZtY2FzdF9tdXRleCk7CiAJCWlmICh0ZXN0X2JpdChJUE9JQl9NQ0FTVF9SVU4sICZwcml2LT5mbGFncykpCi0JCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d3EsICZwcml2LT5tY2FzdF90YXNrLCAwKTsKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhpcG9pYl93b3JrcXVldWUsCisJCQkJCSAgICZwcml2LT5tY2FzdF90YXNrLCAwKTsKKwkJbXV0ZXhfdW5sb2NrKCZtY2FzdF9tdXRleCk7CiAKIAkJLyoKLQkJICogRGVmZXIgY2FycmllciBvbiB3b3JrIHRvIHByaXYtPndxIHRvIGF2b2lkIGEKKwkJICogRGVmZXIgY2FycmllciBvbiB3b3JrIHRvIGlwb2liX3dvcmtxdWV1ZSB0byBhdm9pZCBhCiAJCSAqIGRlYWRsb2NrIG9uIHJ0bmxfbG9jayBoZXJlLgogCQkgKi8KIAkJaWYgKG1jYXN0ID09IHByaXYtPmJyb2FkY2FzdCkKLQkJCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZwcml2LT5jYXJyaWVyX29uX3Rhc2spOwotCX0gZWxzZSB7Ci0JCWlmIChtY2FzdC0+bG9nY291bnQrKyA8IDIwKSB7Ci0JCQlpZiAoc3RhdHVzID09IC1FVElNRURPVVQgfHwgc3RhdHVzID09IC1FQUdBSU4pIHsKLQkJCQlpcG9pYl9kYmdfbWNhc3QocHJpdiwgIm11bHRpY2FzdCBqb2luIGZhaWxlZCBmb3IgJXBJNiwgc3RhdHVzICVkXG4iLAotCQkJCQkJbWNhc3QtPm1jbWVtYmVyLm1naWQucmF3LCBzdGF0dXMpOwotCQkJfSBlbHNlIHsKLQkJCQlpcG9pYl93YXJuKHByaXYsICJtdWx0aWNhc3Qgam9pbiBmYWlsZWQgZm9yICVwSTYsIHN0YXR1cyAlZFxuIiwKLQkJCQkJICAgbWNhc3QtPm1jbWVtYmVyLm1naWQucmF3LCBzdGF0dXMpOwotCQkJfQotCQl9CisJCQlxdWV1ZV93b3JrKGlwb2liX3dvcmtxdWV1ZSwgJnByaXYtPmNhcnJpZXJfb25fdGFzayk7CiAKLQkJbWNhc3QtPmJhY2tvZmYgKj0gMjsKLQkJaWYgKG1jYXN0LT5iYWNrb2ZmID4gSVBPSUJfTUFYX0JBQ0tPRkZfU0VDT05EUykKLQkJCW1jYXN0LT5iYWNrb2ZmID0gSVBPSUJfTUFYX0JBQ0tPRkZfU0VDT05EUzsKLQl9Ci1vdXQ6Ci0Jc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0JY2xlYXJfYml0KElQT0lCX01DQVNUX0ZMQUdfQlVTWSwgJm1jYXN0LT5mbGFncyk7Ci0JaWYgKHN0YXR1cykKLQkJbWNhc3QtPm1jID0gTlVMTDsKLQljb21wbGV0ZSgmbWNhc3QtPmRvbmUpOwotCWlmIChzdGF0dXMgPT0gLUVORVRSRVNFVCkKIAkJc3RhdHVzID0gMDsKLQlpZiAoc3RhdHVzICYmIHRlc3RfYml0KElQT0lCX01DQVNUX1JVTiwgJnByaXYtPmZsYWdzKSkKLQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndxLCAmcHJpdi0+bWNhc3RfdGFzaywKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG1jYXN0LT5sb2djb3VudCsrIDwgMjApIHsKKwkJaWYgKHN0YXR1cyA9PSAtRVRJTUVET1VUIHx8IHN0YXR1cyA9PSAtRUFHQUlOKSB7CisJCQlpcG9pYl9kYmdfbWNhc3QocHJpdiwgIm11bHRpY2FzdCBqb2luIGZhaWxlZCBmb3IgJXBJNiwgc3RhdHVzICVkXG4iLAorCQkJCQltY2FzdC0+bWNtZW1iZXIubWdpZC5yYXcsIHN0YXR1cyk7CisJCX0gZWxzZSB7CisJCQlpcG9pYl93YXJuKHByaXYsICJtdWx0aWNhc3Qgam9pbiBmYWlsZWQgZm9yICVwSTYsIHN0YXR1cyAlZFxuIiwKKwkJCQkgICBtY2FzdC0+bWNtZW1iZXIubWdpZC5yYXcsIHN0YXR1cyk7CisJCX0KKwl9CisKKwltY2FzdC0+YmFja29mZiAqPSAyOworCWlmIChtY2FzdC0+YmFja29mZiA+IElQT0lCX01BWF9CQUNLT0ZGX1NFQ09ORFMpCisJCW1jYXN0LT5iYWNrb2ZmID0gSVBPSUJfTUFYX0JBQ0tPRkZfU0VDT05EUzsKKworCS8qIENsZWFyIHRoZSBidXN5IGZsYWcgc28gd2UgdHJ5IGFnYWluICovCisJc3RhdHVzID0gdGVzdF9hbmRfY2xlYXJfYml0KElQT0lCX01DQVNUX0ZMQUdfQlVTWSwgJm1jYXN0LT5mbGFncyk7CisKKwltdXRleF9sb2NrKCZtY2FzdF9tdXRleCk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJaWYgKHRlc3RfYml0KElQT0lCX01DQVNUX1JVTiwgJnByaXYtPmZsYWdzKSkKKwkJcXVldWVfZGVsYXllZF93b3JrKGlwb2liX3dvcmtxdWV1ZSwgJnByaXYtPm1jYXN0X3Rhc2ssCiAJCQkJICAgbWNhc3QtPmJhY2tvZmYgKiBIWik7CiAJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAltdXRleF91bmxvY2soJm1jYXN0X211dGV4KTsKLQorb3V0OgorCWNvbXBsZXRlKCZtY2FzdC0+ZG9uZSk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNTE3LDkgKzQ4NywxMCBAQAogCQlyZWMuaG9wX2xpbWl0CSAgPSBwcml2LT5icm9hZGNhc3QtPm1jbWVtYmVyLmhvcF9saW1pdDsKIAl9CiAKLQltdXRleF9sb2NrKCZtY2FzdF9tdXRleCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZtY2FzdC0+ZG9uZSk7CiAJc2V0X2JpdChJUE9JQl9NQ0FTVF9GTEFHX0JVU1ksICZtY2FzdC0+ZmxhZ3MpOworCWluaXRfY29tcGxldGlvbigmbWNhc3QtPmRvbmUpOworCXNldF9iaXQoSVBPSUJfTUNBU1RfSk9JTl9TVEFSVEVELCAmbWNhc3QtPmZsYWdzKTsKKwogCW1jYXN0LT5tYyA9IGliX3NhX2pvaW5fbXVsdGljYXN0KCZpcG9pYl9zYV9jbGllbnQsIHByaXYtPmNhLCBwcml2LT5wb3J0LAogCQkJCQkgJnJlYywgY29tcF9tYXNrLCBHRlBfS0VSTkVMLAogCQkJCQkgaXBvaWJfbWNhc3Rfam9pbl9jb21wbGV0ZSwgbWNhc3QpOwpAQCAtNTMzLDExICs1MDQsMTMgQEAKIAkJaWYgKG1jYXN0LT5iYWNrb2ZmID4gSVBPSUJfTUFYX0JBQ0tPRkZfU0VDT05EUykKIAkJCW1jYXN0LT5iYWNrb2ZmID0gSVBPSUJfTUFYX0JBQ0tPRkZfU0VDT05EUzsKIAorCQltdXRleF9sb2NrKCZtY2FzdF9tdXRleCk7CiAJCWlmICh0ZXN0X2JpdChJUE9JQl9NQ0FTVF9SVU4sICZwcml2LT5mbGFncykpCi0JCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d3EsICZwcml2LT5tY2FzdF90YXNrLAorCQkJcXVldWVfZGVsYXllZF93b3JrKGlwb2liX3dvcmtxdWV1ZSwKKwkJCQkJICAgJnByaXYtPm1jYXN0X3Rhc2ssCiAJCQkJCSAgIG1jYXN0LT5iYWNrb2ZmICogSFopOworCQltdXRleF91bmxvY2soJm1jYXN0X211dGV4KTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZtY2FzdF9tdXRleCk7CiB9CiAKIHZvaWQgaXBvaWJfbWNhc3Rfam9pbl90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTU3NCw4ICs1NDcsOCBAQAogCQkJaXBvaWJfd2Fybihwcml2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGJyb2FkY2FzdCBncm91cFxuIik7CiAJCQltdXRleF9sb2NrKCZtY2FzdF9tdXRleCk7CiAJCQlpZiAodGVzdF9iaXQoSVBPSUJfTUNBU1RfUlVOLCAmcHJpdi0+ZmxhZ3MpKQotCQkJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53cSwgJnByaXYtPm1jYXN0X3Rhc2ssCi0JCQkJCQkgICBIWik7CisJCQkJcXVldWVfZGVsYXllZF93b3JrKGlwb2liX3dvcmtxdWV1ZSwKKwkJCQkJCSAgICZwcml2LT5tY2FzdF90YXNrLCBIWik7CiAJCQltdXRleF91bmxvY2soJm1jYXN0X211dGV4KTsKIAkJCXJldHVybjsKIAkJfQpAQCAtNTkwLDggKzU2Myw3IEBACiAJfQogCiAJaWYgKCF0ZXN0X2JpdChJUE9JQl9NQ0FTVF9GTEFHX0FUVEFDSEVELCAmcHJpdi0+YnJvYWRjYXN0LT5mbGFncykpIHsKLQkJaWYgKElTX0VSUl9PUl9OVUxMKHByaXYtPmJyb2FkY2FzdC0+bWMpICYmCi0JCSAgICAhdGVzdF9iaXQoSVBPSUJfTUNBU1RfRkxBR19CVVNZLCAmcHJpdi0+YnJvYWRjYXN0LT5mbGFncykpCisJCWlmICghdGVzdF9iaXQoSVBPSUJfTUNBU1RfRkxBR19CVVNZLCAmcHJpdi0+YnJvYWRjYXN0LT5mbGFncykpCiAJCQlpcG9pYl9tY2FzdF9qb2luKGRldiwgcHJpdi0+YnJvYWRjYXN0LCAwKTsKIAkJcmV0dXJuOwogCX0KQEAgLTU5OSwzMyArNTcxLDIzIEBACiAJd2hpbGUgKDEpIHsKIAkJc3RydWN0IGlwb2liX21jYXN0ICptY2FzdCA9IE5VTEw7CiAKLQkJLyoKLQkJICogTmVlZCB0aGUgbXV0ZXggc28gb3VyIGZsYWdzIGFyZSBjb25zaXN0ZW50LCBuZWVkIHRoZQotCQkgKiBwcml2LT5sb2NrIHNvIHdlIGRvbid0IHJhY2Ugd2l0aCBsaXN0IHJlbW92YWxzIGluIGVpdGhlcgotCQkgKiBtY2FzdF9kZXZfZmx1c2ggb3IgbWNhc3RfcmVzdGFydF90YXNrCi0JCSAqLwotCQltdXRleF9sb2NrKCZtY2FzdF9tdXRleCk7CiAJCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1jYXN0LCAmcHJpdi0+bXVsdGljYXN0X2xpc3QsIGxpc3QpIHsKLQkJCWlmIChJU19FUlJfT1JfTlVMTChtY2FzdC0+bWMpICYmCi0JCQkgICAgIXRlc3RfYml0KElQT0lCX01DQVNUX0ZMQUdfQlVTWSwgJm1jYXN0LT5mbGFncykgJiYKLQkJCSAgICAhdGVzdF9iaXQoSVBPSUJfTUNBU1RfRkxBR19BVFRBQ0hFRCwgJm1jYXN0LT5mbGFncykpIHsKKwkJCWlmICghdGVzdF9iaXQoSVBPSUJfTUNBU1RfRkxBR19TRU5ET05MWSwgJm1jYXN0LT5mbGFncykKKwkJCSAgICAmJiAhdGVzdF9iaXQoSVBPSUJfTUNBU1RfRkxBR19CVVNZLCAmbWNhc3QtPmZsYWdzKQorCQkJICAgICYmICF0ZXN0X2JpdChJUE9JQl9NQ0FTVF9GTEFHX0FUVEFDSEVELCAmbWNhc3QtPmZsYWdzKSkgewogCQkJCS8qIEZvdW5kIHRoZSBuZXh0IHVuam9pbmVkIGdyb3VwICovCiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQkJbXV0ZXhfdW5sb2NrKCZtY2FzdF9tdXRleCk7CiAKIAkJaWYgKCZtY2FzdC0+bGlzdCA9PSAmcHJpdi0+bXVsdGljYXN0X2xpc3QpIHsKIAkJCS8qIEFsbCBkb25lICovCiAJCQlicmVhazsKIAkJfQogCi0JCWlmICh0ZXN0X2JpdChJUE9JQl9NQ0FTVF9GTEFHX1NFTkRPTkxZLCAmbWNhc3QtPmZsYWdzKSkKLQkJCWlwb2liX21jYXN0X3NlbmRvbmx5X2pvaW4obWNhc3QpOwotCQllbHNlCi0JCQlpcG9pYl9tY2FzdF9qb2luKGRldiwgbWNhc3QsIDEpOworCQlpcG9pYl9tY2FzdF9qb2luKGRldiwgbWNhc3QsIDEpOwogCQlyZXR1cm47CiAJfQogCkBAIC02NDIsMTMgKzYwNCwxMyBAQAogCiAJbXV0ZXhfbG9jaygmbWNhc3RfbXV0ZXgpOwogCWlmICghdGVzdF9hbmRfc2V0X2JpdChJUE9JQl9NQ0FTVF9SVU4sICZwcml2LT5mbGFncykpCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53cSwgJnByaXYtPm1jYXN0X3Rhc2ssIDApOworCQlxdWV1ZV9kZWxheWVkX3dvcmsoaXBvaWJfd29ya3F1ZXVlLCAmcHJpdi0+bWNhc3RfdGFzaywgMCk7CiAJbXV0ZXhfdW5sb2NrKCZtY2FzdF9tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGlwb2liX21jYXN0X3N0b3BfdGhyZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitpbnQgaXBvaWJfbWNhc3Rfc3RvcF90aHJlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZsdXNoKQogewogCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTY1OSw3ICs2MjEsOCBAQAogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPm1jYXN0X3Rhc2spOwogCW11dGV4X3VubG9jaygmbWNhc3RfbXV0ZXgpOwogCi0JZmx1c2hfd29ya3F1ZXVlKHByaXYtPndxKTsKKwlpZiAoZmx1c2gpCisJCWZsdXNoX3dvcmtxdWV1ZShpcG9pYl93b3JrcXVldWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NzAsOSArNjMzLDYgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSVBPSUJfTUNBU1RfRkxBR19CVVNZLCAmbWNhc3QtPmZsYWdzKSkKLQkJaXBvaWJfd2Fybihwcml2LCAiaXBvaWJfbWNhc3RfbGVhdmUgb24gYW4gaW4tZmxpZ2h0IGpvaW5cbiIpOwotCi0JaWYgKCFJU19FUlJfT1JfTlVMTChtY2FzdC0+bWMpKQogCQlpYl9zYV9mcmVlX211bHRpY2FzdChtY2FzdC0+bWMpOwogCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChJUE9JQl9NQ0FTVF9GTEFHX0FUVEFDSEVELCAmbWNhc3QtPmZsYWdzKSkgewpAQCAtNzI1LDggKzY4NSw2IEBACiAJCW1lbWNweShtY2FzdC0+bWNtZW1iZXIubWdpZC5yYXcsIG1naWQsIHNpemVvZiAodW5pb24gaWJfZ2lkKSk7CiAJCV9faXBvaWJfbWNhc3RfYWRkKGRldiwgbWNhc3QpOwogCQlsaXN0X2FkZF90YWlsKCZtY2FzdC0+bGlzdCwgJnByaXYtPm11bHRpY2FzdF9saXN0KTsKLQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KElQT0lCX01DQVNUX1JVTiwgJnByaXYtPmZsYWdzKSkKLQkJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53cSwgJnByaXYtPm1jYXN0X3Rhc2ssIDApOwogCX0KIAogCWlmICghbWNhc3QtPmFoKSB7CkBAIC03NDAsNiArNjk4LDggQEAKIAkJaWYgKHRlc3RfYml0KElQT0lCX01DQVNUX0ZMQUdfQlVTWSwgJm1jYXN0LT5mbGFncykpCiAJCQlpcG9pYl9kYmdfbWNhc3QocHJpdiwgIm5vIGFkZHJlc3MgdmVjdG9yLCAiCiAJCQkJCSJidXQgbXVsdGljYXN0IGpvaW4gYWxyZWFkeSBzdGFydGVkXG4iKTsKKwkJZWxzZSBpZiAodGVzdF9iaXQoSVBPSUJfTUNBU1RfRkxBR19TRU5ET05MWSwgJm1jYXN0LT5mbGFncykpCisJCQlpcG9pYl9tY2FzdF9zZW5kb25seV9qb2luKG1jYXN0KTsKIAogCQkvKgogCQkgKiBJZiBsb29rdXAgY29tcGxldGVzIGJldHdlZW4gaGVyZSBhbmQgb3V0OiwgZG9uJ3QKQEAgLTc5OSwxMiArNzU5LDkgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCS8qCi0JICogbWFrZSBzdXJlIHRoZSBpbi1mbGlnaHQgam9pbnMgaGF2ZSBmaW5pc2hlZCBiZWZvcmUgd2UgYXR0ZW1wdAotCSAqIHRvIGxlYXZlCi0JICovCisJLyogc2VwZXJhdGUgYmV0d2VlbiB0aGUgd2FpdCB0byB0aGUgbGVhdmUqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtY2FzdCwgdG1jYXN0LCAmcmVtb3ZlX2xpc3QsIGxpc3QpCi0JCWlmICh0ZXN0X2JpdChJUE9JQl9NQ0FTVF9GTEFHX0JVU1ksICZtY2FzdC0+ZmxhZ3MpKQorCQlpZiAodGVzdF9iaXQoSVBPSUJfTUNBU1RfSk9JTl9TVEFSVEVELCAmbWNhc3QtPmZsYWdzKSkKIAkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJm1jYXN0LT5kb25lKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtY2FzdCwgdG1jYXN0LCAmcmVtb3ZlX2xpc3QsIGxpc3QpIHsKQEAgLTgzNyw2ICs3OTQsOCBAQAogCiAJaXBvaWJfZGJnX21jYXN0KHByaXYsICJyZXN0YXJ0aW5nIG11bHRpY2FzdCB0YXNrXG4iKTsKIAorCWlwb2liX21jYXN0X3N0b3BfdGhyZWFkKGRldiwgMCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJbmV0aWZfYWRkcl9sb2NrKGRldik7CiAJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKQEAgLTkyMSwzOCArODgwLDE0IEBACiAJbmV0aWZfYWRkcl91bmxvY2soZGV2KTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQkvKgotCSAqIG1ha2Ugc3VyZSB0aGUgaW4tZmxpZ2h0IGpvaW5zIGhhdmUgZmluaXNoZWQgYmVmb3JlIHdlIGF0dGVtcHQKLQkgKiB0byBsZWF2ZQotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtY2FzdCwgdG1jYXN0LCAmcmVtb3ZlX2xpc3QsIGxpc3QpCi0JCWlmICh0ZXN0X2JpdChJUE9JQl9NQ0FTVF9GTEFHX0JVU1ksICZtY2FzdC0+ZmxhZ3MpKQotCQkJd2FpdF9mb3JfY29tcGxldGlvbigmbWNhc3QtPmRvbmUpOwotCi0JLyoKLQkgKiBXZSBoYXZlIHRvIGNhbmNlbCBvdXRzaWRlIG9mIHRoZSBzcGlubG9jaywgYnV0IHdlIGhhdmUgdG8KLQkgKiB0YWtlIHRoZSBydG5sIGxvY2sgb3IgZWxzZSB3ZSByYWNlIHdpdGggdGhlIHJlbW92YWwgb2YKLQkgKiBlbnRyaWVzIGZyb20gdGhlIHJlbW92ZSBsaXN0IGluIG1jYXN0X2Rldl9mbHVzaCBhcyBwYXJ0Ci0JICogb2YgaXBvaWJfc3RvcCgpLiAgV2UgZGV0ZWN0IHRoZSBkcm9wIG9mIHRoZSBBRE1JTl9VUCBmbGFnCi0JICogdG8gc2lnbmFsIHRoYXQgd2UgaGF2ZSBoaXQgdGhpcyBwYXJ0aWN1bGFyIHJhY2UsIGFuZCB3ZQotCSAqIHJldHVybiBzaW5jZSB3ZSBrbm93IHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgZWxzZQotCSAqIGFueXdheS4KLQkgKi8KLQl3aGlsZSAoIXJ0bmxfdHJ5bG9jaygpKSB7Ci0JCWlmICghdGVzdF9iaXQoSVBPSUJfRkxBR19BRE1JTl9VUCwgJnByaXYtPmZsYWdzKSkKLQkJCXJldHVybjsKLQkJZWxzZQotCQkJbXNsZWVwKDIwKTsKLQl9CisJLyogV2UgaGF2ZSB0byBjYW5jZWwgb3V0c2lkZSBvZiB0aGUgc3BpbmxvY2sgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWNhc3QsIHRtY2FzdCwgJnJlbW92ZV9saXN0LCBsaXN0KSB7CiAJCWlwb2liX21jYXN0X2xlYXZlKG1jYXN0LT5kZXYsIG1jYXN0KTsKIAkJaXBvaWJfbWNhc3RfZnJlZShtY2FzdCk7CiAJfQotCS8qCi0JICogUmVzdGFydCBvdXIgam9pbiB0YXNrIGlmIG5lZWRlZAotCSAqLwotCWlwb2liX21jYXN0X3N0YXJ0X3RocmVhZChkZXYpOwotCXJ0bmxfdW5sb2NrKCk7CisKKwlpZiAodGVzdF9iaXQoSVBPSUJfRkxBR19BRE1JTl9VUCwgJnByaXYtPmZsYWdzKSkKKwkJaXBvaWJfbWNhc3Rfc3RhcnRfdGhyZWFkKGRldik7CiB9CiAKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl92ZXJicy5jCmluZGV4IGI3MmE3NTMuLmM1NmQ1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX3ZlcmJzLmMKQEAgLTE0NSwyMCArMTQ1LDEwIEBACiAJaW50IHJldCwgc2l6ZTsKIAlpbnQgaTsKIAotCS8qCi0JICogdGhlIHZhcmlvdXMgSVBvSUIgdGFza3MgYXNzdW1lIHRoZXkgd2lsbCBuZXZlciByYWNlIGFnYWluc3QKLQkgKiB0aGVtc2VsdmVzLCBzbyBhbHdheXMgdXNlIGEgc2luZ2xlIHRocmVhZCB3b3JrcXVldWUKLQkgKi8KLQlwcml2LT53cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJpcG9pYl93cSIpOwotCWlmICghcHJpdi0+d3EpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXBvaWI6IGZhaWxlZCB0byBhbGxvY2F0ZSBkZXZpY2UgV1FcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KIAlwcml2LT5wZCA9IGliX2FsbG9jX3BkKHByaXYtPmNhKTsKIAlpZiAoSVNfRVJSKHByaXYtPnBkKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIFBEXG4iLCBjYS0+bmFtZSk7Ci0JCWdvdG8gb3V0X2ZyZWVfd3E7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAogCXByaXYtPm1yID0gaWJfZ2V0X2RtYV9tcihwcml2LT5wZCwgSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKTsKQEAgLTI1MiwxMCArMjQyLDYgQEAKIAogb3V0X2ZyZWVfcGQ6CiAJaWJfZGVhbGxvY19wZChwcml2LT5wZCk7Ci0KLW91dF9mcmVlX3dxOgotCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPndxKTsKLQlwcml2LT53cSA9IE5VTEw7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKQEAgLTI4NCwxMiArMjcwLDYgQEAKIAogCWlmIChpYl9kZWFsbG9jX3BkKHByaXYtPnBkKSkKIAkJaXBvaWJfd2Fybihwcml2LCAiaWJfZGVhbGxvY19wZCBmYWlsZWRcbiIpOwotCi0JaWYgKHByaXYtPndxKSB7Ci0JCWZsdXNoX3dvcmtxdWV1ZShwcml2LT53cSk7Ci0JCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPndxKTsKLQkJcHJpdi0+d3EgPSBOVUxMOwotCX0KIH0KIAogdm9pZCBpcG9pYl9ldmVudChzdHJ1Y3QgaWJfZXZlbnRfaGFuZGxlciAqaGFuZGxlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYyBiL2RyaXZlcnMvaW5wdXQvZXZkZXYuYwppbmRleCAxOGQ0YjJjLi5hMThmNDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCkBAIC02MiwyNiArNjIsNiBAQAogCXN0cnVjdCBpbnB1dF9ldmVudCBidWZmZXJbXTsKIH07CiAKLXN0YXRpYyBpbnQgZXZkZXZfc2V0X2Nsa190eXBlKHN0cnVjdCBldmRldl9jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNsa2lkKQotewotCXN3aXRjaCAoY2xraWQpIHsKLQotCWNhc2UgQ0xPQ0tfUkVBTFRJTUU6Ci0JCWNsaWVudC0+Y2xrX3R5cGUgPSBFVl9DTEtfUkVBTDsKLQkJYnJlYWs7Ci0JY2FzZSBDTE9DS19NT05PVE9OSUM6Ci0JCWNsaWVudC0+Y2xrX3R5cGUgPSBFVl9DTEtfTU9OTzsKLQkJYnJlYWs7Ci0JY2FzZSBDTE9DS19CT09UVElNRToKLQkJY2xpZW50LT5jbGtfdHlwZSA9IEVWX0NMS19CT09UOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogZmx1c2ggcXVldWVkIGV2ZW50cyBvZiB0eXBlIEB0eXBlLCBjYWxsZXIgbXVzdCBob2xkIGNsaWVudC0+YnVmZmVyX2xvY2sgKi8KIHN0YXRpYyB2b2lkIF9fZXZkZXZfZmx1c2hfcXVldWUoc3RydWN0IGV2ZGV2X2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKQEAgLTEyOCwxMCArMTA4LDggQEAKIAljbGllbnQtPmhlYWQgPSBoZWFkOwogfQogCi0vKiBxdWV1ZSBTWU5fRFJPUFBFRCBldmVudCAqLwotc3RhdGljIHZvaWQgZXZkZXZfcXVldWVfc3luX2Ryb3BwZWQoc3RydWN0IGV2ZGV2X2NsaWVudCAqY2xpZW50KQorc3RhdGljIHZvaWQgX19ldmRldl9xdWV1ZV9zeW5fZHJvcHBlZChzdHJ1Y3QgZXZkZXZfY2xpZW50ICpjbGllbnQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaW5wdXRfZXZlbnQgZXY7CiAJa3RpbWVfdCB0aW1lOwogCkBAIC0xNDYsOCArMTI0LDYgQEAKIAlldi5jb2RlID0gU1lOX0RST1BQRUQ7CiAJZXYudmFsdWUgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsaWVudC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQogCWNsaWVudC0+YnVmZmVyW2NsaWVudC0+aGVhZCsrXSA9IGV2OwogCWNsaWVudC0+aGVhZCAmPSBjbGllbnQtPmJ1ZnNpemUgLSAxOwogCkBAIC0xNTYsOCArMTMyLDUzIEBACiAJCWNsaWVudC0+dGFpbCA9IChjbGllbnQtPmhlYWQgLSAxKSAmIChjbGllbnQtPmJ1ZnNpemUgLSAxKTsKIAkJY2xpZW50LT5wYWNrZXRfaGVhZCA9IGNsaWVudC0+dGFpbDsKIAl9Cit9CisKK3N0YXRpYyB2b2lkIGV2ZGV2X3F1ZXVlX3N5bl9kcm9wcGVkKHN0cnVjdCBldmRldl9jbGllbnQgKmNsaWVudCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsaWVudC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKwlfX2V2ZGV2X3F1ZXVlX3N5bl9kcm9wcGVkKGNsaWVudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xpZW50LT5idWZmZXJfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IGV2ZGV2X3NldF9jbGtfdHlwZShzdHJ1Y3QgZXZkZXZfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbGtpZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGNsaWVudC0+Y2xrX3R5cGUgPT0gY2xraWQpCisJCXJldHVybiAwOworCisJc3dpdGNoIChjbGtpZCkgeworCisJY2FzZSBDTE9DS19SRUFMVElNRToKKwkJY2xpZW50LT5jbGtfdHlwZSA9IEVWX0NMS19SRUFMOworCQlicmVhazsKKwljYXNlIENMT0NLX01PTk9UT05JQzoKKwkJY2xpZW50LT5jbGtfdHlwZSA9IEVWX0NMS19NT05POworCQlicmVhazsKKwljYXNlIENMT0NLX0JPT1RUSU1FOgorCQljbGllbnQtPmNsa190eXBlID0gRVZfQ0xLX0JPT1Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogRmx1c2ggcGVuZGluZyBldmVudHMgYW5kIHF1ZXVlIFNZTl9EUk9QUEVEIGV2ZW50LAorCSAqIGJ1dCBvbmx5IGlmIHRoZSBxdWV1ZSBpcyBub3QgZW1wdHkuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsaWVudC0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKKworCWlmIChjbGllbnQtPmhlYWQgIT0gY2xpZW50LT50YWlsKSB7CisJCWNsaWVudC0+cGFja2V0X2hlYWQgPSBjbGllbnQtPmhlYWQgPSBjbGllbnQtPnRhaWw7CisJCV9fZXZkZXZfcXVldWVfc3luX2Ryb3BwZWQoY2xpZW50KTsKKwl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbGllbnQtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19wYXNzX2V2ZW50KHN0cnVjdCBldmRldl9jbGllbnQgKmNsaWVudCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQtbXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQtbXQuYwppbmRleCBmYmUyOWZjLi5jYjE1MGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LW10LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC1tdC5jCkBAIC0yOTMsNyArMjkzLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaW5wdXRfbXRfc3luY19mcmFtZSk7CiAKLXN0YXRpYyBpbnQgYWRqdXN0X2R1YWwoaW50ICpiZWdpbiwgaW50IHN0ZXAsIGludCAqZW5kLCBpbnQgZXEpCitzdGF0aWMgaW50IGFkanVzdF9kdWFsKGludCAqYmVnaW4sIGludCBzdGVwLCBpbnQgKmVuZCwgaW50IGVxLCBpbnQgbXUpCiB7CiAJaW50IGYsICpwLCBzLCBjOwogCkBAIC0zMTEsOSArMzExLDEwIEBACiAJCQlzID0gKnA7CiAKIAljID0gKGYgKyBzICsgMSkgLyAyOwotCWlmIChjID09IDAgfHwgKGMgPiAwICYmICFlcSkpCisJaWYgKGMgPT0gMCB8fCAoYyA+IG11ICYmICghZXEgfHwgbXUgPiAwKSkpCiAJCXJldHVybiAwOwotCWlmIChzIDwgMCkKKwkvKiBJbXByb3ZlIGNvbnZlcmdlbmNlIGZvciBwb3NpdGl2ZSBtYXRyaWNlcyBieSBwZW5hbGl6aW5nIG92ZXJjb3ZlcnMgKi8KKwlpZiAocyA8IDAgJiYgbXUgPD0gMCkKIAkJYyAqPSAyOwogCiAJZm9yIChwID0gYmVnaW47IHAgIT0gZW5kOyBwICs9IHN0ZXApCkBAIC0zMjIsMjMgKzMyMywyNCBAQAogCXJldHVybiAoYyA8IHMgJiYgcyA8PSAwKSB8fCAoZiA+PSAwICYmIGYgPCBjKTsKIH0KIAotc3RhdGljIHZvaWQgZmluZF9yZWR1Y2VkX21hdHJpeChpbnQgKncsIGludCBuciwgaW50IG5jLCBpbnQgbnJjKQorc3RhdGljIHZvaWQgZmluZF9yZWR1Y2VkX21hdHJpeChpbnQgKncsIGludCBuciwgaW50IG5jLCBpbnQgbnJjLCBpbnQgbXUpCiB7CiAJaW50IGksIGssIHN1bTsKIAogCWZvciAoayA9IDA7IGsgPCBucmM7IGsrKykgewogCQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKLQkJCWFkanVzdF9kdWFsKHcgKyBpLCBuciwgdyArIGkgKyBucmMsIG5yIDw9IG5jKTsKKwkJCWFkanVzdF9kdWFsKHcgKyBpLCBuciwgdyArIGkgKyBucmMsIG5yIDw9IG5jLCBtdSk7CiAJCXN1bSA9IDA7CiAJCWZvciAoaSA9IDA7IGkgPCBucmM7IGkgKz0gbnIpCi0JCQlzdW0gKz0gYWRqdXN0X2R1YWwodyArIGksIDEsIHcgKyBpICsgbnIsIG5jIDw9IG5yKTsKKwkJCXN1bSArPSBhZGp1c3RfZHVhbCh3ICsgaSwgMSwgdyArIGkgKyBuciwgbmMgPD0gbnIsIG11KTsKIAkJaWYgKCFzdW0pCiAJCQlicmVhazsKIAl9CiB9CiAKIHN0YXRpYyBpbnQgaW5wdXRfbXRfc2V0X21hdHJpeChzdHJ1Y3QgaW5wdXRfbXQgKm10LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpbnB1dF9tdF9wb3MgKnBvcywgaW50IG51bV9wb3MpCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGlucHV0X210X3BvcyAqcG9zLCBpbnQgbnVtX3BvcywKKwkJCSAgICAgICBpbnQgbXUpCiB7CiAJY29uc3Qgc3RydWN0IGlucHV0X210X3BvcyAqcDsKIAlzdHJ1Y3QgaW5wdXRfbXRfc2xvdCAqczsKQEAgLTM1Miw3ICszNTQsNyBAQAogCQl5ID0gaW5wdXRfbXRfZ2V0X3ZhbHVlKHMsIEFCU19NVF9QT1NJVElPTl9ZKTsKIAkJZm9yIChwID0gcG9zOyBwICE9IHBvcyArIG51bV9wb3M7IHArKykgewogCQkJaW50IGR4ID0geCAtIHAtPngsIGR5ID0geSAtIHAtPnk7Ci0JCQkqdysrID0gZHggKiBkeCArIGR5ICogZHk7CisJCQkqdysrID0gZHggKiBkeCArIGR5ICogZHkgLSBtdTsKIAkJfQogCX0KIApAQCAtMzkzLDE3ICszOTUsMjQgQEAKICAqIEBzbG90czogdGhlIHNsb3QgYXNzaWdubWVudCB0byBiZSBmaWxsZWQKICAqIEBwb3M6IHRoZSBwb3NpdGlvbiBhcnJheSB0byBtYXRjaAogICogQG51bV9wb3M6IG51bWJlciBvZiBwb3NpdGlvbnMKKyAqIEBkbWF4OiBtYXhpbXVtIEFCU19NVF9QT1NJVElPTiBkaXNwbGFjZW1lbnQgKHplcm8gZm9yIGluZmluaXRlKQogICoKICAqIFBlcmZvcm1zIGEgYmVzdCBtYXRjaCBhZ2FpbnN0IHRoZSBjdXJyZW50IGNvbnRhY3RzIGFuZCByZXR1cm5zCiAgKiB0aGUgc2xvdCBhc3NpZ25tZW50IGxpc3QuIE5ldyBjb250YWN0cyBhcmUgYXNzaWduZWQgdG8gdW51c2VkCiAgKiBzbG90cy4KICAqCisgKiBUaGUgYXNzaWdubWVudHMgYXJlIGJhbGFuY2VkIHNvIHRoYXQgYWxsIGNvb3JkaW5hdGUgZGlzcGxhY2VtZW50cyBhcmUKKyAqIGJlbG93IHRoZSBldWNsaWRpYW4gZGlzdGFuY2UgZG1heC4gSWYgbm8gc3VjaCBhc3NpZ25tZW50IGNhbiBiZSBmb3VuZCwKKyAqIHNvbWUgY29udGFjdHMgYXJlIGFzc2lnbmVkIHRvIHVudXNlZCBzbG90cy4KKyAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgbmVnYXRpdmUgZXJyb3IgaW4gY2FzZSBvZiBmYWlsdXJlLgogICovCiBpbnQgaW5wdXRfbXRfYXNzaWduX3Nsb3RzKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50ICpzbG90cywKLQkJCSAgY29uc3Qgc3RydWN0IGlucHV0X210X3BvcyAqcG9zLCBpbnQgbnVtX3BvcykKKwkJCSAgY29uc3Qgc3RydWN0IGlucHV0X210X3BvcyAqcG9zLCBpbnQgbnVtX3BvcywKKwkJCSAgaW50IGRtYXgpCiB7CiAJc3RydWN0IGlucHV0X210ICptdCA9IGRldi0+bXQ7CisJaW50IG11ID0gMiAqIGRtYXggKiBkbWF4OwogCWludCBucmM7CiAKIAlpZiAoIW10IHx8ICFtdC0+cmVkKQpAQCAtNDEzLDggKzQyMiw4IEBACiAJaWYgKG51bV9wb3MgPCAxKQogCQlyZXR1cm4gMDsKIAotCW5yYyA9IGlucHV0X210X3NldF9tYXRyaXgobXQsIHBvcywgbnVtX3Bvcyk7Ci0JZmluZF9yZWR1Y2VkX21hdHJpeChtdC0+cmVkLCBudW1fcG9zLCBucmMgLyBudW1fcG9zLCBucmMpOworCW5yYyA9IGlucHV0X210X3NldF9tYXRyaXgobXQsIHBvcywgbnVtX3BvcywgbXUpOworCWZpbmRfcmVkdWNlZF9tYXRyaXgobXQtPnJlZCwgbnVtX3BvcywgbnJjIC8gbnVtX3BvcywgbnJjLCBtdSk7CiAJaW5wdXRfbXRfc2V0X3Nsb3RzKG10LCBzbG90cywgbnVtX3Bvcyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCAyMTNlM2ExLi5jYzM1N2YxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC0xMDAsMjMgKzEwMCwyNCBAQAogCXN0cnVjdCBpbnB1dF92YWx1ZSAqZW5kID0gdmFsczsKIAlzdHJ1Y3QgaW5wdXRfdmFsdWUgKnY7CiAKLQlmb3IgKHYgPSB2YWxzOyB2ICE9IHZhbHMgKyBjb3VudDsgdisrKSB7Ci0JCWlmIChoYW5kbGVyLT5maWx0ZXIgJiYKLQkJICAgIGhhbmRsZXItPmZpbHRlcihoYW5kbGUsIHYtPnR5cGUsIHYtPmNvZGUsIHYtPnZhbHVlKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoZW5kICE9IHYpCi0JCQkqZW5kID0gKnY7Ci0JCWVuZCsrOworCWlmIChoYW5kbGVyLT5maWx0ZXIpIHsKKwkJZm9yICh2ID0gdmFsczsgdiAhPSB2YWxzICsgY291bnQ7IHYrKykgeworCQkJaWYgKGhhbmRsZXItPmZpbHRlcihoYW5kbGUsIHYtPnR5cGUsIHYtPmNvZGUsIHYtPnZhbHVlKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChlbmQgIT0gdikKKwkJCQkqZW5kID0gKnY7CisJCQllbmQrKzsKKwkJfQorCQljb3VudCA9IGVuZCAtIHZhbHM7CiAJfQogCi0JY291bnQgPSBlbmQgLSB2YWxzOwogCWlmICghY291bnQpCiAJCXJldHVybiAwOwogCiAJaWYgKGhhbmRsZXItPmV2ZW50cykKIAkJaGFuZGxlci0+ZXZlbnRzKGhhbmRsZSwgdmFscywgY291bnQpOwogCWVsc2UgaWYgKGhhbmRsZXItPmV2ZW50KQotCQlmb3IgKHYgPSB2YWxzOyB2ICE9IGVuZDsgdisrKQorCQlmb3IgKHYgPSB2YWxzOyB2ICE9IHZhbHMgKyBjb3VudDsgdisrKQogCQkJaGFuZGxlci0+ZXZlbnQoaGFuZGxlLCB2LT50eXBlLCB2LT5jb2RlLCB2LT52YWx1ZSk7CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0xNDMsOCArMTQ0LDExIEBACiAJCWNvdW50ID0gaW5wdXRfdG9faGFuZGxlcihoYW5kbGUsIHZhbHMsIGNvdW50KTsKIAl9IGVsc2UgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShoYW5kbGUsICZkZXYtPmhfbGlzdCwgZF9ub2RlKQotCQkJaWYgKGhhbmRsZS0+b3BlbikKKwkJCWlmIChoYW5kbGUtPm9wZW4pIHsKIAkJCQljb3VudCA9IGlucHV0X3RvX2hhbmRsZXIoaGFuZGxlLCB2YWxzLCBjb3VudCk7CisJCQkJaWYgKCFjb3VudCkKKwkJCQkJYnJlYWs7CisJCQl9CiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0xNTIsMTIgKzE1NiwxNCBAQAogCWFkZF9pbnB1dF9yYW5kb21uZXNzKHZhbHMtPnR5cGUsIHZhbHMtPmNvZGUsIHZhbHMtPnZhbHVlKTsKIAogCS8qIHRyaWdnZXIgYXV0byByZXBlYXQgZm9yIGtleSBldmVudHMgKi8KLQlmb3IgKHYgPSB2YWxzOyB2ICE9IHZhbHMgKyBjb3VudDsgdisrKSB7Ci0JCWlmICh2LT50eXBlID09IEVWX0tFWSAmJiB2LT52YWx1ZSAhPSAyKSB7Ci0JCQlpZiAodi0+dmFsdWUpCi0JCQkJaW5wdXRfc3RhcnRfYXV0b3JlcGVhdChkZXYsIHYtPmNvZGUpOwotCQkJZWxzZQotCQkJCWlucHV0X3N0b3BfYXV0b3JlcGVhdChkZXYpOworCWlmICh0ZXN0X2JpdChFVl9SRVAsIGRldi0+ZXZiaXQpICYmIHRlc3RfYml0KEVWX0tFWSwgZGV2LT5ldmJpdCkpIHsKKwkJZm9yICh2ID0gdmFsczsgdiAhPSB2YWxzICsgY291bnQ7IHYrKykgeworCQkJaWYgKHYtPnR5cGUgPT0gRVZfS0VZICYmIHYtPnZhbHVlICE9IDIpIHsKKwkJCQlpZiAodi0+dmFsdWUpCisJCQkJCWlucHV0X3N0YXJ0X2F1dG9yZXBlYXQoZGV2LCB2LT5jb2RlKTsKKwkJCQllbHNlCisJCQkJCWlucHV0X3N0b3BfYXV0b3JlcGVhdChkZXYpOworCQkJfQogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCmluZGV4IGE1ZDliM2YuLmE4OWJhN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKQEAgLTU2OCw2ICs1NjgsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQogCSAgY2FsbGVkIHN0bXBlLWtleXBhZC4KIAorY29uZmlnIEtFWUJPQVJEX1NVTjRJX0xSQURDCisJdHJpc3RhdGUgIkFsbHdpbm5lciBzdW40aSBsb3cgcmVzIGFkYyBhdHRhY2hlZCB0YWJsZXQga2V5cyBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9TVU5YSQorCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyBzdXBwb3J0IGZvciB0aGUgQWxsd2lubmVyIGxvdyByZXMgYWRjIGF0dGFjaGVkIHRhYmxldAorCSAga2V5cyBmb3VuZCBvbiBBbGx3aW5uZXIgc3VueGkgU29Dcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3VuNGktbHJhZGMta2V5cy4KKwogY29uZmlnIEtFWUJPQVJEX0RBVklOQ0kKIAl0cmlzdGF0ZSAiVEkgRGFWaW5jaSBLZXkgU2NhbiIKIAlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9ETTM2NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKaW5kZXggZmViYWZhNS4uNDcwNzY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCkBAIC01Myw2ICs1Myw3IEBACiBvYmotJChDT05GSUdfS0VZQk9BUkRfU1RNUEUpCQkrPSBzdG1wZS1rZXlwYWQubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZKQkJKz0gc3Rvd2F3YXkubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1NUX0tFWVNDQU4pCSs9IHN0LWtleXNjYW4ubworb2JqLSQoQ09ORklHX0tFWUJPQVJEX1NVTjRJX0xSQURDKQkrPSBzdW40aS1scmFkYy1rZXlzLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9TVU5LQkQpCQkrPSBzdW5rYmQubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1RDMzU4OVgpCQkrPSB0YzM1ODl4LWtleXBhZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfVEVHUkEpCQkrPSB0ZWdyYS1rYmMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGFrYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRha2JkLmMKaW5kZXggMTBiY2Q0YS4uZjEyMzU4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGFrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0YWtiZC5jCkBAIC0xNzAsNyArMTcwLDcgQEAKIAlbOTNdCSA9IEtFWV9LUEFTVEVSSVNLLAogCVs5NF0JID0gS0VZX0tQUExVUywKIAlbOTVdCSA9IEtFWV9IRUxQLAotCVs5Nl0JID0gS0VZX0JBQ0tTTEFTSCwJLyogRklYTUU6ICc8JyAqLworCVs5Nl0JID0gS0VZXzEwMk5ELAogCVs5N10JID0gS0VZX0tQQVNURVJJU0ssCS8qIEZJWE1FICovCiAJWzk4XQkgPSBLRVlfS1BTTEFTSCwKIAlbOTldCSA9IEtFWV9LUExFRlRQQVJFTiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY2FwMTF4eC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jYXAxMXh4LmMKaW5kZXggNGY1OWYwYi4uZjA3NDYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jYXAxMXh4LmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jYXAxMXh4LmMKQEAgLTM3MCw3ICszNzAsNiBAQAogCiBtb2R1bGVfaTJjX2RyaXZlcihjYXAxMXh4X2kyY19kcml2ZXIpOwogCi1NT0RVTEVfQUxJQVMoInBsYXRmb3JtOmNhcDExeHgiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTWljcm9jaGlwIENBUDExWFggZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJEYW5pZWwgTWFjayA8bGludXhAem9ucXVlLm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaW14X2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9pbXhfa2V5cGFkLmMKaW5kZXggZTUzZjIzMi4uMmU4NTVlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9pbXhfa2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9pbXhfa2V5cGFkLmMKQEAgLTQ0OCw4ICs0NDgsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlrZXlwYWQgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBpbXhfa2V5cGFkKSwKLQkJCSAgICAgIEdGUF9LRVJORUwpOworCWtleXBhZCA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmtleXBhZCksIEdGUF9LRVJORUwpOwogCWlmICgha2V5cGFkKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vdCBlbm91Z2ggbWVtb3J5IGZvciBkcml2ZXIgZGF0YVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3B4YTI3eF9rZXlwYWQuYwppbmRleCBhOTBkNmJkLi5hODk0ODhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3B4YTI3eF9rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3B4YTI3eF9rZXlwYWQuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KQEAgLTI4LDEwICsyOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAKLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9rZXlwYWQtcHhhMjd4Lmg+CiAvKgogICogS2V5cGFkIENvbnRyb2xsZXIgcmVnaXN0ZXJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N1bjRpLWxyYWRjLWtleXMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3VuNGktbHJhZGMta2V5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjOGY3ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N1bjRpLWxyYWRjLWtleXMuYwpAQCAtMCwwICsxLDI4NiBAQAorLyoKKyAqIEFsbHdpbm5lciBzdW40aSBsb3cgcmVzIGFkYyBhdHRhY2hlZCB0YWJsZXQga2V5cyBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLyoKKyAqIEFsbHdpbm5uZXIgc3VueGkgU29DcyBoYXZlIGEgbHJhZGMgd2hpY2ggaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGhhdmUKKyAqIHZhcmlvdXMgKHRhYmxldCkga2V5cyAoaWUgaG9tZSwgYmFjaywgc2VhcmNoLCBldGMpLiBhdHRhY2hlZCB0byBpdCB1c2luZworICogYSByZXNpc3RvciBuZXR3b3JrLiBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIGtleXMgb24gc3VjaCBib2FyZHMuCisgKgorICogVGhlcmUgYXJlIDIgY2hhbm5lbHMsIGN1cnJlbnRseSB0aGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzIGNoYW5uZWwgMCBzaW5jZQorICogdGhlcmUgYXJlIG5vIGJvYXJkcyBrbm93biB0byB1c2UgY2hhbm5lbCAxLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjZGVmaW5lIExSQURDX0NUUkwJCTB4MDAKKyNkZWZpbmUgTFJBRENfSU5UQwkJMHgwNAorI2RlZmluZSBMUkFEQ19JTlRTCQkweDA4CisjZGVmaW5lIExSQURDX0RBVEEwCQkweDBjCisjZGVmaW5lIExSQURDX0RBVEExCQkweDEwCisKKy8qIExSQURDX0NUUkwgYml0cyAqLworI2RlZmluZSBGSVJTVF9DT05WRVJUX0RMWSh4KQkoKHgpIDw8IDI0KSAvKiA4IGJpdHMgKi8KKyNkZWZpbmUgQ0hBTl9TRUxFQ1QoeCkJCSgoeCkgPDwgMjIpIC8qIDIgYml0cyAqLworI2RlZmluZSBDT05USU5VRV9USU1FX1NFTCh4KQkoKHgpIDw8IDE2KSAvKiA0IGJpdHMgKi8KKyNkZWZpbmUgS0VZX01PREVfU0VMKHgpCQkoKHgpIDw8IDEyKSAvKiAyIGJpdHMgKi8KKyNkZWZpbmUgTEVWRUxBX0JfQ05UKHgpCQkoKHgpIDw8IDgpICAvKiA0IGJpdHMgKi8KKyNkZWZpbmUgSE9MRF9FTih4KQkJKCh4KSA8PCA2KQorI2RlZmluZSBMRVZFTEJfVk9MKHgpCQkoKHgpIDw8IDQpICAvKiAyIGJpdHMgKi8KKyNkZWZpbmUgU0FNUExFX1JBVEUoeCkJCSgoeCkgPDwgMikgIC8qIDIgYml0cyAqLworI2RlZmluZSBFTkFCTEUoeCkJCSgoeCkgPDwgMCkKKworLyogTFJBRENfSU5UQyBhbmQgTFJBRENfSU5UUyBiaXRzICovCisjZGVmaW5lIENIQU4xX0tFWVVQX0lSUQkJQklUKDEyKQorI2RlZmluZSBDSEFOMV9BTFJEWV9IT0xEX0lSUQlCSVQoMTEpCisjZGVmaW5lIENIQU4xX0hPTERfSVJRCQlCSVQoMTApCisjZGVmaW5lCUNIQU4xX0tFWURPV05fSVJRCUJJVCg5KQorI2RlZmluZSBDSEFOMV9EQVRBX0lSUQkJQklUKDgpCisjZGVmaW5lIENIQU4wX0tFWVVQX0lSUQkJQklUKDQpCisjZGVmaW5lIENIQU4wX0FMUkRZX0hPTERfSVJRCUJJVCgzKQorI2RlZmluZSBDSEFOMF9IT0xEX0lSUQkJQklUKDIpCisjZGVmaW5lCUNIQU4wX0tFWURPV05fSVJRCUJJVCgxKQorI2RlZmluZSBDSEFOMF9EQVRBX0lSUQkJQklUKDApCisKK3N0cnVjdCBzdW40aV9scmFkY19rZXltYXAgeworCXUzMiB2b2x0YWdlOworCXUzMiBrZXljb2RlOworfTsKKworc3RydWN0IHN1bjRpX2xyYWRjX2RhdGEgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJc3RydWN0IHJlZ3VsYXRvciAqdnJlZl9zdXBwbHk7CisJc3RydWN0IHN1bjRpX2xyYWRjX2tleW1hcCAqY2hhbjBfbWFwOworCXUzMiBjaGFuMF9tYXBfY291bnQ7CisJdTMyIGNoYW4wX2tleWNvZGU7CisJdTMyIHZyZWY7Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3VuNGlfbHJhZGNfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc3VuNGlfbHJhZGNfZGF0YSAqbHJhZGMgPSBkZXZfaWQ7CisJdTMyIGksIGludHMsIHZhbCwgdm9sdGFnZSwgZGlmZiwga2V5Y29kZSA9IDAsIGNsb3Nlc3QgPSAweGZmZmZmZmZmOworCisJaW50cyAgPSByZWFkbChscmFkYy0+YmFzZSArIExSQURDX0lOVFMpOworCisJLyoKKwkgKiBscmFkYyBzdXBwb3J0cyBvbmx5IG9uZSBrZXlwcmVzcyBhdCBhIHRpbWUsIHJlbGVhc2UgZG9lcyBub3QgZ2l2ZQorCSAqIGFueSBpbmZvIGFzIHRvIHdoaWNoIGtleSB3YXMgcmVsZWFzZWQsIHNvIHdlIGNhY2hlIHRoZSBrZXljb2RlLgorCSAqLworCisJaWYgKGludHMgJiBDSEFOMF9LRVlVUF9JUlEpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShscmFkYy0+aW5wdXQsIGxyYWRjLT5jaGFuMF9rZXljb2RlLCAwKTsKKwkJbHJhZGMtPmNoYW4wX2tleWNvZGUgPSAwOworCX0KKworCWlmICgoaW50cyAmIENIQU4wX0tFWURPV05fSVJRKSAmJiBscmFkYy0+Y2hhbjBfa2V5Y29kZSA9PSAwKSB7CisJCXZhbCA9IHJlYWRsKGxyYWRjLT5iYXNlICsgTFJBRENfREFUQTApICYgMHgzZjsKKwkJdm9sdGFnZSA9IHZhbCAqIGxyYWRjLT52cmVmIC8gNjM7CisKKwkJZm9yIChpID0gMDsgaSA8IGxyYWRjLT5jaGFuMF9tYXBfY291bnQ7IGkrKykgeworCQkJZGlmZiA9IGFicyhscmFkYy0+Y2hhbjBfbWFwW2ldLnZvbHRhZ2UgLSB2b2x0YWdlKTsKKwkJCWlmIChkaWZmIDwgY2xvc2VzdCkgeworCQkJCWNsb3Nlc3QgPSBkaWZmOworCQkJCWtleWNvZGUgPSBscmFkYy0+Y2hhbjBfbWFwW2ldLmtleWNvZGU7CisJCQl9CisJCX0KKworCQlscmFkYy0+Y2hhbjBfa2V5Y29kZSA9IGtleWNvZGU7CisJCWlucHV0X3JlcG9ydF9rZXkobHJhZGMtPmlucHV0LCBscmFkYy0+Y2hhbjBfa2V5Y29kZSwgMSk7CisJfQorCisJaW5wdXRfc3luYyhscmFkYy0+aW5wdXQpOworCisJd3JpdGVsKGludHMsIGxyYWRjLT5iYXNlICsgTFJBRENfSU5UUyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgc3VuNGlfbHJhZGNfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IHN1bjRpX2xyYWRjX2RhdGEgKmxyYWRjID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IHJlZ3VsYXRvcl9lbmFibGUobHJhZGMtPnZyZWZfc3VwcGx5KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCS8qIGxyYWRjIFZyZWYgaW50ZXJuYWxseSBpcyBkaXZpZGVkIGJ5IDIvMyAqLworCWxyYWRjLT52cmVmID0gcmVndWxhdG9yX2dldF92b2x0YWdlKGxyYWRjLT52cmVmX3N1cHBseSkgKiAyIC8gMzsKKworCS8qCisJICogU2V0IHNhbXBsZSB0aW1lIHRvIDQgbXMgLyAyNTAgSHouIFdhaXQgMiAqIDQgbXMgZm9yIGtleSB0bworCSAqIHN0YWJpbGl6ZSBvbiBwcmVzcywgd2FpdCAoMSArIDEpICogNCBtcyBmb3Iga2V5IHJlbGVhc2UKKwkgKi8KKwl3cml0ZWwoRklSU1RfQ09OVkVSVF9ETFkoMikgfCBMRVZFTEFfQl9DTlQoMSkgfCBIT0xEX0VOKDEpIHwKKwkJU0FNUExFX1JBVEUoMCkgfCBFTkFCTEUoMSksIGxyYWRjLT5iYXNlICsgTFJBRENfQ1RSTCk7CisKKwl3cml0ZWwoQ0hBTjBfS0VZVVBfSVJRIHwgQ0hBTjBfS0VZRE9XTl9JUlEsIGxyYWRjLT5iYXNlICsgTFJBRENfSU5UQyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3VuNGlfbHJhZGNfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCBzdW40aV9scmFkY19kYXRhICpscmFkYyA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKKwkvKiBEaXNhYmxlIGxyYWRjLCBsZWF2ZSBvdGhlciBzZXR0aW5ncyB1bmNoYW5nZWQgKi8KKwl3cml0ZWwoRklSU1RfQ09OVkVSVF9ETFkoMikgfCBMRVZFTEFfQl9DTlQoMSkgfCBIT0xEX0VOKDEpIHwKKwkJU0FNUExFX1JBVEUoMiksIGxyYWRjLT5iYXNlICsgTFJBRENfQ1RSTCk7CisJd3JpdGVsKDAsIGxyYWRjLT5iYXNlICsgTFJBRENfSU5UQyk7CisKKwlyZWd1bGF0b3JfZGlzYWJsZShscmFkYy0+dnJlZl9zdXBwbHkpOworfQorCitzdGF0aWMgaW50IHN1bjRpX2xyYWRjX2xvYWRfZHRfa2V5bWFwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3Qgc3VuNGlfbHJhZGNfZGF0YSAqbHJhZGMpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCwgKnBwOworCWludCBpOworCWludCBlcnJvcjsKKworCW5wID0gZGV2LT5vZl9ub2RlOworCWlmICghbnApCisJCXJldHVybiAtRUlOVkFMOworCisJbHJhZGMtPmNoYW4wX21hcF9jb3VudCA9IG9mX2dldF9jaGlsZF9jb3VudChucCk7CisJaWYgKGxyYWRjLT5jaGFuMF9tYXBfY291bnQgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgImtleW1hcCBpcyBtaXNzaW5nIGluIGRldmljZSB0cmVlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbHJhZGMtPmNoYW4wX21hcCA9IGRldm1fa21hbGxvY19hcnJheShkZXYsIGxyYWRjLT5jaGFuMF9tYXBfY291bnQsCisJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc3VuNGlfbHJhZGNfa2V5bWFwKSwKKwkJCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFscmFkYy0+Y2hhbjBfbWFwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkgPSAwOworCWZvcl9lYWNoX2NoaWxkX29mX25vZGUobnAsIHBwKSB7CisJCXN0cnVjdCBzdW40aV9scmFkY19rZXltYXAgKm1hcCA9ICZscmFkYy0+Y2hhbjBfbWFwW2ldOworCQl1MzIgY2hhbm5lbDsKKworCQllcnJvciA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKHBwLCAiY2hhbm5lbCIsICZjaGFubmVsKTsKKwkJaWYgKGVycm9yIHx8IGNoYW5uZWwgIT0gMCkgeworCQkJZGV2X2VycihkZXYsICIlczogSW52YWwgY2hhbm5lbCBwcm9wXG4iLCBwcC0+bmFtZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWVycm9yID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocHAsICJ2b2x0YWdlIiwgJm1hcC0+dm9sdGFnZSk7CisJCWlmIChlcnJvcikgeworCQkJZGV2X2VycihkZXYsICIlczogSW52YWwgdm9sdGFnZSBwcm9wXG4iLCBwcC0+bmFtZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWVycm9yID0gb2ZfcHJvcGVydHlfcmVhZF91MzIocHAsICJsaW51eCxjb2RlIiwgJm1hcC0+a2V5Y29kZSk7CisJCWlmIChlcnJvcikgeworCQkJZGV2X2VycihkZXYsICIlczogSW52YWwgbGludXgsY29kZSBwcm9wXG4iLCBwcC0+bmFtZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWkrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdW40aV9scmFkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzdW40aV9scmFkY19kYXRhICpscmFkYzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCWludCBpOworCWludCBlcnJvcjsKKworCWxyYWRjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCBzdW40aV9scmFkY19kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFscmFkYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnJvciA9IHN1bjRpX2xyYWRjX2xvYWRfZHRfa2V5bWFwKGRldiwgbHJhZGMpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJbHJhZGMtPnZyZWZfc3VwcGx5ID0gZGV2bV9yZWd1bGF0b3JfZ2V0KGRldiwgInZyZWYiKTsKKwlpZiAoSVNfRVJSKGxyYWRjLT52cmVmX3N1cHBseSkpCisJCXJldHVybiBQVFJfRVJSKGxyYWRjLT52cmVmX3N1cHBseSk7CisKKwlscmFkYy0+ZGV2ID0gZGV2OworCWxyYWRjLT5pbnB1dCA9IGRldm1faW5wdXRfYWxsb2NhdGVfZGV2aWNlKGRldik7CisJaWYgKCFscmFkYy0+aW5wdXQpCisJCXJldHVybiAtRU5PTUVNOworCisJbHJhZGMtPmlucHV0LT5uYW1lID0gcGRldi0+bmFtZTsKKwlscmFkYy0+aW5wdXQtPnBoeXMgPSAic3VuNGlfbHJhZGMvaW5wdXQwIjsKKwlscmFkYy0+aW5wdXQtPm9wZW4gPSBzdW40aV9scmFkY19vcGVuOworCWxyYWRjLT5pbnB1dC0+Y2xvc2UgPSBzdW40aV9scmFkY19jbG9zZTsKKwlscmFkYy0+aW5wdXQtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKKwlscmFkYy0+aW5wdXQtPmlkLnZlbmRvciA9IDB4MDAwMTsKKwlscmFkYy0+aW5wdXQtPmlkLnByb2R1Y3QgPSAweDAwMDE7CisJbHJhZGMtPmlucHV0LT5pZC52ZXJzaW9uID0gMHgwMTAwOworCisJX19zZXRfYml0KEVWX0tFWSwgbHJhZGMtPmlucHV0LT5ldmJpdCk7CisJZm9yIChpID0gMDsgaSA8IGxyYWRjLT5jaGFuMF9tYXBfY291bnQ7IGkrKykKKwkJX19zZXRfYml0KGxyYWRjLT5jaGFuMF9tYXBbaV0ua2V5Y29kZSwgbHJhZGMtPmlucHV0LT5rZXliaXQpOworCisJaW5wdXRfc2V0X2RydmRhdGEobHJhZGMtPmlucHV0LCBscmFkYyk7CisKKwlscmFkYy0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsCisJCQkgICAgICBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApKTsKKwlpZiAoSVNfRVJSKGxyYWRjLT5iYXNlKSkKKwkJcmV0dXJuIFBUUl9FUlIobHJhZGMtPmJhc2UpOworCisJZXJyb3IgPSBkZXZtX3JlcXVlc3RfaXJxKGRldiwgcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKSwKKwkJCQkgc3VuNGlfbHJhZGNfaXJxLCAwLAorCQkJCSAic3VuNGktYTEwLWxyYWRjLWtleXMiLCBscmFkYyk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShscmFkYy0+aW5wdXQpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbHJhZGMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzdW40aV9scmFkY19vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC1scmFkYy1rZXlzIiwgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzdW40aV9scmFkY19vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN1bjRpX2xyYWRjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJzdW40aS1hMTAtbHJhZGMta2V5cyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihzdW40aV9scmFkY19vZl9tYXRjaCksCisJfSwKKwkucHJvYmUJPSBzdW40aV9scmFkY19wcm9iZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3VuNGlfbHJhZGNfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJBbGx3aW5uZXIgc3VuNGkgbG93IHJlcyBhZGMgYXR0YWNoZWQgdGFibGV0IGtleXMgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJIYW5zIGRlIEdvZWRlIDxoZGVnb2VkZUByZWRoYXQuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwppbmRleCAyMzI5N2FiLi42ZGViOGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvS2NvbmZpZwpAQCAtOTMsNiArOTMsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJtYTE1MC4KIAorY29uZmlnIElOUFVUX0UzWDBfQlVUVE9OCisJdHJpc3RhdGUgIk5JIEV0dHVzIFJlc2VhcmNoIFVTUlAgRTN4MCBCdXR0b24gc3VwcG9ydC4iCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIE5JIEV0dHVzIFJlc2VhcmNoCisJICBVU1JQIEUzeDAgQnV0dG9uLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlM3gwX2J1dHRvbi4KKwogY29uZmlnIElOUFVUX1BDU1BLUgogCXRyaXN0YXRlICJQQyBTcGVha2VyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ1NQS1JfUExBVEZPUk0KQEAgLTM5NCw2ICs0MDQsMTggQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZQogCSAgY2FsbGVkIGNtMTA5LgogCitjb25maWcgSU5QVVRfUkVHVUxBVE9SX0hBUFRJQworCXRyaXN0YXRlICJSZWd1bGF0b3IgaGFwdGljcyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUkVHVUxBVE9SCisJc2VsZWN0IElOUFVUX0ZGX01FTUxFU1MKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIGRldmljZSBkcml2ZXIgc3VwcG9ydCBmb3IgdGhlIGhhcHRpYyBjb250cm9sbGVkCisJICBieSBhIHJlZ3VsYXRvci4gVGhpcyBkcml2ZXIgc3VwcG9ydHMgZmYtbWVtbGVzcyBpbnRlcmZhY2UKKwkgIGZyb20gaW5wdXQgZnJhbWV3b3JrLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCByZWd1bGF0b3ItaGFwdGljLgorCiBjb25maWcgSU5QVVRfUkVUVV9QV1JCVVRUT04KIAl0cmlzdGF0ZSAiUmV0dSBQb3dlciBidXR0b24gRHJpdmVyIgogCWRlcGVuZHMgb24gTUZEX1JFVFUKQEAgLTQwNCw2ICs0MjYsMjcgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUgd2lsbAogCSAgYmUgY2FsbGVkIHJldHUtcHdyYnV0dG9uLgogCitjb25maWcgSU5QVVRfVFBTNjUyMThfUFdSQlVUVE9OCisJdHJpc3RhdGUgIlRQUzY1MjE4IFBvd2VyIGJ1dHRvbiBkcml2ZXIiCisJZGVwZW5kcyBvbiBNRkRfVFBTNjUyMTgKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBwb3dlciBidXR0b25nIHJlcG9ydGluZyBmb3IKKwkgIHRoZSBUUFM2NTIxOCBQb3dlciBNYW5hZ2VtZW50IElDIGRldmljZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgdHBzNjUyMTgtcHdyYnV0dG9uLgorCitjb25maWcgSU5QVVRfQVhQMjBYX1BFSworCXRyaXN0YXRlICJYLVBvd2VycyBBWFAyMFggcG93ZXIgYnV0dG9uIGRyaXZlciIKKwlkZXBlbmRzIG9uIE1GRF9BWFAyMFgKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBwb3dlciBrZXkgcmVwb3J0aW5nIHZpYSB0aGUKKwkgIEFYUDIwWCBQTUlDLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwKKwkgIGJlIGNhbGxlZCBheHAyMHgtcGVrLgorCisKIGNvbmZpZyBJTlBVVF9UV0w0MDMwX1BXUkJVVFRPTgogCXRyaXN0YXRlICJUV0w0MDMwIFBvd2VyIGJ1dHRvbiBEcml2ZXIiCiAJZGVwZW5kcyBvbiBUV0w0MDMwX0NPUkUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZQppbmRleCAxOWM3NjAzLi40MDNhMWE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlCkBAIC0yNiw2ICsyNiw3IEBACiBvYmotJChDT05GSUdfSU5QVVRfREE5MDUyX09OS0VZKQkrPSBkYTkwNTJfb25rZXkubwogb2JqLSQoQ09ORklHX0lOUFVUX0RBOTA1NV9PTktFWSkJKz0gZGE5MDU1X29ua2V5Lm8KIG9iai0kKENPTkZJR19JTlBVVF9ETTM1NUVWTSkJCSs9IGRtMzU1ZXZtX2tleXMubworb2JqLSQoQ09ORklHX0lOUFVUX0UzWDBfQlVUVE9OKQkJKz0gZTN4MC1idXR0b24ubwogb2JqLSQoQ09ORklHX0lOUFVUX0RSVjI2MFhfSEFQVElDUykJKz0gZHJ2MjYweC5vCiBvYmotJChDT05GSUdfSU5QVVRfRFJWMjY2N19IQVBUSUNTKQkrPSBkcnYyNjY3Lm8KIG9iai0kKENPTkZJR19JTlBVVF9HUDJBKQkJKz0gZ3AyYXAwMDJhMDBmLm8KQEAgLTUzLDEyICs1NCwxNSBAQAogb2JqLSQoQ09ORklHX0lOUFVUX1BPV0VSTUFURSkJCSs9IHBvd2VybWF0ZS5vCiBvYmotJChDT05GSUdfSU5QVVRfUFdNX0JFRVBFUikJCSs9IHB3bS1iZWVwZXIubwogb2JqLSQoQ09ORklHX0lOUFVUX1JCNTMyX0JVVFRPTikJKz0gcmI1MzJfYnV0dG9uLm8KK29iai0kKENPTkZJR19JTlBVVF9SRUdVTEFUT1JfSEFQVElDKQkrPSByZWd1bGF0b3ItaGFwdGljLm8KIG9iai0kKENPTkZJR19JTlBVVF9SRVRVX1BXUkJVVFRPTikJKz0gcmV0dS1wd3JidXR0b24ubworb2JqLSQoQ09ORklHX0lOUFVUX0FYUDIwWF9QRUspCQkrPSBheHAyMHgtcGVrLm8KIG9iai0kKENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSKQkrPSByb3RhcnlfZW5jb2Rlci5vCiBvYmotJChDT05GSUdfSU5QVVRfU0dJX0JUTlMpCQkrPSBzZ2lfYnRucy5vCiBvYmotJChDT05GSUdfSU5QVVRfU0lSRlNPQ19PTktFWSkJKz0gc2lyZnNvYy1vbmtleS5vCiBvYmotJChDT05GSUdfSU5QVVRfU09DX0JVVFRPTl9BUlJBWSkJKz0gc29jX2J1dHRvbl9hcnJheS5vCiBvYmotJChDT05GSUdfSU5QVVRfU1BBUkNTUEtSKQkJKz0gc3BhcmNzcGtyLm8KK29iai0kKENPTkZJR19JTlBVVF9UUFM2NTIxOF9QV1JCVVRUT04pCSs9IHRwczY1MjE4LXB3cmJ1dHRvbi5vCiBvYmotJChDT05GSUdfSU5QVVRfVFdMNDAzMF9QV1JCVVRUT04pCSs9IHR3bDQwMzAtcHdyYnV0dG9uLm8KIG9iai0kKENPTkZJR19JTlBVVF9UV0w0MDMwX1ZJQlJBKQkrPSB0d2w0MDMwLXZpYnJhLm8KIG9iai0kKENPTkZJR19JTlBVVF9UV0w2MDQwX1ZJQlJBKQkrPSB0d2w2MDQwLXZpYnJhLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9heHAyMHgtcGVrLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvYXhwMjB4LXBlay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxYzg0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYXhwMjB4LXBlay5jCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogYXhwMjB4IHBvd2VyIGJ1dHRvbiBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzIENhcmxvIENhaW9uZSA8Y2FybG9AY2Fpb25lLm9yZz4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcworICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvYXhwMjB4Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjZGVmaW5lIEFYUDIwWF9QRUtfU1RBUlRVUF9NQVNLCQkoMHhjMCkKKyNkZWZpbmUgQVhQMjBYX1BFS19TSFVURE9XTl9NQVNLCSgweDAzKQorCitzdHJ1Y3QgYXhwMjB4X3BlayB7CisJc3RydWN0IGF4cDIweF9kZXYgKmF4cDIweDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwlpbnQgaXJxX2RicjsKKwlpbnQgaXJxX2RiZjsKK307CisKK3N0cnVjdCBheHAyMHhfdGltZSB7CisJdW5zaWduZWQgaW50IHRpbWU7CisJdW5zaWduZWQgaW50IGlkeDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXhwMjB4X3RpbWUgc3RhcnR1cF90aW1lW10gPSB7CisJeyAudGltZSA9IDEyOCwgIC5pZHggPSAwIH0sCisJeyAudGltZSA9IDEwMDAsIC5pZHggPSAyIH0sCisJeyAudGltZSA9IDMwMDAsIC5pZHggPSAxIH0sCisJeyAudGltZSA9IDIwMDAsIC5pZHggPSAzIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF4cDIweF90aW1lIHNodXRkb3duX3RpbWVbXSA9IHsKKwl7IC50aW1lID0gNDAwMCwgIC5pZHggPSAwIH0sCisJeyAudGltZSA9IDYwMDAsICAuaWR4ID0gMSB9LAorCXsgLnRpbWUgPSA4MDAwLCAgLmlkeCA9IDIgfSwKKwl7IC50aW1lID0gMTAwMDAsIC5pZHggPSAzIH0sCit9OworCitzdHJ1Y3QgYXhwMjB4X3Bla19leHRfYXR0ciB7CisJY29uc3Qgc3RydWN0IGF4cDIweF90aW1lICpwX3RpbWU7CisJdW5zaWduZWQgaW50IG1hc2s7Cit9OworCitzdGF0aWMgc3RydWN0IGF4cDIweF9wZWtfZXh0X2F0dHIgYXhwMjB4X3Bla19zdGFydHVwX2V4dF9hdHRyID0geworCS5wX3RpbWUJPSBzdGFydHVwX3RpbWUsCisJLm1hc2sJPSBBWFAyMFhfUEVLX1NUQVJUVVBfTUFTSywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXhwMjB4X3Bla19leHRfYXR0ciBheHAyMHhfcGVrX3NodXRkb3duX2V4dF9hdHRyID0geworCS5wX3RpbWUJPSBzaHV0ZG93bl90aW1lLAorCS5tYXNrCT0gQVhQMjBYX1BFS19TSFVURE9XTl9NQVNLLAorfTsKKworc3RhdGljIHN0cnVjdCBheHAyMHhfcGVrX2V4dF9hdHRyICpnZXRfYXhwX2V4dF9hdHRyKHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyKQoreworCXJldHVybiBjb250YWluZXJfb2YoYXR0ciwgc3RydWN0IGRldl9leHRfYXR0cmlidXRlLCBhdHRyKS0+dmFyOworfQorCitzdGF0aWMgc3NpemVfdCBheHAyMHhfc2hvd19leHRfYXR0cihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGF4cDIweF9wZWsgKmF4cDIweF9wZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYXhwMjB4X3Bla19leHRfYXR0ciAqYXhwMjB4X2VhID0gZ2V0X2F4cF9leHRfYXR0cihhdHRyKTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCByZXQsIGk7CisKKwlyZXQgPSByZWdtYXBfcmVhZChheHAyMHhfcGVrLT5heHAyMHgtPnJlZ21hcCwgQVhQMjBYX1BFS19LRVksICZ2YWwpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCXZhbCAmPSBheHAyMHhfZWEtPm1hc2s7CisJdmFsID4+PSBmZnMoYXhwMjB4X2VhLT5tYXNrKSAtIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlpZiAodmFsID09IGF4cDIweF9lYS0+cF90aW1lW2ldLmlkeCkKKwkJCXZhbCA9IGF4cDIweF9lYS0+cF90aW1lW2ldLnRpbWU7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgdmFsKTsKK30KKworc3RhdGljIHNzaXplX3QgYXhwMjB4X3N0b3JlX2V4dF9hdHRyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGF4cDIweF9wZWsgKmF4cDIweF9wZWsgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYXhwMjB4X3Bla19leHRfYXR0ciAqYXhwMjB4X2VhID0gZ2V0X2F4cF9leHRfYXR0cihhdHRyKTsKKwljaGFyIHZhbF9zdHJbMjBdOworCXNpemVfdCBsZW47CisJaW50IHJldCwgaTsKKwl1bnNpZ25lZCBpbnQgdmFsLCBpZHggPSAwOworCXVuc2lnbmVkIGludCBiZXN0X2VyciA9IFVJTlRfTUFYOworCisJdmFsX3N0cltzaXplb2YodmFsX3N0cikgLSAxXSA9ICdcMCc7CisJc3RybmNweSh2YWxfc3RyLCBidWYsIHNpemVvZih2YWxfc3RyKSAtIDEpOworCWxlbiA9IHN0cmxlbih2YWxfc3RyKTsKKworCWlmIChsZW4gJiYgdmFsX3N0cltsZW4gLSAxXSA9PSAnXG4nKQorCQl2YWxfc3RyW2xlbiAtIDFdID0gJ1wwJzsKKworCXJldCA9IGtzdHJ0b3VpbnQodmFsX3N0ciwgMTAsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAzOyBpID49IDA7IGktLSkgeworCQl1bnNpZ25lZCBpbnQgZXJyOworCisJCWVyciA9IGFicyhheHAyMHhfZWEtPnBfdGltZVtpXS50aW1lIC0gdmFsKTsKKwkJaWYgKGVyciA8IGJlc3RfZXJyKSB7CisJCQliZXN0X2VyciA9IGVycjsKKwkJCWlkeCA9IGF4cDIweF9lYS0+cF90aW1lW2ldLmlkeDsKKwkJfQorCisJCWlmICghZXJyKQorCQkJYnJlYWs7CisJfQorCisJaWR4IDw8PSBmZnMoYXhwMjB4X2VhLT5tYXNrKSAtIDE7CisJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGF4cDIweF9wZWstPmF4cDIweC0+cmVnbWFwLAorCQkJCSBBWFAyMFhfUEVLX0tFWSwKKwkJCQkgYXhwMjB4X2VhLT5tYXNrLCBpZHgpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUgYXhwMjB4X2Rldl9hdHRyX3N0YXJ0dXAgPSB7CisJLmF0dHIJPSBfX0FUVFIoc3RhcnR1cCwgMDY0NCwgYXhwMjB4X3Nob3dfZXh0X2F0dHIsIGF4cDIweF9zdG9yZV9leHRfYXR0ciksCisJLnZhcgk9ICZheHAyMHhfcGVrX3N0YXJ0dXBfZXh0X2F0dHIsCit9OworCitzdGF0aWMgc3RydWN0IGRldl9leHRfYXR0cmlidXRlIGF4cDIweF9kZXZfYXR0cl9zaHV0ZG93biA9IHsKKwkuYXR0cgk9IF9fQVRUUihzaHV0ZG93biwgMDY0NCwgYXhwMjB4X3Nob3dfZXh0X2F0dHIsIGF4cDIweF9zdG9yZV9leHRfYXR0ciksCisJLnZhcgk9ICZheHAyMHhfcGVrX3NodXRkb3duX2V4dF9hdHRyLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmF4cDIweF9hdHRyaWJ1dGVzW10gPSB7CisJJmF4cDIweF9kZXZfYXR0cl9zdGFydHVwLmF0dHIuYXR0ciwKKwkmYXhwMjB4X2Rldl9hdHRyX3NodXRkb3duLmF0dHIuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYXhwMjB4X2F0dHJpYnV0ZV9ncm91cCA9IHsKKwkuYXR0cnMgPSBheHAyMHhfYXR0cmlidXRlcywKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBheHAyMHhfcGVrX2lycShpbnQgaXJxLCB2b2lkICpwd3IpCit7CisJc3RydWN0IGlucHV0X2RldiAqaWRldiA9IHB3cjsKKwlzdHJ1Y3QgYXhwMjB4X3BlayAqYXhwMjB4X3BlayA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOworCisJaWYgKGlycSA9PSBheHAyMHhfcGVrLT5pcnFfZGJyKQorCQlpbnB1dF9yZXBvcnRfa2V5KGlkZXYsIEtFWV9QT1dFUiwgdHJ1ZSk7CisJZWxzZSBpZiAoaXJxID09IGF4cDIweF9wZWstPmlycV9kYmYpCisJCWlucHV0X3JlcG9ydF9rZXkoaWRldiwgS0VZX1BPV0VSLCBmYWxzZSk7CisKKwlpbnB1dF9zeW5jKGlkZXYpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBheHAyMHhfcmVtb3ZlX3N5c2ZzX2dyb3VwKHZvaWQgKl9kYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IF9kYXRhOworCisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZheHAyMHhfYXR0cmlidXRlX2dyb3VwKTsKK30KKworc3RhdGljIGludCBheHAyMHhfcGVrX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGF4cDIweF9wZWsgKmF4cDIweF9wZWs7CisJc3RydWN0IGF4cDIweF9kZXYgKmF4cDIweDsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OworCWludCBlcnJvcjsKKworCWF4cDIweF9wZWsgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBheHAyMHhfcGVrKSwKKwkJCQkgIEdGUF9LRVJORUwpOworCWlmICghYXhwMjB4X3BlaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlheHAyMHhfcGVrLT5heHAyMHggPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJYXhwMjB4ID0gYXhwMjB4X3Blay0+YXhwMjB4OworCisJYXhwMjB4X3Blay0+aXJxX2RiciA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJQRUtfREJSIik7CisJaWYgKGF4cDIweF9wZWstPmlycV9kYnIgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgUEVLX0RCUiwgZXJyb3I9JWRcbiIsCisJCQkJYXhwMjB4X3Blay0+aXJxX2Ricik7CisJCXJldHVybiBheHAyMHhfcGVrLT5pcnFfZGJyOworCX0KKwlheHAyMHhfcGVrLT5pcnFfZGJyID0gcmVnbWFwX2lycV9nZXRfdmlycShheHAyMHgtPnJlZ21hcF9pcnFjLAorCQkJCQkJICBheHAyMHhfcGVrLT5pcnFfZGJyKTsKKworCWF4cDIweF9wZWstPmlycV9kYmYgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiUEVLX0RCRiIpOworCWlmIChheHAyMHhfcGVrLT5pcnFfZGJmIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgZm9yIFBFS19EQkYsIGVycm9yPSVkXG4iLAorCQkJCWF4cDIweF9wZWstPmlycV9kYmYpOworCQlyZXR1cm4gYXhwMjB4X3Blay0+aXJxX2RiZjsKKwl9CisJYXhwMjB4X3Blay0+aXJxX2RiZiA9IHJlZ21hcF9pcnFfZ2V0X3ZpcnEoYXhwMjB4LT5yZWdtYXBfaXJxYywKKwkJCQkJCSAgYXhwMjB4X3Blay0+aXJxX2RiZik7CisKKwlheHAyMHhfcGVrLT5pbnB1dCA9IGRldm1faW5wdXRfYWxsb2NhdGVfZGV2aWNlKCZwZGV2LT5kZXYpOworCWlmICghYXhwMjB4X3Blay0+aW5wdXQpCisJCXJldHVybiAtRU5PTUVNOworCisJaWRldiA9IGF4cDIweF9wZWstPmlucHV0OworCisJaWRldi0+bmFtZSA9ICJheHAyMHgtcGVrIjsKKwlpZGV2LT5waHlzID0gIm0xa2JkL2lucHV0MiI7CisJaWRldi0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisKKwlpbnB1dF9zZXRfY2FwYWJpbGl0eShpZGV2LCBFVl9LRVksIEtFWV9QT1dFUik7CisKKwlpbnB1dF9zZXRfZHJ2ZGF0YShpZGV2LCBheHAyMHhfcGVrKTsKKworCWVycm9yID0gZGV2bV9yZXF1ZXN0X2FueV9jb250ZXh0X2lycSgmcGRldi0+ZGV2LCBheHAyMHhfcGVrLT5pcnFfZGJyLAorCQkJCQkgICAgIGF4cDIweF9wZWtfaXJxLCAwLAorCQkJCQkgICAgICJheHAyMHgtcGVrLWRiciIsIGlkZXYpOworCWlmIChlcnJvciA8IDApIHsKKwkJZGV2X2VycihheHAyMHgtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGRiciBJUlEjJWQ6ICVkXG4iLAorCQkJYXhwMjB4X3Blay0+aXJxX2RiciwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJZXJyb3IgPSBkZXZtX3JlcXVlc3RfYW55X2NvbnRleHRfaXJxKCZwZGV2LT5kZXYsIGF4cDIweF9wZWstPmlycV9kYmYsCisJCQkJCSAgYXhwMjB4X3Bla19pcnEsIDAsCisJCQkJCSAgImF4cDIweC1wZWstZGJmIiwgaWRldik7CisJaWYgKGVycm9yIDwgMCkgeworCQlkZXZfZXJyKGF4cDIweC0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgZGJmIElSUSMlZDogJWRcbiIsCisJCQlheHAyMHhfcGVrLT5pcnFfZGJmLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwllcnJvciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZheHAyMHhfYXR0cmlidXRlX2dyb3VwKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycihheHAyMHgtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgc3lzZnMgYXR0cmlidXRlczogJWRcbiIsCisJCQllcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwllcnJvciA9IGRldm1fYWRkX2FjdGlvbigmcGRldi0+ZGV2LAorCQkJCWF4cDIweF9yZW1vdmVfc3lzZnNfZ3JvdXAsICZwZGV2LT5kZXYpOworCWlmIChlcnJvcikgeworCQlheHAyMHhfcmVtb3ZlX3N5c2ZzX2dyb3VwKCZwZGV2LT5kZXYpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWRkIHN5c2ZzIGNsZWFudXAgYWN0aW9uOiAlZFxuIiwKKwkJCWVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlkZXYpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKGF4cDIweC0+ZGV2LCAiQ2FuJ3QgcmVnaXN0ZXIgaW5wdXQgZGV2aWNlOiAlZFxuIiwKKwkJCWVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGF4cDIweF9wZWspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGF4cDIweF9wZWtfZHJpdmVyID0geworCS5wcm9iZQkJPSBheHAyMHhfcGVrX3Byb2JlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAiYXhwMjB4LXBlayIsCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGF4cDIweF9wZWtfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJheHAyMHggUG93ZXIgQnV0dG9uIik7CitNT0RVTEVfQVVUSE9SKCJDYXJsbyBDYWlvbmUgPGNhcmxvQGNhaW9uZS5vcmc+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvZHJ2MjYweC5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2RydjI2MHguYwppbmRleCBhMzY0ZTEwLi41OTk1NzgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvZHJ2MjYweC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9kcnYyNjB4LmMKQEAgLTczMyw3ICs3MzMsNiBAQAogfTsKIG1vZHVsZV9pMmNfZHJpdmVyKGRydjI2MHhfZHJpdmVyKTsKIAotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpkcnYyNjB4LWhhcHRpY3MiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVEkgRFJWMjYweCBoYXB0aWNzIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiRGFuIE11cnBoeSA8ZG11cnBoeUB0aS5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvZHJ2MjY2Ny5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2RydjI2NjcuYwppbmRleCBhMDIxNzQ0Li5mYzBmZGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvZHJ2MjY2Ny5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9kcnYyNjY3LmMKQEAgLTQ5Miw3ICs0OTIsNiBAQAogfTsKIG1vZHVsZV9pMmNfZHJpdmVyKGRydjI2NjdfZHJpdmVyKTsKIAotTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpkcnYyNjY3LWhhcHRpY3MiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVEkgRFJWMjY2NyBoYXB0aWNzIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiRGFuIE11cnBoeSA8ZG11cnBoeUB0aS5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvZTN4MC1idXR0b24uYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9lM3gwLWJ1dHRvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzYmZjYTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L21pc2MvZTN4MC1idXR0b24uYwpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgTmF0aW9uYWwgSW5zdHJ1bWVudHMgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBEcml2ZXIgZm9yIE5JIEV0dHVzIFJlc2VhcmNoIFVTUlAgRTN4MCBCdXR0b24gRHJpdmVyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCitzdGF0aWMgaXJxcmV0dXJuX3QgZTN4MF9idXR0b25fcmVsZWFzZV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGlucHV0X2RldiAqaWRldiA9IGRhdGE7CisKKwlpbnB1dF9yZXBvcnRfa2V5KGlkZXYsIEtFWV9QT1dFUiwgMCk7CisJaW5wdXRfc3luYyhpZGV2KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGUzeDBfYnV0dG9uX3ByZXNzX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2ID0gZGF0YTsKKworCWlucHV0X3JlcG9ydF9rZXkoaWRldiwgS0VZX1BPV0VSLCAxKTsKKwlwbV93YWtldXBfZXZlbnQoaWRldi0+ZGV2LnBhcmVudCwgMCk7CisJaW5wdXRfc3luYyhpZGV2KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCBlM3gwX2J1dHRvbl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKKwkJZW5hYmxlX2lycV93YWtlKHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJwcmVzcyIpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGUzeDBfYnV0dG9uX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCisJCWRpc2FibGVfaXJxX3dha2UocGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgInByZXNzIikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhlM3gwX2J1dHRvbl9wbV9vcHMsCisJCQkgZTN4MF9idXR0b25fc3VzcGVuZCwgZTN4MF9idXR0b25fcmVzdW1lKTsKKworc3RhdGljIGludCBlM3gwX2J1dHRvbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCWludCBpcnFfcHJlc3MsIGlycV9yZWxlYXNlOworCWludCBlcnJvcjsKKworCWlycV9wcmVzcyA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJwcmVzcyIpOworCWlmIChpcnFfcHJlc3MgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgJ3ByZXNzJywgZXJyb3I9JWRcbiIsCisJCQlpcnFfcHJlc3MpOworCQlyZXR1cm4gaXJxX3ByZXNzOworCX0KKworCWlycV9yZWxlYXNlID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgInJlbGVhc2UiKTsKKwlpZiAoaXJxX3JlbGVhc2UgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSBmb3IgJ3JlbGVhc2UnLCBlcnJvcj0lZFxuIiwKKwkJCWlycV9yZWxlYXNlKTsKKwkJcmV0dXJuIGlycV9yZWxlYXNlOworCX0KKworCWlucHV0ID0gZGV2bV9pbnB1dF9hbGxvY2F0ZV9kZXZpY2UoJnBkZXYtPmRldik7CisJaWYgKCFpbnB1dCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbnB1dC0+bmFtZSA9ICJOSSBFdHR1cyBSZXNlYXJjaCBVU1JQIEUzeDAgQnV0dG9uIERyaXZlciI7CisJaW5wdXQtPnBoeXMgPSAiZTN4MF9idXR0b24vaW5wdXQwIjsKKwlpbnB1dC0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisKKwlpbnB1dF9zZXRfY2FwYWJpbGl0eShpbnB1dCwgRVZfS0VZLCBLRVlfUE9XRVIpOworCisJZXJyb3IgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycV9wcmVzcywKKwkJCQkgZTN4MF9idXR0b25fcHJlc3NfaGFuZGxlciwgMCwKKwkJCQkgImUzeDAtYnV0dG9uIiwgaW5wdXQpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCAncHJlc3MnIElSUSMlZDogJWRcbiIsCisJCQlpcnFfcHJlc3MsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWVycm9yID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnFfcmVsZWFzZSwKKwkJCQkgZTN4MF9idXR0b25fcmVsZWFzZV9oYW5kbGVyLCAwLAorCQkJCSAiZTN4MC1idXR0b24iLCBpbnB1dCk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0ICdyZWxlYXNlJyBJUlEjJWQ6ICVkXG4iLAorCQkJaXJxX3JlbGVhc2UsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3QgcmVnaXN0ZXIgaW5wdXQgZGV2aWNlOiAlZFxuIiwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5wdXQpOworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlM3gwX2J1dHRvbl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMCk7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGUzeDBfYnV0dG9uX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJldHR1cyxlM3gwLWJ1dHRvbiIsIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZTN4MF9idXR0b25fbWF0Y2gpOworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGUzeDBfYnV0dG9uX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiZTN4MC1idXR0b24iLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoZTN4MF9idXR0b25fbWF0Y2gpLAorCQkucG0JPSAmZTN4MF9idXR0b25fcG1fb3BzLAorCX0sCisJLnByb2JlCQk9IGUzeDBfYnV0dG9uX3Byb2JlLAorCS5yZW1vdmUJCT0gZTN4MF9idXR0b25fcmVtb3ZlLAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihlM3gwX2J1dHRvbl9kcml2ZXIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQVVUSE9SKCJNb3JpdHogRmlzY2hlciA8bW9yaXR6LmZpc2NoZXJAZXR0dXMuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOSSBFdHR1cyBSZXNlYXJjaCBVU1JQIEUzeDAgQnV0dG9uIGRyaXZlciIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTplM3gwLWJ1dHRvbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3JlZ3VsYXRvci1oYXB0aWMuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9yZWd1bGF0b3ItaGFwdGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyZWI5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9yZWd1bGF0b3ItaGFwdGljLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBSZWd1bGF0b3IgaGFwdGljIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQXV0aG9yOiBKYWV3b24gS2ltIDxqYWV3b24wMi5raW1Ac2Ftc3VuZy5jb20+CisgKiBBdXRob3I6IEh5dW5oZWUgS2ltIDxoeXVuaGVlLmtpbUBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9yZWd1bGF0b3ItaGFwdGljLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjZGVmaW5lIE1BWF9NQUdOSVRVREVfU0hJRlQJMTYKKworc3RydWN0IHJlZ3VsYXRvcl9oYXB0aWMgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJc3RydWN0IHJlZ3VsYXRvciAqcmVndWxhdG9yOworCisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IG11dGV4IG11dGV4OworCisJYm9vbCBhY3RpdmU7CisJYm9vbCBzdXNwZW5kZWQ7CisKKwl1bnNpZ25lZCBpbnQgbWF4X3ZvbHQ7CisJdW5zaWduZWQgaW50IG1pbl92b2x0OworCXVuc2lnbmVkIGludCBtYWduaXR1ZGU7Cit9OworCitzdGF0aWMgaW50IHJlZ3VsYXRvcl9oYXB0aWNfdG9nZ2xlKHN0cnVjdCByZWd1bGF0b3JfaGFwdGljICpoYXB0aWMsIGJvb2wgb24pCit7CisJaW50IGVycm9yOworCisJaWYgKGhhcHRpYy0+YWN0aXZlICE9IG9uKSB7CisKKwkJZXJyb3IgPSBvbiA/IHJlZ3VsYXRvcl9lbmFibGUoaGFwdGljLT5yZWd1bGF0b3IpIDoKKwkJCSAgICAgcmVndWxhdG9yX2Rpc2FibGUoaGFwdGljLT5yZWd1bGF0b3IpOworCQlpZiAoZXJyb3IpIHsKKwkJCWRldl9lcnIoaGFwdGljLT5kZXYsCisJCQkJImZhaWxlZCB0byBzd2l0Y2ggcmVndWxhdG9yICVzOiAlZFxuIiwKKwkJCQlvbiA/ICJvbiIgOiAib2ZmIiwgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJaGFwdGljLT5hY3RpdmUgPSBvbjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWd1bGF0b3JfaGFwdGljX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfaGFwdGljICpoYXB0aWMsCisJCQkJCSB1bnNpZ25lZCBpbnQgbWFnbml0dWRlKQoreworCXU2NCB2b2x0X21hZ19tdWx0aTsKKwl1bnNpZ25lZCBpbnQgaW50ZW5zaXR5OworCWludCBlcnJvcjsKKworCXZvbHRfbWFnX211bHRpID0gKHU2NCkoaGFwdGljLT5tYXhfdm9sdCAtIGhhcHRpYy0+bWluX3ZvbHQpICogbWFnbml0dWRlOworCWludGVuc2l0eSA9ICh1bnNpZ25lZCBpbnQpKHZvbHRfbWFnX211bHRpID4+IE1BWF9NQUdOSVRVREVfU0hJRlQpOworCisJZXJyb3IgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UoaGFwdGljLT5yZWd1bGF0b3IsCisJCQkJICAgICAgaW50ZW5zaXR5ICsgaGFwdGljLT5taW5fdm9sdCwKKwkJCQkgICAgICBoYXB0aWMtPm1heF92b2x0KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycihoYXB0aWMtPmRldiwgImNhbm5vdCBzZXQgcmVndWxhdG9yIHZvbHRhZ2UgdG8gJWQ6ICVkXG4iLAorCQkJaW50ZW5zaXR5ICsgaGFwdGljLT5taW5fdm9sdCwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJcmVndWxhdG9yX2hhcHRpY190b2dnbGUoaGFwdGljLCAhIW1hZ25pdHVkZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVndWxhdG9yX2hhcHRpY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yX2hhcHRpYyAqaGFwdGljID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJCXN0cnVjdCByZWd1bGF0b3JfaGFwdGljLCB3b3JrKTsKKworCW11dGV4X2xvY2soJmhhcHRpYy0+bXV0ZXgpOworCisJaWYgKCFoYXB0aWMtPnN1c3BlbmRlZCkKKwkJcmVndWxhdG9yX2hhcHRpY19zZXRfdm9sdGFnZShoYXB0aWMsIGhhcHRpYy0+bWFnbml0dWRlKTsKKworCW11dGV4X3VubG9jaygmaGFwdGljLT5tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgcmVndWxhdG9yX2hhcHRpY19wbGF5X2VmZmVjdChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwgdm9pZCAqZGF0YSwKKwkJCQkJc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KQoreworCXN0cnVjdCByZWd1bGF0b3JfaGFwdGljICpoYXB0aWMgPSBpbnB1dF9nZXRfZHJ2ZGF0YShpbnB1dCk7CisKKwloYXB0aWMtPm1hZ25pdHVkZSA9IGVmZmVjdC0+dS5ydW1ibGUuc3Ryb25nX21hZ25pdHVkZTsKKwlpZiAoIWhhcHRpYy0+bWFnbml0dWRlKQorCQloYXB0aWMtPm1hZ25pdHVkZSA9IGVmZmVjdC0+dS5ydW1ibGUud2Vha19tYWduaXR1ZGU7CisKKwlzY2hlZHVsZV93b3JrKCZoYXB0aWMtPndvcmspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ3VsYXRvcl9oYXB0aWNfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9oYXB0aWMgKmhhcHRpYyA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKKworCWNhbmNlbF93b3JrX3N5bmMoJmhhcHRpYy0+d29yayk7CisJcmVndWxhdG9yX2hhcHRpY19zZXRfdm9sdGFnZShoYXB0aWMsIDApOworfQorCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkCityZWd1bGF0b3JfaGFwdGljX3BhcnNlX2R0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJlZ3VsYXRvcl9oYXB0aWMgKmhhcHRpYykKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CisJaW50IGVycm9yOworCisJbm9kZSA9IGRldi0+b2Zfbm9kZTsKKwlpZighbm9kZSkgeworCQlkZXZfZXJyKGRldiwgIk1pc3NpbmcgZHZlaWNlIHRyZWUgZGF0YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVycm9yID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgIm1heC1taWNyb3ZvbHQiLCAmaGFwdGljLT5tYXhfdm9sdCk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2LCAiY2Fubm90IHBhcnNlIG1heC1taWNyb3ZvbHRcbiIpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJZXJyb3IgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAibWluLW1pY3Jvdm9sdCIsICZoYXB0aWMtPm1pbl92b2x0KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgcGFyc2UgbWluLW1pY3Jvdm9sdFxuIik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZWd1bGF0b3JfaGFwdGljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9oYXB0aWNfZGF0YSAqcGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCByZWd1bGF0b3JfaGFwdGljICpoYXB0aWM7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCWludCBlcnJvcjsKKworCWhhcHRpYyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmhhcHRpYyksIEdGUF9LRVJORUwpOworCWlmICghaGFwdGljKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhhcHRpYyk7CisJaGFwdGljLT5kZXYgPSAmcGRldi0+ZGV2OworCW11dGV4X2luaXQoJmhhcHRpYy0+bXV0ZXgpOworCUlOSVRfV09SSygmaGFwdGljLT53b3JrLCByZWd1bGF0b3JfaGFwdGljX3dvcmspOworCisJaWYgKHBkYXRhKSB7CisJCWhhcHRpYy0+bWF4X3ZvbHQgPSBwZGF0YS0+bWF4X3ZvbHQ7CisJCWhhcHRpYy0+bWluX3ZvbHQgPSBwZGF0YS0+bWluX3ZvbHQ7CisJfSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19PRikpIHsKKwkJZXJyb3IgPSByZWd1bGF0b3JfaGFwdGljX3BhcnNlX2R0KCZwZGV2LT5kZXYsIGhhcHRpYyk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9IGVsc2UgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJNaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwloYXB0aWMtPnJlZ3VsYXRvciA9IGRldm1fcmVndWxhdG9yX2dldF9leGNsdXNpdmUoJnBkZXYtPmRldiwgImhhcHRpYyIpOworCWlmIChJU19FUlIoaGFwdGljLT5yZWd1bGF0b3IpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgcmVndWxhdG9yXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoaGFwdGljLT5yZWd1bGF0b3IpOworCX0KKworCWlucHV0X2RldiA9IGRldm1faW5wdXRfYWxsb2NhdGVfZGV2aWNlKCZwZGV2LT5kZXYpOworCWlmICghaW5wdXRfZGV2KQorCQlyZXR1cm4JLUVOT01FTTsKKworCWhhcHRpYy0+aW5wdXRfZGV2ID0gaW5wdXRfZGV2OworCWhhcHRpYy0+aW5wdXRfZGV2LT5uYW1lID0gInJlZ3VsYXRvci1oYXB0aWMiOworCWhhcHRpYy0+aW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwloYXB0aWMtPmlucHV0X2Rldi0+Y2xvc2UgPSByZWd1bGF0b3JfaGFwdGljX2Nsb3NlOworCWlucHV0X3NldF9kcnZkYXRhKGhhcHRpYy0+aW5wdXRfZGV2LCBoYXB0aWMpOworCWlucHV0X3NldF9jYXBhYmlsaXR5KGhhcHRpYy0+aW5wdXRfZGV2LCBFVl9GRiwgRkZfUlVNQkxFKTsKKworCWVycm9yID0gaW5wdXRfZmZfY3JlYXRlX21lbWxlc3MoaW5wdXRfZGV2LCBOVUxMLAorCQkJCQlyZWd1bGF0b3JfaGFwdGljX3BsYXlfZWZmZWN0KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBmb3JjZS1mZWVkYmFja1xuIik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShoYXB0aWMtPmlucHV0X2Rldik7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgcmVndWxhdG9yX2hhcHRpY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHJlZ3VsYXRvcl9oYXB0aWMgKmhhcHRpYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBlcnJvcjsKKworCWVycm9yID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZoYXB0aWMtPm11dGV4KTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCXJlZ3VsYXRvcl9oYXB0aWNfc2V0X3ZvbHRhZ2UoaGFwdGljLCAwKTsKKworCWhhcHRpYy0+c3VzcGVuZGVkID0gdHJ1ZTsKKworCW11dGV4X3VubG9jaygmaGFwdGljLT5tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX21heWJlX3VudXNlZCByZWd1bGF0b3JfaGFwdGljX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCByZWd1bGF0b3JfaGFwdGljICpoYXB0aWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBpbnQgbWFnbml0dWRlOworCisJbXV0ZXhfbG9jaygmaGFwdGljLT5tdXRleCk7CisKKwloYXB0aWMtPnN1c3BlbmRlZCA9IGZhbHNlOworCisJbWFnbml0dWRlID0gQUNDRVNTX09OQ0UoaGFwdGljLT5tYWduaXR1ZGUpOworCWlmIChtYWduaXR1ZGUpCisJCXJlZ3VsYXRvcl9oYXB0aWNfc2V0X3ZvbHRhZ2UoaGFwdGljLCBtYWduaXR1ZGUpOworCisJbXV0ZXhfdW5sb2NrKCZoYXB0aWMtPm11dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMocmVndWxhdG9yX2hhcHRpY19wbV9vcHMsCisJCXJlZ3VsYXRvcl9oYXB0aWNfc3VzcGVuZCwgcmVndWxhdG9yX2hhcHRpY19yZXN1bWUpOworCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCByZWd1bGF0b3JfaGFwdGljX2R0X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJyZWd1bGF0b3ItaGFwdGljIiB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJlZ3VsYXRvcl9oYXB0aWNfZHJpdmVyID0geworCS5wcm9iZQkJPSByZWd1bGF0b3JfaGFwdGljX3Byb2JlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQkJPSAicmVndWxhdG9yLWhhcHRpYyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHJlZ3VsYXRvcl9oYXB0aWNfZHRfbWF0Y2gsCisJCS5wbQkJPSAmcmVndWxhdG9yX2hhcHRpY19wbV9vcHMsCisJfSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHJlZ3VsYXRvcl9oYXB0aWNfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiSmFld29uIEtpbSA8amFld29uMDIua2ltQHNhbXN1bmcuY29tPiIpOworTU9EVUxFX0FVVEhPUigiSHl1bmhlZSBLaW0gPGh5dW5oZWUua2ltQHNhbXN1bmcuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSZWd1bGF0b3IgaGFwdGljIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3RwczY1MjE4LXB3cmJ1dHRvbi5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3RwczY1MjE4LXB3cmJ1dHRvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NTA4ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L21pc2MvdHBzNjUyMTgtcHdyYnV0dG9uLmMKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBUZXhhcyBJbnN0cnVtZW50cycgVFBTNjUyMTggUG93ZXIgQnV0dG9uIElucHV0IERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQgLSBodHRwOi8vd3d3LnRpLmNvbS8KKyAqIEF1dGhvcjogRmVsaXBlIEJhbGJpIDxiYWxiaUB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC90cHM2NTIxOC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCitzdHJ1Y3QgdHBzNjUyMThfcHdyYnV0dG9uIHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IHRwczY1MjE4ICp0cHM7CisJc3RydWN0IGlucHV0X2RldiAqaWRldjsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB0cHM2NTIxOF9wd3JfaXJxKGludCBpcnEsIHZvaWQgKl9wd3IpCit7CisJc3RydWN0IHRwczY1MjE4X3B3cmJ1dHRvbiAqcHdyID0gX3B3cjsKKwl1bnNpZ25lZCBpbnQgcmVnOworCWludCBlcnJvcjsKKworCWVycm9yID0gdHBzNjUyMThfcmVnX3JlYWQocHdyLT50cHMsIFRQUzY1MjE4X1JFR19TVEFUVVMsICZyZWcpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKHB3ci0+ZGV2LCAiY2FuJ3QgcmVhZCByZWdpc3RlcjogJWRcbiIsIGVycm9yKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJlZyAmIFRQUzY1MjE4X1NUQVRVU19QQl9TVEFURSkgeworCQlpbnB1dF9yZXBvcnRfa2V5KHB3ci0+aWRldiwgS0VZX1BPV0VSLCAxKTsKKwkJcG1fd2FrZXVwX2V2ZW50KHB3ci0+ZGV2LCAwKTsKKwl9IGVsc2UgeworCQlpbnB1dF9yZXBvcnRfa2V5KHB3ci0+aWRldiwgS0VZX1BPV0VSLCAwKTsKKwl9CisKKwlpbnB1dF9zeW5jKHB3ci0+aWRldik7CisKK291dDoKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgdHBzNjUyMThfcHdyb25fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdHBzNjUyMTggKnRwcyA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCB0cHM2NTIxOF9wd3JidXR0b24gKnB3cjsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OworCWludCBlcnJvcjsKKwlpbnQgaXJxOworCisJcHdyID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwd3IpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXB3cikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZGV2ID0gZGV2bV9pbnB1dF9hbGxvY2F0ZV9kZXZpY2UoZGV2KTsKKwlpZiAoIWlkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWRldi0+bmFtZSA9ICJ0cHM2NTIxOF9wd3JidXR0b24iOworCWlkZXYtPnBoeXMgPSAidHBzNjUyMThfcHdyYnV0dG9uL2lucHV0MCI7CisJaWRldi0+ZGV2LnBhcmVudCA9IGRldjsKKwlpZGV2LT5pZC5idXN0eXBlID0gQlVTX0kyQzsKKworCWlucHV0X3NldF9jYXBhYmlsaXR5KGlkZXYsIEVWX0tFWSwgS0VZX1BPV0VSKTsKKworCXB3ci0+dHBzID0gdHBzOworCXB3ci0+ZGV2ID0gZGV2OworCXB3ci0+aWRldiA9IGlkZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHdyKTsKKwlkZXZpY2VfaW5pdF93YWtldXAoZGV2LCB0cnVlKTsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJZXJyb3IgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgaXJxLCBOVUxMLCB0cHM2NTIxOF9wd3JfaXJxLAorCQkJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfAorCQkJCQkJSVJRRl9UUklHR0VSX0ZBTExJTkcgfAorCQkJCQkJSVJRRl9PTkVTSE9ULAorCQkJCQkgICJ0cHM2NTIxOC1wd3JidXR0b24iLCBwd3IpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0IElSUSAjJWQ6ICVkXG4iLAorCQkJaXJxLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwllcnJvcj0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlkZXYpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKGRldiwgIkNhbid0IHJlZ2lzdGVyIHBvd2VyIGJ1dHRvbjogJWRcbiIsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBvZl90cHM2NTIxOF9wd3JfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInRpLHRwczY1MjE4LXB3cmJ1dHRvbiIgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgb2ZfdHBzNjUyMThfcHdyX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHBzNjUyMThfcHdyb25fZHJpdmVyID0geworCS5wcm9iZQk9IHRwczY1MjE4X3B3cm9uX3Byb2JlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gInRwczY1MjE4X3B3cmJ1dHRvbiIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX3RwczY1MjE4X3B3cl9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIodHBzNjUyMThfcHdyb25fZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJUUFM2NTIxOCBQb3dlciBCdXR0b24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIkZlbGlwZSBCYWxiaSA8YmFsYmlAdGkuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9LY29uZmlnCmluZGV4IGQ4YjQ2YjAuLjQ2NThiNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL0tjb25maWcKQEAgLTEwNSwxOSArMTA1LDEyIEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGFuIEVsYW50ZWNoIFBTLzIgdG91Y2hwYWQgY29ubmVjdGVkCiAJICB0byB5b3VyIHN5c3RlbS4KIAotCSAgTm90ZSB0aGF0IGlmIHlvdSBlbmFibGUgdGhpcyBkcml2ZXIgeW91IHdpbGwgbmVlZCBhbiB1cGRhdGVkCi0JICBYLm9yZyBTeW5hcHRpY3MgZHJpdmVyIHRoYXQgZG9lcyBub3QgcmVxdWlyZSBBQlNfUFJFU1NVUkUKLQkgIHJlcG9ydHMgZnJvbSB0aGUgdG91Y2hwYWQgKGkuZS4gcG9zdCAxLjUuMCB2ZXJzaW9uKS4gWW91IGNhbgotCSAgZ3JhYiBhIHBhdGNoIGZvciB0aGUgZHJpdmVyIGhlcmU6Ci0KLQkgIGh0dHA6Ly91c2Vyd2ViLmtlcm5lbC5vcmcvfmR0b3Ivc3luYXB0aWNzLW5vLWFic3ByZXNzdXJlLnBhdGNoCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KIAkgIFRoaXMgZHJpdmVyIGV4cG9zZXMgc29tZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyB2aWEgc3lzZnMKIAkgIGVudHJpZXMuIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLAogCSAgc2VlIDxmaWxlOkRvY3VtZW50YXRpb24vaW5wdXQvZWxhbnRlY2gudHh0Pi4KIAorCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIE1PVVNFX1BTMl9TRU5URUxJQwogCWJvb2wgIlNlbnRlbGljIEZpbmdlciBTZW5zaW5nIFBhZCBQUy8yIHByb3RvY29sIGV4dGVuc2lvbiIKIAlkZXBlbmRzIG9uIE1PVVNFX1BTMgpAQCAtMTQ2LDYgKzEzOSwxNiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTU9VU0VfUFMyX0ZPQ0FMVEVDSAorCWJvb2wgIkZvY2FsVGVjaCBQUy8yIG1vdXNlIHByb3RvY29sIGV4dGVuc2lvbiIgaWYgRVhQRVJUCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBNT1VTRV9QUzIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgRm9jYWxUZWNoIFBTLzIgVG91Y2hQYWQgY29ubmVjdGVkIHRvCisJICB5b3VyIHN5c3RlbS4KKworCSAgSWYgdW5zdXJlLCBzYXkgWS4KKwogY29uZmlnIE1PVVNFX1NFUklBTAogCXRyaXN0YXRlICJTZXJpYWwgbW91c2UiCiAJc2VsZWN0IFNFUklPCkBAIC0yMDYsNiArMjA5LDcgQEAKIGNvbmZpZyBNT1VTRV9DWUFQQQogCXRyaXN0YXRlICJDeXByZXNzIEFQQSBJMkMgVHJhY2twYWQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEkyQworCXNlbGVjdCBDUkNfSVRVX1QKIAloZWxwCiAJICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIEN5cHJlc3MgQWxsIFBvaW50cyBBZGRyZXNzYWJsZSAoQVBBKQogCSAgSTJDIFRyYWNrcGFkcywgaW5jbHVkaW5nIHRoZSBvbmVzIHVzZWQgaW4gMjAxMiBTYW1zdW5nIENocm9tZWJvb2tzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvbW91c2UvTWFrZWZpbGUKaW5kZXggNTYwMDAzZC4uOGE5Yzk4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL01ha2VmaWxlCkBAIC04LDcgKzgsNyBAQAogb2JqLSQoQ09ORklHX01PVVNFX0FQUExFVE9VQ0gpCQkrPSBhcHBsZXRvdWNoLm8KIG9iai0kKENPTkZJR19NT1VTRV9BVEFSSSkJCSs9IGF0YXJpbW91c2Uubwogb2JqLSQoQ09ORklHX01PVVNFX0JDTTU5NzQpCQkrPSBiY201OTc0Lm8KLW9iai0kKENPTkZJR19NT1VTRV9DWUFQQSkJCSs9IGN5YXBhLm8KK29iai0kKENPTkZJR19NT1VTRV9DWUFQQSkJCSs9IGN5YXBhdHAubwogb2JqLSQoQ09ORklHX01PVVNFX0VMQU5fSTJDKQkJKz0gZWxhbl9pMmMubwogb2JqLSQoQ09ORklHX01PVVNFX0dQSU8pCQkrPSBncGlvX21vdXNlLm8KIG9iai0kKENPTkZJR19NT1VTRV9JTlBPUlQpCQkrPSBpbnBvcnQubwpAQCAtMjQsNiArMjQsNyBAQAogb2JqLSQoQ09ORklHX01PVVNFX1NZTkFQVElDU19VU0IpCSs9IHN5bmFwdGljc191c2Iubwogb2JqLSQoQ09ORklHX01PVVNFX1ZTWFhYQUEpCQkrPSB2c3h4eGFhLm8KIAorY3lhcGF0cC1vYmpzIDo9IGN5YXBhLm8gY3lhcGFfZ2VuMy5vIGN5YXBhX2dlbjUubwogcHNtb3VzZS1vYmpzIDo9IHBzbW91c2UtYmFzZS5vIHN5bmFwdGljcy5vIGZvY2FsdGVjaC5vCiAKIHBzbW91c2UtJChDT05GSUdfTU9VU0VfUFMyX0FMUFMpCSs9IGFscHMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hbHBzLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYwppbmRleCBkODhkNzNkLi5mMjA1YjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYwpAQCAtNDM1LDcgKzQzNSw3IEBACiAJc3RydWN0IGFscHNfZmllbGRzICpmID0gJnByaXYtPmY7CiAJaW50IGksIHNsb3RbTUFYX1RPVUNIRVNdOwogCi0JaW5wdXRfbXRfYXNzaWduX3Nsb3RzKGRldiwgc2xvdCwgZi0+bXQsIG4pOworCWlucHV0X210X2Fzc2lnbl9zbG90cyhkZXYsIHNsb3QsIGYtPm10LCBuLCAwKTsKIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogCQlhbHBzX3NldF9zbG90KGRldiwgc2xvdFtpXSwgZi0+bXRbaV0ueCwgZi0+bXRbaV0ueSk7CiAKQEAgLTQ3NSw2ICs0NzUsMTMgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBwcml2LT5kZXYyOwogCWludCB4LCB5LCB6LCBsZWZ0LCByaWdodCwgbWlkZGxlOwogCisJLyogSXQgc2hvdWxkIGJlIGEgRHVhbFBvaW50IHdoZW4gcmVjZWl2ZWQgdHJhY2tzdGljayBwYWNrZXQgKi8KKwlpZiAoIShwcml2LT5mbGFncyAmIEFMUFNfRFVBTFBPSU5UKSkgeworCQlwc21vdXNlX3dhcm4ocHNtb3VzZSwKKwkJCSAgICAgIlJlamVjdGVkIHRyYWNrc3RpY2sgcGFja2V0IGZyb20gbm9uIER1YWxQb2ludCBkZXZpY2UiKTsKKwkJcmV0dXJuOworCX0KKwogCS8qIFNhbml0eSBjaGVjayBwYWNrZXQgKi8KIAlpZiAoIShwYWNrZXRbMF0gJiAweDQwKSkgewogCQlwc21vdXNlX2RiZyhwc21vdXNlLCAiQmFkIHRyYWNrc3RpY2sgcGFja2V0LCBkaXNjYXJkaW5nXG4iKTsKQEAgLTY5OSw3ICs3MDYsOCBAQAogCiAJYWxwc19yZXBvcnRfc2VtaV9tdF9kYXRhKHBzbW91c2UsIGZpbmdlcnMpOwogCi0JaWYgKCEocHJpdi0+cXVpcmtzICYgQUxQU19RVUlSS19UUkFDS1NUSUNLX0JVVFRPTlMpKSB7CisJaWYgKChwcml2LT5mbGFncyAmIEFMUFNfRFVBTFBPSU5UKSAmJgorCSAgICAhKHByaXYtPnF1aXJrcyAmIEFMUFNfUVVJUktfVFJBQ0tTVElDS19CVVRUT05TKSkgewogCQlpbnB1dF9yZXBvcnRfa2V5KGRldjIsIEJUTl9MRUZULCBmLT50c19sZWZ0KTsKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYyLCBCVE5fUklHSFQsIGYtPnRzX3JpZ2h0KTsKIAkJaW5wdXRfcmVwb3J0X2tleShkZXYyLCBCVE5fTUlERExFLCBmLT50c19taWRkbGUpOwpAQCAtNzQzLDggKzc1MSwxMSBAQAogCSAqLwogCWlmIChwYWNrZXRbNV0gPT0gMHg3RikgewogCQkvKiBJdCBzaG91bGQgYmUgYSBEdWFsUG9pbnQgd2hlbiByZWNlaXZlZCBUcmFja3BvaW50IHBhY2tldCAqLwotCQlpZiAoIShwcml2LT5mbGFncyAmIEFMUFNfRFVBTFBPSU5UKSkKKwkJaWYgKCEocHJpdi0+ZmxhZ3MgJiBBTFBTX0RVQUxQT0lOVCkpIHsKKwkJCXBzbW91c2Vfd2Fybihwc21vdXNlLAorCQkJCSAgICAgIlJlamVjdGVkIHRyYWNrc3RpY2sgcGFja2V0IGZyb20gbm9uIER1YWxQb2ludCBkZXZpY2UiKTsKIAkJCXJldHVybjsKKwkJfQogCiAJCS8qIFRyYWNrcG9pbnQgcGFja2V0ICovCiAJCXggPSBwYWNrZXRbMV0gfCAoKHBhY2tldFszXSAmIDB4MjApIDw8IDIpOwpAQCAtMTAyNiw2ICsxMDM3LDEzIEBACiAJc3RydWN0IGlucHV0X2RldiAqZGV2MiA9IHByaXYtPmRldjI7CiAJaW50IHgsIHksIHosIGxlZnQsIHJpZ2h0LCBtaWRkbGU7CiAKKwkvKiBJdCBzaG91bGQgYmUgYSBEdWFsUG9pbnQgd2hlbiByZWNlaXZlZCB0cmFja3N0aWNrIHBhY2tldCAqLworCWlmICghKHByaXYtPmZsYWdzICYgQUxQU19EVUFMUE9JTlQpKSB7CisJCXBzbW91c2Vfd2Fybihwc21vdXNlLAorCQkJICAgICAiUmVqZWN0ZWQgdHJhY2tzdGljayBwYWNrZXQgZnJvbSBub24gRHVhbFBvaW50IGRldmljZSIpOworCQlyZXR1cm47CisJfQorCiAJLyoKIAkgKiAgICAgICAgYjcgYjYgYjUgYjQgYjMgYjIgYjEgYjAKIAkgKiBCeXRlMCAgIDAgIDEgIDAgIDAgIDEgIDAgIDAgIDAKQEAgLTI0NDMsMTQgKzI0NjEsMjQgQEAKIAkJZGV2MS0+a2V5Yml0W0JJVF9XT1JEKEJUTl9NSURETEUpXSB8PSBCSVRfTUFTSyhCVE5fTUlERExFKTsKIAl9CiAKKwlpZiAocHJpdi0+ZmxhZ3MgJiBBTFBTX0RVQUxQT0lOVCkgeworCQkvKgorCQkgKiBmb3JtYXQgb2YgaW5wdXQgZGV2aWNlIG5hbWUgaXM6ICJwcm90b2NvbCB2ZW5kb3IgbmFtZSIKKwkJICogc2VlIGZ1bmN0aW9uIHBzbW91c2Vfc3dpdGNoX3Byb3RvY29sKCkgaW4gcHNtb3VzZS1iYXNlLmMKKwkJICovCisJCWRldjItPm5hbWUgPSAiQWxwc1BTLzIgQUxQUyBEdWFsUG9pbnQgU3RpY2siOworCQlkZXYyLT5pZC5wcm9kdWN0ID0gUFNNT1VTRV9BTFBTOworCQlkZXYyLT5pZC52ZXJzaW9uID0gcHJpdi0+cHJvdG9fdmVyc2lvbjsKKwl9IGVsc2UgeworCQlkZXYyLT5uYW1lID0gIlBTLzIgQUxQUyBNb3VzZSI7CisJCWRldjItPmlkLnByb2R1Y3QgPSBQU01PVVNFX1BTMjsKKwkJZGV2Mi0+aWQudmVyc2lvbiA9IDB4MDAwMDsKKwl9CisKIAlzbnByaW50Zihwcml2LT5waHlzLCBzaXplb2YocHJpdi0+cGh5cyksICIlcy9pbnB1dDEiLCBwc21vdXNlLT5wczJkZXYuc2VyaW8tPnBoeXMpOwogCWRldjItPnBoeXMgPSBwcml2LT5waHlzOwotCWRldjItPm5hbWUgPSAocHJpdi0+ZmxhZ3MgJiBBTFBTX0RVQUxQT0lOVCkgPwotCQkgICAgICJEdWFsUG9pbnQgU3RpY2siIDogIkFMUFMgUFMvMiBEZXZpY2UiOwogCWRldjItPmlkLmJ1c3R5cGUgPSBCVVNfSTgwNDI7CiAJZGV2Mi0+aWQudmVuZG9yICA9IDB4MDAwMjsKLQlkZXYyLT5pZC5wcm9kdWN0ID0gUFNNT1VTRV9BTFBTOwotCWRldjItPmlkLnZlcnNpb24gPSAweDAwMDA7CiAJZGV2Mi0+ZGV2LnBhcmVudCA9ICZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldjsKIAogCWRldjItPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2JjbTU5NzQuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYmNtNTk3NC5jCmluZGV4IGMzMjljZGIuLmIxMDcwOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYmNtNTk3NC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYmNtNTk3NC5jCkBAIC01NjQsNyArNTY0LDcgQEAKIAkJZGV2LT5pbmRleFtuKytdID0gJmZbaV07CiAJfQogCi0JaW5wdXRfbXRfYXNzaWduX3Nsb3RzKGlucHV0LCBkZXYtPnNsb3RzLCBkZXYtPnBvcywgbik7CisJaW5wdXRfbXRfYXNzaWduX3Nsb3RzKGlucHV0LCBkZXYtPnNsb3RzLCBkZXYtPnBvcywgbiwgMCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogCQlyZXBvcnRfZmluZ2VyX2RhdGEoaW5wdXQsIGRldi0+c2xvdHNbaV0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2N5YXBhLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2N5YXBhLmMKaW5kZXggMWJlY2U4Yy4uNThmNGY2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9jeWFwYS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvY3lhcGEuYwpAQCAtMjAsNDA4ICsyMCwxMzEgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC9tdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgImN5YXBhLmgiCiAKLS8qIEFQQSB0cmFja3BhZCBmaXJtd2FyZSBnZW5lcmF0aW9uICovCi0jZGVmaW5lIENZQVBBX0dFTjMgICAweDAzICAgLyogc3VwcG9ydCBNVC1wcm90b2NvbCBCIHdpdGggdHJhY2tpbmcgSUQuICovCi0KLSNkZWZpbmUgQ1lBUEFfTkFNRSAgICJDeXByZXNzIEFQQSBUcmFja3BhZCAoY3lhcGEpIgotCi0vKiBjb21tYW5kcyBmb3IgcmVhZC93cml0ZSByZWdpc3RlcnMgb2YgQ3lwcmVzcyB0cmFja3BhZCAqLwotI2RlZmluZSBDWUFQQV9DTURfU09GVF9SRVNFVCAgICAgICAweDAwCi0jZGVmaW5lIENZQVBBX0NNRF9QT1dFUl9NT0RFICAgICAgIDB4MDEKLSNkZWZpbmUgQ1lBUEFfQ01EX0RFVl9TVEFUVVMgICAgICAgMHgwMgotI2RlZmluZSBDWUFQQV9DTURfR1JPVVBfREFUQSAgICAgICAweDAzCi0jZGVmaW5lIENZQVBBX0NNRF9HUk9VUF9DTUQgICAgICAgIDB4MDQKLSNkZWZpbmUgQ1lBUEFfQ01EX0dST1VQX1FVRVJZICAgICAgMHgwNQotI2RlZmluZSBDWUFQQV9DTURfQkxfU1RBVFVTICAgICAgICAweDA2Ci0jZGVmaW5lIENZQVBBX0NNRF9CTF9IRUFEICAgICAgICAgIDB4MDcKLSNkZWZpbmUgQ1lBUEFfQ01EX0JMX0NNRCAgICAgICAgICAgMHgwOAotI2RlZmluZSBDWUFQQV9DTURfQkxfREFUQSAgICAgICAgICAweDA5Ci0jZGVmaW5lIENZQVBBX0NNRF9CTF9BTEwgICAgICAgICAgIDB4MGEKLSNkZWZpbmUgQ1lBUEFfQ01EX0JMS19QUk9EVUNUX0lEICAgMHgwYgotI2RlZmluZSBDWUFQQV9DTURfQkxLX0hFQUQgICAgICAgICAweDBjCi0KLS8qIHJlcG9ydCBkYXRhIHN0YXJ0IHJlZyBvZmZzZXQgYWRkcmVzcy4gKi8KLSNkZWZpbmUgREFUQV9SRUdfU1RBUlRfT0ZGU0VUICAweDAwMDAKLQotI2RlZmluZSBCTF9IRUFEX09GRlNFVCAweDAwCi0jZGVmaW5lIEJMX0RBVEFfT0ZGU0VUIDB4MTAKLQotLyoKLSAqIE9wZXJhdGlvbmFsIERldmljZSBTdGF0dXMgUmVnaXN0ZXIKLSAqCi0gKiBiaXQgNzogVmFsaWQgaW50ZXJydXB0IHNvdXJjZQotICogYml0IDYgLSA0OiBSZXNlcnZlZAotICogYml0IDMgLSAyOiBQb3dlciBzdGF0dXMKLSAqIGJpdCAxIC0gMDogRGV2aWNlIHN0YXR1cwotICovCi0jZGVmaW5lIFJFR19PUF9TVEFUVVMgICAgIDB4MDAKLSNkZWZpbmUgT1BfU1RBVFVTX1NSQyAgICAgMHg4MAotI2RlZmluZSBPUF9TVEFUVVNfUE9XRVIgICAweDBjCi0jZGVmaW5lIE9QX1NUQVRVU19ERVYgICAgIDB4MDMKLSNkZWZpbmUgT1BfU1RBVFVTX01BU0sgKE9QX1NUQVRVU19TUkMgfCBPUF9TVEFUVVNfUE9XRVIgfCBPUF9TVEFUVVNfREVWKQotCi0vKgotICogT3BlcmF0aW9uYWwgRmluZ2VyIENvdW50L0J1dHRvbiBGbGFncyBSZWdpc3RlcgotICoKLSAqIGJpdCA3IC0gNDogTnVtYmVyIG9mIHRvdWNoZWQgZmluZ2VyCi0gKiBiaXQgMzogVmFsaWQgZGF0YQotICogYml0IDI6IE1pZGRsZSBQaHlzaWNhbCBCdXR0b24KLSAqIGJpdCAxOiBSaWdodCBQaHlzaWNhbCBCdXR0b24KLSAqIGJpdCAwOiBMZWZ0IHBoeXNpY2FsIEJ1dHRvbgotICovCi0jZGVmaW5lIFJFR19PUF9EQVRBMSAgICAgICAweDAxCi0jZGVmaW5lIE9QX0RBVEFfVkFMSUQgICAgICAweDA4Ci0jZGVmaW5lIE9QX0RBVEFfTUlERExFX0JUTiAweDA0Ci0jZGVmaW5lIE9QX0RBVEFfUklHSFRfQlROICAweDAyCi0jZGVmaW5lIE9QX0RBVEFfTEVGVF9CVE4gICAweDAxCi0jZGVmaW5lIE9QX0RBVEFfQlROX01BU0sgKE9QX0RBVEFfTUlERExFX0JUTiB8IE9QX0RBVEFfUklHSFRfQlROIHwgXAotCQkJICBPUF9EQVRBX0xFRlRfQlROKQotCi0vKgotICogQm9vdGxvYWRlciBTdGF0dXMgUmVnaXN0ZXIKLSAqCi0gKiBiaXQgNzogQnVzeQotICogYml0IDYgLSA1OiBSZXNlcnZlZAotICogYml0IDQ6IEJvb3Rsb2FkZXIgcnVubmluZwotICogYml0IDMgLSAxOiBSZXNlcnZlZAotICogYml0IDA6IENoZWNrc3VtIHZhbGlkCi0gKi8KLSNkZWZpbmUgUkVHX0JMX1NUQVRVUyAgICAgICAgMHgwMQotI2RlZmluZSBCTF9TVEFUVVNfQlVTWSAgICAgICAweDgwCi0jZGVmaW5lIEJMX1NUQVRVU19SVU5OSU5HICAgIDB4MTAKLSNkZWZpbmUgQkxfU1RBVFVTX0RBVEFfVkFMSUQgMHgwOAotI2RlZmluZSBCTF9TVEFUVVNfQ1NVTV9WQUxJRCAweDAxCi0KLS8qCi0gKiBCb290bG9hZGVyIEVycm9yIFJlZ2lzdGVyCi0gKgotICogYml0IDc6IEludmFsaWQKLSAqIGJpdCA2OiBJbnZhbGlkIHNlY3VyaXR5IGtleQotICogYml0IDU6IEJvb3Rsb2FkaW5nCi0gKiBiaXQgNDogQ29tbWFuZCBjaGVja3N1bQotICogYml0IDM6IEZsYXNoIHByb3RlY3Rpb24gZXJyb3IKLSAqIGJpdCAyOiBGbGFzaCBjaGVja3N1bSBlcnJvcgotICogYml0IDEgLSAwOiBSZXNlcnZlZAotICovCi0jZGVmaW5lIFJFR19CTF9FUlJPUiAgICAgICAgIDB4MDIKLSNkZWZpbmUgQkxfRVJST1JfSU5WQUxJRCAgICAgMHg4MAotI2RlZmluZSBCTF9FUlJPUl9JTlZBTElEX0tFWSAweDQwCi0jZGVmaW5lIEJMX0VSUk9SX0JPT1RMT0FESU5HIDB4MjAKLSNkZWZpbmUgQkxfRVJST1JfQ01EX0NTVU0gICAgMHgxMAotI2RlZmluZSBCTF9FUlJPUl9GTEFTSF9QUk9UICAweDA4Ci0jZGVmaW5lIEJMX0VSUk9SX0ZMQVNIX0NTVU0gIDB4MDQKLQotI2RlZmluZSBCTF9TVEFUVVNfU0laRSAgMyAgLyogbGVuZ3RoIG9mIGJvb3Rsb2FkZXIgc3RhdHVzIHJlZ2lzdGVycyAqLwotI2RlZmluZSBCTEtfSEVBRF9CWVRFUyAzMgotCi0jZGVmaW5lIFBST0RVQ1RfSURfU0laRSAgMTYKLSNkZWZpbmUgUVVFUllfREFUQV9TSVpFICAyNwotI2RlZmluZSBSRUdfUFJPVE9DT0xfR0VOX1FVRVJZX09GRlNFVCAgMjAKLQotI2RlZmluZSBSRUdfT0ZGU0VUX0RBVEFfQkFTRSAgICAgMHgwMDAwCi0jZGVmaW5lIFJFR19PRkZTRVRfQ09NTUFORF9CQVNFICAweDAwMjgKLSNkZWZpbmUgUkVHX09GRlNFVF9RVUVSWV9CQVNFICAgIDB4MDAyYQotCi0jZGVmaW5lIENBUEFCSUxJVFlfTEVGVF9CVE5fTUFTSwkoMHgwMSA8PCAzKQotI2RlZmluZSBDQVBBQklMSVRZX1JJR0hUX0JUTl9NQVNLCSgweDAxIDw8IDQpCi0jZGVmaW5lIENBUEFCSUxJVFlfTUlERExFX0JUTl9NQVNLCSgweDAxIDw8IDUpCi0jZGVmaW5lIENBUEFCSUxJVFlfQlROX01BU0sgIChDQVBBQklMSVRZX0xFRlRfQlROX01BU0sgfCBcCi0JCQkgICAgICBDQVBBQklMSVRZX1JJR0hUX0JUTl9NQVNLIHwgXAotCQkJICAgICAgQ0FQQUJJTElUWV9NSURETEVfQlROX01BU0spCi0KLSNkZWZpbmUgQ1lBUEFfT0ZGU0VUX1NPRlRfUkVTRVQgIFJFR19PRkZTRVRfQ09NTUFORF9CQVNFCi0KLSNkZWZpbmUgUkVHX09GRlNFVF9QT1dFUl9NT0RFIChSRUdfT0ZGU0VUX0NPTU1BTkRfQkFTRSArIDEpCi0KLSNkZWZpbmUgUFdSX01PREVfTUFTSyAgIDB4ZmMKLSNkZWZpbmUgUFdSX01PREVfRlVMTF9BQ1RJVkUgKDB4M2YgPDwgMikKLSNkZWZpbmUgUFdSX01PREVfSURMRSAgICAgICAgKDB4MDUgPDwgMikgLyogZGVmYXVsdCBzbGVlcCB0aW1lIGlzIDUwIG1zLiAqLwotI2RlZmluZSBQV1JfTU9ERV9PRkYgICAgICAgICAoMHgwMCA8PCAyKQotCi0jZGVmaW5lIFBXUl9TVEFUVVNfTUFTSyAgICAgIDB4MGMKLSNkZWZpbmUgUFdSX1NUQVRVU19BQ1RJVkUgICAgKDB4MDMgPDwgMikKLSNkZWZpbmUgUFdSX1NUQVRVU19JRExFICAgICAgKDB4MDIgPDwgMikKLSNkZWZpbmUgUFdSX1NUQVRVU19PRkYgICAgICAgKDB4MDAgPDwgMikKLQotLyoKLSAqIENZQVBBIHRyYWNrcGFkIGRldmljZSBzdGF0ZXMuCi0gKiBVc2VkIGluIHJlZ2lzdGVyIDB4MDAsIGJpdDEtMCwgRGV2aWNlU3RhdHVzIGZpZWxkLgotICogT3RoZXIgdmFsdWVzIGluZGljYXRlIGRldmljZSBpcyBpbiBhbiBhYm5vcm1hbCBzdGF0ZSBhbmQgbXVzdCBiZSByZXNldC4KLSAqLwotI2RlZmluZSBDWUFQQV9ERVZfTk9STUFMICAweDAzCi0jZGVmaW5lIENZQVBBX0RFVl9CVVNZICAgIDB4MDEKLQotZW51bSBjeWFwYV9zdGF0ZSB7Ci0JQ1lBUEFfU1RBVEVfT1AsCi0JQ1lBUEFfU1RBVEVfQkxfSURMRSwKLQlDWUFQQV9TVEFURV9CTF9BQ1RJVkUsCi0JQ1lBUEFfU1RBVEVfQkxfQlVTWSwKLQlDWUFQQV9TVEFURV9OT19ERVZJQ0UsCi19OwotCi0KLXN0cnVjdCBjeWFwYV90b3VjaCB7Ci0JLyoKLQkgKiBoaWdoIGJpdHMgb3IgeC95IHBvc2l0aW9uIHZhbHVlCi0JICogYml0IDcgLSA0OiBoaWdoIDQgYml0cyBvZiB4IHBvc2l0aW9uIHZhbHVlCi0JICogYml0IDMgLSAwOiBoaWdoIDQgYml0cyBvZiB5IHBvc2l0aW9uIHZhbHVlCi0JICovCi0JdTggeHlfaGk7Ci0JdTggeF9sbzsgIC8qIGxvdyA4IGJpdHMgb2YgeCBwb3NpdGlvbiB2YWx1ZS4gKi8KLQl1OCB5X2xvOyAgLyogbG93IDggYml0cyBvZiB5IHBvc2l0aW9uIHZhbHVlLiAqLwotCXU4IHByZXNzdXJlOwotCS8qIGlkIHJhbmdlIGlzIDEgLSAxNS4gIEl0IGlzIGluY3JlbWVudGVkIHdpdGggZXZlcnkgbmV3IHRvdWNoLiAqLwotCXU4IGlkOwotfSBfX3BhY2tlZDsKLQotLyogVGhlIHRvdWNoLmlkIGlzIHVzZWQgYXMgdGhlIE1UIHNsb3QgaWQsIHRodXMgbWF4IE1UIHNsb3QgaXMgMTUgKi8KLSNkZWZpbmUgQ1lBUEFfTUFYX01UX1NMT1RTICAxNQotCi1zdHJ1Y3QgY3lhcGFfcmVnX2RhdGEgewotCS8qCi0JICogYml0IDAgLSAxOiBkZXZpY2Ugc3RhdHVzCi0JICogYml0IDMgLSAyOiBwb3dlciBtb2RlCi0JICogYml0IDYgLSA0OiByZXNlcnZlZAotCSAqIGJpdCA3OiBpbnRlcnJ1cHQgdmFsaWQgYml0Ci0JICovCi0JdTggZGV2aWNlX3N0YXR1czsKLQkvKgotCSAqIGJpdCA3IC0gNDogbnVtYmVyIG9mIGZpbmdlcnMgY3VycmVudGx5IHRvdWNoaW5nIHBhZAotCSAqIGJpdCAzOiB2YWxpZCBkYXRhIGNoZWNrIGJpdAotCSAqIGJpdCAyOiBtaWRkbGUgbWVjaGFuaXNtIGJ1dHRvbiBzdGF0ZSBpZiBleGlzdHMKLQkgKiBiaXQgMTogcmlnaHQgbWVjaGFuaXNtIGJ1dHRvbiBzdGF0ZSBpZiBleGlzdHMKLQkgKiBiaXQgMDogbGVmdCBtZWNoYW5pc20gYnV0dG9uIHN0YXRlIGlmIGV4aXN0cwotCSAqLwotCXU4IGZpbmdlcl9idG47Ci0JLyogQ1lBUEEgcmVwb3J0cyB1cCB0byA1IHRvdWNoZXMgcGVyIHBhY2tldC4gKi8KLQlzdHJ1Y3QgY3lhcGFfdG91Y2ggdG91Y2hlc1s1XTsKLX0gX19wYWNrZWQ7Ci0KLS8qIFRoZSBtYWluIGRldmljZSBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBjeWFwYSB7Ci0JZW51bSBjeWFwYV9zdGF0ZSBzdGF0ZTsKLQotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7Ci0JY2hhciBwaHlzWzMyXTsJLyogZGV2aWNlIHBoeXNpY2FsIGxvY2F0aW9uICovCi0JYm9vbCBpcnFfd2FrZTsgIC8qIGlycSB3YWtlIGlzIGVuYWJsZWQgKi8KLQlib29sIHNtYnVzOwotCi0JLyogcmVhZCBmcm9tIHF1ZXJ5IGRhdGEgcmVnaW9uLiAqLwotCWNoYXIgcHJvZHVjdF9pZFsxNl07Ci0JdTggYnRuX2NhcGFiaWxpdHk7Ci0JdTggZ2VuOwotCWludCBtYXhfYWJzX3g7Ci0JaW50IG1heF9hYnNfeTsKLQlpbnQgcGh5c2ljYWxfc2l6ZV94OwotCWludCBwaHlzaWNhbF9zaXplX3k7Ci19OwotCi1zdGF0aWMgY29uc3QgdTggYmxfZGVhY3RpdmF0ZVtdID0geyAweDAwLCAweGZmLCAweDNiLCAweDAwLCAweDAxLCAweDAyLCAweDAzLAotCQkweDA0LCAweDA1LCAweDA2LCAweDA3IH07Ci1zdGF0aWMgY29uc3QgdTggYmxfZXhpdFtdID0geyAweDAwLCAweGZmLCAweGE1LCAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LAotCQkweDA1LCAweDA2LCAweDA3IH07Ci0KLXN0cnVjdCBjeWFwYV9jbWRfbGVuIHsKLQl1OCBjbWQ7Ci0JdTggbGVuOwotfTsKIAogI2RlZmluZSBDWUFQQV9BREFQVEVSX0ZVTkNfTk9ORSAgIDAKICNkZWZpbmUgQ1lBUEFfQURBUFRFUl9GVU5DX0kyQyAgICAxCiAjZGVmaW5lIENZQVBBX0FEQVBURVJfRlVOQ19TTUJVUyAgMgogI2RlZmluZSBDWUFQQV9BREFQVEVSX0ZVTkNfQk9USCAgIDMKIAotLyoKLSAqIG1hY3JvcyBmb3IgU01CdXMgY29tbXVuaWNhdGlvbgotICovCi0jZGVmaW5lIFNNQlVTX1JFQUQgICAweDAxCi0jZGVmaW5lIFNNQlVTX1dSSVRFIDB4MDAKLSNkZWZpbmUgU01CVVNfRU5DT0RFX0lEWChjbWQsIGlkeCkgKChjbWQpIHwgKCgoaWR4KSAmIDB4MDMpIDw8IDEpKQotI2RlZmluZSBTTUJVU19FTkNPREVfUlcoY21kLCBydykgKChjbWQpIHwgKChydykgJiAweDAxKSkKLSNkZWZpbmUgU01CVVNfQllURV9CTE9DS19DTURfTUFTSyAweDgwCi0jZGVmaW5lIFNNQlVTX0dST1VQX0JMT0NLX0NNRF9NQVNLIDB4NDAKKyNkZWZpbmUgQ1lBUEFfRldfTkFNRQkJImN5YXBhLmJpbiIKIAotIC8qIGZvciBieXRlIHJlYWQvd3JpdGUgY29tbWFuZCAqLwotI2RlZmluZSBDTURfUkVTRVQgMAotI2RlZmluZSBDTURfUE9XRVJfTU9ERSAxCi0jZGVmaW5lIENNRF9ERVZfU1RBVFVTIDIKLSNkZWZpbmUgU01CVVNfQllURV9DTUQoY21kKSAoKChjbWQpICYgMHgzZikgPDwgMSkKLSNkZWZpbmUgQ1lBUEFfU01CVVNfUkVTRVQgU01CVVNfQllURV9DTUQoQ01EX1JFU0VUKQotI2RlZmluZSBDWUFQQV9TTUJVU19QT1dFUl9NT0RFIFNNQlVTX0JZVEVfQ01EKENNRF9QT1dFUl9NT0RFKQotI2RlZmluZSBDWUFQQV9TTUJVU19ERVZfU1RBVFVTIFNNQlVTX0JZVEVfQ01EKENNRF9ERVZfU1RBVFVTKQorY29uc3QgY2hhciBwcm9kdWN0X2lkW10gPSAiQ1lUUkEiOwogCi0gLyogZm9yIGdyb3VwIHJlZ2lzdGVycyByZWFkL3dyaXRlIGNvbW1hbmQgKi8KLSNkZWZpbmUgUkVHX0dST1VQX0RBVEEgMAotI2RlZmluZSBSRUdfR1JPVVBfQ01EIDIKLSNkZWZpbmUgUkVHX0dST1VQX1FVRVJZIDMKLSNkZWZpbmUgU01CVVNfR1JPVVBfQ01EKGdycCkgKDB4ODAgfCAoKChncnApICYgMHgwNykgPDwgMykpCi0jZGVmaW5lIENZQVBBX1NNQlVTX0dST1VQX0RBVEEgU01CVVNfR1JPVVBfQ01EKFJFR19HUk9VUF9EQVRBKQotI2RlZmluZSBDWUFQQV9TTUJVU19HUk9VUF9DTUQgU01CVVNfR1JPVVBfQ01EKFJFR19HUk9VUF9DTUQpCi0jZGVmaW5lIENZQVBBX1NNQlVTX0dST1VQX1FVRVJZIFNNQlVTX0dST1VQX0NNRChSRUdfR1JPVVBfUVVFUlkpCitzdGF0aWMgaW50IGN5YXBhX3JlaW5pdGlhbGl6ZShzdHJ1Y3QgY3lhcGEgKmN5YXBhKTsKIAotIC8qIGZvciByZWdpc3RlciBibG9jayByZWFkL3dyaXRlIGNvbW1hbmQgKi8KLSNkZWZpbmUgQ01EX0JMX1NUQVRVUyAwCi0jZGVmaW5lIENNRF9CTF9IRUFEIDEKLSNkZWZpbmUgQ01EX0JMX0NNRCAyCi0jZGVmaW5lIENNRF9CTF9EQVRBIDMKLSNkZWZpbmUgQ01EX0JMX0FMTCA0Ci0jZGVmaW5lIENNRF9CTEtfUFJPRFVDVF9JRCA1Ci0jZGVmaW5lIENNRF9CTEtfSEVBRCA2Ci0jZGVmaW5lIFNNQlVTX0JMT0NLX0NNRChjbWQpICgweGMwIHwgKCgoY21kKSAmIDB4MWYpIDw8IDEpKQorc3RhdGljIGlubGluZSBib29sIGN5YXBhX2lzX2Jvb3Rsb2FkZXJfbW9kZShzdHJ1Y3QgY3lhcGEgKmN5YXBhKQoreworCWlmIChjeWFwYS0+Z2VuID09IENZQVBBX0dFTjUgJiYgY3lhcGEtPnN0YXRlID09IENZQVBBX1NUQVRFX0dFTjVfQkwpCisJCXJldHVybiB0cnVlOwogCi0vKiByZWdpc3RlciBibG9jayByZWFkL3dyaXRlIGNvbW1hbmQgaW4gYm9vdGxvYWRlciBtb2RlICovCi0jZGVmaW5lIENZQVBBX1NNQlVTX0JMX1NUQVRVUyBTTUJVU19CTE9DS19DTUQoQ01EX0JMX1NUQVRVUykKLSNkZWZpbmUgQ1lBUEFfU01CVVNfQkxfSEVBRCBTTUJVU19CTE9DS19DTUQoQ01EX0JMX0hFQUQpCi0jZGVmaW5lIENZQVBBX1NNQlVTX0JMX0NNRCBTTUJVU19CTE9DS19DTUQoQ01EX0JMX0NNRCkKLSNkZWZpbmUgQ1lBUEFfU01CVVNfQkxfREFUQSBTTUJVU19CTE9DS19DTUQoQ01EX0JMX0RBVEEpCi0jZGVmaW5lIENZQVBBX1NNQlVTX0JMX0FMTCBTTUJVU19CTE9DS19DTUQoQ01EX0JMX0FMTCkKKwlpZiAoY3lhcGEtPmdlbiA9PSBDWUFQQV9HRU4zICYmCisJCWN5YXBhLT5zdGF0ZSA+PSBDWUFQQV9TVEFURV9CTF9CVVNZICYmCisJCWN5YXBhLT5zdGF0ZSA8PSBDWUFQQV9TVEFURV9CTF9BQ1RJVkUpCisJCXJldHVybiB0cnVlOwogCi0vKiByZWdpc3RlciBibG9jayByZWFkL3dyaXRlIGNvbW1hbmQgaW4gb3BlcmF0aW9uYWwgbW9kZSAqLwotI2RlZmluZSBDWUFQQV9TTUJVU19CTEtfUFJPRFVDVF9JRCBTTUJVU19CTE9DS19DTUQoQ01EX0JMS19QUk9EVUNUX0lEKQotI2RlZmluZSBDWUFQQV9TTUJVU19CTEtfSEVBRCBTTUJVU19CTE9DS19DTUQoQ01EX0JMS19IRUFEKQorCXJldHVybiBmYWxzZTsKK30KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBjeWFwYV9jbWRfbGVuIGN5YXBhX2kyY19jbWRzW10gPSB7Ci0JeyBDWUFQQV9PRkZTRVRfU09GVF9SRVNFVCwgMSB9LAotCXsgUkVHX09GRlNFVF9DT01NQU5EX0JBU0UgKyAxLCAxIH0sCi0JeyBSRUdfT0ZGU0VUX0RBVEFfQkFTRSwgMSB9LAotCXsgUkVHX09GRlNFVF9EQVRBX0JBU0UsIHNpemVvZihzdHJ1Y3QgY3lhcGFfcmVnX2RhdGEpIH0sCi0JeyBSRUdfT0ZGU0VUX0NPTU1BTkRfQkFTRSwgMCB9LAotCXsgUkVHX09GRlNFVF9RVUVSWV9CQVNFLCBRVUVSWV9EQVRBX1NJWkUgfSwKLQl7IEJMX0hFQURfT0ZGU0VULCAzIH0sCi0JeyBCTF9IRUFEX09GRlNFVCwgMTYgfSwKLQl7IEJMX0hFQURfT0ZGU0VULCAxNiB9LAotCXsgQkxfREFUQV9PRkZTRVQsIDE2IH0sCi0JeyBCTF9IRUFEX09GRlNFVCwgMzIgfSwKLQl7IFJFR19PRkZTRVRfUVVFUllfQkFTRSwgUFJPRFVDVF9JRF9TSVpFIH0sCi0JeyBSRUdfT0ZGU0VUX0RBVEFfQkFTRSwgMzIgfQotfTsKK3N0YXRpYyBpbmxpbmUgYm9vbCBjeWFwYV9pc19vcGVyYXRpb25hbF9tb2RlKHN0cnVjdCBjeWFwYSAqY3lhcGEpCit7CisJaWYgKGN5YXBhLT5nZW4gPT0gQ1lBUEFfR0VONSAmJiBjeWFwYS0+c3RhdGUgPT0gQ1lBUEFfU1RBVEVfR0VONV9BUFApCisJCXJldHVybiB0cnVlOwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGN5YXBhX2NtZF9sZW4gY3lhcGFfc21idXNfY21kc1tdID0gewotCXsgQ1lBUEFfU01CVVNfUkVTRVQsIDEgfSwKLQl7IENZQVBBX1NNQlVTX1BPV0VSX01PREUsIDEgfSwKLQl7IENZQVBBX1NNQlVTX0RFVl9TVEFUVVMsIDEgfSwKLQl7IENZQVBBX1NNQlVTX0dST1VQX0RBVEEsIHNpemVvZihzdHJ1Y3QgY3lhcGFfcmVnX2RhdGEpIH0sCi0JeyBDWUFQQV9TTUJVU19HUk9VUF9DTUQsIDIgfSwKLQl7IENZQVBBX1NNQlVTX0dST1VQX1FVRVJZLCBRVUVSWV9EQVRBX1NJWkUgfSwKLQl7IENZQVBBX1NNQlVTX0JMX1NUQVRVUywgMyB9LAotCXsgQ1lBUEFfU01CVVNfQkxfSEVBRCwgMTYgfSwKLQl7IENZQVBBX1NNQlVTX0JMX0NNRCwgMTYgfSwKLQl7IENZQVBBX1NNQlVTX0JMX0RBVEEsIDE2IH0sCi0JeyBDWUFQQV9TTUJVU19CTF9BTEwsIDMyIH0sCi0JeyBDWUFQQV9TTUJVU19CTEtfUFJPRFVDVF9JRCwgUFJPRFVDVF9JRF9TSVpFIH0sCi0JeyBDWUFQQV9TTUJVU19CTEtfSEVBRCwgMTYgfSwKLX07CisJaWYgKGN5YXBhLT5nZW4gPT0gQ1lBUEFfR0VOMyAmJiBjeWFwYS0+c3RhdGUgPT0gQ1lBUEFfU1RBVEVfT1ApCisJCXJldHVybiB0cnVlOwogCi1zdGF0aWMgc3NpemVfdCBjeWFwYV9pMmNfcmVnX3JlYWRfYmxvY2soc3RydWN0IGN5YXBhICpjeWFwYSwgdTggcmVnLCBzaXplX3QgbGVuLAorCXJldHVybiBmYWxzZTsKK30KKworLyogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVsc2UgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZS4gKi8KK3N0YXRpYyBzc2l6ZV90IGN5YXBhX2kyY19yZWFkKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4IHJlZywgc2l6ZV90IGxlbiwKIAkJCQkJdTggKnZhbHVlcykKIHsKLQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoY3lhcGEtPmNsaWVudCwgcmVnLCBsZW4sIHZhbHVlcyk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGN5YXBhX2kyY19yZWdfd3JpdGVfYmxvY2soc3RydWN0IGN5YXBhICpjeWFwYSwgdTggcmVnLAotCQkJCQkgc2l6ZV90IGxlbiwgY29uc3QgdTggKnZhbHVlcykKLXsKLQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGN5YXBhLT5jbGllbnQsIHJlZywgbGVuLCB2YWx1ZXMpOwotfQotCi0vKgotICogY3lhcGFfc21idXNfcmVhZF9ibG9jayAtIHBlcmZvcm0gc21idXMgYmxvY2sgcmVhZCBjb21tYW5kCi0gKiBAY3lhcGEgIC0gcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSBvZiB0aGUgZHJpdmVyCi0gKiBAY21kICAgIC0gdGhlIHByb3Blcmx5IGVuY29kZWQgc21idXMgY29tbWFuZAotICogQGxlbiAgICAtIGV4cGVjdGVkIGxlbmd0aCBvZiBzbWJ1cyBjb21tYW5kIHJlc3VsdAotICogQHZhbHVlcyAtIGJ1ZmZlciB0byBzdG9yZSBzbWJ1cyBjb21tYW5kIHJlc3VsdAotICoKLSAqIFJldHVybnMgbmVnYXRpdmUgZXJybm8sIGVsc2UgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgotICoKLSAqIE5vdGU6Ci0gKiBJbiB0cmFja3BhZCBkZXZpY2UsIHRoZSBtZW1vcnkgYmxvY2sgYWxsb2NhdGVkIGZvciBJMkMgcmVnaXN0ZXIgbWFwCi0gKiBpcyAyNTYgYnl0ZXMsIHNvIHRoZSBtYXggcmVhZCBibG9jayBmb3IgSTJDIGJ1cyBpcyAyNTYgYnl0ZXMuCi0gKi8KLXN0YXRpYyBzc2l6ZV90IGN5YXBhX3NtYnVzX3JlYWRfYmxvY2soc3RydWN0IGN5YXBhICpjeWFwYSwgdTggY21kLCBzaXplX3QgbGVuLAotCQkJCSAgICAgIHU4ICp2YWx1ZXMpCi17Ci0Jc3NpemVfdCByZXQ7Ci0JdTggaW5kZXg7Ci0JdTggc21idXNfY21kOwotCXU4ICpidWY7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGN5YXBhLT5jbGllbnQ7CisJc3RydWN0IGkyY19tc2cgbXNnc1tdID0geworCQl7CisJCQkuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJCS5mbGFncyA9IDAsCisJCQkubGVuID0gMSwKKwkJCS5idWYgPSAmcmVnLAorCQl9LAorCQl7CisJCQkuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJCS5mbGFncyA9IEkyQ19NX1JELAorCQkJLmxlbiA9IGxlbiwKKwkJCS5idWYgPSB2YWx1ZXMsCisJCX0sCisJfTsKKwlpbnQgcmV0OwogCi0JaWYgKCEoU01CVVNfQllURV9CTE9DS19DTURfTUFTSyAmIGNtZCkpCi0JCXJldHVybiAtRUlOVkFMOworCXJldCA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZ3MsIEFSUkFZX1NJWkUobXNncykpOwogCi0JaWYgKFNNQlVTX0dST1VQX0JMT0NLX0NNRF9NQVNLICYgY21kKSB7Ci0JCS8qIHJlYWQgc3BlY2lmaWMgYmxvY2sgcmVnaXN0ZXJzIGNvbW1hbmQuICovCi0JCXNtYnVzX2NtZCA9IFNNQlVTX0VOQ09ERV9SVyhjbWQsIFNNQlVTX1JFQUQpOwotCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ibG9ja19kYXRhKGNsaWVudCwgc21idXNfY21kLCB2YWx1ZXMpOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKHJldCAhPSBBUlJBWV9TSVpFKG1zZ3MpKQorCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IC1FSU87CiAKLQlyZXQgPSAwOwotCWZvciAoaW5kZXggPSAwOyBpbmRleCAqIEkyQ19TTUJVU19CTE9DS19NQVggPCBsZW47IGluZGV4KyspIHsKLQkJc21idXNfY21kID0gU01CVVNfRU5DT0RFX0lEWChjbWQsIGluZGV4KTsKLQkJc21idXNfY21kID0gU01CVVNfRU5DT0RFX1JXKHNtYnVzX2NtZCwgU01CVVNfUkVBRCk7Ci0JCWJ1ZiA9IHZhbHVlcyArIEkyQ19TTUJVU19CTE9DS19NQVggKiBpbmRleDsKLQkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYmxvY2tfZGF0YShjbGllbnQsIHNtYnVzX2NtZCwgYnVmKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gcmV0ID4gMCA/IGxlbiA6IHJldDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHMzMiBjeWFwYV9yZWFkX2J5dGUoc3RydWN0IGN5YXBhICpjeWFwYSwgdTggY21kX2lkeCkKKy8qKgorICogY3lhcGFfaTJjX3dyaXRlIC0gRXhlY3V0ZSBpMmMgYmxvY2sgZGF0YSB3cml0ZSBvcGVyYXRpb24KKyAqIEBjeWFwYTogSGFuZGxlIHRvIHRoaXMgZHJpdmVyCisgKiBAcmV0OiBPZmZzZXQgb2YgdGhlIGRhdGEgdG8gd3JpdHRlbiBpbiB0aGUgcmVnaXN0ZXIgbWFwCisgKiBAbGVuOiBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqIEB2YWx1ZXM6IERhdGEgdG8gYmUgd3JpdHRlbgorICoKKyAqIFJldHVybiBuZWdhdGl2ZSBlcnJubyBjb2RlIG9uIGVycm9yOyByZXR1cm4gemVybyB3aGVuIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgY3lhcGFfaTJjX3dyaXRlKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4IHJlZywKKwkJCQkJIHNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKnZhbHVlcykKIHsKLQl1OCBjbWQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGN5YXBhLT5jbGllbnQ7CisJY2hhciBidWZbMzJdOworCWludCByZXQ7CiAKLQlpZiAoY3lhcGEtPnNtYnVzKSB7Ci0JCWNtZCA9IGN5YXBhX3NtYnVzX2NtZHNbY21kX2lkeF0uY21kOwotCQljbWQgPSBTTUJVU19FTkNPREVfUlcoY21kLCBTTUJVU19SRUFEKTsKLQl9IGVsc2UgewotCQljbWQgPSBjeWFwYV9pMmNfY21kc1tjbWRfaWR4XS5jbWQ7Ci0JfQotCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY3lhcGEtPmNsaWVudCwgY21kKTsKKwlpZiAobGVuID4gc2l6ZW9mKGJ1ZikgLSAxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJ1ZlswXSA9IHJlZzsKKwltZW1jcHkoJmJ1ZlsxXSwgdmFsdWVzLCBsZW4pOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgYnVmLCBsZW4gKyAxKTsKKwlpZiAocmV0ICE9IGxlbiArIDEpCisJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVJTzsKKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgczMyIGN5YXBhX3dyaXRlX2J5dGUoc3RydWN0IGN5YXBhICpjeWFwYSwgdTggY21kX2lkeCwgdTggdmFsdWUpCitzdGF0aWMgdTggY3lhcGFfY2hlY2tfYWRhcHRlcl9mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JdTggY21kOworCXU4IHJldCA9IENZQVBBX0FEQVBURVJfRlVOQ19OT05FOwogCi0JaWYgKGN5YXBhLT5zbWJ1cykgewotCQljbWQgPSBjeWFwYV9zbWJ1c19jbWRzW2NtZF9pZHhdLmNtZDsKLQkJY21kID0gU01CVVNfRU5DT0RFX1JXKGNtZCwgU01CVVNfV1JJVEUpOwotCX0gZWxzZSB7Ci0JCWNtZCA9IGN5YXBhX2kyY19jbWRzW2NtZF9pZHhdLmNtZDsKLQl9Ci0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY3lhcGEtPmNsaWVudCwgY21kLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGN5YXBhX3JlYWRfYmxvY2soc3RydWN0IGN5YXBhICpjeWFwYSwgdTggY21kX2lkeCwgdTggKnZhbHVlcykKLXsKLQl1OCBjbWQ7Ci0Jc2l6ZV90IGxlbjsKLQotCWlmIChjeWFwYS0+c21idXMpIHsKLQkJY21kID0gY3lhcGFfc21idXNfY21kc1tjbWRfaWR4XS5jbWQ7Ci0JCWxlbiA9IGN5YXBhX3NtYnVzX2NtZHNbY21kX2lkeF0ubGVuOwotCQlyZXR1cm4gY3lhcGFfc21idXNfcmVhZF9ibG9jayhjeWFwYSwgY21kLCBsZW4sIHZhbHVlcyk7Ci0JfSBlbHNlIHsKLQkJY21kID0gY3lhcGFfaTJjX2NtZHNbY21kX2lkeF0uY21kOwotCQlsZW4gPSBjeWFwYV9pMmNfY21kc1tjbWRfaWR4XS5sZW47Ci0JCXJldHVybiBjeWFwYV9pMmNfcmVnX3JlYWRfYmxvY2soY3lhcGEsIGNtZCwgbGVuLCB2YWx1ZXMpOwotCX0KKwlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKQorCQlyZXQgfD0gQ1lBUEFfQURBUFRFUl9GVU5DX0kyQzsKKwlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfAorCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfQkxPQ0tfREFUQSB8CisJCQkJICAgICBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0spKQorCQlyZXQgfD0gQ1lBUEFfQURBUFRFUl9GVU5DX1NNQlVTOworCXJldHVybiByZXQ7CiB9CiAKIC8qCiAgKiBRdWVyeSBkZXZpY2UgZm9yIGl0cyBjdXJyZW50IG9wZXJhdGluZyBzdGF0ZS4KLSAqCiAgKi8KIHN0YXRpYyBpbnQgY3lhcGFfZ2V0X3N0YXRlKHN0cnVjdCBjeWFwYSAqY3lhcGEpCiB7CiAJdTggc3RhdHVzW0JMX1NUQVRVU19TSVpFXTsKKwl1OCBjbWRbMzJdOworCS8qIFRoZSBpMmMgYWRkcmVzcyBvZiBnZW40IGFuZCBnZW41IHRyYWNrcGFkIGRldmljZSBtdXN0IGJlIGV2ZW4uICovCisJYm9vbCBldmVuX2FkZHIgPSAoKGN5YXBhLT5jbGllbnQtPmFkZHIgJiAweDAwMDEpID09IDApOworCWJvb2wgc21idXMgPSBmYWxzZTsKKwlpbnQgcmV0cmllcyA9IDI7CiAJaW50IGVycm9yOwogCiAJY3lhcGEtPnN0YXRlID0gQ1lBUEFfU1RBVEVfTk9fREVWSUNFOwpAQCAtNDMzLDM5ICsxNTYsNzQgQEAKIAkgKgogCSAqLwogCWVycm9yID0gY3lhcGFfaTJjX3JlZ19yZWFkX2Jsb2NrKGN5YXBhLCBCTF9IRUFEX09GRlNFVCwgQkxfU1RBVFVTX1NJWkUsCi0JCQkJICAgICAgICAgc3RhdHVzKTsKKwkJCQkgICAgICAgc3RhdHVzKTsKIAogCS8qCiAJICogT24gc21idXMgc3lzdGVtcyBpbiBPUCBtb2RlLCB0aGUgaTJjX3JlZ19yZWFkIHdpbGwgZmFpbCB3aXRoCiAJICogLUVUSU1FRE9VVC4gIEluIHRoaXMgY2FzZSwgdHJ5IGFnYWluIHVzaW5nIHRoZSBzbWJ1cyBlcXVpdmFsZW50CiAJICogY29tbWFuZC4gIFRoaXMgc2hvdWxkIHJldHVybiBhIEJMX0hFQUQgaW5kaWNhdGluZyBDWUFQQV9TVEFURV9PUC4KIAkgKi8KLQlpZiAoY3lhcGEtPnNtYnVzICYmIChlcnJvciA9PSAtRVRJTUVET1VUIHx8IGVycm9yID09IC1FTlhJTykpCi0JCWVycm9yID0gY3lhcGFfcmVhZF9ibG9jayhjeWFwYSwgQ1lBUEFfQ01EX0JMX1NUQVRVUywgc3RhdHVzKTsKKwlpZiAoY3lhcGEtPnNtYnVzICYmIChlcnJvciA9PSAtRVRJTUVET1VUIHx8IGVycm9yID09IC1FTlhJTykpIHsKKwkJaWYgKCFldmVuX2FkZHIpCisJCQllcnJvciA9IGN5YXBhX3JlYWRfYmxvY2soY3lhcGEsCisJCQkJCUNZQVBBX0NNRF9CTF9TVEFUVVMsIHN0YXR1cyk7CisJCXNtYnVzID0gdHJ1ZTsKKwl9CiAKIAlpZiAoZXJyb3IgIT0gQkxfU1RBVFVTX1NJWkUpCiAJCWdvdG8gZXJyb3I7CiAKLQlpZiAoKHN0YXR1c1tSRUdfT1BfU1RBVFVTXSAmIE9QX1NUQVRVU19TUkMpID09IE9QX1NUQVRVU19TUkMpIHsKLQkJc3dpdGNoIChzdGF0dXNbUkVHX09QX1NUQVRVU10gJiBPUF9TVEFUVVNfREVWKSB7Ci0JCWNhc2UgQ1lBUEFfREVWX05PUk1BTDoKLQkJY2FzZSBDWUFQQV9ERVZfQlVTWToKLQkJCWN5YXBhLT5zdGF0ZSA9IENZQVBBX1NUQVRFX09QOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnJvciA9IC1FQUdBSU47Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHN0YXR1c1tSRUdfQkxfU1RBVFVTXSAmIEJMX1NUQVRVU19CVVNZKQotCQkJY3lhcGEtPnN0YXRlID0gQ1lBUEFfU1RBVEVfQkxfQlVTWTsKLQkJZWxzZSBpZiAoc3RhdHVzW1JFR19CTF9FUlJPUl0gJiBCTF9FUlJPUl9CT09UTE9BRElORykKLQkJCWN5YXBhLT5zdGF0ZSA9IENZQVBBX1NUQVRFX0JMX0FDVElWRTsKLQkJZWxzZQotCQkJY3lhcGEtPnN0YXRlID0gQ1lBUEFfU1RBVEVfQkxfSURMRTsKLQl9CisJLyoKKwkgKiBEZXRlY3QgdHJhY2twYWQgcHJvdG9jb2wgYmFzZWQgb24gY2hhcmFjdGVyaXN0aWMgcmVnaXN0ZXJzIGFuZCBiaXRzLgorCSAqLworCWRvIHsKKwkJY3lhcGEtPnN0YXR1c1tSRUdfT1BfU1RBVFVTXSA9IHN0YXR1c1tSRUdfT1BfU1RBVFVTXTsKKwkJY3lhcGEtPnN0YXR1c1tSRUdfQkxfU1RBVFVTXSA9IHN0YXR1c1tSRUdfQkxfU1RBVFVTXTsKKwkJY3lhcGEtPnN0YXR1c1tSRUdfQkxfRVJST1JdID0gc3RhdHVzW1JFR19CTF9FUlJPUl07CiAKKwkJaWYgKGN5YXBhLT5nZW4gPT0gQ1lBUEFfR0VOX1VOS05PV04gfHwKKwkJCQljeWFwYS0+Z2VuID09IENZQVBBX0dFTjMpIHsKKwkJCWVycm9yID0gY3lhcGFfZ2VuM19vcHMuc3RhdGVfcGFyc2UoY3lhcGEsCisJCQkJCXN0YXR1cywgQkxfU1RBVFVTX1NJWkUpOworCQkJaWYgKCFlcnJvcikKKwkJCQlnb3RvIG91dF9kZXRlY3RlZDsKKwkJfQorCQlpZiAoKGN5YXBhLT5nZW4gPT0gQ1lBUEFfR0VOX1VOS05PV04gfHwKKwkJCQljeWFwYS0+Z2VuID09IENZQVBBX0dFTjUpICYmCisJCQkhc21idXMgJiYgZXZlbl9hZGRyKSB7CisJCQllcnJvciA9IGN5YXBhX2dlbjVfb3BzLnN0YXRlX3BhcnNlKGN5YXBhLAorCQkJCQlzdGF0dXMsIEJMX1NUQVRVU19TSVpFKTsKKwkJCWlmICghZXJyb3IpCisJCQkJZ290byBvdXRfZGV0ZWN0ZWQ7CisJCX0KKworCQkvKgorCQkgKiBXcml0ZSAweDAwIDB4MDAgdG8gdHJhY2twYWQgZGV2aWNlIHRvIGZvcmNlIHVwZGF0ZSBpdHMKKwkJICogc3RhdHVzLCB0aGVuIHJlZG8gdGhlIGRldGVjdGlvbiBhZ2Fpbi4KKwkJICovCisJCWlmICghc21idXMpIHsKKwkJCWNtZFswXSA9IDB4MDA7CisJCQljbWRbMV0gPSAweDAwOworCQkJZXJyb3IgPSBjeWFwYV9pMmNfd3JpdGUoY3lhcGEsIDAsIDIsIGNtZCk7CisJCQlpZiAoZXJyb3IpCisJCQkJZ290byBlcnJvcjsKKworCQkJbXNsZWVwKDUwKTsKKworCQkJZXJyb3IgPSBjeWFwYV9pMmNfcmVhZChjeWFwYSwgQkxfSEVBRF9PRkZTRVQsCisJCQkJCUJMX1NUQVRVU19TSVpFLCBzdGF0dXMpOworCQkJaWYgKGVycm9yKQorCQkJCWdvdG8gZXJyb3I7CisJCX0KKwl9IHdoaWxlICgtLXJldHJpZXMgPiAwICYmICFzbWJ1cyk7CisKKwlnb3RvIGVycm9yOworCitvdXRfZGV0ZWN0ZWQ6CisJaWYgKGN5YXBhLT5zdGF0ZSA8PSBDWUFQQV9TVEFURV9CTF9CVVNZKQorCQlyZXR1cm4gLUVBR0FJTjsKIAlyZXR1cm4gMDsKKwogZXJyb3I6CiAJcmV0dXJuIChlcnJvciA8IDApID8gZXJyb3IgOiAtRUFHQUlOOwogfQpAQCAtNDgyLDE0NSArMjQwLDI1IEBACiAgKiBSZXR1cm5zOgogICogICAwIHdoZW4gdGhlIGRldmljZSBldmVudHVhbGx5IHJlc3BvbmRzIHdpdGggYSB2YWxpZCBub24tYnVzeSBzdGF0ZS4KICAqICAgLUVUSU1FRE9VVCBpZiBkZXZpY2UgbmV2ZXIgcmVzcG9uZHMgKHRvbyBtYW55IC1FQUdBSU4pCi0gKiAgIDwgMCAgICBvdGhlciBlcnJvcnMKKyAqICAgLUVBR0FJTiAgICBpZiBib290bG9hZCBpcyBidXN5LCBvciB1bmtub3duIHN0YXRlLgorICogICA8IDAgICAgICAgIG90aGVyIGVycm9ycwogICovCi1zdGF0aWMgaW50IGN5YXBhX3BvbGxfc3RhdGUoc3RydWN0IGN5YXBhICpjeWFwYSwgdW5zaWduZWQgaW50IHRpbWVvdXQpCitpbnQgY3lhcGFfcG9sbF9zdGF0ZShzdHJ1Y3QgY3lhcGEgKmN5YXBhLCB1bnNpZ25lZCBpbnQgdGltZW91dCkKIHsKIAlpbnQgZXJyb3I7CiAJaW50IHRyaWVzID0gdGltZW91dCAvIDEwMDsKIAotCWVycm9yID0gY3lhcGFfZ2V0X3N0YXRlKGN5YXBhKTsKLQl3aGlsZSAoKGVycm9yIHx8IGN5YXBhLT5zdGF0ZSA+PSBDWUFQQV9TVEFURV9CTF9CVVNZKSAmJiB0cmllcy0tKSB7Ci0JCW1zbGVlcCgxMDApOworCWRvIHsKIAkJZXJyb3IgPSBjeWFwYV9nZXRfc3RhdGUoY3lhcGEpOwotCX0KKwkJaWYgKCFlcnJvciAmJiBjeWFwYS0+c3RhdGUgPiBDWUFQQV9TVEFURV9CTF9CVVNZKQorCQkJcmV0dXJuIDA7CisKKwkJbXNsZWVwKDEwMCk7CisJfSB3aGlsZSAodHJpZXMtLSk7CisKIAlyZXR1cm4gKGVycm9yID09IC1FQUdBSU4gfHwgZXJyb3IgPT0gLUVUSU1FRE9VVCkgPyAtRVRJTUVET1VUIDogZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgY3lhcGFfYmxfZGVhY3RpdmF0ZShzdHJ1Y3QgY3lhcGEgKmN5YXBhKQotewotCWludCBlcnJvcjsKLQotCWVycm9yID0gY3lhcGFfaTJjX3JlZ193cml0ZV9ibG9jayhjeWFwYSwgMCwgc2l6ZW9mKGJsX2RlYWN0aXZhdGUpLAotCQkJCQkgIGJsX2RlYWN0aXZhdGUpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCi0JLyogd2FpdCBmb3IgYm9vdGxvYWRlciB0byBzd2l0Y2ggdG8gaWRsZSBzdGF0ZTsgc2hvdWxkIHRha2UgPCAxMDBtcyAqLwotCW1zbGVlcCgxMDApOwotCWVycm9yID0gY3lhcGFfcG9sbF9zdGF0ZShjeWFwYSwgNTAwKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQlpZiAoY3lhcGEtPnN0YXRlICE9IENZQVBBX1NUQVRFX0JMX0lETEUpCi0JCXJldHVybiAtRUFHQUlOOwotCXJldHVybiAwOwotfQotCi0vKgotICogRXhpdCBib290bG9hZGVyCi0gKgotICogU2VuZCBibF9leGl0IGNvbW1hbmQsIHRoZW4gd2FpdCA1MCAtIDEwMCBtcyB0byBsZXQgZGV2aWNlIHRyYW5zaXRpb24gdG8KLSAqIG9wZXJhdGlvbmFsIG1vZGUuICBJZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHRoZSBkZXZpY2UncyBmaXJtd2FyZSBpcwotICogcnVubmluZywgaXQgY2FuIHRha2UgdXAgdG8gMiBzZWNvbmRzIHRvIGNhbGlicmF0ZSBpdHMgc2Vuc29ycy4gIFNvLCBwb2xsCi0gKiB0aGUgZGV2aWNlJ3MgbmV3IHN0YXRlIGZvciB1cCB0byAyIHNlY29uZHMuCi0gKgotICogUmV0dXJuczoKLSAqICAgLUVJTyAgICBmYWlsdXJlIHdoaWxlIHJlYWRpbmcgZnJvbSBkZXZpY2UKLSAqICAgLUVBR0FJTiBkZXZpY2UgaXMgc3R1Y2sgaW4gYm9vdGxvYWRlciwgYi9jIGl0IGhhcyBpbnZhbGlkIGZpcm13YXJlCi0gKiAgIDAgICAgICAgZGV2aWNlIGlzIHN1cHBvcnRlZCBhbmQgaW4gb3BlcmF0aW9uYWwgbW9kZQotICovCi1zdGF0aWMgaW50IGN5YXBhX2JsX2V4aXQoc3RydWN0IGN5YXBhICpjeWFwYSkKLXsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGN5YXBhX2kyY19yZWdfd3JpdGVfYmxvY2soY3lhcGEsIDAsIHNpemVvZihibF9leGl0KSwgYmxfZXhpdCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQkvKgotCSAqIFdhaXQgZm9yIGJvb3Rsb2FkZXIgdG8gZXhpdCwgYW5kIG9wZXJhdGlvbiBtb2RlIHRvIHN0YXJ0LgotCSAqIE5vcm1hbGx5LCB0aGlzIHRha2VzIGF0IGxlYXN0IDUwIG1zLgotCSAqLwotCXVzbGVlcF9yYW5nZSg1MDAwMCwgMTAwMDAwKTsKLQkvKgotCSAqIEluIGFkZGl0aW9uLCB3aGVuIGEgZGV2aWNlIGJvb3RzIGZvciB0aGUgZmlyc3QgdGltZSBhZnRlciBiZWluZwotCSAqIHVwZGF0ZWQgdG8gbmV3IGZpcm13YXJlLCBpdCBtdXN0IGZpcnN0IGNhbGlicmF0ZSBpdHMgc2Vuc29ycywgd2hpY2gKLQkgKiBjYW4gdGFrZSB1cCB0byBhbiBhZGRpdGlvbmFsIDIgc2Vjb25kcy4KLQkgKi8KLQllcnJvciA9IGN5YXBhX3BvbGxfc3RhdGUoY3lhcGEsIDIwMDApOwotCWlmIChlcnJvciA8IDApCi0JCXJldHVybiBlcnJvcjsKLQlpZiAoY3lhcGEtPnN0YXRlICE9IENZQVBBX1NUQVRFX09QKQotCQlyZXR1cm4gLUVBR0FJTjsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogU2V0IGRldmljZSBwb3dlciBtb2RlCi0gKgotICovCi1zdGF0aWMgaW50IGN5YXBhX3NldF9wb3dlcl9tb2RlKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4IHBvd2VyX21vZGUpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmN5YXBhLT5jbGllbnQtPmRldjsKLQlpbnQgcmV0OwotCXU4IHBvd2VyOwotCi0JaWYgKGN5YXBhLT5zdGF0ZSAhPSBDWUFQQV9TVEFURV9PUCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXQgPSBjeWFwYV9yZWFkX2J5dGUoY3lhcGEsIENZQVBBX0NNRF9QT1dFUl9NT0RFKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXBvd2VyID0gcmV0ICYgflBXUl9NT0RFX01BU0s7Ci0JcG93ZXIgfD0gcG93ZXJfbW9kZSAmIFBXUl9NT0RFX01BU0s7Ci0JcmV0ID0gY3lhcGFfd3JpdGVfYnl0ZShjeWFwYSwgQ1lBUEFfQ01EX1BPV0VSX01PREUsIHBvd2VyKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXQgcG93ZXJfbW9kZSAweCUwMnggZXJyID0gJWRcbiIsCi0JCQlwb3dlcl9tb2RlLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGN5YXBhX2dldF9xdWVyeV9kYXRhKHN0cnVjdCBjeWFwYSAqY3lhcGEpCi17Ci0JdTggcXVlcnlfZGF0YVtRVUVSWV9EQVRBX1NJWkVdOwotCWludCByZXQ7Ci0KLQlpZiAoY3lhcGEtPnN0YXRlICE9IENZQVBBX1NUQVRFX09QKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcmV0ID0gY3lhcGFfcmVhZF9ibG9jayhjeWFwYSwgQ1lBUEFfQ01EX0dST1VQX1FVRVJZLCBxdWVyeV9kYXRhKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlpZiAocmV0ICE9IFFVRVJZX0RBVEFfU0laRSkKLQkJcmV0dXJuIC1FSU87Ci0KLQltZW1jcHkoJmN5YXBhLT5wcm9kdWN0X2lkWzBdLCAmcXVlcnlfZGF0YVswXSwgNSk7Ci0JY3lhcGEtPnByb2R1Y3RfaWRbNV0gPSAnLSc7Ci0JbWVtY3B5KCZjeWFwYS0+cHJvZHVjdF9pZFs2XSwgJnF1ZXJ5X2RhdGFbNV0sIDYpOwotCWN5YXBhLT5wcm9kdWN0X2lkWzEyXSA9ICctJzsKLQltZW1jcHkoJmN5YXBhLT5wcm9kdWN0X2lkWzEzXSwgJnF1ZXJ5X2RhdGFbMTFdLCAyKTsKLQljeWFwYS0+cHJvZHVjdF9pZFsxNV0gPSAnXDAnOwotCi0JY3lhcGEtPmJ0bl9jYXBhYmlsaXR5ID0gcXVlcnlfZGF0YVsxOV0gJiBDQVBBQklMSVRZX0JUTl9NQVNLOwotCi0JY3lhcGEtPmdlbiA9IHF1ZXJ5X2RhdGFbMjBdICYgMHgwZjsKLQotCWN5YXBhLT5tYXhfYWJzX3ggPSAoKHF1ZXJ5X2RhdGFbMjFdICYgMHhmMCkgPDwgNCkgfCBxdWVyeV9kYXRhWzIyXTsKLQljeWFwYS0+bWF4X2Fic195ID0gKChxdWVyeV9kYXRhWzIxXSAmIDB4MGYpIDw8IDgpIHwgcXVlcnlfZGF0YVsyM107Ci0KLQljeWFwYS0+cGh5c2ljYWxfc2l6ZV94ID0KLQkJKChxdWVyeV9kYXRhWzI0XSAmIDB4ZjApIDw8IDQpIHwgcXVlcnlfZGF0YVsyNV07Ci0JY3lhcGEtPnBoeXNpY2FsX3NpemVfeSA9Ci0JCSgocXVlcnlfZGF0YVsyNF0gJiAweDBmKSA8PCA4KSB8IHF1ZXJ5X2RhdGFbMjZdOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBDaGVjayBpZiBkZXZpY2UgaXMgb3BlcmF0aW9uYWwuCiAgKgpAQCAtNjI4LDggKzI2NiwxMCBAQAogICogZmlybXdhcmUgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLgogICoKICAqIFJldHVybnM6CisgKiAgIC1FTk9ERVYgbm8gZGV2aWNlCiAgKiAgIC1FQlVTWSAgbm8gZGV2aWNlIG9yIGluIGJvb3Rsb2FkZXIKICAqICAgLUVJTyAgICBmYWlsdXJlIHdoaWxlIHJlYWRpbmcgZnJvbSBkZXZpY2UKKyAqICAgLUVUSU1FRE9VVCB0aW1lb3V0IGZhaWx1cmUgZm9yIGJ1cyBpZGxlIG9yIGJ1cyBubyByZXNwb25zZQogICogICAtRUFHQUlOIGRldmljZSBpcyBzdGlsbCBpbiBib290bG9hZGVyCiAgKiAgICAgICAgICAgaWYgLT5zdGF0ZSA9IENZQVBBX1NUQVRFX0JMX0lETEUsIGRldmljZSBoYXMgaW52YWxpZCBmaXJtd2FyZQogICogICAtRUlOVkFMIGRldmljZSBpcyBpbiBvcGVyYXRpb25hbCBtb2RlLCBidXQgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcgpAQCAtNjM3LDEyMiArMjc3LDU2IEBACiAgKi8KIHN0YXRpYyBpbnQgY3lhcGFfY2hlY2tfaXNfb3BlcmF0aW9uYWwoc3RydWN0IGN5YXBhICpjeWFwYSkKIHsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY3lhcGEtPmNsaWVudC0+ZGV2OwotCXN0YXRpYyBjb25zdCBjaGFyIHVuaXF1ZV9zdHJbXSA9ICJDWVRSQSI7CiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBjeWFwYV9wb2xsX3N0YXRlKGN5YXBhLCAyMDAwKTsKKwllcnJvciA9IGN5YXBhX3BvbGxfc3RhdGUoY3lhcGEsIDQwMDApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCXN3aXRjaCAoY3lhcGEtPnN0YXRlKSB7Ci0JY2FzZSBDWUFQQV9TVEFURV9CTF9BQ1RJVkU6Ci0JCWVycm9yID0gY3lhcGFfYmxfZGVhY3RpdmF0ZShjeWFwYSk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiBlcnJvcjsKIAotCS8qIEZhbGx0aHJvdWdoIHN0YXRlICovCi0JY2FzZSBDWUFQQV9TVEFURV9CTF9JRExFOgotCQllcnJvciA9IGN5YXBhX2JsX2V4aXQoY3lhcGEpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0KLQkvKiBGYWxsdGhyb3VnaCBzdGF0ZSAqLwotCWNhc2UgQ1lBUEFfU1RBVEVfT1A6Ci0JCWVycm9yID0gY3lhcGFfZ2V0X3F1ZXJ5X2RhdGEoY3lhcGEpOwotCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gZXJyb3I7Ci0KLQkJLyogb25seSBzdXBwb3J0IGZpcm13YXJlIHByb3RvY29sIGdlbjMgKi8KLQkJaWYgKGN5YXBhLT5nZW4gIT0gQ1lBUEFfR0VOMykgewotCQkJZGV2X2VycihkZXYsICJ1bnN1cHBvcnRlZCBwcm90b2NvbCB2ZXJzaW9uICglZCkiLAotCQkJCWN5YXBhLT5nZW4pOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkvKiBvbmx5IHN1cHBvcnQgcHJvZHVjdCBJRCBzdGFydGluZyB3aXRoIENZVFJBICovCi0JCWlmIChtZW1jbXAoY3lhcGEtPnByb2R1Y3RfaWQsIHVuaXF1ZV9zdHIsCi0JCQkgICBzaXplb2YodW5pcXVlX3N0cikgLSAxKSAhPSAwKSB7Ci0JCQlkZXZfZXJyKGRldiwgInVuc3VwcG9ydGVkIHByb2R1Y3QgSUQgKCVzKVxuIiwKLQkJCQljeWFwYS0+cHJvZHVjdF9pZCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlyZXR1cm4gMDsKLQorCXN3aXRjaCAoY3lhcGEtPmdlbikgeworCWNhc2UgQ1lBUEFfR0VONToKKwkJY3lhcGEtPm9wcyA9ICZjeWFwYV9nZW41X29wczsKKwkJYnJlYWs7CisJY2FzZSBDWUFQQV9HRU4zOgorCQljeWFwYS0+b3BzID0gJmN5YXBhX2dlbjNfb3BzOworCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTzsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXJldHVybiAwOworCisJZXJyb3IgPSBjeWFwYS0+b3BzLT5vcGVyYXRpb25hbF9jaGVjayhjeWFwYSk7CisJaWYgKCFlcnJvciAmJiBjeWFwYV9pc19vcGVyYXRpb25hbF9tb2RlKGN5YXBhKSkKKwkJY3lhcGEtPm9wZXJhdGlvbmFsID0gdHJ1ZTsKKwllbHNlCisJCWN5YXBhLT5vcGVyYXRpb25hbCA9IGZhbHNlOworCisJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgY3lhcGFfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKKworLyoKKyAqIFJldHVybnMgMCBvbiBkZXZpY2UgZGV0ZWN0ZWQsIG5lZ2F0aXZlIGVycm5vIG9uIG5vIGRldmljZSBkZXRlY3RlZC4KKyAqIEFuZCB3aGVuIHRoZSBkZXZpY2UgaXMgZGV0ZWN0ZWQgYW5kIG9wZXJ0YWlvbmFsLCBpdCB3aWxsIGJlIHJlc2V0IHRvCisgKiBmdWxsIHBvd2VyIGFjdGl2ZSBtb2RlIGF1dG9tYXRpY2FsbHkuCisgKi8KK3N0YXRpYyBpbnQgY3lhcGFfZGV0ZWN0KHN0cnVjdCBjeWFwYSAqY3lhcGEpCiB7Ci0Jc3RydWN0IGN5YXBhICpjeWFwYSA9IGRldl9pZDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY3lhcGEtPmNsaWVudC0+ZGV2OwotCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gY3lhcGEtPmlucHV0OwotCXN0cnVjdCBjeWFwYV9yZWdfZGF0YSBkYXRhOwotCWludCBpOwotCWludCByZXQ7Ci0JaW50IG51bV9maW5nZXJzOworCWludCBlcnJvcjsKIAotCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQotCQlwbV93YWtldXBfZXZlbnQoZGV2LCAwKTsKKwllcnJvciA9IGN5YXBhX2NoZWNrX2lzX29wZXJhdGlvbmFsKGN5YXBhKTsKKwlpZiAoZXJyb3IpIHsKKwkJaWYgKGVycm9yICE9IC1FVElNRURPVVQgJiYgZXJyb3IgIT0gLUVOT0RFViAmJgorCQkJY3lhcGFfaXNfYm9vdGxvYWRlcl9tb2RlKGN5YXBhKSkgeworCQkJZGV2X3dhcm4oZGV2LCAiZGV2aWNlIGRldGVjdGVkIGJ1dCBub3Qgb3BlcmF0aW9uYWxcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KIAotCXJldCA9IGN5YXBhX3JlYWRfYmxvY2soY3lhcGEsIENZQVBBX0NNRF9HUk9VUF9EQVRBLCAodTggKikmZGF0YSk7Ci0JaWYgKHJldCAhPSBzaXplb2YoZGF0YSkpCi0JCWdvdG8gb3V0OwotCi0JaWYgKChkYXRhLmRldmljZV9zdGF0dXMgJiBPUF9TVEFUVVNfU1JDKSAhPSBPUF9TVEFUVVNfU1JDIHx8Ci0JICAgIChkYXRhLmRldmljZV9zdGF0dXMgJiBPUF9TVEFUVVNfREVWKSAhPSBDWUFQQV9ERVZfTk9STUFMIHx8Ci0JICAgIChkYXRhLmZpbmdlcl9idG4gJiBPUF9EQVRBX1ZBTElEKSAhPSBPUF9EQVRBX1ZBTElEKSB7Ci0JCWdvdG8gb3V0OworCQlkZXZfZXJyKGRldiwgIm5vIGRldmljZSBkZXRlY3RlZDogJWRcbiIsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAotCW51bV9maW5nZXJzID0gKGRhdGEuZmluZ2VyX2J0biA+PiA0KSAmIDB4MGY7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9maW5nZXJzOyBpKyspIHsKLQkJY29uc3Qgc3RydWN0IGN5YXBhX3RvdWNoICp0b3VjaCA9ICZkYXRhLnRvdWNoZXNbaV07Ci0JCS8qIE5vdGU6IHRvdWNoLT5pZCByYW5nZSBpcyAxIHRvIDE1OyBzbG90cyBhcmUgMCB0byAxNC4gKi8KLQkJaW50IHNsb3QgPSB0b3VjaC0+aWQgLSAxOwotCi0JCWlucHV0X210X3Nsb3QoaW5wdXQsIHNsb3QpOwotCQlpbnB1dF9tdF9yZXBvcnRfc2xvdF9zdGF0ZShpbnB1dCwgTVRfVE9PTF9GSU5HRVIsIHRydWUpOwotCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWCwKLQkJCQkgKCh0b3VjaC0+eHlfaGkgJiAweGYwKSA8PCA0KSB8IHRvdWNoLT54X2xvKTsKLQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1ksCi0JCQkJICgodG91Y2gtPnh5X2hpICYgMHgwZikgPDwgOCkgfCB0b3VjaC0+eV9sbyk7Ci0JCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9QUkVTU1VSRSwgdG91Y2gtPnByZXNzdXJlKTsKLQl9Ci0KLQlpbnB1dF9tdF9zeW5jX2ZyYW1lKGlucHV0KTsKLQotCWlmIChjeWFwYS0+YnRuX2NhcGFiaWxpdHkgJiBDQVBBQklMSVRZX0xFRlRfQlROX01BU0spCi0JCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9MRUZULAotCQkJCSBkYXRhLmZpbmdlcl9idG4gJiBPUF9EQVRBX0xFRlRfQlROKTsKLQotCWlmIChjeWFwYS0+YnRuX2NhcGFiaWxpdHkgJiBDQVBBQklMSVRZX01JRERMRV9CVE5fTUFTSykKLQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX01JRERMRSwKLQkJCQkgZGF0YS5maW5nZXJfYnRuICYgT1BfREFUQV9NSURETEVfQlROKTsKLQotCWlmIChjeWFwYS0+YnRuX2NhcGFiaWxpdHkgJiBDQVBBQklMSVRZX1JJR0hUX0JUTl9NQVNLKQotCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fUklHSFQsCi0JCQkJIGRhdGEuZmluZ2VyX2J0biAmIE9QX0RBVEFfUklHSFRfQlROKTsKLQotCWlucHV0X3N5bmMoaW5wdXQpOwotCi1vdXQ6Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgdTggY3lhcGFfY2hlY2tfYWRhcHRlcl9mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JdTggcmV0ID0gQ1lBUEFfQURBUFRFUl9GVU5DX05PTkU7Ci0KLQlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKQotCQlyZXQgfD0gQ1lBUEFfQURBUFRFUl9GVU5DX0kyQzsKLQlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgfAotCQkJCSAgICAgSTJDX0ZVTkNfU01CVVNfQkxPQ0tfREFUQSB8Ci0JCQkJICAgICBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0spKQotCQlyZXQgfD0gQ1lBUEFfQURBUFRFUl9GVU5DX1NNQlVTOwotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY3lhcGFfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCkKQEAgLTc2MSwyMiArMzM1LDU3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGN5YXBhLT5jbGllbnQ7CiAJaW50IGVycm9yOwogCi0JZXJyb3IgPSBjeWFwYV9zZXRfcG93ZXJfbW9kZShjeWFwYSwgUFdSX01PREVfRlVMTF9BQ1RJVkUpOwotCWlmIChlcnJvcikgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInNldCBhY3RpdmUgcG93ZXIgZmFpbGVkOiAlZFxuIiwgZXJyb3IpOworCWVycm9yID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjeWFwYS0+c3RhdGVfc3luY19sb2NrKTsKKwlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKKworCWlmIChjeWFwYS0+b3BlcmF0aW9uYWwpIHsKKwkJLyoKKwkJICogdGhvdWdoIGZhaWxlZCB0byBzZXQgYWN0aXZlIHBvd2VyIG1vZGUsCisJCSAqIGJ1dCBzdGlsbCBtYXkgYmUgYWJsZSB0byB3b3JrIGluIGxvd2VyIHNjYW4gcmF0ZQorCQkgKiB3aGVuIGluIG9wZXJhdGlvbmFsIG1vZGUuCisJCSAqLworCQllcnJvciA9IGN5YXBhLT5vcHMtPnNldF9wb3dlcl9tb2RlKGN5YXBhLAorCQkJCVBXUl9NT0RFX0ZVTExfQUNUSVZFLCAwKTsKKwkJaWYgKGVycm9yKSB7CisJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsCisJCQkJInNldCBhY3RpdmUgcG93ZXIgZmFpbGVkOiAlZFxuIiwgZXJyb3IpOworCQkJZ290byBvdXQ7CisJCX0KKwl9IGVsc2UgeworCQllcnJvciA9IGN5YXBhX3JlaW5pdGlhbGl6ZShjeWFwYSk7CisJCWlmIChlcnJvciB8fCAhY3lhcGEtPm9wZXJhdGlvbmFsKSB7CisJCQllcnJvciA9IGVycm9yID8gZXJyb3IgOiAtRUFHQUlOOworCQkJZ290byBvdXQ7CisJCX0KIAl9CiAKIAllbmFibGVfaXJxKGNsaWVudC0+aXJxKTsKLQlyZXR1cm4gMDsKKwlpZiAoIXBtX3J1bnRpbWVfZW5hYmxlZCgmY2xpZW50LT5kZXYpKSB7CisJCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZSgmY2xpZW50LT5kZXYpOworCQlwbV9ydW50aW1lX2VuYWJsZSgmY2xpZW50LT5kZXYpOworCX0KK291dDoKKwltdXRleF91bmxvY2soJmN5YXBhLT5zdGF0ZV9zeW5jX2xvY2spOworCXJldHVybiBlcnJvcjsKIH0KIAogc3RhdGljIHZvaWQgY3lhcGFfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqaW5wdXQpCiB7CiAJc3RydWN0IGN5YXBhICpjeWFwYSA9IGlucHV0X2dldF9kcnZkYXRhKGlucHV0KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY3lhcGEtPmNsaWVudDsKIAotCWRpc2FibGVfaXJxKGN5YXBhLT5jbGllbnQtPmlycSk7Ci0JY3lhcGFfc2V0X3Bvd2VyX21vZGUoY3lhcGEsIFBXUl9NT0RFX09GRik7CisJbXV0ZXhfbG9jaygmY3lhcGEtPnN0YXRlX3N5bmNfbG9jayk7CisKKwlkaXNhYmxlX2lycShjbGllbnQtPmlycSk7CisJaWYgKHBtX3J1bnRpbWVfZW5hYmxlZCgmY2xpZW50LT5kZXYpKQorCQlwbV9ydW50aW1lX2Rpc2FibGUoJmNsaWVudC0+ZGV2KTsKKwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJmNsaWVudC0+ZGV2KTsKKworCWlmIChjeWFwYS0+b3BlcmF0aW9uYWwpCisJCWN5YXBhLT5vcHMtPnNldF9wb3dlcl9tb2RlKGN5YXBhLCBQV1JfTU9ERV9PRkYsIDApOworCisJbXV0ZXhfdW5sb2NrKCZjeWFwYS0+c3RhdGVfc3luY19sb2NrKTsKIH0KIAogc3RhdGljIGludCBjeWFwYV9jcmVhdGVfaW5wdXRfZGV2KHN0cnVjdCBjeWFwYSAqY3lhcGEpCkBAIC04MTMsNyArNDIyLDI4IEBACiAJCQkgICAgIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWSwgMCwgY3lhcGEtPm1heF9hYnNfeSwgMCwKIAkJCSAgICAgMCk7Ci0JaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIEFCU19NVF9QUkVTU1VSRSwgMCwgMjU1LCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1BSRVNTVVJFLCAwLCBjeWFwYS0+bWF4X3osIDAsIDApOworCWlmIChjeWFwYS0+Z2VuID4gQ1lBUEFfR0VOMykgeworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1RPVUNIX01BSk9SLCAwLCAyNTUsIDAsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1RPVUNIX01JTk9SLCAwLCAyNTUsIDAsIDApOworCQkvKgorCQkgKiBPcmllbnRhdGlvbiBpcyB0aGUgYW5nbGUgYmV0d2VlbiB0aGUgdmVydGljYWwgYXhpcyBhbmQKKwkJICogdGhlIG1ham9yIGF4aXMgb2YgdGhlIGNvbnRhY3QgZWxsaXBzZS4KKwkJICogVGhlIHJhbmdlIGlzIC0xMjcgdG8gMTI3LgorCQkgKiB0aGUgcG9zaXRpdmUgZGlyZWN0aW9uIGlzIGNsb2Nrd2lzZSBmb3JtIHRoZSB2ZXJ0aWNhbCBheGlzLgorCQkgKiBJZiB0aGUgZWxsaXBzZSBvZiBjb250YWN0IGRlZ2VuZXJhdGVzIGludG8gYSBjaXJjbGUsCisJCSAqIG9yaWVudGF0aW9uIGlzIHJlcG9ydGVkIGFzIDAuCisJCSAqCisJCSAqIEFsc28sIGZvciBHZW41IHRyYWNrcGFkIHRoZSBhY2N1cmF0ZSBvZiB0aGlzIG9yaWVudGF0aW9uCisJCSAqIHZhbHVlIGlzIHZhbHVlICsgKC0zMCB+IDMwKS4KKwkJICovCisJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0LCBBQlNfTVRfT1JJRU5UQVRJT04sCisJCQkJLTEyNywgMTI3LCAwLCAwKTsKKwl9CisJaWYgKGN5YXBhLT5nZW4gPj0gQ1lBUEFfR0VONSkgeworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1dJRFRIX01BSk9SLCAwLCAyNTUsIDAsIDApOworCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dCwgQUJTX01UX1dJRFRIX01JTk9SLCAwLCAyNTUsIDAsIDApOworCX0KIAogCWlucHV0X2Fic19zZXRfcmVzKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWCwKIAkJCSAgY3lhcGEtPm1heF9hYnNfeCAvIGN5YXBhLT5waHlzaWNhbF9zaXplX3gpOwpAQCAtODM4LDE2ICs0NjgsNzIwIEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAKKwkvKiBSZWdpc3RlciB0aGUgZGV2aWNlIGluIGlucHV0IHN1YnN5c3RlbSAqLworCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlOiAlZFxuIiwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCiAJY3lhcGEtPmlucHV0ID0gaW5wdXQ7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGN5YXBhX2VuYWJsZV9pcnFfZm9yX2NtZChzdHJ1Y3QgY3lhcGEgKmN5YXBhKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gY3lhcGEtPmlucHV0OworCisJaWYgKCFpbnB1dCB8fCAhaW5wdXQtPnVzZXJzKSB7CisJCS8qCisJCSAqIFdoZW4gaW5wdXQgaXMgTlVMTCwgVFAgbXVzdCBiZSBpbiBkZWVwIHNsZWVwIG1vZGUuCisJCSAqIEluIHRoaXMgbW9kZSwgbGF0ZXIgbm9uLXBvd2VyIEkyQyBjb21tYW5kIHdpbGwgYWx3YXlzIGZhaWxlZAorCQkgKiBpZiBub3QgYnJpbmcgaXQgb3V0IG9mIGRlZXAgc2xlZXAgbW9kZSBmaXJzdGx5LAorCQkgKiBzbyBtdXN0IGNvbW1hbmQgVFAgdG8gYWN0aXZlIG1vZGUgaGVyZS4KKwkJICovCisJCWlmICghaW5wdXQgfHwgY3lhcGEtPm9wZXJhdGlvbmFsKQorCQkJY3lhcGEtPm9wcy0+c2V0X3Bvd2VyX21vZGUoY3lhcGEsCisJCQkJUFdSX01PREVfRlVMTF9BQ1RJVkUsIDApOworCQkvKiBHZW4zIGFsd2F5cyB1c2luZyBwb2xsaW5nIG1vZGUgZm9yIGNvbW1hbmQuICovCisJCWlmIChjeWFwYS0+Z2VuID49IENZQVBBX0dFTjUpCisJCQllbmFibGVfaXJxKGN5YXBhLT5jbGllbnQtPmlycSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBjeWFwYV9kaXNhYmxlX2lycV9mb3JfY21kKHN0cnVjdCBjeWFwYSAqY3lhcGEpCit7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBjeWFwYS0+aW5wdXQ7CisKKwlpZiAoIWlucHV0IHx8ICFpbnB1dC0+dXNlcnMpIHsKKwkJaWYgKGN5YXBhLT5nZW4gPj0gQ1lBUEFfR0VONSkKKwkJCWRpc2FibGVfaXJxKGN5YXBhLT5jbGllbnQtPmlycSk7CisJCWlmICghaW5wdXQgfHwgY3lhcGEtPm9wZXJhdGlvbmFsKQorCQkJY3lhcGEtPm9wcy0+c2V0X3Bvd2VyX21vZGUoY3lhcGEsIFBXUl9NT0RFX09GRiwgMCk7CisJfQorfQorCisvKgorICogY3lhcGFfc2xlZXBfdGltZV90b19wd3JfY21kIGFuZCBjeWFwYV9wd3JfY21kX3RvX3NsZWVwX3RpbWUKKyAqCisgKiBUaGVzZSBhcmUgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGNvbnZlcnQgdG8gYW5kIGZyb20gaW50ZWdlciBpZGxlCisgKiB0aW1lcyBhbmQgcmVnaXN0ZXIgc2V0dGluZ3MgdG8gd3JpdGUgdG8gdGhlIFBvd2VyTW9kZSByZWdpc3Rlci4KKyAqIFRoZSB0cmFja3BhZCBzdXBwb3J0cyBiZXR3ZWVuIDIwbXMgdG8gMTAwMG1zIHNjYW4gaW50ZXJ2YWxzLgorICogVGhlIHRpbWUgd2lsbCBiZSBpbmNyZWFzZWQgaW4gaW5jcmVtZW50cyBvZiAxMG1zIGZyb20gMjBtcyB0byAxMDBtcy4KKyAqIEZyb20gMTAwbXMgdG8gMTAwMG1zLCB0aW1lIHdpbGwgYmUgaW5jcmVhc2VkIGluIGluY3JlbWVudHMgb2YgMjBtcy4KKyAqCisgKiBXaGVuIElkbGVfVGltZSA8IDEwMCwgdGhlIGZvcm1hdCB0byBjb252ZXJ0IElkbGVfVGltZSB0byBJZGxlX0NvbW1hbmQgaXM6CisgKiAgIElkbGVfQ29tbWFuZCA9IElkbGUgVGltZSAvIDEwOworICogV2hlbiBJZGxlX1RpbWUgPj0gMTAwLCB0aGUgZm9ybWF0IHRvIGNvbnZlcnQgSWRsZV9UaW1lIHRvIElkbGVfQ29tbWFuZCBpczoKKyAqICAgSWRsZV9Db21tYW5kID0gSWRsZSBUaW1lIC8gMjAgKyA1OworICovCit1OCBjeWFwYV9zbGVlcF90aW1lX3RvX3B3cl9jbWQodTE2IHNsZWVwX3RpbWUpCit7CisJdTE2IGVuY29kZWRfdGltZTsKKworCXNsZWVwX3RpbWUgPSBjbGFtcF92YWwoc2xlZXBfdGltZSwgMjAsIDEwMDApOworCWVuY29kZWRfdGltZSA9IHNsZWVwX3RpbWUgPCAxMDAgPyBzbGVlcF90aW1lIC8gMTAgOiBzbGVlcF90aW1lIC8gMjAgKyA1OworCXJldHVybiAoZW5jb2RlZF90aW1lIDw8IDIpICYgUFdSX01PREVfTUFTSzsKK30KKwordTE2IGN5YXBhX3B3cl9jbWRfdG9fc2xlZXBfdGltZSh1OCBwd3JfbW9kZSkKK3sKKwl1OCBlbmNvZGVkX3RpbWUgPSBwd3JfbW9kZSA+PiAyOworCisJcmV0dXJuIChlbmNvZGVkX3RpbWUgPCAxMCkgPyBlbmNvZGVkX3RpbWUgKiAxMAorCQkJCSAgIDogKGVuY29kZWRfdGltZSAtIDUpICogMjA7Cit9CisKKy8qIDAgb24gZHJpdmVyIGluaXRpYWxpemUgYW5kIGRldGVjdGVkIHN1Y2Nlc3NmdWxseSwgbmVnYXRpdmUgb24gZmFpbHVyZS4gKi8KK3N0YXRpYyBpbnQgY3lhcGFfaW5pdGlhbGl6ZShzdHJ1Y3QgY3lhcGEgKmN5YXBhKQoreworCWludCBlcnJvciA9IDA7CisKKwljeWFwYS0+c3RhdGUgPSBDWUFQQV9TVEFURV9OT19ERVZJQ0U7CisJY3lhcGEtPmdlbiA9IENZQVBBX0dFTl9VTktOT1dOOworCW11dGV4X2luaXQoJmN5YXBhLT5zdGF0ZV9zeW5jX2xvY2spOworCisJLyoKKwkgKiBTZXQgdG8gaGFyZCBjb2RlIGRlZmF1bHQsIHRoZXkgd2lsbCBiZSB1cGRhdGVkIHdpdGggdHJhY2twYWQgc2V0CisJICogZGVmYXVsdCB2YWx1ZXMgYWZ0ZXIgcHJvYmUgYW5kIGluaXRpYWxpemVkLgorCSAqLworCWN5YXBhLT5zdXNwZW5kX3Bvd2VyX21vZGUgPSBQV1JfTU9ERV9TTEVFUDsKKwljeWFwYS0+c3VzcGVuZF9zbGVlcF90aW1lID0KKwkJY3lhcGFfcHdyX2NtZF90b19zbGVlcF90aW1lKGN5YXBhLT5zdXNwZW5kX3Bvd2VyX21vZGUpOworCisJLyogb3BzLmluaXRpYWxpemUoKSBpcyBhaW1lZCB0byBwcmVwYXJlIGZvciBtb2R1bGUgY29tbXVuaWNhdGlvbnMuICovCisJZXJyb3IgPSBjeWFwYV9nZW4zX29wcy5pbml0aWFsaXplKGN5YXBhKTsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IGN5YXBhX2dlbjVfb3BzLmluaXRpYWxpemUoY3lhcGEpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJZXJyb3IgPSBjeWFwYV9kZXRlY3QoY3lhcGEpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJLyogUG93ZXIgZG93biB0aGUgZGV2aWNlIHVudGlsIHdlIG5lZWQgaXQuICovCisJaWYgKGN5YXBhLT5vcGVyYXRpb25hbCkKKwkJY3lhcGEtPm9wcy0+c2V0X3Bvd2VyX21vZGUoY3lhcGEsIFBXUl9NT0RFX09GRiwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeWFwYV9yZWluaXRpYWxpemUoc3RydWN0IGN5YXBhICpjeWFwYSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY3lhcGEtPmNsaWVudC0+ZGV2OworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gY3lhcGEtPmlucHV0OworCWludCBlcnJvcjsKKworCWlmIChwbV9ydW50aW1lX2VuYWJsZWQoZGV2KSkKKwkJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CisKKwkvKiBBdm9pZCBjb21tYW5kIGZhaWx1cmVzIHdoZW4gVFAgd2FzIGluIE9GRiBzdGF0ZS4gKi8KKwlpZiAoY3lhcGEtPm9wZXJhdGlvbmFsKQorCQljeWFwYS0+b3BzLT5zZXRfcG93ZXJfbW9kZShjeWFwYSwgUFdSX01PREVfRlVMTF9BQ1RJVkUsIDApOworCisJZXJyb3IgPSBjeWFwYV9kZXRlY3QoY3lhcGEpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisKKwlpZiAoIWlucHV0ICYmIGN5YXBhLT5vcGVyYXRpb25hbCkgeworCQllcnJvciA9IGN5YXBhX2NyZWF0ZV9pbnB1dF9kZXYoY3lhcGEpOworCQlpZiAoZXJyb3IpIHsKKwkJCWRldl9lcnIoZGV2LCAiY3JlYXRlIGlucHV0X2RldiBpbnN0YW5jZSBmYWlsZWQ6ICVkXG4iLAorCQkJCQllcnJvcik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworb3V0OgorCWlmICghaW5wdXQgfHwgIWlucHV0LT51c2VycykgeworCQkvKiBSZXNldCB0byBwb3dlciBPRkYgc3RhdGUgdG8gc2F2ZSBwb3dlciB3aGVuIG5vIHVzZXIgb3Blbi4gKi8KKwkJaWYgKGN5YXBhLT5vcGVyYXRpb25hbCkKKwkJCWN5YXBhLT5vcHMtPnNldF9wb3dlcl9tb2RlKGN5YXBhLCBQV1JfTU9ERV9PRkYsIDApOworCX0gZWxzZSBpZiAoIWVycm9yICYmIGN5YXBhLT5vcGVyYXRpb25hbCkgeworCQkvKgorCQkgKiBNYWtlIHN1cmUgb25seSBlbmFibGUgcnVudGltZSBQTSB3aGVuIGRldmljZSBpcworCQkgKiBpbiBvcGVyYXRpb25hbCBtb2RlIGFuZCBpbnB1dC0+dXNlcnMgPiAwLgorCQkgKi8KKwkJcG1fcnVudGltZV9zZXRfYWN0aXZlKGRldik7CisJCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgY3lhcGFfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY3lhcGEgKmN5YXBhID0gZGV2X2lkOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjeWFwYS0+Y2xpZW50LT5kZXY7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCisJCXBtX3dha2V1cF9ldmVudChkZXYsIDApOworCisJLyogSW50ZXJydXB0IGV2ZW50IG1heWJlIGN1YXNlZCBieSBob3N0IGNvbW1hbmQgdG8gdHJhY2twYWQgZGV2aWNlLiAqLworCWlmIChjeWFwYS0+b3BzLT5pcnFfY21kX2hhbmRsZXIoY3lhcGEpKSB7CisJCS8qCisJCSAqIEludGVycnVwdCBldmVudCBtYXliZSBmcm9tIHRyYWNrcGFkIGRldmljZSBpbnB1dCByZXBvcnRpbmcuCisJCSAqLworCQlpZiAoIWN5YXBhLT5pbnB1dCkgeworCQkJLyoKKwkJCSAqIFN0aWxsIGluIHByb2JsaW5nIG9yIGluIGZpcndhcmUgaW1hZ2UKKwkJCSAqIHVkcGF0aW5nIG9yIHJlYWRpbmcuCisJCQkgKi8KKwkJCWN5YXBhLT5vcHMtPnNvcnRfZW1wdHlfb3V0cHV0X2RhdGEoY3lhcGEsCisJCQkJCU5VTEwsIE5VTEwsIE5VTEwpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoIWN5YXBhLT5vcGVyYXRpb25hbCB8fCBjeWFwYS0+b3BzLT5pcnFfaGFuZGxlcihjeWFwYSkpIHsKKwkJCWlmICghbXV0ZXhfdHJ5bG9jaygmY3lhcGEtPnN0YXRlX3N5bmNfbG9jaykpIHsKKwkJCQljeWFwYS0+b3BzLT5zb3J0X2VtcHR5X291dHB1dF9kYXRhKGN5YXBhLAorCQkJCQlOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWN5YXBhX3JlaW5pdGlhbGl6ZShjeWFwYSk7CisJCQltdXRleF91bmxvY2soJmN5YXBhLT5zdGF0ZV9zeW5jX2xvY2spOworCQl9CisJfQorCitvdXQ6CisJcG1fcnVudGltZV9tYXJrX2xhc3RfYnVzeShkZXYpOworCXBtX3J1bnRpbWVfcHV0X3N5bmNfYXV0b3N1c3BlbmQoZGV2KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHN5c2ZzIGludGVyZmFjZQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqLworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIHNzaXplX3QgY3lhcGFfc2hvd19zdXNwZW5kX3NjYW5yYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3lhcGEgKmN5YXBhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdTggcHdyX2NtZCA9IGN5YXBhLT5zdXNwZW5kX3Bvd2VyX21vZGU7CisJdTE2IHNsZWVwX3RpbWU7CisJaW50IGxlbjsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3lhcGEtPnN0YXRlX3N5bmNfbG9jayk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlwd3JfY21kID0gY3lhcGEtPnN1c3BlbmRfcG93ZXJfbW9kZTsKKwlzbGVlcF90aW1lID0gY3lhcGEtPnN1c3BlbmRfc2xlZXBfdGltZTsKKworCW11dGV4X3VubG9jaygmY3lhcGEtPnN0YXRlX3N5bmNfbG9jayk7CisKKwlzd2l0Y2ggKHB3cl9jbWQpIHsKKwljYXNlIFBXUl9NT0RFX0JUTl9PTkxZOgorCQlsZW4gPSBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgQlROX09OTFlfTU9ERV9OQU1FKTsKKwkJYnJlYWs7CisKKwljYXNlIFBXUl9NT0RFX09GRjoKKwkJbGVuID0gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIE9GRl9NT0RFX05BTUUpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWxlbiA9IHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLAorCQkJCWN5YXBhLT5nZW4gPT0gQ1lBUEFfR0VOMyA/CisJCQkJCWN5YXBhX3B3cl9jbWRfdG9fc2xlZXBfdGltZShwd3JfY21kKSA6CisJCQkJCXNsZWVwX3RpbWUpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCBjeWFwYV91cGRhdGVfc3VzcGVuZF9zY2FucmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGN5YXBhICpjeWFwYSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXUxNiBzbGVlcF90aW1lOworCWludCBlcnJvcjsKKworCWVycm9yID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjeWFwYS0+c3RhdGVfc3luY19sb2NrKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmIChzeXNmc19zdHJlcShidWYsIEJUTl9PTkxZX01PREVfTkFNRSkpIHsKKwkJY3lhcGEtPnN1c3BlbmRfcG93ZXJfbW9kZSA9IFBXUl9NT0RFX0JUTl9PTkxZOworCX0gZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCBPRkZfTU9ERV9OQU1FKSkgeworCQljeWFwYS0+c3VzcGVuZF9wb3dlcl9tb2RlID0gUFdSX01PREVfT0ZGOworCX0gZWxzZSBpZiAoIWtzdHJ0b3UxNihidWYsIDEwLCAmc2xlZXBfdGltZSkpIHsKKwkJY3lhcGEtPnN1c3BlbmRfc2xlZXBfdGltZSA9IG1heF90KHUxNiwgc2xlZXBfdGltZSwgMTAwMCk7CisJCWN5YXBhLT5zdXNwZW5kX3Bvd2VyX21vZGUgPQorCQkJY3lhcGFfc2xlZXBfdGltZV90b19wd3JfY21kKGN5YXBhLT5zdXNwZW5kX3NsZWVwX3RpbWUpOworCX0gZWxzZSB7CisJCWNvdW50ID0gLUVJTlZBTDsKKwl9CisKKwltdXRleF91bmxvY2soJmN5YXBhLT5zdGF0ZV9zeW5jX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoc3VzcGVuZF9zY2FucmF0ZV9tcywgU19JUlVHT3xTX0lXVVNSLAorCQkgICBjeWFwYV9zaG93X3N1c3BlbmRfc2NhbnJhdGUsCisJCSAgIGN5YXBhX3VwZGF0ZV9zdXNwZW5kX3NjYW5yYXRlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmN5YXBhX3Bvd2VyX3dha2V1cF9lbnRyaWVzW10gPSB7CisJJmRldl9hdHRyX3N1c3BlbmRfc2NhbnJhdGVfbXMuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgY3lhcGFfcG93ZXJfd2FrZXVwX2dyb3VwID0geworCS5uYW1lID0gcG93ZXJfZ3JvdXBfbmFtZSwKKwkuYXR0cnMgPSBjeWFwYV9wb3dlcl93YWtldXBfZW50cmllcywKK307CisKK3N0YXRpYyB2b2lkIGN5YXBhX3JlbW92ZV9wb3dlcl93YWtldXBfZ3JvdXAodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY3lhcGEgKmN5YXBhID0gZGF0YTsKKworCXN5c2ZzX3VubWVyZ2VfZ3JvdXAoJmN5YXBhLT5jbGllbnQtPmRldi5rb2JqLAorCQkJCSZjeWFwYV9wb3dlcl93YWtldXBfZ3JvdXApOworfQorCitzdGF0aWMgaW50IGN5YXBhX3ByZXBhcmVfd2FrZXVwX2NvbnRyb2xzKHN0cnVjdCBjeWFwYSAqY3lhcGEpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGN5YXBhLT5jbGllbnQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmNsaWVudC0+ZGV2OworCWludCBlcnJvcjsKKworCWlmIChkZXZpY2VfY2FuX3dha2V1cChkZXYpKSB7CisJCWVycm9yID0gc3lzZnNfbWVyZ2VfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosCisJCQkJCSZjeWFwYV9wb3dlcl93YWtldXBfZ3JvdXApOworCQlpZiAoZXJyb3IpIHsKKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFkZCBwb3dlciB3YWtldXAgZ3JvdXA6ICVkXG4iLAorCQkJCWVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCWVycm9yID0gZGV2bV9hZGRfYWN0aW9uKGRldiwKKwkJCQljeWFwYV9yZW1vdmVfcG93ZXJfd2FrZXVwX2dyb3VwLCBjeWFwYSk7CisJCWlmIChlcnJvcikgeworCQkJY3lhcGFfcmVtb3ZlX3Bvd2VyX3dha2V1cF9ncm91cChjeWFwYSk7CisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQgcG93ZXIgY2xlYW51cCBhY3Rpb246ICVkXG4iLAorCQkJCWVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGN5YXBhX3ByZXBhcmVfd2FrZXVwX2NvbnRyb2xzKHN0cnVjdCBjeWFwYSAqY3lhcGEpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBzc2l6ZV90IGN5YXBhX3Nob3dfcnRfc3VzcGVuZF9zY2FucmF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IGN5YXBhICpjeWFwYSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXU4IHB3cl9jbWQ7CisJdTE2IHNsZWVwX3RpbWU7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmN5YXBhLT5zdGF0ZV9zeW5jX2xvY2spOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJcHdyX2NtZCA9IGN5YXBhLT5ydW50aW1lX3N1c3BlbmRfcG93ZXJfbW9kZTsKKwlzbGVlcF90aW1lID0gY3lhcGEtPnJ1bnRpbWVfc3VzcGVuZF9zbGVlcF90aW1lOworCisJbXV0ZXhfdW5sb2NrKCZjeWFwYS0+c3RhdGVfc3luY19sb2NrKTsKKworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwKKwkJCSBjeWFwYS0+Z2VuID09IENZQVBBX0dFTjMgPworCQkJCWN5YXBhX3B3cl9jbWRfdG9fc2xlZXBfdGltZShwd3JfY21kKSA6CisJCQkJc2xlZXBfdGltZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGN5YXBhX3VwZGF0ZV9ydF9zdXNwZW5kX3NjYW5yYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGN5YXBhICpjeWFwYSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXUxNiB0aW1lOworCWludCBlcnJvcjsKKworCWlmIChidWYgPT0gTlVMTCB8fCBjb3VudCA9PSAwIHx8IGtzdHJ0b3UxNihidWYsIDEwLCAmdGltZSkpIHsKKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIHJ1bnRpbWUgc3VzcGVuZCBzY2FucmF0ZSBtcyBwYXJhbWV0ZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKgorCSAqIFdoZW4gdGhlIHN1c3BlbmQgc2NhbnJhdGUgaXMgY2hhbmdlZCwgcG1fcnVudGltZV9nZXQgdG8gcmVzdW1lCisJICogYSBwb3RlbnRpYWxseSBzdXNwZW5kZWQgZGV2aWNlLCB1cGRhdGUgdG8gdGhlIG5ldyBwd3JfY21kCisJICogYW5kIHRoZW4gcG1fcnVudGltZV9wdXQgdG8gc3VzcGVuZCBpbnRvIHRoZSBuZXcgcG93ZXIgbW9kZS4KKwkgKi8KKwlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7CisKKwllcnJvciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3lhcGEtPnN0YXRlX3N5bmNfbG9jayk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwljeWFwYS0+cnVudGltZV9zdXNwZW5kX3NsZWVwX3RpbWUgPSBtYXhfdCh1MTYsIHRpbWUsIDEwMDApOworCWN5YXBhLT5ydW50aW1lX3N1c3BlbmRfcG93ZXJfbW9kZSA9CisJCWN5YXBhX3NsZWVwX3RpbWVfdG9fcHdyX2NtZChjeWFwYS0+cnVudGltZV9zdXNwZW5kX3NsZWVwX3RpbWUpOworCisJbXV0ZXhfdW5sb2NrKCZjeWFwYS0+c3RhdGVfc3luY19sb2NrKTsKKworCXBtX3J1bnRpbWVfcHV0X3N5bmNfYXV0b3N1c3BlbmQoZGV2KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHJ1bnRpbWVfc3VzcGVuZF9zY2FucmF0ZV9tcywgU19JUlVHT3xTX0lXVVNSLAorCQkgICBjeWFwYV9zaG93X3J0X3N1c3BlbmRfc2NhbnJhdGUsCisJCSAgIGN5YXBhX3VwZGF0ZV9ydF9zdXNwZW5kX3NjYW5yYXRlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmN5YXBhX3Bvd2VyX3J1bnRpbWVfZW50cmllc1tdID0geworCSZkZXZfYXR0cl9ydW50aW1lX3N1c3BlbmRfc2NhbnJhdGVfbXMuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgY3lhcGFfcG93ZXJfcnVudGltZV9ncm91cCA9IHsKKwkubmFtZSA9IHBvd2VyX2dyb3VwX25hbWUsCisJLmF0dHJzID0gY3lhcGFfcG93ZXJfcnVudGltZV9lbnRyaWVzLAorfTsKKworc3RhdGljIHZvaWQgY3lhcGFfcmVtb3ZlX3Bvd2VyX3J1bnRpbWVfZ3JvdXAodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY3lhcGEgKmN5YXBhID0gZGF0YTsKKworCXN5c2ZzX3VubWVyZ2VfZ3JvdXAoJmN5YXBhLT5jbGllbnQtPmRldi5rb2JqLAorCQkJCSZjeWFwYV9wb3dlcl9ydW50aW1lX2dyb3VwKTsKK30KKworc3RhdGljIGludCBjeWFwYV9zdGFydF9ydW50aW1lKHN0cnVjdCBjeWFwYSAqY3lhcGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmN5YXBhLT5jbGllbnQtPmRldjsKKwlpbnQgZXJyb3I7CisKKwljeWFwYS0+cnVudGltZV9zdXNwZW5kX3Bvd2VyX21vZGUgPSBQV1JfTU9ERV9JRExFOworCWN5YXBhLT5ydW50aW1lX3N1c3BlbmRfc2xlZXBfdGltZSA9CisJCWN5YXBhX3B3cl9jbWRfdG9fc2xlZXBfdGltZShjeWFwYS0+cnVudGltZV9zdXNwZW5kX3Bvd2VyX21vZGUpOworCisJZXJyb3IgPSBzeXNmc19tZXJnZV9ncm91cCgmZGV2LT5rb2JqLCAmY3lhcGFfcG93ZXJfcnVudGltZV9ncm91cCk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2LAorCQkJImZhaWxlZCB0byBjcmVhdGUgcG93ZXIgcnVudGltZSBncm91cDogJWRcbiIsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWVycm9yID0gZGV2bV9hZGRfYWN0aW9uKGRldiwgY3lhcGFfcmVtb3ZlX3Bvd2VyX3J1bnRpbWVfZ3JvdXAsIGN5YXBhKTsKKwlpZiAoZXJyb3IpIHsKKwkJY3lhcGFfcmVtb3ZlX3Bvd2VyX3J1bnRpbWVfZ3JvdXAoY3lhcGEpOworCQlkZXZfZXJyKGRldiwKKwkJCSJmYWlsZWQgdG8gYWRkIHBvd2VyIHJ1bnRpbWUgY2xlYW51cCBhY3Rpb246ICVkXG4iLAorCQkJZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJLyogcnVudGltZSBpcyBlbmFibGVkIHVudGlsIGRldmljZSBpcyBvcGVyYXRpb25hbCBhbmQgb3BlbmVkLiAqLworCXBtX3J1bnRpbWVfc2V0X3N1c3BlbmRlZChkZXYpOworCXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKGRldik7CisJcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoZGV2LCBBVVRPU1VTUEVORF9ERUxBWSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBjeWFwYV9zdGFydF9ydW50aW1lKHN0cnVjdCBjeWFwYSAqY3lhcGEpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNICovCisKK3N0YXRpYyBzc2l6ZV90IGN5YXBhX3Nob3dfZm1fdmVyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IGN5YXBhICpjeWFwYSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJZXJyb3IgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmN5YXBhLT5zdGF0ZV9zeW5jX2xvY2spOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCWVycm9yID0gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWQuJWRcbiIsIGN5YXBhLT5md19tYWpfdmVyLAorCQkJIGN5YXBhLT5md19taW5fdmVyKTsKKwltdXRleF91bmxvY2soJmN5YXBhLT5zdGF0ZV9zeW5jX2xvY2spOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHNzaXplX3QgY3lhcGFfc2hvd19wcm9kdWN0X2lkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGN5YXBhICpjeWFwYSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBzaXplOworCWludCBlcnJvcjsKKworCWVycm9yID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjeWFwYS0+c3RhdGVfc3luY19sb2NrKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwlzaXplID0gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGN5YXBhLT5wcm9kdWN0X2lkKTsKKwltdXRleF91bmxvY2soJmN5YXBhLT5zdGF0ZV9zeW5jX2xvY2spOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50IGN5YXBhX2Zpcm13YXJlKHN0cnVjdCBjeWFwYSAqY3lhcGEsIGNvbnN0IGNoYXIgKmZ3X25hbWUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmN5YXBhLT5jbGllbnQtPmRldjsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCBlcnJvcjsKKworCWVycm9yID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWUsIGRldik7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2LCAiQ291bGQgbm90IGxvYWQgZmlybXdhcmUgZnJvbSAlczogJWRcbiIsCisJCQlmd19uYW1lLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwllcnJvciA9IGN5YXBhLT5vcHMtPmNoZWNrX2Z3KGN5YXBhLCBmdyk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2LCAiSW52YWxpZCBDWUFQQSBmaXJtd2FyZSBpbWFnZTogJXNcbiIsCisJCQkJZndfbmFtZSk7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKgorCSAqIFJlc3VtZSB0aGUgcG90ZW50aWFsbHkgc3VzcGVuZGVkIGRldmljZSBiZWNhdXNlIGRvaW5nIEZXCisJICogdXBkYXRlIG9uIGEgZGV2aWNlIG5vdCBpbiB0aGUgRlVMTCBtb2RlIGhhcyBhIGNoYW5jZSB0bworCSAqIGZhaWwuCisJICovCisJcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOworCisJLyogUmVxdWlyZSBJUlEgc3VwcG9ydCBmb3IgZmlybXdhcmUgdXBkYXRlIGNvbW1hbmRzLiAqLworCWN5YXBhX2VuYWJsZV9pcnFfZm9yX2NtZChjeWFwYSk7CisKKwllcnJvciA9IGN5YXBhLT5vcHMtPmJsX2VudGVyKGN5YXBhKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycihkZXYsICJibF9lbnRlciBmYWlsZWQsICVkXG4iLCBlcnJvcik7CisJCWdvdG8gZXJyX2RldGVjdDsKKwl9CisKKwllcnJvciA9IGN5YXBhLT5vcHMtPmJsX2FjdGl2YXRlKGN5YXBhKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycihkZXYsICJibF9hY3RpdmF0ZSBmYWlsZWQsICVkXG4iLCBlcnJvcik7CisJCWdvdG8gZXJyX2RldGVjdDsKKwl9CisKKwllcnJvciA9IGN5YXBhLT5vcHMtPmJsX2luaXRpYXRlKGN5YXBhLCBmdyk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2LCAiYmxfaW5pdGlhdGUgZmFpbGVkLCAlZFxuIiwgZXJyb3IpOworCQlnb3RvIGVycl9kZXRlY3Q7CisJfQorCisJZXJyb3IgPSBjeWFwYS0+b3BzLT51cGRhdGVfZncoY3lhcGEsIGZ3KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycihkZXYsICJ1cGRhdGVfZncgZmFpbGVkLCAlZFxuIiwgZXJyb3IpOworCQlnb3RvIGVycl9kZXRlY3Q7CisJfQorCitlcnJfZGV0ZWN0OgorCWN5YXBhX2Rpc2FibGVfaXJxX2Zvcl9jbWQoY3lhcGEpOworCXBtX3J1bnRpbWVfcHV0X25vaWRsZShkZXYpOworCitkb25lOgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHNzaXplX3QgY3lhcGFfdXBkYXRlX2Z3X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGN5YXBhICpjeWFwYSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWNoYXIgZndfbmFtZVtOQU1FX01BWF07CisJaW50IHJldCwgZXJyb3I7CisKKwlpZiAoY291bnQgPj0gTkFNRV9NQVgpIHsKKwkJZGV2X2VycihkZXYsICJGaWxlIG5hbWUgdG9vIGxvbmdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZW1jcHkoZndfbmFtZSwgYnVmLCBjb3VudCk7CisJaWYgKGZ3X25hbWVbY291bnQgLSAxXSA9PSAnXG4nKQorCQlmd19uYW1lW2NvdW50IC0gMV0gPSAnXDAnOworCWVsc2UKKwkJZndfbmFtZVtjb3VudF0gPSAnXDAnOworCisJaWYgKGN5YXBhLT5pbnB1dCkgeworCQkvKgorCQkgKiBGb3JjZSB0aGUgaW5wdXQgZGV2aWNlIHRvIGJlIHJlZ2lzdGVyZWQgYWZ0ZXIgdGhlIGZpcm13YXJlCisJCSAqIGltYWdlIGlzIHVwZGF0ZWQsIHNvIGlmIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlcnMgdXBkYXRlZAorCQkgKiBpbiB0aGUgbmV3IGZpcm13YXJlIGltYWdlIGNhbiB0YWtlbiBlZmZlY3QgaW1tZWRpYXRlbHkuCisJCSAqLworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShjeWFwYS0+aW5wdXQpOworCQljeWFwYS0+aW5wdXQgPSBOVUxMOworCX0KKworCWVycm9yID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjeWFwYS0+c3RhdGVfc3luY19sb2NrKTsKKwlpZiAoZXJyb3IpIHsKKwkJLyoKKwkJICogV2hhdGV2ZXIsIGRvIHJlaW5pdGlhbGl6ZSB0byB0cnkgdG8gcmVjb3ZlciBUUCBzdGF0ZSB0bworCQkgKiBwcmV2aW91cyBzdGF0ZSBqdXN0IGFzIGl0IGVudGVyZWQgZncgdXBkYXRlIGVudHJhbmNlLgorCQkgKi8KKwkJY3lhcGFfcmVpbml0aWFsaXplKGN5YXBhKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWVycm9yID0gY3lhcGFfZmlybXdhcmUoY3lhcGEsIGZ3X25hbWUpOworCWlmIChlcnJvcikKKwkJZGV2X2VycihkZXYsICJmaXJtd2FyZSB1cGRhdGUgZmFpbGVkOiAlZFxuIiwgZXJyb3IpOworCWVsc2UKKwkJZGV2X2RiZyhkZXYsICJmaXJtd2FyZSB1cGRhdGUgc3VjY2Vzc2Z1bGx5IGRvbmUuXG4iKTsKKworCS8qCisJICogUmVkZXRlY3QgdHJhY2twYWQgZGV2aWNlIHN0YXRlcyBiZWNhdXNlIGZpcm13YXJlIHVwZGF0ZSBwcm9jZXNzCisJICogd2lsbCByZXNldCB0cmFja3BhZCBkZXZpY2UgaW50byBib290bG9hZGVyIG1vZGUuCisJICovCisJcmV0ID0gY3lhcGFfcmVpbml0aWFsaXplKGN5YXBhKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZGV0ZWN0IGFmdGVyIHVwZGF0ZWQ6ICVkXG4iLCByZXQpOworCQllcnJvciA9IGVycm9yID8gZXJyb3IgOiByZXQ7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZjeWFwYS0+c3RhdGVfc3luY19sb2NrKTsKKworCXJldHVybiBlcnJvciA/IGVycm9yIDogY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGN5YXBhX2NhbGlicmF0ZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBjeWFwYSAqY3lhcGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3lhcGEtPnN0YXRlX3N5bmNfbG9jayk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAoY3lhcGEtPm9wZXJhdGlvbmFsKSB7CisJCWN5YXBhX2VuYWJsZV9pcnFfZm9yX2NtZChjeWFwYSk7CisJCWVycm9yID0gY3lhcGEtPm9wcy0+Y2FsaWJyYXRlX3N0b3JlKGRldiwgYXR0ciwgYnVmLCBjb3VudCk7CisJCWN5YXBhX2Rpc2FibGVfaXJxX2Zvcl9jbWQoY3lhcGEpOworCX0gZWxzZSB7CisJCWVycm9yID0gLUVCVVNZOyAgLyogU3RpbGwgcnVubmluZyBpbiBib290bG9hZGVyIG1vZGUuICovCisJfQorCisJbXV0ZXhfdW5sb2NrKCZjeWFwYS0+c3RhdGVfc3luY19sb2NrKTsKKwlyZXR1cm4gZXJyb3IgPCAwID8gZXJyb3IgOiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgY3lhcGFfc2hvd19iYXNlbGluZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3lhcGEgKmN5YXBhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3NpemVfdCBlcnJvcjsKKworCWVycm9yID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjeWFwYS0+c3RhdGVfc3luY19sb2NrKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWlmIChjeWFwYS0+b3BlcmF0aW9uYWwpIHsKKwkJY3lhcGFfZW5hYmxlX2lycV9mb3JfY21kKGN5YXBhKTsKKwkJZXJyb3IgPSBjeWFwYS0+b3BzLT5zaG93X2Jhc2VsaW5lKGRldiwgYXR0ciwgYnVmKTsKKwkJY3lhcGFfZGlzYWJsZV9pcnFfZm9yX2NtZChjeWFwYSk7CisJfSBlbHNlIHsKKwkJZXJyb3IgPSAtRUJVU1k7ICAvKiBTdGlsbCBydW5uaW5nIGluIGJvb3Rsb2FkZXIgbW9kZS4gKi8KKwl9CisKKwltdXRleF91bmxvY2soJmN5YXBhLT5zdGF0ZV9zeW5jX2xvY2spOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGNoYXIgKmN5YXBhX3N0YXRlX3RvX3N0cmluZyhzdHJ1Y3QgY3lhcGEgKmN5YXBhKQoreworCXN3aXRjaCAoY3lhcGEtPnN0YXRlKSB7CisJY2FzZSBDWUFQQV9TVEFURV9CTF9CVVNZOgorCQlyZXR1cm4gImJvb3Rsb2FkZXIgYnVzeSI7CisJY2FzZSBDWUFQQV9TVEFURV9CTF9JRExFOgorCQlyZXR1cm4gImJvb3Rsb2FkZXIgaWRsZSI7CisJY2FzZSBDWUFQQV9TVEFURV9CTF9BQ1RJVkU6CisJCXJldHVybiAiYm9vdGxvYWRlciBhY3RpdmUiOworCWNhc2UgQ1lBUEFfU1RBVEVfR0VONV9CTDoKKwkJcmV0dXJuICJib290bG9hZGVyIjsKKwljYXNlIENZQVBBX1NUQVRFX09QOgorCWNhc2UgQ1lBUEFfU1RBVEVfR0VONV9BUFA6CisJCXJldHVybiAib3BlcmF0aW9uYWwiOyAgLyogTm9ybWFsIHZhbGlkIHN0YXRlLiAqLworCWRlZmF1bHQ6CisJCXJldHVybiAiaW52YWxpZCBtb2RlIjsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IGN5YXBhX3Nob3dfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3lhcGEgKmN5YXBhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHNpemU7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmN5YXBhLT5zdGF0ZV9zeW5jX2xvY2spOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJc2l6ZSA9IHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgImdlbiVkICVzXG4iLAorCQkJY3lhcGEtPmdlbiwgY3lhcGFfc3RhdGVfdG9fc3RyaW5nKGN5YXBhKSk7CisKKwltdXRleF91bmxvY2soJmN5YXBhLT5zdGF0ZV9zeW5jX2xvY2spOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZmlybXdhcmVfdmVyc2lvbiwgU19JUlVHTywgY3lhcGFfc2hvd19mbV92ZXIsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHByb2R1Y3RfaWQsIFNfSVJVR08sIGN5YXBhX3Nob3dfcHJvZHVjdF9pZCwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIodXBkYXRlX2Z3LCBTX0lXVVNSLCBOVUxMLCBjeWFwYV91cGRhdGVfZndfc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKGJhc2VsaW5lLCBTX0lSVUdPLCBjeWFwYV9zaG93X2Jhc2VsaW5lLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjYWxpYnJhdGUsIFNfSVdVU1IsIE5VTEwsIGN5YXBhX2NhbGlicmF0ZV9zdG9yZSk7CitzdGF0aWMgREVWSUNFX0FUVFIobW9kZSwgU19JUlVHTywgY3lhcGFfc2hvd19tb2RlLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmN5YXBhX3N5c2ZzX2VudHJpZXNbXSA9IHsKKwkmZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbi5hdHRyLAorCSZkZXZfYXR0cl9wcm9kdWN0X2lkLmF0dHIsCisJJmRldl9hdHRyX3VwZGF0ZV9mdy5hdHRyLAorCSZkZXZfYXR0cl9iYXNlbGluZS5hdHRyLAorCSZkZXZfYXR0cl9jYWxpYnJhdGUuYXR0ciwKKwkmZGV2X2F0dHJfbW9kZS5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBjeWFwYV9zeXNmc19ncm91cCA9IHsKKwkuYXR0cnMgPSBjeWFwYV9zeXNmc19lbnRyaWVzLAorfTsKKworc3RhdGljIHZvaWQgY3lhcGFfcmVtb3ZlX3N5c2ZzX2dyb3VwKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGN5YXBhICpjeWFwYSA9IGRhdGE7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmN5YXBhLT5jbGllbnQtPmRldi5rb2JqLCAmY3lhcGFfc3lzZnNfZ3JvdXApOworfQorCiBzdGF0aWMgaW50IGN5YXBhX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKIAlzdHJ1Y3QgY3lhcGEgKmN5YXBhOwogCXU4IGFkYXB0ZXJfZnVuYzsKKwl1bmlvbiBpMmNfc21idXNfZGF0YSBkdW1teTsKIAlpbnQgZXJyb3I7CiAKIAlhZGFwdGVyX2Z1bmMgPSBjeWFwYV9jaGVja19hZGFwdGVyX2Z1bmN0aW9uYWxpdHkoY2xpZW50KTsKQEAgLTg1NiwzOCArMTE5MCw1NCBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKKwkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc29tZXRoaW5nIGF0IHRoaXMgYWRkcmVzcyAqLworCWlmIChpMmNfc21idXNfeGZlcihjbGllbnQtPmFkYXB0ZXIsIGNsaWVudC0+YWRkciwgMCwKKwkJCUkyQ19TTUJVU19SRUFELCAwLCBJMkNfU01CVVNfQllURSwgJmR1bW15KSA8IDApCisJCXJldHVybiAtRU5PREVWOworCiAJY3lhcGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IGN5YXBhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjeWFwYSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljeWFwYS0+Z2VuID0gQ1lBUEFfR0VOMzsKLQljeWFwYS0+Y2xpZW50ID0gY2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGN5YXBhKTsKLQlzcHJpbnRmKGN5YXBhLT5waHlzLCAiaTJjLSVkLSUwNHgvaW5wdXQwIiwgY2xpZW50LT5hZGFwdGVyLT5uciwKLQkJY2xpZW50LT5hZGRyKTsKLQogCS8qIGkyYyBpc24ndCBzdXBwb3J0ZWQsIHVzZSBzbWJ1cyAqLwogCWlmIChhZGFwdGVyX2Z1bmMgPT0gQ1lBUEFfQURBUFRFUl9GVU5DX1NNQlVTKQogCQljeWFwYS0+c21idXMgPSB0cnVlOwogCi0JY3lhcGEtPnN0YXRlID0gQ1lBUEFfU1RBVEVfTk9fREVWSUNFOworCWN5YXBhLT5jbGllbnQgPSBjbGllbnQ7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgY3lhcGEpOworCXNwcmludGYoY3lhcGEtPnBoeXMsICJpMmMtJWQtJTA0eC9pbnB1dDAiLCBjbGllbnQtPmFkYXB0ZXItPm5yLAorCQljbGllbnQtPmFkZHIpOwogCi0JZXJyb3IgPSBjeWFwYV9jaGVja19pc19vcGVyYXRpb25hbChjeWFwYSk7CisJZXJyb3IgPSBjeWFwYV9pbml0aWFsaXplKGN5YXBhKTsKIAlpZiAoZXJyb3IpIHsKLQkJZGV2X2VycihkZXYsICJkZXZpY2Ugbm90IG9wZXJhdGlvbmFsLCAlZFxuIiwgZXJyb3IpOworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBkZXRlY3QgYW5kIGluaXRpYWxpemUgdHAgZGV2aWNlLlxuIik7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQkvKiBQb3dlciBkb3duIHRoZSBkZXZpY2UgdW50aWwgd2UgbmVlZCBpdCAqLwotCWVycm9yID0gY3lhcGFfc2V0X3Bvd2VyX21vZGUoY3lhcGEsIFBXUl9NT0RFX09GRik7CisJZXJyb3IgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZjeWFwYV9zeXNmc19ncm91cCk7CiAJaWYgKGVycm9yKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHF1aWVzY2UgdGhlIGRldmljZTogJWRcbiIsIGVycm9yKTsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGVudHJpZXM6ICVkXG4iLCBlcnJvcik7CiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQllcnJvciA9IGN5YXBhX2NyZWF0ZV9pbnB1dF9kZXYoY3lhcGEpOwotCWlmIChlcnJvcikKKwllcnJvciA9IGRldm1fYWRkX2FjdGlvbihkZXYsIGN5YXBhX3JlbW92ZV9zeXNmc19ncm91cCwgY3lhcGEpOworCWlmIChlcnJvcikgeworCQljeWFwYV9yZW1vdmVfc3lzZnNfZ3JvdXAoY3lhcGEpOworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQgc3lzZnMgY2xlYW51cCBhY3Rpb246ICVkXG4iLCBlcnJvcik7CiAJCXJldHVybiBlcnJvcjsKKwl9CisKKwllcnJvciA9IGN5YXBhX3ByZXBhcmVfd2FrZXVwX2NvbnRyb2xzKGN5YXBhKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcHJlcGFyZSB3YWtldXAgY29udHJvbHM6ICVkXG4iLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwllcnJvciA9IGN5YXBhX3N0YXJ0X3J1bnRpbWUoY3lhcGEpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzdGFydCBwbV9ydW50aW1lOiAlZFxuIiwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQogCiAJZXJyb3IgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGRldiwgY2xpZW50LT5pcnEsCiAJCQkJCSAgTlVMTCwgY3lhcGFfaXJxLApAQCAtOTAxLDExICsxMjUxLDE4IEBACiAJLyogRGlzYWJsZSBJUlEgdW50aWwgdGhlIGRldmljZSBpcyBvcGVuZWQgKi8KIAlkaXNhYmxlX2lycShjbGllbnQtPmlycSk7CiAKLQkvKiBSZWdpc3RlciB0aGUgZGV2aWNlIGluIGlucHV0IHN1YnN5c3RlbSAqLwotCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGN5YXBhLT5pbnB1dCk7Ci0JaWYgKGVycm9yKSB7Ci0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZTogJWRcbiIsIGVycm9yKTsKLQkJcmV0dXJuIGVycm9yOworCS8qCisJICogUmVnaXN0ZXIgdGhlIGRldmljZSBpbiB0aGUgaW5wdXQgc3Vic3lzdGVtIHdoZW4gaXQncyBvcGVyYXRpb25hbC4KKwkgKiBPdGhlcndpc2UsIGtlZXAgaW4gdGhpcyBkcml2ZXIsIHNvIGl0IGNhbiBiZSBiZSByZWNvdmVyZWQgb3IgdXBkYXRlZAorCSAqIHRocm91Z2ggdGhlIHN5c2ZzIG1vZGUgYW5kIHVwZGF0ZV9mdyBpbnRlcmZhY2VzIGJ5IHVzZXIgb3IgYXBwcy4KKwkgKi8KKwlpZiAoY3lhcGEtPm9wZXJhdGlvbmFsKSB7CisJCWVycm9yID0gY3lhcGFfY3JlYXRlX2lucHV0X2RldihjeWFwYSk7CisJCWlmIChlcnJvcikgeworCQkJZGV2X2VycihkZXYsICJjcmVhdGUgaW5wdXRfZGV2IGluc3RhbmNlIGZhaWxlZDogJWRcbiIsCisJCQkJCWVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtOTE1LDMyICsxMjcyLDQwIEBACiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgY3lhcGEgKmN5YXBhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXQgPSBjeWFwYS0+aW5wdXQ7CiAJdTggcG93ZXJfbW9kZTsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5wdXQtPm11dGV4KTsKKwllcnJvciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmY3lhcGEtPnN0YXRlX3N5bmNfbG9jayk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKKwkvKgorCSAqIFJ1bnRpbWUgUE0gaXMgZW5hYmxlIG9ubHkgd2hlbiBkZXZpY2UgaXMgaW4gb3BlcmF0aW9uYWwgbW9kZSBhbmQKKwkgKiB1c2VycyBpbiB1c2UsIHNvIG5lZWQgY2hlY2sgaXQgYmVmb3JlIGRpc2FibGUgaXQgdG8KKwkgKiBhdm9pZCB1bmJhbGFuY2Ugd2FybmluZy4KKwkgKi8KKwlpZiAocG1fcnVudGltZV9lbmFibGVkKGRldikpCisJCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOwogCWRpc2FibGVfaXJxKGNsaWVudC0+aXJxKTsKIAogCS8qCiAJICogU2V0IHRyYWNrcGFkIGRldmljZSB0byBpZGxlIG1vZGUgaWYgd2FrZXVwIGlzIGFsbG93ZWQsCiAJICogb3RoZXJ3aXNlIHR1cm4gb2ZmLgogCSAqLwotCXBvd2VyX21vZGUgPSBkZXZpY2VfbWF5X3dha2V1cChkZXYpID8gUFdSX01PREVfSURMRQotCQkJCQkgICAgOiBQV1JfTU9ERV9PRkY7Ci0JZXJyb3IgPSBjeWFwYV9zZXRfcG93ZXJfbW9kZShjeWFwYSwgcG93ZXJfbW9kZSk7Ci0JaWYgKGVycm9yKQotCQlkZXZfZXJyKGRldiwgInJlc3VtZTogc2V0IHBvd2VyIG1vZGUgdG8gJWQgZmFpbGVkOiAlZFxuIiwKLQkJCSBwb3dlcl9tb2RlLCBlcnJvcik7CisJaWYgKGN5YXBhLT5vcGVyYXRpb25hbCkgeworCQlwb3dlcl9tb2RlID0gZGV2aWNlX21heV93YWtldXAoZGV2KSA/IGN5YXBhLT5zdXNwZW5kX3Bvd2VyX21vZGUKKwkJCQkJCSAgICA6IFBXUl9NT0RFX09GRjsKKwkJZXJyb3IgPSBjeWFwYS0+b3BzLT5zZXRfcG93ZXJfbW9kZShjeWFwYSwgcG93ZXJfbW9kZSwKKwkJCQljeWFwYS0+c3VzcGVuZF9zbGVlcF90aW1lKTsKKwkJaWYgKGVycm9yKQorCQkJZGV2X2VycihkZXYsICJzdXNwZW5kIHNldCBwb3dlciBtb2RlIGZhaWxlZDogJWRcbiIsCisJCQkJCWVycm9yKTsKKwl9CiAKIAlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSkKIAkJY3lhcGEtPmlycV93YWtlID0gKGVuYWJsZV9pcnFfd2FrZShjbGllbnQtPmlycSkgPT0gMCk7CiAKLQltdXRleF91bmxvY2soJmlucHV0LT5tdXRleCk7Ci0KKwltdXRleF91bmxvY2soJmN5YXBhLT5zdGF0ZV9zeW5jX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC05NDgsMjkgKzEzMTMsNTYgQEAKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBjeWFwYSAqY3lhcGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGN5YXBhLT5pbnB1dDsKLQl1OCBwb3dlcl9tb2RlOwogCWludCBlcnJvcjsKIAotCW11dGV4X2xvY2soJmlucHV0LT5tdXRleCk7CisJbXV0ZXhfbG9jaygmY3lhcGEtPnN0YXRlX3N5bmNfbG9jayk7CiAKLQlpZiAoZGV2aWNlX21heV93YWtldXAoZGV2KSAmJiBjeWFwYS0+aXJxX3dha2UpCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikgJiYgY3lhcGEtPmlycV93YWtlKSB7CiAJCWRpc2FibGVfaXJxX3dha2UoY2xpZW50LT5pcnEpOworCQljeWFwYS0+aXJxX3dha2UgPSBmYWxzZTsKKwl9CiAKLQlwb3dlcl9tb2RlID0gaW5wdXQtPnVzZXJzID8gUFdSX01PREVfRlVMTF9BQ1RJVkUgOiBQV1JfTU9ERV9PRkY7Ci0JZXJyb3IgPSBjeWFwYV9zZXRfcG93ZXJfbW9kZShjeWFwYSwgUFdSX01PREVfRlVMTF9BQ1RJVkUpOworCS8qIFVwZGF0ZSBkZXZpY2Ugc3RhdGVzIGFuZCBydW50aW1lIFBNIHN0YXRlcy4gKi8KKwllcnJvciA9IGN5YXBhX3JlaW5pdGlhbGl6ZShjeWFwYSk7CiAJaWYgKGVycm9yKQotCQlkZXZfd2FybihkZXYsICJyZXN1bWU6IHNldCBwb3dlciBtb2RlIHRvICVkIGZhaWxlZDogJWRcbiIsCi0JCQkgcG93ZXJfbW9kZSwgZXJyb3IpOworCQlkZXZfd2FybihkZXYsICJmYWlsZWQgdG8gcmVpbml0aWFsaXplIFRQIGRldmljZTogJWRcbiIsIGVycm9yKTsKIAogCWVuYWJsZV9pcnEoY2xpZW50LT5pcnEpOwogCi0JbXV0ZXhfdW5sb2NrKCZpbnB1dC0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmY3lhcGEtPnN0YXRlX3N5bmNfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgY3lhcGFfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY3lhcGEgKmN5YXBhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBjeWFwYS0+b3BzLT5zZXRfcG93ZXJfbW9kZShjeWFwYSwKKwkJCWN5YXBhLT5ydW50aW1lX3N1c3BlbmRfcG93ZXJfbW9kZSwKKwkJCWN5YXBhLT5ydW50aW1lX3N1c3BlbmRfc2xlZXBfdGltZSk7CisJaWYgKGVycm9yKQorCQlkZXZfd2FybihkZXYsICJydW50aW1lIHN1c3BlbmQgZmFpbGVkOiAlZFxuIiwgZXJyb3IpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhjeWFwYV9wbV9vcHMsIGN5YXBhX3N1c3BlbmQsIGN5YXBhX3Jlc3VtZSk7CitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIGN5YXBhX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgY3lhcGEgKmN5YXBhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBjeWFwYS0+b3BzLT5zZXRfcG93ZXJfbW9kZShjeWFwYSwgUFdSX01PREVfRlVMTF9BQ1RJVkUsIDApOworCWlmIChlcnJvcikKKwkJZGV2X3dhcm4oZGV2LCAicnVudGltZSByZXN1bWUgZmFpbGVkOiAlZFxuIiwgZXJyb3IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBjeWFwYV9wbV9vcHMgPSB7CisJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMoY3lhcGFfc3VzcGVuZCwgY3lhcGFfcmVzdW1lKQorCVNFVF9SVU5USU1FX1BNX09QUyhjeWFwYV9ydW50aW1lX3N1c3BlbmQsIGN5YXBhX3J1bnRpbWVfcmVzdW1lLCBOVUxMKQorfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGN5YXBhX2lkX3RhYmxlW10gPSB7CiAJeyAiY3lhcGEiLCAwIH0sCkBAIC05NzgsMTEgKzEzNzAsMjEgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgY3lhcGFfaWRfdGFibGUpOwogCisjaWZkZWYgQ09ORklHX0FDUEkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgY3lhcGFfYWNwaV9pZFtdID0geworCXsgIkNZQVAwMDAwIiwgMCB9LCAgLyogR2VuMyB0cmFja3BhZCB3aXRoIDB4NjcgSTJDIGFkZHJlc3MuICovCisJeyAiQ1lBUDAwMDEiLCAwIH0sICAvKiBHZW41IHRyYWNrcGFkIHdpdGggMHgyNCBJMkMgYWRkcmVzcy4gKi8KKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIGN5YXBhX2FjcGlfaWQpOworI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBjeWFwYV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAiY3lhcGEiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLnBtID0gJmN5YXBhX3BtX29wcywKKwkJLmFjcGlfbWF0Y2hfdGFibGUgPSBBQ1BJX1BUUihjeWFwYV9hY3BpX2lkKSwKIAl9LAogCiAJLnByb2JlID0gY3lhcGFfcHJvYmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2N5YXBhLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL2N5YXBhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRjOWVkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvY3lhcGEuaApAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIEN5cHJlc3MgQVBBIHRyYWNrcGFkIHdpdGggSTJDIGludGVyZmFjZQorICoKKyAqIEF1dGhvcjogRHVkbGV5IER1IDxkdWRsQGN5cHJlc3MuY29tPgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBDeXByZXNzIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfQ1lBUEFfSAorI2RlZmluZSBfQ1lBUEFfSAorCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKworLyogQVBBIHRyYWNrcGFkIGZpcm13YXJlIGdlbmVyYXRpb24gbnVtYmVyLiAqLworI2RlZmluZSBDWUFQQV9HRU5fVU5LTk9XTiAgIDB4MDAgICAvKiB1bmtub3duIHByb3RvY29sLiAqLworI2RlZmluZSBDWUFQQV9HRU4zICAgMHgwMyAgIC8qIHN1cHBvcnQgTVQtcHJvdG9jb2wgQiB3aXRoIHRyYWNraW5nIElELiAqLworI2RlZmluZSBDWUFQQV9HRU41ICAgMHgwNSAgIC8qIHN1cHBvcnQgVHJ1ZVRvdWNoIEdFTjUgdHJhY2twYWQgZGV2aWNlLiAqLworCisjZGVmaW5lIENZQVBBX05BTUUgICAiQ3lwcmVzcyBBUEEgVHJhY2twYWQgKGN5YXBhKSIKKworLyoKKyAqIE1hY3JvcyBmb3IgU01CdXMgY29tbXVuaWNhdGlvbgorICovCisjZGVmaW5lIFNNQlVTX1JFQUQgICAweDAxCisjZGVmaW5lIFNNQlVTX1dSSVRFIDB4MDAKKyNkZWZpbmUgU01CVVNfRU5DT0RFX0lEWChjbWQsIGlkeCkgKChjbWQpIHwgKCgoaWR4KSAmIDB4MDMpIDw8IDEpKQorI2RlZmluZSBTTUJVU19FTkNPREVfUlcoY21kLCBydykgKChjbWQpIHwgKChydykgJiAweDAxKSkKKyNkZWZpbmUgU01CVVNfQllURV9CTE9DS19DTURfTUFTSyAweDgwCisjZGVmaW5lIFNNQlVTX0dST1VQX0JMT0NLX0NNRF9NQVNLIDB4NDAKKworLyogQ29tbWFuZHMgZm9yIHJlYWQvd3JpdGUgcmVnaXN0ZXJzIG9mIEN5cHJlc3MgdHJhY2twYWQgKi8KKyNkZWZpbmUgQ1lBUEFfQ01EX1NPRlRfUkVTRVQgICAgICAgMHgwMAorI2RlZmluZSBDWUFQQV9DTURfUE9XRVJfTU9ERSAgICAgICAweDAxCisjZGVmaW5lIENZQVBBX0NNRF9ERVZfU1RBVFVTICAgICAgIDB4MDIKKyNkZWZpbmUgQ1lBUEFfQ01EX0dST1VQX0RBVEEgICAgICAgMHgwMworI2RlZmluZSBDWUFQQV9DTURfR1JPVVBfQ01EICAgICAgICAweDA0CisjZGVmaW5lIENZQVBBX0NNRF9HUk9VUF9RVUVSWSAgICAgIDB4MDUKKyNkZWZpbmUgQ1lBUEFfQ01EX0JMX1NUQVRVUyAgICAgICAgMHgwNgorI2RlZmluZSBDWUFQQV9DTURfQkxfSEVBRCAgICAgICAgICAweDA3CisjZGVmaW5lIENZQVBBX0NNRF9CTF9DTUQgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgQ1lBUEFfQ01EX0JMX0RBVEEgICAgICAgICAgMHgwOQorI2RlZmluZSBDWUFQQV9DTURfQkxfQUxMICAgICAgICAgICAweDBhCisjZGVmaW5lIENZQVBBX0NNRF9CTEtfUFJPRFVDVF9JRCAgIDB4MGIKKyNkZWZpbmUgQ1lBUEFfQ01EX0JMS19IRUFEICAgICAgICAgMHgwYworI2RlZmluZSBDWUFQQV9DTURfTUFYX0JBU0VMSU5FICAgICAweDBkCisjZGVmaW5lIENZQVBBX0NNRF9NSU5fQkFTRUxJTkUgICAgIDB4MGUKKworI2RlZmluZSBCTF9IRUFEX09GRlNFVCAweDAwCisjZGVmaW5lIEJMX0RBVEFfT0ZGU0VUIDB4MTAKKworI2RlZmluZSBCTF9TVEFUVVNfU0laRSAgMyAgLyogTGVuZ3RoIG9mIGdlbjMgYm9vdGxvYWRlciBzdGF0dXMgcmVnaXN0ZXJzICovCisjZGVmaW5lIENZQVBBX1JFR19NQVBfU0laRSAgMjU2CisKKy8qCisgKiBHZW4zIE9wZXJhdGlvbmFsIERldmljZSBTdGF0dXMgUmVnaXN0ZXIKKyAqCisgKiBiaXQgNzogVmFsaWQgaW50ZXJydXB0IHNvdXJjZQorICogYml0IDYgLSA0OiBSZXNlcnZlZAorICogYml0IDMgLSAyOiBQb3dlciBzdGF0dXMKKyAqIGJpdCAxIC0gMDogRGV2aWNlIHN0YXR1cworICovCisjZGVmaW5lIFJFR19PUF9TVEFUVVMgICAgIDB4MDAKKyNkZWZpbmUgT1BfU1RBVFVTX1NSQyAgICAgMHg4MAorI2RlZmluZSBPUF9TVEFUVVNfUE9XRVIgICAweDBjCisjZGVmaW5lIE9QX1NUQVRVU19ERVYgICAgIDB4MDMKKyNkZWZpbmUgT1BfU1RBVFVTX01BU0sgKE9QX1NUQVRVU19TUkMgfCBPUF9TVEFUVVNfUE9XRVIgfCBPUF9TVEFUVVNfREVWKQorCisvKgorICogT3BlcmF0aW9uYWwgRmluZ2VyIENvdW50L0J1dHRvbiBGbGFncyBSZWdpc3RlcgorICoKKyAqIGJpdCA3IC0gNDogTnVtYmVyIG9mIHRvdWNoZWQgZmluZ2VyCisgKiBiaXQgMzogVmFsaWQgZGF0YQorICogYml0IDI6IE1pZGRsZSBQaHlzaWNhbCBCdXR0b24KKyAqIGJpdCAxOiBSaWdodCBQaHlzaWNhbCBCdXR0b24KKyAqIGJpdCAwOiBMZWZ0IHBoeXNpY2FsIEJ1dHRvbgorICovCisjZGVmaW5lIFJFR19PUF9EQVRBMSAgICAgICAweDAxCisjZGVmaW5lIE9QX0RBVEFfVkFMSUQgICAgICAweDA4CisjZGVmaW5lIE9QX0RBVEFfTUlERExFX0JUTiAweDA0CisjZGVmaW5lIE9QX0RBVEFfUklHSFRfQlROICAweDAyCisjZGVmaW5lIE9QX0RBVEFfTEVGVF9CVE4gICAweDAxCisjZGVmaW5lIE9QX0RBVEFfQlROX01BU0sgKE9QX0RBVEFfTUlERExFX0JUTiB8IE9QX0RBVEFfUklHSFRfQlROIHwgXAorCQkJICBPUF9EQVRBX0xFRlRfQlROKQorCisvKgorICogV3JpdGUtb25seSBjb21tYW5kIGZpbGUgcmVnaXN0ZXIgdXNlZCB0byBpc3N1ZSBjb21tYW5kcyBhbmQKKyAqIHBhcmFtZXRlcnMgdG8gdGhlIGJvb3Rsb2FkZXIuCisgKiBUaGUgZGVmYXVsdCB2YWx1ZSByZWFkIGZyb20gaXQgaXMgYWx3YXlzIDB4MDAuCisgKi8KKyNkZWZpbmUgUkVHX0JMX0ZJTEUJMHgwMAorI2RlZmluZSBCTF9GSUxFCQkweDAwCisKKy8qCisgKiBCb290bG9hZGVyIFN0YXR1cyBSZWdpc3RlcgorICoKKyAqIGJpdCA3OiBCdXN5CisgKiBiaXQgNiAtIDU6IFJlc2VydmVkCisgKiBiaXQgNDogQm9vdGxvYWRlciBydW5uaW5nCisgKiBiaXQgMyAtIDI6IFJlc2VydmVkCisgKiBiaXQgMTogV2F0Y2hkb2cgUmVzZXQKKyAqIGJpdCAwOiBDaGVja3N1bSB2YWxpZAorICovCisjZGVmaW5lIFJFR19CTF9TVEFUVVMgICAgICAgIDB4MDEKKyNkZWZpbmUgQkxfU1RBVFVTX1JFVl82XzUgICAgMHg2MAorI2RlZmluZSBCTF9TVEFUVVNfQlVTWSAgICAgICAweDgwCisjZGVmaW5lIEJMX1NUQVRVU19SVU5OSU5HICAgIDB4MTAKKyNkZWZpbmUgQkxfU1RBVFVTX1JFVl8zXzIgICAgMHgwYworI2RlZmluZSBCTF9TVEFUVVNfV0FUQ0hET0cgICAweDAyCisjZGVmaW5lIEJMX1NUQVRVU19DU1VNX1ZBTElEIDB4MDEKKyNkZWZpbmUgQkxfU1RBVFVTX1JFVl9NQVNLIChCTF9TVEFUVVNfV0FUQ0hET0cgfCBCTF9TVEFUVVNfUkVWXzNfMiB8IFwKKwkJCSAgICBCTF9TVEFUVVNfUkVWXzZfNSkKKworLyoKKyAqIEJvb3Rsb2FkZXIgRXJyb3IgUmVnaXN0ZXIKKyAqCisgKiBiaXQgNzogSW52YWxpZAorICogYml0IDY6IEludmFsaWQgc2VjdXJpdHkga2V5CisgKiBiaXQgNTogQm9vdGxvYWRpbmcKKyAqIGJpdCA0OiBDb21tYW5kIGNoZWNrc3VtCisgKiBiaXQgMzogRmxhc2ggcHJvdGVjdGlvbiBlcnJvcgorICogYml0IDI6IEZsYXNoIGNoZWNrc3VtIGVycm9yCisgKiBiaXQgMSAtIDA6IFJlc2VydmVkCisgKi8KKyNkZWZpbmUgUkVHX0JMX0VSUk9SICAgICAgICAgMHgwMgorI2RlZmluZSBCTF9FUlJPUl9JTlZBTElEICAgICAweDgwCisjZGVmaW5lIEJMX0VSUk9SX0lOVkFMSURfS0VZIDB4NDAKKyNkZWZpbmUgQkxfRVJST1JfQk9PVExPQURJTkcgMHgyMAorI2RlZmluZSBCTF9FUlJPUl9DTURfQ1NVTSAgICAweDEwCisjZGVmaW5lIEJMX0VSUk9SX0ZMQVNIX1BST1QgIDB4MDgKKyNkZWZpbmUgQkxfRVJST1JfRkxBU0hfQ1NVTSAgMHgwNAorI2RlZmluZSBCTF9FUlJPUl9SRVNFUlZFRCAgICAweDAzCisjZGVmaW5lIEJMX0VSUk9SX05PX0VSUl9JRExFICAgIDB4MDAKKyNkZWZpbmUgQkxfRVJST1JfTk9fRVJSX0FDVElWRSAgKEJMX0VSUk9SX0JPT1RMT0FESU5HKQorCisjZGVmaW5lIENBUEFCSUxJVFlfQlROX1NISUZUICAgICAgICAgICAgMworI2RlZmluZSBDQVBBQklMSVRZX0xFRlRfQlROX01BU0sJKDB4MDEgPDwgMykKKyNkZWZpbmUgQ0FQQUJJTElUWV9SSUdIVF9CVE5fTUFTSwkoMHgwMSA8PCA0KQorI2RlZmluZSBDQVBBQklMSVRZX01JRERMRV9CVE5fTUFTSwkoMHgwMSA8PCA1KQorI2RlZmluZSBDQVBBQklMSVRZX0JUTl9NQVNLICAoQ0FQQUJJTElUWV9MRUZUX0JUTl9NQVNLIHwgXAorCQkJICAgICAgQ0FQQUJJTElUWV9SSUdIVF9CVE5fTUFTSyB8IFwKKwkJCSAgICAgIENBUEFCSUxJVFlfTUlERExFX0JUTl9NQVNLKQorCisjZGVmaW5lIFBXUl9NT0RFX01BU0sgICAweGZjCisjZGVmaW5lIFBXUl9NT0RFX0ZVTExfQUNUSVZFICgweDNmIDw8IDIpCisjZGVmaW5lIFBXUl9NT0RFX0lETEUgICAgICAgICgweDAzIDw8IDIpIC8qIERlZmF1bHQgcnQgc3VzcGVuZCBzY2FucmF0ZTogMzBtcyAqLworI2RlZmluZSBQV1JfTU9ERV9TTEVFUCAgICAgICAoMHgwNSA8PCAyKSAvKiBEZWZhdWx0IHN1c3BlbmQgc2NhbnJhdGU6IDUwbXMgKi8KKyNkZWZpbmUgUFdSX01PREVfQlROX09OTFkgICAgKDB4MDEgPDwgMikKKyNkZWZpbmUgUFdSX01PREVfT0ZGICAgICAgICAgKDB4MDAgPDwgMikKKworI2RlZmluZSBQV1JfU1RBVFVTX01BU0sgICAgICAweDBjCisjZGVmaW5lIFBXUl9TVEFUVVNfQUNUSVZFICAgICgweDAzIDw8IDIpCisjZGVmaW5lIFBXUl9TVEFUVVNfSURMRSAgICAgICgweDAyIDw8IDIpCisjZGVmaW5lIFBXUl9TVEFUVVNfQlROX09OTFkgICgweDAxIDw8IDIpCisjZGVmaW5lIFBXUl9TVEFUVVNfT0ZGICAgICAgICgweDAwIDw8IDIpCisKKyNkZWZpbmUgQVVUT1NVU1BFTkRfREVMQVkgICAyMDAwIC8qIHVuaXQgOiBtcyAqLworCisjZGVmaW5lIFVOSU5JVF9TTEVFUF9USU1FIDB4RkZGRgorI2RlZmluZSBVTklOSVRfUFdSX01PREUgICAweEZGCisKKyNkZWZpbmUgQlROX09OTFlfTU9ERV9OQU1FICAgImJ1dHRvbm9ubHkiCisjZGVmaW5lIE9GRl9NT0RFX05BTUUgICAgICAgICJvZmYiCisKKy8qIFRoZSB0b3VjaC5pZCBpcyB1c2VkIGFzIHRoZSBNVCBzbG90IGlkLCB0aHVzIG1heCBNVCBzbG90IGlzIDE1ICovCisjZGVmaW5lIENZQVBBX01BWF9NVF9TTE9UUyAgMTUKKworc3RydWN0IGN5YXBhOworCit0eXBlZGVmIGJvb2wgKCpjYl9zb3J0KShzdHJ1Y3QgY3lhcGEgKiwgdTggKiwgaW50KTsKKworc3RydWN0IGN5YXBhX2Rldl9vcHMgeworCWludCAoKmNoZWNrX2Z3KShzdHJ1Y3QgY3lhcGEgKiwgY29uc3Qgc3RydWN0IGZpcm13YXJlICopOworCWludCAoKmJsX2VudGVyKShzdHJ1Y3QgY3lhcGEgKik7CisJaW50ICgqYmxfYWN0aXZhdGUpKHN0cnVjdCBjeWFwYSAqKTsKKwlpbnQgKCpibF9pbml0aWF0ZSkoc3RydWN0IGN5YXBhICosIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKTsKKwlpbnQgKCp1cGRhdGVfZncpKHN0cnVjdCBjeWFwYSAqLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKik7CisJaW50ICgqYmxfZGVhY3RpdmF0ZSkoc3RydWN0IGN5YXBhICopOworCisJc3NpemVfdCAoKnNob3dfYmFzZWxpbmUpKHN0cnVjdCBkZXZpY2UgKiwKKwkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICosIGNoYXIgKik7CisJc3NpemVfdCAoKmNhbGlicmF0ZV9zdG9yZSkoc3RydWN0IGRldmljZSAqLAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworCisJaW50ICgqaW5pdGlhbGl6ZSkoc3RydWN0IGN5YXBhICpjeWFwYSk7CisKKwlpbnQgKCpzdGF0ZV9wYXJzZSkoc3RydWN0IGN5YXBhICpjeWFwYSwgdTggKnJlZ19zdGF0dXMsIGludCBsZW4pOworCWludCAoKm9wZXJhdGlvbmFsX2NoZWNrKShzdHJ1Y3QgY3lhcGEgKmN5YXBhKTsKKworCWludCAoKmlycV9oYW5kbGVyKShzdHJ1Y3QgY3lhcGEgKik7CisJYm9vbCAoKmlycV9jbWRfaGFuZGxlcikoc3RydWN0IGN5YXBhICopOworCWludCAoKnNvcnRfZW1wdHlfb3V0cHV0X2RhdGEpKHN0cnVjdCBjeWFwYSAqLAorCQkJdTggKiwgaW50ICosIGNiX3NvcnQpOworCisJaW50ICgqc2V0X3Bvd2VyX21vZGUpKHN0cnVjdCBjeWFwYSAqLCB1OCwgdTE2KTsKK307CisKK3N0cnVjdCBjeWFwYV9nZW41X2NtZF9zdGF0ZXMgeworCXN0cnVjdCBtdXRleCBjbWRfbG9jazsKKwlzdHJ1Y3QgY29tcGxldGlvbiBjbWRfcmVhZHk7CisJYXRvbWljX3QgY21kX2lzc3VlZDsKKwl1OCBpbl9wcm9ncmVzc19jbWQ7CisJYm9vbCBpc19pcnFfbW9kZTsKKworCWNiX3NvcnQgcmVzcF9zb3J0X2Z1bmM7CisJdTggKnJlc3BfZGF0YTsKKwlpbnQgKnJlc3BfbGVuOworCisJdTggaXJxX2NtZF9idWZbQ1lBUEFfUkVHX01BUF9TSVpFXTsKKwl1OCBlbXB0eV9idWZbQ1lBUEFfUkVHX01BUF9TSVpFXTsKK307CisKK3VuaW9uIGN5YXBhX2NtZF9zdGF0ZXMgeworCXN0cnVjdCBjeWFwYV9nZW41X2NtZF9zdGF0ZXMgZ2VuNTsKK307CisKK2VudW0gY3lhcGFfc3RhdGUgeworCUNZQVBBX1NUQVRFX05PX0RFVklDRSwKKwlDWUFQQV9TVEFURV9CTF9CVVNZLAorCUNZQVBBX1NUQVRFX0JMX0lETEUsCisJQ1lBUEFfU1RBVEVfQkxfQUNUSVZFLAorCUNZQVBBX1NUQVRFX09QLAorCUNZQVBBX1NUQVRFX0dFTjVfQkwsCisJQ1lBUEFfU1RBVEVfR0VONV9BUFAsCit9OworCisvKiBUaGUgbWFpbiBkZXZpY2Ugc3RydWN0dXJlICovCitzdHJ1Y3QgY3lhcGEgeworCWVudW0gY3lhcGFfc3RhdGUgc3RhdGU7CisJdTggc3RhdHVzW0JMX1NUQVRVU19TSVpFXTsKKwlib29sIG9wZXJhdGlvbmFsOyAvKiB0cnVlOiByZWFkeSBmb3IgZGF0YSByZXBvcnRpbmc7IGZhbHNlOiBub3QuICovCisKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCWNoYXIgcGh5c1szMl07CS8qIERldmljZSBwaHlzaWNhbCBsb2NhdGlvbiAqLworCWJvb2wgaXJxX3dha2U7ICAvKiBJcnEgd2FrZSBpcyBlbmFibGVkICovCisJYm9vbCBzbWJ1czsKKworCS8qIHBvd2VyIG1vZGUgc2V0dGluZ3MgKi8KKwl1OCBzdXNwZW5kX3Bvd2VyX21vZGU7CisJdTE2IHN1c3BlbmRfc2xlZXBfdGltZTsKKwl1OCBydW50aW1lX3N1c3BlbmRfcG93ZXJfbW9kZTsKKwl1MTYgcnVudGltZV9zdXNwZW5kX3NsZWVwX3RpbWU7CisJdTggZGV2X3B3cl9tb2RlOworCXUxNiBkZXZfc2xlZXBfdGltZTsKKworCS8qIFJlYWQgZnJvbSBxdWVyeSBkYXRhIHJlZ2lvbi4gKi8KKwljaGFyIHByb2R1Y3RfaWRbMTZdOworCXU4IGZ3X21hal92ZXI7ICAvKiBGaXJtd2FyZSBtYWpvciB2ZXJzaW9uLiAqLworCXU4IGZ3X21pbl92ZXI7ICAvKiBGaXJtd2FyZSBtaW5vciB2ZXJzaW9uLiAqLworCXU4IGJ0bl9jYXBhYmlsaXR5OworCXU4IGdlbjsKKwlpbnQgbWF4X2Fic194OworCWludCBtYXhfYWJzX3k7CisJaW50IHBoeXNpY2FsX3NpemVfeDsKKwlpbnQgcGh5c2ljYWxfc2l6ZV95OworCisJLyogVXNlZCBpbiB0dHNwIGFuZCB0cnVldG91Y2ggYmFzZWQgdHJhY2twYWQgZGV2aWNlcy4gKi8KKwl1OCB4X29yaWdpbjsgIC8qIFggQXhpcyBPcmlnaW46IDAgPSBsZWZ0IHNpZGU7IDEgPSByaWd0aCBzaWRlLiAqLworCXU4IHlfb3JpZ2luOyAgLyogWSBBeGlzIE9yaWdpbjogMCA9IHRvcDsgMSA9IGJvdHRvbS4gKi8KKwlpbnQgZWxlY3Ryb2Rlc194OyAgLyogTnVtYmVyIG9mIGVsZWN0cm9kZXMgb24gdGhlIFggQXhpcyovCisJaW50IGVsZWN0cm9kZXNfeTsgIC8qIE51bWJlciBvZiBlbGVjdHJvZGVzIG9uIHRoZSBZIEF4aXMqLworCWludCBlbGVjdHJvZGVzX3J4OyAgLyogTnVtYmVyIG9mIFJ4IGVsZWN0cm9kZXMgKi8KKwlpbnQgYWxpZ25lZF9lbGVjdHJvZGVzX3J4OyAgLyogNCBhbGlnbmVkICovCisJaW50IG1heF96OworCisJLyoKKwkgKiBVc2VkIHRvIHN5bmNocm9uaXplIHRoZSBhY2Nlc3Mgb3IgdXBkYXRlIHRoZSBkZXZpY2Ugc3RhdGUuCisJICogQW5kIHNpbmNlIHVwZGF0ZSBmaXJtd2FyZSBhbmQgcmVhZCBmaXJtd2FyZSBpbWFnZSBwcm9jZXNzIHdpbGwgdGFrZQorCSAqIHF1aXRlIGxvbmcgdGltZSwgbWF5YmUgbW9yZSB0aGFuIDEwIHNlY29uZHMsIHNvIHVzZSBtdXRleF9sb2NrCisJICogdG8gc3luYyBhbmQgd2FpdCBvdGhlciBpbnRlcmZhY2UgYW5kIGRldGVjdGluZyBhcmUgZG9uZSBvciByZWFkeS4KKwkgKi8KKwlzdHJ1Y3QgbXV0ZXggc3RhdGVfc3luY19sb2NrOworCisJY29uc3Qgc3RydWN0IGN5YXBhX2Rldl9vcHMgKm9wczsKKworCXVuaW9uIGN5YXBhX2NtZF9zdGF0ZXMgY21kX3N0YXRlczsKK307CisKKworc3NpemVfdCBjeWFwYV9pMmNfcmVnX3JlYWRfYmxvY2soc3RydWN0IGN5YXBhICpjeWFwYSwgdTggcmVnLCBzaXplX3QgbGVuLAorCQkJCXU4ICp2YWx1ZXMpOworc3NpemVfdCBjeWFwYV9zbWJ1c19yZWFkX2Jsb2NrKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4IGNtZCwgc2l6ZV90IGxlbiwKKwkJCQl1OCAqdmFsdWVzKTsKKworc3NpemVfdCBjeWFwYV9yZWFkX2Jsb2NrKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4IGNtZF9pZHgsIHU4ICp2YWx1ZXMpOworCitpbnQgY3lhcGFfcG9sbF9zdGF0ZShzdHJ1Y3QgY3lhcGEgKmN5YXBhLCB1bnNpZ25lZCBpbnQgdGltZW91dCk7CisKK3U4IGN5YXBhX3NsZWVwX3RpbWVfdG9fcHdyX2NtZCh1MTYgc2xlZXBfdGltZSk7Cit1MTYgY3lhcGFfcHdyX2NtZF90b19zbGVlcF90aW1lKHU4IHB3cl9tb2RlKTsKKworCitleHRlcm4gY29uc3QgY2hhciBwcm9kdWN0X2lkW107CitleHRlcm4gY29uc3Qgc3RydWN0IGN5YXBhX2Rldl9vcHMgY3lhcGFfZ2VuM19vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGN5YXBhX2Rldl9vcHMgY3lhcGFfZ2VuNV9vcHM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9jeWFwYV9nZW4zLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2N5YXBhX2dlbjMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2U5ZDcwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9jeWFwYV9nZW4zLmMKQEAgLTAsMCArMSwxMjQ3IEBACisvKgorICogQ3lwcmVzcyBBUEEgdHJhY2twYWQgd2l0aCBJMkMgaW50ZXJmYWNlCisgKgorICogQXV0aG9yOiBEdWRsZXkgRHUgPGR1ZGxAY3lwcmVzcy5jb20+CisgKiBGdXJ0aGVyIGNsZWFudXAgYW5kIHJlc3RydWN0dXJpbmcgYnk6CisgKiAgIERhbmllbCBLdXJ0eiA8ZGprdXJ0ekBjaHJvbWl1bS5vcmc+CisgKiAgIEJlbnNvbiBMZXVuZyA8YmxldW5nQGNocm9taXVtLm9yZz4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBDeXByZXNzIFNlbWljb25kdWN0b3IsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L210Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9hY2Nlc3Nfb2suaD4KKyNpbmNsdWRlICJjeWFwYS5oIgorCisKKyNkZWZpbmUgR0VOM19NQVhfRklOR0VSUyA1CisjZGVmaW5lIEdFTjNfRklOR0VSX05VTSh4KSAoKCh4KSA+PiA0KSAmIDB4MDcpCisKKyNkZWZpbmUgQkxLX0hFQURfQllURVMgMzIKKworLyogTWFjcm8gZm9yIHJlZ2lzdGVyIG1hcCBncm91cCBvZmZzZXQuICovCisjZGVmaW5lIFBST0RVQ1RfSURfU0laRSAgMTYKKyNkZWZpbmUgUVVFUllfREFUQV9TSVpFICAyNworI2RlZmluZSBSRUdfUFJPVE9DT0xfR0VOX1FVRVJZX09GRlNFVCAgMjAKKworI2RlZmluZSBSRUdfT0ZGU0VUX0RBVEFfQkFTRSAgICAgMHgwMDAwCisjZGVmaW5lIFJFR19PRkZTRVRfQ09NTUFORF9CQVNFICAweDAwMjgKKyNkZWZpbmUgUkVHX09GRlNFVF9RVUVSWV9CQVNFICAgIDB4MDAyYQorCisjZGVmaW5lIENZQVBBX09GRlNFVF9TT0ZUX1JFU0VUICBSRUdfT0ZGU0VUX0NPTU1BTkRfQkFTRQorI2RlZmluZSBPUF9SRUNBTElCUkFUSU9OX01BU0sgICAgMHg4MAorI2RlZmluZSBPUF9SRVBPUlRfQkFTRUxJTkVfTUFTSyAgMHg0MAorI2RlZmluZSBSRUdfT0ZGU0VUX01BWF9CQVNFTElORSAgMHgwMDI2CisjZGVmaW5lIFJFR19PRkZTRVRfTUlOX0JBU0VMSU5FICAweDAwMjcKKworI2RlZmluZSBSRUdfT0ZGU0VUX1BPV0VSX01PREUgKFJFR19PRkZTRVRfQ09NTUFORF9CQVNFICsgMSkKKyNkZWZpbmUgU0VUX1BPV0VSX01PREVfREVMQVkgICAxMDAwMCAgLyogVW5pdDogdXMgKi8KKyNkZWZpbmUgU0VUX1BPV0VSX01PREVfVFJJRVMgICA1CisKKyNkZWZpbmUgR0VOM19CTF9DTURfQ0hFQ0tTVU1fU0VFRCAweGZmCisjZGVmaW5lIEdFTjNfQkxfQ01EX0lOSVRJQVRFX0JMICAgMHgzOAorI2RlZmluZSBHRU4zX0JMX0NNRF9XUklURV9CTE9DSyAgIDB4MzkKKyNkZWZpbmUgR0VOM19CTF9DTURfVkVSSUZZX0JMT0NLICAweDNhCisjZGVmaW5lIEdFTjNfQkxfQ01EX1RFUk1JTkFURV9CTCAgMHgzYgorI2RlZmluZSBHRU4zX0JMX0NNRF9MQVVOQ0hfQVBQICAgIDB4YTUKKworLyoKKyAqIENZQVBBIHRyYWNrcGFkIGRldmljZSBzdGF0ZXMuCisgKiBVc2VkIGluIHJlZ2lzdGVyIDB4MDAsIGJpdDEtMCwgRGV2aWNlU3RhdHVzIGZpZWxkLgorICogT3RoZXIgdmFsdWVzIGluZGljYXRlIGRldmljZSBpcyBpbiBhbiBhYm5vcm1hbCBzdGF0ZSBhbmQgbXVzdCBiZSByZXNldC4KKyAqLworI2RlZmluZSBDWUFQQV9ERVZfTk9STUFMICAweDAzCisjZGVmaW5lIENZQVBBX0RFVl9CVVNZICAgIDB4MDEKKworI2RlZmluZSBDWUFQQV9GV19CTE9DS19TSVpFCTY0CisjZGVmaW5lIENZQVBBX0ZXX1JFQURfU0laRQkxNgorI2RlZmluZSBDWUFQQV9GV19IRFJfU1RBUlQJMHgwNzgwCisjZGVmaW5lIENZQVBBX0ZXX0hEUl9CTE9DS19DT1VOVCAgMgorI2RlZmluZSBDWUFQQV9GV19IRFJfQkxPQ0tfU1RBUlQgIChDWUFQQV9GV19IRFJfU1RBUlQgLyBDWUFQQV9GV19CTE9DS19TSVpFKQorI2RlZmluZSBDWUFQQV9GV19IRFJfU0laRQkgIChDWUFQQV9GV19IRFJfQkxPQ0tfQ09VTlQgKiBcCisJCQkJCUNZQVBBX0ZXX0JMT0NLX1NJWkUpCisjZGVmaW5lIENZQVBBX0ZXX0RBVEFfU1RBUlQJMHgwODAwCisjZGVmaW5lIENZQVBBX0ZXX0RBVEFfQkxPQ0tfQ09VTlQgIDQ4MAorI2RlZmluZSBDWUFQQV9GV19EQVRBX0JMT0NLX1NUQVJUICAoQ1lBUEFfRldfREFUQV9TVEFSVCAvIENZQVBBX0ZXX0JMT0NLX1NJWkUpCisjZGVmaW5lIENZQVBBX0ZXX0RBVEFfU0laRQkoQ1lBUEFfRldfREFUQV9CTE9DS19DT1VOVCAqIFwKKwkJCQkgQ1lBUEFfRldfQkxPQ0tfU0laRSkKKyNkZWZpbmUgQ1lBUEFfRldfU0laRQkJKENZQVBBX0ZXX0hEUl9TSVpFICsgQ1lBUEFfRldfREFUQV9TSVpFKQorI2RlZmluZSBDWUFQQV9DTURfTEVOCQkxNgorCisjZGVmaW5lIEdFTjNfQkxfSURMRV9GV19NQUpfVkVSX09GRlNFVCAweDBiCisjZGVmaW5lIEdFTjNfQkxfSURMRV9GV19NSU5fVkVSX09GRlNFVCAoR0VOM19CTF9JRExFX0ZXX01BSl9WRVJfT0ZGU0VUICsgMSkKKworCitzdHJ1Y3QgY3lhcGFfdG91Y2ggeworCS8qCisJICogaGlnaCBiaXRzIG9yIHgveSBwb3NpdGlvbiB2YWx1ZQorCSAqIGJpdCA3IC0gNDogaGlnaCA0IGJpdHMgb2YgeCBwb3NpdGlvbiB2YWx1ZQorCSAqIGJpdCAzIC0gMDogaGlnaCA0IGJpdHMgb2YgeSBwb3NpdGlvbiB2YWx1ZQorCSAqLworCXU4IHh5X2hpOworCXU4IHhfbG87ICAvKiBsb3cgOCBiaXRzIG9mIHggcG9zaXRpb24gdmFsdWUuICovCisJdTggeV9sbzsgIC8qIGxvdyA4IGJpdHMgb2YgeSBwb3NpdGlvbiB2YWx1ZS4gKi8KKwl1OCBwcmVzc3VyZTsKKwkvKiBpZCByYW5nZSBpcyAxIC0gMTUuICBJdCBpcyBpbmNyZW1lbnRlZCB3aXRoIGV2ZXJ5IG5ldyB0b3VjaC4gKi8KKwl1OCBpZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjeWFwYV9yZWdfZGF0YSB7CisJLyoKKwkgKiBiaXQgMCAtIDE6IGRldmljZSBzdGF0dXMKKwkgKiBiaXQgMyAtIDI6IHBvd2VyIG1vZGUKKwkgKiBiaXQgNiAtIDQ6IHJlc2VydmVkCisJICogYml0IDc6IGludGVycnVwdCB2YWxpZCBiaXQKKwkgKi8KKwl1OCBkZXZpY2Vfc3RhdHVzOworCS8qCisJICogYml0IDcgLSA0OiBudW1iZXIgb2YgZmluZ2VycyBjdXJyZW50bHkgdG91Y2hpbmcgcGFkCisJICogYml0IDM6IHZhbGlkIGRhdGEgY2hlY2sgYml0CisJICogYml0IDI6IG1pZGRsZSBtZWNoYW5pc20gYnV0dG9uIHN0YXRlIGlmIGV4aXN0cworCSAqIGJpdCAxOiByaWdodCBtZWNoYW5pc20gYnV0dG9uIHN0YXRlIGlmIGV4aXN0cworCSAqIGJpdCAwOiBsZWZ0IG1lY2hhbmlzbSBidXR0b24gc3RhdGUgaWYgZXhpc3RzCisJICovCisJdTggZmluZ2VyX2J0bjsKKwkvKiBDWUFQQSByZXBvcnRzIHVwIHRvIDUgdG91Y2hlcyBwZXIgcGFja2V0LiAqLworCXN0cnVjdCBjeWFwYV90b3VjaCB0b3VjaGVzWzVdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGdlbjNfd3JpdGVfYmxvY2tfY21kIHsKKwl1OCBjaGVja3N1bV9zZWVkOyAgLyogQWx3YXlzIGJlIDB4ZmYgKi8KKwl1OCBjbWRfY29kZTsgICAgICAgLyogY29tbWFuZCBjb2RlOiAweDM5ICovCisJdTgga2V5WzhdOyAgICAgICAgIC8qIDgtYnl0ZSBzZWN1cml0eSBrZXkgKi8KKwlfX2JlMTYgYmxvY2tfbnVtOworCXU4IGJsb2NrX2RhdGFbQ1lBUEFfRldfQkxPQ0tfU0laRV07CisJdTggYmxvY2tfY2hlY2tzdW07ICAvKiBDYWxjdWxhdGVkIHVzaW5nIGJ5dGVzIDEyIC0gNzUgKi8KKwl1OCBjbWRfY2hlY2tzdW07ICAgIC8qIENhbGN1bGF0ZWQgdXNpbmcgYnl0ZXMgMC03NiAqLworfSBfX3BhY2tlZDsKKworc3RhdGljIGNvbnN0IHU4IHNlY3VyaXR5X2tleVtdID0geworCQkweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3IH07CitzdGF0aWMgY29uc3QgdTggYmxfYWN0aXZhdGVbXSA9IHsgMHgwMCwgMHhmZiwgMHgzOCwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywKKwkJMHgwNCwgMHgwNSwgMHgwNiwgMHgwNyB9Oworc3RhdGljIGNvbnN0IHU4IGJsX2RlYWN0aXZhdGVbXSA9IHsgMHgwMCwgMHhmZiwgMHgzYiwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywKKwkJMHgwNCwgMHgwNSwgMHgwNiwgMHgwNyB9Oworc3RhdGljIGNvbnN0IHU4IGJsX2V4aXRbXSA9IHsgMHgwMCwgMHhmZiwgMHhhNSwgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwKKwkJMHgwNSwgMHgwNiwgMHgwNyB9OworCisKKyAvKiBmb3IgYnl0ZSByZWFkL3dyaXRlIGNvbW1hbmQgKi8KKyNkZWZpbmUgQ01EX1JFU0VUICAgICAgMAorI2RlZmluZSBDTURfUE9XRVJfTU9ERSAxCisjZGVmaW5lIENNRF9ERVZfU1RBVFVTIDIKKyNkZWZpbmUgQ01EX1JFUE9SVF9NQVhfQkFTRUxJTkUgMworI2RlZmluZSBDTURfUkVQT1JUX01JTl9CQVNFTElORSA0CisjZGVmaW5lIFNNQlVTX0JZVEVfQ01EKGNtZCkgKCgoY21kKSAmIDB4M2YpIDw8IDEpCisjZGVmaW5lIENZQVBBX1NNQlVTX1JFU0VUICAgICAgICAgU01CVVNfQllURV9DTUQoQ01EX1JFU0VUKQorI2RlZmluZSBDWUFQQV9TTUJVU19QT1dFUl9NT0RFICAgIFNNQlVTX0JZVEVfQ01EKENNRF9QT1dFUl9NT0RFKQorI2RlZmluZSBDWUFQQV9TTUJVU19ERVZfU1RBVFVTICAgIFNNQlVTX0JZVEVfQ01EKENNRF9ERVZfU1RBVFVTKQorI2RlZmluZSBDWUFQQV9TTUJVU19NQVhfQkFTRUxJTkUgIFNNQlVTX0JZVEVfQ01EKENNRF9SRVBPUlRfTUFYX0JBU0VMSU5FKQorI2RlZmluZSBDWUFQQV9TTUJVU19NSU5fQkFTRUxJTkUgIFNNQlVTX0JZVEVfQ01EKENNRF9SRVBPUlRfTUlOX0JBU0VMSU5FKQorCisgLyogZm9yIGdyb3VwIHJlZ2lzdGVycyByZWFkL3dyaXRlIGNvbW1hbmQgKi8KKyNkZWZpbmUgUkVHX0dST1VQX0RBVEEgMAorI2RlZmluZSBSRUdfR1JPVVBfQ01EIDIKKyNkZWZpbmUgUkVHX0dST1VQX1FVRVJZIDMKKyNkZWZpbmUgU01CVVNfR1JPVVBfQ01EKGdycCkgKDB4ODAgfCAoKChncnApICYgMHgwNykgPDwgMykpCisjZGVmaW5lIENZQVBBX1NNQlVTX0dST1VQX0RBVEEJIFNNQlVTX0dST1VQX0NNRChSRUdfR1JPVVBfREFUQSkKKyNkZWZpbmUgQ1lBUEFfU01CVVNfR1JPVVBfQ01ECSBTTUJVU19HUk9VUF9DTUQoUkVHX0dST1VQX0NNRCkKKyNkZWZpbmUgQ1lBUEFfU01CVVNfR1JPVVBfUVVFUlkJIFNNQlVTX0dST1VQX0NNRChSRUdfR1JPVVBfUVVFUlkpCisKKyAvKiBmb3IgcmVnaXN0ZXIgYmxvY2sgcmVhZC93cml0ZSBjb21tYW5kICovCisjZGVmaW5lIENNRF9CTF9TVEFUVVMgMAorI2RlZmluZSBDTURfQkxfSEVBRCAxCisjZGVmaW5lIENNRF9CTF9DTUQgMgorI2RlZmluZSBDTURfQkxfREFUQSAzCisjZGVmaW5lIENNRF9CTF9BTEwgNAorI2RlZmluZSBDTURfQkxLX1BST0RVQ1RfSUQgNQorI2RlZmluZSBDTURfQkxLX0hFQUQgNgorI2RlZmluZSBTTUJVU19CTE9DS19DTUQoY21kKSAoMHhjMCB8ICgoKGNtZCkgJiAweDFmKSA8PCAxKSkKKworLyogcmVnaXN0ZXIgYmxvY2sgcmVhZC93cml0ZSBjb21tYW5kIGluIGJvb3Rsb2FkZXIgbW9kZSAqLworI2RlZmluZSBDWUFQQV9TTUJVU19CTF9TVEFUVVMgIFNNQlVTX0JMT0NLX0NNRChDTURfQkxfU1RBVFVTKQorI2RlZmluZSBDWUFQQV9TTUJVU19CTF9IRUFEICAgIFNNQlVTX0JMT0NLX0NNRChDTURfQkxfSEVBRCkKKyNkZWZpbmUgQ1lBUEFfU01CVVNfQkxfQ01EICAgICBTTUJVU19CTE9DS19DTUQoQ01EX0JMX0NNRCkKKyNkZWZpbmUgQ1lBUEFfU01CVVNfQkxfREFUQSAgICBTTUJVU19CTE9DS19DTUQoQ01EX0JMX0RBVEEpCisjZGVmaW5lIENZQVBBX1NNQlVTX0JMX0FMTCAgICAgU01CVVNfQkxPQ0tfQ01EKENNRF9CTF9BTEwpCisKKy8qIHJlZ2lzdGVyIGJsb2NrIHJlYWQvd3JpdGUgY29tbWFuZCBpbiBvcGVyYXRpb25hbCBtb2RlICovCisjZGVmaW5lIENZQVBBX1NNQlVTX0JMS19QUk9EVUNUX0lEIFNNQlVTX0JMT0NLX0NNRChDTURfQkxLX1BST0RVQ1RfSUQpCisjZGVmaW5lIENZQVBBX1NNQlVTX0JMS19IRUFEIFNNQlVTX0JMT0NLX0NNRChDTURfQkxLX0hFQUQpCisKKyAvKiBmb3IgYnl0ZSByZWFkL3dyaXRlIGNvbW1hbmQgKi8KKyNkZWZpbmUgQ01EX1JFU0VUIDAKKyNkZWZpbmUgQ01EX1BPV0VSX01PREUgMQorI2RlZmluZSBDTURfREVWX1NUQVRVUyAyCisjZGVmaW5lIENNRF9SRVBPUlRfTUFYX0JBU0VMSU5FIDMKKyNkZWZpbmUgQ01EX1JFUE9SVF9NSU5fQkFTRUxJTkUgNAorI2RlZmluZSBTTUJVU19CWVRFX0NNRChjbWQpICgoKGNtZCkgJiAweDNmKSA8PCAxKQorI2RlZmluZSBDWUFQQV9TTUJVU19SRVNFVCAgICAgICAgIFNNQlVTX0JZVEVfQ01EKENNRF9SRVNFVCkKKyNkZWZpbmUgQ1lBUEFfU01CVVNfUE9XRVJfTU9ERSAgICBTTUJVU19CWVRFX0NNRChDTURfUE9XRVJfTU9ERSkKKyNkZWZpbmUgQ1lBUEFfU01CVVNfREVWX1NUQVRVUyAgICBTTUJVU19CWVRFX0NNRChDTURfREVWX1NUQVRVUykKKyNkZWZpbmUgQ1lBUEFfU01CVVNfTUFYX0JBU0VMSU5FICBTTUJVU19CWVRFX0NNRChDTURfUkVQT1JUX01BWF9CQVNFTElORSkKKyNkZWZpbmUgQ1lBUEFfU01CVVNfTUlOX0JBU0VMSU5FICBTTUJVU19CWVRFX0NNRChDTURfUkVQT1JUX01JTl9CQVNFTElORSkKKworIC8qIGZvciBncm91cCByZWdpc3RlcnMgcmVhZC93cml0ZSBjb21tYW5kICovCisjZGVmaW5lIFJFR19HUk9VUF9EQVRBICAwCisjZGVmaW5lIFJFR19HUk9VUF9DTUQgICAyCisjZGVmaW5lIFJFR19HUk9VUF9RVUVSWSAzCisjZGVmaW5lIFNNQlVTX0dST1VQX0NNRChncnApICgweDgwIHwgKCgoZ3JwKSAmIDB4MDcpIDw8IDMpKQorI2RlZmluZSBDWUFQQV9TTUJVU19HUk9VUF9EQVRBICBTTUJVU19HUk9VUF9DTUQoUkVHX0dST1VQX0RBVEEpCisjZGVmaW5lIENZQVBBX1NNQlVTX0dST1VQX0NNRCAgIFNNQlVTX0dST1VQX0NNRChSRUdfR1JPVVBfQ01EKQorI2RlZmluZSBDWUFQQV9TTUJVU19HUk9VUF9RVUVSWSBTTUJVU19HUk9VUF9DTUQoUkVHX0dST1VQX1FVRVJZKQorCisgLyogZm9yIHJlZ2lzdGVyIGJsb2NrIHJlYWQvd3JpdGUgY29tbWFuZCAqLworI2RlZmluZSBDTURfQkxfU1RBVFVTCQkwCisjZGVmaW5lIENNRF9CTF9IRUFECQkxCisjZGVmaW5lIENNRF9CTF9DTUQJCTIKKyNkZWZpbmUgQ01EX0JMX0RBVEEJCTMKKyNkZWZpbmUgQ01EX0JMX0FMTAkJNAorI2RlZmluZSBDTURfQkxLX1BST0RVQ1RfSUQJNQorI2RlZmluZSBDTURfQkxLX0hFQUQJCTYKKyNkZWZpbmUgU01CVVNfQkxPQ0tfQ01EKGNtZCkgKDB4YzAgfCAoKChjbWQpICYgMHgxZikgPDwgMSkpCisKKy8qIHJlZ2lzdGVyIGJsb2NrIHJlYWQvd3JpdGUgY29tbWFuZCBpbiBib290bG9hZGVyIG1vZGUgKi8KKyNkZWZpbmUgQ1lBUEFfU01CVVNfQkxfU1RBVFVTIFNNQlVTX0JMT0NLX0NNRChDTURfQkxfU1RBVFVTKQorI2RlZmluZSBDWUFQQV9TTUJVU19CTF9IRUFEICAgU01CVVNfQkxPQ0tfQ01EKENNRF9CTF9IRUFEKQorI2RlZmluZSBDWUFQQV9TTUJVU19CTF9DTUQgICAgU01CVVNfQkxPQ0tfQ01EKENNRF9CTF9DTUQpCisjZGVmaW5lIENZQVBBX1NNQlVTX0JMX0RBVEEgICBTTUJVU19CTE9DS19DTUQoQ01EX0JMX0RBVEEpCisjZGVmaW5lIENZQVBBX1NNQlVTX0JMX0FMTCAgICBTTUJVU19CTE9DS19DTUQoQ01EX0JMX0FMTCkKKworLyogcmVnaXN0ZXIgYmxvY2sgcmVhZC93cml0ZSBjb21tYW5kIGluIG9wZXJhdGlvbmFsIG1vZGUgKi8KKyNkZWZpbmUgQ1lBUEFfU01CVVNfQkxLX1BST0RVQ1RfSUQgU01CVVNfQkxPQ0tfQ01EKENNRF9CTEtfUFJPRFVDVF9JRCkKKyNkZWZpbmUgQ1lBUEFfU01CVVNfQkxLX0hFQUQgICAgICAgU01CVVNfQkxPQ0tfQ01EKENNRF9CTEtfSEVBRCkKKworc3RydWN0IGN5YXBhX2NtZF9sZW4geworCXU4IGNtZDsKKwl1OCBsZW47Cit9OworCisvKiBtYXBzIGdlbmVyaWMgQ1lBUEFfQ01EXyogY29kZSB0byB0aGUgSTJDIGVxdWl2YWxlbnQgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3lhcGFfY21kX2xlbiBjeWFwYV9pMmNfY21kc1tdID0geworCXsgQ1lBUEFfT0ZGU0VUX1NPRlRfUkVTRVQsIDEgfSwJCS8qIENZQVBBX0NNRF9TT0ZUX1JFU0VUICovCisJeyBSRUdfT0ZGU0VUX0NPTU1BTkRfQkFTRSArIDEsIDEgfSwJLyogQ1lBUEFfQ01EX1BPV0VSX01PREUgKi8KKwl7IFJFR19PRkZTRVRfREFUQV9CQVNFLCAxIH0sCQkvKiBDWUFQQV9DTURfREVWX1NUQVRVUyAqLworCXsgUkVHX09GRlNFVF9EQVRBX0JBU0UsIHNpemVvZihzdHJ1Y3QgY3lhcGFfcmVnX2RhdGEpIH0sCisJCQkJCQkvKiBDWUFQQV9DTURfR1JPVVBfREFUQSAqLworCXsgUkVHX09GRlNFVF9DT01NQU5EX0JBU0UsIDAgfSwJCS8qIENZQVBBX0NNRF9HUk9VUF9DTUQgKi8KKwl7IFJFR19PRkZTRVRfUVVFUllfQkFTRSwgUVVFUllfREFUQV9TSVpFIH0sIC8qIENZQVBBX0NNRF9HUk9VUF9RVUVSWSAqLworCXsgQkxfSEVBRF9PRkZTRVQsIDMgfSwJCQkvKiBDWUFQQV9DTURfQkxfU1RBVFVTICovCisJeyBCTF9IRUFEX09GRlNFVCwgMTYgfSwJCQkvKiBDWUFQQV9DTURfQkxfSEVBRCAqLworCXsgQkxfSEVBRF9PRkZTRVQsIDE2IH0sCQkJLyogQ1lBUEFfQ01EX0JMX0NNRCAqLworCXsgQkxfREFUQV9PRkZTRVQsIDE2IH0sCQkJLyogQ1lBUEFfQ01EX0JMX0RBVEEgKi8KKwl7IEJMX0hFQURfT0ZGU0VULCAzMiB9LAkJCS8qIENZQVBBX0NNRF9CTF9BTEwgKi8KKwl7IFJFR19PRkZTRVRfUVVFUllfQkFTRSwgUFJPRFVDVF9JRF9TSVpFIH0sCisJCQkJCQkvKiBDWUFQQV9DTURfQkxLX1BST0RVQ1RfSUQgKi8KKwl7IFJFR19PRkZTRVRfREFUQV9CQVNFLCAzMiB9LAkJLyogQ1lBUEFfQ01EX0JMS19IRUFEICovCisJeyBSRUdfT0ZGU0VUX01BWF9CQVNFTElORSwgMSB9LAkJLyogQ1lBUEFfQ01EX01BWF9CQVNFTElORSAqLworCXsgUkVHX09GRlNFVF9NSU5fQkFTRUxJTkUsIDEgfSwJCS8qIENZQVBBX0NNRF9NSU5fQkFTRUxJTkUgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3lhcGFfY21kX2xlbiBjeWFwYV9zbWJ1c19jbWRzW10gPSB7CisJeyBDWUFQQV9TTUJVU19SRVNFVCwgMSB9LAkJLyogQ1lBUEFfQ01EX1NPRlRfUkVTRVQgKi8KKwl7IENZQVBBX1NNQlVTX1BPV0VSX01PREUsIDEgfSwJCS8qIENZQVBBX0NNRF9QT1dFUl9NT0RFICovCisJeyBDWUFQQV9TTUJVU19ERVZfU1RBVFVTLCAxIH0sCQkvKiBDWUFQQV9DTURfREVWX1NUQVRVUyAqLworCXsgQ1lBUEFfU01CVVNfR1JPVVBfREFUQSwgc2l6ZW9mKHN0cnVjdCBjeWFwYV9yZWdfZGF0YSkgfSwKKwkJCQkJCS8qIENZQVBBX0NNRF9HUk9VUF9EQVRBICovCisJeyBDWUFQQV9TTUJVU19HUk9VUF9DTUQsIDIgfSwJCS8qIENZQVBBX0NNRF9HUk9VUF9DTUQgKi8KKwl7IENZQVBBX1NNQlVTX0dST1VQX1FVRVJZLCBRVUVSWV9EQVRBX1NJWkUgfSwKKwkJCQkJCS8qIENZQVBBX0NNRF9HUk9VUF9RVUVSWSAqLworCXsgQ1lBUEFfU01CVVNfQkxfU1RBVFVTLCAzIH0sCQkvKiBDWUFQQV9DTURfQkxfU1RBVFVTICovCisJeyBDWUFQQV9TTUJVU19CTF9IRUFELCAxNiB9LAkJLyogQ1lBUEFfQ01EX0JMX0hFQUQgKi8KKwl7IENZQVBBX1NNQlVTX0JMX0NNRCwgMTYgfSwJCS8qIENZQVBBX0NNRF9CTF9DTUQgKi8KKwl7IENZQVBBX1NNQlVTX0JMX0RBVEEsIDE2IH0sCQkvKiBDWUFQQV9DTURfQkxfREFUQSAqLworCXsgQ1lBUEFfU01CVVNfQkxfQUxMLCAzMiB9LAkJLyogQ1lBUEFfQ01EX0JMX0FMTCAqLworCXsgQ1lBUEFfU01CVVNfQkxLX1BST0RVQ1RfSUQsIFBST0RVQ1RfSURfU0laRSB9LAorCQkJCQkJLyogQ1lBUEFfQ01EX0JMS19QUk9EVUNUX0lEICovCisJeyBDWUFQQV9TTUJVU19CTEtfSEVBRCwgMTYgfSwJCS8qIENZQVBBX0NNRF9CTEtfSEVBRCAqLworCXsgQ1lBUEFfU01CVVNfTUFYX0JBU0VMSU5FLCAxIH0sCS8qIENZQVBBX0NNRF9NQVhfQkFTRUxJTkUgKi8KKwl7IENZQVBBX1NNQlVTX01JTl9CQVNFTElORSwgMSB9LAkvKiBDWUFQQV9DTURfTUlOX0JBU0VMSU5FICovCit9OworCisKKy8qCisgKiBjeWFwYV9zbWJ1c19yZWFkX2Jsb2NrIC0gcGVyZm9ybSBzbWJ1cyBibG9jayByZWFkIGNvbW1hbmQKKyAqIEBjeWFwYSAgLSBwcml2YXRlIGRhdGEgc3RydWN0dXJlIG9mIHRoZSBkcml2ZXIKKyAqIEBjbWQgICAgLSB0aGUgcHJvcGVybHkgZW5jb2RlZCBzbWJ1cyBjb21tYW5kCisgKiBAbGVuICAgIC0gZXhwZWN0ZWQgbGVuZ3RoIG9mIHNtYnVzIGNvbW1hbmQgcmVzdWx0CisgKiBAdmFsdWVzIC0gYnVmZmVyIHRvIHN0b3JlIHNtYnVzIGNvbW1hbmQgcmVzdWx0CisgKgorICogUmV0dXJucyBuZWdhdGl2ZSBlcnJubywgZWxzZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uCisgKgorICogTm90ZToKKyAqIEluIHRyYWNrcGFkIGRldmljZSwgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0ZWQgZm9yIEkyQyByZWdpc3RlciBtYXAKKyAqIGlzIDI1NiBieXRlcywgc28gdGhlIG1heCByZWFkIGJsb2NrIGZvciBJMkMgYnVzIGlzIDI1NiBieXRlcy4KKyAqLworc3NpemVfdCBjeWFwYV9zbWJ1c19yZWFkX2Jsb2NrKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4IGNtZCwgc2l6ZV90IGxlbiwKKwkJCQkgICAgICB1OCAqdmFsdWVzKQoreworCXNzaXplX3QgcmV0OworCXU4IGluZGV4OworCXU4IHNtYnVzX2NtZDsKKwl1OCAqYnVmOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjeWFwYS0+Y2xpZW50OworCisJaWYgKCEoU01CVVNfQllURV9CTE9DS19DTURfTUFTSyAmIGNtZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKFNNQlVTX0dST1VQX0JMT0NLX0NNRF9NQVNLICYgY21kKSB7CisJCS8qIHJlYWQgc3BlY2lmaWMgYmxvY2sgcmVnaXN0ZXJzIGNvbW1hbmQuICovCisJCXNtYnVzX2NtZCA9IFNNQlVTX0VOQ09ERV9SVyhjbWQsIFNNQlVTX1JFQUQpOworCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ibG9ja19kYXRhKGNsaWVudCwgc21idXNfY21kLCB2YWx1ZXMpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSAwOworCWZvciAoaW5kZXggPSAwOyBpbmRleCAqIEkyQ19TTUJVU19CTE9DS19NQVggPCBsZW47IGluZGV4KyspIHsKKwkJc21idXNfY21kID0gU01CVVNfRU5DT0RFX0lEWChjbWQsIGluZGV4KTsKKwkJc21idXNfY21kID0gU01CVVNfRU5DT0RFX1JXKHNtYnVzX2NtZCwgU01CVVNfUkVBRCk7CisJCWJ1ZiA9IHZhbHVlcyArIEkyQ19TTUJVU19CTE9DS19NQVggKiBpbmRleDsKKwkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYmxvY2tfZGF0YShjbGllbnQsIHNtYnVzX2NtZCwgYnVmKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0ID4gMCA/IGxlbiA6IHJldDsKK30KKworc3RhdGljIHMzMiBjeWFwYV9yZWFkX2J5dGUoc3RydWN0IGN5YXBhICpjeWFwYSwgdTggY21kX2lkeCkKK3sKKwl1OCBjbWQ7CisKKwlpZiAoY3lhcGEtPnNtYnVzKSB7CisJCWNtZCA9IGN5YXBhX3NtYnVzX2NtZHNbY21kX2lkeF0uY21kOworCQljbWQgPSBTTUJVU19FTkNPREVfUlcoY21kLCBTTUJVU19SRUFEKTsKKwl9IGVsc2UgeworCQljbWQgPSBjeWFwYV9pMmNfY21kc1tjbWRfaWR4XS5jbWQ7CisJfQorCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY3lhcGEtPmNsaWVudCwgY21kKTsKK30KKworc3RhdGljIHMzMiBjeWFwYV93cml0ZV9ieXRlKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4IGNtZF9pZHgsIHU4IHZhbHVlKQoreworCXU4IGNtZDsKKworCWlmIChjeWFwYS0+c21idXMpIHsKKwkJY21kID0gY3lhcGFfc21idXNfY21kc1tjbWRfaWR4XS5jbWQ7CisJCWNtZCA9IFNNQlVTX0VOQ09ERV9SVyhjbWQsIFNNQlVTX1dSSVRFKTsKKwl9IGVsc2UgeworCQljbWQgPSBjeWFwYV9pMmNfY21kc1tjbWRfaWR4XS5jbWQ7CisJfQorCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGN5YXBhLT5jbGllbnQsIGNtZCwgdmFsdWUpOworfQorCitzc2l6ZV90IGN5YXBhX2kyY19yZWdfcmVhZF9ibG9jayhzdHJ1Y3QgY3lhcGEgKmN5YXBhLCB1OCByZWcsIHNpemVfdCBsZW4sCisJCQkJCXU4ICp2YWx1ZXMpCit7CisJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2kyY19ibG9ja19kYXRhKGN5YXBhLT5jbGllbnQsIHJlZywgbGVuLCB2YWx1ZXMpOworfQorCitzdGF0aWMgc3NpemVfdCBjeWFwYV9pMmNfcmVnX3dyaXRlX2Jsb2NrKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4IHJlZywKKwkJCQkJIHNpemVfdCBsZW4sIGNvbnN0IHU4ICp2YWx1ZXMpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9pMmNfYmxvY2tfZGF0YShjeWFwYS0+Y2xpZW50LCByZWcsIGxlbiwgdmFsdWVzKTsKK30KKworc3NpemVfdCBjeWFwYV9yZWFkX2Jsb2NrKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4IGNtZF9pZHgsIHU4ICp2YWx1ZXMpCit7CisJdTggY21kOworCXNpemVfdCBsZW47CisKKwlpZiAoY3lhcGEtPnNtYnVzKSB7CisJCWNtZCA9IGN5YXBhX3NtYnVzX2NtZHNbY21kX2lkeF0uY21kOworCQlsZW4gPSBjeWFwYV9zbWJ1c19jbWRzW2NtZF9pZHhdLmxlbjsKKwkJcmV0dXJuIGN5YXBhX3NtYnVzX3JlYWRfYmxvY2soY3lhcGEsIGNtZCwgbGVuLCB2YWx1ZXMpOworCX0KKwljbWQgPSBjeWFwYV9pMmNfY21kc1tjbWRfaWR4XS5jbWQ7CisJbGVuID0gY3lhcGFfaTJjX2NtZHNbY21kX2lkeF0ubGVuOworCXJldHVybiBjeWFwYV9pMmNfcmVnX3JlYWRfYmxvY2soY3lhcGEsIGNtZCwgbGVuLCB2YWx1ZXMpOworfQorCisvKgorICogRGV0ZXJtaW5lIHRoZSBHZW4zIHRyYWNrcGFkIGRldmljZSdzIGN1cnJlbnQgb3BlcmF0aW5nIHN0YXRlLgorICoKKyAqLworc3RhdGljIGludCBjeWFwYV9nZW4zX3N0YXRlX3BhcnNlKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4ICpyZWdfZGF0YSwgaW50IGxlbikKK3sKKwljeWFwYS0+c3RhdGUgPSBDWUFQQV9TVEFURV9OT19ERVZJQ0U7CisKKwkvKiBQYXJzZSBiYXNlZCBvbiBHZW4zIGNoYXJhY3RlcmlzdGljIHJlZ2lzdGVycyBhbmQgYml0cyAqLworCWlmIChyZWdfZGF0YVtSRUdfQkxfRklMRV0gPT0gQkxfRklMRSAmJgorCQlyZWdfZGF0YVtSRUdfQkxfRVJST1JdID09IEJMX0VSUk9SX05PX0VSUl9JRExFICYmCisJCShyZWdfZGF0YVtSRUdfQkxfU1RBVFVTXSA9PQorCQkJKEJMX1NUQVRVU19SVU5OSU5HIHwgQkxfU1RBVFVTX0NTVU1fVkFMSUQpIHx8CisJCQlyZWdfZGF0YVtSRUdfQkxfU1RBVFVTXSA9PSBCTF9TVEFUVVNfUlVOTklORykpIHsKKwkJLyoKKwkJICogTm9ybWFsIHN0YXRlIGFmdGVyIHBvd2VyIG9uIG9yIHJlc2V0LAorCQkgKiBSRUdfQkxfU1RBVFVTID09IDB4MTEsIGZpcm13YXJlIGltYWdlIGNoZWNrc3VtIGlzIHZhbGlkLgorCQkgKiBSRUdfQkxfU1RBVFVTID09IDB4MTAsIGZpcm13YXJlIGltYWdlIGNoZWNrc3VtIGlzIGludmFsaWQuCisJCSAqLworCQljeWFwYS0+Z2VuID0gQ1lBUEFfR0VOMzsKKwkJY3lhcGEtPnN0YXRlID0gQ1lBUEFfU1RBVEVfQkxfSURMRTsKKwl9IGVsc2UgaWYgKHJlZ19kYXRhW1JFR19CTF9GSUxFXSA9PSBCTF9GSUxFICYmCisJCShyZWdfZGF0YVtSRUdfQkxfU1RBVFVTXSAmIEJMX1NUQVRVU19SVU5OSU5HKSA9PQorCQkJQkxfU1RBVFVTX1JVTk5JTkcpIHsKKwkJY3lhcGEtPmdlbiA9IENZQVBBX0dFTjM7CisJCWlmIChyZWdfZGF0YVtSRUdfQkxfU1RBVFVTXSAmIEJMX1NUQVRVU19CVVNZKSB7CisJCQljeWFwYS0+c3RhdGUgPSBDWUFQQV9TVEFURV9CTF9CVVNZOworCQl9IGVsc2UgeworCQkJaWYgKChyZWdfZGF0YVtSRUdfQkxfRVJST1JdICYgQkxfRVJST1JfQk9PVExPQURJTkcpID09CisJCQkJCUJMX0VSUk9SX0JPT1RMT0FESU5HKQorCQkJCWN5YXBhLT5zdGF0ZSA9IENZQVBBX1NUQVRFX0JMX0FDVElWRTsKKwkJCWVsc2UKKwkJCQljeWFwYS0+c3RhdGUgPSBDWUFQQV9TVEFURV9CTF9JRExFOworCQl9CisJfSBlbHNlIGlmICgocmVnX2RhdGFbUkVHX09QX1NUQVRVU10gJiBPUF9TVEFUVVNfU1JDKSAmJgorCQkJKHJlZ19kYXRhW1JFR19PUF9EQVRBMV0gJiBPUF9EQVRBX1ZBTElEKSkgeworCQkvKgorCQkgKiBOb3JtYWwgc3RhdGUgd2hlbiBydW5uaW5nIGluIG9wZXJhdGlvbmFsIG1vZGUsCisJCSAqIG1heSBhbHNvIG5vdCBpbiBmdWxsIHBvd2VyIHN0YXRlIG9yCisJCSAqIGJ1c3lpbmcgaW4gY29tbWFuZCBwcm9jZXNzLgorCQkgKi8KKwkJaWYgKEdFTjNfRklOR0VSX05VTShyZWdfZGF0YVtSRUdfT1BfREFUQTFdKSA8PQorCQkJCUdFTjNfTUFYX0ZJTkdFUlMpIHsKKwkJCS8qIEZpbmdlciBudW1iZXIgZGF0YSBpcyB2YWxpZC4gKi8KKwkJCWN5YXBhLT5nZW4gPSBDWUFQQV9HRU4zOworCQkJY3lhcGEtPnN0YXRlID0gQ1lBUEFfU1RBVEVfT1A7CisJCX0KKwl9IGVsc2UgaWYgKHJlZ19kYXRhW1JFR19PUF9TVEFUVVNdID09IDB4MEMgJiYKKwkJCXJlZ19kYXRhW1JFR19PUF9EQVRBMV0gPT0gMHgwOCkgeworCQkvKiBPcCBzdGF0ZSB3aGVuIGZpcnN0IHR3byByZWdpc3RlcnMgb3ZlcndyaXR0ZW4gd2l0aCAweDAwICovCisJCWN5YXBhLT5nZW4gPSBDWUFQQV9HRU4zOworCQljeWFwYS0+c3RhdGUgPSBDWUFQQV9TVEFURV9PUDsKKwl9IGVsc2UgaWYgKHJlZ19kYXRhW1JFR19CTF9TVEFUVVNdICYKKwkJCShCTF9TVEFUVVNfUlVOTklORyB8IEJMX1NUQVRVU19CVVNZKSkgeworCQljeWFwYS0+Z2VuID0gQ1lBUEFfR0VOMzsKKwkJY3lhcGEtPnN0YXRlID0gQ1lBUEFfU1RBVEVfQkxfQlVTWTsKKwl9CisKKwlpZiAoY3lhcGEtPmdlbiA9PSBDWUFQQV9HRU4zICYmIChjeWFwYS0+c3RhdGUgPT0gQ1lBUEFfU1RBVEVfT1AgfHwKKwkJY3lhcGEtPnN0YXRlID09IENZQVBBX1NUQVRFX0JMX0lETEUgfHwKKwkJY3lhcGEtPnN0YXRlID09IENZQVBBX1NUQVRFX0JMX0FDVElWRSB8fAorCQljeWFwYS0+c3RhdGUgPT0gQ1lBUEFfU1RBVEVfQkxfQlVTWSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FQUdBSU47Cit9CisKKy8qCisgKiBFbnRlciBib290bG9hZGVyIGJ5IHNvZnQgcmVzZXR0aW5nIHRoZSBkZXZpY2UuCisgKgorICogSWYgZGV2aWNlIGlzIGFscmVhZHkgaW4gdGhlIGJvb3Rsb2FkZXIsIHRoZSBmdW5jdGlvbiBqdXN0IHJldHVybnMuCisgKiBPdGhlcndpc2UsIHJlc2V0IHRoZSBkZXZpY2U7IGFmdGVyIHJlc2V0LCBkZXZpY2UgZW50ZXJzIGJvb3Rsb2FkZXIgaWRsZQorICogc3RhdGUgaW1tZWRpYXRlbHkuCisgKgorICogUmV0dXJuczoKKyAqICAgMCAgICAgICAgb24gc3VjY2VzcworICogICAtRUFHQUlOICBkZXZpY2Ugd2FzIHJlc2V0LCBidXQgaXMgbm90IG5vdyBpbiBib290bG9hZGVyIGlkbGUgc3RhdGUKKyAqICAgPCAwICAgICAgaWYgdGhlIGRldmljZSBuZXZlciByZXNwb25kcyB3aXRoaW4gdGhlIHRpbWVvdXQKKyAqLworc3RhdGljIGludCBjeWFwYV9nZW4zX2JsX2VudGVyKHN0cnVjdCBjeWFwYSAqY3lhcGEpCit7CisJaW50IGVycm9yOworCWludCB3YWl0aW5nX3RpbWU7CisKKwllcnJvciA9IGN5YXBhX3BvbGxfc3RhdGUoY3lhcGEsIDUwMCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJaWYgKGN5YXBhLT5zdGF0ZSA9PSBDWUFQQV9TVEFURV9CTF9JRExFKSB7CisJCS8qIEFscmVhZHkgaW4gQkxfSURMRS4gU2tpcHBpbmcgcmVzZXQuICovCisJCXJldHVybiAwOworCX0KKworCWlmIChjeWFwYS0+c3RhdGUgIT0gQ1lBUEFfU1RBVEVfT1ApCisJCXJldHVybiAtRUFHQUlOOworCisJY3lhcGEtPm9wZXJhdGlvbmFsID0gZmFsc2U7CisJY3lhcGEtPnN0YXRlID0gQ1lBUEFfU1RBVEVfTk9fREVWSUNFOworCWVycm9yID0gY3lhcGFfd3JpdGVfYnl0ZShjeWFwYSwgQ1lBUEFfQ01EX1NPRlRfUkVTRVQsIDB4MDEpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIC1FSU87CisKKwl1c2xlZXBfcmFuZ2UoMjUwMDAsIDUwMDAwKTsKKwl3YWl0aW5nX3RpbWUgPSAyMDAwOyAgLyogRm9yIHNvbWUgc2hpcHNldCwgbWF4IHdhaXRpbmcgdGltZSBpcyAxfjJzLiAqLworCWRvIHsKKwkJZXJyb3IgPSBjeWFwYV9wb2xsX3N0YXRlKGN5YXBhLCA1MDApOworCQlpZiAoZXJyb3IpIHsKKwkJCWlmIChlcnJvciA9PSAtRVRJTUVET1VUKSB7CisJCQkJd2FpdGluZ190aW1lIC09IDUwMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJCWlmICgoY3lhcGEtPnN0YXRlID09IENZQVBBX1NUQVRFX0JMX0lETEUpICYmCisJCQkhKGN5YXBhLT5zdGF0dXNbUkVHX0JMX1NUQVRVU10gJiBCTF9TVEFUVVNfV0FUQ0hET0cpKQorCQkJYnJlYWs7CisKKwkJbXNsZWVwKDEwMCk7CisJCXdhaXRpbmdfdGltZSAtPSAxMDA7CisJfSB3aGlsZSAod2FpdGluZ190aW1lID4gMCk7CisKKwlpZiAoKGN5YXBhLT5zdGF0ZSAhPSBDWUFQQV9TVEFURV9CTF9JRExFKSB8fAorCQkoY3lhcGEtPnN0YXR1c1tSRUdfQkxfU1RBVFVTXSAmIEJMX1NUQVRVU19XQVRDSERPRykpCisJCXJldHVybiAtRUFHQUlOOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZ2VuM19ibF9hY3RpdmF0ZShzdHJ1Y3QgY3lhcGEgKmN5YXBhKQoreworCWludCBlcnJvcjsKKworCWVycm9yID0gY3lhcGFfaTJjX3JlZ193cml0ZV9ibG9jayhjeWFwYSwgMCwgc2l6ZW9mKGJsX2FjdGl2YXRlKSwKKwkJCQkJYmxfYWN0aXZhdGUpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJLyogV2FpdCBmb3IgYm9vdGxvYWRlciB0byBhY3RpdmF0ZTsgdGFrZXMgYmV0d2VlbiAyIGFuZCAxMiBzZWNvbmRzICovCisJbXNsZWVwKDIwMDApOworCWVycm9yID0gY3lhcGFfcG9sbF9zdGF0ZShjeWFwYSwgMTEwMDApOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCWlmIChjeWFwYS0+c3RhdGUgIT0gQ1lBUEFfU1RBVEVfQkxfQUNUSVZFKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN5YXBhX2dlbjNfYmxfZGVhY3RpdmF0ZShzdHJ1Y3QgY3lhcGEgKmN5YXBhKQoreworCWludCBlcnJvcjsKKworCWVycm9yID0gY3lhcGFfaTJjX3JlZ193cml0ZV9ibG9jayhjeWFwYSwgMCwgc2l6ZW9mKGJsX2RlYWN0aXZhdGUpLAorCQkJCQlibF9kZWFjdGl2YXRlKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCS8qIFdhaXQgZm9yIGJvb3Rsb2FkZXIgdG8gc3dpdGNoIHRvIGlkbGUgc3RhdGU7IHNob3VsZCB0YWtlIDwgMTAwbXMgKi8KKwltc2xlZXAoMTAwKTsKKwllcnJvciA9IGN5YXBhX3BvbGxfc3RhdGUoY3lhcGEsIDUwMCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJaWYgKGN5YXBhLT5zdGF0ZSAhPSBDWUFQQV9TVEFURV9CTF9JRExFKQorCQlyZXR1cm4gLUVBR0FJTjsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEV4aXQgYm9vdGxvYWRlcgorICoKKyAqIFNlbmQgYmxfZXhpdCBjb21tYW5kLCB0aGVuIHdhaXQgNTAgLSAxMDAgbXMgdG8gbGV0IGRldmljZSB0cmFuc2l0aW9uIHRvCisgKiBvcGVyYXRpb25hbCBtb2RlLiAgSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGUgZGV2aWNlJ3MgZmlybXdhcmUgaXMKKyAqIHJ1bm5pbmcsIGl0IGNhbiB0YWtlIHVwIHRvIDIgc2Vjb25kcyB0byBjYWxpYnJhdGUgaXRzIHNlbnNvcnMuICBTbywgcG9sbAorICogdGhlIGRldmljZSdzIG5ldyBzdGF0ZSBmb3IgdXAgdG8gMiBzZWNvbmRzLgorICoKKyAqIFJldHVybnM6CisgKiAgIC1FSU8gICAgZmFpbHVyZSB3aGlsZSByZWFkaW5nIGZyb20gZGV2aWNlCisgKiAgIC1FQUdBSU4gZGV2aWNlIGlzIHN0dWNrIGluIGJvb3Rsb2FkZXIsIGIvYyBpdCBoYXMgaW52YWxpZCBmaXJtd2FyZQorICogICAwICAgICAgIGRldmljZSBpcyBzdXBwb3J0ZWQgYW5kIGluIG9wZXJhdGlvbmFsIG1vZGUKKyAqLworc3RhdGljIGludCBjeWFwYV9nZW4zX2JsX2V4aXQoc3RydWN0IGN5YXBhICpjeWFwYSkKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGN5YXBhX2kyY19yZWdfd3JpdGVfYmxvY2soY3lhcGEsIDAsIHNpemVvZihibF9leGl0KSwgYmxfZXhpdCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwkvKgorCSAqIFdhaXQgZm9yIGJvb3Rsb2FkZXIgdG8gZXhpdCwgYW5kIG9wZXJhdGlvbiBtb2RlIHRvIHN0YXJ0LgorCSAqIE5vcm1hbGx5LCB0aGlzIHRha2VzIGF0IGxlYXN0IDUwIG1zLgorCSAqLworCXVzbGVlcF9yYW5nZSg1MDAwMCwgMTAwMDAwKTsKKwkvKgorCSAqIEluIGFkZGl0aW9uLCB3aGVuIGEgZGV2aWNlIGJvb3RzIGZvciB0aGUgZmlyc3QgdGltZSBhZnRlciBiZWluZworCSAqIHVwZGF0ZWQgdG8gbmV3IGZpcm13YXJlLCBpdCBtdXN0IGZpcnN0IGNhbGlicmF0ZSBpdHMgc2Vuc29ycywgd2hpY2gKKwkgKiBjYW4gdGFrZSB1cCB0byBhbiBhZGRpdGlvbmFsIDIgc2Vjb25kcy4gSWYgdGhlIGRldmljZSBwb3dlciBpcworCSAqIHJ1bm5pbmcgbG93LCB0aGlzIG1heSB0YWtlIGV2ZW4gbG9uZ2VyLgorCSAqLworCWVycm9yID0gY3lhcGFfcG9sbF9zdGF0ZShjeWFwYSwgNDAwMCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCWlmIChjeWFwYS0+c3RhdGUgIT0gQ1lBUEFfU1RBVEVfT1ApCisJCXJldHVybiAtRUFHQUlOOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MTYgY3lhcGFfZ2VuM19jc3VtKGNvbnN0IHU4ICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgaTsKKwl1MTYgY3N1bSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJY3N1bSArPSBidWZbaV07CisKKwlyZXR1cm4gY3N1bTsKK30KKworLyoKKyAqIFZlcmlmeSB0aGUgaW50ZWdyaXR5IG9mIGEgQ1lBUEEgZmlybXdhcmUgaW1hZ2UgZmlsZS4KKyAqCisgKiBUaGUgZmlybXdhcmUgaW1hZ2UgZmlsZSBpcyAzMDg0OCBieXRlcywgY29tcG9zZWQgb2YgNDgyIDY0LWJ5dGUgYmxvY2tzLgorICoKKyAqIFRoZSBmaXJzdCAyIGJsb2NrcyBhcmUgdGhlIGZpcm13YXJlIGhlYWRlci4KKyAqIFRoZSBuZXh0IDQ4MCBibG9ja3MgYXJlIHRoZSBmaXJtd2FyZSBpbWFnZS4KKyAqCisgKiBUaGUgZmlyc3QgdHdvIGJ5dGVzIG9mIHRoZSBoZWFkZXIgaG9sZCB0aGUgaGVhZGVyIGNoZWNrc3VtLCBjb21wdXRlZCBieQorICogc3VtbWluZyB0aGUgb3RoZXIgMTI2IGJ5dGVzIG9mIHRoZSBoZWFkZXIuCisgKiBUaGUgbGFzdCB0d28gYnl0ZXMgb2YgdGhlIGhlYWRlciBob2xkIHRoZSBmaXJtd2FyZSBpbWFnZSBjaGVja3N1bSwgY29tcHV0ZWQKKyAqIGJ5IHN1bW1pbmcgdGhlIDMwNzIwIGJ5dGVzIG9mIHRoZSBpbWFnZSBtb2R1bG8gMHhmZmZmLgorICoKKyAqIEJvdGggY2hlY2tzdW1zIGFyZSBzdG9yZWQgbGl0dGxlLWVuZGlhbi4KKyAqLworc3RhdGljIGludCBjeWFwYV9nZW4zX2NoZWNrX2Z3KHN0cnVjdCBjeWFwYSAqY3lhcGEsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmN5YXBhLT5jbGllbnQtPmRldjsKKwl1MTYgY3N1bTsKKwl1MTYgY3N1bV9leHBlY3RlZDsKKworCS8qIEZpcm13YXJlIG11c3QgbWF0Y2ggZXhhY3QgMzA4NDggYnl0ZXMgPSA0ODIgNjQtYnl0ZSBibG9ja3MuICovCisJaWYgKGZ3LT5zaXplICE9IENZQVBBX0ZXX1NJWkUpIHsKKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIGZpcm13YXJlIHNpemUgPSAlenUsIGV4cGVjdGVkICV1LlxuIiwKKwkJCWZ3LT5zaXplLCBDWUFQQV9GV19TSVpFKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogVmVyaWZ5IGhlYWRlciBibG9jayAqLworCWNzdW1fZXhwZWN0ZWQgPSAoZnctPmRhdGFbMF0gPDwgOCkgfCBmdy0+ZGF0YVsxXTsKKwljc3VtID0gY3lhcGFfZ2VuM19jc3VtKCZmdy0+ZGF0YVsyXSwgQ1lBUEFfRldfSERSX1NJWkUgLSAyKTsKKwlpZiAoY3N1bSAhPSBjc3VtX2V4cGVjdGVkKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgJTA0eCwgZXhwZWN0ZWQ6ICUwNHhcbiIsCisJCQkiaW52YWxpZCBmaXJtd2FyZSBoZWFkZXIgY2hlY2tzdW0gPSAiLAorCQkJY3N1bSwgY3N1bV9leHBlY3RlZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFZlcmlmeSBmaXJtd2FyZSBpbWFnZSAqLworCWNzdW1fZXhwZWN0ZWQgPSAoZnctPmRhdGFbQ1lBUEFfRldfSERSX1NJWkUgLSAyXSA8PCA4KSB8CisJCQkgZnctPmRhdGFbQ1lBUEFfRldfSERSX1NJWkUgLSAxXTsKKwljc3VtID0gY3lhcGFfZ2VuM19jc3VtKCZmdy0+ZGF0YVtDWUFQQV9GV19IRFJfU0laRV0sCisJCQlDWUFQQV9GV19EQVRBX1NJWkUpOworCWlmIChjc3VtICE9IGNzdW1fZXhwZWN0ZWQpIHsKKwkJZGV2X2VycihkZXYsICIlcyAlMDR4LCBleHBlY3RlZDogJTA0eFxuIiwKKwkJCSJpbnZhbGlkIGZpcm13YXJlIGhlYWRlciBjaGVja3N1bSA9ICIsCisJCQljc3VtLCBjc3VtX2V4cGVjdGVkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogV3JpdGUgYSB8bGVufCBieXRlIGxvbmcgYnVmZmVyIHxidWZ8IHRvIHRoZSBkZXZpY2UsIGJ5IGNob3BwaW5nIGl0IHVwIGludG8gYQorICogc2VxdWVuY2Ugb2Ygc21hbGxlciB8Q1lBUEFfQ01EX0xFTnwtbGVuZ3RoIHdyaXRlIGNvbW1hbmRzLgorICoKKyAqIFRoZSBkYXRhIGJ5dGVzIGZvciBhIHdyaXRlIGNvbW1hbmQgYXJlIHByZXBlbmRlZCB3aXRoIHRoZSAxLWJ5dGUgb2Zmc2V0CisgKiBvZiB0aGUgZGF0YSByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgfGJ1ZnwuCisgKi8KK3N0YXRpYyBpbnQgY3lhcGFfZ2VuM193cml0ZV9idWZmZXIoc3RydWN0IGN5YXBhICpjeWFwYSwKKwkJY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlpbnQgZXJyb3I7CisJc2l6ZV90IGk7CisJdW5zaWduZWQgY2hhciBjbWRbQ1lBUEFfQ01EX0xFTiArIDFdOworCXNpemVfdCBjbWRfbGVuOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBDWUFQQV9DTURfTEVOKSB7CisJCWNvbnN0IHU4ICpwYXlsb2FkID0gJmJ1ZltpXTsKKworCQljbWRfbGVuID0gKGxlbiAtIGkgPj0gQ1lBUEFfQ01EX0xFTikgPyBDWUFQQV9DTURfTEVOIDogbGVuIC0gaTsKKwkJY21kWzBdID0gaTsKKwkJbWVtY3B5KCZjbWRbMV0sIHBheWxvYWQsIGNtZF9sZW4pOworCisJCWVycm9yID0gY3lhcGFfaTJjX3JlZ193cml0ZV9ibG9jayhjeWFwYSwgMCwgY21kX2xlbiArIDEsIGNtZCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBIGZpcm13YXJlIGJsb2NrIHdyaXRlIGNvbW1hbmQgd3JpdGVzIDY0IGJ5dGVzIG9mIGRhdGEgdG8gYSBzaW5nbGUgZmxhc2gKKyAqIHBhZ2UgaW4gdGhlIGRldmljZS4gIFRoZSA3OC1ieXRlIGJsb2NrIHdyaXRlIGNvbW1hbmQgaGFzIHRoZSBmb3JtYXQ6CisgKiAgIDwweGZmPiA8Q01EPiA8S2V5PiA8U3RhcnQ+IDxEYXRhPiA8RGF0YS1DaGVja3N1bT4gPENNRCBDaGVja3N1bT4KKyAqCisgKiAgPDB4ZmY+ICAtIGV2ZXJ5IGNvbW1hbmQgc3RhcnRzIHdpdGggMHhmZgorICogIDxDTUQ+ICAgLSB0aGUgd3JpdGUgY29tbWFuZCB2YWx1ZSBpcyAweDM5CisgKiAgPEtleT4gICAtIHdyaXRlIGNvbW1hbmRzIGluY2x1ZGUgYW4gOC1ieXRlIGtleTogeyAwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyB9CisgKiAgPEJsb2NrPiAtIE1lbW9yeSBCbG9jayBudW1iZXIgKGFkZHJlc3MgLyA2NCkgKDE2LWJpdCwgYmlnLWVuZGlhbikKKyAqICA8RGF0YT4gIC0gNjQgYnl0ZXMgb2YgZmlybXdhcmUgaW1hZ2UgZGF0YQorICogIDxEYXRhIENoZWNrc3VtPiAtIHN1bSBvZiA2NCA8RGF0YT4gYnl0ZXMsIG1vZHVsbyAweGZmCisgKiAgPENNRCBDaGVja3N1bT4gLSBzdW0gb2YgNzcgYnl0ZXMsIGZyb20gMHhmZiB0byA8RGF0YSBDaGVja3N1bT4KKyAqCisgKiBFYWNoIHdyaXRlIGNvbW1hbmQgaXMgc3BsaXQgaW50byA1IGkyYyB3cml0ZSB0cmFuc2FjdGlvbnMgb2YgdXAgdG8gMTYgYnl0ZXMuCisgKiBFYWNoIHRyYW5zYWN0aW9uIHN0YXJ0cyB3aXRoIGFuIGkyYyByZWdpc3RlciBvZmZzZXQ6ICgwMCwgMTAsIDIwLCAzMCwgNDApLgorICovCitzdGF0aWMgaW50IGN5YXBhX2dlbjNfd3JpdGVfZndfYmxvY2soc3RydWN0IGN5YXBhICpjeWFwYSwKKwkJdTE2IGJsb2NrLCBjb25zdCB1OCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBnZW4zX3dyaXRlX2Jsb2NrX2NtZCB3cml0ZV9ibG9ja19jbWQ7CisJdTggc3RhdHVzW0JMX1NUQVRVU19TSVpFXTsKKwlpbnQgdHJpZXM7CisJdTggYmxfc3RhdHVzLCBibF9lcnJvcjsKKworCS8qIFNldCB3cml0ZSBjb21tYW5kIGFuZCBzZWN1cml0eSBrZXkgYnl0ZXMuICovCisJd3JpdGVfYmxvY2tfY21kLmNoZWNrc3VtX3NlZWQgPSBHRU4zX0JMX0NNRF9DSEVDS1NVTV9TRUVEOworCXdyaXRlX2Jsb2NrX2NtZC5jbWRfY29kZSA9IEdFTjNfQkxfQ01EX1dSSVRFX0JMT0NLOworCW1lbWNweSh3cml0ZV9ibG9ja19jbWQua2V5LCBzZWN1cml0eV9rZXksIHNpemVvZihzZWN1cml0eV9rZXkpKTsKKwlwdXRfdW5hbGlnbmVkX2JlMTYoYmxvY2ssICZ3cml0ZV9ibG9ja19jbWQuYmxvY2tfbnVtKTsKKwltZW1jcHkod3JpdGVfYmxvY2tfY21kLmJsb2NrX2RhdGEsIGRhdGEsIENZQVBBX0ZXX0JMT0NLX1NJWkUpOworCXdyaXRlX2Jsb2NrX2NtZC5ibG9ja19jaGVja3N1bSA9IGN5YXBhX2dlbjNfY3N1bSgKKwkJCXdyaXRlX2Jsb2NrX2NtZC5ibG9ja19kYXRhLCBDWUFQQV9GV19CTE9DS19TSVpFKTsKKwl3cml0ZV9ibG9ja19jbWQuY21kX2NoZWNrc3VtID0gY3lhcGFfZ2VuM19jc3VtKCh1OCAqKSZ3cml0ZV9ibG9ja19jbWQsCisJCQlzaXplb2Yod3JpdGVfYmxvY2tfY21kKSAtIDEpOworCisJcmV0ID0gY3lhcGFfZ2VuM193cml0ZV9idWZmZXIoY3lhcGEsICh1OCAqKSZ3cml0ZV9ibG9ja19jbWQsCisJCQlzaXplb2Yod3JpdGVfYmxvY2tfY21kKSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFdhaXQgZm9yIHdyaXRlIHRvIGZpbmlzaCAqLworCXRyaWVzID0gMTE7ICAvKiBQcm9ncmFtbWluZyBmb3Igb25lIGJsb2NrIGNhbiB0YWtlIGFib3V0IDEwMG1zLiAqLworCWRvIHsKKwkJdXNsZWVwX3JhbmdlKDEwMDAwLCAyMDAwMCk7CisKKwkJLyogQ2hlY2sgYmxvY2sgd3JpdGUgY29tbWFuZCByZXN1bHQgc3RhdHVzLiAqLworCQlyZXQgPSBjeWFwYV9pMmNfcmVnX3JlYWRfYmxvY2soY3lhcGEsIEJMX0hFQURfT0ZGU0VULAorCQkJCQkgICAgICAgQkxfU1RBVFVTX1NJWkUsIHN0YXR1cyk7CisJCWlmIChyZXQgIT0gQkxfU1RBVFVTX1NJWkUpCisJCQlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogLUVJTzsKKwl9IHdoaWxlICgoc3RhdHVzW1JFR19CTF9TVEFUVVNdICYgQkxfU1RBVFVTX0JVU1kpICYmIC0tdHJpZXMpOworCisJLyogSWdub3JlIFdBVENIRE9HIGJpdCBhbmQgcmVzZXJ2ZWQgYml0cy4gKi8KKwlibF9zdGF0dXMgPSBzdGF0dXNbUkVHX0JMX1NUQVRVU10gJiB+QkxfU1RBVFVTX1JFVl9NQVNLOworCWJsX2Vycm9yID0gc3RhdHVzW1JFR19CTF9FUlJPUl0gJiB+QkxfRVJST1JfUkVTRVJWRUQ7CisKKwlpZiAoYmxfc3RhdHVzICYgQkxfU1RBVFVTX0JVU1kpCisJCXJldCA9IC1FVElNRURPVVQ7CisJZWxzZSBpZiAoYmxfc3RhdHVzICE9IEJMX1NUQVRVU19SVU5OSU5HIHx8CisJCWJsX2Vycm9yICE9IEJMX0VSUk9SX0JPT1RMT0FESU5HKQorCQlyZXQgPSAtRUlPOworCWVsc2UKKwkJcmV0ID0gMDsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZ2VuM193cml0ZV9ibG9ja3Moc3RydWN0IGN5YXBhICpjeWFwYSwKKwkJc2l6ZV90IHN0YXJ0X2Jsb2NrLCBzaXplX3QgYmxvY2tfY291bnQsCisJCWNvbnN0IHU4ICppbWFnZV9kYXRhKQoreworCWludCBlcnJvcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBibG9ja19jb3VudDsgaSsrKSB7CisJCXNpemVfdCBibG9jayA9IHN0YXJ0X2Jsb2NrICsgaTsKKwkJc2l6ZV90IGFkZHIgPSBpICogQ1lBUEFfRldfQkxPQ0tfU0laRTsKKwkJY29uc3QgdTggKmRhdGEgPSAmaW1hZ2VfZGF0YVthZGRyXTsKKworCQllcnJvciA9IGN5YXBhX2dlbjNfd3JpdGVfZndfYmxvY2soY3lhcGEsIGJsb2NrLCBkYXRhKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeWFwYV9nZW4zX2RvX2Z3X3VwZGF0ZShzdHJ1Y3QgY3lhcGEgKmN5YXBhLAorCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjeWFwYS0+Y2xpZW50LT5kZXY7CisJaW50IGVycm9yOworCisJLyogRmlyc3Qgd3JpdGUgZGF0YSwgc3RhcnRpbmcgYXQgYnl0ZSAxMjggb2YgZnctPmRhdGEgKi8KKwllcnJvciA9IGN5YXBhX2dlbjNfd3JpdGVfYmxvY2tzKGN5YXBhLAorCQlDWUFQQV9GV19EQVRBX0JMT0NLX1NUQVJULCBDWUFQQV9GV19EQVRBX0JMT0NLX0NPVU5ULAorCQkmZnctPmRhdGFbQ1lBUEFfRldfSERSX0JMT0NLX0NPVU5UICogQ1lBUEFfRldfQkxPQ0tfU0laRV0pOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKGRldiwgIkZXIHVwZGF0ZSBhYm9ydGVkLCB3cml0ZSBpbWFnZTogJWRcbiIsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCS8qIFRoZW4gd3JpdGUgY2hlY2tzdW0gKi8KKwllcnJvciA9IGN5YXBhX2dlbjNfd3JpdGVfYmxvY2tzKGN5YXBhLAorCQlDWUFQQV9GV19IRFJfQkxPQ0tfU1RBUlQsIENZQVBBX0ZXX0hEUl9CTE9DS19DT1VOVCwKKwkJJmZ3LT5kYXRhWzBdKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycihkZXYsICJGVyB1cGRhdGUgYWJvcnRlZCwgd3JpdGUgY2hlY2tzdW06ICVkXG4iLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgY3lhcGFfZ2VuM19kb19jYWxpYnJhdGUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgY3lhcGEgKmN5YXBhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHRyaWVzOworCWludCByZXQ7CisKKwlyZXQgPSBjeWFwYV9yZWFkX2J5dGUoY3lhcGEsIENZQVBBX0NNRF9ERVZfU1RBVFVTKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkVycm9yIHJlYWRpbmcgZGV2IHN0YXR1czogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoKHJldCAmIENZQVBBX0RFVl9OT1JNQUwpICE9IENZQVBBX0RFVl9OT1JNQUwpIHsKKwkJZGV2X3dhcm4oZGV2LCAiVHJhY2twYWQgZGV2aWNlIGlzIGJ1c3ksIGRldmljZSBzdGF0ZTogMHglMDJ4XG4iLAorCQkJIHJldCk7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGN5YXBhX3dyaXRlX2J5dGUoY3lhcGEsIENZQVBBX0NNRF9TT0ZUX1JFU0VULAorCQkJICAgICAgIE9QX1JFQ0FMSUJSQVRJT05fTUFTSyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc2VuZCBjYWxpYnJhdGUgY29tbWFuZDogJWRcbiIsCisJCQlyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwl0cmllcyA9IDIwOyAgLyogbWF4IHJlY2FsaWJyYXRpb24gdGltZW91dCAycy4gKi8KKwlkbyB7CisJCS8qCisJCSAqIEZvciB0aGlzIHJlY2FsaWJyYXRpb24sIHRoZSBtYXggdGltZSB3aWxsIG5vdCBleGNlZWQgMnMuCisJCSAqIFRoZSBhdmVyYWdlIHRpbWUgaXMgYXBwcm94aW1hdGVseSA1MDAgLSA3MDAgbXMsIGFuZCB3ZQorCQkgKiB3aWxsIGNoZWNrIHRoZSBzdGF0dXMgZXZlcnkgMTAwIC0gMjAwbXMuCisJCSAqLworCQl1c2xlZXBfcmFuZ2UoMTAwMDAwLCAyMDAwMDApOworCisJCXJldCA9IGN5YXBhX3JlYWRfYnl0ZShjeWFwYSwgQ1lBUEFfQ01EX0RFVl9TVEFUVVMpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihkZXYsICJFcnJvciByZWFkaW5nIGRldiBzdGF0dXM6ICVkXG4iLAorCQkJCXJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoKHJldCAmIENZQVBBX0RFVl9OT1JNQUwpID09IENZQVBBX0RFVl9OT1JNQUwpCisJCQlicmVhazsKKwl9IHdoaWxlICgtLXRyaWVzKTsKKworCWlmICh0cmllcyA9PSAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGNhbGlicmF0ZS4gVGltZW91dC5cbiIpOworCQlyZXQgPSAtRVRJTUVET1VUOworCQlnb3RvIG91dDsKKwl9CisJZGV2X2RiZyhkZXYsICJDYWxpYnJhdGlvbiBzdWNjZXNzZnVsLlxuIik7CisKK291dDoKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBjeWFwYV9nZW4zX3Nob3dfYmFzZWxpbmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGN5YXBhICpjeWFwYSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBtYXhfYmFzZWxpbmUsIG1pbl9iYXNlbGluZTsKKwlpbnQgdHJpZXM7CisJaW50IHJldDsKKworCXJldCA9IGN5YXBhX3JlYWRfYnl0ZShjeWFwYSwgQ1lBUEFfQ01EX0RFVl9TVEFUVVMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiRXJyb3IgcmVhZGluZyBkZXYgc3RhdHVzLiBlcnIgPSAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCWlmICgocmV0ICYgQ1lBUEFfREVWX05PUk1BTCkgIT0gQ1lBUEFfREVWX05PUk1BTCkgeworCQlkZXZfd2FybihkZXYsICJUcmFja3BhZCBkZXZpY2UgaXMgYnVzeS4gZGV2aWNlIHN0YXRlID0gMHgleFxuIiwKKwkJCSByZXQpOworCQlyZXQgPSAtRUFHQUlOOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBjeWFwYV93cml0ZV9ieXRlKGN5YXBhLCBDWUFQQV9DTURfU09GVF9SRVNFVCwKKwkJCSAgICAgICBPUF9SRVBPUlRfQkFTRUxJTkVfTUFTSyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc2VuZCByZXBvcnQgYmFzZWxpbmUgY29tbWFuZC4gJWRcbiIsCisJCQlyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwl0cmllcyA9IDM7ICAvKiBUcnkgZm9yIDMwIHRvIDYwIG1zICovCisJZG8geworCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKKworCQlyZXQgPSBjeWFwYV9yZWFkX2J5dGUoY3lhcGEsIENZQVBBX0NNRF9ERVZfU1RBVFVTKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoZGV2LCAiRXJyb3IgcmVhZGluZyBkZXYgc3RhdHVzLiBlcnIgPSAlZFxuIiwKKwkJCQlyZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKChyZXQgJiBDWUFQQV9ERVZfTk9STUFMKSA9PSBDWUFQQV9ERVZfTk9STUFMKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoLS10cmllcyk7CisKKwlpZiAodHJpZXMgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgIkRldmljZSB0aW1lZCBvdXQgZ29pbmcgdG8gTm9ybWFsIHN0YXRlLlxuIik7CisJCXJldCA9IC1FVElNRURPVVQ7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGN5YXBhX3JlYWRfYnl0ZShjeWFwYSwgQ1lBUEFfQ01EX01BWF9CQVNFTElORSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCBtYXggYmFzZWxpbmUuIGVyciA9ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisJbWF4X2Jhc2VsaW5lID0gcmV0OworCisJcmV0ID0gY3lhcGFfcmVhZF9ieXRlKGN5YXBhLCBDWUFQQV9DTURfTUlOX0JBU0VMSU5FKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIG1pbiBiYXNlbGluZS4gZXJyID0gJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKwltaW5fYmFzZWxpbmUgPSByZXQ7CisKKwlkZXZfZGJnKGRldiwgIkJhc2VsaW5lIHJlcG9ydCBzdWNjZXNzZnVsLiBNYXg6ICVkIE1pbjogJWRcbiIsCisJCW1heF9iYXNlbGluZSwgbWluX2Jhc2VsaW5lKTsKKwlyZXQgPSBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZCAlZFxuIiwgbWF4X2Jhc2VsaW5lLCBtaW5fYmFzZWxpbmUpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGN5YXBhX2dldF93YWl0X3RpbWVfZm9yX3B3cl9jbWQKKyAqCisgKiBDb21wdXRlIHRoZSBhbW91bnQgb2YgdGltZSB3ZSBuZWVkIHRvIHdhaXQgYWZ0ZXIgdXBkYXRpbmcgdGhlIHRvdWNocGFkCisgKiBwb3dlciBtb2RlLiBUaGUgdG91Y2hwYWQgbmVlZHMgdG8gY29uc3VtZSB0aGUgaW5jb21pbmcgcG93ZXIgbW9kZSBzZXQKKyAqIGNvbW1hbmQgYXQgdGhlIGN1cnJlbnQgY2xvY2sgcmF0ZS4KKyAqLworCitzdGF0aWMgdTE2IGN5YXBhX2dldF93YWl0X3RpbWVfZm9yX3B3cl9jbWQodTggcHdyX21vZGUpCit7CisJc3dpdGNoIChwd3JfbW9kZSkgeworCWNhc2UgUFdSX01PREVfRlVMTF9BQ1RJVkU6IHJldHVybiAyMDsKKwljYXNlIFBXUl9NT0RFX0JUTl9PTkxZOiByZXR1cm4gMjA7CisJY2FzZSBQV1JfTU9ERV9PRkY6IHJldHVybiAyMDsKKwlkZWZhdWx0OiByZXR1cm4gY3lhcGFfcHdyX2NtZF90b19zbGVlcF90aW1lKHB3cl9tb2RlKSArIDUwOworCX0KK30KKworLyoKKyAqIFNldCBkZXZpY2UgcG93ZXIgbW9kZQorICoKKyAqIFdyaXRlIHRvIHRoZSBmaWVsZCB0byBjb25maWd1cmUgcG93ZXIgc3RhdGUuIFBvd2VyIHN0YXRlcyBpbmNsdWRlIDoKKyAqICAgRnVsbCA6IE1heCBzY2FucyBhbmQgcmVwb3J0IHJhdGUuCisgKiAgIElkbGUgOiBSZXBvcnQgcmF0ZSBzZXQgYnkgdXNlciBzcGVjaWZpZWQgdGltZS4KKyAqICAgQnV0dG9uT25seSA6IE5vIHNjYW5zIGZvciBmaW5nZXJzLiBXaGVuIHRoZSBidXR0b24gaXMgdHJpZ2dlcmVkLAorICogICAgIGEgc2xhdmUgaW50ZXJydXB0IGlzIGFzc2VydGVkIHRvIG5vdGlmeSBob3N0IHRvIHdha2UgdXAuCisgKiAgIE9mZiA6IE9ubHkgYXdha2UgZm9yIGkyYyBjb21tYW5kcyBmcm9tIGhvc3QuIE5vIGZ1bmN0aW9uIGZvciBidXR0b24KKyAqICAgICBvciB0b3VjaCBzZW5zb3JzLgorICoKKyAqIFRoZSBwb3dlcl9tb2RlIGNvbW1hbmQgc2hvdWxkIGNvbmZvcm0gdG8gdGhlIGZvbGxvd2luZyA6CisgKiAgIEZ1bGwgOiAweDNmCisgKiAgIElkbGUgOiBDb25maWd1cmFibGUgZnJvbSAyMCB0byAxMDAwbXMuIFNlZSBub3RlIGJlbG93IGZvcgorICogICAgIGN5YXBhX3NsZWVwX3RpbWVfdG9fcHdyX2NtZCBhbmQgY3lhcGFfcHdyX2NtZF90b19zbGVlcF90aW1lCisgKiAgIEJ1dHRvbk9ubHkgOiAweDAxCisgKiAgIE9mZiA6IDB4MDAKKyAqCisgKiBEZXZpY2UgcG93ZXIgbW9kZSBjYW4gb25seSBiZSBzZXQgd2hlbiBkZXZpY2UgaXMgaW4gb3BlcmF0aW9uYWwgbW9kZS4KKyAqLworc3RhdGljIGludCBjeWFwYV9nZW4zX3NldF9wb3dlcl9tb2RlKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4IHBvd2VyX21vZGUsCisJCXUxNiBhbHdheXNfdW51c2VkKQoreworCWludCByZXQ7CisJdTggcG93ZXI7CisJaW50IHRyaWVzOworCXUxNiBzbGVlcF90aW1lOworCisJYWx3YXlzX3VudXNlZCA9IDA7CisJaWYgKGN5YXBhLT5zdGF0ZSAhPSBDWUFQQV9TVEFURV9PUCkKKwkJcmV0dXJuIDA7CisKKwl0cmllcyA9IFNFVF9QT1dFUl9NT0RFX1RSSUVTOworCXdoaWxlICh0cmllcy0tKSB7CisJCXJldCA9IGN5YXBhX3JlYWRfYnl0ZShjeWFwYSwgQ1lBUEFfQ01EX1BPV0VSX01PREUpOworCQlpZiAocmV0ID49IDApCisJCQlicmVhazsKKwkJdXNsZWVwX3JhbmdlKFNFVF9QT1dFUl9NT0RFX0RFTEFZLCAyICogU0VUX1BPV0VSX01PREVfREVMQVkpOworCX0KKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogUmV0dXJuIGVhcmx5IGlmIHRoZSBwb3dlciBtb2RlIHRvIHNldCBpcyB0aGUgc2FtZSBhcyB0aGUgY3VycmVudAorCSAqIG9uZS4KKwkgKi8KKwlpZiAoKHJldCAmIFBXUl9NT0RFX01BU0spID09IHBvd2VyX21vZGUpCisJCXJldHVybiAwOworCisJc2xlZXBfdGltZSA9IGN5YXBhX2dldF93YWl0X3RpbWVfZm9yX3B3cl9jbWQocmV0ICYgUFdSX01PREVfTUFTSyk7CisJcG93ZXIgPSByZXQ7CisJcG93ZXIgJj0gflBXUl9NT0RFX01BU0s7CisJcG93ZXIgfD0gcG93ZXJfbW9kZSAmIFBXUl9NT0RFX01BU0s7CisJdHJpZXMgPSBTRVRfUE9XRVJfTU9ERV9UUklFUzsKKwl3aGlsZSAodHJpZXMtLSkgeworCQlyZXQgPSBjeWFwYV93cml0ZV9ieXRlKGN5YXBhLCBDWUFQQV9DTURfUE9XRVJfTU9ERSwgcG93ZXIpOworCQlpZiAoIXJldCkKKwkJCWJyZWFrOworCQl1c2xlZXBfcmFuZ2UoU0VUX1BPV0VSX01PREVfREVMQVksIDIgKiBTRVRfUE9XRVJfTU9ERV9ERUxBWSk7CisJfQorCisJLyoKKwkgKiBXYWl0IGZvciB0aGUgbmV3bHkgc2V0IHBvd2VyIGNvbW1hbmQgdG8gZ28gaW4gYXQgdGhlIHByZXZpb3VzCisJICogY2xvY2sgc3BlZWQgKHNjYW5yYXRlKSB1c2VkIGJ5IHRoZSB0b3VjaHBhZCBmaXJtd2FyZS4gTm90CisJICogZG9pbmcgc28gYmVmb3JlIGlzc3VpbmcgdGhlIG5leHQgY29tbWFuZCBtYXkgcmVzdWx0IGluIGVycm9ycworCSAqIGRlcGVuZGluZyBvbiB0aGUgY29tbWFuZCdzIGNvbnRlbnQuCisJICovCisJbXNsZWVwKHNsZWVwX3RpbWUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZ2VuM19nZXRfcXVlcnlfZGF0YShzdHJ1Y3QgY3lhcGEgKmN5YXBhKQoreworCXU4IHF1ZXJ5X2RhdGFbUVVFUllfREFUQV9TSVpFXTsKKwlpbnQgcmV0OworCisJaWYgKGN5YXBhLT5zdGF0ZSAhPSBDWUFQQV9TVEFURV9PUCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXJldCA9IGN5YXBhX3JlYWRfYmxvY2soY3lhcGEsIENZQVBBX0NNRF9HUk9VUF9RVUVSWSwgcXVlcnlfZGF0YSk7CisJaWYgKHJldCAhPSBRVUVSWV9EQVRBX1NJWkUpCisJCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiAtRUlPOworCisJbWVtY3B5KCZjeWFwYS0+cHJvZHVjdF9pZFswXSwgJnF1ZXJ5X2RhdGFbMF0sIDUpOworCWN5YXBhLT5wcm9kdWN0X2lkWzVdID0gJy0nOworCW1lbWNweSgmY3lhcGEtPnByb2R1Y3RfaWRbNl0sICZxdWVyeV9kYXRhWzVdLCA2KTsKKwljeWFwYS0+cHJvZHVjdF9pZFsxMl0gPSAnLSc7CisJbWVtY3B5KCZjeWFwYS0+cHJvZHVjdF9pZFsxM10sICZxdWVyeV9kYXRhWzExXSwgMik7CisJY3lhcGEtPnByb2R1Y3RfaWRbMTVdID0gJ1wwJzsKKworCWN5YXBhLT5md19tYWpfdmVyID0gcXVlcnlfZGF0YVsxNV07CisJY3lhcGEtPmZ3X21pbl92ZXIgPSBxdWVyeV9kYXRhWzE2XTsKKworCWN5YXBhLT5idG5fY2FwYWJpbGl0eSA9IHF1ZXJ5X2RhdGFbMTldICYgQ0FQQUJJTElUWV9CVE5fTUFTSzsKKworCWN5YXBhLT5nZW4gPSBxdWVyeV9kYXRhWzIwXSAmIDB4MGY7CisKKwljeWFwYS0+bWF4X2Fic194ID0gKChxdWVyeV9kYXRhWzIxXSAmIDB4ZjApIDw8IDQpIHwgcXVlcnlfZGF0YVsyMl07CisJY3lhcGEtPm1heF9hYnNfeSA9ICgocXVlcnlfZGF0YVsyMV0gJiAweDBmKSA8PCA4KSB8IHF1ZXJ5X2RhdGFbMjNdOworCisJY3lhcGEtPnBoeXNpY2FsX3NpemVfeCA9CisJCSgocXVlcnlfZGF0YVsyNF0gJiAweGYwKSA8PCA0KSB8IHF1ZXJ5X2RhdGFbMjVdOworCWN5YXBhLT5waHlzaWNhbF9zaXplX3kgPQorCQkoKHF1ZXJ5X2RhdGFbMjRdICYgMHgwZikgPDwgOCkgfCBxdWVyeV9kYXRhWzI2XTsKKworCWN5YXBhLT5tYXhfeiA9IDI1NTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN5YXBhX2dlbjNfYmxfcXVlcnlfZGF0YShzdHJ1Y3QgY3lhcGEgKmN5YXBhKQoreworCXU4IGJsX2RhdGFbQ1lBUEFfQ01EX0xFTl07CisJaW50IHJldDsKKworCXJldCA9IGN5YXBhX2kyY19yZWdfcmVhZF9ibG9jayhjeWFwYSwgMCwgQ1lBUEFfQ01EX0xFTiwgYmxfZGF0YSk7CisJaWYgKHJldCAhPSBDWUFQQV9DTURfTEVOKQorCQlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogLUVJTzsKKworCS8qCisJICogVGhpcyB2YWx1ZSB3aWxsIGJlIHVwZGF0ZWQgYWdhaW4gd2hlbiBlbnRlcmVkIGFwcGxpY2F0aW9uIG1vZGUuCisJICogSWYgVFAgZmFpbGVkIHRvIGVudGVyIGFwcGxpY2F0aW9uIG1vZGUsIHRoaXMgZncgdmVyc2lvbiB2YWx1ZXMKKwkgKiBjYW4gYmUgdXNlZCBhcyBhIHJlZmVyZW5jZS4KKwkgKiBUaGlzIGZpcm13YXJlIHZlcnNpb24gdmFsaWQgd2hlbiBmdyBpbWFnZSBjaGVja3N1bSBpcyB2YWxpZC4KKwkgKi8KKwlpZiAoYmxfZGF0YVtSRUdfQkxfU1RBVFVTXSA9PQorCQkJKEJMX1NUQVRVU19SVU5OSU5HIHwgQkxfU1RBVFVTX0NTVU1fVkFMSUQpKSB7CisJCWN5YXBhLT5md19tYWpfdmVyID0gYmxfZGF0YVtHRU4zX0JMX0lETEVfRldfTUFKX1ZFUl9PRkZTRVRdOworCQljeWFwYS0+ZndfbWluX3ZlciA9IGJsX2RhdGFbR0VOM19CTF9JRExFX0ZXX01JTl9WRVJfT0ZGU0VUXTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENoZWNrIGlmIGRldmljZSBpcyBvcGVyYXRpb25hbC4KKyAqCisgKiBBbiBvcGVyYXRpb25hbCBkZXZpY2UgaXMgcmVzcG9uZGluZywgaGFzIGV4aXRlZCBib290bG9hZGVyLCBhbmQgaGFzCisgKiBmaXJtd2FyZSBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuCisgKgorICogUmV0dXJuczoKKyAqICAgLUVCVVNZICBubyBkZXZpY2Ugb3IgaW4gYm9vdGxvYWRlcgorICogICAtRUlPICAgIGZhaWx1cmUgd2hpbGUgcmVhZGluZyBmcm9tIGRldmljZQorICogICAtRUFHQUlOIGRldmljZSBpcyBzdGlsbCBpbiBib290bG9hZGVyCisgKiAgICAgICAgICAgaWYgLT5zdGF0ZSA9IENZQVBBX1NUQVRFX0JMX0lETEUsIGRldmljZSBoYXMgaW52YWxpZCBmaXJtd2FyZQorICogICAtRUlOVkFMIGRldmljZSBpcyBpbiBvcGVyYXRpb25hbCBtb2RlLCBidXQgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlcgorICogICAwICAgICAgIGRldmljZSBpcyBzdXBwb3J0ZWQKKyAqLworc3RhdGljIGludCBjeWFwYV9nZW4zX2RvX29wZXJhdGlvbmFsX2NoZWNrKHN0cnVjdCBjeWFwYSAqY3lhcGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmN5YXBhLT5jbGllbnQtPmRldjsKKwlpbnQgZXJyb3I7CisKKwlzd2l0Y2ggKGN5YXBhLT5zdGF0ZSkgeworCWNhc2UgQ1lBUEFfU1RBVEVfQkxfQUNUSVZFOgorCQllcnJvciA9IGN5YXBhX2dlbjNfYmxfZGVhY3RpdmF0ZShjeWFwYSk7CisJCWlmIChlcnJvcikgeworCQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gYmxfZGVhY3RpdmF0ZTogJWRcbiIsIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCisJLyogRmFsbHRocm91Z2ggc3RhdGUgKi8KKwljYXNlIENZQVBBX1NUQVRFX0JMX0lETEU6CisJCS8qIFRyeSB0byBnZXQgZmlybXdhcmUgdmVyc2lvbiBpbiBib290bG9hZGVyIG1vZGUuICovCisJCWN5YXBhX2dlbjNfYmxfcXVlcnlfZGF0YShjeWFwYSk7CisKKwkJZXJyb3IgPSBjeWFwYV9nZW4zX2JsX2V4aXQoY3lhcGEpOworCQlpZiAoZXJyb3IpIHsKKwkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGJsX2V4aXQ6ICVkXG4iLCBlcnJvcik7CisJCQlyZXR1cm4gZXJyb3I7CisJCX0KKworCS8qIEZhbGx0aHJvdWdoIHN0YXRlICovCisJY2FzZSBDWUFQQV9TVEFURV9PUDoKKwkJLyoKKwkJICogUmVhZGluZyBxdWVyeSBkYXRhIGJlZm9yZSBnb2luZyBiYWNrIHRvIHRoZSBmdWxsIG1vZGUKKwkJICogbWF5IGNhdXNlIHByb2JsZW1zLCBzbyB3ZSBzZXQgdGhlIHBvd2VyIG1vZGUgZmlyc3QgaGVyZS4KKwkJICovCisJCWVycm9yID0gY3lhcGFfZ2VuM19zZXRfcG93ZXJfbW9kZShjeWFwYSwKKwkJCQlQV1JfTU9ERV9GVUxMX0FDVElWRSwgMCk7CisJCWlmIChlcnJvcikKKwkJCWRldl9lcnIoZGV2LCAiJXM6IHNldCBmdWxsIHBvd2VyIG1vZGUgZmFpbGVkOiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgZXJyb3IpOworCQllcnJvciA9IGN5YXBhX2dlbjNfZ2V0X3F1ZXJ5X2RhdGEoY3lhcGEpOworCQlpZiAoZXJyb3IgPCAwKQorCQkJcmV0dXJuIGVycm9yOworCisJCS8qIE9ubHkgc3VwcG9ydCBmaXJtd2FyZSBwcm90b2NvbCBnZW4zICovCisJCWlmIChjeWFwYS0+Z2VuICE9IENZQVBBX0dFTjMpIHsKKwkJCWRldl9lcnIoZGV2LCAidW5zdXBwb3J0ZWQgcHJvdG9jb2wgdmVyc2lvbiAoJWQpIiwKKwkJCQljeWFwYS0+Z2VuKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyogT25seSBzdXBwb3J0IHByb2R1Y3QgSUQgc3RhcnRpbmcgd2l0aCBDWVRSQSAqLworCQlpZiAobWVtY21wKGN5YXBhLT5wcm9kdWN0X2lkLCBwcm9kdWN0X2lkLAorCQkJCXN0cmxlbihwcm9kdWN0X2lkKSkgIT0gMCkgeworCQkJZGV2X2VycihkZXYsICJ1bnN1cHBvcnRlZCBwcm9kdWN0IElEICglcylcbiIsCisJCQkJY3lhcGEtPnByb2R1Y3RfaWQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiBmYWxzZSwgZG8gbm90IGNvbnRpbnVlIHByb2Nlc3MKKyAqIFJldHVybiB0cnVlLCBjb250aW51ZSBwcm9jZXNzLgorICovCitzdGF0aWMgYm9vbCBjeWFwYV9nZW4zX2lycV9jbWRfaGFuZGxlcihzdHJ1Y3QgY3lhcGEgKmN5YXBhKQoreworCS8qIE5vdCBnZW4zIGlycSBjb21tYW5kIHJlc3BvbnNlLCBza2lwIGZvciBjb250aW51ZS4gKi8KKwlpZiAoY3lhcGEtPmdlbiAhPSBDWUFQQV9HRU4zKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChjeWFwYS0+b3BlcmF0aW9uYWwpCisJCXJldHVybiB0cnVlOworCisJLyoKKwkgKiBEcml2ZXIgaW4gZGV0ZWN0aW5nIG9yIG90aGVyIGludGVyZmFjZSBmdW5jdGlvbiBwcm9jZXNzaW5nLAorCSAqIHNvLCBzdG9wIGN5YXBhX2dlbjNfaXJxX2hhbmRsZXIgdG8gY29udGludWUgcHJvY2VzcyB0bworCSAqIGF2b2lkIHVud2FudGVkIHRvIGVycm9yIGRldGVjdGluZyBhbmQgcHJvY2Vzc2luZy4KKwkgKgorCSAqIEFuZCBhbHNvLCBhdm9pZCB0aGUgcGVyaW9kaWNseSBhY2NlcnRlZCBpbnRlcnJ1cHRzIHRvIGJlIHByb2Nlc3NlZAorCSAqIGFzIHRvdWNoIGlucHV0cyB3aGVuIGdlbjMgZmFpbGVkIHRvIGxhdW5jaCBpbnRvIGFwcGxpY2F0aW9uIG1vZGUsCisJICogd2hpY2ggd2lsbCBjYXVzZSBnZW4zIHN0YXlzIGluIGJvb3Rsb2FkZXIgbW9kZS4KKwkgKi8KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZ2VuM19pcnFfaGFuZGxlcihzdHJ1Y3QgY3lhcGEgKmN5YXBhKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gY3lhcGEtPmlucHV0OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjeWFwYS0+Y2xpZW50LT5kZXY7CisJc3RydWN0IGN5YXBhX3JlZ19kYXRhIGRhdGE7CisJaW50IG51bV9maW5nZXJzOworCWludCByZXQ7CisJaW50IGk7CisKKwlyZXQgPSBjeWFwYV9yZWFkX2Jsb2NrKGN5YXBhLCBDWUFQQV9DTURfR1JPVVBfREFUQSwgKHU4ICopJmRhdGEpOworCWlmIChyZXQgIT0gc2l6ZW9mKGRhdGEpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlYWQgcmVwb3J0IGRhdGEsICglZClcbiIsIHJldCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgoZGF0YS5kZXZpY2Vfc3RhdHVzICYgT1BfU1RBVFVTX1NSQykgIT0gT1BfU1RBVFVTX1NSQyB8fAorCSAgICAoZGF0YS5kZXZpY2Vfc3RhdHVzICYgT1BfU1RBVFVTX0RFVikgIT0gQ1lBUEFfREVWX05PUk1BTCB8fAorCSAgICAoZGF0YS5maW5nZXJfYnRuICYgT1BfREFUQV9WQUxJRCkgIT0gT1BfREFUQV9WQUxJRCkgeworCQlkZXZfZXJyKGRldiwgImludmFsaWQgZGV2aWNlIHN0YXRlIGJ5dGVzLCAlMDJ4ICUwMnhcbiIsCisJCQlkYXRhLmRldmljZV9zdGF0dXMsIGRhdGEuZmluZ2VyX2J0bik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW51bV9maW5nZXJzID0gKGRhdGEuZmluZ2VyX2J0biA+PiA0KSAmIDB4MGY7CisJZm9yIChpID0gMDsgaSA8IG51bV9maW5nZXJzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IGN5YXBhX3RvdWNoICp0b3VjaCA9ICZkYXRhLnRvdWNoZXNbaV07CisJCS8qIE5vdGU6IHRvdWNoLT5pZCByYW5nZSBpcyAxIHRvIDE1OyBzbG90cyBhcmUgMCB0byAxNC4gKi8KKwkJaW50IHNsb3QgPSB0b3VjaC0+aWQgLSAxOworCisJCWlucHV0X210X3Nsb3QoaW5wdXQsIHNsb3QpOworCQlpbnB1dF9tdF9yZXBvcnRfc2xvdF9zdGF0ZShpbnB1dCwgTVRfVE9PTF9GSU5HRVIsIHRydWUpOworCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWCwKKwkJCQkgKCh0b3VjaC0+eHlfaGkgJiAweGYwKSA8PCA0KSB8IHRvdWNoLT54X2xvKTsKKwkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1BPU0lUSU9OX1ksCisJCQkJICgodG91Y2gtPnh5X2hpICYgMHgwZikgPDwgOCkgfCB0b3VjaC0+eV9sbyk7CisJCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9QUkVTU1VSRSwgdG91Y2gtPnByZXNzdXJlKTsKKwl9CisKKwlpbnB1dF9tdF9zeW5jX2ZyYW1lKGlucHV0KTsKKworCWlmIChjeWFwYS0+YnRuX2NhcGFiaWxpdHkgJiBDQVBBQklMSVRZX0xFRlRfQlROX01BU0spCisJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9MRUZULAorCQkJCSAhIShkYXRhLmZpbmdlcl9idG4gJiBPUF9EQVRBX0xFRlRfQlROKSk7CisJaWYgKGN5YXBhLT5idG5fY2FwYWJpbGl0eSAmIENBUEFCSUxJVFlfTUlERExFX0JUTl9NQVNLKQorCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fTUlERExFLAorCQkJCSAhIShkYXRhLmZpbmdlcl9idG4gJiBPUF9EQVRBX01JRERMRV9CVE4pKTsKKwlpZiAoY3lhcGEtPmJ0bl9jYXBhYmlsaXR5ICYgQ0FQQUJJTElUWV9SSUdIVF9CVE5fTUFTSykKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX1JJR0hULAorCQkJCSAhIShkYXRhLmZpbmdlcl9idG4gJiBPUF9EQVRBX1JJR0hUX0JUTikpOworCWlucHV0X3N5bmMoaW5wdXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZ2VuM19pbml0aWFsaXplKHN0cnVjdCBjeWFwYSAqY3lhcGEpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbnQgY3lhcGFfZ2VuM19ibF9pbml0aWF0ZShzdHJ1Y3QgY3lhcGEgKmN5YXBhLAorCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW50IGN5YXBhX2dlbjNfZW1wdHlfb3V0cHV0X2RhdGEoc3RydWN0IGN5YXBhICpjeWFwYSwKKwkJdTggKmJ1ZiwgaW50ICpsZW4sIGNiX3NvcnQgZnVuYykgeyByZXR1cm4gMDsgfQorCitjb25zdCBzdHJ1Y3QgY3lhcGFfZGV2X29wcyBjeWFwYV9nZW4zX29wcyA9IHsKKwkuY2hlY2tfZncgPSBjeWFwYV9nZW4zX2NoZWNrX2Z3LAorCS5ibF9lbnRlciA9IGN5YXBhX2dlbjNfYmxfZW50ZXIsCisJLmJsX2FjdGl2YXRlID0gY3lhcGFfZ2VuM19ibF9hY3RpdmF0ZSwKKwkudXBkYXRlX2Z3ID0gY3lhcGFfZ2VuM19kb19md191cGRhdGUsCisJLmJsX2RlYWN0aXZhdGUgPSBjeWFwYV9nZW4zX2JsX2RlYWN0aXZhdGUsCisJLmJsX2luaXRpYXRlID0gY3lhcGFfZ2VuM19ibF9pbml0aWF0ZSwKKworCS5zaG93X2Jhc2VsaW5lID0gY3lhcGFfZ2VuM19zaG93X2Jhc2VsaW5lLAorCS5jYWxpYnJhdGVfc3RvcmUgPSBjeWFwYV9nZW4zX2RvX2NhbGlicmF0ZSwKKworCS5pbml0aWFsaXplID0gY3lhcGFfZ2VuM19pbml0aWFsaXplLAorCisJLnN0YXRlX3BhcnNlID0gY3lhcGFfZ2VuM19zdGF0ZV9wYXJzZSwKKwkub3BlcmF0aW9uYWxfY2hlY2sgPSBjeWFwYV9nZW4zX2RvX29wZXJhdGlvbmFsX2NoZWNrLAorCisJLmlycV9oYW5kbGVyID0gY3lhcGFfZ2VuM19pcnFfaGFuZGxlciwKKwkuaXJxX2NtZF9oYW5kbGVyID0gY3lhcGFfZ2VuM19pcnFfY21kX2hhbmRsZXIsCisJLnNvcnRfZW1wdHlfb3V0cHV0X2RhdGEgPSBjeWFwYV9nZW4zX2VtcHR5X291dHB1dF9kYXRhLAorCS5zZXRfcG93ZXJfbW9kZSA9IGN5YXBhX2dlbjNfc2V0X3Bvd2VyX21vZGUsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9jeWFwYV9nZW41LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2N5YXBhX2dlbjUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGY1MzkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9jeWFwYV9nZW41LmMKQEAgLTAsMCArMSwyNzc3IEBACisvKgorICogQ3lwcmVzcyBBUEEgdHJhY2twYWQgd2l0aCBJMkMgaW50ZXJmYWNlCisgKgorICogQXV0aG9yOiBEdWRsZXkgRHUgPGR1ZGxAY3lwcmVzcy5jb20+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEN5cHJlc3MgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L210Lmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25lZC9hY2Nlc3Nfb2suaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMtaXR1LXQuaD4KKyNpbmNsdWRlICJjeWFwYS5oIgorCisKKy8qIE1hY3JvIG9mIEdlbjUgKi8KKyNkZWZpbmUgUkVDT1JEX0VWRU5UX05PTkUgICAgICAgIDAKKyNkZWZpbmUgUkVDT1JEX0VWRU5UX1RPVUNIRE9XTgkgMQorI2RlZmluZSBSRUNPUkRfRVZFTlRfRElTUExBQ0UgICAgMgorI2RlZmluZSBSRUNPUkRfRVZFTlRfTElGVE9GRiAgICAgMworCisjZGVmaW5lIENZQVBBX1RTR19GTEFTSF9NQVBfQkxPQ0tfU0laRSAgICAgIDB4ODAKKyNkZWZpbmUgQ1lBUEFfVFNHX0lNR19GV19IRFJfU0laRSAgICAgICAgICAgMTMKKyNkZWZpbmUgQ1lBUEFfVFNHX0ZXX1JPV19TSVpFICAgICAgICAgICAgICAgKENZQVBBX1RTR19GTEFTSF9NQVBfQkxPQ0tfU0laRSkKKyNkZWZpbmUgQ1lBUEFfVFNHX0lNR19TVEFSVF9ST1dfTlVNICAgICAgICAgMHgwMDJlCisjZGVmaW5lIENZQVBBX1RTR19JTUdfRU5EX1JPV19OVU0gICAgICAgICAgIDB4MDFmZQorI2RlZmluZSBDWUFQQV9UU0dfSU1HX0FQUF9JTlRFR1JJVFlfUk9XX05VTSAweDAxZmYKKyNkZWZpbmUgQ1lBUEFfVFNHX0lNR19NQVhfUkVDT1JEUyAgICAgICAgICAgKENZQVBBX1RTR19JTUdfRU5EX1JPV19OVU0gLSBcCisJCQkJQ1lBUEFfVFNHX0lNR19TVEFSVF9ST1dfTlVNICsgMSArIDEpCisjZGVmaW5lIENZQVBBX1RTR19JTUdfUkVBRF9TSVpFICAgICAgICAgICAgIChDWUFQQV9UU0dfRkxBU0hfTUFQX0JMT0NLX1NJWkUgLyAyKQorI2RlZmluZSBDWUFQQV9UU0dfU1RBUlRfT0ZfQVBQTElDQVRJT04gICAgICAweDE3MDAKKyNkZWZpbmUgQ1lBUEFfVFNHX0FQUF9JTlRFR1JJVFlfU0laRSAgICAgICAgNjAKKyNkZWZpbmUgQ1lBUEFfVFNHX0ZMQVNIX01BUF9NRVRBREFUQV9TSVpFICAgNjAKKyNkZWZpbmUgQ1lBUEFfVFNHX0JMX0tFWV9TSVpFICAgICAgICAgICAgICAgOAorCisjZGVmaW5lIENZQVBBX1RTR19NQVhfQ01EX1NJWkUgICAgICAgICAgICAgIDI1NgorCisjZGVmaW5lIEdFTjVfQkxfQ01EX1ZFUklGWV9BUFBfSU5URUdSSVRZICAgIDB4MzEKKyNkZWZpbmUgR0VONV9CTF9DTURfR0VUX0JMX0lORk8JCSAgICAweDM4CisjZGVmaW5lIEdFTjVfQkxfQ01EX1BST0dSQU1fVkVSSUZZX1JPVyAgICAgIDB4MzkKKyNkZWZpbmUgR0VONV9CTF9DTURfTEFVTkNIX0FQUAkJICAgIDB4M2IKKyNkZWZpbmUgR0VONV9CTF9DTURfSU5JVElBVEVfQkwJCSAgICAweDQ4CisKKyNkZWZpbmUgR0VONV9ISURfREVTQ1JJUFRPUl9BRERSCTB4MDAwMQorI2RlZmluZSBHRU41X1JFUE9SVF9ERVNDUklQVE9SX0FERFIJMHgwMDAyCisjZGVmaW5lIEdFTjVfSU5QVVRfUkVQT1JUX0FERFIJCTB4MDAwMworI2RlZmluZSBHRU41X09VVFBVVF9SRVBPUlRfQUREUgkJMHgwMDA0CisjZGVmaW5lIEdFTjVfQ01EX0RBVEFfQUREUgkJMHgwMDA2CisKKyNkZWZpbmUgR0VONV9UT1VDSF9SRVBPUlRfSEVBRF9TSVpFICAgICA3CisjZGVmaW5lIEdFTjVfVE9VQ0hfUkVQT1JUX01BWF9TSVpFICAgICAgMTI3CisjZGVmaW5lIEdFTjVfQlROX1JFUE9SVF9IRUFEX1NJWkUgICAgICAgNgorI2RlZmluZSBHRU41X0JUTl9SRVBPUlRfTUFYX1NJWkUgICAgICAgIDE0CisjZGVmaW5lIEdFTjVfV0FLRVVQX0VWRU5UX1NJWkUgICAgICAgICAgNAorI2RlZmluZSBHRU41X1JBV19EQVRBX0hFQURfU0laRSAgICAgICAgIDI0CisKKyNkZWZpbmUgR0VONV9CTF9DTURfUkVQT1JUX0lEICAgICAgICAgICAweDQwCisjZGVmaW5lIEdFTjVfQkxfUkVTUF9SRVBPUlRfSUQgICAgICAgICAgMHgzMAorI2RlZmluZSBHRU41X0FQUF9DTURfUkVQT1JUX0lEICAgICAgICAgIDB4MmYKKyNkZWZpbmUgR0VONV9BUFBfUkVTUF9SRVBPUlRfSUQgICAgICAgICAweDFmCisKKyNkZWZpbmUgR0VONV9BUFBfREVFUF9TTEVFUF9SRVBPUlRfSUQgICAweGYwCisjZGVmaW5lIEdFTjVfREVFUF9TTEVFUF9SRVNQX0xFTkdUSCAgICAgNQorCisjZGVmaW5lIEdFTjVfQ01EX0dFVF9QQVJBTUVURVIJCSAgICAgMHgwNQorI2RlZmluZSBHRU41X0NNRF9TRVRfUEFSQU1FVEVSCQkgICAgIDB4MDYKKyNkZWZpbmUgR0VONV9QQVJBTUVURVJfQUNUX0lOVEVSVkxfSUQgICAgICAgIDB4NGQKKyNkZWZpbmUgR0VONV9QQVJBTUVURVJfQUNUX0lOVEVSVkxfU0laRSAgICAgIDEKKyNkZWZpbmUgR0VONV9QQVJBTUVURVJfQUNUX0xGVF9JTlRFUlZMX0lEICAgIDB4NGYKKyNkZWZpbmUgR0VONV9QQVJBTUVURVJfQUNUX0xGVF9JTlRFUlZMX1NJWkUgIDIKKyNkZWZpbmUgR0VONV9QQVJBTUVURVJfTFBfSU5UUlZMX0lEICAgICAgICAgIDB4NGMKKyNkZWZpbmUgR0VONV9QQVJBTUVURVJfTFBfSU5UUlZMX1NJWkUgICAgICAgIDIKKworI2RlZmluZSBHRU41X1BBUkFNRVRFUl9ESVNBQkxFX1BJUF9SRVBPUlQgICAgMHgwOAorCisjZGVmaW5lIEdFTjVfUE9XRVJfU1RBVEVfQUNUSVZFICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIEdFTjVfUE9XRVJfU1RBVEVfTE9PS19GT1JfVE9VQ0ggICAgICAweDAyCisjZGVmaW5lIEdFTjVfUE9XRVJfU1RBVEVfUkVBRFkgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIEdFTjVfUE9XRVJfU1RBVEVfSURMRSAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIEdFTjVfUE9XRVJfU1RBVEVfQlROX09OTFkgICAgICAgICAgICAweDA1CisjZGVmaW5lIEdFTjVfUE9XRVJfU1RBVEVfT0ZGICAgICAgICAgICAgICAgICAweDA2CisKKyNkZWZpbmUgR0VONV9ERUVQX1NMRUVQX1NUQVRFX01BU0sgIDB4MDMKKyNkZWZpbmUgR0VONV9ERUVQX1NMRUVQX1NUQVRFX09OICAgIDB4MDAKKyNkZWZpbmUgR0VONV9ERUVQX1NMRUVQX1NUQVRFX09GRiAgIDB4MDEKKworI2RlZmluZSBHRU41X0RFRVBfU0xFRVBfT1BDT0RFICAgICAgMHgwOAorI2RlZmluZSBHRU41X0RFRVBfU0xFRVBfT1BDT0RFX01BU0sgMHgwZgorCisjZGVmaW5lIEdFTjVfUE9XRVJfUkVBRFlfTUFYX0lOVFJWTF9USU1FICA1MCAgIC8qIFVuaXQ6IG1zICovCisjZGVmaW5lIEdFTjVfUE9XRVJfSURMRV9NQVhfSU5UUlZMX1RJTUUgICAyNTAgIC8qIFVuaXQ6IG1zICovCisKKyNkZWZpbmUgR0VONV9DTURfUkVQT1JUX0lEX09GRlNFVCAgICAgICA0CisKKyNkZWZpbmUgR0VONV9SRVNQX1JFUE9SVF9JRF9PRkZTRVQgICAgICAyCisjZGVmaW5lIEdFTjVfUkVTUF9SU1ZEX09GRlNFVCAgICAgICAgICAgMworI2RlZmluZSAgICAgR0VONV9SRVNQX1JTVkRfS0VZICAgICAgICAgIDB4MDAKKyNkZWZpbmUgR0VONV9SRVNQX0JMX1NPUF9PRkZTRVQgICAgICAgICA0CisjZGVmaW5lICAgICBHRU41X1NPUF9LRVkgICAgICAgICAgICAgICAgMHgwMSAgLyogU3RhcnQgb2YgUGFja2V0ICovCisjZGVmaW5lICAgICBHRU41X0VPUF9LRVkgICAgICAgICAgICAgICAgMHgxNyAgLyogRW5kIG9mIFBhY2tldCAqLworI2RlZmluZSBHRU41X1JFU1BfQVBQX0NNRF9PRkZTRVQgICAgICAgIDQKKyNkZWZpbmUgICAgIEdFVF9HRU41X0NNRF9DT0RFKHJlZykgICAgICAoKHJlZykgJiAweDdmKQorCisjZGVmaW5lIFZBTElEX0NNRF9SRVNQX0hFQURFUihyZXNwLCBjbWQpCQkJCSAgICBcCisJKCgocmVzcClbR0VONV9SRVNQX1JFUE9SVF9JRF9PRkZTRVRdID09IEdFTjVfQVBQX1JFU1BfUkVQT1JUX0lEKSAmJiBcCisJKChyZXNwKVtHRU41X1JFU1BfUlNWRF9PRkZTRVRdID09IEdFTjVfUkVTUF9SU1ZEX0tFWSkgJiYJICAgIFwKKwkoR0VUX0dFTjVfQ01EX0NPREUoKHJlc3ApW0dFTjVfUkVTUF9BUFBfQ01EX09GRlNFVF0pID09IChjbWQpKSkKKworI2RlZmluZSBHRU41X01JTl9CTF9DTURfTEVOR1RIICAgICAgICAgICAxMworI2RlZmluZSBHRU41X01JTl9CTF9SRVNQX0xFTkdUSCAgICAgICAgICAxMQorI2RlZmluZSBHRU41X01JTl9BUFBfQ01EX0xFTkdUSCAgICAgICAgICA3CisjZGVmaW5lIEdFTjVfTUlOX0FQUF9SRVNQX0xFTkdUSCAgICAgICAgIDUKKyNkZWZpbmUgR0VONV9VTlNVUFBPUlRFRF9DTURfUkVTUF9MRU5HVEggNgorCisjZGVmaW5lIEdFTjVfUkVTUF9MRU5HVEhfT0ZGU0VUICAweDAwCisjZGVmaW5lIEdFTjVfUkVTUF9MRU5HVEhfU0laRSAgICAyCisKKyNkZWZpbmUgR0VONV9ISURfREVTQ1JJUFRPUl9TSVpFICAgICAgMzIKKyNkZWZpbmUgR0VONV9CTF9ISURfUkVQT1JUX0lEICAgICAgICAgMHhmZgorI2RlZmluZSBHRU41X0FQUF9ISURfUkVQT1JUX0lEICAgICAgICAweGY3CisjZGVmaW5lIEdFTjVfQkxfTUFYX09VVFBVVF9MRU5HVEggICAgIDB4MDEwMAorI2RlZmluZSBHRU41X0FQUF9NQVhfT1VUUFVUX0xFTkdUSCAgICAweDAwZmUKKworI2RlZmluZSBHRU41X0JMX1JFUE9SVF9ERVNDUklQVE9SX1NJWkUgICAgICAgICAgICAweDFkCisjZGVmaW5lIEdFTjVfQkxfUkVQT1JUX0RFU0NSSVBUT1JfSUQgICAgICAgICAgICAgIDB4ZmUKKyNkZWZpbmUgR0VONV9BUFBfUkVQT1JUX0RFU0NSSVBUT1JfU0laRSAgICAgICAgICAgMHhlZQorI2RlZmluZSBHRU41X0FQUF9DT05UUkFDVF9SRVBPUlRfREVTQ1JJUFRPUl9TSVpFICAweGZhCisjZGVmaW5lIEdFTjVfQVBQX1JFUE9SVF9ERVNDUklQVE9SX0lEICAgICAgICAgICAgIDB4ZjYKKworI2RlZmluZSBHRU41X1RPVUNIX1JFUE9SVF9JRCAgICAgICAgIDB4MDEKKyNkZWZpbmUgR0VONV9CVE5fUkVQT1JUX0lEICAgICAgICAgICAweDAzCisjZGVmaW5lIEdFTjVfV0FLRVVQX0VWRU5UX1JFUE9SVF9JRCAgMHgwNAorI2RlZmluZSBHRU41X09MRF9QVVNIX0JUTl9SRVBPUlRfSUQgIDB4MDUKKyNkZWZpbmUgR0VONV9QVVNIX0JUTl9SRVBPUlRfSUQgICAgICAweDA2CisKKyNkZWZpbmUgR0VONV9DTURfQ09NUExFVEVfU1VDQ0VTUyhzdGF0dXMpICgoc3RhdHVzKSA9PSAweDAwKQorCisjZGVmaW5lIEdFTjVfQkxfSU5JVElBVEVfUkVTUF9MRU4gICAgICAgICAgICAxMQorI2RlZmluZSBHRU41X0JMX0ZBSUxfRVhJVF9SRVNQX0xFTiAgICAgICAgICAgMTEKKyNkZWZpbmUgR0VONV9CTF9GQUlMX0VYSVRfU1RBVFVTX0NPREUgICAgICAgIDB4MGMKKyNkZWZpbmUgR0VONV9CTF9WRVJJRllfSU5URUdSSVRZX1JFU1BfTEVOICAgIDEyCisjZGVmaW5lIEdFTjVfQkxfSU5URUdSSVRZX0NIRUtDX1BBU1MgICAgICAgICAweDAwCisjZGVmaW5lIEdFTjVfQkxfQkxPQ0tfV1JJVEVfUkVTUF9MRU4gICAgICAgICAxMQorI2RlZmluZSBHRU41X0JMX1JFQURfQVBQX0lORk9fUkVTUF9MRU4gICAgICAgMzEKKyNkZWZpbmUgR0VONV9DTURfQ0FMSUJSQVRFICAgICAgICAgICAgICAgICAgIDB4MjgKKyNkZWZpbmUgQ1lBUEFfU0VOU0lOR19NT0RFX01VVFVBTF9DQVBfRklORSAgIDB4MDAKKyNkZWZpbmUgQ1lBUEFfU0VOU0lOR19NT0RFX1NFTEZfQ0FQICAgICAgICAgIDB4MDIKKworI2RlZmluZSBHRU41X0NNRF9SRVRSSUVWRV9EQVRBX1NUUlVDVFVSRSAgICAgMHgyNAorI2RlZmluZSBHRU41X1JFVFJJRVZFX01VVFVBTF9QV0NfREFUQSAgICAgICAgMHgwMAorI2RlZmluZSBHRU41X1JFVFJJRVZFX1NFTEZfQ0FQX1BXQ19EQVRBICAgICAgMHgwMQorCisjZGVmaW5lIEdFTjVfUkVUUklFVkVfREFUQV9FTEVNRU5UX1NJWkVfTUFTSyAweDA3CisKKyNkZWZpbmUgR0VONV9DTURfRVhFQ1VURV9QQU5FTF9TQ0FOICAgICAgICAgIDB4MmEKKyNkZWZpbmUgR0VONV9DTURfUkVUUklFVkVfUEFORUxfU0NBTiAgICAgICAgIDB4MmIKKyNkZWZpbmUgR0VONV9QQU5FTF9TQ0FOX01VVFVBTF9SQVdfREFUQSAgICAgIDB4MDAKKyNkZWZpbmUgR0VONV9QQU5FTF9TQ0FOX01VVFVBTF9CQVNFTElORSAgICAgIDB4MDEKKyNkZWZpbmUgR0VONV9QQU5FTF9TQ0FOX01VVFVBTF9ESUZGQ09VTlQgICAgIDB4MDIKKyNkZWZpbmUgR0VONV9QQU5FTF9TQ0FOX1NFTEZfUkFXX0RBVEEgICAgICAgIDB4MDMKKyNkZWZpbmUgR0VONV9QQU5FTF9TQ0FOX1NFTEZfQkFTRUxJTkUgICAgICAgIDB4MDQKKyNkZWZpbmUgR0VONV9QQU5FTF9TQ0FOX1NFTEZfRElGRkNPVU5UICAgICAgIDB4MDUKKworLyogVGhlIG9mZnNldCBvbmx5IHZhbGlkIGZvciByZXRlcml2ZSBQV0MgYW5kIHBhbmVsIHNjYW4gY29tbWFuZHMgKi8KKyNkZWZpbmUgR0VONV9SRVNQX0RBVEFfU1RSVUNUVVJFX09GRlNFVCAgICAgIDEwCisjZGVmaW5lIEdFTjVfUFdDX0RBVEFfRUxFTUVOVF9TSVpFX01BU0sgICAgICAweDA3CisKKyNkZWZpbmUJR0VONV9OVU1CRVJfT0ZfVE9VQ0hfT0ZGU0VUICA1CisjZGVmaW5lIEdFTjVfTlVNQkVSX09GX1RPVUNIX01BU0sgICAgMHgxZgorI2RlZmluZSBHRU41X0JVVFRPTlNfT0ZGU0VUICAgICAgICAgIDUKKyNkZWZpbmUgR0VONV9CVVRUT05TX01BU0sgICAgICAgICAgICAweDBmCisjZGVmaW5lIEdFTjVfR0VUX0VWRU5UX0lEKHJlZykgICAgICAgKCgocmVnKSA+PiA1KSAmIDB4MDMpCisjZGVmaW5lIEdFTjVfR0VUX1RPVUNIX0lEKHJlZykgICAgICAgKChyZWcpICYgMHgxZikKKworI2RlZmluZSBHRU41X1BST0RVQ1RfRkFNSUxZX01BU0sgICAgICAgIDB4ZjAwMAorI2RlZmluZSBHRU41X1BST0RVQ1RfRkFNSUxZX1RSQUNLUEFEICAgIDB4MTAwMAorCisjZGVmaW5lIFRTR19JTlZBTElEX0NNRCAgIDB4ZmYKKworc3RydWN0IGN5YXBhX2dlbjVfdG91Y2hfcmVjb3JkIHsKKwkvKgorCSAqIEJpdCA3IC0gMzogcmVzZXJ2ZWQKKwkgKiBCaXQgMiAtIDA6IHRvdWNoIHR5cGU7CisJICogICAgICAgICAgICAwIDogc3RhbmRhcmQgZmluZ2VyOworCSAqICAgICAgICAgICAgMSAtIDE1IDogcmVzZXJ2ZWQuCisJICovCisJdTggdG91Y2hfdHlwZTsKKworCS8qCisJICogQml0IDc6IGluZGljYXRlcyB0b3VjaCBsaWZ0b2ZmIHN0YXR1cy4KKwkgKgkJMCA6IHRvdWNoIGlzIGN1cnJlbnRseSBvbiB0aGUgcGFuZWwuCisJICoJCTEgOiB0b3VjaCByZWNvcmQgaW5kaWNhdGVzIGEgbGlmdG9mZi4KKwkgKiBCaXQgNiAtIDU6IGluZGljYXRlcyBhbiBldmVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0b3VjaCBpbnN0YW5jZQorCSAqCQkwIDogbm8gZXZlbnQKKwkgKgkJMSA6IHRvdWNoZG93bgorCSAqCQkyIDogc2lnbmlmaWNhbnQgZGlzcGxhY2VtZW50ICg+IGFjdGl2ZSBkaXN0YW5jZSkKKwkgKgkJMyA6IGxpZnRvZmYgKHJlY29yZCByZXBvcnRzIGxhc3Qga25vd24gY29vcmRpbmF0ZXMpCisJICogQml0IDQgLSAwOiBBbiBhcmJpdHJhcnkgSUQgdGFnIGFzc29jaWF0ZWQgd2l0aCBhIGZpbmdlcgorCSAqCQl0byBhbGxvdyB0cmFja2luZyBhIHRvdWNoIGFzIGl0IG1vdmVzIGFyb3VuZCB0aGUgcGFuZWwuCisJICovCisJdTggdG91Y2hfdGlwX2V2ZW50X2lkOworCisJLyogQml0IDcgLSAwIG9mIFgtYXhpcyBjb29yZGluYXRlIG9mIHRoZSB0b3VjaCBpbiBwaXhlbC4gKi8KKwl1OCB4X2xvOworCisJLyogQml0IDE1IC0gOCBvZiBYLWF4aXMgY29vcmRpbmF0ZSBvZiB0aGUgdG91Y2ggaW4gcGl4ZWwuICovCisJdTggeF9oaTsKKworCS8qIEJpdCA3IC0gMCBvZiBZLWF4aXMgY29vcmRpbmF0ZSBvZiB0aGUgdG91Y2ggaW4gcGl4ZWwuICovCisJdTggeV9sbzsKKworCS8qIEJpdCAxNSAtIDggb2YgWS1heGlzIGNvb3JkaW5hdGUgb2YgdGhlIHRvdWNoIGluIHBpeGVsLiAqLworCXU4IHlfaGk7CisKKwkvKiBUb3VjaCBpbnRlbnNpdHkgaW4gY291bnRzLCBwcmVzc3VyZSB2YWx1ZS4gKi8KKwl1OCB6OworCisJLyoKKwkgKiBUaGUgbGVuZ3RoIG9mIHRoZSBtYWpvciBheGlzIG9mIHRoZSBlbGxpcHNlIG9mIGNvbnRhY3QgYmV0d2VlbgorCSAqIHRoZSBmaW5nZXIgYW5kIHRoZSBwYW5lbCAoQUJTX01UX1RPVUNIX01BSk9SKS4KKwkgKi8KKwl1OCBtYWpvcl9heGlzX2xlbjsKKworCS8qCisJICogVGhlIGxlbmd0aCBvZiB0aGUgbWlub3IgYXhpcyBvZiB0aGUgZWxsaXBzZSBvZiBjb250YWN0IGJldHdlZW4KKwkgKiB0aGUgZmluZ2VyIGFuZCB0aGUgcGFuZWwgKEFCU19NVF9UT1VDSF9NSU5PUikuCisJICovCisJdTggbWlub3JfYXhpc19sZW47CisKKwkvKgorCSAqIFRoZSBsZW5ndGggb2YgdGhlIG1ham9yIGF4aXMgb2YgdGhlIGFwcHJvYWNoaW5nIHRvb2wuCisJICogKEFCU19NVF9XSURUSF9NQUpPUikKKwkgKi8KKwl1OCBtYWpvcl90b29sX2xlbjsKKworCS8qCisJICogVGhlIGxlbmd0aCBvZiB0aGUgbWlub3IgYXhpcyBvZiB0aGUgYXBwcm9hY2hpbmcgdG9vbC4KKwkgKiAoQUJTX01UX1dJRFRIX01JTk9SKQorCSAqLworCXU4IG1pbm9yX3Rvb2xfbGVuOworCisJLyoKKwkgKiBUaGUgYW5nbGUgYmV0d2VlbiB0aGUgcGFuZWwgdmVydGljYWwgYXhpcyBhbmQKKwkgKiB0aGUgbWFqb3IgYXhpcyBvZiB0aGUgY29udGFjdCBlbGxpcHNlLiBUaGlzIHZhbHVlIGlzIGFuIDgtYml0CisJICogc2lnbmVkIGludGVnZXIuIFRoZSByYW5nZSBpcyAtMTI3IHRvICsxMjcgKGNvcnJlc3BvbmRpbmcgdG8KKwkgKiAtOTAgZGVncmVlIGFuZCArOTAgZGVncmVlIHJlc3BlY3RpdmVseSkuCisJICogVGhlIHBvc2l0aXZlIGRpcmVjdGlvbiBpcyBjbG9ja3dpc2UgZnJvbSB0aGUgdmVydGljYWwgYXhpcy4KKwkgKiBJZiB0aGUgZWxsaXBzZSBvZiBjb250YWN0IGRlZ2VuZXJhdGVzIGludG8gYSBjaXJjbGUsCisJICogb3JpZW50YXRpb24gaXMgcmVwb3J0ZWQgYXMgMC4KKwkgKi8KKwl1OCBvcmllbnRhdGlvbjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjeWFwYV9nZW41X3JlcG9ydF9kYXRhIHsKKwl1OCByZXBvcnRfaGVhZFtHRU41X1RPVUNIX1JFUE9SVF9IRUFEX1NJWkVdOworCXN0cnVjdCBjeWFwYV9nZW41X3RvdWNoX3JlY29yZCB0b3VjaF9yZWNvcmRzWzEwXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjeWFwYV90c2dfYmluX2ltYWdlX2hlYWQgeworCXU4IGhlYWRfc2l6ZTsgIC8qIFVuaXQ6IGJ5dGVzLCBpbmNsdWRpbmcgaXRzZWxmLiAqLworCXU4IHR0ZGFfZHJpdmVyX21ham9yX3ZlcnNpb247ICAvKiBSZXNlcnZlZCBhcyAwLiAqLworCXU4IHR0ZGFfZHJpdmVyX21pbm9yX3ZlcnNpb247ICAvKiBSZXNlcnZlZCBhcyAwLiAqLworCXU4IGZ3X21ham9yX3ZlcnNpb247CisJdTggZndfbWlub3JfdmVyc2lvbjsKKwl1OCBmd19yZXZpc2lvbl9jb250cm9sX251bWJlcls4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjeWFwYV90c2dfYmluX2ltYWdlX2RhdGFfcmVjb3JkIHsKKwl1OCBmbGFzaF9hcnJheV9pZDsKKwlfX2JlMTYgcm93X251bWJlcjsKKwkvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGZsYXNoIGRhdGEgY29udGFpbmVkIGluIHRoaXMgcmVjb3JkLiAqLworCV9fYmUxNiByZWNvcmRfbGVuOworCS8qIFRoZSBmbGFzaCBwcm9ncmFtIGRhdGEuICovCisJdTggcmVjb3JkX2RhdGFbQ1lBUEFfVFNHX0ZXX1JPV19TSVpFXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBjeWFwYV90c2dfYmluX2ltYWdlIHsKKwlzdHJ1Y3QgY3lhcGFfdHNnX2Jpbl9pbWFnZV9oZWFkIGltYWdlX2hlYWQ7CisJc3RydWN0IGN5YXBhX3RzZ19iaW5faW1hZ2VfZGF0YV9yZWNvcmQgcmVjb3Jkc1swXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBnZW41X2JsX3BhY2tldF9zdGFydCB7CisJdTggc29wOyAgLyogU3RhcnQgb2YgcGFja2V0LCBtdXN0IGJlIDAxaCAqLworCXU4IGNtZF9jb2RlOworCV9fbGUxNiBkYXRhX2xlbmd0aDsgIC8qIFNpemUgb2YgZGF0YSBwYXJhbWV0ZXIgc3RhcnQgZnJvbSBkYXRhWzBdICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgZ2VuNV9ibF9wYWNrZXRfZW5kIHsKKwlfX2xlMTYgY3JjOworCXU4IGVvcDsgIC8qIEVuZCBvZiBwYWNrZXQsIG11c3QgYmUgMTdoICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgZ2VuNV9ibF9jbWRfaGVhZCB7CisJX19sZTE2IGFkZHI7ICAgLyogT3V0cHV0IHJlcG9ydCByZWdpc3RlciBhZGRyZXNzLCBtdXN0IGJlIDAwMDRoICovCisJLyogU2l6ZSBvZiBwYWNrZXQgbm90IGluY2x1ZGluZyBvdXRwdXQgcmVwb3J0IHJlZ2lzdGVyIGFkZHJlc3MgKi8KKwlfX2xlMTYgbGVuZ3RoOworCXU4IHJlcG9ydF9pZDsgIC8qIEJvb3Rsb2FkZXIgb3V0cHV0IHJlcG9ydCBpZCwgbXVzdCBiZSA0MGggKi8KKwl1OCByc3ZkOyAgLyogUmVzZXJ2ZWQsIG11c3QgYmUgMCAqLworCXN0cnVjdCBnZW41X2JsX3BhY2tldF9zdGFydCBwYWNrZXRfc3RhcnQ7CisJdTggZGF0YVswXTsgIC8qIENvbW1hbmQgZGF0YSB2YXJpYWJsZSBiYXNlZCBvbiBjb21tYW5kcyAqLworfSBfX3BhY2tlZDsKKworLyogSW5pdGlhdGUgYm9vdGxvYWQgY29tbWFuZCBkYXRhIHN0cnVjdHVyZS4gKi8KK3N0cnVjdCBnZW41X2JsX2luaXRpYXRlX2NtZF9kYXRhIHsKKwkvKiBLZXkgbXVzdCBiZSAiQTVoIDAxaCAwMmggMDNoIEZGaCBGRWggRkRoIDVBaCIgKi8KKwl1OCBrZXlbQ1lBUEFfVFNHX0JMX0tFWV9TSVpFXTsKKwl1OCBtZXRhZGF0YV9yYXdfcGFyYW1ldGVyW0NZQVBBX1RTR19GTEFTSF9NQVBfTUVUQURBVEFfU0laRV07CisJX19sZTE2IG1ldGFkYXRhX2NyYzsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBnZW41X2JsX21ldGFkYXRhX3Jvd19wYXJhbXMgeworCV9fbGUxNiBzaXplOworCV9fbGUxNiBtYXhpbXVtX3NpemU7CisJX19sZTMyIGFwcF9zdGFydDsKKwlfX2xlMTYgYXBwX2xlbjsKKwlfX2xlMTYgYXBwX2NyYzsKKwlfX2xlMzIgYXBwX2VudHJ5OworCV9fbGUzMiB1cGdyYWRlX3N0YXJ0OworCV9fbGUxNiB1cGdyYWRlX2xlbjsKKwlfX2xlMTYgZW50cnlfcm93X2NyYzsKKwl1OCBwYWRkaW5nWzM2XTsgIC8qIFBhZGRpbmcgZGF0YSBtdXN0IGJlIDAgKi8KKwlfX2xlMTYgbWV0YWRhdGFfY3JjOyAgLyogQ1JDIHN0YXJ0cyBhdCBvZmZzZXQgb2YgNjAgKi8KK30gX19wYWNrZWQ7CisKKy8qIEJvb3Rsb2FkIHByb2dyYW0gYW5kIHZlcmlmeSByb3cgY29tbWFuZCBkYXRhIHN0cnVjdHVyZSAqLworc3RydWN0IGdlbjVfYmxfZmxhc2hfcm93X2hlYWQgeworCXU4IGZsYXNoX2FycmF5X2lkOworCV9fbGUxNiBmbGFzaF9yb3dfaWQ7CisJdTggZmxhc2hfZGF0YVswXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBnZW41X2FwcF9jbWRfaGVhZCB7CisJX19sZTE2IGFkZHI7ICAgLyogT3V0cHV0IHJlcG9ydCByZWdpc3RlciBhZGRyZXNzLCBtdXN0IGJlIDAwMDRoICovCisJLyogU2l6ZSBvZiBwYWNrZXQgbm90IGluY2x1ZGluZyBvdXRwdXQgcmVwb3J0IHJlZ2lzdGVyIGFkZHJlc3MgKi8KKwlfX2xlMTYgbGVuZ3RoOworCXU4IHJlcG9ydF9pZDsgIC8qIEFwcGxpY2F0aW9uIG91dHB1dCByZXBvcnQgaWQsIG11c3QgYmUgMkZoICovCisJdTggcnN2ZDsgIC8qIFJlc2VydmVkLCBtdXN0IGJlIDAgKi8KKwkvKgorCSAqIEJpdCA3OiByZXNlcnZlZCwgbXVzdCBiZSAwLgorCSAqIEJpdCA2LTA6IGNvbW1hbmQgY29kZS4KKwkgKi8KKwl1OCBjbWRfY29kZTsKKwl1OCBwYXJhbWV0ZXJfZGF0YVswXTsgIC8qIFBhcmFtZXRlciBkYXRhIHZhcmlhYmxlIGJhc2VkIG9uIGNtZF9jb2RlICovCit9IF9fcGFja2VkOworCisvKiBBcHBsaWNhdG9uIGdldC9zZXQgcGFyYW1ldGVyIGNvbW1hbmQgZGF0YSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBnZW41X2FwcF9zZXRfcGFyYW1ldGVyX2RhdGEgeworCXU4IHBhcmFtZXRlcl9pZDsKKwl1OCBwYXJhbWV0ZXJfc2l6ZTsKKwlfX2xlMzIgdmFsdWU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgZ2VuNV9hcHBfZ2V0X3BhcmFtZXRlcl9kYXRhIHsKKwl1OCBwYXJhbWV0ZXJfaWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgZ2VuNV9yZXRyaWV2ZV9wYW5lbF9zY2FuX2RhdGEgeworCV9fbGUxNiByZWFkX29mZnNldDsKKwlfX2xlMTYgcmVhZF9lbGVtZW50czsKKwl1OCBkYXRhX2lkOworfSBfX3BhY2tlZDsKKworLyogVmFyaWFibGVzIHRvIHJlY29yZCBsYXRlc3QgZ2VuNSB0cmFja3BhZCBwb3dlciBzdGF0ZXMuICovCisjZGVmaW5lIEdFTjVfREVWX1NFVF9QV1JfU1RBVEUoY3lhcGEsIHMpCSgoY3lhcGEpLT5kZXZfcHdyX21vZGUgPSAocykpCisjZGVmaW5lIEdFTjVfREVWX0dFVF9QV1JfU1RBVEUoY3lhcGEpCQkoKGN5YXBhKS0+ZGV2X3B3cl9tb2RlKQorI2RlZmluZSBHRU41X0RFVl9TRVRfU0xFRVBfVElNRShjeWFwYSwgdCkJKChjeWFwYSktPmRldl9zbGVlcF90aW1lID0gKHQpKQorI2RlZmluZSBHRU41X0RFVl9HRVRfU0xFRVBfVElNRShjeWFwYSkJCSgoY3lhcGEpLT5kZXZfc2xlZXBfdGltZSkKKyNkZWZpbmUgR0VONV9ERVZfVU5JTklUX1NMRUVQX1RJTUUoY3lhcGEpCVwKKwkJKCgoY3lhcGEpLT5kZXZfc2xlZXBfdGltZSkgPT0gVU5JTklUX1NMRUVQX1RJTUUpCisKKworc3RhdGljIHU4IGN5YXBhX2dlbjVfYmxfY21kX2tleVtdID0geyAweGE1LCAweDAxLCAweDAyLCAweDAzLAorCTB4ZmYsIDB4ZmUsIDB4ZmQsIDB4NWEgfTsKKworc3RhdGljIGludCBjeWFwYV9nZW41X2luaXRpYWxpemUoc3RydWN0IGN5YXBhICpjeWFwYSkKK3sKKwlzdHJ1Y3QgY3lhcGFfZ2VuNV9jbWRfc3RhdGVzICpnZW41X3BpcCA9ICZjeWFwYS0+Y21kX3N0YXRlcy5nZW41OworCisJaW5pdF9jb21wbGV0aW9uKCZnZW41X3BpcC0+Y21kX3JlYWR5KTsKKwlhdG9taWNfc2V0KCZnZW41X3BpcC0+Y21kX2lzc3VlZCwgMCk7CisJbXV0ZXhfaW5pdCgmZ2VuNV9waXAtPmNtZF9sb2NrKTsKKworCWdlbjVfcGlwLT5yZXNwX3NvcnRfZnVuYyA9IE5VTEw7CisJZ2VuNV9waXAtPmluX3Byb2dyZXNzX2NtZCA9IFRTR19JTlZBTElEX0NNRDsKKwlnZW41X3BpcC0+cmVzcF9kYXRhID0gTlVMTDsKKwlnZW41X3BpcC0+cmVzcF9sZW4gPSBOVUxMOworCisJY3lhcGEtPmRldl9wd3JfbW9kZSA9IFVOSU5JVF9QV1JfTU9ERTsKKwljeWFwYS0+ZGV2X3NsZWVwX3RpbWUgPSBVTklOSVRfU0xFRVBfVElNRTsKKworCXJldHVybiAwOworfQorCisvKiBSZXR1cm4gbmVnYXRpdmUgZXJybm8sIG9yIGVsc2UgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLiAqLworc3RhdGljIHNzaXplX3QgY3lhcGFfaTJjX3BpcF9yZWFkKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4ICpidWYsIHNpemVfdCBzaXplKQoreworCWludCByZXQ7CisKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmICghYnVmIHx8IHNpemUgPiBDWUFQQV9SRUdfTUFQX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gaTJjX21hc3Rlcl9yZWN2KGN5YXBhLT5jbGllbnQsIGJ1Ziwgc2l6ZSk7CisKKwlpZiAocmV0ICE9IHNpemUpCisJCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiAtRUlPOworCisJcmV0dXJuIHNpemU7Cit9CisKKy8qKgorICogUmV0dXJuIGEgbmVnYXRpdmUgZXJybm8gY29kZSBlbHNlIHplcm8gb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIHNzaXplX3QgY3lhcGFfaTJjX3BpcF93cml0ZShzdHJ1Y3QgY3lhcGEgKmN5YXBhLCB1OCAqYnVmLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFidWYgfHwgIXNpemUpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGN5YXBhLT5jbGllbnQsIGJ1Ziwgc2l6ZSk7CisKKwlpZiAocmV0ICE9IHNpemUpCisJCXJldHVybiAocmV0IDwgMCkgPyByZXQgOiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpcyBhaW1lZCB0byBkdW1wIGFsbCBub3QgcmVhZCBkYXRhIGluIEdlbjUgdHJhY2twYWQKKyAqIGJlZm9yZSBzZW5kIGFueSBjb21tYW5kLCBvdGhlcndpc2UsIHRoZSBpbnRlcnJ1cHQgbGluZSB3aWxsIGJlIGJsb2NrZWQuCisgKi8KK3N0YXRpYyBpbnQgY3lhcGFfZW1wdHlfcGlwX291dHB1dF9kYXRhKHN0cnVjdCBjeWFwYSAqY3lhcGEsCisJCXU4ICpidWYsIGludCAqbGVuLCBjYl9zb3J0IGZ1bmMpCit7CisJc3RydWN0IGN5YXBhX2dlbjVfY21kX3N0YXRlcyAqZ2VuNV9waXAgPSAmY3lhcGEtPmNtZF9zdGF0ZXMuZ2VuNTsKKwlpbnQgbGVuZ3RoOworCWludCByZXBvcnRfY291bnQ7CisJaW50IGVtcHR5X2NvdW50OworCWludCBidWZfbGVuOworCWludCBlcnJvcjsKKworCWJ1Zl9sZW4gPSAwOworCWlmIChsZW4pIHsKKwkJYnVmX2xlbiA9ICgqbGVuIDwgQ1lBUEFfUkVHX01BUF9TSVpFKSA/CisJCQkJKmxlbiA6IENZQVBBX1JFR19NQVBfU0laRTsKKwkJKmxlbiA9IDA7CisJfQorCisJcmVwb3J0X2NvdW50ID0gODsgIC8qIG1heCA3IHBlbmRpbmcgZGF0YSBiZWZvcmUgY29tbWFuZCByZXNwb25zZSBkYXRhICovCisJZW1wdHlfY291bnQgPSAwOworCWRvIHsKKwkJLyoKKwkJICogRGVwZW5kaW5nIG9uIHRlc3RpbmcgaW4gY3lhcGEgZHJpdmVyLCB0aGVyZSBhcmUgbWF4IDUgIjAyIDAwIgorCQkgKiBwYWNrZXRzIGJldHdlZW4gdHdvIHZhbGlkIGJ1ZmZlcmVkIGRhdGEgcmVwb3J0IGluIGZpcm13YXJlLgorCQkgKiBTbyBpbiBvcmRlciB0byBkdW1wIGFsbCBidWZmZXJlZCBkYXRhIG91dCBhbmQKKwkJICogbWFrZSBpbnRlcnJ1cHQgbGluZSByZWxlYXNlIGZvciByZWFzc2VydCBhZ2FpbiwKKwkJICogd2UgbXVzdCBzZXQgdGhlIGVtcHR5X2NvdW50IGNoZWNrIHZhbHVlIGJpZ2dlciB0aGFuIDUgdG8KKwkJICogbWFrZSBpdCB3b3JrLiBPdGhlcndpc2UsIGluIHNvbWUgc2l0dWF0aW9uLAorCQkgKiB0aGUgaW50ZXJydXB0IGxpbmUgbWF5IHVuYWJsZSB0byByZWFjdGl2ZSBhZ2FpbiwKKwkJICogd2hpY2ggd2lsbCBjYXVzZSB0cmFja3BhZCBkZXZpY2UgdW5hYmxlIHRvCisJCSAqIHJlcG9ydCBkYXRhIGFueSBtb3JlLgorCQkgKiBmb3IgZXhhbXBsZSwgaXQgbWF5IGhhcHBlbiBpbiBFRlQgYW5kIEVTRCB0ZXN0aW5nLgorCQkgKi8KKwkJaWYgKGVtcHR5X2NvdW50ID4gNSkKKwkJCXJldHVybiAwOworCisJCWVycm9yID0gY3lhcGFfaTJjX3BpcF9yZWFkKGN5YXBhLCBnZW41X3BpcC0+ZW1wdHlfYnVmLAorCQkJCUdFTjVfUkVTUF9MRU5HVEhfU0laRSk7CisJCWlmIChlcnJvciA8IDApCisJCQlyZXR1cm4gZXJyb3I7CisKKwkJbGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGdlbjVfcGlwLT5lbXB0eV9idWYpOworCQlpZiAobGVuZ3RoID09IEdFTjVfUkVTUF9MRU5HVEhfU0laRSkgeworCQkJZW1wdHlfY291bnQrKzsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKGxlbmd0aCA+IENZQVBBX1JFR19NQVBfU0laRSkgeworCQkJLyogU2hvdWxkIG5vdCBoYXBwZW4gKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQl9IGVsc2UgaWYgKGxlbmd0aCA9PSAwKSB7CisJCQkvKiBBcHBsaWNhdGlvbiBvciBib290bG9hZGVyIGxhdW5jaCBkYXRhIHBvbGxlZCBvdXQuICovCisJCQlsZW5ndGggPSBHRU41X1JFU1BfTEVOR1RIX1NJWkU7CisJCQlpZiAoYnVmICYmIGJ1Zl9sZW4gJiYgZnVuYyAmJgorCQkJCWZ1bmMoY3lhcGEsIGdlbjVfcGlwLT5lbXB0eV9idWYsIGxlbmd0aCkpIHsKKwkJCQlsZW5ndGggPSBtaW4oYnVmX2xlbiwgbGVuZ3RoKTsKKwkJCQltZW1jcHkoYnVmLCBnZW41X3BpcC0+ZW1wdHlfYnVmLCBsZW5ndGgpOworCQkJCSpsZW4gPSBsZW5ndGg7CisJCQkJLyogUmVzcG9uc2UgZm91bmQsIHN1Y2Nlc3MuICovCisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorCisJCWVycm9yID0gY3lhcGFfaTJjX3BpcF9yZWFkKGN5YXBhLCBnZW41X3BpcC0+ZW1wdHlfYnVmLCBsZW5ndGgpOworCQlpZiAoZXJyb3IgPCAwKQorCQkJcmV0dXJuIGVycm9yOworCisJCXJlcG9ydF9jb3VudC0tOworCQllbXB0eV9jb3VudCA9IDA7CisJCWxlbmd0aCA9IGdldF91bmFsaWduZWRfbGUxNihnZW41X3BpcC0+ZW1wdHlfYnVmKTsKKwkJaWYgKGxlbmd0aCA8PSBHRU41X1JFU1BfTEVOR1RIX1NJWkUpIHsKKwkJCWVtcHR5X2NvdW50Kys7CisJCX0gZWxzZSBpZiAoYnVmICYmIGJ1Zl9sZW4gJiYgZnVuYyAmJgorCQkJZnVuYyhjeWFwYSwgZ2VuNV9waXAtPmVtcHR5X2J1ZiwgbGVuZ3RoKSkgeworCQkJbGVuZ3RoID0gbWluKGJ1Zl9sZW4sIGxlbmd0aCk7CisJCQltZW1jcHkoYnVmLCBnZW41X3BpcC0+ZW1wdHlfYnVmLCBsZW5ndGgpOworCQkJKmxlbiA9IGxlbmd0aDsKKwkJCS8qIFJlc3BvbnNlIGZvdW5kLCBzdWNjZXNzLiAqLworCQkJcmV0dXJuIDA7CisJCX0KKworCQllcnJvciA9IC1FSU5WQUw7CisJfSB3aGlsZSAocmVwb3J0X2NvdW50KTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBjeWFwYV9kb19pMmNfcGlwX2NtZF9pcnFfc3luYygKKwkJc3RydWN0IGN5YXBhICpjeWFwYSwKKwkJdTggKmNtZCwgc2l6ZV90IGNtZF9sZW4sCisJCXVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3sKKwlzdHJ1Y3QgY3lhcGFfZ2VuNV9jbWRfc3RhdGVzICpnZW41X3BpcCA9ICZjeWFwYS0+Y21kX3N0YXRlcy5nZW41OworCWludCBlcnJvcjsKKworCS8qIFdhaXQgZm9yIGludGVycnVwdCB0byBzZXQgcmVhZHkgY29tcGxldGlvbiAqLworCWluaXRfY29tcGxldGlvbigmZ2VuNV9waXAtPmNtZF9yZWFkeSk7CisKKwlhdG9taWNfaW5jKCZnZW41X3BpcC0+Y21kX2lzc3VlZCk7CisJZXJyb3IgPSBjeWFwYV9pMmNfcGlwX3dyaXRlKGN5YXBhLCBjbWQsIGNtZF9sZW4pOworCWlmIChlcnJvcikgeworCQlhdG9taWNfZGVjKCZnZW41X3BpcC0+Y21kX2lzc3VlZCk7CisJCXJldHVybiAoZXJyb3IgPCAwKSA/IGVycm9yIDogLUVJTzsKKwl9CisKKwkvKiBXYWl0IGZvciBpbnRlcnJ1cHQgdG8gaW5kaWNhdGUgY29tbWFuZCBpcyBjb21wbGV0ZWQuICovCisJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZ2VuNV9waXAtPmNtZF9yZWFkeSwKKwkJCQltc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKTsKKwlpZiAodGltZW91dCA9PSAwKSB7CisJCWF0b21pY19kZWMoJmdlbjVfcGlwLT5jbWRfaXNzdWVkKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZG9faTJjX3BpcF9jbWRfcG9sbGluZygKKwkJc3RydWN0IGN5YXBhICpjeWFwYSwKKwkJdTggKmNtZCwgc2l6ZV90IGNtZF9sZW4sCisJCXU4ICpyZXNwX2RhdGEsIGludCAqcmVzcF9sZW4sCisJCXVuc2lnbmVkIGxvbmcgdGltZW91dCwKKwkJY2Jfc29ydCBmdW5jKQoreworCXN0cnVjdCBjeWFwYV9nZW41X2NtZF9zdGF0ZXMgKmdlbjVfcGlwID0gJmN5YXBhLT5jbWRfc3RhdGVzLmdlbjU7CisJaW50IHRyaWVzOworCWludCBsZW5ndGg7CisJaW50IGVycm9yOworCisJYXRvbWljX2luYygmZ2VuNV9waXAtPmNtZF9pc3N1ZWQpOworCWVycm9yID0gY3lhcGFfaTJjX3BpcF93cml0ZShjeWFwYSwgY21kLCBjbWRfbGVuKTsKKwlpZiAoZXJyb3IpIHsKKwkJYXRvbWljX2RlYygmZ2VuNV9waXAtPmNtZF9pc3N1ZWQpOworCQlyZXR1cm4gZXJyb3IgPCAwID8gZXJyb3IgOiAtRUlPOworCX0KKworCWxlbmd0aCA9IHJlc3BfbGVuID8gKnJlc3BfbGVuIDogMDsKKwlpZiAocmVzcF9kYXRhICYmIHJlc3BfbGVuICYmIGxlbmd0aCAhPSAwICYmIGZ1bmMpIHsKKwkJdHJpZXMgPSB0aW1lb3V0IC8gNTsKKwkJZG8geworCQkJdXNsZWVwX3JhbmdlKDMwMDAsIDUwMDApOworCQkJKnJlc3BfbGVuID0gbGVuZ3RoOworCQkJZXJyb3IgPSBjeWFwYV9lbXB0eV9waXBfb3V0cHV0X2RhdGEoY3lhcGEsCisJCQkJCXJlc3BfZGF0YSwgcmVzcF9sZW4sIGZ1bmMpOworCQkJaWYgKGVycm9yIHx8ICpyZXNwX2xlbiA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9IHdoaWxlICgtLXRyaWVzID4gMCk7CisJCWlmICgoZXJyb3IgfHwgKnJlc3BfbGVuID09IDApIHx8IHRyaWVzIDw9IDApCisJCQllcnJvciA9IGVycm9yID8gZXJyb3IgOiAtRVRJTUVET1VUOworCX0KKworCWF0b21pY19kZWMoJmdlbjVfcGlwLT5jbWRfaXNzdWVkKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfaTJjX3BpcF9jbWRfaXJxX3N5bmMoCisJCXN0cnVjdCBjeWFwYSAqY3lhcGEsCisJCXU4ICpjbWQsIGludCBjbWRfbGVuLAorCQl1OCAqcmVzcF9kYXRhLCBpbnQgKnJlc3BfbGVuLAorCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQsCisJCWNiX3NvcnQgZnVuYywKKwkJYm9vbCBpcnFfbW9kZSkKK3sKKwlzdHJ1Y3QgY3lhcGFfZ2VuNV9jbWRfc3RhdGVzICpnZW41X3BpcCA9ICZjeWFwYS0+Y21kX3N0YXRlcy5nZW41OworCWludCBlcnJvcjsKKworCWlmICghY21kIHx8ICFjbWRfbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIENvbW1hbmRzIG11c3QgYmUgc2VyaWFsaXplZC4gKi8KKwllcnJvciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ2VuNV9waXAtPmNtZF9sb2NrKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCWdlbjVfcGlwLT5yZXNwX3NvcnRfZnVuYyA9IGZ1bmM7CisJZ2VuNV9waXAtPnJlc3BfZGF0YSA9IHJlc3BfZGF0YTsKKwlnZW41X3BpcC0+cmVzcF9sZW4gPSByZXNwX2xlbjsKKworCWlmIChjbWRfbGVuID49IEdFTjVfTUlOX0FQUF9DTURfTEVOR1RIICYmCisJCQljbWRbNF0gPT0gR0VONV9BUFBfQ01EX1JFUE9SVF9JRCkgeworCQkvKiBBcHBsaWNhdGlvbiBjb21tYW5kICovCisJCWdlbjVfcGlwLT5pbl9wcm9ncmVzc19jbWQgPSBjbWRbNl0gJiAweDdmOworCX0gZWxzZSBpZiAoY21kX2xlbiA+PSBHRU41X01JTl9CTF9DTURfTEVOR1RIICYmCisJCQljbWRbNF0gPT0gR0VONV9CTF9DTURfUkVQT1JUX0lEKSB7CisJCS8qIEJvb3Rsb2FkZXIgY29tbWFuZCAqLworCQlnZW41X3BpcC0+aW5fcHJvZ3Jlc3NfY21kID0gY21kWzddOworCX0KKworCS8qIFNlbmQgY29tbWFuZCBkYXRhLCB3YWl0IGFuZCByZWFkIG91dHB1dCByZXNwb25zZSBkYXRhJ3MgbGVuZ3RoLiAqLworCWlmIChpcnFfbW9kZSkgeworCQlnZW41X3BpcC0+aXNfaXJxX21vZGUgPSB0cnVlOworCQllcnJvciA9IGN5YXBhX2RvX2kyY19waXBfY21kX2lycV9zeW5jKGN5YXBhLCBjbWQsIGNtZF9sZW4sCisJCQkJCQkJdGltZW91dCk7CisJCWlmIChlcnJvciA9PSAtRVRJTUVET1VUICYmIHJlc3BfZGF0YSAmJgorCQkJCXJlc3BfbGVuICYmICpyZXNwX2xlbiAhPSAwICYmIGZ1bmMpIHsKKwkJCS8qCisJCQkgKiBGb3Igc29tZSBvbGQgdmVyc2lvbiwgdGhlcmUgd2FzIG5vIGludGVycnVwdCBmb3IKKwkJCSAqIHRoZSBjb21tYW5kIHJlc3BvbnNlIGRhdGEsIHNvIG5lZWQgdG8gcG9sbCBoZXJlCisJCQkgKiB0byB0cnkgdG8gZ2V0IHRoZSByZXNwb25zZSBkYXRhLgorCQkJICovCisJCQllcnJvciA9IGN5YXBhX2VtcHR5X3BpcF9vdXRwdXRfZGF0YShjeWFwYSwKKwkJCQkJcmVzcF9kYXRhLCByZXNwX2xlbiwgZnVuYyk7CisJCQlpZiAoZXJyb3IgfHwgKnJlc3BfbGVuID09IDApCisJCQkJZXJyb3IgPSBlcnJvciA/IGVycm9yIDogLUVUSU1FRE9VVDsKKwkJfQorCX0gZWxzZSB7CisJCWdlbjVfcGlwLT5pc19pcnFfbW9kZSA9IGZhbHNlOworCQllcnJvciA9IGN5YXBhX2RvX2kyY19waXBfY21kX3BvbGxpbmcoY3lhcGEsIGNtZCwgY21kX2xlbiwKKwkJCQlyZXNwX2RhdGEsIHJlc3BfbGVuLCB0aW1lb3V0LCBmdW5jKTsKKwl9CisKKwlnZW41X3BpcC0+cmVzcF9zb3J0X2Z1bmMgPSBOVUxMOworCWdlbjVfcGlwLT5yZXNwX2RhdGEgPSBOVUxMOworCWdlbjVfcGlwLT5yZXNwX2xlbiA9IE5VTEw7CisJZ2VuNV9waXAtPmluX3Byb2dyZXNzX2NtZCA9IFRTR19JTlZBTElEX0NNRDsKKworCW11dGV4X3VubG9jaygmZ2VuNV9waXAtPmNtZF9sb2NrKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBib29sIGN5YXBhX2dlbjVfc29ydF90c2dfcGlwX2JsX3Jlc3BfZGF0YShzdHJ1Y3QgY3lhcGEgKmN5YXBhLAorCQl1OCAqZGF0YSwgaW50IGxlbikKK3sKKwlpZiAoIWRhdGEgfHwgbGVuIDwgR0VONV9NSU5fQkxfUkVTUF9MRU5HVEgpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEJvb3Rsb2FkZXIgaW5wdXQgcmVwb3J0IGlkIDMwaCAqLworCWlmIChkYXRhW0dFTjVfUkVTUF9SRVBPUlRfSURfT0ZGU0VUXSA9PSBHRU41X0JMX1JFU1BfUkVQT1JUX0lEICYmCisJCQlkYXRhW0dFTjVfUkVTUF9SU1ZEX09GRlNFVF0gPT0gR0VONV9SRVNQX1JTVkRfS0VZICYmCisJCQlkYXRhW0dFTjVfUkVTUF9CTF9TT1BfT0ZGU0VUXSA9PSBHRU41X1NPUF9LRVkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBjeWFwYV9nZW41X3NvcnRfdHNnX3BpcF9hcHBfcmVzcF9kYXRhKHN0cnVjdCBjeWFwYSAqY3lhcGEsCisJCXU4ICpkYXRhLCBpbnQgbGVuKQoreworCXN0cnVjdCBjeWFwYV9nZW41X2NtZF9zdGF0ZXMgKmdlbjVfcGlwID0gJmN5YXBhLT5jbWRfc3RhdGVzLmdlbjU7CisJaW50IHJlc3BfbGVuOworCisJaWYgKCFkYXRhIHx8IGxlbiA8IEdFTjVfTUlOX0FQUF9SRVNQX0xFTkdUSCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGRhdGFbR0VONV9SRVNQX1JFUE9SVF9JRF9PRkZTRVRdID09IEdFTjVfQVBQX1JFU1BfUkVQT1JUX0lEICYmCisJCQlkYXRhW0dFTjVfUkVTUF9SU1ZEX09GRlNFVF0gPT0gR0VONV9SRVNQX1JTVkRfS0VZKSB7CisJCXJlc3BfbGVuID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZkYXRhW0dFTjVfUkVTUF9MRU5HVEhfT0ZGU0VUXSk7CisJCWlmIChHRVRfR0VONV9DTURfQ09ERShkYXRhW0dFTjVfUkVTUF9BUFBfQ01EX09GRlNFVF0pID09IDB4MDAgJiYKKwkJCXJlc3BfbGVuID09IEdFTjVfVU5TVVBQT1JURURfQ01EX1JFU1BfTEVOR1RIICYmCisJCQlkYXRhWzVdID09IGdlbjVfcGlwLT5pbl9wcm9ncmVzc19jbWQpIHsKKwkJCS8qIFVuc3VwcG9ydGVkIGNvbW1hbmQgY29kZSAqLworCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2UgaWYgKEdFVF9HRU41X0NNRF9DT0RFKGRhdGFbR0VONV9SRVNQX0FQUF9DTURfT0ZGU0VUXSkgPT0KKwkJCQlnZW41X3BpcC0+aW5fcHJvZ3Jlc3NfY21kKSB7CisJCQkvKiBDb3JyZWN0IGNvbW1hbmQgcmVzcG9uc2UgcmVjZWl2ZWQgKi8KKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBjeWFwYV9nZW41X3NvcnRfYXBwbGljYXRpb25fbGF1bmNoX2RhdGEoc3RydWN0IGN5YXBhICpjeWFwYSwKKwkJdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlpZiAoYnVmID09IE5VTEwgfHwgbGVuIDwgR0VONV9SRVNQX0xFTkdUSF9TSVpFKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIEFmdGVyIHJlc2V0IG9yIHBvd2VyIG9uLCB0cmFja3BhZCBkZXZpY2UgYWx3YXlzIHNldHMgdG8gMHgwMCAweDAwCisJICogdG8gaW5kaWNhdGUgYSByZXNldCBvciBwb3dlciBvbiBldmVudC4KKwkgKi8KKwlpZiAoYnVmWzBdID09IDAgJiYgYnVmWzFdID09IDApCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBjeWFwYV9nZW41X3NvcnRfaGlkX2Rlc2NyaXB0b3JfZGF0YShzdHJ1Y3QgY3lhcGEgKmN5YXBhLAorCQl1OCAqYnVmLCBpbnQgbGVuKQoreworCWludCByZXNwX2xlbjsKKwlpbnQgbWF4X291dHB1dF9sZW47CisKKwkvKiBDaGVjayBoaWQgZGVzY3JpcHRvci4gKi8KKwlpZiAobGVuICE9IEdFTjVfSElEX0RFU0NSSVBUT1JfU0laRSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmVzcF9sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYoJmJ1ZltHRU41X1JFU1BfTEVOR1RIX09GRlNFVF0pOworCW1heF9vdXRwdXRfbGVuID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZidWZbMTZdKTsKKwlpZiAocmVzcF9sZW4gPT0gR0VONV9ISURfREVTQ1JJUFRPUl9TSVpFKSB7CisJCWlmIChidWZbR0VONV9SRVNQX1JFUE9SVF9JRF9PRkZTRVRdID09IEdFTjVfQkxfSElEX1JFUE9SVF9JRCAmJgorCQkJCW1heF9vdXRwdXRfbGVuID09IEdFTjVfQkxfTUFYX09VVFBVVF9MRU5HVEgpIHsKKwkJCS8qIEJMIG1vZGUgSElEIERlc2NyaXB0b3IgKi8KKwkJCXJldHVybiB0cnVlOworCQl9IGVsc2UgaWYgKChidWZbR0VONV9SRVNQX1JFUE9SVF9JRF9PRkZTRVRdID09CisJCQkJR0VONV9BUFBfSElEX1JFUE9SVF9JRCkgJiYKKwkJCQltYXhfb3V0cHV0X2xlbiA9PSBHRU41X0FQUF9NQVhfT1VUUFVUX0xFTkdUSCkgeworCQkJLyogQVBQIG1vZGUgSElEIERlc2NyaXB0b3IgKi8KKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbCBjeWFwYV9nZW41X3NvcnRfZGVlcF9zbGVlcF9kYXRhKHN0cnVjdCBjeWFwYSAqY3lhcGEsCisJCXU4ICpidWYsIGludCBsZW4pCit7CisJaWYgKGxlbiA9PSBHRU41X0RFRVBfU0xFRVBfUkVTUF9MRU5HVEggJiYKKwkJYnVmW0dFTjVfUkVTUF9SRVBPUlRfSURfT0ZGU0VUXSA9PQorCQkJR0VONV9BUFBfREVFUF9TTEVFUF9SRVBPUlRfSUQgJiYKKwkJKGJ1Zls0XSAmIEdFTjVfREVFUF9TTEVFUF9PUENPREVfTUFTSykgPT0KKwkJCUdFTjVfREVFUF9TTEVFUF9PUENPREUpCisJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGludCBnZW41X2lkbGVfc3RhdGVfcGFyc2Uoc3RydWN0IGN5YXBhICpjeWFwYSkKK3sKKwl1OCByZXNwX2RhdGFbR0VONV9ISURfREVTQ1JJUFRPUl9TSVpFXTsKKwlpbnQgbWF4X291dHB1dF9sZW47CisJaW50IGxlbmd0aDsKKwl1OCBjbWRbMl07CisJaW50IHJldDsKKwlpbnQgZXJyb3I7CisKKwkvKgorCSAqIER1bXAgYWxsIGJ1ZmZlcmVkIGRhdGEgZmlyc3RseSBmb3IgdGhlIHNpdHVhdGlvbgorCSAqIHdoZW4gdGhlIHRyYWNrcGFkIGlzIGp1c3QgcG93ZXIgb24gdGhlIGN5YXBhIGdvIGhlcmUuCisJICovCisJY3lhcGFfZW1wdHlfcGlwX291dHB1dF9kYXRhKGN5YXBhLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCW1lbXNldChyZXNwX2RhdGEsIDAsIHNpemVvZihyZXNwX2RhdGEpKTsKKwlyZXQgPSBjeWFwYV9pMmNfcGlwX3JlYWQoY3lhcGEsIHJlc3BfZGF0YSwgMyk7CisJaWYgKHJldCAhPSAzKQorCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IC1FSU87CisKKwlsZW5ndGggPSBnZXRfdW5hbGlnbmVkX2xlMTYoJnJlc3BfZGF0YVtHRU41X1JFU1BfTEVOR1RIX09GRlNFVF0pOworCWlmIChsZW5ndGggPT0gR0VONV9SRVNQX0xFTkdUSF9TSVpFKSB7CisJCS8qIE5vcm1hbCBzdGF0ZSBvZiBHZW41IHdpdGggbm8gZGF0YSB0byByZXNwb3NlICovCisJCWN5YXBhLT5nZW4gPSBDWUFQQV9HRU41OworCisJCWN5YXBhX2VtcHR5X3BpcF9vdXRwdXRfZGF0YShjeWFwYSwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwkJLyogUmVhZCBkZXNjcmlwdGlvbiBmcm9tIHRyYWNrcGFkIGRldmljZSAqLworCQljbWRbMF0gPSAweDAxOworCQljbWRbMV0gPSAweDAwOworCQlsZW5ndGggPSBHRU41X0hJRF9ERVNDUklQVE9SX1NJWkU7CisJCWVycm9yID0gY3lhcGFfaTJjX3BpcF9jbWRfaXJxX3N5bmMoY3lhcGEsCisJCQkJY21kLCBHRU41X1JFU1BfTEVOR1RIX1NJWkUsCisJCQkJcmVzcF9kYXRhLCAmbGVuZ3RoLAorCQkJCTMwMCwKKwkJCQljeWFwYV9nZW41X3NvcnRfaGlkX2Rlc2NyaXB0b3JfZGF0YSwKKwkJCQlmYWxzZSk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKworCQlsZW5ndGggPSBnZXRfdW5hbGlnbmVkX2xlMTYoCisJCQkJJnJlc3BfZGF0YVtHRU41X1JFU1BfTEVOR1RIX09GRlNFVF0pOworCQltYXhfb3V0cHV0X2xlbiA9IGdldF91bmFsaWduZWRfbGUxNigmcmVzcF9kYXRhWzE2XSk7CisJCWlmICgobGVuZ3RoID09IEdFTjVfSElEX0RFU0NSSVBUT1JfU0laRSB8fAorCQkJCWxlbmd0aCA9PSBHRU41X1JFU1BfTEVOR1RIX1NJWkUpICYmCisJCQkocmVzcF9kYXRhW0dFTjVfUkVTUF9SRVBPUlRfSURfT0ZGU0VUXSA9PQorCQkJCUdFTjVfQkxfSElEX1JFUE9SVF9JRCkgJiYKKwkJCW1heF9vdXRwdXRfbGVuID09IEdFTjVfQkxfTUFYX09VVFBVVF9MRU5HVEgpIHsKKwkJCS8qIEJMIG1vZGUgSElEIERlc2NyaXB0aW9uIHJlYWQgKi8KKwkJCWN5YXBhLT5zdGF0ZSA9IENZQVBBX1NUQVRFX0dFTjVfQkw7CisJCX0gZWxzZSBpZiAoKGxlbmd0aCA9PSBHRU41X0hJRF9ERVNDUklQVE9SX1NJWkUgfHwKKwkJCQlsZW5ndGggPT0gR0VONV9SRVNQX0xFTkdUSF9TSVpFKSAmJgorCQkJKHJlc3BfZGF0YVtHRU41X1JFU1BfUkVQT1JUX0lEX09GRlNFVF0gPT0KKwkJCQlHRU41X0FQUF9ISURfUkVQT1JUX0lEKSAmJgorCQkJbWF4X291dHB1dF9sZW4gPT0gR0VONV9BUFBfTUFYX09VVFBVVF9MRU5HVEgpIHsKKwkJCS8qIEFQUCBtb2RlIEhJRCBEZXNjcmlwdGlvbiByZWFkICovCisJCQljeWFwYS0+c3RhdGUgPSBDWUFQQV9TVEFURV9HRU41X0FQUDsKKwkJfSBlbHNlIHsKKwkJCS8qIFNob3VsZCBub3QgaGFwcGVuISEhICovCisJCQljeWFwYS0+c3RhdGUgPSBDWUFQQV9TVEFURV9OT19ERVZJQ0U7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZW41X2hpZF9kZXNjcmlwdGlvbl9oZWFkZXJfcGFyc2Uoc3RydWN0IGN5YXBhICpjeWFwYSwgdTggKnJlZ19kYXRhKQoreworCWludCBsZW5ndGg7CisJdTggcmVzcF9kYXRhWzMyXTsKKwlpbnQgbWF4X291dHB1dF9sZW47CisJaW50IHJldDsKKworCS8qIDB4MjAgMHgwMCAweEY3IGlzIEdlbjUgQXBwbGljYXRpb24gSElEIERlc2NyaXB0aW9uIEhlYWRlcjsKKwkgKiAweDIwIDB4MDAgMHhGRiBpcyBHZW41IEJvb2xvYWRlciBISUQgRGVzY3JpcHRpb24gSGVhZGVyLgorCSAqCisJICogTXVzdCByZWFkIEhJRCBEZXNjcmlwdGlvbiBjb250ZW50IHRocm91Z2ggb3V0LAorCSAqIG90aGVyd2lzZSBHZW41IHRyYWNrcGFkIGNhbm5vdCByZXNwb25zZSBuZXh0IGNvbW1hbmQKKwkgKiBvciByZXBvcnQgYW55IHRvdWNoIG9yIGJ1dHRvbiBkYXRhLgorCSAqLworCXJldCA9IGN5YXBhX2kyY19waXBfcmVhZChjeWFwYSwgcmVzcF9kYXRhLAorCQkJR0VONV9ISURfREVTQ1JJUFRPUl9TSVpFKTsKKwlpZiAocmV0ICE9IEdFTjVfSElEX0RFU0NSSVBUT1JfU0laRSkKKwkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUlPOworCWxlbmd0aCA9IGdldF91bmFsaWduZWRfbGUxNigmcmVzcF9kYXRhW0dFTjVfUkVTUF9MRU5HVEhfT0ZGU0VUXSk7CisJbWF4X291dHB1dF9sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYoJnJlc3BfZGF0YVsxNl0pOworCWlmIChsZW5ndGggPT0gR0VONV9SRVNQX0xFTkdUSF9TSVpFKSB7CisJCWlmIChyZWdfZGF0YVtHRU41X1JFU1BfUkVQT1JUX0lEX09GRlNFVF0gPT0KKwkJCQlHRU41X0JMX0hJRF9SRVBPUlRfSUQpIHsKKwkJCS8qCisJCQkgKiBCTCBtb2RlIEhJRCBEZXNjcmlwdGlvbiBoYXMgYmVlbiBwcmV2aW91c2x5CisJCQkgKiByZWFkIG91dC4KKwkJCSAqLworCQkJY3lhcGEtPmdlbiA9IENZQVBBX0dFTjU7CisJCQljeWFwYS0+c3RhdGUgPSBDWUFQQV9TVEFURV9HRU41X0JMOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEFQUCBtb2RlIEhJRCBEZXNjcmlwdGlvbiBoYXMgYmVlbiBwcmV2aW91c2x5CisJCQkgKiByZWFkIG91dC4KKwkJCSAqLworCQkJY3lhcGEtPmdlbiA9IENZQVBBX0dFTjU7CisJCQljeWFwYS0+c3RhdGUgPSBDWUFQQV9TVEFURV9HRU41X0FQUDsKKwkJfQorCX0gZWxzZSBpZiAobGVuZ3RoID09IEdFTjVfSElEX0RFU0NSSVBUT1JfU0laRSAmJgorCQkJcmVzcF9kYXRhWzJdID09IEdFTjVfQkxfSElEX1JFUE9SVF9JRCAmJgorCQkJbWF4X291dHB1dF9sZW4gPT0gR0VONV9CTF9NQVhfT1VUUFVUX0xFTkdUSCkgeworCQkvKiBCTCBtb2RlIEhJRCBEZXNjcmlwdGlvbiByZWFkLiAqLworCQljeWFwYS0+Z2VuID0gQ1lBUEFfR0VONTsKKwkJY3lhcGEtPnN0YXRlID0gQ1lBUEFfU1RBVEVfR0VONV9CTDsKKwl9IGVsc2UgaWYgKGxlbmd0aCA9PSBHRU41X0hJRF9ERVNDUklQVE9SX1NJWkUgJiYKKwkJCShyZXNwX2RhdGFbR0VONV9SRVNQX1JFUE9SVF9JRF9PRkZTRVRdID09CisJCQkJR0VONV9BUFBfSElEX1JFUE9SVF9JRCkgJiYKKwkJCW1heF9vdXRwdXRfbGVuID09IEdFTjVfQVBQX01BWF9PVVRQVVRfTEVOR1RIKSB7CisJCS8qIEFQUCBtb2RlIEhJRCBEZXNjcmlwdGlvbiByZWFkLiAqLworCQljeWFwYS0+Z2VuID0gQ1lBUEFfR0VONTsKKwkJY3lhcGEtPnN0YXRlID0gQ1lBUEFfU1RBVEVfR0VONV9BUFA7CisJfSBlbHNlIHsKKwkJLyogU2hvdWxkIG5vdCBoYXBwZW4hISEgKi8KKwkJY3lhcGEtPnN0YXRlID0gQ1lBUEFfU1RBVEVfTk9fREVWSUNFOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdlbjVfcmVwb3J0X2RhdGFfaGVhZGVyX3BhcnNlKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4ICpyZWdfZGF0YSkKK3sKKwlpbnQgbGVuZ3RoOworCisJbGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZyZWdfZGF0YVtHRU41X1JFU1BfTEVOR1RIX09GRlNFVF0pOworCXN3aXRjaCAocmVnX2RhdGFbR0VONV9SRVNQX1JFUE9SVF9JRF9PRkZTRVRdKSB7CisJY2FzZSBHRU41X1RPVUNIX1JFUE9SVF9JRDoKKwkJaWYgKGxlbmd0aCA8IEdFTjVfVE9VQ0hfUkVQT1JUX0hFQURfU0laRSB8fAorCQkJbGVuZ3RoID4gR0VONV9UT1VDSF9SRVBPUlRfTUFYX1NJWkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBHRU41X0JUTl9SRVBPUlRfSUQ6CisJY2FzZSBHRU41X09MRF9QVVNIX0JUTl9SRVBPUlRfSUQ6CisJY2FzZSBHRU41X1BVU0hfQlROX1JFUE9SVF9JRDoKKwkJaWYgKGxlbmd0aCA8IEdFTjVfQlROX1JFUE9SVF9IRUFEX1NJWkUgfHwKKwkJCWxlbmd0aCA+IEdFTjVfQlROX1JFUE9SVF9NQVhfU0laRSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIEdFTjVfV0FLRVVQX0VWRU5UX1JFUE9SVF9JRDoKKwkJaWYgKGxlbmd0aCAhPSBHRU41X1dBS0VVUF9FVkVOVF9TSVpFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWN5YXBhLT5nZW4gPSBDWUFQQV9HRU41OworCWN5YXBhLT5zdGF0ZSA9IENZQVBBX1NUQVRFX0dFTjVfQVBQOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdlbjVfY21kX3Jlc3BfaGVhZGVyX3BhcnNlKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4ICpyZWdfZGF0YSkKK3sKKwlzdHJ1Y3QgY3lhcGFfZ2VuNV9jbWRfc3RhdGVzICpnZW41X3BpcCA9ICZjeWFwYS0+Y21kX3N0YXRlcy5nZW41OworCWludCBsZW5ndGg7CisJaW50IHJldDsKKworCS8qCisJICogTXVzdCByZWFkIHJlcG9ydCBkYXRhIHRocm91Z2ggb3V0LAorCSAqIG90aGVyd2lzZSBHZW41IHRyYWNrcGFkIGNhbm5vdCByZXNwb25zZSBuZXh0IGNvbW1hbmQKKwkgKiBvciByZXBvcnQgYW55IHRvdWNoIG9yIGJ1dHRvbiBkYXRhLgorCSAqLworCWxlbmd0aCA9IGdldF91bmFsaWduZWRfbGUxNigmcmVnX2RhdGFbR0VONV9SRVNQX0xFTkdUSF9PRkZTRVRdKTsKKwlyZXQgPSBjeWFwYV9pMmNfcGlwX3JlYWQoY3lhcGEsIGdlbjVfcGlwLT5lbXB0eV9idWYsIGxlbmd0aCk7CisJaWYgKHJldCAhPSBsZW5ndGgpCisJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVJTzsKKworCWlmIChsZW5ndGggPT0gR0VONV9SRVNQX0xFTkdUSF9TSVpFKSB7CisJCS8qIFByZXZpb3VzIGNvbW1hbmQgaGFzIHJlYWQgdGhlIGRhdGEgdGhyb3VnaCBvdXQuICovCisJCWlmIChyZWdfZGF0YVtHRU41X1JFU1BfUkVQT1JUX0lEX09GRlNFVF0gPT0KKwkJCQlHRU41X0JMX1JFU1BfUkVQT1JUX0lEKSB7CisJCQkvKiBHZW41IEJMIGNvbW1hbmQgcmVzcG9uc2UgZGF0YSBkZXRlY3RlZCAqLworCQkJY3lhcGEtPmdlbiA9IENZQVBBX0dFTjU7CisJCQljeWFwYS0+c3RhdGUgPSBDWUFQQV9TVEFURV9HRU41X0JMOworCQl9IGVsc2UgeworCQkJLyogR2VuNSBBUFAgY29tbWFuZCByZXNwb25zZSBkYXRhIGRldGVjdGVkICovCisJCQljeWFwYS0+Z2VuID0gQ1lBUEFfR0VONTsKKwkJCWN5YXBhLT5zdGF0ZSA9IENZQVBBX1NUQVRFX0dFTjVfQVBQOworCQl9CisJfSBlbHNlIGlmICgoZ2VuNV9waXAtPmVtcHR5X2J1ZltHRU41X1JFU1BfUkVQT1JUX0lEX09GRlNFVF0gPT0KKwkJCQlHRU41X0JMX1JFU1BfUkVQT1JUX0lEKSAmJgorCQkJKGdlbjVfcGlwLT5lbXB0eV9idWZbR0VONV9SRVNQX1JTVkRfT0ZGU0VUXSA9PQorCQkJCUdFTjVfUkVTUF9SU1ZEX0tFWSkgJiYKKwkJCShnZW41X3BpcC0+ZW1wdHlfYnVmW0dFTjVfUkVTUF9CTF9TT1BfT0ZGU0VUXSA9PQorCQkJCUdFTjVfU09QX0tFWSkgJiYKKwkJCShnZW41X3BpcC0+ZW1wdHlfYnVmW2xlbmd0aCAtIDFdID09CisJCQkJR0VONV9FT1BfS0VZKSkgeworCQkvKiBHZW41IEJMIGNvbW1hbmQgcmVzcG9uc2UgZGF0YSBkZXRlY3RlZCAqLworCQljeWFwYS0+Z2VuID0gQ1lBUEFfR0VONTsKKwkJY3lhcGEtPnN0YXRlID0gQ1lBUEFfU1RBVEVfR0VONV9CTDsKKwl9IGVsc2UgaWYgKGdlbjVfcGlwLT5lbXB0eV9idWZbR0VONV9SRVNQX1JFUE9SVF9JRF9PRkZTRVRdID09CisJCQkJR0VONV9BUFBfUkVTUF9SRVBPUlRfSUQgJiYKKwkJCWdlbjVfcGlwLT5lbXB0eV9idWZbR0VONV9SRVNQX1JTVkRfT0ZGU0VUXSA9PQorCQkJCUdFTjVfUkVTUF9SU1ZEX0tFWSkgeworCQkvKiBHZW41IEFQUCBjb21tYW5kIHJlc3BvbnNlIGRhdGEgZGV0ZWN0ZWQgKi8KKwkJY3lhcGEtPmdlbiA9IENZQVBBX0dFTjU7CisJCWN5YXBhLT5zdGF0ZSA9IENZQVBBX1NUQVRFX0dFTjVfQVBQOworCX0gZWxzZSB7CisJCS8qIFNob3VsZCBub3QgaGFwcGVuISEhICovCisJCWN5YXBhLT5zdGF0ZSA9IENZQVBBX1NUQVRFX05PX0RFVklDRTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeWFwYV9nZW41X3N0YXRlX3BhcnNlKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4ICpyZWdfZGF0YSwgaW50IGxlbikKK3sKKwlpbnQgbGVuZ3RoOworCisJaWYgKCFyZWdfZGF0YSB8fCBsZW4gPCAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN5YXBhLT5zdGF0ZSA9IENZQVBBX1NUQVRFX05PX0RFVklDRTsKKworCS8qIFBhcnNlIGJhc2VkIG9uIEdlbjUgY2hhcmFjdGVyaXN0aWMgcmVnaXN0ZXJzIGFuZCBiaXRzICovCisJbGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZyZWdfZGF0YVtHRU41X1JFU1BfTEVOR1RIX09GRlNFVF0pOworCWlmIChsZW5ndGggPT0gMCB8fCBsZW5ndGggPT0gR0VONV9SRVNQX0xFTkdUSF9TSVpFKSB7CisJCWdlbjVfaWRsZV9zdGF0ZV9wYXJzZShjeWFwYSk7CisJfSBlbHNlIGlmIChsZW5ndGggPT0gR0VONV9ISURfREVTQ1JJUFRPUl9TSVpFICYmCisJCQkocmVnX2RhdGFbMl0gPT0gR0VONV9CTF9ISURfUkVQT1JUX0lEIHx8CisJCQkJcmVnX2RhdGFbMl0gPT0gR0VONV9BUFBfSElEX1JFUE9SVF9JRCkpIHsKKwkJZ2VuNV9oaWRfZGVzY3JpcHRpb25faGVhZGVyX3BhcnNlKGN5YXBhLCByZWdfZGF0YSk7CisJfSBlbHNlIGlmICgobGVuZ3RoID09IEdFTjVfQVBQX1JFUE9SVF9ERVNDUklQVE9SX1NJWkUgfHwKKwkJCWxlbmd0aCA9PSBHRU41X0FQUF9DT05UUkFDVF9SRVBPUlRfREVTQ1JJUFRPUl9TSVpFKSAmJgorCQkJcmVnX2RhdGFbMl0gPT0gR0VONV9BUFBfUkVQT1JUX0RFU0NSSVBUT1JfSUQpIHsKKwkJLyogMHhFRSAweDAwIDB4RjYgaXMgR2VuNSBBUFAgcmVwb3J0IGRlc2NyaXB0aW9uIGhlYWRlci4gKi8KKwkJY3lhcGEtPmdlbiA9IENZQVBBX0dFTjU7CisJCWN5YXBhLT5zdGF0ZSA9IENZQVBBX1NUQVRFX0dFTjVfQVBQOworCX0gZWxzZSBpZiAobGVuZ3RoID09IEdFTjVfQkxfUkVQT1JUX0RFU0NSSVBUT1JfU0laRSAmJgorCQkJcmVnX2RhdGFbMl0gPT0gR0VONV9CTF9SRVBPUlRfREVTQ1JJUFRPUl9JRCkgeworCQkvKiAweDFEIDB4MDAgMHhGRSBpcyBHZW41IEJMIHJlcG9ydCBkZXNjcmlwdGlvciBoZWFkZXIuICovCisJCWN5YXBhLT5nZW4gPSBDWUFQQV9HRU41OworCQljeWFwYS0+c3RhdGUgPSBDWUFQQV9TVEFURV9HRU41X0JMOworCX0gZWxzZSBpZiAocmVnX2RhdGFbMl0gPT0gR0VONV9UT1VDSF9SRVBPUlRfSUQgfHwKKwkJCXJlZ19kYXRhWzJdID09IEdFTjVfQlROX1JFUE9SVF9JRCB8fAorCQkJcmVnX2RhdGFbMl0gPT0gR0VONV9PTERfUFVTSF9CVE5fUkVQT1JUX0lEIHx8CisJCQlyZWdfZGF0YVsyXSA9PSBHRU41X1BVU0hfQlROX1JFUE9SVF9JRCB8fAorCQkJcmVnX2RhdGFbMl0gPT0gR0VONV9XQUtFVVBfRVZFTlRfUkVQT1JUX0lEKSB7CisJCWdlbjVfcmVwb3J0X2RhdGFfaGVhZGVyX3BhcnNlKGN5YXBhLCByZWdfZGF0YSk7CisJfSBlbHNlIGlmIChyZWdfZGF0YVsyXSA9PSBHRU41X0JMX1JFU1BfUkVQT1JUX0lEIHx8CisJCQlyZWdfZGF0YVsyXSA9PSBHRU41X0FQUF9SRVNQX1JFUE9SVF9JRCkgeworCQlnZW41X2NtZF9yZXNwX2hlYWRlcl9wYXJzZShjeWFwYSwgcmVnX2RhdGEpOworCX0KKworCWlmIChjeWFwYS0+Z2VuID09IENZQVBBX0dFTjUpIHsKKwkJLyoKKwkJICogTXVzdCByZWFkIHRoZSBjb250ZW50IChlLmcuOiByZXBvcnQgZGVzY3JpcHRpb24gYW5kIHNvIG9uKQorCQkgKiBmcm9tIHRyYWNrcGFkIGRldmljZSB0aHJvdWdob3V0LiBPdGhlcndpc2UsCisJCSAqIEdlbjUgdHJhY2twYWQgY2Fubm90IHJlc3BvbnNlIHRvIG5leHQgY29tbWFuZCBvcgorCQkgKiByZXBvcnQgYW55IHRvdWNoIG9yIGJ1dHRvbiBkYXRhIGxhdGVyLgorCQkgKi8KKwkJY3lhcGFfZW1wdHlfcGlwX291dHB1dF9kYXRhKGN5YXBhLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCQlpZiAoY3lhcGEtPnN0YXRlID09IENZQVBBX1NUQVRFX0dFTjVfQVBQIHx8CisJCQljeWFwYS0+c3RhdGUgPT0gQ1lBUEFfU1RBVEVfR0VONV9CTCkKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRUFHQUlOOworfQorCitzdGF0aWMgaW50IGN5YXBhX2dlbjVfYmxfaW5pdGlhdGUoc3RydWN0IGN5YXBhICpjeWFwYSwKKwkJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdykKK3sKKwlzdHJ1Y3QgY3lhcGFfdHNnX2Jpbl9pbWFnZSAqaW1hZ2U7CisJc3RydWN0IGdlbjVfYmxfY21kX2hlYWQgKmJsX2NtZF9oZWFkOworCXN0cnVjdCBnZW41X2JsX3BhY2tldF9zdGFydCAqYmxfcGFja2V0X3N0YXJ0OworCXN0cnVjdCBnZW41X2JsX2luaXRpYXRlX2NtZF9kYXRhICpjbWRfZGF0YTsKKwlzdHJ1Y3QgZ2VuNV9ibF9wYWNrZXRfZW5kICpibF9wYWNrZXRfZW5kOworCXU4IGNtZFtDWUFQQV9UU0dfTUFYX0NNRF9TSVpFXTsKKwlpbnQgY21kX2xlbjsKKwl1MTYgY21kX2RhdGFfbGVuOworCXUxNiBjbWRfY3JjID0gMDsKKwl1MTYgbWV0YV9kYXRhX2NyYyA9IDA7CisJdTggcmVzcF9kYXRhWzExXTsKKwlpbnQgcmVzcF9sZW47CisJaW50IHJlY29yZHNfbnVtOworCXU4ICpkYXRhOworCWludCBlcnJvcjsKKworCS8qIFRyeSB0byBkdW1wIGFsbCBidWZmZXJlZCByZXBvcnQgZGF0YSBiZWZvcmUgYW55IHNlbmQgY29tbWFuZC4gKi8KKwljeWFwYV9lbXB0eV9waXBfb3V0cHV0X2RhdGEoY3lhcGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJbWVtc2V0KGNtZCwgMCwgQ1lBUEFfVFNHX01BWF9DTURfU0laRSk7CisJYmxfY21kX2hlYWQgPSAoc3RydWN0IGdlbjVfYmxfY21kX2hlYWQgKiljbWQ7CisJY21kX2RhdGFfbGVuID0gQ1lBUEFfVFNHX0JMX0tFWV9TSVpFICsgQ1lBUEFfVFNHX0ZMQVNIX01BUF9CTE9DS19TSVpFOworCWNtZF9sZW4gPSBzaXplb2Yoc3RydWN0IGdlbjVfYmxfY21kX2hlYWQpICsgY21kX2RhdGFfbGVuICsKKwkJICBzaXplb2Yoc3RydWN0IGdlbjVfYmxfcGFja2V0X2VuZCk7CisKKwlwdXRfdW5hbGlnbmVkX2xlMTYoR0VONV9PVVRQVVRfUkVQT1JUX0FERFIsICZibF9jbWRfaGVhZC0+YWRkcik7CisJcHV0X3VuYWxpZ25lZF9sZTE2KGNtZF9sZW4gLSAyLCAmYmxfY21kX2hlYWQtPmxlbmd0aCk7CisJYmxfY21kX2hlYWQtPnJlcG9ydF9pZCA9IEdFTjVfQkxfQ01EX1JFUE9SVF9JRDsKKworCWJsX3BhY2tldF9zdGFydCA9ICZibF9jbWRfaGVhZC0+cGFja2V0X3N0YXJ0OworCWJsX3BhY2tldF9zdGFydC0+c29wID0gR0VONV9TT1BfS0VZOworCWJsX3BhY2tldF9zdGFydC0+Y21kX2NvZGUgPSBHRU41X0JMX0NNRF9JTklUSUFURV9CTDsKKwkvKiA4IGtleSBieXRlcyBhbmQgMTI4IGJ5dGVzIGJsb2NrIHNpemUgKi8KKwlwdXRfdW5hbGlnbmVkX2xlMTYoY21kX2RhdGFfbGVuLCAmYmxfcGFja2V0X3N0YXJ0LT5kYXRhX2xlbmd0aCk7CisKKwljbWRfZGF0YSA9IChzdHJ1Y3QgZ2VuNV9ibF9pbml0aWF0ZV9jbWRfZGF0YSAqKWJsX2NtZF9oZWFkLT5kYXRhOworCW1lbWNweShjbWRfZGF0YS0+a2V5LCBjeWFwYV9nZW41X2JsX2NtZF9rZXksIENZQVBBX1RTR19CTF9LRVlfU0laRSk7CisKKwkvKiBDb3B5IDYwIGJ5dGVzIE1ldGEgRGF0YSBSb3cgUGFyYW1ldGVycyAqLworCWltYWdlID0gKHN0cnVjdCBjeWFwYV90c2dfYmluX2ltYWdlICopZnctPmRhdGE7CisJcmVjb3Jkc19udW0gPSAoZnctPnNpemUgLSBzaXplb2Yoc3RydWN0IGN5YXBhX3RzZ19iaW5faW1hZ2VfaGVhZCkpIC8KKwkJCQlzaXplb2Yoc3RydWN0IGN5YXBhX3RzZ19iaW5faW1hZ2VfZGF0YV9yZWNvcmQpOworCS8qIEFQUF9JTlRFR1JJVFkgcm93IGlzIGFsd2F5cyB0aGUgbGFzdCByb3cgYmxvY2sgKi8KKwlkYXRhID0gaW1hZ2UtPnJlY29yZHNbcmVjb3Jkc19udW0gLSAxXS5yZWNvcmRfZGF0YTsKKwltZW1jcHkoY21kX2RhdGEtPm1ldGFkYXRhX3Jhd19wYXJhbWV0ZXIsIGRhdGEsCisJCUNZQVBBX1RTR19GTEFTSF9NQVBfTUVUQURBVEFfU0laRSk7CisKKwltZXRhX2RhdGFfY3JjID0gY3JjX2l0dV90KDB4ZmZmZiwgY21kX2RhdGEtPm1ldGFkYXRhX3Jhd19wYXJhbWV0ZXIsCisJCQkJQ1lBUEFfVFNHX0ZMQVNIX01BUF9NRVRBREFUQV9TSVpFKTsKKwlwdXRfdW5hbGlnbmVkX2xlMTYobWV0YV9kYXRhX2NyYywgJmNtZF9kYXRhLT5tZXRhZGF0YV9jcmMpOworCisJYmxfcGFja2V0X2VuZCA9IChzdHJ1Y3QgZ2VuNV9ibF9wYWNrZXRfZW5kICopKGJsX2NtZF9oZWFkLT5kYXRhICsKKwkJCQljbWRfZGF0YV9sZW4pOworCWNtZF9jcmMgPSBjcmNfaXR1X3QoMHhmZmZmLCAodTggKilibF9wYWNrZXRfc3RhcnQsCisJCXNpemVvZihzdHJ1Y3QgZ2VuNV9ibF9wYWNrZXRfc3RhcnQpICsgY21kX2RhdGFfbGVuKTsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoY21kX2NyYywgJmJsX3BhY2tldF9lbmQtPmNyYyk7CisJYmxfcGFja2V0X2VuZC0+ZW9wID0gR0VONV9FT1BfS0VZOworCisJcmVzcF9sZW4gPSBzaXplb2YocmVzcF9kYXRhKTsKKwllcnJvciA9IGN5YXBhX2kyY19waXBfY21kX2lycV9zeW5jKGN5YXBhLAorCQkJY21kLCBjbWRfbGVuLAorCQkJcmVzcF9kYXRhLCAmcmVzcF9sZW4sIDEyMDAwLAorCQkJY3lhcGFfZ2VuNV9zb3J0X3RzZ19waXBfYmxfcmVzcF9kYXRhLCB0cnVlKTsKKwlpZiAoZXJyb3IgfHwgcmVzcF9sZW4gIT0gR0VONV9CTF9JTklUSUFURV9SRVNQX0xFTiB8fAorCQkJcmVzcF9kYXRhWzJdICE9IEdFTjVfQkxfUkVTUF9SRVBPUlRfSUQgfHwKKwkJCSFHRU41X0NNRF9DT01QTEVURV9TVUNDRVNTKHJlc3BfZGF0YVs1XSkpCisJCXJldHVybiBlcnJvciA/IGVycm9yIDogLUVBR0FJTjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBjeWFwYV9nZW41X3NvcnRfYmxfZXhpdF9kYXRhKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4ICpidWYsIGludCBsZW4pCit7CisJaWYgKGJ1ZiA9PSBOVUxMIHx8IGxlbiA8IEdFTjVfUkVTUF9MRU5HVEhfU0laRSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGJ1ZlswXSA9PSAwICYmIGJ1ZlsxXSA9PSAwKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIEV4aXQgYm9vdGxvYWRlciBmYWlsZWQgZm9yIHNvbWUgcmVhc29uLiAqLworCWlmIChsZW4gPT0gR0VONV9CTF9GQUlMX0VYSVRfUkVTUF9MRU4gJiYKKwkJCWJ1ZltHRU41X1JFU1BfUkVQT1JUX0lEX09GRlNFVF0gPT0KKwkJCQlHRU41X0JMX1JFU1BfUkVQT1JUX0lEICYmCisJCQlidWZbR0VONV9SRVNQX1JTVkRfT0ZGU0VUXSA9PSBHRU41X1JFU1BfUlNWRF9LRVkgJiYKKwkJCWJ1ZltHRU41X1JFU1BfQkxfU09QX09GRlNFVF0gPT0gR0VONV9TT1BfS0VZICYmCisJCQlidWZbMTBdID09IEdFTjVfRU9QX0tFWSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZ2VuNV9ibF9leGl0KHN0cnVjdCBjeWFwYSAqY3lhcGEpCit7CisKKwl1OCBibF9nZW41X2JsX2V4aXRbXSA9IHsgMHgwNCwgMHgwMCwKKwkJMHgwQiwgMHgwMCwgMHg0MCwgMHgwMCwgMHgwMSwgMHgzYiwgMHgwMCwgMHgwMCwKKwkJMHgyMCwgMHhjNywgMHgxNworCX07CisJdTggcmVzcF9kYXRhWzExXTsKKwlpbnQgcmVzcF9sZW47CisJaW50IGVycm9yOworCisJcmVzcF9sZW4gPSBzaXplb2YocmVzcF9kYXRhKTsKKwllcnJvciA9IGN5YXBhX2kyY19waXBfY21kX2lycV9zeW5jKGN5YXBhLAorCQkJYmxfZ2VuNV9ibF9leGl0LCBzaXplb2YoYmxfZ2VuNV9ibF9leGl0KSwKKwkJCXJlc3BfZGF0YSwgJnJlc3BfbGVuLAorCQkJNTAwMCwgY3lhcGFfZ2VuNV9zb3J0X2JsX2V4aXRfZGF0YSwgZmFsc2UpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKHJlc3BfbGVuID09IEdFTjVfQkxfRkFJTF9FWElUX1JFU1BfTEVOIHx8CisJCQlyZXNwX2RhdGFbR0VONV9SRVNQX1JFUE9SVF9JRF9PRkZTRVRdID09CisJCQkJR0VONV9CTF9SRVNQX1JFUE9SVF9JRCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlpZiAocmVzcF9kYXRhWzBdID09IDB4MDAgJiYgcmVzcF9kYXRhWzFdID09IDB4MDApCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZ2VuNV9ibF9lbnRlcihzdHJ1Y3QgY3lhcGEgKmN5YXBhKQoreworCXU4IGNtZFtdID0geyAweDA0LCAweDAwLCAweDA1LCAweDAwLCAweDJGLCAweDAwLCAweDAxIH07CisJdTggcmVzcF9kYXRhWzJdOworCWludCByZXNwX2xlbjsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGN5YXBhX3BvbGxfc3RhdGUoY3lhcGEsIDUwMCk7CisJaWYgKGVycm9yIDwgMCkKKwkJcmV0dXJuIGVycm9yOworCWlmIChjeWFwYS0+Z2VuICE9IENZQVBBX0dFTjUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQWxyZWFkeSBpbiBHZW41IEJMLiBTa2lwcGluZyBleGl0LiAqLworCWlmIChjeWFwYS0+c3RhdGUgPT0gQ1lBUEFfU1RBVEVfR0VONV9CTCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY3lhcGEtPnN0YXRlICE9IENZQVBBX1NUQVRFX0dFTjVfQVBQKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCS8qIFRyeSB0byBkdW1wIGFsbCBidWZmZXJlZCByZXBvcnQgZGF0YSBiZWZvcmUgYW55IHNlbmQgY29tbWFuZC4gKi8KKwljeWFwYV9lbXB0eV9waXBfb3V0cHV0X2RhdGEoY3lhcGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJLyoKKwkgKiBTZW5kIGJvb3Rsb2FkZXIgZW50ZXIgY29tbWFuZCB0byB0cmFja3BhZCBkZXZpY2UsCisJICogYWZ0ZXIgZW50ZXIgYm9vdGxvYWRlciwgdGhlIHJlc3BvbnNlIGRhdGEgaXMgdHdvIGJ5dGVzIG9mIDB4MDAgMHgwMC4KKwkgKi8KKwlyZXNwX2xlbiA9IHNpemVvZihyZXNwX2RhdGEpOworCW1lbXNldChyZXNwX2RhdGEsIDAsIHJlc3BfbGVuKTsKKwllcnJvciA9IGN5YXBhX2kyY19waXBfY21kX2lycV9zeW5jKGN5YXBhLAorCQkJY21kLCBzaXplb2YoY21kKSwKKwkJCXJlc3BfZGF0YSwgJnJlc3BfbGVuLAorCQkJNTAwMCwgY3lhcGFfZ2VuNV9zb3J0X2FwcGxpY2F0aW9uX2xhdW5jaF9kYXRhLAorCQkJdHJ1ZSk7CisJaWYgKGVycm9yIHx8IHJlc3BfZGF0YVswXSAhPSAweDAwIHx8IHJlc3BfZGF0YVsxXSAhPSAweDAwKQorCQlyZXR1cm4gZXJyb3IgPCAwID8gZXJyb3IgOiAtRUFHQUlOOworCisJY3lhcGEtPm9wZXJhdGlvbmFsID0gZmFsc2U7CisJY3lhcGEtPnN0YXRlID0gQ1lBUEFfU1RBVEVfR0VONV9CTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeWFwYV9nZW41X2NoZWNrX2Z3KHN0cnVjdCBjeWFwYSAqY3lhcGEsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmN5YXBhLT5jbGllbnQtPmRldjsKKwljb25zdCBzdHJ1Y3QgY3lhcGFfdHNnX2Jpbl9pbWFnZSAqaW1hZ2UgPSAoY29uc3Qgdm9pZCAqKWZ3LT5kYXRhOworCWNvbnN0IHN0cnVjdCBjeWFwYV90c2dfYmluX2ltYWdlX2RhdGFfcmVjb3JkICphcHBfaW50ZWdyaXR5OworCWNvbnN0IHN0cnVjdCBnZW41X2JsX21ldGFkYXRhX3Jvd19wYXJhbXMgKm1ldGFkYXRhOworCXNpemVfdCBmbGFzaF9yZWNvcmRzX2NvdW50OworCXUzMiBmd19hcHBfc3RhcnQsIGZ3X3VwZ3JhZGVfc3RhcnQ7CisJdTE2IGZ3X2FwcF9sZW4sIGZ3X3VwZ3JhZGVfbGVuOworCXUxNiBhcHBfY3JjOworCXUxNiBhcHBfaW50ZWdyaXR5X2NyYzsKKwlpbnQgcmVjb3JkX2luZGV4OworCWludCBpOworCisJZmxhc2hfcmVjb3Jkc19jb3VudCA9IChmdy0+c2l6ZSAtCisJCQlzaXplb2Yoc3RydWN0IGN5YXBhX3RzZ19iaW5faW1hZ2VfaGVhZCkpIC8KKwkJCXNpemVvZihzdHJ1Y3QgY3lhcGFfdHNnX2Jpbl9pbWFnZV9kYXRhX3JlY29yZCk7CisKKwkvKgorCSAqIEFQUF9JTlRFR1JJVFkgcm93IGlzIGFsd2F5cyB0aGUgbGFzdCByb3cgYmxvY2ssCisJICogYW5kIHRoZSByb3cgaWQgbXVzdCBiZSAweDAxZmYuCisJICovCisJYXBwX2ludGVncml0eSA9ICZpbWFnZS0+cmVjb3Jkc1tmbGFzaF9yZWNvcmRzX2NvdW50IC0gMV07CisKKwlpZiAoYXBwX2ludGVncml0eS0+Zmxhc2hfYXJyYXlfaWQgIT0gMHgwMCB8fAorCSAgICBnZXRfdW5hbGlnbmVkX2JlMTYoJmFwcF9pbnRlZ3JpdHktPnJvd19udW1iZXIpICE9IDB4MDFmZikgeworCQlkZXZfZXJyKGRldiwgIiVzOiBpbnZhbGlkIGFwcF9pbnRlZ3JpdHkgZGF0YS5cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWV0YWRhdGEgPSAoY29uc3Qgdm9pZCAqKWFwcF9pbnRlZ3JpdHktPnJlY29yZF9kYXRhOworCisJLyogVmVyaWZ5IGFwcF9pbnRlZ3JpdHkgY3JjICovCisJYXBwX2ludGVncml0eV9jcmMgPSBjcmNfaXR1X3QoMHhmZmZmLCBhcHBfaW50ZWdyaXR5LT5yZWNvcmRfZGF0YSwKKwkJCQkgICAgICBDWUFQQV9UU0dfQVBQX0lOVEVHUklUWV9TSVpFKTsKKwlpZiAoYXBwX2ludGVncml0eV9jcmMgIT0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZtZXRhZGF0YS0+bWV0YWRhdGFfY3JjKSkgeworCQlkZXZfZXJyKGRldiwgIiVzOiBpbnZhbGlkIGFwcF9pbnRlZ3JpdHkgY3JjLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmd19hcHBfc3RhcnQgPSBnZXRfdW5hbGlnbmVkX2xlMzIoJm1ldGFkYXRhLT5hcHBfc3RhcnQpOworCWZ3X2FwcF9sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYoJm1ldGFkYXRhLT5hcHBfbGVuKTsKKwlmd191cGdyYWRlX3N0YXJ0ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZtZXRhZGF0YS0+dXBncmFkZV9zdGFydCk7CisJZndfdXBncmFkZV9sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYoJm1ldGFkYXRhLT51cGdyYWRlX2xlbik7CisKKwlpZiAoZndfYXBwX3N0YXJ0ICUgQ1lBUEFfVFNHX0ZXX1JPV19TSVpFIHx8CisJICAgIGZ3X2FwcF9sZW4gJSBDWUFQQV9UU0dfRldfUk9XX1NJWkUgfHwKKwkgICAgZndfdXBncmFkZV9zdGFydCAlIENZQVBBX1RTR19GV19ST1dfU0laRSB8fAorCSAgICBmd191cGdyYWRlX2xlbiAlIENZQVBBX1RTR19GV19ST1dfU0laRSkgeworCQlkZXZfZXJyKGRldiwgIiVzOiBpbnZhbGlkIGltYWdlIGFsaWdubWVudC5cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBWZXJpZnkgYXBwbGljYXRpb24gaW1hZ2UgQ1JDCisJICovCisJcmVjb3JkX2luZGV4ID0gZndfYXBwX3N0YXJ0IC8gQ1lBUEFfVFNHX0ZXX1JPV19TSVpFIC0KKwkJCQlDWUFQQV9UU0dfSU1HX1NUQVJUX1JPV19OVU07CisJYXBwX2NyYyA9IDB4ZmZmZlU7CisJZm9yIChpID0gMDsgaSA8IGZ3X2FwcF9sZW4gLyBDWUFQQV9UU0dfRldfUk9XX1NJWkU7IGkrKykgeworCQljb25zdCB1OCAqZGF0YSA9IGltYWdlLT5yZWNvcmRzW3JlY29yZF9pbmRleCArIGldLnJlY29yZF9kYXRhOworCQlhcHBfY3JjID0gY3JjX2l0dV90KGFwcF9jcmMsIGRhdGEsIENZQVBBX1RTR19GV19ST1dfU0laRSk7CisJfQorCisJaWYgKGFwcF9jcmMgIT0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZtZXRhZGF0YS0+YXBwX2NyYykpIHsKKwkJZGV2X2VycihkZXYsICIlczogaW52YWxpZCBmaXJtd2FyZSBhcHAgY3JjIGNoZWNrLlxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeWFwYV9nZW41X3dyaXRlX2Z3X2Jsb2NrKHN0cnVjdCBjeWFwYSAqY3lhcGEsCisJCXN0cnVjdCBjeWFwYV90c2dfYmluX2ltYWdlX2RhdGFfcmVjb3JkICpmbGFzaF9yZWNvcmQpCit7CisJc3RydWN0IGdlbjVfYmxfY21kX2hlYWQgKmJsX2NtZF9oZWFkOworCXN0cnVjdCBnZW41X2JsX3BhY2tldF9zdGFydCAqYmxfcGFja2V0X3N0YXJ0OworCXN0cnVjdCBnZW41X2JsX2ZsYXNoX3Jvd19oZWFkICpmbGFzaF9yb3dfaGVhZDsKKwlzdHJ1Y3QgZ2VuNV9ibF9wYWNrZXRfZW5kICpibF9wYWNrZXRfZW5kOworCXU4IGNtZFtDWUFQQV9UU0dfTUFYX0NNRF9TSVpFXTsKKwl1MTYgY21kX2xlbjsKKwl1OCBmbGFzaF9hcnJheV9pZDsKKwl1MTYgZmxhc2hfcm93X2lkOworCXUxNiByZWNvcmRfbGVuOworCXU4ICpyZWNvcmRfZGF0YTsKKwl1MTYgZGF0YV9sZW47CisJdTE2IGNyYzsKKwl1OCByZXNwX2RhdGFbMTFdOworCWludCByZXNwX2xlbjsKKwlpbnQgZXJyb3I7CisKKwlmbGFzaF9hcnJheV9pZCA9IGZsYXNoX3JlY29yZC0+Zmxhc2hfYXJyYXlfaWQ7CisJZmxhc2hfcm93X2lkID0gZ2V0X3VuYWxpZ25lZF9iZTE2KCZmbGFzaF9yZWNvcmQtPnJvd19udW1iZXIpOworCXJlY29yZF9sZW4gPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmZsYXNoX3JlY29yZC0+cmVjb3JkX2xlbik7CisJcmVjb3JkX2RhdGEgPSBmbGFzaF9yZWNvcmQtPnJlY29yZF9kYXRhOworCisJbWVtc2V0KGNtZCwgMCwgQ1lBUEFfVFNHX01BWF9DTURfU0laRSk7CisJYmxfY21kX2hlYWQgPSAoc3RydWN0IGdlbjVfYmxfY21kX2hlYWQgKiljbWQ7CisJYmxfcGFja2V0X3N0YXJ0ID0gJmJsX2NtZF9oZWFkLT5wYWNrZXRfc3RhcnQ7CisJY21kX2xlbiA9IHNpemVvZihzdHJ1Y3QgZ2VuNV9ibF9jbWRfaGVhZCkgKworCQkgIHNpemVvZihzdHJ1Y3QgZ2VuNV9ibF9mbGFzaF9yb3dfaGVhZCkgKworCQkgIENZQVBBX1RTR19GTEFTSF9NQVBfQkxPQ0tfU0laRSArCisJCSAgc2l6ZW9mKHN0cnVjdCBnZW41X2JsX3BhY2tldF9lbmQpOworCisJcHV0X3VuYWxpZ25lZF9sZTE2KEdFTjVfT1VUUFVUX1JFUE9SVF9BRERSLCAmYmxfY21kX2hlYWQtPmFkZHIpOworCS8qIERvbid0IGluY2x1ZGUgMiBieXRlcyByZWdpc3RlciBhZGRyZXNzICovCisJcHV0X3VuYWxpZ25lZF9sZTE2KGNtZF9sZW4gLSAyLCAmYmxfY21kX2hlYWQtPmxlbmd0aCk7CisJYmxfY21kX2hlYWQtPnJlcG9ydF9pZCA9IEdFTjVfQkxfQ01EX1JFUE9SVF9JRDsKKwlibF9wYWNrZXRfc3RhcnQtPnNvcCA9IEdFTjVfU09QX0tFWTsKKwlibF9wYWNrZXRfc3RhcnQtPmNtZF9jb2RlID0gR0VONV9CTF9DTURfUFJPR1JBTV9WRVJJRllfUk9XOworCisJLyogMSAoRmxhc2ggQXJyYXkgSUQpICsgMiAoRmxhc2ggUm93IElEKSArIDEyOCAoZmxhc2ggZGF0YSkgKi8KKwlkYXRhX2xlbiA9IHNpemVvZihzdHJ1Y3QgZ2VuNV9ibF9mbGFzaF9yb3dfaGVhZCkgKyByZWNvcmRfbGVuOworCXB1dF91bmFsaWduZWRfbGUxNihkYXRhX2xlbiwgJmJsX3BhY2tldF9zdGFydC0+ZGF0YV9sZW5ndGgpOworCisJZmxhc2hfcm93X2hlYWQgPSAoc3RydWN0IGdlbjVfYmxfZmxhc2hfcm93X2hlYWQgKilibF9jbWRfaGVhZC0+ZGF0YTsKKwlmbGFzaF9yb3dfaGVhZC0+Zmxhc2hfYXJyYXlfaWQgPSBmbGFzaF9hcnJheV9pZDsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoZmxhc2hfcm93X2lkLCAmZmxhc2hfcm93X2hlYWQtPmZsYXNoX3Jvd19pZCk7CisJbWVtY3B5KGZsYXNoX3Jvd19oZWFkLT5mbGFzaF9kYXRhLCByZWNvcmRfZGF0YSwgcmVjb3JkX2xlbik7CisKKwlibF9wYWNrZXRfZW5kID0gKHN0cnVjdCBnZW41X2JsX3BhY2tldF9lbmQgKikoYmxfY21kX2hlYWQtPmRhdGEgKworCQkJCQkJICAgICAgZGF0YV9sZW4pOworCWNyYyA9IGNyY19pdHVfdCgweGZmZmYsICh1OCAqKWJsX3BhY2tldF9zdGFydCwKKwkJc2l6ZW9mKHN0cnVjdCBnZW41X2JsX3BhY2tldF9zdGFydCkgKyBkYXRhX2xlbik7CisJcHV0X3VuYWxpZ25lZF9sZTE2KGNyYywgJmJsX3BhY2tldF9lbmQtPmNyYyk7CisJYmxfcGFja2V0X2VuZC0+ZW9wID0gR0VONV9FT1BfS0VZOworCisJcmVzcF9sZW4gPSBzaXplb2YocmVzcF9kYXRhKTsKKwllcnJvciA9IGN5YXBhX2kyY19waXBfY21kX2lycV9zeW5jKGN5YXBhLCBjbWQsIGNtZF9sZW4sCisJCQlyZXNwX2RhdGEsICZyZXNwX2xlbiwKKwkJCTUwMCwgY3lhcGFfZ2VuNV9zb3J0X3RzZ19waXBfYmxfcmVzcF9kYXRhLCB0cnVlKTsKKwlpZiAoZXJyb3IgfHwgcmVzcF9sZW4gIT0gR0VONV9CTF9CTE9DS19XUklURV9SRVNQX0xFTiB8fAorCQkJcmVzcF9kYXRhWzJdICE9IEdFTjVfQkxfUkVTUF9SRVBPUlRfSUQgfHwKKwkJCSFHRU41X0NNRF9DT01QTEVURV9TVUNDRVNTKHJlc3BfZGF0YVs1XSkpCisJCXJldHVybiBlcnJvciA8IDAgPyBlcnJvciA6IC1FQUdBSU47CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeWFwYV9nZW41X2RvX2Z3X3VwZGF0ZShzdHJ1Y3QgY3lhcGEgKmN5YXBhLAorCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjeWFwYS0+Y2xpZW50LT5kZXY7CisJc3RydWN0IGN5YXBhX3RzZ19iaW5faW1hZ2VfZGF0YV9yZWNvcmQgKmZsYXNoX3JlY29yZDsKKwlzdHJ1Y3QgY3lhcGFfdHNnX2Jpbl9pbWFnZSAqaW1hZ2UgPQorCQkoc3RydWN0IGN5YXBhX3RzZ19iaW5faW1hZ2UgKilmdy0+ZGF0YTsKKwlpbnQgZmxhc2hfcmVjb3Jkc19jb3VudDsKKwlpbnQgaTsKKwlpbnQgZXJyb3I7CisKKwljeWFwYV9lbXB0eV9waXBfb3V0cHV0X2RhdGEoY3lhcGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJZmxhc2hfcmVjb3Jkc19jb3VudCA9CisJCShmdy0+c2l6ZSAtIHNpemVvZihzdHJ1Y3QgY3lhcGFfdHNnX2Jpbl9pbWFnZV9oZWFkKSkgLworCQkJc2l6ZW9mKHN0cnVjdCBjeWFwYV90c2dfYmluX2ltYWdlX2RhdGFfcmVjb3JkKTsKKwkvKgorCSAqIFRoZSBsYXN0IGZsYXNoIHJvdyAweDAxZmYgaGFzIGJlZW4gd3JpdHRlbiB0aHJvdWdoIGJsX2luaXRpYXRlCisJICogY29tbWFuZCwgc28gRE8gTk9UIHdyaXRlIGZsYXNoIDB4MDFmZiB0byB0cmFja3BhZCBkZXZpY2UuCisJICovCisJZm9yIChpID0gMDsgaSA8IChmbGFzaF9yZWNvcmRzX2NvdW50IC0gMSk7IGkrKykgeworCQlmbGFzaF9yZWNvcmQgPSAmaW1hZ2UtPnJlY29yZHNbaV07CisJCWVycm9yID0gY3lhcGFfZ2VuNV93cml0ZV9md19ibG9jayhjeWFwYSwgZmxhc2hfcmVjb3JkKTsKKwkJaWYgKGVycm9yKSB7CisJCQlkZXZfZXJyKGRldiwgIiVzOiBHZW41IEZXIHVwZGF0ZSBhYm9ydGVkOiAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZ2VuNV9jaGFuZ2VfcG93ZXJfc3RhdGUoc3RydWN0IGN5YXBhICpjeWFwYSwgdTggcG93ZXJfc3RhdGUpCit7CisJdTggY21kWzhdID0geyAweDA0LCAweDAwLCAweDA2LCAweDAwLCAweDJmLCAweDAwLCAweDA4LCAweDAxIH07CisJdTggcmVzcF9kYXRhWzZdOworCWludCByZXNwX2xlbjsKKwlpbnQgZXJyb3I7CisKKwljbWRbN10gPSBwb3dlcl9zdGF0ZTsKKwlyZXNwX2xlbiA9IHNpemVvZihyZXNwX2RhdGEpOworCWVycm9yID0gY3lhcGFfaTJjX3BpcF9jbWRfaXJxX3N5bmMoY3lhcGEsIGNtZCwgc2l6ZW9mKGNtZCksCisJCQlyZXNwX2RhdGEsICZyZXNwX2xlbiwKKwkJCTUwMCwgY3lhcGFfZ2VuNV9zb3J0X3RzZ19waXBfYXBwX3Jlc3BfZGF0YSwgZmFsc2UpOworCWlmIChlcnJvciB8fCAhVkFMSURfQ01EX1JFU1BfSEVBREVSKHJlc3BfZGF0YSwgMHgwOCkgfHwKKwkJCSFHRU41X0NNRF9DT01QTEVURV9TVUNDRVNTKHJlc3BfZGF0YVs1XSkpCisJCXJldHVybiBlcnJvciA8IDAgPyBlcnJvciA6IC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeWFwYV9nZW41X3NldF9pbnRlcnZhbF90aW1lKHN0cnVjdCBjeWFwYSAqY3lhcGEsCisJCXU4IHBhcmFtZXRlcl9pZCwgdTE2IGludGVydmFsX3RpbWUpCit7CisJc3RydWN0IGdlbjVfYXBwX2NtZF9oZWFkICphcHBfY21kX2hlYWQ7CisJc3RydWN0IGdlbjVfYXBwX3NldF9wYXJhbWV0ZXJfZGF0YSAqcGFyYW1ldGVyX2RhdGE7CisJdTggY21kW0NZQVBBX1RTR19NQVhfQ01EX1NJWkVdOworCWludCBjbWRfbGVuOworCXU4IHJlc3BfZGF0YVs3XTsKKwlpbnQgcmVzcF9sZW47CisJdTggcGFyYW1ldGVyX3NpemU7CisJaW50IGVycm9yOworCisJbWVtc2V0KGNtZCwgMCwgQ1lBUEFfVFNHX01BWF9DTURfU0laRSk7CisJYXBwX2NtZF9oZWFkID0gKHN0cnVjdCBnZW41X2FwcF9jbWRfaGVhZCAqKWNtZDsKKwlwYXJhbWV0ZXJfZGF0YSA9IChzdHJ1Y3QgZ2VuNV9hcHBfc2V0X3BhcmFtZXRlcl9kYXRhICopCisJCQkgYXBwX2NtZF9oZWFkLT5wYXJhbWV0ZXJfZGF0YTsKKwljbWRfbGVuID0gc2l6ZW9mKHN0cnVjdCBnZW41X2FwcF9jbWRfaGVhZCkgKworCQkgIHNpemVvZihzdHJ1Y3QgZ2VuNV9hcHBfc2V0X3BhcmFtZXRlcl9kYXRhKTsKKworCXN3aXRjaCAocGFyYW1ldGVyX2lkKSB7CisJY2FzZSBHRU41X1BBUkFNRVRFUl9BQ1RfSU5URVJWTF9JRDoKKwkJcGFyYW1ldGVyX3NpemUgPSBHRU41X1BBUkFNRVRFUl9BQ1RfSU5URVJWTF9TSVpFOworCQlicmVhazsKKwljYXNlIEdFTjVfUEFSQU1FVEVSX0FDVF9MRlRfSU5URVJWTF9JRDoKKwkJcGFyYW1ldGVyX3NpemUgPSBHRU41X1BBUkFNRVRFUl9BQ1RfTEZUX0lOVEVSVkxfU0laRTsKKwkJYnJlYWs7CisJY2FzZSBHRU41X1BBUkFNRVRFUl9MUF9JTlRSVkxfSUQ6CisJCXBhcmFtZXRlcl9zaXplID0gR0VONV9QQVJBTUVURVJfTFBfSU5UUlZMX1NJWkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXB1dF91bmFsaWduZWRfbGUxNihHRU41X09VVFBVVF9SRVBPUlRfQUREUiwgJmFwcF9jbWRfaGVhZC0+YWRkcik7CisJLyoKKwkgKiBEb24ndCBpbmNsdWRlIHVudXNlZCBwYXJhbWV0ZXIgdmFsdWUgYnl0ZXMgYW5kCisJICogMiBieXRlcyByZWdpc3RlciBhZGRyZXNzLgorCSAqLworCXB1dF91bmFsaWduZWRfbGUxNihjbWRfbGVuIC0gKDQgLSBwYXJhbWV0ZXJfc2l6ZSkgLSAyLAorCQkJICAgJmFwcF9jbWRfaGVhZC0+bGVuZ3RoKTsKKwlhcHBfY21kX2hlYWQtPnJlcG9ydF9pZCA9IEdFTjVfQVBQX0NNRF9SRVBPUlRfSUQ7CisJYXBwX2NtZF9oZWFkLT5jbWRfY29kZSA9IEdFTjVfQ01EX1NFVF9QQVJBTUVURVI7CisJcGFyYW1ldGVyX2RhdGEtPnBhcmFtZXRlcl9pZCA9IHBhcmFtZXRlcl9pZDsKKwlwYXJhbWV0ZXJfZGF0YS0+cGFyYW1ldGVyX3NpemUgPSBwYXJhbWV0ZXJfc2l6ZTsKKwlwdXRfdW5hbGlnbmVkX2xlMzIoKHUzMilpbnRlcnZhbF90aW1lLCAmcGFyYW1ldGVyX2RhdGEtPnZhbHVlKTsKKwlyZXNwX2xlbiA9IHNpemVvZihyZXNwX2RhdGEpOworCWVycm9yID0gY3lhcGFfaTJjX3BpcF9jbWRfaXJxX3N5bmMoY3lhcGEsIGNtZCwgY21kX2xlbiwKKwkJCXJlc3BfZGF0YSwgJnJlc3BfbGVuLAorCQkJNTAwLCBjeWFwYV9nZW41X3NvcnRfdHNnX3BpcF9hcHBfcmVzcF9kYXRhLCBmYWxzZSk7CisJaWYgKGVycm9yIHx8IHJlc3BfZGF0YVs1XSAhPSBwYXJhbWV0ZXJfaWQgfHwKKwkJcmVzcF9kYXRhWzZdICE9IHBhcmFtZXRlcl9zaXplIHx8CisJCSFWQUxJRF9DTURfUkVTUF9IRUFERVIocmVzcF9kYXRhLCBHRU41X0NNRF9TRVRfUEFSQU1FVEVSKSkKKwkJcmV0dXJuIGVycm9yIDwgMCA/IGVycm9yIDogLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN5YXBhX2dlbjVfZ2V0X2ludGVydmFsX3RpbWUoc3RydWN0IGN5YXBhICpjeWFwYSwKKwkJdTggcGFyYW1ldGVyX2lkLCB1MTYgKmludGVydmFsX3RpbWUpCit7CisJc3RydWN0IGdlbjVfYXBwX2NtZF9oZWFkICphcHBfY21kX2hlYWQ7CisJc3RydWN0IGdlbjVfYXBwX2dldF9wYXJhbWV0ZXJfZGF0YSAqcGFyYW1ldGVyX2RhdGE7CisJdTggY21kW0NZQVBBX1RTR19NQVhfQ01EX1NJWkVdOworCWludCBjbWRfbGVuOworCXU4IHJlc3BfZGF0YVsxMV07CisJaW50IHJlc3BfbGVuOworCXU4IHBhcmFtZXRlcl9zaXplOworCXUxNiBtYXNrLCBpOworCWludCBlcnJvcjsKKworCW1lbXNldChjbWQsIDAsIENZQVBBX1RTR19NQVhfQ01EX1NJWkUpOworCWFwcF9jbWRfaGVhZCA9IChzdHJ1Y3QgZ2VuNV9hcHBfY21kX2hlYWQgKiljbWQ7CisJcGFyYW1ldGVyX2RhdGEgPSAoc3RydWN0IGdlbjVfYXBwX2dldF9wYXJhbWV0ZXJfZGF0YSAqKQorCQkJIGFwcF9jbWRfaGVhZC0+cGFyYW1ldGVyX2RhdGE7CisJY21kX2xlbiA9IHNpemVvZihzdHJ1Y3QgZ2VuNV9hcHBfY21kX2hlYWQpICsKKwkJICBzaXplb2Yoc3RydWN0IGdlbjVfYXBwX2dldF9wYXJhbWV0ZXJfZGF0YSk7CisKKwkqaW50ZXJ2YWxfdGltZSA9IDA7CisJc3dpdGNoIChwYXJhbWV0ZXJfaWQpIHsKKwljYXNlIEdFTjVfUEFSQU1FVEVSX0FDVF9JTlRFUlZMX0lEOgorCQlwYXJhbWV0ZXJfc2l6ZSA9IEdFTjVfUEFSQU1FVEVSX0FDVF9JTlRFUlZMX1NJWkU7CisJCWJyZWFrOworCWNhc2UgR0VONV9QQVJBTUVURVJfQUNUX0xGVF9JTlRFUlZMX0lEOgorCQlwYXJhbWV0ZXJfc2l6ZSA9IEdFTjVfUEFSQU1FVEVSX0FDVF9MRlRfSU5URVJWTF9TSVpFOworCQlicmVhazsKKwljYXNlIEdFTjVfUEFSQU1FVEVSX0xQX0lOVFJWTF9JRDoKKwkJcGFyYW1ldGVyX3NpemUgPSBHRU41X1BBUkFNRVRFUl9MUF9JTlRSVkxfU0laRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHV0X3VuYWxpZ25lZF9sZTE2KEdFTjVfSElEX0RFU0NSSVBUT1JfQUREUiwgJmFwcF9jbWRfaGVhZC0+YWRkcik7CisJLyogRG9uJ3QgaW5jbHVkZSAyIGJ5dGVzIHJlZ2lzdGVyIGFkZHJlc3MgKi8KKwlwdXRfdW5hbGlnbmVkX2xlMTYoY21kX2xlbiAtIDIsICZhcHBfY21kX2hlYWQtPmxlbmd0aCk7CisJYXBwX2NtZF9oZWFkLT5yZXBvcnRfaWQgPSBHRU41X0FQUF9DTURfUkVQT1JUX0lEOworCWFwcF9jbWRfaGVhZC0+Y21kX2NvZGUgPSBHRU41X0NNRF9HRVRfUEFSQU1FVEVSOworCXBhcmFtZXRlcl9kYXRhLT5wYXJhbWV0ZXJfaWQgPSBwYXJhbWV0ZXJfaWQ7CisKKwlyZXNwX2xlbiA9IHNpemVvZihyZXNwX2RhdGEpOworCWVycm9yID0gY3lhcGFfaTJjX3BpcF9jbWRfaXJxX3N5bmMoY3lhcGEsIGNtZCwgY21kX2xlbiwKKwkJCXJlc3BfZGF0YSwgJnJlc3BfbGVuLAorCQkJNTAwLCBjeWFwYV9nZW41X3NvcnRfdHNnX3BpcF9hcHBfcmVzcF9kYXRhLCBmYWxzZSk7CisJaWYgKGVycm9yIHx8IHJlc3BfZGF0YVs1XSAhPSBwYXJhbWV0ZXJfaWQgfHwgcmVzcF9kYXRhWzZdID09IDAgfHwKKwkJIVZBTElEX0NNRF9SRVNQX0hFQURFUihyZXNwX2RhdGEsIEdFTjVfQ01EX0dFVF9QQVJBTUVURVIpKQorCQlyZXR1cm4gZXJyb3IgPCAwID8gZXJyb3IgOiAtRUlOVkFMOworCisJbWFzayA9IDA7CisJZm9yIChpID0gMDsgaSA8IHBhcmFtZXRlcl9zaXplOyBpKyspCisJCW1hc2sgfD0gKDB4ZmYgPDwgKGkgKiA4KSk7CisJKmludGVydmFsX3RpbWUgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJnJlc3BfZGF0YVs3XSkgJiBtYXNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZ2VuNV9kaXNhYmxlX3BpcF9yZXBvcnQoc3RydWN0IGN5YXBhICpjeWFwYSkKK3sKKwlzdHJ1Y3QgZ2VuNV9hcHBfY21kX2hlYWQgKmFwcF9jbWRfaGVhZDsKKwl1OCBjbWRbMTBdOworCXU4IHJlc3BfZGF0YVs3XTsKKwlpbnQgcmVzcF9sZW47CisJaW50IGVycm9yOworCisJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWFwcF9jbWRfaGVhZCA9IChzdHJ1Y3QgZ2VuNV9hcHBfY21kX2hlYWQgKiljbWQ7CisKKwlwdXRfdW5hbGlnbmVkX2xlMTYoR0VONV9ISURfREVTQ1JJUFRPUl9BRERSLCAmYXBwX2NtZF9oZWFkLT5hZGRyKTsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoc2l6ZW9mKGNtZCkgLSAyLCAmYXBwX2NtZF9oZWFkLT5sZW5ndGgpOworCWFwcF9jbWRfaGVhZC0+cmVwb3J0X2lkID0gR0VONV9BUFBfQ01EX1JFUE9SVF9JRDsKKwlhcHBfY21kX2hlYWQtPmNtZF9jb2RlID0gR0VONV9DTURfU0VUX1BBUkFNRVRFUjsKKwlhcHBfY21kX2hlYWQtPnBhcmFtZXRlcl9kYXRhWzBdID0gR0VONV9QQVJBTUVURVJfRElTQUJMRV9QSVBfUkVQT1JUOworCWFwcF9jbWRfaGVhZC0+cGFyYW1ldGVyX2RhdGFbMV0gPSAweDAxOworCWFwcF9jbWRfaGVhZC0+cGFyYW1ldGVyX2RhdGFbMl0gPSAweDAxOworCXJlc3BfbGVuID0gc2l6ZW9mKHJlc3BfZGF0YSk7CisJZXJyb3IgPSBjeWFwYV9pMmNfcGlwX2NtZF9pcnFfc3luYyhjeWFwYSwgY21kLCBzaXplb2YoY21kKSwKKwkJCXJlc3BfZGF0YSwgJnJlc3BfbGVuLAorCQkJNTAwLCBjeWFwYV9nZW41X3NvcnRfdHNnX3BpcF9hcHBfcmVzcF9kYXRhLCBmYWxzZSk7CisJaWYgKGVycm9yIHx8IHJlc3BfZGF0YVs1XSAhPSBHRU41X1BBUkFNRVRFUl9ESVNBQkxFX1BJUF9SRVBPUlQgfHwKKwkJIVZBTElEX0NNRF9SRVNQX0hFQURFUihyZXNwX2RhdGEsIEdFTjVfQ01EX1NFVF9QQVJBTUVURVIpIHx8CisJCXJlc3BfZGF0YVs2XSAhPSAweDAxKQorCQlyZXR1cm4gZXJyb3IgPCAwID8gZXJyb3IgOiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZ2VuNV9kZWVwX3NsZWVwKHN0cnVjdCBjeWFwYSAqY3lhcGEsIHU4IHN0YXRlKQoreworCXU4IGNtZFtdID0geyAweDA1LCAweDAwLCAweDAwLCAweDA4fTsKKwl1OCByZXNwX2RhdGFbNV07CisJaW50IHJlc3BfbGVuOworCWludCBlcnJvcjsKKworCWNtZFsyXSA9IHN0YXRlICYgR0VONV9ERUVQX1NMRUVQX1NUQVRFX01BU0s7CisJcmVzcF9sZW4gPSBzaXplb2YocmVzcF9kYXRhKTsKKwllcnJvciA9IGN5YXBhX2kyY19waXBfY21kX2lycV9zeW5jKGN5YXBhLCBjbWQsIHNpemVvZihjbWQpLAorCQkJcmVzcF9kYXRhLCAmcmVzcF9sZW4sCisJCQk1MDAsIGN5YXBhX2dlbjVfc29ydF9kZWVwX3NsZWVwX2RhdGEsIGZhbHNlKTsKKwlpZiAoZXJyb3IgfHwgKChyZXNwX2RhdGFbM10gJiBHRU41X0RFRVBfU0xFRVBfU1RBVEVfTUFTSykgIT0gc3RhdGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN5YXBhX2dlbjVfc2V0X3Bvd2VyX21vZGUoc3RydWN0IGN5YXBhICpjeWFwYSwKKwkJdTggcG93ZXJfbW9kZSwgdTE2IHNsZWVwX3RpbWUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmN5YXBhLT5jbGllbnQtPmRldjsKKwl1OCBwb3dlcl9zdGF0ZTsKKwlpbnQgZXJyb3I7CisKKwlpZiAoY3lhcGEtPnN0YXRlICE9IENZQVBBX1NUQVRFX0dFTjVfQVBQKQorCQlyZXR1cm4gMDsKKworCS8qIER1bXAgYWxsIHRoZSByZXBvcnQgZGF0YSBiZWZvcmUgZG8gcG93ZXIgbW9kZSBjb21tbWFuZHMuICovCisJY3lhcGFfZW1wdHlfcGlwX291dHB1dF9kYXRhKGN5YXBhLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworCWlmIChHRU41X0RFVl9HRVRfUFdSX1NUQVRFKGN5YXBhKSA9PSBVTklOSVRfUFdSX01PREUpIHsKKwkJLyoKKwkJICogQXNzdW1lIFRQIGluIGRlZXAgc2xlZXAgbW9kZSB3aGVuIGRyaXZlciBpcyBsb2FkZWQsCisJCSAqIGF2b2lkIGRyaXZlciB1bmxvYWQgYW5kIHJlbG9hZCBjb21tYW5kIElPIGlzc3VlIGNhdXNlZCBieSBUUAorCQkgKiBoYXMgYmVlbiBzZXQgaW50byBkZWVwIHNsZWVwIG1vZGUgd2hlbiB1bmxvYWRpbmcuCisJCSAqLworCQlHRU41X0RFVl9TRVRfUFdSX1NUQVRFKGN5YXBhLCBQV1JfTU9ERV9PRkYpOworCX0KKworCWlmIChHRU41X0RFVl9VTklOSVRfU0xFRVBfVElNRShjeWFwYSkgJiYKKwkJCUdFTjVfREVWX0dFVF9QV1JfU1RBVEUoY3lhcGEpICE9IFBXUl9NT0RFX09GRikKKwkJaWYgKGN5YXBhX2dlbjVfZ2V0X2ludGVydmFsX3RpbWUoY3lhcGEsCisJCQkJR0VONV9QQVJBTUVURVJfTFBfSU5UUlZMX0lELAorCQkJCSZjeWFwYS0+ZGV2X3NsZWVwX3RpbWUpICE9IDApCisJCQlHRU41X0RFVl9TRVRfU0xFRVBfVElNRShjeWFwYSwgVU5JTklUX1NMRUVQX1RJTUUpOworCisJaWYgKEdFTjVfREVWX0dFVF9QV1JfU1RBVEUoY3lhcGEpID09IHBvd2VyX21vZGUpIHsKKwkJaWYgKHBvd2VyX21vZGUgPT0gUFdSX01PREVfT0ZGIHx8CisJCQlwb3dlcl9tb2RlID09IFBXUl9NT0RFX0ZVTExfQUNUSVZFIHx8CisJCQlwb3dlcl9tb2RlID09IFBXUl9NT0RFX0JUTl9PTkxZIHx8CisJCQlHRU41X0RFVl9HRVRfU0xFRVBfVElNRShjeWFwYSkgPT0gc2xlZXBfdGltZSkgeworCQkJLyogSGFzIGluIGNvcnJlY3QgcG93ZXIgbW9kZSBzdGF0ZSwgZWFybHkgcmV0dXJuLiAqLworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlpZiAocG93ZXJfbW9kZSA9PSBQV1JfTU9ERV9PRkYpIHsKKwkJZXJyb3IgPSBjeWFwYV9nZW41X2RlZXBfc2xlZXAoY3lhcGEsIEdFTjVfREVFUF9TTEVFUF9TVEFURV9PRkYpOworCQlpZiAoZXJyb3IpIHsKKwkJCWRldl9lcnIoZGV2LCAiZW50ZXIgZGVlcCBzbGVlcCBmYWlsOiAlZFxuIiwgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJR0VONV9ERVZfU0VUX1BXUl9TVEFURShjeWFwYSwgUFdSX01PREVfT0ZGKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBXaGVuIHRyYWNrcGFkIGluIHBvd2VyIG9mZiBtb2RlLCBpdCBjYW5ub3QgY2hhbmdlIHRvIG90aGVyIHBvd2VyCisJICogc3RhdGUgZGlyZWN0bHksIG11c3QgYmUgd2FrZSB1cCBmcm9tIHNsZWVwIGZpcnN0bHksIHRoZW4KKwkgKiBjb250aW51ZSB0byBkbyBuZXh0IHBvd2VyIHNhdGUgY2hhbmdlLgorCSAqLworCWlmIChHRU41X0RFVl9HRVRfUFdSX1NUQVRFKGN5YXBhKSA9PSBQV1JfTU9ERV9PRkYpIHsKKwkJZXJyb3IgPSBjeWFwYV9nZW41X2RlZXBfc2xlZXAoY3lhcGEsIEdFTjVfREVFUF9TTEVFUF9TVEFURV9PTik7CisJCWlmIChlcnJvcikgeworCQkJZGV2X2VycihkZXYsICJkZWVwIHNsZWVwIHdha2UgZmFpbDogJWRcbiIsIGVycm9yKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCX0KKworCWlmIChwb3dlcl9tb2RlID09IFBXUl9NT0RFX0ZVTExfQUNUSVZFKSB7CisJCWVycm9yID0gY3lhcGFfZ2VuNV9jaGFuZ2VfcG93ZXJfc3RhdGUoY3lhcGEsCisJCQkJR0VONV9QT1dFUl9TVEFURV9BQ1RJVkUpOworCQlpZiAoZXJyb3IpIHsKKwkJCWRldl9lcnIoZGV2LCAiY2hhbmdlIHRvIGFjdGl2ZSBmYWlsOiAlZFxuIiwgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJR0VONV9ERVZfU0VUX1BXUl9TVEFURShjeWFwYSwgUFdSX01PREVfRlVMTF9BQ1RJVkUpOworCX0gZWxzZSBpZiAocG93ZXJfbW9kZSA9PSBQV1JfTU9ERV9CVE5fT05MWSkgeworCQllcnJvciA9IGN5YXBhX2dlbjVfY2hhbmdlX3Bvd2VyX3N0YXRlKGN5YXBhLAorCQkJCUdFTjVfUE9XRVJfU1RBVEVfQlROX09OTFkpOworCQlpZiAoZXJyb3IpIHsKKwkJCWRldl9lcnIoZGV2LCAiZmFpbCB0byBidXR0b24gb25seSBtb2RlOiAlZFxuIiwgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJR0VONV9ERVZfU0VUX1BXUl9TVEFURShjeWFwYSwgUFdSX01PREVfQlROX09OTFkpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIENvbnRpbnVlIHRvIGNoYW5nZSBwb3dlciBtb2RlIGV2ZW4gZmFpbGVkIHRvIHNldAorCQkgKiBpbnRlcnZhbCB0aW1lLCBpdCB3b24ndCBhZmZlY3QgdGhlIHBvd2VyIG1vZGUgY2hhbmdlLgorCQkgKiBleGNlcHQgdGhlIHNsZWVwIGludGVydmFsIHRpbWUgaXMgbm90IGNvcnJlY3QuCisJCSAqLworCQlpZiAoR0VONV9ERVZfVU5JTklUX1NMRUVQX1RJTUUoY3lhcGEpIHx8CisJCQkJc2xlZXBfdGltZSAhPSBHRU41X0RFVl9HRVRfU0xFRVBfVElNRShjeWFwYSkpCisJCQlpZiAoY3lhcGFfZ2VuNV9zZXRfaW50ZXJ2YWxfdGltZShjeWFwYSwKKwkJCQkJR0VONV9QQVJBTUVURVJfTFBfSU5UUlZMX0lELAorCQkJCQlzbGVlcF90aW1lKSA9PSAwKQorCQkJCUdFTjVfREVWX1NFVF9TTEVFUF9USU1FKGN5YXBhLCBzbGVlcF90aW1lKTsKKworCQlpZiAoc2xlZXBfdGltZSA8PSBHRU41X1BPV0VSX1JFQURZX01BWF9JTlRSVkxfVElNRSkKKwkJCXBvd2VyX3N0YXRlID0gR0VONV9QT1dFUl9TVEFURV9SRUFEWTsKKwkJZWxzZQorCQkJcG93ZXJfc3RhdGUgPSBHRU41X1BPV0VSX1NUQVRFX0lETEU7CisJCWVycm9yID0gY3lhcGFfZ2VuNV9jaGFuZ2VfcG93ZXJfc3RhdGUoY3lhcGEsIHBvd2VyX3N0YXRlKTsKKwkJaWYgKGVycm9yKSB7CisJCQlkZXZfZXJyKGRldiwgInNldCBwb3dlciBzdGF0ZSB0byAweCUwMnggZmFpbGVkOiAlZFxuIiwKKwkJCQlwb3dlcl9zdGF0ZSwgZXJyb3IpOworCQkJcmV0dXJuIGVycm9yOworCQl9CisKKwkJLyoKKwkJICogRGlzYWJsZSBwaXAgcmVwb3J0IGZvciBhIGxpdHRsZSB0aW1lLCBmaXJtd2FyZSB3aWxsCisJCSAqIHJlLWVuYWJsZSBpdCBhdXRvbWF0aWNhbGx5LiBJdCdzIHVzZWQgdG8gZml4IHRoZSBpc3N1ZQorCQkgKiB0aGF0IHRyYWNrcGFkIHVuYWJsZSB0byByZXBvcnQgc2lnbmFsIHRvIHdha2Ugc3lzdGVtIHVwCisJCSAqIGluIHRoZSBzcGVjaWFsIHNpdHVhdGlvbiB0aGF0IHN5c3RlbSBpcyBpbiBzdXNwZW5kaW5nLCBhbmQKKwkJICogYXQgdGhlIHNhbWUgdGltZSwgdXNlciB0b3VjaCB0cmFja3BhZCB0byB3YWtlIHN5c3RlbSB1cC4KKwkJICogVGhpcyBmdW5jdGlvbiBjYW4gYXZvaWQgdGhlIGRhdGEgdG8gYmUgYnVmZnVyZWQgd2hlbiBzeXN0ZW0KKwkJICogaXMgc3VzcGVuZGluZyB3aGljaCBtYXkgY2F1c2UgaW50ZXJycHV0IGxpbmUgdW5hYmxlIHRvIGJlCisJCSAqIGFzc2VydGVkIGFnYWluLgorCQkgKi8KKwkJY3lhcGFfZW1wdHlfcGlwX291dHB1dF9kYXRhKGN5YXBhLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJY3lhcGFfZ2VuNV9kaXNhYmxlX3BpcF9yZXBvcnQoY3lhcGEpOworCisJCUdFTjVfREVWX1NFVF9QV1JfU1RBVEUoY3lhcGEsCisJCQljeWFwYV9zbGVlcF90aW1lX3RvX3B3cl9jbWQoc2xlZXBfdGltZSkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN5YXBhX2dlbjVfcmVzdW1lX3NjYW5uaW5nKHN0cnVjdCBjeWFwYSAqY3lhcGEpCit7CisJdTggY21kW10gPSB7IDB4MDQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MDQgfTsKKwl1OCByZXNwX2RhdGFbNl07CisJaW50IHJlc3BfbGVuOworCWludCBlcnJvcjsKKworCS8qIFRyeSB0byBkdW1wIGFsbCBidWZmZXJlZCBkYXRhIGJlZm9yZSBkb2luZyBjb21tYW5kLiAqLworCWN5YXBhX2VtcHR5X3BpcF9vdXRwdXRfZGF0YShjeWFwYSwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwlyZXNwX2xlbiA9IHNpemVvZihyZXNwX2RhdGEpOworCWVycm9yID0gY3lhcGFfaTJjX3BpcF9jbWRfaXJxX3N5bmMoY3lhcGEsCisJCQljbWQsIHNpemVvZihjbWQpLAorCQkJcmVzcF9kYXRhLCAmcmVzcF9sZW4sCisJCQk1MDAsIGN5YXBhX2dlbjVfc29ydF90c2dfcGlwX2FwcF9yZXNwX2RhdGEsIHRydWUpOworCWlmIChlcnJvciB8fCAhVkFMSURfQ01EX1JFU1BfSEVBREVSKHJlc3BfZGF0YSwgMHgwNCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVHJ5IHRvIGR1bXAgYWxsIGJ1ZmZlcmVkIGRhdGEgd2hlbiByZXN1bWluZyBzY2FubmluZy4gKi8KKwljeWFwYV9lbXB0eV9waXBfb3V0cHV0X2RhdGEoY3lhcGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZ2VuNV9zdXNwZW5kX3NjYW5uaW5nKHN0cnVjdCBjeWFwYSAqY3lhcGEpCit7CisJdTggY21kW10gPSB7IDB4MDQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MDMgfTsKKwl1OCByZXNwX2RhdGFbNl07CisJaW50IHJlc3BfbGVuOworCWludCBlcnJvcjsKKworCS8qIFRyeSB0byBkdW1wIGFsbCBidWZmZXJlZCBkYXRhIGJlZm9yZSBkb2luZyBjb21tYW5kLiAqLworCWN5YXBhX2VtcHR5X3BpcF9vdXRwdXRfZGF0YShjeWFwYSwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwlyZXNwX2xlbiA9IHNpemVvZihyZXNwX2RhdGEpOworCWVycm9yID0gY3lhcGFfaTJjX3BpcF9jbWRfaXJxX3N5bmMoY3lhcGEsCisJCQljbWQsIHNpemVvZihjbWQpLAorCQkJcmVzcF9kYXRhLCAmcmVzcF9sZW4sCisJCQk1MDAsIGN5YXBhX2dlbjVfc29ydF90c2dfcGlwX2FwcF9yZXNwX2RhdGEsIHRydWUpOworCWlmIChlcnJvciB8fCAhVkFMSURfQ01EX1JFU1BfSEVBREVSKHJlc3BfZGF0YSwgMHgwMykpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVHJ5IHRvIGR1bXAgYWxsIGJ1ZmZlcmVkIGRhdGEgd2hlbiBzdXNwZW5kaW5nIHNjYW5uaW5nLiAqLworCWN5YXBhX2VtcHR5X3BpcF9vdXRwdXRfZGF0YShjeWFwYSwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeWFwYV9nZW41X2NhbGlicmF0ZV9wd2NzKHN0cnVjdCBjeWFwYSAqY3lhcGEsCisJCXU4IGNhbGlicmF0ZV9zZW5zaW5nX21vZGVfdHlwZSkKK3sKKwlzdHJ1Y3QgZ2VuNV9hcHBfY21kX2hlYWQgKmFwcF9jbWRfaGVhZDsKKwl1OCBjbWRbOF07CisJdTggcmVzcF9kYXRhWzZdOworCWludCByZXNwX2xlbjsKKwlpbnQgZXJyb3I7CisKKwkvKiBUcnkgdG8gZHVtcCBhbGwgYnVmZmVyZWQgZGF0YSBiZWZvcmUgZG9pbmcgY29tbWFuZC4gKi8KKwljeWFwYV9lbXB0eV9waXBfb3V0cHV0X2RhdGEoY3lhcGEsIE5VTEwsIE5VTEwsIE5VTEwpOworCisJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWFwcF9jbWRfaGVhZCA9IChzdHJ1Y3QgZ2VuNV9hcHBfY21kX2hlYWQgKiljbWQ7CisJcHV0X3VuYWxpZ25lZF9sZTE2KEdFTjVfT1VUUFVUX1JFUE9SVF9BRERSLCAmYXBwX2NtZF9oZWFkLT5hZGRyKTsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoc2l6ZW9mKGNtZCkgLSAyLCAmYXBwX2NtZF9oZWFkLT5sZW5ndGgpOworCWFwcF9jbWRfaGVhZC0+cmVwb3J0X2lkID0gR0VONV9BUFBfQ01EX1JFUE9SVF9JRDsKKwlhcHBfY21kX2hlYWQtPmNtZF9jb2RlID0gR0VONV9DTURfQ0FMSUJSQVRFOworCWFwcF9jbWRfaGVhZC0+cGFyYW1ldGVyX2RhdGFbMF0gPSBjYWxpYnJhdGVfc2Vuc2luZ19tb2RlX3R5cGU7CisJcmVzcF9sZW4gPSBzaXplb2YocmVzcF9kYXRhKTsKKwllcnJvciA9IGN5YXBhX2kyY19waXBfY21kX2lycV9zeW5jKGN5YXBhLAorCQkJY21kLCBzaXplb2YoY21kKSwKKwkJCXJlc3BfZGF0YSwgJnJlc3BfbGVuLAorCQkJNTAwMCwgY3lhcGFfZ2VuNV9zb3J0X3RzZ19waXBfYXBwX3Jlc3BfZGF0YSwgdHJ1ZSk7CisJaWYgKGVycm9yIHx8ICFWQUxJRF9DTURfUkVTUF9IRUFERVIocmVzcF9kYXRhLCBHRU41X0NNRF9DQUxJQlJBVEUpIHx8CisJCQkhR0VONV9DTURfQ09NUExFVEVfU1VDQ0VTUyhyZXNwX2RhdGFbNV0pKQorCQlyZXR1cm4gZXJyb3IgPCAwID8gZXJyb3IgOiAtRUFHQUlOOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGN5YXBhX2dlbjVfZG9fY2FsaWJyYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGN5YXBhICpjeWFwYSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBlcnJvciwgY2FsaWJyYXRlX2Vycm9yOworCisJLyogMS4gU3VzcGVuZCBTY2FubmluZyovCisJZXJyb3IgPSBjeWFwYV9nZW41X3N1c3BlbmRfc2Nhbm5pbmcoY3lhcGEpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJLyogMi4gRG8gbXV0dWFsIGNhcGFjaXRhbmNlIGZpbmUgY2FsaWJyYXRlLiAqLworCWNhbGlicmF0ZV9lcnJvciA9IGN5YXBhX2dlbjVfY2FsaWJyYXRlX3B3Y3MoY3lhcGEsCisJCQkJQ1lBUEFfU0VOU0lOR19NT0RFX01VVFVBTF9DQVBfRklORSk7CisJaWYgKGNhbGlicmF0ZV9lcnJvcikKKwkJZ290byByZXN1bWVfc2Nhbm5pbmc7CisKKwkvKiAzLiBEbyBzZWxmIGNhcGFjaXRhbmNlIGNhbGlicmF0ZS4gKi8KKwljYWxpYnJhdGVfZXJyb3IgPSBjeWFwYV9nZW41X2NhbGlicmF0ZV9wd2NzKGN5YXBhLAorCQkJCUNZQVBBX1NFTlNJTkdfTU9ERV9TRUxGX0NBUCk7CisJaWYgKGNhbGlicmF0ZV9lcnJvcikKKwkJZ290byByZXN1bWVfc2Nhbm5pbmc7CisKK3Jlc3VtZV9zY2FubmluZzoKKwkvKiA0LiBSZXN1bWUgU2Nhbm5pbmcqLworCWVycm9yID0gY3lhcGFfZ2VuNV9yZXN1bWVfc2Nhbm5pbmcoY3lhcGEpOworCWlmIChlcnJvciB8fCBjYWxpYnJhdGVfZXJyb3IpCisJCXJldHVybiBlcnJvciA/IGVycm9yIDogY2FsaWJyYXRlX2Vycm9yOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgczMyIHR3b3NfY29tcGxlbWVudF90b19zMzIoczMyIHZhbHVlLCBpbnQgbnVtX2JpdHMpCit7CisJaWYgKHZhbHVlID4+IChudW1fYml0cyAtIDEpKQorCQl2YWx1ZSB8PSAgLTEgPDwgbnVtX2JpdHM7CisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgczMyIGN5YXBhX3BhcnNlX3N0cnVjdHVyZV9kYXRhKHU4IGRhdGFfZm9ybWF0LCB1OCAqYnVmLCBpbnQgYnVmX2xlbikKK3sKKwlpbnQgZGF0YV9zaXplOworCWJvb2wgYmlnX2VuZGlhbjsKKwlib29sIHVuc2lnbmVkX3R5cGU7CisJczMyIHZhbHVlOworCisJZGF0YV9zaXplID0gKGRhdGFfZm9ybWF0ICYgMHgwNyk7CisJYmlnX2VuZGlhbiA9ICgoZGF0YV9mb3JtYXQgJiAweDEwKSA9PSAweDAwKTsKKwl1bnNpZ25lZF90eXBlID0gKChkYXRhX2Zvcm1hdCAmIDB4MjApID09IDB4MDApOworCisJaWYgKGJ1Zl9sZW4gPCBkYXRhX3NpemUpCisJCXJldHVybiAwOworCisJc3dpdGNoIChkYXRhX3NpemUpIHsKKwljYXNlIDE6CisJCXZhbHVlICA9IGJ1ZlswXTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlpZiAoYmlnX2VuZGlhbikKKwkJCXZhbHVlID0gZ2V0X3VuYWxpZ25lZF9iZTE2KGJ1Zik7CisJCWVsc2UKKwkJCXZhbHVlID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGJ1Zik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKGJpZ19lbmRpYW4pCisJCQl2YWx1ZSA9IGdldF91bmFsaWduZWRfYmUzMihidWYpOworCQllbHNlCisJCQl2YWx1ZSA9IGdldF91bmFsaWduZWRfbGUzMihidWYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBTaG91bGQgbm90IGhhcHBlbiwganVzdCBhcyBkZWZhdWx0IGNhc2UgaGVyZS4gKi8KKwkJdmFsdWUgPSAwOworCQlicmVhazsKKwl9CisKKwlpZiAoIXVuc2lnbmVkX3R5cGUpCisJCXZhbHVlID0gdHdvc19jb21wbGVtZW50X3RvX3MzMih2YWx1ZSwgZGF0YV9zaXplICogOCk7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIGN5YXBhX2dlbjVfZ3Vlc3NfZWxlY3Ryb2RlcyhzdHJ1Y3QgY3lhcGEgKmN5YXBhLAorCQlpbnQgKmVsZWN0cm9kZXNfcngsIGludCAqZWxlY3Ryb2Rlc190eCkKK3sKKwlpZiAoY3lhcGEtPmVsZWN0cm9kZXNfcnggIT0gMCkgeworCQkqZWxlY3Ryb2Rlc19yeCA9IGN5YXBhLT5lbGVjdHJvZGVzX3J4OworCQkqZWxlY3Ryb2Rlc190eCA9IChjeWFwYS0+ZWxlY3Ryb2Rlc194ID09ICplbGVjdHJvZGVzX3J4KSA/CisJCQkJY3lhcGEtPmVsZWN0cm9kZXNfeSA6IGN5YXBhLT5lbGVjdHJvZGVzX3g7CisJfSBlbHNlIHsKKwkJKmVsZWN0cm9kZXNfdHggPSBtaW4oY3lhcGEtPmVsZWN0cm9kZXNfeCwgY3lhcGEtPmVsZWN0cm9kZXNfeSk7CisJCSplbGVjdHJvZGVzX3J4ID0gbWF4KGN5YXBhLT5lbGVjdHJvZGVzX3gsIGN5YXBhLT5lbGVjdHJvZGVzX3kpOworCX0KK30KKworLyoKKyAqIFJlYWQgYWxsIHRoZSBnbG9iYWwgbXV0dWFsIG9yIHNlbGYgaWRhYyBkYXRhIG9yIG11dHVhbCBvciBzZWxmIGxvY2FsIFBXQworICogZGF0YSBiYXNlZCBvbiB0aGUgQGlkYWNfZGF0YV90eXBlLgorICogSWYgdGhlIGlucHV0IHZhbHVlIG9mIEBkYXRhX3NpemUgaXMgMCwgdGhlbiBtZWFucyByZWFkIGdsb2JhbCBtdXR1YWwgb3IKKyAqIHNlbGYgaWRhYyBkYXRhLiBGb3IgcmVhZCBnbG9iYWwgbXV0dWFsIGlkYWMgZGF0YSwgQGlkYWNfbWF4LCBAaWRhY19taW4gYW5kCisgKiBAaWRhY19hdmUgYXJlIGluIG9yZGVyIHVzZWQgdG8gcmV0dXJuIHRoZSBtYXggdmFsdWUgb2YgZ2xvYmFsIG11dHVhbCBpZGFjCisgKiBkYXRhLCB0aGUgbWluIHZhbHVlIG9mIGdsb2JhbCBtdXR1YWwgaWRhYyBhbmQgdGhlIGF2ZXJhZ2UgdmFsdWUgb2YgdGhlCisgKiBnbG9iYWwgbXV0dWFsIGlkYWMgZGF0YS4gRm9yIHJlYWQgZ2xvYmFsIHNlbGYgaWRhYyBkYXRhLCBAaWRhY19tYXggaXMgdXNlZAorICogdG8gcmV0dXJuIHRoZSBnbG9iYWwgc2VsZiBjYXAgaWRhYyBkYXRhIGluIFJ4IGRpcmVjdGlvbiwgQGlkYWNfbWluIGlzIHVzZWQKKyAqIHRvIHJldHVybiB0aGUgZ2xvYmFsIHNlbGYgY2FwIGlkYWMgZGF0YSBpbiBUeCBkaXJlY3Rpb24uIEBpZGFjX2F2ZSBpcyBub3QKKyAqIHVzZWQuCisgKiBJZiB0aGUgaW5wdXQgdmFsdWUgb2YgQGRhdGFfc2l6ZSBpcyBub3QgMCwgdGhhbiBtZWFucyByZWFkIHRoZSBtdXR1YWwgb3IKKyAqIHNlbGYgbG9jYWwgUFdDIGRhdGEuIFRoZSBAaWRhY19tYXgsIEBpZGFjX21pbiBhbmQgQGlkYWNfYXZlIGFyZSB1c2VkIHRvCisgKiByZXR1cm4gdGhlIG1heCwgbWluIGFuZCBhdmVyYWdlIHZhbHVlIG9mIHRoZSBtdXR1YWwgb3Igc2VsZiBsb2NhbCBQV0MgZGF0YS4KKyAqIE5vdGUsIGluIG9yZGVyIHRvIHJhZWQgbXV0dWFsIGxvY2FsIFBXQyBkYXRhLCBtdXN0IHJlYWQgaW52b2tlIHRoaXMgZnVuY3Rpb24KKyAqIHRvIHJlYWQgdGhlIG11dHVhbCBnbG9iYWwgaWRhYyBkYXRhIGZpcnN0bHkgdG8gc2V0IHRoZSBjb3JyZWN0IFJ4IG51bWJlcgorICogdmFsdWUsIG90aGVyd2lzZSwgdGhlIHJlYWQgbXV0dWFsIGlkYWMgYW5kIFBXQyBkYXRhIG1heSBub3QgY29ycmVjdC4KKyAqLworc3RhdGljIGludCBjeWFwYV9nZW41X3JlYWRfaWRhY19kYXRhKHN0cnVjdCBjeWFwYSAqY3lhcGEsCisJCXU4IGNtZF9jb2RlLCB1OCBpZGFjX2RhdGFfdHlwZSwgaW50ICpkYXRhX3NpemUsCisJCWludCAqaWRhY19tYXgsIGludCAqaWRhY19taW4sIGludCAqaWRhY19hdmUpCit7CisJc3RydWN0IGdlbjVfYXBwX2NtZF9oZWFkICpjbWRfaGVhZDsKKwl1OCBjbWRbMTJdOworCXU4IHJlc3BfZGF0YVsyNTZdOworCWludCByZXNwX2xlbjsKKwlpbnQgcmVhZF9sZW47CisJaW50IHZhbHVlOworCXUxNiBvZmZzZXQ7CisJaW50IHJlYWRfZWxlbWVudHM7CisJYm9vbCByZWFkX2dsb2JhbF9pZGFjOworCWludCBzdW0sIGNvdW50LCBtYXhfZWxlbWVudF9jbnQ7CisJaW50IHRtcF9tYXgsIHRtcF9taW4sIHRtcF9hdmUsIHRtcF9zdW0sIHRtcF9jb3VudDsKKwlpbnQgZWxlY3Ryb2Rlc19yeCwgZWxlY3Ryb2Rlc190eDsKKwlpbnQgaTsKKwlpbnQgZXJyb3I7CisKKwlpZiAoY21kX2NvZGUgIT0gR0VONV9DTURfUkVUUklFVkVfREFUQV9TVFJVQ1RVUkUgfHwKKwkJKGlkYWNfZGF0YV90eXBlICE9IEdFTjVfUkVUUklFVkVfTVVUVUFMX1BXQ19EQVRBICYmCisJCWlkYWNfZGF0YV90eXBlICE9IEdFTjVfUkVUUklFVkVfU0VMRl9DQVBfUFdDX0RBVEEpIHx8CisJCSFkYXRhX3NpemUgfHwgIWlkYWNfbWF4IHx8ICFpZGFjX21pbiB8fCAhaWRhY19hdmUpCisJCXJldHVybiAtRUlOVkFMOworCisJKmlkYWNfbWF4ID0gSU5UX01JTjsKKwkqaWRhY19taW4gPSBJTlRfTUFYOworCXN1bSA9IGNvdW50ID0gdG1wX2NvdW50ID0gMDsKKwllbGVjdHJvZGVzX3J4ID0gZWxlY3Ryb2Rlc190eCA9IDA7CisJaWYgKCpkYXRhX3NpemUgPT0gMCkgeworCQkvKgorCQkgKiBSZWFkIGdsb2JhbCBpZGFjIHZhbHVlcyBmaXJzdGx5LgorCQkgKiBDdXJyZW50bHksIG5vIGlkYWMgZGF0YSBleGNlZWQgNCBieXRlcy4KKwkJICovCisJCXJlYWRfZ2xvYmFsX2lkYWMgPSB0cnVlOworCQlvZmZzZXQgPSAwOworCQkqZGF0YV9zaXplID0gNDsKKwkJdG1wX21heCA9IElOVF9NSU47CisJCXRtcF9taW4gPSBJTlRfTUFYOworCQl0bXBfYXZlID0gdG1wX3N1bSA9IHRtcF9jb3VudCA9IDA7CisKKwkJaWYgKGlkYWNfZGF0YV90eXBlID09IEdFTjVfUkVUUklFVkVfTVVUVUFMX1BXQ19EQVRBKSB7CisJCQlpZiAoY3lhcGEtPmFsaWduZWRfZWxlY3Ryb2Rlc19yeCA9PSAwKSB7CisJCQkJY3lhcGFfZ2VuNV9ndWVzc19lbGVjdHJvZGVzKGN5YXBhLAorCQkJCQkmZWxlY3Ryb2Rlc19yeCwgJmVsZWN0cm9kZXNfdHgpOworCQkJCWN5YXBhLT5hbGlnbmVkX2VsZWN0cm9kZXNfcnggPQorCQkJCQkoZWxlY3Ryb2Rlc19yeCArIDMpICYgfjN1OworCQkJfQorCQkJbWF4X2VsZW1lbnRfY250ID0KKwkJCQkoY3lhcGEtPmFsaWduZWRfZWxlY3Ryb2Rlc19yeCArIDcpICYgfjd1OworCQl9IGVsc2UgeworCQkJbWF4X2VsZW1lbnRfY250ID0gMjsKKwkJfQorCX0gZWxzZSB7CisJCXJlYWRfZ2xvYmFsX2lkYWMgPSBmYWxzZTsKKwkJaWYgKCpkYXRhX3NpemUgPiA0KQorCQkJKmRhdGFfc2l6ZSA9IDQ7CisJCS8qIENhbGN1bGF0ZSB0aGUgc3RhcnQgb2Zmc2V0IGluIGJ5dGVzIG9mIGxvY2FsIFBXQyBkYXRhLiAqLworCQlpZiAoaWRhY19kYXRhX3R5cGUgPT0gR0VONV9SRVRSSUVWRV9NVVRVQUxfUFdDX0RBVEEpIHsKKwkJCW9mZnNldCA9IGN5YXBhLT5hbGlnbmVkX2VsZWN0cm9kZXNfcnggKiAoKmRhdGFfc2l6ZSk7CisJCQlpZiAoY3lhcGEtPmVsZWN0cm9kZXNfcnggPT0gY3lhcGEtPmVsZWN0cm9kZXNfeCkKKwkJCQllbGVjdHJvZGVzX3R4ID0gY3lhcGEtPmVsZWN0cm9kZXNfeTsKKwkJCWVsc2UKKwkJCQllbGVjdHJvZGVzX3R4ID0gY3lhcGEtPmVsZWN0cm9kZXNfeDsKKwkJCW1heF9lbGVtZW50X2NudCA9ICgoY3lhcGEtPmFsaWduZWRfZWxlY3Ryb2Rlc19yeCArIDcpICYKKwkJCQkJCX43dSkgKiBlbGVjdHJvZGVzX3R4OworCQl9IGVsc2UgaWYgKGlkYWNfZGF0YV90eXBlID09IEdFTjVfUkVUUklFVkVfU0VMRl9DQVBfUFdDX0RBVEEpIHsKKwkJCW9mZnNldCA9IDI7CisJCQltYXhfZWxlbWVudF9jbnQgPSBjeWFwYS0+ZWxlY3Ryb2Rlc194ICsKKwkJCQkJCWN5YXBhLT5lbGVjdHJvZGVzX3k7CisJCQltYXhfZWxlbWVudF9jbnQgPSAobWF4X2VsZW1lbnRfY250ICsgMykgJiB+M3U7CisJCX0KKwl9CisKKwltZW1zZXQoY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kX2hlYWQgPSAoc3RydWN0IGdlbjVfYXBwX2NtZF9oZWFkICopY21kOworCXB1dF91bmFsaWduZWRfbGUxNihHRU41X09VVFBVVF9SRVBPUlRfQUREUiwgJmNtZF9oZWFkLT5hZGRyKTsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoc2l6ZW9mKGNtZCkgLSAyLCAmY21kX2hlYWQtPmxlbmd0aCk7CisJY21kX2hlYWQtPnJlcG9ydF9pZCA9IEdFTjVfQVBQX0NNRF9SRVBPUlRfSUQ7CisJY21kX2hlYWQtPmNtZF9jb2RlID0gY21kX2NvZGU7CisJZG8geworCQlyZWFkX2VsZW1lbnRzID0gKDI1NiAtIEdFTjVfUkVTUF9EQVRBX1NUUlVDVFVSRV9PRkZTRVQpIC8KKwkJCQkoKmRhdGFfc2l6ZSk7CisJCXJlYWRfZWxlbWVudHMgPSBtaW4ocmVhZF9lbGVtZW50cywgbWF4X2VsZW1lbnRfY250IC0gY291bnQpOworCQlyZWFkX2xlbiA9IHJlYWRfZWxlbWVudHMgKiAoKmRhdGFfc2l6ZSk7CisKKwkJcHV0X3VuYWxpZ25lZF9sZTE2KG9mZnNldCwgJmNtZF9oZWFkLT5wYXJhbWV0ZXJfZGF0YVswXSk7CisJCXB1dF91bmFsaWduZWRfbGUxNihyZWFkX2xlbiwgJmNtZF9oZWFkLT5wYXJhbWV0ZXJfZGF0YVsyXSk7CisJCWNtZF9oZWFkLT5wYXJhbWV0ZXJfZGF0YVs0XSA9IGlkYWNfZGF0YV90eXBlOworCQlyZXNwX2xlbiA9IEdFTjVfUkVTUF9EQVRBX1NUUlVDVFVSRV9PRkZTRVQgKyByZWFkX2xlbjsKKwkJZXJyb3IgPSBjeWFwYV9pMmNfcGlwX2NtZF9pcnFfc3luYyhjeWFwYSwKKwkJCQljbWQsIHNpemVvZihjbWQpLAorCQkJCXJlc3BfZGF0YSwgJnJlc3BfbGVuLAorCQkJCTUwMCwgY3lhcGFfZ2VuNV9zb3J0X3RzZ19waXBfYXBwX3Jlc3BfZGF0YSwKKwkJCQl0cnVlKTsKKwkJaWYgKGVycm9yIHx8IHJlc3BfbGVuIDwgR0VONV9SRVNQX0RBVEFfU1RSVUNUVVJFX09GRlNFVCB8fAorCQkJCSFWQUxJRF9DTURfUkVTUF9IRUFERVIocmVzcF9kYXRhLCBjbWRfY29kZSkgfHwKKwkJCQkhR0VONV9DTURfQ09NUExFVEVfU1VDQ0VTUyhyZXNwX2RhdGFbNV0pIHx8CisJCQkJcmVzcF9kYXRhWzZdICE9IGlkYWNfZGF0YV90eXBlKQorCQkJcmV0dXJuIChlcnJvciA8IDApID8gZXJyb3IgOiAtRUFHQUlOOworCQlyZWFkX2xlbiA9IGdldF91bmFsaWduZWRfbGUxNigmcmVzcF9kYXRhWzddKTsKKwkJaWYgKHJlYWRfbGVuID09IDApCisJCQlicmVhazsKKworCQkqZGF0YV9zaXplID0gKHJlc3BfZGF0YVs5XSAmIEdFTjVfUFdDX0RBVEFfRUxFTUVOVF9TSVpFX01BU0spOworCQlpZiAocmVhZF9sZW4gPCAqZGF0YV9zaXplKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKHJlYWRfZ2xvYmFsX2lkYWMgJiYKKwkJCWlkYWNfZGF0YV90eXBlID09IEdFTjVfUkVUUklFVkVfU0VMRl9DQVBfUFdDX0RBVEEpIHsKKwkJCS8qIFJ4J3Mgc2VsZiBnbG9iYWwgaWRhYyBkYXRhLiAqLworCQkJKmlkYWNfbWF4ID0gY3lhcGFfcGFyc2Vfc3RydWN0dXJlX2RhdGEoCisJCQkJcmVzcF9kYXRhWzldLAorCQkJCSZyZXNwX2RhdGFbR0VONV9SRVNQX0RBVEFfU1RSVUNUVVJFX09GRlNFVF0sCisJCQkJKmRhdGFfc2l6ZSk7CisJCQkvKiBUeCdzIHNlbGYgZ2xvYmFsIGlkYWMgZGF0YS4gKi8KKwkJCSppZGFjX21pbiA9IGN5YXBhX3BhcnNlX3N0cnVjdHVyZV9kYXRhKAorCQkJCXJlc3BfZGF0YVs5XSwKKwkJCQkmcmVzcF9kYXRhW0dFTjVfUkVTUF9EQVRBX1NUUlVDVFVSRV9PRkZTRVQgKworCQkJCQkgICAqZGF0YV9zaXplXSwKKwkJCQkqZGF0YV9zaXplKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogUmVhZCBtdXR1YWwgZ2xvYmFsIGlkYWMgb3IgbG9jYWwgbXV0dWFsL3NlbGYgUFdDIGRhdGEuICovCisJCW9mZnNldCArPSByZWFkX2xlbjsKKwkJZm9yIChpID0gMTA7IGkgPCAocmVhZF9sZW4gKyBHRU41X1JFU1BfREFUQV9TVFJVQ1RVUkVfT0ZGU0VUKTsKKwkJCQlpICs9ICpkYXRhX3NpemUpIHsKKwkJCXZhbHVlID0gY3lhcGFfcGFyc2Vfc3RydWN0dXJlX2RhdGEocmVzcF9kYXRhWzldLAorCQkJCQkmcmVzcF9kYXRhW2ldLCAqZGF0YV9zaXplKTsKKwkJCSppZGFjX21pbiA9IG1pbih2YWx1ZSwgKmlkYWNfbWluKTsKKwkJCSppZGFjX21heCA9IG1heCh2YWx1ZSwgKmlkYWNfbWF4KTsKKworCQkJaWYgKGlkYWNfZGF0YV90eXBlID09IEdFTjVfUkVUUklFVkVfTVVUVUFMX1BXQ19EQVRBICYmCisJCQkJdG1wX2NvdW50IDwgY3lhcGEtPmFsaWduZWRfZWxlY3Ryb2Rlc19yeCAmJgorCQkJCXJlYWRfZ2xvYmFsX2lkYWMpIHsKKwkJCQkvKgorCQkJCSAqIFRoZSB2YWx1ZSBnYXAgYmV0d2VuIGdsb2JhbCBhbmQgbG9jYWwgbXV0dWFsCisJCQkJICogaWRhYyBkYXRhIG11c3QgYmlnZ2VyIHRoYW4gNTAlLgorCQkJCSAqIE5vcm1hbGx5LCBnbG9iYWwgdmFsdWUgYmlnZ2VyIHRoYW4gNTAsCisJCQkJICogbG9jYWwgdmFsdWVzIGxlc3MgdGhhbiAxMC4KKwkJCQkgKi8KKwkJCQlpZiAoIXRtcF9hdmUgfHwgdmFsdWUgPiB0bXBfYXZlIC8gMikgeworCQkJCQl0bXBfbWluID0gbWluKHZhbHVlLCB0bXBfbWluKTsKKwkJCQkJdG1wX21heCA9IG1heCh2YWx1ZSwgdG1wX21heCk7CisJCQkJCXRtcF9zdW0gKz0gdmFsdWU7CisJCQkJCXRtcF9jb3VudCsrOworCisJCQkJCXRtcF9hdmUgPSB0bXBfc3VtIC8gdG1wX2NvdW50OworCQkJCX0KKwkJCX0KKworCQkJc3VtICs9IHZhbHVlOworCQkJY291bnQrKzsKKworCQkJaWYgKGNvdW50ID49IG1heF9lbGVtZW50X2NudCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCX0gd2hpbGUgKHRydWUpOworCitvdXQ6CisJKmlkYWNfYXZlID0gY291bnQgPyAoc3VtIC8gY291bnQpIDogMDsKKworCWlmIChyZWFkX2dsb2JhbF9pZGFjICYmCisJCWlkYWNfZGF0YV90eXBlID09IEdFTjVfUkVUUklFVkVfTVVUVUFMX1BXQ19EQVRBKSB7CisJCWlmICh0bXBfY291bnQgPT0gMCkKKwkJCXJldHVybiAwOworCisJCWlmICh0bXBfY291bnQgPT0gY3lhcGEtPmFsaWduZWRfZWxlY3Ryb2Rlc19yeCkgeworCQkJY3lhcGEtPmVsZWN0cm9kZXNfcnggPSBjeWFwYS0+ZWxlY3Ryb2Rlc19yeCA/CisJCQkJY3lhcGEtPmVsZWN0cm9kZXNfcnggOiBlbGVjdHJvZGVzX3J4OworCQl9IGVsc2UgaWYgKHRtcF9jb3VudCA9PSBlbGVjdHJvZGVzX3J4KSB7CisJCQljeWFwYS0+ZWxlY3Ryb2Rlc19yeCA9IGN5YXBhLT5lbGVjdHJvZGVzX3J4ID8KKwkJCQljeWFwYS0+ZWxlY3Ryb2Rlc19yeCA6IGVsZWN0cm9kZXNfcng7CisJCQljeWFwYS0+YWxpZ25lZF9lbGVjdHJvZGVzX3J4ID0gZWxlY3Ryb2Rlc19yeDsKKwkJfSBlbHNlIHsKKwkJCWN5YXBhLT5lbGVjdHJvZGVzX3J4ID0gY3lhcGEtPmVsZWN0cm9kZXNfcnggPworCQkJCWN5YXBhLT5lbGVjdHJvZGVzX3J4IDogZWxlY3Ryb2Rlc190eDsKKwkJCWN5YXBhLT5hbGlnbmVkX2VsZWN0cm9kZXNfcnggPSB0bXBfY291bnQ7CisJCX0KKworCQkqaWRhY19taW4gPSB0bXBfbWluOworCQkqaWRhY19tYXggPSB0bXBfbWF4OworCQkqaWRhY19hdmUgPSB0bXBfYXZlOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN5YXBhX2dlbjVfcmVhZF9tdXR1YWxfaWRhY19kYXRhKHN0cnVjdCBjeWFwYSAqY3lhcGEsCisJaW50ICpnaWRhY19tdXR1YWxfbWF4LCBpbnQgKmdpZGFjX211dHVhbF9taW4sIGludCAqZ2lkYWNfbXV0dWFsX2F2ZSwKKwlpbnQgKmxpZGFjX211dHVhbF9tYXgsIGludCAqbGlkYWNfbXV0dWFsX21pbiwgaW50ICpsaWRhY19tdXR1YWxfYXZlKQoreworCWludCBkYXRhX3NpemU7CisJaW50IGVycm9yOworCisJKmdpZGFjX211dHVhbF9tYXggPSAqZ2lkYWNfbXV0dWFsX21pbiA9ICpnaWRhY19tdXR1YWxfYXZlID0gMDsKKwkqbGlkYWNfbXV0dWFsX21heCA9ICpsaWRhY19tdXR1YWxfbWluID0gKmxpZGFjX211dHVhbF9hdmUgPSAwOworCisJZGF0YV9zaXplID0gMDsKKwllcnJvciA9IGN5YXBhX2dlbjVfcmVhZF9pZGFjX2RhdGEoY3lhcGEsCisJCUdFTjVfQ01EX1JFVFJJRVZFX0RBVEFfU1RSVUNUVVJFLAorCQlHRU41X1JFVFJJRVZFX01VVFVBTF9QV0NfREFUQSwKKwkJJmRhdGFfc2l6ZSwKKwkJZ2lkYWNfbXV0dWFsX21heCwgZ2lkYWNfbXV0dWFsX21pbiwgZ2lkYWNfbXV0dWFsX2F2ZSk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwllcnJvciA9IGN5YXBhX2dlbjVfcmVhZF9pZGFjX2RhdGEoY3lhcGEsCisJCUdFTjVfQ01EX1JFVFJJRVZFX0RBVEFfU1RSVUNUVVJFLAorCQlHRU41X1JFVFJJRVZFX01VVFVBTF9QV0NfREFUQSwKKwkJJmRhdGFfc2l6ZSwKKwkJbGlkYWNfbXV0dWFsX21heCwgbGlkYWNfbXV0dWFsX21pbiwgbGlkYWNfbXV0dWFsX2F2ZSk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IGN5YXBhX2dlbjVfcmVhZF9zZWxmX2lkYWNfZGF0YShzdHJ1Y3QgY3lhcGEgKmN5YXBhLAorCQlpbnQgKmdpZGFjX3NlbGZfcngsIGludCAqZ2lkYWNfc2VsZl90eCwKKwkJaW50ICpsaWRhY19zZWxmX21heCwgaW50ICpsaWRhY19zZWxmX21pbiwgaW50ICpsaWRhY19zZWxmX2F2ZSkKK3sKKwlpbnQgZGF0YV9zaXplOworCWludCBlcnJvcjsKKworCSpnaWRhY19zZWxmX3J4ID0gKmdpZGFjX3NlbGZfdHggPSAwOworCSpsaWRhY19zZWxmX21heCA9ICpsaWRhY19zZWxmX21pbiA9ICpsaWRhY19zZWxmX2F2ZSA9IDA7CisKKwlkYXRhX3NpemUgPSAwOworCWVycm9yID0gY3lhcGFfZ2VuNV9yZWFkX2lkYWNfZGF0YShjeWFwYSwKKwkJR0VONV9DTURfUkVUUklFVkVfREFUQV9TVFJVQ1RVUkUsCisJCUdFTjVfUkVUUklFVkVfU0VMRl9DQVBfUFdDX0RBVEEsCisJCSZkYXRhX3NpemUsCisJCWxpZGFjX3NlbGZfbWF4LCBsaWRhY19zZWxmX21pbiwgbGlkYWNfc2VsZl9hdmUpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCSpnaWRhY19zZWxmX3J4ID0gKmxpZGFjX3NlbGZfbWF4OworCSpnaWRhY19zZWxmX3R4ID0gKmxpZGFjX3NlbGZfbWluOworCisJZXJyb3IgPSBjeWFwYV9nZW41X3JlYWRfaWRhY19kYXRhKGN5YXBhLAorCQlHRU41X0NNRF9SRVRSSUVWRV9EQVRBX1NUUlVDVFVSRSwKKwkJR0VONV9SRVRSSUVWRV9TRUxGX0NBUF9QV0NfREFUQSwKKwkJJmRhdGFfc2l6ZSwKKwkJbGlkYWNfc2VsZl9tYXgsIGxpZGFjX3NlbGZfbWluLCBsaWRhY19zZWxmX2F2ZSk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgc3NpemVfdCBjeWFwYV9nZW41X2V4ZWN1dGVfcGFuZWxfc2NhbihzdHJ1Y3QgY3lhcGEgKmN5YXBhKQoreworCXN0cnVjdCBnZW41X2FwcF9jbWRfaGVhZCAqYXBwX2NtZF9oZWFkOworCXU4IGNtZFs3XTsKKwl1OCByZXNwX2RhdGFbNl07CisJaW50IHJlc3BfbGVuOworCWludCBlcnJvcjsKKworCW1lbXNldChjbWQsIDAsIHNpemVvZihjbWQpKTsKKwlhcHBfY21kX2hlYWQgPSAoc3RydWN0IGdlbjVfYXBwX2NtZF9oZWFkICopY21kOworCXB1dF91bmFsaWduZWRfbGUxNihHRU41X09VVFBVVF9SRVBPUlRfQUREUiwgJmFwcF9jbWRfaGVhZC0+YWRkcik7CisJcHV0X3VuYWxpZ25lZF9sZTE2KHNpemVvZihjbWQpIC0gMiwgJmFwcF9jbWRfaGVhZC0+bGVuZ3RoKTsKKwlhcHBfY21kX2hlYWQtPnJlcG9ydF9pZCA9IEdFTjVfQVBQX0NNRF9SRVBPUlRfSUQ7CisJYXBwX2NtZF9oZWFkLT5jbWRfY29kZSA9IEdFTjVfQ01EX0VYRUNVVEVfUEFORUxfU0NBTjsKKwlyZXNwX2xlbiA9IHNpemVvZihyZXNwX2RhdGEpOworCWVycm9yID0gY3lhcGFfaTJjX3BpcF9jbWRfaXJxX3N5bmMoY3lhcGEsCisJCQljbWQsIHNpemVvZihjbWQpLAorCQkJcmVzcF9kYXRhLCAmcmVzcF9sZW4sCisJCQk1MDAsIGN5YXBhX2dlbjVfc29ydF90c2dfcGlwX2FwcF9yZXNwX2RhdGEsIHRydWUpOworCWlmIChlcnJvciB8fCByZXNwX2xlbiAhPSBzaXplb2YocmVzcF9kYXRhKSB8fAorCQkJIVZBTElEX0NNRF9SRVNQX0hFQURFUihyZXNwX2RhdGEsCisJCQkJR0VONV9DTURfRVhFQ1VURV9QQU5FTF9TQ0FOKSB8fAorCQkJIUdFTjVfQ01EX0NPTVBMRVRFX1NVQ0NFU1MocmVzcF9kYXRhWzVdKSkKKwkJcmV0dXJuIGVycm9yID8gZXJyb3IgOiAtRUFHQUlOOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZ2VuNV9yZWFkX3BhbmVsX3NjYW5fcmF3X2RhdGEoc3RydWN0IGN5YXBhICpjeWFwYSwKKwkJdTggY21kX2NvZGUsIHU4IHJhd19kYXRhX3R5cGUsIGludCByYXdfZGF0YV9tYXhfbnVtLAorCQlpbnQgKnJhd19kYXRhX21heCwgaW50ICpyYXdfZGF0YV9taW4sIGludCAqcmF3X2RhdGFfYXZlLAorCQl1OCAqYnVmZmVyKQoreworCXN0cnVjdCBnZW41X2FwcF9jbWRfaGVhZCAqYXBwX2NtZF9oZWFkOworCXN0cnVjdCBnZW41X3JldHJpZXZlX3BhbmVsX3NjYW5fZGF0YSAqcGFuZWxfc2Fjbl9kYXRhOworCXU4IGNtZFsxMl07CisJdTggcmVzcF9kYXRhWzI1Nl07ICAvKiBNYXggYnl0ZXMgY2FuIHRyYW5zZmVyIG9uZSB0aW1lLiAqLworCWludCByZXNwX2xlbjsKKwlpbnQgcmVhZF9lbGVtZW50czsKKwlpbnQgcmVhZF9sZW47CisJdTE2IG9mZnNldDsKKwlzMzIgdmFsdWU7CisJaW50IHN1bSwgY291bnQ7CisJaW50IGRhdGFfc2l6ZTsKKwlzMzIgKmludHA7CisJaW50IGk7CisJaW50IGVycm9yOworCisJaWYgKGNtZF9jb2RlICE9IEdFTjVfQ01EX1JFVFJJRVZFX1BBTkVMX1NDQU4gfHwKKwkJKHJhd19kYXRhX3R5cGUgPiBHRU41X1BBTkVMX1NDQU5fU0VMRl9ESUZGQ09VTlQpIHx8CisJCSFyYXdfZGF0YV9tYXggfHwgIXJhd19kYXRhX21pbiB8fCAhcmF3X2RhdGFfYXZlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWludHAgPSAoczMyICopYnVmZmVyOworCSpyYXdfZGF0YV9tYXggPSBJTlRfTUlOOworCSpyYXdfZGF0YV9taW4gPSBJTlRfTUFYOworCXN1bSA9IGNvdW50ID0gMDsKKwlvZmZzZXQgPSAwOworCS8qIEFzc3VtZSBtYXggZWxlbWVudCBzaXplIGlzIDQgY3VycmVudGx5LiAqLworCXJlYWRfZWxlbWVudHMgPSAoMjU2IC0gR0VONV9SRVNQX0RBVEFfU1RSVUNUVVJFX09GRlNFVCkgLyA0OworCXJlYWRfbGVuID0gcmVhZF9lbGVtZW50cyAqIDQ7CisJYXBwX2NtZF9oZWFkID0gKHN0cnVjdCBnZW41X2FwcF9jbWRfaGVhZCAqKWNtZDsKKwlwdXRfdW5hbGlnbmVkX2xlMTYoR0VONV9PVVRQVVRfUkVQT1JUX0FERFIsICZhcHBfY21kX2hlYWQtPmFkZHIpOworCXB1dF91bmFsaWduZWRfbGUxNihzaXplb2YoY21kKSAtIDIsICZhcHBfY21kX2hlYWQtPmxlbmd0aCk7CisJYXBwX2NtZF9oZWFkLT5yZXBvcnRfaWQgPSBHRU41X0FQUF9DTURfUkVQT1JUX0lEOworCWFwcF9jbWRfaGVhZC0+Y21kX2NvZGUgPSBjbWRfY29kZTsKKwlwYW5lbF9zYWNuX2RhdGEgPSAoc3RydWN0IGdlbjVfcmV0cmlldmVfcGFuZWxfc2Nhbl9kYXRhICopCisJCQlhcHBfY21kX2hlYWQtPnBhcmFtZXRlcl9kYXRhOworCWRvIHsKKwkJcHV0X3VuYWxpZ25lZF9sZTE2KG9mZnNldCwgJnBhbmVsX3NhY25fZGF0YS0+cmVhZF9vZmZzZXQpOworCQlwdXRfdW5hbGlnbmVkX2xlMTYocmVhZF9lbGVtZW50cywKKwkJCSZwYW5lbF9zYWNuX2RhdGEtPnJlYWRfZWxlbWVudHMpOworCQlwYW5lbF9zYWNuX2RhdGEtPmRhdGFfaWQgPSByYXdfZGF0YV90eXBlOworCisJCXJlc3BfbGVuID0gR0VONV9SRVNQX0RBVEFfU1RSVUNUVVJFX09GRlNFVCArIHJlYWRfbGVuOworCQllcnJvciA9IGN5YXBhX2kyY19waXBfY21kX2lycV9zeW5jKGN5YXBhLAorCQkJY21kLCBzaXplb2YoY21kKSwKKwkJCXJlc3BfZGF0YSwgJnJlc3BfbGVuLAorCQkJNTAwLCBjeWFwYV9nZW41X3NvcnRfdHNnX3BpcF9hcHBfcmVzcF9kYXRhLCB0cnVlKTsKKwkJaWYgKGVycm9yIHx8IHJlc3BfbGVuIDwgR0VONV9SRVNQX0RBVEFfU1RSVUNUVVJFX09GRlNFVCB8fAorCQkJCSFWQUxJRF9DTURfUkVTUF9IRUFERVIocmVzcF9kYXRhLCBjbWRfY29kZSkgfHwKKwkJCQkhR0VONV9DTURfQ09NUExFVEVfU1VDQ0VTUyhyZXNwX2RhdGFbNV0pIHx8CisJCQkJcmVzcF9kYXRhWzZdICE9IHJhd19kYXRhX3R5cGUpCisJCQlyZXR1cm4gZXJyb3IgPyBlcnJvciA6IC1FQUdBSU47CisKKwkJcmVhZF9lbGVtZW50cyA9IGdldF91bmFsaWduZWRfbGUxNigmcmVzcF9kYXRhWzddKTsKKwkJaWYgKHJlYWRfZWxlbWVudHMgPT0gMCkKKwkJCWJyZWFrOworCisJCWRhdGFfc2l6ZSA9IChyZXNwX2RhdGFbOV0gJiBHRU41X1BXQ19EQVRBX0VMRU1FTlRfU0laRV9NQVNLKTsKKwkJb2Zmc2V0ICs9IHJlYWRfZWxlbWVudHM7CisJCWlmIChyZWFkX2VsZW1lbnRzKSB7CisJCQlmb3IgKGkgPSBHRU41X1JFU1BfREFUQV9TVFJVQ1RVUkVfT0ZGU0VUOworCQkJICAgICBpIDwgKHJlYWRfZWxlbWVudHMgKiBkYXRhX3NpemUgKworCQkJCQlHRU41X1JFU1BfREFUQV9TVFJVQ1RVUkVfT0ZGU0VUKTsKKwkJCSAgICAgaSArPSBkYXRhX3NpemUpIHsKKwkJCQl2YWx1ZSA9IGN5YXBhX3BhcnNlX3N0cnVjdHVyZV9kYXRhKHJlc3BfZGF0YVs5XSwKKwkJCQkJCSZyZXNwX2RhdGFbaV0sIGRhdGFfc2l6ZSk7CisJCQkJKnJhd19kYXRhX21pbiA9IG1pbih2YWx1ZSwgKnJhd19kYXRhX21pbik7CisJCQkJKnJhd19kYXRhX21heCA9IG1heCh2YWx1ZSwgKnJhd19kYXRhX21heCk7CisKKwkJCQlpZiAoaW50cCkKKwkJCQkJcHV0X3VuYWxpZ25lZF9sZTMyKHZhbHVlLCAmaW50cFtjb3VudF0pOworCisJCQkJc3VtICs9IHZhbHVlOworCQkJCWNvdW50Kys7CisKKwkJCX0KKwkJfQorCisJCWlmIChjb3VudCA+PSByYXdfZGF0YV9tYXhfbnVtKQorCQkJYnJlYWs7CisKKwkJcmVhZF9lbGVtZW50cyA9IChzaXplb2YocmVzcF9kYXRhKSAtCisJCQkJR0VONV9SRVNQX0RBVEFfU1RSVUNUVVJFX09GRlNFVCkgLyBkYXRhX3NpemU7CisJCXJlYWRfbGVuID0gcmVhZF9lbGVtZW50cyAqIGRhdGFfc2l6ZTsKKwl9IHdoaWxlICh0cnVlKTsKKworCSpyYXdfZGF0YV9hdmUgPSBjb3VudCA/IChzdW0gLyBjb3VudCkgOiAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGN5YXBhX2dlbjVfc2hvd19iYXNlbGluZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3lhcGEgKmN5YXBhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGdpZGFjX211dHVhbF9tYXgsIGdpZGFjX211dHVhbF9taW4sIGdpZGFjX211dHVhbF9hdmU7CisJaW50IGxpZGFjX211dHVhbF9tYXgsIGxpZGFjX211dHVhbF9taW4sIGxpZGFjX211dHVhbF9hdmU7CisJaW50IGdpZGFjX3NlbGZfcngsIGdpZGFjX3NlbGZfdHg7CisJaW50IGxpZGFjX3NlbGZfbWF4LCBsaWRhY19zZWxmX21pbiwgbGlkYWNfc2VsZl9hdmU7CisJaW50IHJhd19jYXBfbXV0dWFsX21heCwgcmF3X2NhcF9tdXR1YWxfbWluLCByYXdfY2FwX211dHVhbF9hdmU7CisJaW50IHJhd19jYXBfc2VsZl9tYXgsIHJhd19jYXBfc2VsZl9taW4sIHJhd19jYXBfc2VsZl9hdmU7CisJaW50IG11dHVhbF9kaWZmZGF0YV9tYXgsIG11dHVhbF9kaWZmZGF0YV9taW4sIG11dHVhbF9kaWZmZGF0YV9hdmU7CisJaW50IHNlbGZfZGlmZmRhdGFfbWF4LCBzZWxmX2RpZmZkYXRhX21pbiwgc2VsZl9kaWZmZGF0YV9hdmU7CisJaW50IG11dHVhbF9iYXNlbGluZV9tYXgsIG11dHVhbF9iYXNlbGluZV9taW4sIG11dHVhbF9iYXNlbGluZV9hdmU7CisJaW50IHNlbGZfYmFzZWxpbmVfbWF4LCBzZWxmX2Jhc2VsaW5lX21pbiwgc2VsZl9iYXNlbGluZV9hdmU7CisJaW50IGVycm9yLCByZXN1bWVfZXJyb3I7CisJaW50IHNpemU7CisKKwlpZiAoY3lhcGEtPnN0YXRlICE9IENZQVBBX1NUQVRFX0dFTjVfQVBQKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogMS4gU3VzcGVuZCBTY2FubmluZyovCisJZXJyb3IgPSBjeWFwYV9nZW41X3N1c3BlbmRfc2Nhbm5pbmcoY3lhcGEpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJLyogMi4gIFJlYWQgZ2xvYmFsIGFuZCBsb2NhbCBtdXR1YWwgSURBQyBkYXRhLiAqLworCWdpZGFjX3NlbGZfcnggPSBnaWRhY19zZWxmX3R4ID0gMDsKKwllcnJvciA9IGN5YXBhX2dlbjVfcmVhZF9tdXR1YWxfaWRhY19kYXRhKGN5YXBhLAorCQkJCSZnaWRhY19tdXR1YWxfbWF4LCAmZ2lkYWNfbXV0dWFsX21pbiwKKwkJCQkmZ2lkYWNfbXV0dWFsX2F2ZSwgJmxpZGFjX211dHVhbF9tYXgsCisJCQkJJmxpZGFjX211dHVhbF9taW4sICZsaWRhY19tdXR1YWxfYXZlKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gcmVzdW1lX3NjYW5uaW5nOworCisJLyogMy4gIFJlYWQgZ2xvYmFsIGFuZCBsb2NhbCBzZWxmIElEQUMgZGF0YS4gKi8KKwllcnJvciA9IGN5YXBhX2dlbjVfcmVhZF9zZWxmX2lkYWNfZGF0YShjeWFwYSwKKwkJCQkmZ2lkYWNfc2VsZl9yeCwgJmdpZGFjX3NlbGZfdHgsCisJCQkJJmxpZGFjX3NlbGZfbWF4LCAmbGlkYWNfc2VsZl9taW4sCisJCQkJJmxpZGFjX3NlbGZfYXZlKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gcmVzdW1lX3NjYW5uaW5nOworCisJLyogNC4gRXhlY3VhdGUgcGFuZWwgc2Nhbi4gSXQgbXVzdCBiZSBleGVjdXRlZCBiZWZvcmUgcmVhZCBkYXRhLiAqLworCWVycm9yID0gY3lhcGFfZ2VuNV9leGVjdXRlX3BhbmVsX3NjYW4oY3lhcGEpOworCWlmIChlcnJvcikKKwkJZ290byByZXN1bWVfc2Nhbm5pbmc7CisKKwkvKiA1LiBSZXRyaWV2ZSBwYW5lbCBzY2FuLCBtdXR1YWwgY2FwIHJhdyBkYXRhLiAqLworCWVycm9yID0gY3lhcGFfZ2VuNV9yZWFkX3BhbmVsX3NjYW5fcmF3X2RhdGEoY3lhcGEsCisJCQkJR0VONV9DTURfUkVUUklFVkVfUEFORUxfU0NBTiwKKwkJCQlHRU41X1BBTkVMX1NDQU5fTVVUVUFMX1JBV19EQVRBLAorCQkJCWN5YXBhLT5lbGVjdHJvZGVzX3ggKiBjeWFwYS0+ZWxlY3Ryb2Rlc195LAorCQkJCSZyYXdfY2FwX211dHVhbF9tYXgsICZyYXdfY2FwX211dHVhbF9taW4sCisJCQkJJnJhd19jYXBfbXV0dWFsX2F2ZSwKKwkJCQlOVUxMKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gcmVzdW1lX3NjYW5uaW5nOworCisJLyogNi4gUmV0cmlldmUgcGFuZWwgc2Nhbiwgc2VsZiBjYXAgcmF3IGRhdGEuICovCisJZXJyb3IgPSBjeWFwYV9nZW41X3JlYWRfcGFuZWxfc2Nhbl9yYXdfZGF0YShjeWFwYSwKKwkJCQlHRU41X0NNRF9SRVRSSUVWRV9QQU5FTF9TQ0FOLAorCQkJCUdFTjVfUEFORUxfU0NBTl9TRUxGX1JBV19EQVRBLAorCQkJCWN5YXBhLT5lbGVjdHJvZGVzX3ggKyBjeWFwYS0+ZWxlY3Ryb2Rlc195LAorCQkJCSZyYXdfY2FwX3NlbGZfbWF4LCAmcmF3X2NhcF9zZWxmX21pbiwKKwkJCQkmcmF3X2NhcF9zZWxmX2F2ZSwKKwkJCQlOVUxMKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gcmVzdW1lX3NjYW5uaW5nOworCisJLyogNy4gUmV0cmlldmUgcGFuZWwgc2NhbiwgbXV0dWFsIGNhcCBkaWZmY291bnQgcmF3IGRhdGEuICovCisJZXJyb3IgPSBjeWFwYV9nZW41X3JlYWRfcGFuZWxfc2Nhbl9yYXdfZGF0YShjeWFwYSwKKwkJCQlHRU41X0NNRF9SRVRSSUVWRV9QQU5FTF9TQ0FOLAorCQkJCUdFTjVfUEFORUxfU0NBTl9NVVRVQUxfRElGRkNPVU5ULAorCQkJCWN5YXBhLT5lbGVjdHJvZGVzX3ggKiBjeWFwYS0+ZWxlY3Ryb2Rlc195LAorCQkJCSZtdXR1YWxfZGlmZmRhdGFfbWF4LCAmbXV0dWFsX2RpZmZkYXRhX21pbiwKKwkJCQkmbXV0dWFsX2RpZmZkYXRhX2F2ZSwKKwkJCQlOVUxMKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gcmVzdW1lX3NjYW5uaW5nOworCisJLyogOC4gUmV0cmlldmUgcGFuZWwgc2Nhbiwgc2VsZiBjYXAgZGlmZmNvdW50IHJhdyBkYXRhLiAqLworCWVycm9yID0gY3lhcGFfZ2VuNV9yZWFkX3BhbmVsX3NjYW5fcmF3X2RhdGEoY3lhcGEsCisJCQkJR0VONV9DTURfUkVUUklFVkVfUEFORUxfU0NBTiwKKwkJCQlHRU41X1BBTkVMX1NDQU5fU0VMRl9ESUZGQ09VTlQsCisJCQkJY3lhcGEtPmVsZWN0cm9kZXNfeCArIGN5YXBhLT5lbGVjdHJvZGVzX3ksCisJCQkJJnNlbGZfZGlmZmRhdGFfbWF4LCAmc2VsZl9kaWZmZGF0YV9taW4sCisJCQkJJnNlbGZfZGlmZmRhdGFfYXZlLAorCQkJCU5VTEwpOworCWlmIChlcnJvcikKKwkJZ290byByZXN1bWVfc2Nhbm5pbmc7CisKKwkvKiA5LiBSZXRyaWV2ZSBwYW5lbCBzY2FuLCBtdXR1YWwgY2FwIGJhc2VsaW5lIHJhdyBkYXRhLiAqLworCWVycm9yID0gY3lhcGFfZ2VuNV9yZWFkX3BhbmVsX3NjYW5fcmF3X2RhdGEoY3lhcGEsCisJCQkJR0VONV9DTURfUkVUUklFVkVfUEFORUxfU0NBTiwKKwkJCQlHRU41X1BBTkVMX1NDQU5fTVVUVUFMX0JBU0VMSU5FLAorCQkJCWN5YXBhLT5lbGVjdHJvZGVzX3ggKiBjeWFwYS0+ZWxlY3Ryb2Rlc195LAorCQkJCSZtdXR1YWxfYmFzZWxpbmVfbWF4LCAmbXV0dWFsX2Jhc2VsaW5lX21pbiwKKwkJCQkmbXV0dWFsX2Jhc2VsaW5lX2F2ZSwKKwkJCQlOVUxMKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gcmVzdW1lX3NjYW5uaW5nOworCisJLyogMTAuIFJldHJpZXZlIHBhbmVsIHNjYW4sIHNlbGYgY2FwIGJhc2VsaW5lIHJhdyBkYXRhLiAqLworCWVycm9yID0gY3lhcGFfZ2VuNV9yZWFkX3BhbmVsX3NjYW5fcmF3X2RhdGEoY3lhcGEsCisJCQkJR0VONV9DTURfUkVUUklFVkVfUEFORUxfU0NBTiwKKwkJCQlHRU41X1BBTkVMX1NDQU5fU0VMRl9CQVNFTElORSwKKwkJCQljeWFwYS0+ZWxlY3Ryb2Rlc194ICsgY3lhcGEtPmVsZWN0cm9kZXNfeSwKKwkJCQkmc2VsZl9iYXNlbGluZV9tYXgsICZzZWxmX2Jhc2VsaW5lX21pbiwKKwkJCQkmc2VsZl9iYXNlbGluZV9hdmUsCisJCQkJTlVMTCk7CisJaWYgKGVycm9yKQorCQlnb3RvIHJlc3VtZV9zY2FubmluZzsKKworcmVzdW1lX3NjYW5uaW5nOgorCS8qIDExLiBSZXN1bWUgU2Nhbm5pbmcqLworCXJlc3VtZV9lcnJvciA9IGN5YXBhX2dlbjVfcmVzdW1lX3NjYW5uaW5nKGN5YXBhKTsKKwlpZiAocmVzdW1lX2Vycm9yIHx8IGVycm9yKQorCQlyZXR1cm4gcmVzdW1lX2Vycm9yID8gcmVzdW1lX2Vycm9yIDogZXJyb3I7CisKKwkvKiAxMi4gT3V0cHV0IGRhdGEgc3RyaW5ncyAqLworCXNpemUgPSBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAlZCAiLAorCQlnaWRhY19tdXR1YWxfbWluLCBnaWRhY19tdXR1YWxfbWF4LCBnaWRhY19tdXR1YWxfYXZlLAorCQlsaWRhY19tdXR1YWxfbWluLCBsaWRhY19tdXR1YWxfbWF4LCBsaWRhY19tdXR1YWxfYXZlLAorCQlnaWRhY19zZWxmX3J4LCBnaWRhY19zZWxmX3R4LAorCQlsaWRhY19zZWxmX21pbiwgbGlkYWNfc2VsZl9tYXgsIGxpZGFjX3NlbGZfYXZlKTsKKwlzaXplICs9IHNjbnByaW50ZihidWYgKyBzaXplLCBQQUdFX1NJWkUgLSBzaXplLAorCQkiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWRcbiIsCisJCXJhd19jYXBfbXV0dWFsX21pbiwgcmF3X2NhcF9tdXR1YWxfbWF4LCByYXdfY2FwX211dHVhbF9hdmUsCisJCXJhd19jYXBfc2VsZl9taW4sIHJhd19jYXBfc2VsZl9tYXgsIHJhd19jYXBfc2VsZl9hdmUsCisJCW11dHVhbF9kaWZmZGF0YV9taW4sIG11dHVhbF9kaWZmZGF0YV9tYXgsIG11dHVhbF9kaWZmZGF0YV9hdmUsCisJCXNlbGZfZGlmZmRhdGFfbWluLCBzZWxmX2RpZmZkYXRhX21heCwgc2VsZl9kaWZmZGF0YV9hdmUsCisJCW11dHVhbF9iYXNlbGluZV9taW4sIG11dHVhbF9iYXNlbGluZV9tYXgsIG11dHVhbF9iYXNlbGluZV9hdmUsCisJCXNlbGZfYmFzZWxpbmVfbWluLCBzZWxmX2Jhc2VsaW5lX21heCwgc2VsZl9iYXNlbGluZV9hdmUpOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgYm9vbCBjeWFwYV9nZW41X3NvcnRfc3lzdGVtX2luZm9fZGF0YShzdHJ1Y3QgY3lhcGEgKmN5YXBhLAorCQl1OCAqYnVmLCBpbnQgbGVuKQoreworCS8qIENoZWNrIHRoZSByZXBvcnQgaWQgYW5kIGNvbW1hbmQgY29kZSAqLworCWlmIChWQUxJRF9DTURfUkVTUF9IRUFERVIoYnVmLCAweDAyKSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZ2VuNV9ibF9xdWVyeV9kYXRhKHN0cnVjdCBjeWFwYSAqY3lhcGEpCit7CisJdTggYmxfcXVlcnlfZGF0YV9jbWRbXSA9IHsgMHgwNCwgMHgwMCwgMHgwYiwgMHgwMCwgMHg0MCwgMHgwMCwKKwkJMHgwMSwgMHgzYywgMHgwMCwgMHgwMCwgMHhiMCwgMHg0MiwgMHgxNworCX07CisJdTggcmVzcF9kYXRhW0dFTjVfQkxfUkVBRF9BUFBfSU5GT19SRVNQX0xFTl07CisJaW50IHJlc3BfbGVuOworCWludCBlcnJvcjsKKworCXJlc3BfbGVuID0gR0VONV9CTF9SRUFEX0FQUF9JTkZPX1JFU1BfTEVOOworCWVycm9yID0gY3lhcGFfaTJjX3BpcF9jbWRfaXJxX3N5bmMoY3lhcGEsCisJCQlibF9xdWVyeV9kYXRhX2NtZCwgc2l6ZW9mKGJsX3F1ZXJ5X2RhdGFfY21kKSwKKwkJCXJlc3BfZGF0YSwgJnJlc3BfbGVuLAorCQkJNTAwLCBjeWFwYV9nZW41X3NvcnRfdHNnX3BpcF9ibF9yZXNwX2RhdGEsIGZhbHNlKTsKKwlpZiAoZXJyb3IgfHwgcmVzcF9sZW4gIT0gR0VONV9CTF9SRUFEX0FQUF9JTkZPX1JFU1BfTEVOIHx8CisJCSFHRU41X0NNRF9DT01QTEVURV9TVUNDRVNTKHJlc3BfZGF0YVs1XSkpCisJCXJldHVybiBlcnJvciA/IGVycm9yIDogLUVJTzsKKworCW1lbWNweSgmY3lhcGEtPnByb2R1Y3RfaWRbMF0sICZyZXNwX2RhdGFbOF0sIDUpOworCWN5YXBhLT5wcm9kdWN0X2lkWzVdID0gJy0nOworCW1lbWNweSgmY3lhcGEtPnByb2R1Y3RfaWRbNl0sICZyZXNwX2RhdGFbMTNdLCA2KTsKKwljeWFwYS0+cHJvZHVjdF9pZFsxMl0gPSAnLSc7CisJbWVtY3B5KCZjeWFwYS0+cHJvZHVjdF9pZFsxM10sICZyZXNwX2RhdGFbMTldLCAyKTsKKwljeWFwYS0+cHJvZHVjdF9pZFsxNV0gPSAnXDAnOworCisJY3lhcGEtPmZ3X21hal92ZXIgPSByZXNwX2RhdGFbMjJdOworCWN5YXBhLT5md19taW5fdmVyID0gcmVzcF9kYXRhWzIzXTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN5YXBhX2dlbjVfZ2V0X3F1ZXJ5X2RhdGEoc3RydWN0IGN5YXBhICpjeWFwYSkKK3sKKwl1OCBnZXRfc3lzdGVtX2luZm9ybWF0aW9uW10gPSB7CisJCTB4MDQsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MmYsIDB4MDAsIDB4MDIKKwl9OworCXU4IHJlc3BfZGF0YVs3MV07CisJaW50IHJlc3BfbGVuOworCXUxNiBwcm9kdWN0X2ZhbWlseTsKKwlpbnQgZXJyb3I7CisKKwlyZXNwX2xlbiA9IHNpemVvZihyZXNwX2RhdGEpOworCWVycm9yID0gY3lhcGFfaTJjX3BpcF9jbWRfaXJxX3N5bmMoY3lhcGEsCisJCQlnZXRfc3lzdGVtX2luZm9ybWF0aW9uLCBzaXplb2YoZ2V0X3N5c3RlbV9pbmZvcm1hdGlvbiksCisJCQlyZXNwX2RhdGEsICZyZXNwX2xlbiwKKwkJCTIwMDAsIGN5YXBhX2dlbjVfc29ydF9zeXN0ZW1faW5mb19kYXRhLCBmYWxzZSk7CisJaWYgKGVycm9yIHx8IHJlc3BfbGVuIDwgc2l6ZW9mKHJlc3BfZGF0YSkpCisJCXJldHVybiBlcnJvciA/IGVycm9yIDogLUVJTzsKKworCXByb2R1Y3RfZmFtaWx5ID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZyZXNwX2RhdGFbN10pOworCWlmICgocHJvZHVjdF9mYW1pbHkgJiBHRU41X1BST0RVQ1RfRkFNSUxZX01BU0spICE9CisJCUdFTjVfUFJPRFVDVF9GQU1JTFlfVFJBQ0tQQUQpCisJCXJldHVybiAtRUlOVkFMOworCisJY3lhcGEtPmZ3X21hal92ZXIgPSByZXNwX2RhdGFbMTVdOworCWN5YXBhLT5md19taW5fdmVyID0gcmVzcF9kYXRhWzE2XTsKKworCWN5YXBhLT5lbGVjdHJvZGVzX3ggPSByZXNwX2RhdGFbNTJdOworCWN5YXBhLT5lbGVjdHJvZGVzX3kgPSByZXNwX2RhdGFbNTNdOworCisJY3lhcGEtPnBoeXNpY2FsX3NpemVfeCA9ICBnZXRfdW5hbGlnbmVkX2xlMTYoJnJlc3BfZGF0YVs1NF0pIC8gMTAwOworCWN5YXBhLT5waHlzaWNhbF9zaXplX3kgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJnJlc3BfZGF0YVs1Nl0pIC8gMTAwOworCisJY3lhcGEtPm1heF9hYnNfeCA9IGdldF91bmFsaWduZWRfbGUxNigmcmVzcF9kYXRhWzU4XSk7CisJY3lhcGEtPm1heF9hYnNfeSA9IGdldF91bmFsaWduZWRfbGUxNigmcmVzcF9kYXRhWzYwXSk7CisKKwljeWFwYS0+bWF4X3ogPSBnZXRfdW5hbGlnbmVkX2xlMTYoJnJlc3BfZGF0YVs2Ml0pOworCisJY3lhcGEtPnhfb3JpZ2luID0gcmVzcF9kYXRhWzY0XSAmIDB4MDE7CisJY3lhcGEtPnlfb3JpZ2luID0gcmVzcF9kYXRhWzY1XSAmIDB4MDE7CisKKwljeWFwYS0+YnRuX2NhcGFiaWxpdHkgPSAocmVzcF9kYXRhWzcwXSA8PCAzKSAmIENBUEFCSUxJVFlfQlROX01BU0s7CisKKwltZW1jcHkoJmN5YXBhLT5wcm9kdWN0X2lkWzBdLCAmcmVzcF9kYXRhWzMzXSwgNSk7CisJY3lhcGEtPnByb2R1Y3RfaWRbNV0gPSAnLSc7CisJbWVtY3B5KCZjeWFwYS0+cHJvZHVjdF9pZFs2XSwgJnJlc3BfZGF0YVszOF0sIDYpOworCWN5YXBhLT5wcm9kdWN0X2lkWzEyXSA9ICctJzsKKwltZW1jcHkoJmN5YXBhLT5wcm9kdWN0X2lkWzEzXSwgJnJlc3BfZGF0YVs0NF0sIDIpOworCWN5YXBhLT5wcm9kdWN0X2lkWzE1XSA9ICdcMCc7CisKKwlpZiAoIWN5YXBhLT5lbGVjdHJvZGVzX3ggfHwgIWN5YXBhLT5lbGVjdHJvZGVzX3kgfHwKKwkJIWN5YXBhLT5waHlzaWNhbF9zaXplX3ggfHwgIWN5YXBhLT5waHlzaWNhbF9zaXplX3kgfHwKKwkJIWN5YXBhLT5tYXhfYWJzX3ggfHwgIWN5YXBhLT5tYXhfYWJzX3kgfHwgIWN5YXBhLT5tYXhfeikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeWFwYV9nZW41X2RvX29wZXJhdGlvbmFsX2NoZWNrKHN0cnVjdCBjeWFwYSAqY3lhcGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmN5YXBhLT5jbGllbnQtPmRldjsKKwlpbnQgZXJyb3I7CisKKwlpZiAoY3lhcGEtPmdlbiAhPSBDWUFQQV9HRU41KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXN3aXRjaCAoY3lhcGEtPnN0YXRlKSB7CisJY2FzZSBDWUFQQV9TVEFURV9HRU41X0JMOgorCQllcnJvciA9IGN5YXBhX2dlbjVfYmxfZXhpdChjeWFwYSk7CisJCWlmIChlcnJvcikgeworCQkJLyogUnJ5IHRvIHVwZGF0ZSB0cmFja3BhZCBwcm9kdWN0IGluZm9ybWF0aW9uLiAqLworCQkJY3lhcGFfZ2VuNV9ibF9xdWVyeV9kYXRhKGN5YXBhKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJY3lhcGEtPnN0YXRlID0gQ1lBUEFfU1RBVEVfR0VONV9BUFA7CisKKwljYXNlIENZQVBBX1NUQVRFX0dFTjVfQVBQOgorCQkvKgorCQkgKiBJZiB0cmFja3BhZCBkZXZpY2UgaW4gZGVlcCBzbGVlcCBtb2RlLAorCQkgKiB0aGUgYXBwIGNvbW1hbmQgd2lsbCBmYWlsLgorCQkgKiBTbyBhbHdheXMgdHJ5IHRvIHJlc2V0IHRyYWNrcGFkIGRldmljZSB0byBmdWxsIGFjdGl2ZSB3aGVuCisJCSAqIHRoZSBkZXZpY2Ugc3RhdGUgaXMgcmVxdWVyaWVkLgorCQkgKi8KKwkJZXJyb3IgPSBjeWFwYV9nZW41X3NldF9wb3dlcl9tb2RlKGN5YXBhLAorCQkJCVBXUl9NT0RFX0ZVTExfQUNUSVZFLCAwKTsKKwkJaWYgKGVycm9yKQorCQkJZGV2X3dhcm4oZGV2LCAiJXM6IGZhaWxlZCB0byBzZXQgcG93ZXIgYWN0aXZlIG1vZGUuXG4iLAorCQkJCV9fZnVuY19fKTsKKworCQkvKiBHZXQgdHJhY2twYWQgcHJvZHVjdCBpbmZvcm1hdGlvbi4gKi8KKwkJZXJyb3IgPSBjeWFwYV9nZW41X2dldF9xdWVyeV9kYXRhKGN5YXBhKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBvdXQ7CisJCS8qIE9ubHkgc3VwcG9ydCBwcm9kdWN0IElEIHN0YXJ0aW5nIHdpdGggQ1lUUkEgKi8KKwkJaWYgKG1lbWNtcChjeWFwYS0+cHJvZHVjdF9pZCwgcHJvZHVjdF9pZCwKKwkJCQlzdHJsZW4ocHJvZHVjdF9pZCkpICE9IDApIHsKKwkJCWRldl9lcnIoZGV2LCAiJXM6IHVua25vd24gcHJvZHVjdCBJRCAoJXMpXG4iLAorCQkJCV9fZnVuY19fLCBjeWFwYS0+cHJvZHVjdF9pZCk7CisJCQllcnJvciA9IC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyb3IgPSAtRUlOVkFMOworCX0KKworb3V0OgorCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIFJldHVybiBmYWxzZSwgZG8gbm90IGNvbnRpbnVlIHByb2Nlc3MKKyAqIFJldHVybiB0cnVlLCBjb250aW51ZSBwcm9jZXNzLgorICovCitzdGF0aWMgYm9vbCBjeWFwYV9nZW41X2lycV9jbWRfaGFuZGxlcihzdHJ1Y3QgY3lhcGEgKmN5YXBhKQoreworCXN0cnVjdCBjeWFwYV9nZW41X2NtZF9zdGF0ZXMgKmdlbjVfcGlwID0gJmN5YXBhLT5jbWRfc3RhdGVzLmdlbjU7CisJaW50IGxlbmd0aDsKKworCWlmIChhdG9taWNfcmVhZCgmZ2VuNV9waXAtPmNtZF9pc3N1ZWQpKSB7CisJCS8qIFBvbGxpbmcgY29tbWFuZCByZXNwb25zZSBkYXRhLiAqLworCQlpZiAoZ2VuNV9waXAtPmlzX2lycV9tb2RlID09IGZhbHNlKQorCQkJcmV0dXJuIGZhbHNlOworCisJCS8qCisJCSAqIFJlYWQgb3V0IGFsbCBub25lIGNvbW1hbmQgcmVzcG9uc2UgZGF0YS4KKwkJICogdGhlc2Ugb3V0cHV0IGRhdGEgbWF5IGNhdXNlZCBieSB1c2VyIHB1dCBmaW5nZXIgb24KKwkJICogdHJhY2twYWQgd2hlbiBob3N0IHdhaXRpbmcgdGhlIGNvbW1hbmQgcmVzcG9uc2UuCisJCSAqLworCQljeWFwYV9pMmNfcGlwX3JlYWQoY3lhcGEsIGdlbjVfcGlwLT5pcnFfY21kX2J1ZiwKKwkJCUdFTjVfUkVTUF9MRU5HVEhfU0laRSk7CisJCWxlbmd0aCA9IGdldF91bmFsaWduZWRfbGUxNihnZW41X3BpcC0+aXJxX2NtZF9idWYpOworCQlsZW5ndGggPSAobGVuZ3RoIDw9IEdFTjVfUkVTUF9MRU5HVEhfU0laRSkgPworCQkJCUdFTjVfUkVTUF9MRU5HVEhfU0laRSA6IGxlbmd0aDsKKwkJaWYgKGxlbmd0aCA+IEdFTjVfUkVTUF9MRU5HVEhfU0laRSkKKwkJCWN5YXBhX2kyY19waXBfcmVhZChjeWFwYSwKKwkJCQlnZW41X3BpcC0+aXJxX2NtZF9idWYsIGxlbmd0aCk7CisKKwkJaWYgKCEoZ2VuNV9waXAtPnJlc3Bfc29ydF9mdW5jICYmCisJCQlnZW41X3BpcC0+cmVzcF9zb3J0X2Z1bmMoY3lhcGEsCisJCQkJZ2VuNV9waXAtPmlycV9jbWRfYnVmLCBsZW5ndGgpKSkgeworCQkJLyoKKwkJCSAqIENvdmVyIHRoZSBHZW41IFYxIGZpcm13YXJlIGlzc3VlLgorCQkJICogVGhlIGlzc3VlIGlzIHRoZXJlIGlzIG5vIGludGVycnV0IHdpbGwgYmUKKwkJCSAqIGFzc2VydGVkIHRvIG5vdGl0eWYgaG9zdCB0byByZWFkIGEgY29tbWFuZAorCQkJICogZGF0YSBvdXQgd2hlbiBhbHdheXMgaGFzIGZpbmdlciB0b3VjaCBvbgorCQkJICogdHJhY2twYWQgZHVyaW5nIHRoZSBjb21tYW5kIGlzIGlzc3VlZCB0bworCQkJICogdHJhY2thZCBkZXZpY2UuCisJCQkgKiBUaGlzIGlzc3VlIGhhcyB0aGUgc2NlbmFyaW8gaXMgdGhhdCwKKwkJCSAqIHVzZXIgYWx3YXlzIGhhcyBoaXMgZmluZ2VycyB0b3VjaGVkIG9uCisJCQkgKiB0cmFja3BhZCBkZXZpY2Ugd2hlbiBib290aW5nL3JlYm9vdGluZworCQkJICogdGhlaXIgY2hyb21lIGJvb2suCisJCQkgKi8KKwkJCWxlbmd0aCA9IDA7CisJCQlpZiAoZ2VuNV9waXAtPnJlc3BfbGVuKQorCQkJCWxlbmd0aCA9ICpnZW41X3BpcC0+cmVzcF9sZW47CisJCQljeWFwYV9lbXB0eV9waXBfb3V0cHV0X2RhdGEoY3lhcGEsCisJCQkJCWdlbjVfcGlwLT5yZXNwX2RhdGEsCisJCQkJCSZsZW5ndGgsCisJCQkJCWdlbjVfcGlwLT5yZXNwX3NvcnRfZnVuYyk7CisJCQlpZiAoZ2VuNV9waXAtPnJlc3BfbGVuICYmIGxlbmd0aCAhPSAwKSB7CisJCQkJKmdlbjVfcGlwLT5yZXNwX2xlbiA9IGxlbmd0aDsKKwkJCQlhdG9taWNfZGVjKCZnZW41X3BpcC0+Y21kX2lzc3VlZCk7CisJCQkJY29tcGxldGUoJmdlbjVfcGlwLT5jbWRfcmVhZHkpOworCQkJfQorCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJaWYgKGdlbjVfcGlwLT5yZXNwX2RhdGEgJiYgZ2VuNV9waXAtPnJlc3BfbGVuKSB7CisJCQkqZ2VuNV9waXAtPnJlc3BfbGVuID0gKCpnZW41X3BpcC0+cmVzcF9sZW4gPCBsZW5ndGgpID8KKwkJCQkqZ2VuNV9waXAtPnJlc3BfbGVuIDogbGVuZ3RoOworCQkJbWVtY3B5KGdlbjVfcGlwLT5yZXNwX2RhdGEsIGdlbjVfcGlwLT5pcnFfY21kX2J1ZiwKKwkJCQkqZ2VuNV9waXAtPnJlc3BfbGVuKTsKKwkJfQorCQlhdG9taWNfZGVjKCZnZW41X3BpcC0+Y21kX2lzc3VlZCk7CisJCWNvbXBsZXRlKCZnZW41X3BpcC0+Y21kX3JlYWR5KTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBjeWFwYV9nZW41X3JlcG9ydF9idXR0b25zKHN0cnVjdCBjeWFwYSAqY3lhcGEsCisJCWNvbnN0IHN0cnVjdCBjeWFwYV9nZW41X3JlcG9ydF9kYXRhICpyZXBvcnRfZGF0YSkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGN5YXBhLT5pbnB1dDsKKwl1OCBidXR0b25zID0gcmVwb3J0X2RhdGEtPnJlcG9ydF9oZWFkW0dFTjVfQlVUVE9OU19PRkZTRVRdOworCisJYnV0dG9ucyA9IChidXR0b25zIDw8IENBUEFCSUxJVFlfQlROX1NISUZUKSAmIENBUEFCSUxJVFlfQlROX01BU0s7CisKKwlpZiAoY3lhcGEtPmJ0bl9jYXBhYmlsaXR5ICYgQ0FQQUJJTElUWV9MRUZUX0JUTl9NQVNLKSB7CisJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIEJUTl9MRUZULAorCQkJISEoYnV0dG9ucyAmIENBUEFCSUxJVFlfTEVGVF9CVE5fTUFTSykpOworCX0KKwlpZiAoY3lhcGEtPmJ0bl9jYXBhYmlsaXR5ICYgQ0FQQUJJTElUWV9NSURETEVfQlROX01BU0spIHsKKwkJaW5wdXRfcmVwb3J0X2tleShpbnB1dCwgQlROX01JRERMRSwKKwkJCSEhKGJ1dHRvbnMgJiBDQVBBQklMSVRZX01JRERMRV9CVE5fTUFTSykpOworCX0KKwlpZiAoY3lhcGEtPmJ0bl9jYXBhYmlsaXR5ICYgQ0FQQUJJTElUWV9SSUdIVF9CVE5fTUFTSykgeworCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBCVE5fUklHSFQsCisJCQkhIShidXR0b25zICYgQ0FQQUJJTElUWV9SSUdIVF9CVE5fTUFTSykpOworCX0KKworCWlucHV0X3N5bmMoaW5wdXQpOworfQorCitzdGF0aWMgdm9pZCBjeWFwYV9nZW41X3JlcG9ydF9zbG90X2RhdGEoc3RydWN0IGN5YXBhICpjeWFwYSwKKwkJY29uc3Qgc3RydWN0IGN5YXBhX2dlbjVfdG91Y2hfcmVjb3JkICp0b3VjaCkKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGN5YXBhLT5pbnB1dDsKKwl1OCBldmVudF9pZCA9IEdFTjVfR0VUX0VWRU5UX0lEKHRvdWNoLT50b3VjaF90aXBfZXZlbnRfaWQpOworCWludCBzbG90ID0gR0VONV9HRVRfVE9VQ0hfSUQodG91Y2gtPnRvdWNoX3RpcF9ldmVudF9pZCk7CisJaW50IHgsIHk7CisKKwlpZiAoZXZlbnRfaWQgPT0gUkVDT1JEX0VWRU5UX0xJRlRPRkYpCisJCXJldHVybjsKKworCWlucHV0X210X3Nsb3QoaW5wdXQsIHNsb3QpOworCWlucHV0X210X3JlcG9ydF9zbG90X3N0YXRlKGlucHV0LCBNVF9UT09MX0ZJTkdFUiwgdHJ1ZSk7CisJeCA9ICh0b3VjaC0+eF9oaSA8PCA4KSB8IHRvdWNoLT54X2xvOworCWlmIChjeWFwYS0+eF9vcmlnaW4pCisJCXggPSBjeWFwYS0+bWF4X2Fic194IC0geDsKKwlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWCwgeCk7CisJeSA9ICh0b3VjaC0+eV9oaSA8PCA4KSB8IHRvdWNoLT55X2xvOworCWlmIChjeWFwYS0+eV9vcmlnaW4pCisJCXkgPSBjeWFwYS0+bWF4X2Fic195IC0geTsKKwlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfUE9TSVRJT05fWSwgeSk7CisJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1BSRVNTVVJFLAorCQl0b3VjaC0+eik7CisJaW5wdXRfcmVwb3J0X2FicyhpbnB1dCwgQUJTX01UX1RPVUNIX01BSk9SLAorCQl0b3VjaC0+bWFqb3JfYXhpc19sZW4pOworCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9UT1VDSF9NSU5PUiwKKwkJdG91Y2gtPm1pbm9yX2F4aXNfbGVuKTsKKworCWlucHV0X3JlcG9ydF9hYnMoaW5wdXQsIEFCU19NVF9XSURUSF9NQUpPUiwKKwkJdG91Y2gtPm1ham9yX3Rvb2xfbGVuKTsKKwlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfV0lEVEhfTUlOT1IsCisJCXRvdWNoLT5taW5vcl90b29sX2xlbik7CisKKwlpbnB1dF9yZXBvcnRfYWJzKGlucHV0LCBBQlNfTVRfT1JJRU5UQVRJT04sCisJCXRvdWNoLT5vcmllbnRhdGlvbik7Cit9CisKK3N0YXRpYyB2b2lkIGN5YXBhX2dlbjVfcmVwb3J0X3RvdWNoZXMoc3RydWN0IGN5YXBhICpjeWFwYSwKKwkJY29uc3Qgc3RydWN0IGN5YXBhX2dlbjVfcmVwb3J0X2RhdGEgKnJlcG9ydF9kYXRhKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0ID0gY3lhcGEtPmlucHV0OworCXVuc2lnbmVkIGludCB0b3VjaF9udW07CisJaW50IGk7CisKKwl0b3VjaF9udW0gPSByZXBvcnRfZGF0YS0+cmVwb3J0X2hlYWRbR0VONV9OVU1CRVJfT0ZfVE9VQ0hfT0ZGU0VUXSAmCisJCQlHRU41X05VTUJFUl9PRl9UT1VDSF9NQVNLOworCisJZm9yIChpID0gMDsgaSA8IHRvdWNoX251bTsgaSsrKQorCQljeWFwYV9nZW41X3JlcG9ydF9zbG90X2RhdGEoY3lhcGEsCisJCQkmcmVwb3J0X2RhdGEtPnRvdWNoX3JlY29yZHNbaV0pOworCisJaW5wdXRfbXRfc3luY19mcmFtZShpbnB1dCk7CisJaW5wdXRfc3luYyhpbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQgY3lhcGFfZ2VuNV9pcnFfaGFuZGxlcihzdHJ1Y3QgY3lhcGEgKmN5YXBhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjeWFwYS0+Y2xpZW50LT5kZXY7CisJc3RydWN0IGN5YXBhX2dlbjVfcmVwb3J0X2RhdGEgcmVwb3J0X2RhdGE7CisJaW50IHJldDsKKwl1OCByZXBvcnRfaWQ7CisJdW5zaWduZWQgaW50IHJlcG9ydF9sZW47CisKKwlpZiAoY3lhcGEtPmdlbiAhPSBDWUFQQV9HRU41IHx8CisJCWN5YXBhLT5zdGF0ZSAhPSBDWUFQQV9TVEFURV9HRU41X0FQUCkgeworCQlkZXZfZXJyKGRldiwgImludmFsaWQgZGV2aWNlIHN0YXRlLCBnZW49JWQsIHN0YXRlPTB4JTAyeFxuIiwKKwkJCWN5YXBhLT5nZW4sIGN5YXBhLT5zdGF0ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGN5YXBhX2kyY19waXBfcmVhZChjeWFwYSwgKHU4ICopJnJlcG9ydF9kYXRhLAorCQkJR0VONV9SRVNQX0xFTkdUSF9TSVpFKTsKKwlpZiAocmV0ICE9IEdFTjVfUkVTUF9MRU5HVEhfU0laRSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWFkIGxlbmd0aCBieXRlcywgKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmVwb3J0X2xlbiA9IGdldF91bmFsaWduZWRfbGUxNigKKwkJCSZyZXBvcnRfZGF0YS5yZXBvcnRfaGVhZFtHRU41X1JFU1BfTEVOR1RIX09GRlNFVF0pOworCWlmIChyZXBvcnRfbGVuIDwgR0VONV9SRVNQX0xFTkdUSF9TSVpFKSB7CisJCS8qIEludmxpYWQgbGVuZ3RoIG9yIGludGVybmFsIHJlc2V0IGhhcHBlbmVkLiAqLworCQlkZXZfZXJyKGRldiwgImludmFsaWQgcmVwb3J0X2xlbj0lZC4gYnl0ZXM6ICUwMnggJTAyeFxuIiwKKwkJCXJlcG9ydF9sZW4sIHJlcG9ydF9kYXRhLnJlcG9ydF9oZWFkWzBdLAorCQkJcmVwb3J0X2RhdGEucmVwb3J0X2hlYWRbMV0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBJZGxlLCBubyBkYXRhIGZvciByZXBvcnQuICovCisJaWYgKHJlcG9ydF9sZW4gPT0gR0VONV9SRVNQX0xFTkdUSF9TSVpFKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGN5YXBhX2kyY19waXBfcmVhZChjeWFwYSwgKHU4ICopJnJlcG9ydF9kYXRhLCByZXBvcnRfbGVuKTsKKwlpZiAocmV0ICE9IHJlcG9ydF9sZW4pIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gcmVhZCAlZCBieXRlcyByZXBvcnQgZGF0YSwgKCVkKVxuIiwKKwkJCXJlcG9ydF9sZW4sIHJldCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJlcG9ydF9pZCA9IHJlcG9ydF9kYXRhLnJlcG9ydF9oZWFkW0dFTjVfUkVTUF9SRVBPUlRfSURfT0ZGU0VUXTsKKwlpZiAocmVwb3J0X2lkID09IEdFTjVfV0FLRVVQX0VWRU5UX1JFUE9SVF9JRCAmJgorCQkJcmVwb3J0X2xlbiA9PSBHRU41X1dBS0VVUF9FVkVOVF9TSVpFKSB7CisJCS8qCisJCSAqIERldmljZSB3YWtlIGV2ZW50IGZyb20gZGVlcCBzbGVlcCBtb2RlIGZvciB0b3VjaC4KKwkJICogVGhpcyBpbnRlcnJ1cHQgZXZlbnQgaXMgdXNlZCB0byB3YWtlIHN5c3RlbSB1cC4KKwkJICovCisJCXJldHVybiAwOworCX0gZWxzZSBpZiAocmVwb3J0X2lkICE9IEdFTjVfVE9VQ0hfUkVQT1JUX0lEICYmCisJCQlyZXBvcnRfaWQgIT0gR0VONV9CVE5fUkVQT1JUX0lEICYmCisJCQlyZXBvcnRfaWQgIT0gR0VONV9PTERfUFVTSF9CVE5fUkVQT1JUX0lEICYmCisJCQlyZXBvcnRfaWQgIT0gR0VONV9QVVNIX0JUTl9SRVBPUlRfSUQpIHsKKwkJLyogUnVubmluZyBpbiBCTCBtb2RlIG9yIHVua25vd24gcmVzcG9uc2UgZGF0YSByZWFkLiAqLworCQlkZXZfZXJyKGRldiwgImludmFsaWQgcmVwb3J0X2lkPTB4JTAyeFxuIiwgcmVwb3J0X2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHJlcG9ydF9pZCA9PSBHRU41X1RPVUNIX1JFUE9SVF9JRCAmJgorCQkocmVwb3J0X2xlbiA8IEdFTjVfVE9VQ0hfUkVQT1JUX0hFQURfU0laRSB8fAorCQkJcmVwb3J0X2xlbiA+IEdFTjVfVE9VQ0hfUkVQT1JUX01BWF9TSVpFKSkgeworCQkvKiBJbnZhbGlkIHJlcG9ydCBkYXRhIGxlbmd0aCBmb3IgZmluZ2VyIHBhY2tldC4gKi8KKwkJZGV2X2VycihkZXYsICJpbnZhbGlkIHRvdWNoIHBhY2tldCBsZW5ndGg9JWRcbiIsIHJlcG9ydF9sZW4pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKHJlcG9ydF9pZCA9PSBHRU41X0JUTl9SRVBPUlRfSUQgfHwKKwkJCXJlcG9ydF9pZCA9PSBHRU41X09MRF9QVVNIX0JUTl9SRVBPUlRfSUQgfHwKKwkJCXJlcG9ydF9pZCA9PSBHRU41X1BVU0hfQlROX1JFUE9SVF9JRCkgJiYKKwkJKHJlcG9ydF9sZW4gPCBHRU41X0JUTl9SRVBPUlRfSEVBRF9TSVpFIHx8CisJCQlyZXBvcnRfbGVuID4gR0VONV9CVE5fUkVQT1JUX01BWF9TSVpFKSkgeworCQkvKiBJbnZhbGlkIHJlcG9ydCBkYXRhIGxlbmd0aCBvZiBidXR0b24gcGFja2V0LiAqLworCQlkZXZfZXJyKGRldiwgImludmFsaWQgYnV0dG9uIHBhY2tldCBsZW5ndGg9JWRcbiIsIHJlcG9ydF9sZW4pOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocmVwb3J0X2lkID09IEdFTjVfVE9VQ0hfUkVQT1JUX0lEKQorCQljeWFwYV9nZW41X3JlcG9ydF90b3VjaGVzKGN5YXBhLCAmcmVwb3J0X2RhdGEpOworCWVsc2UKKwkJY3lhcGFfZ2VuNV9yZXBvcnRfYnV0dG9ucyhjeWFwYSwgJnJlcG9ydF9kYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN5YXBhX2dlbjVfYmxfYWN0aXZhdGUoc3RydWN0IGN5YXBhICpjeWFwYSkgeyByZXR1cm4gMDsgfQorc3RhdGljIGludCBjeWFwYV9nZW41X2JsX2RlYWN0aXZhdGUoc3RydWN0IGN5YXBhICpjeWFwYSkgeyByZXR1cm4gMDsgfQorCitjb25zdCBzdHJ1Y3QgY3lhcGFfZGV2X29wcyBjeWFwYV9nZW41X29wcyA9IHsKKwkuY2hlY2tfZncgPSBjeWFwYV9nZW41X2NoZWNrX2Z3LAorCS5ibF9lbnRlciA9IGN5YXBhX2dlbjVfYmxfZW50ZXIsCisJLmJsX2luaXRpYXRlID0gY3lhcGFfZ2VuNV9ibF9pbml0aWF0ZSwKKwkudXBkYXRlX2Z3ID0gY3lhcGFfZ2VuNV9kb19md191cGRhdGUsCisJLmJsX2FjdGl2YXRlID0gY3lhcGFfZ2VuNV9ibF9hY3RpdmF0ZSwKKwkuYmxfZGVhY3RpdmF0ZSA9IGN5YXBhX2dlbjVfYmxfZGVhY3RpdmF0ZSwKKworCS5zaG93X2Jhc2VsaW5lID0gY3lhcGFfZ2VuNV9zaG93X2Jhc2VsaW5lLAorCS5jYWxpYnJhdGVfc3RvcmUgPSBjeWFwYV9nZW41X2RvX2NhbGlicmF0ZSwKKworCS5pbml0aWFsaXplID0gY3lhcGFfZ2VuNV9pbml0aWFsaXplLAorCisJLnN0YXRlX3BhcnNlID0gY3lhcGFfZ2VuNV9zdGF0ZV9wYXJzZSwKKwkub3BlcmF0aW9uYWxfY2hlY2sgPSBjeWFwYV9nZW41X2RvX29wZXJhdGlvbmFsX2NoZWNrLAorCisJLmlycV9oYW5kbGVyID0gY3lhcGFfZ2VuNV9pcnFfaGFuZGxlciwKKwkuaXJxX2NtZF9oYW5kbGVyID0gY3lhcGFfZ2VuNV9pcnFfY21kX2hhbmRsZXIsCisJLnNvcnRfZW1wdHlfb3V0cHV0X2RhdGEgPSBjeWFwYV9lbXB0eV9waXBfb3V0cHV0X2RhdGEsCisJLnNldF9wb3dlcl9tb2RlID0gY3lhcGFfZ2VuNV9zZXRfcG93ZXJfbW9kZSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2N5cHJlc3NfcHMyLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2N5cHJlc3NfcHMyLmMKaW5kZXggOGFmMzRmZi4uOTExOGExOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9jeXByZXNzX3BzMi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvY3lwcmVzc19wczIuYwpAQCAtNTM4LDcgKzUzOCw3IEBACiAJCXBvc1tpXS55ID0gY29udGFjdC0+eTsKIAl9CiAKLQlpbnB1dF9tdF9hc3NpZ25fc2xvdHMoaW5wdXQsIHNsb3RzLCBwb3MsIG4pOworCWlucHV0X210X2Fzc2lnbl9zbG90cyhpbnB1dCwgc2xvdHMsIHBvcywgbiwgMCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAJCWNvbnRhY3QgPSAmcmVwb3J0X2RhdGEuY29udGFjdHNbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW5faTJjLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW5faTJjLmgKaW5kZXggMmU4Mzg2Mi4uZTEwMGMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFuX2kyYy5oCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbl9pMmMuaApAQCAtNCw3ICs0LDYgQEAKICAqIENvcHlyaWdodCAoYykgMjAxMyBFTEFOIE1pY3JvZWxlY3Ryb25pY3MgQ29ycC4KICAqCiAgKiBBdXRob3I6IOael+aUv+e2rSAoRHVzb24gTGluKSA8ZHVzb25saW5AZW1jLmNvbS50dz4KLSAqIFZlcnNpb246IDEuNS41CiAgKgogICogQmFzZWQgb24gY3lhcGEgZHJpdmVyOgogICogY29weXJpZ2h0IChjKSAyMDExLTIwMTIgQ3lwcmVzcyBTZW1pY29uZHVjdG9yLCBJbmMuCkBAIC0zMyw4ICszMiw5IEBACiAjZGVmaW5lIEVUUF9GV19JQVBfUEFHRV9FUlIJKDEgPDwgNSkKICNkZWZpbmUgRVRQX0ZXX0lBUF9JTlRGX0VSUgkoMSA8PCA0KQogI2RlZmluZSBFVFBfRldfUEFHRV9TSVpFCTY0Ci0jZGVmaW5lIEVUUF9GV19QQUdFX0NPVU5UCTc2OAotI2RlZmluZSBFVFBfRldfU0laRQkJKEVUUF9GV19QQUdFX1NJWkUgKiBFVFBfRldfUEFHRV9DT1VOVCkKKyNkZWZpbmUgRVRQX0ZXX1ZBSUxEUEFHRV9DT1VOVAk3NjgKKyNkZWZpbmUgRVRQX0ZXX1NJR05BVFVSRV9TSVpFCTYKKyNkZWZpbmUgRVRQX0ZXX1NJR05BVFVSRV9BRERSRVNTCTB4QkZGQQogCiBzdHJ1Y3QgaTJjX2NsaWVudDsKIHN0cnVjdCBjb21wbGV0aW9uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFuX2kyY19jb3JlLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW5faTJjX2NvcmUuYwppbmRleCAwY2IyYmU0Li43Y2U4YmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW5faTJjX2NvcmUuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW5faTJjX2NvcmUuYwpAQCAtNCw3ICs0LDcgQEAKICAqIENvcHlyaWdodCAoYykgMjAxMyBFTEFOIE1pY3JvZWxlY3Ryb25pY3MgQ29ycC4KICAqCiAgKiBBdXRob3I6IOael+aUv+e2rSAoRHVzb24gTGluKSA8ZHVzb25saW5AZW1jLmNvbS50dz4KLSAqIFZlcnNpb246IDEuNS41CisgKiBWZXJzaW9uOiAxLjUuNgogICoKICAqIEJhc2VkIG9uIGN5YXBhIGRyaXZlcjoKICAqIGNvcHlyaWdodCAoYykgMjAxMS0yMDEyIEN5cHJlc3MgU2VtaWNvbmR1Y3RvciwgSW5jLgpAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUgImVsYW5faTJjLmgiCiAKICNkZWZpbmUgRFJJVkVSX05BTUUJCSJlbGFuX2kyYyIKLSNkZWZpbmUgRUxBTl9EUklWRVJfVkVSU0lPTgkiMS41LjUiCisjZGVmaW5lIEVMQU5fRFJJVkVSX1ZFUlNJT04JIjEuNS42IgogI2RlZmluZSBFVFBfUFJFU1NVUkVfT0ZGU0VUCTI1CiAjZGVmaW5lIEVUUF9NQVhfUFJFU1NVUkUJMjU1CiAjZGVmaW5lIEVUUF9GV0lEVEhfUkVEVUNFCTkwCkBAIC0zMTIsNyArMzEyLDcgQEAKIAlpYXBfc3RhcnRfYWRkciA9IGdldF91bmFsaWduZWRfbGUxNigmZnctPmRhdGFbRVRQX0lBUF9TVEFSVF9BRERSICogMl0pOwogCiAJYm9vdF9wYWdlX2NvdW50ID0gKGlhcF9zdGFydF9hZGRyICogMikgLyBFVFBfRldfUEFHRV9TSVpFOwotCWZvciAoaSA9IGJvb3RfcGFnZV9jb3VudDsgaSA8IEVUUF9GV19QQUdFX0NPVU5UOyBpKyspIHsKKwlmb3IgKGkgPSBib290X3BhZ2VfY291bnQ7IGkgPCBFVFBfRldfVkFJTERQQUdFX0NPVU5UOyBpKyspIHsKIAkJdTE2IGNoZWNrc3VtID0gMDsKIAkJY29uc3QgdTggKnBhZ2UgPSAmZnctPmRhdGFbaSAqIEVUUF9GV19QQUdFX1NJWkVdOwogCkBAIC00MzQsMTAgKzQzNCwxMSBAQAogCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgZWxhbl90cF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGVsYW5fdHBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAJaW50IGVycm9yOworCWNvbnN0IHU4ICpmd19zaWduYXR1cmU7CisJc3RhdGljIGNvbnN0IHU4IHNpZ25hdHVyZVtdID0gezB4QUEsIDB4NTUsIDB4Q0MsIDB4MzMsIDB4RkYsIDB4RkZ9OwogCiAJZXJyb3IgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgRVRQX0ZXX05BTUUsIGRldik7CiAJaWYgKGVycm9yKSB7CkBAIC00NDYsMTAgKzQ0NywxMiBAQAogCQlyZXR1cm4gZXJyb3I7CiAJfQogCi0JLyogRmlybXdhcmUgbXVzdCBiZSBleGFjdGx5IFBBR0VfTlVNICogUEFHRV9TSVpFIGJ5dGVzICovCi0JaWYgKGZ3LT5zaXplICE9IEVUUF9GV19TSVpFKSB7Ci0JCWRldl9lcnIoZGV2LCAiaW52YWxpZCBmaXJtd2FyZSBzaXplID0gJXp1LCBleHBlY3RlZCAlZC5cbiIsCi0JCQlmdy0+c2l6ZSwgRVRQX0ZXX1NJWkUpOworCS8qIEZpcm13YXJlIGZpbGUgbXVzdCBtYXRjaCBzaWduYXR1cmUgZGF0YSAqLworCWZ3X3NpZ25hdHVyZSA9ICZmdy0+ZGF0YVtFVFBfRldfU0lHTkFUVVJFX0FERFJFU1NdOworCWlmIChtZW1jbXAoZndfc2lnbmF0dXJlLCBzaWduYXR1cmUsIHNpemVvZihzaWduYXR1cmUpKSAhPSAwKSB7CisJCWRldl9lcnIoZGV2LCAic2lnbmF0dXJlIG1pc21hdGNoIChleHBlY3RlZCAlKnBoLCBnb3QgJSpwaClcbiIsCisJCQkoaW50KXNpemVvZihzaWduYXR1cmUpLCBzaWduYXR1cmUsCisJCQkoaW50KXNpemVvZihzaWduYXR1cmUpLCBmd19zaWduYXR1cmUpOwogCQllcnJvciA9IC1FQkFERjsKIAkJZ290byBvdXRfcmVsZWFzZV9mdzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW5faTJjX2kyYy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFuX2kyY19pMmMuYwppbmRleCA5N2Q0OTM3Li4wMjk5NDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW5faTJjX2kyYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbl9pMmNfaTJjLmMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMTMgRUxBTiBNaWNyb2VsZWN0cm9uaWNzIENvcnAuCiAgKgogICogQXV0aG9yOiDmnpfmlL/ntq0gKER1c29uIExpbikgPGR1c29ubGluQGVtYy5jb20udHc+Ci0gKiBWZXJzaW9uOiAxLjUuNQogICoKICAqIEJhc2VkIG9uIGN5YXBhIGRyaXZlcjoKICAqIGNvcHlyaWdodCAoYykgMjAxMS0yMDEyIEN5cHJlc3MgU2VtaWNvbmR1Y3RvciwgSW5jLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFuX2kyY19zbWJ1cy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFuX2kyY19zbWJ1cy5jCmluZGV4IDM1OWJmODUuLjA2YTJiY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbl9pMmNfc21idXMuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW5faTJjX3NtYnVzLmMKQEAgLTQsNyArNCw2IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMTMgRUxBTiBNaWNyb2VsZWN0cm9uaWNzIENvcnAuCiAgKgogICogQXV0aG9yOiDmnpfmlL/ntq0gKER1c29uIExpbikgPGR1c29ubGluQGVtYy5jb20udHc+Ci0gKiBWZXJzaW9uOiAxLjUuNQogICoKICAqIEJhc2VkIG9uIGN5YXBhIGRyaXZlcjoKICAqIGNvcHlyaWdodCAoYykgMjAxMS0yMDEyIEN5cHJlc3MgU2VtaWNvbmR1Y3RvciwgSW5jLgpAQCAtNzEsNyArNzAsNyBAQAogCiAJLyogY29tcGFyZSBoZWxsbyBwYWNrZXQgKi8KIAlpZiAobWVtY21wKHZhbHVlcywgY2hlY2ssIEVUUF9TTUJVU19IRUxMT1BBQ0tFVF9MRU4pKSB7Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiaGVsbG8gcGFja2V0IGZhaWwgWyUqcHhdXG4iLAorCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImhlbGxvIHBhY2tldCBmYWlsIFslKnBoXVxuIiwKIAkJCUVUUF9TTUJVU19IRUxMT1BBQ0tFVF9MRU4sIHZhbHVlcyk7CiAJCXJldHVybiAtRU5YSU87CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFudGVjaC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9lbGFudGVjaC5jCmluZGV4IDc3ZWNmNmQuLjZlMjI2ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZWxhbnRlY2guYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2VsYW50ZWNoLmMKQEAgLTEwOTcsNiArMTA5Nyw4IEBACiAgKiBBc3VzIFVYMzEgICAgICAgICAgICAgICAweDM2MWYwMCAgICAgICAgMjAsIDE1LCAwZSAgICAgIGNsaWNrcGFkCiAgKiBBc3VzIFVYMzJWRCAgICAgICAgICAgICAweDM2MWYwMiAgICAgICAgMDAsIDE1LCAwZSAgICAgIGNsaWNrcGFkCiAgKiBBdmF0YXIgQVZJVS0xNDVBMiAgICAgICAweDM2MWYwMCAgICAgICAgPyAgICAgICAgICAgICAgIGNsaWNrcGFkCisgKiBGdWppdHN1IExJRkVCT09LIEU1NDQgICAweDQ3MGYwMCAgICAgICAgZDAsIDEyLCAwOSAgICAgIDIgaHcgYnV0dG9ucworICogRnVqaXRzdSBMSUZFQk9PSyBFNTU0ICAgMHg1NzBmMDEgICAgICAgIDQwLCAxNCwgMGMgICAgICAyIGh3IGJ1dHRvbnMKICAqIEZ1aml0c3UgSDczMCAgICAgICAgICAgIDB4NTcwZjAwICAgICAgICBjMCwgMTQsIDBjICAgICAgMyBodyBidXR0b25zICgqKikKICAqIEdpZ2FieXRlIFUyNDQyICAgICAgICAgIDB4NDUwZjAxICAgICAgICA1OCwgMTcsIDBjICAgICAgMiBodyBidXR0b25zCiAgKiBMZW5vdm8gTDQzMCAgICAgICAgICAgICAweDM1MGYwMiAgICAgICAgYjksIDE1LCAwYyAgICAgIDIgaHcgYnV0dG9ucyAoKikKQEAgLTE0NzUsNiArMTQ3NywyMCBAQAogCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJDRUxTSVVTIEg3MzAiKSwKIAkJfSwKIAl9LAorCXsKKwkJLyogRnVqaXRzdSBMSUZFQk9PSyBFNTU0ICBkb2VzIG5vdCB3b3JrIHdpdGggY3JjX2VuYWJsZWQgPT0gMCAqLworCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkZVSklUU1UiKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTElGRUJPT0sgRTU1NCIpLAorCQl9LAorCX0sCisJeworCQkvKiBGdWppdHN1IExJRkVCT09LIEU1NDQgIGRvZXMgbm90IHdvcmsgd2l0aCBjcmNfZW5hYmxlZCA9PSAwICovCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiRlVKSVRTVSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJMSUZFQk9PSyBFNTQ0IiksCisJCX0sCisJfSwKICNlbmRpZgogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZm9jYWx0ZWNoLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2ZvY2FsdGVjaC5jCmluZGV4IGY0ZDY1N2UuLmZjYTM4YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZm9jYWx0ZWNoLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9mb2NhbHRlY2guYwpAQCAtMiw2ICsyLDcgQEAKICAqIEZvY2FsdGVjaCBUb3VjaFBhZCBQUy8yIG1vdXNlIGRyaXZlcgogICoKICAqIENvcHlyaWdodCAoYykgMjAxNCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxNCBNYXRoaWFzIEdvdHRzY2hsYWcgPG1nb3R0c2NobGFnQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTEzLDE1ICsxNCwxNCBAQAogICogSGFucyBkZSBHb2VkZSA8aGRlZ29lZGVAcmVkaGF0LmNvbT4KICAqLwogCi0vKgotICogVGhlIEZvY2FsdGVjaCBQUy8yIHRvdWNocGFkIHByb3RvY29sIGlzIHVua25vd24uIFRoaXMgZHJpdmVycyBkZWFscyB3aXRoCi0gKiBkZXRlY3Rpb24gb25seSwgdG8gYXZvaWQgZnVydGhlciBkZXRlY3Rpb24gYXR0ZW1wdHMgY29uZnVzaW5nIHRoZSB0b3VjaHBhZAotICogdGhpcyB3YXkgaXQgYXQgbGVhc3Qgd29ya3MgaW4gUFMvMiBtb3VzZSBjb21wYXRpYmlsaXR5IG1vZGUuCi0gKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpYnBzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L210Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSAicHNtb3VzZS5oIgorI2luY2x1ZGUgImZvY2FsdGVjaC5oIgogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZvY2FsdGVjaF9wbnBfaWRzW10gPSB7CiAJIkZMVDAxMDEiLApAQCAtMzAsNiArMzAsMTIgQEAKIAlOVUxMCiB9OwogCisvKgorICogRXZlbiBpZiB0aGUga2VybmVsIGlzIGJ1aWx0IHdpdGhvdXQgc3VwcG9ydCBmb3IgRm9jYWx0ZWNoIFBTLzIgdG91Y2hwYWRzIChvcgorICogd2hlbiB0aGUgcmVhbCBkcml2ZXIgZmFpbHMgdG8gcmVjb2duaXplIHRoZSBkZXZpY2UpLCB3ZSBzdGlsbCBoYXZlIHRvIGRldGVjdAorICogdGhlbSBpbiBvcmRlciB0byBhdm9pZCBmdXJ0aGVyIGRldGVjdGlvbiBhdHRlbXB0cyBjb25mdXNpbmcgdGhlIHRvdWNocGFkLgorICogVGhpcyB3YXkgaXQgYXQgbGVhc3Qgd29ya3MgaW4gUFMvMiBtb3VzZSBjb21wYXRpYmlsaXR5IG1vZGUuCisgKi8KIGludCBmb2NhbHRlY2hfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBib29sIHNldF9wcm9wZXJ0aWVzKQogewogCWlmICghcHNtb3VzZV9tYXRjaGVzX3BucF9pZChwc21vdXNlLCBmb2NhbHRlY2hfcG5wX2lkcykpCkBAIC0zNywxNiArNDMsNDA0IEBACiAKIAlpZiAoc2V0X3Byb3BlcnRpZXMpIHsKIAkJcHNtb3VzZS0+dmVuZG9yID0gIkZvY2FsVGVjaCI7Ci0JCXBzbW91c2UtPm5hbWUgPSAiRm9jYWxUZWNoIFRvdWNocGFkIGluIG1vdXNlIGVtdWxhdGlvbiBtb2RlIjsKKwkJcHNtb3VzZS0+bmFtZSA9ICJGb2NhbFRlY2ggVG91Y2hwYWQiOwogCX0KIAogCXJldHVybiAwOwogfQogCi1pbnQgZm9jYWx0ZWNoX2luaXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCitzdGF0aWMgdm9pZCBmb2NhbHRlY2hfcmVzZXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCiB7CiAJcHMyX2NvbW1hbmQoJnBzbW91c2UtPnBzMmRldiwgTlVMTCwgUFNNT1VTRV9DTURfUkVTRVRfRElTKTsKIAlwc21vdXNlX3Jlc2V0KHBzbW91c2UpOworfQorCisjaWZkZWYgQ09ORklHX01PVVNFX1BTMl9GT0NBTFRFQ0gKKworLyoKKyAqIFBhY2tldCB0eXBlcyAtIHRoZSBudW1iZXJzIGFyZSBub3QgY29uc2VjdXRpdmUsIHNvIHdlIG1pZ2h0IGJlIG1pc3NpbmcKKyAqIHNvbWV0aGluZyBoZXJlLgorICovCisjZGVmaW5lIEZPQ19UT1VDSCAweDMgLyogYml0bWFwIG9mIGFjdGl2ZSBmaW5nZXJzICovCisjZGVmaW5lIEZPQ19BQlMgMHg2IC8qIGFic29sdXRlIHBvc2l0aW9uIG9mIG9uZSBmaW5nZXIgKi8KKyNkZWZpbmUgRk9DX1JFTCAweDkgLyogcmVsYXRpdmUgcG9zaXRpb24gb2YgMS0yIGZpbmdlcnMgKi8KKworI2RlZmluZSBGT0NfTUFYX0ZJTkdFUlMgNQorCisjZGVmaW5lIEZPQ19NQVhfWCAyNDMxCisjZGVmaW5lIEZPQ19NQVhfWSAxNjYzCisKKy8qCisgKiBDdXJyZW50IHN0YXRlIG9mIGEgc2luZ2xlIGZpbmdlciBvbiB0aGUgdG91Y2hwYWQuCisgKi8KK3N0cnVjdCBmb2NhbHRlY2hfZmluZ2VyX3N0YXRlIHsKKwkvKiBUaGUgdG91Y2hwYWQgaGFzIGdlbmVyYXRlZCBhIHRvdWNoIGV2ZW50IGZvciB0aGUgZmluZ2VyICovCisJYm9vbCBhY3RpdmU7CisKKwkvKgorCSAqIFRoZSB0b3VjaHBhZCBoYXMgc2VudCBwb3NpdGlvbiBkYXRhIGZvciB0aGUgZmluZ2VyLiBUaGUKKwkgKiBmbGFnIGlzIDAgd2hlbiB0aGUgZmluZ2VyIGlzIG5vdCBhY3RpdmUsIGFuZCB0aGVyZSBpcyBhCisJICogdGltZSBiZXR3ZWVuIHRoZSBmaXJzdCB0b3VjaCBldmVudCBmb3IgdGhlIGZpbmdlciBhbmQgdGhlCisJICogZm9sbG93aW5nIGFic29sdXRlIHBvc2l0aW9uIHBhY2tldCBmb3IgdGhlIGZpbmdlciB3aGVyZSB0aGUKKwkgKiB0b3VjaHBhZCBoYXMgZGVjbGFyZWQgdGhlIGZpbmdlciB0byBiZSB2YWxpZCwgYnV0IHdlIGRvIG5vdAorCSAqIGhhdmUgYW55IHZhbGlkIHBvc2l0aW9uIHlldC4KKwkgKi8KKwlib29sIHZhbGlkOworCisJLyoKKwkgKiBBYnNvbHV0ZSBwb3NpdGlvbiAoZnJvbSB0aGUgYm90dG9tIGxlZnQgY29ybmVyKSBvZiB0aGUKKwkgKiBmaW5nZXIuCisJICovCisJdW5zaWduZWQgaW50IHg7CisJdW5zaWduZWQgaW50IHk7Cit9OworCisvKgorICogRGVzY3JpcHRpb24gb2YgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHRvdWNocGFkIGhhcmR3YXJlLgorICovCitzdHJ1Y3QgZm9jYWx0ZWNoX2h3X3N0YXRlIHsKKwkvKgorCSAqIFRoZSB0b3VjaHBhZCB0cmFja3MgdGhlIHBvc2l0aW9ucyBvZiB0aGUgZmluZ2VycyBmb3IgdXMsCisJICogdGhlIGFycmF5IGluZGljZXMgY29ycmVzcG9uZCB0byB0aGUgZmluZ2VyIGluZGljZXMgcmV0dXJuZWQKKwkgKiBpbiB0aGUgcmVwb3J0IHBhY2thZ2VzLgorCSAqLworCXN0cnVjdCBmb2NhbHRlY2hfZmluZ2VyX3N0YXRlIGZpbmdlcnNbRk9DX01BWF9GSU5HRVJTXTsKKworCS8qIFRydWUgaWYgdGhlIGNsaWNrcGFkIGhhcyBiZWVuIHByZXNzZWQuICovCisJYm9vbCBwcmVzc2VkOworfTsKKworc3RydWN0IGZvY2FsdGVjaF9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgeF9tYXgsIHlfbWF4OworCXN0cnVjdCBmb2NhbHRlY2hfaHdfc3RhdGUgc3RhdGU7Cit9OworCitzdGF0aWMgdm9pZCBmb2NhbHRlY2hfcmVwb3J0X3N0YXRlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBmb2NhbHRlY2hfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisJc3RydWN0IGZvY2FsdGVjaF9od19zdGF0ZSAqc3RhdGUgPSAmcHJpdi0+c3RhdGU7CisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gcHNtb3VzZS0+ZGV2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEZPQ19NQVhfRklOR0VSUzsgaSsrKSB7CisJCXN0cnVjdCBmb2NhbHRlY2hfZmluZ2VyX3N0YXRlICpmaW5nZXIgPSAmc3RhdGUtPmZpbmdlcnNbaV07CisJCWJvb2wgYWN0aXZlID0gZmluZ2VyLT5hY3RpdmUgJiYgZmluZ2VyLT52YWxpZDsKKworCQlpbnB1dF9tdF9zbG90KGRldiwgaSk7CisJCWlucHV0X210X3JlcG9ydF9zbG90X3N0YXRlKGRldiwgTVRfVE9PTF9GSU5HRVIsIGFjdGl2ZSk7CisJCWlmIChhY3RpdmUpIHsKKwkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfTVRfUE9TSVRJT05fWCwgZmluZ2VyLT54KTsKKwkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfTVRfUE9TSVRJT05fWSwKKwkJCQkJIEZPQ19NQVhfWSAtIGZpbmdlci0+eSk7CisJCX0KKwl9CisJaW5wdXRfbXRfcmVwb3J0X3BvaW50ZXJfZW11bGF0aW9uKGRldiwgdHJ1ZSk7CisKKwlpbnB1dF9yZXBvcnRfa2V5KHBzbW91c2UtPmRldiwgQlROX0xFRlQsIHN0YXRlLT5wcmVzc2VkKTsKKwlpbnB1dF9zeW5jKHBzbW91c2UtPmRldik7Cit9CisKK3N0YXRpYyB2b2lkIGZvY2FsdGVjaF9wcm9jZXNzX3RvdWNoX3BhY2tldChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwKKwkJCQkJICAgdW5zaWduZWQgY2hhciAqcGFja2V0KQoreworCXN0cnVjdCBmb2NhbHRlY2hfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisJc3RydWN0IGZvY2FsdGVjaF9od19zdGF0ZSAqc3RhdGUgPSAmcHJpdi0+c3RhdGU7CisJdW5zaWduZWQgY2hhciBmaW5nZXJzID0gcGFja2V0WzFdOworCWludCBpOworCisJc3RhdGUtPnByZXNzZWQgPSAocGFja2V0WzBdID4+IDQpICYgMTsKKworCS8qIHRoZSBzZWNvbmQgYnl0ZSBjb250YWlucyBhIGJpdG1hcCBvZiBhbGwgZmluZ2VycyB0b3VjaGluZyB0aGUgcGFkICovCisJZm9yIChpID0gMDsgaSA8IEZPQ19NQVhfRklOR0VSUzsgaSsrKSB7CisJCXN0YXRlLT5maW5nZXJzW2ldLmFjdGl2ZSA9IGZpbmdlcnMgJiAweDE7CisJCWlmICghc3RhdGUtPmZpbmdlcnNbaV0uYWN0aXZlKSB7CisJCQkvKgorCQkJICogRXZlbiB3aGVuIHRoZSBmaW5nZXIgYmVjb21lcyBhY3RpdmUgYWdhaW4sIHdlIHN0aWxsCisJCQkgKiB3aWxsIGhhdmUgdG8gd2FpdCBmb3IgdGhlIGZpcnN0IHZhbGlkIHBvc2l0aW9uLgorCQkJICovCisJCQlzdGF0ZS0+ZmluZ2Vyc1tpXS52YWxpZCA9IGZhbHNlOworCQl9CisJCWZpbmdlcnMgPj49IDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBmb2NhbHRlY2hfcHJvY2Vzc19hYnNfcGFja2V0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLAorCQkJCQkgdW5zaWduZWQgY2hhciAqcGFja2V0KQoreworCXN0cnVjdCBmb2NhbHRlY2hfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisJc3RydWN0IGZvY2FsdGVjaF9od19zdGF0ZSAqc3RhdGUgPSAmcHJpdi0+c3RhdGU7CisJdW5zaWduZWQgaW50IGZpbmdlcjsKKworCWZpbmdlciA9IChwYWNrZXRbMV0gPj4gNCkgLSAxOworCWlmIChmaW5nZXIgPj0gRk9DX01BWF9GSU5HRVJTKSB7CisJCXBzbW91c2VfZXJyKHBzbW91c2UsICJJbnZhbGlkIGZpbmdlciBpbiBhYnMgcGFja2V0OiAlZFxuIiwKKwkJCSAgICBmaW5nZXIpOworCQlyZXR1cm47CisJfQorCisJc3RhdGUtPnByZXNzZWQgPSAocGFja2V0WzBdID4+IDQpICYgMTsKKworCS8qCisJICogcGFja2V0WzVdIGNvbnRhaW5zIHNvbWUga2luZCBvZiB0b29sIHNpemUgaW4gdGhlIG1vc3QKKwkgKiBzaWduaWZpY2FudCBuaWJibGUuIDB4ZmYgaXMgYSBzcGVjaWFsIHZhbHVlIChsYXRjaGluZykgdGhhdAorCSAqIHNpZ25hbHMgYSBsYXJnZSBjb250YWN0IGFyZWEuCisJICovCisJaWYgKHBhY2tldFs1XSA9PSAweGZmKSB7CisJCXN0YXRlLT5maW5nZXJzW2Zpbmdlcl0udmFsaWQgPSBmYWxzZTsKKwkJcmV0dXJuOworCX0KKworCXN0YXRlLT5maW5nZXJzW2Zpbmdlcl0ueCA9ICgocGFja2V0WzFdICYgMHhmKSA8PCA4KSB8IHBhY2tldFsyXTsKKwlzdGF0ZS0+ZmluZ2Vyc1tmaW5nZXJdLnkgPSAocGFja2V0WzNdIDw8IDgpIHwgcGFja2V0WzRdOworCXN0YXRlLT5maW5nZXJzW2Zpbmdlcl0udmFsaWQgPSB0cnVlOworfQorCitzdGF0aWMgdm9pZCBmb2NhbHRlY2hfcHJvY2Vzc19yZWxfcGFja2V0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLAorCQkJCQkgdW5zaWduZWQgY2hhciAqcGFja2V0KQoreworCXN0cnVjdCBmb2NhbHRlY2hfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisJc3RydWN0IGZvY2FsdGVjaF9od19zdGF0ZSAqc3RhdGUgPSAmcHJpdi0+c3RhdGU7CisJaW50IGZpbmdlcjEsIGZpbmdlcjI7CisKKwlzdGF0ZS0+cHJlc3NlZCA9IHBhY2tldFswXSA+PiA3OworCWZpbmdlcjEgPSAoKHBhY2tldFswXSA+PiA0KSAmIDB4NykgLSAxOworCWlmIChmaW5nZXIxIDwgRk9DX01BWF9GSU5HRVJTKSB7CisJCXN0YXRlLT5maW5nZXJzW2ZpbmdlcjFdLnggKz0gKGNoYXIpcGFja2V0WzFdOworCQlzdGF0ZS0+ZmluZ2Vyc1tmaW5nZXIxXS55ICs9IChjaGFyKXBhY2tldFsyXTsKKwl9IGVsc2UgeworCQlwc21vdXNlX2Vycihwc21vdXNlLCAiRmlyc3QgZmluZ2VyIGluIHJlbCBwYWNrZXQgaW52YWxpZDogJWRcbiIsCisJCQkgICAgZmluZ2VyMSk7CisJfQorCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhbiBvZGQgbnVtYmVyIG9mIGZpbmdlcnMsIHRoZSBsYXN0IHJlbGF0aXZlCisJICogcGFja2V0IG9ubHkgY29udGFpbnMgb25lIGZpbmdlci4gSW4gdGhpcyBjYXNlLCB0aGUgc2Vjb25kCisJICogZmluZ2VyIGluZGV4IGluIHRoZSBwYWNrZXQgaXMgMCAod2Ugc3VidHJhY3QgMSBpbiB0aGUgbGluZXMKKwkgKiBhYm92ZSB0byBjcmVhdGUgYXJyYXkgaW5kaWNlcywgc28gdGhlIGZpbmdlciB3aWxsIG92ZXJmbG93CisJICogYW5kIGJlIGFib3ZlIEZPQ19NQVhfRklOR0VSUykuCisJICovCisJZmluZ2VyMiA9ICgocGFja2V0WzNdID4+IDQpICYgMHg3KSAtIDE7CisJaWYgKGZpbmdlcjIgPCBGT0NfTUFYX0ZJTkdFUlMpIHsKKwkJc3RhdGUtPmZpbmdlcnNbZmluZ2VyMl0ueCArPSAoY2hhcilwYWNrZXRbNF07CisJCXN0YXRlLT5maW5nZXJzW2ZpbmdlcjJdLnkgKz0gKGNoYXIpcGFja2V0WzVdOworCX0KK30KKworc3RhdGljIHZvaWQgZm9jYWx0ZWNoX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXVuc2lnbmVkIGNoYXIgKnBhY2tldCA9IHBzbW91c2UtPnBhY2tldDsKKworCXN3aXRjaCAocGFja2V0WzBdICYgMHhmKSB7CisJY2FzZSBGT0NfVE9VQ0g6CisJCWZvY2FsdGVjaF9wcm9jZXNzX3RvdWNoX3BhY2tldChwc21vdXNlLCBwYWNrZXQpOworCQlicmVhazsKKworCWNhc2UgRk9DX0FCUzoKKwkJZm9jYWx0ZWNoX3Byb2Nlc3NfYWJzX3BhY2tldChwc21vdXNlLCBwYWNrZXQpOworCQlicmVhazsKKworCWNhc2UgRk9DX1JFTDoKKwkJZm9jYWx0ZWNoX3Byb2Nlc3NfcmVsX3BhY2tldChwc21vdXNlLCBwYWNrZXQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXBzbW91c2VfZXJyKHBzbW91c2UsICJVbmtub3duIHBhY2tldCB0eXBlOiAlMDJ4XG4iLCBwYWNrZXRbMF0pOworCQlicmVhazsKKwl9CisKKwlmb2NhbHRlY2hfcmVwb3J0X3N0YXRlKHBzbW91c2UpOworfQorCitzdGF0aWMgcHNtb3VzZV9yZXRfdCBmb2NhbHRlY2hfcHJvY2Vzc19ieXRlKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCWlmIChwc21vdXNlLT5wa3RjbnQgPj0gNikgeyAvKiBGdWxsIHBhY2tldCByZWNlaXZlZCAqLworCQlmb2NhbHRlY2hfcHJvY2Vzc19wYWNrZXQocHNtb3VzZSk7CisJCXJldHVybiBQU01PVVNFX0ZVTExfUEFDS0VUOworCX0KKworCS8qCisJICogV2UgbWlnaHQgd2FudCB0byBkbyBzb21lIHZhbGlkYXRpb24gb2YgdGhlIGRhdGEgaGVyZSwgYnV0CisJICogd2UgZG8gbm90IGtub3cgdGhlIHByb3RvY29sIHdlbGwgZW5vdWdoCisJICovCisJcmV0dXJuIFBTTU9VU0VfR09PRF9EQVRBOworfQorCitzdGF0aWMgaW50IGZvY2FsdGVjaF9zd2l0Y2hfcHJvdG9jb2woc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCit7CisJc3RydWN0IHBzMmRldiAqcHMyZGV2ID0gJnBzbW91c2UtPnBzMmRldjsKKwl1bnNpZ25lZCBjaGFyIHBhcmFtWzNdOworCisJcGFyYW1bMF0gPSAwOworCWlmIChwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCAweDEwZjgpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCAweDEwZjgpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCAweDEwZjgpKQorCQlyZXR1cm4gLUVJTzsKKworCXBhcmFtWzBdID0gMTsKKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgMHgxMGY4KSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgUFNNT1VTRV9DTURfU0VUU0NBTEUxMSkpCisJCXJldHVybiAtRUlPOworCisJaWYgKHBzMl9jb21tYW5kKHBzMmRldiwgcGFyYW0sIFBTTU9VU0VfQ01EX0VOQUJMRSkpCisJCXJldHVybiAtRUlPOwogCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyB2b2lkIGZvY2FsdGVjaF9kaXNjb25uZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCWZvY2FsdGVjaF9yZXNldChwc21vdXNlKTsKKwlrZnJlZShwc21vdXNlLT5wcml2YXRlKTsKKwlwc21vdXNlLT5wcml2YXRlID0gTlVMTDsKK30KKworc3RhdGljIGludCBmb2NhbHRlY2hfcmVjb25uZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCWludCBlcnJvcjsKKworCWZvY2FsdGVjaF9yZXNldChwc21vdXNlKTsKKworCWVycm9yID0gZm9jYWx0ZWNoX3N3aXRjaF9wcm90b2NvbChwc21vdXNlKTsKKwlpZiAoZXJyb3IpIHsKKwkJcHNtb3VzZV9lcnIocHNtb3VzZSwgIlVuYWJsZSB0byBpbml0aWFsaXplIHRoZSBkZXZpY2VcbiIpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZvY2FsdGVjaF9zZXRfaW5wdXRfcGFyYW1zKHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHBzbW91c2UtPmRldjsKKwlzdHJ1Y3QgZm9jYWx0ZWNoX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOworCisJLyoKKwkgKiBVbmRvIHBhcnQgb2Ygc2V0dXAgZG9uZSBmb3IgdXMgYnkgcHNtb3VzZSBjb3JlIHNpbmNlIHRvdWNocGFkCisJICogaXMgbm90IGEgcmVsYXRpdmUgZGV2aWNlLgorCSAqLworCV9fY2xlYXJfYml0KEVWX1JFTCwgZGV2LT5ldmJpdCk7CisJX19jbGVhcl9iaXQoUkVMX1gsIGRldi0+cmVsYml0KTsKKwlfX2NsZWFyX2JpdChSRUxfWSwgZGV2LT5yZWxiaXQpOworCV9fY2xlYXJfYml0KEJUTl9SSUdIVCwgZGV2LT5rZXliaXQpOworCV9fY2xlYXJfYml0KEJUTl9NSURETEUsIGRldi0+a2V5Yml0KTsKKworCS8qCisJICogTm93IHNldCB1cCBvdXIgY2FwYWJpbGl0aWVzLgorCSAqLworCV9fc2V0X2JpdChFVl9BQlMsIGRldi0+ZXZiaXQpOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX01UX1BPU0lUSU9OX1gsIDAsIHByaXYtPnhfbWF4LCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19NVF9QT1NJVElPTl9ZLCAwLCBwcml2LT55X21heCwgMCwgMCk7CisJaW5wdXRfbXRfaW5pdF9zbG90cyhkZXYsIDUsIElOUFVUX01UX1BPSU5URVIpOworCV9fc2V0X2JpdChJTlBVVF9QUk9QX0JVVFRPTlBBRCwgZGV2LT5wcm9wYml0KTsKK30KKworc3RhdGljIGludCBmb2NhbHRlY2hfcmVhZF9yZWdpc3RlcihzdHJ1Y3QgcHMyZGV2ICpwczJkZXYsIGludCByZWcsCisJCQkJICAgdW5zaWduZWQgY2hhciAqcGFyYW0pCit7CisJaWYgKHBzMl9jb21tYW5kKHBzMmRldiwgcGFyYW0sIFBTTU9VU0VfQ01EX1NFVFNDQUxFMTEpKQorCQlyZXR1cm4gLUVJTzsKKworCXBhcmFtWzBdID0gMDsKKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgUFNNT1VTRV9DTURfU0VUUkVTKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgUFNNT1VTRV9DTURfU0VUUkVTKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgUFNNT1VTRV9DTURfU0VUUkVTKSkKKwkJcmV0dXJuIC1FSU87CisKKwlwYXJhbVswXSA9IHJlZzsKKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgUFNNT1VTRV9DTURfU0VUUkVTKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgUFNNT1VTRV9DTURfR0VUSU5GTykpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZm9jYWx0ZWNoX3JlYWRfc2l6ZShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OworCXN0cnVjdCBmb2NhbHRlY2hfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisJY2hhciBwYXJhbVszXTsKKworCWlmIChmb2NhbHRlY2hfcmVhZF9yZWdpc3RlcihwczJkZXYsIDIsIHBhcmFtKSkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBub3Qgc3VyZSB3aGV0aGVyIHRoaXMgaXMgMTAwJSBjb3JyZWN0ICovCisJcHJpdi0+eF9tYXggPSAodW5zaWduZWQgY2hhcilwYXJhbVsxXSAqIDEyODsKKwlwcml2LT55X21heCA9ICh1bnNpZ25lZCBjaGFyKXBhcmFtWzJdICogMTI4OworCisJcmV0dXJuIDA7Cit9CitpbnQgZm9jYWx0ZWNoX2luaXQoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCit7CisJc3RydWN0IGZvY2FsdGVjaF9kYXRhICpwcml2OworCWludCBlcnJvcjsKKworCXBzbW91c2UtPnByaXZhdGUgPSBwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZvY2FsdGVjaF9kYXRhKSwKKwkJCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9jYWx0ZWNoX3Jlc2V0KHBzbW91c2UpOworCisJZXJyb3IgPSBmb2NhbHRlY2hfcmVhZF9zaXplKHBzbW91c2UpOworCWlmIChlcnJvcikgeworCQlwc21vdXNlX2Vycihwc21vdXNlLAorCQkJICAgICJVbmFibGUgdG8gcmVhZCB0aGUgc2l6ZSBvZiB0aGUgdG91Y2hwYWRcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJZXJyb3IgPSBmb2NhbHRlY2hfc3dpdGNoX3Byb3RvY29sKHBzbW91c2UpOworCWlmIChlcnJvcikgeworCQlwc21vdXNlX2Vycihwc21vdXNlLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgdGhlIGRldmljZVxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlmb2NhbHRlY2hfc2V0X2lucHV0X3BhcmFtcyhwc21vdXNlKTsKKworCXBzbW91c2UtPnByb3RvY29sX2hhbmRsZXIgPSBmb2NhbHRlY2hfcHJvY2Vzc19ieXRlOworCXBzbW91c2UtPnBrdHNpemUgPSA2OworCXBzbW91c2UtPmRpc2Nvbm5lY3QgPSBmb2NhbHRlY2hfZGlzY29ubmVjdDsKKwlwc21vdXNlLT5yZWNvbm5lY3QgPSBmb2NhbHRlY2hfcmVjb25uZWN0OworCXBzbW91c2UtPmNsZWFudXAgPSBmb2NhbHRlY2hfcmVzZXQ7CisJLyogcmVzeW5jIGlzIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisJcHNtb3VzZS0+cmVzeW5jX3RpbWUgPSAwOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJZm9jYWx0ZWNoX3Jlc2V0KHBzbW91c2UpOworCWtmcmVlKHByaXYpOworCXJldHVybiBlcnJvcjsKK30KKworYm9vbCBmb2NhbHRlY2hfc3VwcG9ydGVkKHZvaWQpCit7CisJcmV0dXJuIHRydWU7Cit9CisKKyNlbHNlIC8qIENPTkZJR19NT1VTRV9QUzJfRk9DQUxURUNIICovCisKK2ludCBmb2NhbHRlY2hfaW5pdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3sKKwlmb2NhbHRlY2hfcmVzZXQocHNtb3VzZSk7CisKKwlyZXR1cm4gMDsKK30KKworYm9vbCBmb2NhbHRlY2hfc3VwcG9ydGVkKHZvaWQpCit7CisJcmV0dXJuIGZhbHNlOworfQorCisjZW5kaWYgLyogQ09ORklHX01PVVNFX1BTMl9GT0NBTFRFQ0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZm9jYWx0ZWNoLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL2ZvY2FsdGVjaC5oCmluZGV4IDQ5ODY1MGMuLjcxODcwYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvZm9jYWx0ZWNoLmgKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9mb2NhbHRlY2guaApAQCAtMiw2ICsyLDcgQEAKICAqIEZvY2FsdGVjaCBUb3VjaFBhZCBQUy8yIG1vdXNlIGRyaXZlcgogICoKICAqIENvcHlyaWdodCAoYykgMjAxNCBSZWQgSGF0IEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxNCBNYXRoaWFzIEdvdHRzY2hsYWcgPG1nb3R0c2NobGFnQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE4LDUgKzE5LDYgQEAKIAogaW50IGZvY2FsdGVjaF9kZXRlY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UsIGJvb2wgc2V0X3Byb3BlcnRpZXMpOwogaW50IGZvY2FsdGVjaF9pbml0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKTsKK2Jvb2wgZm9jYWx0ZWNoX3N1cHBvcnRlZCh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwppbmRleCA5NWEzYTZlLi42ODQ2OWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKQEAgLTcyNSwxNiArNzI1LDE5IEBACiAKIC8qIEFsd2F5cyBjaGVjayBmb3IgZm9jYWx0ZWNoLCB0aGlzIGlzIHNhZmUgYXMgaXQgdXNlcyBwbnAtaWQgbWF0Y2hpbmcgKi8KIAlpZiAocHNtb3VzZV9kb19kZXRlY3QoZm9jYWx0ZWNoX2RldGVjdCwgcHNtb3VzZSwgc2V0X3Byb3BlcnRpZXMpID09IDApIHsKLQkJaWYgKCFzZXRfcHJvcGVydGllcyB8fCBmb2NhbHRlY2hfaW5pdChwc21vdXNlKSA9PSAwKSB7Ci0JCQkvKgotCQkJICogTm90IHN1cHBvcnRlZCB5ZXQsIHVzZSBiYXJlIHByb3RvY29sLgotCQkJICogTm90ZSB0aGF0IHdlIG5lZWQgdG8gYWxzbyByZXN0cmljdAotCQkJICogcHNtb3VzZV9tYXhfcHJvdG8gc28gdGhhdCBwc21vdXNlX2luaXRpYWxpemUoKQotCQkJICogZG9lcyBub3QgdHJ5IHRvIHJlc2V0IHJhdGUgYW5kIHJlc29sdXRpb24sCi0JCQkgKiBiZWNhdXNlIGV2ZW4gdGhhdCB1cHNldHMgdGhlIGRldmljZS4KLQkJCSAqLwotCQkJcHNtb3VzZV9tYXhfcHJvdG8gPSBQU01PVVNFX1BTMjsKLQkJCXJldHVybiBQU01PVVNFX1BTMjsKKwkJaWYgKG1heF9wcm90byA+IFBTTU9VU0VfSU1FWCkgeworCQkJaWYgKCFzZXRfcHJvcGVydGllcyB8fCBmb2NhbHRlY2hfaW5pdChwc21vdXNlKSA9PSAwKSB7CisJCQkJaWYgKGZvY2FsdGVjaF9zdXBwb3J0ZWQoKSkKKwkJCQkJcmV0dXJuIFBTTU9VU0VfRk9DQUxURUNIOworCQkJCS8qCisJCQkJICogTm90ZSB0aGF0IHdlIG5lZWQgdG8gYWxzbyByZXN0cmljdAorCQkJCSAqIHBzbW91c2VfbWF4X3Byb3RvIHNvIHRoYXQgcHNtb3VzZV9pbml0aWFsaXplKCkKKwkJCQkgKiBkb2VzIG5vdCB0cnkgdG8gcmVzZXQgcmF0ZSBhbmQgcmVzb2x1dGlvbiwKKwkJCQkgKiBiZWNhdXNlIGV2ZW4gdGhhdCB1cHNldHMgdGhlIGRldmljZS4KKwkJCQkgKi8KKwkJCQlwc21vdXNlX21heF9wcm90byA9IFBTTU9VU0VfUFMyOworCQkJCXJldHVybiBQU01PVVNFX1BTMjsKKwkJCX0KIAkJfQogCX0KIApAQCAtMTA2Myw2ICsxMDY2LDE1IEBACiAJCS5hbGlhcwkJPSAiY29ydHBzIiwKIAkJLmRldGVjdAkJPSBjb3J0cm9uX2RldGVjdCwKIAl9LAorI2lmZGVmIENPTkZJR19NT1VTRV9QUzJfRk9DQUxURUNICisJeworCQkudHlwZQkJPSBQU01PVVNFX0ZPQ0FMVEVDSCwKKwkJLm5hbWUJCT0gIkZvY2FsVGVjaFBTLzIiLAorCQkuYWxpYXMJCT0gImZvY2FsdGVjaCIsCisJCS5kZXRlY3QJCT0gZm9jYWx0ZWNoX2RldGVjdCwKKwkJLmluaXQJCT0gZm9jYWx0ZWNoX2luaXQsCisJfSwKKyNlbmRpZgogCXsKIAkJLnR5cGUJCT0gUFNNT1VTRV9BVVRPLAogCQkubmFtZQkJPSAiYXV0byIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UuaCBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS5oCmluZGV4IGY0Y2Y2NjQuLmMyZmYxMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS5oCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS5oCkBAIC05Niw2ICs5Niw3IEBACiAJUFNNT1VTRV9GU1AsCiAJUFNNT1VTRV9TWU5BUFRJQ1NfUkVMQVRJVkUsCiAJUFNNT1VTRV9DWVBSRVNTLAorCVBTTU9VU0VfRk9DQUxURUNILAogCVBTTU9VU0VfQVVUTwkJLyogVGhpcyBvbmUgc2hvdWxkIGFsd2F5cyBiZSBsYXN0ICovCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYwppbmRleCBmOTQ3MjkyLi43ZTcwNWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKQEAgLTY3LDYgKzY3LDkgQEAKICNkZWZpbmUgWF9NQVhfUE9TSVRJVkUgODE3NgogI2RlZmluZSBZX01BWF9QT1NJVElWRSA4MTc2CiAKKy8qIG1heGltdW0gQUJTX01UX1BPU0lUSU9OIGRpc3BsYWNlbWVudCAoaW4gbW0pICovCisjZGVmaW5lIERNQVggMTAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKglTdHVmZiB3ZSBuZWVkIGV2ZW4gd2hlbiB3ZSBkbyBub3Qgd2FudCBuYXRpdmUgU3luYXB0aWNzIHN1cHBvcnQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTM1LDggKzEzOCw5IEBACiAJCTEyMzIsIDU3MTAsIDExNTYsIDQ2OTYKIAl9LAogCXsKLQkJKGNvbnN0IGNoYXIgKiBjb25zdCBbXSl7IkxFTjAwMzQiLCAiTEVOMDAzNiIsICJMRU4wMDM5IiwKLQkJCQkJIkxFTjIwMDIiLCAiTEVOMjAwNCIsIE5VTEx9LAorCQkoY29uc3QgY2hhciAqIGNvbnN0IFtdKXsiTEVOMDAzNCIsICJMRU4wMDM2IiwgIkxFTjAwMzciLAorCQkJCQkiTEVOMDAzOSIsICJMRU4yMDAyIiwgIkxFTjIwMDQiLAorCQkJCQlOVUxMfSwKIAkJMTAyNCwgNTExMiwgMjAyNCwgNDgzMgogCX0sCiAJewpAQCAtMTY1LDcgKzE2OSw3IEBACiAJIkxFTjAwMzQiLCAvKiBUNDMxcywgTDQ0MCwgTDU0MCwgVDU0MCwgVzU0MCwgWDEgQ2FyYm9uIDJuZCAqLwogCSJMRU4wMDM1IiwgLyogWDI0MCAqLwogCSJMRU4wMDM2IiwgLyogVDQ0MCAqLwotCSJMRU4wMDM3IiwKKwkiTEVOMDAzNyIsIC8qIFgxIENhcmJvbiAybmQgKi8KIAkiTEVOMDAzOCIsCiAJIkxFTjAwMzkiLCAvKiBUNDQwcyAqLwogCSJMRU4wMDQxIiwKQEAgLTU3NCwxNCArNTc4LDYgQEAKICAqCUZ1bmN0aW9ucyB0byBpbnRlcnByZXQgdGhlIGFic29sdXRlIG1vZGUgcGFja2V0cwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyB2b2lkIHN5bmFwdGljc19tdF9zdGF0ZV9zZXQoc3RydWN0IHN5bmFwdGljc19tdF9zdGF0ZSAqc3RhdGUsIGludCBjb3VudCwKLQkJCQkgICBpbnQgc2dtLCBpbnQgYWdtKQotewotCXN0YXRlLT5jb3VudCA9IGNvdW50OwotCXN0YXRlLT5zZ20gPSBzZ207Ci0Jc3RhdGUtPmFnbSA9IGFnbTsKLX0KLQogc3RhdGljIHZvaWQgc3luYXB0aWNzX3BhcnNlX2FnbShjb25zdCB1bnNpZ25lZCBjaGFyIGJ1ZltdLAogCQkJCXN0cnVjdCBzeW5hcHRpY3NfZGF0YSAqcHJpdiwKIAkJCQlzdHJ1Y3Qgc3luYXB0aWNzX2h3X3N0YXRlICpodykKQEAgLTYwMCwxNiArNTk2LDEzIEBACiAJCWJyZWFrOwogCiAJY2FzZSAyOgotCQkvKiBBR00tQ09OVEFDVCBwYWNrZXQ6IChjb3VudCwgc2dtLCBhZ20pICovCi0JCXN5bmFwdGljc19tdF9zdGF0ZV9zZXQoJmFnbS0+bXRfc3RhdGUsIGJ1ZlsxXSwgYnVmWzJdLCBidWZbNF0pOworCQkvKiBBR00tQ09OVEFDVCBwYWNrZXQ6IHdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGNvdW50ICovCisJCXByaXYtPmFnbV9jb3VudCA9IGJ1ZlsxXTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0KLQkvKiBSZWNvcmQgdGhhdCBhdCBsZWFzdCBvbmUgQUdNIGhhcyBiZWVuIHJlY2VpdmVkIHNpbmNlIGxhc3QgU0dNICovCi0JcHJpdi0+YWdtX3BlbmRpbmcgPSB0cnVlOwogfQogCiBzdGF0aWMgYm9vbCBpc19mb3JjZXBhZDsKQEAgLTgwMywzOTcgKzc5NiwxMyBAQAogCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzAgKyBpLCBody0+ZXh0X2J1dHRvbnMgJiAoMSA8PCBpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHN5bmFwdGljc19yZXBvcnRfc2xvdChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBzbG90LAotCQkJCSAgY29uc3Qgc3RydWN0IHN5bmFwdGljc19od19zdGF0ZSAqaHcpCi17Ci0JaW5wdXRfbXRfc2xvdChkZXYsIHNsb3QpOwotCWlucHV0X210X3JlcG9ydF9zbG90X3N0YXRlKGRldiwgTVRfVE9PTF9GSU5HRVIsIChodyAhPSBOVUxMKSk7Ci0JaWYgKCFodykKLQkJcmV0dXJuOwotCi0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NVF9QT1NJVElPTl9YLCBody0+eCk7Ci0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NVF9QT1NJVElPTl9ZLCBzeW5hcHRpY3NfaW52ZXJ0X3koaHctPnkpKTsKLQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX01UX1BSRVNTVVJFLCBody0+eik7Ci19Ci0KIHN0YXRpYyB2b2lkIHN5bmFwdGljc19yZXBvcnRfbXRfZGF0YShzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwKLQkJCQkgICAgIHN0cnVjdCBzeW5hcHRpY3NfbXRfc3RhdGUgKm10X3N0YXRlLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IHN5bmFwdGljc19od19zdGF0ZSAqc2dtKQorCQkJCSAgICAgY29uc3Qgc3RydWN0IHN5bmFwdGljc19od19zdGF0ZSAqc2dtLAorCQkJCSAgICAgaW50IG51bV9maW5nZXJzKQogewogCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHBzbW91c2UtPmRldjsKIAlzdHJ1Y3Qgc3luYXB0aWNzX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOwotCXN0cnVjdCBzeW5hcHRpY3NfaHdfc3RhdGUgKmFnbSA9ICZwcml2LT5hZ207Ci0Jc3RydWN0IHN5bmFwdGljc19tdF9zdGF0ZSAqb2xkID0gJnByaXYtPm10X3N0YXRlOwotCi0Jc3dpdGNoIChtdF9zdGF0ZS0+Y291bnQpIHsKLQljYXNlIDA6Ci0JCXN5bmFwdGljc19yZXBvcnRfc2xvdChkZXYsIDAsIE5VTEwpOwotCQlzeW5hcHRpY3NfcmVwb3J0X3Nsb3QoZGV2LCAxLCBOVUxMKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlpZiAobXRfc3RhdGUtPnNnbSA9PSAtMSkgewotCQkJc3luYXB0aWNzX3JlcG9ydF9zbG90KGRldiwgMCwgTlVMTCk7Ci0JCQlzeW5hcHRpY3NfcmVwb3J0X3Nsb3QoZGV2LCAxLCBOVUxMKTsKLQkJfSBlbHNlIGlmIChtdF9zdGF0ZS0+c2dtID09IDApIHsKLQkJCXN5bmFwdGljc19yZXBvcnRfc2xvdChkZXYsIDAsIHNnbSk7Ci0JCQlzeW5hcHRpY3NfcmVwb3J0X3Nsb3QoZGV2LCAxLCBOVUxMKTsKLQkJfSBlbHNlIHsKLQkJCXN5bmFwdGljc19yZXBvcnRfc2xvdChkZXYsIDAsIE5VTEwpOwotCQkJc3luYXB0aWNzX3JlcG9ydF9zbG90KGRldiwgMSwgc2dtKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKgotCQkgKiBJZiB0aGUgZmluZ2VyIHNsb3QgY29udGFpbmVkIGluIFNHTSBpcyB2YWxpZCwgYW5kIGVpdGhlcgotCQkgKiBoYXNuJ3QgY2hhbmdlZCwgb3IgaXMgbmV3LCBvciB0aGUgb2xkIFNHTSBoYXMgbm93IG1vdmVkIHRvCi0JCSAqIEFHTSwgdGhlbiByZXBvcnQgU0dNIGluIE1UQiBzbG90IDAuCi0JCSAqIE90aGVyd2lzZSwgZW1wdHkgTVRCIHNsb3QgMC4KLQkJICovCi0JCWlmIChtdF9zdGF0ZS0+c2dtICE9IC0xICYmCi0JCSAgICAobXRfc3RhdGUtPnNnbSA9PSBvbGQtPnNnbSB8fAotCQkgICAgIG9sZC0+c2dtID09IC0xIHx8IG10X3N0YXRlLT5hZ20gPT0gb2xkLT5zZ20pKQotCQkJc3luYXB0aWNzX3JlcG9ydF9zbG90KGRldiwgMCwgc2dtKTsKLQkJZWxzZQotCQkJc3luYXB0aWNzX3JlcG9ydF9zbG90KGRldiwgMCwgTlVMTCk7Ci0KLQkJLyoKLQkJICogSWYgdGhlIGZpbmdlciBzbG90IGNvbnRhaW5lZCBpbiBBR00gaXMgdmFsaWQsIGFuZCBlaXRoZXIKLQkJICogaGFzbid0IGNoYW5nZWQsIG9yIGlzIG5ldywgdGhlbiByZXBvcnQgQUdNIGluIE1UQiBzbG90IDEuCi0JCSAqIE90aGVyd2lzZSwgZW1wdHkgTVRCIHNsb3QgMS4KLQkJICoKLQkJICogSG93ZXZlciwgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIEFHTSBpcyBuZXcsIG1ha2Ugc3VyZSB0aGF0Ci0JCSAqIHRoYXQgaXQgaXMgZWl0aGVyIHRoZSBzYW1lIGFzIHRoZSBvbGQgU0dNLCBvciB0aGVyZSB3YXMgbm8KLQkJICogU0dNLgotCQkgKgotCQkgKiBPdGhlcndpc2UsIGlmIHRoZSBTR00gd2FzIGp1c3QgMSwgYW5kIHRoZSBuZXcgQUdNIGlzIDIsIHRoZW4KLQkJICogdGhlIG5ldyBBR00gd2lsbCBrZWVwIHRoZSBvbGQgU0dNJ3MgdHJhY2tpbmcgSUQsIHdoaWNoIGNhbgotCQkgKiBjYXVzZSBhcHBhcmVudCBkcnVtcm9sbC4gIFRoaXMgaGFwcGVucyBpZiBpbiB0aGUgZm9sbG93aW5nCi0JCSAqIHZhbGlkIGZpbmdlciBzZXF1ZW5jZToKLQkJICoKLQkJICogIEFjdGlvbiAgICAgICAgICAgICAgICAgU0dNICBBR00gKE1UQiBzbG90OkNvbnRhY3QpCi0JCSAqICAxLiBUb3VjaCBjb250YWN0IDAgICAgKDA6MCkKLQkJICogIDIuIFRvdWNoIGNvbnRhY3QgMSAgICAoMDowLCAxOjEpCi0JCSAqICAzLiBMaWZ0ICBjb250YWN0IDAgICAgKDE6MSkKLQkJICogIDQuIFRvdWNoIGNvbnRhY3RzIDIsMyAoMDoyLCAxOjMpCi0JCSAqCi0JCSAqIEluIHN0ZXAgNCwgY29udGFjdCAzLCBpbiBBR00gbXVzdCBub3QgYmUgZ2l2ZW4gdGhlIHNhbWUKLQkJICogdHJhY2tpbmcgSUQgYXMgY29udGFjdCAxIGhhZCBpbiBzdGVwIDMuICBUbyBhdm9pZCB0aGlzLAotCQkgKiB0aGUgZmlyc3QgYWdtIHdpdGggY29udGFjdCAzIGlzIGRyb3BwZWQgYW5kIHNsb3QgMSBpcwotCQkgKiBpbnZhbGlkYXRlZCAodHJhY2tpbmcgSUQgPSAtMSkuCi0JCSAqLwotCQlpZiAobXRfc3RhdGUtPmFnbSAhPSAtMSAmJgotCQkgICAgKG10X3N0YXRlLT5hZ20gPT0gb2xkLT5hZ20gfHwKLQkJICAgICAob2xkLT5hZ20gPT0gLTEgJiYKLQkJICAgICAgKG9sZC0+c2dtID09IC0xIHx8IG10X3N0YXRlLT5hZ20gPT0gb2xkLT5zZ20pKSkpCi0JCQlzeW5hcHRpY3NfcmVwb3J0X3Nsb3QoZGV2LCAxLCBhZ20pOwotCQllbHNlCi0JCQlzeW5hcHRpY3NfcmVwb3J0X3Nsb3QoZGV2LCAxLCBOVUxMKTsKLQkJYnJlYWs7Ci0JfQotCi0JLyogRG9uJ3QgdXNlIGFjdGl2ZSBzbG90IGNvdW50IHRvIGdlbmVyYXRlIEJUTl9UT09MIGV2ZW50cy4gKi8KLQlpbnB1dF9tdF9yZXBvcnRfcG9pbnRlcl9lbXVsYXRpb24oZGV2LCBmYWxzZSk7Ci0KLQkvKiBTZW5kIHRoZSBudW1iZXIgb2YgZmluZ2VycyByZXBvcnRlZCBieSB0b3VjaHBhZCBpdHNlbGYuICovCi0JaW5wdXRfbXRfcmVwb3J0X2Zpbmdlcl9jb3VudChkZXYsIG10X3N0YXRlLT5jb3VudCk7Ci0KLQlzeW5hcHRpY3NfcmVwb3J0X2J1dHRvbnMocHNtb3VzZSwgc2dtKTsKLQotCWlucHV0X3N5bmMoZGV2KTsKLX0KLQotLyogSGFuZGxlIGNhc2Ugd2hlcmUgbXRfc3RhdGUtPmNvdW50ID0gMCAqLwotc3RhdGljIHZvaWQgc3luYXB0aWNzX2ltYWdlX3NlbnNvcl8wZihzdHJ1Y3Qgc3luYXB0aWNzX2RhdGEgKnByaXYsCi0JCQkJICAgICAgc3RydWN0IHN5bmFwdGljc19tdF9zdGF0ZSAqbXRfc3RhdGUpCi17Ci0Jc3luYXB0aWNzX210X3N0YXRlX3NldChtdF9zdGF0ZSwgMCwgLTEsIC0xKTsKLQlwcml2LT5tdF9zdGF0ZV9sb3N0ID0gZmFsc2U7Ci19Ci0KLS8qIEhhbmRsZSBjYXNlIHdoZXJlIG10X3N0YXRlLT5jb3VudCA9IDEgKi8KLXN0YXRpYyB2b2lkIHN5bmFwdGljc19pbWFnZV9zZW5zb3JfMWYoc3RydWN0IHN5bmFwdGljc19kYXRhICpwcml2LAotCQkJCSAgICAgIHN0cnVjdCBzeW5hcHRpY3NfbXRfc3RhdGUgKm10X3N0YXRlKQotewotCXN0cnVjdCBzeW5hcHRpY3NfaHdfc3RhdGUgKmFnbSA9ICZwcml2LT5hZ207Ci0Jc3RydWN0IHN5bmFwdGljc19tdF9zdGF0ZSAqb2xkID0gJnByaXYtPm10X3N0YXRlOwotCi0JLyoKLQkgKiBJZiB0aGUgbGFzdCBBR00gd2FzICgwLDAsMCksIGFuZCB0aGVyZSBpcyBvbmx5IG9uZSBmaW5nZXIgbGVmdCwKLQkgKiB0aGVuIHdlIGFic29sdXRlbHkga25vdyB0aGF0IFNHTSBjb250YWlucyBzbG90IDAsIGFuZCBhbGwgb3RoZXIKLQkgKiBmaW5nZXJzIGhhdmUgYmVlbiByZW1vdmVkLgotCSAqLwotCWlmIChwcml2LT5hZ21fcGVuZGluZyAmJiBhZ20tPnogPT0gMCkgewotCQlzeW5hcHRpY3NfbXRfc3RhdGVfc2V0KG10X3N0YXRlLCAxLCAwLCAtMSk7Ci0JCXByaXYtPm10X3N0YXRlX2xvc3QgPSBmYWxzZTsKLQkJcmV0dXJuOwotCX0KLQotCXN3aXRjaCAob2xkLT5jb3VudCkgewotCWNhc2UgMDoKLQkJc3luYXB0aWNzX210X3N0YXRlX3NldChtdF9zdGF0ZSwgMSwgMCwgLTEpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCS8qCi0JCSAqIElmIG10X3N0YXRlX2xvc3QsIHRoZW4gdGhlIHByZXZpb3VzIHRyYW5zaXRpb24gd2FzIDMtPjEsCi0JCSAqIGFuZCBTR00gbm93IGNvbnRhaW5zIGVpdGhlciBzbG90IDAgb3IgMSwgYnV0IHdlIGRvbid0IGtub3cKLQkJICogd2hpY2guICBTbywgd2UganVzdCBhc3N1bWUgdGhhdCB0aGUgU0dNIG5vdyBjb250YWlucyBzbG90IDEuCi0JCSAqCi0JCSAqIElmIHBlbmRpbmcgQUdNIGFuZCBlaXRoZXI6Ci0JCSAqICAgKGEpIHRoZSBwcmV2aW91cyBTR00gc2xvdCBjb250YWlucyBzbG90IDAsIG9yCi0JCSAqICAgKGIpIHRoZXJlIHdhcyBubyBTR00gc2xvdAotCQkgKiB0aGVuLCB0aGUgU0dNIG5vdyBjb250YWlucyBzbG90IDEKLQkJICoKLQkJICogQ2FzZSAoYSkgaGFwcGVucyB3aXRoIHZlcnkgcmFwaWQgImRydW0gcm9sbCIgZ2VzdHVyZXMsIHdoZXJlCi0JCSAqIHNsb3QgMCBmaW5nZXIgaXMgbGlmdGVkIGFuZCBhIG5ldyBzbG90IDEgZmluZ2VyIHRvdWNoZXMKLQkJICogd2l0aGluIG9uZSByZXBvcnRpbmcgaW50ZXJ2YWwuCi0JCSAqCi0JCSAqIENhc2UgKGIpIGhhcHBlbnMgaWYgaW5pdGlhbGx5IHR3byBvciBtb3JlIGZpbmdlcnMgdGFwCi0JCSAqIGJyaWVmbHksIGFuZCBhbGwgYnV0IG9uZSBsaWZ0IGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBmaXJzdAotCQkgKiByZXBvcnRpbmcgaW50ZXJ2YWwuCi0JCSAqCi0JCSAqIChJbiBib3RoIHRoZXNlIGNhc2VzLCBzbG90IDAgd2lsbCBiZWNvbWVzIGVtcHR5LCBzbyBTR00KLQkJICogY29udGFpbnMgc2xvdCAxIHdpdGggdGhlIG5ldyBmaW5nZXIpCi0JCSAqCi0JCSAqIEVsc2UsIGlmIHRoZXJlIHdhcyBubyBwcmV2aW91cyBTR00sIGl0IG5vdyBjb250YWlucyBzbG90IDAuCi0JCSAqCi0JCSAqIE90aGVyd2lzZSwgU0dNIHN0aWxsIGNvbnRhaW5zIHRoZSBzYW1lIHNsb3QuCi0JCSAqLwotCQlpZiAocHJpdi0+bXRfc3RhdGVfbG9zdCB8fAotCQkgICAgKHByaXYtPmFnbV9wZW5kaW5nICYmIG9sZC0+c2dtIDw9IDApKQotCQkJc3luYXB0aWNzX210X3N0YXRlX3NldChtdF9zdGF0ZSwgMSwgMSwgLTEpOwotCQllbHNlIGlmIChvbGQtPnNnbSA9PSAtMSkKLQkJCXN5bmFwdGljc19tdF9zdGF0ZV9zZXQobXRfc3RhdGUsIDEsIDAsIC0xKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkvKgotCQkgKiBJZiBtdF9zdGF0ZV9sb3N0LCB3ZSBkb24ndCBrbm93IHdoaWNoIGZpbmdlciBTR00gY29udGFpbnMuCi0JCSAqCi0JCSAqIFNvLCByZXBvcnQgMSBmaW5nZXIsIGJ1dCB3aXRoIGJvdGggc2xvdHMgZW1wdHkuCi0JCSAqIFdlIHdpbGwgdXNlIHNsb3QgMSBvbiBzdWJzZXF1ZW50IDEtPjEKLQkJICovCi0JCWlmIChwcml2LT5tdF9zdGF0ZV9sb3N0KSB7Ci0JCQlzeW5hcHRpY3NfbXRfc3RhdGVfc2V0KG10X3N0YXRlLCAxLCAtMSwgLTEpOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyoKLQkJICogU2luY2UgdGhlIGxhc3QgQUdNIHdhcyBOT1QgKDAsMCwwKSwgaXQgd2FzIHRoZSBmaW5nZXIgaW4KLQkJICogc2xvdCAwIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZC4KLQkJICogU28sIFNHTSBub3cgY29udGFpbnMgcHJldmlvdXMgQUdNJ3Mgc2xvdCwgYW5kIEFHTSBpcyBub3cKLQkJICogZW1wdHkuCi0JCSAqLwotCQlzeW5hcHRpY3NfbXRfc3RhdGVfc2V0KG10X3N0YXRlLCAxLCBvbGQtPmFnbSwgLTEpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCS8qCi0JCSAqIFNpbmNlIGxhc3QgQUdNIHdhcyBub3QgKDAsMCwwKSwgd2UgZG9uJ3Qga25vdyB3aGljaCBmaW5nZXIKLQkJICogaXMgbGVmdC4KLQkJICoKLQkJICogU28sIHJlcG9ydCAxIGZpbmdlciwgYnV0IHdpdGggYm90aCBzbG90cyBlbXB0eS4KLQkJICogV2Ugd2lsbCB1c2Ugc2xvdCAxIG9uIHN1YnNlcXVlbnQgMS0+MQotCQkgKi8KLQkJc3luYXB0aWNzX210X3N0YXRlX3NldChtdF9zdGF0ZSwgMSwgLTEsIC0xKTsKLQkJcHJpdi0+bXRfc3RhdGVfbG9zdCA9IHRydWU7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQljYXNlIDU6Ci0JCS8qIG10X3N0YXRlIHdhcyB1cGRhdGVkIGJ5IEFHTS1DT05UQUNUIHBhY2tldCAqLwotCQlicmVhazsKLQl9Ci19Ci0KLS8qIEhhbmRsZSBjYXNlIHdoZXJlIG10X3N0YXRlLT5jb3VudCA9IDIgKi8KLXN0YXRpYyB2b2lkIHN5bmFwdGljc19pbWFnZV9zZW5zb3JfMmYoc3RydWN0IHN5bmFwdGljc19kYXRhICpwcml2LAotCQkJCSAgICAgIHN0cnVjdCBzeW5hcHRpY3NfbXRfc3RhdGUgKm10X3N0YXRlKQotewotCXN0cnVjdCBzeW5hcHRpY3NfbXRfc3RhdGUgKm9sZCA9ICZwcml2LT5tdF9zdGF0ZTsKLQotCXN3aXRjaCAob2xkLT5jb3VudCkgewotCWNhc2UgMDoKLQkJc3luYXB0aWNzX210X3N0YXRlX3NldChtdF9zdGF0ZSwgMiwgMCwgMSk7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJLyoKLQkJICogSWYgcHJldmlvdXMgU0dNIGNvbnRhaW5lZCBzbG90IDEgb3IgaGlnaGVyLCBTR00gbm93IGNvbnRhaW5zCi0JCSAqIHNsb3QgMCAodGhlIG5ld2x5IHRvdWNoaW5nIGZpbmdlcikgYW5kIEFHTSBjb250YWlucyBTR00ncwotCQkgKiBwcmV2aW91cyBzbG90LgotCQkgKgotCQkgKiBPdGhlcndpc2UsIFNHTSBzdGlsbCBjb250YWlucyBzbG90IDAgYW5kIEFHTSBub3cgY29udGFpbnMKLQkJICogc2xvdCAxLgotCQkgKi8KLQkJaWYgKG9sZC0+c2dtID49IDEpCi0JCQlzeW5hcHRpY3NfbXRfc3RhdGVfc2V0KG10X3N0YXRlLCAyLCAwLCBvbGQtPnNnbSk7Ci0JCWVsc2UKLQkJCXN5bmFwdGljc19tdF9zdGF0ZV9zZXQobXRfc3RhdGUsIDIsIDAsIDEpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCS8qCi0JCSAqIElmIG10X3N0YXRlX2xvc3QsIFNHTSBub3cgY29udGFpbnMgZWl0aGVyIGZpbmdlciAxIG9yIDIsIGJ1dAotCQkgKiB3ZSBkb24ndCBrbm93IHdoaWNoLgotCQkgKiBTbywgd2UganVzdCBhc3N1bWUgdGhhdCB0aGUgU0dNIGNvbnRhaW5zIHNsb3QgMCBhbmQgQUdNIDEuCi0JCSAqLwotCQlpZiAocHJpdi0+bXRfc3RhdGVfbG9zdCkKLQkJCXN5bmFwdGljc19tdF9zdGF0ZV9zZXQobXRfc3RhdGUsIDIsIDAsIDEpOwotCQkvKgotCQkgKiBPdGhlcndpc2UsIHVzZSB0aGUgc2FtZSBtdF9zdGF0ZSwgc2luY2UgaXQgZWl0aGVyIGhhc24ndAotCQkgKiBjaGFuZ2VkLCBvciB3YXMgdXBkYXRlZCBieSBhIHJlY2VudGx5IHJlY2VpdmVkIEFHTS1DT05UQUNUCi0JCSAqIHBhY2tldC4KLQkJICovCi0JCWJyZWFrOwotCWNhc2UgMzoKLQkJLyoKLQkJICogMy0+MiB0cmFuc2l0aW9ucyBoYXZlIHR3byB1bnNvbHZhYmxlIHByb2JsZW1zOgotCQkgKiAgMSkgbm8gaW5kaWNhdGlvbiBpcyBnaXZlbiB3aGljaCBmaW5nZXIgd2FzIHJlbW92ZWQKLQkJICogIDIpIG5vIHdheSB0byB0ZWxsIGlmIGFnbSBwYWNrZXQgd2FzIGZvciBmaW5nZXIgMwotCQkgKiAgICAgYmVmb3JlIDMtPjIsIG9yIGZpbmdlciAyIGFmdGVyIDMtPjIuCi0JCSAqCi0JCSAqIFNvLCByZXBvcnQgMiBmaW5nZXJzLCBidXQgZW1wdHkgYWxsIHNsb3RzLgotCQkgKiBXZSB3aWxsIGd1ZXNzIHNsb3RzIFswLDFdIG9uIHN1YnNlcXVlbnQgMi0+Mi4KLQkJICovCi0JCXN5bmFwdGljc19tdF9zdGF0ZV9zZXQobXRfc3RhdGUsIDIsIC0xLCAtMSk7Ci0JCXByaXYtPm10X3N0YXRlX2xvc3QgPSB0cnVlOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JY2FzZSA1OgotCQkvKiBtdF9zdGF0ZSB3YXMgdXBkYXRlZCBieSBBR00tQ09OVEFDVCBwYWNrZXQgKi8KLQkJYnJlYWs7Ci0JfQotfQotCi0vKiBIYW5kbGUgY2FzZSB3aGVyZSBtdF9zdGF0ZS0+Y291bnQgPSAzICovCi1zdGF0aWMgdm9pZCBzeW5hcHRpY3NfaW1hZ2Vfc2Vuc29yXzNmKHN0cnVjdCBzeW5hcHRpY3NfZGF0YSAqcHJpdiwKLQkJCQkgICAgICBzdHJ1Y3Qgc3luYXB0aWNzX210X3N0YXRlICptdF9zdGF0ZSkKLXsKLQlzdHJ1Y3Qgc3luYXB0aWNzX210X3N0YXRlICpvbGQgPSAmcHJpdi0+bXRfc3RhdGU7Ci0KLQlzd2l0Y2ggKG9sZC0+Y291bnQpIHsKLQljYXNlIDA6Ci0JCXN5bmFwdGljc19tdF9zdGF0ZV9zZXQobXRfc3RhdGUsIDMsIDAsIDIpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCS8qCi0JCSAqIElmIHByZXZpb3VzIFNHTSBjb250YWluZWQgc2xvdCAyIG9yIGhpZ2hlciwgU0dNIG5vdyBjb250YWlucwotCQkgKiBzbG90IDAgKG9uZSBvZiB0aGUgbmV3bHkgdG91Y2hpbmcgZmluZ2VycykgYW5kIEFHTSBjb250YWlucwotCQkgKiBTR00ncyBwcmV2aW91cyBzbG90LgotCQkgKgotCQkgKiBPdGhlcndpc2UsIFNHTSBub3cgY29udGFpbnMgc2xvdCAwIGFuZCBBR00gY29udGFpbnMgc2xvdCAyLgotCQkgKi8KLQkJaWYgKG9sZC0+c2dtID49IDIpCi0JCQlzeW5hcHRpY3NfbXRfc3RhdGVfc2V0KG10X3N0YXRlLCAzLCAwLCBvbGQtPnNnbSk7Ci0JCWVsc2UKLQkJCXN5bmFwdGljc19tdF9zdGF0ZV9zZXQobXRfc3RhdGUsIDMsIDAsIDIpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCS8qCi0JCSAqIElmIHRoZSBBR00gcHJldmlvdXNseSBjb250YWluZWQgc2xvdCAzIG9yIGhpZ2hlciwgdGhlbiB0aGUKLQkJICogbmV3bHkgdG91Y2hpbmcgZmluZ2VyIGlzIGluIHRoZSBsb3dlc3QgYXZhaWxhYmxlIHNsb3QuCi0JCSAqCi0JCSAqIElmIFNHTSB3YXMgcHJldmlvdXNseSAxIG9yIGhpZ2hlciwgdGhlbiB0aGUgbmV3IFNHTSBpcwotCQkgKiBub3cgc2xvdCAwICh3aXRoIGEgbmV3IGZpbmdlciksIG90aGVyd2lzZSwgdGhlIG5ldyBmaW5nZXIKLQkJICogaXMgbm93IGluIGEgaGlkZGVuIHNsb3QgYmV0d2VlbiAwIGFuZCBBR00ncyBzbG90LgotCQkgKgotCQkgKiBJbiBhbGwgc3VjaCBjYXNlcywgdGhlIFNHTSBub3cgY29udGFpbnMgc2xvdCAwLCBhbmQgdGhlIEFHTQotCQkgKiBjb250aW51ZXMgdG8gY29udGFpbiB0aGUgc2FtZSBzbG90IGFzIGJlZm9yZS4KLQkJICovCi0JCWlmIChvbGQtPmFnbSA+PSAzKSB7Ci0JCQlzeW5hcHRpY3NfbXRfc3RhdGVfc2V0KG10X3N0YXRlLCAzLCAwLCBvbGQtPmFnbSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIEFmdGVyIHNvbWUgMy0+MSBhbmQgYWxsIDMtPjIgdHJhbnNpdGlvbnMsIHdlIGxvc2UgdHJhY2sKLQkJICogb2Ygd2hpY2ggc2xvdCBpcyByZXBvcnRlZCBieSBTR00gYW5kIEFHTS4KLQkJICoKLQkJICogRm9yIDItPjMgaW4gdGhpcyBzdGF0ZSwgcmVwb3J0IDMgZmluZ2VycywgYnV0IGVtcHR5IGFsbAotCQkgKiBzbG90cywgYW5kIHdlIHdpbGwgZ3Vlc3MgKDAsMikgb24gYSBzdWJzZXF1ZW50IDAtPjMuCi0JCSAqCi0JCSAqIFRvIHVzZXJzcGFjZSwgdGhlIHJlc3VsdGluZyB0cmFuc2l0aW9uIHdpbGwgbG9vayBsaWtlOgotCQkgKiAgICAyOlswLDFdIC0+IDM6Wy0xLC0xXSAtPiAzOlswLDJdCi0JCSAqLwotCQlpZiAocHJpdi0+bXRfc3RhdGVfbG9zdCkgewotCQkJc3luYXB0aWNzX210X3N0YXRlX3NldChtdF9zdGF0ZSwgMywgLTEsIC0xKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyoKLQkJICogSWYgdGhlIChTR00sQUdNKSByZWFsbHkgcHJldmlvdXNseSBjb250YWluZWQgc2xvdHMgKDAsIDEpLAotCQkgKiB0aGVuIHdlIGNhbm5vdCBrbm93IHdoYXQgc2xvdCB3YXMganVzdCByZXBvcnRlZCBieSB0aGUgQUdNLAotCQkgKiBiZWNhdXNlIHRoZSAyLT4zIHRyYW5zaXRpb24gY2FuIG9jY3VyIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIKLQkJICogdGhlIEFHTSBwYWNrZXQuIFRodXMsIHRoaXMgbW9zdCByZWNlbnQgQUdNIGNvdWxkIGNvbnRhaW4KLQkJICogZWl0aGVyIHRoZSBzYW1lIG9sZCBzbG90IDEgb3IgdGhlIG5ldyBzbG90IDIuCi0JCSAqIFN1YnNlcXVlbnQgQUdNcyB3aWxsIGJlIHJlcG9ydGluZyBzbG90IDIuCi0JCSAqCi0JCSAqIFRvIHVzZXJzcGFjZSwgdGhlIHJlc3VsdGluZyB0cmFuc2l0aW9uIHdpbGwgbG9vayBsaWtlOgotCQkgKiAgICAyOlswLDFdIC0+IDM6WzAsLTFdIC0+IDM6WzAsMl0KLQkJICovCi0JCXN5bmFwdGljc19tdF9zdGF0ZV9zZXQobXRfc3RhdGUsIDMsIDAsIC0xKTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQkvKgotCQkgKiBJZiwgZm9yIHdoYXRldmVyIHJlYXNvbiwgdGhlIHByZXZpb3VzIGFnbSB3YXMgaW52YWxpZCwKLQkJICogQXNzdW1lIFNHTSBub3cgY29udGFpbnMgc2xvdCAwLCBBR00gbm93IGNvbnRhaW5zIHNsb3QgMi4KLQkJICovCi0JCWlmIChvbGQtPmFnbSA8PSAyKQotCQkJc3luYXB0aWNzX210X3N0YXRlX3NldChtdF9zdGF0ZSwgMywgMCwgMik7Ci0JCS8qCi0JCSAqIG10X3N0YXRlIGVpdGhlciBoYXNuJ3QgY2hhbmdlZCwgb3Igd2FzIHVwZGF0ZWQgYnkgYSByZWNlbnRseQotCQkgKiByZWNlaXZlZCBBR00tQ09OVEFDVCBwYWNrZXQuCi0JCSAqLwotCQlicmVhazsKLQotCWNhc2UgNDoKLQljYXNlIDU6Ci0JCS8qIG10X3N0YXRlIHdhcyB1cGRhdGVkIGJ5IEFHTS1DT05UQUNUIHBhY2tldCAqLwotCQlicmVhazsKLQl9Ci19Ci0KLS8qIEhhbmRsZSBjYXNlIHdoZXJlIG10X3N0YXRlLT5jb3VudCA9IDQsIG9yID0gNSAqLwotc3RhdGljIHZvaWQgc3luYXB0aWNzX2ltYWdlX3NlbnNvcl80NWYoc3RydWN0IHN5bmFwdGljc19kYXRhICpwcml2LAotCQkJCSAgICAgICBzdHJ1Y3Qgc3luYXB0aWNzX210X3N0YXRlICptdF9zdGF0ZSkKLXsKLQkvKiBtdF9zdGF0ZSB3YXMgdXBkYXRlZCBjb3JyZWN0bHkgYnkgQUdNLUNPTlRBQ1QgcGFja2V0ICovCi0JcHJpdi0+bXRfc3RhdGVfbG9zdCA9IGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBzeW5hcHRpY3NfaW1hZ2Vfc2Vuc29yX3Byb2Nlc3Moc3RydWN0IHBzbW91c2UgKnBzbW91c2UsCi0JCQkJCSAgIHN0cnVjdCBzeW5hcHRpY3NfaHdfc3RhdGUgKnNnbSkKLXsKLQlzdHJ1Y3Qgc3luYXB0aWNzX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOwotCXN0cnVjdCBzeW5hcHRpY3NfaHdfc3RhdGUgKmFnbSA9ICZwcml2LT5hZ207Ci0Jc3RydWN0IHN5bmFwdGljc19tdF9zdGF0ZSBtdF9zdGF0ZTsKLQotCS8qIEluaXRpYWxpemUgdXNpbmcgY3VycmVudCBtdF9zdGF0ZSAoYXMgdXBkYXRlZCBieSBsYXN0IGFnbSkgKi8KLQltdF9zdGF0ZSA9IGFnbS0+bXRfc3RhdGU7Ci0KLQkvKgotCSAqIFVwZGF0ZSBtdF9zdGF0ZSB1c2luZyB0aGUgbmV3IGZpbmdlciBjb3VudCBhbmQgY3VycmVudCBtdF9zdGF0ZS4KLQkgKi8KLQlpZiAoc2dtLT56ID09IDApCi0JCXN5bmFwdGljc19pbWFnZV9zZW5zb3JfMGYocHJpdiwgJm10X3N0YXRlKTsKLQllbHNlIGlmIChzZ20tPncgPj0gNCkKLQkJc3luYXB0aWNzX2ltYWdlX3NlbnNvcl8xZihwcml2LCAmbXRfc3RhdGUpOwotCWVsc2UgaWYgKHNnbS0+dyA9PSAwKQotCQlzeW5hcHRpY3NfaW1hZ2Vfc2Vuc29yXzJmKHByaXYsICZtdF9zdGF0ZSk7Ci0JZWxzZSBpZiAoc2dtLT53ID09IDEgJiYgbXRfc3RhdGUuY291bnQgPD0gMykKLQkJc3luYXB0aWNzX2ltYWdlX3NlbnNvcl8zZihwcml2LCAmbXRfc3RhdGUpOwotCWVsc2UKLQkJc3luYXB0aWNzX2ltYWdlX3NlbnNvcl80NWYocHJpdiwgJm10X3N0YXRlKTsKLQotCS8qIFNlbmQgcmVzdWx0aW5nIGlucHV0IGV2ZW50cyB0byB1c2VyIHNwYWNlICovCi0Jc3luYXB0aWNzX3JlcG9ydF9tdF9kYXRhKHBzbW91c2UsICZtdF9zdGF0ZSwgc2dtKTsKLQotCS8qIFN0b3JlIHVwZGF0ZWQgbXRfc3RhdGUgKi8KLQlwcml2LT5tdF9zdGF0ZSA9IGFnbS0+bXRfc3RhdGUgPSBtdF9zdGF0ZTsKLQlwcml2LT5hZ21fcGVuZGluZyA9IGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZCBzeW5hcHRpY3NfcHJvZmlsZV9zZW5zb3JfcHJvY2VzcyhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwKLQkJCQkJICAgICBzdHJ1Y3Qgc3luYXB0aWNzX2h3X3N0YXRlICpzZ20sCi0JCQkJCSAgICAgaW50IG51bV9maW5nZXJzKQotewotCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHBzbW91c2UtPmRldjsKLQlzdHJ1Y3Qgc3luYXB0aWNzX2RhdGEgKnByaXYgPSBwc21vdXNlLT5wcml2YXRlOwotCXN0cnVjdCBzeW5hcHRpY3NfaHdfc3RhdGUgKmh3WzJdID0geyBzZ20sICZwcml2LT5hZ20gfTsKKwljb25zdCBzdHJ1Y3Qgc3luYXB0aWNzX2h3X3N0YXRlICpod1syXSA9IHsgc2dtLCAmcHJpdi0+YWdtIH07CiAJc3RydWN0IGlucHV0X210X3BvcyBwb3NbMl07CiAJaW50IHNsb3RbMl0sIG5zZW1pLCBpOwogCkBAIC0xMjA0LDcgKzgxMyw3IEBACiAJCXBvc1tpXS55ID0gc3luYXB0aWNzX2ludmVydF95KGh3W2ldLT55KTsKIAl9CiAKLQlpbnB1dF9tdF9hc3NpZ25fc2xvdHMoZGV2LCBzbG90LCBwb3MsIG5zZW1pKTsKKwlpbnB1dF9tdF9hc3NpZ25fc2xvdHMoZGV2LCBzbG90LCBwb3MsIG5zZW1pLCBETUFYICogcHJpdi0+eF9yZXMpOwogCiAJZm9yIChpID0gMDsgaSA8IG5zZW1pOyBpKyspIHsKIAkJaW5wdXRfbXRfc2xvdChkZXYsIHNsb3RbaV0pOwpAQCAtMTIxNSw3ICs4MjQsMTEgQEAKIAl9CiAKIAlpbnB1dF9tdF9kcm9wX3VudXNlZChkZXYpOworCisJLyogRG9uJ3QgdXNlIGFjdGl2ZSBzbG90IGNvdW50IHRvIGdlbmVyYXRlIEJUTl9UT09MIGV2ZW50cy4gKi8KIAlpbnB1dF9tdF9yZXBvcnRfcG9pbnRlcl9lbXVsYXRpb24oZGV2LCBmYWxzZSk7CisKKwkvKiBTZW5kIHRoZSBudW1iZXIgb2YgZmluZ2VycyByZXBvcnRlZCBieSB0b3VjaHBhZCBpdHNlbGYuICovCiAJaW5wdXRfbXRfcmVwb3J0X2Zpbmdlcl9jb3VudChkZXYsIG51bV9maW5nZXJzKTsKIAogCXN5bmFwdGljc19yZXBvcnRfYnV0dG9ucyhwc21vdXNlLCBzZ20pOwpAQCAtMTIyMyw2ICs4MzYsMzAgQEAKIAlpbnB1dF9zeW5jKGRldik7CiB9CiAKK3N0YXRpYyB2b2lkIHN5bmFwdGljc19pbWFnZV9zZW5zb3JfcHJvY2VzcyhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwKKwkJCQkJICAgc3RydWN0IHN5bmFwdGljc19od19zdGF0ZSAqc2dtKQoreworCXN0cnVjdCBzeW5hcHRpY3NfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CisJaW50IG51bV9maW5nZXJzOworCisJLyoKKwkgKiBVcGRhdGUgbXRfc3RhdGUgdXNpbmcgdGhlIG5ldyBmaW5nZXIgY291bnQgYW5kIGN1cnJlbnQgbXRfc3RhdGUuCisJICovCisJaWYgKHNnbS0+eiA9PSAwKQorCQludW1fZmluZ2VycyA9IDA7CisJZWxzZSBpZiAoc2dtLT53ID49IDQpCisJCW51bV9maW5nZXJzID0gMTsKKwllbHNlIGlmIChzZ20tPncgPT0gMCkKKwkJbnVtX2ZpbmdlcnMgPSAyOworCWVsc2UgaWYgKHNnbS0+dyA9PSAxKQorCQludW1fZmluZ2VycyA9IHByaXYtPmFnbV9jb3VudCA/IHByaXYtPmFnbV9jb3VudCA6IDM7CisJZWxzZQorCQludW1fZmluZ2VycyA9IDQ7CisKKwkvKiBTZW5kIHJlc3VsdGluZyBpbnB1dCBldmVudHMgdG8gdXNlciBzcGFjZSAqLworCXN5bmFwdGljc19yZXBvcnRfbXRfZGF0YShwc21vdXNlLCBzZ20sIG51bV9maW5nZXJzKTsKK30KKwogLyoKICAqICBjYWxsZWQgZm9yIGVhY2ggZnVsbCByZWNlaXZlZCBwYWNrZXQgZnJvbSB0aGUgdG91Y2hwYWQKICAqLwpAQCAtMTI4Nyw3ICs5MjQsNyBAQAogCX0KIAogCWlmIChjcjQ4X3Byb2ZpbGVfc2Vuc29yKSB7Ci0JCXN5bmFwdGljc19wcm9maWxlX3NlbnNvcl9wcm9jZXNzKHBzbW91c2UsICZodywgbnVtX2ZpbmdlcnMpOworCQlzeW5hcHRpY3NfcmVwb3J0X210X2RhdGEocHNtb3VzZSwgJmh3LCBudW1fZmluZ2Vycyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE0NDQsNyArMTA4MSw3IEBACiAJCQkJCUFCU19NVF9QT1NJVElPTl9ZKTsKIAkJLyogSW1hZ2Ugc2Vuc29ycyBjYW4gcmVwb3J0IHBlci1jb250YWN0IHByZXNzdXJlICovCiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX01UX1BSRVNTVVJFLCAwLCAyNTUsIDAsIDApOwotCQlpbnB1dF9tdF9pbml0X3Nsb3RzKGRldiwgMiwgSU5QVVRfTVRfUE9JTlRFUik7CisJCWlucHV0X210X2luaXRfc2xvdHMoZGV2LCAyLCBJTlBVVF9NVF9QT0lOVEVSIHwgSU5QVVRfTVRfVFJBQ0spOwogCiAJCS8qIEltYWdlIHNlbnNvcnMgY2FuIHNpZ25hbCA0IGFuZCA1IGZpbmdlciBjbGlja3MgKi8KIAkJX19zZXRfYml0KEJUTl9UT09MX1FVQURUQVAsIGRldi0+a2V5Yml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmggYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5oCmluZGV4IDFiZDAxZjIuLjZmYWY5YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmgKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuaApAQCAtMTE5LDE2ICsxMTksNiBAQAogI2RlZmluZSBTWU5fUkVEVUNFRF9GSUxURVJfRlVaWgkJOAogCiAvKgotICogQSBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgd2hpY2ggaW50ZXJuYWwgdG91Y2hwYWQgZmluZ2VyIHNsb3RzIGFyZSBiZWluZwotICogcmVwb3J0ZWQgaW4gcmF3IHBhY2tldHMuCi0gKi8KLXN0cnVjdCBzeW5hcHRpY3NfbXRfc3RhdGUgewotCWludCBjb3VudDsJCQkvKiBudW0gZmluZ2VycyBiZWluZyB0cmFja2VkICovCi0JaW50IHNnbTsJCQkvKiB3aGljaCBzbG90IGlzIHJlcG9ydGVkIGJ5IHNnbSBwa3QgKi8KLQlpbnQgYWdtOwkJCS8qIHdoaWNoIHNsb3QgaXMgcmVwb3J0ZWQgYnkgYWdtIHBrdCovCi19OwotCi0vKgogICogQSBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgdGhlIHN0YXRlIG9mIHRoZSB0b3VjaHBhZCBoYXJkd2FyZSAoYnV0dG9ucyBhbmQgcGFkKQogICovCiBzdHJ1Y3Qgc3luYXB0aWNzX2h3X3N0YXRlIHsKQEAgLTE0Myw5ICsxMzMsNiBAQAogCXVuc2lnbmVkIGludCBkb3duOjE7CiAJdW5zaWduZWQgY2hhciBleHRfYnV0dG9uczsKIAlzaWduZWQgY2hhciBzY3JvbGw7Ci0KLQkvKiBBcyByZXBvcnRlZCBpbiBsYXN0IEFHTS1DT05UQUNUIHBhY2tldHMgKi8KLQlzdHJ1Y3Qgc3luYXB0aWNzX210X3N0YXRlIG10X3N0YXRlOwogfTsKIAogc3RydWN0IHN5bmFwdGljc19kYXRhIHsKQEAgLTE3MCwxNSArMTU3LDEyIEBACiAKIAlzdHJ1Y3Qgc2VyaW8gKnB0X3BvcnQ7CQkJLyogUGFzcy10aHJvdWdoIHNlcmlvIHBvcnQgKi8KIAotCXN0cnVjdCBzeW5hcHRpY3NfbXRfc3RhdGUgbXRfc3RhdGU7CS8qIEN1cnJlbnQgbXQgZmluZ2VyIHN0YXRlICovCi0JYm9vbCBtdF9zdGF0ZV9sb3N0OwkJCS8qIG10X3N0YXRlIG1heSBiZSBpbmNvcnJlY3QgKi8KLQogCS8qCiAJICogTGFzdCByZWNlaXZlZCBBZHZhbmNlZCBHZXN0dXJlIE1vZGUgKEFHTSkgcGFja2V0LiBBbiBBR00gcGFja2V0CiAJICogY29udGFpbnMgcG9zaXRpb24gZGF0YSBmb3IgYSBzZWNvbmQgY29udGFjdCwgYXQgaGFsZiByZXNvbHV0aW9uLgogCSAqLwogCXN0cnVjdCBzeW5hcHRpY3NfaHdfc3RhdGUgYWdtOwotCWJvb2wgYWdtX3BlbmRpbmc7CQkJLyogbmV3IEFHTSBwYWNrZXQgcmVjZWl2ZWQgKi8KKwl1bnNpZ25lZCBpbnQgYWdtX2NvdW50OwkJCS8qIGZpbmdlciBjb3VudCByZXBvcnRlZCBieSBhZ20gKi8KIAogCS8qIEZvcmNlUGFkIGhhbmRsaW5nICovCiAJdW5zaWduZWQgbG9uZwkJCQlwcmVzc19zdGFydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vS2NvbmZpZwppbmRleCBiYzJkNDc0Li43NzgzM2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9LY29uZmlnCkBAIC0yODEsNCArMjgxLDE0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwKIAkgIGJlIGNhbGxlZCBoeXBlcnZfa2V5Ym9hcmQuCiAKK2NvbmZpZyBTRVJJT19TVU40SV9QUzIKKwl0cmlzdGF0ZSAiQWxsd2lubmVyIEExMCBQUy8yIGNvbnRyb2xsZXIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEFSQ0hfU1VOWEkgfHwgQ09NUElMRV9URVNUCisJaGVscAorCSAgVGhpcyBzZWxlY3RzIHN1cHBvcnQgZm9yIHRoZSBQUy8yIEhvc3QgQ29udHJvbGxlciBvbgorCSAgQWxsd2lubmVyIEExMC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc3VuNGktcHMyLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vTWFrZWZpbGUKaW5kZXggODE1ZDg3NC4uYzYwMDA4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL01ha2VmaWxlCkBAIC0yOSwzICsyOSw0IEBACiBvYmotJChDT05GSUdfU0VSSU9fQVBCUFMyKQkrPSBhcGJwczIubwogb2JqLSQoQ09ORklHX1NFUklPX09MUENfQVBTUCkJKz0gb2xwY19hcHNwLm8KIG9iai0kKENPTkZJR19IWVBFUlZfS0VZQk9BUkQpCSs9IGh5cGVydi1rZXlib2FyZC5vCitvYmotJChDT05GSUdfU0VSSU9fU1VONElfUFMyKQkrPSBzdW40aS1wczIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9nc2NwczIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vZ3NjcHMyLmMKaW5kZXggOGQ5YmEwYy4uOTRhYjQ5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9nc2NwczIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2dzY3BzMi5jCkBAIC00MCw3ICs0MCw2IEBACiBNT0RVTEVfQVVUSE9SKCJMYXVyZW50IENhbmV0IDxjYW5ldGxAZXNpZWUuZnI+LCBUaGliYXV0IFZhcmVuZSA8dmFyZW5ldEBwYXJpc2MtbGludXgub3JnPiwgSGVsZ2UgRGVsbGVyIDxkZWxsZXJAZ214LmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJIUCBHU0MgUFMyIHBvcnQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBhcmlzYywgZ3NjcHMyX2RldmljZV90YmwpOwogCiAjZGVmaW5lIFBGWCAiZ3NjcHMyLmM6ICIKIApAQCAtNDM5LDYgKzQzOCw3IEBACiAjZW5kaWYKIAl7IDAsIH0JLyogMCB0ZXJtaW5hdGVkIGxpc3QgKi8KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKHBhcmlzYywgZ3NjcHMyX2RldmljZV90YmwpOwogCiBzdGF0aWMgc3RydWN0IHBhcmlzY19kcml2ZXIgcGFyaXNjX3BzMl9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gImdzY19wczIiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIteDg2aWE2NGlvLmgKaW5kZXggNzY0ODU3Yi4uYzExNTU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi14ODZpYTY0aW8uaAorKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLXg4NmlhNjRpby5oCkBAIC0xNTIsNiArMTUyLDE0IEBACiAJCX0sCiAJfSwKIAl7CisJCS8qIE1lZGlvbiBBa295YSBFNzIyNSAqLworCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIk1lZGlvbiIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX05BTUUsICJBa295YSBFNzIyNSIpLAorCQkJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sICIxLjAiKSwKKwkJfSwKKwl9LAorCXsKIAkJLyogQmx1ZSBGQjU2MDEgKi8KIAkJLm1hdGNoZXMgPSB7CiAJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJibHVlIiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3N1bjRpLXBzMi5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zdW40aS1wczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGI5NmZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zdW40aS1wczIuYwpAQCAtMCwwICsxLDM0MCBAQAorLyoKKyAqCURyaXZlciBmb3IgQWxsd2lubmVyIEExMCBQUzIgaG9zdCBjb250cm9sbGVyCisgKgorICoJQXV0aG9yOiBWaXNobnUgUGF0ZWthciA8dmlzaG51cGF0ZWthcjA1MTBAZ21haWwuY29tPgorICoJCUFhcm9uLm1hb3llIDxsZWFmeS5teWVoQG5ld2JpZXRlY2guY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpby5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUJCSJzdW40aS1wczIiCisKKy8qIHJlZ2lzdGVyIG9mZnNldCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBQUzJfUkVHX0dDVEwJCTB4MDAJLyogUFMyIE1vZHVsZSBHbG9iYWwgQ29udHJvbCBSZWcgKi8KKyNkZWZpbmUgUFMyX1JFR19EQVRBCQkweDA0CS8qIFBTMiBNb2R1bGUgRGF0YSBSZWcJCSovCisjZGVmaW5lIFBTMl9SRUdfTENUTAkJMHgwOAkvKiBQUzIgTW9kdWxlIExpbmUgQ29udHJvbCBSZWcgKi8KKyNkZWZpbmUgUFMyX1JFR19MU1RTCQkweDBDCS8qIFBTMiBNb2R1bGUgTGluZSBTdGF0dXMgUmVnCSovCisjZGVmaW5lIFBTMl9SRUdfRkNUTAkJMHgxMAkvKiBQUzIgTW9kdWxlIEZJRk8gQ29udHJvbCBSZWcgKi8KKyNkZWZpbmUgUFMyX1JFR19GU1RTCQkweDE0CS8qIFBTMiBNb2R1bGUgRklGTyBTdGF0dXMgUmVnCSovCisjZGVmaW5lIFBTMl9SRUdfQ0xLRFIJCTB4MTgJLyogUFMyIE1vZHVsZSBDbG9jayBEaXZpZGVyIFJlZyovCisKKy8qICBQUzIgR0xPQkFMIENPTlRST0wgUkVHSVNURVIgUFMyX0dDVEwgKi8KKyNkZWZpbmUgUFMyX0dDVExfSU5URkxBRwlCSVQoNCkKKyNkZWZpbmUgUFMyX0dDVExfSU5URU4JCUJJVCgzKQorI2RlZmluZSBQUzJfR0NUTF9SRVNFVAkJQklUKDIpCisjZGVmaW5lIFBTMl9HQ1RMX01BU1RFUgkJQklUKDEpCisjZGVmaW5lIFBTMl9HQ1RMX0JVU0VOCQlCSVQoMCkKKworLyogUFMyIExJTkUgQ09OVFJPTCBSRUdJU1RFUiAqLworI2RlZmluZSBQUzJfTENUTF9OT0FDSwkJQklUKDE4KQorI2RlZmluZSBQUzJfTENUTF9UWERUT0VOCUJJVCg4KQorI2RlZmluZSBQUzJfTENUTF9TVE9QRVJSRU4JQklUKDMpCisjZGVmaW5lIFBTMl9MQ1RMX0FDS0VSUkVOCUJJVCgyKQorI2RlZmluZSBQUzJfTENUTF9QQVJFUlJFTglCSVQoMSkKKyNkZWZpbmUgUFMyX0xDVExfUlhEVE9FTglCSVQoMCkKKworLyogUFMyIExJTkUgU1RBVFVTIFJFR0lTVEVSICovCisjZGVmaW5lIFBTMl9MU1RTX1RYVERPCQlCSVQoOCkKKyNkZWZpbmUgUFMyX0xTVFNfU1RPUEVSUglCSVQoMykKKyNkZWZpbmUgUFMyX0xTVFNfQUNLRVJSCQlCSVQoMikKKyNkZWZpbmUgUFMyX0xTVFNfUEFSRVJSCQlCSVQoMSkKKyNkZWZpbmUgUFMyX0xTVFNfUlhURE8JCUJJVCgwKQorCisjZGVmaW5lIFBTMl9MSU5FX0VSUk9SX0JJVCBcCisJKFBTMl9MU1RTX1RYVERPIHwgUFMyX0xTVFNfU1RPUEVSUiB8IFBTMl9MU1RTX0FDS0VSUiB8IFwKKwlQUzJfTFNUU19QQVJFUlIgfCBQUzJfTFNUU19SWFRETykKKworLyogUFMyIEZJRk8gQ09OVFJPTCBSRUdJU1RFUiAqLworI2RlZmluZSBQUzJfRkNUTF9UWFJTVAkJQklUKDE3KQorI2RlZmluZSBQUzJfRkNUTF9SWFJTVAkJQklUKDE2KQorI2RlZmluZSBQUzJfRkNUTF9UWFVGSUVOCUJJVCgxMCkKKyNkZWZpbmUgUFMyX0ZDVExfVFhPRklFTglCSVQoOSkKKyNkZWZpbmUgUFMyX0ZDVExfVFhSRFlJRU4JQklUKDgpCisjZGVmaW5lIFBTMl9GQ1RMX1JYVUZJRU4JQklUKDIpCisjZGVmaW5lIFBTMl9GQ1RMX1JYT0ZJRU4JQklUKDEpCisjZGVmaW5lIFBTMl9GQ1RMX1JYUkRZSUVOCUJJVCgwKQorCisvKiBQUzIgRklGTyBTVEFUVVMgUkVHSVNURVIgKi8KKyNkZWZpbmUgUFMyX0ZTVFNfVFhVRgkJQklUKDEwKQorI2RlZmluZSBQUzJfRlNUU19UWE9GCQlCSVQoOSkKKyNkZWZpbmUgUFMyX0ZTVFNfVFhSRFkJCUJJVCg4KQorI2RlZmluZSBQUzJfRlNUU19SWFVGCQlCSVQoMikKKyNkZWZpbmUgUFMyX0ZTVFNfUlhPRgkJQklUKDEpCisjZGVmaW5lIFBTMl9GU1RTX1JYUkRZCQlCSVQoMCkKKworI2RlZmluZSBQUzJfRklGT19FUlJPUl9CSVQgXAorCShQUzJfRlNUU19UWFVGIHwgUFMyX0ZTVFNfVFhPRiB8IFBTMl9GU1RTX1JYVUYgfCBQUzJfRlNUU19SWE9GKQorCisjZGVmaW5lIFBTMl9TQU1QTEVfQ0xLCQkxMDAwMDAwCisjZGVmaW5lIFBTMl9TQ0xLCQkxMjUwMDAKKworc3RydWN0IHN1bjRpX3BzMmRhdGEgeworCXN0cnVjdCBzZXJpbyAqc2VyaW87CisJc3RydWN0IGRldmljZSAqZGV2OworCisJLyogSU8gbWFwcGluZyBiYXNlICovCisJdm9pZCBfX2lvbWVtCSpyZWdfYmFzZTsKKworCS8qIGNsb2NrIG1hbmFnZW1lbnQgKi8KKwlzdHJ1Y3QgY2xrCSpjbGs7CisKKwkvKiBpcnEgKi8KKwlzcGlubG9ja190CWxvY2s7CisJaW50CQlpcnE7Cit9OworCitzdGF0aWMgaXJxcmV0dXJuX3Qgc3VuNGlfcHMyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHN1bjRpX3BzMmRhdGEgKmRydmRhdGEgPSBkZXZfaWQ7CisJdTMyIGludHJfc3RhdHVzOworCXUzMiBmaWZvX3N0YXR1czsKKwl1bnNpZ25lZCBjaGFyIGJ5dGU7CisJdW5zaWduZWQgaW50IHJ4ZmxhZ3MgPSAwOworCXUzMiBydmFsOworCisJc3Bpbl9sb2NrKCZkcnZkYXRhLT5sb2NrKTsKKworCS8qIEdldCB0aGUgUFMvMiBpbnRlcnJ1cHRzIGFuZCBjbGVhciB0aGVtICovCisJaW50cl9zdGF0dXMgID0gcmVhZGwoZHJ2ZGF0YS0+cmVnX2Jhc2UgKyBQUzJfUkVHX0xTVFMpOworCWZpZm9fc3RhdHVzICA9IHJlYWRsKGRydmRhdGEtPnJlZ19iYXNlICsgUFMyX1JFR19GU1RTKTsKKworCS8qIENoZWNrIGxpbmUgc3RhdHVzIHJlZ2lzdGVyICovCisJaWYgKGludHJfc3RhdHVzICYgUFMyX0xJTkVfRVJST1JfQklUKSB7CisJCXJ4ZmxhZ3MgPSAoaW50cl9zdGF0dXMgJiBQUzJfTElORV9FUlJPUl9CSVQpID8gU0VSSU9fRlJBTUUgOiAwOworCQlyeGZsYWdzIHw9IChpbnRyX3N0YXR1cyAmIFBTMl9MU1RTX1BBUkVSUikgPyBTRVJJT19QQVJJVFkgOiAwOworCQlyeGZsYWdzIHw9IChpbnRyX3N0YXR1cyAmIFBTMl9MU1RTX1BBUkVSUikgPyBTRVJJT19USU1FT1VUIDogMDsKKworCQlydmFsID0gUFMyX0xTVFNfVFhURE8gfCBQUzJfTFNUU19TVE9QRVJSIHwgUFMyX0xTVFNfQUNLRVJSIHwKKwkJCVBTMl9MU1RTX1BBUkVSUiB8IFBTMl9MU1RTX1JYVERPOworCQl3cml0ZWwocnZhbCwgZHJ2ZGF0YS0+cmVnX2Jhc2UgKyBQUzJfUkVHX0xTVFMpOworCX0KKworCS8qIENoZWNrIEZJRk8gc3RhdHVzIHJlZ2lzdGVyICovCisJaWYgKGZpZm9fc3RhdHVzICYgUFMyX0ZJRk9fRVJST1JfQklUKSB7CisJCXJ2YWwgPSBQUzJfRlNUU19UWFVGIHwgUFMyX0ZTVFNfVFhPRiB8IFBTMl9GU1RTX1RYUkRZIHwKKwkJCVBTMl9GU1RTX1JYVUYgfCBQUzJfRlNUU19SWE9GIHwgUFMyX0ZTVFNfUlhSRFk7CisJCXdyaXRlbChydmFsLCBkcnZkYXRhLT5yZWdfYmFzZSArIFBTMl9SRUdfRlNUUyk7CisJfQorCisJcnZhbCA9IChmaWZvX3N0YXR1cyA+PiAxNikgJiAweDM7CisJd2hpbGUgKHJ2YWwtLSkgeworCQlieXRlID0gcmVhZGwoZHJ2ZGF0YS0+cmVnX2Jhc2UgKyBQUzJfUkVHX0RBVEEpICYgMHhmZjsKKwkJc2VyaW9faW50ZXJydXB0KGRydmRhdGEtPnNlcmlvLCBieXRlLCByeGZsYWdzKTsKKwl9CisKKwl3cml0ZWwoaW50cl9zdGF0dXMsIGRydmRhdGEtPnJlZ19iYXNlICsgUFMyX1JFR19MU1RTKTsKKwl3cml0ZWwoZmlmb19zdGF0dXMsIGRydmRhdGEtPnJlZ19iYXNlICsgUFMyX1JFR19GU1RTKTsKKworCXNwaW5fdW5sb2NrKCZkcnZkYXRhLT5sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBzdW40aV9wczJfb3BlbihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQoreworCXN0cnVjdCBzdW40aV9wczJkYXRhICpkcnZkYXRhID0gc2VyaW8tPnBvcnRfZGF0YTsKKwl1MzIgc3JjX2NsayA9IDA7CisJdTMyIGNsa19zY2RmOworCXUzMiBjbGtfcGNkZjsKKwl1MzIgcnZhbDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogU2V0IGxpbmUgY29udHJvbCBhbmQgZW5hYmxlIGludGVycnVwdCAqLworCXJ2YWwgPSBQUzJfTENUTF9TVE9QRVJSRU4gfCBQUzJfTENUTF9BQ0tFUlJFTgorCQl8IFBTMl9MQ1RMX1BBUkVSUkVOIHwgUFMyX0xDVExfUlhEVE9FTjsKKwl3cml0ZWwocnZhbCwgZHJ2ZGF0YS0+cmVnX2Jhc2UgKyBQUzJfUkVHX0xDVEwpOworCisJLyogUmVzZXQgRklGTyAqLworCXJ2YWwgPSBQUzJfRkNUTF9UWFJTVCB8IFBTMl9GQ1RMX1JYUlNUIHwgUFMyX0ZDVExfVFhVRklFTgorCQl8IFBTMl9GQ1RMX1RYT0ZJRU4gfCBQUzJfRkNUTF9SWFVGSUVOCisJCXwgUFMyX0ZDVExfUlhPRklFTiB8IFBTMl9GQ1RMX1JYUkRZSUVOOworCisJd3JpdGVsKHJ2YWwsIGRydmRhdGEtPnJlZ19iYXNlICsgUFMyX1JFR19GQ1RMKTsKKworCXNyY19jbGsgPSBjbGtfZ2V0X3JhdGUoZHJ2ZGF0YS0+Y2xrKTsKKwkvKiBTZXQgY2xvY2sgZGl2aWRlciByZWdpc3RlciAqLworCWNsa19zY2RmID0gc3JjX2NsayAvIFBTMl9TQU1QTEVfQ0xLIC0gMTsKKwljbGtfcGNkZiA9IFBTMl9TQU1QTEVfQ0xLIC8gUFMyX1NDTEsgLSAxOworCXJ2YWwgPSAoY2xrX3NjZGYgPDwgOCkgfCBjbGtfcGNkZjsKKwl3cml0ZWwocnZhbCwgZHJ2ZGF0YS0+cmVnX2Jhc2UgKyBQUzJfUkVHX0NMS0RSKTsKKworCS8qIFNldCBnbG9iYWwgY29udHJvbCByZWdpc3RlciAqLworCXJ2YWwgPSBQUzJfR0NUTF9SRVNFVCB8IFBTMl9HQ1RMX0lOVEVOIHwgUFMyX0dDVExfTUFTVEVSCisJCXwgUFMyX0dDVExfQlVTRU47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZHJ2ZGF0YS0+bG9jaywgZmxhZ3MpOworCXdyaXRlbChydmFsLCBkcnZkYXRhLT5yZWdfYmFzZSArIFBTMl9SRUdfR0NUTCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHJ2ZGF0YS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHN1bjRpX3BzMl9jbG9zZShzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQoreworCXN0cnVjdCBzdW40aV9wczJkYXRhICpkcnZkYXRhID0gc2VyaW8tPnBvcnRfZGF0YTsKKwl1MzIgcnZhbDsKKworCS8qIFNodXQgb2ZmIHRoZSBpbnRlcnJ1cHQgKi8KKwlydmFsID0gcmVhZGwoZHJ2ZGF0YS0+cmVnX2Jhc2UgKyBQUzJfUkVHX0dDVEwpOworCXdyaXRlbChydmFsICYgfihQUzJfR0NUTF9JTlRFTiksIGRydmRhdGEtPnJlZ19iYXNlICsgUFMyX1JFR19HQ1RMKTsKKworCXN5bmNocm9uaXplX2lycShkcnZkYXRhLT5pcnEpOworfQorCitzdGF0aWMgaW50IHN1bjRpX3BzMl93cml0ZShzdHJ1Y3Qgc2VyaW8gKnNlcmlvLCB1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGV4cGlyZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDAwKTsKKwlzdHJ1Y3Qgc3VuNGlfcHMyZGF0YSAqZHJ2ZGF0YSA9IHNlcmlvLT5wb3J0X2RhdGE7CisKKwlkbyB7CisJCWlmIChyZWFkbChkcnZkYXRhLT5yZWdfYmFzZSArIFBTMl9SRUdfRlNUUykgJiBQUzJfRlNUU19UWFJEWSkgeworCQkJd3JpdGVsKHZhbCwgZHJ2ZGF0YS0+cmVnX2Jhc2UgKyBQUzJfUkVHX0RBVEEpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBleHBpcmUpKTsKKworCXJldHVybiBTRVJJT19USU1FT1VUOworfQorCitzdGF0aWMgaW50IHN1bjRpX3BzMl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOyAvKiBJTyBtZW0gcmVzb3VyY2VzICovCisJc3RydWN0IHN1bjRpX3BzMmRhdGEgKmRydmRhdGE7CisJc3RydWN0IHNlcmlvICpzZXJpbzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXVuc2lnbmVkIGludCBpcnE7CisJaW50IGVycm9yOworCisJZHJ2ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdW40aV9wczJkYXRhKSwgR0ZQX0tFUk5FTCk7CisJc2VyaW8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2VyaW8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRydmRhdGEgfHwgIXNlcmlvKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJmRydmRhdGEtPmxvY2spOworCisJLyogSU8gKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGxvY2F0ZSByZWdpc3RlcnNcbiIpOworCQllcnJvciA9IC1FTlhJTzsKKwkJZ290byBlcnJfZnJlZV9tZW07CisJfQorCisJZHJ2ZGF0YS0+cmVnX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFkcnZkYXRhLT5yZWdfYmFzZSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX21lbTsKKwl9CisKKwlkcnZkYXRhLT5jbGsgPSBjbGtfZ2V0KGRldiwgTlVMTCk7CisJaWYgKElTX0VSUihkcnZkYXRhLT5jbGspKSB7CisJCWVycm9yID0gUFRSX0VSUihkcnZkYXRhLT5jbGspOworCQlkZXZfZXJyKGRldiwgImNvdWxkbid0IGdldCBjbG9jayAlZFxuIiwgZXJyb3IpOworCQlnb3RvIGVycl9pb3JlbWFwOworCX0KKworCWVycm9yID0gY2xrX3ByZXBhcmVfZW5hYmxlKGRydmRhdGEtPmNsayk7CisJaWYgKGVycm9yKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBjbG9jayAlZFxuIiwgZXJyb3IpOworCQlnb3RvIGVycl9jbGs7CisJfQorCisJc2VyaW8tPmlkLnR5cGUgPSBTRVJJT184MDQyOworCXNlcmlvLT53cml0ZSA9IHN1bjRpX3BzMl93cml0ZTsKKwlzZXJpby0+b3BlbiA9IHN1bjRpX3BzMl9vcGVuOworCXNlcmlvLT5jbG9zZSA9IHN1bjRpX3BzMl9jbG9zZTsKKwlzZXJpby0+cG9ydF9kYXRhID0gZHJ2ZGF0YTsKKwlzZXJpby0+ZGV2LnBhcmVudCA9IGRldjsKKwlzdHJsY3B5KHNlcmlvLT5uYW1lLCBkZXZfbmFtZShkZXYpLCBzaXplb2Yoc2VyaW8tPm5hbWUpKTsKKwlzdHJsY3B5KHNlcmlvLT5waHlzLCBkZXZfbmFtZShkZXYpLCBzaXplb2Yoc2VyaW8tPnBoeXMpKTsKKworCS8qIHNodXRvZmYgaW50ZXJydXB0ICovCisJd3JpdGVsKDAsIGRydmRhdGEtPnJlZ19iYXNlICsgUFMyX1JFR19HQ1RMKTsKKworCS8qIEdldCBJUlEgZm9yIHRoZSBkZXZpY2UgKi8KKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmICghaXJxKSB7CisJCWRldl9lcnIoZGV2LCAibm8gSVJRIGZvdW5kXG4iKTsKKwkJZXJyb3IgPSAtRU5YSU87CisJCWdvdG8gZXJyX2Rpc2FibGVfY2xrOworCX0KKworCWRydmRhdGEtPmlycSA9IGlycTsKKwlkcnZkYXRhLT5zZXJpbyA9IHNlcmlvOworCWRydmRhdGEtPmRldiA9IGRldjsKKworCWVycm9yID0gcmVxdWVzdF9pcnEoZHJ2ZGF0YS0+aXJxLCBzdW40aV9wczJfaW50ZXJydXB0LCAwLAorCQkJICAgIERSSVZFUl9OQU1FLCBkcnZkYXRhKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycihkcnZkYXRhLT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgaW50ZXJydXB0ICVkOiAlZFxuIiwKKwkJCWRydmRhdGEtPmlycSwgZXJyb3IpOworCQlnb3RvIGVycl9kaXNhYmxlX2NsazsKKwl9CisKKwlzZXJpb19yZWdpc3Rlcl9wb3J0KHNlcmlvKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkcnZkYXRhKTsKKworCXJldHVybiAwOwkvKiBzdWNjZXNzICovCisKK2Vycl9kaXNhYmxlX2NsazoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZHJ2ZGF0YS0+Y2xrKTsKK2Vycl9jbGs6CisJY2xrX3B1dChkcnZkYXRhLT5jbGspOworZXJyX2lvcmVtYXA6CisJaW91bm1hcChkcnZkYXRhLT5yZWdfYmFzZSk7CitlcnJfZnJlZV9tZW06CisJa2ZyZWUoc2VyaW8pOworCWtmcmVlKGRydmRhdGEpOworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIGludCBzdW40aV9wczJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHN1bjRpX3BzMmRhdGEgKmRydmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXNlcmlvX3VucmVnaXN0ZXJfcG9ydChkcnZkYXRhLT5zZXJpbyk7CisKKwlmcmVlX2lycShkcnZkYXRhLT5pcnEsIGRydmRhdGEpOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRydmRhdGEtPmNsayk7CisJY2xrX3B1dChkcnZkYXRhLT5jbGspOworCisJaW91bm1hcChkcnZkYXRhLT5yZWdfYmFzZSk7CisKKwlrZnJlZShkcnZkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzdW40aV9wczJfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtcHMyIiwgfSwKKwl7IH0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzdW40aV9wczJfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzdW40aV9wczJfZHJpdmVyID0geworCS5wcm9iZQkJPSBzdW40aV9wczJfcHJvYmUsCisJLnJlbW92ZQkJPSBzdW40aV9wczJfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJJVkVSX05BTUUsCisJCS5vZl9tYXRjaF90YWJsZSA9IHN1bjRpX3BzMl9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3VuNGlfcHMyX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIlZpc2hudSBQYXRla2FyIDx2aXNobnVwYXRla2FyMDUxMEBnbWFpbC5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJBYXJvbi5tYW95ZSA8bGVhZnkubXllaEBuZXdiaWV0ZWNoLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQWxsd2lubmVyIEExMC9TdW40aSBQUy8yIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jCmluZGV4IDg1ODA0NTYuLjNhN2YzYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2d0Y28uYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9ndGNvLmMKQEAgLTU5LDcgKzU5LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgogCkBAIC02MTQsNyArNjE0LDYgQEAKIAlzdHJ1Y3QgaW5wdXRfZGV2ICAqaW5wdXRkZXY7CiAJaW50ICAgICAgICAgICAgICAgcmM7CiAJdTMyICAgICAgICAgICAgICAgdmFsID0gMDsKLQlzOCAgICAgICAgICAgICAgICB2YWxzaWduZWQgPSAwOwogCWNoYXIgICAgICAgICAgICAgIGxlX2J1ZmZlclsyXTsKIAogCWlucHV0ZGV2ID0gZGV2aWNlLT5pbnB1dGRldmljZTsKQEAgLTY2NSwyMCArNjY0LDExIEBACiAJCQkvKiBGYWxsIHRocnUgKi8KIAkJY2FzZSA0OgogCQkJLyogVGlsdCAqLworCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX1RJTFRfWCwKKwkJCQkJIHNpZ25fZXh0ZW5kMzIoZGV2aWNlLT5idWZmZXJbNl0sIDYpKTsKIAotCQkJLyogU2lnbiBleHRlbmQgdGhlc2UgNyBiaXQgbnVtYmVycy4gICovCi0JCQlpZiAoZGV2aWNlLT5idWZmZXJbNl0gJiAweDQwKQotCQkJCWRldmljZS0+YnVmZmVyWzZdIHw9IDB4ODA7Ci0KLQkJCWlmIChkZXZpY2UtPmJ1ZmZlcls3XSAmIDB4NDApCi0JCQkJZGV2aWNlLT5idWZmZXJbN10gfD0gMHg4MDsKLQotCi0JCQl2YWxzaWduZWQgPSAoZGV2aWNlLT5idWZmZXJbNl0pOwotCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX1RJTFRfWCwgKHMzMil2YWxzaWduZWQpOwotCi0JCQl2YWxzaWduZWQgPSAoZGV2aWNlLT5idWZmZXJbN10pOwotCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX1RJTFRfWSwgKHMzMil2YWxzaWduZWQpOworCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dGRldiwgQUJTX1RJTFRfWSwKKwkJCQkJIHNpZ25fZXh0ZW5kMzIoZGV2aWNlLT5idWZmZXJbN10sIDYpKTsKIAogCQkJLyogRmFsbCB0aHJ1ICovCiAJCWNhc2UgMjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWxhbnRzX2kyYy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9lbGFudHNfaTJjLmMKaW5kZXggYTUxMGY3ZS4uOTI2YzU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9lbGFudHNfaTJjLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9lbGFudHNfaTJjLmMKQEAgLTMzLDEwICszMyw4IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L210Lmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3BpeGNpcl9pMmNfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vcGl4Y2lyX2kyY190cy5jCmluZGV4IDRmYjU1MzcuLjJjMjEwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vcGl4Y2lyX2kyY190cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vcGl4Y2lyX2kyY190cy5jCkBAIC0xMjYsNyArMTI2LDcgQEAKIAkJCXBvc1tpXS55ID0gdG91Y2gtPnk7CiAJCX0KIAotCQlpbnB1dF9tdF9hc3NpZ25fc2xvdHModHMtPmlucHV0LCBzbG90cywgcG9zLCBuKTsKKwkJaW5wdXRfbXRfYXNzaWduX3Nsb3RzKHRzLT5pbnB1dCwgc2xvdHMsIHBvcywgbiwgMCk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9zdW40aS10cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9zdW40aS10cy5jCmluZGV4IDI4YTA2NzQuLmI5M2EyOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vc3VuNGktdHMuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3N1bjRpLXRzLmMKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvdGhlcm1hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtNzEsNiArNzIsOSBAQAogI2RlZmluZSBUUF9BRENfU0VMRUNUKHgpCSgoeCkgPDwgMykKICNkZWZpbmUgQURDX0NIQU5fU0VMRUNUKHgpCSgoeCkgPDwgMCkgIC8qIDMgYml0cyAqLwogCisvKiBvbiBzdW42aSwgYml0cyAzfjYgYXJlIGxlZnQgc2hpZnRlZCBieSAxIHRvIDR+NyAqLworI2RlZmluZSBTVU42SV9UUF9NT0RFX0VOKHgpCSgoeCkgPDwgNSkKKwogLyogVFBfQ1RSTDIgYml0cyAqLwogI2RlZmluZSBUUF9TRU5TSVRJVkVfQURKVVNUKHgpCSgoeCkgPDwgMjgpIC8qIDQgYml0cyAqLwogI2RlZmluZSBUUF9NT0RFX1NFTEVDVCh4KQkoKHgpIDw8IDI2KSAvKiAyIGJpdHMgKi8KQEAgLTEwNywxMCArMTExLDEzIEBACiBzdHJ1Y3Qgc3VuNGlfdHNfZGF0YSB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0OworCXN0cnVjdCB0aGVybWFsX3pvbmVfZGV2aWNlICp0ejsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJdW5zaWduZWQgaW50IGlycTsKIAlib29sIGlnbm9yZV9maWZvX2RhdGE7CiAJaW50IHRlbXBfZGF0YTsKKwlpbnQgdGVtcF9vZmZzZXQ7CisJaW50IHRlbXBfc3RlcDsKIH07CiAKIHN0YXRpYyB2b2lkIHN1bjRpX3RzX2lycV9oYW5kbGVfaW5wdXQoc3RydWN0IHN1bjRpX3RzX2RhdGEgKnRzLCB1MzIgcmVnX3ZhbCkKQEAgLTE4MCwxNiArMTg3LDM4IEBACiAJd3JpdGVsKFRFTVBfSVJRX0VOKDEpLCB0cy0+YmFzZSArIFRQX0lOVF9GSUZPQyk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJIGNoYXIgKmJ1ZikKK3N0YXRpYyBpbnQgc3VuNGlfZ2V0X3RlbXAoY29uc3Qgc3RydWN0IHN1bjRpX3RzX2RhdGEgKnRzLCBsb25nICp0ZW1wKQogewotCXN0cnVjdCBzdW40aV90c19kYXRhICp0cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCiAJLyogTm8gdGVtcF9kYXRhIHVudGlsIHRoZSBmaXJzdCBpcnEgKi8KIAlpZiAodHMtPnRlbXBfZGF0YSA9PSAtMSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKHRzLT50ZW1wX2RhdGEgLSAxNDQ3KSAqIDEwMCk7CisJKnRlbXAgPSAodHMtPnRlbXBfZGF0YSAtIHRzLT50ZW1wX29mZnNldCkgKiB0cy0+dGVtcF9zdGVwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3VuNGlfZ2V0X3R6X3RlbXAodm9pZCAqZGF0YSwgbG9uZyAqdGVtcCkKK3sKKwlyZXR1cm4gc3VuNGlfZ2V0X3RlbXAoZGF0YSwgdGVtcCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdGhlcm1hbF96b25lX29mX2RldmljZV9vcHMgc3VuNGlfdHNfdHpfb3BzID0geworCS5nZXRfdGVtcCA9IHN1bjRpX2dldF90el90ZW1wLAorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkgY2hhciAqYnVmKQoreworCXN0cnVjdCBzdW40aV90c19kYXRhICp0cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWxvbmcgdGVtcDsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IHN1bjRpX2dldF90ZW1wKHRzLCAmdGVtcCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIHRlbXApOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfbGFiZWwoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMjE1LDYgKzI0NCw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbjsKIAlpbnQgZXJyb3I7CisJdTMyIHJlZzsKIAlib29sIHRzX2F0dGFjaGVkOwogCiAJdHMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IHN1bjRpX3RzX2RhdGEpLCBHRlBfS0VSTkVMKTsKQEAgLTIyNCw2ICsyNTQsMjUgQEAKIAl0cy0+ZGV2ID0gZGV2OwogCXRzLT5pZ25vcmVfZmlmb19kYXRhID0gdHJ1ZTsKIAl0cy0+dGVtcF9kYXRhID0gLTE7CisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiYWxsd2lubmVyLHN1bjZpLWEzMS10cyIpKSB7CisJCS8qIEFsbHdpbm5lciBTREsgaGFzIHRlbXBlcmF0dXJlID0gLTI3MSArICh2YWx1ZSAvIDYpIChDKSAqLworCQl0cy0+dGVtcF9vZmZzZXQgPSAxNjI2OworCQl0cy0+dGVtcF9zdGVwID0gMTY3OworCX0gZWxzZSB7CisJCS8qCisJCSAqIFRoZSB1c2VyIG1hbnVhbHMgZG8gbm90IGNvbnRhaW4gdGhlIGZvcm11bGEgZm9yIGNhbGN1bGF0aW5nCisJCSAqIHRoZSB0ZW1wZXJhdHVyZS4gVGhlIGZvcm11bGEgdXNlZCBoZXJlIGlzIGZyb20gdGhlIEFYUDIwOSwKKwkJICogd2hpY2ggaXMgZGVzaWduZWQgYnkgWC1Qb3dlcnMsIGFuIGFmZmlsaWF0ZSBvZiBBbGx3aW5uZXI6CisJCSAqCisJCSAqICAgICB0ZW1wZXJhdHVyZSA9IC0xNDQuNyArICh2YWx1ZSAqIDAuMSkKKwkJICoKKwkJICogQWxsd2lubmVyIGRvZXMgbm90IGhhdmUgYW55IGRvY3VtZW50YXRpb24gd2hhdHNvZXZlciBmb3IKKwkJICogdGhpcyBoYXJkd2FyZS4gTW9yZW92ZXIsIGl0IGlzIGNsYWltZWQgdGhhdCB0aGUgc2Vuc29yCisJCSAqIGlzIGluYWNjdXJhdGUgYW5kIGNhbm5vdCB3b3JrIHByb3Blcmx5LgorCQkgKi8KKwkJdHMtPnRlbXBfb2Zmc2V0ID0gMTQ0NzsKKwkJdHMtPnRlbXBfc3RlcCA9IDEwMDsKKwl9CiAKIAl0c19hdHRhY2hlZCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgImFsbHdpbm5lcix0cy1hdHRhY2hlZCIpOwogCWlmICh0c19hdHRhY2hlZCkgewpAQCAtMjgwLDIwICszMjksMzQgQEAKIAkgKiBTZXQgc3R5bHVzIHVwIGRlYm91bmNlIHRvIGFwcm94IDEwIG1zLCBlbmFibGUgZGVib3VuY2UsIGFuZAogCSAqIGZpbmFsbHkgZW5hYmxlIHRwIG1vZGUuCiAJICovCi0Jd3JpdGVsKFNUWUxVU19VUF9ERUJPVU4oNSkgfCBTVFlMVVNfVVBfREVCT1VOX0VOKDEpIHwgVFBfTU9ERV9FTigxKSwKLQkgICAgICAgdHMtPmJhc2UgKyBUUF9DVFJMMSk7CisJcmVnID0gU1RZTFVTX1VQX0RFQk9VTig1KSB8IFNUWUxVU19VUF9ERUJPVU5fRU4oMSk7CisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiYWxsd2lubmVyLHN1bjRpLWExMC10cyIpKQorCQlyZWcgfD0gVFBfTU9ERV9FTigxKTsKKwllbHNlCisJCXJlZyB8PSBTVU42SV9UUF9NT0RFX0VOKDEpOworCXdyaXRlbChyZWcsIHRzLT5iYXNlICsgVFBfQ1RSTDEpOwogCisJLyoKKwkgKiBUaGUgdGhlcm1hbCBjb3JlIGRvZXMgbm90IHJlZ2lzdGVyIGh3bW9uIGRldmljZXMgZm9yIERULWJhc2VkCisJICogdGhlcm1hbCB6b25lIHNlbnNvcnMsIHN1Y2ggYXMgdGhpcyBvbmUuCisJICovCiAJaHdtb24gPSBkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3Vwcyh0cy0+ZGV2LCAic3VuNGlfdHMiLAogCQkJCQkJICAgICAgIHRzLCBzdW40aV90c19ncm91cHMpOwogCWlmIChJU19FUlIoaHdtb24pKQogCQlyZXR1cm4gUFRSX0VSUihod21vbik7CiAKKwl0cy0+dHogPSB0aGVybWFsX3pvbmVfb2Zfc2Vuc29yX3JlZ2lzdGVyKHRzLT5kZXYsIDAsIHRzLAorCQkJCQkJICZzdW40aV90c190el9vcHMpOworCWlmIChJU19FUlIodHMtPnR6KSkKKwkJdHMtPnR6ID0gTlVMTDsKKwogCXdyaXRlbChURU1QX0lSUV9FTigxKSwgdHMtPmJhc2UgKyBUUF9JTlRfRklGT0MpOwogCiAJaWYgKHRzX2F0dGFjaGVkKSB7CiAJCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHRzLT5pbnB1dCk7CiAJCWlmIChlcnJvcikgewogCQkJd3JpdGVsKDAsIHRzLT5iYXNlICsgVFBfSU5UX0ZJRk9DKTsKKwkJCXRoZXJtYWxfem9uZV9vZl9zZW5zb3JfdW5yZWdpc3Rlcih0cy0+ZGV2LCB0cy0+dHopOwogCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJfQpAQCAtMzEwLDYgKzM3Myw4IEBACiAJaWYgKHRzLT5pbnB1dCkKIAkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodHMtPmlucHV0KTsKIAorCXRoZXJtYWxfem9uZV9vZl9zZW5zb3JfdW5yZWdpc3Rlcih0cy0+ZGV2LCB0cy0+dHopOworCiAJLyogRGVhY3RpdmF0ZSBhbGwgSVJRcyAqLwogCXdyaXRlbCgwLCB0cy0+YmFzZSArIFRQX0lOVF9GSUZPQyk7CiAKQEAgLTMxOCw2ICszODMsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzdW40aV90c19vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjRpLWExMC10cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxLXRzIiwgfSwKIAl7IC8qIHNlbnRpbmVsICovIH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzdW40aV90c19vZl9tYXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RpX2FtMzM1eF90c2MuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdGlfYW0zMzV4X3RzYy5jCmluZGV4IDAwNGYxMzQuLjE5MWExYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdGlfYW0zMzV4X3RzYy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdGlfYW0zMzV4X3RzYy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21mZC90aV9hbTMzNXhfdHNjYWRjLmg+CiAKQEAgLTUyLDYgKzUzLDcgQEAKIAl1MzIJCQliaXRfeHAsIGJpdF94biwgYml0X3lwLCBiaXRfeW47CiAJdTMyCQkJaW5wX3hwLCBpbnBfeG4sIGlucF95cCwgaW5wX3luOwogCXUzMgkJCXN0ZXBfbWFzazsKKwl1MzIJCQljaGFyZ2VfZGVsYXk7CiB9OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHRpdHNjX3JlYWRsKHN0cnVjdCB0aXRzYyAqdHMsIHVuc2lnbmVkIGludCByZWcpCkBAIC0xMjEsNyArMTIzLDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQJY29uZmlnOwogCWludCBpOwotCWludCBlbmRfc3RlcDsKKwlpbnQgZW5kX3N0ZXAsIGZpcnN0X3N0ZXAsIHRzY19zdGVwczsKIAl1MzIgc3RlcGVuYWJsZTsKIAogCWNvbmZpZyA9IFNURVBDT05GSUdfTU9ERV9IV1NZTkMgfApAQCAtMTQwLDkgKzE0MiwxMSBAQAogCQlicmVhazsKIAl9CiAKLQkvKiAxIOKApiBjb29yZGluYXRlX3JlYWRvdXRzIGlzIGZvciBYICovCi0JZW5kX3N0ZXAgPSB0c19kZXYtPmNvb3JkaW5hdGVfcmVhZG91dHM7Ci0JZm9yIChpID0gMDsgaSA8IGVuZF9zdGVwOyBpKyspIHsKKwl0c2Nfc3RlcHMgPSB0c19kZXYtPmNvb3JkaW5hdGVfcmVhZG91dHMgKiAyICsgMjsKKwlmaXJzdF9zdGVwID0gVE9UQUxfU1RFUFMgLSB0c2Nfc3RlcHM7CisJLyogU3RlcHMgMTYgdG8gMTYtY29vcmRpbmF0ZV9yZWFkb3V0cyBpcyBmb3IgWCAqLworCWVuZF9zdGVwID0gZmlyc3Rfc3RlcCArIHRzY19zdGVwczsKKwlmb3IgKGkgPSBlbmRfc3RlcCAtIHRzX2Rldi0+Y29vcmRpbmF0ZV9yZWFkb3V0czsgaSA8IGVuZF9zdGVwOyBpKyspIHsKIAkJdGl0c2Nfd3JpdGVsKHRzX2RldiwgUkVHX1NURVBDT05GSUcoaSksIGNvbmZpZyk7CiAJCXRpdHNjX3dyaXRlbCh0c19kZXYsIFJFR19TVEVQREVMQVkoaSksIFNURVBDT05GSUdfT1BFTkRMWSk7CiAJfQpAQCAtMTY0LDIyICsxNjgsMjAgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyogY29vcmRpbmF0ZV9yZWFkb3V0cyDigKYgY29vcmRpbmF0ZV9yZWFkb3V0cyAqIDIgaXMgZm9yIFkgKi8KLQllbmRfc3RlcCA9IHRzX2Rldi0+Y29vcmRpbmF0ZV9yZWFkb3V0cyAqIDI7Ci0JZm9yIChpID0gdHNfZGV2LT5jb29yZGluYXRlX3JlYWRvdXRzOyBpIDwgZW5kX3N0ZXA7IGkrKykgeworCS8qIDEgLi4uIGNvb3JkaW5hdGVfcmVhZG91dHMgaXMgZm9yIFkgKi8KKwllbmRfc3RlcCA9IGZpcnN0X3N0ZXAgKyB0c19kZXYtPmNvb3JkaW5hdGVfcmVhZG91dHM7CisJZm9yIChpID0gZmlyc3Rfc3RlcDsgaSA8IGVuZF9zdGVwOyBpKyspIHsKIAkJdGl0c2Nfd3JpdGVsKHRzX2RldiwgUkVHX1NURVBDT05GSUcoaSksIGNvbmZpZyk7CiAJCXRpdHNjX3dyaXRlbCh0c19kZXYsIFJFR19TVEVQREVMQVkoaSksIFNURVBDT05GSUdfT1BFTkRMWSk7CiAJfQogCi0JLyogQ2hhcmdlIHN0ZXAgY29uZmlndXJhdGlvbiAqLwotCWNvbmZpZyA9IHRzX2Rldi0+Yml0X3hwIHwgdHNfZGV2LT5iaXRfeW4gfAotCQkJU1RFUENIQVJHRV9SRlBfWFBVTCB8IFNURVBDSEFSR0VfUkZNX1hOVVIgfAotCQkJU1RFUENIQVJHRV9JTk1fQU4xIHwgU1RFUENIQVJHRV9JTlAodHNfZGV2LT5pbnBfeXApOworCS8qIE1ha2UgQ0hBUkdFQ09ORklHIHNhbWUgYXMgSURMRUNPTkZJRyAqLwogCisJY29uZmlnID0gdGl0c2NfcmVhZGwodHNfZGV2LCBSRUdfSURMRUNPTkZJRyk7CiAJdGl0c2Nfd3JpdGVsKHRzX2RldiwgUkVHX0NIQVJHRUNPTkZJRywgY29uZmlnKTsKLQl0aXRzY193cml0ZWwodHNfZGV2LCBSRUdfQ0hBUkdFREVMQVksIENIQVJHRURMWV9PUEVORExZKTsKKwl0aXRzY193cml0ZWwodHNfZGV2LCBSRUdfQ0hBUkdFREVMQVksIHRzX2Rldi0+Y2hhcmdlX2RlbGF5KTsKIAotCS8qIGNvb3JkaW5hdGVfcmVhZG91dHMgKiAyIOKApiBjb29yZGluYXRlX3JlYWRvdXRzICogMiArIDIgaXMgZm9yIFogKi8KKwkvKiBjb29yZGluYXRlX3JlYWRvdXRzICsgMSAuLi4gY29vcmRpbmF0ZV9yZWFkb3V0cyArIDIgaXMgZm9yIFogKi8KIAljb25maWcgPSBTVEVQQ09ORklHX01PREVfSFdTWU5DIHwKIAkJCVNURVBDT05GSUdfQVZHXzE2IHwgdHNfZGV2LT5iaXRfeXAgfAogCQkJdHNfZGV2LT5iaXRfeG4gfCBTVEVQQ09ORklHX0lOTV9BRENSRUZNIHwKQEAgLTE5NCw3MyArMTk2LDEwNCBAQAogCXRpdHNjX3dyaXRlbCh0c19kZXYsIFJFR19TVEVQREVMQVkoZW5kX3N0ZXApLAogCQkJU1RFUENPTkZJR19PUEVORExZKTsKIAotCS8qIFRoZSBzdGVwczEg4oCmIGVuZCBhbmQgYml0IDAgZm9yIFRTX0NoYXJnZSAqLwotCXN0ZXBlbmFibGUgPSAoMSA8PCAoZW5kX3N0ZXAgKyAyKSkgLSAxOworCS8qIFRoZSBzdGVwcyBlbmQgLi4uIGVuZCAtIHJlYWRvdXRzICogMiArIDIgYW5kIGJpdCAwIGZvciBUU19DaGFyZ2UgKi8KKwlzdGVwZW5hYmxlID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgdHNjX3N0ZXBzOyBpKyspCisJCXN0ZXBlbmFibGUgfD0gMSA8PCAoZmlyc3Rfc3RlcCArIGkgKyAxKTsKKwogCXRzX2Rldi0+c3RlcF9tYXNrID0gc3RlcGVuYWJsZTsKIAlhbTMzNXhfdHNjX3NlX3NldF9jYWNoZSh0c19kZXYtPm1mZF90c2NhZGMsIHRzX2Rldi0+c3RlcF9tYXNrKTsKIH0KIAorc3RhdGljIGludCB0aXRzY19jbXBfY29vcmQoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwlyZXR1cm4gKihpbnQgKilhIC0gKihpbnQgKiliOworfQorCiBzdGF0aWMgdm9pZCB0aXRzY19yZWFkX2Nvb3JkaW5hdGVzKHN0cnVjdCB0aXRzYyAqdHNfZGV2LAogCQl1MzIgKngsIHUzMiAqeSwgdTMyICp6MSwgdTMyICp6MikKIHsKLQl1bnNpZ25lZCBpbnQgZmlmb2NvdW50ID0gdGl0c2NfcmVhZGwodHNfZGV2LCBSRUdfRklGTzBDTlQpOwotCXVuc2lnbmVkIGludCBwcmV2X3ZhbF94ID0gfjAsIHByZXZfdmFsX3kgPSB+MDsKLQl1bnNpZ25lZCBpbnQgcHJldl9kaWZmX3ggPSB+MCwgcHJldl9kaWZmX3kgPSB+MDsKLQl1bnNpZ25lZCBpbnQgcmVhZCwgZGlmZjsKLQl1bnNpZ25lZCBpbnQgaSwgY2hhbm5lbDsKKwl1bnNpZ25lZCBpbnQgeXZhbHNbN10sIHh2YWxzWzddOworCXVuc2lnbmVkIGludCBpLCB4c3VtID0gMCwgeXN1bSA9IDA7CiAJdW5zaWduZWQgaW50IGNyZWFkcyA9IHRzX2Rldi0+Y29vcmRpbmF0ZV9yZWFkb3V0czsKIAotCSp6MSA9ICp6MiA9IDA7Ci0JaWYgKGZpZm9jb3VudCAlIChjcmVhZHMgKiAyICsgMikpCi0JCWZpZm9jb3VudCAtPSBmaWZvY291bnQgJSAoY3JlYWRzICogMiArIDIpOwotCS8qCi0JICogRGVsdGEgZmlsdGVyIGlzIHVzZWQgdG8gcmVtb3ZlIGxhcmdlIHZhcmlhdGlvbnMgaW4gc2FtcGxlZAotCSAqIHZhbHVlcyBmcm9tIEFEQy4gVGhlIGZpbHRlciB0cmllcyB0byBwcmVkaWN0IHdoZXJlIHRoZSBuZXh0Ci0JICogY29vcmRpbmF0ZSBjb3VsZCBiZS4gVGhpcyBpcyBkb25lIGJ5IHRha2luZyBhIHByZXZpb3VzCi0JICogY29vcmRpbmF0ZSBhbmQgc3VidHJhY3RpbmcgaXQgZm9ybSBjdXJyZW50IG9uZS4gRnVydGhlciB0aGUKLQkgKiBhbGdvcml0aG0gY29tcGFyZXMgdGhlIGRpZmZlcmVuY2Ugd2l0aCB0aGF0IG9mIGEgcHJlc2VudCB2YWx1ZSwKLQkgKiBpZiB0cnVlIHRoZSB2YWx1ZSBpcyByZXBvcnRlZCB0byB0aGUgc3ViIHN5c3RlbS4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZmlmb2NvdW50OyBpKyspIHsKLQkJcmVhZCA9IHRpdHNjX3JlYWRsKHRzX2RldiwgUkVHX0ZJRk8wKTsKLQotCQljaGFubmVsID0gKHJlYWQgJiAweGYwMDAwKSA+PiAxNjsKLQkJcmVhZCAmPSAweGZmZjsKLQkJaWYgKGNoYW5uZWwgPCBjcmVhZHMpIHsKLQkJCWRpZmYgPSBhYnMocmVhZCAtIHByZXZfdmFsX3gpOwotCQkJaWYgKGRpZmYgPCBwcmV2X2RpZmZfeCkgewotCQkJCXByZXZfZGlmZl94ID0gZGlmZjsKLQkJCQkqeCA9IHJlYWQ7Ci0JCQl9Ci0JCQlwcmV2X3ZhbF94ID0gcmVhZDsKLQotCQl9IGVsc2UgaWYgKGNoYW5uZWwgPCBjcmVhZHMgKiAyKSB7Ci0JCQlkaWZmID0gYWJzKHJlYWQgLSBwcmV2X3ZhbF95KTsKLQkJCWlmIChkaWZmIDwgcHJldl9kaWZmX3kpIHsKLQkJCQlwcmV2X2RpZmZfeSA9IGRpZmY7Ci0JCQkJKnkgPSByZWFkOwotCQkJfQotCQkJcHJldl92YWxfeSA9IHJlYWQ7Ci0KLQkJfSBlbHNlIGlmIChjaGFubmVsIDwgY3JlYWRzICogMiArIDEpIHsKLQkJCSp6MSA9IHJlYWQ7Ci0KLQkJfSBlbHNlIGlmIChjaGFubmVsIDwgY3JlYWRzICogMiArIDIpIHsKLQkJCSp6MiA9IHJlYWQ7Ci0JCX0KKwlmb3IgKGkgPSAwOyBpIDwgY3JlYWRzOyBpKyspIHsKKwkJeXZhbHNbaV0gPSB0aXRzY19yZWFkbCh0c19kZXYsIFJFR19GSUZPMCk7CisJCXl2YWxzW2ldICY9IDB4ZmZmOwogCX0KKworCSp6MSA9IHRpdHNjX3JlYWRsKHRzX2RldiwgUkVHX0ZJRk8wKTsKKwkqejEgJj0gMHhmZmY7CisJKnoyID0gdGl0c2NfcmVhZGwodHNfZGV2LCBSRUdfRklGTzApOworCSp6MiAmPSAweGZmZjsKKworCWZvciAoaSA9IDA7IGkgPCBjcmVhZHM7IGkrKykgeworCQl4dmFsc1tpXSA9IHRpdHNjX3JlYWRsKHRzX2RldiwgUkVHX0ZJRk8wKTsKKwkJeHZhbHNbaV0gJj0gMHhmZmY7CisJfQorCisJLyoKKwkgKiBJZiBjby1vcmRpbmF0ZXMgcmVhZG91dHMgaXMgbGVzcyB0aGFuIDQgdGhlbgorCSAqIHJlcG9ydCB0aGUgYXZlcmFnZS4gSW4gY2FzZSBvZiA0IG9yIG1vcmUKKwkgKiByZWFkb3V0cywgc29ydCB0aGUgY28tb3JkaW5hdGUgc2FtcGxlcywgZHJvcAorCSAqIG1pbiBhbmQgbWF4IHZhbHVlcyBhbmQgcmVwb3J0IHRoZSBhdmVyYWdlIG9mCisJICogcmVtYWluaW5nIHZhbHVlcy4KKwkgKi8KKwlpZiAoY3JlYWRzIDw9ICAzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBjcmVhZHM7IGkrKykgeworCQkJeXN1bSArPSB5dmFsc1tpXTsKKwkJCXhzdW0gKz0geHZhbHNbaV07CisJCX0KKwkJeXN1bSAvPSBjcmVhZHM7CisJCXhzdW0gLz0gY3JlYWRzOworCX0gZWxzZSB7CisJCXNvcnQoeXZhbHMsIGNyZWFkcywgc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCSAgICAgdGl0c2NfY21wX2Nvb3JkLCBOVUxMKTsKKwkJc29ydCh4dmFscywgY3JlYWRzLCBzaXplb2YodW5zaWduZWQgaW50KSwKKwkJICAgICB0aXRzY19jbXBfY29vcmQsIE5VTEwpOworCQlmb3IgKGkgPSAxOyBpIDwgY3JlYWRzIC0gMTsgaSsrKSB7CisJCQl5c3VtICs9IHl2YWxzW2ldOworCQkJeHN1bSArPSB4dmFsc1tpXTsKKwkJfQorCQl5c3VtIC89IGNyZWFkcyAtIDI7CisJCXhzdW0gLz0gY3JlYWRzIC0gMjsKKwl9CisJKnkgPSB5c3VtOworCSp4ID0geHN1bTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHRpdHNjX2lycShpbnQgaXJxLCB2b2lkICpkZXYpCiB7CiAJc3RydWN0IHRpdHNjICp0c19kZXYgPSBkZXY7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2ID0gdHNfZGV2LT5pbnB1dDsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzLCBpcnFjbHIgPSAwOworCXVuc2lnbmVkIGludCBmc20sIHN0YXR1cywgaXJxY2xyID0gMDsKIAl1bnNpZ25lZCBpbnQgeCA9IDAsIHkgPSAwOwogCXVuc2lnbmVkIGludCB6MSwgejIsIHo7Ci0JdW5zaWduZWQgaW50IGZzbTsKIAotCXN0YXR1cyA9IHRpdHNjX3JlYWRsKHRzX2RldiwgUkVHX0lSUVNUQVRVUyk7CisJc3RhdHVzID0gdGl0c2NfcmVhZGwodHNfZGV2LCBSRUdfUkFXSVJRU1RBVFVTKTsKKwlpZiAoc3RhdHVzICYgSVJRRU5CX0hXX1BFTikgeworCQl0c19kZXYtPnBlbl9kb3duID0gdHJ1ZTsKKwkJdGl0c2Nfd3JpdGVsKHRzX2RldiwgUkVHX0lSUVdBS0VVUCwgMHgwMCk7CisJCXRpdHNjX3dyaXRlbCh0c19kZXYsIFJFR19JUlFDTFIsIElSUUVOQl9IV19QRU4pOworCQlpcnFjbHIgfD0gSVJRRU5CX0hXX1BFTjsKKwl9CisKKwlpZiAoc3RhdHVzICYgSVJRRU5CX1BFTlVQKSB7CisJCWZzbSA9IHRpdHNjX3JlYWRsKHRzX2RldiwgUkVHX0FEQ0ZTTSk7CisJCWlmIChmc20gPT0gQURDRlNNX1NURVBJRCkgeworCQkJdHNfZGV2LT5wZW5fZG93biA9IGZhbHNlOworCQkJaW5wdXRfcmVwb3J0X2tleShpbnB1dF9kZXYsIEJUTl9UT1VDSCwgMCk7CisJCQlpbnB1dF9yZXBvcnRfYWJzKGlucHV0X2RldiwgQUJTX1BSRVNTVVJFLCAwKTsKKwkJCWlucHV0X3N5bmMoaW5wdXRfZGV2KTsKKwkJfSBlbHNlIHsKKwkJCXRzX2Rldi0+cGVuX2Rvd24gPSB0cnVlOworCQl9CisJCWlycWNsciB8PSBJUlFFTkJfUEVOVVA7CisJfQorCisJaWYgKHN0YXR1cyAmIElSUUVOQl9FT1MpCisJCWlycWNsciB8PSBJUlFFTkJfRU9TOworCiAJLyoKIAkgKiBBREMgYW5kIHRvdWNoc2NyZWVuIHNoYXJlIHRoZSBJUlEgbGluZS4KIAkgKiBGSUZPMSBpbnRlcnJ1cHRzIGFyZSB1c2VkIGJ5IEFEQy4gSGFuZGxlIEZJRk8wIElSUXMgaGVyZSBvbmx5CkBAIC0yOTEsMzcgKzMyNCwxMSBAQAogCQl9CiAJCWlycWNsciB8PSBJUlFFTkJfRklGTzBUSFJFUzsKIAl9Ci0KLQkvKgotCSAqIFRpbWUgZm9yIHNlcXVlbmNlciB0byBzZXR0bGUsIHRvIHJlYWQKLQkgKiBjb3JyZWN0IHN0YXRlIG9mIHRoZSBzZXF1ZW5jZXIuCi0JICovCi0JdWRlbGF5KFNFUV9TRVRUTEUpOwotCi0Jc3RhdHVzID0gdGl0c2NfcmVhZGwodHNfZGV2LCBSRUdfUkFXSVJRU1RBVFVTKTsKLQlpZiAoc3RhdHVzICYgSVJRRU5CX1BFTlVQKSB7Ci0JCS8qIFBlbiB1cCBldmVudCAqLwotCQlmc20gPSB0aXRzY19yZWFkbCh0c19kZXYsIFJFR19BRENGU00pOwotCQlpZiAoZnNtID09IEFEQ0ZTTV9TVEVQSUQpIHsKLQkJCXRzX2Rldi0+cGVuX2Rvd24gPSBmYWxzZTsKLQkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXRfZGV2LCBCVE5fVE9VQ0gsIDApOwotCQkJaW5wdXRfcmVwb3J0X2FicyhpbnB1dF9kZXYsIEFCU19QUkVTU1VSRSwgMCk7Ci0JCQlpbnB1dF9zeW5jKGlucHV0X2Rldik7Ci0JCX0gZWxzZSB7Ci0JCQl0c19kZXYtPnBlbl9kb3duID0gdHJ1ZTsKLQkJfQotCQlpcnFjbHIgfD0gSVJRRU5CX1BFTlVQOwotCX0KLQotCWlmIChzdGF0dXMgJiBJUlFFTkJfSFdfUEVOKSB7Ci0KLQkJdGl0c2Nfd3JpdGVsKHRzX2RldiwgUkVHX0lSUVdBS0VVUCwgMHgwMCk7Ci0JCXRpdHNjX3dyaXRlbCh0c19kZXYsIFJFR19JUlFDTFIsIElSUUVOQl9IV19QRU4pOwotCX0KLQogCWlmIChpcnFjbHIpIHsKIAkJdGl0c2Nfd3JpdGVsKHRzX2RldiwgUkVHX0lSUVNUQVRVUywgaXJxY2xyKTsKLQkJYW0zMzV4X3RzY19zZV9zZXRfY2FjaGUodHNfZGV2LT5tZmRfdHNjYWRjLCB0c19kZXYtPnN0ZXBfbWFzayk7CisJCWlmIChzdGF0dXMgJiBJUlFFTkJfRU9TKQorCQkJYW0zMzV4X3RzY19zZV9zZXRfY2FjaGUodHNfZGV2LT5tZmRfdHNjYWRjLAorCQkJCQkJdHNfZGV2LT5zdGVwX21hc2spOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCXJldHVybiBJUlFfTk9ORTsKQEAgLTM2OCw2ICszNzUsMjMgQEAKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAorCWlmICh0c19kZXYtPmNvb3JkaW5hdGVfcmVhZG91dHMgPD0gMCkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJICJpbnZhbGlkIGNvLW9yZGluYXRlIHJlYWRvdXRzLCByZXNldHRpbmcgaXQgdG8gNVxuIik7CisJCXRzX2Rldi0+Y29vcmRpbmF0ZV9yZWFkb3V0cyA9IDU7CisJfQorCisJZXJyID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInRpLGNoYXJnZS1kZWxheSIsCisJCQkJICAgJnRzX2Rldi0+Y2hhcmdlX2RlbGF5KTsKKwkvKgorCSAqIElmIHRpLGNoYXJnZS1kZWxheSB2YWx1ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGVuIHVzZQorCSAqIENIQVJHRURMWV9PUEVORExZIGFzIHRoZSBkZWZhdWx0IHZhbHVlLgorCSAqLworCWlmIChlcnIgPCAwKSB7CisJCXRzX2Rldi0+Y2hhcmdlX2RlbGF5ID0gQ0hBUkdFRExZX09QRU5ETFk7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJ0aSxjaGFyZ2UtZGVsYXkgbm90IHNwZWNpZmllZFxuIik7CisJfQorCiAJcmV0dXJuIG9mX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KG5vZGUsICJ0aSx3aXJlLWNvbmZpZyIsCiAJCQl0c19kZXYtPmNvbmZpZ19pbnAsIEFSUkFZX1NJWkUodHNfZGV2LT5jb25maWdfaW5wKSk7CiB9CkBAIC00MTEsNiArNDM1LDcgQEAKIAl9CiAKIAl0aXRzY193cml0ZWwodHNfZGV2LCBSRUdfSVJRRU5BQkxFLCBJUlFFTkJfRklGTzBUSFJFUyk7CisJdGl0c2Nfd3JpdGVsKHRzX2RldiwgUkVHX0lSUUVOQUJMRSwgSVJRRU5CX0VPUyk7CiAJZXJyID0gdGl0c2NfY29uZmlnX3dpcmVzKHRzX2Rldik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ3cm9uZyBpL3Agd2lyZSBjb25maWd1cmF0aW9uXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvYW1kX2lvbW11LmMgYi9kcml2ZXJzL2lvbW11L2FtZF9pb21tdS5jCmluZGV4IDk4MDI0ODUuLjU5ZGU2MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kX2lvbW11LmMKKysrIGIvZHJpdmVycy9pb21tdS9hbWRfaW9tbXUuYwpAQCAtNDI4NCw3ICs0Mjg0LDYgQEAKIH0KIAogc3RydWN0IGlycV9yZW1hcF9vcHMgYW1kX2lvbW11X2lycV9vcHMgPSB7Ci0JLnN1cHBvcnRlZAkJPSBhbWRfaW9tbXVfc3VwcG9ydGVkLAogCS5wcmVwYXJlCQk9IGFtZF9pb21tdV9wcmVwYXJlLAogCS5lbmFibGUJCQk9IGFtZF9pb21tdV9lbmFibGUsCiAJLmRpc2FibGUJCT0gYW1kX2lvbW11X2Rpc2FibGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZF9pb21tdV9pbml0LmMgYi9kcml2ZXJzL2lvbW11L2FtZF9pb21tdV9pbml0LmMKaW5kZXggYjA1MjJmMTUuLjlhMjAyNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvYW1kX2lvbW11X2luaXQuYworKysgYi9kcml2ZXJzL2lvbW11L2FtZF9pb21tdV9pbml0LmMKQEAgLTIwMTQsOSArMjAxNCw2IEBACiAJLyogTWFrZSBzdXJlIEFDUyB3aWxsIGJlIGVuYWJsZWQgZHVyaW5nIFBDSSBwcm9iZSAqLwogCXBjaV9yZXF1ZXN0X2FjcygpOwogCi0JaWYgKCFkaXNhYmxlX2lycV9yZW1hcCkKLQkJYW1kX2lvbW11X2lycV9yZW1hcCA9IHRydWU7Ci0KIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjEyMywxMiArMjEyMCwxNCBAQAogI2lmZGVmIENPTkZJR19JUlFfUkVNQVAKIGludCBfX2luaXQgYW1kX2lvbW11X3ByZXBhcmUodm9pZCkKIHsKLQlyZXR1cm4gaW9tbXVfZ29fdG9fc3RhdGUoSU9NTVVfQUNQSV9GSU5JU0hFRCk7Ci19CisJaW50IHJldDsKIAotaW50IF9faW5pdCBhbWRfaW9tbXVfc3VwcG9ydGVkKHZvaWQpCi17Ci0JcmV0dXJuIGFtZF9pb21tdV9pcnFfcmVtYXAgPyAxIDogMDsKKwlhbWRfaW9tbXVfaXJxX3JlbWFwID0gdHJ1ZTsKKworCXJldCA9IGlvbW11X2dvX3RvX3N0YXRlKElPTU1VX0FDUElfRklOSVNIRUQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIGFtZF9pb21tdV9pcnFfcmVtYXAgPyAwIDogLUVOT0RFVjsKIH0KIAogaW50IF9faW5pdCBhbWRfaW9tbXVfZW5hYmxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2FtZF9pb21tdV9wcm90by5oIGIvZHJpdmVycy9pb21tdS9hbWRfaW9tbXVfcHJvdG8uaAppbmRleCA5NWVkNmRlLi44NjFhZjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2FtZF9pb21tdV9wcm90by5oCisrKyBiL2RyaXZlcnMvaW9tbXUvYW1kX2lvbW11X3Byb3RvLmgKQEAgLTMzLDcgKzMzLDYgQEAKIGV4dGVybiB2b2lkIGFtZF9pb21tdV9pbml0X2FwaSh2b2lkKTsKIAogLyogTmVlZGVkIGZvciBpbnRlcnJ1cHQgcmVtYXBwaW5nICovCi1leHRlcm4gaW50IGFtZF9pb21tdV9zdXBwb3J0ZWQodm9pZCk7CiBleHRlcm4gaW50IGFtZF9pb21tdV9wcmVwYXJlKHZvaWQpOwogZXh0ZXJuIGludCBhbWRfaW9tbXVfZW5hYmxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgYW1kX2lvbW11X2Rpc2FibGUodm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2ludGVsX2lycV9yZW1hcHBpbmcuYyBiL2RyaXZlcnMvaW9tbXUvaW50ZWxfaXJxX3JlbWFwcGluZy5jCmluZGV4IGE1NWIyMDcuLjE0ZGUxYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvaW50ZWxfaXJxX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvaW9tbXUvaW50ZWxfaXJxX3JlbWFwcGluZy5jCkBAIC0zMiw4ICszMiw5IEBACiB9OwogCiAjZGVmaW5lIElSX1gyQVBJQ19NT0RFKG1vZGUpIChtb2RlID8gKDEgPDwgMTEpIDogMCkKLSNkZWZpbmUgSVJURV9ERVNUKGRlc3QpICgoeDJhcGljX21vZGUpID8gZGVzdCA6IGRlc3QgPDwgOCkKKyNkZWZpbmUgSVJURV9ERVNUKGRlc3QpICgoZWltX21vZGUpID8gZGVzdCA6IGRlc3QgPDwgOCkKIAorc3RhdGljIGludCBfX3JlYWRfbW9zdGx5IGVpbV9tb2RlOwogc3RhdGljIHN0cnVjdCBpb2FwaWNfc2NvcGUgaXJfaW9hcGljW01BWF9JT19BUElDU107CiBzdGF0aWMgc3RydWN0IGhwZXRfc2NvcGUgaXJfaHBldFtNQVhfSFBFVF9UQlNdOwogCkBAIC00ODEsMTEgKzQ4MiwxMSBAQAogCWlmIChpb21tdS0+aXJfdGFibGUpCiAJCXJldHVybiAwOwogCi0JaXJfdGFibGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXJfdGFibGUpLCBHRlBfQVRPTUlDKTsKKwlpcl90YWJsZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcl90YWJsZSksIEdGUF9LRVJORUwpOwogCWlmICghaXJfdGFibGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcGFnZXMgPSBhbGxvY19wYWdlc19ub2RlKGlvbW11LT5ub2RlLCBHRlBfQVRPTUlDIHwgX19HRlBfWkVSTywKKwlwYWdlcyA9IGFsbG9jX3BhZ2VzX25vZGUoaW9tbXUtPm5vZGUsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPLAogCQkJCSBJTlRSX1JFTUFQX1BBR0VfT1JERVIpOwogCiAJaWYgKCFwYWdlcykgewpAQCAtNTY2LDEzICs1NjcsMjcgQEAKIAlyZXR1cm4gZG1hci0+ZmxhZ3MgJiBETUFSX1gyQVBJQ19PUFRfT1VUOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBpbnRlbF9pcnFfcmVtYXBwaW5nX3N1cHBvcnRlZCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGludGVsX2NsZWFudXBfaXJxX3JlbWFwcGluZyh2b2lkKQogewogCXN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZDsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OwogCi0JaWYgKGRpc2FibGVfaXJxX3JlbWFwKQotCQlyZXR1cm4gMDsKKwlmb3JfZWFjaF9pb21tdShpb21tdSwgZHJoZCkgeworCQlpZiAoZWNhcF9pcl9zdXBwb3J0KGlvbW11LT5lY2FwKSkgeworCQkJaW9tbXVfZGlzYWJsZV9pcnFfcmVtYXBwaW5nKGlvbW11KTsKKwkJCWludGVsX3RlYXJkb3duX2lycV9yZW1hcHBpbmcoaW9tbXUpOworCQl9CisJfQorCisJaWYgKHgyYXBpY19zdXBwb3J0ZWQoKSkKKwkJcHJfd2FybigiRmFpbGVkIHRvIGVuYWJsZSBpcnEgcmVtYXBwaW5nLiAgWW91IGFyZSB2dWxuZXJhYmxlIHRvIGlycS1pbmplY3Rpb24gYXR0YWNrcy5cbiIpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpbnRlbF9wcmVwYXJlX2lycV9yZW1hcHBpbmcodm9pZCkKK3sKKwlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQ7CisJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKKwogCWlmIChpcnFfcmVtYXBfYnJva2VuKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSJUaGlzIHN5c3RlbSBCSU9TIGhhcyBlbmFibGVkIGludGVycnVwdCByZW1hcHBpbmdcbiIKQEAgLTU4MSwzOCArNTk2LDQ1IEBACiAJCQkiaW50ZXJydXB0IHJlbWFwcGluZyBpcyBiZWluZyBkaXNhYmxlZC4gIFBsZWFzZVxuIgogCQkJImNvbnRhY3QgeW91ciBCSU9TIHZlbmRvciBmb3IgYW4gdXBkYXRlXG4iKTsKIAkJYWRkX3RhaW50KFRBSU5UX0ZJUk1XQVJFX1dPUktBUk9VTkQsIExPQ0tERVBfU1RJTExfT0spOwotCQlkaXNhYmxlX2lycV9yZW1hcCA9IDE7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAoIWRtYXJfaXJfc3VwcG9ydCgpKQotCQlyZXR1cm4gMDsKKwlpZiAoZG1hcl90YWJsZV9pbml0KCkgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKIAorCWlmICghZG1hcl9pcl9zdXBwb3J0KCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHBhcnNlX2lvYXBpY3NfdW5kZXJfaXIoKSAhPSAxKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk5vdCBlbmFibGluZyBpbnRlcnJ1cHQgcmVtYXBwaW5nXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiBGaXJzdCBtYWtlIHN1cmUgYWxsIElPTU1VcyBzdXBwb3J0IElSUSByZW1hcHBpbmcgKi8KIAlmb3JfZWFjaF9pb21tdShpb21tdSwgZHJoZCkKIAkJaWYgKCFlY2FwX2lyX3N1cHBvcnQoaW9tbXUtPmVjYXApKQotCQkJcmV0dXJuIDA7CisJCQlnb3RvIGVycm9yOwogCi0JcmV0dXJuIDE7CisJLyogRG8gdGhlIGFsbG9jYXRpb25zIGVhcmx5ICovCisJZm9yX2VhY2hfaW9tbXUoaW9tbXUsIGRyaGQpCisJCWlmIChpbnRlbF9zZXR1cF9pcnFfcmVtYXBwaW5nKGlvbW11KSkKKwkJCWdvdG8gZXJyb3I7CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJaW50ZWxfY2xlYW51cF9pcnFfcmVtYXBwaW5nKCk7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGludGVsX2VuYWJsZV9pcnFfcmVtYXBwaW5nKHZvaWQpCiB7CiAJc3RydWN0IGRtYXJfZHJoZF91bml0ICpkcmhkOwogCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXU7Ci0JYm9vbCB4MmFwaWNfcHJlc2VudDsKIAlpbnQgc2V0dXAgPSAwOwogCWludCBlaW0gPSAwOwogCi0JeDJhcGljX3ByZXNlbnQgPSB4MmFwaWNfc3VwcG9ydGVkKCk7Ci0KLQlpZiAocGFyc2VfaW9hcGljc191bmRlcl9pcigpICE9IDEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTm90IGVuYWJsZSBpbnRlcnJ1cHQgcmVtYXBwaW5nXG4iKTsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLQlpZiAoeDJhcGljX3ByZXNlbnQpIHsKLQkJcHJfaW5mbygiUXVldWVkIGludmFsaWRhdGlvbiB3aWxsIGJlIGVuYWJsZWQgdG8gc3VwcG9ydCB4MmFwaWMgYW5kIEludHItcmVtYXBwaW5nLlxuIik7Ci0KKwlpZiAoeDJhcGljX3N1cHBvcnRlZCgpKSB7CiAJCWVpbSA9ICFkbWFyX3gyYXBpY19vcHRvdXQoKTsKIAkJaWYgKCFlaW0pCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCkBAIC02NDYsMTYgKzY2OCwxNSBAQAogCS8qCiAJICogY2hlY2sgZm9yIHRoZSBJbnRlcnJ1cHQtcmVtYXBwaW5nIHN1cHBvcnQKIAkgKi8KLQlmb3JfZWFjaF9pb21tdShpb21tdSwgZHJoZCkgewotCQlpZiAoIWVjYXBfaXJfc3VwcG9ydChpb21tdS0+ZWNhcCkpCi0JCQljb250aW51ZTsKLQorCWZvcl9lYWNoX2lvbW11KGlvbW11LCBkcmhkKQogCQlpZiAoZWltICYmICFlY2FwX2VpbV9zdXBwb3J0KGlvbW11LT5lY2FwKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiRFJIRCAlTHg6IEVJTSBub3Qgc3VwcG9ydGVkIGJ5IERSSEQsICIKIAkJCSAgICAgICAiIGVjYXAgJUx4XG4iLCBkcmhkLT5yZWdfYmFzZV9hZGRyLCBpb21tdS0+ZWNhcCk7Ci0JCQlnb3RvIGVycm9yOworCQkJZWltID0gMDsKIAkJfQotCX0KKwllaW1fbW9kZSA9IGVpbTsKKwlpZiAoZWltKQorCQlwcl9pbmZvKCJRdWV1ZWQgaW52YWxpZGF0aW9uIHdpbGwgYmUgZW5hYmxlZCB0byBzdXBwb3J0IHgyYXBpYyBhbmQgSW50ci1yZW1hcHBpbmcuXG4iKTsKIAogCS8qCiAJICogRW5hYmxlIHF1ZXVlZCBpbnZhbGlkYXRpb24gZm9yIGFsbCB0aGUgRFJIRCdzLgpAQCAtNjc1LDEyICs2OTYsNiBAQAogCSAqIFNldHVwIEludGVycnVwdC1yZW1hcHBpbmcgZm9yIGFsbCB0aGUgRFJIRCdzIG5vdy4KIAkgKi8KIAlmb3JfZWFjaF9pb21tdShpb21tdSwgZHJoZCkgewotCQlpZiAoIWVjYXBfaXJfc3VwcG9ydChpb21tdS0+ZWNhcCkpCi0JCQljb250aW51ZTsKLQotCQlpZiAoaW50ZWxfc2V0dXBfaXJxX3JlbWFwcGluZyhpb21tdSkpCi0JCQlnb3RvIGVycm9yOwotCiAJCWlvbW11X3NldF9pcnFfcmVtYXBwaW5nKGlvbW11LCBlaW0pOwogCQlzZXR1cCA9IDE7CiAJfQpAQCAtNzAyLDE1ICs3MTcsNyBAQAogCXJldHVybiBlaW0gPyBJUlFfUkVNQVBfWDJBUElDX01PREUgOiBJUlFfUkVNQVBfWEFQSUNfTU9ERTsKIAogZXJyb3I6Ci0JZm9yX2VhY2hfaW9tbXUoaW9tbXUsIGRyaGQpCi0JCWlmIChlY2FwX2lyX3N1cHBvcnQoaW9tbXUtPmVjYXApKSB7Ci0JCQlpb21tdV9kaXNhYmxlX2lycV9yZW1hcHBpbmcoaW9tbXUpOwotCQkJaW50ZWxfdGVhcmRvd25faXJxX3JlbWFwcGluZyhpb21tdSk7Ci0JCX0KLQotCWlmICh4MmFwaWNfcHJlc2VudCkKLQkJcHJfd2FybigiRmFpbGVkIHRvIGVuYWJsZSBpcnEgcmVtYXBwaW5nLiAgWW91IGFyZSB2dWxuZXJhYmxlIHRvIGlycS1pbmplY3Rpb24gYXR0YWNrcy5cbiIpOwotCisJaW50ZWxfY2xlYW51cF9pcnFfcmVtYXBwaW5nKCk7CiAJcmV0dXJuIC0xOwogfQogCkBAIC0xMTk5LDggKzEyMDYsNyBAQAogfQogCiBzdHJ1Y3QgaXJxX3JlbWFwX29wcyBpbnRlbF9pcnFfcmVtYXBfb3BzID0gewotCS5zdXBwb3J0ZWQJCT0gaW50ZWxfaXJxX3JlbWFwcGluZ19zdXBwb3J0ZWQsCi0JLnByZXBhcmUJCT0gZG1hcl90YWJsZV9pbml0LAorCS5wcmVwYXJlCQk9IGludGVsX3ByZXBhcmVfaXJxX3JlbWFwcGluZywKIAkuZW5hYmxlCQkJPSBpbnRlbF9lbmFibGVfaXJxX3JlbWFwcGluZywKIAkuZGlzYWJsZQkJPSBkaXNhYmxlX2lycV9yZW1hcHBpbmcsCiAJLnJlZW5hYmxlCQk9IHJlZW5hYmxlX2lycV9yZW1hcHBpbmcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lvbW11L2lycV9yZW1hcHBpbmcuYyBiL2RyaXZlcnMvaW9tbXUvaXJxX3JlbWFwcGluZy5jCmluZGV4IDg5YzQ4NDYuLjM5MDA3OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW9tbXUvaXJxX3JlbWFwcGluZy5jCisrKyBiL2RyaXZlcnMvaW9tbXUvaXJxX3JlbWFwcGluZy5jCkBAIC0xNywxMiArMTcsMTEgQEAKICNpbmNsdWRlICJpcnFfcmVtYXBwaW5nLmgiCiAKIGludCBpcnFfcmVtYXBwaW5nX2VuYWJsZWQ7Ci0KLWludCBkaXNhYmxlX2lycV9yZW1hcDsKIGludCBpcnFfcmVtYXBfYnJva2VuOwogaW50IGRpc2FibGVfc291cmNlaWRfY2hlY2tpbmc7CiBpbnQgbm9feDJhcGljX29wdG91dDsKIAorc3RhdGljIGludCBkaXNhYmxlX2lycV9yZW1hcDsKIHN0YXRpYyBzdHJ1Y3QgaXJxX3JlbWFwX29wcyAqcmVtYXBfb3BzOwogCiBzdGF0aWMgaW50IG1zaV9hbGxvY19yZW1hcHBlZF9pcnEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBpcnEsIGludCBudmVjKTsKQEAgLTE5NCw0NSArMTkzLDMyIEBACiB9CiBlYXJseV9wYXJhbSgiaW50cmVtYXAiLCBzZXR1cF9pcnFyZW1hcCk7CiAKLXZvaWQgX19pbml0IHNldHVwX2lycV9yZW1hcHBpbmdfb3BzKHZvaWQpCi17Ci0JcmVtYXBfb3BzID0gJmludGVsX2lycV9yZW1hcF9vcHM7Ci0KLSNpZmRlZiBDT05GSUdfQU1EX0lPTU1VCi0JaWYgKGFtZF9pb21tdV9pcnFfb3BzLnByZXBhcmUoKSA9PSAwKQotCQlyZW1hcF9vcHMgPSAmYW1kX2lvbW11X2lycV9vcHM7Ci0jZW5kaWYKLX0KLQogdm9pZCBzZXRfaXJxX3JlbWFwcGluZ19icm9rZW4odm9pZCkKIHsKIAlpcnFfcmVtYXBfYnJva2VuID0gMTsKIH0KIAotaW50IGlycV9yZW1hcHBpbmdfc3VwcG9ydGVkKHZvaWQpCi17Ci0JaWYgKGRpc2FibGVfaXJxX3JlbWFwKQotCQlyZXR1cm4gMDsKLQotCWlmICghcmVtYXBfb3BzIHx8ICFyZW1hcF9vcHMtPnN1cHBvcnRlZCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gcmVtYXBfb3BzLT5zdXBwb3J0ZWQoKTsKLX0KLQogaW50IF9faW5pdCBpcnFfcmVtYXBwaW5nX3ByZXBhcmUodm9pZCkKIHsKLQlpZiAoIXJlbWFwX29wcyB8fCAhcmVtYXBfb3BzLT5wcmVwYXJlKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZGlzYWJsZV9pcnFfcmVtYXApCisJCXJldHVybiAtRU5PU1lTOwogCi0JcmV0dXJuIHJlbWFwX29wcy0+cHJlcGFyZSgpOworCWlmIChpbnRlbF9pcnFfcmVtYXBfb3BzLnByZXBhcmUoKSA9PSAwKQorCQlyZW1hcF9vcHMgPSAmaW50ZWxfaXJxX3JlbWFwX29wczsKKwllbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19BTURfSU9NTVUpICYmCisJCSBhbWRfaW9tbXVfaXJxX29wcy5wcmVwYXJlKCkgPT0gMCkKKwkJcmVtYXBfb3BzID0gJmFtZF9pb21tdV9pcnFfb3BzOworCWVsc2UKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlyZXR1cm4gMDsKIH0KIAogaW50IF9faW5pdCBpcnFfcmVtYXBwaW5nX2VuYWJsZSh2b2lkKQogewogCWludCByZXQ7CiAKLQlpZiAoIXJlbWFwX29wcyB8fCAhcmVtYXBfb3BzLT5lbmFibGUpCisJaWYgKCFyZW1hcF9vcHMtPmVuYWJsZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXQgPSByZW1hcF9vcHMtPmVuYWJsZSgpOwpAQCAtMjQ1LDIyICsyMzEsMTYgQEAKIAogdm9pZCBpcnFfcmVtYXBwaW5nX2Rpc2FibGUodm9pZCkKIHsKLQlpZiAoIWlycV9yZW1hcHBpbmdfZW5hYmxlZCB8fAotCSAgICAhcmVtYXBfb3BzIHx8Ci0JICAgICFyZW1hcF9vcHMtPmRpc2FibGUpCi0JCXJldHVybjsKLQotCXJlbWFwX29wcy0+ZGlzYWJsZSgpOworCWlmIChpcnFfcmVtYXBwaW5nX2VuYWJsZWQgJiYgcmVtYXBfb3BzLT5kaXNhYmxlKQorCQlyZW1hcF9vcHMtPmRpc2FibGUoKTsKIH0KIAogaW50IGlycV9yZW1hcHBpbmdfcmVlbmFibGUoaW50IG1vZGUpCiB7Ci0JaWYgKCFpcnFfcmVtYXBwaW5nX2VuYWJsZWQgfHwKLQkgICAgIXJlbWFwX29wcyB8fAotCSAgICAhcmVtYXBfb3BzLT5yZWVuYWJsZSkKLQkJcmV0dXJuIDA7CisJaWYgKGlycV9yZW1hcHBpbmdfZW5hYmxlZCAmJiByZW1hcF9vcHMtPnJlZW5hYmxlKQorCQlyZXR1cm4gcmVtYXBfb3BzLT5yZWVuYWJsZShtb2RlKTsKIAotCXJldHVybiByZW1hcF9vcHMtPnJlZW5hYmxlKG1vZGUpOworCXJldHVybiAwOwogfQogCiBpbnQgX19pbml0IGlycV9yZW1hcF9lbmFibGVfZmF1bHRfaGFuZGxpbmcodm9pZCkKQEAgLTI2OCw3ICsyNDgsNyBAQAogCWlmICghaXJxX3JlbWFwcGluZ19lbmFibGVkKQogCQlyZXR1cm4gMDsKIAotCWlmICghcmVtYXBfb3BzIHx8ICFyZW1hcF9vcHMtPmVuYWJsZV9mYXVsdGluZykKKwlpZiAoIXJlbWFwX29wcy0+ZW5hYmxlX2ZhdWx0aW5nKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldHVybiByZW1hcF9vcHMtPmVuYWJsZV9mYXVsdGluZygpOwpAQCAtMjc5LDcgKzI1OSw3IEBACiAJCQkJdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uLCBpbnQgdmVjdG9yLAogCQkJCXN0cnVjdCBpb19hcGljX2lycV9hdHRyICphdHRyKQogewotCWlmICghcmVtYXBfb3BzIHx8ICFyZW1hcF9vcHMtPnNldHVwX2lvYXBpY19lbnRyeSkKKwlpZiAoIXJlbWFwX29wcy0+c2V0dXBfaW9hcGljX2VudHJ5KQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldHVybiByZW1hcF9vcHMtPnNldHVwX2lvYXBpY19lbnRyeShpcnEsIGVudHJ5LCBkZXN0aW5hdGlvbiwKQEAgLTI4OSw4ICsyNjksNyBAQAogc3RhdGljIGludCBzZXRfcmVtYXBwZWRfaXJxX2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBib29sIGZvcmNlKQogewotCWlmICghY29uZmlnX2VuYWJsZWQoQ09ORklHX1NNUCkgfHwgIXJlbWFwX29wcyB8fAotCSAgICAhcmVtYXBfb3BzLT5zZXRfYWZmaW5pdHkpCisJaWYgKCFjb25maWdfZW5hYmxlZChDT05GSUdfU01QKSB8fCAhcmVtYXBfb3BzLT5zZXRfYWZmaW5pdHkpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIHJlbWFwX29wcy0+c2V0X2FmZmluaXR5KGRhdGEsIG1hc2ssIGZvcmNlKTsKQEAgLTMwMCwxMCArMjc5LDcgQEAKIHsKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gaXJxX2NmZyhpcnEpOwogCi0JaWYgKCFyZW1hcF9vcHMgfHwgIXJlbWFwX29wcy0+ZnJlZV9pcnEpCi0JCXJldHVybjsKLQotCWlmIChpcnFfcmVtYXBwZWQoY2ZnKSkKKwlpZiAoaXJxX3JlbWFwcGVkKGNmZykgJiYgcmVtYXBfb3BzLT5mcmVlX2lycSkKIAkJcmVtYXBfb3BzLT5mcmVlX2lycShpcnEpOwogfQogCkBAIC0zMTUsMTMgKzI5MSwxMyBAQAogCiAJaWYgKCFpcnFfcmVtYXBwZWQoY2ZnKSkKIAkJbmF0aXZlX2NvbXBvc2VfbXNpX21zZyhwZGV2LCBpcnEsIGRlc3QsIG1zZywgaHBldF9pZCk7Ci0JZWxzZSBpZiAocmVtYXBfb3BzICYmIHJlbWFwX29wcy0+Y29tcG9zZV9tc2lfbXNnKQorCWVsc2UgaWYgKHJlbWFwX29wcy0+Y29tcG9zZV9tc2lfbXNnKQogCQlyZW1hcF9vcHMtPmNvbXBvc2VfbXNpX21zZyhwZGV2LCBpcnEsIGRlc3QsIG1zZywgaHBldF9pZCk7CiB9CiAKIHN0YXRpYyBpbnQgbXNpX2FsbG9jX3JlbWFwcGVkX2lycShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGlycSwgaW50IG52ZWMpCiB7Ci0JaWYgKCFyZW1hcF9vcHMgfHwgIXJlbWFwX29wcy0+bXNpX2FsbG9jX2lycSkKKwlpZiAoIXJlbWFwX29wcy0+bXNpX2FsbG9jX2lycSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXR1cm4gcmVtYXBfb3BzLT5tc2lfYWxsb2NfaXJxKHBkZXYsIGlycSwgbnZlYyk7CkBAIC0zMzAsNyArMzA2LDcgQEAKIHN0YXRpYyBpbnQgbXNpX3NldHVwX3JlbWFwcGVkX2lycShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGlycSwKIAkJCQkgIGludCBpbmRleCwgaW50IHN1Yl9oYW5kbGUpCiB7Ci0JaWYgKCFyZW1hcF9vcHMgfHwgIXJlbWFwX29wcy0+bXNpX3NldHVwX2lycSkKKwlpZiAoIXJlbWFwX29wcy0+bXNpX3NldHVwX2lycSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXR1cm4gcmVtYXBfb3BzLT5tc2lfc2V0dXBfaXJxKHBkZXYsIGlycSwgaW5kZXgsIHN1Yl9oYW5kbGUpOwpAQCAtMzQwLDcgKzMxNiw3IEBACiB7CiAJaW50IHJldDsKIAotCWlmICghcmVtYXBfb3BzIHx8ICFyZW1hcF9vcHMtPmFsbG9jX2hwZXRfbXNpKQorCWlmICghcmVtYXBfb3BzLT5hbGxvY19ocGV0X21zaSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXQgPSByZW1hcF9vcHMtPmFsbG9jX2hwZXRfbXNpKGlycSwgaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pb21tdS9pcnFfcmVtYXBwaW5nLmggYi9kcml2ZXJzL2lvbW11L2lycV9yZW1hcHBpbmcuaAppbmRleCBmZGUyNTBmLi5jNDQ4ZWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lvbW11L2lycV9yZW1hcHBpbmcuaAorKysgYi9kcml2ZXJzL2lvbW11L2lycV9yZW1hcHBpbmcuaApAQCAtMzEsMTYgKzMxLDEyIEBACiBzdHJ1Y3QgcGNpX2RldjsKIHN0cnVjdCBtc2lfbXNnOwogCi1leHRlcm4gaW50IGRpc2FibGVfaXJxX3JlbWFwOwogZXh0ZXJuIGludCBpcnFfcmVtYXBfYnJva2VuOwogZXh0ZXJuIGludCBkaXNhYmxlX3NvdXJjZWlkX2NoZWNraW5nOwogZXh0ZXJuIGludCBub194MmFwaWNfb3B0b3V0OwogZXh0ZXJuIGludCBpcnFfcmVtYXBwaW5nX2VuYWJsZWQ7CiAKIHN0cnVjdCBpcnFfcmVtYXBfb3BzIHsKLQkvKiBDaGVjayB3aGV0aGVyIEludGVycnVwdCBSZW1hcHBpbmcgaXMgc3VwcG9ydGVkICovCi0JaW50ICgqc3VwcG9ydGVkKSh2b2lkKTsKLQogCS8qIEluaXRpYWxpemVzIGhhcmR3YXJlIGFuZCBtYWtlcyBpdCByZWFkeSBmb3IgcmVtYXBwaW5nIGludGVycnVwdHMgKi8KIAlpbnQgICgqcHJlcGFyZSkodm9pZCk7CiAKQEAgLTg5LDcgKzg1LDYgQEAKICNlbHNlICAvKiBDT05GSUdfSVJRX1JFTUFQICovCiAKICNkZWZpbmUgaXJxX3JlbWFwcGluZ19lbmFibGVkIDAKLSNkZWZpbmUgZGlzYWJsZV9pcnFfcmVtYXAgICAgIDEKICNkZWZpbmUgaXJxX3JlbWFwX2Jyb2tlbiAgICAgIDAKIAogI2VuZGlmIC8qIENPTkZJR19JUlFfUkVNQVAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW9tbXUvdGVncmEtZ2FydC5jIGIvZHJpdmVycy9pb21tdS90ZWdyYS1nYXJ0LmMKaW5kZXggZjcyMmEwYy4uYzQ4ZGEwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pb21tdS90ZWdyYS1nYXJ0LmMKKysrIGIvZHJpdmVycy9pb21tdS90ZWdyYS1nYXJ0LmMKQEAgLTMxNSw2ICszMTUsNyBAQAogCS5hdHRhY2hfZGV2CT0gZ2FydF9pb21tdV9hdHRhY2hfZGV2LAogCS5kZXRhY2hfZGV2CT0gZ2FydF9pb21tdV9kZXRhY2hfZGV2LAogCS5tYXAJCT0gZ2FydF9pb21tdV9tYXAsCisJLm1hcF9zZwkJPSBkZWZhdWx0X2lvbW11X21hcF9zZywKIAkudW5tYXAJCT0gZ2FydF9pb21tdV91bm1hcCwKIAkuaW92YV90b19waHlzCT0gZ2FydF9pb21tdV9pb3ZhX3RvX3BoeXMsCiAJLnBnc2l6ZV9iaXRtYXAJPSBHQVJUX0lPTU1VX1BHU0laRVMsCkBAIC0zOTUsNyArMzk2LDcgQEAKIAlkb19nYXJ0X3NldHVwKGdhcnQsIE5VTEwpOwogCiAJZ2FydF9oYW5kbGUgPSBnYXJ0OwotCWJ1c19zZXRfaW9tbXUoJnBsYXRmb3JtX2J1c190eXBlLCAmZ2FydF9pb21tdV9vcHMpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9pcnEtbWlwcy1naWMuYyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtbWlwcy1naWMuYwppbmRleCAyYjA0NjhlLi41NmI5NmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lycWNoaXAvaXJxLW1pcHMtZ2ljLmMKKysrIGIvZHJpdmVycy9pcnFjaGlwL2lycS1taXBzLWdpYy5jCkBAIC0zNyw2ICszNyw3IEBACiBzdGF0aWMgaW50IGdpY19zaGFyZWRfaW50cnM7CiBzdGF0aWMgaW50IGdpY192cGVzOwogc3RhdGljIHVuc2lnbmVkIGludCBnaWNfY3B1X3BpbjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdGltZXJfY3B1X3BpbjsKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ2ljX2xldmVsX2lycV9jb250cm9sbGVyLCBnaWNfZWRnZV9pcnFfY29udHJvbGxlcjsKIAogc3RhdGljIHZvaWQgX19naWNfaXJxX2Rpc3BhdGNoKHZvaWQpOwpAQCAtNjE2LDYgKzYxNyw4IEBACiAJCQlnaWNfd3JpdGUoR0lDX1JFRyhWUEVfT1RIRVIsIEdJQ19WUEVfQ09NUEFSRV9NQVApLCB2YWwpOwogCQkJYnJlYWs7CiAJCWNhc2UgR0lDX0xPQ0FMX0lOVF9USU1FUjoKKwkJCS8qIENPTkZJR19NSVBTX0NNUCB3b3JrYXJvdW5kIChzZWUgX19naWNfaW5pdCkgKi8KKwkJCXZhbCA9IEdJQ19NQVBfVE9fUElOX01TSyB8IHRpbWVyX2NwdV9waW47CiAJCQlnaWNfd3JpdGUoR0lDX1JFRyhWUEVfT1RIRVIsIEdJQ19WUEVfVElNRVJfTUFQKSwgdmFsKTsKIAkJCWJyZWFrOwogCQljYXNlIEdJQ19MT0NBTF9JTlRfUEVSRkNUUjoKQEAgLTcxMywxMiArNzE2LDM2IEBACiAJaWYgKGNwdV9oYXNfdmVpYykgewogCQkvKiBBbHdheXMgdXNlIHZlY3RvciAxIGluIEVJQyBtb2RlICovCiAJCWdpY19jcHVfcGluID0gMDsKKwkJdGltZXJfY3B1X3BpbiA9IGdpY19jcHVfcGluOwogCQlzZXRfdmlfaGFuZGxlcihnaWNfY3B1X3BpbiArIEdJQ19QSU5fVE9fVkVDX09GRlNFVCwKIAkJCSAgICAgICBfX2dpY19pcnFfZGlzcGF0Y2gpOwogCX0gZWxzZSB7CiAJCWdpY19jcHVfcGluID0gY3B1X3ZlYyAtIEdJQ19DUFVfUElOX09GRlNFVDsKIAkJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIoTUlQU19DUFVfSVJRX0JBU0UgKyBjcHVfdmVjLAogCQkJCQlnaWNfaXJxX2Rpc3BhdGNoKTsKKwkJLyoKKwkJICogV2l0aCB0aGUgQ01QIGltcGxlbWVudGF0aW9uIG9mIFNNUCAoZGVwcmVjYXRlZCksIG90aGVyIENQVXMKKwkJICogYXJlIHN0YXJ0ZWQgYnkgdGhlIGJvb3Rsb2FkZXIgYW5kIHB1dCBpbnRvIGEgdGltZXIgYmFzZWQKKwkJICogd2FpdGluZyBwb2xsIGxvb3AuIFdlIG11c3Qgbm90IHJlLXJvdXRlIHRob3NlIENQVSdzIGxvY2FsCisJCSAqIHRpbWVyIGludGVycnVwdHMgYXMgdGhlIHdhaXQgaW5zdHJ1Y3Rpb24gd2lsbCBuZXZlciBmaW5pc2gsCisJCSAqIHNvIGp1c3QgaGFuZGxlIHdoYXRldmVyIENQVSBpbnRlcnJ1cHQgaXQgaXMgcm91dGVkIHRvIGJ5CisJCSAqIGRlZmF1bHQuCisJCSAqCisJCSAqIFRoaXMgd29ya2Fyb3VuZCBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIENNUCBzdXBwb3J0IGlzCisJCSAqIGRyb3BwZWQuCisJCSAqLworCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfTUlQU19DTVApICYmCisJCSAgICBnaWNfbG9jYWxfaXJxX2lzX3JvdXRhYmxlKEdJQ19MT0NBTF9JTlRfVElNRVIpKSB7CisJCQl0aW1lcl9jcHVfcGluID0gZ2ljX3JlYWQoR0lDX1JFRyhWUEVfTE9DQUwsCisJCQkJCQkJIEdJQ19WUEVfVElNRVJfTUFQKSkgJgorCQkJCQlHSUNfTUFQX01TSzsKKwkJCWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyKE1JUFNfQ1BVX0lSUV9CQVNFICsKKwkJCQkJCUdJQ19DUFVfUElOX09GRlNFVCArCisJCQkJCQl0aW1lcl9jcHVfcGluLAorCQkJCQkJZ2ljX2lycV9kaXNwYXRjaCk7CisJCX0gZWxzZSB7CisJCQl0aW1lcl9jcHVfcGluID0gZ2ljX2NwdV9waW47CisJCX0KIAl9CiAKIAlnaWNfaXJxX2RvbWFpbiA9IGlycV9kb21haW5fYWRkX3NpbXBsZShub2RlLCBHSUNfTlVNX0xPQ0FMX0lOVFJTICsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vbWVzc2FnZS5jCmluZGV4IDBiMzgwNjAuLmQ3YzI4NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9tZXNzYWdlLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL21lc3NhZ2UuYwpAQCAtMTQ3NCw3ICsxNDc0LDcgQEAKIAkJCQkJYWRkX2FpKHBsY2ksICZwYXJtc1s1XSk7CiAJCQkJCXNpZ19yZXEocGxjaSwgUkVKRUNULCAwKTsKIAkJCQl9Ci0JCQkJZWxzZSBpZiAoUmVqZWN0ID09IDEgfHwgUmVqZWN0ID4gOSkKKwkJCQllbHNlIGlmIChSZWplY3QgPT0gMSB8fCBSZWplY3QgPj0gOSkKIAkJCQl7CiAJCQkJCWFkZF9haShwbGNpLCAmcGFybXNbNV0pOwogCQkJCQlzaWdfcmVxKHBsY2ksIEhBTkdVUCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pcGFjLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pcGFjLmMKaW5kZXggY2NkN2Q4NS4uYTc3ZWVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL21JU0ROaXBhYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmlwYWMuYwpAQCAtNzU0LDEwICs3NTQsMTAgQEAKIH0KIAogc3RhdGljIGludAotb3Blbl9kY2hhbm5lbChzdHJ1Y3QgaXNhY19odyAqaXNhYywgc3RydWN0IGNoYW5uZWxfcmVxICpycSkKK29wZW5fZGNoYW5uZWxfY2FsbGVyKHN0cnVjdCBpc2FjX2h3ICppc2FjLCBzdHJ1Y3QgY2hhbm5lbF9yZXEgKnJxLCB2b2lkICpjYWxsZXIpCiB7CiAJcHJfZGVidWcoIiVzOiAlcyBkZXYoJWQpIG9wZW4gZnJvbSAlcFxuIiwgaXNhYy0+bmFtZSwgX19mdW5jX18sCi0JCSBpc2FjLT5kY2guZGV2LmlkLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMSkpOworCQkgaXNhYy0+ZGNoLmRldi5pZCwgY2FsbGVyKTsKIAlpZiAocnEtPnByb3RvY29sICE9IElTRE5fUF9URV9TMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHJxLT5hZHIuY2hhbm5lbCA9PSAxKQpAQCAtNzcxLDYgKzc3MSwxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitvcGVuX2RjaGFubmVsKHN0cnVjdCBpc2FjX2h3ICppc2FjLCBzdHJ1Y3QgY2hhbm5lbF9yZXEgKnJxKQoreworCXJldHVybiBvcGVuX2RjaGFubmVsX2NhbGxlcihpc2FjLCBycSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKK30KKwogc3RhdGljIGNvbnN0IGNoYXIgKklTQUNWZXJbXSA9CiB7IjIwODYvMjE4NiBWMS4xIiwgIjIwODUgQjEiLCAiMjA4NSBCMiIsCiAgIjIwODUgVjIuMyJ9OwpAQCAtMTU0OCw3ICsxNTU0LDcgQEAKIAljYXNlIE9QRU5fQ0hBTk5FTDoKIAkJcnEgPSBhcmc7CiAJCWlmIChycS0+cHJvdG9jb2wgPT0gSVNETl9QX1RFX1MwKQotCQkJZXJyID0gb3Blbl9kY2hhbm5lbChpc2FjLCBycSk7CisJCQllcnIgPSBvcGVuX2RjaGFubmVsX2NhbGxlcihpc2FjLCBycSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIAkJZWxzZQogCQkJZXJyID0gb3Blbl9iY2hhbm5lbChpcGFjLCBycSk7CiAJCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vdzY2OTIuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi93NjY5Mi5jCmluZGV4IGRlNjlmNjguLjc0MTY3NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi93NjY5Mi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi93NjY5Mi5jCkBAIC0xMTc2LDEwICsxMTc2LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLW9wZW5fZGNoYW5uZWwoc3RydWN0IHc2NjkyX2h3ICpjYXJkLCBzdHJ1Y3QgY2hhbm5lbF9yZXEgKnJxKQorb3Blbl9kY2hhbm5lbChzdHJ1Y3QgdzY2OTJfaHcgKmNhcmQsIHN0cnVjdCBjaGFubmVsX3JlcSAqcnEsIHZvaWQgKmNhbGxlcikKIHsKIAlwcl9kZWJ1ZygiJXM6ICVzIGRldiglZCkgb3BlbiBmcm9tICVwXG4iLCBjYXJkLT5uYW1lLCBfX2Z1bmNfXywKLQkJIGNhcmQtPmRjaC5kZXYuaWQsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygxKSk7CisJCSBjYXJkLT5kY2guZGV2LmlkLCBjYWxsZXIpOwogCWlmIChycS0+cHJvdG9jb2wgIT0gSVNETl9QX1RFX1MwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAocnEtPmFkci5jaGFubmVsID09IDEpCkBAIC0xMjA3LDcgKzEyMDcsNyBAQAogCWNhc2UgT1BFTl9DSEFOTkVMOgogCQlycSA9IGFyZzsKIAkJaWYgKHJxLT5wcm90b2NvbCA9PSBJU0ROX1BfVEVfUzApCi0JCQllcnIgPSBvcGVuX2RjaGFubmVsKGNhcmQsIHJxKTsKKwkJCWVyciA9IG9wZW5fZGNoYW5uZWwoY2FyZCwgcnEsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAJCWVsc2UKIAkJCWVyciA9IG9wZW5fYmNoYW5uZWwoY2FyZCwgcnEpOwogCQlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmYzRzOHNfbDEuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmM0czhzX2wxLmMKaW5kZXggZmM5ZjlkMC4uMGU1ZDY3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmYzRzOHNfbDEuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjNHM4c19sMS5jCkBAIC0yMjUsMjAgKzIyNSw2IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotV3JpdGVfaGZjMTYoaGZjNHM4c19odyAqYSwgdV9jaGFyIGIsIHVfc2hvcnQgYykKLXsKLQlTZXRSZWdBZGRyKGEsIGIpOwotCW91dHcoYywgYS0+aW9iYXNlKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1Xcml0ZV9oZmMzMihoZmM0czhzX2h3ICphLCB1X2NoYXIgYiwgdV9sb25nIGMpCi17Ci0JU2V0UmVnQWRkcihhLCBiKTsKLQlvdXRsKGMsIGEtPmlvYmFzZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAogZldyaXRlX2hmYzMyKGhmYzRzOHNfaHcgKmEsIHVfbG9uZyBjKQogewogCW91dGwoYywgYS0+aW9iYXNlKTsKQEAgLTI2NiwxMyArMjUyLDYgQEAKIH0KIAogc3RhdGljIGlubGluZSB1X2xvbmcKLVJlYWRfaGZjMzIoaGZjNHM4c19odyAqYSwgdV9jaGFyIGIpCi17Ci0JU2V0UmVnQWRkcihhLCBiKTsKLQlyZXR1cm4gKGlubCgodm9sYXRpbGUgdV9pbnQpIGEtPmlvYmFzZSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHVfbG9uZwogZlJlYWRfaGZjMzIoaGZjNHM4c19odyAqYSkKIHsKIAlyZXR1cm4gKGlubCgodm9sYXRpbGUgdV9pbnQpIGEtPmlvYmFzZSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2lzZG5sb29wL2lzZG5sb29wLmMgYi9kcml2ZXJzL2lzZG4vaXNkbmxvb3AvaXNkbmxvb3AuYwppbmRleCA1YTRkYTk0Li5lZjljOGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaXNkbmxvb3AvaXNkbmxvb3AuYworKysgYi9kcml2ZXJzL2lzZG4vaXNkbmxvb3AvaXNkbmxvb3AuYwpAQCAtNTksNyArNTksOCBAQAogCWlzZG5fY3RybCBjbWQ7CiAKIAl3aGlsZSAoY2FyZC0+c25kY291bnRbY2hdKSB7Ci0JCWlmICgoc2tiID0gc2tiX2RlcXVldWUoJmNhcmQtPmJxdWV1ZVtjaF0pKSkgeworCQlza2IgPSBza2JfZGVxdWV1ZSgmY2FyZC0+YnF1ZXVlW2NoXSk7CisJCWlmIChza2IpIHsKIAkJCWxlbiA9IHNrYi0+bGVuOwogCQkJY2FyZC0+c25kY291bnRbY2hdIC09IGxlbjsKIAkJCWFjayA9ICooc2tiLT5oZWFkKTsgLyogdXNlZCBhcyBzY3JhdGNoIGFyZWEgKi8KQEAgLTE0OSw4ICsxNTAsNyBAQAogCWludCBhY3Rpb247CiB9IGlzZG5sb29wX3N0YXQ7CiAvKiAqSU5ERU5ULU9GRiogKi8KLXN0YXRpYyBpc2RubG9vcF9zdGF0IGlzZG5sb29wX3N0YXRfdGFibGVbXSA9Ci17CitzdGF0aWMgaXNkbmxvb3Bfc3RhdCBpc2RubG9vcF9zdGF0X3RhYmxlW10gPSB7CiAJeyJCQ09OXyIsICAgICAgICAgIElTRE5fU1RBVF9CQ09OTiwgMX0sIC8qIEItQ2hhbm5lbCBjb25uZWN0ZWQgICAgICAgICovCiAJeyJCRElTXyIsICAgICAgICAgIElTRE5fU1RBVF9CSFVQLCAgMn0sIC8qIEItQ2hhbm5lbCBkaXNjb25uZWN0ZWQgICAgICovCiAJeyJEQ09OXyIsICAgICAgICAgIElTRE5fU1RBVF9EQ09OTiwgMH0sIC8qIEQtQ2hhbm5lbCBjb25uZWN0ZWQgICAgICAgICovCkBAIC0zMTcsNyArMzE3LDggQEAKIAl1X2NoYXIgKnA7CiAJaXNkbl9jdHJsIGNtZDsKIAotCWlmICgoc2tiID0gc2tiX2RlcXVldWUoJmNhcmQtPmRxdWV1ZSkpKQorCXNrYiA9IHNrYl9kZXF1ZXVlKCZjYXJkLT5kcXVldWUpOworCWlmIChza2IpCiAJCWF2YWlsID0gc2tiLT5sZW47CiAJZWxzZQogCQlhdmFpbCA9IDA7CkBAIC00NzEsOCArNDcyLDggQEAKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBsZW4gPSBzdHJsZW4ocykgKyAoKGNoID49IDApID8gMyA6IDApOwotCi0JaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihsZW4pKSkgeworCXNrYiA9IGRldl9hbGxvY19za2IobGVuKTsKKwlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJpc2RubG9vcDogT3V0IG9mIG1lbW9yeSBpbiBpc2RubG9vcF9mYWtlXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNDgzLDggKzQ4NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAvKiAqSU5ERU5ULU9GRiogKi8KLXN0YXRpYyBpc2RubG9vcF9zdGF0IGlzZG5sb29wX2NtZF90YWJsZVtdID0KLXsKK3N0YXRpYyBpc2RubG9vcF9zdGF0IGlzZG5sb29wX2NtZF90YWJsZVtdID0gewogCXsiQkNPTl9SIiwgICAgICAgICAwLCAgMX0sCS8qIEItQ2hhbm5lbCBjb25uZWN0ICAgICAgICAqLwogCXsiQkNPTl9JIiwgICAgICAgICAwLCAxN30sCS8qIEItQ2hhbm5lbCBjb25uZWN0IGluZCAgICAqLwogCXsiQkRJU19SIiwgICAgICAgICAwLCAgMn0sCS8qIEItQ2hhbm5lbCBkaXNjb25uZWN0ICAgICAqLwpAQCAtNTI1LDEwICs1MjUsOCBAQAogCWlzZG5sb29wX2Zha2UoY2FyZCwgIk5BSyIsIC0xKTsKIH0KIAotc3RhdGljIHVfY2hhciBjdGFibGVfZXVbXSA9Ci17MHgwMCwgMHgxMSwgMHgwMSwgMHgxMn07Ci1zdGF0aWMgdV9jaGFyIGN0YWJsZV8xdFtdID0KLXsweDAwLCAweDNiLCAweDAxLCAweDNhfTsKK3N0YXRpYyB1X2NoYXIgY3RhYmxlX2V1W10gPSB7MHgwMCwgMHgxMSwgMHgwMSwgMHgxMn07CitzdGF0aWMgdV9jaGFyIGN0YWJsZV8xdFtdID0gezB4MDAsIDB4M2IsIDB4MDEsIDB4M2F9OwogCiAvKgogICogQXNzZW1ibGUgYSBzaW1wbGlmaWVkIGNhdXNlIG1lc3NhZ2UgZGVwZW5kaW5nIG9uIHRoZQpAQCAtNTU0LDkgKzU1Miw5IEBACiAJCXNwcmludGYoYnVmLCAiJTAyWDQ0IiwgY3RhYmxlXzF0W2NhdV0pOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXR1cm4gKCIwMDAwIik7CisJCXJldHVybiAiMDAwMCI7CiAJfQotCXJldHVybiAoYnVmKTsKKwlyZXR1cm4gYnVmOwogfQogCiAvKgpAQCAtNjQ3LDEwICs2NDUsOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmlzZG5sb29wX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHVfY2hhciBzaTJiaXRbXSA9Ci17MCwgMSwgMCwgMCwgMCwgMiwgMCwgNCwgMCwgMH07Ci1zdGF0aWMgdV9jaGFyIGJpdDJzaVtdID0KLXsxLCA1LCA3fTsKK3N0YXRpYyB1X2NoYXIgc2kyYml0W10gPSB7MCwgMSwgMCwgMCwgMCwgMiwgMCwgNCwgMCwgMH07CitzdGF0aWMgdV9jaGFyIGJpdDJzaVtdID0gezEsIDUsIDd9OwogCiAvKgogICogVHJ5IGZpbmRpbmcgYSBsaXN0ZW5lciBmb3IgYW4gb3V0Z29pbmcgY2FsbC4KQEAgLTc1NCwxNyArNzUwLDE3IEBACiAJCWlmIChjYWxsZXIpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCiAJCQkJaWYgKCEoc3RyY21wKGNhcmQtPnMwbnVtW2ldLCBwaG9uZSkpKQotCQkJCQlyZXR1cm4gKHBob25lKTsKLQkJCXJldHVybiAoY2FyZC0+czBudW1bMF0pOworCQkJCQlyZXR1cm4gcGhvbmU7CisJCQlyZXR1cm4gY2FyZC0+czBudW1bMF07CiAJCX0KLQkJcmV0dXJuIChwaG9uZSk7CisJCXJldHVybiBwaG9uZTsKIAkJYnJlYWs7CiAJY2FzZSBJU0ROX1BUWVBFXzFUUjY6CiAJCWlmIChjYWxsZXIpIHsKIAkJCXNwcmludGYobnBob25lLCAiJXMlYyIsIGNhcmQtPnMwbnVtWzBdLCBwaG9uZVswXSk7Ci0JCQlyZXR1cm4gKG5waG9uZSk7CisJCQlyZXR1cm4gbnBob25lOwogCQl9IGVsc2UKLQkJCXJldHVybiAoJnBob25lW3N0cmxlbihwaG9uZSkgLSAxXSk7CisJCQlyZXR1cm4gJnBob25lW3N0cmxlbihwaG9uZSkgLSAxXTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAiIjsKQEAgLTExNDgsMTQgKzExNDQsMTQgQEAKIAkJY2FzZSBJU0ROTE9PUF9JT0NUTF9TVEFSVFVQOgogCQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICh2b2lkICopIGEsIHNpemVvZihpc2RubG9vcF9zZGVmKSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gKGlzZG5sb29wX3N0YXJ0KGNhcmQsIChpc2RubG9vcF9zZGVmICopIGEpKTsKKwkJCXJldHVybiBpc2RubG9vcF9zdGFydChjYXJkLCAoaXNkbmxvb3Bfc2RlZiAqKSBhKTsKIAkJCWJyZWFrOwogCQljYXNlIElTRE5MT09QX0lPQ1RMX0FERENBUkQ6CiAJCQlpZiAoY29weV9mcm9tX3VzZXIoKGNoYXIgKikmY2RlZiwKIAkJCQkJICAgKGNoYXIgKilhLAogCQkJCQkgICBzaXplb2YoY2RlZikpKQogCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIChpc2RubG9vcF9hZGRjYXJkKGNkZWYuaWQxKSk7CisJCQlyZXR1cm4gaXNkbmxvb3BfYWRkY2FyZChjZGVmLmlkMSk7CiAJCQlicmVhazsKIAkJY2FzZSBJU0ROTE9PUF9JT0NUTF9MRUFTRURDRkc6CiAJCQlpZiAoYSkgewpAQCAtMTM3Nyw3ICsxMzczLDcgQEAKIAlpc2RubG9vcF9jYXJkICpjYXJkID0gaXNkbmxvb3BfZmluZGNhcmQoYy0+ZHJpdmVyKTsKIAogCWlmIChjYXJkKQotCQlyZXR1cm4gKGlzZG5sb29wX2NvbW1hbmQoYywgY2FyZCkpOworCQlyZXR1cm4gaXNkbmxvb3BfY29tbWFuZChjLCBjYXJkKTsKIAlwcmludGsoS0VSTl9FUlIKIAkgICAgICAgImlzZG5sb29wOiBpZl9jb21tYW5kIGNhbGxlZCB3aXRoIGludmFsaWQgZHJpdmVySWQhXG4iKTsKIAlyZXR1cm4gLUVOT0RFVjsKQEAgLTEzOTEsNyArMTM4Nyw3IEBACiAJaWYgKGNhcmQpIHsKIAkJaWYgKCEoY2FyZC0+ZmxhZ3MgJiBJU0ROTE9PUF9GTEFHU19SVU5OSU5HKSkKIAkJCXJldHVybiAtRU5PREVWOwotCQlyZXR1cm4gKGlzZG5sb29wX3dyaXRlY21kKGJ1ZiwgbGVuLCAxLCBjYXJkKSk7CisJCXJldHVybiBpc2RubG9vcF93cml0ZWNtZChidWYsIGxlbiwgMSwgY2FyZCk7CiAJfQogCXByaW50ayhLRVJOX0VSUgogCSAgICAgICAiaXNkbmxvb3A6IGlmX3dyaXRlY21kIGNhbGxlZCB3aXRoIGludmFsaWQgZHJpdmVySWQhXG4iKTsKQEAgLTE0MDYsNyArMTQwMiw3IEBACiAJaWYgKGNhcmQpIHsKIAkJaWYgKCEoY2FyZC0+ZmxhZ3MgJiBJU0ROTE9PUF9GTEFHU19SVU5OSU5HKSkKIAkJCXJldHVybiAtRU5PREVWOwotCQlyZXR1cm4gKGlzZG5sb29wX3JlYWRzdGF0dXMoYnVmLCBsZW4sIGNhcmQpKTsKKwkJcmV0dXJuIGlzZG5sb29wX3JlYWRzdGF0dXMoYnVmLCBsZW4sIGNhcmQpOwogCX0KIAlwcmludGsoS0VSTl9FUlIKIAkgICAgICAgImlzZG5sb29wOiBpZl9yZWFkc3RhdHVzIGNhbGxlZCB3aXRoIGludmFsaWQgZHJpdmVySWQhXG4iKTsKQEAgLTE0MjMsNyArMTQxOSw3IEBACiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJLyogYWNrIHJlcXVlc3Qgc3RvcmVkIGluIHNrYiBzY3JhdGNoIGFyZWEgKi8KIAkJKihza2ItPmhlYWQpID0gYWNrOwotCQlyZXR1cm4gKGlzZG5sb29wX3NlbmRidWYoY2hhbm5lbCwgc2tiLCBjYXJkKSk7CisJCXJldHVybiBpc2RubG9vcF9zZW5kYnVmKGNoYW5uZWwsIHNrYiwgY2FyZCk7CiAJfQogCXByaW50ayhLRVJOX0VSUgogCSAgICAgICAiaXNkbmxvb3A6IGlmX3NlbmRidWYgY2FsbGVkIHdpdGggaW52YWxpZCBkcml2ZXJJZCFcbiIpOwpAQCAtMTQzOSw4ICsxNDM1LDggQEAKIHsKIAlpc2RubG9vcF9jYXJkICpjYXJkOwogCWludCBpOwotCi0JaWYgKCEoY2FyZCA9IGt6YWxsb2Moc2l6ZW9mKGlzZG5sb29wX2NhcmQpLCBHRlBfS0VSTkVMKSkpIHsKKwljYXJkID0ga3phbGxvYyhzaXplb2YoaXNkbmxvb3BfY2FyZCksIEdGUF9LRVJORUwpOworCWlmICghY2FyZCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiaXNkbmxvb3A6ICglcykgQ291bGQgbm90IGFsbG9jYXRlIGNhcmQtc3RydWN0LlxuIiwgaWQpOwogCQlyZXR1cm4gKGlzZG5sb29wX2NhcmQgKikgMDsKQEAgLTE0ODksOCArMTQ4NSw4IEBACiBpc2RubG9vcF9hZGRjYXJkKGNoYXIgKmlkMSkKIHsKIAlpc2RubG9vcF9jYXJkICpjYXJkOwotCi0JaWYgKCEoY2FyZCA9IGlzZG5sb29wX2luaXRjYXJkKGlkMSkpKSB7CisJY2FyZCA9IGlzZG5sb29wX2luaXRjYXJkKGlkMSk7CisJaWYgKCFjYXJkKSB7CiAJCXJldHVybiAtRUlPOwogCX0KIAlwcmludGsoS0VSTl9JTkZPCkBAIC0xNTAzLDcgKzE0OTksNyBAQAogaXNkbmxvb3BfaW5pdCh2b2lkKQogewogCWlmIChpc2RubG9vcF9pZCkKLQkJcmV0dXJuIChpc2RubG9vcF9hZGRjYXJkKGlzZG5sb29wX2lkKSk7CisJCXJldHVybiBpc2RubG9vcF9hZGRjYXJkKGlzZG5sb29wX2lkKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL3NjL2luaXQuYyBiL2RyaXZlcnMvaXNkbi9zYy9pbml0LmMKaW5kZXggZDZmMTliMS4uMzU5N2VmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3NjL2luaXQuYworKysgYi9kcml2ZXJzL2lzZG4vc2MvaW5pdC5jCkBAIC0zMCw3ICszMCw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGlvW10gPSB7MCwgMCwgMCwgMH07CiBzdGF0aWMgdW5zaWduZWQgY2hhciBpcnFbXSA9IHswLCAwLCAwLCAwfTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJhbVtdID0gezAsIDAsIDAsIDB9Owotc3RhdGljIGJvb2wgZG9fcmVzZXQgPSAwOworc3RhdGljIGJvb2wgZG9fcmVzZXQ7CiAKIG1vZHVsZV9wYXJhbV9hcnJheShpbywgaW50LCBOVUxMLCAwKTsKIG1vZHVsZV9wYXJhbV9hcnJheShpcnEsIGJ5dGUsIE5VTEwsIDApOwpAQCAtMTA0LDEzICsxMDQsMTIgQEAKIAkJCQkJIGlvW2JdICsgMHg0MDAgKiBFWFBfUEFHRTApOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCQl9Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJLyoKIAkJCSAqIFllcywgcHJvYmUgZm9yIEkvTyBCYXNlCiAJCQkgKi8KIAkJCWlmIChwcm9iZV9leGhhc3RlZCkgewotCQkJCXByX2RlYnVnKCJBbGwgcHJvYmUgYWRkcmVzc2VzIGV4aGFzdGVkLCBza2lwcGluZ1xuIik7CisJCQkJcHJfZGVidWcoIkFsbCBwcm9iZSBhZGRyZXNzZXMgZXhoYXVzdGVkLCBza2lwcGluZ1xuIik7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlwcl9kZWJ1ZygiUHJvYmluZyBmb3IgSS9PLi4uXG4iKTsKQEAgLTE2OSw4ICsxNjgsNyBAQAogCQkJCW1vZGVsID0gaWRlbnRpZnlfYm9hcmQocmFtW2JdLCBpb1tiXSk7CiAJCQkJcmVsZWFzZV9yZWdpb24ocmFtW2JdLCBTUkFNX1BBR0VTSVpFKTsKIAkJCX0KLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBZZXMsIHByb2JlIGZvciBmcmVlIFJBTSBhbmQgbG9vayBmb3IKIAkJCSAqIGEgc2lnbmF0dXJlIGFuZCBpZCB0aGUgYm9hcmQgbW9kZWwKQEAgLTE4Nyw3ICsxODUsNyBAQAogCQkJCQkJcmFtW2JdID0gaTsKIAkJCQkJCWJyZWFrOwogCQkJCQl9Ci0JCQkJCXByX2RlYnVnKCIgIFVuaWRlbnRpZmVkIG9yIGluYWNjZXNzaWJsZVxuIik7CisJCQkJCXByX2RlYnVnKCIgIFVuaWRlbnRpZmllZCBvciBpbmFjY2Vzc2libGVcbiIpOwogCQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQkJcHJfZGVidWcoIiAgcmVxdWVzdCBmYWlsZWRcbiIpOwpAQCAtMzM3LDggKzMzNSw3IEBACiAJCXNjX2FkYXB0ZXJbY2luc3RdLT5pbnRlcnJ1cHQgPSBpcnFbYl07CiAJCWlmIChyZXF1ZXN0X2lycShzY19hZGFwdGVyW2NpbnN0XS0+aW50ZXJydXB0LCBpbnRlcnJ1cHRfaGFuZGxlciwKIAkJCQkwLCBpbnRlcmZhY2UtPmlkLAotCQkJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpIGNpbnN0KSkKLQkJeworCQkJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpIGNpbnN0KSkgewogCQkJa2ZyZWUoc2NfYWRhcHRlcltjaW5zdF0tPmNoYW5uZWwpOwogCQkJaW5kaWNhdGVfc3RhdHVzKGNpbnN0LCBJU0ROX1NUQVRfVU5MT0FELCAwLCBOVUxMKTsJLyogRml4IG1lICovCiAJCQlrZnJlZShpbnRlcmZhY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWlsYm94L0tjb25maWcgYi9kcml2ZXJzL21haWxib3gvS2NvbmZpZwppbmRleCBjMDRmZWQ5Li44NDMyNWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21haWxib3gvS2NvbmZpZworKysgYi9kcml2ZXJzL21haWxib3gvS2NvbmZpZwpAQCAtNDUsNCArNDUsMTAgQEAKIAkgIHN0YXRlcykuIFNlbGVjdCB0aGlzIGRyaXZlciBpZiB5b3VyIHBsYXRmb3JtIGltcGxlbWVudHMgdGhlCiAJICBQQ0MgY2xpZW50cyBtZW50aW9uZWQgYWJvdmUuCiAKK2NvbmZpZyBBTFRFUkFfTUJPWAorCXRyaXN0YXRlICJBbHRlcmEgTWFpbGJveCIKKwloZWxwCisJICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQWx0ZXJhIE1haWxib3ggc29mdCBjb3JlLiBJdCBpcyB1c2VkCisJICB0byBzZW5kIG1lc3NhZ2UgYmV0d2VlbiBwcm9jZXNzb3JzLiBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUKKwkgIEFsdGVyYSBtYWlsYm94IHN1cHBvcnQuCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWlsYm94L01ha2VmaWxlIGIvZHJpdmVycy9tYWlsYm94L01ha2VmaWxlCmluZGV4IGRkNDEyYzIuLjJlNzkyMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFpbGJveC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21haWxib3gvTWFrZWZpbGUKQEAgLTcsMyArNyw1IEBACiBvYmotJChDT05GSUdfT01BUDJQTFVTX01CT1gpCSs9IG9tYXAtbWFpbGJveC5vCiAKIG9iai0kKENPTkZJR19QQ0MpCQkrPSBwY2MubworCitvYmotJChDT05GSUdfQUxURVJBX01CT1gpCSs9IG1haWxib3gtYWx0ZXJhLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFpbGJveC9tYWlsYm94LWFsdGVyYS5jIGIvZHJpdmVycy9tYWlsYm94L21haWxib3gtYWx0ZXJhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI2NjI2NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWFpbGJveC9tYWlsYm94LWFsdGVyYS5jCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogQ29weXJpZ2h0IEFsdGVyYSBDb3Jwb3JhdGlvbiAoQykgMjAxMy0yMDE0LiBBbGwgcmlnaHRzIHJlc2VydmVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWlsYm94X2NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FCSJhbHRlcmEtbWFpbGJveCIKKworI2RlZmluZSBNQUlMQk9YX0NNRF9SRUcJCQkweDAwCisjZGVmaW5lIE1BSUxCT1hfUFRSX1JFRwkJCTB4MDQKKyNkZWZpbmUgTUFJTEJPWF9TVFNfUkVHCQkJMHgwOAorI2RlZmluZSBNQUlMQk9YX0lOVE1BU0tfUkVHCQkweDBDCisKKyNkZWZpbmUgSU5UX1BFTkRJTkdfTVNLCQkJMHgxCisjZGVmaW5lIElOVF9TUEFDRV9NU0sJCQkweDIKKworI2RlZmluZSBTVFNfUEVORElOR19NU0sJCQkweDEKKyNkZWZpbmUgU1RTX0ZVTExfTVNLCQkJMHgyCisjZGVmaW5lIFNUU19GVUxMX09GVAkJCTB4MQorCisjZGVmaW5lIE1CT1hfUEVORElORyhzdGF0dXMpCSgoKHN0YXR1cykgJiBTVFNfUEVORElOR19NU0spKQorI2RlZmluZSBNQk9YX0ZVTEwoc3RhdHVzKQkoKChzdGF0dXMpICYgU1RTX0ZVTExfTVNLKSA+PiBTVFNfRlVMTF9PRlQpCisKK2VudW0gYWx0ZXJhX21ib3hfbXNnIHsKKwlNQk9YX0NNRCA9IDAsCisJTUJPWF9QVFIsCit9OworCisjZGVmaW5lIE1CT1hfUE9MTElOR19NUwkJNQkvKiBwb2xsaW5nIGludGVydmFsIDVtcyAqLworCitzdHJ1Y3QgYWx0ZXJhX21ib3ggeworCWJvb2wgaXNfc2VuZGVyOwkJLyogMS1zZW5kZXIsIDAtcmVjZWl2ZXIgKi8KKwlib29sIGludHJfbW9kZTsKKwlpbnQgaXJxOworCXZvaWQgX19pb21lbSAqbWJveF9iYXNlOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbWJveF9jb250cm9sbGVyIGNvbnRyb2xsZXI7CisKKwkvKiBJZiB0aGUgY29udHJvbGxlciBzdXBwb3J0cyBvbmx5IFJYIHBvbGxpbmcgbW9kZSAqLworCXN0cnVjdCB0aW1lcl9saXN0IHJ4cG9sbF90aW1lcjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgYWx0ZXJhX21ib3ggKm1ib3hfY2hhbl90b19hbHRlcmFfbWJveChzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQoreworCWlmICghY2hhbiB8fCAhY2hhbi0+Y29uX3ByaXYpCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIChzdHJ1Y3QgYWx0ZXJhX21ib3ggKiljaGFuLT5jb25fcHJpdjsKK30KKworc3RhdGljIGlubGluZSBpbnQgYWx0ZXJhX21ib3hfZnVsbChzdHJ1Y3QgYWx0ZXJhX21ib3ggKm1ib3gpCit7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IHJlYWRsX3JlbGF4ZWQobWJveC0+bWJveF9iYXNlICsgTUFJTEJPWF9TVFNfUkVHKTsKKwlyZXR1cm4gTUJPWF9GVUxMKHN0YXR1cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFsdGVyYV9tYm94X3BlbmRpbmcoc3RydWN0IGFsdGVyYV9tYm94ICptYm94KQoreworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSByZWFkbF9yZWxheGVkKG1ib3gtPm1ib3hfYmFzZSArIE1BSUxCT1hfU1RTX1JFRyk7CisJcmV0dXJuIE1CT1hfUEVORElORyhzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBhbHRlcmFfbWJveF9yeF9pbnRtYXNrKHN0cnVjdCBhbHRlcmFfbWJveCAqbWJveCwgYm9vbCBlbmFibGUpCit7CisJdTMyIG1hc2s7CisKKwltYXNrID0gcmVhZGxfcmVsYXhlZChtYm94LT5tYm94X2Jhc2UgKyBNQUlMQk9YX0lOVE1BU0tfUkVHKTsKKwlpZiAoZW5hYmxlKQorCQltYXNrIHw9IElOVF9QRU5ESU5HX01TSzsKKwllbHNlCisJCW1hc2sgJj0gfklOVF9QRU5ESU5HX01TSzsKKwl3cml0ZWxfcmVsYXhlZChtYXNrLCBtYm94LT5tYm94X2Jhc2UgKyBNQUlMQk9YX0lOVE1BU0tfUkVHKTsKK30KKworc3RhdGljIHZvaWQgYWx0ZXJhX21ib3hfdHhfaW50bWFzayhzdHJ1Y3QgYWx0ZXJhX21ib3ggKm1ib3gsIGJvb2wgZW5hYmxlKQoreworCXUzMiBtYXNrOworCisJbWFzayA9IHJlYWRsX3JlbGF4ZWQobWJveC0+bWJveF9iYXNlICsgTUFJTEJPWF9JTlRNQVNLX1JFRyk7CisJaWYgKGVuYWJsZSkKKwkJbWFzayB8PSBJTlRfU1BBQ0VfTVNLOworCWVsc2UKKwkJbWFzayAmPSB+SU5UX1NQQUNFX01TSzsKKwl3cml0ZWxfcmVsYXhlZChtYXNrLCBtYm94LT5tYm94X2Jhc2UgKyBNQUlMQk9YX0lOVE1BU0tfUkVHKTsKK30KKworc3RhdGljIGJvb2wgYWx0ZXJhX21ib3hfaXNfc2VuZGVyKHN0cnVjdCBhbHRlcmFfbWJveCAqbWJveCkKK3sKKwl1MzIgcmVnOworCS8qIFdyaXRlIGEgbWFnaWMgbnVtYmVyIHRvIFBUUiByZWdpc3RlciBhbmQgcmVhZCBiYWNrIHRoaXMgcmVnaXN0ZXIuCisJICogVGhpcyByZWdpc3RlciBpcyByZWFkLXdyaXRlIGlmIGl0IGlzIGEgc2VuZGVyLgorCSAqLworCSNkZWZpbmUgTUJPWF9NQUdJQwkweEE1QTVBQTU1CisJd3JpdGVsX3JlbGF4ZWQoTUJPWF9NQUdJQywgbWJveC0+bWJveF9iYXNlICsgTUFJTEJPWF9QVFJfUkVHKTsKKwlyZWcgPSByZWFkbF9yZWxheGVkKG1ib3gtPm1ib3hfYmFzZSArIE1BSUxCT1hfUFRSX1JFRyk7CisJaWYgKHJlZyA9PSBNQk9YX01BR0lDKSB7CisJCS8qIENsZWFyIHRvIDAgKi8KKwkJd3JpdGVsX3JlbGF4ZWQoMCwgbWJveC0+bWJveF9iYXNlICsgTUFJTEJPWF9QVFJfUkVHKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgYWx0ZXJhX21ib3hfcnhfZGF0YShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQoreworCXN0cnVjdCBhbHRlcmFfbWJveCAqbWJveCA9IG1ib3hfY2hhbl90b19hbHRlcmFfbWJveChjaGFuKTsKKwl1MzIgZGF0YVsyXTsKKworCWlmIChhbHRlcmFfbWJveF9wZW5kaW5nKG1ib3gpKSB7CisJCWRhdGFbTUJPWF9QVFJdID0KKwkJCXJlYWRsX3JlbGF4ZWQobWJveC0+bWJveF9iYXNlICsgTUFJTEJPWF9QVFJfUkVHKTsKKwkJZGF0YVtNQk9YX0NNRF0gPQorCQkJcmVhZGxfcmVsYXhlZChtYm94LT5tYm94X2Jhc2UgKyBNQUlMQk9YX0NNRF9SRUcpOworCQltYm94X2NoYW5fcmVjZWl2ZWRfZGF0YShjaGFuLCAodm9pZCAqKWRhdGEpOworCX0KK30KKworc3RhdGljIHZvaWQgYWx0ZXJhX21ib3hfcG9sbF9yeCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG1ib3hfY2hhbiAqY2hhbiA9IChzdHJ1Y3QgbWJveF9jaGFuICopZGF0YTsKKwlzdHJ1Y3QgYWx0ZXJhX21ib3ggKm1ib3ggPSBtYm94X2NoYW5fdG9fYWx0ZXJhX21ib3goY2hhbik7CisKKwlhbHRlcmFfbWJveF9yeF9kYXRhKGNoYW4pOworCisJbW9kX3RpbWVyKCZtYm94LT5yeHBvbGxfdGltZXIsCisJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTUJPWF9QT0xMSU5HX01TKSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhbHRlcmFfbWJveF90eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgbWJveF9jaGFuICpjaGFuID0gKHN0cnVjdCBtYm94X2NoYW4gKilwOworCXN0cnVjdCBhbHRlcmFfbWJveCAqbWJveCA9IG1ib3hfY2hhbl90b19hbHRlcmFfbWJveChjaGFuKTsKKworCWFsdGVyYV9tYm94X3R4X2ludG1hc2sobWJveCwgZmFsc2UpOworCW1ib3hfY2hhbl90eGRvbmUoY2hhbiwgMCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBhbHRlcmFfbWJveF9yeF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgbWJveF9jaGFuICpjaGFuID0gKHN0cnVjdCBtYm94X2NoYW4gKilwOworCisJYWx0ZXJhX21ib3hfcnhfZGF0YShjaGFuKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgYWx0ZXJhX21ib3hfc3RhcnR1cF9zZW5kZXIoc3RydWN0IG1ib3hfY2hhbiAqY2hhbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBhbHRlcmFfbWJveCAqbWJveCA9IG1ib3hfY2hhbl90b19hbHRlcmFfbWJveChjaGFuKTsKKworCWlmIChtYm94LT5pbnRyX21vZGUpIHsKKwkJcmV0ID0gcmVxdWVzdF9pcnEobWJveC0+aXJxLCBhbHRlcmFfbWJveF90eF9pbnRlcnJ1cHQsIDAsCisJCQkJICBEUklWRVJfTkFNRSwgY2hhbik7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlkZXZfZXJyKG1ib3gtPmRldiwKKwkJCQkiZmFpbGVkIHRvIHJlZ2lzdGVyIG1haWxib3ggaW50ZXJydXB0OiVkXG4iLAorCQkJCXJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWx0ZXJhX21ib3hfc3RhcnR1cF9yZWNlaXZlcihzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQoreworCWludCByZXQ7CisJc3RydWN0IGFsdGVyYV9tYm94ICptYm94ID0gbWJveF9jaGFuX3RvX2FsdGVyYV9tYm94KGNoYW4pOworCisJaWYgKG1ib3gtPmludHJfbW9kZSkgeworCQlyZXQgPSByZXF1ZXN0X2lycShtYm94LT5pcnEsIGFsdGVyYV9tYm94X3J4X2ludGVycnVwdCwgMCwKKwkJCQkgIERSSVZFUl9OQU1FLCBjaGFuKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCW1ib3gtPmludHJfbW9kZSA9IGZhbHNlOworCQkJZ290byBwb2xsaW5nOyAvKiB1c2UgcG9sbGluZyBpZiBmYWlsZWQgKi8KKwkJfQorCisJCWFsdGVyYV9tYm94X3J4X2ludG1hc2sobWJveCwgdHJ1ZSk7CisJCXJldHVybiAwOworCX0KKworcG9sbGluZzoKKwkvKiBTZXR1cCBwb2xsaW5nIHRpbWVyICovCisJc2V0dXBfdGltZXIoJm1ib3gtPnJ4cG9sbF90aW1lciwgYWx0ZXJhX21ib3hfcG9sbF9yeCwKKwkJICAgICh1bnNpZ25lZCBsb25nKWNoYW4pOworCW1vZF90aW1lcigmbWJveC0+cnhwb2xsX3RpbWVyLAorCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKE1CT1hfUE9MTElOR19NUykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWx0ZXJhX21ib3hfc2VuZF9kYXRhKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGFsdGVyYV9tYm94ICptYm94ID0gbWJveF9jaGFuX3RvX2FsdGVyYV9tYm94KGNoYW4pOworCXUzMiAqdWRhdGEgPSAodTMyICopZGF0YTsKKworCWlmICghbWJveCB8fCAhZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFtYm94LT5pc19zZW5kZXIpIHsKKwkJZGV2X3dhcm4obWJveC0+ZGV2LAorCQkJICJmYWlsZWQgdG8gc2VuZC4gVGhpcyBpcyByZWNlaXZlciBtYWlsYm94LlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChhbHRlcmFfbWJveF9mdWxsKG1ib3gpKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogRW5hYmxlIGludGVycnVwdCBiZWZvcmUgc2VuZCAqLworCWlmIChtYm94LT5pbnRyX21vZGUpCisJCWFsdGVyYV9tYm94X3R4X2ludG1hc2sobWJveCwgdHJ1ZSk7CisKKwkvKiBQb2ludGVyIHJlZ2lzdGVyIG11c3Qgd3JpdGUgYmVmb3JlIGNvbW1hbmQgcmVnaXN0ZXIgKi8KKwl3cml0ZWxfcmVsYXhlZCh1ZGF0YVtNQk9YX1BUUl0sIG1ib3gtPm1ib3hfYmFzZSArIE1BSUxCT1hfUFRSX1JFRyk7CisJd3JpdGVsX3JlbGF4ZWQodWRhdGFbTUJPWF9DTURdLCBtYm94LT5tYm94X2Jhc2UgKyBNQUlMQk9YX0NNRF9SRUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIGFsdGVyYV9tYm94X2xhc3RfdHhfZG9uZShzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQoreworCXN0cnVjdCBhbHRlcmFfbWJveCAqbWJveCA9IG1ib3hfY2hhbl90b19hbHRlcmFfbWJveChjaGFuKTsKKworCS8qIFJldHVybiBmYWxzZSBpZiBtYWlsYm94IGlzIGZ1bGwgKi8KKwlyZXR1cm4gYWx0ZXJhX21ib3hfZnVsbChtYm94KSA/IGZhbHNlIDogdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgYWx0ZXJhX21ib3hfcGVla19kYXRhKHN0cnVjdCBtYm94X2NoYW4gKmNoYW4pCit7CisJc3RydWN0IGFsdGVyYV9tYm94ICptYm94ID0gbWJveF9jaGFuX3RvX2FsdGVyYV9tYm94KGNoYW4pOworCisJcmV0dXJuIGFsdGVyYV9tYm94X3BlbmRpbmcobWJveCkgPyB0cnVlIDogZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgYWx0ZXJhX21ib3hfc3RhcnR1cChzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQoreworCXN0cnVjdCBhbHRlcmFfbWJveCAqbWJveCA9IG1ib3hfY2hhbl90b19hbHRlcmFfbWJveChjaGFuKTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghbWJveCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobWJveC0+aXNfc2VuZGVyKQorCQlyZXQgPSBhbHRlcmFfbWJveF9zdGFydHVwX3NlbmRlcihjaGFuKTsKKwllbHNlCisJCXJldCA9IGFsdGVyYV9tYm94X3N0YXJ0dXBfcmVjZWl2ZXIoY2hhbik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhbHRlcmFfbWJveF9zaHV0ZG93bihzdHJ1Y3QgbWJveF9jaGFuICpjaGFuKQoreworCXN0cnVjdCBhbHRlcmFfbWJveCAqbWJveCA9IG1ib3hfY2hhbl90b19hbHRlcmFfbWJveChjaGFuKTsKKworCWlmIChtYm94LT5pbnRyX21vZGUpIHsKKwkJLyogVW5tYXNrIGFsbCBpbnRlcnJ1cHQgbWFza3MgKi8KKwkJd3JpdGVsX3JlbGF4ZWQofjAsIG1ib3gtPm1ib3hfYmFzZSArIE1BSUxCT1hfSU5UTUFTS19SRUcpOworCQlmcmVlX2lycShtYm94LT5pcnEsIGNoYW4pOworCX0gZWxzZSBpZiAoIW1ib3gtPmlzX3NlbmRlcikgeworCQlkZWxfdGltZXJfc3luYygmbWJveC0+cnhwb2xsX3RpbWVyKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWJveF9jaGFuX29wcyBhbHRlcmFfbWJveF9vcHMgPSB7CisJLnNlbmRfZGF0YSA9IGFsdGVyYV9tYm94X3NlbmRfZGF0YSwKKwkuc3RhcnR1cCA9IGFsdGVyYV9tYm94X3N0YXJ0dXAsCisJLnNodXRkb3duID0gYWx0ZXJhX21ib3hfc2h1dGRvd24sCisJLmxhc3RfdHhfZG9uZSA9IGFsdGVyYV9tYm94X2xhc3RfdHhfZG9uZSwKKwkucGVla19kYXRhID0gYWx0ZXJhX21ib3hfcGVla19kYXRhLAorfTsKKworc3RhdGljIGludCBhbHRlcmFfbWJveF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhbHRlcmFfbWJveCAqbWJveDsKKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlZ3M7CisJc3RydWN0IG1ib3hfY2hhbiAqY2hhbnM7CisJaW50IHJldDsKKworCW1ib3ggPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCptYm94KSwKKwkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIW1ib3gpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogQWxsb2NhdGVkIG9uZSBjaGFubmVsICovCisJY2hhbnMgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpjaGFucyksIEdGUF9LRVJORUwpOworCWlmICghY2hhbnMpCisJCXJldHVybiAtRU5PTUVNOworCisJcmVncyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisKKwltYm94LT5tYm94X2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVncyk7CisJaWYgKElTX0VSUihtYm94LT5tYm94X2Jhc2UpKQorCQlyZXR1cm4gUFRSX0VSUihtYm94LT5tYm94X2Jhc2UpOworCisJLyogQ2hlY2sgaXMgaXQgYSBzZW5kZXIgb3IgcmVjZWl2ZXI/ICovCisJbWJveC0+aXNfc2VuZGVyID0gYWx0ZXJhX21ib3hfaXNfc2VuZGVyKG1ib3gpOworCisJbWJveC0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAobWJveC0+aXJxID49IDApCisJCW1ib3gtPmludHJfbW9kZSA9IHRydWU7CisKKwltYm94LT5kZXYgPSAmcGRldi0+ZGV2OworCisJLyogSGFyZHdhcmUgc3VwcG9ydHMgb25seSBvbmUgY2hhbm5lbC4gKi8KKwljaGFuc1swXS5jb25fcHJpdiA9IG1ib3g7CisJbWJveC0+Y29udHJvbGxlci5kZXYgPSBtYm94LT5kZXY7CisJbWJveC0+Y29udHJvbGxlci5udW1fY2hhbnMgPSAxOworCW1ib3gtPmNvbnRyb2xsZXIuY2hhbnMgPSBjaGFuczsKKwltYm94LT5jb250cm9sbGVyLm9wcyA9ICZhbHRlcmFfbWJveF9vcHM7CisKKwlpZiAobWJveC0+aXNfc2VuZGVyKSB7CisJCWlmIChtYm94LT5pbnRyX21vZGUpIHsKKwkJCW1ib3gtPmNvbnRyb2xsZXIudHhkb25lX2lycSA9IHRydWU7CisJCX0gZWxzZSB7CisJCQltYm94LT5jb250cm9sbGVyLnR4ZG9uZV9wb2xsID0gdHJ1ZTsKKwkJCW1ib3gtPmNvbnRyb2xsZXIudHhwb2xsX3BlcmlvZCA9IE1CT1hfUE9MTElOR19NUzsKKwkJfQorCX0KKworCXJldCA9IG1ib3hfY29udHJvbGxlcl9yZWdpc3RlcigmbWJveC0+Y29udHJvbGxlcik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJSZWdpc3RlciBtYWlsYm94IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG1ib3gpOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWx0ZXJhX21ib3hfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGFsdGVyYV9tYm94ICptYm94ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoIW1ib3gpCisJCXJldHVybiAtRUlOVkFMOworCisJbWJveF9jb250cm9sbGVyX3VucmVnaXN0ZXIoJm1ib3gtPmNvbnRyb2xsZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGFsdGVyYV9tYm94X21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhbHRyLG1haWxib3gtMS4wIiB9LAorCXsgLyogU2VudGluZWwgKi8gfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgYWx0ZXJhX21ib3hfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhbHRlcmFfbWJveF9kcml2ZXIgPSB7CisJLnByb2JlCT0gYWx0ZXJhX21ib3hfcHJvYmUsCisJLnJlbW92ZQk9IGFsdGVyYV9tYm94X3JlbW92ZSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9IERSSVZFUl9OQU1FLAorCQkub2ZfbWF0Y2hfdGFibGUJPSBhbHRlcmFfbWJveF9tYXRjaCwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhbHRlcmFfbWJveF9kcml2ZXIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFsdGVyYSBtYWlsYm94IHNwZWNpZmljIGZ1bmN0aW9ucyIpOworTU9EVUxFX0FVVEhPUigiTGV5IEZvb24gVGFuIDxsZnRhbkBhbHRlcmEuY29tPiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTphbHRlcmEtbWFpbGJveCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWlsYm94L21haWxib3guYyBiL2RyaXZlcnMvbWFpbGJveC9tYWlsYm94LmMKaW5kZXggNTlhYWQ0ZDUuLjE5YjQ5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFpbGJveC9tYWlsYm94LmMKKysrIGIvZHJpdmVycy9tYWlsYm94L21haWxib3guYwpAQCAtODcsNyArODcsNyBAQAogZXhpdDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIWVyciAmJiBjaGFuLT50eGRvbmVfbWV0aG9kID09IFRYRE9ORV9CWV9QT0xMKQorCWlmICghZXJyICYmIChjaGFuLT50eGRvbmVfbWV0aG9kICYgVFhET05FX0JZX1BPTEwpKQogCQlwb2xsX3R4ZG9uZSgodW5zaWduZWQgbG9uZyljaGFuLT5tYm94KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWlsYm94L3BjYy5jIGIvZHJpdmVycy9tYWlsYm94L3BjYy5jCmluZGV4IDZkYmY2ZmMuLjk3N2M4MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFpbGJveC9wY2MuYworKysgYi9kcml2ZXJzL21haWxib3gvcGNjLmMKQEAgLTM4NiwxNiArMzg2LDE2IEBACiAJcmV0ID0gYWNwaV9wY2NfcHJvYmUoKTsKIAogCWlmIChyZXQpIHsKLQkJcHJfZXJyKCJBQ1BJIFBDQyBwcm9iZSBmYWlsZWQuXG4iKTsKKwkJcHJfZGVidWcoIkFDUEkgUENDIHByb2JlIGZhaWxlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlwY2NfcGRldiA9IHBsYXRmb3JtX2NyZWF0ZV9idW5kbGUoJnBjY19tYm94X2RyaXZlciwKIAkJCXBjY19tYm94X3Byb2JlLCBOVUxMLCAwLCBOVUxMLCAwKTsKIAotCWlmICghcGNjX3BkZXYpIHsKLQkJcHJfZXJyKCJFcnIgY3JlYXRpbmcgUENDIHBsYXRmb3JtIGJ1bmRsZVxuIik7Ci0JCXJldHVybiAtRU5PREVWOworCWlmIChJU19FUlIocGNjX3BkZXYpKSB7CisJCXByX2RlYnVnKCJFcnIgY3JlYXRpbmcgUENDIHBsYXRmb3JtIGJ1bmRsZVxuIik7CisJCXJldHVybiBQVFJfRVJSKHBjY19wZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvS2NvbmZpZyBiL2RyaXZlcnMvbWQvS2NvbmZpZwppbmRleCA1YmRlZGY2Li5jMzU1YTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL0tjb25maWcKKysrIGIvZHJpdmVycy9tZC9LY29uZmlnCkBAIC01LDYgKzUsNyBAQAogbWVudWNvbmZpZyBNRAogCWJvb2wgIk11bHRpcGxlIGRldmljZXMgZHJpdmVyIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkiCiAJZGVwZW5kcyBvbiBCTE9DSworCXNlbGVjdCBTUkNVCiAJaGVscAogCSAgU3VwcG9ydCBtdWx0aXBsZSBwaHlzaWNhbCBzcGluZGxlcyB0aHJvdWdoIGEgc2luZ2xlIGxvZ2ljYWwgZGV2aWNlLgogCSAgUmVxdWlyZWQgZm9yIFJBSUQgYW5kIGxvZ2ljYWwgdm9sdW1lIG1hbmFnZW1lbnQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2JpdG1hcC5jIGIvZHJpdmVycy9tZC9iaXRtYXAuYwppbmRleCBkYTM2MDRlLi4xNjk1ZWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2JpdG1hcC5jCisrKyBiL2RyaXZlcnMvbWQvYml0bWFwLmMKQEAgLTcyLDYgKzcyLDE5IEBACiAJLyogdGhpcyBwYWdlIGhhcyBub3QgYmVlbiBhbGxvY2F0ZWQgeWV0ICovCiAKIAlzcGluX3VubG9ja19pcnEoJmJpdG1hcC0+bG9jayk7CisJLyogSXQgaXMgcG9zc2libGUgdGhhdCB0aGlzIGlzIGJlaW5nIGNhbGxlZCBpbnNpZGUgYQorCSAqIHByZXBhcmVfdG9fd2FpdC9maW5pc2hfd2FpdCBsb29wIGZyb20gcmFpZDVjOm1ha2VfcmVxdWVzdCgpLgorCSAqIEluIGdlbmVyYWwgaXQgaXMgbm90IHBlcm1pdHRlZCB0byBzbGVlcCBpbiB0aGF0IGNvbnRleHQgYXMgaXQKKwkgKiBjYW4gY2F1c2UgdGhlIGxvb3AgdG8gc3BpbiBmcmVlbHkuCisJICogVGhhdCBkb2Vzbid0IGFwcGx5IGhlcmUgYXMgd2UgY2FuIG9ubHkgcmVhY2ggdGhpcyBwb2ludAorCSAqIG9uY2Ugd2l0aCBhbnkgbG9vcC4KKwkgKiBXaGVuIHRoaXMgZnVuY3Rpb24gY29tcGxldGVzLCBlaXRoZXIgYnBbcGFnZV0ubWFwIG9yCisJICogYnBbcGFnZV0uaGlqYWNrZWQuICBJbiBlaXRoZXIgY2FzZSwgdGhpcyBmdW5jdGlvbiB3aWxsCisJICogYWJvcnQgYmVmb3JlIGdldHRpbmcgdG8gdGhpcyBwb2ludCBhZ2Fpbi4gIFNvIHRoZXJlIGlzCisJICogbm8gcmlzayBvZiBhIGZyZWUtc3BpbiwgYW5kIHNvIGl0IGlzIHNhZmUgdG8gYXNzZXJ0CisJICogdGhhdCBzbGVlcGluZyBoZXJlIGlzIGFsbG93ZWQuCisJICovCisJc2NoZWRfYW5ub3RhdGVfc2xlZXAoKTsKIAltYXBwYWdlID0ga3phbGxvYyhQQUdFX1NJWkUsIEdGUF9OT0lPKTsKIAlzcGluX2xvY2tfaXJxKCZiaXRtYXAtPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNhY2hlLW1ldGFkYXRhLmMgYi9kcml2ZXJzL21kL2RtLWNhY2hlLW1ldGFkYXRhLmMKaW5kZXggMjFiMTU2Mi4uYzFjMDEwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jYWNoZS1tZXRhZGF0YS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY2FjaGUtbWV0YWRhdGEuYwpAQCAtNjgzLDcgKzY4Myw3IEBACiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwogCWlmICghY21kKSB7CiAJCURNRVJSKCJjb3VsZCBub3QgYWxsb2NhdGUgbWV0YWRhdGEgc3RydWN0Iik7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAKIAlhdG9taWNfc2V0KCZjbWQtPnJlZl9jb3VudCwgMSk7CkBAIC03NDUsNyArNzQ1LDcgQEAKIAkJcmV0dXJuIGNtZDsKIAogCWNtZCA9IG1ldGFkYXRhX29wZW4oYmRldiwgZGF0YV9ibG9ja19zaXplLCBtYXlfZm9ybWF0X2RldmljZSwgcG9saWN5X2hpbnRfc2l6ZSk7Ci0JaWYgKGNtZCkgeworCWlmICghSVNfRVJSKGNtZCkpIHsKIAkJbXV0ZXhfbG9jaygmdGFibGVfbG9jayk7CiAJCWNtZDIgPSBsb29rdXAoYmRldik7CiAJCWlmIChjbWQyKSB7CkBAIC03ODAsOSArNzgwLDEwIEBACiB7CiAJc3RydWN0IGRtX2NhY2hlX21ldGFkYXRhICpjbWQgPSBsb29rdXBfb3Jfb3BlbihiZGV2LCBkYXRhX2Jsb2NrX3NpemUsCiAJCQkJCQkgICAgICAgbWF5X2Zvcm1hdF9kZXZpY2UsIHBvbGljeV9oaW50X3NpemUpOwotCWlmIChjbWQgJiYgIXNhbWVfcGFyYW1zKGNtZCwgZGF0YV9ibG9ja19zaXplKSkgeworCisJaWYgKCFJU19FUlIoY21kKSAmJiAhc2FtZV9wYXJhbXMoY21kLCBkYXRhX2Jsb2NrX3NpemUpKSB7CiAJCWRtX2NhY2hlX21ldGFkYXRhX2Nsb3NlKGNtZCk7Ci0JCXJldHVybiBOVUxMOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKIAlyZXR1cm4gY21kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10aGluLmMgYi9kcml2ZXJzL21kL2RtLXRoaW4uYwppbmRleCA0OTM0Nzg5Li4wNzcwNWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRoaW4uYworKysgYi9kcml2ZXJzL21kL2RtLXRoaW4uYwpAQCAtMzM4NSw2ICszMzg1LDEyIEBACiAJc3RydWN0IHBvb2xfYyAqcHQgPSB0aS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgcG9vbCAqcG9vbCA9IHB0LT5wb29sOwogCisJaWYgKGdldF9wb29sX21vZGUocG9vbCkgPj0gUE1fUkVBRF9PTkxZKSB7CisJCURNRVJSKCIlczogdW5hYmxlIHRvIHNlcnZpY2UgcG9vbCB0YXJnZXQgbWVzc2FnZXMgaW4gUkVBRF9PTkxZIG9yIEZBSUwgbW9kZSIsCisJCSAgICAgIGRtX2RldmljZV9uYW1lKHBvb2wtPnBvb2xfbWQpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJaWYgKCFzdHJjYXNlY21wKGFyZ3ZbMF0sICJjcmVhdGVfdGhpbiIpKQogCQlyID0gcHJvY2Vzc19jcmVhdGVfdGhpbl9tZXNnKGFyZ2MsIGFyZ3YsIHBvb2wpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmMgYi9kcml2ZXJzL21kL3JhaWQ1LmMKaW5kZXggYzFiMGQ1Mi4uYjk4NzY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuYwpAQCAtMzE5NSw2ICszMTk1LDExIEBACiAJCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylzaC0+c2VjdG9yLAogCQkJCQkgIHJjdywgcXJlYWQsIHRlc3RfYml0KFNUUklQRV9ERUxBWUVELCAmc2gtPnN0YXRlKSk7CiAJfQorCisJaWYgKHJjdyA+IGRpc2tzICYmIHJtdyA+IGRpc2tzICYmCisJICAgICF0ZXN0X2JpdChTVFJJUEVfUFJFUkVBRF9BQ1RJVkUsICZzaC0+c3RhdGUpKQorCQlzZXRfYml0KFNUUklQRV9ERUxBWUVELCAmc2gtPnN0YXRlKTsKKwogCS8qIG5vdyBpZiBub3RoaW5nIGlzIGxvY2tlZCwgYW5kIGlmIHdlIGhhdmUgZW5vdWdoIGRhdGEsCiAJICogd2UgY2FuIHN0YXJ0IGEgd3JpdGUgcmVxdWVzdAogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL0tjb25maWcKaW5kZXggYjg1Zjg4Yy4uMjExNTRkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9LY29uZmlnCkBAIC04LDEwICs4LDYgQEAKIGNvbmZpZyBWSURFT19DWDIzNDFYCiAJdHJpc3RhdGUKIAotY29uZmlnIFZJREVPX0JUQ1gKLQlkZXBlbmRzIG9uIFBDSQotCXRyaXN0YXRlCi0KIGNvbmZpZyBWSURFT19UVkVFUFJPTQogCXRyaXN0YXRlCiAJZGVwZW5kcyBvbiBJMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9jb21tb24vTWFrZWZpbGUKaW5kZXggZDIwOGRlMy4uODliNzk1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vTWFrZWZpbGUKQEAgLTEsNSArMSw0IEBACiBvYmoteSArPSBiMmMyLyBzYWE3MTQ2LyBzaWFuby8KIG9iai0kKENPTkZJR19WSURFT19DWDIzNDFYKSArPSBjeDIzNDF4Lm8KLW9iai0kKENPTkZJR19WSURFT19CVENYKSAgKz0gYnRjeC1yaXNjLm8KIG9iai0kKENPTkZJR19WSURFT19UVkVFUFJPTSkgKz0gdHZlZXByb20ubwogb2JqLSQoQ09ORklHX0NZUFJFU1NfRklSTVdBUkUpICs9IGN5cHJlc3NfZmlybXdhcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vYnRjeC1yaXNjLmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9idGN4LXJpc2MuaAppbmRleCBmOGJjNmU4Li4wMzU4M2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9idGN4LXJpc2MuaAorKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9idGN4LXJpc2MuaApAQCAtMjYsOSArMjYsMyBAQAogdm9pZCBidGN4X2NhbGNfc2tpcHMoaW50IGxpbmUsIGludCB3aWR0aCwgaW50ICptYXh5LAogCQkgICAgIHN0cnVjdCBidGN4X3NraXBsaXN0ICpza2lwcywgdW5zaWduZWQgaW50ICpuc2tpcHMsCiAJCSAgICAgY29uc3Qgc3RydWN0IHY0bDJfY2xpcCAqY2xpcHMsIHVuc2lnbmVkIGludCBuY2xpcHMpOwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItY29yZS9kdmJfbmV0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2R2Yl9uZXQuYwppbmRleCBlNDA0MWYwLi42ODZkMzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2R2Yl9uZXQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1jb3JlL2R2Yl9uZXQuYwpAQCAtNjgsMTMgKzY4LDYgQEAKICNpbmNsdWRlICJkdmJfZGVtdXguaCIKICNpbmNsdWRlICJkdmJfbmV0LmgiCiAKLXN0YXRpYyBpbnQgZHZiX25ldF9kZWJ1ZzsKLW1vZHVsZV9wYXJhbShkdmJfbmV0X2RlYnVnLCBpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkdmJfbmV0X2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIik7Ci0KLSNkZWZpbmUgZHByaW50ayh4Li4uKSBkbyB7IGlmIChkdmJfbmV0X2RlYnVnKSBwcmludGsoeCk7IH0gd2hpbGUgKDApCi0KLQogc3RhdGljIGlubGluZSBfX3UzMiBpb3ZfY3JjMzIoIF9fdTMyIGMsIHN0cnVjdCBrdmVjICppb3YsIHVuc2lnbmVkIGludCBjbnQgKQogewogCXVuc2lnbmVkIGludCBqOwpAQCAtOTAsMzYgKzgzLDkgQEAKIAogI2lmZGVmIFVMRV9ERUJVRwogCi0jZGVmaW5lIE1BQ19BRERSX1BSSU5URk1UICIlLjJ4OiUuMng6JS4yeDolLjJ4OiUuMng6JS4yeCIKLSNkZWZpbmUgTUFYX0FERFJfUFJJTlRGTVRfQVJHUyhtYWNhcCkgKG1hY2FwKVswXSwobWFjYXApWzFdLChtYWNhcClbMl0sKG1hY2FwKVszXSwobWFjYXApWzRdLChtYWNhcClbNV0KLQotI2RlZmluZSBpc3ByaW50KGMpCSgoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8IChjID49ICdBJyAmJiBjIDw9ICdaJykgfHwgKGMgPj0gJzAnICYmIGMgPD0gJzknKSkKLQotc3RhdGljIHZvaWQgaGV4ZHVtcCggY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBzaG9ydCBsZW4gKQorc3RhdGljIHZvaWQgaGV4ZHVtcChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIHNob3J0IGxlbikKIHsKLQljaGFyIHN0cls4MF0sIG9jdGV0WzEwXTsKLQlpbnQgb2ZzLCBpLCBsOwotCi0JZm9yIChvZnMgPSAwOyBvZnMgPCBsZW47IG9mcyArPSAxNikgewotCQlzcHJpbnRmKCBzdHIsICIlMDNkOiAiLCBvZnMgKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQkJaWYgKChpICsgb2ZzKSA8IGxlbikKLQkJCQlzcHJpbnRmKCBvY3RldCwgIiUwMnggIiwgYnVmW29mcyArIGldICk7Ci0JCQllbHNlCi0JCQkJc3RyY3B5KCBvY3RldCwgIiAgICIgKTsKLQotCQkJc3RyY2F0KCBzdHIsIG9jdGV0ICk7Ci0JCX0KLQkJc3RyY2F0KCBzdHIsICIgICIgKTsKLQkJbCA9IHN0cmxlbiggc3RyICk7Ci0KLQkJZm9yIChpID0gMDsgKGkgPCAxNikgJiYgKChpICsgb2ZzKSA8IGxlbik7IGkrKykKLQkJCXN0cltsKytdID0gaXNwcmludCggYnVmW29mcyArIGldICkgPyBidWZbb2ZzICsgaV0gOiAnLic7Ci0KLQkJc3RyW2xdID0gJ1wwJzsKLQkJcHJpbnRrKCBLRVJOX1dBUk5JTkcgIiVzXG4iLCBzdHIgKTsKLQl9CisJcHJpbnRfaGV4X2R1bXBfZGVidWcoIiIsIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsIGJ1ZiwgbGVuLCB0cnVlKTsKIH0KIAogI2VuZGlmCkBAIC0zMTUsOSArMjgxLDkgQEAKIAkJCXJldHVybiBsOwkvKiBTdG9wIGV4dGVuc2lvbiBoZWFkZXIgcHJvY2Vzc2luZyBhbmQgZGlzY2FyZCBTTkRVLiAqLwogCQl0b3RhbF9leHRfbGVuICs9IGw7CiAjaWZkZWYgVUxFX0RFQlVHCi0JCWRwcmludGsoImhhbmRsZV91bGVfZXh0ZW5zaW9uczogdWxlX25leHRfaGRyPSVwLCB1bGVfc25kdV90eXBlPSVpLCAiCi0JCQkibD0laSwgdG90YWxfZXh0X2xlbj0laVxuIiwgcC0+dWxlX25leHRfaGRyLAotCQkJKGludCkgcC0+dWxlX3NuZHVfdHlwZSwgbCwgdG90YWxfZXh0X2xlbik7CisJCXByX2RlYnVnKCJ1bGVfbmV4dF9oZHI9JXAsIHVsZV9zbmR1X3R5cGU9JWksIGw9JWksIHRvdGFsX2V4dF9sZW49JWlcbiIsCisJCQkgcC0+dWxlX25leHRfaGRyLCAoaW50KXAtPnVsZV9zbmR1X3R5cGUsCisJCQkgbCwgdG90YWxfZXh0X2xlbik7CiAjZW5kaWYKIAogCX0gd2hpbGUgKHAtPnVsZV9zbmR1X3R5cGUgPCBFVEhfUF84MDJfM19NSU4pOwpAQCAtNzAwLDggKzY2Niw4IEBACiAKIAkJCQkJaWYgKGRyb3ApIHsKICNpZmRlZiBVTEVfREVCVUcKLQkJCQkJCWRwcmludGsoIkRyb3BwaW5nIFNORFU6IE1BQyBkZXN0aW5hdGlvbiBhZGRyZXNzIGRvZXMgbm90IG1hdGNoOiBkZXN0IGFkZHI6ICJNQUNfQUREUl9QUklOVEZNVCIsIGRldiBhZGRyOiAiTUFDX0FERFJfUFJJTlRGTVQiXG4iLAotCQkJCQkJCU1BWF9BRERSX1BSSU5URk1UX0FSR1MocHJpdi0+dWxlX3NrYi0+ZGF0YSksIE1BWF9BRERSX1BSSU5URk1UX0FSR1MoZGV2LT5kZXZfYWRkcikpOworCQkJCQkJbmV0ZGV2X2RiZyhkZXYsICJEcm9wcGluZyBTTkRVOiBNQUMgZGVzdGluYXRpb24gYWRkcmVzcyBkb2VzIG5vdCBtYXRjaDogZGVzdCBhZGRyOiAlcE0sIGRldiBhZGRyOiAlcE1cbiIsCisJCQkJCQkJICAgcHJpdi0+dWxlX3NrYi0+ZGF0YSwgZGV2LT5kZXZfYWRkcik7CiAjZW5kaWYKIAkJCQkJCWRldl9rZnJlZV9za2IocHJpdi0+dWxlX3NrYik7CiAJCQkJCQlnb3RvIHNuZHVfZG9uZTsKQEAgLTk2NCw4ICs5MzAsNyBAQAogCSgqc2VjZmlsdGVyKS0+ZmlsdGVyX21hc2tbMTBdID0gbWFjX21hc2tbMV07CiAJKCpzZWNmaWx0ZXIpLT5maWx0ZXJfbWFza1sxMV09bWFjX21hc2tbMF07CiAKLQlkcHJpbnRrKCIlczogZmlsdGVyIG1hYz0lcE1cbiIsIGRldi0+bmFtZSwgbWFjKTsKLQlkcHJpbnRrKCIlczogZmlsdGVyIG1hc2s9JXBNXG4iLCBkZXYtPm5hbWUsIG1hY19tYXNrKTsKKwluZXRkZXZfZGJnKGRldiwgImZpbHRlciBtYWM9JXBNIG1hc2s9JXBNXG4iLCBtYWMsIG1hY19tYXNrKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTc3LDcgKzk0Miw3IEBACiAJc3RydWN0IGRteF9kZW11eCAqZGVtdXggPSBwcml2LT5kZW11eDsKIAl1bnNpZ25lZCBjaGFyICptYWMgPSAodW5zaWduZWQgY2hhciAqKSBkZXYtPmRldl9hZGRyOwogCi0JZHByaW50aygiJXM6IHJ4X21vZGUgJWlcbiIsIF9fZnVuY19fLCBwcml2LT5yeF9tb2RlKTsKKwluZXRkZXZfZGJnKGRldiwgInJ4X21vZGUgJWlcbiIsIHByaXYtPnJ4X21vZGUpOwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAocHJpdi0+dHNmZWVkIHx8IHByaXYtPnNlY2ZlZWQgfHwgcHJpdi0+c2VjZmlsdGVyIHx8IHByaXYtPm11bHRpX3NlY2ZpbHRlclswXSkKIAkJcHJpbnRrKCIlczogQlVHICVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwpAQCAtOTg3LDcgKzk1Miw3IEBACiAJcHJpdi0+dHNmZWVkID0gTlVMTDsKIAogCWlmIChwcml2LT5mZWVkdHlwZSA9PSBEVkJfTkVUX0ZFRURUWVBFX01QRSkgewotCQlkcHJpbnRrKCIlczogYWxsb2Mgc2VjZmVlZFxuIiwgX19mdW5jX18pOworCQluZXRkZXZfZGJnKGRldiwgImFsbG9jIHNlY2ZlZWRcbiIpOwogCQlyZXQ9ZGVtdXgtPmFsbG9jYXRlX3NlY3Rpb25fZmVlZChkZW11eCwgJnByaXYtPnNlY2ZlZWQsCiAJCQkJCSBkdmJfbmV0X3NlY19jYWxsYmFjayk7CiAJCWlmIChyZXQ8MCkgewpAQCAtMTAwNSwzOCArOTcwLDM4IEBACiAJCX0KIAogCQlpZiAocHJpdi0+cnhfbW9kZSAhPSBSWF9NT0RFX1BST01JU0MpIHsKLQkJCWRwcmludGsoIiVzOiBzZXQgc2VjZmlsdGVyXG4iLCBfX2Z1bmNfXyk7CisJCQluZXRkZXZfZGJnKGRldiwgInNldCBzZWNmaWx0ZXJcbiIpOwogCQkJZHZiX25ldF9maWx0ZXJfc2VjX3NldChkZXYsICZwcml2LT5zZWNmaWx0ZXIsIG1hYywgbWFza19ub3JtYWwpOwogCQl9CiAKIAkJc3dpdGNoIChwcml2LT5yeF9tb2RlKSB7CiAJCWNhc2UgUlhfTU9ERV9NVUxUSToKIAkJCWZvciAoaSA9IDA7IGkgPCBwcml2LT5tdWx0aV9udW07IGkrKykgewotCQkJCWRwcmludGsoIiVzOiBzZXQgbXVsdGlfc2VjZmlsdGVyWyVkXVxuIiwgX19mdW5jX18sIGkpOworCQkJCW5ldGRldl9kYmcoZGV2LCAic2V0IG11bHRpX3NlY2ZpbHRlclslZF1cbiIsIGkpOwogCQkJCWR2Yl9uZXRfZmlsdGVyX3NlY19zZXQoZGV2LCAmcHJpdi0+bXVsdGlfc2VjZmlsdGVyW2ldLAogCQkJCQkJICAgICAgIHByaXYtPm11bHRpX21hY3NbaV0sIG1hc2tfbm9ybWFsKTsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFJYX01PREVfQUxMX01VTFRJOgogCQkJcHJpdi0+bXVsdGlfbnVtPTE7Ci0JCQlkcHJpbnRrKCIlczogc2V0IG11bHRpX3NlY2ZpbHRlclswXVxuIiwgX19mdW5jX18pOworCQkJbmV0ZGV2X2RiZyhkZXYsICJzZXQgbXVsdGlfc2VjZmlsdGVyWzBdXG4iKTsKIAkJCWR2Yl9uZXRfZmlsdGVyX3NlY19zZXQoZGV2LCAmcHJpdi0+bXVsdGlfc2VjZmlsdGVyWzBdLAogCQkJCQkgICAgICAgbWFjX2FsbG11bHRpLCBtYXNrX2FsbG11bHRpKTsKIAkJCWJyZWFrOwogCQljYXNlIFJYX01PREVfUFJPTUlTQzoKIAkJCXByaXYtPm11bHRpX251bT0wOwotCQkJZHByaW50aygiJXM6IHNldCBzZWNmaWx0ZXJcbiIsIF9fZnVuY19fKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAic2V0IHNlY2ZpbHRlclxuIik7CiAJCQlkdmJfbmV0X2ZpbHRlcl9zZWNfc2V0KGRldiwgJnByaXYtPnNlY2ZpbHRlciwgbWFjLCBtYXNrX3Byb21pc2MpOwogCQkJYnJlYWs7CiAJCX0KIAotCQlkcHJpbnRrKCIlczogc3RhcnQgZmlsdGVyaW5nXG4iLCBfX2Z1bmNfXyk7CisJCW5ldGRldl9kYmcoZGV2LCAic3RhcnQgZmlsdGVyaW5nXG4iKTsKIAkJcHJpdi0+c2VjZmVlZC0+c3RhcnRfZmlsdGVyaW5nKHByaXYtPnNlY2ZlZWQpOwogCX0gZWxzZSBpZiAocHJpdi0+ZmVlZHR5cGUgPT0gRFZCX05FVF9GRUVEVFlQRV9VTEUpIHsKIAkJc3RydWN0IHRpbWVzcGVjIHRpbWVvdXQgPSB7IDAsIDEwMDAwMDAwIH07IC8vIDEwIG1zZWMKIAogCQkvKiB3ZSBoYXZlIHBheWxvYWRzIGVuY2Fwc3VsYXRlZCBpbiBUUyAqLwotCQlkcHJpbnRrKCIlczogYWxsb2MgdHNmZWVkXG4iLCBfX2Z1bmNfXyk7CisJCW5ldGRldl9kYmcoZGV2LCAiYWxsb2MgdHNmZWVkXG4iKTsKIAkJcmV0ID0gZGVtdXgtPmFsbG9jYXRlX3RzX2ZlZWQoZGVtdXgsICZwcml2LT50c2ZlZWQsIGR2Yl9uZXRfdHNfY2FsbGJhY2spOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKCIlczogY291bGQgbm90IGFsbG9jYXRlIHRzIGZlZWRcbiIsIGRldi0+bmFtZSk7CkBAIC0xMDYwLDcgKzEwMjUsNyBAQAogCQkJZ290byBlcnJvcjsKIAkJfQogCi0JCWRwcmludGsoIiVzOiBzdGFydCBmaWx0ZXJpbmdcbiIsIF9fZnVuY19fKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJzdGFydCBmaWx0ZXJpbmdcbiIpOwogCQlwcml2LT50c2ZlZWQtPnN0YXJ0X2ZpbHRlcmluZyhwcml2LT50c2ZlZWQpOwogCX0gZWxzZQogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMTA3NSwxNyArMTA0MCwxNiBAQAogCXN0cnVjdCBkdmJfbmV0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpLCByZXQgPSAwOwogCi0JZHByaW50aygiJXNcbiIsIF9fZnVuY19fKTsKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAJaWYgKHByaXYtPmZlZWR0eXBlID09IERWQl9ORVRfRkVFRFRZUEVfTVBFKSB7CiAJCWlmIChwcml2LT5zZWNmZWVkKSB7CiAJCQlpZiAocHJpdi0+c2VjZmVlZC0+aXNfZmlsdGVyaW5nKSB7Ci0JCQkJZHByaW50aygiJXM6IHN0b3Agc2VjZmVlZFxuIiwgX19mdW5jX18pOworCQkJCW5ldGRldl9kYmcoZGV2LCAic3RvcCBzZWNmZWVkXG4iKTsKIAkJCQlwcml2LT5zZWNmZWVkLT5zdG9wX2ZpbHRlcmluZyhwcml2LT5zZWNmZWVkKTsKIAkJCX0KIAogCQkJaWYgKHByaXYtPnNlY2ZpbHRlcikgewotCQkJCWRwcmludGsoIiVzOiByZWxlYXNlIHNlY2ZpbHRlclxuIiwgX19mdW5jX18pOworCQkJCW5ldGRldl9kYmcoZGV2LCAicmVsZWFzZSBzZWNmaWx0ZXJcbiIpOwogCQkJCXByaXYtPnNlY2ZlZWQtPnJlbGVhc2VfZmlsdGVyKHByaXYtPnNlY2ZlZWQsCiAJCQkJCQkJICAgICAgcHJpdi0+c2VjZmlsdGVyKTsKIAkJCQlwcml2LT5zZWNmaWx0ZXI9TlVMTDsKQEAgLTEwOTMsOCArMTA1Nyw4IEBACiAKIAkJCWZvciAoaT0wOyBpPHByaXYtPm11bHRpX251bTsgaSsrKSB7CiAJCQkJaWYgKHByaXYtPm11bHRpX3NlY2ZpbHRlcltpXSkgewotCQkJCQlkcHJpbnRrKCIlczogcmVsZWFzZSBtdWx0aV9maWx0ZXJbJWRdXG4iLAotCQkJCQkJX19mdW5jX18sIGkpOworCQkJCQluZXRkZXZfZGJnKGRldiwgInJlbGVhc2UgbXVsdGlfZmlsdGVyWyVkXVxuIiwKKwkJCQkJCSAgIGkpOwogCQkJCQlwcml2LT5zZWNmZWVkLT5yZWxlYXNlX2ZpbHRlcihwcml2LT5zZWNmZWVkLAogCQkJCQkJCQkgICAgICBwcml2LT5tdWx0aV9zZWNmaWx0ZXJbaV0pOwogCQkJCQlwcml2LT5tdWx0aV9zZWNmaWx0ZXJbaV0gPSBOVUxMOwpAQCAtMTEwOCw3ICsxMDcyLDcgQEAKIAl9IGVsc2UgaWYgKHByaXYtPmZlZWR0eXBlID09IERWQl9ORVRfRkVFRFRZUEVfVUxFKSB7CiAJCWlmIChwcml2LT50c2ZlZWQpIHsKIAkJCWlmIChwcml2LT50c2ZlZWQtPmlzX2ZpbHRlcmluZykgewotCQkJCWRwcmludGsoIiVzOiBzdG9wIHRzZmVlZFxuIiwgX19mdW5jX18pOworCQkJCW5ldGRldl9kYmcoZGV2LCAic3RvcCB0c2ZlZWRcbiIpOwogCQkJCXByaXYtPnRzZmVlZC0+c3RvcF9maWx0ZXJpbmcocHJpdi0+dHNmZWVkKTsKIAkJCX0KIAkJCXByaXYtPmRlbXV4LT5yZWxlYXNlX3RzX2ZlZWQocHJpdi0+ZGVtdXgsIHByaXYtPnRzZmVlZCk7CkBAIC0xMTQ4LDE2ICsxMTEyLDE2IEBACiAJbmV0aWZfYWRkcl9sb2NrX2JoKGRldik7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7Ci0JCWRwcmludGsoIiVzOiBwcm9taXNjdW91cyBtb2RlXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZGJnKGRldiwgInByb21pc2N1b3VzIG1vZGVcbiIpOwogCQlwcml2LT5yeF9tb2RlID0gUlhfTU9ERV9QUk9NSVNDOwogCX0gZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7Ci0JCWRwcmludGsoIiVzOiBhbGxtdWx0aSBtb2RlXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZGJnKGRldiwgImFsbG11bHRpIG1vZGVcbiIpOwogCQlwcml2LT5yeF9tb2RlID0gUlhfTU9ERV9BTExfTVVMVEk7CiAJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKIAotCQlkcHJpbnRrKCIlczogc2V0X21jX2xpc3QsICVkIGVudHJpZXNcbiIsCi0JCQlkZXYtPm5hbWUsIG5ldGRldl9tY19jb3VudChkZXYpKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJzZXRfbWNfbGlzdCwgJWQgZW50cmllc1xuIiwKKwkJCSAgIG5ldGRldl9tY19jb3VudChkZXYpKTsKIAogCQlwcml2LT5yeF9tb2RlID0gUlhfTU9ERV9NVUxUSTsKIAkJcHJpdi0+bXVsdGlfbnVtID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL0tjb25maWcKaW5kZXggNmM3NTQxOC4uYmI3NjcyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL0tjb25maWcKQEAgLTQ0Myw3ICs0NDMsOCBAQAogCiBjb25maWcgRFZCX1JUTDI4MzAKIAl0cmlzdGF0ZSAiUmVhbHRlayBSVEwyODMwIERWQi1UIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMgJiYgSTJDX01VWAorCXNlbGVjdCBSRUdNQVAKIAlkZWZhdWx0IG0gaWYgIU1FRElBX1NVQkRSVl9BVVRPU0VMRUNUCiAJaGVscAogCSAgU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCkBAIC00NTEsNiArNDUyLDcgQEAKIGNvbmZpZyBEVkJfUlRMMjgzMgogCXRyaXN0YXRlICJSZWFsdGVrIFJUTDI4MzIgRFZCLVQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMgJiYgSTJDX01VWAorCXNlbGVjdCBSRUdNQVAKIAlkZWZhdWx0IG0gaWYgIU1FRElBX1NVQkRSVl9BVVRPU0VMRUNUCiAJaGVscAogCSAgU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvYXU4NTIyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvYXU4NTIyLmgKaW5kZXggODNmZTlhNi4uNjEyMjUxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2F1ODUyMi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9hdTg1MjIuaApAQCAtOTEsOCArOTEsMyBAQAogfTsKIAogI2VuZGlmIC8qIF9fQVU4NTIyX0hfXyAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9kaWI4MDAwLmMKaW5kZXggNjFlMzFmMi4uOGM2NjYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2RpYjgwMDAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvZGliODAwMC5jCkBAIC0xMjYzLDcgKzEyNjMsOCBAQAogCXN0cnVjdCBkaWI4MDAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWVudW0gZnJvbnRlbmRfdHVuZV9zdGF0ZSAqdHVuZV9zdGF0ZSA9ICZzdGF0ZS0+dHVuZV9zdGF0ZTsKIAlpbnQgcmV0ID0gMDsKLQl1MTYgcmVnLCB1cGRfZGVtb2RfZ2Fpbl9wZXJpb2QgPSAweDgwMDA7CisJdTE2IHJlZzsKKwl1MzIgdXBkX2RlbW9kX2dhaW5fcGVyaW9kID0gMHg4MDAwOwogCiAJc3dpdGNoICgqdHVuZV9zdGF0ZSkgewogCWNhc2UgQ1RfQUdDX1NUQVJUOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2hkMjlsMi5jIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2hkMjlsMi5jCmluZGV4IGQ3YjlkNTQuLjY3YzhlNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9oZDI5bDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvaGQyOWwyLmMKQEAgLTIyLDIwICsyMiwyNCBAQAogCiAjaW5jbHVkZSAiaGQyOWwyX3ByaXYuaCIKIAorI2RlZmluZSBIRDI5TDJfTUFYX0xFTiAoMykKKwogLyogd3JpdGUgbXVsdGlwbGUgcmVnaXN0ZXJzICovCiBzdGF0aWMgaW50IGhkMjlsMl93cl9yZWdzKHN0cnVjdCBoZDI5bDJfcHJpdiAqcHJpdiwgdTggcmVnLCB1OCAqdmFsLCBpbnQgbGVuKQogewogCWludCByZXQ7Ci0JdTggYnVmWzIgKyBsZW5dOworCXU4IGJ1ZlsyICsgSEQyOUwyX01BWF9MRU5dOwogCXN0cnVjdCBpMmNfbXNnIG1zZ1sxXSA9IHsKIAkJewogCQkJLmFkZHIgPSBwcml2LT5jZmcuaTJjX2FkZHIsCiAJCQkuZmxhZ3MgPSAwLAotCQkJLmxlbiA9IHNpemVvZihidWYpLAorCQkJLmxlbiA9IDIgKyBsZW4sCiAJCQkuYnVmID0gYnVmLAogCQl9CiAJfTsKIAorCWlmIChsZW4gPiBIRDI5TDJfTUFYX0xFTikKKwkJcmV0dXJuIC1FSU5WQUw7CiAJYnVmWzBdID0gMHgwMDsKIAlidWZbMV0gPSByZWc7CiAJbWVtY3B5KCZidWZbMl0sIHZhbCwgbGVuKTsKQEAgLTExOCw3ICsxMjIsNyBAQAogfQogCiAvKiByZWFkIHNpbmdsZSByZWdpc3RlciB3aXRoIG1hc2sgKi8KLWludCBoZDI5bDJfcmRfcmVnX21hc2soc3RydWN0IGhkMjlsMl9wcml2ICpwcml2LCB1OCByZWcsIHU4ICp2YWwsIHU4IG1hc2spCitzdGF0aWMgaW50IGhkMjlsMl9yZF9yZWdfbWFzayhzdHJ1Y3QgaGQyOWwyX3ByaXYgKnByaXYsIHU4IHJlZywgdTggKnZhbCwgdTggbWFzaykKIHsKIAlpbnQgcmV0LCBpOwogCXU4IHRtcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9sZzIxNjAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9sZzIxNjAuYwppbmRleCA1ZmQxNGY4Li45OWVmZWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvbGcyMTYwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2xnMjE2MC5jCkBAIC0xNDU2LDkgKzE0NTYsMyBAQAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbGludXh0di5vcmc+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTigiMC4zIik7Ci0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvbGdkdDMzMDUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9sZ2R0MzMwNS5jCmluZGV4IDkyYzg5MWEuLmQwODU3MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9sZ2R0MzMwNS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9sZ2R0MzMwNS5jCkBAIC0yMzYsMTIgKzIzNiwxMyBAQAogCXJldHVybiBsZ2R0MzMwNV9zZXRfcmVnX2JpdChzdGF0ZSwgTEdEVDMzMDVfVFBfQ1RSTF8xLCA1LCBtb2RlKTsKIH0KIAotc3RhdGljIGludCBsZ2R0MzMwNV9tcGVnX21vZGVfcG9sYXJpdHkoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKLQkJCQkgICAgICAgZW51bSBsZ2R0MzMwNV90cF9jbG9ja19lZGdlIGVkZ2UsCi0JCQkJICAgICAgIGVudW0gbGdkdDMzMDVfdHBfdmFsaWRfcG9sYXJpdHkgdmFsaWQpCitzdGF0aWMgaW50IGxnZHQzMzA1X21wZWdfbW9kZV9wb2xhcml0eShzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlKQogewogCXU4IHZhbDsKIAlpbnQgcmV0OworCWVudW0gbGdkdDMzMDVfdHBfY2xvY2tfZWRnZSBlZGdlID0gc3RhdGUtPmNmZy0+dHBjbGtfZWRnZTsKKwllbnVtIGxnZHQzMzA1X3RwX2Nsb2NrX21vZGUgbW9kZSA9IHN0YXRlLT5jZmctPnRwY2xrX21vZGU7CisJZW51bSBsZ2R0MzMwNV90cF92YWxpZF9wb2xhcml0eSB2YWxpZCA9IHN0YXRlLT5jZmctPnRwdmFsaWRfcG9sYXJpdHk7CiAKIAlsZ19kYmcoImVkZ2UgPSAlZCwgdmFsaWQgPSAlZFxuIiwgZWRnZSwgdmFsaWQpOwogCkBAIC0yNTMsNiArMjU0LDggQEAKIAogCWlmIChlZGdlKQogCQl2YWwgfD0gMHgwODsKKwlpZiAobW9kZSkKKwkJdmFsIHw9IDB4NDA7CiAJaWYgKHZhbGlkKQogCQl2YWwgfD0gMHgwMTsKIApAQCAtNzQwLDkgKzc0Myw3IEBACiAJCWdvdG8gZmFpbDsKIAogCS8qIGxnZHQzMzA1X21wZWdfbW9kZV9wb2xhcml0eSBjYWxscyBsZ2R0MzMwNV9zb2Z0X3Jlc2V0ICovCi0JcmV0ID0gbGdkdDMzMDVfbXBlZ19tb2RlX3BvbGFyaXR5KHN0YXRlLAotCQkJCQkgIHN0YXRlLT5jZmctPnRwY2xrX2VkZ2UsCi0JCQkJCSAgc3RhdGUtPmNmZy0+dHB2YWxpZF9wb2xhcml0eSk7CisJcmV0ID0gbGdkdDMzMDVfbXBlZ19tb2RlX3BvbGFyaXR5KHN0YXRlKTsKIGZhaWw6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTgwNiw5ICs4MDcsNyBAQAogCQlnb3RvIGZhaWw7CiAKIAkvKiBsZ2R0MzMwNV9tcGVnX21vZGVfcG9sYXJpdHkgY2FsbHMgbGdkdDMzMDVfc29mdF9yZXNldCAqLwotCXJldCA9IGxnZHQzMzA1X21wZWdfbW9kZV9wb2xhcml0eShzdGF0ZSwKLQkJCQkJICBzdGF0ZS0+Y2ZnLT50cGNsa19lZGdlLAotCQkJCQkgIHN0YXRlLT5jZmctPnRwdmFsaWRfcG9sYXJpdHkpOworCXJldCA9IGxnZHQzMzA1X21wZWdfbW9kZV9wb2xhcml0eShzdGF0ZSk7CiBmYWlsOgogCXJldHVybiByZXQ7CiB9CkBAIC0xMjE1LDkgKzEyMTQsMyBAQAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbGludXh0di5vcmc+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTigiMC4yIik7Ci0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvbGdkdDMzMDUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9sZ2R0MzMwNS5oCmluZGV4IGQ5YWI1NTZjLi45YzAzZTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvbGdkdDMzMDUuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvbGdkdDMzMDUuaApAQCAtMzcsNiArMzcsMTEgQEAKIAlMR0RUMzMwNV9UUENMS19GQUxMSU5HX0VER0UgPSAxLAogfTsKIAorZW51bSBsZ2R0MzMwNV90cF9jbG9ja19tb2RlIHsKKwlMR0RUMzMwNV9UUENMS19HQVRFRCA9IDAsCisJTEdEVDMzMDVfVFBDTEtfRklYRUQgPSAxLAorfTsKKwogZW51bSBsZ2R0MzMwNV90cF92YWxpZF9wb2xhcml0eSB7CiAJTEdEVDMzMDVfVFBfVkFMSURfTE9XID0gMCwKIAlMR0RUMzMwNV9UUF9WQUxJRF9ISUdIID0gMSwKQEAgLTcwLDYgKzc1LDcgQEAKIAogCWVudW0gbGdkdDMzMDVfbXBlZ19tb2RlIG1wZWdfbW9kZTsKIAllbnVtIGxnZHQzMzA1X3RwX2Nsb2NrX2VkZ2UgdHBjbGtfZWRnZTsKKwllbnVtIGxnZHQzMzA1X3RwX2Nsb2NrX21vZGUgdHBjbGtfbW9kZTsKIAllbnVtIGxnZHQzMzA1X3RwX3ZhbGlkX3BvbGFyaXR5IHRwdmFsaWRfcG9sYXJpdHk7CiAJZW51bSBsZ2R0X2RlbW9kX2NoaXBfdHlwZSBkZW1vZF9jaGlwOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9sZ2R0MzMweC5jIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2xnZHQzMzB4LmMKaW5kZXggZTA0NjYyMi4uMmUxYTYxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2xnZHQzMzB4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2xnZHQzMzB4LmMKQEAgLTgyMyw5ICs4MjMsMyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBFWFBPUlRfU1lNQk9MKGxnZHQzMzB4X2F0dGFjaCk7Ci0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvbGdkdDMzMHguaCBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9sZ2R0MzMweC5oCmluZGV4IGNhMGVhYjUuLjhiYjMzMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9sZ2R0MzMweC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9sZ2R0MzMweC5oCkBAIC02NSw5ICs2NSwzIEBACiAjZW5kaWYgLy8gQ09ORklHX0RWQl9MR0RUMzMwWAogCiAjZW5kaWYgLyogTEdEVDMzMFhfSCAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2xnZHQzMzB4X3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9sZ2R0MzMweF9wcml2LmgKaW5kZXggMzhjNzY2OS4uMTkyMmYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL2xnZHQzMzB4X3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvbGdkdDMzMHhfcHJpdi5oCkBAIC02OSw5ICs2OSwzIEBACiB9OwogCiAjZW5kaWYgLyogX0xHRFQzMzBYX1BSSVZfICovCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvbWI4NmEyMHMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9tYjg2YTIwcy5jCmluZGV4IGU2ZjE2NWEuLjhmNTRjMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9tYjg2YTIwcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9tYjg2YTIwcy5jCkBAIC0yMiwxMCArMjIsNiBAQAogCiAjZGVmaW5lIE5VTV9MQVlFUlMgMwogCi1zdGF0aWMgaW50IGRlYnVnID0gMTsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJBY3RpdmF0ZXMgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0OjApIik7Ci0KIGVudW0gbWI4NmEyMHNfYmFuZHdpZHRoIHsKIAlNQjg2QTIwU18xM1NFRyA9IDAsCiAJTUI4NkEyMFNfMTNTRUdfUEFSVElBTCA9IDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvbW44ODQ3Mi5oIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL21uODg0NzIuaAppbmRleCBkYTQ1NThiLi5lNGUwYjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvbW44ODQ3Mi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9tbjg4NDcyLmgKQEAgLTMzLDYgKzMzLDEyIEBACiAJICogRFZCIGZyb250ZW5kLgogCSAqLwogCXN0cnVjdCBkdmJfZnJvbnRlbmQgKipmZTsKKworCS8qCisJICogWHRhbCBmcmVxdWVuY3kuCisJICogSHoKKwkgKi8KKwl1MzIgeHRhbDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL254dDIwMHguaCBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9ueHQyMDB4LmgKaW5kZXggYjUxOGQ1NC4uZTM4ZDAxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL254dDIwMHguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvbnh0MjAweC5oCkBAIC01NSw5ICs1NSwzIEBACiAjZW5kaWYgLy8gQ09ORklHX0RWQl9OWFQyMDBYCiAKICNlbmRpZiAvKiBOWFQyMDBYX0ggKi8KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9vcjUxMTMyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvb3I1MTEzMi5jCmluZGV4IDVlZjkyMTguLmNiYmQyNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9vcjUxMTMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL29yNTExMzIuYwpAQCAtNjIzLDkgKzYyMywzIEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIEVYUE9SVF9TWU1CT0wob3I1MTEzMl9hdHRhY2gpOwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL29yNTExMzIuaCBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9vcjUxMTMyLmgKaW5kZXggOTM4OTU4My4uY2RiNWJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL29yNTExMzIuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvb3I1MTEzMi5oCkBAIC00Nyw5ICs0NywzIEBACiAjZW5kaWYgLy8gQ09ORklHX0RWQl9PUjUxMTMyCiAKICNlbmRpZiAvLyBPUjUxMTMyX0gKLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9ydGwyODMwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvcnRsMjgzMC5jCmluZGV4IDUwZThiNjMuLmUxYjhkZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9ydGwyODMwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3J0bDI4MzAuYwpAQCAtMTMsMjYxICsxMywxNTQgQEAKICAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotICovCi0KLQotLyoKLSAqIERyaXZlciBpbXBsZW1lbnRzIG93biBJMkMtYWRhcHRlciBmb3IgdHVuZXIgSTJDIGFjY2Vzcy4gVGhhdCdzIHNpbmNlIGNoaXAKLSAqIGhhdmUgdW51c3VhbCBJMkMtZ2F0ZSBjb250cm9sIHdoaWNoIGNsb3NlcyBnYXRlIGF1dG9tYXRpY2FsbHkgYWZ0ZXIgZWFjaAotICogSTJDIHRyYW5zZmVyLiBVc2luZyBvd24gSTJDIGFkYXB0ZXIgd2UgY2FuIHdvcmthcm91bmQgdGhhdC4KICAqLwogCiAjaW5jbHVkZSAicnRsMjgzMF9wcml2LmgiCiAKLS8qIE1heCB0cmFuc2ZlciBzaXplIGRvbmUgYnkgSTJDIHRyYW5zZmVyIGZ1bmN0aW9ucyAqLwotI2RlZmluZSBNQVhfWEZFUl9TSVpFICA2NAotCi0vKiB3cml0ZSBtdWx0aXBsZSBoYXJkd2FyZSByZWdpc3RlcnMgKi8KLXN0YXRpYyBpbnQgcnRsMjgzMF93cihzdHJ1Y3QgcnRsMjgzMF9wcml2ICpwcml2LCB1OCByZWcsIGNvbnN0IHU4ICp2YWwsIGludCBsZW4pCisvKiBPdXIgcmVnbWFwIGlzIGJ5cGFzc2luZyBJMkMgYWRhcHRlciBsb2NrLCB0aHVzIHdlIGRvIGl0ISAqLworc3RhdGljIGludCBydGwyODMwX2J1bGtfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IHJlZywKKwkJCSAgICAgIGNvbnN0IHZvaWQgKnZhbCwgc2l6ZV90IHZhbF9jb3VudCkKIHsKKwlzdHJ1Y3QgcnRsMjgzMF9kZXYgKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCByZXQ7Ci0JdTggYnVmW01BWF9YRkVSX1NJWkVdOwotCXN0cnVjdCBpMmNfbXNnIG1zZ1sxXSA9IHsKLQkJewotCQkJLmFkZHIgPSBwcml2LT5jZmcuaTJjX2FkZHIsCi0JCQkuZmxhZ3MgPSAwLAotCQkJLmxlbiA9IDEgKyBsZW4sCi0JCQkuYnVmID0gYnVmLAotCQl9Ci0JfTsKIAotCWlmICgxICsgbGVuID4gc2l6ZW9mKGJ1ZikpIHsKLQkJZGV2X3dhcm4oJnByaXYtPmkyYy0+ZGV2LAotCQkJICIlczogaTJjIHdyIHJlZz0lMDR4OiBsZW49JWQgaXMgdG9vIGJpZyFcbiIsCi0JCQkgS0JVSUxEX01PRE5BTUUsIHJlZywgbGVuKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYnVmWzBdID0gcmVnOwotCW1lbWNweSgmYnVmWzFdLCB2YWwsIGxlbik7Ci0KLQlyZXQgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCBtc2csIDEpOwotCWlmIChyZXQgPT0gMSkgewotCQlyZXQgPSAwOwotCX0gZWxzZSB7Ci0JCWRldl93YXJuKCZwcml2LT5pMmMtPmRldiwgIiVzOiBpMmMgd3IgZmFpbGVkPSVkIHJlZz0lMDJ4ICIgXAotCQkJCSJsZW49JWRcbiIsIEtCVUlMRF9NT0ROQU1FLCByZXQsIHJlZywgbGVuKTsKLQkJcmV0ID0gLUVSRU1PVEVJTzsKLQl9CisJaTJjX2xvY2tfYWRhcHRlcihjbGllbnQtPmFkYXB0ZXIpOworCXJldCA9IHJlZ21hcF9idWxrX3dyaXRlKGRldi0+cmVnbWFwLCByZWcsIHZhbCwgdmFsX2NvdW50KTsKKwlpMmNfdW5sb2NrX2FkYXB0ZXIoY2xpZW50LT5hZGFwdGVyKTsKIAlyZXR1cm4gcmV0OwogfQogCi0vKiByZWFkIG11bHRpcGxlIGhhcmR3YXJlIHJlZ2lzdGVycyAqLwotc3RhdGljIGludCBydGwyODMwX3JkKHN0cnVjdCBydGwyODMwX3ByaXYgKnByaXYsIHU4IHJlZywgdTggKnZhbCwgaW50IGxlbikKK3N0YXRpYyBpbnQgcnRsMjgzMF91cGRhdGVfYml0cyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgdmFsKQogeworCXN0cnVjdCBydGwyODMwX2RldiAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHJldDsKLQlzdHJ1Y3QgaTJjX21zZyBtc2dbMl0gPSB7Ci0JCXsKLQkJCS5hZGRyID0gcHJpdi0+Y2ZnLmkyY19hZGRyLAotCQkJLmZsYWdzID0gMCwKLQkJCS5sZW4gPSAxLAotCQkJLmJ1ZiA9ICZyZWcsCi0JCX0sIHsKLQkJCS5hZGRyID0gcHJpdi0+Y2ZnLmkyY19hZGRyLAotCQkJLmZsYWdzID0gSTJDX01fUkQsCi0JCQkubGVuID0gbGVuLAotCQkJLmJ1ZiA9IHZhbCwKLQkJfQotCX07CiAKLQlyZXQgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCBtc2csIDIpOwotCWlmIChyZXQgPT0gMikgewotCQlyZXQgPSAwOwotCX0gZWxzZSB7Ci0JCWRldl93YXJuKCZwcml2LT5pMmMtPmRldiwgIiVzOiBpMmMgcmQgZmFpbGVkPSVkIHJlZz0lMDJ4ICIgXAotCQkJCSJsZW49JWRcbiIsIEtCVUlMRF9NT0ROQU1FLCByZXQsIHJlZywgbGVuKTsKLQkJcmV0ID0gLUVSRU1PVEVJTzsKLQl9CisJaTJjX2xvY2tfYWRhcHRlcihjbGllbnQtPmFkYXB0ZXIpOworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhkZXYtPnJlZ21hcCwgcmVnLCBtYXNrLCB2YWwpOworCWkyY191bmxvY2tfYWRhcHRlcihjbGllbnQtPmFkYXB0ZXIpOwogCXJldHVybiByZXQ7CiB9CiAKLS8qIHdyaXRlIG11bHRpcGxlIHJlZ2lzdGVycyAqLwotc3RhdGljIGludCBydGwyODMwX3dyX3JlZ3Moc3RydWN0IHJ0bDI4MzBfcHJpdiAqcHJpdiwgdTE2IHJlZywgY29uc3QgdTggKnZhbCwKLQkJaW50IGxlbikKK3N0YXRpYyBpbnQgcnRsMjgzMF9idWxrX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IHJlZywKKwkJCSAgICAgdm9pZCAqdmFsLCBzaXplX3QgdmFsX2NvdW50KQogeworCXN0cnVjdCBydGwyODMwX2RldiAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHJldDsKLQl1OCByZWcyID0gKHJlZyA+PiAwKSAmIDB4ZmY7Ci0JdTggcGFnZSA9IChyZWcgPj4gOCkgJiAweGZmOwogCi0JLyogc3dpdGNoIGJhbmsgaWYgbmVlZGVkICovCi0JaWYgKHBhZ2UgIT0gcHJpdi0+cGFnZSkgewotCQlyZXQgPSBydGwyODMwX3dyKHByaXYsIDB4MDAsICZwYWdlLCAxKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJcHJpdi0+cGFnZSA9IHBhZ2U7Ci0JfQotCi0JcmV0dXJuIHJ0bDI4MzBfd3IocHJpdiwgcmVnMiwgdmFsLCBsZW4pOwotfQotCi0vKiByZWFkIG11bHRpcGxlIHJlZ2lzdGVycyAqLwotc3RhdGljIGludCBydGwyODMwX3JkX3JlZ3Moc3RydWN0IHJ0bDI4MzBfcHJpdiAqcHJpdiwgdTE2IHJlZywgdTggKnZhbCwgaW50IGxlbikKLXsKLQlpbnQgcmV0OwotCXU4IHJlZzIgPSAocmVnID4+IDApICYgMHhmZjsKLQl1OCBwYWdlID0gKHJlZyA+PiA4KSAmIDB4ZmY7Ci0KLQkvKiBzd2l0Y2ggYmFuayBpZiBuZWVkZWQgKi8KLQlpZiAocGFnZSAhPSBwcml2LT5wYWdlKSB7Ci0JCXJldCA9IHJ0bDI4MzBfd3IocHJpdiwgMHgwMCwgJnBhZ2UsIDEpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQotCQlwcml2LT5wYWdlID0gcGFnZTsKLQl9Ci0KLQlyZXR1cm4gcnRsMjgzMF9yZChwcml2LCByZWcyLCB2YWwsIGxlbik7Ci19Ci0KLS8qIHJlYWQgc2luZ2xlIHJlZ2lzdGVyICovCi1zdGF0aWMgaW50IHJ0bDI4MzBfcmRfcmVnKHN0cnVjdCBydGwyODMwX3ByaXYgKnByaXYsIHUxNiByZWcsIHU4ICp2YWwpCi17Ci0JcmV0dXJuIHJ0bDI4MzBfcmRfcmVncyhwcml2LCByZWcsIHZhbCwgMSk7Ci19Ci0KLS8qIHdyaXRlIHNpbmdsZSByZWdpc3RlciB3aXRoIG1hc2sgKi8KLXN0YXRpYyBpbnQgcnRsMjgzMF93cl9yZWdfbWFzayhzdHJ1Y3QgcnRsMjgzMF9wcml2ICpwcml2LCB1MTYgcmVnLCB1OCB2YWwsIHU4IG1hc2spCi17Ci0JaW50IHJldDsKLQl1OCB0bXA7Ci0KLQkvKiBubyBuZWVkIGZvciByZWFkIGlmIHdob2xlIHJlZyBpcyB3cml0dGVuICovCi0JaWYgKG1hc2sgIT0gMHhmZikgewotCQlyZXQgPSBydGwyODMwX3JkX3JlZ3MocHJpdiwgcmVnLCAmdG1wLCAxKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJdmFsICY9IG1hc2s7Ci0JCXRtcCAmPSB+bWFzazsKLQkJdmFsIHw9IHRtcDsKLQl9Ci0KLQlyZXR1cm4gcnRsMjgzMF93cl9yZWdzKHByaXYsIHJlZywgJnZhbCwgMSk7Ci19Ci0KLS8qIHJlYWQgc2luZ2xlIHJlZ2lzdGVyIHdpdGggbWFzayAqLwotc3RhdGljIGludCBydGwyODMwX3JkX3JlZ19tYXNrKHN0cnVjdCBydGwyODMwX3ByaXYgKnByaXYsIHUxNiByZWcsIHU4ICp2YWwsIHU4IG1hc2spCi17Ci0JaW50IHJldCwgaTsKLQl1OCB0bXA7Ci0KLQlyZXQgPSBydGwyODMwX3JkX3JlZ3MocHJpdiwgcmVnLCAmdG1wLCAxKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JdG1wICY9IG1hc2s7Ci0KLQkvKiBmaW5kIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBiaXQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWlmICgobWFzayA+PiBpKSAmIDB4MDEpCi0JCQlicmVhazsKLQl9Ci0JKnZhbCA9IHRtcCA+PiBpOwotCi0JcmV0dXJuIDA7CisJaTJjX2xvY2tfYWRhcHRlcihjbGllbnQtPmFkYXB0ZXIpOworCXJldCA9IHJlZ21hcF9idWxrX3JlYWQoZGV2LT5yZWdtYXAsIHJlZywgdmFsLCB2YWxfY291bnQpOworCWkyY191bmxvY2tfYWRhcHRlcihjbGllbnQtPmFkYXB0ZXIpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcnRsMjgzMF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBydGwyODMwX3ByaXYgKnByaXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHJ0bDI4MzBfZGV2ICpkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZGV2LT5mZS5kdHZfcHJvcGVydHlfY2FjaGU7CiAJaW50IHJldCwgaTsKIAlzdHJ1Y3QgcnRsMjgzMF9yZWdfdmFsX21hc2sgdGFiW10gPSB7Ci0JCXsgMHgwMGQsIDB4MDEsIDB4MDMgfSwKLQkJeyAweDAwZCwgMHgxMCwgMHgxMCB9LAotCQl7IDB4MTA0LCAweDAwLCAweDFlIH0sCi0JCXsgMHgxMDUsIDB4ODAsIDB4ODAgfSwKLQkJeyAweDExMCwgMHgwMiwgMHgwMyB9LAotCQl7IDB4MTEwLCAweDA4LCAweDBjIH0sCi0JCXsgMHgxN2IsIDB4MDAsIDB4NDAgfSwKLQkJeyAweDE3ZCwgMHgwNSwgMHgwZiB9LAotCQl7IDB4MTdkLCAweDUwLCAweGYwIH0sCi0JCXsgMHgxOGMsIDB4MDgsIDB4MGYgfSwKLQkJeyAweDE4ZCwgMHgwMCwgMHhjMCB9LAotCQl7IDB4MTg4LCAweDA1LCAweDBmIH0sCi0JCXsgMHgxODksIDB4MDAsIDB4ZmMgfSwKLQkJeyAweDJkNSwgMHgwMiwgMHgwMiB9LAotCQl7IDB4MmYxLCAweDAyLCAweDA2IH0sCi0JCXsgMHgyZjEsIDB4MjAsIDB4ZjggfSwKLQkJeyAweDE2ZCwgMHgwMCwgMHgwMSB9LAotCQl7IDB4MWE2LCAweDAwLCAweDgwIH0sCi0JCXsgMHgxMDYsIHByaXYtPmNmZy52dG9wLCAweDNmIH0sCi0JCXsgMHgxMDcsIHByaXYtPmNmZy5rcmYsIDB4M2YgfSwKLQkJeyAweDExMiwgMHgyOCwgMHhmZiB9LAotCQl7IDB4MTAzLCBwcml2LT5jZmcuYWdjX3RhcmdfdmFsLCAweGZmIH0sCi0JCXsgMHgwMGEsIDB4MDIsIDB4MDcgfSwKLQkJeyAweDE0MCwgMHgwYywgMHgzYyB9LAotCQl7IDB4MTQwLCAweDQwLCAweGMwIH0sCi0JCXsgMHgxNWIsIDB4MDUsIDB4MDcgfSwKLQkJeyAweDE1YiwgMHgyOCwgMHgzOCB9LAotCQl7IDB4MTVjLCAweDA1LCAweDA3IH0sCi0JCXsgMHgxNWMsIDB4MjgsIDB4MzggfSwKLQkJeyAweDExNSwgcHJpdi0+Y2ZnLnNwZWNfaW52LCAweDAxIH0sCi0JCXsgMHgxNmYsIDB4MDEsIDB4MDcgfSwKLQkJeyAweDE3MCwgMHgxOCwgMHgzOCB9LAotCQl7IDB4MTcyLCAweDBmLCAweDBmIH0sCi0JCXsgMHgxNzMsIDB4MDgsIDB4MzggfSwKLQkJeyAweDE3NSwgMHgwMSwgMHgwNyB9LAotCQl7IDB4MTc2LCAweDAwLCAweGMwIH0sCisJCXsweDAwZCwgMHgwMSwgMHgwM30sCisJCXsweDAwZCwgMHgxMCwgMHgxMH0sCisJCXsweDEwNCwgMHgwMCwgMHgxZX0sCisJCXsweDEwNSwgMHg4MCwgMHg4MH0sCisJCXsweDExMCwgMHgwMiwgMHgwM30sCisJCXsweDExMCwgMHgwOCwgMHgwY30sCisJCXsweDE3YiwgMHgwMCwgMHg0MH0sCisJCXsweDE3ZCwgMHgwNSwgMHgwZn0sCisJCXsweDE3ZCwgMHg1MCwgMHhmMH0sCisJCXsweDE4YywgMHgwOCwgMHgwZn0sCisJCXsweDE4ZCwgMHgwMCwgMHhjMH0sCisJCXsweDE4OCwgMHgwNSwgMHgwZn0sCisJCXsweDE4OSwgMHgwMCwgMHhmY30sCisJCXsweDJkNSwgMHgwMiwgMHgwMn0sCisJCXsweDJmMSwgMHgwMiwgMHgwNn0sCisJCXsweDJmMSwgMHgyMCwgMHhmOH0sCisJCXsweDE2ZCwgMHgwMCwgMHgwMX0sCisJCXsweDFhNiwgMHgwMCwgMHg4MH0sCisJCXsweDEwNiwgZGV2LT5wZGF0YS0+dnRvcCwgMHgzZn0sCisJCXsweDEwNywgZGV2LT5wZGF0YS0+a3JmLCAweDNmfSwKKwkJezB4MTEyLCAweDI4LCAweGZmfSwKKwkJezB4MTAzLCBkZXYtPnBkYXRhLT5hZ2NfdGFyZ192YWwsIDB4ZmZ9LAorCQl7MHgwMGEsIDB4MDIsIDB4MDd9LAorCQl7MHgxNDAsIDB4MGMsIDB4M2N9LAorCQl7MHgxNDAsIDB4NDAsIDB4YzB9LAorCQl7MHgxNWIsIDB4MDUsIDB4MDd9LAorCQl7MHgxNWIsIDB4MjgsIDB4Mzh9LAorCQl7MHgxNWMsIDB4MDUsIDB4MDd9LAorCQl7MHgxNWMsIDB4MjgsIDB4Mzh9LAorCQl7MHgxMTUsIGRldi0+cGRhdGEtPnNwZWNfaW52LCAweDAxfSwKKwkJezB4MTZmLCAweDAxLCAweDA3fSwKKwkJezB4MTcwLCAweDE4LCAweDM4fSwKKwkJezB4MTcyLCAweDBmLCAweDBmfSwKKwkJezB4MTczLCAweDA4LCAweDM4fSwKKwkJezB4MTc1LCAweDAxLCAweDA3fSwKKwkJezB4MTc2LCAweDAwLCAweGMwfSwKIAl9OwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodGFiKTsgaSsrKSB7Ci0JCXJldCA9IHJ0bDI4MzBfd3JfcmVnX21hc2socHJpdiwgdGFiW2ldLnJlZywgdGFiW2ldLnZhbCwKLQkJCXRhYltpXS5tYXNrKTsKKwkJcmV0ID0gcnRsMjgzMF91cGRhdGVfYml0cyhjbGllbnQsIHRhYltpXS5yZWcsIHRhYltpXS5tYXNrLAorCQkJCQkgIHRhYltpXS52YWwpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnI7CiAJfQogCi0JcmV0ID0gcnRsMjgzMF93cl9yZWdzKHByaXYsIDB4MThmLCAiXHgyOFx4MDAiLCAyKTsKKwlyZXQgPSBydGwyODMwX2J1bGtfd3JpdGUoY2xpZW50LCAweDE4ZiwgIlx4MjhceDAwIiwgMik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBydGwyODMwX3dyX3JlZ3MocHJpdiwgMHgxOTUsCi0JCSJceDA0XHgwNlx4MGFceDEyXHgwYVx4MTJceDFlXHgyOCIsIDgpOworCXJldCA9IHJ0bDI4MzBfYnVsa193cml0ZShjbGllbnQsIDB4MTk1LAorCQkJCSAiXHgwNFx4MDZceDBhXHgxMlx4MGFceDEyXHgxZVx4MjgiLCA4KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCS8qIFRPRE86IHNwZWMgaW5pdCAqLwogCiAJLyogc29mdCByZXNldCAqLwotCXJldCA9IHJ0bDI4MzBfd3JfcmVnX21hc2socHJpdiwgMHgxMDEsIDB4MDQsIDB4MDQpOworCXJldCA9IHJ0bDI4MzBfdXBkYXRlX2JpdHMoY2xpZW50LCAweDEwMSwgMHgwNCwgMHgwNCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBydGwyODMwX3dyX3JlZ19tYXNrKHByaXYsIDB4MTAxLCAweDAwLCAweDA0KTsKKwlyZXQgPSBydGwyODMwX3VwZGF0ZV9iaXRzKGNsaWVudCwgMHgxMDEsIDB4MDQsIDB4MDApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JcHJpdi0+c2xlZXBpbmcgPSBmYWxzZTsKKwkvKiBpbml0IHN0YXRzIGhlcmUgaW4gb3JkZXIgc2lnbmFsIGFwcCB3aGljaCBzdGF0cyBhcmUgc3VwcG9ydGVkICovCisJYy0+c3RyZW5ndGgubGVuID0gMTsKKwljLT5zdHJlbmd0aC5zdGF0WzBdLnNjYWxlID0gRkVfU0NBTEVfTk9UX0FWQUlMQUJMRTsKKwljLT5jbnIubGVuID0gMTsKKwljLT5jbnIuc3RhdFswXS5zY2FsZSA9IEZFX1NDQUxFX05PVF9BVkFJTEFCTEU7CisJYy0+cG9zdF9iaXRfZXJyb3IubGVuID0gMTsKKwljLT5wb3N0X2JpdF9lcnJvci5zdGF0WzBdLnNjYWxlID0gRkVfU0NBTEVfTk9UX0FWQUlMQUJMRTsKKwljLT5wb3N0X2JpdF9jb3VudC5sZW4gPSAxOworCWMtPnBvc3RfYml0X2NvdW50LnN0YXRbMF0uc2NhbGUgPSBGRV9TQ0FMRV9OT1RfQVZBSUxBQkxFOworCS8qIHN0YXJ0IHN0YXRpc3RpY3MgcG9sbGluZyAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT5zdGF0X3dvcmssIG1zZWNzX3RvX2ppZmZpZXMoMjAwMCkpOworCisJZGV2LT5zbGVlcGluZyA9IGZhbHNlOwogCiAJcmV0dXJuIHJldDsKIGVycjoKLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcnRsMjgzMF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgcnRsMjgzMF9wcml2ICpwcml2ID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0JcHJpdi0+c2xlZXBpbmcgPSB0cnVlOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgcnRsMjgzMF9kZXYgKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJZGV2LT5zbGVlcGluZyA9IHRydWU7CisJLyogc3RvcCBzdGF0aXN0aWNzIHBvbGxpbmcgKi8KKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldi0+c3RhdF93b3JrKTsKKwlkZXYtPmZlX3N0YXR1cyA9IDA7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBydGwyODMwX2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAotCXN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqcykKKwkJCQkgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqcykKIHsKIAlzLT5taW5fZGVsYXlfbXMgPSA1MDA7CiAJcy0+c3RlcF9zaXplID0gZmUtPm9wcy5pbmZvLmZyZXF1ZW5jeV9zdGVwc2l6ZSAqIDI7CkBAIC0yNzgsMTEgKzE3MSwxMiBAQAogCiBzdGF0aWMgaW50IHJ0bDI4MzBfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBydGwyODMwX3ByaXYgKnByaXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHJ0bDI4MzBfZGV2ICpkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKIAlpbnQgcmV0LCBpOwogCXU2NCBudW07Ci0JdTggYnVmWzNdLCB0bXA7CisJdTggYnVmWzNdLCB1OHRtcDsKIAl1MzIgaWZfY3RsLCBpZl9mcmVxdWVuY3k7CiAJc3RhdGljIGNvbnN0IHU4IGJ3X3BhcmFtczFbM11bMzRdID0gewogCQl7CkBAIC0zMDgsOSArMjAyLDggQEAKIAkJezB4YWUsIDB4YmEsIDB4ZjMsIDB4MjYsIDB4NjYsIDB4NjR9LCAvKiA4IE1IeiAqLwogCX07CiAKLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwKLQkJCSIlczogZnJlcXVlbmN5PSVkIGJhbmR3aWR0aF9oej0lZCBpbnZlcnNpb249JWRcbiIsCi0JCQlfX2Z1bmNfXywgYy0+ZnJlcXVlbmN5LCBjLT5iYW5kd2lkdGhfaHosIGMtPmludmVyc2lvbik7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmcmVxdWVuY3k9JXUgYmFuZHdpZHRoX2h6PSV1IGludmVyc2lvbj0ldVxuIiwKKwkJYy0+ZnJlcXVlbmN5LCBjLT5iYW5kd2lkdGhfaHosIGMtPmludmVyc2lvbik7CiAKIAkvKiBwcm9ncmFtIHR1bmVyICovCiAJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpCkBAIC0zMjcsMTEgKzIyMCwxMiBAQAogCQlpID0gMjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2RiZygmcHJpdi0+aTJjLT5kZXYsICIlczogaW52YWxpZCBiYW5kd2lkdGhcbiIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJpbnZhbGlkIGJhbmR3aWR0aF9oeiAldVxuIiwKKwkJCWMtPmJhbmR3aWR0aF9oeik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldCA9IHJ0bDI4MzBfd3JfcmVnX21hc2socHJpdiwgMHgwMDgsIGkgPDwgMSwgMHgwNik7CisJcmV0ID0gcnRsMjgzMF91cGRhdGVfYml0cyhjbGllbnQsIDB4MDA4LCAweDA2LCBpIDw8IDEpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCkBAIC0zNDAsNzAgKzIzNCw3MSBAQAogCQlyZXQgPSBmZS0+b3BzLnR1bmVyX29wcy5nZXRfaWZfZnJlcXVlbmN5KGZlLCAmaWZfZnJlcXVlbmN5KTsKIAllbHNlCiAJCXJldCA9IC1FSU5WQUw7Ci0KLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnI7Ci0KLQludW0gPSBpZl9mcmVxdWVuY3kgJSBwcml2LT5jZmcueHRhbDsKLQludW0gKj0gMHg0MDAwMDA7Ci0JbnVtID0gZGl2X3U2NChudW0sIHByaXYtPmNmZy54dGFsKTsKLQludW0gPSAtbnVtOwotCWlmX2N0bCA9IG51bSAmIDB4M2ZmZmZmOwotCWRldl9kYmcoJnByaXYtPmkyYy0+ZGV2LCAiJXM6IGlmX2ZyZXF1ZW5jeT0lZCBpZl9jdGw9JTA4eFxuIiwKLQkJCV9fZnVuY19fLCBpZl9mcmVxdWVuY3ksIGlmX2N0bCk7Ci0KLQlyZXQgPSBydGwyODMwX3JkX3JlZ19tYXNrKHByaXYsIDB4MTE5LCAmdG1wLCAweGMwKTsgLyogYls3OjZdICovCiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlidWZbMF0gPSB0bXAgPDwgNjsKLQlidWZbMF0gfD0gKGlmX2N0bCA+PiAxNikgJiAweDNmOworCW51bSA9IGlmX2ZyZXF1ZW5jeSAlIGRldi0+cGRhdGEtPmNsazsKKwludW0gKj0gMHg0MDAwMDA7CisJbnVtID0gZGl2X3U2NChudW0sIGRldi0+cGRhdGEtPmNsayk7CisJbnVtID0gLW51bTsKKwlpZl9jdGwgPSBudW0gJiAweDNmZmZmZjsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImlmX2ZyZXF1ZW5jeT0lZCBpZl9jdGw9JTA4eFxuIiwKKwkJaWZfZnJlcXVlbmN5LCBpZl9jdGwpOworCisJYnVmWzBdID0gKGlmX2N0bCA+PiAxNikgJiAweDNmOwogCWJ1ZlsxXSA9IChpZl9jdGwgPj4gIDgpICYgMHhmZjsKIAlidWZbMl0gPSAoaWZfY3RsID4+ICAwKSAmIDB4ZmY7CiAKLQlyZXQgPSBydGwyODMwX3dyX3JlZ3MocHJpdiwgMHgxMTksIGJ1ZiwgMyk7CisJcmV0ID0gcnRsMjgzMF9idWxrX3JlYWQoY2xpZW50LCAweDExOSwgJnU4dG1wLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCWJ1ZlswXSB8PSB1OHRtcCAmIDB4YzA7ICAvKiBbNzo2XSAqLworCisJcmV0ID0gcnRsMjgzMF9idWxrX3dyaXRlKGNsaWVudCwgMHgxMTksIGJ1ZiwgMyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAkvKiAxLzIgc3BsaXQgSTJDIHdyaXRlICovCi0JcmV0ID0gcnRsMjgzMF93cl9yZWdzKHByaXYsIDB4MTFjLCAmYndfcGFyYW1zMVtpXVswXSwgMTcpOworCXJldCA9IHJ0bDI4MzBfYnVsa193cml0ZShjbGllbnQsIDB4MTFjLCAmYndfcGFyYW1zMVtpXVswXSwgMTcpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCiAJLyogMi8yIHNwbGl0IEkyQyB3cml0ZSAqLwotCXJldCA9IHJ0bDI4MzBfd3JfcmVncyhwcml2LCAweDEyZCwgJmJ3X3BhcmFtczFbaV1bMTddLCAxNyk7CisJcmV0ID0gcnRsMjgzMF9idWxrX3dyaXRlKGNsaWVudCwgMHgxMmQsICZid19wYXJhbXMxW2ldWzE3XSwgMTcpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JcmV0ID0gcnRsMjgzMF93cl9yZWdzKHByaXYsIDB4MTlkLCBid19wYXJhbXMyW2ldLCA2KTsKKwlyZXQgPSBydGwyODMwX2J1bGtfd3JpdGUoY2xpZW50LCAweDE5ZCwgYndfcGFyYW1zMltpXSwgNik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAlyZXR1cm4gcmV0OwogZXJyOgotCWRldl9kYmcoJnByaXYtPmkyYy0+ZGV2LCAiJXM6IGZhaWxlZD0lZFxuIiwgX19mdW5jX18sIHJldCk7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBydGwyODMwX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgcnRsMjgzMF9wcml2ICpwcml2ID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBydGwyODMwX2RldiAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CiAJaW50IHJldDsKIAl1OCBidWZbM107CiAKLQlpZiAocHJpdi0+c2xlZXBpbmcpCisJaWYgKGRldi0+c2xlZXBpbmcpCiAJCXJldHVybiAwOwogCi0JcmV0ID0gcnRsMjgzMF9yZF9yZWdzKHByaXYsIDB4MzNjLCBidWYsIDIpOworCXJldCA9IHJ0bDI4MzBfYnVsa19yZWFkKGNsaWVudCwgMHgzM2MsIGJ1ZiwgMik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBydGwyODMwX3JkX3JlZyhwcml2LCAweDM1MSwgJmJ1ZlsyXSk7CisJcmV0ID0gcnRsMjgzMF9idWxrX3JlYWQoY2xpZW50LCAweDM1MSwgJmJ1ZlsyXSwgMSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwgIiVzOiBUUFM9JSpwaFxuIiwgX19mdW5jX18sIDMsIGJ1Zik7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJUUFM9JSpwaFxuIiwgMywgYnVmKTsKIAogCXN3aXRjaCAoKGJ1ZlswXSA+PiAyKSAmIDMpIHsKIAljYXNlIDA6CkBAIC00OTMsMjQ0ICszODgsODcgQEAKIAogCXJldHVybiAwOwogZXJyOgotCWRldl9kYmcoJnByaXYtPmkyYy0+ZGV2LCAiJXM6IGZhaWxlZD0lZFxuIiwgX19mdW5jX18sIHJldCk7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBydGwyODMwX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQogewotCXN0cnVjdCBydGwyODMwX3ByaXYgKnByaXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHJ0bDI4MzBfZGV2ICpkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgcmV0OwotCXU4IHRtcDsKKwl1OCB1OHRtcDsKKwogCSpzdGF0dXMgPSAwOwogCi0JaWYgKHByaXYtPnNsZWVwaW5nKQorCWlmIChkZXYtPnNsZWVwaW5nKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IHJ0bDI4MzBfcmRfcmVnX21hc2socHJpdiwgMHgzNTEsICZ0bXAsIDB4NzgpOyAvKiBbNjozXSAqLworCXJldCA9IHJ0bDI4MzBfYnVsa19yZWFkKGNsaWVudCwgMHgzNTEsICZ1OHRtcCwgMSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlpZiAodG1wID09IDExKSB7CisJdTh0bXAgPSAodTh0bXAgPj4gMykgJiAweDBmOyAvKiBbNjozXSAqLworCWlmICh1OHRtcCA9PSAxMSkgewogCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfQ0FSUklFUiB8CiAJCQlGRV9IQVNfVklURVJCSSB8IEZFX0hBU19TWU5DIHwgRkVfSEFTX0xPQ0s7Ci0JfSBlbHNlIGlmICh0bXAgPT0gMTApIHsKKwl9IGVsc2UgaWYgKHU4dG1wID09IDEwKSB7CiAJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTCB8IEZFX0hBU19DQVJSSUVSIHwKIAkJCUZFX0hBU19WSVRFUkJJOwogCX0KIAorCWRldi0+ZmVfc3RhdHVzID0gKnN0YXR1czsKKwogCXJldHVybiByZXQ7CiBlcnI6Ci0JZGV2X2RiZygmcHJpdi0+aTJjLT5kZXYsICIlczogZmFpbGVkPSVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHJ0bDI4MzBfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQogewotCXN0cnVjdCBydGwyODMwX3ByaXYgKnByaXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlpbnQgcmV0LCBoaWVyYXJjaHksIGNvbnN0ZWxsYXRpb247Ci0JdTggYnVmWzJdLCB0bXA7Ci0JdTE2IHRtcDE2OwotI2RlZmluZSBDT05TVEVMTEFUSU9OX05VTSAzCi0jZGVmaW5lIEhJRVJBUkNIWV9OVU0gNAotCXN0YXRpYyBjb25zdCB1MzIgc25yX2NvbnN0YW50W0NPTlNURUxMQVRJT05fTlVNXVtISUVSQVJDSFlfTlVNXSA9IHsKLQkJeyA3MDcwNTg5OSwgNzA3MDU4OTksIDcwNzA1ODk5LCA3MDcwNTg5OSB9LAotCQl7IDgyNDMzMTczLCA4MjQzMzE3MywgODc0ODMxMTUsIDk0NDQ1NjYwIH0sCi0JCXsgOTI4ODg3MzQsIDkyODg4NzM0LCA5NTQ4NzUyNSwgOTk3NzA3NDggfSwKLQl9OworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwogCi0JaWYgKHByaXYtPnNsZWVwaW5nKQotCQlyZXR1cm4gMDsKLQotCS8qIHJlcG9ydHMgU05SIGluIHJlc29sdXRpb24gb2YgMC4xIGRCICovCi0KLQlyZXQgPSBydGwyODMwX3JkX3JlZyhwcml2LCAweDMzYywgJnRtcCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnI7Ci0KLQljb25zdGVsbGF0aW9uID0gKHRtcCA+PiAyKSAmIDB4MDM7IC8qIFszOjJdICovCi0JaWYgKGNvbnN0ZWxsYXRpb24gPiBDT05TVEVMTEFUSU9OX05VTSAtIDEpCi0JCWdvdG8gZXJyOwotCi0JaGllcmFyY2h5ID0gKHRtcCA+PiA0KSAmIDB4MDc7IC8qIFs2OjRdICovCi0JaWYgKGhpZXJhcmNoeSA+IEhJRVJBUkNIWV9OVU0gLSAxKQotCQlnb3RvIGVycjsKLQotCXJldCA9IHJ0bDI4MzBfcmRfcmVncyhwcml2LCAweDQwYywgYnVmLCAyKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCXRtcDE2ID0gYnVmWzBdIDw8IDggfCBidWZbMV07Ci0KLQlpZiAodG1wMTYpCi0JCSpzbnIgPSAoc25yX2NvbnN0YW50W2NvbnN0ZWxsYXRpb25dW2hpZXJhcmNoeV0gLQotCQkJCWludGxvZzEwKHRtcDE2KSkgLyAoKDEgPDwgMjQpIC8gMTAwKTsKKwlpZiAoYy0+Y25yLnN0YXRbMF0uc2NhbGUgPT0gRkVfU0NBTEVfREVDSUJFTCkKKwkJKnNuciA9IGRpdl9zNjQoYy0+Y25yLnN0YXRbMF0uc3ZhbHVlLCAxMDApOwogCWVsc2UKIAkJKnNuciA9IDA7CiAKIAlyZXR1cm4gMDsKLWVycjoKLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOwotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcnRsMjgzMF9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCiB7Ci0Jc3RydWN0IHJ0bDI4MzBfcHJpdiAqcHJpdiA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCWludCByZXQ7Ci0JdTggYnVmWzJdOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgcnRsMjgzMF9kZXYgKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCi0JaWYgKHByaXYtPnNsZWVwaW5nKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IHJ0bDI4MzBfcmRfcmVncyhwcml2LCAweDM0ZSwgYnVmLCAyKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCSpiZXIgPSBidWZbMF0gPDwgOCB8IGJ1ZlsxXTsKKwkqYmVyID0gKGRldi0+cG9zdF9iaXRfZXJyb3IgLSBkZXYtPnBvc3RfYml0X2Vycm9yX3ByZXYpOworCWRldi0+cG9zdF9iaXRfZXJyb3JfcHJldiA9IGRldi0+cG9zdF9iaXRfZXJyb3I7CiAKIAlyZXR1cm4gMDsKLWVycjoKLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOwotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcnRsMjgzMF9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnVjYmxvY2tzKQogewogCSp1Y2Jsb2NrcyA9IDA7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBydGwyODMwX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnN0cmVuZ3RoKQogewotCXN0cnVjdCBydGwyODMwX3ByaXYgKnByaXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlpbnQgcmV0OwotCXU4IGJ1ZlsyXTsKLQl1MTYgaWZfYWdjX3JhdywgaWZfYWdjOworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwogCi0JaWYgKHByaXYtPnNsZWVwaW5nKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IHJ0bDI4MzBfcmRfcmVncyhwcml2LCAweDM1OSwgYnVmLCAyKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCWlmX2FnY19yYXcgPSAoYnVmWzBdIDw8IDggfCBidWZbMV0pICYgMHgzZmZmOwotCi0JaWYgKGlmX2FnY19yYXcgJiAoMSA8PCA5KSkKLQkJaWZfYWdjID0gLSh+KGlmX2FnY19yYXcgLSAxKSAmIDB4MWZmKTsKKwlpZiAoYy0+c3RyZW5ndGguc3RhdFswXS5zY2FsZSA9PSBGRV9TQ0FMRV9SRUxBVElWRSkKKwkJKnN0cmVuZ3RoID0gYy0+c3RyZW5ndGguc3RhdFswXS51dmFsdWU7CiAJZWxzZQotCQlpZl9hZ2MgPSBpZl9hZ2NfcmF3OwotCi0JKnN0cmVuZ3RoID0gKHU4KSAoNTUgLSBpZl9hZ2MgLyAxODIpOwotCSpzdHJlbmd0aCB8PSAqc3RyZW5ndGggPDwgODsKKwkJKnN0cmVuZ3RoID0gMDsKIAogCXJldHVybiAwOwotZXJyOgotCWRldl9kYmcoJnByaXYtPmkyYy0+ZGV2LCAiJXM6IGZhaWxlZD0lZFxuIiwgX19mdW5jX18sIHJldCk7Ci0JcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIHJ0bDI4MzBfb3BzOwotCi1zdGF0aWMgdTMyIHJ0bDI4MzBfdHVuZXJfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCXJldHVybiBJMkNfRlVOQ19JMkM7Ci19Ci0KLXN0YXRpYyBpbnQgcnRsMjgzMF90dW5lcl9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAotCXN0cnVjdCBpMmNfbXNnIG1zZ1tdLCBpbnQgbnVtKQotewotCXN0cnVjdCBydGwyODMwX3ByaXYgKnByaXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyY19hZGFwKTsKLQlpbnQgcmV0OwotCi0JLyogb3BlbiBpMmMtZ2F0ZSAqLwotCXJldCA9IHJ0bDI4MzBfd3JfcmVnX21hc2socHJpdiwgMHgxMDEsIDB4MDgsIDB4MDgpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCi0JcmV0ID0gaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgbXNnLCBudW0pOwotCWlmIChyZXQgPCAwKQotCQlkZXZfd2FybigmcHJpdi0+aTJjLT5kZXYsICIlczogdHVuZXIgaTJjIGZhaWxlZD0lZFxuIiwKLQkJCUtCVUlMRF9NT0ROQU1FLCByZXQpOwotCi0JcmV0dXJuIHJldDsKLWVycjoKLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBydGwyODMwX3R1bmVyX2kyY19hbGdvID0gewotCS5tYXN0ZXJfeGZlciAgID0gcnRsMjgzMF90dW5lcl9pMmNfeGZlciwKLQkuZnVuY3Rpb25hbGl0eSA9IHJ0bDI4MzBfdHVuZXJfaTJjX2Z1bmMsCi19OwotCi1zdHJ1Y3QgaTJjX2FkYXB0ZXIgKnJ0bDI4MzBfZ2V0X3R1bmVyX2kyY19hZGFwdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQotewotCXN0cnVjdCBydGwyODMwX3ByaXYgKnByaXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlyZXR1cm4gJnByaXYtPnR1bmVyX2kyY19hZGFwdGVyOwotfQotRVhQT1JUX1NZTUJPTChydGwyODMwX2dldF90dW5lcl9pMmNfYWRhcHRlcik7Ci0KLXN0YXRpYyB2b2lkIHJ0bDI4MzBfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKLXsKLQlzdHJ1Y3QgcnRsMjgzMF9wcml2ICpwcml2ID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0KLQlpMmNfZGVsX2FkYXB0ZXIoJnByaXYtPnR1bmVyX2kyY19hZGFwdGVyKTsKLQlrZnJlZShwcml2KTsKLX0KLQotc3RydWN0IGR2Yl9mcm9udGVuZCAqcnRsMjgzMF9hdHRhY2goY29uc3Qgc3RydWN0IHJ0bDI4MzBfY29uZmlnICpjZmcsCi0Jc3RydWN0IGkyY19hZGFwdGVyICppMmMpCi17Ci0Jc3RydWN0IHJ0bDI4MzBfcHJpdiAqcHJpdiA9IE5VTEw7Ci0JaW50IHJldCA9IDA7Ci0JdTggdG1wOwotCi0JLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KLQlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJ0bDI4MzBfcHJpdiksIEdGUF9LRVJORUwpOwotCWlmIChwcml2ID09IE5VTEwpCi0JCWdvdG8gZXJyOwotCi0JLyogc2V0dXAgdGhlIHByaXYgKi8KLQlwcml2LT5pMmMgPSBpMmM7Ci0JbWVtY3B5KCZwcml2LT5jZmcsIGNmZywgc2l6ZW9mKHN0cnVjdCBydGwyODMwX2NvbmZpZykpOwotCi0JLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHRoZXJlICovCi0JcmV0ID0gcnRsMjgzMF9yZF9yZWcocHJpdiwgMHgwMDAsICZ0bXApOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCi0JLyogY3JlYXRlIGR2Yl9mcm9udGVuZCAqLwotCW1lbWNweSgmcHJpdi0+ZmUub3BzLCAmcnRsMjgzMF9vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOwotCXByaXYtPmZlLmRlbW9kdWxhdG9yX3ByaXYgPSBwcml2OwotCi0JLyogY3JlYXRlIHR1bmVyIGkyYyBhZGFwdGVyICovCi0Jc3RybGNweShwcml2LT50dW5lcl9pMmNfYWRhcHRlci5uYW1lLCAiUlRMMjgzMCB0dW5lciBJMkMgYWRhcHRlciIsCi0JCXNpemVvZihwcml2LT50dW5lcl9pMmNfYWRhcHRlci5uYW1lKSk7Ci0JcHJpdi0+dHVuZXJfaTJjX2FkYXB0ZXIuYWxnbyA9ICZydGwyODMwX3R1bmVyX2kyY19hbGdvOwotCXByaXYtPnR1bmVyX2kyY19hZGFwdGVyLmFsZ29fZGF0YSA9IE5VTEw7Ci0JcHJpdi0+dHVuZXJfaTJjX2FkYXB0ZXIuZGV2LnBhcmVudCA9ICZpMmMtPmRldjsKLQlpMmNfc2V0X2FkYXBkYXRhKCZwcml2LT50dW5lcl9pMmNfYWRhcHRlciwgcHJpdik7Ci0JaWYgKGkyY19hZGRfYWRhcHRlcigmcHJpdi0+dHVuZXJfaTJjX2FkYXB0ZXIpIDwgMCkgewotCQlkZXZfZXJyKCZpMmMtPmRldiwKLQkJCQkiJXM6IHR1bmVyIGkyYyBidXMgY291bGQgbm90IGJlIGluaXRpYWxpemVkXG4iLAotCQkJCUtCVUlMRF9NT0ROQU1FKTsKLQkJZ290byBlcnI7Ci0JfQotCi0JcHJpdi0+c2xlZXBpbmcgPSB0cnVlOwotCi0JcmV0dXJuICZwcml2LT5mZTsKLWVycjoKLQlkZXZfZGJnKCZpMmMtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOwotCWtmcmVlKHByaXYpOwotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTChydGwyODMwX2F0dGFjaCk7Ci0KIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBydGwyODMwX29wcyA9IHsKLQkuZGVsc3lzID0geyBTWVNfRFZCVCB9LAorCS5kZWxzeXMgPSB7U1lTX0RWQlR9LAogCS5pbmZvID0gewogCQkubmFtZSA9ICJSZWFsdGVrIFJUTDI4MzAgKERWQi1UKSIsCiAJCS5jYXBzID0gRkVfQ0FOX0ZFQ18xXzIgfApAQCAtNzUwLDggKzQ4OCw2IEBACiAJCQlGRV9DQU5fTVVURV9UUwogCX0sCiAKLQkucmVsZWFzZSA9IHJ0bDI4MzBfcmVsZWFzZSwKLQogCS5pbml0ID0gcnRsMjgzMF9pbml0LAogCS5zbGVlcCA9IHJ0bDI4MzBfc2xlZXAsCiAKQEAgLTc2Nyw2ICs1MDMsNDI4IEBACiAJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gcnRsMjgzMF9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKIH07CiAKK3N0YXRpYyB2b2lkIHJ0bDI4MzBfc3RhdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcnRsMjgzMF9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnRsMjgzMF9kZXYsIHN0YXRfd29yay53b3JrKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGV2LT5jbGllbnQ7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmRldi0+ZmUuZHR2X3Byb3BlcnR5X2NhY2hlOworCWludCByZXQsIHRtcDsKKwl1OCB1OHRtcCwgYnVmWzJdOworCXUxNiB1MTZ0bXA7CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlxuIik7CisKKwkvKiBzaWduYWwgc3RyZW5ndGggKi8KKwlpZiAoZGV2LT5mZV9zdGF0dXMgJiBGRV9IQVNfU0lHTkFMKSB7CisJCXN0cnVjdCB7c2lnbmVkIGludCB4OjE0OyB9IHM7CisKKwkJLyogcmVhZCBJRiBBR0MgKi8KKwkJcmV0ID0gcnRsMjgzMF9idWxrX3JlYWQoY2xpZW50LCAweDM1OSwgYnVmLCAyKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCisJCXUxNnRtcCA9IGJ1ZlswXSA8PCA4IHwgYnVmWzFdIDw8IDA7CisJCXUxNnRtcCAmPSAweDNmZmY7IC8qIFsxMzowXSAqLworCQl0bXAgPSBzLnggPSB1MTZ0bXA7IC8qIDE0LWJpdCBiaW4gdG8gMiBjb21wbGVtZW50ICovCisJCXUxNnRtcCA9IGNsYW1wX3ZhbCgtNCAqIHRtcCArIDMyNzY3LCAweDAwMDAsIDB4ZmZmZik7CisKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJJRiBBR0M9JWRcbiIsIHRtcCk7CisKKwkJYy0+c3RyZW5ndGguc3RhdFswXS5zY2FsZSA9IEZFX1NDQUxFX1JFTEFUSVZFOworCQljLT5zdHJlbmd0aC5zdGF0WzBdLnV2YWx1ZSA9IHUxNnRtcDsKKwl9IGVsc2UgeworCQljLT5zdHJlbmd0aC5zdGF0WzBdLnNjYWxlID0gRkVfU0NBTEVfTk9UX0FWQUlMQUJMRTsKKwl9CisKKwkvKiBDTlIgKi8KKwlpZiAoZGV2LT5mZV9zdGF0dXMgJiBGRV9IQVNfVklURVJCSSkgeworCQl1bnNpZ25lZCBoaWVyYXJjaHksIGNvbnN0ZWxsYXRpb247CisJCSNkZWZpbmUgQ09OU1RFTExBVElPTl9OVU0gMworCQkjZGVmaW5lIEhJRVJBUkNIWV9OVU0gNAorCQlzdGF0aWMgY29uc3QgdTMyIGNvbnN0YW50W0NPTlNURUxMQVRJT05fTlVNXVtISUVSQVJDSFlfTlVNXSA9IHsKKwkJCXs3MDcwNTg5OSwgNzA3MDU4OTksIDcwNzA1ODk5LCA3MDcwNTg5OX0sCisJCQl7ODI0MzMxNzMsIDgyNDMzMTczLCA4NzQ4MzExNSwgOTQ0NDU2NjB9LAorCQkJezkyODg4NzM0LCA5Mjg4ODczNCwgOTU0ODc1MjUsIDk5NzcwNzQ4fSwKKwkJfTsKKworCQlyZXQgPSBydGwyODMwX2J1bGtfcmVhZChjbGllbnQsIDB4MzNjLCAmdTh0bXAsIDEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisKKwkJY29uc3RlbGxhdGlvbiA9ICh1OHRtcCA+PiAyKSAmIDB4MDM7IC8qIFszOjJdICovCisJCWlmIChjb25zdGVsbGF0aW9uID4gQ09OU1RFTExBVElPTl9OVU0gLSAxKQorCQkJZ290byBlcnJfc2NoZWR1bGVfZGVsYXllZF93b3JrOworCisJCWhpZXJhcmNoeSA9ICh1OHRtcCA+PiA0KSAmIDB4MDc7IC8qIFs2OjRdICovCisJCWlmIChoaWVyYXJjaHkgPiBISUVSQVJDSFlfTlVNIC0gMSkKKwkJCWdvdG8gZXJyX3NjaGVkdWxlX2RlbGF5ZWRfd29yazsKKworCQlyZXQgPSBydGwyODMwX2J1bGtfcmVhZChjbGllbnQsIDB4NDBjLCBidWYsIDIpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisKKwkJdTE2dG1wID0gYnVmWzBdIDw8IDggfCBidWZbMV0gPDwgMDsKKwkJaWYgKHUxNnRtcCkKKwkJCXRtcCA9IChjb25zdGFudFtjb25zdGVsbGF0aW9uXVtoaWVyYXJjaHldIC0KKwkJCSAgICAgICBpbnRsb2cxMCh1MTZ0bXApKSAvICgoMSA8PCAyNCkgLyAxMDAwMCk7CisJCWVsc2UKKwkJCXRtcCA9IDA7CisKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJDTlIgcmF3PSV1XG4iLCB1MTZ0bXApOworCisJCWMtPmNuci5zdGF0WzBdLnNjYWxlID0gRkVfU0NBTEVfREVDSUJFTDsKKwkJYy0+Y25yLnN0YXRbMF0uc3ZhbHVlID0gdG1wOworCX0gZWxzZSB7CisJCWMtPmNuci5zdGF0WzBdLnNjYWxlID0gRkVfU0NBTEVfTk9UX0FWQUlMQUJMRTsKKwl9CisKKwkvKiBCRVIgKi8KKwlpZiAoZGV2LT5mZV9zdGF0dXMgJiBGRV9IQVNfTE9DSykgeworCQlyZXQgPSBydGwyODMwX2J1bGtfcmVhZChjbGllbnQsIDB4MzRlLCBidWYsIDIpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisKKwkJdTE2dG1wID0gYnVmWzBdIDw8IDggfCBidWZbMV0gPDwgMDsKKwkJZGV2LT5wb3N0X2JpdF9lcnJvciArPSB1MTZ0bXA7CisJCWRldi0+cG9zdF9iaXRfY291bnQgKz0gMTAwMDAwMDsKKworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkJFUiBlcnJvcnM9JXUgdG90YWw9MTAwMDAwMFxuIiwgdTE2dG1wKTsKKworCQljLT5wb3N0X2JpdF9lcnJvci5zdGF0WzBdLnNjYWxlID0gRkVfU0NBTEVfQ09VTlRFUjsKKwkJYy0+cG9zdF9iaXRfZXJyb3Iuc3RhdFswXS51dmFsdWUgPSBkZXYtPnBvc3RfYml0X2Vycm9yOworCQljLT5wb3N0X2JpdF9jb3VudC5zdGF0WzBdLnNjYWxlID0gRkVfU0NBTEVfQ09VTlRFUjsKKwkJYy0+cG9zdF9iaXRfY291bnQuc3RhdFswXS51dmFsdWUgPSBkZXYtPnBvc3RfYml0X2NvdW50OworCX0gZWxzZSB7CisJCWMtPnBvc3RfYml0X2Vycm9yLnN0YXRbMF0uc2NhbGUgPSBGRV9TQ0FMRV9OT1RfQVZBSUxBQkxFOworCQljLT5wb3N0X2JpdF9jb3VudC5zdGF0WzBdLnNjYWxlID0gRkVfU0NBTEVfTk9UX0FWQUlMQUJMRTsKKwl9CisKK2Vycl9zY2hlZHVsZV9kZWxheWVkX3dvcms6CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPnN0YXRfd29yaywgbXNlY3NfdG9famlmZmllcygyMDAwKSk7CisJcmV0dXJuOworZXJyOgorCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOworfQorCitzdGF0aWMgaW50IHJ0bDI4MzBfcGlkX2ZpbHRlcl9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgb25vZmYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByZXQ7CisJdTggdTh0bXA7CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIm9ub2ZmPSVkXG4iLCBvbm9mZik7CisKKwkvKiBlbmFibGUgLyBkaXNhYmxlIFBJRCBmaWx0ZXIgKi8KKwlpZiAob25vZmYpCisJCXU4dG1wID0gMHg4MDsKKwllbHNlCisJCXU4dG1wID0gMHgwMDsKKworCXJldCA9IHJ0bDI4MzBfdXBkYXRlX2JpdHMoY2xpZW50LCAweDA2MSwgMHg4MCwgdTh0bXApOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CitlcnI6CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBydGwyODMwX3BpZF9maWx0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IGluZGV4LCB1MTYgcGlkLCBpbnQgb25vZmYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBydGwyODMwX2RldiAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHJldDsKKwl1OCBidWZbNF07CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImluZGV4PSVkIHBpZD0lMDR4IG9ub2ZmPSVkXG4iLAorCQlpbmRleCwgcGlkLCBvbm9mZik7CisKKwkvKiBza2lwIGludmFsaWQgUElEcyAoMHgyMDAwKSAqLworCWlmIChwaWQgPiAweDFmZmYgfHwgaW5kZXggPiAzMikKKwkJcmV0dXJuIDA7CisKKwlpZiAob25vZmYpCisJCXNldF9iaXQoaW5kZXgsICZkZXYtPmZpbHRlcnMpOworCWVsc2UKKwkJY2xlYXJfYml0KGluZGV4LCAmZGV2LT5maWx0ZXJzKTsKKworCS8qIGVuYWJsZSAvIGRpc2FibGUgUElEcyAqLworCWJ1ZlswXSA9IChkZXYtPmZpbHRlcnMgPj4gIDApICYgMHhmZjsKKwlidWZbMV0gPSAoZGV2LT5maWx0ZXJzID4+ICA4KSAmIDB4ZmY7CisJYnVmWzJdID0gKGRldi0+ZmlsdGVycyA+PiAxNikgJiAweGZmOworCWJ1ZlszXSA9IChkZXYtPmZpbHRlcnMgPj4gMjQpICYgMHhmZjsKKwlyZXQgPSBydGwyODMwX2J1bGtfd3JpdGUoY2xpZW50LCAweDA2MiwgYnVmLCA0KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCS8qIGFkZCBQSUQgKi8KKwlidWZbMF0gPSAocGlkID4+IDgpICYgMHhmZjsKKwlidWZbMV0gPSAocGlkID4+IDApICYgMHhmZjsKKwlyZXQgPSBydGwyODMwX2J1bGtfd3JpdGUoY2xpZW50LCAweDA2NiArIDIgKiBpbmRleCwgYnVmLCAyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldHVybiAwOworZXJyOgorCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBJMkMgZ2F0ZS9tdXgvcmVwZWF0ZXIgbG9naWMKKyAqIFdlIG11c3QgdXNlIHVubG9ja2VkIF9faTJjX3RyYW5zZmVyKCkgaGVyZSAodGhyb3VnaCByZWdtYXApIGJlY2F1c2Ugb2YgSTJDCisgKiBhZGFwdGVyIGxvY2sgaXMgYWxyZWFkeSB0YWtlbiBieSB0dW5lciBkcml2ZXIuCisgKiBHYXRlIGlzIGNsb3NlZCBhdXRvbWF0aWNhbGx5IGFmdGVyIHNpbmdsZSBJMkMgdHJhbnNmZXIuCisgKi8KK3N0YXRpYyBpbnQgcnRsMjgzMF9zZWxlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCB2b2lkICptdXhfcHJpdiwgdTMyIGNoYW5faWQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IG11eF9wcml2OworCXN0cnVjdCBydGwyODMwX2RldiAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHJldDsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXG4iKTsKKworCS8qIG9wZW4gSTJDIHJlcGVhdGVyIGZvciAxIHRyYW5zZmVyLCBjbG9zZXMgYXV0b21hdGljYWxseSAqLworCS8qIFhYWDogcmVnbWFwX3VwZGF0ZV9iaXRzKCkgZG9lcyBub3QgbG9jayBJMkMgYWRhcHRlciAqLworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhkZXYtPnJlZ21hcCwgMHgxMDEsIDB4MDgsIDB4MDgpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0dXJuIDA7CitlcnI6CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnJ0bDI4MzBfZ2V0X2R2Yl9mcm9udGVuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBydGwyODMwX2RldiAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlxuIik7CisKKwlyZXR1cm4gJmRldi0+ZmU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKnJ0bDI4MzBfZ2V0X2kyY19hZGFwdGVyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHJ0bDI4MzBfZGV2ICpkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXG4iKTsKKworCXJldHVybiBkZXYtPmFkYXB0ZXI7Cit9CisKKy8qCisgKiBXZSBpbXBsZW1lbnQgb3duIEkyQyBhY2Nlc3Mgcm91dGluZXMgZm9yIHJlZ21hcCBpbiBvcmRlciB0byBnZXQgbWFudWFsIGFjY2VzcworICogdG8gSTJDIGFkYXB0ZXIgbG9jaywgd2hpY2ggaXMgbmVlZGVkIGZvciBJMkMgbXV4IGFkYXB0ZXIuCisgKi8KK3N0YXRpYyBpbnQgcnRsMjgzMF9yZWdtYXBfcmVhZCh2b2lkICpjb250ZXh0LCBjb25zdCB2b2lkICpyZWdfYnVmLAorCQkJICAgICAgIHNpemVfdCByZWdfc2l6ZSwgdm9pZCAqdmFsX2J1Ziwgc2l6ZV90IHZhbF9zaXplKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb250ZXh0OworCWludCByZXQ7CisJc3RydWN0IGkyY19tc2cgbXNnWzJdID0geworCQl7CisJCQkuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJCS5mbGFncyA9IDAsCisJCQkubGVuID0gcmVnX3NpemUsCisJCQkuYnVmID0gKHU4ICopcmVnX2J1ZiwKKwkJfSwgeworCQkJLmFkZHIgPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5sZW4gPSB2YWxfc2l6ZSwKKwkJCS5idWYgPSB2YWxfYnVmLAorCQl9CisJfTsKKworCXJldCA9IF9faTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNnLCAyKTsKKwlpZiAocmV0ICE9IDIpIHsKKwkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiaTJjIHJlZyByZWFkIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJaWYgKHJldCA+PSAwKQorCQkJcmV0ID0gLUVSRU1PVEVJTzsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsMjgzMF9yZWdtYXBfd3JpdGUodm9pZCAqY29udGV4dCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb250ZXh0OworCWludCByZXQ7CisJc3RydWN0IGkyY19tc2cgbXNnWzFdID0geworCQl7CisJCQkuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJCS5mbGFncyA9IDAsCisJCQkubGVuID0gY291bnQsCisJCQkuYnVmID0gKHU4ICopZGF0YSwKKwkJfQorCX07CisKKwlyZXQgPSBfX2kyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMSk7CisJaWYgKHJldCAhPSAxKSB7CisJCWRldl93YXJuKCZjbGllbnQtPmRldiwgImkyYyByZWcgd3JpdGUgZmFpbGVkICVkXG4iLCByZXQpOworCQlpZiAocmV0ID49IDApCisJCQlyZXQgPSAtRVJFTU9URUlPOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGwyODMwX3JlZ21hcF9nYXRoZXJfd3JpdGUodm9pZCAqY29udGV4dCwgY29uc3Qgdm9pZCAqcmVnLAorCQkJCSAgICAgICBzaXplX3QgcmVnX2xlbiwgY29uc3Qgdm9pZCAqdmFsLAorCQkJCSAgICAgICBzaXplX3QgdmFsX2xlbikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY29udGV4dDsKKwlpbnQgcmV0OworCXU4IGJ1ZlsyNTZdOworCXN0cnVjdCBpMmNfbXNnIG1zZ1sxXSA9IHsKKwkJeworCQkJLmFkZHIgPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3MgPSAwLAorCQkJLmxlbiA9IDEgKyB2YWxfbGVuLAorCQkJLmJ1ZiA9IGJ1ZiwKKwkJfQorCX07CisKKwlidWZbMF0gPSAqKHU4IGNvbnN0ICopcmVnOworCW1lbWNweSgmYnVmWzFdLCB2YWwsIHZhbF9sZW4pOworCisJcmV0ID0gX19pMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2csIDEpOworCWlmIChyZXQgIT0gMSkgeworCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJpMmMgcmVnIHdyaXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJaWYgKHJldCA+PSAwKQorCQkJcmV0ID0gLUVSRU1PVEVJTzsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsMjgzMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgcnRsMjgzMF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHJ0bDI4MzBfZGV2ICpkZXY7CisJaW50IHJldDsKKwl1OCB1OHRtcDsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9idXMgcmVnbWFwX2J1cyA9IHsKKwkJLnJlYWQgPSBydGwyODMwX3JlZ21hcF9yZWFkLAorCQkud3JpdGUgPSBydGwyODMwX3JlZ21hcF93cml0ZSwKKwkJLmdhdGhlcl93cml0ZSA9IHJ0bDI4MzBfcmVnbWFwX2dhdGhlcl93cml0ZSwKKwkJLnZhbF9mb3JtYXRfZW5kaWFuX2RlZmF1bHQgPSBSRUdNQVBfRU5ESUFOX05BVElWRSwKKwl9OworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlX2NmZyByZWdtYXBfcmFuZ2VfY2ZnW10gPSB7CisJCXsKKwkJCS5zZWxlY3Rvcl9yZWcgICAgID0gMHgwMCwKKwkJCS5zZWxlY3Rvcl9tYXNrICAgID0gMHhmZiwKKwkJCS5zZWxlY3Rvcl9zaGlmdCAgID0gMCwKKwkJCS53aW5kb3dfc3RhcnQgICAgID0gMCwKKwkJCS53aW5kb3dfbGVuICAgICAgID0gMHgxMDAsCisJCQkucmFuZ2VfbWluICAgICAgICA9IDAgKiAweDEwMCwKKwkJCS5yYW5nZV9tYXggICAgICAgID0gNSAqIDB4MTAwLAorCQl9LAorCX07CisJc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHJlZ21hcF9jb25maWcgPSB7CisJCS5yZWdfYml0cyAgICA9ICA4LAorCQkudmFsX2JpdHMgICAgPSAgOCwKKwkJLm1heF9yZWdpc3RlciA9IDUgKiAweDEwMCwKKwkJLnJhbmdlcyA9IHJlZ21hcF9yYW5nZV9jZmcsCisJCS5udW1fcmFuZ2VzID0gQVJSQVlfU0laRShyZWdtYXBfcmFuZ2VfY2ZnKSwKKwl9OworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJcbiIpOworCisJaWYgKHBkYXRhID09IE5VTEwpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qIHNldHVwIHRoZSBzdGF0ZSAqLworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRldik7CisJZGV2LT5jbGllbnQgPSBjbGllbnQ7CisJZGV2LT5wZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJZGV2LT5zbGVlcGluZyA9IHRydWU7CisJSU5JVF9ERUxBWUVEX1dPUksoJmRldi0+c3RhdF93b3JrLCBydGwyODMwX3N0YXRfd29yayk7CisJZGV2LT5yZWdtYXAgPSByZWdtYXBfaW5pdCgmY2xpZW50LT5kZXYsICZyZWdtYXBfYnVzLCBjbGllbnQsCisJCQkJICAmcmVnbWFwX2NvbmZpZyk7CisJaWYgKElTX0VSUihkZXYtPnJlZ21hcCkpIHsKKwkJcmV0ID0gUFRSX0VSUihkZXYtPnJlZ21hcCk7CisJCWdvdG8gZXJyX2tmcmVlOworCX0KKworCS8qIGNoZWNrIGlmIHRoZSBkZW1vZCBpcyB0aGVyZSAqLworCXJldCA9IHJ0bDI4MzBfYnVsa19yZWFkKGNsaWVudCwgMHgwMDAsICZ1OHRtcCwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVnbWFwX2V4aXQ7CisKKwkvKiBjcmVhdGUgbXV4ZWQgaTJjIGFkYXB0ZXIgZm9yIHR1bmVyICovCisJZGV2LT5hZGFwdGVyID0gaTJjX2FkZF9tdXhfYWRhcHRlcihjbGllbnQtPmFkYXB0ZXIsICZjbGllbnQtPmRldiwKKwkJCWNsaWVudCwgMCwgMCwgMCwgcnRsMjgzMF9zZWxlY3QsIE5VTEwpOworCWlmIChkZXYtPmFkYXB0ZXIgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9yZWdtYXBfZXhpdDsKKwl9CisKKwkvKiBjcmVhdGUgZHZiIGZyb250ZW5kICovCisJbWVtY3B5KCZkZXYtPmZlLm9wcywgJnJ0bDI4MzBfb3BzLCBzaXplb2YoZGV2LT5mZS5vcHMpKTsKKwlkZXYtPmZlLmRlbW9kdWxhdG9yX3ByaXYgPSBjbGllbnQ7CisKKwkvKiBzZXR1cCBjYWxsYmFja3MgKi8KKwlwZGF0YS0+Z2V0X2R2Yl9mcm9udGVuZCA9IHJ0bDI4MzBfZ2V0X2R2Yl9mcm9udGVuZDsKKwlwZGF0YS0+Z2V0X2kyY19hZGFwdGVyID0gcnRsMjgzMF9nZXRfaTJjX2FkYXB0ZXI7CisJcGRhdGEtPnBpZF9maWx0ZXIgPSBydGwyODMwX3BpZF9maWx0ZXI7CisJcGRhdGEtPnBpZF9maWx0ZXJfY3RybCA9IHJ0bDI4MzBfcGlkX2ZpbHRlcl9jdHJsOworCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiUmVhbHRlayBSVEwyODMwIHN1Y2Nlc3NmdWxseSBhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMDsKK2Vycl9yZWdtYXBfZXhpdDoKKwlyZWdtYXBfZXhpdChkZXYtPnJlZ21hcCk7CitlcnJfa2ZyZWU6CisJa2ZyZWUoZGV2KTsKK2VycjoKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJ0bDI4MzBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHJ0bDI4MzBfZGV2ICpkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXG4iKTsKKworCWkyY19kZWxfbXV4X2FkYXB0ZXIoZGV2LT5hZGFwdGVyKTsKKwlyZWdtYXBfZXhpdChkZXYtPnJlZ21hcCk7CisJa2ZyZWUoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcnRsMjgzMF9pZF90YWJsZVtdID0geworCXsicnRsMjgzMCIsIDB9LAorCXt9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHJ0bDI4MzBfaWRfdGFibGUpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnRsMjgzMF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gInJ0bDI4MzAiLAorCX0sCisJLnByb2JlCQk9IHJ0bDI4MzBfcHJvYmUsCisJLnJlbW92ZQkJPSBydGwyODMwX3JlbW92ZSwKKwkuaWRfdGFibGUJPSBydGwyODMwX2lkX3RhYmxlLAorfTsKKworbW9kdWxlX2kyY19kcml2ZXIocnRsMjgzMF9kcml2ZXIpOworCiBNT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUmVhbHRlayBSVEwyODMwIERWQi1UIGRlbW9kdWxhdG9yIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3J0bDI4MzAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9ydGwyODMwLmgKaW5kZXggMzMxMzg0Ny4uMGNkZTE1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3J0bDI4MzAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvcnRsMjgzMC5oCkBAIC0xMyw3OCArMTMsMzcgQEAKICAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogICovCiAKICNpZm5kZWYgUlRMMjgzMF9ICiAjZGVmaW5lIFJUTDI4MzBfSAogCi0jaW5jbHVkZSA8bGludXgva2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogCi1zdHJ1Y3QgcnRsMjgzMF9jb25maWcgewotCS8qCi0JICogRGVtb2R1bGF0b3IgSTJDIGFkZHJlc3MuCi0JICovCi0JdTggaTJjX2FkZHI7CisvKioKKyAqIHN0cnVjdCBydGwyODMwX3BsYXRmb3JtX2RhdGEgLSBQbGF0Zm9ybSBkYXRhIGZvciB0aGUgcnRsMjgzMCBkcml2ZXIKKyAqIEBjbGs6IENsb2NrIGZyZXF1ZW5jeSAoNDAwMDAwMCwgMTYwMDAwMDAsIDI1MDAwMDAwLCAyODgwMDAwMCkuCisgKiBAc3BlY19pbnY6IFNwZWN0cnVtIGludmVyc2lvbi4KKyAqIEB2dG9wOiBBR0MgdGFrZS1vdmVyIHBvaW50LgorICogQGtyZjogQUdDIHJhdGlvLgorICogQGFnY190YXJnX3ZhbDogQUdDLgorICogQGdldF9kdmJfZnJvbnRlbmQ6IEdldCBEVkIgZnJvbnRlbmQuCisgKiBAZ2V0X2kyY19hZGFwdGVyOiBHZXQgSTJDIGFkYXB0ZXIuCisgKiBAcGlkX2ZpbHRlcjogU2V0IFBJRCB0byBQSUQgZmlsdGVyLgorICogQHBpZF9maWx0ZXJfY3RybDogQ29udHJvbCBQSUQgZmlsdGVyLgorICovCiAKLQkvKgotCSAqIFh0YWwgZnJlcXVlbmN5LgotCSAqIEh6Ci0JICogNDAwMDAwMCwgMTYwMDAwMDAsIDI1MDAwMDAwLCAyODgwMDAwMAotCSAqLwotCXUzMiB4dGFsOwotCi0JLyoKLQkgKiBUUyBvdXRwdXQgbW9kZS4KLQkgKi8KLQl1OCB0c19tb2RlOwotCi0JLyoKLQkgKiBTcGVjdHJ1bSBpbnZlcnNpb24uCi0JICovCitzdHJ1Y3QgcnRsMjgzMF9wbGF0Zm9ybV9kYXRhIHsKKwl1MzIgY2xrOwogCWJvb2wgc3BlY19pbnY7Ci0KLQkvKgotCSAqLwogCXU4IHZ0b3A7Ci0KLQkvKgotCSAqLwogCXU4IGtyZjsKLQotCS8qCi0JICovCiAJdTggYWdjX3RhcmdfdmFsOworCisJc3RydWN0IGR2Yl9mcm9udGVuZCogKCpnZXRfZHZiX2Zyb250ZW5kKShzdHJ1Y3QgaTJjX2NsaWVudCAqKTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIqICgqZ2V0X2kyY19hZGFwdGVyKShzdHJ1Y3QgaTJjX2NsaWVudCAqKTsKKwlpbnQgKCpwaWRfZmlsdGVyKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHU4LCB1MTYsIGludCk7CisJaW50ICgqcGlkX2ZpbHRlcl9jdHJsKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIGludCk7CiB9OwogCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfRFZCX1JUTDI4MzApCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqcnRsMjgzMF9hdHRhY2goCi0JY29uc3Qgc3RydWN0IHJ0bDI4MzBfY29uZmlnICpjb25maWcsCi0Jc3RydWN0IGkyY19hZGFwdGVyICppMmMKLSk7Ci0KLWV4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKnJ0bDI4MzBfZ2V0X3R1bmVyX2kyY19hZGFwdGVyKAotCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlCi0pOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqcnRsMjgzMF9hdHRhY2goCi0JY29uc3Qgc3RydWN0IHJ0bDI4MzBfY29uZmlnICpjb25maWcsCi0Jc3RydWN0IGkyY19hZGFwdGVyICppMmMKLSkKLXsKLQlwcl93YXJuKCIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKnJ0bDI4MzBfZ2V0X3R1bmVyX2kyY19hZGFwdGVyKAotCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlCi0pCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0jZW5kaWYKLQogI2VuZGlmIC8qIFJUTDI4MzBfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3J0bDI4MzBfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3J0bDI4MzBfcHJpdi5oCmluZGV4IGZhYjEwZWMuLmQ1MGQ1MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9ydGwyODMwX3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvcnRsMjgzMF9wcml2LmgKQEAgLTEzLDkgKzEzLDYgQEAKICAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKgotICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICAgIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogICovCiAKICNpZm5kZWYgUlRMMjgzMF9QUklWX0gKQEAgLTI0LDE2ICsyMSwyMyBAQAogI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogI2luY2x1ZGUgImR2Yl9tYXRoLmgiCiAjaW5jbHVkZSAicnRsMjgzMC5oIgorI2luY2x1ZGUgPGxpbnV4L2kyYy1tdXguaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KIAotc3RydWN0IHJ0bDI4MzBfcHJpdiB7Ci0Jc3RydWN0IGkyY19hZGFwdGVyICppMmM7CitzdHJ1Y3QgcnRsMjgzMF9kZXYgeworCXN0cnVjdCBydGwyODMwX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZlOwotCXN0cnVjdCBydGwyODMwX2NvbmZpZyBjZmc7Ci0Jc3RydWN0IGkyY19hZGFwdGVyIHR1bmVyX2kyY19hZGFwdGVyOwotCiAJYm9vbCBzbGVlcGluZzsKLQotCXU4IHBhZ2U7IC8qIGFjdGl2ZSByZWdpc3RlciBwYWdlICovCisJdW5zaWduZWQgbG9uZyBmaWx0ZXJzOworCXN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdF93b3JrOworCWZlX3N0YXR1c190IGZlX3N0YXR1czsKKwl1NjQgcG9zdF9iaXRfZXJyb3JfcHJldjsgLyogZm9yIG9sZCBEVkJ2MyByZWFkX2JlcigpIGNhbGN1bGF0aW9uICovCisJdTY0IHBvc3RfYml0X2Vycm9yOworCXU2NCBwb3N0X2JpdF9jb3VudDsKIH07CiAKIHN0cnVjdCBydGwyODMwX3JlZ192YWxfbWFzayB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvcnRsMjgzMi5jIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3J0bDI4MzIuYwppbmRleCA5MDI2ZTFhLi41ZDJkOGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvcnRsMjgzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9ydGwyODMyLmMKQEAgLTIsNiArMiw3IEBACiAgKiBSZWFsdGVrIFJUTDI4MzIgRFZCLVQgZGVtb2R1bGF0b3IgZHJpdmVyCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDEyIFRob21hcyBNYWlyIDx0aG9tYXMubWFpcjg2QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgogICoKICAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKglpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTksMjgwICsyMCwxOTEgQEAKICAqLwogCiAjaW5jbHVkZSAicnRsMjgzMl9wcml2LmgiCi0jaW5jbHVkZSAiZHZiX21hdGguaCIKLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAotLyogTWF4IHRyYW5zZmVyIHNpemUgZG9uZSBieSBJMkMgdHJhbnNmZXIgZnVuY3Rpb25zICovCi0jZGVmaW5lIE1BWF9YRkVSX1NJWkUgIDY0CiAjZGVmaW5lIFJFR19NQVNLKGIpIChCSVQoYiArIDEpIC0gMSkKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGwyODMyX3JlZ19lbnRyeSByZWdpc3RlcnNbXSA9IHsKLQlbRFZCVF9TT0ZUX1JTVF0JCT0gezB4MSwgMHgxLCAgIDIsIDJ9LAotCVtEVkJUX0lJQ19SRVBFQVRdCT0gezB4MSwgMHgxLCAgIDMsIDN9LAotCVtEVkJUX1RSX1dBSVRfTUlOXzhLXQk9IHsweDEsIDB4ODgsIDExLCAyfSwKLQlbRFZCVF9SU0RfQkVSX0ZBSUxfVkFMXQk9IHsweDEsIDB4OGYsIDE1LCAwfSwKLQlbRFZCVF9FTl9CS19UUktdCT0gezB4MSwgMHhhNiwgIDcsIDd9LAotCVtEVkJUX0FEX0VOX1JFR10JPSB7MHgwLCAweDgsICAgNywgN30sCi0JW0RWQlRfQURfRU5fUkVHMV0JPSB7MHgwLCAweDgsICAgNiwgNn0sCi0JW0RWQlRfRU5fQkJJTl0JCT0gezB4MSwgMHhiMSwgIDAsIDB9LAotCVtEVkJUX01HRF9USEQwXQkJPSB7MHgxLCAweDk1LCAgNywgMH0sCi0JW0RWQlRfTUdEX1RIRDFdCQk9IHsweDEsIDB4OTYsICA3LCAwfSwKLQlbRFZCVF9NR0RfVEhEMl0JCT0gezB4MSwgMHg5NywgIDcsIDB9LAotCVtEVkJUX01HRF9USEQzXQkJPSB7MHgxLCAweDk4LCAgNywgMH0sCi0JW0RWQlRfTUdEX1RIRDRdCQk9IHsweDEsIDB4OTksICA3LCAwfSwKLQlbRFZCVF9NR0RfVEhENV0JCT0gezB4MSwgMHg5YSwgIDcsIDB9LAotCVtEVkJUX01HRF9USEQ2XQkJPSB7MHgxLCAweDliLCAgNywgMH0sCi0JW0RWQlRfTUdEX1RIRDddCQk9IHsweDEsIDB4OWMsICA3LCAwfSwKLQlbRFZCVF9FTl9DQUNRX05PVENIXQk9IHsweDEsIDB4NjEsICA0LCA0fSwKLQlbRFZCVF9BRF9BVl9SRUZdCT0gezB4MCwgMHg5LCAgIDYsIDB9LAotCVtEVkJUX1JFR19QSV0JCT0gezB4MCwgMHhhLCAgIDIsIDB9LAotCVtEVkJUX1BJUF9PTl0JCT0gezB4MCwgMHgyMSwgIDMsIDN9LAotCVtEVkJUX1NDQUxFMV9COTJdCT0gezB4MiwgMHg5MiwgIDcsIDB9LAotCVtEVkJUX1NDQUxFMV9COTNdCT0gezB4MiwgMHg5MywgIDcsIDB9LAotCVtEVkJUX1NDQUxFMV9CQTddCT0gezB4MiwgMHhhNywgIDcsIDB9LAotCVtEVkJUX1NDQUxFMV9CQTldCT0gezB4MiwgMHhhOSwgIDcsIDB9LAotCVtEVkJUX1NDQUxFMV9CQUFdCT0gezB4MiwgMHhhYSwgIDcsIDB9LAotCVtEVkJUX1NDQUxFMV9CQUJdCT0gezB4MiwgMHhhYiwgIDcsIDB9LAotCVtEVkJUX1NDQUxFMV9CQUNdCT0gezB4MiwgMHhhYywgIDcsIDB9LAotCVtEVkJUX1NDQUxFMV9CQjBdCT0gezB4MiwgMHhiMCwgIDcsIDB9LAotCVtEVkJUX1NDQUxFMV9CQjFdCT0gezB4MiwgMHhiMSwgIDcsIDB9LAotCVtEVkJUX0tCX1AxXQkJPSB7MHgxLCAweDY0LCAgMywgMX0sCi0JW0RWQlRfS0JfUDJdCQk9IHsweDEsIDB4NjQsICA2LCA0fSwKLQlbRFZCVF9LQl9QM10JCT0gezB4MSwgMHg2NSwgIDIsIDB9LAotCVtEVkJUX09QVF9BRENfSVFdCT0gezB4MCwgMHg2LCAgIDUsIDR9LAotCVtEVkJUX0FEX0FWSV0JCT0gezB4MCwgMHg5LCAgIDEsIDB9LAotCVtEVkJUX0FEX0FWUV0JCT0gezB4MCwgMHg5LCAgIDMsIDJ9LAotCVtEVkJUX0sxX0NSX1NURVAxMl0JPSB7MHgyLCAweGFkLCAgOSwgNH0sCi0JW0RWQlRfVFJLX0tTX1AyXQk9IHsweDEsIDB4NmYsICAyLCAwfSwKLQlbRFZCVF9UUktfS1NfSTJdCT0gezB4MSwgMHg3MCwgIDUsIDN9LAotCVtEVkJUX1RSX1RIRF9TRVQyXQk9IHsweDEsIDB4NzIsICAzLCAwfSwKLQlbRFZCVF9UUktfS0NfUDJdCT0gezB4MSwgMHg3MywgIDUsIDN9LAotCVtEVkJUX1RSS19LQ19JMl0JPSB7MHgxLCAweDc1LCAgMiwgMH0sCi0JW0RWQlRfQ1JfVEhEX1NFVDJdCT0gezB4MSwgMHg3NiwgIDcsIDZ9LAotCVtEVkJUX1BTRVRfSUZGUkVRXQk9IHsweDEsIDB4MTksIDIxLCAwfSwKLQlbRFZCVF9TUEVDX0lOVl0JCT0gezB4MSwgMHgxNSwgIDAsIDB9LAotCVtEVkJUX1JTQU1QX1JBVElPXQk9IHsweDEsIDB4OWYsIDI3LCAyfSwKLQlbRFZCVF9DRlJFUV9PRkZfUkFUSU9dCT0gezB4MSwgMHg5ZCwgMjMsIDR9LAotCVtEVkJUX0ZTTV9TVEFHRV0JPSB7MHgzLCAweDUxLCAgNiwgM30sCi0JW0RWQlRfUlhfQ09OU1RFTF0JPSB7MHgzLCAweDNjLCAgMywgMn0sCi0JW0RWQlRfUlhfSElFUl0JCT0gezB4MywgMHgzYywgIDYsIDR9LAotCVtEVkJUX1JYX0NfUkFURV9MUF0JPSB7MHgzLCAweDNkLCAgMiwgMH0sCi0JW0RWQlRfUlhfQ19SQVRFX0hQXQk9IHsweDMsIDB4M2QsICA1LCAzfSwKLQlbRFZCVF9HSV9JRFhdCQk9IHsweDMsIDB4NTEsICAxLCAwfSwKLQlbRFZCVF9GRlRfTU9ERV9JRFhdCT0gezB4MywgMHg1MSwgIDIsIDJ9LAotCVtEVkJUX1JTRF9CRVJfRVNUXQk9IHsweDMsIDB4NGUsIDE1LCAwfSwKLQlbRFZCVF9DRV9FU1RfRVZNXQk9IHsweDQsIDB4YywgIDE1LCAwfSwKLQlbRFZCVF9SRl9BR0NfVkFMXQk9IHsweDMsIDB4NWIsIDEzLCAwfSwKLQlbRFZCVF9JRl9BR0NfVkFMXQk9IHsweDMsIDB4NTksIDEzLCAwfSwKLQlbRFZCVF9EQUdDX1ZBTF0JCT0gezB4MywgMHg1LCAgIDcsIDB9LAotCVtEVkJUX1NGUkVRX09GRl0JPSB7MHgzLCAweDE4LCAxMywgMH0sCi0JW0RWQlRfQ0ZSRVFfT0ZGXQk9IHsweDMsIDB4NWYsIDE3LCAwfSwKLQlbRFZCVF9QT0xBUl9SRl9BR0NdCT0gezB4MCwgMHhlLCAgIDEsIDF9LAotCVtEVkJUX1BPTEFSX0lGX0FHQ10JPSB7MHgwLCAweGUsICAgMCwgMH0sCi0JW0RWQlRfQUFHQ19IT0xEXQk9IHsweDEsIDB4NCwgICA1LCA1fSwKLQlbRFZCVF9FTl9SRl9BR0NdCT0gezB4MSwgMHg0LCAgIDYsIDZ9LAotCVtEVkJUX0VOX0lGX0FHQ10JPSB7MHgxLCAweDQsICAgNywgN30sCi0JW0RWQlRfSUZfQUdDX01JTl0JPSB7MHgxLCAweDgsICAgNywgMH0sCi0JW0RWQlRfSUZfQUdDX01BWF0JPSB7MHgxLCAweDksICAgNywgMH0sCi0JW0RWQlRfUkZfQUdDX01JTl0JPSB7MHgxLCAweGEsICAgNywgMH0sCi0JW0RWQlRfUkZfQUdDX01BWF0JPSB7MHgxLCAweGIsICAgNywgMH0sCi0JW0RWQlRfSUZfQUdDX01BTl0JPSB7MHgxLCAweGMsICAgNiwgNn0sCi0JW0RWQlRfSUZfQUdDX01BTl9WQUxdCT0gezB4MSwgMHhjLCAgMTMsIDB9LAotCVtEVkJUX1JGX0FHQ19NQU5dCT0gezB4MSwgMHhlLCAgIDYsIDZ9LAotCVtEVkJUX1JGX0FHQ19NQU5fVkFMXQk9IHsweDEsIDB4ZSwgIDEzLCAwfSwKLQlbRFZCVF9EQUdDX1RSR19WQUxdCT0gezB4MSwgMHgxMiwgIDcsIDB9LAotCVtEVkJUX0FHQ19UQVJHX1ZBTF8wXQk9IHsweDEsIDB4MiwgICAwLCAwfSwKLQlbRFZCVF9BR0NfVEFSR19WQUxfOF8xXQk9IHsweDEsIDB4MywgICA3LCAwfSwKLQlbRFZCVF9BQUdDX0xPT1BfR0FJTl0JPSB7MHgxLCAweGM3LCAgNSwgMX0sCi0JW0RWQlRfTE9PUF9HQUlOMl8zXzBdCT0gezB4MSwgMHg0LCAgIDQsIDF9LAotCVtEVkJUX0xPT1BfR0FJTjJfNF0JPSB7MHgxLCAweDUsICAgNywgN30sCi0JW0RWQlRfTE9PUF9HQUlOM10JPSB7MHgxLCAweGM4LCAgNCwgMH0sCi0JW0RWQlRfVlRPUDFdCQk9IHsweDEsIDB4NiwgICA1LCAwfSwKLQlbRFZCVF9WVE9QMl0JCT0gezB4MSwgMHhjOSwgIDUsIDB9LAotCVtEVkJUX1ZUT1AzXQkJPSB7MHgxLCAweGNhLCAgNSwgMH0sCi0JW0RWQlRfS1JGMV0JCT0gezB4MSwgMHhjYiwgIDcsIDB9LAotCVtEVkJUX0tSRjJdCQk9IHsweDEsIDB4NywgICA3LCAwfSwKLQlbRFZCVF9LUkYzXQkJPSB7MHgxLCAweGNkLCAgNywgMH0sCi0JW0RWQlRfS1JGNF0JCT0gezB4MSwgMHhjZSwgIDcsIDB9LAotCVtEVkJUX0VOX0dJX1BHQV0JPSB7MHgxLCAweGU1LCAgMCwgMH0sCi0JW0RWQlRfVEhEX0xPQ0tfVVBdCT0gezB4MSwgMHhkOSwgIDgsIDB9LAotCVtEVkJUX1RIRF9MT0NLX0RXXQk9IHsweDEsIDB4ZGIsICA4LCAwfSwKLQlbRFZCVF9USERfVVAxXQkJPSB7MHgxLCAweGRkLCAgNywgMH0sCi0JW0RWQlRfVEhEX0RXMV0JCT0gezB4MSwgMHhkZSwgIDcsIDB9LAotCVtEVkJUX0lOVEVSX0NOVF9MRU5dCT0gezB4MSwgMHhkOCwgIDMsIDB9LAotCVtEVkJUX0dJX1BHQV9TVEFURV0JPSB7MHgxLCAweGU2LCAgMywgM30sCi0JW0RWQlRfRU5fQUdDX1BHQV0JPSB7MHgxLCAweGQ3LCAgMCwgMH0sCi0JW0RWQlRfQ0tPVVRQQVJdCQk9IHsweDEsIDB4N2IsICA1LCA1fSwKLQlbRFZCVF9DS09VVF9QV1JdCT0gezB4MSwgMHg3YiwgIDYsIDZ9LAotCVtEVkJUX1NZTkNfRFVSXQkJPSB7MHgxLCAweDdiLCAgNywgN30sCi0JW0RWQlRfRVJSX0RVUl0JCT0gezB4MSwgMHg3YywgIDAsIDB9LAotCVtEVkJUX1NZTkNfTFZMXQkJPSB7MHgxLCAweDdjLCAgMSwgMX0sCi0JW0RWQlRfRVJSX0xWTF0JCT0gezB4MSwgMHg3YywgIDIsIDJ9LAotCVtEVkJUX1ZBTF9MVkxdCQk9IHsweDEsIDB4N2MsICAzLCAzfSwKLQlbRFZCVF9TRVJJQUxdCQk9IHsweDEsIDB4N2MsICA0LCA0fSwKLQlbRFZCVF9TRVJfTFNCXQkJPSB7MHgxLCAweDdjLCAgNSwgNX0sCi0JW0RWQlRfQ0RJVl9QSDBdCQk9IHsweDEsIDB4N2QsICAzLCAwfSwKLQlbRFZCVF9DRElWX1BIMV0JCT0gezB4MSwgMHg3ZCwgIDcsIDR9LAotCVtEVkJUX01QRUdfSU9fT1BUXzJfMl0JPSB7MHgwLCAweDYsICAgNywgN30sCi0JW0RWQlRfTVBFR19JT19PUFRfMV8wXQk9IHsweDAsIDB4NywgICA3LCA2fSwKLQlbRFZCVF9DS09VVFBBUl9QSVBdCT0gezB4MCwgMHhiNywgIDQsIDR9LAotCVtEVkJUX0NLT1VUX1BXUl9QSVBdCT0gezB4MCwgMHhiNywgIDMsIDN9LAotCVtEVkJUX1NZTkNfTFZMX1BJUF0JPSB7MHgwLCAweGI3LCAgMiwgMn0sCi0JW0RWQlRfRVJSX0xWTF9QSVBdCT0gezB4MCwgMHhiNywgIDEsIDF9LAotCVtEVkJUX1ZBTF9MVkxfUElQXQk9IHsweDAsIDB4YjcsICAwLCAwfSwKLQlbRFZCVF9DS09VVFBBUl9QSURdCT0gezB4MCwgMHhiOSwgIDQsIDR9LAotCVtEVkJUX0NLT1VUX1BXUl9QSURdCT0gezB4MCwgMHhiOSwgIDMsIDN9LAotCVtEVkJUX1NZTkNfTFZMX1BJRF0JPSB7MHgwLCAweGI5LCAgMiwgMn0sCi0JW0RWQlRfRVJSX0xWTF9QSURdCT0gezB4MCwgMHhiOSwgIDEsIDF9LAotCVtEVkJUX1ZBTF9MVkxfUElEXQk9IHsweDAsIDB4YjksICAwLCAwfSwKLQlbRFZCVF9TTV9QQVNTXQkJPSB7MHgxLCAweDkzLCAxMSwgMH0sCi0JW0RWQlRfQUQ3X1NFVFRJTkddCT0gezB4MCwgMHgxMSwgMTUsIDB9LAotCVtEVkJUX1JTU0lfUl0JCT0gezB4MywgMHgxLCAgIDYsIDB9LAotCVtEVkJUX0FDSV9ERVRfSU5EXQk9IHsweDMsIDB4MTIsICAwLCAwfSwKLQlbRFZCVF9SRUdfTU9OXQkJPSB7MHgwLCAweGQsICAgMSwgMH0sCi0JW0RWQlRfUkVHX01PTlNFTF0JPSB7MHgwLCAweGQsICAgMiwgMn0sCi0JW0RWQlRfUkVHX0dQRV0JCT0gezB4MCwgMHhkLCAgIDcsIDd9LAotCVtEVkJUX1JFR19HUE9dCQk9IHsweDAsIDB4MTAsICAwLCAwfSwKLQlbRFZCVF9SRUdfNE1TRUxdCT0gezB4MCwgMHgxMywgIDAsIDB9LAorCVtEVkJUX1NPRlRfUlNUXQkJPSB7MHgxMDEsICAyLCAyfSwKKwlbRFZCVF9JSUNfUkVQRUFUXQk9IHsweDEwMSwgIDMsIDN9LAorCVtEVkJUX1RSX1dBSVRfTUlOXzhLXQk9IHsweDE4OCwgMTEsIDJ9LAorCVtEVkJUX1JTRF9CRVJfRkFJTF9WQUxdCT0gezB4MThmLCAxNSwgMH0sCisJW0RWQlRfRU5fQktfVFJLXQk9IHsweDFhNiwgIDcsIDd9LAorCVtEVkJUX0FEX0VOX1JFR10JPSB7MHgwMDgsICA3LCA3fSwKKwlbRFZCVF9BRF9FTl9SRUcxXQk9IHsweDAwOCwgIDYsIDZ9LAorCVtEVkJUX0VOX0JCSU5dCQk9IHsweDFiMSwgIDAsIDB9LAorCVtEVkJUX01HRF9USEQwXQkJPSB7MHgxOTUsICA3LCAwfSwKKwlbRFZCVF9NR0RfVEhEMV0JCT0gezB4MTk2LCAgNywgMH0sCisJW0RWQlRfTUdEX1RIRDJdCQk9IHsweDE5NywgIDcsIDB9LAorCVtEVkJUX01HRF9USEQzXQkJPSB7MHgxOTgsICA3LCAwfSwKKwlbRFZCVF9NR0RfVEhENF0JCT0gezB4MTk5LCAgNywgMH0sCisJW0RWQlRfTUdEX1RIRDVdCQk9IHsweDE5YSwgIDcsIDB9LAorCVtEVkJUX01HRF9USEQ2XQkJPSB7MHgxOWIsICA3LCAwfSwKKwlbRFZCVF9NR0RfVEhEN10JCT0gezB4MTljLCAgNywgMH0sCisJW0RWQlRfRU5fQ0FDUV9OT1RDSF0JPSB7MHgxNjEsICA0LCA0fSwKKwlbRFZCVF9BRF9BVl9SRUZdCT0gezB4MDA5LCAgNiwgMH0sCisJW0RWQlRfUkVHX1BJXQkJPSB7MHgwMGEsICAyLCAwfSwKKwlbRFZCVF9QSVBfT05dCQk9IHsweDAyMSwgIDMsIDN9LAorCVtEVkJUX1NDQUxFMV9COTJdCT0gezB4MjkyLCAgNywgMH0sCisJW0RWQlRfU0NBTEUxX0I5M10JPSB7MHgyOTMsICA3LCAwfSwKKwlbRFZCVF9TQ0FMRTFfQkE3XQk9IHsweDJhNywgIDcsIDB9LAorCVtEVkJUX1NDQUxFMV9CQTldCT0gezB4MmE5LCAgNywgMH0sCisJW0RWQlRfU0NBTEUxX0JBQV0JPSB7MHgyYWEsICA3LCAwfSwKKwlbRFZCVF9TQ0FMRTFfQkFCXQk9IHsweDJhYiwgIDcsIDB9LAorCVtEVkJUX1NDQUxFMV9CQUNdCT0gezB4MmFjLCAgNywgMH0sCisJW0RWQlRfU0NBTEUxX0JCMF0JPSB7MHgyYjAsICA3LCAwfSwKKwlbRFZCVF9TQ0FMRTFfQkIxXQk9IHsweDJiMSwgIDcsIDB9LAorCVtEVkJUX0tCX1AxXQkJPSB7MHgxNjQsICAzLCAxfSwKKwlbRFZCVF9LQl9QMl0JCT0gezB4MTY0LCAgNiwgNH0sCisJW0RWQlRfS0JfUDNdCQk9IHsweDE2NSwgIDIsIDB9LAorCVtEVkJUX09QVF9BRENfSVFdCT0gezB4MDA2LCAgNSwgNH0sCisJW0RWQlRfQURfQVZJXQkJPSB7MHgwMDksICAxLCAwfSwKKwlbRFZCVF9BRF9BVlFdCQk9IHsweDAwOSwgIDMsIDJ9LAorCVtEVkJUX0sxX0NSX1NURVAxMl0JPSB7MHgyYWQsICA5LCA0fSwKKwlbRFZCVF9UUktfS1NfUDJdCT0gezB4MTZmLCAgMiwgMH0sCisJW0RWQlRfVFJLX0tTX0kyXQk9IHsweDE3MCwgIDUsIDN9LAorCVtEVkJUX1RSX1RIRF9TRVQyXQk9IHsweDE3MiwgIDMsIDB9LAorCVtEVkJUX1RSS19LQ19QMl0JPSB7MHgxNzMsICA1LCAzfSwKKwlbRFZCVF9UUktfS0NfSTJdCT0gezB4MTc1LCAgMiwgMH0sCisJW0RWQlRfQ1JfVEhEX1NFVDJdCT0gezB4MTc2LCAgNywgNn0sCisJW0RWQlRfUFNFVF9JRkZSRVFdCT0gezB4MTE5LCAyMSwgMH0sCisJW0RWQlRfU1BFQ19JTlZdCQk9IHsweDExNSwgIDAsIDB9LAorCVtEVkJUX1JTQU1QX1JBVElPXQk9IHsweDE5ZiwgMjcsIDJ9LAorCVtEVkJUX0NGUkVRX09GRl9SQVRJT10JPSB7MHgxOWQsIDIzLCA0fSwKKwlbRFZCVF9GU01fU1RBR0VdCT0gezB4MzUxLCAgNiwgM30sCisJW0RWQlRfUlhfQ09OU1RFTF0JPSB7MHgzM2MsICAzLCAyfSwKKwlbRFZCVF9SWF9ISUVSXQkJPSB7MHgzM2MsICA2LCA0fSwKKwlbRFZCVF9SWF9DX1JBVEVfTFBdCT0gezB4MzNkLCAgMiwgMH0sCisJW0RWQlRfUlhfQ19SQVRFX0hQXQk9IHsweDMzZCwgIDUsIDN9LAorCVtEVkJUX0dJX0lEWF0JCT0gezB4MzUxLCAgMSwgMH0sCisJW0RWQlRfRkZUX01PREVfSURYXQk9IHsweDM1MSwgIDIsIDJ9LAorCVtEVkJUX1JTRF9CRVJfRVNUXQk9IHsweDM0ZSwgMTUsIDB9LAorCVtEVkJUX0NFX0VTVF9FVk1dCT0gezB4NDBjLCAxNSwgMH0sCisJW0RWQlRfUkZfQUdDX1ZBTF0JPSB7MHgzNWIsIDEzLCAwfSwKKwlbRFZCVF9JRl9BR0NfVkFMXQk9IHsweDM1OSwgMTMsIDB9LAorCVtEVkJUX0RBR0NfVkFMXQkJPSB7MHgzMDUsICA3LCAwfSwKKwlbRFZCVF9TRlJFUV9PRkZdCT0gezB4MzE4LCAxMywgMH0sCisJW0RWQlRfQ0ZSRVFfT0ZGXQk9IHsweDM1ZiwgMTcsIDB9LAorCVtEVkJUX1BPTEFSX1JGX0FHQ10JPSB7MHgwMGUsICAxLCAxfSwKKwlbRFZCVF9QT0xBUl9JRl9BR0NdCT0gezB4MDBlLCAgMCwgMH0sCisJW0RWQlRfQUFHQ19IT0xEXQk9IHsweDEwNCwgIDUsIDV9LAorCVtEVkJUX0VOX1JGX0FHQ10JPSB7MHgxMDQsICA2LCA2fSwKKwlbRFZCVF9FTl9JRl9BR0NdCT0gezB4MTA0LCAgNywgN30sCisJW0RWQlRfSUZfQUdDX01JTl0JPSB7MHgxMDgsICA3LCAwfSwKKwlbRFZCVF9JRl9BR0NfTUFYXQk9IHsweDEwOSwgIDcsIDB9LAorCVtEVkJUX1JGX0FHQ19NSU5dCT0gezB4MTBhLCAgNywgMH0sCisJW0RWQlRfUkZfQUdDX01BWF0JPSB7MHgxMGIsICA3LCAwfSwKKwlbRFZCVF9JRl9BR0NfTUFOXQk9IHsweDEwYywgIDYsIDZ9LAorCVtEVkJUX0lGX0FHQ19NQU5fVkFMXQk9IHsweDEwYywgMTMsIDB9LAorCVtEVkJUX1JGX0FHQ19NQU5dCT0gezB4MTBlLCAgNiwgNn0sCisJW0RWQlRfUkZfQUdDX01BTl9WQUxdCT0gezB4MTBlLCAxMywgMH0sCisJW0RWQlRfREFHQ19UUkdfVkFMXQk9IHsweDExMiwgIDcsIDB9LAorCVtEVkJUX0FHQ19UQVJHX1ZBTF8wXQk9IHsweDEwMiwgIDAsIDB9LAorCVtEVkJUX0FHQ19UQVJHX1ZBTF84XzFdCT0gezB4MTAzLCAgNywgMH0sCisJW0RWQlRfQUFHQ19MT09QX0dBSU5dCT0gezB4MWM3LCAgNSwgMX0sCisJW0RWQlRfTE9PUF9HQUlOMl8zXzBdCT0gezB4MTA0LCAgNCwgMX0sCisJW0RWQlRfTE9PUF9HQUlOMl80XQk9IHsweDEwNSwgIDcsIDd9LAorCVtEVkJUX0xPT1BfR0FJTjNdCT0gezB4MWM4LCAgNCwgMH0sCisJW0RWQlRfVlRPUDFdCQk9IHsweDEwNiwgIDUsIDB9LAorCVtEVkJUX1ZUT1AyXQkJPSB7MHgxYzksICA1LCAwfSwKKwlbRFZCVF9WVE9QM10JCT0gezB4MWNhLCAgNSwgMH0sCisJW0RWQlRfS1JGMV0JCT0gezB4MWNiLCAgNywgMH0sCisJW0RWQlRfS1JGMl0JCT0gezB4MTA3LCAgNywgMH0sCisJW0RWQlRfS1JGM10JCT0gezB4MWNkLCAgNywgMH0sCisJW0RWQlRfS1JGNF0JCT0gezB4MWNlLCAgNywgMH0sCisJW0RWQlRfRU5fR0lfUEdBXQk9IHsweDFlNSwgIDAsIDB9LAorCVtEVkJUX1RIRF9MT0NLX1VQXQk9IHsweDFkOSwgIDgsIDB9LAorCVtEVkJUX1RIRF9MT0NLX0RXXQk9IHsweDFkYiwgIDgsIDB9LAorCVtEVkJUX1RIRF9VUDFdCQk9IHsweDFkZCwgIDcsIDB9LAorCVtEVkJUX1RIRF9EVzFdCQk9IHsweDFkZSwgIDcsIDB9LAorCVtEVkJUX0lOVEVSX0NOVF9MRU5dCT0gezB4MWQ4LCAgMywgMH0sCisJW0RWQlRfR0lfUEdBX1NUQVRFXQk9IHsweDFlNiwgIDMsIDN9LAorCVtEVkJUX0VOX0FHQ19QR0FdCT0gezB4MWQ3LCAgMCwgMH0sCisJW0RWQlRfQ0tPVVRQQVJdCQk9IHsweDE3YiwgIDUsIDV9LAorCVtEVkJUX0NLT1VUX1BXUl0JPSB7MHgxN2IsICA2LCA2fSwKKwlbRFZCVF9TWU5DX0RVUl0JCT0gezB4MTdiLCAgNywgN30sCisJW0RWQlRfRVJSX0RVUl0JCT0gezB4MTdjLCAgMCwgMH0sCisJW0RWQlRfU1lOQ19MVkxdCQk9IHsweDE3YywgIDEsIDF9LAorCVtEVkJUX0VSUl9MVkxdCQk9IHsweDE3YywgIDIsIDJ9LAorCVtEVkJUX1ZBTF9MVkxdCQk9IHsweDE3YywgIDMsIDN9LAorCVtEVkJUX1NFUklBTF0JCT0gezB4MTdjLCAgNCwgNH0sCisJW0RWQlRfU0VSX0xTQl0JCT0gezB4MTdjLCAgNSwgNX0sCisJW0RWQlRfQ0RJVl9QSDBdCQk9IHsweDE3ZCwgIDMsIDB9LAorCVtEVkJUX0NESVZfUEgxXQkJPSB7MHgxN2QsICA3LCA0fSwKKwlbRFZCVF9NUEVHX0lPX09QVF8yXzJdCT0gezB4MDA2LCAgNywgN30sCisJW0RWQlRfTVBFR19JT19PUFRfMV8wXQk9IHsweDAwNywgIDcsIDZ9LAorCVtEVkJUX0NLT1VUUEFSX1BJUF0JPSB7MHgwYjcsICA0LCA0fSwKKwlbRFZCVF9DS09VVF9QV1JfUElQXQk9IHsweDBiNywgIDMsIDN9LAorCVtEVkJUX1NZTkNfTFZMX1BJUF0JPSB7MHgwYjcsICAyLCAyfSwKKwlbRFZCVF9FUlJfTFZMX1BJUF0JPSB7MHgwYjcsICAxLCAxfSwKKwlbRFZCVF9WQUxfTFZMX1BJUF0JPSB7MHgwYjcsICAwLCAwfSwKKwlbRFZCVF9DS09VVFBBUl9QSURdCT0gezB4MGI5LCAgNCwgNH0sCisJW0RWQlRfQ0tPVVRfUFdSX1BJRF0JPSB7MHgwYjksICAzLCAzfSwKKwlbRFZCVF9TWU5DX0xWTF9QSURdCT0gezB4MGI5LCAgMiwgMn0sCisJW0RWQlRfRVJSX0xWTF9QSURdCT0gezB4MGI5LCAgMSwgMX0sCisJW0RWQlRfVkFMX0xWTF9QSURdCT0gezB4MGI5LCAgMCwgMH0sCisJW0RWQlRfU01fUEFTU10JCT0gezB4MTkzLCAxMSwgMH0sCisJW0RWQlRfQUQ3X1NFVFRJTkddCT0gezB4MDExLCAxNSwgMH0sCisJW0RWQlRfUlNTSV9SXQkJPSB7MHgzMDEsICA2LCAwfSwKKwlbRFZCVF9BQ0lfREVUX0lORF0JPSB7MHgzMTIsICAwLCAwfSwKKwlbRFZCVF9SRUdfTU9OXQkJPSB7MHgwMGQsICAxLCAwfSwKKwlbRFZCVF9SRUdfTU9OU0VMXQk9IHsweDAwZCwgIDIsIDJ9LAorCVtEVkJUX1JFR19HUEVdCQk9IHsweDAwZCwgIDcsIDd9LAorCVtEVkJUX1JFR19HUE9dCQk9IHsweDAxMCwgIDAsIDB9LAorCVtEVkJUX1JFR180TVNFTF0JPSB7MHgwMTMsICAwLCAwfSwKIH07CiAKLS8qIHdyaXRlIG11bHRpcGxlIGhhcmR3YXJlIHJlZ2lzdGVycyAqLwotc3RhdGljIGludCBydGwyODMyX3dyKHN0cnVjdCBydGwyODMyX3ByaXYgKnByaXYsIHU4IHJlZywgdTggKnZhbCwgaW50IGxlbikKKy8qIE91ciByZWdtYXAgaXMgYnlwYXNzaW5nIEkyQyBhZGFwdGVyIGxvY2ssIHRodXMgd2UgZG8gaXQhICovCitzdGF0aWMgaW50IHJ0bDI4MzJfYnVsa193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJICAgICAgY29uc3Qgdm9pZCAqdmFsLCBzaXplX3QgdmFsX2NvdW50KQogeworCXN0cnVjdCBydGwyODMyX2RldiAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHJldDsKLQl1OCBidWZbTUFYX1hGRVJfU0laRV07Ci0Jc3RydWN0IGkyY19tc2cgbXNnWzFdID0gewotCQl7Ci0JCQkuYWRkciA9IHByaXYtPmNmZy5pMmNfYWRkciwKLQkJCS5mbGFncyA9IDAsCi0JCQkubGVuID0gMSArIGxlbiwKLQkJCS5idWYgPSBidWYsCi0JCX0KLQl9OwogCi0JaWYgKDEgKyBsZW4gPiBzaXplb2YoYnVmKSkgewotCQlkZXZfd2FybigmcHJpdi0+aTJjLT5kZXYsCi0JCQkgIiVzOiBpMmMgd3IgcmVnPSUwNHg6IGxlbj0lZCBpcyB0b28gYmlnIVxuIiwKLQkJCSBLQlVJTERfTU9ETkFNRSwgcmVnLCBsZW4pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlidWZbMF0gPSByZWc7Ci0JbWVtY3B5KCZidWZbMV0sIHZhbCwgbGVuKTsKLQotCXJldCA9IGkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcHRlciwgbXNnLCAxKTsKLQlpZiAocmV0ID09IDEpIHsKLQkJcmV0ID0gMDsKLQl9IGVsc2UgewotCQlkZXZfd2FybigmcHJpdi0+aTJjLT5kZXYsCi0JCQkJIiVzOiBpMmMgd3IgZmFpbGVkPSVkIHJlZz0lMDJ4IGxlbj0lZFxuIiwKLQkJCQlLQlVJTERfTU9ETkFNRSwgcmV0LCByZWcsIGxlbik7Ci0JCXJldCA9IC1FUkVNT1RFSU87Ci0JfQorCWkyY19sb2NrX2FkYXB0ZXIoY2xpZW50LT5hZGFwdGVyKTsKKwlyZXQgPSByZWdtYXBfYnVsa193cml0ZShkZXYtPnJlZ21hcCwgcmVnLCB2YWwsIHZhbF9jb3VudCk7CisJaTJjX3VubG9ja19hZGFwdGVyKGNsaWVudC0+YWRhcHRlcik7CiAJcmV0dXJuIHJldDsKIH0KIAotLyogcmVhZCBtdWx0aXBsZSBoYXJkd2FyZSByZWdpc3RlcnMgKi8KLXN0YXRpYyBpbnQgcnRsMjgzMl9yZChzdHJ1Y3QgcnRsMjgzMl9wcml2ICpwcml2LCB1OCByZWcsIHU4ICp2YWwsIGludCBsZW4pCitzdGF0aWMgaW50IHJ0bDI4MzJfdXBkYXRlX2JpdHMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IHJlZywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHZhbCkKIHsKKwlzdHJ1Y3QgcnRsMjgzMl9kZXYgKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCByZXQ7Ci0Jc3RydWN0IGkyY19tc2cgbXNnWzJdID0gewotCQl7Ci0JCQkuYWRkciA9IHByaXYtPmNmZy5pMmNfYWRkciwKLQkJCS5mbGFncyA9IDAsCi0JCQkubGVuID0gMSwKLQkJCS5idWYgPSAmcmVnLAotCQl9LCB7Ci0JCQkuYWRkciA9IHByaXYtPmNmZy5pMmNfYWRkciwKLQkJCS5mbGFncyA9IEkyQ19NX1JELAotCQkJLmxlbiA9IGxlbiwKLQkJCS5idWYgPSB2YWwsCi0JCX0KLQl9OwogCi0JcmV0ID0gaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwdGVyLCBtc2csIDIpOwotCWlmIChyZXQgPT0gMikgewotCQlyZXQgPSAwOwotCX0gZWxzZSB7Ci0JCWRldl93YXJuKCZwcml2LT5pMmMtPmRldiwKLQkJCQkiJXM6IGkyYyByZCBmYWlsZWQ9JWQgcmVnPSUwMnggbGVuPSVkXG4iLAotCQkJCUtCVUlMRF9NT0ROQU1FLCByZXQsIHJlZywgbGVuKTsKLQkJcmV0ID0gLUVSRU1PVEVJTzsKLQl9CisJaTJjX2xvY2tfYWRhcHRlcihjbGllbnQtPmFkYXB0ZXIpOworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhkZXYtPnJlZ21hcCwgcmVnLCBtYXNrLCB2YWwpOworCWkyY191bmxvY2tfYWRhcHRlcihjbGllbnQtPmFkYXB0ZXIpOwogCXJldHVybiByZXQ7CiB9CiAKLS8qIHdyaXRlIG11bHRpcGxlIHJlZ2lzdGVycyAqLwotc3RhdGljIGludCBydGwyODMyX3dyX3JlZ3Moc3RydWN0IHJ0bDI4MzJfcHJpdiAqcHJpdiwgdTggcmVnLCB1OCBwYWdlLCB1OCAqdmFsLAotCWludCBsZW4pCitzdGF0aWMgaW50IHJ0bDI4MzJfYnVsa19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCByZWcsCisJCQkgICAgIHZvaWQgKnZhbCwgc2l6ZV90IHZhbF9jb3VudCkKIHsKKwlzdHJ1Y3QgcnRsMjgzMl9kZXYgKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCByZXQ7CiAKLQkvKiBzd2l0Y2ggYmFuayBpZiBuZWVkZWQgKi8KLQlpZiAocGFnZSAhPSBwcml2LT5wYWdlKSB7Ci0JCXJldCA9IHJ0bDI4MzJfd3IocHJpdiwgMHgwMCwgJnBhZ2UsIDEpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQotCQlwcml2LT5wYWdlID0gcGFnZTsKKwlpMmNfbG9ja19hZGFwdGVyKGNsaWVudC0+YWRhcHRlcik7CisJcmV0ID0gcmVnbWFwX2J1bGtfcmVhZChkZXYtPnJlZ21hcCwgcmVnLCB2YWwsIHZhbF9jb3VudCk7CisJaTJjX3VubG9ja19hZGFwdGVyKGNsaWVudC0+YWRhcHRlcik7CisJcmV0dXJuIHJldDsKIH0KIAotcmV0dXJuIHJ0bDI4MzJfd3IocHJpdiwgcmVnLCB2YWwsIGxlbik7Ci19Ci0KLS8qIHJlYWQgbXVsdGlwbGUgcmVnaXN0ZXJzICovCi1zdGF0aWMgaW50IHJ0bDI4MzJfcmRfcmVncyhzdHJ1Y3QgcnRsMjgzMl9wcml2ICpwcml2LCB1OCByZWcsIHU4IHBhZ2UsIHU4ICp2YWwsCi0JaW50IGxlbikKK3N0YXRpYyBpbnQgcnRsMjgzMl9yZF9kZW1vZF9yZWcoc3RydWN0IHJ0bDI4MzJfZGV2ICpkZXYsIGludCByZWcsIHUzMiAqdmFsKQogewotCWludCByZXQ7Ci0KLQkvKiBzd2l0Y2ggYmFuayBpZiBuZWVkZWQgKi8KLQlpZiAocGFnZSAhPSBwcml2LT5wYWdlKSB7Ci0JCXJldCA9IHJ0bDI4MzJfd3IocHJpdiwgMHgwMCwgJnBhZ2UsIDEpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQotCQlwcml2LT5wYWdlID0gcGFnZTsKLQl9Ci0KLQlyZXR1cm4gcnRsMjgzMl9yZChwcml2LCByZWcsIHZhbCwgbGVuKTsKLX0KLQotLyogd3JpdGUgc2luZ2xlIHJlZ2lzdGVyICovCi1zdGF0aWMgaW50IHJ0bDI4MzJfd3JfcmVnKHN0cnVjdCBydGwyODMyX3ByaXYgKnByaXYsIHU4IHJlZywgdTggcGFnZSwgdTggdmFsKQotewotCXJldHVybiBydGwyODMyX3dyX3JlZ3MocHJpdiwgcmVnLCBwYWdlLCAmdmFsLCAxKTsKLX0KLQotLyogcmVhZCBzaW5nbGUgcmVnaXN0ZXIgKi8KLXN0YXRpYyBpbnQgcnRsMjgzMl9yZF9yZWcoc3RydWN0IHJ0bDI4MzJfcHJpdiAqcHJpdiwgdTggcmVnLCB1OCBwYWdlLCB1OCAqdmFsKQotewotCXJldHVybiBydGwyODMyX3JkX3JlZ3MocHJpdiwgcmVnLCBwYWdlLCB2YWwsIDEpOwotfQotCi1zdGF0aWMgaW50IHJ0bDI4MzJfcmRfZGVtb2RfcmVnKHN0cnVjdCBydGwyODMyX3ByaXYgKnByaXYsIGludCByZWcsIHUzMiAqdmFsKQotewotCWludCByZXQ7Ci0KLQl1OCByZWdfc3RhcnRfYWRkcjsKLQl1OCBtc2IsIGxzYjsKLQl1OCBwYWdlOwotCXU4IHJlYWRpbmdbNF07Ci0JdTMyIHJlYWRpbmdfdG1wOwotCWludCBpOwotCi0JdTggbGVuOwotCXUzMiBtYXNrOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkZXYtPmNsaWVudDsKKwlpbnQgcmV0LCBpOworCXUxNiByZWdfc3RhcnRfYWRkcjsKKwl1OCBtc2IsIGxzYiwgcmVhZGluZ1s0XSwgbGVuOworCXUzMiByZWFkaW5nX3RtcCwgbWFzazsKIAogCXJlZ19zdGFydF9hZGRyID0gcmVnaXN0ZXJzW3JlZ10uc3RhcnRfYWRkcmVzczsKIAltc2IgPSByZWdpc3RlcnNbcmVnXS5tc2I7CiAJbHNiID0gcmVnaXN0ZXJzW3JlZ10ubHNiOwotCXBhZ2UgPSByZWdpc3RlcnNbcmVnXS5wYWdlOwotCiAJbGVuID0gKG1zYiA+PiAzKSArIDE7CiAJbWFzayA9IFJFR19NQVNLKG1zYiAtIGxzYik7CiAKLQlyZXQgPSBydGwyODMyX3JkX3JlZ3MocHJpdiwgcmVnX3N0YXJ0X2FkZHIsIHBhZ2UsICZyZWFkaW5nWzBdLCBsZW4pOworCXJldCA9IHJ0bDI4MzJfYnVsa19yZWFkKGNsaWVudCwgcmVnX3N0YXJ0X2FkZHIsIHJlYWRpbmcsIGxlbik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTMwMiw0MCArMjE0LDI3IEBACiAKIAkqdmFsID0gKHJlYWRpbmdfdG1wID4+IGxzYikgJiBtYXNrOwogCi0JcmV0dXJuIHJldDsKLQorCXJldHVybiAwOwogZXJyOgotCWRldl9kYmcoJnByaXYtPmkyYy0+ZGV2LCAiJXM6IGZhaWxlZD0lZFxuIiwgX19mdW5jX18sIHJldCk7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKLQogfQogCi1zdGF0aWMgaW50IHJ0bDI4MzJfd3JfZGVtb2RfcmVnKHN0cnVjdCBydGwyODMyX3ByaXYgKnByaXYsIGludCByZWcsIHUzMiB2YWwpCitzdGF0aWMgaW50IHJ0bDI4MzJfd3JfZGVtb2RfcmVnKHN0cnVjdCBydGwyODMyX2RldiAqZGV2LCBpbnQgcmVnLCB1MzIgdmFsKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkZXYtPmNsaWVudDsKIAlpbnQgcmV0LCBpOwotCXU4IGxlbjsKLQl1OCByZWdfc3RhcnRfYWRkcjsKLQl1OCBtc2IsIGxzYjsKLQl1OCBwYWdlOwotCXUzMiBtYXNrOwotCi0KLQl1OCByZWFkaW5nWzRdOwotCXU4IHdyaXRpbmdbNF07Ci0JdTMyIHJlYWRpbmdfdG1wOwotCXUzMiB3cml0aW5nX3RtcDsKLQorCXUxNiByZWdfc3RhcnRfYWRkcjsKKwl1OCBtc2IsIGxzYiwgcmVhZGluZ1s0XSwgd3JpdGluZ1s0XSwgbGVuOworCXUzMiByZWFkaW5nX3RtcCwgd3JpdGluZ190bXAsIG1hc2s7CiAKIAlyZWdfc3RhcnRfYWRkciA9IHJlZ2lzdGVyc1tyZWddLnN0YXJ0X2FkZHJlc3M7CiAJbXNiID0gcmVnaXN0ZXJzW3JlZ10ubXNiOwogCWxzYiA9IHJlZ2lzdGVyc1tyZWddLmxzYjsKLQlwYWdlID0gcmVnaXN0ZXJzW3JlZ10ucGFnZTsKLQogCWxlbiA9IChtc2IgPj4gMykgKyAxOwogCW1hc2sgPSBSRUdfTUFTSyhtc2IgLSBsc2IpOwogCi0KLQlyZXQgPSBydGwyODMyX3JkX3JlZ3MocHJpdiwgcmVnX3N0YXJ0X2FkZHIsIHBhZ2UsICZyZWFkaW5nWzBdLCBsZW4pOworCXJldCA9IHJ0bDI4MzJfYnVsa19yZWFkKGNsaWVudCwgcmVnX3N0YXJ0X2FkZHIsIHJlYWRpbmcsIGxlbik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTM0Niw0OSArMjQ1LDIzIEBACiAJd3JpdGluZ190bXAgPSByZWFkaW5nX3RtcCAmIH4obWFzayA8PCBsc2IpOwogCXdyaXRpbmdfdG1wIHw9ICgodmFsICYgbWFzaykgPDwgbHNiKTsKIAotCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQogCQl3cml0aW5nW2ldID0gKHdyaXRpbmdfdG1wID4+ICgobGVuIC0gMSAtIGkpICogOCkpICYgMHhmZjsKIAotCXJldCA9IHJ0bDI4MzJfd3JfcmVncyhwcml2LCByZWdfc3RhcnRfYWRkciwgcGFnZSwgJndyaXRpbmdbMF0sIGxlbik7CisJcmV0ID0gcnRsMjgzMl9idWxrX3dyaXRlKGNsaWVudCwgcmVnX3N0YXJ0X2FkZHIsIHdyaXRpbmcsIGxlbik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXR1cm4gcmV0OwotCisJcmV0dXJuIDA7CiBlcnI6Ci0JZGV2X2RiZygmcHJpdi0+aTJjLT5kZXYsICIlczogZmFpbGVkPSVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKLQlyZXR1cm4gcmV0OwotCi19Ci0KLXN0YXRpYyBpbnQgcnRsMjgzMl9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgZW5hYmxlKQotewotCWludCByZXQ7Ci0Jc3RydWN0IHJ0bDI4MzJfcHJpdiAqcHJpdiA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCi0JZGV2X2RiZygmcHJpdi0+aTJjLT5kZXYsICIlczogZW5hYmxlPSVkXG4iLCBfX2Z1bmNfXywgZW5hYmxlKTsKLQotCS8qIGdhdGUgYWxyZWFkeSBvcGVuIG9yIGNsb3NlICovCi0JaWYgKHByaXYtPmkyY19nYXRlX3N0YXRlID09IGVuYWJsZSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXQgPSBydGwyODMyX3dyX2RlbW9kX3JlZyhwcml2LCBEVkJUX0lJQ19SRVBFQVQsIChlbmFibGUgPyAweDEgOiAweDApKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCXByaXYtPmkyY19nYXRlX3N0YXRlID0gZW5hYmxlOwotCi0JcmV0dXJuIHJldDsKLWVycjoKLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKLQogc3RhdGljIGludCBydGwyODMyX3NldF9pZihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIGlmX2ZyZXEpCiB7Ci0Jc3RydWN0IHJ0bDI4MzJfcHJpdiAqcHJpdiA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBydGwyODMyX2RldiAqZGV2ID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRldi0+Y2xpZW50OwogCWludCByZXQ7CiAJdTY0IHBzZXRfaWZmcmVxOwogCXU4IGVuX2JiaW4gPSAoaWZfZnJlcSA9PSAwID8gMHgxIDogMHgwKTsKQEAgLTM5NywzMCArMjcwLDM1IEBACiAJKiBQU0VUX0lGRlJFUSA9IC0gZmxvb3IoKElmRnJlcUh6ICUgQ3J5c3RhbEZyZXFIeikgKiBwb3coMiwgMjIpCiAJKgkJLyBDcnlzdGFsRnJlcUh6KQogCSovCi0KLQlwc2V0X2lmZnJlcSA9IGlmX2ZyZXEgJSBwcml2LT5jZmcueHRhbDsKKwlwc2V0X2lmZnJlcSA9IGlmX2ZyZXEgJSBkZXYtPnBkYXRhLT5jbGs7CiAJcHNldF9pZmZyZXEgKj0gMHg0MDAwMDA7Ci0JcHNldF9pZmZyZXEgPSBkaXZfdTY0KHBzZXRfaWZmcmVxLCBwcml2LT5jZmcueHRhbCk7CisJcHNldF9pZmZyZXEgPSBkaXZfdTY0KHBzZXRfaWZmcmVxLCBkZXYtPnBkYXRhLT5jbGspOwogCXBzZXRfaWZmcmVxID0gLXBzZXRfaWZmcmVxOwogCXBzZXRfaWZmcmVxID0gcHNldF9pZmZyZXEgJiAweDNmZmZmZjsKLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwgIiVzOiBpZl9mcmVxdWVuY3k9JWQgcHNldF9pZmZyZXE9JTA4eFxuIiwKLQkJCV9fZnVuY19fLCBpZl9mcmVxLCAodW5zaWduZWQpcHNldF9pZmZyZXEpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiaWZfZnJlcXVlbmN5PSVkIHBzZXRfaWZmcmVxPSUwOHhcbiIsCisJCWlmX2ZyZXEsICh1bnNpZ25lZClwc2V0X2lmZnJlcSk7CiAKLQlyZXQgPSBydGwyODMyX3dyX2RlbW9kX3JlZyhwcml2LCBEVkJUX0VOX0JCSU4sIGVuX2JiaW4pOworCXJldCA9IHJ0bDI4MzJfd3JfZGVtb2RfcmVnKGRldiwgRFZCVF9FTl9CQklOLCBlbl9iYmluKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycjsKIAotCXJldCA9IHJ0bDI4MzJfd3JfZGVtb2RfcmVnKHByaXYsIERWQlRfUFNFVF9JRkZSRVEsIHBzZXRfaWZmcmVxKTsKKwlyZXQgPSBydGwyODMyX3dyX2RlbW9kX3JlZyhkZXYsIERWQlRfUFNFVF9JRkZSRVEsIHBzZXRfaWZmcmVxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKIAorCXJldHVybiAwOworZXJyOgorCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcnRsMjgzMl9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBydGwyODMyX3ByaXYgKnByaXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgcnRsMjgzMl9kZXYgKmRldiA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkZXYtPmNsaWVudDsKKwlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZGV2LT5mZS5kdHZfcHJvcGVydHlfY2FjaGU7CiAJY29uc3Qgc3RydWN0IHJ0bDI4MzJfcmVnX3ZhbHVlICppbml0OwogCWludCBpLCByZXQsIGxlbjsKLQogCS8qIGluaXRpYWxpemF0aW9uIHZhbHVlcyBmb3IgdGhlIGRlbW9kdWxhdG9yIHJlZ2lzdGVycyAqLwogCXN0cnVjdCBydGwyODMyX3JlZ192YWx1ZSBydGwyODMyX2luaXRpYWxfcmVnc1tdID0gewogCQl7RFZCVF9BRF9FTl9SRUcsCQkweDF9LApAQCAtNDY3LDE5ICszNDUsMTkgQEAKIAkJe0RWQlRfQ1JfVEhEX1NFVDIsCQkweDF9LAogCX07CiAKLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwgIiVzOlxuIiwgX19mdW5jX18pOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJ0bDI4MzJfaW5pdGlhbF9yZWdzKTsgaSsrKSB7Ci0JCXJldCA9IHJ0bDI4MzJfd3JfZGVtb2RfcmVnKHByaXYsIHJ0bDI4MzJfaW5pdGlhbF9yZWdzW2ldLnJlZywKKwkJcmV0ID0gcnRsMjgzMl93cl9kZW1vZF9yZWcoZGV2LCBydGwyODMyX2luaXRpYWxfcmVnc1tpXS5yZWcsCiAJCQlydGwyODMyX2luaXRpYWxfcmVnc1tpXS52YWx1ZSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAl9CiAKIAkvKiBsb2FkIHR1bmVyIHNwZWNpZmljIHNldHRpbmdzICovCi0JZGV2X2RiZygmcHJpdi0+aTJjLT5kZXYsICIlczogbG9hZCBzZXR0aW5ncyBmb3IgdHVuZXI9JTAyeFxuIiwKLQkJCV9fZnVuY19fLCBwcml2LT5jZmcudHVuZXIpOwotCXN3aXRjaCAocHJpdi0+Y2ZnLnR1bmVyKSB7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJsb2FkIHNldHRpbmdzIGZvciB0dW5lcj0lMDJ4XG4iLAorCQlkZXYtPnBkYXRhLT50dW5lcik7CisJc3dpdGNoIChkZXYtPnBkYXRhLT50dW5lcikgewogCWNhc2UgUlRMMjgzMl9UVU5FUl9GQzAwMTI6CiAJY2FzZSBSVEwyODMyX1RVTkVSX0ZDMDAxMzoKIAkJbGVuID0gQVJSQVlfU0laRShydGwyODMyX3R1bmVyX2luaXRfZmMwMDEyKTsKQEAgLTUwNCw1MSArMzgyLDYwIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCXJldCA9IHJ0bDI4MzJfd3JfZGVtb2RfcmVnKHByaXYsIGluaXRbaV0ucmVnLCBpbml0W2ldLnZhbHVlKTsKKwkJcmV0ID0gcnRsMjgzMl93cl9kZW1vZF9yZWcoZGV2LCBpbml0W2ldLnJlZywgaW5pdFtpXS52YWx1ZSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAl9CiAKLQkvKgotCSAqIHI4MjB0IE5JTSBjb2RlIGRvZXMgYSBzb2Z0d2FyZSByZXNldCBoZXJlIGF0IHRoZSBkZW1vZCAtCi0JICogbWF5IG5vdCBiZSBuZWVkZWQsIGFzIHRoZXJlJ3MgYWxyZWFkeSBhIHNvZnR3YXJlIHJlc2V0IGF0Ci0JICogc2V0X3BhcmFtcygpCi0JICovCi0jaWYgMQotCS8qIHNvZnQgcmVzZXQgKi8KLQlyZXQgPSBydGwyODMyX3dyX2RlbW9kX3JlZyhwcml2LCBEVkJUX1NPRlRfUlNULCAweDEpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOworCS8qIGluaXQgc3RhdHMgaGVyZSBpbiBvcmRlciBzaWduYWwgYXBwIHdoaWNoIHN0YXRzIGFyZSBzdXBwb3J0ZWQgKi8KKwljLT5zdHJlbmd0aC5sZW4gPSAxOworCWMtPnN0cmVuZ3RoLnN0YXRbMF0uc2NhbGUgPSBGRV9TQ0FMRV9OT1RfQVZBSUxBQkxFOworCWMtPmNuci5sZW4gPSAxOworCWMtPmNuci5zdGF0WzBdLnNjYWxlID0gRkVfU0NBTEVfTk9UX0FWQUlMQUJMRTsKKwljLT5wb3N0X2JpdF9lcnJvci5sZW4gPSAxOworCWMtPnBvc3RfYml0X2Vycm9yLnN0YXRbMF0uc2NhbGUgPSBGRV9TQ0FMRV9OT1RfQVZBSUxBQkxFOworCWMtPnBvc3RfYml0X2NvdW50LmxlbiA9IDE7CisJYy0+cG9zdF9iaXRfY291bnQuc3RhdFswXS5zY2FsZSA9IEZFX1NDQUxFX05PVF9BVkFJTEFCTEU7CisJLyogc3RhcnQgc3RhdGlzdGljcyBwb2xsaW5nICovCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPnN0YXRfd29yaywgbXNlY3NfdG9famlmZmllcygyMDAwKSk7CisJZGV2LT5zbGVlcGluZyA9IGZhbHNlOwogCi0JcmV0ID0gcnRsMjgzMl93cl9kZW1vZF9yZWcocHJpdiwgRFZCVF9TT0ZUX1JTVCwgMHgwKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLSNlbmRpZgotCi0JcHJpdi0+c2xlZXBpbmcgPSBmYWxzZTsKLQotCXJldHVybiByZXQ7Ci0KKwlyZXR1cm4gMDsKIGVycjoKLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcnRsMjgzMl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgcnRsMjgzMl9wcml2ICpwcml2ID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHJ0bDI4MzJfZGV2ICpkZXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGV2LT5jbGllbnQ7CisJaW50IHJldDsKIAotCWRldl9kYmcoJnByaXYtPmkyYy0+ZGV2LCAiJXM6XG4iLCBfX2Z1bmNfXyk7Ci0JcHJpdi0+c2xlZXBpbmcgPSB0cnVlOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXG4iKTsKKworCWRldi0+c2xlZXBpbmcgPSB0cnVlOworCS8qIHN0b3Agc3RhdGlzdGljcyBwb2xsaW5nICovCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZXYtPnN0YXRfd29yayk7CisJZGV2LT5mZV9zdGF0dXMgPSAwOworCisJcmV0ID0gcnRsMjgzMl93cl9kZW1vZF9yZWcoZGV2LCBEVkJUX1NPRlRfUlNULCAweDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCiAJcmV0dXJuIDA7CitlcnI6CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBydGwyODMyX2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCXN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyAqcykKIHsKLQlzdHJ1Y3QgcnRsMjgzMl9wcml2ICpwcml2ID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHJ0bDI4MzJfZGV2ICpkZXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGV2LT5jbGllbnQ7CiAKLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwgIiVzOlxuIiwgX19mdW5jX18pOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXG4iKTsKIAlzLT5taW5fZGVsYXlfbXMgPSAxMDAwOwogCXMtPnN0ZXBfc2l6ZSA9IGZlLT5vcHMuaW5mby5mcmVxdWVuY3lfc3RlcHNpemUgKiAyOwogCXMtPm1heF9kcmlmdCA9IChmZS0+b3BzLmluZm8uZnJlcXVlbmN5X3N0ZXBzaXplICogMikgKyAxOwpAQCAtNTU3LDcgKzQ0NCw4IEBACiAKIHN0YXRpYyBpbnQgcnRsMjgzMl9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IHJ0bDI4MzJfcHJpdiAqcHJpdiA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBydGwyODMyX2RldiAqZGV2ID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRldi0+Y2xpZW50OwogCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwogCWludCByZXQsIGksIGo7CiAJdTY0IGJ3X21vZGUsIG51bSwgbnVtMjsKQEAgLTU4OCwxNyArNDc2LDE1IEBACiAJCX0sCiAJfTsKIAotCi0JZGV2X2RiZygmcHJpdi0+aTJjLT5kZXYsCi0JCQkiJXM6IGZyZXF1ZW5jeT0lZCBiYW5kd2lkdGhfaHo9JWQgaW52ZXJzaW9uPSVkXG4iLAotCQkJX19mdW5jX18sIGMtPmZyZXF1ZW5jeSwgYy0+YmFuZHdpZHRoX2h6LCBjLT5pbnZlcnNpb24pOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZnJlcXVlbmN5PSV1IGJhbmR3aWR0aF9oej0ldSBpbnZlcnNpb249JXVcbiIsCisJCWMtPmZyZXF1ZW5jeSwgYy0+YmFuZHdpZHRoX2h6LCBjLT5pbnZlcnNpb24pOwogCiAJLyogcHJvZ3JhbSB0dW5lciAqLwogCWlmIChmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKQogCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKGZlKTsKIAogCS8qIFBJUCBtb2RlIHJlbGF0ZWQgKi8KLQlyZXQgPSBydGwyODMyX3dyX3JlZ3MocHJpdiwgMHg5MiwgMSwgIlx4MDBceDBmXHhmZiIsIDMpOworCXJldCA9IHJ0bDI4MzJfYnVsa193cml0ZShjbGllbnQsIDB4MTkyLCAiXHgwMFx4MGZceGZmIiwgMyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTYyOSwxMiArNTE1LDE0IEBACiAJCWJ3X21vZGUgPSA2NDAwMDAwMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2RiZygmcHJpdi0+aTJjLT5kZXYsICIlczogaW52YWxpZCBiYW5kd2lkdGhcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiaW52YWxpZCBiYW5kd2lkdGhfaHogJXVcbiIsCisJCQljLT5iYW5kd2lkdGhfaHopOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKIAl9CiAKIAlmb3IgKGogPSAwOyBqIDwgc2l6ZW9mKGJ3X3BhcmFtc1swXSk7IGorKykgewotCQlyZXQgPSBydGwyODMyX3dyX3JlZ3MocHJpdiwgMHgxYytqLCAxLCAmYndfcGFyYW1zW2ldW2pdLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9idWxrX3dyaXRlKGNsaWVudCwgMHgxMWMgKyBqLCAmYndfcGFyYW1zW2ldW2pdLCAxKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCX0KQEAgLTY0MywxMSArNTMxLDExIEBACiAJKiBSU0FNUF9SQVRJTyA9IGZsb29yKENyeXN0YWxGcmVxSHogKiA3ICogcG93KDIsIDIyKQogCSoJLyBDb25zdFdpdGhCYW5kd2lkdGhNb2RlKQogCSovCi0JbnVtID0gcHJpdi0+Y2ZnLnh0YWwgKiA3OworCW51bSA9IGRldi0+cGRhdGEtPmNsayAqIDc7CiAJbnVtICo9IDB4NDAwMDAwOwogCW51bSA9IGRpdl91NjQobnVtLCBid19tb2RlKTsKIAlyZXNhbXBfcmF0aW8gPSAgbnVtICYgMHgzZmZmZmZmOwotCXJldCA9IHJ0bDI4MzJfd3JfZGVtb2RfcmVnKHByaXYsIERWQlRfUlNBTVBfUkFUSU8sIHJlc2FtcF9yYXRpbyk7CisJcmV0ID0gcnRsMjgzMl93cl9kZW1vZF9yZWcoZGV2LCBEVkJUX1JTQU1QX1JBVElPLCByZXNhbXBfcmF0aW8pOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCkBAIC02NTYsNDggKzU0NCw0OSBAQAogCSoJLyAoQ3J5c3RhbEZyZXFIeiAqIDcpKQogCSovCiAJbnVtID0gYndfbW9kZSA8PCAyMDsKLQludW0yID0gcHJpdi0+Y2ZnLnh0YWwgKiA3OworCW51bTIgPSBkZXYtPnBkYXRhLT5jbGsgKiA3OwogCW51bSA9IGRpdl91NjQobnVtLCBudW0yKTsKIAludW0gPSAtbnVtOwogCWNmcmVxX29mZl9yYXRpbyA9IG51bSAmIDB4ZmZmZmY7Ci0JcmV0ID0gcnRsMjgzMl93cl9kZW1vZF9yZWcocHJpdiwgRFZCVF9DRlJFUV9PRkZfUkFUSU8sIGNmcmVxX29mZl9yYXRpbyk7CisJcmV0ID0gcnRsMjgzMl93cl9kZW1vZF9yZWcoZGV2LCBEVkJUX0NGUkVRX09GRl9SQVRJTywgY2ZyZXFfb2ZmX3JhdGlvKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCS8qIHNvZnQgcmVzZXQgKi8KLQlyZXQgPSBydGwyODMyX3dyX2RlbW9kX3JlZyhwcml2LCBEVkJUX1NPRlRfUlNULCAweDEpOworCXJldCA9IHJ0bDI4MzJfd3JfZGVtb2RfcmVnKGRldiwgRFZCVF9TT0ZUX1JTVCwgMHgxKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAotCXJldCA9IHJ0bDI4MzJfd3JfZGVtb2RfcmVnKHByaXYsIERWQlRfU09GVF9SU1QsIDB4MCk7CisJcmV0ID0gcnRsMjgzMl93cl9kZW1vZF9yZWcoZGV2LCBEVkJUX1NPRlRfUlNULCAweDApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIGVycjoKLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcnRsMjgzMl9nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IHJ0bDI4MzJfcHJpdiAqcHJpdiA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBydGwyODMyX2RldiAqZGV2ID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRldi0+Y2xpZW50OwogCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwogCWludCByZXQ7CiAJdTggYnVmWzNdOwogCi0JaWYgKHByaXYtPnNsZWVwaW5nKQorCWlmIChkZXYtPnNsZWVwaW5nKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IHJ0bDI4MzJfcmRfcmVncyhwcml2LCAweDNjLCAzLCBidWYsIDIpOworCXJldCA9IHJ0bDI4MzJfYnVsa19yZWFkKGNsaWVudCwgMHgzM2MsIGJ1ZiwgMik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBydGwyODMyX3JkX3JlZyhwcml2LCAweDUxLCAzLCAmYnVmWzJdKTsKKwlyZXQgPSBydGwyODMyX2J1bGtfcmVhZChjbGllbnQsIDB4MzUxLCAmYnVmWzJdLCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAotCWRldl9kYmcoJnByaXYtPmkyYy0+ZGV2LCAiJXM6IFRQUz0lKnBoXG4iLCBfX2Z1bmNfXywgMywgYnVmKTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlRQUz0lKnBoXG4iLCAzLCBidWYpOwogCiAJc3dpdGNoICgoYnVmWzBdID4+IDIpICYgMykgewogCWNhc2UgMDoKQEAgLTc4NywzNjEgKzY3NiwyMjAgQEAKIAogCXJldHVybiAwOwogZXJyOgotCWRldl9kYmcoJnByaXYtPmkyYy0+ZGV2LCAiJXM6IGZhaWxlZD0lZFxuIiwgX19mdW5jX18sIHJldCk7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBydGwyODMyX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQogewotCXN0cnVjdCBydGwyODMyX3ByaXYgKnByaXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgcnRsMjgzMl9kZXYgKmRldiA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkZXYtPmNsaWVudDsKIAlpbnQgcmV0OwogCXUzMiB0bXA7Ci0JKnN0YXR1cyA9IDA7CiAKLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwgIiVzOlxuIiwgX19mdW5jX18pOwotCWlmIChwcml2LT5zbGVlcGluZykKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlxuIik7CisKKwkqc3RhdHVzID0gMDsKKwlpZiAoZGV2LT5zbGVlcGluZykKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBydGwyODMyX3JkX2RlbW9kX3JlZyhwcml2LCBEVkJUX0ZTTV9TVEFHRSwgJnRtcCk7CisJcmV0ID0gcnRsMjgzMl9yZF9kZW1vZF9yZWcoZGV2LCBEVkJUX0ZTTV9TVEFHRSwgJnRtcCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAlpZiAodG1wID09IDExKSB7CiAJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTCB8IEZFX0hBU19DQVJSSUVSIHwKIAkJCQlGRV9IQVNfVklURVJCSSB8IEZFX0hBU19TWU5DIHwgRkVfSEFTX0xPQ0s7Ci0JfQotCS8qIFRPRE8gZmluZCBvdXQgaWYgdGhpcyBpcyBhbHNvIHRydWUgZm9yIHJ0bDI4MzI/ICovCi0JLyplbHNlIGlmICh0bXAgPT0gMTApIHsKKwl9IGVsc2UgaWYgKHRtcCA9PSAxMCkgewogCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUwgfCBGRV9IQVNfQ0FSUklFUiB8CiAJCQkJRkVfSEFTX1ZJVEVSQkk7Ci0JfSovCisJfQogCi0JcmV0dXJuIHJldDsKKwlkZXYtPmZlX3N0YXR1cyA9ICpzdGF0dXM7CisJcmV0dXJuIDA7CiBlcnI6Ci0JZGV2X2RiZygmcHJpdi0+aTJjLT5kZXYsICIlczogZmFpbGVkPSVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHJ0bDI4MzJfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQogewotCXN0cnVjdCBydGwyODMyX3ByaXYgKnByaXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlpbnQgcmV0LCBoaWVyYXJjaHksIGNvbnN0ZWxsYXRpb247Ci0JdTggYnVmWzJdLCB0bXA7Ci0JdTE2IHRtcDE2OwotI2RlZmluZSBDT05TVEVMTEFUSU9OX05VTSAzCi0jZGVmaW5lIEhJRVJBUkNIWV9OVU0gNAotCXN0YXRpYyBjb25zdCB1MzIgc25yX2NvbnN0YW50W0NPTlNURUxMQVRJT05fTlVNXVtISUVSQVJDSFlfTlVNXSA9IHsKLQkJeyA4NTM4NzMyNSwgODUzODczMjUsIDg1Mzg3MzI1LCA4NTM4NzMyNSB9LAotCQl7IDg2Njc2MTc4LCA4NjY3NjE3OCwgODcxNjc5NDksIDg3Nzk1NjYwIH0sCi0JCXsgODc2NTk5MzgsIDg3NjU5OTM4LCA4Nzg4NTE3OCwgODgyNDE3NDMgfSwKLQl9OworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwogCi0JLyogcmVwb3J0cyBTTlIgaW4gcmVzb2x1dGlvbiBvZiAwLjEgZEIgKi8KLQotCXJldCA9IHJ0bDI4MzJfcmRfcmVnKHByaXYsIDB4M2MsIDMsICZ0bXApOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCi0JY29uc3RlbGxhdGlvbiA9ICh0bXAgPj4gMikgJiAweDAzOyAvKiBbMzoyXSAqLwotCWlmIChjb25zdGVsbGF0aW9uID4gQ09OU1RFTExBVElPTl9OVU0gLSAxKQotCQlnb3RvIGVycjsKLQotCWhpZXJhcmNoeSA9ICh0bXAgPj4gNCkgJiAweDA3OyAvKiBbNjo0XSAqLwotCWlmIChoaWVyYXJjaHkgPiBISUVSQVJDSFlfTlVNIC0gMSkKLQkJZ290byBlcnI7Ci0KLQlyZXQgPSBydGwyODMyX3JkX3JlZ3MocHJpdiwgMHgwYywgNCwgYnVmLCAyKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCXRtcDE2ID0gYnVmWzBdIDw8IDggfCBidWZbMV07Ci0KLQlpZiAodG1wMTYpCi0JCSpzbnIgPSAoc25yX2NvbnN0YW50W2NvbnN0ZWxsYXRpb25dW2hpZXJhcmNoeV0gLQotCQkJCWludGxvZzEwKHRtcDE2KSkgLyAoKDEgPDwgMjQpIC8gMTAwKTsKKwkvKiByZXBvcnQgU05SIGluIHJlc29sdXRpb24gb2YgMC4xIGRCICovCisJaWYgKGMtPmNuci5zdGF0WzBdLnNjYWxlID09IEZFX1NDQUxFX0RFQ0lCRUwpCisJCSpzbnIgPSBkaXZfczY0KGMtPmNuci5zdGF0WzBdLnN2YWx1ZSwgMTAwKTsKIAllbHNlCiAJCSpzbnIgPSAwOwogCiAJcmV0dXJuIDA7Ci1lcnI6Ci0JZGV2X2RiZygmcHJpdi0+aTJjLT5kZXYsICIlczogZmFpbGVkPSVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHJ0bDI4MzJfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQogewotCXN0cnVjdCBydGwyODMyX3ByaXYgKnByaXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlpbnQgcmV0OwotCXU4IGJ1ZlsyXTsKKwlzdHJ1Y3QgcnRsMjgzMl9kZXYgKmRldiA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0JcmV0ID0gcnRsMjgzMl9yZF9yZWdzKHByaXYsIDB4NGUsIDMsIGJ1ZiwgMik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnI7Ci0KLQkqYmVyID0gYnVmWzBdIDw8IDggfCBidWZbMV07CisJKmJlciA9IChkZXYtPnBvc3RfYml0X2Vycm9yIC0gZGV2LT5wb3N0X2JpdF9lcnJvcl9wcmV2KTsKKwlkZXYtPnBvc3RfYml0X2Vycm9yX3ByZXYgPSBkZXYtPnBvc3RfYml0X2Vycm9yOwogCiAJcmV0dXJuIDA7Ci1lcnI6Ci0JZGV2X2RiZygmcHJpdi0+aTJjLT5kZXYsICIlczogZmFpbGVkPSVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKLQlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgcnRsMjgzMl9vcHM7Ci0KLXN0YXRpYyB2b2lkIHJ0bDI4MzJfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3N0YXRpYyB2b2lkIHJ0bDI4MzJfc3RhdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgcnRsMjgzMl9wcml2ICpwcml2ID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHJ0bDI4MzJfZGV2ICpkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0bDI4MzJfZGV2LCBzdGF0X3dvcmsud29yayk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGRldi0+Y2xpZW50OworCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZkZXYtPmZlLmR0dl9wcm9wZXJ0eV9jYWNoZTsKKwlpbnQgcmV0LCB0bXA7CisJdTggdTh0bXAsIGJ1ZlsyXTsKKwl1MTYgdTE2dG1wOwogCi0JZGV2X2RiZygmcHJpdi0+aTJjLT5kZXYsICIlczpcbiIsIF9fZnVuY19fKTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmkyY19nYXRlX3dvcmspOwotCWkyY19kZWxfbXV4X2FkYXB0ZXIocHJpdi0+aTJjX2FkYXB0ZXJfdHVuZXIpOwotCWkyY19kZWxfbXV4X2FkYXB0ZXIocHJpdi0+aTJjX2FkYXB0ZXIpOwotCWtmcmVlKHByaXYpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXG4iKTsKKworCS8qIHNpZ25hbCBzdHJlbmd0aCAqLworCWlmIChkZXYtPmZlX3N0YXR1cyAmIEZFX0hBU19TSUdOQUwpIHsKKwkJLyogcmVhZCBkaWdpdGFsIEFHQyAqLworCQlyZXQgPSBydGwyODMyX2J1bGtfcmVhZChjbGllbnQsIDB4MzA1LCAmdTh0bXAsIDEpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJkaWdpdGFsIGFnYz0lMDJ4IiwgdTh0bXApOworCisJCXU4dG1wID0gfnU4dG1wOworCQl1MTZ0bXAgPSB1OHRtcCA8PCA4IHwgdTh0bXAgPDwgMDsKKworCQljLT5zdHJlbmd0aC5zdGF0WzBdLnNjYWxlID0gRkVfU0NBTEVfUkVMQVRJVkU7CisJCWMtPnN0cmVuZ3RoLnN0YXRbMF0udXZhbHVlID0gdTE2dG1wOworCX0gZWxzZSB7CisJCWMtPnN0cmVuZ3RoLnN0YXRbMF0uc2NhbGUgPSBGRV9TQ0FMRV9OT1RfQVZBSUxBQkxFOworCX0KKworCS8qIENOUiAqLworCWlmIChkZXYtPmZlX3N0YXR1cyAmIEZFX0hBU19WSVRFUkJJKSB7CisJCXVuc2lnbmVkIGhpZXJhcmNoeSwgY29uc3RlbGxhdGlvbjsKKwkJI2RlZmluZSBDT05TVEVMTEFUSU9OX05VTSAzCisJCSNkZWZpbmUgSElFUkFSQ0hZX05VTSA0CisJCXN0YXRpYyBjb25zdCB1MzIgY29uc3RhbnRbQ09OU1RFTExBVElPTl9OVU1dW0hJRVJBUkNIWV9OVU1dID0geworCQkJezg1Mzg3MzI1LCA4NTM4NzMyNSwgODUzODczMjUsIDg1Mzg3MzI1fSwKKwkJCXs4NjY3NjE3OCwgODY2NzYxNzgsIDg3MTY3OTQ5LCA4Nzc5NTY2MH0sCisJCQl7ODc2NTk5MzgsIDg3NjU5OTM4LCA4Nzg4NTE3OCwgODgyNDE3NDN9LAorCQl9OworCisJCXJldCA9IHJ0bDI4MzJfYnVsa19yZWFkKGNsaWVudCwgMHgzM2MsICZ1OHRtcCwgMSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKworCQljb25zdGVsbGF0aW9uID0gKHU4dG1wID4+IDIpICYgMHgwMzsgLyogWzM6Ml0gKi8KKwkJaWYgKGNvbnN0ZWxsYXRpb24gPiBDT05TVEVMTEFUSU9OX05VTSAtIDEpCisJCQlnb3RvIGVycl9zY2hlZHVsZV9kZWxheWVkX3dvcms7CisKKwkJaGllcmFyY2h5ID0gKHU4dG1wID4+IDQpICYgMHgwNzsgLyogWzY6NF0gKi8KKwkJaWYgKGhpZXJhcmNoeSA+IEhJRVJBUkNIWV9OVU0gLSAxKQorCQkJZ290byBlcnJfc2NoZWR1bGVfZGVsYXllZF93b3JrOworCisJCXJldCA9IHJ0bDI4MzJfYnVsa19yZWFkKGNsaWVudCwgMHg0MGMsIGJ1ZiwgMik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKworCQl1MTZ0bXAgPSBidWZbMF0gPDwgOCB8IGJ1ZlsxXSA8PCAwOworCQlpZiAodTE2dG1wKQorCQkJdG1wID0gKGNvbnN0YW50W2NvbnN0ZWxsYXRpb25dW2hpZXJhcmNoeV0gLQorCQkJICAgICAgIGludGxvZzEwKHUxNnRtcCkpIC8gKCgxIDw8IDI0KSAvIDEwMDAwKTsKKwkJZWxzZQorCQkJdG1wID0gMDsKKworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImNuciByYXc9JXVcbiIsIHUxNnRtcCk7CisKKwkJYy0+Y25yLnN0YXRbMF0uc2NhbGUgPSBGRV9TQ0FMRV9ERUNJQkVMOworCQljLT5jbnIuc3RhdFswXS5zdmFsdWUgPSB0bXA7CisJfSBlbHNlIHsKKwkJYy0+Y25yLnN0YXRbMF0uc2NhbGUgPSBGRV9TQ0FMRV9OT1RfQVZBSUxBQkxFOworCX0KKworCS8qIEJFUiAqLworCWlmIChkZXYtPmZlX3N0YXR1cyAmIEZFX0hBU19MT0NLKSB7CisJCXJldCA9IHJ0bDI4MzJfYnVsa19yZWFkKGNsaWVudCwgMHgzNGUsIGJ1ZiwgMik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKworCQl1MTZ0bXAgPSBidWZbMF0gPDwgOCB8IGJ1ZlsxXSA8PCAwOworCQlkZXYtPnBvc3RfYml0X2Vycm9yICs9IHUxNnRtcDsKKwkJZGV2LT5wb3N0X2JpdF9jb3VudCArPSAxMDAwMDAwOworCisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiYmVyIGVycm9ycz0ldSB0b3RhbD0xMDAwMDAwXG4iLCB1MTZ0bXApOworCisJCWMtPnBvc3RfYml0X2Vycm9yLnN0YXRbMF0uc2NhbGUgPSBGRV9TQ0FMRV9DT1VOVEVSOworCQljLT5wb3N0X2JpdF9lcnJvci5zdGF0WzBdLnV2YWx1ZSA9IGRldi0+cG9zdF9iaXRfZXJyb3I7CisJCWMtPnBvc3RfYml0X2NvdW50LnN0YXRbMF0uc2NhbGUgPSBGRV9TQ0FMRV9DT1VOVEVSOworCQljLT5wb3N0X2JpdF9jb3VudC5zdGF0WzBdLnV2YWx1ZSA9IGRldi0+cG9zdF9iaXRfY291bnQ7CisJfSBlbHNlIHsKKwkJYy0+cG9zdF9iaXRfZXJyb3Iuc3RhdFswXS5zY2FsZSA9IEZFX1NDQUxFX05PVF9BVkFJTEFCTEU7CisJCWMtPnBvc3RfYml0X2NvdW50LnN0YXRbMF0uc2NhbGUgPSBGRV9TQ0FMRV9OT1RfQVZBSUxBQkxFOworCX0KKworZXJyX3NjaGVkdWxlX2RlbGF5ZWRfd29yazoKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+c3RhdF93b3JrLCBtc2Vjc190b19qaWZmaWVzKDIwMDApKTsKKwlyZXR1cm47CitlcnI6CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CiB9CiAKIC8qCi0gKiBEZWxheSBtZWNoYW5pc20gdG8gYXZvaWQgdW5uZWVkZWQgSTJDIGdhdGUgb3BlbiAvIGNsb3NlLiBHYXRlIGNsb3NlIGlzCi0gKiBkZWxheWVkIGhlcmUgYSBsaXR0bGUgYml0IGluIG9yZGVyIHRvIHNlZSBpZiB0aGVyZSBpcyBzZXF1ZW5jZSBvZiBJMkMKKyAqIEkyQyBnYXRlL211eC9yZXBlYXRlciBsb2dpYworICogV2UgbXVzdCB1c2UgdW5sb2NrZWQgX19pMmNfdHJhbnNmZXIoKSBoZXJlICh0aHJvdWdoIHJlZ21hcCkgYmVjYXVzZSBvZiBJMkMKKyAqIGFkYXB0ZXIgbG9jayBpcyBhbHJlYWR5IHRha2VuIGJ5IHR1bmVyIGRyaXZlci4KKyAqIFRoZXJlIGlzIGRlbGF5IG1lY2hhbmlzbSB0byBhdm9pZCB1bm5lZWRlZCBJMkMgZ2F0ZSBvcGVuIC8gY2xvc2UuIEdhdGUgY2xvc2UKKyAqIGlzIGRlbGF5ZWQgaGVyZSBhIGxpdHRsZSBiaXQgaW4gb3JkZXIgdG8gc2VlIGlmIHRoZXJlIGlzIHNlcXVlbmNlIG9mIEkyQwogICogbWVzc2FnZXMgc2VudCB0byBzYW1lIEkyQyBidXMuCi0gKiBXZSBtdXN0IHVzZSB1bmxvY2tlZCB2ZXJzaW9uIG9mIF9faTJjX3RyYW5zZmVyKCkgaW4gb3JkZXIgdG8gYXZvaWQgZGVhZGxvY2sKLSAqIGFzIGxvY2sgaXMgYWxyZWFkeSB0YWtlbiBieSBjYWxsaW5nIG11eGVkIGkyY190cmFuc2ZlcigpLgogICovCiBzdGF0aWMgdm9pZCBydGwyODMyX2kyY19nYXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBydGwyODMyX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywKLQkJCXN0cnVjdCBydGwyODMyX3ByaXYsIGkyY19nYXRlX3dvcmsud29yayk7Ci0Jc3RydWN0IGkyY19hZGFwdGVyICphZGFwID0gcHJpdi0+aTJjOworCXN0cnVjdCBydGwyODMyX2RldiAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydGwyODMyX2RldiwgaTJjX2dhdGVfd29yay53b3JrKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGV2LT5jbGllbnQ7CiAJaW50IHJldDsKLQl1OCBidWZbMl07Ci0Jc3RydWN0IGkyY19tc2cgbXNnWzFdID0gewotCQl7Ci0JCQkuYWRkciA9IHByaXYtPmNmZy5pMmNfYWRkciwKLQkJCS5mbGFncyA9IDAsCi0JCQkubGVuID0gc2l6ZW9mKGJ1ZiksCi0JCQkuYnVmID0gYnVmLAotCQl9Ci0JfTsKIAotCS8qIHNlbGVjdCByZWcgYmFuayAxICovCi0JYnVmWzBdID0gMHgwMDsKLQlidWZbMV0gPSAweDAxOwotCXJldCA9IF9faTJjX3RyYW5zZmVyKGFkYXAsIG1zZywgMSk7Ci0JaWYgKHJldCAhPSAxKQorCS8qIGNsb3NlIGdhdGUgKi8KKwlyZXQgPSBydGwyODMyX3VwZGF0ZV9iaXRzKGRldi0+Y2xpZW50LCAweDEwMSwgMHgwOCwgMHgwMCk7CisJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlwcml2LT5wYWdlID0gMTsKLQotCS8qIGNsb3NlIEkyQyByZXBlYXRlciBnYXRlICovCi0JYnVmWzBdID0gMHgwMTsKLQlidWZbMV0gPSAweDEwOwotCXJldCA9IF9faTJjX3RyYW5zZmVyKGFkYXAsIG1zZywgMSk7Ci0JaWYgKHJldCAhPSAxKQotCQlnb3RvIGVycjsKLQotCXByaXYtPmkyY19nYXRlX3N0YXRlID0gZmFsc2U7Ci0KIAlyZXR1cm47CiBlcnI6Ci0JZGV2X2RiZygmcHJpdi0+aTJjLT5kZXYsICIlczogZmFpbGVkPSVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKLQotCXJldHVybjsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIH0KIAogc3RhdGljIGludCBydGwyODMyX3NlbGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHZvaWQgKm11eF9wcml2LCB1MzIgY2hhbl9pZCkKIHsKLQlzdHJ1Y3QgcnRsMjgzMl9wcml2ICpwcml2ID0gbXV4X3ByaXY7CisJc3RydWN0IHJ0bDI4MzJfZGV2ICpkZXYgPSBtdXhfcHJpdjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGV2LT5jbGllbnQ7CiAJaW50IHJldDsKLQl1OCBidWZbMl0sIHZhbDsKLQlzdHJ1Y3QgaTJjX21zZyBtc2dbMV0gPSB7Ci0JCXsKLQkJCS5hZGRyID0gcHJpdi0+Y2ZnLmkyY19hZGRyLAotCQkJLmZsYWdzID0gMCwKLQkJCS5sZW4gPSBzaXplb2YoYnVmKSwKLQkJCS5idWYgPSBidWYsCi0JCX0KLQl9OwotCXN0cnVjdCBpMmNfbXNnIG1zZ19yZFsyXSA9IHsKLQkJewotCQkJLmFkZHIgPSBwcml2LT5jZmcuaTJjX2FkZHIsCi0JCQkuZmxhZ3MgPSAwLAotCQkJLmxlbiA9IDEsCi0JCQkuYnVmID0gIlx4MDEiLAotCQl9LCB7Ci0JCQkuYWRkciA9IHByaXYtPmNmZy5pMmNfYWRkciwKLQkJCS5mbGFncyA9IEkyQ19NX1JELAotCQkJLmxlbiA9IDEsCi0JCQkuYnVmID0gJnZhbCwKLQkJfQotCX07CiAKIAkvKiB0ZXJtaW5hdGUgcG9zc2libGUgZ2F0ZSBjbG9zaW5nICovCi0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5pMmNfZ2F0ZV93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZkZXYtPmkyY19nYXRlX3dvcmspOwogCi0JaWYgKHByaXYtPmkyY19nYXRlX3N0YXRlID09IGNoYW5faWQpCi0JCXJldHVybiAwOwotCi0JLyogc2VsZWN0IHJlZyBiYW5rIDEgKi8KLQlidWZbMF0gPSAweDAwOwotCWJ1ZlsxXSA9IDB4MDE7Ci0JcmV0ID0gX19pMmNfdHJhbnNmZXIoYWRhcCwgbXNnLCAxKTsKLQlpZiAocmV0ICE9IDEpCisJLyoKKwkgKiBJMkMgYWRhcHRlciBsb2NrIGlzIGFscmVhZHkgdGFrZW4gYW5kIGR1ZSB0byB0aGF0IHdlIHdpbGwgdXNlCisJICogcmVnbWFwX3VwZGF0ZV9iaXRzKCkgd2hpY2ggZG9lcyBub3QgbG9jayBhZ2FpbiBJMkMgYWRhcHRlci4KKwkgKi8KKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoZGV2LT5yZWdtYXAsIDB4MTAxLCAweDA4LCAweDA4KTsKKwlpZiAocmV0KQogCQlnb3RvIGVycjsKIAotCXByaXYtPnBhZ2UgPSAxOwotCi0JLyogd2UgbXVzdCByZWFkIHRoYXQgcmVnaXN0ZXIsIG90aGVyd2lzZSB0aGVyZSB3aWxsIGJlIGVycm9ycyAqLwotCXJldCA9IF9faTJjX3RyYW5zZmVyKGFkYXAsIG1zZ19yZCwgMik7Ci0JaWYgKHJldCAhPSAyKQotCQlnb3RvIGVycjsKLQotCS8qIG9wZW4gb3IgY2xvc2UgSTJDIHJlcGVhdGVyIGdhdGUgKi8KLQlidWZbMF0gPSAweDAxOwotCWlmIChjaGFuX2lkID09IDEpCi0JCWJ1ZlsxXSA9IDB4MTg7IC8qIG9wZW4gKi8KLQllbHNlCi0JCWJ1ZlsxXSA9IDB4MTA7IC8qIGNsb3NlICovCi0KLQlyZXQgPSBfX2kyY190cmFuc2ZlcihhZGFwLCBtc2csIDEpOwotCWlmIChyZXQgIT0gMSkKLQkJZ290byBlcnI7Ci0KLQlwcml2LT5pMmNfZ2F0ZV9zdGF0ZSA9IGNoYW5faWQ7Ci0KIAlyZXR1cm4gMDsKIGVycjoKLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOwotCi0JcmV0dXJuIC1FUkVNT1RFSU87CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBydGwyODMyX2Rlc2VsZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgdm9pZCAqbXV4X3ByaXYsCi0JCXUzMiBjaGFuX2lkKQorCQkJICAgIHUzMiBjaGFuX2lkKQogewotCXN0cnVjdCBydGwyODMyX3ByaXYgKnByaXYgPSBtdXhfcHJpdjsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmkyY19nYXRlX3dvcmssIHVzZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJc3RydWN0IHJ0bDI4MzJfZGV2ICpkZXYgPSBtdXhfcHJpdjsKKworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT5pMmNfZ2F0ZV93b3JrLCB1c2Vjc190b19qaWZmaWVzKDEwMCkpOwogCXJldHVybiAwOwogfQogCi1pbnQgcnRsMjgzMl9lbmFibGVfZXh0ZXJuYWxfdHNfaWYoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCi17Ci0Jc3RydWN0IHJ0bDI4MzJfcHJpdiAqcHJpdiA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCWludCByZXQ7Ci0KLQlkZXZfZGJnKCZwcml2LT5pMmMtPmRldiwgIiVzOiBzZXR0aW5nIFBJUCBtb2RlXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXQgPSBydGwyODMyX3dyX3JlZ3MocHJpdiwgMHgwYywgMSwgIlx4NWZceGZmIiwgMik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnI7Ci0KLQlyZXQgPSBydGwyODMyX3dyX2RlbW9kX3JlZyhwcml2LCBEVkJUX1BJUF9PTiwgMHgxKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCXJldCA9IHJ0bDI4MzJfd3JfcmVnKHByaXYsIDB4YmMsIDAsIDB4MTgpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCi0JcmV0ID0gcnRsMjgzMl93cl9yZWcocHJpdiwgMHgyMiwgMCwgMHgwMSk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnI7Ci0KLQlyZXQgPSBydGwyODMyX3dyX3JlZyhwcml2LCAweDI2LCAwLCAweDFmKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCXJldCA9IHJ0bDI4MzJfd3JfcmVnKHByaXYsIDB4MjcsIDAsIDB4ZmYpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCi0JcmV0ID0gcnRsMjgzMl93cl9yZWdzKHByaXYsIDB4OTIsIDEsICJceDdmXHhmN1x4ZmYiLCAzKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCS8qIHNvZnQgcmVzZXQgKi8KLQlyZXQgPSBydGwyODMyX3dyX2RlbW9kX3JlZyhwcml2LCBEVkJUX1NPRlRfUlNULCAweDEpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCi0JcmV0ID0gcnRsMjgzMl93cl9kZW1vZF9yZWcocHJpdiwgRFZCVF9TT0ZUX1JTVCwgMHgwKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCXJldHVybiAwOwotZXJyOgotCWRldl9kYmcoJnByaXYtPmkyYy0+ZGV2LCAiJXM6IGZhaWxlZD0lZFxuIiwgX19mdW5jX18sIHJldCk7Ci0JcmV0dXJuIHJldDsKLQotfQotRVhQT1JUX1NZTUJPTChydGwyODMyX2VuYWJsZV9leHRlcm5hbF90c19pZik7Ci0KLXN0cnVjdCBpMmNfYWRhcHRlciAqcnRsMjgzMl9nZXRfaTJjX2FkYXB0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCi17Ci0Jc3RydWN0IHJ0bDI4MzJfcHJpdiAqcHJpdiA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCXJldHVybiBwcml2LT5pMmNfYWRhcHRlcl90dW5lcjsKLX0KLUVYUE9SVF9TWU1CT0wocnRsMjgzMl9nZXRfaTJjX2FkYXB0ZXIpOwotCi1zdHJ1Y3QgaTJjX2FkYXB0ZXIgKnJ0bDI4MzJfZ2V0X3ByaXZhdGVfaTJjX2FkYXB0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCi17Ci0Jc3RydWN0IHJ0bDI4MzJfcHJpdiAqcHJpdiA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCXJldHVybiBwcml2LT5pMmNfYWRhcHRlcjsKLX0KLUVYUE9SVF9TWU1CT0wocnRsMjgzMl9nZXRfcHJpdmF0ZV9pMmNfYWRhcHRlcik7Ci0KLXN0cnVjdCBkdmJfZnJvbnRlbmQgKnJ0bDI4MzJfYXR0YWNoKGNvbnN0IHN0cnVjdCBydGwyODMyX2NvbmZpZyAqY2ZnLAotCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQotewotCXN0cnVjdCBydGwyODMyX3ByaXYgKnByaXYgPSBOVUxMOwotCWludCByZXQgPSAwOwotCXU4IHRtcDsKLQotCWRldl9kYmcoJmkyYy0+ZGV2LCAiJXM6XG4iLCBfX2Z1bmNfXyk7Ci0KLQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwotCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcnRsMjgzMl9wcml2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHByaXYgPT0gTlVMTCkKLQkJZ290byBlcnI7Ci0KLQkvKiBzZXR1cCB0aGUgcHJpdiAqLwotCXByaXYtPmkyYyA9IGkyYzsKLQlwcml2LT50dW5lciA9IGNmZy0+dHVuZXI7Ci0JbWVtY3B5KCZwcml2LT5jZmcsIGNmZywgc2l6ZW9mKHN0cnVjdCBydGwyODMyX2NvbmZpZykpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5pMmNfZ2F0ZV93b3JrLCBydGwyODMyX2kyY19nYXRlX3dvcmspOwotCi0JLyogY3JlYXRlIG11eGVkIGkyYyBhZGFwdGVyIGZvciBkZW1vZCBpdHNlbGYgKi8KLQlwcml2LT5pMmNfYWRhcHRlciA9IGkyY19hZGRfbXV4X2FkYXB0ZXIoaTJjLCAmaTJjLT5kZXYsIHByaXYsIDAsIDAsIDAsCi0JCQlydGwyODMyX3NlbGVjdCwgTlVMTCk7Ci0JaWYgKHByaXYtPmkyY19hZGFwdGVyID09IE5VTEwpCi0JCWdvdG8gZXJyOwotCi0JLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHRoZXJlICovCi0JcmV0ID0gcnRsMjgzMl9yZF9yZWcocHJpdiwgMHgwMCwgMHgwLCAmdG1wKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycjsKLQotCS8qIGNyZWF0ZSBtdXhlZCBpMmMgYWRhcHRlciBmb3IgZGVtb2QgdHVuZXIgYnVzICovCi0JcHJpdi0+aTJjX2FkYXB0ZXJfdHVuZXIgPSBpMmNfYWRkX211eF9hZGFwdGVyKGkyYywgJmkyYy0+ZGV2LCBwcml2LAotCQkJMCwgMSwgMCwgcnRsMjgzMl9zZWxlY3QsIHJ0bDI4MzJfZGVzZWxlY3QpOwotCWlmIChwcml2LT5pMmNfYWRhcHRlcl90dW5lciA9PSBOVUxMKQotCQlnb3RvIGVycjsKLQotCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KLQltZW1jcHkoJnByaXYtPmZlLm9wcywgJnJ0bDI4MzJfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKLQlwcml2LT5mZS5kZW1vZHVsYXRvcl9wcml2ID0gcHJpdjsKLQotCS8qIFRPRE8gaW1wbGVtZW50IHNsZWVwIG1vZGUgKi8KLQlwcml2LT5zbGVlcGluZyA9IHRydWU7Ci0KLQlyZXR1cm4gJnByaXYtPmZlOwotZXJyOgotCWRldl9kYmcoJmkyYy0+ZGV2LCAiJXM6IGZhaWxlZD0lZFxuIiwgX19mdW5jX18sIHJldCk7Ci0JaWYgKHByaXYgJiYgcHJpdi0+aTJjX2FkYXB0ZXIpCi0JCWkyY19kZWxfbXV4X2FkYXB0ZXIocHJpdi0+aTJjX2FkYXB0ZXIpOwotCWtmcmVlKHByaXYpOwotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTChydGwyODMyX2F0dGFjaCk7Ci0KIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBydGwyODMyX29wcyA9IHsKIAkuZGVsc3lzID0geyBTWVNfRFZCVCB9LAogCS5pbmZvID0gewpAQCAtMTE2Niw4ICs5MTQsNiBAQAogCQkJRkVfQ0FOX01VVEVfVFMKIAkgfSwKIAotCS5yZWxlYXNlID0gcnRsMjgzMl9yZWxlYXNlLAotCiAJLmluaXQgPSBydGwyODMyX2luaXQsCiAJLnNsZWVwID0gcnRsMjgzMl9zbGVlcCwKIApAQCAtMTE3OSwxMSArOTI1LDQwMyBAQAogCS5yZWFkX3N0YXR1cyA9IHJ0bDI4MzJfcmVhZF9zdGF0dXMsCiAJLnJlYWRfc25yID0gcnRsMjgzMl9yZWFkX3NuciwKIAkucmVhZF9iZXIgPSBydGwyODMyX3JlYWRfYmVyLAotCi0JLmkyY19nYXRlX2N0cmwgPSBydGwyODMyX2kyY19nYXRlX2N0cmwsCiB9OwogCitzdGF0aWMgYm9vbCBydGwyODMyX3ZvbGF0aWxlX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCit7CisJc3dpdGNoIChyZWcpIHsKKwljYXNlIDB4MzA1OgorCWNhc2UgMHgzM2M6CisJY2FzZSAweDM0ZToKKwljYXNlIDB4MzUxOgorCWNhc2UgMHg0MGMgLi4uIDB4NDBkOgorCQlyZXR1cm4gdHJ1ZTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBXZSBpbXBsZW1lbnQgb3duIEkyQyBhY2Nlc3Mgcm91dGluZXMgZm9yIHJlZ21hcCBpbiBvcmRlciB0byBnZXQgbWFudWFsIGFjY2VzcworICogdG8gSTJDIGFkYXB0ZXIgbG9jaywgd2hpY2ggaXMgbmVlZGVkIGZvciBJMkMgbXV4IGFkYXB0ZXIuCisgKi8KK3N0YXRpYyBpbnQgcnRsMjgzMl9yZWdtYXBfcmVhZCh2b2lkICpjb250ZXh0LCBjb25zdCB2b2lkICpyZWdfYnVmLAorCQkJICAgICAgIHNpemVfdCByZWdfc2l6ZSwgdm9pZCAqdmFsX2J1Ziwgc2l6ZV90IHZhbF9zaXplKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb250ZXh0OworCWludCByZXQ7CisJc3RydWN0IGkyY19tc2cgbXNnWzJdID0geworCQl7CisJCQkuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJCS5mbGFncyA9IDAsCisJCQkubGVuID0gcmVnX3NpemUsCisJCQkuYnVmID0gKHU4ICopcmVnX2J1ZiwKKwkJfSwgeworCQkJLmFkZHIgPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCS5sZW4gPSB2YWxfc2l6ZSwKKwkJCS5idWYgPSB2YWxfYnVmLAorCQl9CisJfTsKKworCXJldCA9IF9faTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNnLCAyKTsKKwlpZiAocmV0ICE9IDIpIHsKKwkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiaTJjIHJlZyByZWFkIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJaWYgKHJldCA+PSAwKQorCQkJcmV0ID0gLUVSRU1PVEVJTzsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnRsMjgzMl9yZWdtYXBfd3JpdGUodm9pZCAqY29udGV4dCwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjb250ZXh0OworCWludCByZXQ7CisJc3RydWN0IGkyY19tc2cgbXNnWzFdID0geworCQl7CisJCQkuYWRkciA9IGNsaWVudC0+YWRkciwKKwkJCS5mbGFncyA9IDAsCisJCQkubGVuID0gY291bnQsCisJCQkuYnVmID0gKHU4ICopZGF0YSwKKwkJfQorCX07CisKKwlyZXQgPSBfX2kyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMSk7CisJaWYgKHJldCAhPSAxKSB7CisJCWRldl93YXJuKCZjbGllbnQtPmRldiwgImkyYyByZWcgd3JpdGUgZmFpbGVkICVkXG4iLCByZXQpOworCQlpZiAocmV0ID49IDApCisJCQlyZXQgPSAtRVJFTU9URUlPOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGwyODMyX3JlZ21hcF9nYXRoZXJfd3JpdGUodm9pZCAqY29udGV4dCwgY29uc3Qgdm9pZCAqcmVnLAorCQkJCSAgICAgICBzaXplX3QgcmVnX2xlbiwgY29uc3Qgdm9pZCAqdmFsLAorCQkJCSAgICAgICBzaXplX3QgdmFsX2xlbikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gY29udGV4dDsKKwlpbnQgcmV0OworCXU4IGJ1ZlsyNTZdOworCXN0cnVjdCBpMmNfbXNnIG1zZ1sxXSA9IHsKKwkJeworCQkJLmFkZHIgPSBjbGllbnQtPmFkZHIsCisJCQkuZmxhZ3MgPSAwLAorCQkJLmxlbiA9IDEgKyB2YWxfbGVuLAorCQkJLmJ1ZiA9IGJ1ZiwKKwkJfQorCX07CisKKwlidWZbMF0gPSAqKHU4IGNvbnN0ICopcmVnOworCW1lbWNweSgmYnVmWzFdLCB2YWwsIHZhbF9sZW4pOworCisJcmV0ID0gX19pMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCBtc2csIDEpOworCWlmIChyZXQgIT0gMSkgeworCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJpMmMgcmVnIHdyaXRlIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJaWYgKHJldCA+PSAwKQorCQkJcmV0ID0gLUVSRU1PVEVJTzsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGSVhNRTogSGFjay4gSW1wbGVtZW50IG93biByZWdtYXAgbG9ja2luZyBpbiBvcmRlciB0byBzaWxlbmNlIGxvY2tkZXAKKyAqIHJlY3Vyc2l2ZSBsb2NrIHdhcm5pbmcuIFRoYXQgaGFwcGVucyB3aGVuIHJlZ21hcCBJMkMgY2xpZW50IGNhbGxzIEkyQyBtdXgKKyAqIGFkYXB0ZXIsIHdoaWNoIGxlYWRzIGRlbW9kIEkyQyByZXBlYXRlciBlbmFibGUgdmlhIGRlbW9kIHJlZ21hcC4gT3BlcmF0aW9uCisgKiB0YWtlcyB0d28gcmVnbWFwIGxvY2tzIHJlY3Vyc2l2ZWx5IC0gYnV0IHRob3NlIGFyZSBkaWZmZXJlbnQgcmVnbWFwIGluc3RhbmNlcworICogaW4gYSB0d28gZGlmZmVyZW50IEkyQyBkcml2ZXJzLCBzbyBpdCBpcyBub3QgZGVhZGxvY2suIFByb3BlciBmaXggaXMgdG8gbWFrZQorICogcmVnbWFwIGF3YXJlIG9mIGxvY2tkZXAuCisgKi8KK3N0YXRpYyB2b2lkIHJ0bDI4MzJfcmVnbWFwX2xvY2sodm9pZCAqX19kZXYpCit7CisJc3RydWN0IHJ0bDI4MzJfZGV2ICpkZXYgPSBfX2RldjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGV2LT5jbGllbnQ7CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlxuIik7CisJbXV0ZXhfbG9jaygmZGV2LT5yZWdtYXBfbXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCBydGwyODMyX3JlZ21hcF91bmxvY2sodm9pZCAqX19kZXYpCit7CisJc3RydWN0IHJ0bDI4MzJfZGV2ICpkZXYgPSBfX2RldjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGV2LT5jbGllbnQ7CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlxuIik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnJlZ21hcF9tdXRleCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpydGwyODMyX2dldF9kdmJfZnJvbnRlbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgcnRsMjgzMl9kZXYgKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJcbiIpOworCXJldHVybiAmZGV2LT5mZTsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciAqcnRsMjgzMl9nZXRfaTJjX2FkYXB0ZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgcnRsMjgzMl9kZXYgKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJcbiIpOworCXJldHVybiBkZXYtPmkyY19hZGFwdGVyX3R1bmVyOworfQorCitzdGF0aWMgaW50IHJ0bDI4MzJfZW5hYmxlX3NsYXZlX3RzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHJ0bDI4MzJfZGV2ICpkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgcmV0OworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJcbiIpOworCisJcmV0ID0gcnRsMjgzMl9idWxrX3dyaXRlKGNsaWVudCwgMHgxMGMsICJceDVmXHhmZiIsIDIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gcnRsMjgzMl93cl9kZW1vZF9yZWcoZGV2LCBEVkJUX1BJUF9PTiwgMHgxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IHJ0bDI4MzJfYnVsa193cml0ZShjbGllbnQsIDB4MGJjLCAiXHgxOCIsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gcnRsMjgzMl9idWxrX3dyaXRlKGNsaWVudCwgMHgwMjIsICJceDAxIiwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBydGwyODMyX2J1bGtfd3JpdGUoY2xpZW50LCAweDAyNiwgIlx4MWYiLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IHJ0bDI4MzJfYnVsa193cml0ZShjbGllbnQsIDB4MDI3LCAiXHhmZiIsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gcnRsMjgzMl9idWxrX3dyaXRlKGNsaWVudCwgMHgxOTIsICJceDdmXHhmN1x4ZmYiLCAzKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCS8qIHNvZnQgcmVzZXQgKi8KKwlyZXQgPSBydGwyODMyX3dyX2RlbW9kX3JlZyhkZXYsIERWQlRfU09GVF9SU1QsIDB4MSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXQgPSBydGwyODMyX3dyX2RlbW9kX3JlZyhkZXYsIERWQlRfU09GVF9SU1QsIDB4MCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJ0bDI4MzJfcGlkX2ZpbHRlcl9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgb25vZmYpCit7CisJc3RydWN0IHJ0bDI4MzJfZGV2ICpkZXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGV2LT5jbGllbnQ7CisJaW50IHJldDsKKwl1OCB1OHRtcDsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAib25vZmY9JWRcbiIsIG9ub2ZmKTsKKworCS8qIGVuYWJsZSAvIGRpc2FibGUgUElEIGZpbHRlciAqLworCWlmIChvbm9mZikKKwkJdTh0bXAgPSAweDgwOworCWVsc2UKKwkJdTh0bXAgPSAweDAwOworCisJcmV0ID0gcnRsMjgzMl91cGRhdGVfYml0cyhjbGllbnQsIDB4MDYxLCAweGMwLCB1OHRtcCk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlyZXR1cm4gMDsKK2VycjoKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJ0bDI4MzJfcGlkX2ZpbHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggaW5kZXgsIHUxNiBwaWQsCisJCQkgICAgICBpbnQgb25vZmYpCit7CisJc3RydWN0IHJ0bDI4MzJfZGV2ICpkZXYgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZGV2LT5jbGllbnQ7CisJaW50IHJldDsKKwl1OCBidWZbNF07CisKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImluZGV4PSVkIHBpZD0lMDR4IG9ub2ZmPSVkXG4iLAorCQlpbmRleCwgcGlkLCBvbm9mZik7CisKKwkvKiBza2lwIGludmFsaWQgUElEcyAoMHgyMDAwKSAqLworCWlmIChwaWQgPiAweDFmZmYgfHwgaW5kZXggPiAzMikKKwkJcmV0dXJuIDA7CisKKwlpZiAob25vZmYpCisJCXNldF9iaXQoaW5kZXgsICZkZXYtPmZpbHRlcnMpOworCWVsc2UKKwkJY2xlYXJfYml0KGluZGV4LCAmZGV2LT5maWx0ZXJzKTsKKworCS8qIGVuYWJsZSAvIGRpc2FibGUgUElEcyAqLworCWJ1ZlswXSA9IChkZXYtPmZpbHRlcnMgPj4gIDApICYgMHhmZjsKKwlidWZbMV0gPSAoZGV2LT5maWx0ZXJzID4+ICA4KSAmIDB4ZmY7CisJYnVmWzJdID0gKGRldi0+ZmlsdGVycyA+PiAxNikgJiAweGZmOworCWJ1ZlszXSA9IChkZXYtPmZpbHRlcnMgPj4gMjQpICYgMHhmZjsKKwlyZXQgPSBydGwyODMyX2J1bGtfd3JpdGUoY2xpZW50LCAweDA2MiwgYnVmLCA0KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCS8qIGFkZCBQSUQgKi8KKwlidWZbMF0gPSAocGlkID4+IDgpICYgMHhmZjsKKwlidWZbMV0gPSAocGlkID4+IDApICYgMHhmZjsKKwlyZXQgPSBydGwyODMyX2J1bGtfd3JpdGUoY2xpZW50LCAweDA2NiArIDIgKiBpbmRleCwgYnVmLCAyKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldHVybiAwOworZXJyOgorCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcnRsMjgzMl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHJ0bDI4MzJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjID0gY2xpZW50LT5hZGFwdGVyOworCXN0cnVjdCBydGwyODMyX2RldiAqZGV2OworCWludCByZXQ7CisJdTggdG1wOworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2J1cyByZWdtYXBfYnVzID0geworCQkucmVhZCA9IHJ0bDI4MzJfcmVnbWFwX3JlYWQsCisJCS53cml0ZSA9IHJ0bDI4MzJfcmVnbWFwX3dyaXRlLAorCQkuZ2F0aGVyX3dyaXRlID0gcnRsMjgzMl9yZWdtYXBfZ2F0aGVyX3dyaXRlLAorCQkudmFsX2Zvcm1hdF9lbmRpYW5fZGVmYXVsdCA9IFJFR01BUF9FTkRJQU5fTkFUSVZFLAorCX07CisJc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2VfY2ZnIHJlZ21hcF9yYW5nZV9jZmdbXSA9IHsKKwkJeworCQkJLnNlbGVjdG9yX3JlZyAgICAgPSAweDAwLAorCQkJLnNlbGVjdG9yX21hc2sgICAgPSAweGZmLAorCQkJLnNlbGVjdG9yX3NoaWZ0ICAgPSAwLAorCQkJLndpbmRvd19zdGFydCAgICAgPSAwLAorCQkJLndpbmRvd19sZW4gICAgICAgPSAweDEwMCwKKwkJCS5yYW5nZV9taW4gICAgICAgID0gMCAqIDB4MTAwLAorCQkJLnJhbmdlX21heCAgICAgICAgPSA1ICogMHgxMDAsCisJCX0sCisJfTsKKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXG4iKTsKKworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCisJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJ0bDI4MzJfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCS8qIHNldHVwIHRoZSBzdGF0ZSAqLworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRldik7CisJZGV2LT5jbGllbnQgPSBjbGllbnQ7CisJZGV2LT5wZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJZGV2LT5zbGVlcGluZyA9IHRydWU7CisJSU5JVF9ERUxBWUVEX1dPUksoJmRldi0+aTJjX2dhdGVfd29yaywgcnRsMjgzMl9pMmNfZ2F0ZV93b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmZGV2LT5zdGF0X3dvcmssIHJ0bDI4MzJfc3RhdF93b3JrKTsKKwkvKiBjcmVhdGUgcmVnbWFwICovCisJbXV0ZXhfaW5pdCgmZGV2LT5yZWdtYXBfbXV0ZXgpOworCWRldi0+cmVnbWFwX2NvbmZpZy5yZWdfYml0cyA9ICA4LAorCWRldi0+cmVnbWFwX2NvbmZpZy52YWxfYml0cyA9ICA4LAorCWRldi0+cmVnbWFwX2NvbmZpZy5sb2NrID0gcnRsMjgzMl9yZWdtYXBfbG9jaywKKwlkZXYtPnJlZ21hcF9jb25maWcudW5sb2NrID0gcnRsMjgzMl9yZWdtYXBfdW5sb2NrLAorCWRldi0+cmVnbWFwX2NvbmZpZy5sb2NrX2FyZyA9IGRldiwKKwlkZXYtPnJlZ21hcF9jb25maWcudm9sYXRpbGVfcmVnID0gcnRsMjgzMl92b2xhdGlsZV9yZWcsCisJZGV2LT5yZWdtYXBfY29uZmlnLm1heF9yZWdpc3RlciA9IDUgKiAweDEwMCwKKwlkZXYtPnJlZ21hcF9jb25maWcucmFuZ2VzID0gcmVnbWFwX3JhbmdlX2NmZywKKwlkZXYtPnJlZ21hcF9jb25maWcubnVtX3JhbmdlcyA9IEFSUkFZX1NJWkUocmVnbWFwX3JhbmdlX2NmZyksCisJZGV2LT5yZWdtYXBfY29uZmlnLmNhY2hlX3R5cGUgPSBSRUdDQUNIRV9SQlRSRUUsCisJZGV2LT5yZWdtYXAgPSByZWdtYXBfaW5pdCgmY2xpZW50LT5kZXYsICZyZWdtYXBfYnVzLCBjbGllbnQsCisJCQkJICAmZGV2LT5yZWdtYXBfY29uZmlnKTsKKwlpZiAoSVNfRVJSKGRldi0+cmVnbWFwKSkgeworCQlyZXQgPSBQVFJfRVJSKGRldi0+cmVnbWFwKTsKKwkJZ290byBlcnJfa2ZyZWU7CisJfQorCisJLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHRoZXJlICovCisJcmV0ID0gcnRsMjgzMl9idWxrX3JlYWQoY2xpZW50LCAweDAwMCwgJnRtcCwgMSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcmVnbWFwX2V4aXQ7CisKKwkvKiBjcmVhdGUgbXV4ZWQgaTJjIGFkYXB0ZXIgZm9yIGRlbW9kIHR1bmVyIGJ1cyAqLworCWRldi0+aTJjX2FkYXB0ZXJfdHVuZXIgPSBpMmNfYWRkX211eF9hZGFwdGVyKGkyYywgJmkyYy0+ZGV2LCBkZXYsCisJCQkwLCAwLCAwLCBydGwyODMyX3NlbGVjdCwgcnRsMjgzMl9kZXNlbGVjdCk7CisJaWYgKGRldi0+aTJjX2FkYXB0ZXJfdHVuZXIgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9yZWdtYXBfZXhpdDsKKwl9CisKKwkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCisJbWVtY3B5KCZkZXYtPmZlLm9wcywgJnJ0bDI4MzJfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlkZXYtPmZlLmRlbW9kdWxhdG9yX3ByaXYgPSBkZXY7CisKKwkvKiBzZXR1cCBjYWxsYmFja3MgKi8KKwlwZGF0YS0+Z2V0X2R2Yl9mcm9udGVuZCA9IHJ0bDI4MzJfZ2V0X2R2Yl9mcm9udGVuZDsKKwlwZGF0YS0+Z2V0X2kyY19hZGFwdGVyID0gcnRsMjgzMl9nZXRfaTJjX2FkYXB0ZXI7CisJcGRhdGEtPmVuYWJsZV9zbGF2ZV90cyA9IHJ0bDI4MzJfZW5hYmxlX3NsYXZlX3RzOworCXBkYXRhLT5waWRfZmlsdGVyID0gcnRsMjgzMl9waWRfZmlsdGVyOworCXBkYXRhLT5waWRfZmlsdGVyX2N0cmwgPSBydGwyODMyX3BpZF9maWx0ZXJfY3RybDsKKwlwZGF0YS0+YnVsa19yZWFkID0gcnRsMjgzMl9idWxrX3JlYWQ7CisJcGRhdGEtPmJ1bGtfd3JpdGUgPSBydGwyODMyX2J1bGtfd3JpdGU7CisJcGRhdGEtPnVwZGF0ZV9iaXRzID0gcnRsMjgzMl91cGRhdGVfYml0czsKKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIlJlYWx0ZWsgUlRMMjgzMiBzdWNjZXNzZnVsbHkgYXR0YWNoZWRcbiIpOworCXJldHVybiAwOworZXJyX3JlZ21hcF9leGl0OgorCXJlZ21hcF9leGl0KGRldi0+cmVnbWFwKTsKK2Vycl9rZnJlZToKKwlrZnJlZShkZXYpOworZXJyOgorCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcnRsMjgzMl9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgcnRsMjgzMl9kZXYgKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJcbiIpOworCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZXYtPmkyY19nYXRlX3dvcmspOworCisJaTJjX2RlbF9tdXhfYWRhcHRlcihkZXYtPmkyY19hZGFwdGVyX3R1bmVyKTsKKworCXJlZ21hcF9leGl0KGRldi0+cmVnbWFwKTsKKworCWtmcmVlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHJ0bDI4MzJfaWRfdGFibGVbXSA9IHsKKwl7InJ0bDI4MzIiLCAwfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBydGwyODMyX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHJ0bDI4MzJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkubmFtZQk9ICJydGwyODMyIiwKKwl9LAorCS5wcm9iZQkJPSBydGwyODMyX3Byb2JlLAorCS5yZW1vdmUJCT0gcnRsMjgzMl9yZW1vdmUsCisJLmlkX3RhYmxlCT0gcnRsMjgzMl9pZF90YWJsZSwKK307CisKK21vZHVsZV9pMmNfZHJpdmVyKHJ0bDI4MzJfZHJpdmVyKTsKKwogTU9EVUxFX0FVVEhPUigiVGhvbWFzIE1haXIgPG1haXIudGhvbWFzODZAZ21haWwuY29tPiIpOworTU9EVUxFX0FVVEhPUigiQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlJlYWx0ZWsgUlRMMjgzMiBEVkItVCBkZW1vZHVsYXRvciBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9WRVJTSU9OKCIwLjUiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9ydGwyODMyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvcnRsMjgzMi5oCmluZGV4IDUyNTRjMWQuLmE4ZTkxMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9ydGwyODMyLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3J0bDI4MzIuaApAQCAtMiw2ICsyLDcgQEAKICAqIFJlYWx0ZWsgUlRMMjgzMiBEVkItVCBkZW1vZHVsYXRvciBkcml2ZXIKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhvbWFzIE1haXIgPHRob21hcy5tYWlyODZAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMSw4NiArMjIsNDIgQEAKICNpZm5kZWYgUlRMMjgzMl9ICiAjZGVmaW5lIFJUTDI4MzJfSAogCi0jaW5jbHVkZSA8bGludXgva2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1tdXguaD4KIAotc3RydWN0IHJ0bDI4MzJfY29uZmlnIHsKLQkvKgotCSAqIERlbW9kdWxhdG9yIEkyQyBhZGRyZXNzLgotCSAqLwotCXU4IGkyY19hZGRyOworLyoqCisgKiBzdHJ1Y3QgcnRsMjgzMl9wbGF0Zm9ybV9kYXRhIC0gUGxhdGZvcm0gZGF0YSBmb3IgdGhlIHJ0bDI4MzIgZHJpdmVyCisgKiBAY2xrOiBDbG9jayBmcmVxdWVuY3kgKDQwMDAwMDAsIDE2MDAwMDAwLCAyNTAwMDAwMCwgMjg4MDAwMDApLgorICogQHR1bmVyOiBVc2VkIHR1bmVyIG1vZGVsLgorICogQGdldF9kdmJfZnJvbnRlbmQ6IEdldCBEVkIgZnJvbnRlbmQuCisgKiBAZ2V0X2kyY19hZGFwdGVyOiBHZXQgSTJDIGFkYXB0ZXIuCisgKiBAZW5hYmxlX3NsYXZlX3RzOiBFbmFibGUgc2xhdmUgVFMgSUYuCisgKiBAcGlkX2ZpbHRlcjogU2V0IFBJRCB0byBQSUQgZmlsdGVyLgorICogQHBpZF9maWx0ZXJfY3RybDogQ29udHJvbCBQSUQgZmlsdGVyLgorICovCiAKK3N0cnVjdCBydGwyODMyX3BsYXRmb3JtX2RhdGEgeworCXUzMiBjbGs7CiAJLyoKLQkgKiBYdGFsIGZyZXF1ZW5jeS4KLQkgKiBIegotCSAqIDQwMDAwMDAsIDE2MDAwMDAwLCAyNTAwMDAwMCwgMjg4MDAwMDAKLQkgKi8KLQl1MzIgeHRhbDsKLQotCS8qCi0JICogdHVuZXIKLQkgKiBYWFg6IFRoaXMgbXVzdCBiZSBrZWVwIHN5bmMgd2l0aCBkdmJfdXNiX3J0bDI4eHh1IGRlbW9kIGRyaXZlci4KKwkgKiBYWFg6IFRoaXMgbGlzdCBtdXN0IGJlIGtlcHQgc3luYyB3aXRoIGR2Yl91c2JfcnRsMjh4eHUgVVNCIElGIGRyaXZlci4KIAkgKi8KICNkZWZpbmUgUlRMMjgzMl9UVU5FUl9UVUE5MDAxICAgMHgyNAogI2RlZmluZSBSVEwyODMyX1RVTkVSX0ZDMDAxMiAgICAweDI2CiAjZGVmaW5lIFJUTDI4MzJfVFVORVJfRTQwMDAgICAgIDB4MjcKICNkZWZpbmUgUlRMMjgzMl9UVU5FUl9GQzAwMTMgICAgMHgyOQotI2RlZmluZSBSVEwyODMyX1RVTkVSX1I4MjBUCTB4MmEKLSNkZWZpbmUgUlRMMjgzMl9UVU5FUl9SODI4RAkweDJiCisjZGVmaW5lIFJUTDI4MzJfVFVORVJfUjgyMFQgICAgIDB4MmEKKyNkZWZpbmUgUlRMMjgzMl9UVU5FUl9SODI4RCAgICAgMHgyYgogCXU4IHR1bmVyOworCisJc3RydWN0IGR2Yl9mcm9udGVuZCogKCpnZXRfZHZiX2Zyb250ZW5kKShzdHJ1Y3QgaTJjX2NsaWVudCAqKTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIqICgqZ2V0X2kyY19hZGFwdGVyKShzdHJ1Y3QgaTJjX2NsaWVudCAqKTsKKwlpbnQgKCplbmFibGVfc2xhdmVfdHMpKHN0cnVjdCBpMmNfY2xpZW50ICopOworCWludCAoKnBpZF9maWx0ZXIpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTgsIHUxNiwgaW50KTsKKwlpbnQgKCpwaWRfZmlsdGVyX2N0cmwpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgaW50KTsKKy8qIHByaXZhdGU6IFJlZ2lzdGVyIGFjY2VzcyBmb3IgU0RSIG1vZHVsZSB1c2Ugb25seSAqLworCWludCAoKmJ1bGtfcmVhZCkoc3RydWN0IGkyY19jbGllbnQgKiwgdW5zaWduZWQgaW50LCB2b2lkICosIHNpemVfdCk7CisJaW50ICgqYnVsa193cml0ZSkoc3RydWN0IGkyY19jbGllbnQgKiwgdW5zaWduZWQgaW50LCBjb25zdCB2b2lkICosIHNpemVfdCk7CisJaW50ICgqdXBkYXRlX2JpdHMpKHN0cnVjdCBpMmNfY2xpZW50ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogfTsKIAotI2lmIElTX0VOQUJMRUQoQ09ORklHX0RWQl9SVEwyODMyKQotc3RydWN0IGR2Yl9mcm9udGVuZCAqcnRsMjgzMl9hdHRhY2goCi0JY29uc3Qgc3RydWN0IHJ0bDI4MzJfY29uZmlnICpjZmcsCi0Jc3RydWN0IGkyY19hZGFwdGVyICppMmMKLSk7Ci0KLWV4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKnJ0bDI4MzJfZ2V0X2kyY19hZGFwdGVyKAotCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlCi0pOwotCi1leHRlcm4gc3RydWN0IGkyY19hZGFwdGVyICpydGwyODMyX2dldF9wcml2YXRlX2kyY19hZGFwdGVyKAotCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlCi0pOwotCi1leHRlcm4gaW50IHJ0bDI4MzJfZW5hYmxlX2V4dGVybmFsX3RzX2lmKAotCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlCi0pOwotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnJ0bDI4MzJfYXR0YWNoKAotCWNvbnN0IHN0cnVjdCBydGwyODMyX2NvbmZpZyAqY29uZmlnLAotCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjCi0pCi17Ci0JcHJfd2FybigiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGkyY19hZGFwdGVyICpydGwyODMyX2dldF9pMmNfYWRhcHRlcigKLQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZQotKQotewotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpMmNfYWRhcHRlciAqcnRsMjgzMl9nZXRfcHJpdmF0ZV9pMmNfYWRhcHRlcigKLQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZQotKQotewotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBydGwyODMyX2VuYWJsZV9leHRlcm5hbF90c19pZigKLQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZQotKQotewotCXJldHVybiAtRU5PREVWOwotfQotCi0jZW5kaWYKLQotCiAjZW5kaWYgLyogUlRMMjgzMl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvcnRsMjgzMl9wcml2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvcnRsMjgzMl9wcml2LmgKaW5kZXggYWU0NjlmMC4uYzNhOTIyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3J0bDI4MzJfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9ydGwyODMyX3ByaXYuaApAQCAtMiw2ICsyLDcgQEAKICAqIFJlYWx0ZWsgUlRMMjgzMiBEVkItVCBkZW1vZHVsYXRvciBkcml2ZXIKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGhvbWFzIE1haXIgPHRob21hcy5tYWlyODZAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yMSwyOCArMjIsMzQgQEAKICNpZm5kZWYgUlRMMjgzMl9QUklWX0gKICNkZWZpbmUgUlRMMjgzMl9QUklWX0gKIAotI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgotI2luY2x1ZGUgInJ0bDI4MzIuaCIKLSNpbmNsdWRlIDxsaW51eC9pMmMtbXV4Lmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKLXN0cnVjdCBydGwyODMyX3ByaXYgewotCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXB0ZXI7CisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAiZHZiX21hdGguaCIKKyNpbmNsdWRlICJydGwyODMyLmgiCisKK3N0cnVjdCBydGwyODMyX2RldiB7CisJc3RydWN0IHJ0bDI4MzJfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgbXV0ZXggcmVnbWFwX211dGV4OworCXN0cnVjdCByZWdtYXBfY29uZmlnIHJlZ21hcF9jb25maWc7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwogCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXB0ZXJfdHVuZXI7CiAJc3RydWN0IGR2Yl9mcm9udGVuZCBmZTsKLQlzdHJ1Y3QgcnRsMjgzMl9jb25maWcgY2ZnOwotCi0JYm9vbCBpMmNfZ2F0ZV9zdGF0ZTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRfd29yazsKKwlmZV9zdGF0dXNfdCBmZV9zdGF0dXM7CisJdTY0IHBvc3RfYml0X2Vycm9yX3ByZXY7IC8qIGZvciBvbGQgRFZCdjMgcmVhZF9iZXIoKSBjYWxjdWxhdGlvbiAqLworCXU2NCBwb3N0X2JpdF9lcnJvcjsKKwl1NjQgcG9zdF9iaXRfY291bnQ7CiAJYm9vbCBzbGVlcGluZzsKLQotCXU4IHR1bmVyOwotCXU4IHBhZ2U7IC8qIGFjdGl2ZSByZWdpc3RlciBwYWdlICovCiAJc3RydWN0IGRlbGF5ZWRfd29yayBpMmNfZ2F0ZV93b3JrOworCXVuc2lnbmVkIGxvbmcgZmlsdGVyczsgLyogUElEIGZpbHRlciAqLwogfTsKIAogc3RydWN0IHJ0bDI4MzJfcmVnX2VudHJ5IHsKLQl1OCBwYWdlOwotCXU4IHN0YXJ0X2FkZHJlc3M7CisJdTE2IHN0YXJ0X2FkZHJlc3M7CiAJdTggbXNiOwogCXU4IGxzYjsKIH07CkBAIC01Miw3ICs1OSw2IEBACiAJdTMyIHZhbHVlOwogfTsKIAotCiAvKiBEZW1vZCByZWdpc3RlciBiaXQgbmFtZXMgKi8KIGVudW0gRFZCVF9SRUdfQklUX05BTUUgewogCURWQlRfU09GVF9SU1QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvcnRsMjgzMl9zZHIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9ydGwyODMyX3Nkci5jCmluZGV4IDI4OTZiNDcuLjNmZjg4MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9ydGwyODMyX3Nkci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9ydGwyODMyX3Nkci5jCkBAIC0yMiw3ICsyMiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKICNpbmNsdWRlICJydGwyODMyX3Nkci5oIgogI2luY2x1ZGUgImR2Yl91c2IuaCIKIApAQCAtMzIsNiArMzEsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItdm1hbGxvYy5oPgogCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogCkBAIC0xMDcsMTYgKzEwNywxMiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIH07CiAKLXN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSB7CitzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2IHsKICNkZWZpbmUgUE9XRVJfT04gICAgICAgICAgICgxIDw8IDEpCiAjZGVmaW5lIFVSQl9CVUYgICAgICAgICAgICAoMSA8PCAyKQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQljb25zdCBzdHJ1Y3QgcnRsMjgzMl9jb25maWcgKmNmZzsKLQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZTsKLQlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQ7Ci0Jc3RydWN0IGkyY19hZGFwdGVyICppMmM7Ci0JdTggYmFuazsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCiAJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwogCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKQEAgLTE2MCwyMDAgKzE1Niw3NyBAQAogCXVuc2lnbmVkIGxvbmcgamlmZmllc19uZXh0OwogfTsKIAotLyogd3JpdGUgbXVsdGlwbGUgaGFyZHdhcmUgcmVnaXN0ZXJzICovCi1zdGF0aWMgaW50IHJ0bDI4MzJfc2RyX3dyKHN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSAqcywgdTggcmVnLCBjb25zdCB1OCAqdmFsLAotCQlpbnQgbGVuKQotewotCWludCByZXQ7Ci0jZGVmaW5lIE1BWF9XUl9MRU4gMjQKLSNkZWZpbmUgTUFYX1dSX1hGRVJfTEVOIChNQVhfV1JfTEVOICsgMSkKLQl1OCBidWZbTUFYX1dSX1hGRVJfTEVOXTsKLQlzdHJ1Y3QgaTJjX21zZyBtc2dbMV0gPSB7Ci0JCXsKLQkJCS5hZGRyID0gcy0+Y2ZnLT5pMmNfYWRkciwKLQkJCS5mbGFncyA9IDAsCi0JCQkubGVuID0gMSArIGxlbiwKLQkJCS5idWYgPSBidWYsCi0JCX0KLQl9OwotCi0JaWYgKFdBUk5fT04obGVuID4gTUFYX1dSX0xFTikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYnVmWzBdID0gcmVnOwotCW1lbWNweSgmYnVmWzFdLCB2YWwsIGxlbik7Ci0KLQlyZXQgPSBpMmNfdHJhbnNmZXIocy0+aTJjLCBtc2csIDEpOwotCWlmIChyZXQgPT0gMSkgewotCQlyZXQgPSAwOwotCX0gZWxzZSB7Ci0JCWRldl9lcnIoJnMtPmkyYy0+ZGV2LAotCQkJIiVzOiBJMkMgd3IgZmFpbGVkPSVkIHJlZz0lMDJ4IGxlbj0lZFxuIiwKLQkJCUtCVUlMRF9NT0ROQU1FLCByZXQsIHJlZywgbGVuKTsKLQkJcmV0ID0gLUVSRU1PVEVJTzsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogcmVhZCBtdWx0aXBsZSBoYXJkd2FyZSByZWdpc3RlcnMgKi8KLXN0YXRpYyBpbnQgcnRsMjgzMl9zZHJfcmQoc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzLCB1OCByZWcsIHU4ICp2YWwsIGludCBsZW4pCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaTJjX21zZyBtc2dbMl0gPSB7Ci0JCXsKLQkJCS5hZGRyID0gcy0+Y2ZnLT5pMmNfYWRkciwKLQkJCS5mbGFncyA9IDAsCi0JCQkubGVuID0gMSwKLQkJCS5idWYgPSAmcmVnLAotCQl9LCB7Ci0JCQkuYWRkciA9IHMtPmNmZy0+aTJjX2FkZHIsCi0JCQkuZmxhZ3MgPSBJMkNfTV9SRCwKLQkJCS5sZW4gPSBsZW4sCi0JCQkuYnVmID0gdmFsLAotCQl9Ci0JfTsKLQotCXJldCA9IGkyY190cmFuc2ZlcihzLT5pMmMsIG1zZywgMik7Ci0JaWYgKHJldCA9PSAyKSB7Ci0JCXJldCA9IDA7Ci0JfSBlbHNlIHsKLQkJZGV2X2Vycigmcy0+aTJjLT5kZXYsCi0JCQkJIiVzOiBJMkMgcmQgZmFpbGVkPSVkIHJlZz0lMDJ4IGxlbj0lZFxuIiwKLQkJCQlLQlVJTERfTU9ETkFNRSwgcmV0LCByZWcsIGxlbik7Ci0JCXJldCA9IC1FUkVNT1RFSU87Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KIC8qIHdyaXRlIG11bHRpcGxlIHJlZ2lzdGVycyAqLwotc3RhdGljIGludCBydGwyODMyX3Nkcl93cl9yZWdzKHN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSAqcywgdTE2IHJlZywKK3N0YXRpYyBpbnQgcnRsMjgzMl9zZHJfd3JfcmVncyhzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYsIHUxNiByZWcsCiAJCWNvbnN0IHU4ICp2YWwsIGludCBsZW4pCiB7Ci0JaW50IHJldDsKLQl1OCByZWcyID0gKHJlZyA+PiAwKSAmIDB4ZmY7Ci0JdTggYmFuayA9IChyZWcgPj4gOCkgJiAweGZmOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXYtPnBkZXY7CisJc3RydWN0IHJ0bDI4MzJfc2RyX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHBkYXRhLT5pMmNfY2xpZW50OwogCi0JLyogc3dpdGNoIGJhbmsgaWYgbmVlZGVkICovCi0JaWYgKGJhbmsgIT0gcy0+YmFuaykgewotCQlyZXQgPSBydGwyODMyX3Nkcl93cihzLCAweDAwLCAmYmFuaywgMSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXMtPmJhbmsgPSBiYW5rOwotCX0KLQotCXJldHVybiBydGwyODMyX3Nkcl93cihzLCByZWcyLCB2YWwsIGxlbik7CisJcmV0dXJuIHBkYXRhLT5idWxrX3dyaXRlKGNsaWVudCwgcmVnLCB2YWwsIGxlbik7CiB9CiAKKyNpZiAwCiAvKiByZWFkIG11bHRpcGxlIHJlZ2lzdGVycyAqLwotc3RhdGljIGludCBydGwyODMyX3Nkcl9yZF9yZWdzKHN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSAqcywgdTE2IHJlZywgdTggKnZhbCwKK3N0YXRpYyBpbnQgcnRsMjgzMl9zZHJfcmRfcmVncyhzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYsIHUxNiByZWcsIHU4ICp2YWwsCiAJCWludCBsZW4pCiB7Ci0JaW50IHJldDsKLQl1OCByZWcyID0gKHJlZyA+PiAwKSAmIDB4ZmY7Ci0JdTggYmFuayA9IChyZWcgPj4gOCkgJiAweGZmOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXYtPnBkZXY7CisJc3RydWN0IHJ0bDI4MzJfc2RyX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHBkYXRhLT5pMmNfY2xpZW50OwogCi0JLyogc3dpdGNoIGJhbmsgaWYgbmVlZGVkICovCi0JaWYgKGJhbmsgIT0gcy0+YmFuaykgewotCQlyZXQgPSBydGwyODMyX3Nkcl93cihzLCAweDAwLCAmYmFuaywgMSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXMtPmJhbmsgPSBiYW5rOwotCX0KLQotCXJldHVybiBydGwyODMyX3Nkcl9yZChzLCByZWcyLCB2YWwsIGxlbik7CisJcmV0dXJuIHBkYXRhLT5idWxrX3JlYWQoY2xpZW50LCByZWcsIHZhbCwgbGVuKTsKIH0KKyNlbmRpZgogCiAvKiB3cml0ZSBzaW5nbGUgcmVnaXN0ZXIgKi8KLXN0YXRpYyBpbnQgcnRsMjgzMl9zZHJfd3JfcmVnKHN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSAqcywgdTE2IHJlZywgdTggdmFsKQorc3RhdGljIGludCBydGwyODMyX3Nkcl93cl9yZWcoc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2LCB1MTYgcmVnLCB1OCB2YWwpCiB7Ci0JcmV0dXJuIHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgcmVnLCAmdmFsLCAxKTsKKwlyZXR1cm4gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIHJlZywgJnZhbCwgMSk7CiB9CiAKLSNpZiAwCi0vKiByZWFkIHNpbmdsZSByZWdpc3RlciAqLwotc3RhdGljIGludCBydGwyODMyX3Nkcl9yZF9yZWcoc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzLCB1MTYgcmVnLCB1OCAqdmFsKQotewotCXJldHVybiBydGwyODMyX3Nkcl9yZF9yZWdzKHMsIHJlZywgdmFsLCAxKTsKLX0KLSNlbmRpZgotCiAvKiB3cml0ZSBzaW5nbGUgcmVnaXN0ZXIgd2l0aCBtYXNrICovCi1zdGF0aWMgaW50IHJ0bDI4MzJfc2RyX3dyX3JlZ19tYXNrKHN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSAqcywgdTE2IHJlZywKK3N0YXRpYyBpbnQgcnRsMjgzMl9zZHJfd3JfcmVnX21hc2soc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2LCB1MTYgcmVnLAogCQl1OCB2YWwsIHU4IG1hc2spCiB7Ci0JaW50IHJldDsKLQl1OCB0bXA7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldi0+cGRldjsKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gcGRhdGEtPmkyY19jbGllbnQ7CiAKLQkvKiBubyBuZWVkIGZvciByZWFkIGlmIHdob2xlIHJlZyBpcyB3cml0dGVuICovCi0JaWYgKG1hc2sgIT0gMHhmZikgewotCQlyZXQgPSBydGwyODMyX3Nkcl9yZF9yZWdzKHMsIHJlZywgJnRtcCwgMSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXZhbCAmPSBtYXNrOwotCQl0bXAgJj0gfm1hc2s7Ci0JCXZhbCB8PSB0bXA7Ci0JfQotCi0JcmV0dXJuIHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgcmVnLCAmdmFsLCAxKTsKKwlyZXR1cm4gcGRhdGEtPnVwZGF0ZV9iaXRzKGNsaWVudCwgcmVnLCBtYXNrLCB2YWwpOwogfQogCi0jaWYgMAotLyogcmVhZCBzaW5nbGUgcmVnaXN0ZXIgd2l0aCBtYXNrICovCi1zdGF0aWMgaW50IHJ0bDI4MzJfc2RyX3JkX3JlZ19tYXNrKHN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSAqcywgdTE2IHJlZywKLQkJdTggKnZhbCwgdTggbWFzaykKLXsKLQlpbnQgcmV0LCBpOwotCXU4IHRtcDsKLQotCXJldCA9IHJ0bDI4MzJfc2RyX3JkX3JlZ3MocywgcmVnLCAmdG1wLCAxKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JdG1wICY9IG1hc2s7Ci0KLQkvKiBmaW5kIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBiaXQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWlmICgobWFzayA+PiBpKSAmIDB4MDEpCi0JCQlicmVhazsKLQl9Ci0JKnZhbCA9IHRtcCA+PiBpOwotCi0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQogLyogUHJpdmF0ZSBmdW5jdGlvbnMgKi8KIHN0YXRpYyBzdHJ1Y3QgcnRsMjgzMl9zZHJfZnJhbWVfYnVmICpydGwyODMyX3Nkcl9nZXRfbmV4dF9maWxsX2J1ZigKLQkJc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzKQorCQlzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcnRsMjgzMl9zZHJfZnJhbWVfYnVmICpidWYgPSBOVUxMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPnF1ZXVlZF9idWZzX2xvY2ssIGZsYWdzKTsKLQlpZiAobGlzdF9lbXB0eSgmcy0+cXVldWVkX2J1ZnMpKQorCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnF1ZXVlZF9idWZzX2xvY2ssIGZsYWdzKTsKKwlpZiAobGlzdF9lbXB0eSgmZGV2LT5xdWV1ZWRfYnVmcykpCiAJCWdvdG8gbGVhdmU7CiAKLQlidWYgPSBsaXN0X2VudHJ5KHMtPnF1ZXVlZF9idWZzLm5leHQsCisJYnVmID0gbGlzdF9lbnRyeShkZXYtPnF1ZXVlZF9idWZzLm5leHQsCiAJCQlzdHJ1Y3QgcnRsMjgzMl9zZHJfZnJhbWVfYnVmLCBsaXN0KTsKIAlsaXN0X2RlbCgmYnVmLT5saXN0KTsKIGxlYXZlOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPnF1ZXVlZF9idWZzX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnF1ZXVlZF9idWZzX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gYnVmOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJ0bDI4MzJfc2RyX2NvbnZlcnRfc3RyZWFtKHN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSAqcywKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnRsMjgzMl9zZHJfY29udmVydF9zdHJlYW0oc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2LAogCQl2b2lkICpkc3QsIGNvbnN0IHU4ICpzcmMsIHVuc2lnbmVkIGludCBzcmNfbGVuKQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXYtPnBkZXY7CiAJdW5zaWduZWQgaW50IGRzdF9sZW47CiAKLQlpZiAocy0+cGl4ZWxmb3JtYXQgPT0gIFY0TDJfU0RSX0ZNVF9DVTgpIHsKKwlpZiAoZGV2LT5waXhlbGZvcm1hdCA9PSAgVjRMMl9TRFJfRk1UX0NVOCkgewogCQkvKiBuYXRpdmUgc3RyZWFtLCBubyBuZWVkIHRvIGNvbnZlcnQgKi8KIAkJbWVtY3B5KGRzdCwgc3JjLCBzcmNfbGVuKTsKIAkJZHN0X2xlbiA9IHNyY19sZW47Ci0JfSBlbHNlIGlmIChzLT5waXhlbGZvcm1hdCA9PSBWNEwyX1NEUl9GTVRfQ1UxNkxFKSB7CisJfSBlbHNlIGlmIChkZXYtPnBpeGVsZm9ybWF0ID09IFY0TDJfU0RSX0ZNVF9DVTE2TEUpIHsKIAkJLyogY29udmVydCB1OCB0byB1MTYgKi8KIAkJdW5zaWduZWQgaW50IGk7CiAJCXUxNiAqdTE2ZHN0ID0gZHN0OwpAQCAtMzY2LDIyICsyMzksMjEgQEAKIAl9CiAKIAkvKiBjYWxjdWxhdGUgc2FtcGxlIHJhdGUgYW5kIG91dHB1dCBpdCBpbiAxMCBzZWNvbmRzIGludGVydmFscyAqLwotCWlmICh1bmxpa2VseSh0aW1lX2lzX2JlZm9yZV9qaWZmaWVzKHMtPmppZmZpZXNfbmV4dCkpKSB7CisJaWYgKHVubGlrZWx5KHRpbWVfaXNfYmVmb3JlX2ppZmZpZXMoZGV2LT5qaWZmaWVzX25leHQpKSkgewogCQkjZGVmaW5lIE1TRUNTIDEwMDAwVUwKIAkJdW5zaWduZWQgaW50IG1zZWNzID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0KLQkJCQlzLT5qaWZmaWVzX25leHQgKyBtc2Vjc190b19qaWZmaWVzKE1TRUNTKSk7Ci0JCXVuc2lnbmVkIGludCBzYW1wbGVzID0gcy0+c2FtcGxlIC0gcy0+c2FtcGxlX21lYXN1cmVkOworCQkJCWRldi0+amlmZmllc19uZXh0ICsgbXNlY3NfdG9famlmZmllcyhNU0VDUykpOworCQl1bnNpZ25lZCBpbnQgc2FtcGxlcyA9IGRldi0+c2FtcGxlIC0gZGV2LT5zYW1wbGVfbWVhc3VyZWQ7CiAKLQkJcy0+amlmZmllc19uZXh0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoTVNFQ1MpOwotCQlzLT5zYW1wbGVfbWVhc3VyZWQgPSBzLT5zYW1wbGU7Ci0JCWRldl9kYmcoJnMtPnVkZXYtPmRldiwKLQkJCQkic2xlbj0ldSBzYW1wbGVzPSV1IG1zZWNzPSV1IHNhbXBsZSByYXRlPSVsdVxuIiwKLQkJCQlzcmNfbGVuLCBzYW1wbGVzLCBtc2VjcywKLQkJCQlzYW1wbGVzICogMTAwMFVMIC8gbXNlY3MpOworCQlkZXYtPmppZmZpZXNfbmV4dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKE1TRUNTKTsKKwkJZGV2LT5zYW1wbGVfbWVhc3VyZWQgPSBkZXYtPnNhbXBsZTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LAorCQkJInNsZW49JXUgc2FtcGxlcz0ldSBtc2Vjcz0ldSBzYW1wbGUgcmF0ZT0lbHVcbiIsCisJCQlzcmNfbGVuLCBzYW1wbGVzLCBtc2Vjcywgc2FtcGxlcyAqIDEwMDBVTCAvIG1zZWNzKTsKIAl9CiAKIAkvKiB0b3RhbCBudW1iZXIgb2YgSStRIHBhaXJzICovCi0Jcy0+c2FtcGxlICs9IHNyY19sZW4gLyAyOworCWRldi0+c2FtcGxlICs9IHNyY19sZW4gLyAyOwogCiAJcmV0dXJuIGRzdF9sZW47CiB9CkBAIC0zOTIsMTMgKzI2NCwxMyBAQAogICovCiBzdGF0aWMgdm9pZCBydGwyODMyX3Nkcl91cmJfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogewotCXN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSAqcyA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldi0+cGRldjsKIAlzdHJ1Y3QgcnRsMjgzMl9zZHJfZnJhbWVfYnVmICpmYnVmOwogCi0JZGV2X2RiZ19yYXRlbGltaXRlZCgmcy0+dWRldi0+ZGV2LAotCQkJInN0YXR1cz0lZCBsZW5ndGg9JWQvJWQgZXJyb3JzPSVkXG4iLAotCQkJdXJiLT5zdGF0dXMsIHVyYi0+YWN0dWFsX2xlbmd0aCwKLQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgdXJiLT5lcnJvcl9jb3VudCk7CisJZGV2X2RiZ19yYXRlbGltaXRlZCgmcGRldi0+ZGV2LCAic3RhdHVzPSVkIGxlbmd0aD0lZC8lZCBlcnJvcnM9JWRcbiIsCisJCQkgICAgdXJiLT5zdGF0dXMsIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJCSAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIHVyYi0+ZXJyb3JfY291bnQpOwogCiAJc3dpdGNoICh1cmItPnN0YXR1cykgewogCWNhc2UgMDogICAgICAgICAgICAgLyogc3VjY2VzcyAqLwpAQCAtNDA5LDggKzI4MSw3IEBACiAJY2FzZSAtRVNIVVRET1dOOgogCQlyZXR1cm47CiAJZGVmYXVsdDogICAgICAgICAgICAvKiBlcnJvciAqLwotCQlkZXZfZXJyX3JhdGVsaW1pdGVkKCZzLT51ZGV2LT5kZXYsICJ1cmIgZmFpbGVkPSVkXG4iLAotCQkJCXVyYi0+c3RhdHVzKTsKKwkJZGV2X2Vycl9yYXRlbGltaXRlZCgmcGRldi0+ZGV2LCAidXJiIGZhaWxlZD0lZFxuIiwgdXJiLT5zdGF0dXMpOwogCQlicmVhazsKIAl9CiAKQEAgLTQxOCwyMDQgKzI4OSwxOTIgQEAKIAkJdm9pZCAqcHRyOwogCQl1bnNpZ25lZCBpbnQgbGVuOwogCQkvKiBnZXQgZnJlZSBmcmFtZWJ1ZmZlciAqLwotCQlmYnVmID0gcnRsMjgzMl9zZHJfZ2V0X25leHRfZmlsbF9idWYocyk7CisJCWZidWYgPSBydGwyODMyX3Nkcl9nZXRfbmV4dF9maWxsX2J1ZihkZXYpOwogCQlpZiAodW5saWtlbHkoZmJ1ZiA9PSBOVUxMKSkgewotCQkJcy0+dmJfZnVsbCsrOwotCQkJZGV2X25vdGljZV9yYXRlbGltaXRlZCgmcy0+dWRldi0+ZGV2LAotCQkJCQkidmlkZW9idWYgaXMgZnVsbCwgJWQgcGFja2V0cyBkcm9wcGVkXG4iLAotCQkJCQlzLT52Yl9mdWxsKTsKKwkJCWRldi0+dmJfZnVsbCsrOworCQkJZGV2X25vdGljZV9yYXRlbGltaXRlZCgmcGRldi0+ZGV2LAorCQkJCQkgICAgICAgInZpZGVvYnVmIGlzIGZ1bGwsICVkIHBhY2tldHMgZHJvcHBlZFxuIiwKKwkJCQkJICAgICAgIGRldi0+dmJfZnVsbCk7CiAJCQlnb3RvIHNraXA7CiAJCX0KIAogCQkvKiBmaWxsIGZyYW1lYnVmZmVyICovCiAJCXB0ciA9IHZiMl9wbGFuZV92YWRkcigmZmJ1Zi0+dmIsIDApOwotCQlsZW4gPSBydGwyODMyX3Nkcl9jb252ZXJ0X3N0cmVhbShzLCBwdHIsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQlsZW4gPSBydGwyODMyX3Nkcl9jb252ZXJ0X3N0cmVhbShkZXYsIHB0ciwgdXJiLT50cmFuc2Zlcl9idWZmZXIsCiAJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdmIyX3NldF9wbGFuZV9wYXlsb2FkKCZmYnVmLT52YiwgMCwgbGVuKTsKIAkJdjRsMl9nZXRfdGltZXN0YW1wKCZmYnVmLT52Yi52NGwyX2J1Zi50aW1lc3RhbXApOwotCQlmYnVmLT52Yi52NGwyX2J1Zi5zZXF1ZW5jZSA9IHMtPnNlcXVlbmNlKys7CisJCWZidWYtPnZiLnY0bDJfYnVmLnNlcXVlbmNlID0gZGV2LT5zZXF1ZW5jZSsrOwogCQl2YjJfYnVmZmVyX2RvbmUoJmZidWYtPnZiLCBWQjJfQlVGX1NUQVRFX0RPTkUpOwogCX0KIHNraXA6CiAJdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIH0KIAotc3RhdGljIGludCBydGwyODMyX3Nkcl9raWxsX3VyYnMoc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzKQorc3RhdGljIGludCBydGwyODMyX3Nkcl9raWxsX3VyYnMoc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXYtPnBkZXY7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSBzLT51cmJzX3N1Ym1pdHRlZCAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCWRldl9kYmcoJnMtPnVkZXYtPmRldiwgImtpbGwgdXJiPSVkXG4iLCBpKTsKKwlmb3IgKGkgPSBkZXYtPnVyYnNfc3VibWl0dGVkIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAia2lsbCB1cmI9JWRcbiIsIGkpOwogCQkvKiBzdG9wIHRoZSBVUkIgKi8KLQkJdXNiX2tpbGxfdXJiKHMtPnVyYl9saXN0W2ldKTsKKwkJdXNiX2tpbGxfdXJiKGRldi0+dXJiX2xpc3RbaV0pOwogCX0KLQlzLT51cmJzX3N1Ym1pdHRlZCA9IDA7CisJZGV2LT51cmJzX3N1Ym1pdHRlZCA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBydGwyODMyX3Nkcl9zdWJtaXRfdXJicyhzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUgKnMpCitzdGF0aWMgaW50IHJ0bDI4MzJfc2RyX3N1Ym1pdF91cmJzKHN0cnVjdCBydGwyODMyX3Nkcl9kZXYgKmRldikKIHsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2LT5wZGV2OwogCWludCBpLCByZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcy0+dXJic19pbml0aWFsaXplZDsgaSsrKSB7Ci0JCWRldl9kYmcoJnMtPnVkZXYtPmRldiwgInN1Ym1pdCB1cmI9JWRcbiIsIGkpOwotCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihzLT51cmJfbGlzdFtpXSwgR0ZQX0FUT01JQyk7CisJZm9yIChpID0gMDsgaSA8IGRldi0+dXJic19pbml0aWFsaXplZDsgaSsrKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInN1Ym1pdCB1cmI9JWRcbiIsIGkpOworCQlyZXQgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnVyYl9saXN0W2ldLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJldCkgewotCQkJZGV2X2Vycigmcy0+dWRldi0+ZGV2LAotCQkJCQkiQ291bGQgbm90IHN1Ym1pdCB1cmIgbm8uICVkIC0gZ2V0IHRoZW0gYWxsIGJhY2tcbiIsCi0JCQkJCWkpOwotCQkJcnRsMjgzMl9zZHJfa2lsbF91cmJzKHMpOworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJDb3VsZCBub3Qgc3VibWl0IHVyYiBuby4gJWQgLSBnZXQgdGhlbSBhbGwgYmFja1xuIiwKKwkJCQlpKTsKKwkJCXJ0bDI4MzJfc2RyX2tpbGxfdXJicyhkZXYpOwogCQkJcmV0dXJuIHJldDsKIAkJfQotCQlzLT51cmJzX3N1Ym1pdHRlZCsrOworCQlkZXYtPnVyYnNfc3VibWl0dGVkKys7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnRsMjgzMl9zZHJfZnJlZV9zdHJlYW1fYnVmcyhzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUgKnMpCitzdGF0aWMgaW50IHJ0bDI4MzJfc2RyX2ZyZWVfc3RyZWFtX2J1ZnMoc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2KQogewotCWlmIChzLT5mbGFncyAmIFVTQl9TVEFURV9VUkJfQlVGKSB7Ci0JCXdoaWxlIChzLT5idWZfbnVtKSB7Ci0JCQlzLT5idWZfbnVtLS07Ci0JCQlkZXZfZGJnKCZzLT51ZGV2LT5kZXYsICJmcmVlIGJ1Zj0lZFxuIiwgcy0+YnVmX251bSk7Ci0JCQl1c2JfZnJlZV9jb2hlcmVudChzLT51ZGV2LCBzLT5idWZfc2l6ZSwKLQkJCQkJICBzLT5idWZfbGlzdFtzLT5idWZfbnVtXSwKLQkJCQkJICBzLT5kbWFfYWRkcltzLT5idWZfbnVtXSk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldi0+cGRldjsKKworCWlmIChkZXYtPmZsYWdzICYgVVNCX1NUQVRFX1VSQl9CVUYpIHsKKwkJd2hpbGUgKGRldi0+YnVmX251bSkgeworCQkJZGV2LT5idWZfbnVtLS07CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJmcmVlIGJ1Zj0lZFxuIiwgZGV2LT5idWZfbnVtKTsKKwkJCXVzYl9mcmVlX2NvaGVyZW50KGRldi0+dWRldiwgZGV2LT5idWZfc2l6ZSwKKwkJCQkJICBkZXYtPmJ1Zl9saXN0W2Rldi0+YnVmX251bV0sCisJCQkJCSAgZGV2LT5kbWFfYWRkcltkZXYtPmJ1Zl9udW1dKTsKIAkJfQogCX0KLQlzLT5mbGFncyAmPSB+VVNCX1NUQVRFX1VSQl9CVUY7CisJZGV2LT5mbGFncyAmPSB+VVNCX1NUQVRFX1VSQl9CVUY7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBydGwyODMyX3Nkcl9hbGxvY19zdHJlYW1fYnVmcyhzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUgKnMpCitzdGF0aWMgaW50IHJ0bDI4MzJfc2RyX2FsbG9jX3N0cmVhbV9idWZzKHN0cnVjdCBydGwyODMyX3Nkcl9kZXYgKmRldikKIHsKLQlzLT5idWZfbnVtID0gMDsKLQlzLT5idWZfc2l6ZSA9IEJVTEtfQlVGRkVSX1NJWkU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldi0+cGRldjsKIAotCWRldl9kYmcoJnMtPnVkZXYtPmRldiwgImFsbCBpbiBhbGwgSSB3aWxsIHVzZSAldSBieXRlcyBmb3Igc3RyZWFtaW5nXG4iLAotCQkJTUFYX0JVTEtfQlVGUyAqIEJVTEtfQlVGRkVSX1NJWkUpOworCWRldi0+YnVmX251bSA9IDA7CisJZGV2LT5idWZfc2l6ZSA9IEJVTEtfQlVGRkVSX1NJWkU7CiAKLQlmb3IgKHMtPmJ1Zl9udW0gPSAwOyBzLT5idWZfbnVtIDwgTUFYX0JVTEtfQlVGUzsgcy0+YnVmX251bSsrKSB7Ci0JCXMtPmJ1Zl9saXN0W3MtPmJ1Zl9udW1dID0gdXNiX2FsbG9jX2NvaGVyZW50KHMtPnVkZXYsCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiYWxsIGluIGFsbCBJIHdpbGwgdXNlICV1IGJ5dGVzIGZvciBzdHJlYW1pbmdcbiIsCisJCU1BWF9CVUxLX0JVRlMgKiBCVUxLX0JVRkZFUl9TSVpFKTsKKworCWZvciAoZGV2LT5idWZfbnVtID0gMDsgZGV2LT5idWZfbnVtIDwgTUFYX0JVTEtfQlVGUzsgZGV2LT5idWZfbnVtKyspIHsKKwkJZGV2LT5idWZfbGlzdFtkZXYtPmJ1Zl9udW1dID0gdXNiX2FsbG9jX2NvaGVyZW50KGRldi0+dWRldiwKIAkJCQlCVUxLX0JVRkZFUl9TSVpFLCBHRlBfQVRPTUlDLAotCQkJCSZzLT5kbWFfYWRkcltzLT5idWZfbnVtXSk7Ci0JCWlmICghcy0+YnVmX2xpc3Rbcy0+YnVmX251bV0pIHsKLQkJCWRldl9kYmcoJnMtPnVkZXYtPmRldiwgImFsbG9jIGJ1Zj0lZCBmYWlsZWRcbiIsCi0JCQkJCXMtPmJ1Zl9udW0pOwotCQkJcnRsMjgzMl9zZHJfZnJlZV9zdHJlYW1fYnVmcyhzKTsKKwkJCQkmZGV2LT5kbWFfYWRkcltkZXYtPmJ1Zl9udW1dKTsKKwkJaWYgKCFkZXYtPmJ1Zl9saXN0W2Rldi0+YnVmX251bV0pIHsKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwgImFsbG9jIGJ1Zj0lZCBmYWlsZWRcbiIsCisJCQkJZGV2LT5idWZfbnVtKTsKKwkJCXJ0bDI4MzJfc2RyX2ZyZWVfc3RyZWFtX2J1ZnMoZGV2KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKLQkJZGV2X2RiZygmcy0+dWRldi0+ZGV2LCAiYWxsb2MgYnVmPSVkICVwIChkbWEgJWxsdSlcbiIsCi0JCQkJcy0+YnVmX251bSwgcy0+YnVmX2xpc3Rbcy0+YnVmX251bV0sCi0JCQkJKGxvbmcgbG9uZylzLT5kbWFfYWRkcltzLT5idWZfbnVtXSk7Ci0JCXMtPmZsYWdzIHw9IFVTQl9TVEFURV9VUkJfQlVGOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJhbGxvYyBidWY9JWQgJXAgKGRtYSAlbGx1KVxuIiwKKwkJCWRldi0+YnVmX251bSwgZGV2LT5idWZfbGlzdFtkZXYtPmJ1Zl9udW1dLAorCQkJKGxvbmcgbG9uZylkZXYtPmRtYV9hZGRyW2Rldi0+YnVmX251bV0pOworCQlkZXYtPmZsYWdzIHw9IFVTQl9TVEFURV9VUkJfQlVGOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJ0bDI4MzJfc2RyX2ZyZWVfdXJicyhzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUgKnMpCitzdGF0aWMgaW50IHJ0bDI4MzJfc2RyX2ZyZWVfdXJicyhzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldi0+cGRldjsKIAlpbnQgaTsKIAotCXJ0bDI4MzJfc2RyX2tpbGxfdXJicyhzKTsKKwlydGwyODMyX3Nkcl9raWxsX3VyYnMoZGV2KTsKIAotCWZvciAoaSA9IHMtPnVyYnNfaW5pdGlhbGl6ZWQgLSAxOyBpID49IDA7IGktLSkgewotCQlpZiAocy0+dXJiX2xpc3RbaV0pIHsKLQkJCWRldl9kYmcoJnMtPnVkZXYtPmRldiwgImZyZWUgdXJiPSVkXG4iLCBpKTsKKwlmb3IgKGkgPSBkZXYtPnVyYnNfaW5pdGlhbGl6ZWQgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAoZGV2LT51cmJfbGlzdFtpXSkgeworCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZnJlZSB1cmI9JWRcbiIsIGkpOwogCQkJLyogZnJlZSB0aGUgVVJCcyAqLwotCQkJdXNiX2ZyZWVfdXJiKHMtPnVyYl9saXN0W2ldKTsKKwkJCXVzYl9mcmVlX3VyYihkZXYtPnVyYl9saXN0W2ldKTsKIAkJfQogCX0KLQlzLT51cmJzX2luaXRpYWxpemVkID0gMDsKKwlkZXYtPnVyYnNfaW5pdGlhbGl6ZWQgPSAwOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnRsMjgzMl9zZHJfYWxsb2NfdXJicyhzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUgKnMpCitzdGF0aWMgaW50IHJ0bDI4MzJfc2RyX2FsbG9jX3VyYnMoc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXYtPnBkZXY7CiAJaW50IGksIGo7CiAKIAkvKiBhbGxvY2F0ZSB0aGUgVVJCcyAqLwogCWZvciAoaSA9IDA7IGkgPCBNQVhfQlVMS19CVUZTOyBpKyspIHsKLQkJZGV2X2RiZygmcy0+dWRldi0+ZGV2LCAiYWxsb2MgdXJiPSVkXG4iLCBpKTsKLQkJcy0+dXJiX2xpc3RbaV0gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwotCQlpZiAoIXMtPnVyYl9saXN0W2ldKSB7Ci0JCQlkZXZfZGJnKCZzLT51ZGV2LT5kZXYsICJmYWlsZWRcbiIpOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJhbGxvYyB1cmI9JWRcbiIsIGkpOworCQlkZXYtPnVyYl9saXN0W2ldID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFkZXYtPnVyYl9saXN0W2ldKSB7CisJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJmYWlsZWRcbiIpOwogCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKLQkJCQl1c2JfZnJlZV91cmIocy0+dXJiX2xpc3Rbal0pOworCQkJCXVzYl9mcmVlX3VyYihkZXYtPnVyYl9saXN0W2pdKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCXVzYl9maWxsX2J1bGtfdXJiKHMtPnVyYl9saXN0W2ldLAotCQkJCXMtPnVkZXYsCi0JCQkJdXNiX3JjdmJ1bGtwaXBlKHMtPnVkZXYsIDB4ODEpLAotCQkJCXMtPmJ1Zl9saXN0W2ldLAorCQl1c2JfZmlsbF9idWxrX3VyYihkZXYtPnVyYl9saXN0W2ldLAorCQkJCWRldi0+dWRldiwKKwkJCQl1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCAweDgxKSwKKwkJCQlkZXYtPmJ1Zl9saXN0W2ldLAogCQkJCUJVTEtfQlVGRkVSX1NJWkUsCi0JCQkJcnRsMjgzMl9zZHJfdXJiX2NvbXBsZXRlLCBzKTsKKwkJCQlydGwyODMyX3Nkcl91cmJfY29tcGxldGUsIGRldik7CiAKLQkJcy0+dXJiX2xpc3RbaV0tPnRyYW5zZmVyX2ZsYWdzID0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7Ci0JCXMtPnVyYl9saXN0W2ldLT50cmFuc2Zlcl9kbWEgPSBzLT5kbWFfYWRkcltpXTsKLQkJcy0+dXJic19pbml0aWFsaXplZCsrOworCQlkZXYtPnVyYl9saXN0W2ldLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworCQlkZXYtPnVyYl9saXN0W2ldLT50cmFuc2Zlcl9kbWEgPSBkZXYtPmRtYV9hZGRyW2ldOworCQlkZXYtPnVyYnNfaW5pdGlhbGl6ZWQrKzsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB2Yl9xdWV1ZV9sb2NrIGhvbGQgKi8KLXN0YXRpYyB2b2lkIHJ0bDI4MzJfc2RyX2NsZWFudXBfcXVldWVkX2J1ZnMoc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzKQorc3RhdGljIHZvaWQgcnRsMjgzMl9zZHJfY2xlYW51cF9xdWV1ZWRfYnVmcyhzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYpCiB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldi0+cGRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGV2X2RiZygmcy0+dWRldi0+ZGV2LCAiXG4iKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJcbiIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPnF1ZXVlZF9idWZzX2xvY2ssIGZsYWdzKTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnMtPnF1ZXVlZF9idWZzKSkgeworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnF1ZXVlZF9idWZzX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldi0+cXVldWVkX2J1ZnMpKSB7CiAJCXN0cnVjdCBydGwyODMyX3Nkcl9mcmFtZV9idWYgKmJ1ZjsKIAotCQlidWYgPSBsaXN0X2VudHJ5KHMtPnF1ZXVlZF9idWZzLm5leHQsCisJCWJ1ZiA9IGxpc3RfZW50cnkoZGV2LT5xdWV1ZWRfYnVmcy5uZXh0LAogCQkJCXN0cnVjdCBydGwyODMyX3Nkcl9mcmFtZV9idWYsIGxpc3QpOwogCQlsaXN0X2RlbCgmYnVmLT5saXN0KTsKIAkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZiLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+cXVldWVkX2J1ZnNfbG9jaywgZmxhZ3MpOwotfQotCi0vKiBUaGUgdXNlciB5YW5rZWQgb3V0IHRoZSBjYWJsZS4uLiAqLwotc3RhdGljIHZvaWQgcnRsMjgzMl9zZHJfcmVsZWFzZV9zZWMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCi17Ci0Jc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzID0gZmUtPnNlY19wcml2OwotCi0JZGV2X2RiZygmcy0+dWRldi0+ZGV2LCAiXG4iKTsKLQotCW11dGV4X2xvY2soJnMtPnZiX3F1ZXVlX2xvY2spOwotCW11dGV4X2xvY2soJnMtPnY0bDJfbG9jayk7Ci0JLyogTm8gbmVlZCB0byBrZWVwIHRoZSB1cmJzIGFyb3VuZCBhZnRlciBkaXNjb25uZWN0aW9uICovCi0Jcy0+dWRldiA9IE5VTEw7Ci0KLQl2NGwyX2RldmljZV9kaXNjb25uZWN0KCZzLT52NGwyX2Rldik7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnMtPnZkZXYpOwotCW11dGV4X3VubG9jaygmcy0+djRsMl9sb2NrKTsKLQltdXRleF91bmxvY2soJnMtPnZiX3F1ZXVlX2xvY2spOwotCi0JdjRsMl9kZXZpY2VfcHV0KCZzLT52NGwyX2Rldik7Ci0KLQlmZS0+c2VjX3ByaXYgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cXVldWVkX2J1ZnNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IHJ0bDI4MzJfc2RyX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQogewotCXN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSAqcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2LT5wZGV2OwogCi0JZGV2X2RiZygmcy0+dWRldi0+ZGV2LCAiXG4iKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJcbiIpOwogCiAJc3RybGNweShjYXAtPmRyaXZlciwgS0JVSUxEX01PRE5BTUUsIHNpemVvZihjYXAtPmRyaXZlcikpOwotCXN0cmxjcHkoY2FwLT5jYXJkLCBzLT52ZGV2Lm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKLQl1c2JfbWFrZV9wYXRoKHMtPnVkZXYsIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CisJc3RybGNweShjYXAtPmNhcmQsIGRldi0+dmRldi5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7CisJdXNiX21ha2VfcGF0aChkZXYtPnVkZXYsIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CiAJY2FwLT5kZXZpY2VfY2FwcyA9IFY0TDJfQ0FQX1NEUl9DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HIHwKIAkJCVY0TDJfQ0FQX1JFQURXUklURSB8IFY0TDJfQ0FQX1RVTkVSOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gY2FwLT5kZXZpY2VfY2FwcyB8IFY0TDJfQ0FQX0RFVklDRV9DQVBTOwpAQCAtNjI3LDI2ICs0ODYsMjYgQEAKIAkJY29uc3Qgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQsIHVuc2lnbmVkIGludCAqbmJ1ZmZlcnMsCiAJCXVuc2lnbmVkIGludCAqbnBsYW5lcywgdW5zaWduZWQgaW50IHNpemVzW10sIHZvaWQgKmFsbG9jX2N0eHNbXSkKIHsKLQlzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUgKnMgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2LT5wZGV2OwogCi0JZGV2X2RiZygmcy0+dWRldi0+ZGV2LCAibmJ1ZmZlcnM9JWRcbiIsICpuYnVmZmVycyk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAibmJ1ZmZlcnM9JWRcbiIsICpuYnVmZmVycyk7CiAKIAkvKiBOZWVkIGF0IGxlYXN0IDggYnVmZmVycyAqLwogCWlmICh2cS0+bnVtX2J1ZmZlcnMgKyAqbmJ1ZmZlcnMgPCA4KQogCQkqbmJ1ZmZlcnMgPSA4IC0gdnEtPm51bV9idWZmZXJzOwogCSpucGxhbmVzID0gMTsKLQlzaXplc1swXSA9IFBBR0VfQUxJR04ocy0+YnVmZmVyc2l6ZSk7Ci0JZGV2X2RiZygmcy0+dWRldi0+ZGV2LCAibmJ1ZmZlcnM9JWQgc2l6ZXNbMF09JWRcbiIsCi0JCQkqbmJ1ZmZlcnMsIHNpemVzWzBdKTsKKwlzaXplc1swXSA9IFBBR0VfQUxJR04oZGV2LT5idWZmZXJzaXplKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJuYnVmZmVycz0lZCBzaXplc1swXT0lZFxuIiwgKm5idWZmZXJzLCBzaXplc1swXSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcnRsMjgzMl9zZHJfYnVmX3ByZXBhcmUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQogewotCXN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSAqcyA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7CisJc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2ID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVlKTsKIAogCS8qIERvbid0IGFsbG93IHF1ZWluZyBuZXcgYnVmZmVycyBhZnRlciBkZXZpY2UgZGlzY29ubmVjdGlvbiAqLwotCWlmICghcy0+dWRldikKKwlpZiAoIWRldi0+dWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXR1cm4gMDsKQEAgLTY1NCw0NiArNTEzLDQ4IEBACiAKIHN0YXRpYyB2b2lkIHJ0bDI4MzJfc2RyX2J1Zl9xdWV1ZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCiB7Ci0Jc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVlKTsKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYgPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOwogCXN0cnVjdCBydGwyODMyX3Nkcl9mcmFtZV9idWYgKmJ1ZiA9CiAJCQljb250YWluZXJfb2YodmIsIHN0cnVjdCBydGwyODMyX3Nkcl9mcmFtZV9idWYsIHZiKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogQ2hlY2sgdGhlIGRldmljZSBoYXMgbm90IGRpc2Nvbm5lY3RlZCBiZXR3ZWVuIHByZXAgYW5kIHF1ZXVpbmcgKi8KLQlpZiAoIXMtPnVkZXYpIHsKKwlpZiAoIWRldi0+dWRldikgewogCQl2YjJfYnVmZmVyX2RvbmUoJmJ1Zi0+dmIsIFZCMl9CVUZfU1RBVEVfRVJST1IpOwogCQlyZXR1cm47CiAJfQogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPnF1ZXVlZF9idWZzX2xvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZidWYtPmxpc3QsICZzLT5xdWV1ZWRfYnVmcyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+cXVldWVkX2J1ZnNfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnF1ZXVlZF9idWZzX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZidWYtPmxpc3QsICZkZXYtPnF1ZXVlZF9idWZzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnF1ZXVlZF9idWZzX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBydGwyODMyX3Nkcl9zZXRfYWRjKHN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSAqcykKK3N0YXRpYyBpbnQgcnRsMjgzMl9zZHJfc2V0X2FkYyhzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYpCiB7Ci0Jc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBzLT5mZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2LT5wZGV2OworCXN0cnVjdCBydGwyODMyX3Nkcl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlID0gcGRhdGEtPmR2Yl9mcm9udGVuZDsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCBmX3NyLCBmX2lmOwogCXU4IGJ1Zls0XSwgdTh0bXAxLCB1OHRtcDI7CiAJdTY0IHU2NHRtcDsKIAl1MzIgdTMydG1wOwogCi0JZGV2X2RiZygmcy0+dWRldi0+ZGV2LCAiZl9hZGM9JXVcbiIsIHMtPmZfYWRjKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJmX2FkYz0ldVxuIiwgZGV2LT5mX2FkYyk7CiAKLQlpZiAoIXRlc3RfYml0KFBPV0VSX09OLCAmcy0+ZmxhZ3MpKQorCWlmICghdGVzdF9iaXQoUE9XRVJfT04sICZkZXYtPmZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAocy0+Zl9hZGMgPT0gMCkKKwlpZiAoZGV2LT5mX2FkYyA9PSAwKQogCQlyZXR1cm4gMDsKIAotCWZfc3IgPSBzLT5mX2FkYzsKKwlmX3NyID0gZGV2LT5mX2FkYzsKIAotCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxM2UsICJceDAwXHgwMCIsIDIpOworCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEzZSwgIlx4MDBceDAwIiwgMik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTE1LCAiXHgwMFx4MDBceDAwXHgwMCIsIDQpOworCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDExNSwgIlx4MDBceDAwXHgwMFx4MDAiLCA0KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIApAQCAtNzA3LDE5ICs1NjgsMTkgQEAKIAkJZ290byBlcnI7CiAKIAkvKiBwcm9ncmFtIElGICovCi0JdTY0dG1wID0gZl9pZiAlIHMtPmNmZy0+eHRhbDsKKwl1NjR0bXAgPSBmX2lmICUgcGRhdGEtPmNsazsKIAl1NjR0bXAgKj0gMHg0MDAwMDA7Ci0JdTY0dG1wID0gZGl2X3U2NCh1NjR0bXAsIHMtPmNmZy0+eHRhbCk7CisJdTY0dG1wID0gZGl2X3U2NCh1NjR0bXAsIHBkYXRhLT5jbGspOwogCXU2NHRtcCA9IC11NjR0bXA7CiAJdTMydG1wID0gdTY0dG1wICYgMHgzZmZmZmY7CiAKLQlkZXZfZGJnKCZzLT51ZGV2LT5kZXYsICJmX2lmPSV1IGlmX2N0bD0lMDh4XG4iLCBmX2lmLCB1MzJ0bXApOworCWRldl9kYmcoJnBkZXYtPmRldiwgImZfaWY9JXUgaWZfY3RsPSUwOHhcbiIsIGZfaWYsIHUzMnRtcCk7CiAKIAlidWZbMF0gPSAodTMydG1wID4+IDE2KSAmIDB4ZmY7CiAJYnVmWzFdID0gKHUzMnRtcCA+PiAgOCkgJiAweGZmOwogCWJ1ZlsyXSA9ICh1MzJ0bXAgPj4gIDApICYgMHhmZjsKIAotCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxMTksIGJ1ZiwgMyk7CisJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MTE5LCBidWYsIDMpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCkBAIC03MzMsMjA4ICs1OTQsMjEyIEBACiAJCXU4dG1wMiA9IDB4Y2Q7IC8qIGVuYWJsZSBBREMgSSwgQURDIFEgKi8KIAl9CiAKLQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWcocywgMHgxYjEsIHU4dG1wMSk7CisJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVnKGRldiwgMHgxYjEsIHU4dG1wMSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWcocywgMHgwMDgsIHU4dG1wMik7CisJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVnKGRldiwgMHgwMDgsIHU4dG1wMik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWcocywgMHgwMDYsIDB4ODApOworCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZyhkZXYsIDB4MDA2LCAweDgwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCS8qIHByb2dyYW0gc2FtcGxpbmcgcmF0ZSAocmVzYW1wbGluZyBkb3duKSAqLwotCXUzMnRtcCA9IGRpdl91NjQocy0+Y2ZnLT54dGFsICogMHg0MDAwMDBVTEwsIGZfc3IgKiA0VSk7CisJdTMydG1wID0gZGl2X3U2NChwZGF0YS0+Y2xrICogMHg0MDAwMDBVTEwsIGZfc3IgKiA0VSk7CiAJdTMydG1wIDw8PSAyOwogCWJ1ZlswXSA9ICh1MzJ0bXAgPj4gMjQpICYgMHhmZjsKIAlidWZbMV0gPSAodTMydG1wID4+IDE2KSAmIDB4ZmY7CiAJYnVmWzJdID0gKHUzMnRtcCA+PiAgOCkgJiAweGZmOwogCWJ1ZlszXSA9ICh1MzJ0bXAgPj4gIDApICYgMHhmZjsKLQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTlmLCBidWYsIDQpOworCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDE5ZiwgYnVmLCA0KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCS8qIGxvdy1wYXNzIGZpbHRlciAqLwotCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxMWMsCisJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MTFjLAogCQkJIlx4Y2FceGRjXHhkN1x4ZDhceGUwXHhmMlx4MGVceDM1XHgwNlx4NTBceDljXHgwZFx4NzFceDExXHgxNFx4NzFceDc0XHgxOVx4NDFceGE1IiwKIAkJCTIwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAotCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgwMTcsICJceDExXHgxMCIsIDIpOworCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDAxNywgIlx4MTFceDEwIiwgMik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAkvKiBtb2RlICovCi0JcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDAxOSwgIlx4MDUiLCAxKTsKKwlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgwMTksICJceDA1IiwgMSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MDFhLCAiXHgxYlx4MTZceDBkXHgwNlx4MDFceGZmIiwgNik7CisJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MDFhLCAiXHgxYlx4MTZceDBkXHgwNlx4MDFceGZmIiwgNik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAkvKiBGU00gKi8KLQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTkyLCAiXHgwMFx4ZjBceDBmIiwgMyk7CisJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MTkyLCAiXHgwMFx4ZjBceDBmIiwgMyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAkvKiBQSUQgZmlsdGVyICovCi0JcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDA2MSwgIlx4NjAiLCAxKTsKKwlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgwNjEsICJceDYwIiwgMSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAkvKiB1c2VkIFJGIHR1bmVyIGJhc2VkIHNldHRpbmdzICovCi0Jc3dpdGNoIChzLT5jZmctPnR1bmVyKSB7Ci0JY2FzZSBSVEwyODMyX1RVTkVSX0U0MDAwOgotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTEyLCAiXHg1YSIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTAyLCAiXHg0MCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTAzLCAiXHg1YSIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWM3LCAiXHgzMCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTA0LCAiXHhkMCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTA1LCAiXHhiZSIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWM4LCAiXHgxOCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTA2LCAiXHgzNSIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWM5LCAiXHgyMSIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWNhLCAiXHgyMSIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWNiLCAiXHgwMCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTA3LCAiXHg0MCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWNkLCAiXHgxMCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWNlLCAiXHgxMCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTA4LCAiXHg4MCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTA5LCAiXHg3ZiIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTBhLCAiXHg4MCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTBiLCAiXHg3ZiIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MDBlLCAiXHhmYyIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MDBlLCAiXHhmYyIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MDExLCAiXHhkNCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWU1LCAiXHhmMCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWQ5LCAiXHgwMCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWRiLCAiXHgwMCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWRkLCAiXHgxNCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWRlLCAiXHhlYyIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWQ4LCAiXHgwYyIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWU2LCAiXHgwMiIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWQ3LCAiXHgwOSIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MDBkLCAiXHg4MyIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MDEwLCAiXHg0OSIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MDBkLCAiXHg4NyIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MDBkLCAiXHg4NSIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MDEzLCAiXHgwMiIsIDEpOworCXN3aXRjaCAocGRhdGEtPnR1bmVyKSB7CisJY2FzZSBSVEwyODMyX1NEUl9UVU5FUl9FNDAwMDoKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MTEyLCAiXHg1YSIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxMDIsICJceDQwIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEwMywgIlx4NWEiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWM3LCAiXHgzMCIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxMDQsICJceGQwIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEwNSwgIlx4YmUiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWM4LCAiXHgxOCIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxMDYsICJceDM1IiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDFjOSwgIlx4MjEiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWNhLCAiXHgyMSIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxY2IsICJceDAwIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEwNywgIlx4NDAiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWNkLCAiXHgxMCIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxY2UsICJceDEwIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEwOCwgIlx4ODAiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MTA5LCAiXHg3ZiIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxMGEsICJceDgwIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEwYiwgIlx4N2YiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MDBlLCAiXHhmYyIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgwMGUsICJceGZjIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDAxMSwgIlx4ZDQiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWU1LCAiXHhmMCIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxZDksICJceDAwIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDFkYiwgIlx4MDAiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWRkLCAiXHgxNCIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxZGUsICJceGVjIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDFkOCwgIlx4MGMiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWU2LCAiXHgwMiIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxZDcsICJceDA5IiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDAwZCwgIlx4ODMiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MDEwLCAiXHg0OSIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgwMGQsICJceDg3IiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDAwZCwgIlx4ODUiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MDEzLCAiXHgwMiIsIDEpOwogCQlicmVhazsKLQljYXNlIFJUTDI4MzJfVFVORVJfRkMwMDEyOgotCWNhc2UgUlRMMjgzMl9UVU5FUl9GQzAwMTM6Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxMTIsICJceDVhIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxMDIsICJceDQwIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxMDMsICJceDVhIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxYzcsICJceDJjIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxMDQsICJceGNjIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxMDUsICJceGJlIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxYzgsICJceDE2IiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxMDYsICJceDM1IiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxYzksICJceDIxIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxY2EsICJceDIxIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxY2IsICJceDAwIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxMDcsICJceDQwIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxY2QsICJceDEwIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxY2UsICJceDEwIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxMDgsICJceDgwIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxMDksICJceDdmIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxMGEsICJceDgwIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgxMGIsICJceDdmIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgwMGUsICJceGZjIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgwMGUsICJceGZjIiwgMSk7Ci0JCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgwMTEsICJceGU5XHhiZiIsIDIpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWU1LCAiXHhmMCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWQ5LCAiXHgwMCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWRiLCAiXHgwMCIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWRkLCAiXHgxMSIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWRlLCAiXHhlZiIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWQ4LCAiXHgwYyIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWU2LCAiXHgwMiIsIDEpOwotCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MWQ3LCAiXHgwOSIsIDEpOworCWNhc2UgUlRMMjgzMl9TRFJfVFVORVJfRkMwMDEyOgorCWNhc2UgUlRMMjgzMl9TRFJfVFVORVJfRkMwMDEzOgorCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxMTIsICJceDVhIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEwMiwgIlx4NDAiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MTAzLCAiXHg1YSIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxYzcsICJceDJjIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEwNCwgIlx4Y2MiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MTA1LCAiXHhiZSIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxYzgsICJceDE2IiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEwNiwgIlx4MzUiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWM5LCAiXHgyMSIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxY2EsICJceDIxIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDFjYiwgIlx4MDAiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MTA3LCAiXHg0MCIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxY2QsICJceDEwIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDFjZSwgIlx4MTAiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MTA4LCAiXHg4MCIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxMDksICJceDdmIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEwYSwgIlx4ODAiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MTBiLCAiXHg3ZiIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgwMGUsICJceGZjIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDAwZSwgIlx4ZmMiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MDExLCAiXHhlOVx4YmYiLCAyKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWU1LCAiXHhmMCIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxZDksICJceDAwIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDFkYiwgIlx4MDAiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWRkLCAiXHgxMSIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxZGUsICJceGVmIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDFkOCwgIlx4MGMiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWU2LCAiXHgwMiIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxZDcsICJceDA5IiwgMSk7CiAJCWJyZWFrOwotCWNhc2UgUlRMMjgzMl9UVU5FUl9SODIwVDoKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDExMiwgIlx4NWEiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDEwMiwgIlx4NDAiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDExNSwgIlx4MDEiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDEwMywgIlx4ODAiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDFjNywgIlx4MjQiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDEwNCwgIlx4Y2MiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDEwNSwgIlx4YmUiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDFjOCwgIlx4MTQiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDEwNiwgIlx4MzUiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDFjOSwgIlx4MjEiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDFjYSwgIlx4MjEiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDFjYiwgIlx4MDAiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDEwNywgIlx4NDAiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDFjZCwgIlx4MTAiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDFjZSwgIlx4MTAiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDEwOCwgIlx4ODAiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDEwOSwgIlx4N2YiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDEwYSwgIlx4ODAiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDEwYiwgIlx4N2YiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDAwZSwgIlx4ZmMiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDAwZSwgIlx4ZmMiLCAxKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDAxMSwgIlx4ZjQiLCAxKTsKKwljYXNlIFJUTDI4MzJfU0RSX1RVTkVSX1I4MjBUOgorCWNhc2UgUlRMMjgzMl9TRFJfVFVORVJfUjgyOEQ6CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDExMiwgIlx4NWEiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MTAyLCAiXHg0MCIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxMTUsICJceDAxIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEwMywgIlx4ODAiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWM3LCAiXHgyNCIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxMDQsICJceGNjIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEwNSwgIlx4YmUiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWM4LCAiXHgxNCIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxMDYsICJceDM1IiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDFjOSwgIlx4MjEiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWNhLCAiXHgyMSIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxY2IsICJceDAwIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEwNywgIlx4NDAiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MWNkLCAiXHgxMCIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxY2UsICJceDEwIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEwOCwgIlx4ODAiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MTA5LCAiXHg3ZiIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxMGEsICJceDgwIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDEwYiwgIlx4N2YiLCAxKTsKKwkJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MDBlLCAiXHhmYyIsIDEpOworCQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgwMGUsICJceGZjIiwgMSk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDAxMSwgIlx4ZjQiLCAxKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X25vdGljZSgmcy0+dWRldi0+ZGV2LCAiVW5zdXBwb3J0ZWQgdHVuZXJcbiIpOworCQlkZXZfbm90aWNlKCZwZGV2LT5kZXYsICJVbnN1cHBvcnRlZCB0dW5lclxuIik7CiAJfQogCiAJLyogc29mdHdhcmUgcmVzZXQgKi8KLQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdfbWFzayhzLCAweDEwMSwgMHgwNCwgMHgwNCk7CisJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVnX21hc2soZGV2LCAweDEwMSwgMHgwNCwgMHgwNCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdfbWFzayhzLCAweDEwMSwgMHgwMCwgMHgwNCk7CisJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVnX21hc2soZGV2LCAweDEwMSwgMHgwMCwgMHgwNCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiBlcnI6CiAJcmV0dXJuIHJldDsKIH07CiAKLXN0YXRpYyB2b2lkIHJ0bDI4MzJfc2RyX3Vuc2V0X2FkYyhzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUgKnMpCitzdGF0aWMgdm9pZCBydGwyODMyX3Nkcl91bnNldF9hZGMoc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2KQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXYtPnBkZXY7CiAJaW50IHJldDsKIAotCWRldl9kYmcoJnMtPnVkZXYtPmRldiwgIlxuIik7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiXG4iKTsKIAogCS8qIFBJRCBmaWx0ZXIgKi8KLQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MDYxLCAiXHhlMCIsIDEpOworCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDA2MSwgIlx4ZTAiLCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCS8qIG1vZGUgKi8KLQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MDE5LCAiXHgyMCIsIDEpOworCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDAxOSwgIlx4MjAiLCAxKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAotCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MocywgMHgwMTcsICJceDExXHgxMCIsIDIpOworCXJldCA9IHJ0bDI4MzJfc2RyX3dyX3JlZ3MoZGV2LCAweDAxNywgIlx4MTFceDEwIiwgMik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAkvKiBGU00gKi8KLQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTkyLCAiXHgwMFx4MGZceGZmIiwgMyk7CisJcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhkZXYsIDB4MTkyLCAiXHgwMFx4MGZceGZmIiwgMyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKHMsIDB4MTNlLCAiXHg0MFx4MDAiLCAyKTsKKwlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxM2UsICJceDQwXHgwMCIsIDIpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JcmV0ID0gcnRsMjgzMl9zZHJfd3JfcmVncyhzLCAweDExNSwgIlx4MDZceDNmXHhjZVx4Y2MiLCA0KTsKKwlyZXQgPSBydGwyODMyX3Nkcl93cl9yZWdzKGRldiwgMHgxMTUsICJceDA2XHgzZlx4Y2VceGNjIiwgNCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiBlcnI6CiAJcmV0dXJuOwogfTsKIAotc3RhdGljIGludCBydGwyODMyX3Nkcl9zZXRfdHVuZXJfZnJlcShzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUgKnMpCitzdGF0aWMgaW50IHJ0bDI4MzJfc2RyX3NldF90dW5lcl9mcmVxKHN0cnVjdCBydGwyODMyX3Nkcl9kZXYgKmRldikKIHsKLQlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSA9IHMtPmZlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXYtPnBkZXY7CisJc3RydWN0IHJ0bDI4MzJfc2RyX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBwZGF0YS0+ZHZiX2Zyb250ZW5kOwogCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwogCXN0cnVjdCB2NGwyX2N0cmwgKmJhbmR3aWR0aF9hdXRvOwogCXN0cnVjdCB2NGwyX2N0cmwgKmJhbmR3aWR0aDsKQEAgLTk0MiwyOSArODA3LDI5IEBACiAJLyoKIAkgKiB0dW5lciBSRiAoSHopCiAJICovCi0JaWYgKHMtPmZfdHVuZXIgPT0gMCkKKwlpZiAoZGV2LT5mX3R1bmVyID09IDApCiAJCXJldHVybiAwOwogCiAJLyoKIAkgKiBiYW5kd2lkdGggKEh6KQogCSAqLwotCWJhbmR3aWR0aF9hdXRvID0gdjRsMl9jdHJsX2ZpbmQoJnMtPmhkbCwKKwliYW5kd2lkdGhfYXV0byA9IHY0bDJfY3RybF9maW5kKCZkZXYtPmhkbCwKIAkJCQkJVjRMMl9DSURfUkZfVFVORVJfQkFORFdJRFRIX0FVVE8pOwotCWJhbmR3aWR0aCA9IHY0bDJfY3RybF9maW5kKCZzLT5oZGwsIFY0TDJfQ0lEX1JGX1RVTkVSX0JBTkRXSURUSCk7CisJYmFuZHdpZHRoID0gdjRsMl9jdHJsX2ZpbmQoJmRldi0+aGRsLCBWNEwyX0NJRF9SRl9UVU5FUl9CQU5EV0lEVEgpOwogCWlmICh2NGwyX2N0cmxfZ19jdHJsKGJhbmR3aWR0aF9hdXRvKSkgewotCQljLT5iYW5kd2lkdGhfaHogPSBzLT5mX2FkYzsKLQkJdjRsMl9jdHJsX3NfY3RybChiYW5kd2lkdGgsIHMtPmZfYWRjKTsKKwkJYy0+YmFuZHdpZHRoX2h6ID0gZGV2LT5mX2FkYzsKKwkJdjRsMl9jdHJsX3NfY3RybChiYW5kd2lkdGgsIGRldi0+Zl9hZGMpOwogCX0gZWxzZSB7CiAJCWMtPmJhbmR3aWR0aF9oeiA9IHY0bDJfY3RybF9nX2N0cmwoYmFuZHdpZHRoKTsKIAl9CiAKLQljLT5mcmVxdWVuY3kgPSBzLT5mX3R1bmVyOworCWMtPmZyZXF1ZW5jeSA9IGRldi0+Zl90dW5lcjsKIAljLT5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfRFZCVDsKIAotCWRldl9kYmcoJnMtPnVkZXYtPmRldiwgImZyZXF1ZW5jeT0ldSBiYW5kd2lkdGg9JWRcbiIsCi0JCQljLT5mcmVxdWVuY3ksIGMtPmJhbmR3aWR0aF9oeik7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiZnJlcXVlbmN5PSV1IGJhbmR3aWR0aD0lZFxuIiwKKwkJYy0+ZnJlcXVlbmN5LCBjLT5iYW5kd2lkdGhfaHopOwogCi0JaWYgKCF0ZXN0X2JpdChQT1dFUl9PTiwgJnMtPmZsYWdzKSkKKwlpZiAoIXRlc3RfYml0KFBPV0VSX09OLCAmZGV2LT5mbGFncykpCiAJCXJldHVybiAwOwogCiAJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpCkBAIC05NzMsMTEgKzgzOCwxMyBAQAogCXJldHVybiAwOwogfTsKIAotc3RhdGljIGludCBydGwyODMyX3Nkcl9zZXRfdHVuZXIoc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzKQorc3RhdGljIGludCBydGwyODMyX3Nkcl9zZXRfdHVuZXIoc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2KQogewotCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlID0gcy0+ZmU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldi0+cGRldjsKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSA9IHBkYXRhLT5kdmJfZnJvbnRlbmQ7CiAKLQlkZXZfZGJnKCZzLT51ZGV2LT5kZXYsICJcbiIpOworCWRldl9kYmcoJnBkZXYtPmRldiwgIlxuIik7CiAKIAlpZiAoZmUtPm9wcy50dW5lcl9vcHMuaW5pdCkKIAkJZmUtPm9wcy50dW5lcl9vcHMuaW5pdChmZSk7CkBAIC05ODUsMTEgKzg1MiwxMyBAQAogCXJldHVybiAwOwogfTsKIAotc3RhdGljIHZvaWQgcnRsMjgzMl9zZHJfdW5zZXRfdHVuZXIoc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzKQorc3RhdGljIHZvaWQgcnRsMjgzMl9zZHJfdW5zZXRfdHVuZXIoc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2KQogewotCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlID0gcy0+ZmU7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldi0+cGRldjsKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSA9IHBkYXRhLT5kdmJfZnJvbnRlbmQ7CiAKLQlkZXZfZGJnKCZzLT51ZGV2LT5kZXYsICJcbiIpOworCWRldl9kYmcoJnBkZXYtPmRldiwgIlxuIik7CiAKIAlpZiAoZmUtPm9wcy50dW5lcl9vcHMuc2xlZXApCiAJCWZlLT5vcHMudHVuZXJfb3BzLnNsZWVwKGZlKTsKQEAgLTk5OSw4MyArODY4LDg5IEBACiAKIHN0YXRpYyBpbnQgcnRsMjgzMl9zZHJfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0Jc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzID0gdmIyX2dldF9kcnZfcHJpdih2cSk7CisJc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2ID0gdmIyX2dldF9kcnZfcHJpdih2cSk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldi0+cGRldjsKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBwZGF0YS0+ZHZiX3VzYl9kZXZpY2U7CiAJaW50IHJldDsKIAotCWRldl9kYmcoJnMtPnVkZXYtPmRldiwgIlxuIik7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiXG4iKTsKIAotCWlmICghcy0+dWRldikKKwlpZiAoIWRldi0+dWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZzLT52NGwyX2xvY2spKQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+djRsMl9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCWlmIChzLT5kLT5wcm9wcy0+cG93ZXJfY3RybCkKLQkJcy0+ZC0+cHJvcHMtPnBvd2VyX2N0cmwocy0+ZCwgMSk7CisJaWYgKGQtPnByb3BzLT5wb3dlcl9jdHJsKQorCQlkLT5wcm9wcy0+cG93ZXJfY3RybChkLCAxKTsKIAogCS8qIGVuYWJsZSBBREMgKi8KLQlpZiAocy0+ZC0+cHJvcHMtPmZyb250ZW5kX2N0cmwpCi0JCXMtPmQtPnByb3BzLT5mcm9udGVuZF9jdHJsKHMtPmZlLCAxKTsKKwlpZiAoZC0+cHJvcHMtPmZyb250ZW5kX2N0cmwpCisJCWQtPnByb3BzLT5mcm9udGVuZF9jdHJsKHBkYXRhLT5kdmJfZnJvbnRlbmQsIDEpOwogCi0Jc2V0X2JpdChQT1dFUl9PTiwgJnMtPmZsYWdzKTsKKwlzZXRfYml0KFBPV0VSX09OLCAmZGV2LT5mbGFncyk7CiAKLQlyZXQgPSBydGwyODMyX3Nkcl9zZXRfdHVuZXIocyk7CisJcmV0ID0gcnRsMjgzMl9zZHJfc2V0X3R1bmVyKGRldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBydGwyODMyX3Nkcl9zZXRfdHVuZXJfZnJlcShzKTsKKwlyZXQgPSBydGwyODMyX3Nkcl9zZXRfdHVuZXJfZnJlcShkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JcmV0ID0gcnRsMjgzMl9zZHJfc2V0X2FkYyhzKTsKKwlyZXQgPSBydGwyODMyX3Nkcl9zZXRfYWRjKGRldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBydGwyODMyX3Nkcl9hbGxvY19zdHJlYW1fYnVmcyhzKTsKKwlyZXQgPSBydGwyODMyX3Nkcl9hbGxvY19zdHJlYW1fYnVmcyhkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JcmV0ID0gcnRsMjgzMl9zZHJfYWxsb2NfdXJicyhzKTsKKwlyZXQgPSBydGwyODMyX3Nkcl9hbGxvY191cmJzKGRldik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlzLT5zZXF1ZW5jZSA9IDA7CisJZGV2LT5zZXF1ZW5jZSA9IDA7CiAKLQlyZXQgPSBydGwyODMyX3Nkcl9zdWJtaXRfdXJicyhzKTsKKwlyZXQgPSBydGwyODMyX3Nkcl9zdWJtaXRfdXJicyhkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCiBlcnI6Ci0JbXV0ZXhfdW5sb2NrKCZzLT52NGwyX2xvY2spOworCW11dGV4X3VubG9jaygmZGV2LT52NGwyX2xvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgcnRsMjgzMl9zZHJfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEpCiB7Ci0Jc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzID0gdmIyX2dldF9kcnZfcHJpdih2cSk7CisJc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2ID0gdmIyX2dldF9kcnZfcHJpdih2cSk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldi0+cGRldjsKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBwZGF0YS0+ZHZiX3VzYl9kZXZpY2U7CiAKLQlkZXZfZGJnKCZzLT51ZGV2LT5kZXYsICJcbiIpOworCWRldl9kYmcoJnBkZXYtPmRldiwgIlxuIik7CiAKLQltdXRleF9sb2NrKCZzLT52NGwyX2xvY2spOworCW11dGV4X2xvY2soJmRldi0+djRsMl9sb2NrKTsKIAotCXJ0bDI4MzJfc2RyX2tpbGxfdXJicyhzKTsKLQlydGwyODMyX3Nkcl9mcmVlX3VyYnMocyk7Ci0JcnRsMjgzMl9zZHJfZnJlZV9zdHJlYW1fYnVmcyhzKTsKLQlydGwyODMyX3Nkcl9jbGVhbnVwX3F1ZXVlZF9idWZzKHMpOwotCXJ0bDI4MzJfc2RyX3Vuc2V0X2FkYyhzKTsKLQlydGwyODMyX3Nkcl91bnNldF90dW5lcihzKTsKKwlydGwyODMyX3Nkcl9raWxsX3VyYnMoZGV2KTsKKwlydGwyODMyX3Nkcl9mcmVlX3VyYnMoZGV2KTsKKwlydGwyODMyX3Nkcl9mcmVlX3N0cmVhbV9idWZzKGRldik7CisJcnRsMjgzMl9zZHJfY2xlYW51cF9xdWV1ZWRfYnVmcyhkZXYpOworCXJ0bDI4MzJfc2RyX3Vuc2V0X2FkYyhkZXYpOworCXJ0bDI4MzJfc2RyX3Vuc2V0X3R1bmVyKGRldik7CiAKLQljbGVhcl9iaXQoUE9XRVJfT04sICZzLT5mbGFncyk7CisJY2xlYXJfYml0KFBPV0VSX09OLCAmZGV2LT5mbGFncyk7CiAKIAkvKiBkaXNhYmxlIEFEQyAqLwotCWlmIChzLT5kLT5wcm9wcy0+ZnJvbnRlbmRfY3RybCkKLQkJcy0+ZC0+cHJvcHMtPmZyb250ZW5kX2N0cmwocy0+ZmUsIDApOworCWlmIChkLT5wcm9wcy0+ZnJvbnRlbmRfY3RybCkKKwkJZC0+cHJvcHMtPmZyb250ZW5kX2N0cmwocGRhdGEtPmR2Yl9mcm9udGVuZCwgMCk7CiAKLQlpZiAocy0+ZC0+cHJvcHMtPnBvd2VyX2N0cmwpCi0JCXMtPmQtPnByb3BzLT5wb3dlcl9jdHJsKHMtPmQsIDApOworCWlmIChkLT5wcm9wcy0+cG93ZXJfY3RybCkKKwkJZC0+cHJvcHMtPnBvd2VyX2N0cmwoZCwgMCk7CiAKLQltdXRleF91bmxvY2soJnMtPnY0bDJfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnY0bDJfbG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmIyX29wcyBydGwyODMyX3Nkcl92YjJfb3BzID0gewpAQCAtMTA5MSw5ICs5NjYsMTAgQEAKIHN0YXRpYyBpbnQgcnRsMjgzMl9zZHJfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXYtPnBkZXY7CiAKLQlkZXZfZGJnKCZzLT51ZGV2LT5kZXYsICJpbmRleD0lZCB0eXBlPSVkXG4iLCB2LT5pbmRleCwgdi0+dHlwZSk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiaW5kZXg9JWQgdHlwZT0lZFxuIiwgdi0+aW5kZXgsIHYtPnR5cGUpOwogCiAJaWYgKHYtPmluZGV4ID09IDApIHsKIAkJc3RybGNweSh2LT5uYW1lLCAiQURDOiBSZWFsdGVrIFJUTDI4MzIiLCBzaXplb2Yodi0+bmFtZSkpOwpAQCAtMTExNyw5ICs5OTMsMTAgQEAKIHN0YXRpYyBpbnQgcnRsMjgzMl9zZHJfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJY29uc3Qgc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXYtPnBkZXY7CiAKLQlkZXZfZGJnKCZzLT51ZGV2LT5kZXYsICJcbiIpOworCWRldl9kYmcoJnBkZXYtPmRldiwgIlxuIik7CiAKIAlpZiAodi0+aW5kZXggPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExMjksMTAgKzEwMDYsMTEgQEAKIHN0YXRpYyBpbnQgcnRsMjgzMl9zZHJfZW51bV9mcmVxX2JhbmRzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3lfYmFuZCAqYmFuZCkKIHsKLQlzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUgKnMgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydGwyODMyX3Nkcl9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldi0+cGRldjsKIAotCWRldl9kYmcoJnMtPnVkZXYtPmRldiwgInR1bmVyPSVkIHR5cGU9JWQgaW5kZXg9JWRcbiIsCi0JCQliYW5kLT50dW5lciwgYmFuZC0+dHlwZSwgYmFuZC0+aW5kZXgpOworCWRldl9kYmcoJnBkZXYtPmRldiwgInR1bmVyPSVkIHR5cGU9JWQgaW5kZXg9JWRcbiIsCisJCWJhbmQtPnR1bmVyLCBiYW5kLT50eXBlLCBiYW5kLT5pbmRleCk7CiAKIAlpZiAoYmFuZC0+dHVuZXIgPT0gMCkgewogCQlpZiAoYmFuZC0+aW5kZXggPj0gQVJSQVlfU0laRShiYW5kc19hZGMpKQpAQCAtMTE1NCwxNyArMTAzMiwxNyBAQAogc3RhdGljIGludCBydGwyODMyX3Nkcl9nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSAqcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2LT5wZGV2OwogCWludCByZXQgID0gMDsKIAotCWRldl9kYmcoJnMtPnVkZXYtPmRldiwgInR1bmVyPSVkIHR5cGU9JWRcbiIsCi0JCQlmLT50dW5lciwgZi0+dHlwZSk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAidHVuZXI9JWQgdHlwZT0lZFxuIiwgZi0+dHVuZXIsIGYtPnR5cGUpOwogCiAJaWYgKGYtPnR1bmVyID09IDApIHsKLQkJZi0+ZnJlcXVlbmN5ID0gcy0+Zl9hZGM7CisJCWYtPmZyZXF1ZW5jeSA9IGRldi0+Zl9hZGM7CiAJCWYtPnR5cGUgPSBWNEwyX1RVTkVSX0FEQzsKIAl9IGVsc2UgaWYgKGYtPnR1bmVyID09IDEpIHsKLQkJZi0+ZnJlcXVlbmN5ID0gcy0+Zl90dW5lcjsKKwkJZi0+ZnJlcXVlbmN5ID0gZGV2LT5mX3R1bmVyOwogCQlmLT50eXBlID0gVjRMMl9UVU5FUl9SRjsKIAl9IGVsc2UgewogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExNzYsMTEgKzEwNTQsMTIgQEAKIHN0YXRpYyBpbnQgcnRsMjgzMl9zZHJfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCWNvbnN0IHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUgKnMgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydGwyODMyX3Nkcl9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldi0+cGRldjsKIAlpbnQgcmV0LCBiYW5kOwogCi0JZGV2X2RiZygmcy0+dWRldi0+ZGV2LCAidHVuZXI9JWQgdHlwZT0lZCBmcmVxdWVuY3k9JXVcbiIsCi0JCQlmLT50dW5lciwgZi0+dHlwZSwgZi0+ZnJlcXVlbmN5KTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJ0dW5lcj0lZCB0eXBlPSVkIGZyZXF1ZW5jeT0ldVxuIiwKKwkJZi0+dHVuZXIsIGYtPnR5cGUsIGYtPmZyZXF1ZW5jeSk7CiAKIAkvKiBBREMgYmFuZCBtaWRwb2ludHMgKi8KIAkjZGVmaW5lIEJBTkRfQURDXzAgKChiYW5kc19hZGNbMF0ucmFuZ2VoaWdoICsgYmFuZHNfYWRjWzFdLnJhbmdlbG93KSAvIDIpCkBAIC0xMTk0LDE5ICsxMDczLDE5IEBACiAJCWVsc2UKIAkJCWJhbmQgPSAyOwogCi0JCXMtPmZfYWRjID0gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIGYtPmZyZXF1ZW5jeSwKKwkJZGV2LT5mX2FkYyA9IGNsYW1wX3QodW5zaWduZWQgaW50LCBmLT5mcmVxdWVuY3ksCiAJCQkJYmFuZHNfYWRjW2JhbmRdLnJhbmdlbG93LAogCQkJCWJhbmRzX2FkY1tiYW5kXS5yYW5nZWhpZ2gpOwogCi0JCWRldl9kYmcoJnMtPnVkZXYtPmRldiwgIkFEQyBmcmVxdWVuY3k9JXUgSHpcbiIsIHMtPmZfYWRjKTsKLQkJcmV0ID0gcnRsMjgzMl9zZHJfc2V0X2FkYyhzKTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiQURDIGZyZXF1ZW5jeT0ldSBIelxuIiwgZGV2LT5mX2FkYyk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3NldF9hZGMoZGV2KTsKIAl9IGVsc2UgaWYgKGYtPnR1bmVyID09IDEpIHsKLQkJcy0+Zl90dW5lciA9IGNsYW1wX3QodW5zaWduZWQgaW50LCBmLT5mcmVxdWVuY3ksCisJCWRldi0+Zl90dW5lciA9IGNsYW1wX3QodW5zaWduZWQgaW50LCBmLT5mcmVxdWVuY3ksCiAJCQkJYmFuZHNfZm1bMF0ucmFuZ2Vsb3csCiAJCQkJYmFuZHNfZm1bMF0ucmFuZ2VoaWdoKTsKLQkJZGV2X2RiZygmcy0+dWRldi0+ZGV2LCAiUkYgZnJlcXVlbmN5PSV1IEh6XG4iLCBmLT5mcmVxdWVuY3kpOworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJSRiBmcmVxdWVuY3k9JXUgSHpcbiIsIGYtPmZyZXF1ZW5jeSk7CiAKLQkJcmV0ID0gcnRsMjgzMl9zZHJfc2V0X3R1bmVyX2ZyZXEocyk7CisJCXJldCA9IHJ0bDI4MzJfc2RyX3NldF90dW5lcl9mcmVxKGRldik7CiAJfSBlbHNlIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CkBAIC0xMjE3LDExICsxMDk2LDEyIEBACiBzdGF0aWMgaW50IHJ0bDI4MzJfc2RyX2VudW1fZm10X3Nkcl9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCiB7Ci0Jc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBkZXYtPnBkZXY7CiAKLQlkZXZfZGJnKCZzLT51ZGV2LT5kZXYsICJcbiIpOworCWRldl9kYmcoJnBkZXYtPmRldiwgIlxuIik7CiAKLQlpZiAoZi0+aW5kZXggPj0gcy0+bnVtX2Zvcm1hdHMpCisJaWYgKGYtPmluZGV4ID49IGRldi0+bnVtX2Zvcm1hdHMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3RybGNweShmLT5kZXNjcmlwdGlvbiwgZm9ybWF0c1tmLT5pbmRleF0ubmFtZSwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7CkBAIC0xMjMzLDEyICsxMTEzLDEzIEBACiBzdGF0aWMgaW50IHJ0bDI4MzJfc2RyX2dfZm10X3Nkcl9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUgKnMgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydGwyODMyX3Nkcl9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IGRldi0+cGRldjsKIAotCWRldl9kYmcoJnMtPnVkZXYtPmRldiwgIlxuIik7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiXG4iKTsKIAotCWYtPmZtdC5zZHIucGl4ZWxmb3JtYXQgPSBzLT5waXhlbGZvcm1hdDsKLQlmLT5mbXQuc2RyLmJ1ZmZlcnNpemUgPSBzLT5idWZmZXJzaXplOworCWYtPmZtdC5zZHIucGl4ZWxmb3JtYXQgPSBkZXYtPnBpeGVsZm9ybWF0OworCWYtPmZtdC5zZHIuYnVmZmVyc2l6ZSA9IGRldi0+YnVmZmVyc2l6ZTsKIAogCW1lbXNldChmLT5mbXQuc2RyLnJlc2VydmVkLCAwLCBzaXplb2YoZi0+Zm10LnNkci5yZXNlcnZlZCkpOwogCkBAIC0xMjQ4LDI4ICsxMTI5LDI5IEBACiBzdGF0aWMgaW50IHJ0bDI4MzJfc2RyX3NfZm10X3Nkcl9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUgKnMgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXN0cnVjdCB2YjJfcXVldWUgKnEgPSAmcy0+dmJfcXVldWU7CisJc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2LT5wZGV2OworCXN0cnVjdCB2YjJfcXVldWUgKnEgPSAmZGV2LT52Yl9xdWV1ZTsKIAlpbnQgaTsKIAotCWRldl9kYmcoJnMtPnVkZXYtPmRldiwgInBpeGVsZm9ybWF0IGZvdXJjYyAlNC40c1xuIiwKLQkJCShjaGFyICopJmYtPmZtdC5zZHIucGl4ZWxmb3JtYXQpOworCWRldl9kYmcoJnBkZXYtPmRldiwgInBpeGVsZm9ybWF0IGZvdXJjYyAlNC40c1xuIiwKKwkJKGNoYXIgKikmZi0+Zm10LnNkci5waXhlbGZvcm1hdCk7CiAKIAlpZiAodmIyX2lzX2J1c3kocSkpCiAJCXJldHVybiAtRUJVU1k7CiAKIAltZW1zZXQoZi0+Zm10LnNkci5yZXNlcnZlZCwgMCwgc2l6ZW9mKGYtPmZtdC5zZHIucmVzZXJ2ZWQpKTsKLQlmb3IgKGkgPSAwOyBpIDwgcy0+bnVtX2Zvcm1hdHM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV9mb3JtYXRzOyBpKyspIHsKIAkJaWYgKGZvcm1hdHNbaV0ucGl4ZWxmb3JtYXQgPT0gZi0+Zm10LnNkci5waXhlbGZvcm1hdCkgewotCQkJcy0+cGl4ZWxmb3JtYXQgPSBmb3JtYXRzW2ldLnBpeGVsZm9ybWF0OwotCQkJcy0+YnVmZmVyc2l6ZSA9IGZvcm1hdHNbaV0uYnVmZmVyc2l6ZTsKKwkJCWRldi0+cGl4ZWxmb3JtYXQgPSBmb3JtYXRzW2ldLnBpeGVsZm9ybWF0OworCQkJZGV2LT5idWZmZXJzaXplID0gZm9ybWF0c1tpXS5idWZmZXJzaXplOwogCQkJZi0+Zm10LnNkci5idWZmZXJzaXplID0gZm9ybWF0c1tpXS5idWZmZXJzaXplOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CiAKLQlzLT5waXhlbGZvcm1hdCA9IGZvcm1hdHNbMF0ucGl4ZWxmb3JtYXQ7Ci0Jcy0+YnVmZmVyc2l6ZSA9IGZvcm1hdHNbMF0uYnVmZmVyc2l6ZTsKKwlkZXYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0c1swXS5waXhlbGZvcm1hdDsKKwlkZXYtPmJ1ZmZlcnNpemUgPSBmb3JtYXRzWzBdLmJ1ZmZlcnNpemU7CiAJZi0+Zm10LnNkci5waXhlbGZvcm1hdCA9IGZvcm1hdHNbMF0ucGl4ZWxmb3JtYXQ7CiAJZi0+Zm10LnNkci5idWZmZXJzaXplID0gZm9ybWF0c1swXS5idWZmZXJzaXplOwogCkBAIC0xMjc5LDE0ICsxMTYxLDE1IEBACiBzdGF0aWMgaW50IHJ0bDI4MzJfc2RyX3RyeV9mbXRfc2RyX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCXN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSAqcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0bDI4MzJfc2RyX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2LT5wZGV2OwogCWludCBpOwogCi0JZGV2X2RiZygmcy0+dWRldi0+ZGV2LCAicGl4ZWxmb3JtYXQgZm91cmNjICU0LjRzXG4iLAotCQkJKGNoYXIgKikmZi0+Zm10LnNkci5waXhlbGZvcm1hdCk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAicGl4ZWxmb3JtYXQgZm91cmNjICU0LjRzXG4iLAorCQkoY2hhciAqKSZmLT5mbXQuc2RyLnBpeGVsZm9ybWF0KTsKIAogCW1lbXNldChmLT5mbXQuc2RyLnJlc2VydmVkLCAwLCBzaXplb2YoZi0+Zm10LnNkci5yZXNlcnZlZCkpOwotCWZvciAoaSA9IDA7IGkgPCBzLT5udW1fZm9ybWF0czsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX2Zvcm1hdHM7IGkrKykgewogCQlpZiAoZm9ybWF0c1tpXS5waXhlbGZvcm1hdCA9PSBmLT5mbXQuc2RyLnBpeGVsZm9ybWF0KSB7CiAJCQlmLT5mbXQuc2RyLmJ1ZmZlcnNpemUgPSBmb3JtYXRzW2ldLmJ1ZmZlcnNpemU7CiAJCQlyZXR1cm4gMDsKQEAgLTEzNDgsMzcgKzEyMzEsMzggQEAKIAogc3RhdGljIGludCBydGwyODMyX3Nkcl9zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKIHsKLQlzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUgKnMgPQotCQkJY29udGFpbmVyX29mKGN0cmwtPmhhbmRsZXIsIHN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSwKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYgPQorCQkJY29udGFpbmVyX29mKGN0cmwtPmhhbmRsZXIsIHN0cnVjdCBydGwyODMyX3Nkcl9kZXYsCiAJCQkJCWhkbCk7Ci0Jc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBzLT5mZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2LT5wZGV2OworCXN0cnVjdCBydGwyODMyX3Nkcl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlID0gcGRhdGEtPmR2Yl9mcm9udGVuZDsKIAlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKIAlpbnQgcmV0OwogCi0JZGV2X2RiZygmcy0+dWRldi0+ZGV2LAotCQkJImlkPSVkIG5hbWU9JXMgdmFsPSVkIG1pbj0lbGxkIG1heD0lbGxkIHN0ZXA9JWxsZFxuIiwKLQkJCWN0cmwtPmlkLCBjdHJsLT5uYW1lLCBjdHJsLT52YWwsCi0JCQljdHJsLT5taW5pbXVtLCBjdHJsLT5tYXhpbXVtLCBjdHJsLT5zdGVwKTsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJpZD0lZCBuYW1lPSVzIHZhbD0lZCBtaW49JWxsZCBtYXg9JWxsZCBzdGVwPSVsbGRcbiIsCisJCWN0cmwtPmlkLCBjdHJsLT5uYW1lLCBjdHJsLT52YWwsIGN0cmwtPm1pbmltdW0sIGN0cmwtPm1heGltdW0sCisJCWN0cmwtPnN0ZXApOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfUkZfVFVORVJfQkFORFdJRFRIX0FVVE86CiAJY2FzZSBWNEwyX0NJRF9SRl9UVU5FUl9CQU5EV0lEVEg6CiAJCS8qIFRPRE86IHRoZXNlIGNvbnRyb2xzIHNob3VsZCBiZSBtb3ZlZCB0byB0dW5lciBkcml2ZXJzICovCi0JCWlmIChzLT5iYW5kd2lkdGhfYXV0by0+dmFsKSB7CisJCWlmIChkZXYtPmJhbmR3aWR0aF9hdXRvLT52YWwpIHsKIAkJCS8qIFJvdW5kIHRvd2FyZHMgdGhlIGNsb3Nlc3QgbGVnYWwgdmFsdWUgKi8KLQkJCXMzMiB2YWwgPSBzLT5mX2FkYyArIGRpdl91NjQocy0+YmFuZHdpZHRoLT5zdGVwLCAyKTsKKwkJCXMzMiB2YWwgPSBkZXYtPmZfYWRjICsgZGl2X3U2NChkZXYtPmJhbmR3aWR0aC0+c3RlcCwgMik7CiAJCQl1MzIgb2Zmc2V0OwogCi0JCQl2YWwgPSBjbGFtcF90KHMzMiwgdmFsLCBzLT5iYW5kd2lkdGgtPm1pbmltdW0sCi0JCQkJICAgICAgcy0+YmFuZHdpZHRoLT5tYXhpbXVtKTsKLQkJCW9mZnNldCA9IHZhbCAtIHMtPmJhbmR3aWR0aC0+bWluaW11bTsKLQkJCW9mZnNldCA9IHMtPmJhbmR3aWR0aC0+c3RlcCAqCi0JCQkJZGl2X3U2NChvZmZzZXQsIHMtPmJhbmR3aWR0aC0+c3RlcCk7Ci0JCQlzLT5iYW5kd2lkdGgtPnZhbCA9IHMtPmJhbmR3aWR0aC0+bWluaW11bSArIG9mZnNldDsKKwkJCXZhbCA9IGNsYW1wX3QoczMyLCB2YWwsIGRldi0+YmFuZHdpZHRoLT5taW5pbXVtLAorCQkJCSAgICAgIGRldi0+YmFuZHdpZHRoLT5tYXhpbXVtKTsKKwkJCW9mZnNldCA9IHZhbCAtIGRldi0+YmFuZHdpZHRoLT5taW5pbXVtOworCQkJb2Zmc2V0ID0gZGV2LT5iYW5kd2lkdGgtPnN0ZXAgKgorCQkJCWRpdl91NjQob2Zmc2V0LCBkZXYtPmJhbmR3aWR0aC0+c3RlcCk7CisJCQlkZXYtPmJhbmR3aWR0aC0+dmFsID0gZGV2LT5iYW5kd2lkdGgtPm1pbmltdW0gKyBvZmZzZXQ7CiAJCX0KLQkJYy0+YmFuZHdpZHRoX2h6ID0gcy0+YmFuZHdpZHRoLT52YWw7CisJCWMtPmJhbmR3aWR0aF9oeiA9IGRldi0+YmFuZHdpZHRoLT52YWw7CiAKLQkJaWYgKCF0ZXN0X2JpdChQT1dFUl9PTiwgJnMtPmZsYWdzKSkKKwkJaWYgKCF0ZXN0X2JpdChQT1dFUl9PTiwgJmRldi0+ZmxhZ3MpKQogCQkJcmV0dXJuIDA7CiAKIAkJaWYgKGZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMpCkBAIC0xMzk5LDE1NCArMTI4MywxOTUgQEAKIAogc3RhdGljIHZvaWQgcnRsMjgzMl9zZHJfdmlkZW9fcmVsZWFzZShzdHJ1Y3QgdjRsMl9kZXZpY2UgKnYpCiB7Ci0Jc3RydWN0IHJ0bDI4MzJfc2RyX3N0YXRlICpzID0KLQkJCWNvbnRhaW5lcl9vZih2LCBzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUsIHY0bDJfZGV2KTsKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYgPQorCQkJY29udGFpbmVyX29mKHYsIHN0cnVjdCBydGwyODMyX3Nkcl9kZXYsIHY0bDJfZGV2KTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gZGV2LT5wZGV2OwogCi0JdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmcy0+aGRsKTsKLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZzLT52NGwyX2Rldik7Ci0Ja2ZyZWUocyk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiXG4iKTsKKworCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmRldi0+aGRsKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKKwlrZnJlZShkZXYpOwogfQogCi1zdHJ1Y3QgZHZiX2Zyb250ZW5kICpydGwyODMyX3Nkcl9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCi0JCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBjb25zdCBzdHJ1Y3QgcnRsMjgzMl9jb25maWcgKmNmZywKLQkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKKy8qIFBsYXRmb3JtIGRyaXZlciBpbnRlcmZhY2UgKi8KK3N0YXRpYyBpbnQgcnRsMjgzMl9zZHJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlpbnQgcmV0OwotCXN0cnVjdCBydGwyODMyX3Nkcl9zdGF0ZSAqczsKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXY7CisJc3RydWN0IHJ0bDI4MzJfc2RyX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgKm9wcyA9ICZydGwyODMyX3Nkcl9jdHJsX29wczsKLQlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyYyk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXY7CisJaW50IHJldDsKIAotCXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcnRsMjgzMl9zZHJfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAocyA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJmQtPnVkZXYtPmRldiwKLQkJCQkiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgcnRsMjgzMl9zZHJfc3RhdGVcbiIpOwotCQlyZXR1cm4gTlVMTDsKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJcbiIpOworCisJaWYgKCFwZGF0YSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcHJvY2VlZCB3aXRob3V0IHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisJaWYgKCFwZGV2LT5kZXYucGFyZW50LT5kcml2ZXIpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiTm8gcGFyZW50IGRldmljZVxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKwkvKiB0cnkgdG8gcmVmY291bnQgaG9zdCBkcnYgc2luY2Ugd2UgYXJlIHRoZSBjb25zdW1lciAqLworCWlmICghdHJ5X21vZHVsZV9nZXQocGRldi0+ZGV2LnBhcmVudC0+ZHJpdmVyLT5vd25lcikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUmVmY291bnQgZmFpbCIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9tb2R1bGVfcHV0OwogCX0KIAogCS8qIHNldHVwIHRoZSBzdGF0ZSAqLwotCXMtPmZlID0gZmU7Ci0Jcy0+ZCA9IGQ7Ci0Jcy0+dWRldiA9IGQtPnVkZXY7Ci0Jcy0+aTJjID0gaTJjOwotCXMtPmNmZyA9IGNmZzsKLQlzLT5mX2FkYyA9IGJhbmRzX2FkY1swXS5yYW5nZWxvdzsKLQlzLT5mX3R1bmVyID0gYmFuZHNfZm1bMF0ucmFuZ2Vsb3c7Ci0Jcy0+cGl4ZWxmb3JtYXQgPSBmb3JtYXRzWzBdLnBpeGVsZm9ybWF0OwotCXMtPmJ1ZmZlcnNpemUgPSBmb3JtYXRzWzBdLmJ1ZmZlcnNpemU7Ci0Jcy0+bnVtX2Zvcm1hdHMgPSBOVU1fRk9STUFUUzsKKwlzdWJkZXYgPSBwZGF0YS0+djRsMl9zdWJkZXY7CisJZGV2LT5wZGV2ID0gcGRldjsKKwlkZXYtPnVkZXYgPSBwZGF0YS0+ZHZiX3VzYl9kZXZpY2UtPnVkZXY7CisJZGV2LT5mX2FkYyA9IGJhbmRzX2FkY1swXS5yYW5nZWxvdzsKKwlkZXYtPmZfdHVuZXIgPSBiYW5kc19mbVswXS5yYW5nZWxvdzsKKwlkZXYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0c1swXS5waXhlbGZvcm1hdDsKKwlkZXYtPmJ1ZmZlcnNpemUgPSBmb3JtYXRzWzBdLmJ1ZmZlcnNpemU7CisJZGV2LT5udW1fZm9ybWF0cyA9IE5VTV9GT1JNQVRTOwogCWlmICghcnRsMjgzMl9zZHJfZW11bGF0ZWRfZm10KQotCQlzLT5udW1fZm9ybWF0cyAtPSAxOworCQlkZXYtPm51bV9mb3JtYXRzIC09IDE7CiAKLQltdXRleF9pbml0KCZzLT52NGwyX2xvY2spOwotCW11dGV4X2luaXQoJnMtPnZiX3F1ZXVlX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZzLT5xdWV1ZWRfYnVmc19sb2NrKTsKLQlJTklUX0xJU1RfSEVBRCgmcy0+cXVldWVkX2J1ZnMpOworCW11dGV4X2luaXQoJmRldi0+djRsMl9sb2NrKTsKKwltdXRleF9pbml0KCZkZXYtPnZiX3F1ZXVlX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXYtPnF1ZXVlZF9idWZzX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnF1ZXVlZF9idWZzKTsKIAogCS8qIEluaXQgdmlkZW9idWYyIHF1ZXVlIHN0cnVjdHVyZSAqLwotCXMtPnZiX3F1ZXVlLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1NEUl9DQVBUVVJFOwotCXMtPnZiX3F1ZXVlLmlvX21vZGVzID0gVkIyX01NQVAgfCBWQjJfVVNFUlBUUiB8IFZCMl9SRUFEOwotCXMtPnZiX3F1ZXVlLmRydl9wcml2ID0gczsKLQlzLT52Yl9xdWV1ZS5idWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0IHJ0bDI4MzJfc2RyX2ZyYW1lX2J1Zik7Ci0Jcy0+dmJfcXVldWUub3BzID0gJnJ0bDI4MzJfc2RyX3ZiMl9vcHM7Ci0Jcy0+dmJfcXVldWUubWVtX29wcyA9ICZ2YjJfdm1hbGxvY19tZW1vcHM7Ci0Jcy0+dmJfcXVldWUudGltZXN0YW1wX2ZsYWdzID0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDOwotCXJldCA9IHZiMl9xdWV1ZV9pbml0KCZzLT52Yl9xdWV1ZSk7CisJZGV2LT52Yl9xdWV1ZS50eXBlID0gVjRMMl9CVUZfVFlQRV9TRFJfQ0FQVFVSRTsKKwlkZXYtPnZiX3F1ZXVlLmlvX21vZGVzID0gVkIyX01NQVAgfCBWQjJfVVNFUlBUUiB8IFZCMl9SRUFEOworCWRldi0+dmJfcXVldWUuZHJ2X3ByaXYgPSBkZXY7CisJZGV2LT52Yl9xdWV1ZS5idWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0IHJ0bDI4MzJfc2RyX2ZyYW1lX2J1Zik7CisJZGV2LT52Yl9xdWV1ZS5vcHMgPSAmcnRsMjgzMl9zZHJfdmIyX29wczsKKwlkZXYtPnZiX3F1ZXVlLm1lbV9vcHMgPSAmdmIyX3ZtYWxsb2NfbWVtb3BzOworCWRldi0+dmJfcXVldWUudGltZXN0YW1wX2ZsYWdzID0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDOworCXJldCA9IHZiMl9xdWV1ZV9pbml0KCZkZXYtPnZiX3F1ZXVlKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnMtPnVkZXYtPmRldiwgIkNvdWxkIG5vdCBpbml0aWFsaXplIHZiMiBxdWV1ZVxuIik7Ci0JCWdvdG8gZXJyX2ZyZWVfbWVtOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgaW5pdGlhbGl6ZSB2YjIgcXVldWVcbiIpOworCQlnb3RvIGVycl9rZnJlZTsKIAl9CiAKIAkvKiBSZWdpc3RlciBjb250cm9scyAqLwotCXN3aXRjaCAocy0+Y2ZnLT50dW5lcikgewotCWNhc2UgUlRMMjgzMl9UVU5FUl9FNDAwMDoKLQkJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdCgmcy0+aGRsLCA5KTsKLQkJaWYgKHNkKQotCQkJdjRsMl9jdHJsX2FkZF9oYW5kbGVyKCZzLT5oZGwsIHNkLT5jdHJsX2hhbmRsZXIsIE5VTEwpOworCXN3aXRjaCAocGRhdGEtPnR1bmVyKSB7CisJY2FzZSBSVEwyODMyX1NEUl9UVU5FUl9FNDAwMDoKKwkJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdCgmZGV2LT5oZGwsIDkpOworCQlpZiAoc3ViZGV2KQorCQkJdjRsMl9jdHJsX2FkZF9oYW5kbGVyKCZkZXYtPmhkbCwgc3ViZGV2LT5jdHJsX2hhbmRsZXIsIE5VTEwpOwogCQlicmVhazsKLQljYXNlIFJUTDI4MzJfVFVORVJfUjgyMFQ6Ci0JCXY0bDJfY3RybF9oYW5kbGVyX2luaXQoJnMtPmhkbCwgMik7Ci0JCXMtPmJhbmR3aWR0aF9hdXRvID0gdjRsMl9jdHJsX25ld19zdGQoJnMtPmhkbCwgb3BzLAotCQkJCQkJICAgICAgVjRMMl9DSURfUkZfVFVORVJfQkFORFdJRFRIX0FVVE8sCi0JCQkJCQkgICAgICAwLCAxLCAxLCAxKTsKLQkJcy0+YmFuZHdpZHRoID0gdjRsMl9jdHJsX25ld19zdGQoJnMtPmhkbCwgb3BzLAotCQkJCQkJIFY0TDJfQ0lEX1JGX1RVTkVSX0JBTkRXSURUSCwKLQkJCQkJCSAwLCA4MDAwMDAwLCAxMDAwMDAsIDApOwotCQl2NGwyX2N0cmxfYXV0b19jbHVzdGVyKDIsICZzLT5iYW5kd2lkdGhfYXV0bywgMCwgZmFsc2UpOworCWNhc2UgUlRMMjgzMl9TRFJfVFVORVJfUjgyMFQ6CisJY2FzZSBSVEwyODMyX1NEUl9UVU5FUl9SODI4RDoKKwkJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdCgmZGV2LT5oZGwsIDIpOworCQlkZXYtPmJhbmR3aWR0aF9hdXRvID0gdjRsMl9jdHJsX25ld19zdGQoJmRldi0+aGRsLCBvcHMsCisJCQkJCQkJVjRMMl9DSURfUkZfVFVORVJfQkFORFdJRFRIX0FVVE8sCisJCQkJCQkJMCwgMSwgMSwgMSk7CisJCWRldi0+YmFuZHdpZHRoID0gdjRsMl9jdHJsX25ld19zdGQoJmRldi0+aGRsLCBvcHMsCisJCQkJCQkgICBWNEwyX0NJRF9SRl9UVU5FUl9CQU5EV0lEVEgsCisJCQkJCQkgICAwLCA4MDAwMDAwLCAxMDAwMDAsIDApOworCQl2NGwyX2N0cmxfYXV0b19jbHVzdGVyKDIsICZkZXYtPmJhbmR3aWR0aF9hdXRvLCAwLCBmYWxzZSk7CiAJCWJyZWFrOwotCWNhc2UgUlRMMjgzMl9UVU5FUl9GQzAwMTI6Ci0JY2FzZSBSVEwyODMyX1RVTkVSX0ZDMDAxMzoKLQkJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdCgmcy0+aGRsLCAyKTsKLQkJcy0+YmFuZHdpZHRoX2F1dG8gPSB2NGwyX2N0cmxfbmV3X3N0ZCgmcy0+aGRsLCBvcHMsCi0JCQkJCQkgICAgICBWNEwyX0NJRF9SRl9UVU5FUl9CQU5EV0lEVEhfQVVUTywKLQkJCQkJCSAgICAgIDAsIDEsIDEsIDEpOwotCQlzLT5iYW5kd2lkdGggPSB2NGwyX2N0cmxfbmV3X3N0ZCgmcy0+aGRsLCBvcHMsCi0JCQkJCQkgVjRMMl9DSURfUkZfVFVORVJfQkFORFdJRFRILAotCQkJCQkJIDYwMDAwMDAsIDgwMDAwMDAsIDEwMDAwMDAsCi0JCQkJCQkgNjAwMDAwMCk7Ci0JCXY0bDJfY3RybF9hdXRvX2NsdXN0ZXIoMiwgJnMtPmJhbmR3aWR0aF9hdXRvLCAwLCBmYWxzZSk7CisJY2FzZSBSVEwyODMyX1NEUl9UVU5FUl9GQzAwMTI6CisJY2FzZSBSVEwyODMyX1NEUl9UVU5FUl9GQzAwMTM6CisJCXY0bDJfY3RybF9oYW5kbGVyX2luaXQoJmRldi0+aGRsLCAyKTsKKwkJZGV2LT5iYW5kd2lkdGhfYXV0byA9IHY0bDJfY3RybF9uZXdfc3RkKCZkZXYtPmhkbCwgb3BzLAorCQkJCQkJCVY0TDJfQ0lEX1JGX1RVTkVSX0JBTkRXSURUSF9BVVRPLAorCQkJCQkJCTAsIDEsIDEsIDEpOworCQlkZXYtPmJhbmR3aWR0aCA9IHY0bDJfY3RybF9uZXdfc3RkKCZkZXYtPmhkbCwgb3BzLAorCQkJCQkJICAgVjRMMl9DSURfUkZfVFVORVJfQkFORFdJRFRILAorCQkJCQkJICAgNjAwMDAwMCwgODAwMDAwMCwgMTAwMDAwMCwKKwkJCQkJCSAgIDYwMDAwMDApOworCQl2NGwyX2N0cmxfYXV0b19jbHVzdGVyKDIsICZkZXYtPmJhbmR3aWR0aF9hdXRvLCAwLCBmYWxzZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXY0bDJfY3RybF9oYW5kbGVyX2luaXQoJnMtPmhkbCwgMCk7Ci0JCWRldl9ub3RpY2UoJnMtPnVkZXYtPmRldiwgIiVzOiBVbnN1cHBvcnRlZCB0dW5lclxuIiwKLQkJCQlLQlVJTERfTU9ETkFNRSk7Ci0JCWdvdG8gZXJyX2ZyZWVfY29udHJvbHM7CisJCXY0bDJfY3RybF9oYW5kbGVyX2luaXQoJmRldi0+aGRsLCAwKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5zdXBwb3J0ZWQgdHVuZXJcbiIpOworCQlnb3RvIGVycl92NGwyX2N0cmxfaGFuZGxlcl9mcmVlOwogCX0KLQotCWlmIChzLT5oZGwuZXJyb3IpIHsKLQkJcmV0ID0gcy0+aGRsLmVycm9yOwotCQlkZXZfZXJyKCZzLT51ZGV2LT5kZXYsICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBjb250cm9sc1xuIik7Ci0JCWdvdG8gZXJyX2ZyZWVfY29udHJvbHM7CisJaWYgKGRldi0+aGRsLmVycm9yKSB7CisJCXJldCA9IGRldi0+aGRsLmVycm9yOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgaW5pdGlhbGl6ZSBjb250cm9sc1xuIik7CisJCWdvdG8gZXJyX3Y0bDJfY3RybF9oYW5kbGVyX2ZyZWU7CiAJfQogCiAJLyogSW5pdCB2aWRlb19kZXZpY2Ugc3RydWN0dXJlICovCi0Jcy0+dmRldiA9IHJ0bDI4MzJfc2RyX3RlbXBsYXRlOwotCXMtPnZkZXYucXVldWUgPSAmcy0+dmJfcXVldWU7Ci0Jcy0+dmRldi5xdWV1ZS0+bG9jayA9ICZzLT52Yl9xdWV1ZV9sb2NrOwotCXZpZGVvX3NldF9kcnZkYXRhKCZzLT52ZGV2LCBzKTsKKwlkZXYtPnZkZXYgPSBydGwyODMyX3Nkcl90ZW1wbGF0ZTsKKwlkZXYtPnZkZXYucXVldWUgPSAmZGV2LT52Yl9xdWV1ZTsKKwlkZXYtPnZkZXYucXVldWUtPmxvY2sgPSAmZGV2LT52Yl9xdWV1ZV9sb2NrOworCXZpZGVvX3NldF9kcnZkYXRhKCZkZXYtPnZkZXYsIGRldik7CiAKIAkvKiBSZWdpc3RlciB0aGUgdjRsMl9kZXZpY2Ugc3RydWN0dXJlICovCi0Jcy0+djRsMl9kZXYucmVsZWFzZSA9IHJ0bDI4MzJfc2RyX3ZpZGVvX3JlbGVhc2U7Ci0JcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnMtPnVkZXYtPmRldiwgJnMtPnY0bDJfZGV2KTsKKwlkZXYtPnY0bDJfZGV2LnJlbGVhc2UgPSBydGwyODMyX3Nkcl92aWRlb19yZWxlYXNlOworCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZkZXYtPnY0bDJfZGV2KTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJnMtPnVkZXYtPmRldiwKLQkJCQkiRmFpbGVkIHRvIHJlZ2lzdGVyIHY0bDItZGV2aWNlICglZClcbiIsIHJldCk7Ci0JCWdvdG8gZXJyX2ZyZWVfY29udHJvbHM7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciB2NGwyLWRldmljZSAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfdjRsMl9jdHJsX2hhbmRsZXJfZnJlZTsKIAl9CiAKLQlzLT52NGwyX2Rldi5jdHJsX2hhbmRsZXIgPSAmcy0+aGRsOwotCXMtPnZkZXYudjRsMl9kZXYgPSAmcy0+djRsMl9kZXY7Ci0Jcy0+dmRldi5sb2NrID0gJnMtPnY0bDJfbG9jazsKLQlzLT52ZGV2LnZmbF9kaXIgPSBWRkxfRElSX1JYOworCWRldi0+djRsMl9kZXYuY3RybF9oYW5kbGVyID0gJmRldi0+aGRsOworCWRldi0+dmRldi52NGwyX2RldiA9ICZkZXYtPnY0bDJfZGV2OworCWRldi0+dmRldi5sb2NrID0gJmRldi0+djRsMl9sb2NrOworCWRldi0+dmRldi52ZmxfZGlyID0gVkZMX0RJUl9SWDsKIAotCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmcy0+dmRldiwgVkZMX1RZUEVfU0RSLCAtMSk7CisJcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYsIFZGTF9UWVBFX1NEUiwgLTEpOwogCWlmIChyZXQpIHsKLQkJZGV2X2Vycigmcy0+dWRldi0+ZGV2LAotCQkJCSJGYWlsZWQgdG8gcmVnaXN0ZXIgYXMgdmlkZW8gZGV2aWNlICglZClcbiIsCi0JCQkJcmV0KTsKLQkJZ290byBlcnJfdW5yZWdpc3Rlcl92NGwyX2RldjsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGFzIHZpZGVvIGRldmljZSAlZFxuIiwKKwkJCXJldCk7CisJCWdvdG8gZXJyX3Y0bDJfZGV2aWNlX3VucmVnaXN0ZXI7CiAJfQotCWRldl9pbmZvKCZzLT51ZGV2LT5kZXYsICJSZWdpc3RlcmVkIGFzICVzXG4iLAotCQkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZSgmcy0+dmRldikpOwotCi0JZmUtPnNlY19wcml2ID0gczsKLQlmZS0+b3BzLnJlbGVhc2Vfc2VjID0gcnRsMjgzMl9zZHJfcmVsZWFzZV9zZWM7Ci0KLQlkZXZfaW5mbygmcy0+aTJjLT5kZXYsICIlczogUmVhbHRlayBSVEwyODMyIFNEUiBhdHRhY2hlZFxuIiwKLQkJCUtCVUlMRF9NT0ROQU1FKTsKLQlkZXZfbm90aWNlKCZzLT51ZGV2LT5kZXYsCi0JCQkiJXM6IFNEUiBBUEkgaXMgc3RpbGwgc2xpZ2h0bHkgZXhwZXJpbWVudGFsIGFuZCBmdW5jdGlvbmFsaXR5IGNoYW5nZXMgbWF5IGZvbGxvd1xuIiwKLQkJCUtCVUlMRF9NT0ROQU1FKTsKLQlyZXR1cm4gZmU7Ci0KLWVycl91bnJlZ2lzdGVyX3Y0bDJfZGV2OgotCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnMtPnY0bDJfZGV2KTsKLWVycl9mcmVlX2NvbnRyb2xzOgotCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnMtPmhkbCk7Ci1lcnJfZnJlZV9tZW06Ci0Ja2ZyZWUocyk7Ci0JcmV0dXJuIE5VTEw7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIlJlZ2lzdGVyZWQgYXMgJXNcbiIsCisJCSB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZkZXYtPnZkZXYpKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiUmVhbHRlayBSVEwyODMyIFNEUiBhdHRhY2hlZFxuIik7CisJZGV2X25vdGljZSgmcGRldi0+ZGV2LAorCQkgICAiU0RSIEFQSSBpcyBzdGlsbCBzbGlnaHRseSBleHBlcmltZW50YWwgYW5kIGZ1bmN0aW9uYWxpdHkgY2hhbmdlcyBtYXkgZm9sbG93XG4iKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCXJldHVybiAwOworZXJyX3Y0bDJfZGV2aWNlX3VucmVnaXN0ZXI6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CitlcnJfdjRsMl9jdHJsX2hhbmRsZXJfZnJlZToKKwl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZkZXYtPmhkbCk7CitlcnJfa2ZyZWU6CisJa2ZyZWUoZGV2KTsKK2Vycl9tb2R1bGVfcHV0OgorCW1vZHVsZV9wdXQocGRldi0+ZGV2LnBhcmVudC0+ZHJpdmVyLT5vd25lcik7CitlcnI6CisJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0wocnRsMjgzMl9zZHJfYXR0YWNoKTsKKworc3RhdGljIGludCBydGwyODMyX3Nkcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcnRsMjgzMl9zZHJfZGV2ICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIlxuIik7CisKKwltdXRleF9sb2NrKCZkZXYtPnZiX3F1ZXVlX2xvY2spOworCW11dGV4X2xvY2soJmRldi0+djRsMl9sb2NrKTsKKwkvKiBObyBuZWVkIHRvIGtlZXAgdGhlIHVyYnMgYXJvdW5kIGFmdGVyIGRpc2Nvbm5lY3Rpb24gKi8KKwlkZXYtPnVkZXYgPSBOVUxMOworCXY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoJmRldi0+djRsMl9kZXYpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYpOworCW11dGV4X3VubG9jaygmZGV2LT52NGwyX2xvY2spOworCW11dGV4X3VubG9jaygmZGV2LT52Yl9xdWV1ZV9sb2NrKTsKKwl2NGwyX2RldmljZV9wdXQoJmRldi0+djRsMl9kZXYpOworCW1vZHVsZV9wdXQocGRldi0+ZGV2LnBhcmVudC0+ZHJpdmVyLT5vd25lcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnRsMjgzMl9zZHJfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lICAgPSAicnRsMjgzMl9zZHIiLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgICAgICAgICAgPSBydGwyODMyX3Nkcl9wcm9iZSwKKwkucmVtb3ZlICAgICAgICAgPSBydGwyODMyX3Nkcl9yZW1vdmUsCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihydGwyODMyX3Nkcl9kcml2ZXIpOwogCiBNT0RVTEVfQVVUSE9SKCJBbnR0aSBQYWxvc2FhcmkgPGNyb3BlQGlraS5maT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUmVhbHRlayBSVEwyODMyIFNEUiBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9ydGwyODMyX3Nkci5oIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3J0bDI4MzJfc2RyLmgKaW5kZXggYjg2NWZhZC4uZDI1OTQ3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3J0bDI4MzJfc2RyLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3J0bDI4MzJfc2RyLmgKQEAgLTIwLDM1ICsyMCw0OCBAQAogICogR05VIFJhZGlvIHBsdWdpbiAiZ3Ita2VybmVsIiBmb3IgZGV2aWNlIHVzYWdlIHdpbGwgYmUgb246CiAgKiBodHRwOi8vZ2l0LmxpbnV4dHYub3JnL2FudHRpcC9nci1rZXJuZWwuZ2l0CiAgKgotICogVE9ETzoKLSAqIEhlbHAgaXMgdmVyeSBoaWdobHkgd2VsY29tZSBmb3IgdGhlc2UgKyBhbGwgdGhlIG90aGVycyB5b3UgY291bGQgaW1hZ2luZToKLSAqIC0gbW92ZSBjb250cm9scyB0byBWNEwyIEFQSQotICogLSB1c2UgbGlidjRsMiBmb3Igc3RyZWFtIGZvcm1hdCBjb252ZXJzaW9ucwotICogLSBnci1rZXJuZWw6IHN3aXRjaCB0byB2NGwyX21tYXAgKGN1cnJlbnQgcmVhZCBlYXRzIGEgbG90IG9mIGNwdSkKLSAqIC0gU0RSU2hhcnAgc3VwcG9ydAogICovCiAKICNpZm5kZWYgUlRMMjgzMl9TRFJfSAogI2RlZmluZSBSVEwyODMyX1NEUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9rY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKIAotLyogZm9yIGNvbmZpZyBzdHJ1Y3QgKi8KLSNpbmNsdWRlICJydGwyODMyLmgiCisvKioKKyAqIHN0cnVjdCBydGwyODMyX3Nkcl9wbGF0Zm9ybV9kYXRhIC0gUGxhdGZvcm0gZGF0YSBmb3IgdGhlIHJ0bDI4MzJfc2RyIGRyaXZlcgorICogQGNsazogQ2xvY2sgZnJlcXVlbmN5ICg0MDAwMDAwLCAxNjAwMDAwMCwgMjUwMDAwMDAsIDI4ODAwMDAwKS4KKyAqIEB0dW5lcjogVXNlZCB0dW5lciBtb2RlbC4KKyAqIEBpMmNfY2xpZW50OiBydGwyODMyIGRlbW9kIGRyaXZlciBJMkMgY2xpZW50LgorICogQGJ1bGtfcmVhZDogcnRsMjgzMiBkcml2ZXIgcHJpdmF0ZSBJL08gaW50ZXJmYWNlLgorICogQGJ1bGtfd3JpdGU6IHJ0bDI4MzIgZHJpdmVyIHByaXZhdGUgSS9PIGludGVyZmFjZS4KKyAqIEB1cGRhdGVfYml0czogcnRsMjgzMiBkcml2ZXIgcHJpdmF0ZSBJL08gaW50ZXJmYWNlLgorICogQGR2Yl9mcm9udGVuZDogcnRsMjgzMiBEVkIgZnJvbnRlbmQuCisgKiBAdjRsMl9zdWJkZXY6IFR1bmVyIHY0bDIgY29udHJvbHMuCisgKiBAZHZiX3VzYl9kZXZpY2U6IERWQiBVU0IgaW50ZXJmYWNlIGZvciBVU0Igc3RyZWFtaW5nLgorICovCiAKLSNpZiBJU19FTkFCTEVEKENPTkZJR19EVkJfUlRMMjgzMl9TRFIpCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqcnRsMjgzMl9zZHJfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAotCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBjb25zdCBzdHJ1Y3QgcnRsMjgzMl9jb25maWcgKmNmZywKLQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnJ0bDI4MzJfc2RyX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgY29uc3Qgc3RydWN0IHJ0bDI4MzJfY29uZmlnICpjZmcsCi0Jc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKLXsKLQlkZXZfd2FybigmaTJjLT5kZXYsICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gTlVMTDsKLX0KLSNlbmRpZgorc3RydWN0IHJ0bDI4MzJfc2RyX3BsYXRmb3JtX2RhdGEgeworCXUzMiBjbGs7CisJLyoKKwkgKiBYWFg6IFRoaXMgbGlzdCBtdXN0IGJlIGtlcHQgc3luYyB3aXRoIGR2Yl91c2JfcnRsMjh4eHUgVVNCIElGIGRyaXZlci4KKwkgKi8KKyNkZWZpbmUgUlRMMjgzMl9TRFJfVFVORVJfVFVBOTAwMSAgIDB4MjQKKyNkZWZpbmUgUlRMMjgzMl9TRFJfVFVORVJfRkMwMDEyICAgIDB4MjYKKyNkZWZpbmUgUlRMMjgzMl9TRFJfVFVORVJfRTQwMDAgICAgIDB4MjcKKyNkZWZpbmUgUlRMMjgzMl9TRFJfVFVORVJfRkMwMDEzICAgIDB4MjkKKyNkZWZpbmUgUlRMMjgzMl9TRFJfVFVORVJfUjgyMFQgICAgIDB4MmEKKyNkZWZpbmUgUlRMMjgzMl9TRFJfVFVORVJfUjgyOEQgICAgIDB4MmIKKwl1OCB0dW5lcjsKKworCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfY2xpZW50OworCWludCAoKmJ1bGtfcmVhZCkoc3RydWN0IGkyY19jbGllbnQgKiwgdW5zaWduZWQgaW50LCB2b2lkICosIHNpemVfdCk7CisJaW50ICgqYnVsa193cml0ZSkoc3RydWN0IGkyY19jbGllbnQgKiwgdW5zaWduZWQgaW50LCBjb25zdCB2b2lkICosIHNpemVfdCk7CisJaW50ICgqdXBkYXRlX2JpdHMpKHN0cnVjdCBpMmNfY2xpZW50ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmR2Yl9mcm9udGVuZDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnY0bDJfc3ViZGV2OworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZHZiX3VzYl9kZXZpY2U7Cit9OwogCiAjZW5kaWYgLyogUlRMMjgzMl9TRFJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3M1aDE0MDkuYyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9zNWgxNDA5LmMKaW5kZXggZjcxYjA2Mi4uNWZmNDc0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3M1aDE0MDkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvczVoMTQwOS5jCkBAIC0xMDIxLDkgKzEwMjEsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTYW1zdW5nIFM1SDE0MDkgUUFNLUIvQVRTQyBEZW1vZHVsYXRvciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9zNWgxNDA5LmggYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvczVoMTQwOS5oCmluZGV4IDYzYjFlMGEuLjllMTQzZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9zNWgxNDA5LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3M1aDE0MDkuaApAQCAtODEsOCArODEsMyBAQAogI2VuZGlmIC8qIENPTkZJR19EVkJfUzVIMTQwOSAqLwogCiAjZW5kaWYgLyogX19TNUgxNDA5X0hfXyAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3M1aDE0MTEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9zNWgxNDExLmMKaW5kZXggNmNjNGI3YS4uNjRmMzVmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3M1aDE0MTEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvczVoMTQxMS5jCkBAIC05NDQsOCArOTQ0LDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU2Ftc3VuZyBTNUgxNDExIFFBTS1CL0FUU0MgRGVtb2R1bGF0b3IgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3M1aDE0MTEuaCBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9zNWgxNDExLmgKaW5kZXggZTRmNTY4Ny4uMWQ3ZGViNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3M1aDE0MTEuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvczVoMTQxMS5oCkBAIC04Myw4ICs4MywzIEBACiAjZW5kaWYgLyogQ09ORklHX0RWQl9TNUgxNDExICovCiAKICNlbmRpZiAvKiBfX1M1SDE0MTFfSF9fICovCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvc2kyMTY4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvc2kyMTY4LmMKaW5kZXggY2U5YWI0NC4uNWRiNTg4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3NpMjE2OC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9zaTIxNjguYwpAQCAtMTksMTYgKzE5LDE3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgc2kyMTY4X29wczsKIAogLyogZXhlY3V0ZSBmaXJtd2FyZSBjb21tYW5kICovCi1zdGF0aWMgaW50IHNpMjE2OF9jbWRfZXhlY3V0ZShzdHJ1Y3Qgc2kyMTY4ICpzLCBzdHJ1Y3Qgc2kyMTY4X2NtZCAqY21kKQorc3RhdGljIGludCBzaTIxNjhfY21kX2V4ZWN1dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHNpMjE2OF9jbWQgKmNtZCkKIHsKKwlzdHJ1Y3Qgc2kyMTY4X2RldiAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKLQltdXRleF9sb2NrKCZzLT5pMmNfbXV0ZXgpOworCW11dGV4X2xvY2soJmRldi0+aTJjX211dGV4KTsKIAogCWlmIChjbWQtPndsZW4pIHsKIAkJLyogd3JpdGUgY21kIGFuZCBhcmdzIGZvciBmaXJtd2FyZSAqLwotCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQocy0+Y2xpZW50LCBjbWQtPmFyZ3MsIGNtZC0+d2xlbik7CisJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGNtZC0+YXJncywgY21kLT53bGVuKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWdvdG8gZXJyX211dGV4X3VubG9jazsKIAkJfSBlbHNlIGlmIChyZXQgIT0gY21kLT53bGVuKSB7CkBAIC0zOSwxMCArNDAsMTAgQEAKIAogCWlmIChjbWQtPnJsZW4pIHsKIAkJLyogd2FpdCBjbWQgZXhlY3V0aW9uIHRlcm1pbmF0ZSAqLwotCQkjZGVmaW5lIFRJTUVPVVQgNTAKKwkJI2RlZmluZSBUSU1FT1VUIDcwCiAJCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhUSU1FT1VUKTsKIAkJd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7Ci0JCQlyZXQgPSBpMmNfbWFzdGVyX3JlY3Yocy0+Y2xpZW50LCBjbWQtPmFyZ3MsIGNtZC0+cmxlbik7CisJCQlyZXQgPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBjbWQtPmFyZ3MsIGNtZC0+cmxlbik7CiAJCQlpZiAocmV0IDwgMCkgewogCQkJCWdvdG8gZXJyX211dGV4X3VubG9jazsKIAkJCX0gZWxzZSBpZiAocmV0ICE9IGNtZC0+cmxlbikgewpAQCAtNTUsNyArNTYsNyBAQAogCQkJCWJyZWFrOwogCQl9CiAKLQkJZGV2X2RiZygmcy0+Y2xpZW50LT5kZXYsICJjbWQgZXhlY3V0aW9uIHRvb2sgJWQgbXNcbiIsCisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiY21kIGV4ZWN1dGlvbiB0b29rICVkIG1zXG4iLAogCQkJCWppZmZpZXNfdG9fbXNlY3MoamlmZmllcykgLQogCQkJCShqaWZmaWVzX3RvX21zZWNzKHRpbWVvdXQpIC0gVElNRU9VVCkpOwogCkBAIC02NSwyOSArNjYsMjYgQEAKIAkJfQogCX0KIAotCXJldCA9IDA7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmkyY19tdXRleCk7CisJcmV0dXJuIDA7CiAKIGVycl9tdXRleF91bmxvY2s6Ci0JbXV0ZXhfdW5sb2NrKCZzLT5pMmNfbXV0ZXgpOwotCWlmIChyZXQpCi0JCWdvdG8gZXJyOwotCi0JcmV0dXJuIDA7Ci1lcnI6Ci0JZGV2X2RiZygmcy0+Y2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmkyY19tdXRleCk7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzaTIxNjhfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCiB7Ci0Jc3RydWN0IHNpMjE2OCAqcyA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc2kyMTY4X2RldiAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgc2kyMTY4X2NtZCBjbWQ7CiAKIAkqc3RhdHVzID0gMDsKIAotCWlmICghcy0+YWN0aXZlKSB7CisJaWYgKCFkZXYtPmFjdGl2ZSkgewogCQlyZXQgPSAtRUFHQUlOOwogCQlnb3RvIGVycjsKIAl9CkBAIC0xMTMsMjEgKzExMSwxMCBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQkvKgotCSAqIFBvc3NpYmxlIHZhbHVlcyBzZWVuLCBpbiBvcmRlciBmcm9tIHN0cm9uZyBzaWduYWwgdG8gd2VhazoKLQkgKiAxNiAwMDAxIDAxMTAgZnVsbCBsb2NrCi0JICogMWUgMDAwMSAxMTEwIHBhcnRpYWwgbG9jawotCSAqIDFhIDAwMDEgMTAxMCBwYXJ0aWFsIGxvY2sKLQkgKiAxOCAwMDAxIDEwMDAgbm8gbG9jawotCSAqCi0JICogW2IzOmIxXSBsb2NrIGJpdHMKLQkgKiBbYjRdIHN0YXRpc3RpY3MgcmVhZHk/IFNldCBpbiBhIGZldyBzZWNzIGFmdGVyIGxvY2sgaXMgZ2FpbmVkLgotCSAqLwotCiAJc3dpdGNoICgoY21kLmFyZ3NbMl0gPj4gMSkgJiAweDAzKSB7CiAJY2FzZSAweDAxOgogCQkqc3RhdHVzID0gRkVfSEFTX1NJR05BTCB8IEZFX0hBU19DQVJSSUVSOwpAQCAtMTM4LDcgKzEyNSw3IEBACiAJCWJyZWFrOwogCX0KIAotCXMtPmZlX3N0YXR1cyA9ICpzdGF0dXM7CisJZGV2LT5mZV9zdGF0dXMgPSAqc3RhdHVzOwogCiAJaWYgKCpzdGF0dXMgJiBGRV9IQVNfTE9DSykgewogCQljLT5jbnIubGVuID0gMTsKQEAgLTE0OSwzMCArMTM2LDMxIEBACiAJCWMtPmNuci5zdGF0WzBdLnNjYWxlID0gRkVfU0NBTEVfTk9UX0FWQUlMQUJMRTsKIAl9CiAKLQlkZXZfZGJnKCZzLT5jbGllbnQtPmRldiwgInN0YXR1cz0lMDJ4IGFyZ3M9JSpwaFxuIiwKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgInN0YXR1cz0lMDJ4IGFyZ3M9JSpwaFxuIiwKIAkJCSpzdGF0dXMsIGNtZC5ybGVuLCBjbWQuYXJncyk7CiAKIAlyZXR1cm4gMDsKIGVycjoKLQlkZXZfZGJnKCZzLT5jbGllbnQtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNpMjE2OF9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IHNpMjE2OCAqcyA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc2kyMTY4X2RldiAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgc2kyMTY4X2NtZCBjbWQ7CiAJdTggYmFuZHdpZHRoLCBkZWxpdmVyeV9zeXN0ZW07CiAKLQlkZXZfZGJnKCZzLT5jbGllbnQtPmRldiwKLQkJCSJkZWxpdmVyeV9zeXN0ZW09JXUgbW9kdWxhdGlvbj0ldSBmcmVxdWVuY3k9JXUgYmFuZHdpZHRoX2h6PSV1IHN5bWJvbF9yYXRlPSV1IGludmVyc2lvbj0ldSwgc3RyZWFtX2lkPSVkXG4iLAotCQkJYy0+ZGVsaXZlcnlfc3lzdGVtLCBjLT5tb2R1bGF0aW9uLAotCQkJYy0+ZnJlcXVlbmN5LCBjLT5iYW5kd2lkdGhfaHosIGMtPnN5bWJvbF9yYXRlLAotCQkJYy0+aW52ZXJzaW9uLCBjLT5zdHJlYW1faWQpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LAorCQkJImRlbGl2ZXJ5X3N5c3RlbT0ldSBtb2R1bGF0aW9uPSV1IGZyZXF1ZW5jeT0ldSBiYW5kd2lkdGhfaHo9JXUgc3ltYm9sX3JhdGU9JXUgaW52ZXJzaW9uPSV1IHN0cmVhbV9pZD0ldVxuIiwKKwkJCWMtPmRlbGl2ZXJ5X3N5c3RlbSwgYy0+bW9kdWxhdGlvbiwgYy0+ZnJlcXVlbmN5LAorCQkJYy0+YmFuZHdpZHRoX2h6LCBjLT5zeW1ib2xfcmF0ZSwgYy0+aW52ZXJzaW9uLAorCQkJYy0+c3RyZWFtX2lkKTsKIAotCWlmICghcy0+YWN0aXZlKSB7CisJaWYgKCFkZXYtPmFjdGl2ZSkgewogCQlyZXQgPSAtRUFHQUlOOwogCQlnb3RvIGVycjsKIAl9CkBAIC0xOTIsNyArMTgwLDEyIEBACiAJCWdvdG8gZXJyOwogCX0KIAotCWlmIChjLT5iYW5kd2lkdGhfaHogPD0gNTAwMDAwMCkKKwlpZiAoYy0+YmFuZHdpZHRoX2h6ID09IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfSBlbHNlIGlmIChjLT5iYW5kd2lkdGhfaHogPD0gMjAwMDAwMCkKKwkJYmFuZHdpZHRoID0gMHgwMjsKKwllbHNlIGlmIChjLT5iYW5kd2lkdGhfaHogPD0gNTAwMDAwMCkKIAkJYmFuZHdpZHRoID0gMHgwNTsKIAllbHNlIGlmIChjLT5iYW5kd2lkdGhfaHogPD0gNjAwMDAwMCkKIAkJYmFuZHdpZHRoID0gMHgwNjsKQEAgLTIxNyw3ICsyMTAsNyBAQAogCW1lbWNweShjbWQuYXJncywgIlx4ODhceDAyXHgwMlx4MDJceDAyIiwgNSk7CiAJY21kLndsZW4gPSA1OwogCWNtZC5ybGVuID0gNTsKLQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTIzMCw3ICsyMjMsNyBAQAogCQltZW1jcHkoY21kLmFyZ3MsICJceDg5XHgyMVx4MDZceDExXHg4OVx4MjAiLCA2KTsKIAljbWQud2xlbiA9IDY7CiAJY21kLnJsZW4gPSAzOwotCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShzLCAmY21kKTsKKwlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUoY2xpZW50LCAmY21kKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIApAQCAtMjQxLDcgKzIzNCw3IEBACiAJCWNtZC5hcmdzWzJdID0gYy0+c3RyZWFtX2lkID09IE5PX1NUUkVBTV9JRF9GSUxURVIgPyAwIDogMTsKIAkJY21kLndsZW4gPSAzOwogCQljbWQucmxlbiA9IDE7Ci0JCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShzLCAmY21kKTsKKwkJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAl9CkBAIC0yNDksMzUgKzI0MiwzNSBAQAogCW1lbWNweShjbWQuYXJncywgIlx4NTFceDAzIiwgMik7CiAJY21kLndsZW4gPSAyOwogCWNtZC5ybGVuID0gMTI7Ci0JcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKHMsICZjbWQpOworCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShjbGllbnQsICZjbWQpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCiAJbWVtY3B5KGNtZC5hcmdzLCAiXHgxMlx4MDhceDA0IiwgMyk7CiAJY21kLndsZW4gPSAzOwogCWNtZC5ybGVuID0gMzsKLQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAltZW1jcHkoY21kLmFyZ3MsICJceDE0XHgwMFx4MGNceDEwXHgxMlx4MDAiLCA2KTsKIAljbWQud2xlbiA9IDY7CiAJY21kLnJsZW4gPSA0OwotCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShzLCAmY21kKTsKKwlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUoY2xpZW50LCAmY21kKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCW1lbWNweShjbWQuYXJncywgIlx4MTRceDAwXHgwNlx4MTBceDI0XHgwMCIsIDYpOwogCWNtZC53bGVuID0gNjsKIAljbWQucmxlbiA9IDQ7Ci0JcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKHMsICZjbWQpOworCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShjbGllbnQsICZjbWQpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCiAJbWVtY3B5KGNtZC5hcmdzLCAiXHgxNFx4MDBceDA3XHgxMFx4MDBceDI0IiwgNik7CiAJY21kLndsZW4gPSA2OwogCWNtZC5ybGVuID0gNDsKLQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTI4NSwxOCArMjc4LDE4IEBACiAJY21kLmFyZ3NbNF0gPSBkZWxpdmVyeV9zeXN0ZW0gfCBiYW5kd2lkdGg7CiAJY21kLndsZW4gPSA2OwogCWNtZC5ybGVuID0gNDsKLQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAkvKiBzZXQgRFZCLUMgc3ltYm9sIHJhdGUgKi8KIAlpZiAoYy0+ZGVsaXZlcnlfc3lzdGVtID09IFNZU19EVkJDX0FOTkVYX0EpIHsKIAkJbWVtY3B5KGNtZC5hcmdzLCAiXHgxNFx4MDBceDAyXHgxMSIsIDQpOwotCQljbWQuYXJnc1s0XSA9IChjLT5zeW1ib2xfcmF0ZSAvIDEwMDApICYgMHhmZjsKKwkJY21kLmFyZ3NbNF0gPSAoKGMtPnN5bWJvbF9yYXRlIC8gMTAwMCkgPj4gMCkgJiAweGZmOwogCQljbWQuYXJnc1s1XSA9ICgoYy0+c3ltYm9sX3JhdGUgLyAxMDAwKSA+PiA4KSAmIDB4ZmY7CiAJCWNtZC53bGVuID0gNjsKIAkJY21kLnJsZW4gPSA0OwotCQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShjbGllbnQsICZjbWQpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnI7CiAJfQpAQCAtMzA0LDg4ICsyOTcsODggQEAKIAltZW1jcHkoY21kLmFyZ3MsICJceDE0XHgwMFx4MGZceDEwXHgxMFx4MDAiLCA2KTsKIAljbWQud2xlbiA9IDY7CiAJY21kLnJsZW4gPSA0OwotCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShzLCAmY21kKTsKKwlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUoY2xpZW50LCAmY21kKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCW1lbWNweShjbWQuYXJncywgIlx4MTRceDAwXHgwOVx4MTBceGUzXHgwOCIsIDYpOwotCWNtZC5hcmdzWzVdIHw9IHMtPnRzX2Nsb2NrX2ludiA/IDB4MDAgOiAweDEwOworCWNtZC5hcmdzWzVdIHw9IGRldi0+dHNfY2xvY2tfaW52ID8gMHgwMCA6IDB4MTA7CiAJY21kLndsZW4gPSA2OwogCWNtZC5ybGVuID0gNDsKLQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAltZW1jcHkoY21kLmFyZ3MsICJceDE0XHgwMFx4MDhceDEwXHhkN1x4MDUiLCA2KTsKLQljbWQuYXJnc1s1XSB8PSBzLT50c19jbG9ja19pbnYgPyAweDAwIDogMHgxMDsKKwljbWQuYXJnc1s1XSB8PSBkZXYtPnRzX2Nsb2NrX2ludiA/IDB4MDAgOiAweDEwOwogCWNtZC53bGVuID0gNjsKIAljbWQucmxlbiA9IDQ7Ci0JcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKHMsICZjbWQpOworCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShjbGllbnQsICZjbWQpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCiAJbWVtY3B5KGNtZC5hcmdzLCAiXHgxNFx4MDBceDAxXHgxMlx4MDBceDAwIiwgNik7CiAJY21kLndsZW4gPSA2OwogCWNtZC5ybGVuID0gNDsKLQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAltZW1jcHkoY21kLmFyZ3MsICJceDE0XHgwMFx4MDFceDAzXHgwY1x4MDAiLCA2KTsKIAljbWQud2xlbiA9IDY7CiAJY21kLnJsZW4gPSA0OwotCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShzLCAmY21kKTsKKwlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUoY2xpZW50LCAmY21kKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCW1lbWNweShjbWQuYXJncywgIlx4ODUiLCAxKTsKIAljbWQud2xlbiA9IDE7CiAJY21kLnJsZW4gPSAxOwotCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShzLCAmY21kKTsKKwlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUoY2xpZW50LCAmY21kKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAotCXMtPmRlbGl2ZXJ5X3N5c3RlbSA9IGMtPmRlbGl2ZXJ5X3N5c3RlbTsKKwlkZXYtPmRlbGl2ZXJ5X3N5c3RlbSA9IGMtPmRlbGl2ZXJ5X3N5c3RlbTsKIAogCXJldHVybiAwOwogZXJyOgotCWRldl9kYmcoJnMtPmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc2kyMTY4X2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IHNpMjE2OCAqcyA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc2kyMTY4X2RldiAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHJldCwgbGVuLCByZW1haW5pbmc7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7Ci0JdTggKmZ3X2ZpbGU7Ci0JY29uc3QgdW5zaWduZWQgaW50IGkyY193cl9tYXggPSA4OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJY29uc3QgY2hhciAqZndfbmFtZTsKIAlzdHJ1Y3Qgc2kyMTY4X2NtZCBjbWQ7CiAJdW5zaWduZWQgaW50IGNoaXBfaWQ7CiAKLQlkZXZfZGJnKCZzLT5jbGllbnQtPmRldiwgIlxuIik7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJcbiIpOwogCiAJLyogaW5pdGlhbGl6ZSAqLwogCW1lbWNweShjbWQuYXJncywgIlx4YzBceDEyXHgwMFx4MGNceDAwXHgwZFx4MTZceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiLCAxMyk7CiAJY21kLndsZW4gPSAxMzsKIAljbWQucmxlbiA9IDA7Ci0JcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKHMsICZjbWQpOworCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShjbGllbnQsICZjbWQpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JaWYgKHMtPmZ3X2xvYWRlZCkgeworCWlmIChkZXYtPmZ3X2xvYWRlZCkgewogCQkvKiByZXN1bWUgKi8KIAkJbWVtY3B5KGNtZC5hcmdzLCAiXHhjMFx4MDZceDA4XHgwZlx4MDBceDIwXHgyMVx4MDEiLCA4KTsKIAkJY21kLndsZW4gPSA4OwogCQljbWQucmxlbiA9IDE7Ci0JCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShzLCAmY21kKTsKKwkJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAogCQltZW1jcHkoY21kLmFyZ3MsICJceDg1IiwgMSk7CiAJCWNtZC53bGVuID0gMTsKIAkJY21kLnJsZW4gPSAxOwotCQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShjbGllbnQsICZjbWQpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnI7CiAKQEAgLTM5Niw3ICszODksNyBAQAogCW1lbWNweShjbWQuYXJncywgIlx4YzBceDA2XHgwMVx4MGZceDAwXHgyMFx4MjBceDAxIiwgOCk7CiAJY21kLndsZW4gPSA4OwogCWNtZC5ybGVuID0gMTsKLQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTQwNCw3ICszOTcsNyBAQAogCW1lbWNweShjbWQuYXJncywgIlx4MDIiLCAxKTsKIAljbWQud2xlbiA9IDE7CiAJY21kLnJsZW4gPSAxMzsKLQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTQxNyw1MCArNDEwLDQ4IEBACiAKIAlzd2l0Y2ggKGNoaXBfaWQpIHsKIAljYXNlIFNJMjE2OF9BMjA6Ci0JCWZ3X2ZpbGUgPSBTSTIxNjhfQTIwX0ZJUk1XQVJFOworCQlmd19uYW1lID0gU0kyMTY4X0EyMF9GSVJNV0FSRTsKIAkJYnJlYWs7CiAJY2FzZSBTSTIxNjhfQTMwOgotCQlmd19maWxlID0gU0kyMTY4X0EzMF9GSVJNV0FSRTsKKwkJZndfbmFtZSA9IFNJMjE2OF9BMzBfRklSTVdBUkU7CiAJCWJyZWFrOwogCWNhc2UgU0kyMTY4X0I0MDoKLQkJZndfZmlsZSA9IFNJMjE2OF9CNDBfRklSTVdBUkU7CisJCWZ3X25hbWUgPSBTSTIxNjhfQjQwX0ZJUk1XQVJFOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkZXZfZXJyKCZzLT5jbGllbnQtPmRldiwKLQkJCQkidW5rbm93biBjaGlwIHZlcnNpb24gU2kyMSVkLSVjJWMlY1xuIiwKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ1bmtub3duIGNoaXAgdmVyc2lvbiBTaTIxJWQtJWMlYyVjXG4iLAogCQkJCWNtZC5hcmdzWzJdLCBjbWQuYXJnc1sxXSwKIAkJCQljbWQuYXJnc1szXSwgY21kLmFyZ3NbNF0pOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycjsKIAl9CiAKLQkvKiBjb2xkIHN0YXRlIC0gdHJ5IHRvIGRvd25sb2FkIGZpcm13YXJlICovCi0JZGV2X2luZm8oJnMtPmNsaWVudC0+ZGV2LCAiZm91bmQgYSAnJXMnIGluIGNvbGQgc3RhdGVcbiIsCi0JCQlzaTIxNjhfb3BzLmluZm8ubmFtZSk7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiZm91bmQgYSAnU2lsaWNvbiBMYWJzIFNpMjElZC0lYyVjJWMnXG4iLAorCQkJY21kLmFyZ3NbMl0sIGNtZC5hcmdzWzFdLCBjbWQuYXJnc1szXSwgY21kLmFyZ3NbNF0pOwogCiAJLyogcmVxdWVzdCB0aGUgZmlybXdhcmUsIHRoaXMgd2lsbCBibG9jayBhbmQgdGltZW91dCAqLwotCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd19maWxlLCAmcy0+Y2xpZW50LT5kZXYpOworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd19uYW1lLCAmY2xpZW50LT5kZXYpOwogCWlmIChyZXQpIHsKIAkJLyogZmFsbGJhY2sgbWVjaGFuaXNtIHRvIGhhbmRsZSBvbGQgbmFtZSBmb3IgU2kyMTY4IEI0MCBmdyAqLwogCQlpZiAoY2hpcF9pZCA9PSBTSTIxNjhfQjQwKSB7Ci0JCQlmd19maWxlID0gU0kyMTY4X0I0MF9GSVJNV0FSRV9GQUxMQkFDSzsKLQkJCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd19maWxlLCAmcy0+Y2xpZW50LT5kZXYpOworCQkJZndfbmFtZSA9IFNJMjE2OF9CNDBfRklSTVdBUkVfRkFMTEJBQ0s7CisJCQlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZndfbmFtZSwgJmNsaWVudC0+ZGV2KTsKIAkJfQogCiAJCWlmIChyZXQgPT0gMCkgewotCQkJZGV2X25vdGljZSgmcy0+Y2xpZW50LT5kZXYsCisJCQlkZXZfbm90aWNlKCZjbGllbnQtPmRldiwKIAkJCQkJInBsZWFzZSBpbnN0YWxsIGZpcm13YXJlIGZpbGUgJyVzJ1xuIiwKIAkJCQkJU0kyMTY4X0I0MF9GSVJNV0FSRSk7CiAJCX0gZWxzZSB7Ci0JCQlkZXZfZXJyKCZzLT5jbGllbnQtPmRldiwKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAogCQkJCQkiZmlybXdhcmUgZmlsZSAnJXMnIG5vdCBmb3VuZFxuIiwKLQkJCQkJZndfZmlsZSk7Ci0JCQlnb3RvIGVycm9yX2Z3X3JlbGVhc2U7CisJCQkJCWZ3X25hbWUpOworCQkJZ290byBlcnJfcmVsZWFzZV9maXJtd2FyZTsKIAkJfQogCX0KIAotCWRldl9pbmZvKCZzLT5jbGllbnQtPmRldiwgImRvd25sb2FkaW5nIGZpcm13YXJlIGZyb20gZmlsZSAnJXMnXG4iLAotCQkJZndfZmlsZSk7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiZG93bmxvYWRpbmcgZmlybXdhcmUgZnJvbSBmaWxlICclcydcbiIsCisJCQlmd19uYW1lKTsKIAogCWlmICgoZnctPnNpemUgJSAxNyA9PSAwKSAmJiAoZnctPmRhdGFbMF0gPiA1KSkgewogCQkvKiBmaXJtd2FyZSBpcyBpbiB0aGUgbmV3IGZvcm1hdCAqLwpAQCAtNDY5LDQxICs0NjAsMzcgQEAKIAkJCW1lbWNweShjbWQuYXJncywgJmZ3LT5kYXRhWyhmdy0+c2l6ZSAtIHJlbWFpbmluZykgKyAxXSwgbGVuKTsKIAkJCWNtZC53bGVuID0gbGVuOwogCQkJY21kLnJsZW4gPSAxOwotCQkJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKHMsICZjbWQpOwotCQkJaWYgKHJldCkgewotCQkJCWRldl9lcnIoJnMtPmNsaWVudC0+ZGV2LAotCQkJCQkJImZpcm13YXJlIGRvd25sb2FkIGZhaWxlZD0lZFxuIiwKLQkJCQkJCXJldCk7Ci0JCQkJZ290byBlcnJvcl9md19yZWxlYXNlOwotCQkJfQorCQkJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOwogCQl9Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKGZ3LT5zaXplICUgOCA9PSAwKSB7CiAJCS8qIGZpcm13YXJlIGlzIGluIHRoZSBvbGQgZm9ybWF0ICovCi0JCWZvciAocmVtYWluaW5nID0gZnctPnNpemU7IHJlbWFpbmluZyA+IDA7IHJlbWFpbmluZyAtPSBpMmNfd3JfbWF4KSB7Ci0JCQlsZW4gPSByZW1haW5pbmc7Ci0JCQlpZiAobGVuID4gaTJjX3dyX21heCkKLQkJCQlsZW4gPSBpMmNfd3JfbWF4OwotCisJCWZvciAocmVtYWluaW5nID0gZnctPnNpemU7IHJlbWFpbmluZyA+IDA7IHJlbWFpbmluZyAtPSA4KSB7CisJCQlsZW4gPSA4OwogCQkJbWVtY3B5KGNtZC5hcmdzLCAmZnctPmRhdGFbZnctPnNpemUgLSByZW1haW5pbmddLCBsZW4pOwogCQkJY21kLndsZW4gPSBsZW47CiAJCQljbWQucmxlbiA9IDE7Ci0JCQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUocywgJmNtZCk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJZGV2X2Vycigmcy0+Y2xpZW50LT5kZXYsCi0JCQkJCQkiZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkPSVkXG4iLAotCQkJCQkJcmV0KTsKLQkJCQlnb3RvIGVycm9yX2Z3X3JlbGVhc2U7Ci0JCQl9CisJCQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUoY2xpZW50LCAmY21kKTsKKwkJCWlmIChyZXQpCisJCQkJYnJlYWs7CiAJCX0KKwl9IGVsc2UgeworCQkvKiBiYWQgb3IgdW5rbm93biBmaXJtd2FyZSBmb3JtYXQgKi8KKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9yZWxlYXNlX2Zpcm13YXJlOwogCX0KIAogCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCWZ3ID0gTlVMTDsKIAogCW1lbWNweShjbWQuYXJncywgIlx4MDFceDAxIiwgMik7CiAJY21kLndsZW4gPSAyOwogCWNtZC5ybGVuID0gMTsKLQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTUxMSw1OCArNDk4LDU2IEBACiAJbWVtY3B5KGNtZC5hcmdzLCAiXHgxMSIsIDEpOwogCWNtZC53bGVuID0gMTsKIAljbWQucmxlbiA9IDEwOwotCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShzLCAmY21kKTsKKwlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUoY2xpZW50LCAmY21kKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAotCWRldl9kYmcoJnMtPmNsaWVudC0+ZGV2LCAiZmlybXdhcmUgdmVyc2lvbjogJWMuJWMuJWRcbiIsCisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiZmlybXdhcmUgdmVyc2lvbjogJWMuJWMuJWRcbiIsCiAJCQljbWQuYXJnc1s2XSwgY21kLmFyZ3NbN10sIGNtZC5hcmdzWzhdKTsKIAogCS8qIHNldCB0cyBtb2RlICovCiAJbWVtY3B5KGNtZC5hcmdzLCAiXHgxNFx4MDBceDAxXHgxMFx4MTBceDAwIiwgNik7Ci0JY21kLmFyZ3NbNF0gfD0gcy0+dHNfbW9kZTsKKwljbWQuYXJnc1s0XSB8PSBkZXYtPnRzX21vZGU7CiAJY21kLndsZW4gPSA2OwogCWNtZC5ybGVuID0gNDsKLQlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJcmV0ID0gc2kyMTY4X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlzLT5md19sb2FkZWQgPSB0cnVlOwotCi0JZGV2X2luZm8oJnMtPmNsaWVudC0+ZGV2LCAiZm91bmQgYSAnJXMnIGluIHdhcm0gc3RhdGVcbiIsCi0JCQlzaTIxNjhfb3BzLmluZm8ubmFtZSk7CisJZGV2LT5md19sb2FkZWQgPSB0cnVlOwogd2FybToKLQlzLT5hY3RpdmUgPSB0cnVlOworCWRldi0+YWN0aXZlID0gdHJ1ZTsKIAogCXJldHVybiAwOwogCi1lcnJvcl9md19yZWxlYXNlOgorZXJyX3JlbGVhc2VfZmlybXdhcmU6CiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiBlcnI6Ci0JZGV2X2RiZygmcy0+Y2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzaTIxNjhfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IHNpMjE2OCAqcyA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc2kyMTY4X2RldiAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgc2kyMTY4X2NtZCBjbWQ7CiAKLQlkZXZfZGJnKCZzLT5jbGllbnQtPmRldiwgIlxuIik7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJcbiIpOwogCi0Jcy0+YWN0aXZlID0gZmFsc2U7CisJZGV2LT5hY3RpdmUgPSBmYWxzZTsKIAogCW1lbWNweShjbWQuYXJncywgIlx4MTMiLCAxKTsKIAljbWQud2xlbiA9IDE7CiAJY21kLnJsZW4gPSAwOwotCXJldCA9IHNpMjE2OF9jbWRfZXhlY3V0ZShzLCAmY21kKTsKKwlyZXQgPSBzaTIxNjhfY21kX2V4ZWN1dGUoY2xpZW50LCAmY21kKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCXJldHVybiAwOwogZXJyOgotCWRldl9kYmcoJnMtPmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTU4MSwyMSArNTY2LDIyIEBACiAgKi8KIHN0YXRpYyBpbnQgc2kyMTY4X3NlbGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHZvaWQgKm11eF9wcml2LCB1MzIgY2hhbikKIHsKLQlzdHJ1Y3Qgc2kyMTY4ICpzID0gbXV4X3ByaXY7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IG11eF9wcml2OworCXN0cnVjdCBzaTIxNjhfZGV2ICpkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgcmV0OwogCXN0cnVjdCBpMmNfbXNnIGdhdGVfb3Blbl9tc2cgPSB7Ci0JCS5hZGRyID0gcy0+Y2xpZW50LT5hZGRyLAorCQkuYWRkciA9IGNsaWVudC0+YWRkciwKIAkJLmZsYWdzID0gMCwKIAkJLmxlbiA9IDMsCiAJCS5idWYgPSAiXHhjMFx4MGRceDAxIiwKIAl9OwogCi0JbXV0ZXhfbG9jaygmcy0+aTJjX211dGV4KTsKKwltdXRleF9sb2NrKCZkZXYtPmkyY19tdXRleCk7CiAKIAkvKiBvcGVuIHR1bmVyIEkyQyBnYXRlICovCi0JcmV0ID0gX19pMmNfdHJhbnNmZXIocy0+Y2xpZW50LT5hZGFwdGVyLCAmZ2F0ZV9vcGVuX21zZywgMSk7CisJcmV0ID0gX19pMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCAmZ2F0ZV9vcGVuX21zZywgMSk7CiAJaWYgKHJldCAhPSAxKSB7Ci0JCWRldl93YXJuKCZzLT5jbGllbnQtPmRldiwgImkyYyB3cml0ZSBmYWlsZWQ9JWRcbiIsIHJldCk7CisJCWRldl93YXJuKCZjbGllbnQtPmRldiwgImkyYyB3cml0ZSBmYWlsZWQ9JWRcbiIsIHJldCk7CiAJCWlmIChyZXQgPj0gMCkKIAkJCXJldCA9IC1FUkVNT1RFSU87CiAJfSBlbHNlIHsKQEAgLTYwNywyNiArNTkzLDI3IEBACiAKIHN0YXRpYyBpbnQgc2kyMTY4X2Rlc2VsZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgdm9pZCAqbXV4X3ByaXYsIHUzMiBjaGFuKQogewotCXN0cnVjdCBzaTIxNjggKnMgPSBtdXhfcHJpdjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gbXV4X3ByaXY7CisJc3RydWN0IHNpMjE2OF9kZXYgKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCByZXQ7CiAJc3RydWN0IGkyY19tc2cgZ2F0ZV9jbG9zZV9tc2cgPSB7Ci0JCS5hZGRyID0gcy0+Y2xpZW50LT5hZGRyLAorCQkuYWRkciA9IGNsaWVudC0+YWRkciwKIAkJLmZsYWdzID0gMCwKIAkJLmxlbiA9IDMsCiAJCS5idWYgPSAiXHhjMFx4MGRceDAwIiwKIAl9OwogCiAJLyogY2xvc2UgdHVuZXIgSTJDIGdhdGUgKi8KLQlyZXQgPSBfX2kyY190cmFuc2ZlcihzLT5jbGllbnQtPmFkYXB0ZXIsICZnYXRlX2Nsb3NlX21zZywgMSk7CisJcmV0ID0gX19pMmNfdHJhbnNmZXIoY2xpZW50LT5hZGFwdGVyLCAmZ2F0ZV9jbG9zZV9tc2csIDEpOwogCWlmIChyZXQgIT0gMSkgewotCQlkZXZfd2Fybigmcy0+Y2xpZW50LT5kZXYsICJpMmMgd3JpdGUgZmFpbGVkPSVkXG4iLCByZXQpOworCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJpMmMgd3JpdGUgZmFpbGVkPSVkXG4iLCByZXQpOwogCQlpZiAocmV0ID49IDApCiAJCQlyZXQgPSAtRVJFTU9URUlPOwogCX0gZWxzZSB7CiAJCXJldCA9IDA7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZzLT5pMmNfbXV0ZXgpOworCW11dGV4X3VubG9jaygmZGV2LT5pMmNfbXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTYzNSw2ICs2MjIsOCBAQAogCS5kZWxzeXMgPSB7U1lTX0RWQlQsIFNZU19EVkJUMiwgU1lTX0RWQkNfQU5ORVhfQX0sCiAJLmluZm8gPSB7CiAJCS5uYW1lID0gIlNpbGljb24gTGFicyBTaTIxNjgiLAorCQkuc3ltYm9sX3JhdGVfbWluID0gMTAwMDAwMCwKKwkJLnN5bWJvbF9yYXRlX21heCA9IDcyMDAwMDAsCiAJCS5jYXBzID0JRkVfQ0FOX0ZFQ18xXzIgfAogCQkJRkVfQ0FOX0ZFQ18yXzMgfAogCQkJRkVfQ0FOX0ZFQ18zXzQgfApAQCAtNjcwLDcxICs2NTksNjkgQEAKIAkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzaTIxNjhfY29uZmlnICpjb25maWcgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCBzaTIxNjggKnM7CisJc3RydWN0IHNpMjE2OF9kZXYgKmRldjsKIAlpbnQgcmV0OwogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICJcbiIpOwogCi0JcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaTIxNjgpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXMpIHsKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJremFsbG9jKCkgZmFpbGVkXG4iKTsKIAkJZ290byBlcnI7CiAJfQogCi0Jcy0+Y2xpZW50ID0gY2xpZW50OwotCW11dGV4X2luaXQoJnMtPmkyY19tdXRleCk7CisJbXV0ZXhfaW5pdCgmZGV2LT5pMmNfbXV0ZXgpOwogCiAJLyogY3JlYXRlIG11eCBpMmMgYWRhcHRlciBmb3IgdHVuZXIgKi8KLQlzLT5hZGFwdGVyID0gaTJjX2FkZF9tdXhfYWRhcHRlcihjbGllbnQtPmFkYXB0ZXIsICZjbGllbnQtPmRldiwgcywKLQkJCTAsIDAsIDAsIHNpMjE2OF9zZWxlY3QsIHNpMjE2OF9kZXNlbGVjdCk7Ci0JaWYgKHMtPmFkYXB0ZXIgPT0gTlVMTCkgeworCWRldi0+YWRhcHRlciA9IGkyY19hZGRfbXV4X2FkYXB0ZXIoY2xpZW50LT5hZGFwdGVyLCAmY2xpZW50LT5kZXYsCisJCQljbGllbnQsIDAsIDAsIDAsIHNpMjE2OF9zZWxlY3QsIHNpMjE2OF9kZXNlbGVjdCk7CisJaWYgKGRldi0+YWRhcHRlciA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyOworCQlnb3RvIGVycl9rZnJlZTsKIAl9CiAKIAkvKiBjcmVhdGUgZHZiX2Zyb250ZW5kICovCi0JbWVtY3B5KCZzLT5mZS5vcHMsICZzaTIxNjhfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKLQlzLT5mZS5kZW1vZHVsYXRvcl9wcml2ID0gczsKKwltZW1jcHkoJmRldi0+ZmUub3BzLCAmc2kyMTY4X29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7CisJZGV2LT5mZS5kZW1vZHVsYXRvcl9wcml2ID0gY2xpZW50OworCSpjb25maWctPmkyY19hZGFwdGVyID0gZGV2LT5hZGFwdGVyOworCSpjb25maWctPmZlID0gJmRldi0+ZmU7CisJZGV2LT50c19tb2RlID0gY29uZmlnLT50c19tb2RlOworCWRldi0+dHNfY2xvY2tfaW52ID0gY29uZmlnLT50c19jbG9ja19pbnY7CisJZGV2LT5md19sb2FkZWQgPSBmYWxzZTsKIAotCSpjb25maWctPmkyY19hZGFwdGVyID0gcy0+YWRhcHRlcjsKLQkqY29uZmlnLT5mZSA9ICZzLT5mZTsKLQlzLT50c19tb2RlID0gY29uZmlnLT50c19tb2RlOwotCXMtPnRzX2Nsb2NrX2ludiA9IGNvbmZpZy0+dHNfY2xvY2tfaW52OwotCXMtPmZ3X2xvYWRlZCA9IGZhbHNlOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRldik7CiAKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBzKTsKLQotCWRldl9pbmZvKCZzLT5jbGllbnQtPmRldiwKLQkJCSJTaWxpY29uIExhYnMgU2kyMTY4IHN1Y2Nlc3NmdWxseSBhdHRhY2hlZFxuIik7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiU2lsaWNvbiBMYWJzIFNpMjE2OCBzdWNjZXNzZnVsbHkgYXR0YWNoZWRcbiIpOwogCXJldHVybiAwOworZXJyX2tmcmVlOgorCWtmcmVlKGRldik7CiBlcnI6Ci0Ja2ZyZWUocyk7CiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBzaTIxNjhfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IHNpMjE2OCAqcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzaTIxNjhfZGV2ICpkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXG4iKTsKIAotCWkyY19kZWxfbXV4X2FkYXB0ZXIocy0+YWRhcHRlcik7CisJaTJjX2RlbF9tdXhfYWRhcHRlcihkZXYtPmFkYXB0ZXIpOwogCi0Jcy0+ZmUub3BzLnJlbGVhc2UgPSBOVUxMOwotCXMtPmZlLmRlbW9kdWxhdG9yX3ByaXYgPSBOVUxMOworCWRldi0+ZmUub3BzLnJlbGVhc2UgPSBOVUxMOworCWRldi0+ZmUuZGVtb2R1bGF0b3JfcHJpdiA9IE5VTEw7CiAKLQlrZnJlZShzKTsKKwlrZnJlZShkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzaTIxNjhfaWRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzaTIxNjhfaWRfdGFibGVbXSA9IHsKIAl7InNpMjE2OCIsIDB9LAogCXt9CiB9OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNpMjE2OF9pZCk7CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2kyMTY4X2lkX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpMjE2OF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKQEAgLTc0Myw3ICs3MzAsNyBAQAogCX0sCiAJLnByb2JlCQk9IHNpMjE2OF9wcm9iZSwKIAkucmVtb3ZlCQk9IHNpMjE2OF9yZW1vdmUsCi0JLmlkX3RhYmxlCT0gc2kyMTY4X2lkLAorCS5pZF90YWJsZQk9IHNpMjE2OF9pZF90YWJsZSwKIH07CiAKIG1vZHVsZV9pMmNfZHJpdmVyKHNpMjE2OF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3NpMjE2OC5oIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3NpMjE2OC5oCmluZGV4IDg3YmMxMjEuLjcwZDcwMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9zaTIxNjguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvc2kyMTY4LmgKQEAgLTM2LDE0ICszNiwxMiBAQAogCXN0cnVjdCBpMmNfYWRhcHRlciAqKmkyY19hZGFwdGVyOwogCiAJLyogVFMgbW9kZSAqLworI2RlZmluZSBTSTIxNjhfVFNfUEFSQUxMRUwJMHgwNgorI2RlZmluZSBTSTIxNjhfVFNfU0VSSUFMCTB4MDMKIAl1OCB0c19tb2RlOwogCiAJLyogVFMgY2xvY2sgaW52ZXJ0ZWQgKi8KIAlib29sIHRzX2Nsb2NrX2ludjsKLQogfTsKIAotI2RlZmluZSBTSTIxNjhfVFNfUEFSQUxMRUwJMHgwNgotI2RlZmluZSBTSTIxNjhfVFNfU0VSSUFMCTB4MDMKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvc2kyMTY4X3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9zaTIxNjhfcHJpdi5oCmluZGV4IDYwYmMzMzQuLmFhZGQxMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9zaTIxNjhfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9zaTIxNjhfcHJpdi5oCkBAIC0yOCw4ICsyOCw3IEBACiAjZGVmaW5lIFNJMjE2OF9CNDBfRklSTVdBUkVfRkFMTEJBQ0sgImR2Yi1kZW1vZC1zaTIxNjgtMDIuZnciCiAKIC8qIHN0YXRlIHN0cnVjdCAqLwotc3RydWN0IHNpMjE2OCB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKK3N0cnVjdCBzaTIxNjhfZGV2IHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJc3RydWN0IG11dGV4IGkyY19tdXRleDsKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3N0YjA4OTlfYWxnby5jIGIvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3N0YjA4OTlfYWxnby5jCmluZGV4IDkzNTk2ZTAuLjMwMTJmMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy9zdGIwODk5X2FsZ28uYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvc3RiMDg5OV9hbGdvLmMKQEAgLTE5LDYgKzE5LDcgQEAKIAlGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICovCiAKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlICJzdGIwODk5X2Rydi5oIgogI2luY2x1ZGUgInN0YjA4OTlfcHJpdi5oIgogI2luY2x1ZGUgInN0YjA4OTlfcmVnLmgiCkBAIC0xNDkwLDkgKzE0OTEsNyBAQAogCQkvKiBTdG9yZSBzaWduYWwgcGFyYW1ldGVycwkqLwogCQlvZmZzZXRmcmVxID0gU1RCMDg5OV9SRUFEX1MyUkVHKFNUQjA4OTlfUzJERU1PRCwgQ1JMX0ZSRVEpOwogCi0JCS8qIHNpZ24gZXh0ZW5kIDMwIGJpdCB2YWx1ZSBiZWZvcmUgdXNpbmcgaXQgaW4gY2FsY3VsYXRpb25zICovCi0JCWlmIChvZmZzZXRmcmVxICYgKDEgPDwgMjkpKQotCQkJb2Zmc2V0ZnJlcSB8PSAtMSA8PCAzMDsKKwkJb2Zmc2V0ZnJlcSA9IHNpZ25fZXh0ZW5kMzIob2Zmc2V0ZnJlcSwgMjkpOwogCiAJCW9mZnNldGZyZXEgPSBvZmZzZXRmcmVxIC8gKCgxIDw8IDMwKSAvIDEwMDApOwogCQlvZmZzZXRmcmVxICo9IChpbnRlcm5hbC0+bWFzdGVyX2NsayAvIDEwMDAwMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3N0YjA4OTlfZHJ2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvc3RiMDg5OV9kcnYuYwppbmRleCAxOTY0NmZiLi5jNzM4OTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvc3RiMDg5OV9kcnYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvc3RiMDg5OV9kcnYuYwpAQCAtMjAsNiArMjAsNyBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNjkxLDcgKzY5Miw3IEBACiAJCXJlZyA9IHN0YjA4OTlfcmVhZF9yZWcoc3RhdGUsIFNUQjA4OTlfRElTU1RBVFVTKTsKIAkJaWYgKCFTVEIwODk5X0dFVEZJRUxEKEZJRk9GVUxMLCByZWcpKQogCQkJYnJlYWs7Ci0JCWlmICgoamlmZmllcyAtIHN0YXJ0KSA+IHRpbWVvdXQpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhcnQgKyB0aW1lb3V0KSkgewogCQkJZHByaW50ayhzdGF0ZS0+dmVyYm9zZSwgRkVfRVJST1IsIDEsICJ0aW1lZCBvdXQgISEiKTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CkBAIC03MzMsNyArNzM0LDcgQEAKIAogCXdoaWxlICghU1RCMDg5OV9HRVRGSUVMRChSWEVORCwgcmVnKSkgewogCQlyZWcgPSBzdGIwODk5X3JlYWRfcmVnKHN0YXRlLCBTVEIwODk5X0RJU1JYX1NUMCk7Ci0JCWlmIChqaWZmaWVzIC0gc3RhcnQgPiB0aW1lb3V0KSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHN0YXJ0ICsgdGltZW91dCkpIHsKIAkJCWRwcmludGsoc3RhdGUtPnZlcmJvc2UsIEZFX0VSUk9SLCAxLCAidGltZWQgb3V0ISEiKTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CkBAIC03ODIsNyArNzgzLDcgQEAKIAogCXdoaWxlICghU1RCMDg5OV9HRVRGSUVMRChUWElETEUsIHJlZykpIHsKIAkJcmVnID0gc3RiMDg5OV9yZWFkX3JlZyhzdGF0ZSwgU1RCMDg5OV9ESVNTVEFUVVMpOwotCQlpZiAoamlmZmllcyAtIHN0YXJ0ID4gdGltZW91dCkgeworCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGFydCArIHRpbWVvdXQpKSB7CiAJCQlkcHJpbnRrKHN0YXRlLT52ZXJib3NlLCBGRV9FUlJPUiwgMSwgInRpbWVkIG91dCEhIik7CiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3RjOTA1MjIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiLWZyb250ZW5kcy90YzkwNTIyLmMKaW5kZXggYjM1ZDY1Yy4uZGNlMjJjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmItZnJvbnRlbmRzL3RjOTA1MjIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMvdGM5MDUyMi5jCkBAIC0yMTQsNiArMjE0LDcgQEAKIAlzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKIAljLT5kZWxpdmVyeV9zeXN0ZW0gPSBTWVNfSVNEQlM7CisJYy0+c3ltYm9sX3JhdGUgPSAyODg2MDAwMDsKIAogCWxheWVycyA9IDA7CiAJcmV0ID0gcmVnX3JlYWQoc3RhdGUsIDB4ZTYsIHZhbCwgNSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZwppbmRleCAyMDVkNzEzNi4uZGE1OGM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2kyYy9LY29uZmlnCkBAIC0xNzcsNyArMTc3LDcgQEAKIAogY29uZmlnIFZJREVPX0FEVjcxODAKIAl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURWNzE4MCBkZWNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIFZJREVPX1Y0TDJfU1VCREVWX0FQSQogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcyBBRFY3MTgwIHZpZGVvIGRlY29kZXIuCiAKQEAgLTE5Niw3ICsxOTYsNyBAQAogCiBjb25maWcgVklERU9fQURWNzYwNAogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRFY3NjA0IGRlY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQyAmJiBWSURFT19WNEwyX1NVQkRFVl9BUEkgJiYgTUVESUFfQ09OVFJPTExFUgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMgJiYgVklERU9fVjRMMl9TVUJERVZfQVBJCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzIEFEVjc2MDQgdmlkZW8gZGVjb2Rlci4KIApAQCAtMjA4LDcgKzIwOCw4IEBACiAKIGNvbmZpZyBWSURFT19BRFY3ODQyCiAJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFEVjc4NDIgZGVjb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIFZJREVPX1Y0TDJfU1VCREVWX0FQSSAmJiBNRURJQV9DT05UUk9MTEVSCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQyAmJiBWSURFT19WNEwyX1NVQkRFVl9BUEkKKwlzZWxlY3QgSERNSQogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcyBBRFY3ODQyIHZpZGVvIGRlY29kZXIuCiAKQEAgLTQyMiw3ICs0MjMsNyBAQAogCiBjb25maWcgVklERU9fQURWNzUxMQogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRFY3NTExIGVuY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQyAmJiBWSURFT19WNEwyX1NVQkRFVl9BUEkgJiYgTUVESUFfQ09OVFJPTExFUgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMgJiYgVklERU9fVjRMMl9TVUJERVZfQVBJCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzIEFEVjc1MTEgdmlkZW8gZW5jb2Rlci4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvYWR2NzE4MC5jIGIvZHJpdmVycy9tZWRpYS9pMmMvYWR2NzE4MC5jCmluZGV4IGJmZmU2ZWIuLmI3NTg3OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL2FkdjcxODAuYworKysgYi9kcml2ZXJzL21lZGlhL2kyYy9hZHY3MTgwLmMKQEAgLTMwLDU2ICszMCw2MCBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAotI2RlZmluZSBBRFY3MTgwX0lOUFVUX0NPTlRST0xfUkVHCQkJMHgwMAotI2RlZmluZSBBRFY3MTgwX0lOUFVUX0NPTlRST0xfQURfUEFMX0JHX05UU0NfSl9TRUNBTQkweDAwCi0jZGVmaW5lIEFEVjcxODBfSU5QVVRfQ09OVFJPTF9BRF9QQUxfQkdfTlRTQ19KX1NFQ0FNX1BFRCAweDEwCi0jZGVmaW5lIEFEVjcxODBfSU5QVVRfQ09OVFJPTF9BRF9QQUxfTl9OVFNDX0pfU0VDQU0JMHgyMAotI2RlZmluZSBBRFY3MTgwX0lOUFVUX0NPTlRST0xfQURfUEFMX05fTlRTQ19NX1NFQ0FNCTB4MzAKLSNkZWZpbmUgQURWNzE4MF9JTlBVVF9DT05UUk9MX05UU0NfSgkJCTB4NDAKLSNkZWZpbmUgQURWNzE4MF9JTlBVVF9DT05UUk9MX05UU0NfTQkJCTB4NTAKLSNkZWZpbmUgQURWNzE4MF9JTlBVVF9DT05UUk9MX1BBTDYwCQkJMHg2MAotI2RlZmluZSBBRFY3MTgwX0lOUFVUX0NPTlRST0xfTlRTQ180NDMJCQkweDcwCi0jZGVmaW5lIEFEVjcxODBfSU5QVVRfQ09OVFJPTF9QQUxfQkcJCQkweDgwCi0jZGVmaW5lIEFEVjcxODBfSU5QVVRfQ09OVFJPTF9QQUxfTgkJCTB4OTAKLSNkZWZpbmUgQURWNzE4MF9JTlBVVF9DT05UUk9MX1BBTF9NCQkJMHhhMAotI2RlZmluZSBBRFY3MTgwX0lOUFVUX0NPTlRST0xfUEFMX01fUEVECQkJMHhiMAotI2RlZmluZSBBRFY3MTgwX0lOUFVUX0NPTlRST0xfUEFMX0NPTUJfTgkJMHhjMAotI2RlZmluZSBBRFY3MTgwX0lOUFVUX0NPTlRST0xfUEFMX0NPTUJfTl9QRUQJCTB4ZDAKLSNkZWZpbmUgQURWNzE4MF9JTlBVVF9DT05UUk9MX1BBTF9TRUNBTQkJCTB4ZTAKLSNkZWZpbmUgQURWNzE4MF9JTlBVVF9DT05UUk9MX1BBTF9TRUNBTV9QRUQJCTB4ZjAKKyNkZWZpbmUgQURWNzE4MF9TVERfQURfUEFMX0JHX05UU0NfSl9TRUNBTQkJMHgwCisjZGVmaW5lIEFEVjcxODBfU1REX0FEX1BBTF9CR19OVFNDX0pfU0VDQU1fUEVECQkweDEKKyNkZWZpbmUgQURWNzE4MF9TVERfQURfUEFMX05fTlRTQ19KX1NFQ0FNCQkweDIKKyNkZWZpbmUgQURWNzE4MF9TVERfQURfUEFMX05fTlRTQ19NX1NFQ0FNCQkweDMKKyNkZWZpbmUgQURWNzE4MF9TVERfTlRTQ19KCQkJCTB4NAorI2RlZmluZSBBRFY3MTgwX1NURF9OVFNDX00JCQkJMHg1CisjZGVmaW5lIEFEVjcxODBfU1REX1BBTDYwCQkJCTB4NgorI2RlZmluZSBBRFY3MTgwX1NURF9OVFNDXzQ0MwkJCQkweDcKKyNkZWZpbmUgQURWNzE4MF9TVERfUEFMX0JHCQkJCTB4OAorI2RlZmluZSBBRFY3MTgwX1NURF9QQUxfTgkJCQkweDkKKyNkZWZpbmUgQURWNzE4MF9TVERfUEFMX00JCQkJMHhhCisjZGVmaW5lIEFEVjcxODBfU1REX1BBTF9NX1BFRAkJCQkweGIKKyNkZWZpbmUgQURWNzE4MF9TVERfUEFMX0NPTUJfTgkJCQkweGMKKyNkZWZpbmUgQURWNzE4MF9TVERfUEFMX0NPTUJfTl9QRUQJCQkweGQKKyNkZWZpbmUgQURWNzE4MF9TVERfUEFMX1NFQ0FNCQkJCTB4ZQorI2RlZmluZSBBRFY3MTgwX1NURF9QQUxfU0VDQU1fUEVECQkJMHhmCisKKyNkZWZpbmUgQURWNzE4MF9SRUdfSU5QVVRfQ09OVFJPTAkJCTB4MDAwMAogI2RlZmluZSBBRFY3MTgwX0lOUFVUX0NPTlRST0xfSU5TRUxfTUFTSwkJMHgwZgogCi0jZGVmaW5lIEFEVjcxODBfRVhURU5ERURfT1VUUFVUX0NPTlRST0xfUkVHCQkweDA0CisjZGVmaW5lIEFEVjcxODJfUkVHX0lOUFVUX1ZJRFNFTAkJCTB4MDAwMgorCisjZGVmaW5lIEFEVjcxODBfUkVHX0VYVEVOREVEX09VVFBVVF9DT05UUk9MCQkweDAwMDQKICNkZWZpbmUgQURWNzE4MF9FWFRFTkRFRF9PVVRQVVRfQ09OVFJPTF9OVFNDRElTCQkweEM1CiAKLSNkZWZpbmUgQURWNzE4MF9BVVRPREVURUNUX0VOQUJMRV9SRUcJCQkweDA3CisjZGVmaW5lIEFEVjcxODBfUkVHX0FVVE9ERVRFQ1RfRU5BQkxFCQkJMHgwNwogI2RlZmluZSBBRFY3MTgwX0FVVE9ERVRFQ1RfREVGQVVMVAkJCTB4N2YKIC8qIENvbnRyYXN0ICovCi0jZGVmaW5lIEFEVjcxODBfQ09OX1JFRwkJMHgwOAkvKlVuc2lnbmVkICovCisjZGVmaW5lIEFEVjcxODBfUkVHX0NPTgkJMHgwMDA4CS8qVW5zaWduZWQgKi8KICNkZWZpbmUgQURWNzE4MF9DT05fTUlOCQkwCiAjZGVmaW5lIEFEVjcxODBfQ09OX0RFRgkJMTI4CiAjZGVmaW5lIEFEVjcxODBfQ09OX01BWAkJMjU1CiAvKiBCcmlnaHRuZXNzKi8KLSNkZWZpbmUgQURWNzE4MF9CUklfUkVHCQkweDBhCS8qU2lnbmVkICovCisjZGVmaW5lIEFEVjcxODBfUkVHX0JSSQkJMHgwMDBhCS8qU2lnbmVkICovCiAjZGVmaW5lIEFEVjcxODBfQlJJX01JTgkJLTEyOAogI2RlZmluZSBBRFY3MTgwX0JSSV9ERUYJCTAKICNkZWZpbmUgQURWNzE4MF9CUklfTUFYCQkxMjcKIC8qIEh1ZSAqLwotI2RlZmluZSBBRFY3MTgwX0hVRV9SRUcJCTB4MGIJLypTaWduZWQsIGludmVydGVkICovCisjZGVmaW5lIEFEVjcxODBfUkVHX0hVRQkJMHgwMDBiCS8qU2lnbmVkLCBpbnZlcnRlZCAqLwogI2RlZmluZSBBRFY3MTgwX0hVRV9NSU4JCS0xMjcKICNkZWZpbmUgQURWNzE4MF9IVUVfREVGCQkwCiAjZGVmaW5lIEFEVjcxODBfSFVFX01BWAkJMTI4CiAKLSNkZWZpbmUgQURWNzE4MF9BRElfQ1RSTF9SRUcJCQkJMHgwZQotI2RlZmluZSBBRFY3MTgwX0FESV9DVFJMX0lSUV9TUEFDRQkJCTB4MjAKKyNkZWZpbmUgQURWNzE4MF9SRUdfQ1RSTAkJMHgwMDBlCisjZGVmaW5lIEFEVjcxODBfQ1RSTF9JUlFfU1BBQ0UJCTB4MjAKIAotI2RlZmluZSBBRFY3MTgwX1BXUl9NQU5fUkVHCQkweDBmCisjZGVmaW5lIEFEVjcxODBfUkVHX1BXUl9NQU4JCTB4MGYKICNkZWZpbmUgQURWNzE4MF9QV1JfTUFOX09OCQkweDA0CiAjZGVmaW5lIEFEVjcxODBfUFdSX01BTl9PRkYJCTB4MjQKICNkZWZpbmUgQURWNzE4MF9QV1JfTUFOX1JFUwkJMHg4MAogCi0jZGVmaW5lIEFEVjcxODBfU1RBVFVTMV9SRUcJCQkJMHgxMAorI2RlZmluZSBBRFY3MTgwX1JFR19TVEFUVVMxCQkweDAwMTAKICNkZWZpbmUgQURWNzE4MF9TVEFUVVMxX0lOX0xPQ0sJCTB4MDEKICNkZWZpbmUgQURWNzE4MF9TVEFUVVMxX0FVVE9EX01BU0sJMHg3MAogI2RlZmluZSBBRFY3MTgwX1NUQVRVUzFfQVVUT0RfTlRTTV9NX0oJMHgwMApAQCAtOTEsNDkgKzk1LDE2MSBAQAogI2RlZmluZSBBRFY3MTgwX1NUQVRVUzFfQVVUT0RfUEFMX0NPTUIJMHg2MAogI2RlZmluZSBBRFY3MTgwX1NUQVRVUzFfQVVUT0RfU0VDQU1fNTI1CTB4NzAKIAotI2RlZmluZSBBRFY3MTgwX0lERU5UX1JFRyAweDExCisjZGVmaW5lIEFEVjcxODBfUkVHX0lERU5UIDB4MDAxMQogI2RlZmluZSBBRFY3MTgwX0lEXzcxODAgMHgxOAogCi0jZGVmaW5lIEFEVjcxODBfSUNPTkYxX0FESQkJMHg0MAorI2RlZmluZSBBRFY3MTgwX1JFR19JQ09ORjEJCTB4MDA0MAogI2RlZmluZSBBRFY3MTgwX0lDT05GMV9BQ1RJVkVfTE9XCTB4MDEKICNkZWZpbmUgQURWNzE4MF9JQ09ORjFfUFNZTkNfT05MWQkweDEwCiAjZGVmaW5lIEFEVjcxODBfSUNPTkYxX0FDVElWRV9UT19DTFIJMHhDMAogLyogU2F0dXJhdGlvbiAqLwotI2RlZmluZSBBRFY3MTgwX1NEX1NBVF9DQl9SRUcJMHhlMwkvKlVuc2lnbmVkICovCi0jZGVmaW5lIEFEVjcxODBfU0RfU0FUX0NSX1JFRwkweGU0CS8qVW5zaWduZWQgKi8KKyNkZWZpbmUgQURWNzE4MF9SRUdfU0RfU0FUX0NCCTB4MDBlMwkvKlVuc2lnbmVkICovCisjZGVmaW5lIEFEVjcxODBfUkVHX1NEX1NBVF9DUgkweDAwZTQJLypVbnNpZ25lZCAqLwogI2RlZmluZSBBRFY3MTgwX1NBVF9NSU4JCTAKICNkZWZpbmUgQURWNzE4MF9TQVRfREVGCQkxMjgKICNkZWZpbmUgQURWNzE4MF9TQVRfTUFYCQkyNTUKIAogI2RlZmluZSBBRFY3MTgwX0lSUTFfTE9DSwkweDAxCiAjZGVmaW5lIEFEVjcxODBfSVJRMV9VTkxPQ0sJMHgwMgotI2RlZmluZSBBRFY3MTgwX0lTUjFfQURJCTB4NDIKLSNkZWZpbmUgQURWNzE4MF9JQ1IxX0FESQkweDQzCi0jZGVmaW5lIEFEVjcxODBfSU1SMV9BREkJMHg0NAotI2RlZmluZSBBRFY3MTgwX0lNUjJfQURJCTB4NDgKKyNkZWZpbmUgQURWNzE4MF9SRUdfSVNSMQkweDAwNDIKKyNkZWZpbmUgQURWNzE4MF9SRUdfSUNSMQkweDAwNDMKKyNkZWZpbmUgQURWNzE4MF9SRUdfSU1SMQkweDAwNDQKKyNkZWZpbmUgQURWNzE4MF9SRUdfSU1SMgkweDAwNDgKICNkZWZpbmUgQURWNzE4MF9JUlEzX0FEX0NIQU5HRQkweDA4Ci0jZGVmaW5lIEFEVjcxODBfSVNSM19BREkJMHg0QQotI2RlZmluZSBBRFY3MTgwX0lDUjNfQURJCTB4NEIKLSNkZWZpbmUgQURWNzE4MF9JTVIzX0FESQkweDRDCi0jZGVmaW5lIEFEVjcxODBfSU1SNF9BREkJMHg1MAorI2RlZmluZSBBRFY3MTgwX1JFR19JU1IzCTB4MDA0QQorI2RlZmluZSBBRFY3MTgwX1JFR19JQ1IzCTB4MDA0QgorI2RlZmluZSBBRFY3MTgwX1JFR19JTVIzCTB4MDA0QworI2RlZmluZSBBRFY3MTgwX1JFR19JTVI0CTB4NTAKIAotI2RlZmluZSBBRFY3MTgwX05UU0NfVl9CSVRfRU5EX1JFRwkweEU2CisjZGVmaW5lIEFEVjcxODBfUkVHX05UU0NfVl9CSVRfRU5ECTB4MDBFNgogI2RlZmluZSBBRFY3MTgwX05UU0NfVl9CSVRfRU5EX01BTlVBTF9OVkVORAkweDRGCiAKKyNkZWZpbmUgQURWNzE4MF9SRUdfVlBQX1NMQVZFX0FERFIJMHhGRAorI2RlZmluZSBBRFY3MTgwX1JFR19DU0lfU0xBVkVfQUREUgkweEZFCisKKyNkZWZpbmUgQURWNzE4MF9SRUdfRkxDT05UUk9MIDB4NDBlMAorI2RlZmluZSBBRFY3MTgwX0ZMQ09OVFJPTF9GTF9FTkFCTEUgMHgxCisKKyNkZWZpbmUgQURWNzE4MF9DU0lfUkVHX1BXUkROCTB4MDAKKyNkZWZpbmUgQURWNzE4MF9DU0lfUFdSRE4JMHg4MAorCisjZGVmaW5lIEFEVjcxODBfSU5QVVRfQ1ZCU19BSU4xIDB4MDAKKyNkZWZpbmUgQURWNzE4MF9JTlBVVF9DVkJTX0FJTjIgMHgwMQorI2RlZmluZSBBRFY3MTgwX0lOUFVUX0NWQlNfQUlOMyAweDAyCisjZGVmaW5lIEFEVjcxODBfSU5QVVRfQ1ZCU19BSU40IDB4MDMKKyNkZWZpbmUgQURWNzE4MF9JTlBVVF9DVkJTX0FJTjUgMHgwNAorI2RlZmluZSBBRFY3MTgwX0lOUFVUX0NWQlNfQUlONiAweDA1CisjZGVmaW5lIEFEVjcxODBfSU5QVVRfU1ZJREVPX0FJTjFfQUlOMiAweDA2CisjZGVmaW5lIEFEVjcxODBfSU5QVVRfU1ZJREVPX0FJTjNfQUlONCAweDA3CisjZGVmaW5lIEFEVjcxODBfSU5QVVRfU1ZJREVPX0FJTjVfQUlONiAweDA4CisjZGVmaW5lIEFEVjcxODBfSU5QVVRfWVBSUEJfQUlOMV9BSU4yX0FJTjMgMHgwOQorI2RlZmluZSBBRFY3MTgwX0lOUFVUX1lQUlBCX0FJTjRfQUlONV9BSU42IDB4MGEKKworI2RlZmluZSBBRFY3MTgyX0lOUFVUX0NWQlNfQUlOMSAweDAwCisjZGVmaW5lIEFEVjcxODJfSU5QVVRfQ1ZCU19BSU4yIDB4MDEKKyNkZWZpbmUgQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjMgMHgwMgorI2RlZmluZSBBRFY3MTgyX0lOUFVUX0NWQlNfQUlONCAweDAzCisjZGVmaW5lIEFEVjcxODJfSU5QVVRfQ1ZCU19BSU41IDB4MDQKKyNkZWZpbmUgQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjYgMHgwNQorI2RlZmluZSBBRFY3MTgyX0lOUFVUX0NWQlNfQUlONyAweDA2CisjZGVmaW5lIEFEVjcxODJfSU5QVVRfQ1ZCU19BSU44IDB4MDcKKyNkZWZpbmUgQURWNzE4Ml9JTlBVVF9TVklERU9fQUlOMV9BSU4yIDB4MDgKKyNkZWZpbmUgQURWNzE4Ml9JTlBVVF9TVklERU9fQUlOM19BSU40IDB4MDkKKyNkZWZpbmUgQURWNzE4Ml9JTlBVVF9TVklERU9fQUlONV9BSU42IDB4MGEKKyNkZWZpbmUgQURWNzE4Ml9JTlBVVF9TVklERU9fQUlON19BSU44IDB4MGIKKyNkZWZpbmUgQURWNzE4Ml9JTlBVVF9ZUFJQQl9BSU4xX0FJTjJfQUlOMyAweDBjCisjZGVmaW5lIEFEVjcxODJfSU5QVVRfWVBSUEJfQUlONF9BSU41X0FJTjYgMHgwZAorI2RlZmluZSBBRFY3MTgyX0lOUFVUX0RJRkZfQ1ZCU19BSU4xX0FJTjIgMHgwZQorI2RlZmluZSBBRFY3MTgyX0lOUFVUX0RJRkZfQ1ZCU19BSU4zX0FJTjQgMHgwZgorI2RlZmluZSBBRFY3MTgyX0lOUFVUX0RJRkZfQ1ZCU19BSU41X0FJTjYgMHgxMAorI2RlZmluZSBBRFY3MTgyX0lOUFVUX0RJRkZfQ1ZCU19BSU43X0FJTjggMHgxMQorCisjZGVmaW5lIEFEVjcxODBfREVGQVVMVF9DU0lfSTJDX0FERFIgMHg0NAorI2RlZmluZSBBRFY3MTgwX0RFRkFVTFRfVlBQX0kyQ19BRERSIDB4NDIKKworI2RlZmluZSBWNEwyX0NJRF9BRFZfRkFTVF9TV0lUQ0gJKFY0TDJfQ0lEX1VTRVJfQURWNzE4MF9CQVNFICsgMHgwMCkKKworc3RydWN0IGFkdjcxODBfc3RhdGU7CisKKyNkZWZpbmUgQURWNzE4MF9GTEFHX1JFU0VUX1BPV0VSRUQJQklUKDApCisjZGVmaW5lIEFEVjcxODBfRkxBR19WMgkJCUJJVCgxKQorI2RlZmluZSBBRFY3MTgwX0ZMQUdfTUlQSV9DU0kyCQlCSVQoMikKKyNkZWZpbmUgQURWNzE4MF9GTEFHX0kyUAkJQklUKDMpCisKK3N0cnVjdCBhZHY3MTgwX2NoaXBfaW5mbyB7CisJdW5zaWduZWQgaW50IGZsYWdzOworCXVuc2lnbmVkIGludCB2YWxpZF9pbnB1dF9tYXNrOworCWludCAoKnNldF9zdGQpKHN0cnVjdCBhZHY3MTgwX3N0YXRlICpzdCwgdW5zaWduZWQgaW50IHN0ZCk7CisJaW50ICgqc2VsZWN0X2lucHV0KShzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSAqc3QsIHVuc2lnbmVkIGludCBpbnB1dCk7CisJaW50ICgqaW5pdCkoc3RydWN0IGFkdjcxODBfc3RhdGUgKnN0YXRlKTsKK307CisKIHN0cnVjdCBhZHY3MTgwX3N0YXRlIHsKIAlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgY3RybF9oZGw7CiAJc3RydWN0IHY0bDJfc3ViZGV2CXNkOworCXN0cnVjdCBtZWRpYV9wYWQJcGFkOwogCXN0cnVjdCBtdXRleAkJbXV0ZXg7IC8qIG11dHVhbCBleGNsLiB3aGVuIGFjY2Vzc2luZyBjaGlwICovCiAJaW50CQkJaXJxOwogCXY0bDJfc3RkX2lkCQljdXJyX25vcm07CiAJYm9vbAkJCWF1dG9kZXRlY3Q7CiAJYm9vbAkJCXBvd2VyZWQ7CiAJdTgJCQlpbnB1dDsKKworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQ7CisJdW5zaWduZWQgaW50CQlyZWdpc3Rlcl9wYWdlOworCXN0cnVjdCBpMmNfY2xpZW50CSpjc2lfY2xpZW50OworCXN0cnVjdCBpMmNfY2xpZW50CSp2cHBfY2xpZW50OworCWNvbnN0IHN0cnVjdCBhZHY3MTgwX2NoaXBfaW5mbyAqY2hpcF9pbmZvOworCWVudW0gdjRsMl9maWVsZAkJZmllbGQ7CiB9OwogI2RlZmluZSB0b19hZHY3MTgwX3NkKF9jdHJsKSAoJmNvbnRhaW5lcl9vZihfY3RybC0+aGFuZGxlciwJCVwKIAkJCQkJICAgIHN0cnVjdCBhZHY3MTgwX3N0YXRlLAlcCiAJCQkJCSAgICBjdHJsX2hkbCktPnNkKQogCitzdGF0aWMgaW50IGFkdjcxODBfc2VsZWN0X3BhZ2Uoc3RydWN0IGFkdjcxODBfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBpbnQgcGFnZSkKK3sKKwlpZiAoc3RhdGUtPnJlZ2lzdGVyX3BhZ2UgIT0gcGFnZSkgeworCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHN0YXRlLT5jbGllbnQsIEFEVjcxODBfUkVHX0NUUkwsCisJCQlwYWdlKTsKKwkJc3RhdGUtPnJlZ2lzdGVyX3BhZ2UgPSBwYWdlOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkdjcxODBfd3JpdGUoc3RydWN0IGFkdjcxODBfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBpbnQgcmVnLAorCXVuc2lnbmVkIGludCB2YWx1ZSkKK3sKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzdGF0ZS0+bXV0ZXgpOworCWFkdjcxODBfc2VsZWN0X3BhZ2Uoc3RhdGUsIHJlZyA+PiA4KTsKKwlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzdGF0ZS0+Y2xpZW50LCByZWcgJiAweGZmLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgYWR2NzE4MF9yZWFkKHN0cnVjdCBhZHY3MTgwX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzdGF0ZS0+bXV0ZXgpOworCWFkdjcxODBfc2VsZWN0X3BhZ2Uoc3RhdGUsIHJlZyA+PiA4KTsKKwlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHN0YXRlLT5jbGllbnQsIHJlZyAmIDB4ZmYpOworfQorCitzdGF0aWMgaW50IGFkdjcxODBfY3NpX3dyaXRlKHN0cnVjdCBhZHY3MTgwX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IHJlZywKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc3RhdGUtPmNzaV9jbGllbnQsIHJlZywgdmFsdWUpOworfQorCitzdGF0aWMgaW50IGFkdjcxODBfc2V0X3ZpZGVvX3N0YW5kYXJkKHN0cnVjdCBhZHY3MTgwX3N0YXRlICpzdGF0ZSwKKwl1bnNpZ25lZCBpbnQgc3RkKQoreworCXJldHVybiBzdGF0ZS0+Y2hpcF9pbmZvLT5zZXRfc3RkKHN0YXRlLCBzdGQpOworfQorCitzdGF0aWMgaW50IGFkdjcxODBfdnBwX3dyaXRlKHN0cnVjdCBhZHY3MTgwX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IHJlZywKKwl1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoc3RhdGUtPnZwcF9jbGllbnQsIHJlZywgdmFsdWUpOworfQorCiBzdGF0aWMgdjRsMl9zdGRfaWQgYWR2NzE4MF9zdGRfdG9fdjRsMih1OCBzdGF0dXMxKQogewogCS8qIGluIGNhc2UgVjRMMl9JTl9TVF9OT19TSUdOQUwgKi8KQEAgLTE2NSwyMiArMjgxLDIyIEBACiBzdGF0aWMgaW50IHY0bDJfc3RkX3RvX2FkdjcxODAodjRsMl9zdGRfaWQgc3RkKQogewogCWlmIChzdGQgPT0gVjRMMl9TVERfUEFMXzYwKQotCQlyZXR1cm4gQURWNzE4MF9JTlBVVF9DT05UUk9MX1BBTDYwOworCQlyZXR1cm4gQURWNzE4MF9TVERfUEFMNjA7CiAJaWYgKHN0ZCA9PSBWNEwyX1NURF9OVFNDXzQ0MykKLQkJcmV0dXJuIEFEVjcxODBfSU5QVVRfQ09OVFJPTF9OVFNDXzQ0MzsKKwkJcmV0dXJuIEFEVjcxODBfU1REX05UU0NfNDQzOwogCWlmIChzdGQgPT0gVjRMMl9TVERfUEFMX04pCi0JCXJldHVybiBBRFY3MTgwX0lOUFVUX0NPTlRST0xfUEFMX047CisJCXJldHVybiBBRFY3MTgwX1NURF9QQUxfTjsKIAlpZiAoc3RkID09IFY0TDJfU1REX1BBTF9NKQotCQlyZXR1cm4gQURWNzE4MF9JTlBVVF9DT05UUk9MX1BBTF9NOworCQlyZXR1cm4gQURWNzE4MF9TVERfUEFMX007CiAJaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfTmMpCi0JCXJldHVybiBBRFY3MTgwX0lOUFVUX0NPTlRST0xfUEFMX0NPTUJfTjsKKwkJcmV0dXJuIEFEVjcxODBfU1REX1BBTF9DT01CX047CiAKIAlpZiAoc3RkICYgVjRMMl9TVERfUEFMKQotCQlyZXR1cm4gQURWNzE4MF9JTlBVVF9DT05UUk9MX1BBTF9CRzsKKwkJcmV0dXJuIEFEVjcxODBfU1REX1BBTF9CRzsKIAlpZiAoc3RkICYgVjRMMl9TVERfTlRTQykKLQkJcmV0dXJuIEFEVjcxODBfSU5QVVRfQ09OVFJPTF9OVFNDX007CisJCXJldHVybiBBRFY3MTgwX1NURF9OVFNDX007CiAJaWYgKHN0ZCAmIFY0TDJfU1REX1NFQ0FNKQotCQlyZXR1cm4gQURWNzE4MF9JTlBVVF9DT05UUk9MX1BBTF9TRUNBTTsKKwkJcmV0dXJuIEFEVjcxODBfU1REX1BBTF9TRUNBTTsKIAogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMTkzLDEwICszMDksMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2FkdjcxODBfc3RhdHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUzMiAqc3RhdHVzLAorc3RhdGljIGludCBfX2FkdjcxODBfc3RhdHVzKHN0cnVjdCBhZHY3MTgwX3N0YXRlICpzdGF0ZSwgdTMyICpzdGF0dXMsCiAJCQkgICAgdjRsMl9zdGRfaWQgKnN0ZCkKIHsKLQlpbnQgc3RhdHVzMSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFEVjcxODBfU1RBVFVTMV9SRUcpOworCWludCBzdGF0dXMxID0gYWR2NzE4MF9yZWFkKHN0YXRlLCBBRFY3MTgwX1JFR19TVEFUVVMxKTsKIAogCWlmIChzdGF0dXMxIDwgMCkKIAkJcmV0dXJuIHN0YXR1czE7CkBAIC0yMjUsNyArMzQxLDcgQEAKIAlpZiAoIXN0YXRlLT5hdXRvZGV0ZWN0IHx8IHN0YXRlLT5pcnEgPiAwKQogCQkqc3RkID0gc3RhdGUtPmN1cnJfbm9ybTsKIAllbHNlCi0JCWVyciA9IF9fYWR2NzE4MF9zdGF0dXModjRsMl9nZXRfc3ViZGV2ZGF0YShzZCksIE5VTEwsIHN0ZCk7CisJCWVyciA9IF9fYWR2NzE4MF9zdGF0dXMoc3RhdGUsIE5VTEwsIHN0ZCk7CiAKIAltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CiAJcmV0dXJuIGVycjsKQEAgLTIzNiwyNiArMzUyLDE5IEBACiB7CiAJc3RydWN0IGFkdjcxODBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCWludCByZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnN0YXRlLT5tdXRleCk7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIFdlIGNhbm5vdCBkaXNjcmltaW5hdGUgYmV0d2VlbiBMUUZQIGFuZCA0MC1waW4gTEZDU1AsIHNvIGFjY2VwdAotCSAqIGFsbCBpbnB1dHMgYW5kIGxldCB0aGUgY2FyZCBkcml2ZXIgdGFrZSBjYXJlIG9mIHZhbGlkYXRpb24KLQkgKi8KLQlpZiAoKGlucHV0ICYgQURWNzE4MF9JTlBVVF9DT05UUk9MX0lOU0VMX01BU0spICE9IGlucHV0KQorCWlmIChpbnB1dCA+IDMxIHx8ICEoQklUKGlucHV0KSAmIHN0YXRlLT5jaGlwX2luZm8tPnZhbGlkX2lucHV0X21hc2spKSB7CisJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OworCX0KIAotCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFEVjcxODBfSU5QVVRfQ09OVFJPTF9SRUcpOworCXJldCA9IHN0YXRlLT5jaGlwX2luZm8tPnNlbGVjdF9pbnB1dChzdGF0ZSwgaW5wdXQpOwogCi0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0ICY9IH5BRFY3MTgwX0lOUFVUX0NPTlRST0xfSU5TRUxfTUFTSzsKLQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJQURWNzE4MF9JTlBVVF9DT05UUk9MX1JFRywgcmV0IHwgaW5wdXQpOwotCXN0YXRlLT5pbnB1dCA9IGlucHV0OworCWlmIChyZXQgPT0gMCkKKwkJc3RhdGUtPmlucHV0ID0gaW5wdXQ7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0yNjgsNzQgKzM3NywxMDQgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gX19hZHY3MTgwX3N0YXR1cyh2NGwyX2dldF9zdWJkZXZkYXRhKHNkKSwgc3RhdHVzLCBOVUxMKTsKKwlyZXQgPSBfX2FkdjcxODBfc3RhdHVzKHN0YXRlLCBzdGF0dXMsIE5VTEwpOwogCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGFkdjcxODBfcHJvZ3JhbV9zdGQoc3RydWN0IGFkdjcxODBfc3RhdGUgKnN0YXRlKQoreworCWludCByZXQ7CisKKwlpZiAoc3RhdGUtPmF1dG9kZXRlY3QpIHsKKwkJcmV0ID0gYWR2NzE4MF9zZXRfdmlkZW9fc3RhbmRhcmQoc3RhdGUsCisJCQlBRFY3MTgwX1NURF9BRF9QQUxfQkdfTlRTQ19KX1NFQ0FNKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCV9fYWR2NzE4MF9zdGF0dXMoc3RhdGUsIE5VTEwsICZzdGF0ZS0+Y3Vycl9ub3JtKTsKKwl9IGVsc2UgeworCQlyZXQgPSB2NGwyX3N0ZF90b19hZHY3MTgwKHN0YXRlLT5jdXJyX25vcm0pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gYWR2NzE4MF9zZXRfdmlkZW9fc3RhbmRhcmQoc3RhdGUsIHJldCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhZHY3MTgwX3Nfc3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKIHsKIAlzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCWludCByZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnN0YXRlLT5tdXRleCk7CisKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJLyogYWxsIHN0YW5kYXJkcyAtPiBhdXRvZGV0ZWN0ICovCiAJaWYgKHN0ZCA9PSBWNEwyX1NURF9BTEwpIHsKLQkJcmV0ID0KLQkJICAgIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFY3MTgwX0lOUFVUX0NPTlRST0xfUkVHLAotCQkJCUFEVjcxODBfSU5QVVRfQ09OVFJPTF9BRF9QQUxfQkdfTlRTQ19KX1NFQ0FNCi0JCQkJCSAgICAgIHwgc3RhdGUtPmlucHV0KTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQotCQlfX2FkdjcxODBfc3RhdHVzKGNsaWVudCwgTlVMTCwgJnN0YXRlLT5jdXJyX25vcm0pOwogCQlzdGF0ZS0+YXV0b2RldGVjdCA9IHRydWU7CiAJfSBlbHNlIHsKKwkJLyogTWFrZSBzdXJlIHdlIGNhbiBzdXBwb3J0IHRoaXMgc3RkICovCiAJCXJldCA9IHY0bDJfc3RkX3RvX2FkdjcxODAoc3RkKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKIAotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCUFEVjcxODBfSU5QVVRfQ09OVFJPTF9SRUcsCi0JCQkJCQlyZXQgfCBzdGF0ZS0+aW5wdXQpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCiAJCXN0YXRlLT5jdXJyX25vcm0gPSBzdGQ7CiAJCXN0YXRlLT5hdXRvZGV0ZWN0ID0gZmFsc2U7CiAJfQotCXJldCA9IDA7CisKKwlyZXQgPSBhZHY3MTgwX3Byb2dyYW1fc3RkKHN0YXRlKTsKIG91dDoKIAltdXRleF91bmxvY2soJnN0YXRlLT5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhZHY3MTgwX3NldF9wb3dlcihzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSAqc3RhdGUsCi0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgYm9vbCBvbikKK3N0YXRpYyBpbnQgYWR2NzE4MF9zZXRfcG93ZXIoc3RydWN0IGFkdjcxODBfc3RhdGUgKnN0YXRlLCBib29sIG9uKQogewogCXU4IHZhbDsKKwlpbnQgcmV0OwogCiAJaWYgKG9uKQogCQl2YWwgPSBBRFY3MTgwX1BXUl9NQU5fT047CiAJZWxzZQogCQl2YWwgPSBBRFY3MTgwX1BXUl9NQU5fT0ZGOwogCi0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFY3MTgwX1BXUl9NQU5fUkVHLCB2YWwpOworCXJldCA9IGFkdjcxODBfd3JpdGUoc3RhdGUsIEFEVjcxODBfUkVHX1BXUl9NQU4sIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChzdGF0ZS0+Y2hpcF9pbmZvLT5mbGFncyAmIEFEVjcxODBfRkxBR19NSVBJX0NTSTIpIHsKKwkJaWYgKG9uKSB7CisJCQlhZHY3MTgwX2NzaV93cml0ZShzdGF0ZSwgMHhERSwgMHgwMik7CisJCQlhZHY3MTgwX2NzaV93cml0ZShzdGF0ZSwgMHhEMiwgMHhGNyk7CisJCQlhZHY3MTgwX2NzaV93cml0ZShzdGF0ZSwgMHhEOCwgMHg2NSk7CisJCQlhZHY3MTgwX2NzaV93cml0ZShzdGF0ZSwgMHhFMCwgMHgwOSk7CisJCQlhZHY3MTgwX2NzaV93cml0ZShzdGF0ZSwgMHgyQywgMHgwMCk7CisJCQlpZiAoc3RhdGUtPmZpZWxkID09IFY0TDJfRklFTERfTk9ORSkKKwkJCQlhZHY3MTgwX2NzaV93cml0ZShzdGF0ZSwgMHgxRCwgMHg4MCk7CisJCQlhZHY3MTgwX2NzaV93cml0ZShzdGF0ZSwgMHgwMCwgMHgwMCk7CisJCX0gZWxzZSB7CisJCQlhZHY3MTgwX2NzaV93cml0ZShzdGF0ZSwgMHgwMCwgMHg4MCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhZHY3MTgwX3NfcG93ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IG9uKQogewogCXN0cnVjdCBhZHY3MTgwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJaW50IHJldDsKIAogCXJldCA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmc3RhdGUtPm11dGV4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gYWR2NzE4MF9zZXRfcG93ZXIoc3RhdGUsIGNsaWVudCwgb24pOworCXJldCA9IGFkdjcxODBfc2V0X3Bvd2VyKHN0YXRlLCBvbik7CiAJaWYgKHJldCA9PSAwKQogCQlzdGF0ZS0+cG93ZXJlZCA9IG9uOwogCkBAIC0zNDcsNyArNDg2LDYgQEAKIHsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gdG9fYWR2NzE4MF9zZChjdHJsKTsKIAlzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCWludCByZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnN0YXRlLT5tdXRleCk7CiAJaW50IHZhbDsKIApAQCAtMzU2LDI2ICs0OTQsMzYgQEAKIAl2YWwgPSBjdHJsLT52YWw7CiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVjcxODBfQlJJX1JFRywgdmFsKTsKKwkJcmV0ID0gYWR2NzE4MF93cml0ZShzdGF0ZSwgQURWNzE4MF9SRUdfQlJJLCB2YWwpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0hVRToKIAkJLypIdWUgaXMgaW52ZXJ0ZWQgYWNjb3JkaW5nIHRvIEhTTCBjaGFydCAqLwotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURWNzE4MF9IVUVfUkVHLCAtdmFsKTsKKwkJcmV0ID0gYWR2NzE4MF93cml0ZShzdGF0ZSwgQURWNzE4MF9SRUdfSFVFLCAtdmFsKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVjcxODBfQ09OX1JFRywgdmFsKTsKKwkJcmV0ID0gYWR2NzE4MF93cml0ZShzdGF0ZSwgQURWNzE4MF9SRUdfQ09OLCB2YWwpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJCS8qCiAJCSAqVGhpcyBjb3VsZCBiZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UvVjRMMl9DSURfUkVEX0JBTEFOQ0UKIAkJICpMZXQncyBub3QgY29uZnVzZSB0aGUgdXNlciwgZXZlcnlib2R5IHVuZGVyc3RhbmRzIHNhdHVyYXRpb24KIAkJICovCi0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFY3MTgwX1NEX1NBVF9DQl9SRUcsCi0JCQkJCQl2YWwpOworCQlyZXQgPSBhZHY3MTgwX3dyaXRlKHN0YXRlLCBBRFY3MTgwX1JFR19TRF9TQVRfQ0IsIHZhbCk7CiAJCWlmIChyZXQgPCAwKQogCQkJYnJlYWs7Ci0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFY3MTgwX1NEX1NBVF9DUl9SRUcsCi0JCQkJCQl2YWwpOworCQlyZXQgPSBhZHY3MTgwX3dyaXRlKHN0YXRlLCBBRFY3MTgwX1JFR19TRF9TQVRfQ1IsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQURWX0ZBU1RfU1dJVENIOgorCQlpZiAoY3RybC0+dmFsKSB7CisJCQkvKiBBREkgcmVxdWlyZWQgd3JpdGUgKi8KKwkJCWFkdjcxODBfd3JpdGUoc3RhdGUsIDB4ODBkOSwgMHg0NCk7CisJCQlhZHY3MTgwX3dyaXRlKHN0YXRlLCBBRFY3MTgwX1JFR19GTENPTlRST0wsCisJCQkJQURWNzE4MF9GTENPTlRST0xfRkxfRU5BQkxFKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEFESSByZXF1aXJlZCB3cml0ZSAqLworCQkJYWR2NzE4MF93cml0ZShzdGF0ZSwgMHg4MGQ5LCAweGM0KTsKKwkJCWFkdjcxODBfd3JpdGUoc3RhdGUsIEFEVjcxODBfUkVHX0ZMQ09OVFJPTCwgMHgwMCk7CisJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTM4OSw2ICs1MzcsMTYgQEAKIAkuc19jdHJsID0gYWR2NzE4MF9zX2N0cmwsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9jb25maWcgYWR2NzE4MF9jdHJsX2Zhc3Rfc3dpdGNoID0geworCS5vcHMgPSAmYWR2NzE4MF9jdHJsX29wcywKKwkuaWQgPSBWNEwyX0NJRF9BRFZfRkFTVF9TV0lUQ0gsCisJLm5hbWUgPSAiRmFzdCBTd2l0Y2hpbmciLAorCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkubWluID0gMCwKKwkubWF4ID0gMSwKKwkuc3RlcCA9IDEsCit9OworCiBzdGF0aWMgaW50IGFkdjcxODBfaW5pdF9jb250cm9scyhzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSAqc3RhdGUpCiB7CiAJdjRsMl9jdHJsX2hhbmRsZXJfaW5pdCgmc3RhdGUtPmN0cmxfaGRsLCA0KTsKQEAgLTQwNSw2ICs1NjMsOCBAQAogCXY0bDJfY3RybF9uZXdfc3RkKCZzdGF0ZS0+Y3RybF9oZGwsICZhZHY3MTgwX2N0cmxfb3BzLAogCQkJICBWNEwyX0NJRF9IVUUsIEFEVjcxODBfSFVFX01JTiwKIAkJCSAgQURWNzE4MF9IVUVfTUFYLCAxLCBBRFY3MTgwX0hVRV9ERUYpOworCXY0bDJfY3RybF9uZXdfY3VzdG9tKCZzdGF0ZS0+Y3RybF9oZGwsICZhZHY3MTgwX2N0cmxfZmFzdF9zd2l0Y2gsIE5VTEwpOworCiAJc3RhdGUtPnNkLmN0cmxfaGFuZGxlciA9ICZzdGF0ZS0+Y3RybF9oZGw7CiAJaWYgKHN0YXRlLT5jdHJsX2hkbC5lcnJvcikgewogCQlpbnQgZXJyID0gc3RhdGUtPmN0cmxfaGRsLmVycm9yOwpAQCAtNDIxLDEzICs1ODEsMTQgQEAKIAl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZzdGF0ZS0+Y3RybF9oZGwpOwogfQogCi1zdGF0aWMgaW50IGFkdjcxODBfZW51bV9tYnVzX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgaW5kZXgsCi0JCQkJIHUzMiAqY29kZSkKK3N0YXRpYyBpbnQgYWR2NzE4MF9lbnVtX21idXNfY29kZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKKwkJCQkgIHN0cnVjdCB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51bSAqY29kZSkKIHsKLQlpZiAoaW5kZXggPiAwKQorCWlmIChjb2RlLT5pbmRleCAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCSpjb2RlID0gTUVESUFfQlVTX0ZNVF9ZVVlWOF8yWDg7CisJY29kZS0+Y29kZSA9IE1FRElBX0JVU19GTVRfWVVZVjhfMlg4OwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MzksMjMgKzYwMCwxMTggQEAKIAogCWZtdC0+Y29kZSA9IE1FRElBX0JVU19GTVRfWVVZVjhfMlg4OwogCWZtdC0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07Ci0JZm10LT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKIAlmbXQtPndpZHRoID0gNzIwOwogCWZtdC0+aGVpZ2h0ID0gc3RhdGUtPmN1cnJfbm9ybSAmIFY0TDJfU1REXzUyNV82MCA/IDQ4MCA6IDU3NjsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGFkdjcxODBfc2V0X2ZpZWxkX21vZGUoc3RydWN0IGFkdjcxODBfc3RhdGUgKnN0YXRlKQoreworCWlmICghKHN0YXRlLT5jaGlwX2luZm8tPmZsYWdzICYgQURWNzE4MF9GTEFHX0kyUCkpCisJCXJldHVybiAwOworCisJaWYgKHN0YXRlLT5maWVsZCA9PSBWNEwyX0ZJRUxEX05PTkUpIHsKKwkJaWYgKHN0YXRlLT5jaGlwX2luZm8tPmZsYWdzICYgQURWNzE4MF9GTEFHX01JUElfQ1NJMikgeworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDEsIDB4MjApOworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDIsIDB4MjgpOworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDMsIDB4MzgpOworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDQsIDB4MzApOworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDUsIDB4MzApOworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDYsIDB4ODApOworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDcsIDB4NzApOworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDgsIDB4NTApOworCQl9CisJCWFkdjcxODBfdnBwX3dyaXRlKHN0YXRlLCAweGEzLCAweDAwKTsKKwkJYWR2NzE4MF92cHBfd3JpdGUoc3RhdGUsIDB4NWIsIDB4MDApOworCQlhZHY3MTgwX3ZwcF93cml0ZShzdGF0ZSwgMHg1NSwgMHg4MCk7CisJfSBlbHNlIHsKKwkJaWYgKHN0YXRlLT5jaGlwX2luZm8tPmZsYWdzICYgQURWNzE4MF9GTEFHX01JUElfQ1NJMikgeworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDEsIDB4MTgpOworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDIsIDB4MTgpOworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDMsIDB4MzApOworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDQsIDB4MjApOworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDUsIDB4MjgpOworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDYsIDB4NDApOworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDcsIDB4NTgpOworCQkJYWR2NzE4MF9jc2lfd3JpdGUoc3RhdGUsIDB4MDgsIDB4MzApOworCQl9CisJCWFkdjcxODBfdnBwX3dyaXRlKHN0YXRlLCAweGEzLCAweDcwKTsKKwkJYWR2NzE4MF92cHBfd3JpdGUoc3RhdGUsIDB4NWIsIDB4ODApOworCQlhZHY3MTgwX3ZwcF93cml0ZShzdGF0ZSwgMHg1NSwgMHgwMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWR2NzE4MF9nZXRfcGFkX2Zvcm1hdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKKwkJCQkgIHN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgKmZvcm1hdCkKK3sKKwlzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwlpZiAoZm9ybWF0LT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZKSB7CisJCWZvcm1hdC0+Zm9ybWF0ID0gKnY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KGZoLCAwKTsKKwl9IGVsc2UgeworCQlhZHY3MTgwX21idXNfZm10KHNkLCAmZm9ybWF0LT5mb3JtYXQpOworCQlmb3JtYXQtPmZvcm1hdC5maWVsZCA9IHN0YXRlLT5maWVsZDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHY3MTgwX3NldF9wYWRfZm9ybWF0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZmggKmZoLAorCQkJCSAgc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCAqZm9ybWF0KQoreworCXN0cnVjdCBhZHY3MTgwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmcmFtZWZtdDsKKworCXN3aXRjaCAoZm9ybWF0LT5mb3JtYXQuZmllbGQpIHsKKwljYXNlIFY0TDJfRklFTERfTk9ORToKKwkJaWYgKCEoc3RhdGUtPmNoaXBfaW5mby0+ZmxhZ3MgJiBBRFY3MTgwX0ZMQUdfSTJQKSkKKwkJCWZvcm1hdC0+Zm9ybWF0LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmb3JtYXQtPmZvcm1hdC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGZvcm1hdC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSkgeworCQlmcmFtZWZtdCA9ICZmb3JtYXQtPmZvcm1hdDsKKwkJaWYgKHN0YXRlLT5maWVsZCAhPSBmb3JtYXQtPmZvcm1hdC5maWVsZCkgeworCQkJc3RhdGUtPmZpZWxkID0gZm9ybWF0LT5mb3JtYXQuZmllbGQ7CisJCQlhZHY3MTgwX3NldF9wb3dlcihzdGF0ZSwgZmFsc2UpOworCQkJYWR2NzE4MF9zZXRfZmllbGRfbW9kZShzdGF0ZSk7CisJCQlhZHY3MTgwX3NldF9wb3dlcihzdGF0ZSwgdHJ1ZSk7CisJCX0KKwl9IGVsc2UgeworCQlmcmFtZWZtdCA9IHY0bDJfc3ViZGV2X2dldF90cnlfZm9ybWF0KGZoLCAwKTsKKwkJKmZyYW1lZm10ID0gZm9ybWF0LT5mb3JtYXQ7CisJfQorCisJcmV0dXJuIGFkdjcxODBfbWJ1c19mbXQoc2QsIGZyYW1lZm10KTsKK30KKwogc3RhdGljIGludCBhZHY3MTgwX2dfbWJ1c19jb25maWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJCQkgc3RydWN0IHY0bDJfbWJ1c19jb25maWcgKmNmZykKIHsKLQkvKgotCSAqIFRoZSBBRFY3MTgwIHNlbnNvciBzdXBwb3J0cyBCVC42MDEvNjU2IG91dHB1dCBtb2Rlcy4KLQkgKiBUaGUgQlQuNjU2IGlzIGRlZmF1bHQgYW5kIG5vdCB5ZXQgY29uZmlndXJhYmxlIGJ5IHMvdy4KLQkgKi8KLQljZmctPmZsYWdzID0gVjRMMl9NQlVTX01BU1RFUiB8IFY0TDJfTUJVU19QQ0xLX1NBTVBMRV9SSVNJTkcgfAotCQkgICAgIFY0TDJfTUJVU19EQVRBX0FDVElWRV9ISUdIOwotCWNmZy0+dHlwZSA9IFY0TDJfTUJVU19CVDY1NjsKKwlzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwlpZiAoc3RhdGUtPmNoaXBfaW5mby0+ZmxhZ3MgJiBBRFY3MTgwX0ZMQUdfTUlQSV9DU0kyKSB7CisJCWNmZy0+dHlwZSA9IFY0TDJfTUJVU19DU0kyOworCQljZmctPmZsYWdzID0gVjRMMl9NQlVTX0NTSTJfMV9MQU5FIHwKKwkJCQlWNEwyX01CVVNfQ1NJMl9DSEFOTkVMXzAgfAorCQkJCVY0TDJfTUJVU19DU0kyX0NPTlRJTlVPVVNfQ0xPQ0s7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIEFEVjcxODAgc2Vuc29yIHN1cHBvcnRzIEJULjYwMS82NTYgb3V0cHV0IG1vZGVzLgorCQkgKiBUaGUgQlQuNjU2IGlzIGRlZmF1bHQgYW5kIG5vdCB5ZXQgY29uZmlndXJhYmxlIGJ5IHMvdy4KKwkJICovCisJCWNmZy0+ZmxhZ3MgPSBWNEwyX01CVVNfTUFTVEVSIHwgVjRMMl9NQlVTX1BDTEtfU0FNUExFX1JJU0lORyB8CisJCQkJIFY0TDJfTUJVU19EQVRBX0FDVElWRV9ISUdIOworCQljZmctPnR5cGUgPSBWNEwyX01CVVNfQlQ2NTY7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC00NjUsMTM5ICs3MjEsNDM5IEBACiAJLnF1ZXJ5c3RkID0gYWR2NzE4MF9xdWVyeXN0ZCwKIAkuZ19pbnB1dF9zdGF0dXMgPSBhZHY3MTgwX2dfaW5wdXRfc3RhdHVzLAogCS5zX3JvdXRpbmcgPSBhZHY3MTgwX3Nfcm91dGluZywKLQkuZW51bV9tYnVzX2ZtdCA9IGFkdjcxODBfZW51bV9tYnVzX2ZtdCwKLQkudHJ5X21idXNfZm10ID0gYWR2NzE4MF9tYnVzX2ZtdCwKLQkuZ19tYnVzX2ZtdCA9IGFkdjcxODBfbWJ1c19mbXQsCi0JLnNfbWJ1c19mbXQgPSBhZHY3MTgwX21idXNfZm10LAogCS5nX21idXNfY29uZmlnID0gYWR2NzE4MF9nX21idXNfY29uZmlnLAogfTsKIAorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGFkdjcxODBfY29yZV9vcHMgPSB7CiAJLnNfcG93ZXIgPSBhZHY3MTgwX3NfcG93ZXIsCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3BhZF9vcHMgYWR2NzE4MF9wYWRfb3BzID0geworCS5lbnVtX21idXNfY29kZSA9IGFkdjcxODBfZW51bV9tYnVzX2NvZGUsCisJLnNldF9mbXQgPSBhZHY3MTgwX3NldF9wYWRfZm9ybWF0LAorCS5nZXRfZm10ID0gYWR2NzE4MF9nZXRfcGFkX2Zvcm1hdCwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGFkdjcxODBfb3BzID0gewogCS5jb3JlID0gJmFkdjcxODBfY29yZV9vcHMsCiAJLnZpZGVvID0gJmFkdjcxODBfdmlkZW9fb3BzLAorCS5wYWQgPSAmYWR2NzE4MF9wYWRfb3BzLAogfTsKIAogc3RhdGljIGlycXJldHVybl90IGFkdjcxODBfaXJxKGludCBpcnEsIHZvaWQgKmRldmlkKQogewogCXN0cnVjdCBhZHY3MTgwX3N0YXRlICpzdGF0ZSA9IGRldmlkOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZzdGF0ZS0+c2QpOwogCXU4IGlzcjM7CiAKIAltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFY3MTgwX0FESV9DVFJMX1JFRywKLQkJCQkgIEFEVjcxODBfQURJX0NUUkxfSVJRX1NQQUNFKTsKLQlpc3IzID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQURWNzE4MF9JU1IzX0FESSk7CisJaXNyMyA9IGFkdjcxODBfcmVhZChzdGF0ZSwgQURWNzE4MF9SRUdfSVNSMyk7CiAJLyogY2xlYXIgKi8KLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURWNzE4MF9JQ1IzX0FESSwgaXNyMyk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVjcxODBfQURJX0NUUkxfUkVHLCAwKTsKKwlhZHY3MTgwX3dyaXRlKHN0YXRlLCBBRFY3MTgwX1JFR19JQ1IzLCBpc3IzKTsKIAogCWlmIChpc3IzICYgQURWNzE4MF9JUlEzX0FEX0NIQU5HRSAmJiBzdGF0ZS0+YXV0b2RldGVjdCkKLQkJX19hZHY3MTgwX3N0YXR1cyhjbGllbnQsIE5VTEwsICZzdGF0ZS0+Y3Vycl9ub3JtKTsKKwkJX19hZHY3MTgwX3N0YXR1cyhzdGF0ZSwgTlVMTCwgJnN0YXRlLT5jdXJyX25vcm0pOwogCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBpbml0X2RldmljZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSAqc3RhdGUpCitzdGF0aWMgaW50IGFkdjcxODBfaW5pdChzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSAqc3RhdGUpCiB7CiAJaW50IHJldDsKIAotCS8qIEluaXRpYWxpemUgYWR2NzE4MCAqLwotCS8qIEVuYWJsZSBhdXRvZGV0ZWN0aW9uICovCi0JaWYgKHN0YXRlLT5hdXRvZGV0ZWN0KSB7Ci0JCXJldCA9Ci0JCSAgICBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURWNzE4MF9JTlBVVF9DT05UUk9MX1JFRywKLQkJCQlBRFY3MTgwX0lOUFVUX0NPTlRST0xfQURfUEFMX0JHX05UU0NfSl9TRUNBTQotCQkJCQkgICAgICB8IHN0YXRlLT5pbnB1dCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQlyZXQgPQotCQkgICAgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCSAgICAgIEFEVjcxODBfQVVUT0RFVEVDVF9FTkFCTEVfUkVHLAotCQkJCQkgICAgICBBRFY3MTgwX0FVVE9ERVRFQ1RfREVGQVVMVCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9IGVsc2UgewotCQlyZXQgPSB2NGwyX3N0ZF90b19hZHY3MTgwKHN0YXRlLT5jdXJyX25vcm0pOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJcmV0ID0KLQkJICAgIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFY3MTgwX0lOUFVUX0NPTlRST0xfUkVHLAotCQkJCQkgICAgICByZXQgfCBzdGF0ZS0+aW5wdXQpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQl9CiAJLyogSVRVLVIgQlQuNjU2LTQgY29tcGF0aWJsZSAqLwotCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAotCQkJQURWNzE4MF9FWFRFTkRFRF9PVVRQVVRfQ09OVFJPTF9SRUcsCisJcmV0ID0gYWR2NzE4MF93cml0ZShzdGF0ZSwgQURWNzE4MF9SRUdfRVhURU5ERURfT1VUUFVUX0NPTlRST0wsCiAJCQlBRFY3MTgwX0VYVEVOREVEX09VVFBVVF9DT05UUk9MX05UU0NESVMpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogTWFudWFsbHkgc2V0IFYgYml0IGVuZCBwb3NpdGlvbiBpbiBOVFNDIG1vZGUgKi8KLQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJQURWNzE4MF9OVFNDX1ZfQklUX0VORF9SRUcsCisJcmV0dXJuIGFkdjcxODBfd3JpdGUoc3RhdGUsIEFEVjcxODBfUkVHX05UU0NfVl9CSVRfRU5ELAogCQkJCQlBRFY3MTgwX05UU0NfVl9CSVRfRU5EX01BTlVBTF9OVkVORCk7Cit9CisKK3N0YXRpYyBpbnQgYWR2NzE4MF9zZXRfc3RkKHN0cnVjdCBhZHY3MTgwX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IHN0ZCkKK3sKKwlyZXR1cm4gYWR2NzE4MF93cml0ZShzdGF0ZSwgQURWNzE4MF9SRUdfSU5QVVRfQ09OVFJPTCwKKwkJKHN0ZCA8PCA0KSB8IHN0YXRlLT5pbnB1dCk7Cit9CisKK3N0YXRpYyBpbnQgYWR2NzE4MF9zZWxlY3RfaW5wdXQoc3RydWN0IGFkdjcxODBfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBpbnQgaW5wdXQpCit7CisJaW50IHJldDsKKworCXJldCA9IGFkdjcxODBfcmVhZChzdGF0ZSwgQURWNzE4MF9SRUdfSU5QVVRfQ09OVFJPTCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQkvKiByZWFkIGN1cnJlbnQgbm9ybSAqLwotCV9fYWR2NzE4MF9zdGF0dXMoY2xpZW50LCBOVUxMLCAmc3RhdGUtPmN1cnJfbm9ybSk7CisJcmV0ICY9IH5BRFY3MTgwX0lOUFVUX0NPTlRST0xfSU5TRUxfTUFTSzsKKwlyZXQgfD0gaW5wdXQ7CisJcmV0dXJuIGFkdjcxODBfd3JpdGUoc3RhdGUsIEFEVjcxODBfUkVHX0lOUFVUX0NPTlRST0wsIHJldCk7Cit9CiAKLQkvKiByZWdpc3RlciBmb3IgaW50ZXJydXB0cyAqLwotCWlmIChzdGF0ZS0+aXJxID4gMCkgewotCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShzdGF0ZS0+aXJxLCBOVUxMLCBhZHY3MTgwX2lycSwKLQkJCQkJICAgSVJRRl9PTkVTSE9ULCBLQlVJTERfTU9ETkFNRSwgc3RhdGUpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKK3N0YXRpYyBpbnQgYWR2NzE4Ml9pbml0KHN0cnVjdCBhZHY3MTgwX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoc3RhdGUtPmNoaXBfaW5mby0+ZmxhZ3MgJiBBRFY3MTgwX0ZMQUdfTUlQSV9DU0kyKQorCQlhZHY3MTgwX3dyaXRlKHN0YXRlLCBBRFY3MTgwX1JFR19DU0lfU0xBVkVfQUREUiwKKwkJCUFEVjcxODBfREVGQVVMVF9DU0lfSTJDX0FERFIgPDwgMSk7CiAKLQkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVjcxODBfQURJX0NUUkxfUkVHLAotCQkJCQkJQURWNzE4MF9BRElfQ1RSTF9JUlFfU1BBQ0UpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gZXJyOworCWlmIChzdGF0ZS0+Y2hpcF9pbmZvLT5mbGFncyAmIEFEVjcxODBfRkxBR19JMlApCisJCWFkdjcxODBfd3JpdGUoc3RhdGUsIEFEVjcxODBfUkVHX1ZQUF9TTEFWRV9BRERSLAorCQkJQURWNzE4MF9ERUZBVUxUX1ZQUF9JMkNfQUREUiA8PCAxKTsKIAotCQkvKiBjb25maWcgdGhlIEludGVycnVwdCBwaW4gdG8gYmUgYWN0aXZlIGxvdyAqLwotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURWNzE4MF9JQ09ORjFfQURJLAotCQkJCQkJQURWNzE4MF9JQ09ORjFfQUNUSVZFX0xPVyB8Ci0JCQkJCQlBRFY3MTgwX0lDT05GMV9QU1lOQ19PTkxZKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVycjsKKwlpZiAoc3RhdGUtPmNoaXBfaW5mby0+ZmxhZ3MgJiBBRFY3MTgwX0ZMQUdfVjIpIHsKKwkJLyogQURJIHJlY29tbWVuZGVkIHdyaXRlcyBmb3IgaW1wcm92ZWQgdmlkZW8gcXVhbGl0eSAqLworCQlhZHY3MTgwX3dyaXRlKHN0YXRlLCAweDAwODAsIDB4NTEpOworCQlhZHY3MTgwX3dyaXRlKHN0YXRlLCAweDAwODEsIDB4NTEpOworCQlhZHY3MTgwX3dyaXRlKHN0YXRlLCAweDAwODIsIDB4NjgpOworCX0KIAotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURWNzE4MF9JTVIxX0FESSwgMCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBlcnI7CisJLyogQURJIHJlcXVpcmVkIHdyaXRlcyAqLworCWlmIChzdGF0ZS0+Y2hpcF9pbmZvLT5mbGFncyAmIEFEVjcxODBfRkxBR19NSVBJX0NTSTIpIHsKKwkJYWR2NzE4MF93cml0ZShzdGF0ZSwgMHgwMDAzLCAweDRlKTsKKwkJYWR2NzE4MF93cml0ZShzdGF0ZSwgMHgwMDA0LCAweDU3KTsKKwkJYWR2NzE4MF93cml0ZShzdGF0ZSwgMHgwMDFkLCAweGMwKTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdGUtPmNoaXBfaW5mby0+ZmxhZ3MgJiBBRFY3MTgwX0ZMQUdfVjIpCisJCQlhZHY3MTgwX3dyaXRlKHN0YXRlLCAweDAwMDQsIDB4MTcpOworCQllbHNlCisJCQlhZHY3MTgwX3dyaXRlKHN0YXRlLCAweDAwMDQsIDB4MDcpOworCQlhZHY3MTgwX3dyaXRlKHN0YXRlLCAweDAwMDMsIDB4MGMpOworCQlhZHY3MTgwX3dyaXRlKHN0YXRlLCAweDAwMWQsIDB4NDApOworCX0KIAotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURWNzE4MF9JTVIyX0FESSwgMCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBlcnI7CisJYWR2NzE4MF93cml0ZShzdGF0ZSwgMHgwMDEzLCAweDAwKTsKIAotCQkvKiBlbmFibGUgQUQgY2hhbmdlIGludGVycnVwdHMgaW50ZXJydXB0cyAqLwotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURWNzE4MF9JTVIzX0FESSwKLQkJCQkJCUFEVjcxODBfSVJRM19BRF9DSEFOR0UpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gZXJyOworCXJldHVybiAwOworfQogCi0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFY3MTgwX0lNUjRfQURJLCAwKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVycjsKK3N0YXRpYyBpbnQgYWR2NzE4Ml9zZXRfc3RkKHN0cnVjdCBhZHY3MTgwX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgaW50IHN0ZCkKK3sKKwlyZXR1cm4gYWR2NzE4MF93cml0ZShzdGF0ZSwgQURWNzE4Ml9SRUdfSU5QVVRfVklEU0VMLCBzdGQgPDwgNCk7Cit9CiAKLQkJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVjcxODBfQURJX0NUUkxfUkVHLAotCQkJCQkJMCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBlcnI7CitlbnVtIGFkdjcxODJfaW5wdXRfdHlwZSB7CisJQURWNzE4Ml9JTlBVVF9UWVBFX0NWQlMsCisJQURWNzE4Ml9JTlBVVF9UWVBFX0RJRkZfQ1ZCUywKKwlBRFY3MTgyX0lOUFVUX1RZUEVfU1ZJREVPLAorCUFEVjcxODJfSU5QVVRfVFlQRV9ZUEJQUiwKK307CisKK3N0YXRpYyBlbnVtIGFkdjcxODJfaW5wdXRfdHlwZSBhZHY3MTgyX2dldF9pbnB1dF90eXBlKHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzd2l0Y2ggKGlucHV0KSB7CisJY2FzZSBBRFY3MTgyX0lOUFVUX0NWQlNfQUlOMToKKwljYXNlIEFEVjcxODJfSU5QVVRfQ1ZCU19BSU4yOgorCWNhc2UgQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjM6CisJY2FzZSBBRFY3MTgyX0lOUFVUX0NWQlNfQUlONDoKKwljYXNlIEFEVjcxODJfSU5QVVRfQ1ZCU19BSU41OgorCWNhc2UgQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjY6CisJY2FzZSBBRFY3MTgyX0lOUFVUX0NWQlNfQUlONzoKKwljYXNlIEFEVjcxODJfSU5QVVRfQ1ZCU19BSU44OgorCQlyZXR1cm4gQURWNzE4Ml9JTlBVVF9UWVBFX0NWQlM7CisJY2FzZSBBRFY3MTgyX0lOUFVUX1NWSURFT19BSU4xX0FJTjI6CisJY2FzZSBBRFY3MTgyX0lOUFVUX1NWSURFT19BSU4zX0FJTjQ6CisJY2FzZSBBRFY3MTgyX0lOUFVUX1NWSURFT19BSU41X0FJTjY6CisJY2FzZSBBRFY3MTgyX0lOUFVUX1NWSURFT19BSU43X0FJTjg6CisJCXJldHVybiBBRFY3MTgyX0lOUFVUX1RZUEVfU1ZJREVPOworCWNhc2UgQURWNzE4Ml9JTlBVVF9ZUFJQQl9BSU4xX0FJTjJfQUlOMzoKKwljYXNlIEFEVjcxODJfSU5QVVRfWVBSUEJfQUlONF9BSU41X0FJTjY6CisJCXJldHVybiBBRFY3MTgyX0lOUFVUX1RZUEVfWVBCUFI7CisJY2FzZSBBRFY3MTgyX0lOUFVUX0RJRkZfQ1ZCU19BSU4xX0FJTjI6CisJY2FzZSBBRFY3MTgyX0lOUFVUX0RJRkZfQ1ZCU19BSU4zX0FJTjQ6CisJY2FzZSBBRFY3MTgyX0lOUFVUX0RJRkZfQ1ZCU19BSU41X0FJTjY6CisJY2FzZSBBRFY3MTgyX0lOUFVUX0RJRkZfQ1ZCU19BSU43X0FJTjg6CisJCXJldHVybiBBRFY3MTgyX0lOUFVUX1RZUEVfRElGRl9DVkJTOworCWRlZmF1bHQ6IC8qIFdpbGwgbmV2ZXIgaGFwcGVuICovCisJCXJldHVybiAwOworCX0KK30KKworLyogQURJIHJlY29tbWVuZGVkIHdyaXRlcyB0byByZWdpc3RlcnMgMHg1MiwgMHg1MywgMHg1NCAqLworc3RhdGljIHVuc2lnbmVkIGludCBhZHY3MTgyX2xiaWFzX3NldHRpbmdzW11bM10gPSB7CisJW0FEVjcxODJfSU5QVVRfVFlQRV9DVkJTXSA9IHsgMHhDQiwgMHg0RSwgMHg4MCB9LAorCVtBRFY3MTgyX0lOUFVUX1RZUEVfRElGRl9DVkJTXSA9IHsgMHhDMCwgMHg0RSwgMHg4MCB9LAorCVtBRFY3MTgyX0lOUFVUX1RZUEVfU1ZJREVPXSA9IHsgMHgwQiwgMHhDRSwgMHg4MCB9LAorCVtBRFY3MTgyX0lOUFVUX1RZUEVfWVBCUFJdID0geyAweDBCLCAweDRFLCAweEMwIH0sCit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IGFkdjcyODBfbGJpYXNfc2V0dGluZ3NbXVszXSA9IHsKKwlbQURWNzE4Ml9JTlBVVF9UWVBFX0NWQlNdID0geyAweENELCAweDRFLCAweDgwIH0sCisJW0FEVjcxODJfSU5QVVRfVFlQRV9ESUZGX0NWQlNdID0geyAweEMwLCAweDRFLCAweDgwIH0sCisJW0FEVjcxODJfSU5QVVRfVFlQRV9TVklERU9dID0geyAweDBCLCAweENFLCAweDgwIH0sCisJW0FEVjcxODJfSU5QVVRfVFlQRV9ZUEJQUl0gPSB7IDB4MEIsIDB4NEUsIDB4QzAgfSwKK307CisKK3N0YXRpYyBpbnQgYWR2NzE4Ml9zZWxlY3RfaW5wdXQoc3RydWN0IGFkdjcxODBfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBpbnQgaW5wdXQpCit7CisJZW51bSBhZHY3MTgyX2lucHV0X3R5cGUgaW5wdXRfdHlwZTsKKwl1bnNpZ25lZCBpbnQgKmxiaWFzOworCXVuc2lnbmVkIGludCBpOworCWludCByZXQ7CisKKwlyZXQgPSBhZHY3MTgwX3dyaXRlKHN0YXRlLCBBRFY3MTgwX1JFR19JTlBVVF9DT05UUk9MLCBpbnB1dCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFJlc2V0IGNsYW1wIGNpcmN1aXRyeSAtIEFESSByZWNvbW1lbmRlZCB3cml0ZXMgKi8KKwlhZHY3MTgwX3dyaXRlKHN0YXRlLCAweDgwOWMsIDB4MDApOworCWFkdjcxODBfd3JpdGUoc3RhdGUsIDB4ODA5YywgMHhmZik7CisKKwlpbnB1dF90eXBlID0gYWR2NzE4Ml9nZXRfaW5wdXRfdHlwZShpbnB1dCk7CisKKwlzd2l0Y2ggKGlucHV0X3R5cGUpIHsKKwljYXNlIEFEVjcxODJfSU5QVVRfVFlQRV9DVkJTOgorCWNhc2UgQURWNzE4Ml9JTlBVVF9UWVBFX0RJRkZfQ1ZCUzoKKwkJLyogQURJIHJlY29tbWVuZHMgdG8gdXNlIHRoZSBTSDEgZmlsdGVyICovCisJCWFkdjcxODBfd3JpdGUoc3RhdGUsIDB4MDAxNywgMHg0MSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFkdjcxODBfd3JpdGUoc3RhdGUsIDB4MDAxNywgMHgwMSk7CisJCWJyZWFrOworCX0KKworCWlmIChzdGF0ZS0+Y2hpcF9pbmZvLT5mbGFncyAmIEFEVjcxODBfRkxBR19WMikKKwkJbGJpYXMgPSBhZHY3MjgwX2xiaWFzX3NldHRpbmdzW2lucHV0X3R5cGVdOworCWVsc2UKKwkJbGJpYXMgPSBhZHY3MTgyX2xiaWFzX3NldHRpbmdzW2lucHV0X3R5cGVdOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWR2NzE4Ml9sYmlhc19zZXR0aW5nc1swXSk7IGkrKykKKwkJYWR2NzE4MF93cml0ZShzdGF0ZSwgMHgwMDUyICsgaSwgbGJpYXNbaV0pOworCisJaWYgKGlucHV0X3R5cGUgPT0gQURWNzE4Ml9JTlBVVF9UWVBFX0RJRkZfQ1ZCUykgeworCQkvKiBBREkgcmVxdWlyZWQgd3JpdGVzIHRvIG1ha2UgZGlmZmVyZW50aWFsIENWQlMgd29yayAqLworCQlhZHY3MTgwX3dyaXRlKHN0YXRlLCAweDAwNWYsIDB4YTgpOworCQlhZHY3MTgwX3dyaXRlKHN0YXRlLCAweDAwNWEsIDB4OTApOworCQlhZHY3MTgwX3dyaXRlKHN0YXRlLCAweDAwNjAsIDB4YjApOworCQlhZHY3MTgwX3dyaXRlKHN0YXRlLCAweDgwYjYsIDB4MDgpOworCQlhZHY3MTgwX3dyaXRlKHN0YXRlLCAweDgwYzAsIDB4YTApOworCX0gZWxzZSB7CisJCWFkdjcxODBfd3JpdGUoc3RhdGUsIDB4MDA1ZiwgMHhmMCk7CisJCWFkdjcxODBfd3JpdGUoc3RhdGUsIDB4MDA1YSwgMHhkMCk7CisJCWFkdjcxODBfd3JpdGUoc3RhdGUsIDB4MDA2MCwgMHgxMCk7CisJCWFkdjcxODBfd3JpdGUoc3RhdGUsIDB4ODBiNiwgMHg5Yyk7CisJCWFkdjcxODBfd3JpdGUoc3RhdGUsIDB4ODBjMCwgMHgwMCk7CiAJfQogCiAJcmV0dXJuIDA7Cit9CiAKLWVycjoKLQlmcmVlX2lycShzdGF0ZS0+aXJxLCBzdGF0ZSk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGFkdjcxODBfY2hpcF9pbmZvIGFkdjcxODBfaW5mbyA9IHsKKwkuZmxhZ3MgPSBBRFY3MTgwX0ZMQUdfUkVTRVRfUE9XRVJFRCwKKwkvKiBXZSBjYW5ub3QgZGlzY3JpbWluYXRlIGJldHdlZW4gTFFGUCBhbmQgNDAtcGluIExGQ1NQLCBzbyBhY2NlcHQKKwkgKiBhbGwgaW5wdXRzIGFuZCBsZXQgdGhlIGNhcmQgZHJpdmVyIHRha2UgY2FyZSBvZiB2YWxpZGF0aW9uCisJICovCisJLnZhbGlkX2lucHV0X21hc2sgPSBCSVQoQURWNzE4MF9JTlBVVF9DVkJTX0FJTjEpIHwKKwkJQklUKEFEVjcxODBfSU5QVVRfQ1ZCU19BSU4yKSB8CisJCUJJVChBRFY3MTgwX0lOUFVUX0NWQlNfQUlOMykgfAorCQlCSVQoQURWNzE4MF9JTlBVVF9DVkJTX0FJTjQpIHwKKwkJQklUKEFEVjcxODBfSU5QVVRfQ1ZCU19BSU41KSB8CisJCUJJVChBRFY3MTgwX0lOUFVUX0NWQlNfQUlONikgfAorCQlCSVQoQURWNzE4MF9JTlBVVF9TVklERU9fQUlOMV9BSU4yKSB8CisJCUJJVChBRFY3MTgwX0lOUFVUX1NWSURFT19BSU4zX0FJTjQpIHwKKwkJQklUKEFEVjcxODBfSU5QVVRfU1ZJREVPX0FJTjVfQUlONikgfAorCQlCSVQoQURWNzE4MF9JTlBVVF9ZUFJQQl9BSU4xX0FJTjJfQUlOMykgfAorCQlCSVQoQURWNzE4MF9JTlBVVF9ZUFJQQl9BSU40X0FJTjVfQUlONiksCisJLmluaXQgPSBhZHY3MTgwX2luaXQsCisJLnNldF9zdGQgPSBhZHY3MTgwX3NldF9zdGQsCisJLnNlbGVjdF9pbnB1dCA9IGFkdjcxODBfc2VsZWN0X2lucHV0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZHY3MTgwX2NoaXBfaW5mbyBhZHY3MTgyX2luZm8gPSB7CisJLnZhbGlkX2lucHV0X21hc2sgPSBCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjEpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfQ1ZCU19BSU4yKSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0NWQlNfQUlOMykgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjQpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfU1ZJREVPX0FJTjFfQUlOMikgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9TVklERU9fQUlOM19BSU40KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX1lQUlBCX0FJTjFfQUlOMl9BSU4zKSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0RJRkZfQ1ZCU19BSU4xX0FJTjIpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfRElGRl9DVkJTX0FJTjNfQUlONCksCisJLmluaXQgPSBhZHY3MTgyX2luaXQsCisJLnNldF9zdGQgPSBhZHY3MTgyX3NldF9zdGQsCisJLnNlbGVjdF9pbnB1dCA9IGFkdjcxODJfc2VsZWN0X2lucHV0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZHY3MTgwX2NoaXBfaW5mbyBhZHY3MjgwX2luZm8gPSB7CisJLmZsYWdzID0gQURWNzE4MF9GTEFHX1YyIHwgQURWNzE4MF9GTEFHX0kyUCwKKwkudmFsaWRfaW5wdXRfbWFzayA9IEJJVChBRFY3MTgyX0lOUFVUX0NWQlNfQUlOMSkgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjIpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfQ1ZCU19BSU4zKSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0NWQlNfQUlONCkgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9TVklERU9fQUlOMV9BSU4yKSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX1NWSURFT19BSU4zX0FJTjQpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfWVBSUEJfQUlOMV9BSU4yX0FJTjMpLAorCS5pbml0ID0gYWR2NzE4Ml9pbml0LAorCS5zZXRfc3RkID0gYWR2NzE4Ml9zZXRfc3RkLAorCS5zZWxlY3RfaW5wdXQgPSBhZHY3MTgyX3NlbGVjdF9pbnB1dCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWR2NzE4MF9jaGlwX2luZm8gYWR2NzI4MF9tX2luZm8gPSB7CisJLmZsYWdzID0gQURWNzE4MF9GTEFHX1YyIHwgQURWNzE4MF9GTEFHX01JUElfQ1NJMiB8IEFEVjcxODBfRkxBR19JMlAsCisJLnZhbGlkX2lucHV0X21hc2sgPSBCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjEpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfQ1ZCU19BSU4yKSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0NWQlNfQUlOMykgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjQpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfQ1ZCU19BSU41KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0NWQlNfQUlONikgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjcpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfQ1ZCU19BSU44KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX1NWSURFT19BSU4xX0FJTjIpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfU1ZJREVPX0FJTjNfQUlONCkgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9TVklERU9fQUlONV9BSU42KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX1NWSURFT19BSU43X0FJTjgpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfWVBSUEJfQUlOMV9BSU4yX0FJTjMpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfWVBSUEJfQUlONF9BSU41X0FJTjYpLAorCS5pbml0ID0gYWR2NzE4Ml9pbml0LAorCS5zZXRfc3RkID0gYWR2NzE4Ml9zZXRfc3RkLAorCS5zZWxlY3RfaW5wdXQgPSBhZHY3MTgyX3NlbGVjdF9pbnB1dCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWR2NzE4MF9jaGlwX2luZm8gYWR2NzI4MV9pbmZvID0geworCS5mbGFncyA9IEFEVjcxODBfRkxBR19WMiB8IEFEVjcxODBfRkxBR19NSVBJX0NTSTIsCisJLnZhbGlkX2lucHV0X21hc2sgPSBCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjEpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfQ1ZCU19BSU4yKSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0NWQlNfQUlONykgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjgpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfU1ZJREVPX0FJTjFfQUlOMikgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9TVklERU9fQUlON19BSU44KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0RJRkZfQ1ZCU19BSU4xX0FJTjIpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfRElGRl9DVkJTX0FJTjdfQUlOOCksCisJLmluaXQgPSBhZHY3MTgyX2luaXQsCisJLnNldF9zdGQgPSBhZHY3MTgyX3NldF9zdGQsCisJLnNlbGVjdF9pbnB1dCA9IGFkdjcxODJfc2VsZWN0X2lucHV0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZHY3MTgwX2NoaXBfaW5mbyBhZHY3MjgxX21faW5mbyA9IHsKKwkuZmxhZ3MgPSBBRFY3MTgwX0ZMQUdfVjIgfCBBRFY3MTgwX0ZMQUdfTUlQSV9DU0kyLAorCS52YWxpZF9pbnB1dF9tYXNrID0gQklUKEFEVjcxODJfSU5QVVRfQ1ZCU19BSU4xKSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0NWQlNfQUlOMikgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjMpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfQ1ZCU19BSU40KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0NWQlNfQUlONykgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjgpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfU1ZJREVPX0FJTjFfQUlOMikgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9TVklERU9fQUlOM19BSU40KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX1NWSURFT19BSU43X0FJTjgpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfWVBSUEJfQUlOMV9BSU4yX0FJTjMpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfRElGRl9DVkJTX0FJTjFfQUlOMikgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9ESUZGX0NWQlNfQUlOM19BSU40KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0RJRkZfQ1ZCU19BSU43X0FJTjgpLAorCS5pbml0ID0gYWR2NzE4Ml9pbml0LAorCS5zZXRfc3RkID0gYWR2NzE4Ml9zZXRfc3RkLAorCS5zZWxlY3RfaW5wdXQgPSBhZHY3MTgyX3NlbGVjdF9pbnB1dCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWR2NzE4MF9jaGlwX2luZm8gYWR2NzI4MV9tYV9pbmZvID0geworCS5mbGFncyA9IEFEVjcxODBfRkxBR19WMiB8IEFEVjcxODBfRkxBR19NSVBJX0NTSTIsCisJLnZhbGlkX2lucHV0X21hc2sgPSBCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjEpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfQ1ZCU19BSU4yKSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0NWQlNfQUlOMykgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjQpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfQ1ZCU19BSU41KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0NWQlNfQUlONikgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjcpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfQ1ZCU19BSU44KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX1NWSURFT19BSU4xX0FJTjIpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfU1ZJREVPX0FJTjNfQUlONCkgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9TVklERU9fQUlONV9BSU42KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX1NWSURFT19BSU43X0FJTjgpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfWVBSUEJfQUlOMV9BSU4yX0FJTjMpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfWVBSUEJfQUlONF9BSU41X0FJTjYpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfRElGRl9DVkJTX0FJTjFfQUlOMikgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9ESUZGX0NWQlNfQUlOM19BSU40KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0RJRkZfQ1ZCU19BSU41X0FJTjYpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfRElGRl9DVkJTX0FJTjdfQUlOOCksCisJLmluaXQgPSBhZHY3MTgyX2luaXQsCisJLnNldF9zdGQgPSBhZHY3MTgyX3NldF9zdGQsCisJLnNlbGVjdF9pbnB1dCA9IGFkdjcxODJfc2VsZWN0X2lucHV0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhZHY3MTgwX2NoaXBfaW5mbyBhZHY3MjgyX2luZm8gPSB7CisJLmZsYWdzID0gQURWNzE4MF9GTEFHX1YyIHwgQURWNzE4MF9GTEFHX0kyUCwKKwkudmFsaWRfaW5wdXRfbWFzayA9IEJJVChBRFY3MTgyX0lOUFVUX0NWQlNfQUlOMSkgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjIpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfQ1ZCU19BSU43KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0NWQlNfQUlOOCkgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9TVklERU9fQUlOMV9BSU4yKSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX1NWSURFT19BSU43X0FJTjgpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfRElGRl9DVkJTX0FJTjFfQUlOMikgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9ESUZGX0NWQlNfQUlON19BSU44KSwKKwkuaW5pdCA9IGFkdjcxODJfaW5pdCwKKwkuc2V0X3N0ZCA9IGFkdjcxODJfc2V0X3N0ZCwKKwkuc2VsZWN0X2lucHV0ID0gYWR2NzE4Ml9zZWxlY3RfaW5wdXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGFkdjcxODBfY2hpcF9pbmZvIGFkdjcyODJfbV9pbmZvID0geworCS5mbGFncyA9IEFEVjcxODBfRkxBR19WMiB8IEFEVjcxODBfRkxBR19NSVBJX0NTSTIgfCBBRFY3MTgwX0ZMQUdfSTJQLAorCS52YWxpZF9pbnB1dF9tYXNrID0gQklUKEFEVjcxODJfSU5QVVRfQ1ZCU19BSU4xKSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0NWQlNfQUlOMikgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjMpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfQ1ZCU19BSU40KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0NWQlNfQUlONykgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9DVkJTX0FJTjgpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfU1ZJREVPX0FJTjFfQUlOMikgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9TVklERU9fQUlOM19BSU40KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX1NWSURFT19BSU43X0FJTjgpIHwKKwkJQklUKEFEVjcxODJfSU5QVVRfRElGRl9DVkJTX0FJTjFfQUlOMikgfAorCQlCSVQoQURWNzE4Ml9JTlBVVF9ESUZGX0NWQlNfQUlOM19BSU40KSB8CisJCUJJVChBRFY3MTgyX0lOUFVUX0RJRkZfQ1ZCU19BSU43X0FJTjgpLAorCS5pbml0ID0gYWR2NzE4Ml9pbml0LAorCS5zZXRfc3RkID0gYWR2NzE4Ml9zZXRfc3RkLAorCS5zZWxlY3RfaW5wdXQgPSBhZHY3MTgyX3NlbGVjdF9pbnB1dCwKK307CisKK3N0YXRpYyBpbnQgaW5pdF9kZXZpY2Uoc3RydWN0IGFkdjcxODBfc3RhdGUgKnN0YXRlKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCisJYWR2NzE4MF93cml0ZShzdGF0ZSwgQURWNzE4MF9SRUdfUFdSX01BTiwgQURWNzE4MF9QV1JfTUFOX1JFUyk7CisJdXNsZWVwX3JhbmdlKDIwMDAsIDEwMDAwKTsKKworCXJldCA9IHN0YXRlLT5jaGlwX2luZm8tPmluaXQoc3RhdGUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCXJldCA9IGFkdjcxODBfcHJvZ3JhbV9zdGQoc3RhdGUpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWFkdjcxODBfc2V0X2ZpZWxkX21vZGUoc3RhdGUpOworCisJLyogcmVnaXN0ZXIgZm9yIGludGVycnVwdHMgKi8KKwlpZiAoc3RhdGUtPmlycSA+IDApIHsKKwkJLyogY29uZmlnIHRoZSBJbnRlcnJ1cHQgcGluIHRvIGJlIGFjdGl2ZSBsb3cgKi8KKwkJcmV0ID0gYWR2NzE4MF93cml0ZShzdGF0ZSwgQURWNzE4MF9SRUdfSUNPTkYxLAorCQkJCQkJQURWNzE4MF9JQ09ORjFfQUNUSVZFX0xPVyB8CisJCQkJCQlBRFY3MTgwX0lDT05GMV9QU1lOQ19PTkxZKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF91bmxvY2s7CisKKwkJcmV0ID0gYWR2NzE4MF93cml0ZShzdGF0ZSwgQURWNzE4MF9SRUdfSU1SMSwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfdW5sb2NrOworCisJCXJldCA9IGFkdjcxODBfd3JpdGUoc3RhdGUsIEFEVjcxODBfUkVHX0lNUjIsIDApOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X3VubG9jazsKKworCQkvKiBlbmFibGUgQUQgY2hhbmdlIGludGVycnVwdHMgaW50ZXJydXB0cyAqLworCQlyZXQgPSBhZHY3MTgwX3dyaXRlKHN0YXRlLCBBRFY3MTgwX1JFR19JTVIzLAorCQkJCQkJQURWNzE4MF9JUlEzX0FEX0NIQU5HRSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfdW5sb2NrOworCisJCXJldCA9IGFkdjcxODBfd3JpdGUoc3RhdGUsIEFEVjcxODBfUkVHX0lNUjQsIDApOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjE2LDI2ICsxMTcyLDYzIEBACiAJCSBjbGllbnQtPmFkZHIsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKIAlzdGF0ZSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZigqc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc3RhdGUgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdGF0ZS0+Y2xpZW50ID0gY2xpZW50OworCXN0YXRlLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwlzdGF0ZS0+Y2hpcF9pbmZvID0gKHN0cnVjdCBhZHY3MTgwX2NoaXBfaW5mbyAqKWlkLT5kcml2ZXJfZGF0YTsKKworCWlmIChzdGF0ZS0+Y2hpcF9pbmZvLT5mbGFncyAmIEFEVjcxODBfRkxBR19NSVBJX0NTSTIpIHsKKwkJc3RhdGUtPmNzaV9jbGllbnQgPSBpMmNfbmV3X2R1bW15KGNsaWVudC0+YWRhcHRlciwKKwkJCQlBRFY3MTgwX0RFRkFVTFRfQ1NJX0kyQ19BRERSKTsKKwkJaWYgKCFzdGF0ZS0+Y3NpX2NsaWVudCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChzdGF0ZS0+Y2hpcF9pbmZvLT5mbGFncyAmIEFEVjcxODBfRkxBR19JMlApIHsKKwkJc3RhdGUtPnZwcF9jbGllbnQgPSBpMmNfbmV3X2R1bW15KGNsaWVudC0+YWRhcHRlciwKKwkJCQlBRFY3MTgwX0RFRkFVTFRfVlBQX0kyQ19BRERSKTsKKwkJaWYgKCFzdGF0ZS0+dnBwX2NsaWVudCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyX3VucmVnaXN0ZXJfY3NpX2NsaWVudDsKKwkJfQogCX0KIAogCXN0YXRlLT5pcnEgPSBjbGllbnQtPmlycTsKIAltdXRleF9pbml0KCZzdGF0ZS0+bXV0ZXgpOwogCXN0YXRlLT5hdXRvZGV0ZWN0ID0gdHJ1ZTsKLQlzdGF0ZS0+cG93ZXJlZCA9IHRydWU7CisJaWYgKHN0YXRlLT5jaGlwX2luZm8tPmZsYWdzICYgQURWNzE4MF9GTEFHX1JFU0VUX1BPV0VSRUQpCisJCXN0YXRlLT5wb3dlcmVkID0gdHJ1ZTsKKwllbHNlCisJCXN0YXRlLT5wb3dlcmVkID0gZmFsc2U7CiAJc3RhdGUtPmlucHV0ID0gMDsKIAlzZCA9ICZzdGF0ZS0+c2Q7CiAJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJmFkdjcxODBfb3BzKTsKKwlzZC0+ZmxhZ3MgPSBWNEwyX1NVQkRFVl9GTF9IQVNfREVWTk9ERTsKIAogCXJldCA9IGFkdjcxODBfaW5pdF9jb250cm9scyhzdGF0ZSk7CiAJaWYgKHJldCkKLQkJZ290byBlcnJfdW5yZWdfc3ViZGV2OwotCXJldCA9IGluaXRfZGV2aWNlKGNsaWVudCwgc3RhdGUpOworCQlnb3RvIGVycl91bnJlZ2lzdGVyX3ZwcF9jbGllbnQ7CisKKwlzdGF0ZS0+cGFkLmZsYWdzID0gTUVESUFfUEFEX0ZMX1NPVVJDRTsKKwlzZC0+ZW50aXR5LmZsYWdzIHw9IE1FRElBX0VOVF9UX1Y0TDJfU1VCREVWX0RFQ09ERVI7CisJcmV0ID0gbWVkaWFfZW50aXR5X2luaXQoJnNkLT5lbnRpdHksIDEsICZzdGF0ZS0+cGFkLCAwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9mcmVlX2N0cmw7CiAKKwlyZXQgPSBpbml0X2RldmljZShzdGF0ZSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfbWVkaWFfZW50aXR5X2NsZWFudXA7CisKKwlpZiAoc3RhdGUtPmlycSkgeworCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjbGllbnQtPmlycSwgTlVMTCwgYWR2NzE4MF9pcnEsCisJCQkJCSAgIElSUUZfT05FU0hPVCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCQkgICBLQlVJTERfTU9ETkFNRSwgc3RhdGUpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfbWVkaWFfZW50aXR5X2NsZWFudXA7CisJfQorCiAJcmV0ID0gdjRsMl9hc3luY19yZWdpc3Rlcl9zdWJkZXYoc2QpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2ZyZWVfaXJxOwpAQCAtNjQ1LDExICsxMjM4LDE3IEBACiBlcnJfZnJlZV9pcnE6CiAJaWYgKHN0YXRlLT5pcnEgPiAwKQogCQlmcmVlX2lycShjbGllbnQtPmlycSwgc3RhdGUpOworZXJyX21lZGlhX2VudGl0eV9jbGVhbnVwOgorCW1lZGlhX2VudGl0eV9jbGVhbnVwKCZzZC0+ZW50aXR5KTsKIGVycl9mcmVlX2N0cmw6CiAJYWR2NzE4MF9leGl0X2NvbnRyb2xzKHN0YXRlKTsKLWVycl91bnJlZ19zdWJkZXY6CitlcnJfdW5yZWdpc3Rlcl92cHBfY2xpZW50OgorCWlmIChzdGF0ZS0+Y2hpcF9pbmZvLT5mbGFncyAmIEFEVjcxODBfRkxBR19JMlApCisJCWkyY191bnJlZ2lzdGVyX2RldmljZShzdGF0ZS0+dnBwX2NsaWVudCk7CitlcnJfdW5yZWdpc3Rlcl9jc2lfY2xpZW50OgorCWlmIChzdGF0ZS0+Y2hpcF9pbmZvLT5mbGFncyAmIEFEVjcxODBfRkxBR19NSVBJX0NTSTIpCisJCWkyY191bnJlZ2lzdGVyX2RldmljZShzdGF0ZS0+Y3NpX2NsaWVudCk7CiAJbXV0ZXhfZGVzdHJveSgmc3RhdGUtPm11dGV4KTsKLWVycjoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02NjMsMTUgKzEyNjIsMzIgQEAKIAlpZiAoc3RhdGUtPmlycSA+IDApCiAJCWZyZWVfaXJxKGNsaWVudC0+aXJxLCBzdGF0ZSk7CiAKKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmc2QtPmVudGl0eSk7CiAJYWR2NzE4MF9leGl0X2NvbnRyb2xzKHN0YXRlKTsKKworCWlmIChzdGF0ZS0+Y2hpcF9pbmZvLT5mbGFncyAmIEFEVjcxODBfRkxBR19JMlApCisJCWkyY191bnJlZ2lzdGVyX2RldmljZShzdGF0ZS0+dnBwX2NsaWVudCk7CisJaWYgKHN0YXRlLT5jaGlwX2luZm8tPmZsYWdzICYgQURWNzE4MF9GTEFHX01JUElfQ1NJMikKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKHN0YXRlLT5jc2lfY2xpZW50KTsKKwogCW11dGV4X2Rlc3Ryb3koJnN0YXRlLT5tdXRleCk7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkdjcxODBfaWRbXSA9IHsKLQl7S0JVSUxEX01PRE5BTUUsIDB9LAorCXsgImFkdjcxODAiLCAoa2VybmVsX3Vsb25nX3QpJmFkdjcxODBfaW5mbyB9LAorCXsgImFkdjcxODIiLCAoa2VybmVsX3Vsb25nX3QpJmFkdjcxODJfaW5mbyB9LAorCXsgImFkdjcyODAiLCAoa2VybmVsX3Vsb25nX3QpJmFkdjcyODBfaW5mbyB9LAorCXsgImFkdjcyODAtbSIsIChrZXJuZWxfdWxvbmdfdCkmYWR2NzI4MF9tX2luZm8gfSwKKwl7ICJhZHY3MjgxIiwgKGtlcm5lbF91bG9uZ190KSZhZHY3MjgxX2luZm8gfSwKKwl7ICJhZHY3MjgxLW0iLCAoa2VybmVsX3Vsb25nX3QpJmFkdjcyODFfbV9pbmZvIH0sCisJeyAiYWR2NzI4MS1tYSIsIChrZXJuZWxfdWxvbmdfdCkmYWR2NzI4MV9tYV9pbmZvIH0sCisJeyAiYWR2NzI4MiIsIChrZXJuZWxfdWxvbmdfdCkmYWR2NzI4Ml9pbmZvIH0sCisJeyAiYWR2NzI4Mi1tIiwgKGtlcm5lbF91bG9uZ190KSZhZHY3MjgyX21faW5mbyB9LAogCXt9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhZHY3MTgwX2lkKTsKIAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBhZHY3MTgwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtNjgwLDcgKzEyOTYsNyBAQAogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlzdHJ1Y3QgYWR2NzE4MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CiAKLQlyZXR1cm4gYWR2NzE4MF9zZXRfcG93ZXIoc3RhdGUsIGNsaWVudCwgZmFsc2UpOworCXJldHVybiBhZHY3MTgwX3NldF9wb3dlcihzdGF0ZSwgZmFsc2UpOwogfQogCiBzdGF0aWMgaW50IGFkdjcxODBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTY5MCwxNCArMTMwNiwxNCBAQAogCXN0cnVjdCBhZHY3MTgwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAlpbnQgcmV0OwogCi0JaWYgKHN0YXRlLT5wb3dlcmVkKSB7Ci0JCXJldCA9IGFkdjcxODBfc2V0X3Bvd2VyKHN0YXRlLCBjbGllbnQsIHRydWUpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0ID0gaW5pdF9kZXZpY2UoY2xpZW50LCBzdGF0ZSk7CisJcmV0ID0gaW5pdF9kZXZpY2Uoc3RhdGUpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OworCisJcmV0ID0gYWR2NzE4MF9zZXRfcG93ZXIoc3RhdGUsIHN0YXRlLT5wb3dlcmVkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTcwOCw4ICsxMzI0LDYgQEAKICNkZWZpbmUgQURWNzE4MF9QTV9PUFMgTlVMTAogI2VuZGlmCiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhZHY3MTgwX2lkKTsKLQogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkdjcxODBfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvYWR2NzYwNC5jIGIvZHJpdmVycy9tZWRpYS9pMmMvYWR2NzYwNC5jCmluZGV4IGU0M2RkMmUuLmQyMjhiN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL2Fkdjc2MDQuYworKysgYi9kcml2ZXJzL21lZGlhL2kyYy9hZHY3NjA0LmMKQEAgLTMzMywyMSArMzMzLDExIEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGFkdjc2MDRfc3RhdGUsIHNkKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBoYmxhbmtpbmcoY29uc3Qgc3RydWN0IHY0bDJfYnRfdGltaW5ncyAqdCkKLXsKLQlyZXR1cm4gVjRMMl9EVl9CVF9CTEFOS0lOR19XSURUSCh0KTsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBodG90YWwoY29uc3Qgc3RydWN0IHY0bDJfYnRfdGltaW5ncyAqdCkKIHsKIAlyZXR1cm4gVjRMMl9EVl9CVF9GUkFNRV9XSURUSCh0KTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCB2YmxhbmtpbmcoY29uc3Qgc3RydWN0IHY0bDJfYnRfdGltaW5ncyAqdCkKLXsKLQlyZXR1cm4gVjRMMl9EVl9CVF9CTEFOS0lOR19IRUlHSFQodCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdnRvdGFsKGNvbnN0IHN0cnVjdCB2NGwyX2J0X3RpbWluZ3MgKnQpCiB7CiAJcmV0dXJuIFY0TDJfRFZfQlRfRlJBTUVfSEVJR0hUKHQpOwpAQCAtNDY2LDExICs0NTYsNiBAQAogCXJldHVybiBhZHZfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHN0YXRlLCBBRFY3NjA0X1BBR0VfQ0VDLCByZWcsIHZhbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNlY193cml0ZV9jbHJfc2V0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggbWFzaywgdTggdmFsKQotewotCXJldHVybiBjZWNfd3JpdGUoc2QsIHJlZywgKGNlY19yZWFkKHNkLCByZWcpICYgfm1hc2spIHwgdmFsKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgaW5mb2ZyYW1lX3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnKQogewogCXN0cnVjdCBhZHY3NjA0X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKQEAgLTQ4NiwzNCArNDcxLDYgQEAKIAkJCQkJIHJlZywgdmFsKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZXNkcF9yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZykKLXsKLQlzdHJ1Y3QgYWR2NzYwNF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7Ci0KLQlyZXR1cm4gYWR2X3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHN0YXRlLCBBRFY3NjA0X1BBR0VfRVNEUCwgcmVnKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZXNkcF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbCkKLXsKLQlzdHJ1Y3QgYWR2NzYwNF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7Ci0KLQlyZXR1cm4gYWR2X3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzdGF0ZSwgQURWNzYwNF9QQUdFX0VTRFAsIHJlZywgdmFsKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZHBwX3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnKQotewotCXN0cnVjdCBhZHY3NjA0X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKLQotCXJldHVybiBhZHZfc21idXNfcmVhZF9ieXRlX2RhdGEoc3RhdGUsIEFEVjc2MDRfUEFHRV9EUFAsIHJlZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGRwcF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbCkKLXsKLQlzdHJ1Y3QgYWR2NzYwNF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7Ci0KLQlyZXR1cm4gYWR2X3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzdGF0ZSwgQURWNzYwNF9QQUdFX0RQUCwgcmVnLCB2YWwpOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBhZmVfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcpCiB7CiAJc3RydWN0IGFkdjc2MDRfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwpAQCAtNTYxLDMyICs1MTgsNiBAQAogCXJldHVybiBhZHZfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHN0YXRlLCBBRFY3NjA0X1BBR0VfRURJRCwgcmVnLCB2YWwpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBlZGlkX3JlYWRfYmxvY2soc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgbGVuLCB1OCAqdmFsKQotewotCXN0cnVjdCBhZHY3NjA0X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gc3RhdGUtPmkyY19jbGllbnRzW0FEVjc2MDRfUEFHRV9FRElEXTsKLQl1OCBtc2didWYwWzFdID0geyAwIH07Ci0JdTggbXNnYnVmMVsyNTZdOwotCXN0cnVjdCBpMmNfbXNnIG1zZ1syXSA9IHsKLQkJewotCQkJLmFkZHIgPSBjbGllbnQtPmFkZHIsCi0JCQkubGVuID0gMSwKLQkJCS5idWYgPSBtc2didWYwCi0JCX0sCi0JCXsKLQkJCS5hZGRyID0gY2xpZW50LT5hZGRyLAotCQkJLmZsYWdzID0gSTJDX01fUkQsCi0JCQkubGVuID0gbGVuLAotCQkJLmJ1ZiA9IG1zZ2J1ZjEKLQkJfSwKLQl9OwotCi0JaWYgKGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMikgPCAwKQotCQlyZXR1cm4gLUVJTzsKLQltZW1jcHkodmFsLCBtc2didWYxLCBsZW4pOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBlZGlkX3dyaXRlX2Jsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCQkJCXVuc2lnbmVkIGxlbiwgY29uc3QgdTggKnZhbCkKIHsKQEAgLTY1MiwxMyArNTgzLDYgQEAKIAlyZXR1cm4gaGRtaV93cml0ZShzZCwgcmVnLCAoaGRtaV9yZWFkKHNkLCByZWcpICYgfm1hc2spIHwgdmFsKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdGVzdF9yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZykKLXsKLQlzdHJ1Y3QgYWR2NzYwNF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7Ci0KLQlyZXR1cm4gYWR2X3NtYnVzX3JlYWRfYnl0ZV9kYXRhKHN0YXRlLCBBRFY3NjA0X1BBR0VfVEVTVCwgcmVnKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgdGVzdF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbCkKIHsKIAlzdHJ1Y3QgYWR2NzYwNF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9hZHY3ODQyLmMgYi9kcml2ZXJzL21lZGlhL2kyYy9hZHY3ODQyLmMKaW5kZXggNzVkMjZkZi4uN2MyMTVlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvYWR2Nzg0Mi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL2Fkdjc4NDIuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Y0bDItZHYtdGltaW5ncy5oPgorI2luY2x1ZGUgPGxpbnV4L2hkbWkuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWR2LXRpbWluZ3MuaD4KQEAgLTIyMCwyMSArMjIxLDExIEBACiAJcmV0dXJuICZjb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3RydWN0IGFkdjc4NDJfc3RhdGUsIGhkbCktPnNkOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGhibGFua2luZyhjb25zdCBzdHJ1Y3QgdjRsMl9idF90aW1pbmdzICp0KQotewotCXJldHVybiBWNEwyX0RWX0JUX0JMQU5LSU5HX1dJRFRIKHQpOwotfQotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGh0b3RhbChjb25zdCBzdHJ1Y3QgdjRsMl9idF90aW1pbmdzICp0KQogewogCXJldHVybiBWNEwyX0RWX0JUX0ZSQU1FX1dJRFRIKHQpOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIHZibGFua2luZyhjb25zdCBzdHJ1Y3QgdjRsMl9idF90aW1pbmdzICp0KQotewotCXJldHVybiBWNEwyX0RWX0JUX0JMQU5LSU5HX0hFSUdIVCh0KTsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCB2dG90YWwoY29uc3Qgc3RydWN0IHY0bDJfYnRfdGltaW5ncyAqdCkKIHsKIAlyZXR1cm4gVjRMMl9EVl9CVF9GUkFNRV9IRUlHSFQodCk7CkBAIC0yMTA4LDE0OSArMjA5OSw2NSBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qKioqKioqKioqKiBhdmkgaW5mbyBmcmFtZSBDRUEtODYxLUUgKioqKioqKioqKioqKiovCi0vKiBUT0RPIG1vdmUgdG8gY29tbW9uIGxpYnJhcnkgKi8KLQotc3RydWN0IGF2aV9pbmZvX2ZyYW1lIHsKLQl1aW50OF90IGYxNzsKLQl1aW50OF90IHkxMDsKLQl1aW50OF90IGEwOwotCXVpbnQ4X3QgYjEwOwotCXVpbnQ4X3QgczEwOwotCXVpbnQ4X3QgYzEwOwotCXVpbnQ4X3QgbTEwOwotCXVpbnQ4X3QgcjMyMTA7Ci0JdWludDhfdCBpdGM7Ci0JdWludDhfdCBlYzIxMDsKLQl1aW50OF90IHExMDsKLQl1aW50OF90IHNjMTA7Ci0JdWludDhfdCBmNDc7Ci0JdWludDhfdCB2aWM7Ci0JdWludDhfdCB5cTEwOwotCXVpbnQ4X3QgY24xMDsKLQl1aW50OF90IHByMzIxMDsKLQl1aW50MTZfdCBldGI7Ci0JdWludDE2X3Qgc2JiOwotCXVpbnQxNl90IGVsYjsKLQl1aW50MTZfdCBzcmI7CitzdHJ1Y3QgYWR2Nzg0Ml9jZmdfcmVhZF9pbmZvZnJhbWUgeworCWNvbnN0IGNoYXIgKmRlc2M7CisJdTggcHJlc2VudF9tYXNrOworCXU4IGhlYWRfYWRkcjsKKwl1OCBwYXlsb2FkX2FkZHI7CiB9OwogCi1zdGF0aWMgY29uc3QgY2hhciAqeTEwX3R4dFs0XSA9IHsKLQkiUkdCIiwKLQkiWUNiQ3IgNDoyOjIiLAotCSJZQ2JDciA0OjQ6NCIsCi0JIkZ1dHVyZSIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqYzEwX3R4dFs0XSA9IHsKLQkiTm8gRGF0YSIsCi0JIlNNUFRFIDE3ME0iLAotCSJJVFUtUiA3MDkiLAotCSJFeHRlbmRlZCBDb2xvcmltZXRyeSBpbmZvcm1hdGlvbiB2YWxpZWQiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKml0Y190eHRbMl0gPSB7Ci0JIk5vIERhdGEiLAotCSJJVCBjb250ZW50IiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICplYzIxMF90eHRbOF0gPSB7Ci0JInh2WUNDNjAxIiwKLQkieHZZQ0M3MDkiLAotCSJzWUNDNjAxIiwKLQkiQWRvYmVZQ0M2MDEiLAotCSJBZG9iZVJHQiIsCi0JIjUgcmVzZXJ2ZWQiLAotCSI2IHJlc2VydmVkIiwKLQkiNyByZXNlcnZlZCIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqcTEwX3R4dFs0XSA9IHsKLQkiRGVmYXVsdCIsCi0JIkxpbWl0ZWQgUmFuZ2UiLAotCSJGdWxsIFJhbmdlIiwKLQkiUmVzZXJ2ZWQiLAotfTsKLQotc3RhdGljIHZvaWQgcGFyc2VfYXZpX2luZm9mcmFtZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1aW50OF90ICpidWYsCi0JCQkJc3RydWN0IGF2aV9pbmZvX2ZyYW1lICphdmkpCi17Ci0JYXZpLT5mMTcgPSAoYnVmWzFdID4+IDcpICYgMHgxOwotCWF2aS0+eTEwID0gKGJ1ZlsxXSA+PiA1KSAmIDB4MzsKLQlhdmktPmEwID0gKGJ1ZlsxXSA+PiA0KSAmIDB4MTsKLQlhdmktPmIxMCA9IChidWZbMV0gPj4gMikgJiAweDM7Ci0JYXZpLT5zMTAgPSBidWZbMV0gJiAweDM7Ci0JYXZpLT5jMTAgPSAoYnVmWzJdID4+IDYpICYgMHgzOwotCWF2aS0+bTEwID0gKGJ1ZlsyXSA+PiA0KSAmIDB4MzsKLQlhdmktPnIzMjEwID0gYnVmWzJdICYgMHhmOwotCWF2aS0+aXRjID0gKGJ1ZlszXSA+PiA3KSAmIDB4MTsKLQlhdmktPmVjMjEwID0gKGJ1ZlszXSA+PiA0KSAmIDB4NzsKLQlhdmktPnExMCA9IChidWZbM10gPj4gMikgJiAweDM7Ci0JYXZpLT5zYzEwID0gYnVmWzNdICYgMHgzOwotCWF2aS0+ZjQ3ID0gKGJ1Zls0XSA+PiA3KSAmIDB4MTsKLQlhdmktPnZpYyA9IGJ1Zls0XSAmIDB4N2Y7Ci0JYXZpLT55cTEwID0gKGJ1Zls1XSA+PiA2KSAmIDB4MzsKLQlhdmktPmNuMTAgPSAoYnVmWzVdID4+IDQpICYgMHgzOwotCWF2aS0+cHIzMjEwID0gYnVmWzVdICYgMHhmOwotCWF2aS0+ZXRiID0gYnVmWzZdICsgMjU2KmJ1Zls3XTsKLQlhdmktPnNiYiA9IGJ1Zls4XSArIDI1NipidWZbOV07Ci0JYXZpLT5lbGIgPSBidWZbMTBdICsgMjU2KmJ1ZlsxMV07Ci0JYXZpLT5zcmIgPSBidWZbMTJdICsgMjU2KmJ1ZlsxM107Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X2F2aV9pbmZvZnJhbWUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3N0YXRpYyB2b2lkIGxvZ19pbmZvZnJhbWUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IGFkdjc4NDJfY2ZnX3JlYWRfaW5mb2ZyYW1lICpjcmkpCiB7CiAJaW50IGk7Ci0JdWludDhfdCBidWZbMTRdOwotCXU4IGF2aV9sZW47Ci0JdTggYXZpX3ZlcjsKLQlzdHJ1Y3QgYXZpX2luZm9fZnJhbWUgYXZpOworCXVpbnQ4X3QgYnVmZmVyWzMyXTsKKwl1bmlvbiBoZG1pX2luZm9mcmFtZSBmcmFtZTsKKwl1OCBsZW47CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZjbGllbnQtPmRldjsKKworCWlmICghKGlvX3JlYWQoc2QsIDB4NjApICYgY3JpLT5wcmVzZW50X21hc2spKSB7CisJCXY0bDJfaW5mbyhzZCwgIiVzIGluZm9mcmFtZSBub3QgcmVjZWl2ZWRcbiIsIGNyaS0+ZGVzYyk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlidWZmZXJbaV0gPSBpbmZvZnJhbWVfcmVhZChzZCwgY3JpLT5oZWFkX2FkZHIgKyBpKTsKKworCWxlbiA9IGJ1ZmZlclsyXSArIDE7CisKKwlpZiAobGVuICsgMyA+IHNpemVvZihidWZmZXIpKSB7CisJCXY0bDJfZXJyKHNkLCAiJXM6IGludmFsaWQgJXMgaW5mb2ZyYW1lIGxlbmd0aCAlZFxuIiwgX19mdW5jX18sIGNyaS0+ZGVzYywgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJYnVmZmVyW2kgKyAzXSA9IGluZm9mcmFtZV9yZWFkKHNkLCBjcmktPnBheWxvYWRfYWRkciArIGkpOworCisJaWYgKGhkbWlfaW5mb2ZyYW1lX3VucGFjaygmZnJhbWUsIGJ1ZmZlcikgPCAwKSB7CisJCXY0bDJfZXJyKHNkLCAiJXM6IHVucGFjayBvZiAlcyBpbmZvZnJhbWUgZmFpbGVkXG4iLCBfX2Z1bmNfXywgY3JpLT5kZXNjKTsKKwkJcmV0dXJuOworCX0KKworCWhkbWlfaW5mb2ZyYW1lX2xvZyhLRVJOX0lORk8sIGRldiwgJmZyYW1lKTsKK30KKworc3RhdGljIHZvaWQgYWR2Nzg0Ml9sb2dfaW5mb2ZyYW1lcyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCWludCBpOworCXN0cnVjdCBhZHY3ODQyX2NmZ19yZWFkX2luZm9mcmFtZSBjcmlbXSA9IHsKKwkJeyAiQVZJIiwgMHgwMSwgMHhlMCwgMHgwMCB9LAorCQl7ICJBdWRpbyIsIDB4MDIsIDB4ZTMsIDB4MWMgfSwKKwkJeyAiU0RQIiwgMHgwNCwgMHhlNiwgMHgyYSB9LAorCQl7ICJWZW5kb3IiLCAweDEwLCAweGVjLCAweDU0IH0KKwl9OwogCiAJaWYgKCEoaGRtaV9yZWFkKHNkLCAweDA1KSAmIDB4ODApKSB7Ci0JCXY0bDJfaW5mbyhzZCwgInJlY2VpdmUgRFZJLUQgc2lnbmFsIChBVkkgaW5mb2ZyYW1lIG5vdCBzdXBwb3J0ZWQpXG4iKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoIShpb19yZWFkKHNkLCAweDYwKSAmIDB4MDEpKSB7Ci0JCXY0bDJfaW5mbyhzZCwgIkFWSSBpbmZvZnJhbWUgbm90IHJlY2VpdmVkXG4iKTsKKwkJdjRsMl9pbmZvKHNkLCAicmVjZWl2ZSBEVkktRCBzaWduYWwsIG5vIGluZm9mcmFtZXNcbiIpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKGlvX3JlYWQoc2QsIDB4ODgpICYgMHgxMCkgewotCQl2NGwyX2luZm8oc2QsICJBVkkgaW5mb2ZyYW1lIGNoZWNrc3VtIGVycm9yIGhhcyBvY2N1cnJlZCBlYXJsaWVyXG4iKTsKLQkJaW9fd3JpdGUoc2QsIDB4OGEsIDB4MTApOyAvKiBjbGVhciBBVklfSU5GX0NLU19FUlJfUkFXICovCi0JCWlmIChpb19yZWFkKHNkLCAweDg4KSAmIDB4MTApIHsKLQkJCXY0bDJfaW5mbyhzZCwgIkFWSSBpbmZvZnJhbWUgY2hlY2tzdW0gZXJyb3Igc3RpbGwgcHJlc2VudFxuIik7Ci0JCQlpb193cml0ZShzZCwgMHg4YSwgMHgxMCk7IC8qIGNsZWFyIEFWSV9JTkZfQ0tTX0VSUl9SQVcgKi8KLQkJfQotCX0KLQotCWF2aV9sZW4gPSBpbmZvZnJhbWVfcmVhZChzZCwgMHhlMik7Ci0JYXZpX3ZlciA9IGluZm9mcmFtZV9yZWFkKHNkLCAweGUxKTsKLQl2NGwyX2luZm8oc2QsICJBVkkgaW5mb2ZyYW1lIHZlcnNpb24gJWQgKCVkIGJ5dGUpXG4iLAotCQkgIGF2aV92ZXIsIGF2aV9sZW4pOwotCi0JaWYgKGF2aV92ZXIgIT0gMHgwMikKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IDE0OyBpKyspCi0JCWJ1ZltpXSA9IGluZm9mcmFtZV9yZWFkKHNkLCBpKTsKLQotCXY0bDJfaW5mbyhzZCwgIlx0JTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAotCQkgIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLCBidWZbNV0sIGJ1Zls2XSwgYnVmWzddLAotCQkgIGJ1Zls4XSwgYnVmWzldLCBidWZbMTBdLCBidWZbMTFdLCBidWZbMTJdLCBidWZbMTNdKTsKLQotCXBhcnNlX2F2aV9pbmZvZnJhbWUoc2QsIGJ1ZiwgJmF2aSk7Ci0KLQlpZiAoYXZpLnZpYykKLQkJdjRsMl9pbmZvKHNkLCAiXHRWSUM6ICVkXG4iLCBhdmkudmljKTsKLQlpZiAoYXZpLml0YykKLQkJdjRsMl9pbmZvKHNkLCAiXHQlc1xuIiwgaXRjX3R4dFthdmkuaXRjXSk7Ci0KLQlpZiAoYXZpLnkxMCkKLQkJdjRsMl9pbmZvKHNkLCAiXHQlcyAlc1xuIiwgeTEwX3R4dFthdmkueTEwXSwgIWF2aS5jMTAgPyAiIiA6Ci0JCQkoYXZpLmMxMCA9PSAweDMgPyBlYzIxMF90eHRbYXZpLmVjMjEwXSA6IGMxMF90eHRbYXZpLmMxMF0pKTsKLQllbHNlCi0JCXY0bDJfaW5mbyhzZCwgIlx0JXMgJXNcbiIsIHkxMF90eHRbYXZpLnkxMF0sIHExMF90eHRbYXZpLnExMF0pOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNyaSk7IGkrKykKKwkJbG9nX2luZm9mcmFtZShzZCwgJmNyaVtpXSk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJpbV9tb2RlX3R4dFtdID0gewpAQCAtMjQ2NCw3ICsyMzcxLDggQEAKIAl2NGwyX2luZm8oc2QsICJEZWVwIGNvbG9yIG1vZGU6ICVzXG4iLAogCQkJZGVlcF9jb2xvcl9tb2RlX3R4dFtoZG1pX3JlYWQoc2QsIDB4MGIpID4+IDZdKTsKIAotCXByaW50X2F2aV9pbmZvZnJhbWUoc2QpOworCWFkdjc4NDJfbG9nX2luZm9mcmFtZXMoc2QpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL201bW9scy9tNW1vbHNfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9pMmMvbTVtb2xzL201bW9sc19jb3JlLmMKaW5kZXggMjgyMGY3Yy4uNmVkMTZlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvbTVtb2xzL201bW9sc19jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvbTVtb2xzL201bW9sc19jb3JlLmMKQEAgLTEyNSw5ICsxMjUsOSBAQAogCWlmIChsZW5ndGggPT0gMSkKIAkJcmV0dXJuICpkYXRhOwogCWVsc2UgaWYgKGxlbmd0aCA9PSAyKQotCQlyZXR1cm4gYmUxNl90b19jcHUoKigodTE2ICopZGF0YSkpOworCQlyZXR1cm4gYmUxNl90b19jcHUoKigoX19iZTE2ICopZGF0YSkpOwogCWVsc2UKLQkJcmV0dXJuIGJlMzJfdG9fY3B1KCooKHUzMiAqKWRhdGEpKTsKKwkJcmV0dXJuIGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKWRhdGEpKTsKIH0KIAogLyoqCkBAIC00NTQsMTEgKzQ1NCw2IEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAotCXZlci0+ZncgPSBiZTE2X3RvX2NwdSh2ZXItPmZ3KTsKLQl2ZXItPmh3ID0gYmUxNl90b19jcHUodmVyLT5odyk7Ci0JdmVyLT5wYXJhbSA9IGJlMTZfdG9fY3B1KHZlci0+cGFyYW0pOwotCXZlci0+YXdiID0gYmUxNl90b19jcHUodmVyLT5hd2IpOwotCiAJdjRsMl9pbmZvKHNkLCAiTWFudWZhY3R1cmVyXHRbJXNdXG4iLAogCQkJaXNfbWFudWZhY3R1cmVyKGluZm8sIFJFR19TQU1TVU5HX0VMRUNUUk8pID8KIAkJCSJTYW1zdW5nIEVsZWN0cm8tTWFjaGFuaWNzIiA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9tc3AzNDAwLWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS9pMmMvbXNwMzQwMC1kcml2ZXIuYwppbmRleCA0ZDljNmJjLi5kY2M2OGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2kyYy9tc3AzNDAwLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL21zcDM0MDAtZHJpdmVyLmMKQEAgLTkwNCwxMSArOTA0LDMgQEAKIH07CiAKIG1vZHVsZV9pMmNfZHJpdmVyKG1zcF9kcml2ZXIpOwotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL210OW0wMzIuYyBiL2RyaXZlcnMvbWVkaWEvaTJjL210OW0wMzIuYwppbmRleCA0NWIzZmNhLi43NjQzMTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2kyYy9tdDltMDMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvbXQ5bTAzMi5jCkBAIC00MjIsMjIgKzQyMiwyNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTAzMl9nZXRfcGFkX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYsCi0JCQkJc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKLQkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfY3JvcCAqY3JvcCkKK3N0YXRpYyBpbnQgbXQ5bTAzMl9nZXRfcGFkX3NlbGVjdGlvbihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwKKwkJCQkgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCisJCQkJICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfc2VsZWN0aW9uICpzZWwpCiB7CiAJc3RydWN0IG10OW0wMzIgKnNlbnNvciA9IHRvX210OW0wMzIoc3ViZGV2KTsKIAorCWlmIChzZWwtPnRhcmdldCAhPSBWNEwyX1NFTF9UR1RfQ1JPUCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAltdXRleF9sb2NrKCZzZW5zb3ItPmxvY2spOwotCWNyb3AtPnJlY3QgPSAqX19tdDltMDMyX2dldF9wYWRfY3JvcChzZW5zb3IsIGZoLCBjcm9wLT53aGljaCk7CisJc2VsLT5yID0gKl9fbXQ5bTAzMl9nZXRfcGFkX2Nyb3Aoc2Vuc29yLCBmaCwgc2VsLT53aGljaCk7CiAJbXV0ZXhfdW5sb2NrKCZzZW5zb3ItPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTAzMl9zZXRfcGFkX2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYsCi0JCQkJc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKLQkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfY3JvcCAqY3JvcCkKK3N0YXRpYyBpbnQgbXQ5bTAzMl9zZXRfcGFkX3NlbGVjdGlvbihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwKKwkJCQkgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCisJCQkJICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfc2VsZWN0aW9uICpzZWwpCiB7CiAJc3RydWN0IG10OW0wMzIgKnNlbnNvciA9IHRvX210OW0wMzIoc3ViZGV2KTsKIAlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmb3JtYXQ7CkBAIC00NDUsOSArNDQ4LDEyIEBACiAJc3RydWN0IHY0bDJfcmVjdCByZWN0OwogCWludCByZXQgPSAwOwogCisJaWYgKHNlbC0+dGFyZ2V0ICE9IFY0TDJfU0VMX1RHVF9DUk9QKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW11dGV4X2xvY2soJnNlbnNvci0+bG9jayk7CiAKLQlpZiAoc2Vuc29yLT5zdHJlYW1pbmcgJiYgY3JvcC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSkgeworCWlmIChzZW5zb3ItPnN0cmVhbWluZyAmJiBzZWwtPndoaWNoID09IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUpIHsKIAkJcmV0ID0gLUVCVVNZOwogCQlnb3RvIGRvbmU7CiAJfQpAQCAtNDU1LDEzICs0NjEsMTMgQEAKIAkvKiBDbGFtcCB0aGUgY3JvcCByZWN0YW5nbGUgYm91bmRhcmllcyBhbmQgYWxpZ24gdGhlbSB0byBhIG11bHRpcGxlIG9mIDIKIAkgKiBwaXhlbHMgdG8gZW5zdXJlIGEgR1JCRyBCYXllciBwYXR0ZXJuLgogCSAqLwotCXJlY3QubGVmdCA9IGNsYW1wKEFMSUdOKGNyb3AtPnJlY3QubGVmdCwgMiksIE1UOU0wMzJfQ09MVU1OX1NUQVJUX01JTiwKKwlyZWN0LmxlZnQgPSBjbGFtcChBTElHTihzZWwtPnIubGVmdCwgMiksIE1UOU0wMzJfQ09MVU1OX1NUQVJUX01JTiwKIAkJCSAgTVQ5TTAzMl9DT0xVTU5fU1RBUlRfTUFYKTsKLQlyZWN0LnRvcCA9IGNsYW1wKEFMSUdOKGNyb3AtPnJlY3QudG9wLCAyKSwgTVQ5TTAzMl9ST1dfU1RBUlRfTUlOLAorCXJlY3QudG9wID0gY2xhbXAoQUxJR04oc2VsLT5yLnRvcCwgMiksIE1UOU0wMzJfUk9XX1NUQVJUX01JTiwKIAkJCSBNVDlNMDMyX1JPV19TVEFSVF9NQVgpOwotCXJlY3Qud2lkdGggPSBjbGFtcF90KHVuc2lnbmVkIGludCwgQUxJR04oY3JvcC0+cmVjdC53aWR0aCwgMiksCisJcmVjdC53aWR0aCA9IGNsYW1wX3QodW5zaWduZWQgaW50LCBBTElHTihzZWwtPnIud2lkdGgsIDIpLAogCQkJICAgICBNVDlNMDMyX0NPTFVNTl9TSVpFX01JTiwgTVQ5TTAzMl9DT0xVTU5fU0laRV9NQVgpOwotCXJlY3QuaGVpZ2h0ID0gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIEFMSUdOKGNyb3AtPnJlY3QuaGVpZ2h0LCAyKSwKKwlyZWN0LmhlaWdodCA9IGNsYW1wX3QodW5zaWduZWQgaW50LCBBTElHTihzZWwtPnIuaGVpZ2h0LCAyKSwKIAkJCSAgICAgIE1UOU0wMzJfUk9XX1NJWkVfTUlOLCBNVDlNMDMyX1JPV19TSVpFX01BWCk7CiAKIAlyZWN0LndpZHRoID0gbWluX3QodW5zaWduZWQgaW50LCByZWN0LndpZHRoLApAQCAtNDY5LDIxICs0NzUsMjEgQEAKIAlyZWN0LmhlaWdodCA9IG1pbl90KHVuc2lnbmVkIGludCwgcmVjdC5oZWlnaHQsCiAJCQkgICAgTVQ5TTAzMl9QSVhFTF9BUlJBWV9IRUlHSFQgLSByZWN0LnRvcCk7CiAKLQlfX2Nyb3AgPSBfX210OW0wMzJfZ2V0X3BhZF9jcm9wKHNlbnNvciwgZmgsIGNyb3AtPndoaWNoKTsKKwlfX2Nyb3AgPSBfX210OW0wMzJfZ2V0X3BhZF9jcm9wKHNlbnNvciwgZmgsIHNlbC0+d2hpY2gpOwogCiAJaWYgKHJlY3Qud2lkdGggIT0gX19jcm9wLT53aWR0aCB8fCByZWN0LmhlaWdodCAhPSBfX2Nyb3AtPmhlaWdodCkgewogCQkvKiBSZXNldCB0aGUgb3V0cHV0IGltYWdlIHNpemUgaWYgdGhlIGNyb3AgcmVjdGFuZ2xlIHNpemUgaGFzCiAJCSAqIGJlZW4gbW9kaWZpZWQuCiAJCSAqLwotCQlmb3JtYXQgPSBfX210OW0wMzJfZ2V0X3BhZF9mb3JtYXQoc2Vuc29yLCBmaCwgY3JvcC0+d2hpY2gpOworCQlmb3JtYXQgPSBfX210OW0wMzJfZ2V0X3BhZF9mb3JtYXQoc2Vuc29yLCBmaCwgc2VsLT53aGljaCk7CiAJCWZvcm1hdC0+d2lkdGggPSByZWN0LndpZHRoOwogCQlmb3JtYXQtPmhlaWdodCA9IHJlY3QuaGVpZ2h0OwogCX0KIAogCSpfX2Nyb3AgPSByZWN0OwotCWNyb3AtPnJlY3QgPSByZWN0OworCXNlbC0+ciA9IHJlY3Q7CiAKLQlpZiAoY3JvcC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSkKKwlpZiAoc2VsLT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFKQogCQlyZXQgPSBtdDltMDMyX3VwZGF0ZV9nZW9tX3RpbWluZyhzZW5zb3IpOwogCiBkb25lOgpAQCAtNjkwLDggKzY5Niw4IEBACiAJLmVudW1fZnJhbWVfc2l6ZSA9IG10OW0wMzJfZW51bV9mcmFtZV9zaXplLAogCS5nZXRfZm10ID0gbXQ5bTAzMl9nZXRfcGFkX2Zvcm1hdCwKIAkuc2V0X2ZtdCA9IG10OW0wMzJfc2V0X3BhZF9mb3JtYXQsCi0JLnNldF9jcm9wID0gbXQ5bTAzMl9zZXRfcGFkX2Nyb3AsCi0JLmdldF9jcm9wID0gbXQ5bTAzMl9nZXRfcGFkX2Nyb3AsCisJLnNldF9zZWxlY3Rpb24gPSBtdDltMDMyX3NldF9wYWRfc2VsZWN0aW9uLAorCS5nZXRfc2VsZWN0aW9uID0gbXQ5bTAzMl9nZXRfcGFkX3NlbGVjdGlvbiwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIG10OW0wMzJfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvbXQ5cDAzMS5jIGIvZHJpdmVycy9tZWRpYS9pMmMvbXQ5cDAzMS5jCmluZGV4IGVkYjc2YmQuLmUzYWNhZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL210OXAwMzEuYworKysgYi9kcml2ZXJzL21lZGlhL2kyYy9tdDlwMDMxLmMKQEAgLTU4MSwzNyArNTgxLDQyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5cDAzMV9nZXRfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZmggKmZoLAotCQkJICAgIHN0cnVjdCB2NGwyX3N1YmRldl9jcm9wICpjcm9wKQorc3RhdGljIGludCBtdDlwMDMxX2dldF9zZWxlY3Rpb24oc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYsCisJCQkJIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCisJCQkJIHN0cnVjdCB2NGwyX3N1YmRldl9zZWxlY3Rpb24gKnNlbCkKIHsKIAlzdHJ1Y3QgbXQ5cDAzMSAqbXQ5cDAzMSA9IHRvX210OXAwMzEoc3ViZGV2KTsKIAotCWNyb3AtPnJlY3QgPSAqX19tdDlwMDMxX2dldF9wYWRfY3JvcChtdDlwMDMxLCBmaCwgY3JvcC0+cGFkLAotCQkJCQkgICAgIGNyb3AtPndoaWNoKTsKKwlpZiAoc2VsLT50YXJnZXQgIT0gVjRMMl9TRUxfVEdUX0NST1ApCisJCXJldHVybiAtRUlOVkFMOworCisJc2VsLT5yID0gKl9fbXQ5cDAzMV9nZXRfcGFkX2Nyb3AobXQ5cDAzMSwgZmgsIHNlbC0+cGFkLCBzZWwtPndoaWNoKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdDlwMDMxX3NldF9jcm9wKHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LAotCQkJICAgIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCi0JCQkgICAgc3RydWN0IHY0bDJfc3ViZGV2X2Nyb3AgKmNyb3ApCitzdGF0aWMgaW50IG10OXAwMzFfc2V0X3NlbGVjdGlvbihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwKKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X3NlbGVjdGlvbiAqc2VsKQogewogCXN0cnVjdCBtdDlwMDMxICptdDlwMDMxID0gdG9fbXQ5cDAzMShzdWJkZXYpOwogCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKl9fZm9ybWF0OwogCXN0cnVjdCB2NGwyX3JlY3QgKl9fY3JvcDsKIAlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3Q7CiAKKwlpZiAoc2VsLT50YXJnZXQgIT0gVjRMMl9TRUxfVEdUX0NST1ApCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogQ2xhbXAgdGhlIGNyb3AgcmVjdGFuZ2xlIGJvdW5kYXJpZXMgYW5kIGFsaWduIHRoZW0gdG8gYSBtdWx0aXBsZSBvZiAyCiAJICogcGl4ZWxzIHRvIGVuc3VyZSBhIEdSQkcgQmF5ZXIgcGF0dGVybi4KIAkgKi8KLQlyZWN0LmxlZnQgPSBjbGFtcChBTElHTihjcm9wLT5yZWN0LmxlZnQsIDIpLCBNVDlQMDMxX0NPTFVNTl9TVEFSVF9NSU4sCisJcmVjdC5sZWZ0ID0gY2xhbXAoQUxJR04oc2VsLT5yLmxlZnQsIDIpLCBNVDlQMDMxX0NPTFVNTl9TVEFSVF9NSU4sCiAJCQkgIE1UOVAwMzFfQ09MVU1OX1NUQVJUX01BWCk7Ci0JcmVjdC50b3AgPSBjbGFtcChBTElHTihjcm9wLT5yZWN0LnRvcCwgMiksIE1UOVAwMzFfUk9XX1NUQVJUX01JTiwKKwlyZWN0LnRvcCA9IGNsYW1wKEFMSUdOKHNlbC0+ci50b3AsIDIpLCBNVDlQMDMxX1JPV19TVEFSVF9NSU4sCiAJCQkgTVQ5UDAzMV9ST1dfU1RBUlRfTUFYKTsKLQlyZWN0LndpZHRoID0gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIEFMSUdOKGNyb3AtPnJlY3Qud2lkdGgsIDIpLAorCXJlY3Qud2lkdGggPSBjbGFtcF90KHVuc2lnbmVkIGludCwgQUxJR04oc2VsLT5yLndpZHRoLCAyKSwKIAkJCSAgICAgTVQ5UDAzMV9XSU5ET1dfV0lEVEhfTUlOLAogCQkJICAgICBNVDlQMDMxX1dJTkRPV19XSURUSF9NQVgpOwotCXJlY3QuaGVpZ2h0ID0gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIEFMSUdOKGNyb3AtPnJlY3QuaGVpZ2h0LCAyKSwKKwlyZWN0LmhlaWdodCA9IGNsYW1wX3QodW5zaWduZWQgaW50LCBBTElHTihzZWwtPnIuaGVpZ2h0LCAyKSwKIAkJCSAgICAgIE1UOVAwMzFfV0lORE9XX0hFSUdIVF9NSU4sCiAJCQkgICAgICBNVDlQMDMxX1dJTkRPV19IRUlHSFRfTUFYKTsKIApAQCAtNjIwLDIwICs2MjUsMjAgQEAKIAlyZWN0LmhlaWdodCA9IG1pbl90KHVuc2lnbmVkIGludCwgcmVjdC5oZWlnaHQsCiAJCQkgICAgTVQ5UDAzMV9QSVhFTF9BUlJBWV9IRUlHSFQgLSByZWN0LnRvcCk7CiAKLQlfX2Nyb3AgPSBfX210OXAwMzFfZ2V0X3BhZF9jcm9wKG10OXAwMzEsIGZoLCBjcm9wLT5wYWQsIGNyb3AtPndoaWNoKTsKKwlfX2Nyb3AgPSBfX210OXAwMzFfZ2V0X3BhZF9jcm9wKG10OXAwMzEsIGZoLCBzZWwtPnBhZCwgc2VsLT53aGljaCk7CiAKIAlpZiAocmVjdC53aWR0aCAhPSBfX2Nyb3AtPndpZHRoIHx8IHJlY3QuaGVpZ2h0ICE9IF9fY3JvcC0+aGVpZ2h0KSB7CiAJCS8qIFJlc2V0IHRoZSBvdXRwdXQgaW1hZ2Ugc2l6ZSBpZiB0aGUgY3JvcCByZWN0YW5nbGUgc2l6ZSBoYXMKIAkJICogYmVlbiBtb2RpZmllZC4KIAkJICovCi0JCV9fZm9ybWF0ID0gX19tdDlwMDMxX2dldF9wYWRfZm9ybWF0KG10OXAwMzEsIGZoLCBjcm9wLT5wYWQsCi0JCQkJCQkgICAgY3JvcC0+d2hpY2gpOworCQlfX2Zvcm1hdCA9IF9fbXQ5cDAzMV9nZXRfcGFkX2Zvcm1hdChtdDlwMDMxLCBmaCwgc2VsLT5wYWQsCisJCQkJCQkgICAgc2VsLT53aGljaCk7CiAJCV9fZm9ybWF0LT53aWR0aCA9IHJlY3Qud2lkdGg7CiAJCV9fZm9ybWF0LT5oZWlnaHQgPSByZWN0LmhlaWdodDsKIAl9CiAKIAkqX19jcm9wID0gcmVjdDsKLQljcm9wLT5yZWN0ID0gcmVjdDsKKwlzZWwtPnIgPSByZWN0OwogCiAJcmV0dXJuIDA7CiB9CkBAIC05ODAsOCArOTg1LDggQEAKIAkuZW51bV9mcmFtZV9zaXplID0gbXQ5cDAzMV9lbnVtX2ZyYW1lX3NpemUsCiAJLmdldF9mbXQgPSBtdDlwMDMxX2dldF9mb3JtYXQsCiAJLnNldF9mbXQgPSBtdDlwMDMxX3NldF9mb3JtYXQsCi0JLmdldF9jcm9wID0gbXQ5cDAzMV9nZXRfY3JvcCwKLQkuc2V0X2Nyb3AgPSBtdDlwMDMxX3NldF9jcm9wLAorCS5nZXRfc2VsZWN0aW9uID0gbXQ5cDAzMV9nZXRfc2VsZWN0aW9uLAorCS5zZXRfc2VsZWN0aW9uID0gbXQ5cDAzMV9zZXRfc2VsZWN0aW9uLAogfTsKIAogc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgbXQ5cDAzMV9zdWJkZXZfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvbXQ5dDAwMS5jIGIvZHJpdmVycy9tZWRpYS9pMmMvbXQ5dDAwMS5jCmluZGV4IGQ5ZTk4ODkuLmY2Y2E2MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL210OXQwMDEuYworKysgYi9kcml2ZXJzL21lZGlhL2kyYy9tdDl0MDAxLmMKQEAgLTQwMSwzOSArNDAxLDQ0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5dDAwMV9nZXRfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZmggKmZoLAotCQkJICAgIHN0cnVjdCB2NGwyX3N1YmRldl9jcm9wICpjcm9wKQorc3RhdGljIGludCBtdDl0MDAxX2dldF9zZWxlY3Rpb24oc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYsCisJCQkJIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCisJCQkJIHN0cnVjdCB2NGwyX3N1YmRldl9zZWxlY3Rpb24gKnNlbCkKIHsKIAlzdHJ1Y3QgbXQ5dDAwMSAqbXQ5dDAwMSA9IHRvX210OXQwMDEoc3ViZGV2KTsKIAotCWNyb3AtPnJlY3QgPSAqX19tdDl0MDAxX2dldF9wYWRfY3JvcChtdDl0MDAxLCBmaCwgY3JvcC0+cGFkLAotCQkJCQkgICAgIGNyb3AtPndoaWNoKTsKKwlpZiAoc2VsLT50YXJnZXQgIT0gVjRMMl9TRUxfVEdUX0NST1ApCisJCXJldHVybiAtRUlOVkFMOworCisJc2VsLT5yID0gKl9fbXQ5dDAwMV9nZXRfcGFkX2Nyb3AobXQ5dDAwMSwgZmgsIHNlbC0+cGFkLCBzZWwtPndoaWNoKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtdDl0MDAxX3NldF9jcm9wKHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LAotCQkJICAgIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCi0JCQkgICAgc3RydWN0IHY0bDJfc3ViZGV2X2Nyb3AgKmNyb3ApCitzdGF0aWMgaW50IG10OXQwMDFfc2V0X3NlbGVjdGlvbihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwKKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKKwkJCQkgc3RydWN0IHY0bDJfc3ViZGV2X3NlbGVjdGlvbiAqc2VsKQogewogCXN0cnVjdCBtdDl0MDAxICptdDl0MDAxID0gdG9fbXQ5dDAwMShzdWJkZXYpOwogCXN0cnVjdCB2NGwyX21idXNfZnJhbWVmbXQgKl9fZm9ybWF0OwogCXN0cnVjdCB2NGwyX3JlY3QgKl9fY3JvcDsKIAlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3Q7CiAKKwlpZiAoc2VsLT50YXJnZXQgIT0gVjRMMl9TRUxfVEdUX0NST1ApCisJCXJldHVybiAtRUlOVkFMOworCiAJLyogQ2xhbXAgdGhlIGNyb3AgcmVjdGFuZ2xlIGJvdW5kYXJpZXMgYW5kIGFsaWduIHRoZW0gdG8gYSBtdWx0aXBsZSBvZiAyCiAJICogcGl4ZWxzLgogCSAqLwotCXJlY3QubGVmdCA9IGNsYW1wKEFMSUdOKGNyb3AtPnJlY3QubGVmdCwgMiksCisJcmVjdC5sZWZ0ID0gY2xhbXAoQUxJR04oc2VsLT5yLmxlZnQsIDIpLAogCQkJICBNVDlUMDAxX0NPTFVNTl9TVEFSVF9NSU4sCiAJCQkgIE1UOVQwMDFfQ09MVU1OX1NUQVJUX01BWCk7Ci0JcmVjdC50b3AgPSBjbGFtcChBTElHTihjcm9wLT5yZWN0LnRvcCwgMiksCisJcmVjdC50b3AgPSBjbGFtcChBTElHTihzZWwtPnIudG9wLCAyKSwKIAkJCSBNVDlUMDAxX1JPV19TVEFSVF9NSU4sCiAJCQkgTVQ5VDAwMV9ST1dfU1RBUlRfTUFYKTsKLQlyZWN0LndpZHRoID0gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIEFMSUdOKGNyb3AtPnJlY3Qud2lkdGgsIDIpLAorCXJlY3Qud2lkdGggPSBjbGFtcF90KHVuc2lnbmVkIGludCwgQUxJR04oc2VsLT5yLndpZHRoLCAyKSwKIAkJCSAgICAgTVQ5VDAwMV9XSU5ET1dfV0lEVEhfTUlOICsgMSwKIAkJCSAgICAgTVQ5VDAwMV9XSU5ET1dfV0lEVEhfTUFYICsgMSk7Ci0JcmVjdC5oZWlnaHQgPSBjbGFtcF90KHVuc2lnbmVkIGludCwgQUxJR04oY3JvcC0+cmVjdC5oZWlnaHQsIDIpLAorCXJlY3QuaGVpZ2h0ID0gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIEFMSUdOKHNlbC0+ci5oZWlnaHQsIDIpLAogCQkJICAgICAgTVQ5VDAwMV9XSU5ET1dfSEVJR0hUX01JTiArIDEsCiAJCQkgICAgICBNVDlUMDAxX1dJTkRPV19IRUlHSFRfTUFYICsgMSk7CiAKQEAgLTQ0MiwyMCArNDQ3LDIwIEBACiAJcmVjdC5oZWlnaHQgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHJlY3QuaGVpZ2h0LAogCQkJICAgIE1UOVQwMDFfUElYRUxfQVJSQVlfSEVJR0hUIC0gcmVjdC50b3ApOwogCi0JX19jcm9wID0gX19tdDl0MDAxX2dldF9wYWRfY3JvcChtdDl0MDAxLCBmaCwgY3JvcC0+cGFkLCBjcm9wLT53aGljaCk7CisJX19jcm9wID0gX19tdDl0MDAxX2dldF9wYWRfY3JvcChtdDl0MDAxLCBmaCwgc2VsLT5wYWQsIHNlbC0+d2hpY2gpOwogCiAJaWYgKHJlY3Qud2lkdGggIT0gX19jcm9wLT53aWR0aCB8fCByZWN0LmhlaWdodCAhPSBfX2Nyb3AtPmhlaWdodCkgewogCQkvKiBSZXNldCB0aGUgb3V0cHV0IGltYWdlIHNpemUgaWYgdGhlIGNyb3AgcmVjdGFuZ2xlIHNpemUgaGFzCiAJCSAqIGJlZW4gbW9kaWZpZWQuCiAJCSAqLwotCQlfX2Zvcm1hdCA9IF9fbXQ5dDAwMV9nZXRfcGFkX2Zvcm1hdChtdDl0MDAxLCBmaCwgY3JvcC0+cGFkLAotCQkJCQkJICAgIGNyb3AtPndoaWNoKTsKKwkJX19mb3JtYXQgPSBfX210OXQwMDFfZ2V0X3BhZF9mb3JtYXQobXQ5dDAwMSwgZmgsIHNlbC0+cGFkLAorCQkJCQkJICAgIHNlbC0+d2hpY2gpOwogCQlfX2Zvcm1hdC0+d2lkdGggPSByZWN0LndpZHRoOwogCQlfX2Zvcm1hdC0+aGVpZ2h0ID0gcmVjdC5oZWlnaHQ7CiAJfQogCiAJKl9fY3JvcCA9IHJlY3Q7Ci0JY3JvcC0+cmVjdCA9IHJlY3Q7CisJc2VsLT5yID0gcmVjdDsKIAogCXJldHVybiAwOwogfQpAQCAtODE5LDggKzgyNCw4IEBACiAJLmVudW1fZnJhbWVfc2l6ZSA9IG10OXQwMDFfZW51bV9mcmFtZV9zaXplLAogCS5nZXRfZm10ID0gbXQ5dDAwMV9nZXRfZm9ybWF0LAogCS5zZXRfZm10ID0gbXQ5dDAwMV9zZXRfZm9ybWF0LAotCS5nZXRfY3JvcCA9IG10OXQwMDFfZ2V0X2Nyb3AsCi0JLnNldF9jcm9wID0gbXQ5dDAwMV9zZXRfY3JvcCwKKwkuZ2V0X3NlbGVjdGlvbiA9IG10OXQwMDFfZ2V0X3NlbGVjdGlvbiwKKwkuc2V0X3NlbGVjdGlvbiA9IG10OXQwMDFfc2V0X3NlbGVjdGlvbiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIG10OXQwMDFfc3ViZGV2X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL210OXYwMzIuYyBiL2RyaXZlcnMvbWVkaWEvaTJjL210OXYwMzIuYwppbmRleCA5MzY4N2MxLi5iZDNmOTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2kyYy9tdDl2MDMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvbXQ5djAzMi5jCkBAIC01NTIsMzkgKzU1Miw0NCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10OXYwMzJfZ2V0X2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYsCi0JCQkgICAgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfY3JvcCAqY3JvcCkKK3N0YXRpYyBpbnQgbXQ5djAzMl9nZXRfc2VsZWN0aW9uKHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2LAorCQkJCSBzdHJ1Y3QgdjRsMl9zdWJkZXZfZmggKmZoLAorCQkJCSBzdHJ1Y3QgdjRsMl9zdWJkZXZfc2VsZWN0aW9uICpzZWwpCiB7CiAJc3RydWN0IG10OXYwMzIgKm10OXYwMzIgPSB0b19tdDl2MDMyKHN1YmRldik7CiAKLQljcm9wLT5yZWN0ID0gKl9fbXQ5djAzMl9nZXRfcGFkX2Nyb3AobXQ5djAzMiwgZmgsIGNyb3AtPnBhZCwKLQkJCQkJICAgICBjcm9wLT53aGljaCk7CisJaWYgKHNlbC0+dGFyZ2V0ICE9IFY0TDJfU0VMX1RHVF9DUk9QKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNlbC0+ciA9ICpfX210OXYwMzJfZ2V0X3BhZF9jcm9wKG10OXYwMzIsIGZoLCBzZWwtPnBhZCwgc2VsLT53aGljaCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5djAzMl9zZXRfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZmggKmZoLAotCQkJICAgIHN0cnVjdCB2NGwyX3N1YmRldl9jcm9wICpjcm9wKQorc3RhdGljIGludCBtdDl2MDMyX3NldF9zZWxlY3Rpb24oc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYsCisJCQkJIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCisJCQkJIHN0cnVjdCB2NGwyX3N1YmRldl9zZWxlY3Rpb24gKnNlbCkKIHsKIAlzdHJ1Y3QgbXQ5djAzMiAqbXQ5djAzMiA9IHRvX210OXYwMzIoc3ViZGV2KTsKIAlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpfX2Zvcm1hdDsKIAlzdHJ1Y3QgdjRsMl9yZWN0ICpfX2Nyb3A7CiAJc3RydWN0IHY0bDJfcmVjdCByZWN0OwogCisJaWYgKHNlbC0+dGFyZ2V0ICE9IFY0TDJfU0VMX1RHVF9DUk9QKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIENsYW1wIHRoZSBjcm9wIHJlY3RhbmdsZSBib3VuZGFyaWVzIGFuZCBhbGlnbiB0aGVtIHRvIGEgbm9uIG11bHRpcGxlCiAJICogb2YgMiBwaXhlbHMgdG8gZW5zdXJlIGEgR1JCRyBCYXllciBwYXR0ZXJuLgogCSAqLwotCXJlY3QubGVmdCA9IGNsYW1wKEFMSUdOKGNyb3AtPnJlY3QubGVmdCArIDEsIDIpIC0gMSwKKwlyZWN0LmxlZnQgPSBjbGFtcChBTElHTihzZWwtPnIubGVmdCArIDEsIDIpIC0gMSwKIAkJCSAgTVQ5VjAzMl9DT0xVTU5fU1RBUlRfTUlOLAogCQkJICBNVDlWMDMyX0NPTFVNTl9TVEFSVF9NQVgpOwotCXJlY3QudG9wID0gY2xhbXAoQUxJR04oY3JvcC0+cmVjdC50b3AgKyAxLCAyKSAtIDEsCisJcmVjdC50b3AgPSBjbGFtcChBTElHTihzZWwtPnIudG9wICsgMSwgMikgLSAxLAogCQkJIE1UOVYwMzJfUk9XX1NUQVJUX01JTiwKIAkJCSBNVDlWMDMyX1JPV19TVEFSVF9NQVgpOwotCXJlY3Qud2lkdGggPSBjbGFtcF90KHVuc2lnbmVkIGludCwgQUxJR04oY3JvcC0+cmVjdC53aWR0aCwgMiksCisJcmVjdC53aWR0aCA9IGNsYW1wX3QodW5zaWduZWQgaW50LCBBTElHTihzZWwtPnIud2lkdGgsIDIpLAogCQkJICAgICBNVDlWMDMyX1dJTkRPV19XSURUSF9NSU4sCiAJCQkgICAgIE1UOVYwMzJfV0lORE9XX1dJRFRIX01BWCk7Ci0JcmVjdC5oZWlnaHQgPSBjbGFtcF90KHVuc2lnbmVkIGludCwgQUxJR04oY3JvcC0+cmVjdC5oZWlnaHQsIDIpLAorCXJlY3QuaGVpZ2h0ID0gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIEFMSUdOKHNlbC0+ci5oZWlnaHQsIDIpLAogCQkJICAgICAgTVQ5VjAzMl9XSU5ET1dfSEVJR0hUX01JTiwKIAkJCSAgICAgIE1UOVYwMzJfV0lORE9XX0hFSUdIVF9NQVgpOwogCkBAIC01OTMsMTcgKzU5OCwxNyBAQAogCXJlY3QuaGVpZ2h0ID0gbWluX3QodW5zaWduZWQgaW50LAogCQkJICAgIHJlY3QuaGVpZ2h0LCBNVDlWMDMyX1BJWEVMX0FSUkFZX0hFSUdIVCAtIHJlY3QudG9wKTsKIAotCV9fY3JvcCA9IF9fbXQ5djAzMl9nZXRfcGFkX2Nyb3AobXQ5djAzMiwgZmgsIGNyb3AtPnBhZCwgY3JvcC0+d2hpY2gpOworCV9fY3JvcCA9IF9fbXQ5djAzMl9nZXRfcGFkX2Nyb3AobXQ5djAzMiwgZmgsIHNlbC0+cGFkLCBzZWwtPndoaWNoKTsKIAogCWlmIChyZWN0LndpZHRoICE9IF9fY3JvcC0+d2lkdGggfHwgcmVjdC5oZWlnaHQgIT0gX19jcm9wLT5oZWlnaHQpIHsKIAkJLyogUmVzZXQgdGhlIG91dHB1dCBpbWFnZSBzaXplIGlmIHRoZSBjcm9wIHJlY3RhbmdsZSBzaXplIGhhcwogCQkgKiBiZWVuIG1vZGlmaWVkLgogCQkgKi8KLQkJX19mb3JtYXQgPSBfX210OXYwMzJfZ2V0X3BhZF9mb3JtYXQobXQ5djAzMiwgZmgsIGNyb3AtPnBhZCwKLQkJCQkJCSAgICBjcm9wLT53aGljaCk7CisJCV9fZm9ybWF0ID0gX19tdDl2MDMyX2dldF9wYWRfZm9ybWF0KG10OXYwMzIsIGZoLCBzZWwtPnBhZCwKKwkJCQkJCSAgICBzZWwtPndoaWNoKTsKIAkJX19mb3JtYXQtPndpZHRoID0gcmVjdC53aWR0aDsKIAkJX19mb3JtYXQtPmhlaWdodCA9IHJlY3QuaGVpZ2h0OwotCQlpZiAoY3JvcC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSkgeworCQlpZiAoc2VsLT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFKSB7CiAJCQltdDl2MDMyLT5ocmF0aW8gPSAxOwogCQkJbXQ5djAzMi0+dnJhdGlvID0gMTsKIAkJCW10OXYwMzJfY29uZmlndXJlX3BpeGVsX3JhdGUobXQ5djAzMik7CkBAIC02MTEsNyArNjE2LDcgQEAKIAl9CiAKIAkqX19jcm9wID0gcmVjdDsKLQljcm9wLT5yZWN0ID0gcmVjdDsKKwlzZWwtPnIgPSByZWN0OwogCiAJcmV0dXJuIDA7CiB9CkBAIC04NDQsOCArODQ5LDggQEAKIAkuZW51bV9mcmFtZV9zaXplID0gbXQ5djAzMl9lbnVtX2ZyYW1lX3NpemUsCiAJLmdldF9mbXQgPSBtdDl2MDMyX2dldF9mb3JtYXQsCiAJLnNldF9mbXQgPSBtdDl2MDMyX3NldF9mb3JtYXQsCi0JLmdldF9jcm9wID0gbXQ5djAzMl9nZXRfY3JvcCwKLQkuc2V0X2Nyb3AgPSBtdDl2MDMyX3NldF9jcm9wLAorCS5nZXRfc2VsZWN0aW9uID0gbXQ5djAzMl9nZXRfc2VsZWN0aW9uLAorCS5zZXRfc2VsZWN0aW9uID0gbXQ5djAzMl9zZXRfc2VsZWN0aW9uLAogfTsKIAogc3RhdGljIHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgbXQ5djAzMl9zdWJkZXZfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvczVrNGVjZ3guYyBiL2RyaXZlcnMvbWVkaWEvaTJjL3M1azRlY2d4LmMKaW5kZXggZDFjNTBjOS4uNzAwNzEzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvczVrNGVjZ3guYworKysgYi9kcml2ZXJzL21lZGlhL2kyYy9zNWs0ZWNneC5jCkBAIC0yMjAsNyArMjIwLDcgQEAKIAltc2dbMV0uYnVmID0gcmJ1ZjsKIAogCXJldCA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMik7Ci0JKnZhbCA9IGJlMTZfdG9fY3B1KCooKHUxNiAqKXJidWYpKTsKKwkqdmFsID0gYmUxNl90b19jcHUoKigoX19iZTE2ICopcmJ1ZikpOwogCiAJdjRsMl9kYmcoNCwgZGVidWcsIGNsaWVudCwgImkyY19yZWFkOiAweCUwNFggOiAweCUwNHhcbiIsIGFkZHIsICp2YWwpOwogCkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJdjRsMl9lcnIoc2QsICJGYWlsZWQgdG8gcmVhZCBmaXJtd2FyZSAlc1xuIiwgUzVLNEVDR1hfRklSTVdBUkUpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlyZWdzX251bSA9IGxlMzJfdG9fY3B1KGdldF91bmFsaWduZWRfbGUzMihmdy0+ZGF0YSkpOworCXJlZ3NfbnVtID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGZ3LT5kYXRhKTsKIAogCXY0bDJfZGJnKDMsIGRlYnVnLCBzZCwgIkZXOiAlcyBzaXplICV6dSByZWdpc3RlciBzZXRzICVkXG4iLAogCQkgUzVLNEVDR1hfRklSTVdBUkUsIGZ3LT5zaXplLCByZWdzX251bSk7CkBAIC0zNTEsOCArMzUxLDcgQEAKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBmd19vdXQ7CiAJfQotCWNyY19maWxlID0gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZF9sZTMyKGZ3LT5kYXRhICsKLQkJCQkJCSAgcmVnc19udW0gKiBGV19SRUNPUkRfU0laRSkpOworCWNyY19maWxlID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGZ3LT5kYXRhICsgcmVnc19udW0gKiBGV19SRUNPUkRfU0laRSk7CiAJY3JjID0gY3JjMzJfbGUofjAsIGZ3LT5kYXRhLCByZWdzX251bSAqIEZXX1JFQ09SRF9TSVpFKTsKIAlpZiAoY3JjICE9IGNyY19maWxlKSB7CiAJCXY0bDJfZXJyKHNkLCAiRlc6IGludmFsaWQgY3JjICglI3g6JSN4KVxuIiwgY3JjLCBjcmNfZmlsZSk7CkBAIC0zNjEsOSArMzYwLDkgQEAKIAl9CiAJcHRyID0gZnctPmRhdGEgKyBGV19SRUNPUkRfU0laRTsKIAlmb3IgKGkgPSAxOyBpIDwgcmVnc19udW07IGkrKykgewotCQlhZGRyID0gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZF9sZTMyKHB0cikpOworCQlhZGRyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHB0cik7CiAJCXB0ciArPSBzaXplb2YodTMyKTsKLQkJdmFsID0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZF9sZTE2KHB0cikpOworCQl2YWwgPSBnZXRfdW5hbGlnbmVkX2xlMTYocHRyKTsKIAkJcHRyICs9IHNpemVvZih1MTYpOwogCQlpZiAoYWRkciAtIGFkZHJfaW5jICE9IDIpCiAJCQllcnIgPSBzNWs0ZWNneF93cml0ZShjbGllbnQsIGFkZHIsIHZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9zNWs1YmFmLmMgYi9kcml2ZXJzL21lZGlhL2kyYy9zNWs1YmFmLmMKaW5kZXggNjBhNzRkOC4uYTNkN2QwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvczVrNWJhZi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL3M1azViYWYuYwpAQCAtMzUzLDcgKzM1Myw3IEBACiAgKgogICovCiBzdGF0aWMgaW50IHM1azViYWZfZndfcGFyc2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgczVrNWJhZl9mdyAqKmZ3LAotCQkJICAgIHNpemVfdCBjb3VudCwgY29uc3QgdTE2ICpkYXRhKQorCQkJICAgIHNpemVfdCBjb3VudCwgY29uc3QgX19sZTE2ICpkYXRhKQogewogCXN0cnVjdCBzNWs1YmFmX2Z3ICpmOwogCXUxNiAqZCwgaSwgKmVuZDsKQEAgLTQyMSw2ICs0MjEsNyBAQAogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmc3RhdGUtPnNkKTsKIAlfX2JlMTYgdywgcjsKKwl1MTYgcmVzOwogCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0gewogCQl7IC5hZGRyID0gYy0+YWRkciwgLmZsYWdzID0gMCwKIAkJICAubGVuID0gMiwgLmJ1ZiA9ICh1OCAqKSZ3IH0sCkBAIC00MzQsMTUgKzQzNSwxNSBAQAogCiAJdyA9IGNwdV90b19iZTE2KGFkZHIpOwogCXJldCA9IGkyY190cmFuc2ZlcihjLT5hZGFwdGVyLCBtc2csIDIpOwotCXIgPSBiZTE2X3RvX2NwdShyKTsKKwlyZXMgPSBiZTE2X3RvX2NwdShyKTsKIAotCXY0bDJfZGJnKDMsIGRlYnVnLCBjLCAiaTJjX3JlYWQ6IDB4JTA0eCA6IDB4JTA0eFxuIiwgYWRkciwgcik7CisJdjRsMl9kYmcoMywgZGVidWcsIGMsICJpMmNfcmVhZDogMHglMDR4IDogMHglMDR4XG4iLCBhZGRyLCByZXMpOwogCiAJaWYgKHJldCAhPSAyKSB7CiAJCXY0bDJfZXJyKGMsICJpMmNfcmVhZDogZXJyb3IgZHVyaW5nIHRyYW5zZmVyICglZClcbiIsIHJldCk7CiAJCXN0YXRlLT5lcnJvciA9IHJldDsKIAl9Ci0JcmV0dXJuIHI7CisJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIHZvaWQgczVrNWJhZl9pMmNfd3JpdGUoc3RydWN0IHM1azViYWYgKnN0YXRlLCB1MTYgYWRkciwgdTE2IHZhbCkKQEAgLTEwMzcsNyArMTAzOCw3IEBACiAJfQogCiAJcmV0ID0gczVrNWJhZl9md19wYXJzZSgmYy0+ZGV2LCAmc3RhdGUtPmZ3LCBmdy0+c2l6ZSAvIDIsCi0JCQkgICAgICAgKHUxNiAqKWZ3LT5kYXRhKTsKKwkJCSAgICAgICAoX19sZTE2ICopZnctPmRhdGEpOwogCiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAKQEAgLTE3OTMsNyArMTc5NCw3IEBACiAKIHN0YXRpYyBpbnQgczVrNWJhZl9jb25maWd1cmVfZ3Bpb3Moc3RydWN0IHM1azViYWYgKnN0YXRlKQogewotCXN0YXRpYyBjb25zdCBjaGFyIGNvbnN0ICpuYW1lW10gPSB7ICJTNUs1QkFGX1NUQlkiLCAiUzVLNUJBRl9SU1QiIH07CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lW10gPSB7ICJTNUs1QkFGX1NUQlkiLCAiUzVLNUJBRl9SU1QiIH07CiAJc3RydWN0IGkyY19jbGllbnQgKmMgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZzdGF0ZS0+c2QpOwogCXN0cnVjdCBzNWs1YmFmX2dwaW8gKmcgPSBzdGF0ZS0+Z3Bpb3M7CiAJaW50IHJldCwgaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL3M1azZhYS5jIGIvZHJpdmVycy9tZWRpYS9pMmMvczVrNmFhLmMKaW5kZXggMjg1MTU4MS4uYjFjNTgzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvczVrNmFhLmMKKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvczVrNmFhLmMKQEAgLTM0OCw3ICszNDgsNyBAQAogCW1zZ1sxXS5idWYgPSByYnVmOwogCiAJcmV0ID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNnLCAyKTsKLQkqdmFsID0gYmUxNl90b19jcHUoKigodTE2ICopcmJ1ZikpOworCSp2YWwgPSBiZTE2X3RvX2NwdSgqKChfX2JlMTYgKilyYnVmKSk7CiAKIAl2NGwyX2RiZygzLCBkZWJ1ZywgY2xpZW50LCAiaTJjX3JlYWQ6IDB4JTA0WCA6IDB4JTA0eFxuIiwgYWRkciwgKnZhbCk7CiAKQEAgLTExNjEsMTcgKzExNjEsMjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHM1azZhYV9nZXRfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdWJkZXZfZmggKmZoLAotCQkJICAgc3RydWN0IHY0bDJfc3ViZGV2X2Nyb3AgKmNyb3ApCitzdGF0aWMgaW50IHM1azZhYV9nZXRfc2VsZWN0aW9uKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKKwkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXZfc2VsZWN0aW9uICpzZWwpCiB7CiAJc3RydWN0IHM1azZhYSAqczVrNmFhID0gdG9fczVrNmFhKHNkKTsKIAlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0OwogCi0JbWVtc2V0KGNyb3AtPnJlc2VydmVkLCAwLCBzaXplb2YoY3JvcC0+cmVzZXJ2ZWQpKTsKKwlpZiAoc2VsLT50YXJnZXQgIT0gVjRMMl9TRUxfVEdUX0NST1ApCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KHNlbC0+cmVzZXJ2ZWQsIDAsIHNpemVvZihzZWwtPnJlc2VydmVkKSk7CiAKIAltdXRleF9sb2NrKCZzNWs2YWEtPmxvY2spOwotCXJlY3QgPSBfX3M1azZhYV9nZXRfY3JvcF9yZWN0KHM1azZhYSwgZmgsIGNyb3AtPndoaWNoKTsKLQljcm9wLT5yZWN0ID0gKnJlY3Q7CisJcmVjdCA9IF9fczVrNmFhX2dldF9jcm9wX3JlY3QoczVrNmFhLCBmaCwgc2VsLT53aGljaCk7CisJc2VsLT5yID0gKnJlY3Q7CiAJbXV0ZXhfdW5sb2NrKCZzNWs2YWEtPmxvY2spOwogCiAJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiQ3VycmVudCBjcm9wIHJlY3RhbmdsZTogKCVkLCVkKS8lZHglZFxuIiwKQEAgLTExODAsMzUgKzExODQsMzkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzNWs2YWFfc2V0X2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKLQkJCSAgIHN0cnVjdCB2NGwyX3N1YmRldl9jcm9wICpjcm9wKQorc3RhdGljIGludCBzNWs2YWFfc2V0X3NlbGVjdGlvbihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCXN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCisJCQkJc3RydWN0IHY0bDJfc3ViZGV2X3NlbGVjdGlvbiAqc2VsKQogewogCXN0cnVjdCBzNWs2YWEgKnM1azZhYSA9IHRvX3M1azZhYShzZCk7CiAJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWY7CiAJdW5zaWduZWQgaW50IG1heF94LCBtYXhfeTsKIAlzdHJ1Y3QgdjRsMl9yZWN0ICpjcm9wX3I7CiAKLQltdXRleF9sb2NrKCZzNWs2YWEtPmxvY2spOwotCWNyb3BfciA9IF9fczVrNmFhX2dldF9jcm9wX3JlY3QoczVrNmFhLCBmaCwgY3JvcC0+d2hpY2gpOworCWlmIChzZWwtPnRhcmdldCAhPSBWNEwyX1NFTF9UR1RfQ1JPUCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoY3JvcC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSkgeworCW11dGV4X2xvY2soJnM1azZhYS0+bG9jayk7CisJY3JvcF9yID0gX19zNWs2YWFfZ2V0X2Nyb3BfcmVjdChzNWs2YWEsIGZoLCBzZWwtPndoaWNoKTsKKworCWlmIChzZWwtPndoaWNoID09IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUpIHsKIAkJbWYgPSAmczVrNmFhLT5wcmVzZXQtPm1idXNfZm10OwogCQlzNWs2YWEtPmFwcGx5X2Nyb3AgPSAxOwogCX0gZWxzZSB7CiAJCW1mID0gdjRsMl9zdWJkZXZfZ2V0X3RyeV9mb3JtYXQoZmgsIDApOwogCX0KLQl2NGxfYm91bmRfYWxpZ25faW1hZ2UoJmNyb3AtPnJlY3Qud2lkdGgsIG1mLT53aWR0aCwKKwl2NGxfYm91bmRfYWxpZ25faW1hZ2UoJnNlbC0+ci53aWR0aCwgbWYtPndpZHRoLAogCQkJICAgICAgUzVLNkFBX1dJTl9XSURUSF9NQVgsIDEsCi0JCQkgICAgICAmY3JvcC0+cmVjdC5oZWlnaHQsIG1mLT5oZWlnaHQsCisJCQkgICAgICAmc2VsLT5yLmhlaWdodCwgbWYtPmhlaWdodCwKIAkJCSAgICAgIFM1SzZBQV9XSU5fSEVJR0hUX01BWCwgMSwgMCk7CiAKLQltYXhfeCA9IChTNUs2QUFfV0lOX1dJRFRIX01BWCAtIGNyb3AtPnJlY3Qud2lkdGgpICYgfjE7Ci0JbWF4X3kgPSAoUzVLNkFBX1dJTl9IRUlHSFRfTUFYIC0gY3JvcC0+cmVjdC5oZWlnaHQpICYgfjE7CisJbWF4X3ggPSAoUzVLNkFBX1dJTl9XSURUSF9NQVggLSBzZWwtPnIud2lkdGgpICYgfjE7CisJbWF4X3kgPSAoUzVLNkFBX1dJTl9IRUlHSFRfTUFYIC0gc2VsLT5yLmhlaWdodCkgJiB+MTsKIAotCWNyb3AtPnJlY3QubGVmdCA9IGNsYW1wX3QodW5zaWduZWQgaW50LCBjcm9wLT5yZWN0LmxlZnQsIDAsIG1heF94KTsKLQljcm9wLT5yZWN0LnRvcCAgPSBjbGFtcF90KHVuc2lnbmVkIGludCwgY3JvcC0+cmVjdC50b3AsIDAsIG1heF95KTsKKwlzZWwtPnIubGVmdCA9IGNsYW1wX3QodW5zaWduZWQgaW50LCBzZWwtPnIubGVmdCwgMCwgbWF4X3gpOworCXNlbC0+ci50b3AgID0gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIHNlbC0+ci50b3AsIDAsIG1heF95KTsKIAotCSpjcm9wX3IgPSBjcm9wLT5yZWN0OworCSpjcm9wX3IgPSBzZWwtPnI7CiAKIAltdXRleF91bmxvY2soJnM1azZhYS0+bG9jayk7CiAKQEAgLTEyMjQsOCArMTIzMiw4IEBACiAJLmVudW1fZnJhbWVfaW50ZXJ2YWwJPSBzNWs2YWFfZW51bV9mcmFtZV9pbnRlcnZhbCwKIAkuZ2V0X2ZtdAkJPSBzNWs2YWFfZ2V0X2ZtdCwKIAkuc2V0X2ZtdAkJPSBzNWs2YWFfc2V0X2ZtdCwKLQkuZ2V0X2Nyb3AJCT0gczVrNmFhX2dldF9jcm9wLAotCS5zZXRfY3JvcAkJPSBzNWs2YWFfc2V0X2Nyb3AsCisJLmdldF9zZWxlY3Rpb24JCT0gczVrNmFhX2dldF9zZWxlY3Rpb24sCisJLnNldF9zZWxlY3Rpb24JCT0gczVrNmFhX3NldF9zZWxlY3Rpb24sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBzNWs2YWFfdmlkZW9fb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwLXBsbC5jIGIvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwLXBsbC5jCmluZGV4IGU0MGQ5MDIuLmUzMzQ4ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC1wbGwuYworKysgYi9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAtcGxsLmMKQEAgLTE0LDE0ICsxNCw5IEBACiAgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ2NkLmg+CiAjaW5jbHVkZSA8bGludXgvbGNtLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAtcGxsLmggYi9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAtcGxsLmgKaW5kZXggZThmMDM1YS4uYjk4ZDE0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwLXBsbC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC1wbGwuaApAQCAtMTQsMTkgKzE0LDExIEBACiAgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKICAqLwogCiAjaWZuZGVmIFNNSUFQUF9QTExfSAogI2RlZmluZSBTTUlBUFBfUExMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotCiAvKiBDU0ktMiBvciBDQ1AtMiAqLwogI2RlZmluZSBTTUlBUFBfUExMX0JVU19UWVBFX0NTSTIJCQkJMHgwMAogI2RlZmluZSBTTUlBUFBfUExMX0JVU19UWVBFX1BBUkFMTEVMCQkJCTB4MDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC9zbWlhcHAtY29yZS5jIGIvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1jb3JlLmMKaW5kZXggMGRmNTA3MGUuLmQ0N2VmZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC9zbWlhcHAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC9zbWlhcHAtY29yZS5jCkBAIC0xOCwxMiArMTgsNiBAQAogICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgpAQCAtMzEsMTEgKzI1LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc21pYXBwLmg+CiAjaW5jbHVkZSA8bGludXgvdjRsMi1tZWRpYWJ1cy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1vZi5oPgogCiAjaW5jbHVkZSAic21pYXBwLmgiCiAKQEAgLTUyMywxNCArNTE5LDEyIEBACiBzdGF0aWMgaW50IHNtaWFwcF9pbml0X2NvbnRyb2xzKHN0cnVjdCBzbWlhcHBfc2Vuc29yICpzZW5zb3IpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJnNlbnNvci0+c3JjLT5zZCk7Ci0JdW5zaWduZWQgbG9uZyAqdmFsaWRfbGlua19mcmVxcyA9ICZzZW5zb3ItPnZhbGlkX2xpbmtfZnJlcXNbCi0JCXNlbnNvci0+Y3NpX2Zvcm1hdC0+Y29tcHJlc3NlZCAtIFNNSUFQUF9DT01QUkVTU0VEX0JBU0VdOwotCXVuc2lnbmVkIGludCBtYXgsIGk7CiAJaW50IHJ2YWw7CiAKIAlydmFsID0gdjRsMl9jdHJsX2hhbmRsZXJfaW5pdCgmc2Vuc29yLT5waXhlbF9hcnJheS0+Y3RybF9oYW5kbGVyLCAxMik7CiAJaWYgKHJ2YWwpCiAJCXJldHVybiBydmFsOworCiAJc2Vuc29yLT5waXhlbF9hcnJheS0+Y3RybF9oYW5kbGVyLmxvY2sgPSAmc2Vuc29yLT5tdXRleDsKIAogCXNlbnNvci0+YW5hbG9nX2dhaW4gPSB2NGwyX2N0cmxfbmV3X3N0ZCgKQEAgLTU3NiwyMSArNTcwLDExIEBACiAJCQkJICAgICBBUlJBWV9TSVpFKHNtaWFwcF90ZXN0X3BhdHRlcm5zKSAtIDEsCiAJCQkJICAgICAwLCAwLCBzbWlhcHBfdGVzdF9wYXR0ZXJucyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZW5zb3ItPnRlc3RfZGF0YSk7IGkrKykgewotCQlpbnQgbWF4X3ZhbHVlID0gKDEgPDwgc2Vuc29yLT5jc2lfZm9ybWF0LT53aWR0aCkgLSAxOwotCQlzZW5zb3ItPnRlc3RfZGF0YVtpXSA9Ci0JCQl2NGwyX2N0cmxfbmV3X3N0ZCgKLQkJCQkmc2Vuc29yLT5waXhlbF9hcnJheS0+Y3RybF9oYW5kbGVyLAotCQkJCSZzbWlhcHBfY3RybF9vcHMsIFY0TDJfQ0lEX1RFU1RfUEFUVEVSTl9SRUQgKyBpLAotCQkJCTAsIG1heF92YWx1ZSwgMSwgbWF4X3ZhbHVlKTsKLQl9Ci0KIAlpZiAoc2Vuc29yLT5waXhlbF9hcnJheS0+Y3RybF9oYW5kbGVyLmVycm9yKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAogCQkJInBpeGVsIGFycmF5IGNvbnRyb2xzIGluaXRpYWxpemF0aW9uIGZhaWxlZCAoJWQpXG4iLAogCQkJc2Vuc29yLT5waXhlbF9hcnJheS0+Y3RybF9oYW5kbGVyLmVycm9yKTsKLQkJcnZhbCA9IHNlbnNvci0+cGl4ZWxfYXJyYXktPmN0cmxfaGFuZGxlci5lcnJvcjsKLQkJZ290byBlcnJvcjsKKwkJcmV0dXJuIHNlbnNvci0+cGl4ZWxfYXJyYXktPmN0cmxfaGFuZGxlci5lcnJvcjsKIAl9CiAKIAlzZW5zb3ItPnBpeGVsX2FycmF5LT5zZC5jdHJsX2hhbmRsZXIgPQpAQCAtNjAwLDE2ICs1ODQsMTAgQEAKIAogCXJ2YWwgPSB2NGwyX2N0cmxfaGFuZGxlcl9pbml0KCZzZW5zb3ItPnNyYy0+Y3RybF9oYW5kbGVyLCAwKTsKIAlpZiAocnZhbCkKLQkJZ290byBlcnJvcjsKKwkJcmV0dXJuIHJ2YWw7CisKIAlzZW5zb3ItPnNyYy0+Y3RybF9oYW5kbGVyLmxvY2sgPSAmc2Vuc29yLT5tdXRleDsKIAotCWZvciAobWF4ID0gMDsgc2Vuc29yLT5wbGF0Zm9ybV9kYXRhLT5vcF9zeXNfY2xvY2tbbWF4ICsgMV07IG1heCsrKTsKLQotCXNlbnNvci0+bGlua19mcmVxID0gdjRsMl9jdHJsX25ld19pbnRfbWVudSgKLQkJJnNlbnNvci0+c3JjLT5jdHJsX2hhbmRsZXIsICZzbWlhcHBfY3RybF9vcHMsCi0JCVY0TDJfQ0lEX0xJTktfRlJFUSwgX19mbHMoKnZhbGlkX2xpbmtfZnJlcXMpLAotCQlfX2ZmcygqdmFsaWRfbGlua19mcmVxcyksIHNlbnNvci0+cGxhdGZvcm1fZGF0YS0+b3Bfc3lzX2Nsb2NrKTsKLQogCXNlbnNvci0+cGl4ZWxfcmF0ZV9jc2kgPSB2NGwyX2N0cmxfbmV3X3N0ZCgKIAkJJnNlbnNvci0+c3JjLT5jdHJsX2hhbmRsZXIsICZzbWlhcHBfY3RybF9vcHMsCiAJCVY0TDJfQ0lEX1BJWEVMX1JBVEUsIDEsIElOVF9NQVgsIDEsIDEpOwpAQCAtNjE4LDIwICs1OTYsNDEgQEAKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsCiAJCQkic3JjIGNvbnRyb2xzIGluaXRpYWxpemF0aW9uIGZhaWxlZCAoJWQpXG4iLAogCQkJc2Vuc29yLT5zcmMtPmN0cmxfaGFuZGxlci5lcnJvcik7Ci0JCXJ2YWwgPSBzZW5zb3ItPnNyYy0+Y3RybF9oYW5kbGVyLmVycm9yOwotCQlnb3RvIGVycm9yOworCQlyZXR1cm4gc2Vuc29yLT5zcmMtPmN0cmxfaGFuZGxlci5lcnJvcjsKIAl9CiAKLQlzZW5zb3ItPnNyYy0+c2QuY3RybF9oYW5kbGVyID0KLQkJJnNlbnNvci0+c3JjLT5jdHJsX2hhbmRsZXI7CisJc2Vuc29yLT5zcmMtPnNkLmN0cmxfaGFuZGxlciA9ICZzZW5zb3ItPnNyYy0+Y3RybF9oYW5kbGVyOwogCiAJcmV0dXJuIDA7Cit9CiAKLWVycm9yOgotCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnNlbnNvci0+cGl4ZWxfYXJyYXktPmN0cmxfaGFuZGxlcik7Ci0JdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmc2Vuc29yLT5zcmMtPmN0cmxfaGFuZGxlcik7CisvKgorICogRm9yIGNvbnRyb2xzIHRoYXQgcmVxdWlyZSBpbmZvcm1hdGlvbiBvbiBhdmFpbGFibGUgbWVkaWEgYnVzIGNvZGVzCisgKiBhbmQgbGlua2UgZnJlcXVlbmNpZXMuCisgKi8KK3N0YXRpYyBpbnQgc21pYXBwX2luaXRfbGF0ZV9jb250cm9scyhzdHJ1Y3Qgc21pYXBwX3NlbnNvciAqc2Vuc29yKQoreworCXVuc2lnbmVkIGxvbmcgKnZhbGlkX2xpbmtfZnJlcXMgPSAmc2Vuc29yLT52YWxpZF9saW5rX2ZyZXFzWworCQlzZW5zb3ItPmNzaV9mb3JtYXQtPmNvbXByZXNzZWQgLSBTTUlBUFBfQ09NUFJFU1NFRF9CQVNFXTsKKwl1bnNpZ25lZCBpbnQgbWF4LCBpOwogCi0JcmV0dXJuIHJ2YWw7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2Vuc29yLT50ZXN0X2RhdGEpOyBpKyspIHsKKwkJaW50IG1heF92YWx1ZSA9ICgxIDw8IHNlbnNvci0+Y3NpX2Zvcm1hdC0+d2lkdGgpIC0gMTsKKworCQlzZW5zb3ItPnRlc3RfZGF0YVtpXSA9IHY0bDJfY3RybF9uZXdfc3RkKAorCQkJCSZzZW5zb3ItPnBpeGVsX2FycmF5LT5jdHJsX2hhbmRsZXIsCisJCQkJJnNtaWFwcF9jdHJsX29wcywgVjRMMl9DSURfVEVTVF9QQVRURVJOX1JFRCArIGksCisJCQkJMCwgbWF4X3ZhbHVlLCAxLCBtYXhfdmFsdWUpOworCX0KKworCWZvciAobWF4ID0gMDsgc2Vuc29yLT5wbGF0Zm9ybV9kYXRhLT5vcF9zeXNfY2xvY2tbbWF4ICsgMV07IG1heCsrKTsKKworCXNlbnNvci0+bGlua19mcmVxID0gdjRsMl9jdHJsX25ld19pbnRfbWVudSgKKwkJJnNlbnNvci0+c3JjLT5jdHJsX2hhbmRsZXIsICZzbWlhcHBfY3RybF9vcHMsCisJCVY0TDJfQ0lEX0xJTktfRlJFUSwgX19mbHMoKnZhbGlkX2xpbmtfZnJlcXMpLAorCQlfX2ZmcygqdmFsaWRfbGlua19mcmVxcyksIHNlbnNvci0+cGxhdGZvcm1fZGF0YS0+b3Bfc3lzX2Nsb2NrKTsKKworCXJldHVybiBzZW5zb3ItPnNyYy0+Y3RybF9oYW5kbGVyLmVycm9yOwogfQogCiBzdGF0aWMgdm9pZCBzbWlhcHBfZnJlZV9jb250cm9scyhzdHJ1Y3Qgc21pYXBwX3NlbnNvciAqc2Vuc29yKQpAQCAtMTQ4Nyw3ICsxNDg2LDcgQEAKIAlpZiAocnZhbCA8IDApCiAJCWdvdG8gb3V0OwogCi0JaWYgKChzZW5zb3ItPmZsYXNoX2NhcGFiaWxpdHkgJgorCWlmICgoc2Vuc29yLT5saW1pdHNbU01JQVBQX0xJTUlUX0ZMQVNIX01PREVfQ0FQQUJJTElUWV0gJgogCSAgICAgKFNNSUFQUF9GTEFTSF9NT0RFX0NBUEFCSUxJVFlfU0lOR0xFX1NUUk9CRSB8CiAJICAgICAgU01JQVBQX0ZMQVNIX01PREVfQ0FQQUJJTElUWV9NVUxUSVBMRV9TVFJPQkUpKSAmJgogCSAgICBzZW5zb3ItPnBsYXRmb3JtX2RhdGEtPnN0cm9iZV9zZXR1cCAhPSBOVUxMICYmCkBAIC0yMzM4LDEwICsyMzM3LDkgQEAKICAqIFY0TDIgc3ViZGV2IGNvcmUgb3BlcmF0aW9ucwogICovCiAKLXN0YXRpYyBpbnQgc21pYXBwX2lkZW50aWZ5X21vZHVsZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldikKK3N0YXRpYyBpbnQgc21pYXBwX2lkZW50aWZ5X21vZHVsZShzdHJ1Y3Qgc21pYXBwX3NlbnNvciAqc2Vuc29yKQogewotCXN0cnVjdCBzbWlhcHBfc2Vuc29yICpzZW5zb3IgPSB0b19zbWlhcHBfc2Vuc29yKHN1YmRldik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc3ViZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmc2Vuc29yLT5zcmMtPnNkKTsKIAlzdHJ1Y3Qgc21pYXBwX21vZHVsZV9pbmZvICptaW5mbyA9ICZzZW5zb3ItPm1pbmZvOwogCXVuc2lnbmVkIGludCBpOwogCWludCBydmFsID0gMDsKQEAgLTI0NjQsOCArMjQ2Miw2IEBACiAJCW1pbmZvLT5uYW1lLCBtaW5mby0+bWFudWZhY3R1cmVyX2lkLCBtaW5mby0+bW9kZWxfaWQsCiAJCW1pbmZvLT5yZXZpc2lvbl9udW1iZXJfbWFqb3IpOwogCi0Jc3RybGNweShzdWJkZXYtPm5hbWUsIHNlbnNvci0+bWluZm8ubmFtZSwgc2l6ZW9mKHN1YmRldi0+bmFtZSkpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NzMsMTMgKzI0NjksNzEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfaW50ZXJuYWxfb3BzIHNtaWFwcF9pbnRlcm5hbF9vcHM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG1lZGlhX2VudGl0eV9vcGVyYXRpb25zIHNtaWFwcF9lbnRpdHlfb3BzOwogCi1zdGF0aWMgaW50IHNtaWFwcF9yZWdpc3RlcmVkKHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2KQorc3RhdGljIGludCBzbWlhcHBfcmVnaXN0ZXJfc3ViZGV2cyhzdHJ1Y3Qgc21pYXBwX3NlbnNvciAqc2Vuc29yKQogewotCXN0cnVjdCBzbWlhcHBfc2Vuc29yICpzZW5zb3IgPSB0b19zbWlhcHBfc2Vuc29yKHN1YmRldik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc3ViZGV2KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmc2Vuc29yLT5zcmMtPnNkKTsKKwlzdHJ1Y3Qgc21pYXBwX3N1YmRldiAqc3Nkc1tdID0geworCQlzZW5zb3ItPnNjYWxlciwKKwkJc2Vuc29yLT5iaW5uZXIsCisJCXNlbnNvci0+cGl4ZWxfYXJyYXksCisJfTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgcnZhbDsKKworCWZvciAoaSA9IDA7IGkgPCBTTUlBUFBfU1VCREVWUyAtIDE7IGkrKykgeworCQlzdHJ1Y3Qgc21pYXBwX3N1YmRldiAqdGhpcyA9IHNzZHNbaSArIDFdOworCQlzdHJ1Y3Qgc21pYXBwX3N1YmRldiAqbGFzdCA9IHNzZHNbaV07CisKKwkJaWYgKCFsYXN0KQorCQkJY29udGludWU7CisKKwkJcnZhbCA9IG1lZGlhX2VudGl0eV9pbml0KCZ0aGlzLT5zZC5lbnRpdHksCisJCQkJCSB0aGlzLT5ucGFkcywgdGhpcy0+cGFkcywgMCk7CisJCWlmIChydmFsKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkibWVkaWFfZW50aXR5X2luaXQgZmFpbGVkXG4iKTsKKwkJCXJldHVybiBydmFsOworCQl9CisKKwkJcnZhbCA9IG1lZGlhX2VudGl0eV9jcmVhdGVfbGluaygmdGhpcy0+c2QuZW50aXR5LAorCQkJCQkJdGhpcy0+c291cmNlX3BhZCwKKwkJCQkJCSZsYXN0LT5zZC5lbnRpdHksCisJCQkJCQlsYXN0LT5zaW5rX3BhZCwKKwkJCQkJCU1FRElBX0xOS19GTF9FTkFCTEVEIHwKKwkJCQkJCU1FRElBX0xOS19GTF9JTU1VVEFCTEUpOworCQlpZiAocnZhbCkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkJIm1lZGlhX2VudGl0eV9jcmVhdGVfbGluayBmYWlsZWRcbiIpOworCQkJcmV0dXJuIHJ2YWw7CisJCX0KKworCQlydmFsID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KHNlbnNvci0+c3JjLT5zZC52NGwyX2RldiwKKwkJCQkJCSAgICZ0aGlzLT5zZCk7CisJCWlmIChydmFsKSB7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkidjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2IGZhaWxlZFxuIik7CisJCQlyZXR1cm4gcnZhbDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzbWlhcHBfY2xlYW51cChzdHJ1Y3Qgc21pYXBwX3NlbnNvciAqc2Vuc29yKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZzZW5zb3ItPnNyYy0+c2QpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX252bSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2lkZW50KTsKKworCXNtaWFwcF9mcmVlX2NvbnRyb2xzKHNlbnNvcik7Cit9CisKK3N0YXRpYyBpbnQgc21pYXBwX2luaXQoc3RydWN0IHNtaWFwcF9zZW5zb3IgKnNlbnNvcikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmc2Vuc29yLT5zcmMtPnNkKTsKIAlzdHJ1Y3Qgc21pYXBwX3BsbCAqcGxsID0gJnNlbnNvci0+cGxsOwogCXN0cnVjdCBzbWlhcHBfc3ViZGV2ICpsYXN0ID0gTlVMTDsKLQl1MzIgdG1wOwogCXVuc2lnbmVkIGludCBpOwogCWludCBydmFsOwogCkBAIC0yNDkwLDcgKzI1NDQsNyBAQAogCX0KIAogCWlmICghc2Vuc29yLT5wbGF0Zm9ybV9kYXRhLT5zZXRfeGNsaykgewotCQlzZW5zb3ItPmV4dF9jbGsgPSBkZXZtX2Nsa19nZXQoJmNsaWVudC0+ZGV2LCAiZXh0X2NsayIpOworCQlzZW5zb3ItPmV4dF9jbGsgPSBkZXZtX2Nsa19nZXQoJmNsaWVudC0+ZGV2LCBOVUxMKTsKIAkJaWYgKElTX0VSUihzZW5zb3ItPmV4dF9jbGspKSB7CiAJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImNvdWxkIG5vdCBnZXQgY2xvY2tcbiIpOwogCQkJcmV0dXJuIFBUUl9FUlIoc2Vuc29yLT5leHRfY2xrKTsKQEAgLTI1MjIsNyArMjU3Niw3IEBACiAJaWYgKHJ2YWwpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcnZhbCA9IHNtaWFwcF9pZGVudGlmeV9tb2R1bGUoc3ViZGV2KTsKKwlydmFsID0gc21pYXBwX2lkZW50aWZ5X21vZHVsZShzZW5zb3IpOwogCWlmIChydmFsKSB7CiAJCXJ2YWwgPSAtRU5PREVWOwogCQlnb3RvIG91dF9wb3dlcl9vZmY7CkBAIC0yNjAyLDEzICsyNjU2LDEzIEBACiAJCWlmIChzZW5zb3ItPm52bSA9PSBOVUxMKSB7CiAJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIm52bSBidWYgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQkJcnZhbCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dF9pZGVudF9yZWxlYXNlOworCQkJZ290byBvdXRfY2xlYW51cDsKIAkJfQogCiAJCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfbnZtKSAhPSAwKSB7CiAJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInN5c2ZzIG52bSBlbnRyeSBmYWlsZWRcbiIpOwogCQkJcnZhbCA9IC1FQlVTWTsKLQkJCWdvdG8gb3V0X2lkZW50X3JlbGVhc2U7CisJCQlnb3RvIG91dF9jbGVhbnVwOwogCQl9CiAJfQogCkBAIC0yNjQzLDE4ICsyNjk3LDExIEBACiAJcGxsLT5idXNfdHlwZSA9IFNNSUFQUF9QTExfQlVTX1RZUEVfQ1NJMjsKIAlwbGwtPmNzaTIubGFuZXMgPSBzZW5zb3ItPnBsYXRmb3JtX2RhdGEtPmxhbmVzOwogCXBsbC0+ZXh0X2Nsa19mcmVxX2h6ID0gc2Vuc29yLT5wbGF0Zm9ybV9kYXRhLT5leHRfY2xrOwotCXBsbC0+ZmxhZ3MgPSBzbWlhcHBfY2FsbF9xdWlyayhzZW5zb3IsIHBsbF9mbGFncyk7CiAJcGxsLT5zY2FsZV9uID0gc2Vuc29yLT5saW1pdHNbU01JQVBQX0xJTUlUX1NDQUxFUl9OX01JTl07CiAJLyogUHJvZmlsZSAwIHNlbnNvcnMgaGF2ZSBubyBzZXBhcmF0ZSBPUCBjbG9jayBicmFuY2guICovCiAJaWYgKHNlbnNvci0+bWluZm8uc21pYXBwX3Byb2ZpbGUgPT0gU01JQVBQX1BST0ZJTEVfMCkKIAkJcGxsLT5mbGFncyB8PSBTTUlBUFBfUExMX0ZMQUdfTk9fT1BfQ0xPQ0tTOwogCi0JcnZhbCA9IHNtaWFwcF9nZXRfbWJ1c19mb3JtYXRzKHNlbnNvcik7Ci0JaWYgKHJ2YWwpIHsKLQkJcnZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X252bV9yZWxlYXNlOwotCX0KLQogCWZvciAoaSA9IDA7IGkgPCBTTUlBUFBfU1VCREVWUzsgaSsrKSB7CiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3Qgc21pYXBwX3N1YmRldiAqc3NkOwpAQCAtMjcxMSwzNCArMjc1OCw2IEBACiAJCXRoaXMtPnNkLm93bmVyID0gVEhJU19NT0RVTEU7CiAJCXY0bDJfc2V0X3N1YmRldmRhdGEoJnRoaXMtPnNkLCBjbGllbnQpOwogCi0JCXJ2YWwgPSBtZWRpYV9lbnRpdHlfaW5pdCgmdGhpcy0+c2QuZW50aXR5LAotCQkJCQkgdGhpcy0+bnBhZHMsIHRoaXMtPnBhZHMsIDApOwotCQlpZiAocnZhbCkgewotCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkJIm1lZGlhX2VudGl0eV9pbml0IGZhaWxlZFxuIik7Ci0JCQlnb3RvIG91dF9udm1fcmVsZWFzZTsKLQkJfQotCi0JCXJ2YWwgPSBtZWRpYV9lbnRpdHlfY3JlYXRlX2xpbmsoJnRoaXMtPnNkLmVudGl0eSwKLQkJCQkJCXRoaXMtPnNvdXJjZV9wYWQsCi0JCQkJCQkmbGFzdC0+c2QuZW50aXR5LAotCQkJCQkJbGFzdC0+c2lua19wYWQsCi0JCQkJCQlNRURJQV9MTktfRkxfRU5BQkxFRCB8Ci0JCQkJCQlNRURJQV9MTktfRkxfSU1NVVRBQkxFKTsKLQkJaWYgKHJ2YWwpIHsKLQkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAotCQkJCSJtZWRpYV9lbnRpdHlfY3JlYXRlX2xpbmsgZmFpbGVkXG4iKTsKLQkJCWdvdG8gb3V0X252bV9yZWxlYXNlOwotCQl9Ci0KLQkJcnZhbCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldihzZW5zb3ItPnNyYy0+c2QudjRsMl9kZXYsCi0JCQkJCQkgICAmdGhpcy0+c2QpOwotCQlpZiAocnZhbCkgewotCQkJZGV2X2VycigmY2xpZW50LT5kZXYsCi0JCQkJInY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldiBmYWlsZWRcbiIpOwotCQkJZ290byBvdXRfbnZtX3JlbGVhc2U7Ci0JCX0KLQogCQlsYXN0ID0gdGhpczsKIAl9CiAKQEAgLTI3NTAsNDAgKzI3NjksNjYgQEAKIAlzbWlhcHBfcmVhZF9mcmFtZV9mbXQoc2Vuc29yKTsKIAlydmFsID0gc21pYXBwX2luaXRfY29udHJvbHMoc2Vuc29yKTsKIAlpZiAocnZhbCA8IDApCi0JCWdvdG8gb3V0X252bV9yZWxlYXNlOworCQlnb3RvIG91dF9jbGVhbnVwOworCisJcnZhbCA9IHNtaWFwcF9jYWxsX3F1aXJrKHNlbnNvciwgaW5pdCk7CisJaWYgKHJ2YWwpCisJCWdvdG8gb3V0X2NsZWFudXA7CisKKwlydmFsID0gc21pYXBwX2dldF9tYnVzX2Zvcm1hdHMoc2Vuc29yKTsKKwlpZiAocnZhbCkgeworCQlydmFsID0gLUVOT0RFVjsKKwkJZ290byBvdXRfY2xlYW51cDsKKwl9CisKKwlydmFsID0gc21pYXBwX2luaXRfbGF0ZV9jb250cm9scyhzZW5zb3IpOworCWlmIChydmFsKSB7CisJCXJ2YWwgPSAtRU5PREVWOworCQlnb3RvIG91dF9jbGVhbnVwOworCX0KIAogCW11dGV4X2xvY2soJnNlbnNvci0+bXV0ZXgpOwogCXJ2YWwgPSBzbWlhcHBfdXBkYXRlX21vZGUoc2Vuc29yKTsKIAltdXRleF91bmxvY2soJnNlbnNvci0+bXV0ZXgpOwogCWlmIChydmFsKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAidXBkYXRlIG1vZGUgZmFpbGVkXG4iKTsKLQkJZ290byBvdXRfbnZtX3JlbGVhc2U7CisJCWdvdG8gb3V0X2NsZWFudXA7CiAJfQogCiAJc2Vuc29yLT5zdHJlYW1pbmcgPSBmYWxzZTsKIAlzZW5zb3ItPmRldl9pbml0X2RvbmUgPSB0cnVlOwogCi0JLyogY2hlY2sgZmxhc2ggY2FwYWJpbGl0eSAqLwotCXJ2YWwgPSBzbWlhcHBfcmVhZChzZW5zb3IsIFNNSUFQUF9SRUdfVThfRkxBU0hfTU9ERV9DQVBBQklMSVRZLCAmdG1wKTsKLQlzZW5zb3ItPmZsYXNoX2NhcGFiaWxpdHkgPSB0bXA7Ci0JaWYgKHJ2YWwpCi0JCWdvdG8gb3V0X252bV9yZWxlYXNlOwotCiAJc21pYXBwX3Bvd2VyX29mZihzZW5zb3IpOwogCiAJcmV0dXJuIDA7CiAKLW91dF9udm1fcmVsZWFzZToKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfbnZtKTsKLQotb3V0X2lkZW50X3JlbGVhc2U6Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2lkZW50KTsKK291dF9jbGVhbnVwOgorCXNtaWFwcF9jbGVhbnVwKHNlbnNvcik7CiAKIG91dF9wb3dlcl9vZmY6CiAJc21pYXBwX3Bvd2VyX29mZihzZW5zb3IpOwogCXJldHVybiBydmFsOwogfQogCitzdGF0aWMgaW50IHNtaWFwcF9yZWdpc3RlcmVkKHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2KQoreworCXN0cnVjdCBzbWlhcHBfc2Vuc29yICpzZW5zb3IgPSB0b19zbWlhcHBfc2Vuc29yKHN1YmRldik7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc3ViZGV2KTsKKwlpbnQgcnZhbDsKKworCWlmICghY2xpZW50LT5kZXYub2Zfbm9kZSkgeworCQlydmFsID0gc21pYXBwX2luaXQoc2Vuc29yKTsKKwkJaWYgKHJ2YWwpCisJCQlyZXR1cm4gcnZhbDsKKwl9CisKKwlydmFsID0gc21pYXBwX3JlZ2lzdGVyX3N1YmRldnMoc2Vuc29yKTsKKwlpZiAocnZhbCkKKwkJc21pYXBwX2NsZWFudXAoc2Vuc29yKTsKKworCXJldHVybiBydmFsOworfQorCiBzdGF0aWMgaW50IHNtaWFwcF9vcGVuKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgpCiB7CiAJc3RydWN0IHNtaWFwcF9zdWJkZXYgKnNzZCA9IHRvX3NtaWFwcF9zdWJkZXYoc2QpOwpAQCAtMjkyNywxOSArMjk3MiwxMjUgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCitzdGF0aWMgc3RydWN0IHNtaWFwcF9wbGF0Zm9ybV9kYXRhICpzbWlhcHBfZ2V0X3BkYXRhKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc21pYXBwX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCB2NGwyX29mX2VuZHBvaW50IGJ1c19jZmc7CisJc3RydWN0IGRldmljZV9ub2RlICplcDsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJX19iZTMyICp2YWw7CisJdWludDMyX3QgYXNpemU7CisjaWZkZWYgQ09ORklHX09GCisJdW5zaWduZWQgaW50IGk7CisjZW5kaWYKKwlpbnQgcnZhbDsKKworCWlmICghZGV2LT5vZl9ub2RlKQorCQlyZXR1cm4gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJZXAgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChkZXYtPm9mX25vZGUsIE5VTEwpOworCWlmICghZXApCisJCXJldHVybiBOVUxMOworCisJcGRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkgeworCQlydmFsID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCXY0bDJfb2ZfcGFyc2VfZW5kcG9pbnQoZXAsICZidXNfY2ZnKTsKKworCXN3aXRjaCAoYnVzX2NmZy5idXNfdHlwZSkgeworCWNhc2UgVjRMMl9NQlVTX0NTSTI6CisJCXBkYXRhLT5jc2lfc2lnbmFsbGluZ19tb2RlID0gU01JQVBQX0NTSV9TSUdOQUxMSU5HX01PREVfQ1NJMjsKKwkJYnJlYWs7CisJCS8qIEZJWE1FOiBhZGQgQ0NQMiBzdXBwb3J0LiAqLworCWRlZmF1bHQ6CisJCXJ2YWwgPSAtRUlOVkFMOworCQlnb3RvIG91dF9lcnI7CisJfQorCisJcGRhdGEtPmxhbmVzID0gYnVzX2NmZy5idXMubWlwaV9jc2kyLm51bV9kYXRhX2xhbmVzOworCWRldl9kYmcoZGV2LCAibGFuZXMgJXVcbiIsIHBkYXRhLT5sYW5lcyk7CisKKwkvKiB4c2h1dGRvd24gR1BJTyBpcyBvcHRpb25hbCAqLworCXBkYXRhLT54c2h1dGRvd24gPSBvZl9nZXRfbmFtZWRfZ3BpbyhkZXYtPm9mX25vZGUsICJyZXNldC1ncGlvcyIsIDApOworCisJLyogTlZNIHNpemUgaXMgbm90IG1hbmRhdG9yeSAqLworCW9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgIm5va2lhLG52bS1zaXplIiwKKwkJCQkgICAgJnBkYXRhLT5udm1fc2l6ZSk7CisKKwlydmFsID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoZGV2LT5vZl9ub2RlLCAiY2xvY2stZnJlcXVlbmN5IiwKKwkJCQkgICAgJnBkYXRhLT5leHRfY2xrKTsKKwlpZiAocnZhbCkgeworCQlkZXZfd2FybihkZXYsICJjYW4ndCBnZXQgY2xvY2stZnJlcXVlbmN5XG4iKTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCWRldl9kYmcoZGV2LCAicmVzZXQgJWQsIG52bSAlZCwgY2xrICVkLCBjc2kgJWRcbiIsIHBkYXRhLT54c2h1dGRvd24sCisJCXBkYXRhLT5udm1fc2l6ZSwgcGRhdGEtPmV4dF9jbGssIHBkYXRhLT5jc2lfc2lnbmFsbGluZ19tb2RlKTsKKworCXJ2YWwgPSBvZl9nZXRfcHJvcGVydHkoCisJCWRldi0+b2Zfbm9kZSwgImxpbmstZnJlcXVlbmNpZXMiLCAmYXNpemUpID8gMCA6IC1FTk9FTlQ7CisJaWYgKHJ2YWwpIHsKKwkJZGV2X3dhcm4oZGV2LCAiY2FuJ3QgZ2V0IGxpbmstZnJlcXVlbmNpZXMgYXJyYXkgc2l6ZVxuIik7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlwZGF0YS0+b3Bfc3lzX2Nsb2NrID0gZGV2bV9remFsbG9jKGRldiwgYXNpemUsIEdGUF9LRVJORUwpOworCWlmICghcGRhdGEtPm9wX3N5c19jbG9jaykgeworCQlydmFsID0gLUVOT01FTTsKKwkJZ290byBvdXRfZXJyOworCX0KKworCWFzaXplIC89IHNpemVvZigqcGRhdGEtPm9wX3N5c19jbG9jayk7CisJLyoKKwkgKiBSZWFkIGEgNjQtYml0IGFycmF5IC0tLSB0aGlzIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhCisJICogb2ZfcHJvcGVydHlfcmVhZF91NjRfYXJyYXkoKSBvbmNlIGl0J3MgbWVyZ2VkLgorCSAqLworCXByb3AgPSBvZl9maW5kX3Byb3BlcnR5KGRldi0+b2Zfbm9kZSwgImxpbmstZnJlcXVlbmNpZXMiLCBOVUxMKTsKKwlpZiAoIXByb3ApCisJCWdvdG8gb3V0X2VycjsKKwlpZiAoIXByb3AtPnZhbHVlKQorCQlnb3RvIG91dF9lcnI7CisJaWYgKGFzaXplICogc2l6ZW9mKCpwZGF0YS0+b3Bfc3lzX2Nsb2NrKSA+IHByb3AtPmxlbmd0aCkKKwkJZ290byBvdXRfZXJyOworCXZhbCA9IHByb3AtPnZhbHVlOworCWlmIChJU19FUlIodmFsKSkKKwkJZ290byBvdXRfZXJyOworCisjaWZkZWYgQ09ORklHX09GCisJZm9yIChpID0gMDsgaSA8IGFzaXplOyBpKyspCisJCXBkYXRhLT5vcF9zeXNfY2xvY2tbaV0gPSBvZl9yZWFkX251bWJlcih2YWwgKyBpICogMiwgMik7CisjZW5kaWYKKworCWZvciAoOyBhc2l6ZSA+IDA7IGFzaXplLS0pCisJCWRldl9kYmcoZGV2LCAiZnJlcSAlZDogJWxsZFxuIiwgYXNpemUgLSAxLAorCQkJcGRhdGEtPm9wX3N5c19jbG9ja1thc2l6ZSAtIDFdKTsKKworCW9mX25vZGVfcHV0KGVwKTsKKwlyZXR1cm4gcGRhdGE7CisKK291dF9lcnI6CisJb2Zfbm9kZV9wdXQoZXApOworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgaW50IHNtaWFwcF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmRldmlkKQogewogCXN0cnVjdCBzbWlhcHBfc2Vuc29yICpzZW5zb3I7CisJc3RydWN0IHNtaWFwcF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHNtaWFwcF9nZXRfcGRhdGEoJmNsaWVudC0+ZGV2KTsKKwlpbnQgcnZhbDsKIAotCWlmIChjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhID09IE5VTEwpCisJaWYgKHBkYXRhID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCiAJc2Vuc29yID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKCpzZW5zb3IpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc2Vuc29yID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc2Vuc29yLT5wbGF0Zm9ybV9kYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzZW5zb3ItPnBsYXRmb3JtX2RhdGEgPSBwZGF0YTsKIAltdXRleF9pbml0KCZzZW5zb3ItPm11dGV4KTsKIAltdXRleF9pbml0KCZzZW5zb3ItPnBvd2VyX211dGV4KTsKIAlzZW5zb3ItPnNyYyA9ICZzZW5zb3ItPnNzZHNbc2Vuc29yLT5zc2RzX3VzZWRdOwpAQCAtMjk1MCw4ICszMTAxLDI3IEBACiAJc2Vuc29yLT5zcmMtPnNlbnNvciA9IHNlbnNvcjsKIAogCXNlbnNvci0+c3JjLT5wYWRzWzBdLmZsYWdzID0gTUVESUFfUEFEX0ZMX1NPVVJDRTsKLQlyZXR1cm4gbWVkaWFfZW50aXR5X2luaXQoJnNlbnNvci0+c3JjLT5zZC5lbnRpdHksIDIsCisJcnZhbCA9IG1lZGlhX2VudGl0eV9pbml0KCZzZW5zb3ItPnNyYy0+c2QuZW50aXR5LCAyLAogCQkJCSBzZW5zb3ItPnNyYy0+cGFkcywgMCk7CisJaWYgKHJ2YWwgPCAwKQorCQlyZXR1cm4gcnZhbDsKKworCWlmIChjbGllbnQtPmRldi5vZl9ub2RlKSB7CisJCXJ2YWwgPSBzbWlhcHBfaW5pdChzZW5zb3IpOworCQlpZiAocnZhbCkKKwkJCWdvdG8gb3V0X21lZGlhX2VudGl0eV9jbGVhbnVwOworCX0KKworCXJ2YWwgPSB2NGwyX2FzeW5jX3JlZ2lzdGVyX3N1YmRldigmc2Vuc29yLT5zcmMtPnNkKTsKKwlpZiAocnZhbCA8IDApCisJCWdvdG8gb3V0X21lZGlhX2VudGl0eV9jbGVhbnVwOworCisJcmV0dXJuIDA7CisKK291dF9tZWRpYV9lbnRpdHlfY2xlYW51cDoKKwltZWRpYV9lbnRpdHlfY2xlYW51cCgmc2Vuc29yLT5zcmMtPnNkLmVudGl0eSk7CisKKwlyZXR1cm4gcnZhbDsKIH0KIAogc3RhdGljIGludCBzbWlhcHBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCkBAIC0yOTYwLDYgKzMxMzAsOCBAQAogCXN0cnVjdCBzbWlhcHBfc2Vuc29yICpzZW5zb3IgPSB0b19zbWlhcHBfc2Vuc29yKHN1YmRldik7CiAJdW5zaWduZWQgaW50IGk7CiAKKwl2NGwyX2FzeW5jX3VucmVnaXN0ZXJfc3ViZGV2KHN1YmRldik7CisKIAlpZiAoc2Vuc29yLT5wb3dlcl9jb3VudCkgewogCQlpZiAoZ3Bpb19pc192YWxpZChzZW5zb3ItPnBsYXRmb3JtX2RhdGEtPnhzaHV0ZG93bikpCiAJCQlncGlvX3NldF92YWx1ZShzZW5zb3ItPnBsYXRmb3JtX2RhdGEtPnhzaHV0ZG93biwgMCk7CkBAIC0yOTcwLDE5ICszMTQyLDIwIEBACiAJCXNlbnNvci0+cG93ZXJfY291bnQgPSAwOwogCX0KIAotCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pZGVudCk7Ci0JaWYgKHNlbnNvci0+bnZtKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfbnZtKTsKLQogCWZvciAoaSA9IDA7IGkgPCBzZW5zb3ItPnNzZHNfdXNlZDsgaSsrKSB7CiAJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KCZzZW5zb3ItPnNzZHNbaV0uc2QpOwogCQltZWRpYV9lbnRpdHlfY2xlYW51cCgmc2Vuc29yLT5zc2RzW2ldLnNkLmVudGl0eSk7CiAJfQotCXNtaWFwcF9mcmVlX2NvbnRyb2xzKHNlbnNvcik7CisJc21pYXBwX2NsZWFudXAoc2Vuc29yKTsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzbWlhcHBfb2ZfdGFibGVbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gIm5va2lhLHNtaWEiIH0sCisJeyB9LAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNtaWFwcF9pZF90YWJsZVtdID0gewogCXsgU01JQVBQX05BTUUsIDAgfSwKIAl7IH0sCkBAIC0yOTk2LDYgKzMxNjksNyBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc21pYXBwX2kyY19kcml2ZXIgPSB7CiAJLmRyaXZlcgk9IHsKKwkJLm9mX21hdGNoX3RhYmxlID0gc21pYXBwX29mX3RhYmxlLAogCQkubmFtZSA9IFNNSUFQUF9OQU1FLAogCQkucG0gPSAmc21pYXBwX3BtX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1saW1pdHMuYyBiL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC9zbWlhcHAtbGltaXRzLmMKaW5kZXggODQ3Y2IyMy4uNzg0YjExNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1saW1pdHMuYworKysgYi9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAvc21pYXBwLWxpbWl0cy5jCkBAIC0xNCwxMiArMTQsNiBAQAogICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCiAgKi8KIAogI2luY2x1ZGUgInNtaWFwcC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1saW1pdHMuaCBiL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC9zbWlhcHAtbGltaXRzLmgKaW5kZXggMzQzZTljMy4uYjIwMTI0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1saW1pdHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAvc21pYXBwLWxpbWl0cy5oCkBAIC0xNCwxMiArMTQsNiBAQAogICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCiAgKi8KIAogI2RlZmluZSBTTUlBUFBfTElNSVRfQU5BTE9HVUVfR0FJTl9DQVBBQklMSVRZCQkJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1xdWlyay5jIGIvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1xdWlyay5jCmluZGV4IGUwYmVlODcuLmFiZjllYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC9zbWlhcHAtcXVpcmsuYworKysgYi9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAvc21pYXBwLXF1aXJrLmMKQEAgLTE0LDEyICsxNCw2IEBACiAgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTIyMCw5ICsyMTQsMTEgQEAKIAlyZXR1cm4gc21pYXBwX3dyaXRlXzgoc2Vuc29yLCAweDMzMjgsIDB4ODApOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBqdDhldjFfcGxsX2ZsYWdzKHN0cnVjdCBzbWlhcHBfc2Vuc29yICpzZW5zb3IpCitzdGF0aWMgaW50IGp0OGV2MV9pbml0KHN0cnVjdCBzbWlhcHBfc2Vuc29yICpzZW5zb3IpCiB7Ci0JcmV0dXJuIFNNSUFQUF9QTExfRkxBR19PUF9QSVhfQ0xPQ0tfUEVSX0xBTkU7CisJc2Vuc29yLT5wbGwuZmxhZ3MgfD0gU01JQVBQX1BMTF9GTEFHX09QX1BJWF9DTE9DS19QRVJfTEFORTsKKworCXJldHVybiAwOwogfQogCiBjb25zdCBzdHJ1Y3Qgc21pYXBwX3F1aXJrIHNtaWFwcF9qdDhldjFfcXVpcmsgPSB7CkBAIC0yMzAsNyArMjI2LDcgQEAKIAkucG9zdF9wb3dlcm9uID0ganQ4ZXYxX3Bvc3RfcG93ZXJvbiwKIAkucHJlX3N0cmVhbW9uID0ganQ4ZXYxX3ByZV9zdHJlYW1vbiwKIAkucG9zdF9zdHJlYW1vZmYgPSBqdDhldjFfcG9zdF9zdHJlYW1vZmYsCi0JLnBsbF9mbGFncyA9IGp0OGV2MV9wbGxfZmxhZ3MsCisJLmluaXQgPSBqdDhldjFfaW5pdCwKIH07CiAKIHN0YXRpYyBpbnQgdGNtODUwMG1kX2xpbWl0cyhzdHJ1Y3Qgc21pYXBwX3NlbnNvciAqc2Vuc29yKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1xdWlyay5oIGIvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1xdWlyay5oCmluZGV4IDQ2ZTllYTguLmRhYzU1NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC9zbWlhcHAtcXVpcmsuaAorKysgYi9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAvc21pYXBwLXF1aXJrLmgKQEAgLTE0LDEyICsxNCw2IEBACiAgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKICAqLwogCiAjaWZuZGVmIF9fU01JQVBQX1FVSVJLX18KQEAgLTM1LDYgKzI5LDkgQEAKICAqIEBwb3N0X3Bvd2Vyb246IENhbGxlZCBhbHdheXMgYWZ0ZXIgdGhlIHNlbnNvciBoYXMgYmVlbiBmdWxseSBwb3dlcmVkIG9uLgogICogQHByZV9zdHJlYW1vbjogQ2FsbGVkIGp1c3QgYmVmb3JlIHN0cmVhbWluZyBpcyBlbmFibGVkLgogICogQHBvc3Rfc3RyZWFtb246IENhbGxlZCByaWdodCBhZnRlciBzdG9wcGluZyBzdHJlYW1pbmcuCisgKiBAcGxsX2ZsYWdzOiBSZXR1cm4gZmxhZ3MgZm9yIHRoZSBQTEwgY2FsY3VsYXRvci4KKyAqIEBpbml0OiBRdWlyayBpbml0aWFsaXNhdGlvbiwgY2FsbGVkIHRoZSBsYXN0IGluIHByb2JlKCkuIFRoaXMgaXMKKyAqCSAgYWxzbyBhcHByb3ByaWF0ZSBmb3IgYWRkaW5nIHNlbnNvciBzcGVjaWZpYyBjb250cm9scywgZm9yIGluc3RhbmNlLgogICogQHJlZ19hY2Nlc3M6IFJlZ2lzdGVyIGFjY2VzcyBxdWlyay4gVGhlIHF1aXJrIG1heSBkaXZlcnQgdGhlIGFjY2VzcwogICoJCXRvIGFub3RoZXIgcmVnaXN0ZXIsIG9yIG5vIHJlZ2lzdGVyIGF0IGFsbC4KICAqCkBAIC01Myw2ICs1MCw3IEBACiAJaW50ICgqcHJlX3N0cmVhbW9uKShzdHJ1Y3Qgc21pYXBwX3NlbnNvciAqc2Vuc29yKTsKIAlpbnQgKCpwb3N0X3N0cmVhbW9mZikoc3RydWN0IHNtaWFwcF9zZW5zb3IgKnNlbnNvcik7CiAJdW5zaWduZWQgbG9uZyAoKnBsbF9mbGFncykoc3RydWN0IHNtaWFwcF9zZW5zb3IgKnNlbnNvcik7CisJaW50ICgqaW5pdCkoc3RydWN0IHNtaWFwcF9zZW5zb3IgKnNlbnNvcik7CiAJaW50ICgqcmVnX2FjY2Vzcykoc3RydWN0IHNtaWFwcF9zZW5zb3IgKnNlbnNvciwgYm9vbCB3cml0ZSwgdTMyICpyZWcsCiAJCQkgIHUzMiAqdmFsKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzQsMTQgKzcyLDE0IEBACiAJCS52YWwgPSBfdmFsLAkJXAogCX0KIAotI2RlZmluZSBzbWlhcHBfY2FsbF9xdWlyayhfc2Vuc29yLCBfcXVpcmssIC4uLikJCQkJXAotCShfc2Vuc29yLT5taW5mby5xdWlyayAmJgkJCQkJXAotCSBfc2Vuc29yLT5taW5mby5xdWlyay0+X3F1aXJrID8JCQkJCVwKLQkgX3NlbnNvci0+bWluZm8ucXVpcmstPl9xdWlyayhfc2Vuc29yLCAjI19fVkFfQVJHU19fKSA6IDApCisjZGVmaW5lIHNtaWFwcF9jYWxsX3F1aXJrKHNlbnNvciwgX3F1aXJrLCAuLi4pCQkJCVwKKwkoKHNlbnNvciktPm1pbmZvLnF1aXJrICYmCQkJCQlcCisJIChzZW5zb3IpLT5taW5mby5xdWlyay0+X3F1aXJrID8JCQkJXAorCSAoc2Vuc29yKS0+bWluZm8ucXVpcmstPl9xdWlyayhzZW5zb3IsICMjX19WQV9BUkdTX18pIDogMCkKIAotI2RlZmluZSBzbWlhcHBfbmVlZHNfcXVpcmsoX3NlbnNvciwgX3F1aXJrKQkJXAotCShfc2Vuc29yLT5taW5mby5xdWlyayA/CQkJCVwKLQkgX3NlbnNvci0+bWluZm8ucXVpcmstPmZsYWdzICYgX3F1aXJrIDogMCkKKyNkZWZpbmUgc21pYXBwX25lZWRzX3F1aXJrKHNlbnNvciwgX3F1aXJrKQkJXAorCSgoc2Vuc29yKS0+bWluZm8ucXVpcmsgPwkJCVwKKwkgKHNlbnNvciktPm1pbmZvLnF1aXJrLT5mbGFncyAmIF9xdWlyayA6IDApCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc21pYXBwX3F1aXJrIHNtaWFwcF9qdDhldjFfcXVpcms7CiBleHRlcm4gY29uc3Qgc3RydWN0IHNtaWFwcF9xdWlyayBzbWlhcHBfaW14MTI1ZXNfcXVpcms7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAvc21pYXBwLXJlZy1kZWZzLmggYi9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAvc21pYXBwLXJlZy1kZWZzLmgKaW5kZXggYzQ4OGVmMC4uZjkyOGQ0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1yZWctZGVmcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC9zbWlhcHAtcmVnLWRlZnMuaApAQCAtMTQsMTIgKzE0LDYgQEAKICAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSAqIDAyMTEwLTEzMDEgVVNBCi0gKgogICovCiAjZGVmaW5lIFNNSUFQUF9SRUdfTUtfVTgocikgKChTTUlBUFBfUkVHXzhCSVQgPDwgMTYpIHwgKHIpKQogI2RlZmluZSBTTUlBUFBfUkVHX01LX1UxNihyKSAoKFNNSUFQUF9SRUdfMTZCSVQgPDwgMTYpIHwgKHIpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC9zbWlhcHAtcmVnLmgKaW5kZXggYjBkY2JiOC4uNGM4YjQwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1yZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAvc21pYXBwLXJlZy5oCkBAIC0xNCwxMiArMTQsNiBAQAogICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCiAgKi8KIAogI2lmbmRlZiBfX1NNSUFQUF9SRUdfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC9zbWlhcHAtcmVncy5jIGIvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1yZWdzLmMKaW5kZXggYTIwOTgwMC4uNmI2YzIwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1yZWdzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1yZWdzLmMKQEAgLTE0LDEyICsxNCw2IEBACiAgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC9zbWlhcHAtcmVncy5oIGIvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1yZWdzLmgKaW5kZXggMzU1MjExMi4uNmRkMGU0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1yZWdzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC1yZWdzLmgKQEAgLTE0LDEyICsxNCw2IEBACiAgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxIFVTQQotICoKICAqLwogCiAjaWZuZGVmIFNNSUFQUF9SRUdTX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC9zbWlhcHAuaCBiL2RyaXZlcnMvbWVkaWEvaTJjL3NtaWFwcC9zbWlhcHAuaAppbmRleCBmODhmOGVjLi5lZDAxMGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2kyYy9zbWlhcHAvc21pYXBwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvc21pYXBwL3NtaWFwcC5oCkBAIC0xNCwxMiArMTQsNiBAQAogICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKICAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSBVU0EKLSAqCiAgKi8KIAogI2lmbmRlZiBfX1NNSUFQUF9QUklWX0hfCkBAIC0yMjIsNyArMjE2LDYgQEAKIAl1OCBzY2FsaW5nX21vZGU7CiAKIAl1OCBodmZsaXBfaW52X21hc2s7IC8qIEgvVkZMSVAgaW52ZXJzaW9uIGR1ZSB0byBzZW5zb3Igb3JpZW50YXRpb24gKi8KLQl1OCBmbGFzaF9jYXBhYmlsaXR5OwogCXU4IGZyYW1lX3NraXA7CiAKIAlpbnQgcG93ZXJfY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy9zb2NfY2FtZXJhL292MjY0MC5jIGIvZHJpdmVycy9tZWRpYS9pMmMvc29jX2NhbWVyYS9vdjI2NDAuYwppbmRleCA2ZjJkZDkwOTMuLjFmZGNlMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvaTJjL3NvY19jYW1lcmEvb3YyNjQwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9pMmMvc29jX2NhbWVyYS9vdjI2NDAuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2xrLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pbWFnZS1zaXplcy5oPgogCiAjZGVmaW5lIFZBTF9TRVQoeCwgbWFzaywgcnNoaWZ0LCBsc2hpZnQpICBcCiAJCSgoKCh4KSA+PiByc2hpZnQpICYgbWFzaykgPDwgbHNoaWZ0KQpAQCAtMjY4LDMzICsyNjksMTAgQEAKIAl1OCB2YWx1ZTsKIH07CiAKLS8qIFN1cHBvcnRlZCByZXNvbHV0aW9ucyAqLwotZW51bSBvdjI2NDBfd2lkdGggewotCVdfUUNJRgk9IDE3NiwKLQlXX1FWR0EJPSAzMjAsCi0JV19DSUYJPSAzNTIsCi0JV19WR0EJPSA2NDAsCi0JV19TVkdBCT0gODAwLAotCVdfWEdBCT0gMTAyNCwKLQlXX1NYR0EJPSAxMjgwLAotCVdfVVhHQQk9IDE2MDAsCi19OwotCi1lbnVtIG92MjY0MF9oZWlnaHQgewotCUhfUUNJRgk9IDE0NCwKLQlIX1FWR0EJPSAyNDAsCi0JSF9DSUYJPSAyODgsCi0JSF9WR0EJPSA0ODAsCi0JSF9TVkdBCT0gNjAwLAotCUhfWEdBCT0gNzY4LAotCUhfU1hHQQk9IDEwMjQsCi0JSF9VWEdBCT0gMTIwMCwKLX07Ci0KIHN0cnVjdCBvdjI2NDBfd2luX3NpemUgewogCWNoYXIJCQkJKm5hbWU7Ci0JZW51bSBvdjI2NDBfd2lkdGgJCXdpZHRoOwotCWVudW0gb3YyNjQwX2hlaWdodAkJaGVpZ2h0OworCXUzMgkJCQl3aWR0aDsKKwl1MzIJCQkJaGVpZ2h0OwogCWNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdAkqcmVnczsKIH07CiAKQEAgLTQ5NSwxNyArNDczLDE3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0IG92MjY0MF9zaXplX2NoYW5nZV9wcmVhbWJsZV9yZWdzW10gPSB7CiAJeyBCQU5LX1NFTCwgQkFOS19TRUxfRFNQIH0sCiAJeyBSRVNFVCwgUkVTRVRfRFZQIH0sCi0JeyBIU0laRTgsIEhTSVpFOF9TRVQoV19VWEdBKSB9LAotCXsgVlNJWkU4LCBWU0laRThfU0VUKEhfVVhHQSkgfSwKKwl7IEhTSVpFOCwgSFNJWkU4X1NFVChVWEdBX1dJRFRIKSB9LAorCXsgVlNJWkU4LCBWU0laRThfU0VUKFVYR0FfSEVJR0hUKSB9LAogCXsgQ1RSTDIsIENUUkwyX0RDV19FTiB8IENUUkwyX1NERV9FTiB8CiAJCSBDVFJMMl9VVl9BVkdfRU4gfCBDVFJMMl9DTVhfRU4gfCBDVFJMMl9VVl9BREpfRU4gfSwKLQl7IEhTSVpFLCBIU0laRV9TRVQoV19VWEdBKSB9LAotCXsgVlNJWkUsIFZTSVpFX1NFVChIX1VYR0EpIH0sCisJeyBIU0laRSwgSFNJWkVfU0VUKFVYR0FfV0lEVEgpIH0sCisJeyBWU0laRSwgVlNJWkVfU0VUKFVYR0FfSEVJR0hUKSB9LAogCXsgWE9GRkwsIFhPRkZMX1NFVCgwKSB9LAogCXsgWU9GRkwsIFlPRkZMX1NFVCgwKSB9LAotCXsgVkhZWCwgVkhZWF9IU0laRV9TRVQoV19VWEdBKSB8IFZIWVhfVlNJWkVfU0VUKEhfVVhHQSkgfAorCXsgVkhZWCwgVkhZWF9IU0laRV9TRVQoVVhHQV9XSURUSCkgfCBWSFlYX1ZTSVpFX1NFVChVWEdBX0hFSUdIVCkgfAogCQlWSFlYX1hPRkZfU0VUKDApIHwgVkhZWF9ZT0ZGX1NFVCgwKX0sCi0JeyBURVNULCBURVNUX0hTSVpFX1NFVChXX1VYR0EpIH0sCisJeyBURVNULCBURVNUX0hTSVpFX1NFVChVWEdBX1dJRFRIKSB9LAogCUVORE1BUktFUiwKIH07CiAKQEAgLTUxOSw0NSArNDk3LDQ1IEBACiAJeyBSRVNFVCwgMHgwMH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCBvdjI2NDBfcWNpZl9yZWdzW10gPSB7Ci0JUEVSX1NJWkVfUkVHX1NFUShXX1FDSUYsIEhfUUNJRiwgMywgMywgNCksCisJUEVSX1NJWkVfUkVHX1NFUShRQ0lGX1dJRFRILCBRQ0lGX0hFSUdIVCwgMywgMywgNCksCiAJRU5ETUFSS0VSLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCBvdjI2NDBfcXZnYV9yZWdzW10gPSB7Ci0JUEVSX1NJWkVfUkVHX1NFUShXX1FWR0EsIEhfUVZHQSwgMiwgMiwgNCksCisJUEVSX1NJWkVfUkVHX1NFUShRVkdBX1dJRFRILCBRVkdBX0hFSUdIVCwgMiwgMiwgNCksCiAJRU5ETUFSS0VSLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCBvdjI2NDBfY2lmX3JlZ3NbXSA9IHsKLQlQRVJfU0laRV9SRUdfU0VRKFdfQ0lGLCBIX0NJRiwgMiwgMiwgOCksCisJUEVSX1NJWkVfUkVHX1NFUShDSUZfV0lEVEgsIENJRl9IRUlHSFQsIDIsIDIsIDgpLAogCUVORE1BUktFUiwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3YyNjQwX3ZnYV9yZWdzW10gPSB7Ci0JUEVSX1NJWkVfUkVHX1NFUShXX1ZHQSwgSF9WR0EsIDAsIDAsIDIpLAorCVBFUl9TSVpFX1JFR19TRVEoVkdBX1dJRFRILCBWR0FfSEVJR0hULCAwLCAwLCAyKSwKIAlFTkRNQVJLRVIsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0IG92MjY0MF9zdmdhX3JlZ3NbXSA9IHsKLQlQRVJfU0laRV9SRUdfU0VRKFdfU1ZHQSwgSF9TVkdBLCAxLCAxLCAyKSwKKwlQRVJfU0laRV9SRUdfU0VRKFNWR0FfV0lEVEgsIFNWR0FfSEVJR0hULCAxLCAxLCAyKSwKIAlFTkRNQVJLRVIsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0IG92MjY0MF94Z2FfcmVnc1tdID0gewotCVBFUl9TSVpFX1JFR19TRVEoV19YR0EsIEhfWEdBLCAwLCAwLCAyKSwKKwlQRVJfU0laRV9SRUdfU0VRKFhHQV9XSURUSCwgWEdBX0hFSUdIVCwgMCwgMCwgMiksCiAJeyBDVFJMSSwgICAgMHgwMH0sCiAJRU5ETUFSS0VSLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCBvdjI2NDBfc3hnYV9yZWdzW10gPSB7Ci0JUEVSX1NJWkVfUkVHX1NFUShXX1NYR0EsIEhfU1hHQSwgMCwgMCwgMiksCisJUEVSX1NJWkVfUkVHX1NFUShTWEdBX1dJRFRILCBTWEdBX0hFSUdIVCwgMCwgMCwgMiksCiAJeyBDVFJMSSwgICAgMHgwMH0sCiAJeyBSX0RWUF9TUCwgMiB8IFJfRFZQX1NQX0FVVE9fTU9ERSB9LAogCUVORE1BUktFUiwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3YyNjQwX3V4Z2FfcmVnc1tdID0gewotCVBFUl9TSVpFX1JFR19TRVEoV19VWEdBLCBIX1VYR0EsIDAsIDAsIDApLAorCVBFUl9TSVpFX1JFR19TRVEoVVhHQV9XSURUSCwgVVhHQV9IRUlHSFQsIDAsIDAsIDApLAogCXsgQ1RSTEksICAgIDB4MDB9LAogCXsgUl9EVlBfU1AsIDAgfCBSX0RWUF9TUF9BVVRPX01PREUgfSwKIAlFTkRNQVJLRVIsCkBAIC01NjcsMTQgKzU0NSwxNCBAQAogCXsubmFtZSA9IG4sIC53aWR0aCA9IHcgLCAuaGVpZ2h0ID0gaCwgLnJlZ3MgPSByIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvdjI2NDBfd2luX3NpemUgb3YyNjQwX3N1cHBvcnRlZF93aW5fc2l6ZXNbXSA9IHsKLQlPVjI2NDBfU0laRSgiUUNJRiIsIFdfUUNJRiwgSF9RQ0lGLCBvdjI2NDBfcWNpZl9yZWdzKSwKLQlPVjI2NDBfU0laRSgiUVZHQSIsIFdfUVZHQSwgSF9RVkdBLCBvdjI2NDBfcXZnYV9yZWdzKSwKLQlPVjI2NDBfU0laRSgiQ0lGIiwgV19DSUYsIEhfQ0lGLCBvdjI2NDBfY2lmX3JlZ3MpLAotCU9WMjY0MF9TSVpFKCJWR0EiLCBXX1ZHQSwgSF9WR0EsIG92MjY0MF92Z2FfcmVncyksCi0JT1YyNjQwX1NJWkUoIlNWR0EiLCBXX1NWR0EsIEhfU1ZHQSwgb3YyNjQwX3N2Z2FfcmVncyksCi0JT1YyNjQwX1NJWkUoIlhHQSIsIFdfWEdBLCBIX1hHQSwgb3YyNjQwX3hnYV9yZWdzKSwKLQlPVjI2NDBfU0laRSgiU1hHQSIsIFdfU1hHQSwgSF9TWEdBLCBvdjI2NDBfc3hnYV9yZWdzKSwKLQlPVjI2NDBfU0laRSgiVVhHQSIsIFdfVVhHQSwgSF9VWEdBLCBvdjI2NDBfdXhnYV9yZWdzKSwKKwlPVjI2NDBfU0laRSgiUUNJRiIsIFFDSUZfV0lEVEgsIFFDSUZfSEVJR0hULCBvdjI2NDBfcWNpZl9yZWdzKSwKKwlPVjI2NDBfU0laRSgiUVZHQSIsIFFWR0FfV0lEVEgsIFFWR0FfSEVJR0hULCBvdjI2NDBfcXZnYV9yZWdzKSwKKwlPVjI2NDBfU0laRSgiQ0lGIiwgQ0lGX1dJRFRILCBDSUZfSEVJR0hULCBvdjI2NDBfY2lmX3JlZ3MpLAorCU9WMjY0MF9TSVpFKCJWR0EiLCBWR0FfV0lEVEgsIFZHQV9IRUlHSFQsIG92MjY0MF92Z2FfcmVncyksCisJT1YyNjQwX1NJWkUoIlNWR0EiLCBTVkdBX1dJRFRILCBTVkdBX0hFSUdIVCwgb3YyNjQwX3N2Z2FfcmVncyksCisJT1YyNjQwX1NJWkUoIlhHQSIsIFhHQV9XSURUSCwgWEdBX0hFSUdIVCwgb3YyNjQwX3hnYV9yZWdzKSwKKwlPVjI2NDBfU0laRSgiU1hHQSIsIFNYR0FfV0lEVEgsIFNYR0FfSEVJR0hULCBvdjI2NDBfc3hnYV9yZWdzKSwKKwlPVjI2NDBfU0laRSgiVVhHQSIsIFVYR0FfV0lEVEgsIFVYR0FfSEVJR0hULCBvdjI2NDBfdXhnYV9yZWdzKSwKIH07CiAKIC8qCkBAIC04NjcsNyArODQ1LDcgQEAKIAlzdHJ1Y3Qgb3YyNjQwX3ByaXYgKnByaXYgPSB0b19vdjI2NDAoY2xpZW50KTsKIAogCWlmICghcHJpdi0+d2luKSB7Ci0JCXUzMiB3aWR0aCA9IFdfU1ZHQSwgaGVpZ2h0ID0gSF9TVkdBOworCQl1MzIgd2lkdGggPSBTVkdBX1dJRFRILCBoZWlnaHQgPSBTVkdBX0hFSUdIVDsKIAkJcHJpdi0+d2luID0gb3YyNjQwX3NlbGVjdF93aW4oJndpZHRoLCAmaGVpZ2h0KTsKIAkJcHJpdi0+Y2ZtdF9jb2RlID0gTUVESUFfQlVTX0ZNVF9VWVZZOF8yWDg7CiAJfQpAQCAtOTU0LDggKzkzMiw4IEBACiB7CiAJYS0+Yy5sZWZ0CT0gMDsKIAlhLT5jLnRvcAk9IDA7Ci0JYS0+Yy53aWR0aAk9IFdfVVhHQTsKLQlhLT5jLmhlaWdodAk9IEhfVVhHQTsKKwlhLT5jLndpZHRoCT0gVVhHQV9XSURUSDsKKwlhLT5jLmhlaWdodAk9IFVYR0FfSEVJR0hUOwogCWEtPnR5cGUJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCiAJcmV0dXJuIDA7CkBAIC05NjUsOCArOTQzLDggQEAKIHsKIAlhLT5ib3VuZHMubGVmdAkJCT0gMDsKIAlhLT5ib3VuZHMudG9wCQkJPSAwOwotCWEtPmJvdW5kcy53aWR0aAkJCT0gV19VWEdBOwotCWEtPmJvdW5kcy5oZWlnaHQJCT0gSF9VWEdBOworCWEtPmJvdW5kcy53aWR0aAkJCT0gVVhHQV9XSURUSDsKKwlhLT5ib3VuZHMuaGVpZ2h0CQk9IFVYR0FfSEVJR0hUOwogCWEtPmRlZnJlY3QJCQk9IGEtPmJvdW5kczsKIAlhLT50eXBlCQkJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWEtPnBpeGVsYXNwZWN0Lm51bWVyYXRvcgk9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2kyYy90aHM4MjAwLmMgYi9kcml2ZXJzL21lZGlhL2kyYy90aHM4MjAwLmMKaW5kZXggNjU2ZDg4OS4uNGViZDMyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9pMmMvdGhzODIwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvaTJjL3RoczgyMDAuYwpAQCAtNTgsMjEgKzU4LDExIEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHRoczgyMDBfc3RhdGUsIHNkKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBoYmxhbmtpbmcoY29uc3Qgc3RydWN0IHY0bDJfYnRfdGltaW5ncyAqdCkKLXsKLQlyZXR1cm4gVjRMMl9EVl9CVF9CTEFOS0lOR19XSURUSCh0KTsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBodG90YWwoY29uc3Qgc3RydWN0IHY0bDJfYnRfdGltaW5ncyAqdCkKIHsKIAlyZXR1cm4gVjRMMl9EVl9CVF9GUkFNRV9XSURUSCh0KTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCB2YmxhbmtpbmcoY29uc3Qgc3RydWN0IHY0bDJfYnRfdGltaW5ncyAqdCkKLXsKLQlyZXR1cm4gVjRMMl9EVl9CVF9CTEFOS0lOR19IRUlHSFQodCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgdnRvdGFsKGNvbnN0IHN0cnVjdCB2NGwyX2J0X3RpbWluZ3MgKnQpCiB7CiAJcmV0dXJuIFY0TDJfRFZfQlRfRlJBTUVfSEVJR0hUKHQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9tbWMvc2lhbm8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvbW1jL3NpYW5vL0tjb25maWcKaW5kZXggYWEwNWFkMy4uNzY5MzQ4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9tbWMvc2lhbm8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL21tYy9zaWFuby9LY29uZmlnCkBAIC02LDYgKzYsOCBAQAogCXRyaXN0YXRlICJTaWFubyBTTVMxeHh4IGJhc2VkIE1EVFYgdmlhIFNESU8gaW50ZXJmYWNlIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSEFTX0RNQQogCWRlcGVuZHMgb24gTU1DCisJZGVwZW5kcyBvbiAhUkNfQ09SRSB8fCBSQ19DT1JFCiAJc2VsZWN0IE1FRElBX0NPTU1PTl9PUFRJT05TCisJc2VsZWN0IFNNU19TSUFOT19NRFRWCiAJLS0taGVscC0tLQogCSAgQ2hvb3NlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUgU2lhbm8ncyBzdXBwb3J0IGZvciBTRElPIGludGVyZmFjZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L0tjb25maWcKaW5kZXggNjFkMDllMC4uNGE5M2Y2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9LY29uZmlnCkBAIC0yLDE1ICsyLDE3IEBACiAJdHJpc3RhdGUgIkJUODQ4IFZpZGVvIEZvciBMaW51eCIKIAlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBQQ0kgJiYgSTJDICYmIFZJREVPX1Y0TDIKIAlzZWxlY3QgSTJDX0FMR09CSVQKLQlzZWxlY3QgVklERU9fQlRDWAogCXNlbGVjdCBWSURFT0JVRl9ETUFfU0cKIAlkZXBlbmRzIG9uIFJDX0NPUkUKKwlkZXBlbmRzIG9uIE1FRElBX1JBRElPX1NVUFBPUlQKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgVklERU9fVFZFRVBST00KIAlzZWxlY3QgVklERU9fTVNQMzQwMCBpZiBNRURJQV9TVUJEUlZfQVVUT1NFTEVDVAogCXNlbGVjdCBWSURFT19UVkFVRElPIGlmIE1FRElBX1NVQkRSVl9BVVRPU0VMRUNUCiAJc2VsZWN0IFZJREVPX1REQTc0MzIgaWYgTUVESUFfU1VCRFJWX0FVVE9TRUxFQ1QKIAlzZWxlY3QgVklERU9fU0FBNjU4OCBpZiBNRURJQV9TVUJEUlZfQVVUT1NFTEVDVAorCXNlbGVjdCBSQURJT19BREFQVEVSUworCXNlbGVjdCBSQURJT19URUE1NzVYCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgQlQ4NDggYmFzZWQgZnJhbWUgZ3JhYmJlci9vdmVybGF5IGJvYXJkcy4gVGhpcyBpbmNsdWRlcwogCSAgdGhlIE1pcm8sIEhhdXBwYXVnZSBhbmQgU1RCIGJvYXJkcy4gUGxlYXNlIHJlYWQgdGhlIG1hdGVyaWFsIGluCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L01ha2VmaWxlCmluZGV4IGY5ZmU3YzQuLjJkNGMzZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L01ha2VmaWxlCkBAIC0xLDYgKzEsNiBAQAogYnR0di1vYmpzICAgICAgOj0gICAgICBidHR2LWRyaXZlci5vIGJ0dHYtY2FyZHMubyBidHR2LWlmLm8gXAogCQkgICAgICAgYnR0di1yaXNjLm8gYnR0di12YmkubyBidHR2LWkyYy5vIGJ0dHYtZ3Bpby5vIFwKLQkJICAgICAgIGJ0dHYtaW5wdXQubyBidHR2LWF1ZGlvLWhvb2subworCQkgICAgICAgYnR0di1pbnB1dC5vIGJ0dHYtYXVkaW8taG9vay5vIGJ0Y3gtcmlzYy5vCiAKIG9iai0kKENPTkZJR19WSURFT19CVDg0OCkgKz0gYnR0di5vCiBvYmotJChDT05GSUdfRFZCX0JUOFhYKSArPSBidDg3OC5vIGR2Yi1idDh4eC5vIGRzdC5vIGRzdF9jYS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idDg3OC5jIGIvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvYnQ4NzguYwppbmRleCAxMTc2NTgzLi4wOTM5ZDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idDg3OC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L2J0ODc4LmMKQEAgLTU5MCw5ICs1OTAsMyBAQAogbW9kdWxlX2V4aXQoYnQ4NzhfY2xlYW51cF9tb2R1bGUpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9idGN4LXJpc2MuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L2J0Y3gtcmlzYy5jCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvY29tbW9uL2J0Y3gtcmlzYy5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idGN4LXJpc2MuYwppbmRleCBhYzFiMjY4Li4wMGYwODgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9idGN4LXJpc2MuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idGN4LXJpc2MuYwpAQCAtMzIsMTMgKzMyLDkgQEAKIAogI2luY2x1ZGUgImJ0Y3gtcmlzYy5oIgogCi1NT0RVTEVfREVTQ1JJUFRJT04oInNvbWUgY29kZSBzaGFyZWQgYnkgYnR0diBhbmQgY3g4OHh4IGRyaXZlcnMiKTsKLU1PRFVMRV9BVVRIT1IoIkdlcmQgS25vcnIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBkZWJ1ZzsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsImRlYnVnIG1lc3NhZ2VzLCBkZWZhdWx0IGlzIDAgKG5vKSIpOworc3RhdGljIHVuc2lnbmVkIGludCBidGN4X2RlYnVnOworbW9kdWxlX3BhcmFtKGJ0Y3hfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGJ0Y3hfZGVidWcsImRlYnVnIG1lc3NhZ2VzLCBkZWZhdWx0IGlzIDAgKG5vKSIpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBhbGxvY2F0ZS9mcmVlIHJpc2MgbWVtb3J5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC01MCw3ICs0Niw3IEBACiB7CiAJaWYgKE5VTEwgPT0gcmlzYy0+Y3B1KQogCQlyZXR1cm47Ci0JaWYgKGRlYnVnKSB7CisJaWYgKGJ0Y3hfZGVidWcpIHsKIAkJbWVtY250LS07CiAJCXByaW50aygiYnRjeDogcmlzY21lbSBmcmVlIFslZF0gZG1hPSVseFxuIiwKIAkJICAgICAgIG1lbWNudCwgKHVuc2lnbmVkIGxvbmcpcmlzYy0+ZG1hKTsKQEAgLTc1LDcgKzcxLDcgQEAKIAkJcmlzYy0+Y3B1ICA9IGNwdTsKIAkJcmlzYy0+ZG1hICA9IGRtYTsKIAkJcmlzYy0+c2l6ZSA9IHNpemU7Ci0JCWlmIChkZWJ1ZykgeworCQlpZiAoYnRjeF9kZWJ1ZykgewogCQkJbWVtY250Kys7CiAJCQlwcmludGsoImJ0Y3g6IHJpc2NtZW0gYWxsb2MgWyVkXSBkbWE9JWx4IGNwdT0lcCBzaXplPSVkXG4iLAogCQkJICAgICAgIG1lbWNudCwgKHVuc2lnbmVkIGxvbmcpZG1hLCBjcHUsIHNpemUpOwpAQCAtMTQxLDcgKzEzNyw3IEBACiAJZHggPSBueCAtIHdpbi0+bGVmdDsKIAl3aW4tPmxlZnQgID0gbng7CiAJd2luLT53aWR0aCA9IG53OwotCWlmIChkZWJ1ZykKKwlpZiAoYnRjeF9kZWJ1ZykKIAkJcHJpbnRrKEtFUk5fREVCVUcgImJ0Y3g6IHdpbmRvdyBhbGlnbiAlZHglZCslZCslZCBbZHg9JWRdXG4iLAogCQkgICAgICAgd2luLT53aWR0aCwgd2luLT5oZWlnaHQsIHdpbi0+bGVmdCwgd2luLT50b3AsIGR4KTsKIApAQCAtMTUzLDcgKzE0OSw3IEBACiAJCQludyArPSBtYXNrKzE7CiAJCWNsaXBzW2ldLmMubGVmdCAgPSBueDsKIAkJY2xpcHNbaV0uYy53aWR0aCA9IG53OwotCQlpZiAoZGVidWcpCisJCWlmIChidGN4X2RlYnVnKQogCQkJcHJpbnRrKEtFUk5fREVCVUcgImJ0Y3g6ICAgY2xpcCBhbGlnbiAlZHglZCslZCslZFxuIiwKIAkJCSAgICAgICBjbGlwc1tpXS5jLndpZHRoLCBjbGlwc1tpXS5jLmhlaWdodCwKIAkJCSAgICAgICBjbGlwc1tpXS5jLmxlZnQsIGNsaXBzW2ldLmMudG9wKTsKQEAgLTIzNCw3ICsyMzAsNyBAQAogCSpuc2tpcHMgPSBza2lwOwogCSptYXh5ID0gbWF4bGluZTsKIAotCWlmIChkZWJ1ZykgeworCWlmIChidGN4X2RlYnVnKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJidGN4OiBza2lwcyBsaW5lICVkLSVkOiIsbGluZSxtYXhsaW5lKTsKIAkJZm9yIChza2lwID0gMDsgc2tpcCA8ICpuc2tpcHM7IHNraXArKykgewogCQkJcHJpbnRrKCIgJWQtJWQiLHNraXBzW3NraXBdLnN0YXJ0LHNraXBzW3NraXBdLmVuZCk7CkBAIC0yNDIsMTkgKzIzOCwzIEBACiAJCXByaW50aygiXG4iKTsKIAl9CiB9Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotRVhQT1JUX1NZTUJPTChidGN4X3Jpc2NtZW1fYWxsb2MpOwotRVhQT1JUX1NZTUJPTChidGN4X3Jpc2NtZW1fZnJlZSk7Ci0KLUVYUE9SVF9TWU1CT0woYnRjeF9zY3JlZW5fY2xpcHMpOwotRVhQT1JUX1NZTUJPTChidGN4X2FsaWduKTsKLUVYUE9SVF9TWU1CT0woYnRjeF9zb3J0X2NsaXBzKTsKLUVYUE9SVF9TWU1CT0woYnRjeF9jYWxjX3NraXBzKTsKLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L2J0Y3gtcmlzYy5oIGIvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvYnRjeC1yaXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkN2EwMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L2J0Y3gtcmlzYy5oCkBAIC0wLDAgKzEsMjYgQEAKK3N0cnVjdCBidGN4X3Jpc2NtZW0geworCXVuc2lnbmVkIGludCAgIHNpemU7CisJX19sZTMyICAgICAgICAgKmNwdTsKKwlfX2xlMzIgICAgICAgICAqam1wOworCWRtYV9hZGRyX3QgICAgIGRtYTsKK307CisKK3N0cnVjdCBidGN4X3NraXBsaXN0IHsKKwlpbnQgc3RhcnQ7CisJaW50IGVuZDsKK307CisKK2ludCAgYnRjeF9yaXNjbWVtX2FsbG9jKHN0cnVjdCBwY2lfZGV2ICpwY2ksCisJCQlzdHJ1Y3QgYnRjeF9yaXNjbWVtICpyaXNjLAorCQkJdW5zaWduZWQgaW50IHNpemUpOwordm9pZCBidGN4X3Jpc2NtZW1fZnJlZShzdHJ1Y3QgcGNpX2RldiAqcGNpLAorCQkgICAgICAgc3RydWN0IGJ0Y3hfcmlzY21lbSAqcmlzYyk7CisKK2ludCBidGN4X3NjcmVlbl9jbGlwcyhpbnQgc3dpZHRoLCBpbnQgc2hlaWdodCwgc3RydWN0IHY0bDJfcmVjdCAqd2luLAorCQkgICAgICBzdHJ1Y3QgdjRsMl9jbGlwICpjbGlwcywgdW5zaWduZWQgaW50IG4pOworaW50IGJ0Y3hfYWxpZ24oc3RydWN0IHY0bDJfcmVjdCAqd2luLCBzdHJ1Y3QgdjRsMl9jbGlwICpjbGlwcywKKwkgICAgICAgdW5zaWduZWQgaW50IG4sIGludCBtYXNrKTsKK3ZvaWQgYnRjeF9zb3J0X2NsaXBzKHN0cnVjdCB2NGwyX2NsaXAgKmNsaXBzLCB1bnNpZ25lZCBpbnQgbmNsaXBzKTsKK3ZvaWQgYnRjeF9jYWxjX3NraXBzKGludCBsaW5lLCBpbnQgd2lkdGgsIGludCAqbWF4eSwKKwkJICAgICBzdHJ1Y3QgYnRjeF9za2lwbGlzdCAqc2tpcHMsIHVuc2lnbmVkIGludCAqbnNraXBzLAorCQkgICAgIGNvbnN0IHN0cnVjdCB2NGwyX2NsaXAgKmNsaXBzLCB1bnNpZ25lZCBpbnQgbmNsaXBzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L2J0dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L2J0dHYtY2FyZHMuYwppbmRleCA0MTA1NTYwLi40NjU0ZmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idHR2LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvYnR0di1jYXJkcy5jCkBAIC04NCw4ICs4NCw3IEBACiBzdGF0aWMgdm9pZCB0ZDMxMTZfbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCk7CiAKIHN0YXRpYyBpbnQgdGVycmF0ZWNfYWN0aXZlX3JhZGlvX3VwZ3JhZGUoc3RydWN0IGJ0dHYgKmJ0dik7Ci1zdGF0aWMgaW50IHRlYTU3NTdfcmVhZChzdHJ1Y3QgYnR0diAqYnR2KTsKLXN0YXRpYyBpbnQgdGVhNTc1N193cml0ZShzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgdmFsdWUpOworc3RhdGljIGludCB0ZWE1NzV4X2luaXQoc3RydWN0IGJ0dHYgKmJ0dik7CiBzdGF0aWMgdm9pZCBpZGVudGlmeV9ieV9lZXByb20oc3RydWN0IGJ0dHYgKmJ0diwKIAkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGVlcHJvbV9kYXRhWzI1Nl0pOwogc3RhdGljIGludCBwdnJfYm9vdChzdHJ1Y3QgYnR0diAqYnR2KTsKQEAgLTMwODUsMTIgKzMwODQsMTIgQEAKIAkJaWYgKDAgPT0gKGdwaW8gJiAweDIwKSkgewogCQkJYnR2LT5oYXNfcmFkaW8gPSAxOwogCQkJaWYgKCFtaXJvX2ZtdHVuZXJbaWRdKSB7Ci0JCQkJYnR2LT5oYXNfbWF0Y2hib3ggPSAxOwotCQkJCWJ0di0+bWJveF93ZSAgICA9ICgxPDw2KTsKLQkJCQlidHYtPm1ib3hfbW9zdCAgPSAoMTw8Nyk7Ci0JCQkJYnR2LT5tYm94X2NsayAgID0gKDE8PDgpOwotCQkJCWJ0di0+bWJveF9kYXRhICA9ICgxPDw5KTsKLQkJCQlidHYtPm1ib3hfbWFzayAgPSAoMTw8Nil8KDE8PDcpfCgxPDw4KXwoMTw8OSk7CisJCQkJYnR2LT5oYXNfdGVhNTc1eCA9IDE7CisJCQkJYnR2LT50ZWFfZ3Bpby53cmVuID0gNjsKKwkJCQlidHYtPnRlYV9ncGlvLm1vc3QgPSA3OworCQkJCWJ0di0+dGVhX2dwaW8uY2xrICA9IDg7CisJCQkJYnR2LT50ZWFfZ3Bpby5kYXRhID0gOTsKKwkJCQl0ZWE1NzV4X2luaXQoYnR2KTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWJ0di0+aGFzX3JhZGlvID0gMDsKQEAgLTMxMDQsNyArMzEwMyw3IEBACiAJCXByX2luZm8oIiVkOiBtaXJvOiBpZD0lZCB0dW5lcj0lZCByYWRpbz0lcyBzdGVyZW89JXNcbiIsCiAJCQlidHYtPmMubnIsIGlkKzEsIGJ0di0+dHVuZXJfdHlwZSwKIAkJCSFidHYtPmhhc19yYWRpbyA/ICJubyIgOgotCQkJKGJ0di0+aGFzX21hdGNoYm94ID8gIm1hdGNoYm94IiA6ICJmbXR1bmVyIiksCisJCQkoYnR2LT5oYXNfdGVhNTc1eCA/ICJ0ZWE1NzV4IiA6ICJmbXR1bmVyIiksCiAJCQkoLTEgPT0gbXNwKSA/ICJubyIgOiAieWVzIik7CiAJfSBlbHNlIHsKIAkJLyogbmV3IGNhcmRzIHdpdGggbWljcm90dW5lIHR1bmVyICovCkBAIC0zMzgyLDEyICszMzgxLDEyIEBACiAJCWJyZWFrOwogCWNhc2UgQlRUVl9CT0FSRF9WSFg6CiAJCWJ0di0+aGFzX3JhZGlvICAgID0gMTsKLQkJYnR2LT5oYXNfbWF0Y2hib3ggPSAxOwotCQlidHYtPm1ib3hfd2UgICAgICA9IDB4MjA7Ci0JCWJ0di0+bWJveF9tb3N0ICAgID0gMDsKLQkJYnR2LT5tYm94X2NsayAgICAgPSAweDA4OwotCQlidHYtPm1ib3hfZGF0YSAgICA9IDB4MTA7Ci0JCWJ0di0+bWJveF9tYXNrICAgID0gMHgzODsKKwkJYnR2LT5oYXNfdGVhNTc1eCAgPSAxOworCQlidHYtPnRlYV9ncGlvLndyZW4gPSA1OworCQlidHYtPnRlYV9ncGlvLm1vc3QgPSA2OworCQlidHYtPnRlYV9ncGlvLmNsayAgPSAzOworCQlidHYtPnRlYV9ncGlvLmRhdGEgPSA0OworCQl0ZWE1NzV4X2luaXQoYnR2KTsKIAkJYnJlYWs7CiAJY2FzZSBCVFRWX0JPQVJEX1ZPQklTX0JPT1NUQVI6CiAJY2FzZSBCVFRWX0JPQVJEX1RFUlJBVFY6CkBAIC0zNzQ1LDMzICszNzQ0LDExMiBAQAogCQlidHYtPnJhZGlvX3VzZXNfbXNwX2RlbW9kdWxhdG9yID0gMTsKIH0KIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQgYnR0dl90ZWE1NzV4X3NldF9waW5zKHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhLCB1OCBwaW5zKQoreworCXN0cnVjdCBidHR2ICpidHYgPSB0ZWEtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYnR0dl90ZWE1NzV4X2dwaW8gZ3BpbyA9IGJ0di0+dGVhX2dwaW87CisJdTE2IHZhbCA9IDA7CisKKwl2YWwgfD0gKHBpbnMgJiBURUE1NzVYX0RBVEEpID8gKDEgPDwgZ3Bpby5kYXRhKSA6IDA7CisJdmFsIHw9IChwaW5zICYgVEVBNTc1WF9DTEspICA/ICgxIDw8IGdwaW8uY2xrKSAgOiAwOworCXZhbCB8PSAocGlucyAmIFRFQTU3NVhfV1JFTikgPyAoMSA8PCBncGlvLndyZW4pIDogMDsKKworCWdwaW9fYml0cygoMSA8PCBncGlvLmRhdGEpIHwgKDEgPDwgZ3Bpby5jbGspIHwgKDEgPDwgZ3Bpby53cmVuKSwgdmFsKTsKKwlpZiAoYnR2LT5tYm94X2lvcikgeworCQkvKiBJT1cgYW5kIENTRUwgYWN0aXZlICovCisJCWdwaW9fYml0cyhidHYtPm1ib3hfaW93IHwgYnR2LT5tYm94X2NzZWwsIDApOworCQl1ZGVsYXkoNSk7CisJCS8qIGFsbCBpbmFjdGl2ZSAqLworCQlncGlvX2JpdHMoYnR2LT5tYm94X2lvciB8IGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCwKKwkJCSAgYnR2LT5tYm94X2lvciB8IGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCk7CisJfQorfQorCitzdGF0aWMgdTggYnR0dl90ZWE1NzV4X2dldF9waW5zKHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhKQoreworCXN0cnVjdCBidHR2ICpidHYgPSB0ZWEtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYnR0dl90ZWE1NzV4X2dwaW8gZ3BpbyA9IGJ0di0+dGVhX2dwaW87CisJdTggcmV0ID0gMDsKKwl1MTYgdmFsOworCisJaWYgKGJ0di0+bWJveF9pb3IpIHsKKwkJLyogSU9SIGFuZCBDU0VMIGFjdGl2ZSAqLworCQlncGlvX2JpdHMoYnR2LT5tYm94X2lvciB8IGJ0di0+bWJveF9jc2VsLCAwKTsKKwkJdWRlbGF5KDUpOworCX0KKwl2YWwgPSBncGlvX3JlYWQoKTsKKwlpZiAoYnR2LT5tYm94X2lvcikgeworCQkvKiBhbGwgaW5hY3RpdmUgKi8KKwkJZ3Bpb19iaXRzKGJ0di0+bWJveF9pb3IgfCBidHYtPm1ib3hfaW93IHwgYnR2LT5tYm94X2NzZWwsCisJCQkgIGJ0di0+bWJveF9pb3IgfCBidHYtPm1ib3hfaW93IHwgYnR2LT5tYm94X2NzZWwpOworCX0KKworCWlmICh2YWwgJiAoMSA8PCBncGlvLmRhdGEpKQorCQlyZXQgfD0gVEVBNTc1WF9EQVRBOworCWlmICh2YWwgJiAoMSA8PCBncGlvLm1vc3QpKQorCQlyZXQgfD0gVEVBNTc1WF9NT1NUOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgYnR0dl90ZWE1NzV4X3NldF9kaXJlY3Rpb24oc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEsIGJvb2wgb3V0cHV0KQoreworCXN0cnVjdCBidHR2ICpidHYgPSB0ZWEtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYnR0dl90ZWE1NzV4X2dwaW8gZ3BpbyA9IGJ0di0+dGVhX2dwaW87CisJdTMyIG1hc2sgPSAoMSA8PCBncGlvLmNsaykgfCAoMSA8PCBncGlvLndyZW4pIHwgKDEgPDwgZ3Bpby5kYXRhKSB8CisJCSAgICgxIDw8IGdwaW8ubW9zdCk7CisKKwlpZiAob3V0cHV0KQorCQlncGlvX2lub3V0KG1hc2ssICgxIDw8IGdwaW8uZGF0YSkgfCAoMSA8PCBncGlvLmNsaykgfAorCQkJCSAoMSA8PCBncGlvLndyZW4pKTsKKwllbHNlCisJCWdwaW9faW5vdXQobWFzaywgKDEgPDwgZ3Bpby5jbGspIHwgKDEgPDwgZ3Bpby53cmVuKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3RlYTU3NXhfb3BzIGJ0dHZfdGVhX29wcyA9IHsKKwkuc2V0X3BpbnMgPSBidHR2X3RlYTU3NXhfc2V0X3BpbnMsCisJLmdldF9waW5zID0gYnR0dl90ZWE1NzV4X2dldF9waW5zLAorCS5zZXRfZGlyZWN0aW9uID0gYnR0dl90ZWE1NzV4X3NldF9kaXJlY3Rpb24sCit9OworCitzdGF0aWMgaW50IHRlYTU3NXhfaW5pdChzdHJ1Y3QgYnR0diAqYnR2KQoreworCWJ0di0+dGVhLnByaXZhdGVfZGF0YSA9IGJ0djsKKwlidHYtPnRlYS5vcHMgPSAmYnR0dl90ZWFfb3BzOworCWlmICghc25kX3RlYTU3NXhfaHdfaW5pdCgmYnR2LT50ZWEpKSB7CisJCXByX2luZm8oIiVkOiBkZXRlY3RlZCBURUE1NzV4IHJhZGlvXG4iLCBidHYtPmMubnIpOworCQlidHYtPnRlYS5tdXRlID0gZmFsc2U7CisJCXJldHVybiAwOworCX0KKworCWJ0di0+aGFzX3RlYTU3NXggPSAwOworCWJ0di0+aGFzX3JhZGlvID0gMDsKKworCXJldHVybiAtRU5PREVWOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCiBzdGF0aWMgaW50IHRlcnJhdGVjX2FjdGl2ZV9yYWRpb191cGdyYWRlKHN0cnVjdCBidHR2ICpidHYpCiB7Ci0JaW50IGZyZXE7Ci0KIAlidHYtPmhhc19yYWRpbyAgICA9IDE7Ci0JYnR2LT5oYXNfbWF0Y2hib3ggPSAxOwotCWJ0di0+bWJveF93ZSAgICAgID0gMHgxMDsKLQlidHYtPm1ib3hfbW9zdCAgICA9IDB4MjA7Ci0JYnR2LT5tYm94X2NsayAgICAgPSAweDA4OwotCWJ0di0+bWJveF9kYXRhICAgID0gMHgwNDsKLQlidHYtPm1ib3hfbWFzayAgICA9IDB4M2M7CisJYnR2LT5oYXNfdGVhNTc1eCAgPSAxOworCWJ0di0+dGVhX2dwaW8ud3JlbiA9IDQ7CisJYnR2LT50ZWFfZ3Bpby5tb3N0ID0gNTsKKwlidHYtPnRlYV9ncGlvLmNsayAgPSAzOworCWJ0di0+dGVhX2dwaW8uZGF0YSA9IDI7CiAKIAlidHYtPm1ib3hfaW93ICAgICA9IDEgPDwgIDg7CiAJYnR2LT5tYm94X2lvciAgICAgPSAxIDw8ICA5OwogCWJ0di0+bWJveF9jc2VsICAgID0gMSA8PCAxMDsKIAotCWZyZXE9ODgwMDAvNjIuNTsKLQl0ZWE1NzU3X3dyaXRlKGJ0diwgNSAqIGZyZXEgKyAweDM1OCk7IC8qIHdyaXRlIDB4MWVkOCAqLwotCWlmICgweDFlZDggPT0gdGVhNTc1N19yZWFkKGJ0dikpIHsKKwlpZiAoIXRlYTU3NXhfaW5pdChidHYpKSB7CiAJCXByX2luZm8oIiVkOiBUZXJyYXRlYyBBY3RpdmUgUmFkaW8gVXBncmFkZSBmb3VuZFxuIiwgYnR2LT5jLm5yKTsKLQkJYnR2LT5oYXNfcmFkaW8gICAgPSAxOwotCQlidHYtPmhhc19zYWE2NTg4ICA9IDE7Ci0JCWJ0di0+aGFzX21hdGNoYm94ID0gMTsKLQl9IGVsc2UgewotCQlidHYtPmhhc19yYWRpbyAgICA9IDA7Ci0JCWJ0di0+aGFzX21hdGNoYm94ID0gMDsKKwkJYnR2LT5oYXNfc2FhNjU4OCA9IDE7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQyOTIsMTgxICs0MzcwLDYgQEAKIAl9CiB9CiAKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogTWlybyBQcm8gcmFkaW8gc3R1ZmYgLS0gdGhlIHRlYTU3NTcgaXMgY29ubmVjdGVkIHRvIHNvbWUgR1BJTyBwb3J0cyAgICAgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTkgQ3NhYmEgSGFsYXN6IDxxZ2VoYWxpQHVuaS1taXNrb2xjLmh1PgotICogVGhpcyBjb2RlIGlzIHBsYWNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKgotICogQnJ1dGFsbHkgaGFja2VkIGJ5IERhbiBTaGVyaWRhbiA8ZGFuLnNoZXJpZGFuQGNvbnRhY3Qub3JnLnVrPiBkanM1MiA4LzMvMDAKLSAqLwotCi1zdGF0aWMgdm9pZCBidXNfbG93KHN0cnVjdCBidHR2ICpidHYsIGludCBiaXQpCi17Ci0JaWYgKGJ0di0+bWJveF9pb3IpIHsKLQkJZ3Bpb19iaXRzKGJ0di0+bWJveF9pb3IgfCBidHYtPm1ib3hfaW93IHwgYnR2LT5tYm94X2NzZWwsCi0JCQkgIGJ0di0+bWJveF9pb3IgfCBidHYtPm1ib3hfaW93IHwgYnR2LT5tYm94X2NzZWwpOwotCQl1ZGVsYXkoNSk7Ci0JfQotCi0JZ3Bpb19iaXRzKGJpdCwwKTsKLQl1ZGVsYXkoNSk7Ci0KLQlpZiAoYnR2LT5tYm94X2lvcikgewotCQlncGlvX2JpdHMoYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsLCAwKTsKLQkJdWRlbGF5KDUpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYnVzX2hpZ2goc3RydWN0IGJ0dHYgKmJ0diwgaW50IGJpdCkKLXsKLQlpZiAoYnR2LT5tYm94X2lvcikgewotCQlncGlvX2JpdHMoYnR2LT5tYm94X2lvciB8IGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCwKLQkJCSAgYnR2LT5tYm94X2lvciB8IGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCk7Ci0JCXVkZWxheSg1KTsKLQl9Ci0KLQlncGlvX2JpdHMoYml0LGJpdCk7Ci0JdWRlbGF5KDUpOwotCi0JaWYgKGJ0di0+bWJveF9pb3IpIHsKLQkJZ3Bpb19iaXRzKGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCwgMCk7Ci0JCXVkZWxheSg1KTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgYnVzX2luKHN0cnVjdCBidHR2ICpidHYsIGludCBiaXQpCi17Ci0JaWYgKGJ0di0+bWJveF9pb3IpIHsKLQkJZ3Bpb19iaXRzKGJ0di0+bWJveF9pb3IgfCBidHYtPm1ib3hfaW93IHwgYnR2LT5tYm94X2NzZWwsCi0JCQkgIGJ0di0+bWJveF9pb3IgfCBidHYtPm1ib3hfaW93IHwgYnR2LT5tYm94X2NzZWwpOwotCQl1ZGVsYXkoNSk7Ci0KLQkJZ3Bpb19iaXRzKGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCwgMCk7Ci0JCXVkZWxheSg1KTsKLQl9Ci0JcmV0dXJuIGdwaW9fcmVhZCgpICYgKGJpdCk7Ci19Ci0KLS8qIFRFQTU3NTcgcmVnaXN0ZXIgYml0cyAqLwotI2RlZmluZSBURUFfRlJFUQkJMDoxNAotI2RlZmluZSBURUFfQlVGRkVSCQkxNToxNQotCi0jZGVmaW5lIFRFQV9TSUdOQUxfU1RSRU5HVEgJMTY6MTcKLQotI2RlZmluZSBURUFfUE9SVDEJCTE4OjE4Ci0jZGVmaW5lIFRFQV9QT1JUMAkJMTk6MTkKLQotI2RlZmluZSBURUFfQkFORAkJMjA6MjEKLSNkZWZpbmUgVEVBX0JBTkRfRk0JCTAKLSNkZWZpbmUgVEVBX0JBTkRfTVcJCTEKLSNkZWZpbmUgVEVBX0JBTkRfTFcJCTIKLSNkZWZpbmUgVEVBX0JBTkRfU1cJCTMKLQotI2RlZmluZSBURUFfTU9OTwkJMjI6MjIKLSNkZWZpbmUgVEVBX0FMTE9XX1NURVJFTwkwCi0jZGVmaW5lIFRFQV9GT1JDRV9NT05PCQkxCi0KLSNkZWZpbmUgVEVBX1NFQVJDSF9ESVJFQ1RJT04JMjM6MjMKLSNkZWZpbmUgVEVBX1NFQVJDSF9ET1dOCQkwCi0jZGVmaW5lIFRFQV9TRUFSQ0hfVVAJCTEKLQotI2RlZmluZSBURUFfU1RBVFVTCQkyNDoyNAotI2RlZmluZSBURUFfU1RBVFVTX1RVTkVECTAKLSNkZWZpbmUgVEVBX1NUQVRVU19TRUFSQ0hJTkcJMQotCi0vKiBMb3ctbGV2ZWwgc3R1ZmYgKi8KLXN0YXRpYyBpbnQgdGVhNTc1N19yZWFkKHN0cnVjdCBidHR2ICpidHYpCi17Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0OwotCWludCB2YWx1ZSA9IDA7Ci0JaW50IGk7Ci0KLQkvKiBiZXR0ZXIgc2FmZSB0aGFuIHNvcnJ5ICovCi0JZ3Bpb19pbm91dChidHYtPm1ib3hfbWFzaywgYnR2LT5tYm94X2NsayB8IGJ0di0+bWJveF93ZSk7Ci0KLQlpZiAoYnR2LT5tYm94X2lvcikgewotCQlncGlvX2JpdHMoYnR2LT5tYm94X2lvciB8IGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCwKLQkJCSAgYnR2LT5tYm94X2lvciB8IGJ0di0+bWJveF9pb3cgfCBidHYtPm1ib3hfY3NlbCk7Ci0JCXVkZWxheSg1KTsKLQl9Ci0KLQlpZiAoYnR0dl9ncGlvKQotCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJ0ZWE1NzU3IHJlYWQiKTsKLQotCWJ1c19sb3coYnR2LGJ0di0+bWJveF93ZSk7Ci0JYnVzX2xvdyhidHYsYnR2LT5tYm94X2Nsayk7Ci0KLQl1ZGVsYXkoMTApOwotCXRpbWVvdXQ9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApOwotCi0JLyogd2FpdCBmb3IgREFUQSBsaW5lIHRvIGdvIGxvdzsgZXJyb3IgaWYgaXQgZG9lc24ndCAqLwotCXdoaWxlIChidXNfaW4oYnR2LGJ0di0+bWJveF9kYXRhKSAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkKLQkJc2NoZWR1bGUoKTsKLQlpZiAoYnVzX2luKGJ0dixidHYtPm1ib3hfZGF0YSkpIHsKLQkJcHJfd2FybigiJWQ6IHRlYTU3NTc6IHJlYWQgdGltZW91dFxuIiwgYnR2LT5jLm5yKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWRwcmludGsoIiVkOiB0ZWE1NzU3OiIsIGJ0di0+Yy5ucik7Ci0JZm9yIChpID0gMDsgaSA8IDI0OyBpKyspIHsKLQkJdWRlbGF5KDUpOwotCQlidXNfaGlnaChidHYsYnR2LT5tYm94X2Nsayk7Ci0JCXVkZWxheSg1KTsKLQkJZHByaW50a19jb250KCIlYyIsCi0JCQkgICAgIGJ1c19pbihidHYsIGJ0di0+bWJveF9tb3N0KSA9PSAwID8gJ1QnIDogJy0nKTsKLQkJYnVzX2xvdyhidHYsYnR2LT5tYm94X2Nsayk7Ci0JCXZhbHVlIDw8PSAxOwotCQl2YWx1ZSB8PSAoYnVzX2luKGJ0dixidHYtPm1ib3hfZGF0YSkgPT0gMCk/MDoxOyAgLyogTVNCIGZpcnN0ICovCi0JCWRwcmludGtfY29udCgiJWMiLAotCQkJICAgICBidXNfaW4oYnR2LCBidHYtPm1ib3hfbW9zdCkgPT0gMCA/ICdTJyA6ICdNJyk7Ci0JfQotCWRwcmludGtfY29udCgiXG4iKTsKLQlkcHJpbnRrKCIlZDogdGVhNTc1NzogcmVhZCAweCVYXG4iLCBidHYtPmMubnIsIHZhbHVlKTsKLQlyZXR1cm4gdmFsdWU7Ci19Ci0KLXN0YXRpYyBpbnQgdGVhNTc1N193cml0ZShzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgdmFsdWUpCi17Ci0JaW50IGk7Ci0JaW50IHJlZyA9IHZhbHVlOwotCi0JZ3Bpb19pbm91dChidHYtPm1ib3hfbWFzaywgYnR2LT5tYm94X2NsayB8IGJ0di0+bWJveF93ZSB8IGJ0di0+bWJveF9kYXRhKTsKLQotCWlmIChidHYtPm1ib3hfaW9yKSB7Ci0JCWdwaW9fYml0cyhidHYtPm1ib3hfaW9yIHwgYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsLAotCQkJICBidHYtPm1ib3hfaW9yIHwgYnR2LT5tYm94X2lvdyB8IGJ0di0+bWJveF9jc2VsKTsKLQkJdWRlbGF5KDUpOwotCX0KLQlpZiAoYnR0dl9ncGlvKQotCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJ0ZWE1NzU3IHdyaXRlIik7Ci0KLQlkcHJpbnRrKCIlZDogdGVhNTc1Nzogd3JpdGUgMHglWFxuIiwgYnR2LT5jLm5yLCB2YWx1ZSk7Ci0JYnVzX2xvdyhidHYsYnR2LT5tYm94X2Nsayk7Ci0JYnVzX2hpZ2goYnR2LGJ0di0+bWJveF93ZSk7Ci0JZm9yIChpID0gMDsgaSA8IDI1OyBpKyspIHsKLQkJaWYgKHJlZyAmIDB4MTAwMDAwMCkKLQkJCWJ1c19oaWdoKGJ0dixidHYtPm1ib3hfZGF0YSk7Ci0JCWVsc2UKLQkJCWJ1c19sb3coYnR2LGJ0di0+bWJveF9kYXRhKTsKLQkJcmVnIDw8PSAxOwotCQlidXNfaGlnaChidHYsYnR2LT5tYm94X2Nsayk7Ci0JCXVkZWxheSgxMCk7Ci0JCWJ1c19sb3coYnR2LGJ0di0+bWJveF9jbGspOwotCQl1ZGVsYXkoMTApOwotCX0KLQlidXNfbG93KGJ0dixidHYtPm1ib3hfd2UpOyAgLyogdW5tdXRlICEhISAqLwotCXJldHVybiAwOwotfQotCi12b2lkIHRlYTU3NTdfc2V0X2ZyZXEoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgc2hvcnQgZnJlcSkKLXsKLQlkcHJpbnRrKCJ0ZWE1NzU3X3NldF9mcmVxICVkXG4iLGZyZXEpOwotCXRlYTU3NTdfd3JpdGUoYnR2LCA1ICogZnJlcSArIDB4MzU4KTsgLyogYWRkIDEwLjdNSHogKHNlZSBkb2NzKSAqLwotfQotCiAvKiBSZW1vdGVWaXNpb24gTVggKHJ2NjA1KSBtdXhzZWwgaGVscGVyIFtNaWd1ZWwgRnJlaXRhc10KICAqCiAgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIHJ2NjA1IGRvbid0IHVzZSBhIG5vcm1hbCBtdWx0aXBsZXgsIGJ1dCBhIGNyb3NzcG9pbnQKQEAgLTUwNDgsMTAgKzQ5NTEsMyBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoYnR2LT5jLnBjaSwgUENJX0xBVEVOQ1lfVElNRVIsIGxhdGVuY3kpOwogCXJldHVybiAwOwogfQotCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idHR2LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvYnR0di1kcml2ZXIuYwppbmRleCA0YTgxNzZjLi40ZWMyYTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idHR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L2J0dHYtZHJpdmVyLmMKQEAgLTE4NzQsOCArMTg3NCwxMCBAQAogCWlmIChuZXdfZnJlcS50eXBlID09IFY0TDJfVFVORVJfUkFESU8pIHsKIAkJcmFkaW9fZW5hYmxlKGJ0dik7CiAJCWJ0di0+cmFkaW9fZnJlcSA9IG5ld19mcmVxLmZyZXF1ZW5jeTsKLQkJaWYgKGJ0di0+aGFzX21hdGNoYm94KQotCQkJdGVhNTc1N19zZXRfZnJlcShidHYsIGJ0di0+cmFkaW9fZnJlcSk7CisJCWlmIChidHYtPmhhc190ZWE1NzV4KSB7CisJCQlidHYtPnRlYS5mcmVxID0gYnR2LT5yYWRpb19mcmVxOworCQkJc25kX3RlYTU3NXhfc2V0X2ZyZXEoJmJ0di0+dGVhKTsKKwkJfQogCX0gZWxzZSB7CiAJCWJ0di0+dHZfZnJlcSA9IG5ld19mcmVxLmZyZXF1ZW5jeTsKIAl9CkBAIC0yNTEzLDYgKzI1MTUsOCBAQAogCQlpZiAoYnR2LT5oYXNfc2FhNjU4OCkKIAkJCWNhcC0+ZGV2aWNlX2NhcHMgfD0gVjRMMl9DQVBfUkVBRFdSSVRFIHwKIAkJCQkJCVY0TDJfQ0FQX1JEU19DQVBUVVJFOworCQlpZiAoYnR2LT5oYXNfdGVhNTc1eCkKKwkJCWNhcC0+ZGV2aWNlX2NhcHMgfD0gVjRMMl9DQVBfSFdfRlJFUV9TRUVLOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTMyNDIsNiArMzI0Niw5IEBACiAJaWYgKGJ0di0+YXVkaW9fbW9kZV9ncGlvKQogCQlidHYtPmF1ZGlvX21vZGVfZ3BpbyhidHYsIHQsIDApOwogCisJaWYgKGJ0di0+aGFzX3RlYTU3NXgpCisJCXJldHVybiBzbmRfdGVhNTc1eF9nX3R1bmVyKCZidHYtPnRlYSwgdCk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzI1OSw2ICszMjY2LDMwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcmFkaW9fc19od19mcmVxX3NlZWsoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCWNvbnN0IHN0cnVjdCB2NGwyX2h3X2ZyZXFfc2VlayAqYSkKK3sKKwlzdHJ1Y3QgYnR0dl9maCAqZmggPSBwcml2OworCXN0cnVjdCBidHR2ICpidHYgPSBmaC0+YnR2OworCisJaWYgKGJ0di0+aGFzX3RlYTU3NXgpCisJCXJldHVybiBzbmRfdGVhNTc1eF9zX2h3X2ZyZXFfc2VlayhmaWxlLCAmYnR2LT50ZWEsIGEpOworCisJcmV0dXJuIC1FTk9UVFk7Cit9CisKK3N0YXRpYyBpbnQgcmFkaW9fZW51bV9mcmVxX2JhbmRzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQkgc3RydWN0IHY0bDJfZnJlcXVlbmN5X2JhbmQgKmJhbmQpCit7CisJc3RydWN0IGJ0dHZfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gZmgtPmJ0djsKKworCWlmIChidHYtPmhhc190ZWE1NzV4KQorCQlyZXR1cm4gc25kX3RlYTU3NXhfZW51bV9mcmVxX2JhbmRzKCZidHYtPnRlYSwgYmFuZCk7CisKKwlyZXR1cm4gLUVOT1RUWTsKK30KKwogc3RhdGljIHNzaXplX3QgcmFkaW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmRhdGEsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC0zMzE2LDYgKzMzNDcsOCBAQAogCS52aWRpb2Nfc190dW5lciAgICAgICAgID0gcmFkaW9fc190dW5lciwKIAkudmlkaW9jX2dfZnJlcXVlbmN5ICAgICA9IGJ0dHZfZ19mcmVxdWVuY3ksCiAJLnZpZGlvY19zX2ZyZXF1ZW5jeSAgICAgPSBidHR2X3NfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19od19mcmVxX3NlZWsJPSByYWRpb19zX2h3X2ZyZXFfc2VlaywKKwkudmlkaW9jX2VudW1fZnJlcV9iYW5kcwk9IHJhZGlvX2VudW1fZnJlcV9iYW5kcywKIAkudmlkaW9jX3N1YnNjcmliZV9ldmVudCA9IHY0bDJfY3RybF9zdWJzY3JpYmVfZXZlbnQsCiAJLnZpZGlvY191bnN1YnNjcmliZV9ldmVudCA9IHY0bDJfZXZlbnRfdW5zdWJzY3JpYmUsCiB9OwpAQCAtMzg4NCw3ICszOTE3LDYgQEAKIAkqdmZkID0gKnRlbXBsYXRlOwogCXZmZC0+djRsMl9kZXYgPSAmYnR2LT5jLnY0bDJfZGV2OwogCXZmZC0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwotCXZmZC0+ZGVidWcgICA9IGJ0dHZfZGVidWc7CiAJdmlkZW9fc2V0X2RydmRhdGEodmZkLCBidHYpOwogCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksICJCVCVkJXMgJXMgKCVzKSIsCiAJCSBidHYtPmlkLCAoYnR2LT5pZD09ODQ4ICYmIGJ0di0+cmV2aXNpb249PTB4MTIpID8gIkEiIDogIiIsCkBAIC00NDI5LDkgKzQ0NjEsMyBAQAogCiBtb2R1bGVfaW5pdChidHR2X2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGJ0dHZfY2xlYW51cF9tb2R1bGUpOwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvYnR0di1ncGlvLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idHR2LWdwaW8uYwppbmRleCAzZjM2NGI3Li4yNWI5OTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idHR2LWdwaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idHR2LWdwaW8uYwpAQCAtMTgxLDkgKzE4MSwzIEBACiAJYnR3cml0ZShkYXRhLEJUODQ4X0dQSU9fREFUQSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnR2LT5ncGlvX2xvY2ssZmxhZ3MpOwogfQotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvYnR0di1pZi5jIGIvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvYnR0di1pZi5jCmluZGV4IGE2YTU0MGQuLjUzODY1MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L2J0dHYtaWYuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idHR2LWlmLmMKQEAgLTExMyw5ICsxMTMsMyBAQAogCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJleHRlcm4gd3JpdGUiKTsKIAlyZXR1cm4gMDsKIH0KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L2J0dHYtcmlzYy5jIGIvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvYnR0di1yaXNjLmMKaW5kZXggNGQzZjA1YS4uMzg1OWRkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvYnR0di1yaXNjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvYnR0di1yaXNjLmMKQEAgLTkwMSw5ICs5MDEsMyBAQAogCWJ1Zi0+dmIuZmllbGQgPSBvdi0+ZmllbGQ7CiAJcmV0dXJuIDA7CiB9Ci0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idHR2LXZiaS5jIGIvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvYnR0di12YmkuYwppbmRleCBiNDMzMjY3Li5lNzcxMjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idHR2LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L2J0dHYtdmJpLmMKQEAgLTQ1MCwxMCArNDUwLDMgQEAKIAkvKiBTZWUgYnR0dl92YmlfZm10X3NldCgpLiAqLwogCWYtPmVuZCAgICAgICAgICAgICAgICAgID0gdHZub3JtLT52YmlzdGFydFswXSAqIDIgKyAyOwogfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L2J0dHYuaCBiL2RyaXZlcnMvbWVkaWEvcGNpL2J0OHh4L2J0dHYuaAppbmRleCBmMDgxMjYyLi45MTMwMWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idHR2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvYnR0di5oCkBAIC0zNzgsOCArMzc4LDMgQEAKIGV4dGVybiB2b2lkIGJ0dHZfaW5wdXRfaXJxKHN0cnVjdCBidHR2ICpkZXYpOwogCiAjZW5kaWYgLyogX0JUVFZfSF8gKi8KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idHR2cC5oIGIvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvYnR0dnAuaAppbmRleCA5ZmUxOTQ4OC4uYmMwNDhjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvYnQ4eHgvYnR0dnAuaAorKysgYi9kcml2ZXJzL21lZGlhL3BjaS9idDh4eC9idHR2cC5oCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KICNpbmNsdWRlIDxtZWRpYS9yYy1jb3JlLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5oPgorI2luY2x1ZGUgPG1lZGlhL3RlYTU3NXguaD4KIAogI2luY2x1ZGUgImJ0ODQ4LmgiCiAjaW5jbHVkZSAiYnR0di5oIgpAQCAtMzU5LDYgKzM2MCwxMCBAQAogCXN0cnVjdCBidHR2X2J1ZmZlciAgICAgKnZiaTsKIH07CiAKK3N0cnVjdCBidHR2X3RlYTU3NXhfZ3BpbyB7CisJdTggZGF0YSwgY2xrLCB3cmVuLCBtb3N0OworfTsKKwogc3RydWN0IGJ0dHYgewogCXN0cnVjdCBidHR2X2NvcmUgYzsKIApAQCAtNDQ1LDEyICs0NTAsOSBAQAogCiAJLyogbWlyby9waW5uYWNsZSArIEFpbXNsYWIgVkhYCiAJICAgcGhpbGlwcyBtYXRjaGJveCAodGVhNTc1NyByYWRpbyB0dW5lcikgc3VwcG9ydCAqLwotCWludCBoYXNfbWF0Y2hib3g7Ci0JaW50IG1ib3hfd2U7Ci0JaW50IG1ib3hfZGF0YTsKLQlpbnQgbWJveF9jbGs7Ci0JaW50IG1ib3hfbW9zdDsKLQlpbnQgbWJveF9tYXNrOworCWludCBoYXNfdGVhNTc1eDsKKwlzdHJ1Y3QgYnR0dl90ZWE1NzV4X2dwaW8gdGVhX2dwaW87CisJc3RydWN0IHNuZF90ZWE1NzV4IHRlYTsKIAogCS8qIElTQSBzdHVmZiAoVGVycmF0ZWMgQWN0aXZlIFJhZGlvIFVwZ3JhZGUpICovCiAJaW50IG1ib3hfaW9yOwpAQCAtNTMxLDkgKzUzMywzIEBACiAjZGVmaW5lIGJ0YW9yKGRhdCxtYXNrLGFkcikgYnR3cml0ZSgoZGF0KSB8ICgobWFzaykgJiBidHJlYWQoYWRyKSksIGFkcikKIAogI2VuZGlmIC8qIF9CVFRWUF9IXyAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9LY29uZmlnCmluZGV4IGY2MTMzMTQuLjc0ZDc3NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L0tjb25maWcKQEAgLTQxLDYgKzQxLDcgQEAKIAlzZWxlY3QgTUVESUFfVFVORVJfWEM1MDAwIGlmIE1FRElBX1NVQkRSVl9BVVRPU0VMRUNUCiAJc2VsZWN0IE1FRElBX1RVTkVSX1NJMjE1NyBpZiBNRURJQV9TVUJEUlZfQVVUT1NFTEVDVAogCXNlbGVjdCBNRURJQV9UVU5FUl9NODhUUzIwMjIgaWYgTUVESUFfU1VCRFJWX0FVVE9TRUxFQ1QKKwlzZWxlY3QgTUVESUFfVFVORVJfTTg4UlM2MDAwVCBpZiBNRURJQV9TVUJEUlZfQVVUT1NFTEVDVAogCXNlbGVjdCBEVkJfVFVORVJfRElCMDA3MCBpZiBNRURJQV9TVUJEUlZfQVVUT1NFTEVDVAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIENvbmV4YW50IDIzODg1IGJhc2VkCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCmluZGV4IDA2OTMxZjYuLmYzODRmMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCkBAIC03MTAsNiArNzEwLDExIEBACiAJCS5wb3J0YgkJPSBDWDIzODg1X01QRUdfRFZCLAogCQkucG9ydGMJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKIAl9LAorCVtDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlI1NTI1XSA9IHsKKwkJLm5hbWUJCT0gIkhhdXBwYXVnZSBXaW5UVi1IVlI1NTI1IiwKKwkJLnBvcnRiCQk9IENYMjM4ODVfTVBFR19EVkIsCisJCS5wb3J0YwkJPSBDWDIzODg1X01QRUdfRFZCLAorCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4MjM4ODVfYmNvdW50ID0gQVJSQVlfU0laRShjeDIzODg1X2JvYXJkcyk7CiAKQEAgLTk5Myw2ICs5OTgsMTAgQEAKIAkJLnN1YnZlbmRvciA9IDB4NDI1NCwKIAkJLnN1YmRldmljZSA9IDB4MDk4MiwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfRFZCU0tZX1Q5ODIsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHhmMDM4LAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSNTUyNSwKIAl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBjeDIzODg1X2lkY291bnQgPSBBUlJBWV9TSVpFKGN4MjM4ODVfc3ViaWRzKTsKQEAgLTExNjUsNiArMTE3NCw4IEBACiAJY2FzZSA4NTcyMToKIAkJLyogV2luVFYtSFZSMTI5MCAoUENJZSwgT0VNLCBSQ0EgaW4sIElSLAogCQkJRHVhbCBjaGFubmVsIEFUU0MgYW5kIEJhc2ljIGFuYWxvZyAqLworCWNhc2UgMTUwMzI5OgorCQkvKiBXaW5UVi1IVlI1NTI1IChQQ0llLCBEVkItUy9TMiwgRFZCLVQvVDIvQykgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHdhcm5pbmc6ICIKQEAgLTE2MzcsNiArMTY0OCwyOSBAQAogCQltc2xlZXAoMTAwKTsKIAkJY3gyMzg4NV9ncGlvX3NldChkZXYsIEdQSU9fMik7CiAJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSNTUyNToKKwkJLyoKKwkJICogR1BJTy0wMCBJUl9XSURFCisJCSAqIEdQSU8tMDIgd2FrZSMKKwkJICogR1BJTy0wMyBWQVVYIFByZXMuCisJCSAqIEdQSU8tMDcgUFJPRyMKKwkJICogR1BJTy0wOCBTQVRfUkVTTgorCQkgKiBHUElPLTA5IFRFUl9SRVNOCisJCSAqIEdQSU8tMTAgQjJfU0VOU0UKKwkJICogR1BJTy0xMSBCMV9TRU5TRQorCQkgKiBHUElPLTE1IElSX0xFRF9TVEFUVVMKKwkJICogR1BJTy0xOSBJUl9OQVJST1cKKwkJICogR1BJTy0yMCBCbGF1c3RlcjEKKwkJICogQUxUR1BJTyBWQVVYX1NXSVRDSAorCQkgKiBBVVhfUExMX0NMSyA6IEJsYXN0ZXIyCisJCSAqLworCQkvKiBQdXQgdGhlIHBhcnRzIGludG8gcmVzZXQgYW5kIGJhY2sgKi8KKwkJY3gyMzg4NV9ncGlvX2VuYWJsZShkZXYsIEdQSU9fOCB8IEdQSU9fOSwgMSk7CisJCWN4MjM4ODVfZ3Bpb19jbGVhcihkZXYsIEdQSU9fOCB8IEdQSU9fOSk7CisJCW1zbGVlcCgxMDApOworCQljeDIzODg1X2dwaW9fc2V0KGRldiwgR1BJT184IHwgR1BJT185KTsKKwkJbXNsZWVwKDEwMCk7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtMTg3OSw2ICsxOTEzLDcgQEAKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjQ0MDA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9TVEFSQlVSU1Q6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9JTVBBQ1RWQ0JFOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSNTUyNToKIAkJaWYgKGRldi0+aTJjX2J1c1swXS5pMmNfcmMgPT0gMCkKIAkJCWhhdXBwYXVnZV9lZXByb20oZGV2LCBlZXByb20rMHhjMCk7CiAJCWJyZWFrOwpAQCAtMjAwOCw2ICsyMDQzLDE0IEBACiAJCXRzMi0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLwogCQl0czItPnNyY19zZWxfdmFsICAgPSBDWDIzODg1X1NSQ19TRUxfUEFSQUxMRUxfTVBFR19WSURFTzsKIAkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlI1NTI1OgorCQl0czEtPmdlbl9jdHJsX3ZhbCAgPSAweDU7IC8qIFBhcmFsbGVsICovCisJCXRzMS0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLworCQl0czEtPnNyY19zZWxfdmFsICAgPSBDWDIzODg1X1NSQ19TRUxfUEFSQUxMRUxfTVBFR19WSURFTzsKKwkJdHMyLT5nZW5fY3RybF92YWwgID0gMHhjOyAvKiBTZXJpYWwgYnVzICsgcHVuY3R1cmVkIGNsb2NrICovCisJCXRzMi0+dHNfY2xrX2VuX3ZhbCA9IDB4MTsgLyogRW5hYmxlIFRTX0NMSyAqLworCQl0czItPnNyY19zZWxfdmFsICAgPSBDWDIzODg1X1NSQ19TRUxfUEFSQUxMRUxfTVBFR19WSURFTzsKKwkJYnJlYWs7CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxMjUwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMDoKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjE1MDBROgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LWR2Yi5jCmluZGV4IGE5YzQ1MGQuLjQ1ZmJlMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtZHZiLmMKQEAgLTc0LDYgKzc0LDcgQEAKICNpbmNsdWRlICJzcDIuaCIKICNpbmNsdWRlICJtODhkczMxMDMuaCIKICNpbmNsdWRlICJtODh0czIwMjIuaCIKKyNpbmNsdWRlICJtODhyczYwMDB0LmgiCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7CiAKQEAgLTkxNSw2ICs5MTYsMTYgQEAKIAkuYWdjID0gMHg5OSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbTg4ZHMzMTAzX2NvbmZpZyBoYXVwcGF1Z2VfaHZyNTUyNV9tODhkczMxMDNfY29uZmlnID0geworCS5pMmNfYWRkciA9IDB4NjksCisJLmNsb2NrID0gMjcwMDAwMDAsCisJLmkyY193cl9tYXggPSAzMywKKwkudHNfbW9kZSA9IE04OERTMzEwM19UU19QQVJBTExFTCwKKwkudHNfY2xrID0gMTYwMDAsCisJLnRzX2Nsa19wb2wgPSAxLAorCS5hZ2MgPSAweDk5LAorfTsKKwogc3RhdGljIGludCBuZXR1cF9hbHRlcmFfZnBnYV9ydyh2b2lkICpkZXZpY2UsIGludCBmbGFnLCBpbnQgZGF0YSwgaW50IHJlYWQpCiB7CiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSAoc3RydWN0IGN4MjM4ODVfZGV2ICopZGV2aWNlOwpAQCAtMTA1OCw2ICsxMDY5LDExNiBAQAogCS5ob3N0YnVzX2RpdmVyc2l0eSA9IDEsCiB9OwogCitzdGF0aWMgaW50IGR2Yl9yZWdpc3Rlcl9jaV9tYWMoc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0KQoreworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gcG9ydC0+ZGV2OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnRfY2kgPSBOVUxMOworCXN0cnVjdCB2YjJfZHZiX2Zyb250ZW5kICpmZTA7CisKKwlmZTAgPSB2YjJfZHZiX2dldF9mcm9udGVuZCgmcG9ydC0+ZnJvbnRlbmRzLCAxKTsKKwlpZiAoIWZlMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwljYXNlIENYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJTMl9DSTogeworCQlzdGF0aWMgc3RydWN0IG5ldHVwX2NhcmRfaW5mbyBjaW5mbzsKKworCQluZXR1cF9nZXRfY2FyZF9pbmZvKCZkZXYtPmkyY19idXNbMF0uaTJjX2FkYXAsICZjaW5mbyk7CisJCW1lbWNweShwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWMsCisJCQkJY2luZm8ucG9ydFtwb3J0LT5uciAtIDFdLm1hYywgNik7CisJCXByaW50ayhLRVJOX0lORk8gIk5ldFVQIER1YWwgRFZCLVMyIENJIGNhcmQgcG9ydCVkIE1BQz0lcE1cbiIsCisJCQlwb3J0LT5uciwgcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjKTsKKworCQluZXR1cF9jaV9pbml0KHBvcnQpOworCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgQ1gyMzg4NV9CT0FSRF9ORVRVUF9EVUFMX0RWQl9UX0NfQ0lfUkY6IHsKKwkJc3RydWN0IGFsdGVyYV9jaV9jb25maWcgbmV0dXBfY2lfY2ZnID0geworCQkJLmRldiA9IGRldiwvKiBtYWdpYyBudW1iZXIgdG8gaWRlbnRpZnkqLworCQkJLmFkYXB0ZXIgPSAmcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIsLyogZm9yIENJICovCisJCQkuZGVtdXggPSAmZmUwLT5kdmIuZGVtdXgsLyogZm9yIGh3IHBpZCBmaWx0ZXIgKi8KKwkJCS5mcGdhX3J3ID0gbmV0dXBfYWx0ZXJhX2ZwZ2FfcncsCisJCX07CisKKwkJYWx0ZXJhX2NpX2luaXQoJm5ldHVwX2NpX2NmZywgcG9ydC0+bnIpOworCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgQ1gyMzg4NV9CT0FSRF9URVZJSV9TNDcwOiB7CisJCXU4IGVlcHJvbVsyNTZdOyAvKiAyNEMwMiBpMmMgZWVwcm9tICovCisKKwkJaWYgKHBvcnQtPm5yICE9IDEpCisJCQlyZXR1cm4gMDsKKworCQkvKiBSZWFkIGVudGlyZSBFRVBST00gKi8KKwkJZGV2LT5pMmNfYnVzWzBdLmkyY19jbGllbnQuYWRkciA9IDB4YTAgPj4gMTsKKwkJdHZlZXByb21fcmVhZCgmZGV2LT5pMmNfYnVzWzBdLmkyY19jbGllbnQsIGVlcHJvbSwgc2l6ZW9mKGVlcHJvbSkpOworCQlwcmludGsoS0VSTl9JTkZPICJUZVZpaSBTNDcwIE1BQz0gJXBNXG4iLCBlZXByb20gKyAweGEwKTsKKwkJbWVtY3B5KHBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hYywgZWVwcm9tICsgMHhhMCwgNik7CisJCXJldHVybiAwOworCQl9CisJY2FzZSBDWDIzODg1X0JPQVJEX0RWQlNLWV9UOTU4MDoKKwljYXNlIENYMjM4ODVfQk9BUkRfRFZCU0tZX1M5NTA6CisJY2FzZSBDWDIzODg1X0JPQVJEX0RWQlNLWV9TOTUyOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVkJTS1lfVDk4MjogeworCQl1OCBlZXByb21bMjU2XTsgLyogMjRDMDIgaTJjIGVlcHJvbSAqLworCisJCWlmIChwb3J0LT5uciA+IDIpCisJCQlyZXR1cm4gMDsKKworCQkvKiBSZWFkIGVudGlyZSBFRVBST00gKi8KKwkJZGV2LT5pMmNfYnVzWzBdLmkyY19jbGllbnQuYWRkciA9IDB4YTAgPj4gMTsKKwkJdHZlZXByb21fcmVhZCgmZGV2LT5pMmNfYnVzWzBdLmkyY19jbGllbnQsIGVlcHJvbSwKKwkJCQlzaXplb2YoZWVwcm9tKSk7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIHBvcnQgJWQgTUFDIGFkZHJlc3M6ICVwTVxuIiwKKwkJCWN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLm5hbWUsIHBvcnQtPm5yLAorCQkJZWVwcm9tICsgMHhjMCArIChwb3J0LT5uci0xKSAqIDgpOworCQltZW1jcHkocG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjLCBlZXByb20gKyAweGMwICsKKwkJCShwb3J0LT5uci0xKSAqIDgsIDYpOworCQlyZXR1cm4gMDsKKwkJfQorCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVkJTS1lfUzk1MEM6CisJY2FzZSBDWDIzODg1X0JPQVJEX0RWQlNLWV9UOTgwQzoKKwljYXNlIENYMjM4ODVfQk9BUkRfVFRfQ1QyXzQ1MDBfQ0k6IHsKKwkJdTggZWVwcm9tWzI1Nl07IC8qIDI0QzAyIGkyYyBlZXByb20gKi8KKwkJc3RydWN0IHNwMl9jb25maWcgc3AyX2NvbmZpZzsKKwkJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CisJCXN0cnVjdCBjeDIzODg1X2kyYyAqaTJjX2J1czIgPSAmZGV2LT5pMmNfYnVzWzFdOworCisJCS8qIGF0dGFjaCBDSSAqLworCQltZW1zZXQoJnNwMl9jb25maWcsIDAsIHNpemVvZihzcDJfY29uZmlnKSk7CisJCXNwMl9jb25maWcuZHZiX2FkYXAgPSAmcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXI7CisJCXNwMl9jb25maWcucHJpdiA9IHBvcnQ7CisJCXNwMl9jb25maWcuY2lfY29udHJvbCA9IGN4MjM4ODVfc3AyX2NpX2N0cmw7CisJCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOworCQlzdHJsY3B5KGluZm8udHlwZSwgInNwMiIsIEkyQ19OQU1FX1NJWkUpOworCQlpbmZvLmFkZHIgPSAweDQwOworCQlpbmZvLnBsYXRmb3JtX2RhdGEgPSAmc3AyX2NvbmZpZzsKKwkJcmVxdWVzdF9tb2R1bGUoaW5mby50eXBlKTsKKwkJY2xpZW50X2NpID0gaTJjX25ld19kZXZpY2UoJmkyY19idXMyLT5pMmNfYWRhcCwgJmluZm8pOworCQlpZiAoY2xpZW50X2NpID09IE5VTEwgfHwgY2xpZW50X2NpLT5kZXYuZHJpdmVyID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKCF0cnlfbW9kdWxlX2dldChjbGllbnRfY2ktPmRldi5kcml2ZXItPm93bmVyKSkgeworCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudF9jaSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlwb3J0LT5pMmNfY2xpZW50X2NpID0gY2xpZW50X2NpOworCisJCWlmIChwb3J0LT5uciAhPSAxKQorCQkJcmV0dXJuIDA7CisKKwkJLyogUmVhZCBlbnRpcmUgRUVQUk9NICovCisJCWRldi0+aTJjX2J1c1swXS5pMmNfY2xpZW50LmFkZHIgPSAweGEwID4+IDE7CisJCXR2ZWVwcm9tX3JlYWQoJmRldi0+aTJjX2J1c1swXS5pMmNfY2xpZW50LCBlZXByb20sCisJCQkJc2l6ZW9mKGVlcHJvbSkpOworCQlwcmludGsoS0VSTl9JTkZPICIlcyBNQUMgYWRkcmVzczogJXBNXG4iLAorCQkJY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSwgZWVwcm9tICsgMHhjMCk7CisJCW1lbWNweShwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWMsIGVlcHJvbSArIDB4YzAsIDYpOworCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBkdmJfcmVnaXN0ZXIoc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0KQogewogCXN0cnVjdCBkaWI3MDAwcF9vcHMgZGliNzAwMHBfb3BzOwpAQCAtMTA2NiwxMSArMTE4NywxMCBAQAogCXN0cnVjdCB2YjJfZHZiX2Zyb250ZW5kICpmZTAsICpmZTEgPSBOVUxMOwogCXN0cnVjdCBzaTIxNjhfY29uZmlnIHNpMjE2OF9jb25maWc7CiAJc3RydWN0IHNpMjE1N19jb25maWcgc2kyMTU3X2NvbmZpZzsKLQlzdHJ1Y3Qgc3AyX2NvbmZpZyBzcDJfY29uZmlnOwogCXN0cnVjdCBtODh0czIwMjJfY29uZmlnIG04OHRzMjAyMl9jb25maWc7CiAJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CiAJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnRfZGVtb2QgPSBOVUxMLCAqY2xpZW50X3R1bmVyID0gTlVMTCwgKmNsaWVudF9jaSA9IE5VTEw7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudF9kZW1vZCA9IE5VTEwsICpjbGllbnRfdHVuZXIgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBtODhkczMxMDNfY29uZmlnICpwX204OGRzMzEwM19jb25maWcgPSBOVUxMOwogCWludCAoKnBfc2V0X3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpID0gTlVMTDsKIAlpbnQgbWZlX3NoYXJlZCA9IDA7IC8qIGJ1cyBub3Qgc2hhcmVkIGJ5IGRlZmF1bHQgKi8KQEAgLTE4MDEsMTUgKzE5MjEsMTEgQEAKIAkJCXJlcXVlc3RfbW9kdWxlKGluZm8udHlwZSk7CiAJCQljbGllbnRfdHVuZXIgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CiAJCQlpZiAoY2xpZW50X3R1bmVyID09IE5VTEwgfHwKLQkJCQkJY2xpZW50X3R1bmVyLT5kZXYuZHJpdmVyID09IE5VTEwpIHsKLQkJCQltb2R1bGVfcHV0KGNsaWVudF9kZW1vZC0+ZGV2LmRyaXZlci0+b3duZXIpOwotCQkJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnRfZGVtb2QpOworCQkJCQljbGllbnRfdHVuZXItPmRldi5kcml2ZXIgPT0gTlVMTCkKIAkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKLQkJCX0KKwogCQkJaWYgKCF0cnlfbW9kdWxlX2dldChjbGllbnRfdHVuZXItPmRldi5kcml2ZXItPm93bmVyKSkgewogCQkJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnRfdHVuZXIpOwotCQkJCW1vZHVsZV9wdXQoY2xpZW50X2RlbW9kLT5kZXYuZHJpdmVyLT5vd25lcik7Ci0JCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudF9kZW1vZCk7CiAJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCQl9CiAJCQlwb3J0LT5pMmNfY2xpZW50X3R1bmVyID0gY2xpZW50X3R1bmVyOwpAQCAtMTgzMiw4ICsxOTQ4LDcgQEAKIAkJaW5mby5wbGF0Zm9ybV9kYXRhID0gJnNpMjE2OF9jb25maWc7CiAJCXJlcXVlc3RfbW9kdWxlKGluZm8udHlwZSk7CiAJCWNsaWVudF9kZW1vZCA9IGkyY19uZXdfZGV2aWNlKCZpMmNfYnVzLT5pMmNfYWRhcCwgJmluZm8pOwotCQlpZiAoY2xpZW50X2RlbW9kID09IE5VTEwgfHwKLQkJCQljbGllbnRfZGVtb2QtPmRldi5kcml2ZXIgPT0gTlVMTCkKKwkJaWYgKGNsaWVudF9kZW1vZCA9PSBOVUxMIHx8IGNsaWVudF9kZW1vZC0+ZGV2LmRyaXZlciA9PSBOVUxMKQogCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCWlmICghdHJ5X21vZHVsZV9nZXQoY2xpZW50X2RlbW9kLT5kZXYuZHJpdmVyLT5vd25lcikpIHsKIAkJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnRfZGVtb2QpOwpAQCAtMTg1MSwxNSArMTk2NiwxMCBAQAogCQlyZXF1ZXN0X21vZHVsZShpbmZvLnR5cGUpOwogCQljbGllbnRfdHVuZXIgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CiAJCWlmIChjbGllbnRfdHVuZXIgPT0gTlVMTCB8fAotCQkJCWNsaWVudF90dW5lci0+ZGV2LmRyaXZlciA9PSBOVUxMKSB7Ci0JCQltb2R1bGVfcHV0KGNsaWVudF9kZW1vZC0+ZGV2LmRyaXZlci0+b3duZXIpOwotCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudF9kZW1vZCk7CisJCQkJY2xpZW50X3R1bmVyLT5kZXYuZHJpdmVyID09IE5VTEwpCiAJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKLQkJfQogCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNsaWVudF90dW5lci0+ZGV2LmRyaXZlci0+b3duZXIpKSB7CiAJCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50X3R1bmVyKTsKLQkJCW1vZHVsZV9wdXQoY2xpZW50X2RlbW9kLT5kZXYuZHJpdmVyLT5vd25lcik7Ci0JCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50X2RlbW9kKTsKIAkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQl9CiAJCXBvcnQtPmkyY19jbGllbnRfdHVuZXIgPSBjbGllbnRfdHVuZXI7CkBAIC0xODg1LDggKzE5OTUsNyBAQAogCQlpbmZvLnBsYXRmb3JtX2RhdGEgPSAmbTg4dHMyMDIyX2NvbmZpZzsKIAkJcmVxdWVzdF9tb2R1bGUoaW5mby50eXBlKTsKIAkJY2xpZW50X3R1bmVyID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOwotCQlpZiAoY2xpZW50X3R1bmVyID09IE5VTEwgfHwKLQkJCQljbGllbnRfdHVuZXItPmRldi5kcml2ZXIgPT0gTlVMTCkKKwkJaWYgKGNsaWVudF90dW5lciA9PSBOVUxMIHx8IGNsaWVudF90dW5lci0+ZGV2LmRyaXZlciA9PSBOVUxMKQogCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CiAJCWlmICghdHJ5X21vZHVsZV9nZXQoY2xpZW50X3R1bmVyLT5kZXYuZHJpdmVyLT5vd25lcikpIHsKIAkJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnRfdHVuZXIpOwpAQCAtMTkzMiw4ICsyMDQxLDcgQEAKIAkJaW5mby5wbGF0Zm9ybV9kYXRhID0gJm04OHRzMjAyMl9jb25maWc7CiAJCXJlcXVlc3RfbW9kdWxlKGluZm8udHlwZSk7CiAJCWNsaWVudF90dW5lciA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKLQkJaWYgKGNsaWVudF90dW5lciA9PSBOVUxMIHx8Ci0JCQkJY2xpZW50X3R1bmVyLT5kZXYuZHJpdmVyID09IE5VTEwpCisJCWlmIChjbGllbnRfdHVuZXIgPT0gTlVMTCB8fCBjbGllbnRfdHVuZXItPmRldi5kcml2ZXIgPT0gTlVMTCkKIAkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNsaWVudF90dW5lci0+ZGV2LmRyaXZlci0+b3duZXIpKSB7CiAJCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50X3R1bmVyKTsKQEAgLTE5NzgsOCArMjA4Niw3IEBACiAJCWluZm8ucGxhdGZvcm1fZGF0YSA9ICZzaTIxNjhfY29uZmlnOwogCQlyZXF1ZXN0X21vZHVsZShpbmZvLnR5cGUpOwogCQljbGllbnRfZGVtb2QgPSBpMmNfbmV3X2RldmljZSgmaTJjX2J1cy0+aTJjX2FkYXAsICZpbmZvKTsKLQkJaWYgKGNsaWVudF9kZW1vZCA9PSBOVUxMIHx8Ci0JCQkJY2xpZW50X2RlbW9kLT5kZXYuZHJpdmVyID09IE5VTEwpCisJCWlmIChjbGllbnRfZGVtb2QgPT0gTlVMTCB8fCBjbGllbnRfZGVtb2QtPmRldi5kcml2ZXIgPT0gTlVMTCkKIAkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNsaWVudF9kZW1vZC0+ZGV2LmRyaXZlci0+b3duZXIpKSB7CiAJCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50X2RlbW9kKTsKQEAgLTE5OTcsMjAgKzIxMDQsMTAxIEBACiAJCXJlcXVlc3RfbW9kdWxlKGluZm8udHlwZSk7CiAJCWNsaWVudF90dW5lciA9IGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZpbmZvKTsKIAkJaWYgKGNsaWVudF90dW5lciA9PSBOVUxMIHx8Ci0JCQkJY2xpZW50X3R1bmVyLT5kZXYuZHJpdmVyID09IE5VTEwpIHsKLQkJCW1vZHVsZV9wdXQoY2xpZW50X2RlbW9kLT5kZXYuZHJpdmVyLT5vd25lcik7Ci0JCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50X2RlbW9kKTsKKwkJCQljbGllbnRfdHVuZXItPmRldi5kcml2ZXIgPT0gTlVMTCkKIAkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwotCQl9CiAJCWlmICghdHJ5X21vZHVsZV9nZXQoY2xpZW50X3R1bmVyLT5kZXYuZHJpdmVyLT5vd25lcikpIHsKIAkJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnRfdHVuZXIpOwotCQkJbW9kdWxlX3B1dChjbGllbnRfZGVtb2QtPmRldi5kcml2ZXItPm93bmVyKTsKLQkJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnRfZGVtb2QpOwotCQkJcG9ydC0+aTJjX2NsaWVudF9kZW1vZCA9IE5VTEw7CiAJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAkJfQogCQlwb3J0LT5pMmNfY2xpZW50X3R1bmVyID0gY2xpZW50X3R1bmVyOwogCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjU1MjU6CisJCXN3aXRjaCAocG9ydC0+bnIpIHsKKwkJc3RydWN0IG04OHJzNjAwMHRfY29uZmlnIG04OHJzNjAwMHRfY29uZmlnOworCisJCS8qIHBvcnQgYiAtIHNhdGVsbGl0ZSAqLworCQljYXNlIDE6CisJCQkvKiBhdHRhY2ggZnJvbnRlbmQgKi8KKwkJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtODhkczMxMDNfYXR0YWNoLAorCQkJCQkmaGF1cHBhdWdlX2h2cjU1MjVfbTg4ZHMzMTAzX2NvbmZpZywKKwkJCQkJJmRldi0+aTJjX2J1c1swXS5pMmNfYWRhcCwgJmFkYXB0ZXIpOworCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kID09IE5VTEwpCisJCQkJYnJlYWs7CisKKwkJCS8qIGF0dGFjaCBTRUMgKi8KKwkJCWlmICghZHZiX2F0dGFjaChhODI5M19hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCQkmZGV2LT5pMmNfYnVzWzBdLmkyY19hZGFwLAorCQkJCQkmaGF1cHBhdWdlX2E4MjkzX2NvbmZpZykpCisJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CisKKwkJCS8qIGF0dGFjaCB0dW5lciAqLworCQkJbWVtc2V0KCZtODhyczYwMDB0X2NvbmZpZywgMCwgc2l6ZW9mKG04OHJzNjAwMHRfY29uZmlnKSk7CisJCQltODhyczYwMDB0X2NvbmZpZy5mZSA9IGZlMC0+ZHZiLmZyb250ZW5kOworCQkJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CisJCQlzdHJsY3B5KGluZm8udHlwZSwgIm04OHJzNjAwMHQiLCBJMkNfTkFNRV9TSVpFKTsKKwkJCWluZm8uYWRkciA9IDB4MjE7CisJCQlpbmZvLnBsYXRmb3JtX2RhdGEgPSAmbTg4cnM2MDAwdF9jb25maWc7CisJCQlyZXF1ZXN0X21vZHVsZSgiJXMiLCBpbmZvLnR5cGUpOworCQkJY2xpZW50X3R1bmVyID0gaTJjX25ld19kZXZpY2UoYWRhcHRlciwgJmluZm8pOworCQkJaWYgKCFjbGllbnRfdHVuZXIgfHwgIWNsaWVudF90dW5lci0+ZGV2LmRyaXZlcikKKwkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKKwkJCWlmICghdHJ5X21vZHVsZV9nZXQoY2xpZW50X3R1bmVyLT5kZXYuZHJpdmVyLT5vd25lcikpIHsKKwkJCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50X3R1bmVyKTsKKwkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKKwkJCX0KKwkJCXBvcnQtPmkyY19jbGllbnRfdHVuZXIgPSBjbGllbnRfdHVuZXI7CisKKwkJCS8qIGRlbGVnYXRlIHNpZ25hbCBzdHJlbmd0aCBtZWFzdXJlbWVudCB0byB0dW5lciAqLworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9CisJCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuZ2V0X3JmX3N0cmVuZ3RoOworCQkJYnJlYWs7CisJCS8qIHBvcnQgYyAtIHRlcnJlc3RyaWFsL2NhYmxlICovCisJCWNhc2UgMjoKKwkJCS8qIGF0dGFjaCBmcm9udGVuZCAqLworCQkJbWVtc2V0KCZzaTIxNjhfY29uZmlnLCAwLCBzaXplb2Yoc2kyMTY4X2NvbmZpZykpOworCQkJc2kyMTY4X2NvbmZpZy5pMmNfYWRhcHRlciA9ICZhZGFwdGVyOworCQkJc2kyMTY4X2NvbmZpZy5mZSA9ICZmZTAtPmR2Yi5mcm9udGVuZDsKKwkJCXNpMjE2OF9jb25maWcudHNfbW9kZSA9IFNJMjE2OF9UU19TRVJJQUw7CisJCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwkJCXN0cmxjcHkoaW5mby50eXBlLCAic2kyMTY4IiwgSTJDX05BTUVfU0laRSk7CisJCQlpbmZvLmFkZHIgPSAweDY0OworCQkJaW5mby5wbGF0Zm9ybV9kYXRhID0gJnNpMjE2OF9jb25maWc7CisJCQlyZXF1ZXN0X21vZHVsZSgiJXMiLCBpbmZvLnR5cGUpOworCQkJY2xpZW50X2RlbW9kID0gaTJjX25ld19kZXZpY2UoJmRldi0+aTJjX2J1c1swXS5pMmNfYWRhcCwgJmluZm8pOworCQkJaWYgKCFjbGllbnRfZGVtb2QgfHwgIWNsaWVudF9kZW1vZC0+ZGV2LmRyaXZlcikKKwkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKKwkJCWlmICghdHJ5X21vZHVsZV9nZXQoY2xpZW50X2RlbW9kLT5kZXYuZHJpdmVyLT5vd25lcikpIHsKKwkJCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50X2RlbW9kKTsKKwkJCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKKwkJCX0KKwkJCXBvcnQtPmkyY19jbGllbnRfZGVtb2QgPSBjbGllbnRfZGVtb2Q7CisKKwkJCS8qIGF0dGFjaCB0dW5lciAqLworCQkJbWVtc2V0KCZzaTIxNTdfY29uZmlnLCAwLCBzaXplb2Yoc2kyMTU3X2NvbmZpZykpOworCQkJc2kyMTU3X2NvbmZpZy5mZSA9IGZlMC0+ZHZiLmZyb250ZW5kOworCQkJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CisJCQlzdHJsY3B5KGluZm8udHlwZSwgInNpMjE1NyIsIEkyQ19OQU1FX1NJWkUpOworCQkJaW5mby5hZGRyID0gMHg2MDsKKwkJCWluZm8ucGxhdGZvcm1fZGF0YSA9ICZzaTIxNTdfY29uZmlnOworCQkJcmVxdWVzdF9tb2R1bGUoIiVzIiwgaW5mby50eXBlKTsKKwkJCWNsaWVudF90dW5lciA9IGkyY19uZXdfZGV2aWNlKCZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsICZpbmZvKTsKKwkJCWlmICghY2xpZW50X3R1bmVyIHx8ICFjbGllbnRfdHVuZXItPmRldi5kcml2ZXIpIHsKKwkJCQltb2R1bGVfcHV0KGNsaWVudF9kZW1vZC0+ZGV2LmRyaXZlci0+b3duZXIpOworCQkJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnRfZGVtb2QpOworCQkJCXBvcnQtPmkyY19jbGllbnRfZGVtb2QgPSBOVUxMOworCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOworCQkJfQorCQkJaWYgKCF0cnlfbW9kdWxlX2dldChjbGllbnRfdHVuZXItPmRldi5kcml2ZXItPm93bmVyKSkgeworCQkJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnRfdHVuZXIpOworCQkJCW1vZHVsZV9wdXQoY2xpZW50X2RlbW9kLT5kZXYuZHJpdmVyLT5vd25lcik7CisJCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudF9kZW1vZCk7CisJCQkJcG9ydC0+aTJjX2NsaWVudF9kZW1vZCA9IE5VTEw7CisJCQkJZ290byBmcm9udGVuZF9kZXRhY2g7CisJCQl9CisJCQlwb3J0LT5pMmNfY2xpZW50X3R1bmVyID0gY2xpZW50X3R1bmVyOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFRoZSBmcm9udGVuZCBvZiB5b3VyIERWQi9BVFNDIGNhcmQgIgogCQkJIiBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLApAQCAtMjA0NywxMjMgKzIyMzUsMjkgQEAKIAlpZiAocmV0KQogCQlnb3RvIGZyb250ZW5kX2RldGFjaDsKIAotCS8qIGluaXQgQ0kgJiBNQUMgKi8KLQlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKLQljYXNlIENYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJTMl9DSTogewotCQlzdGF0aWMgc3RydWN0IG5ldHVwX2NhcmRfaW5mbyBjaW5mbzsKKwlyZXQgPSBkdmJfcmVnaXN0ZXJfY2lfbWFjKHBvcnQpOworCWlmIChyZXQpCisJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCi0JCW5ldHVwX2dldF9jYXJkX2luZm8oJmRldi0+aTJjX2J1c1swXS5pMmNfYWRhcCwgJmNpbmZvKTsKLQkJbWVtY3B5KHBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hYywKLQkJCQljaW5mby5wb3J0W3BvcnQtPm5yIC0gMV0ubWFjLCA2KTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTmV0VVAgRHVhbCBEVkItUzIgQ0kgY2FyZCBwb3J0JWQgTUFDPSVwTVxuIiwKLQkJCXBvcnQtPm5yLCBwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWMpOwotCi0JCW5ldHVwX2NpX2luaXQocG9ydCk7Ci0JCWJyZWFrOwotCQl9Ci0JY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCX1RfQ19DSV9SRjogewotCQlzdHJ1Y3QgYWx0ZXJhX2NpX2NvbmZpZyBuZXR1cF9jaV9jZmcgPSB7Ci0JCQkuZGV2ID0gZGV2LC8qIG1hZ2ljIG51bWJlciB0byBpZGVudGlmeSovCi0JCQkuYWRhcHRlciA9ICZwb3J0LT5mcm9udGVuZHMuYWRhcHRlciwvKiBmb3IgQ0kgKi8KLQkJCS5kZW11eCA9ICZmZTAtPmR2Yi5kZW11eCwvKiBmb3IgaHcgcGlkIGZpbHRlciAqLwotCQkJLmZwZ2FfcncgPSBuZXR1cF9hbHRlcmFfZnBnYV9ydywKLQkJfTsKLQotCQlhbHRlcmFfY2lfaW5pdCgmbmV0dXBfY2lfY2ZnLCBwb3J0LT5ucik7Ci0JCWJyZWFrOwotCQl9Ci0JY2FzZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzA6IHsKLQkJdTggZWVwcm9tWzI1Nl07IC8qIDI0QzAyIGkyYyBlZXByb20gKi8KLQotCQlpZiAocG9ydC0+bnIgIT0gMSkKLQkJCWJyZWFrOwotCi0JCS8qIFJlYWQgZW50aXJlIEVFUFJPTSAqLwotCQlkZXYtPmkyY19idXNbMF0uaTJjX2NsaWVudC5hZGRyID0gMHhhMCA+PiAxOwotCQl0dmVlcHJvbV9yZWFkKCZkZXYtPmkyY19idXNbMF0uaTJjX2NsaWVudCwgZWVwcm9tLCBzaXplb2YoZWVwcm9tKSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIlRlVmlpIFM0NzAgTUFDPSAlcE1cbiIsIGVlcHJvbSArIDB4YTApOwotCQltZW1jcHkocG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjLCBlZXByb20gKyAweGEwLCA2KTsKLQkJYnJlYWs7Ci0JCX0KLQljYXNlIENYMjM4ODVfQk9BUkRfRFZCU0tZX1Q5NTgwOgotCWNhc2UgQ1gyMzg4NV9CT0FSRF9EVkJTS1lfUzk1MDoKLQljYXNlIENYMjM4ODVfQk9BUkRfRFZCU0tZX1M5NTI6Ci0JY2FzZSBDWDIzODg1X0JPQVJEX0RWQlNLWV9UOTgyOiB7Ci0JCXU4IGVlcHJvbVsyNTZdOyAvKiAyNEMwMiBpMmMgZWVwcm9tICovCi0KLQkJaWYgKHBvcnQtPm5yID4gMikKLQkJCWJyZWFrOwotCi0JCS8qIFJlYWQgZW50aXJlIEVFUFJPTSAqLwotCQlkZXYtPmkyY19idXNbMF0uaTJjX2NsaWVudC5hZGRyID0gMHhhMCA+PiAxOwotCQl0dmVlcHJvbV9yZWFkKCZkZXYtPmkyY19idXNbMF0uaTJjX2NsaWVudCwgZWVwcm9tLAotCQkJCXNpemVvZihlZXByb20pKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgcG9ydCAlZCBNQUMgYWRkcmVzczogJXBNXG4iLAotCQkJY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSwgcG9ydC0+bnIsCi0JCQllZXByb20gKyAweGMwICsgKHBvcnQtPm5yLTEpICogOCk7Ci0JCW1lbWNweShwb3J0LT5mcm9udGVuZHMuYWRhcHRlci5wcm9wb3NlZF9tYWMsIGVlcHJvbSArIDB4YzAgKwotCQkJKHBvcnQtPm5yLTEpICogOCwgNik7Ci0JCWJyZWFrOwotCQl9Ci0JY2FzZSBDWDIzODg1X0JPQVJEX0RWQlNLWV9TOTUwQzoKLQljYXNlIENYMjM4ODVfQk9BUkRfRFZCU0tZX1Q5ODBDOgotCWNhc2UgQ1gyMzg4NV9CT0FSRF9UVF9DVDJfNDUwMF9DSTogewotCQl1OCBlZXByb21bMjU2XTsgLyogMjRDMDIgaTJjIGVlcHJvbSAqLwotCi0JCS8qIGF0dGFjaCBDSSAqLwotCQltZW1zZXQoJnNwMl9jb25maWcsIDAsIHNpemVvZihzcDJfY29uZmlnKSk7Ci0JCXNwMl9jb25maWcuZHZiX2FkYXAgPSAmcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXI7Ci0JCXNwMl9jb25maWcucHJpdiA9IHBvcnQ7Ci0JCXNwMl9jb25maWcuY2lfY29udHJvbCA9IGN4MjM4ODVfc3AyX2NpX2N0cmw7Ci0JCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOwotCQlzdHJsY3B5KGluZm8udHlwZSwgInNwMiIsIEkyQ19OQU1FX1NJWkUpOwotCQlpbmZvLmFkZHIgPSAweDQwOwotCQlpbmZvLnBsYXRmb3JtX2RhdGEgPSAmc3AyX2NvbmZpZzsKLQkJcmVxdWVzdF9tb2R1bGUoaW5mby50eXBlKTsKLQkJY2xpZW50X2NpID0gaTJjX25ld19kZXZpY2UoJmkyY19idXMyLT5pMmNfYWRhcCwgJmluZm8pOwotCQlpZiAoY2xpZW50X2NpID09IE5VTEwgfHwKLQkJCQljbGllbnRfY2ktPmRldi5kcml2ZXIgPT0gTlVMTCkgewotCQkJaWYgKGNsaWVudF90dW5lcikgewotCQkJCW1vZHVsZV9wdXQoY2xpZW50X3R1bmVyLT5kZXYuZHJpdmVyLT5vd25lcik7Ci0JCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudF90dW5lcik7Ci0JCQl9Ci0JCQlpZiAoY2xpZW50X2RlbW9kKSB7Ci0JCQkJbW9kdWxlX3B1dChjbGllbnRfZGVtb2QtPmRldi5kcml2ZXItPm93bmVyKTsKLQkJCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50X2RlbW9kKTsKLQkJCX0KLQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwotCQl9Ci0JCWlmICghdHJ5X21vZHVsZV9nZXQoY2xpZW50X2NpLT5kZXYuZHJpdmVyLT5vd25lcikpIHsKLQkJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnRfY2kpOwotCQkJaWYgKGNsaWVudF90dW5lcikgewotCQkJCW1vZHVsZV9wdXQoY2xpZW50X3R1bmVyLT5kZXYuZHJpdmVyLT5vd25lcik7Ci0JCQkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudF90dW5lcik7Ci0JCQl9Ci0JCQlpZiAoY2xpZW50X2RlbW9kKSB7Ci0JCQkJbW9kdWxlX3B1dChjbGllbnRfZGVtb2QtPmRldi5kcml2ZXItPm93bmVyKTsKLQkJCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50X2RlbW9kKTsKLQkJCX0KLQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwotCQl9Ci0JCXBvcnQtPmkyY19jbGllbnRfY2kgPSBjbGllbnRfY2k7Ci0KLQkJaWYgKHBvcnQtPm5yICE9IDEpCi0JCQlicmVhazsKLQotCQkvKiBSZWFkIGVudGlyZSBFRVBST00gKi8KLQkJZGV2LT5pMmNfYnVzWzBdLmkyY19jbGllbnQuYWRkciA9IDB4YTAgPj4gMTsKLQkJdHZlZXByb21fcmVhZCgmZGV2LT5pMmNfYnVzWzBdLmkyY19jbGllbnQsIGVlcHJvbSwKLQkJCQlzaXplb2YoZWVwcm9tKSk7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzIE1BQyBhZGRyZXNzOiAlcE1cbiIsCi0JCQljeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lLCBlZXByb20gKyAweGMwKTsKLQkJbWVtY3B5KHBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hYywgZWVwcm9tICsgMHhjMCwgNik7Ci0JCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIAogZnJvbnRlbmRfZGV0YWNoOgorCS8qIHJlbW92ZSBJMkMgY2xpZW50IGZvciB0dW5lciAqLworCWNsaWVudF90dW5lciA9IHBvcnQtPmkyY19jbGllbnRfdHVuZXI7CisJaWYgKGNsaWVudF90dW5lcikgeworCQltb2R1bGVfcHV0KGNsaWVudF90dW5lci0+ZGV2LmRyaXZlci0+b3duZXIpOworCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50X3R1bmVyKTsKKwkJcG9ydC0+aTJjX2NsaWVudF90dW5lciA9IE5VTEw7CisJfQorCisJLyogcmVtb3ZlIEkyQyBjbGllbnQgZm9yIGRlbW9kdWxhdG9yICovCisJY2xpZW50X2RlbW9kID0gcG9ydC0+aTJjX2NsaWVudF9kZW1vZDsKKwlpZiAoY2xpZW50X2RlbW9kKSB7CisJCW1vZHVsZV9wdXQoY2xpZW50X2RlbW9kLT5kZXYuZHJpdmVyLT5vd25lcik7CisJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnRfZGVtb2QpOworCQlwb3J0LT5pMmNfY2xpZW50X2RlbW9kID0gTlVMTDsKKwl9CisKIAlwb3J0LT5nYXRlX2N0cmwgPSBOVUxMOwogCXZiMl9kdmJfZGVhbGxvY19mcm9udGVuZHMoJnBvcnQtPmZyb250ZW5kcyk7CiAJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUtaTJjLmMKaW5kZXggZmQ3MTMwNi4uMTEzNWVhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjM4ODUvY3gyMzg4NS1pMmMuYwpAQCAtMzAwLDggKzMwMCw4IEBACiAJCXJjID0gaTJjX21hc3Rlcl9yZWN2KGMsICZidWYsIDApOwogCQlpZiAocmMgPCAwKQogCQkJY29udGludWU7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBpMmMgc2NhbjogZm91bmQgZGV2aWNlIEAgMHgleCAgWyVzXVxuIiwKLQkJICAgICAgIG5hbWUsIGkgPDwgMSwgaTJjX2RldnNbaV0gPyBpMmNfZGV2c1tpXSA6ICI/Pz8iKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGkyYyBzY2FuOiBmb3VuZCBkZXZpY2UgQCAweCUwNHggIFslc11cbiIsCisJCSAgICAgICBuYW1lLCBpLCBpMmNfZGV2c1tpXSA/IGkyY19kZXZzW2ldIDogIj8/PyIpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyMzg4NS9jeDIzODg1LmggYi9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUuaAppbmRleCAzNmYyZjk2Li5hZWRhOGQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUuaAorKysgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDIzODg1L2N4MjM4ODUuaApAQCAtOTksNyArOTksOCBAQAogI2RlZmluZSBDWDIzODg1X0JPQVJEX0RWQlNLWV9TOTUwICAgICAgICAgICAgICA0OQogI2RlZmluZSBDWDIzODg1X0JPQVJEX0RWQlNLWV9TOTUyICAgICAgICAgICAgICA1MAogI2RlZmluZSBDWDIzODg1X0JPQVJEX0RWQlNLWV9UOTgyICAgICAgICAgICAgICA1MQotI2RlZmluZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9TVEFSQlVSU1QgICAgICA1MgorI2RlZmluZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlI1NTI1ICAgICAgICA1MgorI2RlZmluZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9TVEFSQlVSU1QgICAgICA1MwogCiAjZGVmaW5lIEdQSU9fMCAweDAwMDAwMDAxCiAjZGVmaW5lIEdQSU9fMSAweDAwMDAwMDAyCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9jeDI1ODIxL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDI1ODIxL0tjb25maWcKaW5kZXggNjQzOWE4NC4uMTc1NWQzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyNTgyMS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjU4MjEvS2NvbmZpZwpAQCAtMiw4ICsyLDcgQEAKIAl0cmlzdGF0ZSAiQ29uZXhhbnQgY3gyNTgyMSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSSAmJiBJMkMKIAlzZWxlY3QgSTJDX0FMR09CSVQKLQlzZWxlY3QgVklERU9fQlRDWAotCXNlbGVjdCBWSURFT0JVRl9ETUFfU0cKKwlzZWxlY3QgVklERU9CVUYyX0RNQV9TRwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIENvbmV4YW50IDI1ODIxIGJhc2VkCiAJICBUViBjYXJkcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjU4MjEvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDI1ODIxL01ha2VmaWxlCmluZGV4IGZiNzZjM2QuLmM4Zjg1OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjU4MjEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvY3gyNTgyMS9NYWtlZmlsZQpAQCAtMSw5ICsxLDggQEAKIGN4MjU4MjEteSAgIDo9IGN4MjU4MjEtY29yZS5vIGN4MjU4MjEtY2FyZHMubyBjeDI1ODIxLWkyYy5vIFwKIAkJICAgICAgIGN4MjU4MjEtZ3Bpby5vIGN4MjU4MjEtbWVkdXNhLXZpZGVvLm8gXAotCQkgICAgICAgY3gyNTgyMS12aWRlby5vIGN4MjU4MjEtdmlkZW8tdXBzdHJlYW0ubworCQkgICAgICAgY3gyNTgyMS12aWRlby5vCiAKIG9iai0kKENPTkZJR19WSURFT19DWDI1ODIxKSArPSBjeDI1ODIxLm8KIG9iai0kKENPTkZJR19WSURFT19DWDI1ODIxX0FMU0EpICs9IGN4MjU4MjEtYWxzYS5vCiAKIGNjZmxhZ3MteSArPSAtSWRyaXZlcnMvbWVkaWEvaTJjCi1jY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL21lZGlhL2NvbW1vbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyNTgyMS9jeDI1ODIxLWFsc2EuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjU4MjEvY3gyNTgyMS1hbHNhLmMKaW5kZXggMmRkNWJjYS4uMjRmOTY0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyNTgyMS9jeDI1ODIxLWFsc2EuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDI1ODIxL2N4MjU4MjEtYWxzYS5jCkBAIC02Myw4ICs2MywxMSBAQAogCiBzdHJ1Y3QgY3gyNTgyMV9hdWRpb19idWZmZXIgewogCXVuc2lnbmVkIGludCBicGw7Ci0Jc3RydWN0IGJ0Y3hfcmlzY21lbSByaXNjOwotCXN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgZG1hOworCXN0cnVjdCBjeDI1ODIxX3Jpc2NtZW0gcmlzYzsKKwl2b2lkCQkJKnZhZGRyOworCXN0cnVjdCBzY2F0dGVybGlzdAkqc2dsaXN0OworCWludCAgICAgICAgICAgICAgICAgICAgIHNnbGVuOworCWludCAgICAgICAgICAgICAgICAgICAgIG5yX3BhZ2VzOwogfTsKIAogc3RydWN0IGN4MjU4MjFfYXVkaW9fZGV2IHsKQEAgLTg3LDggKzkwLDYgQEAKIAl1bnNpZ25lZCBpbnQgcGVyaW9kX3NpemU7CiAJdW5zaWduZWQgaW50IG51bV9wZXJpb2RzOwogCi0Jc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hX3Jpc2M7Ci0KIAlzdHJ1Y3QgY3gyNTgyMV9hdWRpb19idWZmZXIgKmJ1ZjsKIAogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwpAQCAtMTQyLDYgKzE0Myw4MyBAQAogCiAjZGVmaW5lIFBDSV9NU0tfQVVEX0VYVCAgICgxIDw8ICA0KQogI2RlZmluZSBQQ0lfTVNLX0FVRF9JTlQgICAoMSA8PCAgMykKKworc3RhdGljIGludCBjeDI1ODIxX2Fsc2FfZG1hX2luaXQoc3RydWN0IGN4MjU4MjFfYXVkaW9fZGV2ICpjaGlwLCBpbnQgbnJfcGFnZXMpCit7CisJc3RydWN0IGN4MjU4MjFfYXVkaW9fYnVmZmVyICpidWYgPSBjaGlwLT5idWY7CisJc3RydWN0IHBhZ2UgKnBnOworCWludCBpOworCisJYnVmLT52YWRkciA9IHZtYWxsb2NfMzIobnJfcGFnZXMgPDwgUEFHRV9TSElGVCk7CisJaWYgKE5VTEwgPT0gYnVmLT52YWRkcikgeworCQlkcHJpbnRrKDEsICJ2bWFsbG9jXzMyKCVkIHBhZ2VzKSBmYWlsZWRcbiIsIG5yX3BhZ2VzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZHByaW50aygxLCAidm1hbGxvYyBpcyBhdCBhZGRyIDB4JTA4bHgsIHNpemU9JWRcbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcpYnVmLT52YWRkciwKKwkJCQlucl9wYWdlcyA8PCBQQUdFX1NISUZUKTsKKworCW1lbXNldChidWYtPnZhZGRyLCAwLCBucl9wYWdlcyA8PCBQQUdFX1NISUZUKTsKKwlidWYtPm5yX3BhZ2VzID0gbnJfcGFnZXM7CisKKwlidWYtPnNnbGlzdCA9IHZ6YWxsb2MoYnVmLT5ucl9wYWdlcyAqIHNpemVvZigqYnVmLT5zZ2xpc3QpKTsKKwlpZiAoTlVMTCA9PSBidWYtPnNnbGlzdCkKKwkJZ290byB2emFsbG9jX2VycjsKKworCXNnX2luaXRfdGFibGUoYnVmLT5zZ2xpc3QsIGJ1Zi0+bnJfcGFnZXMpOworCWZvciAoaSA9IDA7IGkgPCBidWYtPm5yX3BhZ2VzOyBpKyspIHsKKwkJcGcgPSB2bWFsbG9jX3RvX3BhZ2UoYnVmLT52YWRkciArIGkgKiBQQUdFX1NJWkUpOworCQlpZiAoTlVMTCA9PSBwZykKKwkJCWdvdG8gdm1hbGxvY190b19wYWdlX2VycjsKKwkJc2dfc2V0X3BhZ2UoJmJ1Zi0+c2dsaXN0W2ldLCBwZywgUEFHRV9TSVpFLCAwKTsKKwl9CisJcmV0dXJuIDA7CisKK3ZtYWxsb2NfdG9fcGFnZV9lcnI6CisJdmZyZWUoYnVmLT5zZ2xpc3QpOworCWJ1Zi0+c2dsaXN0ID0gTlVMTDsKK3Z6YWxsb2NfZXJyOgorCXZmcmVlKGJ1Zi0+dmFkZHIpOworCWJ1Zi0+dmFkZHIgPSBOVUxMOworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IGN4MjU4MjFfYWxzYV9kbWFfbWFwKHN0cnVjdCBjeDI1ODIxX2F1ZGlvX2RldiAqZGV2KQoreworCXN0cnVjdCBjeDI1ODIxX2F1ZGlvX2J1ZmZlciAqYnVmID0gZGV2LT5idWY7CisKKwlidWYtPnNnbGVuID0gZG1hX21hcF9zZygmZGV2LT5wY2ktPmRldiwgYnVmLT5zZ2xpc3QsCisJCQlidWYtPm5yX3BhZ2VzLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJaWYgKDAgPT0gYnVmLT5zZ2xlbikgeworCQlwcl93YXJuKCIlczogY3gyNTgyMV9hbHNhX21hcF9zZyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjU4MjFfYWxzYV9kbWFfdW5tYXAoc3RydWN0IGN4MjU4MjFfYXVkaW9fZGV2ICpkZXYpCit7CisJc3RydWN0IGN4MjU4MjFfYXVkaW9fYnVmZmVyICpidWYgPSBkZXYtPmJ1ZjsKKworCWlmICghYnVmLT5zZ2xlbikKKwkJcmV0dXJuIDA7CisKKwlkbWFfdW5tYXBfc2coJmRldi0+cGNpLT5kZXYsIGJ1Zi0+c2dsaXN0LCBidWYtPnNnbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCWJ1Zi0+c2dsZW4gPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4MjU4MjFfYWxzYV9kbWFfZnJlZShzdHJ1Y3QgY3gyNTgyMV9hdWRpb19idWZmZXIgKmJ1ZikKK3sKKwl2ZnJlZShidWYtPnNnbGlzdCk7CisJYnVmLT5zZ2xpc3QgPSBOVUxMOworCXZmcmVlKGJ1Zi0+dmFkZHIpOworCWJ1Zi0+dmFkZHIgPSBOVUxMOworCXJldHVybiAwOworfQorCiAvKgogICogQk9BUkQgU3BlY2lmaWM6IFNldHMgYXVkaW8gRE1BCiAgKi8KQEAgLTMzMCwxNSArNDA4LDE3IEBACiAKIHN0YXRpYyBpbnQgZHNwX2J1ZmZlcl9mcmVlKHN0cnVjdCBjeDI1ODIxX2F1ZGlvX2RldiAqY2hpcCkKIHsKKwlzdHJ1Y3QgY3gyNTgyMV9yaXNjbWVtICpyaXNjID0gJmNoaXAtPmJ1Zi0+cmlzYzsKKwogCUJVR19PTighY2hpcC0+ZG1hX3NpemUpOwogCiAJZHByaW50aygyLCAiRnJlZWluZyBidWZmZXJcbiIpOwotCXZpZGVvYnVmX2RtYV91bm1hcCgmY2hpcC0+cGNpLT5kZXYsIGNoaXAtPmRtYV9yaXNjKTsKLQl2aWRlb2J1Zl9kbWFfZnJlZShjaGlwLT5kbWFfcmlzYyk7Ci0JYnRjeF9yaXNjbWVtX2ZyZWUoY2hpcC0+cGNpLCAmY2hpcC0+YnVmLT5yaXNjKTsKKwljeDI1ODIxX2Fsc2FfZG1hX3VubWFwKGNoaXApOworCWN4MjU4MjFfYWxzYV9kbWFfZnJlZShjaGlwLT5idWYpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoY2hpcC0+cGNpLCByaXNjLT5zaXplLCByaXNjLT5jcHUsIHJpc2MtPmRtYSk7CiAJa2ZyZWUoY2hpcC0+YnVmKTsKIAotCWNoaXAtPmRtYV9yaXNjID0gTlVMTDsKKwljaGlwLT5idWYgPSBOVUxMOwogCWNoaXAtPmRtYV9zaXplID0gMDsKIAogCXJldHVybiAwOwpAQCAtNDMwLDggKzUxMCw2IEBACiAJCQkJIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKQogewogCXN0cnVjdCBjeDI1ODIxX2F1ZGlvX2RldiAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWE7Ci0KIAlzdHJ1Y3QgY3gyNTgyMV9hdWRpb19idWZmZXIgKmJ1ZjsKIAlpbnQgcmV0OwogCkBAIC00NTUsMTkgKzUzMywxOCBAQAogCQljaGlwLT5wZXJpb2Rfc2l6ZSA9IEFVRElPX0xJTkVfU0laRTsKIAogCWJ1Zi0+YnBsID0gY2hpcC0+cGVyaW9kX3NpemU7CisJY2hpcC0+YnVmID0gYnVmOwogCi0JZG1hID0gJmJ1Zi0+ZG1hOwotCXZpZGVvYnVmX2RtYV9pbml0KGRtYSk7Ci0JcmV0ID0gdmlkZW9idWZfZG1hX2luaXRfa2VybmVsKGRtYSwgUENJX0RNQV9GUk9NREVWSUNFLAorCXJldCA9IGN4MjU4MjFfYWxzYV9kbWFfaW5pdChjaGlwLAogCQkJKFBBR0VfQUxJR04oY2hpcC0+ZG1hX3NpemUpID4+IFBBR0VfU0hJRlQpKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJvcjsKIAotCXJldCA9IHZpZGVvYnVmX2RtYV9tYXAoJmNoaXAtPnBjaS0+ZGV2LCBkbWEpOworCXJldCA9IGN4MjU4MjFfYWxzYV9kbWFfbWFwKGNoaXApOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycm9yOwogCi0JcmV0ID0gY3gyNTgyMV9yaXNjX2RhdGFidWZmZXJfYXVkaW8oY2hpcC0+cGNpLCAmYnVmLT5yaXNjLCBkbWEtPnNnbGlzdCwKKwlyZXQgPSBjeDI1ODIxX3Jpc2NfZGF0YWJ1ZmZlcl9hdWRpbyhjaGlwLT5wY2ksICZidWYtPnJpc2MsIGJ1Zi0+c2dsaXN0LAogCQkJY2hpcC0+cGVyaW9kX3NpemUsIGNoaXAtPm51bV9wZXJpb2RzLCAxKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcl9pbmZvKCJERUJVRzogRVJST1IgYWZ0ZXIgY3gyNTgyMV9yaXNjX2RhdGFidWZmZXJfYXVkaW8oKVxuIik7CkBAIC00NzksMTYgKzU1NiwxNCBAQAogCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKIAlidWYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7CS8qIGJpdHMgNjMtMzIgKi8KIAotCWNoaXAtPmJ1ZiA9IGJ1ZjsKLQljaGlwLT5kbWFfcmlzYyA9IGRtYTsKLQotCXN1YnN0cmVhbS0+cnVudGltZS0+ZG1hX2FyZWEgPSBjaGlwLT5kbWFfcmlzYy0+dmFkZHI7CisJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYXJlYSA9IGNoaXAtPmJ1Zi0+dmFkZHI7CiAJc3Vic3RyZWFtLT5ydW50aW1lLT5kbWFfYnl0ZXMgPSBjaGlwLT5kbWFfc2l6ZTsKIAlzdWJzdHJlYW0tPnJ1bnRpbWUtPmRtYV9hZGRyID0gMDsKIAogCXJldHVybiAwOwogCiBlcnJvcjoKKwljaGlwLT5idWYgPSBOVUxMOwogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjU4MjEvY3gyNTgyMS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDI1ODIxL2N4MjU4MjEtY29yZS5jCmluZGV4IDM4OWZmZmQuLjU1OWY4MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjU4MjEvY3gyNTgyMS1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvY3gyNTgyMS9jeDI1ODIxLWNvcmUuYwpAQCAtODc0LDEwICs4NzQsOSBAQAogCWlmIChkZXYtPnBjaS0+ZGV2aWNlICE9IDB4ODIxMCkgewogCQlwcl9pbmZvKCIlcygpOiBFeGl0aW5nLiBJbmNvcnJlY3QgSGFyZHdhcmUgZGV2aWNlID0gMHglMDJ4XG4iLAogCQkJX19mdW5jX18sIGRldi0+cGNpLT5kZXZpY2UpOwotCQlyZXR1cm4gLTE7Ci0JfSBlbHNlIHsKLQkJcHJfaW5mbygiQXRoZW5hIEhhcmR3YXJlIGRldmljZSA9IDB4JTAyeFxuIiwgZGV2LT5wY2ktPmRldmljZSk7CisJCXJldHVybiAtRU5PREVWOwogCX0KKwlwcl9pbmZvKCJBdGhlbmEgSGFyZHdhcmUgZGV2aWNlID0gMHglMDJ4XG4iLCBkZXYtPnBjaS0+ZGV2aWNlKTsKIAogCS8qIEFwcGx5IGEgc2Vuc2libGUgY2xvY2sgZnJlcXVlbmN5IGZvciB0aGUgUENJZSBicmlkZ2UgKi8KIAlkZXYtPmNsa19mcmVxID0gMjgwMDAwMDA7CkBAIC05NjYsMTEgKzk2NSwxNSBAQAogCiAJcmVsZWFzZV9tZW1fcmVnaW9uKGRldi0+YmFzZV9pb19hZGRyLCBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGNpLCAwKSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1ZJRF9DSEFOTkVMX05VTSAtIDE7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfVklEX0NBUF9DSEFOTkVMX05VTSAtIDE7IGkrKykgewogCQlpZiAoaSA9PSBTUkFNX0NIMDgpIC8qIGF1ZGlvIGNoYW5uZWwgKi8KIAkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBUT0RPOiBlbmFibGUgd2hlbiB2aWRlbyBvdXRwdXQgaXMgcHJvcGVybHkKKwkJICogc3VwcG9ydGVkLgogCQlpZiAoaSA9PSBTUkFNX0NIMDkgfHwgaSA9PSBTUkFNX0NIMTApCiAJCQljeDI1ODIxX2ZyZWVfbWVtX3Vwc3RyZWFtKCZkZXYtPmNoYW5uZWxzW2ldKTsKKwkJICovCiAJCWN4MjU4MjFfdmlkZW9fdW5yZWdpc3RlcihkZXYsIGkpOwogCX0KIApAQCAtOTc5LDE0ICs5ODIsNDEgQEAKIH0KIEVYUE9SVF9TWU1CT0woY3gyNTgyMV9kZXZfdW5yZWdpc3Rlcik7CiAKK2ludCBjeDI1ODIxX3Jpc2NtZW1fYWxsb2Moc3RydWN0IHBjaV9kZXYgKnBjaSwKKwkJICAgICAgIHN0cnVjdCBjeDI1ODIxX3Jpc2NtZW0gKnJpc2MsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKwlfX2xlMzIgKmNwdTsKKwlkbWFfYWRkcl90IGRtYSA9IDA7CisKKwlpZiAoTlVMTCAhPSByaXNjLT5jcHUgJiYgcmlzYy0+c2l6ZSA8IHNpemUpCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGNpLCByaXNjLT5zaXplLCByaXNjLT5jcHUsIHJpc2MtPmRtYSk7CisJaWYgKE5VTEwgPT0gcmlzYy0+Y3B1KSB7CisJCWNwdSA9IHBjaV96YWxsb2NfY29uc2lzdGVudChwY2ksIHNpemUsICZkbWEpOworCQlpZiAoTlVMTCA9PSBjcHUpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcmlzYy0+Y3B1ICA9IGNwdTsKKwkJcmlzYy0+ZG1hICA9IGRtYTsKKwkJcmlzYy0+c2l6ZSA9IHNpemU7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjeDI1ODIxX3Jpc2NtZW1fYWxsb2MpOworCiBzdGF0aWMgX19sZTMyICpjeDI1ODIxX3Jpc2NfZmllbGQoX19sZTMyICogcnAsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAogCQkJCSAgdW5zaWduZWQgaW50IG9mZnNldCwgdTMyIHN5bmNfbGluZSwKIAkJCQkgIHVuc2lnbmVkIGludCBicGwsIHVuc2lnbmVkIGludCBwYWRkaW5nLAotCQkJCSAgdW5zaWduZWQgaW50IGxpbmVzKQorCQkJCSAgdW5zaWduZWQgaW50IGxpbmVzLCBib29sIGp1bXApCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAl1bnNpZ25lZCBpbnQgbGluZSwgdG9kbzsKIAorCWlmIChqdW1wKSB7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX0pVTVApOworCQkqKHJwKyspID0gY3B1X3RvX2xlMzIoMCk7CisJCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsgLyogYml0cyA2My0zMiAqLworCX0KKwogCS8qIHN5bmMgaW5zdHJ1Y3Rpb24gKi8KIAlpZiAoc3luY19saW5lICE9IE5PX1NZTkNfTElORSkKIAkJKihycCsrKSA9IGNwdV90b19sZTMyKFJJU0NfUkVTWU5DIHwgc3luY19saW5lKTsKQEAgLTEwMzUsNyArMTA2NSw3IEBACiAJcmV0dXJuIHJwOwogfQogCi1pbnQgY3gyNTgyMV9yaXNjX2J1ZmZlcihzdHJ1Y3QgcGNpX2RldiAqcGNpLCBzdHJ1Y3QgYnRjeF9yaXNjbWVtICpyaXNjLAoraW50IGN4MjU4MjFfcmlzY19idWZmZXIoc3RydWN0IHBjaV9kZXYgKnBjaSwgc3RydWN0IGN4MjU4MjFfcmlzY21lbSAqcmlzYywKIAkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCB1bnNpZ25lZCBpbnQgdG9wX29mZnNldCwKIAkJCXVuc2lnbmVkIGludCBib3R0b21fb2Zmc2V0LCB1bnNpZ25lZCBpbnQgYnBsLAogCQkJdW5zaWduZWQgaW50IHBhZGRpbmcsIHVuc2lnbmVkIGludCBsaW5lcykKQEAgLTEwNTIsMTQgKzEwODIsMTQgQEAKIAkJZmllbGRzKys7CiAKIAkvKiBlc3RpbWF0ZSByaXNjIG1lbTogd29yc3QgY2FzZSBpcyBvbmUgd3JpdGUgcGVyIHBhZ2UgYm9yZGVyICsKLQkgICBvbmUgd3JpdGUgcGVyIHNjYW4gbGluZSArIHN5bmNzICsganVtcCAoYWxsIDIgZHdvcmRzKS4gIFBhZGRpbmcKKwkgICBvbmUgd3JpdGUgcGVyIHNjYW4gbGluZSArIHN5bmNzICsganVtcCAoYWxsIDMgZHdvcmRzKS4gIFBhZGRpbmcKIAkgICBjYW4gY2F1c2UgbmV4dCBicGwgdG8gc3RhcnQgY2xvc2UgdG8gYSBwYWdlIGJvcmRlci4gIEZpcnN0IERNQQogCSAgIHJlZ2lvbiBtYXkgYmUgc21hbGxlciB0aGFuIFBBR0VfU0laRSAqLwogCS8qIHdyaXRlIGFuZCBqdW1wIG5lZWQgYW5kIGV4dHJhIGR3b3JkICovCiAJaW5zdHJ1Y3Rpb25zID0gZmllbGRzICogKDEgKyAoKGJwbCArIHBhZGRpbmcpICogbGluZXMpIC8gUEFHRV9TSVpFICsKIAkJCWxpbmVzKTsKLQlpbnN0cnVjdGlvbnMgKz0gMjsKLQlyYyA9IGJ0Y3hfcmlzY21lbV9hbGxvYyhwY2ksIHJpc2MsIGluc3RydWN0aW9ucyAqIDEyKTsKKwlpbnN0cnVjdGlvbnMgKz0gNTsKKwlyYyA9IGN4MjU4MjFfcmlzY21lbV9hbGxvYyhwY2ksIHJpc2MsIGluc3RydWN0aW9ucyAqIDEyKTsKIAogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKQEAgLTEwNjksMTcgKzEwOTksMTcgQEAKIAogCWlmIChVTlNFVCAhPSB0b3Bfb2Zmc2V0KSB7CiAJCXJwID0gY3gyNTgyMV9yaXNjX2ZpZWxkKHJwLCBzZ2xpc3QsIHRvcF9vZmZzZXQsIDAsIGJwbCwgcGFkZGluZywKLQkJCQkJbGluZXMpOworCQkJCQlsaW5lcywgdHJ1ZSk7CiAJfQogCiAJaWYgKFVOU0VUICE9IGJvdHRvbV9vZmZzZXQpIHsKIAkJcnAgPSBjeDI1ODIxX3Jpc2NfZmllbGQocnAsIHNnbGlzdCwgYm90dG9tX29mZnNldCwgMHgyMDAsIGJwbCwKLQkJCQkJcGFkZGluZywgbGluZXMpOworCQkJCQlwYWRkaW5nLCBsaW5lcywgVU5TRVQgPT0gdG9wX29mZnNldCk7CiAJfQogCiAJLyogc2F2ZSBwb2ludGVyIHRvIGptcCBpbnN0cnVjdGlvbiBhZGRyZXNzICovCiAJcmlzYy0+am1wID0gcnA7Ci0JQlVHX09OKChyaXNjLT5qbXAgLSByaXNjLT5jcHUgKyAyKSAqIHNpemVvZigqcmlzYy0+Y3B1KSA+IHJpc2MtPnNpemUpOworCUJVR19PTigocmlzYy0+am1wIC0gcmlzYy0+Y3B1ICsgMykgKiBzaXplb2YoKnJpc2MtPmNwdSkgPiByaXNjLT5zaXplKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTE0Niw3ICsxMTc2LDcgQEAKIH0KIAogaW50IGN4MjU4MjFfcmlzY19kYXRhYnVmZmVyX2F1ZGlvKHN0cnVjdCBwY2lfZGV2ICpwY2ksCi0JCQkJICBzdHJ1Y3QgYnRjeF9yaXNjbWVtICpyaXNjLAorCQkJCSAgc3RydWN0IGN4MjU4MjFfcmlzY21lbSAqcmlzYywKIAkJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAogCQkJCSAgdW5zaWduZWQgaW50IGJwbCwKIAkJCQkgIHVuc2lnbmVkIGludCBsaW5lcywgdW5zaWduZWQgaW50IGxwaSkKQEAgLTExNjMsNyArMTE5Myw3IEBACiAJaW5zdHJ1Y3Rpb25zID0gMSArIChicGwgKiBsaW5lcykgLyBQQUdFX1NJWkUgKyBsaW5lczsKIAlpbnN0cnVjdGlvbnMgKz0gMTsKIAotCXJjID0gYnRjeF9yaXNjbWVtX2FsbG9jKHBjaSwgcmlzYywgaW5zdHJ1Y3Rpb25zICogMTIpOworCXJjID0gY3gyNTgyMV9yaXNjbWVtX2FsbG9jKHBjaSwgcmlzYywgaW5zdHJ1Y3Rpb25zICogMTIpOwogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIApAQCAtMTE3OSw0MCArMTIwOSwxNCBAQAogfQogRVhQT1JUX1NZTUJPTChjeDI1ODIxX3Jpc2NfZGF0YWJ1ZmZlcl9hdWRpbyk7CiAKLWludCBjeDI1ODIxX3Jpc2Nfc3RvcHBlcihzdHJ1Y3QgcGNpX2RldiAqcGNpLCBzdHJ1Y3QgYnRjeF9yaXNjbWVtICpyaXNjLAotCQkJIHUzMiByZWcsIHUzMiBtYXNrLCB1MzIgdmFsdWUpCit2b2lkIGN4MjU4MjFfZnJlZV9idWZmZXIoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmKQogewotCV9fbGUzMiAqcnA7Ci0JaW50IHJjOwotCi0JcmMgPSBidGN4X3Jpc2NtZW1fYWxsb2MocGNpLCByaXNjLCA0ICogMTYpOwotCi0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0JLyogd3JpdGUgcmlzYyBpbnN0cnVjdGlvbnMgKi8KLQlycCA9IHJpc2MtPmNwdTsKLQotCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX1dSSVRFQ1IgfCBSSVNDX0lSUTEpOwotCSoocnArKykgPSBjcHVfdG9fbGUzMihyZWcpOwotCSoocnArKykgPSBjcHVfdG9fbGUzMih2YWx1ZSk7Ci0JKihycCsrKSA9IGNwdV90b19sZTMyKG1hc2spOwotCSoocnArKykgPSBjcHVfdG9fbGUzMihSSVNDX0pVTVApOwotCSoocnArKykgPSBjcHVfdG9fbGUzMihyaXNjLT5kbWEpOwotCSoocnArKykgPSBjcHVfdG9fbGUzMigwKTsJLyogYml0cyA2My0zMiAqLwotCXJldHVybiAwOwotfQotCi12b2lkIGN4MjU4MjFfZnJlZV9idWZmZXIoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEgPSB2aWRlb2J1Zl90b19kbWEoJmJ1Zi0+dmIpOwotCiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKLQl2aWRlb2J1Zl93YWl0b24ocSwgJmJ1Zi0+dmIsIDAsIDApOwotCXZpZGVvYnVmX2RtYV91bm1hcChxLT5kZXYsIGRtYSk7Ci0JdmlkZW9idWZfZG1hX2ZyZWUoZG1hKTsKLQlidGN4X3Jpc2NtZW1fZnJlZSh0b19wY2lfZGV2KHEtPmRldiksICZidWYtPnJpc2MpOwotCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9ORUVEU19JTklUOworCWlmIChXQVJOX09OKGJ1Zi0+cmlzYy5zaXplID09IDApKQorCQlyZXR1cm47CisJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaSwKKwkJCWJ1Zi0+cmlzYy5zaXplLCBidWYtPnJpc2MuY3B1LCBidWYtPnJpc2MuZG1hKTsKKwltZW1zZXQoJmJ1Zi0+cmlzYywgMCwgc2l6ZW9mKGJ1Zi0+cmlzYykpOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgY3gyNTgyMV9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtMTI5NywxNCArMTMwMSwxNSBAQAogCiAJCWdvdG8gZmFpbF91bnJlZ2lzdGVyX2RldmljZTsKIAl9CisJZGV2LT5hbGxvY19jdHggPSB2YjJfZG1hX3NnX2luaXRfY3R4KCZwY2lfZGV2LT5kZXYpOworCWlmIChJU19FUlIoZGV2LT5hbGxvY19jdHgpKSB7CisJCWVyciA9IFBUUl9FUlIoZGV2LT5hbGxvY19jdHgpOworCQlnb3RvIGZhaWxfdW5yZWdpc3Rlcl9wY2k7CisJfQogCiAJZXJyID0gY3gyNTgyMV9kZXZfc2V0dXAoZGV2KTsKLQlpZiAoZXJyKSB7Ci0JCWlmIChlcnIgPT0gLUVCVVNZKQotCQkJZ290byBmYWlsX3VucmVnaXN0ZXJfZGV2aWNlOwotCQllbHNlCi0JCQlnb3RvIGZhaWxfdW5yZWdpc3Rlcl9wY2k7Ci0JfQorCWlmIChlcnIpCisJCWdvdG8gZmFpbF9mcmVlX2N0eDsKIAogCS8qIHByaW50IHBjaSBpbmZvICovCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmZGV2LT5wY2lfcmV2KTsKQEAgLTEzMzQsNiArMTMzOSw4IEBACiAJcHJfaW5mbygiY3gyNTgyMV9pbml0ZGV2KCkgY2FuJ3QgZ2V0IElSUSAhXG4iKTsKIAljeDI1ODIxX2Rldl91bnJlZ2lzdGVyKGRldik7CiAKK2ZhaWxfZnJlZV9jdHg6CisJdmIyX2RtYV9zZ19jbGVhbnVwX2N0eChkZXYtPmFsbG9jX2N0eCk7CiBmYWlsX3VucmVnaXN0ZXJfcGNpOgogCXBjaV9kaXNhYmxlX2RldmljZShwY2lfZGV2KTsKIGZhaWxfdW5yZWdpc3Rlcl9kZXZpY2U6CkBAIC0xMzU3LDYgKzEzNjQsNyBAQAogCQlmcmVlX2lycShwY2lfZGV2LT5pcnEsIGRldik7CiAKIAljeDI1ODIxX2Rldl91bnJlZ2lzdGVyKGRldik7CisJdmIyX2RtYV9zZ19jbGVhbnVwX2N0eChkZXYtPmFsbG9jX2N0eCk7CiAJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CiAJa2ZyZWUoZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjU4MjEvY3gyNTgyMS12aWRlby5jIGIvZHJpdmVycy9tZWRpYS9wY2kvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmMKaW5kZXggM2E0MTlmMS4uN2JjNDk1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwOSBDb25leGFudCBTeXN0ZW1zIEluYy4KICAqICBBdXRob3JzICA8c2h1LmxpbkBjb25leGFudC5jb20+LCA8aGllcC5odXluaEBjb25leGFudC5jb20+Ci0gKiAgQmFzZWQgb24gU3RldmVuIFRvdGggPHN0b3RoQGxpbnV4dHYub3JnPiBjeDIzODg1IGRyaXZlcgorICogIEJhc2VkIG9uIFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4gY3gyNTgyMSBkcml2ZXIKICAqICBQYXJ0cyBhZGFwdGVkL3Rha2VuIGZyb20gRWR1YXJkbyBNb3Njb3NvIFJ1YmlubwogICogIENvcHlyaWdodCAoQykgMjAwOSBFZHVhcmRvIE1vc2Nvc28gUnViaW5vIDxtb3Njb3NvQFRvcG9Mb2dpY2EuY29tPgogICoKQEAgLTQ2LDEwICs0Niw2IEBACiBtb2R1bGVfcGFyYW0oaXJxX2RlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpcnFfZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMgW0lSUSBoYW5kbGVyXSIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHZpZF9saW1pdCA9IDE2OwotbW9kdWxlX3BhcmFtKHZpZF9saW1pdCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0ModmlkX2xpbWl0LCAiY2FwdHVyZSBtZW1vcnkgbGltaXQgaW4gbWVnYWJ5dGVzIik7Ci0KICNkZWZpbmUgRk9STUFUX0ZMQUdTX1BBQ0tFRCAgICAgICAweDAxCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3gyNTgyMV9mbXQgZm9ybWF0c1tdID0gewpAQCAtNzYsNDEgKzcyLDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotdm9pZCBjeDI1ODIxX3ZpZGVvX3dha2V1cChzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEsCi0JCQkgIHUzMiBjb3VudCkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKLQlpbnQgYmM7Ci0KLQlmb3IgKGJjID0gMDs7IGJjKyspIHsKLQkJaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkJCWRwcmludGsoMSwgImJjPSVkICg9MDogYWN0aXZlIGVtcHR5KVxuIiwgYmMpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlidWYgPSBsaXN0X2VudHJ5KHEtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsCi0JCQkJdmIucXVldWUpOwotCi0JCS8qIGNvdW50IGNvbWVzIGZyb20gdGhlIGh3IGFuZCBpdCBpcyAxNmJpdCB3aWRlIC0tCi0JCSAqIHRoaXMgdHJpY2sgaGFuZGxlcyB3cmFwLWFyb3VuZHMgY29ycmVjdGx5IGZvcgotCQkgKiB1cCB0byAzMjc2NyBidWZmZXJzIGluIGZsaWdodC4uLiAqLwotCQlpZiAoKHMxNikgKGNvdW50IC0gYnVmLT5jb3VudCkgPCAwKQotCQkJYnJlYWs7Ci0KLQkJdjRsMl9nZXRfdGltZXN0YW1wKCZidWYtPnZiLnRzKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7Ci0JCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKLQkJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKLQl9Ci0KLQlpZiAobGlzdF9lbXB0eSgmcS0+YWN0aXZlKSkKLQkJZGVsX3RpbWVyKCZxLT50aW1lb3V0KTsKLQllbHNlCi0JCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKLQlpZiAoYmMgIT0gMSkKLQkJcHJfZXJyKCIlczogJWQgYnVmZmVycyBoYW5kbGVkIChzaG91bGQgYmUgMSlcbiIsIF9fZnVuY19fLCBiYyk7Ci19Ci0KIGludCBjeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKIAkJCSAgICBzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqcSwKIAkJCSAgICBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiwKQEAgLTEyMyw3ICs4NCw2IEBACiAKIAkvKiByZXNldCBjb3VudGVyICovCiAJY3hfd3JpdGUoY2hhbm5lbC0+Z3BjbnRfY3RsLCAzKTsKLQlxLT5jb3VudCA9IDE7CiAKIAkvKiBlbmFibGUgaXJxICovCiAJY3hfc2V0KFBDSV9JTlRfTVNLLCBjeF9yZWFkKFBDSV9JTlRfTVNLKSB8ICgxIDw8IGNoYW5uZWwtPmkpKTsKQEAgLTEzOSw4NiArOTksOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjU4MjFfcmVzdGFydF92aWRlb19xdWV1ZShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKLQkJCQkgICAgICAgc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEsCi0JCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwpCi17Ci0Jc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYsICpwcmV2OwotCXN0cnVjdCBsaXN0X2hlYWQgKml0ZW07Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkJYnVmID0gbGlzdF9lbnRyeShxLT5hY3RpdmUubmV4dCwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLAotCQkJCXZiLnF1ZXVlKTsKLQotCQljeDI1ODIxX3N0YXJ0X3ZpZGVvX2RtYShkZXYsIHEsIGJ1ZiwgY2hhbm5lbCk7Ci0KLQkJbGlzdF9mb3JfZWFjaChpdGVtLCAmcS0+YWN0aXZlKSB7Ci0JCQlidWYgPSBsaXN0X2VudHJ5KGl0ZW0sIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIucXVldWUpOwotCQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCX0KLQotCQltb2RfdGltZXIoJnEtPnRpbWVvdXQsIGppZmZpZXMgKyBCVUZGRVJfVElNRU9VVCk7Ci0JCXJldHVybiAwOwotCX0KLQotCXByZXYgPSBOVUxMOwotCWZvciAoOzspIHsKLQkJaWYgKGxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpCi0JCQlyZXR1cm4gMDsKLQotCQlidWYgPSBsaXN0X2VudHJ5KHEtPnF1ZXVlZC5uZXh0LCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsCi0JCQkJdmIucXVldWUpOwotCi0JCWlmIChOVUxMID09IHByZXYpIHsKLQkJCWxpc3RfbW92ZV90YWlsKCZidWYtPnZiLnF1ZXVlLCAmcS0+YWN0aXZlKTsKLQkJCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLCBjaGFubmVsKTsKLQkJCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9BQ1RJVkU7Ci0JCQlidWYtPmNvdW50ID0gcS0+Y291bnQrKzsKLQkJCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKLQkJfSBlbHNlIGlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoICYmCi0JCQkgICBwcmV2LT52Yi5oZWlnaHQgPT0gYnVmLT52Yi5oZWlnaHQgJiYKLQkJCSAgIHByZXYtPmZtdCA9PSBidWYtPmZtdCkgewotCQkJbGlzdF9tb3ZlX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOwotCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKLQkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOwotCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKLQkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7IC8qIEJpdHMgNjMgLSAzMiAqLwotCQl9IGVsc2UgewotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJcHJldiA9IGJ1ZjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGN4MjU4MjFfdmlkX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBjeDI1ODIxX2RhdGEgKnRpbWVvdXRfZGF0YSA9IChzdHJ1Y3QgY3gyNTgyMV9kYXRhICopZGF0YTsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IHRpbWVvdXRfZGF0YS0+ZGV2OwotCWNvbnN0IHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwgPSB0aW1lb3V0X2RhdGEtPmNoYW5uZWw7Ci0Jc3RydWN0IGN4MjU4MjFfZG1hcXVldWUgKnEgPSAmZGV2LT5jaGFubmVsc1tjaGFubmVsLT5pXS5kbWFfdmlkcTsKLQlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogY3gyNTgyMV9zcmFtX2NoYW5uZWxfZHVtcChkZXYsIGNoYW5uZWwpOyAqLwotCWN4X2NsZWFyKGNoYW5uZWwtPmRtYV9jdGwsIDB4MTEpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkJYnVmID0gbGlzdF9lbnRyeShxLT5hY3RpdmUubmV4dCwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLAotCQkJCXZiLnF1ZXVlKTsKLQkJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOwotCi0JCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9FUlJPUjsKLQkJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKLQl9Ci0KLQljeDI1ODIxX3Jlc3RhcnRfdmlkZW9fcXVldWUoZGV2LCBxLCBjaGFubmVsKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNsb2NrLCBmbGFncyk7Ci19Ci0KIGludCBjeDI1ODIxX3ZpZGVvX2lycShzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwgaW50IGNoYW5fbnVtLCB1MzIgc3RhdHVzKQogewotCXUzMiBjb3VudCA9IDA7CiAJaW50IGhhbmRsZWQgPSAwOwogCXUzMiBtYXNrOwogCWNvbnN0IHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoYW5uZWwgPSBkZXYtPmNoYW5uZWxzW2NoYW5fbnVtXS5zcmFtX2NoYW5uZWxzOwpAQCAtMjM5LDMxNyArMTIxLDIwMSBAQAogCiAJLyogcmlzYzEgeSAqLwogCWlmIChzdGF0dXMgJiBGTERfVklEX0RTVF9SSVNDMSkgewotCQlzcGluX2xvY2soJmRldi0+c2xvY2spOwotCQljb3VudCA9IGN4X3JlYWQoY2hhbm5lbC0+Z3BjbnQpOwotCQljeDI1ODIxX3ZpZGVvX3dha2V1cChkZXYsICZkZXYtPmNoYW5uZWxzW2NoYW5uZWwtPmldLmRtYV92aWRxLAotCQkJCWNvdW50KTsKLQkJc3Bpbl91bmxvY2soJmRldi0+c2xvY2spOwotCQloYW5kbGVkKys7Ci0JfQorCQlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqZG1hcSA9CisJCQkmZGV2LT5jaGFubmVsc1tjaGFubmVsLT5pXS5kbWFfdmlkcTsKKwkJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWY7CiAKLQkvKiByaXNjMiB5ICovCi0JaWYgKHN0YXR1cyAmIDB4MTApIHsKLQkJZHByaW50aygyLCAic3RvcHBlciB2aWRlb1xuIik7CiAJCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7Ci0JCWN4MjU4MjFfcmVzdGFydF92aWRlb19xdWV1ZShkZXYsCi0JCQkJJmRldi0+Y2hhbm5lbHNbY2hhbm5lbC0+aV0uZG1hX3ZpZHEsIGNoYW5uZWwpOworCQlpZiAoIWxpc3RfZW1wdHkoJmRtYXEtPmFjdGl2ZSkpIHsKKwkJCWJ1ZiA9IGxpc3RfZW50cnkoZG1hcS0+YWN0aXZlLm5leHQsCisJCQkJCSBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHF1ZXVlKTsKKworCQkJdjRsMl9nZXRfdGltZXN0YW1wKCZidWYtPnZiLnY0bDJfYnVmLnRpbWVzdGFtcCk7CisJCQlidWYtPnZiLnY0bDJfYnVmLnNlcXVlbmNlID0gZG1hcS0+Y291bnQrKzsKKwkJCWxpc3RfZGVsKCZidWYtPnF1ZXVlKTsKKwkJCXZiMl9idWZmZXJfZG9uZSgmYnVmLT52YiwgVkIyX0JVRl9TVEFURV9ET05FKTsKKwkJfQogCQlzcGluX3VubG9jaygmZGV2LT5zbG9jayk7CiAJCWhhbmRsZWQrKzsKIAl9CiAJcmV0dXJuIGhhbmRsZWQ7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNTgyMV9idWZmZXJfc2V0dXAoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgKmNvdW50LAotCQkgdW5zaWduZWQgaW50ICpzaXplKQorc3RhdGljIGludCBjeDI1ODIxX3F1ZXVlX3NldHVwKHN0cnVjdCB2YjJfcXVldWUgKnEsIGNvbnN0IHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10LAorCQkJICAgdW5zaWduZWQgaW50ICpudW1fYnVmZmVycywgdW5zaWduZWQgaW50ICpudW1fcGxhbmVzLAorCQkJICAgdW5zaWduZWQgaW50IHNpemVzW10sIHZvaWQgKmFsbG9jX2N0eHNbXSkKIHsKLQlzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsICpjaGFuID0gcS0+cHJpdl9kYXRhOworCXN0cnVjdCBjeDI1ODIxX2NoYW5uZWwgKmNoYW4gPSBxLT5kcnZfcHJpdjsKKwl1bnNpZ25lZCBzaXplID0gKGNoYW4tPmZtdC0+ZGVwdGggKiBjaGFuLT53aWR0aCAqIGNoYW4tPmhlaWdodCkgPj4gMzsKIAotCSpzaXplID0gY2hhbi0+Zm10LT5kZXB0aCAqIGNoYW4tPndpZHRoICogY2hhbi0+aGVpZ2h0ID4+IDM7CisJaWYgKGZtdCAmJiBmbXQtPmZtdC5waXguc2l6ZWltYWdlIDwgc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoMCA9PSAqY291bnQpCi0JCSpjb3VudCA9IDMyOwotCi0JaWYgKCpzaXplICogKmNvdW50ID4gdmlkX2xpbWl0ICogMTAyNCAqIDEwMjQpCi0JCSpjb3VudCA9ICh2aWRfbGltaXQgKiAxMDI0ICogMTAyNCkgLyAqc2l6ZTsKLQorCSpudW1fcGxhbmVzID0gMTsKKwlzaXplc1swXSA9IGZtdCA/IGZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgOiBzaXplOworCWFsbG9jX2N0eHNbMF0gPSBjaGFuLT5kZXYtPmFsbG9jX2N0eDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI1ODIxX2J1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsCi0JCSAgIGVudW0gdjRsMl9maWVsZCBmaWVsZCkKK3N0YXRpYyBpbnQgY3gyNTgyMV9idWZmZXJfcHJlcGFyZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCiB7Ci0Jc3RydWN0IGN4MjU4MjFfY2hhbm5lbCAqY2hhbiA9IHEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsICpjaGFuID0gdmItPnZiMl9xdWV1ZS0+ZHJ2X3ByaXY7CiAJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQogCQljb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOwotCWludCByYywgaW5pdF9idWZmZXIgPSAwOworCXN0cnVjdCBzZ190YWJsZSAqc2d0ID0gdmIyX2RtYV9zZ19wbGFuZV9kZXNjKHZiLCAwKTsKIAl1MzIgbGluZTBfb2Zmc2V0OwotCXN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSA9IHZpZGVvYnVmX3RvX2RtYSgmYnVmLT52Yik7CiAJaW50IGJwbF9sb2NhbCA9IExJTkVfU0laRV9EMTsKKwlpbnQgcmV0OwogCi0JQlVHX09OKE5VTEwgPT0gY2hhbi0+Zm10KTsKLQlpZiAoY2hhbi0+d2lkdGggPCA0OCB8fCBjaGFuLT53aWR0aCA+IDcyMCB8fAotCSAgICBjaGFuLT5oZWlnaHQgPCAzMiB8fCBjaGFuLT5oZWlnaHQgPiA1NzYpCisJaWYgKGNoYW4tPnBpeGVsX2Zvcm1hdHMgPT0gUElYRUxfRlJNVF80MTEpCisJCWJ1Zi0+YnBsID0gKGNoYW4tPmZtdC0+ZGVwdGggKiBjaGFuLT53aWR0aCkgPj4gMzsKKwllbHNlCisJCWJ1Zi0+YnBsID0gKGNoYW4tPmZtdC0+ZGVwdGggPj4gMykgKiBjaGFuLT53aWR0aDsKKworCWlmICh2YjJfcGxhbmVfc2l6ZSh2YiwgMCkgPCBjaGFuLT5oZWlnaHQgKiBidWYtPmJwbCkKIAkJcmV0dXJuIC1FSU5WQUw7CisJdmIyX3NldF9wbGFuZV9wYXlsb2FkKHZiLCAwLCBjaGFuLT5oZWlnaHQgKiBidWYtPmJwbCk7CisJYnVmLT52Yi52NGwyX2J1Zi5maWVsZCA9IGNoYW4tPmZpZWxkOwogCi0JYnVmLT52Yi5zaXplID0gKGNoYW4tPndpZHRoICogY2hhbi0+aGVpZ2h0ICogY2hhbi0+Zm10LT5kZXB0aCkgPj4gMzsKKwlpZiAoY2hhbi0+cGl4ZWxfZm9ybWF0cyA9PSBQSVhFTF9GUk1UXzQxMSkgeworCQlicGxfbG9jYWwgPSBidWYtPmJwbDsKKwl9IGVsc2UgeworCQlicGxfbG9jYWwgPSBidWYtPmJwbDsgICAvKiBEZWZhdWx0ICovCiAKLQlpZiAoMCAhPSBidWYtPnZiLmJhZGRyICYmIGJ1Zi0+dmIuYnNpemUgPCBidWYtPnZiLnNpemUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGJ1Zi0+Zm10ICE9IGNoYW4tPmZtdCB8fAotCSAgICBidWYtPnZiLndpZHRoICE9IGNoYW4tPndpZHRoIHx8Ci0JICAgIGJ1Zi0+dmIuaGVpZ2h0ICE9IGNoYW4tPmhlaWdodCB8fCBidWYtPnZiLmZpZWxkICE9IGZpZWxkKSB7Ci0JCWJ1Zi0+Zm10ID0gY2hhbi0+Zm10OwotCQlidWYtPnZiLndpZHRoID0gY2hhbi0+d2lkdGg7Ci0JCWJ1Zi0+dmIuaGVpZ2h0ID0gY2hhbi0+aGVpZ2h0OwotCQlidWYtPnZiLmZpZWxkID0gZmllbGQ7Ci0JCWluaXRfYnVmZmVyID0gMTsKLQl9Ci0KLQlpZiAoVklERU9CVUZfTkVFRFNfSU5JVCA9PSBidWYtPnZiLnN0YXRlKSB7Ci0JCWluaXRfYnVmZmVyID0gMTsKLQkJcmMgPSB2aWRlb2J1Zl9pb2xvY2socSwgJmJ1Zi0+dmIsIE5VTEwpOwotCQlpZiAoMCAhPSByYykgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgcHJfZm10KCJ2aWRlb2J1Zl9pb2xvY2sgZmFpbGVkIVxuIikpOwotCQkJZ290byBmYWlsOworCQlpZiAoY2hhbi0+dXNlX2NpZl9yZXNvbHV0aW9uKSB7CisJCQlpZiAoZGV2LT50dm5vcm0gJiBWNEwyX1NURF82MjVfNTApCisJCQkJYnBsX2xvY2FsID0gMzUyIDw8IDE7CisJCQllbHNlCisJCQkJYnBsX2xvY2FsID0gY2hhbi0+Y2lmX3dpZHRoIDw8IDE7CiAJCX0KIAl9CiAKLQlkcHJpbnRrKDEsICJpbml0X2J1ZmZlcj0lZFxuIiwgaW5pdF9idWZmZXIpOworCXN3aXRjaCAoY2hhbi0+ZmllbGQpIHsKKwljYXNlIFY0TDJfRklFTERfVE9QOgorCQlyZXQgPSBjeDI1ODIxX3Jpc2NfYnVmZmVyKGRldi0+cGNpLCAmYnVmLT5yaXNjLAorCQkJCXNndC0+c2dsLCAwLCBVTlNFVCwKKwkJCQlidWYtPmJwbCwgMCwgY2hhbi0+aGVpZ2h0KTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0ZJRUxEX0JPVFRPTToKKwkJcmV0ID0gY3gyNTgyMV9yaXNjX2J1ZmZlcihkZXYtPnBjaSwgJmJ1Zi0+cmlzYywKKwkJCQlzZ3QtPnNnbCwgVU5TRVQsIDAsCisJCQkJYnVmLT5icGwsIDAsIGNoYW4tPmhlaWdodCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgorCQkvKiBBbGwgb3RoZXIgZm9ybWF0cyBhcmUgdG9wIGZpZWxkIGZpcnN0ICovCisJCWxpbmUwX29mZnNldCA9IDA7CisJCWRwcmludGsoMSwgInRvcCBmaWVsZCBmaXJzdFxuIik7CiAKLQlpZiAoaW5pdF9idWZmZXIpIHsKLQkJaWYgKGNoYW4tPnBpeGVsX2Zvcm1hdHMgPT0gUElYRUxfRlJNVF80MTEpCi0JCQlidWYtPmJwbCA9IChidWYtPmZtdC0+ZGVwdGggKiBidWYtPnZiLndpZHRoKSA+PiAzOwotCQllbHNlCi0JCQlidWYtPmJwbCA9IChidWYtPmZtdC0+ZGVwdGggPj4gMykgKiAoYnVmLT52Yi53aWR0aCk7Ci0KLQkJaWYgKGNoYW4tPnBpeGVsX2Zvcm1hdHMgPT0gUElYRUxfRlJNVF80MTEpIHsKLQkJCWJwbF9sb2NhbCA9IGJ1Zi0+YnBsOwotCQl9IGVsc2UgewotCQkJYnBsX2xvY2FsID0gYnVmLT5icGw7ICAgLyogRGVmYXVsdCAqLwotCi0JCQlpZiAoY2hhbi0+dXNlX2NpZl9yZXNvbHV0aW9uKSB7Ci0JCQkJaWYgKGRldi0+dHZub3JtICYgVjRMMl9TVERfNjI1XzUwKQotCQkJCQlicGxfbG9jYWwgPSAzNTIgPDwgMTsKLQkJCQllbHNlCi0JCQkJCWJwbF9sb2NhbCA9IGNoYW4tPmNpZl93aWR0aCA8PCAxOwotCQkJfQotCQl9Ci0KLQkJc3dpdGNoIChidWYtPnZiLmZpZWxkKSB7Ci0JCWNhc2UgVjRMMl9GSUVMRF9UT1A6Ci0JCQljeDI1ODIxX3Jpc2NfYnVmZmVyKGRldi0+cGNpLCAmYnVmLT5yaXNjLAotCQkJCQkgICAgZG1hLT5zZ2xpc3QsIDAsIFVOU0VULAotCQkJCQkgICAgYnVmLT5icGwsIDAsIGJ1Zi0+dmIuaGVpZ2h0KTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfRklFTERfQk9UVE9NOgotCQkJY3gyNTgyMV9yaXNjX2J1ZmZlcihkZXYtPnBjaSwgJmJ1Zi0+cmlzYywKLQkJCQkJICAgIGRtYS0+c2dsaXN0LCBVTlNFVCwgMCwKLQkJCQkJICAgIGJ1Zi0+YnBsLCAwLCBidWYtPnZiLmhlaWdodCk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6Ci0JCQkvKiBBbGwgb3RoZXIgZm9ybWF0cyBhcmUgdG9wIGZpZWxkIGZpcnN0ICovCi0JCQlsaW5lMF9vZmZzZXQgPSAwOwotCQkJZHByaW50aygxLCAidG9wIGZpZWxkIGZpcnN0XG4iKTsKLQotCQkJY3gyNTgyMV9yaXNjX2J1ZmZlcihkZXYtPnBjaSwgJmJ1Zi0+cmlzYywKLQkJCQkJICAgIGRtYS0+c2dsaXN0LCBsaW5lMF9vZmZzZXQsCi0JCQkJCSAgICBicGxfbG9jYWwsIGJwbF9sb2NhbCwgYnBsX2xvY2FsLAotCQkJCQkgICAgYnVmLT52Yi5oZWlnaHQgPj4gMSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0ZJRUxEX1NFUV9UQjoKLQkJCWN4MjU4MjFfcmlzY19idWZmZXIoZGV2LT5wY2ksICZidWYtPnJpc2MsCi0JCQkJCSAgICBkbWEtPnNnbGlzdCwKLQkJCQkJICAgIDAsIGJ1Zi0+YnBsICogKGJ1Zi0+dmIuaGVpZ2h0ID4+IDEpLAotCQkJCQkgICAgYnVmLT5icGwsIDAsIGJ1Zi0+dmIuaGVpZ2h0ID4+IDEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9GSUVMRF9TRVFfQlQ6Ci0JCQljeDI1ODIxX3Jpc2NfYnVmZmVyKGRldi0+cGNpLCAmYnVmLT5yaXNjLAotCQkJCQkgICAgZG1hLT5zZ2xpc3QsCi0JCQkJCSAgICBidWYtPmJwbCAqIChidWYtPnZiLmhlaWdodCA+PiAxKSwgMCwKLQkJCQkJICAgIGJ1Zi0+YnBsLCAwLCBidWYtPnZiLmhlaWdodCA+PiAxKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQlVHKCk7Ci0JCX0KKwkJcmV0ID0gY3gyNTgyMV9yaXNjX2J1ZmZlcihkZXYtPnBjaSwgJmJ1Zi0+cmlzYywKKwkJCQlzZ3QtPnNnbCwgbGluZTBfb2Zmc2V0LAorCQkJCWJwbF9sb2NhbCwgYnBsX2xvY2FsLCBicGxfbG9jYWwsCisJCQkJY2hhbi0+aGVpZ2h0ID4+IDEpOworCQlicmVhazsKKwljYXNlIFY0TDJfRklFTERfU0VRX1RCOgorCQlyZXQgPSBjeDI1ODIxX3Jpc2NfYnVmZmVyKGRldi0+cGNpLCAmYnVmLT5yaXNjLAorCQkJCXNndC0+c2dsLAorCQkJCTAsIGJ1Zi0+YnBsICogKGNoYW4tPmhlaWdodCA+PiAxKSwKKwkJCQlidWYtPmJwbCwgMCwgY2hhbi0+aGVpZ2h0ID4+IDEpOworCQlicmVhazsKKwljYXNlIFY0TDJfRklFTERfU0VRX0JUOgorCQlyZXQgPSBjeDI1ODIxX3Jpc2NfYnVmZmVyKGRldi0+cGNpLCAmYnVmLT5yaXNjLAorCQkJCXNndC0+c2dsLAorCQkJCWJ1Zi0+YnBsICogKGNoYW4tPmhlaWdodCA+PiAxKSwgMCwKKwkJCQlidWYtPmJwbCwgMCwgY2hhbi0+aGVpZ2h0ID4+IDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OKDEpOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKIAl9CiAKIAlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9wcmVwIC0gJWR4JWQgJWRicHAgXCIlc1wiIC0gZG1hPTB4JTA4bHhcbiIsCi0JCWJ1ZiwgYnVmLT52Yi5pLCBjaGFuLT53aWR0aCwgY2hhbi0+aGVpZ2h0LCBjaGFuLT5mbXQtPmRlcHRoLAotCQljaGFuLT5mbXQtPm5hbWUsICh1bnNpZ25lZCBsb25nKWJ1Zi0+cmlzYy5kbWEpOworCQlidWYsIGJ1Zi0+dmIudjRsMl9idWYuaW5kZXgsIGNoYW4tPndpZHRoLCBjaGFuLT5oZWlnaHQsCisJCWNoYW4tPmZtdC0+ZGVwdGgsIGNoYW4tPmZtdC0+bmFtZSwKKwkJKHVuc2lnbmVkIGxvbmcpYnVmLT5yaXNjLmRtYSk7CiAKLQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7Ci0KLQlyZXR1cm4gMDsKLQotZmFpbDoKLQljeDI1ODIxX2ZyZWVfYnVmZmVyKHEsIGJ1Zik7Ci0JcmV0dXJuIHJjOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGN4MjU4MjFfYnVmZmVyX3JlbGVhc2Uoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAotCQkJICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQorc3RhdGljIHZvaWQgY3gyNTgyMV9idWZmZXJfZmluaXNoKHN0cnVjdCB2YjJfYnVmZmVyICp2YikKIHsKIAlzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgKmJ1ZiA9CiAJCWNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGN4MjU4MjFfYnVmZmVyLCB2Yik7Ci0KLQljeDI1ODIxX2ZyZWVfYnVmZmVyKHEsIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbnQgY3gyNTgyMV92aWRlb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsICpjaGFuID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCXJldHVybiB2aWRlb2J1Zl9tbWFwX21hcHBlcigmY2hhbi0+dmlkcSwgdm1hKTsKLX0KLQotCi1zdGF0aWMgdm9pZCBidWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCi17Ci0Jc3RydWN0IGN4MjU4MjFfYnVmZmVyICpidWYgPQotCQljb250YWluZXJfb2YodmIsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgdmIpOwotCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqcHJldjsKLQlzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsICpjaGFuID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsICpjaGFuID0gdmItPnZiMl9xdWV1ZS0+ZHJ2X3ByaXY7CiAJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBjaGFuLT5kZXY7CisKKwljeDI1ODIxX2ZyZWVfYnVmZmVyKGRldiwgYnVmKTsKK30KKworc3RhdGljIHZvaWQgY3gyNTgyMV9idWZmZXJfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0KKwkJY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIsIHZiKTsKKwlzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsICpjaGFuID0gdmItPnZiMl9xdWV1ZS0+ZHJ2X3ByaXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBjaGFuLT5kZXY7CisJc3RydWN0IGN4MjU4MjFfYnVmZmVyICpwcmV2OwogCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpxID0gJmRldi0+Y2hhbm5lbHNbY2hhbi0+aWRdLmRtYV92aWRxOwogCi0JLyogYWRkIGp1bXAgdG8gc3RvcHBlciAqLwotCWJ1Zi0+cmlzYy5qbXBbMF0gPSBjcHVfdG9fbGUzMihSSVNDX0pVTVAgfCBSSVNDX0lSUTEgfCBSSVNDX0NOVF9JTkMpOwotCWJ1Zi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihxLT5zdG9wcGVyLmRtYSk7Ci0JYnVmLT5yaXNjLmptcFsyXSA9IGNwdV90b19sZTMyKDApOyAgICAgIC8qIGJpdHMgNjMtMzIgKi8KKwlidWYtPnJpc2MuY3B1WzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSArIDEyKTsKKwlidWYtPnJpc2Muam1wWzBdID0gY3B1X3RvX2xlMzIoUklTQ19KVU1QIHwgUklTQ19DTlRfSU5DKTsKKwlidWYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSArIDEyKTsKKwlidWYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7IC8qIGJpdHMgNjMtMzIgKi8KIAotCWRwcmludGsoMiwgImptcCB0byBzdG9wcGVyICgweCV4KVxuIiwgYnVmLT5yaXNjLmptcFsxXSk7Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJnEtPnF1ZXVlZCkpIHsKLQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7Ci0JCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7Ci0JCWRwcmludGsoMiwgIlslcC8lZF0gYnVmZmVyX3F1ZXVlIC0gYXBwZW5kIHRvIHF1ZXVlZFxuIiwgYnVmLAotCQkJCWJ1Zi0+dmIuaSk7Ci0KLQl9IGVsc2UgaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpIHsKLQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPmFjdGl2ZSk7Ci0JCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgcSwgYnVmLCBjaGFuLT5zcmFtX2NoYW5uZWxzKTsKLQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKLQkJYnVmLT5jb3VudCA9IHEtPmNvdW50Kys7Ci0JCW1vZF90aW1lcigmcS0+dGltZW91dCwgamlmZmllcyArIEJVRkZFUl9USU1FT1VUKTsKLQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBhY3RpdmUsIGJ1ZiBjbnQgPSAlZCwgcS0+Y291bnQgPSAlZFxuIiwKLQkJCQlidWYsIGJ1Zi0+dmIuaSwgYnVmLT5jb3VudCwgcS0+Y291bnQpOworCWlmIChsaXN0X2VtcHR5KCZxLT5hY3RpdmUpKSB7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+cXVldWUsICZxLT5hY3RpdmUpOwogCX0gZWxzZSB7CisJCWJ1Zi0+cmlzYy5jcHVbMF0gfD0gY3B1X3RvX2xlMzIoUklTQ19JUlExKTsKIAkJcHJldiA9IGxpc3RfZW50cnkocS0+YWN0aXZlLnByZXYsIHN0cnVjdCBjeDI1ODIxX2J1ZmZlciwKLQkJCQl2Yi5xdWV1ZSk7Ci0JCWlmIChwcmV2LT52Yi53aWR0aCA9PSBidWYtPnZiLndpZHRoCi0JCSAgICYmIHByZXYtPnZiLmhlaWdodCA9PSBidWYtPnZiLmhlaWdodAotCQkgICAmJiBwcmV2LT5mbXQgPT0gYnVmLT5mbXQpIHsKLQkJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZxLT5hY3RpdmUpOwotCQkJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0FDVElWRTsKLQkJCWJ1Zi0+Y291bnQgPSBxLT5jb3VudCsrOwotCQkJcHJldi0+cmlzYy5qbXBbMV0gPSBjcHVfdG9fbGUzMihidWYtPnJpc2MuZG1hKTsKLQotCQkJLyogNjQgYml0IGJpdHMgNjMtMzIgKi8KLQkJCXByZXYtPnJpc2Muam1wWzJdID0gY3B1X3RvX2xlMzIoMCk7Ci0JCQlkcHJpbnRrKDIsICJbJXAvJWRdIGJ1ZmZlcl9xdWV1ZSAtIGFwcGVuZCB0byBhY3RpdmUsIGJ1Zi0+Y291bnQ9JWRcbiIsCi0JCQkJCWJ1ZiwgYnVmLT52Yi5pLCBidWYtPmNvdW50KTsKLQotCQl9IGVsc2UgewotCQkJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnEtPnF1ZXVlZCk7Ci0JCQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwotCQkJZHByaW50aygyLCAiWyVwLyVkXSBidWZmZXJfcXVldWUgLSBmaXJzdCBxdWV1ZWRcbiIsIGJ1ZiwKLQkJCQkJYnVmLT52Yi5pKTsKLQkJfQorCQkJCXF1ZXVlKTsKKwkJbGlzdF9hZGRfdGFpbCgmYnVmLT5xdWV1ZSwgJnEtPmFjdGl2ZSk7CisJCXByZXYtPnJpc2Muam1wWzFdID0gY3B1X3RvX2xlMzIoYnVmLT5yaXNjLmRtYSk7CiAJfQotCi0JaWYgKGxpc3RfZW1wdHkoJnEtPmFjdGl2ZSkpCi0JCWRwcmludGsoMiwgImFjdGl2ZSBxdWV1ZSBlbXB0eSFcbiIpOwogfQogCi1zdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBjeDI1ODIxX3ZpZGVvX3FvcHMgPSB7Ci0JLmJ1Zl9zZXR1cCA9IGN4MjU4MjFfYnVmZmVyX3NldHVwLAotCS5idWZfcHJlcGFyZSA9IGN4MjU4MjFfYnVmZmVyX3ByZXBhcmUsCi0JLmJ1Zl9xdWV1ZSA9IGJ1ZmZlcl9xdWV1ZSwKLQkuYnVmX3JlbGVhc2UgPSBjeDI1ODIxX2J1ZmZlcl9yZWxlYXNlLAorc3RhdGljIGludCBjeDI1ODIxX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IGN4MjU4MjFfY2hhbm5lbCAqY2hhbiA9IHEtPmRydl9wcml2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gY2hhbi0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlICpkbWFxID0gJmRldi0+Y2hhbm5lbHNbY2hhbi0+aWRdLmRtYV92aWRxOworCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0gbGlzdF9lbnRyeShkbWFxLT5hY3RpdmUubmV4dCwKKwkJCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgcXVldWUpOworCisJZG1hcS0+Y291bnQgPSAwOworCWN4MjU4MjFfc3RhcnRfdmlkZW9fZG1hKGRldiwgZG1hcSwgYnVmLCBjaGFuLT5zcmFtX2NoYW5uZWxzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3gyNTgyMV9zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICpxKQoreworCXN0cnVjdCBjeDI1ODIxX2NoYW5uZWwgKmNoYW4gPSBxLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGNoYW4tPmRldjsKKwlzdHJ1Y3QgY3gyNTgyMV9kbWFxdWV1ZSAqZG1hcSA9ICZkZXYtPmNoYW5uZWxzW2NoYW4tPmlkXS5kbWFfdmlkcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJY3hfd3JpdGUoY2hhbi0+c3JhbV9jaGFubmVscy0+ZG1hX2N0bCwgMCk7IC8qIEZJRk8gYW5kIFJJU0MgZGlzYWJsZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLCBmbGFncyk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkbWFxLT5hY3RpdmUpKSB7CisJCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmID0gbGlzdF9lbnRyeShkbWFxLT5hY3RpdmUubmV4dCwKKwkJCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciwgcXVldWUpOworCisJCWxpc3RfZGVsKCZidWYtPnF1ZXVlKTsKKwkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZiLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgc3RydWN0IHZiMl9vcHMgY3gyNTgyMV92aWRlb19xb3BzID0geworCS5xdWV1ZV9zZXR1cCAgICA9IGN4MjU4MjFfcXVldWVfc2V0dXAsCisJLmJ1Zl9wcmVwYXJlICA9IGN4MjU4MjFfYnVmZmVyX3ByZXBhcmUsCisJLmJ1Zl9maW5pc2ggPSBjeDI1ODIxX2J1ZmZlcl9maW5pc2gsCisJLmJ1Zl9xdWV1ZSAgICA9IGN4MjU4MjFfYnVmZmVyX3F1ZXVlLAorCS53YWl0X3ByZXBhcmUgPSB2YjJfb3BzX3dhaXRfcHJlcGFyZSwKKwkud2FpdF9maW5pc2ggPSB2YjJfb3BzX3dhaXRfZmluaXNoLAorCS5zdGFydF9zdHJlYW1pbmcgPSBjeDI1ODIxX3N0YXJ0X3N0cmVhbWluZywKKwkuc3RvcF9zdHJlYW1pbmcgPSBjeDI1ODIxX3N0b3Bfc3RyZWFtaW5nLAogfTsKIAotc3RhdGljIHNzaXplX3QgdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBkYXRhLCBzaXplX3QgY291bnQsCi0JCQkgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCB2NGwyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsICpjaGFuID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGNoYW4tPmRldjsKLQlpbnQgZXJyID0gMDsKLQotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+bG9jaykpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JaWYgKGNoYW4tPnN0cmVhbWluZ19maCAmJiBjaGFuLT5zdHJlYW1pbmdfZmggIT0gZmgpIHsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIHVubG9jazsKLQl9Ci0JY2hhbi0+c3RyZWFtaW5nX2ZoID0gZmg7Ci0KLQllcnIgPSB2aWRlb2J1Zl9yZWFkX29uZSgmY2hhbi0+dmlkcSwgZGF0YSwgY291bnQsIHBwb3MsCi0JCQkJZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotdW5sb2NrOgotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0Jc3RydWN0IGN4MjU4MjFfY2hhbm5lbCAqY2hhbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JdW5zaWduZWQgbG9uZyByZXFfZXZlbnRzID0gcG9sbF9yZXF1ZXN0ZWRfZXZlbnRzKHdhaXQpOwotCXVuc2lnbmVkIGludCByZXMgPSB2NGwyX2N0cmxfcG9sbChmaWxlLCB3YWl0KTsKLQotCWlmIChyZXFfZXZlbnRzICYgKFBPTExJTiB8IFBPTExSRE5PUk0pKQotCQlyZXMgfD0gdmlkZW9idWZfcG9sbF9zdHJlYW0oZmlsZSwgJmNoYW4tPnZpZHEsIHdhaXQpOwotCXJldHVybiByZXM7Ci0KLQkvKiBUaGlzIGRvZXNuJ3QgYmVsb25nIGluIHBvbGwoKS4gVGhpcyBjYW4gYmUgZG9uZQotCSAqIG11Y2ggYmV0dGVyIHdpdGggdmIyLiBXZSBrZWVwIHRoaXMgY29kZSBoZXJlIGFzIGEKLQkgKiByZW1pbmRlci4KLQlpZiAoKHJlcyAmIFBPTExJTikgJiYgYnVmLT52Yi5zdGF0ZSA9PSBWSURFT0JVRl9ET05FKSB7Ci0JCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gY2hhbi0+ZGV2OwotCi0JCWlmIChkZXYgJiYgY2hhbi0+dXNlX2NpZl9yZXNvbHV0aW9uKSB7Ci0JCQl1OCBjYW1faWQgPSAqKChjaGFyICopYnVmLT52Yi5iYWRkciArIDMpOwotCQkJbWVtY3B5KChjaGFyICopYnVmLT52Yi5iYWRkciwKLQkJCQkJKGNoYXIgKilidWYtPnZiLmJhZGRyICsgKGNoYW4tPndpZHRoICogMiksCi0JCQkJCShjaGFuLT53aWR0aCAqIDIpKTsKLQkJCSooKGNoYXIgKilidWYtPnZiLmJhZGRyICsgMykgPSBjYW1faWQ7Ci0JCX0KLQl9Ci0JICovCi19Ci0KLXN0YXRpYyBpbnQgdmlkZW9fcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsICpjaGFuID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdjRsMl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBjaGFuLT5kZXY7Ci0JY29uc3Qgc3RydWN0IHNyYW1fY2hhbm5lbCAqc3JhbV9jaCA9Ci0JCWRldi0+Y2hhbm5lbHNbMF0uc3JhbV9jaGFubmVsczsKLQotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JLyogc3RvcCB0aGUgcmlzYyBlbmdpbmUgYW5kIGZpZm8gKi8KLQljeF93cml0ZShzcmFtX2NoLT5kbWFfY3RsLCAwKTsgLyogRklGTyBhbmQgUklTQyBkaXNhYmxlICovCi0KLQkvKiBzdG9wIHZpZGVvIGNhcHR1cmUgKi8KLQlpZiAoY2hhbi0+c3RyZWFtaW5nX2ZoID09IGZoKSB7Ci0JCXZpZGVvYnVmX3F1ZXVlX2NhbmNlbCgmY2hhbi0+dmlkcSk7Ci0JCWNoYW4tPnN0cmVhbWluZ19maCA9IE5VTEw7Ci0JfQotCi0JaWYgKGNoYW4tPnZpZHEucmVhZF9idWYpIHsKLQkJY3gyNTgyMV9idWZmZXJfcmVsZWFzZSgmY2hhbi0+dmlkcSwgY2hhbi0+dmlkcS5yZWFkX2J1Zik7Ci0JCWtmcmVlKGNoYW4tPnZpZHEucmVhZF9idWYpOwotCX0KLQotCXZpZGVvYnVmX21tYXBfZnJlZSgmY2hhbi0+dmlkcSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCi0JcmV0dXJuIHY0bDJfZmhfcmVsZWFzZShmaWxlKTsKLX0KLQogLyogVklERU8gSU9DVExTICovCiAKIHN0YXRpYyBpbnQgY3gyNTgyMV92aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTU3MSw3ICszMzcsNyBAQAogCiAJZi0+Zm10LnBpeC53aWR0aCA9IGNoYW4tPndpZHRoOwogCWYtPmZtdC5waXguaGVpZ2h0ID0gY2hhbi0+aGVpZ2h0OwotCWYtPmZtdC5waXguZmllbGQgPSBjaGFuLT52aWRxLmZpZWxkOworCWYtPmZtdC5waXguZmllbGQgPSBjaGFuLT5maWVsZDsKIAlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gY2hhbi0+Zm10LT5mb3VyY2M7CiAJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAoY2hhbi0+d2lkdGggKiBjaGFuLT5mbXQtPmRlcHRoKSA+PiAzOwogCWYtPmZtdC5waXguc2l6ZWltYWdlID0gY2hhbi0+aGVpZ2h0ICogZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmU7CkBAIC02MzIsNyArMzk4LDcgQEAKIAkJcmV0dXJuIGVycjsKIAogCWNoYW4tPmZtdCA9IGN4MjU4MjFfZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKLQljaGFuLT52aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKKwljaGFuLT5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CiAJY2hhbi0+d2lkdGggPSBmLT5mbXQucGl4LndpZHRoOwogCWNoYW4tPmhlaWdodCA9IGYtPmZtdC5waXguaGVpZ2h0OwogCkBAIC02NTQsNDcgKzQyMCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBlbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsICpjaGFuID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCWlmIChpICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoY2hhbi0+c3RyZWFtaW5nX2ZoICYmIGNoYW4tPnN0cmVhbWluZ19maCAhPSBwcml2KQotCQlyZXR1cm4gLUVCVVNZOwotCWNoYW4tPnN0cmVhbWluZ19maCA9IHByaXY7Ci0KLQlyZXR1cm4gdmlkZW9idWZfc3RyZWFtb24oJmNoYW4tPnZpZHEpOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQotewotCXN0cnVjdCBjeDI1ODIxX2NoYW5uZWwgKmNoYW4gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCi0JaWYgKGkgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjaGFuLT5zdHJlYW1pbmdfZmggJiYgY2hhbi0+c3RyZWFtaW5nX2ZoICE9IHByaXYpCi0JCXJldHVybiAtRUJVU1k7Ci0JaWYgKGNoYW4tPnN0cmVhbWluZ19maCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCWNoYW4tPnN0cmVhbWluZ19maCA9IE5VTEw7Ci0JcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9mZigmY2hhbi0+dmlkcSk7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCi17Ci0JaW50IHJldF92YWwgPSAwOwotCXN0cnVjdCBjeDI1ODIxX2NoYW5uZWwgKmNoYW4gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCi0JcmV0X3ZhbCA9IHZpZGVvYnVmX2RxYnVmKCZjaGFuLT52aWRxLCBwLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0JcC0+c2VxdWVuY2UgPSBjaGFuLT5kbWFfdmlkcS5jb3VudDsKLQotCXJldHVybiByZXRfdmFsOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQogewogCXN0cnVjdCBjeDI1ODIxX2NoYW5uZWwgKmNoYW4gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwpAQCAtNzI5LDI5ICs0NTQsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGN4MjU4MjFfdmlkaW9jX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkgICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcCkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsICpjaGFuID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKCZjaGFuLT52aWRxLCBwKTsKLX0KLQotc3RhdGljIGludCBjeDI1ODIxX3ZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKnApCi17Ci0Jc3RydWN0IGN4MjU4MjFfY2hhbm5lbCAqY2hhbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmNoYW4tPnZpZHEsIHApOwotfQotCi1zdGF0aWMgaW50IGN4MjU4MjFfdmlkaW9jX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqcCkKLXsKLQlzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsICpjaGFuID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZjaGFuLT52aWRxLCBwKTsKLX0KLQogc3RhdGljIGludCBjeDI1ODIxX3ZpZGlvY19nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKnR2bm9ybXMpCiB7CiAJc3RydWN0IGN4MjU4MjFfY2hhbm5lbCAqY2hhbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CkBAIC04ODAsNyArNTgyLDcgQEAKIAkJcmV0dXJuIGVycjsKIAogCWNoYW4tPmZtdCA9IGN4MjU4MjFfZm9ybWF0X2J5X2ZvdXJjYyhmLT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKLQljaGFuLT52aWRxLmZpZWxkID0gZi0+Zm10LnBpeC5maWVsZDsKKwljaGFuLT5maWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CiAJY2hhbi0+d2lkdGggPSBmLT5mbXQucGl4LndpZHRoOwogCWNoYW4tPmhlaWdodCA9IGYtPmZtdC5waXguaGVpZ2h0OwogCWlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9ZNDFQKQpAQCAtODkwLDUyICs1OTIsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCB2aWRlb193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsIHNpemVfdCBjb3VudCwKLQkJCSBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGN4MjU4MjFfY2hhbm5lbCAqY2hhbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBjaGFuLT5kZXY7Ci0Jc3RydWN0IHY0bDJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCBlcnIgPSAwOwotCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5sb2NrKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlpZiAoY2hhbi0+c3RyZWFtaW5nX2ZoICYmIGNoYW4tPnN0cmVhbWluZ19maCAhPSBmaCkgewotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQlpZiAoIWNoYW4tPnN0cmVhbWluZ19maCkgewotCQllcnIgPSBjeDI1ODIxX3ZpZHVwc3RyZWFtX2luaXQoY2hhbiwgY2hhbi0+cGl4ZWxfZm9ybWF0cyk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIHVubG9jazsKLQkJY2hhbi0+c3RyZWFtaW5nX2ZoID0gZmg7Ci0JfQotCi0JZXJyID0gY3gyNTgyMV93cml0ZV9mcmFtZShjaGFuLCBkYXRhLCBjb3VudCk7Ci0JY291bnQgLT0gZXJyOwotCSpwcG9zICs9IGVycjsKLQotdW5sb2NrOgotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHZpZGVvX291dF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBjeDI1ODIxX2NoYW5uZWwgKmNoYW4gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2ID0gY2hhbi0+ZGV2OwotCXN0cnVjdCB2NGwyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCW11dGV4X2xvY2soJmRldi0+bG9jayk7Ci0JaWYgKGNoYW4tPnN0cmVhbWluZ19maCA9PSBmaCkgewotCQljeDI1ODIxX3N0b3BfdXBzdHJlYW1fdmlkZW8oY2hhbik7Ci0JCWNoYW4tPnN0cmVhbWluZ19maCA9IE5VTEw7Ci0JfQotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQotCXJldHVybiB2NGwyX2ZoX3JlbGVhc2UoZmlsZSk7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBjeDI1ODIxX2N0cmxfb3BzID0gewogCS5zX2N0cmwgPSBjeDI1ODIxX3NfY3RybCwKIH07CkBAIC05NDMsMTEgKzU5OSwxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5vcGVuID0gdjRsMl9maF9vcGVuLAotCS5yZWxlYXNlID0gdmlkZW9fcmVsZWFzZSwKLQkucmVhZCA9IHZpZGVvX3JlYWQsCi0JLnBvbGwgPSB2aWRlb19wb2xsLAotCS5tbWFwID0gY3gyNTgyMV92aWRlb19tbWFwLAorCS5yZWxlYXNlICAgICAgICA9IHZiMl9mb3BfcmVsZWFzZSwKKwkucmVhZCAgICAgICAgICAgPSB2YjJfZm9wX3JlYWQsCisJLnBvbGwJCT0gdmIyX2ZvcF9wb2xsLAogCS51bmxvY2tlZF9pb2N0bCA9IHZpZGVvX2lvY3RsMiwKKwkubW1hcCAgICAgICAgICAgPSB2YjJfZm9wX21tYXAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZpZGVvX2lvY3RsX29wcyA9IHsKQEAgLTk1NiwxNyArNjEyLDE5IEBACiAJLnZpZGlvY19nX2ZtdF92aWRfY2FwID0gY3gyNTgyMV92aWRpb2NfZ19mbXRfdmlkX2NhcCwKIAkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcCA9IGN4MjU4MjFfdmlkaW9jX3RyeV9mbXRfdmlkX2NhcCwKIAkudmlkaW9jX3NfZm10X3ZpZF9jYXAgPSB2aWRpb2Nfc19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3JlcWJ1ZnMgPSBjeDI1ODIxX3ZpZGlvY19yZXFidWZzLAotCS52aWRpb2NfcXVlcnlidWYgPSBjeDI1ODIxX3ZpZGlvY19xdWVyeWJ1ZiwKLQkudmlkaW9jX3FidWYgPSBjeDI1ODIxX3ZpZGlvY19xYnVmLAotCS52aWRpb2NfZHFidWYgPSB2aWRpb2NfZHFidWYsCisJLnZpZGlvY19yZXFidWZzICAgICAgID0gdmIyX2lvY3RsX3JlcWJ1ZnMsCisJLnZpZGlvY19wcmVwYXJlX2J1ZiAgID0gdmIyX2lvY3RsX3ByZXBhcmVfYnVmLAorCS52aWRpb2NfY3JlYXRlX2J1ZnMgICA9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmICAgICAgPSB2YjJfaW9jdGxfcXVlcnlidWYsCisJLnZpZGlvY19xYnVmICAgICAgICAgID0gdmIyX2lvY3RsX3FidWYsCisJLnZpZGlvY19kcWJ1ZiAgICAgICAgID0gdmIyX2lvY3RsX2RxYnVmLAorCS52aWRpb2Nfc3RyZWFtb24gICAgICA9IHZiMl9pb2N0bF9zdHJlYW1vbiwKKwkudmlkaW9jX3N0cmVhbW9mZiAgICAgPSB2YjJfaW9jdGxfc3RyZWFtb2ZmLAogCS52aWRpb2NfZ19zdGQgPSBjeDI1ODIxX3ZpZGlvY19nX3N0ZCwKIAkudmlkaW9jX3Nfc3RkID0gY3gyNTgyMV92aWRpb2Nfc19zdGQsCiAJLnZpZGlvY19lbnVtX2lucHV0ID0gY3gyNTgyMV92aWRpb2NfZW51bV9pbnB1dCwKIAkudmlkaW9jX2dfaW5wdXQgPSBjeDI1ODIxX3ZpZGlvY19nX2lucHV0LAogCS52aWRpb2Nfc19pbnB1dCA9IGN4MjU4MjFfdmlkaW9jX3NfaW5wdXQsCi0JLnZpZGlvY19zdHJlYW1vbiA9IHZpZGlvY19zdHJlYW1vbiwKLQkudmlkaW9jX3N0cmVhbW9mZiA9IHZpZGlvY19zdHJlYW1vZmYsCiAJLnZpZGlvY19sb2dfc3RhdHVzID0gdmlkaW9jX2xvZ19zdGF0dXMsCiAJLnZpZGlvY19zdWJzY3JpYmVfZXZlbnQgPSB2NGwyX2N0cmxfc3Vic2NyaWJlX2V2ZW50LAogCS52aWRpb2NfdW5zdWJzY3JpYmVfZXZlbnQgPSB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlLApAQCAtOTg0LDkgKzY0MiwxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aWRlb19vdXRfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkub3BlbiA9IHY0bDJfZmhfb3BlbiwKLQkud3JpdGUgPSB2aWRlb193cml0ZSwKLQkucmVsZWFzZSA9IHZpZGVvX291dF9yZWxlYXNlLAorCS5yZWxlYXNlICAgICAgICA9IHZiMl9mb3BfcmVsZWFzZSwKKwkud3JpdGUgICAgICAgICAgPSB2YjJfZm9wX3dyaXRlLAorCS5wb2xsCQk9IHZiMl9mb3BfcG9sbCwKIAkudW5sb2NrZWRfaW9jdGwgPSB2aWRlb19pb2N0bDIsCisJLm1tYXAgICAgICAgICAgID0gdmIyX2ZvcF9tbWFwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19vdXRfaW9jdGxfb3BzID0gewpAQCAtMTAxOSw5ICs2NzksNiBAQAogCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKCZkZXYtPmNoYW5uZWxzW2NoYW5fbnVtXS52ZGV2KSkgewogCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZGV2LT5jaGFubmVsc1tjaGFuX251bV0udmRldik7CiAJCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmRldi0+Y2hhbm5lbHNbY2hhbl9udW1dLmhkbCk7Ci0KLQkJYnRjeF9yaXNjbWVtX2ZyZWUoZGV2LT5wY2ksCi0JCQkJJmRldi0+Y2hhbm5lbHNbY2hhbl9udW1dLmRtYV92aWRxLnN0b3BwZXIpOwogCX0KIH0KIApAQCAtMTAzNSwxMCArNjkyLDExIEBACiAKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5zbG9jayk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX1ZJRF9DSEFOTkVMX05VTSAtIDE7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfVklEX0NBUF9DSEFOTkVMX05VTSAtIDE7ICsraSkgewogCQlzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsICpjaGFuID0gJmRldi0+Y2hhbm5lbHNbaV07CiAJCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSAmY2hhbi0+dmRldjsKIAkJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwgPSAmY2hhbi0+aGRsOworCQlzdHJ1Y3QgdmIyX3F1ZXVlICpxOwogCQlib29sIGlzX291dHB1dCA9IGkgPiBTUkFNX0NIMDg7CiAKIAkJaWYgKGkgPT0gU1JBTV9DSDA4KSAvKiBhdWRpbyBjaGFubmVsICovCkBAIC0xMDY2LDExICs3MjQsOSBAQAogCQkJY2hhbi0+b3V0LT5jaGFuID0gY2hhbjsKIAkJfQogCi0JCWN4MjU4MjFfcmlzY19zdG9wcGVyKGRldi0+cGNpLCAmY2hhbi0+ZG1hX3ZpZHEuc3RvcHBlciwKLQkJCWNoYW4tPnNyYW1fY2hhbm5lbHMtPmRtYV9jdGwsIDB4MTEsIDApOwotCiAJCWNoYW4tPnNyYW1fY2hhbm5lbHMgPSAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW2ldOwogCQljaGFuLT53aWR0aCA9IDcyMDsKKwkJY2hhbi0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CiAJCWlmIChkZXYtPnR2bm9ybSAmIFY0TDJfU1REXzYyNV81MCkKIAkJCWNoYW4tPmhlaWdodCA9IDU3NjsKIAkJZWxzZQpAQCAtMTA4NCwxOSArNzQwLDI3IEBACiAJCWN4X3dyaXRlKGNoYW4tPnNyYW1fY2hhbm5lbHMtPmludF9zdGF0LCAweGZmZmZmZmZmKTsKIAogCQlJTklUX0xJU1RfSEVBRCgmY2hhbi0+ZG1hX3ZpZHEuYWN0aXZlKTsKLQkJSU5JVF9MSVNUX0hFQUQoJmNoYW4tPmRtYV92aWRxLnF1ZXVlZCk7CiAKLQkJY2hhbi0+dGltZW91dF9kYXRhLmRldiA9IGRldjsKLQkJY2hhbi0+dGltZW91dF9kYXRhLmNoYW5uZWwgPSAmY3gyNTgyMV9zcmFtX2NoYW5uZWxzW2ldOwotCQljaGFuLT5kbWFfdmlkcS50aW1lb3V0LmZ1bmN0aW9uID0gY3gyNTgyMV92aWRfdGltZW91dDsKLQkJY2hhbi0+ZG1hX3ZpZHEudGltZW91dC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpJmNoYW4tPnRpbWVvdXRfZGF0YTsKLQkJaW5pdF90aW1lcigmY2hhbi0+ZG1hX3ZpZHEudGltZW91dCk7CisJCXEgPSAmY2hhbi0+dmlkcTsKIAotCQlpZiAoIWlzX291dHB1dCkKLQkJCXZpZGVvYnVmX3F1ZXVlX3NnX2luaXQoJmNoYW4tPnZpZHEsICZjeDI1ODIxX3ZpZGVvX3FvcHMsICZkZXYtPnBjaS0+ZGV2LAotCQkJCSZkZXYtPnNsb2NrLCBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCi0JCQkJVjRMMl9GSUVMRF9JTlRFUkxBQ0VELCBzaXplb2Yoc3RydWN0IGN4MjU4MjFfYnVmZmVyKSwKLQkJCQljaGFuLCAmZGV2LT5sb2NrKTsKKwkJcS0+dHlwZSA9IGlzX291dHB1dCA/IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUIDoKKwkJCQkgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCXEtPmlvX21vZGVzID0gVkIyX01NQVAgfCBWQjJfVVNFUlBUUiB8IFZCMl9ETUFCVUY7CisJCXEtPmlvX21vZGVzIHw9IGlzX291dHB1dCA/IFZCMl9XUklURSA6IFZCMl9SRUFEOworCQlxLT5nZnBfZmxhZ3MgPSBHRlBfRE1BMzI7CisJCXEtPm1pbl9idWZmZXJzX25lZWRlZCA9IDI7CisJCXEtPmRydl9wcml2ID0gY2hhbjsKKwkJcS0+YnVmX3N0cnVjdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBjeDI1ODIxX2J1ZmZlcik7CisJCXEtPm9wcyA9ICZjeDI1ODIxX3ZpZGVvX3FvcHM7CisJCXEtPm1lbV9vcHMgPSAmdmIyX2RtYV9zZ19tZW1vcHM7CisJCXEtPnRpbWVzdGFtcF9mbGFncyA9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQzsKKwkJcS0+bG9jayA9ICZkZXYtPmxvY2s7CisKKwkJaWYgKCFpc19vdXRwdXQpIHsKKwkJCWVyciA9IHZiMl9xdWV1ZV9pbml0KHEpOworCQkJaWYgKGVyciA8IDApCisJCQkJZ290byBmYWlsX3VucmVnOworCQl9CiAKIAkJLyogcmVnaXN0ZXIgdjRsIGRldmljZXMgKi8KIAkJKnZkZXYgPSBpc19vdXRwdXQgPyBjeDI1ODIxX3ZpZGVvX291dF9kZXZpY2UgOiBjeDI1ODIxX3ZpZGVvX2RldmljZTsKQEAgLTExMDYsNiArNzcwLDcgQEAKIAkJZWxzZQogCQkJdmRldi0+dmZsX2RpciA9IFZGTF9ESVJfVFg7CiAJCXZkZXYtPmxvY2sgPSAmZGV2LT5sb2NrOworCQl2ZGV2LT5xdWV1ZSA9IHE7CiAJCXNucHJpbnRmKHZkZXYtPm5hbWUsIHNpemVvZih2ZGV2LT5uYW1lKSwgIiVzICMlZCIsIGRldi0+bmFtZSwgaSk7CiAJCXZpZGVvX3NldF9kcnZkYXRhKHZkZXYsIGNoYW4pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9jeDI1ODIxL2N4MjU4MjEuaCBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjU4MjEvY3gyNTgyMS5oCmluZGV4IDkwYmRjMTkuLmQ4MWEwOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjU4MjEvY3gyNTgyMS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4MjU4MjEvY3gyNTgyMS5oCkBAIC0zNCw5ICszNCw4IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KLSNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtc2cuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLXNnLmg+CiAKLSNpbmNsdWRlICJidGN4LXJpc2MuaCIKICNpbmNsdWRlICJjeDI1ODIxLXJlZy5oIgogI2luY2x1ZGUgImN4MjU4MjEtbWVkdXNhLXJlZy5oIgogI2luY2x1ZGUgImN4MjU4MjEtc3JhbS5oIgpAQCAtODksNiArODgsMTMgQEAKIAogI2RlZmluZSBDWDI1ODIxX0JPQVJEX0NPTkVYQU5UX0FUSEVOQTEwIDEKICNkZWZpbmUgTUFYX1ZJRF9DSEFOTkVMX05VTSAgICAgMTIKKworLyoKKyAqIE1heGltdW0gY2FwdHVyZS1vbmx5IGNoYW5uZWxzLiBUaGlzIGNhbiBnbyBhd2F5IG9uY2UgdmlkZW8vYXVkaW8gb3V0cHV0CisgKiBpcyBmdWxseSBzdXBwb3J0ZWQgaW4gdGhpcyBkcml2ZXIuCisgKi8KKyNkZWZpbmUgTUFYX1ZJRF9DQVBfQ0hBTk5FTF9OVU0gICAgIDEwCisKICNkZWZpbmUgVklEX0NIQU5ORUxfTlVNIDgKIAogc3RydWN0IGN4MjU4MjFfZm10IHsKQEAgLTExMSwxNiArMTE3LDIzIEBACiAJQ1gyNTgyMV9TUkNfU0VMX1BBUkFMTEVMX01QRUdfVklERU8KIH07CiAKK3N0cnVjdCBjeDI1ODIxX3Jpc2NtZW0geworCXVuc2lnbmVkIGludCAgIHNpemU7CisJX19sZTMyICAgICAgICAgKmNwdTsKKwlfX2xlMzIgICAgICAgICAqam1wOworCWRtYV9hZGRyX3QgICAgIGRtYTsKK307CisKIC8qIGJ1ZmZlciBmb3Igb25lIHZpZGVvIGZyYW1lICovCiBzdHJ1Y3QgY3gyNTgyMV9idWZmZXIgewogCS8qIGNvbW1vbiB2NGwgYnVmZmVyIHN0dWZmIC0tIG11c3QgYmUgZmlyc3QgKi8KLQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyIHZiOworCXN0cnVjdCB2YjJfYnVmZmVyIHZiOworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWU7CiAKIAkvKiBjeDI1ODIxIHNwZWNpZmljICovCiAJdW5zaWduZWQgaW50IGJwbDsKLQlzdHJ1Y3QgYnRjeF9yaXNjbWVtIHJpc2M7CisJc3RydWN0IGN4MjU4MjFfcmlzY21lbSByaXNjOwogCWNvbnN0IHN0cnVjdCBjeDI1ODIxX2ZtdCAqZm10OwotCXUzMiBjb3VudDsKIH07CiAKIGVudW0gcG9ydCB7CkBAIC0xNTksMTcgKzE3Miw5IEBACiAKIHN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGl2ZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlZDsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lb3V0OwotCXN0cnVjdCBidGN4X3Jpc2NtZW0gc3RvcHBlcjsKIAl1MzIgY291bnQ7CiB9OwogCi1zdHJ1Y3QgY3gyNTgyMV9kYXRhIHsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldjsKLQljb25zdCBzdHJ1Y3Qgc3JhbV9jaGFubmVsICpjaGFubmVsOwotfTsKLQogc3RydWN0IGN4MjU4MjFfZGV2OwogCiBzdHJ1Y3QgY3gyNTgyMV9jaGFubmVsOwpAQCAtMjA3LDE4ICsyMTIsMTcgQEAKIHN0cnVjdCBjeDI1ODIxX2NoYW5uZWwgewogCXVuc2lnbmVkIGlkOwogCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2OwotCXN0cnVjdCB2NGwyX2ZoICpzdHJlYW1pbmdfZmg7CiAKIAlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgaGRsOwotCXN0cnVjdCBjeDI1ODIxX2RhdGEgdGltZW91dF9kYXRhOwogCiAJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OwogCXN0cnVjdCBjeDI1ODIxX2RtYXF1ZXVlIGRtYV92aWRxOwotCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSB2aWRxOworCXN0cnVjdCB2YjJfcXVldWUgdmlkcTsKIAogCWNvbnN0IHN0cnVjdCBzcmFtX2NoYW5uZWwgKnNyYW1fY2hhbm5lbHM7CiAKIAljb25zdCBzdHJ1Y3QgY3gyNTgyMV9mbXQgKmZtdDsKKwl1bnNpZ25lZCBmaWVsZDsKIAl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodDsKIAlpbnQgcGl4ZWxfZm9ybWF0czsKIAlpbnQgdXNlX2NpZl9yZXNvbHV0aW9uOwpAQCAtMjQ0LDYgKzI0OCw3IEBACiAJaW50IGh3cmV2aXNpb247CiAJLyogdXNlZCBieSBjeDI1ODIxLWFsc2EgKi8KIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJdm9pZCAqYWxsb2NfY3R4OwogCiAJdTMyIGNsa19mcmVxOwogCkBAIC00MDUsMjEgKzQxMCwyMiBAQAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzcmFtX2NoYW5uZWwgKmNoLCB1bnNpZ25lZCBpbnQgYnBsLAogCQkJCSAgICAgIHUzMiByaXNjKTsKIAotZXh0ZXJuIGludCBjeDI1ODIxX3Jpc2NfYnVmZmVyKHN0cnVjdCBwY2lfZGV2ICpwY2ksIHN0cnVjdCBidGN4X3Jpc2NtZW0gKnJpc2MsCitleHRlcm4gaW50IGN4MjU4MjFfcmlzY21lbV9hbGxvYyhzdHJ1Y3QgcGNpX2RldiAqcGNpLAorCQkJCSBzdHJ1Y3QgY3gyNTgyMV9yaXNjbWVtICpyaXNjLAorCQkJCSB1bnNpZ25lZCBpbnQgc2l6ZSk7CitleHRlcm4gaW50IGN4MjU4MjFfcmlzY19idWZmZXIoc3RydWN0IHBjaV9kZXYgKnBjaSwgc3RydWN0IGN4MjU4MjFfcmlzY21lbSAqcmlzYywKIAkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgdG9wX29mZnNldCwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgYm90dG9tX29mZnNldCwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgYnBsLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBwYWRkaW5nLCB1bnNpZ25lZCBpbnQgbGluZXMpOwogZXh0ZXJuIGludCBjeDI1ODIxX3Jpc2NfZGF0YWJ1ZmZlcl9hdWRpbyhzdHJ1Y3QgcGNpX2RldiAqcGNpLAotCQkJCQkgc3RydWN0IGJ0Y3hfcmlzY21lbSAqcmlzYywKKwkJCQkJIHN0cnVjdCBjeDI1ODIxX3Jpc2NtZW0gKnJpc2MsCiAJCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwKIAkJCQkJIHVuc2lnbmVkIGludCBicGwsCiAJCQkJCSB1bnNpZ25lZCBpbnQgbGluZXMsIHVuc2lnbmVkIGludCBscGkpOwotZXh0ZXJuIHZvaWQgY3gyNTgyMV9mcmVlX2J1ZmZlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsCitleHRlcm4gdm9pZCBjeDI1ODIxX2ZyZWVfYnVmZmVyKHN0cnVjdCBjeDI1ODIxX2RldiAqZGV2LAogCQkJCXN0cnVjdCBjeDI1ODIxX2J1ZmZlciAqYnVmKTsKLWV4dGVybiBpbnQgY3gyNTgyMV9yaXNjX3N0b3BwZXIoc3RydWN0IHBjaV9kZXYgKnBjaSwgc3RydWN0IGJ0Y3hfcmlzY21lbSAqcmlzYywKLQkJCQl1MzIgcmVnLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKIGV4dGVybiB2b2lkIGN4MjU4MjFfc3JhbV9jaGFubmVsX2R1bXAoc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHNyYW1fY2hhbm5lbCAqY2gpOwogZXh0ZXJuIHZvaWQgY3gyNTgyMV9zcmFtX2NoYW5uZWxfZHVtcF9hdWRpbyhzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4ODgvY3g4OC1ibGFja2JpcmQuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4ODgvY3g4OC1ibGFja2JpcmQuYwppbmRleCBkM2M3OWQ5Li5iNmJlNDZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9jeDg4L2N4ODgtYmxhY2tiaXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvY3g4OC9jeDg4LWJsYWNrYmlyZC5jCkBAIC0xMjM0LDYgKzEyMzQsMyBAQAogCiBtb2R1bGVfaW5pdChibGFja2JpcmRfaW5pdCk7CiBtb2R1bGVfZXhpdChibGFja2JpcmRfZmluaSk7Ci0KLW1vZHVsZV9wYXJhbV9uYW1lZCh2aWRlb19kZWJ1ZyxjeDg4MDJfbXBlZ190ZW1wbGF0ZS5kZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbdmlkZW9dIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9jeDg4L2N4ODgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS9wY2kvY3g4OC9jeDg4LWNvcmUuYwppbmRleCBkZWUxNzdlLi5jMzhkNWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9jeDg4L2N4ODgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4ODgvY3g4OC1jb3JlLmMKQEAgLTEwOTEsMTAgKzEwOTEsMyBAQAogCiBFWFBPUlRfU1lNQk9MKGN4ODhfaXJfc3RhcnQpOwogRVhQT1JUX1NZTUJPTChjeDg4X2lyX3N0b3ApOwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqIGthdGU6IGVvbCAidW5peCI7IGluZGVudC13aWR0aCAzOyByZW1vdmUtdHJhaWxpbmctc3BhY2Ugb247IHJlcGxhY2UtdHJhaWxpbmctc3BhY2Utc2F2ZSBvbjsgdGFiLXdpZHRoIDg7IHJlcGxhY2UtdGFicyBvZmY7IHNwYWNlLWluZGVudCBvZmY7IG1peGVkLWluZGVudCBvZmYKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvY3g4OC9jeDg4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS9wY2kvY3g4OC9jeDg4LWR2Yi5jCmluZGV4IDU3ODBlMmYuLjFiMmVkMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4ODgvY3g4OC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDg4L2N4ODgtZHZiLmMKQEAgLTE1MDQsOCArMTUwNCw4IEBACiAJCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goc3R2MDI4OF9hdHRhY2gsCiAJCQkJCQkJICAgICZ0ZXZpaV90dW5lcl9lYXJkYV9jb25maWcsCiAJCQkJCQkJICAgICZjb3JlLT5pMmNfYWRhcCk7Ci0JCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCQkJaWYgKCFkdmJfYXR0YWNoKHN0YjYwMDBfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MSwKKwkJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7CisJCQkJaWYgKCFkdmJfYXR0YWNoKHN0YjYwMDBfYXR0YWNoLCBmZTAtPmR2Yi5mcm9udGVuZCwgMHg2MSwKIAkJCQkJCSZjb3JlLT5pMmNfYWRhcCkpCiAJCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOwogCQkJCWNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvY3g4OC9jeDg4LW1wZWcuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL2N4ODgvY3g4OC1tcGVnLmMKaW5kZXggMWMxZjY5ZS4uYTM2OWIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvY3g4OC9jeDg4LW1wZWcuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDg4L2N4ODgtbXBlZy5jCkBAIC04MzMsMTAgKzgzMywzIEBACiBFWFBPUlRfU1lNQk9MKGN4ODgwMl9yZWdpc3Rlcl9kcml2ZXIpOwogRVhQT1JUX1NZTUJPTChjeDg4MDJfdW5yZWdpc3Rlcl9kcml2ZXIpOwogRVhQT1JUX1NZTUJPTChjeDg4MDJfZ2V0X2RyaXZlcik7Ci0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKiBrYXRlOiBlb2wgInVuaXgiOyBpbmRlbnQtd2lkdGggMzsgcmVtb3ZlLXRyYWlsaW5nLXNwYWNlIG9uOyByZXBsYWNlLXRyYWlsaW5nLXNwYWNlLXNhdmUgb247IHRhYi13aWR0aCA4OyByZXBsYWNlLXRhYnMgb2ZmOyBzcGFjZS1pbmRlbnQgb2ZmOyBtaXhlZC1pbmRlbnQgb2ZmCi0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4ODgvY3g4OC10dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9jeDg4L2N4ODgtdHZhdWRpby5jCmluZGV4IDQyNGZkOTcuLjZiYmNlNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL2N4ODgvY3g4OC10dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvY3g4OC9jeDg4LXR2YXVkaW8uYwpAQCAtMTA1MCwxMCArMTA1MCwzIEBACiBFWFBPUlRfU1lNQk9MKGN4ODhfc2V0X3N0ZXJlbyk7CiBFWFBPUlRfU1lNQk9MKGN4ODhfZ2V0X3N0ZXJlbyk7CiBFWFBPUlRfU1lNQk9MKGN4ODhfYXVkaW9fdGhyZWFkKTsKLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKiBrYXRlOiBlb2wgInVuaXgiOyBpbmRlbnQtd2lkdGggMzsgcmVtb3ZlLXRyYWlsaW5nLXNwYWNlIG9uOyByZXBsYWNlLXRyYWlsaW5nLXNwYWNlLXNhdmUgb247IHRhYi13aWR0aCA4OyByZXBsYWNlLXRhYnMgb2ZmOyBzcGFjZS1pbmRlbnQgb2ZmOyBtaXhlZC1pbmRlbnQgb2ZmCi0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL2l2dHYvaXZ0di1pcnEuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL2l2dHYvaXZ0di1pcnEuYwppbmRleCBhYjZkNWQyLi5lN2Q3MDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9pdnR2L2l2dHYtaXJxLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvaXZ0di9pdnR2LWlycS5jCkBAIC0zNTcsNyArMzU3LDYgQEAKIAl1MzIgdXZfb2Zmc2V0ID0gb2Zmc2V0ICsgSVZUVl9ZVVZfQlVGRkVSX1VWX09GRlNFVDsKIAlpbnQgeV9kb25lID0gMDsKIAlpbnQgYnl0ZXNfd3JpdHRlbiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAJaW50IGlkeCA9IDA7CiAKIAlJVlRWX0RFQlVHX0hJX0RNQSgiREVDIFBSRVBBUkUgRE1BICVzOiAlMDh4ICUwOHhcbiIsIHMtPm5hbWUsIHMtPnFfcHJlZG1hLmJ5dGVzdXNlZCwgb2Zmc2V0KTsKQEAgLTQwNywxNiArNDA2LDIxIEBACiAKIAkvKiBTeW5jIEhhcmR3YXJlIFNHIExpc3Qgb2YgYnVmZmVycyAqLwogCWl2dHZfc3RyZWFtX3N5bmNfZm9yX2RldmljZShzKTsKLQlpZiAobG9jaykKKwlpZiAobG9jaykgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXR2LT5kbWFfcmVnX2xvY2ssIGZsYWdzKTsKLQlpZiAoIXRlc3RfYml0KElWVFZfRl9JX0RNQSwgJml0di0+aV9mbGFncykpIHsKLQkJaXZ0dl9kbWFfZGVjX3N0YXJ0KHMpOwotCX0KLQllbHNlIHsKLQkJc2V0X2JpdChJVlRWX0ZfU19ETUFfUEVORElORywgJnMtPnNfZmxhZ3MpOwotCX0KLQlpZiAobG9jaykKKwkJaWYgKCF0ZXN0X2JpdChJVlRWX0ZfSV9ETUEsICZpdHYtPmlfZmxhZ3MpKQorCQkJaXZ0dl9kbWFfZGVjX3N0YXJ0KHMpOworCQllbHNlCisJCQlzZXRfYml0KElWVFZfRl9TX0RNQV9QRU5ESU5HLCAmcy0+c19mbGFncyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJml0di0+ZG1hX3JlZ19sb2NrLCBmbGFncyk7CisJfSBlbHNlIHsKKwkJaWYgKCF0ZXN0X2JpdChJVlRWX0ZfSV9ETUEsICZpdHYtPmlfZmxhZ3MpKQorCQkJaXZ0dl9kbWFfZGVjX3N0YXJ0KHMpOworCQllbHNlCisJCQlzZXRfYml0KElWVFZfRl9TX0RNQV9QRU5ESU5HLCAmcy0+c19mbGFncyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBpdnR2X2RtYV9lbmNfc3RhcnRfeGZlcihzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9pdnR2L2l2dHYtdWRtYS5jIGIvZHJpdmVycy9tZWRpYS9wY2kvaXZ0di9pdnR2LXVkbWEuYwppbmRleCBiZWUyMzI5Li4yNDE1MmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9pdnR2L2l2dHYtdWRtYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL2l2dHYvaXZ0di11ZG1hLmMKQEAgLTEyNCwxMCArMTI0LDggQEAKIAl9CiAKIAkvKiBHZXQgdXNlciBwYWdlcyBmb3IgRE1BIFhmZXIgKi8KLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JZXJyID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sCi0JCQl1c2VyX2RtYS51YWRkciwgdXNlcl9kbWEucGFnZV9jb3VudCwgMCwgMSwgZG1hLT5tYXAsIE5VTEwpOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJZXJyID0gZ2V0X3VzZXJfcGFnZXNfdW5sb2NrZWQoY3VycmVudCwgY3VycmVudC0+bW0sCisJCQl1c2VyX2RtYS51YWRkciwgdXNlcl9kbWEucGFnZV9jb3VudCwgMCwgMSwgZG1hLT5tYXApOwogCiAJaWYgKHVzZXJfZG1hLnBhZ2VfY291bnQgIT0gZXJyKSB7CiAJCUlWVFZfREVCVUdfV0FSTigiZmFpbGVkIHRvIG1hcCB1c2VyIHBhZ2VzLCByZXR1cm5lZCAlZCBpbnN0ZWFkIG9mICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvbWFudGlzL21hbnRpc19jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9tYW50aXMvbWFudGlzX2NvcmUuYwppbmRleCA2ODRkOTA2Li44MjIyMGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9tYW50aXMvbWFudGlzX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9tYW50aXMvbWFudGlzX2NvcmUuYwpAQCAtNTYsMjkgKzU2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3cml0ZV9lZXByb21fYnl0ZShzdHJ1Y3QgbWFudGlzX3BjaSAqbWFudGlzLCB1OCAqZGF0YSwgdTggbGVuZ3RoKQotewotCWludCBlcnI7Ci0KLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7Ci0JCS5hZGRyID0gMHg1MCwKLQkJLmZsYWdzID0gMCwKLQkJLmJ1ZiA9IGRhdGEsCi0JCS5sZW4gPSBsZW5ndGgKLQl9OwotCi0JZXJyID0gaTJjX3RyYW5zZmVyKCZtYW50aXMtPmFkYXB0ZXIsICZtc2csIDEpOwotCWlmIChlcnIgPCAwKSB7Ci0JCWRwcmludGsodmVyYm9zZSwgTUFOVElTX0VSUk9SLCAxLAotCQkJIkVSUk9SOiBpMmMgd3JpdGU6IDwgZXJyPSVpIGxlbmd0aD0weCUwMnggZDA9MHglMDJ4LCBkMT0weCUwMnggPiIsCi0JCQllcnIsIGxlbmd0aCwgZGF0YVswXSwgZGF0YVsxXSk7Ci0KLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBnZXRfbWFjX2FkZHJlc3Moc3RydWN0IG1hbnRpc19wY2kgKm1hbnRpcykKIHsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYwppbmRleCA3MDFiNTJmLi45OWQwOWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYwpAQCAtMTA4NCwxMSArMTA4NCw2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB2YjJfcXVldWUgKnNhYTcxMzRfcXVldWUoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHZpZGVvX2RldmRhdGEoZmlsZSktPnF1ZXVlOwotfQotCiBzdGF0aWMgaW50IHZpZGVvX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9zbWlwY2llL3NtaXBjaWUuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL3NtaXBjaWUvc21pcGNpZS5jCmluZGV4IGY3NzMzNTAuLjM2YzhlZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL3NtaXBjaWUvc21pcGNpZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL3NtaXBjaWUvc21pcGNpZS5jCkBAIC00NDgsMTYgKzQ0OCwxOSBAQAogCXBvcnQtPmVuYWJsZSA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNtaV9wb3J0X2lycShzdHJ1Y3Qgc21pX3BvcnQgKnBvcnQsIHUzMiBpbnRfc3RhdHVzKQorc3RhdGljIGludCBzbWlfcG9ydF9pcnEoc3RydWN0IHNtaV9wb3J0ICpwb3J0LCB1MzIgaW50X3N0YXR1cykKIHsKIAl1MzIgcG9ydF9yZXFfaXJxID0gcG9ydC0+X2RtYUludGVycnVwdENIMCB8IHBvcnQtPl9kbWFJbnRlcnJ1cHRDSDE7CisJaW50IGhhbmRsZWQgPSAwOwogCiAJaWYgKGludF9zdGF0dXMgJiBwb3J0X3JlcV9pcnEpIHsKIAkJc21pX3BvcnRfZGlzYWJsZUludGVycnVwdChwb3J0KTsKIAkJcG9ydC0+X2ludF9zdGF0dXMgPSBpbnRfc3RhdHVzOwogCQlzbWlfcG9ydF9jbGVhckludGVycnVwdChwb3J0KTsKIAkJdGFza2xldF9zY2hlZHVsZSgmcG9ydC0+dGFza2xldCk7CisJCWhhbmRsZWQgPSAxOwogCX0KKwlyZXR1cm4gaGFuZGxlZDsKIH0KIAogc3RhdGljIGlycXJldHVybl90IHNtaV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC00NjUsMTggKzQ2OCwxOSBAQAogCXN0cnVjdCBzbWlfZGV2ICpkZXYgPSBkZXZfaWQ7CiAJc3RydWN0IHNtaV9wb3J0ICpwb3J0MCA9ICZkZXYtPnRzX3BvcnRbMF07CiAJc3RydWN0IHNtaV9wb3J0ICpwb3J0MSA9ICZkZXYtPnRzX3BvcnRbMV07CisJaW50IGhhbmRsZWQgPSAwOwogCiAJdTMyIGludHJfc3RhdHVzID0gc21pX3JlYWQoTVNJX0lOVF9TVEFUVVMpOwogCiAJLyogdHMwIGludGVycnVwdC4qLwogCWlmIChkZXYtPmluZm8tPnRzXzApCi0JCXNtaV9wb3J0X2lycShwb3J0MCwgaW50cl9zdGF0dXMpOworCQloYW5kbGVkICs9IHNtaV9wb3J0X2lycShwb3J0MCwgaW50cl9zdGF0dXMpOwogCiAJLyogdHMxIGludGVycnVwdC4qLwogCWlmIChkZXYtPmluZm8tPnRzXzEpCi0JCXNtaV9wb3J0X2lycShwb3J0MSwgaW50cl9zdGF0dXMpOworCQloYW5kbGVkICs9IHNtaV9wb3J0X2lycShwb3J0MSwgaW50cl9zdGF0dXMpOwogCi0JcmV0dXJuIElSUV9IQU5ETEVEOworCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKnNtaV9hZGRfaTJjX2NsaWVudChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC1jb3JlLmMKaW5kZXggOGNiZTZiNC4uNTcwZDExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvc29sbzZ4MTAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL3NvbG82eDEwL3NvbG82eDEwLWNvcmUuYwpAQCAtMTgyLDcgKzE4Miw3IEBACiB7CiAJc3RydWN0IHNvbG9fZGV2ICpzb2xvX2RldiA9CiAJCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzb2xvX2RldiwgZGV2KTsKLQl1bnNpZ25lZCBzaG9ydCAqcCA9ICh1bnNpZ25lZCBzaG9ydCAqKWJ1ZjsKKwl1MTYgKnAgPSAodTE2ICopYnVmOwogCWludCBpOwogCiAJaWYgKGNvdW50ICYgMHgxKQpAQCAtMjEyLDcgKzIxMiw3IEBACiB7CiAJc3RydWN0IHNvbG9fZGV2ICpzb2xvX2RldiA9CiAJCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzb2xvX2RldiwgZGV2KTsKLQl1bnNpZ25lZCBzaG9ydCAqcCA9ICh1bnNpZ25lZCBzaG9ydCAqKWJ1ZjsKKwl1MTYgKnAgPSAodTE2ICopYnVmOwogCWludCBjb3VudCA9IChmdWxsX2VlcHJvbSA/IDEyOCA6IDY0KTsKIAlpbnQgaTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvc29sbzZ4MTAtZWVwcm9tLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC1lZXByb20uYwppbmRleCBkYTI1Y2U0Li44ZTgxMTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC1lZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC1lZXByb20uYwpAQCAtMTAzLDcgKzEwMyw3IEBACiBfX2JlMTYgc29sb19lZXByb21fcmVhZChzdHJ1Y3Qgc29sb19kZXYgKnNvbG9fZGV2LCBpbnQgbG9jKQogewogCWludCByZWFkX2NtZCA9IGxvYyB8IChFRV9SRUFEX0NNRCA8PCBBRERSX0xFTik7Ci0JdW5zaWduZWQgc2hvcnQgcmV0dmFsID0gMDsKKwl1MTYgcmV0dmFsID0gMDsKIAlpbnQgaTsKIAogCXNvbG9fZWVwcm9tX2NtZChzb2xvX2RldiwgcmVhZF9jbWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvc29sbzZ4MTAtZW5jLmMgYi9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC1lbmMuYwppbmRleCBkMTljMGFlLi5kMjgyMTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC1lbmMuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC1lbmMuYwpAQCAtMTM2LDExICsxMzYsMTEgQEAKIGludCBzb2xvX29zZF9wcmludChzdHJ1Y3Qgc29sb19lbmNfZGV2ICpzb2xvX2VuYykKIHsKIAlzdHJ1Y3Qgc29sb19kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OwotCXVuc2lnbmVkIGNoYXIgKnN0ciA9IHNvbG9fZW5jLT5vc2RfdGV4dDsKKwl1OCAqc3RyID0gc29sb19lbmMtPm9zZF90ZXh0OwogCXU4ICpidWYgPSBzb2xvX2VuYy0+b3NkX2J1ZjsKIAl1MzIgcmVnOwogCWNvbnN0IHN0cnVjdCBmb250X2Rlc2MgKnZnYSA9IGZpbmRfZm9udCgiVkdBOHgxNiIpOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnZnYV9kYXRhOworCWNvbnN0IHU4ICp2Z2FfZGF0YTsKIAlpbnQgaSwgajsKIAogCWlmIChXQVJOX09OX09OQ0UoIXZnYSkpCkBAIC0xNTQsNyArMTU0LDcgQEAKIAl9CiAKIAltZW1zZXQoYnVmLCAwLCBTT0xPX09TRF9XUklURV9TSVpFKTsKLQl2Z2FfZGF0YSA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopdmdhLT5kYXRhOworCXZnYV9kYXRhID0gKGNvbnN0IHU4ICopdmdhLT5kYXRhOwogCiAJZm9yIChpID0gMDsgKnN0cjsgaSsrLCBzdHIrKykgewogCQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvc29sbzZ4MTAtZzcyMy5jIGIvZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvc29sbzZ4MTAtZzcyMy5jCmluZGV4IGM3MTQxZjIuLjdkZGM3NjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL3NvbG82eDEwL3NvbG82eDEwLWc3MjMuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC1nNzIzLmMKQEAgLTU2LDggKzU2LDggQEAKIHN0cnVjdCBzb2xvX3NuZF9wY20gewogCWludAkJCQlvbjsKIAlzcGlubG9ja190CQkJbG9jazsKLQlzdHJ1Y3Qgc29sb19kZXYJCSpzb2xvX2RldjsKLQl1bnNpZ25lZCBjaGFyCQkJKmc3MjNfYnVmOworCXN0cnVjdCBzb2xvX2RldgkJCSpzb2xvX2RldjsKKwl1OAkJCQkqZzcyM19idWY7CiAJZG1hX2FkZHJfdAkJCWc3MjNfZG1hOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvc29sbzZ4MTAtanBlZy5oIGIvZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvc29sbzZ4MTAtanBlZy5oCmluZGV4IDFjNjZhNDYuLjNjNjExYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL3NvbG82eDEwL3NvbG82eDEwLWpwZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC1qcGVnLmgKQEAgLTIxLDcgKzIxLDcgQEAKICNpZm5kZWYgX19TT0xPNlgxMF9KUEVHX0gKICNkZWZpbmUgX19TT0xPNlgxMF9KUEVHX0gKIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIganBlZ19oZWFkZXJbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBqcGVnX2hlYWRlcltdID0gewogCTB4ZmYsIDB4ZDgsIDB4ZmYsIDB4ZmUsIDB4MDAsIDB4MGQsIDB4NDIsIDB4NmMsCiAJMHg3NSwgMHg2NSwgMHg2MywgMHg2OCwgMHg2NSwgMHg3MiwgMHg3MiwgMHg3OSwKIAkweDIwLCAweGZmLCAweGRiLCAweDAwLCAweDQzLCAweDAwLCAweDIwLCAweDE2LApAQCAtMTA2LDcgKzEwNiw3IEBACiAvKiBUaGlzIGlzIHRoZSBieXRlIG1hcmtlciBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBEUVQgKi8KICNkZWZpbmUgRFFUX1NUQVJUCTE3CiAjZGVmaW5lIERRVF9MRU4JCTEzOAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIganBlZ19kcXRbNF1bRFFUX0xFTl0gPSB7CitzdGF0aWMgY29uc3QgdTgganBlZ19kcXRbNF1bRFFUX0xFTl0gPSB7CiAJewogCQkweGZmLCAweGRiLCAweDAwLCAweDQzLCAweDAwLAogCQkweDA4LCAweDA2LCAweDA2LCAweDA3LCAweDA2LCAweDA1LCAweDA4LCAweDA3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvc29sbzZ4MTAtdHcyOC5jIGIvZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvc29sbzZ4MTAtdHcyOC5jCmluZGV4IGVkZDA3ODEuLjA2MzJkM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL3NvbG82eDEwL3NvbG82eDEwLXR3MjguYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC10dzI4LmMKQEAgLTUxMCw3ICs1MTAsNyBAQAogI2RlZmluZSBGSVJTVF9BQ1RJVkVfTElORQkweDAwMDgKICNkZWZpbmUgTEFTVF9BQ1RJVkVfTElORQkweDAxMDIKIAotc3RhdGljIHZvaWQgc2FhNzEyeF93cml0ZV9yZWdzKHN0cnVjdCBzb2xvX2RldiAqZGV2LCBjb25zdCB1aW50OF90ICp2YWxzLAorc3RhdGljIHZvaWQgc2FhNzEyeF93cml0ZV9yZWdzKHN0cnVjdCBzb2xvX2RldiAqZGV2LCBjb25zdCB1OCAqdmFscywKIAkJaW50IHN0YXJ0LCBpbnQgbikKIHsKIAlmb3IgKDsgc3RhcnQgPCBuOyBzdGFydCsrLCB2YWxzKyspIHsKQEAgLTUzMiw3ICs1MzIsNyBAQAogc3RhdGljIHZvaWQgc2FhNzEyeF9zZXR1cChzdHJ1Y3Qgc29sb19kZXYgKmRldikKIHsKIAljb25zdCBpbnQgcmVnX3N0YXJ0ID0gMHgyNjsKLQljb25zdCB1aW50OF90IHNhYTcxMjhfcmVnc19udHNjW10gPSB7CisJY29uc3QgdTggc2FhNzEyOF9yZWdzX250c2NbXSA9IHsKIAkvKiA6MHgyNiAqLwogCQkweDBkLCAweDAwLAogCS8qIDoweDI4ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC12NGwyLWVuYy5jIGIvZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvc29sbzZ4MTAtdjRsMi1lbmMuYwppbmRleCA2ZTkzM2QzLi41M2ZmZjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC12NGwyLWVuYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGNpL3NvbG82eDEwL3NvbG82eDEwLXY0bDItZW5jLmMKQEAgLTM4LDI4ICszOCwyOCBAQAogI2RlZmluZSBETUFfQUxJR04JCTQwOTYKIAogLyogNjAxMCBNNFYgKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHZvcF82MDEwX250c2NfZDFbXSA9IHsKK3N0YXRpYyB1OCB2b3BfNjAxMF9udHNjX2QxW10gPSB7CiAJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwKIAkweDAyLCAweDQ4LCAweDFkLCAweGMwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLAogCTB4MDAsIDB4NDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4OTcsIDB4NTMsIDB4MDQsCiAJMHgxZiwgMHg0YywgMHg1OCwgMHgxMCwgMHhmMCwgMHg3MSwgMHgxOCwgMHgzZiwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHZvcF82MDEwX250c2NfY2lmW10gPSB7CitzdGF0aWMgdTggdm9wXzYwMTBfbnRzY19jaWZbXSA9IHsKIAkweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDIwLAogCTB4MDIsIDB4NDgsIDB4MWQsIDB4YzAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4NDAsCiAJMHgwMCwgMHg0MCwgMHgwMCwgMHg4MCwgMHgwMCwgMHg5NywgMHg1MywgMHgwNCwKIAkweDFmLCAweDRjLCAweDJjLCAweDEwLCAweDc4LCAweDUxLCAweDE4LCAweDNmLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgdm9wXzYwMTBfcGFsX2QxW10gPSB7CitzdGF0aWMgdTggdm9wXzYwMTBfcGFsX2QxW10gPSB7CiAJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwKIAkweDAyLCAweDQ4LCAweDE1LCAweGMwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLAogCTB4MDAsIDB4NDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4OTcsIDB4NTMsIDB4MDQsCiAJMHgxZiwgMHg0YywgMHg1OCwgMHgxMSwgMHgyMCwgMHg3MSwgMHgxOCwgMHgzZiwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHZvcF82MDEwX3BhbF9jaWZbXSA9IHsKK3N0YXRpYyB1OCB2b3BfNjAxMF9wYWxfY2lmW10gPSB7CiAJMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgyMCwKIAkweDAyLCAweDQ4LCAweDE1LCAweGMwLCAweDAwLCAweDQwLCAweDAwLCAweDQwLAogCTB4MDAsIDB4NDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4OTcsIDB4NTMsIDB4MDQsCkBAIC02NywyNSArNjcsMjUgQEAKIH07CiAKIC8qIDYxMTAgaC4yNjQgKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHZvcF82MTEwX250c2NfZDFbXSA9IHsKK3N0YXRpYyB1OCB2b3BfNjExMF9udHNjX2QxW10gPSB7CiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHg0MiwgMHgwMCwgMHgxZSwKIAkweDlhLCAweDc0LCAweDA1LCAweDgxLCAweGVjLCAweDgwLCAweDAwLCAweDAwLAogCTB4MDAsIDB4MDEsIDB4NjgsIDB4Y2UsIDB4MzIsIDB4MjgsIDB4MDAsIDB4MDAsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciB2b3BfNjExMF9udHNjX2NpZltdID0geworc3RhdGljIHU4IHZvcF82MTEwX250c2NfY2lmW10gPSB7CiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHg0MiwgMHgwMCwgMHgxZSwKIAkweDlhLCAweDc0LCAweDBiLCAweDBmLCAweGM4LCAweDAwLCAweDAwLCAweDAwLAogCTB4MDEsIDB4NjgsIDB4Y2UsIDB4MzIsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciB2b3BfNjExMF9wYWxfZDFbXSA9IHsKK3N0YXRpYyB1OCB2b3BfNjExMF9wYWxfZDFbXSA9IHsKIAkweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweDQyLCAweDAwLCAweDFlLAogCTB4OWEsIDB4NzQsIDB4MDUsIDB4ODAsIDB4OTMsIDB4MjAsIDB4MDAsIDB4MDAsCiAJMHgwMCwgMHgwMSwgMHg2OCwgMHhjZSwgMHgzMiwgMHgyOCwgMHgwMCwgMHgwMCwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHZvcF82MTEwX3BhbF9jaWZbXSA9IHsKK3N0YXRpYyB1OCB2b3BfNjExMF9wYWxfY2lmW10gPSB7CiAJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHg0MiwgMHgwMCwgMHgxZSwKIAkweDlhLCAweDc0LCAweDBiLCAweDA0LCAweGIyLCAweDAwLCAweDAwLCAweDAwLAogCTB4MDEsIDB4NjgsIDB4Y2UsIDB4MzIsIDB4MjgsIDB4MDAsIDB4MDAsIDB4MDAsCkBAIC0xNDksNyArMTQ5LDcgQEAKIHsKIAlzdHJ1Y3Qgc29sb19kZXYgKnNvbG9fZGV2ID0gc29sb19lbmMtPnNvbG9fZGV2OwogCWludCB2b3BfbGVuOwotCXVuc2lnbmVkIGNoYXIgKnZvcDsKKwl1OCAqdm9wOwogCiAJc29sb19lbmMtPmludGVybGFjZWQgPSAoc29sb19lbmMtPm1vZGUgJiAweDA4KSA/IDEgOiAwOwogCXNvbG9fZW5jLT5id193ZWlnaHQgPSBtYXgoc29sb19kZXYtPmZwcyAvIHNvbG9fZW5jLT5pbnRlcnZhbCwgMSk7CkBAIC0yMzksOCArMjM5LDYgQEAKIAlpZiAoc29sb19lbmMtPmJ3X3dlaWdodCA+IHNvbG9fZGV2LT5lbmNfYndfcmVtYWluKQogCQlyZXR1cm4gLUVCVVNZOwogCXNvbG9fZW5jLT5zZXF1ZW5jZSA9IDA7Ci0Jc29sb19lbmMtPm1vdGlvbl9sYXN0X3N0YXRlID0gZmFsc2U7Ci0Jc29sb19lbmMtPmZyYW1lc19zaW5jZV9sYXN0X21vdGlvbiA9IDA7CiAJc29sb19kZXYtPmVuY19id19yZW1haW4gLT0gc29sb19lbmMtPmJ3X3dlaWdodDsKIAogCWlmIChzb2xvX2VuYy0+dHlwZSA9PSBTT0xPX0VOQ19UWVBFX0VYVCkKQEAgLTUyOSwzNiArNTI3LDEyIEBACiAJfQogCiAJaWYgKCFyZXQpIHsKLQkJYm9vbCBzZW5kX2V2ZW50ID0gZmFsc2U7Ci0KIAkJdmItPnY0bDJfYnVmLnNlcXVlbmNlID0gc29sb19lbmMtPnNlcXVlbmNlKys7CiAJCXZiLT52NGwyX2J1Zi50aW1lc3RhbXAudHZfc2VjID0gdm9wX3NlYyh2aCk7CiAJCXZiLT52NGwyX2J1Zi50aW1lc3RhbXAudHZfdXNlYyA9IHZvcF91c2VjKHZoKTsKIAogCQkvKiBDaGVjayBmb3IgbW90aW9uIGZsYWdzICovCi0JCWlmIChzb2xvX2lzX21vdGlvbl9vbihzb2xvX2VuYykpIHsKLQkJCS8qIEl0IHRha2VzIGEgZmV3IGZyYW1lcyBmb3IgdGhlIGhhcmR3YXJlIHRvIGRldGVjdAotCQkJICogbW90aW9uLiBPbmNlIGl0IGRvZXMgaXQgY2xlYXJzIHRoZSBtb3Rpb24gZGV0ZWN0aW9uCi0JCQkgKiByZWdpc3RlciBhbmQgaXQgdGFrZXMgYWdhaW4gYSBmZXcgZnJhbWVzIGJlZm9yZQotCQkJICogbW90aW9uIGlzIHNlZW4uIFRoaXMgbWVhbnMgaW4gcHJhY3RpY2UgdGhhdCB3aGVuIHRoZQotCQkJICogbW90aW9uIGZpZWxkIGlzIDEsIGl0IHdpbGwgZ28gYmFjayB0byAwIGZvciB0aGUgbmV4dAotCQkJICogZnJhbWUuIFRoaXMgbGVhZHMgdG8gbW90aW9uIGRldGVjdGlvbiBldmVudCBiZWluZwotCQkJICogc2VudCBhbGwgdGhlIHRpbWUsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuCi0JCQkgKiBJbnN0ZWFkIHdhaXQgYSBmZXcgZnJhbWVzIGJlZm9yZSBkZWNpZGluZyB0aGF0IHRoZQotCQkJICogbW90aW9uIGhhcyBoYWx0ZWQuIEFmdGVyIHNvbWUgZXhwZXJpbWVudGF0aW9uIGl0Ci0JCQkgKiB0dXJucyBvdXQgdGhhdCB3YWl0aW5nIGZvciA1IGZyYW1lcyB3b3JrcyB3ZWxsLgotCQkJICovCi0JCQlpZiAoZW5jX2J1Zi0+bW90aW9uID09IDAgJiYKLQkJCSAgICBzb2xvX2VuYy0+bW90aW9uX2xhc3Rfc3RhdGUgJiYKLQkJCSAgICBzb2xvX2VuYy0+ZnJhbWVzX3NpbmNlX2xhc3RfbW90aW9uKysgPiA1KQotCQkJCXNlbmRfZXZlbnQgPSB0cnVlOwotCQkJZWxzZSBpZiAoZW5jX2J1Zi0+bW90aW9uKSB7Ci0JCQkJc29sb19lbmMtPmZyYW1lc19zaW5jZV9sYXN0X21vdGlvbiA9IDA7Ci0JCQkJc2VuZF9ldmVudCA9ICFzb2xvX2VuYy0+bW90aW9uX2xhc3Rfc3RhdGU7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoc2VuZF9ldmVudCkgeworCQlpZiAoc29sb19pc19tb3Rpb25fb24oc29sb19lbmMpICYmIGVuY19idWYtPm1vdGlvbikgewogCQkJc3RydWN0IHY0bDJfZXZlbnQgZXYgPSB7CiAJCQkJLnR5cGUgPSBWNEwyX0VWRU5UX01PVElPTl9ERVQsCiAJCQkJLnUubW90aW9uX2RldCA9IHsKQEAgLTU2OCw4ICs1NDIsNiBAQAogCQkJCX0sCiAJCQl9OwogCi0JCQlzb2xvX2VuYy0+bW90aW9uX2xhc3Rfc3RhdGUgPSBlbmNfYnVmLT5tb3Rpb247Ci0JCQlzb2xvX2VuYy0+ZnJhbWVzX3NpbmNlX2xhc3RfbW90aW9uID0gMDsKIAkJCXY0bDJfZXZlbnRfcXVldWUoc29sb19lbmMtPnZmZCwgJmV2KTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL3NvbG82eDEwL3NvbG82eDEwLmggYi9kcml2ZXJzL21lZGlhL3BjaS9zb2xvNngxMC9zb2xvNngxMC5oCmluZGV4IGJkOGVkZmEuLjFjYTU0YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGNpL3NvbG82eDEwL3NvbG82eDEwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvc29sbzZ4MTAvc29sbzZ4MTAuaApAQCAtMTU5LDggKzE1OSw2IEBACiAJdTE2CQkJbW90aW9uX3RocmVzaDsKIAlib29sCQkJbW90aW9uX2dsb2JhbDsKIAlib29sCQkJbW90aW9uX2VuYWJsZWQ7Ci0JYm9vbAkJCW1vdGlvbl9sYXN0X3N0YXRlOwotCXU4CQkJZnJhbWVzX3NpbmNlX2xhc3RfbW90aW9uOwogCXUxNgkJCXdpZHRoOwogCXUxNgkJCWhlaWdodDsKIApAQCAtMTcwLDkgKzE2OCw5IEBACiAJCQkJCV9fYWxpZ25lZCg0KTsKIAogCS8qIFZPUCBzdHVmZiAqLwotCXVuc2lnbmVkIGNoYXIJCXZvcFs2NF07CisJdTgJCQl2b3BbNjRdOwogCWludAkJCXZvcF9sZW47Ci0JdW5zaWduZWQgY2hhcgkJanBlZ19oZWFkZXJbMTAyNF07CisJdTgJCQlqcGVnX2hlYWRlclsxMDI0XTsKIAlpbnQJCQlqcGVnX2xlbjsKIAogCXUzMgkJCWZtdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL3N0YTJ4MTEvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcGNpL3N0YTJ4MTEvS2NvbmZpZwppbmRleCBmNmYzMGFiLi5lMDM1ODdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BjaS9zdGEyeDExL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvc3RhMngxMS9LY29uZmlnCkBAIC01LDYgKzUsNyBAQAogCXNlbGVjdCBWSURFT19BRFY3MTgwIGlmIE1FRElBX1NVQkRSVl9BVVRPU0VMRUNUCiAJc2VsZWN0IFZJREVPQlVGMl9ETUFfQ09OVElHCiAJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMiAmJiBWSVJUX1RPX0JVUworCWRlcGVuZHMgb24gVklERU9fVjRMMl9TVUJERVZfQVBJCiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBTYXkgWSBmb3Igc3VwcG9ydCBmb3IgU1RBMlgxMSBWSVAgKFZpZGVvIElucHV0IFBvcnQpIGNhcHR1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL3R0cGNpL2F2NzExMC5jIGIvZHJpdmVycy9tZWRpYS9wY2kvdHRwY2kvYXY3MTEwLmMKaW5kZXggYzFmMDYxNy4uNDUxOTlhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvdHRwY2kvYXY3MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvdHRwY2kvYXY3MTEwLmMKQEAgLTEyMTksMTEgKzEyMTksMTQgQEAKIAogc3RhdGljIGludCBzdGFydF90c19jYXB0dXJlKHN0cnVjdCBhdjcxMTAgKmJ1ZGdldCkKIHsKKwl1bnNpZ25lZCB5OworCiAJZHByaW50aygyLCAiYnVkZ2V0OiAlcFxuIiwgYnVkZ2V0KTsKIAogCWlmIChidWRnZXQtPmZlZWRpbmcxKQogCQlyZXR1cm4gKytidWRnZXQtPmZlZWRpbmcxOwotCW1lbXNldChidWRnZXQtPmdyYWJiaW5nLCAweDAwLCBUU19CVUZMRU4pOworCWZvciAoeSA9IDA7IHkgPCBUU19IRUlHSFQ7IHkrKykKKwkJbWVtc2V0KGJ1ZGdldC0+Z3JhYmJpbmcgKyB5ICogVFNfV0lEVEgsIDB4MDAsIFRTX1dJRFRIKTsKIAlidWRnZXQtPnR0YnAgPSAwOwogCVNBQTcxNDZfSVNSX0NMRUFSKGJ1ZGdldC0+ZGV2LCBNQVNLXzEwKTsgIC8qIFZQRSAqLwogCVNBQTcxNDZfSUVSX0VOQUJMRShidWRnZXQtPmRldiwgTUFTS18xMCk7IC8qIFZQRSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wY2kvdHRwY2kvYnVkZ2V0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvcGNpL3R0cGNpL2J1ZGdldC1jb3JlLmMKaW5kZXggMzdkMDJmZS4uMjNlMDU0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvdHRwY2kvYnVkZ2V0LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3BjaS90dHBjaS9idWRnZXQtY29yZS5jCkBAIC0yMzEsNjMgKzIzMSw1OSBAQAogfQogCiAKLWludCB0dHBjaV9idWRnZXRfZGViaXJlYWQoc3RydWN0IGJ1ZGdldCAqYnVkZ2V0LCB1MzIgY29uZmlnLCBpbnQgYWRkciwgaW50IGNvdW50LAotCQkJICBpbnQgdXNlbG9ja3MsIGludCBub2J1c3lsb29wKQorc3RhdGljIGludCB0dHBjaV9idWRnZXRfZGViaXJlYWRfbm9sb2NrKHN0cnVjdCBidWRnZXQgKmJ1ZGdldCwgdTMyIGNvbmZpZywKKwkJaW50IGFkZHIsIGludCBjb3VudCwgaW50IG5vYnVzeWxvb3ApCiB7CiAJc3RydWN0IHNhYTcxNDZfZGV2ICpzYWEgPSBidWRnZXQtPmRldjsKLQlpbnQgcmVzdWx0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlpbnQgcmVzdWx0OwogCi0JaWYgKGNvdW50ID4gNCB8fCBjb3VudCA8PSAwKQotCQlyZXR1cm4gMDsKLQotCWlmICh1c2Vsb2NrcykKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmJ1ZGdldC0+ZGViaWxvY2ssIGZsYWdzKTsKLQotCWlmICgocmVzdWx0ID0gc2FhNzE0Nl93YWl0X2Zvcl9kZWJpX2RvbmUoc2FhLCBub2J1c3lsb29wKSkgPCAwKSB7Ci0JCWlmICh1c2Vsb2NrcykKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1ZGdldC0+ZGViaWxvY2ssIGZsYWdzKTsKKwlyZXN1bHQgPSBzYWE3MTQ2X3dhaXRfZm9yX2RlYmlfZG9uZShzYWEsIG5vYnVzeWxvb3ApOworCWlmIChyZXN1bHQgPCAwKQogCQlyZXR1cm4gcmVzdWx0OwotCX0KIAogCXNhYTcxNDZfd3JpdGUoc2FhLCBERUJJX0NPTU1BTkQsIChjb3VudCA8PCAxNykgfCAweDEwMDAwIHwgKGFkZHIgJiAweGZmZmYpKTsKIAlzYWE3MTQ2X3dyaXRlKHNhYSwgREVCSV9DT05GSUcsIGNvbmZpZyk7CiAJc2FhNzE0Nl93cml0ZShzYWEsIERFQklfUEFHRSwgMCk7CiAJc2FhNzE0Nl93cml0ZShzYWEsIE1DMiwgKDIgPDwgMTYpIHwgMik7CiAKLQlpZiAoKHJlc3VsdCA9IHNhYTcxNDZfd2FpdF9mb3JfZGViaV9kb25lKHNhYSwgbm9idXN5bG9vcCkpIDwgMCkgewotCQlpZiAodXNlbG9ja3MpCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidWRnZXQtPmRlYmlsb2NrLCBmbGFncyk7CisJcmVzdWx0ID0gc2FhNzE0Nl93YWl0X2Zvcl9kZWJpX2RvbmUoc2FhLCBub2J1c3lsb29wKTsKKwlpZiAocmVzdWx0IDwgMCkKIAkJcmV0dXJuIHJlc3VsdDsKLQl9CiAKIAlyZXN1bHQgPSBzYWE3MTQ2X3JlYWQoc2FhLCBERUJJX0FEKTsKIAlyZXN1bHQgJj0gKDB4ZmZmZmZmZmZVTCA+PiAoKDQgLSBjb3VudCkgKiA4KSk7Ci0KLQlpZiAodXNlbG9ja3MpCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1ZGdldC0+ZGViaWxvY2ssIGZsYWdzKTsKLQogCXJldHVybiByZXN1bHQ7CiB9CiAKLWludCB0dHBjaV9idWRnZXRfZGViaXdyaXRlKHN0cnVjdCBidWRnZXQgKmJ1ZGdldCwgdTMyIGNvbmZpZywgaW50IGFkZHIsCi0JCQkgICBpbnQgY291bnQsIHUzMiB2YWx1ZSwgaW50IHVzZWxvY2tzLCBpbnQgbm9idXN5bG9vcCkKK2ludCB0dHBjaV9idWRnZXRfZGViaXJlYWQoc3RydWN0IGJ1ZGdldCAqYnVkZ2V0LCB1MzIgY29uZmlnLCBpbnQgYWRkciwgaW50IGNvdW50LAorCQkJICBpbnQgdXNlbG9ja3MsIGludCBub2J1c3lsb29wKQogewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqc2FhID0gYnVkZ2V0LT5kZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7Ci0JaW50IHJlc3VsdDsKLQogCWlmIChjb3VudCA+IDQgfHwgY291bnQgPD0gMCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodXNlbG9ja3MpCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZidWRnZXQtPmRlYmlsb2NrLCBmbGFncyk7CisJaWYgKHVzZWxvY2tzKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCWludCByZXN1bHQ7CiAKLQlpZiAoKHJlc3VsdCA9IHNhYTcxNDZfd2FpdF9mb3JfZGViaV9kb25lKHNhYSwgbm9idXN5bG9vcCkpIDwgMCkgewotCQlpZiAodXNlbG9ja3MpCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidWRnZXQtPmRlYmlsb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZidWRnZXQtPmRlYmlsb2NrLCBmbGFncyk7CisJCXJlc3VsdCA9IHR0cGNpX2J1ZGdldF9kZWJpcmVhZF9ub2xvY2soYnVkZ2V0LCBjb25maWcsIGFkZHIsCisJCQkJCQkgICAgICBjb3VudCwgbm9idXN5bG9vcCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1ZGdldC0+ZGViaWxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CisJcmV0dXJuIHR0cGNpX2J1ZGdldF9kZWJpcmVhZF9ub2xvY2soYnVkZ2V0LCBjb25maWcsIGFkZHIsCisJCQkJCSAgICBjb3VudCwgbm9idXN5bG9vcCk7Cit9CisKK3N0YXRpYyBpbnQgdHRwY2lfYnVkZ2V0X2RlYml3cml0ZV9ub2xvY2soc3RydWN0IGJ1ZGdldCAqYnVkZ2V0LCB1MzIgY29uZmlnLAorCQlpbnQgYWRkciwgaW50IGNvdW50LCB1MzIgdmFsdWUsIGludCBub2J1c3lsb29wKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqc2FhID0gYnVkZ2V0LT5kZXY7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IHNhYTcxNDZfd2FpdF9mb3JfZGViaV9kb25lKHNhYSwgbm9idXN5bG9vcCk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CiAKIAlzYWE3MTQ2X3dyaXRlKHNhYSwgREVCSV9DT01NQU5ELCAoY291bnQgPDwgMTcpIHwgMHgwMDAwMCB8IChhZGRyICYgMHhmZmZmKSk7CiAJc2FhNzE0Nl93cml0ZShzYWEsIERFQklfQ09ORklHLCBjb25maWcpOwpAQCAtMjk1LDE1ICsyOTEsMjggQEAKIAlzYWE3MTQ2X3dyaXRlKHNhYSwgREVCSV9BRCwgdmFsdWUpOwogCXNhYTcxNDZfd3JpdGUoc2FhLCBNQzIsICgyIDw8IDE2KSB8IDIpOwogCi0JaWYgKChyZXN1bHQgPSBzYWE3MTQ2X3dhaXRfZm9yX2RlYmlfZG9uZShzYWEsIG5vYnVzeWxvb3ApKSA8IDApIHsKLQkJaWYgKHVzZWxvY2tzKQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVkZ2V0LT5kZWJpbG9jaywgZmxhZ3MpOworCXJlc3VsdCA9IHNhYTcxNDZfd2FpdF9mb3JfZGViaV9kb25lKHNhYSwgbm9idXN5bG9vcCk7CisJcmV0dXJuIHJlc3VsdCA8IDAgPyByZXN1bHQgOiAwOworfQorCitpbnQgdHRwY2lfYnVkZ2V0X2RlYml3cml0ZShzdHJ1Y3QgYnVkZ2V0ICpidWRnZXQsIHUzMiBjb25maWcsIGludCBhZGRyLAorCQkJICAgaW50IGNvdW50LCB1MzIgdmFsdWUsIGludCB1c2Vsb2NrcywgaW50IG5vYnVzeWxvb3ApCit7CisJaWYgKGNvdW50ID4gNCB8fCBjb3VudCA8PSAwKQorCQlyZXR1cm4gMDsKKworCWlmICh1c2Vsb2NrcykgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlpbnQgcmVzdWx0OworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZidWRnZXQtPmRlYmlsb2NrLCBmbGFncyk7CisJCXJlc3VsdCA9IHR0cGNpX2J1ZGdldF9kZWJpd3JpdGVfbm9sb2NrKGJ1ZGdldCwgY29uZmlnLCBhZGRyLAorCQkJCQkJY291bnQsIHZhbHVlLCBub2J1c3lsb29wKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVkZ2V0LT5kZWJpbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gcmVzdWx0OwogCX0KLQotCWlmICh1c2Vsb2NrcykKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVkZ2V0LT5kZWJpbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOworCXJldHVybiB0dHBjaV9idWRnZXRfZGViaXdyaXRlX25vbG9jayhidWRnZXQsIGNvbmZpZywgYWRkciwKKwkJCQkJICAgICBjb3VudCwgdmFsdWUsIG5vYnVzeWxvb3ApOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGNpL3R3NjgvdHc2OC5oIGIvZHJpdmVycy9tZWRpYS9wY2kvdHc2OC90dzY4LmgKaW5kZXggN2E3NTAxYi4uOTNmMjMzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wY2kvdHc2OC90dzY4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9wY2kvdHc2OC90dzY4LmgKQEAgLTI1LDcgKzI1LDYgQEAKICAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vS2NvbmZpZwppbmRleCA3NjViZmZiLi5kOWI4NzJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9LY29uZmlnCkBAIC01NiwxMCArNTYsOCBAQAogCiBjb25maWcgVklERU9fVElNQkVSREFMRQogCXRyaXN0YXRlICJTdXBwb3J0IGZvciB0aW1iZXJkYWxlIFZpZGVvIEluL0xvZ2lXSU4iCi0JZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQyAmJiBETUFERVZJQ0VTCi0JZGVwZW5kcyBvbiBNRkRfVElNQkVSREFMRSB8fCBDT01QSUxFX1RFU1QKLQlzZWxlY3QgRE1BX0VOR0lORQotCXNlbGVjdCBUSU1CX0RNQQorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMgJiYgVklERU9fVjRMMl9TVUJERVZfQVBJCisJZGVwZW5kcyBvbiAoTUZEX1RJTUJFUkRBTEUgJiYgVElNQl9ETUEpIHx8IENPTVBJTEVfVEVTVAogCXNlbGVjdCBWSURFT19BRFY3MTgwCiAJc2VsZWN0IFZJREVPQlVGX0RNQV9DT05USUcKIAktLS1oZWxwLS0tCkBAIC0xMTgsNiArMTE2LDcgQEAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vZXh5bm9zNC1pcy9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3M1cC10di9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtNDM3eC9LY29uZmlnIgogCiBlbmRpZiAjIFY0TF9QTEFURk9STV9EUklWRVJTCiAKQEAgLTE0MCw2ICsxMzksNyBAQAogCWRlcGVuZHMgb24gSEFTX0RNQQogCXNlbGVjdCBTUkFNCiAJc2VsZWN0IFZJREVPQlVGMl9ETUFfQ09OVElHCisJc2VsZWN0IFZJREVPQlVGMl9WTUFMTE9DCiAJc2VsZWN0IFY0TDJfTUVNMk1FTV9ERVYKIAlzZWxlY3QgR0VORVJJQ19BTExPQ0FUT1IKIAktLS1oZWxwLS0tCkBAIC0yMTMsNyArMjEzLDYgQEAKIGNvbmZpZyBWSURFT19TSF9WRVUKIAl0cmlzdGF0ZSAiU3VwZXJIIFZFVSBtZW0ybWVtIHZpZGVvIHByb2Nlc3NpbmcgZHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIFZJREVPX1Y0TDIgJiYgSEFTX0RNQQotCWRlcGVuZHMgb24gSEFTX0RNQQogCXNlbGVjdCBWSURFT0JVRjJfRE1BX0NPTlRJRwogCXNlbGVjdCBWNEwyX01FTTJNRU1fREVWCiAJaGVscApAQCAtMjIzLDcgKzIyMiw3IEBACiBjb25maWcgVklERU9fUkVORVNBU19WU1AxCiAJdHJpc3RhdGUgIlJlbmVzYXMgVlNQMSBWaWRlbyBQcm9jZXNzaW5nIEVuZ2luZSIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVklERU9fVjRMMl9TVUJERVZfQVBJICYmIEhBU19ETUEKLQlkZXBlbmRzIG9uIEFSQ0hfU0hNT0JJTEUgfHwgQ09NUElMRV9URVNUCisJZGVwZW5kcyBvbiAoQVJDSF9TSE1PQklMRSAmJiBPRikgfHwgQ09NUElMRV9URVNUCiAJc2VsZWN0IFZJREVPQlVGMl9ETUFfQ09OVElHCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhIFY0TDIgZHJpdmVyIGZvciB0aGUgUmVuZXNhcyBWU1AxIHZpZGVvIHByb2Nlc3NpbmcgZW5naW5lLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vTWFrZWZpbGUKaW5kZXggYTQ5OTM2Yi4uM2VjMTU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL01ha2VmaWxlCkBAIC00Niw0ICs0Niw2IEBACiAKIG9iai15CSs9IG9tYXAvCiAKK29iai0kKENPTkZJR19WSURFT19BTTQzN1hfVlBGRSkJCSs9IGFtNDM3eC8KKwogY2NmbGFncy15ICs9IC1JJChzcmN0cmVlKS9kcml2ZXJzL21lZGlhL2kyYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbTQzN3gvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW00Mzd4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwMjNhNzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtNDM3eC9LY29uZmlnCkBAIC0wLDAgKzEsMTEgQEAKK2NvbmZpZyBWSURFT19BTTQzN1hfVlBGRQorCXRyaXN0YXRlICJUSSBBTTQzN3ggVlBGRSB2aWRlbyBjYXB0dXJlIGRyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVklERU9fVjRMMl9TVUJERVZfQVBJCisJZGVwZW5kcyBvbiBTT0NfQU00M1hYIHx8IENPTVBJTEVfVEVTVAorCXNlbGVjdCBWSURFT0JVRjJfRE1BX0NPTlRJRworCWhlbHAKKwkgICBTdXBwb3J0IGZvciBBTTQzN3ggVmlkZW8gUHJvY2Vzc2luZyBGcm9udCBFbmQgYmFzZWQgVmlkZW8KKwkgICBDYXB0dXJlIERyaXZlci4KKworCSAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKKwkgICB3aWxsIGJlIGNhbGxlZCBhbTQzN3gtdnBmZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW00Mzd4L01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbTQzN3gvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDExZmZmMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW00Mzd4L01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorIyBNYWtlZmlsZSBmb3IgQU00Mzd4IFZQRkUgZHJpdmVyCisKK29iai0kKENPTkZJR19WSURFT19BTTQzN1hfVlBGRSkgKz0gYW00Mzd4LXZwZmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbTQzN3gvYW00Mzd4LXZwZmUuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW00Mzd4L2FtNDM3eC12cGZlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhNWNiMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW00Mzd4L2FtNDM3eC12cGZlLmMKQEAgLTAsMCArMSwyNzc2IEBACisvKgorICogVEkgVlBGRSBjYXB0dXJlIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTQgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBCZW5vaXQgUGFycm90IDxicGFycm90QHRpLmNvbT4KKyAqIExhZCwgUHJhYmhha2FyIDxwcmFiaGFrYXIuY3NlbmdnQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKworI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLW9mLmg+CisKKyNpbmNsdWRlICJhbTQzN3gtdnBmZS5oIgorCisjZGVmaW5lIFZQRkVfTU9EVUxFX05BTUUJInZwZmUiCisjZGVmaW5lIFZQRkVfVkVSU0lPTgkJIjAuMS4wIgorCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsIDAtOCIpOworCisjZGVmaW5lIHZwZmVfZGJnKGxldmVsLCBkZXYsIGZtdCwgYXJnLi4uKQlcCisJCXY0bDJfZGJnKGxldmVsLCBkZWJ1ZywgJmRldi0+djRsMl9kZXYsIGZtdCwgIyNhcmcpCisjZGVmaW5lIHZwZmVfaW5mbyhkZXYsIGZtdCwgYXJnLi4uKQlcCisJCXY0bDJfaW5mbygmZGV2LT52NGwyX2RldiwgZm10LCAjI2FyZykKKyNkZWZpbmUgdnBmZV9lcnIoZGV2LCBmbXQsIGFyZy4uLikJXAorCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgZm10LCAjI2FyZykKKworLyogc3RhbmRhcmQgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCB2cGZlX3N0YW5kYXJkIHsKKwl2NGwyX3N0ZF9pZCBzdGRfaWQ7CisJdW5zaWduZWQgaW50IHdpZHRoOworCXVuc2lnbmVkIGludCBoZWlnaHQ7CisJc3RydWN0IHY0bDJfZnJhY3QgcGl4ZWxhc3BlY3Q7CisJaW50IGZyYW1lX2Zvcm1hdDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdnBmZV9zdGFuZGFyZCB2cGZlX3N0YW5kYXJkc1tdID0geworCXtWNEwyX1NURF81MjVfNjAsIDcyMCwgNDgwLCB7MTEsIDEwfSwgMX0sCisJe1Y0TDJfU1REXzYyNV81MCwgNzIwLCA1NzYsIHs1NCwgNTl9LCAxfSwKK307CisKK3N0cnVjdCBidXNfZm9ybWF0IHsKKwl1bnNpZ25lZCBpbnQgd2lkdGg7CisJdW5zaWduZWQgaW50IGJwcDsKK307CisKKy8qCisgKiBzdHJ1Y3QgdnBmZV9mbXQgLSBWUEZFIG1lZGlhIGJ1cyBmb3JtYXQgaW5mb3JtYXRpb24KKyAqIEBuYW1lOiBWNEwyIGZvcm1hdCBkZXNjcmlwdGlvbgorICogQGNvZGU6IFY0TDIgbWVkaWEgYnVzIGZvcm1hdCBjb2RlCisgKiBAc2hpZnRlZDogVjRMMiBtZWRpYSBidXMgZm9ybWF0IGNvZGUgZm9yIHRoZSBzYW1lIHBpeGVsIGxheW91dCBidXQKKyAqCXNoaWZ0ZWQgdG8gYmUgOCBiaXRzIHBlciBwaXhlbC4gPTAgaWYgZm9ybWF0IGlzIG5vdCBzaGlmdGFibGUuCisgKiBAcGl4ZWxmb3JtYXQ6IFY0TDIgcGl4ZWwgZm9ybWF0IEZDQyBpZGVudGlmaWVyCisgKiBAd2lkdGg6IEJpdHMgcGVyIHBpeGVsICh3aGVuIHRyYW5zZmVycmVkIG92ZXIgYSBidXMpCisgKiBAYnBwOiBCeXRlcyBwZXIgcGl4ZWwgKHdoZW4gc3RvcmVkIGluIG1lbW9yeSkKKyAqIEBzdXBwb3J0ZWQ6IEluZGljYXRlcyBmb3JtYXQgc3VwcG9ydGVkIGJ5IHN1YmRldgorICovCitzdHJ1Y3QgdnBmZV9mbXQgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTMyIGZvdXJjYzsKKwl1MzIgY29kZTsKKwlzdHJ1Y3QgYnVzX2Zvcm1hdCBsOworCXN0cnVjdCBidXNfZm9ybWF0IHM7CisJYm9vbCBzdXBwb3J0ZWQ7CisJdTMyIGluZGV4OworfTsKKworc3RhdGljIHN0cnVjdCB2cGZlX2ZtdCBmb3JtYXRzW10gPSB7CisJeworCQkubmFtZQkJPSAiWVVWIDQ6MjoyIHBhY2tlZCwgWUNiWUNyIiwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVZViwKKwkJLmNvZGUJCT0gTUVESUFfQlVTX0ZNVF9ZVVlWOF8yWDgsCisJCS5sLndpZHRoCT0gMTAsCisJCS5sLmJwcAkJPSA0LAorCQkucy53aWR0aAk9IDgsCisJCS5zLmJwcAkJPSAyLAorCQkuc3VwcG9ydGVkCT0gZmFsc2UsCisJfSwgeworCQkubmFtZQkJPSAiWVVWIDQ6MjoyIHBhY2tlZCwgQ2JZQ3JZIiwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfVVlWWSwKKwkJLmNvZGUJCT0gTUVESUFfQlVTX0ZNVF9VWVZZOF8yWDgsCisJCS5sLndpZHRoCT0gMTAsCisJCS5sLmJwcAkJPSA0LAorCQkucy53aWR0aAk9IDgsCisJCS5zLmJwcAkJPSAyLAorCQkuc3VwcG9ydGVkCT0gZmFsc2UsCisJfSwgeworCQkubmFtZQkJPSAiWVVWIDQ6MjoyIHBhY2tlZCwgWUNyWUNiIiwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVZZVSwKKwkJLmNvZGUJCT0gTUVESUFfQlVTX0ZNVF9ZVllVOF8yWDgsCisJCS5sLndpZHRoCT0gMTAsCisJCS5sLmJwcAkJPSA0LAorCQkucy53aWR0aAk9IDgsCisJCS5zLmJwcAkJPSAyLAorCQkuc3VwcG9ydGVkCT0gZmFsc2UsCisJfSwgeworCQkubmFtZQkJPSAiWVVWIDQ6MjoyIHBhY2tlZCwgQ3JZQ2JZIiwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfVllVWSwKKwkJLmNvZGUJCT0gTUVESUFfQlVTX0ZNVF9WWVVZOF8yWDgsCisJCS5sLndpZHRoCT0gMTAsCisJCS5sLmJwcAkJPSA0LAorCQkucy53aWR0aAk9IDgsCisJCS5zLmJwcAkJPSAyLAorCQkuc3VwcG9ydGVkCT0gZmFsc2UsCisJfSwgeworCQkubmFtZQkJPSAiUkFXOCBCR0dSIiwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQkuY29kZQkJPSBNRURJQV9CVVNfRk1UX1NCR0dSOF8xWDgsCisJCS5sLndpZHRoCT0gMTAsCisJCS5sLmJwcAkJPSAyLAorCQkucy53aWR0aAk9IDgsCisJCS5zLmJwcAkJPSAxLAorCQkuc3VwcG9ydGVkCT0gZmFsc2UsCisJfSwgeworCQkubmFtZQkJPSAiUkFXOCBHQlJHIiwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dCUkc4LAorCQkuY29kZQkJPSBNRURJQV9CVVNfRk1UX1NHQlJHOF8xWDgsCisJCS5sLndpZHRoCT0gMTAsCisJCS5sLmJwcAkJPSAyLAorCQkucy53aWR0aAk9IDgsCisJCS5zLmJwcAkJPSAxLAorCQkuc3VwcG9ydGVkCT0gZmFsc2UsCisJfSwgeworCQkubmFtZQkJPSAiUkFXOCBHUkJHIiwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dSQkc4LAorCQkuY29kZQkJPSBNRURJQV9CVVNfRk1UX1NHUkJHOF8xWDgsCisJCS5sLndpZHRoCT0gMTAsCisJCS5sLmJwcAkJPSAyLAorCQkucy53aWR0aAk9IDgsCisJCS5zLmJwcAkJPSAxLAorCQkuc3VwcG9ydGVkCT0gZmFsc2UsCisJfSwgeworCQkubmFtZQkJPSAiUkFXOCBSR0dCIiwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU1JHR0I4LAorCQkuY29kZQkJPSBNRURJQV9CVVNfRk1UX1NSR0dCOF8xWDgsCisJCS5sLndpZHRoCT0gMTAsCisJCS5sLmJwcAkJPSAyLAorCQkucy53aWR0aAk9IDgsCisJCS5zLmJwcAkJPSAxLAorCQkuc3VwcG9ydGVkCT0gZmFsc2UsCisJfSwgeworCQkubmFtZQkJPSAiUkdCNTY1IChMRSkiLAorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9SR0I1NjUsCisJCS5jb2RlCQk9IE1FRElBX0JVU19GTVRfUkdCNTY1XzJYOF9MRSwKKwkJLmwud2lkdGgJPSAxMCwKKwkJLmwuYnBwCQk9IDQsCisJCS5zLndpZHRoCT0gOCwKKwkJLnMuYnBwCQk9IDIsCisJCS5zdXBwb3J0ZWQJPSBmYWxzZSwKKwl9LCB7CisJCS5uYW1lCQk9ICJSR0I1NjUgKEJFKSIsCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1JHQjU2NVgsCisJCS5jb2RlCQk9IE1FRElBX0JVU19GTVRfUkdCNTY1XzJYOF9CRSwKKwkJLmwud2lkdGgJPSAxMCwKKwkJLmwuYnBwCQk9IDQsCisJCS5zLndpZHRoCT0gOCwKKwkJLnMuYnBwCQk9IDIsCisJCS5zdXBwb3J0ZWQJPSBmYWxzZSwKKwl9LAorfTsKKworc3RhdGljIGludAorX192cGZlX2dldF9mb3JtYXQoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlLAorCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0LCB1bnNpZ25lZCBpbnQgKmJwcCk7CisKK3N0YXRpYyBzdHJ1Y3QgdnBmZV9mbXQgKmZpbmRfZm9ybWF0X2J5X2NvZGUodW5zaWduZWQgaW50IGNvZGUpCit7CisJc3RydWN0IHZwZmVfZm10ICpmbXQ7CisJdW5zaWduZWQgaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRShmb3JtYXRzKTsgaysrKSB7CisJCWZtdCA9ICZmb3JtYXRzW2tdOworCQlpZiAoZm10LT5jb2RlID09IGNvZGUpCisJCQlyZXR1cm4gZm10OworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHZwZmVfZm10ICpmaW5kX2Zvcm1hdF9ieV9waXgodW5zaWduZWQgaW50IHBpeGVsZm9ybWF0KQoreworCXN0cnVjdCB2cGZlX2ZtdCAqZm10OworCXVuc2lnbmVkIGludCBrOworCisJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUoZm9ybWF0cyk7IGsrKykgeworCQlmbXQgPSAmZm9ybWF0c1trXTsKKwkJaWYgKGZtdC0+Zm91cmNjID09IHBpeGVsZm9ybWF0KQorCQkJcmV0dXJuIGZtdDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK21idXNfdG9fcGl4KHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSwKKwkgICAgY29uc3Qgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqbWJ1cywKKwkgICAgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4LCB1bnNpZ25lZCBpbnQgKmJwcCkKK3sKKwlzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyAqc2RpbmZvID0gdnBmZS0+Y3VycmVudF9zdWJkZXY7CisJdW5zaWduZWQgaW50IGJ1c193aWR0aCA9IHNkaW5mby0+dnBmZV9wYXJhbS5idXNfd2lkdGg7CisJc3RydWN0IHZwZmVfZm10ICpmbXQ7CisKKwlmbXQgPSBmaW5kX2Zvcm1hdF9ieV9jb2RlKG1idXMtPmNvZGUpOworCWlmIChXQVJOX09OKGZtdCA9PSBOVUxMKSkgeworCQlwcl9lcnIoIkludmFsaWQgbWJ1cyBjb2RlIHNldFxuIik7CisJCSpicHAgPSAxOworCQlyZXR1cm47CisJfQorCisJbWVtc2V0KHBpeCwgMCwgc2l6ZW9mKCpwaXgpKTsKKwl2NGwyX2ZpbGxfcGl4X2Zvcm1hdChwaXgsIG1idXMpOworCXBpeC0+cGl4ZWxmb3JtYXQgPSBmbXQtPmZvdXJjYzsKKwkqYnBwID0gKGJ1c193aWR0aCA9PSAxMCkgPyAgZm10LT5sLmJwcCA6IGZtdC0+cy5icHA7CisKKwkvKiBwaXRjaCBzaG91bGQgYmUgMzIgYnl0ZXMgYWxpZ25lZCAqLworCXBpeC0+Ynl0ZXNwZXJsaW5lID0gQUxJR04ocGl4LT53aWR0aCAqICpicHAsIDMyKTsKKwlwaXgtPnNpemVpbWFnZSA9IHBpeC0+Ynl0ZXNwZXJsaW5lICogcGl4LT5oZWlnaHQ7Cit9CisKK3N0YXRpYyB2b2lkIHBpeF90b19tYnVzKHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSwKKwkJCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeF9mbXQsCisJCQlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICptYnVzX2ZtdCkKK3sKKwlzdHJ1Y3QgdnBmZV9mbXQgKmZtdDsKKworCWZtdCA9IGZpbmRfZm9ybWF0X2J5X3BpeChwaXhfZm10LT5waXhlbGZvcm1hdCk7CisJaWYgKCFmbXQpIHsKKwkJLyogZGVmYXVsdCB0byBmaXJzdCBlbnRyeSAqLworCQl2cGZlX2RiZygzLCB2cGZlLCAiSW52YWxpZCBwaXhlbCBjb2RlOiAleCwgZGVmYXVsdCB1c2VkIGluc3RlYWRcbiIsCisJCQlwaXhfZm10LT5waXhlbGZvcm1hdCk7CisJCWZtdCA9ICZmb3JtYXRzWzBdOworCX0KKworCW1lbXNldChtYnVzX2ZtdCwgMCwgc2l6ZW9mKCptYnVzX2ZtdCkpOworCXY0bDJfZmlsbF9tYnVzX2Zvcm1hdChtYnVzX2ZtdCwgcGl4X2ZtdCwgZm10LT5jb2RlKTsKK30KKworLyogIFByaW50IEZvdXItY2hhcmFjdGVyLWNvZGUgKEZPVVJDQykgKi8KK3N0YXRpYyBjaGFyICpwcmludF9mb3VyY2ModTMyIGZtdCkKK3sKKwlzdGF0aWMgY2hhciBjb2RlWzVdOworCisJY29kZVswXSA9ICh1bnNpZ25lZCBjaGFyKShmbXQgJiAweGZmKTsKKwljb2RlWzFdID0gKHVuc2lnbmVkIGNoYXIpKChmbXQgPj4gOCkgJiAweGZmKTsKKwljb2RlWzJdID0gKHVuc2lnbmVkIGNoYXIpKChmbXQgPj4gMTYpICYgMHhmZik7CisJY29kZVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoZm10ID4+IDI0KSAmIDB4ZmYpOworCWNvZGVbNF0gPSAnXDAnOworCisJcmV0dXJuIGNvZGU7Cit9CisKK3N0YXRpYyBpbnQKK2NtcF92NGwyX2Zvcm1hdChjb25zdCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmxocywgY29uc3Qgc3RydWN0IHY0bDJfZm9ybWF0ICpyaHMpCit7CisJcmV0dXJuIGxocy0+dHlwZSA9PSByaHMtPnR5cGUgJiYKKwkJbGhzLT5mbXQucGl4LndpZHRoID09IHJocy0+Zm10LnBpeC53aWR0aCAmJgorCQlsaHMtPmZtdC5waXguaGVpZ2h0ID09IHJocy0+Zm10LnBpeC5oZWlnaHQgJiYKKwkJbGhzLT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IHJocy0+Zm10LnBpeC5waXhlbGZvcm1hdCAmJgorCQlsaHMtPmZtdC5waXguZmllbGQgPT0gcmhzLT5mbXQucGl4LmZpZWxkICYmCisJCWxocy0+Zm10LnBpeC5jb2xvcnNwYWNlID09IHJocy0+Zm10LnBpeC5jb2xvcnNwYWNlICYmCisJCWxocy0+Zm10LnBpeC55Y2Jjcl9lbmMgPT0gcmhzLT5mbXQucGl4LnljYmNyX2VuYyAmJgorCQlsaHMtPmZtdC5waXgucXVhbnRpemF0aW9uID09IHJocy0+Zm10LnBpeC5xdWFudGl6YXRpb247Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHZwZmVfcmVnX3JlYWQoc3RydWN0IHZwZmVfY2NkYyAqY2NkYywgdTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gaW9yZWFkMzIoY2NkYy0+Y2NkY19jZmcuYmFzZV9hZGRyICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZwZmVfcmVnX3dyaXRlKHN0cnVjdCB2cGZlX2NjZGMgKmNjZGMsIHUzMiB2YWwsIHUzMiBvZmZzZXQpCit7CisJaW93cml0ZTMyKHZhbCwgY2NkYy0+Y2NkY19jZmcuYmFzZV9hZGRyICsgb2Zmc2V0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdnBmZV9kZXZpY2UgKnRvX3ZwZmUoc3RydWN0IHZwZmVfY2NkYyAqY2NkYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNjZGMsIHN0cnVjdCB2cGZlX2RldmljZSwgY2NkYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHZwZmVfY2FwX2J1ZmZlciAqdG9fdnBmZV9idWZmZXIoc3RydWN0IHZiMl9idWZmZXIgKnZiKQoreworCXJldHVybiBjb250YWluZXJfb2YodmIsIHN0cnVjdCB2cGZlX2NhcF9idWZmZXIsIHZiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZwZmVfcGNyX2VuYWJsZShzdHJ1Y3QgdnBmZV9jY2RjICpjY2RjLCBpbnQgZmxhZykKK3sKKwl2cGZlX3JlZ193cml0ZShjY2RjLCAhIWZsYWcsIFZQRkVfUENSKTsKK30KKworc3RhdGljIHZvaWQgdnBmZV9jb25maWdfZW5hYmxlKHN0cnVjdCB2cGZlX2NjZGMgKmNjZGMsIGludCBmbGFnKQoreworCXVuc2lnbmVkIGludCBjZmc7CisKKwlpZiAoIWZsYWcpIHsKKwkJY2ZnID0gdnBmZV9yZWdfcmVhZChjY2RjLCBWUEZFX0NPTkZJRyk7CisJCWNmZyAmPSB+KFZQRkVfQ09ORklHX0VOX0VOQUJMRSA8PCBWUEZFX0NPTkZJR19FTl9TSElGVCk7CisJfSBlbHNlIHsKKwkJY2ZnID0gVlBGRV9DT05GSUdfRU5fRU5BQkxFIDw8IFZQRkVfQ09ORklHX0VOX1NISUZUOworCX0KKworCXZwZmVfcmVnX3dyaXRlKGNjZGMsIGNmZywgVlBGRV9DT05GSUcpOworfQorCitzdGF0aWMgdm9pZCB2cGZlX2NjZGNfc2V0d2luKHN0cnVjdCB2cGZlX2NjZGMgKmNjZGMsCisJCQkgICAgIHN0cnVjdCB2NGwyX3JlY3QgKmltYWdlX3dpbiwKKwkJCSAgICAgZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10LAorCQkJICAgICBpbnQgYnBwKQoreworCWludCBob3J6X3N0YXJ0LCBob3J6X25yX3BpeGVsczsKKwlpbnQgdmVydF9zdGFydCwgdmVydF9ucl9saW5lczsKKwlpbnQgdmFsLCBtaWRfaW1nOworCisJLyoKKwkgKiBwcGMgLSBwZXIgcGl4ZWwgY291bnQuIGluZGljYXRlcyBob3cgbWFueSBwaXhlbHMgcGVyIGNlbGwKKwkgKiBvdXRwdXQgdG8gU0RSQU0uIGV4YW1wbGUsIGZvciB5Y2JjciwgaXQgaXMgb25lIHkgYW5kIG9uZSBjLCBzbyAyLgorCSAqIHJhdyBjYXB0dXJlIHRoaXMgaXMgMQorCSAqLworCWhvcnpfc3RhcnQgPSBpbWFnZV93aW4tPmxlZnQgKiBicHA7CisJaG9yel9ucl9waXhlbHMgPSAoaW1hZ2Vfd2luLT53aWR0aCAqIGJwcCkgLSAxOworCXZwZmVfcmVnX3dyaXRlKGNjZGMsIChob3J6X3N0YXJ0IDw8IFZQRkVfSE9SWl9JTkZPX1NQSF9TSElGVCkgfAorCQkJCWhvcnpfbnJfcGl4ZWxzLCBWUEZFX0hPUlpfSU5GTyk7CisKKwl2ZXJ0X3N0YXJ0ID0gaW1hZ2Vfd2luLT50b3A7CisKKwlpZiAoZnJtX2ZtdCA9PSBDQ0RDX0ZSTUZNVF9JTlRFUkxBQ0VEKSB7CisJCXZlcnRfbnJfbGluZXMgPSAoaW1hZ2Vfd2luLT5oZWlnaHQgPj4gMSkgLSAxOworCQl2ZXJ0X3N0YXJ0ID4+PSAxOworCQkvKiBTaW5jZSBmaXJzdCBsaW5lIGRvZXNuJ3QgaGF2ZSBhbnkgZGF0YSAqLworCQl2ZXJ0X3N0YXJ0ICs9IDE7CisJCS8qIGNvbmZpZ3VyZSBWRElOVDAgKi8KKwkJdmFsID0gKHZlcnRfc3RhcnQgPDwgVlBGRV9WRElOVF9WRElOVDBfU0hJRlQpOworCX0gZWxzZSB7CisJCS8qIFNpbmNlIGZpcnN0IGxpbmUgZG9lc24ndCBoYXZlIGFueSBkYXRhICovCisJCXZlcnRfc3RhcnQgKz0gMTsKKwkJdmVydF9ucl9saW5lcyA9IGltYWdlX3dpbi0+aGVpZ2h0IC0gMTsKKwkJLyoKKwkJICogY29uZmlndXJlIFZESU5UMCBhbmQgVkRJTlQxLiBWRElOVDEgd2lsbCBiZSBhdCBoYWxmCisJCSAqIG9mIGltYWdlIGhlaWdodAorCQkgKi8KKwkJbWlkX2ltZyA9IHZlcnRfc3RhcnQgKyAoaW1hZ2Vfd2luLT5oZWlnaHQgLyAyKTsKKwkJdmFsID0gKHZlcnRfc3RhcnQgPDwgVlBGRV9WRElOVF9WRElOVDBfU0hJRlQpIHwKKwkJCQkobWlkX2ltZyAmIFZQRkVfVkRJTlRfVkRJTlQxX01BU0spOworCX0KKworCXZwZmVfcmVnX3dyaXRlKGNjZGMsIHZhbCwgVlBGRV9WRElOVCk7CisKKwl2cGZlX3JlZ193cml0ZShjY2RjLCAodmVydF9zdGFydCA8PCBWUEZFX1ZFUlRfU1RBUlRfU0xWMF9TSElGVCkgfAorCQkJCXZlcnRfc3RhcnQsIFZQRkVfVkVSVF9TVEFSVCk7CisJdnBmZV9yZWdfd3JpdGUoY2NkYywgdmVydF9ucl9saW5lcywgVlBGRV9WRVJUX0xJTkVTKTsKK30KKworc3RhdGljIHZvaWQgdnBmZV9yZWdfZHVtcChzdHJ1Y3QgdnBmZV9jY2RjICpjY2RjKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSA9IHRvX3ZwZmUoY2NkYyk7CisKKwl2cGZlX2RiZygzLCB2cGZlLCAiQUxBVzogMHgleFxuIiwgdnBmZV9yZWdfcmVhZChjY2RjLCBWUEZFX0FMQVcpKTsKKwl2cGZlX2RiZygzLCB2cGZlLCAiQ0xBTVA6IDB4JXhcbiIsIHZwZmVfcmVnX3JlYWQoY2NkYywgVlBGRV9DTEFNUCkpOworCXZwZmVfZGJnKDMsIHZwZmUsICJEQ1NVQjogMHgleFxuIiwgdnBmZV9yZWdfcmVhZChjY2RjLCBWUEZFX0RDU1VCKSk7CisJdnBmZV9kYmcoMywgdnBmZSwgIkJMS0NNUDogMHgleFxuIiwgdnBmZV9yZWdfcmVhZChjY2RjLCBWUEZFX0JMS0NNUCkpOworCXZwZmVfZGJnKDMsIHZwZmUsICJDT0xQVE46IDB4JXhcbiIsIHZwZmVfcmVnX3JlYWQoY2NkYywgVlBGRV9DT0xQVE4pKTsKKwl2cGZlX2RiZygzLCB2cGZlLCAiU0RPRlNUOiAweCV4XG4iLCB2cGZlX3JlZ19yZWFkKGNjZGMsIFZQRkVfU0RPRlNUKSk7CisJdnBmZV9kYmcoMywgdnBmZSwgIlNZTl9NT0RFOiAweCV4XG4iLAorCQkgdnBmZV9yZWdfcmVhZChjY2RjLCBWUEZFX1NZTk1PREUpKTsKKwl2cGZlX2RiZygzLCB2cGZlLCAiSFNJWkVfT0ZGOiAweCV4XG4iLAorCQkgdnBmZV9yZWdfcmVhZChjY2RjLCBWUEZFX0hTSVpFX09GRikpOworCXZwZmVfZGJnKDMsIHZwZmUsICJIT1JaX0lORk86IDB4JXhcbiIsCisJCSB2cGZlX3JlZ19yZWFkKGNjZGMsIFZQRkVfSE9SWl9JTkZPKSk7CisJdnBmZV9kYmcoMywgdnBmZSwgIlZFUlRfU1RBUlQ6IDB4JXhcbiIsCisJCSB2cGZlX3JlZ19yZWFkKGNjZGMsIFZQRkVfVkVSVF9TVEFSVCkpOworCXZwZmVfZGJnKDMsIHZwZmUsICJWRVJUX0xJTkVTOiAweCV4XG4iLAorCQkgdnBmZV9yZWdfcmVhZChjY2RjLCBWUEZFX1ZFUlRfTElORVMpKTsKK30KKworc3RhdGljIGludAordnBmZV9jY2RjX3ZhbGlkYXRlX3BhcmFtKHN0cnVjdCB2cGZlX2NjZGMgKmNjZGMsCisJCQkgc3RydWN0IHZwZmVfY2NkY19jb25maWdfcGFyYW1zX3JhdyAqY2NkY3BhcmFtKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSA9IHRvX3ZwZmUoY2NkYyk7CisJdTggbWF4X2dhbW1hLCBtYXhfZGF0YTsKKworCWlmICghY2NkY3BhcmFtLT5hbGF3LmVuYWJsZSkKKwkJcmV0dXJuIDA7CisKKwltYXhfZ2FtbWEgPSBjY2RjX2dhbW1hX3dpZHRoX21heF9iaXQoY2NkY3BhcmFtLT5hbGF3LmdhbW1hX3dkKTsKKwltYXhfZGF0YSA9IGNjZGNfZGF0YV9zaXplX21heF9iaXQoY2NkY3BhcmFtLT5kYXRhX3N6KTsKKworCWlmIChjY2RjcGFyYW0tPmFsYXcuZ2FtbWFfd2QgPiBWUEZFX0NDRENfR0FNTUFfQklUU18wOV8wIHx8CisJICAgIGNjZGNwYXJhbS0+YWxhdy5nYW1tYV93ZCA8IFZQRkVfQ0NEQ19HQU1NQV9CSVRTXzE1XzYgfHwKKwkgICAgbWF4X2dhbW1hID4gbWF4X2RhdGEpIHsKKwkJdnBmZV9kYmcoMSwgdnBmZSwgIkludmFsaWQgZGF0YSBsaW5lIHNlbGVjdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordnBmZV9jY2RjX3VwZGF0ZV9yYXdfcGFyYW1zKHN0cnVjdCB2cGZlX2NjZGMgKmNjZGMsCisJCQkgICAgc3RydWN0IHZwZmVfY2NkY19jb25maWdfcGFyYW1zX3JhdyAqcmF3X3BhcmFtcykKK3sKKwlzdHJ1Y3QgdnBmZV9jY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KKwkJCQkmY2NkYy0+Y2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtczsKKworCWNvbmZpZ19wYXJhbXMgPSByYXdfcGFyYW1zOworfQorCisvKgorICogdnBmZV9jY2RjX3Jlc3RvcmVfZGVmYXVsdHMoKQorICogVGhpcyBmdW5jdGlvbiB3aWxsIHdyaXRlIGRlZmF1bHRzIHRvIGFsbCBDQ0RDIHJlZ2lzdGVycworICovCitzdGF0aWMgdm9pZCB2cGZlX2NjZGNfcmVzdG9yZV9kZWZhdWx0cyhzdHJ1Y3QgdnBmZV9jY2RjICpjY2RjKQoreworCWludCBpOworCisJLyogRGlzYWJsZSBDQ0RDICovCisJdnBmZV9wY3JfZW5hYmxlKGNjZGMsIDApOworCisJLyogc2V0IGFsbCByZWdpc3RlcnMgdG8gZGVmYXVsdCB2YWx1ZSAqLworCWZvciAoaSA9IDQ7IGkgPD0gMHg5NDsgaSArPSA0KQorCQl2cGZlX3JlZ193cml0ZShjY2RjLCAwLCAgaSk7CisKKwl2cGZlX3JlZ193cml0ZShjY2RjLCBWUEZFX05PX0NVTExJTkcsIFZQRkVfQ1VMTElORyk7CisJdnBmZV9yZWdfd3JpdGUoY2NkYywgVlBGRV9DQ0RDX0dBTU1BX0JJVFNfMTFfMiwgVlBGRV9BTEFXKTsKK30KKworc3RhdGljIGludCB2cGZlX2NjZGNfY2xvc2Uoc3RydWN0IHZwZmVfY2NkYyAqY2NkYywgc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBkbWFfY250bCwgaSwgcGNyOworCisJLyogSWYgdGhlIENDREMgbW9kdWxlIGlzIHN0aWxsIGJ1c3kgd2FpdCBmb3IgaXQgdG8gYmUgZG9uZSAqLworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXVzbGVlcF9yYW5nZSg1MDAwLCA2MDAwKTsKKwkJcGNyID0gdnBmZV9yZWdfcmVhZChjY2RjLCBWUEZFX1BDUik7CisJCWlmICghcGNyKQorCQkJYnJlYWs7CisKKwkJLyogbWFrZSBzdXJlIGl0IGl0IGlzIGRpc2FibGVkICovCisJCXZwZmVfcGNyX2VuYWJsZShjY2RjLCAwKTsKKwl9CisKKwkvKiBEaXNhYmxlIENDREMgYnkgcmVzZXR0aW5nIGFsbCByZWdpc3RlciB0byBkZWZhdWx0IFBPUiB2YWx1ZXMgKi8KKwl2cGZlX2NjZGNfcmVzdG9yZV9kZWZhdWx0cyhjY2RjKTsKKworCS8qIGlmIERNQV9DTlRMIG92ZXJmbG93IGJpdCBpcyBzZXQuIENsZWFyIGl0CisJICogIEl0IGFwcGVhcnMgdG8gdGFrZSBhIHdoaWxlIGZvciB0aGlzIHRvIGJlY29tZSBxdWllc2NlbnQgfjIwbXMKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlkbWFfY250bCA9IHZwZmVfcmVnX3JlYWQoY2NkYywgVlBGRV9ETUFfQ05UTCk7CisJCWlmICghKGRtYV9jbnRsICYgVlBGRV9ETUFfQ05UTF9PVkVSRkxPVykpCisJCQlicmVhazsKKworCQkvKiBDbGVhciB0aGUgb3ZlcmZsb3cgYml0ICovCisJCXZwZmVfcmVnX3dyaXRlKGNjZGMsIGRtYV9jbnRsLCBWUEZFX0RNQV9DTlRMKTsKKwkJdXNsZWVwX3JhbmdlKDUwMDAsIDYwMDApOworCX0KKworCS8qIERpc2FibGVkIHRoZSBtb2R1bGUgYXQgdGhlIENPTkZJRyBsZXZlbCAqLworCXZwZmVfY29uZmlnX2VuYWJsZShjY2RjLCAwKTsKKworCXBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwZmVfY2NkY19zZXRfcGFyYW1zKHN0cnVjdCB2cGZlX2NjZGMgKmNjZGMsIHZvaWQgX191c2VyICpwYXJhbXMpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlID0gY29udGFpbmVyX29mKGNjZGMsIHN0cnVjdCB2cGZlX2RldmljZSwgY2NkYyk7CisJc3RydWN0IHZwZmVfY2NkY19jb25maWdfcGFyYW1zX3JhdyByYXdfcGFyYW1zOworCWludCB4OworCisJaWYgKGNjZGMtPmNjZGNfY2ZnLmlmX3R5cGUgIT0gVlBGRV9SQVdfQkFZRVIpCisJCXJldHVybiAtRUlOVkFMOworCisJeCA9IGNvcHlfZnJvbV91c2VyKCZyYXdfcGFyYW1zLCBwYXJhbXMsIHNpemVvZihyYXdfcGFyYW1zKSk7CisJaWYgKHgpIHsKKwkJdnBmZV9kYmcoMSwgdnBmZSwKKwkJCSJ2cGZlX2NjZGNfc2V0X3BhcmFtczogZXJyb3IgaW4gY29weWluZyBjY2RjIHBhcmFtcywgJWRcbiIsCisJCQl4KTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJaWYgKCF2cGZlX2NjZGNfdmFsaWRhdGVfcGFyYW0oY2NkYywgJnJhd19wYXJhbXMpKSB7CisJCXZwZmVfY2NkY191cGRhdGVfcmF3X3BhcmFtcyhjY2RjLCAmcmF3X3BhcmFtcyk7CisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIHZwZmVfY2NkY19jb25maWdfeWNiY3IoKQorICogVGhpcyBmdW5jdGlvbiB3aWxsIGNvbmZpZ3VyZSBDQ0RDIGZvciBZQ2JDciB2aWRlbyBjYXB0dXJlCisgKi8KK3N0YXRpYyB2b2lkIHZwZmVfY2NkY19jb25maWdfeWNiY3Ioc3RydWN0IHZwZmVfY2NkYyAqY2NkYykKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUgPSBjb250YWluZXJfb2YoY2NkYywgc3RydWN0IHZwZmVfZGV2aWNlLCBjY2RjKTsKKwlzdHJ1Y3QgY2NkY19wYXJhbXNfeWNiY3IgKnBhcmFtcyA9ICZjY2RjLT5jY2RjX2NmZy55Y2JjcjsKKwl1MzIgc3luX21vZGU7CisKKwl2cGZlX2RiZygzLCB2cGZlLCAidnBmZV9jY2RjX2NvbmZpZ195Y2JjcjpcbiIpOworCS8qCisJICogZmlyc3QgcmVzdG9yZSB0aGUgQ0NEQyByZWdpc3RlcnMgdG8gZGVmYXVsdCB2YWx1ZXMKKwkgKiBUaGlzIGlzIGltcG9ydGFudCBzaW5jZSB3ZSBhc3N1bWUgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgc2V0IGluCisJICogYSBsb3Qgb2YgcmVnaXN0ZXJzIHRoYXQgd2UgZGlkbid0IHRvdWNoCisJICovCisJdnBmZV9jY2RjX3Jlc3RvcmVfZGVmYXVsdHMoY2NkYyk7CisKKwkvKgorCSAqIGNvbmZpZ3VyZSBwaXhlbCBmb3JtYXQsIGZyYW1lIGZvcm1hdCwgY29uZmlndXJlIHZpZGVvIGZyYW1lCisJICogZm9ybWF0LCBlbmFibGUgb3V0cHV0IHRvIFNEUkFNLCBlbmFibGUgaW50ZXJuYWwgdGltaW5nIGdlbmVyYXRvcgorCSAqIGFuZCA4Yml0IHBhY2sgbW9kZQorCSAqLworCXN5bl9tb2RlID0gKCgocGFyYW1zLT5waXhfZm10ICYgVlBGRV9TWU5fTU9ERV9JTlBNT0RfTUFTSykgPDwKKwkJICAgIFZQRkVfU1lOX01PREVfSU5QTU9EX1NISUZUKSB8CisJCSAgICAoKHBhcmFtcy0+ZnJtX2ZtdCAmIFZQRkVfU1lOX0ZMRE1PREVfTUFTSykgPDwKKwkJICAgIFZQRkVfU1lOX0ZMRE1PREVfU0hJRlQpIHwgVlBGRV9WREhERU5fRU5BQkxFIHwKKwkJICAgIFZQRkVfV0VOX0VOQUJMRSB8IFZQRkVfREFUQV9QQUNLX0VOQUJMRSk7CisKKwkvKiBzZXR1cCBCVC42NTYgc3luYyBtb2RlICovCisJaWYgKHBhcmFtcy0+YnQ2NTZfZW5hYmxlKSB7CisJCXZwZmVfcmVnX3dyaXRlKGNjZGMsIFZQRkVfUkVDNjU2SUZfQlQ2NTZfRU4sIFZQRkVfUkVDNjU2SUYpOworCisJCS8qCisJCSAqIGNvbmZpZ3VyZSB0aGUgRklELCBWRCwgSEQgcGluIHBvbGFyaXR5LAorCQkgKiBmbGQsaGQgcG9sIHBvc2l0aXZlLCB2ZCBuZWdhdGl2ZSwgOC1iaXQgZGF0YQorCQkgKi8KKwkJc3luX21vZGUgfD0gVlBGRV9TWU5fTU9ERV9WRF9QT0xfTkVHQVRJVkU7CisJCWlmIChjY2RjLT5jY2RjX2NmZy5pZl90eXBlID09IFZQRkVfQlQ2NTZfMTBCSVQpCisJCQlzeW5fbW9kZSB8PSBWUEZFX1NZTl9NT0RFXzEwQklUUzsKKwkJZWxzZQorCQkJc3luX21vZGUgfD0gVlBGRV9TWU5fTU9ERV84QklUUzsKKwl9IGVsc2UgeworCQkvKiB5L2MgZXh0ZXJuYWwgc3luYyBtb2RlICovCisJCXN5bl9tb2RlIHw9ICgoKHBhcmFtcy0+ZmlkX3BvbCAmIFZQRkVfRklEX1BPTF9NQVNLKSA8PAorCQkJICAgICBWUEZFX0ZJRF9QT0xfU0hJRlQpIHwKKwkJCSAgICAgKChwYXJhbXMtPmhkX3BvbCAmIFZQRkVfSERfUE9MX01BU0spIDw8CisJCQkgICAgIFZQRkVfSERfUE9MX1NISUZUKSB8CisJCQkgICAgICgocGFyYW1zLT52ZF9wb2wgJiBWUEZFX1ZEX1BPTF9NQVNLKSA8PAorCQkJICAgICBWUEZFX1ZEX1BPTF9TSElGVCkpOworCX0KKwl2cGZlX3JlZ193cml0ZShjY2RjLCBzeW5fbW9kZSwgVlBGRV9TWU5NT0RFKTsKKworCS8qIGNvbmZpZ3VyZSB2aWRlbyB3aW5kb3cgKi8KKwl2cGZlX2NjZGNfc2V0d2luKGNjZGMsICZwYXJhbXMtPndpbiwKKwkJCSBwYXJhbXMtPmZybV9mbXQsIHBhcmFtcy0+Ynl0ZXNwZXJwaXhlbCk7CisKKwkvKgorCSAqIGNvbmZpZ3VyZSB0aGUgb3JkZXIgb2YgeSBjYiBjciBpbiBTRFJBTSwgYW5kIGRpc2FibGUgbGF0Y2gKKwkgKiBpbnRlcm5hbCByZWdpc3RlciBvbiB2c3luYworCSAqLworCWlmIChjY2RjLT5jY2RjX2NmZy5pZl90eXBlID09IFZQRkVfQlQ2NTZfMTBCSVQpCisJCXZwZmVfcmVnX3dyaXRlKGNjZGMsCisJCQkgICAgICAgKHBhcmFtcy0+cGl4X29yZGVyIDw8IFZQRkVfQ0NEQ0ZHX1k4UE9TX1NISUZUKSB8CisJCQkgICAgICAgVlBGRV9MQVRDSF9PTl9WU1lOQ19ESVNBQkxFIHwKKwkJCSAgICAgICBWUEZFX0NDRENGR19CVzY1Nl8xMEJJVCwgVlBGRV9DQ0RDRkcpOworCWVsc2UKKwkJdnBmZV9yZWdfd3JpdGUoY2NkYywKKwkJCSAgICAgICAocGFyYW1zLT5waXhfb3JkZXIgPDwgVlBGRV9DQ0RDRkdfWThQT1NfU0hJRlQpIHwKKwkJCSAgICAgICBWUEZFX0xBVENIX09OX1ZTWU5DX0RJU0FCTEUsIFZQRkVfQ0NEQ0ZHKTsKKworCS8qCisJICogY29uZmlndXJlIHRoZSBob3Jpem9udGFsIGxpbmUgb2Zmc2V0LiBUaGlzIHNob3VsZCBiZSBhCisJICogb24gMzIgYnl0ZSBib3VuZGFyeS4gU28gY2xlYXIgTFNCIDUgYml0cworCSAqLworCXZwZmVfcmVnX3dyaXRlKGNjZGMsIHBhcmFtcy0+Ynl0ZXNwZXJsaW5lLCBWUEZFX0hTSVpFX09GRik7CisKKwkvKiBjb25maWd1cmUgdGhlIG1lbW9yeSBsaW5lIG9mZnNldCAqLworCWlmIChwYXJhbXMtPmJ1Zl90eXBlID09IENDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQpCisJCS8qIHR3byBmaWVsZHMgYXJlIGludGVybGVhdmVkIGluIG1lbW9yeSAqLworCQl2cGZlX3JlZ193cml0ZShjY2RjLCBWUEZFX1NET0ZTVF9GSUVMRF9JTlRFUkxFQVZFRCwKKwkJCSAgICAgICBWUEZFX1NET0ZTVCk7Cit9CisKK3N0YXRpYyB2b2lkCit2cGZlX2NjZGNfY29uZmlnX2JsYWNrX2NsYW1wKHN0cnVjdCB2cGZlX2NjZGMgKmNjZGMsCisJCQkgICAgIHN0cnVjdCB2cGZlX2NjZGNfYmxhY2tfY2xhbXAgKmJjbGFtcCkKK3sKKwl1MzIgdmFsOworCisJaWYgKCFiY2xhbXAtPmVuYWJsZSkgeworCQkvKiBjb25maWd1cmUgRENTdWIgKi8KKwkJdmFsID0gKGJjbGFtcC0+ZGNfc3ViKSAmIFZQRkVfQkxLX0RDX1NVQl9NQVNLOworCQl2cGZlX3JlZ193cml0ZShjY2RjLCB2YWwsIFZQRkVfRENTVUIpOworCQl2cGZlX3JlZ193cml0ZShjY2RjLCBWUEZFX0NMQU1QX0RFRkFVTFRfVkFMLCBWUEZFX0NMQU1QKTsKKwkJcmV0dXJuOworCX0KKwkvKgorCSAqIENvbmZpZ3VyZSBnYWluLCAgU3RhcnQgcGl4ZWwsIE5vIG9mIGxpbmUgdG8gYmUgYXZnLAorCSAqIE5vIG9mIHBpeGVsL2xpbmUgdG8gYmUgYXZnLCAmIEVuYWJsZSB0aGUgQmxhY2sgY2xhbXBpbmcKKwkgKi8KKwl2YWwgPSAoKGJjbGFtcC0+c2dhaW4gJiBWUEZFX0JMS19TR0FJTl9NQVNLKSB8CisJICAgICAgICgoYmNsYW1wLT5zdGFydF9waXhlbCAmIFZQRkVfQkxLX1NUX1BYTF9NQVNLKSA8PAorCQlWUEZFX0JMS19TVF9QWExfU0hJRlQpIHwKKwkgICAgICAgKChiY2xhbXAtPnNhbXBsZV9sbiAmIFZQRkVfQkxLX1NBTVBMRV9MSU5FX01BU0spIDw8CisJCVZQRkVfQkxLX1NBTVBMRV9MSU5FX1NISUZUKSB8CisJICAgICAgICgoYmNsYW1wLT5zYW1wbGVfcGl4ZWwgJiBWUEZFX0JMS19TQU1QTEVfTE5fTUFTSykgPDwKKwkJVlBGRV9CTEtfU0FNUExFX0xOX1NISUZUKSB8IFZQRkVfQkxLX0NMQU1QX0VOQUJMRSk7CisJdnBmZV9yZWdfd3JpdGUoY2NkYywgdmFsLCBWUEZFX0NMQU1QKTsKKwkvKiBJZiBCbGFjayBjbGFtcGluZyBpcyBlbmFibGUgdGhlbiBtYWtlIGRjc3ViIDAgKi8KKwl2cGZlX3JlZ193cml0ZShjY2RjLCBWUEZFX0RDU1VCX0RFRkFVTFRfVkFMLCBWUEZFX0RDU1VCKTsKK30KKworc3RhdGljIHZvaWQKK3ZwZmVfY2NkY19jb25maWdfYmxhY2tfY29tcGVuc2Uoc3RydWN0IHZwZmVfY2NkYyAqY2NkYywKKwkJCQlzdHJ1Y3QgdnBmZV9jY2RjX2JsYWNrX2NvbXBlbnNhdGlvbiAqYmNvbXApCit7CisJdTMyIHZhbDsKKworCXZhbCA9ICgoYmNvbXAtPmIgJiBWUEZFX0JMS19DT01QX01BU0spIHwKKwkgICAgICAoKGJjb21wLT5nYiAmIFZQRkVfQkxLX0NPTVBfTUFTSykgPDwKKwkgICAgICAgVlBGRV9CTEtfQ09NUF9HQl9DT01QX1NISUZUKSB8CisJICAgICAgKChiY29tcC0+Z3IgJiBWUEZFX0JMS19DT01QX01BU0spIDw8CisJICAgICAgIFZQRkVfQkxLX0NPTVBfR1JfQ09NUF9TSElGVCkgfAorCSAgICAgICgoYmNvbXAtPnIgJiBWUEZFX0JMS19DT01QX01BU0spIDw8CisJICAgICAgIFZQRkVfQkxLX0NPTVBfUl9DT01QX1NISUZUKSk7CisJdnBmZV9yZWdfd3JpdGUoY2NkYywgdmFsLCBWUEZFX0JMS0NNUCk7Cit9CisKKy8qCisgKiB2cGZlX2NjZGNfY29uZmlnX3JhdygpCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY29uZmlndXJlIENDREMgZm9yIFJhdyBjYXB0dXJlIG1vZGUKKyAqLworc3RhdGljIHZvaWQgdnBmZV9jY2RjX2NvbmZpZ19yYXcoc3RydWN0IHZwZmVfY2NkYyAqY2NkYykKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUgPSBjb250YWluZXJfb2YoY2NkYywgc3RydWN0IHZwZmVfZGV2aWNlLCBjY2RjKTsKKwlzdHJ1Y3QgdnBmZV9jY2RjX2NvbmZpZ19wYXJhbXNfcmF3ICpjb25maWdfcGFyYW1zID0KKwkJCQkmY2NkYy0+Y2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtczsKKwlzdHJ1Y3QgY2NkY19wYXJhbXNfcmF3ICpwYXJhbXMgPSAmY2NkYy0+Y2NkY19jZmcuYmF5ZXI7CisJdW5zaWduZWQgaW50IHN5bl9tb2RlOworCXVuc2lnbmVkIGludCB2YWw7CisKKwl2cGZlX2RiZygzLCB2cGZlLCAidnBmZV9jY2RjX2NvbmZpZ19yYXc6XG4iKTsKKworCS8qIFJlc2V0IENDREMgKi8KKwl2cGZlX2NjZGNfcmVzdG9yZV9kZWZhdWx0cyhjY2RjKTsKKworCS8qIERpc2FibGUgbGF0Y2hpbmcgZnVuY3Rpb24gcmVnaXN0ZXJzIG9uIFZTWU5DICAqLworCXZwZmVfcmVnX3dyaXRlKGNjZGMsIFZQRkVfTEFUQ0hfT05fVlNZTkNfRElTQUJMRSwgVlBGRV9DQ0RDRkcpOworCisJLyoKKwkgKiBDb25maWd1cmUgdGhlIHZlcnRpY2FsIHN5bmMgcG9sYXJpdHkoU1lOX01PREUuVkRQT0wpLAorCSAqIGhvcml6b250YWwgc3luYyBwb2xhcml0eSAoU1lOX01PREUuSERQT0wpLCBmcmFtZSBpZCBwb2xhcml0eQorCSAqIChTWU5fTU9ERS5GTERQT0wpLCBmcmFtZSBmb3JtYXQocHJvZ3Jlc3NpdmUgb3IgaW50ZXJsYWNlKSwKKwkgKiBkYXRhIHNpemUoU1lOTU9ERS5EQVRTSVopLCAmcGl4ZWwgZm9ybWF0IChJbnB1dCBtb2RlKSwgb3V0cHV0CisJICogU0RSQU0sIGVuYWJsZSBpbnRlcm5hbCB0aW1pbmcgZ2VuZXJhdG9yCisJICovCisJc3luX21vZGUgPSAoKChwYXJhbXMtPnZkX3BvbCAmIFZQRkVfVkRfUE9MX01BU0spIDw8IFZQRkVfVkRfUE9MX1NISUZUKSB8CisJCSAgICgocGFyYW1zLT5oZF9wb2wgJiBWUEZFX0hEX1BPTF9NQVNLKSA8PCBWUEZFX0hEX1BPTF9TSElGVCkgfAorCQkgICAoKHBhcmFtcy0+ZmlkX3BvbCAmIFZQRkVfRklEX1BPTF9NQVNLKSA8PAorCQkgICBWUEZFX0ZJRF9QT0xfU0hJRlQpIHwgKChwYXJhbXMtPmZybV9mbXQgJgorCQkgICBWUEZFX0ZSTV9GTVRfTUFTSykgPDwgVlBGRV9GUk1fRk1UX1NISUZUKSB8CisJCSAgICgoY29uZmlnX3BhcmFtcy0+ZGF0YV9zeiAmIFZQRkVfREFUQV9TWl9NQVNLKSA8PAorCQkgICBWUEZFX0RBVEFfU1pfU0hJRlQpIHwgKChwYXJhbXMtPnBpeF9mbXQgJgorCQkgICBWUEZFX1BJWF9GTVRfTUFTSykgPDwgVlBGRV9QSVhfRk1UX1NISUZUKSB8CisJCSAgIFZQRkVfV0VOX0VOQUJMRSB8IFZQRkVfVkRIREVOX0VOQUJMRSk7CisKKwkvKiBFbmFibGUgYW5kIGNvbmZpZ3VyZSBhTGF3IHJlZ2lzdGVyIGlmIG5lZWRlZCAqLworCWlmIChjb25maWdfcGFyYW1zLT5hbGF3LmVuYWJsZSkgeworCQl2YWwgPSAoKGNvbmZpZ19wYXJhbXMtPmFsYXcuZ2FtbWFfd2QgJgorCQkgICAgICBWUEZFX0FMQVdfR0FNTUFfV0RfTUFTSykgfCBWUEZFX0FMQVdfRU5BQkxFKTsKKwkJdnBmZV9yZWdfd3JpdGUoY2NkYywgdmFsLCBWUEZFX0FMQVcpOworCQl2cGZlX2RiZygzLCB2cGZlLCAiXG5Xcml0aW5nIDB4JXggdG8gQUxBVy4uLlxuIiwgdmFsKTsKKwl9CisKKwkvKiBDb25maWd1cmUgdmlkZW8gd2luZG93ICovCisJdnBmZV9jY2RjX3NldHdpbihjY2RjLCAmcGFyYW1zLT53aW4sIHBhcmFtcy0+ZnJtX2ZtdCwKKwkJCSBwYXJhbXMtPmJ5dGVzcGVycGl4ZWwpOworCisJLyogQ29uZmlndXJlIEJsYWNrIENsYW1wICovCisJdnBmZV9jY2RjX2NvbmZpZ19ibGFja19jbGFtcChjY2RjLCAmY29uZmlnX3BhcmFtcy0+YmxrX2NsYW1wKTsKKworCS8qIENvbmZpZ3VyZSBCbGFjayBsZXZlbCBjb21wZW5zYXRpb24gKi8KKwl2cGZlX2NjZGNfY29uZmlnX2JsYWNrX2NvbXBlbnNlKGNjZGMsICZjb25maWdfcGFyYW1zLT5ibGtfY29tcCk7CisKKwkvKiBJZiBkYXRhIHNpemUgaXMgOCBiaXQgdGhlbiBwYWNrIHRoZSBkYXRhICovCisJaWYgKChjb25maWdfcGFyYW1zLT5kYXRhX3N6ID09IFZQRkVfQ0NEQ19EQVRBXzhCSVRTKSB8fAorCSAgICBjb25maWdfcGFyYW1zLT5hbGF3LmVuYWJsZSkKKwkJc3luX21vZGUgfD0gVlBGRV9EQVRBX1BBQ0tfRU5BQkxFOworCisJLyoKKwkgKiBDb25maWd1cmUgSG9yaXpvbnRhbCBvZmZzZXQgcmVnaXN0ZXIuIElmIHBhY2sgOCBpcyBlbmFibGVkIHRoZW4KKwkgKiAxIHBpeGVsIHdpbGwgdGFrZSAxIGJ5dGUKKwkgKi8KKwl2cGZlX3JlZ193cml0ZShjY2RjLCBwYXJhbXMtPmJ5dGVzcGVybGluZSwgVlBGRV9IU0laRV9PRkYpOworCisJdnBmZV9kYmcoMywgdnBmZSwgIldyaXRpbmcgJWQgKCV4KSB0byBIU0laRV9PRkZcbiIsCisJCXBhcmFtcy0+Ynl0ZXNwZXJsaW5lLCBwYXJhbXMtPmJ5dGVzcGVybGluZSk7CisKKwkvKiBTZXQgdmFsdWUgZm9yIFNET0ZTVCAqLworCWlmIChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCkgeworCQlpZiAocGFyYW1zLT5pbWFnZV9pbnZlcnRfZW5hYmxlKSB7CisJCQkvKiBGb3IgaW50ZXJsYWNlIGludmVyc2UgbW9kZSAqLworCQkJdnBmZV9yZWdfd3JpdGUoY2NkYywgVlBGRV9JTlRFUkxBQ0VEX0lNQUdFX0lOVkVSVCwKKwkJCQkgICBWUEZFX1NET0ZTVCk7CisJCX0gZWxzZSB7CisJCQkvKiBGb3IgaW50ZXJsYWNlIG5vbiBpbnZlcnNlIG1vZGUgKi8KKwkJCXZwZmVfcmVnX3dyaXRlKGNjZGMsIFZQRkVfSU5URVJMQUNFRF9OT19JTUFHRV9JTlZFUlQsCisJCQkJICAgVlBGRV9TRE9GU1QpOworCQl9CisJfSBlbHNlIGlmIChwYXJhbXMtPmZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUpIHsKKwkJdnBmZV9yZWdfd3JpdGUoY2NkYywgVlBGRV9QUk9HUkVTU0lWRV9OT19JTUFHRV9JTlZFUlQsCisJCQkgICBWUEZFX1NET0ZTVCk7CisJfQorCisJdnBmZV9yZWdfd3JpdGUoY2NkYywgc3luX21vZGUsIFZQRkVfU1lOTU9ERSk7CisKKwl2cGZlX3JlZ19kdW1wKGNjZGMpOworfQorCitzdGF0aWMgaW5saW5lIGludAordnBmZV9jY2RjX3NldF9idWZ0eXBlKHN0cnVjdCB2cGZlX2NjZGMgKmNjZGMsCisJCSAgICAgIGVudW0gY2NkY19idWZ0eXBlIGJ1Zl90eXBlKQoreworCWlmIChjY2RjLT5jY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQljY2RjLT5jY2RjX2NmZy5iYXllci5idWZfdHlwZSA9IGJ1Zl90eXBlOworCWVsc2UKKwkJY2NkYy0+Y2NkY19jZmcueWNiY3IuYnVmX3R5cGUgPSBidWZfdHlwZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gY2NkY19idWZ0eXBlIHZwZmVfY2NkY19nZXRfYnVmdHlwZShzdHJ1Y3QgdnBmZV9jY2RjICpjY2RjKQoreworCWlmIChjY2RjLT5jY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkYy0+Y2NkY19jZmcuYmF5ZXIuYnVmX3R5cGU7CisKKwlyZXR1cm4gY2NkYy0+Y2NkY19jZmcueWNiY3IuYnVmX3R5cGU7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9jY2RjX3NldF9waXhlbF9mb3JtYXQoc3RydWN0IHZwZmVfY2NkYyAqY2NkYywgdTMyIHBpeGZtdCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUgPSBjb250YWluZXJfb2YoY2NkYywgc3RydWN0IHZwZmVfZGV2aWNlLCBjY2RjKTsKKworCXZwZmVfZGJnKDEsIHZwZmUsICJ2cGZlX2NjZGNfc2V0X3BpeGVsX2Zvcm1hdDogaWZfdHlwZTogJWQsIHBpeGZtdDolc1xuIiwKKwkJIGNjZGMtPmNjZGNfY2ZnLmlmX3R5cGUsIHByaW50X2ZvdXJjYyhwaXhmbXQpKTsKKworCWlmIChjY2RjLT5jY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKSB7CisJCWNjZGMtPmNjZGNfY2ZnLmJheWVyLnBpeF9mbXQgPSBDQ0RDX1BJWEZNVF9SQVc7CisJCS8qCisJCSAqIE5lZWQgdG8gY2xlYXIgaXQgaW4gY2FzZSBpdCB3YXMgbGVmdCBvbgorCQkgKiBhZnRlciB0aGUgbGFzdCBjYXB0dXJlLgorCQkgKi8KKwkJY2NkYy0+Y2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5hbGF3LmVuYWJsZSA9IDA7CisKKwkJc3dpdGNoIChwaXhmbXQpIHsKKwkJY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1I4OgorCQkJY2NkYy0+Y2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5hbGF3LmVuYWJsZSA9IDE7CisJCQlicmVhazsKKworCQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgorCQljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgorCQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjA6CisJCWNhc2UgVjRMMl9QSVhfRk1UX05WMTI6CisJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NVg6CisJCQlicmVhazsKKworCQljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjE2OgorCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKHBpeGZtdCkgeworCQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOgorCQkJY2NkYy0+Y2NkY19jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9ZQ0JZQ1I7CisJCQlicmVhazsKKworCQljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgorCQkJY2NkYy0+Y2NkY19jZmcueWNiY3IucGl4X29yZGVyID0gQ0NEQ19QSVhPUkRFUl9DQllDUlk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiB2cGZlX2NjZGNfZ2V0X3BpeGVsX2Zvcm1hdChzdHJ1Y3QgdnBmZV9jY2RjICpjY2RjKQoreworCXUzMiBwaXhmbXQ7CisKKwlpZiAoY2NkYy0+Y2NkY19jZmcuaWZfdHlwZSA9PSBWUEZFX1JBV19CQVlFUikgeworCQlwaXhmbXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKwl9IGVsc2UgeworCQlpZiAoY2NkYy0+Y2NkY19jZmcueWNiY3IucGl4X29yZGVyID09IENDRENfUElYT1JERVJfWUNCWUNSKQorCQkJcGl4Zm10ID0gVjRMMl9QSVhfRk1UX1lVWVY7CisJCWVsc2UKKwkJCXBpeGZtdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCX0KKworCXJldHVybiBwaXhmbXQ7Cit9CisKK3N0YXRpYyBpbnQKK3ZwZmVfY2NkY19zZXRfaW1hZ2Vfd2luZG93KHN0cnVjdCB2cGZlX2NjZGMgKmNjZGMsCisJCQkgICBzdHJ1Y3QgdjRsMl9yZWN0ICp3aW4sIHVuc2lnbmVkIGludCBicHApCit7CisJaWYgKGNjZGMtPmNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpIHsKKwkJY2NkYy0+Y2NkY19jZmcuYmF5ZXIud2luID0gKndpbjsKKwkJY2NkYy0+Y2NkY19jZmcuYmF5ZXIuYnl0ZXNwZXJwaXhlbCA9IGJwcDsKKwkJY2NkYy0+Y2NkY19jZmcuYmF5ZXIuYnl0ZXNwZXJsaW5lID0gQUxJR04od2luLT53aWR0aCAqIGJwcCwgMzIpOworCX0gZWxzZSB7CisJCWNjZGMtPmNjZGNfY2ZnLnljYmNyLndpbiA9ICp3aW47CisJCWNjZGMtPmNjZGNfY2ZnLnljYmNyLmJ5dGVzcGVycGl4ZWwgPSBicHA7CisJCWNjZGMtPmNjZGNfY2ZnLnljYmNyLmJ5dGVzcGVybGluZSA9IEFMSUdOKHdpbi0+d2lkdGggKiBicHAsIDMyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCit2cGZlX2NjZGNfZ2V0X2ltYWdlX3dpbmRvdyhzdHJ1Y3QgdnBmZV9jY2RjICpjY2RjLAorCQkJICAgc3RydWN0IHY0bDJfcmVjdCAqd2luKQoreworCWlmIChjY2RjLT5jY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQkqd2luID0gY2NkYy0+Y2NkY19jZmcuYmF5ZXIud2luOworCWVsc2UKKwkJKndpbiA9IGNjZGMtPmNjZGNfY2ZnLnljYmNyLndpbjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdnBmZV9jY2RjX2dldF9saW5lX2xlbmd0aChzdHJ1Y3QgdnBmZV9jY2RjICpjY2RjKQoreworCWlmIChjY2RjLT5jY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkYy0+Y2NkY19jZmcuYmF5ZXIuYnl0ZXNwZXJsaW5lOworCisJcmV0dXJuIGNjZGMtPmNjZGNfY2ZnLnljYmNyLmJ5dGVzcGVybGluZTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3ZwZmVfY2NkY19zZXRfZnJhbWVfZm9ybWF0KHN0cnVjdCB2cGZlX2NjZGMgKmNjZGMsCisJCQkgICBlbnVtIGNjZGNfZnJtZm10IGZybV9mbXQpCit7CisJaWYgKGNjZGMtPmNjZGNfY2ZnLmlmX3R5cGUgPT0gVlBGRV9SQVdfQkFZRVIpCisJCWNjZGMtPmNjZGNfY2ZnLmJheWVyLmZybV9mbXQgPSBmcm1fZm10OworCWVsc2UKKwkJY2NkYy0+Y2NkY19jZmcueWNiY3IuZnJtX2ZtdCA9IGZybV9mbXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBlbnVtIGNjZGNfZnJtZm10Cit2cGZlX2NjZGNfZ2V0X2ZyYW1lX2Zvcm1hdChzdHJ1Y3QgdnBmZV9jY2RjICpjY2RjKQoreworCWlmIChjY2RjLT5jY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQlyZXR1cm4gY2NkYy0+Y2NkY19jZmcuYmF5ZXIuZnJtX2ZtdDsKKworCXJldHVybiBjY2RjLT5jY2RjX2NmZy55Y2Jjci5mcm1fZm10OworfQorCitzdGF0aWMgaW5saW5lIGludCB2cGZlX2NjZGNfZ2V0ZmlkKHN0cnVjdCB2cGZlX2NjZGMgKmNjZGMpCit7CisJcmV0dXJuICh2cGZlX3JlZ19yZWFkKGNjZGMsIFZQRkVfU1lOTU9ERSkgPj4gMTUpICYgMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZwZmVfc2V0X3Nkcl9hZGRyKHN0cnVjdCB2cGZlX2NjZGMgKmNjZGMsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwl2cGZlX3JlZ193cml0ZShjY2RjLCBhZGRyICYgMHhmZmZmZmZlMCwgVlBGRV9TRFJfQUREUik7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9jY2RjX3NldF9od19pZl9wYXJhbXMoc3RydWN0IHZwZmVfY2NkYyAqY2NkYywKKwkJCQkgICAgICBzdHJ1Y3QgdnBmZV9od19pZl9wYXJhbSAqcGFyYW1zKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSA9IGNvbnRhaW5lcl9vZihjY2RjLCBzdHJ1Y3QgdnBmZV9kZXZpY2UsIGNjZGMpOworCisJY2NkYy0+Y2NkY19jZmcuaWZfdHlwZSA9IHBhcmFtcy0+aWZfdHlwZTsKKworCXN3aXRjaCAocGFyYW1zLT5pZl90eXBlKSB7CisJY2FzZSBWUEZFX0JUNjU2OgorCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzE2OgorCWNhc2UgVlBGRV9ZQ0JDUl9TWU5DXzg6CisJY2FzZSBWUEZFX0JUNjU2XzEwQklUOgorCQljY2RjLT5jY2RjX2NmZy55Y2Jjci52ZF9wb2wgPSBwYXJhbXMtPnZkcG9sOworCQljY2RjLT5jY2RjX2NmZy55Y2Jjci5oZF9wb2wgPSBwYXJhbXMtPmhkcG9sOworCQlicmVhazsKKworCWNhc2UgVlBGRV9SQVdfQkFZRVI6CisJCWNjZGMtPmNjZGNfY2ZnLmJheWVyLnZkX3BvbCA9IHBhcmFtcy0+dmRwb2w7CisJCWNjZGMtPmNjZGNfY2ZnLmJheWVyLmhkX3BvbCA9IHBhcmFtcy0+aGRwb2w7CisJCWlmIChwYXJhbXMtPmJ1c193aWR0aCA9PSAxMCkKKwkJCWNjZGMtPmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuZGF0YV9zeiA9CisJCQkJVlBGRV9DQ0RDX0RBVEFfMTBCSVRTOworCQllbHNlCisJCQljY2RjLT5jY2RjX2NmZy5iYXllci5jb25maWdfcGFyYW1zLmRhdGFfc3ogPQorCQkJCVZQRkVfQ0NEQ19EQVRBXzhCSVRTOworCQl2cGZlX2RiZygxLCB2cGZlLCAicGFyYW1zLmJ1c193aWR0aDogJWRcbiIsCisJCQlwYXJhbXMtPmJ1c193aWR0aCk7CisJCXZwZmVfZGJnKDEsIHZwZmUsICJjb25maWdfcGFyYW1zLmRhdGFfc3o6ICVkXG4iLAorCQkJY2NkYy0+Y2NkY19jZmcuYmF5ZXIuY29uZmlnX3BhcmFtcy5kYXRhX3N6KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdnBmZV9jbGVhcl9pbnRyKHN0cnVjdCB2cGZlX2NjZGMgKmNjZGMsIGludCB2ZGludCkKK3sKKwl1bnNpZ25lZCBpbnQgdnBmZV9pbnRfc3RhdHVzOworCisJdnBmZV9pbnRfc3RhdHVzID0gdnBmZV9yZWdfcmVhZChjY2RjLCBWUEZFX0lSUV9TVFMpOworCisJc3dpdGNoICh2ZGludCkgeworCS8qIFZEMCBpbnRlcnJ1cHQgKi8KKwljYXNlIFZQRkVfVkRJTlQwOgorCQl2cGZlX2ludF9zdGF0dXMgJj0gflZQRkVfVkRJTlQwOworCQl2cGZlX2ludF9zdGF0dXMgfD0gVlBGRV9WRElOVDA7CisJCWJyZWFrOworCisJLyogVkQxIGludGVycnVwdCAqLworCWNhc2UgVlBGRV9WRElOVDE6CisJCXZwZmVfaW50X3N0YXR1cyAmPSB+VlBGRV9WRElOVDE7CisJCXZwZmVfaW50X3N0YXR1cyB8PSBWUEZFX1ZESU5UMTsKKwkJYnJlYWs7CisKKwkvKiBWRDIgaW50ZXJydXB0ICovCisJY2FzZSBWUEZFX1ZESU5UMjoKKwkJdnBmZV9pbnRfc3RhdHVzICY9IH5WUEZFX1ZESU5UMjsKKwkJdnBmZV9pbnRfc3RhdHVzIHw9IFZQRkVfVkRJTlQyOworCQlicmVhazsKKworCS8qIENsZWFyIGFsbCBpbnRlcnJ1cHRzICovCisJZGVmYXVsdDoKKwkJdnBmZV9pbnRfc3RhdHVzICY9IH4oVlBGRV9WRElOVDAgfAorCQkJCVZQRkVfVkRJTlQxIHwKKwkJCQlWUEZFX1ZESU5UMik7CisJCXZwZmVfaW50X3N0YXR1cyB8PSAoVlBGRV9WRElOVDAgfAorCQkJCVZQRkVfVkRJTlQxIHwKKwkJCQlWUEZFX1ZESU5UMik7CisJCWJyZWFrOworCX0KKwkvKiBDbGVhciBzcGVjaWZpYyBWRElOVCBmcm9tIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKi8KKwl2cGZlX3JlZ193cml0ZShjY2RjLCB2cGZlX2ludF9zdGF0dXMsIFZQRkVfSVJRX1NUUyk7CisKKwl2cGZlX2ludF9zdGF0dXMgPSB2cGZlX3JlZ19yZWFkKGNjZGMsIFZQRkVfSVJRX1NUUyk7CisKKwkvKiBBY2tub3dsZWRnZSB0aGF0IHdlIGFyZSBkb25lIHdpdGggYWxsIGludGVycnVwdHMgKi8KKwl2cGZlX3JlZ193cml0ZShjY2RjLCAxLCBWUEZFX0lSUV9FT0kpOworfQorCitzdGF0aWMgdm9pZCB2cGZlX2NjZGNfY29uZmlnX2RlZmF1bHRzKHN0cnVjdCB2cGZlX2NjZGMgKmNjZGMpCit7CisJY2NkYy0+Y2NkY19jZmcuaWZfdHlwZSA9IFZQRkVfUkFXX0JBWUVSOworCisJY2NkYy0+Y2NkY19jZmcueWNiY3IucGl4X2ZtdCA9IENDRENfUElYRk1UX1lDQkNSXzhCSVQ7CisJY2NkYy0+Y2NkY19jZmcueWNiY3IuZnJtX2ZtdCA9IENDRENfRlJNRk1UX0lOVEVSTEFDRUQ7CisJY2NkYy0+Y2NkY19jZmcueWNiY3IuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFOworCWNjZGMtPmNjZGNfY2ZnLnljYmNyLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFOworCWNjZGMtPmNjZGNfY2ZnLnljYmNyLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFOworCWNjZGMtPmNjZGNfY2ZnLnljYmNyLnBpeF9vcmRlciA9IENDRENfUElYT1JERVJfQ0JZQ1JZOworCWNjZGMtPmNjZGNfY2ZnLnljYmNyLmJ1Zl90eXBlID0gQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRDsKKworCWNjZGMtPmNjZGNfY2ZnLnljYmNyLndpbi5sZWZ0ID0gMDsKKwljY2RjLT5jY2RjX2NmZy55Y2Jjci53aW4udG9wID0gMDsKKwljY2RjLT5jY2RjX2NmZy55Y2Jjci53aW4ud2lkdGggPSA3MjA7CisJY2NkYy0+Y2NkY19jZmcueWNiY3Iud2luLmhlaWdodCA9IDU3NjsKKwljY2RjLT5jY2RjX2NmZy55Y2Jjci5idDY1Nl9lbmFibGUgPSAxOworCisJY2NkYy0+Y2NkY19jZmcuYmF5ZXIucGl4X2ZtdCA9IENDRENfUElYRk1UX1JBVzsKKwljY2RjLT5jY2RjX2NmZy5iYXllci5mcm1fZm10ID0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkU7CisJY2NkYy0+Y2NkY19jZmcuYmF5ZXIuZmlkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFOworCWNjZGMtPmNjZGNfY2ZnLmJheWVyLnZkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFOworCWNjZGMtPmNjZGNfY2ZnLmJheWVyLmhkX3BvbCA9IFZQRkVfUElOUE9MX1BPU0lUSVZFOworCisJY2NkYy0+Y2NkY19jZmcuYmF5ZXIud2luLmxlZnQgPSAwOworCWNjZGMtPmNjZGNfY2ZnLmJheWVyLndpbi50b3AgPSAwOworCWNjZGMtPmNjZGNfY2ZnLmJheWVyLndpbi53aWR0aCA9IDgwMDsKKwljY2RjLT5jY2RjX2NmZy5iYXllci53aW4uaGVpZ2h0ID0gNjAwOworCWNjZGMtPmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuZGF0YV9zeiA9IFZQRkVfQ0NEQ19EQVRBXzhCSVRTOworCWNjZGMtPmNjZGNfY2ZnLmJheWVyLmNvbmZpZ19wYXJhbXMuYWxhdy5nYW1tYV93ZCA9CisJCQkJCQlWUEZFX0NDRENfR0FNTUFfQklUU18wOV8wOworfQorCisvKgorICogdnBmZV9nZXRfY2NkY19pbWFnZV9mb3JtYXQgLSBHZXQgaW1hZ2UgcGFyYW1ldGVycyBiYXNlZCBvbiBDQ0RDIHNldHRpbmdzCisgKi8KK3N0YXRpYyBpbnQgdnBmZV9nZXRfY2NkY19pbWFnZV9mb3JtYXQoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlLAorCQkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgdjRsMl9yZWN0IGltYWdlX3dpbjsKKwllbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZTsKKwllbnVtIGNjZGNfZnJtZm10IGZybV9mbXQ7CisKKwltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7CisJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwl2cGZlX2NjZGNfZ2V0X2ltYWdlX3dpbmRvdygmdnBmZS0+Y2NkYywgJmltYWdlX3dpbik7CisJZi0+Zm10LnBpeC53aWR0aCA9IGltYWdlX3dpbi53aWR0aDsKKwlmLT5mbXQucGl4LmhlaWdodCA9IGltYWdlX3dpbi5oZWlnaHQ7CisJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSB2cGZlX2NjZGNfZ2V0X2xpbmVfbGVuZ3RoKCZ2cGZlLT5jY2RjKTsKKwlmLT5mbXQucGl4LnNpemVpbWFnZSA9IGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lICoKKwkJCQlmLT5mbXQucGl4LmhlaWdodDsKKwlidWZfdHlwZSA9IHZwZmVfY2NkY19nZXRfYnVmdHlwZSgmdnBmZS0+Y2NkYyk7CisJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IHZwZmVfY2NkY19nZXRfcGl4ZWxfZm9ybWF0KCZ2cGZlLT5jY2RjKTsKKwlmcm1fZm10ID0gdnBmZV9jY2RjX2dldF9mcmFtZV9mb3JtYXQoJnZwZmUtPmNjZGMpOworCisJaWYgKGZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUpIHsKKwkJZi0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwl9IGVsc2UgaWYgKGZybV9mbXQgPT0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRCkgeworCQlpZiAoYnVmX3R5cGUgPT0gQ0NEQ19CVUZUWVBFX0ZMRF9JTlRFUkxFQVZFRCkgeworCQkJZi0+Zm10LnBpeC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwkJIH0gZWxzZSBpZiAoYnVmX3R5cGUgPT0gQ0NEQ19CVUZUWVBFX0ZMRF9TRVBBUkFURUQpIHsKKwkJCWYtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX1NFUV9UQjsKKwkJfSBlbHNlIHsKKwkJCXZwZmVfZXJyKHZwZmUsICJJbnZhbGlkIGJ1Zl90eXBlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJdnBmZV9lcnIodnBmZSwgIkludmFsaWQgZnJtX2ZtdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGZlX2NvbmZpZ19jY2RjX2ltYWdlX2Zvcm1hdChzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUpCit7CisJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10ID0gQ0NEQ19GUk1GTVRfSU5URVJMQUNFRDsKKwlpbnQgcmV0OworCisJdnBmZV9kYmcoMiwgdnBmZSwgInZwZmVfY29uZmlnX2NjZGNfaW1hZ2VfZm9ybWF0XG4iKTsKKworCXZwZmVfZGJnKDEsIHZwZmUsICJwaXhlbGZvcm1hdDogJXNcbiIsCisJCXByaW50X2ZvdXJjYyh2cGZlLT5mbXQuZm10LnBpeC5waXhlbGZvcm1hdCkpOworCisJaWYgKHZwZmVfY2NkY19zZXRfcGl4ZWxfZm9ybWF0KCZ2cGZlLT5jY2RjLAorCQkJdnBmZS0+Zm10LmZtdC5waXgucGl4ZWxmb3JtYXQpIDwgMCkgeworCQl2cGZlX2Vycih2cGZlLCAiY291bGRuJ3Qgc2V0IHBpeCBmb3JtYXQgaW4gY2NkY1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNvbmZpZ3VyZSB0aGUgaW1hZ2Ugd2luZG93ICovCisJdnBmZV9jY2RjX3NldF9pbWFnZV93aW5kb3coJnZwZmUtPmNjZGMsICZ2cGZlLT5jcm9wLCB2cGZlLT5icHApOworCisJc3dpdGNoICh2cGZlLT5mbXQuZm10LnBpeC5maWVsZCkgeworCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgorCQkvKiBkbyBub3RoaW5nLCBzaW5jZSBpdCBpcyBkZWZhdWx0ICovCisJCXJldCA9IHZwZmVfY2NkY19zZXRfYnVmdHlwZSgKKwkJCQkmdnBmZS0+Y2NkYywKKwkJCQlDQ0RDX0JVRlRZUEVfRkxEX0lOVEVSTEVBVkVEKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfRklFTERfTk9ORToKKwkJZnJtX2ZtdCA9IENDRENfRlJNRk1UX1BST0dSRVNTSVZFOworCQkvKiBidWZmZXIgdHlwZSBvbmx5IGFwcGxpY2FibGUgZm9yIGludGVybGFjZWQgc2NhbiAqLworCQlicmVhazsKKworCWNhc2UgVjRMMl9GSUVMRF9TRVFfVEI6CisJCXJldCA9IHZwZmVfY2NkY19zZXRfYnVmdHlwZSgKKwkJCQkmdnBmZS0+Y2NkYywKKwkJCQlDQ0RDX0JVRlRZUEVfRkxEX1NFUEFSQVRFRCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiB2cGZlX2NjZGNfc2V0X2ZyYW1lX2Zvcm1hdCgmdnBmZS0+Y2NkYywgZnJtX2ZtdCk7Cit9CisKKy8qCisgKiB2cGZlX2NvbmZpZ19pbWFnZV9mb3JtYXQoKQorICogRm9yIGEgZ2l2ZW4gc3RhbmRhcmQsIHRoaXMgZnVuY3Rpb25zIHNldHMgdXAgdGhlIGRlZmF1bHQKKyAqIHBpeCBmb3JtYXQgJiBjcm9wIHZhbHVlcyBpbiB0aGUgdnBmZSBkZXZpY2UgYW5kIGNjZGMuICBJdCBmaXJzdAorICogc3RhcnRzIHdpdGggZGVmYXVsdHMgYmFzZWQgdmFsdWVzIGZyb20gdGhlIHN0YW5kYXJkIHRhYmxlLgorICogSXQgdGhlbiBjaGVja3MgaWYgc3ViIGRldmljZSBzdXBwb3J0IGdfbWJ1c19mbXQgYW5kIHRoZW4gb3ZlcnJpZGUgdGhlCisgKiB2YWx1ZXMgYmFzZWQgb24gdGhhdC5TZXRzIGNyb3AgdmFsdWVzIHRvIG1hdGNoIHdpdGggc2NhbiByZXNvbHV0aW9uCisgKiBzdGFydGluZyBhdCAwLDAuIEl0IGNhbGxzIHZwZmVfY29uZmlnX2NjZGNfaW1hZ2VfZm9ybWF0KCkgc2V0IHRoZQorICogdmFsdWVzIGluIGNjZGMKKyAqLworc3RhdGljIGludCB2cGZlX2NvbmZpZ19pbWFnZV9mb3JtYXQoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlLAorCQkJCSAgICB2NGwyX3N0ZF9pZCBzdGRfaWQpCit7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJnZwZmUtPmZtdC5mbXQucGl4OworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2cGZlX3N0YW5kYXJkcyk7IGkrKykgeworCQlpZiAodnBmZV9zdGFuZGFyZHNbaV0uc3RkX2lkICYgc3RkX2lkKSB7CisJCQl2cGZlLT5zdGRfaW5mby5hY3RpdmVfcGl4ZWxzID0KKwkJCQkJdnBmZV9zdGFuZGFyZHNbaV0ud2lkdGg7CisJCQl2cGZlLT5zdGRfaW5mby5hY3RpdmVfbGluZXMgPQorCQkJCQl2cGZlX3N0YW5kYXJkc1tpXS5oZWlnaHQ7CisJCQl2cGZlLT5zdGRfaW5mby5mcmFtZV9mb3JtYXQgPQorCQkJCQl2cGZlX3N0YW5kYXJkc1tpXS5mcmFtZV9mb3JtYXQ7CisJCQl2cGZlLT5zdGRfaW5kZXggPSBpOworCisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChpID09ICBBUlJBWV9TSVpFKHZwZmVfc3RhbmRhcmRzKSkgeworCQl2cGZlX2Vycih2cGZlLCAic3RhbmRhcmQgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZwZmUtPmNyb3AudG9wID0gdnBmZS0+Y3JvcC5sZWZ0ID0gMDsKKwl2cGZlLT5jcm9wLndpZHRoID0gdnBmZS0+c3RkX2luZm8uYWN0aXZlX3BpeGVsczsKKwl2cGZlLT5jcm9wLmhlaWdodCA9IHZwZmUtPnN0ZF9pbmZvLmFjdGl2ZV9saW5lczsKKwlwaXgtPndpZHRoID0gdnBmZS0+Y3JvcC53aWR0aDsKKwlwaXgtPmhlaWdodCA9IHZwZmUtPmNyb3AuaGVpZ2h0OworCXBpeC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWVVZVjsKKworCS8qIGZpcnN0IGZpZWxkIGFuZCBmcmFtZSBmb3JtYXQgYmFzZWQgb24gc3RhbmRhcmQgZnJhbWUgZm9ybWF0ICovCisJaWYgKHZwZmUtPnN0ZF9pbmZvLmZyYW1lX2Zvcm1hdCkKKwkJcGl4LT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwllbHNlCisJCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CisKKwlyZXQgPSBfX3ZwZmVfZ2V0X2Zvcm1hdCh2cGZlLCAmdnBmZS0+Zm10LCAmdnBmZS0+YnBwKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogVXBkYXRlIHRoZSBjcm9wIHdpbmRvdyBiYXNlZCBvbiBmb3VuZCB2YWx1ZXMgKi8KKwl2cGZlLT5jcm9wLndpZHRoID0gcGl4LT53aWR0aDsKKwl2cGZlLT5jcm9wLmhlaWdodCA9IHBpeC0+aGVpZ2h0OworCisJcmV0dXJuIHZwZmVfY29uZmlnX2NjZGNfaW1hZ2VfZm9ybWF0KHZwZmUpOworfQorCitzdGF0aWMgaW50IHZwZmVfaW5pdGlhbGl6ZV9kZXZpY2Uoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlKQoreworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJaW50IHJldDsKKworCXNkaW5mbyA9ICZ2cGZlLT5jZmctPnN1Yl9kZXZzWzBdOworCXNkaW5mby0+c2QgPSB2cGZlLT5zZFswXTsKKwl2cGZlLT5jdXJyZW50X2lucHV0ID0gMDsKKwl2cGZlLT5zdGRfaW5kZXggPSAwOworCS8qIENvbmZpZ3VyZSB0aGUgZGVmYXVsdCBmb3JtYXQgaW5mb3JtYXRpb24gKi8KKwlyZXQgPSB2cGZlX2NvbmZpZ19pbWFnZV9mb3JtYXQodnBmZSwKKwkJCQkgICAgICAgdnBmZV9zdGFuZGFyZHNbdnBmZS0+c3RkX2luZGV4XS5zdGRfaWQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwbV9ydW50aW1lX2dldF9zeW5jKHZwZmUtPnBkZXYpOworCisJdnBmZV9jb25maWdfZW5hYmxlKCZ2cGZlLT5jY2RjLCAxKTsKKworCXZwZmVfY2NkY19yZXN0b3JlX2RlZmF1bHRzKCZ2cGZlLT5jY2RjKTsKKworCS8qIENsZWFyIGFsbCBWUEZFIGludGVycnVwdHMgKi8KKwl2cGZlX2NsZWFyX2ludHIoJnZwZmUtPmNjZGMsIC0xKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB2cGZlX3JlbGVhc2UgOiBUaGlzIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIHRoZSB2YjJfZm9wX3JlbGVhc2UKKyAqIGhlbHBlciBmdW5jdGlvbi4KKyAqIEl0IGhhcyBiZWVuIGF1Z21lbnRlZCB0byBoYW5kbGUgbW9kdWxlIHBvd2VyIG1hbmFnZW1lbnQsCisgKiBieSBkaXNhYmxpbmcvZW5hYmxpbmcgaC93IG1vZHVsZSBmY250bCBjbG9jayB3aGVuIG5lY2Vzc2FyeS4KKyAqLworc3RhdGljIGludCB2cGZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmdnBmZS0+bG9jayk7CisKKwlpZiAodjRsMl9maF9pc19zaW5ndWxhcl9maWxlKGZpbGUpKQorCQl2cGZlX2NjZGNfY2xvc2UoJnZwZmUtPmNjZGMsIHZwZmUtPnBkZXYpOworCXJldCA9IF92YjJfZm9wX3JlbGVhc2UoZmlsZSwgTlVMTCk7CisKKwltdXRleF91bmxvY2soJnZwZmUtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHZwZmVfb3BlbiA6IFRoaXMgZnVuY3Rpb24gaXMgYmFzZWQgb24gdGhlIHY0bDJfZmhfb3BlbiBoZWxwZXIgZnVuY3Rpb24uCisgKiBJdCBoYXMgYmVlbiBhdWdtZW50ZWQgdG8gaGFuZGxlIG1vZHVsZSBwb3dlciBtYW5hZ2VtZW50LAorICogYnkgZGlzYWJsaW5nL2VuYWJsaW5nIGgvdyBtb2R1bGUgZmNudGwgY2xvY2sgd2hlbiBuZWNlc3NhcnkuCisgKi8KK3N0YXRpYyBpbnQgdnBmZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJnZwZmUtPmxvY2spOworCisJcmV0ID0gdjRsMl9maF9vcGVuKGZpbGUpOworCWlmIChyZXQpIHsKKwkJdnBmZV9lcnIodnBmZSwgInY0bDJfZmhfb3BlbiBmYWlsZWRcbiIpOworCQlnb3RvIHVubG9jazsKKwl9CisKKwlpZiAoIXY0bDJfZmhfaXNfc2luZ3VsYXJfZmlsZShmaWxlKSkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAodnBmZV9pbml0aWFsaXplX2RldmljZSh2cGZlKSkgeworCQl2NGwyX2ZoX3JlbGVhc2UoZmlsZSk7CisJCXJldCA9IC1FTk9ERVY7CisJfQorCit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZ2cGZlLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHZwZmVfc2NoZWR1bGVfbmV4dF9idWZmZXI6IHNldCBuZXh0IGJ1ZmZlciBhZGRyZXNzIGZvciBjYXB0dXJlCisgKiBAdnBmZSA6IHB0ciB0byB2cGZlIGRldmljZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBnZXQgbmV4dCBidWZmZXIgZnJvbSB0aGUgZG1hIHF1ZXVlIGFuZAorICogc2V0IHRoZSBidWZmZXIgYWRkcmVzcyBpbiB0aGUgdnBmZSByZWdpc3RlciBmb3IgY2FwdHVyZS4KKyAqIHRoZSBidWZmZXIgaXMgbWFya2VkIGFjdGl2ZQorICoKKyAqIEFzc3VtZXMgY2FsbGVyIGlzIGhvbGRpbmcgdnBmZS0+ZG1hX3F1ZXVlX2xvY2sgYWxyZWFkeQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdnBmZV9zY2hlZHVsZV9uZXh0X2J1ZmZlcihzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUpCit7CisJdnBmZS0+bmV4dF9mcm0gPSBsaXN0X2VudHJ5KHZwZmUtPmRtYV9xdWV1ZS5uZXh0LAorCQkJCSAgICBzdHJ1Y3QgdnBmZV9jYXBfYnVmZmVyLCBsaXN0KTsKKwlsaXN0X2RlbCgmdnBmZS0+bmV4dF9mcm0tPmxpc3QpOworCisJdnBmZV9zZXRfc2RyX2FkZHIoJnZwZmUtPmNjZGMsCisJCSAgICAgICB2YjJfZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRkcigmdnBmZS0+bmV4dF9mcm0tPnZiLCAwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2cGZlX3NjaGVkdWxlX2JvdHRvbV9maWVsZChzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKCZ2cGZlLT5uZXh0X2ZybS0+dmIsIDApICsKKwkJCQkJdnBmZS0+ZmllbGRfb2ZmOworCisJdnBmZV9zZXRfc2RyX2FkZHIoJnZwZmUtPmNjZGMsIGFkZHIpOworfQorCisvKgorICogdnBmZV9wcm9jZXNzX2J1ZmZlcl9jb21wbGV0ZTogcHJvY2VzcyBhIGNvbXBsZXRlZCBidWZmZXIKKyAqIEB2cGZlIDogcHRyIHRvIHZwZmUgZGV2aWNlCisgKgorICogVGhpcyBmdW5jdGlvbiB0aW1lIHN0YW1wIHRoZSBidWZmZXIgYW5kIG1hcmsgaXQgYXMgRE9ORS4gSXQgYWxzbworICogd2FrZSB1cCBhbnkgcHJvY2VzcyB3YWl0aW5nIG9uIHRoZSBRVUVVRSBhbmQgc2V0IHRoZSBuZXh0IGJ1ZmZlcgorICogYXMgY3VycmVudAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdnBmZV9wcm9jZXNzX2J1ZmZlcl9jb21wbGV0ZShzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUpCit7CisJdjRsMl9nZXRfdGltZXN0YW1wKCZ2cGZlLT5jdXJfZnJtLT52Yi52NGwyX2J1Zi50aW1lc3RhbXApOworCXZwZmUtPmN1cl9mcm0tPnZiLnY0bDJfYnVmLmZpZWxkID0gdnBmZS0+Zm10LmZtdC5waXguZmllbGQ7CisJdnBmZS0+Y3VyX2ZybS0+dmIudjRsMl9idWYuc2VxdWVuY2UgPSB2cGZlLT5zZXF1ZW5jZSsrOworCXZiMl9idWZmZXJfZG9uZSgmdnBmZS0+Y3VyX2ZybS0+dmIsIFZCMl9CVUZfU1RBVEVfRE9ORSk7CisJdnBmZS0+Y3VyX2ZybSA9IHZwZmUtPm5leHRfZnJtOworfQorCisvKgorICogdnBmZV9pc3IgOiBJU1IgaGFuZGxlciBmb3IgdnBmZSBjYXB0dXJlIChWSU5UMCkKKyAqIEBpcnE6IGlycSBudW1iZXIKKyAqIEBkZXZfaWQ6IGRldl9pZCBwdHIKKyAqCisgKiBJdCBjaGFuZ2VzIHN0YXR1cyBvZiB0aGUgY2FwdHVyZWQgYnVmZmVyLCB0YWtlcyBuZXh0IGJ1ZmZlciBmcm9tIHRoZSBxdWV1ZQorICogYW5kIHNldHMgaXRzIGFkZHJlc3MgaW4gVlBGRSByZWdpc3RlcnMKKyAqLworc3RhdGljIGlycXJldHVybl90IHZwZmVfaXNyKGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUgPSAoc3RydWN0IHZwZmVfZGV2aWNlICopZGV2OworCWVudW0gdjRsMl9maWVsZCBmaWVsZDsKKwlpbnQgaW50cl9zdGF0dXM7CisJaW50IGZpZDsKKworCWludHJfc3RhdHVzID0gdnBmZV9yZWdfcmVhZCgmdnBmZS0+Y2NkYywgVlBGRV9JUlFfU1RTKTsKKworCWlmIChpbnRyX3N0YXR1cyAmIFZQRkVfVkRJTlQwKSB7CisJCWZpZWxkID0gdnBmZS0+Zm10LmZtdC5waXguZmllbGQ7CisKKwkJaWYgKGZpZWxkID09IFY0TDJfRklFTERfTk9ORSkgeworCQkJLyogaGFuZGxlIHByb2dyZXNzaXZlIGZyYW1lIGNhcHR1cmUgKi8KKwkJCWlmICh2cGZlLT5jdXJfZnJtICE9IHZwZmUtPm5leHRfZnJtKQorCQkJCXZwZmVfcHJvY2Vzc19idWZmZXJfY29tcGxldGUodnBmZSk7CisJCQlnb3RvIG5leHRfaW50cjsKKwkJfQorCisJCS8qIGludGVybGFjZWQgb3IgVEIgY2FwdHVyZSBjaGVjayB3aGljaCBmaWVsZAorCQkgICB3ZSBhcmUgaW4gaGFyZHdhcmUgKi8KKwkJZmlkID0gdnBmZV9jY2RjX2dldGZpZCgmdnBmZS0+Y2NkYyk7CisKKwkJLyogc3dpdGNoIHRoZSBzb2Z0d2FyZSBtYWludGFpbmVkIGZpZWxkIGlkICovCisJCXZwZmUtPmZpZWxkIF49IDE7CisJCWlmIChmaWQgPT0gdnBmZS0+ZmllbGQpIHsKKwkJCS8qIHdlIGFyZSBpbi1zeW5jIGhlcmUsY29udGludWUgKi8KKwkJCWlmIChmaWQgPT0gMCkgeworCQkJCS8qCisJCQkJICogT25lIGZyYW1lIGlzIGp1c3QgYmVpbmcgY2FwdHVyZWQuIElmIHRoZQorCQkJCSAqIG5leHQgZnJhbWUgaXMgYXZhaWxhYmxlLCByZWxlYXNlIHRoZQorCQkJCSAqIGN1cnJlbnQgZnJhbWUgYW5kIG1vdmUgb24KKwkJCQkgKi8KKwkJCQlpZiAodnBmZS0+Y3VyX2ZybSAhPSB2cGZlLT5uZXh0X2ZybSkKKwkJCQkJdnBmZV9wcm9jZXNzX2J1ZmZlcl9jb21wbGV0ZSh2cGZlKTsKKwkJCQkvKgorCQkJCSAqIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHR3byBmaWVsZHMgYXJlIHN0b3JlZAorCQkJCSAqIGludGVybGVhdmUgb3Igc2VwYXJhdGVseSBpbiBtZW1vcnksCisJCQkJICogcmVjb25maWd1cmUgdGhlIENDREMgbWVtb3J5IGFkZHJlc3MKKwkJCQkgKi8KKwkJCQlpZiAoZmllbGQgPT0gVjRMMl9GSUVMRF9TRVFfVEIpCisJCQkJCXZwZmVfc2NoZWR1bGVfYm90dG9tX2ZpZWxkKHZwZmUpOworCisJCQkJZ290byBuZXh0X2ludHI7CisJCQl9CisJCQkvKgorCQkJICogaWYgb25lIGZpZWxkIGlzIGp1c3QgYmVpbmcgY2FwdHVyZWQgY29uZmlndXJlCisJCQkgKiB0aGUgbmV4dCBmcmFtZSBnZXQgdGhlIG5leHQgZnJhbWUgZnJvbSB0aGUgZW1wdHkKKwkJCSAqIHF1ZXVlIGlmIG5vIGZyYW1lIGlzIGF2YWlsYWJsZSBob2xkIG9uIHRvIHRoZQorCQkJICogY3VycmVudCBidWZmZXIKKwkJCSAqLworCQkJc3Bpbl9sb2NrKCZ2cGZlLT5kbWFfcXVldWVfbG9jayk7CisJCQlpZiAoIWxpc3RfZW1wdHkoJnZwZmUtPmRtYV9xdWV1ZSkgJiYKKwkJCSAgICB2cGZlLT5jdXJfZnJtID09IHZwZmUtPm5leHRfZnJtKQorCQkJCXZwZmVfc2NoZWR1bGVfbmV4dF9idWZmZXIodnBmZSk7CisJCQlzcGluX3VubG9jaygmdnBmZS0+ZG1hX3F1ZXVlX2xvY2spOworCQl9IGVsc2UgaWYgKGZpZCA9PSAwKSB7CisJCQkvKgorCQkJICogb3V0IG9mIHN5bmMuIFJlY292ZXIgZnJvbSBhbnkgaGFyZHdhcmUgb3V0LW9mLXN5bmMuCisJCQkgKiBNYXkgbG9vc2Ugb25lIGZyYW1lCisJCQkgKi8KKwkJCXZwZmUtPmZpZWxkID0gZmlkOworCQl9CisJfQorCituZXh0X2ludHI6CisJaWYgKGludHJfc3RhdHVzICYgVlBGRV9WRElOVDEpIHsKKwkJc3Bpbl9sb2NrKCZ2cGZlLT5kbWFfcXVldWVfbG9jayk7CisJCWlmICh2cGZlLT5mbXQuZm10LnBpeC5maWVsZCA9PSBWNEwyX0ZJRUxEX05PTkUgJiYKKwkJICAgICFsaXN0X2VtcHR5KCZ2cGZlLT5kbWFfcXVldWUpICYmCisJCSAgICB2cGZlLT5jdXJfZnJtID09IHZwZmUtPm5leHRfZnJtKQorCQkJdnBmZV9zY2hlZHVsZV9uZXh0X2J1ZmZlcih2cGZlKTsKKwkJc3Bpbl91bmxvY2soJnZwZmUtPmRtYV9xdWV1ZV9sb2NrKTsKKwl9CisKKwl2cGZlX2NsZWFyX2ludHIoJnZwZmUtPmNjZGMsIGludHJfc3RhdHVzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHZwZmVfZGV0YWNoX2lycShzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUpCit7CisJdW5zaWduZWQgaW50IGludHIgPSBWUEZFX1ZESU5UMDsKKwllbnVtIGNjZGNfZnJtZm10IGZyYW1lX2Zvcm1hdDsKKworCWZyYW1lX2Zvcm1hdCA9IHZwZmVfY2NkY19nZXRfZnJhbWVfZm9ybWF0KCZ2cGZlLT5jY2RjKTsKKwlpZiAoZnJhbWVfZm9ybWF0ID09IENDRENfRlJNRk1UX1BST0dSRVNTSVZFKQorCQlpbnRyIHw9IFZQRkVfVkRJTlQxOworCisJdnBmZV9yZWdfd3JpdGUoJnZwZmUtPmNjZGMsIGludHIsIFZQRkVfSVJRX0VOX0NMUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2cGZlX2F0dGFjaF9pcnEoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlKQoreworCXVuc2lnbmVkIGludCBpbnRyID0gVlBGRV9WRElOVDA7CisJZW51bSBjY2RjX2ZybWZtdCBmcmFtZV9mb3JtYXQ7CisKKwlmcmFtZV9mb3JtYXQgPSB2cGZlX2NjZGNfZ2V0X2ZyYW1lX2Zvcm1hdCgmdnBmZS0+Y2NkYyk7CisJaWYgKGZyYW1lX2Zvcm1hdCA9PSBDQ0RDX0ZSTUZNVF9QUk9HUkVTU0lWRSkKKwkJaW50ciB8PSBWUEZFX1ZESU5UMTsKKworCXZwZmVfcmVnX3dyaXRlKCZ2cGZlLT5jY2RjLCBpbnRyLCBWUEZFX0lSUV9FTl9TRVQpOworfQorCitzdGF0aWMgaW50IHZwZmVfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCQkJIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJdnBmZV9kYmcoMiwgdnBmZSwgInZwZmVfcXVlcnljYXBcbiIpOworCisJc3RybGNweShjYXAtPmRyaXZlciwgVlBGRV9NT0RVTEVfTkFNRSwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7CisJc3RybGNweShjYXAtPmNhcmQsICJUSSBBTTQzN3ggVlBGRSIsIHNpemVvZihjYXAtPmNhcmQpKTsKKwlzbnByaW50ZihjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksCisJCQkicGxhdGZvcm06JXMiLCB2cGZlLT52NGwyX2Rldi5uYW1lKTsKKwljYXAtPmRldmljZV9jYXBzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORyB8CisJCQkgICAgVjRMMl9DQVBfUkVBRFdSSVRFOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gY2FwLT5kZXZpY2VfY2FwcyB8IFY0TDJfQ0FQX0RFVklDRV9DQVBTOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGdldCB0aGUgZm9ybWF0IHNldCBhdCBvdXRwdXQgcGFkIG9mIHRoZSBhZGphY2VudCBzdWJkZXYgKi8KK3N0YXRpYyBpbnQgX192cGZlX2dldF9mb3JtYXQoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlLAorCQkJICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCwgdW5zaWduZWQgaW50ICpicHApCit7CisJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCBtYnVzX2ZtdDsKKwlzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyAqc2RpbmZvOworCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm10OworCWludCByZXQ7CisKKwlzZGluZm8gPSB2cGZlLT5jdXJyZW50X3N1YmRldjsKKwlpZiAoIXNkaW5mby0+c2QpCisJCXJldHVybiAtRUlOVkFMOworCisJZm10LndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRTsKKwlmbXQucGFkID0gMDsKKworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2RpbmZvLT5zZCwgcGFkLCBnZXRfZm10LCBOVUxMLCAmZm10KTsKKwlpZiAocmV0ICYmIHJldCAhPSAtRU5PSU9DVExDTUQgJiYgcmV0ICE9IC1FTk9ERVYpCisJCXJldHVybiByZXQ7CisKKwlpZiAoIXJldCkgeworCQl2NGwyX2ZpbGxfcGl4X2Zvcm1hdCgmZm9ybWF0LT5mbXQucGl4LCAmZm10LmZvcm1hdCk7CisJCW1idXNfdG9fcGl4KHZwZmUsICZmbXQuZm9ybWF0LCAmZm9ybWF0LT5mbXQucGl4LCBicHApOworCX0gZWxzZSB7CisJCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZ2cGZlLT52NGwyX2RldiwKKwkJCQkJCSBzZGluZm8tPmdycF9pZCwKKwkJCQkJCSB2aWRlbywgZ19tYnVzX2ZtdCwKKwkJCQkJCSAmbWJ1c19mbXQpOworCQlpZiAocmV0ICYmIHJldCAhPSAtRU5PSU9DVExDTUQgJiYgcmV0ICE9IC1FTk9ERVYpCisJCQlyZXR1cm4gcmV0OworCQl2NGwyX2ZpbGxfcGl4X2Zvcm1hdCgmZm9ybWF0LT5mbXQucGl4LCAmbWJ1c19mbXQpOworCQltYnVzX3RvX3BpeCh2cGZlLCAmbWJ1c19mbXQsICZmb3JtYXQtPmZtdC5waXgsIGJwcCk7CisJfQorCisJZm9ybWF0LT50eXBlID0gdnBmZS0+Zm10LnR5cGU7CisKKwl2cGZlX2RiZygxLCB2cGZlLAorCQkgIiVzIHNpemUgJWR4JWQgKCVzKSBieXRlc3BlcmxpbmUgPSAlZCwgc2l6ZSA9ICVkLCBicHAgPSAlZFxuIiwKKwkJIF9fZnVuY19fLCBmb3JtYXQtPmZtdC5waXgud2lkdGgsIGZvcm1hdC0+Zm10LnBpeC5oZWlnaHQsCisJCSBwcmludF9mb3VyY2MoZm9ybWF0LT5mbXQucGl4LnBpeGVsZm9ybWF0KSwKKwkJIGZvcm1hdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUsIGZvcm1hdC0+Zm10LnBpeC5zaXplaW1hZ2UsICpicHApOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHNldCB0aGUgZm9ybWF0IGF0IG91dHB1dCBwYWQgb2YgdGhlIGFkamFjZW50IHN1YmRldiAqLworc3RhdGljIGludCBfX3ZwZmVfc2V0X2Zvcm1hdChzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUsCisJCQkgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm9ybWF0LCB1bnNpZ25lZCBpbnQgKmJwcCkKK3sKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1idXNfZm10OworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCBmbXQ7CisJaW50IHJldDsKKworCXZwZmVfZGJnKDIsIHZwZmUsICJfX3ZwZmVfc2V0X2Zvcm1hdFxuIik7CisKKwlzZGluZm8gPSB2cGZlLT5jdXJyZW50X3N1YmRldjsKKwlpZiAoIXNkaW5mby0+c2QpCisJCXJldHVybiAtRUlOVkFMOworCisJZm10LndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRTsKKwlmbXQucGFkID0gMDsKKworCXBpeF90b19tYnVzKHZwZmUsICZmb3JtYXQtPmZtdC5waXgsICZmbXQuZm9ybWF0KTsKKworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2RpbmZvLT5zZCwgcGFkLCBzZXRfZm10LCBOVUxMLCAmZm10KTsKKwlpZiAocmV0ICYmIHJldCAhPSAtRU5PSU9DVExDTUQgJiYgcmV0ICE9IC1FTk9ERVYpCisJCXJldHVybiByZXQ7CisKKwlpZiAoIXJldCkgeworCQl2NGwyX2ZpbGxfcGl4X2Zvcm1hdCgmZm9ybWF0LT5mbXQucGl4LCAmZm10LmZvcm1hdCk7CisJCW1idXNfdG9fcGl4KHZwZmUsICZmbXQuZm9ybWF0LCAmZm9ybWF0LT5mbXQucGl4LCBicHApOworCX0gZWxzZSB7CisJCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZ2cGZlLT52NGwyX2RldiwKKwkJCQkJCSBzZGluZm8tPmdycF9pZCwKKwkJCQkJCSB2aWRlbywgc19tYnVzX2ZtdCwKKwkJCQkJCSAmbWJ1c19mbXQpOworCQlpZiAocmV0ICYmIHJldCAhPSAtRU5PSU9DVExDTUQgJiYgcmV0ICE9IC1FTk9ERVYpCisJCQlyZXR1cm4gcmV0OworCisJCXY0bDJfZmlsbF9waXhfZm9ybWF0KCZmb3JtYXQtPmZtdC5waXgsICZtYnVzX2ZtdCk7CisJCW1idXNfdG9fcGl4KHZwZmUsICZtYnVzX2ZtdCwgJmZvcm1hdC0+Zm10LnBpeCwgYnBwKTsKKwl9CisKKwlmb3JtYXQtPnR5cGUgPSB2cGZlLT5mbXQudHlwZTsKKworCXZwZmVfZGJnKDEsIHZwZmUsCisJCSAiJXMgc2l6ZSAlZHglZCAoJXMpIGJ5dGVzcGVybGluZSA9ICVkLCBzaXplID0gJWQsIGJwcCA9ICVkXG4iLAorCQkgX19mdW5jX18sICBmb3JtYXQtPmZtdC5waXgud2lkdGgsIGZvcm1hdC0+Zm10LnBpeC5oZWlnaHQsCisJCSBwcmludF9mb3VyY2MoZm9ybWF0LT5mbXQucGl4LnBpeGVsZm9ybWF0KSwKKwkJIGZvcm1hdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUsIGZvcm1hdC0+Zm10LnBpeC5zaXplaW1hZ2UsICpicHApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9nX2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXZwZmVfZGJnKDIsIHZwZmUsICJ2cGZlX2dfZm10XG4iKTsKKworCSpmbXQgPSB2cGZlLT5mbXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cGZlX2VudW1fZm10KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCSBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHZwZmVfc3ViZGV2X2luZm8gKnNkaW5mbzsKKwlzdHJ1Y3QgdnBmZV9mbXQgKmZtdCA9IE5VTEw7CisJdW5zaWduZWQgaW50IGs7CisKKwl2cGZlX2RiZygyLCB2cGZlLCAidnBmZV9lbnVtX2Zvcm1hdCBpbmRleDolZFxuIiwKKwkJZi0+aW5kZXgpOworCisJc2RpbmZvID0gdnBmZS0+Y3VycmVudF9zdWJkZXY7CisJaWYgKCFzZGluZm8tPnNkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmLT5pbmRleCA+IEFSUkFZX1NJWkUoZm9ybWF0cykpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUoZm9ybWF0cyk7IGsrKykgeworCQlpZiAoZm9ybWF0c1trXS5pbmRleCA9PSBmLT5pbmRleCkgeworCQkJZm10ID0gJmZvcm1hdHNba107CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIWZtdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJuY3B5KGYtPmRlc2NyaXB0aW9uLCBmbXQtPm5hbWUsIHNpemVvZihmLT5kZXNjcmlwdGlvbikgLSAxKTsKKwlmLT5waXhlbGZvcm1hdCA9IGZtdC0+Zm91cmNjOworCWYtPnR5cGUgPSB2cGZlLT5mbXQudHlwZTsKKworCXZwZmVfZGJnKDEsIHZwZmUsICJ2cGZlX2VudW1fZm9ybWF0OiBtYnVzIGluZGV4OiAlZCBjb2RlOiAleCBwaXhlbGZvcm1hdDogJXMgWyVzXVxuIiwKKwkJZi0+aW5kZXgsIGZtdC0+Y29kZSwgcHJpbnRfZm91cmNjKGZtdC0+Zm91cmNjKSwgZm10LT5uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwZmVfdHJ5X2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJdW5zaWduZWQgaW50IGJwcDsKKworCXZwZmVfZGJnKDIsIHZwZmUsICJ2cGZlX3RyeV9mbXRcbiIpOworCisJcmV0dXJuIF9fdnBmZV9nZXRfZm9ybWF0KHZwZmUsIGZtdCwgJmJwcCk7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9zX2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm9ybWF0OworCXVuc2lnbmVkIGludCBicHA7CisJaW50IHJldDsKKworCXZwZmVfZGJnKDIsIHZwZmUsICJ2cGZlX3NfZm10XG4iKTsKKworCS8qIElmIHN0cmVhbWluZyBpcyBzdGFydGVkLCByZXR1cm4gZXJyb3IgKi8KKwlpZiAodmIyX2lzX2J1c3koJnZwZmUtPmJ1ZmZlcl9xdWV1ZSkpIHsKKwkJdnBmZV9lcnIodnBmZSwgIiVzIGRldmljZSBidXN5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJcmV0ID0gdnBmZV90cnlfZm10KGZpbGUsIHByaXYsIGZtdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCisJaWYgKCFjbXBfdjRsMl9mb3JtYXQoZm10LCAmZm9ybWF0KSkgeworCQkvKiBTZW5zb3IgZm9ybWF0IGlzIGRpZmZlcmVudCBmcm9tIHRoZSByZXF1ZXN0ZWQgZm9ybWF0CisJCSAqIHNvIHdlIG5lZWQgdG8gY2hhbmdlIGl0CisJCSAqLworCQlyZXQgPSBfX3ZwZmVfc2V0X2Zvcm1hdCh2cGZlLCBmbXQsICZicHApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UgLyogSnVzdCBtYWtlIHN1cmUgYWxsIG9mIHRoZSBmaWVsZHMgYXJlIGNvbnNpc3RlbnQgKi8KKwkJKmZtdCA9IGZvcm1hdDsKKworCS8qIEZpcnN0IGRldGFjaCBhbnkgSVJRIGlmIGN1cnJlbnRseSBhdHRhY2hlZCAqLworCXZwZmVfZGV0YWNoX2lycSh2cGZlKTsKKwl2cGZlLT5mbXQgPSAqZm10OworCXZwZmUtPmJwcCA9IGJwcDsKKworCS8qIFVwZGF0ZSB0aGUgY3JvcCB3aW5kb3cgYmFzZWQgb24gZm91bmQgdmFsdWVzICovCisJdnBmZS0+Y3JvcC53aWR0aCA9IGZtdC0+Zm10LnBpeC53aWR0aDsKKwl2cGZlLT5jcm9wLmhlaWdodCA9IGZtdC0+Zm10LnBpeC5oZWlnaHQ7CisKKwkvKiBzZXQgaW1hZ2UgY2FwdHVyZSBwYXJhbWV0ZXJzIGluIHRoZSBjY2RjICovCisJcmV0dXJuIHZwZmVfY29uZmlnX2NjZGNfaW1hZ2VfZm9ybWF0KHZwZmUpOworfQorCitzdGF0aWMgaW50IHZwZmVfZW51bV9zaXplKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCSAgc3RydWN0IHY0bDJfZnJtc2l6ZWVudW0gKmZzaXplKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX3NpemVfZW51bSBmc2U7CisJc3RydWN0IHZwZmVfc3ViZGV2X2luZm8gKnNkaW5mbzsKKwlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10IG1idXM7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBwaXg7CisJc3RydWN0IHZwZmVfZm10ICpmbXQ7CisJaW50IHJldDsKKworCXZwZmVfZGJnKDIsIHZwZmUsICJ2cGZlX2VudW1fc2l6ZVxuIik7CisKKwkvKiBjaGVjayBmb3IgdmFsaWQgZm9ybWF0ICovCisJZm10ID0gZmluZF9mb3JtYXRfYnlfcGl4KGZzaXplLT5waXhlbF9mb3JtYXQpOworCWlmICghZm10KSB7CisJCXZwZmVfZGJnKDMsIHZwZmUsICJJbnZhbGlkIHBpeGVsIGNvZGU6ICV4LCBkZWZhdWx0IHVzZWQgaW5zdGVhZFxuIiwKKwkJCWZzaXplLT5waXhlbF9mb3JtYXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltZW1zZXQoZnNpemUtPnJlc2VydmVkLCAweDAsIHNpemVvZihmc2l6ZS0+cmVzZXJ2ZWQpKTsKKworCXNkaW5mbyA9IHZwZmUtPmN1cnJlbnRfc3ViZGV2OworCWlmICghc2RpbmZvLT5zZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoJnBpeCwgMHgwLCBzaXplb2YocGl4KSk7CisJLyogQ29uc3RydWN0IHBpeCBmcm9tIHBhcmFtZXRlciBhbmQgdXNlIGRlZmF1bHQgZm9yIHRoZSByZXN0ICovCisJcGl4LnBpeGVsZm9ybWF0ID0gZnNpemUtPnBpeGVsX2Zvcm1hdDsKKwlwaXgud2lkdGggPSA2NDA7CisJcGl4LmhlaWdodCA9IDQ4MDsKKwlwaXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOworCXBpeC5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKKwlwaXhfdG9fbWJ1cyh2cGZlLCAmcGl4LCAmbWJ1cyk7CisKKwltZW1zZXQoJmZzZSwgMHgwLCBzaXplb2YoZnNlKSk7CisJZnNlLmluZGV4ID0gZnNpemUtPmluZGV4OworCWZzZS5wYWQgPSAwOworCWZzZS5jb2RlID0gbWJ1cy5jb2RlOworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2RpbmZvLT5zZCwgcGFkLCBlbnVtX2ZyYW1lX3NpemUsIE5VTEwsICZmc2UpOworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJdnBmZV9kYmcoMSwgdnBmZSwgInZwZmVfZW51bV9zaXplOiBpbmRleDogJWQgY29kZTogJXggVzpbJWQsJWRdIEg6WyVkLCVkXVxuIiwKKwkJZnNlLmluZGV4LCBmc2UuY29kZSwgZnNlLm1pbl93aWR0aCwgZnNlLm1heF93aWR0aCwKKwkJZnNlLm1pbl9oZWlnaHQsIGZzZS5tYXhfaGVpZ2h0KTsKKworCWZzaXplLT50eXBlID0gVjRMMl9GUk1TSVpFX1RZUEVfRElTQ1JFVEU7CisJZnNpemUtPmRpc2NyZXRlLndpZHRoID0gZnNlLm1heF93aWR0aDsKKwlmc2l6ZS0+ZGlzY3JldGUuaGVpZ2h0ID0gZnNlLm1heF9oZWlnaHQ7CisKKwl2cGZlX2RiZygxLCB2cGZlLCAidnBmZV9lbnVtX3NpemU6IGluZGV4OiAlZCBwaXhmb3JtYXQ6ICVzIHNpemU6ICVkeCVkXG4iLAorCQlmc2l6ZS0+aW5kZXgsIHByaW50X2ZvdXJjYyhmc2l6ZS0+cGl4ZWxfZm9ybWF0KSwKKwkJZnNpemUtPmRpc2NyZXRlLndpZHRoLCBmc2l6ZS0+ZGlzY3JldGUuaGVpZ2h0KTsKKworCXJldHVybiAwOworfQorCisvKgorICogdnBmZV9nZXRfc3ViZGV2X2lucHV0X2luZGV4IC0gR2V0IHN1YmRldiBpbmRleCBhbmQgc3ViZGV2IGlucHV0IGluZGV4IGZvciBhCisgKiBnaXZlbiBhcHAgaW5wdXQgaW5kZXgKKyAqLworc3RhdGljIGludAordnBmZV9nZXRfc3ViZGV2X2lucHV0X2luZGV4KHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSwKKwkJCSAgICBpbnQgKnN1YmRldl9pbmRleCwKKwkJCSAgICBpbnQgKnN1YmRldl9pbnB1dF9pbmRleCwKKwkJCSAgICBpbnQgYXBwX2lucHV0X2luZGV4KQoreworCXN0cnVjdCB2cGZlX2NvbmZpZyAqY2ZnID0gdnBmZS0+Y2ZnOworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJaW50IGksIGogPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnBmZS0+Y2ZnLT5hc2QpOyBpKyspIHsKKwkJc2RpbmZvID0gJmNmZy0+c3ViX2RldnNbaV07CisJCWlmIChhcHBfaW5wdXRfaW5kZXggPCAoaiArIDEpKSB7CisJCQkqc3ViZGV2X2luZGV4ID0gaTsKKwkJCSpzdWJkZXZfaW5wdXRfaW5kZXggPSBhcHBfaW5wdXRfaW5kZXggLSBqOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaisrOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIHZwZmVfZ2V0X2FwcF9pbnB1dCAtIEdldCBhcHAgaW5wdXQgaW5kZXggZm9yIGEgZ2l2ZW4gc3ViZGV2IGlucHV0IGluZGV4CisgKiBkcml2ZXIgc3RvcmVzIHRoZSBpbnB1dCBpbmRleCBvZiB0aGUgY3VycmVudCBzdWIgZGV2aWNlIGFuZCB0cmFuc2xhdGUgaXQKKyAqIHdoZW4gYXBwbGljYXRpb24gcmVxdWVzdCB0aGUgY3VycmVudCBpbnB1dAorICovCitzdGF0aWMgaW50IHZwZmVfZ2V0X2FwcF9pbnB1dF9pbmRleChzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUsCisJCQkJICAgIGludCAqYXBwX2lucHV0X2luZGV4KQoreworCXN0cnVjdCB2cGZlX2NvbmZpZyAqY2ZnID0gdnBmZS0+Y2ZnOworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJaW50IGksIGogPSAwOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnBmZS0+Y2ZnLT5hc2QpOyBpKyspIHsKKwkJc2RpbmZvID0gJmNmZy0+c3ViX2RldnNbaV07CisJCWlmICghc3RyY21wKHNkaW5mby0+bmFtZSwgdnBmZS0+Y3VycmVudF9zdWJkZXYtPm5hbWUpKSB7CisJCQlpZiAodnBmZS0+Y3VycmVudF9pbnB1dCA+PSAxKQorCQkJCXJldHVybiAtMTsKKwkJCSphcHBfaW5wdXRfaW5kZXggPSBqICsgdnBmZS0+Y3VycmVudF9pbnB1dDsKKwkJCXJldHVybiAwOworCQl9CisJCWorKzsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfaW5wdXQgKmlucCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJaW50IHN1YmRldiwgaW5kZXg7CisKKwl2cGZlX2RiZygyLCB2cGZlLCAidnBmZV9lbnVtX2lucHV0XG4iKTsKKworCWlmICh2cGZlX2dldF9zdWJkZXZfaW5wdXRfaW5kZXgodnBmZSwgJnN1YmRldiwgJmluZGV4LAorCQkJCQlpbnAtPmluZGV4KSA8IDApIHsKKwkJdnBmZV9kYmcoMSwgdnBmZSwKKwkJCSJpbnB1dCBpbmZvcm1hdGlvbiBub3QgZm91bmQgZm9yIHRoZSBzdWJkZXZcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc2RpbmZvID0gJnZwZmUtPmNmZy0+c3ViX2RldnNbc3ViZGV2XTsKKwkqaW5wID0gc2RpbmZvLT5pbnB1dHNbaW5kZXhdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmluZGV4KQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwl2cGZlX2RiZygyLCB2cGZlLCAidnBmZV9nX2lucHV0XG4iKTsKKworCXJldHVybiB2cGZlX2dldF9hcHBfaW5wdXRfaW5kZXgodnBmZSwgaW5kZXgpOworfQorCisvKiBBc3N1bWVzIGNhbGxlciBpcyBob2xkaW5nIHZwZmVfZGV2LT5sb2NrICovCitzdGF0aWMgaW50IHZwZmVfc2V0X2lucHV0KHN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSwgdW5zaWduZWQgaW50IGluZGV4KQoreworCWludCBzdWJkZXZfaW5kZXggPSAwLCBpbnBfaW5kZXggPSAwOworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisJc3RydWN0IHZwZmVfcm91dGUgKnJvdXRlOworCXUzMiBpbnB1dCwgb3V0cHV0OworCWludCByZXQ7CisKKwl2cGZlX2RiZygyLCB2cGZlLCAidnBmZV9zZXRfaW5wdXQ6IGluZGV4OiAlZFxuIiwgaW5kZXgpOworCisJLyogSWYgc3RyZWFtaW5nIGlzIHN0YXJ0ZWQsIHJldHVybiBlcnJvciAqLworCWlmICh2YjJfaXNfYnVzeSgmdnBmZS0+YnVmZmVyX3F1ZXVlKSkgeworCQl2cGZlX2Vycih2cGZlLCAiJXMgZGV2aWNlIGJ1c3lcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcmV0ID0gdnBmZV9nZXRfc3ViZGV2X2lucHV0X2luZGV4KHZwZmUsCisJCQkJCSAgJnN1YmRldl9pbmRleCwKKwkJCQkJICAmaW5wX2luZGV4LAorCQkJCQkgIGluZGV4KTsKKwlpZiAocmV0IDwgMCkgeworCQl2cGZlX2Vycih2cGZlLCAiaW52YWxpZCBpbnB1dCBpbmRleDogJWRcbiIsIGluZGV4KTsKKwkJZ290byBnZXRfb3V0OworCX0KKworCXNkaW5mbyA9ICZ2cGZlLT5jZmctPnN1Yl9kZXZzW3N1YmRldl9pbmRleF07CisJc2RpbmZvLT5zZCA9IHZwZmUtPnNkW3N1YmRldl9pbmRleF07CisJcm91dGUgPSAmc2RpbmZvLT5yb3V0ZXNbaW5wX2luZGV4XTsKKwlpZiAocm91dGUgJiYgc2RpbmZvLT5jYW5fcm91dGUpIHsKKwkJaW5wdXQgPSByb3V0ZS0+aW5wdXQ7CisJCW91dHB1dCA9IHJvdXRlLT5vdXRwdXQ7CisJCWlmIChzZGluZm8tPnNkKSB7CisJCQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkaW5mby0+c2QsIHZpZGVvLAorCQkJCQlzX3JvdXRpbmcsIGlucHV0LCBvdXRwdXQsIDApOworCQkJaWYgKHJldCkgeworCQkJCXZwZmVfZXJyKHZwZmUsICJzX3JvdXRpbmcgZmFpbGVkXG4iKTsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWdvdG8gZ2V0X291dDsKKwkJCX0KKwkJfQorCisJfQorCisJdnBmZS0+Y3VycmVudF9zdWJkZXYgPSBzZGluZm87CisJaWYgKHNkaW5mby0+c2QpCisJCXZwZmUtPnY0bDJfZGV2LmN0cmxfaGFuZGxlciA9IHNkaW5mby0+c2QtPmN0cmxfaGFuZGxlcjsKKwl2cGZlLT5jdXJyZW50X2lucHV0ID0gaW5kZXg7CisJdnBmZS0+c3RkX2luZGV4ID0gMDsKKworCS8qIHNldCB0aGUgYnVzL2ludGVyZmFjZSBwYXJhbWV0ZXIgZm9yIHRoZSBzdWIgZGV2aWNlIGluIGNjZGMgKi8KKwlyZXQgPSB2cGZlX2NjZGNfc2V0X2h3X2lmX3BhcmFtcygmdnBmZS0+Y2NkYywgJnNkaW5mby0+dnBmZV9wYXJhbSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIHNldCB0aGUgZGVmYXVsdCBpbWFnZSBwYXJhbWV0ZXJzIGluIHRoZSBkZXZpY2UgKi8KKwlyZXR1cm4gdnBmZV9jb25maWdfaW1hZ2VfZm9ybWF0KHZwZmUsCisJCQkJCXZwZmVfc3RhbmRhcmRzW3ZwZmUtPnN0ZF9pbmRleF0uc3RkX2lkKTsKKworZ2V0X291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHZwZmVfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGluZGV4KQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwl2cGZlX2RiZygyLCB2cGZlLAorCQkidnBmZV9zX2lucHV0OiBpbmRleDogJWRcbiIsIGluZGV4KTsKKworCXJldHVybiB2cGZlX3NldF9pbnB1dCh2cGZlLCBpbmRleCk7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9xdWVyeXN0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKnN0ZF9pZCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisKKwl2cGZlX2RiZygyLCB2cGZlLCAidnBmZV9xdWVyeXN0ZFxuIik7CisKKwlzZGluZm8gPSB2cGZlLT5jdXJyZW50X3N1YmRldjsKKwlpZiAoIShzZGluZm8tPmlucHV0c1swXS5jYXBhYmlsaXRpZXMgJiBWNEwyX0lOX0NBUF9TVEQpKQorCQlyZXR1cm4gLUVOT0RBVEE7CisKKwkvKiBDYWxsIHF1ZXJ5c3RkIGZ1bmN0aW9uIG9mIGRlY29kZXIgZGV2aWNlICovCisJcmV0dXJuIHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZ2cGZlLT52NGwyX2Rldiwgc2RpbmZvLT5ncnBfaWQsCisJCQkJCSB2aWRlbywgcXVlcnlzdGQsIHN0ZF9pZCk7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgc3RkX2lkKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHZwZmVfc3ViZGV2X2luZm8gKnNkaW5mbzsKKwlpbnQgcmV0OworCisJdnBmZV9kYmcoMiwgdnBmZSwgInZwZmVfc19zdGRcbiIpOworCisJc2RpbmZvID0gdnBmZS0+Y3VycmVudF9zdWJkZXY7CisJaWYgKCEoc2RpbmZvLT5pbnB1dHNbMF0uY2FwYWJpbGl0aWVzICYgVjRMMl9JTl9DQVBfU1REKSkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJLyogSWYgc3RyZWFtaW5nIGlzIHN0YXJ0ZWQsIHJldHVybiBlcnJvciAqLworCWlmICh2YjJfaXNfYnVzeSgmdnBmZS0+YnVmZmVyX3F1ZXVlKSkgeworCQl2cGZlX2Vycih2cGZlLCAiJXMgZGV2aWNlIGJ1c3lcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVCVVNZOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZ2cGZlLT52NGwyX2Rldiwgc2RpbmZvLT5ncnBfaWQsCisJCQkJCSB2aWRlbywgc19zdGQsIHN0ZF9pZCk7CisJaWYgKHJldCA8IDApIHsKKwkJdnBmZV9lcnIodnBmZSwgIkZhaWxlZCB0byBzZXQgc3RhbmRhcmRcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSB2cGZlX2NvbmZpZ19pbWFnZV9mb3JtYXQodnBmZSwgc3RkX2lkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdnBmZV9nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKnN0ZF9pZCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpzZGluZm87CisKKwl2cGZlX2RiZygyLCB2cGZlLCAidnBmZV9nX3N0ZFxuIik7CisKKwlzZGluZm8gPSB2cGZlLT5jdXJyZW50X3N1YmRldjsKKwlpZiAoc2RpbmZvLT5pbnB1dHNbMF0uY2FwYWJpbGl0aWVzICE9IFY0TDJfSU5fQ0FQX1NURCkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJKnN0ZF9pZCA9IHZwZmVfc3RhbmRhcmRzW3ZwZmUtPnN0ZF9pbmRleF0uc3RkX2lkOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB2cGZlX2NhbGN1bGF0ZV9vZmZzZXRzIDogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIGJ1ZmZlcnMgb2Zmc2V0CisgKiBmb3IgdG9wIGFuZCBib3R0b20gZmllbGQKKyAqLworc3RhdGljIHZvaWQgdnBmZV9jYWxjdWxhdGVfb2Zmc2V0cyhzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUpCit7CisJc3RydWN0IHY0bDJfcmVjdCBpbWFnZV93aW47CisKKwl2cGZlX2RiZygyLCB2cGZlLCAidnBmZV9jYWxjdWxhdGVfb2Zmc2V0c1xuIik7CisKKwl2cGZlX2NjZGNfZ2V0X2ltYWdlX3dpbmRvdygmdnBmZS0+Y2NkYywgJmltYWdlX3dpbik7CisJdnBmZS0+ZmllbGRfb2ZmID0gaW1hZ2Vfd2luLmhlaWdodCAqIGltYWdlX3dpbi53aWR0aDsKK30KKworLyoKKyAqIHZwZmVfcXVldWVfc2V0dXAgLSBDYWxsYmFjayBmdW5jdGlvbiBmb3IgYnVmZmVyIHNldHVwLgorICogQHZxOiB2YjJfcXVldWUgcHRyCisgKiBAZm10OiB2NGwyIGZvcm1hdAorICogQG5idWZmZXJzOiBwdHIgdG8gbnVtYmVyIG9mIGJ1ZmZlcnMgcmVxdWVzdGVkIGJ5IGFwcGxpY2F0aW9uCisgKiBAbnBsYW5lczo6IGNvbnRhaW5zIG51bWJlciBvZiBkaXN0aW5jdCB2aWRlbyBwbGFuZXMgbmVlZGVkIHRvIGhvbGQgYSBmcmFtZQorICogQHNpemVzW106IGNvbnRhaW5zIHRoZSBzaXplIChpbiBieXRlcykgb2YgZWFjaCBwbGFuZS4KKyAqIEBhbGxvY19jdHhzOiBwdHIgdG8gYWxsb2NhdGlvbiBjb250ZXh0CisgKgorICogVGhpcyBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiByZXFidWYoKSBpcyBjYWxsZWQgdG8gYWRqdXN0CisgKiB0aGUgYnVmZmVyIGNvdW50IGFuZCBidWZmZXIgc2l6ZQorICovCitzdGF0aWMgaW50IHZwZmVfcXVldWVfc2V0dXAoc3RydWN0IHZiMl9xdWV1ZSAqdnEsCisJCQkgICAgY29uc3Qgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQsCisJCQkgICAgdW5zaWduZWQgaW50ICpuYnVmZmVycywgdW5zaWduZWQgaW50ICpucGxhbmVzLAorCQkJICAgIHVuc2lnbmVkIGludCBzaXplc1tdLCB2b2lkICphbGxvY19jdHhzW10pCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlID0gdmIyX2dldF9kcnZfcHJpdih2cSk7CisKKwlpZiAoZm10ICYmIGZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPCB2cGZlLT5mbXQuZm10LnBpeC5zaXplaW1hZ2UpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZxLT5udW1fYnVmZmVycyArICpuYnVmZmVycyA8IDMpCisJCSpuYnVmZmVycyA9IDMgLSB2cS0+bnVtX2J1ZmZlcnM7CisKKwkqbnBsYW5lcyA9IDE7CisJc2l6ZXNbMF0gPSBmbXQgPyBmbXQtPmZtdC5waXguc2l6ZWltYWdlIDogdnBmZS0+Zm10LmZtdC5waXguc2l6ZWltYWdlOworCWFsbG9jX2N0eHNbMF0gPSB2cGZlLT5hbGxvY19jdHg7CisKKwl2cGZlX2RiZygxLCB2cGZlLAorCQkibmJ1ZmZlcnM9JWQsIHNpemU9JXVcbiIsICpuYnVmZmVycywgc2l6ZXNbMF0pOworCisJLyogQ2FsY3VsYXRlIGZpZWxkIG9mZnNldCAqLworCXZwZmVfY2FsY3VsYXRlX29mZnNldHModnBmZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHZwZmVfYnVmZmVyX3ByZXBhcmUgOiAgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGJ1ZmZlciBwcmVwYXJlCisgKiBAdmI6IHB0ciB0byB2YjJfYnVmZmVyCisgKgorICogVGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGJ1ZmZlciBwcmVwYXJlIHdoZW4gdmIyX3FidWYoKQorICogZnVuY3Rpb24gaXMgY2FsbGVkLiBUaGUgYnVmZmVyIGlzIHByZXBhcmVkIGFuZCB1c2VyIHNwYWNlIHZpcnR1YWwgYWRkcmVzcworICogb3IgdXNlciBhZGRyZXNzIGlzIGNvbnZlcnRlZCBpbnRvICBwaHlzaWNhbCBhZGRyZXNzCisgKi8KK3N0YXRpYyBpbnQgdnBmZV9idWZmZXJfcHJlcGFyZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVlKTsKKworCXZiMl9zZXRfcGxhbmVfcGF5bG9hZCh2YiwgMCwgdnBmZS0+Zm10LmZtdC5waXguc2l6ZWltYWdlKTsKKworCWlmICh2YjJfZ2V0X3BsYW5lX3BheWxvYWQodmIsIDApID4gdmIyX3BsYW5lX3NpemUodmIsIDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZiLT52NGwyX2J1Zi5maWVsZCA9IHZwZmUtPmZtdC5mbXQucGl4LmZpZWxkOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiB2cGZlX2J1ZmZlcl9xdWV1ZSA6IENhbGxiYWNrIGZ1bmN0aW9uIHRvIGFkZCBidWZmZXIgdG8gRE1BIHF1ZXVlCisgKiBAdmI6IHB0ciB0byB2YjJfYnVmZmVyCisgKi8KK3N0YXRpYyB2b2lkIHZwZmVfYnVmZmVyX3F1ZXVlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUgPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOworCXN0cnVjdCB2cGZlX2NhcF9idWZmZXIgKmJ1ZiA9IHRvX3ZwZmVfYnVmZmVyKHZiKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCS8qIGFkZCB0aGUgYnVmZmVyIHRvIHRoZSBETUEgcXVldWUgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmdnBmZS0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZidWYtPmxpc3QsICZ2cGZlLT5kbWFfcXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwZmUtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiB2cGZlX3N0YXJ0X3N0cmVhbWluZyA6IFN0YXJ0cyB0aGUgRE1BIGVuZ2luZSBmb3Igc3RyZWFtaW5nCisgKiBAdmI6IHB0ciB0byB2YjJfYnVmZmVyCisgKiBAY291bnQ6IG51bWJlciBvZiBidWZmZXJzCisgKi8KK3N0YXRpYyBpbnQgdnBmZV9zdGFydF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsKKwlzdHJ1Y3QgdnBmZV9jYXBfYnVmZmVyICpidWYsICp0bXA7CisJc3RydWN0IHZwZmVfc3ViZGV2X2luZm8gKnNkaW5mbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZwZmUtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7CisKKwl2cGZlLT5maWVsZCA9IDA7CisJdnBmZS0+c2VxdWVuY2UgPSAwOworCisJc2RpbmZvID0gdnBmZS0+Y3VycmVudF9zdWJkZXY7CisKKwl2cGZlX2F0dGFjaF9pcnEodnBmZSk7CisKKwlpZiAodnBmZS0+Y2NkYy5jY2RjX2NmZy5pZl90eXBlID09IFZQRkVfUkFXX0JBWUVSKQorCQl2cGZlX2NjZGNfY29uZmlnX3JhdygmdnBmZS0+Y2NkYyk7CisJZWxzZQorCQl2cGZlX2NjZGNfY29uZmlnX3ljYmNyKCZ2cGZlLT5jY2RjKTsKKworCS8qIEdldCB0aGUgbmV4dCBmcmFtZSBmcm9tIHRoZSBidWZmZXIgcXVldWUgKi8KKwl2cGZlLT5uZXh0X2ZybSA9IGxpc3RfZW50cnkodnBmZS0+ZG1hX3F1ZXVlLm5leHQsCisJCQkJICAgIHN0cnVjdCB2cGZlX2NhcF9idWZmZXIsIGxpc3QpOworCXZwZmUtPmN1cl9mcm0gPSB2cGZlLT5uZXh0X2ZybTsKKwkvKiBSZW1vdmUgYnVmZmVyIGZyb20gdGhlIGJ1ZmZlciBxdWV1ZSAqLworCWxpc3RfZGVsKCZ2cGZlLT5jdXJfZnJtLT5saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2cGZlLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOworCisJYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKCZ2cGZlLT5jdXJfZnJtLT52YiwgMCk7CisKKwl2cGZlX3NldF9zZHJfYWRkcigmdnBmZS0+Y2NkYywgKHVuc2lnbmVkIGxvbmcpKGFkZHIpKTsKKworCXZwZmVfcGNyX2VuYWJsZSgmdnBmZS0+Y2NkYywgMSk7CisKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkaW5mby0+c2QsIHZpZGVvLCBzX3N0cmVhbSwgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJdnBmZV9lcnIodnBmZSwgIkVycm9yIGluIGF0dGFjaGluZyBpbnRlcnJ1cHQgaGFuZGxlXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnVmLCB0bXAsICZ2cGZlLT5kbWFfcXVldWUsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmJ1Zi0+bGlzdCk7CisJCXZiMl9idWZmZXJfZG9uZSgmYnVmLT52YiwgVkIyX0JVRl9TVEFURV9RVUVVRUQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiB2cGZlX3N0b3Bfc3RyZWFtaW5nIDogU3RvcCB0aGUgRE1BIGVuZ2luZQorICogQHZxOiBwdHIgdG8gdmIyX3F1ZXVlCisgKgorICogVGhpcyBjYWxsYmFjayBzdG9wcyB0aGUgRE1BIGVuZ2luZSBhbmQgYW55IHJlbWFpbmluZyBidWZmZXJzCisgKiBpbiB0aGUgRE1BIHF1ZXVlIGFyZSByZWxlYXNlZC4KKyAqLworc3RhdGljIHZvaWQgdnBmZV9zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsKKwlzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyAqc2RpbmZvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXZwZmVfcGNyX2VuYWJsZSgmdnBmZS0+Y2NkYywgMCk7CisKKwl2cGZlX2RldGFjaF9pcnEodnBmZSk7CisKKwlzZGluZm8gPSB2cGZlLT5jdXJyZW50X3N1YmRldjsKKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkaW5mby0+c2QsIHZpZGVvLCBzX3N0cmVhbSwgMCk7CisJaWYgKHJldCAmJiByZXQgIT0gLUVOT0lPQ1RMQ01EICYmIHJldCAhPSAtRU5PREVWKQorCQl2cGZlX2RiZygxLCB2cGZlLCAic3RyZWFtIG9mZiBmYWlsZWQgaW4gc3ViZGV2XG4iKTsKKworCS8qIHJlbGVhc2UgYWxsIGFjdGl2ZSBidWZmZXJzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnZwZmUtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7CisJaWYgKHZwZmUtPmN1cl9mcm0gPT0gdnBmZS0+bmV4dF9mcm0pIHsKKwkJdmIyX2J1ZmZlcl9kb25lKCZ2cGZlLT5jdXJfZnJtLT52YiwgVkIyX0JVRl9TVEFURV9FUlJPUik7CisJfSBlbHNlIHsKKwkJaWYgKHZwZmUtPmN1cl9mcm0gIT0gTlVMTCkKKwkJCXZiMl9idWZmZXJfZG9uZSgmdnBmZS0+Y3VyX2ZybS0+dmIsCisJCQkJCVZCMl9CVUZfU1RBVEVfRVJST1IpOworCQlpZiAodnBmZS0+bmV4dF9mcm0gIT0gTlVMTCkKKwkJCXZiMl9idWZmZXJfZG9uZSgmdnBmZS0+bmV4dF9mcm0tPnZiLAorCQkJCQlWQjJfQlVGX1NUQVRFX0VSUk9SKTsKKwl9CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnZwZmUtPmRtYV9xdWV1ZSkpIHsKKwkJdnBmZS0+bmV4dF9mcm0gPSBsaXN0X2VudHJ5KHZwZmUtPmRtYV9xdWV1ZS5uZXh0LAorCQkJCQkJc3RydWN0IHZwZmVfY2FwX2J1ZmZlciwgbGlzdCk7CisJCWxpc3RfZGVsKCZ2cGZlLT5uZXh0X2ZybS0+bGlzdCk7CisJCXZiMl9idWZmZXJfZG9uZSgmdnBmZS0+bmV4dF9mcm0tPnZiLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdnBmZS0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCB2cGZlX2Nyb3BjYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjcm9wKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwl2cGZlX2RiZygyLCB2cGZlLCAidnBmZV9jcm9wY2FwXG4iKTsKKworCWlmICh2cGZlLT5zdGRfaW5kZXggPj0gQVJSQVlfU0laRSh2cGZlX3N0YW5kYXJkcykpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KGNyb3AsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9jcm9wY2FwKSk7CisKKwljcm9wLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWNyb3AtPmRlZnJlY3Qud2lkdGggPSB2cGZlX3N0YW5kYXJkc1t2cGZlLT5zdGRfaW5kZXhdLndpZHRoOworCWNyb3AtPmJvdW5kcy53aWR0aCA9IGNyb3AtPmRlZnJlY3Qud2lkdGg7CisJY3JvcC0+ZGVmcmVjdC5oZWlnaHQgPSB2cGZlX3N0YW5kYXJkc1t2cGZlLT5zdGRfaW5kZXhdLmhlaWdodDsKKwljcm9wLT5ib3VuZHMuaGVpZ2h0ID0gY3JvcC0+ZGVmcmVjdC5oZWlnaHQ7CisJY3JvcC0+cGl4ZWxhc3BlY3QgPSB2cGZlX3N0YW5kYXJkc1t2cGZlLT5zdGRfaW5kZXhdLnBpeGVsYXNwZWN0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3ZwZmVfZ19zZWxlY3Rpb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9zZWxlY3Rpb24gKnMpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCXN3aXRjaCAocy0+dGFyZ2V0KSB7CisJY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUF9CT1VORFM6CisJY2FzZSBWNEwyX1NFTF9UR1RfQ1JPUF9ERUZBVUxUOgorCQlzLT5yLmxlZnQgPSBzLT5yLnRvcCA9IDA7CisJCXMtPnIud2lkdGggPSB2cGZlLT5jcm9wLndpZHRoOworCQlzLT5yLmhlaWdodCA9IHZwZmUtPmNyb3AuaGVpZ2h0OworCQlicmVhazsKKworCWNhc2UgVjRMMl9TRUxfVEdUX0NST1A6CisJCXMtPnIgPSB2cGZlLT5jcm9wOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVuY2xvc2VkX3JlY3RhbmdsZShzdHJ1Y3QgdjRsMl9yZWN0ICphLCBzdHJ1Y3QgdjRsMl9yZWN0ICpiKQoreworCWlmIChhLT5sZWZ0IDwgYi0+bGVmdCB8fCBhLT50b3AgPCBiLT50b3ApCisJCXJldHVybiAwOworCisJaWYgKGEtPmxlZnQgKyBhLT53aWR0aCA+IGItPmxlZnQgKyBiLT53aWR0aCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYS0+dG9wICsgYS0+aGVpZ2h0ID4gYi0+dG9wICsgYi0+aGVpZ2h0KQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50Cit2cGZlX3Nfc2VsZWN0aW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfc2VsZWN0aW9uICpzKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHY0bDJfcmVjdCBjciA9IHZwZmUtPmNyb3A7CisJc3RydWN0IHY0bDJfcmVjdCByID0gcy0+cjsKKworCS8qIElmIHN0cmVhbWluZyBpcyBzdGFydGVkLCByZXR1cm4gZXJyb3IgKi8KKwlpZiAodmIyX2lzX2J1c3koJnZwZmUtPmJ1ZmZlcl9xdWV1ZSkpIHsKKwkJdnBmZV9lcnIodnBmZSwgIiVzIGRldmljZSBidXN5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKHMtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJCQlzLT50YXJnZXQgIT0gVjRMMl9TRUxfVEdUX0NST1ApCisJCXJldHVybiAtRUlOVkFMOworCisJdjRsX2JvdW5kX2FsaWduX2ltYWdlKCZyLndpZHRoLCAwLCBjci53aWR0aCwgMCwKKwkJCSAgICAgICZyLmhlaWdodCwgMCwgY3IuaGVpZ2h0LCAwLCAwKTsKKworCXIubGVmdCA9IGNsYW1wX3QodW5zaWduZWQgaW50LCByLmxlZnQsIDAsIGNyLndpZHRoIC0gci53aWR0aCk7CisJci50b3AgID0gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIHIudG9wLCAwLCBjci5oZWlnaHQgLSByLmhlaWdodCk7CisKKwlpZiAocy0+ZmxhZ3MgJiBWNEwyX1NFTF9GTEFHX0xFICYmICFlbmNsb3NlZF9yZWN0YW5nbGUoJnIsICZzLT5yKSkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlpZiAocy0+ZmxhZ3MgJiBWNEwyX1NFTF9GTEFHX0dFICYmICFlbmNsb3NlZF9yZWN0YW5nbGUoJnMtPnIsICZyKSkKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlzLT5yID0gdnBmZS0+Y3JvcCA9IHI7CisKKwl2cGZlX2NjZGNfc2V0X2ltYWdlX3dpbmRvdygmdnBmZS0+Y2NkYywgJnIsIHZwZmUtPmJwcCk7CisJdnBmZS0+Zm10LmZtdC5waXgud2lkdGggPSByLndpZHRoOworCXZwZmUtPmZtdC5mbXQucGl4LmhlaWdodCA9IHIuaGVpZ2h0OworCXZwZmUtPmZtdC5mbXQucGl4LmJ5dGVzcGVybGluZSA9IHZwZmVfY2NkY19nZXRfbGluZV9sZW5ndGgoJnZwZmUtPmNjZGMpOworCXZwZmUtPmZtdC5mbXQucGl4LnNpemVpbWFnZSA9IHZwZmUtPmZtdC5mbXQucGl4LmJ5dGVzcGVybGluZSAqCisJCQkJCQl2cGZlLT5mbXQuZm10LnBpeC5oZWlnaHQ7CisKKwl2cGZlX2RiZygxLCB2cGZlLCAiY3JvcHBlZCAoJWQsJWQpLyVkeCVkIG9mICVkeCVkXG4iLAorCQkgci5sZWZ0LCByLnRvcCwgci53aWR0aCwgci5oZWlnaHQsIGNyLndpZHRoLCBjci5oZWlnaHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIHZwZmVfaW9jdGxfZGVmYXVsdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgICBib29sIHZhbGlkX3ByaW8sIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKnBhcmFtKQoreworCXN0cnVjdCB2cGZlX2RldmljZSAqdnBmZSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJaW50IHJldDsKKworCXZwZmVfZGJnKDIsIHZwZmUsICJ2cGZlX2lvY3RsX2RlZmF1bHRcbiIpOworCisJaWYgKCF2YWxpZF9wcmlvKSB7CisJCXZwZmVfZXJyKHZwZmUsICIlcyBkZXZpY2UgYnVzeVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIElmIHN0cmVhbWluZyBpcyBzdGFydGVkLCByZXR1cm4gZXJyb3IgKi8KKwlpZiAodmIyX2lzX2J1c3koJnZwZmUtPmJ1ZmZlcl9xdWV1ZSkpIHsKKwkJdnBmZV9lcnIodnBmZSwgIiVzIGRldmljZSBidXN5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZJRElPQ19BTTQzN1hfQ0NEQ19DRkc6CisJCXJldCA9IHZwZmVfY2NkY19zZXRfcGFyYW1zKCZ2cGZlLT5jY2RjLCAodm9pZCBfX3VzZXIgKilwYXJhbSk7CisJCWlmIChyZXQpIHsKKwkJCXZwZmVfZGJnKDIsIHZwZmUsCisJCQkJIkVycm9yIHNldHRpbmcgcGFyYW1ldGVycyBpbiBDQ0RDXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJcmV0ID0gdnBmZV9nZXRfY2NkY19pbWFnZV9mb3JtYXQodnBmZSwKKwkJCQkJCSAmdnBmZS0+Zm10KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXZwZmVfZGJnKDIsIHZwZmUsCisJCQkJIkludmFsaWQgaW1hZ2UgZm9ybWF0IGF0IENDRENcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9UVFk7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmIyX29wcyB2cGZlX3ZpZGVvX3FvcHMgPSB7CisJLndhaXRfcHJlcGFyZQkJPSB2YjJfb3BzX3dhaXRfcHJlcGFyZSwKKwkud2FpdF9maW5pc2gJCT0gdmIyX29wc193YWl0X2ZpbmlzaCwKKwkucXVldWVfc2V0dXAJCT0gdnBmZV9xdWV1ZV9zZXR1cCwKKwkuYnVmX3ByZXBhcmUJCT0gdnBmZV9idWZmZXJfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlCQk9IHZwZmVfYnVmZmVyX3F1ZXVlLAorCS5zdGFydF9zdHJlYW1pbmcJPSB2cGZlX3N0YXJ0X3N0cmVhbWluZywKKwkuc3RvcF9zdHJlYW1pbmcJCT0gdnBmZV9zdG9wX3N0cmVhbWluZywKK307CisKKy8qIHZwZmUgY2FwdHVyZSBkcml2ZXIgZmlsZSBvcGVyYXRpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZwZmVfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdnBmZV9vcGVuLAorCS5yZWxlYXNlCT0gdnBmZV9yZWxlYXNlLAorCS5yZWFkCQk9IHZiMl9mb3BfcmVhZCwKKwkucG9sbAkJPSB2YjJfZm9wX3BvbGwsCisJLnVubG9ja2VkX2lvY3RsCT0gdmlkZW9faW9jdGwyLAorCS5tbWFwCQk9IHZiMl9mb3BfbW1hcCwKK307CisKKy8qIHZwZmUgY2FwdHVyZSBpb2N0bCBvcGVyYXRpb25zICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHZwZmVfaW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAJCT0gdnBmZV9xdWVyeWNhcCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAJPSB2cGZlX2VudW1fZm10LAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcAkJPSB2cGZlX2dfZm10LAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcAkJPSB2cGZlX3NfZm10LAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwCQk9IHZwZmVfdHJ5X2ZtdCwKKworCS52aWRpb2NfZW51bV9mcmFtZXNpemVzCQk9IHZwZmVfZW51bV9zaXplLAorCisJLnZpZGlvY19lbnVtX2lucHV0CQk9IHZwZmVfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQJCQk9IHZwZmVfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQJCQk9IHZwZmVfc19pbnB1dCwKKworCS52aWRpb2NfcXVlcnlzdGQJCT0gdnBmZV9xdWVyeXN0ZCwKKwkudmlkaW9jX3Nfc3RkCQkJPSB2cGZlX3Nfc3RkLAorCS52aWRpb2NfZ19zdGQJCQk9IHZwZmVfZ19zdGQsCisKKwkudmlkaW9jX3JlcWJ1ZnMJCQk9IHZiMl9pb2N0bF9yZXFidWZzLAorCS52aWRpb2NfY3JlYXRlX2J1ZnMJCT0gdmIyX2lvY3RsX2NyZWF0ZV9idWZzLAorCS52aWRpb2NfcHJlcGFyZV9idWYJCT0gdmIyX2lvY3RsX3ByZXBhcmVfYnVmLAorCS52aWRpb2NfcXVlcnlidWYJCT0gdmIyX2lvY3RsX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZgkJCT0gdmIyX2lvY3RsX3FidWYsCisJLnZpZGlvY19kcWJ1ZgkJCT0gdmIyX2lvY3RsX2RxYnVmLAorCS52aWRpb2NfZXhwYnVmCQkJPSB2YjJfaW9jdGxfZXhwYnVmLAorCS52aWRpb2Nfc3RyZWFtb24JCT0gdmIyX2lvY3RsX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmCQk9IHZiMl9pb2N0bF9zdHJlYW1vZmYsCisKKwkudmlkaW9jX2xvZ19zdGF0dXMJCT0gdjRsMl9jdHJsX2xvZ19zdGF0dXMsCisJLnZpZGlvY19zdWJzY3JpYmVfZXZlbnQJCT0gdjRsMl9jdHJsX3N1YnNjcmliZV9ldmVudCwKKwkudmlkaW9jX3Vuc3Vic2NyaWJlX2V2ZW50CT0gdjRsMl9ldmVudF91bnN1YnNjcmliZSwKKworCS52aWRpb2NfY3JvcGNhcAkJCT0gdnBmZV9jcm9wY2FwLAorCS52aWRpb2NfZ19zZWxlY3Rpb24JCT0gdnBmZV9nX3NlbGVjdGlvbiwKKwkudmlkaW9jX3Nfc2VsZWN0aW9uCQk9IHZwZmVfc19zZWxlY3Rpb24sCisKKwkudmlkaW9jX2RlZmF1bHQJCQk9IHZwZmVfaW9jdGxfZGVmYXVsdCwKK307CisKK3N0YXRpYyBpbnQKK3ZwZmVfYXN5bmNfYm91bmQoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyLAorCQkgc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYsCisJCSBzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYgKmFzZCkKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUgPSBjb250YWluZXJfb2Yobm90aWZpZXItPnY0bDJfZGV2LAorCQkJCQkgICAgICAgc3RydWN0IHZwZmVfZGV2aWNlLCB2NGwyX2Rldik7CisJc3RydWN0IHY0bDJfc3ViZGV2X21idXNfY29kZV9lbnVtIG1idXNfY29kZTsKKwlzdHJ1Y3QgdnBmZV9zdWJkZXZfaW5mbyAqc2RpbmZvOworCWJvb2wgZm91bmQgPSBmYWxzZTsKKwlpbnQgaSwgajsKKworCXZwZmVfZGJnKDEsIHZwZmUsICJ2cGZlX2FzeW5jX2JvdW5kXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZwZmUtPmNmZy0+YXNkKTsgaSsrKSB7CisJCXNkaW5mbyA9ICZ2cGZlLT5jZmctPnN1Yl9kZXZzW2ldOworCisJCWlmICghc3RyY21wKHNkaW5mby0+bmFtZSwgc3ViZGV2LT5uYW1lKSkgeworCQkJdnBmZS0+c2RbaV0gPSBzdWJkZXY7CisJCQl2cGZlX2luZm8odnBmZSwKKwkJCQkgInY0bDIgc3ViIGRldmljZSAlcyByZWdpc3RlcmVkXG4iLAorCQkJCSBzdWJkZXYtPm5hbWUpOworCQkJdnBmZS0+c2RbaV0tPmdycF9pZCA9CisJCQkJCXNkaW5mby0+Z3JwX2lkOworCQkJLyogdXBkYXRlIHR2bm9ybXMgZnJvbSB0aGUgc3ViIGRldmljZXMgKi8KKwkJCWZvciAoaiA9IDA7IGogPCAxOyBqKyspCisJCQkJdnBmZS0+dmlkZW9fZGV2LT50dm5vcm1zIHw9CisJCQkJCXNkaW5mby0+aW5wdXRzW2pdLnN0ZDsKKworCQkJZm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kKSB7CisJCXZwZmVfaW5mbyh2cGZlLCAic3ViIGRldmljZSAoJXMpIG5vdCBtYXRjaGVkXG4iLCBzdWJkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBzZXR1cCB0aGUgc3VwcG9ydGVkIGZvcm1hdHMgJiBpbmRleGVzICovCisJZm9yIChqID0gMCwgaSA9IDA7IDsgKytqKSB7CisJCXN0cnVjdCB2cGZlX2ZtdCAqZm10OworCQlpbnQgcmV0OworCisJCW1lbXNldCgmbWJ1c19jb2RlLCAwLCBzaXplb2YobWJ1c19jb2RlKSk7CisJCW1idXNfY29kZS5pbmRleCA9IGo7CisJCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc3ViZGV2LCBwYWQsIGVudW1fbWJ1c19jb2RlLAorCQkJICAgICAgIE5VTEwsICZtYnVzX2NvZGUpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisKKwkJZm10ID0gZmluZF9mb3JtYXRfYnlfY29kZShtYnVzX2NvZGUuY29kZSk7CisJCWlmICghZm10KQorCQkJY29udGludWU7CisKKwkJZm10LT5zdXBwb3J0ZWQgPSB0cnVlOworCQlmbXQtPmluZGV4ID0gaSsrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZwZmVfcHJvYmVfY29tcGxldGUoc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXY7CisJc3RydWN0IHZiMl9xdWV1ZSAqcTsKKwlpbnQgZXJyOworCisJc3Bpbl9sb2NrX2luaXQoJnZwZmUtPmRtYV9xdWV1ZV9sb2NrKTsKKwltdXRleF9pbml0KCZ2cGZlLT5sb2NrKTsKKworCXZwZmUtPmZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJLyogc2V0IGZpcnN0IHN1YiBkZXZpY2UgYXMgY3VycmVudCBvbmUgKi8KKwl2cGZlLT5jdXJyZW50X3N1YmRldiA9ICZ2cGZlLT5jZmctPnN1Yl9kZXZzWzBdOworCXZwZmUtPnY0bDJfZGV2LmN0cmxfaGFuZGxlciA9IHZwZmUtPnNkWzBdLT5jdHJsX2hhbmRsZXI7CisKKwllcnIgPSB2cGZlX3NldF9pbnB1dCh2cGZlLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIHByb2JlX291dDsKKworCS8qIEluaXRpYWxpemUgdmlkZW9idWYyIHF1ZXVlIGFzIHBlciB0aGUgYnVmZmVyIHR5cGUgKi8KKwl2cGZlLT5hbGxvY19jdHggPSB2YjJfZG1hX2NvbnRpZ19pbml0X2N0eCh2cGZlLT5wZGV2KTsKKwlpZiAoSVNfRVJSKHZwZmUtPmFsbG9jX2N0eCkpIHsKKwkJdnBmZV9lcnIodnBmZSwgIkZhaWxlZCB0byBnZXQgdGhlIGNvbnRleHRcbiIpOworCQllcnIgPSBQVFJfRVJSKHZwZmUtPmFsbG9jX2N0eCk7CisJCWdvdG8gcHJvYmVfb3V0OworCX0KKworCXEgPSAmdnBmZS0+YnVmZmVyX3F1ZXVlOworCXEtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJcS0+aW9fbW9kZXMgPSBWQjJfTU1BUCB8IFZCMl9ETUFCVUYgfCBWQjJfUkVBRDsKKwlxLT5kcnZfcHJpdiA9IHZwZmU7CisJcS0+b3BzID0gJnZwZmVfdmlkZW9fcW9wczsKKwlxLT5tZW1fb3BzID0gJnZiMl9kbWFfY29udGlnX21lbW9wczsKKwlxLT5idWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0IHZwZmVfY2FwX2J1ZmZlcik7CisJcS0+dGltZXN0YW1wX2ZsYWdzID0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDOworCXEtPmxvY2sgPSAmdnBmZS0+bG9jazsKKwlxLT5taW5fYnVmZmVyc19uZWVkZWQgPSAxOworCisJZXJyID0gdmIyX3F1ZXVlX2luaXQocSk7CisJaWYgKGVycikgeworCQl2cGZlX2Vycih2cGZlLCAidmIyX3F1ZXVlX2luaXQoKSBmYWlsZWRcbiIpOworCQl2YjJfZG1hX2NvbnRpZ19jbGVhbnVwX2N0eCh2cGZlLT5hbGxvY19jdHgpOworCQlnb3RvIHByb2JlX291dDsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmdnBmZS0+ZG1hX3F1ZXVlKTsKKworCXZkZXYgPSB2cGZlLT52aWRlb19kZXY7CisJc3RybGNweSh2ZGV2LT5uYW1lLCBWUEZFX01PRFVMRV9OQU1FLCBzaXplb2YodmRldi0+bmFtZSkpOworCXZkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwl2ZGV2LT5mb3BzID0gJnZwZmVfZm9wczsKKwl2ZGV2LT5pb2N0bF9vcHMgPSAmdnBmZV9pb2N0bF9vcHM7CisJdmRldi0+djRsMl9kZXYgPSAmdnBmZS0+djRsMl9kZXY7CisJdmRldi0+dmZsX2RpciA9IFZGTF9ESVJfUlg7CisJdmRldi0+cXVldWUgPSBxOworCXZkZXYtPmxvY2sgPSAmdnBmZS0+bG9jazsKKwl2aWRlb19zZXRfZHJ2ZGF0YSh2ZGV2LCB2cGZlKTsKKwllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodnBmZS0+dmlkZW9fZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CisJaWYgKGVycikgeworCQl2cGZlX2Vycih2cGZlLAorCQkJIlVuYWJsZSB0byByZWdpc3RlciB2aWRlbyBkZXZpY2UuXG4iKTsKKwkJZ290byBwcm9iZV9vdXQ7CisJfQorCisJcmV0dXJuIDA7CisKK3Byb2JlX291dDoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ2cGZlLT52NGwyX2Rldik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB2cGZlX2FzeW5jX2NvbXBsZXRlKHN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICpub3RpZmllcikKK3sKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUgPSBjb250YWluZXJfb2Yobm90aWZpZXItPnY0bDJfZGV2LAorCQkJCQlzdHJ1Y3QgdnBmZV9kZXZpY2UsIHY0bDJfZGV2KTsKKworCXJldHVybiB2cGZlX3Byb2JlX2NvbXBsZXRlKHZwZmUpOworfQorCitzdGF0aWMgc3RydWN0IHZwZmVfY29uZmlnICoKK3ZwZmVfZ2V0X3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICplbmRwb2ludCA9IE5VTEwsICpyZW0gPSBOVUxMOworCXN0cnVjdCB2NGwyX29mX2VuZHBvaW50IGJ1c19jZmc7CisJc3RydWN0IHZwZmVfc3ViZGV2X2luZm8gKnNkaW5mbzsKKwlzdHJ1Y3QgdnBmZV9jb25maWcgKnBkYXRhOworCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZXJyOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAidnBmZV9nZXRfcGRhdGFcbiIpOworCisJaWYgKCFJU19FTkFCTEVEKENPTkZJR19PRikgfHwgIXBkZXYtPmRldi5vZl9ub2RlKQorCQlyZXR1cm4gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlwZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGkgPSAwOyA7IGkrKykgeworCQllbmRwb2ludCA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkJICAgICAgZW5kcG9pbnQpOworCQlpZiAoIWVuZHBvaW50KQorCQkJYnJlYWs7CisKKwkJc2RpbmZvID0gJnBkYXRhLT5zdWJfZGV2c1tpXTsKKwkJc2RpbmZvLT5ncnBfaWQgPSAwOworCisJCS8qIHdlIG9ubHkgc3VwcG9ydCBjYW1lcmEgKi8KKwkJc2RpbmZvLT5pbnB1dHNbMF0uaW5kZXggPSBpOworCQlzdHJjcHkoc2RpbmZvLT5pbnB1dHNbMF0ubmFtZSwgIkNhbWVyYSIpOworCQlzZGluZm8tPmlucHV0c1swXS50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKwkJc2RpbmZvLT5pbnB1dHNbMF0uc3RkID0gVjRMMl9TVERfQUxMOworCQlzZGluZm8tPmlucHV0c1swXS5jYXBhYmlsaXRpZXMgPSBWNEwyX0lOX0NBUF9TVEQ7CisKKwkJc2RpbmZvLT5jYW5fcm91dGUgPSAwOworCQlzZGluZm8tPnJvdXRlcyA9IE5VTEw7CisKKwkJb2ZfcHJvcGVydHlfcmVhZF91MzIoZW5kcG9pbnQsICJ0aSxhbTQzN3gtdnBmZS1pbnRlcmZhY2UiLAorCQkJCSAgICAgJnNkaW5mby0+dnBmZV9wYXJhbS5pZl90eXBlKTsKKwkJaWYgKHNkaW5mby0+dnBmZV9wYXJhbS5pZl90eXBlIDwgMCB8fAorCQkJc2RpbmZvLT52cGZlX3BhcmFtLmlmX3R5cGUgPiA0KSB7CisJCQlzZGluZm8tPnZwZmVfcGFyYW0uaWZfdHlwZSA9IFZQRkVfUkFXX0JBWUVSOworCQl9CisKKwkJZXJyID0gdjRsMl9vZl9wYXJzZV9lbmRwb2ludChlbmRwb2ludCwgJmJ1c19jZmcpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgcGFyc2UgdGhlIGVuZHBvaW50XG4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCXNkaW5mby0+dnBmZV9wYXJhbS5idXNfd2lkdGggPSBidXNfY2ZnLmJ1cy5wYXJhbGxlbC5idXNfd2lkdGg7CisKKwkJaWYgKHNkaW5mby0+dnBmZV9wYXJhbS5idXNfd2lkdGggPCA4IHx8CisJCQlzZGluZm8tPnZwZmVfcGFyYW0uYnVzX3dpZHRoID4gMTYpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkludmFsaWQgYnVzIHdpZHRoLlxuIik7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlmbGFncyA9IGJ1c19jZmcuYnVzLnBhcmFsbGVsLmZsYWdzOworCisJCWlmIChmbGFncyAmIFY0TDJfTUJVU19IU1lOQ19BQ1RJVkVfSElHSCkKKwkJCXNkaW5mby0+dnBmZV9wYXJhbS5oZHBvbCA9IDE7CisKKwkJaWYgKGZsYWdzICYgVjRMMl9NQlVTX1ZTWU5DX0FDVElWRV9ISUdIKQorCQkJc2RpbmZvLT52cGZlX3BhcmFtLnZkcG9sID0gMTsKKworCQlyZW0gPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVuZHBvaW50KTsKKwkJaWYgKCFyZW0pIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlJlbW90ZSBkZXZpY2UgYXQgJXMgbm90IGZvdW5kXG4iLAorCQkJCWVuZHBvaW50LT5mdWxsX25hbWUpOworCQkJZ290byBkb25lOworCQl9CisKKwkJc3RybmNweShzZGluZm8tPm5hbWUsIHJlbS0+bmFtZSwgc2l6ZW9mKHNkaW5mby0+bmFtZSkpOworCisJCXBkYXRhLT5hc2RbaV0gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwKKwkJCQkJICAgICBzaXplb2Yoc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2KSwKKwkJCQkJICAgICBHRlBfS0VSTkVMKTsKKwkJcGRhdGEtPmFzZFtpXS0+bWF0Y2hfdHlwZSA9IFY0TDJfQVNZTkNfTUFUQ0hfT0Y7CisJCXBkYXRhLT5hc2RbaV0tPm1hdGNoLm9mLm5vZGUgPSByZW07CisJCW9mX25vZGVfcHV0KGVuZHBvaW50KTsKKwkJb2Zfbm9kZV9wdXQocmVtKTsKKwl9CisKKwlvZl9ub2RlX3B1dChlbmRwb2ludCk7CisJcmV0dXJuIHBkYXRhOworCitkb25lOgorCW9mX25vZGVfcHV0KGVuZHBvaW50KTsKKwlvZl9ub2RlX3B1dChyZW0pOworCXJldHVybiBOVUxMOworfQorCisvKgorICogdnBmZV9wcm9iZSA6IFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBkZXZpY2UgZW50cmllcyBieSByZWdpc3RlcgorICogaXRzZWxmIHRvIHRoZSBWNEwyIGRyaXZlciBhbmQgaW5pdGlhbGl6ZXMgZmllbGRzIG9mIGVhY2gKKyAqIGRldmljZSBvYmplY3RzCisgKi8KK3N0YXRpYyBpbnQgdnBmZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB2cGZlX2NvbmZpZyAqdnBmZV9jZmcgPSB2cGZlX2dldF9wZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmU7CisJc3RydWN0IHZwZmVfY2NkYyAqY2NkYzsKKwlzdHJ1Y3QgcmVzb3VyY2UJKnJlczsKKwlpbnQgcmV0OworCisJaWYgKCF2cGZlX2NmZykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBwbGF0Zm9ybSBkYXRhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdnBmZSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnZwZmUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZwZmUpCisJCXJldHVybiAtRU5PTUVNOworCisJdnBmZS0+cGRldiA9ICZwZGV2LT5kZXY7CisJdnBmZS0+Y2ZnID0gdnBmZV9jZmc7CisJY2NkYyA9ICZ2cGZlLT5jY2RjOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwljY2RjLT5jY2RjX2NmZy5iYXNlX2FkZHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKGNjZGMtPmNjZGNfY2ZnLmJhc2VfYWRkcikpCisJCXJldHVybiBQVFJfRVJSKGNjZGMtPmNjZGNfY2ZnLmJhc2VfYWRkcik7CisKKwl2cGZlLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmICh2cGZlLT5pcnEgPD0gMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKHZwZmUtPnBkZXYsIHZwZmUtPmlycSwgdnBmZV9pc3IsIDAsCisJCQkgICAgICAgInZwZmVfY2FwdHVyZTAiLCB2cGZlKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byByZXF1ZXN0IGludGVycnVwdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZwZmUtPnZpZGVvX2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmICghdnBmZS0+dmlkZW9fZGV2KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSB2aWRlbyBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2LCAmdnBmZS0+djRsMl9kZXYpOworCWlmIChyZXQpIHsKKwkJdnBmZV9lcnIodnBmZSwKKwkJCSJVbmFibGUgdG8gcmVnaXN0ZXIgdjRsMiBkZXZpY2UuXG4iKTsKKwkJZ290byBwcm9iZV9vdXRfdmlkZW9fcmVsZWFzZTsKKwl9CisKKwkvKiBzZXQgdGhlIGRyaXZlciBkYXRhIGluIHBsYXRmb3JtIGRldmljZSAqLworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHZwZmUpOworCS8qIEVuYWJsaW5nIG1vZHVsZSBmdW5jdGlvbmFsIGNsb2NrICovCisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisKKwkvKiBmb3Igbm93IGp1c3QgZW5hYmxlIGl0IGhlcmUgaW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgb3BlbiAqLworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7CisKKwl2cGZlX2NjZGNfY29uZmlnX2RlZmF1bHRzKGNjZGMpOworCisJcG1fcnVudGltZV9wdXRfc3luYygmcGRldi0+ZGV2KTsKKworCXZwZmUtPnNkID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgdjRsMl9zdWJkZXYgKikgKgorCQkJCUFSUkFZX1NJWkUodnBmZS0+Y2ZnLT5hc2QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXZwZmUtPnNkKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gcHJvYmVfb3V0X3Y0bDJfdW5yZWdpc3RlcjsKKwl9CisKKwl2cGZlLT5ub3RpZmllci5zdWJkZXZzID0gdnBmZS0+Y2ZnLT5hc2Q7CisJdnBmZS0+bm90aWZpZXIubnVtX3N1YmRldnMgPSBBUlJBWV9TSVpFKHZwZmUtPmNmZy0+YXNkKTsKKwl2cGZlLT5ub3RpZmllci5ib3VuZCA9IHZwZmVfYXN5bmNfYm91bmQ7CisJdnBmZS0+bm90aWZpZXIuY29tcGxldGUgPSB2cGZlX2FzeW5jX2NvbXBsZXRlOworCXJldCA9IHY0bDJfYXN5bmNfbm90aWZpZXJfcmVnaXN0ZXIoJnZwZmUtPnY0bDJfZGV2LAorCQkJCQkJJnZwZmUtPm5vdGlmaWVyKTsKKwlpZiAocmV0KSB7CisJCXZwZmVfZXJyKHZwZmUsICJFcnJvciByZWdpc3RlcmluZyBhc3luYyBub3RpZmllclxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gcHJvYmVfb3V0X3Y0bDJfdW5yZWdpc3RlcjsKKwl9CisKKwlyZXR1cm4gMDsKKworcHJvYmVfb3V0X3Y0bDJfdW5yZWdpc3RlcjoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ2cGZlLT52NGwyX2Rldik7Citwcm9iZV9vdXRfdmlkZW9fcmVsZWFzZToKKwlpZiAoIXZpZGVvX2lzX3JlZ2lzdGVyZWQodnBmZS0+dmlkZW9fZGV2KSkKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodnBmZS0+dmlkZW9fZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogdnBmZV9yZW1vdmUgOiBJdCB1bi1yZWdpc3RlciBkZXZpY2UgZnJvbSBWNEwyIGRyaXZlcgorICovCitzdGF0aWMgaW50IHZwZmVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwl2cGZlX2RiZygyLCB2cGZlLCAidnBmZV9yZW1vdmVcbiIpOworCisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCisJdjRsMl9hc3luY19ub3RpZmllcl91bnJlZ2lzdGVyKCZ2cGZlLT5ub3RpZmllcik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdnBmZS0+djRsMl9kZXYpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZwZmUtPnZpZGVvX2Rldik7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorCitzdGF0aWMgdm9pZCB2cGZlX3NhdmVfY29udGV4dChzdHJ1Y3QgdnBmZV9jY2RjICpjY2RjKQoreworCWNjZGMtPmNjZGNfY3R4W1ZQRkVfUENSID4+IDJdID0gdnBmZV9yZWdfcmVhZChjY2RjLCBWUEZFX1BDUik7CisJY2NkYy0+Y2NkY19jdHhbVlBGRV9TWU5NT0RFID4+IDJdID0gdnBmZV9yZWdfcmVhZChjY2RjLCBWUEZFX1NZTk1PREUpOworCWNjZGMtPmNjZGNfY3R4W1ZQRkVfU0RPRlNUID4+IDJdID0gdnBmZV9yZWdfcmVhZChjY2RjLCBWUEZFX1NET0ZTVCk7CisJY2NkYy0+Y2NkY19jdHhbVlBGRV9TRFJfQUREUiA+PiAyXSA9IHZwZmVfcmVnX3JlYWQoY2NkYywgVlBGRV9TRFJfQUREUik7CisJY2NkYy0+Y2NkY19jdHhbVlBGRV9DTEFNUCA+PiAyXSA9IHZwZmVfcmVnX3JlYWQoY2NkYywgVlBGRV9DTEFNUCk7CisJY2NkYy0+Y2NkY19jdHhbVlBGRV9EQ1NVQiA+PiAyXSA9IHZwZmVfcmVnX3JlYWQoY2NkYywgVlBGRV9EQ1NVQik7CisJY2NkYy0+Y2NkY19jdHhbVlBGRV9DT0xQVE4gPj4gMl0gPSB2cGZlX3JlZ19yZWFkKGNjZGMsIFZQRkVfQ09MUFROKTsKKwljY2RjLT5jY2RjX2N0eFtWUEZFX0JMS0NNUCA+PiAyXSA9IHZwZmVfcmVnX3JlYWQoY2NkYywgVlBGRV9CTEtDTVApOworCWNjZGMtPmNjZGNfY3R4W1ZQRkVfVkRJTlQgPj4gMl0gPSB2cGZlX3JlZ19yZWFkKGNjZGMsIFZQRkVfVkRJTlQpOworCWNjZGMtPmNjZGNfY3R4W1ZQRkVfQUxBVyA+PiAyXSA9IHZwZmVfcmVnX3JlYWQoY2NkYywgVlBGRV9BTEFXKTsKKwljY2RjLT5jY2RjX2N0eFtWUEZFX1JFQzY1NklGID4+IDJdID0gdnBmZV9yZWdfcmVhZChjY2RjLCBWUEZFX1JFQzY1NklGKTsKKwljY2RjLT5jY2RjX2N0eFtWUEZFX0NDRENGRyA+PiAyXSA9IHZwZmVfcmVnX3JlYWQoY2NkYywgVlBGRV9DQ0RDRkcpOworCWNjZGMtPmNjZGNfY3R4W1ZQRkVfQ1VMTElORyA+PiAyXSA9IHZwZmVfcmVnX3JlYWQoY2NkYywgVlBGRV9DVUxMSU5HKTsKKwljY2RjLT5jY2RjX2N0eFtWUEZFX0hEX1ZEX1dJRCA+PiAyXSA9IHZwZmVfcmVnX3JlYWQoY2NkYywKKwkJCQkJCQkgICAgVlBGRV9IRF9WRF9XSUQpOworCWNjZGMtPmNjZGNfY3R4W1ZQRkVfUElYX0xJTkVTID4+IDJdID0gdnBmZV9yZWdfcmVhZChjY2RjLAorCQkJCQkJCSAgICBWUEZFX1BJWF9MSU5FUyk7CisJY2NkYy0+Y2NkY19jdHhbVlBGRV9IT1JaX0lORk8gPj4gMl0gPSB2cGZlX3JlZ19yZWFkKGNjZGMsCisJCQkJCQkJICAgIFZQRkVfSE9SWl9JTkZPKTsKKwljY2RjLT5jY2RjX2N0eFtWUEZFX1ZFUlRfU1RBUlQgPj4gMl0gPSB2cGZlX3JlZ19yZWFkKGNjZGMsCisJCQkJCQkJICAgICBWUEZFX1ZFUlRfU1RBUlQpOworCWNjZGMtPmNjZGNfY3R4W1ZQRkVfVkVSVF9MSU5FUyA+PiAyXSA9IHZwZmVfcmVnX3JlYWQoY2NkYywKKwkJCQkJCQkgICAgIFZQRkVfVkVSVF9MSU5FUyk7CisJY2NkYy0+Y2NkY19jdHhbVlBGRV9IU0laRV9PRkYgPj4gMl0gPSB2cGZlX3JlZ19yZWFkKGNjZGMsCisJCQkJCQkJICAgIFZQRkVfSFNJWkVfT0ZGKTsKK30KKworc3RhdGljIGludCB2cGZlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgdnBmZV9kZXZpY2UgKnZwZmUgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdnBmZV9jY2RjICpjY2RjID0gJnZwZmUtPmNjZGM7CisKKwkvKiBpZiBzdHJlYW1pbmcgaGFzIG5vdCBzdGFydGVkIHdlIGRvbid0IGNhcmUgKi8KKwlpZiAoIXZiMl9zdGFydF9zdHJlYW1pbmdfY2FsbGVkKCZ2cGZlLT5idWZmZXJfcXVldWUpKQorCQlyZXR1cm4gMDsKKworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsKKwl2cGZlX2NvbmZpZ19lbmFibGUoY2NkYywgMSk7CisKKwkvKiBTYXZlIFZQRkUgY29udGV4dCAqLworCXZwZmVfc2F2ZV9jb250ZXh0KGNjZGMpOworCisJLyogRGlzYWJsZSBDQ0RDICovCisJdnBmZV9wY3JfZW5hYmxlKGNjZGMsIDApOworCXZwZmVfY29uZmlnX2VuYWJsZShjY2RjLCAwKTsKKworCS8qIERpc2FibGUgYm90aCBtYXN0ZXIgYW5kIHNsYXZlIGNsb2NrICovCisJcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOworCisJLyogU2VsZWN0IHNsZWVwIHBpbiBzdGF0ZSAqLworCXBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdnBmZV9yZXN0b3JlX2NvbnRleHQoc3RydWN0IHZwZmVfY2NkYyAqY2NkYykKK3sKKwl2cGZlX3JlZ193cml0ZShjY2RjLCBjY2RjLT5jY2RjX2N0eFtWUEZFX1NZTk1PREUgPj4gMl0sIFZQRkVfU1lOTU9ERSk7CisJdnBmZV9yZWdfd3JpdGUoY2NkYywgY2NkYy0+Y2NkY19jdHhbVlBGRV9DVUxMSU5HID4+IDJdLCBWUEZFX0NVTExJTkcpOworCXZwZmVfcmVnX3dyaXRlKGNjZGMsIGNjZGMtPmNjZGNfY3R4W1ZQRkVfU0RPRlNUID4+IDJdLCBWUEZFX1NET0ZTVCk7CisJdnBmZV9yZWdfd3JpdGUoY2NkYywgY2NkYy0+Y2NkY19jdHhbVlBGRV9TRFJfQUREUiA+PiAyXSwgVlBGRV9TRFJfQUREUik7CisJdnBmZV9yZWdfd3JpdGUoY2NkYywgY2NkYy0+Y2NkY19jdHhbVlBGRV9DTEFNUCA+PiAyXSwgVlBGRV9DTEFNUCk7CisJdnBmZV9yZWdfd3JpdGUoY2NkYywgY2NkYy0+Y2NkY19jdHhbVlBGRV9EQ1NVQiA+PiAyXSwgVlBGRV9EQ1NVQik7CisJdnBmZV9yZWdfd3JpdGUoY2NkYywgY2NkYy0+Y2NkY19jdHhbVlBGRV9DT0xQVE4gPj4gMl0sIFZQRkVfQ09MUFROKTsKKwl2cGZlX3JlZ193cml0ZShjY2RjLCBjY2RjLT5jY2RjX2N0eFtWUEZFX0JMS0NNUCA+PiAyXSwgVlBGRV9CTEtDTVApOworCXZwZmVfcmVnX3dyaXRlKGNjZGMsIGNjZGMtPmNjZGNfY3R4W1ZQRkVfVkRJTlQgPj4gMl0sIFZQRkVfVkRJTlQpOworCXZwZmVfcmVnX3dyaXRlKGNjZGMsIGNjZGMtPmNjZGNfY3R4W1ZQRkVfQUxBVyA+PiAyXSwgVlBGRV9BTEFXKTsKKwl2cGZlX3JlZ193cml0ZShjY2RjLCBjY2RjLT5jY2RjX2N0eFtWUEZFX1JFQzY1NklGID4+IDJdLCBWUEZFX1JFQzY1NklGKTsKKwl2cGZlX3JlZ193cml0ZShjY2RjLCBjY2RjLT5jY2RjX2N0eFtWUEZFX0NDRENGRyA+PiAyXSwgVlBGRV9DQ0RDRkcpOworCXZwZmVfcmVnX3dyaXRlKGNjZGMsIGNjZGMtPmNjZGNfY3R4W1ZQRkVfUENSID4+IDJdLCBWUEZFX1BDUik7CisJdnBmZV9yZWdfd3JpdGUoY2NkYywgY2NkYy0+Y2NkY19jdHhbVlBGRV9IRF9WRF9XSUQgPj4gMl0sCisJCQkJCQlWUEZFX0hEX1ZEX1dJRCk7CisJdnBmZV9yZWdfd3JpdGUoY2NkYywgY2NkYy0+Y2NkY19jdHhbVlBGRV9QSVhfTElORVMgPj4gMl0sCisJCQkJCQlWUEZFX1BJWF9MSU5FUyk7CisJdnBmZV9yZWdfd3JpdGUoY2NkYywgY2NkYy0+Y2NkY19jdHhbVlBGRV9IT1JaX0lORk8gPj4gMl0sCisJCQkJCQlWUEZFX0hPUlpfSU5GTyk7CisJdnBmZV9yZWdfd3JpdGUoY2NkYywgY2NkYy0+Y2NkY19jdHhbVlBGRV9WRVJUX1NUQVJUID4+IDJdLAorCQkJCQkJVlBGRV9WRVJUX1NUQVJUKTsKKwl2cGZlX3JlZ193cml0ZShjY2RjLCBjY2RjLT5jY2RjX2N0eFtWUEZFX1ZFUlRfTElORVMgPj4gMl0sCisJCQkJCQlWUEZFX1ZFUlRfTElORVMpOworCXZwZmVfcmVnX3dyaXRlKGNjZGMsIGNjZGMtPmNjZGNfY3R4W1ZQRkVfSFNJWkVfT0ZGID4+IDJdLAorCQkJCQkJVlBGRV9IU0laRV9PRkYpOworfQorCitzdGF0aWMgaW50IHZwZmVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHZwZmVfZGV2aWNlICp2cGZlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHZwZmVfY2NkYyAqY2NkYyA9ICZ2cGZlLT5jY2RjOworCisJLyogaWYgc3RyZWFtaW5nIGhhcyBub3Qgc3RhcnRlZCB3ZSBkb24ndCBjYXJlICovCisJaWYgKCF2YjJfc3RhcnRfc3RyZWFtaW5nX2NhbGxlZCgmdnBmZS0+YnVmZmVyX3F1ZXVlKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBFbmFibGUgYm90aCBtYXN0ZXIgYW5kIHNsYXZlIGNsb2NrICovCisJcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOworCXZwZmVfY29uZmlnX2VuYWJsZShjY2RjLCAxKTsKKworCS8qIFJlc3RvcmUgVlBGRSBjb250ZXh0ICovCisJdnBmZV9yZXN0b3JlX2NvbnRleHQoY2NkYyk7CisKKwl2cGZlX2NvbmZpZ19lbmFibGUoY2NkYywgMCk7CisJcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOworCisJLyogU2VsZWN0IGRlZmF1bHQgcGluIHN0YXRlICovCisJcGluY3RybF9wbV9zZWxlY3RfZGVmYXVsdF9zdGF0ZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFModnBmZV9wbV9vcHMsIHZwZmVfc3VzcGVuZCwgdnBmZV9yZXN1bWUpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB2cGZlX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJ0aSxhbTQzN3gtdnBmZSIsIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHZwZmVfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2cGZlX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gdnBmZV9wcm9iZSwKKwkucmVtb3ZlCQk9IHZwZmVfcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gVlBGRV9NT0RVTEVfTkFNRSwKKwkJLnBtCT0gJnZwZmVfcG1fb3BzLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIodnBmZV9vZl9tYXRjaCksCisJfSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIodnBmZV9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJUZXhhcyBJbnN0cnVtZW50cyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUSSBBTTQzN3ggVlBGRSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKFZQRkVfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtNDM3eC9hbTQzN3gtdnBmZS5oIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbTQzN3gvYW00Mzd4LXZwZmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjU1NzM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbTQzN3gvYW00Mzd4LXZwZmUuaApAQCAtMCwwICsxLDI4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTQgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBCZW5vaXQgUGFycm90IDxicGFycm90QHRpLmNvbT4KKyAqIExhZCwgUHJhYmhha2FyIDxwcmFiaGFrYXIuY3NlbmdnQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IG1heSByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgQU00MzdYX1ZQRkVfSAorI2RlZmluZSBBTTQzN1hfVlBGRV9ICisKKyNpbmNsdWRlIDxsaW51eC9hbTQzN3gtdnBmZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi1kbWEtY29udGlnLmg+CisKKyNpbmNsdWRlICJhbTQzN3gtdnBmZV9yZWdzLmgiCisKK2VudW0gdnBmZV9waW5fcG9sIHsKKwlWUEZFX1BJTlBPTF9QT1NJVElWRSA9IDAsCisJVlBGRV9QSU5QT0xfTkVHQVRJVkUsCit9OworCitlbnVtIHZwZmVfaHdfaWZfdHlwZSB7CisJLyogUmF3IEJheWVyICovCisJVlBGRV9SQVdfQkFZRVIgPSAwLAorCS8qIEJUNjU2IC0gOCBiaXQgKi8KKwlWUEZFX0JUNjU2LAorCS8qIEJUNjU2IC0gMTAgYml0ICovCisJVlBGRV9CVDY1Nl8xMEJJVCwKKwkvKiBZQ2JDciAtIDggYml0IHdpdGggZXh0ZXJuYWwgc3luYyAqLworCVZQRkVfWUNCQ1JfU1lOQ184LAorCS8qIFlDYkNyIC0gMTYgYml0IHdpdGggZXh0ZXJuYWwgc3luYyAqLworCVZQRkVfWUNCQ1JfU1lOQ18xNiwKK307CisKKy8qIGludGVyZmFjZSBkZXNjcmlwdGlvbiAqLworc3RydWN0IHZwZmVfaHdfaWZfcGFyYW0geworCWVudW0gdnBmZV9od19pZl90eXBlIGlmX3R5cGU7CisJZW51bSB2cGZlX3Bpbl9wb2wgaGRwb2w7CisJZW51bSB2cGZlX3Bpbl9wb2wgdmRwb2w7CisJdW5zaWduZWQgaW50IGJ1c193aWR0aDsKK307CisKKyNkZWZpbmUgVlBGRV9NQVhfU1VCREVWCQkxCisjZGVmaW5lIFZQRkVfTUFYX0lOUFVUUwkJMQorCitzdHJ1Y3QgdnBmZV9waXhlbF9mb3JtYXQgeworCXN0cnVjdCB2NGwyX2ZtdGRlc2MgZm10ZGVzYzsKKwkvKiBieXRlcyBwZXIgcGl4ZWwgKi8KKwlpbnQgYnBwOworfTsKKworc3RydWN0IHZwZmVfc3RkX2luZm8geworCWludCBhY3RpdmVfcGl4ZWxzOworCWludCBhY3RpdmVfbGluZXM7CisJLyogY3VycmVudCBmcmFtZSBmb3JtYXQgKi8KKwlpbnQgZnJhbWVfZm9ybWF0OworfTsKKworc3RydWN0IHZwZmVfcm91dGUgeworCXUzMiBpbnB1dDsKKwl1MzIgb3V0cHV0OworfTsKKworc3RydWN0IHZwZmVfc3ViZGV2X2luZm8geworCSBjaGFyIG5hbWVbMzJdOworCS8qIFN1YiBkZXZpY2UgZ3JvdXAgaWQgKi8KKwlpbnQgZ3JwX2lkOworCS8qIGlucHV0cyBhdmFpbGFibGUgYXQgdGhlIHN1YiBkZXZpY2UgKi8KKwlzdHJ1Y3QgdjRsMl9pbnB1dCBpbnB1dHNbVlBGRV9NQVhfSU5QVVRTXTsKKwkvKiBTdWIgZGV2IHJvdXRpbmcgaW5mb3JtYXRpb24gZm9yIGVhY2ggaW5wdXQgKi8KKwlzdHJ1Y3QgdnBmZV9yb3V0ZSAqcm91dGVzOworCS8qIGNoZWNrIGlmIHN1YiBkZXYgc3VwcG9ydHMgcm91dGluZyAqLworCWludCBjYW5fcm91dGU7CisJLyogY2NkYyBidXMvaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgdnBmZV9od19pZl9wYXJhbSB2cGZlX3BhcmFtOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7Cit9OworCitzdHJ1Y3QgdnBmZV9jb25maWcgeworCS8qIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggc3ViZGV2ICovCisJc3RydWN0IHZwZmVfc3ViZGV2X2luZm8gc3ViX2RldnNbVlBGRV9NQVhfU1VCREVWXTsKKwkvKiBGbGF0IGFycmF5LCBhcnJhbmdlZCBpbiBncm91cHMgKi8KKwlzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYgKmFzZFtWUEZFX01BWF9TVUJERVZdOworfTsKKworc3RydWN0IHZwZmVfY2FwX2J1ZmZlciB7CisJc3RydWN0IHZiMl9idWZmZXIgdmI7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworZW51bSBjY2RjX3BpeGZtdCB7CisJQ0NEQ19QSVhGTVRfUkFXID0gMCwKKwlDQ0RDX1BJWEZNVF9ZQ0JDUl8xNkJJVCwKKwlDQ0RDX1BJWEZNVF9ZQ0JDUl84QklULAorfTsKKworZW51bSBjY2RjX2ZybWZtdCB7CisJQ0NEQ19GUk1GTVRfUFJPR1JFU1NJVkUgPSAwLAorCUNDRENfRlJNRk1UX0lOVEVSTEFDRUQsCit9OworCisvKiBQSVhFTCBPUkRFUiBJTiBNRU1PUlkgZnJvbSBMU0IgdG8gTVNCICovCisvKiBvbmx5IGFwcGxpY2FibGUgZm9yIDgtYml0IGlucHV0IG1vZGUgICovCitlbnVtIGNjZGNfcGl4b3JkZXIgeworCUNDRENfUElYT1JERVJfWUNCWUNSLAorCUNDRENfUElYT1JERVJfQ0JZQ1JZLAorfTsKKworZW51bSBjY2RjX2J1ZnR5cGUgeworCUNDRENfQlVGVFlQRV9GTERfSU5URVJMRUFWRUQsCisJQ0NEQ19CVUZUWVBFX0ZMRF9TRVBBUkFURUQKK307CisKKworLyogcmV0dXJucyB0aGUgaGlnaGVzdCBiaXQgdXNlZCBmb3IgdGhlIGdhbW1hICovCitzdGF0aWMgaW5saW5lIHU4IGNjZGNfZ2FtbWFfd2lkdGhfbWF4X2JpdChlbnVtIHZwZmVfY2NkY19nYW1tYV93aWR0aCB3aWR0aCkKK3sKKwlyZXR1cm4gMTUgLSB3aWR0aDsKK30KKworLyogcmV0dXJucyB0aGUgaGlnaGVzdCBiaXQgdXNlZCBmb3IgdGhpcyBkYXRhIHNpemUgKi8KK3N0YXRpYyBpbmxpbmUgdTggY2NkY19kYXRhX3NpemVfbWF4X2JpdChlbnVtIHZwZmVfY2NkY19kYXRhX3NpemUgc3opCit7CisJcmV0dXJuIHN6ID09IFZQRkVfQ0NEQ19EQVRBXzhCSVRTID8gNyA6IDE1IC0gc3o7Cit9CisKKy8qIFN0cnVjdHVyZSBmb3IgQ0NEQyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHJhdyBjYXB0dXJlIG1vZGUgKi8KK3N0cnVjdCBjY2RjX3BhcmFtc19yYXcgeworCS8qIHBpeGVsIGZvcm1hdCAqLworCWVudW0gY2NkY19waXhmbXQgcGl4X2ZtdDsKKwkvKiBwcm9ncmVzc2l2ZSBvciBpbnRlcmxhY2VkIGZyYW1lICovCisJZW51bSBjY2RjX2ZybWZtdCBmcm1fZm10OworCXN0cnVjdCB2NGwyX3JlY3Qgd2luOworCS8qIEN1cnJlbnQgRm9ybWF0IEJ5dGVzIFBlciBQaXhlbHMgKi8KKwl1bnNpZ25lZCBpbnQgYnl0ZXNwZXJwaXhlbDsKKwkvKiBDdXJyZW50IEZvcm1hdCBCeXRlcyBwZXIgTGluZXMKKwkgKiAoQWxpZ25lZCB0byAzMiBieXRlcykgdXNlZCBmb3IgSE9SWl9JTkZPCisJICovCisJdW5zaWduZWQgaW50IGJ5dGVzcGVybGluZTsKKwkvKiBmaWVsZCBpZCBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIGZpZF9wb2w7CisJLyogdmVydGljYWwgc3luYyBwb2xhcml0eSAqLworCWVudW0gdnBmZV9waW5fcG9sIHZkX3BvbDsKKwkvKiBob3Jpem9udGFsIHN5bmMgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCBoZF9wb2w7CisJLyogaW50ZXJsZWF2ZWQgb3Igc2VwYXJhdGVkIGZpZWxkcyAqLworCWVudW0gY2NkY19idWZ0eXBlIGJ1Zl90eXBlOworCS8qCisJICogZW5hYmxlIHRvIHN0b3JlIHRoZSBpbWFnZSBpbiBpbnZlcnNlCisJICogb3JkZXIgaW4gbWVtb3J5KGJvdHRvbSB0byB0b3ApCisJICovCisJdW5zaWduZWQgY2hhciBpbWFnZV9pbnZlcnRfZW5hYmxlOworCS8qIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXJzICovCisJc3RydWN0IHZwZmVfY2NkY19jb25maWdfcGFyYW1zX3JhdyBjb25maWdfcGFyYW1zOworfTsKKworc3RydWN0IGNjZGNfcGFyYW1zX3ljYmNyIHsKKwkvKiBwaXhlbCBmb3JtYXQgKi8KKwllbnVtIGNjZGNfcGl4Zm10IHBpeF9mbXQ7CisJLyogcHJvZ3Jlc3NpdmUgb3IgaW50ZXJsYWNlZCBmcmFtZSAqLworCWVudW0gY2NkY19mcm1mbXQgZnJtX2ZtdDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHdpbjsKKwkvKiBDdXJyZW50IEZvcm1hdCBCeXRlcyBQZXIgUGl4ZWxzICovCisJdW5zaWduZWQgaW50IGJ5dGVzcGVycGl4ZWw7CisJLyogQ3VycmVudCBGb3JtYXQgQnl0ZXMgcGVyIExpbmVzCisJICogKEFsaWduZWQgdG8gMzIgYnl0ZXMpIHVzZWQgZm9yIEhPUlpfSU5GTworCSAqLworCXVuc2lnbmVkIGludCBieXRlc3BlcmxpbmU7CisJLyogZmllbGQgaWQgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCBmaWRfcG9sOworCS8qIHZlcnRpY2FsIHN5bmMgcG9sYXJpdHkgKi8KKwllbnVtIHZwZmVfcGluX3BvbCB2ZF9wb2w7CisJLyogaG9yaXpvbnRhbCBzeW5jIHBvbGFyaXR5ICovCisJZW51bSB2cGZlX3Bpbl9wb2wgaGRfcG9sOworCS8qIGVuYWJsZSBCVC42NTYgZW1iZWRkZWQgc3luYyBtb2RlICovCisJaW50IGJ0NjU2X2VuYWJsZTsKKwkvKiBjYjp5OmNyOnkgb3IgeTpjYjp5OmNyIGluIG1lbW9yeSAqLworCWVudW0gY2NkY19waXhvcmRlciBwaXhfb3JkZXI7CisJLyogaW50ZXJsZWF2ZWQgb3Igc2VwYXJhdGVkIGZpZWxkcyAgKi8KKwllbnVtIGNjZGNfYnVmdHlwZSBidWZfdHlwZTsKK307CisKKy8qCisgKiBDQ0RDIG9wZXJhdGlvbmFsIGNvbmZpZ3VyYXRpb24KKyAqLworc3RydWN0IGNjZGNfY29uZmlnIHsKKwkvKiBDQ0RDIGludGVyZmFjZSB0eXBlICovCisJZW51bSB2cGZlX2h3X2lmX3R5cGUgaWZfdHlwZTsKKwkvKiBSYXcgQmF5ZXIgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBjY2RjX3BhcmFtc19yYXcgYmF5ZXI7CisJLyogWUNiQ3IgY29uZmlndXJhdGlvbiAqLworCXN0cnVjdCBjY2RjX3BhcmFtc195Y2JjciB5Y2JjcjsKKwkvKiBjY2RjIGJhc2UgYWRkcmVzcyAqLworCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyOworfTsKKworc3RydWN0IHZwZmVfY2NkYyB7CisJc3RydWN0IGNjZGNfY29uZmlnIGNjZGNfY2ZnOworCXUzMiBjY2RjX2N0eFtWUEZFX1JFR19FTkQgLyBzaXplb2YodTMyKV07Cit9OworCitzdHJ1Y3QgdnBmZV9kZXZpY2UgeworCS8qIFY0bDIgc3BlY2lmaWMgcGFyYW1ldGVycyAqLworCS8qIElkZW50aWZpZXMgdmlkZW8gZGV2aWNlIGZvciB0aGlzIGNoYW5uZWwgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXY7CisJLyogc3ViIGRldmljZXMgKi8KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKipzZDsKKwkvKiB2cGZlIGNmZyAqLworCXN0cnVjdCB2cGZlX2NvbmZpZyAqY2ZnOworCS8qIFY0bDIgZGV2aWNlICovCisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCS8qIHBhcmVudCBkZXZpY2UgKi8KKwlzdHJ1Y3QgZGV2aWNlICpwZGV2OworCS8qIHN1YmRldmljZSBhc3luYyBOb3RpZmllciAqLworCXN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyIG5vdGlmaWVyOworCS8qIEluZGljYXRlcyBpZCBvZiB0aGUgZmllbGQgd2hpY2ggaXMgYmVpbmcgZGlzcGxheWVkICovCisJdW5zaWduZWQgZmllbGQ7CisJdW5zaWduZWQgc2VxdWVuY2U7CisJLyogY3VycmVudCBpbnRlcmZhY2UgdHlwZSAqLworCXN0cnVjdCB2cGZlX2h3X2lmX3BhcmFtIHZwZmVfaWZfcGFyYW1zOworCS8qIHB0ciB0byBjdXJyZW50bHkgc2VsZWN0ZWQgc3ViIGRldmljZSAqLworCXN0cnVjdCB2cGZlX3N1YmRldl9pbmZvICpjdXJyZW50X3N1YmRldjsKKwkvKiBjdXJyZW50IGlucHV0IGF0IHRoZSBzdWIgZGV2aWNlICovCisJaW50IGN1cnJlbnRfaW5wdXQ7CisJLyogS2VlcHMgdHJhY2sgb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGFuZGFyZCAqLworCXN0cnVjdCB2cGZlX3N0ZF9pbmZvIHN0ZF9pbmZvOworCS8qIHN0ZCBpbmRleCBpbnRvIHN0ZCB0YWJsZSAqLworCWludCBzdGRfaW5kZXg7CisJLyogSVJRcyB1c2VkIHdoZW4gQ0NEQyBvdXRwdXQgdG8gU0RSQU0gKi8KKwl1bnNpZ25lZCBpbnQgaXJxOworCS8qIFBvaW50ZXIgcG9pbnRpbmcgdG8gY3VycmVudCB2NGwyX2J1ZmZlciAqLworCXN0cnVjdCB2cGZlX2NhcF9idWZmZXIgKmN1cl9mcm07CisJLyogUG9pbnRlciBwb2ludGluZyB0byBuZXh0IHY0bDJfYnVmZmVyICovCisJc3RydWN0IHZwZmVfY2FwX2J1ZmZlciAqbmV4dF9mcm07CisJLyogVXNlZCB0byBzdG9yZSBwaXhlbCBmb3JtYXQgKi8KKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OworCS8qIFVzZWQgdG8gc3RvcmUgY3VycmVudCBieXRlcyBwZXIgcGl4ZWwgYmFzZWQgb24gY3VycmVudCBmb3JtYXQgKi8KKwl1bnNpZ25lZCBpbnQgYnBwOworCS8qCisJICogdXNlZCB3aGVuIElNUCBpcyBjaGFpbmVkIHRvIHN0b3JlIHRoZSBjcm9wIHdpbmRvdyB3aGljaAorCSAqIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBpbWFnZSB3aW5kb3cKKwkgKi8KKwlzdHJ1Y3QgdjRsMl9yZWN0IGNyb3A7CisJLyogQnVmZmVyIHF1ZXVlIHVzZWQgaW4gdmlkZW8tYnVmICovCisJc3RydWN0IHZiMl9xdWV1ZSBidWZmZXJfcXVldWU7CisJLyogQWxsb2NhdG9yLXNwZWNpZmljIGNvbnRleHRzIGZvciBlYWNoIHBsYW5lICovCisJc3RydWN0IHZiMl9hbGxvY19jdHggKmFsbG9jX2N0eDsKKwkvKiBRdWV1ZSBvZiBmaWxsZWQgZnJhbWVzICovCisJc3RydWN0IGxpc3RfaGVhZCBkbWFfcXVldWU7CisJLyogSVJRIGxvY2sgZm9yIERNQSBxdWV1ZSAqLworCXNwaW5sb2NrX3QgZG1hX3F1ZXVlX2xvY2s7CisJLyogbG9jayB1c2VkIHRvIGFjY2VzcyB0aGlzIHN0cnVjdHVyZSAqLworCXN0cnVjdCBtdXRleCBsb2NrOworCS8qCisJICogb2Zmc2V0IHdoZXJlIHNlY29uZCBmaWVsZCBzdGFydHMgZnJvbSB0aGUgc3RhcnRpbmcgb2YgdGhlCisJICogYnVmZmVyIGZvciBmaWVsZCBzZXBhcmF0ZWQgWUNiQ3IgZm9ybWF0cworCSAqLworCXUzMiBmaWVsZF9vZmY7CisJc3RydWN0IHZwZmVfY2NkYyBjY2RjOworfTsKKworI2VuZGlmCS8qIEFNNDM3WF9WUEZFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW00Mzd4L2FtNDM3eC12cGZlX3JlZ3MuaCBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW00Mzd4L2FtNDM3eC12cGZlX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTBlZDI5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbTQzN3gvYW00Mzd4LXZwZmVfcmVncy5oCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogVEkgQU00Mzd4IEltYWdlIFNlbnNvciBJbnRlcmZhY2UgUmVnaXN0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxNCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICoKKyAqIEJlbm9pdCBQYXJyb3QgPGJwYXJyb3RAdGkuY29tPgorICogTGFkLCBQcmFiaGFrYXIgPHByYWJoYWthci5jc2VuZ2dAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgQU00MzdYX1ZQRkVfUkVHU19ICisjZGVmaW5lIEFNNDM3WF9WUEZFX1JFR1NfSAorCisvKiBWUEZFIG1vZHVsZSByZWdpc3RlciBvZmZzZXQgKi8KKyNkZWZpbmUgVlBGRV9SRVZJU0lPTgkJCQkweDAKKyNkZWZpbmUgVlBGRV9QQ1IJCQkJMHg0CisjZGVmaW5lIFZQRkVfU1lOTU9ERQkJCQkweDgKKyNkZWZpbmUgVlBGRV9IRF9WRF9XSUQJCQkJMHhjCisjZGVmaW5lIFZQRkVfUElYX0xJTkVTCQkJCTB4MTAKKyNkZWZpbmUgVlBGRV9IT1JaX0lORk8JCQkJMHgxNAorI2RlZmluZSBWUEZFX1ZFUlRfU1RBUlQJCQkJMHgxOAorI2RlZmluZSBWUEZFX1ZFUlRfTElORVMJCQkJMHgxYworI2RlZmluZSBWUEZFX0NVTExJTkcJCQkJMHgyMAorI2RlZmluZSBWUEZFX0hTSVpFX09GRgkJCQkweDI0CisjZGVmaW5lIFZQRkVfU0RPRlNUCQkJCTB4MjgKKyNkZWZpbmUgVlBGRV9TRFJfQUREUgkJCQkweDJjCisjZGVmaW5lIFZQRkVfQ0xBTVAJCQkJMHgzMAorI2RlZmluZSBWUEZFX0RDU1VCCQkJCTB4MzQKKyNkZWZpbmUgVlBGRV9DT0xQVE4JCQkJMHgzOAorI2RlZmluZSBWUEZFX0JMS0NNUAkJCQkweDNjCisjZGVmaW5lIFZQRkVfVkRJTlQJCQkJMHg0OAorI2RlZmluZSBWUEZFX0FMQVcJCQkJMHg0YworI2RlZmluZSBWUEZFX1JFQzY1NklGCQkJCTB4NTAKKyNkZWZpbmUgVlBGRV9DQ0RDRkcJCQkJMHg1NAorI2RlZmluZSBWUEZFX0RNQV9DTlRMCQkJCTB4OTgKKyNkZWZpbmUgVlBGRV9TWVNDT05GSUcJCQkJMHgxMDQKKyNkZWZpbmUgVlBGRV9DT05GSUcJCQkJMHgxMDgKKyNkZWZpbmUgVlBGRV9JUlFfRU9JCQkJCTB4MTEwCisjZGVmaW5lIFZQRkVfSVJRX1NUU19SQVcJCQkweDExNAorI2RlZmluZSBWUEZFX0lSUV9TVFMJCQkJMHgxMTgKKyNkZWZpbmUgVlBGRV9JUlFfRU5fU0VUCQkJCTB4MTFjCisjZGVmaW5lIFZQRkVfSVJRX0VOX0NMUgkJCQkweDEyMAorI2RlZmluZSBWUEZFX1JFR19FTkQJCQkJMHgxMjQKKworLyogRGVmaW5lIGJpdCBmaWVsZHMgd2l0aGluIHNlbGVjdGVkIHJlZ2lzdGVycyAqLworI2RlZmluZSBWUEZFX0ZJRF9QT0xfTUFTSwkJCTEKKyNkZWZpbmUgVlBGRV9GSURfUE9MX1NISUZUCQkJNAorI2RlZmluZSBWUEZFX0hEX1BPTF9NQVNLCQkJMQorI2RlZmluZSBWUEZFX0hEX1BPTF9TSElGVAkJCTMKKyNkZWZpbmUgVlBGRV9WRF9QT0xfTUFTSwkJCTEKKyNkZWZpbmUgVlBGRV9WRF9QT0xfU0hJRlQJCQkyCisjZGVmaW5lIFZQRkVfSFNJWkVfT0ZGX01BU0sJCQkweGZmZmZmZmUwCisjZGVmaW5lIFZQRkVfMzJCWVRFX0FMSUdOX1ZBTAkJCTMxCisjZGVmaW5lIFZQRkVfRlJNX0ZNVF9NQVNLCQkJMHgxCisjZGVmaW5lIFZQRkVfRlJNX0ZNVF9TSElGVAkJCTcKKyNkZWZpbmUgVlBGRV9EQVRBX1NaX01BU0sJCQk3CisjZGVmaW5lIFZQRkVfREFUQV9TWl9TSElGVAkJCTgKKyNkZWZpbmUgVlBGRV9QSVhfRk1UX01BU0sJCQkzCisjZGVmaW5lIFZQRkVfUElYX0ZNVF9TSElGVAkJCTEyCisjZGVmaW5lIFZQRkVfVlAyU0RSX0RJU0FCTEUJCQkweGZmZmJmZmZmCisjZGVmaW5lIFZQRkVfV0VOX0VOQUJMRQkJCQkoMSA8PCAxNykKKyNkZWZpbmUgVlBGRV9TRFIyUlNaX0RJU0FCTEUJCQkweGZmZjdmZmZmCisjZGVmaW5lIFZQRkVfVkRIREVOX0VOQUJMRQkJCSgxIDw8IDE2KQorI2RlZmluZSBWUEZFX0xQRl9FTkFCTEUJCQkJKDEgPDwgMTQpCisjZGVmaW5lIFZQRkVfQUxBV19FTkFCTEUJCQkoMSA8PCAzKQorI2RlZmluZSBWUEZFX0FMQVdfR0FNTUFfV0RfTUFTSwkJCTcKKyNkZWZpbmUgVlBGRV9CTEtfQ0xBTVBfRU5BQkxFCQkJKDEgPDwgMzEpCisjZGVmaW5lIFZQRkVfQkxLX1NHQUlOX01BU0sJCQkweDFmCisjZGVmaW5lIFZQRkVfQkxLX1NUX1BYTF9NQVNLCQkJMHg3ZmZmCisjZGVmaW5lIFZQRkVfQkxLX1NUX1BYTF9TSElGVAkJCTEwCisjZGVmaW5lIFZQRkVfQkxLX1NBTVBMRV9MTl9NQVNLCQkJNworI2RlZmluZSBWUEZFX0JMS19TQU1QTEVfTE5fU0hJRlQJCTI4CisjZGVmaW5lIFZQRkVfQkxLX1NBTVBMRV9MSU5FX01BU0sJCTcKKyNkZWZpbmUgVlBGRV9CTEtfU0FNUExFX0xJTkVfU0hJRlQJCTI1CisjZGVmaW5lIFZQRkVfQkxLX0RDX1NVQl9NQVNLCQkJMHgwM2ZmZgorI2RlZmluZSBWUEZFX0JMS19DT01QX01BU0sJCQkweGZmCisjZGVmaW5lIFZQRkVfQkxLX0NPTVBfR0JfQ09NUF9TSElGVAkJOAorI2RlZmluZSBWUEZFX0JMS19DT01QX0dSX0NPTVBfU0hJRlQJCTE2CisjZGVmaW5lIFZQRkVfQkxLX0NPTVBfUl9DT01QX1NISUZUCQkyNAorI2RlZmluZSBWUEZFX0xBVENIX09OX1ZTWU5DX0RJU0FCTEUJCSgxIDw8IDE1KQorI2RlZmluZSBWUEZFX0RBVEFfUEFDS19FTkFCTEUJCQkoMSA8PCAxMSkKKyNkZWZpbmUgVlBGRV9IT1JaX0lORk9fU1BIX1NISUZUCQkxNgorI2RlZmluZSBWUEZFX1ZFUlRfU1RBUlRfU0xWMF9TSElGVAkJMTYKKyNkZWZpbmUgVlBGRV9WRElOVF9WRElOVDBfU0hJRlQJCQkxNgorI2RlZmluZSBWUEZFX1ZESU5UX1ZESU5UMV9NQVNLCQkJMHhmZmZmCisjZGVmaW5lIFZQRkVfUFBDX1JBVwkJCQkxCisjZGVmaW5lIFZQRkVfRENTVUJfREVGQVVMVF9WQUwJCQkwCisjZGVmaW5lIFZQRkVfQ0xBTVBfREVGQVVMVF9WQUwJCQkwCisjZGVmaW5lIFZQRkVfQ09MUFROX1ZBTAkJCQkweGJiMTFiYjExCisjZGVmaW5lIFZQRkVfVFdPX0JZVEVTX1BFUl9QSVhFTAkJMgorI2RlZmluZSBWUEZFX0lOVEVSTEFDRURfSU1BR0VfSU5WRVJUCQkweDRiNmQKKyNkZWZpbmUgVlBGRV9JTlRFUkxBQ0VEX05PX0lNQUdFX0lOVkVSVAkJMHgwMjQ5CisjZGVmaW5lIFZQRkVfUFJPR1JFU1NJVkVfSU1BR0VfSU5WRVJUCQkweDQwMDAKKyNkZWZpbmUgVlBGRV9QUk9HUkVTU0lWRV9OT19JTUFHRV9JTlZFUlQJMAorI2RlZmluZSBWUEZFX0lOVEVSTEFDRURfSEVJR0hUX1NISUZUCQkxCisjZGVmaW5lIFZQRkVfU1lOX01PREVfSU5QTU9EX1NISUZUCQkxMgorI2RlZmluZSBWUEZFX1NZTl9NT0RFX0lOUE1PRF9NQVNLCQkzCisjZGVmaW5lIFZQRkVfU1lOX01PREVfOEJJVFMJCQkoNyA8PCA4KQorI2RlZmluZSBWUEZFX1NZTl9NT0RFXzEwQklUUwkJCSg2IDw8IDgpCisjZGVmaW5lIFZQRkVfU1lOX01PREVfMTFCSVRTCQkJKDUgPDwgOCkKKyNkZWZpbmUgVlBGRV9TWU5fTU9ERV8xMkJJVFMJCQkoNCA8PCA4KQorI2RlZmluZSBWUEZFX1NZTl9NT0RFXzEzQklUUwkJCSgzIDw8IDgpCisjZGVmaW5lIFZQRkVfU1lOX01PREVfMTRCSVRTCQkJKDIgPDwgOCkKKyNkZWZpbmUgVlBGRV9TWU5fTU9ERV8xNUJJVFMJCQkoMSA8PCA4KQorI2RlZmluZSBWUEZFX1NZTl9NT0RFXzE2QklUUwkJCSgwIDw8IDgpCisjZGVmaW5lIFZQRkVfU1lOX0ZMRE1PREVfTUFTSwkJCTEKKyNkZWZpbmUgVlBGRV9TWU5fRkxETU9ERV9TSElGVAkJCTcKKyNkZWZpbmUgVlBGRV9SRUM2NTZJRl9CVDY1Nl9FTgkJCTMKKyNkZWZpbmUgVlBGRV9TWU5fTU9ERV9WRF9QT0xfTkVHQVRJVkUJCSgxIDw8IDIpCisjZGVmaW5lIFZQRkVfQ0NEQ0ZHX1k4UE9TX1NISUZUCQkJMTEKKyNkZWZpbmUgVlBGRV9DQ0RDRkdfQlc2NTZfMTBCSVQJCQkoMSA8PCA1KQorI2RlZmluZSBWUEZFX1NET0ZTVF9GSUVMRF9JTlRFUkxFQVZFRAkJMHgyNDkKKyNkZWZpbmUgVlBGRV9OT19DVUxMSU5HCQkJCTB4ZmZmZjAwZmYKKyNkZWZpbmUgVlBGRV9WRElOVDAJCQkJKDEgPDwgMCkKKyNkZWZpbmUgVlBGRV9WRElOVDEJCQkJKDEgPDwgMSkKKyNkZWZpbmUgVlBGRV9WRElOVDIJCQkJKDEgPDwgMikKKyNkZWZpbmUgVlBGRV9ETUFfQ05UTF9PVkVSRkxPVwkJCSgxIDw8IDMxKQorCisjZGVmaW5lIFZQRkVfQ09ORklHX1BDTEtfSU5WX1NISUZUCQkwCisjZGVmaW5lIFZQRkVfQ09ORklHX1BDTEtfSU5WX01BU0sJCTEKKyNkZWZpbmUgVlBGRV9DT05GSUdfUENMS19JTlZfTk9UX0lOVgkJMAorI2RlZmluZSBWUEZFX0NPTkZJR19QQ0xLX0lOVl9JTlYJCTEKKyNkZWZpbmUgVlBGRV9DT05GSUdfRU5fU0hJRlQJCQkxCisjZGVmaW5lIFZQRkVfQ09ORklHX0VOX01BU0sJCQkyCisjZGVmaW5lIFZQRkVfQ09ORklHX0VOX0RJU0FCTEUJCQkwCisjZGVmaW5lIFZQRkVfQ09ORklHX0VOX0VOQUJMRQkJCTEKKyNkZWZpbmUgVlBGRV9DT05GSUdfU1RfU0hJRlQJCQkyCisjZGVmaW5lIFZQRkVfQ09ORklHX1NUX01BU0sJCQk0CisjZGVmaW5lIFZQRkVfQ09ORklHX1NUX09DUF9BQ1RJVkUJCTAKKyNkZWZpbmUgVlBGRV9DT05GSUdfU1RfT0NQX1NUQU5EQlkJCTEKKworI2VuZGlmCQkvKiBBTTQzN1hfVlBGRV9SRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY29kYS9jb2RhLWJpdC5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9jb2RhL2NvZGEtYml0LmMKaW5kZXggYjQwMjlhZS4uODU2YjU0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9jb2RhL2NvZGEtYml0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9jb2RhL2NvZGEtYml0LmMKQEAgLTcxOCw2ICs3MTgsNyBAQAogCXN0cnVjdCB2YjJfYnVmZmVyICpidWY7CiAJaW50IGdhbW1hLCByZXQsIHZhbHVlOwogCXUzMiBkc3RfZm91cmNjOworCWludCBudW1fZmI7CiAJdTMyIHN0cmlkZTsKIAogCXFfZGF0YV9zcmMgPSBnZXRfcV9kYXRhKGN0eCwgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpOwpAQCAtOTgzLDEyICs5ODQsMTQgQEAKIAkJCXY0bDJfZXJyKHY0bDJfZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIGZyYW1lYnVmZmVyc1xuIik7CiAJCQlnb3RvIG91dDsKIAkJfQorCQludW1fZmIgPSAyOwogCQlzdHJpZGUgPSBxX2RhdGFfc3JjLT5ieXRlc3BlcmxpbmU7CiAJfSBlbHNlIHsKIAkJY3R4LT5udW1faW50ZXJuYWxfZnJhbWVzID0gMDsKKwkJbnVtX2ZiID0gMDsKIAkJc3RyaWRlID0gMDsKIAl9Ci0JY29kYV93cml0ZShkZXYsIGN0eC0+bnVtX2ludGVybmFsX2ZyYW1lcywgQ09EQV9DTURfU0VUX0ZSQU1FX0JVRl9OVU0pOworCWNvZGFfd3JpdGUoZGV2LCBudW1fZmIsIENPREFfQ01EX1NFVF9GUkFNRV9CVUZfTlVNKTsKIAljb2RhX3dyaXRlKGRldiwgc3RyaWRlLCBDT0RBX0NNRF9TRVRfRlJBTUVfQlVGX1NUUklERSk7CiAKIAlpZiAoZGV2LT5kZXZ0eXBlLT5wcm9kdWN0ID09IENPREFfNzU0MSkgewpAQCAtMTMxNiw4ICsxMzE5LDEwIEBACiAKIHN0YXRpYyB2b2lkIGNvZGFfYml0X3JlbGVhc2Uoc3RydWN0IGNvZGFfY3R4ICpjdHgpCiB7CisJbXV0ZXhfbG9jaygmY3R4LT5idWZmZXJfbXV0ZXgpOwogCWNvZGFfZnJlZV9mcmFtZWJ1ZmZlcnMoY3R4KTsKIAljb2RhX2ZyZWVfY29udGV4dF9idWZmZXJzKGN0eCk7CisJbXV0ZXhfdW5sb2NrKCZjdHgtPmJ1ZmZlcl9tdXRleCk7CiB9CiAKIGNvbnN0IHN0cnVjdCBjb2RhX2NvbnRleHRfb3BzIGNvZGFfYml0X2VuY29kZV9vcHMgPSB7CkBAIC0xNDMxLDkgKzE0MzYsMTAgQEAKIAkJaGVpZ2h0ID0gdmFsICYgQ09EQTdfUElDSEVJR0hUX01BU0s7CiAJfQogCi0JaWYgKHdpZHRoID4gcV9kYXRhX2RzdC0+d2lkdGggfHwgaGVpZ2h0ID4gcV9kYXRhX2RzdC0+aGVpZ2h0KSB7CisJaWYgKHdpZHRoID4gcV9kYXRhX2RzdC0+Ynl0ZXNwZXJsaW5lIHx8IGhlaWdodCA+IHFfZGF0YV9kc3QtPmhlaWdodCkgewogCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgInN0cmVhbSBpcyAlZHglZCwgbm90ICVkeCVkXG4iLAotCQkJIHdpZHRoLCBoZWlnaHQsIHFfZGF0YV9kc3QtPndpZHRoLCBxX2RhdGFfZHN0LT5oZWlnaHQpOworCQkJIHdpZHRoLCBoZWlnaHQsIHFfZGF0YV9kc3QtPmJ5dGVzcGVybGluZSwKKwkJCSBxX2RhdGFfZHN0LT5oZWlnaHQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE1NjUsNiArMTU3MSw3IEBACiAJc3RydWN0IHZiMl9idWZmZXIgKmRzdF9idWY7CiAJc3RydWN0IGNvZGFfZGV2ICpkZXYgPSBjdHgtPmRldjsKIAlzdHJ1Y3QgY29kYV9xX2RhdGEgKnFfZGF0YV9kc3Q7CisJc3RydWN0IGNvZGFfYnVmZmVyX21ldGEgKm1ldGE7CiAJdTMyIHJlZ19hZGRyLCByZWdfc3RyaWRlOwogCiAJZHN0X2J1ZiA9IHY0bDJfbTJtX25leHRfZHN0X2J1ZihjdHgtPmZoLm0ybV9jdHgpOwpAQCAtMTY0MywxMiArMTY1MCwxMiBAQAogCQljb2RhX3dyaXRlKGRldiwgY3R4LT5pcmFtX2luZm8uYXhpX3NyYW1fdXNlLAogCQkJCUNPREE3X1JFR19CSVRfQVhJX1NSQU1fVVNFKTsKIAotCWlmIChjdHgtPmNvZGVjLT5zcmNfZm91cmNjID09IFY0TDJfUElYX0ZNVF9KUEVHKSB7Ci0JCXN0cnVjdCBjb2RhX2J1ZmZlcl9tZXRhICptZXRhOworCW1ldGEgPSBsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwoJmN0eC0+YnVmZmVyX21ldGFfbGlzdCwKKwkJCQkJc3RydWN0IGNvZGFfYnVmZmVyX21ldGEsIGxpc3QpOworCisJaWYgKG1ldGEgJiYgY3R4LT5jb2RlYy0+c3JjX2ZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfSlBFRykgewogCiAJCS8qIElmIHRoaXMgaXMgdGhlIGxhc3QgYnVmZmVyIGluIHRoZSBiaXRzdHJlYW0sIGFkZCBwYWRkaW5nICovCi0JCW1ldGEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZjdHgtPmJ1ZmZlcl9tZXRhX2xpc3QsCi0JCQkJICAgICAgc3RydWN0IGNvZGFfYnVmZmVyX21ldGEsIGxpc3QpOwogCQlpZiAobWV0YS0+ZW5kID09IChjdHgtPmJpdHN0cmVhbV9maWZvLmtmaWZvLmluICYKIAkJCQkgIGN0eC0+Yml0c3RyZWFtX2ZpZm8ua2ZpZm8ubWFzaykpIHsKIAkJCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGJ1Zls1MTJdOwpAQCAtMTY2NSw2ICsxNjcyLDkgQEAKIAogCWNvZGFfa2ZpZm9fc3luY190b19kZXZpY2VfZnVsbChjdHgpOwogCisJLyogQ2xlYXIgZGVjb2RlIHN1Y2Nlc3MgZmxhZyAqLworCWNvZGFfd3JpdGUoZGV2LCAwLCBDT0RBX1JFVF9ERUNfUElDX1NVQ0NFU1MpOworCiAJY29kYV9jb21tYW5kX2FzeW5jKGN0eCwgQ09EQV9DT01NQU5EX1BJQ19SVU4pOwogCiAJcmV0dXJuIDA7CkBAIC0xODIxLDYgKzE4MzEsNyBAQAogCQkJbWVtc2V0KCZjdHgtPmZyYW1lX21ldGFzW2RlY29kZWRfaWR4XSwgMCwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IGNvZGFfYnVmZmVyX21ldGEpKTsKIAkJCWN0eC0+ZnJhbWVfbWV0YXNbZGVjb2RlZF9pZHhdLnNlcXVlbmNlID0gdmFsOworCQkJY3R4LT5zZXF1ZW5jZV9vZmZzZXQrKzsKIAkJfQogCQltdXRleF91bmxvY2soJmN0eC0+Yml0c3RyZWFtX211dGV4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9jb2RhL2NvZGEtY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NvZGEvY29kYS1jb21tb24uYwppbmRleCAzOTMzMGE3Li42ZjMyZTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NvZGEvY29kYS1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NvZGEvY29kYS1jb21tb24uYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItbWVtMm1lbS5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi1jb3JlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWRtYS1jb250aWcuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItdm1hbGxvYy5oPgogCiAjaW5jbHVkZSAiY29kYS5oIgogCkBAIC0xODAsNiArMTgxLDcgQEAKIAljb25zdCBjaGFyICpuYW1lOwogCWVudW0gY29kYV9pbnN0X3R5cGUgdHlwZTsKIAljb25zdCBzdHJ1Y3QgY29kYV9jb250ZXh0X29wcyAqb3BzOworCWJvb2wgZGlyZWN0OwogCXUzMiBzcmNfZm9ybWF0c1tDT0RBX01BWF9GT1JNQVRTXTsKIAl1MzIgZHN0X2Zvcm1hdHNbQ09EQV9NQVhfRk9STUFUU107CiB9OwpAQCAtNDY4LDYgKzQ3MCwxOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IGNvZGFfZXN0aW1hdGVfc2l6ZWltYWdlKHN0cnVjdCBjb2RhX2N0eCAqY3R4LCB1MzIgc2l6ZWltYWdlLAorCQkJCQkgICAgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0KQoreworCS8qCisJICogVGhpcyBpcyBhIHJvdWdoIGVzdGltYXRlIGZvciBzZW5zaWJsZSBjb21wcmVzc2VkIGJ1ZmZlcgorCSAqIHNpemVzIChiZXR3ZWVuIDEgYW5kIDE2IGJpdHMgcGVyIHBpeGVsKS4gVGhpcyBjb3VsZCBiZQorCSAqIGltcHJvdmVkIGJ5IGJldHRlciBmb3JtYXQgc3BlY2lmaWMgd29yc3QgY2FzZSBlc3RpbWF0ZXMuCisJICovCisJcmV0dXJuIHJvdW5kX3VwKGNsYW1wKHNpemVpbWFnZSwgd2lkdGggKiBoZWlnaHQgLyA4LAorCQkJCQkgd2lkdGggKiBoZWlnaHQgKiAyKSwgUEFHRV9TSVpFKTsKK30KKwogc3RhdGljIGludCBjb2RhX3RyeV9mbXQoc3RydWN0IGNvZGFfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBjb2RhX2NvZGVjICpjb2RlYywKIAkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKQEAgLTUxMywxNSArNTI3LDEwIEBACiAJY2FzZSBWNEwyX1BJWF9GTVRfSDI2NDoKIAljYXNlIFY0TDJfUElYX0ZNVF9NUEVHNDoKIAkJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwotCQkvKgotCQkgKiBUaGlzIGlzIGEgcm91Z2ggZXN0aW1hdGUgZm9yIHNlbnNpYmxlIGNvbXByZXNzZWQgYnVmZmVyCi0JCSAqIHNpemVzIChiZXR3ZWVuIDEgYW5kIDE2IGJpdHMgcGVyIHBpeGVsKS4gVGhpcyBjb3VsZCBiZQotCQkgKiBpbXByb3ZlZCBieSBiZXR0ZXIgZm9ybWF0IHNwZWNpZmljIHdvcnN0IGNhc2UgZXN0aW1hdGVzLgotCQkgKi8KLQkJZi0+Zm10LnBpeC5zaXplaW1hZ2UgPSByb3VuZF91cChjbGFtcChmLT5mbXQucGl4LnNpemVpbWFnZSwKLQkJCQlmLT5mbXQucGl4LndpZHRoICogZi0+Zm10LnBpeC5oZWlnaHQgLyA4LAotCQkJCWYtPmZtdC5waXgud2lkdGggKiBmLT5mbXQucGl4LmhlaWdodCAqIDIpLAotCQkJCVBBR0VfU0laRSk7CisJCWYtPmZtdC5waXguc2l6ZWltYWdlID0gY29kYV9lc3RpbWF0ZV9zaXplaW1hZ2UoY3R4LAorCQkJCQkJCWYtPmZtdC5waXguc2l6ZWltYWdlLAorCQkJCQkJCWYtPmZtdC5waXgud2lkdGgsCisJCQkJCQkJZi0+Zm10LnBpeC5oZWlnaHQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKQEAgLTU5Miw3ICs2MDEsMTEgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWlmICghZi0+Zm10LnBpeC5jb2xvcnNwYWNlKSB7CisJc3dpdGNoIChmLT5mbXQucGl4LmNvbG9yc3BhY2UpIHsKKwljYXNlIFY0TDJfQ09MT1JTUEFDRV9SRUM3MDk6CisJY2FzZSBWNEwyX0NPTE9SU1BBQ0VfSlBFRzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX0pQRUcpCiAJCQlmLT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRzsKIAkJZWxzZQpAQCAtNjcwLDYgKzY4Myw3IEBACiAKIAljdHgtPmNvbG9yc3BhY2UgPSBmLT5mbXQucGl4LmNvbG9yc3BhY2U7CiAKKwltZW1zZXQoJmZfY2FwLCAwLCBzaXplb2YoZl9jYXApKTsKIAlmX2NhcC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWNvZGFfZ19mbXQoZmlsZSwgcHJpdiwgJmZfY2FwKTsKIAlmX2NhcC5mbXQucGl4LndpZHRoID0gZi0+Zm10LnBpeC53aWR0aDsKQEAgLTkwOCw3ICs5MjIsOCBAQAogCQljdHgtPm9wcy0+ZmluaXNoX3J1bihjdHgpOwogCX0KIAotCWlmIChjdHgtPmFib3J0aW5nIHx8ICghY3R4LT5zdHJlYW1vbl9jYXAgJiYgIWN0eC0+c3RyZWFtb25fb3V0KSkKKwlpZiAoKGN0eC0+YWJvcnRpbmcgfHwgKCFjdHgtPnN0cmVhbW9uX2NhcCAmJiAhY3R4LT5zdHJlYW1vbl9vdXQpKSAmJgorCSAgICBjdHgtPm9wcy0+c2VxX2VuZF93b3JrKQogCQlxdWV1ZV93b3JrKGRldi0+d29ya3F1ZXVlLCAmY3R4LT5zZXFfZW5kX3dvcmspOwogCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmNvZGFfbXV0ZXgpOwpAQCAtOTM5LDE1ICs5NTQsNDMgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGN0eC0+aG9sZCB8fAotCSAgICAoKGN0eC0+aW5zdF90eXBlID09IENPREFfSU5TVF9ERUNPREVSKSAmJgotCSAgICAgIXY0bDJfbTJtX251bV9zcmNfYnVmc19yZWFkeShjdHgtPmZoLm0ybV9jdHgpICYmCi0JICAgICAoY29kYV9nZXRfYml0c3RyZWFtX3BheWxvYWQoY3R4KSA8IDUxMikgJiYKLQkgICAgICEoY3R4LT5iaXRfc3RyZWFtX3BhcmFtICYgQ09EQV9CSVRfU1RSRUFNX0VORF9GTEFHKSkpIHsKLQkJdjRsMl9kYmcoMSwgY29kYV9kZWJ1ZywgJmN0eC0+ZGV2LT52NGwyX2RldiwKLQkJCSAiJWQ6IG5vdCByZWFkeTogbm90IGVub3VnaCBiaXRzdHJlYW0gZGF0YS5cbiIsCi0JCQkgY3R4LT5pZHgpOwotCQlyZXR1cm4gMDsKKwlpZiAoY3R4LT5pbnN0X3R5cGUgPT0gQ09EQV9JTlNUX0RFQ09ERVIgJiYgY3R4LT51c2VfYml0KSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKm1ldGE7CisJCWJvb2wgc3RyZWFtX2VuZDsKKwkJaW50IG51bV9tZXRhczsKKwkJaW50IHNyY19idWZzOworCisJCWlmIChjdHgtPmhvbGQgJiYgIXY0bDJfbTJtX251bV9zcmNfYnVmc19yZWFkeShjdHgtPmZoLm0ybV9jdHgpKSB7CisJCQl2NGwyX2RiZygxLCBjb2RhX2RlYnVnLCAmY3R4LT5kZXYtPnY0bDJfZGV2LAorCQkJCSAiJWQ6IG5vdCByZWFkeTogb24gaG9sZCBmb3IgbW9yZSBidWZmZXJzLlxuIiwKKwkJCQkgY3R4LT5pZHgpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQlzdHJlYW1fZW5kID0gY3R4LT5iaXRfc3RyZWFtX3BhcmFtICYKKwkJCSAgICAgQ09EQV9CSVRfU1RSRUFNX0VORF9GTEFHOworCisJCW51bV9tZXRhcyA9IDA7CisJCWxpc3RfZm9yX2VhY2gobWV0YSwgJmN0eC0+YnVmZmVyX21ldGFfbGlzdCkKKwkJCW51bV9tZXRhcysrOworCisJCXNyY19idWZzID0gdjRsMl9tMm1fbnVtX3NyY19idWZzX3JlYWR5KGN0eC0+ZmgubTJtX2N0eCk7CisKKwkJaWYgKCFzdHJlYW1fZW5kICYmIChudW1fbWV0YXMgKyBzcmNfYnVmcykgPCAyKSB7CisJCQl2NGwyX2RiZygxLCBjb2RhX2RlYnVnLCAmY3R4LT5kZXYtPnY0bDJfZGV2LAorCQkJCSAiJWQ6IG5vdCByZWFkeTogbmVlZCAyIGJ1ZmZlcnMgYXZhaWxhYmxlICglZCwgJWQpXG4iLAorCQkJCSBjdHgtPmlkeCwgbnVtX21ldGFzLCBzcmNfYnVmcyk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisKKwkJaWYgKCF2NGwyX20ybV9udW1fc3JjX2J1ZnNfcmVhZHkoY3R4LT5maC5tMm1fY3R4KSAmJgorCQkgICAgIXN0cmVhbV9lbmQgJiYgKGNvZGFfZ2V0X2JpdHN0cmVhbV9wYXlsb2FkKGN0eCkgPCA1MTIpKSB7CisJCQl2NGwyX2RiZygxLCBjb2RhX2RlYnVnLCAmY3R4LT5kZXYtPnY0bDJfZGV2LAorCQkJCSAiJWQ6IG5vdCByZWFkeTogbm90IGVub3VnaCBiaXRzdHJlYW0gZGF0YSAoJWQpLlxuIiwKKwkJCQkgY3R4LT5pZHgsIGNvZGFfZ2V0X2JpdHN0cmVhbV9wYXlsb2FkKGN0eCkpOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlpZiAoY3R4LT5hYm9ydGluZykgewpAQCAtMTAyMywxMyArMTA2NiwxNCBAQAogCiBzdGF0aWMgdm9pZCBzZXRfZGVmYXVsdF9wYXJhbXMoc3RydWN0IGNvZGFfY3R4ICpjdHgpCiB7Ci0JdW5zaWduZWQgaW50IG1heF93LCBtYXhfaCwgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgbWF4X3csIG1heF9oLCB1c2l6ZSwgY3NpemU7CiAKIAljdHgtPmNvZGVjID0gY29kYV9maW5kX2NvZGVjKGN0eC0+ZGV2LCBjdHgtPmN2ZC0+c3JjX2Zvcm1hdHNbMF0sCiAJCQkJICAgICBjdHgtPmN2ZC0+ZHN0X2Zvcm1hdHNbMF0pOwogCW1heF93ID0gbWluKGN0eC0+Y29kZWMtPm1heF93LCAxOTIwVSk7CiAJbWF4X2ggPSBtaW4oY3R4LT5jb2RlYy0+bWF4X2gsIDEwODhVKTsKLQlzaXplID0gbWF4X3cgKiBtYXhfaCAqIDMgLyAyOworCXVzaXplID0gbWF4X3cgKiBtYXhfaCAqIDMgLyAyOworCWNzaXplID0gY29kYV9lc3RpbWF0ZV9zaXplaW1hZ2UoY3R4LCB1c2l6ZSwgbWF4X3csIG1heF9oKTsKIAogCWN0eC0+cGFyYW1zLmNvZGVjX21vZGUgPSBjdHgtPmNvZGVjLT5tb2RlOwogCWN0eC0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9SRUM3MDk7CkBAIC0xMDQ0LDE0ICsxMDg4LDE0IEBACiAJY3R4LT5xX2RhdGFbVjRMMl9NMk1fRFNUXS5oZWlnaHQgPSBtYXhfaDsKIAlpZiAoY3R4LT5jb2RlYy0+c3JjX2ZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfWVVWNDIwKSB7CiAJCWN0eC0+cV9kYXRhW1Y0TDJfTTJNX1NSQ10uYnl0ZXNwZXJsaW5lID0gbWF4X3c7Ci0JCWN0eC0+cV9kYXRhW1Y0TDJfTTJNX1NSQ10uc2l6ZWltYWdlID0gc2l6ZTsKKwkJY3R4LT5xX2RhdGFbVjRMMl9NMk1fU1JDXS5zaXplaW1hZ2UgPSB1c2l6ZTsKIAkJY3R4LT5xX2RhdGFbVjRMMl9NMk1fRFNUXS5ieXRlc3BlcmxpbmUgPSAwOwotCQljdHgtPnFfZGF0YVtWNEwyX00yTV9EU1RdLnNpemVpbWFnZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7CisJCWN0eC0+cV9kYXRhW1Y0TDJfTTJNX0RTVF0uc2l6ZWltYWdlID0gY3NpemU7CiAJfSBlbHNlIHsKIAkJY3R4LT5xX2RhdGFbVjRMMl9NMk1fU1JDXS5ieXRlc3BlcmxpbmUgPSAwOwotCQljdHgtPnFfZGF0YVtWNEwyX00yTV9TUkNdLnNpemVpbWFnZSA9IHJvdW5kX3VwKHNpemUsIFBBR0VfU0laRSk7CisJCWN0eC0+cV9kYXRhW1Y0TDJfTTJNX1NSQ10uc2l6ZWltYWdlID0gY3NpemU7CiAJCWN0eC0+cV9kYXRhW1Y0TDJfTTJNX0RTVF0uYnl0ZXNwZXJsaW5lID0gbWF4X3c7Ci0JCWN0eC0+cV9kYXRhW1Y0TDJfTTJNX0RTVF0uc2l6ZWltYWdlID0gc2l6ZTsKKwkJY3R4LT5xX2RhdGFbVjRMMl9NMk1fRFNUXS5zaXplaW1hZ2UgPSB1c2l6ZTsKIAl9CiAJY3R4LT5xX2RhdGFbVjRMMl9NMk1fU1JDXS5yZWN0LndpZHRoID0gbWF4X3c7CiAJY3R4LT5xX2RhdGFbVjRMMl9NMk1fU1JDXS5yZWN0LmhlaWdodCA9IG1heF9oOwpAQCAtMTA4MCw2ICsxMTI0LDcgQEAKIAkqbnBsYW5lcyA9IDE7CiAJc2l6ZXNbMF0gPSBzaXplOwogCisJLyogU2V0IHRvIHZiMi1kbWEtY29udGlnIGFsbG9jYXRvciBjb250ZXh0LCBpZ25vcmVkIGJ5IHZiMi12bWFsbG9jICovCiAJYWxsb2NfY3R4c1swXSA9IGN0eC0+ZGV2LT5hbGxvY19jdHg7CiAKIAl2NGwyX2RiZygxLCBjb2RhX2RlYnVnLCAmY3R4LT5kZXYtPnY0bDJfZGV2LApAQCAtMTEwOSw2ICsxMTU0LDcgQEAKIHN0YXRpYyB2b2lkIGNvZGFfYnVmX3F1ZXVlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikKIHsKIAlzdHJ1Y3QgY29kYV9jdHggKmN0eCA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7CisJc3RydWN0IHZiMl9xdWV1ZSAqdnEgPSB2Yi0+dmIyX3F1ZXVlOwogCXN0cnVjdCBjb2RhX3FfZGF0YSAqcV9kYXRhOwogCiAJcV9kYXRhID0gZ2V0X3FfZGF0YShjdHgsIHZiLT52YjJfcXVldWUtPnR5cGUpOwpAQCAtMTExNyw4ICsxMTYzLDcgQEAKIAkgKiBJbiB0aGUgZGVjb2RlciBjYXNlLCBpbW1lZGlhdGVseSB0cnkgdG8gY29weSB0aGUgYnVmZmVyIGludG8gdGhlCiAJICogYml0c3RyZWFtIHJpbmdidWZmZXIgYW5kIG1hcmsgaXQgYXMgcmVhZHkgdG8gYmUgZGVxdWV1ZWQuCiAJICovCi0JaWYgKGN0eC0+aW5zdF90eXBlID09IENPREFfSU5TVF9ERUNPREVSICYmCi0JICAgIHZiLT52YjJfcXVldWUtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpIHsKKwlpZiAoY3R4LT5iaXRzdHJlYW0uc2l6ZSAmJiB2cS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCkgewogCQkvKgogCQkgKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHF1ZXVpbmcgYW4gZW1wdHkgYnVmZmVyIG1hcmtzCiAJCSAqIHRoZSBzdHJlYW0gZW5kCkBAIC0xMjE4LDcgKzEyNjMsNyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIEFsbG93IEJJVCBkZWNvZGVyIGRldmljZV9ydW4gd2l0aCBubyBuZXcgYnVmZmVycyBxdWV1ZWQgKi8KLQlpZiAoY3R4LT5pbnN0X3R5cGUgPT0gQ09EQV9JTlNUX0RFQ09ERVIpCisJaWYgKGN0eC0+aW5zdF90eXBlID09IENPREFfSU5TVF9ERUNPREVSICYmIGN0eC0+dXNlX2JpdCkKIAkJdjRsMl9tMm1fc2V0X3NyY19idWZmZXJlZChjdHgtPmZoLm0ybV9jdHgsIHRydWUpOwogCiAJY3R4LT5nb3Bjb3VudGVyID0gY3R4LT5wYXJhbXMuZ29wX3NpemUgLSAxOwpAQCAtMTI3MSw3ICsxMzE2LDcgQEAKIAogCQljb2RhX2JpdF9zdHJlYW1fZW5kX2ZsYWcoY3R4KTsKIAotCQljdHgtPmlzZXF1ZW5jZSA9IDA7CisJCWN0eC0+cXNlcXVlbmNlID0gMDsKIAogCQl3aGlsZSAoKGJ1ZiA9IHY0bDJfbTJtX3NyY19idWZfcmVtb3ZlKGN0eC0+ZmgubTJtX2N0eCkpKQogCQkJdjRsMl9tMm1fYnVmX2RvbmUoYnVmLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsKQEAgLTEyOTAsNiArMTMzNSwxMCBAQAogCWlmICghY3R4LT5zdHJlYW1vbl9vdXQgJiYgIWN0eC0+c3RyZWFtb25fY2FwKSB7CiAJCXN0cnVjdCBjb2RhX2J1ZmZlcl9tZXRhICptZXRhOwogCisJCWlmIChjdHgtPm9wcy0+c2VxX2VuZF93b3JrKSB7CisJCQlxdWV1ZV93b3JrKGRldi0+d29ya3F1ZXVlLCAmY3R4LT5zZXFfZW5kX3dvcmspOworCQkJZmx1c2hfd29yaygmY3R4LT5zZXFfZW5kX3dvcmspOworCQl9CiAJCW11dGV4X2xvY2soJmN0eC0+Yml0c3RyZWFtX211dGV4KTsKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZjdHgtPmJ1ZmZlcl9tZXRhX2xpc3QpKSB7CiAJCQltZXRhID0gbGlzdF9maXJzdF9lbnRyeSgmY3R4LT5idWZmZXJfbWV0YV9saXN0LApAQCAtMTMwMCw2ICsxMzQ5LDcgQEAKIAkJbXV0ZXhfdW5sb2NrKCZjdHgtPmJpdHN0cmVhbV9tdXRleCk7CiAJCWtmaWZvX2luaXQoJmN0eC0+Yml0c3RyZWFtX2ZpZm8sCiAJCQljdHgtPmJpdHN0cmVhbS52YWRkciwgY3R4LT5iaXRzdHJlYW0uc2l6ZSk7CisJCWN0eC0+aW5pdGlhbGl6ZWQgPSAwOwogCQljdHgtPnJ1bmNvdW50ZXIgPSAwOwogCQljdHgtPmFib3J0aW5nID0gMDsKIAl9CkBAIC0xNTIxLDggKzE1NzEsOCBAQAogCWludCByZXQ7CiAKIAlzcmNfdnEtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDsKLQlzcmNfdnEtPmlvX21vZGVzID0gVkIyX0RNQUJVRiB8IFZCMl9NTUFQOwotCXNyY192cS0+bWVtX29wcyA9ICZ2YjJfZG1hX2NvbnRpZ19tZW1vcHM7CisJc3JjX3ZxLT5pb19tb2RlcyA9IFZCMl9ETUFCVUYgfCBWQjJfTU1BUCB8IFZCMl9VU0VSUFRSOworCXNyY192cS0+bWVtX29wcyA9ICZ2YjJfdm1hbGxvY19tZW1vcHM7CiAKIAlyZXQgPSBjb2RhX3F1ZXVlX2luaXQocHJpdiwgc3JjX3ZxKTsKIAlpZiAocmV0KQpAQCAtMTU3Nyw5ICsxNjI3LDExIEBACiAJY3R4LT5jdmQgPSB0b19jb2RhX3ZpZGVvX2RldmljZSh2ZGV2KTsKIAljdHgtPmluc3RfdHlwZSA9IGN0eC0+Y3ZkLT50eXBlOwogCWN0eC0+b3BzID0gY3R4LT5jdmQtPm9wczsKKwljdHgtPnVzZV9iaXQgPSAhY3R4LT5jdmQtPmRpcmVjdDsKIAlpbml0X2NvbXBsZXRpb24oJmN0eC0+Y29tcGxldGlvbik7CiAJSU5JVF9XT1JLKCZjdHgtPnBpY19ydW5fd29yaywgY29kYV9waWNfcnVuX3dvcmspOwotCUlOSVRfV09SSygmY3R4LT5zZXFfZW5kX3dvcmssIGN0eC0+b3BzLT5zZXFfZW5kX3dvcmspOworCWlmIChjdHgtPm9wcy0+c2VxX2VuZF93b3JrKQorCQlJTklUX1dPUksoJmN0eC0+c2VxX2VuZF93b3JrLCBjdHgtPm9wcy0+c2VxX2VuZF93b3JrKTsKIAl2NGwyX2ZoX2luaXQoJmN0eC0+ZmgsIHZpZGVvX2RldmRhdGEoZmlsZSkpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9ICZjdHgtPmZoOwogCXY0bDJfZmhfYWRkKCZjdHgtPmZoKTsKQEAgLTE2MzAsMjIgKzE2ODIsMjUgQEAKIAogCWN0eC0+ZmguY3RybF9oYW5kbGVyID0gJmN0eC0+Y3RybHM7CiAKLQlyZXQgPSBjb2RhX2FsbG9jX2NvbnRleHRfYnVmKGN0eCwgJmN0eC0+cGFyYWJ1ZiwKLQkJCQkgICAgIENPREFfUEFSQV9CVUZfU0laRSwgInBhcmFidWYiKTsKLQlpZiAocmV0IDwgMCkgewotCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBwYXJhYnVmIik7Ci0JCWdvdG8gZXJyX2RtYV9hbGxvYzsKKwlpZiAoY3R4LT51c2VfYml0KSB7CisJCXJldCA9IGNvZGFfYWxsb2NfY29udGV4dF9idWYoY3R4LCAmY3R4LT5wYXJhYnVmLAorCQkJCQkgICAgIENPREFfUEFSQV9CVUZfU0laRSwgInBhcmFidWYiKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHBhcmFidWYiKTsKKwkJCWdvdG8gZXJyX2RtYV9hbGxvYzsKKwkJfQogCX0KLQotCWN0eC0+Yml0c3RyZWFtLnNpemUgPSBDT0RBX01BWF9GUkFNRV9TSVpFOwotCWN0eC0+Yml0c3RyZWFtLnZhZGRyID0gZG1hX2FsbG9jX3dyaXRlY29tYmluZSgKLQkJCSZkZXYtPnBsYXRfZGV2LT5kZXYsIGN0eC0+Yml0c3RyZWFtLnNpemUsCi0JCQkmY3R4LT5iaXRzdHJlYW0ucGFkZHIsIEdGUF9LRVJORUwpOwotCWlmICghY3R4LT5iaXRzdHJlYW0udmFkZHIpIHsKLQkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsCi0JCQkgImZhaWxlZCB0byBhbGxvY2F0ZSBiaXRzdHJlYW0gcmluZ2J1ZmZlciIpOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9kbWFfd3JpdGVjb21iaW5lOworCWlmIChjdHgtPnVzZV9iaXQgJiYgY3R4LT5pbnN0X3R5cGUgPT0gQ09EQV9JTlNUX0RFQ09ERVIpIHsKKwkJY3R4LT5iaXRzdHJlYW0uc2l6ZSA9IENPREFfTUFYX0ZSQU1FX1NJWkU7CisJCWN0eC0+Yml0c3RyZWFtLnZhZGRyID0gZG1hX2FsbG9jX3dyaXRlY29tYmluZSgKKwkJCQkmZGV2LT5wbGF0X2Rldi0+ZGV2LCBjdHgtPmJpdHN0cmVhbS5zaXplLAorCQkJCSZjdHgtPmJpdHN0cmVhbS5wYWRkciwgR0ZQX0tFUk5FTCk7CisJCWlmICghY3R4LT5iaXRzdHJlYW0udmFkZHIpIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LAorCQkJCSAiZmFpbGVkIHRvIGFsbG9jYXRlIGJpdHN0cmVhbSByaW5nYnVmZmVyIik7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBlcnJfZG1hX3dyaXRlY29tYmluZTsKKwkJfQogCX0KIAlrZmlmb19pbml0KCZjdHgtPmJpdHN0cmVhbV9maWZvLAogCQljdHgtPmJpdHN0cmVhbS52YWRkciwgY3R4LT5iaXRzdHJlYW0uc2l6ZSk7CkBAIC0xNjkzLDE2ICsxNzQ4LDE0IEBACiAJdjRsMl9kYmcoMSwgY29kYV9kZWJ1ZywgJmRldi0+djRsMl9kZXYsICJSZWxlYXNpbmcgaW5zdGFuY2UgJXBcbiIsCiAJCSBjdHgpOwogCi0JZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGN0eC0+ZGVidWdmc19lbnRyeSk7Ci0KLQlpZiAoY3R4LT5pbnN0X3R5cGUgPT0gQ09EQV9JTlNUX0RFQ09ERVIpCisJaWYgKGN0eC0+aW5zdF90eXBlID09IENPREFfSU5TVF9ERUNPREVSICYmIGN0eC0+dXNlX2JpdCkKIAkJY29kYV9iaXRfc3RyZWFtX2VuZF9mbGFnKGN0eCk7CiAKIAkvKiBJZiB0aGlzIGluc3RhbmNlIGlzIHJ1bm5pbmcsIGNhbGwgLmpvYl9hYm9ydCBhbmQgd2FpdCBmb3IgaXQgdG8gZW5kICovCiAJdjRsMl9tMm1fY3R4X3JlbGVhc2UoY3R4LT5maC5tMm1fY3R4KTsKIAogCS8qIEluIGNhc2UgdGhlIGluc3RhbmNlIHdhcyBub3QgcnVubmluZywgd2Ugc3RpbGwgbmVlZCB0byBjYWxsIFNFUV9FTkQgKi8KLQlpZiAoY3R4LT5pbml0aWFsaXplZCkgeworCWlmIChjdHgtPmluaXRpYWxpemVkICYmIGN0eC0+b3BzLT5zZXFfZW5kX3dvcmspIHsKIAkJcXVldWVfd29yayhkZXYtPndvcmtxdWV1ZSwgJmN0eC0+c2VxX2VuZF93b3JrKTsKIAkJZmx1c2hfd29yaygmY3R4LT5zZXFfZW5kX3dvcmspOwogCX0KQEAgLTE3MjgsNiArMTc4MSw3IEBACiAJY2xlYXJfYml0KGN0eC0+aWR4LCAmZGV2LT5pbnN0YW5jZV9tYXNrKTsKIAlpZiAoY3R4LT5vcHMtPnJlbGVhc2UpCiAJCWN0eC0+b3BzLT5yZWxlYXNlKGN0eCk7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGN0eC0+ZGVidWdmc19lbnRyeSk7CiAJa2ZyZWUoY3R4KTsKIAogCXJldHVybiAwOwpAQCAtMTg0NCwxMCArMTg5OCwxMSBAQAogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCA9ICZkZXYtPnZmZFtpXTsKIAotCWlmIChpID4gQVJSQVlfU0laRShkZXYtPnZmZCkpCisJaWYgKGkgPj0gZGV2LT5kZXZ0eXBlLT5udW1fdmRldnMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgZGV2LT5kZXZ0eXBlLT52ZGV2c1tpXS0+bmFtZSk7CisJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIiVzIiwKKwkJIGRldi0+ZGV2dHlwZS0+dmRldnNbaV0tPm5hbWUpOwogCXZmZC0+Zm9wcwk9ICZjb2RhX2ZvcHM7CiAJdmZkLT5pb2N0bF9vcHMJPSAmY29kYV9pb2N0bF9vcHM7CiAJdmZkLT5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCkBAIC0yMDAxLDcgKzIwNTYsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBjb2RhX3BsYXRmb3JtX2lkc1tdID0gewogCXsgLm5hbWUgPSAiY29kYS1pbXgyNyIsIC5kcml2ZXJfZGF0YSA9IENPREFfSU1YMjcgfSwKLQl7IC5uYW1lID0gImNvZGEtaW14NTMiLCAuZHJpdmVyX2RhdGEgPSBDT0RBX0lNWDUzIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwbGF0Zm9ybSwgY29kYV9wbGF0Zm9ybV9pZHMpOwpAQCAtMjE0Miw2ICsyMTk2LDcgQEAKIAlpZiAoIWRldi0+aXJhbS52YWRkcikgewogCQlkZXZfd2FybigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGFsbG9jIGlyYW1cbiIpOwogCX0gZWxzZSB7CisJCW1lbXNldChkZXYtPmlyYW0udmFkZHIsIDAsIGRldi0+aXJhbS5zaXplKTsKIAkJZGV2LT5pcmFtLmJsb2IuZGF0YSA9IGRldi0+aXJhbS52YWRkcjsKIAkJZGV2LT5pcmFtLmJsb2Iuc2l6ZSA9IGRldi0+aXJhbS5zaXplOwogCQlkZXYtPmlyYW0uZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfYmxvYigiaXJhbSIsIDA2NDQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NvZGEvY29kYS5oIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9jb2RhL2NvZGEuaAppbmRleCA1ZGQ0N2U1Li4wYzM1Y2Q1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9jb2RhL2NvZGEuaAorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NvZGEvY29kYS5oCkBAIC0xOTgsNyArMTk4LDYgQEAKIAlpbnQJCQkJaW5pdGlhbGl6ZWQ7CiAJaW50CQkJCXN0cmVhbW9uX291dDsKIAlpbnQJCQkJc3RyZWFtb25fY2FwOwotCXUzMgkJCQlpc2VxdWVuY2U7CiAJdTMyCQkJCXFzZXF1ZW5jZTsKIAl1MzIJCQkJb3NlcXVlbmNlOwogCXUzMgkJCQlzZXF1ZW5jZV9vZmZzZXQ7CkBAIC0yMzYsNiArMjM1LDcgQEAKIAl1MzIJCQkJZnJhbWVfbWVtX2N0cmw7CiAJaW50CQkJCWRpc3BsYXlfaWR4OwogCXN0cnVjdCBkZW50cnkJCQkqZGVidWdmc19lbnRyeTsKKwlib29sCQkJCXVzZV9iaXQ7CiB9OwogCiBleHRlcm4gaW50IGNvZGFfZGVidWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NvZGEvY29kYV9yZWdzLmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2NvZGEvY29kYV9yZWdzLmgKaW5kZXggOGUwMTViOC4uN2QwMjYyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9jb2RhL2NvZGFfcmVncy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vY29kYS9jb2RhX3JlZ3MuaApAQCAtMzA0LDkgKzMwNCw5IEBACiAjZGVmaW5lCQlDT0RBX1JBVEVDT05UUk9MX0FVVE9TS0lQX09GRlNFVAkJMzEKICNkZWZpbmUJCUNPREFfUkFURUNPTlRST0xfQVVUT1NLSVBfTUFTSwkJCTB4MDEKICNkZWZpbmUJCUNPREFfUkFURUNPTlRST0xfSU5JVElBTERFTEFZX09GRlNFVAkJMTYKLSNkZWZpbmUJCUNPREFfUkFURUNPTlRST0xfSU5JVElBTERFTEFZX01BU0sJCTB4N2YKKyNkZWZpbmUJCUNPREFfUkFURUNPTlRST0xfSU5JVElBTERFTEFZX01BU0sJCTB4N2ZmZgogI2RlZmluZQkJQ09EQV9SQVRFQ09OVFJPTF9CSVRSQVRFX09GRlNFVAkJMQotI2RlZmluZQkJQ09EQV9SQVRFQ09OVFJPTF9CSVRSQVRFX01BU0sJCQkweDdmCisjZGVmaW5lCQlDT0RBX1JBVEVDT05UUk9MX0JJVFJBVEVfTUFTSwkJCTB4N2ZmZgogI2RlZmluZQkJQ09EQV9SQVRFQ09OVFJPTF9FTkFCTEVfT0ZGU0VUCQkJMAogI2RlZmluZQkJQ09EQV9SQVRFQ09OVFJPTF9FTkFCTEVfTUFTSwkJCTB4MDEKICNkZWZpbmUgQ09EQV9DTURfRU5DX1NFUV9SQ19CVUZfU0laRQkJCQkweDFiMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9kYXZpbmNpL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2RhdmluY2kvS2NvbmZpZwppbmRleCBkOWUxZGRiLi40NjllOWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2RhdmluY2kvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2RhdmluY2kvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBWSURFT19EQVZJTkNJX1ZQSUZfRElTUExBWQogCXRyaXN0YXRlICJUSSBEYVZpbmNpIFZQSUYgVjRMMi1EaXNwbGF5IGRyaXZlciIKLQlkZXBlbmRzIG9uIFZJREVPX0RFVgorCWRlcGVuZHMgb24gVklERU9fVjRMMgogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJIHx8IENPTVBJTEVfVEVTVAogCWRlcGVuZHMgb24gSEFTX0RNQQogCXNlbGVjdCBWSURFT0JVRjJfRE1BX0NPTlRJRwpAQCAtMTYsNyArMTYsNyBAQAogCiBjb25maWcgVklERU9fREFWSU5DSV9WUElGX0NBUFRVUkUKIAl0cmlzdGF0ZSAiVEkgRGFWaW5jaSBWUElGIHZpZGVvIGNhcHR1cmUgZHJpdmVyIgotCWRlcGVuZHMgb24gVklERU9fREVWCisJZGVwZW5kcyBvbiBWSURFT19WNEwyCiAJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0kgfHwgQ09NUElMRV9URVNUCiAJZGVwZW5kcyBvbiBIQVNfRE1BCiAJc2VsZWN0IFZJREVPQlVGMl9ETUFfQ09OVElHCkBAIC03NSw3ICs3NSw3IEBACiAKIGNvbmZpZyBWSURFT19EQVZJTkNJX1ZQQkVfRElTUExBWQogCXRyaXN0YXRlICJUSSBEYVZpbmNpIFZQQkUgVjRMMi1EaXNwbGF5IGRyaXZlciIKLQlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSQorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBBUkNIX0RBVklOQ0kKIAlkZXBlbmRzIG9uIEhBU19ETUEKIAlzZWxlY3QgVklERU9CVUYyX0RNQV9DT05USUcKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2V4eW5vcy1nc2MvZ3NjLWNvcmUuaCBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vZXh5bm9zLWdzYy9nc2MtY29yZS5oCmluZGV4IDBhYmRiMTcuLmZhNTcyYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vZXh5bm9zLWdzYy9nc2MtY29yZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vZXh5bm9zLWdzYy9nc2MtY29yZS5oCkBAIC00NjYsMTggKzQ2Niw2IEBACiAJd3JpdGVsKGNmZywgZGV2LT5yZWdzICsgR1NDX0lSUSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnc2NfbG9jayhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkKLXsKLQlzdHJ1Y3QgZ3NjX2N0eCAqY3R4ID0gdmIyX2dldF9kcnZfcHJpdih2cSk7Ci0JbXV0ZXhfbG9jaygmY3R4LT5nc2NfZGV2LT5sb2NrKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdzY191bmxvY2soc3RydWN0IHZiMl9xdWV1ZSAqdnEpCi17Ci0Jc3RydWN0IGdzY19jdHggKmN0eCA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOwotCW11dGV4X3VubG9jaygmY3R4LT5nc2NfZGV2LT5sb2NrKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGdzY19jdHhfc3RhdGVfaXNfc2V0KHUzMiBtYXNrLCBzdHJ1Y3QgZ3NjX2N0eCAqY3R4KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2V4eW5vcy1nc2MvZ3NjLW0ybS5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9leHlub3MtZ3NjL2dzYy1tMm0uYwppbmRleCA3NGUxZGU2Li5kNWNmZmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2V4eW5vcy1nc2MvZ3NjLW0ybS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vZXh5bm9zLWdzYy9nc2MtbTJtLmMKQEAgLTI2Nyw4ICsyNjcsOCBAQAogCS5xdWV1ZV9zZXR1cAkgPSBnc2NfbTJtX3F1ZXVlX3NldHVwLAogCS5idWZfcHJlcGFyZQkgPSBnc2NfbTJtX2J1Zl9wcmVwYXJlLAogCS5idWZfcXVldWUJID0gZ3NjX20ybV9idWZfcXVldWUsCi0JLndhaXRfcHJlcGFyZQkgPSBnc2NfdW5sb2NrLAotCS53YWl0X2ZpbmlzaAkgPSBnc2NfbG9jaywKKwkud2FpdF9wcmVwYXJlCSA9IHZiMl9vcHNfd2FpdF9wcmVwYXJlLAorCS53YWl0X2ZpbmlzaAkgPSB2YjJfb3BzX3dhaXRfZmluaXNoLAogCS5zdG9wX3N0cmVhbWluZwkgPSBnc2NfbTJtX3N0b3Bfc3RyZWFtaW5nLAogCS5zdGFydF9zdHJlYW1pbmcgPSBnc2NfbTJtX3N0YXJ0X3N0cmVhbWluZywKIH07CkBAIC01OTAsNiArNTkwLDcgQEAKIAlzcmNfdnEtPm1lbV9vcHMgPSAmdmIyX2RtYV9jb250aWdfbWVtb3BzOwogCXNyY192cS0+YnVmX3N0cnVjdF9zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX20ybV9idWZmZXIpOwogCXNyY192cS0+dGltZXN0YW1wX2ZsYWdzID0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfQ09QWTsKKwlzcmNfdnEtPmxvY2sgPSAmY3R4LT5nc2NfZGV2LT5sb2NrOwogCiAJcmV0ID0gdmIyX3F1ZXVlX2luaXQoc3JjX3ZxKTsKIAlpZiAocmV0KQpAQCAtNjAzLDYgKzYwNCw3IEBACiAJZHN0X3ZxLT5tZW1fb3BzID0gJnZiMl9kbWFfY29udGlnX21lbW9wczsKIAlkc3RfdnEtPmJ1Zl9zdHJ1Y3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9tMm1fYnVmZmVyKTsKIAlkc3RfdnEtPnRpbWVzdGFtcF9mbGFncyA9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX0NPUFk7CisJZHN0X3ZxLT5sb2NrID0gJmN0eC0+Z3NjX2Rldi0+bG9jazsKIAogCXJldHVybiB2YjJfcXVldWVfaW5pdChkc3RfdnEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tYXJ2ZWxsLWNjaWMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vbWFydmVsbC1jY2ljL0tjb25maWcKaW5kZXggNjI2NWQzNi4uNGJmNWJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tYXJ2ZWxsLWNjaWMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL21hcnZlbGwtY2NpYy9LY29uZmlnCkBAIC01LDYgKzUsNyBAQAogCXNlbGVjdCBWSURFT19PVjc2NzAKIAlzZWxlY3QgVklERU9CVUYyX1ZNQUxMT0MKIAlzZWxlY3QgVklERU9CVUYyX0RNQV9DT05USUcKKwlzZWxlY3QgVklERU9CVUYyX0RNQV9TRwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eDIgZHJpdmVyIGZvciB0aGUgTWFydmVsbCA4OEFMUDAxIGludGVncmF0ZWQKIAkgIENNT1MgY2FtZXJhIGNvbnRyb2xsZXIuICBUaGlzIGlzIHRoZSBjb250cm9sbGVyIGZvdW5kIG9uIGZpcnN0LQpAQCAtMTMsNyArMTQsNyBAQAogY29uZmlnIFZJREVPX01NUF9DQU1FUkEKIAl0cmlzdGF0ZSAiTWFydmVsbCBBcm1hZGEgNjEwIGludGVncmF0ZWQgY2FtZXJhIGNvbnRyb2xsZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfTU1QICYmIEkyQyAmJiBWSURFT19WNEwyCi0JZGVwZW5kcyBvbiBIQVNfRE1BCisJZGVwZW5kcyBvbiBIQVNfRE1BICYmIEJST0tFTgogCXNlbGVjdCBWSURFT19PVjc2NzAKIAlzZWxlY3QgSTJDX0dQSU8KIAlzZWxlY3QgVklERU9CVUYyX0RNQV9TRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9tYXJ2ZWxsLWNjaWMvbWNhbS1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL21hcnZlbGwtY2NpYy9tY2FtLWNvcmUuYwppbmRleCAxOTMzNzNmLi5kZDViMTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL21hcnZlbGwtY2NpYy9tY2FtLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL21hcnZlbGwtY2NpYy9tY2FtLWNvcmUuYwpAQCAtMTkxMyw3ICsxOTEzLDYgQEAKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7CiAJY2FtLT52ZGV2ID0gbWNhbV92NGxfdGVtcGxhdGU7Ci0JY2FtLT52ZGV2LmRlYnVnID0gMDsKIAljYW0tPnZkZXYudjRsMl9kZXYgPSAmY2FtLT52NGwyX2RldjsKIAl2aWRlb19zZXRfZHJ2ZGF0YSgmY2FtLT52ZGV2LCBjYW0pOwogCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FtLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL29tYXAzaXNwL2lzcC5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9vbWFwM2lzcC9pc3AuYwppbmRleCA1MWMyMTI5Li5kZWNhODA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL29tYXAzaXNwL2lzcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vb21hcDNpc3AvaXNwLmMKQEAgLTIyMCw2ICsyMjAsOSBAQAogCQlyZXR1cm4gSVNQVENUUkxfQ1RSTF9ESVZfQllQQVNTOwogCX0KIAorCWlmICgqcmF0ZSA9PSAwKQorCQkqcmF0ZSA9IDE7CisKIAlkaXZpZGVyID0gRElWX1JPVU5EX0NMT1NFU1QocGFyZW50X3JhdGUsICpyYXRlKTsKIAlpZiAoZGl2aWRlciA+PSBJU1BUQ1RSTF9DVFJMX0RJVl9CWVBBU1MpCiAJCWRpdmlkZXIgPSBJU1BUQ1RSTF9DVFJMX0RJVl9CWVBBU1MgLSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zM2MtY2FtaWYvY2FtaWYtY2FwdHVyZS5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zM2MtY2FtaWYvY2FtaWYtY2FwdHVyZS5jCmluZGV4IGFhNDBjODIuLjU0NDc5ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczNjLWNhbWlmL2NhbWlmLWNhcHR1cmUuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3MzYy1jYW1pZi9jYW1pZi1jYXB0dXJlLmMKQEAgLTUzNiwyNCArNTM2LDEyIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FtaWYtPnNsb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGNhbWlmX2xvY2soc3RydWN0IHZiMl9xdWV1ZSAqdnEpCi17Ci0Jc3RydWN0IGNhbWlmX3ZwICp2cCA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOwotCW11dGV4X2xvY2soJnZwLT5jYW1pZi0+bG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNhbWlmX3VubG9jayhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkKLXsKLQlzdHJ1Y3QgY2FtaWZfdnAgKnZwID0gdmIyX2dldF9kcnZfcHJpdih2cSk7Ci0JbXV0ZXhfdW5sb2NrKCZ2cC0+Y2FtaWYtPmxvY2spOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZiMl9vcHMgczNjX2NhbWlmX3FvcHMgPSB7CiAJLnF1ZXVlX3NldHVwCSA9IHF1ZXVlX3NldHVwLAogCS5idWZfcHJlcGFyZQkgPSBidWZmZXJfcHJlcGFyZSwKIAkuYnVmX3F1ZXVlCSA9IGJ1ZmZlcl9xdWV1ZSwKLQkud2FpdF9wcmVwYXJlCSA9IGNhbWlmX3VubG9jaywKLQkud2FpdF9maW5pc2gJID0gY2FtaWZfbG9jaywKKwkud2FpdF9wcmVwYXJlCSA9IHZiMl9vcHNfd2FpdF9wcmVwYXJlLAorCS53YWl0X2ZpbmlzaAkgPSB2YjJfb3BzX3dhaXRfZmluaXNoLAogCS5zdGFydF9zdHJlYW1pbmcgPSBzdGFydF9zdHJlYW1pbmcsCiAJLnN0b3Bfc3RyZWFtaW5nCSA9IHN0b3Bfc3RyZWFtaW5nLAogfTsKQEAgLTExNjEsNiArMTE0OSw3IEBACiAJcS0+YnVmX3N0cnVjdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBjYW1pZl9idWZmZXIpOwogCXEtPmRydl9wcml2ID0gdnA7CiAJcS0+dGltZXN0YW1wX2ZsYWdzID0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDOworCXEtPmxvY2sgPSAmdnAtPmNhbWlmLT5sb2NrOwogCiAJcmV0ID0gdmIyX3F1ZXVlX2luaXQocSk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczVwLWcyZC9nMmQuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczVwLWcyZC9nMmQuYwppbmRleCA0N2JhOGZiLi5lYzNlMTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3M1cC1nMmQvZzJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtZzJkL2cyZC5jCkBAIC0xMiw3ICsxMiw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtbWZjL3M1cF9tZmMuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczVwLW1mYy9zNXBfbWZjLmMKaW5kZXggZmJmZGYwMy4uOGU0NGE1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtbWZjL3M1cF9tZmMuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3M1cC1tZmMvczVwX21mYy5jCkBAIC04MTAsNiArODEwLDcgQEAKIAlxID0gJmN0eC0+dnFfZHN0OwogCXEtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FOwogCXEtPmRydl9wcml2ID0gJmN0eC0+Zmg7CisJcS0+bG9jayA9ICZkZXYtPm1mY19tdXRleDsKIAlpZiAodmRldiA9PSBkZXYtPnZmZF9kZWMpIHsKIAkJcS0+aW9fbW9kZXMgPSBWQjJfTU1BUDsKIAkJcS0+b3BzID0gZ2V0X2RlY19xdWV1ZV9vcHMoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczVwLW1mYy9zNXBfbWZjX2RlYy5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtbWZjL3M1cF9tZmNfZGVjLmMKaW5kZXggYzZjMzQ1Mi4uYWViZTRmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtbWZjL3M1cF9tZmNfZGVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtbWZjL3M1cF9tZmNfZGVjLmMKQEAgLTE4LDcgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPgpAQCAtODEzLDcgKzgxMiw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXN3aXRjaCAoY21kLT5jbWQpIHsKLQljYXNlIFY0TDJfRU5DX0NNRF9TVE9QOgorCWNhc2UgVjRMMl9ERUNfQ01EX1NUT1A6CiAJCWlmIChjbWQtPmZsYWdzICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtOTQ0LDIyICs5NDMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBzNXBfbWZjX3VubG9jayhzdHJ1Y3QgdmIyX3F1ZXVlICpxKQotewotCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KHEtPmRydl9wcml2KTsKLQlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OwotCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPm1mY19tdXRleCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHM1cF9tZmNfbG9jayhzdHJ1Y3QgdmIyX3F1ZXVlICpxKQotewotCXN0cnVjdCBzNXBfbWZjX2N0eCAqY3R4ID0gZmhfdG9fY3R4KHEtPmRydl9wcml2KTsKLQlzdHJ1Y3QgczVwX21mY19kZXYgKmRldiA9IGN0eC0+ZGV2OwotCi0JbXV0ZXhfbG9jaygmZGV2LT5tZmNfbXV0ZXgpOwotfQotCiBzdGF0aWMgaW50IHM1cF9tZmNfYnVmX2luaXQoc3RydWN0IHZiMl9idWZmZXIgKnZiKQogewogCXN0cnVjdCB2YjJfcXVldWUgKnZxID0gdmItPnZiMl9xdWV1ZTsKQEAgLTExMDcsOCArMTA5MCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdmIyX29wcyBzNXBfbWZjX2RlY19xb3BzID0gewogCS5xdWV1ZV9zZXR1cAkJPSBzNXBfbWZjX3F1ZXVlX3NldHVwLAotCS53YWl0X3ByZXBhcmUJCT0gczVwX21mY191bmxvY2ssCi0JLndhaXRfZmluaXNoCQk9IHM1cF9tZmNfbG9jaywKKwkud2FpdF9wcmVwYXJlCQk9IHZiMl9vcHNfd2FpdF9wcmVwYXJlLAorCS53YWl0X2ZpbmlzaAkJPSB2YjJfb3BzX3dhaXRfZmluaXNoLAogCS5idWZfaW5pdAkJPSBzNXBfbWZjX2J1Zl9pbml0LAogCS5zdGFydF9zdHJlYW1pbmcJPSBzNXBfbWZjX3N0YXJ0X3N0cmVhbWluZywKIAkuc3RvcF9zdHJlYW1pbmcJCT0gczVwX21mY19zdG9wX3N0cmVhbWluZywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczVwLW1mYy9zNXBfbWZjX2VuYy5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtbWZjL3M1cF9tZmNfZW5jLmMKaW5kZXggYmQ2NGYxZC4uZTY1OTkzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtbWZjL3M1cF9tZmNfZW5jLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtbWZjL3M1cF9tZmNfZW5jLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CkBAIC0xODY3LDIyICsxODY2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgczVwX21mY191bmxvY2soc3RydWN0IHZiMl9xdWV1ZSAqcSkKLXsKLQlzdHJ1Y3QgczVwX21mY19jdHggKmN0eCA9IGZoX3RvX2N0eChxLT5kcnZfcHJpdik7Ci0Jc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKLQotCW11dGV4X3VubG9jaygmZGV2LT5tZmNfbXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZCBzNXBfbWZjX2xvY2soc3RydWN0IHZiMl9xdWV1ZSAqcSkKLXsKLQlzdHJ1Y3QgczVwX21mY19jdHggKmN0eCA9IGZoX3RvX2N0eChxLT5kcnZfcHJpdik7Ci0Jc3RydWN0IHM1cF9tZmNfZGV2ICpkZXYgPSBjdHgtPmRldjsKLQotCW11dGV4X2xvY2soJmRldi0+bWZjX211dGV4KTsKLX0KLQogc3RhdGljIGludCBzNXBfbWZjX2J1Zl9pbml0KHN0cnVjdCB2YjJfYnVmZmVyICp2YikKIHsKIAlzdHJ1Y3QgdmIyX3F1ZXVlICp2cSA9IHZiLT52YjJfcXVldWU7CkBAIC0yMDUyLDggKzIwMzUsOCBAQAogCiBzdGF0aWMgc3RydWN0IHZiMl9vcHMgczVwX21mY19lbmNfcW9wcyA9IHsKIAkucXVldWVfc2V0dXAJCT0gczVwX21mY19xdWV1ZV9zZXR1cCwKLQkud2FpdF9wcmVwYXJlCQk9IHM1cF9tZmNfdW5sb2NrLAotCS53YWl0X2ZpbmlzaAkJPSBzNXBfbWZjX2xvY2ssCisJLndhaXRfcHJlcGFyZQkJPSB2YjJfb3BzX3dhaXRfcHJlcGFyZSwKKwkud2FpdF9maW5pc2gJCT0gdmIyX29wc193YWl0X2ZpbmlzaCwKIAkuYnVmX2luaXQJCT0gczVwX21mY19idWZfaW5pdCwKIAkuYnVmX3ByZXBhcmUJCT0gczVwX21mY19idWZfcHJlcGFyZSwKIAkuc3RhcnRfc3RyZWFtaW5nCT0gczVwX21mY19zdGFydF9zdHJlYW1pbmcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3M1cC1tZmMvczVwX21mY19vcHJfdjYuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczVwLW1mYy9zNXBfbWZjX29wcl92Ni5jCmluZGV4IDlhZWExNzkuLmQ4MjZjNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczVwLW1mYy9zNXBfbWZjX29wcl92Ni5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczVwLW1mYy9zNXBfbWZjX29wcl92Ni5jCkBAIC0xMzQwLDExICsxMzQwLDcgQEAKIAkvKiBGTU9fQVNPX0NUUkwgLSAwOiBFbmFibGUsIDE6IERpc2FibGUgKi8KIAlyZWcgfD0gKGZtb19hc29fY3RybCA8PCBTNVBfRklNVl9EX09QVF9GTU9fQVNPX0NUUkxfTUFTS19WNik7CiAKLQkvKiBXaGVuIHVzZXIgc2V0cyBkZXNwbGF5X2RlbGF5IHRvIDAsCi0JICogSXQgd29ya3MgYXMgImRpc3BsYXlfZGVsYXkgZW5hYmxlIiBhbmQgZGVsYXkgc2V0IHRvIDAuCi0JICogSWYgdXNlciB3YW50cyBkaXNwbGF5X2RlbGF5IGRpc2FibGUsIEl0IHNob3VsZCBiZQotCSAqIHNldCB0byBuZWdhdGl2ZSB2YWx1ZS4gKi8KLQlpZiAoY3R4LT5kaXNwbGF5X2RlbGF5ID49IDApIHsKKwlpZiAoY3R4LT5kaXNwbGF5X2RlbGF5X2VuYWJsZSkgewogCQlyZWcgfD0gKDB4MSA8PCBTNVBfRklNVl9EX09QVF9EREVMQVlfRU5fU0hJRlRfVjYpOwogCQl3cml0ZWwoY3R4LT5kaXNwbGF5X2RlbGF5LCBtZmNfcmVncy0+ZF9kaXNwbGF5X2RlbGF5KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3M1cC10di9taXhlcl92aWRlby5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zNXAtdHYvbWl4ZXJfdmlkZW8uYwppbmRleCBiNGQyNjk2Li43MmQ0ZjJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3M1cC10di9taXhlcl92aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vczVwLXR2L21peGVyX3ZpZGVvLmMKQEAgLTkyNiwyMiArOTI2LDYgQEAKIAlteHJfZGJnKG1kZXYsICJxdWV1aW5nIGJ1ZmZlclxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIHdhaXRfbG9jayhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkKLXsKLQlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOwotCi0JbXhyX2RiZyhsYXllci0+bWRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7Ci0JbXV0ZXhfbG9jaygmbGF5ZXItPm11dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgd2FpdF91bmxvY2soc3RydWN0IHZiMl9xdWV1ZSAqdnEpCi17Ci0Jc3RydWN0IG14cl9sYXllciAqbGF5ZXIgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsKLQotCW14cl9kYmcobGF5ZXItPm1kZXYsICIlc1xuIiwgX19mdW5jX18pOwotCW11dGV4X3VubG9jaygmbGF5ZXItPm11dGV4KTsKLX0KLQogc3RhdGljIGludCBzdGFydF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgbXhyX2xheWVyICpsYXllciA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOwpAQCAtMTA0MCw4ICsxMDI0LDggQEAKIHN0YXRpYyBzdHJ1Y3QgdmIyX29wcyBteHJfdmlkZW9fcW9wcyA9IHsKIAkucXVldWVfc2V0dXAgPSBxdWV1ZV9zZXR1cCwKIAkuYnVmX3F1ZXVlID0gYnVmX3F1ZXVlLAotCS53YWl0X3ByZXBhcmUgPSB3YWl0X3VubG9jaywKLQkud2FpdF9maW5pc2ggPSB3YWl0X2xvY2ssCisJLndhaXRfcHJlcGFyZSA9IHZiMl9vcHNfd2FpdF9wcmVwYXJlLAorCS53YWl0X2ZpbmlzaCA9IHZiMl9vcHNfd2FpdF9maW5pc2gsCiAJLnN0YXJ0X3N0cmVhbWluZyA9IHN0YXJ0X3N0cmVhbWluZywKIAkuc3RvcF9zdHJlYW1pbmcgPSBzdG9wX3N0cmVhbWluZywKIH07CkBAIC0xMTIyLDYgKzExMDYsNyBAQAogCQkub3BzID0gJm14cl92aWRlb19xb3BzLAogCQkubWluX2J1ZmZlcnNfbmVlZGVkID0gMSwKIAkJLm1lbV9vcHMgPSAmdmIyX2RtYV9jb250aWdfbWVtb3BzLAorCQkubG9jayA9ICZsYXllci0+bXV0ZXgsCiAJfTsKIAogCXJldHVybiBsYXllcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc2hfdmV1LmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NoX3ZldS5jCmluZGV4IGFhYTFmNmYuLmE5MDFiNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc2hfdmV1LmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zaF92ZXUuYwpAQCAtMjQyLDIwICsyNDIsNiBAQAogCXZldS0+YWJvcnRpbmcgPSB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBzaF92ZXVfbG9jayh2b2lkICpwcml2KQotewotCXN0cnVjdCBzaF92ZXVfZGV2ICp2ZXUgPSBwcml2OwotCi0JbXV0ZXhfbG9jaygmdmV1LT5mb3BfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNoX3ZldV91bmxvY2sodm9pZCAqcHJpdikKLXsKLQlzdHJ1Y3Qgc2hfdmV1X2RldiAqdmV1ID0gcHJpdjsKLQotCW11dGV4X3VubG9jaygmdmV1LT5mb3BfbG9jayk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNoX3ZldV9wcm9jZXNzKHN0cnVjdCBzaF92ZXVfZGV2ICp2ZXUsCiAJCQkgICBzdHJ1Y3QgdmIyX2J1ZmZlciAqc3JjX2J1ZiwKIAkJCSAgIHN0cnVjdCB2YjJfYnVmZmVyICpkc3RfYnVmKQpAQCAtOTUwLDM2ICs5MzYsMjggQEAKIAl2NGwyX20ybV9idWZfcXVldWUodmV1LT5tMm1fY3R4LCB2Yik7CiB9CiAKLXN0YXRpYyB2b2lkIHNoX3ZldV93YWl0X3ByZXBhcmUoc3RydWN0IHZiMl9xdWV1ZSAqcSkKLXsKLQlzaF92ZXVfdW5sb2NrKHZiMl9nZXRfZHJ2X3ByaXYocSkpOwotfQotCi1zdGF0aWMgdm9pZCBzaF92ZXVfd2FpdF9maW5pc2goc3RydWN0IHZiMl9xdWV1ZSAqcSkKLXsKLQlzaF92ZXVfbG9jayh2YjJfZ2V0X2Rydl9wcml2KHEpKTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCB2YjJfb3BzIHNoX3ZldV9xb3BzID0gewogCS5xdWV1ZV9zZXR1cAkgPSBzaF92ZXVfcXVldWVfc2V0dXAsCiAJLmJ1Zl9wcmVwYXJlCSA9IHNoX3ZldV9idWZfcHJlcGFyZSwKIAkuYnVmX3F1ZXVlCSA9IHNoX3ZldV9idWZfcXVldWUsCi0JLndhaXRfcHJlcGFyZQkgPSBzaF92ZXVfd2FpdF9wcmVwYXJlLAotCS53YWl0X2ZpbmlzaAkgPSBzaF92ZXVfd2FpdF9maW5pc2gsCisJLndhaXRfcHJlcGFyZQkgPSB2YjJfb3BzX3dhaXRfcHJlcGFyZSwKKwkud2FpdF9maW5pc2gJID0gdmIyX29wc193YWl0X2ZpbmlzaCwKIH07CiAKIHN0YXRpYyBpbnQgc2hfdmV1X3F1ZXVlX2luaXQodm9pZCAqcHJpdiwgc3RydWN0IHZiMl9xdWV1ZSAqc3JjX3ZxLAogCQkJICAgICBzdHJ1Y3QgdmIyX3F1ZXVlICpkc3RfdnEpCiB7CisJc3RydWN0IHNoX3ZldV9kZXYgKnZldSA9IHByaXY7CiAJaW50IHJldDsKIAogCW1lbXNldChzcmNfdnEsIDAsIHNpemVvZigqc3JjX3ZxKSk7CiAJc3JjX3ZxLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7CiAJc3JjX3ZxLT5pb19tb2RlcyA9IFZCMl9NTUFQIHwgVkIyX1VTRVJQVFI7Ci0Jc3JjX3ZxLT5kcnZfcHJpdiA9IHByaXY7CisJc3JjX3ZxLT5kcnZfcHJpdiA9IHZldTsKIAlzcmNfdnEtPmJ1Zl9zdHJ1Y3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9tMm1fYnVmZmVyKTsKIAlzcmNfdnEtPm9wcyA9ICZzaF92ZXVfcW9wczsKIAlzcmNfdnEtPm1lbV9vcHMgPSAmdmIyX2RtYV9jb250aWdfbWVtb3BzOworCXNyY192cS0+bG9jayA9ICZ2ZXUtPmZvcF9sb2NrOwogCiAJcmV0ID0gdmIyX3F1ZXVlX2luaXQoc3JjX3ZxKTsKIAlpZiAocmV0IDwgMCkKQEAgLTk4OCwxMCArOTY2LDExIEBACiAJbWVtc2V0KGRzdF92cSwgMCwgc2l6ZW9mKCpkc3RfdnEpKTsKIAlkc3RfdnEtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZHN0X3ZxLT5pb19tb2RlcyA9IFZCMl9NTUFQIHwgVkIyX1VTRVJQVFI7Ci0JZHN0X3ZxLT5kcnZfcHJpdiA9IHByaXY7CisJZHN0X3ZxLT5kcnZfcHJpdiA9IHZldTsKIAlkc3RfdnEtPmJ1Zl9zdHJ1Y3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9tMm1fYnVmZmVyKTsKIAlkc3RfdnEtPm9wcyA9ICZzaF92ZXVfcW9wczsKIAlkc3RfdnEtPm1lbV9vcHMgPSAmdmIyX2RtYV9jb250aWdfbWVtb3BzOworCWRzdF92cS0+bG9jayA9ICZ2ZXUtPmZvcF9sb2NrOwogCiAJcmV0dXJuIHZiMl9xdWV1ZV9pbml0KGRzdF92cSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvYXRtZWwtaXNpLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvYXRtZWwtaXNpLmMKaW5kZXggNmQ4ODUyMy4uODUyNmJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL2F0bWVsLWlzaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9hdG1lbC1pc2kuYwpAQCAtNDU1LDggKzQ1NSw4IEBACiAJLmJ1Zl9xdWV1ZQkJPSBidWZmZXJfcXVldWUsCiAJLnN0YXJ0X3N0cmVhbWluZwk9IHN0YXJ0X3N0cmVhbWluZywKIAkuc3RvcF9zdHJlYW1pbmcJCT0gc3RvcF9zdHJlYW1pbmcsCi0JLndhaXRfcHJlcGFyZQkJPSBzb2NfY2FtZXJhX3VubG9jaywKLQkud2FpdF9maW5pc2gJCT0gc29jX2NhbWVyYV9sb2NrLAorCS53YWl0X3ByZXBhcmUJCT0gdmIyX29wc193YWl0X3ByZXBhcmUsCisJLndhaXRfZmluaXNoCQk9IHZiMl9vcHNfd2FpdF9maW5pc2gsCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ2NSw2ICs0NjUsOCBAQAogc3RhdGljIGludCBpc2lfY2FtZXJhX2luaXRfdmlkZW9idWYoc3RydWN0IHZiMl9xdWV1ZSAqcSwKIAkJCQkgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogeworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7CisKIAlxLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCXEtPmlvX21vZGVzID0gVkIyX01NQVA7CiAJcS0+ZHJ2X3ByaXYgPSBpY2Q7CkBAIC00NzIsNiArNDc0LDcgQEAKIAlxLT5vcHMgPSAmaXNpX3ZpZGVvX3FvcHM7CiAJcS0+bWVtX29wcyA9ICZ2YjJfZG1hX2NvbnRpZ19tZW1vcHM7CiAJcS0+dGltZXN0YW1wX2ZsYWdzID0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDOworCXEtPmxvY2sgPSAmaWNpLT5ob3N0X2xvY2s7CiAKIAlyZXR1cm4gdmIyX3F1ZXVlX2luaXQocSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvbXgzX2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL214M19jYW1lcmEuYwppbmRleCAwYjMyOTlkLi4zNDM1ZmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvbXgzX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9teDNfY2FtZXJhLmMKQEAgLTQzNSwxNCArNDM1LDE2IEBACiAJLmJ1Zl9xdWV1ZQk9IG14M192aWRlb2J1Zl9xdWV1ZSwKIAkuYnVmX2NsZWFudXAJPSBteDNfdmlkZW9idWZfcmVsZWFzZSwKIAkuYnVmX2luaXQJPSBteDNfdmlkZW9idWZfaW5pdCwKLQkud2FpdF9wcmVwYXJlCT0gc29jX2NhbWVyYV91bmxvY2ssCi0JLndhaXRfZmluaXNoCT0gc29jX2NhbWVyYV9sb2NrLAorCS53YWl0X3ByZXBhcmUJPSB2YjJfb3BzX3dhaXRfcHJlcGFyZSwKKwkud2FpdF9maW5pc2gJPSB2YjJfb3BzX3dhaXRfZmluaXNoLAogCS5zdG9wX3N0cmVhbWluZwk9IG14M19zdG9wX3N0cmVhbWluZywKIH07CiAKIHN0YXRpYyBpbnQgbXgzX2NhbWVyYV9pbml0X3ZpZGVvYnVmKHN0cnVjdCB2YjJfcXVldWUgKnEsCiAJCQkJICAgICBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOworCiAJcS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlxLT5pb19tb2RlcyA9IFZCMl9NTUFQIHwgVkIyX1VTRVJQVFI7CiAJcS0+ZHJ2X3ByaXYgPSBpY2Q7CkBAIC00NTAsNiArNDUyLDcgQEAKIAlxLT5tZW1fb3BzID0gJnZiMl9kbWFfY29udGlnX21lbW9wczsKIAlxLT5idWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0IG14M19jYW1lcmFfYnVmZmVyKTsKIAlxLT50aW1lc3RhbXBfZmxhZ3MgPSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9NT05PVE9OSUM7CisJcS0+bG9jayA9ICZpY2ktPmhvc3RfbG9jazsKIAogCXJldHVybiB2YjJfcXVldWVfaW5pdChxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9yY2FyX3Zpbi5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL3JjYXJfdmluLmMKaW5kZXggOWYxNDczYy4uMjc5YWI5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL3JjYXJfdmluLmMKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL3JjYXJfdmluLmMKQEAgLTgwNCw2MiArODA0LDI2IEBACiAJdmIyX2J1ZmZlcl9kb25lKHZiLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsKIH0KIAotc3RhdGljIHZvaWQgcmNhcl92aW5fdmlkZW9idWZfcmVsZWFzZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCisvKgorICogV2FpdCBmb3IgY2FwdHVyZSB0byBzdG9wIGFuZCBhbGwgaW4tZmxpZ2h0IGJ1ZmZlcnMgdG8gYmUgZmluaXNoZWQgd2l0aCBieQorICogdGhlIHZpZGVvIGhhcmR3YXJlLiBUaGlzIG11c3QgYmUgY2FsbGVkIHVuZGVyICZwcml2LT5sb2NrCisgKgorICovCitzdGF0aWMgdm9pZCByY2FyX3Zpbl93YWl0X3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCByY2FyX3Zpbl9wcml2ICpwcml2KQogewotCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gc29jX2NhbWVyYV9mcm9tX3ZiMnEodmItPnZiMl9xdWV1ZSk7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKLQlzdHJ1Y3QgcmNhcl92aW5fcHJpdiAqcHJpdiA9IGljaS0+cHJpdjsKLQl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgYnVmX2luX3VzZSA9IDA7CisJd2hpbGUgKHByaXYtPnN0YXRlICE9IFNUT1BQRUQpIHsKKwkJLyogaXNzdWUgc3RvcCBpZiBydW5uaW5nICovCisJCWlmIChwcml2LT5zdGF0ZSA9PSBSVU5OSU5HKQorCQkJcmNhcl92aW5fcmVxdWVzdF9jYXB0dXJlX3N0b3AocHJpdik7CiAKLQlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKLQotCS8qIElzIHRoZSBidWZmZXIgaW4gdXNlIGJ5IHRoZSBWSU4gaGFyZHdhcmU/ICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9CVUZGRVJfTlVNOyBpKyspIHsKLQkJaWYgKHByaXYtPnF1ZXVlX2J1ZltpXSA9PSB2YikgewotCQkJYnVmX2luX3VzZSA9IDE7Ci0JCQlicmVhazsKKwkJLyogd2FpdCB1bnRpbCBjYXB0dXJpbmcgaGFzIGJlZW4gc3RvcHBlZCAqLworCQlpZiAocHJpdi0+c3RhdGUgPT0gU1RPUFBJTkcpIHsKKwkJCXByaXYtPnJlcXVlc3RfdG9fc3RvcCA9IHRydWU7CisJCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCQkJd2FpdF9mb3JfY29tcGxldGlvbigmcHJpdi0+Y2FwdHVyZV9zdG9wKTsKKwkJCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwogCQl9CiAJfQotCi0JaWYgKGJ1Zl9pbl91c2UpIHsKLQkJd2hpbGUgKHByaXYtPnN0YXRlICE9IFNUT1BQRUQpIHsKLQotCQkJLyogaXNzdWUgc3RvcCBpZiBydW5uaW5nICovCi0JCQlpZiAocHJpdi0+c3RhdGUgPT0gUlVOTklORykKLQkJCQlyY2FyX3Zpbl9yZXF1ZXN0X2NhcHR1cmVfc3RvcChwcml2KTsKLQotCQkJLyogd2FpdCB1bnRpbCBjYXB0dXJpbmcgaGFzIGJlZW4gc3RvcHBlZCAqLwotCQkJaWYgKHByaXYtPnN0YXRlID09IFNUT1BQSU5HKSB7Ci0JCQkJcHJpdi0+cmVxdWVzdF90b19zdG9wID0gdHJ1ZTsKLQkJCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwotCQkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnByaXYtPmNhcHR1cmVfc3RvcCk7Ci0JCQkJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7Ci0JCQl9Ci0JCX0KLQkJLyoKLQkJICogQ2FwdHVyaW5nIGhhcyBub3cgc3RvcHBlZC4gVGhlIGJ1ZmZlciB3ZSBoYXZlIGJlZW4gYXNrZWQKLQkJICogdG8gcmVsZWFzZSBjb3VsZCBiZSBhbnkgb2YgdGhlIGN1cnJlbnQgYnVmZmVycyBpbiB1c2UsIHNvCi0JCSAqIHJlbGVhc2UgYWxsIGJ1ZmZlcnMgdGhhdCBhcmUgaW4gdXNlIGJ5IEhXCi0JCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0JVRkZFUl9OVU07IGkrKykgewotCQkJaWYgKHByaXYtPnF1ZXVlX2J1ZltpXSkgewotCQkJCXZiMl9idWZmZXJfZG9uZShwcml2LT5xdWV1ZV9idWZbaV0sCi0JCQkJCVZCMl9CVUZfU1RBVEVfRVJST1IpOwotCQkJCXByaXYtPnF1ZXVlX2J1ZltpXSA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlsaXN0X2RlbF9pbml0KHRvX2J1Zl9saXN0KHZiKSk7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKLX0KLQotc3RhdGljIGludCByY2FyX3Zpbl92aWRlb2J1Zl9pbml0KHN0cnVjdCB2YjJfYnVmZmVyICp2YikKLXsKLQlJTklUX0xJU1RfSEVBRCh0b19idWZfbGlzdCh2YikpOwotCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCByY2FyX3Zpbl9zdG9wX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkKQEAgLTg2OCwyMSArODMyLDM0IEBACiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKIAlzdHJ1Y3QgcmNhcl92aW5fcHJpdiAqcHJpdiA9IGljaS0+cHJpdjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpidWZfaGVhZCwgKnRtcDsKKwlpbnQgaTsKIAogCXNwaW5fbG9ja19pcnEoJnByaXYtPmxvY2spOwotCWxpc3RfZm9yX2VhY2hfc2FmZShidWZfaGVhZCwgdG1wLCAmcHJpdi0+Y2FwdHVyZSkKKwlyY2FyX3Zpbl93YWl0X3N0b3Bfc3RyZWFtaW5nKHByaXYpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9CVUZGRVJfTlVNOyBpKyspIHsKKwkJaWYgKHByaXYtPnF1ZXVlX2J1ZltpXSkgeworCQkJdmIyX2J1ZmZlcl9kb25lKHByaXYtPnF1ZXVlX2J1ZltpXSwKKwkJCQkJVkIyX0JVRl9TVEFURV9FUlJPUik7CisJCQlwcml2LT5xdWV1ZV9idWZbaV0gPSBOVUxMOworCQl9CisJfQorCisJbGlzdF9mb3JfZWFjaF9zYWZlKGJ1Zl9oZWFkLCB0bXAsICZwcml2LT5jYXB0dXJlKSB7CisJCXZiMl9idWZmZXJfZG9uZSgmbGlzdF9lbnRyeShidWZfaGVhZCwKKwkJCQkJc3RydWN0IHJjYXJfdmluX2J1ZmZlciwgbGlzdCktPnZiLAorCQkJCVZCMl9CVUZfU1RBVEVfRVJST1IpOwogCQlsaXN0X2RlbF9pbml0KGJ1Zl9oZWFkKTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCB2YjJfb3BzIHJjYXJfdmluX3ZiMl9vcHMgPSB7CiAJLnF1ZXVlX3NldHVwCT0gcmNhcl92aW5fdmlkZW9idWZfc2V0dXAsCi0JLmJ1Zl9pbml0CT0gcmNhcl92aW5fdmlkZW9idWZfaW5pdCwKLQkuYnVmX2NsZWFudXAJPSByY2FyX3Zpbl92aWRlb2J1Zl9yZWxlYXNlLAogCS5idWZfcXVldWUJPSByY2FyX3Zpbl92aWRlb2J1Zl9xdWV1ZSwKIAkuc3RvcF9zdHJlYW1pbmcJPSByY2FyX3Zpbl9zdG9wX3N0cmVhbWluZywKLQkud2FpdF9wcmVwYXJlCT0gc29jX2NhbWVyYV91bmxvY2ssCi0JLndhaXRfZmluaXNoCT0gc29jX2NhbWVyYV9sb2NrLAorCS53YWl0X3ByZXBhcmUJPSB2YjJfb3BzX3dhaXRfcHJlcGFyZSwKKwkud2FpdF9maW5pc2gJPSB2YjJfb3BzX3dhaXRfZmluaXNoLAogfTsKIAogc3RhdGljIGlycXJldHVybl90IHJjYXJfdmluX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQpAQCAtMTgwOCw2ICsxNzg1LDggQEAKIHN0YXRpYyBpbnQgcmNhcl92aW5faW5pdF92aWRlb2J1ZjIoc3RydWN0IHZiMl9xdWV1ZSAqdnEsCiAJCQkJICAgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+cGFyZW50KTsKKwogCXZxLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCXZxLT5pb19tb2RlcyA9IFZCMl9NTUFQIHwgVkIyX1VTRVJQVFI7CiAJdnEtPmRydl9wcml2ID0gaWNkOwpAQCAtMTgxNSw2ICsxNzk0LDcgQEAKIAl2cS0+bWVtX29wcyA9ICZ2YjJfZG1hX2NvbnRpZ19tZW1vcHM7CiAJdnEtPmJ1Zl9zdHJ1Y3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmNhcl92aW5fYnVmZmVyKTsKIAl2cS0+dGltZXN0YW1wX2ZsYWdzICA9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQzsKKwl2cS0+bG9jayA9ICZpY2ktPmhvc3RfbG9jazsKIAogCXJldHVybiB2YjJfcXVldWVfaW5pdCh2cSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvc2hfbW9iaWxlX2NldV9jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCmluZGV4IDcxNzg3NzAuLjljZTIwMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCkBAIC00OTYsOCArNDk2LDggQEAKIAkuYnVmX3F1ZXVlCT0gc2hfbW9iaWxlX2NldV92aWRlb2J1Zl9xdWV1ZSwKIAkuYnVmX2NsZWFudXAJPSBzaF9tb2JpbGVfY2V1X3ZpZGVvYnVmX3JlbGVhc2UsCiAJLmJ1Zl9pbml0CT0gc2hfbW9iaWxlX2NldV92aWRlb2J1Zl9pbml0LAotCS53YWl0X3ByZXBhcmUJPSBzb2NfY2FtZXJhX3VubG9jaywKLQkud2FpdF9maW5pc2gJPSBzb2NfY2FtZXJhX2xvY2ssCisJLndhaXRfcHJlcGFyZQk9IHZiMl9vcHNfd2FpdF9wcmVwYXJlLAorCS53YWl0X2ZpbmlzaAk9IHZiMl9vcHNfd2FpdF9maW5pc2gsCiAJLnN0b3Bfc3RyZWFtaW5nCT0gc2hfbW9iaWxlX2NldV9zdG9wX3N0cmVhbWluZywKIH07CiAKQEAgLTE2NjEsNiArMTY2MSw4IEBACiBzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfaW5pdF92aWRlb2J1ZihzdHJ1Y3QgdmIyX3F1ZXVlICpxLAogCQkJCSAgICAgICBzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOworCiAJcS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlxLT5pb19tb2RlcyA9IFZCMl9NTUFQIHwgVkIyX1VTRVJQVFI7CiAJcS0+ZHJ2X3ByaXYgPSBpY2Q7CkBAIC0xNjY4LDYgKzE2NzAsNyBAQAogCXEtPm1lbV9vcHMgPSAmdmIyX2RtYV9jb250aWdfbWVtb3BzOwogCXEtPmJ1Zl9zdHJ1Y3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9idWZmZXIpOwogCXEtPnRpbWVzdGFtcF9mbGFncyA9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQzsKKwlxLT5sb2NrID0gJmljaS0+aG9zdF9sb2NrOwogCiAJcmV0dXJuIHZiMl9xdWV1ZV9pbml0KHEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL3NvY19jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9zb2NfY2FtZXJhLmMKaW5kZXggYjNkYjUxYy4uY2VlN2I1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL3NvY19jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvc29jX2NhbWVyYS5jCkBAIC04NDMsMjIgKzg0Myw2IEBACiAJcmV0dXJuIHJlczsKIH0KIAotdm9pZCBzb2NfY2FtZXJhX2xvY2soc3RydWN0IHZiMl9xdWV1ZSAqdnEpCi17Ci0Jc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5wYXJlbnQpOwotCW11dGV4X2xvY2soJmljaS0+aG9zdF9sb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0woc29jX2NhbWVyYV9sb2NrKTsKLQotdm9pZCBzb2NfY2FtZXJhX3VubG9jayhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkKLXsKLQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOwotCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPnBhcmVudCk7Ci0JbXV0ZXhfdW5sb2NrKCZpY2ktPmhvc3RfbG9jayk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNvY19jYW1lcmFfdW5sb2NrKTsKLQogc3RhdGljIHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBzb2NfY2FtZXJhX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IHNvY19jYW1lcmFfb3BlbiwKQEAgLTE4MTMsOCArMTc5Nyw2IEBACiAJCW11dGV4X3VubG9jaygmaWNpLT5jbGtfbG9jayk7CiAJfQogZWFkZDoKLQl2aWRlb19kZXZpY2VfcmVsZWFzZShpY2QtPnZkZXYpOwotCWljZC0+dmRldiA9IE5VTEw7CiAJaWYgKGljZC0+dmRldikgewogCQl2aWRlb19kZXZpY2VfcmVsZWFzZShpY2QtPnZkZXYpOwogCQlpY2QtPnZkZXYgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS90aS12cGUvdnBlLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3RpLXZwZS92cGUuYwppbmRleCBkNjI4ZDFhLi5jNDQ3NjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3RpLXZwZS92cGUuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3RpLXZwZS92cGUuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgpAQCAtNzQsNyArNzUsNyBAQAogI2RlZmluZSBWUEVfREVGX0JVRlNfUEVSX0pPQgkxCS8qIGRlZmF1bHQgb25lIGJ1ZmZlciBwZXIgYmF0Y2ggam9iICovCiAKIC8qCi0gKiBlYWNoIFZQRSBjb250ZXh0IGNhbiBuZWVkIHVwIHRvIDMgY29uZmlnIGRlc2NpcHRvcnMsIDcgaW5wdXQgZGVzY3JpcHRvcnMsCisgKiBlYWNoIFZQRSBjb250ZXh0IGNhbiBuZWVkIHVwIHRvIDMgY29uZmlnIGRlc2NyaXB0b3JzLCA3IGlucHV0IGRlc2NyaXB0b3JzLAogICogMyBvdXRwdXQgZGVzY3JpcHRvcnMsIGFuZCAxMCBjb250cm9sIGRlc2NyaXB0b3JzCiAgKi8KICNkZWZpbmUgVlBFX0RFU0NfTElTVF9TSVpFCSgxMCAqIFZQRE1BX0RURF9ERVNDX1NJWkUgKwlcCkBAIC0zNzMsNyArMzc0LDYgQEAKIHN0cnVjdCB2cGVfY3R4IHsKIAlzdHJ1Y3QgdjRsMl9maAkJZmg7CiAJc3RydWN0IHZwZV9kZXYJCSpkZXY7Ci0Jc3RydWN0IHY0bDJfbTJtX2N0eAkqbTJtX2N0eDsKIAlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgaGRsOwogCiAJdW5zaWduZWQgaW50CQlmaWVsZDsJCQkvKiBjdXJyZW50IGZpZWxkICovCkBAIC04ODcsMTAgKzg4NywxMCBAQAogCWlmIChjdHgtPmRlaW50ZXJsYWNpbmcgJiYgY3R4LT5zcmNfdmJzWzJdID09IE5VTEwpCiAJCW5lZWRlZCArPSAyOwkvKiBuZWVkIGFkZGl0aW9uYWwgdHdvIG1vc3QgcmVjZW50IGZpZWxkcyAqLwogCi0JaWYgKHY0bDJfbTJtX251bV9zcmNfYnVmc19yZWFkeShjdHgtPm0ybV9jdHgpIDwgbmVlZGVkKQorCWlmICh2NGwyX20ybV9udW1fc3JjX2J1ZnNfcmVhZHkoY3R4LT5maC5tMm1fY3R4KSA8IG5lZWRlZCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodjRsMl9tMm1fbnVtX2RzdF9idWZzX3JlYWR5KGN0eC0+bTJtX2N0eCkgPCBuZWVkZWQpCisJaWYgKHY0bDJfbTJtX251bV9kc3RfYnVmc19yZWFkeShjdHgtPmZoLm0ybV9jdHgpIDwgbmVlZGVkKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAxOwpAQCAtMTEwMCwxNSArMTEwMCwxNSBAQAogCXN0cnVjdCB2cGVfcV9kYXRhICpkX3FfZGF0YSA9ICZjdHgtPnFfZGF0YVtRX0RBVEFfRFNUXTsKIAogCWlmIChjdHgtPmRlaW50ZXJsYWNpbmcgJiYgY3R4LT5zcmNfdmJzWzJdID09IE5VTEwpIHsKLQkJY3R4LT5zcmNfdmJzWzJdID0gdjRsMl9tMm1fc3JjX2J1Zl9yZW1vdmUoY3R4LT5tMm1fY3R4KTsKKwkJY3R4LT5zcmNfdmJzWzJdID0gdjRsMl9tMm1fc3JjX2J1Zl9yZW1vdmUoY3R4LT5maC5tMm1fY3R4KTsKIAkJV0FSTl9PTihjdHgtPnNyY192YnNbMl0gPT0gTlVMTCk7Ci0JCWN0eC0+c3JjX3Zic1sxXSA9IHY0bDJfbTJtX3NyY19idWZfcmVtb3ZlKGN0eC0+bTJtX2N0eCk7CisJCWN0eC0+c3JjX3Zic1sxXSA9IHY0bDJfbTJtX3NyY19idWZfcmVtb3ZlKGN0eC0+ZmgubTJtX2N0eCk7CiAJCVdBUk5fT04oY3R4LT5zcmNfdmJzWzFdID09IE5VTEwpOwogCX0KIAotCWN0eC0+c3JjX3Zic1swXSA9IHY0bDJfbTJtX3NyY19idWZfcmVtb3ZlKGN0eC0+bTJtX2N0eCk7CisJY3R4LT5zcmNfdmJzWzBdID0gdjRsMl9tMm1fc3JjX2J1Zl9yZW1vdmUoY3R4LT5maC5tMm1fY3R4KTsKIAlXQVJOX09OKGN0eC0+c3JjX3Zic1swXSA9PSBOVUxMKTsKLQljdHgtPmRzdF92YiA9IHY0bDJfbTJtX2RzdF9idWZfcmVtb3ZlKGN0eC0+bTJtX2N0eCk7CisJY3R4LT5kc3RfdmIgPSB2NGwyX20ybV9kc3RfYnVmX3JlbW92ZShjdHgtPmZoLm0ybV9jdHgpOwogCVdBUk5fT04oY3R4LT5kc3RfdmIgPT0gTlVMTCk7CiAKIAkvKiBjb25maWcgZGVzY3JpcHRvcnMgKi8KQEAgLTEzMzQsNyArMTMzNCw3IEBACiBmaW5pc2hlZDoKIAl2cGVfZGJnKGN0eC0+ZGV2LCAiZmluaXNoaW5nIHRyYW5zYWN0aW9uXG4iKTsKIAljdHgtPmJ1ZnNfY29tcGxldGVkID0gMDsKLQl2NGwyX20ybV9qb2JfZmluaXNoKGRldi0+bTJtX2RldiwgY3R4LT5tMm1fY3R4KTsKKwl2NGwyX20ybV9qb2JfZmluaXNoKGRldi0+bTJtX2RldiwgY3R4LT5maC5tMm1fY3R4KTsKIGhhbmRsZWQ6CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTM5NSw3ICsxMzk1LDcgQEAKIAlzdHJ1Y3QgdnBlX3FfZGF0YSAqcV9kYXRhOwogCWludCBpOwogCi0JdnEgPSB2NGwyX20ybV9nZXRfdnEoY3R4LT5tMm1fY3R4LCBmLT50eXBlKTsKKwl2cSA9IHY0bDJfbTJtX2dldF92cShjdHgtPmZoLm0ybV9jdHgsIGYtPnR5cGUpOwogCWlmICghdnEpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xNTI3LDcgKzE1MjcsNyBAQAogCXN0cnVjdCB2YjJfcXVldWUgKnZxOwogCWludCBpOwogCi0JdnEgPSB2NGwyX20ybV9nZXRfdnEoY3R4LT5tMm1fY3R4LCBmLT50eXBlKTsKKwl2cSA9IHY0bDJfbTJtX2dldF92cShjdHgtPmZoLm0ybV9jdHgsIGYtPnR5cGUpOwogCWlmICghdnEpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xNzM5LDUyICsxNzM5LDYgQEAKIAlyZXR1cm4gc2V0X3NyY2RzdF9wYXJhbXMoY3R4KTsKIH0KIAotc3RhdGljIGludCB2cGVfcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJICAgICAgIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXFidWZzKQotewotCXN0cnVjdCB2cGVfY3R4ICpjdHggPSBmaWxlMmN0eChmaWxlKTsKLQotCXJldHVybiB2NGwyX20ybV9yZXFidWZzKGZpbGUsIGN0eC0+bTJtX2N0eCwgcmVxYnVmcyk7Ci19Ci0KLXN0YXRpYyBpbnQgdnBlX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdnBlX2N0eCAqY3R4ID0gZmlsZTJjdHgoZmlsZSk7Ci0KLQlyZXR1cm4gdjRsMl9tMm1fcXVlcnlidWYoZmlsZSwgY3R4LT5tMm1fY3R4LCBidWYpOwotfQotCi1zdGF0aWMgaW50IHZwZV9xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdnBlX2N0eCAqY3R4ID0gZmlsZTJjdHgoZmlsZSk7Ci0KLQlyZXR1cm4gdjRsMl9tMm1fcWJ1ZihmaWxlLCBjdHgtPm0ybV9jdHgsIGJ1Zik7Ci19Ci0KLXN0YXRpYyBpbnQgdnBlX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgdnBlX2N0eCAqY3R4ID0gZmlsZTJjdHgoZmlsZSk7Ci0KLQlyZXR1cm4gdjRsMl9tMm1fZHFidWYoZmlsZSwgY3R4LT5tMm1fY3R4LCBidWYpOwotfQotCi1zdGF0aWMgaW50IHZwZV9zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCi17Ci0Jc3RydWN0IHZwZV9jdHggKmN0eCA9IGZpbGUyY3R4KGZpbGUpOwotCi0JcmV0dXJuIHY0bDJfbTJtX3N0cmVhbW9uKGZpbGUsIGN0eC0+bTJtX2N0eCwgdHlwZSk7Ci19Ci0KLXN0YXRpYyBpbnQgdnBlX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCi17Ci0Jc3RydWN0IHZwZV9jdHggKmN0eCA9IGZpbGUyY3R4KGZpbGUpOwotCi0JdnBlX2R1bXBfcmVncyhjdHgtPmRldik7Ci0JdnBkbWFfZHVtcF9yZWdzKGN0eC0+ZGV2LT52cGRtYSk7Ci0KLQlyZXR1cm4gdjRsMl9tMm1fc3RyZWFtb2ZmKGZpbGUsIGN0eC0+bTJtX2N0eCwgdHlwZSk7Ci19Ci0KIC8qCiAgKiBkZWZpbmVzIG51bWJlciBvZiBidWZmZXJzL2ZyYW1lcyBhIGNvbnRleHQgY2FuIHByb2Nlc3Mgd2l0aCBWUEUgYmVmb3JlCiAgKiBzd2l0Y2hpbmcgdG8gYSBkaWZmZXJlbnQgY29udGV4dC4gZGVmYXVsdCB2YWx1ZSBpcyAxIGJ1ZmZlciBwZXIgY29udGV4dApAQCAtMTgxNCwxNCArMTc2OCwxNCBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2cGVfaW9jdGxfb3BzID0gewotCS52aWRpb2NfcXVlcnljYXAJPSB2cGVfcXVlcnljYXAsCisJLnZpZGlvY19xdWVyeWNhcAkJPSB2cGVfcXVlcnljYXAsCiAKLQkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXBfbXBsYW5lID0gdnBlX2VudW1fZm10LAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcF9tcGxhbmUJPSB2cGVfZW51bV9mbXQsCiAJLnZpZGlvY19nX2ZtdF92aWRfY2FwX21wbGFuZQk9IHZwZV9nX2ZtdCwKIAkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcF9tcGxhbmUJPSB2cGVfdHJ5X2ZtdCwKIAkudmlkaW9jX3NfZm10X3ZpZF9jYXBfbXBsYW5lCT0gdnBlX3NfZm10LAogCi0JLnZpZGlvY19lbnVtX2ZtdF92aWRfb3V0X21wbGFuZSA9IHZwZV9lbnVtX2ZtdCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9vdXRfbXBsYW5lCT0gdnBlX2VudW1fZm10LAogCS52aWRpb2NfZ19mbXRfdmlkX291dF9tcGxhbmUJPSB2cGVfZ19mbXQsCiAJLnZpZGlvY190cnlfZm10X3ZpZF9vdXRfbXBsYW5lCT0gdnBlX3RyeV9mbXQsCiAJLnZpZGlvY19zX2ZtdF92aWRfb3V0X21wbGFuZQk9IHZwZV9zX2ZtdCwKQEAgLTE4MjksMTYgKzE3ODMsMTUgQEAKIAkudmlkaW9jX2dfc2VsZWN0aW9uCQk9IHZwZV9nX3NlbGVjdGlvbiwKIAkudmlkaW9jX3Nfc2VsZWN0aW9uCQk9IHZwZV9zX3NlbGVjdGlvbiwKIAotCS52aWRpb2NfcmVxYnVmcwkJPSB2cGVfcmVxYnVmcywKLQkudmlkaW9jX3F1ZXJ5YnVmCT0gdnBlX3F1ZXJ5YnVmLAorCS52aWRpb2NfcmVxYnVmcwkJCT0gdjRsMl9tMm1faW9jdGxfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmCQk9IHY0bDJfbTJtX2lvY3RsX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZgkJCT0gdjRsMl9tMm1faW9jdGxfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmCQkJPSB2NGwyX20ybV9pb2N0bF9kcWJ1ZiwKKwkudmlkaW9jX3N0cmVhbW9uCQk9IHY0bDJfbTJtX2lvY3RsX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmCQk9IHY0bDJfbTJtX2lvY3RsX3N0cmVhbW9mZiwKIAotCS52aWRpb2NfcWJ1ZgkJPSB2cGVfcWJ1ZiwKLQkudmlkaW9jX2RxYnVmCQk9IHZwZV9kcWJ1ZiwKLQotCS52aWRpb2Nfc3RyZWFtb24JPSB2cGVfc3RyZWFtb24sCi0JLnZpZGlvY19zdHJlYW1vZmYJPSB2cGVfc3RyZWFtb2ZmLAotCS52aWRpb2Nfc3Vic2NyaWJlX2V2ZW50ID0gdjRsMl9jdHJsX3N1YnNjcmliZV9ldmVudCwKLQkudmlkaW9jX3Vuc3Vic2NyaWJlX2V2ZW50ID0gdjRsMl9ldmVudF91bnN1YnNjcmliZSwKKwkudmlkaW9jX3N1YnNjcmliZV9ldmVudAkJPSB2NGwyX2N0cmxfc3Vic2NyaWJlX2V2ZW50LAorCS52aWRpb2NfdW5zdWJzY3JpYmVfZXZlbnQJPSB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlLAogfTsKIAogLyoKQEAgLTE5MTAsMzMgKzE4NjMsNDAgQEAKIHN0YXRpYyB2b2lkIHZwZV9idWZfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQogewogCXN0cnVjdCB2cGVfY3R4ICpjdHggPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOwotCXY0bDJfbTJtX2J1Zl9xdWV1ZShjdHgtPm0ybV9jdHgsIHZiKTsKKworCXY0bDJfbTJtX2J1Zl9xdWV1ZShjdHgtPmZoLm0ybV9jdHgsIHZiKTsKIH0KIAotc3RhdGljIHZvaWQgdnBlX3dhaXRfcHJlcGFyZShzdHJ1Y3QgdmIyX3F1ZXVlICpxKQorc3RhdGljIGludCB2cGVfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnEsIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLQlzdHJ1Y3QgdnBlX2N0eCAqY3R4ID0gdmIyX2dldF9kcnZfcHJpdihxKTsKLQl2cGVfdW5sb2NrKGN0eCk7CisJLyogY3VycmVudGx5IHdlIGRvIG5vdGhpbmcgaGVyZSAqLworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHZwZV93YWl0X2ZpbmlzaChzdHJ1Y3QgdmIyX3F1ZXVlICpxKQorc3RhdGljIHZvaWQgdnBlX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnEpCiB7CiAJc3RydWN0IHZwZV9jdHggKmN0eCA9IHZiMl9nZXRfZHJ2X3ByaXYocSk7Ci0JdnBlX2xvY2soY3R4KTsKKworCXZwZV9kdW1wX3JlZ3MoY3R4LT5kZXYpOworCXZwZG1hX2R1bXBfcmVncyhjdHgtPmRldi0+dnBkbWEpOwogfQogCiBzdGF0aWMgc3RydWN0IHZiMl9vcHMgdnBlX3FvcHMgPSB7CiAJLnF1ZXVlX3NldHVwCSA9IHZwZV9xdWV1ZV9zZXR1cCwKIAkuYnVmX3ByZXBhcmUJID0gdnBlX2J1Zl9wcmVwYXJlLAogCS5idWZfcXVldWUJID0gdnBlX2J1Zl9xdWV1ZSwKLQkud2FpdF9wcmVwYXJlCSA9IHZwZV93YWl0X3ByZXBhcmUsCi0JLndhaXRfZmluaXNoCSA9IHZwZV93YWl0X2ZpbmlzaCwKKwkud2FpdF9wcmVwYXJlCSA9IHZiMl9vcHNfd2FpdF9wcmVwYXJlLAorCS53YWl0X2ZpbmlzaAkgPSB2YjJfb3BzX3dhaXRfZmluaXNoLAorCS5zdGFydF9zdHJlYW1pbmcgPSB2cGVfc3RhcnRfc3RyZWFtaW5nLAorCS5zdG9wX3N0cmVhbWluZyAgPSB2cGVfc3RvcF9zdHJlYW1pbmcsCiB9OwogCiBzdGF0aWMgaW50IHF1ZXVlX2luaXQodm9pZCAqcHJpdiwgc3RydWN0IHZiMl9xdWV1ZSAqc3JjX3ZxLAogCQkgICAgICBzdHJ1Y3QgdmIyX3F1ZXVlICpkc3RfdnEpCiB7CiAJc3RydWN0IHZwZV9jdHggKmN0eCA9IHByaXY7CisJc3RydWN0IHZwZV9kZXYgKmRldiA9IGN0eC0+ZGV2OwogCWludCByZXQ7CiAKIAltZW1zZXQoc3JjX3ZxLCAwLCBzaXplb2YoKnNyY192cSkpOwpAQCAtMTk0Nyw2ICsxOTA3LDcgQEAKIAlzcmNfdnEtPm9wcyA9ICZ2cGVfcW9wczsKIAlzcmNfdnEtPm1lbV9vcHMgPSAmdmIyX2RtYV9jb250aWdfbWVtb3BzOwogCXNyY192cS0+dGltZXN0YW1wX2ZsYWdzID0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfQ09QWTsKKwlzcmNfdnEtPmxvY2sgPSAmZGV2LT5kZXZfbXV0ZXg7CiAKIAlyZXQgPSB2YjJfcXVldWVfaW5pdChzcmNfdnEpOwogCWlmIChyZXQpCkBAIC0xOTYwLDYgKzE5MjEsNyBAQAogCWRzdF92cS0+b3BzID0gJnZwZV9xb3BzOwogCWRzdF92cS0+bWVtX29wcyA9ICZ2YjJfZG1hX2NvbnRpZ19tZW1vcHM7CiAJZHN0X3ZxLT50aW1lc3RhbXBfZmxhZ3MgPSBWNEwyX0JVRl9GTEFHX1RJTUVTVEFNUF9DT1BZOworCWRzdF92cS0+bG9jayA9ICZkZXYtPmRldl9tdXRleDsKIAogCXJldHVybiB2YjJfcXVldWVfaW5pdChkc3RfdnEpOwogfQpAQCAtMTk4MSw5ICsxOTQzLDkgQEAKIHN0YXRpYyBpbnQgdnBlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHZwZV9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHZwZV9jdHggKmN0eCA9IE5VTEw7CiAJc3RydWN0IHZwZV9xX2RhdGEgKnNfcV9kYXRhOwogCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsOworCXN0cnVjdCB2cGVfY3R4ICpjdHg7CiAJaW50IHJldDsKIAogCXZwZV9kYmcoZGV2LCAidnBlX29wZW5cbiIpOwpAQCAtMjA1NiwxMCArMjAxOCwxMCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXhpdF9maDsKIAotCWN0eC0+bTJtX2N0eCA9IHY0bDJfbTJtX2N0eF9pbml0KGRldi0+bTJtX2RldiwgY3R4LCAmcXVldWVfaW5pdCk7CisJY3R4LT5maC5tMm1fY3R4ID0gdjRsMl9tMm1fY3R4X2luaXQoZGV2LT5tMm1fZGV2LCBjdHgsICZxdWV1ZV9pbml0KTsKIAotCWlmIChJU19FUlIoY3R4LT5tMm1fY3R4KSkgewotCQlyZXQgPSBQVFJfRVJSKGN0eC0+bTJtX2N0eCk7CisJaWYgKElTX0VSUihjdHgtPmZoLm0ybV9jdHgpKSB7CisJCXJldCA9IFBUUl9FUlIoY3R4LT5maC5tMm1fY3R4KTsKIAkJZ290byBleGl0X2ZoOwogCX0KIApAQCAtMjA3OCw3ICsyMDQwLDcgQEAKIAljdHgtPmxvYWRfbW1ycyA9IHRydWU7CiAKIAl2cGVfZGJnKGRldiwgImNyZWF0ZWQgaW5zdGFuY2UgJXAsIG0ybV9jdHg6ICVwXG4iLAotCQljdHgsIGN0eC0+bTJtX2N0eCk7CisJCWN0eCwgY3R4LT5maC5tMm1fY3R4KTsKIAogCW11dGV4X3VubG9jaygmZGV2LT5kZXZfbXV0ZXgpOwogCkBAIC0yMTE2LDcgKzIwNzgsNyBAQAogCXY0bDJfZmhfZGVsKCZjdHgtPmZoKTsKIAl2NGwyX2ZoX2V4aXQoJmN0eC0+ZmgpOwogCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmN0eC0+aGRsKTsKLQl2NGwyX20ybV9jdHhfcmVsZWFzZShjdHgtPm0ybV9jdHgpOworCXY0bDJfbTJtX2N0eF9yZWxlYXNlKGN0eC0+ZmgubTJtX2N0eCk7CiAKIAlrZnJlZShjdHgpOwogCkBAIC0yMTMzLDM5ICsyMDk1LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdnBlX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKLXsKLQlzdHJ1Y3QgdnBlX2N0eCAqY3R4ID0gZmlsZTJjdHgoZmlsZSk7Ci0Jc3RydWN0IHZwZV9kZXYgKmRldiA9IGN0eC0+ZGV2OwotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZkZXYtPmRldl9tdXRleCk7Ci0JcmV0ID0gdjRsMl9tMm1fcG9sbChmaWxlLCBjdHgtPm0ybV9jdHgsIHdhaXQpOwotCW11dGV4X3VubG9jaygmZGV2LT5kZXZfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgdnBlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCB2cGVfY3R4ICpjdHggPSBmaWxlMmN0eChmaWxlKTsKLQlzdHJ1Y3QgdnBlX2RldiAqZGV2ID0gY3R4LT5kZXY7Ci0JaW50IHJldDsKLQotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+ZGV2X211dGV4KSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlyZXQgPSB2NGwyX20ybV9tbWFwKGZpbGUsIGN0eC0+bTJtX2N0eCwgdm1hKTsKLQltdXRleF91bmxvY2soJmRldi0+ZGV2X211dGV4KTsKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHZwZV9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSB2cGVfb3BlbiwKIAkucmVsZWFzZQk9IHZwZV9yZWxlYXNlLAotCS5wb2xsCQk9IHZwZV9wb2xsLAorCS5wb2xsCQk9IHY0bDJfbTJtX2ZvcF9wb2xsLAogCS51bmxvY2tlZF9pb2N0bAk9IHZpZGVvX2lvY3RsMiwKLQkubW1hcAkJPSB2cGVfbW1hcCwKKwkubW1hcAkJPSB2NGwyX20ybV9mb3BfbW1hcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZwZV92aWRlb2RldiA9IHsKQEAgLTIzNjcsOCArMjMwMyw2IEBACiAJfSwKIAl7fSwKIH07Ci0jZWxzZQotI2RlZmluZSB2cGVfb2ZfbWF0Y2ggTlVMTAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHZwZV9wZHJ2ID0gewpAQCAtMjM3Niw3ICsyMzEwLDcgQEAKIAkucmVtb3ZlCQk9IHZwZV9yZW1vdmUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gVlBFX01PRFVMRV9OQU1FLAotCQkub2ZfbWF0Y2hfdGFibGUgPSB2cGVfb2ZfbWF0Y2gsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cih2cGVfb2ZfbWF0Y2gpLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZpdmlkL3ZpdmlkLWN0cmxzLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZpdmlkL3ZpdmlkLWN0cmxzLmMKaW5kZXggODU3ZTc4Ni4uMzJhNzk4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92aXZpZC92aXZpZC1jdHJscy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdml2aWQvdml2aWQtY3RybHMuYwpAQCAtNjg5LDcgKzY4OSw3IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgdml2aWRfY3RybF9jb2xvcnNwYWNlX3N0cmluZ3NbXSA9IHsKIAkiU01QVEUgMTcwTSIsCi0JIlJFQyA3MDkiLAorCSJSZWMuIDcwOSIsCiAJInNSR0IiLAogCSJBZG9iZVJHQiIsCiAJIkJULjIwMjAiLApAQCAtNzE2LDcgKzcxNiw3IEBACiAJInh2WUNDIDYwMSIsCiAJInh2WUNDIDcwOSIsCiAJInNZQ0MiLAotCSJCVC4yMDIwIE5vbi1Db25zdGFudCBMdW1pbmFuY2UiLAorCSJCVC4yMDIwIiwKIAkiQlQuMjAyMCBDb25zdGFudCBMdW1pbmFuY2UiLAogCSJTTVBURSAyNDBNIiwKIAlOVUxMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92aXZpZC92aXZpZC10cGcuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdml2aWQvdml2aWQtdHBnLmMKaW5kZXggZmM5YzY1My4uMzQ0OTNmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92aXZpZC92aXZpZC10cGcuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZpdmlkL3ZpdmlkLXRwZy5jCkBAIC0zNTIsMTMgKzM1MiwxNCBAQAogCQl7IENPRUZGKDAuNSwgMjI0KSwgICAgIENPRUZGKC0wLjQ2MjksIDIyNCksIENPRUZGKC0wLjA0MDUsIDIyNCkgfSwKIAl9OwogCWJvb2wgZnVsbCA9IHRwZy0+cmVhbF9xdWFudGl6YXRpb24gPT0gVjRMMl9RVUFOVElaQVRJT05fRlVMTF9SQU5HRTsKKwl1bnNpZ25lZCB5X29mZnNldCA9IGZ1bGwgPyAwIDogMTY7CiAJaW50IGxpbl95LCB5YzsKIAogCXN3aXRjaCAodHBnLT5yZWFsX3ljYmNyX2VuYykgewogCWNhc2UgVjRMMl9ZQ0JDUl9FTkNfNjAxOgogCWNhc2UgVjRMMl9ZQ0JDUl9FTkNfWFY2MDE6CiAJY2FzZSBWNEwyX1lDQkNSX0VOQ19TWUNDOgotCQlyZ2IyeWNiY3IoZnVsbCA/IGJ0NjAxX2Z1bGwgOiBidDYwMSwgciwgZywgYiwgMTYsIHksIGNiLCBjcik7CisJCXJnYjJ5Y2JjcihmdWxsID8gYnQ2MDFfZnVsbCA6IGJ0NjAxLCByLCBnLCBiLCB5X29mZnNldCwgeSwgY2IsIGNyKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX1lDQkNSX0VOQ19CVDIwMjA6CiAJCXJnYjJ5Y2JjcihidDIwMjAsIHIsIGcsIGIsIDE2LCB5LCBjYiwgY3IpOwpAQCAtMzg0LDcgKzM4NSw3IEBACiAJY2FzZSBWNEwyX1lDQkNSX0VOQ183MDk6CiAJY2FzZSBWNEwyX1lDQkNSX0VOQ19YVjcwOToKIAlkZWZhdWx0OgotCQlyZ2IyeWNiY3IoZnVsbCA/IHJlYzcwOV9mdWxsIDogcmVjNzA5LCByLCBnLCBiLCAwLCB5LCBjYiwgY3IpOworCQlyZ2IyeWNiY3IoZnVsbCA/IHJlYzcwOV9mdWxsIDogcmVjNzA5LCByLCBnLCBiLCB5X29mZnNldCwgeSwgY2IsIGNyKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtNDM5LDEzICs0NDAsMTQgQEAKIAkJeyBDT0VGRigxLCAyMTkpLCBDT0VGRigxLjg4MTQsIDIyNCksICBDT0VGRigwLCAyMjQpICAgICAgIH0sCiAJfTsKIAlib29sIGZ1bGwgPSB0cGctPnJlYWxfcXVhbnRpemF0aW9uID09IFY0TDJfUVVBTlRJWkFUSU9OX0ZVTExfUkFOR0U7CisJdW5zaWduZWQgeV9vZmZzZXQgPSBmdWxsID8gMCA6IDE2OwogCWludCBsaW5fciwgbGluX2csIGxpbl9iLCBsaW5feTsKIAogCXN3aXRjaCAodHBnLT5yZWFsX3ljYmNyX2VuYykgewogCWNhc2UgVjRMMl9ZQ0JDUl9FTkNfNjAxOgogCWNhc2UgVjRMMl9ZQ0JDUl9FTkNfWFY2MDE6CiAJY2FzZSBWNEwyX1lDQkNSX0VOQ19TWUNDOgotCQl5Y2JjcjJyZ2IoZnVsbCA/IGJ0NjAxX2Z1bGwgOiBidDYwMSwgeSwgY2IsIGNyLCAxNiwgciwgZywgYik7CisJCXljYmNyMnJnYihmdWxsID8gYnQ2MDFfZnVsbCA6IGJ0NjAxLCB5LCBjYiwgY3IsIHlfb2Zmc2V0LCByLCBnLCBiKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX1lDQkNSX0VOQ19CVDIwMjA6CiAJCXljYmNyMnJnYihidDIwMjAsIHksIGNiLCBjciwgMTYsIHIsIGcsIGIpOwpAQCAtNDgwLDcgKzQ4Miw3IEBACiAJY2FzZSBWNEwyX1lDQkNSX0VOQ183MDk6CiAJY2FzZSBWNEwyX1lDQkNSX0VOQ19YVjcwOToKIAlkZWZhdWx0OgotCQl5Y2JjcjJyZ2IoZnVsbCA/IHJlYzcwOV9mdWxsIDogcmVjNzA5LCB5LCBjYiwgY3IsIDE2LCByLCBnLCBiKTsKKwkJeWNiY3IycmdiKGZ1bGwgPyByZWM3MDlfZnVsbCA6IHJlYzcwOSwgeSwgY2IsIGNyLCB5X29mZnNldCwgciwgZywgYik7CiAJCWJyZWFrOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdml2aWQvdml2aWQtdHBnLmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZpdmlkL3ZpdmlkLXRwZy5oCmluZGV4IDlkYzQ2M2E0Li5iZDhiMWM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92aXZpZC92aXZpZC10cGcuaAorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZpdmlkL3ZpdmlkLXRwZy5oCkBAIC0yMCw3ICsyMCw2IEBACiAjaWZuZGVmIF9WSVZJRF9UUEdfSF8KICNkZWZpbmUgX1ZJVklEX1RQR19IXwogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxLmggYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMS5oCmluZGV4IDEyNDY3MTkuLjk4OWU5NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxLmgKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDEuaApAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS92c3AxLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9tZWRpYS1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgpAQCAtNDAsOSArMzksMjAgQEAKICNkZWZpbmUgVlNQMV9NQVhfVURTCQkzCiAjZGVmaW5lIFZTUDFfTUFYX1dQRgkJNAogCisjZGVmaW5lIFZTUDFfSEFTX0xJRgkJKDEgPDwgMCkKKyNkZWZpbmUgVlNQMV9IQVNfTFVUCQkoMSA8PCAxKQorI2RlZmluZSBWU1AxX0hBU19TUlUJCSgxIDw8IDIpCisKK3N0cnVjdCB2c3AxX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBmZWF0dXJlczsKKwl1bnNpZ25lZCBpbnQgcnBmX2NvdW50OworCXVuc2lnbmVkIGludCB1ZHNfY291bnQ7CisJdW5zaWduZWQgaW50IHdwZl9jb3VudDsKK307CisKIHN0cnVjdCB2c3AxX2RldmljZSB7CiAJc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCB2c3AxX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCB2c3AxX3BsYXRmb3JtX2RhdGEgcGRhdGE7CiAKIAl2b2lkIF9faW9tZW0gKm1taW87CiAJc3RydWN0IGNsayAqY2xvY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9icnUuYyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2JydS5jCmluZGV4IGIyMWYzODEuLjQwMWUyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2JydS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2JydS5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAidnNwMV9icnUuaCIKICNpbmNsdWRlICJ2c3AxX3J3cGYuaCIKIAotI2RlZmluZSBCUlVfTUlOX1NJWkUJCQkJNFUKKyNkZWZpbmUgQlJVX01JTl9TSVpFCQkJCTFVCiAjZGVmaW5lIEJSVV9NQVhfU0laRQkJCQk4MTkwVQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfZHJ2LmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9kcnYuYwppbmRleCA1ZWIxNmU4Li45MTM0ODVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9kcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9kcnYuYwpAQCAtNDAsNyArNDAsNyBAQAogCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwogCXVuc2lnbmVkIGludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IHZzcDEtPnBkYXRhLT53cGZfY291bnQ7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCB2c3AxLT5wZGF0YS53cGZfY291bnQ7ICsraSkgewogCQlzdHJ1Y3QgdnNwMV9yd3BmICp3cGYgPSB2c3AxLT53cGZbaV07CiAJCXN0cnVjdCB2c3AxX3BpcGVsaW5lICpwaXBlOwogCQl1MzIgc3RhdHVzOwpAQCAtMTgxLDcgKzE4MSw3IEBACiAKIAlsaXN0X2FkZF90YWlsKCZ2c3AxLT5oc3QtPmVudGl0eS5saXN0X2RldiwgJnZzcDEtPmVudGl0aWVzKTsKIAotCWlmICh2c3AxLT5wZGF0YS0+ZmVhdHVyZXMgJiBWU1AxX0hBU19MSUYpIHsKKwlpZiAodnNwMS0+cGRhdGEuZmVhdHVyZXMgJiBWU1AxX0hBU19MSUYpIHsKIAkJdnNwMS0+bGlmID0gdnNwMV9saWZfY3JlYXRlKHZzcDEpOwogCQlpZiAoSVNfRVJSKHZzcDEtPmxpZikpIHsKIAkJCXJldCA9IFBUUl9FUlIodnNwMS0+bGlmKTsKQEAgLTE5MSw3ICsxOTEsNyBAQAogCQlsaXN0X2FkZF90YWlsKCZ2c3AxLT5saWYtPmVudGl0eS5saXN0X2RldiwgJnZzcDEtPmVudGl0aWVzKTsKIAl9CiAKLQlpZiAodnNwMS0+cGRhdGEtPmZlYXR1cmVzICYgVlNQMV9IQVNfTFVUKSB7CisJaWYgKHZzcDEtPnBkYXRhLmZlYXR1cmVzICYgVlNQMV9IQVNfTFVUKSB7CiAJCXZzcDEtPmx1dCA9IHZzcDFfbHV0X2NyZWF0ZSh2c3AxKTsKIAkJaWYgKElTX0VSUih2c3AxLT5sdXQpKSB7CiAJCQlyZXQgPSBQVFJfRVJSKHZzcDEtPmx1dCk7CkBAIC0yMDEsNyArMjAxLDcgQEAKIAkJbGlzdF9hZGRfdGFpbCgmdnNwMS0+bHV0LT5lbnRpdHkubGlzdF9kZXYsICZ2c3AxLT5lbnRpdGllcyk7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IHZzcDEtPnBkYXRhLT5ycGZfY291bnQ7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCB2c3AxLT5wZGF0YS5ycGZfY291bnQ7ICsraSkgewogCQlzdHJ1Y3QgdnNwMV9yd3BmICpycGY7CiAKIAkJcnBmID0gdnNwMV9ycGZfY3JlYXRlKHZzcDEsIGkpOwpAQCAtMjE0LDcgKzIxNCw3IEBACiAJCWxpc3RfYWRkX3RhaWwoJnJwZi0+ZW50aXR5Lmxpc3RfZGV2LCAmdnNwMS0+ZW50aXRpZXMpOwogCX0KIAotCWlmICh2c3AxLT5wZGF0YS0+ZmVhdHVyZXMgJiBWU1AxX0hBU19TUlUpIHsKKwlpZiAodnNwMS0+cGRhdGEuZmVhdHVyZXMgJiBWU1AxX0hBU19TUlUpIHsKIAkJdnNwMS0+c3J1ID0gdnNwMV9zcnVfY3JlYXRlKHZzcDEpOwogCQlpZiAoSVNfRVJSKHZzcDEtPnNydSkpIHsKIAkJCXJldCA9IFBUUl9FUlIodnNwMS0+c3J1KTsKQEAgLTIyNCw3ICsyMjQsNyBAQAogCQlsaXN0X2FkZF90YWlsKCZ2c3AxLT5zcnUtPmVudGl0eS5saXN0X2RldiwgJnZzcDEtPmVudGl0aWVzKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgdnNwMS0+cGRhdGEtPnVkc19jb3VudDsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IHZzcDEtPnBkYXRhLnVkc19jb3VudDsgKytpKSB7CiAJCXN0cnVjdCB2c3AxX3VkcyAqdWRzOwogCiAJCXVkcyA9IHZzcDFfdWRzX2NyZWF0ZSh2c3AxLCBpKTsKQEAgLTIzNyw3ICsyMzcsNyBAQAogCQlsaXN0X2FkZF90YWlsKCZ1ZHMtPmVudGl0eS5saXN0X2RldiwgJnZzcDEtPmVudGl0aWVzKTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgdnNwMS0+cGRhdGEtPndwZl9jb3VudDsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IHZzcDEtPnBkYXRhLndwZl9jb3VudDsgKytpKSB7CiAJCXN0cnVjdCB2c3AxX3J3cGYgKndwZjsKIAogCQl3cGYgPSB2c3AxX3dwZl9jcmVhdGUodnNwMSwgaSk7CkBAIC0yNjEsNyArMjYxLDcgQEAKIAkJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAodnNwMS0+cGRhdGEtPmZlYXR1cmVzICYgVlNQMV9IQVNfTElGKSB7CisJaWYgKHZzcDEtPnBkYXRhLmZlYXR1cmVzICYgVlNQMV9IQVNfTElGKSB7CiAJCXJldCA9IG1lZGlhX2VudGl0eV9jcmVhdGVfbGluaygKIAkJCSZ2c3AxLT53cGZbMF0tPmVudGl0eS5zdWJkZXYuZW50aXR5LCBSV1BGX1BBRF9TT1VSQ0UsCiAJCQkmdnNwMS0+bGlmLT5lbnRpdHkuc3ViZGV2LmVudGl0eSwgTElGX1BBRF9TSU5LLCAwKTsKQEAgLTI5NCw3ICsyOTQsNyBAQAogCS8qIFJlc2V0IGFueSBjaGFubmVsIHRoYXQgbWlnaHQgYmUgcnVubmluZy4gKi8KIAlzdGF0dXMgPSB2c3AxX3JlYWQodnNwMSwgVkk2X1NUQVRVUyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgdnNwMS0+cGRhdGEtPndwZl9jb3VudDsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IHZzcDEtPnBkYXRhLndwZl9jb3VudDsgKytpKSB7CiAJCXVuc2lnbmVkIGludCB0aW1lb3V0OwogCiAJCWlmICghKHN0YXR1cyAmIFZJNl9TVEFUVVNfU1lTX0FDVChpKSkpCkBAIC0zMTgsMTAgKzMxOCwxMCBAQAogCXZzcDFfd3JpdGUodnNwMSwgVkk2X0NMS19EQ1NXVCwgKDggPDwgVkk2X0NMS19EQ1NXVF9DU1RQV19TSElGVCkgfAogCQkgICAoOCA8PCBWSTZfQ0xLX0RDU1dUX0NTVFJXX1NISUZUKSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgdnNwMS0+cGRhdGEtPnJwZl9jb3VudDsgKytpKQorCWZvciAoaSA9IDA7IGkgPCB2c3AxLT5wZGF0YS5ycGZfY291bnQ7ICsraSkKIAkJdnNwMV93cml0ZSh2c3AxLCBWSTZfRFBSX1JQRl9ST1VURShpKSwgVkk2X0RQUl9OT0RFX1VOVVNFRCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgdnNwMS0+cGRhdGEtPnVkc19jb3VudDsgKytpKQorCWZvciAoaSA9IDA7IGkgPCB2c3AxLT5wZGF0YS51ZHNfY291bnQ7ICsraSkKIAkJdnNwMV93cml0ZSh2c3AxLCBWSTZfRFBSX1VEU19ST1VURShpKSwgVkk2X0RQUl9OT0RFX1VOVVNFRCk7CiAKIAl2c3AxX3dyaXRlKHZzcDEsIFZJNl9EUFJfU1JVX1JPVVRFLCBWSTZfRFBSX05PREVfVU5VU0VEKTsKQEAgLTQyOCw0NyArNDI4LDEwIEBACiAgKiBQbGF0Zm9ybSBEcml2ZXIKICAqLwogCi1zdGF0aWMgaW50IHZzcDFfdmFsaWRhdGVfcGxhdGZvcm1fZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgdnNwMV9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3N0YXRpYyBpbnQgdnNwMV9wYXJzZV9kdChzdHJ1Y3QgdnNwMV9kZXZpY2UgKnZzcDEpCiB7Ci0JaWYgKHBkYXRhID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyBwbGF0Zm9ybSBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHBkYXRhLT5ycGZfY291bnQgPD0gMCB8fCBwZGF0YS0+cnBmX2NvdW50ID4gVlNQMV9NQVhfUlBGKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgbnVtYmVyIG9mIFJQRiAoJXUpXG4iLAotCQkJcGRhdGEtPnJwZl9jb3VudCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmIChwZGF0YS0+dWRzX2NvdW50IDw9IDAgfHwgcGRhdGEtPnVkc19jb3VudCA+IFZTUDFfTUFYX1VEUykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIG51bWJlciBvZiBVRFMgKCV1KVxuIiwKLQkJCXBkYXRhLT51ZHNfY291bnQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAocGRhdGEtPndwZl9jb3VudCA8PSAwIHx8IHBkYXRhLT53cGZfY291bnQgPiBWU1AxX01BWF9XUEYpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBudW1iZXIgb2YgV1BGICgldSlcbiIsCi0JCQlwZGF0YS0+d3BmX2NvdW50KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdnNwMV9wbGF0Zm9ybV9kYXRhICoKLXZzcDFfZ2V0X3BsYXRmb3JtX2RhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7Ci0Jc3RydWN0IHZzcDFfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0KLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX09GKSB8fCBucCA9PSBOVUxMKQotCQlyZXR1cm4gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0KLQlwZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBkYXRhID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSB2c3AxLT5kZXYtPm9mX25vZGU7CisJc3RydWN0IHZzcDFfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSAmdnNwMS0+cGRhdGE7CiAKIAlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAicmVuZXNhcyxoYXMtbGlmIikpCiAJCXBkYXRhLT5mZWF0dXJlcyB8PSBWU1AxX0hBU19MSUY7CkBAIC00ODEsNyArNDQ0LDI1IEBACiAJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJyZW5lc2FzLCN1ZHMiLCAmcGRhdGEtPnVkc19jb3VudCk7CiAJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJyZW5lc2FzLCN3cGYiLCAmcGRhdGEtPndwZl9jb3VudCk7CiAKLQlyZXR1cm4gcGRhdGE7CisJaWYgKHBkYXRhLT5ycGZfY291bnQgPD0gMCB8fCBwZGF0YS0+cnBmX2NvdW50ID4gVlNQMV9NQVhfUlBGKSB7CisJCWRldl9lcnIodnNwMS0+ZGV2LCAiaW52YWxpZCBudW1iZXIgb2YgUlBGICgldSlcbiIsCisJCQlwZGF0YS0+cnBmX2NvdW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHBkYXRhLT51ZHNfY291bnQgPD0gMCB8fCBwZGF0YS0+dWRzX2NvdW50ID4gVlNQMV9NQVhfVURTKSB7CisJCWRldl9lcnIodnNwMS0+ZGV2LCAiaW52YWxpZCBudW1iZXIgb2YgVURTICgldSlcbiIsCisJCQlwZGF0YS0+dWRzX2NvdW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHBkYXRhLT53cGZfY291bnQgPD0gMCB8fCBwZGF0YS0+d3BmX2NvdW50ID4gVlNQMV9NQVhfV1BGKSB7CisJCWRldl9lcnIodnNwMS0+ZGV2LCAiaW52YWxpZCBudW1iZXIgb2YgV1BGICgldSlcbiIsCisJCQlwZGF0YS0+d3BmX2NvdW50KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdnNwMV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtNDk5LDExICs0ODAsNyBAQAogCW11dGV4X2luaXQoJnZzcDEtPmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZ2c3AxLT5lbnRpdGllcyk7CiAKLQl2c3AxLT5wZGF0YSA9IHZzcDFfZ2V0X3BsYXRmb3JtX2RhdGEocGRldik7Ci0JaWYgKHZzcDEtPnBkYXRhID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmV0ID0gdnNwMV92YWxpZGF0ZV9wbGF0Zm9ybV9kYXRhKHBkZXYsIHZzcDEtPnBkYXRhKTsKKwlyZXQgPSB2c3AxX3BhcnNlX2R0KHZzcDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9oc2l0LmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9oc2l0LmMKaW5kZXggODBiZWRjNS4uMGJjMDQ3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfaHNpdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX2hzaXQuYwpAQCAtMjYsMTEgKzI2LDYgQEAKICAqIERldmljZSBBY2Nlc3MKICAqLwogCi1zdGF0aWMgaW5saW5lIHUzMiB2c3AxX2hzaXRfcmVhZChzdHJ1Y3QgdnNwMV9oc2l0ICpoc2l0LCB1MzIgcmVnKQotewotCXJldHVybiB2c3AxX3JlYWQoaHNpdC0+ZW50aXR5LnZzcDEsIHJlZyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCB2c3AxX2hzaXRfd3JpdGUoc3RydWN0IHZzcDFfaHNpdCAqaHNpdCwgdTMyIHJlZywgdTMyIGRhdGEpCiB7CiAJdnNwMV93cml0ZShoc2l0LT5lbnRpdHkudnNwMSwgcmVnLCBkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX3JlZ3MuaCBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX3JlZ3MuaAppbmRleCA1NWYxNjNkLi5kYTNjNTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9yZWdzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfcmVncy5oCkBAIC00MywxMiArNDMsMTIgQEAKICNkZWZpbmUgVkk2X0RJU1BfSVJRX0VOQgkJMHgwMDc4CiAjZGVmaW5lIFZJNl9ESVNQX0lSUV9FTkJfRFNURQkJKDEgPDwgOCkKICNkZWZpbmUgVkk2X0RJU1BfSVJRX0VOQl9NQUVFCQkoMSA8PCA1KQotI2RlZmluZSBWSTZfRElTUF9JUlFfRU5CX0xORUUobikJKDEgPDwgKChuKSArIDQpKQorI2RlZmluZSBWSTZfRElTUF9JUlFfRU5CX0xORUUobikJKDEgPDwgKG4pKQogCiAjZGVmaW5lIFZJNl9ESVNQX0lSUV9TVEEJCTB4MDA3YwogI2RlZmluZSBWSTZfRElTUF9JUlFfU1RBX0RTRQkJKDEgPDwgOCkKICNkZWZpbmUgVkk2X0RJU1BfSVJRX1NUQV9NQUUJCSgxIDw8IDUpCi0jZGVmaW5lIFZJNl9ESVNQX0lSUV9TVEFfTE5FKG4pCQkoMSA8PCAoKG4pICsgNCkpCisjZGVmaW5lIFZJNl9ESVNQX0lSUV9TVEFfTE5FKG4pCQkoMSA8PCAobikpCiAKICNkZWZpbmUgVkk2X1dQRl9MSU5FX0NPVU5UKG4pCQkoMHgwMDg0ICsgKG4pICogNCkKICNkZWZpbmUgVkk2X1dQRl9MSU5FX0NPVU5UX01BU0sJCSgweDFmZmZmZiA8PCAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfcnBmLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9ycGYuYwppbmRleCBkMTRkMjZiLi4zMjk0NTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9ycGYuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9ycGYuYwpAQCAtMTA2LDExICsxMDYsMjIgQEAKIAkJCSsgY3JvcC0+bGVmdCAqIGZtdGluZm8tPmJwcFswXSAvIDg7CiAJcHN0cmlkZSA9IGZvcm1hdC0+cGxhbmVfZm10WzBdLmJ5dGVzcGVybGluZQogCQk8PCBWSTZfUlBGX1NSQ01fUFNUUklERV9ZX1NISUZUOworCisJdnNwMV9ycGZfd3JpdGUocnBmLCBWSTZfUlBGX1NSQ01fQUREUl9ZLAorCQkgICAgICAgcnBmLT5idWZfYWRkclswXSArIHJwZi0+b2Zmc2V0c1swXSk7CisKIAlpZiAoZm9ybWF0LT5udW1fcGxhbmVzID4gMSkgewogCQlycGYtPm9mZnNldHNbMV0gPSBjcm9wLT50b3AgKiBmb3JtYXQtPnBsYW5lX2ZtdFsxXS5ieXRlc3BlcmxpbmUKIAkJCQkrIGNyb3AtPmxlZnQgKiBmbXRpbmZvLT5icHBbMV0gLyA4OwogCQlwc3RyaWRlIHw9IGZvcm1hdC0+cGxhbmVfZm10WzFdLmJ5dGVzcGVybGluZQogCQkJPDwgVkk2X1JQRl9TUkNNX1BTVFJJREVfQ19TSElGVDsKKworCQl2c3AxX3JwZl93cml0ZShycGYsIFZJNl9SUEZfU1JDTV9BRERSX0MwLAorCQkJICAgICAgIHJwZi0+YnVmX2FkZHJbMV0gKyBycGYtPm9mZnNldHNbMV0pOworCisJCWlmIChmb3JtYXQtPm51bV9wbGFuZXMgPiAyKQorCQkJdnNwMV9ycGZfd3JpdGUocnBmLCBWSTZfUlBGX1NSQ01fQUREUl9DMSwKKwkJCQkgICAgICAgcnBmLT5idWZfYWRkclsyXSArIHJwZi0+b2Zmc2V0c1sxXSk7CiAJfQogCiAJdnNwMV9ycGZfd3JpdGUocnBmLCBWSTZfUlBGX1NSQ01fUFNUUklERSwgcHN0cmlkZSk7CkBAIC0xNzksNiArMTkwLDEzIEBACiAJCQkgICBzdHJ1Y3QgdnNwMV92aWRlb19idWZmZXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdnNwMV9yd3BmICpycGYgPSBjb250YWluZXJfb2YodmlkZW8sIHN0cnVjdCB2c3AxX3J3cGYsIHZpZGVvKTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAzOyArK2kpCisJCXJwZi0+YnVmX2FkZHJbaV0gPSBidWYtPmFkZHJbaV07CisKKwlpZiAoIXZzcDFfZW50aXR5X2lzX3N0cmVhbWluZygmcnBmLT5lbnRpdHkpKQorCQlyZXR1cm47CiAKIAl2c3AxX3JwZl93cml0ZShycGYsIFZJNl9SUEZfU1JDTV9BRERSX1ksCiAJCSAgICAgICBidWYtPmFkZHJbMF0gKyBycGYtPm9mZnNldHNbMF0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfcndwZi5oIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfcndwZi5oCmluZGV4IDI4ZGQ5ZTcuLjJjZjFmMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX3J3cGYuaAorKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9yd3BmLmgKQEAgLTM5LDYgKzM5LDcgQEAKIAlzdHJ1Y3QgdjRsMl9yZWN0IGNyb3A7CiAKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0c1syXTsKKwlkbWFfYWRkcl90IGJ1Zl9hZGRyWzNdOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdnNwMV9yd3BmICp0b19yd3BmKHN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfd3BmLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV93cGYuYwppbmRleCA2ZTA1Nzc2Li4xZDJiM2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV93cGYuYworKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV93cGYuYwpAQCAtOTIsMTkgKzkyLDIwIEBACiAJCXJldHVybiAwOwogCX0KIAotCS8qIFNvdXJjZXMuIElmIHRoZSBwaXBlbGluZSBoYXMgYSBzaW5nbGUgaW5wdXQgY29uZmlndXJlIGl0IGFzIHRoZQotCSAqIG1hc3RlciBsYXllci4gT3RoZXJ3aXNlIGNvbmZpZ3VyZSBhbGwgaW5wdXRzIGFzIHN1Yi1sYXllcnMgYW5kCi0JICogc2VsZWN0IHRoZSB2aXJ0dWFsIFJQRiBhcyB0aGUgbWFzdGVyIGxheWVyLgorCS8qIFNvdXJjZXMuIElmIHRoZSBwaXBlbGluZSBoYXMgYSBzaW5nbGUgaW5wdXQgYW5kIEJSVSBpcyBub3QgdXNlZCwKKwkgKiBjb25maWd1cmUgaXQgYXMgdGhlIG1hc3RlciBsYXllci4gT3RoZXJ3aXNlIGNvbmZpZ3VyZSBhbGwKKwkgKiBpbnB1dHMgYXMgc3ViLWxheWVycyBhbmQgc2VsZWN0IHRoZSB2aXJ0dWFsIFJQRiBhcyB0aGUgbWFzdGVyCisJICogbGF5ZXIuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IHBpcGUtPm51bV9pbnB1dHM7ICsraSkgewogCQlzdHJ1Y3QgdnNwMV9yd3BmICppbnB1dCA9IHBpcGUtPmlucHV0c1tpXTsKIAotCQlzcmNycGYgfD0gcGlwZS0+bnVtX2lucHV0cyA9PSAxCisJCXNyY3JwZiB8PSAoIXBpcGUtPmJydSAmJiBwaXBlLT5udW1faW5wdXRzID09IDEpCiAJCQk/IFZJNl9XUEZfU1JDUlBGX1JQRl9BQ1RfTVNUKGlucHV0LT5lbnRpdHkuaW5kZXgpCiAJCQk6IFZJNl9XUEZfU1JDUlBGX1JQRl9BQ1RfU1VCKGlucHV0LT5lbnRpdHkuaW5kZXgpOwogCX0KIAotCWlmIChwaXBlLT5udW1faW5wdXRzID4gMSkKKwlpZiAocGlwZS0+YnJ1IHx8IHBpcGUtPm51bV9pbnB1dHMgPiAxKQogCQlzcmNycGYgfD0gVkk2X1dQRl9TUkNSUEZfVklSQUNUX01TVDsKIAogCXZzcDFfd3BmX3dyaXRlKHdwZiwgVkk2X1dQRl9TUkNSUEYsIHNyY3JwZik7CkBAIC0yODAsNyArMjgxLDcgQEAKIAkgKiBleGNlcHQgZm9yIHRoZSBXUEYwIHNvdXJjZSBsaW5rIGlmIGEgTElGIGlzIHByZXNlbnQuCiAJICovCiAJZmxhZ3MgPSBNRURJQV9MTktfRkxfRU5BQkxFRDsKLQlpZiAoISh2c3AxLT5wZGF0YS0+ZmVhdHVyZXMgJiBWU1AxX0hBU19MSUYpIHx8IGluZGV4ICE9IDApCisJaWYgKCEodnNwMS0+cGRhdGEuZmVhdHVyZXMgJiBWU1AxX0hBU19MSUYpIHx8IGluZGV4ICE9IDApCiAJCWZsYWdzIHw9IE1FRElBX0xOS19GTF9JTU1VVEFCTEU7CiAKIAlyZXQgPSBtZWRpYV9lbnRpdHlfY3JlYXRlX2xpbmsoJndwZi0+ZW50aXR5LnN1YmRldi5lbnRpdHksCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jCmluZGV4IGE3MzlhZDQuLmVhOTMwODc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYwpAQCAtMTI5LDExICsxMjksMTEgQEAKIAl9IGVsc2UgaWYgKGN1cnZvbCA8IHZvbCkgewogCQlvdXRiKDB4OTgsIGlzYS0+aW8pOwkvKiB2b2x1bWUgdXAgKyBzaWdzdHIgKyBvbgkqLwogCQlmb3IgKDsgY3Vydm9sIDwgdm9sOyBjdXJ2b2wrKykKLQkJCXVkZWxheSgzMDAwKTsKKwkJCW1kZWxheSgzKTsKIAl9IGVsc2UgaWYgKGN1cnZvbCA+IHZvbCkgewogCQlvdXRiKDB4NTgsIGlzYS0+aW8pOwkvKiB2b2x1bWUgZG93biArIHNpZ3N0ciArIG9uCSovCiAJCWZvciAoOyBjdXJ2b2wgPiB2b2w7IGN1cnZvbC0tKQotCQkJdWRlbGF5KDMwMDApOworCQkJbWRlbGF5KDMpOwogCX0KIAlvdXRiKDB4ZDgsIGlzYS0+aW8pOwkJLyogdm9sdW1lIHN0ZWFkeSArIHNpZ3N0ciArIG9uCSovCiAJcnQtPmN1cnZvbCA9IHZvbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vdGVhNTc1eC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby90ZWE1NzV4LmMKaW5kZXggZjFhMDg2Ny4uNDNkMWVhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby90ZWE1NzV4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby90ZWE1NzV4LmMKQEAgLTI0NywxMCArMjQ3LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZW51bV9mcmVxX2JhbmRzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQkgc3RydWN0IHY0bDJfZnJlcXVlbmN5X2JhbmQgKmJhbmQpCitpbnQgc25kX3RlYTU3NXhfZW51bV9mcmVxX2JhbmRzKHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhLAorCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3lfYmFuZCAqYmFuZCkKIHsKLQlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJaW50IGluZGV4OwogCiAJaWYgKGJhbmQtPnR1bmVyICE9IDApCkBAIC0yNzksMTggKzI3OCwyNSBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHNuZF90ZWE1NzV4X2VudW1fZnJlcV9iYW5kcyk7CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQorc3RhdGljIGludCB2aWRpb2NfZW51bV9mcmVxX2JhbmRzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQkgc3RydWN0IHY0bDJfZnJlcXVlbmN5X2JhbmQgKmJhbmQpCiB7CiAJc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJcmV0dXJuIHNuZF90ZWE1NzV4X2VudW1fZnJlcV9iYW5kcyh0ZWEsIGJhbmQpOworfQorCitpbnQgc25kX3RlYTU3NXhfZ190dW5lcihzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSwgc3RydWN0IHY0bDJfdHVuZXIgKnYpCit7CiAJc3RydWN0IHY0bDJfZnJlcXVlbmN5X2JhbmQgYmFuZF9mbSA9IHsgMCwgfTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc25kX3RlYTU3NXhfcmVhZCh0ZWEpOwotCXZpZGlvY19lbnVtX2ZyZXFfYmFuZHMoZmlsZSwgcHJpdiwgJmJhbmRfZm0pOworCXNuZF90ZWE1NzV4X2VudW1fZnJlcV9iYW5kcyh0ZWEsICZiYW5kX2ZtKTsKIAogCW1lbXNldCh2LCAwLCBzaXplb2YoKnYpKTsKIAlzdHJsY3B5KHYtPm5hbWUsIHRlYS0+aGFzX2FtID8gIkZNL0FNIiA6ICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CkBAIC0zMDQsNiArMzEwLDE1IEBACiAJdi0+c2lnbmFsID0gdGVhLT50dW5lZCA/IDB4ZmZmZiA6IDA7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHNuZF90ZWE1NzV4X2dfdHVuZXIpOworCitzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKK3sKKwlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlyZXR1cm4gc25kX3RlYTU3NXhfZ190dW5lcih0ZWEsIHYpOworfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQljb25zdCBzdHJ1Y3QgdjRsMl90dW5lciAqdikKQEAgLTM1NiwxMCArMzcxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19od19mcmVxX3NlZWsoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAotCQkJCQljb25zdCBzdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWsgKmEpCitpbnQgc25kX3RlYTU3NXhfc19od19mcmVxX3NlZWsoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhLAorCQkJCWNvbnN0IHN0cnVjdCB2NGwyX2h3X2ZyZXFfc2VlayAqYSkKIHsKLQlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCWludCBpLCBzcGFjaW5nOwogCkBAIC00NDIsNiArNDU2LDE1IEBACiAJc25kX3RlYTU3NXhfc2V0X2ZyZXEodGVhKTsKIAlyZXR1cm4gLUVOT0RBVEE7CiB9CitFWFBPUlRfU1lNQk9MKHNuZF90ZWE1NzV4X3NfaHdfZnJlcV9zZWVrKTsKKworc3RhdGljIGludCB2aWRpb2Nfc19od19mcmVxX3NlZWsoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCQljb25zdCBzdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWsgKmEpCit7CisJc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJcmV0dXJuIHNuZF90ZWE1NzV4X3NfaHdfZnJlcV9zZWVrKGZpbGUsIHRlYSwgYSk7Cit9CiAKIHN0YXRpYyBpbnQgdGVhNTc1eF9zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vd2wxMjh4L2ZtZHJ2X3J4LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3dsMTI4eC9mbWRydl9yeC5jCmluZGV4IDA5NjMyY2IuLmNmYWViMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vd2wxMjh4L2ZtZHJ2X3J4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby93bDEyOHgvZm1kcnZfcnguYwpAQCAtNzg1LDIyICs3ODUsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBSZXR1cm5zIGN1cnJlbnQgUkRTIG9wZXJhdGlvbiBtb2RlICovCi1pbnQgZm1fcnhfZ2V0X3Jkc19zeXN0ZW0oc3RydWN0IGZtZGV2ICpmbWRldiwgdTggKnJkc19tb2RlKQotewotCWlmIChmbWRldi0+Y3Vycl9mbW1vZGUgIT0gRk1fTU9ERV9SWCkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCWlmIChyZHNfbW9kZSA9PSBOVUxMKSB7Ci0JCWZtZXJyKCJJbnZhbGlkIG1lbW9yeVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCSpyZHNfbW9kZSA9IGZtZGV2LT5yeC5yZHNfbW9kZTsKLQotCXJldHVybiAwOwotfQotCiAvKiBDb25maWd1cmVzIEFsdGVybmF0ZSBGcmVxdWVuY3kgc3dpdGNoIG1vZGUgKi8KIGludCBmbV9yeF9zZXRfYWZfc3dpdGNoKHN0cnVjdCBmbWRldiAqZm1kZXYsIHU4IGFmX21vZGUpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3dsMTI4eC9mbWRydl9yeC5oIGIvZHJpdmVycy9tZWRpYS9yYWRpby93bDEyOHgvZm1kcnZfcnguaAppbmRleCAzMmFkZDgxLi4yMzkyMjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3dsMTI4eC9mbWRydl9yeC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vd2wxMjh4L2ZtZHJ2X3J4LmgKQEAgLTQwLDcgKzQwLDYgQEAKIGludCBmbV9yeF9zZWVrKHN0cnVjdCBmbWRldiAqLCB1MzIsIHUzMiwgdTMyKTsKIAogaW50IGZtX3J4X2dldF9yZHNfbW9kZShzdHJ1Y3QgZm1kZXYgKiwgdTggKik7Ci1pbnQgZm1fcnhfZ2V0X3Jkc19zeXN0ZW0oc3RydWN0IGZtZGV2ICosIHU4ICopOwogaW50IGZtX3J4X2dldF9tdXRlX21vZGUoc3RydWN0IGZtZGV2ICosIHU4ICopOwogaW50IGZtX3J4X2dldF92b2x1bWUoc3RydWN0IGZtZGV2ICosIHUxNiAqKTsKIGludCBmbV9yeF9nZXRfYmFuZF9mcmVxX3JhbmdlKHN0cnVjdCBmbWRldiAqLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvcmMvaW1nLWlyL0tjb25maWcKaW5kZXggNTgwNzE1Yy4uYTg5NmQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3JjL2ltZy1pci9LY29uZmlnCkBAIC02MCwzICs2MCwxOCBAQAogCWhlbHAKIAkgICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgU2FueW8gcHJvdG9jb2wgKHVzZWQgYnkgU2FueW8sCiAJICAgQWl3YSwgQ2hpbm9uIHJlbW90ZXMpIGluIHRoZSBJbWdUZWMgaW5mcmFyZWQgZGVjb2RlciBibG9jay4KKworY29uZmlnIElSX0lNR19SQzUKKwlib29sICJQaGlsaXBzIFJDNSBwcm90b2NvbCBzdXBwb3J0IgorCWRlcGVuZHMgb24gSVJfSU1HX0hXCisJaGVscAorCSAgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBSQzUgcHJvdG9jb2wgaW4gdGhlIEltZ1RlYworCSAgIGluZnJhcmVkIGRlY29kZXIgYmxvY2suCisKK2NvbmZpZyBJUl9JTUdfUkM2CisJYm9vbCAiUGhpbGlwcyBSQzYgcHJvdG9jb2wgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIElSX0lNR19IVworCWhlbHAKKwkgICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgUkM2IHByb3RvY29sIGluIHRoZSBJbWdUZWMKKwkgICBpbmZyYXJlZCBkZWNvZGVyIGJsb2NrLgorCSAgIE5vdGU6IFRoaXMgdmVyc2lvbiBvbmx5IHN1cHBvcnRzIG1vZGUgMC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaW1nLWlyL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvTWFrZWZpbGUKaW5kZXggOTJhNDU5ZC4uOGU2ZDQ1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvTWFrZWZpbGUKQEAgLTYsNiArNiw4IEBACiBpbWctaXItJChDT05GSUdfSVJfSU1HX1NPTlkpCSs9IGltZy1pci1zb255Lm8KIGltZy1pci0kKENPTkZJR19JUl9JTUdfU0hBUlApCSs9IGltZy1pci1zaGFycC5vCiBpbWctaXItJChDT05GSUdfSVJfSU1HX1NBTllPKQkrPSBpbWctaXItc2FueW8ubworaW1nLWlyLSQoQ09ORklHX0lSX0lNR19SQzUpCSs9IGltZy1pci1yYzUubworaW1nLWlyLSQoQ09ORklHX0lSX0lNR19SQzYpCSs9IGltZy1pci1yYzYubwogaW1nLWlyLW9ianMJCQk6PSAkKGltZy1pci15KQogCiBvYmotJChDT05GSUdfSVJfSU1HKQkJKz0gaW1nLWlyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaW1nLWlyL2ltZy1pci1ody5jIGIvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLWh3LmMKaW5kZXggMmZkNDdjOS4uN2JiNzFiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLWh3LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLWh3LmMKQEAgLTQyLDYgKzQyLDEyIEBACiAjaWZkZWYgQ09ORklHX0lSX0lNR19TQU5ZTwogCSZpbWdfaXJfc2FueW8sCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfSVJfSU1HX1JDNQorCSZpbWdfaXJfcmM1LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0lSX0lNR19SQzYKKwkmaW1nX2lyX3JjNiwKKyNlbmRpZgogCU5VTEwKIH07CiAKQEAgLTUyLDYgKzU4LDExIEBACiAKICNkZWZpbmUgSU1HX0lSX1FVSVJLX0NPREVfQlJPS0VOCTB4MQkvKiBEZWNvZGUgaXMgYnJva2VuICovCiAjZGVmaW5lIElNR19JUl9RVUlSS19DT0RFX0xFTl9JTkNSCTB4MgkvKiBCaXQgbGVuZ3RoIG5lZWRzIGluY3JlbWVudCAqLworLyoKKyAqIFRoZSBkZWNvZGVyIGdlbmVyYXRlcyByYXBpZCBpbnRlcnJ1cHRzIHdpdGhvdXQgYWN0dWFsbHkgaGF2aW5nCisgKiByZWNlaXZlZCBhbnkgbmV3IGRhdGEgYWZ0ZXIgYW4gaW5jb21wbGV0ZSBJUiBjb2RlIGlzIGRlY29kZWQuCisgKi8KKyNkZWZpbmUgSU1HX0lSX1FVSVJLX0NPREVfSVJRCQkweDQKIAogLyogZnVuY3Rpb25zIGZvciBwcmVwcm9jZXNzaW5nIHRpbWluZ3MsIGVuc3VyaW5nIG1heCBpcyBzZXQgKi8KIApAQCAtNTQyLDYgKzU1Myw3IEBACiAJICovCiAJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAlkZWxfdGltZXJfc3luYygmaHctPmVuZF90aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJmh3LT5zdXNwZW5kX3RpbWVyKTsKIAlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKIAogCWh3LT5zdG9wcGluZyA9IGZhbHNlOwpAQCAtODA2LDIwICs4MTgsMjQgQEAKIAlzdHJ1Y3QgaW1nX2lyX3ByaXZfaHcgKmh3ID0gJnByaXYtPmh3OwogCWNvbnN0IHN0cnVjdCBpbWdfaXJfZGVjb2RlciAqZGVjID0gaHctPmRlY29kZXI7CiAJaW50IHJldCA9IElNR19JUl9TQ0FOQ09ERTsKLQl1MzIgc2NhbmNvZGU7Ci0JZW51bSByY190eXBlIHByb3RvY29sID0gUkNfVFlQRV9VTktOT1dOOworCXN0cnVjdCBpbWdfaXJfc2NhbmNvZGVfcmVxIHJlcXVlc3Q7CisKKwlyZXF1ZXN0LnByb3RvY29sID0gUkNfVFlQRV9VTktOT1dOOworCXJlcXVlc3QudG9nZ2xlICAgPSAwOwogCiAJaWYgKGRlYy0+c2NhbmNvZGUpCi0JCXJldCA9IGRlYy0+c2NhbmNvZGUobGVuLCByYXcsICZwcm90b2NvbCwgJnNjYW5jb2RlLCBody0+ZW5hYmxlZF9wcm90b2NvbHMpOworCQlyZXQgPSBkZWMtPnNjYW5jb2RlKGxlbiwgcmF3LCBody0+ZW5hYmxlZF9wcm90b2NvbHMsICZyZXF1ZXN0KTsKIAllbHNlIGlmIChsZW4gPj0gMzIpCi0JCXNjYW5jb2RlID0gKHUzMilyYXc7CisJCXJlcXVlc3Quc2NhbmNvZGUgPSAodTMyKXJhdzsKIAllbHNlIGlmIChsZW4gPCAzMikKLQkJc2NhbmNvZGUgPSAodTMyKXJhdyAmICgoMSA8PCBsZW4pLTEpOworCQlyZXF1ZXN0LnNjYW5jb2RlID0gKHUzMilyYXcgJiAoKDEgPDwgbGVuKS0xKTsKIAlkZXZfZGJnKHByaXYtPmRldiwgImRhdGEgKCV1IGJpdHMpID0gJSNsbHhcbiIsCiAJCWxlbiwgKHVuc2lnbmVkIGxvbmcgbG9uZylyYXcpOwogCWlmIChyZXQgPT0gSU1HX0lSX1NDQU5DT0RFKSB7Ci0JCWRldl9kYmcocHJpdi0+ZGV2LCAiZGVjb2RlZCBzY2FuIGNvZGUgJSN4XG4iLCBzY2FuY29kZSk7Ci0JCXJjX2tleWRvd24oaHctPnJkZXYsIHByb3RvY29sLCBzY2FuY29kZSwgMCk7CisJCWRldl9kYmcocHJpdi0+ZGV2LCAiZGVjb2RlZCBzY2FuIGNvZGUgJSN4LCB0b2dnbGUgJXVcbiIsCisJCQlyZXF1ZXN0LnNjYW5jb2RlLCByZXF1ZXN0LnRvZ2dsZSk7CisJCXJjX2tleWRvd24oaHctPnJkZXYsIHJlcXVlc3QucHJvdG9jb2wsIHJlcXVlc3Quc2NhbmNvZGUsCisJCQkgICByZXF1ZXN0LnRvZ2dsZSk7CiAJCWltZ19pcl9lbmRfcmVwZWF0KHByaXYpOwogCX0gZWxzZSBpZiAocmV0ID09IElNR19JUl9SRVBFQVRDT0RFKSB7CiAJCWlmIChody0+bW9kZSA9PSBJTUdfSVJfTV9SRVBFQVRJTkcpIHsKQEAgLTg1Nyw2ICs4NzMsMjkgQEAKIAlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOwogfQogCisvKgorICogVGltZXIgZnVuY3Rpb24gdG8gcmUtZW5hYmxlIHRoZSBjdXJyZW50IHByb3RvY29sIGFmdGVyIGl0IGhhZCBiZWVuCisgKiBjbGVhcmVkIHdoZW4gaW52YWxpZCBpbnRlcnJ1cHRzIHdlcmUgZ2VuZXJhdGVkIGR1ZSB0byBhIHF1aXJrIGluIHRoZQorICogaW1nLWlyIGRlY29kZXIuCisgKi8KK3N0YXRpYyB2b2lkIGltZ19pcl9zdXNwZW5kX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBpbWdfaXJfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaW1nX2lyX3ByaXYgKilhcmc7CisKKwlzcGluX2xvY2tfaXJxKCZwcml2LT5sb2NrKTsKKwkvKgorCSAqIERvbid0IG92ZXJ3cml0ZSBlbmFibGVkIHZhbGlkL21hdGNoIElSUXMgaWYgdGhleSBoYXZlIGFscmVhZHkgYmVlbgorCSAqIGNoYW5nZWQgYnkgZS5nLiBhIGZpbHRlciBjaGFuZ2UuCisJICovCisJaWYgKChwcml2LT5ody5xdWlya19zdXNwZW5kX2lycSAmIElNR19JUl9JUlFfRURHRSkgPT0KKwkJCQlpbWdfaXJfcmVhZChwcml2LCBJTUdfSVJfSVJRX0VOQUJMRSkpCisJCWltZ19pcl93cml0ZShwcml2LCBJTUdfSVJfSVJRX0VOQUJMRSwKKwkJCQkJcHJpdi0+aHcucXVpcmtfc3VzcGVuZF9pcnEpOworCS8qIGVuYWJsZSAqLworCWltZ19pcl93cml0ZShwcml2LCBJTUdfSVJfQ09OVFJPTCwgcHJpdi0+aHcucmVnX3RpbWluZ3MuY3RybCk7CisJc3Bpbl91bmxvY2tfaXJxKCZwcml2LT5sb2NrKTsKK30KKwogI2lmZGVmIENPTkZJR19DT01NT05fQ0xLCiBzdGF0aWMgdm9pZCBpbWdfaXJfY2hhbmdlX2ZyZXF1ZW5jeShzdHJ1Y3QgaW1nX2lyX3ByaXYgKnByaXYsCiAJCQkJICAgIHN0cnVjdCBjbGtfbm90aWZpZXJfZGF0YSAqY2hhbmdlKQpAQCAtOTIyLDE1ICs5NjEsMzggQEAKIAlpZiAoIWh3LT5kZWNvZGVyKQogCQlyZXR1cm47CiAKKwljdCA9IGh3LT5kZWNvZGVyLT5jb250cm9sLmNvZGVfdHlwZTsKKwogCWlyX3N0YXR1cyA9IGltZ19pcl9yZWFkKHByaXYsIElNR19JUl9TVEFUVVMpOwotCWlmICghKGlyX3N0YXR1cyAmIChJTUdfSVJfUlhEVkFMIHwgSU1HX0lSX1JYRFZBTEQyKSkpCisJaWYgKCEoaXJfc3RhdHVzICYgKElNR19JUl9SWERWQUwgfCBJTUdfSVJfUlhEVkFMRDIpKSkgeworCQlpZiAoIShwcml2LT5ody5jdF9xdWlya3NbY3RdICYgSU1HX0lSX1FVSVJLX0NPREVfSVJRKSB8fAorCQkJCWh3LT5zdG9wcGluZykKKwkJCXJldHVybjsKKwkJLyoKKwkJICogVGhlIGJlbG93IGZ1bmN0aW9uYWxpdHkgaXMgYWRkZWQgYXMgYSB3b3JrIGFyb3VuZCB0byBzdG9wCisJCSAqIG11bHRpcGxlIEludGVycnVwdHMgZ2VuZXJhdGVkIHdoZW4gYW4gaW5jb21wbGV0ZSBJUiBjb2RlIGlzCisJCSAqIHJlY2VpdmVkIGJ5IHRoZSBkZWNvZGVyLgorCQkgKiBUaGUgZGVjb2RlciBnZW5lcmF0ZXMgcmFwaWQgaW50ZXJydXB0cyB3aXRob3V0IGFjdHVhbGx5CisJCSAqIGhhdmluZyByZWNlaXZlZCBhbnkgbmV3IGRhdGEuIEFmdGVyIGEgc2luZ2xlIGludGVycnVwdCBpdCdzCisJCSAqIGV4cGVjdGVkIHRvIGNsZWFyIHVwLCBidXQgaW5zdGVhZCBtdWx0aXBsZSBpbnRlcnJ1cHRzIGFyZQorCQkgKiByYXBpZGx5IGdlbmVyYXRlZC4gb25seSB3YXkgdG8gZ2V0IG91dCBvZiB0aGlzIGxvb3AgaXMgdG8KKwkJICogcmVzZXQgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgYWZ0ZXIgYSBzaG9ydCBkZWxheS4KKwkJICovCisJCWltZ19pcl93cml0ZShwcml2LCBJTUdfSVJfQ09OVFJPTCwgMCk7CisJCWh3LT5xdWlya19zdXNwZW5kX2lycSA9IGltZ19pcl9yZWFkKHByaXYsIElNR19JUl9JUlFfRU5BQkxFKTsKKwkJaW1nX2lyX3dyaXRlKHByaXYsIElNR19JUl9JUlFfRU5BQkxFLAorCQkJICAgICBody0+cXVpcmtfc3VzcGVuZF9pcnEgJiBJTUdfSVJfSVJRX0VER0UpOworCisJCS8qIFRpbWVyIGFjdGl2YXRlZCB0byByZS1lbmFibGUgdGhlIHByb3RvY29sLiAqLworCQltb2RfdGltZXIoJmh3LT5zdXNwZW5kX3RpbWVyLAorCQkJICBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1KSk7CiAJCXJldHVybjsKKwl9CiAJaXJfc3RhdHVzICY9IH4oSU1HX0lSX1JYRFZBTCB8IElNR19JUl9SWERWQUxEMik7CiAJaW1nX2lyX3dyaXRlKHByaXYsIElNR19JUl9TVEFUVVMsIGlyX3N0YXR1cyk7CiAKIAlsZW4gPSAoaXJfc3RhdHVzICYgSU1HX0lSX1JYRExFTikgPj4gSU1HX0lSX1JYRExFTl9TSElGVDsKIAkvKiBzb21lIHZlcnNpb25zIHJlcG9ydCB3cm9uZyBsZW5ndGggZm9yIGNlcnRhaW4gY29kZSB0eXBlcyAqLwotCWN0ID0gaHctPmRlY29kZXItPmNvbnRyb2wuY29kZV90eXBlOwogCWlmIChody0+Y3RfcXVpcmtzW2N0XSAmIElNR19JUl9RVUlSS19DT0RFX0xFTl9JTkNSKQogCQkrK2xlbjsKIApAQCAtOTcyLDcgKzEwMzQsNyBAQAogCWh3LT5jdF9xdWlya3NbSU1HX0lSX0NPREVUWVBFX1BVTFNFTEVOXQogCQl8PSBJTUdfSVJfUVVJUktfQ09ERV9MRU5fSU5DUjsKIAlody0+Y3RfcXVpcmtzW0lNR19JUl9DT0RFVFlQRV9CSVBIQVNFXQotCQl8PSBJTUdfSVJfUVVJUktfQ09ERV9CUk9LRU47CisJCXw9IElNR19JUl9RVUlSS19DT0RFX0lSUTsKIAlody0+Y3RfcXVpcmtzW0lNR19JUl9DT0RFVFlQRV8yQklUUFVMU0VQT1NdCiAJCXw9IElNR19JUl9RVUlSS19DT0RFX0JST0tFTjsKIH0KQEAgLTk5MSw2ICsxMDUzLDggQEAKIAogCS8qIFNldCB1cCB0aGUgZW5kIHRpbWVyICovCiAJc2V0dXBfdGltZXIoJmh3LT5lbmRfdGltZXIsIGltZ19pcl9lbmRfdGltZXIsICh1bnNpZ25lZCBsb25nKXByaXYpOworCXNldHVwX3RpbWVyKCZody0+c3VzcGVuZF90aW1lciwgaW1nX2lyX3N1c3BlbmRfdGltZXIsCisJCQkJKHVuc2lnbmVkIGxvbmcpcHJpdik7CiAKIAkvKiBSZWdpc3RlciBhIGNsb2NrIG5vdGlmaWVyICovCiAJaWYgKCFJU19FUlIocHJpdi0+Y2xrKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLWh3LmggYi9kcml2ZXJzL21lZGlhL3JjL2ltZy1pci9pbWctaXItaHcuaAppbmRleCA1YzJiMjE2Li45MWEyOTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL2ltZy1pci9pbWctaXItaHcuaAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2ltZy1pci9pbWctaXItaHcuaApAQCAtMTMzLDYgKzEzMywyMCBAQAogI2RlZmluZSBJTUdfSVJfUkVQRUFUQ09ERQkxCS8qIHJlcGVhdCB0aGUgcHJldmlvdXMgY29kZSAqLwogCiAvKioKKyAqIHN0cnVjdCBpbWdfaXJfc2NhbmNvZGVfcmVxIC0gU2NhbmNvZGUgcmVxdWVzdCBkYXRhLgorICogQHByb3RvY29sOglQcm90b2NvbCBjb2RlIG9mIHJlY2VpdmVkIG1lc3NhZ2UgKGRlZmF1bHRzIHRvCisgKgkJUkNfVFlQRV9VTktOT1dOKS4KKyAqIEBzY2FuY29kZToJU2NhbiBjb2RlIG9mIHJlY2VpdmVkIG1lc3NhZ2UgKG11c3QgYmUgd3JpdHRlbiBieQorICoJCWhhbmRsZXIgaWYgSU1HX0lSX1NDQU5DT0RFIGlzIHJldHVybmVkKS4KKyAqIEB0b2dnbGU6CVRvZ2dsZSBiaXQgKGRlZmF1bHRzIHRvIDApLgorICovCitzdHJ1Y3QgaW1nX2lyX3NjYW5jb2RlX3JlcSB7CisJZW51bSByY190eXBlIHByb3RvY29sOworCXUzMiBzY2FuY29kZTsKKwl1OCB0b2dnbGU7Cit9OworCisvKioKICAqIHN0cnVjdCBpbWdfaXJfZGVjb2RlciAtIERlY29kZXIgc2V0dGluZ3MgZm9yIGFuIElSIHByb3RvY29sLgogICogQHR5cGU6CVByb3RvY29sIHR5cGVzIGJpdG1hcC4KICAqIEB0b2xlcmFuY2U6CVRpbWluZyB0b2xlcmFuY2UgYXMgYSBwZXJjZW50YWdlIChkZWZhdWx0IDEwJSkuCkBAIC0xNjIsOCArMTc2LDggQEAKIAlzdHJ1Y3QgaW1nX2lyX2NvbnRyb2wJCWNvbnRyb2w7CiAKIAkvKiBzY2FuY29kZSBsb2dpYyAqLwotCWludCAoKnNjYW5jb2RlKShpbnQgbGVuLCB1NjQgcmF3LCBlbnVtIHJjX3R5cGUgKnByb3RvY29sLAotCQkJdTMyICpzY2FuY29kZSwgdTY0IGVuYWJsZWRfcHJvdG9jb2xzKTsKKwlpbnQgKCpzY2FuY29kZSkoaW50IGxlbiwgdTY0IHJhdywgdTY0IGVuYWJsZWRfcHJvdG9jb2xzLAorCQkJc3RydWN0IGltZ19pcl9zY2FuY29kZV9yZXEgKnJlcXVlc3QpOwogCWludCAoKmZpbHRlcikoY29uc3Qgc3RydWN0IHJjX3NjYW5jb2RlX2ZpbHRlciAqaW4sCiAJCSAgICAgIHN0cnVjdCBpbWdfaXJfZmlsdGVyICpvdXQsIHU2NCBwcm90b2NvbHMpOwogfTsKQEAgLTE3Myw2ICsxODcsOCBAQAogZXh0ZXJuIHN0cnVjdCBpbWdfaXJfZGVjb2RlciBpbWdfaXJfc29ueTsKIGV4dGVybiBzdHJ1Y3QgaW1nX2lyX2RlY29kZXIgaW1nX2lyX3NoYXJwOwogZXh0ZXJuIHN0cnVjdCBpbWdfaXJfZGVjb2RlciBpbWdfaXJfc2FueW87CitleHRlcm4gc3RydWN0IGltZ19pcl9kZWNvZGVyIGltZ19pcl9yYzU7CitleHRlcm4gc3RydWN0IGltZ19pcl9kZWNvZGVyIGltZ19pcl9yYzY7CiAKIC8qKgogICogc3RydWN0IGltZ19pcl9yZWdfdGltaW5ncyAtIFJlZyB2YWx1ZXMgZm9yIGRlY29kZXIgdGltaW5ncyBhdCBjbG9jayByYXRlLgpAQCAtMjA0LDYgKzIyMCw3IEBACiAgKiBAcmRldjoJCVJlbW90ZSBjb250cm9sIGRldmljZQogICogQGNsa19uYjoJCU5vdGlmaWVyIGJsb2NrIGZvciBjbG9jayBub3RpZnkgZXZlbnRzLgogICogQGVuZF90aW1lcjoJCVRpbWVyIHVudGlsIHJlcGVhdCB0aW1lb3V0LgorICogQHN1c3BlbmRfdGltZXI6CVRpbWVyIHRvIHJlLWVuYWJsZSBwcm90b2NvbC4KICAqIEBkZWNvZGVyOgkJQ3VycmVudCBkZWNvZGVyIHNldHRpbmdzLgogICogQGVuYWJsZWRfcHJvdG9jb2xzOglDdXJyZW50bHkgZW5hYmxlZCBwcm90b2NvbHMuCiAgKiBAY2xrX2h6OgkJQ3VycmVudCBjb3JlIGNsb2NrIHJhdGUgaW4gSHouCkBAIC0yMTQsMTIgKzIzMSwxNCBAQAogICogQHN0b3BwaW5nOgkJSW5kaWNhdGVzIHRoYXQgZGVjb2RlciBpcyBiZWluZyB0YWtlbiBkb3duIGFuZCB0aW1lcnMKICAqCQkJc2hvdWxkIG5vdCBiZSByZXN0YXJ0ZWQuCiAgKiBAc3VzcGVuZF9pcnFlbjoJU2F2ZWQgSVJRIGVuYWJsZSBtYXNrIG92ZXIgc3VzcGVuZC4KKyAqIEBxdWlya19zdXNwZW5kX2lycToJU2F2ZWQgSVJRIGVuYWJsZSBtYXNrIG92ZXIgcXVpcmsgc3VzcGVuZCB0aW1lci4KICAqLwogc3RydWN0IGltZ19pcl9wcml2X2h3IHsKIAl1bnNpZ25lZCBpbnQJCQljdF9xdWlya3NbNF07CiAJc3RydWN0IHJjX2RldgkJCSpyZGV2OwogCXN0cnVjdCBub3RpZmllcl9ibG9jawkJY2xrX25iOwogCXN0cnVjdCB0aW1lcl9saXN0CQllbmRfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QJCXN1c3BlbmRfdGltZXI7CiAJY29uc3Qgc3RydWN0IGltZ19pcl9kZWNvZGVyCSpkZWNvZGVyOwogCXU2NAkJCQllbmFibGVkX3Byb3RvY29sczsKIAl1bnNpZ25lZCBsb25nCQkJY2xrX2h6OwpAQCAtMjMwLDYgKzI0OSw3IEBACiAJZW51bSBpbWdfaXJfbW9kZQkJbW9kZTsKIAlib29sCQkJCXN0b3BwaW5nOwogCXUzMgkJCQlzdXNwZW5kX2lycWVuOworCXUzMgkJCQlxdWlya19zdXNwZW5kX2lycTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpbWdfaXJfaHdfZW5hYmxlZChzdHJ1Y3QgaW1nX2lyX3ByaXZfaHcgKmh3KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLWp2Yy5jIGIvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLWp2Yy5jCmluZGV4IGE2MGRkYTguLmQzZTJmYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvaW1nLWlyL2ltZy1pci1qdmMuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2ltZy1pci9pbWctaXItanZjLmMKQEAgLTEyLDggKzEyLDggQEAKICNpbmNsdWRlICJpbWctaXItaHcuaCIKIAogLyogQ29udmVydCBKVkMgZGF0YSB0byBhIHNjYW5jb2RlICovCi1zdGF0aWMgaW50IGltZ19pcl9qdmNfc2NhbmNvZGUoaW50IGxlbiwgdTY0IHJhdywgZW51bSByY190eXBlICpwcm90b2NvbCwKLQkJCSAgICAgICB1MzIgKnNjYW5jb2RlLCB1NjQgZW5hYmxlZF9wcm90b2NvbHMpCitzdGF0aWMgaW50IGltZ19pcl9qdmNfc2NhbmNvZGUoaW50IGxlbiwgdTY0IHJhdywgdTY0IGVuYWJsZWRfcHJvdG9jb2xzLAorCQkJICAgICAgIHN0cnVjdCBpbWdfaXJfc2NhbmNvZGVfcmVxICpyZXF1ZXN0KQogewogCXVuc2lnbmVkIGludCBjdXN0LCBkYXRhOwogCkBAIC0yMyw4ICsyMyw4IEBACiAJY3VzdCA9IChyYXcgPj4gMCkgJiAweGZmOwogCWRhdGEgPSAocmF3ID4+IDgpICYgMHhmZjsKIAotCSpwcm90b2NvbCA9IFJDX1RZUEVfSlZDOwotCSpzY2FuY29kZSA9IGN1c3QgPDwgOCB8IGRhdGE7CisJcmVxdWVzdC0+cHJvdG9jb2wgPSBSQ19UWVBFX0pWQzsKKwlyZXF1ZXN0LT5zY2FuY29kZSA9IGN1c3QgPDwgOCB8IGRhdGE7CiAJcmV0dXJuIElNR19JUl9TQ0FOQ09ERTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLW5lYy5jIGIvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLW5lYy5jCmluZGV4IDczOTg5NzUuLjI3YTdlYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvaW1nLWlyL2ltZy1pci1uZWMuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2ltZy1pci9pbWctaXItbmVjLmMKQEAgLTEzLDggKzEzLDggQEAKICNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KIAogLyogQ29udmVydCBORUMgZGF0YSB0byBhIHNjYW5jb2RlICovCi1zdGF0aWMgaW50IGltZ19pcl9uZWNfc2NhbmNvZGUoaW50IGxlbiwgdTY0IHJhdywgZW51bSByY190eXBlICpwcm90b2NvbCwKLQkJCSAgICAgICB1MzIgKnNjYW5jb2RlLCB1NjQgZW5hYmxlZF9wcm90b2NvbHMpCitzdGF0aWMgaW50IGltZ19pcl9uZWNfc2NhbmNvZGUoaW50IGxlbiwgdTY0IHJhdywgdTY0IGVuYWJsZWRfcHJvdG9jb2xzLAorCQkJICAgICAgIHN0cnVjdCBpbWdfaXJfc2NhbmNvZGVfcmVxICpyZXF1ZXN0KQogewogCXVuc2lnbmVkIGludCBhZGRyLCBhZGRyX2ludiwgZGF0YSwgZGF0YV9pbnY7CiAJLyogYSByZXBlYXQgY29kZSBoYXMgbm8gZGF0YSAqLwpAQCAtMzAsMjMgKzMwLDIzIEBACiAJaWYgKChkYXRhX2ludiBeIGRhdGEpICE9IDB4ZmYpIHsKIAkJLyogMzItYml0IE5FQyAodXNlZCBieSBBcHBsZSBhbmQgVGlWbyByZW1vdGVzKSAqLwogCQkvKiBzY2FuIGVuY29kaW5nOiBhcyB0cmFuc21pdHRlZCwgTVNCaXQgPSBmaXJzdCByZWNlaXZlZCBiaXQgKi8KLQkJKnNjYW5jb2RlID0gYml0cmV2OChhZGRyKSAgICAgPDwgMjQgfAotCQkJICAgIGJpdHJldjgoYWRkcl9pbnYpIDw8IDE2IHwKLQkJCSAgICBiaXRyZXY4KGRhdGEpICAgICA8PCAgOCB8Ci0JCQkgICAgYml0cmV2OChkYXRhX2ludik7CisJCXJlcXVlc3QtPnNjYW5jb2RlID0gYml0cmV2OChhZGRyKSAgICAgPDwgMjQgfAorCQkJCWJpdHJldjgoYWRkcl9pbnYpIDw8IDE2IHwKKwkJCQliaXRyZXY4KGRhdGEpICAgICA8PCAgOCB8CisJCQkJYml0cmV2OChkYXRhX2ludik7CiAJfSBlbHNlIGlmICgoYWRkcl9pbnYgXiBhZGRyKSAhPSAweGZmKSB7CiAJCS8qIEV4dGVuZGVkIE5FQyAqLwogCQkvKiBzY2FuIGVuY29kaW5nOiBBQWFhREQgKi8KLQkJKnNjYW5jb2RlID0gYWRkciAgICAgPDwgMTYgfAotCQkJICAgIGFkZHJfaW52IDw8ICA4IHwKLQkJCSAgICBkYXRhOworCQlyZXF1ZXN0LT5zY2FuY29kZSA9IGFkZHIgICAgIDw8IDE2IHwKKwkJCQlhZGRyX2ludiA8PCAgOCB8CisJCQkJZGF0YTsKIAl9IGVsc2UgewogCQkvKiBOb3JtYWwgTkVDICovCiAJCS8qIHNjYW4gZW5jb2Rpbmc6IEFBREQgKi8KLQkJKnNjYW5jb2RlID0gYWRkciA8PCA4IHwKLQkJCSAgICBkYXRhOworCQlyZXF1ZXN0LT5zY2FuY29kZSA9IGFkZHIgPDwgOCB8CisJCQkJZGF0YTsKIAl9Ci0JKnByb3RvY29sID0gUkNfVFlQRV9ORUM7CisJcmVxdWVzdC0+cHJvdG9jb2wgPSBSQ19UWVBFX05FQzsKIAlyZXR1cm4gSU1HX0lSX1NDQU5DT0RFOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2ltZy1pci9pbWctaXItcmM1LmMgYi9kcml2ZXJzL21lZGlhL3JjL2ltZy1pci9pbWctaXItcmM1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhMjhhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvaW1nLWlyL2ltZy1pci1yYzUuYwpAQCAtMCwwICsxLDg4IEBACisvKgorICogSW1nVGVjIElSIERlY29kZXIgc2V0dXAgZm9yIFBoaWxpcHMgUkMtNSBwcm90b2NvbC4KKyAqCisgKiBDb3B5cmlnaHQgMjAxMi0yMDE0IEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSAiaW1nLWlyLWh3LmgiCisKKy8qIENvbnZlcnQgUkM1IGRhdGEgdG8gYSBzY2FuY29kZSAqLworc3RhdGljIGludCBpbWdfaXJfcmM1X3NjYW5jb2RlKGludCBsZW4sIHU2NCByYXcsIHU2NCBlbmFibGVkX3Byb3RvY29scywKKwkJCQlzdHJ1Y3QgaW1nX2lyX3NjYW5jb2RlX3JlcSAqcmVxdWVzdCkKK3sKKwl1bnNpZ25lZCBpbnQgYWRkciwgY21kLCB0Z2wsIHN0YXJ0OworCisJLyogUXVpcmsgaW4gdGhlIGRlY29kZXIgc2hpZnRzIGV2ZXJ5dGhpbmcgYnkgMiB0byB0aGUgbGVmdC4gKi8KKwlyYXcgICA+Pj0gMjsKKworCXN0YXJ0CT0gIChyYXcgPj4gMTMpCSYgMHgwMTsKKwl0Z2wJPSAgKHJhdyA+PiAxMSkJJiAweDAxOworCWFkZHIJPSAgKHJhdyA+PiAgNikJJiAweDFmOworCWNtZAk9ICAgcmF3CQkmIDB4M2Y7CisJLyoKKwkgKiAxMnRoIGJpdCBpcyB1c2VkIHRvIGV4dGVuZCB0aGUgY29tbWFuZCBpbiBleHRlbmRlZCBSQzUgYW5kIGhhcworCSAqIG5vIGVmZmVjdCBvbiBzdGFuZGFyZCBSQzUuCisJICovCisJY21kCSs9ICgocmF3ID4+IDEyKSAmIDB4MDEpID8gMCA6IDB4NDA7CisKKwlpZiAoIXN0YXJ0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcXVlc3QtPnByb3RvY29sID0gUkNfVFlQRV9SQzU7CisJcmVxdWVzdC0+c2NhbmNvZGUgPSBhZGRyIDw8IDggfCBjbWQ7CisJcmVxdWVzdC0+dG9nZ2xlICAgPSB0Z2w7CisJcmV0dXJuIElNR19JUl9TQ0FOQ09ERTsKK30KKworLyogQ29udmVydCBSQzUgc2NhbmNvZGUgdG8gUkM1IGRhdGEgZmlsdGVyICovCitzdGF0aWMgaW50IGltZ19pcl9yYzVfZmlsdGVyKGNvbnN0IHN0cnVjdCByY19zY2FuY29kZV9maWx0ZXIgKmluLAorCQkJCSBzdHJ1Y3QgaW1nX2lyX2ZpbHRlciAqb3V0LCB1NjQgcHJvdG9jb2xzKQoreworCS8qIE5vdCBzdXBwb3J0ZWQgYnkgdGhlIGh3LiAqLworCXJldHVybiAtRUlOVkFMOworfQorCisvKgorICogUkMtNSBkZWNvZGVyCisgKiBzZWUgaHR0cDovL3d3dy5zYnByb2plY3RzLmNvbS9rbm93bGVkZ2UvaXIvcmM1LnBocAorICovCitzdHJ1Y3QgaW1nX2lyX2RlY29kZXIgaW1nX2lyX3JjNSA9IHsKKwkudHlwZSAgICAgID0gUkNfQklUX1JDNSwKKwkuY29udHJvbCAgID0geworCQkuYml0b3JpZW5kMgk9IDEsCisJCS5jb2RlX3R5cGUJPSBJTUdfSVJfQ09ERVRZUEVfQklQSEFTRSwKKwkJLmRlY29kZW5kMgk9IDEsCisJfSwKKwkvKiBtYWluIHRpbWluZ3MgKi8KKwkudG9sZXJhbmNlCT0gMTYsCisJLnVuaXQJCT0gODg4ODg4LCAvKiAxLzM2ayozMj04ODguODg4bWljcm9zZWNvbmRzICovCisJLnRpbWluZ3MJPSB7CisJCS8qIDEwIHN5bWJvbCAqLworCQkuczEwID0geworCQkJLnB1bHNlCT0geyAxIH0sCisJCQkuc3BhY2UJPSB7IDEgfSwKKwkJfSwKKworCQkvKiAxMSBzeW1ib2wgKi8KKwkJLnMxMSA9IHsKKwkJCS5wdWxzZQk9IHsgMSB9LAorCQkJLnNwYWNlCT0geyAxIH0sCisJCX0sCisKKwkJLyogZnJlZSB0aW1lICovCisJCS5mdCAgPSB7CisJCQkubWlubGVuID0gMTQsCisJCQkubWF4bGVuID0gMTQsCisJCQkuZnRfbWluID0gNSwKKwkJfSwKKwl9LAorCisJLyogc2NhbmNvZGUgbG9naWMgKi8KKwkuc2NhbmNvZGUJPSBpbWdfaXJfcmM1X3NjYW5jb2RlLAorCS5maWx0ZXIJCT0gaW1nX2lyX3JjNV9maWx0ZXIsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLXJjNi5jIGIvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLXJjNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMWUyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3JjL2ltZy1pci9pbWctaXItcmM2LmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBJbWdUZWMgSVIgRGVjb2RlciBzZXR1cCBmb3IgUGhpbGlwcyBSQy02IHByb3RvY29sLgorICoKKyAqIENvcHlyaWdodCAyMDEyLTIwMTQgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlICJpbWctaXItaHcuaCIKKworLyogQ29udmVydCBSQzYgZGF0YSB0byBhIHNjYW5jb2RlICovCitzdGF0aWMgaW50IGltZ19pcl9yYzZfc2NhbmNvZGUoaW50IGxlbiwgdTY0IHJhdywgdTY0IGVuYWJsZWRfcHJvdG9jb2xzLAorCQkJCXN0cnVjdCBpbWdfaXJfc2NhbmNvZGVfcmVxICpyZXF1ZXN0KQoreworCXVuc2lnbmVkIGludCBhZGRyLCBjbWQsIG1vZGUsIHRybDEsIHRybDI7CisKKwkvKgorCSAqIER1ZSB0byBhIHNpZGUgZWZmZWN0IG9mIHRoZSBkZWNvZGVyIGhhbmRsaW5nIHRoZSBkb3VibGUgbGVuZ3RoCisJICogVHJhaWxlciBiaXQsIHRoZSBoZWFkZXIgaW5mb3JtYXRpb24gaXMgYSBiaXQgc2NyYW1ibGVkLCBhbmQgdGhlCisJICogcmF3IGRhdGEgaXMgc2hpZnRlZCBpbmNvcnJlY3RseS4KKwkgKiBUaGlzIHdvcmthcm91bmQgZWZmZWN0aXZlbHkgcmVjb3ZlcnMgdGhlIGhlYWRlciBiaXRzLgorCSAqCisJICogVGhlIEhlYWRlciBmaWVsZCBzaG91bGQgbG9vayBsaWtlIHRoaXM6CisJICoKKwkgKiBTdGFydEJpdCBNb2RlQml0MiBNb2RlQml0MSBNb2RlQml0MCBUcmFpbGVyQml0CisJICoKKwkgKiBCdXQgd2hhdCB3ZSBnZXQgaXM6CisJICoKKwkgKiBNb2RlQml0MiBNb2RlQml0MSBNb2RlQml0MCBUcmFpbGVyQml0MSBUcmFpbGVyQml0MgorCSAqCisJICogVGhlIHN0YXJ0IGJpdCBpcyBub3QgaW1wb3J0YW50IHRvIHJlY292ZXIgdGhlIHNjYW5jb2RlLgorCSAqLworCisJcmF3CT4+PSAyNzsKKworCXRybDEJPSAocmF3ID4+ICAxNykJJiAweDAxOworCXRybDIJPSAocmF3ID4+ICAxNikJJiAweDAxOworCisJbW9kZQk9IChyYXcgPj4gIDE4KQkmIDB4MDc7CisJYWRkcgk9IChyYXcgPj4gICA4KQkmIDB4ZmY7CisJY21kCT0gIHJhdwkJJiAweGZmOworCisJLyoKKwkgKiBEdWUgdG8gdGhlIGFib3ZlIGV4cGxhaW5lZCBpcnJlZ3VsYXJpdHkgdGhlIHRyYWlsZXIgYml0cyBjYW5ub3QKKwkgKiBoYXZlIHRoZSBzYW1lIHZhbHVlLgorCSAqLworCWlmICh0cmwxID09IHRybDIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogT25seSBtb2RlIDAgc3VwcG9ydGVkIGZvciBub3cgKi8KKwlpZiAobW9kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXF1ZXN0LT5wcm90b2NvbCA9IFJDX1RZUEVfUkM2XzA7CisJcmVxdWVzdC0+c2NhbmNvZGUgPSBhZGRyIDw8IDggfCBjbWQ7CisJcmVxdWVzdC0+dG9nZ2xlCSAgPSB0cmwyOworCXJldHVybiBJTUdfSVJfU0NBTkNPREU7Cit9CisKKy8qIENvbnZlcnQgUkM2IHNjYW5jb2RlIHRvIFJDNiBkYXRhIGZpbHRlciAqLworc3RhdGljIGludCBpbWdfaXJfcmM2X2ZpbHRlcihjb25zdCBzdHJ1Y3QgcmNfc2NhbmNvZGVfZmlsdGVyICppbiwKKwkJCQkgc3RydWN0IGltZ19pcl9maWx0ZXIgKm91dCwgdTY0IHByb3RvY29scykKK3sKKwkvKiBOb3Qgc3VwcG9ydGVkIGJ5IHRoZSBody4gKi8KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoKKyAqIFJDLTYgZGVjb2RlcgorICogc2VlIGh0dHA6Ly93d3cuc2Jwcm9qZWN0cy5jb20va25vd2xlZGdlL2lyL3JjNi5waHAKKyAqLworc3RydWN0IGltZ19pcl9kZWNvZGVyIGltZ19pcl9yYzYgPSB7CisJLnR5cGUJCT0gUkNfQklUX1JDNl8wLAorCS5jb250cm9sCT0geworCQkuYml0b3JpZW4JPSAxLAorCQkuY29kZV90eXBlCT0gSU1HX0lSX0NPREVUWVBFX0JJUEhBU0UsCisJCS5kZWNvZGVuCT0gMSwKKwkJLmRlY29kaW5wb2wJPSAxLAorCX0sCisJLyogbWFpbiB0aW1pbmdzICovCisJLnRvbGVyYW5jZQk9IDIwLAorCS8qCisJICogRHVlIHRvIGEgcXVpcmsgaW4gdGhlIGltZy1pciBkZWNvZGVyLCBkZWZhdWx0IGhlYWRlciB2YWx1ZXMgZG8KKwkgKiBub3Qgd29yaywgdGhlIHZhbHVlcyBkZXNjcmliZWQgYmVsb3cgd2VyZSBleHRyYWN0ZWQgZnJvbQorCSAqIHN1Y2Nlc3NmdWwgUlRMIHRlc3QgY2FzZXMuCisJICovCisJLnRpbWluZ3MJPSB7CisJCS8qIGxlYWRlciBzeW1ib2wgKi8KKwkJLmxkciA9IHsKKwkJCS5wdWxzZQk9IHsgNjUwIH0sCisJCQkuc3BhY2UJPSB7IDY2MCB9LAorCQl9LAorCQkvKiAwIHN5bWJvbCAqLworCQkuczAwID0geworCQkJLnB1bHNlCT0geyAzNzAgfSwKKwkJCS5zcGFjZQk9IHsgMzcwIH0sCisJCX0sCisJCS8qIDAxIHN5bWJvbCAqLworCQkuczAxID0geworCQkJLnB1bHNlCT0geyAzNzAgfSwKKwkJCS5zcGFjZQk9IHsgMzcwIH0sCisJCX0sCisJCS8qIGZyZWUgdGltZSAqLworCQkuZnQgID0geworCQkJLm1pbmxlbiA9IDIxLAorCQkJLm1heGxlbiA9IDIxLAorCQkJLmZ0X21pbiA9IDI2NjYsCS8qIDIuNjY2IG1zICovCisJCX0sCisJfSwKKworCS8qIHNjYW5jb2RlIGxvZ2ljICovCisJLnNjYW5jb2RlCT0gaW1nX2lyX3JjNl9zY2FuY29kZSwKKwkuZmlsdGVyCQk9IGltZ19pcl9yYzZfZmlsdGVyLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaW1nLWlyL2ltZy1pci1zYW55by5jIGIvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLXNhbnlvLmMKaW5kZXggNmIwNjUzZS4uZjM5NDk5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLXNhbnlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLXNhbnlvLmMKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlICJpbWctaXItaHcuaCIKIAogLyogQ29udmVydCBTYW55byBkYXRhIHRvIGEgc2NhbmNvZGUgKi8KLXN0YXRpYyBpbnQgaW1nX2lyX3NhbnlvX3NjYW5jb2RlKGludCBsZW4sIHU2NCByYXcsIGVudW0gcmNfdHlwZSAqcHJvdG9jb2wsCi0JCQkJIHUzMiAqc2NhbmNvZGUsIHU2NCBlbmFibGVkX3Byb3RvY29scykKK3N0YXRpYyBpbnQgaW1nX2lyX3NhbnlvX3NjYW5jb2RlKGludCBsZW4sIHU2NCByYXcsIHU2NCBlbmFibGVkX3Byb3RvY29scywKKwkJCQkgc3RydWN0IGltZ19pcl9zY2FuY29kZV9yZXEgKnJlcXVlc3QpCiB7CiAJdW5zaWduZWQgaW50IGFkZHIsIGFkZHJfaW52LCBkYXRhLCBkYXRhX2ludjsKIAkvKiBhIHJlcGVhdCBjb2RlIGhhcyBubyBkYXRhICovCkBAIC00NCw4ICs0NCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogTm9ybWFsIFNhbnlvICovCi0JKnByb3RvY29sID0gUkNfVFlQRV9TQU5ZTzsKLQkqc2NhbmNvZGUgPSBhZGRyIDw8IDggfCBkYXRhOworCXJlcXVlc3QtPnByb3RvY29sID0gUkNfVFlQRV9TQU5ZTzsKKwlyZXF1ZXN0LT5zY2FuY29kZSA9IGFkZHIgPDwgOCB8IGRhdGE7CiAJcmV0dXJuIElNR19JUl9TQ0FOQ09ERTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLXNoYXJwLmMgYi9kcml2ZXJzL21lZGlhL3JjL2ltZy1pci9pbWctaXItc2hhcnAuYwppbmRleCAzMzAwYTM4Li5mZTVhY2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL2ltZy1pci9pbWctaXItc2hhcnAuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2ltZy1pci9pbWctaXItc2hhcnAuYwpAQCAtMTIsOCArMTIsOCBAQAogI2luY2x1ZGUgImltZy1pci1ody5oIgogCiAvKiBDb252ZXJ0IFNoYXJwIGRhdGEgdG8gYSBzY2FuY29kZSAqLwotc3RhdGljIGludCBpbWdfaXJfc2hhcnBfc2NhbmNvZGUoaW50IGxlbiwgdTY0IHJhdywgZW51bSByY190eXBlICpwcm90b2NvbCwKLQkJCQkgdTMyICpzY2FuY29kZSwgdTY0IGVuYWJsZWRfcHJvdG9jb2xzKQorc3RhdGljIGludCBpbWdfaXJfc2hhcnBfc2NhbmNvZGUoaW50IGxlbiwgdTY0IHJhdywgdTY0IGVuYWJsZWRfcHJvdG9jb2xzLAorCQkJCSBzdHJ1Y3QgaW1nX2lyX3NjYW5jb2RlX3JlcSAqcmVxdWVzdCkKIHsKIAl1bnNpZ25lZCBpbnQgYWRkciwgY21kLCBleHAsIGNoazsKIApAQCAtMzIsOCArMzIsOCBAQAogCQkvKiBwcm9iYWJseSB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIG1lc3NhZ2UgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkqcHJvdG9jb2wgPSBSQ19UWVBFX1NIQVJQOwotCSpzY2FuY29kZSA9IGFkZHIgPDwgOCB8IGNtZDsKKwlyZXF1ZXN0LT5wcm90b2NvbCA9IFJDX1RZUEVfU0hBUlA7CisJcmVxdWVzdC0+c2NhbmNvZGUgPSBhZGRyIDw8IDggfCBjbWQ7CiAJcmV0dXJuIElNR19JUl9TQ0FOQ09ERTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLXNvbnkuYyBiL2RyaXZlcnMvbWVkaWEvcmMvaW1nLWlyL2ltZy1pci1zb255LmMKaW5kZXggM2EwZjE3Yi4uN2Y3Mzc1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pbWctaXIvaW1nLWlyLXNvbnkuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2ltZy1pci9pbWctaXItc29ueS5jCkBAIC0xMiw4ICsxMiw4IEBACiAjaW5jbHVkZSAiaW1nLWlyLWh3LmgiCiAKIC8qIENvbnZlcnQgU29ueSBkYXRhIHRvIGEgc2NhbmNvZGUgKi8KLXN0YXRpYyBpbnQgaW1nX2lyX3Nvbnlfc2NhbmNvZGUoaW50IGxlbiwgdTY0IHJhdywgZW51bSByY190eXBlICpwcm90b2NvbCwKLQkJCQl1MzIgKnNjYW5jb2RlLCB1NjQgZW5hYmxlZF9wcm90b2NvbHMpCitzdGF0aWMgaW50IGltZ19pcl9zb255X3NjYW5jb2RlKGludCBsZW4sIHU2NCByYXcsIHU2NCBlbmFibGVkX3Byb3RvY29scywKKwkJCQlzdHJ1Y3QgaW1nX2lyX3NjYW5jb2RlX3JlcSAqcmVxdWVzdCkKIHsKIAl1bnNpZ25lZCBpbnQgZGV2LCBzdWJkZXYsIGZ1bmM7CiAKQEAgLTI1LDcgKzI1LDcgQEAKIAkJcmF3ICAgID4+PSA3OwogCQlkZXYgICAgPSByYXcgJiAweDFmOwkvKiBuZXh0IDUgYml0cyAqLwogCQlzdWJkZXYgPSAwOwotCQkqcHJvdG9jb2wgPSBSQ19UWVBFX1NPTlkxMjsKKwkJcmVxdWVzdC0+cHJvdG9jb2wgPSBSQ19UWVBFX1NPTlkxMjsKIAkJYnJlYWs7CiAJY2FzZSAxNToKIAkJaWYgKCEoZW5hYmxlZF9wcm90b2NvbHMgJiBSQ19CSVRfU09OWTE1KSkKQEAgLTM0LDcgKzM0LDcgQEAKIAkJcmF3ICAgID4+PSA3OwogCQlkZXYgICAgPSByYXcgJiAweGZmOwkvKiBuZXh0IDggYml0cyAqLwogCQlzdWJkZXYgPSAwOwotCQkqcHJvdG9jb2wgPSBSQ19UWVBFX1NPTlkxNTsKKwkJcmVxdWVzdC0+cHJvdG9jb2wgPSBSQ19UWVBFX1NPTlkxNTsKIAkJYnJlYWs7CiAJY2FzZSAyMDoKIAkJaWYgKCEoZW5hYmxlZF9wcm90b2NvbHMgJiBSQ19CSVRfU09OWTIwKSkKQEAgLTQ0LDEyICs0NCwxMiBAQAogCQlkZXYgICAgPSByYXcgJiAweDFmOwkvKiBuZXh0IDUgYml0cyAqLwogCQlyYXcgICAgPj49IDU7CiAJCXN1YmRldiA9IHJhdyAmIDB4ZmY7CS8qIG5leHQgOCBiaXRzICovCi0JCSpwcm90b2NvbCA9IFJDX1RZUEVfU09OWTIwOworCQlyZXF1ZXN0LT5wcm90b2NvbCA9IFJDX1RZUEVfU09OWTIwOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JKnNjYW5jb2RlID0gZGV2IDw8IDE2IHwgc3ViZGV2IDw8IDggfCBmdW5jOworCXJlcXVlc3QtPnNjYW5jb2RlID0gZGV2IDw8IDE2IHwgc3ViZGV2IDw8IDggfCBmdW5jOwogCXJldHVybiBJTUdfSVJfU0NBTkNPREU7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvbGlyY19kZXYuYyBiL2RyaXZlcnMvbWVkaWEvcmMvbGlyY19kZXYuYwppbmRleCAxZTA1NDVhNi4uNGRlMGU4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvbGlyY19kZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2xpcmNfZGV2LmMKQEAgLTU1MywxNCArNTUzLDE0IEBACiAJaWYgKCFpci0+YXR0YWNoZWQpCiAJCXJldHVybiBQT0xMRVJSOwogCi0JcG9sbF93YWl0KGZpbGUsICZpci0+YnVmLT53YWl0X3BvbGwsIHdhaXQpOworCWlmIChpci0+YnVmKSB7CisJCXBvbGxfd2FpdChmaWxlLCAmaXItPmJ1Zi0+d2FpdF9wb2xsLCB3YWl0KTsKIAotCWlmIChpci0+YnVmKQogCQlpZiAobGlyY19idWZmZXJfZW1wdHkoaXItPmJ1ZikpCiAJCQlyZXQgPSAwOwogCQllbHNlCiAJCQlyZXQgPSBQT0xMSU4gfCBQT0xMUkROT1JNOwotCWVsc2UKKwl9IGVsc2UKIAkJcmV0ID0gUE9MTEVSUjsKIAogCWRldl9kYmcoaXItPmQuZGV2LCBMT0dIRUFEICJwb2xsIHJlc3VsdCA9ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwppbmRleCA4NmZmY2Q1Li5mOGM1ZTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYworKysgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwpAQCAtMTAyMSwxNiArMTAyMSwxNiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAobmV3X3Byb3RvY29scyA9PSBvbGRfcHJvdG9jb2xzKSB7Ci0JCXJjID0gbGVuOwotCQlnb3RvIG91dDsKKwlpZiAobmV3X3Byb3RvY29scyAhPSBvbGRfcHJvdG9jb2xzKSB7CisJCSpjdXJyZW50X3Byb3RvY29scyA9IG5ld19wcm90b2NvbHM7CisJCUlSX2RwcmludGsoMSwgIlByb3RvY29scyBjaGFuZ2VkIHRvIDB4JWxseFxuIiwKKwkJCSAgIChsb25nIGxvbmcpbmV3X3Byb3RvY29scyk7CiAJfQogCi0JKmN1cnJlbnRfcHJvdG9jb2xzID0gbmV3X3Byb3RvY29sczsKLQlJUl9kcHJpbnRrKDEsICJQcm90b2NvbHMgY2hhbmdlZCB0byAweCVsbHhcbiIsIChsb25nIGxvbmcpbmV3X3Byb3RvY29scyk7Ci0KIAkvKgotCSAqIElmIHRoZSBwcm90b2NvbCBpcyBjaGFuZ2VkIHRoZSBmaWx0ZXIgbmVlZHMgdXBkYXRpbmcuCisJICogSWYgYSBwcm90b2NvbCBjaGFuZ2Ugd2FzIGF0dGVtcHRlZCB0aGUgZmlsdGVyIG1heSBuZWVkIHVwZGF0aW5nLCBldmVuCisJICogaWYgdGhlIGFjdHVhbCBwcm90b2NvbCBtYXNrIGhhc24ndCBjaGFuZ2VkIChzaW5jZSB0aGUgZHJpdmVyIG1heSBoYXZlCisJICogY2xlYXJlZCB0aGUgZmlsdGVyKS4KIAkgKiBUcnkgc2V0dGluZyB0aGUgc2FtZSBmaWx0ZXIgd2l0aCB0aGUgbmV3IHByb3RvY29sIChpZiBhbnkpLgogCSAqIEZhbGwgYmFjayB0byBjbGVhcmluZyB0aGUgZmlsdGVyLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9zdW54aS1jaXIuYyBiL2RyaXZlcnMvbWVkaWEvcmMvc3VueGktY2lyLmMKaW5kZXggMzQwZjdmNS4uNzgzMGFlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9zdW54aS1jaXIuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL3N1bnhpLWNpci5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPgogI2luY2x1ZGUgPG1lZGlhL3JjLWNvcmUuaD4KIAogI2RlZmluZSBTVU5YSV9JUl9ERVYgInN1bnhpLWlyIgpAQCAtNTUsMTIgKzU2LDEyIEBACiAjZGVmaW5lIFJFR19SWElOVF9SQUlfRU4JCUJJVCg0KQogCiAvKiBSeCBGSUZPIGF2YWlsYWJsZSBieXRlIGxldmVsICovCi0jZGVmaW5lIFJFR19SWElOVF9SQUwodmFsKSAgICAoKCh2YWwpIDw8IDgpICYgKEdFTk1BU0soMTEsIDgpKSkKKyNkZWZpbmUgUkVHX1JYSU5UX1JBTCh2YWwpICAgICgodmFsKSA8PCA4KQogCiAvKiBSeCBJbnRlcnJ1cHQgU3RhdHVzICovCiAjZGVmaW5lIFNVTlhJX0lSX1JYU1RBX1JFRyAgICAweDMwCiAvKiBSWCBGSUZPIEdldCBBdmFpbGFibGUgQ291bnRlciAqLwotI2RlZmluZSBSRUdfUlhTVEFfR0VUX0FDKHZhbCkgKCgodmFsKSA+PiA4KSAmIChHRU5NQVNLKDUsIDApKSkKKyNkZWZpbmUgUkVHX1JYU1RBX0dFVF9BQyh2YWwpICgoKHZhbCkgPj4gOCkgJiAoaXItPmZpZm9fc2l6ZSAqIDIgLSAxKSkKIC8qIENsZWFyIGFsbCBpbnRlcnJ1cHQgc3RhdHVzIHZhbHVlICovCiAjZGVmaW5lIFJFR19SWFNUQV9DTEVBUkFMTCAgICAweGZmCiAKQEAgLTcxLDEwICs3Miw2IEBACiAvKiBDSVJfUkVHIHJlZ2lzdGVyIGlkbGUgdGhyZXNob2xkICovCiAjZGVmaW5lIFJFR19DSVJfSVRIUih2YWwpICAgICgoKHZhbCkgPDwgOCkgJiAoR0VOTUFTSygxNSwgOCkpKQogCi0vKiBIYXJkd2FyZSBzdXBwb3J0ZWQgZmlmbyBzaXplICovCi0jZGVmaW5lIFNVTlhJX0lSX0ZJRk9fU0laRSAgICAxNgotLyogSG93IG1hbnkgbWVzc2FnZXMgaW4gRklGTyB0cmlnZ2VyIElSUSAqLwotI2RlZmluZSBUUklHR0VSX0xFVkVMICAgICAgICAgOAogLyogUmVxdWlyZWQgZnJlcXVlbmN5IGZvciBJUjAgb3IgSVIxIGNsb2NrIGluIENJUiBtb2RlICovCiAjZGVmaW5lIFNVTlhJX0lSX0JBU0VfQ0xLICAgICA4MDAwMDAwCiAvKiBGcmVxdWVuY3kgYWZ0ZXIgSVIgaW50ZXJuYWwgZGl2aWRlciAgKi8KQEAgLTkzLDggKzkwLDEwIEBACiAJc3RydWN0IHJjX2RldiAgICpyYzsKIAl2b2lkIF9faW9tZW0gICAgKmJhc2U7CiAJaW50ICAgICAgICAgICAgIGlycTsKKwlpbnQJCWZpZm9fc2l6ZTsKIAlzdHJ1Y3QgY2xrICAgICAgKmNsazsKIAlzdHJ1Y3QgY2xrICAgICAgKmFwYl9jbGs7CisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnJzdDsKIAljb25zdCBjaGFyICAgICAgKm1hcF9uYW1lOwogfTsKIApAQCAtMTEzLDExICsxMTIsMTEgQEAKIAkvKiBjbGVhbiBhbGwgcGVuZGluZyBzdGF0dXNlcyAqLwogCXdyaXRlbChzdGF0dXMgfCBSRUdfUlhTVEFfQ0xFQVJBTEwsIGlyLT5iYXNlICsgU1VOWElfSVJfUlhTVEFfUkVHKTsKIAotCWlmIChzdGF0dXMgJiBSRUdfUlhJTlRfUkFJX0VOKSB7CisJaWYgKHN0YXR1cyAmIChSRUdfUlhJTlRfUkFJX0VOIHwgUkVHX1JYSU5UX1JQRUlfRU4pKSB7CiAJCS8qIEhvdyBtYW55IG1lc3NhZ2VzIGluIGZpZm8gKi8KIAkJcmMgID0gUkVHX1JYU1RBX0dFVF9BQyhzdGF0dXMpOwogCQkvKiBTYW5pdHkgY2hlY2sgKi8KLQkJcmMgPSByYyA+IFNVTlhJX0lSX0ZJRk9fU0laRSA/IFNVTlhJX0lSX0ZJRk9fU0laRSA6IHJjOworCQlyYyA9IHJjID4gaXItPmZpZm9fc2l6ZSA/IGlyLT5maWZvX3NpemUgOiByYzsKIAkJLyogSWYgd2UgaGF2ZSBkYXRhICovCiAJCWZvciAoY250ID0gMDsgY250IDwgcmM7IGNudCsrKSB7CiAJCQkvKiBmb3IgZWFjaCBiaXQgaW4gZmlmbyAqLwpAQCAtMTU0LDYgKzE1MywxMSBAQAogCWlmICghaXIpCiAJCXJldHVybiAtRU5PTUVNOwogCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGRuLCAiYWxsd2lubmVyLHN1bjVpLWExMy1pciIpKQorCQlpci0+Zmlmb19zaXplID0gNjQ7CisJZWxzZQorCQlpci0+Zmlmb19zaXplID0gMTY7CisKIAkvKiBDbG9jayAqLwogCWlyLT5hcGJfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImFwYiIpOwogCWlmIChJU19FUlIoaXItPmFwYl9jbGspKSB7CkBAIC0xNjYsMTUgKzE3MCwyOSBAQAogCQlyZXR1cm4gUFRSX0VSUihpci0+Y2xrKTsKIAl9CiAKKwkvKiBSZXNldCAob3B0aW9uYWwpICovCisJaXItPnJzdCA9IGRldm1fcmVzZXRfY29udHJvbF9nZXRfb3B0aW9uYWwoZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGlyLT5yc3QpKSB7CisJCXJldCA9IFBUUl9FUlIoaXItPnJzdCk7CisJCWlmIChyZXQgPT0gLUVQUk9CRV9ERUZFUikKKwkJCXJldHVybiByZXQ7CisJCWlyLT5yc3QgPSBOVUxMOworCX0gZWxzZSB7CisJCXJldCA9IHJlc2V0X2NvbnRyb2xfZGVhc3NlcnQoaXItPnJzdCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwogCXJldCA9IGNsa19zZXRfcmF0ZShpci0+Y2xrLCBTVU5YSV9JUl9CQVNFX0NMSyk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldiwgInNldCBpciBiYXNlIGNsb2NrIGZhaWxlZCFcbiIpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGV4aXRfcmVzZXRfYXNzZXJ0OwogCX0KIAogCWlmIChjbGtfcHJlcGFyZV9lbmFibGUoaXItPmFwYl9jbGspKSB7CiAJCWRldl9lcnIoZGV2LCAidHJ5IHRvIGVuYWJsZSBhcGJfaXJfY2xrIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGV4aXRfcmVzZXRfYXNzZXJ0OwogCX0KIAogCWlmIChjbGtfcHJlcGFyZV9lbmFibGUoaXItPmNsaykpIHsKQEAgLTI1NSw3ICsyNzMsNyBAQAogCSAqIGxldmVsCiAJICovCiAJd3JpdGVsKFJFR19SWElOVF9ST0lfRU4gfCBSRUdfUlhJTlRfUlBFSV9FTiB8Ci0JICAgICAgIFJFR19SWElOVF9SQUlfRU4gfCBSRUdfUlhJTlRfUkFMKFRSSUdHRVJfTEVWRUwgLSAxKSwKKwkgICAgICAgUkVHX1JYSU5UX1JBSV9FTiB8IFJFR19SWElOVF9SQUwoaXItPmZpZm9fc2l6ZSAvIDIgLSAxKSwKIAkgICAgICAgaXItPmJhc2UgKyBTVU5YSV9JUl9SWElOVF9SRUcpOwogCiAJLyogRW5hYmxlIElSIE1vZHVsZSAqLwpAQCAtMjcxLDYgKzI4OSw5IEBACiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlyLT5jbGspOwogZXhpdF9jbGtkaXNhYmxlX2FwYl9jbGs6CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlyLT5hcGJfY2xrKTsKK2V4aXRfcmVzZXRfYXNzZXJ0OgorCWlmIChpci0+cnN0KQorCQlyZXNldF9jb250cm9sX2Fzc2VydChpci0+cnN0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yODIsNiArMzAzLDggQEAKIAogCWNsa19kaXNhYmxlX3VucHJlcGFyZShpci0+Y2xrKTsKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoaXItPmFwYl9jbGspOworCWlmIChpci0+cnN0KQorCQlyZXNldF9jb250cm9sX2Fzc2VydChpci0+cnN0KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpci0+aXJfbG9jaywgZmxhZ3MpOwogCS8qIGRpc2FibGUgSVIgSVJRICovCkBAIC0yOTgsNiArMzIxLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3VueGlfaXJfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW40aS1hMTAtaXIiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjVpLWExMy1pciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3R1bmVycy9tdDIweHguYyBiL2RyaXZlcnMvbWVkaWEvdHVuZXJzL210MjB4eC5jCmluZGV4IDBlNzRlOTcuLjllMDMxMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdHVuZXJzL210MjB4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdHVuZXJzL210MjB4eC5jCkBAIC02NjAsMTEgKzY2MCwzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIk1pY3JvdHVuZSB0dW5lciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlJhbHBoIE1ldHpsZXIsIEdlcmQgS25vcnIsIEd1bnRoZXIgTWF5ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3R1bmVycy9tdDIxMzEuYyBiL2RyaXZlcnMvbWVkaWEvdHVuZXJzL210MjEzMS5jCmluZGV4IGY4M2IwYzEuLjZlMmNkZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdHVuZXJzL210MjEzMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdHVuZXJzL210MjEzMS5jCkBAIC0yOTQsOCArMjk0LDMgQEAKIE1PRFVMRV9BVVRIT1IoIlN0ZXZlbiBUb3RoIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1pY3JvdHVuZSBNVDIxMzEgc2lsaWNvbiB0dW5lciBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdHVuZXJzL210MjEzMS5oIGIvZHJpdmVycy9tZWRpYS90dW5lcnMvbXQyMTMxLmgKaW5kZXggMDljZWFmNi4uODM3Yzg1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS90dW5lcnMvbXQyMTMxLmgKKysrIGIvZHJpdmVycy9tZWRpYS90dW5lcnMvbXQyMTMxLmgKQEAgLTQ3LDggKzQ3LDMgQEAKICNlbmRpZiAvKiBDT05GSUdfTUVESUFfVFVORVJfTVQyMTMxICovCiAKICNlbmRpZiAvKiBfX01UMjEzMV9IX18gKi8KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdHVuZXJzL210MjEzMV9wcml2LmggYi9kcml2ZXJzL21lZGlhL3R1bmVycy9tdDIxMzFfcHJpdi5oCmluZGV4IDYyYWVlZGYuLjkxMjgzYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdHVuZXJzL210MjEzMV9wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS90dW5lcnMvbXQyMTMxX3ByaXYuaApAQCAtNDEsOCArNDEsMyBAQAogfTsKIAogI2VuZGlmIC8qIF9fTVQyMTMxX1BSSVZfSF9fICovCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3R1bmVycy9teGw1MDA3dC5jIGIvZHJpdmVycy9tZWRpYS90dW5lcnMvbXhsNTAwN3QuYwppbmRleCAxODEwYWQ2Li5mNGFlMDRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3R1bmVycy9teGw1MDA3dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdHVuZXJzL214bDUwMDd0LmMKQEAgLTkzOCwxMSArOTM4LDMgQEAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QGxpbnV4dHYub3JnPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oIjAuMiIpOwotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdHVuZXJzL214bDUwMDd0LmggYi9kcml2ZXJzL21lZGlhL3R1bmVycy9teGw1MDA3dC5oCmluZGV4IDM3YjA5NDIuLmFlNzAzN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdHVuZXJzL214bDUwMDd0LmgKKysrIGIvZHJpdmVycy9tZWRpYS90dW5lcnMvbXhsNTAwN3QuaApAQCAtOTMsMTIgKzkzLDMgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19NWEw1MDA3VF9IX18gKi8KLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdHVuZXJzL3NpMjE1Ny5jIGIvZHJpdmVycy9tZWRpYS90dW5lcnMvc2kyMTU3LmMKaW5kZXggMjE4MGRlOS4uZmNmMTM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS90dW5lcnMvc2kyMTU3LmMKKysrIGIvZHJpdmVycy9tZWRpYS90dW5lcnMvc2kyMTU3LmMKQEAgLTE5LDE2ICsxOSwxNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBkdmJfdHVuZXJfb3BzIHNpMjE1N19vcHM7CiAKIC8qIGV4ZWN1dGUgZmlybXdhcmUgY29tbWFuZCAqLwotc3RhdGljIGludCBzaTIxNTdfY21kX2V4ZWN1dGUoc3RydWN0IHNpMjE1NyAqcywgc3RydWN0IHNpMjE1N19jbWQgKmNtZCkKK3N0YXRpYyBpbnQgc2kyMTU3X2NtZF9leGVjdXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCBzaTIxNTdfY21kICpjbWQpCiB7CisJc3RydWN0IHNpMjE1N19kZXYgKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCByZXQ7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCi0JbXV0ZXhfbG9jaygmcy0+aTJjX211dGV4KTsKKwltdXRleF9sb2NrKCZkZXYtPmkyY19tdXRleCk7CiAKIAlpZiAoY21kLT53bGVuKSB7CiAJCS8qIHdyaXRlIGNtZCBhbmQgYXJncyBmb3IgZmlybXdhcmUgKi8KLQkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHMtPmNsaWVudCwgY21kLT5hcmdzLCBjbWQtPndsZW4pOworCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBjbWQtPmFyZ3MsIGNtZC0+d2xlbik7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlnb3RvIGVycl9tdXRleF91bmxvY2s7CiAJCX0gZWxzZSBpZiAocmV0ICE9IGNtZC0+d2xlbikgewpAQCAtNDIsNyArNDMsNyBAQAogCQkjZGVmaW5lIFRJTUVPVVQgODAKIAkJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFRJTUVPVVQpOwogCQl3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKLQkJCXJldCA9IGkyY19tYXN0ZXJfcmVjdihzLT5jbGllbnQsIGNtZC0+YXJncywgY21kLT5ybGVuKTsKKwkJCXJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGNtZC0+YXJncywgY21kLT5ybGVuKTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJZ290byBlcnJfbXV0ZXhfdW5sb2NrOwogCQkJfSBlbHNlIGlmIChyZXQgIT0gY21kLT5ybGVuKSB7CkBAIC01NSw3ICs1Niw3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAotCQlkZXZfZGJnKCZzLT5jbGllbnQtPmRldiwgImNtZCBleGVjdXRpb24gdG9vayAlZCBtc1xuIiwKKwkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJjbWQgZXhlY3V0aW9uIHRvb2sgJWQgbXNcbiIsCiAJCQkJamlmZmllc190b19tc2VjcyhqaWZmaWVzKSAtCiAJCQkJKGppZmZpZXNfdG9fbXNlY3ModGltZW91dCkgLSBUSU1FT1VUKSk7CiAKQEAgLTY1LDM1ICs2NiwzMiBAQAogCQl9CiAJfQogCi0JcmV0ID0gMDsKKwltdXRleF91bmxvY2soJmRldi0+aTJjX211dGV4KTsKKwlyZXR1cm4gMDsKIAogZXJyX211dGV4X3VubG9jazoKLQltdXRleF91bmxvY2soJnMtPmkyY19tdXRleCk7Ci0JaWYgKHJldCkKLQkJZ290byBlcnI7Ci0KLQlyZXR1cm4gMDsKLWVycjoKLQlkZXZfZGJnKCZzLT5jbGllbnQtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKKwltdXRleF91bmxvY2soJmRldi0+aTJjX211dGV4KTsKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNpMjE1N19pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBzaTIxNTcgKnMgPSBmZS0+dHVuZXJfcHJpdjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZmUtPnR1bmVyX3ByaXY7CisJc3RydWN0IHNpMjE1N19kZXYgKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCByZXQsIGxlbiwgcmVtYWluaW5nOwogCXN0cnVjdCBzaTIxNTdfY21kIGNtZDsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKLQl1OCAqZndfZmlsZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IGNoYXIgKmZ3X25hbWU7CiAJdW5zaWduZWQgaW50IGNoaXBfaWQ7CiAKLQlkZXZfZGJnKCZzLT5jbGllbnQtPmRldiwgIlxuIik7CisJZGV2X2RiZygmY2xpZW50LT5kZXYsICJcbiIpOwogCi0JaWYgKHMtPmZ3X2xvYWRlZCkKKwlpZiAoZGV2LT5md19sb2FkZWQpCiAJCWdvdG8gd2FybTsKIAogCS8qIHBvd2VyIHVwICovCi0JaWYgKHMtPmNoaXB0eXBlID09IFNJMjE1N19DSElQVFlQRV9TSTIxNDYpIHsKKwlpZiAoZGV2LT5jaGlwdHlwZSA9PSBTSTIxNTdfQ0hJUFRZUEVfU0kyMTQ2KSB7CiAJCW1lbWNweShjbWQuYXJncywgIlx4YzBceDA1XHgwMVx4MDBceDAwXHgwYlx4MDBceDAwXHgwMSIsIDkpOwogCQljbWQud2xlbiA9IDk7CiAJfSBlbHNlIHsKQEAgLTEwMSw3ICs5OSw3IEBACiAJCWNtZC53bGVuID0gMTU7CiAJfQogCWNtZC5ybGVuID0gMTsKLQlyZXQgPSBzaTIxNTdfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJcmV0ID0gc2kyMTU3X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTEwOSw3ICsxMDcsNyBAQAogCW1lbWNweShjbWQuYXJncywgIlx4MDIiLCAxKTsKIAljbWQud2xlbiA9IDE7CiAJY21kLnJsZW4gPSAxMzsKLQlyZXQgPSBzaTIxNTdfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJcmV0ID0gc2kyMTU3X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTEyNSwxMjEgKzEyMywxMzMgQEAKIAlzd2l0Y2ggKGNoaXBfaWQpIHsKIAljYXNlIFNJMjE1OF9BMjA6CiAJY2FzZSBTSTIxNDhfQTIwOgotCQlmd19maWxlID0gU0kyMTU4X0EyMF9GSVJNV0FSRTsKKwkJZndfbmFtZSA9IFNJMjE1OF9BMjBfRklSTVdBUkU7CiAJCWJyZWFrOwogCWNhc2UgU0kyMTU3X0EzMDoKIAljYXNlIFNJMjE0N19BMzA6CiAJY2FzZSBTSTIxNDZfQTEwOgotCQlnb3RvIHNraXBfZndfZG93bmxvYWQ7CisJCWZ3X25hbWUgPSBOVUxMOworCQlicmVhazsKIAlkZWZhdWx0OgotCQlkZXZfZXJyKCZzLT5jbGllbnQtPmRldiwKLQkJCQkidW5rbm93biBjaGlwIHZlcnNpb24gU2kyMSVkLSVjJWMlY1xuIiwKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJ1bmtub3duIGNoaXAgdmVyc2lvbiBTaTIxJWQtJWMlYyVjXG4iLAogCQkJCWNtZC5hcmdzWzJdLCBjbWQuYXJnc1sxXSwKIAkJCQljbWQuYXJnc1szXSwgY21kLmFyZ3NbNF0pOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycjsKIAl9CiAKLQkvKiBjb2xkIHN0YXRlIC0gdHJ5IHRvIGRvd25sb2FkIGZpcm13YXJlICovCi0JZGV2X2luZm8oJnMtPmNsaWVudC0+ZGV2LCAiZm91bmQgYSAnJXMnIGluIGNvbGQgc3RhdGVcbiIsCi0JCQlzaTIxNTdfb3BzLmluZm8ubmFtZSk7CisJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiZm91bmQgYSAnU2lsaWNvbiBMYWJzIFNpMjElZC0lYyVjJWMnXG4iLAorCQkJY21kLmFyZ3NbMl0sIGNtZC5hcmdzWzFdLCBjbWQuYXJnc1szXSwgY21kLmFyZ3NbNF0pOworCisJaWYgKGZ3X25hbWUgPT0gTlVMTCkKKwkJZ290byBza2lwX2Z3X2Rvd25sb2FkOwogCiAJLyogcmVxdWVzdCB0aGUgZmlybXdhcmUsIHRoaXMgd2lsbCBibG9jayBhbmQgdGltZW91dCAqLwotCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd19maWxlLCAmcy0+Y2xpZW50LT5kZXYpOworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmd19uYW1lLCAmY2xpZW50LT5kZXYpOwogCWlmIChyZXQpIHsKLQkJZGV2X2Vycigmcy0+Y2xpZW50LT5kZXYsICJmaXJtd2FyZSBmaWxlICclcycgbm90IGZvdW5kXG4iLAotCQkJCWZ3X2ZpbGUpOworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZpcm13YXJlIGZpbGUgJyVzJyBub3QgZm91bmRcbiIsCisJCQkJZndfbmFtZSk7CiAJCWdvdG8gZXJyOwogCX0KIAogCS8qIGZpcm13YXJlIHNob3VsZCBiZSBuIGNodW5rcyBvZiAxNyBieXRlcyAqLwogCWlmIChmdy0+c2l6ZSAlIDE3ICE9IDApIHsKLQkJZGV2X2Vycigmcy0+Y2xpZW50LT5kZXYsICJmaXJtd2FyZSBmaWxlICclcycgaXMgaW52YWxpZFxuIiwKLQkJCQlmd19maWxlKTsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmaXJtd2FyZSBmaWxlICclcycgaXMgaW52YWxpZFxuIiwKKwkJCQlmd19uYW1lKTsKIAkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBmd19yZWxlYXNlX2V4aXQ7CisJCWdvdG8gZXJyX3JlbGVhc2VfZmlybXdhcmU7CiAJfQogCi0JZGV2X2luZm8oJnMtPmNsaWVudC0+ZGV2LCAiZG93bmxvYWRpbmcgZmlybXdhcmUgZnJvbSBmaWxlICclcydcbiIsCi0JCQlmd19maWxlKTsKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJkb3dubG9hZGluZyBmaXJtd2FyZSBmcm9tIGZpbGUgJyVzJ1xuIiwKKwkJCWZ3X25hbWUpOwogCiAJZm9yIChyZW1haW5pbmcgPSBmdy0+c2l6ZTsgcmVtYWluaW5nID4gMDsgcmVtYWluaW5nIC09IDE3KSB7CiAJCWxlbiA9IGZ3LT5kYXRhW2Z3LT5zaXplIC0gcmVtYWluaW5nXTsKIAkJbWVtY3B5KGNtZC5hcmdzLCAmZnctPmRhdGFbKGZ3LT5zaXplIC0gcmVtYWluaW5nKSArIDFdLCBsZW4pOwogCQljbWQud2xlbiA9IGxlbjsKIAkJY21kLnJsZW4gPSAxOwotCQlyZXQgPSBzaTIxNTdfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJCXJldCA9IHNpMjE1N19jbWRfZXhlY3V0ZShjbGllbnQsICZjbWQpOwogCQlpZiAocmV0KSB7Ci0JCQlkZXZfZXJyKCZzLT5jbGllbnQtPmRldiwKLQkJCQkJImZpcm13YXJlIGRvd25sb2FkIGZhaWxlZD0lZFxuIiwKKwkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmlybXdhcmUgZG93bmxvYWQgZmFpbGVkICVkXG4iLAogCQkJCQlyZXQpOwotCQkJZ290byBmd19yZWxlYXNlX2V4aXQ7CisJCQlnb3RvIGVycl9yZWxlYXNlX2Zpcm13YXJlOwogCQl9CiAJfQogCiAJcmVsZWFzZV9maXJtd2FyZShmdyk7Ci0JZncgPSBOVUxMOwogCiBza2lwX2Z3X2Rvd25sb2FkOgogCS8qIHJlYm9vdCB0aGUgdHVuZXIgd2l0aCBuZXcgZmlybXdhcmU/ICovCiAJbWVtY3B5KGNtZC5hcmdzLCAiXHgwMVx4MDEiLCAyKTsKIAljbWQud2xlbiA9IDI7CiAJY21kLnJsZW4gPSAxOwotCXJldCA9IHNpMjE1N19jbWRfZXhlY3V0ZShzLCAmY21kKTsKKwlyZXQgPSBzaTIxNTdfY21kX2V4ZWN1dGUoY2xpZW50LCAmY21kKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAotCXMtPmZ3X2xvYWRlZCA9IHRydWU7CisJLyogcXVlcnkgZmlybXdhcmUgdmVyc2lvbiAqLworCW1lbWNweShjbWQuYXJncywgIlx4MTEiLCAxKTsKKwljbWQud2xlbiA9IDE7CisJY21kLnJsZW4gPSAxMDsKKwlyZXQgPSBzaTIxNTdfY21kX2V4ZWN1dGUoY2xpZW50LCAmY21kKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgImZpcm13YXJlIHZlcnNpb246ICVjLiVjLiVkXG4iLAorCQkJY21kLmFyZ3NbNl0sIGNtZC5hcmdzWzddLCBjbWQuYXJnc1s4XSk7CisKKwlkZXYtPmZ3X2xvYWRlZCA9IHRydWU7CiAKIHdhcm06Ci0Jcy0+YWN0aXZlID0gdHJ1ZTsKKwlkZXYtPmFjdGl2ZSA9IHRydWU7CiAJcmV0dXJuIDA7CiAKLWZ3X3JlbGVhc2VfZXhpdDoKK2Vycl9yZWxlYXNlX2Zpcm13YXJlOgogCXJlbGVhc2VfZmlybXdhcmUoZncpOwogZXJyOgotCWRldl9kYmcoJnMtPmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc2kyMTU3X3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBzaTIxNTcgKnMgPSBmZS0+dHVuZXJfcHJpdjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gZmUtPnR1bmVyX3ByaXY7CisJc3RydWN0IHNpMjE1N19kZXYgKmRldiA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCByZXQ7CiAJc3RydWN0IHNpMjE1N19jbWQgY21kOwogCi0JZGV2X2RiZygmcy0+Y2xpZW50LT5kZXYsICJcbiIpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiXG4iKTsKIAotCXMtPmFjdGl2ZSA9IGZhbHNlOworCWRldi0+YWN0aXZlID0gZmFsc2U7CiAKIAkvKiBzdGFuZGJ5ICovCiAJbWVtY3B5KGNtZC5hcmdzLCAiXHgxNlx4MDAiLCAyKTsKIAljbWQud2xlbiA9IDI7CiAJY21kLnJsZW4gPSAxOwotCXJldCA9IHNpMjE1N19jbWRfZXhlY3V0ZShzLCAmY21kKTsKKwlyZXQgPSBzaTIxNTdfY21kX2V4ZWN1dGUoY2xpZW50LCAmY21kKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCXJldHVybiAwOwogZXJyOgotCWRldl9kYmcoJnMtPmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc2kyMTU3X3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7Ci0Jc3RydWN0IHNpMjE1NyAqcyA9IGZlLT50dW5lcl9wcml2OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBmZS0+dHVuZXJfcHJpdjsKKwlzdHJ1Y3Qgc2kyMTU3X2RldiAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CiAJaW50IHJldDsKIAlzdHJ1Y3Qgc2kyMTU3X2NtZCBjbWQ7CiAJdTggYmFuZHdpZHRoLCBkZWxpdmVyeV9zeXN0ZW07CiAKLQlkZXZfZGJnKCZzLT5jbGllbnQtPmRldiwKKwlkZXZfZGJnKCZjbGllbnQtPmRldiwKIAkJCSJkZWxpdmVyeV9zeXN0ZW09JWQgZnJlcXVlbmN5PSV1IGJhbmR3aWR0aF9oej0ldVxuIiwKLQkJCWMtPmRlbGl2ZXJ5X3N5c3RlbSwgYy0+ZnJlcXVlbmN5LAotCQkJYy0+YmFuZHdpZHRoX2h6KTsKKwkJCWMtPmRlbGl2ZXJ5X3N5c3RlbSwgYy0+ZnJlcXVlbmN5LCBjLT5iYW5kd2lkdGhfaHopOwogCi0JaWYgKCFzLT5hY3RpdmUpIHsKKwlpZiAoIWRldi0+YWN0aXZlKSB7CiAJCXJldCA9IC1FQUdBSU47CiAJCWdvdG8gZXJyOwogCX0KQEAgLTI3NCwyMSArMjg0LDIxIEBACiAKIAltZW1jcHkoY21kLmFyZ3MsICJceDE0XHgwMFx4MDNceDA3XHgwMFx4MDAiLCA2KTsKIAljbWQuYXJnc1s0XSA9IGRlbGl2ZXJ5X3N5c3RlbSB8IGJhbmR3aWR0aDsKLQlpZiAocy0+aW52ZXJzaW9uKQorCWlmIChkZXYtPmludmVyc2lvbikKIAkJY21kLmFyZ3NbNV0gPSAweDAxOwogCWNtZC53bGVuID0gNjsKIAljbWQucmxlbiA9IDQ7Ci0JcmV0ID0gc2kyMTU3X2NtZF9leGVjdXRlKHMsICZjbWQpOworCXJldCA9IHNpMjE1N19jbWRfZXhlY3V0ZShjbGllbnQsICZjbWQpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JaWYgKHMtPmNoaXB0eXBlID09IFNJMjE1N19DSElQVFlQRV9TSTIxNDYpCisJaWYgKGRldi0+Y2hpcHR5cGUgPT0gU0kyMTU3X0NISVBUWVBFX1NJMjE0NikKIAkJbWVtY3B5KGNtZC5hcmdzLCAiXHgxNFx4MDBceDAyXHgwN1x4MDBceDAxIiwgNik7CiAJZWxzZQogCQltZW1jcHkoY21kLmFyZ3MsICJceDE0XHgwMFx4MDJceDA3XHgwMVx4MDAiLCA2KTsKIAljbWQud2xlbiA9IDY7CiAJY21kLnJsZW4gPSA0OwotCXJldCA9IHNpMjE1N19jbWRfZXhlY3V0ZShzLCAmY21kKTsKKwlyZXQgPSBzaTIxNTdfY21kX2V4ZWN1dGUoY2xpZW50LCAmY21kKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIApAQCAtMzAwLDEzICszMTAsMTMgQEAKIAljbWQuYXJnc1s3XSA9IChjLT5mcmVxdWVuY3kgPj4gMjQpICYgMHhmZjsKIAljbWQud2xlbiA9IDg7CiAJY21kLnJsZW4gPSAxOwotCXJldCA9IHNpMjE1N19jbWRfZXhlY3V0ZShzLCAmY21kKTsKKwlyZXQgPSBzaTIxNTdfY21kX2V4ZWN1dGUoY2xpZW50LCAmY21kKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCXJldHVybiAwOwogZXJyOgotCWRldl9kYmcoJnMtPmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMzNCw3MCArMzQ0LDY3IEBACiB7CiAJc3RydWN0IHNpMjE1N19jb25maWcgKmNmZyA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBjZmctPmZlOwotCXN0cnVjdCBzaTIxNTcgKnM7CisJc3RydWN0IHNpMjE1N19kZXYgKmRldjsKIAlzdHJ1Y3Qgc2kyMTU3X2NtZCBjbWQ7CiAJaW50IHJldDsKIAotCXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2kyMTU3KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzKSB7CisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAia3phbGxvYygpIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyOwogCX0KIAotCXMtPmNsaWVudCA9IGNsaWVudDsKLQlzLT5mZSA9IGNmZy0+ZmU7Ci0Jcy0+aW52ZXJzaW9uID0gY2ZnLT5pbnZlcnNpb247Ci0Jcy0+ZndfbG9hZGVkID0gZmFsc2U7Ci0Jcy0+Y2hpcHR5cGUgPSAodTgpaWQtPmRyaXZlcl9kYXRhOwotCW11dGV4X2luaXQoJnMtPmkyY19tdXRleCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGV2KTsKKwlkZXYtPmZlID0gY2ZnLT5mZTsKKwlkZXYtPmludmVyc2lvbiA9IGNmZy0+aW52ZXJzaW9uOworCWRldi0+ZndfbG9hZGVkID0gZmFsc2U7CisJZGV2LT5jaGlwdHlwZSA9ICh1OClpZC0+ZHJpdmVyX2RhdGE7CisJbXV0ZXhfaW5pdCgmZGV2LT5pMmNfbXV0ZXgpOwogCiAJLyogY2hlY2sgaWYgdGhlIHR1bmVyIGlzIHRoZXJlICovCiAJY21kLndsZW4gPSAwOwogCWNtZC5ybGVuID0gMTsKLQlyZXQgPSBzaTIxNTdfY21kX2V4ZWN1dGUocywgJmNtZCk7CisJcmV0ID0gc2kyMTU3X2NtZF9leGVjdXRlKGNsaWVudCwgJmNtZCk7CiAJaWYgKHJldCkKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyX2tmcmVlOwogCi0JZmUtPnR1bmVyX3ByaXYgPSBzOwotCW1lbWNweSgmZmUtPm9wcy50dW5lcl9vcHMsICZzaTIxNTdfb3BzLAotCQkJc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CisJbWVtY3B5KCZmZS0+b3BzLnR1bmVyX29wcywgJnNpMjE1N19vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX3R1bmVyX29wcykpOworCWZlLT50dW5lcl9wcml2ID0gY2xpZW50OwogCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgcyk7Ci0KLQlkZXZfaW5mbygmcy0+Y2xpZW50LT5kZXYsCi0JCQkiU2lsaWNvbiBMYWJzICVzIHN1Y2Nlc3NmdWxseSBhdHRhY2hlZFxuIiwKLQkJCXMtPmNoaXB0eXBlID09IFNJMjE1N19DSElQVFlQRV9TSTIxNDYgPworCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIlNpbGljb24gTGFicyAlcyBzdWNjZXNzZnVsbHkgYXR0YWNoZWRcbiIsCisJCQlkZXYtPmNoaXB0eXBlID09IFNJMjE1N19DSElQVFlQRV9TSTIxNDYgPwogCQkJIlNpMjE0NiIgOiAiU2kyMTQ3LzIxNDgvMjE1Ny8yMTU4Iik7CiAKIAlyZXR1cm4gMDsKKworZXJyX2tmcmVlOgorCWtmcmVlKGRldik7CiBlcnI6CiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7Ci0Ja2ZyZWUocyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNpMjE1N19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3Qgc2kyMTU3ICpzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0Jc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBzLT5mZTsKKwlzdHJ1Y3Qgc2kyMTU3X2RldiAqZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBkZXYtPmZlOwogCiAJZGV2X2RiZygmY2xpZW50LT5kZXYsICJcbiIpOwogCiAJbWVtc2V0KCZmZS0+b3BzLnR1bmVyX29wcywgMCwgc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CiAJZmUtPnR1bmVyX3ByaXYgPSBOVUxMOwotCWtmcmVlKHMpOworCWtmcmVlKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNpMjE1N19pZFtdID0gewotCXsic2kyMTU3IiwgMH0sCi0JeyJzaTIxNDYiLCAxfSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzaTIxNTdfaWRfdGFibGVbXSA9IHsKKwl7InNpMjE1NyIsIFNJMjE1N19DSElQVFlQRV9TSTIxNTd9LAorCXsic2kyMTQ2IiwgU0kyMTU3X0NISVBUWVBFX1NJMjE0Nn0sCiAJe30KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2kyMTU3X2lkKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzaTIxNTdfaWRfdGFibGUpOwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2kyMTU3X2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewpAQCAtNDA2LDcgKzQxMyw3IEBACiAJfSwKIAkucHJvYmUJCT0gc2kyMTU3X3Byb2JlLAogCS5yZW1vdmUJCT0gc2kyMTU3X3JlbW92ZSwKLQkuaWRfdGFibGUJPSBzaTIxNTdfaWQsCisJLmlkX3RhYmxlCT0gc2kyMTU3X2lkX3RhYmxlLAogfTsKIAogbW9kdWxlX2kyY19kcml2ZXIoc2kyMTU3X2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3R1bmVycy9zaTIxNTdfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS90dW5lcnMvc2kyMTU3X3ByaXYuaAppbmRleCBkNmUwN2NkLi43YWE1M2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3R1bmVycy9zaTIxNTdfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdHVuZXJzL3NpMjE1N19wcml2LmgKQEAgLTIxLDkgKzIxLDggQEAKICNpbmNsdWRlICJzaTIxNTcuaCIKIAogLyogc3RhdGUgc3RydWN0ICovCi1zdHJ1Y3Qgc2kyMTU3IHsKK3N0cnVjdCBzaTIxNTdfZGV2IHsKIAlzdHJ1Y3QgbXV0ZXggaTJjX211dGV4OwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmU7CiAJYm9vbCBhY3RpdmU7CiAJYm9vbCBmd19sb2FkZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3R1bmVycy90ZGExODI3MS1mZS5jIGIvZHJpdmVycy9tZWRpYS90dW5lcnMvdGRhMTgyNzEtZmUuYwppbmRleCA0OTk1Yjg5Li5mODYyMDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3R1bmVycy90ZGExODI3MS1mZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdHVuZXJzL3RkYTE4MjcxLWZlLmMKQEAgLTEzNTUsMTEgKzEzNTUsMyBAQAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbGludXh0di5vcmc+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTigiMC40Iik7Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS90dW5lcnMvdGRhMTgyNzEtbWFwcy5jIGIvZHJpdmVycy9tZWRpYS90dW5lcnMvdGRhMTgyNzEtbWFwcy5jCmluZGV4IGI2MmU5MjUuLjFlODlkZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdHVuZXJzL3RkYTE4MjcxLW1hcHMuYworKysgYi9kcml2ZXJzL21lZGlhL3R1bmVycy90ZGExODI3MS1tYXBzLmMKQEAgLTEzMDUsMTEgKzEzMDUsMyBAQAogCiAJcmV0dXJuIHJldDsKIH0KLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3R1bmVycy90ZGExODI3MS1wcml2LmggYi9kcml2ZXJzL21lZGlhL3R1bmVycy90ZGExODI3MS1wcml2LmgKaW5kZXggYjM2YTdiNy4uY2M4MGY1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS90dW5lcnMvdGRhMTgyNzEtcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdHVuZXJzL3RkYTE4MjcxLXByaXYuaApAQCAtMjI2LDExICsyMjYsMyBAQAogZXh0ZXJuIGludCB0ZGExODI3MV9jYWxjX3JmX2NhbChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpmcmVxKTsKIAogI2VuZGlmIC8qIF9fVERBMTgyNzFfUFJJVl9IX18gKi8KLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3R1bmVycy90ZGE4Mjd4LmMgYi9kcml2ZXJzL21lZGlhL3R1bmVycy90ZGE4Mjd4LmMKaW5kZXggNzM0NTNhMi4uZWRjYjRhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS90dW5lcnMvdGRhODI3eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdHVuZXJzL3RkYTgyN3guYwpAQCAtOTA3LDExICs5MDcsMyBAQAogTU9EVUxFX0FVVEhPUigiSGFydG11dCBIYWNrbWFubiA8aGFydG11dC5oYWNrbWFubkB0LW9ubGluZS5kZT4iKTsKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgS3J1Zmt5IDxta3J1Zmt5QGxpbnV4dHYub3JnPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdHVuZXJzL3RkYTgyOTAuYyBiL2RyaXZlcnMvbWVkaWEvdHVuZXJzL3RkYTgyOTAuYwppbmRleCBhYjQxMDZjLi45OThlODJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3R1bmVycy90ZGE4MjkwLmMKKysrIGIvZHJpdmVycy9tZWRpYS90dW5lcnMvdGRhODI5MC5jCkBAIC04ODEsMTEgKzg4MSwzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMvTlhQIFREQTgyOTAvVERBODI5NSBhbmFsb2cgSUYgZGVtb2R1bGF0b3IgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJHZXJkIEtub3JyLCBIYXJ0bXV0IEhhY2ttYW5uLCBNaWNoYWVsIEtydWZreSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdHVuZXJzL3RkYTk4ODcuYyBiL2RyaXZlcnMvbWVkaWEvdHVuZXJzL3RkYTk4ODcuYwppbmRleCA5ODIzMjQ4Li41NmJlNmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3R1bmVycy90ZGE5ODg3LmMKKysrIGIvZHJpdmVycy9tZWRpYS90dW5lcnMvdGRhOTg4Ny5jCkBAIC03MDcsMTEgKzcwNywzIEBACiBFWFBPUlRfU1lNQk9MX0dQTCh0ZGE5ODg3X2F0dGFjaCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3R1bmVycy90dW5lci1zaW1wbGUuYyBiL2RyaXZlcnMvbWVkaWEvdHVuZXJzL3R1bmVyLXNpbXBsZS5jCmluZGV4IGNhMjc0YzIuLjhlOWNlMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdHVuZXJzL3R1bmVyLXNpbXBsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdHVuZXJzL3R1bmVyLXNpbXBsZS5jCkBAIC0xMTQ4LDExICsxMTQ4LDMgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiU2ltcGxlIDQtY29udHJvbC1ieXRlcyBzdHlsZSB0dW5lciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlJhbHBoIE1ldHpsZXIsIEdlcmQgS25vcnIsIEd1bnRoZXIgTWF5ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9hdTA4MjgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdXNiL2F1MDgyOC9LY29uZmlnCmluZGV4IDFkNDEwYWMuLjc4Yjc5N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2F1MDgyOC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2F1MDgyOC9LY29uZmlnCkBAIC00LDcgKzQsNyBAQAogCWRlcGVuZHMgb24gSTJDICYmIElOUFVUICYmIERWQl9DT1JFICYmIFVTQgogCXNlbGVjdCBJMkNfQUxHT0JJVAogCXNlbGVjdCBWSURFT19UVkVFUFJPTQotCXNlbGVjdCBWSURFT0JVRl9WTUFMTE9DCisJc2VsZWN0IFZJREVPQlVGMl9WTUFMTE9DCiAJc2VsZWN0IERWQl9BVTg1MjJfRFRWIGlmIE1FRElBX1NVQkRSVl9BVVRPU0VMRUNUCiAJc2VsZWN0IE1FRElBX1RVTkVSX1hDNTAwMCBpZiBNRURJQV9TVUJEUlZfQVVUT1NFTEVDVAogCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA3VCBpZiBNRURJQV9TVUJEUlZfQVVUT1NFTEVDVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvYXUwODI4L2F1MDgyOC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS91c2IvYXUwODI4L2F1MDgyOC1jYXJkcy5jCmluZGV4IGRhODdmMWMuLmVkYzI3MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2F1MDgyOC9hdTA4MjgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9hdTA4MjgvYXUwODI4LWNhcmRzLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIHN0cnVjdCBhdTA4MjhfYm9hcmQgYXUwODI4X2JvYXJkc1tdID0gewogCVtBVTA4MjhfQk9BUkRfVU5LTk9XTl0gPSB7CiAJCS5uYW1lCT0gIlVua25vd24gYm9hcmQiLAotCQkudHVuZXJfdHlwZSA9IFVOU0VULAorCQkudHVuZXJfdHlwZSA9IC0xVSwKIAkJLnR1bmVyX2FkZHIgPSBBRERSX1VOU0VULAogCX0sCiAJW0FVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSODUwXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2F1MDgyOC9hdTA4MjgtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3VzYi9hdTA4MjgvYXUwODI4LXZiaS5jCmluZGV4IDkzMmQyNGYuLmY2NzI0N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2F1MDgyOC9hdTA4MjgtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvYXUwODI4L2F1MDgyOC12YmkuYwpAQCAtMjgsMTExICsyOCw2NyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdmJpYnVmcyA9IDU7Ci1tb2R1bGVfcGFyYW0odmJpYnVmcywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0ModmJpYnVmcywgIm51bWJlciBvZiB2YmkgYnVmZmVycywgcmFuZ2UgMi0zMiIpOwotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHZvaWQKLWZyZWVfYnVmZmVyKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCBhdTA4MjhfYnVmZmVyICpidWYpCitzdGF0aWMgaW50IHZiaV9xdWV1ZV9zZXR1cChzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgY29uc3Qgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQsCisJCQkgICB1bnNpZ25lZCBpbnQgKm5idWZmZXJzLCB1bnNpZ25lZCBpbnQgKm5wbGFuZXMsCisJCQkgICB1bnNpZ25lZCBpbnQgc2l6ZXNbXSwgdm9pZCAqYWxsb2NfY3R4c1tdKQogewotCXN0cnVjdCBhdTA4MjhfZmggICAgICpmaCAgPSB2cS0+cHJpdl9kYXRhOwotCXN0cnVjdCBhdTA4MjhfZGV2ICAgICpkZXYgPSBmaC0+ZGV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwotCWlmIChpbl9pbnRlcnJ1cHQoKSkKLQkJQlVHKCk7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOworCXVuc2lnbmVkIGxvbmcgaW1nX3NpemUgPSBkZXYtPnZiaV93aWR0aCAqIGRldi0+dmJpX2hlaWdodCAqIDI7CisJdW5zaWduZWQgbG9uZyBzaXplOwogCi0JLyogV2UgdXNlZCB0byB3YWl0IGZvciB0aGUgYnVmZmVyIHRvIGZpbmlzaCBoZXJlLCBidXQgdGhpcyBkaWRuJ3Qgd29yawotCSAgIGJlY2F1c2UsIGFzIHdlIHdlcmUga2VlcGluZyB0aGUgc3RhdGUgYXMgVklERU9CVUZfUVVFVUVELAotCSAgIHZpZGVvYnVmX3F1ZXVlX2NhbmNlbCBtYXJrZWQgaXQgYXMgZmluaXNoZWQgZm9yIHVzLgotCSAgIChBbHNvLCBpdCBjb3VsZCB3ZWRnZSBmb3JldmVyIGlmIHRoZSBoYXJkd2FyZSB3YXMgbWlzY29uZmlndXJlZC4pCi0KLQkgICBUaGlzIHNob3VsZCBiZSBzYWZlOyBieSB0aGUgdGltZSB3ZSBnZXQgaGVyZSwgdGhlIGJ1ZmZlciBpc24ndAotCSAgIHF1ZXVlZCBhbnltb3JlLiBJZiB3ZSBldmVyIHN0YXJ0IG1hcmtpbmcgdGhlIGJ1ZmZlcnMgYXMKLQkgICBWSURFT0JVRl9BQ1RJVkUsIGl0IHdvbid0IGJlLCB0aG91Z2guCi0JKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zbG9jaywgZmxhZ3MpOwotCWlmIChkZXYtPmlzb2NfY3RsLnZiaV9idWYgPT0gYnVmKQotCQlkZXYtPmlzb2NfY3RsLnZiaV9idWYgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKLQotCXZpZGVvYnVmX3ZtYWxsb2NfZnJlZSgmYnVmLT52Yik7Ci0JYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXZiaV9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHVuc2lnbmVkIGludCAqY291bnQsIHVuc2lnbmVkIGludCAqc2l6ZSkKLXsKLQlzdHJ1Y3QgYXUwODI4X2ZoICAgICAqZmggID0gcS0+cHJpdl9kYXRhOwotCXN0cnVjdCBhdTA4MjhfZGV2ICAgICpkZXYgPSBmaC0+ZGV2OwotCi0JKnNpemUgPSBkZXYtPnZiaV93aWR0aCAqIGRldi0+dmJpX2hlaWdodCAqIDI7Ci0KLQlpZiAoMCA9PSAqY291bnQpCi0JCSpjb3VudCA9IHZiaWJ1ZnM7Ci0JaWYgKCpjb3VudCA8IDIpCi0JCSpjb3VudCA9IDI7Ci0JaWYgKCpjb3VudCA+IDMyKQotCQkqY291bnQgPSAzMjsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdmJpX3ByZXBhcmUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiwKLQkgICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQotewotCXN0cnVjdCBhdTA4MjhfZmggICAgICpmaCAgPSBxLT5wcml2X2RhdGE7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgICAgKmRldiA9IGZoLT5kZXY7Ci0Jc3RydWN0IGF1MDgyOF9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGF1MDgyOF9idWZmZXIsIHZiKTsKLQlpbnQgICAgICAgICAgICAgICAgICByYyA9IDA7Ci0KLQlidWYtPnZiLnNpemUgPSBkZXYtPnZiaV93aWR0aCAqIGRldi0+dmJpX2hlaWdodCAqIDI7Ci0KLQlpZiAoMCAhPSBidWYtPnZiLmJhZGRyICAmJiAgYnVmLT52Yi5ic2l6ZSA8IGJ1Zi0+dmIuc2l6ZSkKKwlzaXplID0gZm10ID8gKGZtdC0+Zm10LnZiaS5zYW1wbGVzX3Blcl9saW5lICoKKwkJKGZtdC0+Zm10LnZiaS5jb3VudFswXSArIGZtdC0+Zm10LnZiaS5jb3VudFsxXSkpIDogaW1nX3NpemU7CisJaWYgKHNpemUgPCBpbWdfc2l6ZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlidWYtPnZiLndpZHRoICA9IGRldi0+dmJpX3dpZHRoOwotCWJ1Zi0+dmIuaGVpZ2h0ID0gZGV2LT52YmlfaGVpZ2h0OwotCWJ1Zi0+dmIuZmllbGQgID0gZmllbGQ7CisJKm5wbGFuZXMgPSAxOworCXNpemVzWzBdID0gc2l6ZTsKIAotCWlmIChWSURFT0JVRl9ORUVEU19JTklUID09IGJ1Zi0+dmIuc3RhdGUpIHsKLQkJcmMgPSB2aWRlb2J1Zl9pb2xvY2socSwgJmJ1Zi0+dmIsIE5VTEwpOwotCQlpZiAocmMgPCAwKQotCQkJZ290byBmYWlsOwotCX0KLQotCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9QUkVQQVJFRDsKIAlyZXR1cm4gMDsKK30KIAotZmFpbDoKLQlmcmVlX2J1ZmZlcihxLCBidWYpOwotCXJldHVybiByYzsKK3N0YXRpYyBpbnQgdmJpX2J1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikKK3sKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVlKTsKKwlzdHJ1Y3QgYXUwODI4X2J1ZmZlciAqYnVmID0gY29udGFpbmVyX29mKHZiLCBzdHJ1Y3QgYXUwODI4X2J1ZmZlciwgdmIpOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCXNpemUgPSBkZXYtPnZiaV93aWR0aCAqIGRldi0+dmJpX2hlaWdodCAqIDI7CisKKwlpZiAodmIyX3BsYW5lX3NpemUodmIsIDApIDwgc2l6ZSkgeworCQlwcl9lcnIoIiVzIGRhdGEgd2lsbCBub3QgZml0IGludG8gcGxhbmUgKCVsdSA8ICVsdSlcbiIsCisJCQlfX2Z1bmNfXywgdmIyX3BsYW5lX3NpemUodmIsIDApLCBzaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXZiMl9zZXRfcGxhbmVfcGF5bG9hZCgmYnVmLT52YiwgMCwgc2l6ZSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKLXZiaV9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKK3ZiaV9idWZmZXJfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQogewotCXN0cnVjdCBhdTA4MjhfYnVmZmVyICAgICpidWYgICAgID0gY29udGFpbmVyX29mKHZiLAotCQkJCQkJCXN0cnVjdCBhdTA4MjhfYnVmZmVyLAotCQkJCQkJCXZiKTsKLQlzdHJ1Y3QgYXUwODI4X2ZoICAgICAgICAqZmggICAgICA9IHZxLT5wcml2X2RhdGE7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgICAgICAgKmRldiAgICAgPSBmaC0+ZGV2OwotCXN0cnVjdCBhdTA4MjhfZG1hcXVldWUgICp2YmlxICAgID0gJmRldi0+dmJpcTsKLQotCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7Ci0JbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnZiaXEtPmFjdGl2ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZiaV9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCi17CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7CiAJc3RydWN0IGF1MDgyOF9idWZmZXIgKmJ1ZiA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGF1MDgyOF9idWZmZXIsIHZiKTsKLQlmcmVlX2J1ZmZlcihxLCBidWYpOworCXN0cnVjdCBhdTA4MjhfZG1hcXVldWUgKnZiaXEgPSAmZGV2LT52YmlxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisJYnVmLT5tZW0gPSB2YjJfcGxhbmVfdmFkZHIodmIsIDApOworCWJ1Zi0+bGVuZ3RoID0gdmIyX3BsYW5lX3NpemUodmIsIDApOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZidWYtPmxpc3QsICZ2YmlxLT5hY3RpdmUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKIH0KIAotc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBhdTA4MjhfdmJpX3FvcHMgPSB7Ci0JLmJ1Zl9zZXR1cCAgICA9IHZiaV9zZXR1cCwKLQkuYnVmX3ByZXBhcmUgID0gdmJpX3ByZXBhcmUsCi0JLmJ1Zl9xdWV1ZSAgICA9IHZiaV9xdWV1ZSwKLQkuYnVmX3JlbGVhc2UgID0gdmJpX3JlbGVhc2UsCitzdHJ1Y3QgdmIyX29wcyBhdTA4MjhfdmJpX3FvcHMgPSB7CisJLnF1ZXVlX3NldHVwICAgICA9IHZiaV9xdWV1ZV9zZXR1cCwKKwkuYnVmX3ByZXBhcmUgICAgID0gdmJpX2J1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUgICAgICAgPSB2YmlfYnVmZmVyX3F1ZXVlLAorCS5zdGFydF9zdHJlYW1pbmcgPSBhdTA4Mjhfc3RhcnRfYW5hbG9nX3N0cmVhbWluZywKKwkuc3RvcF9zdHJlYW1pbmcgID0gYXUwODI4X3N0b3BfdmJpX3N0cmVhbWluZywKKwkud2FpdF9wcmVwYXJlICAgID0gdmIyX29wc193YWl0X3ByZXBhcmUsCisJLndhaXRfZmluaXNoICAgICA9IHZiMl9vcHNfd2FpdF9maW5pc2gsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvYXUwODI4L2F1MDgyOC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS91c2IvYXUwODI4L2F1MDgyOC12aWRlby5jCmluZGV4IDVmMzM3YjExLi5hMjdjYjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9hdTA4MjgvYXUwODI4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvYXUwODI4L2F1MDgyOC12aWRlby5jCkBAIC0yMiw3ICsyMiw2IEBACiAKIC8qIERldmVsb3BlciBOb3RlczoKICAqCi0gKiBWQkkgc3VwcG9ydCBpcyBub3QgeWV0IHdvcmtpbmcKICAqIFRoZSBoYXJkd2FyZSBzY2FsZXIgc3VwcG9ydGVkIGlzIHVuaW1wbGVtZW50ZWQKICAqIEFDOTcgYXVkaW8gc3VwcG9ydCBpcyB1bmltcGxlbWVudGVkIChvbmx5IGkycyBhdWRpbyBtb2RlKQogICoKQEAgLTIxOSw5ICsyMTgsNiBAQAogCiAJYXUwODI4X2lzb2NkYmcoImF1MDgyODogY2FsbGVkIGF1MDgyOF9wcmVwYXJlX2lzb2NcbiIpOwogCi0JLyogRGUtYWxsb2NhdGVzIGFsbCBwZW5kaW5nIHN0dWZmICovCi0JYXUwODI4X3VuaW5pdF9pc29jKGRldik7Ci0KIAlkZXYtPmlzb2NfY3RsLmlzb2NfY29weSA9IGlzb2NfY29weTsKIAlkZXYtPmlzb2NfY3RsLm51bV9idWZzID0gbnVtX2J1ZnM7CiAKQEAgLTI4NSw4ICsyODEsNiBAQAogCQl9CiAJfQogCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmZG1hX3EtPndxKTsKLQogCS8qIHN1Ym1pdCB1cmJzIGFuZCBlbmFibGVzIElSUSAqLwogCWZvciAoaSA9IDA7IGkgPCBkZXYtPmlzb2NfY3RsLm51bV9idWZzOyBpKyspIHsKIAkJcmMgPSB1c2Jfc3VibWl0X3VyYihkZXYtPmlzb2NfY3RsLnVyYltpXSwgR0ZQX0FUT01JQyk7CkBAIC0zMDksMTYgKzMwMywxMiBAQAogCQkJCSAgc3RydWN0IGF1MDgyOF9idWZmZXIgKmJ1ZikKIHsKIAkvKiBBZHZpY2UgdGhhdCBidWZmZXIgd2FzIGZpbGxlZCAqLwotCWF1MDgyOF9pc29jZGJnKCJbJXAvJWRdIHdha2V1cFxuIiwgYnVmLCBidWYtPnZiLmkpOworCWF1MDgyOF9pc29jZGJnKCJbJXAvJWRdIHdha2V1cFxuIiwgYnVmLCBidWYtPnRvcF9maWVsZCk7CiAKLQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfRE9ORTsKLQlidWYtPnZiLmZpZWxkX2NvdW50Kys7Ci0JdjRsMl9nZXRfdGltZXN0YW1wKCZidWYtPnZiLnRzKTsKLQotCWRldi0+aXNvY19jdGwuYnVmID0gTlVMTDsKLQotCWxpc3RfZGVsKCZidWYtPnZiLnF1ZXVlKTsKLQl3YWtlX3VwKCZidWYtPnZiLmRvbmUpOworCWJ1Zi0+dmIudjRsMl9idWYuc2VxdWVuY2UgPSBkZXYtPmZyYW1lX2NvdW50Kys7CisJYnVmLT52Yi52NGwyX2J1Zi5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwl2NGwyX2dldF90aW1lc3RhbXAoJmJ1Zi0+dmIudjRsMl9idWYudGltZXN0YW1wKTsKKwl2YjJfYnVmZmVyX2RvbmUoJmJ1Zi0+dmIsIFZCMl9CVUZfU1RBVEVfRE9ORSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2YmlfYnVmZmVyX2ZpbGxlZChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LApAQCAtMzI2LDE2ICszMTYsMTIgQEAKIAkJCQkgICAgIHN0cnVjdCBhdTA4MjhfYnVmZmVyICpidWYpCiB7CiAJLyogQWR2aWNlIHRoYXQgYnVmZmVyIHdhcyBmaWxsZWQgKi8KLQlhdTA4MjhfaXNvY2RiZygiWyVwLyVkXSB3YWtldXBcbiIsIGJ1ZiwgYnVmLT52Yi5pKTsKKwlhdTA4MjhfaXNvY2RiZygiWyVwLyVkXSB3YWtldXBcbiIsIGJ1ZiwgYnVmLT50b3BfZmllbGQpOwogCi0JYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX0RPTkU7Ci0JYnVmLT52Yi5maWVsZF9jb3VudCsrOwotCXY0bDJfZ2V0X3RpbWVzdGFtcCgmYnVmLT52Yi50cyk7Ci0KLQlkZXYtPmlzb2NfY3RsLnZiaV9idWYgPSBOVUxMOwotCi0JbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOwotCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7CisJYnVmLT52Yi52NGwyX2J1Zi5zZXF1ZW5jZSA9IGRldi0+dmJpX2ZyYW1lX2NvdW50Kys7CisJYnVmLT52Yi52NGwyX2J1Zi5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwl2NGwyX2dldF90aW1lc3RhbXAoJmJ1Zi0+dmIudjRsMl9idWYudGltZXN0YW1wKTsKKwl2YjJfYnVmZmVyX2RvbmUoJmJ1Zi0+dmIsIFZCMl9CVUZfU1RBVEVfRE9ORSk7CiB9CiAKIC8qCkBAIC0zNTQsOCArMzQwLDggQEAKIAlpZiAobGVuID09IDApCiAJCXJldHVybjsKIAotCWlmIChkbWFfcS0+cG9zICsgbGVuID4gYnVmLT52Yi5zaXplKQotCQlsZW4gPSBidWYtPnZiLnNpemUgLSBkbWFfcS0+cG9zOworCWlmIChkbWFfcS0+cG9zICsgbGVuID4gYnVmLT5sZW5ndGgpCisJCWxlbiA9IGJ1Zi0+bGVuZ3RoIC0gZG1hX3EtPnBvczsKIAogCXN0YXJ0cmVhZCA9IHA7CiAJcmVtYWluID0gbGVuOwpAQCAtMzczLDExICszNTksMTEgQEAKIAlsZW5jb3B5ID0gYnl0ZXNwZXJsaW5lIC0gY3VycmxpbmVkb25lOwogCWxlbmNvcHkgPSBsZW5jb3B5ID4gcmVtYWluID8gcmVtYWluIDogbGVuY29weTsKIAotCWlmICgoY2hhciAqKXN0YXJ0d3JpdGUgKyBsZW5jb3B5ID4gKGNoYXIgKilvdXRwICsgYnVmLT52Yi5zaXplKSB7CisJaWYgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkgPiAoY2hhciAqKW91dHAgKyBidWYtPmxlbmd0aCkgewogCQlhdTA4MjhfaXNvY2RiZygiT3ZlcmZsb3cgb2YgJXppIGJ5dGVzIHBhc3QgYnVmZmVyIGVuZCAoMSlcbiIsCiAJCQkgICAgICAgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkpIC0KLQkJCSAgICAgICAoKGNoYXIgKilvdXRwICsgYnVmLT52Yi5zaXplKSk7Ci0JCXJlbWFpbiA9IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSAtIChjaGFyICopc3RhcnR3cml0ZTsKKwkJCSAgICAgICAoKGNoYXIgKilvdXRwICsgYnVmLT5sZW5ndGgpKTsKKwkJcmVtYWluID0gKGNoYXIgKilvdXRwICsgYnVmLT5sZW5ndGggLSAoY2hhciAqKXN0YXJ0d3JpdGU7CiAJCWxlbmNvcHkgPSByZW1haW47CiAJfQogCWlmIChsZW5jb3B5IDw9IDApCkBAIC0zOTUsMTEgKzM4MSwxMSBAQAogCQkJbGVuY29weSA9IGJ5dGVzcGVybGluZTsKIAogCQlpZiAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSA+IChjaGFyICopb3V0cCArCi0JCSAgICBidWYtPnZiLnNpemUpIHsKKwkJICAgIGJ1Zi0+bGVuZ3RoKSB7CiAJCQlhdTA4MjhfaXNvY2RiZygiT3ZlcmZsb3cgJXppIGJ5dGVzIHBhc3QgYnVmIGVuZCAoMilcbiIsCiAJCQkJICAgICAgICgoY2hhciAqKXN0YXJ0d3JpdGUgKyBsZW5jb3B5KSAtCi0JCQkJICAgICAgICgoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUpKTsKLQkJCWxlbmNvcHkgPSByZW1haW4gPSAoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUgLQorCQkJCSAgICAgICAoKGNoYXIgKilvdXRwICsgYnVmLT5sZW5ndGgpKTsKKwkJCWxlbmNvcHkgPSByZW1haW4gPSAoY2hhciAqKW91dHAgKyBidWYtPmxlbmd0aCAtCiAJCQkJCSAgIChjaGFyICopc3RhcnR3cml0ZTsKIAkJfQogCQlpZiAobGVuY29weSA8PSAwKQpAQCAtNDM1LDcgKzQyMSwxMSBAQAogCX0KIAogCS8qIEdldCB0aGUgbmV4dCBidWZmZXIgKi8KLQkqYnVmID0gbGlzdF9lbnRyeShkbWFfcS0+YWN0aXZlLm5leHQsIHN0cnVjdCBhdTA4MjhfYnVmZmVyLCB2Yi5xdWV1ZSk7CisJKmJ1ZiA9IGxpc3RfZW50cnkoZG1hX3EtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgYXUwODI4X2J1ZmZlciwgbGlzdCk7CisJLyogQ2xlYW5zIHVwIGJ1ZmZlciAtIFVzZWZ1bCBmb3IgdGVzdGluZyBmb3IgZnJhbWUvVVJCIGxvc3MgKi8KKwlsaXN0X2RlbCgmKCpidWYpLT5saXN0KTsKKwlkbWFfcS0+cG9zID0gMDsKKwkoKmJ1ZiktPnZiX2J1ZiA9ICgqYnVmKS0+bWVtOwogCWRldi0+aXNvY19jdGwuYnVmID0gKmJ1ZjsKIAogCXJldHVybjsKQEAgLTQ3Myw4ICs0NjMsOCBAQAogCiAJYnl0ZXNwZXJsaW5lID0gZGV2LT52Ymlfd2lkdGg7CiAKLQlpZiAoZG1hX3EtPnBvcyArIGxlbiA+IGJ1Zi0+dmIuc2l6ZSkKLQkJbGVuID0gYnVmLT52Yi5zaXplIC0gZG1hX3EtPnBvczsKKwlpZiAoZG1hX3EtPnBvcyArIGxlbiA+IGJ1Zi0+bGVuZ3RoKQorCQlsZW4gPSBidWYtPmxlbmd0aCAtIGRtYV9xLT5wb3M7CiAKIAlzdGFydHJlYWQgPSBwOwogCXN0YXJ0d3JpdGUgPSBvdXRwICsgKGRtYV9xLT5wb3MgLyAyKTsKQEAgLTQ5Nyw3ICs0ODcsNiBAQAogCQkJCSAgICBzdHJ1Y3QgYXUwODI4X2J1ZmZlciAqKmJ1ZikKIHsKIAlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gY29udGFpbmVyX29mKGRtYV9xLCBzdHJ1Y3QgYXUwODI4X2RldiwgdmJpcSk7Ci0JY2hhciAqb3V0cDsKIAogCWlmIChsaXN0X2VtcHR5KCZkbWFfcS0+YWN0aXZlKSkgewogCQlhdTA4MjhfaXNvY2RiZygiTm8gYWN0aXZlIHF1ZXVlIHRvIHNlcnZlXG4iKTsKQEAgLTUwNywxMyArNDk2LDEyIEBACiAJfQogCiAJLyogR2V0IHRoZSBuZXh0IGJ1ZmZlciAqLwotCSpidWYgPSBsaXN0X2VudHJ5KGRtYV9xLT5hY3RpdmUubmV4dCwgc3RydWN0IGF1MDgyOF9idWZmZXIsIHZiLnF1ZXVlKTsKKwkqYnVmID0gbGlzdF9lbnRyeShkbWFfcS0+YWN0aXZlLm5leHQsIHN0cnVjdCBhdTA4MjhfYnVmZmVyLCBsaXN0KTsKIAkvKiBDbGVhbnMgdXAgYnVmZmVyIC0gVXNlZnVsIGZvciB0ZXN0aW5nIGZvciBmcmFtZS9VUkIgbG9zcyAqLwotCW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKCYoKmJ1ZiktPnZiKTsKLQltZW1zZXQob3V0cCwgMHgwMCwgKCpidWYpLT52Yi5zaXplKTsKLQorCWxpc3RfZGVsKCYoKmJ1ZiktPmxpc3QpOworCWRtYV9xLT5wb3MgPSAwOworCSgqYnVmKS0+dmJfYnVmID0gKCpidWYpLT5tZW07CiAJZGV2LT5pc29jX2N0bC52YmlfYnVmID0gKmJ1ZjsKLQogCXJldHVybjsKIH0KIApAQCAtNTQ5LDExICs1MzcsMTEgQEAKIAogCWJ1ZiA9IGRldi0+aXNvY19jdGwuYnVmOwogCWlmIChidWYgIT0gTlVMTCkKLQkJb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJmJ1Zi0+dmIpOworCQlvdXRwID0gdmIyX3BsYW5lX3ZhZGRyKCZidWYtPnZiLCAwKTsKIAogCXZiaV9idWYgPSBkZXYtPmlzb2NfY3RsLnZiaV9idWY7CiAJaWYgKHZiaV9idWYgIT0gTlVMTCkKLQkJdmJpb3V0cCA9IHZpZGVvYnVmX3RvX3ZtYWxsb2MoJnZiaV9idWYtPnZiKTsKKwkJdmJpb3V0cCA9IHZiMl9wbGFuZV92YWRkcigmdmJpX2J1Zi0+dmIsIDApOwogCiAJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgewogCQlpbnQgc3RhdHVzID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXM7CkBAIC01OTMsOCArNTgxLDggQEAKIAkJCQlpZiAodmJpX2J1ZiA9PSBOVUxMKQogCQkJCQl2YmlvdXRwID0gTlVMTDsKIAkJCQllbHNlCi0JCQkJCXZiaW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKAotCQkJCQkJJnZiaV9idWYtPnZiKTsKKwkJCQkJdmJpb3V0cCA9IHZiMl9wbGFuZV92YWRkcigKKwkJCQkJCSZ2YmlfYnVmLT52YiwgMCk7CiAKIAkJCQkvKiBWaWRlbyAqLwogCQkJCWlmIChidWYgIT0gTlVMTCkKQEAgLTYwMyw3ICs1OTEsNyBAQAogCQkJCWlmIChidWYgPT0gTlVMTCkKIAkJCQkJb3V0cCA9IE5VTEw7CiAJCQkJZWxzZQotCQkJCQlvdXRwID0gdmlkZW9idWZfdG9fdm1hbGxvYygmYnVmLT52Yik7CisJCQkJCW91dHAgPSB2YjJfcGxhbmVfdmFkZHIoJmJ1Zi0+dmIsIDApOwogCiAJCQkJLyogQXMgbG9uZyBhcyBpc29jIHRyYWZmaWMgaXMgYXJyaXZpbmcsIGtlZXAKIAkJCQkgICByZXNldHRpbmcgdGhlIHRpbWVyICovCkBAIC02NTcsMTMwICs2NDUsNTkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQKLWJ1ZmZlcl9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgKmNvdW50LAotCSAgICAgdW5zaWduZWQgaW50ICpzaXplKQorc3RhdGljIGludCBxdWV1ZV9zZXR1cChzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgY29uc3Qgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgKm5idWZmZXJzLCB1bnNpZ25lZCBpbnQgKm5wbGFuZXMsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZXNbXSwgdm9pZCAqYWxsb2NfY3R4c1tdKQogewotCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gdnEtPnByaXZfZGF0YTsKLQkqc2l6ZSA9IChmaC0+ZGV2LT53aWR0aCAqIGZoLT5kZXYtPmhlaWdodCAqIDE2ICsgNykgPj4gMzsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gdmIyX2dldF9kcnZfcHJpdih2cSk7CisJdW5zaWduZWQgbG9uZyBpbWdfc2l6ZSA9IGRldi0+aGVpZ2h0ICogZGV2LT5ieXRlc3BlcmxpbmU7CisJdW5zaWduZWQgbG9uZyBzaXplOwogCi0JaWYgKDAgPT0gKmNvdW50KQotCQkqY291bnQgPSBBVTA4MjhfREVGX0JVRjsKLQotCWlmICgqY291bnQgPCBBVTA4MjhfTUlOX0JVRikKLQkJKmNvdW50ID0gQVUwODI4X01JTl9CVUY7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRoaXMgaXMgY2FsbGVkICp3aXRob3V0KiBkZXYtPnNsb2NrIGhlbGQ7IHBsZWFzZSBrZWVwIGl0IHRoYXQgd2F5ICovCi1zdGF0aWMgdm9pZCBmcmVlX2J1ZmZlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgYXUwODI4X2J1ZmZlciAqYnVmKQotewotCXN0cnVjdCBhdTA4MjhfZmggICAgICpmaCAgPSB2cS0+cHJpdl9kYXRhOwotCXN0cnVjdCBhdTA4MjhfZGV2ICAgICpkZXYgPSBmaC0+ZGV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwotCWlmIChpbl9pbnRlcnJ1cHQoKSkKLQkJQlVHKCk7Ci0KLQkvKiBXZSB1c2VkIHRvIHdhaXQgZm9yIHRoZSBidWZmZXIgdG8gZmluaXNoIGhlcmUsIGJ1dCB0aGlzIGRpZG4ndCB3b3JrCi0JICAgYmVjYXVzZSwgYXMgd2Ugd2VyZSBrZWVwaW5nIHRoZSBzdGF0ZSBhcyBWSURFT0JVRl9RVUVVRUQsCi0JICAgdmlkZW9idWZfcXVldWVfY2FuY2VsIG1hcmtlZCBpdCBhcyBmaW5pc2hlZCBmb3IgdXMuCi0JICAgKEFsc28sIGl0IGNvdWxkIHdlZGdlIGZvcmV2ZXIgaWYgdGhlIGhhcmR3YXJlIHdhcyBtaXNjb25maWd1cmVkLikKLQotCSAgIFRoaXMgc2hvdWxkIGJlIHNhZmU7IGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLCB0aGUgYnVmZmVyIGlzbid0Ci0JICAgcXVldWVkIGFueW1vcmUuIElmIHdlIGV2ZXIgc3RhcnQgbWFya2luZyB0aGUgYnVmZmVycyBhcwotCSAgIFZJREVPQlVGX0FDVElWRSwgaXQgd29uJ3QgYmUsIHRob3VnaC4KLQkqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLCBmbGFncyk7Ci0JaWYgKGRldi0+aXNvY19jdGwuYnVmID09IGJ1ZikKLQkJZGV2LT5pc29jX2N0bC5idWYgPSBOVUxMOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKLQotCXZpZGVvYnVmX3ZtYWxsb2NfZnJlZSgmYnVmLT52Yik7Ci0JYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWJ1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAotCQkJCQkJZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQotewotCXN0cnVjdCBhdTA4MjhfZmggICAgICpmaCAgPSB2cS0+cHJpdl9kYXRhOwotCXN0cnVjdCBhdTA4MjhfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBhdTA4MjhfYnVmZmVyLCB2Yik7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgICAgKmRldiA9IGZoLT5kZXY7Ci0JaW50ICAgICAgICAgICAgICAgICAgcmMgPSAwLCB1cmJfaW5pdCA9IDA7Ci0KLQlidWYtPnZiLnNpemUgPSAoZmgtPmRldi0+d2lkdGggKiBmaC0+ZGV2LT5oZWlnaHQgKiAxNiArIDcpID4+IDM7Ci0KLQlpZiAoMCAhPSBidWYtPnZiLmJhZGRyICAmJiAgYnVmLT52Yi5ic2l6ZSA8IGJ1Zi0+dmIuc2l6ZSkKKwlzaXplID0gZm10ID8gZm10LT5mbXQucGl4LnNpemVpbWFnZSA6IGltZ19zaXplOworCWlmIChzaXplIDwgaW1nX3NpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYnVmLT52Yi53aWR0aCAgPSBkZXYtPndpZHRoOwotCWJ1Zi0+dmIuaGVpZ2h0ID0gZGV2LT5oZWlnaHQ7Ci0JYnVmLT52Yi5maWVsZCAgPSBmaWVsZDsKKwkqbnBsYW5lcyA9IDE7CisJc2l6ZXNbMF0gPSBzaXplOwogCi0JaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gYnVmLT52Yi5zdGF0ZSkgewotCQlyYyA9IHZpZGVvYnVmX2lvbG9jayh2cSwgJmJ1Zi0+dmIsIE5VTEwpOwotCQlpZiAocmMgPCAwKSB7Ci0JCQlwcl9pbmZvKCJ2aWRlb2J1Zl9pb2xvY2sgZmFpbGVkXG4iKTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCX0KLQotCWlmICghZGV2LT5pc29jX2N0bC5udW1fYnVmcykKLQkJdXJiX2luaXQgPSAxOwotCi0JaWYgKHVyYl9pbml0KSB7Ci0JCXJjID0gYXUwODI4X2luaXRfaXNvYyhkZXYsIEFVMDgyOF9JU09fUEFDS0VUU19QRVJfVVJCLAotCQkJCSAgICAgIEFVMDgyOF9NQVhfSVNPX0JVRlMsIGRldi0+bWF4X3BrdF9zaXplLAotCQkJCSAgICAgIGF1MDgyOF9pc29jX2NvcHkpOwotCQlpZiAocmMgPCAwKSB7Ci0JCQlwcl9pbmZvKCJhdTA4MjhfaW5pdF9pc29jIGZhaWxlZFxuIik7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQl9Ci0KLQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7CiAJcmV0dXJuIDA7Cit9CiAKLWZhaWw6Ci0JZnJlZV9idWZmZXIodnEsIGJ1Zik7Ci0JcmV0dXJuIHJjOworc3RhdGljIGludAorYnVmZmVyX3ByZXBhcmUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBhdTA4MjhfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBhdTA4MjhfYnVmZmVyLCB2Yik7CisJc3RydWN0IGF1MDgyOF9kZXYgICAgKmRldiA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7CisKKwlidWYtPmxlbmd0aCA9IGRldi0+aGVpZ2h0ICogZGV2LT5ieXRlc3BlcmxpbmU7CisKKwlpZiAodmIyX3BsYW5lX3NpemUodmIsIDApIDwgYnVmLT5sZW5ndGgpIHsKKwkJcHJfZXJyKCIlcyBkYXRhIHdpbGwgbm90IGZpdCBpbnRvIHBsYW5lICglbHUgPCAlbHUpXG4iLAorCQkJX19mdW5jX18sIHZiMl9wbGFuZV9zaXplKHZiLCAwKSwgYnVmLT5sZW5ndGgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdmIyX3NldF9wbGFuZV9wYXlsb2FkKCZidWYtPnZiLCAwLCBidWYtPmxlbmd0aCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkCi1idWZmZXJfcXVldWUoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCitidWZmZXJfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQogewogCXN0cnVjdCBhdTA4MjhfYnVmZmVyICAgICpidWYgICAgID0gY29udGFpbmVyX29mKHZiLAogCQkJCQkJCXN0cnVjdCBhdTA4MjhfYnVmZmVyLAogCQkJCQkJCXZiKTsKLQlzdHJ1Y3QgYXUwODI4X2ZoICAgICAgICAqZmggICAgICA9IHZxLT5wcml2X2RhdGE7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgICAgICAgKmRldiAgICAgPSBmaC0+ZGV2OworCXN0cnVjdCBhdTA4MjhfZGV2ICAgICAgICpkZXYgICAgID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVlKTsKIAlzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICAqdmlkcSAgICA9ICZkZXYtPnZpZHE7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKLQlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUVVFVUVEOwotCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+dmIucXVldWUsICZ2aWRxLT5hY3RpdmUpOworCWJ1Zi0+bWVtID0gdmIyX3BsYW5lX3ZhZGRyKHZiLCAwKTsKKwlidWYtPmxlbmd0aCA9IHZiMl9wbGFuZV9zaXplKHZiLCAwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmYnVmLT5saXN0LCAmdmlkcS0+YWN0aXZlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNsb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGJ1ZmZlcl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCi0JCQkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCi17Ci0Jc3RydWN0IGF1MDgyOF9idWZmZXIgICAqYnVmICA9IGNvbnRhaW5lcl9vZih2YiwKLQkJCQkJCSAgICBzdHJ1Y3QgYXUwODI4X2J1ZmZlciwKLQkJCQkJCSAgICB2Yik7Ci0KLQlmcmVlX2J1ZmZlcih2cSwgYnVmKTsKLX0KLQotc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgYXUwODI4X3ZpZGVvX3FvcHMgPSB7Ci0JLmJ1Zl9zZXR1cCAgICAgID0gYnVmZmVyX3NldHVwLAotCS5idWZfcHJlcGFyZSAgICA9IGJ1ZmZlcl9wcmVwYXJlLAotCS5idWZfcXVldWUgICAgICA9IGJ1ZmZlcl9xdWV1ZSwKLQkuYnVmX3JlbGVhc2UgICAgPSBidWZmZXJfcmVsZWFzZSwKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgVjRMMiBpbnRlcmZhY2UKLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KIHN0YXRpYyBpbnQgYXUwODI4X2kyc19pbml0KHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpCiB7CiAJLyogRW5hYmxlIGkycyBtb2RlICovCkBAIC04MjksNyArNzQ2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGF1MDgyOF9hbmFsb2dfc3RyZWFtX2Rpc2FibGUoc3RydWN0IGF1MDgyOF9kZXYgKmQpCitzdGF0aWMgaW50IGF1MDgyOF9hbmFsb2dfc3RyZWFtX2Rpc2FibGUoc3RydWN0IGF1MDgyOF9kZXYgKmQpCiB7CiAJZHByaW50aygxLCAiYXUwODI4X2FuYWxvZ19zdHJlYW1fZGlzYWJsZSBjYWxsZWRcbiIpOwogCWF1MDgyOF93cml0ZXJlZyhkLCBBVTA4MjhfU0VOU09SQ1RSTF8xMDAsIDB4MCk7CkBAIC04NjIsMTMgKzc3OSwxMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGF1MDgyOF9zdGFydF9hbmFsb2dfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOworCWludCByYyA9IDA7CisKKwlkcHJpbnRrKDEsICJhdTA4Mjhfc3RhcnRfYW5hbG9nX3N0cmVhbWluZyBjYWxsZWQgJWRcbiIsCisJCWRldi0+c3RyZWFtaW5nX3VzZXJzKTsKKworCWlmICh2cS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCWRldi0+ZnJhbWVfY291bnQgPSAwOworCWVsc2UKKwkJZGV2LT52YmlfZnJhbWVfY291bnQgPSAwOworCisJaWYgKGRldi0+c3RyZWFtaW5nX3VzZXJzID09IDApIHsKKwkJLyogSWYgd2Ugd2VyZSBkb2luZyBhYzk3IGluc3RlYWQgb2YgaTJzLCBpdCB3b3VsZCBnbyBoZXJlLi4uKi8KKwkJYXUwODI4X2kyc19pbml0KGRldik7CisJCXJjID0gYXUwODI4X2luaXRfaXNvYyhkZXYsIEFVMDgyOF9JU09fUEFDS0VUU19QRVJfVVJCLAorCQkJCSAgIEFVMDgyOF9NQVhfSVNPX0JVRlMsIGRldi0+bWF4X3BrdF9zaXplLAorCQkJCSAgIGF1MDgyOF9pc29jX2NvcHkpOworCQlpZiAocmMgPCAwKSB7CisJCQlwcl9pbmZvKCJhdTA4MjhfaW5pdF9pc29jIGZhaWxlZFxuIik7CisJCQlyZXR1cm4gcmM7CisJCX0KKworCQlpZiAodnEtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdmlkZW8sCisJCQkJCQlzX3N0cmVhbSwgMSk7CisJCQlkZXYtPnZpZF90aW1lb3V0X3J1bm5pbmcgPSAxOworCQkJbW9kX3RpbWVyKCZkZXYtPnZpZF90aW1lb3V0LCBqaWZmaWVzICsgKEhaIC8gMTApKTsKKwkJfSBlbHNlIGlmICh2cS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7CisJCQlkZXYtPnZiaV90aW1lb3V0X3J1bm5pbmcgPSAxOworCQkJbW9kX3RpbWVyKCZkZXYtPnZiaV90aW1lb3V0LCBqaWZmaWVzICsgKEhaIC8gMTApKTsKKwkJfQorCX0KKwlkZXYtPnN0cmVhbWluZ191c2VycysrOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgYXUwODI4X3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxKQoreworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsKKwlzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICp2aWRxID0gJmRldi0+dmlkcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCWRwcmludGsoMSwgImF1MDgyOF9zdG9wX3N0cmVhbWluZyBjYWxsZWQgJWRcbiIsIGRldi0+c3RyZWFtaW5nX3VzZXJzKTsKKworCWlmIChkZXYtPnN0cmVhbWluZ191c2Vycy0tID09IDEpCisJCWF1MDgyOF91bmluaXRfaXNvYyhkZXYpOworCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIHZpZGVvLCBzX3N0cmVhbSwgMCk7CisJZGV2LT52aWRfdGltZW91dF9ydW5uaW5nID0gMDsKKwlkZWxfdGltZXJfc3luYygmZGV2LT52aWRfdGltZW91dCk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zbG9jaywgZmxhZ3MpOworCWlmIChkZXYtPmlzb2NfY3RsLmJ1ZiAhPSBOVUxMKSB7CisJCXZiMl9idWZmZXJfZG9uZSgmZGV2LT5pc29jX2N0bC5idWYtPnZiLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsKKwkJZGV2LT5pc29jX2N0bC5idWYgPSBOVUxMOworCX0KKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnZpZHEtPmFjdGl2ZSkpIHsKKwkJc3RydWN0IGF1MDgyOF9idWZmZXIgKmJ1ZjsKKworCQlidWYgPSBsaXN0X2VudHJ5KHZpZHEtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgYXUwODI4X2J1ZmZlciwgbGlzdCk7CisJCXZiMl9idWZmZXJfZG9uZSgmYnVmLT52YiwgVkIyX0JVRl9TVEFURV9FUlJPUik7CisJCWxpc3RfZGVsKCZidWYtPmxpc3QpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNsb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgYXUwODI4X3N0b3BfdmJpX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gdmIyX2dldF9kcnZfcHJpdih2cSk7CisJc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSAqdmJpcSA9ICZkZXYtPnZiaXE7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwlkcHJpbnRrKDEsICJhdTA4Mjhfc3RvcF92Ymlfc3RyZWFtaW5nIGNhbGxlZCAlZFxuIiwKKwkJZGV2LT5zdHJlYW1pbmdfdXNlcnMpOworCisJaWYgKGRldi0+c3RyZWFtaW5nX3VzZXJzLS0gPT0gMSkKKwkJYXUwODI4X3VuaW5pdF9pc29jKGRldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zbG9jaywgZmxhZ3MpOworCWlmIChkZXYtPmlzb2NfY3RsLnZiaV9idWYgIT0gTlVMTCkgeworCQl2YjJfYnVmZmVyX2RvbmUoJmRldi0+aXNvY19jdGwudmJpX2J1Zi0+dmIsCisJCQkJVkIyX0JVRl9TVEFURV9FUlJPUik7CisJCWRldi0+aXNvY19jdGwudmJpX2J1ZiA9IE5VTEw7CisJfQorCXdoaWxlICghbGlzdF9lbXB0eSgmdmJpcS0+YWN0aXZlKSkgeworCQlzdHJ1Y3QgYXUwODI4X2J1ZmZlciAqYnVmOworCisJCWJ1ZiA9IGxpc3RfZW50cnkodmJpcS0+YWN0aXZlLm5leHQsIHN0cnVjdCBhdTA4MjhfYnVmZmVyLCBsaXN0KTsKKwkJbGlzdF9kZWwoJmJ1Zi0+bGlzdCk7CisJCXZiMl9idWZmZXJfZG9uZSgmYnVmLT52YiwgVkIyX0JVRl9TVEFURV9FUlJPUik7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKKworCWRldi0+dmJpX3RpbWVvdXRfcnVubmluZyA9IDA7CisJZGVsX3RpbWVyX3N5bmMoJmRldi0+dmJpX3RpbWVvdXQpOworfQorCitzdGF0aWMgc3RydWN0IHZiMl9vcHMgYXUwODI4X3ZpZGVvX3FvcHMgPSB7CisJLnF1ZXVlX3NldHVwICAgICA9IHF1ZXVlX3NldHVwLAorCS5idWZfcHJlcGFyZSAgICAgPSBidWZmZXJfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlICAgICAgID0gYnVmZmVyX3F1ZXVlLAorCS5zdGFydF9zdHJlYW1pbmcgPSBhdTA4Mjhfc3RhcnRfYW5hbG9nX3N0cmVhbWluZywKKwkuc3RvcF9zdHJlYW1pbmcgID0gYXUwODI4X3N0b3Bfc3RyZWFtaW5nLAorCS53YWl0X3ByZXBhcmUgICAgPSB2YjJfb3BzX3dhaXRfcHJlcGFyZSwKKwkud2FpdF9maW5pc2ggICAgID0gdmIyX29wc193YWl0X2ZpbmlzaCwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVjRMMiBpbnRlcmZhY2UKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKgotICogYXUwODI4X3JlbGVhc2VfcmVzb3VyY2VzCisgKiBhdTA4MjhfYW5hbG9nX3VucmVnaXN0ZXIKICAqIHVucmVnaXN0ZXIgdjRsMiBkZXZpY2VzCiAgKi8KIHZvaWQgYXUwODI4X2FuYWxvZ191bnJlZ2lzdGVyKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpCiB7Ci0JZHByaW50aygxLCAiYXUwODI4X3JlbGVhc2VfcmVzb3VyY2VzIGNhbGxlZFxuIik7CisJZHByaW50aygxLCAiYXUwODI4X2FuYWxvZ191bnJlZ2lzdGVyIGNhbGxlZFxuIik7CiAJbXV0ZXhfbG9jaygmYXUwODI4X3N5c2ZzX2xvY2spOwogCiAJaWYgKGRldi0+dmRldikKQEAgLTg3OSw2MyArOTA4LDYgQEAKIAltdXRleF91bmxvY2soJmF1MDgyOF9zeXNmc19sb2NrKTsKIH0KIAotCi0vKiBVc2FnZSBsb2NrIGNoZWNrIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCByZXNfZ2V0KHN0cnVjdCBhdTA4MjhfZmggKmZoLCB1bnNpZ25lZCBpbnQgYml0KQotewotCXN0cnVjdCBhdTA4MjhfZGV2ICAgICpkZXYgPSBmaC0+ZGV2OwotCi0JaWYgKGZoLT5yZXNvdXJjZXMgJiBiaXQpCi0JCS8qIGhhdmUgaXQgYWxyZWFkeSBhbGxvY2F0ZWQgKi8KLQkJcmV0dXJuIDE7Ci0KLQkvKiBpcyBpdCBmcmVlPyAqLwotCWlmIChkZXYtPnJlc291cmNlcyAmIGJpdCkgewotCQkvKiBubywgc29tZW9uZSBlbHNlIHVzZXMgaXQgKi8KLQkJcmV0dXJuIDA7Ci0JfQotCS8qIGl0J3MgZnJlZSwgZ3JhYiBpdCAqLwotCWZoLT5yZXNvdXJjZXMgIHw9IGJpdDsKLQlkZXYtPnJlc291cmNlcyB8PSBiaXQ7Ci0JZHByaW50aygxLCAicmVzOiBnZXQgJWRcbiIsIGJpdCk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCByZXNfY2hlY2soc3RydWN0IGF1MDgyOF9maCAqZmgsIHVuc2lnbmVkIGludCBiaXQpCi17Ci0JcmV0dXJuIGZoLT5yZXNvdXJjZXMgJiBiaXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcmVzX2xvY2tlZChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgYml0KQotewotCXJldHVybiBkZXYtPnJlc291cmNlcyAmIGJpdDsKLX0KLQotc3RhdGljIHZvaWQgcmVzX2ZyZWUoc3RydWN0IGF1MDgyOF9maCAqZmgsIHVuc2lnbmVkIGludCBiaXRzKQotewotCXN0cnVjdCBhdTA4MjhfZGV2ICAgICpkZXYgPSBmaC0+ZGV2OwotCi0JQlVHX09OKChmaC0+cmVzb3VyY2VzICYgYml0cykgIT0gYml0cyk7Ci0KLQlmaC0+cmVzb3VyY2VzICAmPSB+Yml0czsKLQlkZXYtPnJlc291cmNlcyAmPSB+Yml0czsKLQlkcHJpbnRrKDEsICJyZXM6IHB1dCAlZFxuIiwgYml0cyk7Ci19Ci0KLXN0YXRpYyBpbnQgZ2V0X3Jlc3NvdXJjZShzdHJ1Y3QgYXUwODI4X2ZoICpmaCkKLXsKLQlzd2l0Y2ggKGZoLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCXJldHVybiBBVTA4MjhfUkVTT1VSQ0VfVklERU87Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgotCQlyZXR1cm4gQVUwODI4X1JFU09VUkNFX1ZCSTsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQkJcmV0dXJuIDA7Ci0JfQotfQotCiAvKiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB2aWRlbyBmcmFtZXMgY29udGludWUgdG8gYmUgZGVsaXZlcmVkIGV2ZW4gaWYKICAgIHRoZSBJVFUtNjU2IGlucHV0IGlzbid0IHJlY2VpdmluZyBhbnkgZGF0YSAodGhlcmVieSBwcmV2ZW50aW5nIGFwcGxpY2F0aW9ucwogICAgc3VjaCBhcyB0dnRpbWUgZnJvbSBoYW5naW5nKSAqLwpAQCAtOTUxLDggKzkyMyw4IEBACiAKIAlidWYgPSBkZXYtPmlzb2NfY3RsLmJ1ZjsKIAlpZiAoYnVmICE9IE5VTEwpIHsKLQkJdmlkX2RhdGEgPSB2aWRlb2J1Zl90b192bWFsbG9jKCZidWYtPnZiKTsKLQkJbWVtc2V0KHZpZF9kYXRhLCAweDAwLCBidWYtPnZiLnNpemUpOyAvKiBCbGFuayBncmVlbiBmcmFtZSAqLworCQl2aWRfZGF0YSA9IHZiMl9wbGFuZV92YWRkcigmYnVmLT52YiwgMCk7CisJCW1lbXNldCh2aWRfZGF0YSwgMHgwMCwgYnVmLT5sZW5ndGgpOyAvKiBCbGFuayBncmVlbiBmcmFtZSAqLwogCQlidWZmZXJfZmlsbGVkKGRldiwgZG1hX3EsIGJ1Zik7CiAJfQogCWdldF9uZXh0X2J1ZihkbWFfcSwgJmJ1Zik7CkBAIC05NzUsOCArOTQ3LDggQEAKIAogCWJ1ZiA9IGRldi0+aXNvY19jdGwudmJpX2J1ZjsKIAlpZiAoYnVmICE9IE5VTEwpIHsKLQkJdmJpX2RhdGEgPSB2aWRlb2J1Zl90b192bWFsbG9jKCZidWYtPnZiKTsKLQkJbWVtc2V0KHZiaV9kYXRhLCAweDAwLCBidWYtPnZiLnNpemUpOworCQl2YmlfZGF0YSA9IHZiMl9wbGFuZV92YWRkcigmYnVmLT52YiwgMCk7CisJCW1lbXNldCh2YmlfZGF0YSwgMHgwMCwgYnVmLT5sZW5ndGgpOwogCQl2YmlfYnVmZmVyX2ZpbGxlZChkZXYsIGRtYV9xLCBidWYpOwogCX0KIAl2YmlfZ2V0X25leHRfYnVmKGRtYV9xLCAmYnVmKTsKQEAgLTk4NiwxMDUgKzk1OCw2NSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKIH0KIAotCiBzdGF0aWMgaW50IGF1MDgyOF92NGwyX29wZW4oc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlscCk7CiAJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlscCk7Ci0Jc3RydWN0IGF1MDgyOF9maCAqZmg7Ci0JaW50IHR5cGU7CisJaW50IHJldDsKIAotCXN3aXRjaCAodmRldi0+dmZsX3R5cGUpIHsKLQljYXNlIFZGTF9UWVBFX0dSQUJCRVI6Ci0JCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCWJyZWFrOwotCWNhc2UgVkZMX1RZUEVfVkJJOgotCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWRwcmludGsoMSwKKwkJIiVzIGNhbGxlZCBzdGRfc2V0ICVkIGRldl9zdGF0ZSAlZCBzdHJlYW0gdXNlcnMgJWQgdXNlcnMgJWRcbiIsCisJCV9fZnVuY19fLCBkZXYtPnN0ZF9zZXRfaW5fdHVuZXJfY29yZSwgZGV2LT5kZXZfc3RhdGUsCisJCWRldi0+c3RyZWFtaW5nX3VzZXJzLCBkZXYtPnVzZXJzKTsKIAotCWZoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF1MDgyOF9maCksIEdGUF9LRVJORUwpOwotCWlmIChOVUxMID09IGZoKSB7Ci0JCWRwcmludGsoMSwgIkZhaWxlZCBhbGxvY2F0ZSBhdTA4MjhfZmggc3RydWN0IVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWZoLT50eXBlID0gdHlwZTsKLQlmaC0+ZGV2ID0gZGV2OwotCXY0bDJfZmhfaW5pdCgmZmgtPmZoLCB2ZGV2KTsKLQlmaWxwLT5wcml2YXRlX2RhdGEgPSBmaDsKLQotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+bG9jaykpIHsKLQkJa2ZyZWUoZmgpOworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldi0+bG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CisKKwlyZXQgPSB2NGwyX2ZoX29wZW4oZmlscCk7CisJaWYgKHJldCkgeworCQlhdTA4MjhfaXNvY2RiZygiJXM6IHY0bDJfZmhfb3BlbigpIHJldHVybmVkIGVycm9yICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXQpOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybiByZXQ7CiAJfQorCiAJaWYgKGRldi0+dXNlcnMgPT0gMCkgewogCQlhdTA4MjhfYW5hbG9nX3N0cmVhbV9lbmFibGUoZGV2KTsKIAkJYXUwODI4X2FuYWxvZ19zdHJlYW1fcmVzZXQoZGV2KTsKLQotCQkvKiBJZiB3ZSB3ZXJlIGRvaW5nIGFjOTcgaW5zdGVhZCBvZiBpMnMsIGl0IHdvdWxkIGdvIGhlcmUuLi4qLwotCQlhdTA4MjhfaTJzX2luaXQoZGV2KTsKLQogCQlkZXYtPnN0cmVhbV9zdGF0ZSA9IFNUUkVBTV9PRkY7CiAJCWRldi0+ZGV2X3N0YXRlIHw9IERFVl9JTklUSUFMSVpFRDsKIAl9Ci0KIAlkZXYtPnVzZXJzKys7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCi0JdmlkZW9idWZfcXVldWVfdm1hbGxvY19pbml0KCZmaC0+dmJfdmlkcSwgJmF1MDgyOF92aWRlb19xb3BzLAotCQkJCSAgICBOVUxMLCAmZGV2LT5zbG9jaywKLQkJCQkgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAotCQkJCSAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgYXUwODI4X2J1ZmZlciksIGZoLAotCQkJCSAgICAmZGV2LT5sb2NrKTsKLQotCS8qIFZCSSBTZXR1cCAqLwotCXZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdCgmZmgtPnZiX3ZiaXEsICZhdTA4MjhfdmJpX3FvcHMsCi0JCQkJICAgIE5VTEwsICZkZXYtPnNsb2NrLAotCQkJCSAgICBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFLAotCQkJCSAgICBWNEwyX0ZJRUxEX1NFUV9UQiwKLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBhdTA4MjhfYnVmZmVyKSwgZmgsCi0JCQkJICAgICZkZXYtPmxvY2spOwotCXY0bDJfZmhfYWRkKCZmaC0+ZmgpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYXUwODI4X3Y0bDJfY2xvc2Uoc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJaW50IHJldDsKLQlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKIAotCXY0bDJfZmhfZGVsKCZmaC0+ZmgpOwotCXY0bDJfZmhfZXhpdCgmZmgtPmZoKTsKKwlkcHJpbnRrKDEsCisJCSIlcyBjYWxsZWQgc3RkX3NldCAlZCBkZXZfc3RhdGUgJWQgc3RyZWFtIHVzZXJzICVkIHVzZXJzICVkXG4iLAorCQlfX2Z1bmNfXywgZGV2LT5zdGRfc2V0X2luX3R1bmVyX2NvcmUsIGRldi0+ZGV2X3N0YXRlLAorCQlkZXYtPnN0cmVhbWluZ191c2VycywgZGV2LT51c2Vycyk7CisKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCWlmIChyZXNfY2hlY2soZmgsIEFVMDgyOF9SRVNPVVJDRV9WSURFTykpIHsKKwlpZiAodmRldi0+dmZsX3R5cGUgPT0gVkZMX1RZUEVfR1JBQkJFUiAmJiBkZXYtPnZpZF90aW1lb3V0X3J1bm5pbmcpIHsKIAkJLyogQ2FuY2VsIHRpbWVvdXQgdGhyZWFkIGluIGNhc2UgdGhleSBkaWRuJ3QgY2FsbCBzdHJlYW1vZmYgKi8KIAkJZGV2LT52aWRfdGltZW91dF9ydW5uaW5nID0gMDsKIAkJZGVsX3RpbWVyX3N5bmMoJmRldi0+dmlkX3RpbWVvdXQpOwotCi0JCXZpZGVvYnVmX3N0b3AoJmZoLT52Yl92aWRxKTsKLQkJcmVzX2ZyZWUoZmgsIEFVMDgyOF9SRVNPVVJDRV9WSURFTyk7Ci0JfQotCi0JaWYgKHJlc19jaGVjayhmaCwgQVUwODI4X1JFU09VUkNFX1ZCSSkpIHsKKwl9IGVsc2UgaWYgKHZkZXYtPnZmbF90eXBlID09IFZGTF9UWVBFX1ZCSSAmJgorCQkJZGV2LT52YmlfdGltZW91dF9ydW5uaW5nKSB7CiAJCS8qIENhbmNlbCB0aW1lb3V0IHRocmVhZCBpbiBjYXNlIHRoZXkgZGlkbid0IGNhbGwgc3RyZWFtb2ZmICovCiAJCWRldi0+dmJpX3RpbWVvdXRfcnVubmluZyA9IDA7CiAJCWRlbF90aW1lcl9zeW5jKCZkZXYtPnZiaV90aW1lb3V0KTsKLQotCQl2aWRlb2J1Zl9zdG9wKCZmaC0+dmJfdmJpcSk7Ci0JCXJlc19mcmVlKGZoLCBBVTA4MjhfUkVTT1VSQ0VfVkJJKTsKIAl9CiAKLQlpZiAoZGV2LT51c2VycyA9PSAxICYmIHZpZGVvX2lzX3JlZ2lzdGVyZWQodmlkZW9fZGV2ZGF0YShmaWxwKSkpIHsKLQkJYXUwODI4X2FuYWxvZ19zdHJlYW1fZGlzYWJsZShkZXYpOworCWlmIChkZXYtPmRldl9zdGF0ZSA9PSBERVZfRElTQ09OTkVDVEVEKQorCQlnb3RvIGVuZDsKIAotCQlhdTA4MjhfdW5pbml0X2lzb2MoZGV2KTsKLQorCWlmIChkZXYtPnVzZXJzID09IDEpIHsKIAkJLyogU2F2ZSBzb21lIHBvd2VyIGJ5IHB1dHRpbmcgdHVuZXIgdG8gc2xlZXAgKi8KIAkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIHNfcG93ZXIsIDApOwogCQlkZXYtPnN0ZF9zZXRfaW5fdHVuZXJfY29yZSA9IDA7CkBAIC0xMDk1LDEzICsxMDI3LDEwIEBACiAJCWlmIChyZXQgPCAwKQogCQkJcHJfaW5mbygiQXUwODI4IGNhbid0IHNldCBhbHRlcm5hdGUgdG8gMCFcbiIpOwogCX0KLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0KLQl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT52Yl92aWRxKTsKLQl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT52Yl92YmlxKTsKLQlrZnJlZShmaCk7CitlbmQ6CisJX3ZiMl9mb3BfcmVsZWFzZShmaWxwLCBOVUxMKTsKIAlkZXYtPnVzZXJzLS07Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlX25yKCZkZXYtPm9wZW4sIDEpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTExMyw2ICsxMDQyLDkgQEAKIAkJLnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UViwKIAl9OwogCisJZHByaW50aygxLCAiJXMgY2FsbGVkIHN0ZF9zZXQgJWQgZGV2X3N0YXRlICVkXG4iLCBfX2Z1bmNfXywKKwkJZGV2LT5zdGRfc2V0X2luX3R1bmVyX2NvcmUsIGRldi0+ZGV2X3N0YXRlKTsKKwogCWlmIChkZXYtPnN0ZF9zZXRfaW5fdHVuZXJfY29yZSkKIAkJcmV0dXJuOwogCWRldi0+c3RkX3NldF9pbl90dW5lcl9jb3JlID0gMTsKQEAgLTExMjUsOTggKzEwNTcsNiBAQAogCWkyY19nYXRlX2N0cmwoZGV2LCAwKTsKIH0KIAotc3RhdGljIHNzaXplX3QgYXUwODI4X3Y0bDJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQotewotCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCWludCByYzsKLQotCXJjID0gY2hlY2tfZGV2KGRldik7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5sb2NrKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlhdTA4MjhfaW5pdF90dW5lcihkZXYpOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQotCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJaWYgKHJlc19sb2NrZWQoZGV2LCBBVTA4MjhfUkVTT1VSQ0VfVklERU8pKQotCQkJcmV0dXJuIC1FQlVTWTsKLQotCQlyZXR1cm4gdmlkZW9idWZfcmVhZF9zdHJlYW0oJmZoLT52Yl92aWRxLCBidWYsIGNvdW50LCBwb3MsIDAsCi0JCQkJCWZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQl9Ci0KLQlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgewotCQlpZiAoIXJlc19nZXQoZmgsIEFVMDgyOF9SRVNPVVJDRV9WQkkpKQotCQkJcmV0dXJuIC1FQlVTWTsKLQotCQlpZiAoZGV2LT52YmlfdGltZW91dF9ydW5uaW5nID09IDApIHsKLQkJCS8qIEhhbmRsZSBjYXNlIHdoZXJlIGNhbGxlciB0cmllcyB0byByZWFkIHdpdGhvdXQKLQkJCSAgIGNhbGxpbmcgc3RyZWFtb24gZmlyc3QgKi8KLQkJCWRldi0+dmJpX3RpbWVvdXRfcnVubmluZyA9IDE7Ci0JCQltb2RfdGltZXIoJmRldi0+dmJpX3RpbWVvdXQsIGppZmZpZXMgKyAoSFogLyAxMCkpOwotCQl9Ci0KLQkJcmV0dXJuIHZpZGVvYnVmX3JlYWRfc3RyZWFtKCZmaC0+dmJfdmJpcSwgYnVmLCBjb3VudCwgcG9zLCAwLAotCQkJCQkgICAgZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGF1MDgyOF92NGwyX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpCi17Ci0Jc3RydWN0IGF1MDgyOF9maCAqZmggPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7Ci0JdW5zaWduZWQgbG9uZyByZXFfZXZlbnRzID0gcG9sbF9yZXF1ZXN0ZWRfZXZlbnRzKHdhaXQpOwotCXVuc2lnbmVkIGludCByZXM7Ci0KLQlpZiAoY2hlY2tfZGV2KGRldikgPCAwKQotCQlyZXR1cm4gUE9MTEVSUjsKLQotCXJlcyA9IHY0bDJfY3RybF9wb2xsKGZpbHAsIHdhaXQpOwotCWlmICghKHJlcV9ldmVudHMgJiAoUE9MTElOIHwgUE9MTFJETk9STSkpKQotCQlyZXR1cm4gcmVzOwotCi0JaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5sb2NrKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlhdTA4MjhfaW5pdF90dW5lcihkZXYpOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQotCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJaWYgKCFyZXNfZ2V0KGZoLCBBVTA4MjhfUkVTT1VSQ0VfVklERU8pKQotCQkJcmV0dXJuIFBPTExFUlI7Ci0JCXJldHVybiByZXMgfCB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxwLCAmZmgtPnZiX3ZpZHEsIHdhaXQpOwotCX0KLQlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgewotCQlpZiAoIXJlc19nZXQoZmgsIEFVMDgyOF9SRVNPVVJDRV9WQkkpKQotCQkJcmV0dXJuIFBPTExFUlI7Ci0JCXJldHVybiByZXMgfCB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxwLCAmZmgtPnZiX3ZiaXEsIHdhaXQpOwotCX0KLQlyZXR1cm4gUE9MTEVSUjsKLX0KLQotc3RhdGljIGludCBhdTA4MjhfdjRsMl9tbWFwKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgYXUwODI4X2ZoICpmaCAgICA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ICAgPSBmaC0+ZGV2OwotCWludAkJIHJjOwotCi0JcmMgPSBjaGVja19kZXYoZGV2KTsKLQlpZiAocmMgPCAwKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyYyA9IHZpZGVvYnVmX21tYXBfbWFwcGVyKCZmaC0+dmJfdmlkcSwgdm1hKTsKLQllbHNlIGlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQotCQlyYyA9IHZpZGVvYnVmX21tYXBfbWFwcGVyKCZmaC0+dmJfdmJpcSwgdm1hKTsKLQotCXJldHVybiByYzsKLX0KLQogc3RhdGljIGludCBhdTA4Mjhfc2V0X2Zvcm1hdChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCkKIHsKQEAgLTEyNjgsMTMgKzExMDgsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OwotCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJZHByaW50aygxLCAiJXMgY2FsbGVkIHN0ZF9zZXQgJWQgZGV2X3N0YXRlICVkXG4iLCBfX2Z1bmNfXywKKwkJZGV2LT5zdGRfc2V0X2luX3R1bmVyX2NvcmUsIGRldi0+ZGV2X3N0YXRlKTsKIAogCXN0cmxjcHkoY2FwLT5kcml2ZXIsICJhdTA4MjgiLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgZGV2LT5ib2FyZC5uYW1lLCBzaXplb2YoY2FwLT5jYXJkKSk7CkBAIC0xMzAwLDYgKzExNDEsOCBAQAogCWlmIChmLT5pbmRleCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlkcHJpbnRrKDEsICIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKKwogCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAiUGFja2VkIFlVVjIiKTsKIApAQCAtMTMxMiw4ICsxMTU1LDEwIEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0Jc3RydWN0IGF1MDgyOF9maCAqZmggID0gcHJpdjsKLQlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWRwcmludGsoMSwgIiVzIGNhbGxlZCBzdGRfc2V0ICVkIGRldl9zdGF0ZSAlZFxuIiwgX19mdW5jX18sCisJCWRldi0+c3RkX3NldF9pbl90dW5lcl9jb3JlLCBkZXYtPmRldl9zdGF0ZSk7CiAKIAlmLT5mbXQucGl4LndpZHRoID0gZGV2LT53aWR0aDsKIAlmLT5mbXQucGl4LmhlaWdodCA9IGRldi0+aGVpZ2h0OwpAQCAtMTMyOSw4ICsxMTc0LDEwIEBACiBzdGF0aWMgaW50IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0Jc3RydWN0IGF1MDgyOF9maCAqZmggID0gcHJpdjsKLQlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWRwcmludGsoMSwgIiVzIGNhbGxlZCBzdGRfc2V0ICVkIGRldl9zdGF0ZSAlZFxuIiwgX19mdW5jX18sCisJCWRldi0+c3RkX3NldF9pbl90dW5lcl9jb3JlLCBkZXYtPmRldl9zdGF0ZSk7CiAKIAlyZXR1cm4gYXUwODI4X3NldF9mb3JtYXQoZGV2LCBWSURJT0NfVFJZX0ZNVCwgZik7CiB9CkBAIC0xMzM4LDE1ICsxMTg1LDE3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlzdHJ1Y3QgYXUwODI4X2ZoICpmaCAgPSBwcml2OwotCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCByYzsKIAorCWRwcmludGsoMSwgIiVzIGNhbGxlZCBzdGRfc2V0ICVkIGRldl9zdGF0ZSAlZFxuIiwgX19mdW5jX18sCisJCWRldi0+c3RkX3NldF9pbl90dW5lcl9jb3JlLCBkZXYtPmRldl9zdGF0ZSk7CisKIAlyYyA9IGNoZWNrX2RldihkZXYpOwogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAotCWlmICh2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCZmaC0+dmJfdmlkcSkpIHsKKwlpZiAodmIyX2lzX2J1c3koJmRldi0+dmJfdmlkcSkpIHsKIAkJcHJfaW5mbygiJXMgcXVldWUgYnVzeVxuIiwgX19mdW5jX18pOwogCQlyYyA9IC1FQlVTWTsKIAkJZ290byBvdXQ7CkBAIC0xMzU5LDggKzEyMDgsMTYgQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHY0bDJfc3RkX2lkIG5vcm0pCiB7Ci0Jc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OwotCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJZHByaW50aygxLCAiJXMgY2FsbGVkIHN0ZF9zZXQgJWQgZGV2X3N0YXRlICVkXG4iLCBfX2Z1bmNfXywKKwkJZGV2LT5zdGRfc2V0X2luX3R1bmVyX2NvcmUsIGRldi0+ZGV2X3N0YXRlKTsKKworCWlmIChub3JtID09IGRldi0+c3RkKQorCQlyZXR1cm4gMDsKKworCWlmIChkZXYtPnN0cmVhbWluZ191c2VycyA+IDApCisJCXJldHVybiAtRUJVU1k7CiAKIAlkZXYtPnN0ZCA9IG5vcm07CiAKQEAgLTEzODMsOCArMTI0MCwxMCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKm5vcm0pCiB7Ci0Jc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OwotCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJZHByaW50aygxLCAiJXMgY2FsbGVkIHN0ZF9zZXQgJWQgZGV2X3N0YXRlICVkXG4iLCBfX2Z1bmNfXywKKwkJZGV2LT5zdGRfc2V0X2luX3R1bmVyX2NvcmUsIGRldi0+ZGV2X3N0YXRlKTsKIAogCSpub3JtID0gZGV2LT5zdGQ7CiAJcmV0dXJuIDA7CkBAIC0xMzkzLDggKzEyNTIsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wdXQpCiB7Ci0Jc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OwotCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXVuc2lnbmVkIGludCB0bXA7CiAKIAlzdGF0aWMgY29uc3QgY2hhciAqaW5hbWVzW10gPSB7CkBAIC0xNDA3LDYgKzEyNjUsOSBAQAogCQlbQVUwODI4X1ZNVVhfREVCVUddID0gInR2IGRlYnVnIgogCX07CiAKKwlkcHJpbnRrKDEsICIlcyBjYWxsZWQgc3RkX3NldCAlZCBkZXZfc3RhdGUgJWRcbiIsIF9fZnVuY19fLAorCQlkZXYtPnN0ZF9zZXRfaW5fdHVuZXJfY29yZSwgZGV2LT5kZXZfc3RhdGUpOworCiAJdG1wID0gaW5wdXQtPmluZGV4OwogCiAJaWYgKHRtcCA+PSBBVTA4MjhfTUFYX0lOUFVUKQpAQCAtMTQzMiw4ICsxMjkzLDExIEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKLQlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlkcHJpbnRrKDEsICIlcyBjYWxsZWQgc3RkX3NldCAlZCBkZXZfc3RhdGUgJWRcbiIsIF9fZnVuY19fLAorCQlkZXYtPnN0ZF9zZXRfaW5fdHVuZXJfY29yZSwgZGV2LT5kZXZfc3RhdGUpOworCiAJKmkgPSBkZXYtPmN0cmxfaW5wdXQ7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDQyLDYgKzEzMDYsOSBAQAogewogCWludCBpOwogCisJZHByaW50aygxLCAiJXMgY2FsbGVkIHN0ZF9zZXQgJWQgZGV2X3N0YXRlICVkXG4iLCBfX2Z1bmNfXywKKwkJZGV2LT5zdGRfc2V0X2luX3R1bmVyX2NvcmUsIGRldi0+ZGV2X3N0YXRlKTsKKwogCXN3aXRjaCAoQVVWSV9JTlBVVChpbmRleCkudHlwZSkgewogCWNhc2UgQVUwODI4X1ZNVVhfU1ZJREVPOgogCQlkZXYtPmlucHV0X3R5cGUgPSBBVTA4MjhfVk1VWF9TVklERU87CkBAIC0xNDkxLDggKzEzNTgsNyBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaW5kZXgpCiB7Ci0Jc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OwotCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZHByaW50aygxLCAiVklESU9DX1NfSU5QVVQgaW4gZnVuY3Rpb24gJXMsIGlucHV0PSVkXG4iLCBfX2Z1bmNfXywKIAkJaW5kZXgpOwpAQCAtMTUxMCw2ICsxMzc2LDggQEAKIAlpZiAoYS0+aW5kZXggPiAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWRwcmludGsoMSwgIiVzIGNhbGxlZFxuIiwgX19mdW5jX18pOworCiAJaWYgKGEtPmluZGV4ID09IDApCiAJCXN0cmNweShhLT5uYW1lLCAiVGVsZXZpc2lvbiIpOwogCWVsc2UKQEAgLTE1MjEsOCArMTM4OSwxMCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlkcHJpbnRrKDEsICIlcyBjYWxsZWQgc3RkX3NldCAlZCBkZXZfc3RhdGUgJWRcbiIsIF9fZnVuY19fLAorCQlkZXYtPnN0ZF9zZXRfaW5fdHVuZXJfY29yZSwgZGV2LT5kZXZfc3RhdGUpOwogCiAJYS0+aW5kZXggPSBkZXYtPmN0cmxfYWlucHV0OwogCWlmIChhLT5pbmRleCA9PSAwKQpAQCAtMTUzNiwyMiArMTQwNiwyNiBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBjb25zdCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAoYS0+aW5kZXggIT0gZGV2LT5jdHJsX2FpbnB1dCkKIAkJcmV0dXJuIC1FSU5WQUw7CisKKwlkcHJpbnRrKDEsICIlcyBjYWxsZWQgc3RkX3NldCAlZCBkZXZfc3RhdGUgJWRcbiIsIF9fZnVuY19fLAorCQlkZXYtPnN0ZF9zZXRfaW5fdHVuZXJfY29yZSwgZGV2LT5kZXZfc3RhdGUpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl90dW5lciAqdCkKIHsKLQlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodC0+aW5kZXggIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlkcHJpbnRrKDEsICIlcyBjYWxsZWQgc3RkX3NldCAlZCBkZXZfc3RhdGUgJWRcbiIsIF9fZnVuY19fLAorCQlkZXYtPnN0ZF9zZXRfaW5fdHVuZXJfY29yZSwgZGV2LT5kZXZfc3RhdGUpOworCiAJc3RyY3B5KHQtPm5hbWUsICJBdXZpdGVrIHR1bmVyIik7CiAKIAlhdTA4MjhfaW5pdF90dW5lcihkZXYpOwpAQCAtMTU2NCwxMiArMTQzOCwxNCBAQAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQljb25zdCBzdHJ1Y3QgdjRsMl90dW5lciAqdCkKIHsKLQlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodC0+aW5kZXggIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlkcHJpbnRrKDEsICIlcyBjYWxsZWQgc3RkX3NldCAlZCBkZXZfc3RhdGUgJWRcbiIsIF9fZnVuY19fLAorCQlkZXYtPnN0ZF9zZXRfaW5fdHVuZXJfY29yZSwgZGV2LT5kZXZfc3RhdGUpOworCiAJYXUwODI4X2luaXRfdHVuZXIoZGV2KTsKIAlpMmNfZ2F0ZV9jdHJsKGRldiwgMSk7CiAJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIHR1bmVyLCBzX3R1bmVyLCB0KTsKQEAgLTE1ODUsMTEgKzE0NjEsMTIgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKIHsKLQlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAoZnJlcS0+dHVuZXIgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CisJZHByaW50aygxLCAiJXMgY2FsbGVkIHN0ZF9zZXQgJWQgZGV2X3N0YXRlICVkXG4iLCBfX2Z1bmNfXywKKwkJZGV2LT5zdGRfc2V0X2luX3R1bmVyX2NvcmUsIGRldi0+ZGV2X3N0YXRlKTsKIAlmcmVxLT5mcmVxdWVuY3kgPSBkZXYtPmN0cmxfZnJlcTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE1OTcsMTMgKzE0NzQsMTUgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCWNvbnN0IHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKIHsKLQlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJc3RydWN0IHY0bDJfZnJlcXVlbmN5IG5ld19mcmVxID0gKmZyZXE7CiAKIAlpZiAoZnJlcS0+dHVuZXIgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlkcHJpbnRrKDEsICIlcyBjYWxsZWQgc3RkX3NldCAlZCBkZXZfc3RhdGUgJWRcbiIsIF9fZnVuY19fLAorCQlkZXYtPnN0ZF9zZXRfaW5fdHVuZXJfY29yZSwgZGV2LT5kZXZfc3RhdGUpOworCiAJYXUwODI4X2luaXRfdHVuZXIoZGV2KTsKIAlpMmNfZ2F0ZV9jdHJsKGRldiwgMSk7CiAKQEAgLTE2MjUsOCArMTUwNCwxMCBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZvcm1hdCkKIHsKLQlzdHJ1Y3QgYXUwODI4X2ZoICAgICAgKmZoICA9IHByaXY7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgICAgICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJZHByaW50aygxLCAiJXMgY2FsbGVkIHN0ZF9zZXQgJWQgZGV2X3N0YXRlICVkXG4iLCBfX2Z1bmNfXywKKwkJZGV2LT5zdGRfc2V0X2luX3R1bmVyX2NvcmUsIGRldi0+ZGV2X3N0YXRlKTsKIAogCWZvcm1hdC0+Zm10LnZiaS5zYW1wbGVzX3Blcl9saW5lID0gZGV2LT52Ymlfd2lkdGg7CiAJZm9ybWF0LT5mbXQudmJpLnNhbXBsZV9mb3JtYXQgPSBWNEwyX1BJWF9GTVRfR1JFWTsKQEAgLTE2NDYsMTIgKzE1MjcsMTQgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2Nyb3BjYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgIHN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNjKQogewotCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmIChjYy0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJZHByaW50aygxLCAiJXMgY2FsbGVkIHN0ZF9zZXQgJWQgZGV2X3N0YXRlICVkXG4iLCBfX2Z1bmNfXywKKwkJZGV2LT5zdGRfc2V0X2luX3R1bmVyX2NvcmUsIGRldi0+ZGV2X3N0YXRlKTsKKwogCWNjLT5ib3VuZHMubGVmdCA9IDA7CiAJY2MtPmJvdW5kcy50b3AgPSAwOwogCWNjLT5ib3VuZHMud2lkdGggPSBkZXYtPndpZHRoOwpAQCAtMTY2NSwxMDUgKzE1NDgsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkgICBlbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSkKLXsKLQlzdHJ1Y3QgYXUwODI4X2ZoICAgICAgKmZoICA9IHByaXY7Ci0Jc3RydWN0IGF1MDgyOF9kZXYgICAgICpkZXYgPSBmaC0+ZGV2OwotCWludCAgICAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Ci0KLQlyYyA9IGNoZWNrX2RldihkZXYpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQotCWlmICh1bmxpa2VseSh0eXBlICE9IGZoLT50eXBlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkcHJpbnRrKDEsICJ2aWRpb2Nfc3RyZWFtb24gZmg9JXAgdD0lZCBmaC0+cmVzPSVkIGRldi0+cmVzPSVkXG4iLAotCQlmaCwgdHlwZSwgZmgtPnJlc291cmNlcywgZGV2LT5yZXNvdXJjZXMpOwotCi0JaWYgKHVubGlrZWx5KCFyZXNfZ2V0KGZoLCBnZXRfcmVzc291cmNlKGZoKSkpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JYXUwODI4X2luaXRfdHVuZXIoZGV2KTsKLQlpZiAodHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJYXUwODI4X2FuYWxvZ19zdHJlYW1fZW5hYmxlKGRldik7Ci0JCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCB2aWRlbywgc19zdHJlYW0sIDEpOwotCX0KLQotCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJcmMgPSB2aWRlb2J1Zl9zdHJlYW1vbigmZmgtPnZiX3ZpZHEpOwotCQlkZXYtPnZpZF90aW1lb3V0X3J1bm5pbmcgPSAxOwotCQltb2RfdGltZXIoJmRldi0+dmlkX3RpbWVvdXQsIGppZmZpZXMgKyAoSFogLyAxMCkpOwotCX0gZWxzZSBpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgewotCQlyYyA9IHZpZGVvYnVmX3N0cmVhbW9uKCZmaC0+dmJfdmJpcSk7Ci0JCWRldi0+dmJpX3RpbWVvdXRfcnVubmluZyA9IDE7Ci0JCW1vZF90aW1lcigmZGV2LT52YmlfdGltZW91dCwgamlmZmllcyArIChIWiAvIDEwKSk7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkgICAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCi17Ci0Jc3RydWN0IGF1MDgyOF9maCAgICAgICpmaCAgPSBwcml2OwotCXN0cnVjdCBhdTA4MjhfZGV2ICAgICAqZGV2ID0gZmgtPmRldjsKLQlpbnQgICAgICAgICAgICAgICAgICAgcmM7Ci0JaW50ICAgICAgICAgICAgICAgICAgIGk7Ci0KLQlyYyA9IGNoZWNrX2RldihkZXYpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQotCWlmIChmaC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgJiYKLQkgICAgZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHR5cGUgIT0gZmgtPnR5cGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZHByaW50aygxLCAidmlkaW9jX3N0cmVhbW9mZiBmaD0lcCB0PSVkIGZoLT5yZXM9JWQgZGV2LT5yZXM9JWRcbiIsCi0JCWZoLCB0eXBlLCBmaC0+cmVzb3VyY2VzLCBkZXYtPnJlc291cmNlcyk7Ci0KLQlpZiAoZmgtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7Ci0JCWRldi0+dmlkX3RpbWVvdXRfcnVubmluZyA9IDA7Ci0JCWRlbF90aW1lcl9zeW5jKCZkZXYtPnZpZF90aW1lb3V0KTsKLQotCQlhdTA4MjhfYW5hbG9nX3N0cmVhbV9kaXNhYmxlKGRldik7Ci0JCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCB2aWRlbywgc19zdHJlYW0sIDApOwotCQlyYyA9IGF1MDgyOF9zdHJlYW1faW50ZXJydXB0KGRldik7Ci0JCWlmIChyYyAhPSAwKQotCQkJcmV0dXJuIHJjOwotCi0JCWZvciAoaSA9IDA7IGkgPCBBVTA4MjhfTUFYX0lOUFVUOyBpKyspIHsKLQkJCWlmIChBVVZJX0lOUFVUKGkpLmF1ZGlvX3NldHVwID09IE5VTEwpCi0JCQkJY29udGludWU7Ci0JCQkoQVVWSV9JTlBVVChpKS5hdWRpb19zZXR1cCkoZGV2LCAwKTsKLQkJfQotCi0JCWlmIChyZXNfY2hlY2soZmgsIEFVMDgyOF9SRVNPVVJDRV9WSURFTykpIHsKLQkJCXZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZiX3ZpZHEpOwotCQkJcmVzX2ZyZWUoZmgsIEFVMDgyOF9SRVNPVVJDRV9WSURFTyk7Ci0JCX0KLQl9IGVsc2UgaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpIHsKLQkJZGV2LT52YmlfdGltZW91dF9ydW5uaW5nID0gMDsKLQkJZGVsX3RpbWVyX3N5bmMoJmRldi0+dmJpX3RpbWVvdXQpOwotCi0JCWlmIChyZXNfY2hlY2soZmgsIEFVMDgyOF9SRVNPVVJDRV9WQkkpKSB7Ci0JCQl2aWRlb2J1Zl9zdHJlYW1vZmYoJmZoLT52Yl92YmlxKTsKLQkJCXJlc19mcmVlKGZoLCBBVTA4MjhfUkVTT1VSQ0VfVkJJKTsKLQkJfQotCX0KLQotCXJldHVybiAwOwotfQotCiAjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRwogc3RhdGljIGludCB2aWRpb2NfZ19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCiB7Ci0Jc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OwotCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJZHByaW50aygxLCAiJXMgY2FsbGVkIHN0ZF9zZXQgJWQgZGV2X3N0YXRlICVkXG4iLCBfX2Z1bmNfXywKKwkJZGV2LT5zdGRfc2V0X2luX3R1bmVyX2NvcmUsIGRldi0+ZGV2X3N0YXRlKTsKIAogCXJlZy0+dmFsID0gYXUwODI4X3JlYWQoZGV2LCByZWctPnJlZyk7CiAJcmVnLT5zaXplID0gMTsKQEAgLTE3NzMsOCArMTU2NSwxMCBAQAogc3RhdGljIGludCB2aWRpb2Nfc19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICAgY29uc3Qgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCiB7Ci0Jc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OwotCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJZHByaW50aygxLCAiJXMgY2FsbGVkIHN0ZF9zZXQgJWQgZGV2X3N0YXRlICVkXG4iLCBfX2Z1bmNfXywKKwkJZGV2LT5zdGRfc2V0X2luX3R1bmVyX2NvcmUsIGRldi0+ZGV2X3N0YXRlKTsKIAogCXJldHVybiBhdTA4Mjhfd3JpdGVyZWcoZGV2LCByZWctPnJlZywgcmVnLT52YWwpOwogfQpAQCAtMTc4NCw5MyArMTU3OCwxMyBAQAogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwogCisJZHByaW50aygxLCAiJXMgY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CisKIAl2NGwyX2N0cmxfbG9nX3N0YXR1cyhmaWxlLCBmaCk7CiAJdjRsMl9kZXZpY2VfY2FsbF9hbGwodmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIGxvZ19zdGF0dXMpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmIpCi17Ci0Jc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OwotCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCWludCByYzsKLQotCXJjID0gY2hlY2tfZGV2KGRldik7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0JaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmMgPSB2aWRlb2J1Zl9yZXFidWZzKCZmaC0+dmJfdmlkcSwgcmIpOwotCWVsc2UgaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCi0JCXJjID0gdmlkZW9idWZfcmVxYnVmcygmZmgtPnZiX3ZiaXEsIHJiKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCi17Ci0Jc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OwotCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCWludCByYzsKLQotCXJjID0gY2hlY2tfZGV2KGRldik7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0JaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmMgPSB2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZiX3ZpZHEsIGIpOwotCWVsc2UgaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCi0JCXJjID0gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52Yl92YmlxLCBiKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQotewotCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKLQlpbnQgcmM7Ci0KLQlyYyA9IGNoZWNrX2RldihkZXYpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQotCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJjID0gdmlkZW9idWZfcWJ1ZigmZmgtPnZiX3ZpZHEsIGIpOwotCWVsc2UgaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCi0JCXJjID0gdmlkZW9idWZfcWJ1ZigmZmgtPnZiX3ZiaXEsIGIpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQotewotCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKLQlpbnQgcmM7Ci0KLQlyYyA9IGNoZWNrX2RldihkZXYpOwotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQotCS8qIFdvcmthcm91bmQgZm9yIGEgYnVnIGluIHRoZSBhdTA4MjggaGFyZHdhcmUgZGVzaWduIHRoYXQgc29tZXRpbWVzCi0JICAgcmVzdWx0cyBpbiB0aGUgY29sb3JzcGFjZSBiZWluZyBpbnZlcnRlZCAqLwotCWlmIChkZXYtPmdyZWVuc2NyZWVuX2RldGVjdGVkID09IDEpIHsKLQkJZHByaW50aygxLCAiRGV0ZWN0ZWQgZ3JlZW4gZnJhbWUuICBSZXNldHRpbmcgc3RyZWFtLi4uXG4iKTsKLQkJYXUwODI4X2FuYWxvZ19zdHJlYW1fcmVzZXQoZGV2KTsKLQkJZGV2LT5ncmVlbnNjcmVlbl9kZXRlY3RlZCA9IDA7Ci0JfQotCi0JaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmMgPSB2aWRlb2J1Zl9kcWJ1ZigmZmgtPnZiX3ZpZHEsIGIsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQllbHNlIGlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQotCQlyYyA9IHZpZGVvYnVmX2RxYnVmKCZmaC0+dmJfdmJpcSwgYiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCi0JcmV0dXJuIHJjOwotfQotCiB2b2lkIGF1MDgyOF92NGwyX3N1c3BlbmQoc3RydWN0IGF1MDgyOF9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgdXJiICp1cmI7CkBAIC0xOTM4LDkgKzE2NTIsOSBAQAogCS5vd25lciAgICAgID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gICAgICAgPSBhdTA4MjhfdjRsMl9vcGVuLAogCS5yZWxlYXNlICAgID0gYXUwODI4X3Y0bDJfY2xvc2UsCi0JLnJlYWQgICAgICAgPSBhdTA4MjhfdjRsMl9yZWFkLAotCS5wb2xsICAgICAgID0gYXUwODI4X3Y0bDJfcG9sbCwKLQkubW1hcCAgICAgICA9IGF1MDgyOF92NGwyX21tYXAsCisJLnJlYWQgICAgICAgPSB2YjJfZm9wX3JlYWQsCisJLnBvbGwgICAgICAgPSB2YjJfZm9wX3BvbGwsCisJLm1tYXAgICAgICAgPSB2YjJfZm9wX21tYXAsCiAJLnVubG9ja2VkX2lvY3RsID0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtMTk1NywxNyArMTY3MSwyNCBAQAogCS52aWRpb2NfZ19hdWRpbyAgICAgICAgICAgICA9IHZpZGlvY19nX2F1ZGlvLAogCS52aWRpb2Nfc19hdWRpbyAgICAgICAgICAgICA9IHZpZGlvY19zX2F1ZGlvLAogCS52aWRpb2NfY3JvcGNhcCAgICAgICAgICAgICA9IHZpZGlvY19jcm9wY2FwLAotCS52aWRpb2NfcmVxYnVmcyAgICAgICAgICAgICA9IHZpZGlvY19yZXFidWZzLAotCS52aWRpb2NfcXVlcnlidWYgICAgICAgICAgICA9IHZpZGlvY19xdWVyeWJ1ZiwKLQkudmlkaW9jX3FidWYgICAgICAgICAgICAgICAgPSB2aWRpb2NfcWJ1ZiwKLQkudmlkaW9jX2RxYnVmICAgICAgICAgICAgICAgPSB2aWRpb2NfZHFidWYsCisKKwkudmlkaW9jX3JlcWJ1ZnMgICAgICAgICAgICAgPSB2YjJfaW9jdGxfcmVxYnVmcywKKwkudmlkaW9jX2NyZWF0ZV9idWZzICAgICAgICAgPSB2YjJfaW9jdGxfY3JlYXRlX2J1ZnMsCisJLnZpZGlvY19wcmVwYXJlX2J1ZiAgICAgICAgID0gdmIyX2lvY3RsX3ByZXBhcmVfYnVmLAorCS52aWRpb2NfcXVlcnlidWYgICAgICAgICAgICA9IHZiMl9pb2N0bF9xdWVyeWJ1ZiwKKwkudmlkaW9jX3FidWYgICAgICAgICAgICAgICAgPSB2YjJfaW9jdGxfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmICAgICAgICAgICAgICAgPSB2YjJfaW9jdGxfZHFidWYsCisJLnZpZGlvY19leHBidWYgICAgICAgICAgICAgICA9IHZiMl9pb2N0bF9leHBidWYsCisKIAkudmlkaW9jX3Nfc3RkICAgICAgICAgICAgICAgPSB2aWRpb2Nfc19zdGQsCiAJLnZpZGlvY19nX3N0ZCAgICAgICAgICAgICAgID0gdmlkaW9jX2dfc3RkLAogCS52aWRpb2NfZW51bV9pbnB1dCAgICAgICAgICA9IHZpZGlvY19lbnVtX2lucHV0LAogCS52aWRpb2NfZ19pbnB1dCAgICAgICAgICAgICA9IHZpZGlvY19nX2lucHV0LAogCS52aWRpb2Nfc19pbnB1dCAgICAgICAgICAgICA9IHZpZGlvY19zX2lucHV0LAotCS52aWRpb2Nfc3RyZWFtb24gICAgICAgICAgICA9IHZpZGlvY19zdHJlYW1vbiwKLQkudmlkaW9jX3N0cmVhbW9mZiAgICAgICAgICAgPSB2aWRpb2Nfc3RyZWFtb2ZmLAorCisJLnZpZGlvY19zdHJlYW1vbiAgICAgICAgICAgID0gdmIyX2lvY3RsX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmICAgICAgICAgICA9IHZiMl9pb2N0bF9zdHJlYW1vZmYsCisKIAkudmlkaW9jX2dfdHVuZXIgICAgICAgICAgICAgPSB2aWRpb2NfZ190dW5lciwKIAkudmlkaW9jX3NfdHVuZXIgICAgICAgICAgICAgPSB2aWRpb2Nfc190dW5lciwKIAkudmlkaW9jX2dfZnJlcXVlbmN5ICAgICAgICAgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCkBAIC0xOTg4LDYgKzE3MDksNDIgQEAKIAkudHZub3JtcyAgICAgICAgICAgICAgICAgICAgPSBWNEwyX1NURF9OVFNDX00gfCBWNEwyX1NURF9QQUxfTSwKIH07CiAKK3N0YXRpYyBpbnQgYXUwODI4X3ZiMl9zZXR1cChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KQoreworCWludCByYzsKKwlzdHJ1Y3QgdmIyX3F1ZXVlICpxOworCisJLyogU2V0dXAgVmlkZW9idWYyIGZvciBWaWRlbyBjYXB0dXJlICovCisJcSA9ICZkZXYtPnZiX3ZpZHE7CisJcS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwlxLT5pb19tb2RlcyA9IFZCMl9SRUFEIHwgVkIyX01NQVAgfCBWQjJfVVNFUlBUUiB8IFZCMl9ETUFCVUY7CisJcS0+dGltZXN0YW1wX2ZsYWdzID0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDOworCXEtPmRydl9wcml2ID0gZGV2OworCXEtPmJ1Zl9zdHJ1Y3Rfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXUwODI4X2J1ZmZlcik7CisJcS0+b3BzID0gJmF1MDgyOF92aWRlb19xb3BzOworCXEtPm1lbV9vcHMgPSAmdmIyX3ZtYWxsb2NfbWVtb3BzOworCisJcmMgPSB2YjJfcXVldWVfaW5pdChxKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwkvKiBTZXR1cCBWaWRlb2J1ZjIgZm9yIFZCSSBjYXB0dXJlICovCisJcSA9ICZkZXYtPnZiX3ZiaXE7CisJcS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7CisJcS0+aW9fbW9kZXMgPSBWQjJfUkVBRCB8IFZCMl9NTUFQIHwgVkIyX1VTRVJQVFIgfCBWQjJfRE1BQlVGOworCXEtPnRpbWVzdGFtcF9mbGFncyA9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQzsKKwlxLT5kcnZfcHJpdiA9IGRldjsKKwlxLT5idWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0IGF1MDgyOF9idWZmZXIpOworCXEtPm9wcyA9ICZhdTA4MjhfdmJpX3FvcHM7CisJcS0+bWVtX29wcyA9ICZ2YjJfdm1hbGxvY19tZW1vcHM7CisKKwlyYyA9IHZiMl9xdWV1ZV9pbml0KHEpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJldHVybiAwOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIGludCBhdTA4MjhfYW5hbG9nX3JlZ2lzdGVyKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsCkBAIC0yMDMwLDcgKzE3ODcsNiBAQAogCX0KIAlpZiAoIShkZXYtPmlzb2NfaW5fZW5kcG9pbnRhZGRyKSkgewogCQlwcl9pbmZvKCJDb3VsZCBub3QgbG9jYXRlIGlzb2MgZW5kcG9pbnRcbiIpOwotCQlrZnJlZShkZXYpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTIwMzksMTcgKzE3OTUsMTIgQEAKIAogCS8qIGluaXQgdmlkZW8gZG1hIHF1ZXVlcyAqLwogCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHEuYWN0aXZlKTsKLQlJTklUX0xJU1RfSEVBRCgmZGV2LT52aWRxLnF1ZXVlZCk7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmJpcS5hY3RpdmUpOwotCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZiaXEucXVldWVkKTsKIAotCWRldi0+dmlkX3RpbWVvdXQuZnVuY3Rpb24gPSBhdTA4MjhfdmlkX2J1ZmZlcl90aW1lb3V0OwotCWRldi0+dmlkX3RpbWVvdXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkZXY7Ci0JaW5pdF90aW1lcigmZGV2LT52aWRfdGltZW91dCk7Ci0KLQlkZXYtPnZiaV90aW1lb3V0LmZ1bmN0aW9uID0gYXUwODI4X3ZiaV9idWZmZXJfdGltZW91dDsKLQlkZXYtPnZiaV90aW1lb3V0LmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OwotCWluaXRfdGltZXIoJmRldi0+dmJpX3RpbWVvdXQpOworCXNldHVwX3RpbWVyKCZkZXYtPnZpZF90aW1lb3V0LCBhdTA4MjhfdmlkX2J1ZmZlcl90aW1lb3V0LAorCQkgICAgKHVuc2lnbmVkIGxvbmcpZGV2KTsKKwlzZXR1cF90aW1lcigmZGV2LT52YmlfdGltZW91dCwgYXUwODI4X3ZiaV9idWZmZXJfdGltZW91dCwKKwkJICAgICh1bnNpZ25lZCBsb25nKWRldik7CiAKIAlkZXYtPndpZHRoID0gTlRTQ19TVERfVzsKIAlkZXYtPmhlaWdodCA9IE5UU0NfU1REX0g7CkBAIC0yMDc4LDE4ICsxODI5LDM0IEBACiAJCWdvdG8gZXJyX3ZkZXY7CiAJfQogCisJbXV0ZXhfaW5pdCgmZGV2LT52Yl9xdWV1ZV9sb2NrKTsKKwltdXRleF9pbml0KCZkZXYtPnZiX3ZiaV9xdWV1ZV9sb2NrKTsKKwogCS8qIEZpbGwgdGhlIHZpZGVvIGNhcHR1cmUgZGV2aWNlIHN0cnVjdCAqLwogCSpkZXYtPnZkZXYgPSBhdTA4MjhfdmlkZW9fdGVtcGxhdGU7CiAJZGV2LT52ZGV2LT52NGwyX2RldiA9ICZkZXYtPnY0bDJfZGV2OwogCWRldi0+dmRldi0+bG9jayA9ICZkZXYtPmxvY2s7CisJZGV2LT52ZGV2LT5xdWV1ZSA9ICZkZXYtPnZiX3ZpZHE7CisJZGV2LT52ZGV2LT5xdWV1ZS0+bG9jayA9ICZkZXYtPnZiX3F1ZXVlX2xvY2s7CiAJc3RyY3B5KGRldi0+dmRldi0+bmFtZSwgImF1MDgyOGEgdmlkZW8iKTsKIAogCS8qIFNldHVwIHRoZSBWQkkgZGV2aWNlICovCiAJKmRldi0+dmJpX2RldiA9IGF1MDgyOF92aWRlb190ZW1wbGF0ZTsKIAlkZXYtPnZiaV9kZXYtPnY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7CiAJZGV2LT52YmlfZGV2LT5sb2NrID0gJmRldi0+bG9jazsKKwlkZXYtPnZiaV9kZXYtPnF1ZXVlID0gJmRldi0+dmJfdmJpcTsKKwlkZXYtPnZiaV9kZXYtPnF1ZXVlLT5sb2NrID0gJmRldi0+dmJfdmJpX3F1ZXVlX2xvY2s7CiAJc3RyY3B5KGRldi0+dmJpX2Rldi0+bmFtZSwgImF1MDgyOGEgdmJpIik7CiAKKwkvKiBpbml0aWFsaXplIHZpZGVvYnVmMiBzdHVmZiAqLworCXJldHZhbCA9IGF1MDgyOF92YjJfc2V0dXAoZGV2KTsKKwlpZiAocmV0dmFsICE9IDApIHsKKwkJZHByaW50aygxLCAidW5hYmxlIHRvIHNldHVwIHZpZGVvYnVmMiBxdWV1ZXMgKGVycm9yID0gJWQpLlxuIiwKKwkJCXJldHZhbCk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX3ZiaV9kZXY7CisJfQorCiAJLyogUmVnaXN0ZXIgdGhlIHY0bDIgZGV2aWNlICovCiAJdmlkZW9fc2V0X2RydmRhdGEoZGV2LT52ZGV2LCBkZXYpOwogCXJldHZhbCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKQEAgLTIwOTcsNyArMTg2NCw3IEBACiAJCWRwcmludGsoMSwgInVuYWJsZSB0byByZWdpc3RlciB2aWRlbyBkZXZpY2UgKGVycm9yID0gJWQpLlxuIiwKIAkJCXJldHZhbCk7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX3ZiaV9kZXY7CisJCWdvdG8gZXJyX3JlZ192ZGV2OwogCX0KIAogCS8qIFJlZ2lzdGVyIHRoZSB2YmkgZGV2aWNlICovCkBAIC0yMTA3LDEzICsxODc0LDE4IEBACiAJCWRwcmludGsoMSwgInVuYWJsZSB0byByZWdpc3RlciB2YmkgZGV2aWNlIChlcnJvciA9ICVkKS5cbiIsCiAJCQlyZXR2YWwpOwogCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycl92YmlfZGV2OworCQlnb3RvIGVycl9yZWdfdmJpX2RldjsKIAl9CiAKIAlkcHJpbnRrKDEsICIlcyBjb21wbGV0ZWQhXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXR1cm4gMDsKIAorZXJyX3JlZ192YmlfZGV2OgorCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmRldik7CitlcnJfcmVnX3ZkZXY6CisJdmIyX3F1ZXVlX3JlbGVhc2UoJmRldi0+dmJfdmlkcSk7CisJdmIyX3F1ZXVlX3JlbGVhc2UoJmRldi0+dmJfdmJpcSk7CiBlcnJfdmJpX2RldjoKIAl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZiaV9kZXYpOwogZXJyX3ZkZXY6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9hdTA4MjgvYXUwODI4LmggYi9kcml2ZXJzL21lZGlhL3VzYi9hdTA4MjgvYXUwODI4LmgKaW5kZXggMzY4MTVhMy4uZWIxNTE4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvYXUwODI4L2F1MDgyOC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2F1MDgyOC9hdTA4MjguaApAQCAtMjgsNyArMjgsNyBAQAogCiAvKiBBbmFsb2cgKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi12bWFsbG9jLmg+CisjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLXZtYWxsb2MuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWZoLmg+CkBAIC0xMjYsMTcgKzEyNiw3IEBACiAJREVWX01JU0NPTkZJR1VSRUQgPSAweDA0CiB9OwogCi1zdHJ1Y3QgYXUwODI4X2ZoIHsKLQkvKiBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGlzIHN0cnVjdCEgKi8KLQlzdHJ1Y3QgdjRsMl9maCBmaDsKLQotCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXY7Ci0JdW5zaWduZWQgaW50ICByZXNvdXJjZXM7Ci0KLQlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgICAgICAgIHZiX3ZpZHE7Ci0Jc3RydWN0IHZpZGVvYnVmX3F1ZXVlICAgICAgICB2Yl92YmlxOwotCWVudW0gdjRsMl9idWZfdHlwZSAgICAgICAgICAgdHlwZTsKLX07CitzdHJ1Y3QgYXUwODI4X2RldjsKIAogc3RydWN0IGF1MDgyOF91c2JfaXNvY19jdGwgewogCQkvKiBtYXggcGFja2V0IHNpemUgb2YgaXNvYyB0cmFuc2FjdGlvbiAqLwpAQCAtMTc3LDIxICsxNjcsMjAgQEAKIC8qIGJ1ZmZlciBmb3Igb25lIHZpZGVvIGZyYW1lICovCiBzdHJ1Y3QgYXUwODI4X2J1ZmZlciB7CiAJLyogY29tbW9uIHY0bCBidWZmZXIgc3R1ZmYgLS0gbXVzdCBiZSBmaXJzdCAqLwotCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgdmI7CisJc3RydWN0IHZiMl9idWZmZXIgdmI7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCi0Jc3RydWN0IGxpc3RfaGVhZCBmcmFtZTsKKwl2b2lkICptZW07CisJdW5zaWduZWQgbG9uZyBsZW5ndGg7CiAJaW50IHRvcF9maWVsZDsKLQlpbnQgcmVjZWl2aW5nOworCS8qIHBvaW50ZXIgdG8gdm1hbGxvYyBtZW1vcnkgYWRkcmVzcyBpbiB2YiAqLworCWNoYXIgKnZiX2J1ZjsKIH07CiAKIHN0cnVjdCBhdTA4MjhfZG1hcXVldWUgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgYWN0aXZlOwotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgcXVldWVkOwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgICAgd3E7Ci0KIAkvKiBDb3VudGVycyB0byBjb250cm9sIGJ1ZmZlciBmaWxsICovCi0JaW50ICAgICAgICAgICAgICAgICAgICAgICAgcG9zOworCWludCAgICAgICAgICAgICAgICAgICAgcG9zOwogfTsKIAogc3RydWN0IGF1MDgyOF9kZXYgewpAQCAtMjIwLDE0ICsyMDksMjYgQEAKIAlzdHJ1Y3QgYXUwODI4X3JjICppcjsKICNlbmRpZgogCi0JaW50IHVzZXJzOwotCXVuc2lnbmVkIGludCByZXNvdXJjZXM7CS8qIHJlc291cmNlcyBpbiB1c2UgKi8KIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZiaV9kZXY7CisKKwkvKiBWaWRlb2J1ZjIgKi8KKwlzdHJ1Y3QgdmIyX3F1ZXVlIHZiX3ZpZHE7CisJc3RydWN0IHZiMl9xdWV1ZSB2Yl92YmlxOworCXN0cnVjdCBtdXRleCB2Yl9xdWV1ZV9sb2NrOworCXN0cnVjdCBtdXRleCB2Yl92YmlfcXVldWVfbG9jazsKKworCXVuc2lnbmVkIGludCBmcmFtZV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgdmJpX2ZyYW1lX2NvdW50OworCiAJc3RydWN0IHRpbWVyX2xpc3QgdmlkX3RpbWVvdXQ7CiAJaW50IHZpZF90aW1lb3V0X3J1bm5pbmc7CiAJc3RydWN0IHRpbWVyX2xpc3QgdmJpX3RpbWVvdXQ7CiAJaW50IHZiaV90aW1lb3V0X3J1bm5pbmc7CisKKwlpbnQgdXNlcnM7CisJaW50IHN0cmVhbWluZ191c2VyczsKKwogCWludCB3aWR0aDsKIAlpbnQgaGVpZ2h0OwogCWludCB2Ymlfd2lkdGg7CkBAIC0yNDIsNyArMjQzLDYgQEAKIAlfX3U4IGlzb2NfaW5fZW5kcG9pbnRhZGRyOwogCXU4IGlzb2NfaW5pdF9vazsKIAlpbnQgZ3JlZW5zY3JlZW5fZGV0ZWN0ZWQ7Ci0JdW5zaWduZWQgaW50IGZyYW1lX2NvdW50OwogCWludCBjdHJsX2ZyZXE7CiAJaW50IGlucHV0X3R5cGU7CiAJaW50IHN0ZF9zZXRfaW5fdHVuZXJfY29yZTsKQEAgLTI3Nyw2ICsyNzcsNyBAQAogCWNoYXIgKmRpZ190cmFuc2Zlcl9idWZmZXJbVVJCX0NPVU5UXTsKIH07CiAKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KICNkZWZpbmUgYXUwODI4X3JlYWQoZGV2LCByZWcpIGF1MDgyOF9yZWFkcmVnKGRldiwgcmVnKQogI2RlZmluZSBhdTA4Mjhfd3JpdGUoZGV2LCByZWcsIHZhbHVlKSBhdTA4Mjhfd3JpdGVyZWcoZGV2LCByZWcsIHZhbHVlKQpAQCAtMzA5LDEzICszMTAsMTUgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGF1MDgyOC12aWRlby5jICovCi1pbnQgYXUwODI4X2FuYWxvZ19yZWdpc3RlcihzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LAorZXh0ZXJuIGludCBhdTA4MjhfYW5hbG9nX3JlZ2lzdGVyKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsCiAJCQkgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKLWludCBhdTA4MjhfYW5hbG9nX3N0cmVhbV9kaXNhYmxlKHN0cnVjdCBhdTA4MjhfZGV2ICpkKTsKLXZvaWQgYXUwODI4X2FuYWxvZ191bnJlZ2lzdGVyKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgYXUwODI4X2FuYWxvZ191bnJlZ2lzdGVyKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpOworZXh0ZXJuIGludCBhdTA4Mjhfc3RhcnRfYW5hbG9nX3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwKKwkJCQkJCXVuc2lnbmVkIGludCBjb3VudCk7CitleHRlcm4gdm9pZCBhdTA4Mjhfc3RvcF92Ymlfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxKTsKICNpZmRlZiBDT05GSUdfVklERU9fQVUwODI4X1Y0TDIKLXZvaWQgYXUwODI4X3Y0bDJfc3VzcGVuZChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KTsKLXZvaWQgYXUwODI4X3Y0bDJfcmVzdW1lKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpOworZXh0ZXJuIHZvaWQgYXUwODI4X3Y0bDJfc3VzcGVuZChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KTsKK2V4dGVybiB2b2lkIGF1MDgyOF92NGwyX3Jlc3VtZShzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgYXUwODI4X3Y0bDJfc3VzcGVuZChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KSB7IH07CiBzdGF0aWMgaW5saW5lIHZvaWQgYXUwODI4X3Y0bDJfcmVzdW1lKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpIHsgfTsKQEAgLTMyOSw3ICszMzIsNyBAQAogdm9pZCBhdTA4MjhfZHZiX3Jlc3VtZShzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KTsKIAogLyogYXUwODI4LXZiaS5jICovCi1leHRlcm4gc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBhdTA4MjhfdmJpX3FvcHM7CitleHRlcm4gc3RydWN0IHZiMl9vcHMgYXUwODI4X3ZiaV9xb3BzOwogCiAjZGVmaW5lIGRwcmludGsobGV2ZWwsIGZtdCwgYXJnLi4uKVwKIAlkbyB7IGlmIChhdTA4MjhfZGVidWcgJiBsZXZlbClcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9jeDIzMXh4L2N4MjMxeHgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2N4MjMxeHgvY3gyMzF4eC1jYXJkcy5jCmluZGV4IGFlMDVkNTkuLmRhMDM3MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2N4MjMxeHgvY3gyMzF4eC1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2N4MjMxeHgvY3gyMzF4eC1jYXJkcy5jCkBAIC0xNDAzLDcgKzE0MDMsNiBAQAogCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Fzc29jX2Rlc2NyaXB0b3IgKmFzc29jX2Rlc2M7CiAKIAlpZm51bSA9IGludGVyZmFjZS0+YWx0c2V0dGluZ1swXS5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7Ci0JdWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CiAKIAkvKgogCSAqIEludGVyZmFjZSBudW1iZXIgMCAtIElSIGludGVyZmFjZSAoaGFuZGxlZCBieSBtY2V1c2IgZHJpdmVyKQpAQCAtMTQyNCwxMSArMTQyMywxMyBAQAogCQl9CiAJfSB3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChuciwgJmN4MjMxeHhfZGV2dXNlZCkpOwogCisJdWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KIAlkZXYgPSBkZXZtX2t6YWxsb2MoJnVkZXYtPmRldiwgc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKLQkJY2xlYXJfYml0KG5yLCAmY3gyMzF4eF9kZXZ1c2VkKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2lmOwogCX0KIAogCXNucHJpbnRmKGRldi0+bmFtZSwgMjksICJjeDIzMXh4ICMlZCIsIG5yKTsKQEAgLTE1ODIsNyArMTU4Myw3IEBACiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogZXJyX2lmOgogCXVzYl9wdXRfZGV2KHVkZXYpOwotCWNsZWFyX2JpdChkZXYtPmRldm5vLCAmY3gyMzF4eF9kZXZ1c2VkKTsKKwljbGVhcl9iaXQobnIsICZjeDIzMXh4X2RldnVzZWQpOwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2N4MjMxeHgvY3gyMzF4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS91c2IvY3gyMzF4eC9jeDIzMXh4LXZpZGVvLmMKaW5kZXggNTNjYTEyYy4uZWNlYTc2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvY3gyMzF4eC9jeDIzMXh4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvY3gyMzF4eC9jeDIzMXh4LXZpZGVvLmMKQEAgLTIwNjIsNyArMjA2Miw2IEBACiAJKnZmZCA9ICp0ZW1wbGF0ZTsKIAl2ZmQtPnY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7CiAJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7Ci0JdmZkLT5kZWJ1ZyA9IHZpZGVvX2RlYnVnOwogCXZmZC0+bG9jayA9ICZkZXYtPmxvY2s7CiAKIAlzbnByaW50Zih2ZmQtPm5hbWUsIHNpemVvZih2ZmQtPm5hbWUpLCAiJXMgJXMiLCBkZXYtPm5hbWUsIHR5cGVfbmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9jeDIzMXh4L2N4MjMxeHguaCBiL2RyaXZlcnMvbWVkaWEvdXNiL2N4MjMxeHgvY3gyMzF4eC5oCmluZGV4IGY5ZTI2MmViLi42ZDZmM2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9jeDIzMXh4L2N4MjMxeHguaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi9jeDIzMXh4L2N4MjMxeHguaApAQCAtNTMyLDE1ICs1MzIsNyBAQAogCXVuc2lnbmVkIGludCAqYWx0X21heF9wa3Rfc2l6ZTsJLyogYXJyYXkgb2Ygd01heFBhY2tldFNpemUgKi8KIAl1MTYgZW5kX3BvaW50X2FkZHI7CiB9OwotLyoKLXN0cnVjdCBjeDIzODg1X2RtYXF1ZXVlIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIGFjdGl2ZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgIHF1ZXVlZDsKLQlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgIHRpbWVvdXQ7Ci0Jc3RydWN0IGJ0Y3hfcmlzY21lbSAgICBzdG9wcGVyOwotCXUzMiAgICAgICAgICAgICAgICAgICAgY291bnQ7Ci19OwotKi8KKwogc3RydWN0IGN4MjMxeHhfdHNwb3J0IHsKIAlzdHJ1Y3QgY3gyMzF4eCAqZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL2R2Yl91c2IuaCBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvZHZiX3VzYi5oCmluZGV4IDE0ZTExMWUuLjQxYzYzNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvZHZiX3VzYi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvZHZiX3VzYi5oCkBAIC0zNTQsNiArMzU0LDcgQEAKICAqIEBuYW1lOiBkZXZpY2UgbmFtZQogICogQHJjX21hcDogbmFtZSBvZiByYyBjb2RlcyB0YWJsZQogICogQHJjX3BvbGxpbmdfYWN0aXZlOiBzZXQgd2hlbiBSQyBwb2xsaW5nIGlzIGFjdGl2ZQorICogQGludGY6IHBvaW50ZXIgdG8gdGhlIGRldmljZSdzIHN0cnVjdCB1c2JfaW50ZXJmYWNlCiAgKiBAdWRldjogcG9pbnRlciB0byB0aGUgZGV2aWNlJ3Mgc3RydWN0IHVzYl9kZXZpY2UKICAqIEByYzogcmVtb3RlIGNvbnRyb2xsZXIgY29uZmlndXJhdGlvbgogICogQHBvd2VyZWQ6IGluZGljYXRlZCB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgcG93ZXIgb3Igbm90CkBAIC0zNzAsNiArMzcxLDcgQEAKIAljb25zdCBjaGFyICpuYW1lOwogCWNvbnN0IGNoYXIgKnJjX21hcDsKIAlib29sIHJjX3BvbGxpbmdfYWN0aXZlOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCXN0cnVjdCBkdmJfdXNiX3JjIHJjOwogCWludCBwb3dlcmVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9kdmJfdXNiX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvZHZiX3VzYl9jb3JlLmMKaW5kZXggMTk1MGYzNy4uOTkxM2UwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9kdmJfdXNiX2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL2R2Yl91c2JfY29yZS5jCkBAIC04NjgsNiArODY4LDcgQEAKIAkJZ290byBlcnI7CiAJfQogCisJZC0+aW50ZiA9IGludGY7CiAJZC0+bmFtZSA9IGRyaXZlcl9pbmZvLT5uYW1lOwogCWQtPnJjX21hcCA9IGRyaXZlcl9pbmZvLT5yY19tYXA7CiAJZC0+dWRldiA9IHVkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL2xtZWRtMDQuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbG1lZG0wNC5jCmluZGV4IDk5NGRlNTMuLjVkZTZmN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbG1lZG0wNC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbG1lZG0wNC5jCkBAIC0xMjYsOSArMTI2LDkgQEAKIAogc3RydWN0IGxtZTI1MTBfc3RhdGUgewogCXVuc2lnbmVkIGxvbmcgaW50X3VyYl9kdWU7CisJZmVfc3RhdHVzX3QgbG9ja19zdGF0dXM7CiAJdTggaWQ7CiAJdTggdHVuZXJfY29uZmlnOwotCXU4IHNpZ25hbF9sb2NrOwogCXU4IHNpZ25hbF9sZXZlbDsKIAl1OCBzaWduYWxfc247CiAJdTggdGltZV9rZXk7CkBAIC0xNDMsNiArMTQzLDEyIEBACiAJdm9pZCAqYnVmZmVyOwogCXN0cnVjdCB1cmIgKmxtZV91cmI7CiAJdm9pZCAqdXNiX2J1ZmZlcjsKKwkvKiBGcm9udGVuZCBvcmlnaW5hbCBjYWxscyAqLworCWludCAoKmZlX3JlYWRfc3RhdHVzKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIGZlX3N0YXR1c190ICopOworCWludCAoKmZlX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHUxNiAqKTsKKwlpbnQgKCpmZV9yZWFkX3Nucikoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCB1MTYgKik7CisJaW50ICgqZmVfcmVhZF9iZXIpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTMyICopOworCWludCAoKmZlX3JlYWRfdWNibG9ja3MpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTMyICopOwogCWludCAoKmZlX3NldF92b2x0YWdlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIGZlX3NlY192b2x0YWdlX3QpOwogCXU4IGR2Yl91c2JfbG1lMjUxMF9maXJtd2FyZTsKIH07CkBAIC0yNTgsNiArMjY0LDcgQEAKIAlzdGF0aWMgdTggKmlidWYsICpyYnVmOwogCWludCBpID0gMCwgb2Zmc2V0OwogCXUzMiBrZXk7CisJdTggc2lnbmFsX2xvY2sgPSAwOwogCiAJc3dpdGNoIChsbWVfdXJiLT5zdGF0dXMpIHsKIAljYXNlIDA6CkBAIC0yOTgsOCArMzA1LDcgQEAKIAkJY2FzZSAweGJiOgogCQkJc3dpdGNoIChzdC0+dHVuZXJfY29uZmlnKSB7CiAJCQljYXNlIFRVTkVSX0xHOgotCQkJCWlmIChpYnVmWzJdID4gMCkKLQkJCQkJc3QtPnNpZ25hbF9sb2NrID0gaWJ1ZlsyXTsKKwkJCQlzaWduYWxfbG9jayA9IGlidWZbMl0gJiBCSVQoNSk7CiAJCQkJc3QtPnNpZ25hbF9sZXZlbCA9IGlidWZbNF07CiAJCQkJc3QtPnNpZ25hbF9zbiA9IGlidWZbM107CiAJCQkJc3QtPnRpbWVfa2V5ID0gaWJ1Zls3XTsKQEAgLTMwOCwyOSArMzE0LDI5IEBACiAJCQljYXNlIFRVTkVSX1MwMTk0OgogCQkJCS8qIFR3ZWFrIGZvciBlYXJsaWVyIGZpcm13YXJlKi8KIAkJCQlpZiAoaWJ1ZlsxXSA9PSAweDAzKSB7Ci0JCQkJCWlmIChpYnVmWzJdID4gMSkKLQkJCQkJCXN0LT5zaWduYWxfbG9jayA9IGlidWZbMl07CisJCQkJCXNpZ25hbF9sb2NrID0gaWJ1ZlsyXSAmIEJJVCg0KTsKIAkJCQkJc3QtPnNpZ25hbF9sZXZlbCA9IGlidWZbM107CiAJCQkJCXN0LT5zaWduYWxfc24gPSBpYnVmWzRdOwogCQkJCX0gZWxzZSB7CiAJCQkJCXN0LT5zaWduYWxfbGV2ZWwgPSBpYnVmWzRdOwogCQkJCQlzdC0+c2lnbmFsX3NuID0gaWJ1Zls1XTsKLQkJCQkJc3QtPnNpZ25hbF9sb2NrID0KLQkJCQkJCShzdC0+c2lnbmFsX2xvY2sgJiAweGY3KSArCi0JCQkJCQkoKGlidWZbMl0gJiAweDAxKSA8PCAweDAzKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQljYXNlIFRVTkVSX1JTMjAwMDoKLQkJCQlpZiAoaWJ1ZlsyXSAmIDB4MSkKLQkJCQkJc3QtPnNpZ25hbF9sb2NrID0gMHhmZjsKLQkJCQllbHNlCi0JCQkJCXN0LT5zaWduYWxfbG9jayA9IDB4MDA7CisJCQkJc2lnbmFsX2xvY2sgPSBpYnVmWzJdICYgMHhlZTsKIAkJCQlzdC0+c2lnbmFsX2xldmVsID0gaWJ1Zls1XTsKIAkJCQlzdC0+c2lnbmFsX3NuID0gaWJ1Zls0XTsKIAkJCQlzdC0+dGltZV9rZXkgPSBpYnVmWzddOwogCQkJZGVmYXVsdDoKIAkJCQlicmVhazsKIAkJCX0KKworCQkJLyogSW50ZXJydXB0IHdpbGwgYWxzbyB0aHJvdyBqdXN0IEJJVCAwIGFzIGxvY2sgKi8KKwkJCXNpZ25hbF9sb2NrIHw9IGlidWZbMl0gJiBCSVQoMCk7CisKKwkJCWlmICghc2lnbmFsX2xvY2spCisJCQkJc3QtPmxvY2tfc3RhdHVzICY9IH5GRV9IQVNfTE9DSzsKKwogCQkJZGVidWdfZGF0YV9zbmlwZXQoNSwgIklOVCBSZW1vdGUgZGF0YSBzbmlwZXQgaW4iLCBpYnVmKTsKIAkJYnJlYWs7CiAJCWNhc2UgMHhjYzoKQEAgLTM0NCwxNSArMzUwLDE3IEBACiAKIAl1c2Jfc3VibWl0X3VyYihsbWVfdXJiLCBHRlBfQVRPTUlDKTsKIAotCS8qIGludGVycnVwdCB1cmIgaXMgZHVlIGV2ZXJ5IDQ4IG1zZWNzIHdoaWxlIHN0cmVhbWluZwotCSAqCWFkZCAxMm1zZWNzIGZvciBzeXN0ZW0gbGFnICovCi0Jc3QtPmludF91cmJfZHVlID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNjApOworCS8qIEludGVycnVwdCB1cmIgaXMgZHVlIGV2ZXJ5IDQ4IG1zZWNzIHdoaWxlIHN0cmVhbWluZyB0aGUgYnVmZmVyCisJICogc3RvcmVzIHVwIHRvIDQgcGVyaW9kcyBpZiBtaXNzZWQuIEFsbG93IDIwMCBtc2VjIGZvciBuZXh0IGludGVycnVwdC4KKwkgKi8KKwlzdC0+aW50X3VyYl9kdWUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMDApOwogfQogCiBzdGF0aWMgaW50IGxtZTI1MTBfaW50X3JlYWQoc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKIHsKIAlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBhZGFwX3RvX2QoYWRhcCk7CiAJc3RydWN0IGxtZTI1MTBfc3RhdGUgKmxtZV9pbnQgPSBhZGFwX3RvX3ByaXYoYWRhcCk7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKIAogCWxtZV9pbnQtPmxtZV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwogCkBAIC0zNzQsNiArMzgyLDEyIEBACiAJCQkJYWRhcCwKIAkJCQk4KTsKIAorCS8qIFF1aXJrIG9mIHBpcGUgcmVwb3J0aW5nIFBJUEVfQlVMSyBidXQgYmVoYXZlcyBhcyBpbnRlcnJ1cHQgKi8KKwllcCA9IHVzYl9waXBlX2VuZHBvaW50KGQtPnVkZXYsIGxtZV9pbnQtPmxtZV91cmItPnBpcGUpOworCisJaWYgKHVzYl9lbmRwb2ludF90eXBlKCZlcC0+ZGVzYykgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykKKwkJbG1lX2ludC0+bG1lX3VyYi0+cGlwZSA9IHVzYl9yY3ZidWxrcGlwZShkLT51ZGV2LCAweGEpLAorCiAJbG1lX2ludC0+bG1lX3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CiAKIAl1c2Jfc3VibWl0X3VyYihsbWVfaW50LT5sbWVfdXJiLCBHRlBfQVRPTUlDKTsKQEAgLTQ0OSwxNzAgKzQ2MywxMyBAQAogc3RhdGljIGludCBsbWUyNTEwX21zZyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsCiAJCXU4ICp3YnVmLCBpbnQgd2xlbiwgdTggKnJidWYsIGludCBybGVuKQogewotCWludCByZXQgPSAwOwogCXN0cnVjdCBsbWUyNTEwX3N0YXRlICpzdCA9IGQtPnByaXY7CiAKLQlpZiAoc3QtPmkyY190YWxrX29ub2ZmID09IDEpIHsKKwlzdC0+aTJjX3RhbGtfb25vZmYgPSAxOwogCi0JCXJldCA9IGxtZTI1MTBfdXNiX3RhbGsoZCwgd2J1Ziwgd2xlbiwgcmJ1Ziwgcmxlbik7Ci0KLQkJc3dpdGNoIChzdC0+dHVuZXJfY29uZmlnKSB7Ci0JCWNhc2UgVFVORVJfTEc6Ci0JCQlpZiAod2J1ZlsyXSA9PSAweDFjKSB7Ci0JCQkJaWYgKHdidWZbM10gPT0gMHgwZSkgewotCQkJCQlzdC0+c2lnbmFsX2xvY2sgPSByYnVmWzFdOwotCQkJCQlpZiAoKHN0LT5zdHJlYW1fb24gJiAxKSAmJgotCQkJCQkJKHN0LT5zaWduYWxfbG9jayAmIDB4MTApKSB7Ci0JCQkJCQlsbWUyNTEwX3N0cmVhbV9yZXN0YXJ0KGQpOwotCQkJCQkJc3QtPmkyY190YWxrX29ub2ZmID0gMDsKLQkJCQkJfQotCQkJCQltc2xlZXAoODApOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFRVTkVSX1M3Mzk1OgotCQkJaWYgKHdidWZbMl0gPT0gMHhkMCkgewotCQkJCWlmICh3YnVmWzNdID09IDB4MjQpIHsKLQkJCQkJc3QtPnNpZ25hbF9sb2NrID0gcmJ1ZlsxXTsKLQkJCQkJaWYgKChzdC0+c3RyZWFtX29uICYgMSkgJiYKLQkJCQkJCShzdC0+c2lnbmFsX2xvY2sgJiAweDgpKSB7Ci0JCQkJCQlsbWUyNTEwX3N0cmVhbV9yZXN0YXJ0KGQpOwotCQkJCQkJc3QtPmkyY190YWxrX29ub2ZmID0gMDsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFRVTkVSX1MwMTk0OgotCQkJaWYgKHdidWZbMl0gPT0gMHhkMCkgewotCQkJCWlmICh3YnVmWzNdID09IDB4MWIpIHsKLQkJCQkJc3QtPnNpZ25hbF9sb2NrID0gcmJ1ZlsxXTsKLQkJCQkJaWYgKChzdC0+c3RyZWFtX29uICYgMSkgJiYKLQkJCQkJCShzdC0+c2lnbmFsX2xvY2sgJiAweDgpKSB7Ci0JCQkJCQlsbWUyNTEwX3N0cmVhbV9yZXN0YXJ0KGQpOwotCQkJCQkJc3QtPmkyY190YWxrX29ub2ZmID0gMDsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFRVTkVSX1JTMjAwMDoKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogVE9ETyByZXdyaXRlIHRoaXMgc2VjdGlvbiAqLwotCQlzd2l0Y2ggKHN0LT50dW5lcl9jb25maWcpIHsKLQkJY2FzZSBUVU5FUl9MRzoKLQkJCXN3aXRjaCAod2J1ZlszXSkgewotCQkJY2FzZSAweDBlOgotCQkJCXJidWZbMF0gPSAweDU1OwotCQkJCXJidWZbMV0gPSBzdC0+c2lnbmFsX2xvY2s7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4NDM6Ci0JCQkJcmJ1ZlswXSA9IDB4NTU7Ci0JCQkJcmJ1ZlsxXSA9IHN0LT5zaWduYWxfbGV2ZWw7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4MWM6Ci0JCQkJcmJ1ZlswXSA9IDB4NTU7Ci0JCQkJcmJ1ZlsxXSA9IHN0LT5zaWduYWxfc247Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4MTU6Ci0JCQljYXNlIDB4MTY6Ci0JCQljYXNlIDB4MTc6Ci0JCQljYXNlIDB4MTg6Ci0JCQkJcmJ1ZlswXSA9IDB4NTU7Ci0JCQkJcmJ1ZlsxXSA9IDB4MDA7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWxtZTI1MTBfdXNiX3RhbGsoZCwgd2J1Ziwgd2xlbiwgcmJ1Ziwgcmxlbik7Ci0JCQkJc3QtPmkyY190YWxrX29ub2ZmID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFRVTkVSX1M3Mzk1OgotCQkJc3dpdGNoICh3YnVmWzNdKSB7Ci0JCQljYXNlIDB4MTA6Ci0JCQkJcmJ1ZlswXSA9IDB4NTU7Ci0JCQkJcmJ1ZlsxXSA9IChzdC0+c2lnbmFsX2xldmVsICYgMHg4MCkKLQkJCQkJCT8gMCA6IChzdC0+c2lnbmFsX2xldmVsICogMik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4MmQ6Ci0JCQkJcmJ1ZlswXSA9IDB4NTU7Ci0JCQkJcmJ1ZlsxXSA9IHN0LT5zaWduYWxfc247Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDB4MjQ6Ci0JCQkJcmJ1ZlswXSA9IDB4NTU7Ci0JCQkJcmJ1ZlsxXSA9IHN0LT5zaWduYWxfbG9jazsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHgyZToKLQkJCWNhc2UgMHgyNjoKLQkJCWNhc2UgMHgyNzoKLQkJCQlyYnVmWzBdID0gMHg1NTsKLQkJCQlyYnVmWzFdID0gMHgwMDsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJbG1lMjUxMF91c2JfdGFsayhkLCB3YnVmLCB3bGVuLCByYnVmLCBybGVuKTsKLQkJCQlzdC0+aTJjX3RhbGtfb25vZmYgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgVFVORVJfUzAxOTQ6Ci0JCQlzd2l0Y2ggKHdidWZbM10pIHsKLQkJCWNhc2UgMHgxODoKLQkJCQlyYnVmWzBdID0gMHg1NTsKLQkJCQlyYnVmWzFdID0gKHN0LT5zaWduYWxfbGV2ZWwgJiAweDgwKQotCQkJCQkJPyAwIDogKHN0LT5zaWduYWxfbGV2ZWwgKiAyKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHgyNDoKLQkJCQlyYnVmWzBdID0gMHg1NTsKLQkJCQlyYnVmWzFdID0gc3QtPnNpZ25hbF9zbjsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHgxYjoKLQkJCQlyYnVmWzBdID0gMHg1NTsKLQkJCQlyYnVmWzFdID0gc3QtPnNpZ25hbF9sb2NrOwotCQkJCWJyZWFrOwotCQkJY2FzZSAweDE5OgotCQkJY2FzZSAweDI1OgotCQkJY2FzZSAweDFlOgotCQkJY2FzZSAweDFkOgotCQkJCXJidWZbMF0gPSAweDU1OwotCQkJCXJidWZbMV0gPSAweDAwOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlsbWUyNTEwX3VzYl90YWxrKGQsIHdidWYsIHdsZW4sIHJidWYsIHJsZW4pOwotCQkJCXN0LT5pMmNfdGFsa19vbm9mZiA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBUVU5FUl9SUzIwMDA6Ci0JCQlzd2l0Y2ggKHdidWZbM10pIHsKLQkJCWNhc2UgMHg4YzoKLQkJCQlyYnVmWzBdID0gMHg1NTsKLQkJCQlyYnVmWzFdID0gc3QtPnNpZ25hbF9sb2NrOwotCi0JCQkJLyogSWYgaW50X3VyYl9kdWUgb3ZlcmR1ZQotCQkJCSAqICBzZXQgcmJ1ZlsxXSB0byAwIHRvIGNsZWFyIGxvY2sgKi8KLQkJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAlzdC0+aW50X3VyYl9kdWUpKQotCQkJCQlyYnVmWzFdID0gMDsKLQotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlsbWUyNTEwX3VzYl90YWxrKGQsIHdidWYsIHdsZW4sIHJidWYsIHJsZW4pOwotCQkJCXN0LT5pMmNfdGFsa19vbm9mZiA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0JCWRlYl9pbmZvKDQsICJJMkMgRnJvbSBJbnRlcnJ1cHQgTWVzc2FnZSBvdXQoJTAyeCkgaW4oJTAyeCkiLAotCQkJCXdidWZbM10sIHJidWZbMV0pOwotCi0JfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbG1lMjUxMF91c2JfdGFsayhkLCB3YnVmLCB3bGVuLCByYnVmLCBybGVuKTsKIH0KIAotCiBzdGF0aWMgaW50IGxtZTI1MTBfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwLCBzdHJ1Y3QgaTJjX21zZyBtc2dbXSwKIAkJCQkgaW50IG51bSkKIHsKQEAgLTkzNSwyNiArNzkyLDggQEAKIAkuc2V0X3N5bWJvbF9yYXRlID0gc2hhcnBfejAxOTRhX3NldF9zeW1ib2xfcmF0ZSwKIH07CiAKLXN0YXRpYyBpbnQgZG0wNF9yczIwMDBfc2V0X3RzX3BhcmFtKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAotCWludCBjYWxsZXIpCi17Ci0Jc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCA9IGZlX3RvX2FkYXAoZmUpOwotCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGFkYXBfdG9fZChhZGFwKTsKLQlzdHJ1Y3QgbG1lMjUxMF9zdGF0ZSAqc3QgPSBkLT5wcml2OwotCi0JbXV0ZXhfbG9jaygmZC0+aTJjX211dGV4KTsKLQlpZiAoKHN0LT5pMmNfdGFsa19vbm9mZiA9PSAxKSAmJiAoc3QtPnN0cmVhbV9vbiAmIDEpKSB7Ci0JCXN0LT5pMmNfdGFsa19vbm9mZiA9IDA7Ci0JCWxtZTI1MTBfc3RyZWFtX3Jlc3RhcnQoZCk7Ci0JfQotCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IG04OHJzMjAwMF9jb25maWcgbTg4cnMyMDAwX2NvbmZpZyA9IHsKLQkuZGVtb2RfYWRkciA9IDB4NjgsCi0JLnNldF90c19wYXJhbXMgPSBkbTA0X3JzMjAwMF9zZXRfdHNfcGFyYW0sCisJLmRlbW9kX2FkZHIgPSAweDY4CiB9OwogCiBzdGF0aWMgc3RydWN0IHRzMjAyMF9jb25maWcgdHMyMDIwX2NvbmZpZyA9IHsKQEAgLTk5OCwyNyArODM3LDEwMSBAQAogCXJldHVybiAocmV0IDwgMCkgPyAtRU5PREVWIDogMDsKIH0KIAotc3RhdGljIGludCBkbTA0X3JzMjAwMF9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQl1MTYgKnN0cmVuZ3RoKQorc3RhdGljIGludCBkbTA0X3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQoreworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGZlX3RvX2QoZmUpOworCXN0cnVjdCBsbWUyNTEwX3N0YXRlICpzdCA9IGQtPnByaXY7CisJaW50IHJldCA9IDA7CisKKwlpZiAoc3QtPmkyY190YWxrX29ub2ZmKSB7CisJCWlmIChzdC0+ZmVfcmVhZF9zdGF0dXMpIHsKKwkJCXJldCA9IHN0LT5mZV9yZWFkX3N0YXR1cyhmZSwgc3RhdHVzKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKworCQlzdC0+bG9ja19zdGF0dXMgPSAqc3RhdHVzOworCisJCWlmICgqc3RhdHVzICYgRkVfSEFTX0xPQ0sgJiYgc3QtPnN0cmVhbV9vbikgeworCQkJbXV0ZXhfbG9jaygmZC0+aTJjX211dGV4KTsKKworCQkJc3QtPmkyY190YWxrX29ub2ZmID0gMDsKKwkJCXJldCA9IGxtZTI1MTBfc3RyZWFtX3Jlc3RhcnQoZCk7CisKKwkJCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKKwkJfQorCisJCXJldHVybiByZXQ7CisJfQorCisJLyogVGltZW91dCBvZiBpbnRlcnJ1cHQgcmVhY2hlZCBvbiBSUzIwMDAgKi8KKwlpZiAoc3QtPnR1bmVyX2NvbmZpZyA9PSBUVU5FUl9SUzIwMDAgJiYKKwkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBzdC0+aW50X3VyYl9kdWUpKQorCQlzdC0+bG9ja19zdGF0dXMgJj0gfkZFX0hBU19MT0NLOworCisJKnN0YXR1cyA9IHN0LT5sb2NrX3N0YXR1czsKKworCWlmICghKCpzdGF0dXMgJiBGRV9IQVNfTE9DSykpCisJCXN0LT5pMmNfdGFsa19vbm9mZiA9IDE7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRtMDRfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc3RyZW5ndGgpCiB7CiAJc3RydWN0IGxtZTI1MTBfc3RhdGUgKnN0ID0gZmVfdG9fcHJpdihmZSk7CiAKLQkqc3RyZW5ndGggPSAodTE2KSgodTMyKXN0LT5zaWduYWxfbGV2ZWwgKiAweGZmZmYgLyAweGZmKTsKKwlpZiAoc3QtPmZlX3JlYWRfc2lnbmFsX3N0cmVuZ3RoICYmICFzdC0+c3RyZWFtX29uKQorCQlyZXR1cm4gc3QtPmZlX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKGZlLCBzdHJlbmd0aCk7CisKKwlzd2l0Y2ggKHN0LT50dW5lcl9jb25maWcpIHsKKwljYXNlIFRVTkVSX0xHOgorCQkqc3RyZW5ndGggPSAweGZmIC0gc3QtPnNpZ25hbF9sZXZlbDsKKwkJKnN0cmVuZ3RoIHw9ICpzdHJlbmd0aCA8PCA4OworCQlicmVhazsKKwkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFRVTkVSX1M3Mzk1OgorCWNhc2UgVFVORVJfUzAxOTQ6CisJCSpzdHJlbmd0aCA9IDB4ZmZmZiAtICgoKHN0LT5zaWduYWxfbGV2ZWwgKiAyKSA8PCA4KSAqIDUgLyA0KTsKKwkJYnJlYWs7CisJY2FzZSBUVU5FUl9SUzIwMDA6CisJCSpzdHJlbmd0aCA9ICh1MTYpKCh1MzIpc3QtPnNpZ25hbF9sZXZlbCAqIDB4ZmZmZiAvIDB4ZmYpOworCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRtMDRfcnMyMDAwX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKK3N0YXRpYyBpbnQgZG0wNF9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCiB7CiAJc3RydWN0IGxtZTI1MTBfc3RhdGUgKnN0ID0gZmVfdG9fcHJpdihmZSk7CiAKLQkqc25yID0gKHUxNikoKHUzMilzdC0+c2lnbmFsX3NuICogMHhmZmZmIC8gMHg3Zik7CisJaWYgKHN0LT5mZV9yZWFkX3NuciAmJiAhc3QtPnN0cmVhbV9vbikKKwkJcmV0dXJuIHN0LT5mZV9yZWFkX3NucihmZSwgc25yKTsKKworCXN3aXRjaCAoc3QtPnR1bmVyX2NvbmZpZykgeworCWNhc2UgVFVORVJfTEc6CisJCSpzbnIgPSAweGZmIC0gc3QtPnNpZ25hbF9zbjsKKwkJKnNuciB8PSAqc25yIDw8IDg7CisJCWJyZWFrOworCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgVFVORVJfUzczOTU6CisJY2FzZSBUVU5FUl9TMDE5NDoKKwkJKnNuciA9ICh1MTYpKCgweGZmIC0gc3QtPnNpZ25hbF9zbiAtIDB4YTEpICogMykgPDwgODsKKwkJYnJlYWs7CisJY2FzZSBUVU5FUl9SUzIwMDA6CisJCSpzbnIgPSAodTE2KSgodTMyKXN0LT5zaWduYWxfc24gKiAweGZmZmYgLyAweDdmKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBkbTA0X3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKIHsKKwlzdHJ1Y3QgbG1lMjUxMF9zdGF0ZSAqc3QgPSBmZV90b19wcml2KGZlKTsKKworCWlmIChzdC0+ZmVfcmVhZF9iZXIgJiYgIXN0LT5zdHJlYW1fb24pCisJCXJldHVybiBzdC0+ZmVfcmVhZF9iZXIoZmUsIGJlcik7CisKIAkqYmVyID0gMDsKIAogCXJldHVybiAwOwpAQCAtMTAyNiw2ICs5MzksMTEgQEAKIAogc3RhdGljIGludCBkbTA0X3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdWNibG9ja3MpCiB7CisJc3RydWN0IGxtZTI1MTBfc3RhdGUgKnN0ID0gZmVfdG9fcHJpdihmZSk7CisKKwlpZiAoc3QtPmZlX3JlYWRfdWNibG9ja3MgJiYgIXN0LT5zdHJlYW1fb24pCisJCXJldHVybiBzdC0+ZmVfcmVhZF91Y2Jsb2NrcyhmZSwgdWNibG9ja3MpOworCiAJKnVjYmxvY2tzID0gMDsKIAogCXJldHVybiAwOwpAQCAtMTExOSwxNSArMTAzNyw2IEBACiAJCQlzdC0+dHVuZXJfY29uZmlnID0gVFVORVJfUlMyMDAwOwogCQkJc3QtPmZlX3NldF92b2x0YWdlID0KIAkJCQlhZGFwLT5mZVswXS0+b3BzLnNldF92b2x0YWdlOwotCi0JCQlhZGFwLT5mZVswXS0+b3BzLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0KLQkJCQlkbTA0X3JzMjAwMF9yZWFkX3NpZ25hbF9zdHJlbmd0aDsKLQkJCWFkYXAtPmZlWzBdLT5vcHMucmVhZF9zbnIgPQotCQkJCWRtMDRfcnMyMDAwX3JlYWRfc25yOwotCQkJYWRhcC0+ZmVbMF0tPm9wcy5yZWFkX2JlciA9Ci0JCQkJZG0wNF9yZWFkX2JlcjsKLQkJCWFkYXAtPmZlWzBdLT5vcHMucmVhZF91Y2Jsb2NrcyA9Ci0JCQkJZG0wNF9yZWFkX3VjYmxvY2tzOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTExNDYsNyArMTA1NSwxOSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlzdC0+ZmVfcmVhZF9zdGF0dXMgPSBhZGFwLT5mZVswXS0+b3BzLnJlYWRfc3RhdHVzOworCXN0LT5mZV9yZWFkX3NpZ25hbF9zdHJlbmd0aCA9IGFkYXAtPmZlWzBdLT5vcHMucmVhZF9zaWduYWxfc3RyZW5ndGg7CisJc3QtPmZlX3JlYWRfc25yID0gYWRhcC0+ZmVbMF0tPm9wcy5yZWFkX3NucjsKKwlzdC0+ZmVfcmVhZF9iZXIgPSBhZGFwLT5mZVswXS0+b3BzLnJlYWRfYmVyOworCXN0LT5mZV9yZWFkX3VjYmxvY2tzID0gYWRhcC0+ZmVbMF0tPm9wcy5yZWFkX3VjYmxvY2tzOworCisJYWRhcC0+ZmVbMF0tPm9wcy5yZWFkX3N0YXR1cyA9IGRtMDRfcmVhZF9zdGF0dXM7CisJYWRhcC0+ZmVbMF0tPm9wcy5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9IGRtMDRfcmVhZF9zaWduYWxfc3RyZW5ndGg7CisJYWRhcC0+ZmVbMF0tPm9wcy5yZWFkX3NuciA9IGRtMDRfcmVhZF9zbnI7CisJYWRhcC0+ZmVbMF0tPm9wcy5yZWFkX2JlciA9IGRtMDRfcmVhZF9iZXI7CisJYWRhcC0+ZmVbMF0tPm9wcy5yZWFkX3VjYmxvY2tzID0gZG0wNF9yZWFkX3VjYmxvY2tzOwogCWFkYXAtPmZlWzBdLT5vcHMuc2V0X3ZvbHRhZ2UgPSBkbTA0X2xtZTI1MTBfc2V0X3ZvbHRhZ2U7CisKIAlyZXQgPSBsbWVfbmFtZShhZGFwKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTI4OCw3ICsxMjA5LDYgQEAKIAogCWlmIChzdC0+dXNiX2J1ZmZlciAhPSBOVUxMKSB7CiAJCXN0LT5pMmNfdGFsa19vbm9mZiA9IDE7Ci0JCXN0LT5zaWduYWxfbG9jayA9IDA7CiAJCXN0LT5zaWduYWxfbGV2ZWwgPSAwOwogCQlzdC0+c2lnbmFsX3NuID0gMDsKIAkJYnVmZmVyID0gc3QtPnVzYl9idWZmZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLWRlbW9kLmMgYi9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLWRlbW9kLmMKaW5kZXggMGE5OGQwNC4uZWNlZmE1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi1kZW1vZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtZGVtb2QuYwpAQCAtNjA0LDkgKzYwNCwzIEBACiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKCIwLjEiKTsKLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtZGVtb2QuaCBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtZGVtb2QuaAppbmRleCAyZDQ1MzBmLi4wYmQ4M2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLWRlbW9kLmgKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi1kZW1vZC5oCkBAIC00Nyw5ICs0NywzIEBACiAjZW5kaWYgLyogQ09ORklHX0RWQl9VU0JfTVhMMTExU0YgKi8KIAogI2VuZGlmIC8qIF9fTVhMMTExU0ZfREVNT0RfSF9fICovCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLWdwaW8uYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtZ3Bpby5jCmluZGV4IGE2MTk0MTAuLjIxODBjMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtZ3Bpby5jCkBAIC03NTUsOSArNzU1LDMgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLWdwaW8uaCBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtZ3Bpby5oCmluZGV4IGI4NWE1NzcuLjE2ZmE0ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtZ3Bpby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtZ3Bpby5oCkBAIC00OCw5ICs0OCwzIEBACiAJCQkJICBlbnVtIG14bDExMXNmX211eF9jb25maWcgcGluX211eF9jb25maWcpOwogCiAjZW5kaWYgLyogX0RWQl9VU0JfTVhMMTExU0ZfR1BJT19IXyAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtaTJjLmMKaW5kZXggYTEwMWQwNi4uMjgzNDk1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLWkyYy5jCkBAIC04NDIsOSArODQyLDMgQEAKIAogCXJldHVybiBpID09IG51bSA/IG51bSA6IC1FUkVNT1RFSU87CiB9Ci0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLWkyYy5oIGIvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi1pMmMuaAppbmRleCA0NjU3NjIxLi5jNDg2ZmUwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi1pMmMuaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLWkyYy5oCkBAIC0yNyw5ICsyNywzIEBACiAJCSAgICAgIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLCBpbnQgbnVtKTsKIAogI2VuZGlmIC8qIF9EVkJfVVNCX01YTDExMVNGX0kyQ19IXyAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi1waHkuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtcGh5LmMKaW5kZXggZjZiMzQ4MC4uNWIwMTkxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi1waHkuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLXBoeS5jCkBAIC0zMzUsOSArMzM1LDMgQEAKIAogCXJldHVybiByZXQ7CiB9Ci0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLXBoeS5oIGIvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi1waHkuaAppbmRleCAwNjQzNzM4Li4yNWFhNGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLXBoeS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtcGh5LmgKQEAgLTQ1LDkgKzQ1LDMgQEAKIAkJCSB1OCBjdXJyZW50X3ZhbHVlLCB1OCBoeXN0ZXJlc2lzX3ZhbHVlKTsKIAogI2VuZGlmIC8qIF9EVkJfVVNCX01YTDExMVNGX1BIWV9IXyAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtcmVnLmgKaW5kZXggODliZjExNS4uMWY0YmZiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi1yZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLXJlZy5oCkBAIC0xNzEsOSArMTcxLDMgQEAKICNkZWZpbmUgVjZfRElHX1JGX1BXUl9NU0JfUkVHICAweDQ3CiAKICNlbmRpZiAvKiBfRFZCX1VTQl9NWEwxMTFTRl9SRUdfSF8gKi8KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtdHVuZXIuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtdHVuZXIuYwppbmRleCBhOGQyYzcwLi40NDQ1NzliIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLXR1bmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi10dW5lci5jCkBAIC01MTUsMTEgKzUxNSwzIEBACiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKCIwLjEiKTsKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLXR1bmVyLmggYi9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLXR1bmVyLmgKaW5kZXggMjA0NmRiMi4uZTZjYWFiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi10dW5lci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YtdHVuZXIuaApAQCAtNzcsMTIgKzc3LDMgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogX19NWEwxMTFTRl9UVU5FUl9IX18gKi8KLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YuYwppbmRleCBjMzQ0N2VhLi5iZWMxMmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi5jCkBAIC0xNDI1LDkgKzE0MjUsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIE1heExpbmVhciBNeEwxMTFTRiIpOwogTU9EVUxFX1ZFUlNJT04oIjEuMCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi5oIGIvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9teGwxMTFzZi5oCmluZGV4IDg1MTZjMDEuLmVlNzBkZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvbXhsMTExc2YuaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL214bDExMXNmLmgKQEAgLTE1Miw5ICsxNTIsMyBAQAogfSkKIAogI2VuZGlmIC8qIF9EVkJfVVNCX01YTDExMVNGX0hfICovCi0KLS8qCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL3J0bDI4eHh1LmMgYi9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL3J0bDI4eHh1LmMKaW5kZXggODk2YTIyNS4uNzdkY2ZkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9ydGwyOHh4dS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvcnRsMjh4eHUuYwpAQCAtMjIsNDIgKzIyLDYgQEAKIAogI2luY2x1ZGUgInJ0bDI4eHh1LmgiCiAKLSNpbmNsdWRlICJydGwyODMwLmgiCi0jaW5jbHVkZSAicnRsMjgzMi5oIgotI2luY2x1ZGUgInJ0bDI4MzJfc2RyLmgiCi0jaW5jbHVkZSAibW44ODQ3Mi5oIgotI2luY2x1ZGUgIm1uODg0NzMuaCIKLQotI2luY2x1ZGUgInF0MTAxMC5oIgotI2luY2x1ZGUgIm10MjA2MC5oIgotI2luY2x1ZGUgIm14bDUwMDVzLmgiCi0jaW5jbHVkZSAiZmMwMDEyLmgiCi0jaW5jbHVkZSAiZmMwMDEzLmgiCi0jaW5jbHVkZSAiZTQwMDAuaCIKLSNpbmNsdWRlICJmYzI1ODAuaCIKLSNpbmNsdWRlICJ0dWE5MDAxLmgiCi0jaW5jbHVkZSAicjgyMHQuaCIKLQotCi0jaWZkZWYgQ09ORklHX01FRElBX0FUVEFDSAotI2RlZmluZSBkdmJfYXR0YWNoX3NkcihGVU5DVElPTiwgQVJHUy4uLikgKHsgXAotCXZvaWQgKl9fciA9IE5VTEw7IFwKLQl0eXBlb2YoJkZVTkNUSU9OKSBfX2EgPSBzeW1ib2xfcmVxdWVzdChGVU5DVElPTik7IFwKLQlpZiAoX19hKSB7IFwKLQkJX19yID0gKHZvaWQgKikgX19hKEFSR1MpOyBcCi0JCWlmIChfX3IgPT0gTlVMTCkgXAotCQkJc3ltYm9sX3B1dChGVU5DVElPTik7IFwKLQl9IFwKLQlfX3I7IFwKLX0pCi0KLSNlbHNlCi0jZGVmaW5lIGR2Yl9hdHRhY2hfc2RyKEZVTkNUSU9OLCBBUkdTLi4uKSAoeyBcCi0JRlVOQ1RJT04oQVJHUyk7IFwKLX0pCi0KLSNlbmRpZgotCiBzdGF0aWMgaW50IHJ0bDI4eHh1X2Rpc2FibGVfcmM7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGlzYWJsZV9yYywgcnRsMjh4eHVfZGlzYWJsZV9yYywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9yYywgImRpc2FibGUgUlRMMjgzMlUgcmVtb3RlIGNvbnRyb2xsZXIiKTsKQEAgLTY1LDIwICsyOSwxNCBAQAogCiBzdGF0aWMgaW50IHJ0bDI4eHh1X2N0cmxfbXNnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgc3RydWN0IHJ0bDI4eHh1X3JlcSAqcmVxKQogeworCXN0cnVjdCBydGwyOHh4dV9kZXYgKmRldiA9IGQtPnByaXY7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgcGlwZTsKIAl1OCByZXF1ZXN0dHlwZTsKLQl1OCAqYnVmOwotCi0JYnVmID0ga21hbGxvYyhyZXEtPnNpemUsIEdGUF9LRVJORUwpOwotCWlmICghYnVmKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOwotCX0KIAogCWlmIChyZXEtPmluZGV4ICYgQ01EX1dSX0ZMQUcpIHsKIAkJLyogd3JpdGUgKi8KLQkJbWVtY3B5KGJ1ZiwgcmVxLT5kYXRhLCByZXEtPnNpemUpOworCQltZW1jcHkoZGV2LT5idWYsIHJlcS0+ZGF0YSwgcmVxLT5zaXplKTsKIAkJcmVxdWVzdHR5cGUgPSAoVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQpOwogCQlwaXBlID0gdXNiX3NuZGN0cmxwaXBlKGQtPnVkZXYsIDApOwogCX0gZWxzZSB7CkBAIC04OCwzMCArNDYsMjMgQEAKIAl9CiAKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZC0+dWRldiwgcGlwZSwgMCwgcmVxdWVzdHR5cGUsIHJlcS0+dmFsdWUsCi0JCQlyZXEtPmluZGV4LCBidWYsIHJlcS0+c2l6ZSwgMTAwMCk7Ci0KKwkJCXJlcS0+aW5kZXgsIGRldi0+YnVmLCByZXEtPnNpemUsIDEwMDApOwogCWR2Yl91c2JfZGJnX3VzYl9jb250cm9sX21zZyhkLT51ZGV2LCAwLCByZXF1ZXN0dHlwZSwgcmVxLT52YWx1ZSwKLQkJCXJlcS0+aW5kZXgsIGJ1ZiwgcmVxLT5zaXplKTsKLQotCWlmIChyZXQgPiAwKQotCQlyZXQgPSAwOwotCi0JLyogcmVhZCByZXF1ZXN0LCBjb3B5IHJldHVybmVkIGRhdGEgdG8gcmV0dXJuIGJ1ZiAqLwotCWlmICghcmV0ICYmIHJlcXVlc3R0eXBlID09IChVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOKSkKLQkJbWVtY3B5KHJlcS0+ZGF0YSwgYnVmLCByZXEtPnNpemUpOwotCi0Ja2ZyZWUoYnVmKTsKLQotCWlmIChyZXQpCisJCQlyZXEtPmluZGV4LCBkZXYtPmJ1ZiwgcmVxLT5zaXplKTsKKwlpZiAocmV0IDwgMCkKIAkJZ290byBlcnI7CiAKLQlyZXR1cm4gcmV0OworCS8qIHJlYWQgcmVxdWVzdCwgY29weSByZXR1cm5lZCBkYXRhIHRvIHJldHVybiBidWYgKi8KKwlpZiAocmVxdWVzdHR5cGUgPT0gKFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfSU4pKQorCQltZW1jcHkocmVxLT5kYXRhLCBkZXYtPmJ1ZiwgcmVxLT5zaXplKTsKKworCXJldHVybiAwOwogZXJyOgotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHJ0bDI4eHhfd3JfcmVncyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUxNiByZWcsIHU4ICp2YWwsIGludCBsZW4pCitzdGF0aWMgaW50IHJ0bDI4eHh1X3dyX3JlZ3Moc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MTYgcmVnLCB1OCAqdmFsLCBpbnQgbGVuKQogewogCXN0cnVjdCBydGwyOHh4dV9yZXEgcmVxOwogCkBAIC0xMjksNyArODAsNyBAQAogCXJldHVybiBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxKTsKIH0KIAotc3RhdGljIGludCBydGwyODMxX3JkX3JlZ3Moc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MTYgcmVnLCB1OCAqdmFsLCBpbnQgbGVuKQorc3RhdGljIGludCBydGwyOHh4dV9yZF9yZWdzKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTE2IHJlZywgdTggKnZhbCwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgcnRsMjh4eHVfcmVxIHJlcTsKIApAQCAtMTQ3LDE3ICs5OCwxNyBAQAogCXJldHVybiBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxKTsKIH0KIAotc3RhdGljIGludCBydGwyOHh4X3dyX3JlZyhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUxNiByZWcsIHU4IHZhbCkKK3N0YXRpYyBpbnQgcnRsMjh4eHVfd3JfcmVnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTE2IHJlZywgdTggdmFsKQogewotCXJldHVybiBydGwyOHh4X3dyX3JlZ3MoZCwgcmVnLCAmdmFsLCAxKTsKKwlyZXR1cm4gcnRsMjh4eHVfd3JfcmVncyhkLCByZWcsICZ2YWwsIDEpOwogfQogCi1zdGF0aWMgaW50IHJ0bDI4eHhfcmRfcmVnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTE2IHJlZywgdTggKnZhbCkKK3N0YXRpYyBpbnQgcnRsMjh4eHVfcmRfcmVnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgdTE2IHJlZywgdTggKnZhbCkKIHsKLQlyZXR1cm4gcnRsMjgzMV9yZF9yZWdzKGQsIHJlZywgdmFsLCAxKTsKKwlyZXR1cm4gcnRsMjh4eHVfcmRfcmVncyhkLCByZWcsIHZhbCwgMSk7CiB9CiAKLXN0YXRpYyBpbnQgcnRsMjh4eF93cl9yZWdfbWFzayhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUxNiByZWcsIHU4IHZhbCwKK3N0YXRpYyBpbnQgcnRsMjh4eHVfd3JfcmVnX21hc2soc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCB1MTYgcmVnLCB1OCB2YWwsCiAJCXU4IG1hc2spCiB7CiAJaW50IHJldDsKQEAgLTE2NSw3ICsxMTYsNyBAQAogCiAJLyogbm8gbmVlZCBmb3IgcmVhZCBpZiB3aG9sZSByZWcgaXMgd3JpdHRlbiAqLwogCWlmIChtYXNrICE9IDB4ZmYpIHsKLQkJcmV0ID0gcnRsMjh4eF9yZF9yZWcoZCwgcmVnLCAmdG1wKTsKKwkJcmV0ID0gcnRsMjh4eHVfcmRfcmVnKGQsIHJlZywgJnRtcCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCkBAIC0xNzQsNyArMTI1LDcgQEAKIAkJdmFsIHw9IHRtcDsKIAl9CiAKLQlyZXR1cm4gcnRsMjh4eF93cl9yZWcoZCwgcmVnLCB2YWwpOworCXJldHVybiBydGwyOHh4dV93cl9yZWcoZCwgcmVnLCB2YWwpOwogfQogCiAvKiBJMkMgKi8KQEAgLTE4Myw3ICsxMzQsNyBAQAogewogCWludCByZXQ7CiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKLQlzdHJ1Y3QgcnRsMjh4eHVfcHJpdiAqcHJpdiA9IGQtPnByaXY7CisJc3RydWN0IHJ0bDI4eHh1X2RldiAqZGV2ID0gZC0+cHJpdjsKIAlzdHJ1Y3QgcnRsMjh4eHVfcmVxIHJlcTsKIAogCS8qCkBAIC0yMjAsNyArMTcxLDcgQEAKIAkJfSBlbHNlIGlmIChtc2dbMF0uYWRkciA9PSAweDEwKSB7CiAJCQkvKiBtZXRob2QgMSAtIGludGVncmF0ZWQgZGVtb2QgKi8KIAkJCXJlcS52YWx1ZSA9IChtc2dbMF0uYnVmWzBdIDw8IDgpIHwgKG1zZ1swXS5hZGRyIDw8IDEpOwotCQkJcmVxLmluZGV4ID0gQ01EX0RFTU9EX1JEIHwgcHJpdi0+cGFnZTsKKwkJCXJlcS5pbmRleCA9IENNRF9ERU1PRF9SRCB8IGRldi0+cGFnZTsKIAkJCXJlcS5zaXplID0gbXNnWzFdLmxlbjsKIAkJCXJlcS5kYXRhID0gJm1zZ1sxXS5idWZbMF07CiAJCQlyZXQgPSBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxKTsKQEAgLTI1NiwxMiArMjA3LDEyIEBACiAJCQkvKiBtZXRob2QgMSAtIGludGVncmF0ZWQgZGVtb2QgKi8KIAkJCWlmIChtc2dbMF0uYnVmWzBdID09IDB4MDApIHsKIAkJCQkvKiBzYXZlIGRlbW9kIHBhZ2UgZm9yIGxhdGVyIGRlbW9kIGFjY2VzcyAqLwotCQkJCXByaXYtPnBhZ2UgPSBtc2dbMF0uYnVmWzFdOworCQkJCWRldi0+cGFnZSA9IG1zZ1swXS5idWZbMV07CiAJCQkJcmV0ID0gMDsKIAkJCX0gZWxzZSB7CiAJCQkJcmVxLnZhbHVlID0gKG1zZ1swXS5idWZbMF0gPDwgOCkgfAogCQkJCQkobXNnWzBdLmFkZHIgPDwgMSk7Ci0JCQkJcmVxLmluZGV4ID0gQ01EX0RFTU9EX1dSIHwgcHJpdi0+cGFnZTsKKwkJCQlyZXEuaW5kZXggPSBDTURfREVNT0RfV1IgfCBkZXYtPnBhZ2U7CiAJCQkJcmVxLnNpemUgPSBtc2dbMF0ubGVuLTE7CiAJCQkJcmVxLmRhdGEgPSAmbXNnWzBdLmJ1ZlsxXTsKIAkJCQlyZXQgPSBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxKTsKQEAgLTMwMyw3ICsyNTQsNyBAQAogCiBzdGF0aWMgaW50IHJ0bDI4MzF1X3JlYWRfY29uZmlnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKLQlzdHJ1Y3QgcnRsMjh4eHVfcHJpdiAqcHJpdiA9IGRfdG9fcHJpdihkKTsKKwlzdHJ1Y3QgcnRsMjh4eHVfZGV2ICpkZXYgPSBkX3RvX3ByaXYoZCk7CiAJaW50IHJldDsKIAl1OCBidWZbMV07CiAJLyogb3BlbiBSVEwyODMxVS9SVEwyODMwIEkyQyBnYXRlICovCkBAIC0zMTIsNyArMjYzLDcgQEAKIAlzdHJ1Y3QgcnRsMjh4eHVfcmVxIHJlcV9tdDIwNjAgPSB7MHgwMGMwLCBDTURfSTJDX1JELCAxLCBidWZ9OwogCXN0cnVjdCBydGwyOHh4dV9yZXEgcmVxX3F0MTAxMCA9IHsweDBmYzQsIENNRF9JMkNfUkQsIDEsIGJ1Zn07CiAKLQlkZXZfZGJnKCZkLT51ZGV2LT5kZXYsICIlczpcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZkLT5pbnRmLT5kZXYsICJcbiIpOwogCiAJLyoKIAkgKiBSVEwyODMxVSBHUElPcwpAQCAtMzIzLDEyICsyNzQsMTIgQEAKIAkgKi8KIAogCS8qIEdQSU8gZGlyZWN0aW9uICovCi0JcmV0ID0gcnRsMjh4eF93cl9yZWcoZCwgU1lTX0dQSU9fRElSLCAweDBhKTsKKwlyZXQgPSBydGwyOHh4dV93cl9yZWcoZCwgU1lTX0dQSU9fRElSLCAweDBhKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCS8qIGVuYWJsZSBhcyBvdXRwdXQgR1BJTzAsIEdQSU8yLCBHUElPNCAqLwotCXJldCA9IHJ0bDI4eHhfd3JfcmVnKGQsIFNZU19HUElPX09VVF9FTiwgMHgxNSk7CisJcmV0ID0gcnRsMjh4eHVfd3JfcmVnKGQsIFNZU19HUElPX09VVF9FTiwgMHgxNSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTM0MCw3ICsyOTEsNyBAQAogCS8qIGRlbW9kIG5lZWRzIHNvbWUgdGltZSB0byB3YWtlIHVwICovCiAJbXNsZWVwKDIwKTsKIAotCXByaXYtPnR1bmVyX25hbWUgPSAiTk9ORSI7CisJZGV2LT50dW5lcl9uYW1lID0gIk5PTkUiOwogCiAJLyogb3BlbiBkZW1vZCBJMkMgZ2F0ZSAqLwogCXJldCA9IHJ0bDI4eHh1X2N0cmxfbXNnKGQsICZyZXFfZ2F0ZV9vcGVuKTsKQEAgLTM1MCw4ICszMDEsOCBAQAogCS8qIGNoZWNrIFFUMTAxMCBJRCg/KSByZWdpc3RlcjsgcmVnPTBmIHZhbD0yYyAqLwogCXJldCA9IHJ0bDI4eHh1X2N0cmxfbXNnKGQsICZyZXFfcXQxMDEwKTsKIAlpZiAocmV0ID09IDAgJiYgYnVmWzBdID09IDB4MmMpIHsKLQkJcHJpdi0+dHVuZXIgPSBUVU5FUl9SVEwyODMwX1FUMTAxMDsKLQkJcHJpdi0+dHVuZXJfbmFtZSA9ICJRVDEwMTAiOworCQlkZXYtPnR1bmVyID0gVFVORVJfUlRMMjgzMF9RVDEwMTA7CisJCWRldi0+dHVuZXJfbmFtZSA9ICJRVDEwMTAiOwogCQlnb3RvIGZvdW5kOwogCX0KIApAQCAtMzYzLDI4ICszMTQsMjggQEAKIAkvKiBjaGVjayBNVDIwNjAgSUQgcmVnaXN0ZXI7IHJlZz0wMCB2YWw9NjMgKi8KIAlyZXQgPSBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxX210MjA2MCk7CiAJaWYgKHJldCA9PSAwICYmIGJ1ZlswXSA9PSAweDYzKSB7Ci0JCXByaXYtPnR1bmVyID0gVFVORVJfUlRMMjgzMF9NVDIwNjA7Ci0JCXByaXYtPnR1bmVyX25hbWUgPSAiTVQyMDYwIjsKKwkJZGV2LT50dW5lciA9IFRVTkVSX1JUTDI4MzBfTVQyMDYwOworCQlkZXYtPnR1bmVyX25hbWUgPSAiTVQyMDYwIjsKIAkJZ290byBmb3VuZDsKIAl9CiAKIAkvKiBhc3N1bWUgTVhMNTAwNVMgKi8KLQlwcml2LT50dW5lciA9IFRVTkVSX1JUTDI4MzBfTVhMNTAwNVM7Ci0JcHJpdi0+dHVuZXJfbmFtZSA9ICJNWEw1MDA1UyI7CisJZGV2LT50dW5lciA9IFRVTkVSX1JUTDI4MzBfTVhMNTAwNVM7CisJZGV2LT50dW5lcl9uYW1lID0gIk1YTDUwMDVTIjsKIAlnb3RvIGZvdW5kOwogCiBmb3VuZDoKLQlkZXZfZGJnKCZkLT51ZGV2LT5kZXYsICIlczogdHVuZXI9JXNcbiIsIF9fZnVuY19fLCBwcml2LT50dW5lcl9uYW1lKTsKKwlkZXZfZGJnKCZkLT5pbnRmLT5kZXYsICJ0dW5lcj0lc1xuIiwgZGV2LT50dW5lcl9uYW1lKTsKIAogCXJldHVybiAwOwogZXJyOgotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHJ0bDI4MzJ1X3JlYWRfY29uZmlnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKLQlzdHJ1Y3QgcnRsMjh4eHVfcHJpdiAqcHJpdiA9IGRfdG9fcHJpdihkKTsKKwlzdHJ1Y3QgcnRsMjh4eHVfZGV2ICpkZXYgPSBkX3RvX3ByaXYoZCk7CiAJaW50IHJldDsKIAl1OCBidWZbMl07CiAJLyogb3BlbiBSVEwyODMyVS9SVEwyODMyIEkyQyBnYXRlICovCkBAIC00MDcsMTQgKzM1OCwxNCBAQAogCXN0cnVjdCBydGwyOHh4dV9yZXEgcmVxX21uODg0NzIgPSB7MHhmZjM4LCBDTURfSTJDX1JELCAxLCBidWZ9OwogCXN0cnVjdCBydGwyOHh4dV9yZXEgcmVxX21uODg0NzMgPSB7MHhmZjM4LCBDTURfSTJDX1JELCAxLCBidWZ9OwogCi0JZGV2X2RiZygmZC0+dWRldi0+ZGV2LCAiJXM6XG4iLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmZC0+aW50Zi0+ZGV2LCAiXG4iKTsKIAogCS8qIGVuYWJsZSBHUElPMyBhbmQgR1BJTzYgYXMgb3V0cHV0ICovCi0JcmV0ID0gcnRsMjh4eF93cl9yZWdfbWFzayhkLCBTWVNfR1BJT19ESVIsIDB4MDAsIDB4NDApOworCXJldCA9IHJ0bDI4eHh1X3dyX3JlZ19tYXNrKGQsIFNZU19HUElPX0RJUiwgMHgwMCwgMHg0MCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlyZXQgPSBydGwyOHh4X3dyX3JlZ19tYXNrKGQsIFNZU19HUElPX09VVF9FTiwgMHg0OCwgMHg0OCk7CisJcmV0ID0gcnRsMjh4eHVfd3JfcmVnX21hc2soZCwgU1lTX0dQSU9fT1VUX0VOLCAweDQ4LCAweDQ4KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIApAQCAtNDI4LDEzNCArMzc5LDEzNCBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JcHJpdi0+dHVuZXJfbmFtZSA9ICJOT05FIjsKKwlkZXYtPnR1bmVyX25hbWUgPSAiTk9ORSI7CiAKIAkvKiBjaGVjayBGQzAwMTIgSUQgcmVnaXN0ZXI7IHJlZz0wMCB2YWw9YTEgKi8KIAlyZXQgPSBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxX2ZjMDAxMik7CiAJaWYgKHJldCA9PSAwICYmIGJ1ZlswXSA9PSAweGExKSB7Ci0JCXByaXYtPnR1bmVyID0gVFVORVJfUlRMMjgzMl9GQzAwMTI7Ci0JCXByaXYtPnR1bmVyX25hbWUgPSAiRkMwMDEyIjsKKwkJZGV2LT50dW5lciA9IFRVTkVSX1JUTDI4MzJfRkMwMDEyOworCQlkZXYtPnR1bmVyX25hbWUgPSAiRkMwMDEyIjsKIAkJZ290byB0dW5lcl9mb3VuZDsKIAl9CiAKIAkvKiBjaGVjayBGQzAwMTMgSUQgcmVnaXN0ZXI7IHJlZz0wMCB2YWw9YTMgKi8KIAlyZXQgPSBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxX2ZjMDAxMyk7CiAJaWYgKHJldCA9PSAwICYmIGJ1ZlswXSA9PSAweGEzKSB7Ci0JCXByaXYtPnR1bmVyID0gVFVORVJfUlRMMjgzMl9GQzAwMTM7Ci0JCXByaXYtPnR1bmVyX25hbWUgPSAiRkMwMDEzIjsKKwkJZGV2LT50dW5lciA9IFRVTkVSX1JUTDI4MzJfRkMwMDEzOworCQlkZXYtPnR1bmVyX25hbWUgPSAiRkMwMDEzIjsKIAkJZ290byB0dW5lcl9mb3VuZDsKIAl9CiAKIAkvKiBjaGVjayBNVDIyNjYgSUQgcmVnaXN0ZXI7IHJlZz0wMCB2YWw9ODUgKi8KIAlyZXQgPSBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxX210MjI2Nik7CiAJaWYgKHJldCA9PSAwICYmIGJ1ZlswXSA9PSAweDg1KSB7Ci0JCXByaXYtPnR1bmVyID0gVFVORVJfUlRMMjgzMl9NVDIyNjY7Ci0JCXByaXYtPnR1bmVyX25hbWUgPSAiTVQyMjY2IjsKKwkJZGV2LT50dW5lciA9IFRVTkVSX1JUTDI4MzJfTVQyMjY2OworCQlkZXYtPnR1bmVyX25hbWUgPSAiTVQyMjY2IjsKIAkJZ290byB0dW5lcl9mb3VuZDsKIAl9CiAKIAkvKiBjaGVjayBGQzI1ODAgSUQgcmVnaXN0ZXI7IHJlZz0wMSB2YWw9NTYgKi8KIAlyZXQgPSBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxX2ZjMjU4MCk7CiAJaWYgKHJldCA9PSAwICYmIGJ1ZlswXSA9PSAweDU2KSB7Ci0JCXByaXYtPnR1bmVyID0gVFVORVJfUlRMMjgzMl9GQzI1ODA7Ci0JCXByaXYtPnR1bmVyX25hbWUgPSAiRkMyNTgwIjsKKwkJZGV2LT50dW5lciA9IFRVTkVSX1JUTDI4MzJfRkMyNTgwOworCQlkZXYtPnR1bmVyX25hbWUgPSAiRkMyNTgwIjsKIAkJZ290byB0dW5lcl9mb3VuZDsKIAl9CiAKIAkvKiBjaGVjayBNVDIwNjMgSUQgcmVnaXN0ZXI7IHJlZz0wMCB2YWw9OWUgfHwgOWMgKi8KIAlyZXQgPSBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxX210MjA2Myk7CiAJaWYgKHJldCA9PSAwICYmIChidWZbMF0gPT0gMHg5ZSB8fCBidWZbMF0gPT0gMHg5YykpIHsKLQkJcHJpdi0+dHVuZXIgPSBUVU5FUl9SVEwyODMyX01UMjA2MzsKLQkJcHJpdi0+dHVuZXJfbmFtZSA9ICJNVDIwNjMiOworCQlkZXYtPnR1bmVyID0gVFVORVJfUlRMMjgzMl9NVDIwNjM7CisJCWRldi0+dHVuZXJfbmFtZSA9ICJNVDIwNjMiOwogCQlnb3RvIHR1bmVyX2ZvdW5kOwogCX0KIAogCS8qIGNoZWNrIE1BWDM1NDMgSUQgcmVnaXN0ZXI7IHJlZz0wMCB2YWw9MzggKi8KIAlyZXQgPSBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxX21heDM1NDMpOwogCWlmIChyZXQgPT0gMCAmJiBidWZbMF0gPT0gMHgzOCkgewotCQlwcml2LT50dW5lciA9IFRVTkVSX1JUTDI4MzJfTUFYMzU0MzsKLQkJcHJpdi0+dHVuZXJfbmFtZSA9ICJNQVgzNTQzIjsKKwkJZGV2LT50dW5lciA9IFRVTkVSX1JUTDI4MzJfTUFYMzU0MzsKKwkJZGV2LT50dW5lcl9uYW1lID0gIk1BWDM1NDMiOwogCQlnb3RvIHR1bmVyX2ZvdW5kOwogCX0KIAogCS8qIGNoZWNrIFRVQTkwMDEgSUQgcmVnaXN0ZXI7IHJlZz03ZSB2YWw9MjMyOCAqLwogCXJldCA9IHJ0bDI4eHh1X2N0cmxfbXNnKGQsICZyZXFfdHVhOTAwMSk7CiAJaWYgKHJldCA9PSAwICYmIGJ1ZlswXSA9PSAweDIzICYmIGJ1ZlsxXSA9PSAweDI4KSB7Ci0JCXByaXYtPnR1bmVyID0gVFVORVJfUlRMMjgzMl9UVUE5MDAxOwotCQlwcml2LT50dW5lcl9uYW1lID0gIlRVQTkwMDEiOworCQlkZXYtPnR1bmVyID0gVFVORVJfUlRMMjgzMl9UVUE5MDAxOworCQlkZXYtPnR1bmVyX25hbWUgPSAiVFVBOTAwMSI7CiAJCWdvdG8gdHVuZXJfZm91bmQ7CiAJfQogCiAJLyogY2hlY2sgTVhMNTAwN1IgSUQgcmVnaXN0ZXI7IHJlZz1kOSB2YWw9MTQgKi8KIAlyZXQgPSBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxX214bDUwMDd0KTsKIAlpZiAocmV0ID09IDAgJiYgYnVmWzBdID09IDB4MTQpIHsKLQkJcHJpdi0+dHVuZXIgPSBUVU5FUl9SVEwyODMyX01YTDUwMDdUOwotCQlwcml2LT50dW5lcl9uYW1lID0gIk1YTDUwMDdUIjsKKwkJZGV2LT50dW5lciA9IFRVTkVSX1JUTDI4MzJfTVhMNTAwN1Q7CisJCWRldi0+dHVuZXJfbmFtZSA9ICJNWEw1MDA3VCI7CiAJCWdvdG8gdHVuZXJfZm91bmQ7CiAJfQogCiAJLyogY2hlY2sgRTQwMDAgSUQgcmVnaXN0ZXI7IHJlZz0wMiB2YWw9NDAgKi8KIAlyZXQgPSBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxX2U0MDAwKTsKIAlpZiAocmV0ID09IDAgJiYgYnVmWzBdID09IDB4NDApIHsKLQkJcHJpdi0+dHVuZXIgPSBUVU5FUl9SVEwyODMyX0U0MDAwOwotCQlwcml2LT50dW5lcl9uYW1lID0gIkU0MDAwIjsKKwkJZGV2LT50dW5lciA9IFRVTkVSX1JUTDI4MzJfRTQwMDA7CisJCWRldi0+dHVuZXJfbmFtZSA9ICJFNDAwMCI7CiAJCWdvdG8gdHVuZXJfZm91bmQ7CiAJfQogCiAJLyogY2hlY2sgVERBMTgyNzIgSUQgcmVnaXN0ZXI7IHJlZz0wMCB2YWw9Yzc2MCAgKi8KIAlyZXQgPSBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxX3RkYTE4MjcyKTsKIAlpZiAocmV0ID09IDAgJiYgKGJ1ZlswXSA9PSAweGM3IHx8IGJ1ZlsxXSA9PSAweDYwKSkgewotCQlwcml2LT50dW5lciA9IFRVTkVSX1JUTDI4MzJfVERBMTgyNzI7Ci0JCXByaXYtPnR1bmVyX25hbWUgPSAiVERBMTgyNzIiOworCQlkZXYtPnR1bmVyID0gVFVORVJfUlRMMjgzMl9UREExODI3MjsKKwkJZGV2LT50dW5lcl9uYW1lID0gIlREQTE4MjcyIjsKIAkJZ290byB0dW5lcl9mb3VuZDsKIAl9CiAKIAkvKiBjaGVjayBSODIwVCBJRCByZWdpc3RlcjsgcmVnPTAwIHZhbD02OSAqLwogCXJldCA9IHJ0bDI4eHh1X2N0cmxfbXNnKGQsICZyZXFfcjgyMHQpOwogCWlmIChyZXQgPT0gMCAmJiBidWZbMF0gPT0gMHg2OSkgewotCQlwcml2LT50dW5lciA9IFRVTkVSX1JUTDI4MzJfUjgyMFQ7Ci0JCXByaXYtPnR1bmVyX25hbWUgPSAiUjgyMFQiOworCQlkZXYtPnR1bmVyID0gVFVORVJfUlRMMjgzMl9SODIwVDsKKwkJZGV2LT50dW5lcl9uYW1lID0gIlI4MjBUIjsKIAkJZ290byB0dW5lcl9mb3VuZDsKIAl9CiAKIAkvKiBjaGVjayBSODI4RCBJRCByZWdpc3RlcjsgcmVnPTAwIHZhbD02OSAqLwogCXJldCA9IHJ0bDI4eHh1X2N0cmxfbXNnKGQsICZyZXFfcjgyOGQpOwogCWlmIChyZXQgPT0gMCAmJiBidWZbMF0gPT0gMHg2OSkgewotCQlwcml2LT50dW5lciA9IFRVTkVSX1JUTDI4MzJfUjgyOEQ7Ci0JCXByaXYtPnR1bmVyX25hbWUgPSAiUjgyOEQiOworCQlkZXYtPnR1bmVyID0gVFVORVJfUlRMMjgzMl9SODI4RDsKKwkJZGV2LT50dW5lcl9uYW1lID0gIlI4MjhEIjsKIAkJZ290byB0dW5lcl9mb3VuZDsKIAl9CiAKIHR1bmVyX2ZvdW5kOgotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiB0dW5lcj0lc1xuIiwgX19mdW5jX18sIHByaXYtPnR1bmVyX25hbWUpOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgInR1bmVyPSVzXG4iLCBkZXYtPnR1bmVyX25hbWUpOwogCiAJLyogcHJvYmUgc2xhdmUgZGVtb2QgKi8KLQlpZiAocHJpdi0+dHVuZXIgPT0gVFVORVJfUlRMMjgzMl9SODI4RCkgeworCWlmIChkZXYtPnR1bmVyID09IFRVTkVSX1JUTDI4MzJfUjgyOEQpIHsKIAkJLyogcG93ZXIgb24gTU44ODQ3MiBkZW1vZCBvbiBHUElPMCAqLwotCQlyZXQgPSBydGwyOHh4X3dyX3JlZ19tYXNrKGQsIFNZU19HUElPX09VVF9WQUwsIDB4MDEsIDB4MDEpOworCQlyZXQgPSBydGwyOHh4dV93cl9yZWdfbWFzayhkLCBTWVNfR1BJT19PVVRfVkFMLCAweDAxLCAweDAxKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCi0JCXJldCA9IHJ0bDI4eHhfd3JfcmVnX21hc2soZCwgU1lTX0dQSU9fRElSLCAweDAwLCAweDAxKTsKKwkJcmV0ID0gcnRsMjh4eHVfd3JfcmVnX21hc2soZCwgU1lTX0dQSU9fRElSLCAweDAwLCAweDAxKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCi0JCXJldCA9IHJ0bDI4eHhfd3JfcmVnX21hc2soZCwgU1lTX0dQSU9fT1VUX0VOLCAweDAxLCAweDAxKTsKKwkJcmV0ID0gcnRsMjh4eHVfd3JfcmVnX21hc2soZCwgU1lTX0dQSU9fT1VUX0VOLCAweDAxLCAweDAxKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCiAJCS8qIGNoZWNrIE1OODg0NzIgYW5zd2VycyAqLwogCQlyZXQgPSBydGwyOHh4dV9jdHJsX21zZyhkLCAmcmVxX21uODg0NzIpOwogCQlpZiAocmV0ID09IDAgJiYgYnVmWzBdID09IDB4MDIpIHsKLQkJCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBNTjg4NDcyIGZvdW5kXG4iLCBfX2Z1bmNfXyk7Ci0JCQlwcml2LT5zbGF2ZV9kZW1vZCA9IFNMQVZFX0RFTU9EX01OODg0NzI7CisJCQlkZXZfZGJnKCZkLT5pbnRmLT5kZXYsICJNTjg4NDcyIGZvdW5kXG4iKTsKKwkJCWRldi0+c2xhdmVfZGVtb2QgPSBTTEFWRV9ERU1PRF9NTjg4NDcyOwogCQkJZ290byBkZW1vZF9mb3VuZDsKIAkJfQogCiAJCXJldCA9IHJ0bDI4eHh1X2N0cmxfbXNnKGQsICZyZXFfbW44ODQ3Myk7CiAJCWlmIChyZXQgPT0gMCAmJiBidWZbMF0gPT0gMHgwMykgewotCQkJZGV2X2RiZygmZC0+dWRldi0+ZGV2LCAiJXM6IE1OODg0NzMgZm91bmRcbiIsIF9fZnVuY19fKTsKLQkJCXByaXYtPnNsYXZlX2RlbW9kID0gU0xBVkVfREVNT0RfTU44ODQ3MzsKKwkJCWRldl9kYmcoJmQtPmludGYtPmRldiwgIk1OODg0NzMgZm91bmRcbiIpOworCQkJZGV2LT5zbGF2ZV9kZW1vZCA9IFNMQVZFX0RFTU9EX01OODg0NzM7CiAJCQlnb3RvIGRlbW9kX2ZvdW5kOwogCQl9CiAJfQpAQCAtNTY4LDE0ICs1MTksNTEgQEAKIAogCXJldHVybiAwOwogZXJyOgotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDI4MzBfY29uZmlnIHJ0bDI4eHh1X3J0bDI4MzBfbXQyMDYwX2NvbmZpZyA9IHsKLQkuaTJjX2FkZHIgPSAweDEwLCAvKiAweDIwICovCi0JLnh0YWwgPSAyODgwMDAwMCwKLQkudHNfbW9kZSA9IDAsCitzdGF0aWMgaW50IHJ0bDI4eHh1X3JlYWRfY29uZmlnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKK3sKKwlzdHJ1Y3QgcnRsMjh4eHVfZGV2ICpkZXYgPSBkX3RvX3ByaXYoZCk7CisKKwlpZiAoZGV2LT5jaGlwX2lkID09IENISVBfSURfUlRMMjgzMVUpCisJCXJldHVybiBydGwyODMxdV9yZWFkX2NvbmZpZyhkKTsKKwllbHNlCisJCXJldHVybiBydGwyODMydV9yZWFkX2NvbmZpZyhkKTsKK30KKworc3RhdGljIGludCBydGwyOHh4dV9pZGVudGlmeV9zdGF0ZShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIGNvbnN0IGNoYXIgKipuYW1lKQoreworCXN0cnVjdCBydGwyOHh4dV9kZXYgKmRldiA9IGRfdG9fcHJpdihkKTsKKwlpbnQgcmV0OworCXN0cnVjdCBydGwyOHh4dV9yZXEgcmVxX2RlbW9kX2kyYyA9IHsweDAwMjAsIENNRF9JMkNfREFfUkQsIDAsIE5VTEx9OworCisJZGV2X2RiZygmZC0+aW50Zi0+ZGV2LCAiXG4iKTsKKworCS8qCisJICogRGV0ZWN0IGNoaXAgdHlwZSB1c2luZyBJMkMgY29tbWFuZCB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQKKwkgKiBieSBvbGQgUlRMMjgzMVUuCisJICovCisJcmV0ID0gcnRsMjh4eHVfY3RybF9tc2coZCwgJnJlcV9kZW1vZF9pMmMpOworCWlmIChyZXQgPT0gLUVQSVBFKSB7CisJCWRldi0+Y2hpcF9pZCA9IENISVBfSURfUlRMMjgzMVU7CisJfSBlbHNlIGlmIChyZXQgPT0gMCkgeworCQlkZXYtPmNoaXBfaWQgPSBDSElQX0lEX1JUTDI4MzJVOworCX0gZWxzZSB7CisJCWRldl9lcnIoJmQtPmludGYtPmRldiwgImNoaXAgdHlwZSBkZXRlY3Rpb24gZmFpbGVkICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisJZGV2X2RiZygmZC0+aW50Zi0+ZGV2LCAiY2hpcF9pZD0ldVxuIiwgZGV2LT5jaGlwX2lkKTsKKworCXJldHVybiBXQVJNOworZXJyOgorCWRldl9kYmcoJmQtPmludGYtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDI4MzBfcGxhdGZvcm1fZGF0YSBydGwyODMwX210MjA2MF9wbGF0Zm9ybV9kYXRhID0geworCS5jbGsgPSAyODgwMDAwMCwKIAkuc3BlY19pbnYgPSAxLAogCS52dG9wID0gMHgyMCwKIAkua3JmID0gMHgwNCwKQEAgLTU4MywyMCArNTcxLDE2IEBACiAKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsMjgzMF9jb25maWcgcnRsMjh4eHVfcnRsMjgzMF9xdDEwMTBfY29uZmlnID0gewotCS5pMmNfYWRkciA9IDB4MTAsIC8qIDB4MjAgKi8KLQkueHRhbCA9IDI4ODAwMDAwLAotCS50c19tb2RlID0gMCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsMjgzMF9wbGF0Zm9ybV9kYXRhIHJ0bDI4MzBfcXQxMDEwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNsayA9IDI4ODAwMDAwLAogCS5zcGVjX2ludiA9IDEsCiAJLnZ0b3AgPSAweDIwLAogCS5rcmYgPSAweDA0LAogCS5hZ2NfdGFyZ192YWwgPSAweDJkLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBydGwyODMwX2NvbmZpZyBydGwyOHh4dV9ydGwyODMwX214bDUwMDVzX2NvbmZpZyA9IHsKLQkuaTJjX2FkZHIgPSAweDEwLCAvKiAweDIwICovCi0JLnh0YWwgPSAyODgwMDAwMCwKLQkudHNfbW9kZSA9IDAsCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDI4MzBfcGxhdGZvcm1fZGF0YSBydGwyODMwX214bDUwMDVzX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNsayA9IDI4ODAwMDAwLAogCS5zcGVjX2ludiA9IDAsCiAJLnZ0b3AgPSAweDNmLAogCS5rcmYgPSAweDA0LApAQCAtNjA2LDY5ICs1OTAsODEgQEAKIHN0YXRpYyBpbnQgcnRsMjgzMXVfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCiB7CiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gYWRhcF90b19kKGFkYXApOwotCXN0cnVjdCBydGwyOHh4dV9wcml2ICpwcml2ID0gZF90b19wcml2KGQpOwotCWNvbnN0IHN0cnVjdCBydGwyODMwX2NvbmZpZyAqcnRsMjgzMF9jb25maWc7CisJc3RydWN0IHJ0bDI4eHh1X2RldiAqZGV2ID0gZF90b19wcml2KGQpOworCXN0cnVjdCBydGwyODMwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gJmRldi0+cnRsMjgzMF9wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBib2FyZF9pbmZvOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJaW50IHJldDsKIAotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOlxuIiwgX19mdW5jX18pOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgIlxuIik7CiAKLQlzd2l0Y2ggKHByaXYtPnR1bmVyKSB7CisJc3dpdGNoIChkZXYtPnR1bmVyKSB7CiAJY2FzZSBUVU5FUl9SVEwyODMwX1FUMTAxMDoKLQkJcnRsMjgzMF9jb25maWcgPSAmcnRsMjh4eHVfcnRsMjgzMF9xdDEwMTBfY29uZmlnOworCQkqcGRhdGEgPSBydGwyODMwX3F0MTAxMF9wbGF0Zm9ybV9kYXRhOwogCQlicmVhazsKIAljYXNlIFRVTkVSX1JUTDI4MzBfTVQyMDYwOgotCQlydGwyODMwX2NvbmZpZyA9ICZydGwyOHh4dV9ydGwyODMwX210MjA2MF9jb25maWc7CisJCSpwZGF0YSA9IHJ0bDI4MzBfbXQyMDYwX3BsYXRmb3JtX2RhdGE7CiAJCWJyZWFrOwogCWNhc2UgVFVORVJfUlRMMjgzMF9NWEw1MDA1UzoKLQkJcnRsMjgzMF9jb25maWcgPSAmcnRsMjh4eHVfcnRsMjgzMF9teGw1MDA1c19jb25maWc7CisJCSpwZGF0YSA9IHJ0bDI4MzBfbXhsNTAwNXNfcGxhdGZvcm1fZGF0YTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2VycigmZC0+dWRldi0+ZGV2LCAiJXM6IHVua25vd24gdHVuZXI9JXNcbiIsCi0JCQkJS0JVSUxEX01PRE5BTUUsIHByaXYtPnR1bmVyX25hbWUpOworCQlkZXZfZXJyKCZkLT5pbnRmLT5kZXYsICJ1bmtub3duIHR1bmVyICVzXG4iLCBkZXYtPnR1bmVyX25hbWUpOwogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGVycjsKIAl9CiAKIAkvKiBhdHRhY2ggZGVtb2R1bGF0b3IgKi8KLQlhZGFwLT5mZVswXSA9IGR2Yl9hdHRhY2gocnRsMjgzMF9hdHRhY2gsIHJ0bDI4MzBfY29uZmlnLCAmZC0+aTJjX2FkYXApOwotCWlmICghYWRhcC0+ZmVbMF0pIHsKKwltZW1zZXQoJmJvYXJkX2luZm8sIDAsIHNpemVvZihib2FyZF9pbmZvKSk7CisJc3RybGNweShib2FyZF9pbmZvLnR5cGUsICJydGwyODMwIiwgSTJDX05BTUVfU0laRSk7CisJYm9hcmRfaW5mby5hZGRyID0gMHgxMDsKKwlib2FyZF9pbmZvLnBsYXRmb3JtX2RhdGEgPSBwZGF0YTsKKwlyZXF1ZXN0X21vZHVsZSgiJXMiLCBib2FyZF9pbmZvLnR5cGUpOworCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKCZkLT5pMmNfYWRhcCwgJmJvYXJkX2luZm8pOworCWlmIChjbGllbnQgPT0gTlVMTCB8fCBjbGllbnQtPmRldi5kcml2ZXIgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGVycjsKIAl9CiAKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNsaWVudC0+ZGV2LmRyaXZlci0+b3duZXIpKSB7CisJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnQpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycjsKKwl9CisKKwlhZGFwLT5mZVswXSA9IHBkYXRhLT5nZXRfZHZiX2Zyb250ZW5kKGNsaWVudCk7CisJZGV2LT5kZW1vZF9pMmNfYWRhcHRlciA9IHBkYXRhLT5nZXRfaTJjX2FkYXB0ZXIoY2xpZW50KTsKKworCWRldi0+aTJjX2NsaWVudF9kZW1vZCA9IGNsaWVudDsKKwogCXJldHVybiAwOwogZXJyOgotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDI4MzJfY29uZmlnIHJ0bDI4eHh1X3J0bDI4MzJfZmMwMDEyX2NvbmZpZyA9IHsKLQkuaTJjX2FkZHIgPSAweDEwLCAvKiAweDIwICovCi0JLnh0YWwgPSAyODgwMDAwMCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsMjgzMl9wbGF0Zm9ybV9kYXRhIHJ0bDI4MzJfZmMwMDEyX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNsayA9IDI4ODAwMDAwLAogCS50dW5lciA9IFRVTkVSX1JUTDI4MzJfRkMwMDEyCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDI4MzJfY29uZmlnIHJ0bDI4eHh1X3J0bDI4MzJfZmMwMDEzX2NvbmZpZyA9IHsKLQkuaTJjX2FkZHIgPSAweDEwLCAvKiAweDIwICovCi0JLnh0YWwgPSAyODgwMDAwMCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsMjgzMl9wbGF0Zm9ybV9kYXRhIHJ0bDI4MzJfZmMwMDEzX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNsayA9IDI4ODAwMDAwLAogCS50dW5lciA9IFRVTkVSX1JUTDI4MzJfRkMwMDEzCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDI4MzJfY29uZmlnIHJ0bDI4eHh1X3J0bDI4MzJfdHVhOTAwMV9jb25maWcgPSB7Ci0JLmkyY19hZGRyID0gMHgxMCwgLyogMHgyMCAqLwotCS54dGFsID0gMjg4MDAwMDAsCitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bDI4MzJfcGxhdGZvcm1fZGF0YSBydGwyODMyX3R1YTkwMDFfcGxhdGZvcm1fZGF0YSA9IHsKKwkuY2xrID0gMjg4MDAwMDAsCiAJLnR1bmVyID0gVFVORVJfUlRMMjgzMl9UVUE5MDAxLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBydGwyODMyX2NvbmZpZyBydGwyOHh4dV9ydGwyODMyX2U0MDAwX2NvbmZpZyA9IHsKLQkuaTJjX2FkZHIgPSAweDEwLCAvKiAweDIwICovCi0JLnh0YWwgPSAyODgwMDAwMCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsMjgzMl9wbGF0Zm9ybV9kYXRhIHJ0bDI4MzJfZTQwMDBfcGxhdGZvcm1fZGF0YSA9IHsKKwkuY2xrID0gMjg4MDAwMDAsCiAJLnR1bmVyID0gVFVORVJfUlRMMjgzMl9FNDAwMCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsMjgzMl9jb25maWcgcnRsMjh4eHVfcnRsMjgzMl9yODIwdF9jb25maWcgPSB7Ci0JLmkyY19hZGRyID0gMHgxMCwKLQkueHRhbCA9IDI4ODAwMDAwLAorc3RhdGljIGNvbnN0IHN0cnVjdCBydGwyODMyX3BsYXRmb3JtX2RhdGEgcnRsMjgzMl9yODIwdF9wbGF0Zm9ybV9kYXRhID0geworCS5jbGsgPSAyODgwMDAwMCwKIAkudHVuZXIgPSBUVU5FUl9SVEwyODMyX1I4MjBULAogfTsKIApAQCAtNjc4LDEyICs2NzQsMTIgQEAKIAlpbnQgcmV0OwogCXU4IHZhbDsKIAotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBjbWQ9JWQgYXJnPSVkXG4iLCBfX2Z1bmNfXywgY21kLCBhcmcpOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgImNtZD0lZCBhcmc9JWRcbiIsIGNtZCwgYXJnKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBGQ19GRV9DQUxMQkFDS19WSEZfRU5BQkxFOgogCQkvKiBzZXQgb3V0cHV0IHZhbHVlcyAqLwotCQlyZXQgPSBydGwyOHh4X3JkX3JlZyhkLCBTWVNfR1BJT19PVVRfVkFMLCAmdmFsKTsKKwkJcmV0ID0gcnRsMjh4eHVfcmRfcmVnKGQsIFNZU19HUElPX09VVF9WQUwsICZ2YWwpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnI7CiAKQEAgLTY5Myw3ICs2ODksNyBAQAogCQkJdmFsIHw9IDB4NDA7IC8qIHNldCBHUElPNiBoaWdoICovCiAKIAotCQlyZXQgPSBydGwyOHh4X3dyX3JlZyhkLCBTWVNfR1BJT19PVVRfVkFMLCB2YWwpOworCQlyZXQgPSBydGwyOHh4dV93cl9yZWcoZCwgU1lTX0dQSU9fT1VUX1ZBTCwgdmFsKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCQlicmVhazsKQEAgLTcwMyw3ICs2OTksNyBAQAogCX0KIAlyZXR1cm4gMDsKIGVycjoKLQlkZXZfZGJnKCZkLT51ZGV2LT5kZXYsICIlczogZmFpbGVkPSVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlkZXZfZGJnKCZkLT5pbnRmLT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzEzLDcgKzcwOSw3IEBACiAJaW50IHJldDsKIAl1OCB2YWw7CiAKLQlkZXZfZGJnKCZkLT51ZGV2LT5kZXYsICIlczogY21kPSVkIGFyZz0lZFxuIiwgX19mdW5jX18sIGNtZCwgYXJnKTsKKwlkZXZfZGJnKCZkLT5pbnRmLT5kZXYsICJjbWQ9JWQgYXJnPSVkXG4iLCBjbWQsIGFyZyk7CiAKIAkvKgogCSAqIENFTiAgICAgYWx3YXlzIGVuYWJsZWQgYnkgaGFyZHdhcmUgd2lyaW5nCkBAIC03MjgsNyArNzI0LDcgQEAKIAkJZWxzZQogCQkJdmFsID0gKDAgPDwgNCk7CiAKLQkJcmV0ID0gcnRsMjh4eF93cl9yZWdfbWFzayhkLCBTWVNfR1BJT19PVVRfVkFMLCB2YWwsIDB4MTApOworCQlyZXQgPSBydGwyOHh4dV93cl9yZWdfbWFzayhkLCBTWVNfR1BJT19PVVRfVkFMLCB2YWwsIDB4MTApOwogCQlpZiAocmV0KQogCQkJZ290byBlcnI7CiAJCWJyZWFrOwpAQCAtNzM4LDcgKzczNCw3IEBACiAJCWVsc2UKIAkJCXZhbCA9ICgwIDw8IDEpOwogCi0JCXJldCA9IHJ0bDI4eHhfd3JfcmVnX21hc2soZCwgU1lTX0dQSU9fT1VUX1ZBTCwgdmFsLCAweDAyKTsKKwkJcmV0ID0gcnRsMjh4eHVfd3JfcmVnX21hc2soZCwgU1lTX0dQSU9fT1VUX1ZBTCwgdmFsLCAweDAyKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCQlicmVhazsKQEAgLTc0Niw0MCArNzQyLDQ2IEBACiAKIAlyZXR1cm4gMDsKIGVycjoKLQlkZXZfZGJnKCZkLT51ZGV2LT5kZXYsICIlczogZmFpbGVkPSVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlkZXZfZGJnKCZkLT5pbnRmLT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBydGwyODMydV90dW5lcl9jYWxsYmFjayhzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIGludCBjbWQsIGludCBhcmcpCi17Ci0Jc3RydWN0IHJ0bDI4eHh1X3ByaXYgKnByaXYgPSBkLT5wcml2OwotCi0Jc3dpdGNoIChwcml2LT50dW5lcikgewotCWNhc2UgVFVORVJfUlRMMjgzMl9GQzAwMTI6Ci0JCXJldHVybiBydGwyODMydV9mYzAwMTJfdHVuZXJfY2FsbGJhY2soZCwgY21kLCBhcmcpOwotCWNhc2UgVFVORVJfUlRMMjgzMl9UVUE5MDAxOgotCQlyZXR1cm4gcnRsMjgzMnVfdHVhOTAwMV90dW5lcl9jYWxsYmFjayhkLCBjbWQsIGFyZyk7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgcnRsMjgzMnVfZnJvbnRlbmRfY2FsbGJhY2sodm9pZCAqYWRhcHRlcl9wcml2LCBpbnQgY29tcG9uZW50LAogCQlpbnQgY21kLCBpbnQgYXJnKQogewotCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9IGFkYXB0ZXJfcHJpdjsKLQlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGFkYXB0ZXJfcHJpdjsKKwlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSBhZGFwdGVyLT5kZXYucGFyZW50OworCXN0cnVjdCBpMmNfYWRhcHRlciAqcGFyZW50X2FkYXB0ZXI7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkOworCXN0cnVjdCBydGwyOHh4dV9kZXYgKmRldjsKIAotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBjb21wb25lbnQ9JWQgY21kPSVkIGFyZz0lZFxuIiwKLQkJCV9fZnVuY19fLCBjb21wb25lbnQsIGNtZCwgYXJnKTsKKwkvKgorCSAqIEFsbCB0dW5lcnMgYXJlIGNvbm5lY3RlZCB0byBkZW1vZCBtdXhlZCBJMkMgYWRhcHRlci4gV2UgaGF2ZSB0bworCSAqIHJlc29sdmUgaXRzIHBhcmVudCBhZGFwdGVyIGluIG9yZGVyIHRvIGdldCBoYW5kbGUgZm9yIHRoaXMgZHJpdmVyCisJICogcHJpdmF0ZSBkYXRhLiBUaGF0IGlzIGEgYml0IGhhY2tpc2ggc29sdXRpb24sIEdQSU8gb3IgZGlyZWN0IGRyaXZlcgorCSAqIGNhbGxiYWNrIHdvdWxkIGJlIGJldHRlci4uLgorCSAqLworCWlmIChwYXJlbnQgIT0gTlVMTCAmJiBwYXJlbnQtPnR5cGUgPT0gJmkyY19hZGFwdGVyX3R5cGUpCisJCXBhcmVudF9hZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIocGFyZW50KTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJZCA9IGkyY19nZXRfYWRhcGRhdGEocGFyZW50X2FkYXB0ZXIpOworCWRldiA9IGQtPnByaXY7CisKKwlkZXZfZGJnKCZkLT5pbnRmLT5kZXYsICJjb21wb25lbnQ9JWQgY21kPSVkIGFyZz0lZFxuIiwKKwkJY29tcG9uZW50LCBjbWQsIGFyZyk7CiAKIAlzd2l0Y2ggKGNvbXBvbmVudCkgewogCWNhc2UgRFZCX0ZST05URU5EX0NPTVBPTkVOVF9UVU5FUjoKLQkJcmV0dXJuIHJ0bDI4MzJ1X3R1bmVyX2NhbGxiYWNrKGQsIGNtZCwgYXJnKTsKKwkJc3dpdGNoIChkZXYtPnR1bmVyKSB7CisJCWNhc2UgVFVORVJfUlRMMjgzMl9GQzAwMTI6CisJCQlyZXR1cm4gcnRsMjgzMnVfZmMwMDEyX3R1bmVyX2NhbGxiYWNrKGQsIGNtZCwgYXJnKTsKKwkJY2FzZSBUVU5FUl9SVEwyODMyX1RVQTkwMDE6CisJCQlyZXR1cm4gcnRsMjgzMnVfdHVhOTAwMV90dW5lcl9jYWxsYmFjayhkLCBjbWQsIGFyZyk7CisJCX0KIAlkZWZhdWx0OgotCQlicmVhazsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03ODcsNTcgKzc4OSw3MCBAQAogCiBzdGF0aWMgaW50IHJ0bDI4MzJ1X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewotCWludCByZXQ7CiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gYWRhcF90b19kKGFkYXApOwotCXN0cnVjdCBydGwyOHh4dV9wcml2ICpwcml2ID0gZF90b19wcml2KGQpOwotCWNvbnN0IHN0cnVjdCBydGwyODMyX2NvbmZpZyAqcnRsMjgzMl9jb25maWc7CisJc3RydWN0IHJ0bDI4eHh1X2RldiAqZGV2ID0gZF90b19wcml2KGQpOworCXN0cnVjdCBydGwyODMyX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gJmRldi0+cnRsMjgzMl9wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBib2FyZF9pbmZvOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJaW50IHJldDsKIAotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOlxuIiwgX19mdW5jX18pOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgIlxuIik7CiAKLQlzd2l0Y2ggKHByaXYtPnR1bmVyKSB7CisJc3dpdGNoIChkZXYtPnR1bmVyKSB7CiAJY2FzZSBUVU5FUl9SVEwyODMyX0ZDMDAxMjoKLQkJcnRsMjgzMl9jb25maWcgPSAmcnRsMjh4eHVfcnRsMjgzMl9mYzAwMTJfY29uZmlnOworCQkqcGRhdGEgPSBydGwyODMyX2ZjMDAxMl9wbGF0Zm9ybV9kYXRhOwogCQlicmVhazsKIAljYXNlIFRVTkVSX1JUTDI4MzJfRkMwMDEzOgotCQlydGwyODMyX2NvbmZpZyA9ICZydGwyOHh4dV9ydGwyODMyX2ZjMDAxM19jb25maWc7CisJCSpwZGF0YSA9IHJ0bDI4MzJfZmMwMDEzX3BsYXRmb3JtX2RhdGE7CiAJCWJyZWFrOwogCWNhc2UgVFVORVJfUlRMMjgzMl9GQzI1ODA6CiAJCS8qIEZJWE1FOiBkbyBub3QgYWJ1c2UgZmMwMDEyIHNldHRpbmdzICovCi0JCXJ0bDI4MzJfY29uZmlnID0gJnJ0bDI4eHh1X3J0bDI4MzJfZmMwMDEyX2NvbmZpZzsKKwkJKnBkYXRhID0gcnRsMjgzMl9mYzAwMTJfcGxhdGZvcm1fZGF0YTsKIAkJYnJlYWs7CiAJY2FzZSBUVU5FUl9SVEwyODMyX1RVQTkwMDE6Ci0JCXJ0bDI4MzJfY29uZmlnID0gJnJ0bDI4eHh1X3J0bDI4MzJfdHVhOTAwMV9jb25maWc7CisJCSpwZGF0YSA9IHJ0bDI4MzJfdHVhOTAwMV9wbGF0Zm9ybV9kYXRhOwogCQlicmVhazsKIAljYXNlIFRVTkVSX1JUTDI4MzJfRTQwMDA6Ci0JCXJ0bDI4MzJfY29uZmlnID0gJnJ0bDI4eHh1X3J0bDI4MzJfZTQwMDBfY29uZmlnOworCQkqcGRhdGEgPSBydGwyODMyX2U0MDAwX3BsYXRmb3JtX2RhdGE7CiAJCWJyZWFrOwogCWNhc2UgVFVORVJfUlRMMjgzMl9SODIwVDoKIAljYXNlIFRVTkVSX1JUTDI4MzJfUjgyOEQ6Ci0JCXJ0bDI4MzJfY29uZmlnID0gJnJ0bDI4eHh1X3J0bDI4MzJfcjgyMHRfY29uZmlnOworCQkqcGRhdGEgPSBydGwyODMyX3I4MjB0X3BsYXRmb3JtX2RhdGE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRldl9lcnIoJmQtPnVkZXYtPmRldiwgIiVzOiB1bmtub3duIHR1bmVyPSVzXG4iLAotCQkJCUtCVUlMRF9NT0ROQU1FLCBwcml2LT50dW5lcl9uYW1lKTsKKwkJZGV2X2VycigmZC0+aW50Zi0+ZGV2LCAidW5rbm93biB0dW5lciAlc1xuIiwgZGV2LT50dW5lcl9uYW1lKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBlcnI7CiAJfQogCiAJLyogYXR0YWNoIGRlbW9kdWxhdG9yICovCi0JYWRhcC0+ZmVbMF0gPSBkdmJfYXR0YWNoKHJ0bDI4MzJfYXR0YWNoLCBydGwyODMyX2NvbmZpZywgJmQtPmkyY19hZGFwKTsKLQlpZiAoIWFkYXAtPmZlWzBdKSB7CisJbWVtc2V0KCZib2FyZF9pbmZvLCAwLCBzaXplb2YoYm9hcmRfaW5mbykpOworCXN0cmxjcHkoYm9hcmRfaW5mby50eXBlLCAicnRsMjgzMiIsIEkyQ19OQU1FX1NJWkUpOworCWJvYXJkX2luZm8uYWRkciA9IDB4MTA7CisJYm9hcmRfaW5mby5wbGF0Zm9ybV9kYXRhID0gcGRhdGE7CisJcmVxdWVzdF9tb2R1bGUoIiVzIiwgYm9hcmRfaW5mby50eXBlKTsKKwljbGllbnQgPSBpMmNfbmV3X2RldmljZSgmZC0+aTJjX2FkYXAsICZib2FyZF9pbmZvKTsKKwlpZiAoY2xpZW50ID09IE5VTEwgfHwgY2xpZW50LT5kZXYuZHJpdmVyID09IE5VTEwpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBlcnI7CiAJfQogCi0JLyogUlRMMjgzMiBJMkMgcmVwZWF0ZXIgKi8KLQlwcml2LT5kZW1vZF9pMmNfYWRhcHRlciA9IHJ0bDI4MzJfZ2V0X2kyY19hZGFwdGVyKGFkYXAtPmZlWzBdKTsKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNsaWVudC0+ZGV2LmRyaXZlci0+b3duZXIpKSB7CisJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnQpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycjsKKwl9CisKKwlhZGFwLT5mZVswXSA9IHBkYXRhLT5nZXRfZHZiX2Zyb250ZW5kKGNsaWVudCk7CisJZGV2LT5kZW1vZF9pMmNfYWRhcHRlciA9IHBkYXRhLT5nZXRfaTJjX2FkYXB0ZXIoY2xpZW50KTsKKworCWRldi0+aTJjX2NsaWVudF9kZW1vZCA9IGNsaWVudDsKIAogCS8qIHNldCBmZSBjYWxsYmFjayAqLwogCWFkYXAtPmZlWzBdLT5jYWxsYmFjayA9IHJ0bDI4MzJ1X2Zyb250ZW5kX2NhbGxiYWNrOwogCi0JaWYgKHByaXYtPnNsYXZlX2RlbW9kKSB7CisJaWYgKGRldi0+c2xhdmVfZGVtb2QpIHsKIAkJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm8gPSB7fTsKLQkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAogCQkvKgogCQkgKiBXZSBjb250aW51ZSBvbiByZWR1Y2VkIG1vZGUsIHdpdGhvdXQgRFZCLVQyL0MsIHVzaW5nIG1hc3RlcgpAQCAtODQ2LDI4ICs4NjEsMjkgQEAKIAkJcmV0ID0gMDsKIAogCQkvKiBhdHRhY2ggc2xhdmUgZGVtb2R1bGF0b3IgKi8KLQkJaWYgKHByaXYtPnNsYXZlX2RlbW9kID09IFNMQVZFX0RFTU9EX01OODg0NzIpIHsKKwkJaWYgKGRldi0+c2xhdmVfZGVtb2QgPT0gU0xBVkVfREVNT0RfTU44ODQ3MikgewogCQkJc3RydWN0IG1uODg0NzJfY29uZmlnIG1uODg0NzJfY29uZmlnID0ge307CiAKIAkJCW1uODg0NzJfY29uZmlnLmZlID0gJmFkYXAtPmZlWzFdOwogCQkJbW44ODQ3Ml9jb25maWcuaTJjX3dyX21heCA9IDIyLAogCQkJc3RybGNweShpbmZvLnR5cGUsICJtbjg4NDcyIiwgSTJDX05BTUVfU0laRSk7CisJCQltbjg4NDcyX2NvbmZpZy54dGFsID0gMjA1MDAwMDA7CiAJCQlpbmZvLmFkZHIgPSAweDE4OwogCQkJaW5mby5wbGF0Zm9ybV9kYXRhID0gJm1uODg0NzJfY29uZmlnOwogCQkJcmVxdWVzdF9tb2R1bGUoaW5mby50eXBlKTsKLQkJCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKHByaXYtPmRlbW9kX2kyY19hZGFwdGVyLCAmaW5mbyk7CisJCQljbGllbnQgPSBpMmNfbmV3X2RldmljZSgmZC0+aTJjX2FkYXAsICZpbmZvKTsKIAkJCWlmIChjbGllbnQgPT0gTlVMTCB8fCBjbGllbnQtPmRldi5kcml2ZXIgPT0gTlVMTCkgewotCQkJCXByaXYtPnNsYXZlX2RlbW9kID0gU0xBVkVfREVNT0RfTk9ORTsKKwkJCQlkZXYtPnNsYXZlX2RlbW9kID0gU0xBVkVfREVNT0RfTk9ORTsKIAkJCQlnb3RvIGVycl9zbGF2ZV9kZW1vZF9mYWlsZWQ7CiAJCQl9CiAKIAkJCWlmICghdHJ5X21vZHVsZV9nZXQoY2xpZW50LT5kZXYuZHJpdmVyLT5vd25lcikpIHsKIAkJCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKLQkJCQlwcml2LT5zbGF2ZV9kZW1vZCA9IFNMQVZFX0RFTU9EX05PTkU7CisJCQkJZGV2LT5zbGF2ZV9kZW1vZCA9IFNMQVZFX0RFTU9EX05PTkU7CiAJCQkJZ290byBlcnJfc2xhdmVfZGVtb2RfZmFpbGVkOwogCQkJfQogCi0JCQlwcml2LT5pMmNfY2xpZW50X3NsYXZlX2RlbW9kID0gY2xpZW50OworCQkJZGV2LT5pMmNfY2xpZW50X3NsYXZlX2RlbW9kID0gY2xpZW50OwogCQl9IGVsc2UgewogCQkJc3RydWN0IG1uODg0NzNfY29uZmlnIG1uODg0NzNfY29uZmlnID0ge307CiAKQEAgLTg3NywyOSArODkzLDY0IEBACiAJCQlpbmZvLmFkZHIgPSAweDE4OwogCQkJaW5mby5wbGF0Zm9ybV9kYXRhID0gJm1uODg0NzNfY29uZmlnOwogCQkJcmVxdWVzdF9tb2R1bGUoaW5mby50eXBlKTsKLQkJCWNsaWVudCA9IGkyY19uZXdfZGV2aWNlKHByaXYtPmRlbW9kX2kyY19hZGFwdGVyLCAmaW5mbyk7CisJCQljbGllbnQgPSBpMmNfbmV3X2RldmljZSgmZC0+aTJjX2FkYXAsICZpbmZvKTsKIAkJCWlmIChjbGllbnQgPT0gTlVMTCB8fCBjbGllbnQtPmRldi5kcml2ZXIgPT0gTlVMTCkgewotCQkJCXByaXYtPnNsYXZlX2RlbW9kID0gU0xBVkVfREVNT0RfTk9ORTsKKwkJCQlkZXYtPnNsYXZlX2RlbW9kID0gU0xBVkVfREVNT0RfTk9ORTsKIAkJCQlnb3RvIGVycl9zbGF2ZV9kZW1vZF9mYWlsZWQ7CiAJCQl9CiAKIAkJCWlmICghdHJ5X21vZHVsZV9nZXQoY2xpZW50LT5kZXYuZHJpdmVyLT5vd25lcikpIHsKIAkJCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKLQkJCQlwcml2LT5zbGF2ZV9kZW1vZCA9IFNMQVZFX0RFTU9EX05PTkU7CisJCQkJZGV2LT5zbGF2ZV9kZW1vZCA9IFNMQVZFX0RFTU9EX05PTkU7CiAJCQkJZ290byBlcnJfc2xhdmVfZGVtb2RfZmFpbGVkOwogCQkJfQogCi0JCQlwcml2LT5pMmNfY2xpZW50X3NsYXZlX2RlbW9kID0gY2xpZW50OworCQkJZGV2LT5pMmNfY2xpZW50X3NsYXZlX2RlbW9kID0gY2xpZW50OwogCQl9CiAJfQogCiAJcmV0dXJuIDA7CiBlcnJfc2xhdmVfZGVtb2RfZmFpbGVkOgogZXJyOgotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHJ0bDI4eHh1X2Zyb250ZW5kX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXN0cnVjdCBydGwyOHh4dV9kZXYgKmRldiA9IGFkYXBfdG9fcHJpdihhZGFwKTsKKworCWlmIChkZXYtPmNoaXBfaWQgPT0gQ0hJUF9JRF9SVEwyODMxVSkKKwkJcmV0dXJuIHJ0bDI4MzF1X2Zyb250ZW5kX2F0dGFjaChhZGFwKTsKKwllbHNlCisJCXJldHVybiBydGwyODMydV9mcm9udGVuZF9hdHRhY2goYWRhcCk7Cit9CisKK3N0YXRpYyBpbnQgcnRsMjh4eHVfZnJvbnRlbmRfZGV0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gYWRhcF90b19kKGFkYXApOworCXN0cnVjdCBydGwyOHh4dV9kZXYgKmRldiA9IGRfdG9fcHJpdihkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCisJZGV2X2RiZygmZC0+aW50Zi0+ZGV2LCAiXG4iKTsKKworCS8qIHJlbW92ZSBJMkMgc2xhdmUgZGVtb2QgKi8KKwljbGllbnQgPSBkZXYtPmkyY19jbGllbnRfc2xhdmVfZGVtb2Q7CisJaWYgKGNsaWVudCkgeworCQltb2R1bGVfcHV0KGNsaWVudC0+ZGV2LmRyaXZlci0+b3duZXIpOworCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKKwl9CisKKwkvKiByZW1vdmUgSTJDIGRlbW9kICovCisJY2xpZW50ID0gZGV2LT5pMmNfY2xpZW50X2RlbW9kOworCWlmIChjbGllbnQpIHsKKwkJbW9kdWxlX3B1dChjbGllbnQtPmRldi5kcml2ZXItPm93bmVyKTsKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcXQxMDEwX2NvbmZpZyBydGwyOHh4dV9xdDEwMTBfY29uZmlnID0gewogCS5pMmNfYWRkcmVzcyA9IDB4NjIsIC8qIDB4YzQgKi8KIH07CkBAIC05MzAsMzMgKzk4MSwzMCBAQAogewogCWludCByZXQ7CiAJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gYWRhcF90b19kKGFkYXApOwotCXN0cnVjdCBydGwyOHh4dV9wcml2ICpwcml2ID0gZF90b19wcml2KGQpOwotCXN0cnVjdCBpMmNfYWRhcHRlciAqcnRsMjgzMF90dW5lcl9pMmM7CisJc3RydWN0IHJ0bDI4eHh1X2RldiAqZGV2ID0gZF90b19wcml2KGQpOwogCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOwogCi0JZGV2X2RiZygmZC0+dWRldi0+ZGV2LCAiJXM6XG4iLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmZC0+aW50Zi0+ZGV2LCAiXG4iKTsKIAotCS8qIHVzZSBydGwyODMwIGRyaXZlciBJMkMgYWRhcHRlciwgZm9yIG1vcmUgaW5mbyBzZWUgcnRsMjgzMCBkcml2ZXIgKi8KLQlydGwyODMwX3R1bmVyX2kyYyA9IHJ0bDI4MzBfZ2V0X3R1bmVyX2kyY19hZGFwdGVyKGFkYXAtPmZlWzBdKTsKLQotCXN3aXRjaCAocHJpdi0+dHVuZXIpIHsKKwlzd2l0Y2ggKGRldi0+dHVuZXIpIHsKIAljYXNlIFRVTkVSX1JUTDI4MzBfUVQxMDEwOgogCQlmZSA9IGR2Yl9hdHRhY2gocXQxMDEwX2F0dGFjaCwgYWRhcC0+ZmVbMF0sCi0JCQkJcnRsMjgzMF90dW5lcl9pMmMsICZydGwyOHh4dV9xdDEwMTBfY29uZmlnKTsKKwkJCQlkZXYtPmRlbW9kX2kyY19hZGFwdGVyLAorCQkJCSZydGwyOHh4dV9xdDEwMTBfY29uZmlnKTsKIAkJYnJlYWs7CiAJY2FzZSBUVU5FUl9SVEwyODMwX01UMjA2MDoKIAkJZmUgPSBkdmJfYXR0YWNoKG10MjA2MF9hdHRhY2gsIGFkYXAtPmZlWzBdLAotCQkJCXJ0bDI4MzBfdHVuZXJfaTJjLCAmcnRsMjh4eHVfbXQyMDYwX2NvbmZpZywKLQkJCQkxMjIwKTsKKwkJCQlkZXYtPmRlbW9kX2kyY19hZGFwdGVyLAorCQkJCSZydGwyOHh4dV9tdDIwNjBfY29uZmlnLCAxMjIwKTsKIAkJYnJlYWs7CiAJY2FzZSBUVU5FUl9SVEwyODMwX01YTDUwMDVTOgogCQlmZSA9IGR2Yl9hdHRhY2gobXhsNTAwNXNfYXR0YWNoLCBhZGFwLT5mZVswXSwKLQkJCQlydGwyODMwX3R1bmVyX2kyYywgJnJ0bDI4eHh1X214bDUwMDVzX2NvbmZpZyk7CisJCQkJZGV2LT5kZW1vZF9pMmNfYWRhcHRlciwKKwkJCQkmcnRsMjh4eHVfbXhsNTAwNXNfY29uZmlnKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZmUgPSBOVUxMOwotCQlkZXZfZXJyKCZkLT51ZGV2LT5kZXYsICIlczogdW5rbm93biB0dW5lcj0lZFxuIiwgS0JVSUxEX01PRE5BTUUsCi0JCQkJcHJpdi0+dHVuZXIpOworCQlkZXZfZXJyKCZkLT5pbnRmLT5kZXYsICJ1bmtub3duIHR1bmVyICVkXG4iLCBkZXYtPnR1bmVyKTsKIAl9CiAKIAlpZiAoZmUgPT0gTlVMTCkgewpAQCAtOTY2LDcgKzEwMTQsNyBAQAogCiAJcmV0dXJuIDA7CiBlcnI6Ci0JZGV2X2RiZygmZC0+dWRldi0+ZGV2LCAiJXM6IGZhaWxlZD0lZFxuIiwgX19mdW5jX18sIHJldCk7CisJZGV2X2RiZygmZC0+aW50Zi0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwMDIsNDUgKzEwNTAsMzggQEAKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGFkYXBfdG9fZChhZGFwKTsKLQlzdHJ1Y3QgcnRsMjh4eHVfcHJpdiAqcHJpdiA9IGRfdG9fcHJpdihkKTsKKwlzdHJ1Y3QgcnRsMjh4eHVfZGV2ICpkZXYgPSBkX3RvX3ByaXYoZCk7CiAJc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUgPSBOVUxMOwogCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYgPSBOVUxMOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHJ0bDI4MzJfc2RyX3BsYXRmb3JtX2RhdGEgcGRhdGE7CiAKLQlkZXZfZGJnKCZkLT51ZGV2LT5kZXYsICIlczpcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKCZkLT5pbnRmLT5kZXYsICJcbiIpOwogCiAJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IGkyY19ib2FyZF9pbmZvKSk7CisJbWVtc2V0KCZwZGF0YSwgMCwgc2l6ZW9mKHBkYXRhKSk7CiAKLQlzd2l0Y2ggKHByaXYtPnR1bmVyKSB7CisJc3dpdGNoIChkZXYtPnR1bmVyKSB7CiAJY2FzZSBUVU5FUl9SVEwyODMyX0ZDMDAxMjoKIAkJZmUgPSBkdmJfYXR0YWNoKGZjMDAxMl9hdHRhY2gsIGFkYXAtPmZlWzBdLAotCQkJJmQtPmkyY19hZGFwLCAmcnRsMjgzMnVfZmMwMDEyX2NvbmZpZyk7CisJCQlkZXYtPmRlbW9kX2kyY19hZGFwdGVyLCAmcnRsMjgzMnVfZmMwMDEyX2NvbmZpZyk7CiAKIAkJLyogc2luY2UgZmMwMDEyIGluY2x1ZHMgcmVhZGluZyB0aGUgc2lnbmFsIHN0cmVuZ3RoIGRlbGVnYXRlCiAJCSAqIHRoYXQgdG8gdGhlIHR1bmVyIGRyaXZlciAqLwogCQlhZGFwLT5mZVswXS0+b3BzLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0KIAkJCQlhZGFwLT5mZVswXS0+b3BzLnR1bmVyX29wcy5nZXRfcmZfc3RyZW5ndGg7Ci0KLQkJLyogYXR0YWNoIFNEUiAqLwotCQlkdmJfYXR0YWNoX3NkcihydGwyODMyX3Nkcl9hdHRhY2gsIGFkYXAtPmZlWzBdLCAmZC0+aTJjX2FkYXAsCi0JCQkJJnJ0bDI4eHh1X3J0bDI4MzJfZmMwMDEyX2NvbmZpZywgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgVFVORVJfUlRMMjgzMl9GQzAwMTM6CiAJCWZlID0gZHZiX2F0dGFjaChmYzAwMTNfYXR0YWNoLCBhZGFwLT5mZVswXSwKLQkJCSZkLT5pMmNfYWRhcCwgMHhjNj4+MSwgMCwgRkNfWFRBTF8yOF84X01IWik7CisJCQlkZXYtPmRlbW9kX2kyY19hZGFwdGVyLCAweGM2Pj4xLCAwLCBGQ19YVEFMXzI4XzhfTUhaKTsKIAogCQkvKiBmYzAwMTMgYWxzbyBzdXBwb3J0cyBzaWduYWwgc3RyZW5ndGggcmVhZGluZyAqLwogCQlhZGFwLT5mZVswXS0+b3BzLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0KIAkJCQlhZGFwLT5mZVswXS0+b3BzLnR1bmVyX29wcy5nZXRfcmZfc3RyZW5ndGg7Ci0KLQkJLyogYXR0YWNoIFNEUiAqLwotCQlkdmJfYXR0YWNoX3NkcihydGwyODMyX3Nkcl9hdHRhY2gsIGFkYXAtPmZlWzBdLCAmZC0+aTJjX2FkYXAsCi0JCQkJJnJ0bDI4eHh1X3J0bDI4MzJfZmMwMDEzX2NvbmZpZywgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgVFVORVJfUlRMMjgzMl9FNDAwMDogewotCQkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKLQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXBfaW50ZXJuYWwgPQotCQkJCQlydGwyODMyX2dldF9wcml2YXRlX2kyY19hZGFwdGVyKGFkYXAtPmZlWzBdKTsKIAkJCXN0cnVjdCBlNDAwMF9jb25maWcgZTQwMDBfY29uZmlnID0gewogCQkJCS5mZSA9IGFkYXAtPmZlWzBdLAogCQkJCS5jbG9jayA9IDI4ODAwMDAwLApAQCAtMTA1MSw3ICsxMDkyLDcgQEAKIAkJCWluZm8ucGxhdGZvcm1fZGF0YSA9ICZlNDAwMF9jb25maWc7CiAKIAkJCXJlcXVlc3RfbW9kdWxlKGluZm8udHlwZSk7Ci0JCQljbGllbnQgPSBpMmNfbmV3X2RldmljZShwcml2LT5kZW1vZF9pMmNfYWRhcHRlciwgJmluZm8pOworCQkJY2xpZW50ID0gaTJjX25ld19kZXZpY2UoZGV2LT5kZW1vZF9pMmNfYWRhcHRlciwgJmluZm8pOwogCQkJaWYgKGNsaWVudCA9PSBOVUxMIHx8IGNsaWVudC0+ZGV2LmRyaXZlciA9PSBOVUxMKQogCQkJCWJyZWFrOwogCkBAIC0xMDYwLDE1NyArMTEwMSwxODMgQEAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJcHJpdi0+aTJjX2NsaWVudF90dW5lciA9IGNsaWVudDsKLQkJCXNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JCQlpMmNfc2V0X2FkYXBkYXRhKGkyY19hZGFwX2ludGVybmFsLCBkKTsKLQotCQkJLyogYXR0YWNoIFNEUiAqLwotCQkJZHZiX2F0dGFjaF9zZHIocnRsMjgzMl9zZHJfYXR0YWNoLCBhZGFwLT5mZVswXSwKLQkJCQkJaTJjX2FkYXBfaW50ZXJuYWwsCi0JCQkJCSZydGwyOHh4dV9ydGwyODMyX2U0MDAwX2NvbmZpZywgc2QpOworCQkJZGV2LT5pMmNfY2xpZW50X3R1bmVyID0gY2xpZW50OworCQkJc3ViZGV2ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBUVU5FUl9SVEwyODMyX0ZDMjU4MDoKLQkJZmUgPSBkdmJfYXR0YWNoKGZjMjU4MF9hdHRhY2gsIGFkYXAtPmZlWzBdLCAmZC0+aTJjX2FkYXAsCisJCWZlID0gZHZiX2F0dGFjaChmYzI1ODBfYXR0YWNoLCBhZGFwLT5mZVswXSwKKwkJCQlkZXYtPmRlbW9kX2kyY19hZGFwdGVyLAogCQkJCSZydGwyODMydV9mYzI1ODBfY29uZmlnKTsKIAkJYnJlYWs7CiAJY2FzZSBUVU5FUl9SVEwyODMyX1RVQTkwMDE6CiAJCS8qIGVuYWJsZSBHUElPMSBhbmQgR1BJTzQgYXMgb3V0cHV0ICovCi0JCXJldCA9IHJ0bDI4eHhfd3JfcmVnX21hc2soZCwgU1lTX0dQSU9fRElSLCAweDAwLCAweDEyKTsKKwkJcmV0ID0gcnRsMjh4eHVfd3JfcmVnX21hc2soZCwgU1lTX0dQSU9fRElSLCAweDAwLCAweDEyKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCi0JCXJldCA9IHJ0bDI4eHhfd3JfcmVnX21hc2soZCwgU1lTX0dQSU9fT1VUX0VOLCAweDEyLCAweDEyKTsKKwkJcmV0ID0gcnRsMjh4eHVfd3JfcmVnX21hc2soZCwgU1lTX0dQSU9fT1VUX0VOLCAweDEyLCAweDEyKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCi0JCWZlID0gZHZiX2F0dGFjaCh0dWE5MDAxX2F0dGFjaCwgYWRhcC0+ZmVbMF0sICZkLT5pMmNfYWRhcCwKKwkJZmUgPSBkdmJfYXR0YWNoKHR1YTkwMDFfYXR0YWNoLCBhZGFwLT5mZVswXSwKKwkJCQlkZXYtPmRlbW9kX2kyY19hZGFwdGVyLAogCQkJCSZydGwyODMydV90dWE5MDAxX2NvbmZpZyk7CiAJCWJyZWFrOwogCWNhc2UgVFVORVJfUlRMMjgzMl9SODIwVDoKLQkJZmUgPSBkdmJfYXR0YWNoKHI4MjB0X2F0dGFjaCwgYWRhcC0+ZmVbMF0sICZkLT5pMmNfYWRhcCwKKwkJZmUgPSBkdmJfYXR0YWNoKHI4MjB0X2F0dGFjaCwgYWRhcC0+ZmVbMF0sCisJCQkJZGV2LT5kZW1vZF9pMmNfYWRhcHRlciwKIAkJCQkmcnRsMjgzMnVfcjgyMHRfY29uZmlnKTsKIAogCQkvKiBVc2UgdHVuZXIgdG8gZ2V0IHRoZSBzaWduYWwgc3RyZW5ndGggKi8KIAkJYWRhcC0+ZmVbMF0tPm9wcy5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9CiAJCQkJYWRhcC0+ZmVbMF0tPm9wcy50dW5lcl9vcHMuZ2V0X3JmX3N0cmVuZ3RoOwotCi0JCS8qIGF0dGFjaCBTRFIgKi8KLQkJZHZiX2F0dGFjaF9zZHIocnRsMjgzMl9zZHJfYXR0YWNoLCBhZGFwLT5mZVswXSwgJmQtPmkyY19hZGFwLAotCQkJCSZydGwyOHh4dV9ydGwyODMyX3I4MjB0X2NvbmZpZywgTlVMTCk7CiAJCWJyZWFrOwogCWNhc2UgVFVORVJfUlRMMjgzMl9SODI4RDoKIAkJZmUgPSBkdmJfYXR0YWNoKHI4MjB0X2F0dGFjaCwgYWRhcC0+ZmVbMF0sCi0JCQkJcHJpdi0+ZGVtb2RfaTJjX2FkYXB0ZXIsCisJCQkJZGV2LT5kZW1vZF9pMmNfYWRhcHRlciwKIAkJCQkmcnRsMjgzMnVfcjgyOGRfY29uZmlnKTsKIAkJYWRhcC0+ZmVbMF0tPm9wcy5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9CiAJCQkJYWRhcC0+ZmVbMF0tPm9wcy50dW5lcl9vcHMuZ2V0X3JmX3N0cmVuZ3RoOwogCiAJCWlmIChhZGFwLT5mZVsxXSkgewogCQkJZmUgPSBkdmJfYXR0YWNoKHI4MjB0X2F0dGFjaCwgYWRhcC0+ZmVbMV0sCi0JCQkJCXByaXYtPmRlbW9kX2kyY19hZGFwdGVyLAorCQkJCQlkZXYtPmRlbW9kX2kyY19hZGFwdGVyLAogCQkJCQkmcnRsMjgzMnVfcjgyOGRfY29uZmlnKTsKIAkJCWFkYXAtPmZlWzFdLT5vcHMucmVhZF9zaWduYWxfc3RyZW5ndGggPQogCQkJCQlhZGFwLT5mZVsxXS0+b3BzLnR1bmVyX29wcy5nZXRfcmZfc3RyZW5ndGg7CiAJCX0KLQotCQkvKiBhdHRhY2ggU0RSICovCi0JCWR2Yl9hdHRhY2hfc2RyKHJ0bDI4MzJfc2RyX2F0dGFjaCwgYWRhcC0+ZmVbMF0sICZkLT5pMmNfYWRhcCwKLQkJCQkmcnRsMjh4eHVfcnRsMjgzMl9yODIwdF9jb25maWcsIE5VTEwpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkZXZfZXJyKCZkLT51ZGV2LT5kZXYsICIlczogdW5rbm93biB0dW5lcj0lZFxuIiwgS0JVSUxEX01PRE5BTUUsCi0JCQkJcHJpdi0+dHVuZXIpOworCQlkZXZfZXJyKCZkLT5pbnRmLT5kZXYsICJ1bmtub3duIHR1bmVyICVkXG4iLCBkZXYtPnR1bmVyKTsKIAl9Ci0KLQlpZiAoZmUgPT0gTlVMTCAmJiBwcml2LT5pMmNfY2xpZW50X3R1bmVyID09IE5VTEwpIHsKKwlpZiAoZmUgPT0gTlVMTCAmJiBkZXYtPmkyY19jbGllbnRfdHVuZXIgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGVycjsKIAl9CiAKKwkvKiByZWdpc3RlciBTRFIgKi8KKwlzd2l0Y2ggKGRldi0+dHVuZXIpIHsKKwljYXNlIFRVTkVSX1JUTDI4MzJfRkMwMDEyOgorCWNhc2UgVFVORVJfUlRMMjgzMl9GQzAwMTM6CisJY2FzZSBUVU5FUl9SVEwyODMyX0U0MDAwOgorCWNhc2UgVFVORVJfUlRMMjgzMl9SODIwVDoKKwljYXNlIFRVTkVSX1JUTDI4MzJfUjgyOEQ6CisJCXBkYXRhLmNsayA9IGRldi0+cnRsMjgzMl9wbGF0Zm9ybV9kYXRhLmNsazsKKwkJcGRhdGEudHVuZXIgPSBkZXYtPnR1bmVyOworCQlwZGF0YS5pMmNfY2xpZW50ID0gZGV2LT5pMmNfY2xpZW50X2RlbW9kOworCQlwZGF0YS5idWxrX3JlYWQgPSBkZXYtPnJ0bDI4MzJfcGxhdGZvcm1fZGF0YS5idWxrX3JlYWQ7CisJCXBkYXRhLmJ1bGtfd3JpdGUgPSBkZXYtPnJ0bDI4MzJfcGxhdGZvcm1fZGF0YS5idWxrX3dyaXRlOworCQlwZGF0YS51cGRhdGVfYml0cyA9IGRldi0+cnRsMjgzMl9wbGF0Zm9ybV9kYXRhLnVwZGF0ZV9iaXRzOworCQlwZGF0YS5kdmJfZnJvbnRlbmQgPSBhZGFwLT5mZVswXTsKKwkJcGRhdGEuZHZiX3VzYl9kZXZpY2UgPSBkOworCQlwZGF0YS52NGwyX3N1YmRldiA9IHN1YmRldjsKKworCQlyZXF1ZXN0X21vZHVsZSgiJXMiLCAicnRsMjgzMl9zZHIiKTsKKwkJcGRldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhKCZkLT5pbnRmLT5kZXYsCisJCQkJCQkgICAgICJydGwyODMyX3NkciIsCisJCQkJCQkgICAgIFBMQVRGT1JNX0RFVklEX0FVVE8sCisJCQkJCQkgICAgICZwZGF0YSwgc2l6ZW9mKHBkYXRhKSk7CisJCWlmIChwZGV2ID09IE5VTEwgfHwgcGRldi0+ZGV2LmRyaXZlciA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWRldi0+cGxhdGZvcm1fZGV2aWNlX3NkciA9IHBkZXY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9kYmcoJmQtPmludGYtPmRldiwgIm5vIFNEUiBmb3IgdHVuZXI9JWRcbiIsIGRldi0+dHVuZXIpOworCX0KKwogCXJldHVybiAwOwogZXJyOgotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHJ0bDI4eHh1X3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQoreworCXN0cnVjdCBydGwyOHh4dV9kZXYgKmRldiA9IGFkYXBfdG9fcHJpdihhZGFwKTsKKworCWlmIChkZXYtPmNoaXBfaWQgPT0gQ0hJUF9JRF9SVEwyODMxVSkKKwkJcmV0dXJuIHJ0bDI4MzF1X3R1bmVyX2F0dGFjaChhZGFwKTsKKwllbHNlCisJCXJldHVybiBydGwyODMydV90dW5lcl9hdHRhY2goYWRhcCk7Cit9CisKK3N0YXRpYyBpbnQgcnRsMjh4eHVfdHVuZXJfZGV0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkID0gYWRhcF90b19kKGFkYXApOworCXN0cnVjdCBydGwyOHh4dV9kZXYgKmRldiA9IGRfdG9fcHJpdihkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisKKwlkZXZfZGJnKCZkLT5pbnRmLT5kZXYsICJcbiIpOworCisJLyogcmVtb3ZlIHBsYXRmb3JtIFNEUiAqLworCXBkZXYgPSBkZXYtPnBsYXRmb3JtX2RldmljZV9zZHI7CisJaWYgKHBkZXYpCisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCisJLyogcmVtb3ZlIEkyQyB0dW5lciAqLworCWNsaWVudCA9IGRldi0+aTJjX2NsaWVudF90dW5lcjsKKwlpZiAoY2xpZW50KSB7CisJCW1vZHVsZV9wdXQoY2xpZW50LT5kZXYuZHJpdmVyLT5vd25lcik7CisJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnQpOworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHJ0bDI4eHh1X2luaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQogewogCWludCByZXQ7CiAJdTggdmFsOwogCi0JZGV2X2RiZygmZC0+dWRldi0+ZGV2LCAiJXM6XG4iLCBfX2Z1bmNfXyk7CisJZGV2X2RiZygmZC0+aW50Zi0+ZGV2LCAiXG4iKTsKIAogCS8qIGluaXQgVVNCIGVuZHBvaW50cyAqLwotCXJldCA9IHJ0bDI4eHhfcmRfcmVnKGQsIFVTQl9TWVNDVExfMCwgJnZhbCk7CisJcmV0ID0gcnRsMjh4eHVfcmRfcmVnKGQsIFVTQl9TWVNDVExfMCwgJnZhbCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAkvKiBlbmFibGUgRE1BIGFuZCBGdWxsIFBhY2tldCBNb2RlKi8KIAl2YWwgfD0gMHgwOTsKLQlyZXQgPSBydGwyOHh4X3dyX3JlZyhkLCBVU0JfU1lTQ1RMXzAsIHZhbCk7CisJcmV0ID0gcnRsMjh4eHVfd3JfcmVnKGQsIFVTQl9TWVNDVExfMCwgdmFsKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCS8qIHNldCBFUEEgbWF4aW11bSBwYWNrZXQgc2l6ZSB0byAweDAyMDAgKi8KLQlyZXQgPSBydGwyOHh4X3dyX3JlZ3MoZCwgVVNCX0VQQV9NQVhQS1QsICJceDAwXHgwMlx4MDBceDAwIiwgNCk7CisJcmV0ID0gcnRsMjh4eHVfd3JfcmVncyhkLCBVU0JfRVBBX01BWFBLVCwgIlx4MDBceDAyXHgwMFx4MDAiLCA0KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCS8qIGNoYW5nZSBFUEEgRklGTyBsZW5ndGggKi8KLQlyZXQgPSBydGwyOHh4X3dyX3JlZ3MoZCwgVVNCX0VQQV9GSUZPX0NGRywgIlx4MTRceDAwXHgwMFx4MDAiLCA0KTsKKwlyZXQgPSBydGwyOHh4dV93cl9yZWdzKGQsIFVTQl9FUEFfRklGT19DRkcsICJceDE0XHgwMFx4MDBceDAwIiwgNCk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKIAlyZXR1cm4gcmV0OwogZXJyOgotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBydGwyOHh4dV9leGl0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKLXsKLQlzdHJ1Y3QgcnRsMjh4eHVfcHJpdiAqcHJpdiA9IGQtPnByaXY7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOlxuIiwgX19mdW5jX18pOwotCi0JLyogcmVtb3ZlIEkyQyB0dW5lciAqLwotCWNsaWVudCA9IHByaXYtPmkyY19jbGllbnRfdHVuZXI7Ci0JaWYgKGNsaWVudCkgewotCQltb2R1bGVfcHV0KGNsaWVudC0+ZGV2LmRyaXZlci0+b3duZXIpOwotCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2xpZW50KTsKLQl9Ci0KLQkvKiByZW1vdmUgSTJDIHNsYXZlIGRlbW9kICovCi0JY2xpZW50ID0gcHJpdi0+aTJjX2NsaWVudF9zbGF2ZV9kZW1vZDsKLQlpZiAoY2xpZW50KSB7Ci0JCW1vZHVsZV9wdXQoY2xpZW50LT5kZXYuZHJpdmVyLT5vd25lcik7Ci0JCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnQpOwotCX0KLQotCXJldHVybjsKLX0KLQogc3RhdGljIGludCBydGwyODMxdV9wb3dlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IG9ub2ZmKQogewogCWludCByZXQ7CiAJdTggZ3Bpbywgc3lzMCwgZXBhX2N0bFsyXTsKIAotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBvbm9mZj0lZFxuIiwgX19mdW5jX18sIG9ub2ZmKTsKKwlkZXZfZGJnKCZkLT5pbnRmLT5kZXYsICJvbm9mZj0lZFxuIiwgb25vZmYpOwogCiAJLyogZGVtb2QgYWRjICovCi0JcmV0ID0gcnRsMjh4eF9yZF9yZWcoZCwgU1lTX1NZUzAsICZzeXMwKTsKKwlyZXQgPSBydGwyOHh4dV9yZF9yZWcoZCwgU1lTX1NZUzAsICZzeXMwKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCS8qIHR1bmVyIHBvd2VyLCByZWFkIEdQSU9zICovCi0JcmV0ID0gcnRsMjh4eF9yZF9yZWcoZCwgU1lTX0dQSU9fT1VUX1ZBTCwgJmdwaW8pOworCXJldCA9IHJ0bDI4eHh1X3JkX3JlZyhkLCBTWVNfR1BJT19PVVRfVkFMLCAmZ3Bpbyk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlkZXZfZGJnKCZkLT51ZGV2LT5kZXYsICIlczogUkQgU1lTMD0lMDJ4IEdQSU9fT1VUX1ZBTD0lMDJ4XG4iLCBfX2Z1bmNfXywKLQkJCXN5czAsIGdwaW8pOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgIlJEIFNZUzA9JTAyeCBHUElPX09VVF9WQUw9JTAyeFxuIiwgc3lzMCwgZ3Bpbyk7CiAKIAlpZiAob25vZmYpIHsKIAkJZ3BpbyB8PSAweDAxOyAvKiBHUElPMCA9IDEgKi8KQEAgLTEyMjksMjEgKzEyOTYsMjAgQEAKIAkJZXBhX2N0bFsxXSA9IDB4MDI7IC8qIHNldCByZXNldCAqLwogCX0KIAotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBXUiBTWVMwPSUwMnggR1BJT19PVVRfVkFMPSUwMnhcbiIsIF9fZnVuY19fLAotCQkJc3lzMCwgZ3Bpbyk7CisJZGV2X2RiZygmZC0+aW50Zi0+ZGV2LCAiV1IgU1lTMD0lMDJ4IEdQSU9fT1VUX1ZBTD0lMDJ4XG4iLCBzeXMwLCBncGlvKTsKIAogCS8qIGRlbW9kIGFkYyAqLwotCXJldCA9IHJ0bDI4eHhfd3JfcmVnKGQsIFNZU19TWVMwLCBzeXMwKTsKKwlyZXQgPSBydGwyOHh4dV93cl9yZWcoZCwgU1lTX1NZUzAsIHN5czApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCiAJLyogdHVuZXIgcG93ZXIsIHdyaXRlIEdQSU9zICovCi0JcmV0ID0gcnRsMjh4eF93cl9yZWcoZCwgU1lTX0dQSU9fT1VUX1ZBTCwgZ3Bpbyk7CisJcmV0ID0gcnRsMjh4eHVfd3JfcmVnKGQsIFNZU19HUElPX09VVF9WQUwsIGdwaW8pOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCiAJLyogc3RyZWFtaW5nIEVQOiBzdGFsbCAmIHJlc2V0ICovCi0JcmV0ID0gcnRsMjh4eF93cl9yZWdzKGQsIFVTQl9FUEFfQ1RMLCBlcGFfY3RsLCAyKTsKKwlyZXQgPSBydGwyOHh4dV93cl9yZWdzKGQsIFVTQl9FUEFfQ1RMLCBlcGFfY3RsLCAyKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIApAQCAtMTI1Miw3ICsxMzE4LDcgQEAKIAogCXJldHVybiByZXQ7CiBlcnI6Ci0JZGV2X2RiZygmZC0+dWRldi0+ZGV2LCAiJXM6IGZhaWxlZD0lZFxuIiwgX19mdW5jX18sIHJldCk7CisJZGV2X2RiZygmZC0+aW50Zi0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEyNjAsMzEgKzEzMjYsMzEgQEAKIHsKIAlpbnQgcmV0OwogCi0JZGV2X2RiZygmZC0+dWRldi0+ZGV2LCAiJXM6IG9ub2ZmPSVkXG4iLCBfX2Z1bmNfXywgb25vZmYpOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgIm9ub2ZmPSVkXG4iLCBvbm9mZik7CiAKIAlpZiAob25vZmYpIHsKIAkJLyogR1BJTzM9MSwgR1BJTzQ9MCAqLwotCQlyZXQgPSBydGwyOHh4X3dyX3JlZ19tYXNrKGQsIFNZU19HUElPX09VVF9WQUwsIDB4MDgsIDB4MTgpOworCQlyZXQgPSBydGwyOHh4dV93cl9yZWdfbWFzayhkLCBTWVNfR1BJT19PVVRfVkFMLCAweDA4LCAweDE4KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCiAJCS8qIHN1c3BlbmQ/ICovCi0JCXJldCA9IHJ0bDI4eHhfd3JfcmVnX21hc2soZCwgU1lTX0RFTU9EX0NUTDEsIDB4MDAsIDB4MTApOworCQlyZXQgPSBydGwyOHh4dV93cl9yZWdfbWFzayhkLCBTWVNfREVNT0RfQ1RMMSwgMHgwMCwgMHgxMCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAogCQkvKiBlbmFibGUgUExMICovCi0JCXJldCA9IHJ0bDI4eHhfd3JfcmVnX21hc2soZCwgU1lTX0RFTU9EX0NUTCwgMHg4MCwgMHg4MCk7CisJCXJldCA9IHJ0bDI4eHh1X3dyX3JlZ19tYXNrKGQsIFNZU19ERU1PRF9DVEwsIDB4ODAsIDB4ODApOwogCQlpZiAocmV0KQogCQkJZ290byBlcnI7CiAKIAkJLyogZGlzYWJsZSByZXNldCAqLwotCQlyZXQgPSBydGwyOHh4X3dyX3JlZ19tYXNrKGQsIFNZU19ERU1PRF9DVEwsIDB4MjAsIDB4MjApOworCQlyZXQgPSBydGwyOHh4dV93cl9yZWdfbWFzayhkLCBTWVNfREVNT0RfQ1RMLCAweDIwLCAweDIwKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCiAJCS8qIHN0cmVhbWluZyBFUDogY2xlYXIgc3RhbGwgJiByZXNldCAqLwotCQlyZXQgPSBydGwyOHh4X3dyX3JlZ3MoZCwgVVNCX0VQQV9DVEwsICJceDAwXHgwMCIsIDIpOworCQlyZXQgPSBydGwyOHh4dV93cl9yZWdzKGQsIFVTQl9FUEFfQ1RMLCAiXHgwMFx4MDAiLCAyKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCkBAIC0xMjkzLDM1ICsxMzU5LDQ5IEBACiAJCQlnb3RvIGVycjsKIAl9IGVsc2UgewogCQkvKiBHUElPND0xICovCi0JCXJldCA9IHJ0bDI4eHhfd3JfcmVnX21hc2soZCwgU1lTX0dQSU9fT1VUX1ZBTCwgMHgxMCwgMHgxMCk7CisJCXJldCA9IHJ0bDI4eHh1X3dyX3JlZ19tYXNrKGQsIFNZU19HUElPX09VVF9WQUwsIDB4MTAsIDB4MTApOwogCQlpZiAocmV0KQogCQkJZ290byBlcnI7CiAKIAkJLyogZGlzYWJsZSBQTEwgKi8KLQkJcmV0ID0gcnRsMjh4eF93cl9yZWdfbWFzayhkLCBTWVNfREVNT0RfQ1RMLCAweDAwLCAweDgwKTsKKwkJcmV0ID0gcnRsMjh4eHVfd3JfcmVnX21hc2soZCwgU1lTX0RFTU9EX0NUTCwgMHgwMCwgMHg4MCk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAogCQkvKiBzdHJlYW1pbmcgRVA6IHNldCBzdGFsbCAmIHJlc2V0ICovCi0JCXJldCA9IHJ0bDI4eHhfd3JfcmVncyhkLCBVU0JfRVBBX0NUTCwgIlx4MTBceDAyIiwgMik7CisJCXJldCA9IHJ0bDI4eHh1X3dyX3JlZ3MoZCwgVVNCX0VQQV9DVEwsICJceDEwXHgwMiIsIDIpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnI7CiAJfQogCiAJcmV0dXJuIHJldDsKIGVycjoKLQlkZXZfZGJnKCZkLT51ZGV2LT5kZXYsICIlczogZmFpbGVkPSVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlkZXZfZGJnKCZkLT5pbnRmLT5kZXYsICJmYWlsZWQ9JWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBydGwyODMydV9mcm9udGVuZF9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgb25vZmYpCitzdGF0aWMgaW50IHJ0bDI4eHh1X3Bvd2VyX2N0cmwoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBpbnQgb25vZmYpCit7CisJc3RydWN0IHJ0bDI4eHh1X2RldiAqZGV2ID0gZF90b19wcml2KGQpOworCisJaWYgKGRldi0+Y2hpcF9pZCA9PSBDSElQX0lEX1JUTDI4MzFVKQorCQlyZXR1cm4gcnRsMjgzMXVfcG93ZXJfY3RybChkLCBvbm9mZik7CisJZWxzZQorCQlyZXR1cm4gcnRsMjgzMnVfcG93ZXJfY3RybChkLCBvbm9mZik7Cit9CisKK3N0YXRpYyBpbnQgcnRsMjh4eHVfZnJvbnRlbmRfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IG9ub2ZmKQogewogCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IGZlX3RvX2QoZmUpOwotCXN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXAgPSBmZV90b19hZGFwKGZlKTsKKwlzdHJ1Y3QgcnRsMjh4eHVfZGV2ICpkZXYgPSBmZV90b19wcml2KGZlKTsKKwlzdHJ1Y3QgcnRsMjgzMl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZkZXYtPnJ0bDI4MzJfcGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0OwogCXU4IHZhbDsKIAotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBmZT0lZCBvbm9mZj0lZFxuIiwgX19mdW5jX18sIGZlLT5pZCwgb25vZmYpOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgImZlPSVkIG9ub2ZmPSVkXG4iLCBmZS0+aWQsIG9ub2ZmKTsKKworCWlmIChkZXYtPmNoaXBfaWQgPT0gQ0hJUF9JRF9SVEwyODMxVSkKKwkJcmV0dXJuIDA7CiAKIAkvKiBjb250cm9sIGludGVybmFsIGRlbW9kIEFEQyAqLwogCWlmIChmZS0+aWQgPT0gMCAmJiBvbm9mZikKQEAgLTEzMjksMjAgKzE0MDksMjAgQEAKIAllbHNlCiAJCXZhbCA9IDB4MDA7IC8qIGRpc2FibGUgQURDICovCiAKLQlyZXQgPSBydGwyOHh4X3dyX3JlZ19tYXNrKGQsIFNZU19ERU1PRF9DVEwsIHZhbCwgMHg0OCk7CisJcmV0ID0gcnRsMjh4eHVfd3JfcmVnX21hc2soZCwgU1lTX0RFTU9EX0NUTCwgdmFsLCAweDQ4KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCS8qIGJ5cGFzcyBzbGF2ZSBkZW1vZCBUUyB0aHJvdWdoIG1hc3RlciBkZW1vZCAqLwogCWlmIChmZS0+aWQgPT0gMSAmJiBvbm9mZikgewotCQlyZXQgPSBydGwyODMyX2VuYWJsZV9leHRlcm5hbF90c19pZihhZGFwLT5mZVswXSk7CisJCXJldCA9IHBkYXRhLT5lbmFibGVfc2xhdmVfdHMoZGV2LT5pMmNfY2xpZW50X2RlbW9kKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCX0KIAogCXJldHVybiAwOwogZXJyOgotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzUwLDcgKzE0MzAsNyBAQAogc3RhdGljIGludCBydGwyODMxdV9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7CiAJaW50IHJldCwgaTsKLQlzdHJ1Y3QgcnRsMjh4eHVfcHJpdiAqcHJpdiA9IGQtPnByaXY7CisJc3RydWN0IHJ0bDI4eHh1X2RldiAqZGV2ID0gZC0+cHJpdjsKIAl1OCBidWZbNV07CiAJdTMyIHJjX2NvZGU7CiAJc3RydWN0IHJ0bDI4eHh1X3JlZ192YWwgcmNfbmVjX3RhYltdID0gewpAQCAtMTM3MSwxNyArMTQ1MSwxNyBAQAogCX07CiAKIAkvKiBpbml0IHJlbW90ZSBjb250cm9sbGVyICovCi0JaWYgKCFwcml2LT5yY19hY3RpdmUpIHsKKwlpZiAoIWRldi0+cmNfYWN0aXZlKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJjX25lY190YWIpOyBpKyspIHsKLQkJCXJldCA9IHJ0bDI4eHhfd3JfcmVnKGQsIHJjX25lY190YWJbaV0ucmVnLAorCQkJcmV0ID0gcnRsMjh4eHVfd3JfcmVnKGQsIHJjX25lY190YWJbaV0ucmVnLAogCQkJCQlyY19uZWNfdGFiW2ldLnZhbCk7CiAJCQlpZiAocmV0KQogCQkJCWdvdG8gZXJyOwogCQl9Ci0JCXByaXYtPnJjX2FjdGl2ZSA9IHRydWU7CisJCWRldi0+cmNfYWN0aXZlID0gdHJ1ZTsKIAl9CiAKLQlyZXQgPSBydGwyODMxX3JkX3JlZ3MoZCwgU1lTX0lSUkNfUlAsIGJ1ZiwgNSk7CisJcmV0ID0gcnRsMjh4eHVfcmRfcmVncyhkLCBTWVNfSVJSQ19SUCwgYnVmLCA1KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIApAQCAtMTQwMywxOSArMTQ4MywxOSBAQAogCiAJCXJjX2tleWRvd24oZC0+cmNfZGV2LCBSQ19UWVBFX05FQywgcmNfY29kZSwgMCk7CiAKLQkJcmV0ID0gcnRsMjh4eF93cl9yZWcoZCwgU1lTX0lSUkNfU1IsIDEpOworCQlyZXQgPSBydGwyOHh4dV93cl9yZWcoZCwgU1lTX0lSUkNfU1IsIDEpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnI7CiAKIAkJLyogcmVwZWF0ZWQgaW50ZW50aW9uYWxseSB0byBhdm9pZCBleHRyYSBrZXlwcmVzcyAqLwotCQlyZXQgPSBydGwyOHh4X3dyX3JlZyhkLCBTWVNfSVJSQ19TUiwgMSk7CisJCXJldCA9IHJ0bDI4eHh1X3dyX3JlZyhkLCBTWVNfSVJSQ19TUiwgMSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAl9CiAKIAlyZXR1cm4gcmV0OwogZXJyOgotCWRldl9kYmcoJmQtPnVkZXYtPmRldiwgIiVzOiBmYWlsZWQ9JWRcbiIsIF9fZnVuY19fLCByZXQpOworCWRldl9kYmcoJmQtPmludGYtPmRldiwgImZhaWxlZD0lZFxuIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDMzLDcgKzE1MTMsNyBAQAogc3RhdGljIGludCBydGwyODMydV9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQpCiB7CiAJaW50IHJldCwgaSwgbGVuOwotCXN0cnVjdCBydGwyOHh4dV9wcml2ICpwcml2ID0gZC0+cHJpdjsKKwlzdHJ1Y3QgcnRsMjh4eHVfZGV2ICpkZXYgPSBkLT5wcml2OwogCXN0cnVjdCBpcl9yYXdfZXZlbnQgZXY7CiAJdTggYnVmWzEyOF07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBydGwyOHh4dV9yZWdfdmFsX21hc2sgcmVmcmVzaF90YWJbXSA9IHsKQEAgLTE0NDMsNyArMTUyMyw3IEBACiAJfTsKIAogCS8qIGluaXQgcmVtb3RlIGNvbnRyb2xsZXIgKi8KLQlpZiAoIXByaXYtPnJjX2FjdGl2ZSkgeworCWlmICghZGV2LT5yY19hY3RpdmUpIHsKIAkJc3RhdGljIGNvbnN0IHN0cnVjdCBydGwyOHh4dV9yZWdfdmFsX21hc2sgaW5pdF90YWJbXSA9IHsKIAkJCXtTWVNfREVNT0RfQ1RMMSwgICAgICAgICAweDAwLCAweDA0fSwKIAkJCXtTWVNfREVNT0RfQ1RMMSwgICAgICAgICAweDAwLCAweDA4fSwKQEAgLTE0NjQsMzYgKzE1NDQsMzYgQEAKIAkJfTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbml0X3RhYik7IGkrKykgewotCQkJcmV0ID0gcnRsMjh4eF93cl9yZWdfbWFzayhkLCBpbml0X3RhYltpXS5yZWcsCisJCQlyZXQgPSBydGwyOHh4dV93cl9yZWdfbWFzayhkLCBpbml0X3RhYltpXS5yZWcsCiAJCQkJCWluaXRfdGFiW2ldLnZhbCwgaW5pdF90YWJbaV0ubWFzayk7CiAJCQlpZiAocmV0KQogCQkJCWdvdG8gZXJyOwogCQl9CiAKLQkJcHJpdi0+cmNfYWN0aXZlID0gdHJ1ZTsKKwkJZGV2LT5yY19hY3RpdmUgPSB0cnVlOwogCX0KIAotCXJldCA9IHJ0bDI4eHhfcmRfcmVnKGQsIElSX1JYX0lGLCAmYnVmWzBdKTsKKwlyZXQgPSBydGwyOHh4dV9yZF9yZWcoZCwgSVJfUlhfSUYsICZidWZbMF0pOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCiAJaWYgKGJ1ZlswXSAhPSAweDgzKQogCQlnb3RvIGV4aXQ7CiAKLQlyZXQgPSBydGwyOHh4X3JkX3JlZyhkLCBJUl9SWF9CQywgJmJ1ZlswXSk7CisJcmV0ID0gcnRsMjh4eHVfcmRfcmVnKGQsIElSX1JYX0JDLCAmYnVmWzBdKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCWxlbiA9IGJ1ZlswXTsKIAogCS8qIHJlYWQgcmF3IGNvZGUgZnJvbSBodyAqLwotCXJldCA9IHJ0bDI4MzFfcmRfcmVncyhkLCBJUl9SWF9CVUYsIGJ1ZiwgbGVuKTsKKwlyZXQgPSBydGwyOHh4dV9yZF9yZWdzKGQsIElSX1JYX0JVRiwgYnVmLCBsZW4pOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCiAJLyogbGV0IGh3IHJlY2VpdmUgbmV3IGNvZGUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWZyZXNoX3RhYik7IGkrKykgewotCQlyZXQgPSBydGwyOHh4X3dyX3JlZ19tYXNrKGQsIHJlZnJlc2hfdGFiW2ldLnJlZywKKwkJcmV0ID0gcnRsMjh4eHVfd3JfcmVnX21hc2soZCwgcmVmcmVzaF90YWJbaV0ucmVnLAogCQkJCXJlZnJlc2hfdGFiW2ldLnZhbCwgcmVmcmVzaF90YWJbaV0ubWFzayk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKQEAgLTE1MTQsNyArMTU5NCw3IEBACiBleGl0OgogCXJldHVybiByZXQ7CiBlcnI6Ci0JZGV2X2RiZygmZC0+dWRldi0+ZGV2LCAiJXM6IGZhaWxlZD0lZFxuIiwgX19mdW5jX18sIHJldCk7CisJZGV2X2RiZygmZC0+aW50Zi0+ZGV2LCAiZmFpbGVkPSVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE1MjMsNyArMTYwMyw3IEBACiB7CiAJLyogZGlzYWJsZSBJUiBpbnRlcnJ1cHRzIGluIG9yZGVyIHRvIGF2b2lkIFNEUiBzYW1wbGUgbG9zcyAqLwogCWlmIChydGwyOHh4dV9kaXNhYmxlX3JjKQotCQlyZXR1cm4gcnRsMjh4eF93cl9yZWcoZCwgSVJfUlhfSUUsIDB4MDApOworCQlyZXR1cm4gcnRsMjh4eHVfd3JfcmVnKGQsIElSX1JYX0lFLCAweDAwKTsKIAogCS8qIGxvYWQgZW1wdHkgdG8gZW5hYmxlIHJjICovCiAJaWYgKCFyYy0+bWFwX25hbWUpCkBAIC0xNTM1LDUyICsxNjE1LDgwIEBACiAKIAlyZXR1cm4gMDsKIH0KKworc3RhdGljIGludCBydGwyOHh4dV9nZXRfcmNfY29uZmlnKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwKKwkJc3RydWN0IGR2Yl91c2JfcmMgKnJjKQoreworCXN0cnVjdCBydGwyOHh4dV9kZXYgKmRldiA9IGRfdG9fcHJpdihkKTsKKworCWlmIChkZXYtPmNoaXBfaWQgPT0gQ0hJUF9JRF9SVEwyODMxVSkKKwkJcmV0dXJuIHJ0bDI4MzF1X2dldF9yY19jb25maWcoZCwgcmMpOworCWVsc2UKKwkJcmV0dXJuIHJ0bDI4MzJ1X2dldF9yY19jb25maWcoZCwgcmMpOworfQogI2Vsc2UKLSNkZWZpbmUgcnRsMjgzMXVfZ2V0X3JjX2NvbmZpZyBOVUxMCi0jZGVmaW5lIHJ0bDI4MzJ1X2dldF9yY19jb25maWcgTlVMTAorI2RlZmluZSBydGwyOHh4dV9nZXRfcmNfY29uZmlnIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgcnRsMjgzMXVfcHJvcHMgPSB7CitzdGF0aWMgaW50IHJ0bDI4eHh1X3BpZF9maWx0ZXJfY3RybChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgb25vZmYpCit7CisJc3RydWN0IHJ0bDI4eHh1X2RldiAqZGV2ID0gYWRhcF90b19wcml2KGFkYXApOworCisJaWYgKGRldi0+Y2hpcF9pZCA9PSBDSElQX0lEX1JUTDI4MzFVKSB7CisJCXN0cnVjdCBydGwyODMwX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gJmRldi0+cnRsMjgzMF9wbGF0Zm9ybV9kYXRhOworCisJCXJldHVybiBwZGF0YS0+cGlkX2ZpbHRlcl9jdHJsKGFkYXAtPmZlWzBdLCBvbm9mZik7CisJfSBlbHNlIHsKKwkJc3RydWN0IHJ0bDI4MzJfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSAmZGV2LT5ydGwyODMyX3BsYXRmb3JtX2RhdGE7CisKKwkJcmV0dXJuIHBkYXRhLT5waWRfZmlsdGVyX2N0cmwoYWRhcC0+ZmVbMF0sIG9ub2ZmKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcnRsMjh4eHVfcGlkX2ZpbHRlcihzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwLCBpbnQgaW5kZXgsCisJCQkgICAgICAgdTE2IHBpZCwgaW50IG9ub2ZmKQoreworCXN0cnVjdCBydGwyOHh4dV9kZXYgKmRldiA9IGFkYXBfdG9fcHJpdihhZGFwKTsKKworCWlmIChkZXYtPmNoaXBfaWQgPT0gQ0hJUF9JRF9SVEwyODMxVSkgeworCQlzdHJ1Y3QgcnRsMjgzMF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZkZXYtPnJ0bDI4MzBfcGxhdGZvcm1fZGF0YTsKKworCQlyZXR1cm4gcGRhdGEtPnBpZF9maWx0ZXIoYWRhcC0+ZmVbMF0sIGluZGV4LCBwaWQsIG9ub2ZmKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgcnRsMjgzMl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9ICZkZXYtPnJ0bDI4MzJfcGxhdGZvcm1fZGF0YTsKKworCQlyZXR1cm4gcGRhdGEtPnBpZF9maWx0ZXIoYWRhcC0+ZmVbMF0sIGluZGV4LCBwaWQsIG9ub2ZmKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfcHJvcGVydGllcyBydGwyOHh4dV9wcm9wcyA9IHsKIAkuZHJpdmVyX25hbWUgPSBLQlVJTERfTU9ETkFNRSwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuYWRhcHRlcl9uciA9IGFkYXB0ZXJfbnIsCi0JLnNpemVfb2ZfcHJpdiA9IHNpemVvZihzdHJ1Y3QgcnRsMjh4eHVfcHJpdiksCisJLnNpemVfb2ZfcHJpdiA9IHNpemVvZihzdHJ1Y3QgcnRsMjh4eHVfZGV2KSwKIAotCS5wb3dlcl9jdHJsID0gcnRsMjgzMXVfcG93ZXJfY3RybCwKKwkuaWRlbnRpZnlfc3RhdGUgPSBydGwyOHh4dV9pZGVudGlmeV9zdGF0ZSwKKwkucG93ZXJfY3RybCA9IHJ0bDI4eHh1X3Bvd2VyX2N0cmwsCisJLmZyb250ZW5kX2N0cmwgPSBydGwyOHh4dV9mcm9udGVuZF9jdHJsLAogCS5pMmNfYWxnbyA9ICZydGwyOHh4dV9pMmNfYWxnbywKLQkucmVhZF9jb25maWcgPSBydGwyODMxdV9yZWFkX2NvbmZpZywKLQkuZnJvbnRlbmRfYXR0YWNoID0gcnRsMjgzMXVfZnJvbnRlbmRfYXR0YWNoLAotCS50dW5lcl9hdHRhY2ggPSBydGwyODMxdV90dW5lcl9hdHRhY2gsCisJLnJlYWRfY29uZmlnID0gcnRsMjh4eHVfcmVhZF9jb25maWcsCisJLmZyb250ZW5kX2F0dGFjaCA9IHJ0bDI4eHh1X2Zyb250ZW5kX2F0dGFjaCwKKwkuZnJvbnRlbmRfZGV0YWNoID0gcnRsMjh4eHVfZnJvbnRlbmRfZGV0YWNoLAorCS50dW5lcl9hdHRhY2ggPSBydGwyOHh4dV90dW5lcl9hdHRhY2gsCisJLnR1bmVyX2RldGFjaCA9IHJ0bDI4eHh1X3R1bmVyX2RldGFjaCwKIAkuaW5pdCA9IHJ0bDI4eHh1X2luaXQsCi0JLmdldF9yY19jb25maWcgPSBydGwyODMxdV9nZXRfcmNfY29uZmlnLAorCS5nZXRfcmNfY29uZmlnID0gcnRsMjh4eHVfZ2V0X3JjX2NvbmZpZywKIAogCS5udW1fYWRhcHRlcnMgPSAxLAogCS5hZGFwdGVyID0gewogCQl7Ci0JCQkuc3RyZWFtID0gRFZCX1VTQl9TVFJFQU1fQlVMSygweDgxLCA2LCA4ICogNTEyKSwKLQkJfSwKLQl9LAotfTsKKwkJCS5jYXBzID0gRFZCX1VTQl9BREFQX0hBU19QSURfRklMVEVSIHwKKwkJCQlEVkJfVVNCX0FEQVBfUElEX0ZJTFRFUl9DQU5fQkVfVFVSTkVEX09GRiwKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIHJ0bDI4MzJ1X3Byb3BzID0gewotCS5kcml2ZXJfbmFtZSA9IEtCVUlMRF9NT0ROQU1FLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5hZGFwdGVyX25yID0gYWRhcHRlcl9uciwKLQkuc2l6ZV9vZl9wcml2ID0gc2l6ZW9mKHN0cnVjdCBydGwyOHh4dV9wcml2KSwKKwkJCS5waWRfZmlsdGVyX2NvdW50ID0gMzIsCisJCQkucGlkX2ZpbHRlcl9jdHJsID0gcnRsMjh4eHVfcGlkX2ZpbHRlcl9jdHJsLAorCQkJLnBpZF9maWx0ZXIgPSBydGwyOHh4dV9waWRfZmlsdGVyLAogCi0JLnBvd2VyX2N0cmwgPSBydGwyODMydV9wb3dlcl9jdHJsLAotCS5mcm9udGVuZF9jdHJsID0gcnRsMjgzMnVfZnJvbnRlbmRfY3RybCwKLQkuaTJjX2FsZ28gPSAmcnRsMjh4eHVfaTJjX2FsZ28sCi0JLnJlYWRfY29uZmlnID0gcnRsMjgzMnVfcmVhZF9jb25maWcsCi0JLmZyb250ZW5kX2F0dGFjaCA9IHJ0bDI4MzJ1X2Zyb250ZW5kX2F0dGFjaCwKLQkudHVuZXJfYXR0YWNoID0gcnRsMjgzMnVfdHVuZXJfYXR0YWNoLAotCS5pbml0ID0gcnRsMjh4eHVfaW5pdCwKLQkuZXhpdCA9IHJ0bDI4eHh1X2V4aXQsCi0JLmdldF9yY19jb25maWcgPSBydGwyODMydV9nZXRfcmNfY29uZmlnLAotCi0JLm51bV9hZGFwdGVycyA9IDEsCi0JLmFkYXB0ZXIgPSB7Ci0JCXsKIAkJCS5zdHJlYW0gPSBEVkJfVVNCX1NUUkVBTV9CVUxLKDB4ODEsIDYsIDggKiA1MTIpLAogCQl9LAogCX0sCkBAIC0xNTg5LDY5ICsxNjk3LDY5IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgcnRsMjh4eHVfaWRfdGFibGVbXSA9IHsKIAkvKiBSVEwyODMxVSBkZXZpY2VzOiAqLwogCXsgRFZCX1VTQl9ERVZJQ0UoVVNCX1ZJRF9SRUFMVEVLLCBVU0JfUElEX1JFQUxURUtfUlRMMjgzMVUsCi0JCSZydGwyODMxdV9wcm9wcywgIlJlYWx0ZWsgUlRMMjgzMVUgcmVmZXJlbmNlIGRlc2lnbiIsIE5VTEwpIH0sCisJCSZydGwyOHh4dV9wcm9wcywgIlJlYWx0ZWsgUlRMMjgzMVUgcmVmZXJlbmNlIGRlc2lnbiIsIE5VTEwpIH0sCiAJeyBEVkJfVVNCX0RFVklDRShVU0JfVklEX1dJREVWSUVXLCBVU0JfUElEX0ZSRUVDT01fRFZCVCwKLQkJJnJ0bDI4MzF1X3Byb3BzLCAiRnJlZWNvbSBVU0IyLjAgRFZCLVQiLCBOVUxMKSB9LAorCQkmcnRsMjh4eHVfcHJvcHMsICJGcmVlY29tIFVTQjIuMCBEVkItVCIsIE5VTEwpIH0sCiAJeyBEVkJfVVNCX0RFVklDRShVU0JfVklEX1dJREVWSUVXLCBVU0JfUElEX0ZSRUVDT01fRFZCVF8yLAotCQkmcnRsMjgzMXVfcHJvcHMsICJGcmVlY29tIFVTQjIuMCBEVkItVCIsIE5VTEwpIH0sCisJCSZydGwyOHh4dV9wcm9wcywgIkZyZWVjb20gVVNCMi4wIERWQi1UIiwgTlVMTCkgfSwKIAogCS8qIFJUTDI4MzJVIGRldmljZXM6ICovCiAJeyBEVkJfVVNCX0RFVklDRShVU0JfVklEX1JFQUxURUssIDB4MjgzMiwKLQkJJnJ0bDI4MzJ1X3Byb3BzLCAiUmVhbHRlayBSVEwyODMyVSByZWZlcmVuY2UgZGVzaWduIiwgTlVMTCkgfSwKKwkJJnJ0bDI4eHh1X3Byb3BzLCAiUmVhbHRlayBSVEwyODMyVSByZWZlcmVuY2UgZGVzaWduIiwgTlVMTCkgfSwKIAl7IERWQl9VU0JfREVWSUNFKFVTQl9WSURfUkVBTFRFSywgMHgyODM4LAotCQkmcnRsMjgzMnVfcHJvcHMsICJSZWFsdGVrIFJUTDI4MzJVIHJlZmVyZW5jZSBkZXNpZ24iLCBOVUxMKSB9LAorCQkmcnRsMjh4eHVfcHJvcHMsICJSZWFsdGVrIFJUTDI4MzJVIHJlZmVyZW5jZSBkZXNpZ24iLCBOVUxMKSB9LAogCXsgRFZCX1VTQl9ERVZJQ0UoVVNCX1ZJRF9URVJSQVRFQywgVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX1RfU1RJQ0tfQkxBQ0tfUkVWMSwKLQkJJnJ0bDI4MzJ1X3Byb3BzLCAiVGVycmFUZWMgQ2luZXJneSBUIFN0aWNrIEJsYWNrIiwgUkNfTUFQX1RFUlJBVEVDX1NMSU0pIH0sCisJCSZydGwyOHh4dV9wcm9wcywgIlRlcnJhVGVjIENpbmVyZ3kgVCBTdGljayBCbGFjayIsIFJDX01BUF9URVJSQVRFQ19TTElNKSB9LAogCXsgRFZCX1VTQl9ERVZJQ0UoVVNCX1ZJRF9HVEVLLCBVU0JfUElEX0RFTE9DS19VU0IyX0RWQlQsCi0JCSZydGwyODMydV9wcm9wcywgIkctVGVrIEVsZWN0cm9uaWNzIEdyb3VwIExpZmV2aWV3IExWNVRETFggRFZCLVQiLCBOVUxMKSB9LAorCQkmcnRsMjh4eHVfcHJvcHMsICJHLVRlayBFbGVjdHJvbmljcyBHcm91cCBMaWZldmlldyBMVjVURExYIERWQi1UIiwgTlVMTCkgfSwKIAl7IERWQl9VU0JfREVWSUNFKFVTQl9WSURfVEVSUkFURUMsIFVTQl9QSURfTk9YT05fREFCX1NUSUNLLAotCQkmcnRsMjgzMnVfcHJvcHMsICJUZXJyYVRlYyBOT1hPTiBEQUIgU3RpY2siLCBOVUxMKSB9LAorCQkmcnRsMjh4eHVfcHJvcHMsICJUZXJyYVRlYyBOT1hPTiBEQUIgU3RpY2siLCBOVUxMKSB9LAogCXsgRFZCX1VTQl9ERVZJQ0UoVVNCX1ZJRF9URVJSQVRFQywgVVNCX1BJRF9OT1hPTl9EQUJfU1RJQ0tfUkVWMiwKLQkJJnJ0bDI4MzJ1X3Byb3BzLCAiVGVycmFUZWMgTk9YT04gREFCIFN0aWNrIChyZXYgMikiLCBOVUxMKSB9LAorCQkmcnRsMjh4eHVfcHJvcHMsICJUZXJyYVRlYyBOT1hPTiBEQUIgU3RpY2sgKHJldiAyKSIsIE5VTEwpIH0sCiAJeyBEVkJfVVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLCBVU0JfUElEX05PWE9OX0RBQl9TVElDS19SRVYzLAotCQkmcnRsMjgzMnVfcHJvcHMsICJUZXJyYVRlYyBOT1hPTiBEQUIgU3RpY2sgKHJldiAzKSIsIE5VTEwpIH0sCisJCSZydGwyOHh4dV9wcm9wcywgIlRlcnJhVGVjIE5PWE9OIERBQiBTdGljayAocmV2IDMpIiwgTlVMTCkgfSwKIAl7IERWQl9VU0JfREVWSUNFKFVTQl9WSURfR1RFSywgVVNCX1BJRF9UUkVLU1RPUl9URVJSRVNfMl8wLAotCQkmcnRsMjgzMnVfcHJvcHMsICJUcmVrc3RvciBEVkItVCBTdGljayBUZXJyZXMgMi4wIiwgTlVMTCkgfSwKKwkJJnJ0bDI4eHh1X3Byb3BzLCAiVHJla3N0b3IgRFZCLVQgU3RpY2sgVGVycmVzIDIuMCIsIE5VTEwpIH0sCiAJeyBEVkJfVVNCX0RFVklDRShVU0JfVklEX0RFWEFURUssIDB4MTEwMSwKLQkJJnJ0bDI4MzJ1X3Byb3BzLCAiRGV4YXRlayBESyBEVkItVCBEb25nbGUiLCBOVUxMKSB9LAorCQkmcnRsMjh4eHVfcHJvcHMsICJEZXhhdGVrIERLIERWQi1UIERvbmdsZSIsIE5VTEwpIH0sCiAJeyBEVkJfVVNCX0RFVklDRShVU0JfVklEX0xFQURURUssIDB4NjY4MCwKLQkJJnJ0bDI4MzJ1X3Byb3BzLCAiRGlnaXRhbE5vdyBRdWFkIERWQi1UIFJlY2VpdmVyIiwgTlVMTCkgfSwKKwkJJnJ0bDI4eHh1X3Byb3BzLCAiRGlnaXRhbE5vdyBRdWFkIERWQi1UIFJlY2VpdmVyIiwgTlVMTCkgfSwKIAl7IERWQl9VU0JfREVWSUNFKFVTQl9WSURfTEVBRFRFSywgVVNCX1BJRF9XSU5GQVNUX0RUVl9ET05HTEVfTUlOSUQsCi0JCSZydGwyODMydV9wcm9wcywgIkxlYWR0ZWsgV2luZmFzdCBEVFYgRG9uZ2xlIE1pbmkgRCIsIE5VTEwpIH0sCisJCSZydGwyOHh4dV9wcm9wcywgIkxlYWR0ZWsgV2luZmFzdCBEVFYgRG9uZ2xlIE1pbmkgRCIsIE5VTEwpIH0sCiAJeyBEVkJfVVNCX0RFVklDRShVU0JfVklEX1RFUlJBVEVDLCAweDAwZDMsCi0JCSZydGwyODMydV9wcm9wcywgIlRlcnJhVGVjIENpbmVyZ3kgVCBTdGljayBSQyAoUmV2LiAzKSIsIE5VTEwpIH0sCisJCSZydGwyOHh4dV9wcm9wcywgIlRlcnJhVGVjIENpbmVyZ3kgVCBTdGljayBSQyAoUmV2LiAzKSIsIE5VTEwpIH0sCiAJeyBEVkJfVVNCX0RFVklDRShVU0JfVklEX0RFWEFURUssIDB4MTEwMiwKLQkJJnJ0bDI4MzJ1X3Byb3BzLCAiRGV4YXRlayBESyBtaW5pIERWQi1UIERvbmdsZSIsIE5VTEwpIH0sCisJCSZydGwyOHh4dV9wcm9wcywgIkRleGF0ZWsgREsgbWluaSBEVkItVCBEb25nbGUiLCBOVUxMKSB9LAogCXsgRFZCX1VTQl9ERVZJQ0UoVVNCX1ZJRF9URVJSQVRFQywgMHgwMGQ3LAotCQkmcnRsMjgzMnVfcHJvcHMsICJUZXJyYVRlYyBDaW5lcmd5IFQgU3RpY2srIiwgTlVMTCkgfSwKKwkJJnJ0bDI4eHh1X3Byb3BzLCAiVGVycmFUZWMgQ2luZXJneSBUIFN0aWNrKyIsIE5VTEwpIH0sCiAJeyBEVkJfVVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAweGQzYTgsCi0JCSZydGwyODMydV9wcm9wcywgIkFTVVMgTXkgQ2luZW1hLVUzMTAwTWluaSBQbHVzIFYyIiwgTlVMTCkgfSwKKwkJJnJ0bDI4eHh1X3Byb3BzLCAiQVNVUyBNeSBDaW5lbWEtVTMxMDBNaW5pIFBsdXMgVjIiLCBOVUxMKSB9LAogCXsgRFZCX1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgMHhkMzkzLAotCQkmcnRsMjgzMnVfcHJvcHMsICJHSUdBQllURSBVNzMwMCIsIE5VTEwpIH0sCisJCSZydGwyOHh4dV9wcm9wcywgIkdJR0FCWVRFIFU3MzAwIiwgTlVMTCkgfSwKIAl7IERWQl9VU0JfREVWSUNFKFVTQl9WSURfREVYQVRFSywgMHgxMTA0LAotCQkmcnRsMjgzMnVfcHJvcHMsICJNU0kgRElHSVZPWCBNaWNybyBIRCIsIE5VTEwpIH0sCisJCSZydGwyOHh4dV9wcm9wcywgIk1TSSBESUdJVk9YIE1pY3JvIEhEIiwgTlVMTCkgfSwKIAl7IERWQl9VU0JfREVWSUNFKFVTQl9WSURfQ09NUFJPLCAweDA2MjAsCi0JCSZydGwyODMydV9wcm9wcywgIkNvbXBybyBWaWRlb01hdGUgVTYyMEYiLCBOVUxMKSB9LAorCQkmcnRsMjh4eHVfcHJvcHMsICJDb21wcm8gVmlkZW9NYXRlIFU2MjBGIiwgTlVMTCkgfSwKIAl7IERWQl9VU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsIDB4ZDM5NCwKLQkJJnJ0bDI4MzJ1X3Byb3BzLCAiTWF4TWVkaWEgSFUzOTQtVCIsIE5VTEwpIH0sCisJCSZydGwyOHh4dV9wcm9wcywgIk1heE1lZGlhIEhVMzk0LVQiLCBOVUxMKSB9LAogCXsgRFZCX1VTQl9ERVZJQ0UoVVNCX1ZJRF9MRUFEVEVLLCAweDZhMDMsCi0JCSZydGwyODMydV9wcm9wcywgIkxlYWR0ZWsgV2luRmFzdCBEVFYgRG9uZ2xlIG1pbmkiLCBOVUxMKSB9LAorCQkmcnRsMjh4eHVfcHJvcHMsICJMZWFkdGVrIFdpbkZhc3QgRFRWIERvbmdsZSBtaW5pIiwgTlVMTCkgfSwKIAl7IERWQl9VU0JfREVWSUNFKFVTQl9WSURfR1RFSywgVVNCX1BJRF9DUFlUT19SRURJX1BDNTBBLAotCQkmcnRsMjgzMnVfcHJvcHMsICJDcnlwdG8gUmVEaSBQQyA1MCBBIiwgTlVMTCkgfSwKKwkJJnJ0bDI4eHh1X3Byb3BzLCAiQ3J5cHRvIFJlRGkgUEMgNTAgQSIsIE5VTEwpIH0sCiAJeyBEVkJfVVNCX0RFVklDRShVU0JfVklEX0tZRSwgMHg3MDdmLAotCQkmcnRsMjgzMnVfcHJvcHMsICJHZW5pdXMgVFZHbyBEVkItVDAzIiwgTlVMTCkgfSwKKwkJJnJ0bDI4eHh1X3Byb3BzLCAiR2VuaXVzIFRWR28gRFZCLVQwMyIsIE5VTEwpIH0sCiAJeyBEVkJfVVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAweGQzOTUsCi0JCSZydGwyODMydV9wcm9wcywgIlBlYWsgRFZCLVQgVVNCIiwgTlVMTCkgfSwKKwkJJnJ0bDI4eHh1X3Byb3BzLCAiUGVhayBEVkItVCBVU0IiLCBOVUxMKSB9LAogCXsgRFZCX1VTQl9ERVZJQ0UoVVNCX1ZJRF9LV09STERfMiwgVVNCX1BJRF9TVkVPTl9TVFYyMF9SVEwyODMyVSwKLQkJJnJ0bDI4MzJ1X3Byb3BzLCAiU3Zlb24gU1RWMjAiLCBOVUxMKSB9LAorCQkmcnRsMjh4eHVfcHJvcHMsICJTdmVvbiBTVFYyMCIsIE5VTEwpIH0sCiAJeyBEVkJfVVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCBVU0JfUElEX1NWRU9OX1NUVjIxLAotCQkmcnRsMjgzMnVfcHJvcHMsICJTdmVvbiBTVFYyMSIsIE5VTEwpIH0sCisJCSZydGwyOHh4dV9wcm9wcywgIlN2ZW9uIFNUVjIxIiwgTlVMTCkgfSwKIAl7IERWQl9VU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsIFVTQl9QSURfU1ZFT05fU1RWMjcsCi0JCSZydGwyODMydV9wcm9wcywgIlN2ZW9uIFNUVjI3IiwgTlVMTCkgfSwKKwkJJnJ0bDI4eHh1X3Byb3BzLCAiU3Zlb24gU1RWMjciLCBOVUxMKSB9LAogCiAJLyogUlRMMjgzMlAgZGV2aWNlczogKi8KIAl7IERWQl9VU0JfREVWSUNFKFVTQl9WSURfSEFORlRFSywgMHgwMTMxLAotCQkmcnRsMjgzMnVfcHJvcHMsICJBc3Ryb21ldGEgRFZCLVQyIiwgTlVMTCkgfSwKKwkJJnJ0bDI4eHh1X3Byb3BzLCAiQXN0cm9tZXRhIERWQi1UMiIsIE5VTEwpIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHJ0bDI4eHh1X2lkX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvcnRsMjh4eHUuaCBiL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2ItdjIvcnRsMjh4eHUuaAppbmRleCAzZTNlYTlkLi4xYjVkN2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiLXYyL3J0bDI4eHh1LmgKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi12Mi9ydGwyOHh4dS5oCkBAIC0yMiw4ICsyMiwyNiBAQAogI2lmbmRlZiBSVEwyOFhYVV9ICiAjZGVmaW5lIFJUTDI4WFhVX0gKIAorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCiAjaW5jbHVkZSAiZHZiX3VzYi5oIgogCisjaW5jbHVkZSAicnRsMjgzMC5oIgorI2luY2x1ZGUgInJ0bDI4MzIuaCIKKyNpbmNsdWRlICJydGwyODMyX3Nkci5oIgorI2luY2x1ZGUgIm1uODg0NzIuaCIKKyNpbmNsdWRlICJtbjg4NDczLmgiCisKKyNpbmNsdWRlICJxdDEwMTAuaCIKKyNpbmNsdWRlICJtdDIwNjAuaCIKKyNpbmNsdWRlICJteGw1MDA1cy5oIgorI2luY2x1ZGUgImZjMDAxMi5oIgorI2luY2x1ZGUgImZjMDAxMy5oIgorI2luY2x1ZGUgImU0MDAwLmgiCisjaW5jbHVkZSAiZmMyNTgwLmgiCisjaW5jbHVkZSAidHVhOTAwMS5oIgorI2luY2x1ZGUgInI4MjB0LmgiCisKIC8qCiAgKiBVU0IgY29tbWFuZHMKICAqICh1c2JfY29udHJvbF9tc2coKSBpbmRleCBwYXJhbWV0ZXIpCkBAIC01MCwxOSArNjgsMjYgQEAKICNkZWZpbmUgQ01EX0kyQ19EQV9XUiAgICAweDA2MTAKIAogCi1zdHJ1Y3QgcnRsMjh4eHVfcHJpdiB7CitzdHJ1Y3QgcnRsMjh4eHVfZGV2IHsKKwl1OCBidWZbMjhdOwogCXU4IGNoaXBfaWQ7CiAJdTggdHVuZXI7CiAJY2hhciAqdHVuZXJfbmFtZTsKIAl1OCBwYWdlOyAvKiBpbnRlZ3JhdGVkIGRlbW9kIGFjdGl2ZSByZWdpc3RlciBwYWdlICovCiAJc3RydWN0IGkyY19hZGFwdGVyICpkZW1vZF9pMmNfYWRhcHRlcjsKIAlib29sIHJjX2FjdGl2ZTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudF9kZW1vZDsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudF90dW5lcjsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudF9zbGF2ZV9kZW1vZDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2Vfc2RyOwogCSNkZWZpbmUgU0xBVkVfREVNT0RfTk9ORSAgICAgICAgICAgMAogCSNkZWZpbmUgU0xBVkVfREVNT0RfTU44ODQ3MiAgICAgICAgMQogCSNkZWZpbmUgU0xBVkVfREVNT0RfTU44ODQ3MyAgICAgICAgMgogCXVuc2lnbmVkIGludCBzbGF2ZV9kZW1vZDoyOworCXVuaW9uIHsKKwkJc3RydWN0IHJ0bDI4MzBfcGxhdGZvcm1fZGF0YSBydGwyODMwX3BsYXRmb3JtX2RhdGE7CisJCXN0cnVjdCBydGwyODMyX3BsYXRmb3JtX2RhdGEgcnRsMjgzMl9wbGF0Zm9ybV9kYXRhOworCX07CiB9OwogCiBlbnVtIHJ0bDI4eHh1X2NoaXBfaWQgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi9tOTIweC5jIGIvZHJpdmVycy9tZWRpYS91c2IvZHZiLXVzYi9tOTIweC5jCmluZGV4IGFiZjhhYjIuLmVhZmM1YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2R2Yi11c2IvbTkyMHguYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9kdmItdXNiL205MjB4LmMKQEAgLTEyNjksOCArMTI2OSwzIEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBEcml2ZXIgZm9yIFVMSSBNOTIweCIpOwogTU9EVUxFX1ZFUlNJT04oIjAuMSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvZW0yOHh4L2VtMjh4eC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS91c2IvZW0yOHh4L2VtMjh4eC1hdWRpby5jCmluZGV4IDQ0YWUxZTAuLjQ5YTVmOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2VtMjh4eC9lbTI4eHgtYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9lbTI4eHgvZW0yOHh4LWF1ZGlvLmMKQEAgLTgyMCw3ICs4MjAsNyBAQAogCWlmICh1cmJfc2l6ZSA+IGVwX3NpemUgKiBucGFja2V0cykKIAkJbnBhY2tldHMgPSBESVZfUk9VTkRfVVAodXJiX3NpemUsIGVwX3NpemUpOwogCi0JZW0yOHh4X2luZm8oIk51bWJlciBvZiBVUkJzOiAlZCwgd2l0aCAlZCBwYWNrZXRzIGFuZCAlZCBzaXplIiwKKwllbTI4eHhfaW5mbygiTnVtYmVyIG9mIFVSQnM6ICVkLCB3aXRoICVkIHBhY2tldHMgYW5kICVkIHNpemVcbiIsCiAJCSAgICBudW1fdXJiLCBucGFja2V0cywgdXJiX3NpemUpOwogCiAJLyogRXN0aW1hdGUgdGhlIGJ5dGVzIHBlciBwZXJpb2QgKi8KQEAgLTk4MSw3ICs5ODEsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQllbTI4eHhfaW5mbygiQ2xvc2luZyBhdWRpbyBleHRlbnNpb24iKTsKKwllbTI4eHhfaW5mbygiQ2xvc2luZyBhdWRpbyBleHRlbnNpb25cbiIpOwogCiAJaWYgKGRldi0+YWRldi5zbmRjYXJkKSB7CiAJCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoZGV2LT5hZGV2LnNuZGNhcmQpOwpAQCAtMTAwNSw3ICsxMDA1LDcgQEAKIAlpZiAoZGV2LT51c2JfYXVkaW9fdHlwZSAhPSBFTTI4WFhfVVNCX0FVRElPX1ZFTkRPUikKIAkJcmV0dXJuIDA7CiAKLQllbTI4eHhfaW5mbygiU3VzcGVuZGluZyBhdWRpbyBleHRlbnNpb24iKTsKKwllbTI4eHhfaW5mbygiU3VzcGVuZGluZyBhdWRpbyBleHRlbnNpb25cbiIpOwogCWVtMjh4eF9kZWluaXRfaXNvY19hdWRpbyhkZXYpOwogCWF0b21pY19zZXQoJmRldi0+YWRldi5zdHJlYW1fc3RhcnRlZCwgMCk7CiAJcmV0dXJuIDA7CkBAIC0xMDE5LDcgKzEwMTksNyBAQAogCWlmIChkZXYtPnVzYl9hdWRpb190eXBlICE9IEVNMjhYWF9VU0JfQVVESU9fVkVORE9SKQogCQlyZXR1cm4gMDsKIAotCWVtMjh4eF9pbmZvKCJSZXN1bWluZyBhdWRpbyBleHRlbnNpb24iKTsKKwllbTI4eHhfaW5mbygiUmVzdW1pbmcgYXVkaW8gZXh0ZW5zaW9uXG4iKTsKIAkvKiBOb3RoaW5nIHRvIGRvIG90aGVyIHRoYW4gc2NoZWR1bGVfd29yaygpID8/ICovCiAJc2NoZWR1bGVfd29yaygmZGV2LT5hZGV2LndxX3RyaWdnZXIpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvZW0yOHh4L2VtMjh4eC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3VzYi9lbTI4eHgvZW0yOHh4LWNvcmUuYwppbmRleCA4NjQ2MWE3Li4zNzQ1NjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9lbTI4eHgvZW0yOHh4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9lbTI4eHgvZW0yOHh4LWNvcmUuYwpAQCAtMTEyNSw3ICsxMTI1LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgZW0yOHh4X29wcyAqb3BzID0gTlVMTDsKIAotCWVtMjh4eF9pbmZvKCJTdXNwZW5kaW5nIGV4dGVuc2lvbnMiKTsKKwllbTI4eHhfaW5mbygiU3VzcGVuZGluZyBleHRlbnNpb25zXG4iKTsKIAltdXRleF9sb2NrKCZlbTI4eHhfZGV2bGlzdF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsICZlbTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3QsIG5leHQpIHsKIAkJaWYgKG9wcy0+c3VzcGVuZCkKQEAgLTExMzksNyArMTEzOSw3IEBACiB7CiAJY29uc3Qgc3RydWN0IGVtMjh4eF9vcHMgKm9wcyA9IE5VTEw7CiAKLQllbTI4eHhfaW5mbygiUmVzdW1pbmcgZXh0ZW5zaW9ucyIpOworCWVtMjh4eF9pbmZvKCJSZXN1bWluZyBleHRlbnNpb25zXG4iKTsKIAltdXRleF9sb2NrKCZlbTI4eHhfZGV2bGlzdF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsICZlbTI4eHhfZXh0ZW5zaW9uX2Rldmxpc3QsIG5leHQpIHsKIAkJaWYgKG9wcy0+cmVzdW1lKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvZW0yOHh4L2VtMjh4eC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2VtMjh4eC9lbTI4eHgtZHZiLmMKaW5kZXggOTg3N2I2OS4uYWVlNzBkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvZW0yOHh4L2VtMjh4eC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9lbTI4eHgvZW0yOHh4LWR2Yi5jCkBAIC0xNzI0LDcgKzE3MjQsNyBAQAogCWlmICghZGV2LT5kdmIpCiAJCXJldHVybiAwOwogCi0JZW0yOHh4X2luZm8oIkNsb3NpbmcgRFZCIGV4dGVuc2lvbiIpOworCWVtMjh4eF9pbmZvKCJDbG9zaW5nIERWQiBleHRlbnNpb25cbiIpOwogCiAJZHZiID0gZGV2LT5kdmI7CiAJY2xpZW50ID0gZHZiLT5pMmNfY2xpZW50X3R1bmVyOwpAQCAtMTc3NSwxNyArMTc3NSwxNyBAQAogCWlmICghZGV2LT5ib2FyZC5oYXNfZHZiKQogCQlyZXR1cm4gMDsKIAotCWVtMjh4eF9pbmZvKCJTdXNwZW5kaW5nIERWQiBleHRlbnNpb24iKTsKKwllbTI4eHhfaW5mbygiU3VzcGVuZGluZyBEVkIgZXh0ZW5zaW9uXG4iKTsKIAlpZiAoZGV2LT5kdmIpIHsKIAkJc3RydWN0IGVtMjh4eF9kdmIgKmR2YiA9IGRldi0+ZHZiOwogCiAJCWlmIChkdmItPmZlWzBdKSB7CiAJCQlyZXQgPSBkdmJfZnJvbnRlbmRfc3VzcGVuZChkdmItPmZlWzBdKTsKLQkJCWVtMjh4eF9pbmZvKCJmZTAgc3VzcGVuZCAlZCIsIHJldCk7CisJCQllbTI4eHhfaW5mbygiZmUwIHN1c3BlbmQgJWRcbiIsIHJldCk7CiAJCX0KIAkJaWYgKGR2Yi0+ZmVbMV0pIHsKIAkJCWR2Yl9mcm9udGVuZF9zdXNwZW5kKGR2Yi0+ZmVbMV0pOwotCQkJZW0yOHh4X2luZm8oImZlMSBzdXNwZW5kICVkIiwgcmV0KTsKKwkJCWVtMjh4eF9pbmZvKCJmZTEgc3VzcGVuZCAlZFxuIiwgcmV0KTsKIAkJfQogCX0KIApAQCAtMTgwMiwxOCArMTgwMiwxOCBAQAogCWlmICghZGV2LT5ib2FyZC5oYXNfZHZiKQogCQlyZXR1cm4gMDsKIAotCWVtMjh4eF9pbmZvKCJSZXN1bWluZyBEVkIgZXh0ZW5zaW9uIik7CisJZW0yOHh4X2luZm8oIlJlc3VtaW5nIERWQiBleHRlbnNpb25cbiIpOwogCWlmIChkZXYtPmR2YikgewogCQlzdHJ1Y3QgZW0yOHh4X2R2YiAqZHZiID0gZGV2LT5kdmI7CiAKIAkJaWYgKGR2Yi0+ZmVbMF0pIHsKIAkJCXJldCA9IGR2Yl9mcm9udGVuZF9yZXN1bWUoZHZiLT5mZVswXSk7Ci0JCQllbTI4eHhfaW5mbygiZmUwIHJlc3VtZSAlZCIsIHJldCk7CisJCQllbTI4eHhfaW5mbygiZmUwIHJlc3VtZSAlZFxuIiwgcmV0KTsKIAkJfQogCiAJCWlmIChkdmItPmZlWzFdKSB7CiAJCQlyZXQgPSBkdmJfZnJvbnRlbmRfcmVzdW1lKGR2Yi0+ZmVbMV0pOwotCQkJZW0yOHh4X2luZm8oImZlMSByZXN1bWUgJWQiLCByZXQpOworCQkJZW0yOHh4X2luZm8oImZlMSByZXN1bWUgJWRcbiIsIHJldCk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2VtMjh4eC9lbTI4eHgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2VtMjh4eC9lbTI4eHgtaW5wdXQuYwppbmRleCBkOGRjMDNhLi40MDA3MzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9lbTI4eHgvZW0yOHh4LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvZW0yOHh4L2VtMjh4eC1pbnB1dC5jCkBAIC02NTQsOCArNjU0LDYgQEAKIAlpZiAoZGV2LT5udW1fYnV0dG9uX3BvbGxpbmdfYWRkcmVzc2VzKSB7CiAJCW1lbXNldChkZXYtPmJ1dHRvbl9wb2xsaW5nX2xhc3RfdmFsdWVzLCAwLAogCQkgICAgICAgRU0yOFhYX05VTV9CVVRUT05fQUREUkVTU0VTX01BWCk7Ci0JCUlOSVRfREVMQVlFRF9XT1JLKCZkZXYtPmJ1dHRvbnNfcXVlcnlfd29yaywKLQkJCQkgIGVtMjh4eF9xdWVyeV9idXR0b25zKTsKIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPmJ1dHRvbnNfcXVlcnlfd29yaywKIAkJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKGRldi0+YnV0dG9uX3BvbGxpbmdfaW50ZXJ2YWwpKTsKIAl9CkBAIC02ODksNiArNjg3LDcgQEAKIAl9CiAKIAlrcmVmX2dldCgmZGV2LT5yZWYpOworCUlOSVRfREVMQVlFRF9XT1JLKCZkZXYtPmJ1dHRvbnNfcXVlcnlfd29yaywgZW0yOHh4X3F1ZXJ5X2J1dHRvbnMpOwogCiAJaWYgKGRldi0+Ym9hcmQuYnV0dG9ucykKIAkJZW0yOHh4X2luaXRfYnV0dG9ucyhkZXYpOwpAQCAtODMzLDcgKzgzMiw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWVtMjh4eF9pbmZvKCJDbG9zaW5nIGlucHV0IGV4dGVuc2lvbiIpOworCWVtMjh4eF9pbmZvKCJDbG9zaW5nIGlucHV0IGV4dGVuc2lvblxuIik7CiAKIAllbTI4eHhfc2h1dGRvd25fYnV0dG9ucyhkZXYpOwogCkBAIC04NjIsNyArODYxLDcgQEAKIAlpZiAoZGV2LT5pc19hdWRpb19vbmx5KQogCQlyZXR1cm4gMDsKIAotCWVtMjh4eF9pbmZvKCJTdXNwZW5kaW5nIGlucHV0IGV4dGVuc2lvbiIpOworCWVtMjh4eF9pbmZvKCJTdXNwZW5kaW5nIGlucHV0IGV4dGVuc2lvblxuIik7CiAJaWYgKGlyKQogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmlyLT53b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldi0+YnV0dG9uc19xdWVyeV93b3JrKTsKQEAgLTg3OSw3ICs4NzgsNyBAQAogCWlmIChkZXYtPmlzX2F1ZGlvX29ubHkpCiAJCXJldHVybiAwOwogCi0JZW0yOHh4X2luZm8oIlJlc3VtaW5nIGlucHV0IGV4dGVuc2lvbiIpOworCWVtMjh4eF9pbmZvKCJSZXN1bWluZyBpbnB1dCBleHRlbnNpb25cbiIpOwogCS8qIGlmIHN1c3BlbmQgY2FsbHMgaXJfcmF3X2V2ZW50X3VucmVnaXN0ZXIoKSwgdGhlIHNob3VsZCBjYWxsCiAJICAgaXJfcmF3X2V2ZW50X3JlZ2lzdGVyKCkgKi8KIAlpZiAoaXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9lbTI4eHgvZW0yOHh4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3VzYi9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKaW5kZXggY2Y3ZjU4Yi4uOWVjZjY1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvZW0yOHh4L2VtMjh4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMTk1OCw3ICsxOTU4LDcgQEAKIAlpZiAodjRsMiA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCWVtMjh4eF9pbmZvKCJDbG9zaW5nIHZpZGVvIGV4dGVuc2lvbiIpOworCWVtMjh4eF9pbmZvKCJDbG9zaW5nIHZpZGVvIGV4dGVuc2lvblxuIik7CiAKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCkBAIC0yMDA3LDcgKzIwMDcsNyBAQAogCWlmICghZGV2LT5oYXNfdmlkZW8pCiAJCXJldHVybiAwOwogCi0JZW0yOHh4X2luZm8oIlN1c3BlbmRpbmcgdmlkZW8gZXh0ZW5zaW9uIik7CisJZW0yOHh4X2luZm8oIlN1c3BlbmRpbmcgdmlkZW8gZXh0ZW5zaW9uXG4iKTsKIAllbTI4eHhfc3RvcF91cmJzKGRldik7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDIwLDcgKzIwMjAsNyBAQAogCWlmICghZGV2LT5oYXNfdmlkZW8pCiAJCXJldHVybiAwOwogCi0JZW0yOHh4X2luZm8oIlJlc3VtaW5nIHZpZGVvIGV4dGVuc2lvbiIpOworCWVtMjh4eF9pbmZvKCJSZXN1bWluZyB2aWRlbyBleHRlbnNpb25cbiIpOwogCS8qIHdoYXQgZG8gd2UgZG8gaGVyZSAqLwogCXJldHVybiAwOwogfQpAQCAtMjE5Miw3ICsyMTkyLDYgQEAKIAogCSp2ZmQJCT0gKnRlbXBsYXRlOwogCXZmZC0+djRsMl9kZXYJPSAmZGV2LT52NGwyLT52NGwyX2RldjsKLQl2ZmQtPmRlYnVnCT0gdmlkZW9fZGVidWc7CiAJdmZkLT5sb2NrCT0gJmRldi0+bG9jazsKIAlpZiAoZGV2LT5ib2FyZC5pc193ZWJjYW0pCiAJCXZmZC0+dHZub3JtcyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9nc3BjYS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS91c2IvZ3NwY2EvS2NvbmZpZwppbmRleCBlZWQxMGQ3Li42MGFmM2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9nc3BjYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL0tjb25maWcKQEAgLTM5NSw2ICszOTUsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3RvcHJvLgogCitjb25maWcgVVNCX0dTUENBX1RPVVBURUsKKwl0cmlzdGF0ZSAiVG91cHRlayBVU0IgQ2FtZXJhIERyaXZlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBjYW1lcmFzIGJhc2VkIG9uIHRoZSBUb3VwVGVrIFVDTU9TCisJICAvIEFtU2NvcGUgTVUgc2VyaWVzIGNhbWVyYS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfdG91cHRlay4KKwogY29uZmlnIFVTQl9HU1BDQV9UVjg1MzIKIAl0cmlzdGF0ZSAiVFY4NTMyIFVTQiBDYW1lcmEgRHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBVU0JfR1NQQ0EKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS91c2IvZ3NwY2EvTWFrZWZpbGUKaW5kZXggZjQ2OTc1ZS4uOWY1Y2NlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvZ3NwY2EvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvZ3NwY2EvTWFrZWZpbGUKQEAgLTM5LDYgKzM5LDcgQEAKIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1RWMDY4MCkgICs9IGdzcGNhX3N0djA2ODAubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9UNjEzKSAgICAgKz0gZ3NwY2FfdDYxMy5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1RPUFJPKSAgICArPSBnc3BjYV90b3Byby5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1RPVVBURUspICArPSBnc3BjYV90b3VwdGVrLm8KIG9iai0kKENPTkZJR19VU0JfR1NQQ0FfVFY4NTMyKSAgICs9IGdzcGNhX3R2ODUzMi5vCiBvYmotJChDT05GSUdfVVNCX0dTUENBX1ZDMDMyWCkgICArPSBnc3BjYV92YzAzMngubwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9WSUNBTSkgICAgKz0gZ3NwY2FfdmljYW0ubwpAQCAtODYsNiArODcsNyBAQAogZ3NwY2Ffc3VucGx1cy1vYmpzICA6PSBzdW5wbHVzLm8KIGdzcGNhX3Q2MTMtb2JqcyAgICAgOj0gdDYxMy5vCiBnc3BjYV90b3Byby1vYmpzICAgIDo9IHRvcHJvLm8KK2dzcGNhX3RvdXB0ZWstb2JqcyAgOj0gdG91cHRlay5vCiBnc3BjYV90djg1MzItb2JqcyAgIDo9IHR2ODUzMi5vCiBnc3BjYV92YzAzMngtb2JqcyAgIDo9IHZjMDMyeC5vCiBnc3BjYV92aWNhbS1vYmpzICAgIDo9IHZpY2FtLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL2dzcGNhLmMgYi9kcml2ZXJzL21lZGlhL3VzYi9nc3BjYS9nc3BjYS5jCmluZGV4IDQzZDY1MDUuLmU1NGNlZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL2dzcGNhLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvZ3NwY2EvZ3NwY2EuYwpAQCAtMTU2Miw3ICsxNTYyLDcgQEAKIAkJCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnBhcm0pCiB7CiAJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKLQlpbnQgbjsKKwl1bnNpZ25lZCBpbnQgbjsKIAogCW4gPSBwYXJtLT5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnM7CiAJaWYgKG4gPT0gMCB8fCBuID49IEdTUENBX01BWF9GUkFNRVMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9nc3BjYS9vdjUzNC5jIGIvZHJpdmVycy9tZWRpYS91c2IvZ3NwY2Evb3Y1MzQuYwppbmRleCA5MGYwZDYzLi5hOWM4NjZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9nc3BjYS9vdjUzNC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL292NTM0LmMKQEAgLTEyLDYgKzEyLDggQEAKICAqIFBTMyBFeWUgY2FtZXJhIGVuaGFuY2VkIGJ5IFJpY2hhcmQgS2Fzd3kgaHR0cDovL2thc3d5LmZyZWUuZnIKICAqIFBTMyBFeWUgY2FtZXJhIC0gYnJpZ2h0bmVzcywgY29udHJhc3QsIGF3YiwgYWdjLCBhZWMgY29udHJvbHMKICAqICAgICAgICAgICAgICAgICAgYWRkZWQgYnkgTWF4IFRocnVuIDxiZWFyMjRyd0BnbWFpbC5jb20+CisgKiBQUzMgRXllIGNhbWVyYSAtIEZQUyByYW5nZSBleHRlbmRlZCBieSBKb3NlcGggSG93c2UKKyAqICAgICAgICAgICAgICAgICAgPGpvc2VwaGhvd3NlQG51bW1pc3QuY29tPiBodHRwOi8vbnVtbWlzdC5jb20KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTExNiw3ICsxMTgsNyBAQAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1OCBxdmdhX3JhdGVzW10gPSB7MTI1LCAxMDAsIDc1LCA2MCwgNTAsIDQwLCAzMH07CitzdGF0aWMgY29uc3QgdTggcXZnYV9yYXRlc1tdID0gezE4NywgMTUwLCAxMzcsIDEyNSwgMTAwLCA3NSwgNjAsIDUwLCAzNywgMzB9Owogc3RhdGljIGNvbnN0IHU4IHZnYV9yYXRlc1tdID0gezYwLCA1MCwgNDAsIDMwLCAxNX07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZnJhbWVyYXRlcyBvdjc3MnhfZnJhbWVyYXRlc1tdID0gewpAQCAtNzY5LDEyICs3NzEsMTYgQEAKIAkJezE1LCAweDAzLCAweDQxLCAweDA0fSwKIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmF0ZV9zIHJhdGVfMVtdID0gewkvKiAzMjB4MjQwICovCisvKgkJezIwNSwgMHgwMSwgMHhjMSwgMHgwMn0sICAqIDIwNSBGUFM6IHZpZGVvIGlzIHBhcnRseSBjb3JydXB0ICovCisJCXsxODcsIDB4MDEsIDB4ODEsIDB4MDJ9LCAvKiAxODcgRlBTIG9yIGJlbG93OiB2aWRlbyBpcyB2YWxpZCAqLworCQl7MTUwLCAweDAxLCAweGMxLCAweDA0fSwKKwkJezEzNywgMHgwMiwgMHhjMSwgMHgwMn0sCiAJCXsxMjUsIDB4MDIsIDB4ODEsIDB4MDJ9LAogCQl7MTAwLCAweDAyLCAweGMxLCAweDA0fSwKIAkJezc1LCAweDAzLCAweGMxLCAweDA0fSwKIAkJezYwLCAweDA0LCAweGMxLCAweDA0fSwKIAkJezUwLCAweDAyLCAweDQxLCAweDA0fSwKLQkJezQwLCAweDAzLCAweDQxLCAweDA0fSwKKwkJezM3LCAweDAzLCAweDQxLCAweDA0fSwKIAkJezMwLCAweDA0LCAweDQxLCAweDA0fSwKIAl9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9nc3BjYS9zdHYwNnh4L3N0djA2eHguYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCmluZGV4IDQ5ZDIwOWIuLjZhYzkzZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCkBAIC01MDUsMTMgKzUwNSwxMyBAQAogewogCWludCByZXQgPSAtRUlOVkFMOwogCi0JaWYgKGxlbiA9PSAxICYmIGRhdGFbMF0gPT0gMHg4MCkgeworCWlmIChsZW4gPT0gMSAmJiAoZGF0YVswXSA9PSAweDgwIHx8IGRhdGFbMF0gPT0gMHgxMCkpIHsKIAkJaW5wdXRfcmVwb3J0X2tleShnc3BjYV9kZXYtPmlucHV0X2RldiwgS0VZX0NBTUVSQSwgMSk7CiAJCWlucHV0X3N5bmMoZ3NwY2FfZGV2LT5pbnB1dF9kZXYpOwogCQlyZXQgPSAwOwogCX0KIAotCWlmIChsZW4gPT0gMSAmJiBkYXRhWzBdID09IDB4ODgpIHsKKwlpZiAobGVuID09IDEgJiYgKGRhdGFbMF0gPT0gMHg4OCB8fCBkYXRhWzBdID09IDB4MTEpKSB7CiAJCWlucHV0X3JlcG9ydF9rZXkoZ3NwY2FfZGV2LT5pbnB1dF9kZXYsIEtFWV9DQU1FUkEsIDApOwogCQlpbnB1dF9zeW5jKGdzcGNhX2Rldi0+aW5wdXRfZGV2KTsKIAkJcmV0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL3RvdXB0ZWsuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL3RvdXB0ZWsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmFjNmJjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvZ3NwY2EvdG91cHRlay5jCkBAIC0wLDAgKzEsNzMxIEBACisvKgorICogVG91cFRlayBVQ01PUyAvIEFtU2NvcGUgTVUgc2VyaWVzIGNhbWVyYSBkcml2ZXIKKyAqIFRPRE86IGNvbnRyYXN0IHdpdGggU2NvcGVUZWsgLyBBbVNjb3BlIE1EQyBjYW1lcmFzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgSm9obiBNY01hc3RlciA8Sm9obkRNY01hc3RlckBnbWFpbC5jb20+CisgKgorICogU3BlY2lhbCB0aGFua3MgdG8gQnVzaGluZyBmb3IgaGVscGluZyB3aXRoIHRoZSBkZWNyeXB0IGFsZ29yaXRobSBhbmQKKyAqIFNlYW4gTydTdWxsaXZhbiAvIHRoZSBSZW5zc2VsYWVyIENlbnRlciBmb3IgT3BlbiBTb3VyY2UKKyAqIFNvZnR3YXJlIChSQ09TKSBmb3IgaGVscGluZyBtZSBsZWFybiBrZXJuZWwgZGV2ZWxvcG1lbnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgImdzcGNhLmgiCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgInRvdXB0ZWsiCisKK01PRFVMRV9BVVRIT1IoIkpvaG4gTWNNYXN0ZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVG91cFRlayBVQ01PUyAvIEFtc2NvcGUgTVUgbWljcm9zY29wZSBjYW1lcmEgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qCisgKiBFeHBvc3VyZSByZWcgaXMgbGluZWFyIHdpdGggZXhwb3N1cmUgdGltZQorICogRXhwb3N1cmUgKHNlYyksIEUgKHJlZykKKyAqIDAuMDAwNDAwLCAweDAwMDIKKyAqIDAuMDAxMDAwLCAweDAwMDUKKyAqIDAuMDA1MDAwLCAweDAwMTkKKyAqIDAuMDIwMDAwLCAweDAwNjQKKyAqIDAuMDgwMDAwLCAweDAxOTAKKyAqIDAuNDAwMDAwLCAweDA3RDAKKyAqIDEuMDAwMDAwLCAweDEzODgKKyAqIDIuMDAwMDAwLCAweDI3MTAKKyAqCisgKiBUaHJlZSBnYWluIHN0YWdlcworICogMHgxMDAwOiBtYXN0ZXIgY2hhbm5lbCBlbmFibGUgYml0CisgKiAweDAwN0Y6IGxvdyBnYWluIGJpdHMKKyAqIDB4MDA4MDogbWVkaXVtIGdhaW4gYml0CisgKiAweDAxMDA6IGhpZ2ggZ2FpbiBiaXQKKyAqIGdhaW4gPSBlbmFibGUgKiAoMSArIHJlZ0gpICogKDEgKyByZWdNKSAqIHogKiByZWdMCisgKgorICogR2FpbiBpbXBsZW1lbnRhdGlvbgorICogV2FudCB0byBkbyBzb21ldGhpbmcgc2ltaWxhciB0byBtdDl2MDExLmMncyBzZXRfYmFsYW5jZQorICoKKyAqIEdhaW4gZG9lcyBub3QgdmFyeSB3aXRoIHJlc29sdXRpb24gKGNoZWNrZWQgNjQweDQ4MCB2cyAxNjAweDEyMDApCisgKgorICogQ29uc3RhbnQgZGVyaXZhdGlvbjoKKyAqCisgKiBSYXcgZGF0YToKKyAqIEdhaW4sICAgR1RPUCwgICBCLAkgIFIsCSAgR0JPVAorICogMS4wMCwgICAweDEwNUMsIDB4MTA2OCwgMHgxMEM4LCAweDEwNUMKKyAqIDEuMjAsICAgMHgxMDZFLCAweDEwN0UsIDB4MTBENiwgMHgxMDZFCisgKiAxLjQwLCAgIDB4MTBDMCwgMHgxMENBLCAweDEwRTUsIDB4MTBDMAorICogMS42MCwgICAweDEwQzksIDB4MTBENCwgMHgxMEYzLCAweDEwQzkKKyAqIDEuODAsICAgMHgxMEQyLCAweDEwREUsIDB4MTFDMSwgMHgxMEQyCisgKiAyLjAwLCAgIDB4MTBEQywgMHgxMEU5LCAweDExQzgsIDB4MTBEQworICogMi4yMCwgICAweDEwRTUsIDB4MTBGMywgMHgxMUNGLCAweDEwRTUKKyAqIDIuNDAsICAgMHgxMEVFLCAweDEwRkUsIDB4MTFENywgMHgxMEVFCisgKiAyLjYwLCAgIDB4MTBGNywgMHgxMUM0LCAweDExREUsIDB4MTBGNworICogMi44MCwgICAweDExQzAsIDB4MTFDQSwgMHgxMUU1LCAweDExQzAKKyAqIDMuMDAsICAgMHgxMUM1LCAweDExQ0YsIDB4MTFFRCwgMHgxMUM1CisgKgorICogelIgPSAwLjAwNjk2MDU5NDMxNTI0NTQ3NzgKKyAqCWFib3V0IDMvNDMxID0gMC4wMDY5NjA1NTY4NDQ1NDc1NjM1CisgKiB6QiA9IDAuMDA5NTY5NTk3MDY5NTk3MDcwMworICoJYWJvdXQgNi82MjcgPSAwLjAwOTU2OTM3Nzk5MDQzMDYyMTYKKyAqIHpHID0gMC4wMTA4ODkzMjgwNjMyNDExMDcKKyAqCWFib3V0IDYvNTUxID0gMC4wMTA4ODkyOTIxOTYwMDcyNTkKKyAqIGFib3V0IDEwIGJpdHMgZm9yIGNvbnN0YW50ICsgNyBiaXRzIGZvciB2YWx1ZSA9PiBhdCBsZWFzdCAxNyBiaXQKKyAqIGludGVybWVkaWF0ZSB3aXRoIDMyIGJpdCBpbnRzIHNob3VsZCBiZSBmaW5lIGZvciBvdmVyZmxvdyBldGMKKyAqIEVzc2VudGlhbGx5IGdhaW5zIGFyZSBpbiByYW5nZSAwLTB4MDAxRkYKKyAqCisgKiBIb3dldmVyLCBWNEwgZXhwZWN0cyBhIG1haW4gZ2FpbiBjaGFubmVsICsgUiBhbmQgQiBiYWxhbmNlCisgKiBUbyBrZWVwIHRoaW5ncyBzaW1wbGUgZm9yIG5vdyBzYXR1cmF0ZSB0aGUgdmFsdWVzIG9mIGJhbGFuY2UgaXMgdG9vIGhpZ2gvbG93CisgKiBUaGlzIGlzbid0IHJlYWxseSBpZGVhbCBidXQgZWFzeSB3YXkgdG8gZml0IHRoZSBMaW51eCBtb2RlbAorICoKKyAqIENvbnZlcnRlZCB1c2luZyBnYWluIG1vZGVsIHR1cm5zIG91dCB0byBiZSBxdWl0ZSBsaW5lYXI6CisgKiBHYWluLCBHVE9QLCBCLCBSLCBHQk9UCisgKiAxLjAwLCA5MiwgMTA0LCAxNDQsIDkyCisgKiAxLjIwLCAxMTAsIDEyNiwgMTcyLCAxMTAKKyAqIDEuNDAsIDEyOCwgMTQ4LCAyMDIsIDEyOAorICogMS42MCwgMTQ2LCAxNjgsIDIzMCwgMTQ2CisgKiAxLjgwLCAxNjQsIDE4OCwgMjYwLCAxNjQKKyAqIDIuMDAsIDE4NCwgMjEwLCAyODgsIDE4NAorICogMi4yMCwgMjAyLCAyMzAsIDMxNiwgMjAyCisgKiAyLjQwLCAyMjAsIDI1MiwgMzQ4LCAyMjAKKyAqIDIuNjAsIDIzOCwgMjcyLCAzNzYsIDIzOAorICogMi44MCwgMjU2LCAyOTYsIDQwNCwgMjU2CisgKiAzLjAwLCAyNzYsIDMxNiwgNDM2LCAyNzYKKyAqCisgKiBNYXhpbXVtIGdhaW4gaXMgMHg3RkYgKiAyICogMiA9PiAweDFGRkMgKDgxODgpCisgKiBvciBhYm91dCAxMyBlZmZlY3RpdmUgYml0cyBvZiBnYWluCisgKiBUaGUgaGlnaGVzdCB0aGUgY29tbWVyY2lhbCBkcml2ZXIgZ29lcyBpbiBteSBzZXR1cCA0MzYKKyAqIEhvd2V2ZXIsIGJlY2F1c2UgY291bGQgKm1heWJlKiBkYW1hZ2UgY2lyY3VpdHMKKyAqIGxpbWl0IHRoZSBnYWluIHVudGlsIGhhdmUgYSByZWFzb24gdG8gZ28gaGlnaGVyCisgKiBTb2x1dGlvbjogZ2FpbiBjbGlwcGVkIGFuZCB3YXJuaW5nIGVtaXR0ZWQKKyAqLworI2RlZmluZSBHQUlOX01BWAkJNTExCisKKy8qIEZyYW1lIHN5bmMgaXMgYSBzaG9ydCByZWFkICovCisjZGVmaW5lIEJVTEtfU0laRQkJMHg0MDAwCisKKy8qIE1UOUUwMDEgcmVnIG5hbWVzIHRvIGdpdmUgYSByb3VnaCBhcHByb3hpbWF0aW9uICovCisjZGVmaW5lIFJFR19DT0FSU0VfSU5URUdSQVRJT05fVElNRV8JMHgzMDEyCisjZGVmaW5lIFJFR19HUk9VUEVEX1BBUkFNRVRFUl9IT0xEXwkweDMwMjIKKyNkZWZpbmUgUkVHX01PREVfU0VMRUNUCQkJMHgwMTAwCisjZGVmaW5lIFJFR19PUF9TWVNfQ0xLX0RJVgkJMHgwMzBBCisjZGVmaW5lIFJFR19WVF9TWVNfQ0xLX0RJVgkJMHgwMzAyCisjZGVmaW5lIFJFR19QUkVfUExMX0NMS19ESVYJCTB4MDMwNAorI2RlZmluZSBSRUdfVlRfUElYX0NMS19ESVYJCTB4MDMwMAorI2RlZmluZSBSRUdfT1BfUElYX0NMS19ESVYJCTB4MDMwOAorI2RlZmluZSBSRUdfUExMX01VTFRJUExJRVIJCTB4MDMwNgorI2RlZmluZSBSRUdfQ09BUlNFX0lOVEVHUkFUSU9OX1RJTUVfCTB4MzAxMgorI2RlZmluZSBSRUdfRlJBTUVfTEVOR1RIX0xJTkVTCQkweDAzNDAKKyNkZWZpbmUgUkVHX0ZSQU1FX0xFTkdUSF9MSU5FU18JCTB4MzAwQQorI2RlZmluZSBSRUdfR1JFRU4xX0dBSU4JCQkweDMwNTYKKyNkZWZpbmUgUkVHX0dSRUVOMl9HQUlOCQkJMHgzMDVDCisjZGVmaW5lIFJFR19HUk9VUEVEX1BBUkFNRVRFUl9IT0xECTB4MDEwNAorI2RlZmluZSBSRUdfTElORV9MRU5HVEhfUENLXwkJMHgzMDBDCisjZGVmaW5lIFJFR19NT0RFX1NFTEVDVAkJCTB4MDEwMAorI2RlZmluZSBSRUdfUExMX01VTFRJUExJRVIJCTB4MDMwNgorI2RlZmluZSBSRUdfUkVBRF9NT0RFCQkJMHgzMDQwCisjZGVmaW5lIFJFR19CTFVFX0dBSU4JCQkweDMwNTgKKyNkZWZpbmUgUkVHX1JFRF9HQUlOCQkJMHgzMDVBCisjZGVmaW5lIFJFR19SRVNFVF9SRUdJU1RFUgkJMHgzMDFBCisjZGVmaW5lIFJFR19TQ0FMRV9NCQkJMHgwNDA0CisjZGVmaW5lIFJFR19TQ0FMSU5HX01PREUJCTB4MDQwMAorI2RlZmluZSBSRUdfU09GVFdBUkVfUkVTRVQJCTB4MDEwMworI2RlZmluZSBSRUdfWF9BRERSX0VORAkJCTB4MDM0OAorI2RlZmluZSBSRUdfWF9BRERSX1NUQVJUCQkweDAzNDQKKyNkZWZpbmUgUkVHX1hfQUREUl9TVEFSVAkJMHgwMzQ0CisjZGVmaW5lIFJFR19YX09VVFBVVF9TSVpFCQkweDAzNEMKKyNkZWZpbmUgUkVHX1lfQUREUl9FTkQJCQkweDAzNEEKKyNkZWZpbmUgUkVHX1lfQUREUl9TVEFSVAkJMHgwMzQ2CisjZGVmaW5lIFJFR19ZX09VVFBVVF9TSVpFCQkweDAzNEUKKworCisvKiBzcGVjaWZpYyB3ZWJjYW0gZGVzY3JpcHRvciAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCS8qIEhvdyBtYW55IGJ5dGVzIHRoaXMgZnJhbWUgKi8KKwl1bnNpZ25lZCBpbnQgdGhpc19mOworCisJLyoKKwlEZXZpY2UgaGFzIHNlcGFyYXRlIGdhaW5zIGZvciBlYWNoIEJheWVyIHF1YWRyYW50CisJVjRMIHN1cHBvcnRzIG1hc3RlciBnYWluIHdoaWNoIGlzIHJlZmVyZW5jZWQgdG8gRzEvRzIgYW5kIHN1cHBsaWVzCisJaW5kaXZpZHVhbCBiYWxhbmNlIGNvbnRyb2xzIGZvciBSL0IKKwkqLworCXN0cnVjdCB2NGwyX2N0cmwgKmJsdWU7CisJc3RydWN0IHY0bDJfY3RybCAqcmVkOworfTsKKworLyogVXNlZCB0byBzaW1wbGlmeSByZWcgd3JpdGUgZXJyb3IgaGFuZGxpbmcgKi8KK3N0cnVjdCBjbWQgeworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2Z2FfbW9kZVtdID0geworCXs4MDAsIDYwMCwKKwkJVjRMMl9QSVhfRk1UX1NHUkJHOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gODAwLAorCQkuc2l6ZWltYWdlID0gODAwICogNjAwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKKwl7MTYwMCwgMTIwMCwKKwkJVjRMMl9QSVhfRk1UX1NHUkJHOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTYwMCwKKwkJLnNpemVpbWFnZSA9IDE2MDAgKiAxMjAwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKKwl7MzI2NCwgMjQ0OCwKKwkJVjRMMl9QSVhfRk1UX1NHUkJHOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzI2NCwKKwkJLnNpemVpbWFnZSA9IDMyNjQgKiAyNDQ4LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCfSwKK307CisKKy8qCisgKiBBcyB0aGVyZXMgbm8ga25vd24gZnJhbWUgc3luYywgdGhlIG9ubHkgd2F5IHRvIGtlZXAgc3luY2VkIGlzIHRvIHRyeSBoYXJkCisgKiB0byBuZXZlciBtaXNzIGFueSBwYWNrZXRzCisgKi8KKyNpZiBNQVhfTlVSQlMgPCA0CisjZXJyb3IgIk5vdCBlbm91Z2ggVVJCcyBpbiB0aGUgZ3NwY2EgdGFibGUiCisjZW5kaWYKKworc3RhdGljIGludCB2YWxfcmVwbHkoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBjb25zdCBjaGFyICpyZXBseSwgaW50IHJjKQoreworCWlmIChyYyA8IDApIHsKKwkJUEVSUigicmVwbHkgaGFzIGVycm9yICVkIiwgcmMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJaWYgKHJjICE9IDEpIHsKKwkJUEVSUigiQmFkIHJlcGx5IHNpemUgJWQiLCByYyk7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAocmVwbHlbMF0gIT0gMHgwOCkgeworCQlQRVJSKCJCYWQgcmVwbHkgMHglMDJYIiwgcmVwbHlbMF0pOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHZhbHVlLCB1MTYgaW5kZXgpCit7CisJY2hhciBidWZmWzFdOworCWludCByYzsKKworCVBERUJVRyhEX1VTQk8sCisJCSJyZWdfdyBiUmVxPTB4MEIsIGJSZXFUPTB4QzAsIHdWYWw9MHglMDRYLCB3SW5kPTB4JTA0WFxuIiwKKwkJdmFsdWUsIGluZGV4KTsKKwlyYyA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwgdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJMHgwQiwgMHhDMCwgdmFsdWUsIGluZGV4LCBidWZmLCAxLCA1MDApOworCVBERUJVRyhEX1VTQk8sICJyYz0lZCwgcmV0PXsweCUwMlh9IiwgcmMsIGJ1ZmZbMF0pOworCWlmIChyYyA8IDApIHsKKwkJUEVSUigiRmFpbGVkIHJlZ193KDB4MEIsIDB4QzAsIDB4JTA0WCwgMHglMDRYKSB3LyByYyAlZFxuIiwKKwkJCXZhbHVlLCBpbmRleCwgcmMpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSByYzsKKwkJcmV0dXJuOworCX0KKwlpZiAodmFsX3JlcGx5KGdzcGNhX2RldiwgYnVmZiwgcmMpKSB7CisJCVBFUlIoIkJhZCByZXBseSB0byByZWdfdygweDBCLCAweEMwLCAweCUwNFgsIDB4JTA0WFxuIiwKKwkJCXZhbHVlLCBpbmRleCk7CisJCWdzcGNhX2Rldi0+dXNiX2VyciA9IC1FSU87CisJfQorfQorCitzdGF0aWMgdm9pZCByZWdfd19idWYoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQljb25zdCBzdHJ1Y3QgY21kICpwLCBpbnQgbCkKK3sKKwlkbyB7CisJCXJlZ193KGdzcGNhX2RldiwgcC0+dmFsdWUsIHAtPmluZGV4KTsKKwkJcCsrOworCX0gd2hpbGUgKC0tbCA+IDApOworfQorCitzdGF0aWMgdm9pZCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHMzMiB2YWwpCit7CisJdTE2IHZhbHVlOworCXVuc2lnbmVkIGludCB3ID0gZ3NwY2FfZGV2LT5waXhmbXQud2lkdGg7CisKKwlpZiAodyA9PSA4MDApCisJCXZhbHVlID0gdmFsICogNTsKKwllbHNlIGlmICh3ID09IDE2MDApCisJCXZhbHVlID0gdmFsICogMzsKKwllbHNlIGlmICh3ID09IDMyNjQpCisJCXZhbHVlID0gdmFsICogMyAvIDI7CisJZWxzZSB7CisJCVBFUlIoIkludmFsaWQgd2lkdGggJXVcbiIsIHcpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSAtRUlOVkFMOworCQlyZXR1cm47CisJfQorCVBERUJVRyhEX1NUUkVBTSwgImV4cG9zdXJlOiAweCUwNFggbXNcbiIsIHZhbHVlKTsKKwkvKiBXb25kZXIgaWYgdGhlcmVzIGEgZ29vZCByZWFzb24gZm9yIHNlbmRpbmcgaXQgdHdpY2UgKi8KKwkvKiBwcm9iYWJseSBub3QgYnV0IGxlYXZlIGl0IGluIGJlY2F1c2UuLi53aHkgbm90ICovCisJcmVnX3coZ3NwY2FfZGV2LCB2YWx1ZSwgUkVHX0NPQVJTRV9JTlRFR1JBVElPTl9USU1FXyk7CisJcmVnX3coZ3NwY2FfZGV2LCB2YWx1ZSwgUkVHX0NPQVJTRV9JTlRFR1JBVElPTl9USU1FXyk7Cit9CisKK3N0YXRpYyBpbnQgZ2FpbmlmeShpbnQgaW4pCit7CisJLyoKKwkgKiBUT0RPOiBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGlzc3VlcyB3aXRoIGNvcm5lciBjYXNlcworCSAqIDB4MDAwICgwKToweDA3RiAoMTI3KTogcmVnTAorCSAqIDB4MDgwICgxMjgpIC0gMHgwRkYgKDI1NSk6IHJlZ00sIHJlZ0wKKwkgKiAweDEwMCAoMjU2KSAtIG1heDogcmVnSCwgcmVnTSwgcmVnTAorCSAqLworCWlmIChpbiA8PSAweDdGKQorCQlyZXR1cm4gMHgxMDAwIHwgaW47CisJZWxzZSBpZiAoaW4gPD0gMHhGRikKKwkJcmV0dXJuIDB4MTA4MCB8IGluIC8gMjsKKwllbHNlCisJCXJldHVybiAweDExODAgfCBpbiAvIDQ7Cit9CisKK3N0YXRpYyB2b2lkIHNldGdnYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IGdsb2JhbF9nYWluKQoreworCXUxNiBub3JtYWxpemVkOworCisJbm9ybWFsaXplZCA9IGdhaW5pZnkoZ2xvYmFsX2dhaW4pOworCVBERUJVRyhEX1NUUkVBTSwgImdhaW4gRzEvRzIgKDB4JTA0WCk6IDB4JTA0WCAoc3JjIDB4JTA0WClcbiIsCisJCSBSRUdfR1JFRU4xX0dBSU4sCisJCSBub3JtYWxpemVkLCBnbG9iYWxfZ2Fpbik7CisKKwlyZWdfdyhnc3BjYV9kZXYsIG5vcm1hbGl6ZWQsIFJFR19HUkVFTjFfR0FJTik7CisJcmVnX3coZ3NwY2FfZGV2LCBub3JtYWxpemVkLCBSRUdfR1JFRU4yX0dBSU4pOworfQorCitzdGF0aWMgdm9pZCBzZXRiZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCXUxNiBnYWluLCB1MTYgZ2xvYmFsX2dhaW4pCit7CisJdTE2IG5vcm1hbGl6ZWQ7CisKKwlub3JtYWxpemVkID0gZ2xvYmFsX2dhaW4gKworCQkoKHUzMilnbG9iYWxfZ2FpbikgKiBnYWluIC8gR0FJTl9NQVg7CisJaWYgKG5vcm1hbGl6ZWQgPiBHQUlOX01BWCkgeworCQlQREVCVUcoRF9TVFJFQU0sICJUcnVuY2F0aW5nIGJsdWUgMHglMDRYIHcvIHZhbHVlIDB4JTA0WFxuIiwKKwkJCSBHQUlOX01BWCwgbm9ybWFsaXplZCk7CisJCW5vcm1hbGl6ZWQgPSBHQUlOX01BWDsKKwl9CisJbm9ybWFsaXplZCA9IGdhaW5pZnkobm9ybWFsaXplZCk7CisJUERFQlVHKERfU1RSRUFNLCAiZ2FpbiBCICgweCUwNFgpOiAweCUwNFggdy8gc291cmNlIDB4JTA0WFxuIiwKKwkJIFJFR19CTFVFX0dBSU4sIG5vcm1hbGl6ZWQsIGdhaW4pOworCisJcmVnX3coZ3NwY2FfZGV2LCBub3JtYWxpemVkLCBSRUdfQkxVRV9HQUlOKTsKK30KKworc3RhdGljIHZvaWQgc2V0cmdhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQl1MTYgZ2FpbiwgdTE2IGdsb2JhbF9nYWluKQoreworCXUxNiBub3JtYWxpemVkOworCisJbm9ybWFsaXplZCA9IGdsb2JhbF9nYWluICsKKwkJKCh1MzIpZ2xvYmFsX2dhaW4pICogZ2FpbiAvIEdBSU5fTUFYOworCWlmIChub3JtYWxpemVkID4gR0FJTl9NQVgpIHsKKwkJUERFQlVHKERfU1RSRUFNLCAiVHJ1bmNhdGluZyBnYWluIDB4JTA0WCB3LyB2YWx1ZSAweCUwNFhcbiIsCisJCQkgR0FJTl9NQVgsIG5vcm1hbGl6ZWQpOworCQlub3JtYWxpemVkID0gR0FJTl9NQVg7CisJfQorCW5vcm1hbGl6ZWQgPSBnYWluaWZ5KG5vcm1hbGl6ZWQpOworCVBERUJVRyhEX1NUUkVBTSwgImdhaW4gUiAoMHglMDRYKTogMHglMDRYIHcgLyBzb3VyY2UgMHglMDRYXG4iLAorCQkgUkVHX1JFRF9HQUlOLCBub3JtYWxpemVkLCBnYWluKTsKKworCXJlZ193KGdzcGNhX2Rldiwgbm9ybWFsaXplZCwgUkVHX1JFRF9HQUlOKTsKK30KKworc3RhdGljIHZvaWQgY29uZmlndXJlX3doKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwl1bnNpZ25lZCBpbnQgdyA9IGdzcGNhX2Rldi0+cGl4Zm10LndpZHRoOworCisJUERFQlVHKERfU1RSRUFNLCAiY29uZmlndXJlX3doXG4iKTsKKworCWlmICh3ID09IDgwMCkgeworCQlzdGF0aWMgY29uc3Qgc3RydWN0IGNtZCByZWdfaW5pdF9yZXNbXSA9IHsKKwkJCXsweDAwNjAsIFJFR19YX0FERFJfU1RBUlR9LAorCQkJezB4MENEOSwgUkVHX1hfQUREUl9FTkR9LAorCQkJezB4MDAzNiwgUkVHX1lfQUREUl9TVEFSVH0sCisJCQl7MHgwOThGLCBSRUdfWV9BRERSX0VORH0sCisJCQl7MHgwN0M3LCBSRUdfUkVBRF9NT0RFfSwKKwkJfTsKKworCQlyZWdfd19idWYoZ3NwY2FfZGV2LAorCQkJICAgICAgIHJlZ19pbml0X3JlcywgQVJSQVlfU0laRShyZWdfaW5pdF9yZXMpKTsKKwl9IGVsc2UgaWYgKHcgPT0gMTYwMCkgeworCQlzdGF0aWMgY29uc3Qgc3RydWN0IGNtZCByZWdfaW5pdF9yZXNbXSA9IHsKKwkJCXsweDAwOUMsIFJFR19YX0FERFJfU1RBUlR9LAorCQkJezB4MEQxOSwgUkVHX1hfQUREUl9FTkR9LAorCQkJezB4MDA2OCwgUkVHX1lfQUREUl9TVEFSVH0sCisJCQl7MHgwOUM1LCBSRUdfWV9BRERSX0VORH0sCisJCQl7MHgwNkMzLCBSRUdfUkVBRF9NT0RFfSwKKwkJfTsKKworCQlyZWdfd19idWYoZ3NwY2FfZGV2LAorCQkJICAgICAgIHJlZ19pbml0X3JlcywgQVJSQVlfU0laRShyZWdfaW5pdF9yZXMpKTsKKwl9IGVsc2UgaWYgKHcgPT0gMzI2NCkgeworCQlzdGF0aWMgY29uc3Qgc3RydWN0IGNtZCByZWdfaW5pdF9yZXNbXSA9IHsKKwkJCXsweDAwRTgsIFJFR19YX0FERFJfU1RBUlR9LAorCQkJezB4MERBNywgUkVHX1hfQUREUl9FTkR9LAorCQkJezB4MDA5RSwgUkVHX1lfQUREUl9TVEFSVH0sCisJCQl7MHgwQTJELCBSRUdfWV9BRERSX0VORH0sCisJCQl7MHgwMjQxLCBSRUdfUkVBRF9NT0RFfSwKKwkJfTsKKworCQlyZWdfd19idWYoZ3NwY2FfZGV2LAorCQkJICAgICAgIHJlZ19pbml0X3JlcywgQVJSQVlfU0laRShyZWdfaW5pdF9yZXMpKTsKKwl9IGVsc2UgeworCQlQRVJSKCJiYWQgd2lkdGggJXVcbiIsIHcpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSAtRUlOVkFMOworCQlyZXR1cm47CisJfQorCisJcmVnX3coZ3NwY2FfZGV2LCAweDAwMDAsIFJFR19TQ0FMSU5HX01PREUpOworCXJlZ193KGdzcGNhX2RldiwgMHgwMDEwLCBSRUdfU0NBTEVfTSk7CisJcmVnX3coZ3NwY2FfZGV2LCB3LCBSRUdfWF9PVVRQVVRfU0laRSk7CisJcmVnX3coZ3NwY2FfZGV2LCBnc3BjYV9kZXYtPnBpeGZtdC5oZWlnaHQsIFJFR19ZX09VVFBVVF9TSVpFKTsKKworCWlmICh3ID09IDgwMCkgeworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDM4NCwgUkVHX0ZSQU1FX0xFTkdUSF9MSU5FU18pOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDk2MCwgUkVHX0xJTkVfTEVOR1RIX1BDS18pOworCX0gZWxzZSBpZiAodyA9PSAxNjAwKSB7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwNjQwLCBSRUdfRlJBTUVfTEVOR1RIX0xJTkVTXyk7CisJCXJlZ193KGdzcGNhX2RldiwgMHgwRkEwLCBSRUdfTElORV9MRU5HVEhfUENLXyk7CisJfSBlbHNlIGlmICh3ID09IDMyNjQpIHsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDBCNEIsIFJFR19GUkFNRV9MRU5HVEhfTElORVNfKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDFGNDAsIFJFR19MSU5FX0xFTkdUSF9QQ0tfKTsKKwl9IGVsc2UgeworCQlQRVJSKCJiYWQgd2lkdGggJXVcbiIsIHcpOworCQlnc3BjYV9kZXYtPnVzYl9lcnIgPSAtRUlOVkFMOworCQlyZXR1cm47CisJfQorfQorCisvKiBQYWNrZXRzIHRoYXQgd2VyZSBlbmNyeXB0ZWQsIG5vIGlkZWEgaWYgdGhlIGdyb3VwaW5nIGlzIHNpZ25pZmljYW50ICovCitzdGF0aWMgdm9pZCBjb25maWd1cmVfZW5jcnlwdGVkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdGF0aWMgY29uc3Qgc3RydWN0IGNtZCByZWdfaW5pdF9iZWdpbltdID0geworCQl7MHgwMTAwLCBSRUdfU09GVFdBUkVfUkVTRVR9LAorCQl7MHgwMDAwLCBSRUdfTU9ERV9TRUxFQ1R9LAorCQl7MHgwMTAwLCBSRUdfR1JPVVBFRF9QQVJBTUVURVJfSE9MRH0sCisJCXsweDAwMDQsIFJFR19WVF9QSVhfQ0xLX0RJVn0sCisJCXsweDAwMDEsIFJFR19WVF9TWVNfQ0xLX0RJVn0sCisJCXsweDAwMDgsIFJFR19PUF9QSVhfQ0xLX0RJVn0sCisJCXsweDAwMDEsIFJFR19PUF9TWVNfQ0xLX0RJVn0sCisJCXsweDAwMDQsIFJFR19QUkVfUExMX0NMS19ESVZ9LAorCQl7MHgwMDQwLCBSRUdfUExMX01VTFRJUExJRVJ9LAorCQl7MHgwMDAwLCBSRUdfR1JPVVBFRF9QQVJBTUVURVJfSE9MRH0sCisJCXsweDAxMDAsIFJFR19HUk9VUEVEX1BBUkFNRVRFUl9IT0xEfSwKKwl9OworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgY21kIHJlZ19pbml0X2VuZFtdID0geworCQl7MHgwMDAwLCBSRUdfR1JPVVBFRF9QQVJBTUVURVJfSE9MRH0sCisJCXsweDAzMDEsIDB4MzFBRX0sCisJCXsweDA4MDUsIDB4MzA2NH0sCisJCXsweDAwNzEsIDB4MzE3MH0sCisJCXsweDEwREUsIFJFR19SRVNFVF9SRUdJU1RFUn0sCisJCXsweDAwMDAsIFJFR19NT0RFX1NFTEVDVH0sCisJCXsweDAwMTAsIFJFR19QTExfTVVMVElQTElFUn0sCisJCXsweDAxMDAsIFJFR19NT0RFX1NFTEVDVH0sCisJfTsKKworCVBERUJVRyhEX1NUUkVBTSwgIkVuY3J5cHRlZCBiZWdpbiwgdyA9ICV1XG4iLCBnc3BjYV9kZXYtPnBpeGZtdC53aWR0aCk7CisJcmVnX3dfYnVmKGdzcGNhX2RldiwgcmVnX2luaXRfYmVnaW4sIEFSUkFZX1NJWkUocmVnX2luaXRfYmVnaW4pKTsKKwljb25maWd1cmVfd2goZ3NwY2FfZGV2KTsKKwlyZWdfd19idWYoZ3NwY2FfZGV2LCByZWdfaW5pdF9lbmQsIEFSUkFZX1NJWkUocmVnX2luaXRfZW5kKSk7CisJcmVnX3coZ3NwY2FfZGV2LCAweDAxMDAsIFJFR19HUk9VUEVEX1BBUkFNRVRFUl9IT0xEKTsKKwlyZWdfdyhnc3BjYV9kZXYsIDB4MDAwMCwgUkVHX0dST1VQRURfUEFSQU1FVEVSX0hPTEQpOworCisJUERFQlVHKERfU1RSRUFNLCAiRW5jcnlwdGVkIGVuZFxuIik7Cit9CisKK3N0YXRpYyBpbnQgY29uZmlndXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgcmM7CisJdWludDhfdCBidWZmWzRdOworCisJUERFQlVHKERfU1RSRUFNLCAiY29uZmlndXJlKClcbiIpOworCisJLyoKKwkgKiBGaXJzdCBkcml2ZXIgc2V0cyBhIHNvcnQgb2YgZW5jcnlwdGlvbiBrZXkKKwkgKiBBIG51bWJlciBvZiBmdXR1ciByZXF1ZXN0cyBvZiB0aGlzIHR5cGUgaGF2ZSB3VmFsdWUgYW5kIHdJbmRleAorCSAqIGVuY3J5cHRlZCBhcyBmb2xsb3dzOgorCSAqIC1Db21wdXRlIGtleSA9IHRoaXMgd1ZhbHVlIHJvdGF0ZSBsZWZ0IGJ5IDQgYml0cworCSAqCShkZWNyeXB0LnB5IHJvdGF0ZXMgcmlnaHQgYmVjYXVzZSB3ZSBhcmUgZGVjcnlwdGluZykKKwkgKiAtTGF0ZXIgcGFja2V0cyBlbmNyeXB0IHBhY2tldHMgYnkgWE9SJ2luZyB3aXRoIGtleQorCSAqCVhPUiBlbmNyeXB0L2RlY3J5cHQgaXMgc3ltbWV0cmljYWwKKwkgKgl3VmFsdWUsIGFuZCB3SW5kZXggYXJlIGVuY3J5cHRlZAorCSAqCWJSZXF1ZXN0IGlzIG5vdCBhbmQgYlJlcXVlc3RUeXBlIGlzIGFsd2F5cyAweEMwCisJICoJCVRoaXMgYWxsb3dzIHJlc3luY2luZyBpZiBrZXkgaXMgdW5rbm93bj8KKwkgKiBCeSBzZXR0aW5nIDAgd2UgWE9SIHdpdGggMCBhbmQgdGhlIHNoaWZ0aW5nIGFuZCBYT1IgZHJvcHMgb3V0CisJICovCisJcmMgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsIHVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkgICAgIDB4MTYsIDB4QzAsIDB4MDAwMCwgMHgwMDAwLCBidWZmLCAyLCA1MDApOworCWlmICh2YWxfcmVwbHkoZ3NwY2FfZGV2LCBidWZmLCByYykpIHsKKwkJUEVSUigiZmFpbGVkIGtleSByZXEiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyoKKwkgKiBOZXh0IGRvZXMgc29tZSBzb3J0IG9mIDIgcGFja2V0IGNoYWxsZW5nZSAvIHJlc3BvbnNlCisJICogZXZpZGVuY2Ugc3VnZ2VzdHMgaXRzIGFuIEF0bWVsIEkyQyBjcnlwdG8gcGFydCBidXQgbm9ib2R5IGNhcmVzIHRvCisJICogbG9vaworCSAqICh0byBtYWtlIHN1cmUgaXRzIG5vdCBjbG9uZWQgaGFyZHdhcmU/KQorCSAqIElnbm9yZTogSSB3YW50IHRvIHdvcmsgd2l0aCB0aGVpciBoYXJkd2FyZSwgbm90IGNsb25lIGl0CisJICogMTYgYnl0ZXMgb3V0IGNoYWxsZW5nZSwgcmVxdWVzdFR5cGU6IDB4NDAKKwkgKiAxNiBieXRlcyBpbiByZXNwb25zZSwgcmVxdWVzdFR5cGU6IDB4QzAKKwkgKi8KKworCXJjID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJICAgICAweDAxLCAweDQwLCAweDAwMDEsIDB4MDAwRiwgTlVMTCwgMCwgNTAwKTsKKwlpZiAocmMgPCAwKSB7CisJCVBFUlIoImZhaWxlZCB0byByZXBsYXkgcGFja2V0IDE3NiB3LyByYyAlZFxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsIHVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkgICAgIDB4MDEsIDB4NDAsIDB4MDAwMCwgMHgwMDBGLCBOVUxMLCAwLCA1MDApOworCWlmIChyYyA8IDApIHsKKwkJUEVSUigiZmFpbGVkIHRvIHJlcGxheSBwYWNrZXQgMTc4IHcvIHJjICVkXG4iLCByYyk7CisJCXJldHVybiByYzsKKwl9CisKKwlyYyA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgMHgwMSwgMHg0MCwgMHgwMDAxLCAweDAwMEYsIE5VTEwsIDAsIDUwMCk7CisJaWYgKHJjIDwgMCkgeworCQlQRVJSKCJmYWlsZWQgdG8gcmVwbGF5IHBhY2tldCAxODAgdy8gcmMgJWRcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qCisJICogU2VyaWFsIG51bWJlcj8gIERvZXNuJ3Qgc2VlbSB0byBiZSByZXF1aXJlZAorCSAqIGNhbTE6IFx4RTZceDBEXHgwMFx4MDAsIGNhbTI6IFx4NzBceDE5XHgwMFx4MDAKKwkgKiByYyA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkgKgkJCXVzYl9yY3ZjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJICoJCQkweDIwLCAweEMwLCAweDAwMDAsIDB4MDAwMCwgYnVmZiwgNCwgNTAwKTsKKwkgKi8KKworCS8qIExhcmdlIChFRVBST00/KSByZWFkLCBza2lwIGl0IHNpbmNlIG5vIGlkZWEgd2hhdCB0byBkbyB3aXRoIGl0ICovCisJZ3NwY2FfZGV2LT51c2JfZXJyID0gMDsKKwljb25maWd1cmVfZW5jcnlwdGVkKGdzcGNhX2Rldik7CisJaWYgKGdzcGNhX2Rldi0+dXNiX2VycikKKwkJcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2VycjsKKworCS8qIE9taXR0ZWQgdGhpcyBieSBhY2NpZGVudCwgZG9lcyBub3Qgd29yayB3aXRob3V0IGl0ICovCisJcmMgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsIHVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkgICAgIDB4MDEsIDB4NDAsIDB4MDAwMywgMHgwMDBGLCBOVUxMLCAwLCA1MDApOworCWlmIChyYyA8IDApIHsKKwkJUEVSUigiZmFpbGVkIHRvIHJlcGxheSBmaW5hbCBwYWNrZXQgdy8gcmMgJWRcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCVBERUJVRyhEX1NUUkVBTSwgIkNvbmZpZ3VyZSBjb21wbGV0ZVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGUgPSB2Z2FfbW9kZTsKKwlnc3BjYV9kZXYtPmNhbS5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKKworCS8qIFllcyB3ZSB3YW50IFVSQnMgYW5kIHdlIHdhbnQgdGhlbSBub3chICovCisJZ3NwY2FfZGV2LT5jYW0ubm9fdXJiX2NyZWF0ZSA9IDA7CisJZ3NwY2FfZGV2LT5jYW0uYnVsa19udXJicyA9IDQ7CisJLyogTGFyZ2VzdCBzaXplIHRoZSB3aW5kb3dzIGRyaXZlciB1c2VzICovCisJZ3NwY2FfZGV2LT5jYW0uYnVsa19zaXplID0gQlVMS19TSVpFOworCS8qIERlZiBuZWVkIHRvIHVzZSBidWxrIHRyYW5zZmVycyAqLworCWdzcGNhX2Rldi0+Y2FtLmJ1bGsgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgcmM7CisKKwlzZC0+dGhpc19mID0gMDsKKworCXJjID0gY29uZmlndXJlKGdzcGNhX2Rldik7CisJaWYgKHJjIDwgMCkgeworCQlQRVJSKCJGYWlsZWQgY29uZmlndXJlIik7CisJCXJldHVybiByYzsKKwl9CisJLyogRmlyc3QgdHdvIGZyYW1lcyBoYXZlIG1lc3NlZCB1cCBnYWlucworCURyb3AgdGhlbSB0byBhdm9pZCBzcGVjaWFsIGNhc2VzIGluIHVzZXIgYXBwcz8gKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggKmRhdGEsCS8qIGlzb2MgcGFja2V0ICovCisJCQlpbnQgbGVuKQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLworeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChsZW4gIT0gQlVMS19TSVpFKSB7CisJCS8qIGNhbiB3ZSBmaW5pc2ggYSBmcmFtZT8gKi8KKwkJaWYgKHNkLT50aGlzX2YgKyBsZW4gPT0gZ3NwY2FfZGV2LT5waXhmbXQuc2l6ZWltYWdlKSB7CisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZGF0YSwgbGVuKTsKKwkJCVBERUJVRyhEX0ZSQU0sICJmaW5pc2ggZnJhbWUgc3ogJXUvJXUgdy8gbGVuICV1XG4iLAorCQkJCSBzZC0+dGhpc19mLCBnc3BjYV9kZXYtPnBpeGZtdC5zaXplaW1hZ2UsIGxlbik7CisJCS8qIGxvc3Qgc29tZSBkYXRhLCBkaXNjYXJkIHRoZSBmcmFtZSAqLworCQl9IGVsc2UgeworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgRElTQ0FSRF9QQUNLRVQsIE5VTEwsIDApOworCQkJUERFQlVHKERfRlJBTSwgImFib3J0IGZyYW1lIHN6ICV1LyV1IHcvIGxlbiAldVxuIiwKKwkJCQkgc2QtPnRoaXNfZiwgZ3NwY2FfZGV2LT5waXhmbXQuc2l6ZWltYWdlLCBsZW4pOworCQl9CisJCXNkLT50aGlzX2YgPSAwOworCX0gZWxzZSB7CisJCWlmIChzZC0+dGhpc19mID09IDApCisJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGRhdGEsIGxlbik7CisJCWVsc2UKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZGF0YSwgbGVuKTsKKwkJc2QtPnRoaXNfZiArPSBsZW47CisJfQorfQorCitzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQoreworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9CisJCWNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1Y3QgZ3NwY2FfZGV2LCBjdHJsX2hhbmRsZXIpOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWdzcGNhX2Rldi0+dXNiX2VyciA9IDA7CisKKwlpZiAoIWdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgorCQlzZXRleHBvc3VyZShnc3BjYV9kZXYsIGN0cmwtPnZhbCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJLyogZ3NwY2FfZGV2LT5nYWluIGF1dG9tYXRpY2FsbHkgdXBkYXRlZCAqLworCQlzZXRnZ2Fpbihnc3BjYV9kZXYsIGdzcGNhX2Rldi0+Z2Fpbi0+dmFsKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CisJCXNkLT5ibHVlLT52YWwgPSBjdHJsLT52YWw7CisJCXNldGJnYWluKGdzcGNhX2Rldiwgc2QtPmJsdWUtPnZhbCwgZ3NwY2FfZGV2LT5nYWluLT52YWwpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCQlzZC0+cmVkLT52YWwgPSBjdHJsLT52YWw7CisJCXNldHJnYWluKGdzcGNhX2Rldiwgc2QtPnJlZC0+dmFsLCBnc3BjYV9kZXYtPmdhaW4tPnZhbCk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gZ3NwY2FfZGV2LT51c2JfZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgc2RfY3RybF9vcHMgPSB7CisJLnNfY3RybCA9IHNkX3NfY3RybCwKK307CisKK3N0YXRpYyBpbnQgc2RfaW5pdF9jb250cm9scyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsID0gJmdzcGNhX2Rldi0+Y3RybF9oYW5kbGVyOworCisJZ3NwY2FfZGV2LT52ZGV2LmN0cmxfaGFuZGxlciA9IGhkbDsKKwl2NGwyX2N0cmxfaGFuZGxlcl9pbml0KGhkbCwgNCk7CisKKwlnc3BjYV9kZXYtPmV4cG9zdXJlID0gdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmc2RfY3RybF9vcHMsCisJLyogTW9zdGx5IGxpbWl0ZWQgYnkgVVJCIHRpbWVvdXRzICovCisJLyogWFhYOiBtYWtlIGR5bmFtaWMgYmFzZWQgb24gZnJhbWUgcmF0ZT8gKi8KKwkJVjRMMl9DSURfRVhQT1NVUkUsIDAsIDgwMCwgMSwgMzUwKTsKKwlnc3BjYV9kZXYtPmdhaW4gPSB2NGwyX2N0cmxfbmV3X3N0ZChoZGwsICZzZF9jdHJsX29wcywKKwkJCVY0TDJfQ0lEX0dBSU4sIDAsIDUxMSwgMSwgMTI4KTsKKwlzZC0+Ymx1ZSA9IHY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnNkX2N0cmxfb3BzLAorCQkJVjRMMl9DSURfQkxVRV9CQUxBTkNFLCAwLCAxMDIzLCAxLCA4MCk7CisJc2QtPnJlZCA9IHY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnNkX2N0cmxfb3BzLAorCQkJVjRMMl9DSURfUkVEX0JBTEFOQ0UsIDAsIDEwMjMsIDEsIDI5NSk7CisKKwlpZiAoaGRsLT5lcnJvcikgeworCQlQRVJSKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSBjb250cm9sc1xuIik7CisJCXJldHVybiBoZGwtPmVycm9yOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CisJLm5hbWUgPSBNT0RVTEVfTkFNRSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ID0gc2RfaW5pdCwKKwkuaW5pdF9jb250cm9scyA9IHNkX2luaXRfY29udHJvbHMsCisJLnN0YXJ0ID0gc2Rfc3RhcnQsCisJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCit9OworCisvKiBUYWJsZSBvZiBzdXBwb3J0ZWQgVVNCIGRldmljZXMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwkvKiBDb21tZW50ZWQgb3V0IGRldmljZXMgc2hvdWxkIGJlIHJlbGF0ZWQgKi8KKwkvKiBBUzogQW1TY29wZSwgVFQ6IFRvdXBUZWsgKi8KKwkvKiB7IFVTQl9ERVZJQ0UoMHgwNTQ3LCAweDYwMzUpIH0sICBUVCBVQ01PUzAwMzUwS1BBICovCisJLyogeyBVU0JfREVWSUNFKDB4MDU0NywgMHg2MTMwKSB9LCAgVFQgVUNNT1MwMTMwMEtQQSAqLworCS8qIHsgVVNCX0RFVklDRSgweDA1NDcsIDB4NjIwMCkgfSwgIFRUIFVDTU9TMDIwMDBLUEEgKi8KKwkvKiB7IFVTQl9ERVZJQ0UoMHgwNTQ3LCAweDYzMTApIH0sICBUVCBVQ01PUzAzMTAwS1BBICovCisJLyogeyBVU0JfREVWSUNFKDB4MDU0NywgMHg2NTEwKSB9LCAgVFQgVUNNT1MwNTEwMEtQQSAqLworCS8qIHsgVVNCX0RFVklDRSgweDA1NDcsIDB4NjgwMCkgfSwgIFRUIFVDTU9TMDgwMDBLUEEgKi8KKwkvKiB7IFVTQl9ERVZJQ0UoMHgwNTQ3LCAweDY4MDEpIH0sICBUVCBVQ01PUzA4MDAwS1BCICovCisJeyBVU0JfREVWSUNFKDB4MDU0NywgMHg2ODAxKSB9LCAvKiBUVCBVQ01PUzA4MDAwS1BCLCBBUyBNVTgwMCAqLworCS8qIHsgVVNCX0RFVklDRSgweDA1NDcsIDB4NjkwMCkgfSwgIFRUIFVDTU9TMDkwMDBLUEEgKi8KKwkvKiB7IFVTQl9ERVZJQ0UoMHgwNTQ3LCAweDY5MDEpIH0sICBUVCBVQ01PUzA5MDAwS1BCICovCisJLyogeyBVU0JfREVWSUNFKDB4MDU0NywgMHg2MDEwKSB9LCAgVFQgVUNNT1MxMDAwMEtQQSAqLworCS8qIHsgVVNCX0RFVklDRSgweDA1NDcsIDB4NjAxNCkgfSwgIFRUIFVDTU9TMTQwMDBLUEEgKi8KKwkvKiB7IFVTQl9ERVZJQ0UoMHgwNTQ3LCAweDYxMzEpIH0sICBUVCBVQ01PUzAxMzAwS01BICovCisJLyogeyBVU0JfREVWSUNFKDB4MDU0NywgMHg2NTExKSB9LCAgVFQgVUNNT1MwNTEwMEtNQSAqLworCS8qIHsgVVNCX0RFVklDRSgweDA1NDcsIDB4ODA4MCkgfSwgIFRUIFVIQ0NEMDA4MDBLUEEgKi8KKwkvKiB7IFVTQl9ERVZJQ0UoMHgwNTQ3LCAweDgxNDApIH0sICBUVCBVSENDRDAxNDAwS1BBICovCisJLyogeyBVU0JfREVWSUNFKDB4MDU0NywgMHg4MTQxKSB9LCAgVFQgRVhDQ0QwMTQwMEtQQSAqLworCS8qIHsgVVNCX0RFVklDRSgweDA1NDcsIDB4ODIwMCkgfSwgIFRUIFVIQ0NEMDIwMDBLUEEgKi8KKwkvKiB7IFVTQl9ERVZJQ0UoMHgwNTQ3LCAweDgyMDEpIH0sICBUVCBVSENDRDAyMDAwS1BCICovCisJLyogeyBVU0JfREVWSUNFKDB4MDU0NywgMHg4MzEwKSB9LCAgVFQgVUhDQ0QwMzEwMEtQQSAqLworCS8qIHsgVVNCX0RFVklDRSgweDA1NDcsIDB4ODUwMCkgfSwgIFRUIFVIQ0NEMDUwMDBLUEEgKi8KKwkvKiB7IFVTQl9ERVZJQ0UoMHgwNTQ3LCAweDg1MTApIH0sICBUVCBVSENDRDA1MTAwS1BBICovCisJLyogeyBVU0JfREVWSUNFKDB4MDU0NywgMHg4NjAwKSB9LCAgVFQgVUhDQ0QwNjAwMEtQQSAqLworCS8qIHsgVVNCX0RFVklDRSgweDA1NDcsIDB4ODgwMCkgfSwgIFRUIFVIQ0NEMDgwMDBLUEEgKi8KKwkvKiB7IFVTQl9ERVZJQ0UoMHgwNTQ3LCAweDgzMTUpIH0sICBUVCBVSENDRDAzMTUwS1BBICovCisJLyogeyBVU0JfREVWSUNFKDB4MDU0NywgMHg3ODAwKSB9LCAgVFQgVUhDQ0QwMDgwMEtNQSAqLworCS8qIHsgVVNCX0RFVklDRSgweDA1NDcsIDB4NzE0MCkgfSwgIFRUIFVIQ0NEMDE0MDBLTUEgKi8KKwkvKiB7IFVTQl9ERVZJQ0UoMHgwNTQ3LCAweDcxNDEpIH0sICBUVCBVSENDRDAxNDAwS01CICovCisJLyogeyBVU0JfREVWSUNFKDB4MDU0NywgMHg3MjAwKSB9LCAgVFQgVUhDQ0QwMjAwMEtNQSAqLworCS8qIHsgVVNCX0RFVklDRSgweDA1NDcsIDB4NzMxNSkgfSwgIFRUIFVIQ0NEMDMxNTBLTUEgKi8KKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGV2aWNlX3RhYmxlKTsKKworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkgICAgIFRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKKwkucHJvYmUgPSBzZF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IGdzcGNhX2Rpc2Nvbm5lY3QsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnc3BjYV9zdXNwZW5kLAorCS5yZXN1bWUgPSBnc3BjYV9yZXN1bWUsCisjZW5kaWYKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyB2b2lkIF9fZXhpdCBzZF9tb2RfZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZzZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9nc3BjYS92YzAzMnguYyBiL2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL3ZjMDMyeC5jCmluZGV4IGMwMGFjNTcuLmI0ZWZiMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL3ZjMDMyeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL2dzcGNhL3ZjMDMyeC5jCkBAIC02OCwxMiArNjgsMTIgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgdmMwMzIxX21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9ZVllVLCBWNEwyX0ZJRUxEX05PTkUsCi0JCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAgKiAyLAogCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMiwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLnByaXYgPSAxfSwKIAl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9ZVllVLCBWNEwyX0ZJRUxEX05PTkUsCi0JCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAgKiAyLAogCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMiwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLnByaXYgPSAwfSwKQEAgLTk3LDE3ICs5NywxNyBAQAogfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGJpX21vZGVbXSA9IHsKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9ZVVlWLCBWNEwyX0ZJRUxEX05PTkUsCi0JCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAgKiAyLAogCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMiwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLnByaXYgPSAyfSwKIAl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9ZVVlWLCBWNEwyX0ZJRUxEX05PTkUsCi0JCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAgKiAyLAogCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMiwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLnByaXYgPSAxfSwKIAl7MTI4MCwgMTAyNCwgVjRMMl9QSVhfRk1UX1lVWVYsIFY0TDJfRklFTERfTk9ORSwKLQkJLmJ5dGVzcGVybGluZSA9IDEyODAsCisJCS5ieXRlc3BlcmxpbmUgPSAxMjgwICogMiwKIAkJLnNpemVpbWFnZSA9IDEyODAgKiAxMDI0ICogMiwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLnByaXYgPSAwfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmMKaW5kZXggY2MwNmQ1ZS4uNDUyNzZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmMKQEAgLTg0LDEzICs4NCwzIEBACiAJCQlNU1BfT1VUUFVUKE1TUF9TQ19JTl9EU1BfU0NBUlQxKSwgMCk7CiAJfQogfQotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uaCBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1hdWRpby5oCmluZGV4IGUzZTYzZDcuLjI3Y2VmYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1hdWRpby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1hdWRpby5oCkBAIC0yNSwxMyArMjUsMyBAQAogI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCiB2b2lkIHB2cjJfbXNwMzQwMF9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqLCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKik7CiAjZW5kaWYgLyogX19QVlJVU0IyX0FVRElPX0ggKi8KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDcwICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWNvbnRleHQuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1jb250ZXh0LmMKaW5kZXggYzg3NjFjNy4uOTI0ZmM0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWNvbnRleHQuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItY29udGV4dC5jCkBAIC00MTgsMTQgKzQxOCwzIEBACiAJcHZyMl9pb3JlYWRfc2V0X3N5bmNfa2V5KGNwLHN0cmVhbV9zeW5jX2tleSxzaXplb2Yoc3RyZWFtX3N5bmNfa2V5KSk7CiAJcmV0dXJuIGNwOwogfQotCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3NSAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1jb250ZXh0LmggYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItY29udGV4dC5oCmluZGV4IGQ2NTdlNTMuLjFjMWQ0NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1jb250ZXh0LmgKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWNvbnRleHQuaApAQCAtODMsMTIgKzgzLDMgQEAKIHZvaWQgcHZyMl9jb250ZXh0X2dsb2JhbF9kb25lKHZvaWQpOwogCiAjZW5kaWYgLyogX19QVlJVU0IyX0NPTlRFWFRfSCAqLwotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDc1ICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWNzNTNsMzJhLmMgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItY3M1M2wzMmEuYwppbmRleCA4ODMyMDkwLi5mODJmMGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItY3M1M2wzMmEuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItY3M1M2wzMmEuYwpAQCAtODIsMTQgKzgyLDMgQEAKIAkJc2QtPm9wcy0+YXVkaW8tPnNfcm91dGluZyhzZCwgaW5wdXQsIDAsIDApOwogCX0KIH0KLQotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItY3M1M2wzMmEuaCBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1jczUzbDMyYS5oCmluZGV4IDUzYmE1NDguLjg2YzE3YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1jczUzbDMyYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1jczUzbDMyYS5oCkBAIC0zNiwxMyArMzYsMyBAQAogdm9pZCBwdnIyX2NzNTNsMzJhX3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICosIHN0cnVjdCB2NGwyX3N1YmRldiAqKTsKIAogI2VuZGlmIC8qIF9fUFZSVVNCMl9BVURJT19DUzUzTDMyQV9IICovCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3MCAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1jdHJsLmMgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItY3RybC5jCmluZGV4IDdkNWE3MTMuLjk1OGRiMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1jdHJsLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWN0cmwuYwpAQCAtNTk2LDE0ICs1OTYsMyBAQAogCX0gd2hpbGUoMCk7IExPQ0tfR0lWRShjcHRyLT5oZHctPmJpZ19sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQotCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3NSAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1jdHJsLmggYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItY3RybC5oCmluZGV4IDc5NGZmOTAuLmMxNzU1NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1jdHJsLmgKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWN0cmwuaApAQCAtMTEwLDEzICsxMTAsMyBAQAogCQkJICAgdW5zaWduZWQgaW50ICpsZW4pOwogCiAjZW5kaWYgLyogX19QVlJVU0IyX0NUUkxfSCAqLwotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzUgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCmluZGV4IGM1MTRkMGIuLjFhODFhYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCkBAIC0xNTIsMTUgKzE1MiwzIEBACiAJCXNkLT5vcHMtPmF1ZGlvLT5zX3JvdXRpbmcoc2QsICh1MzIpYXVkX2lucHV0LCAwLCAwKTsKIAl9CiB9Ci0KLQotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuaCBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5oCmluZGV4IGUzNWMyMzIyLi4yZWVkN2I3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuaApAQCAtNDAsMTMgKzQwLDMgQEAKIAogCiAjZW5kaWYgLyogX19QVlJVU0IyX0NYMjU4NFhfVjRMX0ggKi8KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDcwICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWRlYnVnLmggYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItZGVidWcuaAppbmRleCBiZTc5MjQ5Li40ZWYyZWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItZGVidWcuaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItZGVidWcuaApAQCAtNTcsMTMgKzU3LDMgQEAKIAogCiAjZW5kaWYgLyogX19QVlJVU0IyX0hEV19JTlRFUk5BTF9IICovCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3NSAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5jIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmMKaW5kZXggNDI3OWViYi4uZTQwMjJiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmMKQEAgLTMyMiwxNCArMzIyLDMgQEAKIAogCXJldHVybiAwOwogfQotCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3NSAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5oIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmgKaW5kZXggMmY4ZDQ2Ny4uYThkZmM1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmgKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmgKQEAgLTQwLDEzICs0MCwzIEBACiAJCQljb25zdCBjaGFyICpidWZfcHRyLHVuc2lnbmVkIGludCBidWZfc2l6ZSk7CiAKICNlbmRpZiAvKiBfX1BWUlVTQjJfREVCVUdJRkNfSCAqLwotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzUgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5jIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuYwppbmRleCBhZGM1MDFkMy4uMDZjNGMzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5jCkBAIC01NjQsMTMgKzU2NCwzIEBACiBNT0RVTEVfRklSTVdBUkUoUFZSMl9GSVJNV0FSRV8yNHh4eCk7CiBNT0RVTEVfRklSTVdBUkUoUFZSMl9GSVJNV0FSRV83M3h4eCk7CiBNT0RVTEVfRklSTVdBUkUoUFZSMl9GSVJNV0FSRV83NXh4eCk7Ci0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3NSAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmggYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5oCmluZGV4IDI3M2M4ZDQuLjVhZWVmYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmgKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuaApAQCAtMTg3LDEzICsxODcsMyBAQAogZXh0ZXJuIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHB2cjJfZGV2aWNlX3RhYmxlW107CiAKICNlbmRpZiAvKiBfX1BWUlVTQjJfSERXX0lOVEVSTkFMX0ggKi8KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDc1ICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWVlcHJvbS5jCmluZGV4IDk1MTVmM2EuLmUxOTA3Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1lZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItZWVwcm9tLmMKQEAgLTE1MiwxMyArMTUyLDMgQEAKIAogCXJldHVybiAwOwogfQotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItZWVwcm9tLmggYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItZWVwcm9tLmgKaW5kZXggY2NhMzIxNi4uZjFlMzNjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWVlcHJvbS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1lZXByb20uaApAQCAtMjcsMTMgKzI3LDMgQEAKIGludCBwdnIyX2VlcHJvbV9hbmFseXplKHN0cnVjdCBwdnIyX2hkdyAqKTsKIAogI2VuZGlmIC8qIF9fUFZSVVNCMl9FRVBST01fSCAqLwotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuYwppbmRleCBmNzcwMmFlLi41OTNiM2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMKQEAgLTUzOCwxNCArNTM4LDMgQEAKIAogCXJldHVybiBzdGF0dXM7CiB9Ci0KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDcwICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuaCBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmgKaW5kZXggMjMyZmVmYi4uYTJiZmI0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5oCkBAIC0zMCwxMyArMzAsMyBAQAogaW50IHB2cjJfZW5jb2Rlcl9zdG9wKHN0cnVjdCBwdnIyX2hkdyAqKTsKIAogI2VuZGlmIC8qIF9fUFZSVVNCMl9FTkNPREVSX0ggKi8KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDcwICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWZ4Mi1jbWQuaCBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1meDItY21kLmgKaW5kZXggNjE0NzU1ZS4uMDZhMTVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWZ4Mi1jbWQuaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItZngyLWNtZC5oCkBAIC02MCwxMyArNjAsMyBAQAogI2RlZmluZSBGWDJDTURfT05BSVJfRFRWX1BPV0VSX09GRiAgICAgMHhhM3UKIAogI2VuZGlmIC8qIF9QVlJVU0IyX0ZYMl9DTURfSF8gKi8KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDc1ICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCmluZGV4IDAzNjk1MmYuLjFmOWMwMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmgKQEAgLTM5NCwxMyArMzk0LDMgQEAKIHZvaWQgcHZyMl9oZHdfc3RhdHVzX3BvbGwoc3RydWN0IHB2cjJfaGR3ICopOwogCiAjZW5kaWYgLyogX19QVlJVU0IyX0hEV19JTlRFUk5BTF9IICovCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3NSAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1oZHcuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1oZHcuYwppbmRleCAyZmQ5YjVlLi45MzA1OTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWhkdy5jCkBAIC0yNDI1LDIyICsyNDI1LDE4IEBACiAJfQogCWlmICghaGR3KSBnb3RvIGZhaWw7CiAKLQlpbml0X3RpbWVyKCZoZHctPnF1aWVzY2VudF90aW1lcik7Ci0JaGR3LT5xdWllc2NlbnRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhkdzsKLQloZHctPnF1aWVzY2VudF90aW1lci5mdW5jdGlvbiA9IHB2cjJfaGR3X3F1aWVzY2VudF90aW1lb3V0OworCXNldHVwX3RpbWVyKCZoZHctPnF1aWVzY2VudF90aW1lciwgcHZyMl9oZHdfcXVpZXNjZW50X3RpbWVvdXQsCisJCSAgICAodW5zaWduZWQgbG9uZyloZHcpOwogCi0JaW5pdF90aW1lcigmaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIpOwotCWhkdy0+ZGVjb2Rlcl9zdGFiaWxpemF0aW9uX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyloZHc7Ci0JaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIuZnVuY3Rpb24gPQotCQlwdnIyX2hkd19kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZW91dDsKKwlzZXR1cF90aW1lcigmaGR3LT5kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZXIsCisJCSAgICBwdnIyX2hkd19kZWNvZGVyX3N0YWJpbGl6YXRpb25fdGltZW91dCwKKwkJICAgICh1bnNpZ25lZCBsb25nKWhkdyk7CiAKLQlpbml0X3RpbWVyKCZoZHctPmVuY29kZXJfd2FpdF90aW1lcik7Ci0JaGR3LT5lbmNvZGVyX3dhaXRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhkdzsKLQloZHctPmVuY29kZXJfd2FpdF90aW1lci5mdW5jdGlvbiA9IHB2cjJfaGR3X2VuY29kZXJfd2FpdF90aW1lb3V0OworCXNldHVwX3RpbWVyKCZoZHctPmVuY29kZXJfd2FpdF90aW1lciwgcHZyMl9oZHdfZW5jb2Rlcl93YWl0X3RpbWVvdXQsCisJCSAgICAodW5zaWduZWQgbG9uZyloZHcpOwogCi0JaW5pdF90aW1lcigmaGR3LT5lbmNvZGVyX3J1bl90aW1lcik7Ci0JaGR3LT5lbmNvZGVyX3J1bl90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaGR3OwotCWhkdy0+ZW5jb2Rlcl9ydW5fdGltZXIuZnVuY3Rpb24gPSBwdnIyX2hkd19lbmNvZGVyX3J1bl90aW1lb3V0OworCXNldHVwX3RpbWVyKCZoZHctPmVuY29kZXJfcnVuX3RpbWVyLCBwdnIyX2hkd19lbmNvZGVyX3J1bl90aW1lb3V0LAorCQkgICAgKHVuc2lnbmVkIGxvbmcpaGR3KTsKIAogCWhkdy0+bWFzdGVyX3N0YXRlID0gUFZSMl9TVEFURV9ERUFEOwogCkBAIC0zNjgwLDEwICszNjc2LDggQEAKIAloZHctPmN0bF90aW1lb3V0X2ZsYWcgPSAwOwogCWhkdy0+Y3RsX3dyaXRlX3BlbmRfZmxhZyA9IDA7CiAJaGR3LT5jdGxfcmVhZF9wZW5kX2ZsYWcgPSAwOwotCWluaXRfdGltZXIoJnRpbWVyKTsKKwlzZXR1cF90aW1lcigmdGltZXIsIHB2cjJfY3RsX3RpbWVvdXQsICh1bnNpZ25lZCBsb25nKWhkdyk7CiAJdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyB0aW1lb3V0OwotCXRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyloZHc7Ci0JdGltZXIuZnVuY3Rpb24gPSBwdnIyX2N0bF90aW1lb3V0OwogCiAJaWYgKHdyaXRlX2xlbikgewogCQloZHctPmNtZF9kZWJ1Z19zdGF0ZSA9IDI7CkBAIC00MDM1LDExICs0MDI5LDYgQEAKIH0KIAogCi1pbnQgcHZyMl9oZHdfY21kX3Bvd2VyZG93bihzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlyZXR1cm4gcHZyMl9pc3N1ZV9zaW1wbGVfY21kKGhkdyxGWDJDTURfUE9XRVJfT0ZGKTsKLX0KLQogCiBpbnQgcHZyMl9oZHdfY21kX2RlY29kZXJfcmVzZXQoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CkBAIC00MzAxLDkgKzQyOTAsOCBAQAogCQkJCSAgIHRoZSBlbmNvZGVyLiAqLwogCQkJCWlmICghaGR3LT5zdGF0ZV9lbmNvZGVyX3dhaXRvaykgewogCQkJCQloZHctPmVuY29kZXJfd2FpdF90aW1lci5leHBpcmVzID0KLQkJCQkJCWppZmZpZXMgKwotCQkJCQkJKEhaICogVElNRV9NU0VDX0VOQ09ERVJfV0FJVAotCQkJCQkJIC8gMTAwMCk7CisJCQkJCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygKKwkJCQkJCVRJTUVfTVNFQ19FTkNPREVSX1dBSVQpOwogCQkJCQlhZGRfdGltZXIoJmhkdy0+ZW5jb2Rlcl93YWl0X3RpbWVyKTsKIAkJCQl9CiAJCQl9CkBAIC00NDI2LDggKzQ0MTQsOCBAQAogCQlpZiAocHZyMl9lbmNvZGVyX3N0YXJ0KGhkdykgPCAwKSByZXR1cm4gITA7CiAJCWhkdy0+c3RhdGVfZW5jb2Rlcl9ydW4gPSAhMDsKIAkJaWYgKCFoZHctPnN0YXRlX2VuY29kZXJfcnVub2spIHsKLQkJCWhkdy0+ZW5jb2Rlcl9ydW5fdGltZXIuZXhwaXJlcyA9Ci0JCQkJamlmZmllcyArIChIWiAqIFRJTUVfTVNFQ19FTkNPREVSX09LIC8gMTAwMCk7CisJCQloZHctPmVuY29kZXJfcnVuX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKKwkJCQkgbXNlY3NfdG9famlmZmllcyhUSU1FX01TRUNfRU5DT0RFUl9PSyk7CiAJCQlhZGRfdGltZXIoJmhkdy0+ZW5jb2Rlcl9ydW5fdGltZXIpOwogCQl9CiAJfQpAQCAtNDUxOCw5ICs0NTA2LDggQEAKIAkJCQkgICBidXQgYmVmb3JlIHdlIGRpZCB0aGUgcGVuZGluZyBjaGVjay4gKi8KIAkJCQlpZiAoIWhkdy0+c3RhdGVfZGVjb2Rlcl9xdWllc2NlbnQpIHsKIAkJCQkJaGR3LT5xdWllc2NlbnRfdGltZXIuZXhwaXJlcyA9Ci0JCQkJCQlqaWZmaWVzICsKLQkJCQkJCShIWiAqIFRJTUVfTVNFQ19ERUNPREVSX1dBSVQKLQkJCQkJCSAvIDEwMDApOworCQkJCQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoCisJCQkJCQlUSU1FX01TRUNfREVDT0RFUl9XQUlUKTsKIAkJCQkJYWRkX3RpbWVyKCZoZHctPnF1aWVzY2VudF90aW1lcik7CiAJCQkJfQogCQkJfQpAQCAtNDU0NCw5ICs0NTMxLDggQEAKIAkJaGR3LT5zdGF0ZV9kZWNvZGVyX3J1biA9ICEwOwogCQlpZiAoaGR3LT5kZWNvZGVyX2NsaWVudF9pZCA9PSBQVlIyX0NMSUVOVF9JRF9TQUE3MTE1KSB7CiAJCQloZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lci5leHBpcmVzID0KLQkJCQlqaWZmaWVzICsKLQkJCQkoSFogKiBUSU1FX01TRUNfREVDT0RFUl9TVEFCSUxJWkFUSU9OX1dBSVQgLwotCQkJCSAxMDAwKTsKKwkJCQlqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygKKwkJCQlUSU1FX01TRUNfREVDT0RFUl9TVEFCSUxJWkFUSU9OX1dBSVQpOwogCQkJYWRkX3RpbWVyKCZoZHctPmRlY29kZXJfc3RhYmlsaXphdGlvbl90aW1lcik7CiAJCX0gZWxzZSB7CiAJCQloZHctPnN0YXRlX2RlY29kZXJfcmVhZHkgPSAhMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1oZHcuaCBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1oZHcuaAppbmRleCA0MTg0NzA3Li5hODJhMDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaGR3LmgKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWhkdy5oCkBAIC0yNzEsOSArMjcxLDYgQEAKIC8qIEV4ZWN1dGUgc2ltcGxlIHJlc2V0IGNvbW1hbmQgKi8KIGludCBwdnIyX2hkd19jbWRfcG93ZXJ1cChzdHJ1Y3QgcHZyMl9oZHcgKik7CiAKLS8qIHN1c3BlbmQgKi8KLWludCBwdnIyX2hkd19jbWRfcG93ZXJkb3duKHN0cnVjdCBwdnIyX2hkdyAqKTsKLQogLyogT3JkZXIgZGVjb2RlciB0byByZXNldCAqLwogaW50IHB2cjJfaGR3X2NtZF9kZWNvZGVyX3Jlc2V0KHN0cnVjdCBwdnIyX2hkdyAqKTsKIApAQCAtMzQzLDEzICszNDAsMyBAQAogaW50IHB2cjJfdXBsb2FkX2Zpcm13YXJlMihzdHJ1Y3QgcHZyMl9oZHcgKmhkdyk7CiAKICNlbmRpZiAvKiBfX1BWUlVTQjJfSERXX0ggKi8KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDc1ICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYwppbmRleCBiNWU5MjlmLi40YmFhOWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYwpAQCAtNjg2LDEzICs2ODYsMyBAQAogCQloZHctPmkyY19saW5rZWQgPSAwOwogCX0KIH0KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDc1ICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmggYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuaAppbmRleCA2YTc1NzY5Mi4uYTEwYTNlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmgKQEAgLTI3LDE0ICsyNywzIEBACiAKIAogI2VuZGlmIC8qIF9fUFZSVVNCMl9JMkNfQURBUFRFUl9IICovCi0KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDc1ICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWlvLmMgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaW8uYwppbmRleCAxZTM1NDc0Li4wYzA4ZjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaW8uYwpAQCAtNjgyLDE0ICs2ODIsMyBAQAogewogCXJldHVybiBicC0+aWQ7CiB9Ci0KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDc1ICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWlvLmggYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaW8uaAppbmRleCBhZmI3ZTg3Li4wYzQ3YzZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaW8uaApAQCAtOTAsMTMgKzkwLDMgQEAKIGludCBwdnIyX2J1ZmZlcl9xdWV1ZShzdHJ1Y3QgcHZyMl9idWZmZXIgKik7CiAKICNlbmRpZiAvKiBfX1BWUlVTQjJfSU9fSCAqLwotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzUgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmMgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmMKaW5kZXggYmJhNjExNS4uY2Q5OTViNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1pb3JlYWQuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmMKQEAgLTQ5OSwxNCArNDk5LDMgQEAKIAkJICAgY3AscmVxX2NudCxyZXQpOwogCXJldHVybiByZXQ7CiB9Ci0KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDc1ICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWlvcmVhZC5oIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLWlvcmVhZC5oCmluZGV4IDEwMGUwNzguLjBiMWYwZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1pb3JlYWQuaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmgKQEAgLTM2LDEzICszNiwzIEBACiBpbnQgcHZyMl9pb3JlYWRfYXZhaWwoc3RydWN0IHB2cjJfaW9yZWFkICopOwogCiAjZW5kaWYgLyogX19QVlJVU0IyX0lPUkVBRF9IICovCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3NSAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jCmluZGV4IGMxZDliYjYuLjg2YmU5MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1tYWluLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLW1haW4uYwpAQCAtMTY5LDE0ICsxNjksMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9WRVJTSU9OKCIwLjkuMSIpOwotCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3MCAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1zdGQuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1zdGQuYwppbmRleCA0NTM2MjdiLi45YTU5NmEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItc3RkLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXN0ZC5jCkBAIC0zOTgsMTQgKzM5OCwzIEBACiB7CiAJcmV0dXJuIENTVERfQUxMOwogfQotCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3NSAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1zdGQuaCBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1zdGQuaAppbmRleCBhMzVjNTNkLi5lZDRlYzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItc3RkLmgKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXN0ZC5oCkBAIC00NywxMyArNDcsMyBAQAogdjRsMl9zdGRfaWQgcHZyMl9zdGRfZ2V0X3VzYWJsZSh2b2lkKTsKIAogI2VuZGlmIC8qIF9fUFZSVVNCMl9TVERfSCAqLwotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzUgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCmluZGV4IDZlZjEzMzUuLjA2ZmU2M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCkBAIC04NDgsMTQgKzg0OCwzIEBACiAJcmV0dXJuIGNvdW50OwogfQogI2VuZGlmIC8qIENPTkZJR19WSURFT19QVlJVU0IyX0RFQlVHSUZDICovCi0KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDc1ICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmggYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuaAppbmRleCA2ZDg3NWJmLi42ZjA1NzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuaApAQCAtMzQsMTMgKzM0LDMgQEAKIAkJCQkgICAgIHN0cnVjdCBwdnIyX3N5c2ZzX2NsYXNzICopOwogCiAjZW5kaWYgLyogX19QVlJVU0IyX1NZU0ZTX0ggKi8KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDc1ICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXV0aWwuaCBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi11dGlsLmgKaW5kZXggOTJiNzU1NC4uNTQ2NWJmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXV0aWwuaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItdXRpbC5oCkBAIC01MCwxMyArNTAsMyBAQAogCiAKICNlbmRpZiAvKiBfX1BWUlVTQjJfVVRJTF9IICovCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3NSAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi12NGwyLmMgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCmluZGV4IDUzNjIxMGIuLjM1ZTRlYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXY0bDIuYwpAQCAtMTM2MiwxMyArMTM2MiwzIEBACiAJcHZyMl92NGwyX2Rlc3Ryb3lfbm9fbG9jayh2cCk7CiAJcmV0dXJuIE5VTEw7CiB9Ci0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3NSAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi12NGwyLmggYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItdjRsMi5oCmluZGV4IDM0YzAxMWEuLmU0NTVjOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi12NGwyLmgKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXY0bDIuaApAQCAtMjcsMTMgKzI3LDMgQEAKIHN0cnVjdCBwdnIyX3Y0bDIgKnB2cjJfdjRsMl9jcmVhdGUoc3RydWN0IHB2cjJfY29udGV4dCAqKTsKIAogI2VuZGlmIC8qIF9fUFZSVVNCMl9WNEwyX0ggKi8KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDc1ICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXZpZGVvLXY0bC5jIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXZpZGVvLXY0bC5jCmluZGV4IDJlMjA1YzkuLjEzOWIzOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmMKQEAgLTEwMSwxNCArMTAxLDMgQEAKIAkJc2QtPm9wcy0+dmlkZW8tPnNfcm91dGluZyhzZCwgaW5wdXQsIDAsIDApOwogCX0KIH0KLQotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmggYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmgKaW5kZXggM2IwYmQ1ZC4uZGFjZjNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXZpZGVvLXY0bC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuaApAQCAtMzYsMTMgKzM2LDMgQEAKIHZvaWQgcHZyMl9zYWE3MTE1X3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICosIHN0cnVjdCB2NGwyX3N1YmRldiAqKTsKIAogI2VuZGlmIC8qIF9fUFZSVVNCMl9WSURFT19WNExfSCAqLwotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmMgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmMKaW5kZXggM2FjOGQ3NTEuLmYxZGY5NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmMKQEAgLTU2LDE1ICs1NiwzIEBACiAJCXNkLT5vcHMtPmF1ZGlvLT5zX3JvdXRpbmcoc2QsIGlucHV0LCAwLCAwKTsKIAl9CiB9Ci0KLQotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmggYi9kcml2ZXJzL21lZGlhL3VzYi9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmgKaW5kZXggMDU3N2JjNy4uYTRlZTEyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuaApAQCAtNDAsMTMgKzQwLDMgQEAKIAogCiAjZW5kaWYgLyogX19QVlJVU0IyX1dNODc3NV9IICovCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3MCAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B2cnVzYjIvcHZydXNiMi5oIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLmgKaW5kZXggMjQwZGU5Yi4uOTVmOThhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLmgKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHZydXNiMi9wdnJ1c2IyLmgKQEAgLTMwLDEzICszMCwzIEBACiAjZGVmaW5lIFBWUl9OVU0gMjAKIAogI2VuZGlmIC8qIF9fUFZSVVNCMl9IICovCi0KLS8qCi0gIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6Ci0gICoqKiBMb2NhbCBWYXJpYWJsZXM6ICoqKgotICAqKiogbW9kZTogYyAqKioKLSAgKioqIGZpbGwtY29sdW1uOiA3MCAqKioKLSAgKioqIHRhYi13aWR0aDogOCAqKioKLSAgKioqIGMtYmFzaWMtb2Zmc2V0OiA4ICoqKgotICAqKiogRW5kOiAqKioKLSAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3B3Yy9wd2MtaWYuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3B3Yy9wd2MtaWYuYwppbmRleCAxNWI3NTRkLi43MDIyNjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi9wd2MvcHdjLWlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvcHdjL3B3Yy1pZi5jCkBAIC01MDgsNyArNTA4LDggQEAKIH0KIAogLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB2Yl9xdWV1ZV9sb2NrIGhvbGQgKi8KLXN0YXRpYyB2b2lkIHB3Y19jbGVhbnVwX3F1ZXVlZF9idWZzKHN0cnVjdCBwd2NfZGV2aWNlICpwZGV2KQorc3RhdGljIHZvaWQgcHdjX2NsZWFudXBfcXVldWVkX2J1ZnMoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsCisJCQkJICAgIGVudW0gdmIyX2J1ZmZlcl9zdGF0ZSBzdGF0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIApAQCAtNTE5LDcgKzUyMCw3IEBACiAJCWJ1ZiA9IGxpc3RfZW50cnkocGRldi0+cXVldWVkX2J1ZnMubmV4dCwgc3RydWN0IHB3Y19mcmFtZV9idWYsCiAJCQkJIGxpc3QpOwogCQlsaXN0X2RlbCgmYnVmLT5saXN0KTsKLQkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZiLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsKKwkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZiLCBzdGF0ZSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBkZXYtPnF1ZXVlZF9idWZzX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTY3NCw3ICs2NzUsNyBAQAogCQlwd2Nfc2V0X2xlZHMocGRldiwgMCwgMCk7CiAJCXB3Y19jYW1lcmFfcG93ZXIocGRldiwgMCk7CiAJCS8qIEFuZCBjbGVhbnVwIGFueSBxdWV1ZWQgYnVmcyEhICovCi0JCXB3Y19jbGVhbnVwX3F1ZXVlZF9idWZzKHBkZXYpOworCQlwd2NfY2xlYW51cF9xdWV1ZWRfYnVmcyhwZGV2LCBWQjJfQlVGX1NUQVRFX1FVRVVFRCk7CiAJfQogCW11dGV4X3VubG9jaygmcGRldi0+djRsMl9sb2NrKTsKIApAQCAtNjkyLDcgKzY5Myw5IEBACiAJCXB3Y19pc29jX2NsZWFudXAocGRldik7CiAJfQogCi0JcHdjX2NsZWFudXBfcXVldWVkX2J1ZnMocGRldik7CisJcHdjX2NsZWFudXBfcXVldWVkX2J1ZnMocGRldiwgVkIyX0JVRl9TVEFURV9FUlJPUik7CisJaWYgKHBkZXYtPmZpbGxfYnVmKQorCQl2YjJfYnVmZmVyX2RvbmUoJnBkZXYtPmZpbGxfYnVmLT52YiwgVkIyX0JVRl9TVEFURV9FUlJPUik7CiAJbXV0ZXhfdW5sb2NrKCZwZGV2LT52NGwyX2xvY2spOwogfQogCkBAIC0xMTI1LDcgKzExMjgsNiBAQAogCWlmIChwZGV2LT52Yl9xdWV1ZS5zdHJlYW1pbmcpCiAJCXB3Y19pc29jX2NsZWFudXAocGRldik7CiAJcGRldi0+dWRldiA9IE5VTEw7Ci0JcHdjX2NsZWFudXBfcXVldWVkX2J1ZnMocGRldik7CiAKIAl2NGwyX2RldmljZV9kaXNjb25uZWN0KCZwZGV2LT52NGwyX2Rldik7CiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnBkZXYtPnZkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvczIyNTUvczIyNTVkcnYuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3MyMjU1L3MyMjU1ZHJ2LmMKaW5kZXggZGU1NWU5Ni4uMGYzYzM0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvczIyNTUvczIyNTVkcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9zMjI1NS9zMjI1NWRydi5jCkBAIC0yMjc0LDkgKzIyNzQsNyBAQAogCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkIG5vdCBmaW5kIGJ1bGstaW4gZW5kcG9pbnRcbiIpOwogCQlnb3RvIGVycm9yRVA7CiAJfQotCWluaXRfdGltZXIoJmRldi0+dGltZXIpOwotCWRldi0+dGltZXIuZnVuY3Rpb24gPSBzMjI1NV90aW1lcjsKLQlkZXYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXYtPmZ3X2RhdGE7CisJc2V0dXBfdGltZXIoJmRldi0+dGltZXIsIHMyMjU1X3RpbWVyLCAodW5zaWduZWQgbG9uZylkZXYtPmZ3X2RhdGEpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+ZndfZGF0YS0+d2FpdF9mdyk7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9DSEFOTkVMUzsgaSsrKSB7CiAJCXN0cnVjdCBzMjI1NV92YyAqdmMgPSAmZGV2LT52Y1tpXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3NpYW5vL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3VzYi9zaWFuby9LY29uZmlnCmluZGV4IDVhZmJkOWEuLmQzN2I3NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3NpYW5vL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS91c2Ivc2lhbm8vS2NvbmZpZwpAQCAtNSw3ICs1LDkgQEAKIGNvbmZpZyBTTVNfVVNCX0RSVgogCXRyaXN0YXRlICJTaWFubyBTTVMxeHh4IGJhc2VkIE1EVFYgcmVjZWl2ZXIiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBIQVNfRE1BCisJZGVwZW5kcyBvbiAhUkNfQ09SRSB8fCBSQ19DT1JFCiAJc2VsZWN0IE1FRElBX0NPTU1PTl9PUFRJT05TCisJc2VsZWN0IFNNU19TSUFOT19NRFRWCiAJLS0taGVscC0tLQogCSAgQ2hvb3NlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIGhhdmUgU2lhbm8ncyBzdXBwb3J0IGZvciBVU0IgaW50ZXJmYWNlCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3N0azExNjAvc3RrMTE2MC12NGwuYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3N0azExNjAvc3RrMTE2MC12NGwuYwppbmRleCBhNDc2MjkxMC4uNjVhMzI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2Ivc3RrMTE2MC9zdGsxMTYwLXY0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3N0azExNjAvc3RrMTE2MC12NGwuYwpAQCAtMzgsMTAgKzM4LDYgQEAKICNpbmNsdWRlICJzdGsxMTYwLmgiCiAjaW5jbHVkZSAic3RrMTE2MC1yZWcuaCIKIAotc3RhdGljIHVuc2lnbmVkIGludCB2aWRpb2NfZGVidWc7Ci1tb2R1bGVfcGFyYW0odmlkaW9jX2RlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyh2aWRpb2NfZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMgW3ZpZGlvY10iKTsKLQogc3RhdGljIGJvb2wga2VlcF9idWZmZXJzOwogbW9kdWxlX3BhcmFtKGtlZXBfYnVmZmVycywgYm9vbCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGtlZXBfYnVmZmVycywgImRvbid0IHJlbGVhc2UgYnVmZmVycyB1cG9uIHN0b3Agc3RyZWFtaW5nIik7CkBAIC02NTksNyArNjU1LDYgQEAKIAogCS8qIEluaXRpYWxpemUgdmlkZW9fZGV2aWNlIHdpdGggYSB0ZW1wbGF0ZSBzdHJ1Y3R1cmUgKi8KIAlkZXYtPnZkZXYgPSB2NGxfdGVtcGxhdGU7Ci0JZGV2LT52ZGV2LmRlYnVnID0gdmlkaW9jX2RlYnVnOwogCWRldi0+dmRldi5xdWV1ZSA9ICZkZXYtPnZiX3ZpZHE7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2Ivc3Rrd2ViY2FtL3N0ay13ZWJjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdXNiL3N0a3dlYmNhbS9zdGstd2ViY2FtLmMKaW5kZXggMzU4OGRjMy4uZTA4ZmE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2Ivc3Rrd2ViY2FtL3N0ay13ZWJjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi9zdGt3ZWJjYW0vc3RrLXdlYmNhbS5jCkBAIC0xMjYyLDcgKzEyNjIsNiBAQAogCiAJZGV2LT52ZGV2ID0gc3RrX3Y0bF9kYXRhOwogCWRldi0+dmRldi5sb2NrID0gJmRldi0+bG9jazsKLQlkZXYtPnZkZXYuZGVidWcgPSBkZWJ1ZzsKIAlkZXYtPnZkZXYudjRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKIAl2aWRlb19zZXRfZHJ2ZGF0YSgmZGV2LT52ZGV2LCBkZXYpOwogCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi90bTYwMDAvdG02MDAwLXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3VzYi90bTYwMDAvdG02MDAwLXZpZGVvLmMKaW5kZXggNzkzNTc3Zi4uMGYxNGQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvdG02MDAwL3RtNjAwMC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3RtNjAwMC90bTYwMDAtdmlkZW8uYwpAQCAtOTQxLDcgKzk0MSw3IEBACiAKIAlmbXQgPSBmb3JtYXRfYnlfZm91cmNjKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOwogCWlmIChOVUxMID09IGZtdCkgewotCQlkcHJpbnRrKGRldiwgVjRMMl9ERUJVR19JT0NUTF9BUkcsICJGb3VyY2MgZm9ybWF0ICgweCUwOHgpIgorCQlkcHJpbnRrKGRldiwgMiwgIkZvdXJjYyBmb3JtYXQgKDB4JTA4eCkiCiAJCQkJIiBpbnZhbGlkLlxuIiwgZi0+Zm10LnBpeC5waXhlbGZvcm1hdCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE2MjIsNyArMTYyMiw2IEBACiAJKnZmZCA9ICp0ZW1wbGF0ZTsKIAl2ZmQtPnY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7CiAJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7Ci0JdmZkLT5kZWJ1ZyA9IHRtNjAwMF9kZWJ1ZzsKIAl2ZmQtPmxvY2sgPSAmZGV2LT5sb2NrOwogCiAJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIiVzICVzIiwgZGV2LT5uYW1lLCB0eXBlX25hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYwppbmRleCAzMDJhYTA3Li40NGIwYzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYwpAQCAtMjE5NCw5ICsyMTk0LDggQEAKIAogdm9pZCB1c2J2aXNpb25faW5pdF9wb3dlcl9vZmZfdGltZXIoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbikKIHsKLQlpbml0X3RpbWVyKCZ1c2J2aXNpb24tPnBvd2VyX29mZl90aW1lcik7Ci0JdXNidmlzaW9uLT5wb3dlcl9vZmZfdGltZXIuZGF0YSA9IChsb25nKXVzYnZpc2lvbjsKLQl1c2J2aXNpb24tPnBvd2VyX29mZl90aW1lci5mdW5jdGlvbiA9IHVzYnZpc2lvbl9wb3dlcl9vZmZfdGltZXI7CisJc2V0dXBfdGltZXIoJnVzYnZpc2lvbi0+cG93ZXJfb2ZmX3RpbWVyLCB1c2J2aXNpb25fcG93ZXJfb2ZmX3RpbWVyLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpdXNidmlzaW9uKTsKIH0KIAogdm9pZCB1c2J2aXNpb25fc2V0X3Bvd2VyX29mZl90aW1lcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQpAQCAtMjUwMiwxMSArMjUwMSwzIEBACiAJdXNidmlzaW9uX3NldF9hdWRpbyh1c2J2aXNpb24sIGF1ZGlvW2NoYW5uZWxdKTsKIAlyZXR1cm4gMDsKIH0KLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYwppbmRleCBiYTI2MmEzLi4yNmRiY2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMKQEAgLTQ0NSwxMSArNDQ1LDMgQEAKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubmFtZSAgICAgICAgICAgICAgPSAidXNidmlzaW9uIiwKIH07Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCmluZGV4IDY5M2Q1ZjQuLmNkMmZiZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J2aXNpb24vdXNidmlzaW9uLXZpZGVvLmMKQEAgLTE3MTYsMTEgKzE3MTYsMyBAQAogCiBtb2R1bGVfaW5pdCh1c2J2aXNpb25faW5pdCk7CiBtb2R1bGVfZXhpdCh1c2J2aXNpb25fZXhpdCk7Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvdXNidmlzaW9uL3VzYnZpc2lvbi5oIGIvZHJpdmVycy9tZWRpYS91c2IvdXNidmlzaW9uL3VzYnZpc2lvbi5oCmluZGV4IGEwYzczY2YuLjc3YWViMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3VzYnZpc2lvbi91c2J2aXNpb24uaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi91c2J2aXNpb24vdXNidmlzaW9uLmgKQEAgLTUxNywxMSArNTE3LDMgQEAKIGludCB1c2J2aXNpb25fcG93ZXJfb24oc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbik7CiAKICNlbmRpZgkJCQkJCQkJCS8qIF9fTElOVVhfVVNCVklTSU9OX0ggKi8KLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWJhc2ljLW9mZnNldDogOAotICogRW5kOgotICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi91dmMvdXZjX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS91c2IvdXZjL3V2Y19kcml2ZXIuYwppbmRleCA2YTRiMGI4Li5jZjI3MDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91dmMvdXZjX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3V2Yy91dmNfZHJpdmVyLmMKQEAgLTEzOCw2ICsxMzgsMTEgQEAKIAkJLmZjYwkJPSBWNEwyX1BJWF9GTVRfUkdCNTY1LAogCX0sCiAJeworCQkubmFtZQkJPSAiQkdSIDg6ODo4IChCR1IzKSIsCisJCS5ndWlkCQk9IFVWQ19HVUlEX0ZPUk1BVF9CR1IzLAorCQkuZmNjCQk9IFY0TDJfUElYX0ZNVF9CR1IyNCwKKwl9LAorCXsKIAkJLm5hbWUJCT0gIkguMjY0IiwKIAkJLmd1aWQJCT0gVVZDX0dVSURfRk9STUFUX0gyNjQsCiAJCS5mY2MJCT0gVjRMMl9QSVhfRk1UX0gyNjQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3VzYi91dmMvdXZjX3F1ZXVlLmMgYi9kcml2ZXJzL21lZGlhL3VzYi91dmMvdXZjX3F1ZXVlLmMKaW5kZXggY2M5NjA3Mi4uMTBjNTU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvdXZjL3V2Y19xdWV1ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdXNiL3V2Yy91dmNfcXVldWUuYwpAQCAtMTQzLDIwICsxNDMsNiBAQAogCQl1dmNfdmlkZW9fY2xvY2tfdXBkYXRlKHN0cmVhbSwgJnZiLT52NGwyX2J1ZiwgYnVmKTsKIH0KIAotc3RhdGljIHZvaWQgdXZjX3dhaXRfcHJlcGFyZShzdHJ1Y3QgdmIyX3F1ZXVlICp2cSkKLXsKLQlzdHJ1Y3QgdXZjX3ZpZGVvX3F1ZXVlICpxdWV1ZSA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOwotCi0JbXV0ZXhfdW5sb2NrKCZxdWV1ZS0+bXV0ZXgpOwotfQotCi1zdGF0aWMgdm9pZCB1dmNfd2FpdF9maW5pc2goc3RydWN0IHZiMl9xdWV1ZSAqdnEpCi17Ci0Jc3RydWN0IHV2Y192aWRlb19xdWV1ZSAqcXVldWUgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsKLQotCW11dGV4X2xvY2soJnF1ZXVlLT5tdXRleCk7Ci19Ci0KIHN0YXRpYyBpbnQgdXZjX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50IGNvdW50KQogewogCXN0cnVjdCB1dmNfdmlkZW9fcXVldWUgKnF1ZXVlID0gdmIyX2dldF9kcnZfcHJpdih2cSk7CkBAIC0xOTUsOCArMTgxLDggQEAKIAkuYnVmX3ByZXBhcmUgPSB1dmNfYnVmZmVyX3ByZXBhcmUsCiAJLmJ1Zl9xdWV1ZSA9IHV2Y19idWZmZXJfcXVldWUsCiAJLmJ1Zl9maW5pc2ggPSB1dmNfYnVmZmVyX2ZpbmlzaCwKLQkud2FpdF9wcmVwYXJlID0gdXZjX3dhaXRfcHJlcGFyZSwKLQkud2FpdF9maW5pc2ggPSB1dmNfd2FpdF9maW5pc2gsCisJLndhaXRfcHJlcGFyZSA9IHZiMl9vcHNfd2FpdF9wcmVwYXJlLAorCS53YWl0X2ZpbmlzaCA9IHZiMl9vcHNfd2FpdF9maW5pc2gsCiAJLnN0YXJ0X3N0cmVhbWluZyA9IHV2Y19zdGFydF9zdHJlYW1pbmcsCiAJLnN0b3Bfc3RyZWFtaW5nID0gdXZjX3N0b3Bfc3RyZWFtaW5nLAogfTsKQEAgLTIxNCw2ICsyMDAsNyBAQAogCXF1ZXVlLT5xdWV1ZS5tZW1fb3BzID0gJnZiMl92bWFsbG9jX21lbW9wczsKIAlxdWV1ZS0+cXVldWUudGltZXN0YW1wX2ZsYWdzID0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDCiAJCXwgVjRMMl9CVUZfRkxBR19UU1RBTVBfU1JDX1NPRTsKKwlxdWV1ZS0+cXVldWUubG9jayA9ICZxdWV1ZS0+bXV0ZXg7CiAJcmV0ID0gdmIyX3F1ZXVlX2luaXQoJnF1ZXVlLT5xdWV1ZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdXNiL3V2Yy91dmNfdjRsMi5jIGIvZHJpdmVycy9tZWRpYS91c2IvdXZjL3V2Y192NGwyLmMKaW5kZXggOWM1Y2JjZi4uNDNlOTUzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS91c2IvdXZjL3V2Y192NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS91c2IvdXZjL3V2Y192NGwyLmMKQEAgLTEzLDcgKzEzLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvdXZjL3V2Y192aWRlby5jIGIvZHJpdmVycy9tZWRpYS91c2IvdXZjL3V2Y192aWRlby5jCmluZGV4IDk2MzdlOGIuLjIwY2NjOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdXNiL3V2Yy91dmNfdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi91dmMvdXZjX3ZpZGVvLmMKQEAgLTE3MzQsMTMgKzE3MzQsMTMgQEAKIAogCXV2Y192aWRlb19jbG9ja19yZXNldChzdHJlYW0pOwogCisJaWYgKCF1dmNfcXVldWVfc3RyZWFtaW5nKCZzdHJlYW0tPnF1ZXVlKSkKKwkJcmV0dXJuIDA7CisKIAlyZXQgPSB1dmNfY29tbWl0X3ZpZGVvKHN0cmVhbSwgJnN0cmVhbS0+Y3RybCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoIXV2Y19xdWV1ZV9zdHJlYW1pbmcoJnN0cmVhbS0+cXVldWUpKQotCQlyZXR1cm4gMDsKLQogCXJldHVybiB1dmNfaW5pdF92aWRlbyhzdHJlYW0sIEdGUF9OT0lPKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvdXZjL3V2Y3ZpZGVvLmggYi9kcml2ZXJzL21lZGlhL3VzYi91dmMvdXZjdmlkZW8uaAppbmRleCBmMGEwNGI1Li5jNjNlNWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi91dmMvdXZjdmlkZW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3VzYi91dmMvdXZjdmlkZW8uaApAQCAtMTA5LDYgKzEwOSw5IEBACiAjZGVmaW5lIFVWQ19HVUlEX0ZPUk1BVF9SR0JQIFwKIAl7ICdSJywgICdHJywgICdCJywgICdQJywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgXAogCSAweDgwLCAweDAwLCAweDAwLCAweGFhLCAweDAwLCAweDM4LCAweDliLCAweDcxfQorI2RlZmluZSBVVkNfR1VJRF9GT1JNQVRfQkdSMyBcCisJeyAweDdkLCAweGViLCAweDM2LCAweGU0LCAweDRmLCAweDUyLCAweGNlLCAweDExLCBcCisJIDB4OWYsIDB4NTMsIDB4MDAsIDB4MjAsIDB4YWYsIDB4MGIsIDB4YTcsIDB4NzB9CiAjZGVmaW5lIFVWQ19HVUlEX0ZPUk1BVF9NNDIwIFwKIAl7ICdNJywgICc0JywgICcyJywgICcwJywgMHgwMCwgMHgwMCwgMHgxMCwgMHgwMCwgXAogCSAweDgwLCAweDAwLCAweDAwLCAweGFhLCAweDAwLCAweDM4LCAweDliLCAweDcxfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS91c2IvenIzNjR4eC96cjM2NHh4LmMgYi9kcml2ZXJzL21lZGlhL3VzYi96cjM2NHh4L3pyMzY0eHguYwppbmRleCA1YzAwNjI3Li5jYTg1MDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3VzYi96cjM2NHh4L3pyMzY0eHguYworKysgYi9kcml2ZXJzL21lZGlhL3VzYi96cjM2NHh4L3pyMzY0eHguYwpAQCAtMTQ1NCw4ICsxNDU0LDYgQEAKIAljYW0tPnZkZXYudjRsMl9kZXYgPSAmY2FtLT52NGwyX2RldjsKIAljYW0tPnZkZXYuY3RybF9oYW5kbGVyID0gJmNhbS0+Y3RybF9oYW5kbGVyOwogCXZpZGVvX3NldF9kcnZkYXRhKCZjYW0tPnZkZXYsIGNhbSk7Ci0JaWYgKGRlYnVnKQotCQljYW0tPnZkZXYuZGVidWcgPSBWNEwyX0RFQlVHX0lPQ1RMIHwgVjRMMl9ERUJVR19JT0NUTF9BUkc7CiAKIAljYW0tPnVkZXYgPSB1ZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWRldi5jIGIvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1kZXYuYwppbmRleCA5YWE1MzBhLi44NmJiOTNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItZGV2LmMKQEAgLTQ3LDE1ICs0NywxNSBAQAogfQogc3RhdGljIERFVklDRV9BVFRSX1JPKGluZGV4KTsKIAotc3RhdGljIHNzaXplX3QgZGVidWdfc2hvdyhzdHJ1Y3QgZGV2aWNlICpjZCwKK3N0YXRpYyBzc2l6ZV90IGRldl9kZWJ1Z19zaG93KHN0cnVjdCBkZXZpY2UgKmNkLAogCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB0b192aWRlb19kZXZpY2UoY2QpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIHZkZXYtPmRlYnVnKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgdmRldi0+ZGV2X2RlYnVnKTsKIH0KIAotc3RhdGljIHNzaXplX3QgZGVidWdfc3RvcmUoc3RydWN0IGRldmljZSAqY2QsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorc3RhdGljIHNzaXplX3QgZGV2X2RlYnVnX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmNkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB0b192aWRlb19kZXZpY2UoY2QpOwpAQCAtNjYsMTAgKzY2LDEwIEBACiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKIAotCXZkZXYtPmRlYnVnID0gdmFsdWU7CisJdmRldi0+ZGV2X2RlYnVnID0gdmFsdWU7CiAJcmV0dXJuIGxlbjsKIH0KLXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhkZWJ1Zyk7CitzdGF0aWMgREVWSUNFX0FUVFJfUlcoZGV2X2RlYnVnKTsKIAogc3RhdGljIHNzaXplX3QgbmFtZV9zaG93KHN0cnVjdCBkZXZpY2UgKmNkLAogCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC04Miw3ICs4Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp2aWRlb19kZXZpY2VfYXR0cnNbXSA9IHsKIAkmZGV2X2F0dHJfbmFtZS5hdHRyLAotCSZkZXZfYXR0cl9kZWJ1Zy5hdHRyLAorCSZkZXZfYXR0cl9kZXZfZGVidWcuYXR0ciwKIAkmZGV2X2F0dHJfaW5kZXguYXR0ciwKIAlOVUxMLAogfTsKQEAgLTMwNCw3ICszMDQsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZCh2ZGV2KSkKIAkJcmV0ID0gdmRldi0+Zm9wcy0+cmVhZChmaWxwLCBidWYsIHN6LCBvZmYpOwotCWlmICh2ZGV2LT5kZWJ1ZykKKwlpZiAoKHZkZXYtPmRldl9kZWJ1ZyAmIFY0TDJfREVWX0RFQlVHX0ZPUCkgJiYKKwkgICAgKHZkZXYtPmRldl9kZWJ1ZyAmIFY0TDJfREVWX0RFQlVHX1NUUkVBTUlORykpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVhZDogJXpkICglZClcbiIsCiAJCQl2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHZkZXYpLCBzeiwgcmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtMzIwLDcgKzMyMSw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKHZkZXYpKQogCQlyZXQgPSB2ZGV2LT5mb3BzLT53cml0ZShmaWxwLCBidWYsIHN6LCBvZmYpOwotCWlmICh2ZGV2LT5kZWJ1ZykKKwlpZiAoKHZkZXYtPmRldl9kZWJ1ZyAmIFY0TDJfREVWX0RFQlVHX0ZPUCkgJiYKKwkgICAgKHZkZXYtPmRldl9kZWJ1ZyAmIFY0TDJfREVWX0RFQlVHX1NUUkVBTUlORykpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogd3JpdGU6ICV6ZCAoJWQpXG4iLAogCQkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwgc3osIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTMzNSw3ICszMzcsNyBAQAogCQlyZXR1cm4gREVGQVVMVF9QT0xMTUFTSzsKIAlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZCh2ZGV2KSkKIAkJcmVzID0gdmRldi0+Zm9wcy0+cG9sbChmaWxwLCBwb2xsKTsKLQlpZiAodmRldi0+ZGVidWcgPiAyKQorCWlmICh2ZGV2LT5kZXZfZGVidWcgJiBWNEwyX0RFVl9ERUJVR19QT0xMKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHBvbGw6ICUwOHhcbiIsCiAJCQl2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHZkZXYpLCByZXMpOwogCXJldHVybiByZXM7CkBAIC00MDQsNyArNDA2LDcgQEAKIAlpZiAoIXZpZGVvX2lzX3JlZ2lzdGVyZWQodmRldikpCiAJCXJldHVybiAtRU5PREVWOwogCXJldCA9IHZkZXYtPmZvcHMtPmdldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzKTsKLQlpZiAodmRldi0+ZGVidWcpCisJaWYgKHZkZXYtPmRldl9kZWJ1ZyAmIFY0TDJfREVWX0RFQlVHX0ZPUCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBnZXRfdW5tYXBwZWRfYXJlYSAoJWQpXG4iLAogCQkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwgcmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtNDIwLDcgKzQyMiw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCWlmICh2aWRlb19pc19yZWdpc3RlcmVkKHZkZXYpKQogCQlyZXQgPSB2ZGV2LT5mb3BzLT5tbWFwKGZpbHAsIHZtKTsKLQlpZiAodmRldi0+ZGVidWcpCisJaWYgKHZkZXYtPmRldl9kZWJ1ZyAmIFY0TDJfREVWX0RFQlVHX0ZPUCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBtbWFwICglZClcbiIsCiAJCQl2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKHZkZXYpLCByZXQpOwogCXJldHVybiByZXQ7CkBAIC00NTAsNyArNDUyLDcgQEAKIAkJCXJldCA9IC1FTk9ERVY7CiAJfQogCi0JaWYgKHZkZXYtPmRlYnVnKQorCWlmICh2ZGV2LT5kZXZfZGVidWcgJiBWNEwyX0RFVl9ERUJVR19GT1ApCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogb3BlbiAoJWQpXG4iLAogCQkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSwgcmV0KTsKIAkvKiBkZWNyZWFzZSB0aGUgcmVmY291bnQgaW4gY2FzZSBvZiBhbiBlcnJvciAqLwpAQCAtNDY3LDcgKzQ2OSw3IEBACiAKIAlpZiAodmRldi0+Zm9wcy0+cmVsZWFzZSkKIAkJcmV0ID0gdmRldi0+Zm9wcy0+cmVsZWFzZShmaWxwKTsKLQlpZiAodmRldi0+ZGVidWcpCisJaWYgKHZkZXYtPmRldl9kZWJ1ZyAmIFY0TDJfREVWX0RFQlVHX0ZPUCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWxlYXNlXG4iLAogCQkJdmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZGV2KSk7CiAKQEAgLTEwMzMsMTAgKzEwMzUsMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJEZXZpY2UgcmVnaXN0cmFyIGZvciBWaWRlbzRMaW51eCBkcml2ZXJzIHYyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVNfQ0hBUkRFVl9NQUpPUihWSURFT19NQUpPUik7Ci0KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaW9jdGwuYyBiL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItaW9jdGwuYwppbmRleCBmYWFjMmY0Li5iMDg0MDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1pb2N0bC5jCkBAIC0yMzM5LDcgKzIzMzksNyBAQAogCWNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX2luZm8gKmluZm87CiAJdm9pZCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHY0bDJfZmggKnZmaCA9IE5VTEw7Ci0JaW50IGRlYnVnID0gdmZkLT5kZWJ1ZzsKKwlpbnQgZGV2X2RlYnVnID0gdmZkLT5kZXZfZGVidWc7CiAJbG9uZyByZXQgPSAtRU5PVFRZOwogCiAJaWYgKG9wcyA9PSBOVUxMKSB7CkBAIC0yMzg4LDExICsyMzg4LDE1IEBACiAJfQogCiBkb25lOgotCWlmIChkZWJ1ZykgeworCWlmIChkZXZfZGVidWcgJiAoVjRMMl9ERVZfREVCVUdfSU9DVEwgfCBWNEwyX0RFVl9ERUJVR19JT0NUTF9BUkcpKSB7CisJCWlmICghKGRldl9kZWJ1ZyAmIFY0TDJfREVWX0RFQlVHX1NUUkVBTUlORykgJiYKKwkJICAgIChjbWQgPT0gVklESU9DX1FCVUYgfHwgY21kID09IFZJRElPQ19EUUJVRikpCisJCQlyZXR1cm4gcmV0OworCiAJCXY0bF9wcmludGtfaW9jdGwodmlkZW9fZGV2aWNlX25vZGVfbmFtZSh2ZmQpLCBjbWQpOwogCQlpZiAocmV0IDwgMCkKIAkJCXByX2NvbnQoIjogZXJyb3IgJWxkIiwgcmV0KTsKLQkJaWYgKGRlYnVnID09IFY0TDJfREVCVUdfSU9DVEwpCisJCWlmICghKGRldl9kZWJ1ZyAmIFY0TDJfREVWX0RFQlVHX0lPQ1RMX0FSRykpCiAJCQlwcl9jb250KCJcbiIpOwogCQllbHNlIGlmIChfSU9DX0RJUihjbWQpID09IF9JT0NfTk9ORSkKIAkJCWluZm8tPmRlYnVnKGFyZywgd3JpdGVfb25seSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLXN1YmRldi5jIGIvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdjRsMi1zdWJkZXYuYwppbmRleCA1NDM2MzFjLi4xOWEwMzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92NGwyLXN1YmRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3Y0bDItc3ViZGV2LmMKQEAgLTI4MywxMCArMjgzLDYgQEAKIAkJaWYgKHJ2YWwpCiAJCQlyZXR1cm4gcnZhbDsKIAotCQlydmFsID0gdjRsMl9zdWJkZXZfY2FsbChzZCwgcGFkLCBnZXRfY3JvcCwgc3ViZGV2X2ZoLCBjcm9wKTsKLQkJaWYgKHJ2YWwgIT0gLUVOT0lPQ1RMQ01EKQotCQkJcmV0dXJuIHJ2YWw7Ci0KIAkJbWVtc2V0KCZzZWwsIDAsIHNpemVvZihzZWwpKTsKIAkJc2VsLndoaWNoID0gY3JvcC0+d2hpY2g7CiAJCXNlbC5wYWQgPSBjcm9wLT5wYWQ7CkBAIC0zMDgsMTAgKzMwNCw2IEBACiAJCWlmIChydmFsKQogCQkJcmV0dXJuIHJ2YWw7CiAKLQkJcnZhbCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIHBhZCwgc2V0X2Nyb3AsIHN1YmRldl9maCwgY3JvcCk7Ci0JCWlmIChydmFsICE9IC1FTk9JT0NUTENNRCkKLQkJCXJldHVybiBydmFsOwotCiAJCW1lbXNldCgmc2VsLCAwLCBzaXplb2Yoc2VsKSk7CiAJCXNlbC53aGljaCA9IGNyb3AtPndoaWNoOwogCQlzZWwucGFkID0gY3JvcC0+cGFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92NGwyLWNvcmUvdmlkZW9idWYtZG1hLXNnLmMgYi9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1Zi1kbWEtc2cuYwppbmRleCAzZmYxNWYxLi5mNjY5Y2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1Zi1kbWEtc2cuYworKysgYi9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1Zi1kbWEtc2cuYwpAQCAtMTQ1LDEyICsxNDUsMTEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZpZGVvYnVmX3RvX2RtYSk7CiAKLXZvaWQgdmlkZW9idWZfZG1hX2luaXQoc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKQorc3RhdGljIHZvaWQgdmlkZW9idWZfZG1hX2luaXQoc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKQogewogCW1lbXNldChkbWEsIDAsIHNpemVvZigqZG1hKSk7CiAJZG1hLT5tYWdpYyA9IE1BR0lDX0RNQUJVRjsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHZpZGVvYnVmX2RtYV9pbml0KTsKIAogc3RhdGljIGludCB2aWRlb2J1Zl9kbWFfaW5pdF91c2VyX2xvY2tlZChzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEsCiAJCQlpbnQgZGlyZWN0aW9uLCB1bnNpZ25lZCBsb25nIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKQEAgLTE5NSw3ICsxOTQsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgdmlkZW9idWZfZG1hX2luaXRfdXNlcihzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEsIGludCBkaXJlY3Rpb24sCitzdGF0aWMgaW50IHZpZGVvYnVmX2RtYV9pbml0X3VzZXIoc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hLCBpbnQgZGlyZWN0aW9uLAogCQkJICAgdW5zaWduZWQgbG9uZyBkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJaW50IHJldDsKQEAgLTIwNiw5ICsyMDUsOCBAQAogCiAJcmV0dXJuIHJldDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHZpZGVvYnVmX2RtYV9pbml0X3VzZXIpOwogCi1pbnQgdmlkZW9idWZfZG1hX2luaXRfa2VybmVsKHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSwgaW50IGRpcmVjdGlvbiwKK3N0YXRpYyBpbnQgdmlkZW9idWZfZG1hX2luaXRfa2VybmVsKHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSwgaW50IGRpcmVjdGlvbiwKIAkJCSAgICAgaW50IG5yX3BhZ2VzKQogewogCWludCBpOwpAQCAtMjY3LDkgKzI2NSw4IEBACiAJcmV0dXJuIC1FTk9NRU07CiAKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHZpZGVvYnVmX2RtYV9pbml0X2tlcm5lbCk7CiAKLWludCB2aWRlb2J1Zl9kbWFfaW5pdF9vdmVybGF5KHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSwgaW50IGRpcmVjdGlvbiwKK3N0YXRpYyBpbnQgdmlkZW9idWZfZG1hX2luaXRfb3ZlcmxheShzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEsIGludCBkaXJlY3Rpb24sCiAJCQkgICAgICBkbWFfYWRkcl90IGFkZHIsIGludCBucl9wYWdlcykKIHsKIAlkcHJpbnRrKDEsICJpbml0IG92ZXJsYXkgWyVkIHBhZ2VzIEAgYnVzIDB4JWx4XVxuIiwKQEAgLTI4NCw5ICsyODEsOCBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl9kbWFfaW5pdF9vdmVybGF5KTsKIAotaW50IHZpZGVvYnVmX2RtYV9tYXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpCitzdGF0aWMgaW50IHZpZGVvYnVmX2RtYV9tYXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpCiB7CiAJTUFHSUNfQ0hFQ0soZG1hLT5tYWdpYywgTUFHSUNfRE1BQlVGKTsKIAlCVUdfT04oMCA9PSBkbWEtPm5yX3BhZ2VzKTsKQEAgLTMyOCw3ICszMjQsNiBAQAogCiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTCh2aWRlb2J1Zl9kbWFfbWFwKTsKIAogaW50IHZpZGVvYnVmX2RtYV91bm1hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3ZpZGVvYnVmMi12bWFsbG9jLmMgYi9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItdm1hbGxvYy5jCmluZGV4IGZiYTk0NGUuLmJjZGU4ODU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3Y0bDItY29yZS92aWRlb2J1ZjItdm1hbGxvYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdjRsMi1jb3JlL3ZpZGVvYnVmMi12bWFsbG9jLmMKQEAgLTk1LDcgKzk1LDcgQEAKIAkJaWYgKHZiMl9nZXRfY29udGlnX3VzZXJwdHIodmFkZHIsIHNpemUsICZ2bWEsICZwaHlzcCkpCiAJCQlnb3RvIGZhaWxfcGFnZXNfYXJyYXlfYWxsb2M7CiAJCWJ1Zi0+dm1hID0gdm1hOwotCQlidWYtPnZhZGRyID0gaW9yZW1hcF9ub2NhY2hlKHBoeXNwLCBzaXplKTsKKwkJYnVmLT52YWRkciA9IChfX2ZvcmNlIHZvaWQgKilpb3JlbWFwX25vY2FjaGUocGh5c3AsIHNpemUpOwogCQlpZiAoIWJ1Zi0+dmFkZHIpCiAJCQlnb3RvIGZhaWxfcGFnZXNfYXJyYXlfYWxsb2M7CiAJfSBlbHNlIHsKQEAgLTE1NSw3ICsxNTUsNyBAQAogCQlrZnJlZShidWYtPnBhZ2VzKTsKIAl9IGVsc2UgewogCQl2YjJfcHV0X3ZtYShidWYtPnZtYSk7Ci0JCWlvdW5tYXAoYnVmLT52YWRkcik7CisJCWlvdW5tYXAoKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopYnVmLT52YWRkcik7CiAJfQogCWtmcmVlKGJ1Zik7CiB9CkBAIC0yMTEsNiArMjExLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19IQVNfRE1BCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICBETUFCVUYgb3BzIGZvciBleHBvcnRlcnMgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zODAsNiArMzgxLDggQEAKIAogCXJldHVybiBkYnVmOwogfQorI2VuZGlmIC8qIENPTkZJR19IQVNfRE1BICovCisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qICAgICAgIGNhbGxiYWNrcyBmb3IgRE1BQlVGIGJ1ZmZlcnMgICAgICAgICovCkBAIC00MzcsNyArNDQwLDkgQEAKIAkucHV0CQk9IHZiMl92bWFsbG9jX3B1dCwKIAkuZ2V0X3VzZXJwdHIJPSB2YjJfdm1hbGxvY19nZXRfdXNlcnB0ciwKIAkucHV0X3VzZXJwdHIJPSB2YjJfdm1hbGxvY19wdXRfdXNlcnB0ciwKKyNpZmRlZiBDT05GSUdfSEFTX0RNQQogCS5nZXRfZG1hYnVmCT0gdmIyX3ZtYWxsb2NfZ2V0X2RtYWJ1ZiwKKyNlbmRpZgogCS5tYXBfZG1hYnVmCT0gdmIyX3ZtYWxsb2NfbWFwX2RtYWJ1ZiwKIAkudW5tYXBfZG1hYnVmCT0gdmIyX3ZtYWxsb2NfdW5tYXBfZG1hYnVmLAogCS5hdHRhY2hfZG1hYnVmCT0gdmIyX3ZtYWxsb2NfYXR0YWNoX2RtYWJ1ZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtb3J5L2ZzbC1jb3JlbmV0LWNmLmMgYi9kcml2ZXJzL21lbW9yeS9mc2wtY29yZW5ldC1jZi5jCmluZGV4IGZjN2FiNWEuLmQ3MDhkZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVtb3J5L2ZzbC1jb3JlbmV0LWNmLmMKKysrIGIvZHJpdmVycy9tZW1vcnkvZnNsLWNvcmVuZXQtY2YuYwpAQCAtMjcsMTggKzI3LDI5IEBACiBzdHJ1Y3QgY2NmX2luZm8gewogCWVudW0gY2NmX3ZlcnNpb24gdmVyc2lvbjsKIAlpbnQgZXJyX3JlZ19vZmZzOworCWJvb2wgaGFzX2JycjsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2NmX2luZm8gY2NmMV9pbmZvID0gewogCS52ZXJzaW9uID0gQ0NGMSwKIAkuZXJyX3JlZ19vZmZzID0gMHhhMDAsCisJLmhhc19icnIgPSBmYWxzZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2NmX2luZm8gY2NmMl9pbmZvID0gewogCS52ZXJzaW9uID0gQ0NGMiwKIAkuZXJyX3JlZ19vZmZzID0gMHhlNDAsCisJLmhhc19icnIgPSB0cnVlLAogfTsKIAorLyoKKyAqIFRoaXMgcmVnaXN0ZXIgaXMgcHJlc2VudCBidXQgbm90IGRvY3VtZW50ZWQsIHdpdGggZGlmZmVyZW50IHZhbHVlcyBmb3IKKyAqIElQX0lELCBvbiBvdGhlciBjaGlwcyB3aXRoIGZzbCxjb3JlbmV0Mi1jZiBzdWNoIGFzIHQ0MjQwIGFuZCBiNDg2MC4KKyAqLworI2RlZmluZSBDQ0ZfQlJSCQkJMHhiZjgKKyNkZWZpbmUgQ0NGX0JSUl9JUElECQkweGZmZmYwMDAwCisjZGVmaW5lIENDRl9CUlJfSVBJRF9UMTA0MAkweDA5MzEwMDAwCisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGNjZl9tYXRjaGVzW10gPSB7CiAJewogCQkuY29tcGF0aWJsZSA9ICJmc2wsY29yZW5ldDEtY2YiLApAQCAtNjYsNiArNzcsOCBAQAogLyogTEFFL0NWIGFsc28gdmFsaWQgZm9yIGVycmRpcyBhbmQgZXJyaW50ZW4gKi8KICNkZWZpbmUgRVJSREVUX0xBRQkJKDEgPDwgMCkgIC8qIExvY2FsIEFjY2VzcyBFcnJvciAqLwogI2RlZmluZSBFUlJERVRfQ1YJCSgxIDw8IDEpICAvKiBDb2hlcmVuY3kgVmlvbGF0aW9uICovCisjZGVmaW5lIEVSUkRFVF9VVElECQkoMSA8PCAyKSAgLyogVW5hdmFpbGFibGUgVGFyZ2V0IElEICh0MTA0MCkgKi8KKyNkZWZpbmUgRVJSREVUX01DU1QJCSgxIDw8IDMpICAvKiBNdWx0aWNhc3QgU3Rhc2ggKHQxMDQwKSAqLwogI2RlZmluZSBFUlJERVRfQ1RZUEVfU0hJRlQJMjYJICAvKiBDYXB0dXJlIFR5cGUgKGNjZjIgb25seSkgKi8KICNkZWZpbmUgRVJSREVUX0NUWVBFX01BU0sJKDB4MWYgPDwgRVJSREVUX0NUWVBFX1NISUZUKQogI2RlZmluZSBFUlJERVRfQ0FQCQkoMSA8PCAzMSkgLyogQ2FwdHVyZSBWYWxpZCAoY2NmMiBvbmx5KSAqLwpAQCAtODQsNiArOTcsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAl2b2lkIF9faW9tZW0gKnJlZ3M7CiAJc3RydWN0IGNjZl9lcnJfcmVncyBfX2lvbWVtICplcnJfcmVnczsKKwlib29sIHQxMDQwOwogfTsKIAogc3RhdGljIGlycXJldHVybl90IGNjZl9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQpAQCAtMTQyLDYgKzE1NiwxMiBAQAogCWlmIChlcnJkZXQgJiBFUlJERVRfQ1YpCiAJCWRldl9jcml0KGNjZi0+ZGV2LCAiQ29oZXJlbmN5IFZpb2xhdGlvblxuIik7CiAKKwlpZiAoZXJyZGV0ICYgRVJSREVUX1VUSUQpCisJCWRldl9jcml0KGNjZi0+ZGV2LCAiVW5hdmFpbGFibGUgVGFyZ2V0IElEXG4iKTsKKworCWlmIChlcnJkZXQgJiBFUlJERVRfTUNTVCkKKwkJZGV2X2NyaXQoY2NmLT5kZXYsICJNdWx0aWNhc3QgU3Rhc2hcbiIpOworCiAJaWYgKGNhcF92YWxpZCkgewogCQlkZXZfY3JpdChjY2YtPmRldiwgImFkZHJlc3MgMHglMDlsbHgsIHNyYyBpZCAweCV4XG4iLAogCQkJIGFkZHIsIHNyY19pZCk7CkBAIC0xNTcsNiArMTc3LDcgQEAKIAlzdHJ1Y3QgY2NmX3ByaXZhdGUgKmNjZjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnI7CiAJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisJdTMyIGVycmludGVuOwogCWludCByZXQsIGlycTsKIAogCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKGNjZl9tYXRjaGVzLCAmcGRldi0+ZGV2KTsKQEAgLTE4Myw2ICsyMDQsMTMgQEAKIAljY2YtPmluZm8gPSBtYXRjaC0+ZGF0YTsKIAljY2YtPmVycl9yZWdzID0gY2NmLT5yZWdzICsgY2NmLT5pbmZvLT5lcnJfcmVnX29mZnM7CiAKKwlpZiAoY2NmLT5pbmZvLT5oYXNfYnJyKSB7CisJCXUzMiBicnIgPSBpb3JlYWQzMmJlKGNjZi0+cmVncyArIENDRl9CUlIpOworCisJCWlmICgoYnJyICYgQ0NGX0JSUl9JUElEKSA9PSBDQ0ZfQlJSX0lQSURfVDEwNDApCisJCQljY2YtPnQxMDQwID0gdHJ1ZTsKKwl9CisKIAlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgY2NmKTsKIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CkBAIC0xOTcsMTUgKzIyNSwxOSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAorCWVycmludGVuID0gRVJSREVUX0xBRSB8IEVSUkRFVF9DVjsKKwlpZiAoY2NmLT50MTA0MCkKKwkJZXJyaW50ZW4gfD0gRVJSREVUX1VUSUQgfCBFUlJERVRfTUNTVDsKKwogCXN3aXRjaCAoY2NmLT5pbmZvLT52ZXJzaW9uKSB7CiAJY2FzZSBDQ0YxOgogCQkvKiBPbiBDQ0YxIHRoaXMgcmVnaXN0ZXIgZW5hYmxlcyByYXRoZXIgdGhhbiBkaXNhYmxlcy4gKi8KLQkJaW93cml0ZTMyYmUoRVJSREVUX0xBRSB8IEVSUkRFVF9DViwgJmNjZi0+ZXJyX3JlZ3MtPmVycmRpcyk7CisJCWlvd3JpdGUzMmJlKGVycmludGVuLCAmY2NmLT5lcnJfcmVncy0+ZXJyZGlzKTsKIAkJYnJlYWs7CiAKIAljYXNlIENDRjI6CiAJCWlvd3JpdGUzMmJlKDAsICZjY2YtPmVycl9yZWdzLT5lcnJkaXMpOwotCQlpb3dyaXRlMzJiZShFUlJERVRfTEFFIHwgRVJSREVUX0NWLCAmY2NmLT5lcnJfcmVncy0+ZXJyaW50ZW4pOworCQlpb3dyaXRlMzJiZShlcnJpbnRlbiwgJmNjZi0+ZXJyX3JlZ3MtPmVycmludGVuKTsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvY3hsL01ha2VmaWxlIGIvZHJpdmVycy9taXNjL2N4bC9NYWtlZmlsZQppbmRleCAxNjVlOThmLi5lZGI0OTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvY3hsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWlzYy9jeGwvTWFrZWZpbGUKQEAgLTEsMyArMSw2IEBACi1jeGwteQkJCQkrPSBtYWluLm8gZmlsZS5vIGlycS5vIGZhdWx0Lm8gbmF0aXZlLm8gY29udGV4dC5vIHN5c2ZzLm8gZGVidWdmcy5vIHBjaS5vCitjeGwteQkJCQkrPSBtYWluLm8gZmlsZS5vIGlycS5vIGZhdWx0Lm8gbmF0aXZlLm8gY29udGV4dC5vIHN5c2ZzLm8gZGVidWdmcy5vIHBjaS5vIHRyYWNlLm8KIG9iai0kKENPTkZJR19DWEwpCQkrPSBjeGwubwogb2JqLSQoQ09ORklHX0NYTF9CQVNFKQkJKz0gYmFzZS5vCisKKyMgRm9yIHRyYWNlcG9pbnRzIHRvIGluY2x1ZGUgb3VyIHRyYWNlLmggZnJvbSB0cmFjZXBvaW50IGluZnJhc3RydWN0dXJlOgorQ0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9jeGwvY3hsLmggYi9kcml2ZXJzL21pc2MvY3hsL2N4bC5oCmluZGV4IDI4MDc4ZjguLmExY2VlNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9jeGwvY3hsLmgKKysrIGIvZHJpdmVycy9taXNjL2N4bC9jeGwuaApAQCAtMjg3LDYgKzI4NywxMyBAQAogI2RlZmluZSBDWExfUEVfU09GVFdBUkVfU1RBVEVfUyAoMXVsIDw8ICgzMSAtIDMwKSkgLyogU3VzcGVuZCAqLwogI2RlZmluZSBDWExfUEVfU09GVFdBUkVfU1RBVEVfVCAoMXVsIDw8ICgzMSAtIDMxKSkgLyogVGVybWluYXRlICovCiAKKy8qKioqKiogQ1hMX1BTTF9SWENUTF9BbiAoSW1wbGVtZW50YXRpb24gU3BlY2lmaWMpICoqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb250cm9scyBBRlUgSGFuZyBQdWxzZSwgd2hpY2ggc2V0cyB0aGUgdGltZW91dCBmb3IgdGhlIEFGVSB0byByZXNwb25kIHRvCisgKiB0aGUgUFNMIGZvciBhbnkgcmVzcG9uc2UgKGV4Y2VwdCBNTUlPKS4gVGltZW91dHMgd2lsbCBvY2N1ciBiZXR3ZWVuIDF4IHRvIDJ4CisgKiBvZiB0aGUgaGFuZyBwdWxzZSBmcmVxdWVuY3kuCisgKi8KKyNkZWZpbmUgQ1hMX1BTTF9SWENUTF9BRlVIUF80UyAgICAgIDB4NzAwMDAwMDAwMDAwMDAwMFVMTAorCiAvKiBTUEEtPnN3X2NvbW1hbmRfc3RhdHVzICovCiAjZGVmaW5lIENYTF9TUEFfU1dfQ01EX01BU0sgICAgICAgICAweGZmZmYwMDAwMDAwMDAwMDBVTEwKICNkZWZpbmUgQ1hMX1NQQV9TV19DTURfVEVSTUlOQVRFICAgIDB4MDAwMTAwMDAwMDAwMDAwMFVMTApAQCAtMzc1LDYgKzM4MiwxMCBAQAogCWludCBzbGljZTsKIAlpbnQgbW9kZXNfc3VwcG9ydGVkOwogCWludCBjdXJyZW50X21vZGU7CisJaW50IGNyc19udW07CisJdTY0IGNyc19sZW47CisJdTY0IGNyc19vZmZzZXQ7CisJc3RydWN0IGxpc3RfaGVhZCBjcnM7CiAJZW51bSBwcmVmYXVsdF9tb2RlcyBwcmVmYXVsdF9tb2RlOwogCWJvb2wgcHNhOwogCWJvb2wgcHBfcHNhOwpAQCAtNDgxLDYgKzQ5Miw4IEBACiBpbnQgY3hsX2FsbG9jX2lycV9yYW5nZXMoc3RydWN0IGN4bF9pcnFfcmFuZ2VzICppcnFzLCBzdHJ1Y3QgY3hsICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgbnVtKTsKIHZvaWQgY3hsX3JlbGVhc2VfaXJxX3JhbmdlcyhzdHJ1Y3QgY3hsX2lycV9yYW5nZXMgKmlycXMsIHN0cnVjdCBjeGwgKmFkYXB0ZXIpOwogaW50IGN4bF9zZXR1cF9pcnEoc3RydWN0IGN4bCAqYWRhcHRlciwgdW5zaWduZWQgaW50IGh3aXJxLCB1bnNpZ25lZCBpbnQgdmlycSk7CitpbnQgY3hsX3VwZGF0ZV9pbWFnZV9jb250cm9sKHN0cnVjdCBjeGwgKmFkYXB0ZXIpOworaW50IGN4bF9yZXNldChzdHJ1Y3QgY3hsICphZGFwdGVyKTsKIAogLyogY29tbW9uID09IHBoeXAgKyBwb3dlcm52ICovCiBzdHJ1Y3QgY3hsX3Byb2Nlc3NfZWxlbWVudF9jb21tb24gewpAQCAtNTQyLDYgKzU1NSwxNSBAQAogI2RlZmluZSBjeGxfcDJuX3JlYWQoYWZ1LCByZWcpIFwKIAlpbl9iZTY0KF9jeGxfcDJuX2FkZHIoYWZ1LCByZWcpKQogCisKKyNkZWZpbmUgY3hsX2FmdV9jcl9yZWFkNjQoYWZ1LCBjciwgb2ZmKSBcCisJaW5fbGU2NCgoYWZ1KS0+YWZ1X2Rlc2NfbW1pbyArIChhZnUpLT5jcnNfb2Zmc2V0ICsgKChjcikgKiAoYWZ1KS0+Y3JzX2xlbikgKyAob2ZmKSkKKyNkZWZpbmUgY3hsX2FmdV9jcl9yZWFkMzIoYWZ1LCBjciwgb2ZmKSBcCisJaW5fbGUzMigoYWZ1KS0+YWZ1X2Rlc2NfbW1pbyArIChhZnUpLT5jcnNfb2Zmc2V0ICsgKChjcikgKiAoYWZ1KS0+Y3JzX2xlbikgKyAob2ZmKSkKK3UxNiBjeGxfYWZ1X2NyX3JlYWQxNihzdHJ1Y3QgY3hsX2FmdSAqYWZ1LCBpbnQgY3IsIHU2NCBvZmYpOwordTggY3hsX2FmdV9jcl9yZWFkOChzdHJ1Y3QgY3hsX2FmdSAqYWZ1LCBpbnQgY3IsIHU2NCBvZmYpOworCisKIHN0cnVjdCBjeGxfY2FsbHMgewogCXZvaWQgKCpjeGxfc2xiaWEpKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9jeGwvZmF1bHQuYyBiL2RyaXZlcnMvbWlzYy9jeGwvZmF1bHQuYwppbmRleCBmODY4NGJjLi41Mjg2YjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvY3hsL2ZhdWx0LmMKKysrIGIvZHJpdmVycy9taXNjL2N4bC9mYXVsdC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8YXNtL21tdS5oPgogCiAjaW5jbHVkZSAiY3hsLmgiCisjaW5jbHVkZSAidHJhY2UuaCIKIAogc3RhdGljIGJvb2wgc3N0ZV9tYXRjaGVzKHN0cnVjdCBjeGxfc3N0ZSAqc3N0ZSwgc3RydWN0IGNvcHJvX3NsYiAqc2xiKQogewpAQCAtNzUsNiArNzYsNyBAQAogCiAJcHJfZGV2ZWwoIkNYTCBQb3B1bGF0aW5nIFNTVFslbGldOiAlI2xseCAlI2xseFxuIiwKIAkJCXNzdGUgLSBjdHgtPnNzdHAsIHNsYi0+dnNpZCwgc2xiLT5lc2lkKTsKKwl0cmFjZV9jeGxfc3RlX3dyaXRlKGN0eCwgc3N0ZSAtIGN0eC0+c3N0cCwgc2xiLT5lc2lkLCBzbGItPnZzaWQpOwogCiAJc3N0ZS0+dnNpZF9kYXRhID0gY3B1X3RvX2JlNjQoc2xiLT52c2lkKTsKIAlzc3RlLT5lc2lkX2RhdGEgPSBjcHVfdG9fYmU2NChzbGItPmVzaWQpOwpAQCAtMTE2LDYgKzExOCw3IEBACiAJaW50IHJjOwogCiAJcHJfZGV2ZWwoIkNYTCBpbnRlcnJ1cHQ6IFNlZ21lbnQgZmF1bHQgcGU6ICVpIGVhOiAlI2xseFxuIiwgY3R4LT5wZSwgZWEpOworCXRyYWNlX2N4bF9zdGVfbWlzcyhjdHgsIGVhKTsKIAogCWlmICgocmMgPSBjeGxfZmF1bHRfc2VnbWVudChjdHgsIG1tLCBlYSkpKQogCQljeGxfYWNrX2FlKGN0eCk7CkBAIC0xMzUsNiArMTM4LDggQEAKIAlpbnQgcmVzdWx0OwogCXVuc2lnbmVkIGxvbmcgYWNjZXNzLCBmbGFncywgaW52X2ZsYWdzID0gMDsKIAorCXRyYWNlX2N4bF9wdGVfbWlzcyhjdHgsIGRzaXNyLCBkYXIpOworCiAJaWYgKChyZXN1bHQgPSBjb3Byb19oYW5kbGVfbW1fZmF1bHQobW0sIGRhciwgZHNpc3IsICZmbHQpKSkgewogCQlwcl9kZXZlbCgiY29wcm9faGFuZGxlX21tX2ZhdWx0IGZhaWxlZDogJSN4XG4iLCByZXN1bHQpOwogCQlyZXR1cm4gY3hsX2Fja19hZShjdHgpOwpAQCAtMTgwLDYgKzE4NSwxMiBAQAogCQlyZXR1cm47CiAJfQogCisJLyogRWFybHkgcmV0dXJuIGlmIHRoZSBjb250ZXh0IGlzIGJlaW5nIC8gaGFzIGJlZW4gZGV0YWNoZWQgKi8KKwlpZiAoY3R4LT5zdGF0dXMgPT0gQ0xPU0VEKSB7CisJCWN4bF9hY2tfYWUoY3R4KTsKKwkJcmV0dXJuOworCX0KKwogCXByX2RldmVsKCJDWEwgQk9UVE9NIEhBTEYgaGFuZGxpbmcgZmF1bHQgZm9yIGFmdSBwZTogJWkuICIKIAkJIkRTSVNSOiAlI2xseCBEQVI6ICUjbGx4XG4iLCBjdHgtPnBlLCBkc2lzciwgZGFyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2N4bC9maWxlLmMgYi9kcml2ZXJzL21pc2MvY3hsL2ZpbGUuYwppbmRleCBiMTVkODExLi4yMzY0YmNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvY3hsL2ZpbGUuYworKysgYi9kcml2ZXJzL21pc2MvY3hsL2ZpbGUuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9jb3Byby5oPgogCiAjaW5jbHVkZSAiY3hsLmgiCisjaW5jbHVkZSAidHJhY2UuaCIKIAogI2RlZmluZSBDWExfTlVNX01JTk9SUyAyNTYgLyogVG90YWwgdG8gcmVzZXJ2ZSAqLwogI2RlZmluZSBDWExfREVWX01JTk9SUyAxMyAgIC8qIDEgY29udHJvbCArIDQgQUZVcyAqIDMgKGRlZGljYXRlZC9tYXN0ZXIvc2hhcmVkKSAqLwpAQCAtMTg2LDkgKzE4NywxMyBAQAogCSAqLwogCWN0eC0+cGlkID0gZ2V0X3BpZChnZXRfdGFza19waWQoY3VycmVudCwgUElEVFlQRV9QSUQpKTsKIAorCXRyYWNlX2N4bF9hdHRhY2goY3R4LCB3b3JrLndvcmtfZWxlbWVudF9kZXNjcmlwdG9yLCB3b3JrLm51bV9pbnRlcnJ1cHRzLCBhbXIpOworCiAJaWYgKChyYyA9IGN4bF9hdHRhY2hfcHJvY2VzcyhjdHgsIGZhbHNlLCB3b3JrLndvcmtfZWxlbWVudF9kZXNjcmlwdG9yLAotCQkJCSAgICAgYW1yKSkpCisJCQkJICAgICBhbXIpKSkgeworCQlhZnVfcmVsZWFzZV9pcnFzKGN0eCk7CiAJCWdvdG8gb3V0OworCX0KIAogCWN0eC0+c3RhdHVzID0gU1RBUlRFRDsKIAlyYyA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvY3hsL2lycS5jIGIvZHJpdmVycy9taXNjL2N4bC9pcnEuYwppbmRleCBjMjk0OTI1Li5jODkyOWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvY3hsL2lycS5jCisrKyBiL2RyaXZlcnMvbWlzYy9jeGwvaXJxLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxtaXNjL2N4bC5oPgogCiAjaW5jbHVkZSAiY3hsLmgiCisjaW5jbHVkZSAidHJhY2UuaCIKIAogLyogWFhYOiBUaGlzIGlzIGltcGxlbWVudGF0aW9uIHNwZWNpZmljICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgaGFuZGxlX3BzbF9zbGljZV9lcnJvcihzdHJ1Y3QgY3hsX2NvbnRleHQgKmN0eCwgdTY0IGRzaXNyLCB1NjQgZXJyc3RhdCkKQEAgLTEwMCw2ICsxMDEsOCBAQAogCWRzaXNyID0gaXJxX2luZm8tPmRzaXNyOwogCWRhciA9IGlycV9pbmZvLT5kYXI7CiAKKwl0cmFjZV9jeGxfcHNsX2lycShjdHgsIGlycSwgZHNpc3IsIGRhcik7CisKIAlwcl9kZXZlbCgiQ1hMIGludGVycnVwdCAlaSBmb3IgYWZ1IHBlOiAlaSBEU0lTUjogJSNsbHggREFSOiAlI2xseFxuIiwgaXJxLCBjdHgtPnBlLCBkc2lzciwgZGFyKTsKIAogCWlmIChkc2lzciAmIENYTF9QU0xfRFNJU1JfQW5fRFMpIHsKQEAgLTE2Nyw2ICsxNzAsNyBAQAogCQl9CiAKIAkJY3hsX2Fja19pcnEoY3R4LCBDWExfUFNMX1RGQ19Bbl9BLCAwKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIAlpZiAoZHNpc3IgJiBDWExfUFNMX0RTSVNSX0FuX09DKQogCQlwcl9kZXZlbCgiQ1hMIGludGVycnVwdDogT1MgQ29udGV4dCBXYXJuaW5nXG4iKTsKQEAgLTIzNyw2ICsyNDEsNyBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCisJdHJhY2VfY3hsX2FmdV9pcnEoY3R4LCBhZnVfaXJxLCBpcnEsIGh3aXJxKTsKIAlwcl9kZXZlbCgiUmVjZWl2ZWQgQUZVIGludGVycnVwdCAlaSBmb3IgcGU6ICVpICh2aXJxICVpIGh3aXJxICVseClcbiIsCiAJICAgICAgIGFmdV9pcnEsIGN0eC0+cGUsIGlycSwgaHdpcnEpOwogCkBAIC00MzYsNyArNDQxLDcgQEAKIAkgKi8KIAlJTklUX0xJU1RfSEVBRCgmY3R4LT5pcnFfbmFtZXMpOwogCWZvciAociA9IDE7IHIgPCBDWExfSVJRX1JBTkdFUzsgcisrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBjdHgtPmlycXMucmFuZ2Vbcl07IGh3aXJxKyssIGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgY3R4LT5pcnFzLnJhbmdlW3JdOyBpKyspIHsKIAkJCWlycV9uYW1lID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGN4bF9pcnFfbmFtZSksCiAJCQkJCSAgIEdGUF9LRVJORUwpOwogCQkJaWYgKCFpcnFfbmFtZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9jeGwvbWFpbi5jIGIvZHJpdmVycy9taXNjL2N4bC9tYWluLmMKaW5kZXggNGNkZTliNi4uOGNjZGRjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2N4bC9tYWluLmMKKysrIGIvZHJpdmVycy9taXNjL2N4bC9tYWluLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxtaXNjL2N4bC5oPgogCiAjaW5jbHVkZSAiY3hsLmgiCisjaW5jbHVkZSAidHJhY2UuaCIKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhhZGFwdGVyX2lkcl9sb2NrKTsKIHN0YXRpYyBERUZJTkVfSURSKGN4bF9hZGFwdGVyX2lkcik7CkBAIC00OCw2ICs0OSw3IEBACiAJCSBjdHgtPmFmdS0+YWRhcHRlci0+YWRhcHRlcl9udW0sIGN0eC0+YWZ1LT5zbGljZSwgY3R4LT5wZSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5zc3RlX2xvY2ssIGZsYWdzKTsKKwl0cmFjZV9jeGxfc2xiaWEoY3R4KTsKIAltZW1zZXQoY3R4LT5zc3RwLCAwLCBjdHgtPnNzdF9zaXplKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPnNzdGVfbG9jaywgZmxhZ3MpOwogCW1iKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvY3hsL25hdGl2ZS5jIGIvZHJpdmVycy9taXNjL2N4bC9uYXRpdmUuYwppbmRleCBmMmIzN2I0Li4yOTE4NWZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvY3hsL25hdGl2ZS5jCisrKyBiL2RyaXZlcnMvbWlzYy9jeGwvbmF0aXZlLmMKQEAgLTE4LDI0ICsxOCwyOCBAQAogI2luY2x1ZGUgPG1pc2MvY3hsLmg+CiAKICNpbmNsdWRlICJjeGwuaCIKKyNpbmNsdWRlICJ0cmFjZS5oIgogCiBzdGF0aWMgaW50IGFmdV9jb250cm9sKHN0cnVjdCBjeGxfYWZ1ICphZnUsIHU2NCBjb21tYW5kLAogCQkgICAgICAgdTY0IHJlc3VsdCwgdTY0IG1hc2ssIGJvb2wgZW5hYmxlZCkKIHsKIAl1NjQgQUZVX0NudGwgPSBjeGxfcDJuX3JlYWQoYWZ1LCBDWExfQUZVX0NudGxfQW4pOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyAoSFogKiBDWExfVElNRU9VVCk7CisJaW50IHJjID0gMDsKIAogCXNwaW5fbG9jaygmYWZ1LT5hZnVfY250bF9sb2NrKTsKIAlwcl9kZXZlbCgiQUZVIGNvbW1hbmQgc3RhcnRpbmc6ICVsbHhcbiIsIGNvbW1hbmQpOwogCisJdHJhY2VfY3hsX2FmdV9jdHJsKGFmdSwgY29tbWFuZCk7CisKIAljeGxfcDJuX3dyaXRlKGFmdSwgQ1hMX0FGVV9DbnRsX0FuLCBBRlVfQ250bCB8IGNvbW1hbmQpOwogCiAJQUZVX0NudGwgPSBjeGxfcDJuX3JlYWQoYWZ1LCBDWExfQUZVX0NudGxfQW4pOwogCXdoaWxlICgoQUZVX0NudGwgJiBtYXNrKSAhPSByZXN1bHQpIHsKIAkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkpIHsKIAkJCWRldl93YXJuKCZhZnUtPmRldiwgIldBUk5JTkc6IEFGVSBjb250cm9sIHRpbWVkIG91dCFcbiIpOwotCQkJc3Bpbl91bmxvY2soJmFmdS0+YWZ1X2NudGxfbG9jayk7Ci0JCQlyZXR1cm4gLUVCVVNZOworCQkJcmMgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKIAkJfQogCQlwcl9kZXZlbF9yYXRlbGltaXRlZCgiQUZVIGNvbnRyb2wuLi4gKDB4JS4xNmxseClcbiIsCiAJCQkJICAgICBBRlVfQ250bCB8IGNvbW1hbmQpOwpAQCAtNDQsOSArNDgsMTEgQEAKIAl9OwogCXByX2RldmVsKCJBRlUgY29tbWFuZCBjb21wbGV0ZTogJWxseFxuIiwgY29tbWFuZCk7CiAJYWZ1LT5lbmFibGVkID0gZW5hYmxlZDsKK291dDoKKwl0cmFjZV9jeGxfYWZ1X2N0cmxfZG9uZShhZnUsIGNvbW1hbmQsIHJjKTsKIAlzcGluX3VubG9jaygmYWZ1LT5hZnVfY250bF9sb2NrKTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBhZnVfZW5hYmxlKHN0cnVjdCBjeGxfYWZ1ICphZnUpCkBAIC05MSw2ICs5Nyw5IEBACiAJdTY0IGRzaXNyLCBkYXI7CiAJdTY0IHN0YXJ0LCBlbmQ7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIChIWiAqIENYTF9USU1FT1VUKTsKKwlpbnQgcmMgPSAwOworCisJdHJhY2VfY3hsX3BzbF9jdHJsKGFmdSwgQ1hMX1BTTF9TQ05UTF9Bbl9QYyk7CiAKIAlwcl9kZXZlbCgiUFNMIHB1cmdlIHJlcXVlc3RcbiIpOwogCkBAIC0xMDcsNyArMTE2LDggQEAKIAkJCT09IENYTF9QU0xfU0NOVExfQW5fUHNfUGVuZGluZykgewogCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJZGV2X3dhcm4oJmFmdS0+ZGV2LCAiV0FSTklORzogUFNMIFB1cmdlIHRpbWVkIG91dCFcbiIpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXJjID0gLUVCVVNZOworCQkJZ290byBvdXQ7CiAJCX0KIAkJZHNpc3IgPSBjeGxfcDJuX3JlYWQoYWZ1LCBDWExfUFNMX0RTSVNSX0FuKTsKIAkJcHJfZGV2ZWxfcmF0ZWxpbWl0ZWQoIlBTTCBwdXJnaW5nLi4uIFBTTF9DTlRMOiAweCUuMTZsbHggIFBTTF9EU0lTUjogMHglLjE2bGx4XG4iLCBQU0xfQ05UTCwgZHNpc3IpOwpAQCAtMTI4LDcgKzEzOCw5IEBACiAKIAljeGxfcDFuX3dyaXRlKGFmdSwgQ1hMX1BTTF9TQ05UTF9BbiwKIAkJICAgICAgIFBTTF9DTlRMICYgfkNYTF9QU0xfU0NOVExfQW5fUGMpOwotCXJldHVybiAwOworb3V0OgorCXRyYWNlX2N4bF9wc2xfY3RybF9kb25lKGFmdSwgQ1hMX1BTTF9TQ05UTF9Bbl9QYywgcmMpOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBzcGFfbWF4X3Byb2NzKGludCBzcGFfc2l6ZSkKQEAgLTE4NSw2ICsxOTcsNyBAQAogCiBzdGF0aWMgdm9pZCByZWxlYXNlX3NwYShzdHJ1Y3QgY3hsX2FmdSAqYWZ1KQogeworCWN4bF9wMW5fd3JpdGUoYWZ1LCBDWExfUFNMX1NQQVBfQW4sIDApOwogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIGFmdS0+c3BhLCBhZnUtPnNwYV9vcmRlcik7CiB9CiAKQEAgLTI3OCw2ICsyOTEsOSBAQAogewogCXU2NCBzdGF0ZTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgKEhaICogQ1hMX1RJTUVPVVQpOworCWludCByYyA9IDA7CisKKwl0cmFjZV9jeGxfbGxjbWQoY3R4LCBjbWQpOwogCiAJV0FSTl9PTighY3R4LT5hZnUtPmVuYWJsZWQpOwogCkBAIC0yODksMTIgKzMwNSwxNCBAQAogCXdoaWxlICgxKSB7CiAJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCQlkZXZfd2FybigmY3R4LT5hZnUtPmRldiwgIldBUk5JTkc6IFByb2Nlc3MgRWxlbWVudCBDb21tYW5kIHRpbWVkIG91dCFcbiIpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXJjID0gLUVCVVNZOworCQkJZ290byBvdXQ7CiAJCX0KIAkJc3RhdGUgPSBiZTY0X3RvX2NwdXAoY3R4LT5hZnUtPnN3X2NvbW1hbmRfc3RhdHVzKTsKIAkJaWYgKHN0YXRlID09IH4wVUxMKSB7CiAJCQlwcl9lcnIoImN4bDogRXJyb3IgYWRkaW5nIHByb2Nlc3MgZWxlbWVudCB0byBBRlVcbiIpOwotCQkJcmV0dXJuIC0xOworCQkJcmMgPSAtMTsKKwkJCWdvdG8gb3V0OwogCQl9CiAJCWlmICgoc3RhdGUgJiAoQ1hMX1NQQV9TV19DTURfTUFTSyB8IENYTF9TUEFfU1dfU1RBVEVfTUFTSyAgfCBDWExfU1BBX1NXX0xJTktfTUFTSykpID09CiAJCSAgICAoY21kIHwgKGNtZCA+PiAxNikgfCBjdHgtPnBlKSkKQEAgLTMwOSw3ICszMjcsOSBAQAogCQlzY2hlZHVsZSgpOwogCiAJfQotCXJldHVybiAwOworb3V0OgorCXRyYWNlX2N4bF9sbGNtZF9kb25lKGN0eCwgY21kLCByYyk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGFkZF9wcm9jZXNzX2VsZW1lbnQoc3RydWN0IGN4bF9jb250ZXh0ICpjdHgpCkBAIC02MjksNiArNjQ5LDggQEAKIAogaW50IGN4bF9kZXRhY2hfcHJvY2VzcyhzdHJ1Y3QgY3hsX2NvbnRleHQgKmN0eCkKIHsKKwl0cmFjZV9jeGxfZGV0YWNoKGN0eCk7CisKIAlpZiAoY3R4LT5hZnUtPmN1cnJlbnRfbW9kZSA9PSBDWExfTU9ERV9ERURJQ0FURUQpCiAJCXJldHVybiBkZXRhY2hfcHJvY2Vzc19uYXRpdmVfZGVkaWNhdGVkKGN0eCk7CiAKQEAgLTY2Nyw2ICs2ODksNyBAQAogCiBpbnQgY3hsX2Fja19pcnEoc3RydWN0IGN4bF9jb250ZXh0ICpjdHgsIHU2NCB0ZmMsIHU2NCBwc2xfcmVzZXRfbWFzaykKIHsKKwl0cmFjZV9jeGxfcHNsX2lycV9hY2soY3R4LCB0ZmMpOwogCWlmICh0ZmMpCiAJCWN4bF9wMm5fd3JpdGUoY3R4LT5hZnUsIENYTF9QU0xfVEZDX0FuLCB0ZmMpOwogCWlmIChwc2xfcmVzZXRfbWFzaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9jeGwvcGNpLmMgYi9kcml2ZXJzL21pc2MvY3hsL3BjaS5jCmluZGV4IDBmMmNjOWY4Li4xZWYwMTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvY3hsL3BjaS5jCisrKyBiL2RyaXZlcnMvbWlzYy9jeGwvcGNpLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vbXNpX2JpdG1hcC5oPgogI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+IC8qIGZvciBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKi8KICNpbmNsdWRlIDxhc20vcG52LXBjaS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSAiY3hsLmgiCiAKQEAgLTExMyw2ICsxMTQsMjQgQEAKICNkZWZpbmUgICBBRlVEX0VCX0xFTih2YWwpCQlFWFRSQUNUX1BQQ19CSVRTKHZhbCwgOCwgNjMpCiAjZGVmaW5lIEFGVURfUkVBRF9FQl9PRkYoYWZ1KQkJQUZVRF9SRUFEKGFmdSwgMHg0OCkKIAordTE2IGN4bF9hZnVfY3JfcmVhZDE2KHN0cnVjdCBjeGxfYWZ1ICphZnUsIGludCBjciwgdTY0IG9mZikKK3sKKwl1NjQgYWxpZ25lZF9vZmYgPSBvZmYgJiB+MHgzTDsKKwl1MzIgdmFsOworCisJdmFsID0gY3hsX2FmdV9jcl9yZWFkMzIoYWZ1LCBjciwgYWxpZ25lZF9vZmYpOworCXJldHVybiAodmFsID4+ICgob2ZmICYgMHgyKSAqIDgpKSAmIDB4ZmZmZjsKK30KKwordTggY3hsX2FmdV9jcl9yZWFkOChzdHJ1Y3QgY3hsX2FmdSAqYWZ1LCBpbnQgY3IsIHU2NCBvZmYpCit7CisJdTY0IGFsaWduZWRfb2ZmID0gb2ZmICYgfjB4M0w7CisJdTMyIHZhbDsKKworCXZhbCA9IGN4bF9hZnVfY3JfcmVhZDMyKGFmdSwgY3IsIGFsaWduZWRfb2ZmKTsKKwlyZXR1cm4gKHZhbCA+PiAoKG9mZiAmIDB4MykgKiA4KSkgJiAweGZmOworfQorCiBzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY3hsX3BjaV90YmwpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lCTSwgMHgwNDc3KSwgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JQk0sIDB4MDQ0YiksIH0sCkBAIC0zMTYsNyArMzM1LDcgQEAKIAl1NjQgcHNsX2RzbmN0bDsKIAl1NjQgY2hpcGlkOwogCi0JaWYgKCEobnAgPSBwbnZfcGNpX3RvX3BoYl9ub2RlKGRldikpKQorCWlmICghKG5wID0gcG52X3BjaV9nZXRfcGhiX25vZGUoZGV2KSkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJd2hpbGUgKG5wICYmICEocHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImlibSxjaGlwLWlkIiwgTlVMTCkpKQpAQCAtMzQ4LDcgKzM2Nyw3IEBACiAJY3hsX3Axbl93cml0ZShhZnUsIENYTF9QU0xfQ09BTExPQ19BLCAweEZGMDAwMDAwRkVGRUZFRkVVTEwpOwogCS8qIGZvciBkZWJ1Z2dpbmcgd2l0aCB0cmFjZSBhcnJheXMgKi8KIAljeGxfcDFuX3dyaXRlKGFmdSwgQ1hMX1BTTF9TTElDRV9UUkFDRSwgMHgwMDAwRkZGRjAwMDAwMDAwVUxMKTsKLQljeGxfcDFuX3dyaXRlKGFmdSwgQ1hMX1BTTF9SWENUTF9BLCAweEYwMDAwMDAwMDAwMDAwMDBVTEwpOworCWN4bF9wMW5fd3JpdGUoYWZ1LCBDWExfUFNMX1JYQ1RMX0EsIENYTF9QU0xfUlhDVExfQUZVSFBfNFMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNjEsNiArMzgwLDQxIEBACiAJcmV0dXJuIHBudl9jeGxfaW9kYV9tc2lfc2V0dXAoZGV2LCBod2lycSwgdmlycSk7CiB9CiAKK2ludCBjeGxfdXBkYXRlX2ltYWdlX2NvbnRyb2woc3RydWN0IGN4bCAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2RldihhZGFwdGVyLT5kZXYucGFyZW50KTsKKwlpbnQgcmM7CisJaW50IHZzZWM7CisJdTggaW1hZ2Vfc3RhdGU7CisKKwlpZiAoISh2c2VjID0gZmluZF9jeGxfdnNlYyhkZXYpKSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkFCT1JUSU5HOiBDWEwgVlNFQyBub3QgZm91bmQhXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKChyYyA9IENYTF9SRUFEX1ZTRUNfSU1BR0VfU1RBVEUoZGV2LCB2c2VjLCAmaW1hZ2Vfc3RhdGUpKSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgImZhaWxlZCB0byByZWFkIGltYWdlIHN0YXRlOiAlaVxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJaWYgKGFkYXB0ZXItPnBlcnN0X2xvYWRzX2ltYWdlKQorCQlpbWFnZV9zdGF0ZSB8PSBDWExfVlNFQ19QRVJTVF9MT0FEU19JTUFHRTsKKwllbHNlCisJCWltYWdlX3N0YXRlICY9IH5DWExfVlNFQ19QRVJTVF9MT0FEU19JTUFHRTsKKworCWlmIChhZGFwdGVyLT5wZXJzdF9zZWxlY3RfdXNlcikKKwkJaW1hZ2Vfc3RhdGUgfD0gQ1hMX1ZTRUNfUEVSU1RfU0VMRUNUX1VTRVI7CisJZWxzZQorCQlpbWFnZV9zdGF0ZSAmPSB+Q1hMX1ZTRUNfUEVSU1RfU0VMRUNUX1VTRVI7CisKKwlpZiAoKHJjID0gQ1hMX1dSSVRFX1ZTRUNfSU1BR0VfU1RBVEUoZGV2LCB2c2VjLCBpbWFnZV9zdGF0ZSkpKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiZmFpbGVkIHRvIHVwZGF0ZSBpbWFnZSBjb250cm9sOiAlaVxuIiwgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIGludCBjeGxfYWxsb2Nfb25lX2lycShzdHJ1Y3QgY3hsICphZGFwdGVyKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGFkYXB0ZXItPmRldi5wYXJlbnQpOwpAQCAtNTIwLDYgKzU3NCw3IEBACiAJdmFsID0gQUZVRF9SRUFEX0lORk8oYWZ1KTsKIAlhZnUtPnBwX2lycXMgPSBBRlVEX05VTV9JTlRTX1BFUl9QUk9DKHZhbCk7CiAJYWZ1LT5tYXhfcHJvY3NfdmlydHVhbGlzZWQgPSBBRlVEX05VTV9QUk9DUyh2YWwpOworCWFmdS0+Y3JzX251bSA9IEFGVURfTlVNX0NSUyh2YWwpOwogCiAJaWYgKEFGVURfQUZVX0RJUkVDVEVEKHZhbCkpCiAJCWFmdS0+bW9kZXNfc3VwcG9ydGVkIHw9IENYTF9NT0RFX0RJUkVDVEVEOwpAQCAtNTM0LDExICs1ODksMTcgQEAKIAlpZiAoKGFmdS0+cHBfcHNhID0gQUZVRF9QUFBTQV9QUCh2YWwpKSkKIAkJYWZ1LT5wcF9vZmZzZXQgPSBBRlVEX1JFQURfUFBQU0FfT0ZGKGFmdSk7CiAKKwl2YWwgPSBBRlVEX1JFQURfQ1IoYWZ1KTsKKwlhZnUtPmNyc19sZW4gPSBBRlVEX0NSX0xFTih2YWwpICogMjU2OworCWFmdS0+Y3JzX29mZnNldCA9IEFGVURfUkVBRF9DUl9PRkYoYWZ1KTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGN4bF9hZnVfZGVzY3JpcHRvcl9sb29rc19vayhzdHJ1Y3QgY3hsX2FmdSAqYWZ1KQogeworCWludCBpOworCiAJaWYgKGFmdS0+cHNhICYmIGFmdS0+YWRhcHRlci0+cHNfc2l6ZSA8CiAJCQkoYWZ1LT5wcF9vZmZzZXQgKyBhZnUtPnBwX3NpemUqYWZ1LT5tYXhfcHJvY3NfdmlydHVhbGlzZWQpKSB7CiAJCWRldl9lcnIoJmFmdS0+ZGV2LCAicGVyLXByb2Nlc3MgUFNBIGNhbid0IGZpdCBpbnNpZGUgdGhlIFBTQSFcbiIpOwpAQCAtNTQ4LDYgKzYwOSwxMyBAQAogCWlmIChhZnUtPnBwX3BzYSAmJiAoYWZ1LT5wcF9zaXplIDwgUEFHRV9TSVpFKSkKIAkJZGV2X3dhcm4oJmFmdS0+ZGV2LCAiQUZVIHVzZXMgPCBQQUdFX1NJWkUgcGVyLXByb2Nlc3MgUFNBISIpOwogCisJZm9yIChpID0gMDsgaSA8IGFmdS0+Y3JzX251bTsgaSsrKSB7CisJCWlmICgoY3hsX2FmdV9jcl9yZWFkMzIoYWZ1LCBpLCAwKSA9PSAwKSkgeworCQkJZGV2X2VycigmYWZ1LT5kZXYsICJBQk9SVElORzogQUZVIGNvbmZpZ3VyYXRpb24gcmVjb3JkICVpIGlzIGludmFsaWRcbiIsIGkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzA2LDYgKzc3NCw0MiBAQAogCWRldmljZV91bnJlZ2lzdGVyKCZhZnUtPmRldik7CiB9CiAKK2ludCBjeGxfcmVzZXQoc3RydWN0IGN4bCAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2RldihhZGFwdGVyLT5kZXYucGFyZW50KTsKKwlpbnQgcmM7CisJaW50IGk7CisJdTMyIHZhbDsKKworCWRldl9pbmZvKCZkZXYtPmRldiwgIkNYTCByZXNldFxuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+c2xpY2VzOyBpKyspCisJCWN4bF9yZW1vdmVfYWZ1KGFkYXB0ZXItPmFmdVtpXSk7CisKKwkvKiBwY2llX3dhcm1fcmVzZXQgcmVxdWVzdHMgYSBmdW5kYW1lbnRhbCBwY2kgcmVzZXQgd2hpY2ggaW5jbHVkZXMgYQorCSAqIFBFUlNUIGFzc2VydC9kZWFzc2VydC4gIFBFUlNUIHRyaWdnZXJzIGEgbG9hZGluZyBvZiB0aGUgaW1hZ2UKKwkgKiBpZiAidXNlciIgb3IgImZhY3RvcnkiIGlzIHNlbGVjdGVkIGluIHN5c2ZzICovCisJaWYgKChyYyA9IHBjaV9zZXRfcGNpZV9yZXNldF9zdGF0ZShkZXYsIHBjaWVfd2FybV9yZXNldCkpKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiY3hsOiBwY2llX3dhcm1fcmVzZXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qIHRoZSBQRVJTVCBkb25lIGFib3ZlIGZlbmNlcyB0aGUgUEhCLiAgU28sIHJlc2V0IGRlcGVuZHMgb24gRUVICisJICogdG8gdW5iaW5kIHRoZSBkcml2ZXIsIHRlbGwgU2FwcGhpcmUgdG8gcmVpbml0IHRoZSBQSEIsIGFuZCByZWJpbmQKKwkgKiB0aGUgZHJpdmVyLiAgRG8gYW4gbW1pbyByZWFkIGV4cGxpY3RseSB0byBlbnN1cmUgRUVIIG5vdGljZXMgdGhlCisJICogZmVuY2VkIFBIQi4gIFJldHJ5IGZvciBhIGZldyBzZWNvbmRzIGJlZm9yZSBnaXZpbmcgdXAuICovCisJaSA9IDA7CisJd2hpbGUgKCgodmFsID0gbW1pb19yZWFkMzJiZShhZGFwdGVyLT5wMV9tbWlvKSkgIT0gMHhmZmZmZmZmZikgJiYKKwkJKGkgPCA1KSkgeworCQltc2xlZXAoNTAwKTsKKwkJaSsrOworCX0KKworCWlmICh2YWwgIT0gMHhmZmZmZmZmZikKKwkJZGV2X2VycigmZGV2LT5kZXYsICJjeGw6IFBFUlNUIGZhaWxlZCB0byB0cmlnZ2VyIEVFSFxuIik7CisKKwlyZXR1cm4gcmM7Cit9CiAKIHN0YXRpYyBpbnQgY3hsX21hcF9hZGFwdGVyX3JlZ3Moc3RydWN0IGN4bCAqYWRhcHRlciwgc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTc3MCw4ICs4NzQsOCBAQAogCUNYTF9SRUFEX1ZTRUNfQkFTRV9JTUFHRShkZXYsIHZzZWMsICZhZGFwdGVyLT5iYXNlX2ltYWdlKTsKIAlDWExfUkVBRF9WU0VDX0lNQUdFX1NUQVRFKGRldiwgdnNlYywgJmltYWdlX3N0YXRlKTsKIAlhZGFwdGVyLT51c2VyX2ltYWdlX2xvYWRlZCA9ICEhKGltYWdlX3N0YXRlICYgQ1hMX1ZTRUNfVVNFUl9JTUFHRV9MT0FERUQpOwotCWFkYXB0ZXItPnBlcnN0X2xvYWRzX2ltYWdlID0gISEoaW1hZ2Vfc3RhdGUgJiBDWExfVlNFQ19QRVJTVF9MT0FEU19JTUFHRSk7Ci0JYWRhcHRlci0+cGVyc3Rfc2VsZWN0X3VzZXIgPSAhIShpbWFnZV9zdGF0ZSAmIENYTF9WU0VDX1BFUlNUX1NFTEVDVF9VU0VSKTsKKwlhZGFwdGVyLT5wZXJzdF9sb2Fkc19pbWFnZSA9IHRydWU7CisJYWRhcHRlci0+cGVyc3Rfc2VsZWN0X3VzZXIgPSAhIShpbWFnZV9zdGF0ZSAmIENYTF9WU0VDX1VTRVJfSU1BR0VfTE9BREVEKTsKIAogCUNYTF9SRUFEX1ZTRUNfTkFGVVMoZGV2LCB2c2VjLCAmYWRhcHRlci0+c2xpY2VzKTsKIAlDWExfUkVBRF9WU0VDX0FGVV9ERVNDX09GRihkZXYsIHZzZWMsICZhZnVfZGVzY19vZmYpOwpAQCAtODc5LDYgKzk4Myw5IEBACiAJaWYgKChyYyA9IGN4bF92c2VjX2xvb2tzX29rKGFkYXB0ZXIsIGRldikpKQogCQlnb3RvIGVycjI7CiAKKwlpZiAoKHJjID0gY3hsX3VwZGF0ZV9pbWFnZV9jb250cm9sKGFkYXB0ZXIpKSkKKwkJZ290byBlcnIyOworCiAJaWYgKChyYyA9IGN4bF9tYXBfYWRhcHRlcl9yZWdzKGFkYXB0ZXIsIGRldikpKQogCQlnb3RvIGVycjI7CiAKQEAgLTg4OCw5ICs5OTUsMTUgQEAKIAlpZiAoKHJjID0gaW5pdF9pbXBsZW1lbnRhdGlvbl9hZGFwdGVyX3JlZ3MoYWRhcHRlciwgZGV2KSkpCiAJCWdvdG8gZXJyMzsKIAotCWlmICgocmMgPSBwbnZfcGhiX3RvX2N4bChkZXYpKSkKKwlpZiAoKHJjID0gcG52X3BoYl90b19jeGxfbW9kZShkZXYsIE9QQUxfUEhCX0NBUElfTU9ERV9DQVBJKSkpCiAJCWdvdG8gZXJyMzsKIAorCS8qIElmIHJlY292ZXJ5IGhhcHBlbmVkLCB0aGUgbGFzdCBzdGVwIGlzIHRvIHR1cm4gb24gc25vb3BpbmcuCisJICogSW4gdGhlIG5vbi1yZWNvdmVyeSBjYXNlIHRoaXMgaGFzIG5vIGVmZmVjdCAqLworCWlmICgocmMgPSBwbnZfcGhiX3RvX2N4bF9tb2RlKGRldiwgT1BBTF9QSEJfQ0FQSV9NT0RFX1NOT09QX09OKSkpIHsKKwkJZ290byBlcnIzOworCX0KKwogCWlmICgocmMgPSBjeGxfcmVnaXN0ZXJfcHNsX2Vycl9pcnEoYWRhcHRlcikpKQogCQlnb3RvIGVycjM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9jeGwvc3lzZnMuYyBiL2RyaXZlcnMvbWlzYy9jeGwvc3lzZnMuYwppbmRleCA0NjFiZGJkLi5kMGMzOGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvY3hsL3N5c2ZzLmMKKysrIGIvZHJpdmVycy9taXNjL2N4bC9zeXNmcy5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfcmVncy5oPgogCiAjaW5jbHVkZSAiY3hsLmgiCiAKQEAgLTU2LDExICs1Nyw2OCBAQAogCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJmYWN0b3J5XG4iKTsKIH0KIAorc3RhdGljIHNzaXplX3QgcmVzZXRfYWRhcHRlcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGN4bCAqYWRhcHRlciA9IHRvX2N4bF9hZGFwdGVyKGRldmljZSk7CisJaW50IHJjOworCWludCB2YWw7CisKKwlyYyA9IHNzY2FuZihidWYsICIlaSIsICZ2YWwpOworCWlmICgocmMgIT0gMSkgfHwgKHZhbCAhPSAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoKHJjID0gY3hsX3Jlc2V0KGFkYXB0ZXIpKSkKKwkJcmV0dXJuIHJjOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgbG9hZF9pbWFnZV9vbl9wZXJzdF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldmljZSwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgY3hsICphZGFwdGVyID0gdG9fY3hsX2FkYXB0ZXIoZGV2aWNlKTsKKworCWlmICghYWRhcHRlci0+cGVyc3RfbG9hZHNfaW1hZ2UpCisJCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJub25lXG4iKTsKKworCWlmIChhZGFwdGVyLT5wZXJzdF9zZWxlY3RfdXNlcikKKwkJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgInVzZXJcbiIpOworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJmYWN0b3J5XG4iKTsKK30KKworc3RhdGljIHNzaXplX3QgbG9hZF9pbWFnZV9vbl9wZXJzdF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgY3hsICphZGFwdGVyID0gdG9fY3hsX2FkYXB0ZXIoZGV2aWNlKTsKKwlpbnQgcmM7CisKKwlpZiAoIXN0cm5jbXAoYnVmLCAibm9uZSIsIDQpKQorCQlhZGFwdGVyLT5wZXJzdF9sb2Fkc19pbWFnZSA9IGZhbHNlOworCWVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgInVzZXIiLCA0KSkgeworCQlhZGFwdGVyLT5wZXJzdF9zZWxlY3RfdXNlciA9IHRydWU7CisJCWFkYXB0ZXItPnBlcnN0X2xvYWRzX2ltYWdlID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKGJ1ZiwgImZhY3RvcnkiLCA3KSkgeworCQlhZGFwdGVyLT5wZXJzdF9zZWxlY3RfdXNlciA9IGZhbHNlOworCQlhZGFwdGVyLT5wZXJzdF9sb2Fkc19pbWFnZSA9IHRydWU7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChyYyA9IGN4bF91cGRhdGVfaW1hZ2VfY29udHJvbChhZGFwdGVyKSkpCisJCXJldHVybiByYzsKKworCXJldHVybiBjb3VudDsKK30KKwogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGFkYXB0ZXJfYXR0cnNbXSA9IHsKIAlfX0FUVFJfUk8oY2FpYV92ZXJzaW9uKSwKIAlfX0FUVFJfUk8ocHNsX3JldmlzaW9uKSwKIAlfX0FUVFJfUk8oYmFzZV9pbWFnZSksCiAJX19BVFRSX1JPKGltYWdlX2xvYWRlZCksCisJX19BVFRSX1JXKGxvYWRfaW1hZ2Vfb25fcGVyc3QpLAorCV9fQVRUUihyZXNldCwgU19JV1VTUiwgTlVMTCwgcmVzZXRfYWRhcHRlcl9zdG9yZSksCiB9OwogCiAKQEAgLTMxMCw4ICszNjgsNiBAQAogCV9fQVRUUihyZXNldCwgU19JV1VTUiwgTlVMTCwgcmVzZXRfc3RvcmVfYWZ1KSwKIH07CiAKLQotCiBpbnQgY3hsX3N5c2ZzX2FkYXB0ZXJfYWRkKHN0cnVjdCBjeGwgKmFkYXB0ZXIpCiB7CiAJaW50IGksIHJjOwpAQCAtMzM0LDMxICszOTAsMTkxIEBACiAJCWRldmljZV9yZW1vdmVfZmlsZSgmYWRhcHRlci0+ZGV2LCAmYWRhcHRlcl9hdHRyc1tpXSk7CiB9CiAKK3N0cnVjdCBhZnVfY29uZmlnX3JlY29yZCB7CisJc3RydWN0IGtvYmplY3Qga29iajsKKwlzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBjb25maWdfYXR0cjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJaW50IGNyOworCXUxNiBkZXZpY2U7CisJdTE2IHZlbmRvcjsKKwl1MzIgY2xhc3M7Cit9OworCisjZGVmaW5lIHRvX2NyKG9iaikgY29udGFpbmVyX29mKG9iaiwgc3RydWN0IGFmdV9jb25maWdfcmVjb3JkLCBrb2JqKQorCitzdGF0aWMgc3NpemVfdCB2ZW5kb3Jfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCSAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhZnVfY29uZmlnX3JlY29yZCAqY3IgPSB0b19jcihrb2JqKTsKKworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUuNHhcbiIsIGNyLT52ZW5kb3IpOworfQorCitzdGF0aWMgc3NpemVfdCBkZXZpY2Vfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCSAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBhZnVfY29uZmlnX3JlY29yZCAqY3IgPSB0b19jcihrb2JqKTsKKworCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUuNHhcbiIsIGNyLT5kZXZpY2UpOworfQorCitzdGF0aWMgc3NpemVfdCBjbGFzc19zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWZ1X2NvbmZpZ19yZWNvcmQgKmNyID0gdG9fY3Ioa29iaik7CisKKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglLjZ4XG4iLCBjci0+Y2xhc3MpOworfQorCitzdGF0aWMgc3NpemVfdCBhZnVfcmVhZF9jb25maWcoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJICAgICAgIHN0cnVjdCBiaW5fYXR0cmlidXRlICpiaW5fYXR0ciwgY2hhciAqYnVmLAorCQkJICAgICAgIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWZ1X2NvbmZpZ19yZWNvcmQgKmNyID0gdG9fY3Ioa29iaik7CisJc3RydWN0IGN4bF9hZnUgKmFmdSA9IHRvX2N4bF9hZnUoY29udGFpbmVyX29mKGtvYmotPnBhcmVudCwgc3RydWN0IGRldmljZSwga29iaikpOworCisJdTY0IGksIGosIHZhbCwgc2l6ZSA9IGFmdS0+Y3JzX2xlbjsKKworCWlmIChvZmYgPiBzaXplKQorCQlyZXR1cm4gMDsKKwlpZiAob2ZmICsgY291bnQgPiBzaXplKQorCQljb3VudCA9IHNpemUgLSBvZmY7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7KSB7CisJCXZhbCA9IGN4bF9hZnVfY3JfcmVhZDY0KGFmdSwgY3ItPmNyLCBvZmYgJiB+MHg3KTsKKwkJZm9yIChqID0gb2ZmICYgMHg3OyBqIDwgOCAmJiBpIDwgY291bnQ7IGkrKywgaisrLCBvZmYrKykKKwkJCWJ1ZltpXSA9ICh2YWwgPj4gKGogKiA4KSkgJiAweGZmOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB2ZW5kb3JfYXR0cmlidXRlID0KKwlfX0FUVFJfUk8odmVuZG9yKTsKK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGV2aWNlX2F0dHJpYnV0ZSA9CisJX19BVFRSX1JPKGRldmljZSk7CitzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGNsYXNzX2F0dHJpYnV0ZSA9CisJX19BVFRSX1JPKGNsYXNzKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFmdV9jcl9hdHRyc1tdID0geworCSZ2ZW5kb3JfYXR0cmlidXRlLmF0dHIsCisJJmRldmljZV9hdHRyaWJ1dGUuYXR0ciwKKwkmY2xhc3NfYXR0cmlidXRlLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfYWZ1X2NvbmZpZ19yZWNvcmQoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJc3RydWN0IGFmdV9jb25maWdfcmVjb3JkICpjciA9IHRvX2NyKGtvYmopOworCisJa2ZyZWUoY3IpOworfQorCitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBhZnVfY29uZmlnX3JlY29yZF90eXBlID0geworCS5zeXNmc19vcHMgPSAma29ial9zeXNmc19vcHMsCisJLnJlbGVhc2UgPSByZWxlYXNlX2FmdV9jb25maWdfcmVjb3JkLAorCS5kZWZhdWx0X2F0dHJzID0gYWZ1X2NyX2F0dHJzLAorfTsKKworc3RhdGljIHN0cnVjdCBhZnVfY29uZmlnX3JlY29yZCAqY3hsX3N5c2ZzX2FmdV9uZXdfY3Ioc3RydWN0IGN4bF9hZnUgKmFmdSwgaW50IGNyX2lkeCkKK3sKKwlzdHJ1Y3QgYWZ1X2NvbmZpZ19yZWNvcmQgKmNyOworCWludCByYzsKKworCWNyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFmdV9jb25maWdfcmVjb3JkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjcikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwljci0+Y3IgPSBjcl9pZHg7CisJY3ItPmRldmljZSA9IGN4bF9hZnVfY3JfcmVhZDE2KGFmdSwgY3JfaWR4LCBQQ0lfREVWSUNFX0lEKTsKKwljci0+dmVuZG9yID0gY3hsX2FmdV9jcl9yZWFkMTYoYWZ1LCBjcl9pZHgsIFBDSV9WRU5ET1JfSUQpOworCWNyLT5jbGFzcyA9IGN4bF9hZnVfY3JfcmVhZDMyKGFmdSwgY3JfaWR4LCBQQ0lfQ0xBU1NfUkVWSVNJT04pID4+IDg7CisKKwkvKgorCSAqIEV4cG9ydCByYXcgQUZVIFBDSWUgbGlrZSBjb25maWcgcmVjb3JkLiBGb3Igbm93IHRoaXMgaXMgcmVhZCBvbmx5IGJ5CisJICogcm9vdCAtIHdlIGNhbiBleHBhbmQgdGhhdCBsYXRlciB0byBiZSByZWFkYWJsZSBieSBub24tcm9vdCBhbmQgbWF5YmUKKwkgKiBldmVuIHdyaXRhYmxlIHByb3ZpZGVkIHdlIGhhdmUgYSBnb29kIHVzZS1jYXNlLiBPbmNlIHdlIHN1cG9ydAorCSAqIGV4cG9zaW5nIEFGVXMgdGhyb3VnaCBhIHZpcnR1YWwgUEhCIHRoZXkgd2lsbCBnZXQgdGhhdCBmb3IgZnJlZSBmcm9tCisJICogTGludXgnIFBDSSBpbmZyYXN0cnVjdHVyZSwgYnV0IHVudGlsIHRoZW4gaXQncyBub3QgY2xlYXIgdGhhdCB3ZQorCSAqIG5lZWQgaXQgZm9yIGFueXRoaW5nIHNpbmNlIHRoZSBtYWluIHVzZSBjYXNlIGlzIGp1c3QgaWRlbnRpZnlpbmcKKwkgKiBBRlVzLCB3aGljaCBjYW4gYmUgZG9uZSB2aWEgdGhlIHZlbmRvciwgZGV2aWNlIGFuZCBjbGFzcyBhdHRyaWJ1dGVzLgorCSAqLworCXN5c2ZzX2Jpbl9hdHRyX2luaXQoJmNyLT5jb25maWdfYXR0cik7CisJY3ItPmNvbmZpZ19hdHRyLmF0dHIubmFtZSA9ICJjb25maWciOworCWNyLT5jb25maWdfYXR0ci5hdHRyLm1vZGUgPSBTX0lSVVNSOworCWNyLT5jb25maWdfYXR0ci5zaXplID0gYWZ1LT5jcnNfbGVuOworCWNyLT5jb25maWdfYXR0ci5yZWFkID0gYWZ1X3JlYWRfY29uZmlnOworCisJcmMgPSBrb2JqZWN0X2luaXRfYW5kX2FkZCgmY3ItPmtvYmosICZhZnVfY29uZmlnX3JlY29yZF90eXBlLAorCQkJCSAgJmFmdS0+ZGV2LmtvYmosICJjciVpIiwgY3ItPmNyKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyOworCisJcmMgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmNyLT5rb2JqLCAmY3ItPmNvbmZpZ19hdHRyKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyMTsKKworCXJjID0ga29iamVjdF91ZXZlbnQoJmNyLT5rb2JqLCBLT0JKX0FERCk7CisJaWYgKHJjKQorCQlnb3RvIGVycjI7CisKKwlyZXR1cm4gY3I7CitlcnIyOgorCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmY3ItPmtvYmosICZjci0+Y29uZmlnX2F0dHIpOworZXJyMToKKwlrb2JqZWN0X3B1dCgmY3ItPmtvYmopOworCXJldHVybiBFUlJfUFRSKHJjKTsKK2VycjoKKwlrZnJlZShjcik7CisJcmV0dXJuIEVSUl9QVFIocmMpOworfQorCit2b2lkIGN4bF9zeXNmc19hZnVfcmVtb3ZlKHN0cnVjdCBjeGxfYWZ1ICphZnUpCit7CisJc3RydWN0IGFmdV9jb25maWdfcmVjb3JkICpjciwgKnRtcDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFmdV9hdHRycyk7IGkrKykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZhZnUtPmRldiwgJmFmdV9hdHRyc1tpXSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3IsIHRtcCwgJmFmdS0+Y3JzLCBsaXN0KSB7CisJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmY3ItPmtvYmosICZjci0+Y29uZmlnX2F0dHIpOworCQlrb2JqZWN0X3B1dCgmY3ItPmtvYmopOworCX0KK30KKwogaW50IGN4bF9zeXNmc19hZnVfYWRkKHN0cnVjdCBjeGxfYWZ1ICphZnUpCiB7CisJc3RydWN0IGFmdV9jb25maWdfcmVjb3JkICpjcjsKIAlpbnQgaSwgcmM7CiAKKwlJTklUX0xJU1RfSEVBRCgmYWZ1LT5jcnMpOworCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWZ1X2F0dHJzKTsgaSsrKSB7CiAJCWlmICgocmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmFmdS0+ZGV2LCAmYWZ1X2F0dHJzW2ldKSkpCiAJCQlnb3RvIGVycjsKIAl9CiAKKwlmb3IgKGkgPSAwOyBpIDwgYWZ1LT5jcnNfbnVtOyBpKyspIHsKKwkJY3IgPSBjeGxfc3lzZnNfYWZ1X25ld19jcihhZnUsIGkpOworCQlpZiAoSVNfRVJSKGNyKSkgeworCQkJcmMgPSBQVFJfRVJSKGNyKTsKKwkJCWdvdG8gZXJyMTsKKwkJfQorCQlsaXN0X2FkZCgmY3ItPmxpc3QsICZhZnUtPmNycyk7CisJfQorCiAJcmV0dXJuIDA7CiAKK2VycjE6CisJY3hsX3N5c2ZzX2FmdV9yZW1vdmUoYWZ1KTsKKwlyZXR1cm4gcmM7CiBlcnI6CiAJZm9yIChpLS07IGkgPj0gMDsgaS0tKQogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmFmdS0+ZGV2LCAmYWZ1X2F0dHJzW2ldKTsKIAlyZXR1cm4gcmM7CiB9CiAKLXZvaWQgY3hsX3N5c2ZzX2FmdV9yZW1vdmUoc3RydWN0IGN4bF9hZnUgKmFmdSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFmdV9hdHRycyk7IGkrKykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZhZnUtPmRldiwgJmFmdV9hdHRyc1tpXSk7Ci19Ci0KIGludCBjeGxfc3lzZnNfYWZ1X21fYWRkKHN0cnVjdCBjeGxfYWZ1ICphZnUpCiB7CiAJaW50IGksIHJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2N4bC90cmFjZS5jIGIvZHJpdmVycy9taXNjL2N4bC90cmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyYjA2ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21pc2MvY3hsL3RyYWNlLmMKQEAgLTAsMCArMSwxMyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE1IElCTSBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0NIRUNLRVJfXworI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCisjaW5jbHVkZSAidHJhY2UuaCIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2N4bC90cmFjZS5oIGIvZHJpdmVycy9taXNjL2N4bC90cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlNDM0ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21pc2MvY3hsL3RyYWNlLmgKQEAgLTAsMCArMSw0NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNSBJQk0gQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyN1bmRlZiBUUkFDRV9TWVNURU0KKyNkZWZpbmUgVFJBQ0VfU1lTVEVNIGN4bAorCisjaWYgIWRlZmluZWQoX0NYTF9UUkFDRV9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKQorI2RlZmluZSBfQ1hMX1RSQUNFX0gKKworI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KKworI2luY2x1ZGUgImN4bC5oIgorCisjZGVmaW5lIERTSVNSX0ZMQUdTIFwKKwl7IENYTF9QU0xfRFNJU1JfQW5fRFMsCSJEUyIgfSwgXAorCXsgQ1hMX1BTTF9EU0lTUl9Bbl9ETSwJIkRNIiB9LCBcCisJeyBDWExfUFNMX0RTSVNSX0FuX1NULAkiU1QiIH0sIFwKKwl7IENYTF9QU0xfRFNJU1JfQW5fVVIsCSJVUiIgfSwgXAorCXsgQ1hMX1BTTF9EU0lTUl9Bbl9QRSwJIlBFIiB9LCBcCisJeyBDWExfUFNMX0RTSVNSX0FuX0FFLAkiQUUiIH0sIFwKKwl7IENYTF9QU0xfRFNJU1JfQW5fT0MsCSJPQyIgfSwgXAorCXsgQ1hMX1BTTF9EU0lTUl9Bbl9NLAkiTSIgfSwgXAorCXsgQ1hMX1BTTF9EU0lTUl9Bbl9QLAkiUCIgfSwgXAorCXsgQ1hMX1BTTF9EU0lTUl9Bbl9BLAkiQSIgfSwgXAorCXsgQ1hMX1BTTF9EU0lTUl9Bbl9TLAkiUyIgfSwgXAorCXsgQ1hMX1BTTF9EU0lTUl9Bbl9LLAkiSyIgfQorCisjZGVmaW5lIFRGQ19GTEFHUyBcCisJeyBDWExfUFNMX1RGQ19Bbl9BLAkiQSIgfSwgXAorCXsgQ1hMX1BTTF9URkNfQW5fQywJIkMiIH0sIFwKKwl7IENYTF9QU0xfVEZDX0FuX0FFLAkiQUUiIH0sIFwKKwl7IENYTF9QU0xfVEZDX0FuX1IsCSJSIiB9CisKKyNkZWZpbmUgTExDTURfTkFNRVMgXAorCXsgQ1hMX1NQQV9TV19DTURfVEVSTUlOQVRFLAkiVEVSTUlOQVRFIiB9LCBcCisJeyBDWExfU1BBX1NXX0NNRF9SRU1PVkUsCSJSRU1PVkUiIH0sIFwKKwl7IENYTF9TUEFfU1dfQ01EX1NVU1BFTkQsCSJTVVNQRU5EIiB9LCBcCisJeyBDWExfU1BBX1NXX0NNRF9SRVNVTUUsCSJSRVNVTUUiIH0sIFwKKwl7IENYTF9TUEFfU1dfQ01EX0FERCwJCSJBREQiIH0sIFwKKwl7IENYTF9TUEFfU1dfQ01EX1VQREFURSwJIlVQREFURSIgfQorCisjZGVmaW5lIEFGVV9DT01NQU5EUyBcCisJeyAwLAkJCSJESVNBQkxFIiB9LCBcCisJeyBDWExfQUZVX0NudGxfQW5fRSwJIkVOQUJMRSIgfSwgXAorCXsgQ1hMX0FGVV9DbnRsX0FuX1JBLAkiUkVTRVQiIH0KKworI2RlZmluZSBQU0xfQ09NTUFORFMgXAorCXsgQ1hMX1BTTF9TQ05UTF9Bbl9QYywJIlBVUkdFIiB9LCBcCisJeyBDWExfUFNMX1NDTlRMX0FuX1NjLAkiU1VTUEVORCIgfQorCisKK0RFQ0xBUkVfRVZFTlRfQ0xBU1MoY3hsX3BlX2NsYXNzLAorCVRQX1BST1RPKHN0cnVjdCBjeGxfY29udGV4dCAqY3R4KSwKKworCVRQX0FSR1MoY3R4KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQodTgsIGNhcmQpCisJCV9fZmllbGQodTgsIGFmdSkKKwkJX19maWVsZCh1MTYsIHBlKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+Y2FyZCA9IGN0eC0+YWZ1LT5hZGFwdGVyLT5hZGFwdGVyX251bTsKKwkJX19lbnRyeS0+YWZ1ID0gY3R4LT5hZnUtPnNsaWNlOworCQlfX2VudHJ5LT5wZSA9IGN0eC0+cGU7CisJKSwKKworCVRQX3ByaW50aygiYWZ1JWkuJWkgcGU9JWkiLAorCQlfX2VudHJ5LT5jYXJkLAorCQlfX2VudHJ5LT5hZnUsCisJCV9fZW50cnktPnBlCisJKQorKTsKKworCitUUkFDRV9FVkVOVChjeGxfYXR0YWNoLAorCVRQX1BST1RPKHN0cnVjdCBjeGxfY29udGV4dCAqY3R4LCB1NjQgd2VkLCBzMTYgbnVtX2ludGVycnVwdHMsIHU2NCBhbXIpLAorCisJVFBfQVJHUyhjdHgsIHdlZCwgbnVtX2ludGVycnVwdHMsIGFtciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHU4LCBjYXJkKQorCQlfX2ZpZWxkKHU4LCBhZnUpCisJCV9fZmllbGQodTE2LCBwZSkKKwkJX19maWVsZChwaWRfdCwgcGlkKQorCQlfX2ZpZWxkKHU2NCwgd2VkKQorCQlfX2ZpZWxkKHU2NCwgYW1yKQorCQlfX2ZpZWxkKHMxNiwgbnVtX2ludGVycnVwdHMpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5jYXJkID0gY3R4LT5hZnUtPmFkYXB0ZXItPmFkYXB0ZXJfbnVtOworCQlfX2VudHJ5LT5hZnUgPSBjdHgtPmFmdS0+c2xpY2U7CisJCV9fZW50cnktPnBlID0gY3R4LT5wZTsKKwkJX19lbnRyeS0+cGlkID0gcGlkX25yKGN0eC0+cGlkKTsKKwkJX19lbnRyeS0+d2VkID0gd2VkOworCQlfX2VudHJ5LT5hbXIgPSBhbXI7CisJCV9fZW50cnktPm51bV9pbnRlcnJ1cHRzID0gbnVtX2ludGVycnVwdHM7CisJKSwKKworCVRQX3ByaW50aygiYWZ1JWkuJWkgcGlkPSVpIHBlPSVpIHdlZD0weCUuMTZsbHggaXJxcz0laSBhbXI9MHglbGx4IiwKKwkJX19lbnRyeS0+Y2FyZCwKKwkJX19lbnRyeS0+YWZ1LAorCQlfX2VudHJ5LT5waWQsCisJCV9fZW50cnktPnBlLAorCQlfX2VudHJ5LT53ZWQsCisJCV9fZW50cnktPm51bV9pbnRlcnJ1cHRzLAorCQlfX2VudHJ5LT5hbXIKKwkpCispOworCitERUZJTkVfRVZFTlQoY3hsX3BlX2NsYXNzLCBjeGxfZGV0YWNoLAorCVRQX1BST1RPKHN0cnVjdCBjeGxfY29udGV4dCAqY3R4KSwKKwlUUF9BUkdTKGN0eCkKKyk7CisKK1RSQUNFX0VWRU5UKGN4bF9hZnVfaXJxLAorCVRQX1BST1RPKHN0cnVjdCBjeGxfY29udGV4dCAqY3R4LCBpbnQgYWZ1X2lycSwgaW50IHZpcnEsIGlycV9od19udW1iZXJfdCBod2lycSksCisKKwlUUF9BUkdTKGN0eCwgYWZ1X2lycSwgdmlycSwgaHdpcnEpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCh1OCwgY2FyZCkKKwkJX19maWVsZCh1OCwgYWZ1KQorCQlfX2ZpZWxkKHUxNiwgcGUpCisJCV9fZmllbGQodTE2LCBhZnVfaXJxKQorCQlfX2ZpZWxkKGludCwgdmlycSkKKwkJX19maWVsZChpcnFfaHdfbnVtYmVyX3QsIGh3aXJxKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+Y2FyZCA9IGN0eC0+YWZ1LT5hZGFwdGVyLT5hZGFwdGVyX251bTsKKwkJX19lbnRyeS0+YWZ1ID0gY3R4LT5hZnUtPnNsaWNlOworCQlfX2VudHJ5LT5wZSA9IGN0eC0+cGU7CisJCV9fZW50cnktPmFmdV9pcnEgPSBhZnVfaXJxOworCQlfX2VudHJ5LT52aXJxID0gdmlycTsKKwkJX19lbnRyeS0+aHdpcnEgPSBod2lycTsKKwkpLAorCisJVFBfcHJpbnRrKCJhZnUlaS4laSBwZT0laSBhZnVfaXJxPSVpIHZpcnE9JWkgaHdpcnE9MHglbHgiLAorCQlfX2VudHJ5LT5jYXJkLAorCQlfX2VudHJ5LT5hZnUsCisJCV9fZW50cnktPnBlLAorCQlfX2VudHJ5LT5hZnVfaXJxLAorCQlfX2VudHJ5LT52aXJxLAorCQlfX2VudHJ5LT5od2lycQorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGN4bF9wc2xfaXJxLAorCVRQX1BST1RPKHN0cnVjdCBjeGxfY29udGV4dCAqY3R4LCBpbnQgaXJxLCB1NjQgZHNpc3IsIHU2NCBkYXIpLAorCisJVFBfQVJHUyhjdHgsIGlycSwgZHNpc3IsIGRhciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHU4LCBjYXJkKQorCQlfX2ZpZWxkKHU4LCBhZnUpCisJCV9fZmllbGQodTE2LCBwZSkKKwkJX19maWVsZChpbnQsIGlycSkKKwkJX19maWVsZCh1NjQsIGRzaXNyKQorCQlfX2ZpZWxkKHU2NCwgZGFyKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+Y2FyZCA9IGN0eC0+YWZ1LT5hZGFwdGVyLT5hZGFwdGVyX251bTsKKwkJX19lbnRyeS0+YWZ1ID0gY3R4LT5hZnUtPnNsaWNlOworCQlfX2VudHJ5LT5wZSA9IGN0eC0+cGU7CisJCV9fZW50cnktPmlycSA9IGlycTsKKwkJX19lbnRyeS0+ZHNpc3IgPSBkc2lzcjsKKwkJX19lbnRyeS0+ZGFyID0gZGFyOworCSksCisKKwlUUF9wcmludGsoImFmdSVpLiVpIHBlPSVpIGlycT0laSBkc2lzcj0lcyBkYXI9MHglLjE2bGx4IiwKKwkJX19lbnRyeS0+Y2FyZCwKKwkJX19lbnRyeS0+YWZ1LAorCQlfX2VudHJ5LT5wZSwKKwkJX19lbnRyeS0+aXJxLAorCQlfX3ByaW50X2ZsYWdzKF9fZW50cnktPmRzaXNyLCAifCIsIERTSVNSX0ZMQUdTKSwKKwkJX19lbnRyeS0+ZGFyCisJKQorKTsKKworVFJBQ0VfRVZFTlQoY3hsX3BzbF9pcnFfYWNrLAorCVRQX1BST1RPKHN0cnVjdCBjeGxfY29udGV4dCAqY3R4LCB1NjQgdGZjKSwKKworCVRQX0FSR1MoY3R4LCB0ZmMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCh1OCwgY2FyZCkKKwkJX19maWVsZCh1OCwgYWZ1KQorCQlfX2ZpZWxkKHUxNiwgcGUpCisJCV9fZmllbGQodTY0LCB0ZmMpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5jYXJkID0gY3R4LT5hZnUtPmFkYXB0ZXItPmFkYXB0ZXJfbnVtOworCQlfX2VudHJ5LT5hZnUgPSBjdHgtPmFmdS0+c2xpY2U7CisJCV9fZW50cnktPnBlID0gY3R4LT5wZTsKKwkJX19lbnRyeS0+dGZjID0gdGZjOworCSksCisKKwlUUF9wcmludGsoImFmdSVpLiVpIHBlPSVpIHRmYz0lcyIsCisJCV9fZW50cnktPmNhcmQsCisJCV9fZW50cnktPmFmdSwKKwkJX19lbnRyeS0+cGUsCisJCV9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+dGZjLCAifCIsIFRGQ19GTEFHUykKKwkpCispOworCitUUkFDRV9FVkVOVChjeGxfc3RlX21pc3MsCisJVFBfUFJPVE8oc3RydWN0IGN4bF9jb250ZXh0ICpjdHgsIHU2NCBkYXIpLAorCisJVFBfQVJHUyhjdHgsIGRhciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHU4LCBjYXJkKQorCQlfX2ZpZWxkKHU4LCBhZnUpCisJCV9fZmllbGQodTE2LCBwZSkKKwkJX19maWVsZCh1NjQsIGRhcikKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmNhcmQgPSBjdHgtPmFmdS0+YWRhcHRlci0+YWRhcHRlcl9udW07CisJCV9fZW50cnktPmFmdSA9IGN0eC0+YWZ1LT5zbGljZTsKKwkJX19lbnRyeS0+cGUgPSBjdHgtPnBlOworCQlfX2VudHJ5LT5kYXIgPSBkYXI7CisJKSwKKworCVRQX3ByaW50aygiYWZ1JWkuJWkgcGU9JWkgZGFyPTB4JS4xNmxseCIsCisJCV9fZW50cnktPmNhcmQsCisJCV9fZW50cnktPmFmdSwKKwkJX19lbnRyeS0+cGUsCisJCV9fZW50cnktPmRhcgorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGN4bF9zdGVfd3JpdGUsCisJVFBfUFJPVE8oc3RydWN0IGN4bF9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGludCBpZHgsIHU2NCBlLCB1NjQgdiksCisKKwlUUF9BUkdTKGN0eCwgaWR4LCBlLCB2KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQodTgsIGNhcmQpCisJCV9fZmllbGQodTgsIGFmdSkKKwkJX19maWVsZCh1MTYsIHBlKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwgaWR4KQorCQlfX2ZpZWxkKHU2NCwgZSkKKwkJX19maWVsZCh1NjQsIHYpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5jYXJkID0gY3R4LT5hZnUtPmFkYXB0ZXItPmFkYXB0ZXJfbnVtOworCQlfX2VudHJ5LT5hZnUgPSBjdHgtPmFmdS0+c2xpY2U7CisJCV9fZW50cnktPnBlID0gY3R4LT5wZTsKKwkJX19lbnRyeS0+aWR4ID0gaWR4OworCQlfX2VudHJ5LT5lID0gZTsKKwkJX19lbnRyeS0+diA9IHY7CisJKSwKKworCVRQX3ByaW50aygiYWZ1JWkuJWkgcGU9JWkgU1NURVslaV0gRT0weCUuMTZsbHggVj0weCUuMTZsbHgiLAorCQlfX2VudHJ5LT5jYXJkLAorCQlfX2VudHJ5LT5hZnUsCisJCV9fZW50cnktPnBlLAorCQlfX2VudHJ5LT5pZHgsCisJCV9fZW50cnktPmUsCisJCV9fZW50cnktPnYKKwkpCispOworCitUUkFDRV9FVkVOVChjeGxfcHRlX21pc3MsCisJVFBfUFJPVE8oc3RydWN0IGN4bF9jb250ZXh0ICpjdHgsIHU2NCBkc2lzciwgdTY0IGRhciksCisKKwlUUF9BUkdTKGN0eCwgZHNpc3IsIGRhciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHU4LCBjYXJkKQorCQlfX2ZpZWxkKHU4LCBhZnUpCisJCV9fZmllbGQodTE2LCBwZSkKKwkJX19maWVsZCh1NjQsIGRzaXNyKQorCQlfX2ZpZWxkKHU2NCwgZGFyKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+Y2FyZCA9IGN0eC0+YWZ1LT5hZGFwdGVyLT5hZGFwdGVyX251bTsKKwkJX19lbnRyeS0+YWZ1ID0gY3R4LT5hZnUtPnNsaWNlOworCQlfX2VudHJ5LT5wZSA9IGN0eC0+cGU7CisJCV9fZW50cnktPmRzaXNyID0gZHNpc3I7CisJCV9fZW50cnktPmRhciA9IGRhcjsKKwkpLAorCisJVFBfcHJpbnRrKCJhZnUlaS4laSBwZT0laSBkc2lzcj0lcyBkYXI9MHglLjE2bGx4IiwKKwkJX19lbnRyeS0+Y2FyZCwKKwkJX19lbnRyeS0+YWZ1LAorCQlfX2VudHJ5LT5wZSwKKwkJX19wcmludF9mbGFncyhfX2VudHJ5LT5kc2lzciwgInwiLCBEU0lTUl9GTEFHUyksCisJCV9fZW50cnktPmRhcgorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGN4bF9sbGNtZCwKKwlUUF9QUk9UTyhzdHJ1Y3QgY3hsX2NvbnRleHQgKmN0eCwgdTY0IGNtZCksCisKKwlUUF9BUkdTKGN0eCwgY21kKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQodTgsIGNhcmQpCisJCV9fZmllbGQodTgsIGFmdSkKKwkJX19maWVsZCh1MTYsIHBlKQorCQlfX2ZpZWxkKHU2NCwgY21kKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+Y2FyZCA9IGN0eC0+YWZ1LT5hZGFwdGVyLT5hZGFwdGVyX251bTsKKwkJX19lbnRyeS0+YWZ1ID0gY3R4LT5hZnUtPnNsaWNlOworCQlfX2VudHJ5LT5wZSA9IGN0eC0+cGU7CisJCV9fZW50cnktPmNtZCA9IGNtZDsKKwkpLAorCisJVFBfcHJpbnRrKCJhZnUlaS4laSBwZT0laSBjbWQ9JXMiLAorCQlfX2VudHJ5LT5jYXJkLAorCQlfX2VudHJ5LT5hZnUsCisJCV9fZW50cnktPnBlLAorCQlfX3ByaW50X3N5bWJvbGljX3U2NChfX2VudHJ5LT5jbWQsIExMQ01EX05BTUVTKQorCSkKKyk7CisKK1RSQUNFX0VWRU5UKGN4bF9sbGNtZF9kb25lLAorCVRQX1BST1RPKHN0cnVjdCBjeGxfY29udGV4dCAqY3R4LCB1NjQgY21kLCBpbnQgcmMpLAorCisJVFBfQVJHUyhjdHgsIGNtZCwgcmMpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCh1OCwgY2FyZCkKKwkJX19maWVsZCh1OCwgYWZ1KQorCQlfX2ZpZWxkKHUxNiwgcGUpCisJCV9fZmllbGQodTY0LCBjbWQpCisJCV9fZmllbGQoaW50LCByYykKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmNhcmQgPSBjdHgtPmFmdS0+YWRhcHRlci0+YWRhcHRlcl9udW07CisJCV9fZW50cnktPmFmdSA9IGN0eC0+YWZ1LT5zbGljZTsKKwkJX19lbnRyeS0+cGUgPSBjdHgtPnBlOworCQlfX2VudHJ5LT5yYyA9IHJjOworCQlfX2VudHJ5LT5jbWQgPSBjbWQ7CisJKSwKKworCVRQX3ByaW50aygiYWZ1JWkuJWkgcGU9JWkgY21kPSVzIHJjPSVpIiwKKwkJX19lbnRyeS0+Y2FyZCwKKwkJX19lbnRyeS0+YWZ1LAorCQlfX2VudHJ5LT5wZSwKKwkJX19wcmludF9zeW1ib2xpY191NjQoX19lbnRyeS0+Y21kLCBMTENNRF9OQU1FUyksCisJCV9fZW50cnktPnJjCisJKQorKTsKKworREVDTEFSRV9FVkVOVF9DTEFTUyhjeGxfYWZ1X3BzbF9jdHJsLAorCVRQX1BST1RPKHN0cnVjdCBjeGxfYWZ1ICphZnUsIHU2NCBjbWQpLAorCisJVFBfQVJHUyhhZnUsIGNtZCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKHU4LCBjYXJkKQorCQlfX2ZpZWxkKHU4LCBhZnUpCisJCV9fZmllbGQodTY0LCBjbWQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5jYXJkID0gYWZ1LT5hZGFwdGVyLT5hZGFwdGVyX251bTsKKwkJX19lbnRyeS0+YWZ1ID0gYWZ1LT5zbGljZTsKKwkJX19lbnRyeS0+Y21kID0gY21kOworCSksCisKKwlUUF9wcmludGsoImFmdSVpLiVpIGNtZD0lcyIsCisJCV9fZW50cnktPmNhcmQsCisJCV9fZW50cnktPmFmdSwKKwkJX19wcmludF9zeW1ib2xpY191NjQoX19lbnRyeS0+Y21kLCBBRlVfQ09NTUFORFMpCisJKQorKTsKKworREVDTEFSRV9FVkVOVF9DTEFTUyhjeGxfYWZ1X3BzbF9jdHJsX2RvbmUsCisJVFBfUFJPVE8oc3RydWN0IGN4bF9hZnUgKmFmdSwgdTY0IGNtZCwgaW50IHJjKSwKKworCVRQX0FSR1MoYWZ1LCBjbWQsIHJjKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQodTgsIGNhcmQpCisJCV9fZmllbGQodTgsIGFmdSkKKwkJX19maWVsZCh1NjQsIGNtZCkKKwkJX19maWVsZChpbnQsIHJjKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+Y2FyZCA9IGFmdS0+YWRhcHRlci0+YWRhcHRlcl9udW07CisJCV9fZW50cnktPmFmdSA9IGFmdS0+c2xpY2U7CisJCV9fZW50cnktPnJjID0gcmM7CisJCV9fZW50cnktPmNtZCA9IGNtZDsKKwkpLAorCisJVFBfcHJpbnRrKCJhZnUlaS4laSBjbWQ9JXMgcmM9JWkiLAorCQlfX2VudHJ5LT5jYXJkLAorCQlfX2VudHJ5LT5hZnUsCisJCV9fcHJpbnRfc3ltYm9saWNfdTY0KF9fZW50cnktPmNtZCwgQUZVX0NPTU1BTkRTKSwKKwkJX19lbnRyeS0+cmMKKwkpCispOworCitERUZJTkVfRVZFTlQoY3hsX2FmdV9wc2xfY3RybCwgY3hsX2FmdV9jdHJsLAorCVRQX1BST1RPKHN0cnVjdCBjeGxfYWZ1ICphZnUsIHU2NCBjbWQpLAorCVRQX0FSR1MoYWZ1LCBjbWQpCispOworCitERUZJTkVfRVZFTlQoY3hsX2FmdV9wc2xfY3RybF9kb25lLCBjeGxfYWZ1X2N0cmxfZG9uZSwKKwlUUF9QUk9UTyhzdHJ1Y3QgY3hsX2FmdSAqYWZ1LCB1NjQgY21kLCBpbnQgcmMpLAorCVRQX0FSR1MoYWZ1LCBjbWQsIHJjKQorKTsKKworREVGSU5FX0VWRU5UX1BSSU5UKGN4bF9hZnVfcHNsX2N0cmwsIGN4bF9wc2xfY3RybCwKKwlUUF9QUk9UTyhzdHJ1Y3QgY3hsX2FmdSAqYWZ1LCB1NjQgY21kKSwKKwlUUF9BUkdTKGFmdSwgY21kKSwKKworCVRQX3ByaW50aygicHNsJWkuJWkgY21kPSVzIiwKKwkJX19lbnRyeS0+Y2FyZCwKKwkJX19lbnRyeS0+YWZ1LAorCQlfX3ByaW50X3N5bWJvbGljX3U2NChfX2VudHJ5LT5jbWQsIFBTTF9DT01NQU5EUykKKwkpCispOworCitERUZJTkVfRVZFTlRfUFJJTlQoY3hsX2FmdV9wc2xfY3RybF9kb25lLCBjeGxfcHNsX2N0cmxfZG9uZSwKKwlUUF9QUk9UTyhzdHJ1Y3QgY3hsX2FmdSAqYWZ1LCB1NjQgY21kLCBpbnQgcmMpLAorCVRQX0FSR1MoYWZ1LCBjbWQsIHJjKSwKKworCVRQX3ByaW50aygicHNsJWkuJWkgY21kPSVzIHJjPSVpIiwKKwkJX19lbnRyeS0+Y2FyZCwKKwkJX19lbnRyeS0+YWZ1LAorCQlfX3ByaW50X3N5bWJvbGljX3U2NChfX2VudHJ5LT5jbWQsIFBTTF9DT01NQU5EUyksCisJCV9fZW50cnktPnJjCisJKQorKTsKKworREVGSU5FX0VWRU5UKGN4bF9wZV9jbGFzcywgY3hsX3NsYmlhLAorCVRQX1BST1RPKHN0cnVjdCBjeGxfY29udGV4dCAqY3R4KSwKKwlUUF9BUkdTKGN0eCkKKyk7CisKKyNlbmRpZiAvKiBfQ1hMX1RSQUNFX0ggKi8KKworLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCisjdW5kZWYgVFJBQ0VfSU5DTFVERV9QQVRICisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfUEFUSCAuCisjZGVmaW5lIFRSQUNFX0lOQ0xVREVfRklMRSB0cmFjZQorI2luY2x1ZGUgPHRyYWNlL2RlZmluZV90cmFjZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jIGIvZHJpdmVycy9taXNjL2VuY2xvc3VyZS5jCmluZGV4IDE4MGE1NDQuLjM4NTUyYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9lbmNsb3N1cmUuYworKysgYi9kcml2ZXJzL21pc2MvZW5jbG9zdXJlLmMKQEAgLTE0NSw4ICsxNDUsMTEgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycjsKIAotCWZvciAoaSA9IDA7IGkgPCBjb21wb25lbnRzOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGNvbXBvbmVudHM7IGkrKykgewogCQllZGV2LT5jb21wb25lbnRbaV0ubnVtYmVyID0gLTE7CisJCWVkZXYtPmNvbXBvbmVudFtpXS5zbG90ID0gLTE7CisJCWVkZXYtPmNvbXBvbmVudFtpXS5wb3dlcl9zdGF0dXMgPSAxOworCX0KIAogCW11dGV4X2xvY2soJmNvbnRhaW5lcl9saXN0X2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmVkZXYtPm5vZGUsICZjb250YWluZXJfbGlzdCk7CkBAIC0yNzMsMjcgKzI3NiwyNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmVuY2xvc3VyZV9jb21wb25lbnRfZ3JvdXBzW107CiAKIC8qKgotICogZW5jbG9zdXJlX2NvbXBvbmVudF9yZWdpc3RlciAtIGFkZCBhIHBhcnRpY3VsYXIgY29tcG9uZW50IHRvIGFuIGVuY2xvc3VyZQorICogZW5jbG9zdXJlX2NvbXBvbmVudF9hbGxvYyAtIHByZXBhcmUgYSBuZXcgZW5jbG9zdXJlIGNvbXBvbmVudAogICogQGVkZXY6CXRoZSBlbmNsb3N1cmUgdG8gYWRkIHRoZSBjb21wb25lbnQKICAqIEBudW06CXRoZSBkZXZpY2UgbnVtYmVyCiAgKiBAdHlwZToJdGhlIHR5cGUgb2YgY29tcG9uZW50IGJlaW5nIGFkZGVkCiAgKiBAbmFtZToJYW4gb3B0aW9uYWwgbmFtZSB0byBhcHBlYXIgaW4gc3lzZnMgKGxlYXZlIE5VTEwgaWYgbm9uZSkKICAqCi0gKiBSZWdpc3RlcnMgdGhlIGNvbXBvbmVudC4gIFRoZSBuYW1lIGlzIG9wdGlvbmFsIGZvciBlbmNsb3N1cmVzIHRoYXQKLSAqIGdpdmUgdGhlaXIgY29tcG9uZW50cyBhIHVuaXF1ZSBuYW1lLiAgSWYgbm90LCBsZWF2ZSB0aGUgZmllbGQgTlVMTAotICogYW5kIGEgbmFtZSB3aWxsIGJlIGFzc2lnbmVkLgorICogVGhlIG5hbWUgaXMgb3B0aW9uYWwgZm9yIGVuY2xvc3VyZXMgdGhhdCBnaXZlIHRoZWlyIGNvbXBvbmVudHMgYSB1bmlxdWUKKyAqIG5hbWUuICBJZiBub3QsIGxlYXZlIHRoZSBmaWVsZCBOVUxMIGFuZCBhIG5hbWUgd2lsbCBiZSBhc3NpZ25lZC4KICAqCiAgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZW5jbG9zdXJlIGNvbXBvbmVudCBvciBhbiBlcnJvci4KICAqLwogc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKgotZW5jbG9zdXJlX2NvbXBvbmVudF9yZWdpc3RlcihzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiwKLQkJCSAgICAgdW5zaWduZWQgaW50IG51bWJlciwKLQkJCSAgICAgZW51bSBlbmNsb3N1cmVfY29tcG9uZW50X3R5cGUgdHlwZSwKLQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKK2VuY2xvc3VyZV9jb21wb25lbnRfYWxsb2Moc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYsCisJCQkgIHVuc2lnbmVkIGludCBudW1iZXIsCisJCQkgIGVudW0gZW5jbG9zdXJlX2NvbXBvbmVudF90eXBlIHR5cGUsCisJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wOwogCXN0cnVjdCBkZXZpY2UgKmNkZXY7Ci0JaW50IGVyciwgaTsKKwlpbnQgaTsKIAljaGFyIG5ld25hbWVbQ09NUE9ORU5UX05BTUVfU0laRV07CiAKIAlpZiAobnVtYmVyID49IGVkZXYtPmNvbXBvbmVudHMpCkBAIC0zMjcsMTQgKzMyOSwzMCBAQAogCWNkZXYtPnJlbGVhc2UgPSBlbmNsb3N1cmVfY29tcG9uZW50X3JlbGVhc2U7CiAJY2Rldi0+Z3JvdXBzID0gZW5jbG9zdXJlX2NvbXBvbmVudF9ncm91cHM7CiAKKwlyZXR1cm4gZWNvbXA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChlbmNsb3N1cmVfY29tcG9uZW50X2FsbG9jKTsKKworLyoqCisgKiBlbmNsb3N1cmVfY29tcG9uZW50X3JlZ2lzdGVyIC0gcHVibGlzaGVzIGFuIGluaXRpYWxpemVkIGVuY2xvc3VyZSBjb21wb25lbnQKKyAqIEBlY29tcDoJY29tcG9uZW50IHRvIGFkZAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzZnVsIHJlZ2lzdHJhdGlvbiwgcmVsZWFzZXMgdGhlIGNvbXBvbmVudCBvdGhlcndpc2UKKyAqLworaW50IGVuY2xvc3VyZV9jb21wb25lbnRfcmVnaXN0ZXIoc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wKQoreworCXN0cnVjdCBkZXZpY2UgKmNkZXY7CisJaW50IGVycjsKKworCWNkZXYgPSAmZWNvbXAtPmNkZXY7CiAJZXJyID0gZGV2aWNlX3JlZ2lzdGVyKGNkZXYpOwogCWlmIChlcnIpIHsKIAkJZWNvbXAtPm51bWJlciA9IC0xOwogCQlwdXRfZGV2aWNlKGNkZXYpOwotCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCQlyZXR1cm4gZXJyOwogCX0KIAotCXJldHVybiBlY29tcDsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGVuY2xvc3VyZV9jb21wb25lbnRfcmVnaXN0ZXIpOwogCkBAIC00MTcsOCArNDM1LDIxIEBACiB9CiBzdGF0aWMgREVWSUNFX0FUVFJfUk8oY29tcG9uZW50cyk7CiAKK3N0YXRpYyBzc2l6ZV90IGlkX3Nob3coc3RydWN0IGRldmljZSAqY2RldiwKKwkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiA9IHRvX2VuY2xvc3VyZV9kZXZpY2UoY2Rldik7CisKKwlpZiAoZWRldi0+Y2ItPnNob3dfaWQpCisJCXJldHVybiBlZGV2LT5jYi0+c2hvd19pZChlZGV2LCBidWYpOworCXJldHVybiAtRUlOVkFMOworfQorc3RhdGljIERFVklDRV9BVFRSX1JPKGlkKTsKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmVuY2xvc3VyZV9jbGFzc19hdHRyc1tdID0gewogCSZkZXZfYXR0cl9jb21wb25lbnRzLmF0dHIsCisJJmRldl9hdHRyX2lkLmF0dHIsCiAJTlVMTCwKIH07CiBBVFRSSUJVVEVfR1JPVVBTKGVuY2xvc3VyZV9jbGFzcyk7CkBAIC01NTMsNiArNTg0LDQwIEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgc3NpemVfdCBnZXRfY29tcG9uZW50X3Bvd2VyX3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpjZGV2LAorCQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqZWRldiA9IHRvX2VuY2xvc3VyZV9kZXZpY2UoY2Rldi0+cGFyZW50KTsKKwlzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXAgPSB0b19lbmNsb3N1cmVfY29tcG9uZW50KGNkZXYpOworCisJaWYgKGVkZXYtPmNiLT5nZXRfcG93ZXJfc3RhdHVzKQorCQllZGV2LT5jYi0+Z2V0X3Bvd2VyX3N0YXR1cyhlZGV2LCBlY29tcCk7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgNDAsICIlc1xuIiwgZWNvbXAtPnBvd2VyX3N0YXR1cyA/ICJvbiIgOiAib2ZmIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9jb21wb25lbnRfcG93ZXJfc3RhdHVzKHN0cnVjdCBkZXZpY2UgKmNkZXYsCisJCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYgPSB0b19lbmNsb3N1cmVfZGV2aWNlKGNkZXYtPnBhcmVudCk7CisJc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wID0gdG9fZW5jbG9zdXJlX2NvbXBvbmVudChjZGV2KTsKKwlpbnQgdmFsOworCisJaWYgKHN0cm5jbXAoYnVmLCAib24iLCAyKSA9PSAwICYmCisJICAgIChidWZbMl0gPT0gJ1xuJyB8fCBidWZbMl0gPT0gJ1wwJykpCisJCXZhbCA9IDE7CisJZWxzZSBpZiAoc3RybmNtcChidWYsICJvZmYiLCAzKSA9PSAwICYmCisJICAgIChidWZbM10gPT0gJ1xuJyB8fCBidWZbM10gPT0gJ1wwJykpCisJCXZhbCA9IDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChlZGV2LT5jYi0+c2V0X3Bvd2VyX3N0YXR1cykKKwkJZWRldi0+Y2ItPnNldF9wb3dlcl9zdGF0dXMoZWRldiwgZWNvbXAsIHZhbCk7CisJcmV0dXJuIGNvdW50OworfQorCiBzdGF0aWMgc3NpemVfdCBnZXRfY29tcG9uZW50X3R5cGUoc3RydWN0IGRldmljZSAqY2RldiwKIAkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC01NjEsNiArNjI2LDIwIEBACiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgNDAsICIlc1xuIiwgZW5jbG9zdXJlX3R5cGVbZWNvbXAtPnR5cGVdKTsKIH0KIAorc3RhdGljIHNzaXplX3QgZ2V0X2NvbXBvbmVudF9zbG90KHN0cnVjdCBkZXZpY2UgKmNkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICplY29tcCA9IHRvX2VuY2xvc3VyZV9jb21wb25lbnQoY2Rldik7CisJaW50IHNsb3Q7CisKKwkvKiBpZiB0aGUgZW5jbG9zdXJlIGRvZXMgbm90IG92ZXJyaWRlIHRoZW4gdXNlICdudW1iZXInIGFzIGEgc3RhbmQtaW4gKi8KKwlpZiAoZWNvbXAtPnNsb3QgPj0gMCkKKwkJc2xvdCA9IGVjb21wLT5zbG90OworCWVsc2UKKwkJc2xvdCA9IGVjb21wLT5udW1iZXI7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCA0MCwgIiVkXG4iLCBzbG90KTsKK30KIAogc3RhdGljIERFVklDRV9BVFRSKGZhdWx0LCBTX0lSVUdPIHwgU19JV1VTUiwgZ2V0X2NvbXBvbmVudF9mYXVsdCwKIAkJICAgIHNldF9jb21wb25lbnRfZmF1bHQpOwpAQCAtNTcwLDE0ICs2NDksMTkgQEAKIAkJICAgc2V0X2NvbXBvbmVudF9hY3RpdmUpOwogc3RhdGljIERFVklDRV9BVFRSKGxvY2F0ZSwgU19JUlVHTyB8IFNfSVdVU1IsIGdldF9jb21wb25lbnRfbG9jYXRlLAogCQkgICBzZXRfY29tcG9uZW50X2xvY2F0ZSk7CitzdGF0aWMgREVWSUNFX0FUVFIocG93ZXJfc3RhdHVzLCBTX0lSVUdPIHwgU19JV1VTUiwgZ2V0X2NvbXBvbmVudF9wb3dlcl9zdGF0dXMsCisJCSAgIHNldF9jb21wb25lbnRfcG93ZXJfc3RhdHVzKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih0eXBlLCBTX0lSVUdPLCBnZXRfY29tcG9uZW50X3R5cGUsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHNsb3QsIFNfSVJVR08sIGdldF9jb21wb25lbnRfc2xvdCwgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICplbmNsb3N1cmVfY29tcG9uZW50X2F0dHJzW10gPSB7CiAJJmRldl9hdHRyX2ZhdWx0LmF0dHIsCiAJJmRldl9hdHRyX3N0YXR1cy5hdHRyLAogCSZkZXZfYXR0cl9hY3RpdmUuYXR0ciwKIAkmZGV2X2F0dHJfbG9jYXRlLmF0dHIsCisJJmRldl9hdHRyX3Bvd2VyX3N0YXR1cy5hdHRyLAogCSZkZXZfYXR0cl90eXBlLmF0dHIsCisJJmRldl9hdHRyX3Nsb3QuYXR0ciwKIAlOVUxMCiB9OwogQVRUUklCVVRFX0dST1VQUyhlbmNsb3N1cmVfY29tcG9uZW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy92bXdfdm1jaS92bWNpX3F1ZXVlX3BhaXIuYyBiL2RyaXZlcnMvbWlzYy92bXdfdm1jaS92bWNpX3F1ZXVlX3BhaXIuYwppbmRleCA3YWFhZjUxLi4zNWYxOWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvdm13X3ZtY2kvdm1jaV9xdWV1ZV9wYWlyLmMKKysrIGIvZHJpdmVycy9taXNjL3Ztd192bWNpL3ZtY2lfcXVldWVfcGFpci5jCkBAIC0zNzAsMTIgKzM3MCwxMiBAQAogCQkJdG9fY29weSA9IHNpemUgLSBieXRlc19jb3BpZWQ7CiAKIAkJaWYgKGlzX2lvdmVjKSB7Ci0JCQlzdHJ1Y3QgaW92ZWMgKmlvdiA9IChzdHJ1Y3QgaW92ZWMgKilzcmM7CisJCQlzdHJ1Y3QgbXNnaGRyICptc2cgPSAoc3RydWN0IG1zZ2hkciAqKXNyYzsKIAkJCWludCBlcnI7CiAKIAkJCS8qIFRoZSBpb3ZlYyB3aWxsIHRyYWNrIGJ5dGVzX2NvcGllZCBpbnRlcm5hbGx5LiAqLwotCQkJZXJyID0gbWVtY3B5X2Zyb21pb3ZlYygodTggKil2YSArIHBhZ2Vfb2Zmc2V0LAotCQkJCQkgICAgICAgaW92LCB0b19jb3B5KTsKKwkJCWVyciA9IG1lbWNweV9mcm9tX21zZygodTggKil2YSArIHBhZ2Vfb2Zmc2V0LAorCQkJCQkgICAgICBtc2csIHRvX2NvcHkpOwogCQkJaWYgKGVyciAhPSAwKSB7CiAJCQkJaWYgKGtlcm5lbF9pZi0+aG9zdCkKIAkJCQkJa3VubWFwKGtlcm5lbF9pZi0+dS5oLnBhZ2VbcGFnZV9pbmRleF0pOwpAQCAtNTgwLDcgKzU4MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcXBfbWVtY3B5X3RvX3F1ZXVlX2lvdihzdHJ1Y3Qgdm1jaV9xdWV1ZSAqcXVldWUsCiAJCQkJICB1NjQgcXVldWVfb2Zmc2V0LAotCQkJCSAgY29uc3Qgdm9pZCAqc3JjLAorCQkJCSAgY29uc3Qgdm9pZCAqbXNnLAogCQkJCSAgc2l6ZV90IHNyY19vZmZzZXQsIHNpemVfdCBzaXplKQogewogCkBAIC01ODgsNyArNTg4LDcgQEAKIAkgKiBXZSBpZ25vcmUgc3JjX29mZnNldCBiZWNhdXNlIHNyYyBpcyByZWFsbHkgYSBzdHJ1Y3QgaW92ZWMgKiBhbmQgd2lsbAogCSAqIG1haW50YWluIG9mZnNldCBpbnRlcm5hbGx5LgogCSAqLwotCXJldHVybiBfX3FwX21lbWNweV90b19xdWV1ZShxdWV1ZSwgcXVldWVfb2Zmc2V0LCBzcmMsIHNpemUsIHRydWUpOworCXJldHVybiBfX3FwX21lbWNweV90b19xdWV1ZShxdWV1ZSwgcXVldWVfb2Zmc2V0LCBtc2csIHNpemUsIHRydWUpOwogfQogCiAvKgpAQCAtMzIyMywxMyArMzIyMywxMyBAQAogICogb2YgYnl0ZXMgZW5xdWV1ZWQgb3IgPCAwIG9uIGVycm9yLgogICovCiBzc2l6ZV90IHZtY2lfcXBhaXJfZW5xdWV2KHN0cnVjdCB2bWNpX3FwICpxcGFpciwKLQkJCSAgdm9pZCAqaW92LAorCQkJICBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCQkgIHNpemVfdCBpb3Zfc2l6ZSwKIAkJCSAgaW50IGJ1Zl90eXBlKQogewogCXNzaXplX3QgcmVzdWx0OwogCi0JaWYgKCFxcGFpciB8fCAhaW92KQorCWlmICghcXBhaXIpCiAJCXJldHVybiBWTUNJX0VSUk9SX0lOVkFMSURfQVJHUzsKIAogCXFwX2xvY2socXBhaXIpOwpAQCAtMzIzOCw3ICszMjM4LDcgQEAKIAkJcmVzdWx0ID0gcXBfZW5xdWV1ZV9sb2NrZWQocXBhaXItPnByb2R1Y2VfcSwKIAkJCQkJICAgcXBhaXItPmNvbnN1bWVfcSwKIAkJCQkJICAgcXBhaXItPnByb2R1Y2VfcV9zaXplLAotCQkJCQkgICBpb3YsIGlvdl9zaXplLAorCQkJCQkgICBtc2csIGlvdl9zaXplLAogCQkJCQkgICBxcF9tZW1jcHlfdG9fcXVldWVfaW92KTsKIAogCQlpZiAocmVzdWx0ID09IFZNQ0lfRVJST1JfUVVFVUVQQUlSX05PVF9SRUFEWSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jIGIvZHJpdmVycy9tbWMvY2FyZC9ibG9jay5jCmluZGV4IDQ0MDlkNzkuLmM2OWFmYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvYmxvY2suYworKysgYi9kcml2ZXJzL21tYy9jYXJkL2Jsb2NrLmMKQEAgLTIxNDcsNyArMjE0Nyw3IEBACiAJICovCiAKIAlzbnByaW50ZihtZC0+ZGlzay0+ZGlza19uYW1lLCBzaXplb2YobWQtPmRpc2stPmRpc2tfbmFtZSksCi0JCSAibW1jYmxrJWQlcyIsIG1kLT5uYW1lX2lkeCwgc3VibmFtZSA/IHN1Ym5hbWUgOiAiIik7CisJCSAibW1jYmxrJXUlcyIsIG1kLT5uYW1lX2lkeCwgc3VibmFtZSA/IHN1Ym5hbWUgOiAiIik7CiAKIAlpZiAobW1jX2NhcmRfbW1jKGNhcmQpKQogCQlibGtfcXVldWVfbG9naWNhbF9ibG9ja19zaXplKG1kLT5xdWV1ZS5xdWV1ZSwKQEAgLTIxOTMsNyArMjE5Myw2IEBACiBzdGF0aWMgc3RydWN0IG1tY19ibGtfZGF0YSAqbW1jX2Jsa19hbGxvYyhzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCiB7CiAJc2VjdG9yX3Qgc2l6ZTsKLQlzdHJ1Y3QgbW1jX2Jsa19kYXRhICptZDsKIAogCWlmICghbW1jX2NhcmRfc2QoY2FyZCkgJiYgbW1jX2NhcmRfYmxvY2thZGRyKGNhcmQpKSB7CiAJCS8qCkBAIC0yMjA5LDkgKzIyMDgsOCBAQAogCQlzaXplID0gY2FyZC0+Y3NkLmNhcGFjaXR5IDw8IChjYXJkLT5jc2QucmVhZF9ibGtiaXRzIC0gOSk7CiAJfQogCi0JbWQgPSBtbWNfYmxrX2FsbG9jX3JlcShjYXJkLCAmY2FyZC0+ZGV2LCBzaXplLCBmYWxzZSwgTlVMTCwKKwlyZXR1cm4gbW1jX2Jsa19hbGxvY19yZXEoY2FyZCwgJmNhcmQtPmRldiwgc2l6ZSwgZmFsc2UsIE5VTEwsCiAJCQkJCU1NQ19CTEtfREFUQV9BUkVBX01BSU4pOwotCXJldHVybiBtZDsKIH0KIAogc3RhdGljIGludCBtbWNfYmxrX2FsbG9jX3BhcnQoc3RydWN0IG1tY19jYXJkICpjYXJkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jIGIvZHJpdmVycy9tbWMvY2FyZC9tbWNfdGVzdC5jCmluZGV4IDBhNzQzMGYuLjdkYWM0NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvbW1jX3Rlc3QuYworKysgYi9kcml2ZXJzL21tYy9jYXJkL21tY190ZXN0LmMKQEAgLTIzNDIsMjAgKzIzNDIsMTYgQEAKIAlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSBjYXJkLT5ob3N0OwogCWludCBlcnI7CiAKLQllcnIgPSBtbWNfaHdfcmVzZXRfY2hlY2soaG9zdCk7Ci0JaWYgKCFlcnIpCi0JCXJldHVybiBSRVNVTFRfT0s7Ci0KLQlpZiAoZXJyID09IC1FTk9TWVMpCi0JCXJldHVybiBSRVNVTFRfRkFJTDsKLQotCWlmIChlcnIgIT0gLUVPUE5PVFNVUFApCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAoIW1tY19jYW5fcmVzZXQoY2FyZCkpCisJaWYgKCFtbWNfY2FyZF9tbWMoY2FyZCkgfHwgIW1tY19jYW5fcmVzZXQoY2FyZCkpCiAJCXJldHVybiBSRVNVTFRfVU5TVVBfQ0FSRDsKIAotCXJldHVybiBSRVNVTFRfVU5TVVBfSE9TVDsKKwllcnIgPSBtbWNfaHdfcmVzZXQoaG9zdCk7CisJaWYgKCFlcnIpCisJCXJldHVybiBSRVNVTFRfT0s7CisJZWxzZSBpZiAoZXJyID09IC1FT1BOT1RTVVBQKQorCQlyZXR1cm4gUkVTVUxUX1VOU1VQX0hPU1Q7CisKKwlyZXR1cm4gUkVTVUxUX0ZBSUw7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX3Rlc3RfY2FzZSBtbWNfdGVzdF9jYXNlc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9NYWtlZmlsZSBiL2RyaXZlcnMvbW1jL2NvcmUvTWFrZWZpbGUKaW5kZXggMzhlZDIxMC4uMmMyNTEzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21tYy9jb3JlL01ha2VmaWxlCkBAIC04LDUgKzgsNSBAQAogCQkJCSAgIHNkaW8ubyBzZGlvX29wcy5vIHNkaW9fYnVzLm8gXAogCQkJCSAgIHNkaW9fY2lzLm8gc2Rpb19pby5vIHNkaW9faXJxLm8gXAogCQkJCSAgIHF1aXJrcy5vIHNsb3QtZ3Bpby5vCi0KK21tY19jb3JlLSQoQ09ORklHX09GKQkJKz0gcHdyc2VxLm8gcHdyc2VxX3NpbXBsZS5vIHB3cnNlcV9lbW1jLm8KIG1tY19jb3JlLSQoQ09ORklHX0RFQlVHX0ZTKQkrPSBkZWJ1Z2ZzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMgYi9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCmluZGV4IDg2ZDI3MTEuLmM1ZWYxMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9idXMuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAKICNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgpAQCAtMzIxLDYgKzMyMiw4IEBACiAjZW5kaWYKIAltbWNfaW5pdF9jb250ZXh0X2luZm8oY2FyZC0+aG9zdCk7CiAKKwljYXJkLT5kZXYub2Zfbm9kZSA9IG1tY19vZl9maW5kX2NoaWxkX2RldmljZShjYXJkLT5ob3N0LCAwKTsKKwogCXJldCA9IGRldmljZV9hZGQoJmNhcmQtPmRldik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTM0OSw2ICszNTIsNyBAQAogCQkJCW1tY19ob3N0bmFtZShjYXJkLT5ob3N0KSwgY2FyZC0+cmNhKTsKIAkJfQogCQlkZXZpY2VfZGVsKCZjYXJkLT5kZXYpOworCQlvZl9ub2RlX3B1dChjYXJkLT5kZXYub2Zfbm9kZSk7CiAJfQogCiAJcHV0X2RldmljZSgmY2FyZC0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKaW5kZXggOTU4NGJmZi4uMjNmMTBmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJidXMuaCIKICNpbmNsdWRlICJob3N0LmgiCiAjaW5jbHVkZSAic2Rpb19idXMuaCIKKyNpbmNsdWRlICJwd3JzZXEuaCIKIAogI2luY2x1ZGUgIm1tY19vcHMuaCIKICNpbmNsdWRlICJzZF9vcHMuaCIKQEAgLTE4NSwxMyArMTg2LDE0IEBACiAKIEVYUE9SVF9TWU1CT0wobW1jX3JlcXVlc3RfZG9uZSk7CiAKLXN0YXRpYyB2b2lkCi1tbWNfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQorc3RhdGljIGludCBtbWNfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQogewogI2lmZGVmIENPTkZJR19NTUNfREVCVUcKIAl1bnNpZ25lZCBpbnQgaSwgc3o7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKICNlbmRpZgorCWlmIChtbWNfY2FyZF9yZW1vdmVkKGhvc3QtPmNhcmQpKQorCQlyZXR1cm4gLUVOT01FRElVTTsKIAogCWlmIChtcnEtPnNiYykgewogCQlwcl9kZWJ1ZygiPCVzOiBzdGFydGluZyBDTUQldSBhcmcgJTA4eCBmbGFncyAlMDh4PlxuIiwKQEAgLTI1MSw2ICsyNTMsOCBAQAogCW1tY19ob3N0X2Nsa19ob2xkKGhvc3QpOwogCWxlZF90cmlnZ2VyX2V2ZW50KGhvc3QtPmxlZCwgTEVEX0ZVTEwpOwogCWhvc3QtPm9wcy0+cmVxdWVzdChob3N0LCBtcnEpOworCisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMjcxLDcgKzI3NSw3IEBACiAKIAlCVUdfT04oIWNhcmQpOwogCi0JaWYgKCFjYXJkLT5leHRfY3NkLmJrb3BzX2VuIHx8IG1tY19jYXJkX2RvaW5nX2Jrb3BzKGNhcmQpKQorCWlmICghY2FyZC0+ZXh0X2NzZC5tYW5fYmtvcHNfZW4gfHwgbW1jX2NhcmRfZG9pbmdfYmtvcHMoY2FyZCkpCiAJCXJldHVybjsKIAogCWVyciA9IG1tY19yZWFkX2Jrb3BzX3N0YXR1cyhjYXJkKTsKQEAgLTM0NSwyOSArMzQ5LDM0IEBACiAgKi8KIHN0YXRpYyBpbnQgX19tbWNfc3RhcnRfZGF0YV9yZXEoc3RydWN0IG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSkKIHsKKwlpbnQgZXJyOworCiAJbXJxLT5kb25lID0gbW1jX3dhaXRfZGF0YV9kb25lOwogCW1ycS0+aG9zdCA9IGhvc3Q7Ci0JaWYgKG1tY19jYXJkX3JlbW92ZWQoaG9zdC0+Y2FyZCkpIHsKLQkJbXJxLT5jbWQtPmVycm9yID0gLUVOT01FRElVTTsKLQkJbW1jX3dhaXRfZGF0YV9kb25lKG1ycSk7Ci0JCXJldHVybiAtRU5PTUVESVVNOwotCX0KLQltbWNfc3RhcnRfcmVxdWVzdChob3N0LCBtcnEpOwogCi0JcmV0dXJuIDA7CisJZXJyID0gbW1jX3N0YXJ0X3JlcXVlc3QoaG9zdCwgbXJxKTsKKwlpZiAoZXJyKSB7CisJCW1ycS0+Y21kLT5lcnJvciA9IGVycjsKKwkJbW1jX3dhaXRfZGF0YV9kb25lKG1ycSk7CisJfQorCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBfX21tY19zdGFydF9yZXEoc3RydWN0IG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSkKIHsKKwlpbnQgZXJyOworCiAJaW5pdF9jb21wbGV0aW9uKCZtcnEtPmNvbXBsZXRpb24pOwogCW1ycS0+ZG9uZSA9IG1tY193YWl0X2RvbmU7Ci0JaWYgKG1tY19jYXJkX3JlbW92ZWQoaG9zdC0+Y2FyZCkpIHsKLQkJbXJxLT5jbWQtPmVycm9yID0gLUVOT01FRElVTTsKKworCWVyciA9IG1tY19zdGFydF9yZXF1ZXN0KGhvc3QsIG1ycSk7CisJaWYgKGVycikgeworCQltcnEtPmNtZC0+ZXJyb3IgPSBlcnI7CiAJCWNvbXBsZXRlKCZtcnEtPmNvbXBsZXRpb24pOwotCQlyZXR1cm4gLUVOT01FRElVTTsKIAl9Ci0JbW1jX3N0YXJ0X3JlcXVlc3QoaG9zdCwgbXJxKTsKLQlyZXR1cm4gMDsKKworCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC0xMDc3LDYgKzEwODYsMzAgQEAKIH0KICNlbmRpZgogCitpbnQgbW1jX2V4ZWN1dGVfdHVuaW5nKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSBjYXJkLT5ob3N0OworCXUzMiBvcGNvZGU7CisJaW50IGVycjsKKworCWlmICghaG9zdC0+b3BzLT5leGVjdXRlX3R1bmluZykKKwkJcmV0dXJuIDA7CisKKwlpZiAobW1jX2NhcmRfbW1jKGNhcmQpKQorCQlvcGNvZGUgPSBNTUNfU0VORF9UVU5JTkdfQkxPQ0tfSFMyMDA7CisJZWxzZQorCQlvcGNvZGUgPSBNTUNfU0VORF9UVU5JTkdfQkxPQ0s7CisKKwltbWNfaG9zdF9jbGtfaG9sZChob3N0KTsKKwllcnIgPSBob3N0LT5vcHMtPmV4ZWN1dGVfdHVuaW5nKGhvc3QsIG9wY29kZSk7CisJbW1jX2hvc3RfY2xrX3JlbGVhc2UoaG9zdCk7CisKKwlpZiAoZXJyKQorCQlwcl9lcnIoIiVzOiB0dW5pbmcgZXhlY3V0aW9uIGZhaWxlZFxuIiwgbW1jX2hvc3RuYW1lKGhvc3QpKTsKKworCXJldHVybiBlcnI7Cit9CisKIC8qCiAgKiBDaGFuZ2UgdGhlIGJ1cyBtb2RlIChvcGVuIGRyYWluL3B1c2gtcHVsbCkgb2YgYSBob3N0LgogICovCkBAIC0xMjMyLDYgKzEyNjUsMzQgQEAKIAogI2VuZGlmIC8qIENPTkZJR19PRiAqLwogCitzdGF0aWMgaW50IG1tY19vZl9nZXRfZnVuY19udW0oc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCXUzMiByZWc7CisJaW50IHJldDsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJyZWciLCAmcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiByZWc7Cit9CisKK3N0cnVjdCBkZXZpY2Vfbm9kZSAqbW1jX29mX2ZpbmRfY2hpbGRfZGV2aWNlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwKKwkJdW5zaWduZWQgZnVuY19udW0pCit7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlOworCisJaWYgKCFob3N0LT5wYXJlbnQgfHwgIWhvc3QtPnBhcmVudC0+b2Zfbm9kZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGhvc3QtPnBhcmVudC0+b2Zfbm9kZSwgbm9kZSkgeworCQlpZiAobW1jX29mX2dldF9mdW5jX251bShub2RlKSA9PSBmdW5jX251bSkKKwkJCXJldHVybiBub2RlOworCX0KKworCXJldHVybiBOVUxMOworfQorCiAjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgogCiAvKioKQEAgLTE1NTUsNiArMTYxNiw4IEBACiAKIAltbWNfaG9zdF9jbGtfaG9sZChob3N0KTsKIAorCW1tY19wd3JzZXFfcHJlX3Bvd2VyX29uKGhvc3QpOworCiAJaG9zdC0+aW9zLnZkZCA9IGZscyhvY3IpIC0gMTsKIAlob3N0LT5pb3MucG93ZXJfbW9kZSA9IE1NQ19QT1dFUl9VUDsKIAkvKiBTZXQgaW5pdGlhbCBzdGF0ZSBhbmQgY2FsbCBtbWNfc2V0X2lvcyAqLwpAQCAtMTU3NCw2ICsxNjM3LDggQEAKIAkgKi8KIAltbWNfZGVsYXkoMTApOwogCisJbW1jX3B3cnNlcV9wb3N0X3Bvd2VyX29uKGhvc3QpOworCiAJaG9zdC0+aW9zLmNsb2NrID0gaG9zdC0+Zl9pbml0OwogCiAJaG9zdC0+aW9zLnBvd2VyX21vZGUgPSBNTUNfUE9XRVJfT047CkBAIC0xNTk1LDYgKzE2NjAsOCBAQAogCiAJbW1jX2hvc3RfY2xrX2hvbGQoaG9zdCk7CiAKKwltbWNfcHdyc2VxX3Bvd2VyX29mZihob3N0KTsKKwogCWhvc3QtPmlvcy5jbG9jayA9IDA7CiAJaG9zdC0+aW9zLnZkZCA9IDA7CiAKQEAgLTIyNDUsNjcgKzIzMTIsMjggQEAKIAltbWNfaG9zdF9jbGtfcmVsZWFzZShob3N0KTsKIH0KIAotaW50IG1tY19jYW5fcmVzZXQoc3RydWN0IG1tY19jYXJkICpjYXJkKQotewotCXU4IHJzdF9uX2Z1bmN0aW9uOwotCi0JaWYgKCFtbWNfY2FyZF9tbWMoY2FyZCkpCi0JCXJldHVybiAwOwotCXJzdF9uX2Z1bmN0aW9uID0gY2FyZC0+ZXh0X2NzZC5yc3Rfbl9mdW5jdGlvbjsKLQlpZiAoKHJzdF9uX2Z1bmN0aW9uICYgRVhUX0NTRF9SU1RfTl9FTl9NQVNLKSAhPSBFWFRfQ1NEX1JTVF9OX0VOQUJMRUQpCi0JCXJldHVybiAwOwotCXJldHVybiAxOwotfQotRVhQT1JUX1NZTUJPTChtbWNfY2FuX3Jlc2V0KTsKLQotc3RhdGljIGludCBtbWNfZG9faHdfcmVzZXQoc3RydWN0IG1tY19ob3N0ICpob3N0LCBpbnQgY2hlY2spCi17Ci0Jc3RydWN0IG1tY19jYXJkICpjYXJkID0gaG9zdC0+Y2FyZDsKLQotCWlmICghKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX0hXX1JFU0VUKSB8fCAhaG9zdC0+b3BzLT5od19yZXNldCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKCFjYXJkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghbW1jX2Nhbl9yZXNldChjYXJkKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JbW1jX2hvc3RfY2xrX2hvbGQoaG9zdCk7Ci0JbW1jX3NldF9jbG9jayhob3N0LCBob3N0LT5mX2luaXQpOwotCi0JaG9zdC0+b3BzLT5od19yZXNldChob3N0KTsKLQotCS8qIElmIHRoZSByZXNldCBoYXMgaGFwcGVuZWQsIHRoZW4gYSBzdGF0dXMgY29tbWFuZCB3aWxsIGZhaWwgKi8KLQlpZiAoY2hlY2spIHsKLQkJdTMyIHN0YXR1czsKLQotCQlpZiAoIW1tY19zZW5kX3N0YXR1cyhjYXJkLCAmc3RhdHVzKSkgewotCQkJbW1jX2hvc3RfY2xrX3JlbGVhc2UoaG9zdCk7Ci0JCQlyZXR1cm4gLUVOT1NZUzsKLQkJfQotCX0KLQotCS8qIFNldCBpbml0aWFsIHN0YXRlIGFuZCBjYWxsIG1tY19zZXRfaW9zICovCi0JbW1jX3NldF9pbml0aWFsX3N0YXRlKGhvc3QpOwotCi0JbW1jX2hvc3RfY2xrX3JlbGVhc2UoaG9zdCk7Ci0KLQlyZXR1cm4gaG9zdC0+YnVzX29wcy0+cG93ZXJfcmVzdG9yZShob3N0KTsKLX0KLQogaW50IG1tY19od19yZXNldChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCiB7Ci0JcmV0dXJuIG1tY19kb19od19yZXNldChob3N0LCAwKTsKKwlpbnQgcmV0OworCisJaWYgKCFob3N0LT5jYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1tY19idXNfZ2V0KGhvc3QpOworCWlmICghaG9zdC0+YnVzX29wcyB8fCBob3N0LT5idXNfZGVhZCB8fCAhaG9zdC0+YnVzX29wcy0+cmVzZXQpIHsKKwkJbW1jX2J1c19wdXQoaG9zdCk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlyZXQgPSBob3N0LT5idXNfb3BzLT5yZXNldChob3N0KTsKKwltbWNfYnVzX3B1dChob3N0KTsKKworCXByX3dhcm4oIiVzOiB0cmllZCB0byByZXNldCBjYXJkXG4iLCBtbWNfaG9zdG5hbWUoaG9zdCkpOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wobW1jX2h3X3Jlc2V0KTsKIAotaW50IG1tY19od19yZXNldF9jaGVjayhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCi17Ci0JcmV0dXJuIG1tY19kb19od19yZXNldChob3N0LCAxKTsKLX0KLUVYUE9SVF9TWU1CT0wobW1jX2h3X3Jlc2V0X2NoZWNrKTsKLQogc3RhdGljIGludCBtbWNfcmVzY2FuX3RyeV9mcmVxKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdW5zaWduZWQgZnJlcSkKIHsKIAlob3N0LT5mX2luaXQgPSBmcmVxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmggYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaAppbmRleCBkNzY1OTdjLi5jZmJhM2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaAorKysgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuaApAQCAtMjcsMTEgKzI3LDE1IEBACiAJaW50ICgqcG93ZXJfcmVzdG9yZSkoc3RydWN0IG1tY19ob3N0ICopOwogCWludCAoKmFsaXZlKShzdHJ1Y3QgbW1jX2hvc3QgKik7CiAJaW50ICgqc2h1dGRvd24pKHN0cnVjdCBtbWNfaG9zdCAqKTsKKwlpbnQgKCpyZXNldCkoc3RydWN0IG1tY19ob3N0ICopOwogfTsKIAogdm9pZCBtbWNfYXR0YWNoX2J1cyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIGNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyAqb3BzKTsKIHZvaWQgbW1jX2RldGFjaF9idXMoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKIAorc3RydWN0IGRldmljZV9ub2RlICptbWNfb2ZfZmluZF9jaGlsZF9kZXZpY2Uoc3RydWN0IG1tY19ob3N0ICpob3N0LAorCQl1bnNpZ25lZCBmdW5jX251bSk7CisKIHZvaWQgbW1jX2luaXRfZXJhc2Uoc3RydWN0IG1tY19jYXJkICpjYXJkKTsKIAogdm9pZCBtbWNfc2V0X2NoaXBfc2VsZWN0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgaW50IG1vZGUpOwpAQCAtODIsNSArODYsOCBAQAogdm9pZCBtbWNfcmVtb3ZlX2NhcmRfZGVidWdmcyhzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOwogCiB2b2lkIG1tY19pbml0X2NvbnRleHRfaW5mbyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworCitpbnQgbW1jX2V4ZWN1dGVfdHVuaW5nKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7CisKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL2hvc3QuYyBiL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCmluZGV4IDI3MGQ1OGEuLjhiZTBkZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCkBAIC0yOSwxMyArMjksMjAgQEAKIAogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJob3N0LmgiCisjaW5jbHVkZSAic2xvdC1ncGlvLmgiCisjaW5jbHVkZSAicHdyc2VxLmgiCiAKICNkZWZpbmUgY2xzX2Rldl90b19tbWNfaG9zdChkKQljb250YWluZXJfb2YoZCwgc3RydWN0IG1tY19ob3N0LCBjbGFzc19kZXYpCiAKK3N0YXRpYyBERUZJTkVfSURSKG1tY19ob3N0X2lkcik7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1tY19ob3N0X2xvY2spOworCiBzdGF0aWMgdm9pZCBtbWNfaG9zdF9jbGFzc2Rldl9yZWxlYXNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSBjbHNfZGV2X3RvX21tY19ob3N0KGRldik7Ci0JbXV0ZXhfZGVzdHJveSgmaG9zdC0+c2xvdC5sb2NrKTsKKwlzcGluX2xvY2soJm1tY19ob3N0X2xvY2spOworCWlkcl9yZW1vdmUoJm1tY19ob3N0X2lkciwgaG9zdC0+aW5kZXgpOworCXNwaW5fdW5sb2NrKCZtbWNfaG9zdF9sb2NrKTsKIAlrZnJlZShob3N0KTsKIH0KIApAQCAtNTQsOSArNjEsNiBAQAogCWNsYXNzX3VucmVnaXN0ZXIoJm1tY19ob3N0X2NsYXNzKTsKIH0KIAotc3RhdGljIERFRklORV9JRFIobW1jX2hvc3RfaWRyKTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobW1jX2hvc3RfbG9jayk7Ci0KICNpZmRlZiBDT05GSUdfTU1DX0NMS0dBVEUKIHN0YXRpYyBzc2l6ZV90IGNsa2dhdGVfZGVsYXlfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC0zNjcsMTYgKzM3MSwxMCBAQAogCiAJCXJldCA9IG1tY19ncGlvZF9yZXF1ZXN0X2NkKGhvc3QsICJjZCIsIDAsIHRydWUsCiAJCQkJCSAgIDAsICZjZF9ncGlvX2ludmVydCk7Ci0JCWlmIChyZXQpIHsKLQkJCWlmIChyZXQgPT0gLUVQUk9CRV9ERUZFUikKLQkJCQlyZXR1cm4gcmV0OwotCQkJaWYgKHJldCAhPSAtRU5PRU5UKSB7Ci0JCQkJZGV2X2Vycihob3N0LT5wYXJlbnQsCi0JCQkJCSJGYWlsZWQgdG8gcmVxdWVzdCBDRCBHUElPOiAlZFxuIiwKLQkJCQkJcmV0KTsKLQkJCX0KLQkJfSBlbHNlCisJCWlmICghcmV0KQogCQkJZGV2X2luZm8oaG9zdC0+cGFyZW50LCAiR290IENEIEdQSU9cbiIpOworCQllbHNlIGlmIChyZXQgIT0gLUVOT0VOVCkKKwkJCXJldHVybiByZXQ7CiAKIAkJLyoKIAkJICogVGhlcmUgYXJlIHR3byB3YXlzIHRvIGZsYWcgdGhhdCB0aGUgQ0QgbGluZSBpcyBpbnZlcnRlZDoKQEAgLTM5NywxNiArMzk1LDEwIEBACiAJcm9fY2FwX2ludmVydCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgIndwLWludmVydGVkIik7CiAKIAlyZXQgPSBtbWNfZ3Bpb2RfcmVxdWVzdF9ybyhob3N0LCAid3AiLCAwLCBmYWxzZSwgMCwgJnJvX2dwaW9faW52ZXJ0KTsKLQlpZiAocmV0KSB7Ci0JCWlmIChyZXQgPT0gLUVQUk9CRV9ERUZFUikKLQkJCWdvdG8gb3V0OwotCQlpZiAocmV0ICE9IC1FTk9FTlQpIHsKLQkJCWRldl9lcnIoaG9zdC0+cGFyZW50LAotCQkJCSJGYWlsZWQgdG8gcmVxdWVzdCBXUCBHUElPOiAlZFxuIiwKLQkJCQlyZXQpOwotCQl9Ci0JfSBlbHNlCisJaWYgKCFyZXQpCiAJCWRldl9pbmZvKGhvc3QtPnBhcmVudCwgIkdvdCBXUCBHUElPXG4iKTsKKwllbHNlIGlmIChyZXQgIT0gLUVOT0VOVCkKKwkJcmV0dXJuIHJldDsKIAogCS8qIFNlZSB0aGUgY29tbWVudCBvbiBDRCBpbnZlcnNpb24gYWJvdmUgKi8KIAlpZiAocm9fY2FwX2ludmVydCBeIHJvX2dwaW9faW52ZXJ0KQpAQCAtNDU3LDExICs0NDksNyBAQAogCQlob3N0LT5kc3JfcmVxID0gMDsKIAl9CiAKLQlyZXR1cm4gMDsKLQotb3V0OgotCW1tY19ncGlvX2ZyZWVfY2QoaG9zdCk7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbW1jX3B3cnNlcV9hbGxvYyhob3N0KTsKIH0KIAogRVhQT1JUX1NZTUJPTChtbWNfb2ZfcGFyc2UpOwpAQCAtNDkxLDggKzQ3OSwxMCBAQAogCQlob3N0LT5pbmRleCA9IGVycjsKIAlzcGluX3VubG9jaygmbW1jX2hvc3RfbG9jayk7CiAJaWRyX3ByZWxvYWRfZW5kKCk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gZnJlZTsKKwlpZiAoZXJyIDwgMCkgeworCQlrZnJlZShob3N0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCiAJZGV2X3NldF9uYW1lKCZob3N0LT5jbGFzc19kZXYsICJtbWMlZCIsIGhvc3QtPmluZGV4KTsKIApAQCAtNTAxLDEwICs0OTEsMTIgQEAKIAlob3N0LT5jbGFzc19kZXYuY2xhc3MgPSAmbW1jX2hvc3RfY2xhc3M7CiAJZGV2aWNlX2luaXRpYWxpemUoJmhvc3QtPmNsYXNzX2Rldik7CiAKLQltbWNfaG9zdF9jbGtfaW5pdChob3N0KTsKKwlpZiAobW1jX2dwaW9fYWxsb2MoaG9zdCkpIHsKKwkJcHV0X2RldmljZSgmaG9zdC0+Y2xhc3NfZGV2KTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0JbXV0ZXhfaW5pdCgmaG9zdC0+c2xvdC5sb2NrKTsKLQlob3N0LT5zbG90LmNkX2lycSA9IC1FSU5WQUw7CisJbW1jX2hvc3RfY2xrX2luaXQoaG9zdCk7CiAKIAlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaG9zdC0+d3EpOwpAQCAtNTI1LDEwICs1MTcsNiBAQAogCWhvc3QtPm1heF9ibGtfY291bnQgPSBQQUdFX0NBQ0hFX1NJWkUgLyA1MTI7CiAKIAlyZXR1cm4gaG9zdDsKLQotZnJlZToKLQlrZnJlZShob3N0KTsKLQlyZXR1cm4gTlVMTDsKIH0KIAogRVhQT1JUX1NZTUJPTChtbWNfYWxsb2NfaG9zdCk7CkBAIC02MDEsMTAgKzU4OSw3IEBACiAgKi8KIHZvaWQgbW1jX2ZyZWVfaG9zdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCiB7Ci0Jc3Bpbl9sb2NrKCZtbWNfaG9zdF9sb2NrKTsKLQlpZHJfcmVtb3ZlKCZtbWNfaG9zdF9pZHIsIGhvc3QtPmluZGV4KTsKLQlzcGluX3VubG9jaygmbW1jX2hvc3RfbG9jayk7Ci0KKwltbWNfcHdyc2VxX2ZyZWUoaG9zdCk7CiAJcHV0X2RldmljZSgmaG9zdC0+Y2xhc3NfZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9tbWMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMKaW5kZXggNzQ2NmNlMC4uMWQ0MWU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9tbWMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL21tYy5jCkBAIC00ODMsMTEgKzQ4MywxMyBAQAogCQkvKiBjaGVjayB3aGV0aGVyIHRoZSBlTU1DIGNhcmQgc3VwcG9ydHMgQktPUFMgKi8KIAkJaWYgKGV4dF9jc2RbRVhUX0NTRF9CS09QU19TVVBQT1JUXSAmIDB4MSkgewogCQkJY2FyZC0+ZXh0X2NzZC5ia29wcyA9IDE7Ci0JCQljYXJkLT5leHRfY3NkLmJrb3BzX2VuID0gZXh0X2NzZFtFWFRfQ1NEX0JLT1BTX0VOXTsKKwkJCWNhcmQtPmV4dF9jc2QubWFuX2Jrb3BzX2VuID0KKwkJCQkJKGV4dF9jc2RbRVhUX0NTRF9CS09QU19FTl0gJgorCQkJCQkJRVhUX0NTRF9NQU5VQUxfQktPUFNfTUFTSyk7CiAJCQljYXJkLT5leHRfY3NkLnJhd19ia29wc19zdGF0dXMgPQogCQkJCWV4dF9jc2RbRVhUX0NTRF9CS09QU19TVEFUVVNdOwotCQkJaWYgKCFjYXJkLT5leHRfY3NkLmJrb3BzX2VuKQotCQkJCXByX2luZm8oIiVzOiBCS09QU19FTiBiaXQgaXMgbm90IHNldFxuIiwKKwkJCWlmICghY2FyZC0+ZXh0X2NzZC5tYW5fYmtvcHNfZW4pCisJCQkJcHJfaW5mbygiJXM6IE1BTl9CS09QU19FTiBiaXQgaXMgbm90IHNldFxuIiwKIAkJCQkJbW1jX2hvc3RuYW1lKGNhcmQtPmhvc3QpKTsKIAkJfQogCkBAIC0xMTU1LDM4ICsxMTU3LDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1jb25zdCB1OCB0dW5pbmdfYmxrX3BhdHRlcm5fNGJpdFtNTUNfVFVOSU5HX0JMS19QQVRURVJOXzRCSVRfU0laRV0gPSB7Ci0JMHhmZiwgMHgwZiwgMHhmZiwgMHgwMCwgMHhmZiwgMHhjYywgMHhjMywgMHhjYywKLQkweGMzLCAweDNjLCAweGNjLCAweGZmLCAweGZlLCAweGZmLCAweGZlLCAweGVmLAotCTB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZGQsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmIsCi0JMHhiZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHg3NywgMHhmNywgMHhiZCwgMHhlZiwKLQkweGZmLCAweGYwLCAweGZmLCAweGYwLCAweDBmLCAweGZjLCAweGNjLCAweDNjLAotCTB4Y2MsIDB4MzMsIDB4Y2MsIDB4Y2YsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZWUsCi0JMHhmZiwgMHhmZCwgMHhmZiwgMHhmZCwgMHhkZiwgMHhmZiwgMHhiZiwgMHhmZiwKLQkweGJiLCAweGZmLCAweGY3LCAweGZmLCAweGY3LCAweDdmLCAweDdiLCAweGRlLAotfTsKLUVYUE9SVF9TWU1CT0wodHVuaW5nX2Jsa19wYXR0ZXJuXzRiaXQpOwotCi1jb25zdCB1OCB0dW5pbmdfYmxrX3BhdHRlcm5fOGJpdFtNTUNfVFVOSU5HX0JMS19QQVRURVJOXzhCSVRfU0laRV0gPSB7Ci0JMHhmZiwgMHhmZiwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLQkweGZmLCAweGZmLCAweGNjLCAweGNjLCAweGNjLCAweDMzLCAweGNjLCAweGNjLAotCTB4Y2MsIDB4MzMsIDB4MzMsIDB4Y2MsIDB4Y2MsIDB4Y2MsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhlZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZSwgMHhlZSwgMHhmZiwKLQkweGZmLCAweGZmLCAweGRkLCAweGZmLCAweGZmLCAweGZmLCAweGRkLCAweGRkLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmIsCi0JMHhiYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3NywgMHhmZiwgMHhmZiwgMHhmZiwKLQkweDc3LCAweDc3LCAweGZmLCAweDc3LCAweGJiLCAweGRkLCAweGVlLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsCi0JMHgwMCwgMHhmZiwgMHhmZiwgMHhjYywgMHhjYywgMHhjYywgMHgzMywgMHhjYywKLQkweGNjLCAweGNjLCAweDMzLCAweDMzLCAweGNjLCAweGNjLCAweGNjLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZWUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWUsIDB4ZWUsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhkZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZCwKLQkweGRkLCAweGZmLCAweGZmLCAweGZmLCAweGJiLCAweGZmLCAweGZmLCAweGZmLAotCTB4YmIsIDB4YmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NzcsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHg3NywgMHg3NywgMHhmZiwgMHg3NywgMHhiYiwgMHhkZCwgMHhlZSwKLX07Ci1FWFBPUlRfU1lNQk9MKHR1bmluZ19ibGtfcGF0dGVybl84Yml0KTsKLQogLyoKICAqIEV4ZWN1dGUgdHVuaW5nIHNlcXVlbmNlIHRvIHNlZWsgdGhlIHByb3BlciBidXMgb3BlcmF0aW5nCiAgKiBjb25kaXRpb25zIGZvciBIUzIwMCBhbmQgSFM0MDAsIHdoaWNoIHNlbmRzIENNRDIxIHRvIHRoZSBkZXZpY2UuCkBAIC0xMTk0LDcgKzExNjQsNiBAQAogc3RhdGljIGludCBtbWNfaHMyMDBfdHVuaW5nKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QgPSBjYXJkLT5ob3N0OwotCWludCBlcnIgPSAwOwogCiAJLyoKIAkgKiBUaW1pbmcgc2hvdWxkIGJlIGFkanVzdGVkIHRvIHRoZSBIUzQwMCB0YXJnZXQKQEAgLTEyMDUsMTggKzExNzQsNyBAQAogCQlpZiAoaG9zdC0+b3BzLT5wcmVwYXJlX2hzNDAwX3R1bmluZykKIAkJCWhvc3QtPm9wcy0+cHJlcGFyZV9oczQwMF90dW5pbmcoaG9zdCwgJmhvc3QtPmlvcyk7CiAKLQlpZiAoaG9zdC0+b3BzLT5leGVjdXRlX3R1bmluZykgewotCQltbWNfaG9zdF9jbGtfaG9sZChob3N0KTsKLQkJZXJyID0gaG9zdC0+b3BzLT5leGVjdXRlX3R1bmluZyhob3N0LAotCQkJCU1NQ19TRU5EX1RVTklOR19CTE9DS19IUzIwMCk7Ci0JCW1tY19ob3N0X2Nsa19yZWxlYXNlKGhvc3QpOwotCi0JCWlmIChlcnIpCi0JCQlwcl9lcnIoIiVzOiB0dW5pbmcgZXhlY3V0aW9uIGZhaWxlZFxuIiwKLQkJCQltbWNfaG9zdG5hbWUoaG9zdCkpOwotCX0KLQotCXJldHVybiBlcnI7CisJcmV0dXJuIG1tY19leGVjdXRlX3R1bmluZyhjYXJkKTsKIH0KIAogLyoKQEAgLTEyOTcsNiArMTI1NSwxMiBAQAogCX0KIAogCS8qCisJICogQ2FsbCB0aGUgb3B0aW9uYWwgSEMncyBpbml0X2NhcmQgZnVuY3Rpb24gdG8gaGFuZGxlIHF1aXJrcy4KKwkgKi8KKwlpZiAoaG9zdC0+b3BzLT5pbml0X2NhcmQpCisJCWhvc3QtPm9wcy0+aW5pdF9jYXJkKGhvc3QsIGNhcmQpOworCisJLyoKIAkgKiBGb3IgbmF0aXZlIGJ1c3NlczogIHNldCBjYXJkIFJDQSBhbmQgcXVpdCBvcGVuIGRyYWluIG1vZGUuCiAJICovCiAJaWYgKCFtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKQEAgLTE4MjEsNiArMTc4NSw0NiBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCBtbWNfY2FuX3Jlc2V0KHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwl1OCByc3Rfbl9mdW5jdGlvbjsKKworCXJzdF9uX2Z1bmN0aW9uID0gY2FyZC0+ZXh0X2NzZC5yc3Rfbl9mdW5jdGlvbjsKKwlpZiAoKHJzdF9uX2Z1bmN0aW9uICYgRVhUX0NTRF9SU1RfTl9FTl9NQVNLKSAhPSBFWFRfQ1NEX1JTVF9OX0VOQUJMRUQpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorRVhQT1JUX1NZTUJPTChtbWNfY2FuX3Jlc2V0KTsKKworc3RhdGljIGludCBtbWNfcmVzZXQoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IGhvc3QtPmNhcmQ7CisJdTMyIHN0YXR1czsKKworCWlmICghKGhvc3QtPmNhcHMgJiBNTUNfQ0FQX0hXX1JFU0VUKSB8fCAhaG9zdC0+b3BzLT5od19yZXNldCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCFtbWNfY2FuX3Jlc2V0KGNhcmQpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwltbWNfaG9zdF9jbGtfaG9sZChob3N0KTsKKwltbWNfc2V0X2Nsb2NrKGhvc3QsIGhvc3QtPmZfaW5pdCk7CisKKwlob3N0LT5vcHMtPmh3X3Jlc2V0KGhvc3QpOworCisJLyogSWYgdGhlIHJlc2V0IGhhcyBoYXBwZW5lZCwgdGhlbiBhIHN0YXR1cyBjb21tYW5kIHdpbGwgZmFpbCAqLworCWlmICghbW1jX3NlbmRfc3RhdHVzKGNhcmQsICZzdGF0dXMpKSB7CisJCW1tY19ob3N0X2Nsa19yZWxlYXNlKGhvc3QpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisKKwkvKiBTZXQgaW5pdGlhbCBzdGF0ZSBhbmQgY2FsbCBtbWNfc2V0X2lvcyAqLworCW1tY19zZXRfaW5pdGlhbF9zdGF0ZShob3N0KTsKKwltbWNfaG9zdF9jbGtfcmVsZWFzZShob3N0KTsKKworCXJldHVybiBtbWNfcG93ZXJfcmVzdG9yZShob3N0KTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfYnVzX29wcyBtbWNfb3BzID0gewogCS5yZW1vdmUgPSBtbWNfcmVtb3ZlLAogCS5kZXRlY3QgPSBtbWNfZGV0ZWN0LApAQCAtMTgzMSw2ICsxODM1LDcgQEAKIAkucG93ZXJfcmVzdG9yZSA9IG1tY19wb3dlcl9yZXN0b3JlLAogCS5hbGl2ZSA9IG1tY19hbGl2ZSwKIAkuc2h1dGRvd24gPSBtbWNfc2h1dGRvd24sCisJLnJlc2V0ID0gbW1jX3Jlc2V0LAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jX29wcy5jIGIvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMKaW5kZXggM2IwNDRjNS4uMGVhMDQyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9tbWNfb3BzLmMKQEAgLTIzLDYgKzIzLDM2IEBACiAKICNkZWZpbmUgTU1DX09QU19USU1FT1VUX01TCSgxMCAqIDYwICogMTAwMCkgLyogMTAgbWludXRlIHRpbWVvdXQgKi8KIAorc3RhdGljIGNvbnN0IHU4IHR1bmluZ19ibGtfcGF0dGVybl80Yml0W10gPSB7CisJMHhmZiwgMHgwZiwgMHhmZiwgMHgwMCwgMHhmZiwgMHhjYywgMHhjMywgMHhjYywKKwkweGMzLCAweDNjLCAweGNjLCAweGZmLCAweGZlLCAweGZmLCAweGZlLCAweGVmLAorCTB4ZmYsIDB4ZGYsIDB4ZmYsIDB4ZGQsIDB4ZmYsIDB4ZmIsIDB4ZmYsIDB4ZmIsCisJMHhiZiwgMHhmZiwgMHg3ZiwgMHhmZiwgMHg3NywgMHhmNywgMHhiZCwgMHhlZiwKKwkweGZmLCAweGYwLCAweGZmLCAweGYwLCAweDBmLCAweGZjLCAweGNjLCAweDNjLAorCTB4Y2MsIDB4MzMsIDB4Y2MsIDB4Y2YsIDB4ZmYsIDB4ZWYsIDB4ZmYsIDB4ZWUsCisJMHhmZiwgMHhmZCwgMHhmZiwgMHhmZCwgMHhkZiwgMHhmZiwgMHhiZiwgMHhmZiwKKwkweGJiLCAweGZmLCAweGY3LCAweGZmLCAweGY3LCAweDdmLCAweDdiLCAweGRlLAorfTsKKworc3RhdGljIGNvbnN0IHU4IHR1bmluZ19ibGtfcGF0dGVybl84Yml0W10gPSB7CisJMHhmZiwgMHhmZiwgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKKwkweGZmLCAweGZmLCAweGNjLCAweGNjLCAweGNjLCAweDMzLCAweGNjLCAweGNjLAorCTB4Y2MsIDB4MzMsIDB4MzMsIDB4Y2MsIDB4Y2MsIDB4Y2MsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHhlZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlZSwgMHhlZSwgMHhmZiwKKwkweGZmLCAweGZmLCAweGRkLCAweGZmLCAweGZmLCAweGZmLCAweGRkLCAweGRkLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4YmIsCisJMHhiYiwgMHhmZiwgMHhmZiwgMHhmZiwgMHg3NywgMHhmZiwgMHhmZiwgMHhmZiwKKwkweDc3LCAweDc3LCAweGZmLCAweDc3LCAweGJiLCAweGRkLCAweGVlLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsCisJMHgwMCwgMHhmZiwgMHhmZiwgMHhjYywgMHhjYywgMHhjYywgMHgzMywgMHhjYywKKwkweGNjLCAweGNjLCAweDMzLCAweDMzLCAweGNjLCAweGNjLCAweGNjLCAweGZmLAorCTB4ZmYsIDB4ZmYsIDB4ZWUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWUsIDB4ZWUsCisJMHhmZiwgMHhmZiwgMHhmZiwgMHhkZCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhkZCwKKwkweGRkLCAweGZmLCAweGZmLCAweGZmLCAweGJiLCAweGZmLCAweGZmLCAweGZmLAorCTB4YmIsIDB4YmIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4NzcsIDB4ZmYsIDB4ZmYsCisJMHhmZiwgMHg3NywgMHg3NywgMHhmZiwgMHg3NywgMHhiYiwgMHhkZCwgMHhlZSwKK307CisKIHN0YXRpYyBpbmxpbmUgaW50IF9fbW1jX3NlbmRfc3RhdHVzKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgdTMyICpzdGF0dXMsCiAJCQkJICAgIGJvb2wgaWdub3JlX2NyYykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvcHdyc2VxLmMgYi9kcml2ZXJzL21tYy9jb3JlL3B3cnNlcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MjM1NjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21tYy9jb3JlL3B3cnNlcS5jCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNCBMaW5hcm8gTHRkCisgKgorICogQXV0aG9yOiBVbGYgSGFuc3NvbiA8dWxmLmhhbnNzb25AbGluYXJvLm9yZz4KKyAqCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqCisgKiAgTU1DIHBvd2VyIHNlcXVlbmNlIG1hbmFnZW1lbnQKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKworI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisKKyNpbmNsdWRlICJwd3JzZXEuaCIKKworc3RydWN0IG1tY19wd3JzZXFfbWF0Y2ggeworCWNvbnN0IGNoYXIgKmNvbXBhdGlibGU7CisJaW50ICgqYWxsb2MpKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IGRldmljZSAqZGV2KTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbW1jX3B3cnNlcV9tYXRjaCBwd3JzZXFfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21wYXRpYmxlID0gIm1tYy1wd3JzZXEtc2ltcGxlIiwKKwkJLmFsbG9jID0gbW1jX3B3cnNlcV9zaW1wbGVfYWxsb2MsCisJfSwgeworCQkuY29tcGF0aWJsZSA9ICJtbWMtcHdyc2VxLWVtbWMiLAorCQkuYWxsb2MgPSBtbWNfcHdyc2VxX2VtbWNfYWxsb2MsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbW1jX3B3cnNlcV9tYXRjaCAqbW1jX3B3cnNlcV9maW5kKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCit7CisJc3RydWN0IG1tY19wd3JzZXFfbWF0Y2ggKm1hdGNoID0gRVJSX1BUUigtRU5PREVWKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHB3cnNlcV9tYXRjaCk7IGkrKykgeworCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsCXB3cnNlcV9tYXRjaFtpXS5jb21wYXRpYmxlKSkgeworCQkJbWF0Y2ggPSAmcHdyc2VxX21hdGNoW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gbWF0Y2g7Cit9CisKK2ludCBtbWNfcHdyc2VxX2FsbG9jKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IG1tY19wd3JzZXFfbWF0Y2ggKm1hdGNoOworCWludCByZXQgPSAwOworCisJbnAgPSBvZl9wYXJzZV9waGFuZGxlKGhvc3QtPnBhcmVudC0+b2Zfbm9kZSwgIm1tYy1wd3JzZXEiLCAwKTsKKwlpZiAoIW5wKQorCQlyZXR1cm4gMDsKKworCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKG5wKTsKKwlpZiAoIXBkZXYpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnI7CisJfQorCisJbWF0Y2ggPSBtbWNfcHdyc2VxX2ZpbmQobnApOworCWlmIChJU19FUlIobWF0Y2gpKSB7CisJCXJldCA9IFBUUl9FUlIobWF0Y2gpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBtYXRjaC0+YWxsb2MoaG9zdCwgJnBkZXYtPmRldik7CisJaWYgKCFyZXQpCisJCWRldl9pbmZvKGhvc3QtPnBhcmVudCwgImFsbG9jYXRlZCBtbWMtcHdyc2VxXG4iKTsKKworZXJyOgorCW9mX25vZGVfcHV0KG5wKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIG1tY19wd3JzZXFfcHJlX3Bvd2VyX29uKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgbW1jX3B3cnNlcSAqcHdyc2VxID0gaG9zdC0+cHdyc2VxOworCisJaWYgKHB3cnNlcSAmJiBwd3JzZXEtPm9wcyAmJiBwd3JzZXEtPm9wcy0+cHJlX3Bvd2VyX29uKQorCQlwd3JzZXEtPm9wcy0+cHJlX3Bvd2VyX29uKGhvc3QpOworfQorCit2b2lkIG1tY19wd3JzZXFfcG9zdF9wb3dlcl9vbihzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG1tY19wd3JzZXEgKnB3cnNlcSA9IGhvc3QtPnB3cnNlcTsKKworCWlmIChwd3JzZXEgJiYgcHdyc2VxLT5vcHMgJiYgcHdyc2VxLT5vcHMtPnBvc3RfcG93ZXJfb24pCisJCXB3cnNlcS0+b3BzLT5wb3N0X3Bvd2VyX29uKGhvc3QpOworfQorCit2b2lkIG1tY19wd3JzZXFfcG93ZXJfb2ZmKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgbW1jX3B3cnNlcSAqcHdyc2VxID0gaG9zdC0+cHdyc2VxOworCisJaWYgKHB3cnNlcSAmJiBwd3JzZXEtPm9wcyAmJiBwd3JzZXEtPm9wcy0+cG93ZXJfb2ZmKQorCQlwd3JzZXEtPm9wcy0+cG93ZXJfb2ZmKGhvc3QpOworfQorCit2b2lkIG1tY19wd3JzZXFfZnJlZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG1tY19wd3JzZXEgKnB3cnNlcSA9IGhvc3QtPnB3cnNlcTsKKworCWlmIChwd3JzZXEgJiYgcHdyc2VxLT5vcHMgJiYgcHdyc2VxLT5vcHMtPmZyZWUpCisJCXB3cnNlcS0+b3BzLT5mcmVlKGhvc3QpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9wd3JzZXEuaCBiL2RyaXZlcnMvbW1jL2NvcmUvcHdyc2VxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJhMzQwOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvcHdyc2VxLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBMaW5hcm8gTHRkCisgKgorICogQXV0aG9yOiBVbGYgSGFuc3NvbiA8dWxmLmhhbnNzb25AbGluYXJvLm9yZz4KKyAqCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqLworI2lmbmRlZiBfTU1DX0NPUkVfUFdSU0VRX0gKKyNkZWZpbmUgX01NQ19DT1JFX1BXUlNFUV9ICisKK3N0cnVjdCBtbWNfcHdyc2VxX29wcyB7CisJdm9pZCAoKnByZV9wb3dlcl9vbikoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKKwl2b2lkICgqcG9zdF9wb3dlcl9vbikoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKKwl2b2lkICgqcG93ZXJfb2ZmKShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworCXZvaWQgKCpmcmVlKShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworfTsKKworc3RydWN0IG1tY19wd3JzZXEgeworCXN0cnVjdCBtbWNfcHdyc2VxX29wcyAqb3BzOworfTsKKworI2lmZGVmIENPTkZJR19PRgorCitpbnQgbW1jX3B3cnNlcV9hbGxvYyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwordm9pZCBtbWNfcHdyc2VxX3ByZV9wb3dlcl9vbihzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwordm9pZCBtbWNfcHdyc2VxX3Bvc3RfcG93ZXJfb24oc3RydWN0IG1tY19ob3N0ICpob3N0KTsKK3ZvaWQgbW1jX3B3cnNlcV9wb3dlcl9vZmYoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKK3ZvaWQgbW1jX3B3cnNlcV9mcmVlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CisKK2ludCBtbWNfcHdyc2VxX3NpbXBsZV9hbGxvYyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBkZXZpY2UgKmRldik7CitpbnQgbW1jX3B3cnNlcV9lbW1jX2FsbG9jKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IGRldmljZSAqZGV2KTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgbW1jX3B3cnNlcV9hbGxvYyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNfcHdyc2VxX3ByZV9wb3dlcl9vbihzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgbW1jX3B3cnNlcV9wb3N0X3Bvd2VyX29uKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNfcHdyc2VxX3Bvd2VyX29mZihzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgbW1jX3B3cnNlcV9mcmVlKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkge30KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9wd3JzZXFfZW1tYy5jIGIvZHJpdmVycy9tbWMvY29yZS9wd3JzZXFfZW1tYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZDU0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21tYy9jb3JlL3B3cnNlcV9lbW1jLmMKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgorICogQXV0aG9yOiBNYXJlayBTenlwcm93c2tpIDxtLnN6eXByb3dza2lAc2Ftc3VuZy5jb20+CisgKgorICogTGljZW5zZSB0ZXJtczogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgdmVyc2lvbiAyCisgKgorICogU2ltcGxlIGVNTUMgaGFyZHdhcmUgcmVzZXQgcHJvdmlkZXIKKyAqLworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKworI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisKKyNpbmNsdWRlICJwd3JzZXEuaCIKKworc3RydWN0IG1tY19wd3JzZXFfZW1tYyB7CisJc3RydWN0IG1tY19wd3JzZXEgcHdyc2VxOworCXN0cnVjdCBub3RpZmllcl9ibG9jayByZXNldF9uYjsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvOworfTsKKworc3RhdGljIHZvaWQgX19tbWNfcHdyc2VxX2VtbWNfcmVzZXQoc3RydWN0IG1tY19wd3JzZXFfZW1tYyAqcHdyc2VxKQoreworCWdwaW9kX3NldF92YWx1ZShwd3JzZXEtPnJlc2V0X2dwaW8sIDEpOworCXVkZWxheSgxKTsKKwlncGlvZF9zZXRfdmFsdWUocHdyc2VxLT5yZXNldF9ncGlvLCAwKTsKKwl1ZGVsYXkoMjAwKTsKK30KKworc3RhdGljIHZvaWQgbW1jX3B3cnNlcV9lbW1jX3Jlc2V0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKK3sKKwlzdHJ1Y3QgbW1jX3B3cnNlcV9lbW1jICpwd3JzZXEgPSBjb250YWluZXJfb2YoaG9zdC0+cHdyc2VxLAorCQkJCQlzdHJ1Y3QgbW1jX3B3cnNlcV9lbW1jLCBwd3JzZXEpOworCisJX19tbWNfcHdyc2VxX2VtbWNfcmVzZXQocHdyc2VxKTsKK30KKworc3RhdGljIHZvaWQgbW1jX3B3cnNlcV9lbW1jX2ZyZWUoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfcHdyc2VxX2VtbWMgKnB3cnNlcSA9IGNvbnRhaW5lcl9vZihob3N0LT5wd3JzZXEsCisJCQkJCXN0cnVjdCBtbWNfcHdyc2VxX2VtbWMsIHB3cnNlcSk7CisKKwl1bnJlZ2lzdGVyX3Jlc3RhcnRfaGFuZGxlcigmcHdyc2VxLT5yZXNldF9uYik7CisJZ3Bpb2RfcHV0KHB3cnNlcS0+cmVzZXRfZ3Bpbyk7CisJa2ZyZWUocHdyc2VxKTsKKwlob3N0LT5wd3JzZXEgPSBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IG1tY19wd3JzZXFfb3BzIG1tY19wd3JzZXFfZW1tY19vcHMgPSB7CisJLnBvc3RfcG93ZXJfb24gPSBtbWNfcHdyc2VxX2VtbWNfcmVzZXQsCisJLmZyZWUgPSBtbWNfcHdyc2VxX2VtbWNfZnJlZSwKK307CisKK3N0YXRpYyBpbnQgbW1jX3B3cnNlcV9lbW1jX3Jlc2V0X25iKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBtb2RlLCB2b2lkICpjbWQpCit7CisJc3RydWN0IG1tY19wd3JzZXFfZW1tYyAqcHdyc2VxID0gY29udGFpbmVyX29mKHRoaXMsCisJCQkJCXN0cnVjdCBtbWNfcHdyc2VxX2VtbWMsIHJlc2V0X25iKTsKKworCV9fbW1jX3B3cnNlcV9lbW1jX3Jlc2V0KHB3cnNlcSk7CisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitpbnQgbW1jX3B3cnNlcV9lbW1jX2FsbG9jKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBtbWNfcHdyc2VxX2VtbWMgKnB3cnNlcTsKKwlpbnQgcmV0ID0gMDsKKworCXB3cnNlcSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtbWNfcHdyc2VxX2VtbWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXB3cnNlcSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwd3JzZXEtPnJlc2V0X2dwaW8gPSBncGlvZF9nZXRfaW5kZXgoZGV2LCAicmVzZXQiLCAwLCBHUElPRF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKHB3cnNlcS0+cmVzZXRfZ3BpbykpIHsKKwkJcmV0ID0gUFRSX0VSUihwd3JzZXEtPnJlc2V0X2dwaW8pOworCQlnb3RvIGZyZWU7CisJfQorCisJLyoKKwkgKiByZWdpc3RlciByZXNldCBoYW5kbGVyIHRvIGVuc3VyZSBlbW1jIHJlc2V0IGFsc28gZnJvbQorCSAqIGVtZXJnZW5jeV9yZWJvb3QoKSwgcHJpb3JpdHkgMTI5IHNjaGVkdWxlcyBpdCBqdXN0IGJlZm9yZQorCSAqIHN5c3RlbSByZWJvb3QKKwkgKi8KKwlwd3JzZXEtPnJlc2V0X25iLm5vdGlmaWVyX2NhbGwgPSBtbWNfcHdyc2VxX2VtbWNfcmVzZXRfbmI7CisJcHdyc2VxLT5yZXNldF9uYi5wcmlvcml0eSA9IDEyOTsKKwlyZWdpc3Rlcl9yZXN0YXJ0X2hhbmRsZXIoJnB3cnNlcS0+cmVzZXRfbmIpOworCisJcHdyc2VxLT5wd3JzZXEub3BzID0gJm1tY19wd3JzZXFfZW1tY19vcHM7CisJaG9zdC0+cHdyc2VxID0gJnB3cnNlcS0+cHdyc2VxOworCisJcmV0dXJuIDA7CitmcmVlOgorCWtmcmVlKHB3cnNlcSk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvcHdyc2VxX3NpbXBsZS5jIGIvZHJpdmVycy9tbWMvY29yZS9wd3JzZXFfc2ltcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlmMWQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvcHdyc2VxX3NpbXBsZS5jCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNCBMaW5hcm8gTHRkCisgKgorICogQXV0aG9yOiBVbGYgSGFuc3NvbiA8dWxmLmhhbnNzb25AbGluYXJvLm9yZz4KKyAqCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqCisgKiAgU2ltcGxlIE1NQyBwb3dlciBzZXF1ZW5jZSBtYW5hZ2VtZW50CisgKi8KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8vY29uc3VtZXIuaD4KKworI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CisKKyNpbmNsdWRlICJwd3JzZXEuaCIKKworc3RydWN0IG1tY19wd3JzZXFfc2ltcGxlIHsKKwlzdHJ1Y3QgbW1jX3B3cnNlcSBwd3JzZXE7CisJYm9vbCBjbGtfZW5hYmxlZDsKKwlzdHJ1Y3QgY2xrICpleHRfY2xrOworCWludCBucl9ncGlvczsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpyZXNldF9ncGlvc1swXTsKK307CisKK3N0YXRpYyB2b2lkIG1tY19wd3JzZXFfc2ltcGxlX3NldF9ncGlvc192YWx1ZShzdHJ1Y3QgbW1jX3B3cnNlcV9zaW1wbGUgKnB3cnNlcSwKKwkJCQkJICAgICAgaW50IHZhbHVlKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHB3cnNlcS0+bnJfZ3Bpb3M7IGkrKykKKwkJaWYgKCFJU19FUlIocHdyc2VxLT5yZXNldF9ncGlvc1tpXSkpCisJCQlncGlvZF9zZXRfdmFsdWVfY2Fuc2xlZXAocHdyc2VxLT5yZXNldF9ncGlvc1tpXSwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBtbWNfcHdyc2VxX3NpbXBsZV9wcmVfcG93ZXJfb24oc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfcHdyc2VxX3NpbXBsZSAqcHdyc2VxID0gY29udGFpbmVyX29mKGhvc3QtPnB3cnNlcSwKKwkJCQkJc3RydWN0IG1tY19wd3JzZXFfc2ltcGxlLCBwd3JzZXEpOworCisJaWYgKCFJU19FUlIocHdyc2VxLT5leHRfY2xrKSAmJiAhcHdyc2VxLT5jbGtfZW5hYmxlZCkgeworCQljbGtfcHJlcGFyZV9lbmFibGUocHdyc2VxLT5leHRfY2xrKTsKKwkJcHdyc2VxLT5jbGtfZW5hYmxlZCA9IHRydWU7CisJfQorCisJbW1jX3B3cnNlcV9zaW1wbGVfc2V0X2dwaW9zX3ZhbHVlKHB3cnNlcSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIG1tY19wd3JzZXFfc2ltcGxlX3Bvc3RfcG93ZXJfb24oc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCXN0cnVjdCBtbWNfcHdyc2VxX3NpbXBsZSAqcHdyc2VxID0gY29udGFpbmVyX29mKGhvc3QtPnB3cnNlcSwKKwkJCQkJc3RydWN0IG1tY19wd3JzZXFfc2ltcGxlLCBwd3JzZXEpOworCisJbW1jX3B3cnNlcV9zaW1wbGVfc2V0X2dwaW9zX3ZhbHVlKHB3cnNlcSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIG1tY19wd3JzZXFfc2ltcGxlX3Bvd2VyX29mZihzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG1tY19wd3JzZXFfc2ltcGxlICpwd3JzZXEgPSBjb250YWluZXJfb2YoaG9zdC0+cHdyc2VxLAorCQkJCQlzdHJ1Y3QgbW1jX3B3cnNlcV9zaW1wbGUsIHB3cnNlcSk7CisKKwltbWNfcHdyc2VxX3NpbXBsZV9zZXRfZ3Bpb3NfdmFsdWUocHdyc2VxLCAxKTsKKworCWlmICghSVNfRVJSKHB3cnNlcS0+ZXh0X2NsaykgJiYgcHdyc2VxLT5jbGtfZW5hYmxlZCkgeworCQljbGtfZGlzYWJsZV91bnByZXBhcmUocHdyc2VxLT5leHRfY2xrKTsKKwkJcHdyc2VxLT5jbGtfZW5hYmxlZCA9IGZhbHNlOworCX0KK30KKworc3RhdGljIHZvaWQgbW1jX3B3cnNlcV9zaW1wbGVfZnJlZShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IG1tY19wd3JzZXFfc2ltcGxlICpwd3JzZXEgPSBjb250YWluZXJfb2YoaG9zdC0+cHdyc2VxLAorCQkJCQlzdHJ1Y3QgbW1jX3B3cnNlcV9zaW1wbGUsIHB3cnNlcSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHdyc2VxLT5ucl9ncGlvczsgaSsrKQorCQlpZiAoIUlTX0VSUihwd3JzZXEtPnJlc2V0X2dwaW9zW2ldKSkKKwkJCWdwaW9kX3B1dChwd3JzZXEtPnJlc2V0X2dwaW9zW2ldKTsKKworCWlmICghSVNfRVJSKHB3cnNlcS0+ZXh0X2NsaykpCisJCWNsa19wdXQocHdyc2VxLT5leHRfY2xrKTsKKworCWtmcmVlKHB3cnNlcSk7CisJaG9zdC0+cHdyc2VxID0gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBtbWNfcHdyc2VxX29wcyBtbWNfcHdyc2VxX3NpbXBsZV9vcHMgPSB7CisJLnByZV9wb3dlcl9vbiA9IG1tY19wd3JzZXFfc2ltcGxlX3ByZV9wb3dlcl9vbiwKKwkucG9zdF9wb3dlcl9vbiA9IG1tY19wd3JzZXFfc2ltcGxlX3Bvc3RfcG93ZXJfb24sCisJLnBvd2VyX29mZiA9IG1tY19wd3JzZXFfc2ltcGxlX3Bvd2VyX29mZiwKKwkuZnJlZSA9IG1tY19wd3JzZXFfc2ltcGxlX2ZyZWUsCit9OworCitpbnQgbW1jX3B3cnNlcV9zaW1wbGVfYWxsb2Moc3RydWN0IG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1tY19wd3JzZXFfc2ltcGxlICpwd3JzZXE7CisJaW50IGksIG5yX2dwaW9zLCByZXQgPSAwOworCisJbnJfZ3Bpb3MgPSBvZl9ncGlvX25hbWVkX2NvdW50KGRldi0+b2Zfbm9kZSwgInJlc2V0LWdwaW9zIik7CisJaWYgKG5yX2dwaW9zIDwgMCkKKwkJbnJfZ3Bpb3MgPSAwOworCisJcHdyc2VxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1tY19wd3JzZXFfc2ltcGxlKSArIG5yX2dwaW9zICoKKwkJCSBzaXplb2Yoc3RydWN0IGdwaW9fZGVzYyAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwd3JzZXEpCisJCXJldHVybiAtRU5PTUVNOworCisJcHdyc2VxLT5leHRfY2xrID0gY2xrX2dldChkZXYsICJleHRfY2xvY2siKTsKKwlpZiAoSVNfRVJSKHB3cnNlcS0+ZXh0X2NsaykgJiYKKwkgICAgUFRSX0VSUihwd3JzZXEtPmV4dF9jbGspICE9IC1FTk9FTlQpIHsKKwkJcmV0ID0gUFRSX0VSUihwd3JzZXEtPmV4dF9jbGspOworCQlnb3RvIGZyZWU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5yX2dwaW9zOyBpKyspIHsKKwkJcHdyc2VxLT5yZXNldF9ncGlvc1tpXSA9IGdwaW9kX2dldF9pbmRleChkZXYsICJyZXNldCIsIGksCisJCQkJCQkJIEdQSU9EX09VVF9ISUdIKTsKKwkJaWYgKElTX0VSUihwd3JzZXEtPnJlc2V0X2dwaW9zW2ldKSAmJgorCQkgICAgUFRSX0VSUihwd3JzZXEtPnJlc2V0X2dwaW9zW2ldKSAhPSAtRU5PRU5UICYmCisJCSAgICBQVFJfRVJSKHB3cnNlcS0+cmVzZXRfZ3Bpb3NbaV0pICE9IC1FTk9TWVMpIHsKKwkJCXJldCA9IFBUUl9FUlIocHdyc2VxLT5yZXNldF9ncGlvc1tpXSk7CisKKwkJCXdoaWxlICgtLWkpCisJCQkJZ3Bpb2RfcHV0KHB3cnNlcS0+cmVzZXRfZ3Bpb3NbaV0pOworCisJCQlnb3RvIGNsa19wdXQ7CisJCX0KKwl9CisKKwlwd3JzZXEtPm5yX2dwaW9zID0gbnJfZ3Bpb3M7CisJcHdyc2VxLT5wd3JzZXEub3BzID0gJm1tY19wd3JzZXFfc2ltcGxlX29wczsKKwlob3N0LT5wd3JzZXEgPSAmcHdyc2VxLT5wd3JzZXE7CisKKwlyZXR1cm4gMDsKK2Nsa19wdXQ6CisJaWYgKCFJU19FUlIocHdyc2VxLT5leHRfY2xrKSkKKwkJY2xrX3B1dChwd3JzZXEtPmV4dF9jbGspOworZnJlZToKKwlrZnJlZShwd3JzZXEpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkLmMKaW5kZXggZDkwYTZkZS4uYWQ0ZDQzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZC5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2QuYwpAQCAtNjYwLDE1ICs2NjAsMTAgQEAKIAkgKiBTUEkgbW9kZSBkb2Vzbid0IGRlZmluZSBDTUQxOSBhbmQgdHVuaW5nIGlzIG9ubHkgdmFsaWQgZm9yIFNEUjUwIGFuZAogCSAqIFNEUjEwNCBtb2RlIFNELWNhcmRzLiBOb3RlIHRoYXQgdHVuaW5nIGlzIG1hbmRhdG9yeSBmb3IgU0RSMTA0LgogCSAqLwotCWlmICghbW1jX2hvc3RfaXNfc3BpKGNhcmQtPmhvc3QpICYmIGNhcmQtPmhvc3QtPm9wcy0+ZXhlY3V0ZV90dW5pbmcgJiYKLQkJCShjYXJkLT5zZF9idXNfc3BlZWQgPT0gVUhTX1NEUjUwX0JVU19TUEVFRCB8fAotCQkJIGNhcmQtPnNkX2J1c19zcGVlZCA9PSBVSFNfU0RSMTA0X0JVU19TUEVFRCkpIHsKLQkJbW1jX2hvc3RfY2xrX2hvbGQoY2FyZC0+aG9zdCk7Ci0JCWVyciA9IGNhcmQtPmhvc3QtPm9wcy0+ZXhlY3V0ZV90dW5pbmcoY2FyZC0+aG9zdCwKLQkJCQkJCSAgICAgIE1NQ19TRU5EX1RVTklOR19CTE9DSyk7Ci0JCW1tY19ob3N0X2Nsa19yZWxlYXNlKGNhcmQtPmhvc3QpOwotCX0KLQorCWlmICghbW1jX2hvc3RfaXNfc3BpKGNhcmQtPmhvc3QpICYmCisJICAgIChjYXJkLT5zZF9idXNfc3BlZWQgPT0gVUhTX1NEUjUwX0JVU19TUEVFRCB8fAorCSAgICAgY2FyZC0+c2RfYnVzX3NwZWVkID09IFVIU19TRFIxMDRfQlVTX1NQRUVEKSkKKwkJZXJyID0gbW1jX2V4ZWN1dGVfdHVuaW5nKGNhcmQpOwogb3V0OgogCWtmcmVlKHN0YXR1cyk7CiAKQEAgLTkzMyw2ICs5MjgsMTIgQEAKIAl9CiAKIAkvKgorCSAqIENhbGwgdGhlIG9wdGlvbmFsIEhDJ3MgaW5pdF9jYXJkIGZ1bmN0aW9uIHRvIGhhbmRsZSBxdWlya3MuCisJICovCisJaWYgKGhvc3QtPm9wcy0+aW5pdF9jYXJkKQorCQlob3N0LT5vcHMtPmluaXRfY2FyZChob3N0LCBjYXJkKTsKKworCS8qCiAJICogRm9yIG5hdGl2ZSBidXNzZXM6ICBnZXQgY2FyZCBSQ0EgYW5kIHF1aXQgb3BlbiBkcmFpbiBtb2RlLgogCSAqLwogCWlmICghbW1jX2hvc3RfaXNfc3BpKGhvc3QpKSB7CkBAIC0xMTkxLDYgKzExOTIsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IG1tY19zZF9yZXNldChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCit7CisJbW1jX3Bvd2VyX2N5Y2xlKGhvc3QsIGhvc3QtPmNhcmQtPm9jcik7CisJcmV0dXJuIG1tY19zZF9wb3dlcl9yZXN0b3JlKGhvc3QpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19idXNfb3BzIG1tY19zZF9vcHMgPSB7CiAJLnJlbW92ZSA9IG1tY19zZF9yZW1vdmUsCiAJLmRldGVjdCA9IG1tY19zZF9kZXRlY3QsCkBAIC0xMjAxLDYgKzEyMDgsNyBAQAogCS5wb3dlcl9yZXN0b3JlID0gbW1jX3NkX3Bvd2VyX3Jlc3RvcmUsCiAJLmFsaXZlID0gbW1jX3NkX2FsaXZlLAogCS5zaHV0ZG93biA9IG1tY19zZF9zdXNwZW5kLAorCS5yZXNldCA9IG1tY19zZF9yZXNldCwKIH07CiAKIC8qCkBAIC0xMjcxLDQgKzEyNzksMyBAQAogCiAJcmV0dXJuIGVycjsKIH0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwppbmRleCBmZDA3NTBiLi5jZTZjYzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYwpAQCAtNTY3LDE3ICs1NjcsMTEgQEAKIAkgKiBTUEkgbW9kZSBkb2Vzbid0IGRlZmluZSBDTUQxOSBhbmQgdHVuaW5nIGlzIG9ubHkgdmFsaWQgZm9yIFNEUjUwIGFuZAogCSAqIFNEUjEwNCBtb2RlIFNELWNhcmRzLiBOb3RlIHRoYXQgdHVuaW5nIGlzIG1hbmRhdG9yeSBmb3IgU0RSMTA0LgogCSAqLwotCWlmICghbW1jX2hvc3RfaXNfc3BpKGNhcmQtPmhvc3QpICYmIGNhcmQtPmhvc3QtPm9wcy0+ZXhlY3V0ZV90dW5pbmcgJiYKLQkJCSgoY2FyZC0+c3dfY2Fwcy5zZDNfYnVzX21vZGUgJiBTRF9NT0RFX1VIU19TRFI1MCkgfHwKLQkJCSAoY2FyZC0+c3dfY2Fwcy5zZDNfYnVzX21vZGUgJiBTRF9NT0RFX1VIU19TRFIxMDQpKSkgewotCQltbWNfaG9zdF9jbGtfaG9sZChjYXJkLT5ob3N0KTsKLQkJZXJyID0gY2FyZC0+aG9zdC0+b3BzLT5leGVjdXRlX3R1bmluZyhjYXJkLT5ob3N0LAotCQkJCQkJICAgICAgTU1DX1NFTkRfVFVOSU5HX0JMT0NLKTsKLQkJbW1jX2hvc3RfY2xrX3JlbGVhc2UoY2FyZC0+aG9zdCk7Ci0JfQotCisJaWYgKCFtbWNfaG9zdF9pc19zcGkoY2FyZC0+aG9zdCkgJiYKKwkgICAgKChjYXJkLT5zd19jYXBzLnNkM19idXNfbW9kZSAmIFNEX01PREVfVUhTX1NEUjUwKSB8fAorCSAgICAgKGNhcmQtPnN3X2NhcHMuc2QzX2J1c19tb2RlICYgU0RfTU9ERV9VSFNfU0RSMTA0KSkpCisJCWVyciA9IG1tY19leGVjdXRlX3R1bmluZyhjYXJkKTsKIG91dDoKLQogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYwppbmRleCA2MDg4NTMxLi5iZWUwMmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jCkBAIC0yMiw3ICsyMiw5IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9zZGlvX2Z1bmMuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgogCisjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgInNkaW9fY2lzLmgiCiAjaW5jbHVkZSAic2Rpb19idXMuaCIKIApAQCAtMjk1LDYgKzI5NywxMyBAQAogc3RhdGljIGlubGluZSB2b2lkIHNkaW9fYWNwaV9zZXRfaGFuZGxlKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpIHt9CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgc2Rpb19zZXRfb2Zfbm9kZShzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQoreworCXN0cnVjdCBtbWNfaG9zdCAqaG9zdCA9IGZ1bmMtPmNhcmQtPmhvc3Q7CisKKwlmdW5jLT5kZXYub2Zfbm9kZSA9IG1tY19vZl9maW5kX2NoaWxkX2RldmljZShob3N0LCBmdW5jLT5udW0pOworfQorCiAvKgogICogUmVnaXN0ZXIgYSBuZXcgU0RJTyBmdW5jdGlvbiB3aXRoIHRoZSBkcml2ZXIgbW9kZWwuCiAgKi8KQEAgLTMwNCw2ICszMTMsNyBAQAogCiAJZGV2X3NldF9uYW1lKCZmdW5jLT5kZXYsICIlczolZCIsIG1tY19jYXJkX2lkKGZ1bmMtPmNhcmQpLCBmdW5jLT5udW0pOwogCisJc2Rpb19zZXRfb2Zfbm9kZShmdW5jKTsKIAlzZGlvX2FjcGlfc2V0X2hhbmRsZShmdW5jKTsKIAlyZXQgPSBkZXZpY2VfYWRkKCZmdW5jLT5kZXYpOwogCWlmIChyZXQgPT0gMCkgewpAQCAtMzI3LDYgKzMzNyw3IEBACiAKIAlkZXZfcG1fZG9tYWluX2RldGFjaCgmZnVuYy0+ZGV2LCBmYWxzZSk7CiAJZGV2aWNlX2RlbCgmZnVuYy0+ZGV2KTsKKwlvZl9ub2RlX3B1dChmdW5jLT5kZXYub2Zfbm9kZSk7CiAJcHV0X2RldmljZSgmZnVuYy0+ZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zbG90LWdwaW8uYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2xvdC1ncGlvLmMKaW5kZXggNjliYmYyYS4uMjcxMTdiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zbG90LWdwaW8uYworKysgYi9kcml2ZXJzL21tYy9jb3JlL3Nsb3QtZ3Bpby5jCkBAIC0xOCwxMSArMTgsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKKyNpbmNsdWRlICJzbG90LWdwaW8uaCIKKwogc3RydWN0IG1tY19ncGlvIHsKIAlzdHJ1Y3QgZ3Bpb19kZXNjICpyb19ncGlvOwogCXN0cnVjdCBncGlvX2Rlc2MgKmNkX2dwaW87CiAJYm9vbCBvdmVycmlkZV9yb19hY3RpdmVfbGV2ZWw7CiAJYm9vbCBvdmVycmlkZV9jZF9hY3RpdmVfbGV2ZWw7CisJaXJxcmV0dXJuX3QgKCpjZF9ncGlvX2lzcikoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAljaGFyICpyb19sYWJlbDsKIAljaGFyIGNkX2xhYmVsWzBdOwogfTsKQEAgLTM4LDMyICs0MSwyMCBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBtbWNfZ3Bpb19hbGxvYyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCitpbnQgbW1jX2dwaW9fYWxsb2Moc3RydWN0IG1tY19ob3N0ICpob3N0KQogewogCXNpemVfdCBsZW4gPSBzdHJsZW4oZGV2X25hbWUoaG9zdC0+cGFyZW50KSkgKyA0OwotCXN0cnVjdCBtbWNfZ3BpbyAqY3R4OworCXN0cnVjdCBtbWNfZ3BpbyAqY3R4ID0gZGV2bV9remFsbG9jKGhvc3QtPnBhcmVudCwKKwkJCQlzaXplb2YoKmN0eCkgKyAyICogbGVuLAlHRlBfS0VSTkVMKTsKIAotCW11dGV4X2xvY2soJmhvc3QtPnNsb3QubG9jayk7Ci0KLQljdHggPSBob3N0LT5zbG90LmhhbmRsZXJfcHJpdjsKLQlpZiAoIWN0eCkgewotCQkvKgotCQkgKiBkZXZtX2t6YWxsb2MoKSBjYW4gYmUgY2FsbGVkIGFmdGVyIGRldmljZV9pbml0aWFsaXplKCksIGV2ZW4KLQkJICogYmVmb3JlIGRldmljZV9hZGQoKSwgaS5lLiwgYmV0d2VlbiBtbWNfYWxsb2NfaG9zdCgpIGFuZAotCQkgKiBtbWNfYWRkX2hvc3QoKQotCQkgKi8KLQkJY3R4ID0gZGV2bV9remFsbG9jKCZob3N0LT5jbGFzc19kZXYsIHNpemVvZigqY3R4KSArIDIgKiBsZW4sCi0JCQkJICAgR0ZQX0tFUk5FTCk7Ci0JCWlmIChjdHgpIHsKLQkJCWN0eC0+cm9fbGFiZWwgPSBjdHgtPmNkX2xhYmVsICsgbGVuOwotCQkJc25wcmludGYoY3R4LT5jZF9sYWJlbCwgbGVuLCAiJXMgY2QiLCBkZXZfbmFtZShob3N0LT5wYXJlbnQpKTsKLQkJCXNucHJpbnRmKGN0eC0+cm9fbGFiZWwsIGxlbiwgIiVzIHJvIiwgZGV2X25hbWUoaG9zdC0+cGFyZW50KSk7Ci0JCQlob3N0LT5zbG90LmhhbmRsZXJfcHJpdiA9IGN0eDsKLQkJfQorCWlmIChjdHgpIHsKKwkJY3R4LT5yb19sYWJlbCA9IGN0eC0+Y2RfbGFiZWwgKyBsZW47CisJCXNucHJpbnRmKGN0eC0+Y2RfbGFiZWwsIGxlbiwgIiVzIGNkIiwgZGV2X25hbWUoaG9zdC0+cGFyZW50KSk7CisJCXNucHJpbnRmKGN0eC0+cm9fbGFiZWwsIGxlbiwgIiVzIHJvIiwgZGV2X25hbWUoaG9zdC0+cGFyZW50KSk7CisJCWhvc3QtPnNsb3QuaGFuZGxlcl9wcml2ID0gY3R4OworCQlob3N0LT5zbG90LmNkX2lycSA9IC1FSU5WQUw7CiAJfQogCi0JbXV0ZXhfdW5sb2NrKCZob3N0LT5zbG90LmxvY2spOwotCiAJcmV0dXJuIGN0eCA/IDAgOiAtRU5PTUVNOwogfQogCkBAIC0xMDMsMjkgKzk0LDE5IEBACiAgKiBAZ3BpbzogZ3BpbyBudW1iZXIgcmVxdWVzdGVkCiAgKgogICogQXMgZGV2bV8qIG1hbmFnZWQgZnVuY3Rpb25zIGFyZSB1c2VkIGluIG1tY19ncGlvX3JlcXVlc3Rfcm8oKSwgY2xpZW50Ci0gKiBkcml2ZXJzIGRvIG5vdCBuZWVkIHRvIGV4cGxpY2l0bHkgY2FsbCBtbWNfZ3Bpb19mcmVlX3JvKCkgZm9yIGZyZWVpbmcgdXAsCi0gKiBpZiB0aGUgcmVxdWVzdGluZyBhbmQgZnJlZWluZyBhcmUgb25seSBuZWVkZWQgYXQgcHJvYmluZyBhbmQgdW5iaW5kaW5nIHRpbWUKLSAqIGZvciBvbmNlLiAgSG93ZXZlciwgaWYgY2xpZW50IGRyaXZlcnMgZG8gc29tZXRoaW5nIHNwZWNpYWwgbGlrZSBydW50aW1lCi0gKiBzd2l0Y2hpbmcgZm9yIHdyaXRlLXByb3RlY3Rpb24sIHRoZXkgYXJlIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nCi0gKiBtbWNfZ3Bpb19yZXF1ZXN0X3JvKCkgYW5kIG1tY19ncGlvX2ZyZWVfcm8oKSBhcyBhIHBhaXIgb24gdGhlaXIgb3duLgorICogZHJpdmVycyBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBmcmVlaW5nIHVwIG1lbW9yeS4KICAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBhbiBlcnJvci4KICAqLwogaW50IG1tY19ncGlvX3JlcXVlc3Rfcm8oc3RydWN0IG1tY19ob3N0ICpob3N0LCB1bnNpZ25lZCBpbnQgZ3BpbykKIHsKLQlzdHJ1Y3QgbW1jX2dwaW8gKmN0eDsKKwlzdHJ1Y3QgbW1jX2dwaW8gKmN0eCA9IGhvc3QtPnNsb3QuaGFuZGxlcl9wcml2OwogCWludCByZXQ7CiAKIAlpZiAoIWdwaW9faXNfdmFsaWQoZ3BpbykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gbW1jX2dwaW9fYWxsb2MoaG9zdCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQljdHggPSBob3N0LT5zbG90LmhhbmRsZXJfcHJpdjsKLQotCXJldCA9IGRldm1fZ3Bpb19yZXF1ZXN0X29uZSgmaG9zdC0+Y2xhc3NfZGV2LCBncGlvLCBHUElPRl9ESVJfSU4sCisJcmV0ID0gZGV2bV9ncGlvX3JlcXVlc3Rfb25lKGhvc3QtPnBhcmVudCwgZ3BpbywgR1BJT0ZfRElSX0lOLAogCQkJCSAgICBjdHgtPnJvX2xhYmVsKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTE1Niw4ICsxMzcsMTAgQEAKIAkJaXJxID0gLUVJTlZBTDsKIAogCWlmIChpcnEgPj0gMCkgewotCQlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZob3N0LT5jbGFzc19kZXYsIGlycSwKLQkJCU5VTEwsIG1tY19ncGlvX2NkX2lycXQsCisJCWlmICghY3R4LT5jZF9ncGlvX2lzcikKKwkJCWN0eC0+Y2RfZ3Bpb19pc3IgPSBtbWNfZ3Bpb19jZF9pcnF0OworCQlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKGhvc3QtPnBhcmVudCwgaXJxLAorCQkJTlVMTCwgY3R4LT5jZF9ncGlvX2lzciwKIAkJCUlSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfT05FU0hPVCwKIAkJCWN0eC0+Y2RfbGFiZWwsIGhvc3QpOwogCQlpZiAocmV0IDwgMCkKQEAgLTE3MSw2ICsxNTQsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0wobW1jX2dwaW9kX3JlcXVlc3RfY2RfaXJxKTsKIAorLyogUmVnaXN0ZXIgYW4gYWx0ZXJuYXRlIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgZm9yCisgKiB0aGUgY2FyZC1kZXRlY3QgR1BJTy4KKyAqLwordm9pZCBtbWNfZ3Bpb19zZXRfY2RfaXNyKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwKKwkJCSBpcnFyZXR1cm5fdCAoKmlzcikoaW50IGlycSwgdm9pZCAqZGV2X2lkKSkKK3sKKwlzdHJ1Y3QgbW1jX2dwaW8gKmN0eCA9IGhvc3QtPnNsb3QuaGFuZGxlcl9wcml2OworCisJV0FSTl9PTihjdHgtPmNkX2dwaW9faXNyKTsKKwljdHgtPmNkX2dwaW9faXNyID0gaXNyOworfQorRVhQT1JUX1NZTUJPTChtbWNfZ3Bpb19zZXRfY2RfaXNyKTsKKwogLyoqCiAgKiBtbWNfZ3Bpb19yZXF1ZXN0X2NkIC0gcmVxdWVzdCBhIGdwaW8gZm9yIGNhcmQtZGV0ZWN0aW9uCiAgKiBAaG9zdDogbW1jIGhvc3QKQEAgLTE3OCwxMSArMTc0LDcgQEAKICAqIEBkZWJvdW5jZTogZGVib3VuY2UgdGltZSBpbiBtaWNyb3NlY29uZHMKICAqCiAgKiBBcyBkZXZtXyogbWFuYWdlZCBmdW5jdGlvbnMgYXJlIHVzZWQgaW4gbW1jX2dwaW9fcmVxdWVzdF9jZCgpLCBjbGllbnQKLSAqIGRyaXZlcnMgZG8gbm90IG5lZWQgdG8gZXhwbGljaXRseSBjYWxsIG1tY19ncGlvX2ZyZWVfY2QoKSBmb3IgZnJlZWluZyB1cCwKLSAqIGlmIHRoZSByZXF1ZXN0aW5nIGFuZCBmcmVlaW5nIGFyZSBvbmx5IG5lZWRlZCBhdCBwcm9iaW5nIGFuZCB1bmJpbmRpbmcgdGltZQotICogZm9yIG9uY2UuICBIb3dldmVyLCBpZiBjbGllbnQgZHJpdmVycyBkbyBzb21ldGhpbmcgc3BlY2lhbCBsaWtlIHJ1bnRpbWUKLSAqIHN3aXRjaGluZyBmb3IgY2FyZC1kZXRlY3Rpb24sIHRoZXkgYXJlIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nCi0gKiBtbWNfZ3Bpb19yZXF1ZXN0X2NkKCkgYW5kIG1tY19ncGlvX2ZyZWVfY2QoKSBhcyBhIHBhaXIgb24gdGhlaXIgb3duLgorICogZHJpdmVycyBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBmcmVlaW5nIHVwIG1lbW9yeS4KICAqCiAgKiBJZiBHUElPIGRlYm91bmNpbmcgaXMgZGVzaXJlZCwgc2V0IHRoZSBkZWJvdW5jZSBwYXJhbWV0ZXIgdG8gYSBub24temVybwogICogdmFsdWUuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIEdQSU8gZHJpdmVyIGFzc29jaWF0ZWQKQEAgLTE5MywxNiArMTg1LDEwIEBACiBpbnQgbW1jX2dwaW9fcmVxdWVzdF9jZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBncGlvLAogCQkJdW5zaWduZWQgaW50IGRlYm91bmNlKQogewotCXN0cnVjdCBtbWNfZ3BpbyAqY3R4OworCXN0cnVjdCBtbWNfZ3BpbyAqY3R4ID0gaG9zdC0+c2xvdC5oYW5kbGVyX3ByaXY7CiAJaW50IHJldDsKIAotCXJldCA9IG1tY19ncGlvX2FsbG9jKGhvc3QpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JY3R4ID0gaG9zdC0+c2xvdC5oYW5kbGVyX3ByaXY7Ci0KLQlyZXQgPSBkZXZtX2dwaW9fcmVxdWVzdF9vbmUoJmhvc3QtPmNsYXNzX2RldiwgZ3BpbywgR1BJT0ZfRElSX0lOLAorCXJldCA9IGRldm1fZ3Bpb19yZXF1ZXN0X29uZShob3N0LT5wYXJlbnQsIGdwaW8sIEdQSU9GX0RJUl9JTiwKIAkJCQkgICAgY3R4LT5jZF9sYWJlbCk7CiAJaWYgKHJldCA8IDApCiAJCS8qCkBAIC0yMjYsNTUgKzIxMiw2IEBACiBFWFBPUlRfU1lNQk9MKG1tY19ncGlvX3JlcXVlc3RfY2QpOwogCiAvKioKLSAqIG1tY19ncGlvX2ZyZWVfcm8gLSBmcmVlIHRoZSB3cml0ZS1wcm90ZWN0aW9uIGdwaW8KLSAqIEBob3N0OiBtbWMgaG9zdAotICoKLSAqIEl0J3MgcHJvdmlkZWQgb25seSBmb3IgY2FzZXMgdGhhdCBjbGllbnQgZHJpdmVycyBuZWVkIHRvIG1hbnVhbGx5IGZyZWUKLSAqIHVwIHRoZSB3cml0ZS1wcm90ZWN0aW9uIGdwaW8gcmVxdWVzdGVkIGJ5IG1tY19ncGlvX3JlcXVlc3Rfcm8oKS4KLSAqLwotdm9pZCBtbWNfZ3Bpb19mcmVlX3JvKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKLXsKLQlzdHJ1Y3QgbW1jX2dwaW8gKmN0eCA9IGhvc3QtPnNsb3QuaGFuZGxlcl9wcml2OwotCWludCBncGlvOwotCi0JaWYgKCFjdHggfHwgIWN0eC0+cm9fZ3BpbykKLQkJcmV0dXJuOwotCi0JZ3BpbyA9IGRlc2NfdG9fZ3BpbyhjdHgtPnJvX2dwaW8pOwotCWN0eC0+cm9fZ3BpbyA9IE5VTEw7Ci0KLQlkZXZtX2dwaW9fZnJlZSgmaG9zdC0+Y2xhc3NfZGV2LCBncGlvKTsKLX0KLUVYUE9SVF9TWU1CT0wobW1jX2dwaW9fZnJlZV9ybyk7Ci0KLS8qKgotICogbW1jX2dwaW9fZnJlZV9jZCAtIGZyZWUgdGhlIGNhcmQtZGV0ZWN0aW9uIGdwaW8KLSAqIEBob3N0OiBtbWMgaG9zdAotICoKLSAqIEl0J3MgcHJvdmlkZWQgb25seSBmb3IgY2FzZXMgdGhhdCBjbGllbnQgZHJpdmVycyBuZWVkIHRvIG1hbnVhbGx5IGZyZWUKLSAqIHVwIHRoZSBjYXJkLWRldGVjdGlvbiBncGlvIHJlcXVlc3RlZCBieSBtbWNfZ3Bpb19yZXF1ZXN0X2NkKCkuCi0gKi8KLXZvaWQgbW1jX2dwaW9fZnJlZV9jZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpCi17Ci0Jc3RydWN0IG1tY19ncGlvICpjdHggPSBob3N0LT5zbG90LmhhbmRsZXJfcHJpdjsKLQlpbnQgZ3BpbzsKLQotCWlmICghY3R4IHx8ICFjdHgtPmNkX2dwaW8pCi0JCXJldHVybjsKLQotCWlmIChob3N0LT5zbG90LmNkX2lycSA+PSAwKSB7Ci0JCWRldm1fZnJlZV9pcnEoJmhvc3QtPmNsYXNzX2RldiwgaG9zdC0+c2xvdC5jZF9pcnEsIGhvc3QpOwotCQlob3N0LT5zbG90LmNkX2lycSA9IC1FSU5WQUw7Ci0JfQotCi0JZ3BpbyA9IGRlc2NfdG9fZ3BpbyhjdHgtPmNkX2dwaW8pOwotCWN0eC0+Y2RfZ3BpbyA9IE5VTEw7Ci0KLQlkZXZtX2dwaW9fZnJlZSgmaG9zdC0+Y2xhc3NfZGV2LCBncGlvKTsKLX0KLUVYUE9SVF9TWU1CT0wobW1jX2dwaW9fZnJlZV9jZCk7Ci0KLS8qKgogICogbW1jX2dwaW9kX3JlcXVlc3RfY2QgLSByZXF1ZXN0IGEgZ3BpbyBkZXNjcmlwdG9yIGZvciBjYXJkLWRldGVjdGlvbgogICogQGhvc3Q6IG1tYyBob3N0CiAgKiBAY29uX2lkOiBmdW5jdGlvbiB3aXRoaW4gdGhlIEdQSU8gY29uc3VtZXIKQEAgLTI4NSw4ICsyMjIsNyBAQAogICogdG8gTlVMTCB0byBpZ25vcmUKICAqCiAgKiBVc2UgdGhpcyBmdW5jdGlvbiBpbiBwbGFjZSBvZiBtbWNfZ3Bpb19yZXF1ZXN0X2NkKCkgdG8gdXNlIHRoZSBHUElPCi0gKiBkZXNjcmlwdG9yIEFQSS4gIE5vdGUgdGhhdCBpdCBpcyBwYWlyZWQgd2l0aCBtbWNfZ3Bpb2RfZnJlZV9jZCgpIG5vdAotICogbW1jX2dwaW9fZnJlZV9jZCgpLiAgTm90ZSBhbHNvIHRoYXQgaXQgbXVzdCBiZSBjYWxsZWQgcHJpb3IgdG8gbW1jX2FkZF9ob3N0KCkKKyAqIGRlc2NyaXB0b3IgQVBJLiAgTm90ZSB0aGF0IGl0IG11c3QgYmUgY2FsbGVkIHByaW9yIHRvIG1tY19hZGRfaG9zdCgpCiAgKiBvdGhlcndpc2UgdGhlIGNhbGxlciBtdXN0IGFsc28gY2FsbCBtbWNfZ3Bpb2RfcmVxdWVzdF9jZF9pcnEoKS4KICAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2VzcywgZWxzZSBhbiBlcnJvci4KQEAgLTI5NSwxNiArMjMxLDEwIEBACiAJCQkgdW5zaWduZWQgaW50IGlkeCwgYm9vbCBvdmVycmlkZV9hY3RpdmVfbGV2ZWwsCiAJCQkgdW5zaWduZWQgaW50IGRlYm91bmNlLCBib29sICpncGlvX2ludmVydCkKIHsKLQlzdHJ1Y3QgbW1jX2dwaW8gKmN0eDsKKwlzdHJ1Y3QgbW1jX2dwaW8gKmN0eCA9IGhvc3QtPnNsb3QuaGFuZGxlcl9wcml2OwogCXN0cnVjdCBncGlvX2Rlc2MgKmRlc2M7CiAJaW50IHJldDsKIAotCXJldCA9IG1tY19ncGlvX2FsbG9jKGhvc3QpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JY3R4ID0gaG9zdC0+c2xvdC5oYW5kbGVyX3ByaXY7Ci0KIAlpZiAoIWNvbl9pZCkKIAkJY29uX2lkID0gY3R4LT5jZF9sYWJlbDsKIApAQCAtMzM5LDggKzI2OSw3IEBACiAgKiBzZXQgdG8gTlVMTCB0byBpZ25vcmUKICAqCiAgKiBVc2UgdGhpcyBmdW5jdGlvbiBpbiBwbGFjZSBvZiBtbWNfZ3Bpb19yZXF1ZXN0X3JvKCkgdG8gdXNlIHRoZSBHUElPCi0gKiBkZXNjcmlwdG9yIEFQSS4gIE5vdGUgdGhhdCBpdCBpcyBwYWlyZWQgd2l0aCBtbWNfZ3Bpb2RfZnJlZV9ybygpIG5vdAotICogbW1jX2dwaW9fZnJlZV9ybygpLgorICogZGVzY3JpcHRvciBBUEkuCiAgKgogICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIGVsc2UgYW4gZXJyb3IuCiAgKi8KQEAgLTM0OCwxNiArMjc3LDEwIEBACiAJCQkgdW5zaWduZWQgaW50IGlkeCwgYm9vbCBvdmVycmlkZV9hY3RpdmVfbGV2ZWwsCiAJCQkgdW5zaWduZWQgaW50IGRlYm91bmNlLCBib29sICpncGlvX2ludmVydCkKIHsKLQlzdHJ1Y3QgbW1jX2dwaW8gKmN0eDsKKwlzdHJ1Y3QgbW1jX2dwaW8gKmN0eCA9IGhvc3QtPnNsb3QuaGFuZGxlcl9wcml2OwogCXN0cnVjdCBncGlvX2Rlc2MgKmRlc2M7CiAJaW50IHJldDsKIAotCXJldCA9IG1tY19ncGlvX2FsbG9jKGhvc3QpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JY3R4ID0gaG9zdC0+c2xvdC5oYW5kbGVyX3ByaXY7Ci0KIAlpZiAoIWNvbl9pZCkKIAkJY29uX2lkID0gY3R4LT5yb19sYWJlbDsKIApAQCAtMzgwLDI4ICszMDMsMyBAQAogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChtbWNfZ3Bpb2RfcmVxdWVzdF9ybyk7Ci0KLS8qKgotICogbW1jX2dwaW9kX2ZyZWVfY2QgLSBmcmVlIHRoZSBjYXJkLWRldGVjdGlvbiBncGlvIGRlc2NyaXB0b3IKLSAqIEBob3N0OiBtbWMgaG9zdAotICoKLSAqIEl0J3MgcHJvdmlkZWQgb25seSBmb3IgY2FzZXMgdGhhdCBjbGllbnQgZHJpdmVycyBuZWVkIHRvIG1hbnVhbGx5IGZyZWUKLSAqIHVwIHRoZSBjYXJkLWRldGVjdGlvbiBncGlvIHJlcXVlc3RlZCBieSBtbWNfZ3Bpb2RfcmVxdWVzdF9jZCgpLgotICovCi12b2lkIG1tY19ncGlvZF9mcmVlX2NkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKLXsKLQlzdHJ1Y3QgbW1jX2dwaW8gKmN0eCA9IGhvc3QtPnNsb3QuaGFuZGxlcl9wcml2OwotCi0JaWYgKCFjdHggfHwgIWN0eC0+Y2RfZ3BpbykKLQkJcmV0dXJuOwotCi0JaWYgKGhvc3QtPnNsb3QuY2RfaXJxID49IDApIHsKLQkJZGV2bV9mcmVlX2lycSgmaG9zdC0+Y2xhc3NfZGV2LCBob3N0LT5zbG90LmNkX2lycSwgaG9zdCk7Ci0JCWhvc3QtPnNsb3QuY2RfaXJxID0gLUVJTlZBTDsKLQl9Ci0KLQlkZXZtX2dwaW9kX3B1dChob3N0LT5wYXJlbnQsIGN0eC0+Y2RfZ3Bpbyk7Ci0KLQljdHgtPmNkX2dwaW8gPSBOVUxMOwotfQotRVhQT1JUX1NZTUJPTChtbWNfZ3Bpb2RfZnJlZV9jZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3Nsb3QtZ3Bpby5oIGIvZHJpdmVycy9tbWMvY29yZS9zbG90LWdwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzE4NTRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zbG90LWdwaW8uaApAQCAtMCwwICsxLDEzIEBACisvKgorICAqIENvcHlyaWdodCAoQykgMjAxNCBMaW5hcm8gTHRkCisgKgorICogQXV0aG9yOiBVbGYgSGFuc3NvbiA8dWxmLmhhbnNzb25AbGluYXJvLm9yZz4KKyAqCisgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKKyAqLworI2lmbmRlZiBfTU1DX0NPUkVfU0xPVEdQSU9fSAorI2RlZmluZSBfTU1DX0NPUkVfU0xPVEdQSU9fSAorCitpbnQgbW1jX2dwaW9fYWxsb2Moc3RydWN0IG1tY19ob3N0ICpob3N0KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcgYi9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKaW5kZXggMmQ2ZmJkZC4uNjFhYzYzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwpAQCAtNTcsNiArNTcsNyBAQAogCiBjb25maWcgTU1DX1NESENJX0JJR19FTkRJQU5fMzJCSVRfQllURV9TV0FQUEVSCiAJYm9vbAorCWRlcGVuZHMgb24gTU1DX1NESENJCiAJc2VsZWN0IE1NQ19TREhDSV9JT19BQ0NFU1NPUlMKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBpcyBzZWxlY3RlZCBieSBkcml2ZXJzIHJ1bm5pbmcgb24gYmlnIGVuZGlhbiBob3N0cwpAQCAtODIsNiArODMsNyBAQAogY29uZmlnIE1NQ19SSUNPSF9NTUMKIAlib29sICJSaWNvaCBNTUMgQ29udHJvbGxlciBEaXNhYmxlciIKIAlkZXBlbmRzIG9uIE1NQ19TREhDSV9QQ0kKKwlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGFkZHMgYSBwY2kgcXVpcmsgdG8gZGlzYWJsZSBSaWNvaCBNTUMgQ29udHJvbGxlci4gVGhpcwogCSAgcHJvcHJpZXRhcnkgY29udHJvbGxlciBpcyB1bm5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBTREhDSSBkcml2ZXIKQEAgLTIyOCw2ICsyMzAsNyBAQAogCXRyaXN0YXRlICJNYXJ2ZWxsIE1NUDIgU0QgSG9zdCBDb250cm9sbGVyIHN1cHBvcnQgKFBYQVYzKSIKIAlkZXBlbmRzIG9uIENMS0RFVl9MT09LVVAKIAlkZXBlbmRzIG9uIE1NQ19TREhDSV9QTFRGTQorCWRlcGVuZHMgb24gQVJDSF9NTVAgfHwgQ09NUElMRV9URVNUCiAJZGVmYXVsdCBDUFVfTU1QMgogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgTWFydmVsbChSKSBQWEFWMyBTRCBIb3N0IENvbnRyb2xsZXIuCkBAIC0yNDAsNiArMjQzLDcgQEAKIAl0cmlzdGF0ZSAiTWFydmVsbCBQWEE5WFggU0QgSG9zdCBDb250cm9sbGVyIHN1cHBvcnQgKFBYQVYyKSIKIAlkZXBlbmRzIG9uIENMS0RFVl9MT09LVVAKIAlkZXBlbmRzIG9uIE1NQ19TREhDSV9QTFRGTQorCWRlcGVuZHMgb24gQVJDSF9NTVAgfHwgQ09NUElMRV9URVNUCiAJZGVmYXVsdCBDUFVfUFhBOTEwCiAJaGVscAogCSAgVGhpcyBzZWxlY3RzIHRoZSBNYXJ2ZWxsKFIpIFBYQVYyIFNEIEhvc3QgQ29udHJvbGxlci4KQEAgLTI5Miw2ICsyOTYsMTcgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIE1NQ19TREhDSV9GX1NESDMwCisJdHJpc3RhdGUgIlNESENJIHN1cHBvcnQgZm9yIEZ1aml0c3UgU2VtaWNvbmR1Y3RvciBGX1NESDMwIgorCWRlcGVuZHMgb24gTU1DX1NESENJX1BMVEZNCisJZGVwZW5kcyBvbiBPRgorCWhlbHAKKwkgIFRoaXMgc2VsZWN0cyB0aGUgU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZSAoU0RIQ0kpCisJICBOZWVkZWQgYnkgc29tZSBGdWppdHN1IFNvQyBmb3IgTU1DIC8gU0QgLyBTRElPIHN1cHBvcnQuCisJICBJZiB5b3UgaGF2ZSBhIGNvbnRyb2xsZXIgd2l0aCB0aGlzIGludGVyZmFjZSwgc2F5IFkgb3IgTSBoZXJlLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgTU1DX01PWEFSVAogCXRyaXN0YXRlICJNT1hBUlQgU0QvTU1DIEhvc3QgQ29udHJvbGxlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9NT1hBUlQgJiYgTU1DCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQppbmRleCBmN2IwYTc3Li42YTdjZmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAKIG9iai0kKENPTkZJR19NTUNfU0RIQ0lfUFhBVjIpCSs9IHNkaGNpLXB4YXYyLm8KIG9iai0kKENPTkZJR19NTUNfU0RIQ0lfUzNDKQkrPSBzZGhjaS1zM2Mubwogb2JqLSQoQ09ORklHX01NQ19TREhDSV9TSVJGKSAgIAkrPSBzZGhjaS1zaXJmLm8KK29iai0kKENPTkZJR19NTUNfU0RIQ0lfRl9TREgzMCkJKz0gc2RoY2lfZl9zZGgzMC5vCiBvYmotJChDT05GSUdfTU1DX1NESENJX1NQRUFSKQkrPSBzZGhjaS1zcGVhci5vCiBvYmotJChDT05GSUdfTU1DX1dCU0QpCQkrPSB3YnNkLm8KIG9iai0kKENPTkZJR19NTUNfQVUxWCkJCSs9IGF1MXhtbWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtZXh5bm9zLmMgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1leHlub3MuYwppbmRleCA1MDkzNjVjLi5mZTMyOTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1leHlub3MuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1leHlub3MuYwpAQCAtMjEsNDMgKzIxLDcgQEAKIAogI2luY2x1ZGUgImR3X21tYy5oIgogI2luY2x1ZGUgImR3X21tYy1wbHRmbS5oIgotCi0jZGVmaW5lIE5VTV9QSU5TKHgpCQkJKHggKyAyKQotCi0jZGVmaW5lIFNETU1DX0NMS1NFTAkJCTB4MDlDCi0jZGVmaW5lIFNETU1DX0NMS1NFTDY0CQkJMHgwQTgKLSNkZWZpbmUgU0RNTUNfQ0xLU0VMX0NDTEtfU0FNUExFKHgpCSgoKHgpICYgNykgPDwgMCkKLSNkZWZpbmUgU0RNTUNfQ0xLU0VMX0NDTEtfRFJJVkUoeCkJKCgoeCkgJiA3KSA8PCAxNikKLSNkZWZpbmUgU0RNTUNfQ0xLU0VMX0NDTEtfRElWSURFUih4KQkoKCh4KSAmIDcpIDw8IDI0KQotI2RlZmluZSBTRE1NQ19DTEtTRUxfR0VUX0RSVl9XRDMoeCkJKCgoeCkgPj4gMTYpICYgMHg3KQotI2RlZmluZSBTRE1NQ19DTEtTRUxfVElNSU5HKHgsIHksIHopCShTRE1NQ19DTEtTRUxfQ0NMS19TQU1QTEUoeCkgfAlcCi0JCQkJCVNETU1DX0NMS1NFTF9DQ0xLX0RSSVZFKHkpIHwJXAotCQkJCQlTRE1NQ19DTEtTRUxfQ0NMS19ESVZJREVSKHopKQotI2RlZmluZSBTRE1NQ19DTEtTRUxfV0FLRVVQX0lOVAkJQklUKDExKQotCi0jZGVmaW5lIEVYWU5PUzQyMTBfRklYRURfQ0lVX0NMS19ESVYJMgotI2RlZmluZSBFWFlOT1M0NDEyX0ZJWEVEX0NJVV9DTEtfRElWCTQKLQotLyogQmxvY2sgbnVtYmVyIGluIGVNTUMgKi8KLSNkZWZpbmUgRFdNQ0lfQkxPQ0tfTlVNCQkweEZGRkZGRkZGCi0KLSNkZWZpbmUgU0RNTUNfRU1NQ1BfQkFTRQkweDEwMDAKLSNkZWZpbmUgU0RNTUNfTVBTRUNVUklUWQkoU0RNTUNfRU1NQ1BfQkFTRSArIDB4MDAxMCkKLSNkZWZpbmUgU0RNTUNfTVBTQkVHSU4wCQkoU0RNTUNfRU1NQ1BfQkFTRSArIDB4MDIwMCkKLSNkZWZpbmUgU0RNTUNfTVBTRU5EMAkJKFNETU1DX0VNTUNQX0JBU0UgKyAweDAyMDQpCi0jZGVmaW5lIFNETU1DX01QU0NUUkwwCQkoU0RNTUNfRU1NQ1BfQkFTRSArIDB4MDIwQykKLQotLyogU01VIGNvbnRyb2wgYml0cyAqLwotI2RlZmluZSBEV01DSV9NUFNDVFJMX1NFQ1VSRV9SRUFEX0JJVAkJQklUKDcpCi0jZGVmaW5lIERXTUNJX01QU0NUUkxfU0VDVVJFX1dSSVRFX0JJVAkJQklUKDYpCi0jZGVmaW5lIERXTUNJX01QU0NUUkxfTk9OX1NFQ1VSRV9SRUFEX0JJVAlCSVQoNSkKLSNkZWZpbmUgRFdNQ0lfTVBTQ1RSTF9OT05fU0VDVVJFX1dSSVRFX0JJVAlCSVQoNCkKLSNkZWZpbmUgRFdNQ0lfTVBTQ1RSTF9VU0VfRlVTRV9LRVkJCUJJVCgzKQotI2RlZmluZSBEV01DSV9NUFNDVFJMX0VDQl9NT0RFCQkJQklUKDIpCi0jZGVmaW5lIERXTUNJX01QU0NUUkxfRU5DUllQVElPTgkJQklUKDEpCi0jZGVmaW5lIERXTUNJX01QU0NUUkxfVkFMSUQJCQlCSVQoMCkKLQotI2RlZmluZSBFWFlOT1NfQ0NMS0lOX01JTgk1MDAwMDAwMAkvKiB1bml0OiBIWiAqLworI2luY2x1ZGUgImR3X21tYy1leHlub3MuaCIKIAogLyogVmFyaWF0aW9ucyBpbiBFeHlub3Mgc3BlY2lmaWMgZHctbXNoYyBjb250cm9sbGVyICovCiBlbnVtIGR3X21jaV9leHlub3NfdHlwZSB7CkBAIC0xMTQsMTEgKzc4LDExIEBACiAJaWYgKHByaXYtPmN0cmxfdHlwZSA9PSBEV19NQ0lfVFlQRV9FWFlOT1M1NDIwX1NNVSB8fAogCQlwcml2LT5jdHJsX3R5cGUgPT0gRFdfTUNJX1RZUEVfRVhZTk9TN19TTVUpIHsKIAkJbWNpX3dyaXRlbChob3N0LCBNUFNCRUdJTjAsIDApOwotCQltY2lfd3JpdGVsKGhvc3QsIE1QU0VORDAsIERXTUNJX0JMT0NLX05VTSk7Ci0JCW1jaV93cml0ZWwoaG9zdCwgTVBTQ1RSTDAsIERXTUNJX01QU0NUUkxfU0VDVVJFX1dSSVRFX0JJVCB8Ci0JCQkgICBEV01DSV9NUFNDVFJMX05PTl9TRUNVUkVfUkVBRF9CSVQgfAotCQkJICAgRFdNQ0lfTVBTQ1RSTF9WQUxJRCB8Ci0JCQkgICBEV01DSV9NUFNDVFJMX05PTl9TRUNVUkVfV1JJVEVfQklUKTsKKwkJbWNpX3dyaXRlbChob3N0LCBNUFNFTkQwLCBTRE1NQ19FTkRJTkdfU0VDX05SX01BWCk7CisJCW1jaV93cml0ZWwoaG9zdCwgTVBTQ1RSTDAsIFNETU1DX01QU0NUUkxfU0VDVVJFX1dSSVRFX0JJVCB8CisJCQkgICBTRE1NQ19NUFNDVFJMX05PTl9TRUNVUkVfUkVBRF9CSVQgfAorCQkJICAgU0RNTUNfTVBTQ1RSTF9WQUxJRCB8CisJCQkgICBTRE1NQ19NUFNDVFJMX05PTl9TRUNVUkVfV1JJVEVfQklUKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTEyNyw5ICs5MSw5IEBACiBzdGF0aWMgaW50IGR3X21jaV9leHlub3Nfc2V0dXBfY2xvY2soc3RydWN0IGR3X21jaSAqaG9zdCkKIHsKIAlzdHJ1Y3QgZHdfbWNpX2V4eW5vc19wcml2X2RhdGEgKnByaXYgPSBob3N0LT5wcml2OwotCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsa19nZXRfcmF0ZShob3N0LT5jaXVfY2xrKTsKIAotCWhvc3QtPmJ1c19oeiA9IHJhdGUgLyAocHJpdi0+Y2l1X2RpdiArIDEpOworCWhvc3QtPmJ1c19oeiAvPSAocHJpdi0+Y2l1X2RpdiArIDEpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzMiw4ICsxOTYsMTEgQEAKIAkJCW1jaV93cml0ZWwoaG9zdCwgQ0xLU0VMLCBwcml2LT5zZHJfdGltaW5nKTsKIAl9CiAKLQkvKiBEb24ndCBjYXJlIGlmIHdhbnRlZCBjbG9jayBpcyB6ZXJvICovCi0JaWYgKCF3YW50ZWQpCisJLyoKKwkgKiBEb24ndCBjYXJlIGlmIHdhbnRlZCBjbG9jayBpcyB6ZXJvIG9yCisJICogY2l1IGNsb2NrIGlzIHVuYXZhaWxhYmxlCisJICovCisJaWYgKCF3YW50ZWQgfHwgSVNfRVJSKGhvc3QtPmNpdV9jbGspKQogCQlyZXR1cm47CiAKIAkvKiBHdWFyYW50ZWVkIG1pbmltdW0gZnJlcXVlbmN5IGZvciBjY2xraW4gKi8KQEAgLTI2MywxMCArMjMwLDggQEAKIAlpbnQgcmV0OwogCiAJcHJpdiA9IGRldm1fa3phbGxvYyhob3N0LT5kZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwotCWlmICghcHJpdikgewotCQlkZXZfZXJyKGhvc3QtPmRldiwgIm1lbSBhbGxvYyBmYWlsZWQgZm9yIHByaXZhdGUgZGF0YVxuIik7CisJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUoZXh5bm9zX2NvbXBhdCk7IGlkeCsrKSB7CiAJCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgZXh5bm9zX2NvbXBhdFtpZHhdLmNvbXBhdGlibGUpKQpAQCAtMzc1LDY0ICszNDAsMjMgQEAKIAlyZXR1cm4gbG9jOwogfQogCi1zdGF0aWMgaW50IGR3X21jaV9leHlub3NfZXhlY3V0ZV90dW5pbmcoc3RydWN0IGR3X21jaV9zbG90ICpzbG90LCB1MzIgb3Bjb2RlLAotCQkJCQlzdHJ1Y3QgZHdfbWNpX3R1bmluZ19kYXRhICp0dW5pbmdfZGF0YSkKK3N0YXRpYyBpbnQgZHdfbWNpX2V4eW5vc19leGVjdXRlX3R1bmluZyhzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QpCiB7CiAJc3RydWN0IGR3X21jaSAqaG9zdCA9IHNsb3QtPmhvc3Q7CiAJc3RydWN0IG1tY19ob3N0ICptbWMgPSBzbG90LT5tbWM7Ci0JY29uc3QgdTggKmJsa19wYXR0ZXJuID0gdHVuaW5nX2RhdGEtPmJsa19wYXR0ZXJuOwotCXU4ICpibGtfdGVzdDsKLQl1bnNpZ25lZCBpbnQgYmxrc3ogPSB0dW5pbmdfZGF0YS0+Ymxrc3o7CiAJdTggc3RhcnRfc21wbCwgc21wbCwgY2FuZGlhdGVzID0gMDsKIAlzOCBmb3VuZCA9IC0xOwogCWludCByZXQgPSAwOwogCi0JYmxrX3Rlc3QgPSBrbWFsbG9jKGJsa3N6LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJsa190ZXN0KQotCQlyZXR1cm4gLUVOT01FTTsKLQogCXN0YXJ0X3NtcGwgPSBkd19tY2lfZXh5bm9zX2dldF9jbGtzbXBsKGhvc3QpOwogCiAJZG8gewotCQlzdHJ1Y3QgbW1jX3JlcXVlc3QgbXJxID0ge05VTEx9OwotCQlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kID0gezB9OwotCQlzdHJ1Y3QgbW1jX2NvbW1hbmQgc3RvcCA9IHswfTsKLQkJc3RydWN0IG1tY19kYXRhIGRhdGEgPSB7MH07Ci0JCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKLQotCQljbWQub3Bjb2RlID0gb3Bjb2RlOwotCQljbWQuYXJnID0gMDsKLQkJY21kLmZsYWdzID0gTU1DX1JTUF9SMSB8IE1NQ19DTURfQURUQzsKLQotCQlzdG9wLm9wY29kZSA9IE1NQ19TVE9QX1RSQU5TTUlTU0lPTjsKLQkJc3RvcC5hcmcgPSAwOwotCQlzdG9wLmZsYWdzID0gTU1DX1JTUF9SMUIgfCBNTUNfQ01EX0FDOwotCi0JCWRhdGEuYmxrc3ogPSBibGtzejsKLQkJZGF0YS5ibG9ja3MgPSAxOwotCQlkYXRhLmZsYWdzID0gTU1DX0RBVEFfUkVBRDsKLQkJZGF0YS5zZyA9ICZzZzsKLQkJZGF0YS5zZ19sZW4gPSAxOwotCi0JCXNnX2luaXRfb25lKCZzZywgYmxrX3Rlc3QsIGJsa3N6KTsKLQkJbXJxLmNtZCA9ICZjbWQ7Ci0JCW1ycS5zdG9wID0gJnN0b3A7Ci0JCW1ycS5kYXRhID0gJmRhdGE7Ci0JCWhvc3QtPm1ycSA9ICZtcnE7Ci0KIAkJbWNpX3dyaXRlbChob3N0LCBUTU9VVCwgfjApOwogCQlzbXBsID0gZHdfbWNpX2V4eW5vc19tb3ZlX25leHRfY2xrc21wbChob3N0KTsKIAotCQltbWNfd2FpdF9mb3JfcmVxKG1tYywgJm1ycSk7CisJCWlmICghbW1jX3NlbmRfdHVuaW5nKG1tYykpCisJCQljYW5kaWF0ZXMgfD0gKDEgPDwgc21wbCk7CiAKLQkJaWYgKCFjbWQuZXJyb3IgJiYgIWRhdGEuZXJyb3IpIHsKLQkJCWlmICghbWVtY21wKGJsa19wYXR0ZXJuLCBibGtfdGVzdCwgYmxrc3opKQotCQkJCWNhbmRpYXRlcyB8PSAoMSA8PCBzbXBsKTsKLQkJfSBlbHNlIHsKLQkJCWRldl9kYmcoaG9zdC0+ZGV2LAotCQkJCSJUdW5pbmcgZXJyb3I6IGNtZC5lcnJvcjolZCwgZGF0YS5lcnJvcjolZFxuIiwKLQkJCQljbWQuZXJyb3IsIGRhdGEuZXJyb3IpOwotCQl9CiAJfSB3aGlsZSAoc3RhcnRfc21wbCAhPSBzbXBsKTsKIAogCWZvdW5kID0gZHdfbWNpX2V4eW5vc19nZXRfYmVzdF9jbGtzbXBsKGNhbmRpYXRlcyk7CkBAIC00NDEsNyArMzY1LDYgQEAKIAllbHNlCiAJCXJldCA9IC1FSU87CiAKLQlrZnJlZShibGtfdGVzdCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDk5LDcgKzQyMiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X21jaV9leHlub3NfcGx0Zm1fZHJpdmVyID0gewogCS5wcm9iZQkJPSBkd19tY2lfZXh5bm9zX3Byb2JlLAotCS5yZW1vdmUJCT0gX19leGl0X3AoZHdfbWNpX3BsdGZtX3JlbW92ZSksCisJLnJlbW92ZQkJPSBkd19tY2lfcGx0Zm1fcmVtb3ZlLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQkJPSAiZHdtbWNfZXh5bm9zIiwKIAkJLm9mX21hdGNoX3RhYmxlCT0gZHdfbWNpX2V4eW5vc19tYXRjaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLWV4eW5vcy5oIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtZXh5bm9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3MmNlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLWV4eW5vcy5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBFeHlub3MgU3BlY2lmaWMgRXh0ZW5zaW9ucyBmb3IgU3lub3BzeXMgRFcgTXVsdGltZWRpYSBDYXJkIEludGVyZmFjZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfRFdfTU1DX0VYWU5PU19IXworI2RlZmluZSBfRFdfTU1DX0VYWU5PU19IXworCisvKiBFeHRlbmRlZCBSZWdpc3RlcidzIE9mZnNldCAqLworI2RlZmluZSBTRE1NQ19DTEtTRUwJCQkweDA5QworI2RlZmluZSBTRE1NQ19DTEtTRUw2NAkJCTB4MEE4CisKKy8qIENMS1NFTCByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIFNETU1DX0NMS1NFTF9DQ0xLX1NBTVBMRSh4KQkoKCh4KSAmIDcpIDw8IDApCisjZGVmaW5lIFNETU1DX0NMS1NFTF9DQ0xLX0RSSVZFKHgpCSgoKHgpICYgNykgPDwgMTYpCisjZGVmaW5lIFNETU1DX0NMS1NFTF9DQ0xLX0RJVklERVIoeCkJKCgoeCkgJiA3KSA8PCAyNCkKKyNkZWZpbmUgU0RNTUNfQ0xLU0VMX0dFVF9EUlZfV0QzKHgpCSgoKHgpID4+IDE2KSAmIDB4NykKKyNkZWZpbmUgU0RNTUNfQ0xLU0VMX1RJTUlORyh4LCB5LCB6KQkoU0RNTUNfQ0xLU0VMX0NDTEtfU0FNUExFKHgpIHwJXAorCQkJCQkgU0RNTUNfQ0xLU0VMX0NDTEtfRFJJVkUoeSkgfAlcCisJCQkJCSBTRE1NQ19DTEtTRUxfQ0NMS19ESVZJREVSKHopKQorI2RlZmluZSBTRE1NQ19DTEtTRUxfV0FLRVVQX0lOVAkJQklUKDExKQorCisvKiBQcm90ZWN0b3IgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0RNTUNfRU1NQ1BfQkFTRQkweDEwMDAKKyNkZWZpbmUgU0RNTUNfTVBTRUNVUklUWQkoU0RNTUNfRU1NQ1BfQkFTRSArIDB4MDAxMCkKKyNkZWZpbmUgU0RNTUNfTVBTQkVHSU4wCQkoU0RNTUNfRU1NQ1BfQkFTRSArIDB4MDIwMCkKKyNkZWZpbmUgU0RNTUNfTVBTRU5EMAkJKFNETU1DX0VNTUNQX0JBU0UgKyAweDAyMDQpCisjZGVmaW5lIFNETU1DX01QU0NUUkwwCQkoU0RNTUNfRU1NQ1BfQkFTRSArIDB4MDIwQykKKworLyogU01VIGNvbnRyb2wgZGVmaW5lcyAqLworI2RlZmluZSBTRE1NQ19NUFNDVFJMX1NFQ1VSRV9SRUFEX0JJVAkJQklUKDcpCisjZGVmaW5lIFNETU1DX01QU0NUUkxfU0VDVVJFX1dSSVRFX0JJVAkJQklUKDYpCisjZGVmaW5lIFNETU1DX01QU0NUUkxfTk9OX1NFQ1VSRV9SRUFEX0JJVAlCSVQoNSkKKyNkZWZpbmUgU0RNTUNfTVBTQ1RSTF9OT05fU0VDVVJFX1dSSVRFX0JJVAlCSVQoNCkKKyNkZWZpbmUgU0RNTUNfTVBTQ1RSTF9VU0VfRlVTRV9LRVkJCUJJVCgzKQorI2RlZmluZSBTRE1NQ19NUFNDVFJMX0VDQl9NT0RFCQkJQklUKDIpCisjZGVmaW5lIFNETU1DX01QU0NUUkxfRU5DUllQVElPTgkJQklUKDEpCisjZGVmaW5lIFNETU1DX01QU0NUUkxfVkFMSUQJCQlCSVQoMCkKKworLyogTWF4aW11bSBudW1iZXIgb2YgRW5kaW5nIHNlY3RvciAqLworI2RlZmluZSBTRE1NQ19FTkRJTkdfU0VDX05SX01BWAkweEZGRkZGRkZGCisKKy8qIEZpeGVkIGNsb2NrIGRpdmlkZXIgKi8KKyNkZWZpbmUgRVhZTk9TNDIxMF9GSVhFRF9DSVVfQ0xLX0RJVgkyCisjZGVmaW5lIEVYWU5PUzQ0MTJfRklYRURfQ0lVX0NMS19ESVYJNAorCisvKiBNaW5pbWFsIHJlcXVpcmVkIGNsb2NrIGZyZXF1ZW5jeSBmb3IgY2Nsa2luLCB1bml0OiBIWiAqLworI2RlZmluZSBFWFlOT1NfQ0NMS0lOX01JTgk1MDAwMDAwMAorCisjZW5kaWYgLyogX0RXX01NQ19FWFlOT1NfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXJvY2tjaGlwLmMgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1yb2NrY2hpcC5jCmluZGV4IDU2NTBhYzQuLmUyYTcyNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXJvY2tjaGlwLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGR3X21jaV9yb2NrY2hpcF9wbHRmbV9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IGR3X21jaV9yb2NrY2hpcF9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZXhpdF9wKGR3X21jaV9wbHRmbV9yZW1vdmUpLAorCS5yZW1vdmUJCT0gZHdfbWNpX3BsdGZtX3JlbW92ZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJCT0gImR3bW1jX3JvY2tjaGlwIiwKIAkJLm9mX21hdGNoX3RhYmxlCT0gZHdfbWNpX3JvY2tjaGlwX21hdGNoLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMKaW5kZXggNjdjMDQ1MS4uNGQyZTNjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9tbWMuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvc2QuaD4KQEAgLTMxMyw3ICszMTQsOSBAQAogCWlmIChjbWRyID09IE1NQ19SRUFEX1NJTkdMRV9CTE9DSyB8fAogCSAgICBjbWRyID09IE1NQ19SRUFEX01VTFRJUExFX0JMT0NLIHx8CiAJICAgIGNtZHIgPT0gTU1DX1dSSVRFX0JMT0NLIHx8Ci0JICAgIGNtZHIgPT0gTU1DX1dSSVRFX01VTFRJUExFX0JMT0NLKSB7CisJICAgIGNtZHIgPT0gTU1DX1dSSVRFX01VTFRJUExFX0JMT0NLIHx8CisJICAgIGNtZHIgPT0gTU1DX1NFTkRfVFVOSU5HX0JMT0NLIHx8CisJICAgIGNtZHIgPT0gTU1DX1NFTkRfVFVOSU5HX0JMT0NLX0hTMjAwKSB7CiAJCXN0b3AtPm9wY29kZSA9IE1NQ19TVE9QX1RSQU5TTUlTU0lPTjsKIAkJc3RvcC0+YXJnID0gMDsKIAkJc3RvcC0+ZmxhZ3MgPSBNTUNfUlNQX1IxQiB8IE1NQ19DTURfQUM7CkBAIC03NTgsNiArNzYxLDcgQEAKIAogc3RhdGljIGludCBkd19tY2lfc3VibWl0X2RhdGFfZG1hKHN0cnVjdCBkd19tY2kgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKIHsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCWludCBzZ19sZW47CiAJdTMyIHRlbXA7CiAKQEAgLTc5NCw5ICs3OTgsMTEgQEAKIAltY2lfd3JpdGVsKGhvc3QsIENUUkwsIHRlbXApOwogCiAJLyogRGlzYWJsZSBSWC9UWCBJUlFzLCBsZXQgRE1BIGhhbmRsZSBpdCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5pcnFfbG9jaywgaXJxZmxhZ3MpOwogCXRlbXAgPSBtY2lfcmVhZGwoaG9zdCwgSU5UTUFTSyk7CiAJdGVtcCAgJj0gfihTRE1NQ19JTlRfUlhEUiB8IFNETU1DX0lOVF9UWERSKTsKIAltY2lfd3JpdGVsKGhvc3QsIElOVE1BU0ssIHRlbXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmlycV9sb2NrLCBpcnFmbGFncyk7CiAKIAlob3N0LT5kbWFfb3BzLT5zdGFydChob3N0LCBzZ19sZW4pOwogCkBAIC04MDUsNiArODExLDcgQEAKIAogc3RhdGljIHZvaWQgZHdfbWNpX3N1Ym1pdF9kYXRhKHN0cnVjdCBkd19tY2kgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSkKIHsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCXUzMiB0ZW1wOwogCiAJZGF0YS0+ZXJyb3IgPSAtRUlOUFJPR1JFU1M7CkBAIC04MzMsOSArODQwLDEyIEBACiAJCWhvc3QtPnBhcnRfYnVmX2NvdW50ID0gMDsKIAogCQltY2lfd3JpdGVsKGhvc3QsIFJJTlRTVFMsIFNETU1DX0lOVF9UWERSIHwgU0RNTUNfSU5UX1JYRFIpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5pcnFfbG9jaywgaXJxZmxhZ3MpOwogCQl0ZW1wID0gbWNpX3JlYWRsKGhvc3QsIElOVE1BU0spOwogCQl0ZW1wIHw9IFNETU1DX0lOVF9UWERSIHwgU0RNTUNfSU5UX1JYRFI7CiAJCW1jaV93cml0ZWwoaG9zdCwgSU5UTUFTSywgdGVtcCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmlycV9sb2NrLCBpcnFmbGFncyk7CiAKIAkJdGVtcCA9IG1jaV9yZWFkbChob3N0LCBDVFJMKTsKIAkJdGVtcCAmPSB+U0RNTUNfQ1RSTF9ETUFfRU5BQkxFOwpAQCAtOTI2LDcgKzkzNiw3IEBACiAKIAkJLyogZW5hYmxlIGNsb2NrOyBvbmx5IGxvdyBwb3dlciBpZiBubyBTRElPICovCiAJCWNsa19lbl9hID0gU0RNTUNfQ0xLRU5fRU5BQkxFIDw8IHNsb3QtPmlkOwotCQlpZiAoIShtY2lfcmVhZGwoaG9zdCwgSU5UTUFTSykgJiBTRE1NQ19JTlRfU0RJTyhzbG90LT5zZGlvX2lkKSkpCisJCWlmICghdGVzdF9iaXQoRFdfTU1DX0NBUkRfTk9fTE9XX1BXUiwgJnNsb3QtPmZsYWdzKSkKIAkJCWNsa19lbl9hIHw9IFNETU1DX0NMS0VOX0xPV19QV1IgPDwgc2xvdC0+aWQ7CiAJCW1jaV93cml0ZWwoaG9zdCwgQ0xLRU5BLCBjbGtfZW5fYSk7CiAKQEAgLTExMDksNiArMTExOSwxMiBAQAogCQkJCXJldHVybjsKIAkJCX0KIAkJfQorCQlzZXRfYml0KERXX01NQ19DQVJEX05FRURfSU5JVCwgJnNsb3QtPmZsYWdzKTsKKwkJcmVncyA9IG1jaV9yZWFkbChzbG90LT5ob3N0LCBQV1JFTik7CisJCXJlZ3MgfD0gKDEgPDwgc2xvdC0+aWQpOworCQltY2lfd3JpdGVsKHNsb3QtPmhvc3QsIFBXUkVOLCByZWdzKTsKKwkJYnJlYWs7CisJY2FzZSBNTUNfUE9XRVJfT046CiAJCWlmICghSVNfRVJSKG1tYy0+c3VwcGx5LnZxbW1jKSAmJiAhc2xvdC0+aG9zdC0+dnFtbWNfZW5hYmxlZCkgewogCQkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShtbWMtPnN1cHBseS52cW1tYyk7CiAJCQlpZiAocmV0IDwgMCkKQEAgLTExMTcsMTAgKzExMzMsNiBAQAogCQkJZWxzZQogCQkJCXNsb3QtPmhvc3QtPnZxbW1jX2VuYWJsZWQgPSB0cnVlOwogCQl9Ci0JCXNldF9iaXQoRFdfTU1DX0NBUkRfTkVFRF9JTklULCAmc2xvdC0+ZmxhZ3MpOwotCQlyZWdzID0gbWNpX3JlYWRsKHNsb3QtPmhvc3QsIFBXUkVOKTsKLQkJcmVncyB8PSAoMSA8PCBzbG90LT5pZCk7Ci0JCW1jaV93cml0ZWwoc2xvdC0+aG9zdCwgUFdSRU4sIHJlZ3MpOwogCQlicmVhazsKIAljYXNlIE1NQ19QT1dFUl9PRkY6CiAJCWlmICghSVNfRVJSKG1tYy0+c3VwcGx5LnZtbWMpKQpAQCAtMTI0NSwyNyArMTI1NywzNyBAQAogCXJldHVybiBwcmVzZW50OwogfQogCi0vKgotICogRGlzYWJsZSBsb3dlciBwb3dlciBtb2RlLgotICoKLSAqIExvdyBwb3dlciBtb2RlIHdpbGwgc3RvcCB0aGUgY2FyZCBjbG9jayB3aGVuIGlkbGUuICBBY2NvcmRpbmcgdG8gdGhlCi0gKiBkZXNjcmlwdGlvbiBvZiB0aGUgQ0xLRU5BIHJlZ2lzdGVyIHdlIHNob3VsZCBkaXNhYmxlIGxvdyBwb3dlciBtb2RlCi0gKiBmb3IgU0RJTyBjYXJkcyBpZiB3ZSBuZWVkIFNESU8gaW50ZXJydXB0cyB0byB3b3JrLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgZmFzdCBpZiBsb3cgcG93ZXIgbW9kZSBpcyBhbHJlYWR5IGRpc2FibGVkLgotICovCi1zdGF0aWMgdm9pZCBkd19tY2lfZGlzYWJsZV9sb3dfcG93ZXIoc3RydWN0IGR3X21jaV9zbG90ICpzbG90KQorc3RhdGljIHZvaWQgZHdfbWNpX2luaXRfY2FyZChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19jYXJkICpjYXJkKQogeworCXN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCA9IG1tY19wcml2KG1tYyk7CiAJc3RydWN0IGR3X21jaSAqaG9zdCA9IHNsb3QtPmhvc3Q7Ci0JdTMyIGNsa19lbl9hOwotCWNvbnN0IHUzMiBjbGtlbl9sb3dfcHdyID0gU0RNTUNfQ0xLRU5fTE9XX1BXUiA8PCBzbG90LT5pZDsKIAotCWNsa19lbl9hID0gbWNpX3JlYWRsKGhvc3QsIENMS0VOQSk7CisJLyoKKwkgKiBMb3cgcG93ZXIgbW9kZSB3aWxsIHN0b3AgdGhlIGNhcmQgY2xvY2sgd2hlbiBpZGxlLiAgQWNjb3JkaW5nIHRvIHRoZQorCSAqIGRlc2NyaXB0aW9uIG9mIHRoZSBDTEtFTkEgcmVnaXN0ZXIgd2Ugc2hvdWxkIGRpc2FibGUgbG93IHBvd2VyIG1vZGUKKwkgKiBmb3IgU0RJTyBjYXJkcyBpZiB3ZSBuZWVkIFNESU8gaW50ZXJydXB0cyB0byB3b3JrLgorCSAqLworCWlmIChtbWMtPmNhcHMgJiBNTUNfQ0FQX1NESU9fSVJRKSB7CisJCWNvbnN0IHUzMiBjbGtlbl9sb3dfcHdyID0gU0RNTUNfQ0xLRU5fTE9XX1BXUiA8PCBzbG90LT5pZDsKKwkJdTMyIGNsa19lbl9hX29sZDsKKwkJdTMyIGNsa19lbl9hOwogCi0JaWYgKGNsa19lbl9hICYgY2xrZW5fbG93X3B3cikgewotCQltY2lfd3JpdGVsKGhvc3QsIENMS0VOQSwgY2xrX2VuX2EgJiB+Y2xrZW5fbG93X3B3cik7Ci0JCW1jaV9zZW5kX2NtZChzbG90LCBTRE1NQ19DTURfVVBEX0NMSyB8Ci0JCQkgICAgIFNETU1DX0NNRF9QUlZfREFUX1dBSVQsIDApOworCQljbGtfZW5fYV9vbGQgPSBtY2lfcmVhZGwoaG9zdCwgQ0xLRU5BKTsKKworCQlpZiAoY2FyZC0+dHlwZSA9PSBNTUNfVFlQRV9TRElPIHx8CisJCSAgICBjYXJkLT50eXBlID09IE1NQ19UWVBFX1NEX0NPTUJPKSB7CisJCQlzZXRfYml0KERXX01NQ19DQVJEX05PX0xPV19QV1IsICZzbG90LT5mbGFncyk7CisJCQljbGtfZW5fYSA9IGNsa19lbl9hX29sZCAmIH5jbGtlbl9sb3dfcHdyOworCQl9IGVsc2UgeworCQkJY2xlYXJfYml0KERXX01NQ19DQVJEX05PX0xPV19QV1IsICZzbG90LT5mbGFncyk7CisJCQljbGtfZW5fYSA9IGNsa19lbl9hX29sZCB8IGNsa2VuX2xvd19wd3I7CisJCX0KKworCQlpZiAoY2xrX2VuX2EgIT0gY2xrX2VuX2Ffb2xkKSB7CisJCQltY2lfd3JpdGVsKGhvc3QsIENMS0VOQSwgY2xrX2VuX2EpOworCQkJbWNpX3NlbmRfY21kKHNsb3QsIFNETU1DX0NNRF9VUERfQ0xLIHwKKwkJCQkgICAgIFNETU1DX0NNRF9QUlZfREFUX1dBSVQsIDApOworCQl9CiAJfQogfQogCkBAIC0xMjczLDI1ICsxMjk1LDIwIEBACiB7CiAJc3RydWN0IGR3X21jaV9zbG90ICpzbG90ID0gbW1jX3ByaXYobW1jKTsKIAlzdHJ1Y3QgZHdfbWNpICpob3N0ID0gc2xvdC0+aG9zdDsKKwl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCXUzMiBpbnRfbWFzazsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5pcnFfbG9jaywgaXJxZmxhZ3MpOworCiAJLyogRW5hYmxlL2Rpc2FibGUgU2xvdCBTcGVjaWZpYyBTRElPIGludGVycnVwdCAqLwogCWludF9tYXNrID0gbWNpX3JlYWRsKGhvc3QsIElOVE1BU0spOwotCWlmIChlbmIpIHsKLQkJLyoKLQkJICogVHVybiBvZmYgbG93IHBvd2VyIG1vZGUgaWYgaXQgd2FzIGVuYWJsZWQuICBUaGlzIGlzIGEgYml0IG9mCi0JCSAqIGEgaGVhdnkgb3BlcmF0aW9uIGFuZCB3ZSBkaXNhYmxlIC8gZW5hYmxlIElSUXMgYSBsb3QsIHNvCi0JCSAqIHdlJ2xsIGxlYXZlIGxvdyBwb3dlciBtb2RlIGRpc2FibGVkIGFuZCBpdCB3aWxsIGdldAotCQkgKiByZS1lbmFibGVkIGFnYWluIGluIGR3X21jaV9zZXR1cF9idXMoKS4KLQkJICovCi0JCWR3X21jaV9kaXNhYmxlX2xvd19wb3dlcihzbG90KTsKKwlpZiAoZW5iKQorCQlpbnRfbWFzayB8PSBTRE1NQ19JTlRfU0RJTyhzbG90LT5zZGlvX2lkKTsKKwllbHNlCisJCWludF9tYXNrICY9IH5TRE1NQ19JTlRfU0RJTyhzbG90LT5zZGlvX2lkKTsKKwltY2lfd3JpdGVsKGhvc3QsIElOVE1BU0ssIGludF9tYXNrKTsKIAotCQltY2lfd3JpdGVsKGhvc3QsIElOVE1BU0ssCi0JCQkgICAoaW50X21hc2sgfCBTRE1NQ19JTlRfU0RJTyhzbG90LT5zZGlvX2lkKSkpOwotCX0gZWxzZSB7Ci0JCW1jaV93cml0ZWwoaG9zdCwgSU5UTUFTSywKLQkJCSAgIChpbnRfbWFzayAmIH5TRE1NQ19JTlRfU0RJTyhzbG90LT5zZGlvX2lkKSkpOwotCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5pcnFfbG9jaywgaXJxZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGR3X21jaV9leGVjdXRlX3R1bmluZyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgdTMyIG9wY29kZSkKQEAgLTEyOTksMzAgKzEzMTYsMTAgQEAKIAlzdHJ1Y3QgZHdfbWNpX3Nsb3QgKnNsb3QgPSBtbWNfcHJpdihtbWMpOwogCXN0cnVjdCBkd19tY2kgKmhvc3QgPSBzbG90LT5ob3N0OwogCWNvbnN0IHN0cnVjdCBkd19tY2lfZHJ2X2RhdGEgKmRydl9kYXRhID0gaG9zdC0+ZHJ2X2RhdGE7Ci0Jc3RydWN0IGR3X21jaV90dW5pbmdfZGF0YSB0dW5pbmdfZGF0YTsKIAlpbnQgZXJyID0gLUVOT1NZUzsKIAotCWlmIChvcGNvZGUgPT0gTU1DX1NFTkRfVFVOSU5HX0JMT0NLX0hTMjAwKSB7Ci0JCWlmIChtbWMtPmlvcy5idXNfd2lkdGggPT0gTU1DX0JVU19XSURUSF84KSB7Ci0JCQl0dW5pbmdfZGF0YS5ibGtfcGF0dGVybiA9IHR1bmluZ19ibGtfcGF0dGVybl84Yml0OwotCQkJdHVuaW5nX2RhdGEuYmxrc3ogPSBzaXplb2YodHVuaW5nX2Jsa19wYXR0ZXJuXzhiaXQpOwotCQl9IGVsc2UgaWYgKG1tYy0+aW9zLmJ1c193aWR0aCA9PSBNTUNfQlVTX1dJRFRIXzQpIHsKLQkJCXR1bmluZ19kYXRhLmJsa19wYXR0ZXJuID0gdHVuaW5nX2Jsa19wYXR0ZXJuXzRiaXQ7Ci0JCQl0dW5pbmdfZGF0YS5ibGtzeiA9IHNpemVvZih0dW5pbmdfYmxrX3BhdHRlcm5fNGJpdCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0gZWxzZSBpZiAob3Bjb2RlID09IE1NQ19TRU5EX1RVTklOR19CTE9DSykgewotCQl0dW5pbmdfZGF0YS5ibGtfcGF0dGVybiA9IHR1bmluZ19ibGtfcGF0dGVybl80Yml0OwotCQl0dW5pbmdfZGF0YS5ibGtzeiA9IHNpemVvZih0dW5pbmdfYmxrX3BhdHRlcm5fNGJpdCk7Ci0JfSBlbHNlIHsKLQkJZGV2X2Vycihob3N0LT5kZXYsCi0JCQkiVW5kZWZpbmVkIGNvbW1hbmQoJWQpIGZvciB0dW5pbmdcbiIsIG9wY29kZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWlmIChkcnZfZGF0YSAmJiBkcnZfZGF0YS0+ZXhlY3V0ZV90dW5pbmcpCi0JCWVyciA9IGRydl9kYXRhLT5leGVjdXRlX3R1bmluZyhzbG90LCBvcGNvZGUsICZ0dW5pbmdfZGF0YSk7CisJCWVyciA9IGRydl9kYXRhLT5leGVjdXRlX3R1bmluZyhzbG90KTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMzM3LDcgKzEzMzQsNyBAQAogCS5leGVjdXRlX3R1bmluZwkJPSBkd19tY2lfZXhlY3V0ZV90dW5pbmcsCiAJLmNhcmRfYnVzeQkJPSBkd19tY2lfY2FyZF9idXN5LAogCS5zdGFydF9zaWduYWxfdm9sdGFnZV9zd2l0Y2ggPSBkd19tY2lfc3dpdGNoX3ZvbHRhZ2UsCi0KKwkuaW5pdF9jYXJkCQk9IGR3X21jaV9pbml0X2NhcmQsCiB9OwogCiBzdGF0aWMgdm9pZCBkd19tY2lfcmVxdWVzdF9lbmQoc3RydWN0IGR3X21jaSAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCkBAIC0yMzE5LDkgKzIzMTYsOSBAQAogI2lmZGVmIENPTkZJR19NTUNfRFdfSURNQUMKIAkJbW1jLT5tYXhfc2VncyA9IGhvc3QtPnJpbmdfc2l6ZTsKIAkJbW1jLT5tYXhfYmxrX3NpemUgPSA2NTUzNjsKLQkJbW1jLT5tYXhfYmxrX2NvdW50ID0gaG9zdC0+cmluZ19zaXplOwogCQltbWMtPm1heF9zZWdfc2l6ZSA9IDB4MTAwMDsKLQkJbW1jLT5tYXhfcmVxX3NpemUgPSBtbWMtPm1heF9zZWdfc2l6ZSAqIG1tYy0+bWF4X2Jsa19jb3VudDsKKwkJbW1jLT5tYXhfcmVxX3NpemUgPSBtbWMtPm1heF9zZWdfc2l6ZSAqIGhvc3QtPnJpbmdfc2l6ZTsKKwkJbW1jLT5tYXhfYmxrX2NvdW50ID0gbW1jLT5tYXhfcmVxX3NpemUgLyA1MTI7CiAjZWxzZQogCQltbWMtPm1heF9zZWdzID0gNjQ7CiAJCW1tYy0+bWF4X2Jsa19zaXplID0gNjU1MzY7IC8qIEJMS1NJWiBpcyAxNiBiaXRzICovCkBAIC0yNTMzLDEwICsyNTMwLDggQEAKIAl1MzIgY2xvY2tfZnJlcXVlbmN5OwogCiAJcGRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwZGF0YSkgewotCQlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBkYXRhXG4iKTsKKwlpZiAoIXBkYXRhKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9CiAKIAkvKiBmaW5kIG91dCBudW1iZXIgb2Ygc2xvdHMgc3VwcG9ydGVkICovCiAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKGRldi0+b2Zfbm9kZSwgIm51bS1zbG90cyIsCkBAIC0yNjYwLDYgKzI2NTUsNyBAQAogCWhvc3QtPnF1aXJrcyA9IGhvc3QtPnBkYXRhLT5xdWlya3M7CiAKIAlzcGluX2xvY2tfaW5pdCgmaG9zdC0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmlycV9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmaG9zdC0+cXVldWUpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmggYi9kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oCmluZGV4IDBkMGY3YTIuLjE4YzRhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmgKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaApAQCAtMjQ0LDE1ICsyNDQsMTEgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKICNkZWZpbmUgRFdfTU1DX0NBUkRfUFJFU0VOVAkwCiAjZGVmaW5lIERXX01NQ19DQVJEX05FRURfSU5JVAkxCisjZGVmaW5lIERXX01NQ19DQVJEX05PX0xPV19QV1IJMgogCWludAkJCWlkOwogCWludAkJCXNkaW9faWQ7CiB9OwogCi1zdHJ1Y3QgZHdfbWNpX3R1bmluZ19kYXRhIHsKLQljb25zdCB1OCAqYmxrX3BhdHRlcm47Ci0JdW5zaWduZWQgaW50IGJsa3N6OwotfTsKLQogLyoqCiAgKiBkd19tY2kgZHJpdmVyIGRhdGEgLSBkdy1tc2hjIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGRyaXZlciBkYXRhLgogICogQGNhcHM6IG1tYyBzdWJzeXN0ZW0gc3BlY2lmaWVkIGNhcGFiaWxpdGllcyBvZiB0aGUgY29udHJvbGxlcihzKS4KQEAgLTI3NCw3ICsyNzAsNiBAQAogCXZvaWQJCSgqcHJlcGFyZV9jb21tYW5kKShzdHJ1Y3QgZHdfbWNpICpob3N0LCB1MzIgKmNtZHIpOwogCXZvaWQJCSgqc2V0X2lvcykoc3RydWN0IGR3X21jaSAqaG9zdCwgc3RydWN0IG1tY19pb3MgKmlvcyk7CiAJaW50CQkoKnBhcnNlX2R0KShzdHJ1Y3QgZHdfbWNpICpob3N0KTsKLQlpbnQJCSgqZXhlY3V0ZV90dW5pbmcpKHN0cnVjdCBkd19tY2lfc2xvdCAqc2xvdCwgdTMyIG9wY29kZSwKLQkJCQkJc3RydWN0IGR3X21jaV90dW5pbmdfZGF0YSAqdHVuaW5nX2RhdGEpOworCWludAkJKCpleGVjdXRlX3R1bmluZykoc3RydWN0IGR3X21jaV9zbG90ICpzbG90KTsKIH07CiAjZW5kaWYgLyogX0RXX01NQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwppbmRleCA4MjMyZTlhLi43ZmUxNjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L21tY2kuYwpAQCAtNDMwLDcgKzQzMCw2IEBACiBzdGF0aWMgdm9pZCBtbWNpX2RtYV9zZXR1cChzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0KQogewogCWNvbnN0IGNoYXIgKnJ4bmFtZSwgKnR4bmFtZTsKLQlkbWFfY2FwX21hc2tfdCBtYXNrOwogCXN0cnVjdCB2YXJpYW50X2RhdGEgKnZhcmlhbnQgPSBob3N0LT52YXJpYW50OwogCiAJaG9zdC0+ZG1hX3J4X2NoYW5uZWwgPSBkbWFfcmVxdWVzdF9zbGF2ZV9jaGFubmVsKG1tY19kZXYoaG9zdC0+bW1jKSwgInJ4Iik7CkBAIC00MzksMTAgKzQzOCw2IEBACiAJLyogaW5pdGlhbGl6ZSBwcmUgcmVxdWVzdCBjb29raWUgKi8KIAlob3N0LT5uZXh0X2RhdGEuY29va2llID0gMTsKIAotCS8qIFRyeSB0byBhY3F1aXJlIGEgZ2VuZXJpYyBETUEgZW5naW5lIHNsYXZlIGNoYW5uZWwgKi8KLQlkbWFfY2FwX3plcm8obWFzayk7Ci0JZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKLQogCS8qCiAJICogSWYgb25seSBhbiBSWCBjaGFubmVsIGlzIHNwZWNpZmllZCwgdGhlIGRyaXZlciB3aWxsCiAJICogYXR0ZW1wdCB0byB1c2UgaXQgYmlkaXJlY3Rpb25hbGx5LCBob3dldmVyIGlmIGl0IGlzCkBAIC0xNzM5LDEwICsxNzM0LDEwIEBACiAKIAlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheSgmZGV2LT5kZXYsIDUwKTsKIAlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZCgmZGV2LT5kZXYpOwotCXBtX3J1bnRpbWVfcHV0KCZkZXYtPmRldik7CiAKIAltbWNfYWRkX2hvc3QobW1jKTsKIAorCXBtX3J1bnRpbWVfcHV0KCZkZXYtPmRldik7CiAJcmV0dXJuIDA7CiAKICBjbGtfZGlzYWJsZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbW94YXJ0LW1tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9tb3hhcnQtbW1jLmMKaW5kZXggZjNlMThkMC4uMDA2ZjE4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tb3hhcnQtbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tb3hhcnQtbW1jLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CkBAIC01NjIsNyArNTYzLDYgQEAKIAlzdHJ1Y3QgZG1hX3NsYXZlX2NvbmZpZyBjZmc7CiAJc3RydWN0IGNsayAqY2xrOwogCXZvaWQgX19pb21lbSAqcmVnX21tYzsKLQlkbWFfY2FwX21hc2tfdCBtYXNrOwogCWludCBpcnEsIHJldDsKIAl1MzIgaTsKIApAQCAtNTg2LDkgKzU4Niw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWNsayA9IG9mX2Nsa19nZXQobm9kZSwgMCk7CisJY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7CiAJaWYgKElTX0VSUihjbGspKSB7Ci0JCWRldl9lcnIoZGV2LCAib2ZfY2xrX2dldCBmYWlsZWRcbiIpOwogCQlyZXQgPSBQVFJfRVJSKGNsayk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTU5OSwxMCArNTk4LDkgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbW1jX29mX3BhcnNlKG1tYyk7Ci0KLQlkbWFfY2FwX3plcm8obWFzayk7Ci0JZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKKwlyZXQgPSBtbWNfb2ZfcGFyc2UobW1jKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKIAogCWhvc3QgPSBtbWNfcHJpdihtbWMpOwogCWhvc3QtPm1tYyA9IG1tYzsKQEAgLTYxMSw4ICs2MDksOCBAQAogCWhvc3QtPnRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDEwMDApOwogCWhvc3QtPnN5c2NsayA9IGNsa19nZXRfcmF0ZShjbGspOwogCWhvc3QtPmZpZm9fd2lkdGggPSByZWFkbChob3N0LT5iYXNlICsgUkVHX0ZFQVRVUkUpIDw8IDI7Ci0JaG9zdC0+ZG1hX2NoYW5fdHggPSBvZl9kbWFfcmVxdWVzdF9zbGF2ZV9jaGFubmVsKG5vZGUsICJ0eCIpOwotCWhvc3QtPmRtYV9jaGFuX3J4ID0gb2ZfZG1hX3JlcXVlc3Rfc2xhdmVfY2hhbm5lbChub2RlLCAicngiKTsKKwlob3N0LT5kbWFfY2hhbl90eCA9IGRtYV9yZXF1ZXN0X3NsYXZlX2NoYW5uZWxfcmVhc29uKGRldiwgInR4Iik7CisJaG9zdC0+ZG1hX2NoYW5fcnggPSBkbWFfcmVxdWVzdF9zbGF2ZV9jaGFubmVsX3JlYXNvbihkZXYsICJyeCIpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmxvY2spOwogCkBAIC02MjIsNiArNjIwLDExIEBACiAJbW1jLT5vY3JfYXZhaWwgPSAweGZmZmYwMDsJLyogU3VwcG9ydCAyLjB2IC0gMy42diBwb3dlci4gKi8KIAogCWlmIChJU19FUlIoaG9zdC0+ZG1hX2NoYW5fdHgpIHx8IElTX0VSUihob3N0LT5kbWFfY2hhbl9yeCkpIHsKKwkJaWYgKFBUUl9FUlIoaG9zdC0+ZG1hX2NoYW5fdHgpID09IC1FUFJPQkVfREVGRVIgfHwKKwkJICAgIFBUUl9FUlIoaG9zdC0+ZG1hX2NoYW5fcngpID09IC1FUFJPQkVfREVGRVIpIHsKKwkJCXJldCA9IC1FUFJPQkVfREVGRVI7CisJCQlnb3RvIG91dDsKKwkJfQogCQlkZXZfZGJnKGRldiwgIlBJTyBtb2RlIHRyYW5zZmVyIGVuYWJsZWRcbiIpOwogCQlob3N0LT5oYXZlX2RtYSA9IGZhbHNlOwogCX0gZWxzZSB7CkBAIC03MDAsOSArNzAzLDYgQEAKIAkJd3JpdGVsKHJlYWRsKGhvc3QtPmJhc2UgKyBSRUdfQ0xPQ0tfQ09OVFJPTCkgfCBDTEtfT0ZGLAogCQkgICAgICAgaG9zdC0+YmFzZSArIFJFR19DTE9DS19DT05UUk9MKTsKIAl9Ci0KLQlrZnJlZShob3N0KTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L212c2Rpby5jIGIvZHJpdmVycy9tbWMvaG9zdC9tdnNkaW8uYwppbmRleCA0Zjg2MThmLi5hNDQ4NDk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L212c2Rpby5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXZzZGlvLmMKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9zbG90LWdwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9waW5jdHJsL2NvbnN1bWVyLmg+CiAKICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CkBAIC03MDQsNyArNzAzLDYgQEAKIAljb25zdCBzdHJ1Y3QgbWJ1c19kcmFtX3RhcmdldF9pbmZvICpkcmFtOwogCXN0cnVjdCByZXNvdXJjZSAqcjsKIAlpbnQgcmV0LCBpcnE7Ci0Jc3RydWN0IHBpbmN0cmwgKnBpbmN0cmw7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwpAQCAtNzIxLDEwICs3MTksNiBAQAogCWhvc3QtPm1tYyA9IG1tYzsKIAlob3N0LT5kZXYgPSAmcGRldi0+ZGV2OwogCi0JcGluY3RybCA9IGRldm1fcGluY3RybF9nZXRfc2VsZWN0X2RlZmF1bHQoJnBkZXYtPmRldik7Ci0JaWYgKElTX0VSUihwaW5jdHJsKSkKLQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm5vIHBpbnMgYXNzb2NpYXRlZFxuIik7Ci0KIAkvKgogCSAqIFNvbWUgbm9uLURUIHBsYXRmb3JtcyBkbyBub3QgcGFzcyBhIGNsb2NrLCBhbmQgdGhlIGNsb2NrCiAJICogZnJlcXVlbmN5IGlzIHBhc3NlZCB0aHJvdWdoIHBsYXRmb3JtX2RhdGEuIE9uIERUIHBsYXRmb3JtcywKQEAgLTgyOCw4ICs4MjIsNiBAQAogCiBvdXQ6CiAJaWYgKG1tYykgewotCQltbWNfZ3Bpb19mcmVlX2NkKG1tYyk7Ci0JCW1tY19ncGlvX2ZyZWVfcm8obW1jKTsKIAkJaWYgKCFJU19FUlIoaG9zdC0+Y2xrKSkKIAkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5jbGspOwogCQltbWNfZnJlZV9ob3N0KG1tYyk7CkBAIC04NDQsOCArODM2LDYgQEAKIAogCXN0cnVjdCBtdnNkX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCi0JbW1jX2dwaW9fZnJlZV9jZChtbWMpOwotCW1tY19ncGlvX2ZyZWVfcm8obW1jKTsKIAltbWNfcmVtb3ZlX2hvc3QobW1jKTsKIAlkZWxfdGltZXJfc3luYygmaG9zdC0+dGltZXIpOwogCW12c2RfcG93ZXJfZG93bihob3N0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXhzLW1tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9teHMtbW1jLmMKaW5kZXggNjBjNGNhOS4uYTgyNDExYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9teHMtbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9teHMtbW1jLmMKQEAgLTY3Nyw4ICs2NzcsNyBAQAogCXJldHVybiAwOwogCiBvdXRfZnJlZV9kbWE6Ci0JaWYgKHNzcC0+ZG1hY2gpCi0JCWRtYV9yZWxlYXNlX2NoYW5uZWwoc3NwLT5kbWFjaCk7CisJZG1hX3JlbGVhc2VfY2hhbm5lbChzc3AtPmRtYWNoKTsKIG91dF9jbGtfZGlzYWJsZToKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoc3NwLT5jbGspOwogb3V0X21tY19mcmVlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwX2hzbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwppbmRleCA3YzcxZGNkLi5mODRjZmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvbW1jLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3Nsb3QtZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgpAQCAtMjUxLDU1ICsyNTIsMjQgQEAKIHN0YXRpYyBpbnQgb21hcF9oc21tY19jYXJkX2RldGVjdChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGhvc3QtPnBkYXRhOwogCi0JLyogTk9URTogYXNzdW1lcyBjYXJkIGRldGVjdCBzaWduYWwgaXMgYWN0aXZlLWxvdyAqLwotCXJldHVybiAhZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5zd2l0Y2hfcGluKTsKKwlyZXR1cm4gbW1jX2dwaW9fZ2V0X2NkKGhvc3QtPm1tYyk7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF9oc21tY19nZXRfd3Aoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBob3N0LT5wZGF0YTsKIAotCS8qIE5PVEU6IGFzc3VtZXMgd3JpdGUgcHJvdGVjdCBzaWduYWwgaXMgYWN0aXZlLWhpZ2ggKi8KLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5ncGlvX3dwKTsKKwlyZXR1cm4gbW1jX2dwaW9fZ2V0X3JvKGhvc3QtPm1tYyk7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF9oc21tY19nZXRfY292ZXJfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3Qgb21hcF9oc21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBob3N0LT5wZGF0YTsKIAotCS8qIE5PVEU6IGFzc3VtZXMgY2FyZCBkZXRlY3Qgc2lnbmFsIGlzIGFjdGl2ZS1sb3cgKi8KLQlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKG1tYy0+c3dpdGNoX3Bpbik7CisJcmV0dXJuIG1tY19ncGlvX2dldF9jZChob3N0LT5tbWMpOwogfQogCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBpbnQgb21hcF9oc21tY19zdXNwZW5kX2NkaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQlkaXNhYmxlX2lycShob3N0LT5jYXJkX2RldGVjdF9pcnEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG9tYXBfaHNtbWNfcmVzdW1lX2NkaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQllbmFibGVfaXJxKGhvc3QtPmNhcmRfZGV0ZWN0X2lycSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbHNlCi0KLSNkZWZpbmUgb21hcF9oc21tY19zdXNwZW5kX2NkaXJxCU5VTEwKLSNkZWZpbmUgb21hcF9oc21tY19yZXN1bWVfY2RpcnEJCU5VTEwKLQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCiAKIHN0YXRpYyBpbnQgb21hcF9oc21tY19zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgcG93ZXJfb24sIGludCB2ZGQpCkBAIC00NjQsNyArNDM0LDEwIEBACiAKICNlbmRpZgogCi1zdGF0aWMgaW50IG9tYXBfaHNtbWNfZ3Bpb19pbml0KHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QsCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcF9oc21tY19kZXRlY3QoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKKworc3RhdGljIGludCBvbWFwX2hzbW1jX2dwaW9faW5pdChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywKKwkJCQlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0LAogCQkJCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQogewogCWludCByZXQ7CkBAIC00NzcsNDYgKzQ1MCwyNCBAQAogCQkJaG9zdC0+Y2FyZF9kZXRlY3QgPSBvbWFwX2hzbW1jX2NhcmRfZGV0ZWN0OwogCQlob3N0LT5jYXJkX2RldGVjdF9pcnEgPQogCQkJCWdwaW9fdG9faXJxKHBkYXRhLT5zd2l0Y2hfcGluKTsKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5zd2l0Y2hfcGluLCAibW1jX2NkIik7CisJCW1tY19ncGlvX3NldF9jZF9pc3IobW1jLCBvbWFwX2hzbW1jX2RldGVjdCk7CisJCXJldCA9IG1tY19ncGlvX3JlcXVlc3RfY2QobW1jLCBwZGF0YS0+c3dpdGNoX3BpbiwgMCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwotCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChwZGF0YS0+c3dpdGNoX3Bpbik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycl9mcmVlX3NwOwogCX0gZWxzZSB7CiAJCXBkYXRhLT5zd2l0Y2hfcGluID0gLUVJTlZBTDsKIAl9CiAKIAlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+Z3Bpb193cCkpIHsKIAkJaG9zdC0+Z2V0X3JvID0gb21hcF9oc21tY19nZXRfd3A7Ci0JCXJldCA9IGdwaW9fcmVxdWVzdChwZGF0YS0+Z3Bpb193cCwgIm1tY193cCIpOworCQlyZXQgPSBtbWNfZ3Bpb19yZXF1ZXN0X3JvKG1tYywgcGRhdGEtPmdwaW9fd3ApOwogCQlpZiAocmV0KQotCQkJZ290byBlcnJfZnJlZV9jZDsKLQkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQocGRhdGEtPmdwaW9fd3ApOwotCQlpZiAocmV0KQotCQkJZ290byBlcnJfZnJlZV93cDsKKwkJCXJldHVybiByZXQ7CiAJfSBlbHNlIHsKIAkJcGRhdGEtPmdwaW9fd3AgPSAtRUlOVkFMOwogCX0KIAogCXJldHVybiAwOwotCi1lcnJfZnJlZV93cDoKLQlncGlvX2ZyZWUocGRhdGEtPmdwaW9fd3ApOwotZXJyX2ZyZWVfY2Q6Ci0JaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnN3aXRjaF9waW4pKQotZXJyX2ZyZWVfc3A6Ci0JCWdwaW9fZnJlZShwZGF0YS0+c3dpdGNoX3Bpbik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgb21hcF9oc21tY19ncGlvX2ZyZWUoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCwKLQkJCQkgc3RydWN0IG9tYXBfaHNtbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCi17Ci0JaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmdwaW9fd3ApKQotCQlncGlvX2ZyZWUocGRhdGEtPmdwaW9fd3ApOwotCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5zd2l0Y2hfcGluKSkKLQkJZ3Bpb19mcmVlKHBkYXRhLT5zd2l0Y2hfcGluKTsKIH0KIAogLyoKQEAgLTE5NzgsMTMgKzE5MjksNiBAQAogewogCXN0cnVjdCBvbWFwX2hzbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7Ci0JdTMyIGJ1c193aWR0aCwgbWF4X2ZyZXE7Ci0JaW50IGNkX2dwaW8sIHdwX2dwaW87Ci0KLQljZF9ncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8obnAsICJjZC1ncGlvcyIsIDApOwotCXdwX2dwaW8gPSBvZl9nZXRfbmFtZWRfZ3BpbyhucCwgIndwLWdwaW9zIiwgMCk7Ci0JaWYgKGNkX2dwaW8gPT0gLUVQUk9CRV9ERUZFUiB8fCB3cF9ncGlvID09IC1FUFJPQkVfREVGRVIpCi0JCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOwogCiAJcGRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZGF0YSkKQEAgLTE5OTMsMzQgKzE5MzcsMjAgQEAKIAlpZiAob2ZfZmluZF9wcm9wZXJ0eShucCwgInRpLGR1YWwtdm9sdCIsIE5VTEwpKQogCQlwZGF0YS0+Y29udHJvbGxlcl9mbGFncyB8PSBPTUFQX0hTTU1DX1NVUFBPUlRTX0RVQUxfVk9MVDsKIAotCXBkYXRhLT5zd2l0Y2hfcGluID0gY2RfZ3BpbzsKLQlwZGF0YS0+Z3Bpb193cCA9IHdwX2dwaW87CisJcGRhdGEtPnN3aXRjaF9waW4gPSAtRUlOVkFMOworCXBkYXRhLT5ncGlvX3dwID0gLUVJTlZBTDsKIAogCWlmIChvZl9maW5kX3Byb3BlcnR5KG5wLCAidGksbm9uLXJlbW92YWJsZSIsIE5VTEwpKSB7CiAJCXBkYXRhLT5ub25yZW1vdmFibGUgPSB0cnVlOwogCQlwZGF0YS0+bm9fcmVndWxhdG9yX29mZl9pbml0ID0gdHJ1ZTsKIAl9Ci0Jb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJidXMtd2lkdGgiLCAmYnVzX3dpZHRoKTsKLQlpZiAoYnVzX3dpZHRoID09IDQpCi0JCXBkYXRhLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKLQllbHNlIGlmIChidXNfd2lkdGggPT0gOCkKLQkJcGRhdGEtPmNhcHMgfD0gTU1DX0NBUF84X0JJVF9EQVRBOwogCiAJaWYgKG9mX2ZpbmRfcHJvcGVydHkobnAsICJ0aSxuZWVkcy1zcGVjaWFsLXJlc2V0IiwgTlVMTCkpCiAJCXBkYXRhLT5mZWF0dXJlcyB8PSBIU01NQ19IQVNfVVBEQVRFRF9SRVNFVDsKIAotCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJtYXgtZnJlcXVlbmN5IiwgJm1heF9mcmVxKSkKLQkJcGRhdGEtPm1heF9mcmVxID0gbWF4X2ZyZXE7Ci0KIAlpZiAob2ZfZmluZF9wcm9wZXJ0eShucCwgInRpLG5lZWRzLXNwZWNpYWwtaHMtaGFuZGxpbmciLCBOVUxMKSkKIAkJcGRhdGEtPmZlYXR1cmVzIHw9IEhTTU1DX0hBU19IU1BFX1NVUFBPUlQ7CiAKLQlpZiAob2ZfZmluZF9wcm9wZXJ0eShucCwgImtlZXAtcG93ZXItaW4tc3VzcGVuZCIsIE5VTEwpKQotCQlwZGF0YS0+cG1fY2FwcyB8PSBNTUNfUE1fS0VFUF9QT1dFUjsKLQotCWlmIChvZl9maW5kX3Byb3BlcnR5KG5wLCAiZW5hYmxlLXNkaW8td2FrZXVwIiwgTlVMTCkpCi0JCXBkYXRhLT5wbV9jYXBzIHw9IE1NQ19QTV9XQUtFX1NESU9fSVJROwotCiAJcmV0dXJuIHBkYXRhOwogfQogI2Vsc2UKQEAgLTIwNzgsNiArMjAwOCwxMCBAQAogCQlnb3RvIGVycjsKIAl9CiAKKwlyZXQgPSBtbWNfb2ZfcGFyc2UobW1jKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjE7CisKIAlob3N0CQk9IG1tY19wcml2KG1tYyk7CiAJaG9zdC0+bW1jCT0gbW1jOwogCWhvc3QtPnBkYXRhCT0gcGRhdGE7CkBAIC0yMDkxLDcgKzIwMjUsNyBAQAogCWhvc3QtPm5leHRfZGF0YS5jb29raWUgPSAxOwogCWhvc3QtPnBiaWFzX2VuYWJsZWQgPSAwOwogCi0JcmV0ID0gb21hcF9oc21tY19ncGlvX2luaXQoaG9zdCwgcGRhdGEpOworCXJldCA9IG9tYXBfaHNtbWNfZ3Bpb19pbml0KG1tYywgaG9zdCwgcGRhdGEpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2dwaW87CiAKQEAgLTIxMDYsNyArMjA0MCw3IEBACiAKIAlpZiAocGRhdGEtPm1heF9mcmVxID4gMCkKIAkJbW1jLT5mX21heCA9IHBkYXRhLT5tYXhfZnJlcTsKLQllbHNlCisJZWxzZSBpZiAobW1jLT5mX21heCA9PSAwKQogCQltbWMtPmZfbWF4ID0gT01BUF9NTUNfTUFYX0NMT0NLOwogCiAJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmlycV9sb2NrKTsKQEAgLTIxNjAsNyArMjA5NCw3IEBACiAJaWYgKG1tY19wZGF0YShob3N0KS0+bm9ucmVtb3ZhYmxlKQogCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9OT05SRU1PVkFCTEU7CiAKLQltbWMtPnBtX2NhcHMgPSBtbWNfcGRhdGEoaG9zdCktPnBtX2NhcHM7CisJbW1jLT5wbV9jYXBzIHw9IG1tY19wZGF0YShob3N0KS0+cG1fY2FwczsKIAogCW9tYXBfaHNtbWNfY29uZl9idXNfcG93ZXIoaG9zdCk7CiAKQEAgLTIyMjIsMjIgKzIxNTYsNiBAQAogCiAJbW1jLT5vY3JfYXZhaWwgPSBtbWNfcGRhdGEoaG9zdCktPm9jcl9tYXNrOwogCi0JLyogUmVxdWVzdCBJUlEgZm9yIGNhcmQgZGV0ZWN0ICovCi0JaWYgKGhvc3QtPmNhcmRfZGV0ZWN0X2lycSkgewotCQlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZwZGV2LT5kZXYsCi0JCQkJCQlob3N0LT5jYXJkX2RldGVjdF9pcnEsCi0JCQkJCQlOVUxMLCBvbWFwX2hzbW1jX2RldGVjdCwKLQkJCQkJICAgSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9PTkVTSE9ULAotCQkJCQkgICBtbWNfaG9zdG5hbWUobW1jKSwgaG9zdCk7Ci0JCWlmIChyZXQpIHsKLQkJCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLAotCQkJCSJVbmFibGUgdG8gZ3JhYiBNTUMgQ0QgSVJRXG4iKTsKLQkJCWdvdG8gZXJyX2lycV9jZDsKLQkJfQotCQlob3N0LT5zdXNwZW5kID0gb21hcF9oc21tY19zdXNwZW5kX2NkaXJxOwotCQlob3N0LT5yZXN1bWUgPSBvbWFwX2hzbW1jX3Jlc3VtZV9jZGlycTsKLQl9Ci0KIAlvbWFwX2hzbW1jX2Rpc2FibGVfaXJxKGhvc3QpOwogCiAJLyoKQEAgLTIyNzYsNyArMjE5NCw2IEBACiAKIGVycl9zbG90X25hbWU6CiAJbW1jX3JlbW92ZV9ob3N0KG1tYyk7Ci1lcnJfaXJxX2NkOgogCWlmIChob3N0LT51c2VfcmVnKQogCQlvbWFwX2hzbW1jX3JlZ19wdXQoaG9zdCk7CiBlcnJfaXJxOgpAQCAtMjI4OSw3ICsyMjA2LDYgQEAKIAlpZiAoaG9zdC0+ZGJjbGspCiAJCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5kYmNsayk7CiBlcnIxOgotCW9tYXBfaHNtbWNfZ3Bpb19mcmVlKGhvc3QsIHBkYXRhKTsKIGVycl9ncGlvOgogCW1tY19mcmVlX2hvc3QobW1jKTsKIGVycjoKQEAgLTIzMTUsMzIgKzIyMzEsMTIgQEAKIAlpZiAoaG9zdC0+ZGJjbGspCiAJCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5kYmNsayk7CiAKLQlvbWFwX2hzbW1jX2dwaW9fZnJlZShob3N0LCBob3N0LT5wZGF0YSk7CiAJbW1jX2ZyZWVfaG9zdChob3N0LT5tbWMpOwogCiAJcmV0dXJuIDA7CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgb21hcF9oc21tY19wcmVwYXJlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQlpZiAoaG9zdC0+c3VzcGVuZCkKLQkJcmV0dXJuIGhvc3QtPnN1c3BlbmQoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBvbWFwX2hzbW1jX2NvbXBsZXRlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0KLQlpZiAoaG9zdC0+cmVzdW1lKQotCQlob3N0LT5yZXN1bWUoZGV2KTsKLQotfQotCiBzdGF0aWMgaW50IG9tYXBfaHNtbWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtMjM5OCw4ICsyMjk0LDYgQEAKIH0KIAogI2Vsc2UKLSNkZWZpbmUgb21hcF9oc21tY19wcmVwYXJlCU5VTEwKLSNkZWZpbmUgb21hcF9oc21tY19jb21wbGV0ZQlOVUxMCiAjZGVmaW5lIG9tYXBfaHNtbWNfc3VzcGVuZAlOVUxMCiAjZGVmaW5lIG9tYXBfaHNtbWNfcmVzdW1lCU5VTEwKICNlbmRpZgpAQCAtMjQ4NCw4ICsyMzc4LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBvbWFwX2hzbW1jX2Rldl9wbV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBvbWFwX2hzbW1jX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBvbWFwX2hzbW1jX3Jlc3VtZSwKLQkucHJlcGFyZQk9IG9tYXBfaHNtbWNfcHJlcGFyZSwKLQkuY29tcGxldGUJPSBvbWFwX2hzbW1jX2NvbXBsZXRlLAogCS5ydW50aW1lX3N1c3BlbmQgPSBvbWFwX2hzbW1jX3J1bnRpbWVfc3VzcGVuZCwKIAkucnVudGltZV9yZXN1bWUgPSBvbWFwX2hzbW1jX3J1bnRpbWVfcmVzdW1lLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvcnRzeF9wY2lfc2RtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvcnRzeF9wY2lfc2RtbWMuYwppbmRleCBjNzBiNjAyLi4xZDNkNmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3J0c3hfcGNpX3NkbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9ydHN4X3BjaV9zZG1tYy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvbW1jLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL3NkLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL3NkaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9ydHN4X3BjaS5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KQEAgLTUzLDkgKzU0LDkgQEAKICNkZWZpbmUgU0RNTUNfUE9XRVJfT04JCTEKICNkZWZpbmUgU0RNTUNfUE9XRVJfT0ZGCQkwCiAKLQl1bnNpZ25lZCBpbnQJCXNnX2NvdW50OworCWludAkJCXNnX2NvdW50OwogCXMzMgkJCWNvb2tpZTsKLQl1bnNpZ25lZCBpbnQJCWNvb2tpZV9zZ19jb3VudDsKKwlpbnQJCQljb29raWVfc2dfY291bnQ7CiAJYm9vbAkJCXVzaW5nX2Nvb2tpZTsKIH07CiAKQEAgLTcxLDMwICs3Miw4MyBAQAogfQogCiAjaWZkZWYgREVCVUcKK3N0YXRpYyB2b2lkIGR1bXBfcmVnX3JhbmdlKHN0cnVjdCByZWFsdGVrX3BjaV9zZG1tYyAqaG9zdCwgdTE2IHN0YXJ0LCB1MTYgZW5kKQoreworCXUxNiBsZW4gPSBlbmQgLSBzdGFydCArIDE7CisJaW50IGk7CisJdTggZGF0YVs4XTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkgeworCQlpbnQgajsKKwkJaW50IG4gPSBtaW4oOCwgbGVuIC0gaSk7CisKKwkJbWVtc2V0KCZkYXRhLCAwLCBzaXplb2YoZGF0YSkpOworCQlmb3IgKGogPSAwOyBqIDwgbjsgaisrKQorCQkJcnRzeF9wY2lfcmVhZF9yZWdpc3Rlcihob3N0LT5wY3IsIHN0YXJ0ICsgaSArIGosCisJCQkJZGF0YSArIGopOworCQlkZXZfZGJnKHNkbW1jX2Rldihob3N0KSwgIjB4JTA0WCglZCk6ICU4cGhcbiIsCisJCQlzdGFydCArIGksIG4sIGRhdGEpOworCX0KK30KKwogc3RhdGljIHZvaWQgc2RfcHJpbnRfZGVidWdfcmVncyhzdHJ1Y3QgcmVhbHRla19wY2lfc2RtbWMgKmhvc3QpCiB7Ci0Jc3RydWN0IHJ0c3hfcGNyICpwY3IgPSBob3N0LT5wY3I7Ci0JdTE2IGk7Ci0JdTggKnB0cjsKLQotCS8qIFByaW50IFNEIGhvc3QgaW50ZXJuYWwgcmVnaXN0ZXJzICovCi0JcnRzeF9wY2lfaW5pdF9jbWQocGNyKTsKLQlmb3IgKGkgPSAweEZEQTA7IGkgPD0gMHhGREFFOyBpKyspCi0JCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBSRUFEX1JFR19DTUQsIGksIDAsIDApOwotCWZvciAoaSA9IDB4RkQ1MjsgaSA8PSAweEZENjk7IGkrKykKLQkJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFJFQURfUkVHX0NNRCwgaSwgMCwgMCk7Ci0JcnRzeF9wY2lfc2VuZF9jbWQocGNyLCAxMDApOwotCi0JcHRyID0gcnRzeF9wY2lfZ2V0X2NtZF9kYXRhKHBjcik7Ci0JZm9yIChpID0gMHhGREEwOyBpIDw9IDB4RkRBRTsgaSsrKQotCQlkZXZfZGJnKHNkbW1jX2Rldihob3N0KSwgIjB4JTA0WDogMHglMDJ4XG4iLCBpLCAqKHB0cisrKSk7Ci0JZm9yIChpID0gMHhGRDUyOyBpIDw9IDB4RkQ2OTsgaSsrKQotCQlkZXZfZGJnKHNkbW1jX2Rldihob3N0KSwgIjB4JTA0WDogMHglMDJ4XG4iLCBpLCAqKHB0cisrKSk7CisJZHVtcF9yZWdfcmFuZ2UoaG9zdCwgMHhGREEwLCAweEZEQjMpOworCWR1bXBfcmVnX3JhbmdlKGhvc3QsIDB4RkQ1MiwgMHhGRDY5KTsKIH0KICNlbHNlCiAjZGVmaW5lIHNkX3ByaW50X2RlYnVnX3JlZ3MoaG9zdCkKICNlbmRpZiAvKiBERUJVRyAqLwogCitzdGF0aWMgaW5saW5lIGludCBzZF9nZXRfY2RfaW50KHN0cnVjdCByZWFsdGVrX3BjaV9zZG1tYyAqaG9zdCkKK3sKKwlyZXR1cm4gcnRzeF9wY2lfcmVhZGwoaG9zdC0+cGNyLCBSVFNYX0JJUFIpICYgU0RfRVhJU1Q7Cit9CisKK3N0YXRpYyB2b2lkIHNkX2NtZF9zZXRfc2RfY21kKHN0cnVjdCBydHN4X3BjciAqcGNyLCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKK3sKKwlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgU0RfQ01EMCwgMHhGRiwKKwkJU0RfQ01EX1NUQVJUIHwgY21kLT5vcGNvZGUpOworCXJ0c3hfcGNpX3dyaXRlX2JlMzIocGNyLCBTRF9DTUQxLCBjbWQtPmFyZyk7Cit9CisKK3N0YXRpYyB2b2lkIHNkX2NtZF9zZXRfZGF0YV9sZW4oc3RydWN0IHJ0c3hfcGNyICpwY3IsIHUxNiBibG9ja3MsIHUxNiBibGtzeikKK3sKKwlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgU0RfQkxPQ0tfQ05UX0wsIDB4RkYsIGJsb2Nrcyk7CisJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX0JMT0NLX0NOVF9ILCAweEZGLCBibG9ja3MgPj4gOCk7CisJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX0JZVEVfQ05UX0wsIDB4RkYsIGJsa3N6KTsKKwlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgU0RfQllURV9DTlRfSCwgMHhGRiwgYmxrc3ogPj4gOCk7Cit9CisKK3N0YXRpYyBpbnQgc2RfcmVzcG9uc2VfdHlwZShzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKK3sKKwlzd2l0Y2ggKG1tY19yZXNwX3R5cGUoY21kKSkgeworCWNhc2UgTU1DX1JTUF9OT05FOgorCQlyZXR1cm4gU0RfUlNQX1RZUEVfUjA7CisJY2FzZSBNTUNfUlNQX1IxOgorCQlyZXR1cm4gU0RfUlNQX1RZUEVfUjE7CisJY2FzZSBNTUNfUlNQX1IxICYgfk1NQ19SU1BfQ1JDOgorCQlyZXR1cm4gU0RfUlNQX1RZUEVfUjEgfCBTRF9OT19DSEVDS19DUkM3OworCWNhc2UgTU1DX1JTUF9SMUI6CisJCXJldHVybiBTRF9SU1BfVFlQRV9SMWI7CisJY2FzZSBNTUNfUlNQX1IyOgorCQlyZXR1cm4gU0RfUlNQX1RZUEVfUjI7CisJY2FzZSBNTUNfUlNQX1IzOgorCQlyZXR1cm4gU0RfUlNQX1RZUEVfUjM7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IHNkX3N0YXR1c19pbmRleChpbnQgcmVzcF90eXBlKQoreworCWlmIChyZXNwX3R5cGUgPT0gU0RfUlNQX1RZUEVfUjApCisJCXJldHVybiAwOworCWVsc2UgaWYgKHJlc3BfdHlwZSA9PSBTRF9SU1BfVFlQRV9SMikKKwkJcmV0dXJuIDE2OworCisJcmV0dXJuIDU7Cit9CiAvKgogICogc2RfcHJlX2RtYV90cmFuc2ZlciAtIGRvIGRtYV9tYXBfc2coKSBvciB1c2luZyBjb29raWUKICAqCkBAIC0xNjYsMTIzICsyMjAsNiBAQAogCWRhdGEtPmhvc3RfY29va2llID0gMDsKIH0KIAotc3RhdGljIGludCBzZF9yZWFkX2RhdGEoc3RydWN0IHJlYWx0ZWtfcGNpX3NkbW1jICpob3N0LCB1OCAqY21kLCB1MTYgYnl0ZV9jbnQsCi0JCXU4ICpidWYsIGludCBidWZfbGVuLCBpbnQgdGltZW91dCkKLXsKLQlzdHJ1Y3QgcnRzeF9wY3IgKnBjciA9IGhvc3QtPnBjcjsKLQlpbnQgZXJyLCBpOwotCXU4IHRyYW5zX21vZGU7Ci0KLQlkZXZfZGJnKHNkbW1jX2Rldihob3N0KSwgIiVzOiBTRC9NTUMgQ01EJWRcbiIsIF9fZnVuY19fLCBjbWRbMF0gLSAweDQwKTsKLQotCWlmICghYnVmKQotCQlidWZfbGVuID0gMDsKLQotCWlmICgoY21kWzBdICYgMHgzRikgPT0gTU1DX1NFTkRfVFVOSU5HX0JMT0NLKQotCQl0cmFuc19tb2RlID0gU0RfVE1fQVVUT19UVU5JTkc7Ci0JZWxzZQotCQl0cmFuc19tb2RlID0gU0RfVE1fTk9STUFMX1JFQUQ7Ci0KLQlydHN4X3BjaV9pbml0X2NtZChwY3IpOwotCi0JZm9yIChpID0gMDsgaSA8IDU7IGkrKykKLQkJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX0NNRDAgKyBpLCAweEZGLCBjbWRbaV0pOwotCi0JcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX0JZVEVfQ05UX0wsIDB4RkYsICh1OClieXRlX2NudCk7Ci0JcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX0JZVEVfQ05UX0gsCi0JCQkweEZGLCAodTgpKGJ5dGVfY250ID4+IDgpKTsKLQlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgU0RfQkxPQ0tfQ05UX0wsIDB4RkYsIDEpOwotCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBTRF9CTE9DS19DTlRfSCwgMHhGRiwgMCk7Ci0KLQlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgU0RfQ0ZHMiwgMHhGRiwKLQkJCVNEX0NBTENVTEFURV9DUkM3IHwgU0RfQ0hFQ0tfQ1JDMTYgfAotCQkJU0RfTk9fV0FJVF9CVVNZX0VORCB8IFNEX0NIRUNLX0NSQzcgfCBTRF9SU1BfTEVOXzYpOwotCWlmICh0cmFuc19tb2RlICE9IFNEX1RNX0FVVE9fVFVOSU5HKQotCQlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwKLQkJCQlDQVJEX0RBVEFfU09VUkNFLCAweDAxLCBQSU5HUE9OR19CVUZGRVIpOwotCi0JcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX1RSQU5TRkVSLAotCQkJMHhGRiwgdHJhbnNfbW9kZSB8IFNEX1RSQU5TRkVSX1NUQVJUKTsKLQlydHN4X3BjaV9hZGRfY21kKHBjciwgQ0hFQ0tfUkVHX0NNRCwgU0RfVFJBTlNGRVIsCi0JCQlTRF9UUkFOU0ZFUl9FTkQsIFNEX1RSQU5TRkVSX0VORCk7Ci0KLQllcnIgPSBydHN4X3BjaV9zZW5kX2NtZChwY3IsIHRpbWVvdXQpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXNkX3ByaW50X2RlYnVnX3JlZ3MoaG9zdCk7Ci0JCWRldl9kYmcoc2RtbWNfZGV2KGhvc3QpLAotCQkJInJ0c3hfcGNpX3NlbmRfY21kIGZhaWwgKGVyciA9ICVkKVxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlpZiAoYnVmICYmIGJ1Zl9sZW4pIHsKLQkJZXJyID0gcnRzeF9wY2lfcmVhZF9wcGJ1ZihwY3IsIGJ1ZiwgYnVmX2xlbik7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlkZXZfZGJnKHNkbW1jX2Rldihob3N0KSwKLQkJCQkicnRzeF9wY2lfcmVhZF9wcGJ1ZiBmYWlsIChlcnIgPSAlZClcbiIsIGVycik7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2Rfd3JpdGVfZGF0YShzdHJ1Y3QgcmVhbHRla19wY2lfc2RtbWMgKmhvc3QsIHU4ICpjbWQsIHUxNiBieXRlX2NudCwKLQkJdTggKmJ1ZiwgaW50IGJ1Zl9sZW4sIGludCB0aW1lb3V0KQotewotCXN0cnVjdCBydHN4X3BjciAqcGNyID0gaG9zdC0+cGNyOwotCWludCBlcnIsIGk7Ci0JdTggdHJhbnNfbW9kZTsKLQotCWlmICghYnVmKQotCQlidWZfbGVuID0gMDsKLQotCWlmIChidWYgJiYgYnVmX2xlbikgewotCQllcnIgPSBydHN4X3BjaV93cml0ZV9wcGJ1ZihwY3IsIGJ1ZiwgYnVmX2xlbik7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlkZXZfZGJnKHNkbW1jX2Rldihob3N0KSwKLQkJCQkicnRzeF9wY2lfd3JpdGVfcHBidWYgZmFpbCAoZXJyID0gJWQpXG4iLCBlcnIpOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCX0KLQotCXRyYW5zX21vZGUgPSBjbWQgPyBTRF9UTV9BVVRPX1dSSVRFXzIgOiBTRF9UTV9BVVRPX1dSSVRFXzM7Ci0JcnRzeF9wY2lfaW5pdF9jbWQocGNyKTsKLQotCWlmIChjbWQpIHsKLQkJZGV2X2RiZyhzZG1tY19kZXYoaG9zdCksICIlczogU0QvTU1DIENNRCAlZFxuIiwgX19mdW5jX18sCi0JCQkJY21kWzBdIC0gMHg0MCk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKLQkJCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELAotCQkJCQlTRF9DTUQwICsgaSwgMHhGRiwgY21kW2ldKTsKLQl9Ci0KLQlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgU0RfQllURV9DTlRfTCwgMHhGRiwgKHU4KWJ5dGVfY250KTsKLQlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgU0RfQllURV9DTlRfSCwKLQkJCTB4RkYsICh1OCkoYnl0ZV9jbnQgPj4gOCkpOwotCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBTRF9CTE9DS19DTlRfTCwgMHhGRiwgMSk7Ci0JcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX0JMT0NLX0NOVF9ILCAweEZGLCAwKTsKLQotCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBTRF9DRkcyLCAweEZGLAotCQlTRF9DQUxDVUxBVEVfQ1JDNyB8IFNEX0NIRUNLX0NSQzE2IHwKLQkJU0RfTk9fV0FJVF9CVVNZX0VORCB8IFNEX0NIRUNLX0NSQzcgfCBTRF9SU1BfTEVOXzYpOwotCi0JcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX1RSQU5TRkVSLCAweEZGLAotCQkJdHJhbnNfbW9kZSB8IFNEX1RSQU5TRkVSX1NUQVJUKTsKLQlydHN4X3BjaV9hZGRfY21kKHBjciwgQ0hFQ0tfUkVHX0NNRCwgU0RfVFJBTlNGRVIsCi0JCQlTRF9UUkFOU0ZFUl9FTkQsIFNEX1RSQU5TRkVSX0VORCk7Ci0KLQllcnIgPSBydHN4X3BjaV9zZW5kX2NtZChwY3IsIHRpbWVvdXQpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXNkX3ByaW50X2RlYnVnX3JlZ3MoaG9zdCk7Ci0JCWRldl9kYmcoc2RtbWNfZGV2KGhvc3QpLAotCQkJInJ0c3hfcGNpX3NlbmRfY21kIGZhaWwgKGVyciA9ICVkKVxuIiwgZXJyKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgc2Rfc2VuZF9jbWRfZ2V0X3JzcChzdHJ1Y3QgcmVhbHRla19wY2lfc2RtbWMgKmhvc3QsCiAJCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kKQogewpAQCAtMjkzLDQ3ICsyMzAsMTggQEAKIAlpbnQgdGltZW91dCA9IDEwMDsKIAlpbnQgaTsKIAl1OCAqcHRyOwotCWludCBzdGF0X2lkeCA9IDA7Ci0JdTggcnNwX3R5cGU7Ci0JaW50IHJzcF9sZW4gPSA1OworCWludCByc3BfdHlwZTsKKwlpbnQgc3RhdF9pZHg7CiAJYm9vbCBjbG9ja190b2dnbGVkID0gZmFsc2U7CiAKIAlkZXZfZGJnKHNkbW1jX2Rldihob3N0KSwgIiVzOiBTRC9NTUMgQ01EICVkLCBhcmcgPSAweCUwOHhcbiIsCiAJCQlfX2Z1bmNfXywgY21kX2lkeCwgYXJnKTsKIAotCS8qIFJlc3BvbnNlIHR5cGU6Ci0JICogUjAKLQkgKiBSMSwgUjUsIFI2LCBSNwotCSAqIFIxYgotCSAqIFIyCi0JICogUjMsIFI0Ci0JICovCi0Jc3dpdGNoIChtbWNfcmVzcF90eXBlKGNtZCkpIHsKLQljYXNlIE1NQ19SU1BfTk9ORToKLQkJcnNwX3R5cGUgPSBTRF9SU1BfVFlQRV9SMDsKLQkJcnNwX2xlbiA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgTU1DX1JTUF9SMToKLQkJcnNwX3R5cGUgPSBTRF9SU1BfVFlQRV9SMTsKLQkJYnJlYWs7Ci0JY2FzZSBNTUNfUlNQX1IxICYgfk1NQ19SU1BfQ1JDOgotCQlyc3BfdHlwZSA9IFNEX1JTUF9UWVBFX1IxIHwgU0RfTk9fQ0hFQ0tfQ1JDNzsKLQkJYnJlYWs7Ci0JY2FzZSBNTUNfUlNQX1IxQjoKLQkJcnNwX3R5cGUgPSBTRF9SU1BfVFlQRV9SMWI7Ci0JCWJyZWFrOwotCWNhc2UgTU1DX1JTUF9SMjoKLQkJcnNwX3R5cGUgPSBTRF9SU1BfVFlQRV9SMjsKLQkJcnNwX2xlbiA9IDE2OwotCQlicmVhazsKLQljYXNlIE1NQ19SU1BfUjM6Ci0JCXJzcF90eXBlID0gU0RfUlNQX1RZUEVfUjM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl9kYmcoc2RtbWNfZGV2KGhvc3QpLCAiY21kLT5mbGFnIGlzIG5vdCB2YWxpZFxuIik7Ci0JCWVyciA9IC1FSU5WQUw7CisJcnNwX3R5cGUgPSBzZF9yZXNwb25zZV90eXBlKGNtZCk7CisJaWYgKHJzcF90eXBlIDwgMCkKIAkJZ290byBvdXQ7Ci0JfQorCisJc3RhdF9pZHggPSBzZF9zdGF0dXNfaW5kZXgocnNwX3R5cGUpOwogCiAJaWYgKHJzcF90eXBlID09IFNEX1JTUF9UWVBFX1IxYikKIAkJdGltZW91dCA9IDMwMDA7CkBAIC0zNDgsMTMgKzI1Niw3IEBACiAJfQogCiAJcnRzeF9wY2lfaW5pdF9jbWQocGNyKTsKLQotCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBTRF9DTUQwLCAweEZGLCAweDQwIHwgY21kX2lkeCk7Ci0JcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX0NNRDEsIDB4RkYsICh1OCkoYXJnID4+IDI0KSk7Ci0JcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX0NNRDIsIDB4RkYsICh1OCkoYXJnID4+IDE2KSk7Ci0JcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX0NNRDMsIDB4RkYsICh1OCkoYXJnID4+IDgpKTsKLQlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgU0RfQ01ENCwgMHhGRiwgKHU4KWFyZyk7Ci0KKwlzZF9jbWRfc2V0X3NkX2NtZChwY3IsIGNtZCk7CiAJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX0NGRzIsIDB4RkYsIHJzcF90eXBlKTsKIAlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgQ0FSRF9EQVRBX1NPVVJDRSwKIAkJCTB4MDEsIFBJTkdQT05HX0JVRkZFUik7CkBAIC0zNjgsMTIgKzI3MCwxMCBAQAogCQkvKiBSZWFkIGRhdGEgZnJvbSBwaW5nLXBvbmcgYnVmZmVyICovCiAJCWZvciAoaSA9IFBQQlVGX0JBU0UyOyBpIDwgUFBCVUZfQkFTRTIgKyAxNjsgaSsrKQogCQkJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFJFQURfUkVHX0NNRCwgKHUxNilpLCAwLCAwKTsKLQkJc3RhdF9pZHggPSAxNjsKIAl9IGVsc2UgaWYgKHJzcF90eXBlICE9IFNEX1JTUF9UWVBFX1IwKSB7CiAJCS8qIFJlYWQgZGF0YSBmcm9tIFNEX0NNRHggcmVnaXN0ZXJzICovCiAJCWZvciAoaSA9IFNEX0NNRDA7IGkgPD0gU0RfQ01ENDsgaSsrKQogCQkJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFJFQURfUkVHX0NNRCwgKHUxNilpLCAwLCAwKTsKLQkJc3RhdF9pZHggPSA1OwogCX0KIAogCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBSRUFEX1JFR19DTUQsIFNEX1NUQVQxLCAwLCAwKTsKQEAgLTQzOCw3MSArMzM4LDIxMyBAQAogCQkJCVNEX0NMS19UT0dHTEVfRU4gfCBTRF9DTEtfRk9SQ0VfU1RPUCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgc2RfcndfbXVsdGkoc3RydWN0IHJlYWx0ZWtfcGNpX3NkbW1jICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSkKK3N0YXRpYyBpbnQgc2RfcmVhZF9kYXRhKHN0cnVjdCByZWFsdGVrX3BjaV9zZG1tYyAqaG9zdCwgc3RydWN0IG1tY19jb21tYW5kICpjbWQsCisJdTE2IGJ5dGVfY250LCB1OCAqYnVmLCBpbnQgYnVmX2xlbiwgaW50IHRpbWVvdXQpCit7CisJc3RydWN0IHJ0c3hfcGNyICpwY3IgPSBob3N0LT5wY3I7CisJaW50IGVycjsKKwl1OCB0cmFuc19tb2RlOworCisJZGV2X2RiZyhzZG1tY19kZXYoaG9zdCksICIlczogU0QvTU1DIENNRCAlZCwgYXJnID0gMHglMDh4XG4iLAorCQlfX2Z1bmNfXywgY21kLT5vcGNvZGUsIGNtZC0+YXJnKTsKKworCWlmICghYnVmKQorCQlidWZfbGVuID0gMDsKKworCWlmIChjbWQtPm9wY29kZSA9PSBNTUNfU0VORF9UVU5JTkdfQkxPQ0spCisJCXRyYW5zX21vZGUgPSBTRF9UTV9BVVRPX1RVTklORzsKKwllbHNlCisJCXRyYW5zX21vZGUgPSBTRF9UTV9OT1JNQUxfUkVBRDsKKworCXJ0c3hfcGNpX2luaXRfY21kKHBjcik7CisJc2RfY21kX3NldF9zZF9jbWQocGNyLCBjbWQpOworCXNkX2NtZF9zZXRfZGF0YV9sZW4ocGNyLCAxLCBieXRlX2NudCk7CisJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX0NGRzIsIDB4RkYsCisJCQlTRF9DQUxDVUxBVEVfQ1JDNyB8IFNEX0NIRUNLX0NSQzE2IHwKKwkJCVNEX05PX1dBSVRfQlVTWV9FTkQgfCBTRF9DSEVDS19DUkM3IHwgU0RfUlNQX0xFTl82KTsKKwlpZiAodHJhbnNfbW9kZSAhPSBTRF9UTV9BVVRPX1RVTklORykKKwkJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsCisJCQkJQ0FSRF9EQVRBX1NPVVJDRSwgMHgwMSwgUElOR1BPTkdfQlVGRkVSKTsKKworCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBTRF9UUkFOU0ZFUiwKKwkJCTB4RkYsIHRyYW5zX21vZGUgfCBTRF9UUkFOU0ZFUl9TVEFSVCk7CisJcnRzeF9wY2lfYWRkX2NtZChwY3IsIENIRUNLX1JFR19DTUQsIFNEX1RSQU5TRkVSLAorCQkJU0RfVFJBTlNGRVJfRU5ELCBTRF9UUkFOU0ZFUl9FTkQpOworCisJZXJyID0gcnRzeF9wY2lfc2VuZF9jbWQocGNyLCB0aW1lb3V0KTsKKwlpZiAoZXJyIDwgMCkgeworCQlzZF9wcmludF9kZWJ1Z19yZWdzKGhvc3QpOworCQlkZXZfZGJnKHNkbW1jX2Rldihob3N0KSwKKwkJCSJydHN4X3BjaV9zZW5kX2NtZCBmYWlsIChlcnIgPSAlZClcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKGJ1ZiAmJiBidWZfbGVuKSB7CisJCWVyciA9IHJ0c3hfcGNpX3JlYWRfcHBidWYocGNyLCBidWYsIGJ1Zl9sZW4pOworCQlpZiAoZXJyIDwgMCkgeworCQkJZGV2X2RiZyhzZG1tY19kZXYoaG9zdCksCisJCQkJInJ0c3hfcGNpX3JlYWRfcHBidWYgZmFpbCAoZXJyID0gJWQpXG4iLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3dyaXRlX2RhdGEoc3RydWN0IHJlYWx0ZWtfcGNpX3NkbW1jICpob3N0LAorCXN0cnVjdCBtbWNfY29tbWFuZCAqY21kLCB1MTYgYnl0ZV9jbnQsIHU4ICpidWYsIGludCBidWZfbGVuLAorCWludCB0aW1lb3V0KQoreworCXN0cnVjdCBydHN4X3BjciAqcGNyID0gaG9zdC0+cGNyOworCWludCBlcnI7CisKKwlkZXZfZGJnKHNkbW1jX2Rldihob3N0KSwgIiVzOiBTRC9NTUMgQ01EICVkLCBhcmcgPSAweCUwOHhcbiIsCisJCV9fZnVuY19fLCBjbWQtPm9wY29kZSwgY21kLT5hcmcpOworCisJaWYgKCFidWYpCisJCWJ1Zl9sZW4gPSAwOworCisJc2Rfc2VuZF9jbWRfZ2V0X3JzcChob3N0LCBjbWQpOworCWlmIChjbWQtPmVycm9yKQorCQlyZXR1cm4gY21kLT5lcnJvcjsKKworCWlmIChidWYgJiYgYnVmX2xlbikgeworCQllcnIgPSBydHN4X3BjaV93cml0ZV9wcGJ1ZihwY3IsIGJ1ZiwgYnVmX2xlbik7CisJCWlmIChlcnIgPCAwKSB7CisJCQlkZXZfZGJnKHNkbW1jX2Rldihob3N0KSwKKwkJCQkicnRzeF9wY2lfd3JpdGVfcHBidWYgZmFpbCAoZXJyID0gJWQpXG4iLCBlcnIpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJ0c3hfcGNpX2luaXRfY21kKHBjcik7CisJc2RfY21kX3NldF9kYXRhX2xlbihwY3IsIDEsIGJ5dGVfY250KTsKKwlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgU0RfQ0ZHMiwgMHhGRiwKKwkJU0RfQ0FMQ1VMQVRFX0NSQzcgfCBTRF9DSEVDS19DUkMxNiB8CisJCVNEX05PX1dBSVRfQlVTWV9FTkQgfCBTRF9DSEVDS19DUkM3IHwgU0RfUlNQX0xFTl8wKTsKKwlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgU0RfVFJBTlNGRVIsIDB4RkYsCisJCQlTRF9UUkFOU0ZFUl9TVEFSVCB8IFNEX1RNX0FVVE9fV1JJVEVfMyk7CisJcnRzeF9wY2lfYWRkX2NtZChwY3IsIENIRUNLX1JFR19DTUQsIFNEX1RSQU5TRkVSLAorCQkJU0RfVFJBTlNGRVJfRU5ELCBTRF9UUkFOU0ZFUl9FTkQpOworCisJZXJyID0gcnRzeF9wY2lfc2VuZF9jbWQocGNyLCB0aW1lb3V0KTsKKwlpZiAoZXJyIDwgMCkgeworCQlzZF9wcmludF9kZWJ1Z19yZWdzKGhvc3QpOworCQlkZXZfZGJnKHNkbW1jX2Rldihob3N0KSwKKwkJCSJydHN4X3BjaV9zZW5kX2NtZCBmYWlsIChlcnIgPSAlZClcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfcmVhZF9sb25nX2RhdGEoc3RydWN0IHJlYWx0ZWtfcGNpX3NkbW1jICpob3N0LAorCXN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQogewogCXN0cnVjdCBydHN4X3BjciAqcGNyID0gaG9zdC0+cGNyOwogCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gaG9zdC0+bW1jOwogCXN0cnVjdCBtbWNfY2FyZCAqY2FyZCA9IG1tYy0+Y2FyZDsKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCA9IG1ycS0+Y21kOwogCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IG1ycS0+ZGF0YTsKIAlpbnQgdWhzID0gbW1jX2NhcmRfdWhzKGNhcmQpOwotCWludCByZWFkID0gKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkgPyAxIDogMDsKLQl1OCBjZmcyLCB0cmFuc19tb2RlOworCXU4IGNmZzIgPSAwOwogCWludCBlcnI7CisJaW50IHJlc3BfdHlwZTsKIAlzaXplX3QgZGF0YV9sZW4gPSBkYXRhLT5ibGtzeiAqIGRhdGEtPmJsb2NrczsKIAotCWlmIChyZWFkKSB7Ci0JCWNmZzIgPSBTRF9DQUxDVUxBVEVfQ1JDNyB8IFNEX0NIRUNLX0NSQzE2IHwKLQkJCVNEX05PX1dBSVRfQlVTWV9FTkQgfCBTRF9DSEVDS19DUkM3IHwgU0RfUlNQX0xFTl8wOwotCQl0cmFuc19tb2RlID0gU0RfVE1fQVVUT19SRUFEXzM7Ci0JfSBlbHNlIHsKLQkJY2ZnMiA9IFNEX05PX0NBTENVTEFURV9DUkM3IHwgU0RfQ0hFQ0tfQ1JDMTYgfAotCQkJU0RfTk9fV0FJVF9CVVNZX0VORCB8IFNEX05PX0NIRUNLX0NSQzcgfCBTRF9SU1BfTEVOXzA7Ci0JCXRyYW5zX21vZGUgPSBTRF9UTV9BVVRPX1dSSVRFXzM7Ci0JfQorCWRldl9kYmcoc2RtbWNfZGV2KGhvc3QpLCAiJXM6IFNEL01NQyBDTUQgJWQsIGFyZyA9IDB4JTA4eFxuIiwKKwkJX19mdW5jX18sIGNtZC0+b3Bjb2RlLCBjbWQtPmFyZyk7CisKKwlyZXNwX3R5cGUgPSBzZF9yZXNwb25zZV90eXBlKGNtZCk7CisJaWYgKHJlc3BfdHlwZSA8IDApCisJCXJldHVybiByZXNwX3R5cGU7CiAKIAlpZiAoIXVocykKIAkJY2ZnMiB8PSBTRF9OT19DSEVDS19XQUlUX0NSQ19UTzsKIAogCXJ0c3hfcGNpX2luaXRfY21kKHBjcik7Ci0KLQlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgU0RfQllURV9DTlRfTCwgMHhGRiwgMHgwMCk7Ci0JcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX0JZVEVfQ05UX0gsIDB4RkYsIDB4MDIpOwotCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBTRF9CTE9DS19DTlRfTCwKLQkJCTB4RkYsICh1OClkYXRhLT5ibG9ja3MpOwotCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBTRF9CTE9DS19DTlRfSCwKLQkJCTB4RkYsICh1OCkoZGF0YS0+YmxvY2tzID4+IDgpKTsKLQorCXNkX2NtZF9zZXRfc2RfY21kKHBjciwgY21kKTsKKwlzZF9jbWRfc2V0X2RhdGFfbGVuKHBjciwgZGF0YS0+YmxvY2tzLCBkYXRhLT5ibGtzeik7CiAJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIElSUVNUQVQwLAogCQkJRE1BX0RPTkVfSU5ULCBETUFfRE9ORV9JTlQpOwogCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBETUFUQzMsCi0JCQkweEZGLCAodTgpKGRhdGFfbGVuID4+IDI0KSk7CisJCTB4RkYsICh1OCkoZGF0YV9sZW4gPj4gMjQpKTsKIAlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgRE1BVEMyLAotCQkJMHhGRiwgKHU4KShkYXRhX2xlbiA+PiAxNikpOworCQkweEZGLCAodTgpKGRhdGFfbGVuID4+IDE2KSk7CiAJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIERNQVRDMSwKLQkJCTB4RkYsICh1OCkoZGF0YV9sZW4gPj4gOCkpOworCQkweEZGLCAodTgpKGRhdGFfbGVuID4+IDgpKTsKIAlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgRE1BVEMwLCAweEZGLCAodTgpZGF0YV9sZW4pOwotCWlmIChyZWFkKSB7Ci0JCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBETUFDVEwsCi0JCQkJMHgwMyB8IERNQV9QQUNLX1NJWkVfTUFTSywKLQkJCQlETUFfRElSX0ZST01fQ0FSRCB8IERNQV9FTiB8IERNQV81MTIpOwotCX0gZWxzZSB7Ci0JCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBETUFDVEwsCi0JCQkJMHgwMyB8IERNQV9QQUNLX1NJWkVfTUFTSywKLQkJCQlETUFfRElSX1RPX0NBUkQgfCBETUFfRU4gfCBETUFfNTEyKTsKLQl9Ci0KKwlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgRE1BQ1RMLAorCQkweDAzIHwgRE1BX1BBQ0tfU0laRV9NQVNLLAorCQlETUFfRElSX0ZST01fQ0FSRCB8IERNQV9FTiB8IERNQV81MTIpOwogCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBDQVJEX0RBVEFfU09VUkNFLAogCQkJMHgwMSwgUklOR19CVUZGRVIpOwotCi0JcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX0NGRzIsIDB4RkYsIGNmZzIpOworCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBTRF9DRkcyLCAweEZGLCBjZmcyIHwgcmVzcF90eXBlKTsKIAlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgU0RfVFJBTlNGRVIsIDB4RkYsCi0JCQl0cmFuc19tb2RlIHwgU0RfVFJBTlNGRVJfU1RBUlQpOworCQkJU0RfVFJBTlNGRVJfU1RBUlQgfCBTRF9UTV9BVVRPX1JFQURfMik7CiAJcnRzeF9wY2lfYWRkX2NtZChwY3IsIENIRUNLX1JFR19DTUQsIFNEX1RSQU5TRkVSLAogCQkJU0RfVFJBTlNGRVJfRU5ELCBTRF9UUkFOU0ZFUl9FTkQpOwotCiAJcnRzeF9wY2lfc2VuZF9jbWRfbm9fd2FpdChwY3IpOwogCi0JZXJyID0gcnRzeF9wY2lfZG1hX3RyYW5zZmVyKHBjciwgZGF0YS0+c2csIGhvc3QtPnNnX2NvdW50LCByZWFkLCAxMDAwMCk7CisJZXJyID0gcnRzeF9wY2lfZG1hX3RyYW5zZmVyKHBjciwgZGF0YS0+c2csIGhvc3QtPnNnX2NvdW50LCAxLCAxMDAwMCk7CisJaWYgKGVyciA8IDApIHsKKwkJc2RfcHJpbnRfZGVidWdfcmVncyhob3N0KTsKKwkJc2RfY2xlYXJfZXJyb3IoaG9zdCk7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfd3JpdGVfbG9uZ19kYXRhKHN0cnVjdCByZWFsdGVrX3BjaV9zZG1tYyAqaG9zdCwKKwlzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSkKK3sKKwlzdHJ1Y3QgcnRzeF9wY3IgKnBjciA9IGhvc3QtPnBjcjsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGhvc3QtPm1tYzsKKwlzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQgPSBtbWMtPmNhcmQ7CisJc3RydWN0IG1tY19jb21tYW5kICpjbWQgPSBtcnEtPmNtZDsKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBtcnEtPmRhdGE7CisJaW50IHVocyA9IG1tY19jYXJkX3VocyhjYXJkKTsKKwl1OCBjZmcyOworCWludCBlcnI7CisJc2l6ZV90IGRhdGFfbGVuID0gZGF0YS0+Ymxrc3ogKiBkYXRhLT5ibG9ja3M7CisKKwlzZF9zZW5kX2NtZF9nZXRfcnNwKGhvc3QsIGNtZCk7CisJaWYgKGNtZC0+ZXJyb3IpCisJCXJldHVybiBjbWQtPmVycm9yOworCisJZGV2X2RiZyhzZG1tY19kZXYoaG9zdCksICIlczogU0QvTU1DIENNRCAlZCwgYXJnID0gMHglMDh4XG4iLAorCQlfX2Z1bmNfXywgY21kLT5vcGNvZGUsIGNtZC0+YXJnKTsKKworCWNmZzIgPSBTRF9OT19DQUxDVUxBVEVfQ1JDNyB8IFNEX0NIRUNLX0NSQzE2IHwKKwkJU0RfTk9fV0FJVF9CVVNZX0VORCB8IFNEX05PX0NIRUNLX0NSQzcgfCBTRF9SU1BfTEVOXzA7CisKKwlpZiAoIXVocykKKwkJY2ZnMiB8PSBTRF9OT19DSEVDS19XQUlUX0NSQ19UTzsKKworCXJ0c3hfcGNpX2luaXRfY21kKHBjcik7CisJc2RfY21kX3NldF9kYXRhX2xlbihwY3IsIGRhdGEtPmJsb2NrcywgZGF0YS0+Ymxrc3opOworCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBJUlFTVEFUMCwKKwkJCURNQV9ET05FX0lOVCwgRE1BX0RPTkVfSU5UKTsKKwlydHN4X3BjaV9hZGRfY21kKHBjciwgV1JJVEVfUkVHX0NNRCwgRE1BVEMzLAorCQkweEZGLCAodTgpKGRhdGFfbGVuID4+IDI0KSk7CisJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIERNQVRDMiwKKwkJMHhGRiwgKHU4KShkYXRhX2xlbiA+PiAxNikpOworCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBETUFUQzEsCisJCTB4RkYsICh1OCkoZGF0YV9sZW4gPj4gOCkpOworCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBETUFUQzAsIDB4RkYsICh1OClkYXRhX2xlbik7CisJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIERNQUNUTCwKKwkJMHgwMyB8IERNQV9QQUNLX1NJWkVfTUFTSywKKwkJRE1BX0RJUl9UT19DQVJEIHwgRE1BX0VOIHwgRE1BXzUxMik7CisJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIENBUkRfREFUQV9TT1VSQ0UsCisJCQkweDAxLCBSSU5HX0JVRkZFUik7CisJcnRzeF9wY2lfYWRkX2NtZChwY3IsIFdSSVRFX1JFR19DTUQsIFNEX0NGRzIsIDB4RkYsIGNmZzIpOworCXJ0c3hfcGNpX2FkZF9jbWQocGNyLCBXUklURV9SRUdfQ01ELCBTRF9UUkFOU0ZFUiwgMHhGRiwKKwkJCVNEX1RSQU5TRkVSX1NUQVJUIHwgU0RfVE1fQVVUT19XUklURV8zKTsKKwlydHN4X3BjaV9hZGRfY21kKHBjciwgQ0hFQ0tfUkVHX0NNRCwgU0RfVFJBTlNGRVIsCisJCQlTRF9UUkFOU0ZFUl9FTkQsIFNEX1RSQU5TRkVSX0VORCk7CisJcnRzeF9wY2lfc2VuZF9jbWRfbm9fd2FpdChwY3IpOworCWVyciA9IHJ0c3hfcGNpX2RtYV90cmFuc2ZlcihwY3IsIGRhdGEtPnNnLCBob3N0LT5zZ19jb3VudCwgMCwgMTAwMDApOwogCWlmIChlcnIgPCAwKSB7CiAJCXNkX2NsZWFyX2Vycm9yKGhvc3QpOwogCQlyZXR1cm4gZXJyOwpAQCAtNTExLDYgKzU1MywyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNkX3J3X211bHRpKHN0cnVjdCByZWFsdGVrX3BjaV9zZG1tYyAqaG9zdCwgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEpCit7CisJc3RydWN0IG1tY19kYXRhICpkYXRhID0gbXJxLT5kYXRhOworCisJaWYgKGhvc3QtPnNnX2NvdW50IDwgMCkgeworCQlkYXRhLT5lcnJvciA9IGhvc3QtPnNnX2NvdW50OworCQlkZXZfZGJnKHNkbW1jX2Rldihob3N0KSwgIiVzOiBzZ19jb3VudCA9ICVkIGlzIGludmFsaWRcbiIsCisJCQlfX2Z1bmNfXywgaG9zdC0+c2dfY291bnQpOworCQlyZXR1cm4gZGF0YS0+ZXJyb3I7CisJfQorCisJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkKKwkJcmV0dXJuIHNkX3JlYWRfbG9uZ19kYXRhKGhvc3QsIG1ycSk7CisKKwlyZXR1cm4gc2Rfd3JpdGVfbG9uZ19kYXRhKGhvc3QsIG1ycSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZF9lbmFibGVfaW5pdGlhbF9tb2RlKHN0cnVjdCByZWFsdGVrX3BjaV9zZG1tYyAqaG9zdCkKIHsKIAlydHN4X3BjaV93cml0ZV9yZWdpc3Rlcihob3N0LT5wY3IsIFNEX0NGRzEsCkBAIC01MjgsMTAgKzU4Nyw3IEBACiB7CiAJc3RydWN0IG1tY19jb21tYW5kICpjbWQgPSBtcnEtPmNtZDsKIAlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEgPSBtcnEtPmRhdGE7Ci0JdTggX2NtZFs1XSwgKmJ1ZjsKLQotCV9jbWRbMF0gPSAweDQwIHwgKHU4KWNtZC0+b3Bjb2RlOwotCXB1dF91bmFsaWduZWRfYmUzMihjbWQtPmFyZywgKHUzMiAqKSgmX2NtZFsxXSkpOworCXU4ICpidWY7CiAKIAlidWYgPSBremFsbG9jKGRhdGEtPmJsa3N6LCBHRlBfTk9JTyk7CiAJaWYgKCFidWYpIHsKQEAgLTU0Myw3ICs1OTksNyBAQAogCQlpZiAoaG9zdC0+aW5pdGlhbF9tb2RlKQogCQkJc2RfZGlzYWJsZV9pbml0aWFsX21vZGUoaG9zdCk7CiAKLQkJY21kLT5lcnJvciA9IHNkX3JlYWRfZGF0YShob3N0LCBfY21kLCAodTE2KWRhdGEtPmJsa3N6LCBidWYsCisJCWNtZC0+ZXJyb3IgPSBzZF9yZWFkX2RhdGEoaG9zdCwgY21kLCAodTE2KWRhdGEtPmJsa3N6LCBidWYsCiAJCQkJZGF0YS0+Ymxrc3osIDIwMCk7CiAKIAkJaWYgKGhvc3QtPmluaXRpYWxfbW9kZSkKQEAgLTU1Myw3ICs2MDksNyBAQAogCX0gZWxzZSB7CiAJCXNnX2NvcHlfdG9fYnVmZmVyKGRhdGEtPnNnLCBkYXRhLT5zZ19sZW4sIGJ1ZiwgZGF0YS0+Ymxrc3opOwogCi0JCWNtZC0+ZXJyb3IgPSBzZF93cml0ZV9kYXRhKGhvc3QsIF9jbWQsICh1MTYpZGF0YS0+Ymxrc3osIGJ1ZiwKKwkJY21kLT5lcnJvciA9IHNkX3dyaXRlX2RhdGEoaG9zdCwgY21kLCAodTE2KWRhdGEtPmJsa3N6LCBidWYsCiAJCQkJZGF0YS0+Ymxrc3osIDIwMCk7CiAJfQogCkBAIC02NTMsMTQgKzcwOSwxNCBAQAogCQl1OCBvcGNvZGUsIHU4IHNhbXBsZV9wb2ludCkKIHsKIAlpbnQgZXJyOwotCXU4IGNtZFs1XSA9IHswfTsKKwlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kID0gezB9OwogCiAJZXJyID0gc2RfY2hhbmdlX3BoYXNlKGhvc3QsIHNhbXBsZV9wb2ludCwgdHJ1ZSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQljbWRbMF0gPSAweDQwIHwgb3Bjb2RlOwotCWVyciA9IHNkX3JlYWRfZGF0YShob3N0LCBjbWQsIDB4NDAsIE5VTEwsIDAsIDEwMCk7CisJY21kLm9wY29kZSA9IG9wY29kZTsKKwllcnIgPSBzZF9yZWFkX2RhdGEoaG9zdCwgJmNtZCwgMHg0MCwgTlVMTCwgMCwgMTAwKTsKIAlpZiAoZXJyIDwgMCkgewogCQkvKiBXYWl0IHRpbGwgU0QgREFUQSBJRExFICovCiAJCXNkX3dhaXRfZGF0YV9pZGxlKGhvc3QpOwpAQCAtNzI3LDYgKzc4MywxMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBzZGlvX2V4dGJsb2NrX2NtZChzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCwKKwlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCit7CisJcmV0dXJuIChjbWQtPm9wY29kZSA9PSBTRF9JT19SV19FWFRFTkRFRCkgJiYgKGRhdGEtPmJsa3N6ID09IDUxMik7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IHNkX3J3X2NtZChzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKIHsKIAlyZXR1cm4gbW1jX29wX211bHRpKGNtZC0+b3Bjb2RlKSB8fApAQCAtNzQ4LDcgKzgxMCw3IEBACiAJdW5zaWduZWQgaW50IGRhdGFfc2l6ZSA9IDA7CiAJaW50IGVycjsKIAotCWlmIChob3N0LT5lamVjdCkgeworCWlmIChob3N0LT5lamVjdCB8fCAhc2RfZ2V0X2NkX2ludChob3N0KSkgewogCQljbWQtPmVycm9yID0gLUVOT01FRElVTTsKIAkJZ290byBmaW5pc2g7CiAJfQpAQCAtNzc2LDE3ICs4MzgsMTUgQEAKIAlpZiAobXJxLT5kYXRhKQogCQlkYXRhX3NpemUgPSBkYXRhLT5ibG9ja3MgKiBkYXRhLT5ibGtzejsKIAotCWlmICghZGF0YV9zaXplIHx8IHNkX3J3X2NtZChjbWQpKSB7CisJaWYgKCFkYXRhX3NpemUpIHsKIAkJc2Rfc2VuZF9jbWRfZ2V0X3JzcChob3N0LCBjbWQpOworCX0gZWxzZSBpZiAoc2RfcndfY21kKGNtZCkgfHwgc2Rpb19leHRibG9ja19jbWQoY21kLCBkYXRhKSkgeworCQljbWQtPmVycm9yID0gc2RfcndfbXVsdGkoaG9zdCwgbXJxKTsKKwkJaWYgKCFob3N0LT51c2luZ19jb29raWUpCisJCQlzZG1tY19wb3N0X3JlcShob3N0LT5tbWMsIGhvc3QtPm1ycSwgMCk7CiAKLQkJaWYgKCFjbWQtPmVycm9yICYmIGRhdGFfc2l6ZSkgewotCQkJc2RfcndfbXVsdGkoaG9zdCwgbXJxKTsKLQkJCWlmICghaG9zdC0+dXNpbmdfY29va2llKQotCQkJCXNkbW1jX3Bvc3RfcmVxKGhvc3QtPm1tYywgaG9zdC0+bXJxLCAwKTsKLQotCQkJaWYgKG1tY19vcF9tdWx0aShjbWQtPm9wY29kZSkgJiYgbXJxLT5zdG9wKQotCQkJCXNkX3NlbmRfY21kX2dldF9yc3AoaG9zdCwgbXJxLT5zdG9wKTsKLQkJfQorCQlpZiAobW1jX29wX211bHRpKGNtZC0+b3Bjb2RlKSAmJiBtcnEtPnN0b3ApCisJCQlzZF9zZW5kX2NtZF9nZXRfcnNwKGhvc3QsIG1ycS0+c3RvcCk7CiAJfSBlbHNlIHsKIAkJc2Rfbm9ybWFsX3J3KGhvc3QsIG1ycSk7CiAJfQpAQCAtODAxLDggKzg2MSwxMCBAQAogCW11dGV4X3VubG9jaygmcGNyLT5wY3JfbXV0ZXgpOwogCiBmaW5pc2g6Ci0JaWYgKGNtZC0+ZXJyb3IpCi0JCWRldl9kYmcoc2RtbWNfZGV2KGhvc3QpLCAiY21kLT5lcnJvciA9ICVkXG4iLCBjbWQtPmVycm9yKTsKKwlpZiAoY21kLT5lcnJvcikgeworCQlkZXZfZGJnKHNkbW1jX2Rldihob3N0KSwgIkNNRCAlZCAweCUwOHggZXJyb3IoJWQpXG4iLAorCQkJY21kLT5vcGNvZGUsIGNtZC0+YXJnLCBjbWQtPmVycm9yKTsKKwl9CiAKIAltdXRleF9sb2NrKCZob3N0LT5ob3N0X211dGV4KTsKIAlob3N0LT5tcnEgPSBOVUxMOwpAQCAtODIwLDcgKzg4Miw3IEBACiAJaG9zdC0+bXJxID0gbXJxOwogCW11dGV4X3VubG9jaygmaG9zdC0+aG9zdF9tdXRleCk7CiAKLQlpZiAoc2RfcndfY21kKG1ycS0+Y21kKSkKKwlpZiAoc2RfcndfY21kKG1ycS0+Y21kKSB8fCBzZGlvX2V4dGJsb2NrX2NtZChtcnEtPmNtZCwgZGF0YSkpCiAJCWhvc3QtPnVzaW5nX2Nvb2tpZSA9IHNkX3ByZV9kbWFfdHJhbnNmZXIoaG9zdCwgZGF0YSwgZmFsc2UpOwogCiAJcXVldWVfd29yayhob3N0LT53b3JrcSwgJmhvc3QtPndvcmspOwpAQCAtMTA2Niw3ICsxMTI4LDcgQEAKIAl1MzIgdmFsOwogCiAJaWYgKGhvc3QtPmVqZWN0KQotCQlyZXR1cm4gLUVOT01FRElVTTsKKwkJcmV0dXJuIGNkOwogCiAJbXV0ZXhfbG9jaygmcGNyLT5wY3JfbXV0ZXgpOwogCkBAIC0xMzE3LDYgKzEzNzksNyBAQAogewogCXN0cnVjdCByZWFsdGVrX3BjaV9zZG1tYyAqaG9zdCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCisJaG9zdC0+Y29va2llID0gLTE7CiAJbW1jX2RldGVjdF9jaGFuZ2UoaG9zdC0+bW1jLCAwKTsKIH0KIApAQCAtMTM0OSw2ICsxNDEyLDcgQEAKIAlob3N0LT5wY3IgPSBwY3I7CiAJaG9zdC0+bW1jID0gbW1jOwogCWhvc3QtPnBkZXYgPSBwZGV2OworCWhvc3QtPmNvb2tpZSA9IC0xOwogCWhvc3QtPnBvd2VyX3N0YXRlID0gU0RNTUNfUE9XRVJfT0ZGOwogCUlOSVRfV09SSygmaG9zdC0+d29yaywgc2RfcmVxdWVzdCk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWFjcGkuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktYWNwaS5jCmluZGV4IDk3MDMxNGUuLmE0NWVkMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktYWNwaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktYWNwaS5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAogCWhvc3QgPSBjLT5ob3N0OwogCi0JLyogUGxhdGZvcm0gc3BlY2lmaWMgY29kZSBkdXJpbmcgZW1tYyBwcm9ibGUgc2xvdCBnb2VzIGhlcmUgKi8KKwkvKiBQbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIGR1cmluZyBlbW1jIHByb2JlIHNsb3QgZ29lcyBoZXJlICovCiAKIAlpZiAoaGlkICYmIHVpZCAmJiAhc3RyY21wKGhpZCwgIjgwODYwRjE0IikgJiYgIXN0cmNtcCh1aWQsICIxIikgJiYKIAkgICAgc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfQ0FQQUJJTElUSUVTKSA9PSAweDQ0NmNjOGIyICYmCkBAIC0xNzksNyArMTc5LDcgQEAKIAogCWhvc3QgPSBjLT5ob3N0OwogCi0JLyogUGxhdGZvcm0gc3BlY2lmaWMgY29kZSBkdXJpbmcgZW1tYyBwcm9ibGUgc2xvdCBnb2VzIGhlcmUgKi8KKwkvKiBQbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIGR1cmluZyBzZGlvIHByb2JlIHNsb3QgZ29lcyBoZXJlICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE5NSw3ICsxOTUsNyBAQAogCiAJaG9zdCA9IGMtPmhvc3Q7CiAKLQkvKiBQbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIGR1cmluZyBlbW1jIHByb2JsZSBzbG90IGdvZXMgaGVyZSAqLworCS8qIFBsYXRmb3JtIHNwZWNpZmljIGNvZGUgZHVyaW5nIHNkIHByb2JlIHNsb3QgZ29lcyBoZXJlICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ0OCwxOCArNDQ4LDEzIEBACiAJcmV0dXJuIHNkaGNpX3J1bnRpbWVfcmVzdW1lX2hvc3QoYy0+aG9zdCk7CiB9CiAKLXN0YXRpYyBpbnQgc2RoY2lfYWNwaV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiAwOwotfQotCiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHNkaGNpX2FjcGlfcG1fb3BzID0gewogCS5zdXNwZW5kCQk9IHNkaGNpX2FjcGlfc3VzcGVuZCwKIAkucmVzdW1lCQkJPSBzZGhjaV9hY3BpX3Jlc3VtZSwKIAlTRVRfUlVOVElNRV9QTV9PUFMoc2RoY2lfYWNwaV9ydW50aW1lX3N1c3BlbmQsCi0JCQlzZGhjaV9hY3BpX3J1bnRpbWVfcmVzdW1lLCBzZGhjaV9hY3BpX3J1bnRpbWVfaWRsZSkKKwkJCXNkaGNpX2FjcGlfcnVudGltZV9yZXN1bWUsIE5VTEwpCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzZGhjaV9hY3BpX2RyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktYmNtLWtvbmEuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktYmNtLWtvbmEuYwppbmRleCBlN2U0ZmJkLi4zNGJiOGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWJjbS1rb25hLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1iY20ta29uYS5jCkBAIC0yNTQsNyArMjU0LDkgQEAKIAlrb25hX2RldiA9IHNkaGNpX3BsdGZtX3ByaXYocGx0Zm1fcHJpdik7CiAJbXV0ZXhfaW5pdCgma29uYV9kZXYtPndyaXRlX2xvY2spOwogCi0JbW1jX29mX3BhcnNlKGhvc3QtPm1tYyk7CisJcmV0ID0gbW1jX29mX3BhcnNlKGhvc3QtPm1tYyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcGx0Zm1fZnJlZTsKIAogCWlmICghaG9zdC0+bW1jLT5mX21heCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJNaXNzaW5nIG1heC1mcmVxIGZvciBTREhDSSBjZmdcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1lc2RoYy1pbXguYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktZXNkaGMtaW14LmMKaW5kZXggYWYxZjdjMC4uMTBlZjgyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1lc2RoYy1pbXguYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLWVzZGhjLWlteC5jCkBAIC0xMDgwLDEwICsxMDgwLDEwIEBACiAJCWdvdG8gZGlzYWJsZV9jbGs7CiAKIAlwbV9ydW50aW1lX3NldF9hY3RpdmUoJnBkZXYtPmRldik7Ci0JcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CiAJcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoJnBkZXYtPmRldiwgNTApOwogCXBtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKCZwZGV2LT5kZXYpOwogCXBtX3N1c3BlbmRfaWdub3JlX2NoaWxkcmVuKCZwZGV2LT5kZXYsIDEpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTExMDMsMTYgKzExMDMsMTUgQEAKIAlzdHJ1Y3QgcGx0Zm1faW14X2RhdGEgKmlteF9kYXRhID0gcGx0Zm1faG9zdC0+cHJpdjsKIAlpbnQgZGVhZCA9IChyZWFkbChob3N0LT5pb2FkZHIgKyBTREhDSV9JTlRfU1RBVFVTKSA9PSAweGZmZmZmZmZmKTsKIAorCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmcGRldi0+ZGV2KTsKKwogCXNkaGNpX3JlbW92ZV9ob3N0KGhvc3QsIGRlYWQpOwogCi0JcG1fcnVudGltZV9kb250X3VzZV9hdXRvc3VzcGVuZCgmcGRldi0+ZGV2KTsKLQlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7Ci0KLQlpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1BNKSkgewotCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaW14X2RhdGEtPmNsa19wZXIpOwotCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaW14X2RhdGEtPmNsa19pcGcpOwotCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaW14X2RhdGEtPmNsa19haGIpOwotCX0KKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaW14X2RhdGEtPmNsa19wZXIpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShpbXhfZGF0YS0+Y2xrX2lwZyk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlteF9kYXRhLT5jbGtfYWhiKTsKIAogCXNkaGNpX3BsdGZtX2ZyZWUocGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtZXNkaGMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtZXNkaGMuYwppbmRleCA4ODcyYzg1Li4xN2ZlMDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWVzZGhjLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1vZi1lc2RoYy5jCkBAIC0yNzYsNiArMjc2LDE0IEBACiAJCQlFU0RIQ19DVFJMX0JVU1dJRFRIX01BU0ssIGN0cmwpOwogfQogCitzdGF0aWMgdm9pZCBlc2RoY19yZXNldChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTggbWFzaykKK3sKKwlzZGhjaV9yZXNldChob3N0LCBtYXNrKTsKKworCXNkaGNpX3dyaXRlbChob3N0LCBob3N0LT5pZXIsIFNESENJX0lOVF9FTkFCTEUpOworCXNkaGNpX3dyaXRlbChob3N0LCBob3N0LT5pZXIsIFNESENJX1NJR05BTF9FTkFCTEUpOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX29wcyBzZGhjaV9lc2RoY19vcHMgPSB7CiAJLnJlYWRfbCA9IGVzZGhjX3JlYWRsLAogCS5yZWFkX3cgPSBlc2RoY19yZWFkdywKQEAgLTI5MCw3ICsyOTgsNyBAQAogCS5wbGF0Zm9ybV9pbml0ID0gZXNkaGNfb2ZfcGxhdGZvcm1faW5pdCwKIAkuYWRtYV93b3JrYXJvdW5kID0gZXNkaGNpX29mX2FkbWFfd29ya2Fyb3VuZCwKIAkuc2V0X2J1c193aWR0aCA9IGVzZGhjX3BsdGZtX3NldF9idXNfd2lkdGgsCi0JLnJlc2V0ID0gc2RoY2lfcmVzZXQsCisJLnJlc2V0ID0gZXNkaGNfcmVzZXQsCiAJLnNldF91aHNfc2lnbmFsaW5nID0gc2RoY2lfc2V0X3Voc19zaWduYWxpbmcsCiB9OwogCkBAIC0zNjIsMTMgKzM3MCwxOSBAQAogCX0KIAogCS8qIGNhbGwgdG8gZ2VuZXJpYyBtbWNfb2ZfcGFyc2UgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIGNhcGFiaWxpdGllcyAqLwotCW1tY19vZl9wYXJzZShob3N0LT5tbWMpOworCXJldCA9IG1tY19vZl9wYXJzZShob3N0LT5tbWMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCiAJbW1jX29mX3BhcnNlX3ZvbHRhZ2UobnAsICZob3N0LT5vY3JfbWFzayk7CiAKIAlyZXQgPSBzZGhjaV9hZGRfaG9zdChob3N0KTsKIAlpZiAocmV0KQotCQlzZGhjaV9wbHRmbV9mcmVlKHBkZXYpOworCQlnb3RvIGVycjsKIAorCXJldHVybiAwOworIGVycjoKKwlzZGhjaV9wbHRmbV9mcmVlKHBkZXYpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCmluZGV4IDRmMzg1NTQuLjI5ZWFmZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYwpAQCAtMTM2NywxMSArMTM2Nyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2RoY2lfcGNpX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KICNlbHNlIC8qIENPTkZJR19QTSAqLwogCiAjZGVmaW5lIHNkaGNpX3BjaV9zdXNwZW5kIE5VTEwKQEAgLTEzODMsNyArMTM3OCw3IEBACiAJLnN1c3BlbmQgPSBzZGhjaV9wY2lfc3VzcGVuZCwKIAkucmVzdW1lID0gc2RoY2lfcGNpX3Jlc3VtZSwKIAlTRVRfUlVOVElNRV9QTV9PUFMoc2RoY2lfcGNpX3J1bnRpbWVfc3VzcGVuZCwKLQkJCXNkaGNpX3BjaV9ydW50aW1lX3Jlc3VtZSwgc2RoY2lfcGNpX3J1bnRpbWVfaWRsZSkKKwkJCXNkaGNpX3BjaV9ydW50aW1lX3Jlc3VtZSwgTlVMTCkKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcHhhdjMuYwppbmRleCBjYTM0MjRlLi5iNTEwM2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXB4YXYzLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1weGF2My5jCkBAIC02Miw2ICs2Miw3IEBACiAJc3RydWN0IGNsayAqY2xrX2NvcmU7CiAJc3RydWN0IGNsayAqY2xrX2lvOwogCXU4CXBvd2VyX21vZGU7CisJdm9pZCBfX2lvbWVtICpzZGlvM19jb25mX3JlZzsKIH07CiAKIC8qCkBAIC03Miw2ICs3MywxNCBAQAogI2RlZmluZSBTREhDSV9XSU5ET1dfQkFTRShpKQkoMHg4NCArICgoaSkgPDwgMykpCiAjZGVmaW5lIFNESENJX01BWF9XSU5fTlVNCTgKIAorLyoKKyAqIEZpZWxkcyBiZWxvdyBiZWxvbmcgdG8gU0RJTzMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAodGhpcmQgcmVnaXN0ZXIKKyAqIHJlZ2lvbiBmb3IgdGhlIEFybWFkYSAzOHggZmxhdm9yKQorICovCisKKyNkZWZpbmUgU0RJTzNfQ09ORl9DTEtfSU5WCUJJVCgwKQorI2RlZmluZSBTRElPM19DT05GX1NEX0ZCX0NMSwlCSVQoMikKKwogc3RhdGljIGludCBtdl9jb25mX21idXNfd2luZG93cyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJCWNvbnN0IHN0cnVjdCBtYnVzX2RyYW1fdGFyZ2V0X2luZm8gKmRyYW0pCiB7CkBAIC0xMTgsNiArMTI3LDUxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYXJtYWRhXzM4eF9xdWlya3Moc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSAgICAgc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOworCXN0cnVjdCBzZGhjaV9wbHRmbV9ob3N0ICpwbHRmbV9ob3N0ID0gc2RoY2lfcHJpdihob3N0KTsKKwlzdHJ1Y3Qgc2RoY2lfcHhhICpweGEgPSBwbHRmbV9ob3N0LT5wcml2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJaG9zdC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX01JU1NJTkdfQ0FQUzsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLAorCQkJCQkgICAiY29uZi1zZGlvMyIpOworCWlmIChyZXMpIHsKKwkJcHhhLT5zZGlvM19jb25mX3JlZyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCQlpZiAoSVNfRVJSKHB4YS0+c2RpbzNfY29uZl9yZWcpKQorCQkJcmV0dXJuIFBUUl9FUlIocHhhLT5zZGlvM19jb25mX3JlZyk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQWNjb3JkaW5nIHRvIGVycmF0dW0gJ0ZFLTI5NDY5NTknIGJvdGggU0RSNTAgYW5kIEREUjUwCisJCSAqIG1vZGVzIHJlcXVpcmUgc3BlY2lmaWMgY2xvY2sgYWRqdXN0bWVudHMgaW4gU0RJTzMKKwkJICogQ29uZmlndXJhdGlvbiByZWdpc3RlciwgaWYgdGhlIGFkanVzdG1lbnQgaXMgbm90IGRvbmUsCisJCSAqIHJlbW92ZSB0aGVtIGZyb20gdGhlIGNhcGFiaWxpdGllcy4KKwkJICovCisJCWhvc3QtPmNhcHMxID0gc2RoY2lfcmVhZGwoaG9zdCwgU0RIQ0lfQ0FQQUJJTElUSUVTXzEpOworCQlob3N0LT5jYXBzMSAmPSB+KFNESENJX1NVUFBPUlRfU0RSNTAgfCBTREhDSV9TVVBQT1JUX0REUjUwKTsKKworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiY29uZi1zZGlvMyByZWdpc3RlciBub3QgZm91bmQ6IGRpc2FibGluZyBTRFI1MCBhbmQgRERSNTAgbW9kZXMuXG5Db25zaWRlciB1cGRhdGluZyB5b3VyIGR0YlxuIik7CisJfQorCisJLyoKKwkgKiBBY2NvcmRpbmcgdG8gZXJyYXR1bSAnRVJSLTc4Nzg5NTEnIEFybWFkYSAzOHggU0RIQ0kKKwkgKiBjb250cm9sbGVyIGhhcyBkaWZmZXJlbnQgY2FwYWJpbGl0aWVzIHRoYW4gdGhlIG9uZXMgc2hvd24KKwkgKiBpbiBpdHMgcmVnaXN0ZXJzCisJICovCisJaG9zdC0+Y2FwcyA9IHNkaGNpX3JlYWRsKGhvc3QsIFNESENJX0NBUEFCSUxJVElFUyk7CisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgIm5vLTEtOC12IikpIHsKKwkJaG9zdC0+Y2FwcyAmPSB+U0RIQ0lfQ0FOX1ZERF8xODA7CisJCWhvc3QtPm1tYy0+Y2FwcyAmPSB+TU1DX0NBUF8xXzhWX0REUjsKKwl9IGVsc2UgeworCQlob3N0LT5jYXBzICY9IH5TREhDSV9DQU5fVkREXzMzMDsKKwl9CisJaG9zdC0+Y2FwczEgJj0gfihTREhDSV9TVVBQT1JUX1NEUjEwNCB8IFNESENJX1VTRV9TRFI1MF9UVU5JTkcpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHB4YXYzX3Jlc2V0KHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1OCBtYXNrKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UobW1jX2Rldihob3N0LT5tbWMpKTsKQEAgLTE5NCw2ICsyNDgsOCBAQAogCiBzdGF0aWMgdm9pZCBweGF2M19zZXRfdWhzX3NpZ25hbGluZyhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdW5zaWduZWQgaW50IHVocykKIHsKKwlzdHJ1Y3Qgc2RoY2lfcGx0Zm1faG9zdCAqcGx0Zm1faG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7CisJc3RydWN0IHNkaGNpX3B4YSAqcHhhID0gcGx0Zm1faG9zdC0+cHJpdjsKIAl1MTYgY3RybF8yOwogCiAJLyoKQEAgLTIyMyw2ICsyNzksMjQgQEAKIAkJYnJlYWs7CiAJfQogCisJLyoKKwkgKiBVcGRhdGUgU0RJTzMgQ29uZmlndXJhdGlvbiByZWdpc3RlciBhY2NvcmRpbmcgdG8gZXJyYXR1bQorCSAqIEZFLTI5NDY5NTkKKwkgKi8KKwlpZiAocHhhLT5zZGlvM19jb25mX3JlZykgeworCQl1OCByZWdfdmFsICA9IHJlYWRiKHB4YS0+c2RpbzNfY29uZl9yZWcpOworCisJCWlmICh1aHMgPT0gTU1DX1RJTUlOR19VSFNfU0RSNTAgfHwKKwkJICAgIHVocyA9PSBNTUNfVElNSU5HX1VIU19ERFI1MCkgeworCQkJcmVnX3ZhbCAmPSB+U0RJTzNfQ09ORl9DTEtfSU5WOworCQkJcmVnX3ZhbCB8PSBTRElPM19DT05GX1NEX0ZCX0NMSzsKKwkJfSBlbHNlIHsKKwkJCXJlZ192YWwgfD0gU0RJTzNfQ09ORl9DTEtfSU5WOworCQkJcmVnX3ZhbCAmPSB+U0RJTzNfQ09ORl9TRF9GQl9DTEs7CisJCX0KKwkJd3JpdGViKHJlZ192YWwsIHB4YS0+c2RpbzNfY29uZl9yZWcpOworCX0KKwogCXNkaGNpX3dyaXRldyhob3N0LCBjdHJsXzIsIFNESENJX0hPU1RfQ09OVFJPTDIpOwogCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLAogCQkiJXMgdWhzID0gJWQsIGN0cmxfMiA9ICUwNFhcbiIsCkBAIC0yNjgsOCArMzQyLDggQEAKIAlpZiAoIXBkYXRhKQogCQlyZXR1cm4gTlVMTDsKIAotCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAibXJ2bCxjbGstZGVsYXktY3ljbGVzIiwgJmNsa19kZWxheV9jeWNsZXMpOwotCWlmIChjbGtfZGVsYXlfY3ljbGVzID4gMCkKKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAibXJ2bCxjbGstZGVsYXktY3ljbGVzIiwKKwkJCQkgICZjbGtfZGVsYXlfY3ljbGVzKSkKIAkJcGRhdGEtPmNsa19kZWxheV9jeWNsZXMgPSBjbGtfZGVsYXlfY3ljbGVzOwogCiAJcmV0dXJuIHBkYXRhOwpAQCAtMzE4LDE1ICszOTIsMTggQEAKIAlpZiAoIUlTX0VSUihweGEtPmNsa19jb3JlKSkKIAkJY2xrX3ByZXBhcmVfZW5hYmxlKHB4YS0+Y2xrX2NvcmUpOwogCisJLyogZW5hYmxlIDEvOFYgRERSIGNhcGFibGUgKi8KKwlob3N0LT5tbWMtPmNhcHMgfD0gTU1DX0NBUF8xXzhWX0REUjsKKwogCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgIm1hcnZlbGwsYXJtYWRhLTM4MC1zZGhjaSIpKSB7CisJCXJldCA9IGFybWFkYV8zOHhfcXVpcmtzKHBkZXYsIGhvc3QpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyX2Nsa19nZXQ7CiAJCXJldCA9IG12X2NvbmZfbWJ1c193aW5kb3dzKHBkZXYsIG12X21idXNfZHJhbV9pbmZvKCkpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZXJyX21idXNfd2luOwogCX0KIAotCS8qIGVuYWJsZSAxLzhWIEREUiBjYXBhYmxlICovCi0JaG9zdC0+bW1jLT5jYXBzIHw9IE1NQ19DQVBfMV84Vl9ERFI7Ci0KIAltYXRjaCA9IG9mX21hdGNoX2RldmljZShvZl9tYXRjaF9wdHIoc2RoY2lfcHhhdjNfb2ZfbWF0Y2gpLCAmcGRldi0+ZGV2KTsKIAlpZiAobWF0Y2gpIHsKIAkJcmV0ID0gbW1jX29mX3BhcnNlKGhvc3QtPm1tYyk7CkBAIC0zNjUsMTAgKzQ0MiwxMSBAQAogCQl9CiAJfQogCi0JcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7Ci0JcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoJnBkZXYtPmRldik7CiAJcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVsYXkoJnBkZXYtPmRldiwgUFhBVjNfUlBNX0RFTEFZX01TKTsKIAlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZCgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKIAlwbV9zdXNwZW5kX2lnbm9yZV9jaGlsZHJlbigmcGRldi0+ZGV2LCAxKTsKIAogCXJldCA9IHNkaGNpX2FkZF9ob3N0KGhvc3QpOwpAQCAtMzkxLDE0ICs0NjksMTMgQEAKIAlyZXR1cm4gMDsKIAogZXJyX2FkZF9ob3N0OgotCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRldik7CiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmcGRldi0+ZGV2KTsKIGVycl9vZl9wYXJzZToKIGVycl9jZF9yZXE6CiBlcnJfbWJ1c193aW46CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHB4YS0+Y2xrX2lvKTsKLQlpZiAoIUlTX0VSUihweGEtPmNsa19jb3JlKSkKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHB4YS0+Y2xrX2NvcmUpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShweGEtPmNsa19jb3JlKTsKIGVycl9jbGtfZ2V0OgogCXNkaGNpX3BsdGZtX2ZyZWUocGRldik7CiAJcmV0dXJuIHJldDsKQEAgLTQxMSwxMiArNDg4LDEzIEBACiAJc3RydWN0IHNkaGNpX3B4YSAqcHhhID0gcGx0Zm1faG9zdC0+cHJpdjsKIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7Ci0Jc2RoY2lfcmVtb3ZlX2hvc3QoaG9zdCwgMSk7CiAJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmcGRldi0+ZGV2KTsKKworCXNkaGNpX3JlbW92ZV9ob3N0KGhvc3QsIDEpOwogCiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHB4YS0+Y2xrX2lvKTsKLQlpZiAoIUlTX0VSUihweGEtPmNsa19jb3JlKSkKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHB4YS0+Y2xrX2NvcmUpOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShweGEtPmNsa19jb3JlKTsKIAogCXNkaGNpX3BsdGZtX2ZyZWUocGRldik7CiAKQEAgLTQ1NywxMSArNTM1LDExIEBACiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc2RoY2lfcGx0Zm1faG9zdCAqcGx0Zm1faG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7CiAJc3RydWN0IHNkaGNpX3B4YSAqcHhhID0gcGx0Zm1faG9zdC0+cHJpdjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwotCWhvc3QtPnJ1bnRpbWVfc3VzcGVuZGVkID0gdHJ1ZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CisJcmV0ID0gc2RoY2lfcnVudGltZV9zdXNwZW5kX2hvc3QoaG9zdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCWNsa19kaXNhYmxlX3VucHJlcGFyZShweGEtPmNsa19pbyk7CiAJaWYgKCFJU19FUlIocHhhLT5jbGtfY29yZSkpCkBAIC00NzUsMTcgKzU1MywxMiBAQAogCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNkaGNpX3BsdGZtX2hvc3QgKnBsdGZtX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOwogCXN0cnVjdCBzZGhjaV9weGEgKnB4YSA9IHBsdGZtX2hvc3QtPnByaXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWNsa19wcmVwYXJlX2VuYWJsZShweGEtPmNsa19pbyk7CiAJaWYgKCFJU19FUlIocHhhLT5jbGtfY29yZSkpCiAJCWNsa19wcmVwYXJlX2VuYWJsZShweGEtPmNsa19jb3JlKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7Ci0JaG9zdC0+cnVudGltZV9zdXNwZW5kZWQgPSBmYWxzZTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2RoY2lfcnVudGltZV9yZXN1bWVfaG9zdChob3N0KTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwppbmRleCBjNDViODkzLi5jNmQyZGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKQEAgLTEyLDYgKzEyLDcgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTMxMiw3ICszMTMsMTQgQEAKIAogCXNkaGNpX3MzY19zZXRfY2xvY2soaG9zdCwgY2xvY2spOwogCisJLyogUmVzZXQgU0QgQ2xvY2sgRW5hYmxlICovCisJY2xrID0gc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCk7CisJY2xrICY9IH5TREhDSV9DTE9DS19DQVJEX0VOOworCXNkaGNpX3dyaXRldyhob3N0LCBjbGssIFNESENJX0NMT0NLX0NPTlRST0wpOworCisJc3Bpbl91bmxvY2tfaXJxKCZob3N0LT5sb2NrKTsKIAlyZXQgPSBjbGtfc2V0X3JhdGUob3VyaG9zdC0+Y2xrX2J1c1tvdXJob3N0LT5jdXJfY2xrXSwgY2xvY2spOworCXNwaW5fbG9ja19pcnEoJmhvc3QtPmxvY2spOwogCWlmIChyZXQgIT0gMCkgewogCQlkZXZfZXJyKGRldiwgIiVzOiBmYWlsZWQgdG8gc2V0IGNsb2NrIHJhdGUgJXVIelxuIiwKIAkJCW1tY19ob3N0bmFtZShob3N0LT5tbWMpLCBjbG9jayk7CkBAIC02MDcsNyArNjE1LDkgQEAKIAlwbV9ydW50aW1lX3VzZV9hdXRvc3VzcGVuZCgmcGRldi0+ZGV2KTsKIAlwbV9zdXNwZW5kX2lnbm9yZV9jaGlsZHJlbigmcGRldi0+ZGV2LCAxKTsKIAotCW1tY19vZl9wYXJzZShob3N0LT5tbWMpOworCXJldCA9IG1tY19vZl9wYXJzZShob3N0LT5tbWMpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX3JlcV9yZWdzOwogCiAJcmV0ID0gc2RoY2lfYWRkX2hvc3QoaG9zdCk7CiAJaWYgKHJldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zaXJmLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXNpcmYuYwppbmRleCBkZDI5ZDQ3Li5mNmY4MmVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXNpcmYuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXNpcmYuYwpAQCAtMTUsNyArMTUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9zbG90LWdwaW8uaD4KICNpbmNsdWRlICJzZGhjaS1wbHRmbS5oIgogCisjZGVmaW5lIFNESENJX0NMS19ERUxBWV9TRVRUSU5HIDB4NEMKICNkZWZpbmUgU0RIQ0lfU0lSRl84QklUQlVTIEJJVCgzKQorI2RlZmluZSBTSVJGX1RVTklOR19DT1VOVCAxMjgKIAogc3RydWN0IHNkaGNpX3NpcmZfcHJpdiB7CiAJc3RydWN0IGNsayAqY2xrOwpAQCAtNDksNyArNTEsNzYgQEAKIAlzZGhjaV93cml0ZWIoaG9zdCwgY3RybCwgU0RIQ0lfSE9TVF9DT05UUk9MKTsKIH0KIAorc3RhdGljIGludCBzZGhjaV9zaXJmX2V4ZWN1dGVfdHVuaW5nKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCB1MzIgb3Bjb2RlKQoreworCWludCB0dW5pbmdfc2VxX2NudCA9IDM7CisJdTggcGhhc2UsIHR1bmVkX3BoYXNlc1tTSVJGX1RVTklOR19DT1VOVF07CisJdTggdHVuZWRfcGhhc2VfY250ID0gMDsKKwlpbnQgcmMsIGxvbmdlc3RfcmFuZ2UgPSAwOworCWludCBzdGFydCA9IC0xLCBlbmQgPSAwLCB0dW5pbmdfdmFsdWUgPSAtMSwgcmFuZ2UgPSAwOworCXUxNiBjbG9ja19zZXR0aW5nOworCXN0cnVjdCBtbWNfaG9zdCAqbW1jID0gaG9zdC0+bW1jOworCisJY2xvY2tfc2V0dGluZyA9IHNkaGNpX3JlYWR3KGhvc3QsIFNESENJX0NMS19ERUxBWV9TRVRUSU5HKTsKKwljbG9ja19zZXR0aW5nICY9IH4weDNmZmY7CisKK3JldHJ5OgorCXBoYXNlID0gMDsKKwlkbyB7CisJCXNkaGNpX3dyaXRlbChob3N0LAorCQkJY2xvY2tfc2V0dGluZyB8IHBoYXNlIHwgKHBoYXNlIDw8IDcpIHwgKHBoYXNlIDw8IDE2KSwKKwkJCVNESENJX0NMS19ERUxBWV9TRVRUSU5HKTsKKworCQlpZiAoIW1tY19zZW5kX3R1bmluZyhtbWMpKSB7CisJCQkvKiBUdW5pbmcgaXMgc3VjY2Vzc2Z1bCBhdCB0aGlzIHR1bmluZyBwb2ludCAqLworCQkJdHVuZWRfcGhhc2VzW3R1bmVkX3BoYXNlX2NudCsrXSA9IHBoYXNlOworCQkJZGV2X2RiZyhtbWNfZGV2KG1tYyksICIlczogRm91bmQgZ29vZCBwaGFzZSA9ICVkXG4iLAorCQkJCSBtbWNfaG9zdG5hbWUobW1jKSwgcGhhc2UpOworCQkJaWYgKHN0YXJ0ID09IC0xKQorCQkJCXN0YXJ0ID0gcGhhc2U7CisJCQllbmQgPSBwaGFzZTsKKwkJCXJhbmdlKys7CisJCQlpZiAocGhhc2UgPT0gKFNJUkZfVFVOSU5HX0NPVU5UIC0gMSkKKwkJCQkmJiByYW5nZSA+IGxvbmdlc3RfcmFuZ2UpCisJCQkJdHVuaW5nX3ZhbHVlID0gKHN0YXJ0ICsgZW5kKSAvIDI7CisJCX0gZWxzZSB7CisJCQlkZXZfZGJnKG1tY19kZXYobW1jKSwgIiVzOiBGb3VuZCBiYWQgcGhhc2UgPSAlZFxuIiwKKwkJCQkgbW1jX2hvc3RuYW1lKG1tYyksIHBoYXNlKTsKKwkJCWlmIChyYW5nZSA+IGxvbmdlc3RfcmFuZ2UpIHsKKwkJCQl0dW5pbmdfdmFsdWUgPSAoc3RhcnQgKyBlbmQpIC8gMjsKKwkJCQlsb25nZXN0X3JhbmdlID0gcmFuZ2U7CisJCQl9CisJCQlzdGFydCA9IC0xOworCQkJZW5kID0gcmFuZ2UgPSAwOworCQl9CisJfSB3aGlsZSAoKytwaGFzZSA8IEFSUkFZX1NJWkUodHVuZWRfcGhhc2VzKSk7CisKKwlpZiAodHVuZWRfcGhhc2VfY250ICYmIHR1bmluZ192YWx1ZSA+IDApIHsKKwkJLyoKKwkJICogRmluYWxseSBzZXQgdGhlIHNlbGVjdGVkIHBoYXNlIGluIGRlbGF5CisJCSAqIGxpbmUgaHcgYmxvY2suCisJCSAqLworCQlwaGFzZSA9IHR1bmluZ192YWx1ZTsKKwkJc2RoY2lfd3JpdGVsKGhvc3QsCisJCQljbG9ja19zZXR0aW5nIHwgcGhhc2UgfCAocGhhc2UgPDwgNykgfCAocGhhc2UgPDwgMTYpLAorCQkJU0RIQ0lfQ0xLX0RFTEFZX1NFVFRJTkcpOworCisJCWRldl9kYmcobW1jX2RldihtbWMpLCAiJXM6IFNldHRpbmcgdGhlIHR1bmluZyBwaGFzZSB0byAlZFxuIiwKKwkJCSBtbWNfaG9zdG5hbWUobW1jKSwgcGhhc2UpOworCX0gZWxzZSB7CisJCWlmICgtLXR1bmluZ19zZXFfY250KQorCQkJZ290byByZXRyeTsKKwkJLyogVHVuaW5nIGZhaWxlZCAqLworCQlkZXZfZGJnKG1tY19kZXYobW1jKSwgIiVzOiBObyB0dW5pbmcgcG9pbnQgZm91bmRcbiIsCisJCSAgICAgICBtbWNfaG9zdG5hbWUobW1jKSk7CisJCXJjID0gLUVJTzsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2RoY2lfb3BzIHNkaGNpX3NpcmZfb3BzID0geworCS5wbGF0Zm9ybV9leGVjdXRlX3R1bmluZyA9IHNkaGNpX3NpcmZfZXhlY3V0ZV90dW5pbmcsCiAJLnNldF9jbG9jayA9IHNkaGNpX3NldF9jbG9jaywKIAkuZ2V0X21heF9jbG9jawk9IHNkaGNpX3NpcmZfZ2V0X21heF9jbGssCiAJLnNldF9idXNfd2lkdGggPSBzZGhjaV9zaXJmX3NldF9idXNfd2lkdGgsCkBAIC0xMzgsOSArMjA5LDYgQEAKIAogCXNkaGNpX3BsdGZtX3VucmVnaXN0ZXIocGRldik7CiAKLQlpZiAoZ3Bpb19pc192YWxpZChwcml2LT5ncGlvX2NkKSkKLQkJbW1jX2dwaW9fZnJlZV9jZChob3N0LT5tbWMpOwotCiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNsayk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXN0LmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXN0LmMKaW5kZXggMzI4ZjM0OC4uODgyYjA3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zdC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktc3QuYwpAQCAtNzgsMTAgKzc4LDkgQEAKIAl9CiAKIAlyZXQgPSBtbWNfb2ZfcGFyc2UoaG9zdC0+bW1jKTsKLQogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIG1tY19vZl9wYXJzZVxuIik7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX29mOwogCX0KIAogCWNsa19wcmVwYXJlX2VuYWJsZShjbGspOwpAQCAtMTA4LDYgKzEwNyw3IEBACiAKIGVycl9vdXQ6CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGNsayk7CitlcnJfb2Y6CiAJc2RoY2lfcGx0Zm1fZnJlZShwZGV2KTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXRlZ3JhLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXRlZ3JhLmMKaW5kZXggNTk3OTcxMC4uZjM3NzhkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS10ZWdyYS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktdGVncmEuYwpAQCAtNDEsNiArNDEsNyBAQAogI2RlZmluZSBOVlFVSVJLX0RJU0FCTEVfU0RSNTAJCUJJVCgzKQogI2RlZmluZSBOVlFVSVJLX0RJU0FCTEVfU0RSMTA0CQlCSVQoNCkKICNkZWZpbmUgTlZRVUlSS19ESVNBQkxFX0REUjUwCQlCSVQoNSkKKyNkZWZpbmUgTlZRVUlSS19TSEFET1dfWEZFUl9NT0RFX1JFRwlCSVQoNikKIAogc3RydWN0IHNkaGNpX3RlZ3JhX3NvY19kYXRhIHsKIAljb25zdCBzdHJ1Y3Qgc2RoY2lfcGx0Zm1fZGF0YSAqcGRhdGE7CkBAIC02Nyw2ICs2OCwzMSBAQAogCXJldHVybiByZWFkdyhob3N0LT5pb2FkZHIgKyByZWcpOwogfQogCitzdGF0aWMgdm9pZCB0ZWdyYV9zZGhjaV93cml0ZXcoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUxNiB2YWwsIGludCByZWcpCit7CisJc3RydWN0IHNkaGNpX3BsdGZtX2hvc3QgKnBsdGZtX2hvc3QgPSBzZGhjaV9wcml2KGhvc3QpOworCXN0cnVjdCBzZGhjaV90ZWdyYSAqdGVncmFfaG9zdCA9IHBsdGZtX2hvc3QtPnByaXY7CisJY29uc3Qgc3RydWN0IHNkaGNpX3RlZ3JhX3NvY19kYXRhICpzb2NfZGF0YSA9IHRlZ3JhX2hvc3QtPnNvY19kYXRhOworCisJaWYgKHNvY19kYXRhLT5udnF1aXJrcyAmIE5WUVVJUktfU0hBRE9XX1hGRVJfTU9ERV9SRUcpIHsKKwkJc3dpdGNoIChyZWcpIHsKKwkJY2FzZSBTREhDSV9UUkFOU0ZFUl9NT0RFOgorCQkJLyoKKwkJCSAqIFBvc3Rwb25lIHRoaXMgd3JpdGUsIHdlIG11c3QgZG8gaXQgdG9nZXRoZXIgd2l0aCBhCisJCQkgKiBjb21tYW5kIHdyaXRlIHRoYXQgaXMgZG93biBiZWxvdy4KKwkJCSAqLworCQkJcGx0Zm1faG9zdC0+eGZlcl9tb2RlX3NoYWRvdyA9IHZhbDsKKwkJCXJldHVybjsKKwkJY2FzZSBTREhDSV9DT01NQU5EOgorCQkJd3JpdGVsKCh2YWwgPDwgMTYpIHwgcGx0Zm1faG9zdC0+eGZlcl9tb2RlX3NoYWRvdywKKwkJCQlob3N0LT5pb2FkZHIgKyBTREhDSV9UUkFOU0ZFUl9NT0RFKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXdyaXRldyh2YWwsIGhvc3QtPmlvYWRkciArIHJlZyk7Cit9CisKIHN0YXRpYyB2b2lkIHRlZ3JhX3NkaGNpX3dyaXRlbChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTMyIHZhbCwgaW50IHJlZykKIHsKIAlzdHJ1Y3Qgc2RoY2lfcGx0Zm1faG9zdCAqcGx0Zm1faG9zdCA9IHNkaGNpX3ByaXYoaG9zdCk7CkBAIC0xNDcsNiArMTczLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RoY2lfb3BzIHRlZ3JhX3NkaGNpX29wcyA9IHsKIAkuZ2V0X3JvICAgICA9IHRlZ3JhX3NkaGNpX2dldF9ybywKIAkucmVhZF93ICAgICA9IHRlZ3JhX3NkaGNpX3JlYWR3LAorCS53cml0ZV93ICAgID0gdGVncmFfc2RoY2lfd3JpdGV3LAogCS53cml0ZV9sICAgID0gdGVncmFfc2RoY2lfd3JpdGVsLAogCS5zZXRfY2xvY2sgID0gc2RoY2lfc2V0X2Nsb2NrLAogCS5zZXRfYnVzX3dpZHRoID0gdGVncmFfc2RoY2lfc2V0X2J1c193aWR0aCwKQEAgLTIwMSw3ICsyMjgsOCBAQAogCS5wZGF0YSA9ICZzZGhjaV90ZWdyYTExNF9wZGF0YSwKIAkubnZxdWlya3MgPSBOVlFVSVJLX0RJU0FCTEVfU0RSNTAgfAogCQkgICAgTlZRVUlSS19ESVNBQkxFX0REUjUwIHwKLQkJICAgIE5WUVVJUktfRElTQUJMRV9TRFIxMDQsCisJCSAgICBOVlFVSVJLX0RJU0FCTEVfU0RSMTA0IHwKKwkJICAgIE5WUVVJUktfU0hBRE9XX1hGRVJfTU9ERV9SRUcsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzZGhjaV90ZWdyYV9kdF9tYXRjaFtdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCmluZGV4IGYxYTQ4OGUuLjBhZDQxMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKQEAgLTUzLDYgKzUzLDkgQEAKIHN0YXRpYyBpbnQgc2RoY2lfZXhlY3V0ZV90dW5pbmcoc3RydWN0IG1tY19ob3N0ICptbWMsIHUzMiBvcGNvZGUpOwogc3RhdGljIHZvaWQgc2RoY2lfdHVuaW5nX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiBzdGF0aWMgdm9pZCBzZGhjaV9lbmFibGVfcHJlc2V0X3ZhbHVlKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBib29sIGVuYWJsZSk7CitzdGF0aWMgaW50IHNkaGNpX3ByZV9kbWFfdHJhbnNmZXIoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsCisJCQkJCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSwKKwkJCQkJc3RydWN0IHNkaGNpX2hvc3RfbmV4dCAqbmV4dCk7CiAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgc2RoY2lfcnVudGltZV9wbV9nZXQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpOwpAQCAtNTA1LDkgKzUwOCw4IEBACiAJCWdvdG8gZmFpbDsKIAlCVUdfT04oaG9zdC0+YWxpZ25fYWRkciAmIGhvc3QtPmFsaWduX21hc2spOwogCi0JaG9zdC0+c2dfY291bnQgPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwKLQkJZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwgZGlyZWN0aW9uKTsKLQlpZiAoaG9zdC0+c2dfY291bnQgPT0gMCkKKwlob3N0LT5zZ19jb3VudCA9IHNkaGNpX3ByZV9kbWFfdHJhbnNmZXIoaG9zdCwgZGF0YSwgTlVMTCk7CisJaWYgKGhvc3QtPnNnX2NvdW50IDwgMCkKIAkJZ290byB1bm1hcF9hbGlnbjsKIAogCWRlc2MgPSBob3N0LT5hZG1hX3RhYmxlOwpAQCAtNTMxLDggKzUzMyw2IEBACiAJCWlmIChvZmZzZXQpIHsKIAkJCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKSB7CiAJCQkJYnVmZmVyID0gc2RoY2lfa21hcF9hdG9taWMoc2csICZmbGFncyk7Ci0JCQkJV0FSTl9PTigoKGxvbmcpYnVmZmVyICYgKFBBR0VfU0laRSAtIDEpKSA+Ci0JCQkJCShQQUdFX1NJWkUgLSBvZmZzZXQpKTsKIAkJCQltZW1jcHkoYWxpZ24sIGJ1ZmZlciwgb2Zmc2V0KTsKIAkJCQlzZGhjaV9rdW5tYXBfYXRvbWljKGJ1ZmZlciwgJmZsYWdzKTsKIAkJCX0KQEAgLTYzOSw4ICs2MzksNiBAQAogCQkJCSAgICAgICAoc2dfZG1hX2FkZHJlc3Moc2cpICYgaG9zdC0+YWxpZ25fbWFzayk7CiAKIAkJCQlidWZmZXIgPSBzZGhjaV9rbWFwX2F0b21pYyhzZywgJmZsYWdzKTsKLQkJCQlXQVJOX09OKCgobG9uZylidWZmZXIgJiAoUEFHRV9TSVpFIC0gMSkpID4KLQkJCQkJKFBBR0VfU0laRSAtIHNpemUpKTsKIAkJCQltZW1jcHkoYnVmZmVyLCBhbGlnbiwgc2l6ZSk7CiAJCQkJc2RoY2lfa3VubWFwX2F0b21pYyhidWZmZXIsICZmbGFncyk7CiAKQEAgLTY0OSw4ICs2NDcsOSBAQAogCQl9CiAJfQogCi0JZG1hX3VubWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgZGF0YS0+c2csCi0JCWRhdGEtPnNnX2xlbiwgZGlyZWN0aW9uKTsKKwlpZiAoIWRhdGEtPmhvc3RfY29va2llKQorCQlkbWFfdW5tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywKKwkJCWRhdGEtPnNnX2xlbiwgZGlyZWN0aW9uKTsKIH0KIAogc3RhdGljIHU4IHNkaGNpX2NhbGNfdGltZW91dChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jb21tYW5kICpjbWQpCkBAIC04NDYsMTEgKzg0NSw3IEBACiAJCX0gZWxzZSB7CiAJCQlpbnQgc2dfY250OwogCi0JCQlzZ19jbnQgPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwKLQkJCQkJZGF0YS0+c2csIGRhdGEtPnNnX2xlbiwKLQkJCQkJKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkgPwotCQkJCQkJRE1BX0ZST01fREVWSUNFIDoKLQkJCQkJCURNQV9UT19ERVZJQ0UpOworCQkJc2dfY250ID0gc2RoY2lfcHJlX2RtYV90cmFuc2Zlcihob3N0LCBkYXRhLCBOVUxMKTsKIAkJCWlmIChzZ19jbnQgPT0gMCkgewogCQkJCS8qCiAJCQkJICogVGhpcyBvbmx5IGhhcHBlbnMgd2hlbiBzb21lb25lIGZlZApAQCAtOTA5LDcgKzkwNCw3IEBACiBzdGF0aWMgdm9pZCBzZGhjaV9zZXRfdHJhbnNmZXJfbW9kZShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwKIAlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZCkKIHsKLQl1MTYgbW9kZTsKKwl1MTYgbW9kZSA9IDA7CiAJc3RydWN0IG1tY19kYXRhICpkYXRhID0gY21kLT5kYXRhOwogCiAJaWYgKGRhdGEgPT0gTlVMTCkgewpAQCAtOTI3LDkgKzkyMiwxMSBAQAogCiAJV0FSTl9PTighaG9zdC0+ZGF0YSk7CiAKLQltb2RlID0gU0RIQ0lfVFJOU19CTEtfQ05UX0VOOworCWlmICghKGhvc3QtPnF1aXJrczIgJiBTREhDSV9RVUlSSzJfU1VQUE9SVF9TSU5HTEUpKQorCQltb2RlID0gU0RIQ0lfVFJOU19CTEtfQ05UX0VOOworCiAJaWYgKG1tY19vcF9tdWx0aShjbWQtPm9wY29kZSkgfHwgZGF0YS0+YmxvY2tzID4gMSkgewotCQltb2RlIHw9IFNESENJX1RSTlNfTVVMVEk7CisJCW1vZGUgPSBTREhDSV9UUk5TX0JMS19DTlRfRU4gfCBTREhDSV9UUk5TX01VTFRJOwogCQkvKgogCQkgKiBJZiB3ZSBhcmUgc2VuZGluZyBDTUQyMywgQ01EMTIgbmV2ZXIgZ2V0cyBzZW50CiAJCSAqIG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiAoc28gbm8gQXV0by1DTUQxMikuCkBAIC05NjMsOCArOTYwLDEwIEBACiAJCWlmIChob3N0LT5mbGFncyAmIFNESENJX1VTRV9BRE1BKQogCQkJc2RoY2lfYWRtYV90YWJsZV9wb3N0KGhvc3QsIGRhdGEpOwogCQllbHNlIHsKLQkJCWRtYV91bm1hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGRhdGEtPnNnLAotCQkJCWRhdGEtPnNnX2xlbiwgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkgPworCQkJaWYgKCFkYXRhLT5ob3N0X2Nvb2tpZSkKKwkJCQlkbWFfdW5tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLAorCQkJCQlkYXRhLT5zZywgZGF0YS0+c2dfbGVuLAorCQkJCQkoZGF0YS0+ZmxhZ3MgJiBNTUNfREFUQV9SRUFEKSA/CiAJCQkJCURNQV9GUk9NX0RFVklDRSA6IERNQV9UT19ERVZJQ0UpOwogCQl9CiAJfQpAQCAtMTYzMCw3ICsxNjI5LDcgQEAKIAkgKiBzaWduYWxsaW5nIHRpbWVvdXQgYW5kIENSQyBlcnJvcnMgZXZlbiBvbiBDTUQwLiBSZXNldHRpbmcKIAkgKiBpdCBvbiBlYWNoIGlvcyBzZWVtcyB0byBzb2x2ZSB0aGUgcHJvYmxlbS4KIAkgKi8KLQlpZihob3N0LT5xdWlya3MgJiBTREhDSV9RVUlSS19SRVNFVF9DTURfREFUQV9PTl9JT1MpCisJaWYgKGhvc3QtPnF1aXJrcyAmIFNESENJX1FVSVJLX1JFU0VUX0NNRF9EQVRBX09OX0lPUykKIAkJc2RoY2lfZG9fcmVzZXQoaG9zdCwgU0RIQ0lfUkVTRVRfQ01EIHwgU0RIQ0lfUkVTRVRfREFUQSk7CiAKIAltbWlvd2IoKTsKQEAgLTE4MzIsNiArMTgzMSwxMCBAQAogCQljdHJsIHw9IFNESENJX0NUUkxfVkREXzE4MDsKIAkJc2RoY2lfd3JpdGV3KGhvc3QsIGN0cmwsIFNESENJX0hPU1RfQ09OVFJPTDIpOwogCisJCS8qIFNvbWUgY29udHJvbGxlciBuZWVkIHRvIGRvIG1vcmUgd2hlbiBzd2l0Y2hpbmcgKi8KKwkJaWYgKGhvc3QtPm9wcy0+dm9sdGFnZV9zd2l0Y2gpCisJCQlob3N0LT5vcHMtPnZvbHRhZ2Vfc3dpdGNoKGhvc3QpOworCiAJCS8qIDEuOFYgcmVndWxhdG9yIG91dHB1dCBzaG91bGQgYmUgc3RhYmxlIHdpdGhpbiA1IG1zICovCiAJCWN0cmwgPSBzZGhjaV9yZWFkdyhob3N0LCBTREhDSV9IT1NUX0NPTlRST0wyKTsKIAkJaWYgKGN0cmwgJiBTREhDSV9DVFJMX1ZERF8xODApCkBAIC0xOTYwLDYgKzE5NjMsOCBAQAogCiAJY3RybCA9IHNkaGNpX3JlYWR3KGhvc3QsIFNESENJX0hPU1RfQ09OVFJPTDIpOwogCWN0cmwgfD0gU0RIQ0lfQ1RSTF9FWEVDX1RVTklORzsKKwlpZiAoaG9zdC0+cXVpcmtzMiAmIFNESENJX1FVSVJLMl9UVU5JTkdfV09SS19BUk9VTkQpCisJCWN0cmwgfD0gU0RIQ0lfQ1RSTF9UVU5FRF9DTEs7CiAJc2RoY2lfd3JpdGV3KGhvc3QsIGN0cmwsIFNESENJX0hPU1RfQ09OVFJPTDIpOwogCiAJLyoKQEAgLTIxMjksNiArMjEzNCw3NyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc2RoY2lfcG9zdF9yZXEoc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxLAorCQkJCWludCBlcnIpCit7CisJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCXN0cnVjdCBtbWNfZGF0YSAqZGF0YSA9IG1ycS0+ZGF0YTsKKworCWlmIChob3N0LT5mbGFncyAmIFNESENJX1JFUV9VU0VfRE1BKSB7CisJCWlmIChkYXRhLT5ob3N0X2Nvb2tpZSkKKwkJCWRtYV91bm1hcF9zZyhtbWNfZGV2KGhvc3QtPm1tYyksIGRhdGEtPnNnLCBkYXRhLT5zZ19sZW4sCisJCQkJCSBkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFID8KKwkJCQkJIERNQV9UT19ERVZJQ0UgOiBETUFfRlJPTV9ERVZJQ0UpOworCQltcnEtPmRhdGEtPmhvc3RfY29va2llID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2RoY2lfcHJlX2RtYV90cmFuc2ZlcihzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwKKwkJCQkgICAgICAgc3RydWN0IG1tY19kYXRhICpkYXRhLAorCQkJCSAgICAgICBzdHJ1Y3Qgc2RoY2lfaG9zdF9uZXh0ICpuZXh0KQoreworCWludCBzZ19jb3VudDsKKworCWlmICghbmV4dCAmJiBkYXRhLT5ob3N0X2Nvb2tpZSAmJgorCSAgICBkYXRhLT5ob3N0X2Nvb2tpZSAhPSBob3N0LT5uZXh0X2RhdGEuY29va2llKSB7CisJCXByX2RlYnVnKERSSVZFUl9OQU1FICJbJXNdIGludmFsaWQgY29va2llOiAlZCwgbmV4dC1jb29raWUgJWRcbiIsCisJCQlfX2Z1bmNfXywgZGF0YS0+aG9zdF9jb29raWUsIGhvc3QtPm5leHRfZGF0YS5jb29raWUpOworCQlkYXRhLT5ob3N0X2Nvb2tpZSA9IDA7CisJfQorCisJLyogQ2hlY2sgaWYgbmV4dCBqb2IgaXMgYWxyZWFkeSBwcmVwYXJlZCAqLworCWlmIChuZXh0IHx8CisJICAgICghbmV4dCAmJiBkYXRhLT5ob3N0X2Nvb2tpZSAhPSBob3N0LT5uZXh0X2RhdGEuY29va2llKSkgeworCQlzZ19jb3VudCA9IGRtYV9tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBkYXRhLT5zZywKKwkJCQkgICAgIGRhdGEtPnNnX2xlbiwKKwkJCQkgICAgIGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfV1JJVEUgPworCQkJCSAgICAgRE1BX1RPX0RFVklDRSA6IERNQV9GUk9NX0RFVklDRSk7CisKKwl9IGVsc2UgeworCQlzZ19jb3VudCA9IGhvc3QtPm5leHRfZGF0YS5zZ19jb3VudDsKKwkJaG9zdC0+bmV4dF9kYXRhLnNnX2NvdW50ID0gMDsKKwl9CisKKworCWlmIChzZ19jb3VudCA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChuZXh0KSB7CisJCW5leHQtPnNnX2NvdW50ID0gc2dfY291bnQ7CisJCWRhdGEtPmhvc3RfY29va2llID0gKytuZXh0LT5jb29raWUgPCAwID8gMSA6IG5leHQtPmNvb2tpZTsKKwl9IGVsc2UKKwkJaG9zdC0+c2dfY291bnQgPSBzZ19jb3VudDsKKworCXJldHVybiBzZ19jb3VudDsKK30KKworc3RhdGljIHZvaWQgc2RoY2lfcHJlX3JlcShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19yZXF1ZXN0ICptcnEsCisJCQkgICAgICAgYm9vbCBpc19maXJzdF9yZXEpCit7CisJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOworCisJaWYgKG1ycS0+ZGF0YS0+aG9zdF9jb29raWUpIHsKKwkJbXJxLT5kYXRhLT5ob3N0X2Nvb2tpZSA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaG9zdC0+ZmxhZ3MgJiBTREhDSV9SRVFfVVNFX0RNQSkKKwkJaWYgKHNkaGNpX3ByZV9kbWFfdHJhbnNmZXIoaG9zdCwKKwkJCQkJbXJxLT5kYXRhLAorCQkJCQkmaG9zdC0+bmV4dF9kYXRhKSA8IDApCisJCQltcnEtPmRhdGEtPmhvc3RfY29va2llID0gMDsKK30KKwogc3RhdGljIHZvaWQgc2RoY2lfY2FyZF9ldmVudChzdHJ1Y3QgbW1jX2hvc3QgKm1tYykKIHsKIAlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CkBAIC0yMTYyLDYgKzIyMzgsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBzZGhjaV9vcHMgPSB7CiAJLnJlcXVlc3QJPSBzZGhjaV9yZXF1ZXN0LAorCS5wb3N0X3JlcQk9IHNkaGNpX3Bvc3RfcmVxLAorCS5wcmVfcmVxCT0gc2RoY2lfcHJlX3JlcSwKIAkuc2V0X2lvcwk9IHNkaGNpX3NldF9pb3MsCiAJLmdldF9jZAkJPSBzZGhjaV9nZXRfY2QsCiAJLmdldF9ybwkJPSBzZGhjaV9nZXRfcm8sCkBAIC0yNzkzLDkgKzI4NzEsOSBAQAogCS8qIEZvcmNlIGNsb2NrIGFuZCBwb3dlciByZS1wcm9ncmFtICovCiAJaG9zdC0+cHdyID0gMDsKIAlob3N0LT5jbG9jayA9IDA7CisJc2RoY2lfZG9fc3RhcnRfc2lnbmFsX3ZvbHRhZ2Vfc3dpdGNoKGhvc3QsICZob3N0LT5tbWMtPmlvcyk7CiAJc2RoY2lfZG9fc2V0X2lvcyhob3N0LCAmaG9zdC0+bW1jLT5pb3MpOwogCi0Jc2RoY2lfZG9fc3RhcnRfc2lnbmFsX3ZvbHRhZ2Vfc3dpdGNoKGhvc3QsICZob3N0LT5tbWMtPmlvcyk7CiAJaWYgKChob3N0X2ZsYWdzICYgU0RIQ0lfUFZfRU5BQkxFRCkgJiYKIAkJIShob3N0LT5xdWlya3MyICYgU0RIQ0lfUVVJUksyX1BSRVNFVF9WQUxVRV9CUk9LRU4pKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBmbGFncyk7CkBAIC0zMDE5LDYgKzMwOTcsNyBAQAogCQlob3N0LT5tYXhfY2xrID0gaG9zdC0+b3BzLT5nZXRfbWF4X2Nsb2NrKGhvc3QpOwogCX0KIAorCWhvc3QtPm5leHRfZGF0YS5jb29raWUgPSAxOwogCS8qCiAJICogSW4gY2FzZSBvZiBIb3N0IENvbnRyb2xsZXIgdjMuMDAsIGZpbmQgb3V0IHdoZXRoZXIgY2xvY2sKIAkgKiBtdWx0aXBsaWVyIGlzIHN1cHBvcnRlZC4KQEAgLTMzMzgsOSArMzQxNyw5IEBACiAKIAlzZXR1cF90aW1lcigmaG9zdC0+dGltZXIsIHNkaGNpX3RpbWVvdXRfdGltZXIsICh1bnNpZ25lZCBsb25nKWhvc3QpOwogCi0JaWYgKGhvc3QtPnZlcnNpb24gPj0gU0RIQ0lfU1BFQ18zMDApIHsKLQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaG9zdC0+YnVmX3JlYWR5X2ludCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaG9zdC0+YnVmX3JlYWR5X2ludCk7CiAKKwlpZiAoaG9zdC0+dmVyc2lvbiA+PSBTREhDSV9TUEVDXzMwMCkgewogCQkvKiBJbml0aWFsaXplIHJlLXR1bmluZyB0aW1lciAqLwogCQlpbml0X3RpbWVyKCZob3N0LT50dW5pbmdfdGltZXIpOwogCQlob3N0LT50dW5pbmdfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWhvc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmggYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmgKaW5kZXggNDFhMmMzNC4uMDMxNWUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuaApAQCAtMzM5LDYgKzMzOSw3IEBACiAJdm9pZCAgICAoKmFkbWFfd29ya2Fyb3VuZCkoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QsIHUzMiBpbnRtYXNrKTsKIAl2b2lkCSgqcGxhdGZvcm1faW5pdCkoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpOwogCXZvaWQgICAgKCpjYXJkX2V2ZW50KShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCk7CisJdm9pZAkoKnZvbHRhZ2Vfc3dpdGNoKShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCk7CiB9OwogCiAjaWZkZWYgQ09ORklHX01NQ19TREhDSV9JT19BQ0NFU1NPUlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2lfZl9zZGgzMC5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaV9mX3NkaDMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlOGI5MQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2lfZl9zZGgzMC5jCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogbGludXgvZHJpdmVycy9tbWMvaG9zdC9zZGhjaV9mX3NkaDMwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE1IEZ1aml0c3UgU2VtaWNvbmR1Y3RvciwgTHRkCisgKiAgICAgICAgICAgICAgVmluY2VudCBZYW5nIDx2aW5jZW50LnlhbmdAdHcuZnVqaXRzdS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgTGluYXJvIEx0ZCAgQW5keSBHcmVlbiA8YW5keS5ncmVlbkBsaW5hcm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSAic2RoY2ktcGx0Zm0uaCIKKworLyogRl9TREgzMCBleHRlbmRlZCBDb250cm9sbGVyIHJlZ2lzdGVycyAqLworI2RlZmluZSBGX1NESDMwX0FIQl9DT05GSUcJCTB4MTAwCisjZGVmaW5lICBGX1NESDMwX0FIQl9CSUdFRAkJMHgwMDAwMDA0MAorI2RlZmluZSAgRl9TREgzMF9CVVNMT0NLX0RNQQkJMHgwMDAwMDAyMAorI2RlZmluZSAgRl9TREgzMF9CVVNMT0NLX0VOCQkweDAwMDAwMDEwCisjZGVmaW5lICBGX1NESDMwX1NJTgkJCTB4MDAwMDAwMDgKKyNkZWZpbmUgIEZfU0RIMzBfQUhCX0lOQ1JfMTYJCTB4MDAwMDAwMDQKKyNkZWZpbmUgIEZfU0RIMzBfQUhCX0lOQ1JfOAkJMHgwMDAwMDAwMgorI2RlZmluZSAgRl9TREgzMF9BSEJfSU5DUl80CQkweDAwMDAwMDAxCisKKyNkZWZpbmUgRl9TREgzMF9UVU5JTkdfU0VUVElORwkJMHgxMDgKKyNkZWZpbmUgIEZfU0RIMzBfQ01EX0NIS19ESVMJCTB4MDAwMTAwMDAKKworI2RlZmluZSBGX1NESDMwX0lPX0NPTlRST0wyCQkweDExNAorI2RlZmluZSAgRl9TREgzMF9DUkVTX09fRE4JCTB4MDAwODAwMDAKKyNkZWZpbmUgIEZfU0RIMzBfTVNFTF9PXzFfOAkJMHgwMDA0MDAwMAorCisjZGVmaW5lIEZfU0RIMzBfRVNEX0NPTlRST0wJCTB4MTI0CisjZGVmaW5lICBGX1NESDMwX0VNTUNfUlNUCQkweDAwMDAwMDAyCisjZGVmaW5lICBGX1NESDMwX0VNTUNfSFMyMDAJCTB4MDEwMDAwMDAKKworI2RlZmluZSBGX1NESDMwX0NNRF9EQVRfREVMQVkJCTB4MjAwCisKKyNkZWZpbmUgRl9TREgzMF9NSU5fQ0xPQ0sJCTQwMDAwMAorCitzdHJ1Y3QgZl9zZGhvc3RfcHJpdiB7CisJc3RydWN0IGNsayAqY2xrX2lmYWNlOworCXN0cnVjdCBjbGsgKmNsazsKKwl1MzIgdmVuZG9yX2hzMjAwOworCXN0cnVjdCBkZXZpY2UgKmRldjsKK307CisKK3ZvaWQgc2RoY2lfZl9zZGgzMF9zb2Z0X3ZvbHRhZ2Vfc3dpdGNoKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0KQoreworCXN0cnVjdCBmX3NkaG9zdF9wcml2ICpwcml2ID0gc2RoY2lfcHJpdihob3N0KTsKKwl1MzIgY3RybCA9IDA7CisKKwl1c2xlZXBfcmFuZ2UoMjUwMCwgMzAwMCk7CisJY3RybCA9IHNkaGNpX3JlYWRsKGhvc3QsIEZfU0RIMzBfSU9fQ09OVFJPTDIpOworCWN0cmwgfD0gRl9TREgzMF9DUkVTX09fRE47CisJc2RoY2lfd3JpdGVsKGhvc3QsIGN0cmwsIEZfU0RIMzBfSU9fQ09OVFJPTDIpOworCWN0cmwgfD0gRl9TREgzMF9NU0VMX09fMV84OworCXNkaGNpX3dyaXRlbChob3N0LCBjdHJsLCBGX1NESDMwX0lPX0NPTlRST0wyKTsKKworCWN0cmwgJj0gfkZfU0RIMzBfQ1JFU19PX0ROOworCXNkaGNpX3dyaXRlbChob3N0LCBjdHJsLCBGX1NESDMwX0lPX0NPTlRST0wyKTsKKwl1c2xlZXBfcmFuZ2UoMjUwMCwgMzAwMCk7CisKKwlpZiAocHJpdi0+dmVuZG9yX2hzMjAwKSB7CisJCWRldl9pbmZvKHByaXYtPmRldiwgIiVzOiBzZXR0aW5nIGhzMjAwXG4iLCBfX2Z1bmNfXyk7CisJCWN0cmwgPSBzZGhjaV9yZWFkbChob3N0LCBGX1NESDMwX0VTRF9DT05UUk9MKTsKKwkJY3RybCB8PSBwcml2LT52ZW5kb3JfaHMyMDA7CisJCXNkaGNpX3dyaXRlbChob3N0LCBjdHJsLCBGX1NESDMwX0VTRF9DT05UUk9MKTsKKwl9CisKKwljdHJsID0gc2RoY2lfcmVhZGwoaG9zdCwgRl9TREgzMF9UVU5JTkdfU0VUVElORyk7CisJY3RybCB8PSBGX1NESDMwX0NNRF9DSEtfRElTOworCXNkaGNpX3dyaXRlbChob3N0LCBjdHJsLCBGX1NESDMwX1RVTklOR19TRVRUSU5HKTsKK30KKwordW5zaWduZWQgaW50IHNkaGNpX2Zfc2RoMzBfZ2V0X21pbl9jbG9jayhzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gRl9TREgzMF9NSU5fQ0xPQ0s7Cit9CisKK3ZvaWQgc2RoY2lfZl9zZGgzMF9yZXNldChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgdTggbWFzaykKK3sKKwlpZiAoc2RoY2lfcmVhZHcoaG9zdCwgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCkgPT0gMCkKKwkJc2RoY2lfd3JpdGV3KGhvc3QsIDB4QkMwMSwgU0RIQ0lfQ0xPQ0tfQ09OVFJPTCk7CisKKwlzZGhjaV9yZXNldChob3N0LCBtYXNrKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZGhjaV9vcHMgc2RoY2lfZl9zZGgzMF9vcHMgPSB7CisJLnZvbHRhZ2Vfc3dpdGNoID0gc2RoY2lfZl9zZGgzMF9zb2Z0X3ZvbHRhZ2Vfc3dpdGNoLAorCS5nZXRfbWluX2Nsb2NrID0gc2RoY2lfZl9zZGgzMF9nZXRfbWluX2Nsb2NrLAorCS5yZXNldCA9IHNkaGNpX2Zfc2RoMzBfcmVzZXQsCisJLnNldF9jbG9jayA9IHNkaGNpX3NldF9jbG9jaywKKwkuc2V0X2J1c193aWR0aCA9IHNkaGNpX3NldF9idXNfd2lkdGgsCisJLnNldF91aHNfc2lnbmFsaW5nID0gc2RoY2lfc2V0X3Voc19zaWduYWxpbmcsCit9OworCitzdGF0aWMgaW50IHNkaGNpX2Zfc2RoMzBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBpcnEsIGN0cmwgPSAwLCByZXQgPSAwOworCXN0cnVjdCBmX3NkaG9zdF9wcml2ICpwcml2OworCXUzMiByZWcgPSAwOworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKGRldiwgIiVzOiBubyBpcnEgc3BlY2lmaWVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBpcnE7CisJfQorCisJaG9zdCA9IHNkaGNpX2FsbG9jX2hvc3QoZGV2LCBzaXplb2Yoc3RydWN0IHNkaGNpX2hvc3QpICsKKwkJCQkJCXNpemVvZihzdHJ1Y3QgZl9zZGhvc3RfcHJpdikpOworCWlmIChJU19FUlIoaG9zdCkpCisJCXJldHVybiBQVFJfRVJSKGhvc3QpOworCisJcHJpdiA9IHNkaGNpX3ByaXYoaG9zdCk7CisJcHJpdi0+ZGV2ID0gZGV2OworCisJaG9zdC0+cXVpcmtzID0gU0RIQ0lfUVVJUktfTk9fRU5EQVRUUl9JTl9OT1BERVNDIHwKKwkJICAgICAgIFNESENJX1FVSVJLX0lOVkVSVEVEX1dSSVRFX1BST1RFQ1Q7CisJaG9zdC0+cXVpcmtzMiA9IFNESENJX1FVSVJLMl9TVVBQT1JUX1NJTkdMRSB8CisJCQlTREhDSV9RVUlSSzJfVFVOSU5HX1dPUktfQVJPVU5EOworCisJcmV0ID0gbW1jX29mX3BhcnNlKGhvc3QtPm1tYyk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBob3N0KTsKKworCXNkaGNpX2dldF9vZl9wcm9wZXJ0eShwZGV2KTsKKwlob3N0LT5od19uYW1lID0gImZfc2RoMzAiOworCWhvc3QtPm9wcyA9ICZzZGhjaV9mX3NkaDMwX29wczsKKwlob3N0LT5pcnEgPSBpcnE7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWhvc3QtPmlvYWRkciA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoaG9zdC0+aW9hZGRyKSkgeworCQlyZXQgPSBQVFJfRVJSKGhvc3QtPmlvYWRkcik7CisJCWdvdG8gZXJyOworCX0KKworCXByaXYtPmNsa19pZmFjZSA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiaWZhY2UiKTsKKwlpZiAoSVNfRVJSKHByaXYtPmNsa19pZmFjZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihwcml2LT5jbGtfaWZhY2UpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0+Y2xrX2lmYWNlKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXByaXYtPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCAiY29yZSIpOworCWlmIChJU19FUlIocHJpdi0+Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKHByaXYtPmNsayk7CisJCWdvdG8gZXJyX2NsazsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocHJpdi0+Y2xrKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9jbGs7CisKKwkvKiBpbml0IHZlbmRvciBzcGVjaWZpYyByZWdzICovCisJY3RybCA9IHNkaGNpX3JlYWR3KGhvc3QsIEZfU0RIMzBfQUhCX0NPTkZJRyk7CisJY3RybCB8PSBGX1NESDMwX1NJTiB8IEZfU0RIMzBfQUhCX0lOQ1JfMTYgfCBGX1NESDMwX0FIQl9JTkNSXzggfAorCQlGX1NESDMwX0FIQl9JTkNSXzQ7CisJY3RybCAmPSB+KEZfU0RIMzBfQUhCX0JJR0VEIHwgRl9TREgzMF9CVVNMT0NLX0VOKTsKKwlzZGhjaV93cml0ZXcoaG9zdCwgY3RybCwgRl9TREgzMF9BSEJfQ09ORklHKTsKKworCXJlZyA9IHNkaGNpX3JlYWRsKGhvc3QsIEZfU0RIMzBfRVNEX0NPTlRST0wpOworCXNkaGNpX3dyaXRlbChob3N0LCByZWcgJiB+Rl9TREgzMF9FTU1DX1JTVCwgRl9TREgzMF9FU0RfQ09OVFJPTCk7CisJbXNsZWVwKDIwKTsKKwlzZGhjaV93cml0ZWwoaG9zdCwgcmVnIHwgRl9TREgzMF9FTU1DX1JTVCwgRl9TREgzMF9FU0RfQ09OVFJPTCk7CisKKwlyZWcgPSBzZGhjaV9yZWFkbChob3N0LCBTREhDSV9DQVBBQklMSVRJRVMpOworCWlmIChyZWcgJiBTREhDSV9DQU5fRE9fOEJJVCkKKwkJcHJpdi0+dmVuZG9yX2hzMjAwID0gRl9TREgzMF9FTU1DX0hTMjAwOworCisJcmV0ID0gc2RoY2lfYWRkX2hvc3QoaG9zdCk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfYWRkX2hvc3Q7CisKKwlyZXR1cm4gMDsKKworZXJyX2FkZF9ob3N0OgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5jbGspOworZXJyX2NsazoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrX2lmYWNlKTsKK2VycjoKKwlzZGhjaV9mcmVlX2hvc3QoaG9zdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzZGhjaV9mX3NkaDMwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBzZGhjaV9ob3N0ICpob3N0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGZfc2Rob3N0X3ByaXYgKnByaXYgPSBzZGhjaV9wcml2KGhvc3QpOworCisJc2RoY2lfcmVtb3ZlX2hvc3QoaG9zdCwgcmVhZGwoaG9zdC0+aW9hZGRyICsgU0RIQ0lfSU5UX1NUQVRVUykgPT0KKwkJCSAgMHhmZmZmZmZmZik7CisKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrX2lmYWNlKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrKTsKKworCXNkaGNpX2ZyZWVfaG9zdChob3N0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBmX3NkaDMwX2R0X2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnVqaXRzdSxtYjg2czcwLXNkaGNpLTMuMCIgfSwKKwl7IC8qIHNlbnRpbmVsICovIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmX3NkaDMwX2R0X2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNkaGNpX2Zfc2RoMzBfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImZfc2RoMzAiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBmX3NkaDMwX2R0X2lkcywKKwkJLnBtCT0gU0RIQ0lfUExURk1fUE1PUFMsCisJfSwKKwkucHJvYmUJPSBzZGhjaV9mX3NkaDMwX3Byb2JlLAorCS5yZW1vdmUJPSBzZGhjaV9mX3NkaDMwX3JlbW92ZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc2RoY2lfZl9zZGgzMF9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkZfU0RIMzAgU0QgQ2FyZCBDb250cm9sbGVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FVVEhPUigiRlVKSVRTVSBTRU1JQ09ORFVDVE9SIExURC4iKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06Zl9zZGgzMCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zaF9tb2JpbGVfc2RoaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zaF9tb2JpbGVfc2RoaS5jCmluZGV4IDAwYzhlYmQuLjY5MDZhOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2hfbW9iaWxlX3NkaGkuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NoX21vYmlsZV9zZGhpLmMKQEAgLTM1LDEwICszNSwxMyBAQAogCiAjZGVmaW5lIEVYVF9BQ0MgICAgICAgICAgIDB4ZTQKIAorI2RlZmluZSBob3N0X3RvX3ByaXYoaG9zdCkgY29udGFpbmVyX29mKChob3N0KS0+cGRhdGEsIHN0cnVjdCBzaF9tb2JpbGVfc2RoaSwgbW1jX2RhdGEpCisKIHN0cnVjdCBzaF9tb2JpbGVfc2RoaV9vZl9kYXRhIHsKIAl1bnNpZ25lZCBsb25nIHRtaW9fZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXM7CiAJdW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXMyOworCWVudW0gZG1hX3NsYXZlX2J1c3dpZHRoIGRtYV9idXN3aWR0aDsKIAlkbWFfYWRkcl90IGRtYV9yeF9vZmZzZXQ7CiB9OwogCkBAIC01OCw2ICs2MSw3IEBACiAJLnRtaW9fZmxhZ3MJPSBUTUlPX01NQ19IQVNfSURMRV9XQUlUIHwgVE1JT19NTUNfV1JQUk9URUNUX0RJU0FCTEUgfAogCQkJICBUTUlPX01NQ19DTEtfQUNUVUFMLAogCS5jYXBhYmlsaXRpZXMJPSBNTUNfQ0FQX1NEX0hJR0hTUEVFRCB8IE1NQ19DQVBfU0RJT19JUlEsCisJLmRtYV9idXN3aWR0aAk9IERNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTLAogCS5kbWFfcnhfb2Zmc2V0CT0gMHgyMDAwLAogfTsKIApAQCAtODQsMTYgKzg4LDQzIEBACiAJc3RydWN0IHRtaW9fbW1jX2RtYSBkbWFfcHJpdjsKIH07CiAKK3N0YXRpYyB2b2lkIHNoX21vYmlsZV9zZGhpX3NkYnVmX3dpZHRoKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LCBpbnQgd2lkdGgpCit7CisJdTMyIHZhbDsKKworCS8qCisJICogc2VlIGFsc28KKwkgKglzaF9tb2JpbGVfc2RoaV9vZl9kYXRhIDo6IGRtYV9idXN3aWR0aAorCSAqLworCXN3aXRjaCAoc2RfY3RybF9yZWFkMTYoaG9zdCwgQ1RMX1ZFUlNJT04pKSB7CisJY2FzZSAweDQ5MEM6CisJCXZhbCA9ICh3aWR0aCA9PSAzMikgPyAweDAwMDEgOiAweDAwMDA7CisJCWJyZWFrOworCWNhc2UgMHhDQjBEOgorCQl2YWwgPSAod2lkdGggPT0gMzIpID8gMHgwMDAwIDogMHgwMDAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBub3RoaW5nIHRvIGRvICovCisJCXJldHVybjsKKwl9CisKKwlzZF9jdHJsX3dyaXRlMTYoaG9zdCwgRVhUX0FDQywgdmFsKTsKK30KKwogc3RhdGljIGludCBzaF9tb2JpbGVfc2RoaV9jbGtfZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCAqZikKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0ID0gbW1jX3ByaXYobW1jKTsKLQlzdHJ1Y3Qgc2hfbW9iaWxlX3NkaGkgKnByaXYgPSBjb250YWluZXJfb2YoaG9zdC0+cGRhdGEsIHN0cnVjdCBzaF9tb2JpbGVfc2RoaSwgbW1jX2RhdGEpOworCXN0cnVjdCBzaF9tb2JpbGVfc2RoaSAqcHJpdiA9IGhvc3RfdG9fcHJpdihob3N0KTsKIAlpbnQgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaXYtPmNsayk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKIAkqZiA9IGNsa19nZXRfcmF0ZShwcml2LT5jbGspOworCisJLyogZW5hYmxlIDE2Yml0IGRhdGEgYWNjZXNzIG9uIFNEQlVGIGFzIGRlZmF1bHQgKi8KKwlzaF9tb2JpbGVfc2RoaV9zZGJ1Zl93aWR0aChob3N0LCAxNik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAxLDcgKzEzMiw3IEBACiB7CiAJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7Ci0Jc3RydWN0IHNoX21vYmlsZV9zZGhpICpwcml2ID0gY29udGFpbmVyX29mKGhvc3QtPnBkYXRhLCBzdHJ1Y3Qgc2hfbW9iaWxlX3NkaGksIG1tY19kYXRhKTsKKwlzdHJ1Y3Qgc2hfbW9iaWxlX3NkaGkgKnByaXYgPSBob3N0X3RvX3ByaXYoaG9zdCk7CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNsayk7CiB9CiAKQEAgLTExMyw3ICsxNDQsNyBAQAogCQl1ZGVsYXkoMSk7CiAKIAlpZiAoIXRpbWVvdXQpIHsKLQkJZGV2X3dhcm4oaG9zdC0+cGRhdGEtPmRldiwgInRpbWVvdXQgd2FpdGluZyBmb3IgU0QgYnVzIGlkbGVcbiIpOworCQlkZXZfd2FybigmaG9zdC0+cGRldi0+ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBTRCBidXMgaWRsZVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0xNTYsMTQgKzE4NywxMyBAQAogCXJldHVybiBibGtfc2l6ZTsKIH0KIAotc3RhdGljIHZvaWQgc2hfbW9iaWxlX3NkaGlfY2Rfd2FrZXVwKGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgdm9pZCBzaF9tb2JpbGVfc2RoaV9lbmFibGVfZG1hKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LCBib29sIGVuYWJsZSkKIHsKLQltbWNfZGV0ZWN0X2NoYW5nZShwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KSwgbXNlY3NfdG9famlmZmllcygxMDApKTsKLX0KKwlzZF9jdHJsX3dyaXRlMTYoaG9zdCwgQ1RMX0RNQV9FTkFCTEUsIGVuYWJsZSA/IDIgOiAwKTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzaF9tb2JpbGVfc2RoaV9vcHMgc2RoaV9vcHMgPSB7Ci0JLmNkX3dha2V1cCA9IHNoX21vYmlsZV9zZGhpX2NkX3dha2V1cCwKLX07CisJLyogZW5hYmxlIDMyYml0IGFjY2VzcyBpZiBETUEgbW9kZSBpZiBwb3NzaWJpbGUgKi8KKwlzaF9tb2JpbGVfc2RoaV9zZGJ1Zl93aWR0aChob3N0LCBlbmFibGUgPyAzMiA6IDE2KTsKK30KIAogc3RhdGljIGludCBzaF9tb2JpbGVfc2RoaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewpAQCAtMTc3LDcgKzIwNyw2IEBACiAJaW50IGlycSwgcmV0LCBpID0gMDsKIAlib29sIG11bHRpcGxleGVkX2lzciA9IHRydWU7CiAJc3RydWN0IHRtaW9fbW1jX2RtYSAqZG1hX3ByaXY7Ci0JdTE2IHZlcjsKIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXMpCkBAIC0xOTIsMjYgKzIyMSwzMSBAQAogCW1tY19kYXRhID0gJnByaXYtPm1tY19kYXRhOwogCWRtYV9wcml2ID0gJnByaXYtPmRtYV9wcml2OwogCi0JaWYgKHApIHsKLQkJaWYgKHAtPmluaXQpIHsKLQkJCXJldCA9IHAtPmluaXQocGRldiwgJnNkaGlfb3BzKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQogCXByaXYtPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKIAlpZiAoSVNfRVJSKHByaXYtPmNsaykpIHsKIAkJcmV0ID0gUFRSX0VSUihwcml2LT5jbGspOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IGNsb2NrOiAlZFxuIiwgcmV0KTsKLQkJZ290byBlY2xrZ2V0OworCQlnb3RvIGVwcm9iZTsKIAl9CiAKLQltbWNfZGF0YS0+Y2xrX2VuYWJsZSA9IHNoX21vYmlsZV9zZGhpX2Nsa19lbmFibGU7Ci0JbW1jX2RhdGEtPmNsa19kaXNhYmxlID0gc2hfbW9iaWxlX3NkaGlfY2xrX2Rpc2FibGU7CisJaG9zdCA9IHRtaW9fbW1jX2hvc3RfYWxsb2MocGRldik7CisJaWYgKCFob3N0KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXByb2JlOworCX0KKworCWhvc3QtPmRtYQkJPSBkbWFfcHJpdjsKKwlob3N0LT53cml0ZTE2X2hvb2sJPSBzaF9tb2JpbGVfc2RoaV93cml0ZTE2X2hvb2s7CisJaG9zdC0+Y2xrX2VuYWJsZQk9IHNoX21vYmlsZV9zZGhpX2Nsa19lbmFibGU7CisJaG9zdC0+Y2xrX2Rpc2FibGUJPSBzaF9tb2JpbGVfc2RoaV9jbGtfZGlzYWJsZTsKKwlob3N0LT5tdWx0aV9pb19xdWlyawk9IHNoX21vYmlsZV9zZGhpX211bHRpX2lvX3F1aXJrOworCS8qIFNEIGNvbnRyb2wgcmVnaXN0ZXIgc3BhY2Ugc2l6ZSBpcyAweDEwMCwgMHgyMDAgZm9yIGJ1c19zaGlmdD0xICovCisJaWYgKHJlc291cmNlX3NpemUocmVzKSA+IDB4MTAwKQorCQlob3N0LT5idXNfc2hpZnQgPSAxOworCWVsc2UKKwkJaG9zdC0+YnVzX3NoaWZ0ID0gMDsKKwogCW1tY19kYXRhLT5jYXBhYmlsaXRpZXMgPSBNTUNfQ0FQX01NQ19ISUdIU1BFRUQ7Ci0JbW1jX2RhdGEtPndyaXRlMTZfaG9vayA9IHNoX21vYmlsZV9zZGhpX3dyaXRlMTZfaG9vazsKLQltbWNfZGF0YS0+bXVsdGlfaW9fcXVpcmsgPSBzaF9tb2JpbGVfc2RoaV9tdWx0aV9pb19xdWlyazsKIAlpZiAocCkgewogCQltbWNfZGF0YS0+ZmxhZ3MgPSBwLT50bWlvX2ZsYWdzOwogCQltbWNfZGF0YS0+b2NyX21hc2sgPSBwLT50bWlvX29jcl9tYXNrOwpAQCAtMjMxLDExICsyNjUsMTAgQEAKIAkJCWRtYV9wcml2LT5zbGF2ZV9pZF9yeCA9IHAtPmRtYV9zbGF2ZV9yeDsKIAkJfQogCX0KLQotCWRtYV9wcml2LT5hbGlnbm1lbnRfc2hpZnQgPSAxOyAvKiAyLWJ5dGUgYWxpZ25tZW50ICovCiAJZG1hX3ByaXYtPmZpbHRlciA9IHNoZG1hX2NoYW5fZmlsdGVyOworCWRtYV9wcml2LT5lbmFibGUgPSBzaF9tb2JpbGVfc2RoaV9lbmFibGVfZG1hOwogCi0JbW1jX2RhdGEtPmRtYSA9IGRtYV9wcml2OworCW1tY19kYXRhLT5hbGlnbm1lbnRfc2hpZnQgPSAxOyAvKiAyLWJ5dGUgYWxpZ25tZW50ICovCiAKIAkvKgogCSAqIEFsbCBTREhJIGJsb2NrcyBzdXBwb3J0IDItYnl0ZSBhbmQgbGFyZ2VyIGJsb2NrIHNpemVzIGluIDQtYml0CkBAIC0yNTgsMzMgKzI5MSwxOCBAQAogCSAqLwogCW1tY19kYXRhLT5mbGFncyB8PSBUTUlPX01NQ19TRElPX1NUQVRVU19RVUlSSzsKIAotCS8qCi0JICogQWxsIFNESEkgaGF2ZSBETUEgY29udHJvbCByZWdpc3RlcgotCSAqLwotCW1tY19kYXRhLT5mbGFncyB8PSBUTUlPX01NQ19IQVZFX0NUTF9ETUFfUkVHOwotCiAJaWYgKG9mX2lkICYmIG9mX2lkLT5kYXRhKSB7CiAJCWNvbnN0IHN0cnVjdCBzaF9tb2JpbGVfc2RoaV9vZl9kYXRhICpvZl9kYXRhID0gb2ZfaWQtPmRhdGE7CiAJCW1tY19kYXRhLT5mbGFncyB8PSBvZl9kYXRhLT50bWlvX2ZsYWdzOwogCQltbWNfZGF0YS0+Y2FwYWJpbGl0aWVzIHw9IG9mX2RhdGEtPmNhcGFiaWxpdGllczsKIAkJbW1jX2RhdGEtPmNhcGFiaWxpdGllczIgfD0gb2ZfZGF0YS0+Y2FwYWJpbGl0aWVzMjsKLQkJZG1hX3ByaXYtPmRtYV9yeF9vZmZzZXQgPSBvZl9kYXRhLT5kbWFfcnhfb2Zmc2V0OworCQltbWNfZGF0YS0+ZG1hX3J4X29mZnNldCA9IG9mX2RhdGEtPmRtYV9yeF9vZmZzZXQ7CisJCWRtYV9wcml2LT5kbWFfYnVzd2lkdGggPSBvZl9kYXRhLT5kbWFfYnVzd2lkdGg7CiAJfQogCi0JLyogU0QgY29udHJvbCByZWdpc3RlciBzcGFjZSBzaXplIGlzIDB4MTAwLCAweDIwMCBmb3IgYnVzX3NoaWZ0PTEgKi8KLQltbWNfZGF0YS0+YnVzX3NoaWZ0ID0gcmVzb3VyY2Vfc2l6ZShyZXMpID4+IDk7Ci0KLQlyZXQgPSB0bWlvX21tY19ob3N0X3Byb2JlKCZob3N0LCBwZGV2LCBtbWNfZGF0YSk7CisJcmV0ID0gdG1pb19tbWNfaG9zdF9wcm9iZShob3N0LCBtbWNfZGF0YSk7CiAJaWYgKHJldCA8IDApCi0JCWdvdG8gZXByb2JlOwotCi0JLyoKLQkgKiBGSVhNRToKLQkgKiB0aGlzIFdvcmthcm91bmQgY2FuIGJlIG1vcmUgY2xldmVyIG1ldGhvZAotCSAqLwotCXZlciA9IHNkX2N0cmxfcmVhZDE2KGhvc3QsIENUTF9WRVJTSU9OKTsKLQlpZiAodmVyID09IDB4Q0IwRCkKLQkJc2RfY3RybF93cml0ZTE2KGhvc3QsIEVYVF9BQ0MsIDEpOworCQlnb3RvIGVmcmVlOwogCiAJLyoKIAkgKiBBbGxvdyBvbmUgb3IgbW9yZSBzcGVjaWZpYyAobmFtZWQpIElTUnMgb3IKQEAgLTM1MSwxMCArMzY5LDkgQEAKIAogZWlycToKIAl0bWlvX21tY19ob3N0X3JlbW92ZShob3N0KTsKK2VmcmVlOgorCXRtaW9fbW1jX2hvc3RfZnJlZShob3N0KTsKIGVwcm9iZToKLWVjbGtnZXQ6Ci0JaWYgKHAgJiYgcC0+Y2xlYW51cCkKLQkJcC0+Y2xlYW51cChwZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNjIsMTMgKzM3OSw5IEBACiB7CiAJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7Ci0Jc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8gKnAgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCXRtaW9fbW1jX2hvc3RfcmVtb3ZlKGhvc3QpOwogCi0JaWYgKHAgJiYgcC0+Y2xlYW51cCkKLQkJcC0+Y2xlYW51cChwZGV2KTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3N1bnhpLW1tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9zdW54aS1tbWMuYwppbmRleCAxNWNiOGI3Li42YWYwYTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3N1bnhpLW1tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc3VueGktbW1jLmMKQEAgLTI1Miw3ICsyNTIsNyBAQAogCXVuc2lnbmVkIGxvbmcgZXhwaXJlID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjUwKTsKIAl1MzIgcnZhbDsKIAotCW1tY193cml0ZWwoaG9zdCwgUkVHX0NNRFIsIFNEWENfSEFSRFdBUkVfUkVTRVQpOworCW1tY193cml0ZWwoaG9zdCwgUkVHX0dDVFJMLCBTRFhDX0hBUkRXQVJFX1JFU0VUKTsKIAlkbyB7CiAJCXJ2YWwgPSBtbWNfcmVhZGwoaG9zdCwgUkVHX0dDVFJMKTsKIAl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBleHBpcmUpICYmIChydmFsICYgU0RYQ19IQVJEV0FSRV9SRVNFVCkpOwpAQCAtMzEwLDcgKzMxMCw5IEBACiAJfQogCiAJcGRlc1swXS5jb25maWcgfD0gU0RYQ19JRE1BQ19ERVMwX0ZEOwotCXBkZXNbaSAtIDFdLmNvbmZpZyA9IFNEWENfSURNQUNfREVTMF9PV04gfCBTRFhDX0lETUFDX0RFUzBfTEQ7CisJcGRlc1tpIC0gMV0uY29uZmlnIHw9IFNEWENfSURNQUNfREVTMF9MRCB8IFNEWENfSURNQUNfREVTMF9FUjsKKwlwZGVzW2kgLSAxXS5jb25maWcgJj0gflNEWENfSURNQUNfREVTMF9ESUM7CisJcGRlc1tpIC0gMV0uYnVmX2FkZHJfcHRyMiA9IDA7CiAKIAkvKgogCSAqIEF2b2lkIHRoZSBpby1zdG9yZSBzdGFydGluZyB0aGUgaWRtYWMgaGl0dGluZyBpby1tZW0gYmVmb3JlIHRoZQpAQCAtNTcwLDYgKzU3MiwxNSBAQAogCX0KIAogCWRldl9lcnIobW1jX2Rldihob3N0LT5tbWMpLCAiZGF0YSBlcnJvciwgc2VuZGluZyBzdG9wIGNvbW1hbmRcbiIpOworCisJLyoKKwkgKiBXZSB3aWxsIG5ldmVyIGhhdmUgbW9yZSB0aGFuIG9uZSBvdXRzdGFuZGluZyByZXF1ZXN0LAorCSAqIGFuZCB3ZSBkbyBub3QgY29tcGxldGUgdGhlIHJlcXVlc3QgdW50aWwgYWZ0ZXIKKwkgKiB3ZSd2ZSBjbGVhcmVkIGhvc3QtPm1hbnVhbF9zdG9wX21ycSBzbyB3ZSBkbyBub3QgbmVlZCB0bworCSAqIHNwaW4gbG9jayB0aGlzIGZ1bmN0aW9uLgorCSAqIEFkZGl0aW9uYWxseSB3ZSBoYXZlIHdhaXQgc3RhdGVzIHdpdGhpbiB0aGlzIGZ1bmN0aW9uCisJICogc28gaGF2aW5nIGl0IGluIGEgbG9jayBpcyBhIHZlcnkgYmFkIGlkZWEuCisJICovCiAJc3VueGlfbW1jX3NlbmRfbWFudWFsX3N0b3AoaG9zdCwgbXJxKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5sb2NrLCBpZmxhZ3MpOwpAQCAtNjE2LDcgKzYyNyw3IEBACiBzdGF0aWMgaW50IHN1bnhpX21tY19jbGtfc2V0X3JhdGUoc3RydWN0IHN1bnhpX21tY19ob3N0ICpob3N0LAogCQkJCSAgc3RydWN0IG1tY19pb3MgKmlvcykKIHsKLQl1MzIgcmF0ZSwgb2Nsa19kbHksIHJ2YWwsIHNjbGtfZGx5LCBzcmNfY2xrOworCXUzMiByYXRlLCBvY2xrX2RseSwgcnZhbCwgc2Nsa19kbHk7CiAJaW50IHJldDsKIAogCXJhdGUgPSBjbGtfcm91bmRfcmF0ZShob3N0LT5jbGtfbW1jLCBpb3MtPmNsb2NrKTsKQEAgLTY2MSwxNCArNjcyLDYgQEAKIAkJc2Nsa19kbHkgPSA0OwogCX0KIAotCXNyY19jbGsgPSBjbGtfZ2V0X3JhdGUoY2xrX2dldF9wYXJlbnQoaG9zdC0+Y2xrX21tYykpOwotCWlmIChzcmNfY2xrID49IDMwMDAwMDAwMCAmJiBzcmNfY2xrIDw9IDQwMDAwMDAwMCkgewotCQlpZiAob2Nsa19kbHkpCi0JCQlvY2xrX2RseS0tOwotCQlpZiAoc2Nsa19kbHkpCi0JCQlzY2xrX2RseS0tOwotCX0KLQogCWNsa19zdW54aV9tbWNfcGhhc2VfY29udHJvbChob3N0LT5jbGtfbW1jLCBzY2xrX2RseSwgb2Nsa19kbHkpOwogCiAJcmV0dXJuIHN1bnhpX21tY19vY2xrX29ub2ZmKGhvc3QsIDEpOwpAQCAtNzY2LDYgKzc2OSw3IEBACiAJdW5zaWduZWQgbG9uZyBpZmxhZ3M7CiAJdTMyIGltYXNrID0gU0RYQ19JTlRFUlJVUFRfRVJST1JfQklUOwogCXUzMiBjbWRfdmFsID0gU0RYQ19TVEFSVCB8IChjbWQtPm9wY29kZSAmIDB4M2YpOworCWJvb2wgd2FpdF9kbWEgPSBob3N0LT53YWl0X2RtYTsKIAlpbnQgcmV0OwogCiAJLyogQ2hlY2sgZm9yIHNldF9pb3MgZXJyb3JzIChzaG91bGQgbmV2ZXIgaGFwcGVuKSAqLwpAQCAtODE2LDcgKzgyMCw3IEBACiAJCQlpZiAoY21kLT5kYXRhLT5mbGFncyAmIE1NQ19EQVRBX1dSSVRFKQogCQkJCWNtZF92YWwgfD0gU0RYQ19XUklURTsKIAkJCWVsc2UKLQkJCQlob3N0LT53YWl0X2RtYSA9IHRydWU7CisJCQkJd2FpdF9kbWEgPSB0cnVlOwogCQl9IGVsc2UgewogCQkJaW1hc2sgfD0gU0RYQ19DT01NQU5EX0RPTkU7CiAJCX0KQEAgLTg1MCw2ICs4NTQsNyBAQAogCX0KIAogCWhvc3QtPm1ycSA9IG1ycTsKKwlob3N0LT53YWl0X2RtYSA9IHdhaXRfZG1hOwogCW1tY193cml0ZWwoaG9zdCwgUkVHX0lNQVNLLCBob3N0LT5zZGlvX2ltYXNrIHwgaW1hc2spOwogCW1tY193cml0ZWwoaG9zdCwgUkVHX0NBUkcsIGNtZC0+YXJnKTsKIAltbWNfd3JpdGVsKGhvc3QsIFJFR19DTURSLCBjbWRfdmFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYwppbmRleCAyY2EwYWZhLi5mNzQ2ZGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5jCkBAIC04OCwxNCArODgsMTkgQEAKIAlpZiAoIXJlcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBTRCBjb250cm9sIHJlZ2lzdGVyIHNwYWNlIHNpemUgaXMgMHgyMDAsIDB4NDAwIGZvciBidXNfc2hpZnQ9MSAqLwotCXBkYXRhLT5idXNfc2hpZnQgPSByZXNvdXJjZV9zaXplKHJlcykgPj4gMTA7CiAJcGRhdGEtPmZsYWdzIHw9IFRNSU9fTU1DX0hBVkVfSElHSF9SRUc7CiAKLQlyZXQgPSB0bWlvX21tY19ob3N0X3Byb2JlKCZob3N0LCBwZGV2LCBwZGF0YSk7Ci0JaWYgKHJldCkKKwlob3N0ID0gdG1pb19tbWNfaG9zdF9hbGxvYyhwZGV2KTsKKwlpZiAoIWhvc3QpCiAJCWdvdG8gY2VsbF9kaXNhYmxlOwogCisJLyogU0QgY29udHJvbCByZWdpc3RlciBzcGFjZSBzaXplIGlzIDB4MjAwLCAweDQwMCBmb3IgYnVzX3NoaWZ0PTEgKi8KKwlob3N0LT5idXNfc2hpZnQgPSByZXNvdXJjZV9zaXplKHJlcykgPj4gMTA7CisKKwlyZXQgPSB0bWlvX21tY19ob3N0X3Byb2JlKGhvc3QsIHBkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIGhvc3RfZnJlZTsKKwogCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgdG1pb19tbWNfaXJxLCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSwgaG9zdCk7CiAJaWYgKHJldCkKQEAgLTEwOCw2ICsxMTMsOCBAQAogCiBob3N0X3JlbW92ZToKIAl0bWlvX21tY19ob3N0X3JlbW92ZShob3N0KTsKK2hvc3RfZnJlZToKKwl0bWlvX21tY19ob3N0X2ZyZWUoaG9zdCk7CiBjZWxsX2Rpc2FibGU6CiAJaWYgKGNlbGwtPmRpc2FibGUpCiAJCWNlbGwtPmRpc2FibGUocGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmggYi9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmgKaW5kZXggYTM0ZWNiZS4uZmMzODA1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuaApAQCAtMTYsNiArMTYsNyBAQAogI2lmbmRlZiBUTUlPX01NQ19ICiAjZGVmaW5lIFRNSU9fTU1DX0gKIAorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvdG1pby5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC0zOSw2ICs0MCwxNyBAQAogI2RlZmluZSBUTUlPX01BU0tfSVJRICAgICAoVE1JT19NQVNLX1JFQURPUCB8IFRNSU9fTUFTS19XUklURU9QIHwgVE1JT19NQVNLX0NNRCkKIAogc3RydWN0IHRtaW9fbW1jX2RhdGE7CitzdHJ1Y3QgdG1pb19tbWNfaG9zdDsKKworc3RydWN0IHRtaW9fbW1jX2RtYSB7CisJdm9pZCAqY2hhbl9wcml2X3R4OworCXZvaWQgKmNoYW5fcHJpdl9yeDsKKwlpbnQgc2xhdmVfaWRfdHg7CisJaW50IHNsYXZlX2lkX3J4OworCWVudW0gZG1hX3NsYXZlX2J1c3dpZHRoIGRtYV9idXN3aWR0aDsKKwlib29sICgqZmlsdGVyKShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKmFyZyk7CisJdm9pZCAoKmVuYWJsZSkoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QsIGJvb2wgZW5hYmxlKTsKK307CiAKIHN0cnVjdCB0bWlvX21tY19ob3N0IHsKIAl2b2lkIF9faW9tZW0gKmN0bDsKQEAgLTU2LDkgKzY4LDExIEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0ICAgICAgKnNnX29yaWc7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgc2dfbGVuOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIHNnX29mZjsKKwl1bnNpZ25lZCBsb25nCQlidXNfc2hpZnQ7CiAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXN0cnVjdCB0bWlvX21tY19kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgdG1pb19tbWNfZG1hCSpkbWE7CiAKIAkvKiBETUEgc3VwcG9ydCAqLwogCWJvb2wJCQlmb3JjZV9waW87CkBAIC04MywxMCArOTcsMTcgQEAKIAlzdHJ1Y3QgbXV0ZXgJCWlvc19sb2NrOwkvKiBwcm90ZWN0IHNldF9pb3MoKSBjb250ZXh0ICovCiAJYm9vbAkJCW5hdGl2ZV9ob3RwbHVnOwogCWJvb2wJCQlzZGlvX2lycV9lbmFibGVkOworCisJaW50ICgqd3JpdGUxNl9ob29rKShzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCwgaW50IGFkZHIpOworCWludCAoKmNsa19lbmFibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCAqZik7CisJdm9pZCAoKmNsa19kaXNhYmxlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKKwlpbnQgKCptdWx0aV9pb19xdWlyaykoc3RydWN0IG1tY19jYXJkICpjYXJkLAorCQkJICAgICAgdW5zaWduZWQgaW50IGRpcmVjdGlvbiwgaW50IGJsa19zaXplKTsKIH07CiAKLWludCB0bWlvX21tY19ob3N0X3Byb2JlKHN0cnVjdCB0bWlvX21tY19ob3N0ICoqaG9zdCwKLQkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCitzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqdG1pb19tbWNfaG9zdF9hbGxvYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK3ZvaWQgdG1pb19tbWNfaG9zdF9mcmVlKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0KTsKK2ludCB0bWlvX21tY19ob3N0X3Byb2JlKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LAogCQkJc3RydWN0IHRtaW9fbW1jX2RhdGEgKnBkYXRhKTsKIHZvaWQgdG1pb19tbWNfaG9zdF9yZW1vdmUoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QpOwogdm9pZCB0bWlvX21tY19kb19kYXRhX2lycShzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCk7CkBAIC0xNTEsMTkgKzE3MiwxOSBAQAogCiBzdGF0aWMgaW5saW5lIHUxNiBzZF9jdHJsX3JlYWQxNihzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCwgaW50IGFkZHIpCiB7Ci0JcmV0dXJuIHJlYWR3KGhvc3QtPmN0bCArIChhZGRyIDw8IGhvc3QtPnBkYXRhLT5idXNfc2hpZnQpKTsKKwlyZXR1cm4gcmVhZHcoaG9zdC0+Y3RsICsgKGFkZHIgPDwgaG9zdC0+YnVzX3NoaWZ0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZF9jdHJsX3JlYWQxNl9yZXAoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QsIGludCBhZGRyLAogCQl1MTYgKmJ1ZiwgaW50IGNvdW50KQogewotCXJlYWRzdyhob3N0LT5jdGwgKyAoYWRkciA8PCBob3N0LT5wZGF0YS0+YnVzX3NoaWZ0KSwgYnVmLCBjb3VudCk7CisJcmVhZHN3KGhvc3QtPmN0bCArIChhZGRyIDw8IGhvc3QtPmJ1c19zaGlmdCksIGJ1ZiwgY291bnQpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBzZF9jdHJsX3JlYWQzMihzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCwgaW50IGFkZHIpCiB7Ci0JcmV0dXJuIHJlYWR3KGhvc3QtPmN0bCArIChhZGRyIDw8IGhvc3QtPnBkYXRhLT5idXNfc2hpZnQpKSB8Ci0JICAgICAgIHJlYWR3KGhvc3QtPmN0bCArICgoYWRkciArIDIpIDw8IGhvc3QtPnBkYXRhLT5idXNfc2hpZnQpKSA8PCAxNjsKKwlyZXR1cm4gcmVhZHcoaG9zdC0+Y3RsICsgKGFkZHIgPDwgaG9zdC0+YnVzX3NoaWZ0KSkgfAorCSAgICAgICByZWFkdyhob3N0LT5jdGwgKyAoKGFkZHIgKyAyKSA8PCBob3N0LT5idXNfc2hpZnQpKSA8PCAxNjsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNkX2N0cmxfd3JpdGUxNihzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCwgaW50IGFkZHIsIHUxNiB2YWwpCkBAIC0xNzEsMjEgKzE5MiwyMSBAQAogCS8qIElmIHRoZXJlIGlzIGEgaG9vayBhbmQgaXQgcmV0dXJucyBub24temVybyB0aGVuIHRoZXJlCiAJICogaXMgYW4gZXJyb3IgYW5kIHRoZSB3cml0ZSBzaG91bGQgYmUgc2tpcHBlZAogCSAqLwotCWlmIChob3N0LT5wZGF0YS0+d3JpdGUxNl9ob29rICYmIGhvc3QtPnBkYXRhLT53cml0ZTE2X2hvb2soaG9zdCwgYWRkcikpCisJaWYgKGhvc3QtPndyaXRlMTZfaG9vayAmJiBob3N0LT53cml0ZTE2X2hvb2soaG9zdCwgYWRkcikpCiAJCXJldHVybjsKLQl3cml0ZXcodmFsLCBob3N0LT5jdGwgKyAoYWRkciA8PCBob3N0LT5wZGF0YS0+YnVzX3NoaWZ0KSk7CisJd3JpdGV3KHZhbCwgaG9zdC0+Y3RsICsgKGFkZHIgPDwgaG9zdC0+YnVzX3NoaWZ0KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZF9jdHJsX3dyaXRlMTZfcmVwKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LCBpbnQgYWRkciwKIAkJdTE2ICpidWYsIGludCBjb3VudCkKIHsKLQl3cml0ZXN3KGhvc3QtPmN0bCArIChhZGRyIDw8IGhvc3QtPnBkYXRhLT5idXNfc2hpZnQpLCBidWYsIGNvdW50KTsKKwl3cml0ZXN3KGhvc3QtPmN0bCArIChhZGRyIDw8IGhvc3QtPmJ1c19zaGlmdCksIGJ1ZiwgY291bnQpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2RfY3RybF93cml0ZTMyKHN0cnVjdCB0bWlvX21tY19ob3N0ICpob3N0LCBpbnQgYWRkciwgdTMyIHZhbCkKIHsKLQl3cml0ZXcodmFsLCBob3N0LT5jdGwgKyAoYWRkciA8PCBob3N0LT5wZGF0YS0+YnVzX3NoaWZ0KSk7Ci0Jd3JpdGV3KHZhbCA+PiAxNiwgaG9zdC0+Y3RsICsgKChhZGRyICsgMikgPDwgaG9zdC0+cGRhdGEtPmJ1c19zaGlmdCkpOworCXdyaXRldyh2YWwsIGhvc3QtPmN0bCArIChhZGRyIDw8IGhvc3QtPmJ1c19zaGlmdCkpOworCXdyaXRldyh2YWwgPj4gMTYsIGhvc3QtPmN0bCArICgoYWRkciArIDIpIDw8IGhvc3QtPmJ1c19zaGlmdCkpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWNfZG1hLmMgYi9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jX2RtYS5jCmluZGV4IDdkMDc3MzguLjMzMWJiNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWNfZG1hLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tY19kbWEuYwpAQCAtMjgsOCArMjgsOCBAQAogCWlmICghaG9zdC0+Y2hhbl90eCB8fCAhaG9zdC0+Y2hhbl9yeCkKIAkJcmV0dXJuOwogCi0JaWYgKGhvc3QtPnBkYXRhLT5mbGFncyAmIFRNSU9fTU1DX0hBVkVfQ1RMX0RNQV9SRUcpCi0JCXNkX2N0cmxfd3JpdGUxNihob3N0LCBDVExfRE1BX0VOQUJMRSwgZW5hYmxlID8gMiA6IDApOworCWlmIChob3N0LT5kbWEtPmVuYWJsZSkKKwkJaG9zdC0+ZG1hLT5lbmFibGUoaG9zdCwgZW5hYmxlKTsKIH0KIAogdm9pZCB0bWlvX21tY19hYm9ydF9kbWEoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QpCkBAIC00OSwxMSArNDksMTAgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaG9zdC0+c2dfcHRyLCAqc2dfdG1wOwogCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYyA9IE5VTEw7CiAJc3RydWN0IGRtYV9jaGFuICpjaGFuID0gaG9zdC0+Y2hhbl9yeDsKLQlzdHJ1Y3QgdG1pb19tbWNfZGF0YSAqcGRhdGEgPSBob3N0LT5wZGF0YTsKIAlkbWFfY29va2llX3QgY29va2llOwogCWludCByZXQsIGk7CiAJYm9vbCBhbGlnbmVkID0gdHJ1ZSwgbXVsdGlwbGUgPSB0cnVlOwotCXVuc2lnbmVkIGludCBhbGlnbiA9ICgxIDw8IHBkYXRhLT5kbWEtPmFsaWdubWVudF9zaGlmdCkgLSAxOworCXVuc2lnbmVkIGludCBhbGlnbiA9ICgxIDw8IGhvc3QtPnBkYXRhLT5hbGlnbm1lbnRfc2hpZnQpIC0gMTsKIAogCWZvcl9lYWNoX3NnKHNnLCBzZ190bXAsIGhvc3QtPnNnX2xlbiwgaSkgewogCQlpZiAoc2dfdG1wLT5vZmZzZXQgJiBhbGlnbikKQEAgLTEyNiwxMSArMTI1LDEwIEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IGhvc3QtPnNnX3B0ciwgKnNnX3RtcDsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2MgPSBOVUxMOwogCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IGhvc3QtPmNoYW5fdHg7Ci0Jc3RydWN0IHRtaW9fbW1jX2RhdGEgKnBkYXRhID0gaG9zdC0+cGRhdGE7CiAJZG1hX2Nvb2tpZV90IGNvb2tpZTsKIAlpbnQgcmV0LCBpOwogCWJvb2wgYWxpZ25lZCA9IHRydWUsIG11bHRpcGxlID0gdHJ1ZTsKLQl1bnNpZ25lZCBpbnQgYWxpZ24gPSAoMSA8PCBwZGF0YS0+ZG1hLT5hbGlnbm1lbnRfc2hpZnQpIC0gMTsKKwl1bnNpZ25lZCBpbnQgYWxpZ24gPSAoMSA8PCBob3N0LT5wZGF0YS0+YWxpZ25tZW50X3NoaWZ0KSAtIDE7CiAKIAlmb3JfZWFjaF9zZyhzZywgc2dfdG1wLCBob3N0LT5zZ19sZW4sIGkpIHsKIAkJaWYgKHNnX3RtcC0+b2Zmc2V0ICYgYWxpZ24pCkBAIC0yNjIsOCArMjYwLDggQEAKIHZvaWQgdG1pb19tbWNfcmVxdWVzdF9kbWEoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCB0bWlvX21tY19kYXRhICpwZGF0YSkKIHsKIAkvKiBXZSBjYW4gb25seSBlaXRoZXIgdXNlIERNQSBmb3IgYm90aCBUeCBhbmQgUnggb3Igbm90IHVzZSBpdCBhdCBhbGwgKi8KLQlpZiAoIXBkYXRhLT5kbWEgfHwgKCFob3N0LT5wZGV2LT5kZXYub2Zfbm9kZSAmJgotCQkoIXBkYXRhLT5kbWEtPmNoYW5fcHJpdl90eCB8fCAhcGRhdGEtPmRtYS0+Y2hhbl9wcml2X3J4KSkpCisJaWYgKCFob3N0LT5kbWEgfHwgKCFob3N0LT5wZGV2LT5kZXYub2Zfbm9kZSAmJgorCQkoIWhvc3QtPmRtYS0+Y2hhbl9wcml2X3R4IHx8ICFob3N0LT5kbWEtPmNoYW5fcHJpdl9yeCkpKQogCQlyZXR1cm47CiAKIAlpZiAoIWhvc3QtPmNoYW5fdHggJiYgIWhvc3QtPmNoYW5fcngpIHsKQEAgLTI4MCw3ICsyNzgsNyBAQAogCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOwogCiAJCWhvc3QtPmNoYW5fdHggPSBkbWFfcmVxdWVzdF9zbGF2ZV9jaGFubmVsX2NvbXBhdChtYXNrLAotCQkJCQlwZGF0YS0+ZG1hLT5maWx0ZXIsIHBkYXRhLT5kbWEtPmNoYW5fcHJpdl90eCwKKwkJCQkJaG9zdC0+ZG1hLT5maWx0ZXIsIGhvc3QtPmRtYS0+Y2hhbl9wcml2X3R4LAogCQkJCQkmaG9zdC0+cGRldi0+ZGV2LCAidHgiKTsKIAkJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiJXM6IFRYOiBnb3QgY2hhbm5lbCAlcFxuIiwgX19mdW5jX18sCiAJCQlob3N0LT5jaGFuX3R4KTsKQEAgLTI4OCwxOCArMjg2LDIwIEBACiAJCWlmICghaG9zdC0+Y2hhbl90eCkKIAkJCXJldHVybjsKIAotCQlpZiAocGRhdGEtPmRtYS0+Y2hhbl9wcml2X3R4KQotCQkJY2ZnLnNsYXZlX2lkID0gcGRhdGEtPmRtYS0+c2xhdmVfaWRfdHg7CisJCWlmIChob3N0LT5kbWEtPmNoYW5fcHJpdl90eCkKKwkJCWNmZy5zbGF2ZV9pZCA9IGhvc3QtPmRtYS0+c2xhdmVfaWRfdHg7CiAJCWNmZy5kaXJlY3Rpb24gPSBETUFfTUVNX1RPX0RFVjsKLQkJY2ZnLmRzdF9hZGRyID0gcmVzLT5zdGFydCArIChDVExfU0RfREFUQV9QT1JUIDw8IGhvc3QtPnBkYXRhLT5idXNfc2hpZnQpOwotCQljZmcuZHN0X2FkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUzsKKwkJY2ZnLmRzdF9hZGRyID0gcmVzLT5zdGFydCArIChDVExfU0RfREFUQV9QT1JUIDw8IGhvc3QtPmJ1c19zaGlmdCk7CisJCWNmZy5kc3RfYWRkcl93aWR0aCA9IGhvc3QtPmRtYS0+ZG1hX2J1c3dpZHRoOworCQlpZiAoIWNmZy5kc3RfYWRkcl93aWR0aCkKKwkJCWNmZy5kc3RfYWRkcl93aWR0aCA9IERNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTOwogCQljZmcuc3JjX2FkZHIgPSAwOwogCQlyZXQgPSBkbWFlbmdpbmVfc2xhdmVfY29uZmlnKGhvc3QtPmNoYW5fdHgsICZjZmcpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZWNmZ3R4OwogCiAJCWhvc3QtPmNoYW5fcnggPSBkbWFfcmVxdWVzdF9zbGF2ZV9jaGFubmVsX2NvbXBhdChtYXNrLAotCQkJCQlwZGF0YS0+ZG1hLT5maWx0ZXIsIHBkYXRhLT5kbWEtPmNoYW5fcHJpdl9yeCwKKwkJCQkJaG9zdC0+ZG1hLT5maWx0ZXIsIGhvc3QtPmRtYS0+Y2hhbl9wcml2X3J4LAogCQkJCQkmaG9zdC0+cGRldi0+ZGV2LCAicngiKTsKIAkJZGV2X2RiZygmaG9zdC0+cGRldi0+ZGV2LCAiJXM6IFJYOiBnb3QgY2hhbm5lbCAlcFxuIiwgX19mdW5jX18sCiAJCQlob3N0LT5jaGFuX3J4KTsKQEAgLTMwNywxMSArMzA3LDEzIEBACiAJCWlmICghaG9zdC0+Y2hhbl9yeCkKIAkJCWdvdG8gZXJlcXJ4OwogCi0JCWlmIChwZGF0YS0+ZG1hLT5jaGFuX3ByaXZfcngpCi0JCQljZmcuc2xhdmVfaWQgPSBwZGF0YS0+ZG1hLT5zbGF2ZV9pZF9yeDsKKwkJaWYgKGhvc3QtPmRtYS0+Y2hhbl9wcml2X3J4KQorCQkJY2ZnLnNsYXZlX2lkID0gaG9zdC0+ZG1hLT5zbGF2ZV9pZF9yeDsKIAkJY2ZnLmRpcmVjdGlvbiA9IERNQV9ERVZfVE9fTUVNOwotCQljZmcuc3JjX2FkZHIgPSBjZmcuZHN0X2FkZHIgKyBwZGF0YS0+ZG1hLT5kbWFfcnhfb2Zmc2V0OwotCQljZmcuc3JjX2FkZHJfd2lkdGggPSBETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUzsKKwkJY2ZnLnNyY19hZGRyID0gY2ZnLmRzdF9hZGRyICsgaG9zdC0+cGRhdGEtPmRtYV9yeF9vZmZzZXQ7CisJCWNmZy5zcmNfYWRkcl93aWR0aCA9IGhvc3QtPmRtYS0+ZG1hX2J1c3dpZHRoOworCQlpZiAoIWNmZy5zcmNfYWRkcl93aWR0aCkKKwkJCWNmZy5zcmNfYWRkcl93aWR0aCA9IERNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTOwogCQljZmcuZHN0X2FkZHIgPSAwOwogCQlyZXQgPSBkbWFlbmdpbmVfc2xhdmVfY29uZmlnKGhvc3QtPmNoYW5fcngsICZjZmcpOwogCQlpZiAocmV0IDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWNfcGlvLmMgYi9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jX3Bpby5jCmluZGV4IDI1MGJmOGMuLmEzMWMzNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWNfcGlvLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tY19waW8uYwpAQCAtODM1LDEzICs4MzUsMTIgQEAKIHN0YXRpYyBpbnQgdG1pb19tbWNfY2xrX3VwZGF0ZShzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCkKIHsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IGhvc3QtPm1tYzsKLQlzdHJ1Y3QgdG1pb19tbWNfZGF0YSAqcGRhdGEgPSBob3N0LT5wZGF0YTsKIAlpbnQgcmV0OwogCi0JaWYgKCFwZGF0YS0+Y2xrX2VuYWJsZSkKKwlpZiAoIWhvc3QtPmNsa19lbmFibGUpCiAJCXJldHVybiAtRU5PVFNVUFA7CiAKLQlyZXQgPSBwZGF0YS0+Y2xrX2VuYWJsZShob3N0LT5wZGV2LCAmbW1jLT5mX21heCk7CisJcmV0ID0gaG9zdC0+Y2xrX2VuYWJsZShob3N0LT5wZGV2LCAmbW1jLT5mX21heCk7CiAJaWYgKCFyZXQpCiAJCW1tYy0+Zl9taW4gPSBtbWMtPmZfbWF4IC8gNTEyOwogCkBAIC0xMDA1LDEwICsxMDA0LDkgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLCBpbnQgYmxrX3NpemUpCiB7CiAJc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihjYXJkLT5ob3N0KTsKLQlzdHJ1Y3QgdG1pb19tbWNfZGF0YSAqcGRhdGEgPSBob3N0LT5wZGF0YTsKIAotCWlmIChwZGF0YS0+bXVsdGlfaW9fcXVpcmspCi0JCXJldHVybiBwZGF0YS0+bXVsdGlfaW9fcXVpcmsoY2FyZCwgZGlyZWN0aW9uLCBibGtfc2l6ZSk7CisJaWYgKGhvc3QtPm11bHRpX2lvX3F1aXJrKQorCQlyZXR1cm4gaG9zdC0+bXVsdGlfaW9fcXVpcmsoY2FyZCwgZGlyZWN0aW9uLCBibGtfc2l6ZSk7CiAKIAlyZXR1cm4gYmxrX3NpemU7CiB9CkBAIC0xMDU0LDEyICsxMDUyLDM3IEBACiAJCXBkYXRhLT5mbGFncyB8PSBUTUlPX01NQ19XUlBST1RFQ1RfRElTQUJMRTsKIH0KIAotaW50IHRtaW9fbW1jX2hvc3RfcHJvYmUoc3RydWN0IHRtaW9fbW1jX2hvc3QgKipob3N0LAotCQkJCSAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJCQkgIHN0cnVjdCB0bWlvX21tY19kYXRhICpwZGF0YSkKK3N0cnVjdCB0bWlvX21tY19ob3N0KgordG1pb19tbWNfaG9zdF9hbGxvYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCB0bWlvX21tY19ob3N0ICpfaG9zdDsKKwlzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdDsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKKworCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgdG1pb19tbWNfaG9zdCksICZwZGV2LT5kZXYpOworCWlmICghbW1jKQorCQlyZXR1cm4gTlVMTDsKKworCWhvc3QgPSBtbWNfcHJpdihtbWMpOworCWhvc3QtPm1tYyA9IG1tYzsKKwlob3N0LT5wZGV2ID0gcGRldjsKKworCXJldHVybiBob3N0OworfQorRVhQT1JUX1NZTUJPTCh0bWlvX21tY19ob3N0X2FsbG9jKTsKKwordm9pZCB0bWlvX21tY19ob3N0X2ZyZWUoc3RydWN0IHRtaW9fbW1jX2hvc3QgKmhvc3QpCit7CisJbW1jX2ZyZWVfaG9zdChob3N0LT5tbWMpOworCisJaG9zdC0+bW1jID0gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0wodG1pb19tbWNfaG9zdF9mcmVlKTsKKworaW50IHRtaW9fbW1jX2hvc3RfcHJvYmUoc3RydWN0IHRtaW9fbW1jX2hvc3QgKl9ob3N0LAorCQkJc3RydWN0IHRtaW9fbW1jX2RhdGEgKnBkYXRhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBfaG9zdC0+cGRldjsKKwlzdHJ1Y3QgbW1jX2hvc3QgKm1tYyA9IF9ob3N0LT5tbWM7CiAJc3RydWN0IHJlc291cmNlICpyZXNfY3RsOwogCWludCByZXQ7CiAJdTMyIGlycV9tYXNrID0gVE1JT19NQVNLX0NNRDsKQEAgLTEwNjcsMjUgKzEwOTAsMTcgQEAKIAl0bWlvX21tY19vZl9wYXJzZShwZGV2LCBwZGF0YSk7CiAKIAlpZiAoIShwZGF0YS0+ZmxhZ3MgJiBUTUlPX01NQ19IQVNfSURMRV9XQUlUKSkKLQkJcGRhdGEtPndyaXRlMTZfaG9vayA9IE5VTEw7CisJCV9ob3N0LT53cml0ZTE2X2hvb2sgPSBOVUxMOwogCiAJcmVzX2N0bCA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaWYgKCFyZXNfY3RsKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZihzdHJ1Y3QgdG1pb19tbWNfaG9zdCksICZwZGV2LT5kZXYpOwotCWlmICghbW1jKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCXJldCA9IG1tY19vZl9wYXJzZShtbWMpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGhvc3RfZnJlZTsKIAotCXBkYXRhLT5kZXYgPSAmcGRldi0+ZGV2OwotCV9ob3N0ID0gbW1jX3ByaXYobW1jKTsKIAlfaG9zdC0+cGRhdGEgPSBwZGF0YTsKLQlfaG9zdC0+bW1jID0gbW1jOwotCV9ob3N0LT5wZGV2ID0gcGRldjsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtbWMpOwogCiAJX2hvc3QtPnNldF9wd3IgPSBwZGF0YS0+c2V0X3B3cjsKQEAgLTExOTIsMTIgKzEyMDcsOSBAQAogCQltbWNfZ3Bpb2RfcmVxdWVzdF9jZF9pcnEobW1jKTsKIAl9CiAKLQkqaG9zdCA9IF9ob3N0OwotCiAJcmV0dXJuIDA7CiAKIGhvc3RfZnJlZToKLQltbWNfZnJlZV9ob3N0KG1tYyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTIyMiw3ICsxMjM0LDYgQEAKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAKIAlpb3VubWFwKGhvc3QtPmN0bCk7Ci0JbW1jX2ZyZWVfaG9zdChtbWMpOwogfQogRVhQT1JUX1NZTUJPTCh0bWlvX21tY19ob3N0X3JlbW92ZSk7CiAKQEAgLTEyMzcsOCArMTI0OCw4IEBACiAJaWYgKGhvc3QtPmNsa19jYWNoZSkKIAkJdG1pb19tbWNfY2xrX3N0b3AoaG9zdCk7CiAKLQlpZiAoaG9zdC0+cGRhdGEtPmNsa19kaXNhYmxlKQotCQlob3N0LT5wZGF0YS0+Y2xrX2Rpc2FibGUoaG9zdC0+cGRldik7CisJaWYgKGhvc3QtPmNsa19kaXNhYmxlKQorCQlob3N0LT5jbGtfZGlzYWJsZShob3N0LT5wZGV2KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC90b3Noc2QuYyBiL2RyaXZlcnMvbW1jL2hvc3QvdG9zaHNkLmMKaW5kZXggNDY2NjI2Mi4uZTJjZGQ1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC90b3Noc2QuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3Rvc2hzZC5jCkBAIC0xNzYsNyArMTc2LDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKCFzZ19taXRlcl9uZXh0KHNnX21pdGVyKSkKLQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQlnb3RvIGRvbmU7CisKIAlidWYgPSBzZ19taXRlci0+YWRkcjsKIAogCS8qIEVuc3VyZSB3ZSBkb250IHJlYWQgbW9yZSB0aGFuIG9uZSBibG9jay4gVGhlIGNoaXAgd2lsbCBpbnRlcnJ1cHQgdXMKQEAgLTE5OCw2ICsxOTksNyBAQAogCXNnX21pdGVyLT5jb25zdW1lZCA9IGNvdW50OwogCXNnX21pdGVyX3N0b3Aoc2dfbWl0ZXIpOwogCitkb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTY5OSwxOCArNzAxLDcgQEAKIAkuZHJpdmVyLnBtID0gJnRvc2hzZF9wbV9vcHMsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCB0b3Noc2RfZHJ2X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdG9zaHNkX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0b3Noc2RfZHJ2X2V4aXQodm9pZCkKLXsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnRvc2hzZF9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdCh0b3Noc2RfZHJ2X2luaXQpOwotbW9kdWxlX2V4aXQodG9zaHNkX2Rydl9leGl0KTsKK21vZHVsZV9wY2lfZHJpdmVyKHRvc2hzZF9kcml2ZXIpOwogCiBNT0RVTEVfQVVUSE9SKCJPbmRyZWogWmFyeSwgUmljaGFyZCBCZXR0cyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJUb3NoaWJhIFBDSSBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgSW50ZXJmYWNlIGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC92dWIzMDAuYyBiL2RyaXZlcnMvbW1jL2hvc3QvdnViMzAwLmMKaW5kZXggNDI2MjI5Ni4uZmJhYmJiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC92dWIzMDAuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3Z1YjMwMC5jCkBAIC02NTksNyArNjU5LDcgQEAKIHN0YXRpYyB2b2lkIF9fZG9fcG9sbChzdHJ1Y3QgdnViMzAwX21tY19ob3N0ICp2dWIzMDApCiB7CiAJLyogY21kX211dGV4IGlzIGhlbGQgYnkgdnViMzAwX3BvbGx3b3JrX3RocmVhZCAqLwotCWxvbmcgY29tbXJldHZhbDsKKwl1bnNpZ25lZCBsb25nIGNvbW1yZXR2YWw7CiAJbW9kX3RpbWVyKCZ2dWIzMDAtPmluYWN0aXZpdHlfdGltZXIsIGppZmZpZXMgKyBIWik7CiAJaW5pdF9jb21wbGV0aW9uKCZ2dWIzMDAtPmlycXBvbGxfY29tcGxldGUpOwogCXNlbmRfaXJxcG9sbCh2dWIzMDApOwpAQCAtNjcxLDggKzY3MSw2IEBACiAJCXZ1YjMwMC0+dXNiX3RpbWVkX291dCA9IDE7CiAJCXVzYl9raWxsX3VyYih2dWIzMDAtPmNvbW1hbmRfb3V0X3VyYik7CiAJCXVzYl9raWxsX3VyYih2dWIzMDAtPmNvbW1hbmRfcmVzX3VyYik7Ci0JfSBlbHNlIGlmIChjb21tcmV0dmFsIDwgMCkgewotCQl2dWIzMDBfcXVldWVfcG9sbF93b3JrKHZ1YjMwMCwgMSk7CiAJfSBlbHNlIHsgLyogY29tbXJldHZhbCA+IDAgKi8KIAkJX192dWIzMDBfaXJxcG9sbF9yZXNwb25zZSh2dWIzMDApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9LY29uZmlnCmluZGV4IGQ2NjA3ZWUuLjg0NjczZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvS2NvbmZpZwpAQCAtMTk3LDYgKzE5Nyw3IEBACiAKIGNvbmZpZyBORVRQT0xMCiAJZGVmX2Jvb2wgTkVUQ09OU09MRQorCXNlbGVjdCBTUkNVCiAKIGNvbmZpZyBORVRfUE9MTF9DT05UUk9MTEVSCiAJZGVmX2Jvb2wgTkVUUE9MTApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jCmluZGV4IDZjOTlmZjAuLjk0NWY1MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMKQEAgLTc4LDYgKzc4LDkgQEAKIAogCXByaXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBjb20yMDAyMF9wcml2KSwKIAkJCSAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXByaXYpCisJCXJldHVybiAtRU5PTUVNOworCiAJY2kgPSAoc3RydWN0IGNvbTIwMDIwX3BjaV9jYXJkX2luZm8gKilpZC0+ZHJpdmVyX2RhdGE7CiAJcHJpdi0+Y2kgPSBjaTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCmluZGV4IDhiYWE4N2QuLmNmYzRhOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKQEAgLTQ2NywxMSArNDY3LDE0IEBACiAJCS8qIHNldCB0aGUgcGFydG5lciBzeW5jLiB0byBvbiBpZiB0aGUgcGFydG5lciBpcyBzeW5jLAogCQkgKiBhbmQgdGhlIHBvcnQgaXMgbWF0Y2hlZAogCQkgKi8KLQkJaWYgKChwb3J0LT5zbV92YXJzICYgQURfUE9SVF9NQVRDSEVEKQotCQkgICAgJiYgKGxhY3BkdS0+YWN0b3Jfc3RhdGUgJiBBRF9TVEFURV9TWU5DSFJPTklaQVRJT04pKQorCQlpZiAoKHBvcnQtPnNtX3ZhcnMgJiBBRF9QT1JUX01BVENIRUQpICYmCisJCSAgICAobGFjcGR1LT5hY3Rvcl9zdGF0ZSAmIEFEX1NUQVRFX1NZTkNIUk9OSVpBVElPTikpIHsKIAkJCXBhcnRuZXItPnBvcnRfc3RhdGUgfD0gQURfU1RBVEVfU1lOQ0hST05JWkFUSU9OOwotCQllbHNlCisJCQlwcl9kZWJ1ZygiJXMgcGFydG5lciBzeW5jPTFcbiIsIHBvcnQtPnNsYXZlLT5kZXYtPm5hbWUpOworCQl9IGVsc2UgewogCQkJcGFydG5lci0+cG9ydF9zdGF0ZSAmPSB+QURfU1RBVEVfU1lOQ0hST05JWkFUSU9OOworCQkJcHJfZGVidWcoIiVzIHBhcnRuZXIgc3luYz0wXG4iLCBwb3J0LT5zbGF2ZS0+ZGV2LT5uYW1lKTsKKwkJfQogCX0KIH0KIApAQCAtNzI2LDYgKzcyOSw4IEBACiAJbGFjcGR1LT5hY3Rvcl9wb3J0X3ByaW9yaXR5ID0gaHRvbnMocG9ydC0+YWN0b3JfcG9ydF9wcmlvcml0eSk7CiAJbGFjcGR1LT5hY3Rvcl9wb3J0ID0gaHRvbnMocG9ydC0+YWN0b3JfcG9ydF9udW1iZXIpOwogCWxhY3BkdS0+YWN0b3Jfc3RhdGUgPSBwb3J0LT5hY3Rvcl9vcGVyX3BvcnRfc3RhdGU7CisJcHJfZGVidWcoInVwZGF0ZSBsYWNwZHU6ICVzLCBhY3RvciBwb3J0IHN0YXRlICV4XG4iLAorCQkgcG9ydC0+c2xhdmUtPmRldi0+bmFtZSwgcG9ydC0+YWN0b3Jfb3Blcl9wb3J0X3N0YXRlKTsKIAogCS8qIGxhY3BkdS0+cmVzZXJ2ZWRfM18xICAgICAgICAgICAgICBpbml0aWFsaXplZAogCSAqIGxhY3BkdS0+dGx2X3R5cGVfcGFydG5lcl9pbmZvICAgICBpbml0aWFsaXplZApAQCAtODk4LDcgKzkwMyw5IEBACiAJCQlpZiAoKHBvcnQtPnNtX3ZhcnMgJiBBRF9QT1JUX1NFTEVDVEVEKSAmJgogCQkJICAgIChwb3J0LT5wYXJ0bmVyX29wZXIucG9ydF9zdGF0ZSAmIEFEX1NUQVRFX1NZTkNIUk9OSVpBVElPTikgJiYKIAkJCSAgICAhX19jaGVja19hZ2dfc2VsZWN0aW9uX3RpbWVyKHBvcnQpKSB7Ci0JCQkJcG9ydC0+c21fbXV4X3N0YXRlID0gQURfTVVYX0NPTExFQ1RJTkdfRElTVFJJQlVUSU5HOworCQkJCWlmIChwb3J0LT5hZ2dyZWdhdG9yLT5pc19hY3RpdmUpCisJCQkJCXBvcnQtPnNtX211eF9zdGF0ZSA9CisJCQkJCSAgICBBRF9NVVhfQ09MTEVDVElOR19ESVNUUklCVVRJTkc7CiAJCQl9IGVsc2UgaWYgKCEocG9ydC0+c21fdmFycyAmIEFEX1BPUlRfU0VMRUNURUQpIHx8CiAJCQkJICAgKHBvcnQtPnNtX3ZhcnMgJiBBRF9QT1JUX1NUQU5EQlkpKSB7CiAJCQkJLyogaWYgVU5TRUxFQ1RFRCBvciBTVEFOREJZICovCkBAIC05MTAsMTIgKzkxNywxNiBAQAogCQkJCSAqLwogCQkJCV9fc2V0X2FnZ19wb3J0c19yZWFkeShwb3J0LT5hZ2dyZWdhdG9yLCBfX2FnZ19wb3J0c19hcmVfcmVhZHkocG9ydC0+YWdncmVnYXRvcikpOwogCQkJCXBvcnQtPnNtX211eF9zdGF0ZSA9IEFEX01VWF9ERVRBQ0hFRDsKKwkJCX0gZWxzZSBpZiAocG9ydC0+YWdncmVnYXRvci0+aXNfYWN0aXZlKSB7CisJCQkJcG9ydC0+YWN0b3Jfb3Blcl9wb3J0X3N0YXRlIHw9CisJCQkJICAgIEFEX1NUQVRFX1NZTkNIUk9OSVpBVElPTjsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIEFEX01VWF9DT0xMRUNUSU5HX0RJU1RSSUJVVElORzoKIAkJCWlmICghKHBvcnQtPnNtX3ZhcnMgJiBBRF9QT1JUX1NFTEVDVEVEKSB8fAogCQkJICAgIChwb3J0LT5zbV92YXJzICYgQURfUE9SVF9TVEFOREJZKSB8fAotCQkJICAgICEocG9ydC0+cGFydG5lcl9vcGVyLnBvcnRfc3RhdGUgJiBBRF9TVEFURV9TWU5DSFJPTklaQVRJT04pKSB7CisJCQkgICAgIShwb3J0LT5wYXJ0bmVyX29wZXIucG9ydF9zdGF0ZSAmIEFEX1NUQVRFX1NZTkNIUk9OSVpBVElPTikgfHwKKwkJCSAgICAhKHBvcnQtPmFjdG9yX29wZXJfcG9ydF9zdGF0ZSAmIEFEX1NUQVRFX1NZTkNIUk9OSVpBVElPTikpIHsKIAkJCQlwb3J0LT5zbV9tdXhfc3RhdGUgPSBBRF9NVVhfQVRUQUNIRUQ7CiAJCQl9IGVsc2UgewogCQkJCS8qIGlmIHBvcnQgc3RhdGUgaGFzbid0IGNoYW5nZWQgbWFrZQpAQCAtOTM3LDggKzk0OCwxMCBAQAogCiAJLyogY2hlY2sgaWYgdGhlIHN0YXRlIG1hY2hpbmUgd2FzIGNoYW5nZWQgKi8KIAlpZiAocG9ydC0+c21fbXV4X3N0YXRlICE9IGxhc3Rfc3RhdGUpIHsKLQkJcHJfZGVidWcoIk11eCBNYWNoaW5lOiBQb3J0PSVkLCBMYXN0IFN0YXRlPSVkLCBDdXJyIFN0YXRlPSVkXG4iLAotCQkJIHBvcnQtPmFjdG9yX3BvcnRfbnVtYmVyLCBsYXN0X3N0YXRlLAorCQlwcl9kZWJ1ZygiTXV4IE1hY2hpbmU6IFBvcnQ9JWQgKCVzKSwgTGFzdCBTdGF0ZT0lZCwgQ3VyciBTdGF0ZT0lZFxuIiwKKwkJCSBwb3J0LT5hY3Rvcl9wb3J0X251bWJlciwKKwkJCSBwb3J0LT5zbGF2ZS0+ZGV2LT5uYW1lLAorCQkJIGxhc3Rfc3RhdGUsCiAJCQkgcG9ydC0+c21fbXV4X3N0YXRlKTsKIAkJc3dpdGNoIChwb3J0LT5zbV9tdXhfc3RhdGUpIHsKIAkJY2FzZSBBRF9NVVhfREVUQUNIRUQ6CkBAIC05NTMsNyArOTY2LDEyIEBACiAJCQlwb3J0LT5zbV9tdXhfdGltZXJfY291bnRlciA9IF9fYWRfdGltZXJfdG9fdGlja3MoQURfV0FJVF9XSElMRV9USU1FUiwgMCk7CiAJCQlicmVhazsKIAkJY2FzZSBBRF9NVVhfQVRUQUNIRUQ6Ci0JCQlwb3J0LT5hY3Rvcl9vcGVyX3BvcnRfc3RhdGUgfD0gQURfU1RBVEVfU1lOQ0hST05JWkFUSU9OOworCQkJaWYgKHBvcnQtPmFnZ3JlZ2F0b3ItPmlzX2FjdGl2ZSkKKwkJCQlwb3J0LT5hY3Rvcl9vcGVyX3BvcnRfc3RhdGUgfD0KKwkJCQkgICAgQURfU1RBVEVfU1lOQ0hST05JWkFUSU9OOworCQkJZWxzZQorCQkJCXBvcnQtPmFjdG9yX29wZXJfcG9ydF9zdGF0ZSAmPQorCQkJCSAgICB+QURfU1RBVEVfU1lOQ0hST05JWkFUSU9OOwogCQkJcG9ydC0+YWN0b3Jfb3Blcl9wb3J0X3N0YXRlICY9IH5BRF9TVEFURV9DT0xMRUNUSU5HOwogCQkJcG9ydC0+YWN0b3Jfb3Blcl9wb3J0X3N0YXRlICY9IH5BRF9TVEFURV9ESVNUUklCVVRJTkc7CiAJCQlhZF9kaXNhYmxlX2NvbGxlY3RpbmdfZGlzdHJpYnV0aW5nKHBvcnQsCkBAIC05NjMsNiArOTgxLDcgQEAKIAkJY2FzZSBBRF9NVVhfQ09MTEVDVElOR19ESVNUUklCVVRJTkc6CiAJCQlwb3J0LT5hY3Rvcl9vcGVyX3BvcnRfc3RhdGUgfD0gQURfU1RBVEVfQ09MTEVDVElORzsKIAkJCXBvcnQtPmFjdG9yX29wZXJfcG9ydF9zdGF0ZSB8PSBBRF9TVEFURV9ESVNUUklCVVRJTkc7CisJCQlwb3J0LT5hY3Rvcl9vcGVyX3BvcnRfc3RhdGUgfD0gQURfU1RBVEVfU1lOQ0hST05JWkFUSU9OOwogCQkJYWRfZW5hYmxlX2NvbGxlY3RpbmdfZGlzdHJpYnV0aW5nKHBvcnQsCiAJCQkJCQkJICB1cGRhdGVfc2xhdmVfYXJyKTsKIAkJCXBvcnQtPm50dCA9IHRydWU7CkBAIC0xMDQ0LDggKzEwNjMsMTAgQEAKIAogCS8qIGNoZWNrIGlmIHRoZSBTdGF0ZSBtYWNoaW5lIHdhcyBjaGFuZ2VkIG9yIG5ldyBsYWNwZHUgYXJyaXZlZCAqLwogCWlmICgocG9ydC0+c21fcnhfc3RhdGUgIT0gbGFzdF9zdGF0ZSkgfHwgKGxhY3BkdSkpIHsKLQkJcHJfZGVidWcoIlJ4IE1hY2hpbmU6IFBvcnQ9JWQsIExhc3QgU3RhdGU9JWQsIEN1cnIgU3RhdGU9JWRcbiIsCi0JCQkgcG9ydC0+YWN0b3JfcG9ydF9udW1iZXIsIGxhc3Rfc3RhdGUsCisJCXByX2RlYnVnKCJSeCBNYWNoaW5lOiBQb3J0PSVkICglcyksIExhc3QgU3RhdGU9JWQsIEN1cnIgU3RhdGU9JWRcbiIsCisJCQkgcG9ydC0+YWN0b3JfcG9ydF9udW1iZXIsCisJCQkgcG9ydC0+c2xhdmUtPmRldi0+bmFtZSwKKwkJCSBsYXN0X3N0YXRlLAogCQkJIHBvcnQtPnNtX3J4X3N0YXRlKTsKIAkJc3dpdGNoIChwb3J0LT5zbV9yeF9zdGF0ZSkgewogCQljYXNlIEFEX1JYX0lOSVRJQUxJWkU6CkBAIC0xMzk0LDYgKzE0MTUsOSBAQAogCiAJYWdncmVnYXRvciA9IF9fZ2V0X2ZpcnN0X2FnZyhwb3J0KTsKIAlhZF9hZ2dfc2VsZWN0aW9uX2xvZ2ljKGFnZ3JlZ2F0b3IsIHVwZGF0ZV9zbGF2ZV9hcnIpOworCisJaWYgKCFwb3J0LT5hZ2dyZWdhdG9yLT5pc19hY3RpdmUpCisJCXBvcnQtPmFjdG9yX29wZXJfcG9ydF9zdGF0ZSAmPSB+QURfU1RBVEVfU1lOQ0hST05JWkFUSU9OOwogfQogCiAvKiBEZWNpZGUgaWYgImFnZyIgaXMgYSBiZXR0ZXIgY2hvaWNlIGZvciB0aGUgbmV3IGFjdGl2ZSBhZ2dyZWdhdG9yIHRoYXQKQEAgLTIxOTUsOCArMjIxOSwxMCBAQAogCQlzd2l0Y2ggKGxhY3BkdS0+c3VidHlwZSkgewogCQljYXNlIEFEX1RZUEVfTEFDUERVOgogCQkJcmV0ID0gUlhfSEFORExFUl9DT05TVU1FRDsKLQkJCW5ldGRldl9kYmcoc2xhdmUtPmJvbmQtPmRldiwgIlJlY2VpdmVkIExBQ1BEVSBvbiBwb3J0ICVkXG4iLAotCQkJCSAgIHBvcnQtPmFjdG9yX3BvcnRfbnVtYmVyKTsKKwkJCW5ldGRldl9kYmcoc2xhdmUtPmJvbmQtPmRldiwKKwkJCQkgICAiUmVjZWl2ZWQgTEFDUERVIG9uIHBvcnQgJWQgc2xhdmUgJXNcbiIsCisJCQkJICAgcG9ydC0+YWN0b3JfcG9ydF9udW1iZXIsCisJCQkJICAgc2xhdmUtPmRldi0+bmFtZSk7CiAJCQkvKiBQcm90ZWN0IGFnYWluc3QgY29uY3VycmVudCBzdGF0ZSBtYWNoaW5lcyAqLwogCQkJc3Bpbl9sb2NrKCZzbGF2ZS0+Ym9uZC0+bW9kZV9sb2NrKTsKIAkJCWFkX3J4X21hY2hpbmUobGFjcGR1LCBwb3J0KTsKQEAgLTIyODgsNyArMjMxNCwxMCBAQAogCXBvcnQtPmFjdG9yX2FkbWluX3BvcnRfa2V5ICY9IH5BRF9EVVBMRVhfS0VZX01BU0tTOwogCXBvcnQtPmFjdG9yX29wZXJfcG9ydF9rZXkgPSBwb3J0LT5hY3Rvcl9hZG1pbl9wb3J0X2tleSB8PQogCQlfX2dldF9kdXBsZXgocG9ydCk7Ci0JbmV0ZGV2X2RiZyhzbGF2ZS0+Ym9uZC0+ZGV2LCAiUG9ydCAlZCBjaGFuZ2VkIGR1cGxleFxuIiwgcG9ydC0+YWN0b3JfcG9ydF9udW1iZXIpOworCW5ldGRldl9kYmcoc2xhdmUtPmJvbmQtPmRldiwgIlBvcnQgJWQgc2xhdmUgJXMgY2hhbmdlZCBkdXBsZXhcbiIsCisJCSAgIHBvcnQtPmFjdG9yX3BvcnRfbnVtYmVyLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKKwlpZiAocG9ydC0+YWN0b3Jfb3Blcl9wb3J0X2tleSAmIEFEX0RVUExFWF9LRVlfTUFTS1MpCisJCXBvcnQtPnNtX3ZhcnMgfD0gQURfUE9SVF9MQUNQX0VOQUJMRUQ7CiAJLyogdGhlcmUgaXMgbm8gbmVlZCB0byByZXNlbGVjdCBhIG5ldyBhZ2dyZWdhdG9yLCBqdXN0IHNpZ25hbCB0aGUKIAkgKiBzdGF0ZSBtYWNoaW5lcyB0byByZWluaXRpYWxpemUKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDBkY2ViYTEuLmI5NzljMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtNzcsNiArNzcsNyBAQAogI2luY2x1ZGUgPG5ldC9wa3Rfc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CiAjaW5jbHVkZSA8bmV0L2Zsb3dfa2V5cy5oPgorI2luY2x1ZGUgPG5ldC9zd2l0Y2hkZXYuaD4KICNpbmNsdWRlIDxuZXQvYm9uZGluZy5oPgogI2luY2x1ZGUgPG5ldC9ib25kXzNhZC5oPgogI2luY2x1ZGUgPG5ldC9ib25kX2FsYi5oPgpAQCAtMzM0LDcgKzMzNSw3IEBACiAgKgogICogUmV0dXJucyB6ZXJvIGlmIGNhcnJpZXIgc3RhdGUgZG9lcyBub3QgY2hhbmdlLCBub256ZXJvIGlmIGl0IGRvZXMuCiAgKi8KLXN0YXRpYyBpbnQgYm9uZF9zZXRfY2FycmllcihzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKK2ludCBib25kX3NldF9jYXJyaWVyKHN0cnVjdCBib25kaW5nICpib25kKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CiAJc3RydWN0IHNsYXZlICpzbGF2ZTsKQEAgLTc4OSw3ICs3OTAsNyBAQAogCQkJfQogCiAJCQluZXdfYWN0aXZlLT5kZWxheSA9IDA7Ci0JCQluZXdfYWN0aXZlLT5saW5rID0gQk9ORF9MSU5LX1VQOworCQkJYm9uZF9zZXRfc2xhdmVfbGlua19zdGF0ZShuZXdfYWN0aXZlLCBCT05EX0xJTktfVVApOwogCiAJCQlpZiAoQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV84MDIzQUQpCiAJCQkJYm9uZF8zYWRfaGFuZGxlX2xpbmtfY2hhbmdlKG5ld19hY3RpdmUsIEJPTkRfTElOS19VUCk7CkBAIC05NzksNyArOTgwLDExIEBACiAJbmV0ZGV2X2ZlYXR1cmVzX3QgbWFzazsKIAlzdHJ1Y3Qgc2xhdmUgKnNsYXZlOwogCi0JbWFzayA9IGZlYXR1cmVzOworCS8qIElmIGFueSBzbGF2ZSBoYXMgdGhlIG9mZmxvYWQgZmVhdHVyZSBmbGFnIHNldCwKKwkgKiBzZXQgdGhlIG9mZmxvYWQgZmxhZyBvbiB0aGUgYm9uZC4KKwkgKi8KKwltYXNrID0gZmVhdHVyZXMgfCBORVRJRl9GX0hXX1NXSVRDSF9PRkZMT0FEOworCiAJZmVhdHVyZXMgJj0gfk5FVElGX0ZfT05FX0ZPUl9BTEw7CiAJZmVhdHVyZXMgfD0gTkVUSUZfRl9BTExfRk9SX0FMTDsKIApAQCAtOTk4LDcgKzEwMDMsNyBAQAogCQkJCSBORVRJRl9GX0hJR0hETUEgfCBORVRJRl9GX0xSTykKIAogI2RlZmluZSBCT05EX0VOQ19GRUFUVVJFUwkoTkVUSUZfRl9BTExfQ1NVTSB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX1JYQ1NVTSB8XAotCQkJCSBORVRJRl9GX1RTTyB8IE5FVElGX0ZfR1NPX1VEUF9UVU5ORUwpCisJCQkJIE5FVElGX0ZfVFNPKQogCiBzdGF0aWMgdm9pZCBib25kX2NvbXB1dGVfZmVhdHVyZXMoc3RydWN0IGJvbmRpbmcgKmJvbmQpCiB7CkBAIC0xMDM0LDcgKzEwMzksNyBAQAogCiBkb25lOgogCWJvbmRfZGV2LT52bGFuX2ZlYXR1cmVzID0gdmxhbl9mZWF0dXJlczsKLQlib25kX2Rldi0+aHdfZW5jX2ZlYXR1cmVzID0gZW5jX2ZlYXR1cmVzOworCWJvbmRfZGV2LT5od19lbmNfZmVhdHVyZXMgPSBlbmNfZmVhdHVyZXMgfCBORVRJRl9GX0dTT19FTkNBUF9BTEw7CiAJYm9uZF9kZXYtPmhhcmRfaGVhZGVyX2xlbiA9IG1heF9oYXJkX2hlYWRlcl9sZW47CiAJYm9uZF9kZXYtPmdzb19tYXhfc2VncyA9IGdzb19tYXhfc2VnczsKIAluZXRpZl9zZXRfZ3NvX21heF9zaXplKGJvbmRfZGV2LCBnc29fbWF4X3NpemUpOwpAQCAtMTE3Niw2ICsxMTgxLDU2IEBACiAJa2ZyZWUoc2xhdmUpOwogfQogCitzdGF0aWMgdm9pZCBib25kX2ZpbGxfaWZib25kKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3QgaWZib25kICppbmZvKQoreworCWluZm8tPmJvbmRfbW9kZSA9IEJPTkRfTU9ERShib25kKTsKKwlpbmZvLT5taWltb24gPSBib25kLT5wYXJhbXMubWlpbW9uOworCWluZm8tPm51bV9zbGF2ZXMgPSBib25kLT5zbGF2ZV9jbnQ7Cit9CisKK3N0YXRpYyB2b2lkIGJvbmRfZmlsbF9pZnNsYXZlKHN0cnVjdCBzbGF2ZSAqc2xhdmUsIHN0cnVjdCBpZnNsYXZlICppbmZvKQoreworCXN0cmNweShpbmZvLT5zbGF2ZV9uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKKwlpbmZvLT5saW5rID0gc2xhdmUtPmxpbms7CisJaW5mby0+c3RhdGUgPSBib25kX3NsYXZlX3N0YXRlKHNsYXZlKTsKKwlpbmZvLT5saW5rX2ZhaWx1cmVfY291bnQgPSBzbGF2ZS0+bGlua19mYWlsdXJlX2NvdW50OworfQorCitzdGF0aWMgdm9pZCBib25kX25ldGRldl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgbmV0ZGV2X2JvbmRpbmdfaW5mbyAqaW5mbykKK3sKKwlydG5sX2xvY2soKTsKKwluZXRkZXZfYm9uZGluZ19pbmZvX2NoYW5nZShkZXYsIGluZm8pOworCXJ0bmxfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyB2b2lkIGJvbmRfbmV0ZGV2X25vdGlmeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqX3dvcmspCit7CisJc3RydWN0IG5ldGRldl9ub3RpZnlfd29yayAqdyA9CisJCWNvbnRhaW5lcl9vZihfd29yaywgc3RydWN0IG5ldGRldl9ub3RpZnlfd29yaywgd29yay53b3JrKTsKKworCWJvbmRfbmV0ZGV2X25vdGlmeSh3LT5kZXYsICZ3LT5ib25kaW5nX2luZm8pOworCWRldl9wdXQody0+ZGV2KTsKKwlrZnJlZSh3KTsKK30KKwordm9pZCBib25kX3F1ZXVlX3NsYXZlX2V2ZW50KHN0cnVjdCBzbGF2ZSAqc2xhdmUpCit7CisJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBzbGF2ZS0+Ym9uZDsKKwlzdHJ1Y3QgbmV0ZGV2X25vdGlmeV93b3JrICpubncgPSBremFsbG9jKHNpemVvZigqbm53KSwgR0ZQX0FUT01JQyk7CisKKwlpZiAoIW5udykKKwkJcmV0dXJuOworCisJZGV2X2hvbGQoc2xhdmUtPmRldik7CisJbm53LT5kZXYgPSBzbGF2ZS0+ZGV2OworCWJvbmRfZmlsbF9pZnNsYXZlKHNsYXZlLCAmbm53LT5ib25kaW5nX2luZm8uc2xhdmUpOworCWJvbmRfZmlsbF9pZmJvbmQoYm9uZCwgJm5udy0+Ym9uZGluZ19pbmZvLm1hc3Rlcik7CisJSU5JVF9ERUxBWUVEX1dPUksoJm5udy0+d29yaywgYm9uZF9uZXRkZXZfbm90aWZ5X3dvcmspOworCisJcXVldWVfZGVsYXllZF93b3JrKHNsYXZlLT5ib25kLT53cSwgJm5udy0+d29yaywgMCk7Cit9CisKIC8qIGVuc2xhdmUgZGV2aWNlIDxzbGF2ZT4gdG8gYm9uZCBkZXZpY2UgPG1hc3Rlcj4gKi8KIGludCBib25kX2Vuc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2KQogewpAQCAtMTQzOSwxOSArMTQ5NCwyMiBAQAogCWlmIChib25kLT5wYXJhbXMubWlpbW9uKSB7CiAJCWlmIChib25kX2NoZWNrX2Rldl9saW5rKGJvbmQsIHNsYXZlX2RldiwgMCkgPT0gQk1TUl9MU1RBVFVTKSB7CiAJCQlpZiAoYm9uZC0+cGFyYW1zLnVwZGVsYXkpIHsKLQkJCQluZXdfc2xhdmUtPmxpbmsgPSBCT05EX0xJTktfQkFDSzsKKwkJCQlib25kX3NldF9zbGF2ZV9saW5rX3N0YXRlKG5ld19zbGF2ZSwKKwkJCQkJCQkgIEJPTkRfTElOS19CQUNLKTsKIAkJCQluZXdfc2xhdmUtPmRlbGF5ID0gYm9uZC0+cGFyYW1zLnVwZGVsYXk7CiAJCQl9IGVsc2UgewotCQkJCW5ld19zbGF2ZS0+bGluayA9IEJPTkRfTElOS19VUDsKKwkJCQlib25kX3NldF9zbGF2ZV9saW5rX3N0YXRlKG5ld19zbGF2ZSwKKwkJCQkJCQkgIEJPTkRfTElOS19VUCk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQluZXdfc2xhdmUtPmxpbmsgPSBCT05EX0xJTktfRE9XTjsKKwkJCWJvbmRfc2V0X3NsYXZlX2xpbmtfc3RhdGUobmV3X3NsYXZlLCBCT05EX0xJTktfRE9XTik7CiAJCX0KIAl9IGVsc2UgaWYgKGJvbmQtPnBhcmFtcy5hcnBfaW50ZXJ2YWwpIHsKLQkJbmV3X3NsYXZlLT5saW5rID0gKG5ldGlmX2NhcnJpZXJfb2soc2xhdmVfZGV2KSA/Ci0JCQlCT05EX0xJTktfVVAgOiBCT05EX0xJTktfRE9XTik7CisJCWJvbmRfc2V0X3NsYXZlX2xpbmtfc3RhdGUobmV3X3NsYXZlLAorCQkJCQkgIChuZXRpZl9jYXJyaWVyX29rKHNsYXZlX2RldikgPworCQkJCQkgIEJPTkRfTElOS19VUCA6IEJPTkRfTElOS19ET1dOKSk7CiAJfSBlbHNlIHsKLQkJbmV3X3NsYXZlLT5saW5rID0gQk9ORF9MSU5LX1VQOworCQlib25kX3NldF9zbGF2ZV9saW5rX3N0YXRlKG5ld19zbGF2ZSwgQk9ORF9MSU5LX1VQKTsKIAl9CiAKIAlpZiAobmV3X3NsYXZlLT5saW5rICE9IEJPTkRfTElOS19ET1dOKQpAQCAtMTU2Nyw2ICsxNjI1LDcgQEAKIAkJICAgIG5ld19zbGF2ZS0+bGluayAhPSBCT05EX0xJTktfRE9XTiA/ICJhbiB1cCIgOiAiYSBkb3duIik7CiAKIAkvKiBlbnNsYXZlIGlzIHN1Y2Nlc3NmdWwgKi8KKwlib25kX3F1ZXVlX3NsYXZlX2V2ZW50KG5ld19zbGF2ZSk7CiAJcmV0dXJuIDA7CiAKIC8qIFVuZG8gc3RhZ2VzIG9uIGVycm9yICovCkBAIC0xODE2LDExICsxODc1LDcgQEAKIHN0YXRpYyBpbnQgYm9uZF9pbmZvX3F1ZXJ5KHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IGlmYm9uZCAqaW5mbykKIHsKIAlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGJvbmRfZGV2KTsKLQotCWluZm8tPmJvbmRfbW9kZSA9IEJPTkRfTU9ERShib25kKTsKLQlpbmZvLT5taWltb24gPSBib25kLT5wYXJhbXMubWlpbW9uOwotCWluZm8tPm51bV9zbGF2ZXMgPSBib25kLT5zbGF2ZV9jbnQ7Ci0KKwlib25kX2ZpbGxfaWZib25kKGJvbmQsIGluZm8pOwogCXJldHVybiAwOwogfQogCkBAIC0xODM0LDEwICsxODg5LDcgQEAKIAlib25kX2Zvcl9lYWNoX3NsYXZlKGJvbmQsIHNsYXZlLCBpdGVyKSB7CiAJCWlmIChpKysgPT0gKGludClpbmZvLT5zbGF2ZV9pZCkgewogCQkJcmVzID0gMDsKLQkJCXN0cmNweShpbmZvLT5zbGF2ZV9uYW1lLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKLQkJCWluZm8tPmxpbmsgPSBzbGF2ZS0+bGluazsKLQkJCWluZm8tPnN0YXRlID0gYm9uZF9zbGF2ZV9zdGF0ZShzbGF2ZSk7Ci0JCQlpbmZvLT5saW5rX2ZhaWx1cmVfY291bnQgPSBzbGF2ZS0+bGlua19mYWlsdXJlX2NvdW50OworCQkJYm9uZF9maWxsX2lmc2xhdmUoc2xhdmUsIGluZm8pOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xODY3LDcgKzE5MTksNyBAQAogCQkJaWYgKGxpbmtfc3RhdGUpCiAJCQkJY29udGludWU7CiAKLQkJCXNsYXZlLT5saW5rID0gQk9ORF9MSU5LX0ZBSUw7CisJCQlib25kX3NldF9zbGF2ZV9saW5rX3N0YXRlKHNsYXZlLCBCT05EX0xJTktfRkFJTCk7CiAJCQlzbGF2ZS0+ZGVsYXkgPSBib25kLT5wYXJhbXMuZG93bmRlbGF5OwogCQkJaWYgKHNsYXZlLT5kZWxheSkgewogCQkJCW5ldGRldl9pbmZvKGJvbmQtPmRldiwgImxpbmsgc3RhdHVzIGRvd24gZm9yICVzaW50ZXJmYWNlICVzLCBkaXNhYmxpbmcgaXQgaW4gJWQgbXNcbiIsCkBAIC0xODgyLDcgKzE5MzQsNyBAQAogCQljYXNlIEJPTkRfTElOS19GQUlMOgogCQkJaWYgKGxpbmtfc3RhdGUpIHsKIAkJCQkvKiByZWNvdmVyZWQgYmVmb3JlIGRvd25kZWxheSBleHBpcmVkICovCi0JCQkJc2xhdmUtPmxpbmsgPSBCT05EX0xJTktfVVA7CisJCQkJYm9uZF9zZXRfc2xhdmVfbGlua19zdGF0ZShzbGF2ZSwgQk9ORF9MSU5LX1VQKTsKIAkJCQlzbGF2ZS0+bGFzdF9saW5rX3VwID0gamlmZmllczsKIAkJCQluZXRkZXZfaW5mbyhib25kLT5kZXYsICJsaW5rIHN0YXR1cyB1cCBhZ2FpbiBhZnRlciAlZCBtcyBmb3IgaW50ZXJmYWNlICVzXG4iLAogCQkJCQkgICAgKGJvbmQtPnBhcmFtcy5kb3duZGVsYXkgLSBzbGF2ZS0+ZGVsYXkpICoKQEAgLTE5MDQsNyArMTk1Niw3IEBACiAJCQlpZiAoIWxpbmtfc3RhdGUpCiAJCQkJY29udGludWU7CiAKLQkJCXNsYXZlLT5saW5rID0gQk9ORF9MSU5LX0JBQ0s7CisJCQlib25kX3NldF9zbGF2ZV9saW5rX3N0YXRlKHNsYXZlLCBCT05EX0xJTktfQkFDSyk7CiAJCQlzbGF2ZS0+ZGVsYXkgPSBib25kLT5wYXJhbXMudXBkZWxheTsKIAogCQkJaWYgKHNsYXZlLT5kZWxheSkgewpAQCAtMTkxNyw3ICsxOTY5LDggQEAKIAkJCS8qRkFMTFRIUlUqLwogCQljYXNlIEJPTkRfTElOS19CQUNLOgogCQkJaWYgKCFsaW5rX3N0YXRlKSB7Ci0JCQkJc2xhdmUtPmxpbmsgPSBCT05EX0xJTktfRE9XTjsKKwkJCQlib25kX3NldF9zbGF2ZV9saW5rX3N0YXRlKHNsYXZlLAorCQkJCQkJCSAgQk9ORF9MSU5LX0RPV04pOwogCQkJCW5ldGRldl9pbmZvKGJvbmQtPmRldiwgImxpbmsgc3RhdHVzIGRvd24gYWdhaW4gYWZ0ZXIgJWQgbXMgZm9yIGludGVyZmFjZSAlc1xuIiwKIAkJCQkJICAgIChib25kLT5wYXJhbXMudXBkZWxheSAtIHNsYXZlLT5kZWxheSkgKgogCQkJCQkgICAgYm9uZC0+cGFyYW1zLm1paW1vbiwKQEAgLTE5NTUsNyArMjAwOCw3IEBACiAJCQljb250aW51ZTsKIAogCQljYXNlIEJPTkRfTElOS19VUDoKLQkJCXNsYXZlLT5saW5rID0gQk9ORF9MSU5LX1VQOworCQkJYm9uZF9zZXRfc2xhdmVfbGlua19zdGF0ZShzbGF2ZSwgQk9ORF9MSU5LX1VQKTsKIAkJCXNsYXZlLT5sYXN0X2xpbmtfdXAgPSBqaWZmaWVzOwogCiAJCQlwcmltYXJ5ID0gcnRubF9kZXJlZmVyZW5jZShib25kLT5wcmltYXJ5X3NsYXZlKTsKQEAgLTE5OTUsNyArMjA0OCw3IEBACiAJCQlpZiAoc2xhdmUtPmxpbmtfZmFpbHVyZV9jb3VudCA8IFVJTlRfTUFYKQogCQkJCXNsYXZlLT5saW5rX2ZhaWx1cmVfY291bnQrKzsKIAotCQkJc2xhdmUtPmxpbmsgPSBCT05EX0xJTktfRE9XTjsKKwkJCWJvbmRfc2V0X3NsYXZlX2xpbmtfc3RhdGUoc2xhdmUsIEJPTkRfTElOS19ET1dOKTsKIAogCQkJaWYgKEJPTkRfTU9ERShib25kKSA9PSBCT05EX01PREVfQUNUSVZFQkFDS1VQIHx8CiAJCQkgICAgQk9ORF9NT0RFKGJvbmQpID09IEJPTkRfTU9ERV84MDIzQUQpCkBAIC0yNTc4LDcgKzI2MzEsNyBAQAogCQkJCXN0cnVjdCBzbGF2ZSAqY3VycmVudF9hcnBfc2xhdmU7CiAKIAkJCQljdXJyZW50X2FycF9zbGF2ZSA9IHJ0bmxfZGVyZWZlcmVuY2UoYm9uZC0+Y3VycmVudF9hcnBfc2xhdmUpOwotCQkJCXNsYXZlLT5saW5rID0gQk9ORF9MSU5LX1VQOworCQkJCWJvbmRfc2V0X3NsYXZlX2xpbmtfc3RhdGUoc2xhdmUsIEJPTkRfTElOS19VUCk7CiAJCQkJaWYgKGN1cnJlbnRfYXJwX3NsYXZlKSB7CiAJCQkJCWJvbmRfc2V0X3NsYXZlX2luYWN0aXZlX2ZsYWdzKAogCQkJCQkJY3VycmVudF9hcnBfc2xhdmUsCkBAIC0yNjAxLDcgKzI2NTQsNyBAQAogCQkJaWYgKHNsYXZlLT5saW5rX2ZhaWx1cmVfY291bnQgPCBVSU5UX01BWCkKIAkJCQlzbGF2ZS0+bGlua19mYWlsdXJlX2NvdW50Kys7CiAKLQkJCXNsYXZlLT5saW5rID0gQk9ORF9MSU5LX0RPV047CisJCQlib25kX3NldF9zbGF2ZV9saW5rX3N0YXRlKHNsYXZlLCBCT05EX0xJTktfRE9XTik7CiAJCQlib25kX3NldF9zbGF2ZV9pbmFjdGl2ZV9mbGFncyhzbGF2ZSwKIAkJCQkJCSAgICAgIEJPTkRfU0xBVkVfTk9USUZZX05PVyk7CiAKQEAgLTI2ODAsNyArMjczMyw3IEBACiAJCSAqIHVwIHdoZW4gaXQgaXMgYWN0dWFsbHkgZG93bgogCQkgKi8KIAkJaWYgKCFib25kX3NsYXZlX2lzX3VwKHNsYXZlKSAmJiBzbGF2ZS0+bGluayA9PSBCT05EX0xJTktfVVApIHsKLQkJCXNsYXZlLT5saW5rID0gQk9ORF9MSU5LX0RPV047CisJCQlib25kX3NldF9zbGF2ZV9saW5rX3N0YXRlKHNsYXZlLCBCT05EX0xJTktfRE9XTik7CiAJCQlpZiAoc2xhdmUtPmxpbmtfZmFpbHVyZV9jb3VudCA8IFVJTlRfTUFYKQogCQkJCXNsYXZlLT5saW5rX2ZhaWx1cmVfY291bnQrKzsKIApAQCAtMjcwMCw3ICsyNzUzLDcgQEAKIAlpZiAoIW5ld19zbGF2ZSkKIAkJZ290byBjaGVja19zdGF0ZTsKIAotCW5ld19zbGF2ZS0+bGluayA9IEJPTkRfTElOS19CQUNLOworCWJvbmRfc2V0X3NsYXZlX2xpbmtfc3RhdGUobmV3X3NsYXZlLCBCT05EX0xJTktfQkFDSyk7CiAJYm9uZF9zZXRfc2xhdmVfYWN0aXZlX2ZsYWdzKG5ld19zbGF2ZSwgQk9ORF9TTEFWRV9OT1RJRllfTEFURVIpOwogCWJvbmRfYXJwX3NlbmRfYWxsKGJvbmQsIG5ld19zbGF2ZSk7CiAJbmV3X3NsYXZlLT5sYXN0X2xpbmtfdXAgPSBqaWZmaWVzOwpAQCAtMzA2Niw3ICszMTE5LDcgQEAKIAkJCSAgICBzbGF2ZSAhPSByY3VfYWNjZXNzX3BvaW50ZXIoYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmUpKSB7CiAJCQkJYm9uZF9zZXRfc2xhdmVfaW5hY3RpdmVfZmxhZ3Moc2xhdmUsCiAJCQkJCQkJICAgICAgQk9ORF9TTEFWRV9OT1RJRllfTk9XKTsKLQkJCX0gZWxzZSB7CisJCQl9IGVsc2UgaWYgKEJPTkRfTU9ERShib25kKSAhPSBCT05EX01PREVfODAyM0FEKSB7CiAJCQkJYm9uZF9zZXRfc2xhdmVfYWN0aXZlX2ZsYWdzKHNsYXZlLAogCQkJCQkJCSAgICBCT05EX1NMQVZFX05PVElGWV9OT1cpOwogCQkJfQpAQCAtMzczNCw3ICszNzg3LDcgQEAKICAqIHVzYWJsZSBzbGF2ZSBhcnJheSBpcyBmb3JtZWQgaW4gdGhlIGNvbnRyb2wgcGF0aC4gVGhlIHhtaXQgZnVuY3Rpb24KICAqIGp1c3QgY2FsY3VsYXRlcyBoYXNoIGFuZCBzZW5kcyB0aGUgcGFja2V0IG91dC4KICAqLwotaW50IGJvbmRfM2FkX3hvcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGJvbmRfM2FkX3hvcl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBzbGF2ZSAqc2xhdmU7CkBAIC0zOTUyLDYgKzQwMDUsOCBAQAogCS5uZG9fYWRkX3NsYXZlCQk9IGJvbmRfZW5zbGF2ZSwKIAkubmRvX2RlbF9zbGF2ZQkJPSBib25kX3JlbGVhc2UsCiAJLm5kb19maXhfZmVhdHVyZXMJPSBib25kX2ZpeF9mZWF0dXJlcywKKwkubmRvX2JyaWRnZV9zZXRsaW5rCT0gbmRvX2RmbHRfbmV0ZGV2X3N3aXRjaF9wb3J0X2JyaWRnZV9zZXRsaW5rLAorCS5uZG9fYnJpZGdlX2RlbGxpbmsJPSBuZG9fZGZsdF9uZXRkZXZfc3dpdGNoX3BvcnRfYnJpZGdlX2RlbGxpbmssCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldmljZV90eXBlIGJvbmRfdHlwZSA9IHsKQEAgLTQwMTAsNyArNDA2NSw3IEBACiAJCQkJTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSOwogCiAJYm9uZF9kZXYtPmh3X2ZlYXR1cmVzICY9IH4oTkVUSUZfRl9BTExfQ1NVTSAmIH5ORVRJRl9GX0hXX0NTVU0pOwotCWJvbmRfZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX0dTT19VRFBfVFVOTkVMOworCWJvbmRfZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX0dTT19FTkNBUF9BTEw7CiAJYm9uZF9kZXYtPmZlYXR1cmVzIHw9IGJvbmRfZGV2LT5od19mZWF0dXJlczsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9vcHRpb25zLmMKaW5kZXggMWE2MWNjOS4uNGRmMjg5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX29wdGlvbnMuYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfb3B0aW9ucy5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAl7IE5VTEwsICAtMSwgMH0KIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYm9uZF9vcHRpb24gYm9uZF9vcHRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGJvbmRfb3B0aW9uIGJvbmRfb3B0c1tCT05EX09QVF9MQVNUXSA9IHsKIAlbQk9ORF9PUFRfTU9ERV0gPSB7CiAJCS5pZCA9IEJPTkRfT1BUX01PREUsCiAJCS5uYW1lID0gIm1vZGUiLApAQCAtMzc5LDggKzM3OSw3IEBACiAJCS52YWx1ZXMgPSBib25kX3RsYl9keW5hbWljX2xiX3RibCwKIAkJLmZsYWdzID0gQk9ORF9PUFRGTEFHX0lGRE9XTiwKIAkJLnNldCA9IGJvbmRfb3B0aW9uX3RsYl9keW5hbWljX2xiX3NldCwKLQl9LAotCXsgfQorCX0KIH07CiAKIC8qIFNlYXJjaGVzIGZvciBhbiBvcHRpb24gYnkgbmFtZSAqLwpAQCAtMTE4Miw2ICsxMTgxLDcgQEAKIAluZXRkZXZfaW5mbyhib25kLT5kZXYsICJTZXR0aW5nIG1pbiBsaW5rcyB2YWx1ZSB0byAlbGx1XG4iLAogCQkgICAgbmV3dmFsLT52YWx1ZSk7CiAJYm9uZC0+cGFyYW1zLm1pbl9saW5rcyA9IG5ld3ZhbC0+dmFsdWU7CisJYm9uZF9zZXRfY2Fycmllcihib25kKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FpZi9jYWlmX2hzaS5jIGIvZHJpdmVycy9uZXQvY2FpZi9jYWlmX2hzaS5jCmluZGV4IDVlNDBhOGIuLmIzYjkyMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NhaWYvY2FpZl9oc2kuYworKysgYi9kcml2ZXJzL25ldC9jYWlmL2NhaWZfaHNpLmMKQEAgLTE0MTUsNyArMTQxNSw2IEBACiAKIAljZmhzaSA9IG5ldGRldl9wcml2KGRldik7CiAJY2Zoc2lfbmV0bGlua19wYXJtcyhkYXRhLCBjZmhzaSk7Ci0JZGV2X25ldF9zZXQoY2Zoc2ktPm5kZXYsIHNyY19uZXQpOwogCiAJZ2V0X29wcyA9IHN5bWJvbF9nZXQoY2Zoc2lfZ2V0X29wcyk7CiAJaWYgKCFnZXRfb3BzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vYXQ5MV9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCmluZGV4IGQwYzI0NjMuLmVlYjRiOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCkBAIC0xMzgsNyArMTM4LDYgQEAKIAogc3RydWN0IGF0OTFfcHJpdiB7CiAJc3RydWN0IGNhbl9wcml2IGNhbjsJCS8qIG11c3QgYmUgdGhlIGZpcnN0IG1lbWJlciEgKi8KLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCiAJdm9pZCBfX2lvbWVtICpyZWdfYmFzZTsKQEAgLTEzNTAsNyArMTM0OSw2IEBACiAJcHJpdi0+Y2FuLmRvX2dldF9iZXJyX2NvdW50ZXIgPSBhdDkxX2dldF9iZXJyX2NvdW50ZXI7CiAJcHJpdi0+Y2FuLmN0cmxtb2RlX3N1cHBvcnRlZCA9IENBTl9DVFJMTU9ERV8zX1NBTVBMRVMgfAogCQlDQU5fQ1RSTE1PREVfTElTVEVOT05MWTsKLQlwcml2LT5kZXYgPSBkZXY7CiAJcHJpdi0+cmVnX2Jhc2UgPSBhZGRyOwogCXByaXYtPmRldnR5cGVfZGF0YSA9ICpkZXZ0eXBlX2RhdGE7CiAJcHJpdi0+Y2xrID0gY2xrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2JmaW5fY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vYmZpbl9jYW4uYwppbmRleCA0MTdkNTA5OS4uZTdhNjM2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2JmaW5fY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2JmaW5fY2FuLmMKQEAgLTM1Miw2ICszNTIsNyBAQAogCQluZXRkZXZfZGJnKGRldiwgImJ1cy1vZmYgbW9kZSBpbnRlcnJ1cHRcbiIpOwogCQlzdGF0ZSA9IENBTl9TVEFURV9CVVNfT0ZGOwogCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfQlVTT0ZGOworCQlwcml2LT5jYW4uY2FuX3N0YXRzLmJ1c19vZmYrKzsKIAkJY2FuX2J1c19vZmYoZGV2KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9jX2Nhbi9jX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuLmMKaW5kZXggZjk0YTlmYS4uMDQxNTI1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2NfY2FuL2NfY2FuLmMKQEAgLTYxNSw2ICs2MTUsOSBAQAogCiAJY19jYW5faXJxX2NvbnRyb2wocHJpdiwgZmFsc2UpOwogCisJLyogcHV0IGN0cmwgdG8gaW5pdCBvbiBzdG9wIHRvIGVuZCBvbmdvaW5nIHRyYW5zbWlzc2lvbiAqLworCXByaXYtPndyaXRlX3JlZyhwcml2LCBDX0NBTl9DVFJMX1JFRywgQ09OVFJPTF9JTklUKTsKKwogCS8qIGRlYWN0aXZhdGUgcGlucyAqLwogCXBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKGRldi0+ZGV2LnBhcmVudCk7CiAJcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX1NUT1BQRUQ7CkBAIC04NjYsNyArODY5LDcgQEAKIAljYXNlIENfQ0FOX0JVU19PRkY6CiAJCS8qIGJ1cy1vZmYgc3RhdGUgKi8KIAkJcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX0JVU19PRkY7Ci0JCWNhbl9idXNfb2ZmKGRldik7CisJCXByaXYtPmNhbi5jYW5fc3RhdHMuYnVzX29mZisrOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9jYzc3MC9jYzc3MC5jIGIvZHJpdmVycy9uZXQvY2FuL2NjNzcwL2NjNzcwLmMKaW5kZXggYzQ4NmZlNS4uYzExZDQ0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2NjNzcwL2NjNzcwLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2NjNzcwL2NjNzcwLmMKQEAgLTUzNSw2ICs1MzUsNyBAQAogCQljYzc3MF93cml0ZV9yZWcocHJpdiwgY29udHJvbCwgQ1RSTF9JTkkpOwogCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfQlVTT0ZGOwogCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfQlVTX09GRjsKKwkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5idXNfb2ZmKys7CiAJCWNhbl9idXNfb2ZmKGRldik7CiAJfSBlbHNlIGlmIChzdGF0dXMgJiBTVEFUX1dBUk4pIHsKIAkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vZGV2LmMgYi9kcml2ZXJzL25ldC9jYW4vZGV2LmMKaW5kZXggODQ3YzFmOC4uM2M4MmUwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9kZXYuYwpAQCAtMjg5LDkgKzI4OSwxMSBAQAogCQlwcml2LT5jYW5fc3RhdHMuZXJyb3JfcGFzc2l2ZSsrOwogCQlicmVhazsKIAljYXNlIENBTl9TVEFURV9CVVNfT0ZGOgorCQlwcml2LT5jYW5fc3RhdHMuYnVzX29mZisrOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKLQl9OworCX0KIH0KIAogc3RhdGljIGludCBjYW5fdHhfc3RhdGVfdG9fZnJhbWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZW51bSBjYW5fc3RhdGUgc3RhdGUpCkBAIC01NDQsNyArNTQ2LDYgQEAKIAluZXRkZXZfZGJnKGRldiwgImJ1cy1vZmZcbiIpOwogCiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQlwcml2LT5jYW5fc3RhdHMuYnVzX29mZisrOwogCiAJaWYgKHByaXYtPnJlc3RhcnRfbXMpCiAJCW1vZF90aW1lcigmcHJpdi0+cmVzdGFydF90aW1lciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9mbGV4Y2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vZmxleGNhbi5jCmluZGV4IGIxZDU4M2IuLjgwYzQ2YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9mbGV4Y2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL2ZsZXhjYW4uYwpAQCAtMjQ3LDcgKzI0Nyw2IEBACiAKIHN0cnVjdCBmbGV4Y2FuX3ByaXYgewogCXN0cnVjdCBjYW5fcHJpdiBjYW47Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAogCXZvaWQgX19pb21lbSAqYmFzZTsKQEAgLTEyMjAsNyArMTIxOSw2IEBACiAJCUNBTl9DVFJMTU9ERV9MSVNURU5PTkxZCXwgQ0FOX0NUUkxNT0RFXzNfU0FNUExFUyB8CiAJCUNBTl9DVFJMTU9ERV9CRVJSX1JFUE9SVElORzsKIAlwcml2LT5iYXNlID0gYmFzZTsKLQlwcml2LT5kZXYgPSBkZXY7CiAJcHJpdi0+Y2xrX2lwZyA9IGNsa19pcGc7CiAJcHJpdi0+Y2xrX3BlciA9IGNsa19wZXI7CiAJcHJpdi0+cGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYyBiL2RyaXZlcnMvbmV0L2Nhbi9qYW56LWljYW4zLmMKaW5kZXggMWIxMTgzOS4uNGRkMTgzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYworKysgYi9kcml2ZXJzL25ldC9jYW4vamFuei1pY2FuMy5jCkBAIC0xMDA4LDYgKzEwMDgsNyBAQAogCQlpZiAoc3RhdHVzICYgU1JfQlMpIHsKIAkJCXN0YXRlID0gQ0FOX1NUQVRFX0JVU19PRkY7CiAJCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfQlVTT0ZGOworCQkJbW9kLT5jYW4uY2FuX3N0YXRzLmJ1c19vZmYrKzsKIAkJCWNhbl9idXNfb2ZmKGRldik7CiAJCX0gZWxzZSBpZiAoc3RhdHVzICYgU1JfRVMpIHsKIAkJCWlmIChyeGVyciA+PSAxMjggfHwgdHhlcnIgPj0gMTI4KQpAQCAtMTY3OCw4ICsxNjc5LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZtb2QtPmJ1c2Vycm9yX2NvbXAsIEhaKTsKLQlpZiAocmV0ID09IDApIHsKKwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmbW9kLT5idXNlcnJvcl9jb21wLCBIWikpIHsKIAkJbmV0ZGV2X2luZm8obW9kLT5uZGV2LCAiJXMgdGltZWQgb3V0XG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KQEAgLTE3MDQsOCArMTcwNCw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmbW9kLT50ZXJtaW5hdGlvbl9jb21wLCBIWik7Ci0JaWYgKHJldCA9PSAwKSB7CisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJm1vZC0+dGVybWluYXRpb25fY29tcCwgSFopKSB7CiAJCW5ldGRldl9pbmZvKG1vZC0+bmRldiwgIiVzIHRpbWVkIG91dFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vbV9jYW4vbV9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9tX2Nhbi9tX2Nhbi5jCmluZGV4IDI0NDUyOTguLjJlMDRiM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9tX2Nhbi9tX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9tX2Nhbi9tX2Nhbi5jCkBAIC01ODksNiArNTg5LDcgQEAKIAkJLyogYnVzLW9mZiBzdGF0ZSAqLwogCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfQlVTX09GRjsKIAkJbV9jYW5fZGlzYWJsZV9hbGxfaW50ZXJydXB0cyhwcml2KTsKKwkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5idXNfb2ZmKys7CiAJCWNhbl9idXNfb2ZmKGRldik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vcGNoX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3BjaF9jYW4uYwppbmRleCBhNjdlYjAxLi5lMTg3Y2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vcGNoX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9wY2hfY2FuLmMKQEAgLTUwNSw2ICs1MDUsNyBAQAogCQlwY2hfY2FuX3NldF9yeF9hbGwocHJpdiwgMCk7CiAJCXN0YXRlID0gQ0FOX1NUQVRFX0JVU19PRkY7CiAJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9CVVNPRkY7CisJCXByaXYtPmNhbi5jYW5fc3RhdHMuYnVzX29mZisrOwogCQljYW5fYnVzX29mZihuZGV2KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9yY2FyX2Nhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3JjYXJfY2FuLmMKaW5kZXggOTFjZDQ4Yy4uN2RlYjgwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3JjYXJfY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3JjYXJfY2FuLmMKQEAgLTMzMSw2ICszMzEsNyBAQAogCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfQlVTX09GRjsKIAkJLyogQ2xlYXIgaW50ZXJydXB0IGNvbmRpdGlvbiAqLwogCQl3cml0ZWIoflJDQVJfQ0FOX0VJRlJfQk9FSUYsICZwcml2LT5yZWdzLT5laWZyKTsKKwkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5idXNfb2ZmKys7CiAJCWNhbl9idXNfb2ZmKG5kZXYpOwogCQlpZiAoc2tiKQogCQkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0JVU09GRjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfbWFpbi5jIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19tYWluLmMKaW5kZXggMmJmOThkOC4uNzYyMWY5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19tYWluLmMKQEAgLTI2MSw2ICsyNjEsNyBAQAogCQkJCSsrcHJpdi0+Y2FuLmNhbl9zdGF0cy5lcnJvcl9wYXNzaXZlOwogCQkJZWxzZSBpZiAoY2FuX3N0YXRlID09IENBTl9TVEFURV9CVVNfT0ZGKSB7CiAJCQkJLyogdGhpcyBjYWxscyBjYW5fY2xvc2VfY2xlYW51cCgpICovCisJCQkJKytwcml2LT5jYW4uY2FuX3N0YXRzLmJ1c19vZmY7CiAJCQkJY2FuX2J1c19vZmYobmV0ZGV2KTsKIAkJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc3BpL21jcDI1MXguYyBiL2RyaXZlcnMvbmV0L2Nhbi9zcGkvbWNwMjUxeC5jCmluZGV4IGM2NmQ2OTkuLmJmNjNmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zcGkvbWNwMjUxeC5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zcGkvbWNwMjUxeC5jCkBAIC05MDUsNiArOTA1LDcgQEAKIAkJaWYgKHByaXYtPmNhbi5zdGF0ZSA9PSBDQU5fU1RBVEVfQlVTX09GRikgewogCQkJaWYgKHByaXYtPmNhbi5yZXN0YXJ0X21zID09IDApIHsKIAkJCQlwcml2LT5mb3JjZV9xdWl0ID0gMTsKKwkJCQlwcml2LT5jYW4uY2FuX3N0YXRzLmJ1c19vZmYrKzsKIAkJCQljYW5fYnVzX29mZihuZXQpOwogCQkJCW1jcDI1MXhfaHdfc2xlZXAoc3BpKTsKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi90aV9oZWNjLmMgYi9kcml2ZXJzL25ldC9jYW4vdGlfaGVjYy5jCmluZGV4IDlhMDdlYWYuLmU5NWE5ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi90aV9oZWNjLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3RpX2hlY2MuYwpAQCAtNzE1LDYgKzcxNSw3IEBACiAJCWhlY2NfY2xlYXJfYml0KHByaXYsIEhFQ0NfQ0FOTUMsIEhFQ0NfQ0FOTUNfQ0NSKTsKIAkJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBpbiBidXMtb2ZmIHRvIGF2b2lkIGludCBob2cgKi8KIAkJaGVjY193cml0ZShwcml2LCBIRUNDX0NBTkdJTSwgMCk7CisJCSsrcHJpdi0+Y2FuLmNhbl9zdGF0cy5idXNfb2ZmOwogCQljYW5fYnVzX29mZihuZGV2KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZwppbmRleCBhNzdkYjkxOS4uYmNiMjcyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZwpAQCAtMjUsNyArMjUsNyBAQAogCXRyaXN0YXRlICJLdmFzZXIgQ0FOL1VTQiBpbnRlcmZhY2UiCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciBLdmFzZXIgQ0FOL1VTQiBkZXZpY2VzIGxpa2UgS3Zhc2VyCi0JICBMZWFmIExpZ2h0LgorCSAgTGVhZiBMaWdodCBhbmQgS3Zhc2VyIFVTQmNhbiBJSS4KIAogCSAgVGhlIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgZm9sbG93aW5nIGRldmljZXM6CiAJICAgIC0gS3Zhc2VyIExlYWYgTGlnaHQKQEAgLTQ2LDYgKzQ2LDEyIEBACiAJICAgIC0gS3Zhc2VyIFVTQmNhbiBSCiAJICAgIC0gS3Zhc2VyIExlYWYgTGlnaHQgdjIKIAkgICAgLSBLdmFzZXIgTWluaSBQQ0kgRXhwcmVzcyBIUworCSAgICAtIEt2YXNlciBVU0JjYW4gSUkgSFMvSFMKKwkgICAgLSBLdmFzZXIgVVNCY2FuIElJIEhTL0xTCisJICAgIC0gS3Zhc2VyIFVTQmNhbiBSdWdnZWQgKCJVU0JjYW4gUmV2IEIiKQorCSAgICAtIEt2YXNlciBNZW1vcmF0b3IgSFMvSFMKKwkgICAgLSBLdmFzZXIgTWVtb3JhdG9yIEhTL0xTCisJICAgIC0gU2NhbmlhIFZDSTIgKGlmIHlvdSBoYXZlIHRoZSBLdmFzZXIgbG9nbyBvbiB0b3ApCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKQEAgLTUzLDEwICs1OSwxOCBAQAogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGt2YXNlcl91c2IuCiAKIGNvbmZpZyBDQU5fUEVBS19VU0IKLQl0cmlzdGF0ZSAiUEVBSyBQQ0FOLVVTQi9VU0IgUHJvIGludGVyZmFjZXMiCisJdHJpc3RhdGUgIlBFQUsgUENBTi1VU0IvVVNCIFBybyBpbnRlcmZhY2VzIGZvciBDQU4gMi4wYi9DQU4tRkQiCiAJLS0taGVscC0tLQotCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFBDQU4tVVNCIGFuZCBQQ0FOLVVTQiBQcm8gYWRhcHRlcnMKLQkgIGZyb20gUEVBSy1TeXN0ZW0gVGVjaG5payAoaHR0cDovL3d3dy5wZWFrLXN5c3RlbS5jb20pLgorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFBFQUstU3lzdGVtIFRlY2huaWsgVVNCIGFkYXB0ZXJzIHRoYXQgZW5hYmxlCisJICBhY2Nlc3MgdG8gdGhlIENBTiBidXMsIHdpdGggcmVwZWN0IHRvIHRoZSBDQU4gMi4wYiBhbmQvb3IgQ0FOLUZECisJICBzdGFuZGFyZHMsIHRoYXQgaXM6CisKKwkgIFBDQU4tVVNCICAgICAgICAgICAgIHNpbmdsZSBDQU4gMi4wYiBjaGFubmVsIFVTQiBhZGFwdGVyCisJICBQQ0FOLVVTQiBQcm8gICAgICAgICBkdWFsIENBTiAyLjBiIGNoYW5uZWxzIFVTQiBhZGFwdGVyCisJICBQQ0FOLVVTQiBGRCAgICAgICAgICBzaW5nbGUgQ0FOLUZEIGNoYW5uZWwgVVNCIGFkYXB0ZXIKKwkgIFBDQU4tVVNCIFBybyBGRCAgICAgIGR1YWwgQ0FOLUZEIGNoYW5uZWxzIFVTQiBhZGFwdGVyCisKKwkgIChzZWUgYWxzbyBodHRwOi8vd3d3LnBlYWstc3lzdGVtLmNvbSkuCiAKIGNvbmZpZyBDQU5fOERFVl9VU0IKIAl0cmlzdGF0ZSAiOCBkZXZpY2VzIFVTQjJDQU4gaW50ZXJmYWNlIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9lbXNfdXNiLmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Vtc191c2IuYwppbmRleCAyOWQzZjA5Li45Mzc2ZjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL2Vtc191c2IuYworKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Vtc191c2IuYwpAQCAtMzQ3LDYgKzM0Nyw3IEBACiAJCQlkZXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9CVVNfT0ZGOwogCQkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0JVU09GRjsKIAorCQkJZGV2LT5jYW4uY2FuX3N0YXRzLmJ1c19vZmYrKzsKIAkJCWNhbl9idXNfb2ZmKGRldi0+bmV0ZGV2KTsKIAkJfSBlbHNlIGlmIChzdGF0ZSAmIFNKQTEwMDBfU1JfRVMpIHsKIAkJCWRldi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX1dBUk5JTkc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2VzZF91c2IyLmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2VzZF91c2IyLmMKaW5kZXggYzA2M2E1NC4uYmFjY2EwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9lc2RfdXNiMi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZXNkX3VzYjIuYwpAQCAtMjUwLDYgKzI1MCw3IEBACiAJCQljYXNlIEVTRF9CVVNTVEFURV9CVVNPRkY6CiAJCQkJcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX0JVU19PRkY7CiAJCQkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0JVU09GRjsKKwkJCQlwcml2LT5jYW4uY2FuX3N0YXRzLmJ1c19vZmYrKzsKIAkJCQljYW5fYnVzX29mZihwcml2LT5uZXRkZXYpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBFU0RfQlVTU1RBVEVfV0FSTjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2Iva3Zhc2VyX3VzYi5jIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiLmMKaW5kZXggYzMyY2Q2MS4uMjkyOGY3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9rdmFzZXJfdXNiLmMKQEAgLTYsMTAgKzYsMTIgQEAKICAqIFBhcnRzIG9mIHRoaXMgZHJpdmVyIGFyZSBiYXNlZCBvbiB0aGUgZm9sbG93aW5nOgogICogIC0gS3Zhc2VyIGxpbnV4IGxlYWYgZHJpdmVyICh2ZXJzaW9uIDQuNzgpCiAgKiAgLSBDQU4gZHJpdmVyIGZvciBlc2QgQ0FOLVVTQi8yCisgKiAgLSBLdmFzZXIgbGludXggdXNiY2FuSUkgZHJpdmVyICh2ZXJzaW9uIDUuMykKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNiBLVkFTRVIgQUIsIFN3ZWRlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBNYXR0aGlhcyBGdWNocyA8bWF0dGhpYXMuZnVjaHNAZXNkLmV1PiwgZXNkIGdtYmgKICAqIENvcHlyaWdodCAoQykgMjAxMiBPbGl2aWVyIFNvYnJpZSA8b2xpdmllckBzb2JyaWUuYmU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgVmFsZW8gUy5BLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CkBAIC0zMCw4ICszMiw5IEBACiAjZGVmaW5lIFJYX0JVRkZFUl9TSVpFCQkJMzA3MgogI2RlZmluZSBDQU5fVVNCX0NMT0NLCQkJODAwMDAwMAogI2RlZmluZSBNQVhfTkVUX0RFVklDRVMJCQkzCisjZGVmaW5lIE1BWF9VU0JDQU5fTkVUX0RFVklDRVMJCTIKIAotLyogS3Zhc2VyIFVTQiBkZXZpY2VzICovCisvKiBLdmFzZXIgTGVhZiBVU0IgZGV2aWNlcyAqLwogI2RlZmluZSBLVkFTRVJfVkVORE9SX0lECQkweDBiZmQKICNkZWZpbmUgVVNCX0xFQUZfREVWRUxfUFJPRFVDVF9JRAkxMAogI2RlZmluZSBVU0JfTEVBRl9MSVRFX1BST0RVQ1RfSUQJMTEKQEAgLTU2LDYgKzU5LDI0IEBACiAjZGVmaW5lIFVTQl9MRUFGX0xJVEVfVjJfUFJPRFVDVF9JRAkyODgKICNkZWZpbmUgVVNCX01JTklfUENJRV9IU19QUk9EVUNUX0lECTI4OQogCitzdGF0aWMgaW5saW5lIGJvb2wga3Zhc2VyX2lzX2xlYWYoY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXJldHVybiBpZC0+aWRQcm9kdWN0ID49IFVTQl9MRUFGX0RFVkVMX1BST0RVQ1RfSUQgJiYKKwkgICAgICAgaWQtPmlkUHJvZHVjdCA8PSBVU0JfTUlOSV9QQ0lFX0hTX1BST0RVQ1RfSUQ7Cit9CisKKy8qIEt2YXNlciBVU0JDYW4tSUkgZGV2aWNlcyAqLworI2RlZmluZSBVU0JfVVNCQ0FOX1JFVkJfUFJPRFVDVF9JRAkyCisjZGVmaW5lIFVTQl9WQ0kyX1BST0RVQ1RfSUQJCTMKKyNkZWZpbmUgVVNCX1VTQkNBTjJfUFJPRFVDVF9JRAkJNAorI2RlZmluZSBVU0JfTUVNT1JBVE9SX1BST0RVQ1RfSUQJNQorCitzdGF0aWMgaW5saW5lIGJvb2wga3Zhc2VyX2lzX3VzYmNhbihjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGlkLT5pZFByb2R1Y3QgPj0gVVNCX1VTQkNBTl9SRVZCX1BST0RVQ1RfSUQgJiYKKwkgICAgICAgaWQtPmlkUHJvZHVjdCA8PSBVU0JfTUVNT1JBVE9SX1BST0RVQ1RfSUQ7Cit9CisKIC8qIFVTQiBkZXZpY2VzIGZlYXR1cmVzICovCiAjZGVmaW5lIEtWQVNFUl9IQVNfU0lMRU5UX01PREUJCUJJVCgwKQogI2RlZmluZSBLVkFTRVJfSEFTX1RYUlhfRVJST1JTCQlCSVQoMSkKQEAgLTczLDcgKzk0LDcgQEAKICNkZWZpbmUgTVNHX0ZMQUdfVFhfQUNLCQkJQklUKDYpCiAjZGVmaW5lIE1TR19GTEFHX1RYX1JFUVVFU1QJCUJJVCg3KQogCi0vKiBDYW4gc3RhdGVzICovCisvKiBDYW4gc3RhdGVzIChNMTZDIEN4U1RSSCByZWdpc3RlcikgKi8KICNkZWZpbmUgTTE2Q19TVEFURV9CVVNfUkVTRVQJCUJJVCgwKQogI2RlZmluZSBNMTZDX1NUQVRFX0JVU19FUlJPUgkJQklUKDQpCiAjZGVmaW5lIE0xNkNfU1RBVEVfQlVTX1BBU1NJVkUJCUJJVCg1KQpAQCAtOTgsNyArMTE5LDExIEBACiAjZGVmaW5lIENNRF9TVEFSVF9DSElQX1JFUExZCQkyNwogI2RlZmluZSBDTURfU1RPUF9DSElQCQkJMjgKICNkZWZpbmUgQ01EX1NUT1BfQ0hJUF9SRVBMWQkJMjkKLSNkZWZpbmUgQ01EX0dFVF9DQVJEX0lORk8yCQkzMgorCisjZGVmaW5lIENNRF9MRUFGX0dFVF9DQVJEX0lORk8yCQkzMgorI2RlZmluZSBDTURfVVNCQ0FOX1JFU0VUX0NMT0NLCQkzMgorI2RlZmluZSBDTURfVVNCQ0FOX0NMT0NLX09WRVJGTE9XX0VWRU5UCTMzCisKICNkZWZpbmUgQ01EX0dFVF9DQVJEX0lORk8JCTM0CiAjZGVmaW5lIENNRF9HRVRfQ0FSRF9JTkZPX1JFUExZCQkzNQogI2RlZmluZSBDTURfR0VUX1NPRlRXQVJFX0lORk8JCTM4CkBAIC0xMDgsOCArMTMzLDkgQEAKICNkZWZpbmUgQ01EX1JFU0VUX0VSUk9SX0NPVU5URVIJCTQ5CiAjZGVmaW5lIENNRF9UWF9BQ0tOT1dMRURHRQkJNTAKICNkZWZpbmUgQ01EX0NBTl9FUlJPUl9FVkVOVAkJNTEKLSNkZWZpbmUgQ01EX1VTQl9USFJPVFRMRQkJNzcKLSNkZWZpbmUgQ01EX0xPR19NRVNTQUdFCQkJMTA2CisKKyNkZWZpbmUgQ01EX0xFQUZfVVNCX1RIUk9UVExFCQk3NworI2RlZmluZSBDTURfTEVBRl9MT0dfTUVTU0FHRQkJMTA2CiAKIC8qIGVycm9yIGZhY3RvcnMgKi8KICNkZWZpbmUgTTE2Q19FRl9BQ0tFCQkJQklUKDApCkBAIC0xMjEsNiArMTQ3LDE0IEBACiAjZGVmaW5lIE0xNkNfRUZfUkNWRQkJCUJJVCg2KQogI2RlZmluZSBNMTZDX0VGX1RSRQkJCUJJVCg3KQogCisvKiBPbmx5IExlYWYtYmFzZWQgZGV2aWNlcyBjYW4gcmVwb3J0IE0xNkMgZXJyb3IgZmFjdG9ycywKKyAqIHRodXMgZGVmaW5lIG91ciBvd24gZXJyb3Igc3RhdHVzIGZsYWdzIGZvciBVU0JDQU5JSQorICovCisjZGVmaW5lIFVTQkNBTl9FUlJPUl9TVEFURV9OT05FCQkwCisjZGVmaW5lIFVTQkNBTl9FUlJPUl9TVEFURV9UWF9FUlJPUglCSVQoMCkKKyNkZWZpbmUgVVNCQ0FOX0VSUk9SX1NUQVRFX1JYX0VSUk9SCUJJVCgxKQorI2RlZmluZSBVU0JDQU5fRVJST1JfU1RBVEVfQlVTRVJST1IJQklUKDIpCisKIC8qIGJpdHRpbWluZyBwYXJhbWV0ZXJzICovCiAjZGVmaW5lIEtWQVNFUl9VU0JfVFNFRzFfTUlOCQkxCiAjZGVmaW5lIEtWQVNFUl9VU0JfVFNFRzFfTUFYCQkxNgpAQCAtMTM3LDkgKzE3MSwxOCBAQAogI2RlZmluZSBLVkFTRVJfQ1RSTF9NT0RFX1NFTEZSRUNFUFRJT04JMwogI2RlZmluZSBLVkFTRVJfQ1RSTF9NT0RFX09GRgkJNAogCi0vKiBsb2cgbWVzc2FnZSAqLworLyogRXh0ZW5kZWQgQ0FOIGlkZW50aWZpZXIgZmxhZyAqLwogI2RlZmluZSBLVkFTRVJfRVhURU5ERURfRlJBTUUJCUJJVCgzMSkKIAorLyogS3Zhc2VyIFVTQiBDQU4gZG9uZ2xlcyBhcmUgZGl2aWRlZCBpbnRvIHR3byBtYWpvciBmYW1pbGllczoKKyAqIC0gTGVhZjogQmFzZWQgb24gUmVuZXNhcyBNMzJDLCBydW5uaW5nIGZpcm13YXJlIGxhYmVsZWQgYXMgJ2ZpbG8nCisgKiAtIFVzYmNhbklJOiBCYXNlZCBvbiBSZW5lc2FzIE0xNkMsIHJ1bm5pbmcgZmlybXdhcmUgbGFiZWxlZCBhcyAnaGVsaW9zJworICovCitlbnVtIGt2YXNlcl91c2JfZmFtaWx5IHsKKwlLVkFTRVJfTEVBRiwKKwlLVkFTRVJfVVNCQ0FOLAorfTsKKwogc3RydWN0IGt2YXNlcl9tc2dfc2ltcGxlIHsKIAl1OCB0aWQ7CiAJdTggY2hhbm5lbDsKQEAgLTE0OCwzMCArMTkxLDU1IEBACiBzdHJ1Y3Qga3Zhc2VyX21zZ19jYXJkaW5mbyB7CiAJdTggdGlkOwogCXU4IG5jaGFubmVsczsKLQlfX2xlMzIgc2VyaWFsX251bWJlcjsKLQlfX2xlMzIgcGFkZGluZzsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX2xlMzIgc2VyaWFsX251bWJlcjsKKwkJCV9fbGUzMiBwYWRkaW5nOworCQl9IF9fcGFja2VkIGxlYWYwOworCQlzdHJ1Y3QgeworCQkJX19sZTMyIHNlcmlhbF9udW1iZXJfbG93OworCQkJX19sZTMyIHNlcmlhbF9udW1iZXJfaGlnaDsKKwkJfSBfX3BhY2tlZCB1c2JjYW4wOworCX0gX19wYWNrZWQ7CiAJX19sZTMyIGNsb2NrX3Jlc29sdXRpb247CiAJX19sZTMyIG1mZ2RhdGU7CiAJdTggZWFuWzhdOwogCXU4IGh3X3JldmlzaW9uOwotCXU4IHVzYl9oc19tb2RlOwotCV9fbGUxNiBwYWRkaW5nMjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1OCB1c2JfaHNfbW9kZTsKKwkJfSBfX3BhY2tlZCBsZWFmMTsKKwkJc3RydWN0IHsKKwkJCXU4IHBhZGRpbmc7CisJCX0gX19wYWNrZWQgdXNiY2FuMTsKKwl9IF9fcGFja2VkOworCV9fbGUxNiBwYWRkaW5nOwogfSBfX3BhY2tlZDsKIAogc3RydWN0IGt2YXNlcl9tc2dfY2FyZGluZm8yIHsKIAl1OCB0aWQ7Ci0JdTggY2hhbm5lbDsKKwl1OCByZXNlcnZlZDsKIAl1OCBwY2JfaWRbMjRdOwogCV9fbGUzMiBvZW1fdW5sb2NrX2NvZGU7CiB9IF9fcGFja2VkOwogCi1zdHJ1Y3Qga3Zhc2VyX21zZ19zb2Z0aW5mbyB7CitzdHJ1Y3QgbGVhZl9tc2dfc29mdGluZm8gewogCXU4IHRpZDsKLQl1OCBjaGFubmVsOworCXU4IHBhZGRpbmcwOwogCV9fbGUzMiBzd19vcHRpb25zOwogCV9fbGUzMiBmd192ZXJzaW9uOwogCV9fbGUxNiBtYXhfb3V0c3RhbmRpbmdfdHg7Ci0JX19sZTE2IHBhZGRpbmdbOV07CisJX19sZTE2IHBhZGRpbmcxWzldOworfSBfX3BhY2tlZDsKKworc3RydWN0IHVzYmNhbl9tc2dfc29mdGluZm8geworCXU4IHRpZDsKKwl1OCBmd19uYW1lWzVdOworCV9fbGUxNiBtYXhfb3V0c3RhbmRpbmdfdHg7CisJdTggcGFkZGluZ1s2XTsKKwlfX2xlMzIgZndfdmVyc2lvbjsKKwlfX2xlMTYgY2hlY2tzdW07CisJX19sZTE2IHN3X29wdGlvbnM7CiB9IF9fcGFja2VkOwogCiBzdHJ1Y3Qga3Zhc2VyX21zZ19idXNwYXJhbXMgewpAQCAtMTg4LDM2ICsyNTYsODYgQEAKIAl1OCBjaGFubmVsOwogCXU4IHRpZDsKIAl1OCBtc2dbMTRdOwotCXU4IHBhZGRpbmc7Ci0JdTggZmxhZ3M7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTggcGFkZGluZzsKKwkJCXU4IGZsYWdzOworCQl9IF9fcGFja2VkIGxlYWY7CisJCXN0cnVjdCB7CisJCQl1OCBmbGFnczsKKwkJCXU4IHBhZGRpbmc7CisJCX0gX19wYWNrZWQgdXNiY2FuOworCX0gX19wYWNrZWQ7CiB9IF9fcGFja2VkOwogCi1zdHJ1Y3Qga3Zhc2VyX21zZ19yeF9jYW4geworc3RydWN0IGt2YXNlcl9tc2dfcnhfY2FuX2hlYWRlciB7CiAJdTggY2hhbm5lbDsKIAl1OCBmbGFnOworfSBfX3BhY2tlZDsKKworc3RydWN0IGxlYWZfbXNnX3J4X2NhbiB7CisJdTggY2hhbm5lbDsKKwl1OCBmbGFnOworCiAJX19sZTE2IHRpbWVbM107CiAJdTggbXNnWzE0XTsKIH0gX19wYWNrZWQ7CiAKLXN0cnVjdCBrdmFzZXJfbXNnX2NoaXBfc3RhdGVfZXZlbnQgeworc3RydWN0IHVzYmNhbl9tc2dfcnhfY2FuIHsKKwl1OCBjaGFubmVsOworCXU4IGZsYWc7CisKKwl1OCBtc2dbMTRdOworCV9fbGUxNiB0aW1lOworfSBfX3BhY2tlZDsKKworc3RydWN0IGxlYWZfbXNnX2NoaXBfc3RhdGVfZXZlbnQgewogCXU4IHRpZDsKIAl1OCBjaGFubmVsOworCiAJX19sZTE2IHRpbWVbM107CiAJdTggdHhfZXJyb3JzX2NvdW50OwogCXU4IHJ4X2Vycm9yc19jb3VudDsKKwogCXU4IHN0YXR1czsKIAl1OCBwYWRkaW5nWzNdOwogfSBfX3BhY2tlZDsKIAotc3RydWN0IGt2YXNlcl9tc2dfdHhfYWNrbm93bGVkZ2Ugeworc3RydWN0IHVzYmNhbl9tc2dfY2hpcF9zdGF0ZV9ldmVudCB7CisJdTggdGlkOworCXU4IGNoYW5uZWw7CisKKwl1OCB0eF9lcnJvcnNfY291bnQ7CisJdTggcnhfZXJyb3JzX2NvdW50OworCV9fbGUxNiB0aW1lOworCisJdTggc3RhdHVzOworCXU4IHBhZGRpbmdbM107Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qga3Zhc2VyX21zZ190eF9hY2tub3dsZWRnZV9oZWFkZXIgewogCXU4IGNoYW5uZWw7CiAJdTggdGlkOworfSBfX3BhY2tlZDsKKworc3RydWN0IGxlYWZfbXNnX3R4X2Fja25vd2xlZGdlIHsKKwl1OCBjaGFubmVsOworCXU4IHRpZDsKKwogCV9fbGUxNiB0aW1lWzNdOwogCXU4IGZsYWdzOwogCXU4IHRpbWVfb2Zmc2V0OwogfSBfX3BhY2tlZDsKIAotc3RydWN0IGt2YXNlcl9tc2dfZXJyb3JfZXZlbnQgeworc3RydWN0IHVzYmNhbl9tc2dfdHhfYWNrbm93bGVkZ2UgeworCXU4IGNoYW5uZWw7CisJdTggdGlkOworCisJX19sZTE2IHRpbWU7CisJX19sZTE2IHBhZGRpbmc7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbGVhZl9tc2dfZXJyb3JfZXZlbnQgewogCXU4IHRpZDsKIAl1OCBmbGFnczsKIAlfX2xlMTYgdGltZVszXTsKQEAgLTIyOSw2ICszNDcsMTggQEAKIAl1OCBlcnJvcl9mYWN0b3I7CiB9IF9fcGFja2VkOwogCitzdHJ1Y3QgdXNiY2FuX21zZ19lcnJvcl9ldmVudCB7CisJdTggdGlkOworCXU4IHBhZGRpbmc7CisJdTggdHhfZXJyb3JzX2NvdW50X2NoMDsKKwl1OCByeF9lcnJvcnNfY291bnRfY2gwOworCXU4IHR4X2Vycm9yc19jb3VudF9jaDE7CisJdTggcnhfZXJyb3JzX2NvdW50X2NoMTsKKwl1OCBzdGF0dXNfY2gwOworCXU4IHN0YXR1c19jaDE7CisJX19sZTE2IHRpbWU7Cit9IF9fcGFja2VkOworCiBzdHJ1Y3Qga3Zhc2VyX21zZ19jdHJsX21vZGUgewogCXU4IHRpZDsKIAl1OCBjaGFubmVsOwpAQCAtMjQzLDcgKzM3Myw3IEBACiAJdTggcGFkZGluZ1szXTsKIH0gX19wYWNrZWQ7CiAKLXN0cnVjdCBrdmFzZXJfbXNnX2xvZ19tZXNzYWdlIHsKK3N0cnVjdCBsZWFmX21zZ19sb2dfbWVzc2FnZSB7CiAJdTggY2hhbm5lbDsKIAl1OCBmbGFnczsKIAlfX2xlMTYgdGltZVszXTsKQEAgLTI2MCwxOSArMzkwLDU3IEBACiAJCXN0cnVjdCBrdmFzZXJfbXNnX3NpbXBsZSBzaW1wbGU7CiAJCXN0cnVjdCBrdmFzZXJfbXNnX2NhcmRpbmZvIGNhcmRpbmZvOwogCQlzdHJ1Y3Qga3Zhc2VyX21zZ19jYXJkaW5mbzIgY2FyZGluZm8yOwotCQlzdHJ1Y3Qga3Zhc2VyX21zZ19zb2Z0aW5mbyBzb2Z0aW5mbzsKIAkJc3RydWN0IGt2YXNlcl9tc2dfYnVzcGFyYW1zIGJ1c3BhcmFtczsKKworCQlzdHJ1Y3Qga3Zhc2VyX21zZ19yeF9jYW5faGVhZGVyIHJ4X2Nhbl9oZWFkZXI7CisJCXN0cnVjdCBrdmFzZXJfbXNnX3R4X2Fja25vd2xlZGdlX2hlYWRlciB0eF9hY2tub3dsZWRnZV9oZWFkZXI7CisKKwkJdW5pb24geworCQkJc3RydWN0IGxlYWZfbXNnX3NvZnRpbmZvIHNvZnRpbmZvOworCQkJc3RydWN0IGxlYWZfbXNnX3J4X2NhbiByeF9jYW47CisJCQlzdHJ1Y3QgbGVhZl9tc2dfY2hpcF9zdGF0ZV9ldmVudCBjaGlwX3N0YXRlX2V2ZW50OworCQkJc3RydWN0IGxlYWZfbXNnX3R4X2Fja25vd2xlZGdlIHR4X2Fja25vd2xlZGdlOworCQkJc3RydWN0IGxlYWZfbXNnX2Vycm9yX2V2ZW50IGVycm9yX2V2ZW50OworCQkJc3RydWN0IGxlYWZfbXNnX2xvZ19tZXNzYWdlIGxvZ19tZXNzYWdlOworCQl9IF9fcGFja2VkIGxlYWY7CisKKwkJdW5pb24geworCQkJc3RydWN0IHVzYmNhbl9tc2dfc29mdGluZm8gc29mdGluZm87CisJCQlzdHJ1Y3QgdXNiY2FuX21zZ19yeF9jYW4gcnhfY2FuOworCQkJc3RydWN0IHVzYmNhbl9tc2dfY2hpcF9zdGF0ZV9ldmVudCBjaGlwX3N0YXRlX2V2ZW50OworCQkJc3RydWN0IHVzYmNhbl9tc2dfdHhfYWNrbm93bGVkZ2UgdHhfYWNrbm93bGVkZ2U7CisJCQlzdHJ1Y3QgdXNiY2FuX21zZ19lcnJvcl9ldmVudCBlcnJvcl9ldmVudDsKKwkJfSBfX3BhY2tlZCB1c2JjYW47CisKIAkJc3RydWN0IGt2YXNlcl9tc2dfdHhfY2FuIHR4X2NhbjsKLQkJc3RydWN0IGt2YXNlcl9tc2dfcnhfY2FuIHJ4X2NhbjsKLQkJc3RydWN0IGt2YXNlcl9tc2dfY2hpcF9zdGF0ZV9ldmVudCBjaGlwX3N0YXRlX2V2ZW50OwotCQlzdHJ1Y3Qga3Zhc2VyX21zZ190eF9hY2tub3dsZWRnZSB0eF9hY2tub3dsZWRnZTsKLQkJc3RydWN0IGt2YXNlcl9tc2dfZXJyb3JfZXZlbnQgZXJyb3JfZXZlbnQ7CiAJCXN0cnVjdCBrdmFzZXJfbXNnX2N0cmxfbW9kZSBjdHJsX21vZGU7CiAJCXN0cnVjdCBrdmFzZXJfbXNnX2ZsdXNoX3F1ZXVlIGZsdXNoX3F1ZXVlOwotCQlzdHJ1Y3Qga3Zhc2VyX21zZ19sb2dfbWVzc2FnZSBsb2dfbWVzc2FnZTsKIAl9IHU7CiB9IF9fcGFja2VkOwogCisvKiBTdW1tYXJ5IG9mIGEga3Zhc2VyIGVycm9yIGV2ZW50LCBmb3IgYSB1bmlmaWVkIExlYWYvVXNiY2FuIGVycm9yCisgKiBoYW5kbGluZy4gU29tZSBkaXNjcmVwYW5jaWVzIGJldHdlZW4gdGhlIHR3byBmYW1pbGllcyBleGlzdDoKKyAqCisgKiAtIFVTQkNBTiBmaXJtd2FyZSBkb2VzIG5vdCByZXBvcnQgTTE2QyAiZXJyb3IgZmFjdG9ycyIKKyAqIC0gVVNCQ0FOIGNvbnRyb2xsZXJzIGhhcyBkaWZmaWN1bHRpZXMgcmVwb3J0aW5nIGlmIHRoZSByYWlzZWQgZXJyb3IKKyAqICAgZXZlbnQgaXMgZm9yIGNoMCBvciBjaDEuIFRoZXkgbGVhdmUgc3VjaCBhcmJpdHJhdGlvbiB0byB0aGUgT1MKKyAqICAgZHJpdmVyIGJ5IGxldHRpbmcgaXQgY29tcGFyZSBlcnJvciBjb3VudGVycyB3aXRoIHByZXZpb3VzIHZhbHVlcworICogICBhbmQgZGVjaWRlIHRoZSBlcnJvciBldmVudCdzIGNoYW5uZWwuIFRodXMgZm9yIFVTQkNBTiwgdGhlIGNoYW5uZWwKKyAqICAgZmllbGQgaXMgb25seSBhZHZpc29yeS4KKyAqLworc3RydWN0IGt2YXNlcl91c2JfZXJyb3Jfc3VtbWFyeSB7CisJdTggY2hhbm5lbCwgc3RhdHVzLCB0eGVyciwgcnhlcnI7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTggZXJyb3JfZmFjdG9yOworCQl9IGxlYWY7CisJCXN0cnVjdCB7CisJCQl1OCBvdGhlcl9jaF9zdGF0dXM7CisJCQl1OCBlcnJvcl9zdGF0ZTsKKwkJfSB1c2JjYW47CisJfTsKK307CisKIHN0cnVjdCBrdmFzZXJfdXNiX3R4X3VyYl9jb250ZXh0IHsKIAlzdHJ1Y3Qga3Zhc2VyX3VzYl9uZXRfcHJpdiAqcHJpdjsKIAl1MzIgZWNob19pbmRleDsKQEAgLTI4OCw2ICs0NTYsNyBAQAogCiAJdTMyIGZ3X3ZlcnNpb247CiAJdW5zaWduZWQgaW50IG5jaGFubmVsczsKKwllbnVtIGt2YXNlcl91c2JfZmFtaWx5IGZhbWlseTsKIAogCWJvb2wgcnhpbml0ZG9uZTsKIAl2b2lkICpyeGJ1ZltNQVhfUlhfVVJCU107CkBAIC0zMTEsNiArNDgwLDcgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrdmFzZXJfdXNiX3RhYmxlW10gPSB7CisJLyogTGVhZiBmYW1pbHkgSURzICovCiAJeyBVU0JfREVWSUNFKEtWQVNFUl9WRU5ET1JfSUQsIFVTQl9MRUFGX0RFVkVMX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKEtWQVNFUl9WRU5ET1JfSUQsIFVTQl9MRUFGX0xJVEVfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoS1ZBU0VSX1ZFTkRPUl9JRCwgVVNCX0xFQUZfUFJPX1BST0RVQ1RfSUQpLApAQCAtMzYwLDYgKzUzMCwxNyBAQAogCQkuZHJpdmVyX2luZm8gPSBLVkFTRVJfSEFTX1RYUlhfRVJST1JTIH0sCiAJeyBVU0JfREVWSUNFKEtWQVNFUl9WRU5ET1JfSUQsIFVTQl9MRUFGX0xJVEVfVjJfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoS1ZBU0VSX1ZFTkRPUl9JRCwgVVNCX01JTklfUENJRV9IU19QUk9EVUNUX0lEKSB9LAorCisJLyogVVNCQ0FOSUkgZmFtaWx5IElEcyAqLworCXsgVVNCX0RFVklDRShLVkFTRVJfVkVORE9SX0lELCBVU0JfVVNCQ0FOMl9QUk9EVUNUX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gS1ZBU0VSX0hBU19UWFJYX0VSUk9SUyB9LAorCXsgVVNCX0RFVklDRShLVkFTRVJfVkVORE9SX0lELCBVU0JfVVNCQ0FOX1JFVkJfUFJPRFVDVF9JRCksCisJCS5kcml2ZXJfaW5mbyA9IEtWQVNFUl9IQVNfVFhSWF9FUlJPUlMgfSwKKwl7IFVTQl9ERVZJQ0UoS1ZBU0VSX1ZFTkRPUl9JRCwgVVNCX01FTU9SQVRPUl9QUk9EVUNUX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gS1ZBU0VSX0hBU19UWFJYX0VSUk9SUyB9LAorCXsgVVNCX0RFVklDRShLVkFTRVJfVkVORE9SX0lELCBVU0JfVkNJMl9QUk9EVUNUX0lEKSwKKwkJLmRyaXZlcl9pbmZvID0gS1ZBU0VSX0hBU19UWFJYX0VSUk9SUyB9LAorCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGt2YXNlcl91c2JfdGFibGUpOwpAQCAtNDYzLDcgKzY0NCwxNCBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlkZXYtPmZ3X3ZlcnNpb24gPSBsZTMyX3RvX2NwdShtc2cudS5zb2Z0aW5mby5md192ZXJzaW9uKTsKKwlzd2l0Y2ggKGRldi0+ZmFtaWx5KSB7CisJY2FzZSBLVkFTRVJfTEVBRjoKKwkJZGV2LT5md192ZXJzaW9uID0gbGUzMl90b19jcHUobXNnLnUubGVhZi5zb2Z0aW5mby5md192ZXJzaW9uKTsKKwkJYnJlYWs7CisJY2FzZSBLVkFTRVJfVVNCQ0FOOgorCQlkZXYtPmZ3X3ZlcnNpb24gPSBsZTMyX3RvX2NwdShtc2cudS51c2JjYW4uc29mdGluZm8uZndfdmVyc2lvbik7CisJCWJyZWFrOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtNDgyLDcgKzY3MCw5IEBACiAJCXJldHVybiBlcnI7CiAKIAlkZXYtPm5jaGFubmVscyA9IG1zZy51LmNhcmRpbmZvLm5jaGFubmVsczsKLQlpZiAoZGV2LT5uY2hhbm5lbHMgPiBNQVhfTkVUX0RFVklDRVMpCisJaWYgKChkZXYtPm5jaGFubmVscyA+IE1BWF9ORVRfREVWSUNFUykgfHwKKwkgICAgKGRldi0+ZmFtaWx5ID09IEtWQVNFUl9VU0JDQU4gJiYKKwkgICAgIGRldi0+bmNoYW5uZWxzID4gTUFYX1VTQkNBTl9ORVRfREVWSUNFUykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIDA7CkBAIC00OTYsOCArNjg2LDEwIEBACiAJc3RydWN0IGt2YXNlcl91c2JfbmV0X3ByaXYgKnByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgY2FuX2ZyYW1lICpjZjsKLQl1OCBjaGFubmVsID0gbXNnLT51LnR4X2Fja25vd2xlZGdlLmNoYW5uZWw7Ci0JdTggdGlkID0gbXNnLT51LnR4X2Fja25vd2xlZGdlLnRpZDsKKwl1OCBjaGFubmVsLCB0aWQ7CisKKwljaGFubmVsID0gbXNnLT51LnR4X2Fja25vd2xlZGdlX2hlYWRlci5jaGFubmVsOworCXRpZCA9IG1zZy0+dS50eF9hY2tub3dsZWRnZV9oZWFkZXIudGlkOwogCiAJaWYgKGNoYW5uZWwgPj0gZGV2LT5uY2hhbm5lbHMpIHsKIAkJZGV2X2VycihkZXYtPnVkZXYtPmRldi5wYXJlbnQsCkBAIC01ODcsNyArNzc5LDcgQEAKIAkJCSAgdXNiX3NuZGJ1bGtwaXBlKGRldi0+dWRldiwKIAkJCQkJICBkZXYtPmJ1bGtfb3V0LT5iRW5kcG9pbnRBZGRyZXNzKSwKIAkJCSAgYnVmLCBtc2ctPmxlbiwKLQkJCSAga3Zhc2VyX3VzYl9zaW1wbGVfbXNnX2NhbGxiYWNrLCBwcml2KTsKKwkJCSAga3Zhc2VyX3VzYl9zaW1wbGVfbXNnX2NhbGxiYWNrLCBuZXRkZXYpOwogCXVzYl9hbmNob3JfdXJiKHVyYiwgJnByaXYtPnR4X3N1Ym1pdHRlZCk7CiAKIAllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwpAQCAtNjE1LDQ0ICs4MDcsMTc1IEBACiAJCXByaXYtPnR4X2NvbnRleHRzW2ldLmVjaG9faW5kZXggPSBNQVhfVFhfVVJCUzsKIH0KIAotc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9yeF9lcnJvcihjb25zdCBzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LAotCQkJCWNvbnN0IHN0cnVjdCBrdmFzZXJfbXNnICptc2cpCitzdGF0aWMgdm9pZCBrdmFzZXJfdXNiX3J4X2Vycm9yX3VwZGF0ZV9jYW5fc3RhdGUoc3RydWN0IGt2YXNlcl91c2JfbmV0X3ByaXYgKnByaXYsCisJCQkJCQkgY29uc3Qgc3RydWN0IGt2YXNlcl91c2JfZXJyb3Jfc3VtbWFyeSAqZXMsCisJCQkJCQkgc3RydWN0IGNhbl9mcmFtZSAqY2YpCiB7Ci0Jc3RydWN0IGNhbl9mcmFtZSAqY2Y7CisJc3RydWN0IGt2YXNlcl91c2IgKmRldiA9IHByaXYtPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmcHJpdi0+bmV0ZGV2LT5zdGF0czsKKwllbnVtIGNhbl9zdGF0ZSBjdXJfc3RhdGUsIG5ld19zdGF0ZSwgdHhfc3RhdGUsIHJ4X3N0YXRlOworCisJbmV0ZGV2X2RiZyhwcml2LT5uZXRkZXYsICJFcnJvciBzdGF0dXM6IDB4JTAyeFxuIiwgZXMtPnN0YXR1cyk7CisKKwluZXdfc3RhdGUgPSBjdXJfc3RhdGUgPSBwcml2LT5jYW4uc3RhdGU7CisKKwlpZiAoZXMtPnN0YXR1cyAmIChNMTZDX1NUQVRFX0JVU19PRkYgfCBNMTZDX1NUQVRFX0JVU19SRVNFVCkpCisJCW5ld19zdGF0ZSA9IENBTl9TVEFURV9CVVNfT0ZGOworCWVsc2UgaWYgKGVzLT5zdGF0dXMgJiBNMTZDX1NUQVRFX0JVU19QQVNTSVZFKQorCQluZXdfc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfUEFTU0lWRTsKKwllbHNlIGlmIChlcy0+c3RhdHVzICYgTTE2Q19TVEFURV9CVVNfRVJST1IpIHsKKwkJLyogR3VhcmQgYWdhaW5zdCBzcHVyaW91cyBlcnJvciBldmVudHMgYWZ0ZXIgYSBidXNvZmYgKi8KKwkJaWYgKGN1cl9zdGF0ZSA8IENBTl9TVEFURV9CVVNfT0ZGKSB7CisJCQlpZiAoKGVzLT50eGVyciA+PSAxMjgpIHx8IChlcy0+cnhlcnIgPj0gMTI4KSkKKwkJCQluZXdfc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfUEFTU0lWRTsKKwkJCWVsc2UgaWYgKChlcy0+dHhlcnIgPj0gOTYpIHx8IChlcy0+cnhlcnIgPj0gOTYpKQorCQkJCW5ld19zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9XQVJOSU5HOworCQkJZWxzZSBpZiAoY3VyX3N0YXRlID4gQ0FOX1NUQVRFX0VSUk9SX0FDVElWRSkKKwkJCQluZXdfc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfQUNUSVZFOworCQl9CisJfQorCisJaWYgKCFlcy0+c3RhdHVzKQorCQluZXdfc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfQUNUSVZFOworCisJaWYgKG5ld19zdGF0ZSAhPSBjdXJfc3RhdGUpIHsKKwkJdHhfc3RhdGUgPSAoZXMtPnR4ZXJyID49IGVzLT5yeGVycikgPyBuZXdfc3RhdGUgOiAwOworCQlyeF9zdGF0ZSA9IChlcy0+dHhlcnIgPD0gZXMtPnJ4ZXJyKSA/IG5ld19zdGF0ZSA6IDA7CisKKwkJY2FuX2NoYW5nZV9zdGF0ZShwcml2LT5uZXRkZXYsIGNmLCB0eF9zdGF0ZSwgcnhfc3RhdGUpOworCX0KKworCWlmIChwcml2LT5jYW4ucmVzdGFydF9tcyAmJgorCSAgICAoY3VyX3N0YXRlID49IENBTl9TVEFURV9CVVNfT0ZGKSAmJgorCSAgICAobmV3X3N0YXRlIDwgQ0FOX1NUQVRFX0JVU19PRkYpKSB7CisJCXByaXYtPmNhbi5jYW5fc3RhdHMucmVzdGFydHMrKzsKKwl9CisKKwlzd2l0Y2ggKGRldi0+ZmFtaWx5KSB7CisJY2FzZSBLVkFTRVJfTEVBRjoKKwkJaWYgKGVzLT5sZWFmLmVycm9yX2ZhY3RvcikgeworCQkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5idXNfZXJyb3IrKzsKKwkJCXN0YXRzLT5yeF9lcnJvcnMrKzsKKwkJfQorCQlicmVhazsKKwljYXNlIEtWQVNFUl9VU0JDQU46CisJCWlmIChlcy0+dXNiY2FuLmVycm9yX3N0YXRlICYgVVNCQ0FOX0VSUk9SX1NUQVRFX1RYX0VSUk9SKQorCQkJc3RhdHMtPnR4X2Vycm9ycysrOworCQlpZiAoZXMtPnVzYmNhbi5lcnJvcl9zdGF0ZSAmIFVTQkNBTl9FUlJPUl9TVEFURV9SWF9FUlJPUikKKwkJCXN0YXRzLT5yeF9lcnJvcnMrKzsKKwkJaWYgKGVzLT51c2JjYW4uZXJyb3Jfc3RhdGUgJiBVU0JDQU5fRVJST1JfU1RBVEVfQlVTRVJST1IpIHsKKwkJCXByaXYtPmNhbi5jYW5fc3RhdHMuYnVzX2Vycm9yKys7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcHJpdi0+YmVjLnR4ZXJyID0gZXMtPnR4ZXJyOworCXByaXYtPmJlYy5yeGVyciA9IGVzLT5yeGVycjsKK30KKworc3RhdGljIHZvaWQga3Zhc2VyX3VzYl9yeF9lcnJvcihjb25zdCBzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBrdmFzZXJfdXNiX2Vycm9yX3N1bW1hcnkgKmVzKQoreworCXN0cnVjdCBjYW5fZnJhbWUgKmNmLCB0bXBfY2YgPSB7IC5jYW5faWQgPSBDQU5fRVJSX0ZMQUcsIC5jYW5fZGxjID0gQ0FOX0VSUl9ETEMgfTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKIAlzdHJ1Y3Qga3Zhc2VyX3VzYl9uZXRfcHJpdiAqcHJpdjsKLQl1bnNpZ25lZCBpbnQgbmV3X3N0YXRlOwotCXU4IGNoYW5uZWwsIHN0YXR1cywgdHhlcnIsIHJ4ZXJyLCBlcnJvcl9mYWN0b3I7CisJZW51bSBjYW5fc3RhdGUgb2xkX3N0YXRlLCBuZXdfc3RhdGU7CiAKLQlzd2l0Y2ggKG1zZy0+aWQpIHsKLQljYXNlIENNRF9DQU5fRVJST1JfRVZFTlQ6Ci0JCWNoYW5uZWwgPSBtc2ctPnUuZXJyb3JfZXZlbnQuY2hhbm5lbDsKLQkJc3RhdHVzID0gIG1zZy0+dS5lcnJvcl9ldmVudC5zdGF0dXM7Ci0JCXR4ZXJyID0gbXNnLT51LmVycm9yX2V2ZW50LnR4X2Vycm9yc19jb3VudDsKLQkJcnhlcnIgPSBtc2ctPnUuZXJyb3JfZXZlbnQucnhfZXJyb3JzX2NvdW50OwotCQllcnJvcl9mYWN0b3IgPSBtc2ctPnUuZXJyb3JfZXZlbnQuZXJyb3JfZmFjdG9yOwotCQlicmVhazsKLQljYXNlIENNRF9MT0dfTUVTU0FHRToKLQkJY2hhbm5lbCA9IG1zZy0+dS5sb2dfbWVzc2FnZS5jaGFubmVsOwotCQlzdGF0dXMgPSBtc2ctPnUubG9nX21lc3NhZ2UuZGF0YVswXTsKLQkJdHhlcnIgPSBtc2ctPnUubG9nX21lc3NhZ2UuZGF0YVsyXTsKLQkJcnhlcnIgPSBtc2ctPnUubG9nX21lc3NhZ2UuZGF0YVszXTsKLQkJZXJyb3JfZmFjdG9yID0gbXNnLT51LmxvZ19tZXNzYWdlLmRhdGFbMV07Ci0JCWJyZWFrOwotCWNhc2UgQ01EX0NISVBfU1RBVEVfRVZFTlQ6Ci0JCWNoYW5uZWwgPSBtc2ctPnUuY2hpcF9zdGF0ZV9ldmVudC5jaGFubmVsOwotCQlzdGF0dXMgPSAgbXNnLT51LmNoaXBfc3RhdGVfZXZlbnQuc3RhdHVzOwotCQl0eGVyciA9IG1zZy0+dS5jaGlwX3N0YXRlX2V2ZW50LnR4X2Vycm9yc19jb3VudDsKLQkJcnhlcnIgPSBtc2ctPnUuY2hpcF9zdGF0ZV9ldmVudC5yeF9lcnJvcnNfY291bnQ7Ci0JCWVycm9yX2ZhY3RvciA9IDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl9lcnIoZGV2LT51ZGV2LT5kZXYucGFyZW50LCAiSW52YWxpZCBtc2cgaWQgKCVkKVxuIiwKLQkJCW1zZy0+aWQpOworCWlmIChlcy0+Y2hhbm5lbCA+PSBkZXYtPm5jaGFubmVscykgeworCQlkZXZfZXJyKGRldi0+dWRldi0+ZGV2LnBhcmVudCwKKwkJCSJJbnZhbGlkIGNoYW5uZWwgbnVtYmVyICglZClcbiIsIGVzLT5jaGFubmVsKTsKIAkJcmV0dXJuOwogCX0KIAorCXByaXYgPSBkZXYtPm5ldHNbZXMtPmNoYW5uZWxdOworCXN0YXRzID0gJnByaXYtPm5ldGRldi0+c3RhdHM7CisKKwkvKiBVcGRhdGUgYWxsIG9mIHRoZSBjYW4gaW50ZXJmYWNlJ3Mgc3RhdGUgYW5kIGVycm9yIGNvdW50ZXJzIGJlZm9yZQorCSAqIHRyeWluZyBhbnkgbWVtb3J5IGFsbG9jYXRpb24gdGhhdCBjYW4gYWN0dWFsbHkgZmFpbCB3aXRoIC1FTk9NRU0uCisJICoKKwkgKiBXZSBzZW5kIGEgdGVtcG9yYXJ5IHN0YWNrLWFsbG9jYXRlZCBlcnJvciBjYW4gZnJhbWUgdG8KKwkgKiBjYW5fY2hhbmdlX3N0YXRlKCkgZm9yIHRoZSB2ZXJ5IHNhbWUgcmVhc29uLgorCSAqCisJICogVE9ETzogU3BsaXQgY2FuX2NoYW5nZV9zdGF0ZSgpIHJlc3BvbnNpYmlsaXR5IGJldHdlZW4gdXBkYXRpbmcgdGhlCisJICogY2FuIGludGVyZmFjZSdzIHN0YXRlIGFuZCBjb3VudGVycywgYW5kIHRoZSBzZXR0aW5nIHVwIG9mIGNhbiBlcnJvcgorCSAqIGZyYW1lIElEIGFuZCBkYXRhIHRvIHVzZXJzcGFjZS4gUmVtb3ZlIHN0YWNrIGFsbG9jYXRpb24gYWZ0ZXJ3YXJkcy4KKwkgKi8KKwlvbGRfc3RhdGUgPSBwcml2LT5jYW4uc3RhdGU7CisJa3Zhc2VyX3VzYl9yeF9lcnJvcl91cGRhdGVfY2FuX3N0YXRlKHByaXYsIGVzLCAmdG1wX2NmKTsKKwluZXdfc3RhdGUgPSBwcml2LT5jYW4uc3RhdGU7CisKKwlza2IgPSBhbGxvY19jYW5fZXJyX3NrYihwcml2LT5uZXRkZXYsICZjZik7CisJaWYgKCFza2IpIHsKKwkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwkJcmV0dXJuOworCX0KKwltZW1jcHkoY2YsICZ0bXBfY2YsIHNpemVvZigqY2YpKTsKKworCWlmIChuZXdfc3RhdGUgIT0gb2xkX3N0YXRlKSB7CisJCWlmIChlcy0+c3RhdHVzICYKKwkJICAgIChNMTZDX1NUQVRFX0JVU19PRkYgfCBNMTZDX1NUQVRFX0JVU19SRVNFVCkpIHsKKwkJCWlmICghcHJpdi0+Y2FuLnJlc3RhcnRfbXMpCisJCQkJa3Zhc2VyX3VzYl9zaW1wbGVfbXNnX2FzeW5jKHByaXYsIENNRF9TVE9QX0NISVApOworCQkJbmV0aWZfY2Fycmllcl9vZmYocHJpdi0+bmV0ZGV2KTsKKwkJfQorCisJCWlmIChwcml2LT5jYW4ucmVzdGFydF9tcyAmJgorCQkgICAgKG9sZF9zdGF0ZSA+PSBDQU5fU1RBVEVfQlVTX09GRikgJiYKKwkJICAgIChuZXdfc3RhdGUgPCBDQU5fU1RBVEVfQlVTX09GRikpIHsKKwkJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9SRVNUQVJURUQ7CisJCQluZXRpZl9jYXJyaWVyX29uKHByaXYtPm5ldGRldik7CisJCX0KKwl9CisKKwlzd2l0Y2ggKGRldi0+ZmFtaWx5KSB7CisJY2FzZSBLVkFTRVJfTEVBRjoKKwkJaWYgKGVzLT5sZWFmLmVycm9yX2ZhY3RvcikgeworCQkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0JVU0VSUk9SIHwgQ0FOX0VSUl9QUk9UOworCisJCQlpZiAoZXMtPmxlYWYuZXJyb3JfZmFjdG9yICYgTTE2Q19FRl9BQ0tFKQorCQkJCWNmLT5kYXRhWzNdIHw9IChDQU5fRVJSX1BST1RfTE9DX0FDSyk7CisJCQlpZiAoZXMtPmxlYWYuZXJyb3JfZmFjdG9yICYgTTE2Q19FRl9DUkNFKQorCQkJCWNmLT5kYXRhWzNdIHw9IChDQU5fRVJSX1BST1RfTE9DX0NSQ19TRVEgfAorCQkJCQkJQ0FOX0VSUl9QUk9UX0xPQ19DUkNfREVMKTsKKwkJCWlmIChlcy0+bGVhZi5lcnJvcl9mYWN0b3IgJiBNMTZDX0VGX0ZPUk1FKQorCQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9GT1JNOworCQkJaWYgKGVzLT5sZWFmLmVycm9yX2ZhY3RvciAmIE0xNkNfRUZfU1RGRSkKKwkJCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfU1RVRkY7CisJCQlpZiAoZXMtPmxlYWYuZXJyb3JfZmFjdG9yICYgTTE2Q19FRl9CSVRFMCkKKwkJCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfQklUMDsKKwkJCWlmIChlcy0+bGVhZi5lcnJvcl9mYWN0b3IgJiBNMTZDX0VGX0JJVEUxKQorCQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9CSVQxOworCQkJaWYgKGVzLT5sZWFmLmVycm9yX2ZhY3RvciAmIE0xNkNfRUZfVFJFKQorCQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9UWDsKKwkJfQorCQlicmVhazsKKwljYXNlIEtWQVNFUl9VU0JDQU46CisJCWlmIChlcy0+dXNiY2FuLmVycm9yX3N0YXRlICYgVVNCQ0FOX0VSUk9SX1NUQVRFX0JVU0VSUk9SKSB7CisJCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfQlVTRVJST1I7CisJCX0KKwkJYnJlYWs7CisJfQorCisJY2YtPmRhdGFbNl0gPSBlcy0+dHhlcnI7CisJY2YtPmRhdGFbN10gPSBlcy0+cnhlcnI7CisKKwlzdGF0cy0+cnhfcGFja2V0cysrOworCXN0YXRzLT5yeF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKKwluZXRpZl9yeChza2IpOworfQorCisvKiBGb3IgVVNCQ0FOLCByZXBvcnQgZXJyb3IgdG8gdXNlcnNwYWNlIGlmZiB0aGUgY2hhbm5lbHMncyBlcnJvcnMgY291bnRlcgorICogaGFzIGNoYW5nZWQsIG9yIHdlJ3JlIHRoZSBvbmx5IGNoYW5uZWwgc2VlaW5nIGEgYnVzIGVycm9yIHN0YXRlLgorICovCitzdGF0aWMgdm9pZCBrdmFzZXJfdXNiY2FuX2NvbmRpdGlvbmFsbHlfcnhfZXJyb3IoY29uc3Qgc3RydWN0IGt2YXNlcl91c2IgKmRldiwKKwkJCQkJCSBzdHJ1Y3Qga3Zhc2VyX3VzYl9lcnJvcl9zdW1tYXJ5ICplcykKK3sKKwlzdHJ1Y3Qga3Zhc2VyX3VzYl9uZXRfcHJpdiAqcHJpdjsKKwlpbnQgY2hhbm5lbDsKKwlib29sIHJlcG9ydF9lcnJvcjsKKworCWNoYW5uZWwgPSBlcy0+Y2hhbm5lbDsKIAlpZiAoY2hhbm5lbCA+PSBkZXYtPm5jaGFubmVscykgewogCQlkZXZfZXJyKGRldi0+dWRldi0+ZGV2LnBhcmVudCwKIAkJCSJJbnZhbGlkIGNoYW5uZWwgbnVtYmVyICglZClcbiIsIGNoYW5uZWwpOwpAQCAtNjYwLDExOSArOTgzLDEwNCBAQAogCX0KIAogCXByaXYgPSBkZXYtPm5ldHNbY2hhbm5lbF07Ci0Jc3RhdHMgPSAmcHJpdi0+bmV0ZGV2LT5zdGF0czsKKwlyZXBvcnRfZXJyb3IgPSBmYWxzZTsKIAotCWlmIChzdGF0dXMgJiBNMTZDX1NUQVRFX0JVU19SRVNFVCkgewotCQlrdmFzZXJfdXNiX3VubGlua190eF91cmJzKHByaXYpOworCWlmIChlcy0+dHhlcnIgIT0gcHJpdi0+YmVjLnR4ZXJyKSB7CisJCWVzLT51c2JjYW4uZXJyb3Jfc3RhdGUgfD0gVVNCQ0FOX0VSUk9SX1NUQVRFX1RYX0VSUk9SOworCQlyZXBvcnRfZXJyb3IgPSB0cnVlOworCX0KKwlpZiAoZXMtPnJ4ZXJyICE9IHByaXYtPmJlYy5yeGVycikgeworCQllcy0+dXNiY2FuLmVycm9yX3N0YXRlIHw9IFVTQkNBTl9FUlJPUl9TVEFURV9SWF9FUlJPUjsKKwkJcmVwb3J0X2Vycm9yID0gdHJ1ZTsKKwl9CisJaWYgKChlcy0+c3RhdHVzICYgTTE2Q19TVEFURV9CVVNfRVJST1IpICYmCisJICAgICEoZXMtPnVzYmNhbi5vdGhlcl9jaF9zdGF0dXMgJiBNMTZDX1NUQVRFX0JVU19FUlJPUikpIHsKKwkJZXMtPnVzYmNhbi5lcnJvcl9zdGF0ZSB8PSBVU0JDQU5fRVJST1JfU1RBVEVfQlVTRVJST1I7CisJCXJlcG9ydF9lcnJvciA9IHRydWU7CisJfQorCisJaWYgKHJlcG9ydF9lcnJvcikKKwkJa3Zhc2VyX3VzYl9yeF9lcnJvcihkZXYsIGVzKTsKK30KKworc3RhdGljIHZvaWQga3Zhc2VyX3VzYmNhbl9yeF9lcnJvcihjb25zdCBzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBrdmFzZXJfbXNnICptc2cpCit7CisJc3RydWN0IGt2YXNlcl91c2JfZXJyb3Jfc3VtbWFyeSBlcyA9IHsgfTsKKworCXN3aXRjaCAobXNnLT5pZCkgeworCS8qIFNvbWV0aW1lcyBlcnJvcnMgYXJlIHNlbnQgYXMgdW5zb2xpY2l0ZWQgY2hpcCBzdGF0ZSBldmVudHMgKi8KKwljYXNlIENNRF9DSElQX1NUQVRFX0VWRU5UOgorCQllcy5jaGFubmVsID0gbXNnLT51LnVzYmNhbi5jaGlwX3N0YXRlX2V2ZW50LmNoYW5uZWw7CisJCWVzLnN0YXR1cyA9ICBtc2ctPnUudXNiY2FuLmNoaXBfc3RhdGVfZXZlbnQuc3RhdHVzOworCQllcy50eGVyciA9IG1zZy0+dS51c2JjYW4uY2hpcF9zdGF0ZV9ldmVudC50eF9lcnJvcnNfY291bnQ7CisJCWVzLnJ4ZXJyID0gbXNnLT51LnVzYmNhbi5jaGlwX3N0YXRlX2V2ZW50LnJ4X2Vycm9yc19jb3VudDsKKwkJa3Zhc2VyX3VzYmNhbl9jb25kaXRpb25hbGx5X3J4X2Vycm9yKGRldiwgJmVzKTsKKwkJYnJlYWs7CisKKwljYXNlIENNRF9DQU5fRVJST1JfRVZFTlQ6CisJCWVzLmNoYW5uZWwgPSAwOworCQllcy5zdGF0dXMgPSBtc2ctPnUudXNiY2FuLmVycm9yX2V2ZW50LnN0YXR1c19jaDA7CisJCWVzLnR4ZXJyID0gbXNnLT51LnVzYmNhbi5lcnJvcl9ldmVudC50eF9lcnJvcnNfY291bnRfY2gwOworCQllcy5yeGVyciA9IG1zZy0+dS51c2JjYW4uZXJyb3JfZXZlbnQucnhfZXJyb3JzX2NvdW50X2NoMDsKKwkJZXMudXNiY2FuLm90aGVyX2NoX3N0YXR1cyA9CisJCQltc2ctPnUudXNiY2FuLmVycm9yX2V2ZW50LnN0YXR1c19jaDE7CisJCWt2YXNlcl91c2JjYW5fY29uZGl0aW9uYWxseV9yeF9lcnJvcihkZXYsICZlcyk7CisKKwkJLyogVGhlIFVTQkNBTiBmaXJtd2FyZSBzdXBwb3J0cyB1cCB0byAyIGNoYW5uZWxzLgorCQkgKiBOb3cgdGhhdCBjaDAgd2FzIGNoZWNrZWQsIGNoZWNrIGlmIGNoMSBoYXMgYW55IGVycm9ycy4KKwkJICovCisJCWlmIChkZXYtPm5jaGFubmVscyA9PSBNQVhfVVNCQ0FOX05FVF9ERVZJQ0VTKSB7CisJCQllcy5jaGFubmVsID0gMTsKKwkJCWVzLnN0YXR1cyA9IG1zZy0+dS51c2JjYW4uZXJyb3JfZXZlbnQuc3RhdHVzX2NoMTsKKwkJCWVzLnR4ZXJyID0gbXNnLT51LnVzYmNhbi5lcnJvcl9ldmVudC50eF9lcnJvcnNfY291bnRfY2gxOworCQkJZXMucnhlcnIgPSBtc2ctPnUudXNiY2FuLmVycm9yX2V2ZW50LnJ4X2Vycm9yc19jb3VudF9jaDE7CisJCQllcy51c2JjYW4ub3RoZXJfY2hfc3RhdHVzID0KKwkJCQltc2ctPnUudXNiY2FuLmVycm9yX2V2ZW50LnN0YXR1c19jaDA7CisJCQlrdmFzZXJfdXNiY2FuX2NvbmRpdGlvbmFsbHlfcnhfZXJyb3IoZGV2LCAmZXMpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYtPnVkZXYtPmRldi5wYXJlbnQsICJJbnZhbGlkIG1zZyBpZCAoJWQpXG4iLAorCQkJbXNnLT5pZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBrdmFzZXJfbGVhZl9yeF9lcnJvcihjb25zdCBzdHJ1Y3Qga3Zhc2VyX3VzYiAqZGV2LAorCQkJCSBjb25zdCBzdHJ1Y3Qga3Zhc2VyX21zZyAqbXNnKQoreworCXN0cnVjdCBrdmFzZXJfdXNiX2Vycm9yX3N1bW1hcnkgZXMgPSB7IH07CisKKwlzd2l0Y2ggKG1zZy0+aWQpIHsKKwljYXNlIENNRF9DQU5fRVJST1JfRVZFTlQ6CisJCWVzLmNoYW5uZWwgPSBtc2ctPnUubGVhZi5lcnJvcl9ldmVudC5jaGFubmVsOworCQllcy5zdGF0dXMgPSAgbXNnLT51LmxlYWYuZXJyb3JfZXZlbnQuc3RhdHVzOworCQllcy50eGVyciA9IG1zZy0+dS5sZWFmLmVycm9yX2V2ZW50LnR4X2Vycm9yc19jb3VudDsKKwkJZXMucnhlcnIgPSBtc2ctPnUubGVhZi5lcnJvcl9ldmVudC5yeF9lcnJvcnNfY291bnQ7CisJCWVzLmxlYWYuZXJyb3JfZmFjdG9yID0gbXNnLT51LmxlYWYuZXJyb3JfZXZlbnQuZXJyb3JfZmFjdG9yOworCQlicmVhazsKKwljYXNlIENNRF9MRUFGX0xPR19NRVNTQUdFOgorCQllcy5jaGFubmVsID0gbXNnLT51LmxlYWYubG9nX21lc3NhZ2UuY2hhbm5lbDsKKwkJZXMuc3RhdHVzID0gbXNnLT51LmxlYWYubG9nX21lc3NhZ2UuZGF0YVswXTsKKwkJZXMudHhlcnIgPSBtc2ctPnUubGVhZi5sb2dfbWVzc2FnZS5kYXRhWzJdOworCQllcy5yeGVyciA9IG1zZy0+dS5sZWFmLmxvZ19tZXNzYWdlLmRhdGFbM107CisJCWVzLmxlYWYuZXJyb3JfZmFjdG9yID0gbXNnLT51LmxlYWYubG9nX21lc3NhZ2UuZGF0YVsxXTsKKwkJYnJlYWs7CisJY2FzZSBDTURfQ0hJUF9TVEFURV9FVkVOVDoKKwkJZXMuY2hhbm5lbCA9IG1zZy0+dS5sZWFmLmNoaXBfc3RhdGVfZXZlbnQuY2hhbm5lbDsKKwkJZXMuc3RhdHVzID0gIG1zZy0+dS5sZWFmLmNoaXBfc3RhdGVfZXZlbnQuc3RhdHVzOworCQllcy50eGVyciA9IG1zZy0+dS5sZWFmLmNoaXBfc3RhdGVfZXZlbnQudHhfZXJyb3JzX2NvdW50OworCQllcy5yeGVyciA9IG1zZy0+dS5sZWFmLmNoaXBfc3RhdGVfZXZlbnQucnhfZXJyb3JzX2NvdW50OworCQllcy5sZWFmLmVycm9yX2ZhY3RvciA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoZGV2LT51ZGV2LT5kZXYucGFyZW50LCAiSW52YWxpZCBtc2cgaWQgKCVkKVxuIiwKKwkJCW1zZy0+aWQpOwogCQlyZXR1cm47CiAJfQogCi0Jc2tiID0gYWxsb2NfY2FuX2Vycl9za2IocHJpdi0+bmV0ZGV2LCAmY2YpOwotCWlmICghc2tiKSB7Ci0JCXN0YXRzLT5yeF9kcm9wcGVkKys7Ci0JCXJldHVybjsKLQl9Ci0KLQluZXdfc3RhdGUgPSBwcml2LT5jYW4uc3RhdGU7Ci0KLQluZXRkZXZfZGJnKHByaXYtPm5ldGRldiwgIkVycm9yIHN0YXR1czogMHglMDJ4XG4iLCBzdGF0dXMpOwotCi0JaWYgKHN0YXR1cyAmIE0xNkNfU1RBVEVfQlVTX09GRikgewotCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfQlVTT0ZGOwotCi0JCXByaXYtPmNhbi5jYW5fc3RhdHMuYnVzX29mZisrOwotCQlpZiAoIXByaXYtPmNhbi5yZXN0YXJ0X21zKQotCQkJa3Zhc2VyX3VzYl9zaW1wbGVfbXNnX2FzeW5jKHByaXYsIENNRF9TVE9QX0NISVApOwotCi0JCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm5ldGRldik7Ci0KLQkJbmV3X3N0YXRlID0gQ0FOX1NUQVRFX0JVU19PRkY7Ci0JfSBlbHNlIGlmIChzdGF0dXMgJiBNMTZDX1NUQVRFX0JVU19QQVNTSVZFKSB7Ci0JCWlmIChwcml2LT5jYW4uc3RhdGUgIT0gQ0FOX1NUQVRFX0VSUk9SX1BBU1NJVkUpIHsKLQkJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9DUlRMOwotCi0JCQlpZiAodHhlcnIgfHwgcnhlcnIpCi0JCQkJY2YtPmRhdGFbMV0gPSAodHhlcnIgPiByeGVycikKLQkJCQkJCT8gQ0FOX0VSUl9DUlRMX1RYX1BBU1NJVkUKLQkJCQkJCTogQ0FOX0VSUl9DUlRMX1JYX1BBU1NJVkU7Ci0JCQllbHNlCi0JCQkJY2YtPmRhdGFbMV0gPSBDQU5fRVJSX0NSVExfVFhfUEFTU0lWRSB8Ci0JCQkJCSAgICAgIENBTl9FUlJfQ1JUTF9SWF9QQVNTSVZFOwotCi0JCQlwcml2LT5jYW4uY2FuX3N0YXRzLmVycm9yX3Bhc3NpdmUrKzsKLQkJfQotCi0JCW5ld19zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9QQVNTSVZFOwotCX0KLQotCWlmIChzdGF0dXMgPT0gTTE2Q19TVEFURV9CVVNfRVJST1IpIHsKLQkJaWYgKChwcml2LT5jYW4uc3RhdGUgPCBDQU5fU1RBVEVfRVJST1JfV0FSTklORykgJiYKLQkJICAgICgodHhlcnIgPj0gOTYpIHx8IChyeGVyciA+PSA5NikpKSB7Ci0JCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsKLQkJCWNmLT5kYXRhWzFdID0gKHR4ZXJyID4gcnhlcnIpCi0JCQkJCT8gQ0FOX0VSUl9DUlRMX1RYX1dBUk5JTkcKLQkJCQkJOiBDQU5fRVJSX0NSVExfUlhfV0FSTklORzsKLQotCQkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5lcnJvcl93YXJuaW5nKys7Ci0JCQluZXdfc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfV0FSTklORzsKLQkJfSBlbHNlIGlmIChwcml2LT5jYW4uc3RhdGUgPiBDQU5fU1RBVEVfRVJST1JfQUNUSVZFKSB7Ci0JCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfUFJPVDsKLQkJCWNmLT5kYXRhWzJdID0gQ0FOX0VSUl9QUk9UX0FDVElWRTsKLQotCQkJbmV3X3N0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX0FDVElWRTsKLQkJfQotCX0KLQotCWlmICghc3RhdHVzKSB7Ci0JCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9QUk9UOwotCQljZi0+ZGF0YVsyXSA9IENBTl9FUlJfUFJPVF9BQ1RJVkU7Ci0KLQkJbmV3X3N0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX0FDVElWRTsKLQl9Ci0KLQlpZiAocHJpdi0+Y2FuLnJlc3RhcnRfbXMgJiYKLQkgICAgKHByaXYtPmNhbi5zdGF0ZSA+PSBDQU5fU1RBVEVfQlVTX09GRikgJiYKLQkgICAgKG5ld19zdGF0ZSA8IENBTl9TVEFURV9CVVNfT0ZGKSkgewotCQljZi0+Y2FuX2lkIHw9IENBTl9FUlJfUkVTVEFSVEVEOwotCQluZXRpZl9jYXJyaWVyX29uKHByaXYtPm5ldGRldik7Ci0KLQkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5yZXN0YXJ0cysrOwotCX0KLQotCWlmIChlcnJvcl9mYWN0b3IpIHsKLQkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5idXNfZXJyb3IrKzsKLQkJc3RhdHMtPnJ4X2Vycm9ycysrOwotCi0JCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9CVVNFUlJPUiB8IENBTl9FUlJfUFJPVDsKLQotCQlpZiAoZXJyb3JfZmFjdG9yICYgTTE2Q19FRl9BQ0tFKQotCQkJY2YtPmRhdGFbM10gfD0gKENBTl9FUlJfUFJPVF9MT0NfQUNLKTsKLQkJaWYgKGVycm9yX2ZhY3RvciAmIE0xNkNfRUZfQ1JDRSkKLQkJCWNmLT5kYXRhWzNdIHw9IChDQU5fRVJSX1BST1RfTE9DX0NSQ19TRVEgfAotCQkJCQlDQU5fRVJSX1BST1RfTE9DX0NSQ19ERUwpOwotCQlpZiAoZXJyb3JfZmFjdG9yICYgTTE2Q19FRl9GT1JNRSkKLQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9GT1JNOwotCQlpZiAoZXJyb3JfZmFjdG9yICYgTTE2Q19FRl9TVEZFKQotCQkJY2YtPmRhdGFbMl0gfD0gQ0FOX0VSUl9QUk9UX1NUVUZGOwotCQlpZiAoZXJyb3JfZmFjdG9yICYgTTE2Q19FRl9CSVRFMCkKLQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9CSVQwOwotCQlpZiAoZXJyb3JfZmFjdG9yICYgTTE2Q19FRl9CSVRFMSkKLQkJCWNmLT5kYXRhWzJdIHw9IENBTl9FUlJfUFJPVF9CSVQxOwotCQlpZiAoZXJyb3JfZmFjdG9yICYgTTE2Q19FRl9UUkUpCi0JCQljZi0+ZGF0YVsyXSB8PSBDQU5fRVJSX1BST1RfVFg7Ci0JfQotCi0JY2YtPmRhdGFbNl0gPSB0eGVycjsKLQljZi0+ZGF0YVs3XSA9IHJ4ZXJyOwotCi0JcHJpdi0+YmVjLnR4ZXJyID0gdHhlcnI7Ci0JcHJpdi0+YmVjLnJ4ZXJyID0gcnhlcnI7Ci0KLQlwcml2LT5jYW4uc3RhdGUgPSBuZXdfc3RhdGU7Ci0KLQlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBjZi0+Y2FuX2RsYzsKLQluZXRpZl9yeChza2IpOworCWt2YXNlcl91c2JfcnhfZXJyb3IoZGV2LCAmZXMpOwogfQogCiBzdGF0aWMgdm9pZCBrdmFzZXJfdXNiX3J4X2Nhbl9lcnIoY29uc3Qgc3RydWN0IGt2YXNlcl91c2JfbmV0X3ByaXYgKnByaXYsCkBAIC03ODIsMTYgKzEwOTAsMTkgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZwcml2LT5uZXRkZXYtPnN0YXRzOwogCi0JaWYgKG1zZy0+dS5yeF9jYW4uZmxhZyAmIChNU0dfRkxBR19FUlJPUl9GUkFNRSB8CisJaWYgKG1zZy0+dS5yeF9jYW5faGVhZGVyLmZsYWcgJiAoTVNHX0ZMQUdfRVJST1JfRlJBTUUgfAogCQkJCQkgTVNHX0ZMQUdfTkVSUikpIHsKIAkJbmV0ZGV2X2Vycihwcml2LT5uZXRkZXYsICJVbmtub3cgZXJyb3IgKGZsYWdzOiAweCUwMngpXG4iLAotCQkJICAgbXNnLT51LnJ4X2Nhbi5mbGFnKTsKKwkJCSAgIG1zZy0+dS5yeF9jYW5faGVhZGVyLmZsYWcpOwogCiAJCXN0YXRzLT5yeF9lcnJvcnMrKzsKIAkJcmV0dXJuOwogCX0KIAotCWlmIChtc2ctPnUucnhfY2FuLmZsYWcgJiBNU0dfRkxBR19PVkVSUlVOKSB7CisJaWYgKG1zZy0+dS5yeF9jYW5faGVhZGVyLmZsYWcgJiBNU0dfRkxBR19PVkVSUlVOKSB7CisJCXN0YXRzLT5yeF9vdmVyX2Vycm9ycysrOworCQlzdGF0cy0+cnhfZXJyb3JzKys7CisKIAkJc2tiID0gYWxsb2NfY2FuX2Vycl9za2IocHJpdi0+bmV0ZGV2LCAmY2YpOwogCQlpZiAoIXNrYikgewogCQkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKQEAgLTgwMSw5ICsxMTEyLDYgQEAKIAkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7CiAJCWNmLT5kYXRhWzFdID0gQ0FOX0VSUl9DUlRMX1JYX09WRVJGTE9XOwogCi0JCXN0YXRzLT5yeF9vdmVyX2Vycm9ycysrOwotCQlzdGF0cy0+cnhfZXJyb3JzKys7Ci0KIAkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKIAkJc3RhdHMtPnJ4X2J5dGVzICs9IGNmLT5jYW5fZGxjOwogCQluZXRpZl9yeChza2IpOwpAQCAtODE3LDcgKzExMjUsOCBAQAogCXN0cnVjdCBjYW5fZnJhbWUgKmNmOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOwotCXU4IGNoYW5uZWwgPSBtc2ctPnUucnhfY2FuLmNoYW5uZWw7CisJdTggY2hhbm5lbCA9IG1zZy0+dS5yeF9jYW5faGVhZGVyLmNoYW5uZWw7CisJY29uc3QgdTggKnJ4X21zZyA9IE5VTEw7CS8qIEdDQyAqLwogCiAJaWYgKGNoYW5uZWwgPj0gZGV2LT5uY2hhbm5lbHMpIHsKIAkJZGV2X2VycihkZXYtPnVkZXYtPmRldi5wYXJlbnQsCkBAIC04MjgsNjAgKzExMzcsNjggQEAKIAlwcml2ID0gZGV2LT5uZXRzW2NoYW5uZWxdOwogCXN0YXRzID0gJnByaXYtPm5ldGRldi0+c3RhdHM7CiAKLQlpZiAoKG1zZy0+dS5yeF9jYW4uZmxhZyAmIE1TR19GTEFHX0VSUk9SX0ZSQU1FKSAmJgotCSAgICAobXNnLT5pZCA9PSBDTURfTE9HX01FU1NBR0UpKSB7Ci0JCWt2YXNlcl91c2JfcnhfZXJyb3IoZGV2LCBtc2cpOworCWlmICgobXNnLT51LnJ4X2Nhbl9oZWFkZXIuZmxhZyAmIE1TR19GTEFHX0VSUk9SX0ZSQU1FKSAmJgorCSAgICAoZGV2LT5mYW1pbHkgPT0gS1ZBU0VSX0xFQUYgJiYgbXNnLT5pZCA9PSBDTURfTEVBRl9MT0dfTUVTU0FHRSkpIHsKKwkJa3Zhc2VyX2xlYWZfcnhfZXJyb3IoZGV2LCBtc2cpOwogCQlyZXR1cm47Ci0JfSBlbHNlIGlmIChtc2ctPnUucnhfY2FuLmZsYWcgJiAoTVNHX0ZMQUdfRVJST1JfRlJBTUUgfAotCQkJCQkgTVNHX0ZMQUdfTkVSUiB8Ci0JCQkJCSBNU0dfRkxBR19PVkVSUlVOKSkgeworCX0gZWxzZSBpZiAobXNnLT51LnJ4X2Nhbl9oZWFkZXIuZmxhZyAmIChNU0dfRkxBR19FUlJPUl9GUkFNRSB8CisJCQkJCQlNU0dfRkxBR19ORVJSIHwKKwkJCQkJCU1TR19GTEFHX09WRVJSVU4pKSB7CiAJCWt2YXNlcl91c2JfcnhfY2FuX2Vycihwcml2LCBtc2cpOwogCQlyZXR1cm47Ci0JfSBlbHNlIGlmIChtc2ctPnUucnhfY2FuLmZsYWcgJiB+TVNHX0ZMQUdfUkVNT1RFX0ZSQU1FKSB7CisJfSBlbHNlIGlmIChtc2ctPnUucnhfY2FuX2hlYWRlci5mbGFnICYgfk1TR19GTEFHX1JFTU9URV9GUkFNRSkgewogCQluZXRkZXZfd2Fybihwcml2LT5uZXRkZXYsCiAJCQkgICAgIlVuaGFuZGxlZCBmcmFtZSAoZmxhZ3M6IDB4JTAyeCkiLAotCQkJICAgIG1zZy0+dS5yeF9jYW4uZmxhZyk7CisJCQkgICAgbXNnLT51LnJ4X2Nhbl9oZWFkZXIuZmxhZyk7CiAJCXJldHVybjsKIAl9CiAKKwlzd2l0Y2ggKGRldi0+ZmFtaWx5KSB7CisJY2FzZSBLVkFTRVJfTEVBRjoKKwkJcnhfbXNnID0gbXNnLT51LmxlYWYucnhfY2FuLm1zZzsKKwkJYnJlYWs7CisJY2FzZSBLVkFTRVJfVVNCQ0FOOgorCQlyeF9tc2cgPSBtc2ctPnUudXNiY2FuLnJ4X2Nhbi5tc2c7CisJCWJyZWFrOworCX0KKwogCXNrYiA9IGFsbG9jX2Nhbl9za2IocHJpdi0+bmV0ZGV2LCAmY2YpOwogCWlmICghc2tiKSB7CiAJCXN0YXRzLT50eF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAobXNnLT5pZCA9PSBDTURfTE9HX01FU1NBR0UpIHsKLQkJY2YtPmNhbl9pZCA9IGxlMzJfdG9fY3B1KG1zZy0+dS5sb2dfbWVzc2FnZS5pZCk7CisJaWYgKGRldi0+ZmFtaWx5ID09IEtWQVNFUl9MRUFGICYmIG1zZy0+aWQgPT0gQ01EX0xFQUZfTE9HX01FU1NBR0UpIHsKKwkJY2YtPmNhbl9pZCA9IGxlMzJfdG9fY3B1KG1zZy0+dS5sZWFmLmxvZ19tZXNzYWdlLmlkKTsKIAkJaWYgKGNmLT5jYW5faWQgJiBLVkFTRVJfRVhURU5ERURfRlJBTUUpCiAJCQljZi0+Y2FuX2lkICY9IENBTl9FRkZfTUFTSyB8IENBTl9FRkZfRkxBRzsKIAkJZWxzZQogCQkJY2YtPmNhbl9pZCAmPSBDQU5fU0ZGX01BU0s7CiAKLQkJY2YtPmNhbl9kbGMgPSBnZXRfY2FuX2RsYyhtc2ctPnUubG9nX21lc3NhZ2UuZGxjKTsKKwkJY2YtPmNhbl9kbGMgPSBnZXRfY2FuX2RsYyhtc2ctPnUubGVhZi5sb2dfbWVzc2FnZS5kbGMpOwogCi0JCWlmIChtc2ctPnUubG9nX21lc3NhZ2UuZmxhZ3MgJiBNU0dfRkxBR19SRU1PVEVfRlJBTUUpCisJCWlmIChtc2ctPnUubGVhZi5sb2dfbWVzc2FnZS5mbGFncyAmIE1TR19GTEFHX1JFTU9URV9GUkFNRSkKIAkJCWNmLT5jYW5faWQgfD0gQ0FOX1JUUl9GTEFHOwogCQllbHNlCi0JCQltZW1jcHkoY2YtPmRhdGEsICZtc2ctPnUubG9nX21lc3NhZ2UuZGF0YSwKKwkJCW1lbWNweShjZi0+ZGF0YSwgJm1zZy0+dS5sZWFmLmxvZ19tZXNzYWdlLmRhdGEsCiAJCQkgICAgICAgY2YtPmNhbl9kbGMpOwogCX0gZWxzZSB7Ci0JCWNmLT5jYW5faWQgPSAoKG1zZy0+dS5yeF9jYW4ubXNnWzBdICYgMHgxZikgPDwgNikgfAotCQkJICAgICAobXNnLT51LnJ4X2Nhbi5tc2dbMV0gJiAweDNmKTsKKwkJY2YtPmNhbl9pZCA9ICgocnhfbXNnWzBdICYgMHgxZikgPDwgNikgfCAocnhfbXNnWzFdICYgMHgzZik7CiAKIAkJaWYgKG1zZy0+aWQgPT0gQ01EX1JYX0VYVF9NRVNTQUdFKSB7CiAJCQljZi0+Y2FuX2lkIDw8PSAxODsKLQkJCWNmLT5jYW5faWQgfD0gKChtc2ctPnUucnhfY2FuLm1zZ1syXSAmIDB4MGYpIDw8IDE0KSB8Ci0JCQkJICAgICAgKChtc2ctPnUucnhfY2FuLm1zZ1szXSAmIDB4ZmYpIDw8IDYpIHwKLQkJCQkgICAgICAobXNnLT51LnJ4X2Nhbi5tc2dbNF0gJiAweDNmKTsKKwkJCWNmLT5jYW5faWQgfD0gKChyeF9tc2dbMl0gJiAweDBmKSA8PCAxNCkgfAorCQkJCSAgICAgICgocnhfbXNnWzNdICYgMHhmZikgPDwgNikgfAorCQkJCSAgICAgIChyeF9tc2dbNF0gJiAweDNmKTsKIAkJCWNmLT5jYW5faWQgfD0gQ0FOX0VGRl9GTEFHOwogCQl9CiAKLQkJY2YtPmNhbl9kbGMgPSBnZXRfY2FuX2RsYyhtc2ctPnUucnhfY2FuLm1zZ1s1XSk7CisJCWNmLT5jYW5fZGxjID0gZ2V0X2Nhbl9kbGMocnhfbXNnWzVdKTsKIAotCQlpZiAobXNnLT51LnJ4X2Nhbi5mbGFnICYgTVNHX0ZMQUdfUkVNT1RFX0ZSQU1FKQorCQlpZiAobXNnLT51LnJ4X2Nhbl9oZWFkZXIuZmxhZyAmIE1TR19GTEFHX1JFTU9URV9GUkFNRSkKIAkJCWNmLT5jYW5faWQgfD0gQ0FOX1JUUl9GTEFHOwogCQllbHNlCi0JCQltZW1jcHkoY2YtPmRhdGEsICZtc2ctPnUucnhfY2FuLm1zZ1s2XSwKKwkJCW1lbWNweShjZi0+ZGF0YSwgJnJ4X21zZ1s2XSwKIAkJCSAgICAgICBjZi0+Y2FuX2RsYyk7CiAJfQogCkBAIC05NDQsMjEgKzEyNjEsMzUgQEAKIAogCWNhc2UgQ01EX1JYX1NURF9NRVNTQUdFOgogCWNhc2UgQ01EX1JYX0VYVF9NRVNTQUdFOgotCWNhc2UgQ01EX0xPR19NRVNTQUdFOgorCQlrdmFzZXJfdXNiX3J4X2Nhbl9tc2coZGV2LCBtc2cpOworCQlicmVhazsKKworCWNhc2UgQ01EX0xFQUZfTE9HX01FU1NBR0U6CisJCWlmIChkZXYtPmZhbWlseSAhPSBLVkFTRVJfTEVBRikKKwkJCWdvdG8gd2FybjsKIAkJa3Zhc2VyX3VzYl9yeF9jYW5fbXNnKGRldiwgbXNnKTsKIAkJYnJlYWs7CiAKIAljYXNlIENNRF9DSElQX1NUQVRFX0VWRU5UOgogCWNhc2UgQ01EX0NBTl9FUlJPUl9FVkVOVDoKLQkJa3Zhc2VyX3VzYl9yeF9lcnJvcihkZXYsIG1zZyk7CisJCWlmIChkZXYtPmZhbWlseSA9PSBLVkFTRVJfTEVBRikKKwkJCWt2YXNlcl9sZWFmX3J4X2Vycm9yKGRldiwgbXNnKTsKKwkJZWxzZQorCQkJa3Zhc2VyX3VzYmNhbl9yeF9lcnJvcihkZXYsIG1zZyk7CiAJCWJyZWFrOwogCiAJY2FzZSBDTURfVFhfQUNLTk9XTEVER0U6CiAJCWt2YXNlcl91c2JfdHhfYWNrbm93bGVkZ2UoZGV2LCBtc2cpOwogCQlicmVhazsKIAorCS8qIElnbm9yZWQgbWVzc2FnZXMgKi8KKwljYXNlIENNRF9VU0JDQU5fQ0xPQ0tfT1ZFUkZMT1dfRVZFTlQ6CisJCWlmIChkZXYtPmZhbWlseSAhPSBLVkFTRVJfVVNCQ0FOKQorCQkJZ290byB3YXJuOworCQlicmVhazsKKwogCWRlZmF1bHQ6Ci0JCWRldl93YXJuKGRldi0+dWRldi0+ZGV2LnBhcmVudCwKK3dhcm46CQlkZXZfd2FybihkZXYtPnVkZXYtPmRldi5wYXJlbnQsCiAJCQkgIlVuaGFuZGxlZCBtZXNzYWdlICglZClcbiIsIG1zZy0+aWQpOwogCQlicmVhazsKIAl9CkBAIC0xMTc4LDcgKzE1MDksNyBAQAogCQkJCSAgZGV2LT5yeGJ1ZltpXSwKIAkJCQkgIGRldi0+cnhidWZfZG1hW2ldKTsKIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfTkVUX0RFVklDRVM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5jaGFubmVsczsgaSsrKSB7CiAJCXN0cnVjdCBrdmFzZXJfdXNiX25ldF9wcml2ICpwcml2ID0gZGV2LT5uZXRzW2ldOwogCiAJCWlmIChwcml2KQpAQCAtMTI4Niw2ICsxNjE3LDcgQEAKIAlzdHJ1Y3Qga3Zhc2VyX21zZyAqbXNnOwogCWludCBpLCBlcnI7CiAJaW50IHJldCA9IE5FVERFVl9UWF9PSzsKKwl1OCAqbXNnX3R4X2Nhbl9mbGFncyA9IE5VTEw7CQkvKiBHQ0MgKi8KIAogCWlmIChjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihuZXRkZXYsIHNrYikpCiAJCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC0xMzA3LDkgKzE2MzksMTkgQEAKIAogCW1zZyA9IGJ1ZjsKIAltc2ctPmxlbiA9IE1TR19IRUFERVJfTEVOICsgc2l6ZW9mKHN0cnVjdCBrdmFzZXJfbXNnX3R4X2Nhbik7Ci0JbXNnLT51LnR4X2Nhbi5mbGFncyA9IDA7CiAJbXNnLT51LnR4X2Nhbi5jaGFubmVsID0gcHJpdi0+Y2hhbm5lbDsKIAorCXN3aXRjaCAoZGV2LT5mYW1pbHkpIHsKKwljYXNlIEtWQVNFUl9MRUFGOgorCQltc2dfdHhfY2FuX2ZsYWdzID0gJm1zZy0+dS50eF9jYW4ubGVhZi5mbGFnczsKKwkJYnJlYWs7CisJY2FzZSBLVkFTRVJfVVNCQ0FOOgorCQltc2dfdHhfY2FuX2ZsYWdzID0gJm1zZy0+dS50eF9jYW4udXNiY2FuLmZsYWdzOworCQlicmVhazsKKwl9CisKKwkqbXNnX3R4X2Nhbl9mbGFncyA9IDA7CisKIAlpZiAoY2YtPmNhbl9pZCAmIENBTl9FRkZfRkxBRykgewogCQltc2ctPmlkID0gQ01EX1RYX0VYVF9NRVNTQUdFOwogCQltc2ctPnUudHhfY2FuLm1zZ1swXSA9IChjZi0+Y2FuX2lkID4+IDI0KSAmIDB4MWY7CkBAIC0xMzI3LDcgKzE2NjksNyBAQAogCW1lbWNweSgmbXNnLT51LnR4X2Nhbi5tc2dbNl0sIGNmLT5kYXRhLCBjZi0+Y2FuX2RsYyk7CiAKIAlpZiAoY2YtPmNhbl9pZCAmIENBTl9SVFJfRkxBRykKLQkJbXNnLT51LnR4X2Nhbi5mbGFncyB8PSBNU0dfRkxBR19SRU1PVEVfRlJBTUU7CisJCSptc2dfdHhfY2FuX2ZsYWdzIHw9IE1TR19GTEFHX1JFTU9URV9GUkFNRTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByaXYtPnR4X2NvbnRleHRzKTsgaSsrKSB7CiAJCWlmIChwcml2LT50eF9jb250ZXh0c1tpXS5lY2hvX2luZGV4ID09IE1BWF9UWF9VUkJTKSB7CkBAIC0xNTkwLDEyICsxOTMyLDIzIEBACiB7CiAJc3RydWN0IGt2YXNlcl91c2IgKmRldjsKIAlpbnQgZXJyID0gLUVOT01FTTsKLQlpbnQgaTsKKwlpbnQgaSwgcmV0cnkgPSAzOwogCiAJZGV2ID0gZGV2bV9remFsbG9jKCZpbnRmLT5kZXYsIHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCisJaWYgKGt2YXNlcl9pc19sZWFmKGlkKSkgeworCQlkZXYtPmZhbWlseSA9IEtWQVNFUl9MRUFGOworCX0gZWxzZSBpZiAoa3Zhc2VyX2lzX3VzYmNhbihpZCkpIHsKKwkJZGV2LT5mYW1pbHkgPSBLVkFTRVJfVVNCQ0FOOworCX0gZWxzZSB7CisJCWRldl9lcnIoJmludGYtPmRldiwKKwkJCSJQcm9kdWN0IElEICglZCkgZG9lcyBub3QgYmVsb25nIHRvIGFueSBrbm93biBLdmFzZXIgVVNCIGZhbWlseSIsCisJCQlpZC0+aWRQcm9kdWN0KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJZXJyID0ga3Zhc2VyX3VzYl9nZXRfZW5kcG9pbnRzKGludGYsICZkZXYtPmJ1bGtfaW4sICZkZXYtPmJ1bGtfb3V0KTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgIkNhbm5vdCBnZXQgdXNiIGVuZHBvaW50KHMpIik7CkBAIC0xNjA4LDcgKzE5NjEsMTUgQEAKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGV2KTsKIAotCWVyciA9IGt2YXNlcl91c2JfZ2V0X3NvZnR3YXJlX2luZm8oZGV2KTsKKwkvKiBPbiBzb21lIHg4NiBsYXB0b3BzLCBwbHVnZ2luZyBhIEt2YXNlciBkZXZpY2UgYWdhaW4gYWZ0ZXIKKwkgKiBhbiB1bnBsdWcgbWFrZXMgdGhlIGZpcm13YXJlIGFsd2F5cyBpZ25vcmUgdGhlIHZlcnkgZmlyc3QKKwkgKiBjb21tYW5kLiBGb3Igc3VjaCBhIGNhc2UsIHByb3ZpZGUgc29tZSByb29tIGZvciByZXRyaWVzCisJICogaW5zdGVhZCBvZiBjb21wbGV0ZWx5IGV4aXRpbmcgdGhlIGRyaXZlci4KKwkgKi8KKwlkbyB7CisJCWVyciA9IGt2YXNlcl91c2JfZ2V0X3NvZnR3YXJlX2luZm8oZGV2KTsKKwl9IHdoaWxlICgtLXJldHJ5ICYmIGVyciA9PSAtRVRJTUVET1VUKTsKKwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmaW50Zi0+ZGV2LAogCQkJIkNhbm5vdCBnZXQgc29mdHdhcmUgaW5mb3MsIGVycm9yICVkXG4iLCBlcnIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9wZWFrX3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvcGVha191c2IvTWFrZWZpbGUKaW5kZXggMWFlZmJjOC4uMTgzOWU5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9wZWFrX3VzYi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL3BlYWtfdXNiL01ha2VmaWxlCkBAIC0xLDIgKzEsMiBAQAogb2JqLSQoQ09ORklHX0NBTl9QRUFLX1VTQikgKz0gcGVha191c2IubwotcGVha191c2IteSA9IHBjYW5fdXNiX2NvcmUubyBwY2FuX3VzYi5vIHBjYW5fdXNiX3Byby5vCitwZWFrX3VzYi15ID0gcGNhbl91c2JfY29yZS5vIHBjYW5fdXNiLm8gcGNhbl91c2JfcHJvLm8gcGNhbl91c2JfZmQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9wZWFrX3VzYi9wY2FuX3VjYW4uaCBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvcGVha191c2IvcGNhbl91Y2FuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhN2MyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL3BlYWtfdXNiL3BjYW5fdWNhbi5oCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogQ0FOIGRyaXZlciBmb3IgUEVBSyBTeXN0ZW0gbWljcm8tQ0FOIGJhc2VkIGFkYXB0ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTEgUEVBSyBTeXN0ZW0tVGVjaG5payBHbWJICisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBTdGVwaGFuZSBHcm9zamVhbiA8cy5ncm9zamVhbkBwZWFrLXN5c3RlbS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBQVUNBTl9ICisjZGVmaW5lIFBVQ0FOX0gKKworLyogdUNBTiBjb21tYW5kcyBvcGNvZGVzIGxpc3QgKGxvdy1vcmRlciAxMCBiaXRzKSAqLworI2RlZmluZSBQVUNBTl9DTURfTk9QCQkJMHgwMDAKKyNkZWZpbmUgUFVDQU5fQ01EX1JFU0VUX01PREUJCTB4MDAxCisjZGVmaW5lIFBVQ0FOX0NNRF9OT1JNQUxfTU9ERQkJMHgwMDIKKyNkZWZpbmUgUFVDQU5fQ01EX0xJU1RFTl9PTkxZX01PREUJMHgwMDMKKyNkZWZpbmUgUFVDQU5fQ01EX1RJTUlOR19TTE9XCQkweDAwNAorI2RlZmluZSBQVUNBTl9DTURfVElNSU5HX0ZBU1QJCTB4MDA1CisjZGVmaW5lIFBVQ0FOX0NNRF9GSUxURVJfU1RECQkweDAwOAorI2RlZmluZSBQVUNBTl9DTURfVFhfQUJPUlQJCTB4MDA5CisjZGVmaW5lIFBVQ0FOX0NNRF9XUl9FUlJfQ05UCQkweDAwYQorI2RlZmluZSBQVUNBTl9DTURfUlhfRlJBTUVfRU5BQkxFCTB4MDBiCisjZGVmaW5lIFBVQ0FOX0NNRF9SWF9GUkFNRV9ESVNBQkxFCTB4MDBjCisjZGVmaW5lIFBVQ0FOX0NNRF9FTkRfT0ZfQ09MTEVDVElPTgkweDNmZgorCisvKiB1Q0FOIHJlY2VpdmVkIG1lc3NhZ2VzIGxpc3QgKi8KKyNkZWZpbmUgUFVDQU5fTVNHX0NBTl9SWAkJMHgwMDAxCisjZGVmaW5lIFBVQ0FOX01TR19FUlJPUgkJCTB4MDAwMgorI2RlZmluZSBQVUNBTl9NU0dfU1RBVFVTCQkweDAwMDMKKyNkZWZpbmUgUFVDQU5fTVNHX0JVU0xPQUQJCTB4MDAwNAorI2RlZmluZSBQVUNBTl9NU0dfQ0FOX1RYCQkweDEwMDAKKworLyogdUNBTiBjb21tYW5kIGNvbW1vbiBoZWFkZXIgKi8KK3N0cnVjdCBfX3BhY2tlZCBwdWNhbl9jb21tYW5kIHsKKwlfX2xlMTYJb3Bjb2RlX2NoYW5uZWw7CisJdTE2CWFyZ3NbM107Cit9OworCisvKiB1Q0FOIFRJTUlOR19TTE9XIGNvbW1hbmQgZmllbGRzICovCisjZGVmaW5lIFBVQ0FOX1RTTE9XX1NKV19UKHMsIHQpCQkoKChzKSAmIDB4ZikgfCAoKCEhKHQpKSA8PCA3KSkKKyNkZWZpbmUgUFVDQU5fVFNMT1dfVFNFRzIodCkJCSgodCkgJiAweGYpCisjZGVmaW5lIFBVQ0FOX1RTTE9XX1RTRUcxKHQpCQkoKHQpICYgMHgzZikKKyNkZWZpbmUgUFVDQU5fVFNMT1dfQlJQKGIpCQkoKGIpICYgMHgzZmYpCisKK3N0cnVjdCBfX3BhY2tlZCBwdWNhbl90aW1pbmdfc2xvdyB7CisJX19sZTE2CW9wY29kZV9jaGFubmVsOworCisJdTgJZXdsOwkJLyogRXJyb3IgV2FybmluZyBsaW1pdCAqLworCXU4CXNqd190OwkJLyogU3luYyBKdW1wIFdpZHRoICsgVHJpcGxlIHNhbXBsaW5nICovCisJdTgJdHNlZzI7CQkvKiBUaW1pbmcgU0VHbWVudCAyICovCisJdTgJdHNlZzE7CQkvKiBUaW1pbmcgU0VHbWVudCAxICovCisKKwlfX2xlMTYJYnJwOwkJLyogQmF1ZFJhdGUgUHJlc2NhbGVyICovCit9OworCisvKiB1Q0FOIFRJTUlOR19GQVNUIGNvbW1hbmQgZmllbGRzICovCisjZGVmaW5lIFBVQ0FOX1RGQVNUX1NKVyhzKQkJKChzKSAmIDB4MykKKyNkZWZpbmUgUFVDQU5fVEZBU1RfVFNFRzIodCkJCSgodCkgJiAweDcpCisjZGVmaW5lIFBVQ0FOX1RGQVNUX1RTRUcxKHQpCQkoKHQpICYgMHhmKQorI2RlZmluZSBQVUNBTl9URkFTVF9CUlAoYikJCSgoYikgJiAweDNmZikKKworc3RydWN0IF9fcGFja2VkIHB1Y2FuX3RpbWluZ19mYXN0IHsKKwlfX2xlMTYJb3Bjb2RlX2NoYW5uZWw7CisKKwl1OAl1bnVzZWQ7CisJdTgJc2p3OwkJLyogU3luYyBKdW1wIFdpZHRoICovCisJdTgJdHNlZzI7CQkvKiBUaW1pbmcgU0VHbWVudCAyICovCisJdTgJdHNlZzE7CQkvKiBUaW1pbmcgU0VHbWVudCAxICovCisKKwlfX2xlMTYJYnJwOwkJLyogQmF1ZFJhdGUgUHJlc2NhbGVyICovCit9OworCisvKiB1Q0FOIEZJTFRFUl9TVEQgY29tbWFuZCBmaWVsZHMgKi8KKyNkZWZpbmUgUFVDQU5fRkxUU1REX1JPV19JRFhfQklUUwk2CisKK3N0cnVjdCBfX3BhY2tlZCBwdWNhbl9maWx0ZXJfc3RkIHsKKwlfX2xlMTYJb3Bjb2RlX2NoYW5uZWw7CisKKwlfX2xlMTYJaWR4OworCV9fbGUzMgltYXNrOwkJLyogQ0FOLUlEIGJpdG1hc2sgaW4gaWR4IHJhbmdlICovCit9OworCisvKiB1Q0FOIFdSX0VSUl9DTlQgY29tbWFuZCBmaWVsZHMgKi8KKyNkZWZpbmUgUFVDQU5fV1JFUlJDTlRfVEUJCTB4NDAwMAkvKiBUeCBlcnJvciBjbnRyIHdyaXRlIEVuYWJsZSAqLworI2RlZmluZSBQVUNBTl9XUkVSUkNOVF9SRQkJMHg4MDAwCS8qIFJ4IGVycm9yIGNudHIgd3JpdGUgRW5hYmxlICovCisKK3N0cnVjdCBfX3BhY2tlZCBwdWNhbl93cl9lcnJfY250IHsKKwlfX2xlMTYJb3Bjb2RlX2NoYW5uZWw7CisKKwlfX2xlMTYJc2VsX21hc2s7CisJdTgJdHhfY291bnRlcjsJLyogVHggZXJyb3IgY291bnRlciBuZXcgdmFsdWUgKi8KKwl1OAlyeF9jb3VudGVyOwkvKiBSeCBlcnJvciBjb3VudGVyIG5ldyB2YWx1ZSAqLworCisJdTE2CXVudXNlZDsKK307CisKKy8qIHVDQU4gUlhfRlJBTUVfRU5BQkxFIGNvbW1hbmQgZmllbGRzICovCisjZGVmaW5lIFBVQ0FOX0ZMVEVYVF9FUlJPUgkJMHgwMDAxCisjZGVmaW5lIFBVQ0FOX0ZMVEVYVF9CVVNMT0FECQkweDAwMDIKKworc3RydWN0IF9fcGFja2VkIHB1Y2FuX2ZpbHRlcl9leHQgeworCV9fbGUxNglvcGNvZGVfY2hhbm5lbDsKKworCV9fbGUxNglleHRfbWFzazsKKwl1MzIJdW51c2VkOworfTsKKworLyogdUNBTiByZWNlaXZlZCBtZXNzYWdlcyBnbG9iYWwgZm9ybWF0ICovCitzdHJ1Y3QgX19wYWNrZWQgcHVjYW5fbXNnIHsKKwlfX2xlMTYJc2l6ZTsKKwlfX2xlMTYJdHlwZTsKKwlfX2xlMzIJdHNfbG93OworCV9fbGUzMgl0c19oaWdoOworfTsKKworLyogdUNBTiBmbGFncyBmb3IgQ0FOL0NBTkZEIG1lc3NhZ2VzICovCisjZGVmaW5lIFBVQ0FOX01TR19TRUxGX1JFQ0VJVkUJCTB4ODAKKyNkZWZpbmUgUFVDQU5fTVNHX0VSUk9SX1NUQVRFX0lORAkweDQwCS8qIGVycm9yIHN0YXRlIGluZGljYXRvciAqLworI2RlZmluZSBQVUNBTl9NU0dfQklUUkFURV9TV0lUQ0gJMHgyMAkvKiBiaXRyYXRlIHN3aXRjaCAqLworI2RlZmluZSBQVUNBTl9NU0dfRVhUX0RBVEFfTEVOCQkweDEwCS8qIGV4dGVuZGVkIGRhdGEgbGVuZ3RoICovCisjZGVmaW5lIFBVQ0FOX01TR19TSU5HTEVfU0hPVAkJMHgwOAorI2RlZmluZSBQVUNBTl9NU0dfTE9PUEVEX0JBQ0sJCTB4MDQKKyNkZWZpbmUgUFVDQU5fTVNHX0VYVF9JRAkJMHgwMgorI2RlZmluZSBQVUNBTl9NU0dfUlRSCQkJMHgwMQorCitzdHJ1Y3QgX19wYWNrZWQgcHVjYW5fcnhfbXNnIHsKKwlfX2xlMTYJc2l6ZTsKKwlfX2xlMTYJdHlwZTsKKwlfX2xlMzIJdHNfbG93OworCV9fbGUzMgl0c19oaWdoOworCV9fbGUzMgl0YWdfbG93OworCV9fbGUzMgl0YWdfaGlnaDsKKwl1OAljaGFubmVsX2RsYzsKKwl1OAljbGllbnQ7CisJX19sZTE2CWZsYWdzOworCV9fbGUzMgljYW5faWQ7CisJdTgJZFswXTsKK307CisKKy8qIHVDQU4gZXJyb3IgdHlwZXMgKi8KKyNkZWZpbmUgUFVDQU5fRVJNU0dfQklUX0VSUk9SCQkwCisjZGVmaW5lIFBVQ0FOX0VSTVNHX0ZPUk1fRVJST1IJCTEKKyNkZWZpbmUgUFVDQU5fRVJNU0dfU1RVRkZfRVJST1IJCTIKKyNkZWZpbmUgUFVDQU5fRVJNU0dfT1RIRVJfRVJST1IJCTMKKyNkZWZpbmUgUFVDQU5fRVJNU0dfRVJSX0NOVF9ERUMJCTQKKworc3RydWN0IF9fcGFja2VkIHB1Y2FuX2Vycm9yX21zZyB7CisJX19sZTE2CXNpemU7CisJX19sZTE2CXR5cGU7CisJX19sZTMyCXRzX2xvdzsKKwlfX2xlMzIJdHNfaGlnaDsKKwl1OAljaGFubmVsX3R5cGVfZDsKKwl1OAljb2RlX2c7CisJdTgJdHhfZXJyX2NudDsKKwl1OAlyeF9lcnJfY250OworfTsKKworI2RlZmluZSBQVUNBTl9CVVNfUEFTU0lWRQkJMHgyMAorI2RlZmluZSBQVUNBTl9CVVNfV0FSTklORwkJMHg0MAorI2RlZmluZSBQVUNBTl9CVVNfQlVTT0ZGCQkweDgwCisKK3N0cnVjdCBfX3BhY2tlZCBwdWNhbl9zdGF0dXNfbXNnIHsKKwlfX2xlMTYJc2l6ZTsKKwlfX2xlMTYJdHlwZTsKKwlfX2xlMzIJdHNfbG93OworCV9fbGUzMgl0c19oaWdoOworCXU4CWNoYW5uZWxfcF93X2I7CisJdTgJdW51c2VkWzNdOworfTsKKworLyogdUNBTiB0cmFuc21pdHRlZCBtZXNzYWdlIGZvcm1hdCAqLworI2RlZmluZSBQVUNBTl9NU0dfQ0hBTk5FTF9ETEMoYywgZCkJKCgoYykgJiAweGYpIHwgKChkKSA8PCA0KSkKKworc3RydWN0IF9fcGFja2VkIHB1Y2FuX3R4X21zZyB7CisJX19sZTE2CXNpemU7CisJX19sZTE2CXR5cGU7CisJX19sZTMyCXRhZ19sb3c7CisJX19sZTMyCXRhZ19oaWdoOworCXU4CWNoYW5uZWxfZGxjOworCXU4CWNsaWVudDsKKwlfX2xlMTYJZmxhZ3M7CisJX19sZTMyCWNhbl9pZDsKKwl1OAlkWzBdOworfTsKKworLyogYnVpbGQgdGhlIGNtZCBvcGNvZGVfY2hhbm5lbCBmaWVsZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvcnJlY3QgZW5kaWFubmVzcyAqLworc3RhdGljIGlubGluZSBfX2xlMTYgcHVjYW5fY21kX29wY29kZV9jaGFubmVsKHN0cnVjdCBwZWFrX3VzYl9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgaW50IG9wY29kZSkKK3sKKwlyZXR1cm4gY3B1X3RvX2xlMTYoKChkZXYtPmN0cmxfaWR4KSA8PCAxMikgfCAoKG9wY29kZSkgJiAweDNmZikpOworfQorCisvKiByZXR1cm4gdGhlIGNoYW5uZWwgbnVtYmVyIHBhcnQgZnJvbSBhbnkgcmVjZWl2ZWQgbWVzc2FnZSBjaGFubmVsX2RsYyBmaWVsZCAqLworc3RhdGljIGlubGluZSBpbnQgcHVjYW5fbXNnX2dldF9jaGFubmVsKHN0cnVjdCBwdWNhbl9yeF9tc2cgKnJtKQoreworCXJldHVybiBybS0+Y2hhbm5lbF9kbGMgJiAweGY7Cit9CisKKy8qIHJldHVybiB0aGUgZGxjIHZhbHVlIGZyb20gYW55IHJlY2VpdmVkIG1lc3NhZ2UgY2hhbm5lbF9kbGMgZmllbGQgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB1Y2FuX21zZ19nZXRfZGxjKHN0cnVjdCBwdWNhbl9yeF9tc2cgKnJtKQoreworCXJldHVybiBybS0+Y2hhbm5lbF9kbGMgPj4gNDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcHVjYW5fZXJtc2dfZ2V0X2NoYW5uZWwoc3RydWN0IHB1Y2FuX2Vycm9yX21zZyAqZW0pCit7CisJcmV0dXJuIGVtLT5jaGFubmVsX3R5cGVfZCAmIDB4MGY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHB1Y2FuX3N0bXNnX2dldF9jaGFubmVsKHN0cnVjdCBwdWNhbl9zdGF0dXNfbXNnICpzbSkKK3sKKwlyZXR1cm4gc20tPmNoYW5uZWxfcF93X2IgJiAweDBmOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvcGVha191c2IvcGNhbl91c2IuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvcGVha191c2IvcGNhbl91c2IuYwppbmRleCA0ZTE2NTlkLi43MjQyN2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL3BlYWtfdXNiL3BjYW5fdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9wZWFrX3VzYi9wY2FuX3VzYi5jCkBAIC00ODgsNiArNDg4LDcgQEAKIAlzd2l0Y2ggKG5ld19zdGF0ZSkgewogCWNhc2UgQ0FOX1NUQVRFX0JVU19PRkY6CiAJCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9CVVNPRkY7CisJCW1jLT5wZGV2LT5kZXYuY2FuLmNhbl9zdGF0cy5idXNfb2ZmKys7CiAJCWNhbl9idXNfb2ZmKG1jLT5uZXRkZXYpOwogCQlicmVhazsKIApAQCAtODU0LDEwICs4NTUsMTEgQEAKIC8qCiAgKiBkZXNjcmliZSB0aGUgUENBTi1VU0IgYWRhcHRlcgogICovCi1zdHJ1Y3QgcGVha191c2JfYWRhcHRlciBwY2FuX3VzYiA9IHsKK2NvbnN0IHN0cnVjdCBwZWFrX3VzYl9hZGFwdGVyIHBjYW5fdXNiID0gewogCS5uYW1lID0gIlBDQU4tVVNCIiwKIAkuZGV2aWNlX2lkID0gUENBTl9VU0JfUFJPRFVDVF9JRCwKIAkuY3RybF9jb3VudCA9IDEsCisJLmN0cmxtb2RlX3N1cHBvcnRlZCA9IENBTl9DVFJMTU9ERV8zX1NBTVBMRVMgfCBDQU5fQ1RSTE1PREVfTElTVEVOT05MWSwKIAkuY2xvY2sgPSB7CiAJCS5mcmVxID0gUENBTl9VU0JfQ1JZU1RBTF9IWiAvIDIgLAogCX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL3BlYWtfdXNiL3BjYW5fdXNiX2NvcmUuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvcGVha191c2IvcGNhbl91c2JfY29yZS5jCmluZGV4IGM2MmY0OGEuLjc5MjFjZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvcGVha191c2IvcGNhbl91c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvcGVha191c2IvcGNhbl91c2JfY29yZS5jCkBAIC0zNywxNiArMzcsMTkgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBwZWFrX3VzYl90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKFBDQU5fVVNCX1ZFTkRPUl9JRCwgUENBTl9VU0JfUFJPRFVDVF9JRCl9LAogCXtVU0JfREVWSUNFKFBDQU5fVVNCX1ZFTkRPUl9JRCwgUENBTl9VU0JQUk9fUFJPRFVDVF9JRCl9LAorCXtVU0JfREVWSUNFKFBDQU5fVVNCX1ZFTkRPUl9JRCwgUENBTl9VU0JGRF9QUk9EVUNUX0lEKX0sCisJe1VTQl9ERVZJQ0UoUENBTl9VU0JfVkVORE9SX0lELCBQQ0FOX1VTQlBST0ZEX1BST0RVQ1RfSUQpfSwKIAl7fSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHBlYWtfdXNiX3RhYmxlKTsKIAogLyogTGlzdCBvZiBzdXBwb3J0ZWQgUENBTi1VU0IgYWRhcHRlcnMgKE5VTEwgdGVybWluYXRlZCBsaXN0KSAqLwotc3RhdGljIHN0cnVjdCBwZWFrX3VzYl9hZGFwdGVyICpwZWFrX3VzYl9hZGFwdGVyc19saXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBlYWtfdXNiX2FkYXB0ZXIgKmNvbnN0IHBlYWtfdXNiX2FkYXB0ZXJzX2xpc3RbXSA9IHsKIAkmcGNhbl91c2IsCiAJJnBjYW5fdXNiX3BybywKLQlOVUxMLAorCSZwY2FuX3VzYl9mZCwKKwkmcGNhbl91c2JfcHJvX2ZkLAogfTsKIAogLyoKQEAgLTY1LDcgKzY4LDcgQEAKICAqIGluaXRpYWxpemUgYSB0aW1lX3JlZiBvYmplY3Qgd2l0aCB1c2IgYWRhcHRlciBvd24gc2V0dGluZ3MKICAqLwogdm9pZCBwZWFrX3VzYl9pbml0X3RpbWVfcmVmKHN0cnVjdCBwZWFrX3RpbWVfcmVmICp0aW1lX3JlZiwKLQkJCSAgICBzdHJ1Y3QgcGVha191c2JfYWRhcHRlciAqYWRhcHRlcikKKwkJCSAgICBjb25zdCBzdHJ1Y3QgcGVha191c2JfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpZiAodGltZV9yZWYpIHsKIAkJbWVtc2V0KHRpbWVfcmVmLCAwLCBzaXplb2Yoc3RydWN0IHBlYWtfdGltZV9yZWYpKTsKQEAgLTE2NSw2ICsxNjgsMjEgQEAKIH0KIAogLyoKKyAqIHBvc3QgcmVjZWl2ZWQgc2tiIGFmdGVyIGhhdmluZyBzZXQgYW55IGh3IHRpbWVzdGFtcAorICovCitpbnQgcGVha191c2JfbmV0aWZfcngoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgc3RydWN0IHBlYWtfdGltZV9yZWYgKnRpbWVfcmVmLCB1MzIgdHNfbG93LCB1MzIgdHNfaGlnaCkKK3sKKwlzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHMgPSBza2JfaHd0c3RhbXBzKHNrYik7CisJc3RydWN0IHRpbWV2YWwgdHY7CisKKwlwZWFrX3VzYl9nZXRfdHNfdHYodGltZV9yZWYsIHRzX2xvdywgJnR2KTsKKwlod3RzLT5od3RzdGFtcCA9IHRpbWV2YWxfdG9fa3RpbWUodHYpOworCisJcmV0dXJuIG5ldGlmX3J4KHNrYik7Cit9CisKKy8qCiAgKiBjYWxsYmFjayBmb3IgYnVsayBSeCB1cmIKICAqLwogc3RhdGljIHZvaWQgcGVha191c2JfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKQEAgLTI1Myw3ICsyNzEsNyBAQAogCWNhc2UgMDoKIAkJLyogdHJhbnNtaXNzaW9uIGNvbXBsZXRlICovCiAJCW5ldGRldi0+c3RhdHMudHhfcGFja2V0cysrOwotCQluZXRkZXYtPnN0YXRzLnR4X2J5dGVzICs9IGNvbnRleHQtPmRsYzsKKwkJbmV0ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBjb250ZXh0LT5kYXRhX2xlbjsKIAogCQkvKiBwcmV2ZW50IHR4IHRpbWVvdXQgKi8KIAkJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CkBAIC0yODksNyArMzA3LDcgQEAKIAlzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBwZWFrX3R4X3VyYl9jb250ZXh0ICpjb250ZXh0ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbmV0ZGV2LT5zdGF0czsKLQlzdHJ1Y3QgY2FuX2ZyYW1lICpjZiA9IChzdHJ1Y3QgY2FuX2ZyYW1lICopc2tiLT5kYXRhOworCXN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAJdTggKm9idWY7CiAJaW50IGksIGVycjsKQEAgLTMyMiw3ICszNDAsOSBAQAogCX0KIAogCWNvbnRleHQtPmVjaG9faW5kZXggPSBpOwotCWNvbnRleHQtPmRsYyA9IGNmLT5jYW5fZGxjOworCisJLyogTm90ZTogdGhpcyB3b3JrcyB3aXRoIENBTkZEIGZyYW1lcyB0b28gKi8KKwljb250ZXh0LT5kYXRhX2xlbiA9IGNmZC0+bGVuOwogCiAJdXNiX2FuY2hvcl91cmIodXJiLCAmZGV2LT50eF9zdWJtaXR0ZWQpOwogCkBAIC02NzksMTkgKzY5OSw0MyBAQAogfQogCiAvKgotICogY2FuZGV2IGNhbGxiYWNrIHVzZWQgdG8gc2V0IGRldmljZSBiaXRyYXRlLgorICogY2FuZGV2IGNhbGxiYWNrIHVzZWQgdG8gc2V0IGRldmljZSBub21pbmFsL2FyYml0cmF0aW9uIGJpdHJhdGUuCiAgKi8KIHN0YXRpYyBpbnQgcGVha191c2Jfc2V0X2JpdHRpbWluZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBwZWFrX3VzYl9kZXZpY2UgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0ID0gJmRldi0+Y2FuLmJpdHRpbWluZzsKKwljb25zdCBzdHJ1Y3QgcGVha191c2JfYWRhcHRlciAqcGEgPSBkZXYtPmFkYXB0ZXI7CiAKLQlpZiAoZGV2LT5hZGFwdGVyLT5kZXZfc2V0X2JpdHRpbWluZykgewotCQlpbnQgZXJyID0gZGV2LT5hZGFwdGVyLT5kZXZfc2V0X2JpdHRpbWluZyhkZXYsIGJ0KTsKKwlpZiAocGEtPmRldl9zZXRfYml0dGltaW5nKSB7CisJCXN0cnVjdCBjYW5fYml0dGltaW5nICpidCA9ICZkZXYtPmNhbi5iaXR0aW1pbmc7CisJCWludCBlcnIgPSBwYS0+ZGV2X3NldF9iaXR0aW1pbmcoZGV2LCBidCk7CiAKIAkJaWYgKGVycikKIAkJCW5ldGRldl9pbmZvKG5ldGRldiwgImNvdWxkbid0IHNldCBiaXRyYXRlIChlcnIgJWQpXG4iLAotCQkJCWVycik7CisJCQkJICAgIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjYW5kZXYgY2FsbGJhY2sgdXNlZCB0byBzZXQgZGV2aWNlIGRhdGEgYml0cmF0ZS4KKyAqLworc3RhdGljIGludCBwZWFrX3VzYl9zZXRfZGF0YV9iaXR0aW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWNvbnN0IHN0cnVjdCBwZWFrX3VzYl9hZGFwdGVyICpwYSA9IGRldi0+YWRhcHRlcjsKKworCWlmIChwYS0+ZGV2X3NldF9kYXRhX2JpdHRpbWluZykgeworCQlzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQgPSAmZGV2LT5jYW4uZGF0YV9iaXR0aW1pbmc7CisJCWludCBlcnIgPSBwYS0+ZGV2X3NldF9kYXRhX2JpdHRpbWluZyhkZXYsIGJ0KTsKKworCQlpZiAoZXJyKQorCQkJbmV0ZGV2X2luZm8obmV0ZGV2LAorCQkJCSAgICAiY291bGRuJ3Qgc2V0IGRhdGEgYml0cmF0ZSAoZXJyICVkKVxuIiwKKwkJCQkgICAgZXJyKTsKKwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNzA5LDcgKzc1Myw3IEBACiAgKiBjcmVhdGUgb25lIGRldmljZSB3aGljaCBpcyBhdHRhY2hlZCB0byBDQU4gY29udHJvbGxlciAjY3RybF9pZHggb2YgdGhlCiAgKiB1c2IgYWRhcHRlci4KICAqLwotc3RhdGljIGludCBwZWFrX3VzYl9jcmVhdGVfZGV2KHN0cnVjdCBwZWFrX3VzYl9hZGFwdGVyICpwZWFrX3VzYl9hZGFwdGVyLAorc3RhdGljIGludCBwZWFrX3VzYl9jcmVhdGVfZGV2KGNvbnN0IHN0cnVjdCBwZWFrX3VzYl9hZGFwdGVyICpwZWFrX3VzYl9hZGFwdGVyLAogCQkJICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBpbnQgY3RybF9pZHgpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwpAQCAtNzUwLDkgKzc5NCwxMSBAQAogCWRldi0+Y2FuLmNsb2NrID0gcGVha191c2JfYWRhcHRlci0+Y2xvY2s7CiAJZGV2LT5jYW4uYml0dGltaW5nX2NvbnN0ID0gJnBlYWtfdXNiX2FkYXB0ZXItPmJpdHRpbWluZ19jb25zdDsKIAlkZXYtPmNhbi5kb19zZXRfYml0dGltaW5nID0gcGVha191c2Jfc2V0X2JpdHRpbWluZzsKKwlkZXYtPmNhbi5kYXRhX2JpdHRpbWluZ19jb25zdCA9ICZwZWFrX3VzYl9hZGFwdGVyLT5kYXRhX2JpdHRpbWluZ19jb25zdDsKKwlkZXYtPmNhbi5kb19zZXRfZGF0YV9iaXR0aW1pbmcgPSBwZWFrX3VzYl9zZXRfZGF0YV9iaXR0aW1pbmc7CiAJZGV2LT5jYW4uZG9fc2V0X21vZGUgPSBwZWFrX3VzYl9zZXRfbW9kZTsKLQlkZXYtPmNhbi5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBDQU5fQ1RSTE1PREVfM19TQU1QTEVTIHwKLQkJCQkgICAgICBDQU5fQ1RSTE1PREVfTElTVEVOT05MWTsKKwlkZXYtPmNhbi5kb19nZXRfYmVycl9jb3VudGVyID0gcGVha191c2JfYWRhcHRlci0+ZG9fZ2V0X2JlcnJfY291bnRlcjsKKwlkZXYtPmNhbi5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBwZWFrX3VzYl9hZGFwdGVyLT5jdHJsbW9kZV9zdXBwb3J0ZWQ7CiAKIAluZXRkZXYtPm5ldGRldl9vcHMgPSAmcGVha191c2JfbmV0ZGV2X29wczsKIApAQCAtODU3LDE3ICs5MDMsMTggQEAKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAJY29uc3QgdTE2IHVzYl9pZF9wcm9kdWN0ID0gbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwotCXN0cnVjdCBwZWFrX3VzYl9hZGFwdGVyICpwZWFrX3VzYl9hZGFwdGVyLCAqKnBwOworCWNvbnN0IHN0cnVjdCBwZWFrX3VzYl9hZGFwdGVyICpwZWFrX3VzYl9hZGFwdGVyID0gTlVMTDsKIAlpbnQgaSwgZXJyID0gLUVOT01FTTsKIAogCXVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCiAJLyogZ2V0IGNvcnJlc3BvbmRpbmcgUENBTi1VU0IgYWRhcHRlciAqLwotCWZvciAocHAgPSBwZWFrX3VzYl9hZGFwdGVyc19saXN0OyAqcHA7IHBwKyspCi0JCWlmICgoKnBwKS0+ZGV2aWNlX2lkID09IHVzYl9pZF9wcm9kdWN0KQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBlYWtfdXNiX2FkYXB0ZXJzX2xpc3QpOyBpKyspCisJCWlmIChwZWFrX3VzYl9hZGFwdGVyc19saXN0W2ldLT5kZXZpY2VfaWQgPT0gdXNiX2lkX3Byb2R1Y3QpIHsKKwkJCXBlYWtfdXNiX2FkYXB0ZXIgPSBwZWFrX3VzYl9hZGFwdGVyc19saXN0W2ldOwogCQkJYnJlYWs7CisJCX0KIAotCXBlYWtfdXNiX2FkYXB0ZXIgPSAqcHA7CiAJaWYgKCFwZWFrX3VzYl9hZGFwdGVyKSB7CiAJCS8qIHNob3VsZCBuZXZlciBjb21lIGV4Y2VwdCBkZXZpY2VfaWQgYmFkIHVzYWdlIGluIHRoaXMgZmlsZSAqLwogCQlwcl9lcnIoIiVzOiBkaWRuJ3QgZmluZCBkZXZpY2UgaWQuIDB4JXggaW4gZGV2aWNlcyBsaXN0XG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9wZWFrX3VzYi9wY2FuX3VzYl9jb3JlLmggYi9kcml2ZXJzL25ldC9jYW4vdXNiL3BlYWtfdXNiL3BjYW5fdXNiX2NvcmUuaAppbmRleCAwNzNiNDdmLi45ZTYyNGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL3BlYWtfdXNiL3BjYW5fdXNiX2NvcmUuaAorKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL3BlYWtfdXNiL3BjYW5fdXNiX2NvcmUuaApAQCAtMjUsNiArMjUsOCBAQAogLyogc3VwcG9ydGVkIGRldmljZSBpZHMuICovCiAjZGVmaW5lIFBDQU5fVVNCX1BST0RVQ1RfSUQJCTB4MDAwYwogI2RlZmluZSBQQ0FOX1VTQlBST19QUk9EVUNUX0lECQkweDAwMGQKKyNkZWZpbmUgUENBTl9VU0JQUk9GRF9QUk9EVUNUX0lECTB4MDAxMQorI2RlZmluZSBQQ0FOX1VTQkZEX1BST0RVQ1RfSUQJCTB4MDAxMgogCiAjZGVmaW5lIFBDQU5fVVNCX0RSSVZFUl9OQU1FCQkicGVha191c2IiCiAKQEAgLTQ0LDggKzQ2LDEwIEBACiBzdHJ1Y3QgcGVha191c2JfYWRhcHRlciB7CiAJY2hhciAqbmFtZTsKIAl1MzIgZGV2aWNlX2lkOworCXUzMiBjdHJsbW9kZV9zdXBwb3J0ZWQ7CiAJc3RydWN0IGNhbl9jbG9jayBjbG9jazsKIAljb25zdCBzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25zdCBiaXR0aW1pbmdfY29uc3Q7CisJY29uc3Qgc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3QgZGF0YV9iaXR0aW1pbmdfY29uc3Q7CiAJdW5zaWduZWQgaW50IGN0cmxfY291bnQ7CiAKIAlpbnQgKCppbnRmX3Byb2JlKShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CkBAIC01Nyw2ICs2MSw4IEBACiAJaW50ICgqZGV2X2Nsb3NlKShzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYpOwogCWludCAoKmRldl9zZXRfYml0dGltaW5nKShzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYsCiAJCQkJCXN0cnVjdCBjYW5fYml0dGltaW5nICpidCk7CisJaW50ICgqZGV2X3NldF9kYXRhX2JpdHRpbWluZykoc3RydWN0IHBlYWtfdXNiX2RldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBjYW5fYml0dGltaW5nICpidCk7CiAJaW50ICgqZGV2X3NldF9idXMpKHN0cnVjdCBwZWFrX3VzYl9kZXZpY2UgKmRldiwgdTggb25vZmYpOwogCWludCAoKmRldl9nZXRfZGV2aWNlX2lkKShzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYsIHUzMiAqZGV2aWNlX2lkKTsKIAlpbnQgKCpkZXZfZGVjb2RlX2J1Zikoc3RydWN0IHBlYWtfdXNiX2RldmljZSAqZGV2LCBzdHJ1Y3QgdXJiICp1cmIpOwpAQCAtNjYsNiArNzIsOCBAQAogCWludCAoKmRldl9zdG9wKShzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYpOwogCWludCAoKmRldl9yZXN0YXJ0X2FzeW5jKShzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYsIHN0cnVjdCB1cmIgKnVyYiwKIAkJCQkJdTggKmJ1Zik7CisJaW50ICgqZG9fZ2V0X2JlcnJfY291bnRlcikoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICBzdHJ1Y3QgY2FuX2JlcnJfY291bnRlciAqYmVjKTsKIAl1OCBlcF9tc2dfaW47CiAJdTggZXBfbXNnX291dFtQQ0FOX1VTQl9NQVhfQ0hBTk5FTF07CiAJdTggdHNfdXNlZF9iaXRzOwpAQCAtNzgsMjEgKzg2LDIzIEBACiAJaW50IHNpemVvZl9kZXZfcHJpdmF0ZTsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgcGVha191c2JfYWRhcHRlciBwY2FuX3VzYjsKLWV4dGVybiBzdHJ1Y3QgcGVha191c2JfYWRhcHRlciBwY2FuX3VzYl9wcm87CitleHRlcm4gY29uc3Qgc3RydWN0IHBlYWtfdXNiX2FkYXB0ZXIgcGNhbl91c2I7CitleHRlcm4gY29uc3Qgc3RydWN0IHBlYWtfdXNiX2FkYXB0ZXIgcGNhbl91c2JfcHJvOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBwZWFrX3VzYl9hZGFwdGVyIHBjYW5fdXNiX2ZkOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBwZWFrX3VzYl9hZGFwdGVyIHBjYW5fdXNiX3Byb19mZDsKIAogc3RydWN0IHBlYWtfdGltZV9yZWYgewogCXN0cnVjdCB0aW1ldmFsIHR2X2hvc3RfMCwgdHZfaG9zdDsKIAl1MzIgdHNfZGV2XzEsIHRzX2Rldl8yOwogCXU2NCB0c190b3RhbDsKIAl1MzIgdGlja19jb3VudDsKLQlzdHJ1Y3QgcGVha191c2JfYWRhcHRlciAqYWRhcHRlcjsKKwljb25zdCBzdHJ1Y3QgcGVha191c2JfYWRhcHRlciAqYWRhcHRlcjsKIH07CiAKIHN0cnVjdCBwZWFrX3R4X3VyYl9jb250ZXh0IHsKIAlzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXY7CiAJdTMyIGVjaG9faW5kZXg7Ci0JdTggZGxjOworCXU4IGRhdGFfbGVuOwogCXN0cnVjdCB1cmIgKnVyYjsKIH07CiAKQEAgLTEwMiw3ICsxMTIsNyBAQAogLyogUEVBSy1TeXN0ZW0gVVNCIGRldmljZSAqLwogc3RydWN0IHBlYWtfdXNiX2RldmljZSB7CiAJc3RydWN0IGNhbl9wcml2IGNhbjsKLQlzdHJ1Y3QgcGVha191c2JfYWRhcHRlciAqYWRhcHRlcjsKKwljb25zdCBzdHJ1Y3QgcGVha191c2JfYWRhcHRlciAqYWRhcHRlcjsKIAl1bnNpZ25lZCBpbnQgY3RybF9pZHg7CiAJdTMyIHN0YXRlOwogCkBAIC0xMzQsMTIgKzE0NCwxNCBAQAogCiAvKiBjb21tb24gdGltZXN0YW1wIG1hbmFnZW1lbnQgKi8KIHZvaWQgcGVha191c2JfaW5pdF90aW1lX3JlZihzdHJ1Y3QgcGVha190aW1lX3JlZiAqdGltZV9yZWYsCi0JCQkgICAgc3RydWN0IHBlYWtfdXNiX2FkYXB0ZXIgKmFkYXB0ZXIpOworCQkJICAgIGNvbnN0IHN0cnVjdCBwZWFrX3VzYl9hZGFwdGVyICphZGFwdGVyKTsKIHZvaWQgcGVha191c2JfdXBkYXRlX3RzX25vdyhzdHJ1Y3QgcGVha190aW1lX3JlZiAqdGltZV9yZWYsIHUzMiB0c19ub3cpOwogdm9pZCBwZWFrX3VzYl9zZXRfdHNfbm93KHN0cnVjdCBwZWFrX3RpbWVfcmVmICp0aW1lX3JlZiwgdTMyIHRzX25vdyk7CiB2b2lkIHBlYWtfdXNiX2dldF90c190dihzdHJ1Y3QgcGVha190aW1lX3JlZiAqdGltZV9yZWYsIHUzMiB0cywKIAkJCXN0cnVjdCB0aW1ldmFsICp0dik7Ci0KK2ludCBwZWFrX3VzYl9uZXRpZl9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICBzdHJ1Y3QgcGVha190aW1lX3JlZiAqdGltZV9yZWYsIHUzMiB0c19sb3csIHUzMiB0c19oaWdoKTsKIHZvaWQgcGVha191c2JfYXN5bmNfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKTsKIHZvaWQgcGVha191c2JfcmVzdGFydF9jb21wbGV0ZShzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvcGVha191c2IvcGNhbl91c2JfZmQuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvcGVha191c2IvcGNhbl91c2JfZmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjJjM2YwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9wZWFrX3VzYi9wY2FuX3VzYl9mZC5jCkBAIC0wLDAgKzEsMTA5NSBAQAorLyoKKyAqIENBTiBkcml2ZXIgZm9yIFBFQUsgU3lzdGVtIFBDQU4tVVNCIEZEIC8gUENBTi1VU0IgUHJvIEZEIGFkYXB0ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBTdGVwaGFuZSBHcm9zamVhbiA8cy5ncm9zamVhbkBwZWFrLXN5c3RlbS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8bGludXgvY2FuLmg+CisjaW5jbHVkZSA8bGludXgvY2FuL2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nhbi9lcnJvci5oPgorCisjaW5jbHVkZSAicGNhbl91c2JfY29yZS5oIgorI2luY2x1ZGUgInBjYW5fdXNiX3Byby5oIgorI2luY2x1ZGUgInBjYW5fdWNhbi5oIgorCitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiUEVBSy1TeXN0ZW0gUENBTi1VU0IgRkQgYWRhcHRlciIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIlBFQUstU3lzdGVtIFBDQU4tVVNCIFBybyBGRCBhZGFwdGVyIik7CisKKyNkZWZpbmUgUENBTl9VU0JQUk9GRF9DSEFOTkVMX0NPVU5UCTIKKyNkZWZpbmUgUENBTl9VU0JGRF9DSEFOTkVMX0NPVU5UCTEKKworLyogUENBTi1VU0IgUHJvIEZEIGFkYXB0ZXIgaW50ZXJuYWwgY2xvY2sgKEh6KSAqLworI2RlZmluZSBQQ0FOX1VGRF9DUllTVEFMX0haCQk4MDAwMDAwMAorCisjZGVmaW5lIFBDQU5fVUZEX0NNRF9CVUZGRVJfU0laRQk1MTIKKyNkZWZpbmUgUENBTl9VRkRfTE9TUERfUEtUX1NJWkUJCTY0CisKKy8qIFBDQU4tVVNCIFBybyBGRCBjb21tYW5kIHRpbWVvdXQgKG1zLikgKi8KKyNkZWZpbmUgUENBTl9VRkRfQ01EX1RJTUVPVVRfTVMJCTEwMDAKKworLyogUENBTi1VU0IgUHJvIEZEIHJ4L3R4IGJ1ZmZlcnMgc2l6ZSAqLworI2RlZmluZSBQQ0FOX1VGRF9SWF9CVUZGRVJfU0laRQkJMjA0OAorI2RlZmluZSBQQ0FOX1VGRF9UWF9CVUZGRVJfU0laRQkJNTEyCisKKy8qIHJlYWQgc29tZSB2ZXJzaW9ucyBpbmZvIGZyb20gdGhlIGh3IGRldmNpZSAqLworc3RydWN0IF9fcGFja2VkIHBjYW5fdWZkX2Z3X2luZm8geworCV9fbGUxNglzaXplX29mOwkvKiBzaXplb2YgdGhpcyAqLworCV9fbGUxNgl0eXBlOwkJLyogdHlwZSBvZiB0aGlzIHN0cnVjdHVyZSAqLworCXU4CWh3X3R5cGU7CS8qIFR5cGUgb2YgaGFyZHdhcmUgKEhXX1RZUEVfeHh4KSAqLworCXU4CWJsX3ZlcnNpb25bM107CS8qIEJvb3Rsb2FkZXIgdmVyc2lvbiAqLworCXU4CWh3X3ZlcnNpb247CS8qIEhhcmR3YXJlIHZlcnNpb24gKFBDQikgKi8KKwl1OAlmd192ZXJzaW9uWzNdOwkvKiBGaXJtd2FyZSB2ZXJzaW9uICovCisJX19sZTMyCWRldl9pZFsyXTsJLyogImRldmljZSBpZCIgcGVyIENBTiAqLworCV9fbGUzMglzZXJfbm87CQkvKiBTL04gKi8KKwlfX2xlMzIJZmxhZ3M7CQkvKiBzcGVjaWFsIGZ1bmN0aW9ucyAqLworfTsKKworLyogaGFuZGxlIGRldmljZSBzcGVjaWZpYyBpbmZvIHVzZWQgYnkgdGhlIG5ldGRldmljZXMgKi8KK3N0cnVjdCBwY2FuX3VzYl9mZF9pZiB7CisJc3RydWN0IHBlYWtfdXNiX2RldmljZQkqZGV2W1BDQU5fVVNCX01BWF9DSEFOTkVMXTsKKwlzdHJ1Y3QgcGNhbl91ZmRfZndfaW5mbwlmd19pbmZvOworCXN0cnVjdCBwZWFrX3RpbWVfcmVmCXRpbWVfcmVmOworCWludAkJCWNtX2lnbm9yZV9jb3VudDsKKwlpbnQJCQlkZXZfb3BlbmVkX2NvdW50OworfTsKKworLyogZGV2aWNlIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgcGNhbl91c2JfZmRfZGV2aWNlIHsKKwlzdHJ1Y3QgcGVha191c2JfZGV2aWNlCWRldjsKKwlzdHJ1Y3QgY2FuX2JlcnJfY291bnRlcgliZWM7CisJc3RydWN0IHBjYW5fdXNiX2ZkX2lmCSp1c2JfaWY7CisJdTgJCQkqY21kX2J1ZmZlcl9hZGRyOworfTsKKworLyogRXh0ZW5kZWQgVVNCIGNvbW1hbmRzIChub24gdUNBTiBjb21tYW5kcykgKi8KKworLyogQ2xvY2sgTW9kZXMgY29tbWFuZCAqLworI2RlZmluZSBQQ0FOX1VGRF9DTURfQ0xLX1NFVAkJMHg4MAorCisjZGVmaW5lIFBDQU5fVUZEX0NMS184ME1IWgkJMHgwCisjZGVmaW5lIFBDQU5fVUZEX0NMS182ME1IWgkJMHgxCisjZGVmaW5lIFBDQU5fVUZEX0NMS180ME1IWgkJMHgyCisjZGVmaW5lIFBDQU5fVUZEX0NMS18zME1IWgkJMHgzCisjZGVmaW5lIFBDQU5fVUZEX0NMS18yNE1IWgkJMHg0CisjZGVmaW5lIFBDQU5fVUZEX0NMS18yME1IWgkJMHg1CisjZGVmaW5lIFBDQU5fVUZEX0NMS19ERUYJCVBDQU5fVUZEX0NMS184ME1IWgorCitzdHJ1Y3QgX19wYWNrZWQgcGNhbl91ZmRfY2xvY2sgeworCV9fbGUxNglvcGNvZGVfY2hhbm5lbDsKKworCXU4CW1vZGU7CisJdTgJdW51c2VkWzVdOworfTsKKworLyogTEVEIGNvbnRyb2wgY29tbWFuZCAqLworI2RlZmluZSBQQ0FOX1VGRF9DTURfTEVEX1NFVAkJMHg4NgorCisjZGVmaW5lIFBDQU5fVUZEX0xFRF9ERVYJCTB4MDAKKyNkZWZpbmUgUENBTl9VRkRfTEVEX0ZBU1QJCTB4MDEKKyNkZWZpbmUgUENBTl9VRkRfTEVEX1NMT1cJCTB4MDIKKyNkZWZpbmUgUENBTl9VRkRfTEVEX09OCQkJMHgwMworI2RlZmluZSBQQ0FOX1VGRF9MRURfT0ZGCQkweDA0CisjZGVmaW5lIFBDQU5fVUZEX0xFRF9ERUYJCVBDQU5fVUZEX0xFRF9ERVYKKworc3RydWN0IF9fcGFja2VkIHBjYW5fdWZkX2xlZCB7CisJX19sZTE2CW9wY29kZV9jaGFubmVsOworCisJdTgJbW9kZTsKKwl1OAl1bnVzZWRbNV07Cit9OworCisvKiBFeHRlbmRlZCB1c2FnZSBvZiB1Q0FOIGNvbW1hbmRzIENNRF9SWF9GUkFNRV94eHhBQkxFIGZvciBQQ0FOLVVTQiBQcm8gRkQgKi8KKyNkZWZpbmUgUENBTl9VRkRfRkxURVhUX0NBTElCUkFUSU9OCTB4ODAwMAorCitzdHJ1Y3QgX19wYWNrZWQgcGNhbl91ZmRfZmlsdGVyX2V4dCB7CisJX19sZTE2CW9wY29kZV9jaGFubmVsOworCisJX19sZTE2CWV4dF9tYXNrOworCXUxNgl1bnVzZWQ7CisJX19sZTE2CXVzYl9tYXNrOworfTsKKworLyogRXh0ZW5kZWQgdXNhZ2Ugb2YgdUNBTiBtZXNzYWdlcyBmb3IgUENBTi1VU0IgUHJvIEZEICovCisjZGVmaW5lIFBDQU5fVUZEX01TR19DQUxJQlJBVElPTgkweDEwMAorCitzdHJ1Y3QgX19wYWNrZWQgcGNhbl91ZmRfdHNfbXNnIHsKKwlfX2xlMTYJc2l6ZTsKKwlfX2xlMTYJdHlwZTsKKwlfX2xlMzIJdHNfbG93OworCV9fbGUzMgl0c19oaWdoOworCV9fbGUxNgl1c2JfZnJhbWVfaW5kZXg7CisJdTE2CXVudXNlZDsKK307CisKKyNkZWZpbmUgUENBTl9VRkRfTVNHX09WRVJSVU4JCTB4MTAxCisKKyNkZWZpbmUgUENBTl9VRkRfT1ZNU0dfQ0hBTk5FTChvKQkoKG8pLT5jaGFubmVsICYgMHhmKQorCitzdHJ1Y3QgX19wYWNrZWQgcGNhbl91ZmRfb3ZyX21zZyB7CisJX19sZTE2CXNpemU7CisJX19sZTE2CXR5cGU7CisJX19sZTMyCXRzX2xvdzsKKwlfX2xlMzIJdHNfaGlnaDsKKwl1OAljaGFubmVsOworCXU4CXVudXNlZFszXTsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHB1ZmRfb21zZ19nZXRfY2hhbm5lbChzdHJ1Y3QgcGNhbl91ZmRfb3ZyX21zZyAqb20pCit7CisJcmV0dXJuIG9tLT5jaGFubmVsICYgMHhmOworfQorCisvKiBDbG9jayBtb2RlIGZyZXF1ZW5jeSB2YWx1ZXMgKi8KK3N0YXRpYyBjb25zdCB1MzIgcGNhbl91c2JfZmRfY2xrX2ZyZXFbNl0gPSB7CisJW1BDQU5fVUZEX0NMS184ME1IWl0gPSA4MDAwMDAwMCwKKwlbUENBTl9VRkRfQ0xLXzYwTUhaXSA9IDYwMDAwMDAwLAorCVtQQ0FOX1VGRF9DTEtfNDBNSFpdID0gNDAwMDAwMDAsCisJW1BDQU5fVUZEX0NMS18zME1IWl0gPSAzMDAwMDAwMCwKKwlbUENBTl9VRkRfQ0xLXzI0TUhaXSA9IDI0MDAwMDAwLAorCVtQQ0FOX1VGRF9DTEtfMjBNSFpdID0gMjAwMDAwMDAKK307CisKKy8qIHJldHVybiBhIGRldmljZSBVU0IgaW50ZXJmYWNlICovCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgcGNhbl91c2JfZmRfaWYgKnBjYW5fdXNiX2ZkX2Rldl9pZihzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjYW5fdXNiX2ZkX2RldmljZSAqcGRldiA9CisJCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGNhbl91c2JfZmRfZGV2aWNlLCBkZXYpOworCXJldHVybiBwZGV2LT51c2JfaWY7Cit9CisKKy8qIHJldHVybiBhIGRldmljZSBVU0IgY29tbWFuZHMgYnVmZmVyICovCitzdGF0aWMgaW5saW5lIHZvaWQgKnBjYW5fdXNiX2ZkX2NtZF9idWZmZXIoc3RydWN0IHBlYWtfdXNiX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2FuX3VzYl9mZF9kZXZpY2UgKnBkZXYgPQorCQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBjYW5fdXNiX2ZkX2RldmljZSwgZGV2KTsKKwlyZXR1cm4gcGRldi0+Y21kX2J1ZmZlcl9hZGRyOworfQorCisvKiBzZW5kIFBDQU4tVVNCIFBybyBGRCBjb21tYW5kcyBzeW5jaHJvbm91c2x5ICovCitzdGF0aWMgaW50IHBjYW5fdXNiX2ZkX3NlbmRfY21kKHN0cnVjdCBwZWFrX3VzYl9kZXZpY2UgKmRldiwgdm9pZCAqY21kX3RhaWwpCit7CisJdm9pZCAqY21kX2hlYWQgPSBwY2FuX3VzYl9mZF9jbWRfYnVmZmVyKGRldik7CisJaW50IGVycjsKKwl1OCAqcGFja2V0X3B0cjsKKwlpbnQgaSwgbiA9IDEsIHBhY2tldF9sZW47CisJcHRyZGlmZl90IGNtZF9sZW47CisKKwkvKiB1c2IgZGV2aWNlIHVucmVnaXN0ZXJlZD8gKi8KKwlpZiAoIShkZXYtPnN0YXRlICYgUENBTl9VU0JfU1RBVEVfQ09OTkVDVEVEKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBpZiBhIHBhY2tldCBpcyBub3QgZmlsbGVkIGNvbXBsZXRlbHkgYnkgY29tbWFuZHMsIHRoZSBjb21tYW5kIGxpc3QKKwkgKiBpcyB0ZXJtaW5hdGVkIHdpdGggYW4gImVuZCBvZiBjb2xsZWN0aW9uIiByZWNvcmQuCisJICovCisJY21kX2xlbiA9IGNtZF90YWlsIC0gY21kX2hlYWQ7CisJaWYgKGNtZF9sZW4gPD0gKFBDQU5fVUZEX0NNRF9CVUZGRVJfU0laRSAtIHNpemVvZih1NjQpKSkgeworCQltZW1zZXQoY21kX3RhaWwsIDB4ZmYsIHNpemVvZih1NjQpKTsKKwkJY21kX2xlbiArPSBzaXplb2YodTY0KTsKKwl9CisKKwlwYWNrZXRfcHRyID0gY21kX2hlYWQ7CisKKwkvKiBmaXJtd2FyZSBpcyBub3QgYWJsZSB0byByZS1hc3NlbWJsZSA1MTIgYnl0ZXMgYnVmZmVyIGluIGZ1bGwtc3BlZWQgKi8KKwlpZiAoKGRldi0+dWRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX0hJR0gpICYmCisJICAgIChjbWRfbGVuID4gUENBTl9VRkRfTE9TUERfUEtUX1NJWkUpKSB7CisJCXBhY2tldF9sZW4gPSBQQ0FOX1VGRF9MT1NQRF9QS1RfU0laRTsKKwkJbiArPSBjbWRfbGVuIC8gcGFja2V0X2xlbjsKKwl9IGVsc2UgeworCQlwYWNrZXRfbGVuID0gY21kX2xlbjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWVyciA9IHVzYl9idWxrX21zZyhkZXYtPnVkZXYsCisJCQkJICAgdXNiX3NuZGJ1bGtwaXBlKGRldi0+dWRldiwKKwkJCQkJCSAgIFBDQU5fVVNCUFJPX0VQX0NNRE9VVCksCisJCQkJICAgcGFja2V0X3B0ciwgcGFja2V0X2xlbiwKKwkJCQkgICBOVUxMLCBQQ0FOX1VGRF9DTURfVElNRU9VVF9NUyk7CisJCWlmIChlcnIpIHsKKwkJCW5ldGRldl9lcnIoZGV2LT5uZXRkZXYsCisJCQkJICAgInNlbmRpbmcgY29tbWFuZCBmYWlsdXJlOiAlZFxuIiwgZXJyKTsKKwkJCWJyZWFrOworCQl9CisKKwkJcGFja2V0X3B0ciArPSBwYWNrZXRfbGVuOworCX0KKworCXJldHVybiBlcnI7Cit9CisKKy8qIGJ1aWxkIHRoZSBjb21tYW5kcyBsaXN0IGluIHRoZSBnaXZlbiBidWZmZXIsIHRvIGVudGVyIG9wZXJhdGlvbmFsIG1vZGUgKi8KK3N0YXRpYyBpbnQgcGNhbl91c2JfZmRfYnVpbGRfcmVzdGFydF9jbWQoc3RydWN0IHBlYWtfdXNiX2RldmljZSAqZGV2LCB1OCAqYnVmKQoreworCXN0cnVjdCBwdWNhbl93cl9lcnJfY250ICpwcmM7CisJc3RydWN0IHB1Y2FuX2NvbW1hbmQgKmNtZDsKKwl1OCAqcGMgPSBidWY7CisKKwkvKiAxc3QsIHJlc2V0IGVycm9yIGNvdW50ZXJzOiAqLworCXByYyA9IChzdHJ1Y3QgcHVjYW5fd3JfZXJyX2NudCAqKXBjOworCXByYy0+b3Bjb2RlX2NoYW5uZWwgPSBwdWNhbl9jbWRfb3Bjb2RlX2NoYW5uZWwoZGV2LAorCQkJCQkJICAgICAgIFBVQ0FOX0NNRF9XUl9FUlJfQ05UKTsKKworCS8qIHNlbGVjdCBib3RoIGNvdW50ZXJzICovCisJcHJjLT5zZWxfbWFzayA9IGNwdV90b19sZTE2KFBVQ0FOX1dSRVJSQ05UX1RFfFBVQ0FOX1dSRVJSQ05UX1JFKTsKKworCS8qIGFuZCByZXNldCB0aGVpciB2YWx1ZXMgKi8KKwlwcmMtPnR4X2NvdW50ZXIgPSAwOworCXByYy0+cnhfY291bnRlciA9IDA7CisKKwkvKiBtb3ZlcyB0aGUgcG9pbnRlciBmb3J3YXJkICovCisJcGMgKz0gc2l6ZW9mKHN0cnVjdCBwdWNhbl93cl9lcnJfY250KTsKKworCS8qIG5leHQsIGdvIGJhY2sgdG8gb3BlcmF0aW9uYWwgbW9kZSAqLworCWNtZCA9IChzdHJ1Y3QgcHVjYW5fY29tbWFuZCAqKXBjOworCWNtZC0+b3Bjb2RlX2NoYW5uZWwgPSBwdWNhbl9jbWRfb3Bjb2RlX2NoYW5uZWwoZGV2LAorCQkJCShkZXYtPmNhbi5jdHJsbW9kZSAmIENBTl9DVFJMTU9ERV9MSVNURU5PTkxZKSA/CisJCQkJCQlQVUNBTl9DTURfTElTVEVOX09OTFlfTU9ERSA6CisJCQkJCQlQVUNBTl9DTURfTk9STUFMX01PREUpOworCXBjICs9IHNpemVvZihzdHJ1Y3QgcHVjYW5fY29tbWFuZCk7CisKKwlyZXR1cm4gcGMgLSBidWY7Cit9CisKKy8qIHNldCBDQU4gYnVzIG9uL29mZiAqLworc3RhdGljIGludCBwY2FuX3VzYl9mZF9zZXRfYnVzKHN0cnVjdCBwZWFrX3VzYl9kZXZpY2UgKmRldiwgdTggb25vZmYpCit7CisJdTggKnBjID0gcGNhbl91c2JfZmRfY21kX2J1ZmZlcihkZXYpOworCWludCBsOworCisJaWYgKG9ub2ZmKSB7CisJCS8qIGJ1aWxkIHRoZSBjbWRzIGxpc3QgdG8gZW50ZXIgb3BlcmF0aW9uYWwgbW9kZSAqLworCQlsID0gcGNhbl91c2JfZmRfYnVpbGRfcmVzdGFydF9jbWQoZGV2LCBwYyk7CisJfSBlbHNlIHsKKwkJc3RydWN0IHB1Y2FuX2NvbW1hbmQgKmNtZCA9IChzdHJ1Y3QgcHVjYW5fY29tbWFuZCAqKXBjOworCisJCS8qIGJ1aWxkIGNtZCB0byBnbyBiYWNrIHRvIHJlc2V0IG1vZGUgKi8KKwkJY21kLT5vcGNvZGVfY2hhbm5lbCA9IHB1Y2FuX2NtZF9vcGNvZGVfY2hhbm5lbChkZXYsCisJCQkJCQkJUFVDQU5fQ01EX1JFU0VUX01PREUpOworCQlsID0gc2l6ZW9mKHN0cnVjdCBwdWNhbl9jb21tYW5kKTsKKwl9CisKKwkvKiBzZW5kIHRoZSBjb21tYW5kICovCisJcmV0dXJuIHBjYW5fdXNiX2ZkX3NlbmRfY21kKGRldiwgcGMgKyBsKTsKK30KKworLyogc2V0IGZpbHRlcmluZyBtYXNrczoKKyAqCisgKglpZHggIGluIHJhbmdlIFswLi42M10gc2VsZWN0cyBhIHJvdyAjaWR4LCBhbGwgcm93cyBvdGhlcndpc2UKKyAqCW1hc2sgaW4gcmFuZ2UgWzAuLjB4ZmZmZmZmZmZdIGRlZmluZXMgdXAgdG8gMzIgQ0FOSURzIGluIHRoZSByb3cocykKKyAqCisgKglFYWNoIGJpdCBvZiB0aGlzIDY0IHggMzIgYml0cyBhcnJheSBkZWZpbmVzIGEgQ0FOSUQgdmFsdWU6CisgKgorICoJYml0W2ksal0gPSAxIGltcGxpZXMgdGhhdCBDQU5JRD0oaSB4IDMyKStqIHdpbGwgYmUgcmVjZWl2ZWQsIHdoaWxlCisgKgliaXRbaSxqXSA9IDAgaW1wbGllcyB0aGF0IENBTklEPShpIHggMzIpK2ogd2lsbCBiZSBkaXNjYXJkZWQuCisgKi8KK3N0YXRpYyBpbnQgcGNhbl91c2JfZmRfc2V0X2ZpbHRlcl9zdGQoc3RydWN0IHBlYWtfdXNiX2RldmljZSAqZGV2LCBpbnQgaWR4LAorCQkJCSAgICAgIHUzMiBtYXNrKQoreworCXN0cnVjdCBwdWNhbl9maWx0ZXJfc3RkICpjbWQgPSBwY2FuX3VzYl9mZF9jbWRfYnVmZmVyKGRldik7CisJaW50IGksIG47CisKKwkvKiBzZWxlY3QgYWxsIHJvd3Mgd2hlbiBpZHggaXMgb3V0IG9mIHJhbmdlIFswLi42M10gKi8KKwlpZiAoKGlkeCA8IDApIHx8IChpZHggPj0gKDEgPDwgUFVDQU5fRkxUU1REX1JPV19JRFhfQklUUykpKSB7CisJCW4gPSAxIDw8IFBVQ0FOX0ZMVFNURF9ST1dfSURYX0JJVFM7CisJCWlkeCA9IDA7CisKKwkvKiBzZWxlY3QgdGhlIHJvdyAoYW5kIG9ubHkgdGhlIHJvdykgb3RoZXJ3aXNlICovCisJfSBlbHNlIHsKKwkJbiA9IGlkeCArIDE7CisJfQorCisJZm9yIChpID0gaWR4OyBpIDwgbjsgaSsrLCBjbWQrKykgeworCQljbWQtPm9wY29kZV9jaGFubmVsID0gcHVjYW5fY21kX29wY29kZV9jaGFubmVsKGRldiwKKwkJCQkJCQlQVUNBTl9DTURfRklMVEVSX1NURCk7CisJCWNtZC0+aWR4ID0gY3B1X3RvX2xlMTYoaSk7CisJCWNtZC0+bWFzayA9IGNwdV90b19sZTMyKG1hc2spOworCX0KKworCS8qIHNlbmQgdGhlIGNvbW1hbmQgKi8KKwlyZXR1cm4gcGNhbl91c2JfZmRfc2VuZF9jbWQoZGV2LCBjbWQpOworfQorCisvKiBzZXQvdW5zZXQgbm90aWZpY2F0aW9ucyBmaWx0ZXI6CisgKgorICoJb25vZmYJc2V0cygxKS91bnNldCgwKSBub3RpZmljYXRpb25zCisgKgltYXNrCWVhY2ggYml0IGRlZmluZXMgYSBraW5kIG9mIG5vdGlmaWNhdGlvbiB0byBzZXQvdW5zZXQKKyAqLworc3RhdGljIGludCBwY2FuX3VzYl9mZF9zZXRfZmlsdGVyX2V4dChzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYsCisJCQkJICAgICAgYm9vbCBvbm9mZiwgdTE2IGV4dF9tYXNrLCB1MTYgdXNiX21hc2spCit7CisJc3RydWN0IHBjYW5fdWZkX2ZpbHRlcl9leHQgKmNtZCA9IHBjYW5fdXNiX2ZkX2NtZF9idWZmZXIoZGV2KTsKKworCWNtZC0+b3Bjb2RlX2NoYW5uZWwgPSBwdWNhbl9jbWRfb3Bjb2RlX2NoYW5uZWwoZGV2LAorCQkJCQkob25vZmYpID8gUFVDQU5fQ01EX1JYX0ZSQU1FX0VOQUJMRSA6CisJCQkJCQkgIFBVQ0FOX0NNRF9SWF9GUkFNRV9ESVNBQkxFKTsKKworCWNtZC0+ZXh0X21hc2sgPSBjcHVfdG9fbGUxNihleHRfbWFzayk7CisJY21kLT51c2JfbWFzayA9IGNwdV90b19sZTE2KHVzYl9tYXNrKTsKKworCS8qIHNlbmQgdGhlIGNvbW1hbmQgKi8KKwlyZXR1cm4gcGNhbl91c2JfZmRfc2VuZF9jbWQoZGV2LCArK2NtZCk7Cit9CisKKy8qIHNldHVwIExFRCBjb250cm9sICovCitzdGF0aWMgaW50IHBjYW5fdXNiX2ZkX3NldF9jYW5fbGVkKHN0cnVjdCBwZWFrX3VzYl9kZXZpY2UgKmRldiwgdTggbGVkX21vZGUpCit7CisJc3RydWN0IHBjYW5fdWZkX2xlZCAqY21kID0gcGNhbl91c2JfZmRfY21kX2J1ZmZlcihkZXYpOworCisJY21kLT5vcGNvZGVfY2hhbm5lbCA9IHB1Y2FuX2NtZF9vcGNvZGVfY2hhbm5lbChkZXYsCisJCQkJCQkgICAgICAgUENBTl9VRkRfQ01EX0xFRF9TRVQpOworCWNtZC0+bW9kZSA9IGxlZF9tb2RlOworCisJLyogc2VuZCB0aGUgY29tbWFuZCAqLworCXJldHVybiBwY2FuX3VzYl9mZF9zZW5kX2NtZChkZXYsICsrY21kKTsKK30KKworLyogc2V0IENBTiBjbG9jayBkb21haW4gKi8KK3N0YXRpYyBpbnQgcGNhbl91c2JfZmRfc2V0X2Nsb2NrX2RvbWFpbihzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYsCisJCQkJCXU4IGNsa19tb2RlKQoreworCXN0cnVjdCBwY2FuX3VmZF9jbG9jayAqY21kID0gcGNhbl91c2JfZmRfY21kX2J1ZmZlcihkZXYpOworCisJY21kLT5vcGNvZGVfY2hhbm5lbCA9IHB1Y2FuX2NtZF9vcGNvZGVfY2hhbm5lbChkZXYsCisJCQkJCQkgICAgICAgUENBTl9VRkRfQ01EX0NMS19TRVQpOworCWNtZC0+bW9kZSA9IGNsa19tb2RlOworCisJLyogc2VuZCB0aGUgY29tbWFuZCAqLworCXJldHVybiBwY2FuX3VzYl9mZF9zZW5kX2NtZChkZXYsICsrY21kKTsKK30KKworLyogc2V0IGJpdHRpbWluZyBmb3IgQ0FOIGFuZCBDQU4tRkQgaGVhZGVyICovCitzdGF0aWMgaW50IHBjYW5fdXNiX2ZkX3NldF9iaXR0aW1pbmdfc2xvdyhzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0KQoreworCXN0cnVjdCBwdWNhbl90aW1pbmdfc2xvdyAqY21kID0gcGNhbl91c2JfZmRfY21kX2J1ZmZlcihkZXYpOworCisJY21kLT5vcGNvZGVfY2hhbm5lbCA9IHB1Y2FuX2NtZF9vcGNvZGVfY2hhbm5lbChkZXYsCisJCQkJCQkgICAgICAgUFVDQU5fQ01EX1RJTUlOR19TTE9XKTsKKwljbWQtPnNqd190ID0gUFVDQU5fVFNMT1dfU0pXX1QoYnQtPnNqdyAtIDEsCisJCQkJZGV2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfM19TQU1QTEVTKTsKKworCWNtZC0+dHNlZzIgPSBQVUNBTl9UU0xPV19UU0VHMihidC0+cGhhc2Vfc2VnMiAtIDEpOworCWNtZC0+dHNlZzEgPSBQVUNBTl9UU0xPV19UU0VHMShidC0+cHJvcF9zZWcgKyBidC0+cGhhc2Vfc2VnMSAtIDEpOworCWNtZC0+YnJwID0gY3B1X3RvX2xlMTYoUFVDQU5fVFNMT1dfQlJQKGJ0LT5icnAgLSAxKSk7CisKKwljbWQtPmV3bCA9IDk2OwkvKiBkZWZhdWx0ICovCisKKwkvKiBzZW5kIHRoZSBjb21tYW5kICovCisJcmV0dXJuIHBjYW5fdXNiX2ZkX3NlbmRfY21kKGRldiwgKytjbWQpOworfQorCisvKiBzZXQgQ0FOLUZEIGJpdHRpbWluZyBmb3IgZGF0YSAqLworc3RhdGljIGludCBwY2FuX3VzYl9mZF9zZXRfYml0dGltaW5nX2Zhc3Qoc3RydWN0IHBlYWtfdXNiX2RldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBjYW5fYml0dGltaW5nICpidCkKK3sKKwlzdHJ1Y3QgcHVjYW5fdGltaW5nX2Zhc3QgKmNtZCA9IHBjYW5fdXNiX2ZkX2NtZF9idWZmZXIoZGV2KTsKKworCWNtZC0+b3Bjb2RlX2NoYW5uZWwgPSBwdWNhbl9jbWRfb3Bjb2RlX2NoYW5uZWwoZGV2LAorCQkJCQkJICAgICAgIFBVQ0FOX0NNRF9USU1JTkdfRkFTVCk7CisJY21kLT5zancgPSBQVUNBTl9URkFTVF9TSlcoYnQtPnNqdyAtIDEpOworCWNtZC0+dHNlZzIgPSBQVUNBTl9URkFTVF9UU0VHMihidC0+cGhhc2Vfc2VnMiAtIDEpOworCWNtZC0+dHNlZzEgPSBQVUNBTl9URkFTVF9UU0VHMShidC0+cHJvcF9zZWcgKyBidC0+cGhhc2Vfc2VnMSAtIDEpOworCWNtZC0+YnJwID0gY3B1X3RvX2xlMTYoUFVDQU5fVEZBU1RfQlJQKGJ0LT5icnAgLSAxKSk7CisKKwkvKiBzZW5kIHRoZSBjb21tYW5kICovCisJcmV0dXJuIHBjYW5fdXNiX2ZkX3NlbmRfY21kKGRldiwgKytjbWQpOworfQorCisvKiBoYW5kbGUgcmVzdGFydCBidXQgaW4gYXN5bmNocm9ub3VzbHkgd2F5CisgKiAodXNlcyBQQ0FOLVVTQiBQcm8gY29kZSB0byBjb21wbGV0ZSBhc3luY2hyb25vdXMgcmVxdWVzdCkKKyAqLworc3RhdGljIGludCBwY2FuX3VzYl9mZF9yZXN0YXJ0X2FzeW5jKHN0cnVjdCBwZWFrX3VzYl9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZikKK3sKKwl1OCAqcGMgPSBidWY7CisKKwkvKiBidWlsZCB0aGUgZW50aXJlIGNtZHMgbGlzdCBpbiB0aGUgcHJvdmlkZWQgYnVmZmVyLCB0byBnbyBiYWNrIGludG8KKwkgKiBvcGVyYXRpb25hbCBtb2RlLgorCSAqLworCXBjICs9IHBjYW5fdXNiX2ZkX2J1aWxkX3Jlc3RhcnRfY21kKGRldiwgcGMpOworCisJLyogYWRkIEVPQyAqLworCW1lbXNldChwYywgMHhmZiwgc2l6ZW9mKHN0cnVjdCBwdWNhbl9jb21tYW5kKSk7CisJcGMgKz0gc2l6ZW9mKHN0cnVjdCBwdWNhbl9jb21tYW5kKTsKKworCS8qIGNvbXBsZXRlIHRoZSBVUkIgKi8KKwl1c2JfZmlsbF9idWxrX3VyYih1cmIsIGRldi0+dWRldiwKKwkJCSAgdXNiX3NuZGJ1bGtwaXBlKGRldi0+dWRldiwgUENBTl9VU0JQUk9fRVBfQ01ET1VUKSwKKwkJCSAgYnVmLCBwYyAtIGJ1ZiwKKwkJCSAgcGNhbl91c2JfcHJvX3Jlc3RhcnRfY29tcGxldGUsIGRldik7CisKKwkvKiBhbmQgc3VibWl0IGl0LiAqLworCXJldHVybiB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworfQorCitzdGF0aWMgaW50IHBjYW5fdXNiX2ZkX2Rydl9sb2FkZWQoc3RydWN0IHBlYWtfdXNiX2RldmljZSAqZGV2LCBib29sIGxvYWRlZCkKK3sKKwlzdHJ1Y3QgcGNhbl91c2JfZmRfZGV2aWNlICpwZGV2ID0KKwkJCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwY2FuX3VzYl9mZF9kZXZpY2UsIGRldik7CisKKwlwZGV2LT5jbWRfYnVmZmVyX2FkZHJbMF0gPSAwOworCXBkZXYtPmNtZF9idWZmZXJfYWRkclsxXSA9ICEhbG9hZGVkOworCisJcmV0dXJuIHBjYW5fdXNiX3Byb19zZW5kX3JlcShkZXYsCisJCQkJUENBTl9VU0JQUk9fUkVRX0ZDVCwKKwkJCQlQQ0FOX1VTQlBST19GQ1RfRFJWTEQsCisJCQkJcGRldi0+Y21kX2J1ZmZlcl9hZGRyLAorCQkJCVBDQU5fVVNCUFJPX0ZDVF9EUlZMRF9SRVFfTEVOKTsKK30KKworc3RhdGljIGludCBwY2FuX3VzYl9mZF9kZWNvZGVfY2FubXNnKHN0cnVjdCBwY2FuX3VzYl9mZF9pZiAqdXNiX2lmLAorCQkJCSAgICAgc3RydWN0IHB1Y2FuX21zZyAqcnhfbXNnKQoreworCXN0cnVjdCBwdWNhbl9yeF9tc2cgKnJtID0gKHN0cnVjdCBwdWNhbl9yeF9tc2cgKilyeF9tc2c7CisJc3RydWN0IHBlYWtfdXNiX2RldmljZSAqZGV2ID0gdXNiX2lmLT5kZXZbcHVjYW5fbXNnX2dldF9jaGFubmVsKHJtKV07CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRldi0+bmV0ZGV2OworCXN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkOworCXN0cnVjdCBza19idWZmICpza2I7CisJY29uc3QgdTE2IHJ4X21zZ19mbGFncyA9IGxlMTZfdG9fY3B1KHJtLT5mbGFncyk7CisKKwlpZiAocnhfbXNnX2ZsYWdzICYgUFVDQU5fTVNHX0VYVF9EQVRBX0xFTikgeworCQkvKiBDQU5GRCBmcmFtZSBjYXNlICovCisJCXNrYiA9IGFsbG9jX2NhbmZkX3NrYihuZXRkZXYsICZjZmQpOworCQlpZiAoIXNrYikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWlmIChyeF9tc2dfZmxhZ3MgJiBQVUNBTl9NU0dfQklUUkFURV9TV0lUQ0gpCisJCQljZmQtPmZsYWdzIHw9IENBTkZEX0JSUzsKKworCQlpZiAocnhfbXNnX2ZsYWdzICYgUFVDQU5fTVNHX0VSUk9SX1NUQVRFX0lORCkKKwkJCWNmZC0+ZmxhZ3MgfD0gQ0FORkRfRVNJOworCisJCWNmZC0+bGVuID0gY2FuX2RsYzJsZW4oZ2V0X2NhbmZkX2RsYyhwdWNhbl9tc2dfZ2V0X2RsYyhybSkpKTsKKwl9IGVsc2UgeworCQkvKiBDQU4gMi4wIGZyYW1lIGNhc2UgKi8KKwkJc2tiID0gYWxsb2NfY2FuX3NrYihuZXRkZXYsIChzdHJ1Y3QgY2FuX2ZyYW1lICoqKSZjZmQpOworCQlpZiAoIXNrYikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWNmZC0+bGVuID0gZ2V0X2Nhbl9kbGMocHVjYW5fbXNnX2dldF9kbGMocm0pKTsKKwl9CisKKwljZmQtPmNhbl9pZCA9IGxlMzJfdG9fY3B1KHJtLT5jYW5faWQpOworCisJaWYgKHJ4X21zZ19mbGFncyAmIFBVQ0FOX01TR19FWFRfSUQpCisJCWNmZC0+Y2FuX2lkIHw9IENBTl9FRkZfRkxBRzsKKworCWlmIChyeF9tc2dfZmxhZ3MgJiBQVUNBTl9NU0dfUlRSKQorCQljZmQtPmNhbl9pZCB8PSBDQU5fUlRSX0ZMQUc7CisJZWxzZQorCQltZW1jcHkoY2ZkLT5kYXRhLCBybS0+ZCwgY2ZkLT5sZW4pOworCisJcGVha191c2JfbmV0aWZfcngoc2tiLCAmdXNiX2lmLT50aW1lX3JlZiwKKwkJCSAgbGUzMl90b19jcHUocm0tPnRzX2xvdyksIGxlMzJfdG9fY3B1KHJtLT50c19oaWdoKSk7CisKKwluZXRkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwluZXRkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGNmZC0+bGVuOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGhhbmRsZSB1Q0FOIHN0YXR1cyBtZXNzYWdlICovCitzdGF0aWMgaW50IHBjYW5fdXNiX2ZkX2RlY29kZV9zdGF0dXMoc3RydWN0IHBjYW5fdXNiX2ZkX2lmICp1c2JfaWYsCisJCQkJICAgICBzdHJ1Y3QgcHVjYW5fbXNnICpyeF9tc2cpCit7CisJc3RydWN0IHB1Y2FuX3N0YXR1c19tc2cgKnNtID0gKHN0cnVjdCBwdWNhbl9zdGF0dXNfbXNnICopcnhfbXNnOworCXN0cnVjdCBwZWFrX3VzYl9kZXZpY2UgKmRldiA9IHVzYl9pZi0+ZGV2W3B1Y2FuX3N0bXNnX2dldF9jaGFubmVsKHNtKV07CisJc3RydWN0IHBjYW5fdXNiX2ZkX2RldmljZSAqcGRldiA9CisJCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGNhbl91c2JfZmRfZGV2aWNlLCBkZXYpOworCWVudW0gY2FuX3N0YXRlIG5ld19zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CisJZW51bSBjYW5fc3RhdGUgcnhfc3RhdGUsIHR4X3N0YXRlOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkZXYtPm5ldGRldjsKKwlzdHJ1Y3QgY2FuX2ZyYW1lICpjZjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJLyogbm90aGluZyBzaG91bGQgYmUgc2VudCB3aGlsZSBpbiBCVVNfT0ZGIHN0YXRlICovCisJaWYgKGRldi0+Y2FuLnN0YXRlID09IENBTl9TVEFURV9CVVNfT0ZGKQorCQlyZXR1cm4gMDsKKworCWlmIChzbS0+Y2hhbm5lbF9wX3dfYiAmIFBVQ0FOX0JVU19CVVNPRkYpIHsKKwkJbmV3X3N0YXRlID0gQ0FOX1NUQVRFX0JVU19PRkY7CisJfSBlbHNlIGlmIChzbS0+Y2hhbm5lbF9wX3dfYiAmIFBVQ0FOX0JVU19QQVNTSVZFKSB7CisJCW5ld19zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9QQVNTSVZFOworCX0gZWxzZSBpZiAoc20tPmNoYW5uZWxfcF93X2IgJiBQVUNBTl9CVVNfV0FSTklORykgeworCQluZXdfc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfV0FSTklORzsKKwl9IGVsc2UgeworCQkvKiBubyBlcnJvciBiaXQgKHNvLCBubyBlcnJvciBza2IsIGJhY2sgdG8gYWN0aXZlIHN0YXRlKSAqLworCQlkZXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CisJCXBkZXYtPmJlYy50eGVyciA9IDA7CisJCXBkZXYtPmJlYy5yeGVyciA9IDA7CisJCXJldHVybiAwOworCX0KKworCS8qIHN0YXRlIGhhc24ndCBjaGFuZ2VkICovCisJaWYgKG5ld19zdGF0ZSA9PSBkZXYtPmNhbi5zdGF0ZSkKKwkJcmV0dXJuIDA7CisKKwkvKiBoYW5kbGUgYnVzIHN0YXRlIGNoYW5nZSAqLworCXR4X3N0YXRlID0gKHBkZXYtPmJlYy50eGVyciA+PSBwZGV2LT5iZWMucnhlcnIpID8gbmV3X3N0YXRlIDogMDsKKwlyeF9zdGF0ZSA9IChwZGV2LT5iZWMudHhlcnIgPD0gcGRldi0+YmVjLnJ4ZXJyKSA/IG5ld19zdGF0ZSA6IDA7CisKKwkvKiBhbGxvY2F0ZSBhbiBza2IgdG8gc3RvcmUgdGhlIGVycm9yIGZyYW1lICovCisJc2tiID0gYWxsb2NfY2FuX2Vycl9za2IobmV0ZGV2LCAmY2YpOworCWlmIChza2IpCisJCWNhbl9jaGFuZ2Vfc3RhdGUobmV0ZGV2LCBjZiwgdHhfc3RhdGUsIHJ4X3N0YXRlKTsKKworCS8qIHRoaW5ncyBtdXN0IGJlIGRvbmUgZXZlbiBpbiBjYXNlIG9mIE9PTSAqLworCWlmIChuZXdfc3RhdGUgPT0gQ0FOX1NUQVRFX0JVU19PRkYpCisJCWNhbl9idXNfb2ZmKG5ldGRldik7CisKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwZWFrX3VzYl9uZXRpZl9yeChza2IsICZ1c2JfaWYtPnRpbWVfcmVmLAorCQkJICBsZTMyX3RvX2NwdShzbS0+dHNfbG93KSwgbGUzMl90b19jcHUoc20tPnRzX2hpZ2gpKTsKKworCW5ldGRldi0+c3RhdHMucnhfcGFja2V0cysrOworCW5ldGRldi0+c3RhdHMucnhfYnl0ZXMgKz0gY2YtPmNhbl9kbGM7CisKKwlyZXR1cm4gMDsKK30KKworLyogaGFuZGxlIHVDQU4gZXJyb3IgbWVzc2FnZSAqLworc3RhdGljIGludCBwY2FuX3VzYl9mZF9kZWNvZGVfZXJyb3Ioc3RydWN0IHBjYW5fdXNiX2ZkX2lmICp1c2JfaWYsCisJCQkJICAgIHN0cnVjdCBwdWNhbl9tc2cgKnJ4X21zZykKK3sKKwlzdHJ1Y3QgcHVjYW5fZXJyb3JfbXNnICplciA9IChzdHJ1Y3QgcHVjYW5fZXJyb3JfbXNnICopcnhfbXNnOworCXN0cnVjdCBwZWFrX3VzYl9kZXZpY2UgKmRldiA9IHVzYl9pZi0+ZGV2W3B1Y2FuX2VybXNnX2dldF9jaGFubmVsKGVyKV07CisJc3RydWN0IHBjYW5fdXNiX2ZkX2RldmljZSAqcGRldiA9CisJCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGNhbl91c2JfZmRfZGV2aWNlLCBkZXYpOworCisJLyoga2VlcCBhIHRyYWNlIG9mIHR4IGFuZCByeCBlcnJvciBjb3VudGVycyBmb3IgbGF0ZXIgdXNlICovCisJcGRldi0+YmVjLnR4ZXJyID0gZXItPnR4X2Vycl9jbnQ7CisJcGRldi0+YmVjLnJ4ZXJyID0gZXItPnJ4X2Vycl9jbnQ7CisKKwlyZXR1cm4gMDsKK30KKworLyogaGFuZGxlIHVDQU4gb3ZlcnJ1biBtZXNzYWdlICovCitzdGF0aWMgaW50IHBjYW5fdXNiX2ZkX2RlY29kZV9vdmVycnVuKHN0cnVjdCBwY2FuX3VzYl9mZF9pZiAqdXNiX2lmLAorCQkJCSAgICAgIHN0cnVjdCBwdWNhbl9tc2cgKnJ4X21zZykKK3sKKwlzdHJ1Y3QgcGNhbl91ZmRfb3ZyX21zZyAqb3YgPSAoc3RydWN0IHBjYW5fdWZkX292cl9tc2cgKilyeF9tc2c7CisJc3RydWN0IHBlYWtfdXNiX2RldmljZSAqZGV2ID0gdXNiX2lmLT5kZXZbcHVmZF9vbXNnX2dldF9jaGFubmVsKG92KV07CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRldi0+bmV0ZGV2OworCXN0cnVjdCBjYW5fZnJhbWUgKmNmOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwkvKiBhbGxvY2F0ZSBhbiBza2IgdG8gc3RvcmUgdGhlIGVycm9yIGZyYW1lICovCisJc2tiID0gYWxsb2NfY2FuX2Vycl9za2IobmV0ZGV2LCAmY2YpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNmLT5jYW5faWQgfD0gQ0FOX0VSUl9DUlRMOworCWNmLT5kYXRhWzFdIHw9IENBTl9FUlJfQ1JUTF9SWF9PVkVSRkxPVzsKKworCXBlYWtfdXNiX25ldGlmX3J4KHNrYiwgJnVzYl9pZi0+dGltZV9yZWYsCisJCQkgIGxlMzJfdG9fY3B1KG92LT50c19sb3cpLCBsZTMyX3RvX2NwdShvdi0+dHNfaGlnaCkpOworCisJbmV0ZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCW5ldGRldi0+c3RhdHMucnhfZXJyb3JzKys7CisKKwlyZXR1cm4gMDsKK30KKworLyogaGFuZGxlIFVTQiBjYWxpYnJhdGlvbiBtZXNzYWdlICovCitzdGF0aWMgdm9pZCBwY2FuX3VzYl9mZF9kZWNvZGVfdHMoc3RydWN0IHBjYW5fdXNiX2ZkX2lmICp1c2JfaWYsCisJCQkJICBzdHJ1Y3QgcHVjYW5fbXNnICpyeF9tc2cpCit7CisJc3RydWN0IHBjYW5fdWZkX3RzX21zZyAqdHMgPSAoc3RydWN0IHBjYW5fdWZkX3RzX21zZyAqKXJ4X21zZzsKKworCS8qIHNob3VsZCB3YWl0IHVudGlsIGNsb2NrIGlzIHN0YWJpbGl6ZWQgKi8KKwlpZiAodXNiX2lmLT5jbV9pZ25vcmVfY291bnQgPiAwKQorCQl1c2JfaWYtPmNtX2lnbm9yZV9jb3VudC0tOworCWVsc2UKKwkJcGVha191c2Jfc2V0X3RzX25vdygmdXNiX2lmLT50aW1lX3JlZiwgbGUzMl90b19jcHUodHMtPnRzX2xvdykpOworfQorCisvKiBjYWxsYmFjayBmb3IgYnVsayBJTiB1cmIgKi8KK3N0YXRpYyBpbnQgcGNhbl91c2JfZmRfZGVjb2RlX2J1ZihzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgcGNhbl91c2JfZmRfaWYgKnVzYl9pZiA9IHBjYW5fdXNiX2ZkX2Rldl9pZihkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkZXYtPm5ldGRldjsKKwlzdHJ1Y3QgcHVjYW5fbXNnICpyeF9tc2c7CisJdTggKm1zZ19wdHIsICptc2dfZW5kOworCWludCBlcnIgPSAwOworCisJLyogbG9vcCByZWFkaW5nIGFsbCB0aGUgcmVjb3JkcyBmcm9tIHRoZSBpbmNvbWluZyBtZXNzYWdlICovCisJbXNnX3B0ciA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCW1zZ19lbmQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+YWN0dWFsX2xlbmd0aDsKKwlmb3IgKDsgbXNnX3B0ciA8IG1zZ19lbmQ7KSB7CisJCXUxNiByeF9tc2dfdHlwZSwgcnhfbXNnX3NpemU7CisKKwkJcnhfbXNnID0gKHN0cnVjdCBwdWNhbl9tc2cgKiltc2dfcHRyOworCQlpZiAoIXJ4X21zZy0+c2l6ZSkgeworCQkJLyogbnVsbCBwYWNrZXQgZm91bmQ6IGVuZCBvZiBsaXN0ICovCisJCQlicmVhazsKKwkJfQorCisJCXJ4X21zZ19zaXplID0gbGUxNl90b19jcHUocnhfbXNnLT5zaXplKTsKKwkJcnhfbXNnX3R5cGUgPSBsZTE2X3RvX2NwdShyeF9tc2ctPnR5cGUpOworCisJCS8qIGNoZWNrIGlmIHRoZSByZWNvcmQgZ29lcyBvdXQgb2YgY3VycmVudCBwYWNrZXQgKi8KKwkJaWYgKG1zZ19wdHIgKyByeF9tc2dfc2l6ZSA+IG1zZ19lbmQpIHsKKwkJCW5ldGRldl9lcnIobmV0ZGV2LAorCQkJCSAgICJnb3QgZnJhZyByZWM6IHNob3VsZCBpbmMgdXNiIHJ4IGJ1ZiBzemVcbiIpOworCQkJZXJyID0gLUVCQURNU0c7CisJCQlicmVhazsKKwkJfQorCisJCXN3aXRjaCAocnhfbXNnX3R5cGUpIHsKKwkJY2FzZSBQVUNBTl9NU0dfQ0FOX1JYOgorCQkJZXJyID0gcGNhbl91c2JfZmRfZGVjb2RlX2Nhbm1zZyh1c2JfaWYsIHJ4X21zZyk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlnb3RvIGZhaWw7CisJCQlicmVhazsKKworCQljYXNlIFBDQU5fVUZEX01TR19DQUxJQlJBVElPTjoKKwkJCXBjYW5fdXNiX2ZkX2RlY29kZV90cyh1c2JfaWYsIHJ4X21zZyk7CisJCQlicmVhazsKKworCQljYXNlIFBVQ0FOX01TR19FUlJPUjoKKwkJCWVyciA9IHBjYW5fdXNiX2ZkX2RlY29kZV9lcnJvcih1c2JfaWYsIHJ4X21zZyk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlnb3RvIGZhaWw7CisJCQlicmVhazsKKworCQljYXNlIFBVQ0FOX01TR19TVEFUVVM6CisJCQllcnIgPSBwY2FuX3VzYl9mZF9kZWNvZGVfc3RhdHVzKHVzYl9pZiwgcnhfbXNnKTsKKwkJCWlmIChlcnIgPCAwKQorCQkJCWdvdG8gZmFpbDsKKwkJCWJyZWFrOworCisJCWNhc2UgUENBTl9VRkRfTVNHX09WRVJSVU46CisJCQllcnIgPSBwY2FuX3VzYl9mZF9kZWNvZGVfb3ZlcnJ1bih1c2JfaWYsIHJ4X21zZyk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlnb3RvIGZhaWw7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJbmV0ZGV2X2VycihuZXRkZXYsCisJCQkJICAgInVuaGFuZGxlZCBtc2cgdHlwZSAweCUwMnggKCVkKTogaWdub3JlZFxuIiwKKwkJCQkgICByeF9tc2dfdHlwZSwgcnhfbXNnX3R5cGUpOworCQkJYnJlYWs7CisJCX0KKworCQltc2dfcHRyICs9IHJ4X21zZ19zaXplOworCX0KKworZmFpbDoKKwlpZiAoZXJyKQorCQlwY2FuX2R1bXBfbWVtKCJyZWNlaXZlZCBtc2ciLAorCQkJICAgICAgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJcmV0dXJuIGVycjsKK30KKworLyogQ0FOL0NBTkZEIGZyYW1lcyBlbmNvZGluZyBjYWxsYmFjayAqLworc3RhdGljIGludCBwY2FuX3VzYl9mZF9lbmNvZGVfbXNnKHN0cnVjdCBwZWFrX3VzYl9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCBza19idWZmICpza2IsIHU4ICpvYnVmLCBzaXplX3QgKnNpemUpCit7CisJc3RydWN0IHB1Y2FuX3R4X21zZyAqdHhfbXNnID0gKHN0cnVjdCBwdWNhbl90eF9tc2cgKilvYnVmOworCXN0cnVjdCBjYW5mZF9mcmFtZSAqY2ZkID0gKHN0cnVjdCBjYW5mZF9mcmFtZSAqKXNrYi0+ZGF0YTsKKwl1MTYgdHhfbXNnX3NpemUsIHR4X21zZ19mbGFnczsKKwl1OCBjYW5fZGxjOworCisJdHhfbXNnX3NpemUgPSBBTElHTihzaXplb2Yoc3RydWN0IHB1Y2FuX3R4X21zZykgKyBjZmQtPmxlbiwgNCk7CisJdHhfbXNnLT5zaXplID0gY3B1X3RvX2xlMTYodHhfbXNnX3NpemUpOworCXR4X21zZy0+dHlwZSA9IGNwdV90b19sZTE2KFBVQ0FOX01TR19DQU5fVFgpOworCisJdHhfbXNnX2ZsYWdzID0gMDsKKwlpZiAoY2ZkLT5jYW5faWQgJiBDQU5fRUZGX0ZMQUcpIHsKKwkJdHhfbXNnX2ZsYWdzIHw9IFBVQ0FOX01TR19FWFRfSUQ7CisJCXR4X21zZy0+Y2FuX2lkID0gY3B1X3RvX2xlMzIoY2ZkLT5jYW5faWQgJiBDQU5fRUZGX01BU0spOworCX0gZWxzZSB7CisJCXR4X21zZy0+Y2FuX2lkID0gY3B1X3RvX2xlMzIoY2ZkLT5jYW5faWQgJiBDQU5fU0ZGX01BU0spOworCX0KKworCWlmIChjYW5faXNfY2FuZmRfc2tiKHNrYikpIHsKKwkJLyogY29uc2lkZXJpbmcgYSBDQU5GRCBmcmFtZSAqLworCQljYW5fZGxjID0gY2FuX2xlbjJkbGMoY2ZkLT5sZW4pOworCisJCXR4X21zZ19mbGFncyB8PSBQVUNBTl9NU0dfRVhUX0RBVEFfTEVOOworCisJCWlmIChjZmQtPmZsYWdzICYgQ0FORkRfQlJTKQorCQkJdHhfbXNnX2ZsYWdzIHw9IFBVQ0FOX01TR19CSVRSQVRFX1NXSVRDSDsKKworCQlpZiAoY2ZkLT5mbGFncyAmIENBTkZEX0VTSSkKKwkJCXR4X21zZ19mbGFncyB8PSBQVUNBTl9NU0dfRVJST1JfU1RBVEVfSU5EOworCX0gZWxzZSB7CisJCS8qIENBTkQgMi4wIGZyYW1lcyAqLworCQljYW5fZGxjID0gY2ZkLT5sZW47CisKKwkJaWYgKGNmZC0+Y2FuX2lkICYgQ0FOX1JUUl9GTEFHKQorCQkJdHhfbXNnX2ZsYWdzIHw9IFBVQ0FOX01TR19SVFI7CisJfQorCisJdHhfbXNnLT5mbGFncyA9IGNwdV90b19sZTE2KHR4X21zZ19mbGFncyk7CisJdHhfbXNnLT5jaGFubmVsX2RsYyA9IFBVQ0FOX01TR19DSEFOTkVMX0RMQyhkZXYtPmN0cmxfaWR4LCBjYW5fZGxjKTsKKwltZW1jcHkodHhfbXNnLT5kLCBjZmQtPmRhdGEsIGNmZC0+bGVuKTsKKworCS8qIGFkZCBudWxsIHNpemUgbWVzc2FnZSB0byB0YWcgdGhlIGVuZCAobWVzc2FnZXMgYXJlIDMyLWJpdHMgYWxpZ25lZCkKKwkgKi8KKwl0eF9tc2cgPSAoc3RydWN0IHB1Y2FuX3R4X21zZyAqKShvYnVmICsgdHhfbXNnX3NpemUpOworCisJdHhfbXNnLT5zaXplID0gMDsKKworCS8qIHNldCB0aGUgd2hvbGUgc2l6ZSBvZiB0aGUgVVNCIHBhY2tldCB0byBzZW5kICovCisJKnNpemUgPSB0eF9tc2dfc2l6ZSArIHNpemVvZih1MzIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHN0YXJ0IHRoZSBpbnRlcmZhY2UgKGxhc3QgY2hhbmNlIGJlZm9yZSBzZXQgYnVzIG9uKSAqLworc3RhdGljIGludCBwY2FuX3VzYl9mZF9zdGFydChzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjYW5fdXNiX2ZkX2RldmljZSAqcGRldiA9CisJCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGNhbl91c2JfZmRfZGV2aWNlLCBkZXYpOworCWludCBlcnI7CisKKwkvKiBzZXQgZmlsdGVyIG1vZGU6IGFsbCBhY2NlcHRhbmNlICovCisJZXJyID0gcGNhbl91c2JfZmRfc2V0X2ZpbHRlcl9zdGQoZGV2LCAtMSwgMHhmZmZmZmZmZik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIG9wZW5pbmcgZmlyc3QgZGV2aWNlOiAqLworCWlmIChwZGV2LT51c2JfaWYtPmRldl9vcGVuZWRfY291bnQgPT0gMCkgeworCQkvKiByZXNldCB0aW1lX3JlZiAqLworCQlwZWFrX3VzYl9pbml0X3RpbWVfcmVmKCZwZGV2LT51c2JfaWYtPnRpbWVfcmVmLAorCQkJCSAgICAgICAmcGNhbl91c2JfcHJvX2ZkKTsKKworCQkvKiBlbmFibGUgVVNCIGNhbGlicmF0aW9uIG1lc3NhZ2VzICovCisJCWVyciA9IHBjYW5fdXNiX2ZkX3NldF9maWx0ZXJfZXh0KGRldiwgMSwKKwkJCQkJCSBQVUNBTl9GTFRFWFRfRVJST1IsCisJCQkJCQkgUENBTl9VRkRfRkxURVhUX0NBTElCUkFUSU9OKTsKKwl9CisKKwlwZGV2LT51c2JfaWYtPmRldl9vcGVuZWRfY291bnQrKzsKKworCS8qIHJlc2V0IGNhY2hlZCBlcnJvciBjb3VudGVycyAqLworCXBkZXYtPmJlYy50eGVyciA9IDA7CisJcGRldi0+YmVjLnJ4ZXJyID0gMDsKKworCXJldHVybiBlcnI7Cit9CisKKy8qIHNvY2tldCBjYWxsYmFjayB1c2VkIHRvIGNvcHkgYmVyciBjb3VudGVycyB2YWx1ZXMgcmVjZWlldmVkIHRocm91Z2ggVVNCICovCitzdGF0aWMgaW50IHBjYW5fdXNiX2ZkX2dldF9iZXJyX2NvdW50ZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkJc3RydWN0IGNhbl9iZXJyX2NvdW50ZXIgKmJlYykKK3sKKwlzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBwY2FuX3VzYl9mZF9kZXZpY2UgKnBkZXYgPQorCQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBjYW5fdXNiX2ZkX2RldmljZSwgZGV2KTsKKworCSpiZWMgPSBwZGV2LT5iZWM7CisKKwkvKiBtdXN0IHJldHVybiAwICovCisJcmV0dXJuIDA7Cit9CisKKy8qIHN0b3AgaW50ZXJmYWNlIChsYXN0IGNoYW5jZSBiZWZvcmUgc2V0IGJ1cyBvZmYpICovCitzdGF0aWMgaW50IHBjYW5fdXNiX2ZkX3N0b3Aoc3RydWN0IHBlYWtfdXNiX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwY2FuX3VzYl9mZF9kZXZpY2UgKnBkZXYgPQorCQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBjYW5fdXNiX2ZkX2RldmljZSwgZGV2KTsKKworCS8qIHR1cm4gb2ZmIHNwZWNpYWwgbXNncyBmb3IgdGhhdCBpbnRlcmZhY2UgaWYgbm8gb3RoZXIgZGV2IG9wZW5lZCAqLworCWlmIChwZGV2LT51c2JfaWYtPmRldl9vcGVuZWRfY291bnQgPT0gMSkKKwkJcGNhbl91c2JfZmRfc2V0X2ZpbHRlcl9leHQoZGV2LCAwLAorCQkJCQkgICBQVUNBTl9GTFRFWFRfRVJST1IsCisJCQkJCSAgIFBDQU5fVUZEX0ZMVEVYVF9DQUxJQlJBVElPTik7CisJcGRldi0+dXNiX2lmLT5kZXZfb3BlbmVkX2NvdW50LS07CisKKwlyZXR1cm4gMDsKK30KKworLyogY2FsbGVkIHdoZW4gcHJvYmluZywgdG8gaW5pdGlhbGl6ZSBhIGRldmljZSBvYmplY3QgKi8KK3N0YXRpYyBpbnQgcGNhbl91c2JfZmRfaW5pdChzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjYW5fdXNiX2ZkX2RldmljZSAqcGRldiA9CisJCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGNhbl91c2JfZmRfZGV2aWNlLCBkZXYpOworCWludCBpLCBlcnIgPSAtRU5PTUVNOworCisJLyogZG8gdGhpcyBmb3IgMXN0IGNoYW5uZWwgb25seSAqLworCWlmICghZGV2LT5wcmV2X3NpYmxpbmdzKSB7CisJCS8qIGFsbG9jYXRlIG5ldGRldmljZXMgY29tbW9uIHN0cnVjdHVyZSBhdHRhY2hlZCB0byBmaXJzdCBvbmUgKi8KKwkJcGRldi0+dXNiX2lmID0ga3phbGxvYyhzaXplb2YoKnBkZXYtPnVzYl9pZiksIEdGUF9LRVJORUwpOworCQlpZiAoIXBkZXYtPnVzYl9pZikKKwkJCWdvdG8gZXJyX291dDsKKworCQkvKiBhbGxvY2F0ZSBjb21tYW5kIGJ1ZmZlciBvbmNlIGZvciBhbGwgZm9yIHRoZSBpbnRlcmZhY2UgKi8KKwkJcGRldi0+Y21kX2J1ZmZlcl9hZGRyID0ga21hbGxvYyhQQ0FOX1VGRF9DTURfQlVGRkVSX1NJWkUsCisJCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFwZGV2LT5jbWRfYnVmZmVyX2FkZHIpCisJCQlnb3RvIGVycl9vdXRfMTsKKworCQkvKiBudW1iZXIgb2YgdHMgbXNncyB0byBpZ25vcmUgYmVmb3JlIHRha2luZyBvbmUgaW50byBhY2NvdW50ICovCisJCXBkZXYtPnVzYl9pZi0+Y21faWdub3JlX2NvdW50ID0gNTsKKworCQllcnIgPSBwY2FuX3VzYl9wcm9fc2VuZF9yZXEoZGV2LCBQQ0FOX1VTQlBST19SRVFfSU5GTywKKwkJCQkJICAgIFBDQU5fVVNCUFJPX0lORk9fRlcsCisJCQkJCSAgICAmcGRldi0+dXNiX2lmLT5md19pbmZvLAorCQkJCQkgICAgc2l6ZW9mKHBkZXYtPnVzYl9pZi0+ZndfaW5mbykpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKGRldi0+bmV0ZGV2LT5kZXYucGFyZW50LAorCQkJCSJ1bmFibGUgdG8gcmVhZCAlcyBmaXJtd2FyZSBpbmZvIChlcnIgJWQpXG4iLAorCQkJCWRldi0+YWRhcHRlci0+bmFtZSwgZXJyKTsKKwkJCWdvdG8gZXJyX291dF8yOworCQl9CisKKwkJLyogZXhwbGljaXQgdXNlIG9mIGRldl94eHgoKSBpbnN0ZWFkIG9mIG5ldGRldl94eHgoKSBoZXJlOgorCQkgKiBpbmZvcm1hdGlvbiBkaXNwbGF5ZWQgYXJlIHJlbGF0ZWQgdG8gdGhlIGRldmljZSBpdHNlbGYsIG5vdAorCQkgKiB0byB0aGUgY2FueCAoY2hhbm5lbCkgZGV2aWNlLgorCQkgKi8KKwkJZGV2X2luZm8oZGV2LT5uZXRkZXYtPmRldi5wYXJlbnQsCisJCQkgIlBFQUstU3lzdGVtICVzIHYldSBmdyB2JXUuJXUuJXUgKCV1IGNoYW5uZWxzKVxuIiwKKwkJCSBkZXYtPmFkYXB0ZXItPm5hbWUsIHBkZXYtPnVzYl9pZi0+ZndfaW5mby5od192ZXJzaW9uLAorCQkJIHBkZXYtPnVzYl9pZi0+ZndfaW5mby5md192ZXJzaW9uWzBdLAorCQkJIHBkZXYtPnVzYl9pZi0+ZndfaW5mby5md192ZXJzaW9uWzFdLAorCQkJIHBkZXYtPnVzYl9pZi0+ZndfaW5mby5md192ZXJzaW9uWzJdLAorCQkJIGRldi0+YWRhcHRlci0+Y3RybF9jb3VudCk7CisKKwkJLyogdGhlIGN1cnJlbnRseSBzdXBwb3J0ZWQgaHcgaXMgbm9uLUlTTyAqLworCQlkZXYtPmNhbi5jdHJsbW9kZSA9IENBTl9DVFJMTU9ERV9GRF9OT05fSVNPOworCisJCS8qIHRlbGwgdGhlIGhhcmR3YXJlIHRoZSBjYW4gZHJpdmVyIGlzIHJ1bm5pbmcgKi8KKwkJZXJyID0gcGNhbl91c2JfZmRfZHJ2X2xvYWRlZChkZXYsIDEpOworCQlpZiAoZXJyKSB7CisJCQlkZXZfZXJyKGRldi0+bmV0ZGV2LT5kZXYucGFyZW50LAorCQkJCSJ1bmFibGUgdG8gdGVsbCAlcyBkcml2ZXIgaXMgbG9hZGVkIChlcnIgJWQpXG4iLAorCQkJCWRldi0+YWRhcHRlci0+bmFtZSwgZXJyKTsKKwkJCWdvdG8gZXJyX291dF8yOworCQl9CisJfSBlbHNlIHsKKwkJLyogb3RoZXJ3aXNlLCBzaW1wbHkgY29weSBwcmV2aW91cyBzaWJsaW5nJ3MgdmFsdWVzICovCisJCXN0cnVjdCBwY2FuX3VzYl9mZF9kZXZpY2UgKnBwZGV2ID0KKwkJCWNvbnRhaW5lcl9vZihkZXYtPnByZXZfc2libGluZ3MsCisJCQkJICAgICBzdHJ1Y3QgcGNhbl91c2JfZmRfZGV2aWNlLCBkZXYpOworCisJCXBkZXYtPnVzYl9pZiA9IHBwZGV2LT51c2JfaWY7CisJCXBkZXYtPmNtZF9idWZmZXJfYWRkciA9IHBwZGV2LT5jbWRfYnVmZmVyX2FkZHI7CisJfQorCisJcGRldi0+dXNiX2lmLT5kZXZbZGV2LT5jdHJsX2lkeF0gPSBkZXY7CisJZGV2LT5kZXZpY2VfbnVtYmVyID0KKwkJbGUzMl90b19jcHUocGRldi0+dXNiX2lmLT5md19pbmZvLmRldl9pZFtkZXYtPmN0cmxfaWR4XSk7CisKKwkvKiBzZXQgY2xvY2sgZG9tYWluICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGNhbl91c2JfZmRfY2xrX2ZyZXEpOyBpKyspCisJCWlmIChkZXYtPmFkYXB0ZXItPmNsb2NrLmZyZXEgPT0gcGNhbl91c2JfZmRfY2xrX2ZyZXFbaV0pCisJCQlicmVhazsKKworCWlmIChpID49IEFSUkFZX1NJWkUocGNhbl91c2JfZmRfY2xrX2ZyZXEpKSB7CisJCWRldl93YXJuKGRldi0+bmV0ZGV2LT5kZXYucGFyZW50LAorCQkJICJpbmNvbXBhdGlibGUgY2xvY2sgZnJlcXVlbmNpZXNcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9vdXRfMjsKKwl9CisKKwlwY2FuX3VzYl9mZF9zZXRfY2xvY2tfZG9tYWluKGRldiwgaSk7CisKKwkvKiBzZXQgTEVEIGluIGRlZmF1bHQgc3RhdGUgKGVuZCBvZiBpbml0IHBoYXNlKSAqLworCXBjYW5fdXNiX2ZkX3NldF9jYW5fbGVkKGRldiwgUENBTl9VRkRfTEVEX0RFRik7CisKKwlyZXR1cm4gMDsKKworZXJyX291dF8yOgorCWtmcmVlKHBkZXYtPmNtZF9idWZmZXJfYWRkcik7CitlcnJfb3V0XzE6CisJa2ZyZWUocGRldi0+dXNiX2lmKTsKK2Vycl9vdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyogY2FsbGVkIHdoZW4gZHJpdmVyIG1vZHVsZSBpcyBiZWluZyB1bmxvYWRlZCAqLworc3RhdGljIHZvaWQgcGNhbl91c2JfZmRfZXhpdChzdHJ1Y3QgcGVha191c2JfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBjYW5fdXNiX2ZkX2RldmljZSAqcGRldiA9CisJCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgcGNhbl91c2JfZmRfZGV2aWNlLCBkZXYpOworCisJLyogd2hlbiBybW1vZCBjYWxsZWQgYmVmb3JlIHVucGx1ZyBhbmQgaWYgZG93biwgc2hvdWxkIHJlc2V0IHRoaW5ncworCSAqIGJlZm9yZSBsZWF2aW5nCisJICovCisJaWYgKGRldi0+Y2FuLnN0YXRlICE9IENBTl9TVEFURV9TVE9QUEVEKSB7CisJCS8qIHNldCBidXMgb2ZmIG9uIHRoZSBjb3JyZXNwb25kaW5nIGNoYW5uZWwgKi8KKwkJcGNhbl91c2JfZmRfc2V0X2J1cyhkZXYsIDApOworCX0KKworCS8qIHN3aXRjaCBvZmYgY29ycmVzcG9uZGluZyBDQU4gTEVEcyAqLworCXBjYW5fdXNiX2ZkX3NldF9jYW5fbGVkKGRldiwgUENBTl9VRkRfTEVEX09GRik7CisKKwkvKiBpZiBjaGFubmVsICMwIChvbmx5KSAqLworCWlmIChkZXYtPmN0cmxfaWR4ID09IDApIHsKKwkJLyogdHVybiBvZmYgY2FsaWJyYXRpb24gbWVzc2FnZSBpZiBhbnkgZGV2aWNlIHdlcmUgb3BlbmVkICovCisJCWlmIChwZGV2LT51c2JfaWYtPmRldl9vcGVuZWRfY291bnQgPiAwKQorCQkJcGNhbl91c2JfZmRfc2V0X2ZpbHRlcl9leHQoZGV2LCAwLAorCQkJCQkJICAgUFVDQU5fRkxURVhUX0VSUk9SLAorCQkJCQkJICAgUENBTl9VRkRfRkxURVhUX0NBTElCUkFUSU9OKTsKKworCQkvKiB0ZWxsIFVTQiBhZGFwdGVyIHRoYXQgdGhlIGRyaXZlciBpcyBiZWluZyB1bmxvYWRlZCAqLworCQlwY2FuX3VzYl9mZF9kcnZfbG9hZGVkKGRldiwgMCk7CisJfQorfQorCisvKiBjYWxsZWQgd2hlbiB0aGUgVVNCIGFkYXB0ZXIgaXMgdW5wbHVnZ2VkICovCitzdGF0aWMgdm9pZCBwY2FuX3VzYl9mZF9mcmVlKHN0cnVjdCBwZWFrX3VzYl9kZXZpY2UgKmRldikKK3sKKwkvKiBsYXN0IGRldmljZTogY2FuIGZyZWUgc2hhcmVkIG9iamVjdHMgbm93ICovCisJaWYgKCFkZXYtPnByZXZfc2libGluZ3MgJiYgIWRldi0+bmV4dF9zaWJsaW5ncykgeworCQlzdHJ1Y3QgcGNhbl91c2JfZmRfZGV2aWNlICpwZGV2ID0KKwkJCWNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBwY2FuX3VzYl9mZF9kZXZpY2UsIGRldik7CisKKwkJLyogZnJlZSBjb21tYW5kcyBidWZmZXIgKi8KKwkJa2ZyZWUocGRldi0+Y21kX2J1ZmZlcl9hZGRyKTsKKworCQkvKiBmcmVlIHVzYiBpbnRlcmZhY2Ugb2JqZWN0ICovCisJCWtmcmVlKHBkZXYtPnVzYl9pZik7CisJfQorfQorCisvKiBkZXNjcmliZXMgdGhlIFBDQU4tVVNCIEZEIGFkYXB0ZXIgKi8KK2NvbnN0IHN0cnVjdCBwZWFrX3VzYl9hZGFwdGVyIHBjYW5fdXNiX2ZkID0geworCS5uYW1lID0gIlBDQU4tVVNCIEZEIiwKKwkuZGV2aWNlX2lkID0gUENBTl9VU0JGRF9QUk9EVUNUX0lELAorCS5jdHJsX2NvdW50ID0gUENBTl9VU0JGRF9DSEFOTkVMX0NPVU5ULAorCS5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBDQU5fQ1RSTE1PREVfRkQgfAorCQkJQ0FOX0NUUkxNT0RFXzNfU0FNUExFUyB8IENBTl9DVFJMTU9ERV9MSVNURU5PTkxZLAorCS5jbG9jayA9IHsKKwkJLmZyZXEgPSBQQ0FOX1VGRF9DUllTVEFMX0haLAorCX0sCisJLmJpdHRpbWluZ19jb25zdCA9IHsKKwkJLm5hbWUgPSAicGNhbl91c2JfZmQiLAorCQkudHNlZzFfbWluID0gMSwKKwkJLnRzZWcxX21heCA9IDY0LAorCQkudHNlZzJfbWluID0gMSwKKwkJLnRzZWcyX21heCA9IDE2LAorCQkuc2p3X21heCA9IDE2LAorCQkuYnJwX21pbiA9IDEsCisJCS5icnBfbWF4ID0gMTAyNCwKKwkJLmJycF9pbmMgPSAxLAorCX0sCisJLmRhdGFfYml0dGltaW5nX2NvbnN0ID0geworCQkubmFtZSA9ICJwY2FuX3VzYl9mZCIsCisJCS50c2VnMV9taW4gPSAxLAorCQkudHNlZzFfbWF4ID0gMTYsCisJCS50c2VnMl9taW4gPSAxLAorCQkudHNlZzJfbWF4ID0gOCwKKwkJLnNqd19tYXggPSA0LAorCQkuYnJwX21pbiA9IDEsCisJCS5icnBfbWF4ID0gMTAyNCwKKwkJLmJycF9pbmMgPSAxLAorCX0sCisKKwkvKiBzaXplIG9mIGRldmljZSBwcml2YXRlIGRhdGEgKi8KKwkuc2l6ZW9mX2Rldl9wcml2YXRlID0gc2l6ZW9mKHN0cnVjdCBwY2FuX3VzYl9mZF9kZXZpY2UpLAorCisJLyogdGltZXN0YW1wcyB1c2FnZSAqLworCS50c191c2VkX2JpdHMgPSAzMiwKKwkudHNfcGVyaW9kID0gMTAwMDAwMCwgLyogY2FsaWJyYXRpb24gcGVyaW9kIGluIHRzLiAqLworCS51c19wZXJfdHNfc2NhbGUgPSAxLCAvKiB1cyA9ICh0cyAqIHNjYWxlKSA+PiBzaGlmdCAqLworCS51c19wZXJfdHNfc2hpZnQgPSAwLAorCisJLyogZ2l2ZSBoZXJlIG1lc3NhZ2VzIGluL291dCBlbmRwb2ludHMgKi8KKwkuZXBfbXNnX2luID0gUENBTl9VU0JQUk9fRVBfTVNHSU4sCisJLmVwX21zZ19vdXQgPSB7UENBTl9VU0JQUk9fRVBfTVNHT1VUXzB9LAorCisJLyogc2l6ZSBvZiByeC90eCB1c2IgYnVmZmVycyAqLworCS5yeF9idWZmZXJfc2l6ZSA9IFBDQU5fVUZEX1JYX0JVRkZFUl9TSVpFLAorCS50eF9idWZmZXJfc2l6ZSA9IFBDQU5fVUZEX1RYX0JVRkZFUl9TSVpFLAorCisJLyogZGV2aWNlIGNhbGxiYWNrcyAqLworCS5pbnRmX3Byb2JlID0gcGNhbl91c2JfcHJvX3Byb2JlLAkvKiBzYW1lIGFzIFBDQU4tVVNCIFBybyAqLworCS5kZXZfaW5pdCA9IHBjYW5fdXNiX2ZkX2luaXQsCisKKwkuZGV2X2V4aXQgPSBwY2FuX3VzYl9mZF9leGl0LAorCS5kZXZfZnJlZSA9IHBjYW5fdXNiX2ZkX2ZyZWUsCisJLmRldl9zZXRfYnVzID0gcGNhbl91c2JfZmRfc2V0X2J1cywKKwkuZGV2X3NldF9iaXR0aW1pbmcgPSBwY2FuX3VzYl9mZF9zZXRfYml0dGltaW5nX3Nsb3csCisJLmRldl9zZXRfZGF0YV9iaXR0aW1pbmcgPSBwY2FuX3VzYl9mZF9zZXRfYml0dGltaW5nX2Zhc3QsCisJLmRldl9kZWNvZGVfYnVmID0gcGNhbl91c2JfZmRfZGVjb2RlX2J1ZiwKKwkuZGV2X3N0YXJ0ID0gcGNhbl91c2JfZmRfc3RhcnQsCisJLmRldl9zdG9wID0gcGNhbl91c2JfZmRfc3RvcCwKKwkuZGV2X3Jlc3RhcnRfYXN5bmMgPSBwY2FuX3VzYl9mZF9yZXN0YXJ0X2FzeW5jLAorCS5kZXZfZW5jb2RlX21zZyA9IHBjYW5fdXNiX2ZkX2VuY29kZV9tc2csCisKKwkuZG9fZ2V0X2JlcnJfY291bnRlciA9IHBjYW5fdXNiX2ZkX2dldF9iZXJyX2NvdW50ZXIsCit9OworCisvKiBkZXNjcmliZXMgdGhlIFBDQU4tVVNCIFBybyBGRCBhZGFwdGVyICovCitjb25zdCBzdHJ1Y3QgcGVha191c2JfYWRhcHRlciBwY2FuX3VzYl9wcm9fZmQgPSB7CisJLm5hbWUgPSAiUENBTi1VU0IgUHJvIEZEIiwKKwkuZGV2aWNlX2lkID0gUENBTl9VU0JQUk9GRF9QUk9EVUNUX0lELAorCS5jdHJsX2NvdW50ID0gUENBTl9VU0JQUk9GRF9DSEFOTkVMX0NPVU5ULAorCS5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBDQU5fQ1RSTE1PREVfRkQgfAorCQkJQ0FOX0NUUkxNT0RFXzNfU0FNUExFUyB8IENBTl9DVFJMTU9ERV9MSVNURU5PTkxZLAorCS5jbG9jayA9IHsKKwkJLmZyZXEgPSBQQ0FOX1VGRF9DUllTVEFMX0haLAorCX0sCisJLmJpdHRpbWluZ19jb25zdCA9IHsKKwkJLm5hbWUgPSAicGNhbl91c2JfcHJvX2ZkIiwKKwkJLnRzZWcxX21pbiA9IDEsCisJCS50c2VnMV9tYXggPSA2NCwKKwkJLnRzZWcyX21pbiA9IDEsCisJCS50c2VnMl9tYXggPSAxNiwKKwkJLnNqd19tYXggPSAxNiwKKwkJLmJycF9taW4gPSAxLAorCQkuYnJwX21heCA9IDEwMjQsCisJCS5icnBfaW5jID0gMSwKKwl9LAorCS5kYXRhX2JpdHRpbWluZ19jb25zdCA9IHsKKwkJLm5hbWUgPSAicGNhbl91c2JfcHJvX2ZkIiwKKwkJLnRzZWcxX21pbiA9IDEsCisJCS50c2VnMV9tYXggPSAxNiwKKwkJLnRzZWcyX21pbiA9IDEsCisJCS50c2VnMl9tYXggPSA4LAorCQkuc2p3X21heCA9IDQsCisJCS5icnBfbWluID0gMSwKKwkJLmJycF9tYXggPSAxMDI0LAorCQkuYnJwX2luYyA9IDEsCisJfSwKKworCS8qIHNpemUgb2YgZGV2aWNlIHByaXZhdGUgZGF0YSAqLworCS5zaXplb2ZfZGV2X3ByaXZhdGUgPSBzaXplb2Yoc3RydWN0IHBjYW5fdXNiX2ZkX2RldmljZSksCisKKwkvKiB0aW1lc3RhbXBzIHVzYWdlICovCisJLnRzX3VzZWRfYml0cyA9IDMyLAorCS50c19wZXJpb2QgPSAxMDAwMDAwLCAvKiBjYWxpYnJhdGlvbiBwZXJpb2QgaW4gdHMuICovCisJLnVzX3Blcl90c19zY2FsZSA9IDEsIC8qIHVzID0gKHRzICogc2NhbGUpID4+IHNoaWZ0ICovCisJLnVzX3Blcl90c19zaGlmdCA9IDAsCisKKwkvKiBnaXZlIGhlcmUgbWVzc2FnZXMgaW4vb3V0IGVuZHBvaW50cyAqLworCS5lcF9tc2dfaW4gPSBQQ0FOX1VTQlBST19FUF9NU0dJTiwKKwkuZXBfbXNnX291dCA9IHtQQ0FOX1VTQlBST19FUF9NU0dPVVRfMCwgUENBTl9VU0JQUk9fRVBfTVNHT1VUXzF9LAorCisJLyogc2l6ZSBvZiByeC90eCB1c2IgYnVmZmVycyAqLworCS5yeF9idWZmZXJfc2l6ZSA9IFBDQU5fVUZEX1JYX0JVRkZFUl9TSVpFLAorCS50eF9idWZmZXJfc2l6ZSA9IFBDQU5fVUZEX1RYX0JVRkZFUl9TSVpFLAorCisJLyogZGV2aWNlIGNhbGxiYWNrcyAqLworCS5pbnRmX3Byb2JlID0gcGNhbl91c2JfcHJvX3Byb2JlLAkvKiBzYW1lIGFzIFBDQU4tVVNCIFBybyAqLworCS5kZXZfaW5pdCA9IHBjYW5fdXNiX2ZkX2luaXQsCisKKwkuZGV2X2V4aXQgPSBwY2FuX3VzYl9mZF9leGl0LAorCS5kZXZfZnJlZSA9IHBjYW5fdXNiX2ZkX2ZyZWUsCisJLmRldl9zZXRfYnVzID0gcGNhbl91c2JfZmRfc2V0X2J1cywKKwkuZGV2X3NldF9iaXR0aW1pbmcgPSBwY2FuX3VzYl9mZF9zZXRfYml0dGltaW5nX3Nsb3csCisJLmRldl9zZXRfZGF0YV9iaXR0aW1pbmcgPSBwY2FuX3VzYl9mZF9zZXRfYml0dGltaW5nX2Zhc3QsCisJLmRldl9kZWNvZGVfYnVmID0gcGNhbl91c2JfZmRfZGVjb2RlX2J1ZiwKKwkuZGV2X3N0YXJ0ID0gcGNhbl91c2JfZmRfc3RhcnQsCisJLmRldl9zdG9wID0gcGNhbl91c2JfZmRfc3RvcCwKKwkuZGV2X3Jlc3RhcnRfYXN5bmMgPSBwY2FuX3VzYl9mZF9yZXN0YXJ0X2FzeW5jLAorCS5kZXZfZW5jb2RlX21zZyA9IHBjYW5fdXNiX2ZkX2VuY29kZV9tc2csCisKKwkuZG9fZ2V0X2JlcnJfY291bnRlciA9IHBjYW5fdXNiX2ZkX2dldF9iZXJyX2NvdW50ZXIsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9wZWFrX3VzYi9wY2FuX3VzYl9wcm8uYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvcGVha191c2IvcGNhbl91c2JfcHJvLmMKaW5kZXggNGNmYTNiOC4uZGVjNTE3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi9wZWFrX3VzYi9wY2FuX3VzYl9wcm8uYworKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL3BlYWtfdXNiL3BjYW5fdXNiX3Byby5jCkBAIC0yNywxNCArMjcsNiBAQAogCiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiUEVBSy1TeXN0ZW0gUENBTi1VU0IgUHJvIGFkYXB0ZXIiKTsKIAotLyogUENBTi1VU0IgUHJvIEVuZHBvaW50cyAqLwotI2RlZmluZSBQQ0FOX1VTQlBST19FUF9DTURPVVQJCTEKLSNkZWZpbmUgUENBTl9VU0JQUk9fRVBfQ01ESU4JCShQQ0FOX1VTQlBST19FUF9DTURPVVQgfCBVU0JfRElSX0lOKQotI2RlZmluZSBQQ0FOX1VTQlBST19FUF9NU0dPVVRfMAkJMgotI2RlZmluZSBQQ0FOX1VTQlBST19FUF9NU0dJTgkJKFBDQU5fVVNCUFJPX0VQX01TR09VVF8wIHwgVVNCX0RJUl9JTikKLSNkZWZpbmUgUENBTl9VU0JQUk9fRVBfTVNHT1VUXzEJCTMKLSNkZWZpbmUgUENBTl9VU0JQUk9fRVBfVU5VU0VECQkoUENBTl9VU0JQUk9fRVBfTVNHT1VUXzEgfCBVU0JfRElSX0lOKQotCiAjZGVmaW5lIFBDQU5fVVNCUFJPX0NIQU5ORUxfQ09VTlQJMgogCiAvKiBQQ0FOLVVTQiBQcm8gYWRhcHRlciBpbnRlcm5hbCBjbG9jayAoTUh6KSAqLwpAQCAtMzIyLDggKzMxNCw4IEBACiAJcmV0dXJuIChpID49IFBDQU5fVVNCUFJPX1JTUF9TVUJNSVRfTUFYKSA/IC1FUkFOR0UgOiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgcGNhbl91c2JfcHJvX3NlbmRfcmVxKHN0cnVjdCBwZWFrX3VzYl9kZXZpY2UgKmRldiwgaW50IHJlcV9pZCwKLQkJCQkgaW50IHJlcV92YWx1ZSwgdm9pZCAqcmVxX2FkZHIsIGludCByZXFfc2l6ZSkKK2ludCBwY2FuX3VzYl9wcm9fc2VuZF9yZXEoc3RydWN0IHBlYWtfdXNiX2RldmljZSAqZGV2LCBpbnQgcmVxX2lkLAorCQkJICBpbnQgcmVxX3ZhbHVlLCB2b2lkICpyZXFfYWRkciwgaW50IHJlcV9zaXplKQogewogCWludCBlcnI7CiAJdTggcmVxX3R5cGU7CkBAIC00NzUsNyArNDY3LDcgQEAKIAlyZXR1cm4gcGNhbl91c2JfcHJvX3NldF9iaXRyYXRlKGRldiwgY2NidCk7CiB9CiAKLXN0YXRpYyB2b2lkIHBjYW5fdXNiX3Byb19yZXN0YXJ0X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYikKK3ZvaWQgcGNhbl91c2JfcHJvX3Jlc3RhcnRfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKQogewogCS8qIGNhbiBkZWxldGUgdXNiIHJlc291cmNlcyAqLwogCXBlYWtfdXNiX2FzeW5jX2NvbXBsZXRlKHVyYik7CkBAIC02MzQsNiArNjI2LDcgQEAKIAlzd2l0Y2ggKG5ld19zdGF0ZSkgewogCWNhc2UgQ0FOX1NUQVRFX0JVU19PRkY6CiAJCWNhbl9mcmFtZS0+Y2FuX2lkIHw9IENBTl9FUlJfQlVTT0ZGOworCQlkZXYtPmNhbi5jYW5fc3RhdHMuYnVzX29mZisrOwogCQljYW5fYnVzX29mZihuZXRkZXYpOwogCQlicmVhazsKIApAQCAtOTc3LDcgKzk3MCw3IEBACiAvKgogICogcHJvYmUgZnVuY3Rpb24gZm9yIG5ldyBQQ0FOLVVTQiBQcm8gdXNiIGludGVyZmFjZQogICovCi1zdGF0aWMgaW50IHBjYW5fdXNiX3Byb19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK2ludCBwY2FuX3VzYl9wcm9fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZfZGVzYzsKIAlpbnQgaTsKQEAgLTEwMTEsMTAgKzEwMDQsMTEgQEAKIC8qCiAgKiBkZXNjcmliZSB0aGUgUENBTi1VU0IgUHJvIGFkYXB0ZXIKICAqLwotc3RydWN0IHBlYWtfdXNiX2FkYXB0ZXIgcGNhbl91c2JfcHJvID0geworY29uc3Qgc3RydWN0IHBlYWtfdXNiX2FkYXB0ZXIgcGNhbl91c2JfcHJvID0gewogCS5uYW1lID0gIlBDQU4tVVNCIFBybyIsCiAJLmRldmljZV9pZCA9IFBDQU5fVVNCUFJPX1BST0RVQ1RfSUQsCiAJLmN0cmxfY291bnQgPSBQQ0FOX1VTQlBST19DSEFOTkVMX0NPVU5ULAorCS5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBDQU5fQ1RSTE1PREVfM19TQU1QTEVTIHwgQ0FOX0NUUkxNT0RFX0xJU1RFTk9OTFksCiAJLmNsb2NrID0gewogCQkuZnJlcSA9IFBDQU5fVVNCUFJPX0NSWVNUQUxfSFosCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvcGVha191c2IvcGNhbl91c2JfcHJvLmggYi9kcml2ZXJzL25ldC9jYW4vdXNiL3BlYWtfdXNiL3BjYW5fdXNiX3Byby5oCmluZGV4IDgzN2NlZTIuLmE2MmY3YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvcGVha191c2IvcGNhbl91c2JfcHJvLmgKKysrIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9wZWFrX3VzYi9wY2FuX3VzYl9wcm8uaApAQCAtMjcsNiArMjcsMTQgQEAKICNkZWZpbmUgUENBTl9VU0JQUk9fSU5GT19CTAkJMAogI2RlZmluZSBQQ0FOX1VTQlBST19JTkZPX0ZXCQkxCiAKKy8qIFBDQU4tVVNCIFBybyAoRkQpIEVuZHBvaW50cyAqLworI2RlZmluZSBQQ0FOX1VTQlBST19FUF9DTURPVVQJCTEKKyNkZWZpbmUgUENBTl9VU0JQUk9fRVBfQ01ESU4JCShQQ0FOX1VTQlBST19FUF9DTURPVVQgfCBVU0JfRElSX0lOKQorI2RlZmluZSBQQ0FOX1VTQlBST19FUF9NU0dPVVRfMAkJMgorI2RlZmluZSBQQ0FOX1VTQlBST19FUF9NU0dJTgkJKFBDQU5fVVNCUFJPX0VQX01TR09VVF8wIHwgVVNCX0RJUl9JTikKKyNkZWZpbmUgUENBTl9VU0JQUk9fRVBfTVNHT1VUXzEJCTMKKyNkZWZpbmUgUENBTl9VU0JQUk9fRVBfVU5VU0VECQkoUENBTl9VU0JQUk9fRVBfTVNHT1VUXzEgfCBVU0JfRElSX0lOKQorCiAvKiBWZW5kb3IgUmVxdWVzdCB2YWx1ZSBmb3IgWFhYX0ZDVCAqLwogI2RlZmluZSBQQ0FOX1VTQlBST19GQ1RfRFJWTEQJCTUgLyogdGVsbCBkZXZpY2UgZHJpdmVyIGlzIGxvYWRlZCAqLwogI2RlZmluZSBQQ0FOX1VTQlBST19GQ1RfRFJWTERfUkVRX0xFTgkxNgpAQCAtMTc2LDQgKzE4NCw5IEBACiAJc3RydWN0IHBjYW5fdXNiX3Byb190eG1zZwl0eF9tc2c7CiB9OwogCitpbnQgcGNhbl91c2JfcHJvX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKK2ludCBwY2FuX3VzYl9wcm9fc2VuZF9yZXEoc3RydWN0IHBlYWtfdXNiX2RldmljZSAqZGV2LCBpbnQgcmVxX2lkLAorCQkJICBpbnQgcmVxX3ZhbHVlLCB2b2lkICpyZXFfYWRkciwgaW50IHJlcV9zaXplKTsKK3ZvaWQgcGNhbl91c2JfcHJvX3Jlc3RhcnRfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL3VzYl84ZGV2LmMgYi9kcml2ZXJzL25ldC9jYW4vdXNiL3VzYl84ZGV2LmMKaW5kZXggZWY2NzRlYy4uZGQ1MmM3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3VzYi91c2JfOGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvdXNiXzhkZXYuYwpAQCAtMzc3LDYgKzM3Nyw3IEBACiAJY2FzZSBVU0JfOERFVl9TVEFUVVNNU0dfQlVTT0ZGOgogCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfQlVTX09GRjsKIAkJY2YtPmNhbl9pZCB8PSBDQU5fRVJSX0JVU09GRjsKKwkJcHJpdi0+Y2FuLmNhbl9zdGF0cy5idXNfb2ZmKys7CiAJCWNhbl9idXNfb2ZmKHByaXYtPm5ldGRldik7CiAJCWJyZWFrOwogCWNhc2UgVVNCXzhERVZfU1RBVFVTTVNHX09WRVJSVU46CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jIGIvZHJpdmVycy9uZXQvZHNhL2JjbV9zZjIuYwppbmRleCBmZWIyOWM0Li40ZGFmZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvYmNtX3NmMi5jCisrKyBiL2RyaXZlcnMvbmV0L2RzYS9iY21fc2YyLmMKQEAgLTIzMyw2ICsyMzMsMzUgQEAKIAljb3JlX3dyaXRlbChwcml2LCByZWcsIENPUkVfRUVFX0VOX0NUUkwpOwogfQogCitzdGF0aWMgdm9pZCBiY21fc2YyX2dwaHlfZW5hYmxlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBiY21fc2YyX3ByaXYgKnByaXYgPSBkc190b19wcml2KGRzKTsKKwl1MzIgcmVnOworCisJcmVnID0gcmVnX3JlYWRsKHByaXYsIFJFR19TUEhZX0NOVFJMKTsKKwlpZiAoZW5hYmxlKSB7CisJCXJlZyB8PSBQSFlfUkVTRVQ7CisJCXJlZyAmPSB+KEVYVF9QV1JfRE9XTiB8IElERFFfQklBUyB8IENLMjVfRElTKTsKKwkJcmVnX3dyaXRlbChwcml2LCByZWcsIFJFR19TUEhZX0NOVFJMKTsKKwkJdWRlbGF5KDIxKTsKKwkJcmVnID0gcmVnX3JlYWRsKHByaXYsIFJFR19TUEhZX0NOVFJMKTsKKwkJcmVnICY9IH5QSFlfUkVTRVQ7CisJfSBlbHNlIHsKKwkJcmVnIHw9IEVYVF9QV1JfRE9XTiB8IElERFFfQklBUyB8IFBIWV9SRVNFVDsKKwkJcmVnX3dyaXRlbChwcml2LCByZWcsIFJFR19TUEhZX0NOVFJMKTsKKwkJbWRlbGF5KDEpOworCQlyZWcgfD0gQ0syNV9ESVM7CisJfQorCXJlZ193cml0ZWwocHJpdiwgcmVnLCBSRUdfU1BIWV9DTlRSTCk7CisKKwkvKiBVc2UgUEhZLWRyaXZlbiBMRUQgc2lnbmFsaW5nICovCisJaWYgKCFlbmFibGUpIHsKKwkJcmVnID0gcmVnX3JlYWRsKHByaXYsIFJFR19MRURfQ05UUkwoMCkpOworCQlyZWcgfD0gU1BETE5LX1NSQ19TRUw7CisJCXJlZ193cml0ZWwocHJpdiwgcmVnLCBSRUdfTEVEX0NOVFJMKDApKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgYmNtX3NmMl9wb3J0X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsCiAJCQkgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KQogewpAQCAtMjQ4LDYgKzI3NywyNCBAQAogCS8qIENsZWFyIHRoZSBSeCBhbmQgVHggZGlzYWJsZSBiaXRzIGFuZCBzZXQgdG8gbm8gc3Bhbm5pbmcgdHJlZSAqLwogCWNvcmVfd3JpdGVsKHByaXYsIDAsIENPUkVfR19QQ1RMX1BPUlQocG9ydCkpOwogCisJLyogUmUtZW5hYmxlIHRoZSBHUEhZIGFuZCByZS1hcHBseSB3b3JrYXJvdW5kcyAqLworCWlmIChwb3J0ID09IDAgJiYgcHJpdi0+aHdfcGFyYW1zLm51bV9ncGh5ID09IDEpIHsKKwkJYmNtX3NmMl9ncGh5X2VuYWJsZV9zZXQoZHMsIHRydWUpOworCQlpZiAocGh5KSB7CisJCQkvKiBpZiBwaHlfc3RvcCgpIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHBoeQorCQkJICogd2lsbCBiZSBpbiBoYWx0ZWQgc3RhdGUsIGFuZCBwaHlfc3RhcnQoKQorCQkJICogd2lsbCBjYWxsIHJlc3VtZS4KKwkJCSAqCisJCQkgKiB0aGUgcmVzdW1lIHBhdGggZG9lcyBub3QgY29uZmlndXJlIGJhY2sKKwkJCSAqIGF1dG9uZWcgc2V0dGluZ3MsIGFuZCBzaW5jZSB3ZSBoYXJkIHJlc2V0CisJCQkgKiB0aGUgcGh5IG1hbnVhbGx5IGhlcmUsIHdlIG5lZWQgdG8gcmVzZXQgdGhlCisJCQkgKiBzdGF0ZSBtYWNoaW5lIGFsc28uCisJCQkgKi8KKwkJCXBoeS0+c3RhdGUgPSBQSFlfUkVBRFk7CisJCQlwaHlfaW5pdF9odyhwaHkpOworCQl9CisJfQorCiAJLyogRW5hYmxlIHBvcnQgNyBpbnRlcnJ1cHRzIHRvIGdldCBub3RpZmllZCAqLwogCWlmIChwb3J0ID09IDcpCiAJCWludHJsMl8xX21hc2tfY2xlYXIocHJpdiwgUF9JUlFfTUFTSyhQN19JUlFfT0ZGKSk7CkBAIC0yODEsNiArMzI4LDkgQEAKIAkJaW50cmwyXzFfd3JpdGVsKHByaXYsIFBfSVJRX01BU0soUDdfSVJRX09GRiksIElOVFJMMl9DUFVfQ0xFQVIpOwogCX0KIAorCWlmIChwb3J0ID09IDAgJiYgcHJpdi0+aHdfcGFyYW1zLm51bV9ncGh5ID09IDEpCisJCWJjbV9zZjJfZ3BoeV9lbmFibGVfc2V0KGRzLCBmYWxzZSk7CisKIAlpZiAoZHNhX2lzX2NwdV9wb3J0KGRzLCBwb3J0KSkKIAkJb2ZmID0gQ09SRV9JTVBfQ1RMOwogCWVsc2UKQEAgLTQwMCw2ICs0NTAsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYmNtX3NmMl9pbnRyX2Rpc2FibGUoc3RydWN0IGJjbV9zZjJfcHJpdiAqcHJpdikKK3sKKwlpbnRybDJfMF93cml0ZWwocHJpdiwgMHhmZmZmZmZmZiwgSU5UUkwyX0NQVV9NQVNLX1NFVCk7CisJaW50cmwyXzBfd3JpdGVsKHByaXYsIDB4ZmZmZmZmZmYsIElOVFJMMl9DUFVfQ0xFQVIpOworCWludHJsMl8wX3dyaXRlbChwcml2LCAwLCBJTlRSTDJfQ1BVX01BU0tfQ0xFQVIpOworCWludHJsMl8xX3dyaXRlbChwcml2LCAweGZmZmZmZmZmLCBJTlRSTDJfQ1BVX01BU0tfU0VUKTsKKwlpbnRybDJfMV93cml0ZWwocHJpdiwgMHhmZmZmZmZmZiwgSU5UUkwyX0NQVV9DTEVBUik7CisJaW50cmwyXzFfd3JpdGVsKHByaXYsIDAsIElOVFJMMl9DUFVfTUFTS19DTEVBUik7Cit9CisKIHN0YXRpYyBpbnQgYmNtX3NmMl9zd19zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7CiAJY29uc3QgY2hhciAqcmVnX25hbWVzW0JDTV9TRjJfUkVHU19OVU1dID0gQkNNX1NGMl9SRUdTX05BTUU7CkBAIC00NDAsMTIgKzUwMCw3IEBACiAJfQogCiAJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0cyBhbmQgcmVxdWVzdCB0aGVtICovCi0JaW50cmwyXzBfd3JpdGVsKHByaXYsIDB4ZmZmZmZmZmYsIElOVFJMMl9DUFVfTUFTS19TRVQpOwotCWludHJsMl8wX3dyaXRlbChwcml2LCAweGZmZmZmZmZmLCBJTlRSTDJfQ1BVX0NMRUFSKTsKLQlpbnRybDJfMF93cml0ZWwocHJpdiwgMCwgSU5UUkwyX0NQVV9NQVNLX0NMRUFSKTsKLQlpbnRybDJfMV93cml0ZWwocHJpdiwgMHhmZmZmZmZmZiwgSU5UUkwyX0NQVV9NQVNLX1NFVCk7Ci0JaW50cmwyXzFfd3JpdGVsKHByaXYsIDB4ZmZmZmZmZmYsIElOVFJMMl9DUFVfQ0xFQVIpOwotCWludHJsMl8xX3dyaXRlbChwcml2LCAwLCBJTlRSTDJfQ1BVX01BU0tfQ0xFQVIpOworCWJjbV9zZjJfaW50cl9kaXNhYmxlKHByaXYpOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEocHJpdi0+aXJxMCwgYmNtX3NmMl9zd2l0Y2hfMF9pc3IsIDAsCiAJCQkgICJzd2l0Y2hfMCIsIHByaXYpOwpAQCAtNzQ3LDEyICs4MDIsNyBAQAogCXN0cnVjdCBiY21fc2YyX3ByaXYgKnByaXYgPSBkc190b19wcml2KGRzKTsKIAl1bnNpZ25lZCBpbnQgcG9ydDsKIAotCWludHJsMl8wX3dyaXRlbChwcml2LCAweGZmZmZmZmZmLCBJTlRSTDJfQ1BVX01BU0tfU0VUKTsKLQlpbnRybDJfMF93cml0ZWwocHJpdiwgMHhmZmZmZmZmZiwgSU5UUkwyX0NQVV9DTEVBUik7Ci0JaW50cmwyXzBfd3JpdGVsKHByaXYsIDAsIElOVFJMMl9DUFVfTUFTS19DTEVBUik7Ci0JaW50cmwyXzFfd3JpdGVsKHByaXYsIDB4ZmZmZmZmZmYsIElOVFJMMl9DUFVfTUFTS19TRVQpOwotCWludHJsMl8xX3dyaXRlbChwcml2LCAweGZmZmZmZmZmLCBJTlRSTDJfQ1BVX0NMRUFSKTsKLQlpbnRybDJfMV93cml0ZWwocHJpdiwgMCwgSU5UUkwyX0NQVV9NQVNLX0NMRUFSKTsKKwliY21fc2YyX2ludHJfZGlzYWJsZShwcml2KTsKIAogCS8qIERpc2FibGUgYWxsIHBvcnRzIHBoeXNpY2FsbHkgcHJlc2VudCBpbmNsdWRpbmcgdGhlIElNUAogCSAqIHBvcnQsIHRoZSBvdGhlciBvbmVzIGhhdmUgYWxyZWFkeSBiZWVuIGRpc2FibGVkIGR1cmluZwpAQCAtNzcxLDcgKzgyMSw2IEBACiB7CiAJc3RydWN0IGJjbV9zZjJfcHJpdiAqcHJpdiA9IGRzX3RvX3ByaXYoZHMpOwogCXVuc2lnbmVkIGludCBwb3J0OwotCXUzMiByZWc7CiAJaW50IHJldDsKIAogCXJldCA9IGJjbV9zZjJfc3dfcnN0KHByaXYpOwpAQCAtNzgwLDE3ICs4MjksOCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCS8qIFJlaW5pdGlhbGl6ZSB0aGUgc2luZ2xlIEdQSFkgKi8KLQlpZiAocHJpdi0+aHdfcGFyYW1zLm51bV9ncGh5ID09IDEpIHsKLQkJcmVnID0gcmVnX3JlYWRsKHByaXYsIFJFR19TUEhZX0NOVFJMKTsKLQkJcmVnIHw9IFBIWV9SRVNFVDsKLQkJcmVnICY9IH4oRVhUX1BXUl9ET1dOIHwgSUREUV9CSUFTKTsKLQkJcmVnX3dyaXRlbChwcml2LCByZWcsIFJFR19TUEhZX0NOVFJMKTsKLQkJdWRlbGF5KDIxKTsKLQkJcmVnID0gcmVnX3JlYWRsKHByaXYsIFJFR19TUEhZX0NOVFJMKTsKLQkJcmVnICY9IH5QSFlfUkVTRVQ7Ci0JCXJlZ193cml0ZWwocHJpdiwgcmVnLCBSRUdfU1BIWV9DTlRSTCk7Ci0JfQorCWlmIChwcml2LT5od19wYXJhbXMubnVtX2dwaHkgPT0gMSkKKwkJYmNtX3NmMl9ncGh5X2VuYWJsZV9zZXQoZHMsIHRydWUpOwogCiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IERTQV9NQVhfUE9SVFM7IHBvcnQrKykgewogCQlpZiAoKDEgPDwgcG9ydCkgJiBkcy0+cGh5c19wb3J0X21hc2spCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvYmNtX3NmMl9yZWdzLmggYi9kcml2ZXJzL25ldC9kc2EvYmNtX3NmMl9yZWdzLmgKaW5kZXggMWJiNDljYi4uY2FiZGZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL2JjbV9zZjJfcmVncy5oCisrKyBiL2RyaXZlcnMvbmV0L2RzYS9iY21fc2YyX3JlZ3MuaApAQCAtNjEsNiArNjEsMTAgQEAKICNkZWZpbmUgIExQSV9DT1VOVF9TSElGVAkJOQogI2RlZmluZSAgTFBJX0NPVU5UX01BU0sJCQkweDNGCiAKKyNkZWZpbmUgUkVHX0xFRF9DTlRSTF9CQVNFCQkweDkwCisjZGVmaW5lIFJFR19MRURfQ05UUkwoeCkJCShSRUdfTEVEX0NOVFJMX0JBU0UgKyAoeCkgKiA0KQorI2RlZmluZSAgU1BETE5LX1NSQ19TRUwJCQkoMSA8PCAyNCkKKwogLyogUmVnaXN0ZXIgc2V0IHJlbGF0aXZlIHRvICdJTlRSTDJfMCcgYW5kICdJTlRSTDJfMScgKi8KICNkZWZpbmUgSU5UUkwyX0NQVV9TVEFUVVMJCTB4MDAKICNkZWZpbmUgSU5UUkwyX0NQVV9TRVQJCQkweDA0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXY4OGU2MTMxLmMgYi9kcml2ZXJzL25ldC9kc2EvbXY4OGU2MTMxLmMKaW5kZXggMTIzMGY1Mi4uMjU0MGVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL212ODhlNjEzMS5jCisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTYxMzEuYwpAQCAtMTM5LDcgKzEzOSw4IEBACiAJCWludCBuZXh0aG9wOwogCiAJCW5leHRob3AgPSAweDFmOwotCQlpZiAoaSAhPSBkcy0+aW5kZXggJiYgaSA8IGRzLT5kc3QtPnBkLT5ucl9jaGlwcykKKwkJaWYgKGRzLT5wZC0+cnRhYmxlICYmCisJCSAgICBpICE9IGRzLT5pbmRleCAmJiBpIDwgZHMtPmRzdC0+cGQtPm5yX2NoaXBzKQogCQkJbmV4dGhvcCA9IGRzLT5wZC0+cnRhYmxlW2ldICYgMHgxZjsKIAogCQlSRUdfV1JJVEUoUkVHX0dMT0JBTDIsIDB4MDYsIDB4ODAwMCB8IChpIDw8IDgpIHwgbmV4dGhvcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXY4OGU2MzUyLmMgYi9kcml2ZXJzL25ldC9kc2EvbXY4OGU2MzUyLmMKaW5kZXggMjU4ZDllZi4uZTEzYWRjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL212ODhlNjM1Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTYzNTIuYwpAQCAtMjIsMTcgKzIyLDE0IEBACiAjaW5jbHVkZSA8bmV0L2RzYS5oPgogI2luY2x1ZGUgIm12ODhlNnh4eC5oIgogCi1zdGF0aWMgaW50IG12ODhlNjM1Ml93YWl0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHJlZywgdTE2IG1hc2spCitzdGF0aWMgaW50IG12ODhlNjM1Ml93YWl0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHJlZywgaW50IG9mZnNldCwgdTE2IG1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIEhaIC8gMTA7CiAKIAl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKIAkJaW50IHJldDsKIAotCQlyZXQgPSBSRUdfUkVBRChSRUdfR0xPQkFMMiwgcmVnKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCisJCXJldCA9IFJFR19SRUFEKHJlZywgb2Zmc2V0KTsKIAkJaWYgKCEocmV0ICYgbWFzaykpCiAJCQlyZXR1cm4gMDsKIApAQCAtNDMsMTcgKzQwLDE3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IG12ODhlNjM1Ml9waHlfd2FpdChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiB7Ci0JcmV0dXJuIG12ODhlNjM1Ml93YWl0KGRzLCAweDE4LCAweDgwMDApOworCXJldHVybiBtdjg4ZTYzNTJfd2FpdChkcywgUkVHX0dMT0JBTDIsIDB4MTgsIDB4ODAwMCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG12ODhlNjM1Ml9lZXByb21fbG9hZF93YWl0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKLQlyZXR1cm4gbXY4OGU2MzUyX3dhaXQoZHMsIDB4MTQsIDB4MDgwMCk7CisJcmV0dXJuIG12ODhlNjM1Ml93YWl0KGRzLCBSRUdfR0xPQkFMMiwgMHgxNCwgMHgwODAwKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbXY4OGU2MzUyX2VlcHJvbV9idXN5X3dhaXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogewotCXJldHVybiBtdjg4ZTYzNTJfd2FpdChkcywgMHgxNCwgMHg4MDAwKTsKKwlyZXR1cm4gbXY4OGU2MzUyX3dhaXQoZHMsIFJFR19HTE9CQUwyLCAweDE0LCAweDgwMDApOwogfQogCiBzdGF0aWMgaW50IF9fbXY4OGU2MzUyX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IGFkZHIsIGludCByZWdudW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4LmMgYi9kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4LmMKaW5kZXggY2Q2ODA3Yy4uM2U3ZTMxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC5jCisrKyBiL2RyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHguYwpAQCAtODUsNiArODUsMTIgQEAKIAlyZXQgPSBfX212ODhlNnh4eF9yZWdfcmVhZChidXMsIGRzLT5wZC0+c3dfYWRkciwgYWRkciwgcmVnKTsKIAltdXRleF91bmxvY2soJnBzLT5zbWlfbXV0ZXgpOwogCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXZfZGJnKGRzLT5tYXN0ZXJfZGV2LCAiPC0gYWRkcjogMHglLjJ4IHJlZzogMHglLjJ4IHZhbDogMHglLjR4XG4iLAorCQlhZGRyLCByZWcsIHJldCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjgsNiArMTM0LDkgQEAKIAlpZiAoYnVzID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCisJZGV2X2RiZyhkcy0+bWFzdGVyX2RldiwgIi0+IGFkZHI6IDB4JS4yeCByZWc6IDB4JS4yeCB2YWw6IDB4JS40eFxuIiwKKwkJYWRkciwgcmVnLCB2YWwpOworCiAJbXV0ZXhfbG9jaygmcHMtPnNtaV9tdXRleCk7CiAJcmV0ID0gX19tdjg4ZTZ4eHhfcmVnX3dyaXRlKGJ1cywgZHMtPnBkLT5zd19hZGRyLCBhZGRyLCByZWcsIHZhbCk7CiAJbXV0ZXhfdW5sb2NrKCZwcy0+c21pX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0LzNjb20vdHlwaG9vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvM2NvbS90eXBob29uLmMKaW5kZXggZGVkZTQzZi4uOGY4NDE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvM2NvbS90eXBob29uLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvM2NvbS90eXBob29uLmMKQEAgLTc2OSwxMSArNzY5LDExIEBACiAJCWZpcnN0X3R4ZC0+cHJvY2Vzc0ZsYWdzIHw9IFRZUEhPT05fVFhfUEZfSVBfQ0hLU1VNOwogCX0KIAotCWlmKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCWZpcnN0X3R4ZC0+cHJvY2Vzc0ZsYWdzIHw9CiAJCSAgICBUWVBIT09OX1RYX1BGX0lOU0VSVF9WTEFOIHwgVFlQSE9PTl9UWF9QRl9WTEFOX1BSSU9SSVRZOwogCQlmaXJzdF90eGQtPnByb2Nlc3NGbGFncyB8PQotCQkgICAgY3B1X3RvX2xlMzIoaHRvbnModmxhbl90eF90YWdfZ2V0KHNrYikpIDw8CisJCSAgICBjcHVfdG9fbGUzMihodG9ucyhza2Jfdmxhbl90YWdfZ2V0KHNrYikpIDw8CiAJCQkJVFlQSE9PTl9UWF9QRl9WTEFOX1RBR19TSElGVCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlb24vYWNlbmljLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlb24vYWNlbmljLmMKaW5kZXggYjY4MDc0ODAuLmI5MGEyNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FsdGVvbi9hY2VuaWMuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbHRlb24vYWNlbmljLmMKQEAgLTI0MjksOSArMjQyOSw5IEBACiAJCWZsYWdzaXplID0gKHNrYi0+bGVuIDw8IDE2KSB8IChCRF9GTEdfRU5EKTsKIAkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpCiAJCQlmbGFnc2l6ZSB8PSBCRF9GTEdfVENQX1VEUF9TVU07Ci0JCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwkJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKIAkJCWZsYWdzaXplIHw9IEJEX0ZMR19WTEFOX1RBRzsKLQkJCXZsYW5fdGFnID0gdmxhbl90eF90YWdfZ2V0KHNrYik7CisJCQl2bGFuX3RhZyA9IHNrYl92bGFuX3RhZ19nZXQoc2tiKTsKIAkJfQogCQlkZXNjID0gYXAtPnR4X3JpbmcgKyBpZHg7CiAJCWlkeCA9IChpZHggKyAxKSAlIEFDRV9UWF9SSU5HX0VOVFJJRVMoYXApOwpAQCAtMjQ1MCw5ICsyNDUwLDkgQEAKIAkJZmxhZ3NpemUgPSAoc2tiX2hlYWRsZW4oc2tiKSA8PCAxNik7CiAJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKQogCQkJZmxhZ3NpemUgfD0gQkRfRkxHX1RDUF9VRFBfU1VNOwotCQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCQlmbGFnc2l6ZSB8PSBCRF9GTEdfVkxBTl9UQUc7Ci0JCQl2bGFuX3RhZyA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQkJdmxhbl90YWcgPSBza2Jfdmxhbl90YWdfZ2V0KHNrYik7CiAJCX0KIAogCQlhY2VfbG9hZF90eF9iZChhcCwgYXAtPnR4X3JpbmcgKyBpZHgsIG1hcHBpbmcsIGZsYWdzaXplLCB2bGFuX3RhZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnCmluZGV4IDdhNWU0YWEuLmM2MzhjODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9LY29uZmlnCkBAIC00NSw3ICs0NSw3IEBACiAKIGNvbmZpZyBMQU5DRQogCXRyaXN0YXRlICJBTUQgTEFOQ0UgYW5kIFBDbmV0IChBVDE1MDAgYW5kIE5FMjEwMCkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElTQSAmJiBJU0FfRE1BX0FQSQorCWRlcGVuZHMgb24gSVNBICYmIElTQV9ETUFfQVBJICYmICFBUk0KIAktLS1oZWxwLS0tCiAJICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIG9mIHRoaXMgdHlwZSwgc2F5IFkgYW5kIHJlYWQKIAkgIHRoZSBFdGhlcm5ldC1IT1dUTywgYXZhaWxhYmxlIGZyb20KQEAgLTE0Miw3ICsxNDIsNyBAQAogCiBjb25maWcgTkk2NQogCXRyaXN0YXRlICJOSTY1MTAgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElTQSAmJiBJU0FfRE1BX0FQSQorCWRlcGVuZHMgb24gSVNBICYmIElTQV9ETUFfQVBJICYmICFBUk0KIAktLS1oZWxwLS0tCiAJICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIG9mIHRoaXMgdHlwZSwgc2F5IFkgYW5kIHJlYWQKIAkgIHRoZSBFdGhlcm5ldC1IT1dUTywgYXZhaWxhYmxlIGZyb20KQEAgLTE3OSw3ICsxNzksNyBAQAogCiBjb25maWcgQU1EX1hHQkUKIAl0cmlzdGF0ZSAiQU1EIDEwR2JFIEV0aGVybmV0IGRyaXZlciIKLQlkZXBlbmRzIG9uIE9GX05FVCAmJiBIQVNfSU9NRU0KKwlkZXBlbmRzIG9uIChPRl9ORVQgfHwgQUNQSSkgJiYgSEFTX0lPTUVNCiAJc2VsZWN0IFBIWUxJQgogCXNlbGVjdCBBTURfWEdCRV9QSFkKIAlzZWxlY3QgQklUUkVWRVJTRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2FtZDgxMTFlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYW1kODExMWUuYwppbmRleCA4NDFlNjU1Li40YzJhZTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYW1kODExMWUuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYW1kODExMWUuYwpAQCAtMTI5OSwxMSArMTI5OSwxMSBAQAogCWxwLT50eF9yaW5nW3R4X2luZGV4XS50eF9mbGFncyA9IDA7CiAKICNpZiBBTUQ4MTExRV9WTEFOX1RBR19VU0VECi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCWxwLT50eF9yaW5nW3R4X2luZGV4XS50YWdfY3RybF9jbWQgfD0KIAkJCQljcHVfdG9fbGUxNihUQ0NfVkxBTl9JTlNFUlQpOwogCQlscC0+dHhfcmluZ1t0eF9pbmRleF0udGFnX2N0cmxfaW5mbyA9Ci0JCQkJY3B1X3RvX2xlMTYodmxhbl90eF90YWdfZ2V0KHNrYikpOworCQkJCWNwdV90b19sZTE2KHNrYl92bGFuX3RhZ19nZXQoc2tiKSk7CiAKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdGFyaWxhbmNlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvYXRhcmlsYW5jZS5jCmluZGV4IGUwN2NlNWYuLmIxMDk2NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9hdGFyaWxhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL2F0YXJpbGFuY2UuYwpAQCAtNTUzLDggKzU1Myw4IEBACiAJaWYgKGxwLT5jYXJkdHlwZSA9PSBQQU1fQ0FSRCB8fAogCQltZW1hZGRyID09ICh1bnNpZ25lZCBzaG9ydCAqKTB4ZmZlMDAwMDApIHsKIAkJLyogUEFNcyBjYXJkIGFuZCBSaWVibCBvbiBTVCB1c2UgbGV2ZWwgNSBhdXRvdmVjdG9yICovCi0JCWlmIChyZXF1ZXN0X2lycShJUlFfQVVUT181LCBsYW5jZV9pbnRlcnJ1cHQsIElSUV9UWVBFX1BSSU8sCi0JCSAgICAgICAgICAgICJQQU0sUmllYmwtU1QgRXRoZXJuZXQiLCBkZXYpKSB7CisJCWlmIChyZXF1ZXN0X2lycShJUlFfQVVUT181LCBsYW5jZV9pbnRlcnJ1cHQsIDAsCisJCQkJIlBBTSxSaWVibC1TVCBFdGhlcm5ldCIsIGRldikpIHsKIAkJCXByaW50ayggIkxhbmNlOiByZXF1ZXN0IGZvciBpcnEgJWQgZmFpbGVkXG4iLCBJUlFfQVVUT181ICk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtNTY3LDggKzU2Nyw4IEBACiAJCQlwcmludGsoICJMYW5jZTogcmVxdWVzdCBmb3IgVk1FIGludGVycnVwdCBmYWlsZWRcbiIgKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWlmIChyZXF1ZXN0X2lycShpcnEsIGxhbmNlX2ludGVycnVwdCwgSVJRX1RZUEVfUFJJTywKLQkJICAgICAgICAgICAgIlJpZWJsLVZNRSBFdGhlcm5ldCIsIGRldikpIHsKKwkJaWYgKHJlcXVlc3RfaXJxKGlycSwgbGFuY2VfaW50ZXJydXB0LCAwLCAiUmllYmwtVk1FIEV0aGVybmV0IiwKKwkJCQlkZXYpKSB7CiAJCQlwcmludGsoICJMYW5jZTogcmVxdWVzdCBmb3IgaXJxICV1IGZhaWxlZFxuIiwgaXJxICk7CiAJCQlyZXR1cm4gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL25tY2xhbl9jcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL25tY2xhbl9jcy5jCmluZGV4IDViMjI3NjQuLjI3MjQ1ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9ubWNsYW5fY3MuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvbm1jbGFuX2NzLmMKQEAgLTk1Miw2ICs5NTIsOCBAQAogICBkbyB7CiAgICAgLyogV0FSTklORzogTUFDRV9JUiBpcyBhIFJFQUQvQ0xFQVIgcG9ydCEgKi8KICAgICBzdGF0dXMgPSBpbmIoaW9hZGRyICsgQU0yMTUwX01BQ0VfQkFTRSArIE1BQ0VfSVIpOworICAgIGlmICghKHN0YXR1cyAmIH5NQUNFX0lNUl9ERUZBVUxUKSAmJiBJbnRyQ250ID09IE1BQ0VfTUFYX0lSX0lURVJBVElPTlMpCisgICAgICByZXR1cm4gSVJRX05PTkU7CiAKICAgICBwcl9kZWJ1ZygibWFjZV9pbnRlcnJ1cHQ6IGlycSAweCVYIHN0YXR1cyAweCVYLlxuIiwgaXJxLCBzdGF0dXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3BjbmV0MzIuYwppbmRleCBlMmUzYWFmLi4xMWQ2ZTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQvcGNuZXQzMi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC9wY25ldDMyLmMKQEAgLTI4MDYsNyArMjgwNiw3IEBACiAKIC8qCiAgKiBDaGVjayBmb3IgbG9zcyBvZiBsaW5rIGFuZCBsaW5rIGVzdGFibGlzaG1lbnQuCi0gKiBDYW4gbm90IHVzZSBtaWlfY2hlY2tfbWVkaWEgYmVjYXVzZSBpdCBkb2VzIG5vdGhpbmcgaWYgbW9kZSBpcyBmb3JjZWQuCisgKiBDb3VsZCBwb3NzaWJseSBiZSBjaGFuZ2VkIHRvIHVzZSBtaWlfY2hlY2tfbWVkaWEgaW5zdGVhZC4KICAqLwogCiBzdGF0aWMgdm9pZCBwY25ldDMyX3dhdGNoZG9nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWNvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1jb21tb24uaAppbmRleCA3NWIwOGM2Li4yOWEwOTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWNvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtY29tbW9uLmgKQEAgLTc2NywxNiArNzY3LDE3IEBACiAjZGVmaW5lIE1UTF9RX1JRT01SCQkJMHg0MAogI2RlZmluZSBNVExfUV9SUU1QT0NSCQkJMHg0NAogI2RlZmluZSBNVExfUV9SUURSCQkJMHg0YworI2RlZmluZSBNVExfUV9SUUZDUgkJCTB4NTAKICNkZWZpbmUgTVRMX1FfSUVSCQkJMHg3MAogI2RlZmluZSBNVExfUV9JU1IJCQkweDc0CiAKIC8qIE1UTCBxdWV1ZSByZWdpc3RlciBlbnRyeSBiaXQgcG9zaXRpb25zIGFuZCBzaXplcyAqLworI2RlZmluZSBNVExfUV9SUUZDUl9SRkFfSU5ERVgJCTEKKyNkZWZpbmUgTVRMX1FfUlFGQ1JfUkZBX1dJRFRICQk2CisjZGVmaW5lIE1UTF9RX1JRRkNSX1JGRF9JTkRFWAkJMTcKKyNkZWZpbmUgTVRMX1FfUlFGQ1JfUkZEX1dJRFRICQk2CiAjZGVmaW5lIE1UTF9RX1JRT01SX0VIRkNfSU5ERVgJCTcKICNkZWZpbmUgTVRMX1FfUlFPTVJfRUhGQ19XSURUSAkJMQotI2RlZmluZSBNVExfUV9SUU9NUl9SRkFfSU5ERVgJCTgKLSNkZWZpbmUgTVRMX1FfUlFPTVJfUkZBX1dJRFRICQkzCi0jZGVmaW5lIE1UTF9RX1JRT01SX1JGRF9JTkRFWAkJMTMKLSNkZWZpbmUgTVRMX1FfUlFPTVJfUkZEX1dJRFRICQkzCiAjZGVmaW5lIE1UTF9RX1JRT01SX1JRU19JTkRFWAkJMTYKICNkZWZpbmUgTVRMX1FfUlFPTVJfUlFTX1dJRFRICQk5CiAjZGVmaW5lIE1UTF9RX1JRT01SX1JTRl9JTkRFWAkJNQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRlYnVnZnMuYwppbmRleCA3NjQ3OWQwLi4yYzA2M2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRlYnVnZnMuYwpAQCAtMzI4LDcgKzMyOCw3IEBACiAKIAlidWYgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgImFtZC14Z2JlLSVzIiwgcGRhdGEtPm5ldGRldi0+bmFtZSk7CiAJcGRhdGEtPnhnYmVfZGVidWdmcyA9IGRlYnVnZnNfY3JlYXRlX2RpcihidWYsIE5VTEwpOwotCWlmIChwZGF0YS0+eGdiZV9kZWJ1Z2ZzID09IE5VTEwpIHsKKwlpZiAoIXBkYXRhLT54Z2JlX2RlYnVnZnMpIHsKIAkJbmV0ZGV2X2VycihwZGF0YS0+bmV0ZGV2LCAiZGVidWdmc19jcmVhdGVfZGlyIGZhaWxlZFxuIik7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRlc2MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZGVzYy5jCmluZGV4IGE1MDg5MWY1Li5kODFmYzZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRlc2MuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRlc2MuYwpAQCAtNDIyLDcgKzQyMiw2IEBACiAKIAkJcmluZy0+Y3VyID0gMDsKIAkJcmluZy0+ZGlydHkgPSAwOwotCQltZW1zZXQoJnJpbmctPnJ4LCAwLCBzaXplb2YocmluZy0+cngpKTsKIAogCQlod19pZi0+cnhfZGVzY19pbml0KGNoYW5uZWwpOwogCX0KQEAgLTYyMSwzNSArNjIwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgeGdiZV9yZWFsbG9jX3J4X2J1ZmZlcihzdHJ1Y3QgeGdiZV9jaGFubmVsICpjaGFubmVsKQotewotCXN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSA9IGNoYW5uZWwtPnBkYXRhOwotCXN0cnVjdCB4Z2JlX2h3X2lmICpod19pZiA9ICZwZGF0YS0+aHdfaWY7Ci0Jc3RydWN0IHhnYmVfcmluZyAqcmluZyA9IGNoYW5uZWwtPnJ4X3Jpbmc7Ci0Jc3RydWN0IHhnYmVfcmluZ19kYXRhICpyZGF0YTsKLQlpbnQgaTsKLQotCURCR1BSKCItLT54Z2JlX3JlYWxsb2NfcnhfYnVmZmVyOiByeF9yaW5nLT5yeC5yZWFsbG9jX2luZGV4ID0gJXVcbiIsCi0JICAgICAgcmluZy0+cngucmVhbGxvY19pbmRleCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcmluZy0+ZGlydHk7IGkrKykgewotCQlyZGF0YSA9IFhHQkVfR0VUX0RFU0NfREFUQShyaW5nLCByaW5nLT5yeC5yZWFsbG9jX2luZGV4KTsKLQotCQkvKiBSZXNldCByZGF0YSB2YWx1ZXMgKi8KLQkJeGdiZV91bm1hcF9yZGF0YShwZGF0YSwgcmRhdGEpOwotCi0JCWlmICh4Z2JlX21hcF9yeF9idWZmZXIocGRhdGEsIHJpbmcsIHJkYXRhKSkKLQkJCWJyZWFrOwotCi0JCWh3X2lmLT5yeF9kZXNjX3Jlc2V0KHJkYXRhKTsKLQotCQlyaW5nLT5yeC5yZWFsbG9jX2luZGV4Kys7Ci0JfQotCXJpbmctPmRpcnR5ID0gMDsKLQotCURCR1BSKCI8LS14Z2JlX3JlYWxsb2NfcnhfYnVmZmVyXG4iKTsKLX0KLQogdm9pZCB4Z2JlX2luaXRfZnVuY3Rpb25fcHRyc19kZXNjKHN0cnVjdCB4Z2JlX2Rlc2NfaWYgKmRlc2NfaWYpCiB7CiAJREJHUFIoIi0tPnhnYmVfaW5pdF9mdW5jdGlvbl9wdHJzX2Rlc2NcbiIpOwpAQCAtNjU3LDcgKzYyNyw3IEBACiAJZGVzY19pZi0+YWxsb2NfcmluZ19yZXNvdXJjZXMgPSB4Z2JlX2FsbG9jX3JpbmdfcmVzb3VyY2VzOwogCWRlc2NfaWYtPmZyZWVfcmluZ19yZXNvdXJjZXMgPSB4Z2JlX2ZyZWVfcmluZ19yZXNvdXJjZXM7CiAJZGVzY19pZi0+bWFwX3R4X3NrYiA9IHhnYmVfbWFwX3R4X3NrYjsKLQlkZXNjX2lmLT5yZWFsbG9jX3J4X2J1ZmZlciA9IHhnYmVfcmVhbGxvY19yeF9idWZmZXI7CisJZGVzY19pZi0+bWFwX3J4X2J1ZmZlciA9IHhnYmVfbWFwX3J4X2J1ZmZlcjsKIAlkZXNjX2lmLT51bm1hcF9yZGF0YSA9IHhnYmVfdW5tYXBfcmRhdGE7CiAJZGVzY19pZi0+d3JhcHBlcl90eF9kZXNjX2luaXQgPSB4Z2JlX3dyYXBwZXJfdHhfZGVzY3JpcHRvcl9pbml0OwogCWRlc2NfaWYtPndyYXBwZXJfcnhfZGVzY19pbml0ID0geGdiZV93cmFwcGVyX3J4X2Rlc2NyaXB0b3JfaW5pdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRldi5jCmluZGV4IDUzZjVmNjYuLjQwMDc1N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kZXYuYwpAQCAtMTE1LDYgKzExNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L21kaW8uaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgpAQCAtMTMwLDcgKzEzMSw3IEBACiAKIAlEQkdQUigiLS0+eGdiZV91c2VjX3RvX3Jpd3RcbiIpOwogCi0JcmF0ZSA9IGNsa19nZXRfcmF0ZShwZGF0YS0+c3lzY2xrKTsKKwlyYXRlID0gcGRhdGEtPnN5c2Nsa19yYXRlOwogCiAJLyoKIAkgKiBDb252ZXJ0IHRoZSBpbnB1dCB1c2VjIHZhbHVlIHRvIHRoZSB3YXRjaGRvZyB0aW1lciB2YWx1ZS4gRWFjaApAQCAtMTUzLDcgKzE1NCw3IEBACiAKIAlEQkdQUigiLS0+eGdiZV9yaXd0X3RvX3VzZWNcbiIpOwogCi0JcmF0ZSA9IGNsa19nZXRfcmF0ZShwZGF0YS0+c3lzY2xrKTsKKwlyYXRlID0gcGRhdGEtPnN5c2Nsa19yYXRlOwogCiAJLyoKIAkgKiBDb252ZXJ0IHRoZSBpbnB1dCB3YXRjaGRvZyB0aW1lciB2YWx1ZSB0byB0aGUgdXNlYyB2YWx1ZS4gRWFjaApAQCAtNjczLDYgKzY3NCw5IEBACiAKIHN0YXRpYyBpbnQgeGdiZV9zZXRfZ21paV9zcGVlZChzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpCiB7CisJaWYgKFhHTUFDX0lPUkVBRF9CSVRTKHBkYXRhLCBNQUNfVENSLCBTUykgPT0gMHgzKQorCQlyZXR1cm4gMDsKKwogCVhHTUFDX0lPV1JJVEVfQklUUyhwZGF0YSwgTUFDX1RDUiwgU1MsIDB4Myk7CiAKIAlyZXR1cm4gMDsKQEAgLTY4MCw2ICs2ODQsOSBAQAogCiBzdGF0aWMgaW50IHhnYmVfc2V0X2dtaWlfMjUwMF9zcGVlZChzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpCiB7CisJaWYgKFhHTUFDX0lPUkVBRF9CSVRTKHBkYXRhLCBNQUNfVENSLCBTUykgPT0gMHgyKQorCQlyZXR1cm4gMDsKKwogCVhHTUFDX0lPV1JJVEVfQklUUyhwZGF0YSwgTUFDX1RDUiwgU1MsIDB4Mik7CiAKIAlyZXR1cm4gMDsKQEAgLTY4Nyw2ICs2OTQsOSBAQAogCiBzdGF0aWMgaW50IHhnYmVfc2V0X3hnbWlpX3NwZWVkKHN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSkKIHsKKwlpZiAoWEdNQUNfSU9SRUFEX0JJVFMocGRhdGEsIE1BQ19UQ1IsIFNTKSA9PSAwKQorCQlyZXR1cm4gMDsKKwogCVhHTUFDX0lPV1JJVEVfQklUUyhwZGF0YSwgTUFDX1RDUiwgU1MsIDApOwogCiAJcmV0dXJuIDA7CkBAIC04ODEsNiArODkxLDIzIEBACiAJZWxzZQogCQltbWRfYWRkcmVzcyA9IChwZGF0YS0+bWRpb19tbWQgPDwgMTYpIHwgKG1tZF9yZWcgJiAweGZmZmYpOwogCisJLyogSWYgdGhlIFBDUyBpcyBjaGFuZ2luZyBtb2RlcywgbWF0Y2ggdGhlIE1BQyBzcGVlZCB0byBpdCAqLworCWlmICgoKG1tZF9hZGRyZXNzID4+IDE2KSA9PSBNRElPX01NRF9QQ1MpICYmCisJICAgICgobW1kX2FkZHJlc3MgJiAweGZmZmYpID09IE1ESU9fQ1RSTDIpKSB7CisJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBwZGF0YS0+cGh5ZGV2OworCisJCWlmIChtbWRfZGF0YSAmIE1ESU9fUENTX0NUUkwyX1RZUEUpIHsKKwkJCS8qIEtYIG1vZGUgKi8KKwkJCWlmIChwaHlkZXYtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMDAwYmFzZUtYX0Z1bGwpCisJCQkJeGdiZV9zZXRfZ21paV9zcGVlZChwZGF0YSk7CisJCQllbHNlCisJCQkJeGdiZV9zZXRfZ21paV8yNTAwX3NwZWVkKHBkYXRhKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEtSIG1vZGUgKi8KKwkJCXhnYmVfc2V0X3hnbWlpX3NwZWVkKHBkYXRhKTsKKwkJfQorCX0KKwogCS8qIFRoZSBQQ1MgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCB1c2luZyBtbWlvLiBUaGUgdW5kZXJseWluZyBBUEIzCiAJICogbWFuYWdlbWVudCBpbnRlcmZhY2UgdXNlcyBpbmRpcmVjdCBhZGRyZXNzaW5nIHRvIGFjY2VzcyB0aGUgTU1ECiAJICogcmVnaXN0ZXIgc2V0cy4gVGhpcyByZXF1aXJlcyBhY2Nlc3Npbmcgb2YgdGhlIFBDUyByZWdpc3RlciBpbiB0d28KQEAgLTEzNTksNiArMTM4Niw3IEBACiAJdW5zaWduZWQgaW50IHRzb19jb250ZXh0LCB2bGFuX2NvbnRleHQ7CiAJdW5zaWduZWQgaW50IHR4X3NldF9pYzsKIAlpbnQgc3RhcnRfaW5kZXggPSByaW5nLT5jdXI7CisJaW50IGN1cl9pbmRleCA9IHJpbmctPmN1cjsKIAlpbnQgaTsKIAogCURCR1BSKCItLT54Z2JlX2Rldl94bWl0XG4iKTsKQEAgLTE0MDEsNyArMTQyOSw3IEBACiAJZWxzZQogCQl0eF9zZXRfaWMgPSAwOwogCi0JcmRhdGEgPSBYR0JFX0dFVF9ERVNDX0RBVEEocmluZywgcmluZy0+Y3VyKTsKKwlyZGF0YSA9IFhHQkVfR0VUX0RFU0NfREFUQShyaW5nLCBjdXJfaW5kZXgpOwogCXJkZXNjID0gcmRhdGEtPnJkZXNjOwogCiAJLyogQ3JlYXRlIGEgY29udGV4dCBkZXNjcmlwdG9yIGlmIHRoaXMgaXMgYSBUU08gcGFja2V0ICovCkBAIC0xNDQ0LDggKzE0NzIsOCBAQAogCQkJcmluZy0+dHguY3VyX3ZsYW5fY3RhZyA9IHBhY2tldC0+dmxhbl9jdGFnOwogCQl9CiAKLQkJcmluZy0+Y3VyKys7Ci0JCXJkYXRhID0gWEdCRV9HRVRfREVTQ19EQVRBKHJpbmcsIHJpbmctPmN1cik7CisJCWN1cl9pbmRleCsrOworCQlyZGF0YSA9IFhHQkVfR0VUX0RFU0NfREFUQShyaW5nLCBjdXJfaW5kZXgpOwogCQlyZGVzYyA9IHJkYXRhLT5yZGVzYzsKIAl9CiAKQEAgLTE0NzMsNyArMTUwMSw3IEBACiAJWEdNQUNfU0VUX0JJVFNfTEUocmRlc2MtPmRlc2MzLCBUWF9OT1JNQUxfREVTQzMsIENUWFQsIDApOwogCiAJLyogU2V0IE9XTiBiaXQgaWYgbm90IHRoZSBmaXJzdCBkZXNjcmlwdG9yICovCi0JaWYgKHJpbmctPmN1ciAhPSBzdGFydF9pbmRleCkKKwlpZiAoY3VyX2luZGV4ICE9IHN0YXJ0X2luZGV4KQogCQlYR01BQ19TRVRfQklUU19MRShyZGVzYy0+ZGVzYzMsIFRYX05PUk1BTF9ERVNDMywgT1dOLCAxKTsKIAogCWlmICh0c28pIHsKQEAgLTE0OTcsOSArMTUyNSw5IEBACiAJCQkJICBwYWNrZXQtPmxlbmd0aCk7CiAJfQogCi0JZm9yIChpID0gcmluZy0+Y3VyIC0gc3RhcnRfaW5kZXggKyAxOyBpIDwgcGFja2V0LT5yZGVzY19jb3VudDsgaSsrKSB7Ci0JCXJpbmctPmN1cisrOwotCQlyZGF0YSA9IFhHQkVfR0VUX0RFU0NfREFUQShyaW5nLCByaW5nLT5jdXIpOworCWZvciAoaSA9IGN1cl9pbmRleCAtIHN0YXJ0X2luZGV4ICsgMTsgaSA8IHBhY2tldC0+cmRlc2NfY291bnQ7IGkrKykgeworCQljdXJfaW5kZXgrKzsKKwkJcmRhdGEgPSBYR0JFX0dFVF9ERVNDX0RBVEEocmluZywgY3VyX2luZGV4KTsKIAkJcmRlc2MgPSByZGF0YS0+cmRlc2M7CiAKIAkJLyogVXBkYXRlIGJ1ZmZlciBhZGRyZXNzICovCkBAIC0xNTUxLDcgKzE1NzksNyBAQAogCS8qIE1ha2Ugc3VyZSBvd25lcnNoaXAgaXMgd3JpdHRlbiB0byB0aGUgZGVzY3JpcHRvciAqLwogCXdtYigpOwogCi0JcmluZy0+Y3VyKys7CisJcmluZy0+Y3VyID0gY3VyX2luZGV4ICsgMTsKIAlpZiAoIXBhY2tldC0+c2tiLT54bWl0X21vcmUgfHwKIAkgICAgbmV0aWZfeG1pdF9zdG9wcGVkKG5ldGRldl9nZXRfdHhfcXVldWUocGRhdGEtPm5ldGRldiwKIAkJCQkJCSAgIGNoYW5uZWwtPnF1ZXVlX2luZGV4KSkpCkBAIC0yMDc5LDEwICsyMTA3LDEwIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPnJ4X3FfY291bnQ7IGkrKykgewogCQkvKiBBY3RpdmF0ZSBmbG93IGNvbnRyb2wgd2hlbiBsZXNzIHRoYW4gNGsgbGVmdCBpbiBmaWZvICovCi0JCVhHTUFDX01UTF9JT1dSSVRFX0JJVFMocGRhdGEsIGksIE1UTF9RX1JRT01SLCBSRkEsIDIpOworCQlYR01BQ19NVExfSU9XUklURV9CSVRTKHBkYXRhLCBpLCBNVExfUV9SUUZDUiwgUkZBLCAyKTsKIAogCQkvKiBEZS1hY3RpdmF0ZSBmbG93IGNvbnRyb2wgd2hlbiBtb3JlIHRoYW4gNmsgbGVmdCBpbiBmaWZvICovCi0JCVhHTUFDX01UTF9JT1dSSVRFX0JJVFMocGRhdGEsIGksIE1UTF9RX1JRT01SLCBSRkQsIDQpOworCQlYR01BQ19NVExfSU9XUklURV9CSVRTKHBkYXRhLCBpLCBNVExfUV9SUUZDUiwgUkZELCA0KTsKIAl9CiB9CiAKQEAgLTIxMDcsNiArMjEzNSwyMyBAQAogCVhHTUFDX0lPV1JJVEVfQklUUyhwZGF0YSwgTUFDX1JDUiwgSkUsIHZhbCk7CiB9CiAKK3N0YXRpYyB2b2lkIHhnYmVfY29uZmlnX21hY19zcGVlZChzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpCit7CisJc3dpdGNoIChwZGF0YS0+cGh5X3NwZWVkKSB7CisJY2FzZSBTUEVFRF8xMDAwMDoKKwkJeGdiZV9zZXRfeGdtaWlfc3BlZWQocGRhdGEpOworCQlicmVhazsKKworCWNhc2UgU1BFRURfMjUwMDoKKwkJeGdiZV9zZXRfZ21paV8yNTAwX3NwZWVkKHBkYXRhKTsKKwkJYnJlYWs7CisKKwljYXNlIFNQRUVEXzEwMDA6CisJCXhnYmVfc2V0X2dtaWlfc3BlZWQocGRhdGEpOworCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHhnYmVfY29uZmlnX2NoZWNrc3VtX29mZmxvYWQoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKQogewogCWlmIChwZGF0YS0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKQpAQCAtMjc1Nyw2ICsyODAyLDcgQEAKIAl4Z2JlX2NvbmZpZ19tYWNfYWRkcmVzcyhwZGF0YSk7CiAJeGdiZV9jb25maWdfanVtYm9fZW5hYmxlKHBkYXRhKTsKIAl4Z2JlX2NvbmZpZ19mbG93X2NvbnRyb2wocGRhdGEpOworCXhnYmVfY29uZmlnX21hY19zcGVlZChwZGF0YSk7CiAJeGdiZV9jb25maWdfY2hlY2tzdW1fb2ZmbG9hZChwZGF0YSk7CiAJeGdiZV9jb25maWdfdmxhbl9zdXBwb3J0KHBkYXRhKTsKIAl4Z2JlX2NvbmZpZ19tbWMocGRhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtZHJ2LmMKaW5kZXggN2JiNWYwNy4uYjkzZDQ0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1kcnYuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLWRydi5jCkBAIC0yMjUsNiArMjI1LDExIEBACiAJcmV0dXJuIChyaW5nLT5yZGVzY19jb3VudCAtIChyaW5nLT5jdXIgLSByaW5nLT5kaXJ0eSkpOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB4Z2JlX3J4X2RpcnR5X2Rlc2Moc3RydWN0IHhnYmVfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gKHJpbmctPmN1ciAtIHJpbmctPmRpcnR5KTsKK30KKwogc3RhdGljIGludCB4Z2JlX21heWJlX3N0b3BfdHhfcXVldWUoc3RydWN0IHhnYmVfY2hhbm5lbCAqY2hhbm5lbCwKIAkJCQkgICAgc3RydWN0IHhnYmVfcmluZyAqcmluZywgdW5zaWduZWQgaW50IGNvdW50KQogewpAQCAtMzM3LDEyICszNDIsMTMgQEAKIAkJZG1hX2NoX2lzciA9IFhHTUFDX0RNQV9JT1JFQUQoY2hhbm5lbCwgRE1BX0NIX1NSKTsKIAkJREJHUFIoIiAgRE1BX0NIJXVfSVNSID0gJTA4eFxuIiwgaSwgZG1hX2NoX2lzcik7CiAKLQkJLyogSWYgd2UgZ2V0IGEgVEkgb3IgUkkgaW50ZXJydXB0IHRoYXQgbWVhbnMgcGVyIGNoYW5uZWwgRE1BCi0JCSAqIGludGVycnVwdHMgYXJlIG5vdCBlbmFibGVkLCBzbyB3ZSB1c2UgdGhlIHByaXZhdGUgZGF0YSBuYXBpCi0JCSAqIHN0cnVjdHVyZSwgbm90IHRoZSBwZXIgY2hhbm5lbCBuYXBpIHN0cnVjdHVyZQorCQkvKiBUaGUgVEkgb3IgUkkgaW50ZXJydXB0IGJpdHMgbWF5IHN0aWxsIGJlIHNldCBldmVuIGlmIHVzaW5nCisJCSAqIHBlciBjaGFubmVsIERNQSBpbnRlcnJ1cHRzLiBDaGVjayB0byBiZSBzdXJlIHRob3NlIGFyZSBub3QKKwkJICogZW5hYmxlZCBiZWZvcmUgdXNpbmcgdGhlIHByaXZhdGUgZGF0YSBuYXBpIHN0cnVjdHVyZS4KIAkJICovCi0JCWlmIChYR01BQ19HRVRfQklUUyhkbWFfY2hfaXNyLCBETUFfQ0hfU1IsIFRJKSB8fAotCQkgICAgWEdNQUNfR0VUX0JJVFMoZG1hX2NoX2lzciwgRE1BX0NIX1NSLCBSSSkpIHsKKwkJaWYgKCFwZGF0YS0+cGVyX2NoYW5uZWxfaXJxICYmCisJCSAgICAoWEdNQUNfR0VUX0JJVFMoZG1hX2NoX2lzciwgRE1BX0NIX1NSLCBUSSkgfHwKKwkJICAgICBYR01BQ19HRVRfQklUUyhkbWFfY2hfaXNyLCBETUFfQ0hfU1IsIFJJKSkpIHsKIAkJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnBkYXRhLT5uYXBpKSkgewogCQkJCS8qIERpc2FibGUgVHggYW5kIFJ4IGludGVycnVwdHMgKi8KIAkJCQl4Z2JlX2Rpc2FibGVfcnhfdHhfaW50cyhwZGF0YSk7CkBAIC00MTAsMTcgKzQxNiwxMyBAQAogCXN0cnVjdCB4Z2JlX2NoYW5uZWwgKmNoYW5uZWwgPSBjb250YWluZXJfb2YodGltZXIsCiAJCQkJCQkgICAgc3RydWN0IHhnYmVfY2hhbm5lbCwKIAkJCQkJCSAgICB0eF90aW1lcik7Ci0Jc3RydWN0IHhnYmVfcmluZyAqcmluZyA9IGNoYW5uZWwtPnR4X3Jpbmc7CiAJc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhID0gY2hhbm5lbC0+cGRhdGE7CiAJc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlEQkdQUigiLS0+eGdiZV90eF90aW1lclxuIik7CiAKIAluYXBpID0gKHBkYXRhLT5wZXJfY2hhbm5lbF9pcnEpID8gJmNoYW5uZWwtPm5hcGkgOiAmcGRhdGEtPm5hcGk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+bG9jaywgZmxhZ3MpOwotCiAJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcChuYXBpKSkgewogCQkvKiBEaXNhYmxlIFR4IGFuZCBSeCBpbnRlcnJ1cHRzICovCiAJCWlmIChwZGF0YS0+cGVyX2NoYW5uZWxfaXJxKQpAQCAtNDM0LDggKzQzNiw2IEBACiAKIAljaGFubmVsLT50eF90aW1lcl9hY3RpdmUgPSAwOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmluZy0+bG9jaywgZmxhZ3MpOwotCiAJREJHUFIoIjwtLXhnYmVfdHhfdGltZXJcbiIpOwogCiAJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwpAQCAtNTIzLDYgKzUyMyw3IEBACiAJaHdfZmVhdC0+c3BoICAgICAgICAgICA9IFhHTUFDX0dFVF9CSVRTKG1hY19oZnIxLCBNQUNfSFdGMVIsIFNQSEVOKTsKIAlod19mZWF0LT50c28gICAgICAgICAgID0gWEdNQUNfR0VUX0JJVFMobWFjX2hmcjEsIE1BQ19IV0YxUiwgVFNPRU4pOwogCWh3X2ZlYXQtPmRtYV9kZWJ1ZyAgICAgPSBYR01BQ19HRVRfQklUUyhtYWNfaGZyMSwgTUFDX0hXRjFSLCBEQkdNRU1BKTsKKwlod19mZWF0LT5yc3MgICAgICAgICAgID0gWEdNQUNfR0VUX0JJVFMobWFjX2hmcjEsIE1BQ19IV0YxUiwgUlNTRU4pOwogCWh3X2ZlYXQtPnRjX2NudAkgICAgICAgPSBYR01BQ19HRVRfQklUUyhtYWNfaGZyMSwgTUFDX0hXRjFSLCBOVU1UQyk7CiAJaHdfZmVhdC0+aGFzaF90YWJsZV9zaXplID0gWEdNQUNfR0VUX0JJVFMobWFjX2hmcjEsIE1BQ19IV0YxUiwKIAkJCQkJCSAgSEFTSFRCTFNaKTsKQEAgLTU1MiwxMyArNTUzLDE0IEBACiAJCWJyZWFrOwogCX0KIAotCS8qIFRoZSBRdWV1ZSBhbmQgQ2hhbm5lbCBjb3VudHMgYXJlIHplcm8gYmFzZWQgc28gaW5jcmVtZW50IHRoZW0KKwkvKiBUaGUgUXVldWUsIENoYW5uZWwgYW5kIFRDIGNvdW50cyBhcmUgemVybyBiYXNlZCBzbyBpbmNyZW1lbnQgdGhlbQogCSAqIHRvIGdldCB0aGUgYWN0dWFsIG51bWJlcgogCSAqLwogCWh3X2ZlYXQtPnJ4X3FfY250Kys7CiAJaHdfZmVhdC0+dHhfcV9jbnQrKzsKIAlod19mZWF0LT5yeF9jaF9jbnQrKzsKIAlod19mZWF0LT50eF9jaF9jbnQrKzsKKwlod19mZWF0LT50Y19jbnQrKzsKIAogCURCR1BSKCI8LS14Z2JlX2dldF9hbGxfaHdfZmVhdHVyZXNcbiIpOwogfQpAQCAtNjkyLDcgKzY5NCw3IEBACiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHBkYXRhLT5waHlkZXY7CiAJaW50IG5ld19zdGF0ZSA9IDA7CiAKLQlpZiAocGh5ZGV2ID09IE5VTEwpCisJaWYgKCFwaHlkZXYpCiAJCXJldHVybjsKIAogCWlmIChwaHlkZXYtPmxpbmspIHsKQEAgLTkyNyw3ICs5MjksNyBAQAogCURCR1BSKCI8LS14Z2JlX3N0b3BcbiIpOwogfQogCi1zdGF0aWMgdm9pZCB4Z2JlX3Jlc3RhcnRfZGV2KHN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSwgdW5zaWduZWQgaW50IHJlc2V0KQorc3RhdGljIHZvaWQgeGdiZV9yZXN0YXJ0X2RldihzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpCiB7CiAJc3RydWN0IHhnYmVfY2hhbm5lbCAqY2hhbm5lbDsKIAlzdHJ1Y3QgeGdiZV9od19pZiAqaHdfaWYgPSAmcGRhdGEtPmh3X2lmOwpAQCAtOTUwLDkgKzk1Miw4IEBACiAJeGdiZV9mcmVlX3R4X2RhdGEocGRhdGEpOwogCXhnYmVfZnJlZV9yeF9kYXRhKHBkYXRhKTsKIAotCS8qIElzc3VlIHNvZnR3YXJlIHJlc2V0IHRvIGRldmljZSBpZiByZXF1ZXN0ZWQgKi8KLQlpZiAocmVzZXQpCi0JCWh3X2lmLT5leGl0KHBkYXRhKTsKKwkvKiBJc3N1ZSBzb2Z0d2FyZSByZXNldCB0byBkZXZpY2UgKi8KKwlod19pZi0+ZXhpdChwZGF0YSk7CiAKIAl4Z2JlX3N0YXJ0KHBkYXRhKTsKIApAQCAtOTY3LDcgKzk2OCw3IEBACiAKIAlydG5sX2xvY2soKTsKIAotCXhnYmVfcmVzdGFydF9kZXYocGRhdGEsIDEpOworCXhnYmVfcmVzdGFydF9kZXYocGRhdGEpOwogCiAJcnRubF91bmxvY2soKTsKIH0KQEAgLTExNjUsOCArMTE2Niw4IEBACiAKIHN0YXRpYyB2b2lkIHhnYmVfcHJlcF92bGFuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4Z2JlX3BhY2tldF9kYXRhICpwYWNrZXQpCiB7Ci0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKLQkJcGFja2V0LT52bGFuX2N0YWcgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkKKwkJcGFja2V0LT52bGFuX2N0YWcgPSBza2Jfdmxhbl90YWdfZ2V0KHNrYik7CiB9CiAKIHN0YXRpYyBpbnQgeGdiZV9wcmVwX3RzbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGdiZV9wYWNrZXRfZGF0YSAqcGFja2V0KQpAQCAtMTI0Nyw5ICsxMjQ4LDkgQEAKIAkJWEdNQUNfU0VUX0JJVFMocGFja2V0LT5hdHRyaWJ1dGVzLCBUWF9QQUNLRVRfQVRUUklCVVRFUywKIAkJCSAgICAgICBDU1VNX0VOQUJMRSwgMSk7CiAKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKIAkJLyogVkxBTiByZXF1aXJlcyBhbiBleHRyYSBkZXNjcmlwdG9yIGlmIHRhZyBpcyBkaWZmZXJlbnQgKi8KLQkJaWYgKHZsYW5fdHhfdGFnX2dldChza2IpICE9IHJpbmctPnR4LmN1cl92bGFuX2N0YWcpCisJCWlmIChza2Jfdmxhbl90YWdfZ2V0KHNrYikgIT0gcmluZy0+dHguY3VyX3ZsYW5fY3RhZykKIAkJCS8qIFdlIGNhbiBzaGFyZSB3aXRoIHRoZSBUU08gY29udGV4dCBkZXNjcmlwdG9yICovCiAJCQlpZiAoIWNvbnRleHRfZGVzYykgewogCQkJCWNvbnRleHRfZGVzYyA9IDE7CkBAIC0xNDQ2LDcgKzE0NDcsNiBAQAogCXN0cnVjdCB4Z2JlX3JpbmcgKnJpbmc7CiAJc3RydWN0IHhnYmVfcGFja2V0X2RhdGEgKnBhY2tldDsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCiAJREJHUFIoIi0tPnhnYmVfeG1pdDogc2tiLT5sZW4gPSAlZFxuIiwgc2tiLT5sZW4pOwpAQCAtMTQ1OCw4ICsxNDU4LDYgQEAKIAogCXJldCA9IE5FVERFVl9UWF9PSzsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7Ci0KIAlpZiAoc2tiLT5sZW4gPT0gMCkgewogCQluZXRkZXZfZXJyKG5ldGRldiwgImVtcHR5IHNrYiByZWNlaXZlZCBmcm9tIHN0YWNrXG4iKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKQEAgLTE1MDYsMTAgKzE1MDQsNiBAQAogCXJldCA9IE5FVERFVl9UWF9PSzsKIAogdHhfbmV0ZGV2X3JldHVybjoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFncyk7Ci0KLQlEQkdQUigiPC0teGdiZV94bWl0XG4iKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE1ODcsNyArMTU4MSw3IEBACiAJcGRhdGEtPnJ4X2J1Zl9zaXplID0gcmV0OwogCW5ldGRldi0+bXR1ID0gbXR1OwogCi0JeGdiZV9yZXN0YXJ0X2RldihwZGF0YSwgMCk7CisJeGdiZV9yZXN0YXJ0X2RldihwZGF0YSk7CiAKIAlEQkdQUigiPC0teGdiZV9jaGFuZ2VfbXR1XG4iKTsKIApAQCAtMTc3NiwxNSArMTc3MCwyOCBAQAogc3RhdGljIHZvaWQgeGdiZV9yeF9yZWZyZXNoKHN0cnVjdCB4Z2JlX2NoYW5uZWwgKmNoYW5uZWwpCiB7CiAJc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhID0gY2hhbm5lbC0+cGRhdGE7CisJc3RydWN0IHhnYmVfaHdfaWYgKmh3X2lmID0gJnBkYXRhLT5od19pZjsKIAlzdHJ1Y3QgeGdiZV9kZXNjX2lmICpkZXNjX2lmID0gJnBkYXRhLT5kZXNjX2lmOwogCXN0cnVjdCB4Z2JlX3JpbmcgKnJpbmcgPSBjaGFubmVsLT5yeF9yaW5nOwogCXN0cnVjdCB4Z2JlX3JpbmdfZGF0YSAqcmRhdGE7CiAKLQlkZXNjX2lmLT5yZWFsbG9jX3J4X2J1ZmZlcihjaGFubmVsKTsKKwl3aGlsZSAocmluZy0+ZGlydHkgIT0gcmluZy0+Y3VyKSB7CisJCXJkYXRhID0gWEdCRV9HRVRfREVTQ19EQVRBKHJpbmcsIHJpbmctPmRpcnR5KTsKKworCQkvKiBSZXNldCByZGF0YSB2YWx1ZXMgKi8KKwkJZGVzY19pZi0+dW5tYXBfcmRhdGEocGRhdGEsIHJkYXRhKTsKKworCQlpZiAoZGVzY19pZi0+bWFwX3J4X2J1ZmZlcihwZGF0YSwgcmluZywgcmRhdGEpKQorCQkJYnJlYWs7CisKKwkJaHdfaWYtPnJ4X2Rlc2NfcmVzZXQocmRhdGEpOworCisJCXJpbmctPmRpcnR5Kys7CisJfQogCiAJLyogVXBkYXRlIHRoZSBSeCBUYWlsIFBvaW50ZXIgUmVnaXN0ZXIgd2l0aCBhZGRyZXNzIG9mCiAJICogdGhlIGxhc3QgY2xlYW5lZCBlbnRyeSAqLwotCXJkYXRhID0gWEdCRV9HRVRfREVTQ19EQVRBKHJpbmcsIHJpbmctPnJ4LnJlYWxsb2NfaW5kZXggLSAxKTsKKwlyZGF0YSA9IFhHQkVfR0VUX0RFU0NfREFUQShyaW5nLCByaW5nLT5kaXJ0eSAtIDEpOwogCVhHTUFDX0RNQV9JT1dSSVRFKGNoYW5uZWwsIERNQV9DSF9SRFRSX0xPLAogCQkJICBsb3dlcl8zMl9iaXRzKHJkYXRhLT5yZGVzY19kbWEpKTsKIH0KQEAgLTE4MjQsNyArMTgzMSw2IEBACiAJc3RydWN0IHhnYmVfcmluZ19kZXNjICpyZGVzYzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGRhdGEtPm5ldGRldjsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcHJvY2Vzc2VkID0gMDsKIAl1bnNpZ25lZCBpbnQgdHhfcGFja2V0cyA9IDAsIHR4X2J5dGVzID0gMDsKIApAQCAtMTgzNiw4ICsxODQyLDYgQEAKIAogCXR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmV0ZGV2LCBjaGFubmVsLT5xdWV1ZV9pbmRleCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcmluZy0+bG9jaywgZmxhZ3MpOwotCiAJd2hpbGUgKChwcm9jZXNzZWQgPCBYR0JFX1RYX0RFU0NfTUFYX1BST0MpICYmCiAJICAgICAgIChyaW5nLT5kaXJ0eSAhPSByaW5nLT5jdXIpKSB7CiAJCXJkYXRhID0gWEdCRV9HRVRfREVTQ19EQVRBKHJpbmcsIHJpbmctPmRpcnR5KTsKQEAgLTE4NjgsNyArMTg3Miw3IEBACiAJfQogCiAJaWYgKCFwcm9jZXNzZWQpCi0JCWdvdG8gdW5sb2NrOworCQlyZXR1cm4gMDsKIAogCW5ldGRldl90eF9jb21wbGV0ZWRfcXVldWUodHhxLCB0eF9wYWNrZXRzLCB0eF9ieXRlcyk7CiAKQEAgLTE4ODAsOSArMTg4NCw2IEBACiAKIAlEQkdQUigiPC0teGdiZV90eF9wb2xsOiBwcm9jZXNzZWQ9JWRcbiIsIHByb2Nlc3NlZCk7CiAKLXVubG9jazoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gcHJvY2Vzc2VkOwogfQogCkBAIC0xOTM0LDcgKzE5MzUsNyBAQAogcmVhZF9hZ2FpbjoKIAkJcmRhdGEgPSBYR0JFX0dFVF9ERVNDX0RBVEEocmluZywgcmluZy0+Y3VyKTsKIAotCQlpZiAocmluZy0+ZGlydHkgPiAoWEdCRV9SWF9ERVNDX0NOVCA+PiAzKSkKKwkJaWYgKHhnYmVfcnhfZGlydHlfZGVzYyhyaW5nKSA+IChYR0JFX1JYX0RFU0NfQ05UID4+IDMpKQogCQkJeGdiZV9yeF9yZWZyZXNoKGNoYW5uZWwpOwogCiAJCWlmIChod19pZi0+ZGV2X3JlYWQoY2hhbm5lbCkpCkBAIC0xOTQyLDcgKzE5NDMsNiBAQAogCiAJCXJlY2VpdmVkKys7CiAJCXJpbmctPmN1cisrOwotCQlyaW5nLT5kaXJ0eSsrOwogCiAJCWluY29tcGxldGUgPSBYR01BQ19HRVRfQklUUyhwYWNrZXQtPmF0dHJpYnV0ZXMsCiAJCQkJCSAgICBSWF9QQUNLRVRfQVRUUklCVVRFUywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1tYWluLmMKaW5kZXggZGJkMzg1MC4uMzJkZDY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1tYWluLmMKQEAgLTEyMyw3ICsxMjMsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb3BlcnR5Lmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogCiAjaW5jbHVkZSAieGdiZS5oIgogI2luY2x1ZGUgInhnYmUtY29tbW9uLmgiCkBAIC0xNDgsNiArMTUxLDcgQEAKIAlwZGF0YS0+cGF1c2VfYXV0b25lZyA9IDE7CiAJcGRhdGEtPnR4X3BhdXNlID0gMTsKIAlwZGF0YS0+cnhfcGF1c2UgPSAxOworCXBkYXRhLT5waHlfc3BlZWQgPSBTUEVFRF9VTktOT1dOOwogCXBkYXRhLT5wb3dlcl9kb3duID0gMDsKIAlwZGF0YS0+ZGVmYXVsdF9hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CiAJcGRhdGEtPmRlZmF1bHRfc3BlZWQgPSBTUEVFRF8xMDAwMDsKQEAgLTE2MSw2ICsxNjUsOTYgQEAKIAl4Z2JlX2luaXRfZnVuY3Rpb25fcHRyc19kZXNjKCZwZGF0YS0+ZGVzY19pZik7CiB9CiAKKyNpZmRlZiBDT05GSUdfQUNQSQorc3RhdGljIGludCB4Z2JlX2FjcGlfc3VwcG9ydChzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICphZGV2ID0gcGRhdGEtPmFkZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gcGRhdGEtPmRldjsKKwl1MzIgcHJvcGVydHk7CisJYWNwaV9oYW5kbGUgaGFuZGxlOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGF0YTsKKwlpbnQgY2NhOworCWludCByZXQ7CisKKwkvKiBPYnRhaW4gdGhlIHN5c3RlbSBjbG9jayBzZXR0aW5nICovCisJcmV0ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgWEdCRV9BQ1BJX0RNQV9GUkVRLCAmcHJvcGVydHkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gb2J0YWluICVzIHByb3BlcnR5XG4iLAorCQkJWEdCRV9BQ1BJX0RNQV9GUkVRKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcGRhdGEtPnN5c2Nsa19yYXRlID0gcHJvcGVydHk7CisKKwkvKiBPYnRhaW4gdGhlIFBUUCBjbG9jayBzZXR0aW5nICovCisJcmV0ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgWEdCRV9BQ1BJX1BUUF9GUkVRLCAmcHJvcGVydHkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gb2J0YWluICVzIHByb3BlcnR5XG4iLAorCQkJWEdCRV9BQ1BJX1BUUF9GUkVRKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcGRhdGEtPnB0cGNsa19yYXRlID0gcHJvcGVydHk7CisKKwkvKiBSZXRyaWV2ZSB0aGUgZGV2aWNlIGNhY2hlIGNvaGVyZW5jeSB2YWx1ZSAqLworCWhhbmRsZSA9IGFkZXYtPmhhbmRsZTsKKwlkbyB7CisJCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJfQ0NBIiwgTlVMTCwgJmRhdGEpOworCQlpZiAoIUFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCQljY2EgPSBkYXRhOworCQkJYnJlYWs7CisJCX0KKworCQlzdGF0dXMgPSBhY3BpX2dldF9wYXJlbnQoaGFuZGxlLCAmaGFuZGxlKTsKKwl9IHdoaWxlICghQUNQSV9GQUlMVVJFKHN0YXR1cykpOworCisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCWRldl9lcnIoZGV2LCAiZXJyb3Igb2J0YWluaW5nIGFjcGkgY29oZXJlbmN5IHZhbHVlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXBkYXRhLT5jb2hlcmVudCA9ICEhY2NhOworCisJcmV0dXJuIDA7Cit9CisjZWxzZSAgIC8qIENPTkZJR19BQ1BJICovCitzdGF0aWMgaW50IHhnYmVfYWNwaV9zdXBwb3J0KHN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKyNlbmRpZiAgLyogQ09ORklHX0FDUEkgKi8KKworI2lmZGVmIENPTkZJR19PRgorc3RhdGljIGludCB4Z2JlX29mX3N1cHBvcnQoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKnBkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBkYXRhLT5kZXY7CisKKwkvKiBPYnRhaW4gdGhlIHN5c3RlbSBjbG9jayBzZXR0aW5nICovCisJcGRhdGEtPnN5c2NsayA9IGRldm1fY2xrX2dldChkZXYsIFhHQkVfRE1BX0NMT0NLKTsKKwlpZiAoSVNfRVJSKHBkYXRhLT5zeXNjbGspKSB7CisJCWRldl9lcnIoZGV2LCAiZG1hIGRldm1fY2xrX2dldCBmYWlsZWRcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+c3lzY2xrKTsKKwl9CisJcGRhdGEtPnN5c2Nsa19yYXRlID0gY2xrX2dldF9yYXRlKHBkYXRhLT5zeXNjbGspOworCisJLyogT2J0YWluIHRoZSBQVFAgY2xvY2sgc2V0dGluZyAqLworCXBkYXRhLT5wdHBjbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBYR0JFX1BUUF9DTE9DSyk7CisJaWYgKElTX0VSUihwZGF0YS0+cHRwY2xrKSkgeworCQlkZXZfZXJyKGRldiwgInB0cCBkZXZtX2Nsa19nZXQgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocGRhdGEtPnB0cGNsayk7CisJfQorCXBkYXRhLT5wdHBjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShwZGF0YS0+cHRwY2xrKTsKKworCS8qIFJldHJpZXZlIHRoZSBkZXZpY2UgY2FjaGUgY29oZXJlbmN5IHZhbHVlICovCisJcGRhdGEtPmNvaGVyZW50ID0gb2ZfZG1hX2lzX2NvaGVyZW50KGRldi0+b2Zfbm9kZSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlICAgLyogQ09ORklHX09GICovCitzdGF0aWMgaW50IHhnYmVfb2Zfc3VwcG9ydChzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisjZW5kaWYgIC8qQ09ORklHX09GICovCisKIHN0YXRpYyBpbnQgeGdiZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YTsKQEAgLTE2OSw3ICsyNjMsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQljb25zdCB1OCAqbWFjX2FkZHI7CisJY29uc3QgY2hhciAqcGh5X21vZGU7CiAJdW5zaWduZWQgaW50IGk7CiAJaW50IHJldDsKIApAQCAtMTg2LDYgKzI4MCw3IEBACiAJcGRhdGEgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXBkYXRhLT5uZXRkZXYgPSBuZXRkZXY7CiAJcGRhdGEtPnBkZXYgPSBwZGV2OworCXBkYXRhLT5hZGV2ID0gQUNQSV9DT01QQU5JT04oZGV2KTsKIAlwZGF0YS0+ZGV2ID0gZGV2OwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5ldGRldik7CiAKQEAgLTE5NCw2ICsyODksOSBAQAogCW11dGV4X2luaXQoJnBkYXRhLT5yc3NfbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZwZGF0YS0+dHN0YW1wX2xvY2spOwogCisJLyogQ2hlY2sgaWYgd2Ugc2hvdWxkIHVzZSBBQ1BJIG9yIERUICovCisJcGRhdGEtPnVzZV9hY3BpID0gKCFwZGF0YS0+YWRldiB8fCBhY3BpX2Rpc2FibGVkKSA/IDAgOiAxOworCiAJLyogU2V0IGFuZCB2YWxpZGF0ZSB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGZvciBhIHJpbmcgKi8KIAlCVUlMRF9CVUdfT05fTk9UX1BPV0VSX09GXzIoWEdCRV9UWF9ERVNDX0NOVCk7CiAJcGRhdGEtPnR4X2Rlc2NfY291bnQgPSBYR0JFX1RYX0RFU0NfQ05UOwpAQCAtMjEyLDIyICszMTAsNiBAQAogCQlnb3RvIGVycl9pbzsKIAl9CiAKLQkvKiBPYnRhaW4gdGhlIHN5c3RlbSBjbG9jayBzZXR0aW5nICovCi0JcGRhdGEtPnN5c2NsayA9IGRldm1fY2xrX2dldChkZXYsIFhHQkVfRE1BX0NMT0NLKTsKLQlpZiAoSVNfRVJSKHBkYXRhLT5zeXNjbGspKSB7Ci0JCWRldl9lcnIoZGV2LCAiZG1hIGRldm1fY2xrX2dldCBmYWlsZWRcbiIpOwotCQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5zeXNjbGspOwotCQlnb3RvIGVycl9pbzsKLQl9Ci0KLQkvKiBPYnRhaW4gdGhlIFBUUCBjbG9jayBzZXR0aW5nICovCi0JcGRhdGEtPnB0cGNsayA9IGRldm1fY2xrX2dldChkZXYsIFhHQkVfUFRQX0NMT0NLKTsKLQlpZiAoSVNfRVJSKHBkYXRhLT5wdHBjbGspKSB7Ci0JCWRldl9lcnIoZGV2LCAicHRwIGRldm1fY2xrX2dldCBmYWlsZWRcbiIpOwotCQlyZXQgPSBQVFJfRVJSKHBkYXRhLT5wdHBjbGspOwotCQlnb3RvIGVycl9pbzsKLQl9Ci0KIAkvKiBPYnRhaW4gdGhlIG1taW8gYXJlYXMgZm9yIHRoZSBkZXZpY2UgKi8KIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCXBkYXRhLT54Z21hY19yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKQEAgLTI0NywxNiArMzI5LDQyIEBACiAJfQogCURCR1BSKCIgIHhwY3NfcmVncyAgPSAlcFxuIiwgcGRhdGEtPnhwY3NfcmVncyk7CiAKLQkvKiBTZXQgdGhlIERNQSBtYXNrICovCi0JaWYgKCFkZXYtPmRtYV9tYXNrKQotCQlkZXYtPmRtYV9tYXNrID0gJmRldi0+Y29oZXJlbnRfZG1hX21hc2s7Ci0JcmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYsIERNQV9CSVRfTUFTSyg0MCkpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICJkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50IGZhaWxlZFxuIik7CisJLyogUmV0cmlldmUgdGhlIE1BQyBhZGRyZXNzICovCisJcmV0ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfdThfYXJyYXkoZGV2LCBYR0JFX01BQ19BRERSX1BST1BFUlRZLAorCQkJCQkgICAgcGRhdGEtPm1hY19hZGRyLAorCQkJCQkgICAgc2l6ZW9mKHBkYXRhLT5tYWNfYWRkcikpOworCWlmIChyZXQgfHwgIWlzX3ZhbGlkX2V0aGVyX2FkZHIocGRhdGEtPm1hY19hZGRyKSkgeworCQlkZXZfZXJyKGRldiwgImludmFsaWQgJXMgcHJvcGVydHlcbiIsIFhHQkVfTUFDX0FERFJfUFJPUEVSVFkpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX2lvOwogCX0KIAotCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LT5vZl9ub2RlLCAiZG1hLWNvaGVyZW50IikpIHsKKwkvKiBSZXRyaWV2ZSB0aGUgUEhZIG1vZGUgLSBpdCBtdXN0IGJlICJ4Z21paSIgKi8KKwlyZXQgPSBkZXZpY2VfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LCBYR0JFX1BIWV9NT0RFX1BST1BFUlRZLAorCQkJCQkgICZwaHlfbW9kZSk7CisJaWYgKHJldCB8fCBzdHJjbXAocGh5X21vZGUsIHBoeV9tb2RlcyhQSFlfSU5URVJGQUNFX01PREVfWEdNSUkpKSkgeworCQlkZXZfZXJyKGRldiwgImludmFsaWQgJXMgcHJvcGVydHlcbiIsIFhHQkVfUEhZX01PREVfUFJPUEVSVFkpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2lvOworCX0KKwlwZGF0YS0+cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfWEdNSUk7CisKKwkvKiBDaGVjayBmb3IgcGVyIGNoYW5uZWwgaW50ZXJydXB0IHN1cHBvcnQgKi8KKwlpZiAoZGV2aWNlX3Byb3BlcnR5X3ByZXNlbnQoZGV2LCBYR0JFX0RNQV9JUlFTX1BST1BFUlRZKSkKKwkJcGRhdGEtPnBlcl9jaGFubmVsX2lycSA9IDE7CisKKwkvKiBPYnRhaW4gZGV2aWNlIHNldHRpbmdzIHVuaXF1ZSB0byBBQ1BJL09GICovCisJaWYgKHBkYXRhLT51c2VfYWNwaSkKKwkJcmV0ID0geGdiZV9hY3BpX3N1cHBvcnQocGRhdGEpOworCWVsc2UKKwkJcmV0ID0geGdiZV9vZl9zdXBwb3J0KHBkYXRhKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9pbzsKKworCS8qIFNldCB0aGUgRE1BIGNvaGVyZW5jeSB2YWx1ZXMgKi8KKwlpZiAocGRhdGEtPmNvaGVyZW50KSB7CiAJCXBkYXRhLT5heGRvbWFpbiA9IFhHQkVfRE1BX09TX0FYRE9NQUlOOwogCQlwZGF0YS0+YXJjYWNoZSA9IFhHQkVfRE1BX09TX0FSQ0FDSEU7CiAJCXBkYXRhLT5hd2NhY2hlID0gWEdCRV9ETUFfT1NfQVdDQUNIRTsKQEAgLTI2NiwxMCArMzc0LDE2IEBACiAJCXBkYXRhLT5hd2NhY2hlID0gWEdCRV9ETUFfU1lTX0FXQ0FDSEU7CiAJfQogCi0JLyogQ2hlY2sgZm9yIHBlciBjaGFubmVsIGludGVycnVwdCBzdXBwb3J0ICovCi0JaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChkZXYtPm9mX25vZGUsIFhHQkVfRE1BX0lSUVMpKQotCQlwZGF0YS0+cGVyX2NoYW5uZWxfaXJxID0gMTsKKwkvKiBTZXQgdGhlIERNQSBtYXNrICovCisJaWYgKCFkZXYtPmRtYV9tYXNrKQorCQlkZXYtPmRtYV9tYXNrID0gJmRldi0+Y29oZXJlbnRfZG1hX21hc2s7CisJcmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChkZXYsIERNQV9CSVRfTUFTSyg0MCkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyX2lvOworCX0KIAorCS8qIEdldCB0aGUgZGV2aWNlIGludGVycnVwdCAqLwogCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2X2VycihkZXYsICJwbGF0Zm9ybV9nZXRfaXJxIDAgZmFpbGVkXG4iKTsKQEAgLTI3OSw2ICszOTMsNyBAQAogCiAJbmV0ZGV2LT5pcnEgPSBwZGF0YS0+ZGV2X2lycTsKIAluZXRkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKXBkYXRhLT54Z21hY19yZWdzOworCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBwZGF0YS0+bWFjX2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwogCiAJLyogU2V0IGFsbCB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgKi8KIAl4Z2JlX2luaXRfYWxsX2ZwdHJzKHBkYXRhKTsKQEAgLTI5MSwyMyArNDA2LDYgQEAKIAkvKiBQb3B1bGF0ZSB0aGUgaGFyZHdhcmUgZmVhdHVyZXMgKi8KIAl4Z2JlX2dldF9hbGxfaHdfZmVhdHVyZXMocGRhdGEpOwogCi0JLyogUmV0cmlldmUgdGhlIE1BQyBhZGRyZXNzICovCi0JbWFjX2FkZHIgPSBvZl9nZXRfbWFjX2FkZHJlc3MoZGV2LT5vZl9ub2RlKTsKLQlpZiAoIW1hY19hZGRyKSB7Ci0JCWRldl9lcnIoZGV2LCAiaW52YWxpZCBtYWMgYWRkcmVzcyBmb3IgdGhpcyBkZXZpY2VcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9pbzsKLQl9Ci0JbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIG1hY19hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKLQotCS8qIFJldHJpZXZlIHRoZSBQSFkgbW9kZSAtIGl0IG11c3QgYmUgInhnbWlpIiAqLwotCXBkYXRhLT5waHlfbW9kZSA9IG9mX2dldF9waHlfbW9kZShkZXYtPm9mX25vZGUpOwotCWlmIChwZGF0YS0+cGh5X21vZGUgIT0gUEhZX0lOVEVSRkFDRV9NT0RFX1hHTUlJKSB7Ci0JCWRldl9lcnIoZGV2LCAiaW52YWxpZCBwaHktbW9kZSBzcGVjaWZpZWQgZm9yIHRoaXMgZGV2aWNlXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJfaW87Ci0JfQotCiAJLyogU2V0IGRlZmF1bHQgY29uZmlndXJhdGlvbiBkYXRhICovCiAJeGdiZV9kZWZhdWx0X2NvbmZpZyhwZGF0YSk7CiAKQEAgLTQ5MSwxOCArNTg5LDM1IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKKyNpZmRlZiBDT05GSUdfQUNQSQorc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCB4Z2JlX2FjcGlfbWF0Y2hbXSA9IHsKKwl7ICJBTURJODAwMSIsIDAgfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgeGdiZV9hY3BpX21hdGNoKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX09GCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4Z2JlX29mX21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJhbWQseGdiZS1zZWF0dGxlLXYxYSIsIH0sCiAJe30sCiB9OwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4Z2JlX29mX21hdGNoKTsKKyNlbmRpZgorCiBzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMoeGdiZV9wbV9vcHMsIHhnYmVfc3VzcGVuZCwgeGdiZV9yZXN1bWUpOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB4Z2JlX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJhbWQteGdiZSIsCisjaWZkZWYgQ09ORklHX0FDUEkKKwkJLmFjcGlfbWF0Y2hfdGFibGUgPSB4Z2JlX2FjcGlfbWF0Y2gsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfT0YKIAkJLm9mX21hdGNoX3RhYmxlID0geGdiZV9vZl9tYXRjaCwKKyNlbmRpZgogCQkucG0gPSAmeGdiZV9wbV9vcHMsCiAJfSwKIAkucHJvYmUgPSB4Z2JlX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1tZGlvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLW1kaW8uYwppbmRleCAzNjNiMjEwLi41OWUyNjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLW1kaW8uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLW1kaW8uYwpAQCAtMjA1LDI1ICsyMDUsMTYgQEAKIAogaW50IHhnYmVfbWRpb19yZWdpc3RlcihzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpCiB7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpwaHlfbm9kZTsKIAlzdHJ1Y3QgbWlpX2J1cyAqbWlpOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiAJaW50IHJldCA9IDA7CiAKIAlEQkdQUigiLS0+eGdiZV9tZGlvX3JlZ2lzdGVyXG4iKTsKIAotCS8qIFJldHJpZXZlIHRoZSBwaHktaGFuZGxlICovCi0JcGh5X25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKHBkYXRhLT5kZXYtPm9mX25vZGUsICJwaHktaGFuZGxlIiwgMCk7Ci0JaWYgKCFwaHlfbm9kZSkgewotCQlkZXZfZXJyKHBkYXRhLT5kZXYsICJ1bmFibGUgdG8gcGFyc2UgcGh5LWhhbmRsZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCW1paSA9IG1kaW9idXNfYWxsb2MoKTsKLQlpZiAobWlpID09IE5VTEwpIHsKKwlpZiAoIW1paSkgewogCQlkZXZfZXJyKHBkYXRhLT5kZXYsICJtZGlvYnVzX2FsbG9jIGZhaWxlZFxuIik7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX25vZGVfZ2V0OworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBSZWdpc3RlciBvbiB0aGUgTURJTyBidXMgKGRvbid0IHByb2JlIGFueSBQSFlzKSAqLwpAQCAtMjUyLDE4ICsyNDMsMTkgQEAKIAlyZXF1ZXN0X21vZHVsZShNRElPX01PRFVMRV9QUkVGSVggTURJT19JRF9GTVQsCiAJCSAgICAgICBNRElPX0lEX0FSR1MocGh5ZGV2LT5jNDVfaWRzLmRldmljZV9pZHNbTURJT19NTURfUENTXSkpOwogCi0Jb2Zfbm9kZV9nZXQocGh5X25vZGUpOwotCXBoeWRldi0+ZGV2Lm9mX25vZGUgPSBwaHlfbm9kZTsKIAlyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeWRldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKHBkYXRhLT5kZXYsICJwaHlfZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxuIik7Ci0JCW9mX25vZGVfcHV0KHBoeV9ub2RlKTsKKwkJZ290byBlcnJfcGh5X2RldmljZTsKKwl9CisJaWYgKCFwaHlkZXYtPmRldi5kcml2ZXIpIHsKKwkJZGV2X2VycihwZGF0YS0+ZGV2LCAicGh5IGRyaXZlciBwcm9iZSBmYWlsZWRcbiIpOworCQlyZXQgPSAtRUlPOwogCQlnb3RvIGVycl9waHlfZGV2aWNlOwogCX0KIAogCS8qIEFkZCBhIHJlZmVyZW5jZSB0byB0aGUgUEhZIGRyaXZlciBzbyBpdCBjYW4ndCBiZSB1bmxvYWRlZCAqLwotCXBkYXRhLT5waHlfbW9kdWxlID0gcGh5ZGV2LT5kZXYuZHJpdmVyID8KLQkJCSAgICBwaHlkZXYtPmRldi5kcml2ZXItPm93bmVyIDogTlVMTDsKKwlwZGF0YS0+cGh5X21vZHVsZSA9IHBoeWRldi0+ZGV2LmRyaXZlci0+b3duZXI7CiAJaWYgKCF0cnlfbW9kdWxlX2dldChwZGF0YS0+cGh5X21vZHVsZSkpIHsKIAkJZGV2X2VycihwZGF0YS0+ZGV2LCAidHJ5X21vZHVsZV9nZXQgZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVJTzsKQEAgLTI4Myw4ICsyNzUsNiBAQAogCiAJcGRhdGEtPnBoeWRldiA9IHBoeWRldjsKIAotCW9mX25vZGVfcHV0KHBoeV9ub2RlKTsKLQogCURCR1BIWV9SRUdTKHBkYXRhKTsKIAogCURCR1BSKCI8LS14Z2JlX21kaW9fcmVnaXN0ZXJcbiIpOwpAQCAtMzAwLDkgKzI5MCw2IEBACiBlcnJfbWRpb2J1c19hbGxvYzoKIAltZGlvYnVzX2ZyZWUobWlpKTsKIAotZXJyX25vZGVfZ2V0OgotCW9mX25vZGVfcHV0KHBoeV9ub2RlKTsKLQogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXB0cC5jCmluZGV4IGExYmY5ZDFjLi5mMzI2MTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXB0cC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcHRwLmMKQEAgLTE3MSwxNSArMTcxLDkgQEAKIAkJCQkJCSAgIHN0cnVjdCB4Z2JlX3Bydl9kYXRhLAogCQkJCQkJICAgcHRwX2Nsb2NrX2luZm8pOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTY0IG5zZWM7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPnRzdGFtcF9sb2NrLCBmbGFncyk7Ci0KLQluc2VjID0gdGltZWNvdW50ZXJfcmVhZCgmcGRhdGEtPnRzdGFtcF90Yyk7Ci0KLQluc2VjICs9IGRlbHRhOwotCXRpbWVjb3VudGVyX2luaXQoJnBkYXRhLT50c3RhbXBfdGMsICZwZGF0YS0+dHN0YW1wX2NjLCBuc2VjKTsKLQorCXRpbWVjb3VudGVyX2FkanRpbWUoJnBkYXRhLT50c3RhbXBfdGMsIGRlbHRhKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwZGF0YS0+dHN0YW1wX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtMjM5LDcgKzIzMyw3IEBACiAJc25wcmludGYoaW5mby0+bmFtZSwgc2l6ZW9mKGluZm8tPm5hbWUpLCAiJXMiLAogCQkgbmV0ZGV2X25hbWUocGRhdGEtPm5ldGRldikpOwogCWluZm8tPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JaW5mby0+bWF4X2FkaiA9IGNsa19nZXRfcmF0ZShwZGF0YS0+cHRwY2xrKTsKKwlpbmZvLT5tYXhfYWRqID0gcGRhdGEtPnB0cGNsa19yYXRlOwogCWluZm8tPmFkamZyZXEgPSB4Z2JlX2FkamZyZXE7CiAJaW5mby0+YWRqdGltZSA9IHhnYmVfYWRqdGltZTsKIAlpbmZvLT5nZXR0aW1lID0geGdiZV9nZXR0aW1lOwpAQCAtMjYwLDcgKzI1NCw3IEBACiAJICovCiAJZGl2aWRlbmQgPSA1MDAwMDAwMDsKIAlkaXZpZGVuZCA8PD0gMzI7Ci0JcGRhdGEtPnRzdGFtcF9hZGRlbmQgPSBkaXZfdTY0KGRpdmlkZW5kLCBjbGtfZ2V0X3JhdGUocGRhdGEtPnB0cGNsaykpOworCXBkYXRhLT50c3RhbXBfYWRkZW5kID0gZGl2X3U2NChkaXZpZGVuZCwgcGRhdGEtPnB0cGNsa19yYXRlKTsKIAogCS8qIFNldHVwIHRoZSB0aW1lY291bnRlciAqLwogCWNjLT5yZWFkID0geGdiZV9jY19yZWFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS5oCmluZGV4IGY5ZWM3NjIuLjEzZThmOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLmgKQEAgLTEyNCw3ICsxMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9wdHBfY2xvY2tfa2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lY291bnRlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldF90c3RhbXAuaD4KICNpbmNsdWRlIDxuZXQvZGNibmwuaD4KIApAQCAtMTgyLDEwICsxODIsMTggQEAKICNkZWZpbmUgWEdCRV9QSFlfTkFNRQkJImFtZF94Z2JlX3BoeSIKICNkZWZpbmUgWEdCRV9QUlRBRAkJMAogCisvKiBDb21tb24gcHJvcGVydHkgbmFtZXMgKi8KKyNkZWZpbmUgWEdCRV9NQUNfQUREUl9QUk9QRVJUWQkibWFjLWFkZHJlc3MiCisjZGVmaW5lIFhHQkVfUEhZX01PREVfUFJPUEVSVFkJInBoeS1tb2RlIgorI2RlZmluZSBYR0JFX0RNQV9JUlFTX1BST1BFUlRZCSJhbWQscGVyLWNoYW5uZWwtaW50ZXJydXB0IgorCiAvKiBEZXZpY2UtdHJlZSBjbG9jayBuYW1lcyAqLwogI2RlZmluZSBYR0JFX0RNQV9DTE9DSwkJImRtYV9jbGsiCiAjZGVmaW5lIFhHQkVfUFRQX0NMT0NLCQkicHRwX2NsayIKLSNkZWZpbmUgWEdCRV9ETUFfSVJRUwkJImFtZCxwZXItY2hhbm5lbC1pbnRlcnJ1cHQiCisKKy8qIEFDUEkgcHJvcGVydHkgbmFtZXMgKi8KKyNkZWZpbmUgWEdCRV9BQ1BJX0RNQV9GUkVRCSJhbWQsZG1hLWZyZXEiCisjZGVmaW5lIFhHQkVfQUNQSV9QVFBfRlJFUQkiYW1kLHB0cC1mcmVxIgogCiAvKiBUaW1lc3RhbXAgc3VwcG9ydCAtIHZhbHVlcyBiYXNlZCBvbiA1ME1IeiBQVFAgY2xvY2sKICAqICAgNTBNSHogPT4gMjAgbnNlYwpAQCAtMzYxLDggKzM2OSw3IEBACiAJICogIGN1ciAgIC0gVHg6IGluZGV4IG9mIGRlc2NyaXB0b3IgdG8gYmUgdXNlZCBmb3IgY3VycmVudCB0cmFuc2ZlcgogCSAqICAgICAgICAgIFJ4OiBpbmRleCBvZiBkZXNjcmlwdG9yIHRvIGNoZWNrIGZvciBwYWNrZXQgYXZhaWxhYmlsaXR5CiAJICogIGRpcnR5IC0gVHg6IGluZGV4IG9mIGRlc2NyaXB0b3IgdG8gY2hlY2sgZm9yIHRyYW5zZmVyIGNvbXBsZXRlCi0JICogICAgICAgICAgUng6IGNvdW50IG9mIGRlc2NyaXB0b3JzIGluIHdoaWNoIGEgcGFja2V0IGhhcyBiZWVuIHJlY2VpdmVkCi0JICogICAgICAgICAgICAgICh1c2VkIHdpdGggc2tiX3JlYWxsb2NfaW5kZXggdG8gcmVmcmVzaCB0aGUgcmluZykKKwkgKiAgICAgICAgICBSeDogaW5kZXggb2YgZGVzY3JpcHRvciB0byBjaGVjayBmb3IgYnVmZmVyIHJlYWxsb2NhdGlvbgogCSAqLwogCXVuc2lnbmVkIGludCBjdXI7CiAJdW5zaWduZWQgaW50IGRpcnR5OwpAQCAtMzc3LDExICszODQsNiBAQAogCQkJdW5zaWduZWQgc2hvcnQgY3VyX21zczsKIAkJCXVuc2lnbmVkIHNob3J0IGN1cl92bGFuX2N0YWc7CiAJCX0gdHg7Ci0KLQkJc3RydWN0IHsKLQkJCXVuc2lnbmVkIGludCByZWFsbG9jX2luZGV4OwotCQkJdW5zaWduZWQgaW50IHJlYWxsb2NfdGhyZXNob2xkOwotCQl9IHJ4OwogCX07CiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIApAQCAtNTk2LDcgKzU5OCw4IEBACiAJaW50ICgqYWxsb2NfcmluZ19yZXNvdXJjZXMpKHN0cnVjdCB4Z2JlX3Bydl9kYXRhICopOwogCXZvaWQgKCpmcmVlX3JpbmdfcmVzb3VyY2VzKShzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqKTsKIAlpbnQgKCptYXBfdHhfc2tiKShzdHJ1Y3QgeGdiZV9jaGFubmVsICosIHN0cnVjdCBza19idWZmICopOwotCXZvaWQgKCpyZWFsbG9jX3J4X2J1ZmZlcikoc3RydWN0IHhnYmVfY2hhbm5lbCAqKTsKKwlpbnQgKCptYXBfcnhfYnVmZmVyKShzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqLCBzdHJ1Y3QgeGdiZV9yaW5nICosCisJCQkgICAgIHN0cnVjdCB4Z2JlX3JpbmdfZGF0YSAqKTsKIAl2b2lkICgqdW5tYXBfcmRhdGEpKHN0cnVjdCB4Z2JlX3Bydl9kYXRhICosIHN0cnVjdCB4Z2JlX3JpbmdfZGF0YSAqKTsKIAl2b2lkICgqd3JhcHBlcl90eF9kZXNjX2luaXQpKHN0cnVjdCB4Z2JlX3Bydl9kYXRhICopOwogCXZvaWQgKCp3cmFwcGVyX3J4X2Rlc2NfaW5pdCkoc3RydWN0IHhnYmVfcHJ2X2RhdGEgKik7CkBAIC02NTAsOCArNjUzLDEyIEBACiBzdHJ1Y3QgeGdiZV9wcnZfZGF0YSB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBhY3BpX2RldmljZSAqYWRldjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKKwkvKiBBQ1BJIG9yIERUIGZsYWcgKi8KKwl1bnNpZ25lZCBpbnQgdXNlX2FjcGk7CisKIAkvKiBYR01BQy9YUENTIHJlbGF0ZWQgbW1pbyByZWdpc3RlcnMgKi8KIAl2b2lkIF9faW9tZW0gKnhnbWFjX3JlZ3M7CS8qIFhHTUFDIENTUnMgKi8KIAl2b2lkIF9faW9tZW0gKnhwY3NfcmVnczsJLyogWFBDUyBNTUQgcmVnaXN0ZXJzICovCkBAIC02NzIsNiArNjc5LDcgQEAKIAlzdHJ1Y3QgeGdiZV9kZXNjX2lmIGRlc2NfaWY7CiAKIAkvKiBBWEkgRE1BIHNldHRpbmdzICovCisJdW5zaWduZWQgaW50IGNvaGVyZW50OwogCXVuc2lnbmVkIGludCBheGRvbWFpbjsKIAl1bnNpZ25lZCBpbnQgYXJjYWNoZTsKIAl1bnNpZ25lZCBpbnQgYXdjYWNoZTsKQEAgLTczOSw2ICs3NDcsNyBAQAogCXVuc2lnbmVkIGludCBwaHlfcnhfcGF1c2U7CiAKIAkvKiBOZXRkZXYgcmVsYXRlZCBzZXR0aW5ncyAqLworCXVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbRVRIX0FMRU5dOwogCW5ldGRldl9mZWF0dXJlc190IG5ldGRldl9mZWF0dXJlczsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAlzdHJ1Y3QgeGdiZV9tbWNfc3RhdHMgbW1jX3N0YXRzOwpAQCAtNzQ4LDcgKzc1Nyw5IEBACiAKIAkvKiBEZXZpY2UgY2xvY2tzICovCiAJc3RydWN0IGNsayAqc3lzY2xrOworCXVuc2lnbmVkIGxvbmcgc3lzY2xrX3JhdGU7CiAJc3RydWN0IGNsayAqcHRwY2xrOworCXVuc2lnbmVkIGxvbmcgcHRwY2xrX3JhdGU7CiAKIAkvKiBUaW1lc3RhbXAgc3VwcG9ydCAqLwogCXNwaW5sb2NrX3QgdHN0YW1wX2xvY2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfaHcuYwppbmRleCA3YmE4M2ZmLi44NjlkOTdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X2h3LmMKQEAgLTU5MywxMCArNTkzLDEyIEBACiAJaWYgKCF4Z2VuZV9yaW5nX21ncl9pbml0KHBkYXRhKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbGtfcHJlcGFyZV9lbmFibGUocGRhdGEtPmNsayk7Ci0JY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBkYXRhLT5jbGspOwotCWNsa19wcmVwYXJlX2VuYWJsZShwZGF0YS0+Y2xrKTsKLQl4Z2VuZV9lbmV0X2VjY19pbml0KHBkYXRhKTsKKwlpZiAoIWVmaV9lbmFibGVkKEVGSV9CT09UKSkgeworCQljbGtfcHJlcGFyZV9lbmFibGUocGRhdGEtPmNsayk7CisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShwZGF0YS0+Y2xrKTsKKwkJY2xrX3ByZXBhcmVfZW5hYmxlKHBkYXRhLT5jbGspOworCQl4Z2VuZV9lbmV0X2VjY19pbml0KHBkYXRhKTsKKwl9CiAJeGdlbmVfZW5ldF9jb25maWdfcmluZ19pZl9hc3NvYyhwZGF0YSk7CiAKIAkvKiBFbmFibGUgYXV0by1pbmNyIGZvciBzY2FubmluZyAqLwpAQCAtNjYzLDE1ICs2NjUsMjAgQEAKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5X2RldjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRhdGEtPnBkZXYtPmRldjsKIAotCXBoeV9ucCA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAicGh5LWhhbmRsZSIsIDApOwotCWlmICghcGh5X25wKSB7Ci0JCW5ldGRldl9kYmcobmRldiwgIk5vIHBoeS1oYW5kbGUgZm91bmRcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoZGV2LT5vZl9ub2RlKSB7CisJCXBoeV9ucCA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAicGh5LWhhbmRsZSIsIDApOworCQlpZiAoIXBoeV9ucCkgeworCQkJbmV0ZGV2X2RiZyhuZGV2LCAiTm8gcGh5LWhhbmRsZSBmb3VuZCBpbiBEVFxuIik7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlwZGF0YS0+cGh5X2RldiA9IG9mX3BoeV9maW5kX2RldmljZShwaHlfbnApOwogCX0KIAotCXBoeV9kZXYgPSBvZl9waHlfY29ubmVjdChuZGV2LCBwaHlfbnAsICZ4Z2VuZV9lbmV0X2FkanVzdF9saW5rLAotCQkJCSAwLCBwZGF0YS0+cGh5X21vZGUpOwotCWlmICghcGh5X2RldikgeworCXBoeV9kZXYgPSBwZGF0YS0+cGh5X2RldjsKKworCWlmICghcGh5X2RldiB8fAorCSAgICBwaHlfY29ubmVjdF9kaXJlY3QobmRldiwgcGh5X2RldiwgJnhnZW5lX2VuZXRfYWRqdXN0X2xpbmssCisJCQkgICAgICAgcGRhdGEtPnBoeV9tb2RlKSkgewogCQluZXRkZXZfZXJyKG5kZXYsICJDb3VsZCBub3QgY29ubmVjdCB0byBQSFlcbiIpOwogCQlyZXR1cm4gIC1FTk9ERVY7CiAJfQpAQCAtNjgxLDMyICs2ODgsNzEgQEAKIAkJCSAgICAgIH5TVVBQT1JURURfMTAwYmFzZVRfSGFsZiAmCiAJCQkgICAgICB+U1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmOwogCXBoeV9kZXYtPmFkdmVydGlzaW5nID0gcGh5X2Rldi0+c3VwcG9ydGVkOwotCXBkYXRhLT5waHlfZGV2ID0gcGh5X2RldjsKIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHhnZW5lX21kaW9idXNfcmVnaXN0ZXIoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhLAorCQkJCSAgc3RydWN0IG1paV9idXMgKm1kaW8pCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkYXRhLT5wZGV2LT5kZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwZGF0YS0+bmRldjsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGRfbnA7CisJc3RydWN0IGRldmljZV9ub2RlICptZGlvX25wID0gTlVMTDsKKwlpbnQgcmV0OworCXUzMiBwaHlfaWQ7CisKKwlpZiAoZGV2LT5vZl9ub2RlKSB7CisJCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoZGV2LT5vZl9ub2RlLCBjaGlsZF9ucCkgeworCQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGNoaWxkX25wLAorCQkJCQkJICAgICJhcG0seGdlbmUtbWRpbyIpKSB7CisJCQkJbWRpb19ucCA9IGNoaWxkX25wOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFtZGlvX25wKSB7CisJCQluZXRkZXZfZGJnKG5kZXYsICJObyBtZGlvIG5vZGUgaW4gdGhlIGR0c1xuIik7CisJCQlyZXR1cm4gLUVOWElPOworCQl9CisKKwkJcmV0dXJuIG9mX21kaW9idXNfcmVnaXN0ZXIobWRpbywgbWRpb19ucCk7CisJfQorCisJLyogTWFzayBvdXQgYWxsIFBIWXMgZnJvbSBhdXRvIHByb2JpbmcuICovCisJbWRpby0+cGh5X21hc2sgPSB+MDsKKworCS8qIFJlZ2lzdGVyIHRoZSBNRElPIGJ1cyAqLworCXJldCA9IG1kaW9idXNfcmVnaXN0ZXIobWRpbyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICJwaHktY2hhbm5lbCIsICZwaHlfaWQpOworCWlmIChyZXQpCisJCXJldCA9IGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsICJwaHktYWRkciIsICZwaHlfaWQpOworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJcGh5ID0gZ2V0X3BoeV9kZXZpY2UobWRpbywgcGh5X2lkLCB0cnVlKTsKKwlpZiAoIXBoeSB8fCBJU19FUlIocGh5KSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7CisJaWYgKHJldCkKKwkJcGh5X2RldmljZV9mcmVlKHBoeSk7CisJZWxzZQorCQlwZGF0YS0+cGh5X2RldiA9IHBoeTsKKworCXJldHVybiByZXQ7Cit9CisKIGludCB4Z2VuZV9lbmV0X21kaW9fY29uZmlnKHN0cnVjdCB4Z2VuZV9lbmV0X3BkYXRhICpwZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBkYXRhLT5uZGV2OwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGF0YS0+cGRldi0+ZGV2OwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGRfbnA7Ci0Jc3RydWN0IGRldmljZV9ub2RlICptZGlvX25wID0gTlVMTDsKIAlzdHJ1Y3QgbWlpX2J1cyAqbWRpb19idXM7CiAJaW50IHJldDsKIAotCWZvcl9lYWNoX2NoaWxkX29mX25vZGUoZGV2LT5vZl9ub2RlLCBjaGlsZF9ucCkgewotCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY2hpbGRfbnAsICJhcG0seGdlbmUtbWRpbyIpKSB7Ci0JCQltZGlvX25wID0gY2hpbGRfbnA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghbWRpb19ucCkgewotCQluZXRkZXZfZGJnKG5kZXYsICJObyBtZGlvIG5vZGUgaW4gdGhlIGR0c1xuIik7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQotCiAJbWRpb19idXMgPSBtZGlvYnVzX2FsbG9jKCk7CiAJaWYgKCFtZGlvX2J1cykKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC03MjAsNyArNzY2LDcgQEAKIAltZGlvX2J1cy0+cHJpdiA9IHBkYXRhOwogCW1kaW9fYnVzLT5wYXJlbnQgPSAmbmRldi0+ZGV2OwogCi0JcmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihtZGlvX2J1cywgbWRpb19ucCk7CisJcmV0ID0geGdlbmVfbWRpb2J1c19yZWdpc3RlcihwZGF0YSwgbWRpb19idXMpOwogCWlmIChyZXQpIHsKIAkJbmV0ZGV2X2VycihuZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIE1ESU8gYnVzXG4iKTsKIAkJbWRpb2J1c19mcmVlKG1kaW9fYnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uYwppbmRleCA4M2E1MDI4Li40NGIxNTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5jCkBAIC0yNCw2ICsyNCwxMCBAQAogI2luY2x1ZGUgInhnZW5lX2VuZXRfc2dtYWMuaCIKICNpbmNsdWRlICJ4Z2VuZV9lbmV0X3hnbWFjLmgiCiAKKyNkZWZpbmUgUkVTX0VORVRfQ1NSCTAKKyNkZWZpbmUgUkVTX1JJTkdfQ1NSCTEKKyNkZWZpbmUgUkVTX1JJTkdfQ01ECTIKKwogc3RhdGljIHZvaWQgeGdlbmVfZW5ldF9pbml0X2J1ZnBvb2woc3RydWN0IHhnZW5lX2VuZXRfZGVzY19yaW5nICpidWZfcG9vbCkKIHsKIAlzdHJ1Y3QgeGdlbmVfZW5ldF9yYXdfZGVzYzE2ICpyYXdfZGVzYzsKQEAgLTM2OSw2ICszNzMsOCBAQAogCQlpZiAodW5saWtlbHkoeGdlbmVfZW5ldF9pc19kZXNjX3Nsb3RfZW1wdHkocmF3X2Rlc2MpKSkKIAkJCWJyZWFrOwogCisJCS8qIHJlYWQgZnBxbnVtIGZpZWxkIGFmdGVyIGRhdGFhZGRyIGZpZWxkICovCisJCWRtYV9ybWIoKTsKIAkJaWYgKGlzX3J4X2Rlc2MocmF3X2Rlc2MpKQogCQkJcmV0ID0geGdlbmVfZW5ldF9yeF9mcmFtZShyaW5nLCByYXdfZGVzYyk7CiAJCWVsc2UKQEAgLTc0Niw2ICs3NTIsNDEgQEAKIAkubmRvX3NldF9tYWNfYWRkcmVzcyA9IHhnZW5lX2VuZXRfc2V0X21hY19hZGRyZXNzLAogfTsKIAorc3RhdGljIGludCB4Z2VuZV9nZXRfbWFjX2FkZHJlc3Moc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCWludCByZXQ7CisKKwlyZXQgPSBkZXZpY2VfcHJvcGVydHlfcmVhZF91OF9hcnJheShkZXYsICJsb2NhbC1tYWMtYWRkcmVzcyIsIGFkZHIsIDYpOworCWlmIChyZXQpCisJCXJldCA9IGRldmljZV9wcm9wZXJ0eV9yZWFkX3U4X2FycmF5KGRldiwgIm1hYy1hZGRyZXNzIiwKKwkJCQkJCSAgICBhZGRyLCA2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBFVEhfQUxFTjsKK30KKworc3RhdGljIGludCB4Z2VuZV9nZXRfcGh5X21vZGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCBpLCByZXQ7CisJY2hhciAqbW9kZXN0cjsKKworCXJldCA9IGRldmljZV9wcm9wZXJ0eV9yZWFkX3N0cmluZyhkZXYsICJwaHktY29ubmVjdGlvbi10eXBlIiwKKwkJCQkJICAoY29uc3QgY2hhciAqKikmbW9kZXN0cik7CisJaWYgKHJldCkKKwkJcmV0ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfc3RyaW5nKGRldiwgInBoeS1tb2RlIiwKKwkJCQkJCSAgKGNvbnN0IGNoYXIgKiopJm1vZGVzdHIpOworCWlmIChyZXQpCisJCXJldHVybiAtRU5PREVWOworCisJZm9yIChpID0gMDsgaSA8IFBIWV9JTlRFUkZBQ0VfTU9ERV9NQVg7IGkrKykgeworCQlpZiAoIXN0cmNhc2VjbXAobW9kZXN0ciwgcGh5X21vZGVzKGkpKSkKKwkJCXJldHVybiBpOworCX0KKwlyZXR1cm4gLUVOT0RFVjsKK30KKwogc3RhdGljIGludCB4Z2VuZV9lbmV0X2dldF9yZXNvdXJjZXMoc3RydWN0IHhnZW5lX2VuZXRfcGRhdGEgKnBkYXRhKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CkBAIC03NTMsMzIgKzc5NCw0NSBAQAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcjsKLQljb25zdCBjaGFyICptYWM7CiAJaW50IHJldDsKIAogCXBkZXYgPSBwZGF0YS0+cGRldjsKIAlkZXYgPSAmcGRldi0+ZGV2OwogCW5kZXYgPSBwZGF0YS0+bmRldjsKIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJlbmV0X2NzciIpOwotCXBkYXRhLT5iYXNlX2FkZHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwotCWlmIChJU19FUlIocGRhdGEtPmJhc2VfYWRkcikpIHsKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIFJFU19FTkVUX0NTUik7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycihkZXYsICJSZXNvdXJjZSBlbmV0X2NzciBub3QgZGVmaW5lZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlwZGF0YS0+YmFzZV9hZGRyID0gZGV2bV9pb3JlbWFwKGRldiwgcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIXBkYXRhLT5iYXNlX2FkZHIpIHsKIAkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcmV0cmlldmUgRU5FVCBQb3J0IENTUiByZWdpb25cbiIpOwotCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+YmFzZV9hZGRyKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInJpbmdfY3NyIik7Ci0JcGRhdGEtPnJpbmdfY3NyX2FkZHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwotCWlmIChJU19FUlIocGRhdGEtPnJpbmdfY3NyX2FkZHIpKSB7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBSRVNfUklOR19DU1IpOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoZGV2LCAiUmVzb3VyY2UgcmluZ19jc3Igbm90IGRlZmluZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcGRhdGEtPnJpbmdfY3NyX2FkZHIgPSBkZXZtX2lvcmVtYXAoZGV2LCByZXMtPnN0YXJ0LAorCQkJCQkJCXJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFwZGF0YS0+cmluZ19jc3JfYWRkcikgewogCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byByZXRyaWV2ZSBFTkVUIFJpbmcgQ1NSIHJlZ2lvblxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHBkYXRhLT5yaW5nX2Nzcl9hZGRyKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInJpbmdfY21kIik7Ci0JcGRhdGEtPnJpbmdfY21kX2FkZHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOwotCWlmIChJU19FUlIocGRhdGEtPnJpbmdfY21kX2FkZHIpKSB7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCBSRVNfUklOR19DTUQpOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoZGV2LCAiUmVzb3VyY2UgcmluZ19jbWQgbm90IGRlZmluZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcGRhdGEtPnJpbmdfY21kX2FkZHIgPSBkZXZtX2lvcmVtYXAoZGV2LCByZXMtPnN0YXJ0LAorCQkJCQkJCXJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFwZGF0YS0+cmluZ19jbWRfYWRkcikgewogCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byByZXRyaWV2ZSBFTkVUIFJpbmcgY29tbWFuZCByZWdpb25cbiIpOwotCQlyZXR1cm4gUFRSX0VSUihwZGF0YS0+cmluZ19jbWRfYWRkcik7CisJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CkBAIC03ODksMTQgKzg0MywxMiBAQAogCX0KIAlwZGF0YS0+cnhfaXJxID0gcmV0OwogCi0JbWFjID0gb2ZfZ2V0X21hY19hZGRyZXNzKGRldi0+b2Zfbm9kZSk7Ci0JaWYgKG1hYykKLQkJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBtYWMsIG5kZXYtPmFkZHJfbGVuKTsKLQllbHNlCisJaWYgKHhnZW5lX2dldF9tYWNfYWRkcmVzcyhkZXYsIG5kZXYtPmRldl9hZGRyKSAhPSBFVEhfQUxFTikKIAkJZXRoX2h3X2FkZHJfcmFuZG9tKG5kZXYpOworCiAJbWVtY3B5KG5kZXYtPnBlcm1fYWRkciwgbmRldi0+ZGV2X2FkZHIsIG5kZXYtPmFkZHJfbGVuKTsKIAotCXBkYXRhLT5waHlfbW9kZSA9IG9mX2dldF9waHlfbW9kZShwZGV2LT5kZXYub2Zfbm9kZSk7CisJcGRhdGEtPnBoeV9tb2RlID0geGdlbmVfZ2V0X3BoeV9tb2RlKGRldik7CiAJaWYgKHBkYXRhLT5waHlfbW9kZSA8IDApIHsKIAkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gZ2V0IHBoeS1jb25uZWN0aW9uLXR5cGVcbiIpOwogCQlyZXR1cm4gcGRhdGEtPnBoeV9tb2RlOwpAQCAtODA5LDExICs4NjEsOSBAQAogCX0KIAogCXBkYXRhLT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7Ci0JcmV0ID0gSVNfRVJSKHBkYXRhLT5jbGspOwogCWlmIChJU19FUlIocGRhdGEtPmNsaykpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGNsb2NrXG4iKTsKLQkJcmV0ID0gUFRSX0VSUihwZGF0YS0+Y2xrKTsKLQkJcmV0dXJuIHJldDsKKwkJLyogRmlybXdhcmUgbWF5IGhhdmUgc2V0IHVwIHRoZSBjbG9jayBhbHJlYWR5LiAqLworCQlwZGF0YS0+Y2xrID0gTlVMTDsKIAl9CiAKIAliYXNlX2FkZHIgPSBwZGF0YS0+YmFzZV9hZGRyOwpAQCAtOTI0LDcgKzk3NCw3IEBACiAJCWdvdG8gZXJyOwogCX0KIAotCXJldCA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soNjQpKTsKKwlyZXQgPSBkbWFfY29lcmNlX21hc2tfYW5kX2NvaGVyZW50KGRldiwgRE1BX0JJVF9NQVNLKDY0KSk7CiAJaWYgKHJldCkgewogCQluZXRkZXZfZXJyKG5kZXYsICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb25cbiIpOwogCQlnb3RvIGVycjsKQEAgLTk3MiwxNyArMTAyMiwyNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB4Z2VuZV9lbmV0X21hdGNoW10gPSB7CisjaWZkZWYgQ09ORklHX0FDUEkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgeGdlbmVfZW5ldF9hY3BpX21hdGNoW10gPSB7CisJeyAiQVBNQzBEMDUiLCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgeGdlbmVfZW5ldF9hY3BpX21hdGNoKTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB4Z2VuZV9lbmV0X29mX21hdGNoW10gPSB7CiAJey5jb21wYXRpYmxlID0gImFwbSx4Z2VuZS1lbmV0Iix9LAogCXt9LAogfTsKIAotTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeGdlbmVfZW5ldF9tYXRjaCk7CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4Z2VuZV9lbmV0X29mX21hdGNoKTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeGdlbmVfZW5ldF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJICAgLm5hbWUgPSAieGdlbmUtZW5ldCIsCi0JCSAgIC5vZl9tYXRjaF90YWJsZSA9IHhnZW5lX2VuZXRfbWF0Y2gsCisJCSAgIC5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cih4Z2VuZV9lbmV0X29mX21hdGNoKSwKKwkJICAgLmFjcGlfbWF0Y2hfdGFibGUgPSBBQ1BJX1BUUih4Z2VuZV9lbmV0X2FjcGlfbWF0Y2gpLAogCX0sCiAJLnByb2JlID0geGdlbmVfZW5ldF9wcm9iZSwKIAkucmVtb3ZlID0geGdlbmVfZW5ldF9yZW1vdmUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9hcG0veGdlbmUveGdlbmVfZW5ldF9tYWluLmgKaW5kZXggZjk5NThmYS4uYzJkNDY1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXBtL3hnZW5lL3hnZW5lX2VuZXRfbWFpbi5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2FwbS94Z2VuZS94Z2VuZV9lbmV0X21haW4uaApAQCAtMjIsNyArMjIsMTAgQEAKICNpZm5kZWYgX19YR0VORV9FTkVUX01BSU5fSF9fCiAjZGVmaW5lIF9fWEdFTkVfRU5FVF9NQUlOX0hfXwogCisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9tZGlvLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bDFjL2F0bDFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWMvYXRsMWNfbWFpbi5jCmluZGV4IGM5OTQ2YzYuLjU4N2Y2M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWMvYXRsMWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWMvYXRsMWNfbWFpbi5jCkBAIC0yMjM1LDggKzIyMzUsOCBAQAogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KIAotCWlmICh1bmxpa2VseSh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpKSB7Ci0JCXUxNiB2bGFuID0gdmxhbl90eF90YWdfZ2V0KHNrYik7CisJaWYgKHVubGlrZWx5KHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpKSB7CisJCXUxNiB2bGFuID0gc2tiX3ZsYW5fdGFnX2dldChza2IpOwogCQlfX2xlMTYgdGFnOwogCiAJCXZsYW4gPSBjcHVfdG9fbGUxNih2bGFuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRsMWUvYXRsMWVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxZS9hdGwxZV9tYWluLmMKaW5kZXggMjMyNjU3OS4uNTlhMDNhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxZS9hdGwxZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGwxZS9hdGwxZV9tYWluLmMKQEAgLTE4OTIsOCArMTg5Miw4IEBACiAKIAl0cGQgPSBhdGwxZV9nZXRfdHBkKGFkYXB0ZXIpOwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewotCQl1MTYgdmxhbl90YWcgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgeworCQl1MTYgdmxhbl90YWcgPSBza2Jfdmxhbl90YWdfZ2V0KHNrYik7CiAJCXUxNiBhdGwxZV92bGFuX3RhZzsKIAogCQl0cGQtPndvcmQzIHw9IDEgPDwgVFBEX0lOU19WTF9UQUdfU0hJRlQ7CkBAIC0yMzczLDkgKzIzNzMsOCBAQAogCiAJbmV0aWZfbmFwaV9hZGQobmV0ZGV2LCAmYWRhcHRlci0+bmFwaSwgYXRsMWVfY2xlYW4sIDY0KTsKIAotCWluaXRfdGltZXIoJmFkYXB0ZXItPnBoeV9jb25maWdfdGltZXIpOwotCWFkYXB0ZXItPnBoeV9jb25maWdfdGltZXIuZnVuY3Rpb24gPSBhdGwxZV9waHlfY29uZmlnOwotCWFkYXB0ZXItPnBoeV9jb25maWdfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOworCXNldHVwX3RpbWVyKCZhZGFwdGVyLT5waHlfY29uZmlnX3RpbWVyLCBhdGwxZV9waHlfY29uZmlnLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpYWRhcHRlcik7CiAKIAkvKiBnZXQgdXNlciBzZXR0aW5ncyAqLwogCWF0bDFlX2NoZWNrX29wdGlvbnMoYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bHgvYXRsMS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGx4L2F0bDEuYwppbmRleCAyYzhmMzk4Li5lY2ExZDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bHgvYXRsMS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRseC9hdGwxLmMKQEAgLTI0MTUsOCArMjQxNSw4IEBACiAJCSh1MTYpIGF0b21pY19yZWFkKCZ0cGRfcmluZy0+bmV4dF90b191c2UpKTsKIAltZW1zZXQocHRwZCwgMCwgc2l6ZW9mKHN0cnVjdCB0eF9wYWNrZXRfZGVzYykpOwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewotCQl2bGFuX3RhZyA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CisJCXZsYW5fdGFnID0gc2tiX3ZsYW5fdGFnX2dldChza2IpOwogCQl2bGFuX3RhZyA9ICh2bGFuX3RhZyA8PCA0KSB8ICh2bGFuX3RhZyA+PiAxMykgfAogCQkJKCh2bGFuX3RhZyA+PiA5KSAmIDB4OCk7CiAJCXB0cGQtPndvcmQzIHw9IDEgPDwgVFBEX0lOU19WTF9UQUdfU0hJRlQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bHgvYXRsMi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYXRoZXJvcy9hdGx4L2F0bDIuYwppbmRleCA4NGEwOWU4Li40NmE1MzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9hdGhlcm9zL2F0bHgvYXRsMi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2F0aGVyb3MvYXRseC9hdGwyLmMKQEAgLTg4Nyw4ICs4ODcsOCBAQAogCQlvZmZzZXQgPSAoKHUzMikoc2tiLT5sZW4tY29weV9sZW4gKyAzKSAmIH4zKTsKIAl9CiAjaWZkZWYgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFgKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCXUxNiB2bGFuX3RhZyA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CisJCXUxNiB2bGFuX3RhZyA9IHNrYl92bGFuX3RhZ19nZXQoc2tiKTsKIAkJdmxhbl90YWcgPSAodmxhbl90YWcgPDwgNCkgfAogCQkJKHZsYW5fdGFnID4+IDEzKSB8CiAJCQkoKHZsYW5fdGFnID4+IDkpICYgMHg4KTsKQEAgLTE0MzYsMTMgKzE0MzYsMTEgQEAKIAogCWF0bDJfY2hlY2tfb3B0aW9ucyhhZGFwdGVyKTsKIAotCWluaXRfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKLQlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5mdW5jdGlvbiA9IGF0bDJfd2F0Y2hkb2c7Ci0JYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOworCXNldHVwX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgYXRsMl93YXRjaGRvZywKKwkJICAgICh1bnNpZ25lZCBsb25nKWFkYXB0ZXIpOwogCi0JaW5pdF90aW1lcigmYWRhcHRlci0+cGh5X2NvbmZpZ190aW1lcik7Ci0JYWRhcHRlci0+cGh5X2NvbmZpZ190aW1lci5mdW5jdGlvbiA9IGF0bDJfcGh5X2NvbmZpZzsKLQlhZGFwdGVyLT5waHlfY29uZmlnX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlcjsKKwlzZXR1cF90aW1lcigmYWRhcHRlci0+cGh5X2NvbmZpZ190aW1lciwgYXRsMl9waHlfY29uZmlnLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpYWRhcHRlcik7CiAKIAlJTklUX1dPUksoJmFkYXB0ZXItPnJlc2V0X3Rhc2ssIGF0bDJfcmVzZXRfdGFzayk7CiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5saW5rX2NoZ190YXNrLCBhdGwyX2xpbmtfY2hnX3Rhc2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54Mi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54Mi5jCmluZGV4IDgyM2QwMWMuLjAyYmYwYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDIuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyLmMKQEAgLTY1OTcsOSArNjU5Nyw5IEBACiAJCXZsYW5fdGFnX2ZsYWdzIHw9IFRYX0JEX0ZMQUdTX1RDUF9VRFBfQ0tTVU07CiAJfQogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCXZsYW5fdGFnX2ZsYWdzIHw9Ci0JCQkoVFhfQkRfRkxBR1NfVkxBTl9UQUcgfCAodmxhbl90eF90YWdfZ2V0KHNrYikgPDwgMTYpKTsKKwkJCShUWF9CRF9GTEFHU19WTEFOX1RBRyB8IChza2Jfdmxhbl90YWdfZ2V0KHNrYikgPDwgMTYpKTsKIAl9CiAKIAlpZiAoKG1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnguaAppbmRleCBjM2E2MDcyLi43NTYwNTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeC5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4LmgKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3B0cF9jbG9ja19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRfdHN0YW1wLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lY291bnRlci5oPgogCiAvKiBjb21waWxhdGlvbiB0aW1lIGZsYWdzICovCiAKQEAgLTExMzgsMTIgKzExMzgsOCBAQAogCXUzMgkJCWxpbmtfY29uZmlnW0xJTktfQ09ORklHX1NJWkVdOwogCiAJdTMyCQkJc3VwcG9ydGVkW0xJTktfQ09ORklHX1NJWkVdOwotLyogbGluayBzZXR0aW5ncyAtIG1pc3NpbmcgZGVmaW5lcyAqLwotI2RlZmluZSBTVVBQT1JURURfMjUwMGJhc2VYX0Z1bGwJKDEgPDwgMTUpCiAKIAl1MzIJCQlhZHZlcnRpc2luZ1tMSU5LX0NPTkZJR19TSVpFXTsKLS8qIGxpbmsgc2V0dGluZ3MgLSBtaXNzaW5nIGRlZmluZXMgKi8KLSNkZWZpbmUgQURWRVJUSVNFRF8yNTAwYmFzZVhfRnVsbAkoMSA8PCAxNSkKIAogCXUzMgkJCXBoeV9hZGRyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9jbW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jCmluZGV4IDFkMTE0N2MuLjBhOWZhYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X2Ntbi5jCkBAIC0zMTc1LDcgKzMxNzUsNyBAQAogCQl9CiAjZW5kaWYKIAkJaWYgKCFibngyeF9mcF9sb2NrX25hcGkoZnApKQotCQkJcmV0dXJuIHdvcmtfZG9uZTsKKwkJCXJldHVybiBidWRnZXQ7CiAKIAkJZm9yX2VhY2hfY29zX2luX3R4X3F1ZXVlKGZwLCBjb3MpCiAJCQlpZiAoYm54MnhfdHhfcXVldWVfaGFzX3dvcmsoZnAtPnR4ZGF0YV9wdHJbY29zXSkpCkBAIC0zODY1LDkgKzM4NjUsOSBAQAogCSAgICJzZW5kaW5nIHBrdCAldSBAJXAgIG5leHRfaWR4ICV1ICBiZCAldSBAJXBcbiIsCiAJICAgcGt0X3Byb2QsIHR4X2J1ZiwgdHhkYXRhLT50eF9wa3RfcHJvZCwgYmRfcHJvZCwgdHhfc3RhcnRfYmQpOwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCXR4X3N0YXJ0X2JkLT52bGFuX29yX2V0aGVydHlwZSA9Ci0JCSAgICBjcHVfdG9fbGUxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJCSAgICBjcHVfdG9fbGUxNihza2Jfdmxhbl90YWdfZ2V0KHNrYikpOwogCQl0eF9zdGFydF9iZC0+YmRfZmxhZ3MuYXNfYml0ZmllbGQgfD0KIAkJICAgIChYX0VUSF9PVVRCQU5EX1ZMQU4gPDwgRVRIX1RYX0JEX0ZMQUdTX1ZMQU5fTU9ERV9TSElGVCk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL2JueDJ4L2JueDJ4X21haW4uYwppbmRleCA3MmVlZjlmLi43MTU1ZTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9ibngyeC9ibngyeF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vYm54MngvYm54MnhfbWFpbi5jCkBAIC05MTY5LDcgKzkxNjksNyBAQAogfQogCiAvKiBDYWxsZWQgZHVyaW5nIHVubG9hZCwgdG8gc3RvcCBQVFAtcmVsYXRlZCBzdHVmZiAqLwotdm9pZCBibngyeF9zdG9wX3B0cChzdHJ1Y3QgYm54MnggKmJwKQorc3RhdGljIHZvaWQgYm54Mnhfc3RvcF9wdHAoc3RydWN0IGJueDJ4ICpicCkKIHsKIAkvKiBDYW5jZWwgUFRQIHdvcmsgcXVldWUuIFNob3VsZCBiZSBkb25lIGFmdGVyIHRoZSBUeCBxdWV1ZXMgYXJlCiAJICogZHJhaW5lZCB0byBwcmV2ZW50IGFkZGl0aW9uYWwgc2NoZWR1bGluZy4KQEAgLTEzMjY3LDE0ICsxMzI2NywxMCBAQAogc3RhdGljIGludCBibngyeF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKQogewogCXN0cnVjdCBibngyeCAqYnAgPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3QgYm54MngsIHB0cF9jbG9ja19pbmZvKTsKLQl1NjQgbm93OwogCiAJRFAoQk5YMlhfTVNHX1BUUCwgIlBUUCBhZGp0aW1lIGNhbGxlZCwgZGVsdGEgPSAlbGx4XG4iLCBkZWx0YSk7CiAKLQlub3cgPSB0aW1lY291bnRlcl9yZWFkKCZicC0+dGltZWNvdW50ZXIpOwotCW5vdyArPSBkZWx0YTsKLQkvKiBSZS1pbml0IHRoZSB0aW1lY291bnRlciAqLwotCXRpbWVjb3VudGVyX2luaXQoJmJwLT50aW1lY291bnRlciwgJmJwLT5jeWNsZWNvdW50ZXIsIG5vdyk7CisJdGltZWNvdW50ZXJfYWRqdGltZSgmYnAtPnRpbWVjb3VudGVyLCBkZWx0YSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzMzIyLDcgKzEzMzE4LDcgQEAKIAlyZXR1cm4gLUVOT1RTVVBQOwogfQogCi12b2lkIGJueDJ4X3JlZ2lzdGVyX3BoYyhzdHJ1Y3QgYm54MnggKmJwKQorc3RhdGljIHZvaWQgYm54MnhfcmVnaXN0ZXJfcGhjKHN0cnVjdCBibngyeCAqYnApCiB7CiAJLyogRmlsbCB0aGUgcHRwX2Nsb2NrX2luZm8gc3RydWN0IGFuZCByZWdpc3RlciBQVFAgY2xvY2sqLwogCWJwLT5wdHBfY2xvY2tfaW5mby5vd25lciA9IFRISVNfTU9EVUxFOwpAQCAtMTQ2MTQsNyArMTQ2MTAsNyBAQAogewogCW1lbXNldCgmYnAtPmN5Y2xlY291bnRlciwgMCwgc2l6ZW9mKGJwLT5jeWNsZWNvdW50ZXIpKTsKIAlicC0+Y3ljbGVjb3VudGVyLnJlYWQgPSBibngyeF9jeWNsZWNvdW50ZXJfcmVhZDsKLQlicC0+Y3ljbGVjb3VudGVyLm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKDY0KTsKKwlicC0+Y3ljbGVjb3VudGVyLm1hc2sgPSBDWUNMRUNPVU5URVJfTUFTSyg2NCk7CiAJYnAtPmN5Y2xlY291bnRlci5zaGlmdCA9IDE7CiAJYnAtPmN5Y2xlY291bnRlci5tdWx0ID0gMTsKIH0KQEAgLTE0NjM5LDcgKzE0NjM1LDcgQEAKIAlyZXR1cm4gYm54MnhfZnVuY19zdGF0ZV9jaGFuZ2UoYnAsICZmdW5jX3BhcmFtcyk7CiB9CiAKLWludCBibngyeF9lbmFibGVfcHRwX3BhY2tldHMoc3RydWN0IGJueDJ4ICpicCkKK3N0YXRpYyBpbnQgYm54MnhfZW5hYmxlX3B0cF9wYWNrZXRzKHN0cnVjdCBibngyeCAqYnApCiB7CiAJc3RydWN0IGJueDJ4X3F1ZXVlX3N0YXRlX3BhcmFtcyBxX3BhcmFtczsKIAlpbnQgcmMsIGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL3RnMy5jCmluZGV4IDk2YmYwMWIuLjYxNWE2ZGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS90ZzMuYwpAQCAtODAwOCw5ICs4MDA4LDkgQEAKIAkgICAgIW1zcyAmJiBza2ItPmxlbiA+IFZMQU5fRVRIX0ZSQU1FX0xFTikKIAkJYmFzZV9mbGFncyB8PSBUWERfRkxBR19KTUJfUEtUOwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCWJhc2VfZmxhZ3MgfD0gVFhEX0ZMQUdfVkxBTjsKLQkJdmxhbiA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQl2bGFuID0gc2tiX3ZsYW5fdGFnX2dldChza2IpOwogCX0KIAogCWlmICgodW5saWtlbHkoc2tiX3NoaW5mbyhza2IpLT50eF9mbGFncyAmIFNLQlRYX0hXX1RTVEFNUCkpICYmCkBAIC0xMTU3MywxMSArMTE1NzMsNyBAQAogCXRnM19mbGFnX3NldCh0cCwgSU5JVF9DT01QTEVURSk7CiAJdGczX2VuYWJsZV9pbnRzKHRwKTsKIAotCWlmIChpbml0KQotCQl0ZzNfcHRwX2luaXQodHApOwotCWVsc2UKLQkJdGczX3B0cF9yZXN1bWUodHApOwotCisJdGczX3B0cF9yZXN1bWUodHApOwogCiAJdGczX2Z1bGxfdW5sb2NrKHRwKTsKIApAQCAtMTE2OTgsMTMgKzExNjk0LDYgQEAKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZSh0cC0+cGRldiwgUENJX0QzaG90KTsKIAl9CiAKLQlpZiAodGczX2ZsYWcodHAsIFBUUF9DQVBBQkxFKSkgewotCQl0cC0+cHRwX2Nsb2NrID0gcHRwX2Nsb2NrX3JlZ2lzdGVyKCZ0cC0+cHRwX2luZm8sCi0JCQkJCQkgICAmdHAtPnBkZXYtPmRldik7Ci0JCWlmIChJU19FUlIodHAtPnB0cF9jbG9jaykpCi0JCQl0cC0+cHRwX2Nsb2NrID0gTlVMTDsKLQl9Ci0KIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTcxOCw4ICsxMTcwNyw2IEBACiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAotCXRnM19wdHBfZmluaSh0cCk7Ci0KIAl0ZzNfc3RvcCh0cCk7CiAKIAkvKiBDbGVhciBzdGF0cyBhY3Jvc3MgY2xvc2UgLyBvcGVuIGNhbGxzICovCkBAIC0xNzg5Nyw2ICsxNzg4NCwxNCBAQAogCQlnb3RvIGVycl9vdXRfYXBldW5tYXA7CiAJfQogCisJaWYgKHRnM19mbGFnKHRwLCBQVFBfQ0FQQUJMRSkpIHsKKwkJdGczX3B0cF9pbml0KHRwKTsKKwkJdHAtPnB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcigmdHAtPnB0cF9pbmZvLAorCQkJCQkJICAgJnRwLT5wZGV2LT5kZXYpOworCQlpZiAoSVNfRVJSKHRwLT5wdHBfY2xvY2spKQorCQkJdHAtPnB0cF9jbG9jayA9IE5VTEw7CisJfQorCiAJbmV0ZGV2X2luZm8oZGV2LCAiVGlnb24zIFtwYXJ0bm8oJXMpIHJldiAlMDR4XSAoJXMpIE1BQyBhZGRyZXNzICVwTVxuIiwKIAkJICAgIHRwLT5ib2FyZF9wYXJ0X251bWJlciwKIAkJICAgIHRnM19jaGlwX3Jldl9pZCh0cCksCkBAIC0xNzk3Miw2ICsxNzk2Nyw4IEBACiAJaWYgKGRldikgewogCQlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKKwkJdGczX3B0cF9maW5pKHRwKTsKKwogCQlyZWxlYXNlX2Zpcm13YXJlKHRwLT5mdyk7CiAKIAkJdGczX3Jlc2V0X3Rhc2tfY2FuY2VsKHRwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2NhZGUvYm5hL2JuYWQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2NhZGUvYm5hL2JuYWQuYwppbmRleCAzMjM3MjE4My4uNzcxNGQ3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvY2FkZS9ibmEvYm5hZC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2NhZGUvYm5hL2JuYWQuYwpAQCAtMjgyNCw4ICsyODI0LDggQEAKIAl1MzIgZ3NvX3NpemU7CiAJdTE2IHZsYW5fdGFnID0gMDsKIAotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJdmxhbl90YWcgPSAodTE2KXZsYW5fdHhfdGFnX2dldChza2IpOworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CisJCXZsYW5fdGFnID0gKHUxNilza2Jfdmxhbl90YWdfZ2V0KHNrYik7CiAJCWZsYWdzIHw9IChCTkFfVFhRX1dJX0NGX0lOU19QUklPIHwgQk5BX1RYUV9XSV9DRl9JTlNfVkxBTik7CiAJfQogCWlmICh0ZXN0X2JpdChCTkFEX1JGX0NFRV9SVU5OSU5HLCAmYm5hZC0+cnVuX2ZsYWdzKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuYwppbmRleCAzNzY3MjcxLi5hZDc2YjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuYwpAQCAtMTY5MSw3ICsxNjkxLDcgQEAKIAogCWZvciAoaiA9IDA7IGogPCA2OyBqKyspIHsKIAkJZm9yIChpID0gMCwgYml0dmFsID0gMDsgaSA8IDg7IGkrKykKLQkJCWJpdHZhbCBePSBoYXNoX2JpdF92YWx1ZShpKjYgKyBqLCBhZGRyKTsKKwkJCWJpdHZhbCBePSBoYXNoX2JpdF92YWx1ZShpICogNiArIGosIGFkZHIpOwogCiAJCWhhc2hfaW5kZXggfD0gKGJpdHZhbCA8PCBqKTsKIAl9CkBAIC0xODI3LDEyICsxODI3LDIzIEBACiAKIHN0YXRpYyB2b2lkIGdlbV91cGRhdGVfc3RhdHMoc3RydWN0IG1hY2IgKmJwKQogewotCXUzMiBfX2lvbWVtICpyZWcgPSBicC0+cmVncyArIEdFTV9PVFg7CisJaW50IGk7CiAJdTMyICpwID0gJmJwLT5od19zdGF0cy5nZW0udHhfb2N0ZXRzXzMxXzA7Ci0JdTMyICplbmQgPSAmYnAtPmh3X3N0YXRzLmdlbS5yeF91ZHBfY2hlY2tzdW1fZXJyb3JzICsgMTsKIAotCWZvciAoOyBwIDwgZW5kOyBwKyssIHJlZysrKQotCQkqcCArPSBfX3Jhd19yZWFkbChyZWcpOworCWZvciAoaSA9IDA7IGkgPCBHRU1fU1RBVFNfTEVOOyArK2ksICsrcCkgeworCQl1MzIgb2Zmc2V0ID0gZ2VtX3N0YXRpc3RpY3NbaV0ub2Zmc2V0OworCQl1NjQgdmFsID0gX19yYXdfcmVhZGwoYnAtPnJlZ3MgKyBvZmZzZXQpOworCisJCWJwLT5ldGh0b29sX3N0YXRzW2ldICs9IHZhbDsKKwkJKnAgKz0gdmFsOworCisJCWlmIChvZmZzZXQgPT0gR0VNX09DVFRYTCB8fCBvZmZzZXQgPT0gR0VNX09DVFJYTCkgeworCQkJLyogQWRkIEdFTV9PQ1RUWEgsIEdFTV9PQ1RSWEggKi8KKwkJCXZhbCA9IF9fcmF3X3JlYWRsKGJwLT5yZWdzICsgb2Zmc2V0ICsgNCk7CisJCQlicC0+ZXRodG9vbF9zdGF0c1tpXSArPSAoKHU2NCl2YWwpIDw8IDMyOworCQkJKigrK3ApICs9IHZhbDsKKwkJfQorCX0KIH0KIAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpnZW1fZ2V0X3N0YXRzKHN0cnVjdCBtYWNiICpicCkKQEAgLTE4NzMsNiArMTg4NCwzOSBAQAogCXJldHVybiBuc3RhdDsKIH0KIAorc3RhdGljIHZvaWQgZ2VtX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWFjYiAqYnA7CisKKwlicCA9IG5ldGRldl9wcml2KGRldik7CisJZ2VtX3VwZGF0ZV9zdGF0cyhicCk7CisJbWVtY3B5KGRhdGEsICZicC0+ZXRodG9vbF9zdGF0cywgc2l6ZW9mKHU2NCkgKiBHRU1fU1RBVFNfTEVOKTsKK30KKworc3RhdGljIGludCBnZW1fZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCit7CisJc3dpdGNoIChzc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCXJldHVybiBHRU1fU1RBVFNfTEVOOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdlbV9nZXRfZXRodG9vbF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzc2V0LCB1OCAqcCkKK3sKKwlpbnQgaTsKKworCXN3aXRjaCAoc3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlmb3IgKGkgPSAwOyBpIDwgR0VNX1NUQVRTX0xFTjsgaSsrLCBwICs9IEVUSF9HU1RSSU5HX0xFTikKKwkJCW1lbWNweShwLCBnZW1fc3RhdGlzdGljc1tpXS5zdGF0X3N0cmluZywKKwkJCSAgICAgICBFVEhfR1NUUklOR19MRU4pOworCQlicmVhazsKKwl9Cit9CisKIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICptYWNiX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtYWNiICpicCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xOTkxLDYgKzIwMzUsMTggQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChtYWNiX2V0aHRvb2xfb3BzKTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBnZW1fZXRodG9vbF9vcHMgPSB7CisJLmdldF9zZXR0aW5ncwkJPSBtYWNiX2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzCQk9IG1hY2Jfc2V0X3NldHRpbmdzLAorCS5nZXRfcmVnc19sZW4JCT0gbWFjYl9nZXRfcmVnc19sZW4sCisJLmdldF9yZWdzCQk9IG1hY2JfZ2V0X3JlZ3MsCisJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF90c19pbmZvCQk9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sCisJLmdldF9ldGh0b29sX3N0YXRzCT0gZ2VtX2dldF9ldGh0b29sX3N0YXRzLAorCS5nZXRfc3RyaW5ncwkJPSBnZW1fZ2V0X2V0aHRvb2xfc3RyaW5ncywKKwkuZ2V0X3NzZXRfY291bnQJCT0gZ2VtX2dldF9zc2V0X2NvdW50LAorfTsKKwogaW50IG1hY2JfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKIHsKIAlzdHJ1Y3QgbWFjYiAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjE0OCw3ICsyMjA0LDcgQEAKIAkJCSgqbnVtX3F1ZXVlcykrKzsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbWFjYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBtYWNiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IG1hY2JfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZWdzOwpAQCAtMjI3OCw3ICsyMzM0LDYgQEAKIAogCWRldi0+bmV0ZGV2X29wcyA9ICZtYWNiX25ldGRldl9vcHM7CiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmYnAtPm5hcGksIG1hY2JfcG9sbCwgNjQpOwotCWRldi0+ZXRodG9vbF9vcHMgPSAmbWFjYl9ldGh0b29sX29wczsKIAogCWRldi0+YmFzZV9hZGRyID0gcmVncy0+c3RhcnQ7CiAKQEAgLTIyOTIsMTIgKzIzNDcsMTQgQEAKIAkJYnAtPm1hY2JnZW1fb3BzLm1vZ19mcmVlX3J4X2J1ZmZlcnMgPSBnZW1fZnJlZV9yeF9idWZmZXJzOwogCQlicC0+bWFjYmdlbV9vcHMubW9nX2luaXRfcmluZ3MgPSBnZW1faW5pdF9yaW5nczsKIAkJYnAtPm1hY2JnZW1fb3BzLm1vZ19yeCA9IGdlbV9yeDsKKwkJZGV2LT5ldGh0b29sX29wcyA9ICZnZW1fZXRodG9vbF9vcHM7CiAJfSBlbHNlIHsKIAkJYnAtPm1heF90eF9sZW5ndGggPSBNQUNCX01BWF9UWF9MRU47CiAJCWJwLT5tYWNiZ2VtX29wcy5tb2dfYWxsb2NfcnhfYnVmZmVycyA9IG1hY2JfYWxsb2NfcnhfYnVmZmVyczsKIAkJYnAtPm1hY2JnZW1fb3BzLm1vZ19mcmVlX3J4X2J1ZmZlcnMgPSBtYWNiX2ZyZWVfcnhfYnVmZmVyczsKIAkJYnAtPm1hY2JnZW1fb3BzLm1vZ19pbml0X3JpbmdzID0gbWFjYl9pbml0X3JpbmdzOwogCQlicC0+bWFjYmdlbV9vcHMubW9nX3J4ID0gbWFjYl9yeDsKKwkJZGV2LT5ldGh0b29sX29wcyA9ICZtYWNiX2V0aHRvb2xfb3BzOwogCX0KIAogCS8qIFNldCBmZWF0dXJlcyAqLwpAQCAtMjM4Niw3ICsyNDQzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZXhpdCBtYWNiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBtYWNiX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG1hY2IgKmJwOwpAQCAtMjQxMSw4ICsyNDY4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBtYWNiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX21heWJlX3VudXNlZCBtYWNiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CkBAIC0yNDI5LDcgKzI0ODUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1hY2JfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgbWFjYl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CkBAIC0yNDQ0LDEyICsyNTAwLDEyIEBACiAKIAlyZXR1cm4gMDsKIH0KLSNlbmRpZgogCiBzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMobWFjYl9wbV9vcHMsIG1hY2Jfc3VzcGVuZCwgbWFjYl9yZXN1bWUpOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYWNiX2RyaXZlciA9IHsKLQkucmVtb3ZlCQk9IF9fZXhpdF9wKG1hY2JfcmVtb3ZlKSwKKwkucHJvYmUJCT0gbWFjYl9wcm9iZSwKKwkucmVtb3ZlCQk9IG1hY2JfcmVtb3ZlLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQkJPSAibWFjYiIsCiAJCS5vZl9tYXRjaF90YWJsZQk9IG9mX21hdGNoX3B0cihtYWNiX2R0X2lkcyksCkBAIC0yNDU3LDcgKzI1MTMsNyBAQAogCX0sCiB9OwogCi1tb2R1bGVfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKG1hY2JfZHJpdmVyLCBtYWNiX3Byb2JlKTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobWFjYl9kcml2ZXIpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkNhZGVuY2UgTUFDQi9HRU0gRXRoZXJuZXQgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2IuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oCmluZGV4IDA4NDE5MWIuLjMxZGMwODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYi5oCkBAIC0xNSwyNjMgKzE1LDMwOSBAQAogI2RlZmluZSBNQUNCX01BWF9RVUVVRVMgOAogCiAvKiBNQUNCIHJlZ2lzdGVyIG9mZnNldHMgKi8KLSNkZWZpbmUgTUFDQl9OQ1IJCQkJMHgwMDAwCi0jZGVmaW5lIE1BQ0JfTkNGR1IJCQkJMHgwMDA0Ci0jZGVmaW5lIE1BQ0JfTlNSCQkJCTB4MDAwOAotI2RlZmluZSBNQUNCX1RBUgkJCQkweDAwMGMgLyogQVQ5MVJNOTIwMCBvbmx5ICovCi0jZGVmaW5lIE1BQ0JfVENSCQkJCTB4MDAxMCAvKiBBVDkxUk05MjAwIG9ubHkgKi8KLSNkZWZpbmUgTUFDQl9UU1IJCQkJMHgwMDE0Ci0jZGVmaW5lIE1BQ0JfUkJRUAkJCQkweDAwMTgKLSNkZWZpbmUgTUFDQl9UQlFQCQkJCTB4MDAxYwotI2RlZmluZSBNQUNCX1JTUgkJCQkweDAwMjAKLSNkZWZpbmUgTUFDQl9JU1IJCQkJMHgwMDI0Ci0jZGVmaW5lIE1BQ0JfSUVSCQkJCTB4MDAyOAotI2RlZmluZSBNQUNCX0lEUgkJCQkweDAwMmMKLSNkZWZpbmUgTUFDQl9JTVIJCQkJMHgwMDMwCi0jZGVmaW5lIE1BQ0JfTUFOCQkJCTB4MDAzNAotI2RlZmluZSBNQUNCX1BUUgkJCQkweDAwMzgKLSNkZWZpbmUgTUFDQl9QRlIJCQkJMHgwMDNjCi0jZGVmaW5lIE1BQ0JfRlRPCQkJCTB4MDA0MAotI2RlZmluZSBNQUNCX1NDRgkJCQkweDAwNDQKLSNkZWZpbmUgTUFDQl9NQ0YJCQkJMHgwMDQ4Ci0jZGVmaW5lIE1BQ0JfRlJPCQkJCTB4MDA0YwotI2RlZmluZSBNQUNCX0ZDU0UJCQkJMHgwMDUwCi0jZGVmaW5lIE1BQ0JfQUxFCQkJCTB4MDA1NAotI2RlZmluZSBNQUNCX0RURgkJCQkweDAwNTgKLSNkZWZpbmUgTUFDQl9MQ09MCQkJCTB4MDA1YwotI2RlZmluZSBNQUNCX0VYQ09MCQkJCTB4MDA2MAotI2RlZmluZSBNQUNCX1RVTkQJCQkJMHgwMDY0Ci0jZGVmaW5lIE1BQ0JfQ1NFCQkJCTB4MDA2OAotI2RlZmluZSBNQUNCX1JSRQkJCQkweDAwNmMKLSNkZWZpbmUgTUFDQl9ST1ZSCQkJCTB4MDA3MAotI2RlZmluZSBNQUNCX1JTRQkJCQkweDAwNzQKLSNkZWZpbmUgTUFDQl9FTEUJCQkJMHgwMDc4Ci0jZGVmaW5lIE1BQ0JfUkpBCQkJCTB4MDA3YwotI2RlZmluZSBNQUNCX1VTRgkJCQkweDAwODAKLSNkZWZpbmUgTUFDQl9TVEUJCQkJMHgwMDg0Ci0jZGVmaW5lIE1BQ0JfUkxFCQkJCTB4MDA4OAotI2RlZmluZSBNQUNCX1RQRgkJCQkweDAwOGMKLSNkZWZpbmUgTUFDQl9IUkIJCQkJMHgwMDkwCi0jZGVmaW5lIE1BQ0JfSFJUCQkJCTB4MDA5NAotI2RlZmluZSBNQUNCX1NBMUIJCQkJMHgwMDk4Ci0jZGVmaW5lIE1BQ0JfU0ExVAkJCQkweDAwOWMKLSNkZWZpbmUgTUFDQl9TQTJCCQkJCTB4MDBhMAotI2RlZmluZSBNQUNCX1NBMlQJCQkJMHgwMGE0Ci0jZGVmaW5lIE1BQ0JfU0EzQgkJCQkweDAwYTgKLSNkZWZpbmUgTUFDQl9TQTNUCQkJCTB4MDBhYwotI2RlZmluZSBNQUNCX1NBNEIJCQkJMHgwMGIwCi0jZGVmaW5lIE1BQ0JfU0E0VAkJCQkweDAwYjQKLSNkZWZpbmUgTUFDQl9USUQJCQkJMHgwMGI4Ci0jZGVmaW5lIE1BQ0JfVFBRCQkJCTB4MDBiYwotI2RlZmluZSBNQUNCX1VTUklPCQkJCTB4MDBjMAotI2RlZmluZSBNQUNCX1dPTAkJCQkweDAwYzQKLSNkZWZpbmUgTUFDQl9NSUQJCQkJMHgwMGZjCisjZGVmaW5lIE1BQ0JfTkNSCQkweDAwMDAgLyogTmV0d29yayBDb250cm9sICovCisjZGVmaW5lIE1BQ0JfTkNGR1IJCTB4MDAwNCAvKiBOZXR3b3JrIENvbmZpZyAqLworI2RlZmluZSBNQUNCX05TUgkJMHgwMDA4IC8qIE5ldHdvcmsgU3RhdHVzICovCisjZGVmaW5lIE1BQ0JfVEFSCQkweDAwMGMgLyogQVQ5MVJNOTIwMCBvbmx5ICovCisjZGVmaW5lIE1BQ0JfVENSCQkweDAwMTAgLyogQVQ5MVJNOTIwMCBvbmx5ICovCisjZGVmaW5lIE1BQ0JfVFNSCQkweDAwMTQgLyogVHJhbnNtaXQgU3RhdHVzICovCisjZGVmaW5lIE1BQ0JfUkJRUAkJMHgwMDE4IC8qIFJYIFEgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIE1BQ0JfVEJRUAkJMHgwMDFjIC8qIFRYIFEgQmFzZSBBZGRyZXNzICovCisjZGVmaW5lIE1BQ0JfUlNSCQkweDAwMjAgLyogUmVjZWl2ZSBTdGF0dXMgKi8KKyNkZWZpbmUgTUFDQl9JU1IJCTB4MDAyNCAvKiBJbnRlcnJ1cHQgU3RhdHVzICovCisjZGVmaW5lIE1BQ0JfSUVSCQkweDAwMjggLyogSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBNQUNCX0lEUgkJMHgwMDJjIC8qIEludGVycnVwdCBEaXNhYmxlICovCisjZGVmaW5lIE1BQ0JfSU1SCQkweDAwMzAgLyogSW50ZXJydXB0IE1hc2sgKi8KKyNkZWZpbmUgTUFDQl9NQU4JCTB4MDAzNCAvKiBQSFkgTWFpbnRlbmFuY2UgKi8KKyNkZWZpbmUgTUFDQl9QVFIJCTB4MDAzOAorI2RlZmluZSBNQUNCX1BGUgkJMHgwMDNjCisjZGVmaW5lIE1BQ0JfRlRPCQkweDAwNDAKKyNkZWZpbmUgTUFDQl9TQ0YJCTB4MDA0NAorI2RlZmluZSBNQUNCX01DRgkJMHgwMDQ4CisjZGVmaW5lIE1BQ0JfRlJPCQkweDAwNGMKKyNkZWZpbmUgTUFDQl9GQ1NFCQkweDAwNTAKKyNkZWZpbmUgTUFDQl9BTEUJCTB4MDA1NAorI2RlZmluZSBNQUNCX0RURgkJMHgwMDU4CisjZGVmaW5lIE1BQ0JfTENPTAkJMHgwMDVjCisjZGVmaW5lIE1BQ0JfRVhDT0wJCTB4MDA2MAorI2RlZmluZSBNQUNCX1RVTkQJCTB4MDA2NAorI2RlZmluZSBNQUNCX0NTRQkJMHgwMDY4CisjZGVmaW5lIE1BQ0JfUlJFCQkweDAwNmMKKyNkZWZpbmUgTUFDQl9ST1ZSCQkweDAwNzAKKyNkZWZpbmUgTUFDQl9SU0UJCTB4MDA3NAorI2RlZmluZSBNQUNCX0VMRQkJMHgwMDc4CisjZGVmaW5lIE1BQ0JfUkpBCQkweDAwN2MKKyNkZWZpbmUgTUFDQl9VU0YJCTB4MDA4MAorI2RlZmluZSBNQUNCX1NURQkJMHgwMDg0CisjZGVmaW5lIE1BQ0JfUkxFCQkweDAwODgKKyNkZWZpbmUgTUFDQl9UUEYJCTB4MDA4YworI2RlZmluZSBNQUNCX0hSQgkJMHgwMDkwCisjZGVmaW5lIE1BQ0JfSFJUCQkweDAwOTQKKyNkZWZpbmUgTUFDQl9TQTFCCQkweDAwOTgKKyNkZWZpbmUgTUFDQl9TQTFUCQkweDAwOWMKKyNkZWZpbmUgTUFDQl9TQTJCCQkweDAwYTAKKyNkZWZpbmUgTUFDQl9TQTJUCQkweDAwYTQKKyNkZWZpbmUgTUFDQl9TQTNCCQkweDAwYTgKKyNkZWZpbmUgTUFDQl9TQTNUCQkweDAwYWMKKyNkZWZpbmUgTUFDQl9TQTRCCQkweDAwYjAKKyNkZWZpbmUgTUFDQl9TQTRUCQkweDAwYjQKKyNkZWZpbmUgTUFDQl9USUQJCTB4MDBiOAorI2RlZmluZSBNQUNCX1RQUQkJMHgwMGJjCisjZGVmaW5lIE1BQ0JfVVNSSU8JCTB4MDBjMAorI2RlZmluZSBNQUNCX1dPTAkJMHgwMGM0CisjZGVmaW5lIE1BQ0JfTUlECQkweDAwZmMKIAogLyogR0VNIHJlZ2lzdGVyIG9mZnNldHMuICovCi0jZGVmaW5lIEdFTV9OQ0ZHUgkJCQkweDAwMDQKLSNkZWZpbmUgR0VNX1VTUklPCQkJCTB4MDAwYwotI2RlZmluZSBHRU1fRE1BQ0ZHCQkJCTB4MDAxMAotI2RlZmluZSBHRU1fSFJCCQkJCQkweDAwODAKLSNkZWZpbmUgR0VNX0hSVAkJCQkJMHgwMDg0Ci0jZGVmaW5lIEdFTV9TQTFCCQkJCTB4MDA4OAotI2RlZmluZSBHRU1fU0ExVAkJCQkweDAwOEMKLSNkZWZpbmUgR0VNX1NBMkIJCQkJMHgwMDkwCi0jZGVmaW5lIEdFTV9TQTJUCQkJCTB4MDA5NAotI2RlZmluZSBHRU1fU0EzQgkJCQkweDAwOTgKLSNkZWZpbmUgR0VNX1NBM1QJCQkJMHgwMDlDCi0jZGVmaW5lIEdFTV9TQTRCCQkJCTB4MDBBMAotI2RlZmluZSBHRU1fU0E0VAkJCQkweDAwQTQKLSNkZWZpbmUgR0VNX09UWAkJCQkJMHgwMTAwCi0jZGVmaW5lIEdFTV9EQ0ZHMQkJCQkweDAyODAKLSNkZWZpbmUgR0VNX0RDRkcyCQkJCTB4MDI4NAotI2RlZmluZSBHRU1fRENGRzMJCQkJMHgwMjg4Ci0jZGVmaW5lIEdFTV9EQ0ZHNAkJCQkweDAyOGMKLSNkZWZpbmUgR0VNX0RDRkc1CQkJCTB4MDI5MAotI2RlZmluZSBHRU1fRENGRzYJCQkJMHgwMjk0Ci0jZGVmaW5lIEdFTV9EQ0ZHNwkJCQkweDAyOTgKKyNkZWZpbmUgR0VNX05DRkdSCQkweDAwMDQgLyogTmV0d29yayBDb25maWcgKi8KKyNkZWZpbmUgR0VNX1VTUklPCQkweDAwMGMgLyogVXNlciBJTyAqLworI2RlZmluZSBHRU1fRE1BQ0ZHCQkweDAwMTAgLyogRE1BIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgR0VNX0hSQgkJCTB4MDA4MCAvKiBIYXNoIEJvdHRvbSAqLworI2RlZmluZSBHRU1fSFJUCQkJMHgwMDg0IC8qIEhhc2ggVG9wICovCisjZGVmaW5lIEdFTV9TQTFCCQkweDAwODggLyogU3BlY2lmaWMxIEJvdHRvbSAqLworI2RlZmluZSBHRU1fU0ExVAkJMHgwMDhDIC8qIFNwZWNpZmljMSBUb3AgKi8KKyNkZWZpbmUgR0VNX1NBMkIJCTB4MDA5MCAvKiBTcGVjaWZpYzIgQm90dG9tICovCisjZGVmaW5lIEdFTV9TQTJUCQkweDAwOTQgLyogU3BlY2lmaWMyIFRvcCAqLworI2RlZmluZSBHRU1fU0EzQgkJMHgwMDk4IC8qIFNwZWNpZmljMyBCb3R0b20gKi8KKyNkZWZpbmUgR0VNX1NBM1QJCTB4MDA5QyAvKiBTcGVjaWZpYzMgVG9wICovCisjZGVmaW5lIEdFTV9TQTRCCQkweDAwQTAgLyogU3BlY2lmaWM0IEJvdHRvbSAqLworI2RlZmluZSBHRU1fU0E0VAkJMHgwMEE0IC8qIFNwZWNpZmljNCBUb3AgKi8KKyNkZWZpbmUgR0VNX09UWAkJCTB4MDEwMCAvKiBPY3RldHMgdHJhbnNtaXR0ZWQgKi8KKyNkZWZpbmUgR0VNX09DVFRYTAkJMHgwMTAwIC8qIE9jdGV0cyB0cmFuc21pdHRlZCBbMzE6MF0gKi8KKyNkZWZpbmUgR0VNX09DVFRYSAkJMHgwMTA0IC8qIE9jdGV0cyB0cmFuc21pdHRlZCBbNDc6MzJdICovCisjZGVmaW5lIEdFTV9UWENOVAkJMHgwMTA4IC8qIEZyYW1lcyBUcmFuc21pdHRlZCBjb3VudGVyICovCisjZGVmaW5lIEdFTV9UWEJDQ05UCQkweDAxMGMgLyogQnJvYWRjYXN0IEZyYW1lcyBjb3VudGVyICovCisjZGVmaW5lIEdFTV9UWE1DQ05UCQkweDAxMTAgLyogTXVsdGljYXN0IEZyYW1lcyBjb3VudGVyICovCisjZGVmaW5lIEdFTV9UWFBBVVNFQ05UCQkweDAxMTQgLyogUGF1c2UgRnJhbWVzIFRyYW5zbWl0dGVkIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1RYNjRDTlQJCTB4MDExOCAvKiA2NCBieXRlIEZyYW1lcyBUWCBjb3VudGVyICovCisjZGVmaW5lIEdFTV9UWDY1Q05UCQkweDAxMWMgLyogNjUtMTI3IGJ5dGUgRnJhbWVzIFRYIGNvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1RYMTI4Q05UCQkweDAxMjAgLyogMTI4LTI1NSBieXRlIEZyYW1lcyBUWCBjb3VudGVyICovCisjZGVmaW5lIEdFTV9UWDI1NkNOVAkJMHgwMTI0IC8qIDI1Ni01MTEgYnl0ZSBGcmFtZXMgVFggY291bnRlciAqLworI2RlZmluZSBHRU1fVFg1MTJDTlQJCTB4MDEyOCAvKiA1MTItMTAyMyBieXRlIEZyYW1lcyBUWCBjb3VudGVyICovCisjZGVmaW5lIEdFTV9UWDEwMjRDTlQJCTB4MDEyYyAvKiAxMDI0LTE1MTggYnl0ZSBGcmFtZXMgVFggY291bnRlciAqLworI2RlZmluZSBHRU1fVFgxNTE5Q05UCQkweDAxMzAgLyogMTUxOSsgYnl0ZSBGcmFtZXMgVFggY291bnRlciAqLworI2RlZmluZSBHRU1fVFhVUlVOQ05UCQkweDAxMzQgLyogVFggdW5kZXIgcnVuIGVycm9yIGNvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1NOR0xDT0xMQ05UCQkweDAxMzggLyogU2luZ2xlIENvbGxpc2lvbiBGcmFtZSBDb3VudGVyICovCisjZGVmaW5lIEdFTV9NVUxUSUNPTExDTlQJMHgwMTNjIC8qIE11bHRpcGxlIENvbGxpc2lvbiBGcmFtZSBDb3VudGVyICovCisjZGVmaW5lIEdFTV9FWENFU1NDT0xMQ05UCTB4MDE0MCAvKiBFeGNlc3NpdmUgQ29sbGlzaW9uIEZyYW1lIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX0xBVEVDT0xMQ05UCQkweDAxNDQgLyogTGF0ZSBDb2xsaXNpb24gRnJhbWUgQ291bnRlciAqLworI2RlZmluZSBHRU1fVFhERUZFUkNOVAkJMHgwMTQ4IC8qIERlZmVycmVkIFRyYW5zbWlzc2lvbiBGcmFtZSBDb3VudGVyICovCisjZGVmaW5lIEdFTV9UWENTRU5TRUNOVAkJMHgwMTRjIC8qIENhcnJpZXIgU2Vuc2UgRXJyb3IgQ291bnRlciAqLworI2RlZmluZSBHRU1fT1JYCQkJMHgwMTUwIC8qIE9jdGV0cyByZWNlaXZlZCAqLworI2RlZmluZSBHRU1fT0NUUlhMCQkweDAxNTAgLyogT2N0ZXRzIHJlY2VpdmVkIFszMTowXSAqLworI2RlZmluZSBHRU1fT0NUUlhICQkweDAxNTQgLyogT2N0ZXRzIHJlY2VpdmVkIFs0NzozMl0gKi8KKyNkZWZpbmUgR0VNX1JYQ05UCQkweDAxNTggLyogRnJhbWVzIFJlY2VpdmVkIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1JYQlJPQURDTlQJCTB4MDE1YyAvKiBCcm9hZGNhc3QgRnJhbWVzIFJlY2VpdmVkIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1JYTVVMVElDTlQJCTB4MDE2MCAvKiBNdWx0aWNhc3QgRnJhbWVzIFJlY2VpdmVkIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1JYUEFVU0VDTlQJCTB4MDE2NCAvKiBQYXVzZSBGcmFtZXMgUmVjZWl2ZWQgQ291bnRlciAqLworI2RlZmluZSBHRU1fUlg2NENOVAkJMHgwMTY4IC8qIDY0IGJ5dGUgRnJhbWVzIFJYIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1JYNjVDTlQJCTB4MDE2YyAvKiA2NS0xMjcgYnl0ZSBGcmFtZXMgUlggQ291bnRlciAqLworI2RlZmluZSBHRU1fUlgxMjhDTlQJCTB4MDE3MCAvKiAxMjgtMjU1IGJ5dGUgRnJhbWVzIFJYIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1JYMjU2Q05UCQkweDAxNzQgLyogMjU2LTUxMSBieXRlIEZyYW1lcyBSWCBDb3VudGVyICovCisjZGVmaW5lIEdFTV9SWDUxMkNOVAkJMHgwMTc4IC8qIDUxMi0xMDIzIGJ5dGUgRnJhbWVzIFJYIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1JYMTAyNENOVAkJMHgwMTdjIC8qIDEwMjQtMTUxOCBieXRlIEZyYW1lcyBSWCBDb3VudGVyICovCisjZGVmaW5lIEdFTV9SWDE1MTlDTlQJCTB4MDE4MCAvKiAxNTE5KyBieXRlIEZyYW1lcyBSWCBDb3VudGVyICovCisjZGVmaW5lIEdFTV9SWFVORFJDTlQJCTB4MDE4NCAvKiBVbmRlcnNpemUgRnJhbWVzIFJlY2VpdmVkIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1JYT1ZSQ05UCQkweDAxODggLyogT3ZlcnNpemUgRnJhbWVzIFJlY2VpdmVkIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1JYSkFCQ05UCQkweDAxOGMgLyogSmFiYmVycyBSZWNlaXZlZCBDb3VudGVyICovCisjZGVmaW5lIEdFTV9SWEZDU0NOVAkJMHgwMTkwIC8qIEZyYW1lIENoZWNrIFNlcXVlbmNlIEVycm9yIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1JYTEVOR1RIQ05UCQkweDAxOTQgLyogTGVuZ3RoIEZpZWxkIEVycm9yIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1JYU1lNQkNOVAkJMHgwMTk4IC8qIFN5bWJvbCBFcnJvciBDb3VudGVyICovCisjZGVmaW5lIEdFTV9SWEFMSUdOQ05UCQkweDAxOWMgLyogQWxpZ25tZW50IEVycm9yIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1JYUkVTRVJSQ05UCQkweDAxYTAgLyogUmVjZWl2ZSBSZXNvdXJjZSBFcnJvciBDb3VudGVyICovCisjZGVmaW5lIEdFTV9SWE9SQ05UCQkweDAxYTQgLyogUmVjZWl2ZSBPdmVycnVuIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1JYSVBDQ05UCQkweDAxYTggLyogSVAgaGVhZGVyIENoZWNrc3VtIEVycm9yIENvdW50ZXIgKi8KKyNkZWZpbmUgR0VNX1JYVENQQ0NOVAkJMHgwMWFjIC8qIFRDUCBDaGVja3N1bSBFcnJvciBDb3VudGVyICovCisjZGVmaW5lIEdFTV9SWFVEUENDTlQJCTB4MDFiMCAvKiBVRFAgQ2hlY2tzdW0gRXJyb3IgQ291bnRlciAqLworI2RlZmluZSBHRU1fRENGRzEJCTB4MDI4MCAvKiBEZXNpZ24gQ29uZmlnIDEgKi8KKyNkZWZpbmUgR0VNX0RDRkcyCQkweDAyODQgLyogRGVzaWduIENvbmZpZyAyICovCisjZGVmaW5lIEdFTV9EQ0ZHMwkJMHgwMjg4IC8qIERlc2lnbiBDb25maWcgMyAqLworI2RlZmluZSBHRU1fRENGRzQJCTB4MDI4YyAvKiBEZXNpZ24gQ29uZmlnIDQgKi8KKyNkZWZpbmUgR0VNX0RDRkc1CQkweDAyOTAgLyogRGVzaWduIENvbmZpZyA1ICovCisjZGVmaW5lIEdFTV9EQ0ZHNgkJMHgwMjk0IC8qIERlc2lnbiBDb25maWcgNiAqLworI2RlZmluZSBHRU1fRENGRzcJCTB4MDI5OCAvKiBEZXNpZ24gQ29uZmlnIDcgKi8KIAotI2RlZmluZSBHRU1fSVNSKGh3X3EpCQkJCSgweDA0MDAgKyAoKGh3X3EpIDw8IDIpKQotI2RlZmluZSBHRU1fVEJRUChod19xKQkJCQkoMHgwNDQwICsgKChod19xKSA8PCAyKSkKLSNkZWZpbmUgR0VNX1JCUVAoaHdfcSkJCQkJKDB4MDQ4MCArICgoaHdfcSkgPDwgMikpCi0jZGVmaW5lIEdFTV9JRVIoaHdfcSkJCQkJKDB4MDYwMCArICgoaHdfcSkgPDwgMikpCi0jZGVmaW5lIEdFTV9JRFIoaHdfcSkJCQkJKDB4MDYyMCArICgoaHdfcSkgPDwgMikpCi0jZGVmaW5lIEdFTV9JTVIoaHdfcSkJCQkJKDB4MDY0MCArICgoaHdfcSkgPDwgMikpCisjZGVmaW5lIEdFTV9JU1IoaHdfcSkJCSgweDA0MDAgKyAoKGh3X3EpIDw8IDIpKQorI2RlZmluZSBHRU1fVEJRUChod19xKQkJKDB4MDQ0MCArICgoaHdfcSkgPDwgMikpCisjZGVmaW5lIEdFTV9SQlFQKGh3X3EpCQkoMHgwNDgwICsgKChod19xKSA8PCAyKSkKKyNkZWZpbmUgR0VNX0lFUihod19xKQkJKDB4MDYwMCArICgoaHdfcSkgPDwgMikpCisjZGVmaW5lIEdFTV9JRFIoaHdfcSkJCSgweDA2MjAgKyAoKGh3X3EpIDw8IDIpKQorI2RlZmluZSBHRU1fSU1SKGh3X3EpCQkoMHgwNjQwICsgKChod19xKSA8PCAyKSkKIAogLyogQml0ZmllbGRzIGluIE5DUiAqLwotI2RlZmluZSBNQUNCX0xCX09GRlNFVAkJCQkwCi0jZGVmaW5lIE1BQ0JfTEJfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfTExCX09GRlNFVAkJCQkxCi0jZGVmaW5lIE1BQ0JfTExCX1NJWkUJCQkJMQotI2RlZmluZSBNQUNCX1JFX09GRlNFVAkJCQkyCi0jZGVmaW5lIE1BQ0JfUkVfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfVEVfT0ZGU0VUCQkJCTMKLSNkZWZpbmUgTUFDQl9URV9TSVpFCQkJCTEKLSNkZWZpbmUgTUFDQl9NUEVfT0ZGU0VUCQkJCTQKLSNkZWZpbmUgTUFDQl9NUEVfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfQ0xSU1RBVF9PRkZTRVQJCQk1Ci0jZGVmaW5lIE1BQ0JfQ0xSU1RBVF9TSVpFCQkJMQotI2RlZmluZSBNQUNCX0lOQ1NUQVRfT0ZGU0VUCQkJNgotI2RlZmluZSBNQUNCX0lOQ1NUQVRfU0laRQkJCTEKLSNkZWZpbmUgTUFDQl9XRVNUQVRfT0ZGU0VUCQkJNwotI2RlZmluZSBNQUNCX1dFU1RBVF9TSVpFCQkJMQotI2RlZmluZSBNQUNCX0JQX09GRlNFVAkJCQk4Ci0jZGVmaW5lIE1BQ0JfQlBfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfVFNUQVJUX09GRlNFVAkJCTkKLSNkZWZpbmUgTUFDQl9UU1RBUlRfU0laRQkJCTEKLSNkZWZpbmUgTUFDQl9USEFMVF9PRkZTRVQJCQkxMAotI2RlZmluZSBNQUNCX1RIQUxUX1NJWkUJCQkJMQotI2RlZmluZSBNQUNCX05DUl9UUEZfT0ZGU0VUCQkJMTEKLSNkZWZpbmUgTUFDQl9OQ1JfVFBGX1NJWkUJCQkxCi0jZGVmaW5lIE1BQ0JfVFpRX09GRlNFVAkJCQkxMgotI2RlZmluZSBNQUNCX1RaUV9TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9MQl9PRkZTRVQJCTAgLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgTUFDQl9MQl9TSVpFCQkxCisjZGVmaW5lIE1BQ0JfTExCX09GRlNFVAkJMSAvKiBMb29wIGJhY2sgbG9jYWwgKi8KKyNkZWZpbmUgTUFDQl9MTEJfU0laRQkJMQorI2RlZmluZSBNQUNCX1JFX09GRlNFVAkJMiAvKiBSZWNlaXZlIGVuYWJsZSAqLworI2RlZmluZSBNQUNCX1JFX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9URV9PRkZTRVQJCTMgLyogVHJhbnNtaXQgZW5hYmxlICovCisjZGVmaW5lIE1BQ0JfVEVfU0laRQkJMQorI2RlZmluZSBNQUNCX01QRV9PRkZTRVQJCTQgLyogTWFuYWdlbWVudCBwb3J0IGVuYWJsZSAqLworI2RlZmluZSBNQUNCX01QRV9TSVpFCQkxCisjZGVmaW5lIE1BQ0JfQ0xSU1RBVF9PRkZTRVQJNSAvKiBDbGVhciBzdGF0cyByZWdzICovCisjZGVmaW5lIE1BQ0JfQ0xSU1RBVF9TSVpFCTEKKyNkZWZpbmUgTUFDQl9JTkNTVEFUX09GRlNFVAk2IC8qIEluY3JlbWVudGFsIHN0YXRzIHJlZ3MgKi8KKyNkZWZpbmUgTUFDQl9JTkNTVEFUX1NJWkUJMQorI2RlZmluZSBNQUNCX1dFU1RBVF9PRkZTRVQJNyAvKiBXcml0ZSBlbmFibGUgc3RhdHMgcmVncyAqLworI2RlZmluZSBNQUNCX1dFU1RBVF9TSVpFCTEKKyNkZWZpbmUgTUFDQl9CUF9PRkZTRVQJCTggLyogQmFjayBwcmVzc3VyZSAqLworI2RlZmluZSBNQUNCX0JQX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9UU1RBUlRfT0ZGU0VUCTkgLyogU3RhcnQgdHJhbnNtaXNzaW9uICovCisjZGVmaW5lIE1BQ0JfVFNUQVJUX1NJWkUJMQorI2RlZmluZSBNQUNCX1RIQUxUX09GRlNFVAkxMCAvKiBUcmFuc21pdCBoYWx0ICovCisjZGVmaW5lIE1BQ0JfVEhBTFRfU0laRQkJMQorI2RlZmluZSBNQUNCX05DUl9UUEZfT0ZGU0VUCTExIC8qIFRyYW5zbWl0IHBhdXNlIGZyYW1lICovCisjZGVmaW5lIE1BQ0JfTkNSX1RQRl9TSVpFCTEKKyNkZWZpbmUgTUFDQl9UWlFfT0ZGU0VUCQkxMiAvKiBUcmFuc21pdCB6ZXJvIHF1YW50dW0gcGF1c2UgZnJhbWUgKi8KKyNkZWZpbmUgTUFDQl9UWlFfU0laRQkJMQogCiAvKiBCaXRmaWVsZHMgaW4gTkNGR1IgKi8KLSNkZWZpbmUgTUFDQl9TUERfT0ZGU0VUCQkJCTAKLSNkZWZpbmUgTUFDQl9TUERfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfRkRfT0ZGU0VUCQkJCTEKLSNkZWZpbmUgTUFDQl9GRF9TSVpFCQkJCTEKLSNkZWZpbmUgTUFDQl9CSVRfUkFURV9PRkZTRVQJCQkyCi0jZGVmaW5lIE1BQ0JfQklUX1JBVEVfU0laRQkJCTEKLSNkZWZpbmUgTUFDQl9KRlJBTUVfT0ZGU0VUCQkJMwotI2RlZmluZSBNQUNCX0pGUkFNRV9TSVpFCQkJMQotI2RlZmluZSBNQUNCX0NBRl9PRkZTRVQJCQkJNAotI2RlZmluZSBNQUNCX0NBRl9TSVpFCQkJCTEKLSNkZWZpbmUgTUFDQl9OQkNfT0ZGU0VUCQkJCTUKLSNkZWZpbmUgTUFDQl9OQkNfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfTkNGR1JfTVRJX09GRlNFVAkJCTYKLSNkZWZpbmUgTUFDQl9OQ0ZHUl9NVElfU0laRQkJCTEKLSNkZWZpbmUgTUFDQl9VTklfT0ZGU0VUCQkJCTcKLSNkZWZpbmUgTUFDQl9VTklfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfQklHX09GRlNFVAkJCQk4Ci0jZGVmaW5lIE1BQ0JfQklHX1NJWkUJCQkJMQotI2RlZmluZSBNQUNCX0VBRV9PRkZTRVQJCQkJOQotI2RlZmluZSBNQUNCX0VBRV9TSVpFCQkJCTEKLSNkZWZpbmUgTUFDQl9DTEtfT0ZGU0VUCQkJCTEwCi0jZGVmaW5lIE1BQ0JfQ0xLX1NJWkUJCQkJMgotI2RlZmluZSBNQUNCX1JUWV9PRkZTRVQJCQkJMTIKLSNkZWZpbmUgTUFDQl9SVFlfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfUEFFX09GRlNFVAkJCQkxMwotI2RlZmluZSBNQUNCX1BBRV9TSVpFCQkJCTEKLSNkZWZpbmUgTUFDQl9STTkyMDBfUk1JSV9PRkZTRVQJCQkxMyAvKiBBVDkxUk05MjAwIG9ubHkgKi8KLSNkZWZpbmUgTUFDQl9STTkyMDBfUk1JSV9TSVpFCQkJMSAgLyogQVQ5MVJNOTIwMCBvbmx5ICovCi0jZGVmaW5lIE1BQ0JfUkJPRl9PRkZTRVQJCQkxNAotI2RlZmluZSBNQUNCX1JCT0ZfU0laRQkJCQkyCi0jZGVmaW5lIE1BQ0JfUkxDRV9PRkZTRVQJCQkxNgotI2RlZmluZSBNQUNCX1JMQ0VfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfRFJGQ1NfT0ZGU0VUCQkJMTcKLSNkZWZpbmUgTUFDQl9EUkZDU19TSVpFCQkJCTEKLSNkZWZpbmUgTUFDQl9FRlJIRF9PRkZTRVQJCQkxOAotI2RlZmluZSBNQUNCX0VGUkhEX1NJWkUJCQkJMQotI2RlZmluZSBNQUNCX0lSWEZDU19PRkZTRVQJCQkxOQotI2RlZmluZSBNQUNCX0lSWEZDU19TSVpFCQkJMQorI2RlZmluZSBNQUNCX1NQRF9PRkZTRVQJCTAgLyogU3BlZWQgKi8KKyNkZWZpbmUgTUFDQl9TUERfU0laRQkJMQorI2RlZmluZSBNQUNCX0ZEX09GRlNFVAkJMSAvKiBGdWxsIGR1cGxleCAqLworI2RlZmluZSBNQUNCX0ZEX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9CSVRfUkFURV9PRkZTRVQJMiAvKiBEaXNjYXJkIG5vbi1WTEFOIGZyYW1lcyAqLworI2RlZmluZSBNQUNCX0JJVF9SQVRFX1NJWkUJMQorI2RlZmluZSBNQUNCX0pGUkFNRV9PRkZTRVQJMyAvKiByZXNlcnZlZCAqLworI2RlZmluZSBNQUNCX0pGUkFNRV9TSVpFCTEKKyNkZWZpbmUgTUFDQl9DQUZfT0ZGU0VUCQk0IC8qIENvcHkgYWxsIGZyYW1lcyAqLworI2RlZmluZSBNQUNCX0NBRl9TSVpFCQkxCisjZGVmaW5lIE1BQ0JfTkJDX09GRlNFVAkJNSAvKiBObyBicm9hZGNhc3QgKi8KKyNkZWZpbmUgTUFDQl9OQkNfU0laRQkJMQorI2RlZmluZSBNQUNCX05DRkdSX01USV9PRkZTRVQJNiAvKiBNdWx0aWNhc3QgaGFzaCBlbmFibGUgKi8KKyNkZWZpbmUgTUFDQl9OQ0ZHUl9NVElfU0laRQkxCisjZGVmaW5lIE1BQ0JfVU5JX09GRlNFVAkJNyAvKiBVbmljYXN0IGhhc2ggZW5hYmxlICovCisjZGVmaW5lIE1BQ0JfVU5JX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9CSUdfT0ZGU0VUCQk4IC8qIFJlY2VpdmUgMTUzNiBieXRlIGZyYW1lcyAqLworI2RlZmluZSBNQUNCX0JJR19TSVpFCQkxCisjZGVmaW5lIE1BQ0JfRUFFX09GRlNFVAkJOSAvKiBFeHRlcm5hbCBhZGRyZXNzIG1hdGNoIGVuYWJsZSAqLworI2RlZmluZSBNQUNCX0VBRV9TSVpFCQkxCisjZGVmaW5lIE1BQ0JfQ0xLX09GRlNFVAkJMTAKKyNkZWZpbmUgTUFDQl9DTEtfU0laRQkJMgorI2RlZmluZSBNQUNCX1JUWV9PRkZTRVQJCTEyIC8qIFJldHJ5IHRlc3QgKi8KKyNkZWZpbmUgTUFDQl9SVFlfU0laRQkJMQorI2RlZmluZSBNQUNCX1BBRV9PRkZTRVQJCTEzIC8qIFBhdXNlIGVuYWJsZSAqLworI2RlZmluZSBNQUNCX1BBRV9TSVpFCQkxCisjZGVmaW5lIE1BQ0JfUk05MjAwX1JNSUlfT0ZGU0VUCTEzIC8qIEFUOTFSTTkyMDAgb25seSAqLworI2RlZmluZSBNQUNCX1JNOTIwMF9STUlJX1NJWkUJMSAgLyogQVQ5MVJNOTIwMCBvbmx5ICovCisjZGVmaW5lIE1BQ0JfUkJPRl9PRkZTRVQJMTQgLyogUmVjZWl2ZSBidWZmZXIgb2Zmc2V0ICovCisjZGVmaW5lIE1BQ0JfUkJPRl9TSVpFCQkyCisjZGVmaW5lIE1BQ0JfUkxDRV9PRkZTRVQJMTYgLyogTGVuZ3RoIGZpZWxkIGVycm9yIGZyYW1lIGRpc2NhcmQgKi8KKyNkZWZpbmUgTUFDQl9STENFX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9EUkZDU19PRkZTRVQJMTcgLyogRkNTIHJlbW92ZSAqLworI2RlZmluZSBNQUNCX0RSRkNTX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9FRlJIRF9PRkZTRVQJMTgKKyNkZWZpbmUgTUFDQl9FRlJIRF9TSVpFCQkxCisjZGVmaW5lIE1BQ0JfSVJYRkNTX09GRlNFVAkxOQorI2RlZmluZSBNQUNCX0lSWEZDU19TSVpFCTEKIAogLyogR0VNIHNwZWNpZmljIE5DRkdSIGJpdGZpZWxkcy4gKi8KLSNkZWZpbmUgR0VNX0dCRV9PRkZTRVQJCQkJMTAKLSNkZWZpbmUgR0VNX0dCRV9TSVpFCQkJCTEKLSNkZWZpbmUgR0VNX0NMS19PRkZTRVQJCQkJMTgKLSNkZWZpbmUgR0VNX0NMS19TSVpFCQkJCTMKLSNkZWZpbmUgR0VNX0RCV19PRkZTRVQJCQkJMjEKLSNkZWZpbmUgR0VNX0RCV19TSVpFCQkJCTIKLSNkZWZpbmUgR0VNX1JYQ09FTl9PRkZTRVQJCQkyNAotI2RlZmluZSBHRU1fUlhDT0VOX1NJWkUJCQkJMQorI2RlZmluZSBHRU1fR0JFX09GRlNFVAkJMTAgLyogR2lnYWJpdCBtb2RlIGVuYWJsZSAqLworI2RlZmluZSBHRU1fR0JFX1NJWkUJCTEKKyNkZWZpbmUgR0VNX0NMS19PRkZTRVQJCTE4IC8qIE1EQyBjbG9jayBkaXZpc2lvbiAqLworI2RlZmluZSBHRU1fQ0xLX1NJWkUJCTMKKyNkZWZpbmUgR0VNX0RCV19PRkZTRVQJCTIxIC8qIERhdGEgYnVzIHdpZHRoICovCisjZGVmaW5lIEdFTV9EQldfU0laRQkJMgorI2RlZmluZSBHRU1fUlhDT0VOX09GRlNFVAkyNAorI2RlZmluZSBHRU1fUlhDT0VOX1NJWkUJCTEKIAogLyogQ29uc3RhbnRzIGZvciBkYXRhIGJ1cyB3aWR0aC4gKi8KLSNkZWZpbmUgR0VNX0RCVzMyCQkJCTAKLSNkZWZpbmUgR0VNX0RCVzY0CQkJCTEKLSNkZWZpbmUgR0VNX0RCVzEyOAkJCQkyCisjZGVmaW5lIEdFTV9EQlczMgkJMCAvKiAzMiBiaXQgQU1CQSBBSEIgZGF0YSBidXMgd2lkdGggKi8KKyNkZWZpbmUgR0VNX0RCVzY0CQkxIC8qIDY0IGJpdCBBTUJBIEFIQiBkYXRhIGJ1cyB3aWR0aCAqLworI2RlZmluZSBHRU1fREJXMTI4CQkyIC8qIDEyOCBiaXQgQU1CQSBBSEIgZGF0YSBidXMgd2lkdGggKi8KIAogLyogQml0ZmllbGRzIGluIERNQUNGRy4gKi8KLSNkZWZpbmUgR0VNX0ZCTERPX09GRlNFVAkJCTAKLSNkZWZpbmUgR0VNX0ZCTERPX1NJWkUJCQkJNQotI2RlZmluZSBHRU1fRU5ESUFfT0ZGU0VUCQkJNwotI2RlZmluZSBHRU1fRU5ESUFfU0laRQkJCQkxCi0jZGVmaW5lIEdFTV9SWEJNU19PRkZTRVQJCQk4Ci0jZGVmaW5lIEdFTV9SWEJNU19TSVpFCQkJCTIKLSNkZWZpbmUgR0VNX1RYUEJNU19PRkZTRVQJCQkxMAotI2RlZmluZSBHRU1fVFhQQk1TX1NJWkUJCQkJMQotI2RlZmluZSBHRU1fVFhDT0VOX09GRlNFVAkJCTExCi0jZGVmaW5lIEdFTV9UWENPRU5fU0laRQkJCQkxCi0jZGVmaW5lIEdFTV9SWEJTX09GRlNFVAkJCQkxNgotI2RlZmluZSBHRU1fUlhCU19TSVpFCQkJCTgKLSNkZWZpbmUgR0VNX0REUlBfT0ZGU0VUCQkJCTI0Ci0jZGVmaW5lIEdFTV9ERFJQX1NJWkUJCQkJMQorI2RlZmluZSBHRU1fRkJMRE9fT0ZGU0VUCTAgLyogZml4ZWQgYnVyc3QgbGVuZ3RoIGZvciBETUEgKi8KKyNkZWZpbmUgR0VNX0ZCTERPX1NJWkUJCTUKKyNkZWZpbmUgR0VNX0VORElBX09GRlNFVAk3IC8qIGVuZGlhbiBzd2FwIG1vZGUgZm9yIHBhY2tldCBkYXRhIGFjY2VzcyAqLworI2RlZmluZSBHRU1fRU5ESUFfU0laRQkJMQorI2RlZmluZSBHRU1fUlhCTVNfT0ZGU0VUCTggLyogUlggcGFja2V0IGJ1ZmZlciBtZW1vcnkgc2l6ZSBzZWxlY3QgKi8KKyNkZWZpbmUgR0VNX1JYQk1TX1NJWkUJCTIKKyNkZWZpbmUgR0VNX1RYUEJNU19PRkZTRVQJMTAgLyogVFggcGFja2V0IGJ1ZmZlciBtZW1vcnkgc2l6ZSBzZWxlY3QgKi8KKyNkZWZpbmUgR0VNX1RYUEJNU19TSVpFCQkxCisjZGVmaW5lIEdFTV9UWENPRU5fT0ZGU0VUCTExIC8qIFRYIElQL1RDUC9VRFAgY2hlY2tzdW0gZ2VuIG9mZmxvYWQgKi8KKyNkZWZpbmUgR0VNX1RYQ09FTl9TSVpFCQkxCisjZGVmaW5lIEdFTV9SWEJTX09GRlNFVAkJMTYgLyogRE1BIHJlY2VpdmUgYnVmZmVyIHNpemUgKi8KKyNkZWZpbmUgR0VNX1JYQlNfU0laRQkJOAorI2RlZmluZSBHRU1fRERSUF9PRkZTRVQJCTI0IC8qIGRpc2Nfd2hlbl9ub19haGIgKi8KKyNkZWZpbmUgR0VNX0REUlBfU0laRQkJMQogCiAKIC8qIEJpdGZpZWxkcyBpbiBOU1IgKi8KLSNkZWZpbmUgTUFDQl9OU1JfTElOS19PRkZTRVQJCQkwCi0jZGVmaW5lIE1BQ0JfTlNSX0xJTktfU0laRQkJCTEKLSNkZWZpbmUgTUFDQl9NRElPX09GRlNFVAkJCTEKLSNkZWZpbmUgTUFDQl9NRElPX1NJWkUJCQkJMQotI2RlZmluZSBNQUNCX0lETEVfT0ZGU0VUCQkJMgotI2RlZmluZSBNQUNCX0lETEVfU0laRQkJCQkxCisjZGVmaW5lIE1BQ0JfTlNSX0xJTktfT0ZGU0VUCTAgLyogcGNzX2xpbmtfc3RhdGUgKi8KKyNkZWZpbmUgTUFDQl9OU1JfTElOS19TSVpFCTEKKyNkZWZpbmUgTUFDQl9NRElPX09GRlNFVAkxIC8qIHN0YXR1cyBvZiB0aGUgbWRpb19pbiBwaW4gKi8KKyNkZWZpbmUgTUFDQl9NRElPX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9JRExFX09GRlNFVAkyIC8qIFRoZSBQSFkgbWFuYWdlbWVudCBsb2dpYyBpcyBpZGxlICovCisjZGVmaW5lIE1BQ0JfSURMRV9TSVpFCQkxCiAKIC8qIEJpdGZpZWxkcyBpbiBUU1IgKi8KLSNkZWZpbmUgTUFDQl9VQlJfT0ZGU0VUCQkJCTAKLSNkZWZpbmUgTUFDQl9VQlJfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfQ09MX09GRlNFVAkJCQkxCi0jZGVmaW5lIE1BQ0JfQ09MX1NJWkUJCQkJMQotI2RlZmluZSBNQUNCX1RTUl9STEVfT0ZGU0VUCQkJMgotI2RlZmluZSBNQUNCX1RTUl9STEVfU0laRQkJCTEKLSNkZWZpbmUgTUFDQl9UR09fT0ZGU0VUCQkJCTMKLSNkZWZpbmUgTUFDQl9UR09fU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfQkVYX09GRlNFVAkJCQk0Ci0jZGVmaW5lIE1BQ0JfQkVYX1NJWkUJCQkJMQotI2RlZmluZSBNQUNCX1JNOTIwMF9CTlFfT0ZGU0VUCQkJNCAvKiBBVDkxUk05MjAwIG9ubHkgKi8KLSNkZWZpbmUgTUFDQl9STTkyMDBfQk5RX1NJWkUJCQkxIC8qIEFUOTFSTTkyMDAgb25seSAqLwotI2RlZmluZSBNQUNCX0NPTVBfT0ZGU0VUCQkJNQotI2RlZmluZSBNQUNCX0NPTVBfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfVU5EX09GRlNFVAkJCQk2Ci0jZGVmaW5lIE1BQ0JfVU5EX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX1VCUl9PRkZTRVQJCTAgLyogVXNlZCBiaXQgcmVhZCAqLworI2RlZmluZSBNQUNCX1VCUl9TSVpFCQkxCisjZGVmaW5lIE1BQ0JfQ09MX09GRlNFVAkJMSAvKiBDb2xsaXNpb24gb2NjdXJyZWQgKi8KKyNkZWZpbmUgTUFDQl9DT0xfU0laRQkJMQorI2RlZmluZSBNQUNCX1RTUl9STEVfT0ZGU0VUCTIgLyogUmV0cnkgbGltaXQgZXhjZWVkZWQgKi8KKyNkZWZpbmUgTUFDQl9UU1JfUkxFX1NJWkUJMQorI2RlZmluZSBNQUNCX1RHT19PRkZTRVQJCTMgLyogVHJhbnNtaXQgZ28gKi8KKyNkZWZpbmUgTUFDQl9UR09fU0laRQkJMQorI2RlZmluZSBNQUNCX0JFWF9PRkZTRVQJCTQgLyogVFggZnJhbWUgY29ycnVwdGlvbiBkdWUgdG8gQUhCIGVycm9yICovCisjZGVmaW5lIE1BQ0JfQkVYX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9STTkyMDBfQk5RX09GRlNFVAk0IC8qIEFUOTFSTTkyMDAgb25seSAqLworI2RlZmluZSBNQUNCX1JNOTIwMF9CTlFfU0laRQkxIC8qIEFUOTFSTTkyMDAgb25seSAqLworI2RlZmluZSBNQUNCX0NPTVBfT0ZGU0VUCTUgLyogVHJuYXNtaXQgY29tcGxldGUgKi8KKyNkZWZpbmUgTUFDQl9DT01QX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9VTkRfT0ZGU0VUCQk2IC8qIFRybmFzbWl0IHVuZGVyIHJ1biAqLworI2RlZmluZSBNQUNCX1VORF9TSVpFCQkxCiAKIC8qIEJpdGZpZWxkcyBpbiBSU1IgKi8KLSNkZWZpbmUgTUFDQl9CTkFfT0ZGU0VUCQkJCTAKLSNkZWZpbmUgTUFDQl9CTkFfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfUkVDX09GRlNFVAkJCQkxCi0jZGVmaW5lIE1BQ0JfUkVDX1NJWkUJCQkJMQotI2RlZmluZSBNQUNCX09WUl9PRkZTRVQJCQkJMgotI2RlZmluZSBNQUNCX09WUl9TSVpFCQkJCTEKKyNkZWZpbmUgTUFDQl9CTkFfT0ZGU0VUCQkwIC8qIEJ1ZmZlciBub3QgYXZhaWxhYmxlICovCisjZGVmaW5lIE1BQ0JfQk5BX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9SRUNfT0ZGU0VUCQkxIC8qIEZyYW1lIHJlY2VpdmVkICovCisjZGVmaW5lIE1BQ0JfUkVDX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9PVlJfT0ZGU0VUCQkyIC8qIFJlY2VpdmUgb3ZlcnJ1biAqLworI2RlZmluZSBNQUNCX09WUl9TSVpFCQkxCiAKIC8qIEJpdGZpZWxkcyBpbiBJU1IvSUVSL0lEUi9JTVIgKi8KLSNkZWZpbmUgTUFDQl9NRkRfT0ZGU0VUCQkJCTAKLSNkZWZpbmUgTUFDQl9NRkRfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfUkNPTVBfT0ZGU0VUCQkJMQotI2RlZmluZSBNQUNCX1JDT01QX1NJWkUJCQkJMQotI2RlZmluZSBNQUNCX1JYVUJSX09GRlNFVAkJCTIKLSNkZWZpbmUgTUFDQl9SWFVCUl9TSVpFCQkJCTEKLSNkZWZpbmUgTUFDQl9UWFVCUl9PRkZTRVQJCQkzCi0jZGVmaW5lIE1BQ0JfVFhVQlJfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfSVNSX1RVTkRfT0ZGU0VUCQkJNAotI2RlZmluZSBNQUNCX0lTUl9UVU5EX1NJWkUJCQkxCi0jZGVmaW5lIE1BQ0JfSVNSX1JMRV9PRkZTRVQJCQk1Ci0jZGVmaW5lIE1BQ0JfSVNSX1JMRV9TSVpFCQkJMQotI2RlZmluZSBNQUNCX1RYRVJSX09GRlNFVAkJCTYKLSNkZWZpbmUgTUFDQl9UWEVSUl9TSVpFCQkJCTEKLSNkZWZpbmUgTUFDQl9UQ09NUF9PRkZTRVQJCQk3Ci0jZGVmaW5lIE1BQ0JfVENPTVBfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfSVNSX0xJTktfT0ZGU0VUCQkJOQotI2RlZmluZSBNQUNCX0lTUl9MSU5LX1NJWkUJCQkxCi0jZGVmaW5lIE1BQ0JfSVNSX1JPVlJfT0ZGU0VUCQkJMTAKLSNkZWZpbmUgTUFDQl9JU1JfUk9WUl9TSVpFCQkJMQotI2RlZmluZSBNQUNCX0hSRVNQX09GRlNFVAkJCTExCi0jZGVmaW5lIE1BQ0JfSFJFU1BfU0laRQkJCQkxCi0jZGVmaW5lIE1BQ0JfUEZSX09GRlNFVAkJCQkxMgotI2RlZmluZSBNQUNCX1BGUl9TSVpFCQkJCTEKLSNkZWZpbmUgTUFDQl9QVFpfT0ZGU0VUCQkJCTEzCi0jZGVmaW5lIE1BQ0JfUFRaX1NJWkUJCQkJMQorI2RlZmluZSBNQUNCX01GRF9PRkZTRVQJCTAgLyogTWFuYWdlbWVudCBmcmFtZSBzZW50ICovCisjZGVmaW5lIE1BQ0JfTUZEX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9SQ09NUF9PRkZTRVQJMSAvKiBSZWNlaXZlIGNvbXBsZXRlICovCisjZGVmaW5lIE1BQ0JfUkNPTVBfU0laRQkJMQorI2RlZmluZSBNQUNCX1JYVUJSX09GRlNFVAkyIC8qIFJYIHVzZWQgYml0IHJlYWQgKi8KKyNkZWZpbmUgTUFDQl9SWFVCUl9TSVpFCQkxCisjZGVmaW5lIE1BQ0JfVFhVQlJfT0ZGU0VUCTMgLyogVFggdXNlZCBiaXQgcmVhZCAqLworI2RlZmluZSBNQUNCX1RYVUJSX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9JU1JfVFVORF9PRkZTRVQJNCAvKiBFbmFibGUgVFggYnVmZmVyIHVuZGVyIHJ1biBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTUFDQl9JU1JfVFVORF9TSVpFCTEKKyNkZWZpbmUgTUFDQl9JU1JfUkxFX09GRlNFVAk1IC8qIEVOIHJldHJ5IGV4Y2VlZGVkL2xhdGUgY29sbCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTUFDQl9JU1JfUkxFX1NJWkUJMQorI2RlZmluZSBNQUNCX1RYRVJSX09GRlNFVAk2IC8qIEVOIFRYIGZyYW1lIGNvcnJ1cHQgZnJvbSBlcnJvciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTUFDQl9UWEVSUl9TSVpFCQkxCisjZGVmaW5lIE1BQ0JfVENPTVBfT0ZGU0VUCTcgLyogRW5hYmxlIHRyYW5zbWl0IGNvbXBsZXRlIGludGVycnVwdCAqLworI2RlZmluZSBNQUNCX1RDT01QX1NJWkUJCTEKKyNkZWZpbmUgTUFDQl9JU1JfTElOS19PRkZTRVQJOSAvKiBFbmFibGUgbGluayBjaGFuZ2UgaW50ZXJydXB0ICovCisjZGVmaW5lIE1BQ0JfSVNSX0xJTktfU0laRQkxCisjZGVmaW5lIE1BQ0JfSVNSX1JPVlJfT0ZGU0VUCTEwIC8qIEVuYWJsZSByZWNlaXZlIG92ZXJydW4gaW50ZXJydXB0ICovCisjZGVmaW5lIE1BQ0JfSVNSX1JPVlJfU0laRQkxCisjZGVmaW5lIE1BQ0JfSFJFU1BfT0ZGU0VUCTExIC8qIEVuYWJsZSBocnNlcCBub3QgT0sgaW50ZXJydXB0ICovCisjZGVmaW5lIE1BQ0JfSFJFU1BfU0laRQkJMQorI2RlZmluZSBNQUNCX1BGUl9PRkZTRVQJCTEyIC8qIEVuYWJsZSBwYXVzZSBmcmFtZSB3LyBxdWFudHVtIGludGVycnVwdCAqLworI2RlZmluZSBNQUNCX1BGUl9TSVpFCQkxCisjZGVmaW5lIE1BQ0JfUFRaX09GRlNFVAkJMTMgLyogRW5hYmxlIHBhdXNlIHRpbWUgemVybyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTUFDQl9QVFpfU0laRQkJMQogCiAvKiBCaXRmaWVsZHMgaW4gTUFOICovCi0jZGVmaW5lIE1BQ0JfREFUQV9PRkZTRVQJCQkwCi0jZGVmaW5lIE1BQ0JfREFUQV9TSVpFCQkJCTE2Ci0jZGVmaW5lIE1BQ0JfQ09ERV9PRkZTRVQJCQkxNgotI2RlZmluZSBNQUNCX0NPREVfU0laRQkJCQkyCi0jZGVmaW5lIE1BQ0JfUkVHQV9PRkZTRVQJCQkxOAotI2RlZmluZSBNQUNCX1JFR0FfU0laRQkJCQk1Ci0jZGVmaW5lIE1BQ0JfUEhZQV9PRkZTRVQJCQkyMwotI2RlZmluZSBNQUNCX1BIWUFfU0laRQkJCQk1Ci0jZGVmaW5lIE1BQ0JfUldfT0ZGU0VUCQkJCTI4Ci0jZGVmaW5lIE1BQ0JfUldfU0laRQkJCQkyCi0jZGVmaW5lIE1BQ0JfU09GX09GRlNFVAkJCQkzMAotI2RlZmluZSBNQUNCX1NPRl9TSVpFCQkJCTIKKyNkZWZpbmUgTUFDQl9EQVRBX09GRlNFVAkwIC8qIGRhdGEgKi8KKyNkZWZpbmUgTUFDQl9EQVRBX1NJWkUJCTE2CisjZGVmaW5lIE1BQ0JfQ09ERV9PRkZTRVQJMTYgLyogTXVzdCBiZSB3cml0dGVuIHRvIDEwICovCisjZGVmaW5lIE1BQ0JfQ09ERV9TSVpFCQkyCisjZGVmaW5lIE1BQ0JfUkVHQV9PRkZTRVQJMTggLyogUmVnaXN0ZXIgYWRkcmVzcyAqLworI2RlZmluZSBNQUNCX1JFR0FfU0laRQkJNQorI2RlZmluZSBNQUNCX1BIWUFfT0ZGU0VUCTIzIC8qIFBIWSBhZGRyZXNzICovCisjZGVmaW5lIE1BQ0JfUEhZQV9TSVpFCQk1CisjZGVmaW5lIE1BQ0JfUldfT0ZGU0VUCQkyOCAvKiBPcGVyYXRpb24uIDEwIGlzIHJlYWQuIDAxIGlzIHdyaXRlLiAqLworI2RlZmluZSBNQUNCX1JXX1NJWkUJCTIKKyNkZWZpbmUgTUFDQl9TT0ZfT0ZGU0VUCQkzMCAvKiBNdXN0IGJlIHdyaXR0ZW4gdG8gMSBmb3IgQ2xhdXNlIDIyICovCisjZGVmaW5lIE1BQ0JfU09GX1NJWkUJCTIKIAogLyogQml0ZmllbGRzIGluIFVTUklPIChBVlIzMikgKi8KICNkZWZpbmUgTUFDQl9NSUlfT0ZGU0VUCQkJCTAKQEAgLTI4Niw3ICszMzIsNyBAQAogLyogQml0ZmllbGRzIGluIFVTUklPIChBVDkxKSAqLwogI2RlZmluZSBNQUNCX1JNSUlfT0ZGU0VUCQkJMAogI2RlZmluZSBNQUNCX1JNSUlfU0laRQkJCQkxCi0jZGVmaW5lIEdFTV9SR01JSV9PRkZTRVQJCQkwCS8qIEdFTSBnaWdhYml0IG1vZGUgKi8KKyNkZWZpbmUgR0VNX1JHTUlJX09GRlNFVAkJCTAgLyogR0VNIGdpZ2FiaXQgbW9kZSAqLwogI2RlZmluZSBHRU1fUkdNSUlfU0laRQkJCQkxCiAjZGVmaW5lIE1BQ0JfQ0xLRU5fT0ZGU0VUCQkJMQogI2RlZmluZSBNQUNCX0NMS0VOX1NJWkUJCQkJMQpAQCAtMzg5LDggKzQzNSw3IEBACiAjZGVmaW5lIHF1ZXVlX3dyaXRlbChxdWV1ZSwgcmVnLCB2YWx1ZSkJCQlcCiAJX19yYXdfd3JpdGVsKCh2YWx1ZSksIChxdWV1ZSktPmJwLT5yZWdzICsgKHF1ZXVlKS0+cmVnKQogCi0vKgotICogQ29uZGl0aW9uYWwgR0VNL01BQ0IgbWFjcm9zLiAgVGhlc2UgcGVyZm9ybSB0aGUgb3BlcmF0aW9uIHRvIHRoZSBjb3JyZWN0CisvKiBDb25kaXRpb25hbCBHRU0vTUFDQiBtYWNyb3MuICBUaGVzZSBwZXJmb3JtIHRoZSBvcGVyYXRpb24gdG8gdGhlIGNvcnJlY3QKICAqIHJlZ2lzdGVyIGRlcGVuZGVudCBvbiB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgYSBHRU0gb3IgYSBNQUNCLiAgRm9yIHJlZ2lzdGVycwogICogYW5kIGJpdGZpZWxkcyB0aGF0IGFyZSBjb21tb24gYWNyb3NzIGJvdGggZGV2aWNlcywgdXNlIG1hY2Jfe3JlYWQsd3JpdGV9bAogICogdG8gYXZvaWQgdGhlIGNvc3Qgb2YgdGhlIGNvbmRpdGlvbmFsLgpAQCAtNDEzLDggKzQ1OCw3IEBACiAJCV9fdjsgXAogCX0pCiAKLS8qKgotICogc3RydWN0IG1hY2JfZG1hX2Rlc2MgLSBIYXJkd2FyZSBETUEgZGVzY3JpcHRvcgorLyogc3RydWN0IG1hY2JfZG1hX2Rlc2MgLSBIYXJkd2FyZSBETUEgZGVzY3JpcHRvcgogICogQGFkZHI6IERNQSBhZGRyZXNzIG9mIGRhdGEgYnVmZmVyCiAgKiBAY3RybDogQ29udHJvbCBhbmQgc3RhdHVzIGJpdHMKICAqLwpAQCAtNTAzLDggKzU0Nyw3IEBACiAvKiBsaW1pdCBSWCBjaGVja3N1bSBvZmZsb2FkIHRvIFRDUCBhbmQgVURQIHBhY2tldHMgKi8KICNkZWZpbmUgR0VNX1JYX0NTVU1fQ0hFQ0tFRF9NQVNLCQkyCiAKLS8qKgotICogc3RydWN0IG1hY2JfdHhfc2tiIC0gZGF0YSBhYm91dCBhbiBza2Igd2hpY2ggaXMgYmVpbmcgdHJhbnNtaXR0ZWQKKy8qIHN0cnVjdCBtYWNiX3R4X3NrYiAtIGRhdGEgYWJvdXQgYW4gc2tiIHdoaWNoIGlzIGJlaW5nIHRyYW5zbWl0dGVkCiAgKiBAc2tiOiBza2IgY3VycmVudGx5IGJlaW5nIHRyYW5zbWl0dGVkLCBvbmx5IHNldCBmb3IgdGhlIGxhc3QgYnVmZmVyCiAgKiAgICAgICBvZiB0aGUgZnJhbWUKICAqIEBtYXBwaW5nOiBETUEgYWRkcmVzcyBvZiB0aGUgc2tiJ3MgZnJhZ21lbnQgYnVmZmVyCkBAIC01MTksOCArNTYyLDcgQEAKIAlib29sCQkJbWFwcGVkX2FzX3BhZ2U7CiB9OwogCi0vKgotICogSGFyZHdhcmUtY29sbGVjdGVkIHN0YXRpc3RpY3MuIFVzZWQgd2hlbiB1cGRhdGluZyB0aGUgbmV0d29yaworLyogSGFyZHdhcmUtY29sbGVjdGVkIHN0YXRpc3RpY3MuIFVzZWQgd2hlbiB1cGRhdGluZyB0aGUgbmV0d29yawogICogZGV2aWNlIHN0YXRzIGJ5IGEgcGVyaW9kaWMgdGltZXIuCiAgKi8KIHN0cnVjdCBtYWNiX3N0YXRzIHsKQEAgLTU5NSw2ICs2MzcsMTA3IEBACiAJdTMyCXJ4X3VkcF9jaGVja3N1bV9lcnJvcnM7CiB9OwogCisvKiBEZXNjcmliZXMgdGhlIG5hbWUgYW5kIG9mZnNldCBvZiBhbiBpbmRpdmlkdWFsIHN0YXRpc3RpYyByZWdpc3RlciwgYXMKKyAqIHJldHVybmVkIGJ5IGBldGh0b29sIC1TYC4gQWxzbyBkZXNjcmliZXMgd2hpY2ggbmV0X2RldmljZV9zdGF0cyBzdGF0aXN0aWNzCisgKiB0aGlzIHJlZ2lzdGVyIHNob3VsZCBjb250cmlidXRlIHRvLgorICovCitzdHJ1Y3QgZ2VtX3N0YXRpc3RpYyB7CisJY2hhciBzdGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dOworCWludCBvZmZzZXQ7CisJdTMyIHN0YXRfYml0czsKK307CisKKy8qIEJpdGZpZWxkIGRlZnMgZm9yIG5ldF9kZXZpY2Vfc3RhdCBzdGF0aXN0aWNzICovCisjZGVmaW5lIEdFTV9ORFNfUlhFUlJfT0ZGU0VUCQkwCisjZGVmaW5lIEdFTV9ORFNfUlhMRU5FUlJfT0ZGU0VUCQkxCisjZGVmaW5lIEdFTV9ORFNfUlhPVkVSRVJSX09GRlNFVAkyCisjZGVmaW5lIEdFTV9ORFNfUlhDUkNFUlJfT0ZGU0VUCQkzCisjZGVmaW5lIEdFTV9ORFNfUlhGUkFNRUVSUl9PRkZTRVQJNAorI2RlZmluZSBHRU1fTkRTX1JYRklGT0VSUl9PRkZTRVQJNQorI2RlZmluZSBHRU1fTkRTX1RYRVJSX09GRlNFVAkJNgorI2RlZmluZSBHRU1fTkRTX1RYQUJPUlRFREVSUl9PRkZTRVQJNworI2RlZmluZSBHRU1fTkRTX1RYQ0FSUklFUkVSUl9PRkZTRVQJOAorI2RlZmluZSBHRU1fTkRTX1RYRklGT0VSUl9PRkZTRVQJOQorI2RlZmluZSBHRU1fTkRTX0NPTExJU0lPTlNfT0ZGU0VUCTEwCisKKyNkZWZpbmUgR0VNX1NUQVRfVElUTEUobmFtZSwgdGl0bGUpIEdFTV9TVEFUX1RJVExFX0JJVFMobmFtZSwgdGl0bGUsIDApCisjZGVmaW5lIEdFTV9TVEFUX1RJVExFX0JJVFMobmFtZSwgdGl0bGUsIGJpdHMpIHsJXAorCS5zdGF0X3N0cmluZyA9IHRpdGxlLAkJCQlcCisJLm9mZnNldCA9IEdFTV8jI25hbWUsCQkJCVwKKwkuc3RhdF9iaXRzID0gYml0cwkJCQlcCit9CisKKy8qIGxpc3Qgb2YgZ2VtIHN0YXRpc3RpYyByZWdpc3RlcnMuIFRoZSBuYW1lcyBNVVNUIG1hdGNoIHRoZQorICogY29ycmVzcG9uZGluZyBHRU1fKiBkZWZpbml0aW9ucy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBnZW1fc3RhdGlzdGljIGdlbV9zdGF0aXN0aWNzW10gPSB7CisJR0VNX1NUQVRfVElUTEUoT0NUVFhMLCAidHhfb2N0ZXRzIiksIC8qIE9DVFRYSCBjb21iaW5lZCB3aXRoIE9DVFRYTCAqLworCUdFTV9TVEFUX1RJVExFKFRYQ05ULCAidHhfZnJhbWVzIiksCisJR0VNX1NUQVRfVElUTEUoVFhCQ0NOVCwgInR4X2Jyb2FkY2FzdF9mcmFtZXMiKSwKKwlHRU1fU1RBVF9USVRMRShUWE1DQ05ULCAidHhfbXVsdGljYXN0X2ZyYW1lcyIpLAorCUdFTV9TVEFUX1RJVExFKFRYUEFVU0VDTlQsICJ0eF9wYXVzZV9mcmFtZXMiKSwKKwlHRU1fU1RBVF9USVRMRShUWDY0Q05ULCAidHhfNjRfYnl0ZV9mcmFtZXMiKSwKKwlHRU1fU1RBVF9USVRMRShUWDY1Q05ULCAidHhfNjVfMTI3X2J5dGVfZnJhbWVzIiksCisJR0VNX1NUQVRfVElUTEUoVFgxMjhDTlQsICJ0eF8xMjhfMjU1X2J5dGVfZnJhbWVzIiksCisJR0VNX1NUQVRfVElUTEUoVFgyNTZDTlQsICJ0eF8yNTZfNTExX2J5dGVfZnJhbWVzIiksCisJR0VNX1NUQVRfVElUTEUoVFg1MTJDTlQsICJ0eF81MTJfMTAyM19ieXRlX2ZyYW1lcyIpLAorCUdFTV9TVEFUX1RJVExFKFRYMTAyNENOVCwgInR4XzEwMjRfMTUxOF9ieXRlX2ZyYW1lcyIpLAorCUdFTV9TVEFUX1RJVExFKFRYMTUxOUNOVCwgInR4X2dyZWF0ZXJfdGhhbl8xNTE4X2J5dGVfZnJhbWVzIiksCisJR0VNX1NUQVRfVElUTEVfQklUUyhUWFVSVU5DTlQsICJ0eF91bmRlcnJ1biIsCisJCQkgICAgR0VNX0JJVChORFNfVFhFUlIpfEdFTV9CSVQoTkRTX1RYRklGT0VSUikpLAorCUdFTV9TVEFUX1RJVExFX0JJVFMoU05HTENPTExDTlQsICJ0eF9zaW5nbGVfY29sbGlzaW9uX2ZyYW1lcyIsCisJCQkgICAgR0VNX0JJVChORFNfVFhFUlIpfEdFTV9CSVQoTkRTX0NPTExJU0lPTlMpKSwKKwlHRU1fU1RBVF9USVRMRV9CSVRTKE1VTFRJQ09MTENOVCwgInR4X211bHRpcGxlX2NvbGxpc2lvbl9mcmFtZXMiLAorCQkJICAgIEdFTV9CSVQoTkRTX1RYRVJSKXxHRU1fQklUKE5EU19DT0xMSVNJT05TKSksCisJR0VNX1NUQVRfVElUTEVfQklUUyhFWENFU1NDT0xMQ05ULCAidHhfZXhjZXNzaXZlX2NvbGxpc2lvbnMiLAorCQkJICAgIEdFTV9CSVQoTkRTX1RYRVJSKXwKKwkJCSAgICBHRU1fQklUKE5EU19UWEFCT1JURURFUlIpfAorCQkJICAgIEdFTV9CSVQoTkRTX0NPTExJU0lPTlMpKSwKKwlHRU1fU1RBVF9USVRMRV9CSVRTKExBVEVDT0xMQ05ULCAidHhfbGF0ZV9jb2xsaXNpb25zIiwKKwkJCSAgICBHRU1fQklUKE5EU19UWEVSUil8R0VNX0JJVChORFNfQ09MTElTSU9OUykpLAorCUdFTV9TVEFUX1RJVExFKFRYREVGRVJDTlQsICJ0eF9kZWZlcnJlZF9mcmFtZXMiKSwKKwlHRU1fU1RBVF9USVRMRV9CSVRTKFRYQ1NFTlNFQ05ULCAidHhfY2Fycmllcl9zZW5zZV9lcnJvcnMiLAorCQkJICAgIEdFTV9CSVQoTkRTX1RYRVJSKXxHRU1fQklUKE5EU19DT0xMSVNJT05TKSksCisJR0VNX1NUQVRfVElUTEUoT0NUUlhMLCAicnhfb2N0ZXRzIiksIC8qIE9DVFJYSCBjb21iaW5lZCB3aXRoIE9DVFJYTCAqLworCUdFTV9TVEFUX1RJVExFKFJYQ05ULCAicnhfZnJhbWVzIiksCisJR0VNX1NUQVRfVElUTEUoUlhCUk9BRENOVCwgInJ4X2Jyb2FkY2FzdF9mcmFtZXMiKSwKKwlHRU1fU1RBVF9USVRMRShSWE1VTFRJQ05ULCAicnhfbXVsdGljYXN0X2ZyYW1lcyIpLAorCUdFTV9TVEFUX1RJVExFKFJYUEFVU0VDTlQsICJyeF9wYXVzZV9mcmFtZXMiKSwKKwlHRU1fU1RBVF9USVRMRShSWDY0Q05ULCAicnhfNjRfYnl0ZV9mcmFtZXMiKSwKKwlHRU1fU1RBVF9USVRMRShSWDY1Q05ULCAicnhfNjVfMTI3X2J5dGVfZnJhbWVzIiksCisJR0VNX1NUQVRfVElUTEUoUlgxMjhDTlQsICJyeF8xMjhfMjU1X2J5dGVfZnJhbWVzIiksCisJR0VNX1NUQVRfVElUTEUoUlgyNTZDTlQsICJyeF8yNTZfNTExX2J5dGVfZnJhbWVzIiksCisJR0VNX1NUQVRfVElUTEUoUlg1MTJDTlQsICJyeF81MTJfMTAyM19ieXRlX2ZyYW1lcyIpLAorCUdFTV9TVEFUX1RJVExFKFJYMTAyNENOVCwgInJ4XzEwMjRfMTUxOF9ieXRlX2ZyYW1lcyIpLAorCUdFTV9TVEFUX1RJVExFKFJYMTUxOUNOVCwgInJ4X2dyZWF0ZXJfdGhhbl8xNTE4X2J5dGVfZnJhbWVzIiksCisJR0VNX1NUQVRfVElUTEVfQklUUyhSWFVORFJDTlQsICJyeF91bmRlcnNpemVkX2ZyYW1lcyIsCisJCQkgICAgR0VNX0JJVChORFNfUlhFUlIpfEdFTV9CSVQoTkRTX1JYTEVORVJSKSksCisJR0VNX1NUQVRfVElUTEVfQklUUyhSWE9WUkNOVCwgInJ4X292ZXJzaXplX2ZyYW1lcyIsCisJCQkgICAgR0VNX0JJVChORFNfUlhFUlIpfEdFTV9CSVQoTkRTX1JYTEVORVJSKSksCisJR0VNX1NUQVRfVElUTEVfQklUUyhSWEpBQkNOVCwgInJ4X2phYmJlcnMiLAorCQkJICAgIEdFTV9CSVQoTkRTX1JYRVJSKXxHRU1fQklUKE5EU19SWExFTkVSUikpLAorCUdFTV9TVEFUX1RJVExFX0JJVFMoUlhGQ1NDTlQsICJyeF9mcmFtZV9jaGVja19zZXF1ZW5jZV9lcnJvcnMiLAorCQkJICAgIEdFTV9CSVQoTkRTX1JYRVJSKXxHRU1fQklUKE5EU19SWENSQ0VSUikpLAorCUdFTV9TVEFUX1RJVExFX0JJVFMoUlhMRU5HVEhDTlQsICJyeF9sZW5ndGhfZmllbGRfZnJhbWVfZXJyb3JzIiwKKwkJCSAgICBHRU1fQklUKE5EU19SWEVSUikpLAorCUdFTV9TVEFUX1RJVExFX0JJVFMoUlhTWU1CQ05ULCAicnhfc3ltYm9sX2Vycm9ycyIsCisJCQkgICAgR0VNX0JJVChORFNfUlhFUlIpfEdFTV9CSVQoTkRTX1JYRlJBTUVFUlIpKSwKKwlHRU1fU1RBVF9USVRMRV9CSVRTKFJYQUxJR05DTlQsICJyeF9hbGlnbm1lbnRfZXJyb3JzIiwKKwkJCSAgICBHRU1fQklUKE5EU19SWEVSUil8R0VNX0JJVChORFNfUlhPVkVSRVJSKSksCisJR0VNX1NUQVRfVElUTEVfQklUUyhSWFJFU0VSUkNOVCwgInJ4X3Jlc291cmNlX2Vycm9ycyIsCisJCQkgICAgR0VNX0JJVChORFNfUlhFUlIpfEdFTV9CSVQoTkRTX1JYT1ZFUkVSUikpLAorCUdFTV9TVEFUX1RJVExFX0JJVFMoUlhPUkNOVCwgInJ4X292ZXJydW5zIiwKKwkJCSAgICBHRU1fQklUKE5EU19SWEVSUil8R0VNX0JJVChORFNfUlhGSUZPRVJSKSksCisJR0VNX1NUQVRfVElUTEVfQklUUyhSWElQQ0NOVCwgInJ4X2lwX2hlYWRlcl9jaGVja3N1bV9lcnJvcnMiLAorCQkJICAgIEdFTV9CSVQoTkRTX1JYRVJSKSksCisJR0VNX1NUQVRfVElUTEVfQklUUyhSWFRDUENDTlQsICJyeF90Y3BfY2hlY2tzdW1fZXJyb3JzIiwKKwkJCSAgICBHRU1fQklUKE5EU19SWEVSUikpLAorCUdFTV9TVEFUX1RJVExFX0JJVFMoUlhVRFBDQ05ULCAicnhfdWRwX2NoZWNrc3VtX2Vycm9ycyIsCisJCQkgICAgR0VNX0JJVChORFNfUlhFUlIpKSwKK307CisKKyNkZWZpbmUgR0VNX1NUQVRTX0xFTiBBUlJBWV9TSVpFKGdlbV9zdGF0aXN0aWNzKQorCiBzdHJ1Y3QgbWFjYjsKIAogc3RydWN0IG1hY2Jfb3JfZ2VtX29wcyB7CkBAIC02NzMsNiArODE2LDggQEAKIAlkbWFfYWRkcl90IHNrYl9waHlzYWRkcjsJCS8qIHBoeXMgYWRkciBmcm9tIHBjaV9tYXBfc2luZ2xlICovCiAJaW50IHNrYl9sZW5ndGg7CQkJCS8qIHNhdmVkIHNrYiBsZW5ndGggZm9yIHBjaV91bm1hcF9zaW5nbGUgKi8KIAl1bnNpZ25lZCBpbnQJCW1heF90eF9sZW5ndGg7CisKKwl1NjQJCQlldGh0b29sX3N0YXRzW0dFTV9TVEFUU19MRU5dOwogfTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBtYWNiX2V0aHRvb2xfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiL3NnZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiL3NnZS5jCmluZGV4IGJhYmUyYTkuLjUyNmVhNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYi9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2Ivc2dlLmMKQEAgLTE4NjAsOSArMTg2MCw5IEBACiAJfQogCWNwbC0+aWZmID0gZGV2LT5pZl9wb3J0OwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCWNwbC0+dmxhbl92YWxpZCA9IDE7Ci0JCWNwbC0+dmxhbiA9IGh0b25zKHZsYW5fdHhfdGFnX2dldChza2IpKTsKKwkJY3BsLT52bGFuID0gaHRvbnMoc2tiX3ZsYW5fdGFnX2dldChza2IpKTsKIAkJc3QtPnZsYW5faW5zZXJ0Kys7CiAJfSBlbHNlCiAJCWNwbC0+dmxhbl92YWxpZCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL21jNS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9tYzUuYwppbmRleCBlMTNiN2ZlLi4zMzgzMDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL21jNS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvbWM1LmMKQEAgLTk3LDE0ICs5Nyw2IEBACiAJCQkgICAgICAgRl9EQkdJUlNQVkFMSUQsIDEsIE1BWF9XUklURV9BVFRFTVBUUywgMSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkYmdpX3dyX2FkZHIzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgdjEsIHUzMiB2MiwKLQkJCQkgdTMyIHYzKQotewotCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX01DNV9EQl9EQkdJX1JFUV9BRERSMCwgdjEpOwotCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX01DNV9EQl9EQkdJX1JFUV9BRERSMSwgdjIpOwotCXQzX3dyaXRlX3JlZyhhZGFwdGVyLCBBX01DNV9EQl9EQkdJX1JFUV9BRERSMiwgdjMpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZGJnaV93cl9kYXRhMyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIHYxLCB1MzIgdjIsCiAJCQkJIHUzMiB2MykKIHsKQEAgLTExMywxNCArMTA1LDYgQEAKIAl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9NQzVfREJfREJHSV9SRVFfREFUQTIsIHYzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRiZ2lfcmRfcnNwMyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyICp2MSwgdTMyICp2MiwKLQkJCQl1MzIgKnYzKQotewotCSp2MSA9IHQzX3JlYWRfcmVnKGFkYXB0ZXIsIEFfTUM1X0RCX0RCR0lfUlNQX0RBVEEwKTsKLQkqdjIgPSB0M19yZWFkX3JlZyhhZGFwdGVyLCBBX01DNV9EQl9EQkdJX1JTUF9EQVRBMSk7Ci0JKnYzID0gdDNfcmVhZF9yZWcoYWRhcHRlciwgQV9NQzVfREJfREJHSV9SU1BfREFUQTIpOwotfQotCiAvKgogICogV3JpdGUgZGF0YSB0byB0aGUgVENBTSByZWdpc3RlciBhdCBhZGRyZXNzICgwLCAwLCBhZGRyX2xvKSB1c2luZyB0aGUgVENBTQogICogY29tbWFuZCBjbWQuICBUaGUgZGF0YSB0byBiZSB3cml0dGVuIG11c3QgaGF2ZSBiZWVuIHNldCB1cCBieSB0aGUgY2FsbGVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9zZ2UuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvc2dlLmMKaW5kZXggM2RmY2Y2MC4uZDZhYTYwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL3NnZS5jCkBAIC0xMTQ4LDggKzExNDgsOCBAQAogCWNwbC0+bGVuID0gaHRvbmwoc2tiLT5sZW4pOwogCWNudHJsID0gVl9UWFBLVF9JTlRGKHBpLT5wb3J0X2lkKTsKIAotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCi0JCWNudHJsIHw9IEZfVFhQS1RfVkxBTl9WTEQgfCBWX1RYUEtUX1ZMQU4odmxhbl90eF90YWdfZ2V0KHNrYikpOworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKQorCQljbnRybCB8PSBGX1RYUEtUX1ZMQU5fVkxEIHwgVl9UWFBLVF9WTEFOKHNrYl92bGFuX3RhZ19nZXQoc2tiKSk7CiAKIAl0c29faW5mbyA9IFZfTFNPX01TUyhza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKTsKIAlpZiAodHNvX2luZm8pIHsKQEAgLTEyODIsNyArMTI4Miw3IEBACiAJCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9UWF9DU1VNXSsrOwogCWlmIChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKQogCQlxcy0+cG9ydF9zdGF0c1tTR0VfUFNUQVRfVFNPXSsrOwotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpCiAJCXFzLT5wb3J0X3N0YXRzW1NHRV9QU1RBVF9WTEFOSU5TXSsrOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvdDNfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjMvdDNfaHcuYwppbmRleCBjNzRhODk4Li4xODRhOGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2IzL3QzX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiMy90M19ody5jCkBAIC03MjcsOSArNzI3LDkgQEAKIAkJcC0+eGF1aWNmZ1sxXSA9IHNpbXBsZV9zdHJ0b3VsKHZwZC54YXVpMWNmZ19kYXRhLCBOVUxMLCAxNik7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJcC0+ZXRoX2Jhc2VbaV0gPSBoZXhfdG9fYmluKHZwZC5uYV9kYXRhWzIgKiBpXSkgKiAxNiArCi0JCQkJIGhleF90b19iaW4odnBkLm5hX2RhdGFbMiAqIGkgKyAxXSk7CisJcmV0ID0gaGV4MmJpbihwLT5ldGhfYmFzZSwgdnBkLm5hX2RhdGEsIDYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvTWFrZWZpbGUKaW5kZXggYjg1MjgwNy4uYWU1MGNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L01ha2VmaWxlCkBAIC00LDYgKzQsNiBAQAogCiBvYmotJChDT05GSUdfQ0hFTFNJT19UNCkgKz0gY3hnYjQubwogCi1jeGdiNC1vYmpzIDo9IGN4Z2I0X21haW4ubyBsMnQubyB0NF9ody5vIHNnZS5vCitjeGdiNC1vYmpzIDo9IGN4Z2I0X21haW4ubyBsMnQubyB0NF9ody5vIHNnZS5vIGNsaXBfdGJsLm8KIGN4Z2I0LSQoQ09ORklHX0NIRUxTSU9fVDRfRENCKSArPSAgY3hnYjRfZGNiLm8KIGN4Z2I0LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBjeGdiNF9kZWJ1Z2ZzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY2xpcF90YmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY2xpcF90YmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDYyYTg0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5jCkBAIC0wLDAgKzEsMzE3IEBACisvKgorICogIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDaGVsc2lvIFQ0IEV0aGVybmV0IGRyaXZlciBmb3IgTGludXguCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTQgQ2hlbHNpbyBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFdyaXR0ZW4gYnkgRGVlcGFrIChkZWVwYWsuc0BjaGVsc2lvLmNvbSkKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIExJQ0VOU0UgZmlsZSBpbmNsdWRlZCBpbiB0aGlzCisgKiAgcmVsZWFzZSBmb3IgbGljZW5zaW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxuZXQvYWRkcmNvbmYuaD4KKyNpbmNsdWRlICJjeGdiNC5oIgorI2luY2x1ZGUgImNsaXBfdGJsLmgiCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlwdjRfY2xpcF9oYXNoKHN0cnVjdCBjbGlwX3RibCAqYywgY29uc3QgdTMyICprZXkpCit7CisJdW5zaWduZWQgaW50IGNsaXB0X3NpemVfaGFsZiA9IGMtPmNsaXB0X3NpemUgLyAyOworCisJcmV0dXJuIGpoYXNoXzF3b3JkKCprZXksIDApICUgY2xpcHRfc2l6ZV9oYWxmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpcHY2X2NsaXBfaGFzaChzdHJ1Y3QgY2xpcF90YmwgKmQsIGNvbnN0IHUzMiAqa2V5KQoreworCXVuc2lnbmVkIGludCBjbGlwdF9zaXplX2hhbGYgPSBkLT5jbGlwdF9zaXplIC8gMjsKKwl1MzIgeG9yID0ga2V5WzBdIF4ga2V5WzFdIF4ga2V5WzJdIF4ga2V5WzNdOworCisJcmV0dXJuIGNsaXB0X3NpemVfaGFsZiArCisJCShqaGFzaF8xd29yZCh4b3IsIDApICUgY2xpcHRfc2l6ZV9oYWxmKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBjbGlwX2FkZHJfaGFzaChzdHJ1Y3QgY2xpcF90YmwgKmN0YmwsIGNvbnN0IHUzMiAqYWRkciwKKwkJCQkgICBpbnQgYWRkcl9sZW4pCit7CisJcmV0dXJuIGFkZHJfbGVuID09IDQgPyBpcHY0X2NsaXBfaGFzaChjdGJsLCBhZGRyKSA6CisJCQkJaXB2Nl9jbGlwX2hhc2goY3RibCwgYWRkcik7Cit9CisKK3N0YXRpYyBpbnQgY2xpcDZfZ2V0X21ib3goY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpsaXApCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBuZXRkZXYyYWRhcChkZXYpOworCXN0cnVjdCBmd19jbGlwX2NtZCBjOworCisJbWVtc2V0KCZjLCAwLCBzaXplb2YoYykpOworCWMub3BfdG9fd3JpdGUgPSBodG9ubChGV19DTURfT1BfVihGV19DTElQX0NNRCkgfAorCQkJICAgICAgRldfQ01EX1JFUVVFU1RfRiB8IEZXX0NNRF9XUklURV9GKTsKKwljLmFsbG9jX3RvX2xlbjE2ID0gaHRvbmwoRldfQ0xJUF9DTURfQUxMT0NfRiB8IEZXX0xFTjE2KGMpKTsKKwkqKF9fYmU2NCAqKSZjLmlwX2hpID0gKihfX2JlNjQgKikobGlwLT5zNl9hZGRyKTsKKwkqKF9fYmU2NCAqKSZjLmlwX2xvID0gKihfX2JlNjQgKikobGlwLT5zNl9hZGRyICsgOCk7CisJcmV0dXJuIHQ0X3dyX21ib3hfbWVhdChhZGFwLCBhZGFwLT5tYm94LCAmYywgc2l6ZW9mKGMpLCAmYywgZmFsc2UpOworfQorCitzdGF0aWMgaW50IGNsaXA2X3JlbGVhc2VfbWJveChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpsaXApCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBuZXRkZXYyYWRhcChkZXYpOworCXN0cnVjdCBmd19jbGlwX2NtZCBjOworCisJbWVtc2V0KCZjLCAwLCBzaXplb2YoYykpOworCWMub3BfdG9fd3JpdGUgPSBodG9ubChGV19DTURfT1BfVihGV19DTElQX0NNRCkgfAorCQkJICAgICAgRldfQ01EX1JFUVVFU1RfRiB8IEZXX0NNRF9SRUFEX0YpOworCWMuYWxsb2NfdG9fbGVuMTYgPSBodG9ubChGV19DTElQX0NNRF9GUkVFX0YgfCBGV19MRU4xNihjKSk7CisJKihfX2JlNjQgKikmYy5pcF9oaSA9ICooX19iZTY0ICopKGxpcC0+czZfYWRkcik7CisJKihfX2JlNjQgKikmYy5pcF9sbyA9ICooX19iZTY0ICopKGxpcC0+czZfYWRkciArIDgpOworCXJldHVybiB0NF93cl9tYm94X21lYXQoYWRhcCwgYWRhcC0+bWJveCwgJmMsIHNpemVvZihjKSwgJmMsIGZhbHNlKTsKK30KKworaW50IGN4Z2I0X2NsaXBfZ2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHUzMiAqbGlwLCB1OCB2NikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IG5ldGRldjJhZGFwKGRldik7CisJc3RydWN0IGNsaXBfdGJsICpjdGJsID0gYWRhcC0+Y2xpcHQ7CisJc3RydWN0IGNsaXBfZW50cnkgKmNlLCAqY3RlOworCXUzMiAqYWRkciA9ICh1MzIgKilsaXA7CisJaW50IGhhc2g7CisJaW50IGFkZHJfbGVuOworCWludCByZXQgPSAwOworCisJaWYgKCFjdGJsKQorCQlyZXR1cm4gMDsKKworCWlmICh2NikKKwkJYWRkcl9sZW4gPSAxNjsKKwllbHNlCisJCWFkZHJfbGVuID0gNDsKKworCWhhc2ggPSBjbGlwX2FkZHJfaGFzaChjdGJsLCBhZGRyLCBhZGRyX2xlbik7CisKKwlyZWFkX2xvY2tfYmgoJmN0YmwtPmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3RlLCAmY3RibC0+aGFzaF9saXN0W2hhc2hdLCBsaXN0KSB7CisJCWlmIChhZGRyX2xlbiA9PSBjdGUtPmFkZHJfbGVuICYmCisJCSAgICBtZW1jbXAobGlwLCBjdGUtPmFkZHIsIGN0ZS0+YWRkcl9sZW4pID09IDApIHsKKwkJCWNlID0gY3RlOworCQkJcmVhZF91bmxvY2tfYmgoJmN0YmwtPmxvY2spOworCQkJZ290byBmb3VuZDsKKwkJfQorCX0KKwlyZWFkX3VubG9ja19iaCgmY3RibC0+bG9jayk7CisKKwl3cml0ZV9sb2NrX2JoKCZjdGJsLT5sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmN0YmwtPmNlX2ZyZWVfaGVhZCkpIHsKKwkJY2UgPSBsaXN0X2ZpcnN0X2VudHJ5KCZjdGJsLT5jZV9mcmVlX2hlYWQsCisJCQkJICAgICAgc3RydWN0IGNsaXBfZW50cnksIGxpc3QpOworCQlsaXN0X2RlbCgmY2UtPmxpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmY2UtPmxpc3QpOworCQlzcGluX2xvY2tfaW5pdCgmY2UtPmxvY2spOworCQlhdG9taWNfc2V0KCZjZS0+cmVmY250LCAwKTsKKwkJYXRvbWljX2RlYygmY3RibC0+bmZyZWUpOworCQljZS0+YWRkcl9sZW4gPSBhZGRyX2xlbjsKKwkJbWVtY3B5KGNlLT5hZGRyLCBsaXAsIGFkZHJfbGVuKTsKKwkJbGlzdF9hZGRfdGFpbCgmY2UtPmxpc3QsICZjdGJsLT5oYXNoX2xpc3RbaGFzaF0pOworCQlpZiAodjYpIHsKKwkJCXJldCA9IGNsaXA2X2dldF9tYm94KGRldiwgKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKWxpcCk7CisJCQlpZiAocmV0KSB7CisJCQkJd3JpdGVfdW5sb2NrX2JoKCZjdGJsLT5sb2NrKTsKKwkJCQlyZXR1cm4gcmV0OworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJd3JpdGVfdW5sb2NrX2JoKCZjdGJsLT5sb2NrKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXdyaXRlX3VubG9ja19iaCgmY3RibC0+bG9jayk7Citmb3VuZDoKKwlhdG9taWNfaW5jKCZjZS0+cmVmY250KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjeGdiNF9jbGlwX2dldCk7CisKK3ZvaWQgY3hnYjRfY2xpcF9yZWxlYXNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHUzMiAqbGlwLCB1OCB2NikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IG5ldGRldjJhZGFwKGRldik7CisJc3RydWN0IGNsaXBfdGJsICpjdGJsID0gYWRhcC0+Y2xpcHQ7CisJc3RydWN0IGNsaXBfZW50cnkgKmNlLCAqY3RlOworCXUzMiAqYWRkciA9ICh1MzIgKilsaXA7CisJaW50IGhhc2g7CisJaW50IGFkZHJfbGVuOworCisJaWYgKHY2KQorCQlhZGRyX2xlbiA9IDE2OworCWVsc2UKKwkJYWRkcl9sZW4gPSA0OworCisJaGFzaCA9IGNsaXBfYWRkcl9oYXNoKGN0YmwsIGFkZHIsIGFkZHJfbGVuKTsKKworCXJlYWRfbG9ja19iaCgmY3RibC0+bG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjdGUsICZjdGJsLT5oYXNoX2xpc3RbaGFzaF0sIGxpc3QpIHsKKwkJaWYgKGFkZHJfbGVuID09IGN0ZS0+YWRkcl9sZW4gJiYKKwkJICAgIG1lbWNtcChsaXAsIGN0ZS0+YWRkciwgY3RlLT5hZGRyX2xlbikgPT0gMCkgeworCQkJY2UgPSBjdGU7CisJCQlyZWFkX3VubG9ja19iaCgmY3RibC0+bG9jayk7CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCXJlYWRfdW5sb2NrX2JoKCZjdGJsLT5sb2NrKTsKKworCXJldHVybjsKK2ZvdW5kOgorCXdyaXRlX2xvY2tfYmgoJmN0YmwtPmxvY2spOworCXNwaW5fbG9ja19iaCgmY2UtPmxvY2spOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjZS0+cmVmY250KSkgeworCQlsaXN0X2RlbCgmY2UtPmxpc3QpOworCQlJTklUX0xJU1RfSEVBRCgmY2UtPmxpc3QpOworCQlsaXN0X2FkZF90YWlsKCZjZS0+bGlzdCwgJmN0YmwtPmNlX2ZyZWVfaGVhZCk7CisJCWF0b21pY19pbmMoJmN0YmwtPm5mcmVlKTsKKwkJaWYgKHY2KQorCQkJY2xpcDZfcmVsZWFzZV9tYm94KGRldiwgKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKWxpcCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZjZS0+bG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZjdGJsLT5sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woY3hnYjRfY2xpcF9yZWxlYXNlKTsKKworLyogUmV0cmlldmVzIElQdjYgYWRkcmVzc2VzIGZyb20gYSByb290IGRldmljZSAoYm9uZCwgdmxhbikgYXNzb2NpYXRlZCB3aXRoCisgKiBhIHBoeXNpY2FsIGRldmljZS4KKyAqIFRoZSBwaHlzaWNhbCBkZXZpY2UgcmVmZXJlbmNlIGlzIG5lZWRlZCB0byBzZW5kIHRoZSBhY3R1bCBDTElQIGNvbW1hbmQuCisgKi8KK3N0YXRpYyBpbnQgY3hnYjRfdXBkYXRlX2Rldl9jbGlwKHN0cnVjdCBuZXRfZGV2aWNlICpyb290X2RldiwKKwkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZmE7CisJaW50IHJldCA9IDA7CisKKwlpZGV2ID0gX19pbjZfZGV2X2dldChyb290X2Rldik7CisJaWYgKCFpZGV2KQorCQlyZXR1cm4gcmV0OworCisJcmVhZF9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlmYSwgJmlkZXYtPmFkZHJfbGlzdCwgaWZfbGlzdCkgeworCQlyZXQgPSBjeGdiNF9jbGlwX2dldChkZXYsIChjb25zdCB1MzIgKilpZmEtPmFkZHIuczZfYWRkciwgMSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisJfQorCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBjeGdiNF91cGRhdGVfcm9vdF9kZXZfY2xpcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpyb290X2RldiA9IE5VTEw7CisJaW50IGksIHJldCA9IDA7CisKKwkvKiBGaXJzdCBwb3B1bGF0ZSB0aGUgcmVhbCBuZXQgZGV2aWNlJ3MgSVB2NiBhZGRyZXNzZXMgKi8KKwlyZXQgPSBjeGdiNF91cGRhdGVfZGV2X2NsaXAoZGV2LCBkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBQYXJzZSBhbGwgYm9uZCBhbmQgdmxhbiBkZXZpY2VzIGxheWVyZWQgb24gdG9wIG9mIHRoZSBwaHlzaWNhbCBkZXYgKi8KKwlyb290X2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldF9yY3UoZGV2KTsKKwlpZiAocm9vdF9kZXYpIHsKKwkJcmV0ID0gY3hnYjRfdXBkYXRlX2Rldl9jbGlwKHJvb3RfZGV2LCBkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVkxBTl9OX1ZJRDsgaSsrKSB7CisJCXJvb3RfZGV2ID0gX192bGFuX2ZpbmRfZGV2X2RlZXBfcmN1KGRldiwgaHRvbnMoRVRIX1BfODAyMVEpLCBpKTsKKwkJaWYgKCFyb290X2RldikKKwkJCWNvbnRpbnVlOworCisJCXJldCA9IGN4Z2I0X3VwZGF0ZV9kZXZfY2xpcChyb290X2RldiwgZGV2KTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGN4Z2I0X3VwZGF0ZV9yb290X2Rldl9jbGlwKTsKKworaW50IGNsaXBfdGJsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBzZXEtPnByaXZhdGU7CisJc3RydWN0IGNsaXBfdGJsICpjdGJsID0gYWRhcHRlci0+Y2xpcHQ7CisJc3RydWN0IGNsaXBfZW50cnkgKmNlOworCWNoYXIgaXBbNjBdOworCWludCBpOworCisJcmVhZF9sb2NrX2JoKCZjdGJsLT5sb2NrKTsKKworCXNlcV9wdXRzKHNlcSwgIklQIEFkZHJlc3MgICAgICAgICAgICAgICAgICBVc2Vyc1xuIik7CisJZm9yIChpID0gMCA7IGkgPCBjdGJsLT5jbGlwdF9zaXplOyAgKytpKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY2UsICZjdGJsLT5oYXNoX2xpc3RbaV0sIGxpc3QpIHsKKwkJCWlwWzBdID0gJ1wwJzsKKwkJCWlmIChjZS0+YWRkcl9sZW4gPT0gMTYpCisJCQkJc3ByaW50ZihpcCwgIiVwSTZjIiwgY2UtPmFkZHIpOworCQkJZWxzZQorCQkJCXNwcmludGYoaXAsICIlcEk0YyIsIGNlLT5hZGRyKTsKKwkJCXNlcV9wcmludGYoc2VxLCAiJS0yNXMgICAldVxuIiwgaXAsCisJCQkJICAgYXRvbWljX3JlYWQoJmNlLT5yZWZjbnQpKTsKKwkJfQorCX0KKwlzZXFfcHJpbnRmKHNlcSwgIkZyZWUgY2xpcCBlbnRyaWVzIDogJWRcbiIsIGF0b21pY19yZWFkKCZjdGJsLT5uZnJlZSkpOworCisJcmVhZF91bmxvY2tfYmgoJmN0YmwtPmxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjbGlwX3RibCAqdDRfaW5pdF9jbGlwX3RibCh1bnNpZ25lZCBpbnQgY2xpcHRfc3RhcnQsCisJCQkJICB1bnNpZ25lZCBpbnQgY2xpcHRfZW5kKQoreworCXN0cnVjdCBjbGlwX2VudHJ5ICpjbF9saXN0OworCXN0cnVjdCBjbGlwX3RibCAqY3RibDsKKwl1bnNpZ25lZCBpbnQgY2xpcHRfc2l6ZTsKKwlpbnQgaTsKKworCWlmIChjbGlwdF9zdGFydCA+PSBjbGlwdF9lbmQpCisJCXJldHVybiBOVUxMOworCWNsaXB0X3NpemUgPSBjbGlwdF9lbmQgLSBjbGlwdF9zdGFydCArIDE7CisJaWYgKGNsaXB0X3NpemUgPCBDTElQVF9NSU5fSEFTSF9CVUNLRVRTKQorCQlyZXR1cm4gTlVMTDsKKworCWN0YmwgPSB0NF9hbGxvY19tZW0oc2l6ZW9mKCpjdGJsKSArCisJCQkgICAgY2xpcHRfc2l6ZSpzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCkpOworCWlmICghY3RibCkKKwkJcmV0dXJuIE5VTEw7CisKKwljdGJsLT5jbGlwdF9zdGFydCA9IGNsaXB0X3N0YXJ0OworCWN0YmwtPmNsaXB0X3NpemUgPSBjbGlwdF9zaXplOworCUlOSVRfTElTVF9IRUFEKCZjdGJsLT5jZV9mcmVlX2hlYWQpOworCisJYXRvbWljX3NldCgmY3RibC0+bmZyZWUsIGNsaXB0X3NpemUpOworCXJ3bG9ja19pbml0KCZjdGJsLT5sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBjdGJsLT5jbGlwdF9zaXplOyArK2kpCisJCUlOSVRfTElTVF9IRUFEKCZjdGJsLT5oYXNoX2xpc3RbaV0pOworCisJY2xfbGlzdCA9IHQ0X2FsbG9jX21lbShjbGlwdF9zaXplKnNpemVvZihzdHJ1Y3QgY2xpcF9lbnRyeSkpOworCWN0YmwtPmNsX2xpc3QgPSAodm9pZCAqKWNsX2xpc3Q7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2xpcHRfc2l6ZTsgaSsrKSB7CisJCUlOSVRfTElTVF9IRUFEKCZjbF9saXN0W2ldLmxpc3QpOworCQlsaXN0X2FkZF90YWlsKCZjbF9saXN0W2ldLmxpc3QsICZjdGJsLT5jZV9mcmVlX2hlYWQpOworCX0KKworCXJldHVybiBjdGJsOworfQorCit2b2lkIHQ0X2NsZWFudXBfY2xpcF90Ymwoc3RydWN0IGFkYXB0ZXIgKmFkYXApCit7CisJc3RydWN0IGNsaXBfdGJsICpjdGJsID0gYWRhcC0+Y2xpcHQ7CisKKwlpZiAoY3RibCkgeworCQlpZiAoY3RibC0+Y2xfbGlzdCkKKwkJCXQ0X2ZyZWVfbWVtKGN0YmwtPmNsX2xpc3QpOworCQl0NF9mcmVlX21lbShjdGJsKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHQ0X2NsZWFudXBfY2xpcF90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jbGlwX3RibC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYWJhMDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2NsaXBfdGJsLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgQ2hlbHNpbyBUNCBFdGhlcm5ldCBkcml2ZXIgZm9yIExpbnV4LgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE0IENoZWxzaW8gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBXcml0dGVuIGJ5IERlZXBhayAoZGVlcGFrLnNAY2hlbHNpby5jb20pCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW5jbHVkZWQgaW4gdGhpcworICogIHJlbGVhc2UgZm9yIGxpY2Vuc2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKyAqLworCitzdHJ1Y3QgY2xpcF9lbnRyeSB7CisJc3BpbmxvY2tfdCBsb2NrOwkvKiBIb2xkIHdoaWxlIG1vZGlmeWluZyBjbGlwIHJlZmVyZW5jZSAqLworCWF0b21pY190IHJlZmNudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdTMyIGFkZHJbNF07CisJaW50IGFkZHJfbGVuOworfTsKKworc3RydWN0IGNsaXBfdGJsIHsKKwl1bnNpZ25lZCBpbnQgY2xpcHRfc3RhcnQ7CisJdW5zaWduZWQgaW50IGNsaXB0X3NpemU7CisJcndsb2NrX3QgbG9jazsKKwlhdG9taWNfdCBuZnJlZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNlX2ZyZWVfaGVhZDsKKwl2b2lkICpjbF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgaGFzaF9saXN0WzBdOworfTsKKworZW51bSB7CisJQ0xJUFRfTUlOX0hBU0hfQlVDS0VUUyA9IDIsCit9OworCitzdHJ1Y3QgY2xpcF90YmwgKnQ0X2luaXRfY2xpcF90YmwodW5zaWduZWQgaW50IGNsaXB0X3N0YXJ0LAorCQkJCSAgdW5zaWduZWQgaW50IGNsaXB0X2VuZCk7CitpbnQgY3hnYjRfY2xpcF9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTMyICpsaXAsIHU4IHY2KTsKK3ZvaWQgY3hnYjRfY2xpcF9yZWxlYXNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHUzMiAqbGlwLCB1OCB2Nik7CitpbnQgY2xpcF90Ymxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdik7CitpbnQgY3hnYjRfdXBkYXRlX3Jvb3RfZGV2X2NsaXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIHQ0X2NsZWFudXBfY2xpcF90Ymwoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNC5oCmluZGV4IDVhYjVjMzEuLmQ2Y2RhMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjQuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0LmgKQEAgLTQ5LDE2ICs0OSw2IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAiY3hnYjRfdWxkLmgiCiAKLSNkZWZpbmUgVDRGV19WRVJTSU9OX01BSk9SIDB4MDEKLSNkZWZpbmUgVDRGV19WRVJTSU9OX01JTk9SIDB4MEMKLSNkZWZpbmUgVDRGV19WRVJTSU9OX01JQ1JPIDB4MTkKLSNkZWZpbmUgVDRGV19WRVJTSU9OX0JVSUxEIDB4MDAKLQotI2RlZmluZSBUNUZXX1ZFUlNJT05fTUFKT1IgMHgwMQotI2RlZmluZSBUNUZXX1ZFUlNJT05fTUlOT1IgMHgwQwotI2RlZmluZSBUNUZXX1ZFUlNJT05fTUlDUk8gMHgxOQotI2RlZmluZSBUNUZXX1ZFUlNJT05fQlVJTEQgMHgwMAotCiAjZGVmaW5lIENIX1dBUk4oYWRhcCwgZm10LCAuLi4pIGRldl93YXJuKGFkYXAtPnBkZXZfZGV2LCBmbXQsICMjIF9fVkFfQVJHU19fKQogCiBlbnVtIHsKQEAgLTIzMSw2ICsyMjEsNyBAQAogc3RydWN0IHRwX3BhcmFtcyB7CiAJdW5zaWduZWQgaW50IG50eGNoYW47ICAgICAgICAvKiAjIG9mIFR4IGNoYW5uZWxzICovCiAJdW5zaWduZWQgaW50IHRyZTsgICAgICAgICAgICAvKiBsb2cyIG9mIGNvcmUgY2xvY2tzIHBlciBUUCB0aWNrICovCisJdW5zaWduZWQgaW50IGxhX21hc2s7ICAgICAgICAvKiB3aGF0IGV2ZW50cyBhcmUgcmVjb3JkZWQgYnkgVFAgTEEgKi8KIAl1bnNpZ25lZCBzaG9ydCB0eF9tb2RxX21hcDsgIC8qIFRYIG1vZHVsYXRpb24gc2NoZWR1bGVyIHF1ZXVlIHRvICovCiAJCQkJICAgICAvKiBjaGFubmVsIG1hcCAqLwogCkBAIC0yOTAsMTEgKzI4MSwyMSBAQAogCVQ1X0xBU1RfUkVWCT0gVDVfQTEsCiB9OwogCitzdHJ1Y3QgZGV2bG9nX3BhcmFtcyB7CisJdTMyIG1lbXR5cGU7ICAgICAgICAgICAgICAgICAgICAvKiB3aGljaCBtZW1vcnkgKEVEQzAsIEVEQzEsIE1DKSAqLworCXUzMiBzdGFydDsgICAgICAgICAgICAgICAgICAgICAgLyogc3RhcnQgb2YgbG9nIGluIGZpcm13YXJlIG1lbW9yeSAqLworCXUzMiBzaXplOyAgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBsb2cgKi8KK307CisKIHN0cnVjdCBhZGFwdGVyX3BhcmFtcyB7CiAJc3RydWN0IHNnZV9wYXJhbXMgc2dlOwogCXN0cnVjdCB0cF9wYXJhbXMgIHRwOwogCXN0cnVjdCB2cGRfcGFyYW1zIHZwZDsKIAlzdHJ1Y3QgcGNpX3BhcmFtcyBwY2k7CisJc3RydWN0IGRldmxvZ19wYXJhbXMgZGV2bG9nOworCWVudW0gcGNpZV9tZW13aW4gZHJ2X21lbXdpbjsKKworCXVuc2lnbmVkIGludCBjaW1fbGFfc2l6ZTsKIAogCXVuc2lnbmVkIGludCBzZl9zaXplOyAgICAgICAgICAgICAvKiBzZXJpYWwgZmxhc2ggc2l6ZSBpbiBieXRlcyAqLwogCXVuc2lnbmVkIGludCBzZl9uc2VjOyAgICAgICAgICAgICAvKiAjIG9mIGZsYXNoIHNlY3RvcnMgKi8KQEAgLTQ3Niw2ICs0NzcsMjIgQEAKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OyAgLyogYXNzb2NpYXRlZCBuZXQgZGV2aWNlICovCiAJcnNwcV9oYW5kbGVyX3QgaGFuZGxlcjsKKyNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTAorI2RlZmluZSBDWEdCX1BPTExfU1RBVEVfSURMRQkJMAorI2RlZmluZSBDWEdCX1BPTExfU1RBVEVfTkFQSQkJQklUKDApIC8qIE5BUEkgb3ducyB0aGlzIHBvbGwgKi8KKyNkZWZpbmUgQ1hHQl9QT0xMX1NUQVRFX1BPTEwJCUJJVCgxKSAvKiBwb2xsIG93bnMgdGhpcyBwb2xsICovCisjZGVmaW5lIENYR0JfUE9MTF9TVEFURV9OQVBJX1lJRUxECUJJVCgyKSAvKiBOQVBJIHlpZWxkZWQgdGhpcyBwb2xsICovCisjZGVmaW5lIENYR0JfUE9MTF9TVEFURV9QT0xMX1lJRUxECUJJVCgzKSAvKiBwb2xsIHlpZWxkZWQgdGhpcyBwb2xsICovCisjZGVmaW5lIENYR0JfUE9MTF9ZSUVMRAkJCShDWEdCX1BPTExfU1RBVEVfTkFQSV9ZSUVMRCB8ICAgXAorCQkJCQkgQ1hHQl9QT0xMX1NUQVRFX1BPTExfWUlFTEQpCisjZGVmaW5lIENYR0JfUE9MTF9MT0NLRUQJCShDWEdCX1BPTExfU1RBVEVfTkFQSSB8ICAgICAgICAgXAorCQkJCQkgQ1hHQl9QT0xMX1NUQVRFX1BPTEwpCisjZGVmaW5lIENYR0JfUE9MTF9VU0VSX1BFTkQJCShDWEdCX1BPTExfU1RBVEVfUE9MTCB8ICAgICAgICAgXAorCQkJCQkgQ1hHQl9QT0xMX1NUQVRFX1BPTExfWUlFTEQpCisJdW5zaWduZWQgaW50IGJwb2xsX3N0YXRlOworCXNwaW5sb2NrX3QgYnBvbGxfbG9jazsJCS8qIGxvY2sgZm9yIGJ1c3kgcG9sbCAqLworI2VuZGlmIC8qIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMICovCisKIH07CiAKIHN0cnVjdCBzZ2VfZXRoX3N0YXRzIHsgICAgICAgICAgICAgIC8qIEV0aGVybmV0IHF1ZXVlIHN0YXRpc3RpY3MgKi8KQEAgLTY1OCw2ICs2NzUsOSBAQAogCXVuc2lnbmVkIGludCBsMnRfc3RhcnQ7CiAJdW5zaWduZWQgaW50IGwydF9lbmQ7CiAJc3RydWN0IGwydF9kYXRhICpsMnQ7CisJdW5zaWduZWQgaW50IGNsaXB0X3N0YXJ0OworCXVuc2lnbmVkIGludCBjbGlwdF9lbmQ7CisJc3RydWN0IGNsaXBfdGJsICpjbGlwdDsKIAl2b2lkICp1bGRfaGFuZGxlW0NYR0I0X1VMRF9NQVhdOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdF9ub2RlOwogCXN0cnVjdCBsaXN0X2hlYWQgcmN1X25vZGU7CkBAIC04NzcsNiArODk3LDEwMiBAQAogCXJldHVybiBuZXRkZXYycGluZm8oZGV2KS0+YWRhcHRlcjsKIH0KIAorI2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMCitzdGF0aWMgaW5saW5lIHZvaWQgY3hnYl9idXN5X3BvbGxfaW5pdF9sb2NrKHN0cnVjdCBzZ2VfcnNwcSAqcSkKK3sKKwlzcGluX2xvY2tfaW5pdCgmcS0+YnBvbGxfbG9jayk7CisJcS0+YnBvbGxfc3RhdGUgPSBDWEdCX1BPTExfU1RBVEVfSURMRTsKK30KKworc3RhdGljIGlubGluZSBib29sIGN4Z2JfcG9sbF9sb2NrX25hcGkoc3RydWN0IHNnZV9yc3BxICpxKQoreworCWJvb2wgcmMgPSB0cnVlOworCisJc3Bpbl9sb2NrKCZxLT5icG9sbF9sb2NrKTsKKwlpZiAocS0+YnBvbGxfc3RhdGUgJiBDWEdCX1BPTExfTE9DS0VEKSB7CisJCXEtPmJwb2xsX3N0YXRlIHw9IENYR0JfUE9MTF9TVEFURV9OQVBJX1lJRUxEOworCQlyYyA9IGZhbHNlOworCX0gZWxzZSB7CisJCXEtPmJwb2xsX3N0YXRlID0gQ1hHQl9QT0xMX1NUQVRFX05BUEk7CisJfQorCXNwaW5fdW5sb2NrKCZxLT5icG9sbF9sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjeGdiX3BvbGxfdW5sb2NrX25hcGkoc3RydWN0IHNnZV9yc3BxICpxKQoreworCWJvb2wgcmMgPSBmYWxzZTsKKworCXNwaW5fbG9jaygmcS0+YnBvbGxfbG9jayk7CisJaWYgKHEtPmJwb2xsX3N0YXRlICYgQ1hHQl9QT0xMX1NUQVRFX1BPTExfWUlFTEQpCisJCXJjID0gdHJ1ZTsKKwlxLT5icG9sbF9zdGF0ZSA9IENYR0JfUE9MTF9TVEFURV9JRExFOworCXNwaW5fdW5sb2NrKCZxLT5icG9sbF9sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjeGdiX3BvbGxfbG9ja19wb2xsKHN0cnVjdCBzZ2VfcnNwcSAqcSkKK3sKKwlib29sIHJjID0gdHJ1ZTsKKworCXNwaW5fbG9ja19iaCgmcS0+YnBvbGxfbG9jayk7CisJaWYgKHEtPmJwb2xsX3N0YXRlICYgQ1hHQl9QT0xMX0xPQ0tFRCkgeworCQlxLT5icG9sbF9zdGF0ZSB8PSBDWEdCX1BPTExfU1RBVEVfUE9MTF9ZSUVMRDsKKwkJcmMgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlxLT5icG9sbF9zdGF0ZSB8PSBDWEdCX1BPTExfU1RBVEVfUE9MTDsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnEtPmJwb2xsX2xvY2spOworCXJldHVybiByYzsKK30KKworc3RhdGljIGlubGluZSBib29sIGN4Z2JfcG9sbF91bmxvY2tfcG9sbChzdHJ1Y3Qgc2dlX3JzcHEgKnEpCit7CisJYm9vbCByYyA9IGZhbHNlOworCisJc3Bpbl9sb2NrX2JoKCZxLT5icG9sbF9sb2NrKTsKKwlpZiAocS0+YnBvbGxfc3RhdGUgJiBDWEdCX1BPTExfU1RBVEVfUE9MTF9ZSUVMRCkKKwkJcmMgPSB0cnVlOworCXEtPmJwb2xsX3N0YXRlID0gQ1hHQl9QT0xMX1NUQVRFX0lETEU7CisJc3Bpbl91bmxvY2tfYmgoJnEtPmJwb2xsX2xvY2spOworCXJldHVybiByYzsKK30KKworc3RhdGljIGlubGluZSBib29sIGN4Z2JfcG9sbF9idXN5X3BvbGxpbmcoc3RydWN0IHNnZV9yc3BxICpxKQoreworCXJldHVybiBxLT5icG9sbF9zdGF0ZSAmIENYR0JfUE9MTF9VU0VSX1BFTkQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGN4Z2JfYnVzeV9wb2xsX2luaXRfbG9jayhzdHJ1Y3Qgc2dlX3JzcHEgKnEpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjeGdiX3BvbGxfbG9ja19uYXBpKHN0cnVjdCBzZ2VfcnNwcSAqcSkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGN4Z2JfcG9sbF91bmxvY2tfbmFwaShzdHJ1Y3Qgc2dlX3JzcHEgKnEpCit7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY3hnYl9wb2xsX2xvY2tfcG9sbChzdHJ1Y3Qgc2dlX3JzcHEgKnEpCit7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY3hnYl9wb2xsX3VubG9ja19wb2xsKHN0cnVjdCBzZ2VfcnNwcSAqcSkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBjeGdiX3BvbGxfYnVzeV9wb2xsaW5nKHN0cnVjdCBzZ2VfcnNwcSAqcSkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisjZW5kaWYgLyogQ09ORklHX05FVF9SWF9CVVNZX1BPTEwgKi8KKwogdm9pZCB0NF9vc19wb3J0bW9kX2NoYW5nZWQoY29uc3Qgc3RydWN0IGFkYXB0ZXIgKmFkYXAsIGludCBwb3J0X2lkKTsKIHZvaWQgdDRfb3NfbGlua19jaGFuZ2VkKHN0cnVjdCBhZGFwdGVyICphZGFwLCBpbnQgcG9ydF9pZCwgaW50IGxpbmtfc3RhdCk7CiAKQEAgLTkwNSw2ICsxMDIxLDcgQEAKIGludCB0NF9zZ2VfaW5pdChzdHJ1Y3QgYWRhcHRlciAqYWRhcCk7CiB2b2lkIHQ0X3NnZV9zdGFydChzdHJ1Y3QgYWRhcHRlciAqYWRhcCk7CiB2b2lkIHQ0X3NnZV9zdG9wKHN0cnVjdCBhZGFwdGVyICphZGFwKTsKK2ludCBjeGdiX2J1c3lfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpOwogZXh0ZXJuIGludCBkYmZpZm9faW50X3RocmVzaDsKIAogI2RlZmluZSBmb3JfZWFjaF9wb3J0KGFkYXB0ZXIsIGl0ZXIpIFwKQEAgLTk5NSwxMiArMTExMiwxNiBAQAogCiBpbnQgdDRfc2VlcHJvbV93cChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgYm9vbCBlbmFibGUpOwogaW50IGdldF92cGRfcGFyYW1zKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgdnBkX3BhcmFtcyAqcCk7CitpbnQgdDRfcmVhZF9mbGFzaChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50IGFkZHIsCisJCSAgdW5zaWduZWQgaW50IG53b3JkcywgdTMyICpkYXRhLCBpbnQgYnl0ZV9vcmllbnRlZCk7CiBpbnQgdDRfbG9hZF9mdyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgY29uc3QgdTggKmZ3X2RhdGEsIHVuc2lnbmVkIGludCBzaXplKTsKK2ludCB0NF9md2NhY2hlKHN0cnVjdCBhZGFwdGVyICphZGFwLCBlbnVtIGZ3X3BhcmFtc19wYXJhbV9kZXZfZndjYWNoZSBvcCk7CiBpbnQgdDRfZndfdXBncmFkZShzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdW5zaWduZWQgaW50IG1ib3gsCiAJCSAgY29uc3QgdTggKmZ3X2RhdGEsIHVuc2lnbmVkIGludCBzaXplLCBpbnQgZm9yY2UpOwogdW5zaWduZWQgaW50IHQ0X2ZsYXNoX2NmZ19hZGRyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKTsKIGludCB0NF9nZXRfZndfdmVyc2lvbihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyICp2ZXJzKTsKIGludCB0NF9nZXRfdHBfdmVyc2lvbihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyICp2ZXJzKTsKK2ludCB0NF9nZXRfZXhwcm9tX3ZlcnNpb24oc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqdmVycyk7CiBpbnQgdDRfcHJlcF9mdyhzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgc3RydWN0IGZ3X2luZm8gKmZ3X2luZm8sCiAJICAgICAgIGNvbnN0IHU4ICpmd19kYXRhLCB1bnNpZ25lZCBpbnQgZndfc2l6ZSwKIAkgICAgICAgc3RydWN0IGZ3X2hkciAqY2FyZF9mdywgZW51bSBkZXZfc3RhdGUgc3RhdGUsIGludCAqcmVzZXQpOwpAQCAtMTAxMyw2ICsxMTM0LDggQEAKIAkJICAgICAgdTY0ICpwYmFyMl9xb2Zmc2V0LAogCQkgICAgICB1bnNpZ25lZCBpbnQgKnBiYXIyX3FpZCk7CiAKK3Vuc2lnbmVkIGludCBxdGltZXJfdmFsKGNvbnN0IHN0cnVjdCBhZGFwdGVyICphZGFwLAorCQkJY29uc3Qgc3RydWN0IHNnZV9yc3BxICpxKTsKIGludCB0NF9pbml0X3NnZV9wYXJhbXMoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpOwogaW50IHQ0X2luaXRfdHBfcGFyYW1zKHN0cnVjdCBhZGFwdGVyICphZGFwKTsKIGludCB0NF9maWx0ZXJfZmllbGRfc2hpZnQoY29uc3Qgc3RydWN0IGFkYXB0ZXIgKmFkYXAsIGludCBmaWx0ZXJfc2VsKTsKQEAgLTEwMjIsMjAgKzExNDUsNDYgQEAKIAkJCWludCBzdGFydCwgaW50IG4sIGNvbnN0IHUxNiAqcnNwcSwgdW5zaWduZWQgaW50IG5yc3BxKTsKIGludCB0NF9jb25maWdfZ2xibF9yc3Moc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBtYm94LCB1bnNpZ25lZCBpbnQgbW9kZSwKIAkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncyk7CitpbnQgdDRfcmVhZF9yc3Moc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUxNiAqZW50cmllcyk7Cit2b2lkIHQ0X3JlYWRfcnNzX2tleShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyICprZXkpOwordm9pZCB0NF93cml0ZV9yc3Nfa2V5KHN0cnVjdCBhZGFwdGVyICphZGFwLCBjb25zdCB1MzIgKmtleSwgaW50IGlkeCk7Cit2b2lkIHQ0X3JlYWRfcnNzX3BmX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50IGluZGV4LAorCQkJICAgdTMyICp2YWxwKTsKK3ZvaWQgdDRfcmVhZF9yc3NfdmZfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCQkgICB1MzIgKnZmbCwgdTMyICp2ZmgpOwordTMyIHQ0X3JlYWRfcnNzX3BmX21hcChzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7Cit1MzIgdDRfcmVhZF9yc3NfcGZfbWFzayhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcik7CisKIGludCB0NF9tY19yZWFkKHN0cnVjdCBhZGFwdGVyICphZGFwLCBpbnQgaWR4LCB1MzIgYWRkciwgX19iZTMyICpkYXRhLAogCSAgICAgICB1NjQgKnBhcml0eSk7CiBpbnQgdDRfZWRjX3JlYWQoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIGludCBpZHgsIHUzMiBhZGRyLCBfX2JlMzIgKmRhdGEsCiAJCXU2NCAqcGFyaXR5KTsKK3ZvaWQgdDRfcG10eF9nZXRfc3RhdHMoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHUzMiBjbnRbXSwgdTY0IGN5Y2xlc1tdKTsKK3ZvaWQgdDRfcG1yeF9nZXRfc3RhdHMoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHUzMiBjbnRbXSwgdTY0IGN5Y2xlc1tdKTsKK2ludCB0NF9yZWFkX2NpbV9pYnEoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHVuc2lnbmVkIGludCBxaWQsIHUzMiAqZGF0YSwKKwkJICAgIHNpemVfdCBuKTsKK2ludCB0NF9yZWFkX2NpbV9vYnEoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHVuc2lnbmVkIGludCBxaWQsIHUzMiAqZGF0YSwKKwkJICAgIHNpemVfdCBuKTsKK2ludCB0NF9jaW1fcmVhZChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdW5zaWduZWQgaW50IGFkZHIsIHVuc2lnbmVkIGludCBuLAorCQl1bnNpZ25lZCBpbnQgKnZhbHApOworaW50IHQ0X2NpbV93cml0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdW5zaWduZWQgaW50IGFkZHIsIHVuc2lnbmVkIGludCBuLAorCQkgY29uc3QgdW5zaWduZWQgaW50ICp2YWxwKTsKK2ludCB0NF9jaW1fcmVhZF9sYShzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdTMyICpsYV9idWYsIHVuc2lnbmVkIGludCAqd3JwdHIpOwordm9pZCB0NF9yZWFkX2NpbXFfY2ZnKHN0cnVjdCBhZGFwdGVyICphZGFwLCB1MTYgKmJhc2UsIHUxNiAqc2l6ZSwgdTE2ICp0aHJlcyk7CiBjb25zdCBjaGFyICp0NF9nZXRfcG9ydF90eXBlX2Rlc2NyaXB0aW9uKGVudW0gZndfcG9ydF90eXBlIHBvcnRfdHlwZSk7CiB2b2lkIHQ0X2dldF9wb3J0X3N0YXRzKHN0cnVjdCBhZGFwdGVyICphZGFwLCBpbnQgaWR4LCBzdHJ1Y3QgcG9ydF9zdGF0cyAqcCk7CiB2b2lkIHQ0X3JlYWRfbXR1X3RibChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdTE2ICptdHVzLCB1OCAqbXR1X2xvZyk7Cit2b2lkIHQ0X3JlYWRfY29uZ190Ymwoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHUxNiBpbmNyW05NVFVTXVtOQ0NUUkxfV0lOXSk7CiB2b2lkIHQ0X3RwX3dyX2JpdHNfaW5kaXJlY3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHVuc2lnbmVkIGludCBhZGRyLAogCQkJICAgIHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgdmFsKTsKK3ZvaWQgdDRfdHBfcmVhZF9sYShzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdTY0ICpsYV9idWYsIHVuc2lnbmVkIGludCAqd3JwdHIpOwogdm9pZCB0NF90cF9nZXRfdGNwX3N0YXRzKHN0cnVjdCBhZGFwdGVyICphZGFwLCBzdHJ1Y3QgdHBfdGNwX3N0YXRzICp2NCwKIAkJCSBzdHJ1Y3QgdHBfdGNwX3N0YXRzICp2Nik7CiB2b2lkIHQ0X2xvYWRfbXR1cyhzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgY29uc3QgdW5zaWduZWQgc2hvcnQgKm10dXMsCiAJCSAgY29uc3QgdW5zaWduZWQgc2hvcnQgKmFscGhhLCBjb25zdCB1bnNpZ25lZCBzaG9ydCAqYmV0YSk7CiAKK3ZvaWQgdDRfdWxwcnhfcmVhZF9sYShzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdTMyICpsYV9idWYpOworCiB2b2lkIHQ0X21rX2ZpbHRkZWx3cih1bnNpZ25lZCBpbnQgZnRpZCwgc3RydWN0IGZ3X2ZpbHRlcl93ciAqd3IsIGludCBxaWQpOwogCiB2b2lkIHQ0X3dvbF9tYWdpY19lbmFibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHVuc2lnbmVkIGludCBwb3J0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kY2IuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGNiLmMKaW5kZXggYTM1ZDFlYy4uNjA3NDY4MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGNiLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kY2IuYwpAQCAtMjIsNyArMjIsNyBAQAogCiAvKiBEQ0J4IHZlcnNpb24gY29udHJvbAogICovCi1jaGFyICpkY2JfdmVyX2FycmF5W10gPSB7CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRjYl92ZXJfYXJyYXlbXSA9IHsKIAkiVW5rbm93biIsCiAJIkRDQngtQ0lOIiwKIAkiRENCeC1DRUUgMS4wMSIsCkBAIC00MjgsNyArNDI4LDEwIEBACiAJfQogCSpwZ2lkID0gKGJlMzJfdG9fY3B1KHBjbWQudS5kY2IucGdpZC5wZ2lkKSA+PiAodGMgKiA0KSkgJiAweGY7CiAKLQlJTklUX1BPUlRfRENCX1JFQURfUEVFUl9DTUQocGNtZCwgcGktPnBvcnRfaWQpOworCWlmIChsb2NhbCkKKwkJSU5JVF9QT1JUX0RDQl9SRUFEX0xPQ0FMX0NNRChwY21kLCBwaS0+cG9ydF9pZCk7CisJZWxzZQorCQlJTklUX1BPUlRfRENCX1JFQURfUEVFUl9DTUQocGNtZCwgcGktPnBvcnRfaWQpOwogCXBjbWQudS5kY2IucGdyYXRlLnR5cGUgPSBGV19QT1JUX0RDQl9UWVBFX1BHUkFURTsKIAllcnIgPSB0NF93cl9tYm94KGFkYXAsIGFkYXAtPm1ib3gsICZwY21kLCBzaXplb2YocGNtZCksICZwY21kKTsKIAlpZiAoZXJyICE9IEZXX1BPUlRfRENCX0NGR19TVUNDRVNTKSB7CkBAIC05MDAsNiArOTAzLDg4IEBACiAJCShkY2ItPnN1cHBvcnRlZCAmIERDQl9DQVBfRENCWF9WRVJfSUVFRSkpOwogfQogCitzdGF0aWMgaW50IGN4Z2I0X2llZWVfcmVhZF9ldHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGllZWVfZXRzICpldHMsCisJCQkgICAgICAgaW50IGxvY2FsKQoreworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2MnBpbmZvKGRldik7CisJc3RydWN0IHBvcnRfZGNiX2luZm8gKmRjYiA9ICZwaS0+ZGNiOworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gcGktPmFkYXB0ZXI7CisJdWludDMyX3QgdGNfaW5mbzsKKwlzdHJ1Y3QgZndfcG9ydF9jbWQgcGNtZDsKKwlpbnQgaSwgYndnLCBlcnI7CisKKwlpZiAoIShkY2ItPm1zZ3MgJiAoQ1hHQjRfRENCX0ZXX1BHSUQgfCBDWEdCNF9EQ0JfRldfUEdSQVRFKSkpCisJCXJldHVybiAwOworCisJZXRzLT5ldHNfY2FwID0gIGRjYi0+cGdfbnVtX3Rjc19zdXBwb3J0ZWQ7CisKKwlpZiAobG9jYWwpIHsKKwkJZXRzLT53aWxsaW5nID0gMTsKKwkJSU5JVF9QT1JUX0RDQl9SRUFEX0xPQ0FMX0NNRChwY21kLCBwaS0+cG9ydF9pZCk7CisJfSBlbHNlIHsKKwkJSU5JVF9QT1JUX0RDQl9SRUFEX1BFRVJfQ01EKHBjbWQsIHBpLT5wb3J0X2lkKTsKKwl9CisKKwlwY21kLnUuZGNiLnBnaWQudHlwZSA9IEZXX1BPUlRfRENCX1RZUEVfUEdJRDsKKwllcnIgPSB0NF93cl9tYm94KGFkYXAsIGFkYXAtPm1ib3gsICZwY21kLCBzaXplb2YocGNtZCksICZwY21kKTsKKwlpZiAoZXJyICE9IEZXX1BPUlRfRENCX0NGR19TVUNDRVNTKSB7CisJCWRldl9lcnIoYWRhcC0+cGRldl9kZXYsICJEQ0IgcmVhZCBQR0lEIGZhaWxlZCB3aXRoICVkXG4iLCAtZXJyKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl0Y19pbmZvID0gYmUzMl90b19jcHUocGNtZC51LmRjYi5wZ2lkLnBnaWQpOworCisJaWYgKGxvY2FsKQorCQlJTklUX1BPUlRfRENCX1JFQURfTE9DQUxfQ01EKHBjbWQsIHBpLT5wb3J0X2lkKTsKKwllbHNlCisJCUlOSVRfUE9SVF9EQ0JfUkVBRF9QRUVSX0NNRChwY21kLCBwaS0+cG9ydF9pZCk7CisKKwlwY21kLnUuZGNiLnBncmF0ZS50eXBlID0gRldfUE9SVF9EQ0JfVFlQRV9QR1JBVEU7CisJZXJyID0gdDRfd3JfbWJveChhZGFwLCBhZGFwLT5tYm94LCAmcGNtZCwgc2l6ZW9mKHBjbWQpLCAmcGNtZCk7CisJaWYgKGVyciAhPSBGV19QT1JUX0RDQl9DRkdfU1VDQ0VTUykgeworCQlkZXZfZXJyKGFkYXAtPnBkZXZfZGV2LCAiRENCIHJlYWQgUEdSQVRFIGZhaWxlZCB3aXRoICVkXG4iLAorCQkJLWVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZm9yIChpID0gMDsgaSA8IElFRUVfODAyMVFBWl9NQVhfVENTOyBpKyspIHsKKwkJYndnID0gKHRjX2luZm8gPj4gKCg3IC0gaSkgKiA0KSkgJiAweEY7CisJCWV0cy0+cHJpb190Y1tpXSA9IGJ3ZzsKKwkJZXRzLT50Y190eF9id1tpXSA9IHBjbWQudS5kY2IucGdyYXRlLnBncmF0ZVtpXTsKKwkJZXRzLT50Y19yeF9id1tpXSA9IGV0cy0+dGNfdHhfYndbaV07CisJCWV0cy0+dGNfdHNhW2ldID0gcGNtZC51LmRjYi5wZ3JhdGUudHNhW2ldOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN4Z2I0X2llZWVfZ2V0X2V0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9ldHMgKmV0cykKK3sKKwlyZXR1cm4gY3hnYjRfaWVlZV9yZWFkX2V0cyhkZXYsIGV0cywgMSk7Cit9CisKKy8qIFdlIHJldXNlIHRoaXMgZm9yIHBlZXIgUEZDIGFzIHdlbGwsIGFzIHdlIGNhbid0IGhhdmUgaXQgZW5hYmxlZCBvbmUgd2F5ICovCitzdGF0aWMgaW50IGN4Z2I0X2llZWVfZ2V0X3BmYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9wZmMgKnBmYykKK3sKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldjJwaW5mbyhkZXYpOworCXN0cnVjdCBwb3J0X2RjYl9pbmZvICpkY2IgPSAmcGktPmRjYjsKKworCW1lbXNldChwZmMsIDAsIHNpemVvZihzdHJ1Y3QgaWVlZV9wZmMpKTsKKworCWlmICghKGRjYi0+bXNncyAmIENYR0I0X0RDQl9GV19QRkMpKQorCQlyZXR1cm4gMDsKKworCXBmYy0+cGZjX2NhcCA9IGRjYi0+cGZjX251bV90Y3Nfc3VwcG9ydGVkOworCXBmYy0+cGZjX2VuID0gYml0c3dhcF8xKGRjYi0+cGZjZW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3hnYjRfaWVlZV9wZWVyX2V0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWVlZV9ldHMgKmV0cykKK3sKKwlyZXR1cm4gY3hnYjRfaWVlZV9yZWFkX2V0cyhkZXYsIGV0cywgMCk7Cit9CisKIC8qIEZpbGwgaW4gdGhlIEFwcGxpY2F0aW9uIFVzZXIgUHJpb3JpdHkgTWFwIGFzc29jaWF0ZWQgd2l0aCB0aGUKICAqIHNwZWNpZmllZCBBcHBsaWNhdGlvbi4KICAqIFByaW9yaXR5IGZvciBJRUVFIGRjYl9hcHAgaXMgYW4gaW50ZWdlciwgd2l0aCAwIGJlaW5nIGEgdmFsaWQgdmFsdWUKQEAgLTExMDYsMTQgKzExOTEsMjMgQEAKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldjJwaW5mbyhkZXYpOwogCiAJY3hnYjRfZ2V0bnVtdGNzKGRldiwgRENCX05VTVRDU19BVFRSX1BGQywgJihwZmMtPnRjc19zdXBwb3J0ZWQpKTsKLQlwZmMtPnBmY19lbiA9IHBpLT5kY2IucGZjZW47CisKKwkvKiBGaXJtd2FyZSBzZW5kcyB0aGlzIHRvIHVzIGluIGEgZm9ybXdhdCB0aGF0IGlzIGEgYml0IGZsaXBwZWQgdmVyc2lvbgorCSAqIG9mIHNwZWMsIGNvcnJlY3QgaXQgYmVmb3JlIHdlIHNlbmQgaXQgdG8gaG9zdC4gVGhpcyBpcyB0YWtlbiBjYXJlIG9mCisJICogYnkgYml0IHNoaWZ0aW5nIGluIG90aGVyIHVzZXMgb2YgcGZjZW4KKwkgKi8KKwlwZmMtPnBmY19lbiA9IGJpdHN3YXBfMShwaS0+ZGNiLnBmY2VuKTsKIAogCXJldHVybiAwOwogfQogCiBjb25zdCBzdHJ1Y3QgZGNibmxfcnRubF9vcHMgY3hnYjRfZGNiX29wcyA9IHsKKwkuaWVlZV9nZXRldHMJCT0gY3hnYjRfaWVlZV9nZXRfZXRzLAorCS5pZWVlX2dldHBmYwkJPSBjeGdiNF9pZWVlX2dldF9wZmMsCiAJLmllZWVfZ2V0YXBwCQk9IGN4Z2I0X2llZWVfZ2V0YXBwLAogCS5pZWVlX3NldGFwcAkJPSBjeGdiNF9pZWVlX3NldGFwcCwKKwkuaWVlZV9wZWVyX2dldGV0cwk9IGN4Z2I0X2llZWVfcGVlcl9ldHMsCisJLmllZWVfcGVlcl9nZXRwZmMJPSBjeGdiNF9pZWVlX2dldF9wZmMsCiAKIAkvKiBDRUUgc3RkICovCiAJLmdldHN0YXRlCQk9IGN4Z2I0X2dldHN0YXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kY2IuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGNiLmgKaW5kZXggMzFjZTQyNS4uY2NmMjRkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kY2IuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RjYi5oCkBAIC0xMzYsNiArMTM2LDE3IEBACiB2b2lkIGN4Z2I0X2RjYl9zZXRfY2FwcyhzdHJ1Y3QgYWRhcHRlciAqLCBjb25zdCBzdHJ1Y3QgZndfcG9ydF9jbWQgKik7CiBleHRlcm4gY29uc3Qgc3RydWN0IGRjYm5sX3J0bmxfb3BzIGN4Z2I0X2RjYl9vcHM7CiAKK3N0YXRpYyBpbmxpbmUgX191OCBiaXRzd2FwXzEodW5zaWduZWQgY2hhciB2YWwpCit7CisJcmV0dXJuICgodmFsICYgMHg4MCkgPj4gNykgfAorCSAgICAgICAoKHZhbCAmIDB4NDApID4+IDUpIHwKKwkgICAgICAgKCh2YWwgJiAweDIwKSA+PiAzKSB8CisJICAgICAgICgodmFsICYgMHgxMCkgPj4gMSkgfAorCSAgICAgICAoKHZhbCAmIDB4MDgpIDw8IDEpIHwKKwkgICAgICAgKCh2YWwgJiAweDA0KSA8PCAzKSB8CisJICAgICAgICgodmFsICYgMHgwMikgPDwgNSkgfAorCSAgICAgICAoKHZhbCAmIDB4MDEpIDw8IDcpOworfQogI2RlZmluZSBDWEdCNF9EQ0JfRU5BQkxFRCB0cnVlCiAKICNlbHNlIC8qICFDT05GSUdfQ0hFTFNJT19UNF9EQ0IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmMKaW5kZXggYzk4YTM1MC4uZDIyMWY2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF9kZWJ1Z2ZzLmMKQEAgLTM2LDEzICszNiwxODY3IEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ19oZWxwZXJzLmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKICNpbmNsdWRlICJjeGdiNC5oIgogI2luY2x1ZGUgInQ0X3JlZ3MuaCIKKyNpbmNsdWRlICJ0NF92YWx1ZXMuaCIKICNpbmNsdWRlICJ0NGZ3X2FwaS5oIgogI2luY2x1ZGUgImN4Z2I0X2RlYnVnZnMuaCIKKyNpbmNsdWRlICJjbGlwX3RibC5oIgogI2luY2x1ZGUgImwydC5oIgogCisvKiBnZW5lcmljIHNlcV9maWxlIHN1cHBvcnQgZm9yIHNob3dpbmcgYSB0YWJsZSBvZiBzaXplIHJvd3MgeCB3aWR0aC4gKi8KK3N0YXRpYyB2b2lkICpzZXFfdGFiX2dldF9pZHgoc3RydWN0IHNlcV90YWIgKnRiLCBsb2ZmX3QgcG9zKQoreworCXBvcyAtPSB0Yi0+c2tpcF9maXJzdDsKKwlyZXR1cm4gcG9zID49IHRiLT5yb3dzID8gTlVMTCA6ICZ0Yi0+ZGF0YVtwb3MgKiB0Yi0+d2lkdGhdOworfQorCitzdGF0aWMgdm9pZCAqc2VxX3RhYl9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IHNlcV90YWIgKnRiID0gc2VxLT5wcml2YXRlOworCisJaWYgKHRiLT5za2lwX2ZpcnN0ICYmICpwb3MgPT0gMCkKKwkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKKworCXJldHVybiBzZXFfdGFiX2dldF9pZHgodGIsICpwb3MpOworfQorCitzdGF0aWMgdm9pZCAqc2VxX3RhYl9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwl2ID0gc2VxX3RhYl9nZXRfaWR4KHNlcS0+cHJpdmF0ZSwgKnBvcyArIDEpOworCWlmICh2KQorCQkrKypwb3M7CisJcmV0dXJuIHY7Cit9CisKK3N0YXRpYyB2b2lkIHNlcV90YWJfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKK30KKworc3RhdGljIGludCBzZXFfdGFiX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJY29uc3Qgc3RydWN0IHNlcV90YWIgKnRiID0gc2VxLT5wcml2YXRlOworCisJcmV0dXJuIHRiLT5zaG93KHNlcSwgdiwgKChjaGFyICopdiAtIHRiLT5kYXRhKSAvIHRiLT53aWR0aCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2VxX3RhYl9vcHMgPSB7CisJLnN0YXJ0ID0gc2VxX3RhYl9zdGFydCwKKwkubmV4dCAgPSBzZXFfdGFiX25leHQsCisJLnN0b3AgID0gc2VxX3RhYl9zdG9wLAorCS5zaG93ICA9IHNlcV90YWJfc2hvdworfTsKKworc3RydWN0IHNlcV90YWIgKnNlcV9vcGVuX3RhYihzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IHJvd3MsCisJCQkgICAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhhdmVfaGVhZGVyLAorCQkJICAgICBpbnQgKCpzaG93KShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgaW50IGkpKQoreworCXN0cnVjdCBzZXFfdGFiICpwOworCisJcCA9IF9fc2VxX29wZW5fcHJpdmF0ZShmLCAmc2VxX3RhYl9vcHMsIHNpemVvZigqcCkgKyByb3dzICogd2lkdGgpOworCWlmIChwKSB7CisJCXAtPnNob3cgPSBzaG93OworCQlwLT5yb3dzID0gcm93czsKKwkJcC0+d2lkdGggPSB3aWR0aDsKKwkJcC0+c2tpcF9maXJzdCA9IGhhdmVfaGVhZGVyICE9IDA7CisJfQorCXJldHVybiBwOworfQorCisvKiBUcmltIHRoZSBzaXplIG9mIGEgc2VxX3RhYiB0byB0aGUgc3VwcGxpZWQgbnVtYmVyIG9mIHJvd3MuICBUaGUgb3BlcmF0aW9uIGlzCisgKiBpcnJldmVyc2libGUuCisgKi8KK3N0YXRpYyBpbnQgc2VxX3RhYl90cmltKHN0cnVjdCBzZXFfdGFiICpwLCB1bnNpZ25lZCBpbnQgbmV3X3Jvd3MpCit7CisJaWYgKG5ld19yb3dzID4gcC0+cm93cykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcC0+cm93cyA9IG5ld19yb3dzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNpbV9sYV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBpbnQgaWR4KQoreworCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKKwkJc2VxX3B1dHMoc2VxLCAiU3RhdHVzICAgRGF0YSAgICAgIFBDICAgICBMUzBTdGF0ICBMUzBBZGRyICIKKwkJCSAiICAgICAgICAgICAgTFMwRGF0YVxuIik7CisJZWxzZSB7CisJCWNvbnN0IHUzMiAqcCA9IHY7CisKKwkJc2VxX3ByaW50ZihzZXEsCisJCQkgICAiICAlMDJ4ICAleCUwN3ggJXglMDd4ICUwOHggJTA4eCAlMDh4JTA4eCUwOHglMDh4XG4iLAorCQkJICAgKHBbMF0gPj4gNCkgJiAweGZmLCBwWzBdICYgMHhmLCBwWzFdID4+IDQsCisJCQkgICBwWzFdICYgMHhmLCBwWzJdID4+IDQsIHBbMl0gJiAweGYsIHBbM10sIHBbNF0sIHBbNV0sCisJCQkgICBwWzZdLCBwWzddKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2ltX2xhX3Nob3dfM2luMShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgaW50IGlkeCkKK3sKKwlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKKwkJc2VxX3B1dHMoc2VxLCAiU3RhdHVzICAgRGF0YSAgICAgIFBDXG4iKTsKKwl9IGVsc2UgeworCQljb25zdCB1MzIgKnAgPSB2OworCisJCXNlcV9wcmludGYoc2VxLCAiICAlMDJ4ICAgJTA4eCAlMDh4XG4iLCBwWzVdICYgMHhmZiwgcFs2XSwKKwkJCSAgIHBbN10pOworCQlzZXFfcHJpbnRmKHNlcSwgIiAgJTAyeCAgICUwMnglMDZ4ICUwMnglMDZ4XG4iLAorCQkJICAgKHBbM10gPj4gOCkgJiAweGZmLCBwWzNdICYgMHhmZiwgcFs0XSA+PiA4LAorCQkJICAgcFs0XSAmIDB4ZmYsIHBbNV0gPj4gOCk7CisJCXNlcV9wcmludGYoc2VxLCAiICAlMDJ4ICAgJXglMDd4ICV4JTA3eFxuIiwgKHBbMF0gPj4gNCkgJiAweGZmLAorCQkJICAgcFswXSAmIDB4ZiwgcFsxXSA+PiA0LCBwWzFdICYgMHhmLCBwWzJdID4+IDQpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaW1fbGFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBjZmc7CisJc3RydWN0IHNlcV90YWIgKnA7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBpbm9kZS0+aV9wcml2YXRlOworCisJcmV0ID0gdDRfY2ltX3JlYWQoYWRhcCwgVVBfVVBfREJHX0xBX0NGR19BLCAxLCAmY2ZnKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcCA9IHNlcV9vcGVuX3RhYihmaWxlLCBhZGFwLT5wYXJhbXMuY2ltX2xhX3NpemUgLyA4LCA4ICogc2l6ZW9mKHUzMiksIDEsCisJCQkgY2ZnICYgVVBEQkdMQUNBUFRQQ09OTFlfRiA/CisJCQkgY2ltX2xhX3Nob3dfM2luMSA6IGNpbV9sYV9zaG93KTsKKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdDRfY2ltX3JlYWRfbGEoYWRhcCwgKHUzMiAqKXAtPmRhdGEsIE5VTEwpOworCWlmIChyZXQpCisJCXNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpbV9sYV9mb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSBjaW1fbGFfb3BlbiwKKwkucmVhZCAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZQorfTsKKworc3RhdGljIGludCBjaW1fcWNmZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcW5hbWVbXSA9IHsKKwkJIlRQMCIsICJUUDEiLCAiVUxQIiwgIlNHRTAiLCAiU0dFMSIsICJOQy1TSSIsCisJCSJVTFAwIiwgIlVMUDEiLCAiVUxQMiIsICJVTFAzIiwgIlNHRSIsICJOQy1TSSIsCisJCSJTR0UwLVJYIiwgIlNHRTEtUlgiCisJfTsKKworCWludCBpOworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gc2VxLT5wcml2YXRlOworCXUxNiBiYXNlW0NJTV9OVU1fSUJRICsgQ0lNX05VTV9PQlFfVDVdOworCXUxNiBzaXplW0NJTV9OVU1fSUJRICsgQ0lNX05VTV9PQlFfVDVdOworCXUzMiBzdGF0Wyg0ICogKENJTV9OVU1fSUJRICsgQ0lNX05VTV9PQlFfVDUpKV07CisJdTE2IHRocmVzW0NJTV9OVU1fSUJRXTsKKwl1MzIgb2JxX3dyX3Q0WzIgKiBDSU1fTlVNX09CUV0sICp3cjsKKwl1MzIgb2JxX3dyX3Q1WzIgKiBDSU1fTlVNX09CUV9UNV07CisJdTMyICpwID0gc3RhdDsKKwlpbnQgY2ltX251bV9vYnEgPSBpc190NChhZGFwLT5wYXJhbXMuY2hpcCkgPworCQkJCUNJTV9OVU1fT0JRIDogQ0lNX05VTV9PQlFfVDU7CisKKwlpID0gdDRfY2ltX3JlYWQoYWRhcCwgaXNfdDQoYWRhcC0+cGFyYW1zLmNoaXApID8gVVBfSUJRXzBfUkRBRERSX0EgOgorCQkJVVBfSUJRXzBfU0hBRE9XX1JEQUREUl9BLAorCQkJQVJSQVlfU0laRShzdGF0KSwgc3RhdCk7CisJaWYgKCFpKSB7CisJCWlmIChpc190NChhZGFwLT5wYXJhbXMuY2hpcCkpIHsKKwkJCWkgPSB0NF9jaW1fcmVhZChhZGFwLCBVUF9PQlFfMF9SRUFMQUREUl9BLAorCQkJCQlBUlJBWV9TSVpFKG9icV93cl90NCksIG9icV93cl90NCk7CisJCQkJd3IgPSBvYnFfd3JfdDQ7CisJCX0gZWxzZSB7CisJCQlpID0gdDRfY2ltX3JlYWQoYWRhcCwgVVBfT0JRXzBfU0hBRE9XX1JFQUxBRERSX0EsCisJCQkJCUFSUkFZX1NJWkUob2JxX3dyX3Q1KSwgb2JxX3dyX3Q1KTsKKwkJCQl3ciA9IG9icV93cl90NTsKKwkJfQorCX0KKwlpZiAoaSkKKwkJcmV0dXJuIGk7CisKKwl0NF9yZWFkX2NpbXFfY2ZnKGFkYXAsIGJhc2UsIHNpemUsIHRocmVzKTsKKworCXNlcV9wcmludGYoc2VxLAorCQkgICAiICBRdWV1ZSAgQmFzZSAgU2l6ZSBUaHJlcyAgUmRQdHIgV3JQdHIgIFNPUCAgRU9QIEF2YWlsXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgQ0lNX05VTV9JQlE7IGkrKywgcCArPSA0KQorCQlzZXFfcHJpbnRmKHNlcSwgIiU3cyAlNXggJTV1ICU1dSAlNnggICU0eCAlNHUgJTR1ICU1dVxuIiwKKwkJCSAgIHFuYW1lW2ldLCBiYXNlW2ldLCBzaXplW2ldLCB0aHJlc1tpXSwKKwkJCSAgIElCUVJEQUREUl9HKHBbMF0pLCBJQlFXUkFERFJfRyhwWzFdKSwKKwkJCSAgIFFVRVNPUENOVF9HKHBbM10pLCBRVUVFT1BDTlRfRyhwWzNdKSwKKwkJCSAgIFFVRVJFTUZMSVRTX0cocFsyXSkgKiAxNik7CisJZm9yICggOyBpIDwgQ0lNX05VTV9JQlEgKyBjaW1fbnVtX29icTsgaSsrLCBwICs9IDQsIHdyICs9IDIpCisJCXNlcV9wcmludGYoc2VxLCAiJTdzICU1eCAlNXUgJTEyeCAgJTR4ICU0dSAlNHUgJTV1XG4iLAorCQkJICAgcW5hbWVbaV0sIGJhc2VbaV0sIHNpemVbaV0sCisJCQkgICBRVUVSREFERFJfRyhwWzBdKSAmIDB4M2ZmZiwgd3JbMF0gLSBiYXNlW2ldLAorCQkJICAgUVVFU09QQ05UX0cocFszXSksIFFVRUVPUENOVF9HKHBbM10pLAorCQkJICAgUVVFUkVNRkxJVFNfRyhwWzJdKSAqIDE2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaW1fcWNmZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjaW1fcWNmZ19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2ltX3FjZmdfZm9wcyA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gY2ltX3FjZmdfb3BlbiwKKwkucmVhZCAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IGNpbXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgaW50IGlkeCkKK3sKKwljb25zdCB1MzIgKnAgPSB2OworCisJc2VxX3ByaW50ZihzZXEsICIlIzA2eDogJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwgaWR4ICogMTYsIHBbMF0sIHBbMV0sCisJCSAgIHBbMl0sIHBbM10pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNpbV9pYnFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzZXFfdGFiICpwOworCXVuc2lnbmVkIGludCBxaWQgPSAodWludHB0cl90KWlub2RlLT5pX3ByaXZhdGUgJiA3OworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gaW5vZGUtPmlfcHJpdmF0ZSAtIHFpZDsKKworCXAgPSBzZXFfb3Blbl90YWIoZmlsZSwgQ0lNX0lCUV9TSVpFLCA0ICogc2l6ZW9mKHUzMiksIDAsIGNpbXFfc2hvdyk7CisJaWYgKCFwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHQ0X3JlYWRfY2ltX2licShhZGFwLCBxaWQsICh1MzIgKilwLT5kYXRhLCBDSU1fSUJRX1NJWkUgKiA0KTsKKwlpZiAocmV0IDwgMCkKKwkJc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7CisJZWxzZQorCQlyZXQgPSAwOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpbV9pYnFfZm9wcyA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gY2ltX2licV9vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlCit9OworCitzdGF0aWMgaW50IGNpbV9vYnFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzZXFfdGFiICpwOworCXVuc2lnbmVkIGludCBxaWQgPSAodWludHB0cl90KWlub2RlLT5pX3ByaXZhdGUgJiA3OworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gaW5vZGUtPmlfcHJpdmF0ZSAtIHFpZDsKKworCXAgPSBzZXFfb3Blbl90YWIoZmlsZSwgNiAqIENJTV9PQlFfU0laRSwgNCAqIHNpemVvZih1MzIpLCAwLCBjaW1xX3Nob3cpOworCWlmICghcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSB0NF9yZWFkX2NpbV9vYnEoYWRhcCwgcWlkLCAodTMyICopcC0+ZGF0YSwgNiAqIENJTV9PQlFfU0laRSAqIDQpOworCWlmIChyZXQgPCAwKSB7CisJCXNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpOworCX0gZWxzZSB7CisJCXNlcV90YWJfdHJpbShwLCByZXQgLyA0KTsKKwkJcmV0ID0gMDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2ltX29icV9mb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSBjaW1fb2JxX29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUKK307CisKK3N0cnVjdCBmaWVsZF9kZXNjIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBzdGFydDsKKwl1bnNpZ25lZCBpbnQgd2lkdGg7Cit9OworCitzdGF0aWMgdm9pZCBmaWVsZF9kZXNjX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHU2NCB2LAorCQkJICAgIGNvbnN0IHN0cnVjdCBmaWVsZF9kZXNjICpwKQoreworCWNoYXIgYnVmWzMyXTsKKwlpbnQgbGluZV9zaXplID0gMDsKKworCXdoaWxlIChwLT5uYW1lKSB7CisJCXU2NCBtYXNrID0gKDFVTEwgPDwgcC0+d2lkdGgpIC0gMTsKKwkJaW50IGxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXM6ICVsbHUiLCBwLT5uYW1lLAorCQkJCSAgICAoKHVuc2lnbmVkIGxvbmcgbG9uZyl2ID4+IHAtPnN0YXJ0KSAmIG1hc2spOworCisJCWlmIChsaW5lX3NpemUgKyBsZW4gPj0gNzkpIHsKKwkJCWxpbmVfc2l6ZSA9IDg7CisJCQlzZXFfcHV0cyhzZXEsICJcbiAgICAgICAgIik7CisJCX0KKwkJc2VxX3ByaW50ZihzZXEsICIlcyAiLCBidWYpOworCQlsaW5lX3NpemUgKz0gbGVuICsgMTsKKwkJcCsrOworCX0KKwlzZXFfcHV0YyhzZXEsICdcbicpOworfQorCitzdGF0aWMgc3RydWN0IGZpZWxkX2Rlc2MgdHBfbGEwW10gPSB7CisJeyAiUmNmT3BDb2RlT3V0IiwgNjAsIDQgfSwKKwl7ICJTdGF0ZSIsIDU2LCA0IH0sCisJeyAiV2NmU3RhdGUiLCA1MiwgNCB9LAorCXsgIlJjZk9wY1NyY091dCIsIDUwLCAyIH0sCisJeyAiQ1J4RXJyb3IiLCA0OSwgMSB9LAorCXsgIkVSeEVycm9yIiwgNDgsIDEgfSwKKwl7ICJTYW5pdHlGYWlsZWQiLCA0NywgMSB9LAorCXsgIlNwdXJpb3VzTXNnIiwgNDYsIDEgfSwKKwl7ICJGbHVzaElucHV0TXNnIiwgNDUsIDEgfSwKKwl7ICJGbHVzaElucHV0Q3BsIiwgNDQsIDEgfSwKKwl7ICJSc3NVcEJpdCIsIDQzLCAxIH0sCisJeyAiUnNzRmlsdGVySGl0IiwgNDIsIDEgfSwKKwl7ICJUaWQiLCAzMiwgMTAgfSwKKwl7ICJJbml0VGNiIiwgMzEsIDEgfSwKKwl7ICJMaW5lTnVtYmVyIiwgMjQsIDcgfSwKKwl7ICJFbXNnIiwgMjMsIDEgfSwKKwl7ICJFZGF0YU91dCIsIDIyLCAxIH0sCisJeyAiQ21zZyIsIDIxLCAxIH0sCisJeyAiQ2RhdGFPdXQiLCAyMCwgMSB9LAorCXsgIkVyZWFkUGR1IiwgMTksIDEgfSwKKwl7ICJDcmVhZFBkdSIsIDE4LCAxIH0sCisJeyAiVHVubmVsUGt0IiwgMTcsIDEgfSwKKwl7ICJSY2ZQZWVyRmluIiwgMTYsIDEgfSwKKwl7ICJSY2ZSZWFzb25PdXQiLCAxMiwgNCB9LAorCXsgIlR4Q2NoYW5uZWwiLCAxMCwgMiB9LAorCXsgIlJjZlR4Q2hhbm5lbCIsIDgsIDIgfSwKKwl7ICJSeEVjaGFubmVsIiwgNiwgMiB9LAorCXsgIlJjZlJ4Q2hhbm5lbCIsIDUsIDEgfSwKKwl7ICJSY2ZEYXRhT3V0U3JkeSIsIDQsIDEgfSwKKwl7ICJSeER2bGQiLCAzLCAxIH0sCisJeyAiUnhPb0R2bGQiLCAyLCAxIH0sCisJeyAiUnhDb25nZXN0aW9uIiwgMSwgMSB9LAorCXsgIlR4Q29uZ2VzdGlvbiIsIDAsIDEgfSwKKwl7IE5VTEwgfQorfTsKKworc3RhdGljIGludCB0cF9sYV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBpbnQgaWR4KQoreworCWNvbnN0IHU2NCAqcCA9IHY7CisKKwlmaWVsZF9kZXNjX3Nob3coc2VxLCAqcCwgdHBfbGEwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cF9sYV9zaG93MihzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgaW50IGlkeCkKK3sKKwljb25zdCB1NjQgKnAgPSB2OworCisJaWYgKGlkeCkKKwkJc2VxX3B1dGMoc2VxLCAnXG4nKTsKKwlmaWVsZF9kZXNjX3Nob3coc2VxLCBwWzBdLCB0cF9sYTApOworCWlmIChpZHggPCAoVFBMQV9TSVpFIC8gMiAtIDEpIHx8IHBbMV0gIT0gfjBVTEwpCisJCWZpZWxkX2Rlc2Nfc2hvdyhzZXEsIHBbMV0sIHRwX2xhMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdHBfbGFfc2hvdzMoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGludCBpZHgpCit7CisJc3RhdGljIHN0cnVjdCBmaWVsZF9kZXNjIHRwX2xhMVtdID0geworCQl7ICJDcGxDbWRJbiIsIDU2LCA4IH0sCisJCXsgIkNwbENtZE91dCIsIDQ4LCA4IH0sCisJCXsgIkVTeW5PdXQiLCA0NywgMSB9LAorCQl7ICJFQWNrT3V0IiwgNDYsIDEgfSwKKwkJeyAiRUZpbk91dCIsIDQ1LCAxIH0sCisJCXsgIkVSc3RPdXQiLCA0NCwgMSB9LAorCQl7ICJTeW5JbiIsIDQzLCAxIH0sCisJCXsgIkFja0luIiwgNDIsIDEgfSwKKwkJeyAiRmluSW4iLCA0MSwgMSB9LAorCQl7ICJSc3RJbiIsIDQwLCAxIH0sCisJCXsgIkRhdGFJbiIsIDM5LCAxIH0sCisJCXsgIkRhdGFJblZsZCIsIDM4LCAxIH0sCisJCXsgIlBhZEluIiwgMzcsIDEgfSwKKwkJeyAiUnhCdWZFbXB0eSIsIDM2LCAxIH0sCisJCXsgIlJ4RGRwIiwgMzUsIDEgfSwKKwkJeyAiUnhGYkNvbmdlc3Rpb24iLCAzNCwgMSB9LAorCQl7ICJUeEZiQ29uZ2VzdGlvbiIsIDMzLCAxIH0sCisJCXsgIlR4UGt0U3VtU3JkeSIsIDMyLCAxIH0sCisJCXsgIlJjZlVscFR5cGUiLCAyOCwgNCB9LAorCQl7ICJFcmVhZCIsIDI3LCAxIH0sCisJCXsgIkVieXBhc3MiLCAyNiwgMSB9LAorCQl7ICJFc2F2ZSIsIDI1LCAxIH0sCisJCXsgIlN0YXRpYzAiLCAyNCwgMSB9LAorCQl7ICJDcmVhZCIsIDIzLCAxIH0sCisJCXsgIkNieXBhc3MiLCAyMiwgMSB9LAorCQl7ICJDc2F2ZSIsIDIxLCAxIH0sCisJCXsgIkNQa3RPdXQiLCAyMCwgMSB9LAorCQl7ICJSeFBhZ2VQb29sRnVsbCIsIDE4LCAyIH0sCisJCXsgIlJ4THBia1BrdCIsIDE3LCAxIH0sCisJCXsgIlR4THBia1BrdCIsIDE2LCAxIH0sCisJCXsgIlJ4VmZWYWxpZCIsIDE1LCAxIH0sCisJCXsgIlN5bkxlYXJuZWQiLCAxNCwgMSB9LAorCQl7ICJTZXREZWxFbnRyeSIsIDEzLCAxIH0sCisJCXsgIlNldEludkVudHJ5IiwgMTIsIDEgfSwKKwkJeyAiQ3BjbWREdmxkIiwgMTEsIDEgfSwKKwkJeyAiQ3BjbWRTYXZlIiwgMTAsIDEgfSwKKwkJeyAiUnhQc3RydWN0c0Z1bGwiLCA4LCAyIH0sCisJCXsgIkVwY21kRHZsZCIsIDcsIDEgfSwKKwkJeyAiRXBjbWRGbHVzaCIsIDYsIDEgfSwKKwkJeyAiRXBjbWRUcmltUHJlZml4IiwgNSwgMSB9LAorCQl7ICJFcGNtZFRyaW1Qb3N0Zml4IiwgNCwgMSB9LAorCQl7ICJFUnNzSXA0UGt0IiwgMywgMSB9LAorCQl7ICJFUnNzSXA2UGt0IiwgMiwgMSB9LAorCQl7ICJFUnNzVGNwVWRwUGt0IiwgMSwgMSB9LAorCQl7ICJFUnNzRmNlRmlwUGt0IiwgMCwgMSB9LAorCQl7IE5VTEwgfQorCX07CisJc3RhdGljIHN0cnVjdCBmaWVsZF9kZXNjIHRwX2xhMltdID0geworCQl7ICJDcGxDbWRJbiIsIDU2LCA4IH0sCisJCXsgIk1wc1ZmVmxkIiwgNTUsIDEgfSwKKwkJeyAiTXBzUGYiLCA1MiwgMyB9LAorCQl7ICJNcHNWZiIsIDQ0LCA4IH0sCisJCXsgIlN5bkluIiwgNDMsIDEgfSwKKwkJeyAiQWNrSW4iLCA0MiwgMSB9LAorCQl7ICJGaW5JbiIsIDQxLCAxIH0sCisJCXsgIlJzdEluIiwgNDAsIDEgfSwKKwkJeyAiRGF0YUluIiwgMzksIDEgfSwKKwkJeyAiRGF0YUluVmxkIiwgMzgsIDEgfSwKKwkJeyAiUGFkSW4iLCAzNywgMSB9LAorCQl7ICJSeEJ1ZkVtcHR5IiwgMzYsIDEgfSwKKwkJeyAiUnhEZHAiLCAzNSwgMSB9LAorCQl7ICJSeEZiQ29uZ2VzdGlvbiIsIDM0LCAxIH0sCisJCXsgIlR4RmJDb25nZXN0aW9uIiwgMzMsIDEgfSwKKwkJeyAiVHhQa3RTdW1TcmR5IiwgMzIsIDEgfSwKKwkJeyAiUmNmVWxwVHlwZSIsIDI4LCA0IH0sCisJCXsgIkVyZWFkIiwgMjcsIDEgfSwKKwkJeyAiRWJ5cGFzcyIsIDI2LCAxIH0sCisJCXsgIkVzYXZlIiwgMjUsIDEgfSwKKwkJeyAiU3RhdGljMCIsIDI0LCAxIH0sCisJCXsgIkNyZWFkIiwgMjMsIDEgfSwKKwkJeyAiQ2J5cGFzcyIsIDIyLCAxIH0sCisJCXsgIkNzYXZlIiwgMjEsIDEgfSwKKwkJeyAiQ1BrdE91dCIsIDIwLCAxIH0sCisJCXsgIlJ4UGFnZVBvb2xGdWxsIiwgMTgsIDIgfSwKKwkJeyAiUnhMcGJrUGt0IiwgMTcsIDEgfSwKKwkJeyAiVHhMcGJrUGt0IiwgMTYsIDEgfSwKKwkJeyAiUnhWZlZhbGlkIiwgMTUsIDEgfSwKKwkJeyAiU3luTGVhcm5lZCIsIDE0LCAxIH0sCisJCXsgIlNldERlbEVudHJ5IiwgMTMsIDEgfSwKKwkJeyAiU2V0SW52RW50cnkiLCAxMiwgMSB9LAorCQl7ICJDcGNtZER2bGQiLCAxMSwgMSB9LAorCQl7ICJDcGNtZFNhdmUiLCAxMCwgMSB9LAorCQl7ICJSeFBzdHJ1Y3RzRnVsbCIsIDgsIDIgfSwKKwkJeyAiRXBjbWREdmxkIiwgNywgMSB9LAorCQl7ICJFcGNtZEZsdXNoIiwgNiwgMSB9LAorCQl7ICJFcGNtZFRyaW1QcmVmaXgiLCA1LCAxIH0sCisJCXsgIkVwY21kVHJpbVBvc3RmaXgiLCA0LCAxIH0sCisJCXsgIkVSc3NJcDRQa3QiLCAzLCAxIH0sCisJCXsgIkVSc3NJcDZQa3QiLCAyLCAxIH0sCisJCXsgIkVSc3NUY3BVZHBQa3QiLCAxLCAxIH0sCisJCXsgIkVSc3NGY2VGaXBQa3QiLCAwLCAxIH0sCisJCXsgTlVMTCB9CisJfTsKKwljb25zdCB1NjQgKnAgPSB2OworCisJaWYgKGlkeCkKKwkJc2VxX3B1dGMoc2VxLCAnXG4nKTsKKwlmaWVsZF9kZXNjX3Nob3coc2VxLCBwWzBdLCB0cF9sYTApOworCWlmIChpZHggPCAoVFBMQV9TSVpFIC8gMiAtIDEpIHx8IHBbMV0gIT0gfjBVTEwpCisJCWZpZWxkX2Rlc2Nfc2hvdyhzZXEsIHBbMV0sIChwWzBdICYgQklUKDE3KSkgPyB0cF9sYTIgOiB0cF9sYTEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRwX2xhX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNlcV90YWIgKnA7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBpbm9kZS0+aV9wcml2YXRlOworCisJc3dpdGNoIChEQkdMQU1PREVfRyh0NF9yZWFkX3JlZyhhZGFwLCBUUF9EQkdfTEFfQ09ORklHX0EpKSkgeworCWNhc2UgMjoKKwkJcCA9IHNlcV9vcGVuX3RhYihmaWxlLCBUUExBX1NJWkUgLyAyLCAyICogc2l6ZW9mKHU2NCksIDAsCisJCQkJIHRwX2xhX3Nob3cyKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlwID0gc2VxX29wZW5fdGFiKGZpbGUsIFRQTEFfU0laRSAvIDIsIDIgKiBzaXplb2YodTY0KSwgMCwKKwkJCQkgdHBfbGFfc2hvdzMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwID0gc2VxX29wZW5fdGFiKGZpbGUsIFRQTEFfU0laRSwgc2l6ZW9mKHU2NCksIDAsIHRwX2xhX3Nob3cpOworCX0KKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOworCisJdDRfdHBfcmVhZF9sYShhZGFwLCAodTY0ICopcC0+ZGF0YSwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRwX2xhX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKK3sKKwlpbnQgZXJyOworCWNoYXIgc1szMl07CisJdW5zaWduZWQgbG9uZyB2YWw7CisJc2l6ZV90IHNpemUgPSBtaW4oc2l6ZW9mKHMpIC0gMSwgY291bnQpOworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gRklMRV9EQVRBKGZpbGUpLT5pX3ByaXZhdGU7CisKKwlpZiAoY29weV9mcm9tX3VzZXIocywgYnVmLCBzaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJc1tzaXplXSA9ICdcMCc7CisJZXJyID0ga3N0cnRvdWwocywgMCwgJnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlpZiAodmFsID4gMHhmZmZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlhZGFwLT5wYXJhbXMudHAubGFfbWFzayA9IHZhbCA8PCAxNjsKKwl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIFRQX0RCR19MQV9DT05GSUdfQSwgMHhmZmZmMDAwMFUsCisJCQkgYWRhcC0+cGFyYW1zLnRwLmxhX21hc2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHBfbGFfZm9wcyA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gdHBfbGFfb3BlbiwKKwkucmVhZCAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKKwkud3JpdGUgICA9IHRwX2xhX3dyaXRlCit9OworCitzdGF0aWMgaW50IHVscHJ4X2xhX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGludCBpZHgpCit7CisJY29uc3QgdTMyICpwID0gdjsKKworCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKKwkJc2VxX3B1dHMoc2VxLCAiICAgICAgUGNtZCAgICAgICAgVHlwZSAgIE1lc3NhZ2UiCisJCQkgIiAgICAgICAgICAgICAgICBEYXRhXG4iKTsKKwllbHNlCisJCXNlcV9wcmludGYoc2VxLCAiJTA4eCUwOHggICU0eCAgJTA4eCAgJTA4eCUwOHglMDh4JTA4eFxuIiwKKwkJCSAgIHBbMV0sIHBbMF0sIHBbMl0sIHBbM10sIHBbN10sIHBbNl0sIHBbNV0sIHBbNF0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVscHJ4X2xhX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHNlcV90YWIgKnA7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBpbm9kZS0+aV9wcml2YXRlOworCisJcCA9IHNlcV9vcGVuX3RhYihmaWxlLCBVTFBSWF9MQV9TSVpFLCA4ICogc2l6ZW9mKHUzMiksIDEsCisJCQkgdWxwcnhfbGFfc2hvdyk7CisJaWYgKCFwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXQ0X3VscHJ4X3JlYWRfbGEoYWRhcCwgKHUzMiAqKXAtPmRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1bHByeF9sYV9mb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSB1bHByeF9sYV9vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlCit9OworCisvKiBTaG93IHRoZSBQTSBtZW1vcnkgc3RhdHMuICBUaGVzZSBzdGF0cyBpbmNsdWRlOgorICoKKyAqIFRYOgorICogICBSZWFkOiBtZW1vcnkgcmVhZCBvcGVyYXRpb24KKyAqICAgV3JpdGUgQnlwYXNzOiBjdXQtdGhyb3VnaAorICogICBCeXBhc3MgKyBtZW06IGN1dC10aHJvdWdoIGFuZCBzYXZlIGNvcHkKKyAqCisgKiBSWDoKKyAqICAgUmVhZDogbWVtb3J5IHJlYWQKKyAqICAgV3JpdGUgQnlwYXNzOiBjdXQtdGhyb3VnaAorICogICBGbHVzaDogcGF5bG9hZCB0cmltIG9yIGRyb3AKKyAqLworc3RhdGljIGludCBwbV9zdGF0c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdHhfcG1fc3RhdHNbXSA9IHsKKwkJIlJlYWQ6IiwgIldyaXRlIGJ5cGFzczoiLCAiV3JpdGUgbWVtOiIsICJCeXBhc3MgKyBtZW06IgorCX07CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByeF9wbV9zdGF0c1tdID0geworCQkiUmVhZDoiLCAiV3JpdGUgYnlwYXNzOiIsICJXcml0ZSBtZW06IiwgIkZsdXNoOiIKKwl9OworCisJaW50IGk7CisJdTMyIHR4X2NudFtQTV9OU1RBVFNdLCByeF9jbnRbUE1fTlNUQVRTXTsKKwl1NjQgdHhfY3ljW1BNX05TVEFUU10sIHJ4X2N5Y1tQTV9OU1RBVFNdOworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gc2VxLT5wcml2YXRlOworCisJdDRfcG10eF9nZXRfc3RhdHMoYWRhcCwgdHhfY250LCB0eF9jeWMpOworCXQ0X3BtcnhfZ2V0X3N0YXRzKGFkYXAsIHJ4X2NudCwgcnhfY3ljKTsKKworCXNlcV9wcmludGYoc2VxLCAiJTEzcyAlMTBzICAlMjBzXG4iLCAiICIsICJUeCBwY21kcyIsICJUeCBieXRlcyIpOworCWZvciAoaSA9IDA7IGkgPCBQTV9OU1RBVFMgLSAxOyBpKyspCisJCXNlcV9wcmludGYoc2VxLCAiJS0xM3MgJTEwdSAgJTIwbGx1XG4iLAorCQkJICAgdHhfcG1fc3RhdHNbaV0sIHR4X2NudFtpXSwgdHhfY3ljW2ldKTsKKworCXNlcV9wcmludGYoc2VxLCAiJTEzcyAlMTBzICAlMjBzXG4iLCAiICIsICJSeCBwY21kcyIsICJSeCBieXRlcyIpOworCWZvciAoaSA9IDA7IGkgPCBQTV9OU1RBVFMgLSAxOyBpKyspCisJCXNlcV9wcmludGYoc2VxLCAiJS0xM3MgJTEwdSAgJTIwbGx1XG4iLAorCQkJICAgcnhfcG1fc3RhdHNbaV0sIHJ4X2NudFtpXSwgcnhfY3ljW2ldKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbV9zdGF0c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwbV9zdGF0c19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIHNzaXplX3QgcG1fc3RhdHNfY2xlYXIoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gRklMRV9EQVRBKGZpbGUpLT5pX3ByaXZhdGU7CisKKwl0NF93cml0ZV9yZWcoYWRhcCwgUE1fUlhfU1RBVF9DT05GSUdfQSwgMCk7CisJdDRfd3JpdGVfcmVnKGFkYXAsIFBNX1RYX1NUQVRfQ09ORklHX0EsIDApOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG1fc3RhdHNfZGVidWdmc19mb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSBwbV9zdGF0c19vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUgICA9IHBtX3N0YXRzX2NsZWFyCit9OworCitzdGF0aWMgaW50IGNjdHJsX3RibF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGVjX2ZhY1tdID0geworCQkiMC41IiwgIjAuNTYyNSIsICIwLjYyNSIsICIwLjY4NzUiLCAiMC43NSIsICIwLjgxMjUiLCAiMC44NzUiLAorCQkiMC45Mzc1IiB9OworCisJaW50IGk7CisJdTE2IGluY3JbTk1UVVNdW05DQ1RSTF9XSU5dOworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gc2VxLT5wcml2YXRlOworCisJdDRfcmVhZF9jb25nX3RibChhZGFwLCBpbmNyKTsKKworCWZvciAoaSA9IDA7IGkgPCBOQ0NUUkxfV0lOOyArK2kpIHsKKwkJc2VxX3ByaW50ZihzZXEsICIlMmQ6ICU0dSAlNHUgJTR1ICU0dSAlNHUgJTR1ICU0dSAlNHVcbiIsIGksCisJCQkgICBpbmNyWzBdW2ldLCBpbmNyWzFdW2ldLCBpbmNyWzJdW2ldLCBpbmNyWzNdW2ldLAorCQkJICAgaW5jcls0XVtpXSwgaW5jcls1XVtpXSwgaW5jcls2XVtpXSwgaW5jcls3XVtpXSk7CisJCXNlcV9wcmludGYoc2VxLCAiJTh1ICU0dSAlNHUgJTR1ICU0dSAlNHUgJTR1ICU0dSAlNXUgJXNcbiIsCisJCQkgICBpbmNyWzhdW2ldLCBpbmNyWzldW2ldLCBpbmNyWzEwXVtpXSwgaW5jclsxMV1baV0sCisJCQkgICBpbmNyWzEyXVtpXSwgaW5jclsxM11baV0sIGluY3JbMTRdW2ldLCBpbmNyWzE1XVtpXSwKKwkJCSAgIGFkYXAtPnBhcmFtcy5hX3duZFtpXSwKKwkJCSAgIGRlY19mYWNbYWRhcC0+cGFyYW1zLmJfd25kW2ldXSk7CisJfQorCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0RFQlVHRlNfRklMRShjY3RybF90YmwpOworCisvKiBGb3JtYXQgYSB2YWx1ZSBpbiBhIHVuaXQgdGhhdCBkaWZmZXJzIGZyb20gdGhlIHZhbHVlJ3MgbmF0aXZlIHVuaXQgYnkgdGhlCisgKiBnaXZlbiBmYWN0b3IuCisgKi8KK3N0YXRpYyBjaGFyICp1bml0X2NvbnYoY2hhciAqYnVmLCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgdmFsLAorCQkgICAgICAgdW5zaWduZWQgaW50IGZhY3RvcikKK3sKKwl1bnNpZ25lZCBpbnQgcmVtID0gdmFsICUgZmFjdG9yOworCisJaWYgKHJlbSA9PSAwKSB7CisJCXNucHJpbnRmKGJ1ZiwgbGVuLCAiJXUiLCB2YWwgLyBmYWN0b3IpOworCX0gZWxzZSB7CisJCXdoaWxlIChyZW0gJSAxMCA9PSAwKQorCQkJcmVtIC89IDEwOworCQlzbnByaW50ZihidWYsIGxlbiwgIiV1LiV1IiwgdmFsIC8gZmFjdG9yLCByZW0pOworCX0KKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgaW50IGNsa19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCWNoYXIgYnVmWzMyXTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IHNlcS0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBpbnQgY2Nsa19wcyA9IDEwMDAwMDAwMDAgLyBhZGFwLT5wYXJhbXMudnBkLmNjbGs7ICAvKiBpbiBwcyAqLworCXUzMiByZXMgPSB0NF9yZWFkX3JlZyhhZGFwLCBUUF9USU1FUl9SRVNPTFVUSU9OX0EpOworCXVuc2lnbmVkIGludCB0cmUgPSBUSU1FUlJFU09MVVRJT05fRyhyZXMpOworCXVuc2lnbmVkIGludCBkYWNrX3JlID0gREVMQVlFREFDS1JFU09MVVRJT05fRyhyZXMpOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0cF90aWNrX3VzID0gKGNjbGtfcHMgPDwgdHJlKSAvIDEwMDAwMDA7IC8qIGluIHVzICovCisKKwlzZXFfcHJpbnRmKHNlcSwgIkNvcmUgY2xvY2sgcGVyaW9kOiAlcyBuc1xuIiwKKwkJICAgdW5pdF9jb252KGJ1Ziwgc2l6ZW9mKGJ1ZiksIGNjbGtfcHMsIDEwMDApKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlRQIHRpbWVyIHRpY2s6ICVzIHVzXG4iLAorCQkgICB1bml0X2NvbnYoYnVmLCBzaXplb2YoYnVmKSwgKGNjbGtfcHMgPDwgdHJlKSwgMTAwMDAwMCkpOworCXNlcV9wcmludGYoc2VxLCAiVENQIHRpbWVzdGFtcCB0aWNrOiAlcyB1c1xuIiwKKwkJICAgdW5pdF9jb252KGJ1Ziwgc2l6ZW9mKGJ1ZiksCisJCQkgICAgIChjY2xrX3BzIDw8IFRJTUVTVEFNUFJFU09MVVRJT05fRyhyZXMpKSwgMTAwMDAwMCkpOworCXNlcV9wcmludGYoc2VxLCAiREFDSyB0aWNrOiAlcyB1c1xuIiwKKwkJICAgdW5pdF9jb252KGJ1Ziwgc2l6ZW9mKGJ1ZiksIChjY2xrX3BzIDw8IGRhY2tfcmUpLCAxMDAwMDAwKSk7CisJc2VxX3ByaW50ZihzZXEsICJEQUNLIHRpbWVyOiAldSB1c1xuIiwKKwkJICAgKChjY2xrX3BzIDw8IGRhY2tfcmUpIC8gMTAwMDAwMCkgKgorCQkgICB0NF9yZWFkX3JlZyhhZGFwLCBUUF9EQUNLX1RJTUVSX0EpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlJldHJhbnNtaXQgbWluOiAlbGx1IHVzXG4iLAorCQkgICB0cF90aWNrX3VzICogdDRfcmVhZF9yZWcoYWRhcCwgVFBfUlhUX01JTl9BKSk7CisJc2VxX3ByaW50ZihzZXEsICJSZXRyYW5zbWl0IG1heDogJWxsdSB1c1xuIiwKKwkJICAgdHBfdGlja191cyAqIHQ0X3JlYWRfcmVnKGFkYXAsIFRQX1JYVF9NQVhfQSkpOworCXNlcV9wcmludGYoc2VxLCAiUGVyc2lzdCB0aW1lciBtaW46ICVsbHUgdXNcbiIsCisJCSAgIHRwX3RpY2tfdXMgKiB0NF9yZWFkX3JlZyhhZGFwLCBUUF9QRVJTX01JTl9BKSk7CisJc2VxX3ByaW50ZihzZXEsICJQZXJzaXN0IHRpbWVyIG1heDogJWxsdSB1c1xuIiwKKwkJICAgdHBfdGlja191cyAqIHQ0X3JlYWRfcmVnKGFkYXAsIFRQX1BFUlNfTUFYX0EpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIktlZXBhbGl2ZSBpZGxlIHRpbWVyOiAlbGx1IHVzXG4iLAorCQkgICB0cF90aWNrX3VzICogdDRfcmVhZF9yZWcoYWRhcCwgVFBfS0VFUF9JRExFX0EpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIktlZXBhbGl2ZSBpbnRlcnZhbDogJWxsdSB1c1xuIiwKKwkJICAgdHBfdGlja191cyAqIHQ0X3JlYWRfcmVnKGFkYXAsIFRQX0tFRVBfSU5UVkxfQSkpOworCXNlcV9wcmludGYoc2VxLCAiSW5pdGlhbCBTUlRUOiAlbGx1IHVzXG4iLAorCQkgICB0cF90aWNrX3VzICogSU5JVFNSVFRfRyh0NF9yZWFkX3JlZyhhZGFwLCBUUF9JTklUX1NSVFRfQSkpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIkZJTldBSVQyIHRpbWVyOiAlbGx1IHVzXG4iLAorCQkgICB0cF90aWNrX3VzICogdDRfcmVhZF9yZWcoYWRhcCwgVFBfRklOV0FJVDJfVElNRVJfQSkpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfREVCVUdGU19GSUxFKGNsayk7CisKKy8qIEZpcm13YXJlIERldmljZSBMb2cgZHVtcC4gKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZGV2bG9nX2xldmVsX3N0cmluZ3NbXSA9IHsKKwlbRldfREVWTE9HX0xFVkVMX0VNRVJHXQkJPSAiRU1FUkciLAorCVtGV19ERVZMT0dfTEVWRUxfQ1JJVF0JCT0gIkNSSVQiLAorCVtGV19ERVZMT0dfTEVWRUxfRVJSXQkJPSAiRVJSIiwKKwlbRldfREVWTE9HX0xFVkVMX05PVElDRV0JPSAiTk9USUNFIiwKKwlbRldfREVWTE9HX0xFVkVMX0lORk9dCQk9ICJJTkZPIiwKKwlbRldfREVWTE9HX0xFVkVMX0RFQlVHXQkJPSAiREVCVUciCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRldmxvZ19mYWNpbGl0eV9zdHJpbmdzW10gPSB7CisJW0ZXX0RFVkxPR19GQUNJTElUWV9DT1JFXQk9ICJDT1JFIiwKKwlbRldfREVWTE9HX0ZBQ0lMSVRZX1NDSEVEXQk9ICJTQ0hFRCIsCisJW0ZXX0RFVkxPR19GQUNJTElUWV9USU1FUl0JPSAiVElNRVIiLAorCVtGV19ERVZMT0dfRkFDSUxJVFlfUkVTXQk9ICJSRVMiLAorCVtGV19ERVZMT0dfRkFDSUxJVFlfSFddCQk9ICJIVyIsCisJW0ZXX0RFVkxPR19GQUNJTElUWV9GTFJdCT0gIkZMUiIsCisJW0ZXX0RFVkxPR19GQUNJTElUWV9ETUFRXQk9ICJETUFRIiwKKwlbRldfREVWTE9HX0ZBQ0lMSVRZX1BIWV0JPSAiUEhZIiwKKwlbRldfREVWTE9HX0ZBQ0lMSVRZX01BQ10JPSAiTUFDIiwKKwlbRldfREVWTE9HX0ZBQ0lMSVRZX1BPUlRdCT0gIlBPUlQiLAorCVtGV19ERVZMT0dfRkFDSUxJVFlfVkldCQk9ICJWSSIsCisJW0ZXX0RFVkxPR19GQUNJTElUWV9GSUxURVJdCT0gIkZJTFRFUiIsCisJW0ZXX0RFVkxPR19GQUNJTElUWV9BQ0xdCT0gIkFDTCIsCisJW0ZXX0RFVkxPR19GQUNJTElUWV9UTV0JCT0gIlRNIiwKKwlbRldfREVWTE9HX0ZBQ0lMSVRZX1FGQ10JPSAiUUZDIiwKKwlbRldfREVWTE9HX0ZBQ0lMSVRZX0RDQl0JPSAiRENCIiwKKwlbRldfREVWTE9HX0ZBQ0lMSVRZX0VUSF0JPSAiRVRIIiwKKwlbRldfREVWTE9HX0ZBQ0lMSVRZX09GTERdCT0gIk9GTEQiLAorCVtGV19ERVZMT0dfRkFDSUxJVFlfUkldCQk9ICJSSSIsCisJW0ZXX0RFVkxPR19GQUNJTElUWV9JU0NTSV0JPSAiSVNDU0kiLAorCVtGV19ERVZMT0dfRkFDSUxJVFlfRkNPRV0JPSAiRkNPRSIsCisJW0ZXX0RFVkxPR19GQUNJTElUWV9GT0lTQ1NJXQk9ICJGT0lTQ1NJIiwKKwlbRldfREVWTE9HX0ZBQ0lMSVRZX0ZPRkNPRV0JPSAiRk9GQ09FIgorfTsKKworLyogSW5mb3JtYXRpb24gZ2F0aGVyZWQgYnkgRGV2aWNlIExvZyBPcGVuIHJvdXRpbmUgZm9yIHRoZSBkaXNwbGF5IHJvdXRpbmUuCisgKi8KK3N0cnVjdCBkZXZsb2dfaW5mbyB7CisJdW5zaWduZWQgaW50IG5lbnRyaWVzOwkJLyogbnVtYmVyIG9mIGVudHJpZXMgaW4gbG9nW10gKi8KKwl1bnNpZ25lZCBpbnQgZmlyc3Q7CQkvKiBmaXJzdCBbdGVtcG9yYWxdIGVudHJ5IGluIGxvZ1tdICovCisJc3RydWN0IGZ3X2RldmxvZ19lIGxvZ1swXTsJLyogRmlybXdhcmUgRGV2aWNlIExvZyAqLworfTsKKworLyogRHVtcCBhIEZpcm1hd2FyZSBEZXZpY2UgTG9nIGVudHJ5LgorICovCitzdGF0aWMgaW50IGRldmxvZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKKwkJc2VxX3ByaW50ZihzZXEsICIlMTBzICAlMTVzICAlOHMgICU4cyAgJXNcbiIsCisJCQkgICAiU2VxIyIsICJUc3RhbXAiLCAiTGV2ZWwiLCAiRmFjaWxpdHkiLCAiTWVzc2FnZSIpOworCWVsc2UgeworCQlzdHJ1Y3QgZGV2bG9nX2luZm8gKmRpbmZvID0gc2VxLT5wcml2YXRlOworCQlpbnQgZmlkeCA9ICh1aW50cHRyX3QpdiAtIDI7CisJCXVuc2lnbmVkIGxvbmcgaW5kZXg7CisJCXN0cnVjdCBmd19kZXZsb2dfZSAqZTsKKworCQkvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBsb2cgZW50cnkgdG8gZGlzcGxheS4gIFNraXAgdW51c2VkIGxvZworCQkgKiBlbnRyaWVzLgorCQkgKi8KKwkJaW5kZXggPSBkaW5mby0+Zmlyc3QgKyBmaWR4OworCQlpZiAoaW5kZXggPj0gZGluZm8tPm5lbnRyaWVzKQorCQkJaW5kZXggLT0gZGluZm8tPm5lbnRyaWVzOworCQllID0gJmRpbmZvLT5sb2dbaW5kZXhdOworCQlpZiAoZS0+dGltZXN0YW1wID09IDApCisJCQlyZXR1cm4gMDsKKworCQkvKiBQcmludCB0aGUgbWVzc2FnZS4gIFRoaXMgZGVwZW5kcyBvbiB0aGUgZmlybXdhcmUgdXNpbmcKKwkJICogZXhhY3RseSB0aGUgc2FtZSBmb3JtYXRpbmcgc3RyaW5ncyBhcyB0aGUga2VybmVsIHNvIHdlIG1heQorCQkgKiBldmVudHVhbGx5IGhhdmUgdG8gcHV0IGEgZm9ybWF0IGludGVycHJldGVyIGluIGhlcmUgLi4uCisJCSAqLworCQlzZXFfcHJpbnRmKHNlcSwgIiUxMGQgICUxNWxsdSAgJThzICAlOHMgICIsCisJCQkgICBlLT5zZXFubywgZS0+dGltZXN0YW1wLAorCQkJICAgKGUtPmxldmVsIDwgQVJSQVlfU0laRShkZXZsb2dfbGV2ZWxfc3RyaW5ncykKKwkJCSAgICA/IGRldmxvZ19sZXZlbF9zdHJpbmdzW2UtPmxldmVsXQorCQkJICAgIDogIlVOS05PV04iKSwKKwkJCSAgIChlLT5mYWNpbGl0eSA8IEFSUkFZX1NJWkUoZGV2bG9nX2ZhY2lsaXR5X3N0cmluZ3MpCisJCQkgICAgPyBkZXZsb2dfZmFjaWxpdHlfc3RyaW5nc1tlLT5mYWNpbGl0eV0KKwkJCSAgICA6ICJVTktOT1dOIikpOworCQlzZXFfcHJpbnRmKHNlcSwgZS0+Zm10LCBlLT5wYXJhbXNbMF0sIGUtPnBhcmFtc1sxXSwKKwkJCSAgIGUtPnBhcmFtc1syXSwgZS0+cGFyYW1zWzNdLCBlLT5wYXJhbXNbNF0sCisJCQkgICBlLT5wYXJhbXNbNV0sIGUtPnBhcmFtc1s2XSwgZS0+cGFyYW1zWzddKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFNlcXVlbnRpYWwgRmlsZSBPcGVyYXRpb25zIGZvciBEZXZpY2UgTG9nLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmRldmxvZ19nZXRfaWR4KHN0cnVjdCBkZXZsb2dfaW5mbyAqZGluZm8sIGxvZmZfdCBwb3MpCit7CisJaWYgKHBvcyA+IGRpbmZvLT5uZW50cmllcykKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gKHZvaWQgKikodWludHB0cl90KShwb3MgKyAxKTsKK30KKworc3RhdGljIHZvaWQgKmRldmxvZ19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGRldmxvZ19pbmZvICpkaW5mbyA9IHNlcS0+cHJpdmF0ZTsKKworCXJldHVybiAoKnBvcworCQk/IGRldmxvZ19nZXRfaWR4KGRpbmZvLCAqcG9zKQorCQk6IFNFUV9TVEFSVF9UT0tFTik7Cit9CisKK3N0YXRpYyB2b2lkICpkZXZsb2dfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGRldmxvZ19pbmZvICpkaW5mbyA9IHNlcS0+cHJpdmF0ZTsKKworCSgqcG9zKSsrOworCXJldHVybiBkZXZsb2dfZ2V0X2lkeChkaW5mbywgKnBvcyk7Cit9CisKK3N0YXRpYyB2b2lkIGRldmxvZ19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIGRldmxvZ19zZXFfb3BzID0geworCS5zdGFydCA9IGRldmxvZ19zdGFydCwKKwkubmV4dCAgPSBkZXZsb2dfbmV4dCwKKwkuc3RvcCAgPSBkZXZsb2dfc3RvcCwKKwkuc2hvdyAgPSBkZXZsb2dfc2hvdworfTsKKworLyogU2V0IHVwIGZvciByZWFkaW5nIHRoZSBmaXJtd2FyZSdzIGRldmljZSBsb2cuICBXZSByZWFkIHRoZSBlbnRpcmUgbG9nIGhlcmUKKyAqIGFuZCB0aGVuIGRpc3BsYXkgaXQgaW5jcmVtZW50YWxseSBpbiBkZXZsb2dfc2hvdygpLgorICovCitzdGF0aWMgaW50IGRldmxvZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlzdHJ1Y3QgZGV2bG9nX3BhcmFtcyAqZHBhcmFtcyA9ICZhZGFwLT5wYXJhbXMuZGV2bG9nOworCXN0cnVjdCBkZXZsb2dfaW5mbyAqZGluZm87CisJdW5zaWduZWQgaW50IGluZGV4OworCXUzMiBmc2Vxbm87CisJaW50IHJldDsKKworCS8qIElmIHdlIGRvbid0IGtub3cgd2hlcmUgdGhlIGxvZyBpcyB3ZSBjYW4ndCBkbyBhbnl0aGluZy4KKwkgKi8KKwlpZiAoZHBhcmFtcy0+c3RhcnQgPT0gMCkKKwkJcmV0dXJuIC1FTlhJTzsKKworCS8qIEFsbG9jYXRlIHRoZSBzcGFjZSB0byByZWFkIGluIHRoZSBmaXJtd2FyZSdzIGRldmljZSBsb2cgYW5kIHNldCB1cAorCSAqIGZvciB0aGUgaXRlcmF0ZWQgY2FsbCB0byBvdXIgZGlzcGxheSBmdW5jdGlvbi4KKwkgKi8KKwlkaW5mbyA9IF9fc2VxX29wZW5fcHJpdmF0ZShmaWxlLCAmZGV2bG9nX3NlcV9vcHMsCisJCQkJICAgc2l6ZW9mKCpkaW5mbykgKyBkcGFyYW1zLT5zaXplKTsKKwlpZiAoIWRpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIFJlY29yZCB0aGUgYmFzaWMgbG9nIGJ1ZmZlciBpbmZvcm1hdGlvbiBhbmQgcmVhZCBpbiB0aGUgcmF3IGxvZy4KKwkgKi8KKwlkaW5mby0+bmVudHJpZXMgPSAoZHBhcmFtcy0+c2l6ZSAvIHNpemVvZihzdHJ1Y3QgZndfZGV2bG9nX2UpKTsKKwlkaW5mby0+Zmlyc3QgPSAwOworCXNwaW5fbG9jaygmYWRhcC0+d2luMF9sb2NrKTsKKwlyZXQgPSB0NF9tZW1vcnlfcncoYWRhcCwgYWRhcC0+cGFyYW1zLmRydl9tZW13aW4sIGRwYXJhbXMtPm1lbXR5cGUsCisJCQkgICBkcGFyYW1zLT5zdGFydCwgZHBhcmFtcy0+c2l6ZSwgKF9fYmUzMiAqKWRpbmZvLT5sb2csCisJCQkgICBUNF9NRU1PUllfUkVBRCk7CisJc3Bpbl91bmxvY2soJmFkYXAtPndpbjBfbG9jayk7CisJaWYgKHJldCkgeworCQlzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBUcmFuc2xhdGUgbG9nIG11bHRpLWJ5dGUgaW50ZWdyYWwgZWxlbWVudHMgaW50byBob3N0IG5hdGl2ZSBmb3JtYXQKKwkgKiBhbmQgZGV0ZXJtaW5lIHdoZXJlIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgbG9nIGlzLgorCSAqLworCWZvciAoZnNlcW5vID0gfigodTMyKTApLCBpbmRleCA9IDA7IGluZGV4IDwgZGluZm8tPm5lbnRyaWVzOyBpbmRleCsrKSB7CisJCXN0cnVjdCBmd19kZXZsb2dfZSAqZSA9ICZkaW5mby0+bG9nW2luZGV4XTsKKwkJaW50IGk7CisJCV9fdTMyIHNlcW5vOworCisJCWlmIChlLT50aW1lc3RhbXAgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWUtPnRpbWVzdGFtcCA9IChfX2ZvcmNlIF9fYmU2NCliZTY0X3RvX2NwdShlLT50aW1lc3RhbXApOworCQlzZXFubyA9IGJlMzJfdG9fY3B1KGUtPnNlcW5vKTsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCWUtPnBhcmFtc1tpXSA9CisJCQkJKF9fZm9yY2UgX19iZTMyKWJlMzJfdG9fY3B1KGUtPnBhcmFtc1tpXSk7CisKKwkJaWYgKHNlcW5vIDwgZnNlcW5vKSB7CisJCQlmc2Vxbm8gPSBzZXFubzsKKwkJCWRpbmZvLT5maXJzdCA9IGluZGV4OworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZsb2dfZm9wcyA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gZGV2bG9nX29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUKK307CisKK3N0YXRpYyBpbnQgbWJveF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgb3duZXJbXSA9IHsgIm5vbmUiLCAiRlciLCAiZHJpdmVyIiwKKwkJCQkJICAgICAgInVua25vd24iIH07CisKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbWJveCA9ICh1aW50cHRyX3Qpc2VxLT5wcml2YXRlICYgNzsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IHNlcS0+cHJpdmF0ZSAtIG1ib3g7CisJdm9pZCBfX2lvbWVtICphZGRyID0gYWRhcC0+cmVncyArIFBGX1JFRyhtYm94LCBDSU1fUEZfTUFJTEJPWF9EQVRBX0EpOworCXVuc2lnbmVkIGludCBjdHJsX3JlZyA9IChpc190NChhZGFwLT5wYXJhbXMuY2hpcCkKKwkJCQkgPyBDSU1fUEZfTUFJTEJPWF9DVFJMX0EKKwkJCQkgOiBDSU1fUEZfTUFJTEJPWF9DVFJMX1NIQURPV19DT1BZX0EpOworCXZvaWQgX19pb21lbSAqY3RybCA9IGFkYXAtPnJlZ3MgKyBQRl9SRUcobWJveCwgY3RybF9yZWcpOworCisJaSA9IE1CT1dORVJfRyhyZWFkbChjdHJsKSk7CisJc2VxX3ByaW50ZihzZXEsICJtYWlsYm94IG93bmVkIGJ5ICVzXG5cbiIsIG93bmVyW2ldKTsKKworCWZvciAoaSA9IDA7IGkgPCBNQk9YX0xFTjsgaSArPSA4KQorCQlzZXFfcHJpbnRmKHNlcSwgIiUwMTZsbHhcbiIsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXJlYWRxKGFkZHIgKyBpKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWJveF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBtYm94X3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgc3NpemVfdCBtYm94X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQoreworCWludCBpOworCWNoYXIgYyA9ICdcbicsIHNbMjU2XTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGF0YVs4XTsKKwljb25zdCBzdHJ1Y3QgaW5vZGUgKmlubzsKKwl1bnNpZ25lZCBpbnQgbWJveDsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcDsKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisJdm9pZCBfX2lvbWVtICpjdHJsOworCisJaWYgKGNvdW50ID4gc2l6ZW9mKHMpIC0gMSB8fCAhY291bnQpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjb3B5X2Zyb21fdXNlcihzLCBidWYsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJc1tjb3VudF0gPSAnXDAnOworCisJaWYgKHNzY2FuZihzLCAiJWxseCAlbGx4ICVsbHggJWxseCAlbGx4ICVsbHggJWxseCAlbGx4JWMiLCAmZGF0YVswXSwKKwkJICAgJmRhdGFbMV0sICZkYXRhWzJdLCAmZGF0YVszXSwgJmRhdGFbNF0sICZkYXRhWzVdLCAmZGF0YVs2XSwKKwkJICAgJmRhdGFbN10sICZjKSA8IDggfHwgYyAhPSAnXG4nKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlubyA9IEZJTEVfREFUQShmaWxlKTsKKwltYm94ID0gKHVpbnRwdHJfdClpbm8tPmlfcHJpdmF0ZSAmIDc7CisJYWRhcCA9IGluby0+aV9wcml2YXRlIC0gbWJveDsKKwlhZGRyID0gYWRhcC0+cmVncyArIFBGX1JFRyhtYm94LCBDSU1fUEZfTUFJTEJPWF9EQVRBX0EpOworCWN0cmwgPSBhZGRyICsgTUJPWF9MRU47CisKKwlpZiAoTUJPV05FUl9HKHJlYWRsKGN0cmwpKSAhPSBYX01CT1dORVJfUEwpCisJCXJldHVybiAtRUJVU1k7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQl3cml0ZXEoZGF0YVtpXSwgYWRkciArIDggKiBpKTsKKworCXdyaXRlbChNQk1TR1ZBTElEX0YgfCBNQk9XTkVSX1YoWF9NQk9XTkVSX0ZXKSwgY3RybCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtYm94X2RlYnVnZnNfZm9wcyA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gbWJveF9vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUgICA9IG1ib3hfd3JpdGUKK307CisKK3N0YXRpYyBzc2l6ZV90IGZsYXNoX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCSAgbG9mZl90ICpwcG9zKQoreworCWxvZmZfdCBwb3MgPSAqcHBvczsKKwlsb2ZmX3QgYXZhaWwgPSBGSUxFX0RBVEEoZmlsZSktPmlfc2l6ZTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCWlmIChwb3MgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAocG9zID49IGF2YWlsKQorCQlyZXR1cm4gMDsKKwlpZiAoY291bnQgPiBhdmFpbCAtIHBvcykKKwkJY291bnQgPSBhdmFpbCAtIHBvczsKKworCXdoaWxlIChjb3VudCkgeworCQlzaXplX3QgbGVuOworCQlpbnQgcmV0LCBvZnN0OworCQl1OCBkYXRhWzI1Nl07CisKKwkJb2ZzdCA9IHBvcyAmIDM7CisJCWxlbiA9IG1pbihjb3VudCArIG9mc3QsIHNpemVvZihkYXRhKSk7CisJCXJldCA9IHQ0X3JlYWRfZmxhc2goYWRhcCwgcG9zIC0gb2ZzdCwgKGxlbiArIDMpIC8gNCwKKwkJCQkgICAgKHUzMiAqKWRhdGEsIDEpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlsZW4gLT0gb2ZzdDsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGRhdGEgKyBvZnN0LCBsZW4pKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJYnVmICs9IGxlbjsKKwkJcG9zICs9IGxlbjsKKwkJY291bnQgLT0gbGVuOworCX0KKwljb3VudCA9IHBvcyAtICpwcG9zOworCSpwcG9zID0gcG9zOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmxhc2hfZGVidWdmc19mb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSBtZW1fb3BlbiwKKwkucmVhZCAgICA9IGZsYXNoX3JlYWQsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgdGNhbXh5MnZhbG1hc2sodTY0IHgsIHU2NCB5LCB1OCAqYWRkciwgdTY0ICptYXNrKQoreworCSptYXNrID0geCB8IHk7CisJeSA9IChfX2ZvcmNlIHU2NCljcHVfdG9fYmU2NCh5KTsKKwltZW1jcHkoYWRkciwgKGNoYXIgKikmeSArIDIsIEVUSF9BTEVOKTsKK30KKworc3RhdGljIGludCBtcHNfdGNhbV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQoreworCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKKwkJc2VxX3B1dHMoc2VxLCAiSWR4ICBFdGhlcm5ldCBhZGRyZXNzICAgICBNYXNrICAgICBWbGQgUG9ydHMgUEYiCisJCQkgIiAgVkYgICAgICAgICAgICAgIFJlcGxpY2F0aW9uICAgICAgICAgICAgICIKKwkJCSAiUDAgUDEgUDIgUDMgIE1MXG4iKTsKKwllbHNlIHsKKwkJdTY0IG1hc2s7CisJCXU4IGFkZHJbRVRIX0FMRU5dOworCQlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IHNlcS0+cHJpdmF0ZTsKKwkJdW5zaWduZWQgaW50IGlkeCA9ICh1aW50cHRyX3QpdiAtIDI7CisJCXU2NCB0Y2FteSA9IHQ0X3JlYWRfcmVnNjQoYWRhcCwgTVBTX0NMU19UQ0FNX1lfTChpZHgpKTsKKwkJdTY0IHRjYW14ID0gdDRfcmVhZF9yZWc2NChhZGFwLCBNUFNfQ0xTX1RDQU1fWF9MKGlkeCkpOworCQl1MzIgY2xzX2xvID0gdDRfcmVhZF9yZWcoYWRhcCwgTVBTX0NMU19TUkFNX0woaWR4KSk7CisJCXUzMiBjbHNfaGkgPSB0NF9yZWFkX3JlZyhhZGFwLCBNUFNfQ0xTX1NSQU1fSChpZHgpKTsKKwkJdTMyIHJwbGNbNF0gPSB7MCwgMCwgMCwgMH07CisKKwkJaWYgKHRjYW14ICYgdGNhbXkpIHsKKwkJCXNlcV9wcmludGYoc2VxLCAiJTN1ICAgICAgICAgLVxuIiwgaWR4KTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJaWYgKGNsc19sbyAmIFJFUExJQ0FURV9GKSB7CisJCQlzdHJ1Y3QgZndfbGRzdF9jbWQgbGRzdF9jbWQ7CisJCQlpbnQgcmV0OworCisJCQltZW1zZXQoJmxkc3RfY21kLCAwLCBzaXplb2YobGRzdF9jbWQpKTsKKwkJCWxkc3RfY21kLm9wX3RvX2FkZHJzcGFjZSA9CisJCQkJaHRvbmwoRldfQ01EX09QX1YoRldfTERTVF9DTUQpIHwKKwkJCQkgICAgICBGV19DTURfUkVRVUVTVF9GIHwKKwkJCQkgICAgICBGV19DTURfUkVBRF9GIHwKKwkJCQkgICAgICBGV19MRFNUX0NNRF9BRERSU1BBQ0VfVigKKwkJCQkJICAgICAgRldfTERTVF9BRERSU1BDX01QUykpOworCQkJbGRzdF9jbWQuY3ljbGVzX3RvX2xlbjE2ID0gaHRvbmwoRldfTEVOMTYobGRzdF9jbWQpKTsKKwkJCWxkc3RfY21kLnUubXBzLmZpZF9jdGwgPQorCQkJCWh0b25zKEZXX0xEU1RfQ01EX0ZJRF9WKEZXX0xEU1RfTVBTX1JQTEMpIHwKKwkJCQkgICAgICBGV19MRFNUX0NNRF9DVExfVihpZHgpKTsKKwkJCXJldCA9IHQ0X3dyX21ib3goYWRhcCwgYWRhcC0+bWJveCwgJmxkc3RfY21kLAorCQkJCQkgc2l6ZW9mKGxkc3RfY21kKSwgJmxkc3RfY21kKTsKKwkJCWlmIChyZXQpCisJCQkJZGV2X3dhcm4oYWRhcC0+cGRldl9kZXYsICJDYW4ndCByZWFkIE1QUyAiCisJCQkJCSAicmVwbGljYXRpb24gbWFwIGZvciBpZHggJWQ6ICVkXG4iLAorCQkJCQkgaWR4LCAtcmV0KTsKKwkJCWVsc2UgeworCQkJCXJwbGNbMF0gPSBudG9obChsZHN0X2NtZC51Lm1wcy5ycGxjMzFfMCk7CisJCQkJcnBsY1sxXSA9IG50b2hsKGxkc3RfY21kLnUubXBzLnJwbGM2M18zMik7CisJCQkJcnBsY1syXSA9IG50b2hsKGxkc3RfY21kLnUubXBzLnJwbGM5NV82NCk7CisJCQkJcnBsY1szXSA9IG50b2hsKGxkc3RfY21kLnUubXBzLnJwbGMxMjdfOTYpOworCQkJfQorCQl9CisKKwkJdGNhbXh5MnZhbG1hc2sodGNhbXgsIHRjYW15LCBhZGRyLCAmbWFzayk7CisJCXNlcV9wcmludGYoc2VxLCAiJTN1ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4ICUwMTJsbHgiCisJCQkgICAiJTNjICAgJSN4JTR1JTRkIiwKKwkJCSAgIGlkeCwgYWRkclswXSwgYWRkclsxXSwgYWRkclsyXSwgYWRkclszXSwgYWRkcls0XSwKKwkJCSAgIGFkZHJbNV0sICh1bnNpZ25lZCBsb25nIGxvbmcpbWFzaywKKwkJCSAgIChjbHNfbG8gJiBTUkFNX1ZMRF9GKSA/ICdZJyA6ICdOJywgUE9SVE1BUF9HKGNsc19oaSksCisJCQkgICBQRl9HKGNsc19sbyksCisJCQkgICAoY2xzX2xvICYgVkZfVkFMSURfRikgPyBWRl9HKGNsc19sbykgOiAtMSk7CisJCWlmIChjbHNfbG8gJiBSRVBMSUNBVEVfRikKKwkJCXNlcV9wcmludGYoc2VxLCAiICUwOHggJTA4eCAlMDh4ICUwOHgiLAorCQkJCSAgIHJwbGNbM10sIHJwbGNbMl0sIHJwbGNbMV0sIHJwbGNbMF0pOworCQllbHNlCisJCQlzZXFfcHJpbnRmKHNlcSwgIiUzNmMiLCAnICcpOworCQlzZXFfcHJpbnRmKHNlcSwgIiU0dSUzdSUzdSUzdSAlI3hcbiIsCisJCQkgICBTUkFNX1BSSU8wX0coY2xzX2xvKSwgU1JBTV9QUklPMV9HKGNsc19sbyksCisJCQkgICBTUkFNX1BSSU8yX0coY2xzX2xvKSwgU1JBTV9QUklPM19HKGNsc19sbyksCisJCQkgICAoY2xzX2xvID4+IE1VTFRJTElTVEVOMF9TKSAmIDB4Zik7CisJfQorb3V0OglyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkICptcHNfdGNhbV9nZXRfaWR4KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwID0gc2VxLT5wcml2YXRlOworCWludCBtYXhfbWFjX2FkZHIgPSBpc190NChhZGFwLT5wYXJhbXMuY2hpcCkgPworCQkJCU5VTV9NUFNfQ0xTX1NSQU1fTF9JTlNUQU5DRVMgOgorCQkJCU5VTV9NUFNfVDVfQ0xTX1NSQU1fTF9JTlNUQU5DRVM7CisJcmV0dXJuICgocG9zIDw9IG1heF9tYWNfYWRkcikgPyAodm9pZCAqKSh1aW50cHRyX3QpKHBvcyArIDEpIDogTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkICptcHNfdGNhbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJcmV0dXJuICpwb3MgPyBtcHNfdGNhbV9nZXRfaWR4KHNlcSwgKnBvcykgOiBTRVFfU1RBUlRfVE9LRU47Cit9CisKK3N0YXRpYyB2b2lkICptcHNfdGNhbV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwkrKypwb3M7CisJcmV0dXJuIG1wc190Y2FtX2dldF9pZHgoc2VxLCAqcG9zKTsKK30KKworc3RhdGljIHZvaWQgbXBzX3RjYW1fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBtcHNfdGNhbV9zZXFfb3BzID0geworCS5zdGFydCA9IG1wc190Y2FtX3N0YXJ0LAorCS5uZXh0ICA9IG1wc190Y2FtX25leHQsCisJLnN0b3AgID0gbXBzX3RjYW1fc3RvcCwKKwkuc2hvdyAgPSBtcHNfdGNhbV9zaG93Cit9OworCitzdGF0aWMgaW50IG1wc190Y2FtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IHJlcyA9IHNlcV9vcGVuKGZpbGUsICZtcHNfdGNhbV9zZXFfb3BzKTsKKworCWlmICghcmVzKSB7CisJCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJCXNlcS0+cHJpdmF0ZSA9IGlub2RlLT5pX3ByaXZhdGU7CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1wc190Y2FtX2RlYnVnZnNfZm9wcyA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gbXBzX3RjYW1fb3BlbiwKKwkucmVhZCAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCit9OworCisvKiBEaXNwbGF5IHZhcmlvdXMgc2Vuc29yIGluZm9ybWF0aW9uLgorICovCitzdGF0aWMgaW50IHNlbnNvcnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IHNlcS0+cHJpdmF0ZTsKKwl1MzIgcGFyYW1bN10sIHZhbFs3XTsKKwlpbnQgcmV0OworCisJLyogTm90ZSB0aGF0IGlmIHRoZSBzZW5zb3JzIGhhdmVuJ3QgYmVlbiBpbml0aWFsaXplZCBhbmQgdHVybmVkIG9uCisJICogd2UnbGwgZ2V0IHZhbHVlcyBvZiAwLCBzbyB0cmVhdCB0aG9zZSBhcyAiPHVua25vd24+IiAuLi4KKwkgKi8KKwlwYXJhbVswXSA9IChGV19QQVJBTVNfTU5FTV9WKEZXX1BBUkFNU19NTkVNX0RFVikgfAorCQkgICAgRldfUEFSQU1TX1BBUkFNX1hfVihGV19QQVJBTVNfUEFSQU1fREVWX0RJQUcpIHwKKwkJICAgIEZXX1BBUkFNU19QQVJBTV9ZX1YoRldfUEFSQU1fREVWX0RJQUdfVE1QKSk7CisJcGFyYW1bMV0gPSAoRldfUEFSQU1TX01ORU1fVihGV19QQVJBTVNfTU5FTV9ERVYpIHwKKwkJICAgIEZXX1BBUkFNU19QQVJBTV9YX1YoRldfUEFSQU1TX1BBUkFNX0RFVl9ESUFHKSB8CisJCSAgICBGV19QQVJBTVNfUEFSQU1fWV9WKEZXX1BBUkFNX0RFVl9ESUFHX1ZERCkpOworCXJldCA9IHQ0X3F1ZXJ5X3BhcmFtcyhhZGFwLCBhZGFwLT5tYm94LCBhZGFwLT5mbiwgMCwgMiwKKwkJCSAgICAgIHBhcmFtLCB2YWwpOworCisJaWYgKHJldCA8IDAgfHwgdmFsWzBdID09IDApCisJCXNlcV9wdXRzKHNlcSwgIlRlbXBlcmF0dXJlOiA8dW5rbm93bj5cbiIpOworCWVsc2UKKwkJc2VxX3ByaW50ZihzZXEsICJUZW1wZXJhdHVyZTogJWRDXG4iLCB2YWxbMF0pOworCisJaWYgKHJldCA8IDAgfHwgdmFsWzFdID09IDApCisJCXNlcV9wdXRzKHNlcSwgIkNvcmUgVkREOiAgICA8dW5rbm93bj5cbiIpOworCWVsc2UKKwkJc2VxX3ByaW50ZihzZXEsICJDb3JlIFZERDogICAgJWRtVlxuIiwgdmFsWzFdKTsKKworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0RFQlVHRlNfRklMRShzZW5zb3JzKTsKKworI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCitzdGF0aWMgaW50IGNsaXBfdGJsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNsaXBfdGJsX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjbGlwX3RibF9kZWJ1Z2ZzX2ZvcHMgPSB7CisJLm93bmVyICAgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICA9IGNsaXBfdGJsX29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlCit9OworI2VuZGlmCisKKy8qUlNTIFRhYmxlLgorICovCisKK3N0YXRpYyBpbnQgcnNzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGludCBpZHgpCit7CisJdTE2ICplbnRyeSA9IHY7CisKKwlzZXFfcHJpbnRmKHNlcSwgIiU0ZDogICU0dSAgJTR1ICAlNHUgICU0dSAgJTR1ICAlNHUgICU0dSAgJTR1XG4iLAorCQkgICBpZHggKiA4LCBlbnRyeVswXSwgZW50cnlbMV0sIGVudHJ5WzJdLCBlbnRyeVszXSwgZW50cnlbNF0sCisJCSAgIGVudHJ5WzVdLCBlbnRyeVs2XSwgZW50cnlbN10pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJzc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCByZXQ7CisJc3RydWN0IHNlcV90YWIgKnA7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBpbm9kZS0+aV9wcml2YXRlOworCisJcCA9IHNlcV9vcGVuX3RhYihmaWxlLCBSU1NfTkVOVFJJRVMgLyA4LCA4ICogc2l6ZW9mKHUxNiksIDAsIHJzc19zaG93KTsKKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gdDRfcmVhZF9yc3MoYWRhcCwgKHUxNiAqKXAtPmRhdGEpOworCWlmIChyZXQpCisJCXNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcnNzX2RlYnVnZnNfZm9wcyA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gcnNzX29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUKK307CisKKy8qIFJTUyBDb25maWd1cmF0aW9uLgorICovCisKKy8qIFNtYWxsIHV0aWxpdHkgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBzdHJpbmdzICJ5ZXMiIG9yICJubyIgaWYgdGhlIHN1cHBsaWVkCisgKiBhcmd1bWVudCBpcyBub24temVyby4KKyAqLworc3RhdGljIGNvbnN0IGNoYXIgKnllc25vKGludCB4KQoreworCXN0YXRpYyBjb25zdCBjaGFyICp5ZXMgPSAieWVzIjsKKwlzdGF0aWMgY29uc3QgY2hhciAqbm8gPSAibm8iOworCisJcmV0dXJuIHggPyB5ZXMgOiBubzsKK30KKworc3RhdGljIGludCByc3NfY29uZmlnX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBzZXEtPnByaXZhdGU7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBrZXltb2RlW10gPSB7CisJCSJnbG9iYWwiLAorCQkiZ2xvYmFsIGFuZCBwZXItVkYgc2NyYW1ibGUiLAorCQkicGVyLVBGIGFuZCBwZXItVkYgc2NyYW1ibGUiLAorCQkicGVyLVZGIGFuZCBwZXItVkYgc2NyYW1ibGUiLAorCX07CisJdTMyIHJzc2NvbmY7CisKKwlyc3Njb25mID0gdDRfcmVhZF9yZWcoYWRhcHRlciwgVFBfUlNTX0NPTkZJR19BKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlRQX1JTU19DT05GSUc6ICUjeFxuIiwgcnNzY29uZik7CisJc2VxX3ByaW50ZihzZXEsICIgIFRubDRUdXBFbklwdjY6ICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmCisJCQkJCQkJVE5MNFRVUEVOSVBWNl9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIFRubDJUdXBFbklwdjY6ICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmCisJCQkJCQkJVE5MMlRVUEVOSVBWNl9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIFRubDRUdXBFbklwdjQ6ICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmCisJCQkJCQkJVE5MNFRVUEVOSVBWNF9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIFRubDJUdXBFbklwdjQ6ICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmCisJCQkJCQkJVE5MMlRVUEVOSVBWNF9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIFRubFRjcFNlbDogICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIFROTFRDUFNFTF9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIFRubElwNlNlbDogICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIFROTElQNlNFTF9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIFRubFZydFNlbDogICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIFROTFZSVFNFTF9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIFRubE1hcEVuOiAgICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIFROTE1BUEVOX0YpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgT2ZkSGFzaFNhdmU6ICAgJTNzXG4iLCB5ZXNubyhyc3Njb25mICYKKwkJCQkJCQlPRkRIQVNIU0FWRV9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIE9mZFZydFNlbDogICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIE9GRFZSVFNFTF9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIE9mZE1hcEVuOiAgICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIE9GRE1BUEVOX0YpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgT2ZkTGtwRW46ICAgICAgJTNzXG4iLCB5ZXNubyhyc3Njb25mICYgT0ZETEtQRU5fRikpOworCXNlcV9wcmludGYoc2VxLCAiICBTeW40VHVwRW5JcHY2OiAlM3NcbiIsIHllc25vKHJzc2NvbmYgJgorCQkJCQkJCVNZTjRUVVBFTklQVjZfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBTeW4yVHVwRW5JcHY2OiAlM3NcbiIsIHllc25vKHJzc2NvbmYgJgorCQkJCQkJCVNZTjJUVVBFTklQVjZfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBTeW40VHVwRW5JcHY0OiAlM3NcbiIsIHllc25vKHJzc2NvbmYgJgorCQkJCQkJCVNZTjRUVVBFTklQVjRfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBTeW4yVHVwRW5JcHY0OiAlM3NcbiIsIHllc25vKHJzc2NvbmYgJgorCQkJCQkJCVNZTjJUVVBFTklQVjRfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBTeW40VHVwRW5JcHY2OiAlM3NcbiIsIHllc25vKHJzc2NvbmYgJgorCQkJCQkJCVNZTjRUVVBFTklQVjZfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBTeW5JcDZTZWw6ICAgICAlM3NcbiIsIHllc25vKHJzc2NvbmYgJiBTWU5JUDZTRUxfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBTeW5WcnQ2U2VsOiAgICAlM3NcbiIsIHllc25vKHJzc2NvbmYgJiBTWU5WUlRTRUxfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBTeW5NYXBFbjogICAgICAlM3NcbiIsIHllc25vKHJzc2NvbmYgJiBTWU5NQVBFTl9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIFN5bkxrcEVuOiAgICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIFNZTkxLUEVOX0YpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgQ2huRW46ICAgICAgICAgJTNzXG4iLCB5ZXNubyhyc3Njb25mICYKKwkJCQkJCQlDSEFOTkVMRU5BQkxFX0YpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgUHJ0RW46ICAgICAgICAgJTNzXG4iLCB5ZXNubyhyc3Njb25mICYKKwkJCQkJCQlQT1JURU5BQkxFX0YpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgVG5sQWxsTGtwOiAgICAgJTNzXG4iLCB5ZXNubyhyc3Njb25mICYKKwkJCQkJCQlUTkxBTExMT09LVVBfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBWcnRFbjogICAgICAgICAlM3NcbiIsIHllc25vKHJzc2NvbmYgJgorCQkJCQkJCVZJUlRFTkFCTEVfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBDbmdFbjogICAgICAgICAlM3NcbiIsIHllc25vKHJzc2NvbmYgJgorCQkJCQkJCUNPTkdFU1RJT05FTkFCTEVfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBIYXNoVG9lcGxpdHo6ICAlM3NcbiIsIHllc25vKHJzc2NvbmYgJgorCQkJCQkJCUhBU0hUT0VQTElUWl9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIFVkcDRFbjogICAgICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIFVEUEVOQUJMRV9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIERpc2FibGU6ICAgICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIERJU0FCTEVfRikpOworCisJc2VxX3B1dHMoc2VxLCAiXG4iKTsKKworCXJzc2NvbmYgPSB0NF9yZWFkX3JlZyhhZGFwdGVyLCBUUF9SU1NfQ09ORklHX1ROTF9BKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlRQX1JTU19DT05GSUdfVE5MOiAlI3hcbiIsIHJzc2NvbmYpOworCXNlcV9wcmludGYoc2VxLCAiICBNYXNrU2l6ZTogICAgICAlM2RcbiIsIE1BU0tTSVpFX0cocnNzY29uZikpOworCXNlcV9wcmludGYoc2VxLCAiICBNYXNrRmlsdGVyOiAgICAlM2RcbiIsIE1BU0tGSUxURVJfRyhyc3Njb25mKSk7CisJaWYgKENIRUxTSU9fQ0hJUF9WRVJTSU9OKGFkYXB0ZXItPnBhcmFtcy5jaGlwKSA+IENIRUxTSU9fVDUpIHsKKwkJc2VxX3ByaW50ZihzZXEsICIgIEhhc2hBbGw6ICAgICAlM3NcbiIsCisJCQkgICB5ZXNubyhyc3Njb25mICYgSEFTSEFMTF9GKSk7CisJCXNlcV9wcmludGYoc2VxLCAiICBIYXNoRXRoOiAgICAgJTNzXG4iLAorCQkJICAgeWVzbm8ocnNzY29uZiAmIEhBU0hFVEhfRikpOworCX0KKwlzZXFfcHJpbnRmKHNlcSwgIiAgVXNlV2lyZUNoOiAgICAgJTNzXG4iLCB5ZXNubyhyc3Njb25mICYgVVNFV0lSRUNIX0YpKTsKKworCXNlcV9wdXRzKHNlcSwgIlxuIik7CisKKwlyc3Njb25mID0gdDRfcmVhZF9yZWcoYWRhcHRlciwgVFBfUlNTX0NPTkZJR19PRkRfQSk7CisJc2VxX3ByaW50ZihzZXEsICJUUF9SU1NfQ09ORklHX09GRDogJSN4XG4iLCByc3Njb25mKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgTWFza1NpemU6ICAgICAgJTNkXG4iLCBNQVNLU0laRV9HKHJzc2NvbmYpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgUlJDcGxNYXBFbjogICAgJTNzXG4iLCB5ZXNubyhyc3Njb25mICYKKwkJCQkJCQlSUkNQTE1BUEVOX0YpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgUlJDcGxRdWVXaWR0aDogJTNkXG4iLCBSUkNQTFFVRVdJRFRIX0cocnNzY29uZikpOworCisJc2VxX3B1dHMoc2VxLCAiXG4iKTsKKworCXJzc2NvbmYgPSB0NF9yZWFkX3JlZyhhZGFwdGVyLCBUUF9SU1NfQ09ORklHX1NZTl9BKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlRQX1JTU19DT05GSUdfU1lOOiAlI3hcbiIsIHJzc2NvbmYpOworCXNlcV9wcmludGYoc2VxLCAiICBNYXNrU2l6ZTogICAgICAlM2RcbiIsIE1BU0tTSVpFX0cocnNzY29uZikpOworCXNlcV9wcmludGYoc2VxLCAiICBVc2VXaXJlQ2g6ICAgICAlM3NcbiIsIHllc25vKHJzc2NvbmYgJiBVU0VXSVJFQ0hfRikpOworCisJc2VxX3B1dHMoc2VxLCAiXG4iKTsKKworCXJzc2NvbmYgPSB0NF9yZWFkX3JlZyhhZGFwdGVyLCBUUF9SU1NfQ09ORklHX1ZSVF9BKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlRQX1JTU19DT05GSUdfVlJUOiAlI3hcbiIsIHJzc2NvbmYpOworCWlmIChDSEVMU0lPX0NISVBfVkVSU0lPTihhZGFwdGVyLT5wYXJhbXMuY2hpcCkgPiBDSEVMU0lPX1Q1KSB7CisJCXNlcV9wcmludGYoc2VxLCAiICBLZXlXckFkZHJYOiAgICAgJTNkXG4iLAorCQkJICAgS0VZV1JBRERSWF9HKHJzc2NvbmYpKTsKKwkJc2VxX3ByaW50ZihzZXEsICIgIEtleUV4dGVuZDogICAgICAlM3NcbiIsCisJCQkgICB5ZXNubyhyc3Njb25mICYgS0VZRVhURU5EX0YpKTsKKwl9CisJc2VxX3ByaW50ZihzZXEsICIgIFZmUmRSZzogICAgICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIFZGUkRSR19GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIFZmUmRFbjogICAgICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIFZGUkRFTl9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIFZmUGVyckVuOiAgICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIFZGUEVSUkVOX0YpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgS2V5UGVyckVuOiAgICAgJTNzXG4iLCB5ZXNubyhyc3Njb25mICYgS0VZUEVSUkVOX0YpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgRGlzVmZWbGFuOiAgICAgJTNzXG4iLCB5ZXNubyhyc3Njb25mICYKKwkJCQkJCQlESVNBQkxFVkxBTl9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIEVuVXBTd3Q6ICAgICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIEVOQUJMRVVQMF9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIEhhc2hEZWxheTogICAgICUzZFxuIiwgSEFTSERFTEFZX0cocnNzY29uZikpOworCWlmIChDSEVMU0lPX0NISVBfVkVSU0lPTihhZGFwdGVyLT5wYXJhbXMuY2hpcCkgPD0gQ0hFTFNJT19UNSkKKwkJc2VxX3ByaW50ZihzZXEsICIgIFZmV3JBZGRyOiAgICAgICUzZFxuIiwgVkZXUkFERFJfRyhyc3Njb25mKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIEtleU1vZGU6ICAgICAgICVzXG4iLCBrZXltb2RlW0tFWU1PREVfRyhyc3Njb25mKV0pOworCXNlcV9wcmludGYoc2VxLCAiICBWZldyRW46ICAgICAgICAlM3NcbiIsIHllc25vKHJzc2NvbmYgJiBWRldSRU5fRikpOworCXNlcV9wcmludGYoc2VxLCAiICBLZXlXckVuOiAgICAgICAlM3NcbiIsIHllc25vKHJzc2NvbmYgJiBLRVlXUkVOX0YpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgS2V5V3JBZGRyOiAgICAgJTNkXG4iLCBLRVlXUkFERFJfRyhyc3Njb25mKSk7CisKKwlzZXFfcHV0cyhzZXEsICJcbiIpOworCisJcnNzY29uZiA9IHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFRQX1JTU19DT05GSUdfQ05HX0EpOworCXNlcV9wcmludGYoc2VxLCAiVFBfUlNTX0NPTkZJR19DTkc6ICUjeFxuIiwgcnNzY29uZik7CisJc2VxX3ByaW50ZihzZXEsICIgIENobkNvdW50MzogICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIENITkNPVU5UM19GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIENobkNvdW50MjogICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIENITkNPVU5UMl9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIENobkNvdW50MTogICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIENITkNPVU5UMV9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIENobkNvdW50MDogICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIENITkNPVU5UMF9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIENoblVuZEZsb3czOiAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmCisJCQkJCQkJQ0hOVU5ERkxPVzNfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBDaG5VbmRGbG93MjogICAlM3NcbiIsIHllc25vKHJzc2NvbmYgJgorCQkJCQkJCUNITlVOREZMT1cyX0YpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgQ2huVW5kRmxvdzE6ICAgJTNzXG4iLCB5ZXNubyhyc3Njb25mICYKKwkJCQkJCQlDSE5VTkRGTE9XMV9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIENoblVuZEZsb3cwOiAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmCisJCQkJCQkJQ0hOVU5ERkxPVzBfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBSc3RDaG4zOiAgICAgICAlM3NcbiIsIHllc25vKHJzc2NvbmYgJiBSU1RDSE4zX0YpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgUnN0Q2huMjogICAgICAgJTNzXG4iLCB5ZXNubyhyc3Njb25mICYgUlNUQ0hOMl9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIFJzdENobjE6ICAgICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIFJTVENITjFfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBSc3RDaG4wOiAgICAgICAlM3NcbiIsIHllc25vKHJzc2NvbmYgJiBSU1RDSE4wX0YpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgVXBkVmxkOiAgICAgICAgJTNzXG4iLCB5ZXNubyhyc3Njb25mICYgVVBEVkxEX0YpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgWG9mZjogICAgICAgICAgJTNzXG4iLCB5ZXNubyhyc3Njb25mICYgWE9GRl9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIFVwZENobjM6ICAgICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIFVQRENITjNfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBVcGRDaG4yOiAgICAgICAlM3NcbiIsIHllc25vKHJzc2NvbmYgJiBVUERDSE4yX0YpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiAgVXBkQ2huMTogICAgICAgJTNzXG4iLCB5ZXNubyhyc3Njb25mICYgVVBEQ0hOMV9GKSk7CisJc2VxX3ByaW50ZihzZXEsICIgIFVwZENobjA6ICAgICAgICUzc1xuIiwgeWVzbm8ocnNzY29uZiAmIFVQRENITjBfRikpOworCXNlcV9wcmludGYoc2VxLCAiICBRdWV1ZTogICAgICAgICAlM2RcbiIsIFFVRVVFX0cocnNzY29uZikpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfREVCVUdGU19GSUxFKHJzc19jb25maWcpOworCisvKiBSU1MgU2VjcmV0IEtleS4KKyAqLworCitzdGF0aWMgaW50IHJzc19rZXlfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwl1MzIga2V5WzEwXTsKKworCXQ0X3JlYWRfcnNzX2tleShzZXEtPnByaXZhdGUsIGtleSk7CisJc2VxX3ByaW50ZihzZXEsICIlMDh4JTA4eCUwOHglMDh4JTA4eCUwOHglMDh4JTA4eCUwOHglMDh4XG4iLAorCQkgICBrZXlbOV0sIGtleVs4XSwga2V5WzddLCBrZXlbNl0sIGtleVs1XSwga2V5WzRdLCBrZXlbM10sCisJCSAgIGtleVsyXSwga2V5WzFdLCBrZXlbMF0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJzc19rZXlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnNzX2tleV9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIHNzaXplX3QgcnNzX2tleV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKK3sKKwlpbnQgaSwgajsKKwl1MzIga2V5WzEwXTsKKwljaGFyIHNbMTAwXSwgKnA7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBGSUxFX0RBVEEoZmlsZSktPmlfcHJpdmF0ZTsKKworCWlmIChjb3VudCA+IHNpemVvZihzKSAtIDEpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjb3B5X2Zyb21fdXNlcihzLCBidWYsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJZm9yIChpID0gY291bnQ7IGkgPiAwICYmIGlzc3BhY2Uoc1tpIC0gMV0pOyBpLS0pCisJCTsKKwlzW2ldID0gJ1wwJzsKKworCWZvciAocCA9IHMsIGkgPSA5OyBpID49IDA7IGktLSkgeworCQlrZXlbaV0gPSAwOworCQlmb3IgKGogPSAwOyBqIDwgODsgaisrLCBwKyspIHsKKwkJCWlmICghaXN4ZGlnaXQoKnApKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJa2V5W2ldID0gKGtleVtpXSA8PCA0KSB8IGhleDJ2YWwoKnApOworCQl9CisJfQorCisJdDRfd3JpdGVfcnNzX2tleShhZGFwLCBrZXksIC0xKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJzc19rZXlfZGVidWdmc19mb3BzID0geworCS5vd25lciAgID0gVEhJU19NT0RVTEUsCisJLm9wZW4gICAgPSByc3Nfa2V5X29wZW4sCisJLnJlYWQgICAgPSBzZXFfcmVhZCwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZSAgID0gcnNzX2tleV93cml0ZQorfTsKKworLyogUEYgUlNTIENvbmZpZ3VyYXRpb24uCisgKi8KKworc3RydWN0IHJzc19wZl9jb25mIHsKKwl1MzIgcnNzX3BmX21hcDsKKwl1MzIgcnNzX3BmX21hc2s7CisJdTMyIHJzc19wZl9jb25maWc7Cit9OworCitzdGF0aWMgaW50IHJzc19wZl9jb25maWdfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgcnNzX3BmX2NvbmYgKnBmY29uZjsKKworCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgeworCQkvKiB1c2UgdGhlIDB0aCBlbnRyeSB0byBkdW1wIHRoZSBQRiBNYXAgSW5kZXggU2l6ZSAqLworCQlwZmNvbmYgPSBzZXEtPnByaXZhdGUgKyBvZmZzZXRvZihzdHJ1Y3Qgc2VxX3RhYiwgZGF0YSk7CisJCXNlcV9wcmludGYoc2VxLCAiUEYgTWFwIEluZGV4IFNpemUgPSAlZFxuXG4iLAorCQkJICAgTEtQSURYU0laRV9HKHBmY29uZi0+cnNzX3BmX21hcCkpOworCisJCXNlcV9wdXRzKHNlcSwgIiAgICAgUlNTICAgICAgICAgICAgICBQRiAgIFZGICAgIEhhc2ggVHVwbGUgRW5hYmxlICAgICAgICAgRGVmYXVsdFxuIik7CisJCXNlcV9wdXRzKHNlcSwgIiAgICAgRW5hYmxlICAgICAgIElQRiBNYXNrIE1hc2sgIElQdjYgICAgICBJUHY0ICAgICAgVURQICAgUXVldWVcbiIpOworCQlzZXFfcHV0cyhzZXEsICIgUEYgIE1hcCBDaG4gUHJ0ICBNYXAgU2l6ZSBTaXplICBGb3VyIFR3byAgRm91ciBUd28gIEZvdXIgIENoMSAgQ2gwXG4iKTsKKwl9IGVsc2UgeworCQkjZGVmaW5lIEdfUEZuTEtQSURYKG1hcCwgbikgXAorCQkJKCgobWFwKSA+PiBQRjFMS1BJRFhfUyoobikpICYgUEYwTEtQSURYX00pCisJCSNkZWZpbmUgR19QRm5NU0tTSVpFKG1hc2ssIG4pIFwKKwkJCSgoKG1hc2spID4+IFBGMU1TS1NJWkVfUyoobikpICYgUEYxTVNLU0laRV9NKQorCisJCXBmY29uZiA9IHY7CisJCXNlcV9wcmludGYoc2VxLCAiJTNkICAlM3MgJTNzICUzcyAgJTNkICAlM2QgICUzZCAgICUzcyAlM3MgICAlM3MgJTNzICAgJTNzICAlM2QgICUzZFxuIiwKKwkJCSAgIGlkeCwKKwkJCSAgIHllc25vKHBmY29uZi0+cnNzX3BmX2NvbmZpZyAmIE1BUEVOQUJMRV9GKSwKKwkJCSAgIHllc25vKHBmY29uZi0+cnNzX3BmX2NvbmZpZyAmIENITkVOQUJMRV9GKSwKKwkJCSAgIHllc25vKHBmY29uZi0+cnNzX3BmX2NvbmZpZyAmIFBSVEVOQUJMRV9GKSwKKwkJCSAgIEdfUEZuTEtQSURYKHBmY29uZi0+cnNzX3BmX21hcCwgaWR4KSwKKwkJCSAgIEdfUEZuTVNLU0laRShwZmNvbmYtPnJzc19wZl9tYXNrLCBpZHgpLAorCQkJICAgSVZGV0lEVEhfRyhwZmNvbmYtPnJzc19wZl9jb25maWcpLAorCQkJICAgeWVzbm8ocGZjb25mLT5yc3NfcGZfY29uZmlnICYgSVA2Rk9VUlRVUEVOX0YpLAorCQkJICAgeWVzbm8ocGZjb25mLT5yc3NfcGZfY29uZmlnICYgSVA2VFdPVFVQRU5fRiksCisJCQkgICB5ZXNubyhwZmNvbmYtPnJzc19wZl9jb25maWcgJiBJUDRGT1VSVFVQRU5fRiksCisJCQkgICB5ZXNubyhwZmNvbmYtPnJzc19wZl9jb25maWcgJiBJUDRUV09UVVBFTl9GKSwKKwkJCSAgIHllc25vKHBmY29uZi0+cnNzX3BmX2NvbmZpZyAmIFVEUEZPVVJUVVBFTl9GKSwKKwkJCSAgIENIMURFRkFVTFRRVUVVRV9HKHBmY29uZi0+cnNzX3BmX2NvbmZpZyksCisJCQkgICBDSDBERUZBVUxUUVVFVUVfRyhwZmNvbmYtPnJzc19wZl9jb25maWcpKTsKKworCQkjdW5kZWYgR19QRm5MS1BJRFgKKwkJI3VuZGVmIEdfUEZuTVNLU0laRQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByc3NfcGZfY29uZmlnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBpbm9kZS0+aV9wcml2YXRlOworCXN0cnVjdCBzZXFfdGFiICpwOworCXUzMiByc3NfcGZfbWFwLCByc3NfcGZfbWFzazsKKwlzdHJ1Y3QgcnNzX3BmX2NvbmYgKnBmY29uZjsKKwlpbnQgcGY7CisKKwlwID0gc2VxX29wZW5fdGFiKGZpbGUsIDgsIHNpemVvZigqcGZjb25mKSwgMSwgcnNzX3BmX2NvbmZpZ19zaG93KTsKKwlpZiAoIXApCisJCXJldHVybiAtRU5PTUVNOworCisJcGZjb25mID0gKHN0cnVjdCByc3NfcGZfY29uZiAqKXAtPmRhdGE7CisJcnNzX3BmX21hcCA9IHQ0X3JlYWRfcnNzX3BmX21hcChhZGFwdGVyKTsKKwlyc3NfcGZfbWFzayA9IHQ0X3JlYWRfcnNzX3BmX21hc2soYWRhcHRlcik7CisJZm9yIChwZiA9IDA7IHBmIDwgODsgcGYrKykgeworCQlwZmNvbmZbcGZdLnJzc19wZl9tYXAgPSByc3NfcGZfbWFwOworCQlwZmNvbmZbcGZdLnJzc19wZl9tYXNrID0gcnNzX3BmX21hc2s7CisJCXQ0X3JlYWRfcnNzX3BmX2NvbmZpZyhhZGFwdGVyLCBwZiwgJnBmY29uZltwZl0ucnNzX3BmX2NvbmZpZyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByc3NfcGZfY29uZmlnX2RlYnVnZnNfZm9wcyA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgID0gcnNzX3BmX2NvbmZpZ19vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlCit9OworCisvKiBWRiBSU1MgQ29uZmlndXJhdGlvbi4KKyAqLworCitzdHJ1Y3QgcnNzX3ZmX2NvbmYgeworCXUzMiByc3NfdmZfdmZsOworCXUzMiByc3NfdmZfdmZoOworfTsKKworc3RhdGljIGludCByc3NfdmZfY29uZmlnX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGludCBpZHgpCit7CisJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CisJCXNlcV9wdXRzKHNlcSwgIiAgICAgUlNTICAgICAgICAgICAgICAgICAgICAgSGFzaCBUdXBsZSBFbmFibGVcbiIpOworCQlzZXFfcHV0cyhzZXEsICIgICAgIEVuYWJsZSAgIElWRiAgRGlzICBFbmIgIElQdjYgICAgICBJUHY0ICAgICAgVURQICAgIERlZiAgU2VjcmV0IEtleVxuIik7CisJCXNlcV9wdXRzKHNlcSwgIiBWRiAgQ2huIFBydCAgTWFwICBWTEFOICB1UCAgRm91ciBUd28gIEZvdXIgVHdvICBGb3VyICAgUXVlICBJZHggICAgICAgSGFzaFxuIik7CisJfSBlbHNlIHsKKwkJc3RydWN0IHJzc192Zl9jb25mICp2ZmNvbmYgPSB2OworCisJCXNlcV9wcmludGYoc2VxLCAiJTNkICAlM3MgJTNzICAlM2QgICAlM3MgJTNzICAgJTNzICUzcyAgICUzcyAgJTNzICAgJTNzICAlNGQgICUzZCAlIzEweFxuIiwKKwkJCSAgIGlkeCwKKwkJCSAgIHllc25vKHZmY29uZi0+cnNzX3ZmX3ZmaCAmIFZGQ0hORU5fRiksCisJCQkgICB5ZXNubyh2ZmNvbmYtPnJzc192Zl92ZmggJiBWRlBSVEVOX0YpLAorCQkJICAgVkZMS1BJRFhfRyh2ZmNvbmYtPnJzc192Zl92ZmgpLAorCQkJICAgeWVzbm8odmZjb25mLT5yc3NfdmZfdmZoICYgVkZWTE5FWF9GKSwKKwkJCSAgIHllc25vKHZmY29uZi0+cnNzX3ZmX3ZmaCAmIFZGVVBFTl9GKSwKKwkJCSAgIHllc25vKHZmY29uZi0+cnNzX3ZmX3ZmaCAmIFZGSVA0Rk9VUlRVUEVOX0YpLAorCQkJICAgeWVzbm8odmZjb25mLT5yc3NfdmZfdmZoICYgVkZJUDZUV09UVVBFTl9GKSwKKwkJCSAgIHllc25vKHZmY29uZi0+cnNzX3ZmX3ZmaCAmIFZGSVA0Rk9VUlRVUEVOX0YpLAorCQkJICAgeWVzbm8odmZjb25mLT5yc3NfdmZfdmZoICYgVkZJUDRUV09UVVBFTl9GKSwKKwkJCSAgIHllc25vKHZmY29uZi0+cnNzX3ZmX3ZmaCAmIEVOQUJMRVVEUEhBU0hfRiksCisJCQkgICBERUZBVUxUUVVFVUVfRyh2ZmNvbmYtPnJzc192Zl92ZmgpLAorCQkJICAgS0VZSU5ERVhfRyh2ZmNvbmYtPnJzc192Zl92ZmgpLAorCQkJICAgdmZjb25mLT5yc3NfdmZfdmZsKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnNzX3ZmX2NvbmZpZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlzdHJ1Y3Qgc2VxX3RhYiAqcDsKKwlzdHJ1Y3QgcnNzX3ZmX2NvbmYgKnZmY29uZjsKKwlpbnQgdmY7CisKKwlwID0gc2VxX29wZW5fdGFiKGZpbGUsIDEyOCwgc2l6ZW9mKCp2ZmNvbmYpLCAxLCByc3NfdmZfY29uZmlnX3Nob3cpOworCWlmICghcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl2ZmNvbmYgPSAoc3RydWN0IHJzc192Zl9jb25mICopcC0+ZGF0YTsKKwlmb3IgKHZmID0gMDsgdmYgPCAxMjg7IHZmKyspIHsKKwkJdDRfcmVhZF9yc3NfdmZfY29uZmlnKGFkYXB0ZXIsIHZmLCAmdmZjb25mW3ZmXS5yc3NfdmZfdmZsLAorCQkJCSAgICAgICZ2ZmNvbmZbdmZdLnJzc192Zl92ZmgpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcnNzX3ZmX2NvbmZpZ19kZWJ1Z2ZzX2ZvcHMgPSB7CisJLm93bmVyICAgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICA9IHJzc192Zl9jb25maWdfb3BlbiwKKwkucmVhZCAgICA9IHNlcV9yZWFkLAorCS5sbHNlZWsgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZQorfTsKKworLyoqCisgKiBldGhxc2V0MnBpbmZvIC0gcmV0dXJuIHBvcnRfaW5mbyBvZiBhbiBFdGhlcm5ldCBRdWV1ZSBTZXQKKyAqIEBhZGFwOiB0aGUgYWRhcHRlcgorICogQHFzZXQ6IEV0aGVybmV0IFF1ZXVlIFNldAorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwb3J0X2luZm8gKmV0aHFzZXQycGluZm8oc3RydWN0IGFkYXB0ZXIgKmFkYXAsIGludCBxc2V0KQoreworCWludCBwaWR4OworCisJZm9yX2VhY2hfcG9ydChhZGFwLCBwaWR4KSB7CisJCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gYWRhcDJwaW5mbyhhZGFwLCBwaWR4KTsKKworCQlpZiAocXNldCA+PSBwaS0+Zmlyc3RfcXNldCAmJgorCQkgICAgcXNldCA8IHBpLT5maXJzdF9xc2V0ICsgcGktPm5xc2V0cykKKwkJCXJldHVybiBwaTsKKwl9CisKKwkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuISAqLworCUJVR19PTigxKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBzZ2VfcWluZm9fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IHNlcS0+cHJpdmF0ZTsKKwlpbnQgZXRoX2VudHJpZXMgPSBESVZfUk9VTkRfVVAoYWRhcC0+c2dlLmV0aHFzZXRzLCA0KTsKKwlpbnQgdG9lX2VudHJpZXMgPSBESVZfUk9VTkRfVVAoYWRhcC0+c2dlLm9mbGRxc2V0cywgNCk7CisJaW50IHJkbWFfZW50cmllcyA9IERJVl9ST1VORF9VUChhZGFwLT5zZ2UucmRtYXFzLCA0KTsKKwlpbnQgY2lxX2VudHJpZXMgPSBESVZfUk9VTkRfVVAoYWRhcC0+c2dlLnJkbWFjaXFzLCA0KTsKKwlpbnQgY3RybF9lbnRyaWVzID0gRElWX1JPVU5EX1VQKE1BWF9DVFJMX1FVRVVFUywgNCk7CisJaW50IGksIHIgPSAodWludHB0cl90KXYgLSAxOworCWludCB0b2VfaWR4ID0gciAtIGV0aF9lbnRyaWVzOworCWludCByZG1hX2lkeCA9IHRvZV9pZHggLSB0b2VfZW50cmllczsKKwlpbnQgY2lxX2lkeCA9IHJkbWFfaWR4IC0gcmRtYV9lbnRyaWVzOworCWludCBjdHJsX2lkeCA9ICBjaXFfaWR4IC0gY2lxX2VudHJpZXM7CisJaW50IGZxX2lkeCA9ICBjdHJsX2lkeCAtIGN0cmxfZW50cmllczsKKworCWlmIChyKQorCQlzZXFfcHV0YyhzZXEsICdcbicpOworCisjZGVmaW5lIFMzKGZtdF9zcGVjLCBzLCB2KSBcCitkbyB7IFwKKwlzZXFfcHJpbnRmKHNlcSwgIiUtMTJzIiwgcyk7IFwKKwlmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSBcCisJCXNlcV9wcmludGYoc2VxLCAiICUxNiIgZm10X3NwZWMsIHYpOyBcCisJCXNlcV9wdXRjKHNlcSwgJ1xuJyk7IFwKK30gd2hpbGUgKDApCisjZGVmaW5lIFMocywgdikgUzMoInMiLCBzLCB2KQorI2RlZmluZSBUKHMsIHYpIFMzKCJ1IiwgcywgdHhbaV0udikKKyNkZWZpbmUgUihzLCB2KSBTMygidSIsIHMsIHJ4W2ldLnYpCisKKwlpZiAociA8IGV0aF9lbnRyaWVzKSB7CisJCWludCBiYXNlX3FzZXQgPSByICogNDsKKwkJY29uc3Qgc3RydWN0IHNnZV9ldGhfcnhxICpyeCA9ICZhZGFwLT5zZ2UuZXRocnhxW2Jhc2VfcXNldF07CisJCWNvbnN0IHN0cnVjdCBzZ2VfZXRoX3R4cSAqdHggPSAmYWRhcC0+c2dlLmV0aHR4cVtiYXNlX3FzZXRdOworCQlpbnQgbiA9IG1pbig0LCBhZGFwLT5zZ2UuZXRocXNldHMgLSA0ICogcik7CisKKwkJUygiUVR5cGU6IiwgIkV0aGVybmV0Iik7CisJCVMoIkludGVyZmFjZToiLAorCQkgIHJ4W2ldLnJzcHEubmV0ZGV2ID8gcnhbaV0ucnNwcS5uZXRkZXYtPm5hbWUgOiAiTi9BIik7CisJCVQoIlR4USBJRDoiLCBxLmNudHh0X2lkKTsKKwkJVCgiVHhRIHNpemU6IiwgcS5zaXplKTsKKwkJVCgiVHhRIGludXNlOiIsIHEuaW5fdXNlKTsKKwkJVCgiVHhRIENJRFg6IiwgcS5jaWR4KTsKKwkJVCgiVHhRIFBJRFg6IiwgcS5waWR4KTsKKyNpZmRlZiBDT05GSUdfQ0hFTFNJT19UNF9EQ0IKKwkJVCgiRENCIFByaW86IiwgZGNiX3ByaW8pOworCQlTMygidSIsICJEQ0IgUEdJRDoiLAorCQkgICAoZXRocXNldDJwaW5mbyhhZGFwLCBiYXNlX3FzZXQgKyBpKS0+ZGNiLnBnaWQgPj4KKwkJICAgIDQqKDctdHhbaV0uZGNiX3ByaW8pKSAmIDB4Zik7CisJCVMzKCJ1IiwgIkRDQiBQRkM6IiwKKwkJICAgKGV0aHFzZXQycGluZm8oYWRhcCwgYmFzZV9xc2V0ICsgaSktPmRjYi5wZmNlbiA+PgorCQkgICAgMSooNy10eFtpXS5kY2JfcHJpbykpICYgMHgxKTsKKyNlbmRpZgorCQlSKCJSc3BRIElEOiIsIHJzcHEuYWJzX2lkKTsKKwkJUigiUnNwUSBzaXplOiIsIHJzcHEuc2l6ZSk7CisJCVIoIlJzcFFFIHNpemU6IiwgcnNwcS5pcWVfbGVuKTsKKwkJUigiUnNwUSBDSURYOiIsIHJzcHEuY2lkeCk7CisJCVIoIlJzcFEgR2VuOiIsIHJzcHEuZ2VuKTsKKwkJUzMoInUiLCAiSW50ciBkZWxheToiLCBxdGltZXJfdmFsKGFkYXAsICZyeFtpXS5yc3BxKSk7CisJCVMzKCJ1IiwgIkludHIgcGt0Y250OiIsCisJCSAgIGFkYXAtPnNnZS5jb3VudGVyX3ZhbFtyeFtpXS5yc3BxLnBrdGNudF9pZHhdKTsKKwkJUigiRkwgSUQ6IiwgZmwuY250eHRfaWQpOworCQlSKCJGTCBzaXplOiIsIGZsLnNpemUgLSA4KTsKKwkJUigiRkwgcGVuZDoiLCBmbC5wZW5kX2NyZWQpOworCQlSKCJGTCBhdmFpbDoiLCBmbC5hdmFpbCk7CisJCVIoIkZMIFBJRFg6IiwgZmwucGlkeCk7CisJCVIoIkZMIENJRFg6IiwgZmwuY2lkeCk7CisJfSBlbHNlIGlmICh0b2VfaWR4IDwgdG9lX2VudHJpZXMpIHsKKwkJY29uc3Qgc3RydWN0IHNnZV9vZmxkX3J4cSAqcnggPSAmYWRhcC0+c2dlLm9mbGRyeHFbdG9lX2lkeCAqIDRdOworCQljb25zdCBzdHJ1Y3Qgc2dlX29mbGRfdHhxICp0eCA9ICZhZGFwLT5zZ2Uub2ZsZHR4cVt0b2VfaWR4ICogNF07CisJCWludCBuID0gbWluKDQsIGFkYXAtPnNnZS5vZmxkcXNldHMgLSA0ICogdG9lX2lkeCk7CisKKwkJUygiUVR5cGU6IiwgIlRPRSIpOworCQlUKCJUeFEgSUQ6IiwgcS5jbnR4dF9pZCk7CisJCVQoIlR4USBzaXplOiIsIHEuc2l6ZSk7CisJCVQoIlR4USBpbnVzZToiLCBxLmluX3VzZSk7CisJCVQoIlR4USBDSURYOiIsIHEuY2lkeCk7CisJCVQoIlR4USBQSURYOiIsIHEucGlkeCk7CisJCVIoIlJzcFEgSUQ6IiwgcnNwcS5hYnNfaWQpOworCQlSKCJSc3BRIHNpemU6IiwgcnNwcS5zaXplKTsKKwkJUigiUnNwUUUgc2l6ZToiLCByc3BxLmlxZV9sZW4pOworCQlSKCJSc3BRIENJRFg6IiwgcnNwcS5jaWR4KTsKKwkJUigiUnNwUSBHZW46IiwgcnNwcS5nZW4pOworCQlTMygidSIsICJJbnRyIGRlbGF5OiIsIHF0aW1lcl92YWwoYWRhcCwgJnJ4W2ldLnJzcHEpKTsKKwkJUzMoInUiLCAiSW50ciBwa3RjbnQ6IiwKKwkJICAgYWRhcC0+c2dlLmNvdW50ZXJfdmFsW3J4W2ldLnJzcHEucGt0Y250X2lkeF0pOworCQlSKCJGTCBJRDoiLCBmbC5jbnR4dF9pZCk7CisJCVIoIkZMIHNpemU6IiwgZmwuc2l6ZSAtIDgpOworCQlSKCJGTCBwZW5kOiIsIGZsLnBlbmRfY3JlZCk7CisJCVIoIkZMIGF2YWlsOiIsIGZsLmF2YWlsKTsKKwkJUigiRkwgUElEWDoiLCBmbC5waWR4KTsKKwkJUigiRkwgQ0lEWDoiLCBmbC5jaWR4KTsKKwl9IGVsc2UgaWYgKHJkbWFfaWR4IDwgcmRtYV9lbnRyaWVzKSB7CisJCWNvbnN0IHN0cnVjdCBzZ2Vfb2ZsZF9yeHEgKnJ4ID0KKwkJCQkmYWRhcC0+c2dlLnJkbWFyeHFbcmRtYV9pZHggKiA0XTsKKwkJaW50IG4gPSBtaW4oNCwgYWRhcC0+c2dlLnJkbWFxcyAtIDQgKiByZG1hX2lkeCk7CisKKwkJUygiUVR5cGU6IiwgIlJETUEtQ1BMIik7CisJCVIoIlJzcFEgSUQ6IiwgcnNwcS5hYnNfaWQpOworCQlSKCJSc3BRIHNpemU6IiwgcnNwcS5zaXplKTsKKwkJUigiUnNwUUUgc2l6ZToiLCByc3BxLmlxZV9sZW4pOworCQlSKCJSc3BRIENJRFg6IiwgcnNwcS5jaWR4KTsKKwkJUigiUnNwUSBHZW46IiwgcnNwcS5nZW4pOworCQlTMygidSIsICJJbnRyIGRlbGF5OiIsIHF0aW1lcl92YWwoYWRhcCwgJnJ4W2ldLnJzcHEpKTsKKwkJUzMoInUiLCAiSW50ciBwa3RjbnQ6IiwKKwkJICAgYWRhcC0+c2dlLmNvdW50ZXJfdmFsW3J4W2ldLnJzcHEucGt0Y250X2lkeF0pOworCQlSKCJGTCBJRDoiLCBmbC5jbnR4dF9pZCk7CisJCVIoIkZMIHNpemU6IiwgZmwuc2l6ZSAtIDgpOworCQlSKCJGTCBwZW5kOiIsIGZsLnBlbmRfY3JlZCk7CisJCVIoIkZMIGF2YWlsOiIsIGZsLmF2YWlsKTsKKwkJUigiRkwgUElEWDoiLCBmbC5waWR4KTsKKwkJUigiRkwgQ0lEWDoiLCBmbC5jaWR4KTsKKwl9IGVsc2UgaWYgKGNpcV9pZHggPCBjaXFfZW50cmllcykgeworCQljb25zdCBzdHJ1Y3Qgc2dlX29mbGRfcnhxICpyeCA9ICZhZGFwLT5zZ2UucmRtYWNpcVtjaXFfaWR4ICogNF07CisJCWludCBuID0gbWluKDQsIGFkYXAtPnNnZS5yZG1hY2lxcyAtIDQgKiBjaXFfaWR4KTsKKworCQlTKCJRVHlwZToiLCAiUkRNQS1DSVEiKTsKKwkJUigiUnNwUSBJRDoiLCByc3BxLmFic19pZCk7CisJCVIoIlJzcFEgc2l6ZToiLCByc3BxLnNpemUpOworCQlSKCJSc3BRRSBzaXplOiIsIHJzcHEuaXFlX2xlbik7CisJCVIoIlJzcFEgQ0lEWDoiLCByc3BxLmNpZHgpOworCQlSKCJSc3BRIEdlbjoiLCByc3BxLmdlbik7CisJCVMzKCJ1IiwgIkludHIgZGVsYXk6IiwgcXRpbWVyX3ZhbChhZGFwLCAmcnhbaV0ucnNwcSkpOworCQlTMygidSIsICJJbnRyIHBrdGNudDoiLAorCQkgICBhZGFwLT5zZ2UuY291bnRlcl92YWxbcnhbaV0ucnNwcS5wa3RjbnRfaWR4XSk7CisJfSBlbHNlIGlmIChjdHJsX2lkeCA8IGN0cmxfZW50cmllcykgeworCQljb25zdCBzdHJ1Y3Qgc2dlX2N0cmxfdHhxICp0eCA9ICZhZGFwLT5zZ2UuY3RybHFbY3RybF9pZHggKiA0XTsKKwkJaW50IG4gPSBtaW4oNCwgYWRhcC0+cGFyYW1zLm5wb3J0cyAtIDQgKiBjdHJsX2lkeCk7CisKKwkJUygiUVR5cGU6IiwgIkNvbnRyb2wiKTsKKwkJVCgiVHhRIElEOiIsIHEuY250eHRfaWQpOworCQlUKCJUeFEgc2l6ZToiLCBxLnNpemUpOworCQlUKCJUeFEgaW51c2U6IiwgcS5pbl91c2UpOworCQlUKCJUeFEgQ0lEWDoiLCBxLmNpZHgpOworCQlUKCJUeFEgUElEWDoiLCBxLnBpZHgpOworCX0gZWxzZSBpZiAoZnFfaWR4ID09IDApIHsKKwkJY29uc3Qgc3RydWN0IHNnZV9yc3BxICpldnRxID0gJmFkYXAtPnNnZS5md19ldnRxOworCisJCXNlcV9wcmludGYoc2VxLCAiJS0xMnMgJTE2c1xuIiwgIlFUeXBlOiIsICJGVyBldmVudCBxdWV1ZSIpOworCQlzZXFfcHJpbnRmKHNlcSwgIiUtMTJzICUxNnVcbiIsICJSc3BRIElEOiIsIGV2dHEtPmFic19pZCk7CisJCXNlcV9wcmludGYoc2VxLCAiJS0xMnMgJTE2dVxuIiwgIlJzcFEgc2l6ZToiLCBldnRxLT5zaXplKTsKKwkJc2VxX3ByaW50ZihzZXEsICIlLTEycyAlMTZ1XG4iLCAiUnNwUUUgc2l6ZToiLCBldnRxLT5pcWVfbGVuKTsKKwkJc2VxX3ByaW50ZihzZXEsICIlLTEycyAlMTZ1XG4iLCAiUnNwUSBDSURYOiIsIGV2dHEtPmNpZHgpOworCQlzZXFfcHJpbnRmKHNlcSwgIiUtMTJzICUxNnVcbiIsICJSc3BRIEdlbjoiLCBldnRxLT5nZW4pOworCQlzZXFfcHJpbnRmKHNlcSwgIiUtMTJzICUxNnVcbiIsICJJbnRyIGRlbGF5OiIsCisJCQkgICBxdGltZXJfdmFsKGFkYXAsIGV2dHEpKTsKKwkJc2VxX3ByaW50ZihzZXEsICIlLTEycyAlMTZ1XG4iLCAiSW50ciBwa3RjbnQ6IiwKKwkJCSAgIGFkYXAtPnNnZS5jb3VudGVyX3ZhbFtldnRxLT5wa3RjbnRfaWR4XSk7CisJfQorI3VuZGVmIFIKKyN1bmRlZiBUCisjdW5kZWYgUworI3VuZGVmIFMzCityZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZ2VfcXVldWVfZW50cmllcyhjb25zdCBzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gRElWX1JPVU5EX1VQKGFkYXAtPnNnZS5ldGhxc2V0cywgNCkgKworCSAgICAgICBESVZfUk9VTkRfVVAoYWRhcC0+c2dlLm9mbGRxc2V0cywgNCkgKworCSAgICAgICBESVZfUk9VTkRfVVAoYWRhcC0+c2dlLnJkbWFxcywgNCkgKworCSAgICAgICBESVZfUk9VTkRfVVAoYWRhcC0+c2dlLnJkbWFjaXFzLCA0KSArCisJICAgICAgIERJVl9ST1VORF9VUChNQVhfQ1RSTF9RVUVVRVMsIDQpICsgMTsKK30KKworc3RhdGljIHZvaWQgKnNnZV9xdWV1ZV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJaW50IGVudHJpZXMgPSBzZ2VfcXVldWVfZW50cmllcyhzZXEtPnByaXZhdGUpOworCisJcmV0dXJuICpwb3MgPCBlbnRyaWVzID8gKHZvaWQgKikoKHVpbnRwdHJfdCkqcG9zICsgMSkgOiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBzZ2VfcXVldWVfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKK30KKworc3RhdGljIHZvaWQgKnNnZV9xdWV1ZV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKK3sKKwlpbnQgZW50cmllcyA9IHNnZV9xdWV1ZV9lbnRyaWVzKHNlcS0+cHJpdmF0ZSk7CisKKwkrKypwb3M7CisJcmV0dXJuICpwb3MgPCBlbnRyaWVzID8gKHZvaWQgKikoKHVpbnRwdHJfdCkqcG9zICsgMSkgOiBOVUxMOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNnZV9xaW5mb19zZXFfb3BzID0geworCS5zdGFydCA9IHNnZV9xdWV1ZV9zdGFydCwKKwkubmV4dCAgPSBzZ2VfcXVldWVfbmV4dCwKKwkuc3RvcCAgPSBzZ2VfcXVldWVfc3RvcCwKKwkuc2hvdyAgPSBzZ2VfcWluZm9fc2hvdworfTsKKworc3RhdGljIGludCBzZ2VfcWluZm9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmVzID0gc2VxX29wZW4oZmlsZSwgJnNnZV9xaW5mb19zZXFfb3BzKTsKKworCWlmICghcmVzKSB7CisJCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJCXNlcS0+cHJpdmF0ZSA9IGlub2RlLT5pX3ByaXZhdGU7CisJfQorCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNnZV9xaW5mb19kZWJ1Z2ZzX2ZvcHMgPSB7CisJLm93bmVyICAgPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICA9IHNnZV9xaW5mb19vcGVuLAorCS5yZWFkICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKK2ludCBtZW1fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwl1bnNpZ25lZCBpbnQgbWVtOworCXN0cnVjdCBhZGFwdGVyICphZGFwOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKworCW1lbSA9ICh1aW50cHRyX3QpZmlsZS0+cHJpdmF0ZV9kYXRhICYgMHgzOworCWFkYXAgPSBmaWxlLT5wcml2YXRlX2RhdGEgLSBtZW07CisKKwkodm9pZCl0NF9md2NhY2hlKGFkYXAsIEZXX1BBUkFNX0RFVl9GV0NBQ0hFX0ZMVVNIKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3NpemVfdCBtZW1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAogCQkJbG9mZl90ICpwcG9zKQogewpAQCAtODAsNyArMTkzNCw2IEBACiAJKnBwb3MgPSBwb3MgKyBjb3VudDsKIAlyZXR1cm4gY291bnQ7CiB9Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1lbV9kZWJ1Z2ZzX2ZvcHMgPSB7CiAJLm93bmVyICAgPSBUSElTX01PRFVMRSwKIAkub3BlbiAgICA9IHNpbXBsZV9vcGVuLApAQCAtODgsNiArMTk0MSwxMiBAQAogCS5sbHNlZWsgID0gZGVmYXVsdF9sbHNlZWssCiB9OwogCitzdGF0aWMgdm9pZCBzZXRfZGVidWdmc19maWxlX3NpemUoc3RydWN0IGRlbnRyeSAqZGUsIGxvZmZfdCBzaXplKQoreworCWlmICghSVNfRVJSKGRlKSAmJiBkZS0+ZF9pbm9kZSkKKwkJZGUtPmRfaW5vZGUtPmlfc2l6ZSA9IHNpemU7Cit9CisKIHN0YXRpYyB2b2lkIGFkZF9kZWJ1Z2ZzX21lbShzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgY29uc3QgY2hhciAqbmFtZSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgaWR4LCB1bnNpZ25lZCBpbnQgc2l6ZV9tYikKIHsKQEAgLTExOSwxNCArMTk3OCw2NSBAQAogewogCWludCBpOwogCXUzMiBzaXplOworCXN0cnVjdCBkZW50cnkgKmRlOwogCiAJc3RhdGljIHN0cnVjdCB0NF9kZWJ1Z2ZzX2VudHJ5IHQ0X2RlYnVnZnNfZmlsZXNbXSA9IHsKKwkJeyAiY2ltX2xhIiwgJmNpbV9sYV9mb3BzLCBTX0lSVVNSLCAwIH0sCisJCXsgImNpbV9xY2ZnIiwgJmNpbV9xY2ZnX2ZvcHMsIFNfSVJVU1IsIDAgfSwKKwkJeyAiY2xrIiwgJmNsa19kZWJ1Z2ZzX2ZvcHMsIFNfSVJVU1IsIDAgfSwKKwkJeyAiZGV2bG9nIiwgJmRldmxvZ19mb3BzLCBTX0lSVVNSLCAwIH0sCisJCXsgIm1ib3gwIiwgJm1ib3hfZGVidWdmc19mb3BzLCBTX0lSVVNSIHwgU19JV1VTUiwgMCB9LAorCQl7ICJtYm94MSIsICZtYm94X2RlYnVnZnNfZm9wcywgU19JUlVTUiB8IFNfSVdVU1IsIDEgfSwKKwkJeyAibWJveDIiLCAmbWJveF9kZWJ1Z2ZzX2ZvcHMsIFNfSVJVU1IgfCBTX0lXVVNSLCAyIH0sCisJCXsgIm1ib3gzIiwgJm1ib3hfZGVidWdmc19mb3BzLCBTX0lSVVNSIHwgU19JV1VTUiwgMyB9LAorCQl7ICJtYm94NCIsICZtYm94X2RlYnVnZnNfZm9wcywgU19JUlVTUiB8IFNfSVdVU1IsIDQgfSwKKwkJeyAibWJveDUiLCAmbWJveF9kZWJ1Z2ZzX2ZvcHMsIFNfSVJVU1IgfCBTX0lXVVNSLCA1IH0sCisJCXsgIm1ib3g2IiwgJm1ib3hfZGVidWdmc19mb3BzLCBTX0lSVVNSIHwgU19JV1VTUiwgNiB9LAorCQl7ICJtYm94NyIsICZtYm94X2RlYnVnZnNfZm9wcywgU19JUlVTUiB8IFNfSVdVU1IsIDcgfSwKIAkJeyAibDJ0IiwgJnQ0X2wydF9mb3BzLCBTX0lSVVNSLCAwfSwKKwkJeyAibXBzX3RjYW0iLCAmbXBzX3RjYW1fZGVidWdmc19mb3BzLCBTX0lSVVNSLCAwIH0sCisJCXsgInJzcyIsICZyc3NfZGVidWdmc19mb3BzLCBTX0lSVVNSLCAwIH0sCisJCXsgInJzc19jb25maWciLCAmcnNzX2NvbmZpZ19kZWJ1Z2ZzX2ZvcHMsIFNfSVJVU1IsIDAgfSwKKwkJeyAicnNzX2tleSIsICZyc3Nfa2V5X2RlYnVnZnNfZm9wcywgU19JUlVTUiwgMCB9LAorCQl7ICJyc3NfcGZfY29uZmlnIiwgJnJzc19wZl9jb25maWdfZGVidWdmc19mb3BzLCBTX0lSVVNSLCAwIH0sCisJCXsgInJzc192Zl9jb25maWciLCAmcnNzX3ZmX2NvbmZpZ19kZWJ1Z2ZzX2ZvcHMsIFNfSVJVU1IsIDAgfSwKKwkJeyAic2dlX3FpbmZvIiwgJnNnZV9xaW5mb19kZWJ1Z2ZzX2ZvcHMsIFNfSVJVU1IsIDAgfSwKKwkJeyAiaWJxX3RwMCIsICAmY2ltX2licV9mb3BzLCBTX0lSVVNSLCAwIH0sCisJCXsgImlicV90cDEiLCAgJmNpbV9pYnFfZm9wcywgU19JUlVTUiwgMSB9LAorCQl7ICJpYnFfdWxwIiwgICZjaW1faWJxX2ZvcHMsIFNfSVJVU1IsIDIgfSwKKwkJeyAiaWJxX3NnZTAiLCAmY2ltX2licV9mb3BzLCBTX0lSVVNSLCAzIH0sCisJCXsgImlicV9zZ2UxIiwgJmNpbV9pYnFfZm9wcywgU19JUlVTUiwgNCB9LAorCQl7ICJpYnFfbmNzaSIsICZjaW1faWJxX2ZvcHMsIFNfSVJVU1IsIDUgfSwKKwkJeyAib2JxX3VscDAiLCAmY2ltX29icV9mb3BzLCBTX0lSVVNSLCAwIH0sCisJCXsgIm9icV91bHAxIiwgJmNpbV9vYnFfZm9wcywgU19JUlVTUiwgMSB9LAorCQl7ICJvYnFfdWxwMiIsICZjaW1fb2JxX2ZvcHMsIFNfSVJVU1IsIDIgfSwKKwkJeyAib2JxX3VscDMiLCAmY2ltX29icV9mb3BzLCBTX0lSVVNSLCAzIH0sCisJCXsgIm9icV9zZ2UiLCAgJmNpbV9vYnFfZm9wcywgU19JUlVTUiwgNCB9LAorCQl7ICJvYnFfbmNzaSIsICZjaW1fb2JxX2ZvcHMsIFNfSVJVU1IsIDUgfSwKKwkJeyAidHBfbGEiLCAmdHBfbGFfZm9wcywgU19JUlVTUiwgMCB9LAorCQl7ICJ1bHByeF9sYSIsICZ1bHByeF9sYV9mb3BzLCBTX0lSVVNSLCAwIH0sCisJCXsgInNlbnNvcnMiLCAmc2Vuc29yc19kZWJ1Z2ZzX2ZvcHMsIFNfSVJVU1IsIDAgfSwKKwkJeyAicG1fc3RhdHMiLCAmcG1fc3RhdHNfZGVidWdmc19mb3BzLCBTX0lSVVNSLCAwIH0sCisJCXsgImNjdHJsIiwgJmNjdHJsX3RibF9kZWJ1Z2ZzX2ZvcHMsIFNfSVJVU1IsIDAgfSwKKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQorCQl7ICJjbGlwX3RibCIsICZjbGlwX3RibF9kZWJ1Z2ZzX2ZvcHMsIFNfSVJVU1IsIDAgfSwKKyNlbmRpZgorCX07CisKKwkvKiBEZWJ1ZyBGUyBub2RlcyBjb21tb24gdG8gYWxsIFQ1IGFuZCBsYXRlciBhZGFwdGVycy4KKwkgKi8KKwlzdGF0aWMgc3RydWN0IHQ0X2RlYnVnZnNfZW50cnkgdDVfZGVidWdmc19maWxlc1tdID0geworCQl7ICJvYnFfc2dlX3J4X3EwIiwgJmNpbV9vYnFfZm9wcywgU19JUlVTUiwgNiB9LAorCQl7ICJvYnFfc2dlX3J4X3ExIiwgJmNpbV9vYnFfZm9wcywgU19JUlVTUiwgNyB9LAogCX07CiAKIAlhZGRfZGVidWdmc19maWxlcyhhZGFwLAogCQkJICB0NF9kZWJ1Z2ZzX2ZpbGVzLAogCQkJICBBUlJBWV9TSVpFKHQ0X2RlYnVnZnNfZmlsZXMpKTsKKwlpZiAoIWlzX3Q0KGFkYXAtPnBhcmFtcy5jaGlwKSkKKwkJYWRkX2RlYnVnZnNfZmlsZXMoYWRhcCwKKwkJCQkgIHQ1X2RlYnVnZnNfZmlsZXMsCisJCQkJICBBUlJBWV9TSVpFKHQ1X2RlYnVnZnNfZmlsZXMpKTsKIAogCWkgPSB0NF9yZWFkX3JlZyhhZGFwLCBNQV9UQVJHRVRfTUVNX0VOQUJMRV9BKTsKIAlpZiAoaSAmIEVEUkFNMF9FTkFCTEVfRikgewpAQCAtMTU0LDUgKzIwNjQsMTAgQEAKIAkJCQkJRVhUX01FTTFfU0laRV9HKHNpemUpKTsKIAkJfQogCX0KKworCWRlID0gZGVidWdmc19jcmVhdGVfZmlsZSgiZmxhc2giLCBTX0lSVVNSLCBhZGFwLT5kZWJ1Z2ZzX3Jvb3QsIGFkYXAsCisJCQkJICZmbGFzaF9kZWJ1Z2ZzX2ZvcHMpOworCXNldF9kZWJ1Z2ZzX2ZpbGVfc2l6ZShkZSwgYWRhcC0+cGFyYW1zLnNmX3NpemUpOworCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X2RlYnVnZnMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5oCmluZGV4IGEzZDg4NjcuLmI2M2NmZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfZGVidWdmcy5oCkBAIC0zNyw2ICszNywyMSBAQAogCiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAKKyNkZWZpbmUgRklMRV9EQVRBKF9maWxlKSAoKF9maWxlKS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSkKKworI2RlZmluZSBERUZJTkVfU0lNUExFX0RFQlVHRlNfRklMRShuYW1lKSBcCitzdGF0aWMgaW50IG5hbWUjI19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKSBcCit7IFwKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbmFtZSMjX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOyBcCit9IFwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG5hbWUjI19kZWJ1Z2ZzX2ZvcHMgPSB7IFwKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLCBcCisJLm9wZW4gICAgPSBuYW1lIyNfb3BlbiwgXAorCS5yZWFkICAgID0gc2VxX3JlYWQsIFwKKwkubGxzZWVrICA9IHNlcV9sc2VlaywgXAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UgXAorfQorCiBzdHJ1Y3QgdDRfZGVidWdmc19lbnRyeSB7CiAJY29uc3QgY2hhciAqbmFtZTsKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpvcHM7CkBAIC00NCw5ICs1OSwyNyBAQAogCXVuc2lnbmVkIGNoYXIgZGF0YTsKIH07CiAKK3N0cnVjdCBzZXFfdGFiIHsKKwlpbnQgKCpzaG93KShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgaW50IGlkeCk7CisJdW5zaWduZWQgaW50IHJvd3M7ICAgICAgICAvKiAjIG9mIGVudHJpZXMgKi8KKwl1bnNpZ25lZCBjaGFyIHdpZHRoOyAgICAgIC8qIHNpemUgaW4gYnl0ZXMgb2YgZWFjaCBlbnRyeSAqLworCXVuc2lnbmVkIGNoYXIgc2tpcF9maXJzdDsgLyogd2hldGhlciB0aGUgZmlyc3QgbGluZSBpcyBhIGhlYWRlciAqLworCWNoYXIgZGF0YVswXTsgICAgICAgICAgICAgLyogdGhlIHRhYmxlIGRhdGEgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGhleDJ2YWwoY2hhciBjKQoreworCXJldHVybiBpc2RpZ2l0KGMpID8gYyAtICcwJyA6IHRvbG93ZXIoYykgLSAnYScgKyAxMDsKK30KKworc3RydWN0IHNlcV90YWIgKnNlcV9vcGVuX3RhYihzdHJ1Y3QgZmlsZSAqZiwgdW5zaWduZWQgaW50IHJvd3MsCisJCQkgICAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhhdmVfaGVhZGVyLAorCQkJICAgICBpbnQgKCpzaG93KShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgaW50IGkpKTsKKwogaW50IHQ0X3NldHVwX2RlYnVnZnMoc3RydWN0IGFkYXB0ZXIgKmFkYXApOwogdm9pZCBhZGRfZGVidWdmc19maWxlcyhzdHJ1Y3QgYWRhcHRlciAqYWRhcCwKIAkJICAgICAgIHN0cnVjdCB0NF9kZWJ1Z2ZzX2VudHJ5ICpmaWxlcywKIAkJICAgICAgIHVuc2lnbmVkIGludCBuZmlsZXMpOworaW50IG1lbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jCmluZGV4IGNjZjM0MzYuLmEyMmNmOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfbWFpbi5jCkBAIC02MiwxNCArNjIsMTggQEAKICNpbmNsdWRlIDxuZXQvbmV0ZXZlbnQuaD4KICNpbmNsdWRlIDxuZXQvYWRkcmNvbmYuaD4KICNpbmNsdWRlIDxuZXQvYm9uZGluZy5oPgorI2luY2x1ZGUgPG5ldC9hZGRyY29uZi5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJjeGdiNC5oIgogI2luY2x1ZGUgInQ0X3JlZ3MuaCIKKyNpbmNsdWRlICJ0NF92YWx1ZXMuaCIKICNpbmNsdWRlICJ0NF9tc2cuaCIKICNpbmNsdWRlICJ0NGZ3X2FwaS5oIgorI2luY2x1ZGUgInQ0ZndfdmVyc2lvbi5oIgogI2luY2x1ZGUgImN4Z2I0X2RjYi5oIgogI2luY2x1ZGUgImN4Z2I0X2RlYnVnZnMuaCIKKyNpbmNsdWRlICJjbGlwX3RibC5oIgogI2luY2x1ZGUgImwydC5oIgogCiAjaWZkZWYgRFJWX1ZFUlNJT04KQEAgLTc4LDk5ICs4Miw2IEBACiAjZGVmaW5lIERSVl9WRVJTSU9OICIyLjAuMC1rbyIKICNkZWZpbmUgRFJWX0RFU0MgIkNoZWxzaW8gVDQvVDUgTmV0d29yayBEcml2ZXIiCiAKLS8qCi0gKiBNYXggaW50ZXJydXB0IGhvbGQtb2ZmIHRpbWVyIHZhbHVlIGluIHVzLiAgUXVldWVzIGZhbGwgYmFjayB0byB0aGlzIHZhbHVlCi0gKiB1bmRlciBleHRyZW1lIG1lbW9yeSBwcmVzc3VyZSBzbyBpdCdzIGxhcmdpc2ggdG8gZ2l2ZSB0aGUgc3lzdGVtIHRpbWUgdG8KLSAqIHJlY292ZXIuCi0gKi8KLSNkZWZpbmUgTUFYX1NHRV9USU1FUlZBTCAyMDBVCi0KLWVudW0gewotCS8qCi0JICogUGh5c2ljYWwgRnVuY3Rpb24gcHJvdmlzaW9uaW5nIGNvbnN0YW50cy4KLQkgKi8KLQlQRlJFU19OVkkgPSA0LAkJCS8qICMgb2YgVmlydHVhbCBJbnRlcmZhY2VzICovCi0JUEZSRVNfTkVUSENUUkwgPSAxMjgsCQkvKiAjIG9mIEVRcyB1c2VkIGZvciBFVEggb3IgQ1RSTCBRcyAqLwotCVBGUkVTX05JUUZMSU5UID0gMTI4LAkJLyogIyBvZiBpbmdyZXNzIFFzL3cgRnJlZSBMaXN0KHMpL2ludHIKLQkJCQkJICovCi0JUEZSRVNfTkVRID0gMjU2LAkJLyogIyBvZiBlZ3Jlc3MgcXVldWVzICovCi0JUEZSRVNfTklRID0gMCwJCQkvKiAjIG9mIGluZ3Jlc3MgcXVldWVzICovCi0JUEZSRVNfVEMgPSAwLAkJCS8qIFBDSS1FIHRyYWZmaWMgY2xhc3MgKi8KLQlQRlJFU19ORVhBQ1RGID0gMTI4LAkJLyogIyBvZiBleGFjdCBNUFMgZmlsdGVycyAqLwotCi0JUEZSRVNfUl9DQVBTID0gRldfQ01EX0NBUF9QRiwKLQlQRlJFU19XWF9DQVBTID0gRldfQ01EX0NBUF9QRiwKLQotI2lmZGVmIENPTkZJR19QQ0lfSU9WCi0JLyoKLQkgKiBWaXJ0dWFsIEZ1bmN0aW9uIHByb3Zpc2lvbmluZyBjb25zdGFudHMuICBXZSBuZWVkIHR3byBleHRyYSBJbmdyZXNzCi0JICogUXVldWVzIHdpdGggSW50ZXJydXB0IGNhcGFiaWxpdHkgdG8gc2VydmUgYXMgdGhlIFZGJ3MgRmlybXdhcmUKLQkgKiBFdmVudCBRdWV1ZSBhbmQgRm9yd2FyZGVkIEludGVycnVwdCBRdWV1ZSAod2hlbiB1c2luZyBNU0kgbW9kZSkgLS0KLQkgKiBuZWl0aGVyIHdpbGwgaGF2ZSBGcmVlIExpc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGVtKS4gIEZvciBlYWNoCi0JICogRXRoZXJuZXQvQ29udHJvbCBFZ3Jlc3MgUXVldWUgYW5kIGZvciBlYWNoIEZyZWUgTGlzdCwgd2UgbmVlZCBhbgotCSAqIEVncmVzcyBDb250ZXh0LgotCSAqLwotCVZGUkVTX05QT1JUUyA9IDEsCQkvKiAjIG9mICJwb3J0cyIgcGVyIFZGICovCi0JVkZSRVNfTlFTRVRTID0gMiwJCS8qICMgb2YgIlF1ZXVlIFNldHMiIHBlciBWRiAqLwotCi0JVkZSRVNfTlZJID0gVkZSRVNfTlBPUlRTLAkvKiAjIG9mIFZpcnR1YWwgSW50ZXJmYWNlcyAqLwotCVZGUkVTX05FVEhDVFJMID0gVkZSRVNfTlFTRVRTLAkvKiAjIG9mIEVRcyB1c2VkIGZvciBFVEggb3IgQ1RSTCBRcyAqLwotCVZGUkVTX05JUUZMSU5UID0gVkZSRVNfTlFTRVRTKzIsLyogIyBvZiBpbmdyZXNzIFFzL3cgRnJlZSBMaXN0KHMpL2ludHIgKi8KLQlWRlJFU19ORVEgPSBWRlJFU19OUVNFVFMqMiwJLyogIyBvZiBlZ3Jlc3MgcXVldWVzICovCi0JVkZSRVNfTklRID0gMCwJCQkvKiAjIG9mIG5vbi1mbC9pbnQgaW5ncmVzcyBxdWV1ZXMgKi8KLQlWRlJFU19UQyA9IDAsCQkJLyogUENJLUUgdHJhZmZpYyBjbGFzcyAqLwotCVZGUkVTX05FWEFDVEYgPSAxNiwJCS8qICMgb2YgZXhhY3QgTVBTIGZpbHRlcnMgKi8KLQotCVZGUkVTX1JfQ0FQUyA9IEZXX0NNRF9DQVBfRE1BUXxGV19DTURfQ0FQX1ZGfEZXX0NNRF9DQVBfUE9SVCwKLQlWRlJFU19XWF9DQVBTID0gRldfQ01EX0NBUF9ETUFRfEZXX0NNRF9DQVBfVkYsCi0jZW5kaWYKLX07Ci0KLS8qCi0gKiBQcm92aWRlIGEgUG9ydCBBY2Nlc3MgUmlnaHRzIE1hc2sgZm9yIHRoZSBzcGVjaWZpZWQgUEYvVkYuICBUaGlzIGlzIHZlcnkKLSAqIHN0YXRpYyBhbmQgbGlrZWx5IG5vdCB0byBiZSB1c2VmdWwgaW4gdGhlIGxvbmcgcnVuLiAgV2UgcmVhbGx5IG5lZWQgdG8KLSAqIGltcGxlbWVudCBzb21lIGZvcm0gb2YgcGVyc2lzdGVudCBjb25maWd1cmF0aW9uIHdoaWNoIHRoZSBmaXJtd2FyZQotICogY29udHJvbHMuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGZ2ZnJlc19wbWFzayhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgIHVuc2lnbmVkIGludCBwZiwgdW5zaWduZWQgaW50IHZmKQotewotCXVuc2lnbmVkIGludCBwb3J0biwgcG9ydHZlYzsKLQotCS8qCi0JICogR2l2ZSBQRidzIGFjY2VzcyB0byBhbGwgb2YgdGhlIHBvcnRzLgotCSAqLwotCWlmICh2ZiA9PSAwKQotCQlyZXR1cm4gRldfUEZWRl9DTURfUE1BU0tfTTsKLQotCS8qCi0JICogRm9yIFZGcywgd2UnbGwgYXNzaWduIHRoZW0gYWNjZXNzIHRvIHRoZSBwb3J0cyBiYXNlZCBwdXJlbHkgb24gdGhlCi0JICogUEYuICBXZSBhc3NpZ24gYWN0aXZlIHBvcnRzIGluIG9yZGVyLCB3cmFwcGluZyBhcm91bmQgaWYgdGhlcmUgYXJlCi0JICogZmV3ZXIgYWN0aXZlIHBvcnRzIHRoYW4gUEZzOiBlLmcuIGFjdGl2ZSBwb3J0W3BmICUgbnBvcnRzXS4KLQkgKiBVbmZvcnR1bmF0ZWx5IHRoZSBhZGFwdGVyJ3MgcG9ydF9pbmZvIHN0cnVjdHMgaGF2ZW4ndCBiZWVuCi0JICogaW5pdGlhbGl6ZWQgeWV0IHNvIHdlIGhhdmUgdG8gY29tcHV0ZSB0aGlzLgotCSAqLwotCWlmIChhZGFwdGVyLT5wYXJhbXMubnBvcnRzID09IDApCi0JCXJldHVybiAwOwotCi0JcG9ydG4gPSBwZiAlIGFkYXB0ZXItPnBhcmFtcy5ucG9ydHM7Ci0JcG9ydHZlYyA9IGFkYXB0ZXItPnBhcmFtcy5wb3J0dmVjOwotCWZvciAoOzspIHsKLQkJLyoKLQkJICogSXNvbGF0ZSB0aGUgbG93ZXN0IHNldCBiaXQgaW4gdGhlIHBvcnQgdmVjdG9yLiAgSWYgd2UncmUgYXQKLQkJICogdGhlIHBvcnQgbnVtYmVyIHRoYXQgd2Ugd2FudCwgcmV0dXJuIHRoYXQgYXMgdGhlIHBtYXNrLgotCQkgKiBvdGhlcndpc2UgbWFzayB0aGF0IGJpdCBvdXQgb2YgdGhlIHBvcnQgdmVjdG9yIGFuZAotCQkgKiBkZWNyZW1lbnQgb3VyIHBvcnQgbnVtYmVyIC4uLgotCQkgKi8KLQkJdW5zaWduZWQgaW50IHBtYXNrID0gcG9ydHZlYyBeIChwb3J0dmVjICYgKHBvcnR2ZWMtMSkpOwotCQlpZiAocG9ydG4gPT0gMCkKLQkJCXJldHVybiBwbWFzazsKLQkJcG9ydG4tLTsKLQkJcG9ydHZlYyAmPSB+cG1hc2s7Ci0JfQotCS8qTk9UUkVBQ0hFRCovCi19Ci0KIGVudW0gewogCU1BWF9UWFFfRU5UUklFUyAgICAgID0gMTYzODQsCiAJTUFYX0NUUkxfVFhRX0VOVFJJRVMgPSAxMDI0LApAQCAtMjYzLDcgKzE3NCw4IEBACiBzdGF0aWMgdWludCBmb3JjZV9vbGRfaW5pdDsKIAogbW9kdWxlX3BhcmFtKGZvcmNlX29sZF9pbml0LCB1aW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZm9yY2Vfb2xkX2luaXQsICJGb3JjZSBvbGQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UiKTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2Vfb2xkX2luaXQsICJGb3JjZSBvbGQgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGRlcHJlY2F0ZWQiCisJCSAiIHBhcmFtZXRlciIpOwogCiBzdGF0aWMgaW50IGRmbHRfbXNnX2VuYWJsZSA9IERGTFRfTVNHX0VOQUJMRTsKIApAQCAtMjkyLDEzICsyMDQsMTQgQEAKIAogbW9kdWxlX3BhcmFtX2FycmF5KGludHJfaG9sZG9mZiwgdWludCwgTlVMTCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGludHJfaG9sZG9mZiwgInZhbHVlcyBmb3IgcXVldWUgaW50ZXJydXB0IGhvbGQtb2ZmIHRpbWVycyAiCi0JCSAiMC4uNCBpbiBtaWNyb3NlY29uZHMiKTsKKwkJICIwLi40IGluIG1pY3Jvc2Vjb25kcywgZGVwcmVjYXRlZCBwYXJhbWV0ZXIiKTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBpbnRyX2NudFtTR0VfTkNPVU5URVJTIC0gMV0gPSB7IDQsIDgsIDE2IH07CiAKIG1vZHVsZV9wYXJhbV9hcnJheShpbnRyX2NudCwgdWludCwgTlVMTCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGludHJfY250LAotCQkgInRocmVzaG9sZHMgMS4uMyBmb3IgcXVldWUgaW50ZXJydXB0IHBhY2tldCBjb3VudGVycyIpOworCQkgInRocmVzaG9sZHMgMS4uMyBmb3IgcXVldWUgaW50ZXJydXB0IHBhY2tldCBjb3VudGVycywgIgorCQkgImRlcHJlY2F0ZWQgcGFyYW1ldGVyIik7CiAKIC8qCiAgKiBOb3JtYWxseSB3ZSB0ZWxsIHRoZSBjaGlwIHRvIGRlbGl2ZXIgSW5ncmVzcyBQYWNrZXRzIGludG8gb3VyIERNQSBidWZmZXJzCkBAIC0zMTgsNyArMjMxLDggQEAKIAogI2lmZGVmIENPTkZJR19QQ0lfSU9WCiBtb2R1bGVfcGFyYW0odmZfYWNscywgYm9vbCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHZmX2FjbHMsICJpZiBzZXQgZW5hYmxlIHZpcnR1YWxpemF0aW9uIEwyIEFDTCBlbmZvcmNlbWVudCIpOworTU9EVUxFX1BBUk1fREVTQyh2Zl9hY2xzLCAiaWYgc2V0IGVuYWJsZSB2aXJ0dWFsaXphdGlvbiBMMiBBQ0wgZW5mb3JjZW1lbnQsICIKKwkJICJkZXByZWNhdGVkIHBhcmFtZXRlciIpOwogCiAvKiBDb25maWd1cmUgdGhlIG51bWJlciBvZiBQQ0ktRSBWaXJ0dWFsIEZ1bmN0aW9uIHdoaWNoIGFyZSB0byBiZSBpbnN0YW50aWF0ZWQKICAqIG9uIFNSLUlPViBDYXBhYmxlIFBoeXNpY2FsIEZ1bmN0aW9ucy4KQEAgLTM0MCwzMiArMjU0LDExIEBACiBNT0RVTEVfUEFSTV9ERVNDKHNlbGVjdF9xdWV1ZSwKIAkJICJTZWxlY3QgYmV0d2VlbiBrZXJuZWwgcHJvdmlkZWQgbWV0aG9kIG9mIHNlbGVjdGluZyBvciBkcml2ZXIgbWV0aG9kIG9mIHNlbGVjdGluZyBUWCBxdWV1ZS4gRGVmYXVsdCBpcyBrZXJuZWwgbWV0aG9kLiIpOwogCi0vKgotICogVGhlIGZpbHRlciBUQ0FNIGhhcyBhIGZpeGVkIHBvcnRpb24gYW5kIGEgdmFyaWFibGUgcG9ydGlvbi4gIFRoZSBmaXhlZAotICogcG9ydGlvbiBjYW4gbWF0Y2ggb24gc291cmNlL2Rlc3RpbmF0aW9uIElQIElQdjQvSVB2NiBhZGRyZXNzZXMgYW5kIFRDUC9VRFAKLSAqIHBvcnRzLiAgVGhlIHZhcmlhYmxlIHBvcnRpb24gaXMgMzYgYml0cyB3aGljaCBjYW4gaW5jbHVkZSB0aGluZ3MgbGlrZSBFeGFjdAotICogTWF0Y2ggTUFDIEluZGV4ICg5IGJpdHMpLCBFdGhlciBUeXBlICgxNiBiaXRzKSwgSVAgUHJvdG9jb2wgKDggYml0cyksCi0gKiBbSW5uZXJdIFZMQU4gVGFnICgxNyBiaXRzKSwgZXRjLiB3aGljaCwgaWYgYWxsIHdlcmUgc29tZWhvdyBzZWxlY3RlZCwgd291bGQKLSAqIGZhciBleGNlZWQgdGhlIDM2LWJpdCBidWRnZXQgZm9yIHRoaXMgImNvbXByZXNzZWQiIGhlYWRlciBwb3J0aW9uIG9mIHRoZQotICogZmlsdGVyLiAgVGh1cywgd2UgaGF2ZSBhIHNjYXJjZSByZXNvdXJjZSB3aGljaCBtdXN0IGJlIGNhcmVmdWxseSBtYW5hZ2VkLgotICoKLSAqIEJ5IGRlZmF1bHQgd2Ugc2V0IHRoaXMgdXAgdG8gbW9zdGx5IG1hdGNoIHRoZSBzZXQgb2YgZmlsdGVyIG1hdGNoaW5nCi0gKiBjYXBhYmlsaXRpZXMgb2YgVDMgYnV0IHdpdGggYWNjb21tb2RhdGlvbnMgZm9yIHNvbWUgb2YgVDQncyBtb3JlCi0gKiBpbnRlcmVzdGluZyBmZWF0dXJlczoKLSAqCi0gKiAgIHsgSVAgRnJhZ21lbnQgKDEpLCBNUFMgTWF0Y2ggVHlwZSAoMyksIElQIFByb3RvY29sICg4KSwKLSAqICAgICBbSW5uZXJdIFZMQU4gKDE3KSwgUG9ydCAoMyksIEZDb0UgKDEpIH0KLSAqLwotZW51bSB7Ci0JVFBfVkxBTl9QUklfTUFQX0RFRkFVTFQgPSBIV19UUExfRlJfTVRfUFJfSVZfUF9GQywKLQlUUF9WTEFOX1BSSV9NQVBfRklSU1QgPSBGQ09FX1NISUZULAotCVRQX1ZMQU5fUFJJX01BUF9MQVNUID0gRlJBR01FTlRBVElPTl9TSElGVCwKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHBfdmxhbl9wcmlfbWFwID0gVFBfVkxBTl9QUklfTUFQX0RFRkFVTFQ7CitzdGF0aWMgdW5zaWduZWQgaW50IHRwX3ZsYW5fcHJpX21hcCA9IEhXX1RQTF9GUl9NVF9QUl9JVl9QX0ZDOwogCiBtb2R1bGVfcGFyYW0odHBfdmxhbl9wcmlfbWFwLCB1aW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0ModHBfdmxhbl9wcmlfbWFwLCAiZ2xvYmFsIGNvbXByZXNzZWQgZmlsdGVyIGNvbmZpZ3VyYXRpb24iKTsKK01PRFVMRV9QQVJNX0RFU0ModHBfdmxhbl9wcmlfbWFwLCAiZ2xvYmFsIGNvbXByZXNzZWQgZmlsdGVyIGNvbmZpZ3VyYXRpb24sICIKKwkJICJkZXByZWNhdGVkIHBhcmFtZXRlciIpOwogCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqY3hnYjRfZGVidWdmc19yb290OwogCkBAIC02NzEsNyArNTY0LDcgQEAKIAlpZiAoaWR4ID49IGFkYXAtPnRpZHMuZnRpZF9iYXNlICYmIG5pZHggPAogCSAgIChhZGFwLT50aWRzLm5mdGlkcyArIGFkYXAtPnRpZHMubnNmdGlkcykpIHsKIAkJaWR4ID0gbmlkeDsKLQkJcmV0ID0gR0VUX1RDQl9DT09LSUUocnBsLT5jb29raWUpOworCQlyZXQgPSBUQ0JfQ09PS0lFX0cocnBsLT5jb29raWUpOwogCQlmID0gJmFkYXAtPnRpZHMuZnRpZF90YWJbaWR4XTsKIAogCQlpZiAocmV0ID09IEZXX0ZJTFRFUl9XUl9GTFRfREVMRVRFRCkgewpAQCAtNzIzLDcgKzYxNiw3IEBACiAKIAlpZiAobGlrZWx5KG9wY29kZSA9PSBDUExfU0dFX0VHUl9VUERBVEUpKSB7CiAJCWNvbnN0IHN0cnVjdCBjcGxfc2dlX2Vncl91cGRhdGUgKnAgPSAodm9pZCAqKXJzcDsKLQkJdW5zaWduZWQgaW50IHFpZCA9IEVHUl9RSUQobnRvaGwocC0+b3Bjb2RlX3FpZCkpOworCQl1bnNpZ25lZCBpbnQgcWlkID0gRUdSX1FJRF9HKG50b2hsKHAtPm9wY29kZV9xaWQpKTsKIAkJc3RydWN0IHNnZV90eHEgKnR4cTsKIAogCQl0eHEgPSBxLT5hZGFwLT5zZ2UuZWdyX21hcFtxaWQgLSBxLT5hZGFwLT5zZ2UuZWdyX3N0YXJ0XTsKQEAgLTgzMywxMSArNzI2LDExIEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgdDRfbm9uZGF0YV9pbnRyKGludCBpcnEsIHZvaWQgKmNvb2tpZSkKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IGNvb2tpZTsKKwl1MzIgdiA9IHQ0X3JlYWRfcmVnKGFkYXAsIE1ZUEZfUkVHKFBMX1BGX0lOVF9DQVVTRV9BKSk7CiAKLQl1MzIgdiA9IHQ0X3JlYWRfcmVnKGFkYXAsIE1ZUEZfUkVHKFBMX1BGX0lOVF9DQVVTRSkpOwotCWlmICh2ICYgUEZTVykgeworCWlmICh2ICYgUEZTV19GKSB7CiAJCWFkYXAtPnN3aW50ciA9IDE7Ci0JCXQ0X3dyaXRlX3JlZyhhZGFwLCBNWVBGX1JFRyhQTF9QRl9JTlRfQ0FVU0UpLCB2KTsKKwkJdDRfd3JpdGVfcmVnKGFkYXAsIE1ZUEZfUkVHKFBMX1BGX0lOVF9DQVVTRV9BKSwgdik7CiAJfQogCXQ0X3Nsb3dfaW50cl9oYW5kbGVyKGFkYXApOwogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTEwMzAsOCArOTIzLDE0IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWRhcC0+c2dlLmluZ3JfbWFwKTsgaSsrKSB7CiAJCXN0cnVjdCBzZ2VfcnNwcSAqcSA9IGFkYXAtPnNnZS5pbmdyX21hcFtpXTsKIAotCQlpZiAocSAmJiBxLT5oYW5kbGVyKQorCQlpZiAocSAmJiBxLT5oYW5kbGVyKSB7CiAJCQluYXBpX2Rpc2FibGUoJnEtPm5hcGkpOworCQkJbG9jYWxfYmhfZGlzYWJsZSgpOworCQkJd2hpbGUgKCFjeGdiX3BvbGxfbG9ja19uYXBpKHEpKQorCQkJCW1kZWxheSgxKTsKKwkJCWxvY2FsX2JoX2VuYWJsZSgpOworCQl9CisKIAl9CiB9CiAKQEAgLTEwNDcsMTIgKzk0NiwxNCBAQAogCiAJCWlmICghcSkKIAkJCWNvbnRpbnVlOwotCQlpZiAocS0+aGFuZGxlcikKKwkJaWYgKHEtPmhhbmRsZXIpIHsKKwkJCWN4Z2JfYnVzeV9wb2xsX2luaXRfbG9jayhxKTsKIAkJCW5hcGlfZW5hYmxlKCZxLT5uYXBpKTsKKwkJfQogCQkvKiAwLWluY3JlbWVudCBHVFMgdG8gc3RhcnQgdGhlIHRpbWVyIGFuZCBlbmFibGUgaW50ZXJydXB0cyAqLwotCQl0NF93cml0ZV9yZWcoYWRhcCwgTVlQRl9SRUcoU0dFX1BGX0dUUyksCi0JCQkgICAgIFNFSU5UQVJNKHEtPmludHJfcGFyYW1zKSB8Ci0JCQkgICAgIElOR1JFU1NRSUQocS0+Y250eHRfaWQpKTsKKwkJdDRfd3JpdGVfcmVnKGFkYXAsIE1ZUEZfUkVHKFNHRV9QRl9HVFNfQSksCisJCQkgICAgIFNFSU5UQVJNX1YocS0+aW50cl9wYXJhbXMpIHwKKwkJCSAgICAgSU5HUkVTU1FJRF9WKHEtPmNudHh0X2lkKSk7CiAJfQogfQogCkBAIC0xMTc2LDEwICsxMDc3LDEwIEBACiAJfQogCiAJdDRfd3JpdGVfcmVnKGFkYXAsIGlzX3Q0KGFkYXAtPnBhcmFtcy5jaGlwKSA/Ci0JCQkJTVBTX1RSQ19SU1NfQ09OVFJPTCA6Ci0JCQkJTVBTX1Q1X1RSQ19SU1NfQ09OVFJPTCwKLQkJICAgICBSU1NDT05UUk9MKG5ldGRldjJwaW5mbyhhZGFwLT5wb3J0WzBdKS0+dHhfY2hhbikgfAotCQkgICAgIFFVRVVFTlVNQkVSKHMtPmV0aHJ4cVswXS5yc3BxLmFic19pZCkpOworCQkJCU1QU19UUkNfUlNTX0NPTlRST0xfQSA6CisJCQkJTVBTX1Q1X1RSQ19SU1NfQ09OVFJPTF9BLAorCQkgICAgIFJTU0NPTlRST0xfVihuZXRkZXYycGluZm8oYWRhcC0+cG9ydFswXSktPnR4X2NoYW4pIHwKKwkJICAgICBRVUVVRU5VTUJFUl9WKHMtPmV0aHJ4cVswXS5yc3BxLmFic19pZCkpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTE4LDYgKzE0MTksNyBAQAogc3RhdGljIHZvaWQgZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldjJhZGFwKGRldik7CisJdTMyIGV4cHJvbV92ZXJzOwogCiAJc3RybGNweShpbmZvLT5kcml2ZXIsIEtCVUlMRF9NT0ROQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSk7CiAJc3RybGNweShpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTiwgc2l6ZW9mKGluZm8tPnZlcnNpb24pKTsKQEAgLTE1MzUsNiArMTQzNywxNCBAQAogCQkJRldfSERSX0ZXX1ZFUl9NSU5PUl9HKGFkYXB0ZXItPnBhcmFtcy50cF92ZXJzKSwKIAkJCUZXX0hEUl9GV19WRVJfTUlDUk9fRyhhZGFwdGVyLT5wYXJhbXMudHBfdmVycyksCiAJCQlGV19IRFJfRldfVkVSX0JVSUxEX0coYWRhcHRlci0+cGFyYW1zLnRwX3ZlcnMpKTsKKworCWlmICghdDRfZ2V0X2V4cHJvbV92ZXJzaW9uKGFkYXB0ZXIsICZleHByb21fdmVycykpCisJCXNucHJpbnRmKGluZm8tPmVyb21fdmVyc2lvbiwgc2l6ZW9mKGluZm8tPmVyb21fdmVyc2lvbiksCisJCQkgIiV1LiV1LiV1LiV1IiwKKwkJCSBGV19IRFJfRldfVkVSX01BSk9SX0coZXhwcm9tX3ZlcnMpLAorCQkJIEZXX0hEUl9GV19WRVJfTUlOT1JfRyhleHByb21fdmVycyksCisJCQkgRldfSERSX0ZXX1ZFUl9NSUNST19HKGV4cHJvbV92ZXJzKSwKKwkJCSBGV19IRFJfRldfVkVSX0JVSUxEX0coZXhwcm9tX3ZlcnMpKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpCkBAIC0xNTg5LDkgKzE0OTksOSBAQAogCWNvbGxlY3Rfc2dlX3BvcnRfc3RhdHMoYWRhcHRlciwgcGksIChzdHJ1Y3QgcXVldWVfcG9ydF9zdGF0cyAqKWRhdGEpOwogCWRhdGEgKz0gc2l6ZW9mKHN0cnVjdCBxdWV1ZV9wb3J0X3N0YXRzKSAvIHNpemVvZih1NjQpOwogCWlmICghaXNfdDQoYWRhcHRlci0+cGFyYW1zLmNoaXApKSB7Ci0JCXQ0X3dyaXRlX3JlZyhhZGFwdGVyLCBTR0VfU1RBVF9DRkcsIFNUQVRTT1VSQ0VfVDUoNykpOwotCQl2YWwxID0gdDRfcmVhZF9yZWcoYWRhcHRlciwgU0dFX1NUQVRfVE9UQUwpOwotCQl2YWwyID0gdDRfcmVhZF9yZWcoYWRhcHRlciwgU0dFX1NUQVRfTUFUQ0gpOworCQl0NF93cml0ZV9yZWcoYWRhcHRlciwgU0dFX1NUQVRfQ0ZHX0EsIFNUQVRTT1VSQ0VfVDVfVig3KSk7CisJCXZhbDEgPSB0NF9yZWFkX3JlZyhhZGFwdGVyLCBTR0VfU1RBVF9UT1RBTF9BKTsKKwkJdmFsMiA9IHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFNHRV9TVEFUX01BVENIX0EpOwogCQkqZGF0YSA9IHZhbDEgLSB2YWwyOwogCQlkYXRhKys7CiAJCSpkYXRhID0gdmFsMjsKQEAgLTI2MDgsOCArMjUxOCw4IEBACiAvKgogICogUmV0dXJuIGEgcXVldWUncyBpbnRlcnJ1cHQgaG9sZC1vZmYgdGltZSBpbiB1cy4gIDAgbWVhbnMgbm8gdGltZXIuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcXRpbWVyX3ZhbChjb25zdCBzdHJ1Y3QgYWRhcHRlciAqYWRhcCwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc2dlX3JzcHEgKnEpCit1bnNpZ25lZCBpbnQgcXRpbWVyX3ZhbChjb25zdCBzdHJ1Y3QgYWRhcHRlciAqYWRhcCwKKwkJCWNvbnN0IHN0cnVjdCBzZ2VfcnNwcSAqcSkKIHsKIAl1bnNpZ25lZCBpbnQgaWR4ID0gcS0+aW50cl9wYXJhbXMgPj4gMTsKIApAQCAtMzM0Niw0MCArMzI1Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjeGdiNF9jbGlwX2dldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxpcCkKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcDsKLQlzdHJ1Y3QgZndfY2xpcF9jbWQgYzsKLQotCWFkYXAgPSBuZXRkZXYyYWRhcChkZXYpOwotCW1lbXNldCgmYywgMCwgc2l6ZW9mKGMpKTsKLQljLm9wX3RvX3dyaXRlID0gaHRvbmwoRldfQ01EX09QX1YoRldfQ0xJUF9DTUQpIHwKLQkJCUZXX0NNRF9SRVFVRVNUX0YgfCBGV19DTURfV1JJVEVfRik7Ci0JYy5hbGxvY190b19sZW4xNiA9IGh0b25sKEZXX0NMSVBfQ01EX0FMTE9DX0YgfCBGV19MRU4xNihjKSk7Ci0JYy5pcF9oaSA9ICooX19iZTY0ICopKGxpcC0+czZfYWRkcik7Ci0JYy5pcF9sbyA9ICooX19iZTY0ICopKGxpcC0+czZfYWRkciArIDgpOwotCXJldHVybiB0NF93cl9tYm94X21lYXQoYWRhcCwgYWRhcC0+bWJveCwgJmMsIHNpemVvZihjKSwgJmMsIGZhbHNlKTsKLX0KLUVYUE9SVF9TWU1CT0woY3hnYjRfY2xpcF9nZXQpOwotCi1pbnQgY3hnYjRfY2xpcF9yZWxlYXNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxpcCkKLXsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcDsKLQlzdHJ1Y3QgZndfY2xpcF9jbWQgYzsKLQotCWFkYXAgPSBuZXRkZXYyYWRhcChkZXYpOwotCW1lbXNldCgmYywgMCwgc2l6ZW9mKGMpKTsKLQljLm9wX3RvX3dyaXRlID0gaHRvbmwoRldfQ01EX09QX1YoRldfQ0xJUF9DTUQpIHwKLQkJCUZXX0NNRF9SRVFVRVNUX0YgfCBGV19DTURfUkVBRF9GKTsKLQljLmFsbG9jX3RvX2xlbjE2ID0gaHRvbmwoRldfQ0xJUF9DTURfRlJFRV9GIHwgRldfTEVOMTYoYykpOwotCWMuaXBfaGkgPSAqKF9fYmU2NCAqKShsaXAtPnM2X2FkZHIpOwotCWMuaXBfbG8gPSAqKF9fYmU2NCAqKShsaXAtPnM2X2FkZHIgKyA4KTsKLQlyZXR1cm4gdDRfd3JfbWJveF9tZWF0KGFkYXAsIGFkYXAtPm1ib3gsICZjLCBzaXplb2YoYyksICZjLCBmYWxzZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGN4Z2I0X2NsaXBfcmVsZWFzZSk7Ci0KIC8qKgogICoJY3hnYjRfY3JlYXRlX3NlcnZlciAtIGNyZWF0ZSBhbiBJUCBzZXJ2ZXIKICAqCUBkZXY6IHRoZSBkZXZpY2UKQEAgLTM0MTUsOCArMzI5MSw4IEBACiAJcmVxLT5wZWVyX2lwID0gaHRvbmwoMCk7CiAJY2hhbiA9IHJ4cV90b19jaGFuKCZhZGFwLT5zZ2UsIHF1ZXVlKTsKIAlyZXEtPm9wdDAgPSBjcHVfdG9fYmU2NChUWF9DSEFOX1YoY2hhbikpOwotCXJlcS0+b3B0MSA9IGNwdV90b19iZTY0KENPTk5fUE9MSUNZX0FTSyB8Ci0JCQkJU1lOX1JTU19FTkFCTEUgfCBTWU5fUlNTX1FVRVVFKHF1ZXVlKSk7CisJcmVxLT5vcHQxID0gY3B1X3RvX2JlNjQoQ09OTl9QT0xJQ1lfVihDUExfQ09OTl9QT0xJQ1lfQVNLKSB8CisJCQkJU1lOX1JTU19FTkFCTEVfRiB8IFNZTl9SU1NfUVVFVUVfVihxdWV1ZSkpOwogCXJldCA9IHQ0X21nbXRfdHgoYWRhcCwgc2tiKTsKIAlyZXR1cm4gbmV0X3htaXRfZXZhbChyZXQpOwogfQpAQCAtMzQ1OCw4ICszMzM0LDggQEAKIAlyZXEtPnBlZXJfaXBfbG8gPSBjcHVfdG9fYmU2NCgwKTsKIAljaGFuID0gcnhxX3RvX2NoYW4oJmFkYXAtPnNnZSwgcXVldWUpOwogCXJlcS0+b3B0MCA9IGNwdV90b19iZTY0KFRYX0NIQU5fVihjaGFuKSk7Ci0JcmVxLT5vcHQxID0gY3B1X3RvX2JlNjQoQ09OTl9QT0xJQ1lfQVNLIHwKLQkJCQlTWU5fUlNTX0VOQUJMRSB8IFNZTl9SU1NfUVVFVUUocXVldWUpKTsKKwlyZXEtPm9wdDEgPSBjcHVfdG9fYmU2NChDT05OX1BPTElDWV9WKENQTF9DT05OX1BPTElDWV9BU0spIHwKKwkJCQlTWU5fUlNTX0VOQUJMRV9GIHwgU1lOX1JTU19RVUVVRV9WKHF1ZXVlKSk7CiAJcmV0ID0gdDRfbWdtdF90eChhZGFwLCBza2IpOwogCXJldHVybiBuZXRfeG1pdF9ldmFsKHJldCk7CiB9CkBAIC0zNDgyLDggKzMzNTgsOCBAQAogCXJlcSA9IChzdHJ1Y3QgY3BsX2Nsb3NlX2xpc3RzdnJfcmVxICopX19za2JfcHV0KHNrYiwgc2l6ZW9mKCpyZXEpKTsKIAlJTklUX1RQX1dSKHJlcSwgMCk7CiAJT1BDT0RFX1RJRChyZXEpID0gaHRvbmwoTUtfT1BDT0RFX1RJRChDUExfQ0xPU0VfTElTVFNSVl9SRVEsIHN0aWQpKTsKLQlyZXEtPnJlcGx5X2N0cmwgPSBodG9ucyhOT19SRVBMWSgwKSB8IChpcHY2ID8gTElTVFNWUl9JUFY2KDEpIDoKLQkJCQlMSVNUU1ZSX0lQVjYoMCkpIHwgUVVFVUVOTyhxdWV1ZSkpOworCXJlcS0+cmVwbHlfY3RybCA9IGh0b25zKE5PX1JFUExZX1YoMCkgfCAoaXB2NiA/IExJU1RTVlJfSVBWNl9WKDEpIDoKKwkJCQlMSVNUU1ZSX0lQVjZfVigwKSkgfCBRVUVVRU5PX1YocXVldWUpKTsKIAlyZXQgPSB0NF9tZ210X3R4KGFkYXAsIHNrYik7CiAJcmV0dXJuIG5ldF94bWl0X2V2YWwocmV0KTsKIH0KQEAgLTM2MDAsMTQgKzM0NzYsMTQgQEAKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IG5ldGRldjJhZGFwKGRldik7CiAJdTMyIHYxLCB2MiwgbHBfY291bnQsIGhwX2NvdW50OwogCi0JdjEgPSB0NF9yZWFkX3JlZyhhZGFwLCBBX1NHRV9EQkZJRk9fU1RBVFVTKTsKLQl2MiA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9EQkZJRk9fU1RBVFVTMik7CisJdjEgPSB0NF9yZWFkX3JlZyhhZGFwLCBTR0VfREJGSUZPX1NUQVRVU19BKTsKKwl2MiA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9EQkZJRk9fU1RBVFVTMl9BKTsKIAlpZiAoaXNfdDQoYWRhcC0+cGFyYW1zLmNoaXApKSB7Ci0JCWxwX2NvdW50ID0gR19MUF9DT1VOVCh2MSk7Ci0JCWhwX2NvdW50ID0gR19IUF9DT1VOVCh2MSk7CisJCWxwX2NvdW50ID0gTFBfQ09VTlRfRyh2MSk7CisJCWhwX2NvdW50ID0gSFBfQ09VTlRfRyh2MSk7CiAJfSBlbHNlIHsKLQkJbHBfY291bnQgPSBHX0xQX0NPVU5UX1Q1KHYxKTsKLQkJaHBfY291bnQgPSBHX0hQX0NPVU5UX1Q1KHYyKTsKKwkJbHBfY291bnQgPSBMUF9DT1VOVF9UNV9HKHYxKTsKKwkJaHBfY291bnQgPSBIUF9DT1VOVF9UNV9HKHYyKTsKIAl9CiAJcmV0dXJuIGxwZmlmbyA/IGxwX2NvdW50IDogaHBfY291bnQ7CiB9CkBAIC0zNjUzLDEwICszNTI5LDEwIEBACiB7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBuZXRkZXYyYWRhcChkZXYpOwogCi0JdDRfd3JpdGVfcmVnKGFkYXAsIFVMUF9SWF9JU0NTSV9UQUdNQVNLLCB0YWdfbWFzayk7Ci0JdDRfd3JpdGVfcmVnKGFkYXAsIFVMUF9SWF9JU0NTSV9QU1osIEhQWjAocGdzel9vcmRlclswXSkgfAotCQkgICAgIEhQWjEocGdzel9vcmRlclsxXSkgfCBIUFoyKHBnc3pfb3JkZXJbMl0pIHwKLQkJICAgICBIUFozKHBnc3pfb3JkZXJbM10pKTsKKwl0NF93cml0ZV9yZWcoYWRhcCwgVUxQX1JYX0lTQ1NJX1RBR01BU0tfQSwgdGFnX21hc2spOworCXQ0X3dyaXRlX3JlZyhhZGFwLCBVTFBfUlhfSVNDU0lfUFNaX0EsIEhQWjBfVihwZ3N6X29yZGVyWzBdKSB8CisJCSAgICAgSFBaMV9WKHBnc3pfb3JkZXJbMV0pIHwgSFBaMl9WKHBnc3pfb3JkZXJbMl0pIHwKKwkJICAgICBIUFozX1YocGdzel9vcmRlclszXSkpOwogfQogRVhQT1JUX1NZTUJPTChjeGdiNF9pc2NzaV9pbml0KTsKIApAQCAtMzY2NiwxNCArMzU0MiwxNCBAQAogCWludCByZXQ7CiAKIAlyZXQgPSB0NF9md2FkZHJzcGFjZV93cml0ZShhZGFwLCBhZGFwLT5tYm94LAotCQkJCSAgIDB4ZTEwMDAwMDAgKyBBX1NHRV9DVFhUX0NNRCwgMHgyMDAwMDAwMCk7CisJCQkJICAgMHhlMTAwMDAwMCArIFNHRV9DVFhUX0NNRF9BLCAweDIwMDAwMDAwKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChjeGdiNF9mbHVzaF9lcV9jYWNoZSk7CiAKIHN0YXRpYyBpbnQgcmVhZF9lcV9pbmRpY2VzKHN0cnVjdCBhZGFwdGVyICphZGFwLCB1MTYgcWlkLCB1MTYgKnBpZHgsIHUxNiAqY2lkeCkKIHsKLQl1MzIgYWRkciA9IHQ0X3JlYWRfcmVnKGFkYXAsIEFfU0dFX0RCUV9DVFhUX0JBRERSKSArIDI0ICogcWlkICsgODsKKwl1MzIgYWRkciA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9EQlFfQ1RYVF9CQUREUl9BKSArIDI0ICogcWlkICsgODsKIAlfX2JlNjQgaW5kaWNlczsKIAlpbnQgcmV0OwogCkBAIC0zNzAyLDE0ICszNTc4LDIwIEBACiAKIAlpZiAocGlkeCAhPSBod19waWR4KSB7CiAJCXUxNiBkZWx0YTsKKwkJdTMyIHZhbDsKIAogCQlpZiAocGlkeCA+PSBod19waWR4KQogCQkJZGVsdGEgPSBwaWR4IC0gaHdfcGlkeDsKIAkJZWxzZQogCQkJZGVsdGEgPSBzaXplIC0gaHdfcGlkeCArIHBpZHg7CisKKwkJaWYgKGlzX3Q0KGFkYXAtPnBhcmFtcy5jaGlwKSkKKwkJCXZhbCA9IFBJRFhfVihkZWx0YSk7CisJCWVsc2UKKwkJCXZhbCA9IFBJRFhfVDVfVihkZWx0YSk7CiAJCXdtYigpOwotCQl0NF93cml0ZV9yZWcoYWRhcCwgTVlQRl9SRUcoU0dFX1BGX0tET09SQkVMTCksCi0JCQkgICAgIFFJRChxaWQpIHwgUElEWChkZWx0YSkpOworCQl0NF93cml0ZV9yZWcoYWRhcCwgTVlQRl9SRUcoU0dFX1BGX0tET09SQkVMTF9BKSwKKwkJCSAgICAgUUlEX1YocWlkKSB8IHZhbCk7CiAJfQogb3V0OgogCXJldHVybiByZXQ7CkBAIC0zNzIxLDggKzM2MDMsOCBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwOwogCiAJYWRhcCA9IG5ldGRldjJhZGFwKGRldik7Ci0JdDRfc2V0X3JlZ19maWVsZChhZGFwLCBBX1NHRV9ET09SQkVMTF9DT05UUk9MLCBGX05PQ09BTEVTQ0UsCi0JCQkgRl9OT0NPQUxFU0NFKTsKKwl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIFNHRV9ET09SQkVMTF9DT05UUk9MX0EsIE5PQ09BTEVTQ0VfRiwKKwkJCSBOT0NPQUxFU0NFX0YpOwogfQogRVhQT1JUX1NZTUJPTChjeGdiNF9kaXNhYmxlX2RiX2NvYWxlc2NpbmcpOwogCkBAIC0zNzMxLDcgKzM2MTMsNyBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwOwogCiAJYWRhcCA9IG5ldGRldjJhZGFwKGRldik7Ci0JdDRfc2V0X3JlZ19maWVsZChhZGFwLCBBX1NHRV9ET09SQkVMTF9DT05UUk9MLCBGX05PQ09BTEVTQ0UsIDApOworCXQ0X3NldF9yZWdfZmllbGQoYWRhcCwgU0dFX0RPT1JCRUxMX0NPTlRST0xfQSwgTk9DT0FMRVNDRV9GLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0woY3hnYjRfZW5hYmxlX2RiX2NvYWxlc2NpbmcpOwogCkBAIC0zODA5LDggKzM2OTEsOCBAQAogCXN0cnVjdCBhZGFwdGVyICphZGFwOwogCiAJYWRhcCA9IG5ldGRldjJhZGFwKGRldik7Ci0JbG8gPSB0NF9yZWFkX3JlZyhhZGFwLCBTR0VfVElNRVNUQU1QX0xPKTsKLQloaSA9IEdFVF9UU1ZBTCh0NF9yZWFkX3JlZyhhZGFwLCBTR0VfVElNRVNUQU1QX0hJKSk7CisJbG8gPSB0NF9yZWFkX3JlZyhhZGFwLCBTR0VfVElNRVNUQU1QX0xPX0EpOworCWhpID0gVFNWQUxfRyh0NF9yZWFkX3JlZyhhZGFwLCBTR0VfVElNRVNUQU1QX0hJX0EpKTsKIAogCXJldHVybiAoKHU2NCloaSA8PCAzMikgfCAodTY0KWxvOwogfQpAQCAtMzg3MCwxNCArMzc1MiwxNCBAQAogCXUzMiB2MSwgdjIsIGxwX2NvdW50LCBocF9jb3VudDsKIAogCWRvIHsKLQkJdjEgPSB0NF9yZWFkX3JlZyhhZGFwLCBBX1NHRV9EQkZJRk9fU1RBVFVTKTsKLQkJdjIgPSB0NF9yZWFkX3JlZyhhZGFwLCBTR0VfREJGSUZPX1NUQVRVUzIpOworCQl2MSA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9EQkZJRk9fU1RBVFVTX0EpOworCQl2MiA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9EQkZJRk9fU1RBVFVTMl9BKTsKIAkJaWYgKGlzX3Q0KGFkYXAtPnBhcmFtcy5jaGlwKSkgewotCQkJbHBfY291bnQgPSBHX0xQX0NPVU5UKHYxKTsKLQkJCWhwX2NvdW50ID0gR19IUF9DT1VOVCh2MSk7CisJCQlscF9jb3VudCA9IExQX0NPVU5UX0codjEpOworCQkJaHBfY291bnQgPSBIUF9DT1VOVF9HKHYxKTsKIAkJfSBlbHNlIHsKLQkJCWxwX2NvdW50ID0gR19MUF9DT1VOVF9UNSh2MSk7Ci0JCQlocF9jb3VudCA9IEdfSFBfQ09VTlRfVDUodjIpOworCQkJbHBfY291bnQgPSBMUF9DT1VOVF9UNV9HKHYxKTsKKwkJCWhwX2NvdW50ID0gSFBfQ09VTlRfVDVfRyh2Mik7CiAJCX0KIAogCQlpZiAobHBfY291bnQgPT0gMCAmJiBocF9jb3VudCA9PSAwKQpAQCAtMzkwNCw4ICszNzg2LDggQEAKIAkJICogYXJlIGNvbW1pdHRlZCBiZWZvcmUgd2UgdGVsbCBIVyBhYm91dCB0aGVtLgogCQkgKi8KIAkJd21iKCk7Ci0JCXQ0X3dyaXRlX3JlZyhhZGFwLCBNWVBGX1JFRyhTR0VfUEZfS0RPT1JCRUxMKSwKLQkJCSAgICAgUUlEKHEtPmNudHh0X2lkKSB8IFBJRFgocS0+ZGJfcGlkeF9pbmMpKTsKKwkJdDRfd3JpdGVfcmVnKGFkYXAsIE1ZUEZfUkVHKFNHRV9QRl9LRE9PUkJFTExfQSksCisJCQkgICAgIFFJRF9WKHEtPmNudHh0X2lkKSB8IFBJRFhfVihxLT5kYl9waWR4X2luYykpOwogCQlxLT5kYl9waWR4X2luYyA9IDA7CiAJfQogCXEtPmRiX2Rpc2FibGVkID0gMDsKQEAgLTM5NTIsOSArMzgzNCw5IEBACiAJZHJhaW5fZGJfZmlmbyhhZGFwLCBkYmZpZm9fZHJhaW5fZGVsYXkpOwogCWVuYWJsZV9kYnMoYWRhcCk7CiAJbm90aWZ5X3JkbWFfdWxkKGFkYXAsIENYR0I0X0NPTlRST0xfREJfRU1QVFkpOwotCXQ0X3NldF9yZWdfZmllbGQoYWRhcCwgU0dFX0lOVF9FTkFCTEUzLAotCQkJIERCRklGT19IUF9JTlQgfCBEQkZJRk9fTFBfSU5ULAotCQkJIERCRklGT19IUF9JTlQgfCBEQkZJRk9fTFBfSU5UKTsKKwl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIFNHRV9JTlRfRU5BQkxFM19BLAorCQkJIERCRklGT19IUF9JTlRfRiB8IERCRklGT19MUF9JTlRfRiwKKwkJCSBEQkZJRk9fSFBfSU5UX0YgfCBEQkZJRk9fTFBfSU5UX0YpOwogfQogCiBzdGF0aWMgdm9pZCBzeW5jX3R4cV9waWR4KHN0cnVjdCBhZGFwdGVyICphZGFwLCBzdHJ1Y3Qgc2dlX3R4cSAqcSkKQEAgLTM5NjgsMTQgKzM4NTAsMjAgQEAKIAkJZ290byBvdXQ7CiAJaWYgKHEtPmRiX3BpZHggIT0gaHdfcGlkeCkgewogCQl1MTYgZGVsdGE7CisJCXUzMiB2YWw7CiAKIAkJaWYgKHEtPmRiX3BpZHggPj0gaHdfcGlkeCkKIAkJCWRlbHRhID0gcS0+ZGJfcGlkeCAtIGh3X3BpZHg7CiAJCWVsc2UKIAkJCWRlbHRhID0gcS0+c2l6ZSAtIGh3X3BpZHggKyBxLT5kYl9waWR4OworCisJCWlmIChpc190NChhZGFwLT5wYXJhbXMuY2hpcCkpCisJCQl2YWwgPSBQSURYX1YoZGVsdGEpOworCQllbHNlCisJCQl2YWwgPSBQSURYX1Q1X1YoZGVsdGEpOwogCQl3bWIoKTsKLQkJdDRfd3JpdGVfcmVnKGFkYXAsIE1ZUEZfUkVHKFNHRV9QRl9LRE9PUkJFTEwpLAotCQkJICAgICBRSUQocS0+Y250eHRfaWQpIHwgUElEWChkZWx0YSkpOworCQl0NF93cml0ZV9yZWcoYWRhcCwgTVlQRl9SRUcoU0dFX1BGX0tET09SQkVMTF9BKSwKKwkJCSAgICAgUUlEX1YocS0+Y250eHRfaWQpIHwgdmFsKTsKIAl9CiBvdXQ6CiAJcS0+ZGJfZGlzYWJsZWQgPSAwOwpAQCAtNDAyNCwxNCArMzkxMiwxNCBAQAogCQkJZGV2X2VycihhZGFwLT5wZGV2X2RldiwgImRvb3JiZWxsIGRyb3AgcmVjb3Zlcnk6ICIKIAkJCQkicWlkPSVkLCBwaWR4X2luYz0lZFxuIiwgcWlkLCBwaWR4X2luYyk7CiAJCWVsc2UKLQkJCXdyaXRlbChQSURYX1Q1KHBpZHhfaW5jKSB8IFFJRChiYXIyX3FpZCksCisJCQl3cml0ZWwoUElEWF9UNV9WKHBpZHhfaW5jKSB8IFFJRF9WKGJhcjJfcWlkKSwKIAkJCSAgICAgICBhZGFwLT5iYXIyICsgYmFyMl9xb2Zmc2V0ICsgU0dFX1VEQl9LRE9PUkJFTEwpOwogCiAJCS8qIFJlLWVuYWJsZSBCQVIyIFdDICovCiAJCXQ0X3NldF9yZWdfZmllbGQoYWRhcCwgMHgxMGIwLCAxPDwxNSwgMTw8MTUpOwogCX0KIAotCXQ0X3NldF9yZWdfZmllbGQoYWRhcCwgQV9TR0VfRE9PUkJFTExfQ09OVFJPTCwgRl9EUk9QUEVEX0RCLCAwKTsKKwl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIFNHRV9ET09SQkVMTF9DT05UUk9MX0EsIERST1BQRURfREJfRiwgMCk7CiB9CiAKIHZvaWQgdDRfZGJfZnVsbChzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKQEAgLTQwMzksOCArMzkyNyw4IEBACiAJaWYgKGlzX3Q0KGFkYXAtPnBhcmFtcy5jaGlwKSkgewogCQlkaXNhYmxlX2RicyhhZGFwKTsKIAkJbm90aWZ5X3JkbWFfdWxkKGFkYXAsIENYR0I0X0NPTlRST0xfREJfRlVMTCk7Ci0JCXQ0X3NldF9yZWdfZmllbGQoYWRhcCwgU0dFX0lOVF9FTkFCTEUzLAotCQkJCSBEQkZJRk9fSFBfSU5UIHwgREJGSUZPX0xQX0lOVCwgMCk7CisJCXQ0X3NldF9yZWdfZmllbGQoYWRhcCwgU0dFX0lOVF9FTkFCTEUzX0EsCisJCQkJIERCRklGT19IUF9JTlRfRiB8IERCRklGT19MUF9JTlRfRiwgMCk7CiAJCXF1ZXVlX3dvcmsoYWRhcC0+d29ya3EsICZhZGFwLT5kYl9mdWxsX3Rhc2spOwogCX0KIH0KQEAgLTQwODEsNyArMzk2OSw3IEBACiAJbGxpLm5wb3J0cyA9IGFkYXAtPnBhcmFtcy5ucG9ydHM7CiAJbGxpLndyX2NyZWQgPSBhZGFwLT5wYXJhbXMub2ZsZHFfd3JfY3JlZDsKIAlsbGkuYWRhcHRlcl90eXBlID0gYWRhcC0+cGFyYW1zLmNoaXA7Ci0JbGxpLmlzY3NpX2lvbGVuID0gTUFYUlhEQVRBX0dFVCh0NF9yZWFkX3JlZyhhZGFwLCBUUF9QQVJBX1JFRzIpKTsKKwlsbGkuaXNjc2lfaW9sZW4gPSBNQVhSWERBVEFfRyh0NF9yZWFkX3JlZyhhZGFwLCBUUF9QQVJBX1JFRzJfQSkpOwogCWxsaS5jY2xrX3BzID0gMTAwMDAwMDAwMCAvIGFkYXAtPnBhcmFtcy52cGQuY2NsazsKIAlsbGkudWRiX2RlbnNpdHkgPSAxIDw8IGFkYXAtPnBhcmFtcy5zZ2UuZXFfcXBwOwogCWxsaS51Y3FfZGVuc2l0eSA9IDEgPDwgYWRhcC0+cGFyYW1zLnNnZS5pcV9xcHA7CkBAIC00MDg5LDggKzM5NzcsOCBAQAogCS8qIE1PRFFfUkVRX01BUCBzZXRzIHF1ZXVlcyAwLTMgdG8gY2hhbiAwLTMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTkNIQU47IGkrKykKIAkJbGxpLnR4X21vZHFbaV0gPSBpOwotCWxsaS5ndHNfcmVnID0gYWRhcC0+cmVncyArIE1ZUEZfUkVHKFNHRV9QRl9HVFMpOwotCWxsaS5kYl9yZWcgPSBhZGFwLT5yZWdzICsgTVlQRl9SRUcoU0dFX1BGX0tET09SQkVMTCk7CisJbGxpLmd0c19yZWcgPSBhZGFwLT5yZWdzICsgTVlQRl9SRUcoU0dFX1BGX0dUU19BKTsKKwlsbGkuZGJfcmVnID0gYWRhcC0+cmVncyArIE1ZUEZfUkVHKFNHRV9QRl9LRE9PUkJFTExfQSk7CiAJbGxpLmZ3X3ZlcnMgPSBhZGFwLT5wYXJhbXMuZndfdmVyczsKIAlsbGkuZGJmaWZvX2ludF90aHJlc2ggPSBkYmZpZm9faW50X3RocmVzaDsKIAlsbGkuc2dlX2luZ3BhZGJvdW5kYXJ5ID0gYWRhcC0+c2dlLmZsX2FsaWduOwpAQCAtNDIyMCwxNDggKzQxMDgsNjEgQEAKIH0KIEVYUE9SVF9TWU1CT0woY3hnYjRfdW5yZWdpc3Rlcl91bGQpOwogCi0vKiBDaGVjayBpZiBuZXRkZXYgb24gd2hpY2ggZXZlbnQgaXMgb2NjdXJlZCBiZWxvbmdzIHRvIHVzIG9yIG5vdC4gUmV0dXJuCi0gKiBzdWNjZXNzICh0cnVlKSBpZiBpdCBiZWxvbmdzIG90aGVyd2lzZSBmYWlsdXJlIChmYWxzZSkuCi0gKiBDYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgaGVsZC4KLSAqLwogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCi1zdGF0aWMgYm9vbCBjeGdiNF9uZXRkZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3N0YXRpYyBpbnQgY3hnYjRfaW5ldDZhZGRyX2hhbmRsZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCiB7CisJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhID0gZGF0YTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZXZlbnRfZGV2ID0gaWZhLT5pZGV2LT5kZXY7CisJY29uc3Qgc3RydWN0IGRldmljZSAqcGFyZW50ID0gTlVMTDsKKyNpZiBJU19FTkFCTEVEKENPTkZJR19CT05ESU5HKQogCXN0cnVjdCBhZGFwdGVyICphZGFwOwotCWludCBpOworI2VuZGlmCisJaWYgKGV2ZW50X2Rldi0+cHJpdl9mbGFncyAmIElGRl84MDJfMVFfVkxBTikKKwkJZXZlbnRfZGV2ID0gdmxhbl9kZXZfcmVhbF9kZXYoZXZlbnRfZGV2KTsKKyNpZiBJU19FTkFCTEVEKENPTkZJR19CT05ESU5HKQorCWlmIChldmVudF9kZXYtPmZsYWdzICYgSUZGX01BU1RFUikgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFkYXAsICZhZGFwdGVyX2xpc3QsIGxpc3Rfbm9kZSkgeworCQkJc3dpdGNoIChldmVudCkgeworCQkJY2FzZSBORVRERVZfVVA6CisJCQkJY3hnYjRfY2xpcF9nZXQoYWRhcC0+cG9ydFswXSwKKwkJCQkJICAgICAgIChjb25zdCB1MzIgKilpZmEsIDEpOworCQkJCWJyZWFrOworCQkJY2FzZSBORVRERVZfRE9XTjoKKwkJCQljeGdiNF9jbGlwX3JlbGVhc2UoYWRhcC0+cG9ydFswXSwKKwkJCQkJCSAgIChjb25zdCB1MzIgKilpZmEsIDEpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlyZXR1cm4gTk9USUZZX09LOworCX0KKyNlbmRpZgogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoYWRhcCwgJmFkYXBfcmN1X2xpc3QsIHJjdV9ub2RlKQotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05QT1JUUzsgaSsrKQotCQkJaWYgKGFkYXAtPnBvcnRbaV0gPT0gbmV0ZGV2KQotCQkJCXJldHVybiB0cnVlOwotCXJldHVybiBmYWxzZTsKLX0KKwlpZiAoZXZlbnRfZGV2KQorCQlwYXJlbnQgPSBldmVudF9kZXYtPmRldi5wYXJlbnQ7CiAKLXN0YXRpYyBpbnQgY2xpcF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmV2ZW50X2Rldiwgc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhLAotCQkgICAgdW5zaWduZWQgbG9uZyBldmVudCkKLXsKLQlpbnQgcmV0ID0gTk9USUZZX0RPTkU7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JaWYgKGN4Z2I0X25ldGRldihldmVudF9kZXYpKSB7CisJaWYgKHBhcmVudCAmJiBwYXJlbnQtPmRyaXZlciA9PSAmY3hnYjRfZHJpdmVyLmRyaXZlcikgewogCQlzd2l0Y2ggKGV2ZW50KSB7CiAJCWNhc2UgTkVUREVWX1VQOgotCQkJcmV0ID0gY3hnYjRfY2xpcF9nZXQoZXZlbnRfZGV2LCAmaWZhLT5hZGRyKTsKLQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQkJCXJldCA9IE5PVElGWV9PSzsKKwkJCWN4Z2I0X2NsaXBfZ2V0KGV2ZW50X2RldiwgKGNvbnN0IHUzMiAqKWlmYSwgMSk7CiAJCQlicmVhazsKIAkJY2FzZSBORVRERVZfRE9XTjoKLQkJCWN4Z2I0X2NsaXBfcmVsZWFzZShldmVudF9kZXYsICZpZmEtPmFkZHIpOwotCQkJcmV0ID0gTk9USUZZX09LOworCQkJY3hnYjRfY2xpcF9yZWxlYXNlKGV2ZW50X2RldiwgKGNvbnN0IHUzMiAqKWlmYSwgMSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiByZXQ7CisJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIGludCBjeGdiNF9pbmV0NmFkZHJfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCi0JCXVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhID0gZGF0YTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZXZlbnRfZGV2OwotCWludCByZXQgPSBOT1RJRllfRE9ORTsKLQlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IG5ldGRldl9wcml2KGlmYS0+aWRldi0+ZGV2KTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOwotCXN0cnVjdCBzbGF2ZSAqc2xhdmU7Ci0Jc3RydWN0IHBjaV9kZXYgKmZpcnN0X3BkZXYgPSBOVUxMOwotCi0JaWYgKGlmYS0+aWRldi0+ZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOKSB7Ci0JCWV2ZW50X2RldiA9IHZsYW5fZGV2X3JlYWxfZGV2KGlmYS0+aWRldi0+ZGV2KTsKLQkJcmV0ID0gY2xpcF9hZGQoZXZlbnRfZGV2LCBpZmEsIGV2ZW50KTsKLQl9IGVsc2UgaWYgKGlmYS0+aWRldi0+ZGV2LT5mbGFncyAmIElGRl9NQVNURVIpIHsKLQkJLyogSXQgaXMgcG9zc2libGUgdGhhdCB0d28gZGlmZmVyZW50IGFkYXB0ZXJzIGFyZSBib25kZWQgaW4gb25lCi0JCSAqIGJvbmQuIFdlIG5lZWQgdG8gZmluZCBzdWNoIGRpZmZlcmVudCBhZGFwdGVycyBhbmQgYWRkIGNsaXAKLQkJICogaW4gYWxsIG9mIHRoZW0gb25seSBvbmNlLgotCQkgKi8KLQkJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaXRlcikgewotCQkJaWYgKCFmaXJzdF9wZGV2KSB7Ci0JCQkJcmV0ID0gY2xpcF9hZGQoc2xhdmUtPmRldiwgaWZhLCBldmVudCk7Ci0JCQkJLyogSWYgY2xpcF9hZGQgaXMgc3VjY2VzcyB0aGVuIG9ubHkgaW5pdGlhbGl6ZQotCQkJCSAqIGZpcnN0X3BkZXYgc2luY2UgaXQgbWVhbnMgaXQgaXMgb3VyIGRldmljZQotCQkJCSAqLwotCQkJCWlmIChyZXQgPT0gTk9USUZZX09LKQotCQkJCQlmaXJzdF9wZGV2ID0gdG9fcGNpX2RldigKLQkJCQkJCQlzbGF2ZS0+ZGV2LT5kZXYucGFyZW50KTsKLQkJCX0gZWxzZSBpZiAoZmlyc3RfcGRldiAhPQotCQkJCSAgIHRvX3BjaV9kZXYoc2xhdmUtPmRldi0+ZGV2LnBhcmVudCkpCi0JCQkJCXJldCA9IGNsaXBfYWRkKHNsYXZlLT5kZXYsIGlmYSwgZXZlbnQpOwotCQl9Ci0JfSBlbHNlCi0JCXJldCA9IGNsaXBfYWRkKGlmYS0+aWRldi0+ZGV2LCBpZmEsIGV2ZW50KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KK3N0YXRpYyBib29sIGluZXQ2YWRkcl9yZWdpc3RlcmVkOwogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjeGdiNF9pbmV0NmFkZHJfbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBjeGdiNF9pbmV0NmFkZHJfaGFuZGxlcgogfTsKIAotLyogUmV0cmlldmVzIElQdjYgYWRkcmVzc2VzIGZyb20gYSByb290IGRldmljZSAoYm9uZCwgdmxhbikgYXNzb2NpYXRlZCB3aXRoCi0gKiBhIHBoeXNpY2FsIGRldmljZS4KLSAqIFRoZSBwaHlzaWNhbCBkZXZpY2UgcmVmZXJlbmNlIGlzIG5lZWRlZCB0byBzZW5kIHRoZSBhY3R1bCBDTElQIGNvbW1hbmQuCi0gKi8KLXN0YXRpYyBpbnQgdXBkYXRlX2Rldl9jbGlwKHN0cnVjdCBuZXRfZGV2aWNlICpyb290X2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gTlVMTDsKLQlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZmE7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZGV2ID0gX19pbjZfZGV2X2dldChyb290X2Rldik7Ci0JaWYgKCFpZGV2KQotCQlyZXR1cm4gcmV0OwotCi0JcmVhZF9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlmYSwgJmlkZXYtPmFkZHJfbGlzdCwgaWZfbGlzdCkgewotCQlyZXQgPSBjeGdiNF9jbGlwX2dldChkZXYsICZpZmEtPmFkZHIpOwotCQlpZiAocmV0IDwgMCkKLQkJCWJyZWFrOwotCX0KLQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHVwZGF0ZV9yb290X2Rldl9jbGlwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RfZGV2ID0gTlVMTDsKLQlpbnQgaSwgcmV0ID0gMDsKLQotCS8qIEZpcnN0IHBvcHVsYXRlIHRoZSByZWFsIG5ldCBkZXZpY2UncyBJUHY2IGFkZHJlc3NlcyAqLwotCXJldCA9IHVwZGF0ZV9kZXZfY2xpcChkZXYsIGRldik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFBhcnNlIGFsbCBib25kIGFuZCB2bGFuIGRldmljZXMgbGF5ZXJlZCBvbiB0b3Agb2YgdGhlIHBoeXNpY2FsIGRldiAqLwotCXJvb3RfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0X3JjdShkZXYpOwotCWlmIChyb290X2RldikgewotCQlyZXQgPSB1cGRhdGVfZGV2X2NsaXAocm9vdF9kZXYsIGRldik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBWTEFOX05fVklEOyBpKyspIHsKLQkJcm9vdF9kZXYgPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoZGV2LCBodG9ucyhFVEhfUF84MDIxUSksIGkpOwotCQlpZiAoIXJvb3RfZGV2KQotCQkJY29udGludWU7Ci0KLQkJcmV0ID0gdXBkYXRlX2Rldl9jbGlwKHJvb3RfZGV2LCBkZXYpOwotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIHVwZGF0ZV9jbGlwKGNvbnN0IHN0cnVjdCBhZGFwdGVyICphZGFwKQogewogCWludCBpOwpAQCAtNDM3NSw3ICs0MTc2LDcgQEAKIAkJcmV0ID0gMDsKIAogCQlpZiAoZGV2KQotCQkJcmV0ID0gdXBkYXRlX3Jvb3RfZGV2X2NsaXAoZGV2KTsKKwkJCXJldCA9IGN4Z2I0X3VwZGF0ZV9yb290X2Rldl9jbGlwKGRldik7CiAKIAkJaWYgKHJldCA8IDApCiAJCQlicmVhazsKQEAgLTQ1NjcsMTMgKzQzNjgsMTMgQEAKIAkJCWYtPmZzLnZhbC5saXBbaV0gPSB2YWxbaV07CiAJCQlmLT5mcy5tYXNrLmxpcFtpXSA9IH4wOwogCQl9Ci0JCWlmIChhZGFwLT5wYXJhbXMudHAudmxhbl9wcmlfbWFwICYgRl9QT1JUKSB7CisJCWlmIChhZGFwLT5wYXJhbXMudHAudmxhbl9wcmlfbWFwICYgUE9SVF9GKSB7CiAJCQlmLT5mcy52YWwuaXBvcnQgPSBwb3J0OwogCQkJZi0+ZnMubWFzay5pcG9ydCA9IG1hc2s7CiAJCX0KIAl9CiAKLQlpZiAoYWRhcC0+cGFyYW1zLnRwLnZsYW5fcHJpX21hcCAmIEZfUFJPVE9DT0wpIHsKKwlpZiAoYWRhcC0+cGFyYW1zLnRwLnZsYW5fcHJpX21hcCAmIFBST1RPQ09MX0YpIHsKIAkJZi0+ZnMudmFsLnByb3RvID0gSVBQUk9UT19UQ1A7CiAJCWYtPmZzLm1hc2sucHJvdG8gPSB+MDsKIAl9CkBAIC00Nzc5LDExICs0NTgwLDE1IEBACiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlciAgPSBjeGdiX25ldHBvbGwsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTAorCS5uZG9fYnVzeV9wb2xsICAgICAgICA9IGN4Z2JfYnVzeV9wb2xsLAorI2VuZGlmCisKIH07CiAKIHZvaWQgdDRfZmF0YWxfZXJyKHN0cnVjdCBhZGFwdGVyICphZGFwKQogewotCXQ0X3NldF9yZWdfZmllbGQoYWRhcCwgU0dFX0NPTlRST0wsIEdMT0JBTEVOQUJMRSwgMCk7CisJdDRfc2V0X3JlZ19maWVsZChhZGFwLCBTR0VfQ09OVFJPTF9BLCBHTE9CQUxFTkFCTEVfRiwgMCk7CiAJdDRfaW50cl9kaXNhYmxlKGFkYXApOwogCWRldl9hbGVydChhZGFwLT5wZGV2X2RldiwgImVuY291bnRlcmVkIGZhdGFsIGVycm9yLCBhZGFwdGVyIHN0b3BwZWRcbiIpOwogfQpAQCAtNDg1OCwxNiArNDY2MywxNiBAQAogCQltZW1fd2luMl9iYXNlID0gTUVNV0lOMl9CQVNFX1Q1OwogCQltZW1fd2luMl9hcGVydHVyZSA9IE1FTVdJTjJfQVBFUlRVUkVfVDU7CiAJfQotCXQ0X3dyaXRlX3JlZyhhZGFwLCBQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19CQVNFX1dJTiwgMCksCi0JCSAgICAgbWVtX3dpbjBfYmFzZSB8IEJJUigwKSB8Ci0JCSAgICAgV0lORE9XKGlsb2cyKE1FTVdJTjBfQVBFUlRVUkUpIC0gMTApKTsKLQl0NF93cml0ZV9yZWcoYWRhcCwgUENJRV9NRU1fQUNDRVNTX1JFRyhQQ0lFX01FTV9BQ0NFU1NfQkFTRV9XSU4sIDEpLAotCQkgICAgIG1lbV93aW4xX2Jhc2UgfCBCSVIoMCkgfAotCQkgICAgIFdJTkRPVyhpbG9nMihNRU1XSU4xX0FQRVJUVVJFKSAtIDEwKSk7Ci0JdDRfd3JpdGVfcmVnKGFkYXAsIFBDSUVfTUVNX0FDQ0VTU19SRUcoUENJRV9NRU1fQUNDRVNTX0JBU0VfV0lOLCAyKSwKLQkJICAgICBtZW1fd2luMl9iYXNlIHwgQklSKDApIHwKLQkJICAgICBXSU5ET1coaWxvZzIobWVtX3dpbjJfYXBlcnR1cmUpIC0gMTApKTsKLQl0NF9yZWFkX3JlZyhhZGFwLCBQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19CQVNFX1dJTiwgMikpOworCXQ0X3dyaXRlX3JlZyhhZGFwLCBQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19CQVNFX1dJTl9BLCAwKSwKKwkJICAgICBtZW1fd2luMF9iYXNlIHwgQklSX1YoMCkgfAorCQkgICAgIFdJTkRPV19WKGlsb2cyKE1FTVdJTjBfQVBFUlRVUkUpIC0gMTApKTsKKwl0NF93cml0ZV9yZWcoYWRhcCwgUENJRV9NRU1fQUNDRVNTX1JFRyhQQ0lFX01FTV9BQ0NFU1NfQkFTRV9XSU5fQSwgMSksCisJCSAgICAgbWVtX3dpbjFfYmFzZSB8IEJJUl9WKDApIHwKKwkJICAgICBXSU5ET1dfVihpbG9nMihNRU1XSU4xX0FQRVJUVVJFKSAtIDEwKSk7CisJdDRfd3JpdGVfcmVnKGFkYXAsIFBDSUVfTUVNX0FDQ0VTU19SRUcoUENJRV9NRU1fQUNDRVNTX0JBU0VfV0lOX0EsIDIpLAorCQkgICAgIG1lbV93aW4yX2Jhc2UgfCBCSVJfVigwKSB8CisJCSAgICAgV0lORE9XX1YoaWxvZzIobWVtX3dpbjJfYXBlcnR1cmUpIC0gMTApKTsKKwl0NF9yZWFkX3JlZyhhZGFwLCBQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19CQVNFX1dJTl9BLCAyKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldHVwX21lbXdpbl9yZG1hKHN0cnVjdCBhZGFwdGVyICphZGFwKQpAQCAtNDg4MSwxMyArNDY4NiwxMyBAQAogCQlzdGFydCArPSBPQ1FfV0lOX09GRlNFVChhZGFwLT5wZGV2LCAmYWRhcC0+dnJlcyk7CiAJCXN6X2tiID0gcm91bmR1cF9wb3dfb2ZfdHdvKGFkYXAtPnZyZXMub2NxLnNpemUpID4+IDEwOwogCQl0NF93cml0ZV9yZWcoYWRhcCwKLQkJCSAgICAgUENJRV9NRU1fQUNDRVNTX1JFRyhQQ0lFX01FTV9BQ0NFU1NfQkFTRV9XSU4sIDMpLAotCQkJICAgICBzdGFydCB8IEJJUigxKSB8IFdJTkRPVyhpbG9nMihzel9rYikpKTsKKwkJCSAgICAgUENJRV9NRU1fQUNDRVNTX1JFRyhQQ0lFX01FTV9BQ0NFU1NfQkFTRV9XSU5fQSwgMyksCisJCQkgICAgIHN0YXJ0IHwgQklSX1YoMSkgfCBXSU5ET1dfVihpbG9nMihzel9rYikpKTsKIAkJdDRfd3JpdGVfcmVnKGFkYXAsCi0JCQkgICAgIFBDSUVfTUVNX0FDQ0VTU19SRUcoUENJRV9NRU1fQUNDRVNTX09GRlNFVCwgMyksCisJCQkgICAgIFBDSUVfTUVNX0FDQ0VTU19SRUcoUENJRV9NRU1fQUNDRVNTX09GRlNFVF9BLCAzKSwKIAkJCSAgICAgYWRhcC0+dnJlcy5vY3Euc3RhcnQpOwogCQl0NF9yZWFkX3JlZyhhZGFwLAotCQkJICAgIFBDSUVfTUVNX0FDQ0VTU19SRUcoUENJRV9NRU1fQUNDRVNTX09GRlNFVCwgMykpOworCQkJICAgIFBDSUVfTUVNX0FDQ0VTU19SRUcoUENJRV9NRU1fQUNDRVNTX09GRlNFVF9BLCAzKSk7CiAJfQogfQogCkBAIC00OTM2LDM4ICs0NzQxLDM4IEBACiAJdDRfc2dlX2luaXQoYWRhcCk7CiAKIAkvKiB0d2VhayBzb21lIHNldHRpbmdzICovCi0JdDRfd3JpdGVfcmVnKGFkYXAsIFRQX1NISUZUX0NOVCwgMHg2NGY4ODQ5KTsKLQl0NF93cml0ZV9yZWcoYWRhcCwgVUxQX1JYX1RERFBfUFNaLCBIUFowKFBBR0VfU0hJRlQgLSAxMikpOwotCXQ0X3dyaXRlX3JlZyhhZGFwLCBUUF9QSU9fQUREUiwgVFBfSU5HUkVTU19DT05GSUcpOwotCXYgPSB0NF9yZWFkX3JlZyhhZGFwLCBUUF9QSU9fREFUQSk7Ci0JdDRfd3JpdGVfcmVnKGFkYXAsIFRQX1BJT19EQVRBLCB2ICYgfkNTVU1fSEFTX1BTRVVET19IRFIpOworCXQ0X3dyaXRlX3JlZyhhZGFwLCBUUF9TSElGVF9DTlRfQSwgMHg2NGY4ODQ5KTsKKwl0NF93cml0ZV9yZWcoYWRhcCwgVUxQX1JYX1RERFBfUFNaX0EsIEhQWjBfVihQQUdFX1NISUZUIC0gMTIpKTsKKwl0NF93cml0ZV9yZWcoYWRhcCwgVFBfUElPX0FERFJfQSwgVFBfSU5HUkVTU19DT05GSUdfQSk7CisJdiA9IHQ0X3JlYWRfcmVnKGFkYXAsIFRQX1BJT19EQVRBX0EpOworCXQ0X3dyaXRlX3JlZyhhZGFwLCBUUF9QSU9fREFUQV9BLCB2ICYgfkNTVU1fSEFTX1BTRVVET19IRFJfRik7CiAKIAkvKiBmaXJzdCA0IFR4IG1vZHVsYXRpb24gcXVldWVzIHBvaW50IHRvIGNvbnNlY3V0aXZlIFR4IGNoYW5uZWxzICovCiAJYWRhcC0+cGFyYW1zLnRwLnR4X21vZHFfbWFwID0gMHhFNDsKLQl0NF93cml0ZV9yZWcoYWRhcCwgQV9UUF9UWF9NT0RfUVVFVUVfUkVRX01BUCwKLQkJICAgICBWX1RYX01PRF9RVUVVRV9SRVFfTUFQKGFkYXAtPnBhcmFtcy50cC50eF9tb2RxX21hcCkpOworCXQ0X3dyaXRlX3JlZyhhZGFwLCBUUF9UWF9NT0RfUVVFVUVfUkVRX01BUF9BLAorCQkgICAgIFRYX01PRF9RVUVVRV9SRVFfTUFQX1YoYWRhcC0+cGFyYW1zLnRwLnR4X21vZHFfbWFwKSk7CiAKIAkvKiBhc3NvY2lhdGUgZWFjaCBUeCBtb2R1bGF0aW9uIHF1ZXVlIHdpdGggY29uc2VjdXRpdmUgVHggY2hhbm5lbHMgKi8KIAl2ID0gMHg4NDIxODQyMTsKLQl0NF93cml0ZV9pbmRpcmVjdChhZGFwLCBUUF9QSU9fQUREUiwgVFBfUElPX0RBVEEsCi0JCQkgICZ2LCAxLCBBX1RQX1RYX1NDSEVEX0hEUik7Ci0JdDRfd3JpdGVfaW5kaXJlY3QoYWRhcCwgVFBfUElPX0FERFIsIFRQX1BJT19EQVRBLAotCQkJICAmdiwgMSwgQV9UUF9UWF9TQ0hFRF9GSUZPKTsKLQl0NF93cml0ZV9pbmRpcmVjdChhZGFwLCBUUF9QSU9fQUREUiwgVFBfUElPX0RBVEEsCi0JCQkgICZ2LCAxLCBBX1RQX1RYX1NDSEVEX1BDTUQpOworCXQ0X3dyaXRlX2luZGlyZWN0KGFkYXAsIFRQX1BJT19BRERSX0EsIFRQX1BJT19EQVRBX0EsCisJCQkgICZ2LCAxLCBUUF9UWF9TQ0hFRF9IRFJfQSk7CisJdDRfd3JpdGVfaW5kaXJlY3QoYWRhcCwgVFBfUElPX0FERFJfQSwgVFBfUElPX0RBVEFfQSwKKwkJCSAgJnYsIDEsIFRQX1RYX1NDSEVEX0ZJRk9fQSk7CisJdDRfd3JpdGVfaW5kaXJlY3QoYWRhcCwgVFBfUElPX0FERFJfQSwgVFBfUElPX0RBVEFfQSwKKwkJCSAgJnYsIDEsIFRQX1RYX1NDSEVEX1BDTURfQSk7CiAKICNkZWZpbmUgVDRfVFhfTU9EUV8xMEdfV0VJR0hUX0RFRkFVTFQgMTYgLyogaW4gS0IgdW5pdHMgKi8KIAlpZiAoaXNfb2ZmbG9hZChhZGFwKSkgewotCQl0NF93cml0ZV9yZWcoYWRhcCwgQV9UUF9UWF9NT0RfUVVFVUVfV0VJR0hUMCwKLQkJCSAgICAgVl9UWF9NT0RRX1dFSUdIVDAoVDRfVFhfTU9EUV8xMEdfV0VJR0hUX0RFRkFVTFQpIHwKLQkJCSAgICAgVl9UWF9NT0RRX1dFSUdIVDEoVDRfVFhfTU9EUV8xMEdfV0VJR0hUX0RFRkFVTFQpIHwKLQkJCSAgICAgVl9UWF9NT0RRX1dFSUdIVDIoVDRfVFhfTU9EUV8xMEdfV0VJR0hUX0RFRkFVTFQpIHwKLQkJCSAgICAgVl9UWF9NT0RRX1dFSUdIVDMoVDRfVFhfTU9EUV8xMEdfV0VJR0hUX0RFRkFVTFQpKTsKLQkJdDRfd3JpdGVfcmVnKGFkYXAsIEFfVFBfVFhfTU9EX0NIQU5ORUxfV0VJR0hULAotCQkJICAgICBWX1RYX01PRFFfV0VJR0hUMChUNF9UWF9NT0RRXzEwR19XRUlHSFRfREVGQVVMVCkgfAotCQkJICAgICBWX1RYX01PRFFfV0VJR0hUMShUNF9UWF9NT0RRXzEwR19XRUlHSFRfREVGQVVMVCkgfAotCQkJICAgICBWX1RYX01PRFFfV0VJR0hUMihUNF9UWF9NT0RRXzEwR19XRUlHSFRfREVGQVVMVCkgfAotCQkJICAgICBWX1RYX01PRFFfV0VJR0hUMyhUNF9UWF9NT0RRXzEwR19XRUlHSFRfREVGQVVMVCkpOworCQl0NF93cml0ZV9yZWcoYWRhcCwgVFBfVFhfTU9EX1FVRVVFX1dFSUdIVDBfQSwKKwkJCSAgICAgVFhfTU9EUV9XRUlHSFQwX1YoVDRfVFhfTU9EUV8xMEdfV0VJR0hUX0RFRkFVTFQpIHwKKwkJCSAgICAgVFhfTU9EUV9XRUlHSFQxX1YoVDRfVFhfTU9EUV8xMEdfV0VJR0hUX0RFRkFVTFQpIHwKKwkJCSAgICAgVFhfTU9EUV9XRUlHSFQyX1YoVDRfVFhfTU9EUV8xMEdfV0VJR0hUX0RFRkFVTFQpIHwKKwkJCSAgICAgVFhfTU9EUV9XRUlHSFQzX1YoVDRfVFhfTU9EUV8xMEdfV0VJR0hUX0RFRkFVTFQpKTsKKwkJdDRfd3JpdGVfcmVnKGFkYXAsIFRQX1RYX01PRF9DSEFOTkVMX1dFSUdIVF9BLAorCQkJICAgICBUWF9NT0RRX1dFSUdIVDBfVihUNF9UWF9NT0RRXzEwR19XRUlHSFRfREVGQVVMVCkgfAorCQkJICAgICBUWF9NT0RRX1dFSUdIVDFfVihUNF9UWF9NT0RRXzEwR19XRUlHSFRfREVGQVVMVCkgfAorCQkJICAgICBUWF9NT0RRX1dFSUdIVDJfVihUNF9UWF9NT0RRXzEwR19XRUlHSFRfREVGQVVMVCkgfAorCQkJICAgICBUWF9NT0RRX1dFSUdIVDNfVihUNF9UWF9NT0RRXzEwR19XRUlHSFRfREVGQVVMVCkpOwogCX0KIAogCS8qIGdldCBiYXNpYyBzdHVmZiBnb2luZyAqLwpAQCAtNTAxMywxNiArNDgxOCwxNiBAQAogCQkJcnhfZG1hX29mZnNldCk7CiAJCXJ4X2RtYV9vZmZzZXQgPSAyOwogCX0KLQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsIFNHRV9DT05UUk9MLAotCQkJIFBLVFNISUZUX01BU0ssCi0JCQkgUEtUU0hJRlQocnhfZG1hX29mZnNldCkpOworCXQ0X3NldF9yZWdfZmllbGQoYWRhcHRlciwgU0dFX0NPTlRST0xfQSwKKwkJCSBQS1RTSElGVF9WKFBLVFNISUZUX00pLAorCQkJIFBLVFNISUZUX1YocnhfZG1hX29mZnNldCkpOwogCiAJLyoKIAkgKiBEb24ndCBpbmNsdWRlIHRoZSAiSVAgUHNldWRvIEhlYWRlciIgaW4gQ1BMX1JYX1BLVCBjaGVja3N1bXM6IExpbnV4CiAJICogYWRkcyB0aGUgcHNldWRvIGhlYWRlciBpdHNlbGYuCiAJICovCi0JdDRfdHBfd3JfYml0c19pbmRpcmVjdChhZGFwdGVyLCBUUF9JTkdSRVNTX0NPTkZJRywKLQkJCSAgICAgICBDU1VNX0hBU19QU0VVRE9fSERSLCAwKTsKKwl0NF90cF93cl9iaXRzX2luZGlyZWN0KGFkYXB0ZXIsIFRQX0lOR1JFU1NfQ09ORklHX0EsCisJCQkgICAgICAgQ1NVTV9IQVNfUFNFVURPX0hEUl9GLCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTA0Niw3ICs0ODUxLDcgQEAKIAkgKi8KIAlpZiAocmVzZXQpIHsKIAkJcmV0ID0gdDRfZndfcmVzZXQoYWRhcHRlciwgYWRhcHRlci0+bWJveCwKLQkJCQkgIFBJT1JTVE1PREUgfCBQSU9SU1QpOworCQkJCSAgUElPUlNUTU9ERV9GIHwgUElPUlNUX0YpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gYnllOwogCX0KQEAgLTUyMTIsMTIgKzUwMTcsOSBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGJ5ZTsKIAotCS8qCi0JICogUmV0dXJuIHN1Y2Nlc3NmdWxseSBhbmQgbm90ZSB0aGF0IHdlJ3JlIG9wZXJhdGluZyB3aXRoIHBhcmFtZXRlcnMKLQkgKiBub3Qgc3VwcGxpZWQgYnkgdGhlIGRyaXZlciwgcmF0aGVyIHRoYW4gZnJvbSBoYXJkLXdpcmVkCi0JICogaW5pdGlhbGl6YXRpb24gY29uc3RhbnRzIGJ1cnJpZWQgaW4gdGhlIGRyaXZlci4KKwkvKiBFbWl0IEZpcm13YXJlIENvbmZpZ3VyYXRpb24gRmlsZSBpbmZvcm1hdGlvbiBhbmQgcmV0dXJuCisJICogc3VjY2Vzc2Z1bGx5LgogCSAqLwotCWFkYXB0ZXItPmZsYWdzIHw9IFVTSU5HX1NPRlRfUEFSQU1TOwogCWRldl9pbmZvKGFkYXB0ZXItPnBkZXZfZGV2LCAiU3VjY2Vzc2Z1bGx5IGNvbmZpZ3VyZWQgdXNpbmcgRmlybXdhcmUgIlwKIAkJICJDb25maWd1cmF0aW9uIEZpbGUgXCIlc1wiLCB2ZXJzaW9uICUjeCwgY29tcHV0ZWQgY2hlY2tzdW0gJSN4XG4iLAogCQkgY29uZmlnX25hbWUsIGZpbml2ZXIsIGNmY3N1bSk7CkBAIC01MjM1LDI0OSArNTAzNyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIEF0dGVtcHQgdG8gaW5pdGlhbGl6ZSB0aGUgYWRhcHRlciB2aWEgaGFyZC1jb2RlZCwgZHJpdmVyIHN1cHBsaWVkCi0gKiBwYXJhbWV0ZXJzIC4uLgotICovCi1zdGF0aWMgaW50IGFkYXBfaW5pdDBfbm9fY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCBpbnQgcmVzZXQpCi17Ci0Jc3RydWN0IHNnZSAqcyA9ICZhZGFwdGVyLT5zZ2U7Ci0Jc3RydWN0IGZ3X2NhcHNfY29uZmlnX2NtZCBjYXBzX2NtZDsKLQl1MzIgdjsKLQlpbnQgaSwgcmV0OwotCi0JLyoKLQkgKiBSZXNldCBkZXZpY2UgaWYgbmVjZXNzYXJ5Ci0JICovCi0JaWYgKHJlc2V0KSB7Ci0JCXJldCA9IHQ0X2Z3X3Jlc2V0KGFkYXB0ZXIsIGFkYXB0ZXItPm1ib3gsCi0JCQkJICBQSU9SU1RNT0RFIHwgUElPUlNUKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGJ5ZTsKLQl9Ci0KLQkvKgotCSAqIEdldCBkZXZpY2UgY2FwYWJpbGl0aWVzIGFuZCBzZWxlY3Qgd2hpY2ggd2UnbGwgYmUgdXNpbmcuCi0JICovCi0JbWVtc2V0KCZjYXBzX2NtZCwgMCwgc2l6ZW9mKGNhcHNfY21kKSk7Ci0JY2Fwc19jbWQub3BfdG9fd3JpdGUgPSBodG9ubChGV19DTURfT1BfVihGV19DQVBTX0NPTkZJR19DTUQpIHwKLQkJCQkgICAgIEZXX0NNRF9SRVFVRVNUX0YgfCBGV19DTURfUkVBRF9GKTsKLQljYXBzX2NtZC5jZnZhbGlkX3RvX2xlbjE2ID0gaHRvbmwoRldfTEVOMTYoY2Fwc19jbWQpKTsKLQlyZXQgPSB0NF93cl9tYm94KGFkYXB0ZXIsIGFkYXB0ZXItPm1ib3gsICZjYXBzX2NtZCwgc2l6ZW9mKGNhcHNfY21kKSwKLQkJCSAmY2Fwc19jbWQpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGJ5ZTsKLQotCWlmIChjYXBzX2NtZC5uaWNjYXBzICYgaHRvbnMoRldfQ0FQU19DT05GSUdfTklDX1ZNKSkgewotCQlpZiAoIXZmX2FjbHMpCi0JCQljYXBzX2NtZC5uaWNjYXBzIF49IGh0b25zKEZXX0NBUFNfQ09ORklHX05JQ19WTSk7Ci0JCWVsc2UKLQkJCWNhcHNfY21kLm5pY2NhcHMgPSBodG9ucyhGV19DQVBTX0NPTkZJR19OSUNfVk0pOwotCX0gZWxzZSBpZiAodmZfYWNscykgewotCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LCAidmlydHVhbGl6YXRpb24gQUNMcyBub3Qgc3VwcG9ydGVkIik7Ci0JCWdvdG8gYnllOwotCX0KLQljYXBzX2NtZC5vcF90b193cml0ZSA9IGh0b25sKEZXX0NNRF9PUF9WKEZXX0NBUFNfQ09ORklHX0NNRCkgfAotCQkJICAgICAgRldfQ01EX1JFUVVFU1RfRiB8IEZXX0NNRF9XUklURV9GKTsKLQlyZXQgPSB0NF93cl9tYm94KGFkYXB0ZXIsIGFkYXB0ZXItPm1ib3gsICZjYXBzX2NtZCwgc2l6ZW9mKGNhcHNfY21kKSwKLQkJCSBOVUxMKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBieWU7Ci0KLQkvKgotCSAqIFR3ZWFrIGNvbmZpZ3VyYXRpb24gYmFzZWQgb24gc3lzdGVtIGFyY2hpdGVjdHVyZSwgbW9kdWxlCi0JICogcGFyYW1ldGVycywgZXRjLgotCSAqLwotCXJldCA9IGFkYXBfaW5pdDBfdHdlYWtzKGFkYXB0ZXIpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGJ5ZTsKLQotCS8qCi0JICogU2VsZWN0IFJTUyBHbG9iYWwgTW9kZSB3ZSB3YW50IHRvIHVzZS4gIFdlIHVzZSAiQmFzaWMgVmlydHVhbCIKLQkgKiBtb2RlIHdoaWNoIG1hcHMgZWFjaCBWaXJ0dWFsIEludGVyZmFjZSB0byBpdHMgb3duIHNlY3Rpb24gb2YKLQkgKiB0aGUgUlNTIFRhYmxlIGFuZCB3ZSB0dXJuIG9uIGFsbCBtYXAgYW5kIGhhc2ggZW5hYmxlcyAuLi4KLQkgKi8KLQlhZGFwdGVyLT5mbGFncyB8PSBSU1NfVE5MQUxMTE9PS1VQOwotCXJldCA9IHQ0X2NvbmZpZ19nbGJsX3JzcyhhZGFwdGVyLCBhZGFwdGVyLT5tYm94LAotCQkJCSBGV19SU1NfR0xCX0NPTkZJR19DTURfTU9ERV9CQVNJQ1ZJUlRVQUwsCi0JCQkJIEZXX1JTU19HTEJfQ09ORklHX0NNRF9UTkxNQVBFTl9GIHwKLQkJCQkgRldfUlNTX0dMQl9DT05GSUdfQ01EX0hBU0hUT0VQTElUWl9GIHwKLQkJCQkgKChhZGFwdGVyLT5mbGFncyAmIFJTU19UTkxBTExMT09LVVApID8KLQkJCQkJRldfUlNTX0dMQl9DT05GSUdfQ01EX1ROTEFMTExLUF9GIDogMCkpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGJ5ZTsKLQotCS8qCi0JICogU2V0IHVwIG91ciBvd24gZnVuZGFtZW50YWwgcmVzb3VyY2UgcHJvdmlzaW9uaW5nIC4uLgotCSAqLwotCXJldCA9IHQ0X2NmZ19wZnZmKGFkYXB0ZXIsIGFkYXB0ZXItPm1ib3gsIGFkYXB0ZXItPmZuLCAwLAotCQkJICBQRlJFU19ORVEsIFBGUkVTX05FVEhDVFJMLAotCQkJICBQRlJFU19OSVFGTElOVCwgUEZSRVNfTklRLAotCQkJICBQRlJFU19UQywgUEZSRVNfTlZJLAotCQkJICBGV19QRlZGX0NNRF9DTUFTS19NLAotCQkJICBwZnZmcmVzX3BtYXNrKGFkYXB0ZXIsIGFkYXB0ZXItPmZuLCAwKSwKLQkJCSAgUEZSRVNfTkVYQUNURiwKLQkJCSAgUEZSRVNfUl9DQVBTLCBQRlJFU19XWF9DQVBTKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBieWU7Ci0KLQkvKgotCSAqIFBlcmZvcm0gbG93IGxldmVsIFNHRSBpbml0aWFsaXphdGlvbi4gIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWZvcmUgd2UKLQkgKiBzZW5kIHRoZSBmaXJtd2FyZSB0aGUgSU5JVElBTElaRSBjb21tYW5kIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlCi0JICogYW55IG90aGVyIFBGIERyaXZlcnMgd2hpY2ggYXJlIHdhaXRpbmcgZm9yIHRoZSBNYXN0ZXIKLQkgKiBJbml0aWFsaXphdGlvbiB0byBwcm9jZWVkIGZvcndhcmQuCi0JICovCi0JZm9yIChpID0gMDsgaSA8IFNHRV9OVElNRVJTIC0gMTsgaSsrKQotCQlzLT50aW1lcl92YWxbaV0gPSBtaW4oaW50cl9ob2xkb2ZmW2ldLCBNQVhfU0dFX1RJTUVSVkFMKTsKLQlzLT50aW1lcl92YWxbU0dFX05USU1FUlMgLSAxXSA9IE1BWF9TR0VfVElNRVJWQUw7Ci0Jcy0+Y291bnRlcl92YWxbMF0gPSAxOwotCWZvciAoaSA9IDE7IGkgPCBTR0VfTkNPVU5URVJTOyBpKyspCi0JCXMtPmNvdW50ZXJfdmFsW2ldID0gbWluKGludHJfY250W2kgLSAxXSwKLQkJCQkJVEhSRVNIT0xEXzBfR0VUKFRIUkVTSE9MRF8wX01BU0spKTsKLQl0NF9zZ2VfaW5pdChhZGFwdGVyKTsKLQotI2lmZGVmIENPTkZJR19QQ0lfSU9WCi0JLyoKLQkgKiBQcm92aXNpb24gcmVzb3VyY2UgbGltaXRzIGZvciBWaXJ0dWFsIEZ1bmN0aW9ucy4gIFdlIGN1cnJlbnRseQotCSAqIGdyYW50IHRoZW0gYWxsIHRoZSBzYW1lIHN0YXRpYyByZXNvdXJjZSBsaW1pdHMgZXhjZXB0IGZvciB0aGUgUG9ydAotCSAqIEFjY2VzcyBSaWdodHMgTWFzayB3aGljaCB3ZSdyZSBhc3NpZ25pbmcgYmFzZWQgb24gdGhlIFBGLiAgQWxsIG9mCi0JICogdGhlIHN0YXRpYyBwcm92aXNpb25pbmcgc3R1ZmYgZm9yIGJvdGggdGhlIFBGIGFuZCBWRiByZWFsbHkgbmVlZHMKLQkgKiB0byBiZSBtYW5hZ2VkIGluIGEgcGVyc2lzdGVudCBtYW5uZXIgZm9yIGVhY2ggZGV2aWNlIHdoaWNoIHRoZQotCSAqIGZpcm13YXJlIGNvbnRyb2xzLgotCSAqLwotCXsKLQkJaW50IHBmLCB2ZjsKLQotCQlmb3IgKHBmID0gMDsgcGYgPCBBUlJBWV9TSVpFKG51bV92Zik7IHBmKyspIHsKLQkJCWlmIChudW1fdmZbcGZdIDw9IDApCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIFZGIG51bWJlcmluZyBzdGFydHMgYXQgMSEgKi8KLQkJCWZvciAodmYgPSAxOyB2ZiA8PSBudW1fdmZbcGZdOyB2ZisrKSB7Ci0JCQkJcmV0ID0gdDRfY2ZnX3BmdmYoYWRhcHRlciwgYWRhcHRlci0+bWJveCwKLQkJCQkJCSAgcGYsIHZmLAotCQkJCQkJICBWRlJFU19ORVEsIFZGUkVTX05FVEhDVFJMLAotCQkJCQkJICBWRlJFU19OSVFGTElOVCwgVkZSRVNfTklRLAotCQkJCQkJICBWRlJFU19UQywgVkZSRVNfTlZJLAotCQkJCQkJICBGV19QRlZGX0NNRF9DTUFTS19NLAotCQkJCQkJICBwZnZmcmVzX3BtYXNrKAotCQkJCQkJICBhZGFwdGVyLCBwZiwgdmYpLAotCQkJCQkJICBWRlJFU19ORVhBQ1RGLAotCQkJCQkJICBWRlJFU19SX0NBUFMsIFZGUkVTX1dYX0NBUFMpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlkZXZfd2FybihhZGFwdGVyLT5wZGV2X2RldiwKLQkJCQkJCSAiZmFpbGVkIHRvICJcCi0JCQkJCQkgInByb3Zpc2lvbiBwZi92Zj0lZC8lZDsgIgotCQkJCQkJICJlcnI9JWRcbiIsIHBmLCB2ZiwgcmV0KTsKLQkJCX0KLQkJfQotCX0KLSNlbmRpZgotCi0JLyoKLQkgKiBTZXQgdXAgdGhlIGRlZmF1bHQgZmlsdGVyIG1vZGUuICBMYXRlciB3ZSdsbCB3YW50IHRvIGltcGxlbWVudCB0aGlzCi0JICogdmlhIGEgZmlybXdhcmUgY29tbWFuZCwgZXRjLiAuLi4gIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgdGhlCi0JICogZmlybWFyZSBpbml0aWFsaXphdGlvbiBjb21tYW5kIC4uLiAgSWYgdGhlIHNlbGVjdGVkIHNldCBvZiBmaWVsZHMKLQkgKiBpc24ndCBlcXVhbCB0byB0aGUgZGVmYXVsdCB2YWx1ZSwgd2UnbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUKLQkgKiBmaWVsZCBzZWxlY3Rpb25zIHdpbGwgZml0IGluIHRoZSAzNi1iaXQgYnVkZ2V0LgotCSAqLwotCWlmICh0cF92bGFuX3ByaV9tYXAgIT0gVFBfVkxBTl9QUklfTUFQX0RFRkFVTFQpIHsKLQkJaW50IGosIGJpdHMgPSAwOwotCi0JCWZvciAoaiA9IFRQX1ZMQU5fUFJJX01BUF9GSVJTVDsgaiA8PSBUUF9WTEFOX1BSSV9NQVBfTEFTVDsgaisrKQotCQkJc3dpdGNoICh0cF92bGFuX3ByaV9tYXAgJiAoMSA8PCBqKSkgewotCQkJY2FzZSAwOgotCQkJCS8qIGNvbXByZXNzZWQgZmlsdGVyIGZpZWxkIG5vdCBlbmFibGVkICovCi0JCQkJYnJlYWs7Ci0JCQljYXNlIEZDT0VfTUFTSzoKLQkJCQliaXRzICs9ICAxOwotCQkJCWJyZWFrOwotCQkJY2FzZSBQT1JUX01BU0s6Ci0JCQkJYml0cyArPSAgMzsKLQkJCQlicmVhazsKLQkJCWNhc2UgVk5JQ19JRF9NQVNLOgotCQkJCWJpdHMgKz0gMTc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFZMQU5fTUFTSzoKLQkJCQliaXRzICs9IDE3OwotCQkJCWJyZWFrOwotCQkJY2FzZSBUT1NfTUFTSzoKLQkJCQliaXRzICs9ICA4OwotCQkJCWJyZWFrOwotCQkJY2FzZSBQUk9UT0NPTF9NQVNLOgotCQkJCWJpdHMgKz0gIDg7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVUSEVSVFlQRV9NQVNLOgotCQkJCWJpdHMgKz0gMTY7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIE1BQ01BVENIX01BU0s6Ci0JCQkJYml0cyArPSAgOTsKLQkJCQlicmVhazsKLQkJCWNhc2UgTVBTSElUVFlQRV9NQVNLOgotCQkJCWJpdHMgKz0gIDM7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEZSQUdNRU5UQVRJT05fTUFTSzoKLQkJCQliaXRzICs9ICAxOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCWlmIChiaXRzID4gMzYpIHsKLQkJCWRldl9lcnIoYWRhcHRlci0+cGRldl9kZXYsCi0JCQkJInRwX3ZsYW5fcHJpX21hcD0lI3ggbmVlZHMgJWQgYml0cyA+IDM2OyJcCi0JCQkJIiB1c2luZyAlI3hcbiIsIHRwX3ZsYW5fcHJpX21hcCwgYml0cywKLQkJCQlUUF9WTEFOX1BSSV9NQVBfREVGQVVMVCk7Ci0JCQl0cF92bGFuX3ByaV9tYXAgPSBUUF9WTEFOX1BSSV9NQVBfREVGQVVMVDsKLQkJfQotCX0KLQl2ID0gdHBfdmxhbl9wcmlfbWFwOwotCXQ0X3dyaXRlX2luZGlyZWN0KGFkYXB0ZXIsIFRQX1BJT19BRERSLCBUUF9QSU9fREFUQSwKLQkJCSAgJnYsIDEsIFRQX1ZMQU5fUFJJX01BUCk7Ci0KLQkvKgotCSAqIFdlIG5lZWQgRml2ZSBUdXBsZSBMb29rdXAgbW9kZSB0byBiZSBzZXQgaW4gVFBfR0xPQkFMX0NPTkZJRyBvcmRlcgotCSAqIHRvIHN1cHBvcnQgYW55IG9mIHRoZSBjb21wcmVzc2VkIGZpbHRlciBmaWVsZHMgYWJvdmUuICBOZXdlcgotCSAqIHZlcnNpb25zIG9mIHRoZSBmaXJtd2FyZSBkbyB0aGlzIGF1dG9tYXRpY2FsbHkgYnV0IGl0IGRvZXNuJ3QgaHVydAotCSAqIHRvIHNldCBpdCBoZXJlLiAgTWVhbndoaWxlLCB3ZSBkbyBfbm90XyBuZWVkIHRvIHNldCBMb29rdXAgRXZlcnkKLQkgKiBQYWNrZXQgaW4gVFBfSU5HUkVTU19DT05GSUcgdG8gc3VwcG9ydCBtYXRjaGluZyBub24tVENQIHBhY2tldHMKLQkgKiBzaW5jZSB0aGUgZmlybXdhcmUgYXV0b21hdGljYWxseSB0dXJucyB0aGlzIG9uIGFuZCBvZmYgd2hlbiB3ZSBoYXZlCi0JICogYSBub24temVybyBudW1iZXIgb2YgZmlsdGVycyBhY3RpdmUgKHNpbmNlIGl0IGRvZXMgaGF2ZSBhCi0JICogcGVyZm9ybWFuY2UgaW1wYWN0KS4KLQkgKi8KLQlpZiAodHBfdmxhbl9wcmlfbWFwKQotCQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsIFRQX0dMT0JBTF9DT05GSUcsCi0JCQkJIEZJVkVUVVBMRUxPT0tVUF9NQVNLLAotCQkJCSBGSVZFVFVQTEVMT09LVVBfTUFTSyk7Ci0KLQkvKgotCSAqIFR3ZWFrIHNvbWUgc2V0dGluZ3MuCi0JICovCi0JdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIFRQX1NISUZUX0NOVCwgU1lOU0hJRlRNQVgoNikgfAotCQkgICAgIFJYVFNISUZUTUFYUjEoNCkgfCBSWFRTSElGVE1BWFIyKDE1KSB8Ci0JCSAgICAgUEVSU0hJRlRCQUNLT0ZGTUFYKDgpIHwgUEVSU0hJRlRNQVgoOCkgfAotCQkgICAgIEtFRVBBTElWRU1BWFIxKDQpIHwgS0VFUEFMSVZFTUFYUjIoOSkpOwotCi0JLyoKLQkgKiBHZXQgYmFzaWMgc3R1ZmYgZ29pbmcgYnkgaXNzdWluZyB0aGUgRmlybXdhcmUgSW5pdGlhbGl6ZSBjb21tYW5kLgotCSAqIE5vdGUgdGhhdCB0aGlzIF9tdXN0XyBiZSBhZnRlciBhbGwgUEZWRiBjb21tYW5kcyAuLi4KLQkgKi8KLQlyZXQgPSB0NF9md19pbml0aWFsaXplKGFkYXB0ZXIsIGFkYXB0ZXItPm1ib3gpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGJ5ZTsKLQotCS8qCi0JICogUmV0dXJuIHN1Y2Nlc3NmdWxseSEKLQkgKi8KLQlkZXZfaW5mbyhhZGFwdGVyLT5wZGV2X2RldiwgIlN1Y2Nlc3NmdWxseSBjb25maWd1cmVkIHVzaW5nIGJ1aWx0LWluICJcCi0JCSAiZHJpdmVyIHBhcmFtZXRlcnNcbiIpOwotCXJldHVybiAwOwotCi0JLyoKLQkgKiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkLiAgUmV0dXJuIHRoZSBlcnJvciAuLi4KLQkgKi8KLWJ5ZToKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgc3RydWN0IGZ3X2luZm8gZndfaW5mb19hcnJheVtdID0gewogCXsKIAkJLmNoaXAgPSBDSEVMU0lPX1Q0LApAQCAtNTUyOSw2ICs1MDg4LDggQEAKIAllbnVtIGRldl9zdGF0ZSBzdGF0ZTsKIAl1MzIgcGFyYW1zWzddLCB2YWxbN107CiAJc3RydWN0IGZ3X2NhcHNfY29uZmlnX2NtZCBjYXBzX2NtZDsKKwlzdHJ1Y3QgZndfZGV2bG9nX2NtZCBkZXZsb2dfY21kOworCXUzMiBkZXZsb2dfbWVtaW5mbzsKIAlpbnQgcmVzZXQgPSAxOwogCiAJLyogQ29udGFjdCBGVywgYWR2ZXJ0aXNpbmcgTWFzdGVyIGNhcGFiaWxpdHkgKi8KQEAgLTU1OTAsOCArNTE1MSw3IEBACiAJCQkJIHN0YXRlLCAmcmVzZXQpOwogCiAJCS8qIENsZWFuaW5nIHVwICovCi0JCWlmIChmdyAhPSBOVUxMKQotCQkJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCQl0NF9mcmVlX21lbShjYXJkX2Z3KTsKIAogCQlpZiAocmV0IDwgMCkKQEAgLTU2MDksNiArNTE2OSwzMCBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIGJ5ZTsKIAorCS8qIFJlYWQgZmlybXdhcmUgZGV2aWNlIGxvZyBwYXJhbWV0ZXJzLiAgV2UgcmVhbGx5IG5lZWQgdG8gZmluZCBhIHdheQorCSAqIHRvIGdldCB0aGVzZSBwYXJhbWV0ZXJzIGluaXRpYWxpemVkIHdpdGggc29tZSBkZWZhdWx0IHZhbHVlcyAod2hpY2gKKwkgKiBhcmUgbGlrZWx5IHRvIGJlIGNvcnJlY3QpIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBlaXRoZXIgZG9uJ3QKKwkgKiBhdHRhY2hlIHRvIHRoZSBmaXJtd2FyZSBvciBpdCdzIGNyYXNoZWQgd2hlbiB3ZSBwcm9iZSB0aGUgYWRhcHRlci4KKwkgKiBUaGF0IHdheSB3ZSdsbCBzdGlsbCBiZSBhYmxlIHRvIHBlcmZvcm0gZWFybHkgZmlybXdhcmUgc3RhcnR1cAorCSAqIGRlYnVnZ2luZyAuLi4gIElmIHRoZSByZXF1ZXN0IHRvIGdldCB0aGUgRmlybXdhcmUncyBEZXZpY2UgTG9nCisJICogcGFyYW1ldGVycyBmYWlscywgd2UnbGwgbGl2ZSBzbyB3ZSBkb24ndCBtYWtlIHRoYXQgYSBmYXRhbCBlcnJvci4KKwkgKi8KKwltZW1zZXQoJmRldmxvZ19jbWQsIDAsIHNpemVvZihkZXZsb2dfY21kKSk7CisJZGV2bG9nX2NtZC5vcF90b193cml0ZSA9IGh0b25sKEZXX0NNRF9PUF9WKEZXX0RFVkxPR19DTUQpIHwKKwkJCQkgICAgICAgRldfQ01EX1JFUVVFU1RfRiB8IEZXX0NNRF9SRUFEX0YpOworCWRldmxvZ19jbWQucmV0dmFsX2xlbjE2ID0gaHRvbmwoRldfTEVOMTYoZGV2bG9nX2NtZCkpOworCXJldCA9IHQ0X3dyX21ib3goYWRhcCwgYWRhcC0+bWJveCwgJmRldmxvZ19jbWQsIHNpemVvZihkZXZsb2dfY21kKSwKKwkJCSAmZGV2bG9nX2NtZCk7CisJaWYgKHJldCA9PSAwKSB7CisJCWRldmxvZ19tZW1pbmZvID0KKwkJCW50b2hsKGRldmxvZ19jbWQubWVtdHlwZV9kZXZsb2dfbWVtYWRkcjE2X2RldmxvZyk7CisJCWFkYXAtPnBhcmFtcy5kZXZsb2cubWVtdHlwZSA9CisJCQlGV19ERVZMT0dfQ01EX01FTVRZUEVfREVWTE9HX0coZGV2bG9nX21lbWluZm8pOworCQlhZGFwLT5wYXJhbXMuZGV2bG9nLnN0YXJ0ID0KKwkJCUZXX0RFVkxPR19DTURfTUVNQUREUjE2X0RFVkxPR19HKGRldmxvZ19tZW1pbmZvKSA8PCA0OworCQlhZGFwLT5wYXJhbXMuZGV2bG9nLnNpemUgPSBudG9obChkZXZsb2dfY21kLm1lbXNpemVfZGV2bG9nKTsKKwl9CisKIAkvKgogCSAqIEZpbmQgb3V0IHdoYXQgcG9ydHMgYXJlIGF2YWlsYWJsZSB0byB1cy4gIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGRvCiAJICogdGhpcyBiZWZvcmUgY2FsbGluZyBhZGFwX2luaXQwX25vX2NvbmZpZygpIHNpbmNlIGl0IG5lZWRzIG5wb3J0cwpAQCAtNTYyNCw4OCArNTIwOCw1OCBAQAogCWFkYXAtPnBhcmFtcy5ucG9ydHMgPSBod2VpZ2h0MzIocG9ydF92ZWMpOwogCWFkYXAtPnBhcmFtcy5wb3J0dmVjID0gcG9ydF92ZWM7CiAKLQkvKgotCSAqIElmIHRoZSBmaXJtd2FyZSBpcyBpbml0aWFsaXplZCBhbHJlYWR5IChhbmQgd2UncmUgbm90IGZvcmNpbmcgYQotCSAqIG1hc3RlciBpbml0aWFsaXphdGlvbiksIG5vdGUgdGhhdCB3ZSdyZSBsaXZpbmcgd2l0aCBleGlzdGluZwotCSAqIGFkYXB0ZXIgcGFyYW1ldGVycy4gIE90aGVyd2lzZSwgaXQncyB0aW1lIHRvIHRyeSBpbml0aWFsaXppbmcgdGhlCi0JICogYWRhcHRlciAuLi4KKwkvKiBJZiB0aGUgZmlybXdhcmUgaXMgaW5pdGlhbGl6ZWQgYWxyZWFkeSwgZW1pdCBhIHNpbXBseSBub3RlIHRvIHRoYXQKKwkgKiBlZmZlY3QuIE90aGVyd2lzZSwgaXQncyB0aW1lIHRvIHRyeSBpbml0aWFsaXppbmcgdGhlIGFkYXB0ZXIuCiAJICovCiAJaWYgKHN0YXRlID09IERFVl9TVEFURV9JTklUKSB7CiAJCWRldl9pbmZvKGFkYXAtPnBkZXZfZGV2LCAiQ29taW5nIHVwIGFzICVzOiAiXAogCQkJICJBZGFwdGVyIGFscmVhZHkgaW5pdGlhbGl6ZWRcbiIsCiAJCQkgYWRhcC0+ZmxhZ3MgJiBNQVNURVJfUEYgPyAiTUFTVEVSIiA6ICJTTEFWRSIpOwotCQlhZGFwLT5mbGFncyB8PSBVU0lOR19TT0ZUX1BBUkFNUzsKIAl9IGVsc2UgewogCQlkZXZfaW5mbyhhZGFwLT5wZGV2X2RldiwgIkNvbWluZyB1cCBhcyBNQVNURVI6ICJcCiAJCQkgIkluaXRpYWxpemluZyBhZGFwdGVyXG4iKTsKLQkJLyoKLQkJICogSWYgdGhlIGZpcm13YXJlIGRvZXNuJ3Qgc3VwcG9ydCBDb25maWd1cmF0aW9uCi0JCSAqIEZpbGVzIHdhcm4gdXNlciBhbmQgZXhpdCwKKworCQkvKiBGaW5kIG91dCB3aGV0aGVyIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHZlcnNpb24gb2YgdGhlCisJCSAqIGZpcm13YXJlIHdoaWNoIGhhcyBjb25maWd1cmF0aW9uIGZpbGUgc3VwcG9ydC4KIAkJICovCi0JCWlmIChyZXQgPCAwKQotCQkJZGV2X3dhcm4oYWRhcC0+cGRldl9kZXYsICJGaXJtd2FyZSBkb2Vzbid0IHN1cHBvcnQgIgotCQkJCSAiY29uZmlndXJhdGlvbiBmaWxlLlxuIik7Ci0JCWlmIChmb3JjZV9vbGRfaW5pdCkKLQkJCXJldCA9IGFkYXBfaW5pdDBfbm9fY29uZmlnKGFkYXAsIHJlc2V0KTsKLQkJZWxzZSB7Ci0JCQkvKgotCQkJICogRmluZCBvdXQgd2hldGhlciB3ZSdyZSBkZWFsaW5nIHdpdGggYSB2ZXJzaW9uIG9mCi0JCQkgKiB0aGUgZmlybXdhcmUgd2hpY2ggaGFzIGNvbmZpZ3VyYXRpb24gZmlsZSBzdXBwb3J0LgotCQkJICovCi0JCQlwYXJhbXNbMF0gPSAoRldfUEFSQU1TX01ORU1fVihGV19QQVJBTVNfTU5FTV9ERVYpIHwKLQkJCQkgICAgIEZXX1BBUkFNU19QQVJBTV9YX1YoCi0JCQkJCSAgICAgRldfUEFSQU1TX1BBUkFNX0RFVl9DRikpOwotCQkJcmV0ID0gdDRfcXVlcnlfcGFyYW1zKGFkYXAsIGFkYXAtPm1ib3gsIGFkYXAtPmZuLCAwLCAxLAotCQkJCQkgICAgICBwYXJhbXMsIHZhbCk7CisJCXBhcmFtc1swXSA9IChGV19QQVJBTVNfTU5FTV9WKEZXX1BBUkFNU19NTkVNX0RFVikgfAorCQkJICAgICBGV19QQVJBTVNfUEFSQU1fWF9WKEZXX1BBUkFNU19QQVJBTV9ERVZfQ0YpKTsKKwkJcmV0ID0gdDRfcXVlcnlfcGFyYW1zKGFkYXAsIGFkYXAtPm1ib3gsIGFkYXAtPmZuLCAwLCAxLAorCQkJCSAgICAgIHBhcmFtcywgdmFsKTsKIAotCQkJLyoKLQkJCSAqIElmIHRoZSBmaXJtd2FyZSBkb2Vzbid0IHN1cHBvcnQgQ29uZmlndXJhdGlvbgotCQkJICogRmlsZXMsIHVzZSB0aGUgb2xkIERyaXZlci1iYXNlZCwgaGFyZC13aXJlZAotCQkJICogaW5pdGlhbGl6YXRpb24uICBPdGhlcndpc2UsIHRyeSB1c2luZyB0aGUKLQkJCSAqIENvbmZpZ3VyYXRpb24gRmlsZSBzdXBwb3J0IGFuZCBmYWxsIGJhY2sgdG8gdGhlCi0JCQkgKiBEcml2ZXItYmFzZWQgaW5pdGlhbGl6YXRpb24gaWYgdGhlcmUncyBubwotCQkJICogQ29uZmlndXJhdGlvbiBGaWxlIGZvdW5kLgotCQkJICovCi0JCQlpZiAocmV0IDwgMCkKLQkJCQlyZXQgPSBhZGFwX2luaXQwX25vX2NvbmZpZyhhZGFwLCByZXNldCk7Ci0JCQllbHNlIHsKLQkJCQkvKgotCQkJCSAqIFRoZSBmaXJtd2FyZSBwcm92aWRlcyB1cyB3aXRoIGEgbWVtb3J5Ci0JCQkJICogYnVmZmVyIHdoZXJlIHdlIGNhbiBsb2FkIGEgQ29uZmlndXJhdGlvbgotCQkJCSAqIEZpbGUgZnJvbSB0aGUgaG9zdCBpZiB3ZSB3YW50IHRvIG92ZXJyaWRlCi0JCQkJICogdGhlIENvbmZpZ3VyYXRpb24gRmlsZSBpbiBmbGFzaC4KLQkJCQkgKi8KKwkJLyogSWYgdGhlIGZpcm13YXJlIGRvZXNuJ3Qgc3VwcG9ydCBDb25maWd1cmF0aW9uIEZpbGVzLAorCQkgKiByZXR1cm4gYW4gZXJyb3IuCisJCSAqLworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihhZGFwLT5wZGV2X2RldiwgImZpcm13YXJlIGRvZXNuJ3Qgc3VwcG9ydCAiCisJCQkJIkZpcm13YXJlIENvbmZpZ3VyYXRpb24gRmlsZXNcbiIpOworCQkJZ290byBieWU7CisJCX0KIAotCQkJCXJldCA9IGFkYXBfaW5pdDBfY29uZmlnKGFkYXAsIHJlc2V0KTsKLQkJCQlpZiAocmV0ID09IC1FTk9FTlQpIHsKLQkJCQkJZGV2X2luZm8oYWRhcC0+cGRldl9kZXYsCi0JCQkJCSAgICAiTm8gQ29uZmlndXJhdGlvbiBGaWxlIHByZXNlbnQgIgotCQkJCQkgICAgIm9uIGFkYXB0ZXIuIFVzaW5nIGhhcmQtd2lyZWQgIgotCQkJCQkgICAgImNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy5cbiIpOwotCQkJCQlyZXQgPSBhZGFwX2luaXQwX25vX2NvbmZpZyhhZGFwLCByZXNldCk7Ci0JCQkJfQotCQkJfQorCQkvKiBUaGUgZmlybXdhcmUgcHJvdmlkZXMgdXMgd2l0aCBhIG1lbW9yeSBidWZmZXIgd2hlcmUgd2UgY2FuCisJCSAqIGxvYWQgYSBDb25maWd1cmF0aW9uIEZpbGUgZnJvbSB0aGUgaG9zdCBpZiB3ZSB3YW50IHRvCisJCSAqIG92ZXJyaWRlIHRoZSBDb25maWd1cmF0aW9uIEZpbGUgaW4gZmxhc2guCisJCSAqLworCQlyZXQgPSBhZGFwX2luaXQwX2NvbmZpZyhhZGFwLCByZXNldCk7CisJCWlmIChyZXQgPT0gLUVOT0VOVCkgeworCQkJZGV2X2VycihhZGFwLT5wZGV2X2RldiwgIm5vIENvbmZpZ3VyYXRpb24gRmlsZSAiCisJCQkJInByZXNlbnQgb24gYWRhcHRlci5cbiIpOworCQkJZ290byBieWU7CiAJCX0KIAkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIoYWRhcC0+cGRldl9kZXYsCi0JCQkJImNvdWxkIG5vdCBpbml0aWFsaXplIGFkYXB0ZXIsIGVycm9yICVkXG4iLAotCQkJCS1yZXQpOworCQkJZGV2X2VycihhZGFwLT5wZGV2X2RldiwgImNvdWxkIG5vdCBpbml0aWFsaXplICIKKwkJCQkiYWRhcHRlciwgZXJyb3IgJWRcbiIsIC1yZXQpOwogCQkJZ290byBieWU7CiAJCX0KIAl9CiAKLQkvKgotCSAqIElmIHdlJ3JlIGxpdmluZyB3aXRoIG5vbi1oYXJkLWNvZGVkIHBhcmFtZXRlcnMgKGVpdGhlciBmcm9tIGEKLQkgKiBGaXJtd2FyZSBDb25maWd1cmF0aW9uIEZpbGUgb3IgdmFsdWVzIHByb2dyYW1tZWQgYnkgYSBkaWZmZXJlbnQgUEYKLQkgKiBEcml2ZXIpLCBnaXZlIHRoZSBTR0UgY29kZSBhIGNoYW5jZSB0byBwdWxsIGluIGFueXRoaW5nIHRoYXQgaXQKLQkgKiBuZWVkcyAuLi4gIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIHdlIHJldHJpZXZlIG91ciBWUEQKLQkgKiBwYXJhbWV0ZXJzIGluIG9yZGVyIHRvIGtub3cgaG93IHRvIGNvbnZlcnQgY29yZSB0aWNrcyB0byBzZWNvbmRzLgorCS8qIEdpdmUgdGhlIFNHRSBjb2RlIGEgY2hhbmNlIHRvIHB1bGwgaW4gYW55dGhpbmcgdGhhdCBpdCBuZWVkcyAuLi4KKwkgKiBOb3RlIHRoYXQgdGhpcyBtdXN0IGJlIGNhbGxlZCBhZnRlciB3ZSByZXRyaWV2ZSBvdXIgVlBEIHBhcmFtZXRlcnMKKwkgKiBpbiBvcmRlciB0byBrbm93IGhvdyB0byBjb252ZXJ0IGNvcmUgdGlja3MgdG8gc2Vjb25kcywgZXRjLgogCSAqLwotCWlmIChhZGFwLT5mbGFncyAmIFVTSU5HX1NPRlRfUEFSQU1TKSB7Ci0JCXJldCA9IHQ0X3NnZV9pbml0KGFkYXApOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gYnllOwotCX0KKwlyZXQgPSB0NF9zZ2VfaW5pdChhZGFwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBieWU7CiAKIAlpZiAoaXNfYnlwYXNzX2RldmljZShhZGFwLT5wZGV2LT5kZXZpY2UpKQogCQlhZGFwLT5wYXJhbXMuYnlwYXNzID0gMTsKQEAgLTU3MzksNiArNTI5MywxNCBAQAogCWFkYXAtPnRpZHMubmZ0aWRzID0gdmFsWzRdIC0gdmFsWzNdICsgMTsKIAlhZGFwLT5zZ2UuaW5ncl9zdGFydCA9IHZhbFs1XTsKIAorCXBhcmFtc1swXSA9IEZXX1BBUkFNX1BGVkYoQ0xJUF9TVEFSVCk7CisJcGFyYW1zWzFdID0gRldfUEFSQU1fUEZWRihDTElQX0VORCk7CisJcmV0ID0gdDRfcXVlcnlfcGFyYW1zKGFkYXAsIGFkYXAtPm1ib3gsIGFkYXAtPmZuLCAwLCAyLCBwYXJhbXMsIHZhbCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gYnllOworCWFkYXAtPmNsaXB0X3N0YXJ0ID0gdmFsWzBdOworCWFkYXAtPmNsaXB0X2VuZCA9IHZhbFsxXTsKKwogCS8qIHF1ZXJ5IHBhcmFtcyByZWxhdGVkIHRvIGFjdGl2ZSBmaWx0ZXIgcmVnaW9uICovCiAJcGFyYW1zWzBdID0gRldfUEFSQU1fUEZWRihBQ1RJVkVfRklMVEVSX1NUQVJUKTsKIAlwYXJhbXNbMV0gPSBGV19QQVJBTV9QRlZGKEFDVElWRV9GSUxURVJfRU5EKTsKQEAgLTY0MDEsNyArNTk2Myw3IEBACiAJCWdvdG8gb3V0X3VubWFwX2JhcjA7CiAKIAkvKiBXZSBjb250cm9sIGV2ZXJ5dGhpbmcgdGhyb3VnaCBvbmUgUEYgKi8KLQlmdW5jID0gU09VUkNFUEZfR0VUKHJlYWRsKHJlZ3MgKyBQTF9XSE9BTUkpKTsKKwlmdW5jID0gU09VUkNFUEZfRyhyZWFkbChyZWdzICsgUExfV0hPQU1JX0EpKTsKIAlpZiAoZnVuYyAhPSBlbnQtPmRyaXZlcl9kYXRhKSB7CiAJCWlvdW5tYXAocmVncyk7CiAJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKQEAgLTY0NjcsOSArNjAyOSwxMSBAQAogCiAKIAlpZiAoIWlzX3Q0KGFkYXB0ZXItPnBhcmFtcy5jaGlwKSkgewotCQlzX3FwcCA9IFFVRVVFU1BFUlBBR0VQRjEgKiBhZGFwdGVyLT5mbjsKLQkJcXBwID0gMSA8PCBRVUVVRVNQRVJQQUdFUEYwX0dFVCh0NF9yZWFkX3JlZyhhZGFwdGVyLAotCQkgICAgICBTR0VfRUdSRVNTX1FVRVVFU19QRVJfUEFHRV9QRikgPj4gc19xcHApOworCQlzX3FwcCA9IChRVUVVRVNQRVJQQUdFUEYwX1MgKworCQkJKFFVRVVFU1BFUlBBR0VQRjFfUyAtIFFVRVVFU1BFUlBBR0VQRjBfUykgKgorCQkJYWRhcHRlci0+Zm4pOworCQlxcHAgPSAxIDw8IFFVRVVFU1BFUlBBR0VQRjBfRyh0NF9yZWFkX3JlZyhhZGFwdGVyLAorCQkgICAgICBTR0VfRUdSRVNTX1FVRVVFU19QRVJfUEFHRV9QRl9BKSA+PiBzX3FwcCk7CiAJCW51bV9zZWcgPSBQQUdFX1NJWkUgLyBTRUdNRU5UX1NJWkU7CiAKIAkJLyogRWFjaCBzZWdtZW50IHNpemUgaXMgMTI4Qi4gV3JpdGUgY29hbGVzY2luZyBpcyBlbmFibGVkIG9ubHkKQEAgLTY1NTcsNiArNjEyMSwxOCBAQAogCQlhZGFwdGVyLT5wYXJhbXMub2ZmbG9hZCA9IDA7CiAJfQogCisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKKwlhZGFwdGVyLT5jbGlwdCA9IHQ0X2luaXRfY2xpcF90YmwoYWRhcHRlci0+Y2xpcHRfc3RhcnQsCisJCQkJCSAgYWRhcHRlci0+Y2xpcHRfZW5kKTsKKwlpZiAoIWFkYXB0ZXItPmNsaXB0KSB7CisJCS8qIFdlIHRvbGVyYXRlIGEgbGFjayBvZiBjbGlwX3RhYmxlLCBnaXZpbmcgdXAKKwkJICogc29tZSBmdW5jdGlvbmFsaXR5CisJCSAqLworCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJICJjb3VsZCBub3QgYWxsb2NhdGUgQ2xpcCB0YWJsZSwgY29udGludWluZ1xuIik7CisJCWFkYXB0ZXItPnBhcmFtcy5vZmZsb2FkID0gMDsKKwl9CisjZW5kaWYKIAlpZiAoaXNfb2ZmbG9hZChhZGFwdGVyKSAmJiB0aWRfaW5pdCgmYWRhcHRlci0+dGlkcykgPCAwKSB7CiAJCWRldl93YXJuKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgVElEIHRhYmxlLCAiCiAJCQkgImNvbnRpbnVpbmdcbiIpOwpAQCAtNjY4Miw2ICs2MjU4LDkgQEAKIAkJCWN4Z2JfZG93bihhZGFwdGVyKTsKIAogCQlmcmVlX3NvbWVfcmVzb3VyY2VzKGFkYXB0ZXIpOworI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCisJCXQ0X2NsZWFudXBfY2xpcF90YmwoYWRhcHRlcik7CisjZW5kaWYKIAkJaW91bm1hcChhZGFwdGVyLT5yZWdzKTsKIAkJaWYgKCFpc190NChhZGFwdGVyLT5wYXJhbXMuY2hpcCkpCiAJCQlpb3VubWFwKGFkYXB0ZXItPmJhcjIpOwpAQCAtNjcyMCw3ICs2Mjk5LDEwIEBACiAJCWRlYnVnZnNfcmVtb3ZlKGN4Z2I0X2RlYnVnZnNfcm9vdCk7CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQotCXJlZ2lzdGVyX2luZXQ2YWRkcl9ub3RpZmllcigmY3hnYjRfaW5ldDZhZGRyX25vdGlmaWVyKTsKKwlpZiAoIWluZXQ2YWRkcl9yZWdpc3RlcmVkKSB7CisJCXJlZ2lzdGVyX2luZXQ2YWRkcl9ub3RpZmllcigmY3hnYjRfaW5ldDZhZGRyX25vdGlmaWVyKTsKKwkJaW5ldDZhZGRyX3JlZ2lzdGVyZWQgPSB0cnVlOworCX0KICNlbmRpZgogCiAJcmV0dXJuIHJldDsKQEAgLTY3MjksNyArNjMxMSwxMCBAQAogc3RhdGljIHZvaWQgX19leGl0IGN4Z2I0X2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKLQl1bnJlZ2lzdGVyX2luZXQ2YWRkcl9ub3RpZmllcigmY3hnYjRfaW5ldDZhZGRyX25vdGlmaWVyKTsKKwlpZiAoaW5ldDZhZGRyX3JlZ2lzdGVyZWQpIHsKKwkJdW5yZWdpc3Rlcl9pbmV0NmFkZHJfbm90aWZpZXIoJmN4Z2I0X2luZXQ2YWRkcl9ub3RpZmllcik7CisJCWluZXQ2YWRkcl9yZWdpc3RlcmVkID0gZmFsc2U7CisJfQogI2VuZGlmCiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjeGdiNF9kcml2ZXIpOwogCWRlYnVnZnNfcmVtb3ZlKGN4Z2I0X2RlYnVnZnNfcm9vdCk7ICAvKiBOVUxMIG9rICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X3VsZC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9jeGdiNF91bGQuaAppbmRleCAxNTJiNGM0Li43OGFiNGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2N4Z2I0X3VsZC5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvY3hnYjRfdWxkLmgKQEAgLTE3Myw5ICsxNzMsNiBAQAogCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgcG9ydCwgdW5zaWduZWQgY2hhciBtYXNrKTsKIGludCBjeGdiNF9yZW1vdmVfc2VydmVyX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgc3RpZCwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgcXVldWUsIGJvb2wgaXB2Nik7Ci1pbnQgY3hnYjRfY2xpcF9nZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICpsaXApOwotaW50IGN4Z2I0X2NsaXBfcmVsZWFzZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpsaXApOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3dyX3R4cShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcHJpbywgaW50IHF1ZXVlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9sMnQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvbDJ0LmMKaW5kZXggYTA0N2JhYS4uMjUyZWZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9sMnQuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L2wydC5jCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAidDRfbXNnLmgiCiAjaW5jbHVkZSAidDRmd19hcGkuaCIKICNpbmNsdWRlICJ0NF9yZWdzLmgiCisjaW5jbHVkZSAidDRfdmFsdWVzLmgiCiAKICNkZWZpbmUgVkxBTl9OT05FIDB4ZmZmCiAKQEAgLTE1MCw4ICsxNTEsOCBAQAogCiAJT1BDT0RFX1RJRChyZXEpID0gaHRvbmwoTUtfT1BDT0RFX1RJRChDUExfTDJUX1dSSVRFX1JFUSwKIAkJCQkJZS0+aWR4IHwgKHN5bmMgPyBGX1NZTkNfV1IgOiAwKSB8Ci0JCQkJCVRJRF9RSUQoYWRhcC0+c2dlLmZ3X2V2dHEuYWJzX2lkKSkpOwotCXJlcS0+cGFyYW1zID0gaHRvbnMoTDJUX1dfUE9SVChlLT5scG9ydCkgfCBMMlRfV19OT1JFUExZKCFzeW5jKSk7CisJCQkJCVRJRF9RSURfVihhZGFwLT5zZ2UuZndfZXZ0cS5hYnNfaWQpKSk7CisJcmVxLT5wYXJhbXMgPSBodG9ucyhMMlRfV19QT1JUX1YoZS0+bHBvcnQpIHwgTDJUX1dfTk9SRVBMWV9WKCFzeW5jKSk7CiAJcmVxLT5sMnRfaWR4ID0gaHRvbnMoZS0+aWR4KTsKIAlyZXEtPnZsYW4gPSBodG9ucyhlLT52bGFuKTsKIAlpZiAoZS0+bmVpZ2ggJiYgIShlLT5uZWlnaC0+ZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSykpCkBAIC00MjUsNyArNDI2LDcgQEAKIAkgKiBpbiB0aGUgQ29tcHJlc3NlZCBGaWx0ZXIgVHVwbGUuCiAJICovCiAJaWYgKHRwLT52bGFuX3NoaWZ0ID49IDAgJiYgbDJ0LT52bGFuICE9IFZMQU5fTk9ORSkKLQkJbnR1cGxlIHw9ICh1NjQpKEZfRlRfVkxBTl9WTEQgfCBsMnQtPnZsYW4pIDw8IHRwLT52bGFuX3NoaWZ0OworCQludHVwbGUgfD0gKHU2NCkoRlRfVkxBTl9WTERfRiB8IGwydC0+dmxhbikgPDwgdHAtPnZsYW5fc2hpZnQ7CiAKIAlpZiAodHAtPnBvcnRfc2hpZnQgPj0gMCkKIAkJbnR1cGxlIHw9ICh1NjQpbDJ0LT5scG9ydCA8PCB0cC0+cG9ydF9zaGlmdDsKQEAgLTQzOSw5ICs0NDAsOSBAQAogCQl1MzIgcGYgPSBGV19WSUlEX1BGTl9HKHZpaWQpOwogCQl1MzIgdmxkID0gRldfVklJRF9WSVZMRF9HKHZpaWQpOwogCi0JCW50dXBsZSB8PSAodTY0KShWX0ZUX1ZOSURfSURfVkYodmYpIHwKLQkJCQlWX0ZUX1ZOSURfSURfUEYocGYpIHwKLQkJCQlWX0ZUX1ZOSURfSURfVkxEKHZsZCkpIDw8IHRwLT52bmljX3NoaWZ0OworCQludHVwbGUgfD0gKHU2NCkoRlRfVk5JRF9JRF9WRl9WKHZmKSB8CisJCQkJRlRfVk5JRF9JRF9QRl9WKHBmKSB8CisJCQkJRlRfVk5JRF9JRF9WTERfVih2bGQpKSA8PCB0cC0+dm5pY19zaGlmdDsKIAl9CiAKIAlyZXR1cm4gbnR1cGxlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9zZ2UuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvc2dlLmMKaW5kZXggZWJmOTM1YS4uYjRiOWY2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L3NnZS5jCkBAIC00Myw4ICs0MywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgorI2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMCisjaW5jbHVkZSA8bmV0L2J1c3lfcG9sbC5oPgorI2VuZGlmIC8qIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMICovCiAjaW5jbHVkZSAiY3hnYjQuaCIKICNpbmNsdWRlICJ0NF9yZWdzLmgiCisjaW5jbHVkZSAidDRfdmFsdWVzLmgiCiAjaW5jbHVkZSAidDRfbXNnLmgiCiAjaW5jbHVkZSAidDRmd19hcGkuaCIKIApAQCAtNTIxLDEwICs1MjUsMTIgQEAKIHsKIAl1MzIgdmFsOwogCWlmIChxLT5wZW5kX2NyZWQgPj0gOCkgewotCQl2YWwgPSBQSURYKHEtPnBlbmRfY3JlZCAvIDgpOwotCQlpZiAoIWlzX3Q0KGFkYXAtPnBhcmFtcy5jaGlwKSkKLQkJCXZhbCB8PSBEQlRZUEUoMSk7Ci0JCXZhbCB8PSBEQlBSSU8oMSk7CisJCWlmIChpc190NChhZGFwLT5wYXJhbXMuY2hpcCkpCisJCQl2YWwgPSBQSURYX1YocS0+cGVuZF9jcmVkIC8gOCk7CisJCWVsc2UKKwkJCXZhbCA9IFBJRFhfVDVfVihxLT5wZW5kX2NyZWQgLyA4KSB8CisJCQkJREJUWVBFX0Y7CisJCXZhbCB8PSBEQlBSSU9fRjsKIAkJd21iKCk7CiAKIAkJLyogSWYgd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIG5ldyBVc2VyIERvb3JiZWxsIChUNSspLCB1c2UKQEAgLTUzMiwxMCArNTM4LDEwIEBACiAJCSAqIG1lY2hhbmlzbS4KIAkJICovCiAJCWlmICh1bmxpa2VseShxLT5iYXIyX2FkZHIgPT0gTlVMTCkpIHsKLQkJCXQ0X3dyaXRlX3JlZyhhZGFwLCBNWVBGX1JFRyhTR0VfUEZfS0RPT1JCRUxMKSwKLQkJCQkgICAgIHZhbCB8IFFJRChxLT5jbnR4dF9pZCkpOworCQkJdDRfd3JpdGVfcmVnKGFkYXAsIE1ZUEZfUkVHKFNHRV9QRl9LRE9PUkJFTExfQSksCisJCQkJICAgICB2YWwgfCBRSURfVihxLT5jbnR4dF9pZCkpOwogCQl9IGVsc2UgewotCQkJd3JpdGVsKHZhbCB8IFFJRChxLT5iYXIyX3FpZCksCisJCQl3cml0ZWwodmFsIHwgUUlEX1YocS0+YmFyMl9xaWQpLAogCQkJICAgICAgIHEtPmJhcjJfYWRkciArIFNHRV9VREJfS0RPT1JCRUxMKTsKIAogCQkJLyogVGhpcyBXcml0ZSBtZW1vcnkgQmFycmllciB3aWxsIGZvcmNlIHRoZSB3cml0ZSB0bwpAQCAtODE4LDcgKzgyNCw4IEBACiAJCXNnbC0+YWRkcjAgPSBjcHVfdG9fYmU2NChhZGRyWzFdKTsKIAl9CiAKLQlzZ2wtPmNtZF9uc2dlID0gaHRvbmwoVUxQVFhfQ01EX1YoVUxQX1RYX1NDX0RTR0wpIHwgVUxQVFhfTlNHRShuZnJhZ3MpKTsKKwlzZ2wtPmNtZF9uc2dlID0gaHRvbmwoVUxQVFhfQ01EX1YoVUxQX1RYX1NDX0RTR0wpIHwKKwkJCSAgICAgIFVMUFRYX05TR0VfVihuZnJhZ3MpKTsKIAlpZiAobGlrZWx5KC0tbmZyYWdzID09IDApKQogCQlyZXR1cm47CiAJLyoKQEAgLTg4NCw3ICs4OTEsNyBAQAogCSAqIGRvb3JiZWxsIG1lY2hhbmlzbTsgb3RoZXJ3aXNlIHVzZSB0aGUgbmV3IEJBUjIgbWVjaGFuaXNtLgogCSAqLwogCWlmICh1bmxpa2VseShxLT5iYXIyX2FkZHIgPT0gTlVMTCkpIHsKLQkJdTMyIHZhbCA9IFBJRFgobik7CisJCXUzMiB2YWwgPSBQSURYX1Yobik7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJLyogRm9yIFQ0IHdlIG5lZWQgdG8gcGFydGljaXBhdGUgaW4gdGhlIERvb3JiZWxsIFJlY292ZXJ5CkBAIC04OTIsMTQgKzg5OSwxNCBAQAogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmRiX2xvY2ssIGZsYWdzKTsKIAkJaWYgKCFxLT5kYl9kaXNhYmxlZCkKLQkJCXQ0X3dyaXRlX3JlZyhhZGFwLCBNWVBGX1JFRyhTR0VfUEZfS0RPT1JCRUxMKSwKLQkJCQkgICAgIFFJRChxLT5jbnR4dF9pZCkgfCB2YWwpOworCQkJdDRfd3JpdGVfcmVnKGFkYXAsIE1ZUEZfUkVHKFNHRV9QRl9LRE9PUkJFTExfQSksCisJCQkJICAgICBRSURfVihxLT5jbnR4dF9pZCkgfCB2YWwpOwogCQllbHNlCiAJCQlxLT5kYl9waWR4X2luYyArPSBuOwogCQlxLT5kYl9waWR4ID0gcS0+cGlkeDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+ZGJfbG9jaywgZmxhZ3MpOwogCX0gZWxzZSB7Ci0JCXUzMiB2YWwgPSBQSURYX1Q1KG4pOworCQl1MzIgdmFsID0gUElEWF9UNV9WKG4pOwogCiAJCS8qIFQ0IGFuZCBsYXRlciBjaGlwcyBzaGFyZSB0aGUgc2FtZSBQSURYIGZpZWxkIG9mZnNldCB3aXRoaW4KIAkJICogdGhlIGRvb3JiZWxsLCBidXQgVDUgYW5kIGxhdGVyIHNocmFuayB0aGUgZmllbGQgaW4gb3JkZXIgdG8KQEAgLTkwNyw3ICs5MTQsNyBAQAogCQkgKiBsYXJnZSBpbiB0aGUgZmlyc3QgcGxhY2UgKDE0IGJpdHMpIHNvIHdlIGp1c3QgdXNlIHRoZSBUNQogCQkgKiBhbmQgbGF0ZXIgbGltaXRzIGFuZCB3YXJuIGlmIGEgUXVldWUgSUQgaXMgdG9vIGxhcmdlLgogCQkgKi8KLQkJV0FSTl9PTih2YWwgJiBEQlBSSU8oMSkpOworCQlXQVJOX09OKHZhbCAmIERCUFJJT19GKTsKIAogCQkvKiBJZiB3ZSdyZSBvbmx5IHdyaXRpbmcgYSBzaW5nbGUgVFggRGVzY3JpcHRvciBhbmQgd2UgY2FuIHVzZQogCQkgKiBJbmZlcnJlZCBRSUQgcmVnaXN0ZXJzLCB3ZSBjYW4gdXNlIHRoZSBXcml0ZSBDb21iaW5pbmcKQEAgLTkyMyw3ICs5MzAsNyBAQAogCQkJCSAgICAgIChxLT5iYXIyX2FkZHIgKyBTR0VfVURCX1dDRE9PUkJFTEwpLAogCQkJCSAgICAgIHdyKTsKIAkJfSBlbHNlIHsKLQkJCXdyaXRlbCh2YWwgfCBRSUQocS0+YmFyMl9xaWQpLAorCQkJd3JpdGVsKHZhbCB8IFFJRF9WKHEtPmJhcjJfcWlkKSwKIAkJCSAgICAgICBxLT5iYXIyX2FkZHIgKyBTR0VfVURCX0tET09SQkVMTCk7CiAJCX0KIApAQCAtMTE1MCw5ICsxMTU3LDkgQEAKIAkJCWNudHJsID0gVFhQS1RfTDRDU1VNX0RJUyB8IFRYUEtUX0lQQ1NVTV9ESVM7CiAJfQogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCXEtPnZsYW5faW5zKys7Ci0JCWNudHJsIHw9IFRYUEtUX1ZMQU5fVkxEIHwgVFhQS1RfVkxBTih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJCWNudHJsIHw9IFRYUEtUX1ZMQU5fVkxEIHwgVFhQS1RfVkxBTihza2Jfdmxhbl90YWdfZ2V0KHNrYikpOwogCX0KIAogCWNwbC0+Y3RybDAgPSBodG9ubChUWFBLVF9PUENPREUoQ1BMX1RYX1BLVF9YVCkgfApAQCAtMTcxNiw2ICsxNzIzLDcgQEAKIAlza2ItPnRydWVzaXplICs9IHNrYi0+ZGF0YV9sZW47CiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAlza2JfcmVjb3JkX3J4X3F1ZXVlKHNrYiwgcnhxLT5yc3BxLmlkeCk7CisJc2tiX21hcmtfbmFwaV9pZChza2IsICZyeHEtPnJzcHEubmFwaSk7CiAJaWYgKHJ4cS0+cnNwcS5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWEhBU0gpCiAJCXNrYl9zZXRfaGFzaChza2IsIChfX2ZvcmNlIHUzMilwa3QtPnJzc2hkci5oYXNoX3ZhbCwKIAkJCSAgICAgUEtUX0hBU0hfVFlQRV9MMyk7CkBAIC0xNzU4LDcgKzE3NjYsOCBAQAogCXBrdCA9IChjb25zdCBzdHJ1Y3QgY3BsX3J4X3BrdCAqKXJzcDsKIAljc3VtX29rID0gcGt0LT5jc3VtX2NhbGMgJiYgIXBrdC0+ZXJyX3ZlYyAmJgogCQkgIChxLT5uZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9SWENTVU0pOwotCWlmICgocGt0LT5sMmluZm8gJiBodG9ubChSWEZfVENQKSkgJiYKKwlpZiAoKHBrdC0+bDJpbmZvICYgaHRvbmwoUlhGX1RDUF9GKSkgJiYKKwkgICAgIShjeGdiX3BvbGxfYnVzeV9wb2xsaW5nKHEpKSAmJgogCSAgICAocS0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfR1JPKSAmJiBjc3VtX29rICYmICFwa3QtPmlwX2ZyYWcpIHsKIAkJZG9fZ3JvKHJ4cSwgc2ksIHBrdCk7CiAJCXJldHVybiAwOwpAQCAtMTc4MCwxMSArMTc4OSwxMSBAQAogCiAJcnhxLT5zdGF0cy5wa3RzKys7CiAKLQlpZiAoY3N1bV9vayAmJiAocGt0LT5sMmluZm8gJiBodG9ubChSWEZfVURQIHwgUlhGX1RDUCkpKSB7CisJaWYgKGNzdW1fb2sgJiYgKHBrdC0+bDJpbmZvICYgaHRvbmwoUlhGX1VEUF9GIHwgUlhGX1RDUF9GKSkpIHsKIAkJaWYgKCFwa3QtPmlwX2ZyYWcpIHsKIAkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAJCQlyeHEtPnN0YXRzLnJ4X2NzbysrOwotCQl9IGVsc2UgaWYgKHBrdC0+bDJpbmZvICYgaHRvbmwoUlhGX0lQKSkgeworCQl9IGVsc2UgaWYgKHBrdC0+bDJpbmZvICYgaHRvbmwoUlhGX0lQX0YpKSB7CiAJCQlfX3N1bTE2IGMgPSAoX19mb3JjZSBfX3N1bTE2KXBrdC0+Y3N1bTsKIAkJCXNrYi0+Y3N1bSA9IGNzdW1fdW5mb2xkKGMpOwogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9DT01QTEVURTsKQEAgLTE3OTcsNiArMTgwNiw3IEBACiAJCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCBodG9ucyhFVEhfUF84MDIxUSksIG50b2hzKHBrdC0+dmxhbikpOwogCQlyeHEtPnN0YXRzLnZsYW5fZXgrKzsKIAl9CisJc2tiX21hcmtfbmFwaV9pZChza2IsICZxLT5uYXBpKTsKIAluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCXJldHVybiAwOwogfQpAQCAtMTk1OSw2ICsxOTY5LDM4IEBACiAJcmV0dXJuIGJ1ZGdldCAtIGJ1ZGdldF9sZWZ0OwogfQogCisjaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTEwKK2ludCBjeGdiX2J1c3lfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCit7CisJc3RydWN0IHNnZV9yc3BxICpxID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBzZ2VfcnNwcSwgbmFwaSk7CisJdW5zaWduZWQgaW50IHBhcmFtcywgd29ya19kb25lOworCXUzMiB2YWw7CisKKwlpZiAoIWN4Z2JfcG9sbF9sb2NrX3BvbGwocSkpCisJCXJldHVybiBMTF9GTFVTSF9CVVNZOworCisJd29ya19kb25lID0gcHJvY2Vzc19yZXNwb25zZXMocSwgNCk7CisJcGFyYW1zID0gUUlOVFJfVElNRVJfSURYKFRJTUVSUkVHX0NPVU5URVIwX1gpIHwgUUlOVFJfQ05UX0VOOworCXEtPm5leHRfaW50cl9wYXJhbXMgPSBwYXJhbXM7CisJdmFsID0gQ0lEWElOQ19WKHdvcmtfZG9uZSkgfCBTRUlOVEFSTV9WKHBhcmFtcyk7CisKKwkvKiBJZiB3ZSBkb24ndCBoYXZlIGFjY2VzcyB0byB0aGUgbmV3IFVzZXIgR1RTIChUNSspLCB1c2UgdGhlIG9sZAorCSAqIGRvb3JiZWxsIG1lY2hhbmlzbTsgb3RoZXJ3aXNlIHVzZSB0aGUgbmV3IEJBUjIgbWVjaGFuaXNtLgorCSAqLworCWlmICh1bmxpa2VseSghcS0+YmFyMl9hZGRyKSkKKwkJdDRfd3JpdGVfcmVnKHEtPmFkYXAsIE1ZUEZfUkVHKFNHRV9QRl9HVFNfQSksCisJCQkgICAgIHZhbCB8IElOR1JFU1NRSURfVigodTMyKXEtPmNudHh0X2lkKSk7CisJZWxzZSB7CisJCXdyaXRlbCh2YWwgfCBJTkdSRVNTUUlEX1YocS0+YmFyMl9xaWQpLAorCQkgICAgICAgcS0+YmFyMl9hZGRyICsgU0dFX1VEQl9HVFMpOworCQl3bWIoKTsKKwl9CisKKwljeGdiX3BvbGxfdW5sb2NrX3BvbGwocSk7CisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKyNlbmRpZiAvKiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTCAqLworCiAvKioKICAqCW5hcGlfcnhfaGFuZGxlciAtIHRoZSBOQVBJIGhhbmRsZXIgZm9yIFJ4IHByb2Nlc3NpbmcKICAqCUBuYXBpOiB0aGUgbmFwaSBpbnN0YW5jZQpAQCAtMTk3NCw5ICsyMDE2LDEzIEBACiB7CiAJdW5zaWduZWQgaW50IHBhcmFtczsKIAlzdHJ1Y3Qgc2dlX3JzcHEgKnEgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IHNnZV9yc3BxLCBuYXBpKTsKLQlpbnQgd29ya19kb25lID0gcHJvY2Vzc19yZXNwb25zZXMocSwgYnVkZ2V0KTsKKwlpbnQgd29ya19kb25lOwogCXUzMiB2YWw7CiAKKwlpZiAoIWN4Z2JfcG9sbF9sb2NrX25hcGkocSkpCisJCXJldHVybiBidWRnZXQ7CisKKwl3b3JrX2RvbmUgPSBwcm9jZXNzX3Jlc3BvbnNlcyhxLCBidWRnZXQpOwogCWlmIChsaWtlbHkod29ya19kb25lIDwgYnVkZ2V0KSkgewogCQlpbnQgdGltZXJfaW5kZXg7CiAKQEAgLTIwMDEsMTkgKzIwNDcsMjAgQEAKIAl9IGVsc2UKIAkJcGFyYW1zID0gUUlOVFJfVElNRVJfSURYKDcpOwogCi0JdmFsID0gQ0lEWElOQyh3b3JrX2RvbmUpIHwgU0VJTlRBUk0ocGFyYW1zKTsKKwl2YWwgPSBDSURYSU5DX1Yod29ya19kb25lKSB8IFNFSU5UQVJNX1YocGFyYW1zKTsKIAogCS8qIElmIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBuZXcgVXNlciBHVFMgKFQ1KyksIHVzZSB0aGUgb2xkCiAJICogZG9vcmJlbGwgbWVjaGFuaXNtOyBvdGhlcndpc2UgdXNlIHRoZSBuZXcgQkFSMiBtZWNoYW5pc20uCiAJICovCiAJaWYgKHVubGlrZWx5KHEtPmJhcjJfYWRkciA9PSBOVUxMKSkgewotCQl0NF93cml0ZV9yZWcocS0+YWRhcCwgTVlQRl9SRUcoU0dFX1BGX0dUUyksCi0JCQkgICAgIHZhbCB8IElOR1JFU1NRSUQoKHUzMilxLT5jbnR4dF9pZCkpOworCQl0NF93cml0ZV9yZWcocS0+YWRhcCwgTVlQRl9SRUcoU0dFX1BGX0dUU19BKSwKKwkJCSAgICAgdmFsIHwgSU5HUkVTU1FJRF9WKCh1MzIpcS0+Y250eHRfaWQpKTsKIAl9IGVsc2UgewotCQl3cml0ZWwodmFsIHwgSU5HUkVTU1FJRChxLT5iYXIyX3FpZCksCisJCXdyaXRlbCh2YWwgfCBJTkdSRVNTUUlEX1YocS0+YmFyMl9xaWQpLAogCQkgICAgICAgcS0+YmFyMl9hZGRyICsgU0dFX1VEQl9HVFMpOwogCQl3bWIoKTsKIAl9CisJY3hnYl9wb2xsX3VubG9ja19uYXBpKHEpOwogCXJldHVybiB3b3JrX2RvbmU7CiB9CiAKQEAgLTIwNTYsMTYgKzIxMDMsMTYgQEAKIAkJcnNwcV9uZXh0KHEpOwogCX0KIAotCXZhbCA9ICBDSURYSU5DKGNyZWRpdHMpIHwgU0VJTlRBUk0ocS0+aW50cl9wYXJhbXMpOworCXZhbCA9ICBDSURYSU5DX1YoY3JlZGl0cykgfCBTRUlOVEFSTV9WKHEtPmludHJfcGFyYW1zKTsKIAogCS8qIElmIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBuZXcgVXNlciBHVFMgKFQ1KyksIHVzZSB0aGUgb2xkCiAJICogZG9vcmJlbGwgbWVjaGFuaXNtOyBvdGhlcndpc2UgdXNlIHRoZSBuZXcgQkFSMiBtZWNoYW5pc20uCiAJICovCiAJaWYgKHVubGlrZWx5KHEtPmJhcjJfYWRkciA9PSBOVUxMKSkgewotCQl0NF93cml0ZV9yZWcoYWRhcCwgTVlQRl9SRUcoU0dFX1BGX0dUUyksCi0JCQkgICAgIHZhbCB8IElOR1JFU1NRSUQocS0+Y250eHRfaWQpKTsKKwkJdDRfd3JpdGVfcmVnKGFkYXAsIE1ZUEZfUkVHKFNHRV9QRl9HVFNfQSksCisJCQkgICAgIHZhbCB8IElOR1JFU1NRSURfVihxLT5jbnR4dF9pZCkpOwogCX0gZWxzZSB7Ci0JCXdyaXRlbCh2YWwgfCBJTkdSRVNTUUlEKHEtPmJhcjJfcWlkKSwKKwkJd3JpdGVsKHZhbCB8IElOR1JFU1NRSURfVihxLT5iYXIyX3FpZCksCiAJCSAgICAgICBxLT5iYXIyX2FkZHIgKyBTR0VfVURCX0dUUyk7CiAJCXdtYigpOwogCX0KQEAgLTIwOTUsNyArMjE0Miw3IEBACiB7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXAgPSBjb29raWU7CiAKLQl0NF93cml0ZV9yZWcoYWRhcCwgTVlQRl9SRUcoUENJRV9QRl9DTEkpLCAwKTsKKwl0NF93cml0ZV9yZWcoYWRhcCwgTVlQRl9SRUcoUENJRV9QRl9DTElfQSksIDApOwogCWlmICh0NF9zbG93X2ludHJfaGFuZGxlcihhZGFwKSB8IHByb2Nlc3NfaW50cnEoYWRhcCkpCiAJCXJldHVybiBJUlFfSEFORExFRDsKIAlyZXR1cm4gSVJRX05PTkU7ICAgICAgICAgICAgIC8qIHByb2JhYmx5IHNoYXJlZCBpbnRlcnJ1cHQgKi8KQEAgLTIxNDIsOSArMjE4OSw5IEBACiAJCQl9CiAJCX0KIAotCXQ0X3dyaXRlX3JlZyhhZGFwLCBTR0VfREVCVUdfSU5ERVgsIDEzKTsKLQlpZG1hX3NhbWVfc3RhdGVfY250WzBdID0gdDRfcmVhZF9yZWcoYWRhcCwgU0dFX0RFQlVHX0RBVEFfSElHSCk7Ci0JaWRtYV9zYW1lX3N0YXRlX2NudFsxXSA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9ERUJVR19EQVRBX0xPVyk7CisJdDRfd3JpdGVfcmVnKGFkYXAsIFNHRV9ERUJVR19JTkRFWF9BLCAxMyk7CisJaWRtYV9zYW1lX3N0YXRlX2NudFswXSA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9ERUJVR19EQVRBX0hJR0hfQSk7CisJaWRtYV9zYW1lX3N0YXRlX2NudFsxXSA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9ERUJVR19EQVRBX0xPV19BKTsKIAogCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKIAkJdTMyIGRlYnVnMCwgZGVidWcxMTsKQEAgLTIxODgsMTIgKzIyMzUsMTIgQEAKIAkJLyogUmVhZCBhbmQgc2F2ZSB0aGUgU0dFIElETUEgU3RhdGUgYW5kIFF1ZXVlIElEIGluZm9ybWF0aW9uLgogCQkgKiBXZSBkbyB0aGlzIGV2ZXJ5IHRpbWUgaW4gY2FzZSBpdCBjaGFuZ2VzIGFjcm9zcyB0aW1lIC4uLgogCQkgKi8KLQkJdDRfd3JpdGVfcmVnKGFkYXAsIFNHRV9ERUJVR19JTkRFWCwgMCk7Ci0JCWRlYnVnMCA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9ERUJVR19EQVRBX0xPVyk7CisJCXQ0X3dyaXRlX3JlZyhhZGFwLCBTR0VfREVCVUdfSU5ERVhfQSwgMCk7CisJCWRlYnVnMCA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9ERUJVR19EQVRBX0xPV19BKTsKIAkJcy0+aWRtYV9zdGF0ZVtpXSA9IChkZWJ1ZzAgPj4gKGkgKiA5KSkgJiAweDNmOwogCi0JCXQ0X3dyaXRlX3JlZyhhZGFwLCBTR0VfREVCVUdfSU5ERVgsIDExKTsKLQkJZGVidWcxMSA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9ERUJVR19EQVRBX0xPVyk7CisJCXQ0X3dyaXRlX3JlZyhhZGFwLCBTR0VfREVCVUdfSU5ERVhfQSwgMTEpOworCQlkZWJ1ZzExID0gdDRfcmVhZF9yZWcoYWRhcCwgU0dFX0RFQlVHX0RBVEFfTE9XX0EpOwogCQlzLT5pZG1hX3FpZFtpXSA9IChkZWJ1ZzExID4+IChpICogMTYpKSAmIDB4ZmZmZjsKIAogCQlDSF9XQVJOKGFkYXAsICJTR0UgaWRtYSV1LCBxdWV1ZSV1LCBtYXliZSBzdHVjayBzdGF0ZSV1ICVkc2VjcyAoZGVidWcwPSUjeCwgZGVidWcxMT0lI3gpXG4iLApAQCAtMjMzNyw2ICsyMzg0LDcgQEAKIAkJZ290byBlcnI7CiAKIAluZXRpZl9uYXBpX2FkZChkZXYsICZpcS0+bmFwaSwgbmFwaV9yeF9oYW5kbGVyLCA2NCk7CisJbmFwaV9oYXNoX2FkZCgmaXEtPm5hcGkpOwogCWlxLT5jdXJfZGVzYyA9IGlxLT5kZXNjOwogCWlxLT5jaWR4ID0gMDsKIAlpcS0+Z2VuID0gMTsKQEAgLTI1OTQsNiArMjY0Miw3IEBACiAJCSAgIHJxLT5jbnR4dF9pZCwgZmxfaWQsIDB4ZmZmZik7CiAJZG1hX2ZyZWVfY29oZXJlbnQoYWRhcC0+cGRldl9kZXYsIChycS0+c2l6ZSArIDEpICogcnEtPmlxZV9sZW4sCiAJCQkgIHJxLT5kZXNjLCBycS0+cGh5c19hZGRyKTsKKwluYXBpX2hhc2hfZGVsKCZycS0+bmFwaSk7CiAJbmV0aWZfbmFwaV9kZWwoJnJxLT5uYXBpKTsKIAlycS0+bmV0ZGV2ID0gTlVMTDsKIAlycS0+Y250eHRfaWQgPSBycS0+YWJzX2lkID0gMDsKQEAgLTI3MzgsMjQgKzI3ODcsMTEgQEAKIH0KIAogLyoqCi0gKgl0NF9zZ2VfaW5pdCAtIGluaXRpYWxpemUgU0dFCisgKgl0NF9zZ2VfaW5pdF9zb2Z0IC0gZ3JhYiBjb3JlIFNHRSB2YWx1ZXMgbmVlZGVkIGJ5IFNHRSBjb2RlCiAgKglAYWRhcDogdGhlIGFkYXB0ZXIKICAqCi0gKglQZXJmb3JtcyBTR0UgaW5pdGlhbGl6YXRpb24gbmVlZGVkIGV2ZXJ5IHRpbWUgYWZ0ZXIgYSBjaGlwIHJlc2V0LgotICoJV2UgZG8gbm90IGluaXRpYWxpemUgYW55IG9mIHRoZSBxdWV1ZXMgaGVyZSwgaW5zdGVhZCB0aGUgZHJpdmVyCi0gKgl0b3AtbGV2ZWwgbXVzdCByZXF1ZXN0IHRoZW0gaW5kaXZpZHVhbGx5LgotICoKLSAqCUNhbGxlZCBpbiB0d28gZGlmZmVyZW50IG1vZGVzOgotICoKLSAqCSAxLiBQZXJmb3JtIGFjdHVhbCBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBhbmQgcmVjb3JkIGhhcmQtY29kZWQKLSAqCSAgICBwYXJhbWV0ZXJzIHdoaWNoIHdlcmUgdXNlZC4gIFRoaXMgZ2V0cyB1c2VkIHdoZW4gd2UncmUgdGhlCi0gKgkgICAgTWFzdGVyIFBGIGFuZCB0aGUgRmlybXdhcmUgQ29uZmlndXJhdGlvbiBGaWxlIHN1cHBvcnQgZGlkbid0Ci0gKgkgICAgd29yayBmb3Igc29tZSByZWFzb24uCi0gKgotICoJIDIuIFdlJ3JlIG5vdCB0aGUgTWFzdGVyIFBGIG9yIGluaXRpYWxpemF0aW9uIHdhcyBwZXJmb3JtZWQgd2l0aAotICoJICAgIGEgRmlybXdhcmUgQ29uZmlndXJhdGlvbiBGaWxlLiAgSW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gZ3JhYgotICoJICAgIGFueSBvZiB0aGUgU0dFIG9wZXJhdGluZyBwYXJhbWV0ZXJzIHRoYXQgd2UgbmVlZCB0byBoYXZlIGluCi0gKgkgICAgb3JkZXIgdG8gZG8gb3VyIGpvYiBhbmQgbWFrZSBzdXJlIHdlIGNhbiBsaXZlIHdpdGggdGhlbSAuLi4KKyAqCVdlIG5lZWQgdG8gZ3JhYiB0aGUgU0dFIG9wZXJhdGluZyBwYXJhbWV0ZXJzIHRoYXQgd2UgbmVlZCB0byBoYXZlCisgKglpbiBvcmRlciB0byBkbyBvdXIgam9iIGFuZCBtYWtlIHN1cmUgd2UgY2FuIGxpdmUgd2l0aCB0aGVtLgogICovCiAKIHN0YXRpYyBpbnQgdDRfc2dlX2luaXRfc29mdChzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKQEAgLTI3NzAsOCArMjgwNiw4IEBACiAJICogcHJvY2Vzc19yZXNwb25zZXMoKSBhbmQgdGhhdCBvbmx5IHBhY2tldCBkYXRhIGlzIGdvaW5nIHRvIHRoZQogCSAqIEZyZWUgTGlzdHMuCiAJICovCi0JaWYgKCh0NF9yZWFkX3JlZyhhZGFwLCBTR0VfQ09OVFJPTCkgJiBSWFBLVENQTE1PREVfTUFTSykgIT0KLQkgICAgUlhQS1RDUExNT0RFKFhfUlhQS1RDUExNT0RFX1NQTElUKSkgeworCWlmICgodDRfcmVhZF9yZWcoYWRhcCwgU0dFX0NPTlRST0xfQSkgJiBSWFBLVENQTE1PREVfRikgIT0KKwkgICAgUlhQS1RDUExNT0RFX1YoUlhQS1RDUExNT0RFX1NQTElUX1gpKSB7CiAJCWRldl9lcnIoYWRhcC0+cGRldl9kZXYsICJiYWQgU0dFIENQTCBNT0RFXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjc4NSw3ICsyODIxLDcgQEAKIAkgKiBYWFggbWVldCBvdXIgbmVlZHMhCiAJICovCiAJI2RlZmluZSBSRUFEX0ZMX0JVRih4KSBcCi0JCXQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9GTF9CVUZGRVJfU0laRTArKHgpKnNpemVvZih1MzIpKQorCQl0NF9yZWFkX3JlZyhhZGFwLCBTR0VfRkxfQlVGRkVSX1NJWkUwX0ErKHgpKnNpemVvZih1MzIpKQogCiAJZmxfc21hbGxfcGcgPSBSRUFEX0ZMX0JVRihSWF9TTUFMTF9QR19CVUYpOwogCWZsX2xhcmdlX3BnID0gUkVBRF9GTF9CVUYoUlhfTEFSR0VfUEdfQlVGKTsKQEAgLTI4MjMsOTkgKzI4NTksMzggQEAKIAkgKiBSZXRyaWV2ZSBvdXIgUlggaW50ZXJydXB0IGhvbGRvZmYgdGltZXIgdmFsdWVzIGFuZCBjb3VudGVyCiAJICogdGhyZXNob2xkIHZhbHVlcyBmcm9tIHRoZSBTR0UgcGFyYW1ldGVycy4KIAkgKi8KLQl0aW1lcl92YWx1ZV8wX2FuZF8xID0gdDRfcmVhZF9yZWcoYWRhcCwgU0dFX1RJTUVSX1ZBTFVFXzBfQU5EXzEpOwotCXRpbWVyX3ZhbHVlXzJfYW5kXzMgPSB0NF9yZWFkX3JlZyhhZGFwLCBTR0VfVElNRVJfVkFMVUVfMl9BTkRfMyk7Ci0JdGltZXJfdmFsdWVfNF9hbmRfNSA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9USU1FUl9WQUxVRV80X0FORF81KTsKKwl0aW1lcl92YWx1ZV8wX2FuZF8xID0gdDRfcmVhZF9yZWcoYWRhcCwgU0dFX1RJTUVSX1ZBTFVFXzBfQU5EXzFfQSk7CisJdGltZXJfdmFsdWVfMl9hbmRfMyA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9USU1FUl9WQUxVRV8yX0FORF8zX0EpOworCXRpbWVyX3ZhbHVlXzRfYW5kXzUgPSB0NF9yZWFkX3JlZyhhZGFwLCBTR0VfVElNRVJfVkFMVUVfNF9BTkRfNV9BKTsKIAlzLT50aW1lcl92YWxbMF0gPSBjb3JlX3RpY2tzX3RvX3VzKGFkYXAsCi0JCVRJTUVSVkFMVUUwX0dFVCh0aW1lcl92YWx1ZV8wX2FuZF8xKSk7CisJCVRJTUVSVkFMVUUwX0codGltZXJfdmFsdWVfMF9hbmRfMSkpOwogCXMtPnRpbWVyX3ZhbFsxXSA9IGNvcmVfdGlja3NfdG9fdXMoYWRhcCwKLQkJVElNRVJWQUxVRTFfR0VUKHRpbWVyX3ZhbHVlXzBfYW5kXzEpKTsKKwkJVElNRVJWQUxVRTFfRyh0aW1lcl92YWx1ZV8wX2FuZF8xKSk7CiAJcy0+dGltZXJfdmFsWzJdID0gY29yZV90aWNrc190b191cyhhZGFwLAotCQlUSU1FUlZBTFVFMl9HRVQodGltZXJfdmFsdWVfMl9hbmRfMykpOworCQlUSU1FUlZBTFVFMl9HKHRpbWVyX3ZhbHVlXzJfYW5kXzMpKTsKIAlzLT50aW1lcl92YWxbM10gPSBjb3JlX3RpY2tzX3RvX3VzKGFkYXAsCi0JCVRJTUVSVkFMVUUzX0dFVCh0aW1lcl92YWx1ZV8yX2FuZF8zKSk7CisJCVRJTUVSVkFMVUUzX0codGltZXJfdmFsdWVfMl9hbmRfMykpOwogCXMtPnRpbWVyX3ZhbFs0XSA9IGNvcmVfdGlja3NfdG9fdXMoYWRhcCwKLQkJVElNRVJWQUxVRTRfR0VUKHRpbWVyX3ZhbHVlXzRfYW5kXzUpKTsKKwkJVElNRVJWQUxVRTRfRyh0aW1lcl92YWx1ZV80X2FuZF81KSk7CiAJcy0+dGltZXJfdmFsWzVdID0gY29yZV90aWNrc190b191cyhhZGFwLAotCQlUSU1FUlZBTFVFNV9HRVQodGltZXJfdmFsdWVfNF9hbmRfNSkpOworCQlUSU1FUlZBTFVFNV9HKHRpbWVyX3ZhbHVlXzRfYW5kXzUpKTsKIAotCWluZ3Jlc3NfcnhfdGhyZXNob2xkID0gdDRfcmVhZF9yZWcoYWRhcCwgU0dFX0lOR1JFU1NfUlhfVEhSRVNIT0xEKTsKLQlzLT5jb3VudGVyX3ZhbFswXSA9IFRIUkVTSE9MRF8wX0dFVChpbmdyZXNzX3J4X3RocmVzaG9sZCk7Ci0Jcy0+Y291bnRlcl92YWxbMV0gPSBUSFJFU0hPTERfMV9HRVQoaW5ncmVzc19yeF90aHJlc2hvbGQpOwotCXMtPmNvdW50ZXJfdmFsWzJdID0gVEhSRVNIT0xEXzJfR0VUKGluZ3Jlc3NfcnhfdGhyZXNob2xkKTsKLQlzLT5jb3VudGVyX3ZhbFszXSA9IFRIUkVTSE9MRF8zX0dFVChpbmdyZXNzX3J4X3RocmVzaG9sZCk7CisJaW5ncmVzc19yeF90aHJlc2hvbGQgPSB0NF9yZWFkX3JlZyhhZGFwLCBTR0VfSU5HUkVTU19SWF9USFJFU0hPTERfQSk7CisJcy0+Y291bnRlcl92YWxbMF0gPSBUSFJFU0hPTERfMF9HKGluZ3Jlc3NfcnhfdGhyZXNob2xkKTsKKwlzLT5jb3VudGVyX3ZhbFsxXSA9IFRIUkVTSE9MRF8xX0coaW5ncmVzc19yeF90aHJlc2hvbGQpOworCXMtPmNvdW50ZXJfdmFsWzJdID0gVEhSRVNIT0xEXzJfRyhpbmdyZXNzX3J4X3RocmVzaG9sZCk7CisJcy0+Y291bnRlcl92YWxbM10gPSBUSFJFU0hPTERfM19HKGluZ3Jlc3NfcnhfdGhyZXNob2xkKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHQ0X3NnZV9pbml0X2hhcmQoc3RydWN0IGFkYXB0ZXIgKmFkYXApCi17Ci0Jc3RydWN0IHNnZSAqcyA9ICZhZGFwLT5zZ2U7Ci0KLQkvKgotCSAqIFNldCB1cCBvdXIgYmFzaWMgU0dFIG1vZGUgdG8gZGVsaXZlciBDUEwgbWVzc2FnZXMgdG8gb3VyIEluZ3Jlc3MKLQkgKiBRdWV1ZSBhbmQgUGFja2V0IERhdGUgdG8gdGhlIEZyZWUgTGlzdC4KLQkgKi8KLQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIFNHRV9DT05UUk9MLCBSWFBLVENQTE1PREVfTUFTSywKLQkJCSBSWFBLVENQTE1PREVfTUFTSyk7Ci0KLQkvKgotCSAqIFNldCB1cCB0byBkcm9wIERPT1JCRUxMIHdyaXRlcyB3aGVuIHRoZSBET09SQkVMTCBGSUZPIG92ZXJmbG93cwotCSAqIGFuZCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgd2hlbiB0aGlzIG9jY3VycyBzbyB3ZSBjYW4gcmVjb3Zlci4KLQkgKi8KLQlpZiAoaXNfdDQoYWRhcC0+cGFyYW1zLmNoaXApKSB7Ci0JCXQ0X3NldF9yZWdfZmllbGQoYWRhcCwgQV9TR0VfREJGSUZPX1NUQVRVUywKLQkJCQkgVl9IUF9JTlRfVEhSRVNIKE1fSFBfSU5UX1RIUkVTSCkgfAotCQkJCSBWX0xQX0lOVF9USFJFU0goTV9MUF9JTlRfVEhSRVNIKSwKLQkJCQkgVl9IUF9JTlRfVEhSRVNIKGRiZmlmb19pbnRfdGhyZXNoKSB8Ci0JCQkJIFZfTFBfSU5UX1RIUkVTSChkYmZpZm9faW50X3RocmVzaCkpOwotCX0gZWxzZSB7Ci0JCXQ0X3NldF9yZWdfZmllbGQoYWRhcCwgQV9TR0VfREJGSUZPX1NUQVRVUywKLQkJCQkgVl9MUF9JTlRfVEhSRVNIX1Q1KE1fTFBfSU5UX1RIUkVTSF9UNSksCi0JCQkJIFZfTFBfSU5UX1RIUkVTSF9UNShkYmZpZm9faW50X3RocmVzaCkpOwotCQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIFNHRV9EQkZJRk9fU1RBVFVTMiwKLQkJCQkgVl9IUF9JTlRfVEhSRVNIX1Q1KE1fSFBfSU5UX1RIUkVTSF9UNSksCi0JCQkJIFZfSFBfSU5UX1RIUkVTSF9UNShkYmZpZm9faW50X3RocmVzaCkpOwotCX0KLQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIEFfU0dFX0RPT1JCRUxMX0NPTlRST0wsIEZfRU5BQkxFX0RST1AsCi0JCQlGX0VOQUJMRV9EUk9QKTsKLQotCS8qCi0JICogU0dFX0ZMX0JVRkZFUl9TSVpFMCAoUlhfU01BTExfUEdfQlVGKSBpcyBzZXQgdXAgYnkKLQkgKiB0NF9maXh1cF9ob3N0X3BhcmFtcygpLgotCSAqLwotCXMtPmZsX3BnX29yZGVyID0gRkxfUEdfT1JERVI7Ci0JaWYgKHMtPmZsX3BnX29yZGVyKQotCQl0NF93cml0ZV9yZWcoYWRhcCwKLQkJCSAgICAgU0dFX0ZMX0JVRkZFUl9TSVpFMCtSWF9MQVJHRV9QR19CVUYqc2l6ZW9mKHUzMiksCi0JCQkgICAgIFBBR0VfU0laRSA8PCBGTF9QR19PUkRFUik7Ci0JdDRfd3JpdGVfcmVnKGFkYXAsIFNHRV9GTF9CVUZGRVJfU0laRTArUlhfU01BTExfTVRVX0JVRipzaXplb2YodTMyKSwKLQkJICAgICBGTF9NVFVfU01BTExfQlVGU0laRShhZGFwKSk7Ci0JdDRfd3JpdGVfcmVnKGFkYXAsIFNHRV9GTF9CVUZGRVJfU0laRTArUlhfTEFSR0VfTVRVX0JVRipzaXplb2YodTMyKSwKLQkJICAgICBGTF9NVFVfTEFSR0VfQlVGU0laRShhZGFwKSk7Ci0KLQkvKgotCSAqIE5vdGUgdGhhdCB0aGUgU0dFIEluZ3Jlc3MgUGFja2V0IENvdW50IEludGVycnVwdCBUaHJlc2hvbGQgYW5kCi0JICogVGltZXIgSG9sZG9mZiB2YWx1ZXMgbXVzdCBiZSBzdXBwbGllZCBieSBvdXIgY2FsbGVyLgotCSAqLwotCXQ0X3dyaXRlX3JlZyhhZGFwLCBTR0VfSU5HUkVTU19SWF9USFJFU0hPTEQsCi0JCSAgICAgVEhSRVNIT0xEXzAocy0+Y291bnRlcl92YWxbMF0pIHwKLQkJICAgICBUSFJFU0hPTERfMShzLT5jb3VudGVyX3ZhbFsxXSkgfAotCQkgICAgIFRIUkVTSE9MRF8yKHMtPmNvdW50ZXJfdmFsWzJdKSB8Ci0JCSAgICAgVEhSRVNIT0xEXzMocy0+Y291bnRlcl92YWxbM10pKTsKLQl0NF93cml0ZV9yZWcoYWRhcCwgU0dFX1RJTUVSX1ZBTFVFXzBfQU5EXzEsCi0JCSAgICAgVElNRVJWQUxVRTAodXNfdG9fY29yZV90aWNrcyhhZGFwLCBzLT50aW1lcl92YWxbMF0pKSB8Ci0JCSAgICAgVElNRVJWQUxVRTEodXNfdG9fY29yZV90aWNrcyhhZGFwLCBzLT50aW1lcl92YWxbMV0pKSk7Ci0JdDRfd3JpdGVfcmVnKGFkYXAsIFNHRV9USU1FUl9WQUxVRV8yX0FORF8zLAotCQkgICAgIFRJTUVSVkFMVUUyKHVzX3RvX2NvcmVfdGlja3MoYWRhcCwgcy0+dGltZXJfdmFsWzJdKSkgfAotCQkgICAgIFRJTUVSVkFMVUUzKHVzX3RvX2NvcmVfdGlja3MoYWRhcCwgcy0+dGltZXJfdmFsWzNdKSkpOwotCXQ0X3dyaXRlX3JlZyhhZGFwLCBTR0VfVElNRVJfVkFMVUVfNF9BTkRfNSwKLQkJICAgICBUSU1FUlZBTFVFNCh1c190b19jb3JlX3RpY2tzKGFkYXAsIHMtPnRpbWVyX3ZhbFs0XSkpIHwKLQkJICAgICBUSU1FUlZBTFVFNSh1c190b19jb3JlX3RpY2tzKGFkYXAsIHMtPnRpbWVyX3ZhbFs1XSkpKTsKLQotCXJldHVybiAwOwotfQotCisvKioKKyAqICAgICB0NF9zZ2VfaW5pdCAtIGluaXRpYWxpemUgU0dFCisgKiAgICAgQGFkYXA6IHRoZSBhZGFwdGVyCisgKgorICogICAgIFBlcmZvcm0gbG93LWxldmVsIFNHRSBjb2RlIGluaXRpYWxpemF0aW9uIG5lZWRlZCBldmVyeSB0aW1lIGFmdGVyIGEKKyAqICAgICBjaGlwIHJlc2V0LgorICovCiBpbnQgdDRfc2dlX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXApCiB7CiAJc3RydWN0IHNnZSAqcyA9ICZhZGFwLT5zZ2U7CkBAIC0yOTI3LDkgKzI5MDIsOSBAQAogCSAqIEluZ3Jlc3MgUGFkZGluZyBCb3VuZGFyeSBhbmQgRWdyZXNzIFN0YXR1cyBQYWdlIFNpemUgYXJlIHNldCB1cCBieQogCSAqIHQ0X2ZpeHVwX2hvc3RfcGFyYW1zKCkuCiAJICovCi0Jc2dlX2NvbnRyb2wgPSB0NF9yZWFkX3JlZyhhZGFwLCBTR0VfQ09OVFJPTCk7Ci0Jcy0+cGt0c2hpZnQgPSBQS1RTSElGVF9HRVQoc2dlX2NvbnRyb2wpOwotCXMtPnN0YXRfbGVuID0gKHNnZV9jb250cm9sICYgRUdSU1RBVFVTUEFHRVNJWkVfTUFTSykgPyAxMjggOiA2NDsKKwlzZ2VfY29udHJvbCA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9DT05UUk9MX0EpOworCXMtPnBrdHNoaWZ0ID0gUEtUU0hJRlRfRyhzZ2VfY29udHJvbCk7CisJcy0+c3RhdF9sZW4gPSAoc2dlX2NvbnRyb2wgJiBFR1JTVEFUVVNQQUdFU0laRV9GKSA/IDEyOCA6IDY0OwogCiAJLyogVDQgdXNlcyBhIHNpbmdsZSBjb250cm9sIGZpZWxkIHRvIHNwZWNpZnkgYm90aCB0aGUgUENJZSBQYWRkaW5nIGFuZAogCSAqIFBhY2tpbmcgQm91bmRhcnkuICBUNSBpbnRyb2R1Y2VkIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgdGhlc2UKQEAgLTI5MzcsOCArMjkxMiw4IEBACiAJICogd2l0aGluIFBhY2tlZCBCdWZmZXIgTW9kZSBpcyB0aGUgbWF4aW11bSBvZiB0aGVzZSB0d28KIAkgKiBzcGVjaWZpY2F0aW9ucy4KIAkgKi8KLQlpbmdwYWRib3VuZGFyeSA9IDEgPDwgKElOR1BBREJPVU5EQVJZX0dFVChzZ2VfY29udHJvbCkgKwotCQkJICAgICAgIFhfSU5HUEFEQk9VTkRBUllfU0hJRlQpOworCWluZ3BhZGJvdW5kYXJ5ID0gMSA8PCAoSU5HUEFEQk9VTkRBUllfRyhzZ2VfY29udHJvbCkgKworCQkJICAgICAgIElOR1BBREJPVU5EQVJZX1NISUZUX1gpOwogCWlmIChpc190NChhZGFwLT5wYXJhbXMuY2hpcCkpIHsKIAkJcy0+ZmxfYWxpZ24gPSBpbmdwYWRib3VuZGFyeTsKIAl9IGVsc2UgewpAQCAtMjk1NiwxMCArMjkzMSw3IEBACiAJCXMtPmZsX2FsaWduID0gbWF4KGluZ3BhZGJvdW5kYXJ5LCBpbmdwYWNrYm91bmRhcnkpOwogCX0KIAotCWlmIChhZGFwLT5mbGFncyAmIFVTSU5HX1NPRlRfUEFSQU1TKQotCQlyZXQgPSB0NF9zZ2VfaW5pdF9zb2Z0KGFkYXApOwotCWVsc2UKLQkJcmV0ID0gdDRfc2dlX2luaXRfaGFyZChhZGFwKTsKKwlyZXQgPSB0NF9zZ2VfaW5pdF9zb2Z0KGFkYXApOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0yOTc1LDExICsyOTQ3LDExIEBACiAJICogYnVmZmVycyBhbmQgYSBuZXcgZmllbGQgd2hpY2ggb25seSBhcHBsaWVzIHRvIFBhY2tlZCBNb2RlIEZyZWUgTGlzdAogCSAqIGJ1ZmZlcnMuCiAJICovCi0Jc2dlX2Nvbm1fY3RybCA9IHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9DT05NX0NUUkwpOworCXNnZV9jb25tX2N0cmwgPSB0NF9yZWFkX3JlZyhhZGFwLCBTR0VfQ09OTV9DVFJMX0EpOwogCWlmIChpc190NChhZGFwLT5wYXJhbXMuY2hpcCkpCi0JCWVncmVzc190aHJlc2hvbGQgPSBFR1JUSFJFU0hPTERfR0VUKHNnZV9jb25tX2N0cmwpOworCQllZ3Jlc3NfdGhyZXNob2xkID0gRUdSVEhSRVNIT0xEX0coc2dlX2Nvbm1fY3RybCk7CiAJZWxzZQotCQllZ3Jlc3NfdGhyZXNob2xkID0gRUdSVEhSRVNIT0xEUEFDS0lOR19HRVQoc2dlX2Nvbm1fY3RybCk7CisJCWVncmVzc190aHJlc2hvbGQgPSBFR1JUSFJFU0hPTERQQUNLSU5HX0coc2dlX2Nvbm1fY3RybCk7CiAJcy0+Zmxfc3RhcnZlX3RocmVzID0gMiplZ3Jlc3NfdGhyZXNob2xkICsgMTsKIAogCXNldHVwX3RpbWVyKCZzLT5yeF90aW1lciwgc2dlX3J4X3RpbWVyX2NiLCAodW5zaWduZWQgbG9uZylhZGFwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvdDRfaHcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvdDRfaHcuYwppbmRleCBjMTMyZDkwLi40ZDY0M2I2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC90NF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvdDRfaHcuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSAiY3hnYjQuaCIKICNpbmNsdWRlICJ0NF9yZWdzLmgiCisjaW5jbHVkZSAidDRfdmFsdWVzLmgiCiAjaW5jbHVkZSAidDRmd19hcGkuaCIKIAogLyoqCkBAIC0xNDksMjAgKzE1MCwyMCBAQAogICovCiB2b2lkIHQ0X2h3X3BjaV9yZWFkX2NmZzQoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIGludCByZWcsIHUzMiAqdmFsKQogewotCXUzMiByZXEgPSBFTkFCTEUgfCBGVU5DVElPTihhZGFwLT5mbikgfCByZWc7CisJdTMyIHJlcSA9IEVOQUJMRV9GIHwgRlVOQ1RJT05fVihhZGFwLT5mbikgfCBSRUdJU1RFUl9WKHJlZyk7CiAKIAlpZiAoaXNfdDQoYWRhcC0+cGFyYW1zLmNoaXApKQotCQlyZXEgfD0gRl9MT0NBTENGRzsKKwkJcmVxIHw9IExPQ0FMQ0ZHX0Y7CiAKLQl0NF93cml0ZV9yZWcoYWRhcCwgUENJRV9DRkdfU1BBQ0VfUkVRLCByZXEpOwotCSp2YWwgPSB0NF9yZWFkX3JlZyhhZGFwLCBQQ0lFX0NGR19TUEFDRV9EQVRBKTsKKwl0NF93cml0ZV9yZWcoYWRhcCwgUENJRV9DRkdfU1BBQ0VfUkVRX0EsIHJlcSk7CisJKnZhbCA9IHQ0X3JlYWRfcmVnKGFkYXAsIFBDSUVfQ0ZHX1NQQUNFX0RBVEFfQSk7CiAKIAkvKiBSZXNldCBFTkFCTEUgdG8gMCBzbyByZWFkcyBvZiBQQ0lFX0NGR19TUEFDRV9EQVRBIHdvbid0IGNhdXNlIGEKIAkgKiBDb25maWd1cmF0aW9uIFNwYWNlIHJlYWQuICAoTm9uZSBvZiB0aGUgb3RoZXIgZmllbGRzIG1hdHRlciB3aGVuCiAJICogRU5BQkxFIGlzIDAgc28gYSBzaW1wbGUgcmVnaXN0ZXIgd3JpdGUgaXMgZWFzaWVyIHRoYW4gYQogCSAqIHJlYWQtbW9kaWZ5LXdyaXRlIHZpYSB0NF9zZXRfcmVnX2ZpZWxkKCkuKQogCSAqLwotCXQ0X3dyaXRlX3JlZyhhZGFwLCBQQ0lFX0NGR19TUEFDRV9SRVEsIDApOworCXQ0X3dyaXRlX3JlZyhhZGFwLCBQQ0lFX0NGR19TUEFDRV9SRVFfQSwgMCk7CiB9CiAKIC8qCkBAIC0xODcsOCArMTg4LDggQEAKIAl9OwogCXUzMiBwY2llX2Z3OwogCi0JcGNpZV9mdyA9IHQ0X3JlYWRfcmVnKGFkYXAsIE1BX1BDSUVfRlcpOwotCWlmIChwY2llX2Z3ICYgUENJRV9GV19FUlIpCisJcGNpZV9mdyA9IHQ0X3JlYWRfcmVnKGFkYXAsIFBDSUVfRldfQSk7CisJaWYgKHBjaWVfZncgJiBQQ0lFX0ZXX0VSUl9GKQogCQlkZXZfZXJyKGFkYXAtPnBkZXZfZGV2LCAiRmlybXdhcmUgcmVwb3J0cyBhZGFwdGVyIGVycm9yOiAlc1xuIiwKIAkJCXJlYXNvbltQQ0lFX0ZXX0VWQUxfRyhwY2llX2Z3KV0pOwogfQpAQCAtMjY0LDggKzI2NSw4IEBACiAJdTY0IHJlczsKIAlpbnQgaSwgbXMsIGRlbGF5X2lkeDsKIAljb25zdCBfX2JlNjQgKnAgPSBjbWQ7Ci0JdTMyIGRhdGFfcmVnID0gUEZfUkVHKG1ib3gsIENJTV9QRl9NQUlMQk9YX0RBVEEpOwotCXUzMiBjdGxfcmVnID0gUEZfUkVHKG1ib3gsIENJTV9QRl9NQUlMQk9YX0NUUkwpOworCXUzMiBkYXRhX3JlZyA9IFBGX1JFRyhtYm94LCBDSU1fUEZfTUFJTEJPWF9EQVRBX0EpOworCXUzMiBjdGxfcmVnID0gUEZfUkVHKG1ib3gsIENJTV9QRl9NQUlMQk9YX0NUUkxfQSk7CiAKIAlpZiAoKHNpemUgJiAxNSkgfHwgc2l6ZSA+IE1CT1hfTEVOKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI3Nyw5ICsyNzgsOSBAQAogCWlmIChhZGFwLT5wZGV2LT5lcnJvcl9zdGF0ZSAhPSBwY2lfY2hhbm5lbF9pb19ub3JtYWwpCiAJCXJldHVybiAtRUlPOwogCi0JdiA9IE1CT1dORVJfR0VUKHQ0X3JlYWRfcmVnKGFkYXAsIGN0bF9yZWcpKTsKKwl2ID0gTUJPV05FUl9HKHQ0X3JlYWRfcmVnKGFkYXAsIGN0bF9yZWcpKTsKIAlmb3IgKGkgPSAwOyB2ID09IE1CT1hfT1dORVJfTk9ORSAmJiBpIDwgMzsgaSsrKQotCQl2ID0gTUJPV05FUl9HRVQodDRfcmVhZF9yZWcoYWRhcCwgY3RsX3JlZykpOworCQl2ID0gTUJPV05FUl9HKHQ0X3JlYWRfcmVnKGFkYXAsIGN0bF9yZWcpKTsKIAogCWlmICh2ICE9IE1CT1hfT1dORVJfRFJWKQogCQlyZXR1cm4gdiA/IC1FQlVTWSA6IC1FVElNRURPVVQ7CkBAIC0yODcsNyArMjg4LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA4KQogCQl0NF93cml0ZV9yZWc2NChhZGFwLCBkYXRhX3JlZyArIGksIGJlNjRfdG9fY3B1KCpwKyspKTsKIAotCXQ0X3dyaXRlX3JlZyhhZGFwLCBjdGxfcmVnLCBNQk1TR1ZBTElEIHwgTUJPV05FUihNQk9YX09XTkVSX0ZXKSk7CisJdDRfd3JpdGVfcmVnKGFkYXAsIGN0bF9yZWcsIE1CTVNHVkFMSURfRiB8IE1CT1dORVJfVihNQk9YX09XTkVSX0ZXKSk7CiAJdDRfcmVhZF9yZWcoYWRhcCwgY3RsX3JlZyk7ICAgICAgICAgIC8qIGZsdXNoIHdyaXRlICovCiAKIAlkZWxheV9pZHggPSAwOwpAQCAtMzAzLDggKzMwNCw4IEBACiAJCQltZGVsYXkobXMpOwogCiAJCXYgPSB0NF9yZWFkX3JlZyhhZGFwLCBjdGxfcmVnKTsKLQkJaWYgKE1CT1dORVJfR0VUKHYpID09IE1CT1hfT1dORVJfRFJWKSB7Ci0JCQlpZiAoISh2ICYgTUJNU0dWQUxJRCkpIHsKKwkJaWYgKE1CT1dORVJfRyh2KSA9PSBNQk9YX09XTkVSX0RSVikgeworCQkJaWYgKCEodiAmIE1CTVNHVkFMSURfRikpIHsKIAkJCQl0NF93cml0ZV9yZWcoYWRhcCwgY3RsX3JlZywgMCk7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC0zNTAsMjcgKzM1MSwyNyBAQAogCXUzMiBtY19iaXN0X3N0YXR1c19yZGF0YSwgbWNfYmlzdF9kYXRhX3BhdHRlcm47CiAKIAlpZiAoaXNfdDQoYWRhcC0+cGFyYW1zLmNoaXApKSB7Ci0JCW1jX2Jpc3RfY21kID0gTUNfQklTVF9DTUQ7Ci0JCW1jX2Jpc3RfY21kX2FkZHIgPSBNQ19CSVNUX0NNRF9BRERSOwotCQltY19iaXN0X2NtZF9sZW4gPSBNQ19CSVNUX0NNRF9MRU47Ci0JCW1jX2Jpc3Rfc3RhdHVzX3JkYXRhID0gTUNfQklTVF9TVEFUVVNfUkRBVEE7Ci0JCW1jX2Jpc3RfZGF0YV9wYXR0ZXJuID0gTUNfQklTVF9EQVRBX1BBVFRFUk47CisJCW1jX2Jpc3RfY21kID0gTUNfQklTVF9DTURfQTsKKwkJbWNfYmlzdF9jbWRfYWRkciA9IE1DX0JJU1RfQ01EX0FERFJfQTsKKwkJbWNfYmlzdF9jbWRfbGVuID0gTUNfQklTVF9DTURfTEVOX0E7CisJCW1jX2Jpc3Rfc3RhdHVzX3JkYXRhID0gTUNfQklTVF9TVEFUVVNfUkRBVEFfQTsKKwkJbWNfYmlzdF9kYXRhX3BhdHRlcm4gPSBNQ19CSVNUX0RBVEFfUEFUVEVSTl9BOwogCX0gZWxzZSB7Ci0JCW1jX2Jpc3RfY21kID0gTUNfUkVHKE1DX1BfQklTVF9DTUQsIGlkeCk7Ci0JCW1jX2Jpc3RfY21kX2FkZHIgPSBNQ19SRUcoTUNfUF9CSVNUX0NNRF9BRERSLCBpZHgpOwotCQltY19iaXN0X2NtZF9sZW4gPSBNQ19SRUcoTUNfUF9CSVNUX0NNRF9MRU4sIGlkeCk7Ci0JCW1jX2Jpc3Rfc3RhdHVzX3JkYXRhID0gTUNfUkVHKE1DX1BfQklTVF9TVEFUVVNfUkRBVEEsIGlkeCk7Ci0JCW1jX2Jpc3RfZGF0YV9wYXR0ZXJuID0gTUNfUkVHKE1DX1BfQklTVF9EQVRBX1BBVFRFUk4sIGlkeCk7CisJCW1jX2Jpc3RfY21kID0gTUNfUkVHKE1DX1BfQklTVF9DTURfQSwgaWR4KTsKKwkJbWNfYmlzdF9jbWRfYWRkciA9IE1DX1JFRyhNQ19QX0JJU1RfQ01EX0FERFJfQSwgaWR4KTsKKwkJbWNfYmlzdF9jbWRfbGVuID0gTUNfUkVHKE1DX1BfQklTVF9DTURfTEVOX0EsIGlkeCk7CisJCW1jX2Jpc3Rfc3RhdHVzX3JkYXRhID0gTUNfUkVHKE1DX1BfQklTVF9TVEFUVVNfUkRBVEFfQSwgaWR4KTsKKwkJbWNfYmlzdF9kYXRhX3BhdHRlcm4gPSBNQ19SRUcoTUNfUF9CSVNUX0RBVEFfUEFUVEVSTl9BLCBpZHgpOwogCX0KIAotCWlmICh0NF9yZWFkX3JlZyhhZGFwLCBtY19iaXN0X2NtZCkgJiBTVEFSVF9CSVNUKQorCWlmICh0NF9yZWFkX3JlZyhhZGFwLCBtY19iaXN0X2NtZCkgJiBTVEFSVF9CSVNUX0YpCiAJCXJldHVybiAtRUJVU1k7CiAJdDRfd3JpdGVfcmVnKGFkYXAsIG1jX2Jpc3RfY21kX2FkZHIsIGFkZHIgJiB+MHgzZlUpOwogCXQ0X3dyaXRlX3JlZyhhZGFwLCBtY19iaXN0X2NtZF9sZW4sIDY0KTsKIAl0NF93cml0ZV9yZWcoYWRhcCwgbWNfYmlzdF9kYXRhX3BhdHRlcm4sIDB4Yyk7Ci0JdDRfd3JpdGVfcmVnKGFkYXAsIG1jX2Jpc3RfY21kLCBCSVNUX09QQ09ERSgxKSB8IFNUQVJUX0JJU1QgfAotCQkgICAgIEJJU1RfQ01EX0dBUCgxKSk7Ci0JaSA9IHQ0X3dhaXRfb3BfZG9uZShhZGFwLCBtY19iaXN0X2NtZCwgU1RBUlRfQklTVCwgMCwgMTAsIDEpOworCXQ0X3dyaXRlX3JlZyhhZGFwLCBtY19iaXN0X2NtZCwgQklTVF9PUENPREVfVigxKSB8IFNUQVJUX0JJU1RfRiB8CisJCSAgICAgQklTVF9DTURfR0FQX1YoMSkpOworCWkgPSB0NF93YWl0X29wX2RvbmUoYWRhcCwgbWNfYmlzdF9jbWQsIFNUQVJUX0JJU1RfRiwgMCwgMTAsIDEpOwogCWlmIChpKQogCQlyZXR1cm4gaTsKIApAQCAtNDAzLDMxICs0MDQsMzEgQEAKIAl1MzIgZWRjX2Jpc3RfY21kX2RhdGFfcGF0dGVybiwgZWRjX2Jpc3Rfc3RhdHVzX3JkYXRhOwogCiAJaWYgKGlzX3Q0KGFkYXAtPnBhcmFtcy5jaGlwKSkgewotCQllZGNfYmlzdF9jbWQgPSBFRENfUkVHKEVEQ19CSVNUX0NNRCwgaWR4KTsKLQkJZWRjX2Jpc3RfY21kX2FkZHIgPSBFRENfUkVHKEVEQ19CSVNUX0NNRF9BRERSLCBpZHgpOwotCQllZGNfYmlzdF9jbWRfbGVuID0gRURDX1JFRyhFRENfQklTVF9DTURfTEVOLCBpZHgpOwotCQllZGNfYmlzdF9jbWRfZGF0YV9wYXR0ZXJuID0gRURDX1JFRyhFRENfQklTVF9EQVRBX1BBVFRFUk4sCisJCWVkY19iaXN0X2NtZCA9IEVEQ19SRUcoRURDX0JJU1RfQ01EX0EsIGlkeCk7CisJCWVkY19iaXN0X2NtZF9hZGRyID0gRURDX1JFRyhFRENfQklTVF9DTURfQUREUl9BLCBpZHgpOworCQllZGNfYmlzdF9jbWRfbGVuID0gRURDX1JFRyhFRENfQklTVF9DTURfTEVOX0EsIGlkeCk7CisJCWVkY19iaXN0X2NtZF9kYXRhX3BhdHRlcm4gPSBFRENfUkVHKEVEQ19CSVNUX0RBVEFfUEFUVEVSTl9BLAogCQkJCQkJICAgIGlkeCk7Ci0JCWVkY19iaXN0X3N0YXR1c19yZGF0YSA9IEVEQ19SRUcoRURDX0JJU1RfU1RBVFVTX1JEQVRBLAotCQkJCQkJICAgIGlkeCk7CisJCWVkY19iaXN0X3N0YXR1c19yZGF0YSA9IEVEQ19SRUcoRURDX0JJU1RfU1RBVFVTX1JEQVRBX0EsCisJCQkJCQlpZHgpOwogCX0gZWxzZSB7Ci0JCWVkY19iaXN0X2NtZCA9IEVEQ19SRUdfVDUoRURDX0hfQklTVF9DTUQsIGlkeCk7Ci0JCWVkY19iaXN0X2NtZF9hZGRyID0gRURDX1JFR19UNShFRENfSF9CSVNUX0NNRF9BRERSLCBpZHgpOwotCQllZGNfYmlzdF9jbWRfbGVuID0gRURDX1JFR19UNShFRENfSF9CSVNUX0NNRF9MRU4sIGlkeCk7CisJCWVkY19iaXN0X2NtZCA9IEVEQ19SRUdfVDUoRURDX0hfQklTVF9DTURfQSwgaWR4KTsKKwkJZWRjX2Jpc3RfY21kX2FkZHIgPSBFRENfUkVHX1Q1KEVEQ19IX0JJU1RfQ01EX0FERFJfQSwgaWR4KTsKKwkJZWRjX2Jpc3RfY21kX2xlbiA9IEVEQ19SRUdfVDUoRURDX0hfQklTVF9DTURfTEVOX0EsIGlkeCk7CiAJCWVkY19iaXN0X2NtZF9kYXRhX3BhdHRlcm4gPQotCQkJRURDX1JFR19UNShFRENfSF9CSVNUX0RBVEFfUEFUVEVSTiwgaWR4KTsKKwkJCUVEQ19SRUdfVDUoRURDX0hfQklTVF9EQVRBX1BBVFRFUk5fQSwgaWR4KTsKIAkJZWRjX2Jpc3Rfc3RhdHVzX3JkYXRhID0KLQkJCSBFRENfUkVHX1Q1KEVEQ19IX0JJU1RfU1RBVFVTX1JEQVRBLCBpZHgpOworCQkJIEVEQ19SRUdfVDUoRURDX0hfQklTVF9TVEFUVVNfUkRBVEFfQSwgaWR4KTsKIAl9CiAKLQlpZiAodDRfcmVhZF9yZWcoYWRhcCwgZWRjX2Jpc3RfY21kKSAmIFNUQVJUX0JJU1QpCisJaWYgKHQ0X3JlYWRfcmVnKGFkYXAsIGVkY19iaXN0X2NtZCkgJiBTVEFSVF9CSVNUX0YpCiAJCXJldHVybiAtRUJVU1k7CiAJdDRfd3JpdGVfcmVnKGFkYXAsIGVkY19iaXN0X2NtZF9hZGRyLCBhZGRyICYgfjB4M2ZVKTsKIAl0NF93cml0ZV9yZWcoYWRhcCwgZWRjX2Jpc3RfY21kX2xlbiwgNjQpOwogCXQ0X3dyaXRlX3JlZyhhZGFwLCBlZGNfYmlzdF9jbWRfZGF0YV9wYXR0ZXJuLCAweGMpOwogCXQ0X3dyaXRlX3JlZyhhZGFwLCBlZGNfYmlzdF9jbWQsCi0JCSAgICAgQklTVF9PUENPREUoMSkgfCBCSVNUX0NNRF9HQVAoMSkgfCBTVEFSVF9CSVNUKTsKLQlpID0gdDRfd2FpdF9vcF9kb25lKGFkYXAsIGVkY19iaXN0X2NtZCwgU1RBUlRfQklTVCwgMCwgMTAsIDEpOworCQkgICAgIEJJU1RfT1BDT0RFX1YoMSkgfCBCSVNUX0NNRF9HQVBfVigxKSB8IFNUQVJUX0JJU1RfRik7CisJaSA9IHQ0X3dhaXRfb3BfZG9uZShhZGFwLCBlZGNfYmlzdF9jbWQsIFNUQVJUX0JJU1RfRiwgMCwgMTAsIDEpOwogCWlmIChpKQogCQlyZXR1cm4gaTsKIApAQCAtNTA1LDEzICs1MDYsMTMgQEAKIAkgKiB0aGUgYWRkcmVzcyBpcyByZWxhdGl2ZSB0byBCQVIwLgogCSAqLwogCW1lbV9yZWcgPSB0NF9yZWFkX3JlZyhhZGFwLAotCQkJICAgICAgUENJRV9NRU1fQUNDRVNTX1JFRyhQQ0lFX01FTV9BQ0NFU1NfQkFTRV9XSU4sCisJCQkgICAgICBQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19CQVNFX1dJTl9BLAogCQkJCQkJICB3aW4pKTsKLQltZW1fYXBlcnR1cmUgPSAxIDw8IChHRVRfV0lORE9XKG1lbV9yZWcpICsgMTApOwotCW1lbV9iYXNlID0gR0VUX1BDSUVPRlNUKG1lbV9yZWcpIDw8IDEwOworCW1lbV9hcGVydHVyZSA9IDEgPDwgKFdJTkRPV19HKG1lbV9yZWcpICsgV0lORE9XX1NISUZUX1gpOworCW1lbV9iYXNlID0gUENJRU9GU1RfRyhtZW1fcmVnKSA8PCBQQ0lFT0ZTVF9TSElGVF9YOwogCWlmIChpc190NChhZGFwLT5wYXJhbXMuY2hpcCkpCiAJCW1lbV9iYXNlIC09IGFkYXAtPnQ0X2JhcjA7Ci0Jd2luX3BmID0gaXNfdDQoYWRhcC0+cGFyYW1zLmNoaXApID8gMCA6IFZfUEZOVU0oYWRhcC0+Zm4pOworCXdpbl9wZiA9IGlzX3Q0KGFkYXAtPnBhcmFtcy5jaGlwKSA/IDAgOiBQRk5VTV9WKGFkYXAtPmZuKTsKIAogCS8qIENhbGN1bGF0ZSBvdXIgaW5pdGlhbCBQQ0ktRSBNZW1vcnkgV2luZG93IFBvc2l0aW9uIGFuZCBPZmZzZXQgaW50bwogCSAqIHRoYXQgV2luZG93LgpAQCAtNTI0LDEwICs1MjUsMTAgQEAKIAkgKiBhdHRlbXB0IHRvIHVzZSB0aGUgbmV3IHZhbHVlLikKIAkgKi8KIAl0NF93cml0ZV9yZWcoYWRhcCwKLQkJICAgICBQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19PRkZTRVQsIHdpbiksCisJCSAgICAgUENJRV9NRU1fQUNDRVNTX1JFRyhQQ0lFX01FTV9BQ0NFU1NfT0ZGU0VUX0EsIHdpbiksCiAJCSAgICAgcG9zIHwgd2luX3BmKTsKIAl0NF9yZWFkX3JlZyhhZGFwLAotCQkgICAgUENJRV9NRU1fQUNDRVNTX1JFRyhQQ0lFX01FTV9BQ0NFU1NfT0ZGU0VULCB3aW4pKTsKKwkJICAgIFBDSUVfTUVNX0FDQ0VTU19SRUcoUENJRV9NRU1fQUNDRVNTX09GRlNFVF9BLCB3aW4pKTsKIAogCS8qIFRyYW5zZmVyIGRhdGEgdG8vZnJvbSB0aGUgYWRhcHRlciBhcyBsb25nIGFzIHRoZXJlJ3MgYW4gaW50ZWdyYWwKIAkgKiBudW1iZXIgb2YgMzItYml0IHRyYW5zZmVycyB0byBjb21wbGV0ZS4KQEAgLTU1MiwxMSArNTUzLDExIEBACiAJCQlwb3MgKz0gbWVtX2FwZXJ0dXJlOwogCQkJb2Zmc2V0ID0gMDsKIAkJCXQ0X3dyaXRlX3JlZyhhZGFwLAotCQkJCSAgICAgUENJRV9NRU1fQUNDRVNTX1JFRyhQQ0lFX01FTV9BQ0NFU1NfT0ZGU0VULAotCQkJCQkJCSB3aW4pLCBwb3MgfCB3aW5fcGYpOworCQkJCVBDSUVfTUVNX0FDQ0VTU19SRUcoUENJRV9NRU1fQUNDRVNTX09GRlNFVF9BLAorCQkJCQkJICAgIHdpbiksIHBvcyB8IHdpbl9wZik7CiAJCQl0NF9yZWFkX3JlZyhhZGFwLAotCQkJCSAgICBQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19PRkZTRVQsCi0JCQkJCQkJd2luKSk7CisJCQkJUENJRV9NRU1fQUNDRVNTX1JFRyhQQ0lFX01FTV9BQ0NFU1NfT0ZGU0VUX0EsCisJCQkJCQkgICAgd2luKSk7CiAJCX0KIAl9CiAKQEAgLTc2MCwxNCArNzYxLDEzIEBACiAKIAlpZiAoIWJ5dGVfY250IHx8IGJ5dGVfY250ID4gNCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFNGX09QKSAmIFNGX0JVU1kpCisJaWYgKHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFNGX09QX0EpICYgU0ZfQlVTWV9GKQogCQlyZXR1cm4gLUVCVVNZOwotCWNvbnQgPSBjb250ID8gU0ZfQ09OVCA6IDA7Ci0JbG9jayA9IGxvY2sgPyBTRl9MT0NLIDogMDsKLQl0NF93cml0ZV9yZWcoYWRhcHRlciwgU0ZfT1AsIGxvY2sgfCBjb250IHwgQllURUNOVChieXRlX2NudCAtIDEpKTsKLQlyZXQgPSB0NF93YWl0X29wX2RvbmUoYWRhcHRlciwgU0ZfT1AsIFNGX0JVU1ksIDAsIFNGX0FUVEVNUFRTLCA1KTsKKwl0NF93cml0ZV9yZWcoYWRhcHRlciwgU0ZfT1BfQSwgU0ZfTE9DS19WKGxvY2spIHwKKwkJICAgICBTRl9DT05UX1YoY29udCkgfCBCWVRFQ05UX1YoYnl0ZV9jbnQgLSAxKSk7CisJcmV0ID0gdDRfd2FpdF9vcF9kb25lKGFkYXB0ZXIsIFNGX09QX0EsIFNGX0JVU1lfRiwgMCwgU0ZfQVRURU1QVFMsIDUpOwogCWlmICghcmV0KQotCQkqdmFscCA9IHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFNGX0RBVEEpOworCQkqdmFscCA9IHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFNGX0RBVEFfQSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNzg4LDE0ICs3ODgsMTIgQEAKIHsKIAlpZiAoIWJ5dGVfY250IHx8IGJ5dGVfY250ID4gNCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFNGX09QKSAmIFNGX0JVU1kpCisJaWYgKHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFNGX09QX0EpICYgU0ZfQlVTWV9GKQogCQlyZXR1cm4gLUVCVVNZOwotCWNvbnQgPSBjb250ID8gU0ZfQ09OVCA6IDA7Ci0JbG9jayA9IGxvY2sgPyBTRl9MT0NLIDogMDsKLQl0NF93cml0ZV9yZWcoYWRhcHRlciwgU0ZfREFUQSwgdmFsKTsKLQl0NF93cml0ZV9yZWcoYWRhcHRlciwgU0ZfT1AsIGxvY2sgfAotCQkgICAgIGNvbnQgfCBCWVRFQ05UKGJ5dGVfY250IC0gMSkgfCBPUF9XUik7Ci0JcmV0dXJuIHQ0X3dhaXRfb3BfZG9uZShhZGFwdGVyLCBTRl9PUCwgU0ZfQlVTWSwgMCwgU0ZfQVRURU1QVFMsIDUpOworCXQ0X3dyaXRlX3JlZyhhZGFwdGVyLCBTRl9EQVRBX0EsIHZhbCk7CisJdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIFNGX09QX0EsIFNGX0xPQ0tfVihsb2NrKSB8CisJCSAgICAgU0ZfQ09OVF9WKGNvbnQpIHwgQllURUNOVF9WKGJ5dGVfY250IC0gMSkgfCBPUF9WKDEpKTsKKwlyZXR1cm4gdDRfd2FpdF9vcF9kb25lKGFkYXB0ZXIsIFNGX09QX0EsIFNGX0JVU1lfRiwgMCwgU0ZfQVRURU1QVFMsIDUpOwogfQogCiAvKioKQEAgLTgzNyw4ICs4MzUsOCBAQAogICoJKGkuZS4sIGJpZy1lbmRpYW4pLCBvdGhlcndpc2UgYXMgMzItYml0IHdvcmRzIGluIHRoZSBwbGF0Zm9ybSdzCiAgKgluYXR1cmFsIGVuZGlhbmVzcy4KICAqLwotc3RhdGljIGludCB0NF9yZWFkX2ZsYXNoKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgYWRkciwKLQkJCSB1bnNpZ25lZCBpbnQgbndvcmRzLCB1MzIgKmRhdGEsIGludCBieXRlX29yaWVudGVkKQoraW50IHQ0X3JlYWRfZmxhc2goc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHVuc2lnbmVkIGludCBhZGRyLAorCQkgIHVuc2lnbmVkIGludCBud29yZHMsIHUzMiAqZGF0YSwgaW50IGJ5dGVfb3JpZW50ZWQpCiB7CiAJaW50IHJldDsKIApAQCAtODU0LDcgKzg1Miw3IEBACiAJZm9yICggOyBud29yZHM7IG53b3Jkcy0tLCBkYXRhKyspIHsKIAkJcmV0ID0gc2YxX3JlYWQoYWRhcHRlciwgNCwgbndvcmRzID4gMSwgbndvcmRzID09IDEsIGRhdGEpOwogCQlpZiAobndvcmRzID09IDEpCi0JCQl0NF93cml0ZV9yZWcoYWRhcHRlciwgU0ZfT1AsIDApOyAgICAvKiB1bmxvY2sgU0YgKi8KKwkJCXQ0X3dyaXRlX3JlZyhhZGFwdGVyLCBTRl9PUF9BLCAwKTsgICAgLyogdW5sb2NrIFNGICovCiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQlpZiAoYnl0ZV9vcmllbnRlZCkKQEAgLTkwMiw3ICs5MDAsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gdW5sb2NrOwogCi0JdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIFNGX09QLCAwKTsgICAgLyogdW5sb2NrIFNGICovCisJdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIFNGX09QX0EsIDApOyAgICAvKiB1bmxvY2sgU0YgKi8KIAogCS8qIFJlYWQgdGhlIHBhZ2UgdG8gdmVyaWZ5IHRoZSB3cml0ZSBzdWNjZWVkZWQgKi8KIAlyZXQgPSB0NF9yZWFkX2ZsYXNoKGFkYXB0ZXIsIGFkZHIgJiB+MHhmZiwgQVJSQVlfU0laRShidWYpLCBidWYsIDEpOwpAQCAtOTE4LDcgKzkxNiw3IEBACiAJcmV0dXJuIDA7CiAKIHVubG9jazoKLQl0NF93cml0ZV9yZWcoYWRhcHRlciwgU0ZfT1AsIDApOyAgICAvKiB1bmxvY2sgU0YgKi8KKwl0NF93cml0ZV9yZWcoYWRhcHRlciwgU0ZfT1BfQSwgMCk7ICAgIC8qIHVubG9jayBTRiAqLwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTk1MCw2ICs5NDgsNDMgQEAKIAkJCSAgICAgMSwgdmVycywgMCk7CiB9CiAKKy8qKgorICoJdDRfZ2V0X2V4cHJvbV92ZXJzaW9uIC0gcmV0dXJuIHRoZSBFeHBhbnNpb24gUk9NIHZlcnNpb24gKGlmIGFueSkKKyAqCUBhZGFwdGVyOiB0aGUgYWRhcHRlcgorICoJQHZlcnM6IHdoZXJlIHRvIHBsYWNlIHRoZSB2ZXJzaW9uCisgKgorICoJUmVhZHMgdGhlIEV4cGFuc2lvbiBST00gaGVhZGVyIGZyb20gRkxBU0ggYW5kIHJldHVybnMgdGhlIHZlcnNpb24KKyAqCW51bWJlciAoaWYgcHJlc2VudCkgdGhyb3VnaCB0aGUgQHZlcnMgcmV0dXJuIHZhbHVlIHBvaW50ZXIuICBXZSByZXR1cm4KKyAqCXRoaXMgaW4gdGhlIEZpcm13YXJlIFZlcnNpb24gRm9ybWF0IHNpbmNlIGl0J3MgY29udmVuaWVudC4gIFJldHVybgorICoJMCBvbiBzdWNjZXNzLCAtRU5PRU5UIGlmIG5vIEV4cGFuc2lvbiBST00gaXMgcHJlc2VudC4KKyAqLworaW50IHQ0X2dldF9leHByb21fdmVyc2lvbihzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdTMyICp2ZXJzKQoreworCXN0cnVjdCBleHByb21faGVhZGVyIHsKKwkJdW5zaWduZWQgY2hhciBoZHJfYXJyWzE2XTsJLyogbXVzdCBzdGFydCB3aXRoIDB4NTVhYSAqLworCQl1bnNpZ25lZCBjaGFyIGhkcl92ZXJbNF07CS8qIEV4cGFuc2lvbiBST00gdmVyc2lvbiAqLworCX0gKmhkcjsKKwl1MzIgZXhwcm9tX2hlYWRlcl9idWZbRElWX1JPVU5EX1VQKHNpemVvZihzdHJ1Y3QgZXhwcm9tX2hlYWRlciksCisJCQkJCSAgIHNpemVvZih1MzIpKV07CisJaW50IHJldDsKKworCXJldCA9IHQ0X3JlYWRfZmxhc2goYWRhcCwgRkxBU0hfRVhQX1JPTV9TVEFSVCwKKwkJCSAgICBBUlJBWV9TSVpFKGV4cHJvbV9oZWFkZXJfYnVmKSwgZXhwcm9tX2hlYWRlcl9idWYsCisJCQkgICAgMCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWhkciA9IChzdHJ1Y3QgZXhwcm9tX2hlYWRlciAqKWV4cHJvbV9oZWFkZXJfYnVmOworCWlmIChoZHItPmhkcl9hcnJbMF0gIT0gMHg1NSB8fCBoZHItPmhkcl9hcnJbMV0gIT0gMHhhYSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwkqdmVycyA9IChGV19IRFJfRldfVkVSX01BSk9SX1YoaGRyLT5oZHJfdmVyWzBdKSB8CisJCSBGV19IRFJfRldfVkVSX01JTk9SX1YoaGRyLT5oZHJfdmVyWzFdKSB8CisJCSBGV19IRFJfRldfVkVSX01JQ1JPX1YoaGRyLT5oZHJfdmVyWzJdKSB8CisJCSBGV19IRFJfRldfVkVSX0JVSUxEX1YoaGRyLT5oZHJfdmVyWzNdKSk7CisJcmV0dXJuIDA7Cit9CisKIC8qIElzIHRoZSBnaXZlbiBmaXJtd2FyZSBBUEkgY29tcGF0aWJsZSB3aXRoIHRoZSBvbmUgdGhlIGRyaXZlciB3YXMgY29tcGlsZWQKICAqIHdpdGg/CiAgKi8KQEAgLTExMTMsNyArMTE0OCw3IEBACiAJCX0KIAkJc3RhcnQrKzsKIAl9Ci0JdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIFNGX09QLCAwKTsgICAgLyogdW5sb2NrIFNGICovCisJdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIFNGX09QX0EsIDApOyAgICAvKiB1bmxvY2sgU0YgKi8KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMjQxLDYgKzEyNzYsNDUgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqCXQ0X2Z3Y2FjaGUgLSBmaXJtd2FyZSBjYWNoZSBvcGVyYXRpb24KKyAqCUBhZGFwOiB0aGUgYWRhcHRlcgorICoJQG9wICA6IHRoZSBvcGVyYXRpb24gKGZsdXNoIG9yIGZsdXNoIGFuZCBpbnZhbGlkYXRlKQorICovCitpbnQgdDRfZndjYWNoZShzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgZW51bSBmd19wYXJhbXNfcGFyYW1fZGV2X2Z3Y2FjaGUgb3ApCit7CisJc3RydWN0IGZ3X3BhcmFtc19jbWQgYzsKKworCW1lbXNldCgmYywgMCwgc2l6ZW9mKGMpKTsKKwljLm9wX3RvX3ZmbiA9CisJCWNwdV90b19iZTMyKEZXX0NNRF9PUF9WKEZXX1BBUkFNU19DTUQpIHwKKwkJCSAgICBGV19DTURfUkVRVUVTVF9GIHwgRldfQ01EX1dSSVRFX0YgfAorCQkJICAgIEZXX1BBUkFNU19DTURfUEZOX1YoYWRhcC0+Zm4pIHwKKwkJCSAgICBGV19QQVJBTVNfQ01EX1ZGTl9WKDApKTsKKwljLnJldHZhbF9sZW4xNiA9IGNwdV90b19iZTMyKEZXX0xFTjE2KGMpKTsKKwljLnBhcmFtWzBdLm1uZW0gPQorCQljcHVfdG9fYmUzMihGV19QQVJBTVNfTU5FTV9WKEZXX1BBUkFNU19NTkVNX0RFVikgfAorCQkJICAgIEZXX1BBUkFNU19QQVJBTV9YX1YoRldfUEFSQU1TX1BBUkFNX0RFVl9GV0NBQ0hFKSk7CisJYy5wYXJhbVswXS52YWwgPSAoX19mb3JjZSBfX2JlMzIpb3A7CisKKwlyZXR1cm4gdDRfd3JfbWJveChhZGFwLCBhZGFwLT5tYm94LCAmYywgc2l6ZW9mKGMpLCBOVUxMKTsKK30KKwordm9pZCB0NF91bHByeF9yZWFkX2xhKHN0cnVjdCBhZGFwdGVyICphZGFwLCB1MzIgKmxhX2J1ZikKK3sKKwl1bnNpZ25lZCBpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJdTMyICpwID0gbGFfYnVmICsgaTsKKworCQl0NF93cml0ZV9yZWcoYWRhcCwgVUxQX1JYX0xBX0NUTF9BLCBpKTsKKwkJaiA9IHQ0X3JlYWRfcmVnKGFkYXAsIFVMUF9SWF9MQV9XUlBUUl9BKTsKKwkJdDRfd3JpdGVfcmVnKGFkYXAsIFVMUF9SWF9MQV9SRFBUUl9BLCBqKTsKKwkJZm9yIChqID0gMDsgaiA8IFVMUFJYX0xBX1NJWkU7IGorKywgcCArPSA4KQorCQkJKnAgPSB0NF9yZWFkX3JlZyhhZGFwLCBVTFBfUlhfTEFfUkREQVRBX0EpOworCX0KK30KKwogI2RlZmluZSBBRFZFUlRfTUFTSyAoRldfUE9SVF9DQVBfU1BFRURfMTAwTSB8IEZXX1BPUlRfQ0FQX1NQRUVEXzFHIHxcCiAJCSAgICAgRldfUE9SVF9DQVBfU1BFRURfMTBHIHwgRldfUE9SVF9DQVBfU1BFRURfNDBHIHwgXAogCQkgICAgIEZXX1BPUlRfQ0FQX0FORUcpCkBAIC0xMzY1LDk1ICsxNDM5LDk3IEBACiBzdGF0aWMgdm9pZCBwY2llX2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGludHJfaW5mbyBzeXNidXNfaW50cl9pbmZvW10gPSB7Ci0JCXsgUk5QUCwgIlJYTlAgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBSUENQLCAiUlhQQyBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFJDSVAsICJSWENJRiBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFJDQ1AsICJSeCBjb21wbGV0aW9ucyBjb250cm9sIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUkZUUCwgIlJYRlQgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBSTlBQX0YsICJSWE5QIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgUlBDUF9GLCAiUlhQQyBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFJDSVBfRiwgIlJYQ0lGIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgUkNDUF9GLCAiUnggY29tcGxldGlvbnMgY29udHJvbCBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFJGVFBfRiwgIlJYRlQgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKIAkJeyAwIH0KIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIHBjaWVfcG9ydF9pbnRyX2luZm9bXSA9IHsKLQkJeyBUUENQLCAiVFhQQyBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFROUFAsICJUWE5QIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgVEZUUCwgIlRYRlQgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBUQ0FQLCAiVFhDQSBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFRDSVAsICJUWENJRiBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFJDQVAsICJSWENBIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgT1RERCwgIm91dGJvdW5kIHJlcXVlc3QgVExQIGRpc2NhcmRlZCIsIC0xLCAxIH0sCi0JCXsgUkRQRSwgIlJ4IGRhdGEgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBURFVFLCAiVHggdW5jb3JyZWN0YWJsZSBkYXRhIGVycm9yIiwgLTEsIDEgfSwKKwkJeyBUUENQX0YsICJUWFBDIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgVE5QUF9GLCAiVFhOUCBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFRGVFBfRiwgIlRYRlQgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBUQ0FQX0YsICJUWENBIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgVENJUF9GLCAiVFhDSUYgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBSQ0FQX0YsICJSWENBIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgT1RERF9GLCAib3V0Ym91bmQgcmVxdWVzdCBUTFAgZGlzY2FyZGVkIiwgLTEsIDEgfSwKKwkJeyBSRFBFX0YsICJSeCBkYXRhIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgVERVRV9GLCAiVHggdW5jb3JyZWN0YWJsZSBkYXRhIGVycm9yIiwgLTEsIDEgfSwKIAkJeyAwIH0KIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIHBjaWVfaW50cl9pbmZvW10gPSB7Ci0JCXsgTVNJQUREUkxQRVJSLCAiTVNJIEFkZHJMIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgTVNJQUREUkhQRVJSLCAiTVNJIEFkZHJIIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgTVNJREFUQVBFUlIsICJNU0kgZGF0YSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IE1TSVhBRERSTFBFUlIsICJNU0ktWCBBZGRyTCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IE1TSVhBRERSSFBFUlIsICJNU0ktWCBBZGRySCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IE1TSVhEQVRBUEVSUiwgIk1TSS1YIGRhdGEgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNU0lYRElQRVJSLCAiTVNJLVggREkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBQSU9DUExQRVJSLCAiUENJIFBJTyBjb21wbGV0aW9uIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBQSU9SRVFQRVJSLCAiUENJIFBJTyByZXF1ZXN0IEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBUQVJUQUdQRVJSLCAiUENJIFBDSSB0YXJnZXQgdGFnIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBDQ05UUEVSUiwgIlBDSSBDTUQgY2hhbm5lbCBjb3VudCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IENSRVFQRVJSLCAiUENJIENNRCBjaGFubmVsIHJlcXVlc3QgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBDUlNQUEVSUiwgIlBDSSBDTUQgY2hhbm5lbCByZXNwb25zZSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IERDTlRQRVJSLCAiUENJIERNQSBjaGFubmVsIGNvdW50IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgRFJFUVBFUlIsICJQQ0kgRE1BIGNoYW5uZWwgcmVxdWVzdCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IERSU1BQRVJSLCAiUENJIERNQSBjaGFubmVsIHJlc3BvbnNlIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgSENOVFBFUlIsICJQQ0kgSE1BIGNoYW5uZWwgY291bnQgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBIUkVRUEVSUiwgIlBDSSBITUEgY2hhbm5lbCByZXF1ZXN0IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgSFJTUFBFUlIsICJQQ0kgSE1BIGNoYW5uZWwgcmVzcG9uc2UgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBDRkdTTlBQRVJSLCAiUENJIGNvbmZpZyBzbm9vcCBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgRklEUEVSUiwgIlBDSSBGSUQgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBJTlRYQ0xSUEVSUiwgIlBDSSBJTlR4IGNsZWFyIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgTUFUQUdQRVJSLCAiUENJIE1BIHRhZyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFBJT1RBR1BFUlIsICJQQ0kgUElPIHRhZyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFJYQ1BMUEVSUiwgIlBDSSBSeCBjb21wbGV0aW9uIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUlhXUlBFUlIsICJQQ0kgUnggd3JpdGUgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBSUExQRVJSLCAiUENJIHJlcGxheSBidWZmZXIgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBQQ0lFU0lOVCwgIlBDSSBjb3JlIHNlY29uZGFyeSBmYXVsdCIsIC0xLCAxIH0sCi0JCXsgUENJRVBJTlQsICJQQ0kgY29yZSBwcmltYXJ5IGZhdWx0IiwgLTEsIDEgfSwKLQkJeyBVTlhTUExDUExFUlIsICJQQ0kgdW5leHBlY3RlZCBzcGxpdCBjb21wbGV0aW9uIGVycm9yIiwgLTEsIDAgfSwKKwkJeyBNU0lBRERSTFBFUlJfRiwgIk1TSSBBZGRyTCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IE1TSUFERFJIUEVSUl9GLCAiTVNJIEFkZHJIIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgTVNJREFUQVBFUlJfRiwgIk1TSSBkYXRhIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgTVNJWEFERFJMUEVSUl9GLCAiTVNJLVggQWRkckwgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBNU0lYQUREUkhQRVJSX0YsICJNU0ktWCBBZGRySCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IE1TSVhEQVRBUEVSUl9GLCAiTVNJLVggZGF0YSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IE1TSVhESVBFUlJfRiwgIk1TSS1YIERJIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgUElPQ1BMUEVSUl9GLCAiUENJIFBJTyBjb21wbGV0aW9uIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBQSU9SRVFQRVJSX0YsICJQQ0kgUElPIHJlcXVlc3QgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFRBUlRBR1BFUlJfRiwgIlBDSSBQQ0kgdGFyZ2V0IHRhZyBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgQ0NOVFBFUlJfRiwgIlBDSSBDTUQgY2hhbm5lbCBjb3VudCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IENSRVFQRVJSX0YsICJQQ0kgQ01EIGNoYW5uZWwgcmVxdWVzdCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IENSU1BQRVJSX0YsICJQQ0kgQ01EIGNoYW5uZWwgcmVzcG9uc2UgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBEQ05UUEVSUl9GLCAiUENJIERNQSBjaGFubmVsIGNvdW50IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgRFJFUVBFUlJfRiwgIlBDSSBETUEgY2hhbm5lbCByZXF1ZXN0IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgRFJTUFBFUlJfRiwgIlBDSSBETUEgY2hhbm5lbCByZXNwb25zZSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IEhDTlRQRVJSX0YsICJQQ0kgSE1BIGNoYW5uZWwgY291bnQgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBIUkVRUEVSUl9GLCAiUENJIEhNQSBjaGFubmVsIHJlcXVlc3QgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBIUlNQUEVSUl9GLCAiUENJIEhNQSBjaGFubmVsIHJlc3BvbnNlIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgQ0ZHU05QUEVSUl9GLCAiUENJIGNvbmZpZyBzbm9vcCBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgRklEUEVSUl9GLCAiUENJIEZJRCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IElOVFhDTFJQRVJSX0YsICJQQ0kgSU5UeCBjbGVhciBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IE1BVEFHUEVSUl9GLCAiUENJIE1BIHRhZyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFBJT1RBR1BFUlJfRiwgIlBDSSBQSU8gdGFnIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgUlhDUExQRVJSX0YsICJQQ0kgUnggY29tcGxldGlvbiBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFJYV1JQRVJSX0YsICJQQ0kgUnggd3JpdGUgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBSUExQRVJSX0YsICJQQ0kgcmVwbGF5IGJ1ZmZlciBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFBDSUVTSU5UX0YsICJQQ0kgY29yZSBzZWNvbmRhcnkgZmF1bHQiLCAtMSwgMSB9LAorCQl7IFBDSUVQSU5UX0YsICJQQ0kgY29yZSBwcmltYXJ5IGZhdWx0IiwgLTEsIDEgfSwKKwkJeyBVTlhTUExDUExFUlJfRiwgIlBDSSB1bmV4cGVjdGVkIHNwbGl0IGNvbXBsZXRpb24gZXJyb3IiLAorCQkgIC0xLCAwIH0sCiAJCXsgMCB9CiAJfTsKIAogCXN0YXRpYyBzdHJ1Y3QgaW50cl9pbmZvIHQ1X3BjaWVfaW50cl9pbmZvW10gPSB7Ci0JCXsgTVNUR1JQUEVSUiwgIk1hc3RlciBSZXNwb25zZSBSZWFkIFF1ZXVlIHBhcml0eSBlcnJvciIsCisJCXsgTVNUR1JQUEVSUl9GLCAiTWFzdGVyIFJlc3BvbnNlIFJlYWQgUXVldWUgcGFyaXR5IGVycm9yIiwKIAkJICAtMSwgMSB9LAotCQl7IE1TVFRJTUVPVVRQRVJSLCAiTWFzdGVyIFRpbWVvdXQgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IE1TSVhTVElQRVJSLCAiTVNJLVggU1RJIFNSQU0gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNU0lYQUREUkxQRVJSLCAiTVNJLVggQWRkckwgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNU0lYQUREUkhQRVJSLCAiTVNJLVggQWRkckggcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNU0lYREFUQVBFUlIsICJNU0ktWCBkYXRhIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgTVNJWERJUEVSUiwgIk1TSS1YIERJIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUElPQ1BMR1JQUEVSUiwgIlBDSSBQSU8gY29tcGxldGlvbiBHcm91cCBGSUZPIHBhcml0eSBlcnJvciIsCisJCXsgTVNUVElNRU9VVFBFUlJfRiwgIk1hc3RlciBUaW1lb3V0IEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBNU0lYU1RJUEVSUl9GLCAiTVNJLVggU1RJIFNSQU0gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBNU0lYQUREUkxQRVJSX0YsICJNU0ktWCBBZGRyTCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IE1TSVhBRERSSFBFUlJfRiwgIk1TSS1YIEFkZHJIIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgTVNJWERBVEFQRVJSX0YsICJNU0ktWCBkYXRhIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgTVNJWERJUEVSUl9GLCAiTVNJLVggREkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBQSU9DUExHUlBQRVJSX0YsICJQQ0kgUElPIGNvbXBsZXRpb24gR3JvdXAgRklGTyBwYXJpdHkgZXJyb3IiLAogCQkgIC0xLCAxIH0sCi0JCXsgUElPUkVRR1JQUEVSUiwgIlBDSSBQSU8gcmVxdWVzdCBHcm91cCBGSUZPIHBhcml0eSBlcnJvciIsCisJCXsgUElPUkVRR1JQUEVSUl9GLCAiUENJIFBJTyByZXF1ZXN0IEdyb3VwIEZJRk8gcGFyaXR5IGVycm9yIiwKIAkJICAtMSwgMSB9LAotCQl7IFRBUlRBR1BFUlIsICJQQ0kgUENJIHRhcmdldCB0YWcgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IE1TVFRBR1FQRVJSLCAiUENJIG1hc3RlciB0YWcgcXVldWUgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBDUkVRUEVSUiwgIlBDSSBDTUQgY2hhbm5lbCByZXF1ZXN0IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgQ1JTUFBFUlIsICJQQ0kgQ01EIGNoYW5uZWwgcmVzcG9uc2UgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBEUkVRV1JQRVJSLCAiUENJIERNQSBjaGFubmVsIHdyaXRlIHJlcXVlc3QgcGFyaXR5IGVycm9yIiwKKwkJeyBUQVJUQUdQRVJSX0YsICJQQ0kgUENJIHRhcmdldCB0YWcgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IE1TVFRBR1FQRVJSX0YsICJQQ0kgbWFzdGVyIHRhZyBxdWV1ZSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IENSRVFQRVJSX0YsICJQQ0kgQ01EIGNoYW5uZWwgcmVxdWVzdCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IENSU1BQRVJSX0YsICJQQ0kgQ01EIGNoYW5uZWwgcmVzcG9uc2UgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBEUkVRV1JQRVJSX0YsICJQQ0kgRE1BIGNoYW5uZWwgd3JpdGUgcmVxdWVzdCBwYXJpdHkgZXJyb3IiLAogCQkgIC0xLCAxIH0sCi0JCXsgRFJFUVBFUlIsICJQQ0kgRE1BIGNoYW5uZWwgcmVxdWVzdCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IERSU1BQRVJSLCAiUENJIERNQSBjaGFubmVsIHJlc3BvbnNlIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgSFJFUVdSUEVSUiwgIlBDSSBITUEgY2hhbm5lbCBjb3VudCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IEhSRVFQRVJSLCAiUENJIEhNQSBjaGFubmVsIHJlcXVlc3QgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBIUlNQUEVSUiwgIlBDSSBITUEgY2hhbm5lbCByZXNwb25zZSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IENGR1NOUFBFUlIsICJQQ0kgY29uZmlnIHNub29wIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBGSURQRVJSLCAiUENJIEZJRCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFZGSURQRVJSLCAiUENJIElOVHggY2xlYXIgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNQUdSUFBFUlIsICJQQ0kgTUEgZ3JvdXAgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFBJT1RBR1BFUlIsICJQQ0kgUElPIHRhZyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IElQUlhIRFJHUlBQRVJSLCAiUENJIElQIFJ4IGhlYWRlciBncm91cCBwYXJpdHkgZXJyb3IiLAorCQl7IERSRVFQRVJSX0YsICJQQ0kgRE1BIGNoYW5uZWwgcmVxdWVzdCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IERSU1BQRVJSX0YsICJQQ0kgRE1BIGNoYW5uZWwgcmVzcG9uc2UgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBIUkVRV1JQRVJSX0YsICJQQ0kgSE1BIGNoYW5uZWwgY291bnQgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBIUkVRUEVSUl9GLCAiUENJIEhNQSBjaGFubmVsIHJlcXVlc3QgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBIUlNQUEVSUl9GLCAiUENJIEhNQSBjaGFubmVsIHJlc3BvbnNlIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgQ0ZHU05QUEVSUl9GLCAiUENJIGNvbmZpZyBzbm9vcCBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgRklEUEVSUl9GLCAiUENJIEZJRCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFZGSURQRVJSX0YsICJQQ0kgSU5UeCBjbGVhciBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IE1BR1JQUEVSUl9GLCAiUENJIE1BIGdyb3VwIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBQSU9UQUdQRVJSX0YsICJQQ0kgUElPIHRhZyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IElQUlhIRFJHUlBQRVJSX0YsICJQQ0kgSVAgUnggaGVhZGVyIGdyb3VwIHBhcml0eSBlcnJvciIsCiAJCSAgLTEsIDEgfSwKLQkJeyBJUFJYREFUQUdSUFBFUlIsICJQQ0kgSVAgUnggZGF0YSBncm91cCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFJQTFBFUlIsICJQQ0kgSVAgcmVwbGF5IGJ1ZmZlciBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IElQU09UUEVSUiwgIlBDSSBJUCBTT1QgYnVmZmVyIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgVFJHVDFHUlBQRVJSLCAiUENJIFRSR1QxIGdyb3VwIEZJRk9zIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUkVBRFJTUEVSUiwgIk91dGJvdW5kIHJlYWQgZXJyb3IiLCAtMSwgMCB9LAorCQl7IElQUlhEQVRBR1JQUEVSUl9GLCAiUENJIElQIFJ4IGRhdGEgZ3JvdXAgcGFyaXR5IGVycm9yIiwKKwkJICAtMSwgMSB9LAorCQl7IFJQTFBFUlJfRiwgIlBDSSBJUCByZXBsYXkgYnVmZmVyIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgSVBTT1RQRVJSX0YsICJQQ0kgSVAgU09UIGJ1ZmZlciBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFRSR1QxR1JQUEVSUl9GLCAiUENJIFRSR1QxIGdyb3VwIEZJRk9zIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgUkVBRFJTUEVSUl9GLCAiT3V0Ym91bmQgcmVhZCBlcnJvciIsIC0xLCAwIH0sCiAJCXsgMCB9CiAJfTsKIApAQCAtMTQ2MSwxNSArMTUzNywxNSBAQAogCiAJaWYgKGlzX3Q0KGFkYXB0ZXItPnBhcmFtcy5jaGlwKSkKIAkJZmF0ID0gdDRfaGFuZGxlX2ludHJfc3RhdHVzKGFkYXB0ZXIsCi0JCQkJCSAgICBQQ0lFX0NPUkVfVVRMX1NZU1RFTV9CVVNfQUdFTlRfU1RBVFVTLAotCQkJCQkgICAgc3lzYnVzX2ludHJfaW5mbykgKworCQkJCVBDSUVfQ09SRV9VVExfU1lTVEVNX0JVU19BR0VOVF9TVEFUVVNfQSwKKwkJCQlzeXNidXNfaW50cl9pbmZvKSArCiAJCQl0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwKLQkJCQkJICAgICAgUENJRV9DT1JFX1VUTF9QQ0lfRVhQUkVTU19QT1JUX1NUQVRVUywKLQkJCQkJICAgICAgcGNpZV9wb3J0X2ludHJfaW5mbykgKwotCQkJdDRfaGFuZGxlX2ludHJfc3RhdHVzKGFkYXB0ZXIsIFBDSUVfSU5UX0NBVVNFLAorCQkJCQlQQ0lFX0NPUkVfVVRMX1BDSV9FWFBSRVNTX1BPUlRfU1RBVFVTX0EsCisJCQkJCXBjaWVfcG9ydF9pbnRyX2luZm8pICsKKwkJCXQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwdGVyLCBQQ0lFX0lOVF9DQVVTRV9BLAogCQkJCQkgICAgICBwY2llX2ludHJfaW5mbyk7CiAJZWxzZQotCQlmYXQgPSB0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgUENJRV9JTlRfQ0FVU0UsCisJCWZhdCA9IHQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwdGVyLCBQQ0lFX0lOVF9DQVVTRV9BLAogCQkJCQkgICAgdDVfcGNpZV9pbnRyX2luZm8pOwogCiAJaWYgKGZhdCkKQEAgLTE0ODMsMTEgKzE1NTksMTEgQEAKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGludHJfaW5mbyB0cF9pbnRyX2luZm9bXSA9IHsKIAkJeyAweDNmZmZmZmZmLCAiVFAgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBGTE1UWEZMU1RFTVBUWSwgIlRQIG91dCBvZiBUeCBwYWdlcyIsIC0xLCAxIH0sCisJCXsgRkxNVFhGTFNURU1QVFlfRiwgIlRQIG91dCBvZiBUeCBwYWdlcyIsIC0xLCAxIH0sCiAJCXsgMCB9CiAJfTsKIAotCWlmICh0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgVFBfSU5UX0NBVVNFLCB0cF9pbnRyX2luZm8pKQorCWlmICh0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgVFBfSU5UX0NBVVNFX0EsIHRwX2ludHJfaW5mbykpCiAJCXQ0X2ZhdGFsX2VycihhZGFwdGVyKTsKIH0KIApAQCAtMTQ5OSwxMDIgKzE1NzUsMTA3IEBACiAJdTY0IHY7CiAKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGludHJfaW5mbyBzZ2VfaW50cl9pbmZvW10gPSB7Ci0JCXsgRVJSX0NQTF9FWENFRURfSVFFX1NJWkUsCisJCXsgRVJSX0NQTF9FWENFRURfSVFFX1NJWkVfRiwKIAkJICAiU0dFIHJlY2VpdmVkIENQTCBleGNlZWRpbmcgSVFFIHNpemUiLCAtMSwgMSB9LAotCQl7IEVSUl9JTlZBTElEX0NJRFhfSU5DLAorCQl7IEVSUl9JTlZBTElEX0NJRFhfSU5DX0YsCiAJCSAgIlNHRSBHVFMgQ0lEWCBpbmNyZW1lbnQgdG9vIGxhcmdlIiwgLTEsIDAgfSwKLQkJeyBFUlJfQ1BMX09QQ09ERV8wLCAiU0dFIHJlY2VpdmVkIDAtbGVuZ3RoIENQTCIsIC0xLCAwIH0sCi0JCXsgREJGSUZPX0xQX0lOVCwgTlVMTCwgLTEsIDAsIHQ0X2RiX2Z1bGwgfSwKLQkJeyBEQkZJRk9fSFBfSU5ULCBOVUxMLCAtMSwgMCwgdDRfZGJfZnVsbCB9LAotCQl7IEVSUl9EUk9QUEVEX0RCLCBOVUxMLCAtMSwgMCwgdDRfZGJfZHJvcHBlZCB9LAotCQl7IEVSUl9EQVRBX0NQTF9PTl9ISUdIX1FJRDEgfCBFUlJfREFUQV9DUExfT05fSElHSF9RSUQwLAorCQl7IEVSUl9DUExfT1BDT0RFXzBfRiwgIlNHRSByZWNlaXZlZCAwLWxlbmd0aCBDUEwiLCAtMSwgMCB9LAorCQl7IERCRklGT19MUF9JTlRfRiwgTlVMTCwgLTEsIDAsIHQ0X2RiX2Z1bGwgfSwKKwkJeyBEQkZJRk9fSFBfSU5UX0YsIE5VTEwsIC0xLCAwLCB0NF9kYl9mdWxsIH0sCisJCXsgRVJSX0RST1BQRURfREJfRiwgTlVMTCwgLTEsIDAsIHQ0X2RiX2Ryb3BwZWQgfSwKKwkJeyBFUlJfREFUQV9DUExfT05fSElHSF9RSUQxX0YgfCBFUlJfREFUQV9DUExfT05fSElHSF9RSUQwX0YsCiAJCSAgIlNHRSBJUUlEID4gMTAyMyByZWNlaXZlZCBDUEwgZm9yIEZMIiwgLTEsIDAgfSwKLQkJeyBFUlJfQkFEX0RCX1BJRFgzLCAiU0dFIERCUCAzIHBpZHggaW5jcmVtZW50IHRvbyBsYXJnZSIsIC0xLAorCQl7IEVSUl9CQURfREJfUElEWDNfRiwgIlNHRSBEQlAgMyBwaWR4IGluY3JlbWVudCB0b28gbGFyZ2UiLCAtMSwKIAkJICAwIH0sCi0JCXsgRVJSX0JBRF9EQl9QSURYMiwgIlNHRSBEQlAgMiBwaWR4IGluY3JlbWVudCB0b28gbGFyZ2UiLCAtMSwKKwkJeyBFUlJfQkFEX0RCX1BJRFgyX0YsICJTR0UgREJQIDIgcGlkeCBpbmNyZW1lbnQgdG9vIGxhcmdlIiwgLTEsCiAJCSAgMCB9LAotCQl7IEVSUl9CQURfREJfUElEWDEsICJTR0UgREJQIDEgcGlkeCBpbmNyZW1lbnQgdG9vIGxhcmdlIiwgLTEsCisJCXsgRVJSX0JBRF9EQl9QSURYMV9GLCAiU0dFIERCUCAxIHBpZHggaW5jcmVtZW50IHRvbyBsYXJnZSIsIC0xLAogCQkgIDAgfSwKLQkJeyBFUlJfQkFEX0RCX1BJRFgwLCAiU0dFIERCUCAwIHBpZHggaW5jcmVtZW50IHRvbyBsYXJnZSIsIC0xLAorCQl7IEVSUl9CQURfREJfUElEWDBfRiwgIlNHRSBEQlAgMCBwaWR4IGluY3JlbWVudCB0b28gbGFyZ2UiLCAtMSwKIAkJICAwIH0sCi0JCXsgRVJSX0lOR19DVFhUX1BSSU8sCisJCXsgRVJSX0lOR19DVFhUX1BSSU9fRiwKIAkJICAiU0dFIHRvbyBtYW55IHByaW9yaXR5IGluZ3Jlc3MgY29udGV4dHMiLCAtMSwgMCB9LAotCQl7IEVSUl9FR1JfQ1RYVF9QUklPLAorCQl7IEVSUl9FR1JfQ1RYVF9QUklPX0YsCiAJCSAgIlNHRSB0b28gbWFueSBwcmlvcml0eSBlZ3Jlc3MgY29udGV4dHMiLCAtMSwgMCB9LAotCQl7IElOR1JFU1NfU0laRV9FUlIsICJTR0UgaWxsZWdhbCBpbmdyZXNzIFFJRCIsIC0xLCAwIH0sCi0JCXsgRUdSRVNTX1NJWkVfRVJSLCAiU0dFIGlsbGVnYWwgZWdyZXNzIFFJRCIsIC0xLCAwIH0sCisJCXsgSU5HUkVTU19TSVpFX0VSUl9GLCAiU0dFIGlsbGVnYWwgaW5ncmVzcyBRSUQiLCAtMSwgMCB9LAorCQl7IEVHUkVTU19TSVpFX0VSUl9GLCAiU0dFIGlsbGVnYWwgZWdyZXNzIFFJRCIsIC0xLCAwIH0sCiAJCXsgMCB9CiAJfTsKIAotCXYgPSAodTY0KXQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFNHRV9JTlRfQ0FVU0UxKSB8Ci0JCSgodTY0KXQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFNHRV9JTlRfQ0FVU0UyKSA8PCAzMik7CisJdiA9ICh1NjQpdDRfcmVhZF9yZWcoYWRhcHRlciwgU0dFX0lOVF9DQVVTRTFfQSkgfAorCQkoKHU2NCl0NF9yZWFkX3JlZyhhZGFwdGVyLCBTR0VfSU5UX0NBVVNFMl9BKSA8PCAzMik7CiAJaWYgKHYpIHsKIAkJZGV2X2FsZXJ0KGFkYXB0ZXItPnBkZXZfZGV2LCAiU0dFIHBhcml0eSBlcnJvciAoJSNsbHgpXG4iLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdik7Ci0JCXQ0X3dyaXRlX3JlZyhhZGFwdGVyLCBTR0VfSU5UX0NBVVNFMSwgdik7Ci0JCXQ0X3dyaXRlX3JlZyhhZGFwdGVyLCBTR0VfSU5UX0NBVVNFMiwgdiA+PiAzMik7CisJCXQ0X3dyaXRlX3JlZyhhZGFwdGVyLCBTR0VfSU5UX0NBVVNFMV9BLCB2KTsKKwkJdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIFNHRV9JTlRfQ0FVU0UyX0EsIHYgPj4gMzIpOwogCX0KIAotCWlmICh0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgU0dFX0lOVF9DQVVTRTMsIHNnZV9pbnRyX2luZm8pIHx8CisJaWYgKHQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwdGVyLCBTR0VfSU5UX0NBVVNFM19BLCBzZ2VfaW50cl9pbmZvKSB8fAogCSAgICB2ICE9IDApCiAJCXQ0X2ZhdGFsX2VycihhZGFwdGVyKTsKIH0KIAorI2RlZmluZSBDSU1fT0JRX0lOVFIgKE9CUVVMUDBQQVJFUlJfRiB8IE9CUVVMUDFQQVJFUlJfRiB8IE9CUVVMUDJQQVJFUlJfRiB8XAorCQkgICAgICBPQlFVTFAzUEFSRVJSX0YgfCBPQlFTR0VQQVJFUlJfRiB8IE9CUU5DU0lQQVJFUlJfRikKKyNkZWZpbmUgQ0lNX0lCUV9JTlRSIChJQlFUUDBQQVJFUlJfRiB8IElCUVRQMVBBUkVSUl9GIHwgSUJRVUxQUEFSRVJSX0YgfFwKKwkJICAgICAgSUJRU0dFSElQQVJFUlJfRiB8IElCUVNHRUxPUEFSRVJSX0YgfCBJQlFOQ1NJUEFSRVJSX0YpCisKIC8qCiAgKiBDSU0gaW50ZXJydXB0IGhhbmRsZXIuCiAgKi8KIHN0YXRpYyB2b2lkIGNpbV9pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRyX2luZm8gY2ltX2ludHJfaW5mb1tdID0gewotCQl7IFBSRUZEUk9QSU5ULCAiQ0lNIGNvbnRyb2wgcmVnaXN0ZXIgcHJlZmV0Y2ggZHJvcCIsIC0xLCAxIH0sCi0JCXsgT0JRUEFSRVJSLCAiQ0lNIE9CUSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IElCUVBBUkVSUiwgIkNJTSBJQlEgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNQlVQUEFSRVJSLCAiQ0lNIG1haWxib3ggdVAgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNQkhPU1RQQVJFUlIsICJDSU0gbWFpbGJveCBob3N0IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgVElFUUlOUEFSRVJSSU5ULCAiQ0lNIFRJRVEgb3V0Z29pbmcgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBUSUVRT1VUUEFSRVJSSU5ULCAiQ0lNIFRJRVEgaW5jb21pbmcgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBQUkVGRFJPUElOVF9GLCAiQ0lNIGNvbnRyb2wgcmVnaXN0ZXIgcHJlZmV0Y2ggZHJvcCIsIC0xLCAxIH0sCisJCXsgQ0lNX09CUV9JTlRSLCAiQ0lNIE9CUSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IENJTV9JQlFfSU5UUiwgIkNJTSBJQlEgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBNQlVQUEFSRVJSX0YsICJDSU0gbWFpbGJveCB1UCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IE1CSE9TVFBBUkVSUl9GLCAiQ0lNIG1haWxib3ggaG9zdCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFRJRVFJTlBBUkVSUklOVF9GLCAiQ0lNIFRJRVEgb3V0Z29pbmcgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBUSUVRT1VUUEFSRVJSSU5UX0YsICJDSU0gVElFUSBpbmNvbWluZyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IDAgfQogCX07CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRyX2luZm8gY2ltX3VwaW50cl9pbmZvW10gPSB7Ci0JCXsgUlNWRFNQQUNFSU5ULCAiQ0lNIHJlc2VydmVkIHNwYWNlIGFjY2VzcyIsIC0xLCAxIH0sCi0JCXsgSUxMVFJBTlNJTlQsICJDSU0gaWxsZWdhbCB0cmFuc2FjdGlvbiIsIC0xLCAxIH0sCi0JCXsgSUxMV1JJTlQsICJDSU0gaWxsZWdhbCB3cml0ZSIsIC0xLCAxIH0sCi0JCXsgSUxMUkRJTlQsICJDSU0gaWxsZWdhbCByZWFkIiwgLTEsIDEgfSwKLQkJeyBJTExSREJFSU5ULCAiQ0lNIGlsbGVnYWwgcmVhZCBCRSIsIC0xLCAxIH0sCi0JCXsgSUxMV1JCRUlOVCwgIkNJTSBpbGxlZ2FsIHdyaXRlIEJFIiwgLTEsIDEgfSwKLQkJeyBTR0xSREJPT1RJTlQsICJDSU0gc2luZ2xlIHJlYWQgZnJvbSBib290IHNwYWNlIiwgLTEsIDEgfSwKLQkJeyBTR0xXUkJPT1RJTlQsICJDSU0gc2luZ2xlIHdyaXRlIHRvIGJvb3Qgc3BhY2UiLCAtMSwgMSB9LAotCQl7IEJMS1dSQk9PVElOVCwgIkNJTSBibG9jayB3cml0ZSB0byBib290IHNwYWNlIiwgLTEsIDEgfSwKLQkJeyBTR0xSREZMQVNISU5ULCAiQ0lNIHNpbmdsZSByZWFkIGZyb20gZmxhc2ggc3BhY2UiLCAtMSwgMSB9LAotCQl7IFNHTFdSRkxBU0hJTlQsICJDSU0gc2luZ2xlIHdyaXRlIHRvIGZsYXNoIHNwYWNlIiwgLTEsIDEgfSwKLQkJeyBCTEtXUkZMQVNISU5ULCAiQ0lNIGJsb2NrIHdyaXRlIHRvIGZsYXNoIHNwYWNlIiwgLTEsIDEgfSwKLQkJeyBTR0xSREVFUFJPTUlOVCwgIkNJTSBzaW5nbGUgRUVQUk9NIHJlYWQiLCAtMSwgMSB9LAotCQl7IFNHTFdSRUVQUk9NSU5ULCAiQ0lNIHNpbmdsZSBFRVBST00gd3JpdGUiLCAtMSwgMSB9LAotCQl7IEJMS1JERUVQUk9NSU5ULCAiQ0lNIGJsb2NrIEVFUFJPTSByZWFkIiwgLTEsIDEgfSwKLQkJeyBCTEtXUkVFUFJPTUlOVCwgIkNJTSBibG9jayBFRVBST00gd3JpdGUiLCAtMSwgMSB9LAotCQl7IFNHTFJEQ1RMSU5UICwgIkNJTSBzaW5nbGUgcmVhZCBmcm9tIENUTCBzcGFjZSIsIC0xLCAxIH0sCi0JCXsgU0dMV1JDVExJTlQgLCAiQ0lNIHNpbmdsZSB3cml0ZSB0byBDVEwgc3BhY2UiLCAtMSwgMSB9LAotCQl7IEJMS1JEQ1RMSU5UICwgIkNJTSBibG9jayByZWFkIGZyb20gQ1RMIHNwYWNlIiwgLTEsIDEgfSwKLQkJeyBCTEtXUkNUTElOVCAsICJDSU0gYmxvY2sgd3JpdGUgdG8gQ1RMIHNwYWNlIiwgLTEsIDEgfSwKLQkJeyBTR0xSRFBMSU5UICwgIkNJTSBzaW5nbGUgcmVhZCBmcm9tIFBMIHNwYWNlIiwgLTEsIDEgfSwKLQkJeyBTR0xXUlBMSU5UICwgIkNJTSBzaW5nbGUgd3JpdGUgdG8gUEwgc3BhY2UiLCAtMSwgMSB9LAotCQl7IEJMS1JEUExJTlQgLCAiQ0lNIGJsb2NrIHJlYWQgZnJvbSBQTCBzcGFjZSIsIC0xLCAxIH0sCi0JCXsgQkxLV1JQTElOVCAsICJDSU0gYmxvY2sgd3JpdGUgdG8gUEwgc3BhY2UiLCAtMSwgMSB9LAotCQl7IFJFUU9WUkxPT0tVUElOVCAsICJDSU0gcmVxdWVzdCBGSUZPIG92ZXJ3cml0ZSIsIC0xLCAxIH0sCi0JCXsgUlNQT1ZSTE9PS1VQSU5UICwgIkNJTSByZXNwb25zZSBGSUZPIG92ZXJ3cml0ZSIsIC0xLCAxIH0sCi0JCXsgVElNRU9VVElOVCAsICJDSU0gUElGIHRpbWVvdXQiLCAtMSwgMSB9LAotCQl7IFRJTUVPVVRNQUlOVCAsICJDSU0gUElGIE1BIHRpbWVvdXQiLCAtMSwgMSB9LAorCQl7IFJTVkRTUEFDRUlOVF9GLCAiQ0lNIHJlc2VydmVkIHNwYWNlIGFjY2VzcyIsIC0xLCAxIH0sCisJCXsgSUxMVFJBTlNJTlRfRiwgIkNJTSBpbGxlZ2FsIHRyYW5zYWN0aW9uIiwgLTEsIDEgfSwKKwkJeyBJTExXUklOVF9GLCAiQ0lNIGlsbGVnYWwgd3JpdGUiLCAtMSwgMSB9LAorCQl7IElMTFJESU5UX0YsICJDSU0gaWxsZWdhbCByZWFkIiwgLTEsIDEgfSwKKwkJeyBJTExSREJFSU5UX0YsICJDSU0gaWxsZWdhbCByZWFkIEJFIiwgLTEsIDEgfSwKKwkJeyBJTExXUkJFSU5UX0YsICJDSU0gaWxsZWdhbCB3cml0ZSBCRSIsIC0xLCAxIH0sCisJCXsgU0dMUkRCT09USU5UX0YsICJDSU0gc2luZ2xlIHJlYWQgZnJvbSBib290IHNwYWNlIiwgLTEsIDEgfSwKKwkJeyBTR0xXUkJPT1RJTlRfRiwgIkNJTSBzaW5nbGUgd3JpdGUgdG8gYm9vdCBzcGFjZSIsIC0xLCAxIH0sCisJCXsgQkxLV1JCT09USU5UX0YsICJDSU0gYmxvY2sgd3JpdGUgdG8gYm9vdCBzcGFjZSIsIC0xLCAxIH0sCisJCXsgU0dMUkRGTEFTSElOVF9GLCAiQ0lNIHNpbmdsZSByZWFkIGZyb20gZmxhc2ggc3BhY2UiLCAtMSwgMSB9LAorCQl7IFNHTFdSRkxBU0hJTlRfRiwgIkNJTSBzaW5nbGUgd3JpdGUgdG8gZmxhc2ggc3BhY2UiLCAtMSwgMSB9LAorCQl7IEJMS1dSRkxBU0hJTlRfRiwgIkNJTSBibG9jayB3cml0ZSB0byBmbGFzaCBzcGFjZSIsIC0xLCAxIH0sCisJCXsgU0dMUkRFRVBST01JTlRfRiwgIkNJTSBzaW5nbGUgRUVQUk9NIHJlYWQiLCAtMSwgMSB9LAorCQl7IFNHTFdSRUVQUk9NSU5UX0YsICJDSU0gc2luZ2xlIEVFUFJPTSB3cml0ZSIsIC0xLCAxIH0sCisJCXsgQkxLUkRFRVBST01JTlRfRiwgIkNJTSBibG9jayBFRVBST00gcmVhZCIsIC0xLCAxIH0sCisJCXsgQkxLV1JFRVBST01JTlRfRiwgIkNJTSBibG9jayBFRVBST00gd3JpdGUiLCAtMSwgMSB9LAorCQl7IFNHTFJEQ1RMSU5UX0YsICJDSU0gc2luZ2xlIHJlYWQgZnJvbSBDVEwgc3BhY2UiLCAtMSwgMSB9LAorCQl7IFNHTFdSQ1RMSU5UX0YsICJDSU0gc2luZ2xlIHdyaXRlIHRvIENUTCBzcGFjZSIsIC0xLCAxIH0sCisJCXsgQkxLUkRDVExJTlRfRiwgIkNJTSBibG9jayByZWFkIGZyb20gQ1RMIHNwYWNlIiwgLTEsIDEgfSwKKwkJeyBCTEtXUkNUTElOVF9GLCAiQ0lNIGJsb2NrIHdyaXRlIHRvIENUTCBzcGFjZSIsIC0xLCAxIH0sCisJCXsgU0dMUkRQTElOVF9GLCAiQ0lNIHNpbmdsZSByZWFkIGZyb20gUEwgc3BhY2UiLCAtMSwgMSB9LAorCQl7IFNHTFdSUExJTlRfRiwgIkNJTSBzaW5nbGUgd3JpdGUgdG8gUEwgc3BhY2UiLCAtMSwgMSB9LAorCQl7IEJMS1JEUExJTlRfRiwgIkNJTSBibG9jayByZWFkIGZyb20gUEwgc3BhY2UiLCAtMSwgMSB9LAorCQl7IEJMS1dSUExJTlRfRiwgIkNJTSBibG9jayB3cml0ZSB0byBQTCBzcGFjZSIsIC0xLCAxIH0sCisJCXsgUkVRT1ZSTE9PS1VQSU5UX0YsICJDSU0gcmVxdWVzdCBGSUZPIG92ZXJ3cml0ZSIsIC0xLCAxIH0sCisJCXsgUlNQT1ZSTE9PS1VQSU5UX0YsICJDSU0gcmVzcG9uc2UgRklGTyBvdmVyd3JpdGUiLCAtMSwgMSB9LAorCQl7IFRJTUVPVVRJTlRfRiwgIkNJTSBQSUYgdGltZW91dCIsIC0xLCAxIH0sCisJCXsgVElNRU9VVE1BSU5UX0YsICJDSU0gUElGIE1BIHRpbWVvdXQiLCAtMSwgMSB9LAogCQl7IDAgfQogCX07CiAKIAlpbnQgZmF0OwogCi0JaWYgKHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIE1BX1BDSUVfRlcpICYgUENJRV9GV19FUlIpCisJaWYgKHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFBDSUVfRldfQSkgJiBQQ0lFX0ZXX0VSUl9GKQogCQl0NF9yZXBvcnRfZndfZXJyb3IoYWRhcHRlcik7CiAKLQlmYXQgPSB0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgQ0lNX0hPU1RfSU5UX0NBVVNFLAorCWZhdCA9IHQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwdGVyLCBDSU1fSE9TVF9JTlRfQ0FVU0VfQSwKIAkJCQkgICAgY2ltX2ludHJfaW5mbykgKwotCSAgICAgIHQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwdGVyLCBDSU1fSE9TVF9VUEFDQ19JTlRfQ0FVU0UsCisJICAgICAgdDRfaGFuZGxlX2ludHJfc3RhdHVzKGFkYXB0ZXIsIENJTV9IT1NUX1VQQUNDX0lOVF9DQVVTRV9BLAogCQkJCSAgICBjaW1fdXBpbnRyX2luZm8pOwogCWlmIChmYXQpCiAJCXQ0X2ZhdGFsX2VycihhZGFwdGVyKTsKQEAgLTE2MTEsNyArMTY5Miw3IEBACiAJCXsgMCB9CiAJfTsKIAotCWlmICh0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgVUxQX1JYX0lOVF9DQVVTRSwgdWxwcnhfaW50cl9pbmZvKSkKKwlpZiAodDRfaGFuZGxlX2ludHJfc3RhdHVzKGFkYXB0ZXIsIFVMUF9SWF9JTlRfQ0FVU0VfQSwgdWxwcnhfaW50cl9pbmZvKSkKIAkJdDRfZmF0YWxfZXJyKGFkYXB0ZXIpOwogfQogCkBAIC0xNjIxLDE5ICsxNzAyLDE5IEBACiBzdGF0aWMgdm9pZCB1bHB0eF9pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRyX2luZm8gdWxwdHhfaW50cl9pbmZvW10gPSB7Ci0JCXsgUEJMX0JPVU5EX0VSUl9DSDMsICJVTFBUWCBjaGFubmVsIDMgUEJMIG91dCBvZiBib3VuZHMiLCAtMSwKKwkJeyBQQkxfQk9VTkRfRVJSX0NIM19GLCAiVUxQVFggY2hhbm5lbCAzIFBCTCBvdXQgb2YgYm91bmRzIiwgLTEsCiAJCSAgMCB9LAotCQl7IFBCTF9CT1VORF9FUlJfQ0gyLCAiVUxQVFggY2hhbm5lbCAyIFBCTCBvdXQgb2YgYm91bmRzIiwgLTEsCisJCXsgUEJMX0JPVU5EX0VSUl9DSDJfRiwgIlVMUFRYIGNoYW5uZWwgMiBQQkwgb3V0IG9mIGJvdW5kcyIsIC0xLAogCQkgIDAgfSwKLQkJeyBQQkxfQk9VTkRfRVJSX0NIMSwgIlVMUFRYIGNoYW5uZWwgMSBQQkwgb3V0IG9mIGJvdW5kcyIsIC0xLAorCQl7IFBCTF9CT1VORF9FUlJfQ0gxX0YsICJVTFBUWCBjaGFubmVsIDEgUEJMIG91dCBvZiBib3VuZHMiLCAtMSwKIAkJICAwIH0sCi0JCXsgUEJMX0JPVU5EX0VSUl9DSDAsICJVTFBUWCBjaGFubmVsIDAgUEJMIG91dCBvZiBib3VuZHMiLCAtMSwKKwkJeyBQQkxfQk9VTkRfRVJSX0NIMF9GLCAiVUxQVFggY2hhbm5lbCAwIFBCTCBvdXQgb2YgYm91bmRzIiwgLTEsCiAJCSAgMCB9LAogCQl7IDB4ZmZmZmZmZiwgIlVMUFRYIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCiAJCXsgMCB9CiAJfTsKIAotCWlmICh0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgVUxQX1RYX0lOVF9DQVVTRSwgdWxwdHhfaW50cl9pbmZvKSkKKwlpZiAodDRfaGFuZGxlX2ludHJfc3RhdHVzKGFkYXB0ZXIsIFVMUF9UWF9JTlRfQ0FVU0VfQSwgdWxwdHhfaW50cl9pbmZvKSkKIAkJdDRfZmF0YWxfZXJyKGFkYXB0ZXIpOwogfQogCkBAIC0xNjQzLDE5ICsxNzI0LDIwIEBACiBzdGF0aWMgdm9pZCBwbXR4X2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGludHJfaW5mbyBwbXR4X2ludHJfaW5mb1tdID0gewotCQl7IFBDTURfTEVOX09WRkwwLCAiUE1UWCBjaGFubmVsIDAgcGNtZCB0b28gbGFyZ2UiLCAtMSwgMSB9LAotCQl7IFBDTURfTEVOX09WRkwxLCAiUE1UWCBjaGFubmVsIDEgcGNtZCB0b28gbGFyZ2UiLCAtMSwgMSB9LAotCQl7IFBDTURfTEVOX09WRkwyLCAiUE1UWCBjaGFubmVsIDIgcGNtZCB0b28gbGFyZ2UiLCAtMSwgMSB9LAotCQl7IFpFUk9fQ19DTURfRVJST1IsICJQTVRYIDAtbGVuZ3RoIHBjbWQiLCAtMSwgMSB9LAotCQl7IFBNVFhfRlJBTUlOR19FUlJPUiwgIlBNVFggZnJhbWluZyBlcnJvciIsIC0xLCAxIH0sCi0JCXsgT0VTUElfUEFSX0VSUk9SLCAiUE1UWCBvZXNwaSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IERCX09QVElPTlNfUEFSX0VSUk9SLCAiUE1UWCBkYl9vcHRpb25zIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgSUNTUElfUEFSX0VSUk9SLCAiUE1UWCBpY3NwaSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IENfUENNRF9QQVJfRVJST1IsICJQTVRYIGNfcGNtZCBwYXJpdHkgZXJyb3IiLCAtMSwgMX0sCisJCXsgUENNRF9MRU5fT1ZGTDBfRiwgIlBNVFggY2hhbm5lbCAwIHBjbWQgdG9vIGxhcmdlIiwgLTEsIDEgfSwKKwkJeyBQQ01EX0xFTl9PVkZMMV9GLCAiUE1UWCBjaGFubmVsIDEgcGNtZCB0b28gbGFyZ2UiLCAtMSwgMSB9LAorCQl7IFBDTURfTEVOX09WRkwyX0YsICJQTVRYIGNoYW5uZWwgMiBwY21kIHRvbyBsYXJnZSIsIC0xLCAxIH0sCisJCXsgWkVST19DX0NNRF9FUlJPUl9GLCAiUE1UWCAwLWxlbmd0aCBwY21kIiwgLTEsIDEgfSwKKwkJeyBQTVRYX0ZSQU1JTkdfRVJST1JfRiwgIlBNVFggZnJhbWluZyBlcnJvciIsIC0xLCAxIH0sCisJCXsgT0VTUElfUEFSX0VSUk9SX0YsICJQTVRYIG9lc3BpIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgREJfT1BUSU9OU19QQVJfRVJST1JfRiwgIlBNVFggZGJfb3B0aW9ucyBwYXJpdHkgZXJyb3IiLAorCQkgIC0xLCAxIH0sCisJCXsgSUNTUElfUEFSX0VSUk9SX0YsICJQTVRYIGljc3BpIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgUE1UWF9DX1BDTURfUEFSX0VSUk9SX0YsICJQTVRYIGNfcGNtZCBwYXJpdHkgZXJyb3IiLCAtMSwgMX0sCiAJCXsgMCB9CiAJfTsKIAotCWlmICh0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgUE1fVFhfSU5UX0NBVVNFLCBwbXR4X2ludHJfaW5mbykpCisJaWYgKHQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwdGVyLCBQTV9UWF9JTlRfQ0FVU0VfQSwgcG10eF9pbnRyX2luZm8pKQogCQl0NF9mYXRhbF9lcnIoYWRhcHRlcik7CiB9CiAKQEAgLTE2NjUsMTYgKzE3NDcsMTcgQEAKIHN0YXRpYyB2b2lkIHBtcnhfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIHBtcnhfaW50cl9pbmZvW10gPSB7Ci0JCXsgWkVST19FX0NNRF9FUlJPUiwgIlBNUlggMC1sZW5ndGggcGNtZCIsIC0xLCAxIH0sCi0JCXsgUE1SWF9GUkFNSU5HX0VSUk9SLCAiUE1SWCBmcmFtaW5nIGVycm9yIiwgLTEsIDEgfSwKLQkJeyBPQ1NQSV9QQVJfRVJST1IsICJQTVJYIG9jc3BpIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgREJfT1BUSU9OU19QQVJfRVJST1IsICJQTVJYIGRiX29wdGlvbnMgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBJRVNQSV9QQVJfRVJST1IsICJQTVJYIGllc3BpIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgRV9QQ01EX1BBUl9FUlJPUiwgIlBNUlggZV9wY21kIHBhcml0eSBlcnJvciIsIC0xLCAxfSwKKwkJeyBaRVJPX0VfQ01EX0VSUk9SX0YsICJQTVJYIDAtbGVuZ3RoIHBjbWQiLCAtMSwgMSB9LAorCQl7IFBNUlhfRlJBTUlOR19FUlJPUl9GLCAiUE1SWCBmcmFtaW5nIGVycm9yIiwgLTEsIDEgfSwKKwkJeyBPQ1NQSV9QQVJfRVJST1JfRiwgIlBNUlggb2NzcGkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBEQl9PUFRJT05TX1BBUl9FUlJPUl9GLCAiUE1SWCBkYl9vcHRpb25zIHBhcml0eSBlcnJvciIsCisJCSAgLTEsIDEgfSwKKwkJeyBJRVNQSV9QQVJfRVJST1JfRiwgIlBNUlggaWVzcGkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBQTVJYX0VfUENNRF9QQVJfRVJST1JfRiwgIlBNUlggZV9wY21kIHBhcml0eSBlcnJvciIsIC0xLCAxfSwKIAkJeyAwIH0KIAl9OwogCi0JaWYgKHQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwdGVyLCBQTV9SWF9JTlRfQ0FVU0UsIHBtcnhfaW50cl9pbmZvKSkKKwlpZiAodDRfaGFuZGxlX2ludHJfc3RhdHVzKGFkYXB0ZXIsIFBNX1JYX0lOVF9DQVVTRV9BLCBwbXJ4X2ludHJfaW5mbykpCiAJCXQ0X2ZhdGFsX2VycihhZGFwdGVyKTsKIH0KIApAQCAtMTY4NCwxNiArMTc2NywxNiBAQAogc3RhdGljIHZvaWQgY3Bsc3dfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIGNwbHN3X2ludHJfaW5mb1tdID0gewotCQl7IENJTV9PUF9NQVBfUEVSUiwgIkNQTFNXIENJTSBvcF9tYXAgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBDSU1fT1ZGTF9FUlJPUiwgIkNQTFNXIENJTSBvdmVyZmxvdyIsIC0xLCAxIH0sCi0JCXsgVFBfRlJBTUlOR19FUlJPUiwgIkNQTFNXIFRQIGZyYW1pbmcgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFNHRV9GUkFNSU5HX0VSUk9SLCAiQ1BMU1cgU0dFIGZyYW1pbmcgZXJyb3IiLCAtMSwgMSB9LAotCQl7IENJTV9GUkFNSU5HX0VSUk9SLCAiQ1BMU1cgQ0lNIGZyYW1pbmcgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFpFUk9fU1dJVENIX0VSUk9SLCAiQ1BMU1cgbm8tc3dpdGNoIGVycm9yIiwgLTEsIDEgfSwKKwkJeyBDSU1fT1BfTUFQX1BFUlJfRiwgIkNQTFNXIENJTSBvcF9tYXAgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBDSU1fT1ZGTF9FUlJPUl9GLCAiQ1BMU1cgQ0lNIG92ZXJmbG93IiwgLTEsIDEgfSwKKwkJeyBUUF9GUkFNSU5HX0VSUk9SX0YsICJDUExTVyBUUCBmcmFtaW5nIGVycm9yIiwgLTEsIDEgfSwKKwkJeyBTR0VfRlJBTUlOR19FUlJPUl9GLCAiQ1BMU1cgU0dFIGZyYW1pbmcgZXJyb3IiLCAtMSwgMSB9LAorCQl7IENJTV9GUkFNSU5HX0VSUk9SX0YsICJDUExTVyBDSU0gZnJhbWluZyBlcnJvciIsIC0xLCAxIH0sCisJCXsgWkVST19TV0lUQ0hfRVJST1JfRiwgIkNQTFNXIG5vLXN3aXRjaCBlcnJvciIsIC0xLCAxIH0sCiAJCXsgMCB9CiAJfTsKIAotCWlmICh0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgQ1BMX0lOVFJfQ0FVU0UsIGNwbHN3X2ludHJfaW5mbykpCisJaWYgKHQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwdGVyLCBDUExfSU5UUl9DQVVTRV9BLCBjcGxzd19pbnRyX2luZm8pKQogCQl0NF9mYXRhbF9lcnIoYWRhcHRlcik7CiB9CiAKQEAgLTE3MDMsMTUgKzE3ODYsMTUgQEAKIHN0YXRpYyB2b2lkIGxlX2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGludHJfaW5mbyBsZV9pbnRyX2luZm9bXSA9IHsKLQkJeyBMSVBNSVNTLCAiTEUgTElQIG1pc3MiLCAtMSwgMCB9LAotCQl7IExJUDAsICJMRSAwIExJUCBlcnJvciIsIC0xLCAwIH0sCi0JCXsgUEFSSVRZRVJSLCAiTEUgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBVTktOT1dOQ01ELCAiTEUgdW5rbm93biBjb21tYW5kIiwgLTEsIDEgfSwKLQkJeyBSRVFRUEFSRVJSLCAiTEUgcmVxdWVzdCBxdWV1ZSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IExJUE1JU1NfRiwgIkxFIExJUCBtaXNzIiwgLTEsIDAgfSwKKwkJeyBMSVAwX0YsICJMRSAwIExJUCBlcnJvciIsIC0xLCAwIH0sCisJCXsgUEFSSVRZRVJSX0YsICJMRSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFVOS05PV05DTURfRiwgIkxFIHVua25vd24gY29tbWFuZCIsIC0xLCAxIH0sCisJCXsgUkVRUVBBUkVSUl9GLCAiTEUgcmVxdWVzdCBxdWV1ZSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IDAgfQogCX07CiAKLQlpZiAodDRfaGFuZGxlX2ludHJfc3RhdHVzKGFkYXAsIExFX0RCX0lOVF9DQVVTRSwgbGVfaW50cl9pbmZvKSkKKwlpZiAodDRfaGFuZGxlX2ludHJfc3RhdHVzKGFkYXAsIExFX0RCX0lOVF9DQVVTRV9BLCBsZV9pbnRyX2luZm8pKQogCQl0NF9mYXRhbF9lcnIoYWRhcCk7CiB9CiAKQEAgLTE3MjUsMTkgKzE4MDgsMjIgQEAKIAkJeyAwIH0KIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIG1wc190eF9pbnRyX2luZm9bXSA9IHsKLQkJeyBUUEZJRk8sICJNUFMgVHggVFAgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IE5DU0lGSUZPLCAiTVBTIFR4IE5DLVNJIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBUWERBVEFGSUZPLCAiTVBTIFR4IGRhdGEgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFRYREVTQ0ZJRk8sICJNUFMgVHggZGVzYyBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgQlVCQkxFLCAiTVBTIFR4IHVuZGVyZmxvdyIsIC0xLCAxIH0sCi0JCXsgU0VDTlRFUlIsICJNUFMgVHggU09QL0VPUCBlcnJvciIsIC0xLCAxIH0sCi0JCXsgRlJNRVJSLCAiTVBTIFR4IGZyYW1pbmcgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFRQRklGT19WKFRQRklGT19NKSwgIk1QUyBUeCBUUCBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgTkNTSUZJRk9fRiwgIk1QUyBUeCBOQy1TSSBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgVFhEQVRBRklGT19WKFRYREFUQUZJRk9fTSksICJNUFMgVHggZGF0YSBGSUZPIHBhcml0eSBlcnJvciIsCisJCSAgLTEsIDEgfSwKKwkJeyBUWERFU0NGSUZPX1YoVFhERVNDRklGT19NKSwgIk1QUyBUeCBkZXNjIEZJRk8gcGFyaXR5IGVycm9yIiwKKwkJICAtMSwgMSB9LAorCQl7IEJVQkJMRV9GLCAiTVBTIFR4IHVuZGVyZmxvdyIsIC0xLCAxIH0sCisJCXsgU0VDTlRFUlJfRiwgIk1QUyBUeCBTT1AvRU9QIGVycm9yIiwgLTEsIDEgfSwKKwkJeyBGUk1FUlJfRiwgIk1QUyBUeCBmcmFtaW5nIGVycm9yIiwgLTEsIDEgfSwKIAkJeyAwIH0KIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIG1wc190cmNfaW50cl9pbmZvW10gPSB7Ci0JCXsgRklMVE1FTSwgIk1QUyBUUkMgZmlsdGVyIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUEtURklGTywgIk1QUyBUUkMgcGFja2V0IEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNSVNDUEVSUiwgIk1QUyBUUkMgbWlzYyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IEZJTFRNRU1fVihGSUxUTUVNX00pLCAiTVBTIFRSQyBmaWx0ZXIgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBQS1RGSUZPX1YoUEtURklGT19NKSwgIk1QUyBUUkMgcGFja2V0IEZJRk8gcGFyaXR5IGVycm9yIiwKKwkJICAtMSwgMSB9LAorCQl7IE1JU0NQRVJSX0YsICJNUFMgVFJDIG1pc2MgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKIAkJeyAwIH0KIAl9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIG1wc19zdGF0X3NyYW1faW50cl9pbmZvW10gPSB7CkBAIC0xNzUzLDM3ICsxODM5LDM3IEBACiAJCXsgMCB9CiAJfTsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGludHJfaW5mbyBtcHNfY2xzX2ludHJfaW5mb1tdID0gewotCQl7IE1BVENIU1JBTSwgIk1QUyBtYXRjaCBTUkFNIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgTUFUQ0hUQ0FNLCAiTVBTIG1hdGNoIFRDQU0gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBIQVNIU1JBTSwgIk1QUyBoYXNoIFNSQU0gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBNQVRDSFNSQU1fRiwgIk1QUyBtYXRjaCBTUkFNIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgTUFUQ0hUQ0FNX0YsICJNUFMgbWF0Y2ggVENBTSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IEhBU0hTUkFNX0YsICJNUFMgaGFzaCBTUkFNIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCiAJCXsgMCB9CiAJfTsKIAogCWludCBmYXQ7CiAKLQlmYXQgPSB0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgTVBTX1JYX1BFUlJfSU5UX0NBVVNFLAorCWZhdCA9IHQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwdGVyLCBNUFNfUlhfUEVSUl9JTlRfQ0FVU0VfQSwKIAkJCQkgICAgbXBzX3J4X2ludHJfaW5mbykgKwotCSAgICAgIHQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwdGVyLCBNUFNfVFhfSU5UX0NBVVNFLAorCSAgICAgIHQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwdGVyLCBNUFNfVFhfSU5UX0NBVVNFX0EsCiAJCQkJICAgIG1wc190eF9pbnRyX2luZm8pICsKLQkgICAgICB0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgTVBTX1RSQ19JTlRfQ0FVU0UsCisJICAgICAgdDRfaGFuZGxlX2ludHJfc3RhdHVzKGFkYXB0ZXIsIE1QU19UUkNfSU5UX0NBVVNFX0EsCiAJCQkJICAgIG1wc190cmNfaW50cl9pbmZvKSArCi0JICAgICAgdDRfaGFuZGxlX2ludHJfc3RhdHVzKGFkYXB0ZXIsIE1QU19TVEFUX1BFUlJfSU5UX0NBVVNFX1NSQU0sCisJICAgICAgdDRfaGFuZGxlX2ludHJfc3RhdHVzKGFkYXB0ZXIsIE1QU19TVEFUX1BFUlJfSU5UX0NBVVNFX1NSQU1fQSwKIAkJCQkgICAgbXBzX3N0YXRfc3JhbV9pbnRyX2luZm8pICsKLQkgICAgICB0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgTVBTX1NUQVRfUEVSUl9JTlRfQ0FVU0VfVFhfRklGTywKKwkgICAgICB0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgTVBTX1NUQVRfUEVSUl9JTlRfQ0FVU0VfVFhfRklGT19BLAogCQkJCSAgICBtcHNfc3RhdF90eF9pbnRyX2luZm8pICsKLQkgICAgICB0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgTVBTX1NUQVRfUEVSUl9JTlRfQ0FVU0VfUlhfRklGTywKKwkgICAgICB0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgTVBTX1NUQVRfUEVSUl9JTlRfQ0FVU0VfUlhfRklGT19BLAogCQkJCSAgICBtcHNfc3RhdF9yeF9pbnRyX2luZm8pICsKLQkgICAgICB0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcHRlciwgTVBTX0NMU19JTlRfQ0FVU0UsCisJICAgICAgdDRfaGFuZGxlX2ludHJfc3RhdHVzKGFkYXB0ZXIsIE1QU19DTFNfSU5UX0NBVVNFX0EsCiAJCQkJICAgIG1wc19jbHNfaW50cl9pbmZvKTsKIAotCXQ0X3dyaXRlX3JlZyhhZGFwdGVyLCBNUFNfSU5UX0NBVVNFLCBDTFNJTlQgfCBUUkNJTlQgfAotCQkgICAgIFJYSU5UIHwgVFhJTlQgfCBTVEFUSU5UKTsKLQl0NF9yZWFkX3JlZyhhZGFwdGVyLCBNUFNfSU5UX0NBVVNFKTsgICAgICAgICAgICAgICAgICAgIC8qIGZsdXNoICovCisJdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIE1QU19JTlRfQ0FVU0VfQSwgMCk7CisJdDRfcmVhZF9yZWcoYWRhcHRlciwgTVBTX0lOVF9DQVVTRV9BKTsgICAgICAgICAgICAgICAgICAgIC8qIGZsdXNoICovCiAJaWYgKGZhdCkKIAkJdDRfZmF0YWxfZXJyKGFkYXB0ZXIpOwogfQogCi0jZGVmaW5lIE1FTV9JTlRfTUFTSyAoUEVSUl9JTlRfQ0FVU0UgfCBFQ0NfQ0VfSU5UX0NBVVNFIHwgRUNDX1VFX0lOVF9DQVVTRSkKKyNkZWZpbmUgTUVNX0lOVF9NQVNLIChQRVJSX0lOVF9DQVVTRV9GIHwgRUNDX0NFX0lOVF9DQVVTRV9GIHwgXAorCQkgICAgICBFQ0NfVUVfSU5UX0NBVVNFX0YpCiAKIC8qCiAgKiBFREMvTUMgaW50ZXJydXB0IGhhbmRsZXIuCkBAIC0xNzk1LDQwICsxODgxLDQwIEBACiAJdW5zaWduZWQgaW50IGFkZHIsIGNudF9hZGRyLCB2OwogCiAJaWYgKGlkeCA8PSBNRU1fRURDMSkgewotCQlhZGRyID0gRURDX1JFRyhFRENfSU5UX0NBVVNFLCBpZHgpOwotCQljbnRfYWRkciA9IEVEQ19SRUcoRURDX0VDQ19TVEFUVVMsIGlkeCk7CisJCWFkZHIgPSBFRENfUkVHKEVEQ19JTlRfQ0FVU0VfQSwgaWR4KTsKKwkJY250X2FkZHIgPSBFRENfUkVHKEVEQ19FQ0NfU1RBVFVTX0EsIGlkeCk7CiAJfSBlbHNlIGlmIChpZHggPT0gTUVNX01DKSB7CiAJCWlmIChpc190NChhZGFwdGVyLT5wYXJhbXMuY2hpcCkpIHsKLQkJCWFkZHIgPSBNQ19JTlRfQ0FVU0U7Ci0JCQljbnRfYWRkciA9IE1DX0VDQ19TVEFUVVM7CisJCQlhZGRyID0gTUNfSU5UX0NBVVNFX0E7CisJCQljbnRfYWRkciA9IE1DX0VDQ19TVEFUVVNfQTsKIAkJfSBlbHNlIHsKLQkJCWFkZHIgPSBNQ19QX0lOVF9DQVVTRTsKLQkJCWNudF9hZGRyID0gTUNfUF9FQ0NfU1RBVFVTOworCQkJYWRkciA9IE1DX1BfSU5UX0NBVVNFX0E7CisJCQljbnRfYWRkciA9IE1DX1BfRUNDX1NUQVRVU19BOwogCQl9CiAJfSBlbHNlIHsKLQkJYWRkciA9IE1DX1JFRyhNQ19QX0lOVF9DQVVTRSwgMSk7Ci0JCWNudF9hZGRyID0gTUNfUkVHKE1DX1BfRUNDX1NUQVRVUywgMSk7CisJCWFkZHIgPSBNQ19SRUcoTUNfUF9JTlRfQ0FVU0VfQSwgMSk7CisJCWNudF9hZGRyID0gTUNfUkVHKE1DX1BfRUNDX1NUQVRVU19BLCAxKTsKIAl9CiAKIAl2ID0gdDRfcmVhZF9yZWcoYWRhcHRlciwgYWRkcikgJiBNRU1fSU5UX01BU0s7Ci0JaWYgKHYgJiBQRVJSX0lOVF9DQVVTRSkKKwlpZiAodiAmIFBFUlJfSU5UX0NBVVNFX0YpCiAJCWRldl9hbGVydChhZGFwdGVyLT5wZGV2X2RldiwgIiVzIEZJRk8gcGFyaXR5IGVycm9yXG4iLAogCQkJICBuYW1lW2lkeF0pOwotCWlmICh2ICYgRUNDX0NFX0lOVF9DQVVTRSkgewotCQl1MzIgY250ID0gRUNDX0NFQ05UX0dFVCh0NF9yZWFkX3JlZyhhZGFwdGVyLCBjbnRfYWRkcikpOworCWlmICh2ICYgRUNDX0NFX0lOVF9DQVVTRV9GKSB7CisJCXUzMiBjbnQgPSBFQ0NfQ0VDTlRfRyh0NF9yZWFkX3JlZyhhZGFwdGVyLCBjbnRfYWRkcikpOwogCi0JCXQ0X3dyaXRlX3JlZyhhZGFwdGVyLCBjbnRfYWRkciwgRUNDX0NFQ05UX01BU0spOworCQl0NF93cml0ZV9yZWcoYWRhcHRlciwgY250X2FkZHIsIEVDQ19DRUNOVF9WKEVDQ19DRUNOVF9NKSk7CiAJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQlkZXZfd2FybihhZGFwdGVyLT5wZGV2X2RldiwKIAkJCQkgIiV1ICVzIGNvcnJlY3RhYmxlIEVDQyBkYXRhIGVycm9yJXNcbiIsCiAJCQkJIGNudCwgbmFtZVtpZHhdLCBjbnQgPiAxID8gInMiIDogIiIpOwogCX0KLQlpZiAodiAmIEVDQ19VRV9JTlRfQ0FVU0UpCisJaWYgKHYgJiBFQ0NfVUVfSU5UX0NBVVNFX0YpCiAJCWRldl9hbGVydChhZGFwdGVyLT5wZGV2X2RldiwKIAkJCSAgIiVzIHVuY29ycmVjdGFibGUgRUNDIGRhdGEgZXJyb3JcbiIsIG5hbWVbaWR4XSk7CiAKIAl0NF93cml0ZV9yZWcoYWRhcHRlciwgYWRkciwgdik7Ci0JaWYgKHYgJiAoUEVSUl9JTlRfQ0FVU0UgfCBFQ0NfVUVfSU5UX0NBVVNFKSkKKwlpZiAodiAmIChQRVJSX0lOVF9DQVVTRV9GIHwgRUNDX1VFX0lOVF9DQVVTRV9GKSkKIAkJdDRfZmF0YWxfZXJyKGFkYXB0ZXIpOwogfQogCkBAIC0xODM3LDI2ICsxOTIzLDI2IEBACiAgKi8KIHN0YXRpYyB2b2lkIG1hX2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKIHsKLQl1MzIgdiwgc3RhdHVzID0gdDRfcmVhZF9yZWcoYWRhcCwgTUFfSU5UX0NBVVNFKTsKKwl1MzIgdiwgc3RhdHVzID0gdDRfcmVhZF9yZWcoYWRhcCwgTUFfSU5UX0NBVVNFX0EpOwogCi0JaWYgKHN0YXR1cyAmIE1FTV9QRVJSX0lOVF9DQVVTRSkgeworCWlmIChzdGF0dXMgJiBNRU1fUEVSUl9JTlRfQ0FVU0VfRikgewogCQlkZXZfYWxlcnQoYWRhcC0+cGRldl9kZXYsCiAJCQkgICJNQSBwYXJpdHkgZXJyb3IsIHBhcml0eSBzdGF0dXMgJSN4XG4iLAotCQkJICB0NF9yZWFkX3JlZyhhZGFwLCBNQV9QQVJJVFlfRVJST1JfU1RBVFVTKSk7CisJCQkgIHQ0X3JlYWRfcmVnKGFkYXAsIE1BX1BBUklUWV9FUlJPUl9TVEFUVVMxX0EpKTsKIAkJaWYgKGlzX3Q1KGFkYXAtPnBhcmFtcy5jaGlwKSkKIAkJCWRldl9hbGVydChhZGFwLT5wZGV2X2RldiwKIAkJCQkgICJNQSBwYXJpdHkgZXJyb3IsIHBhcml0eSBzdGF0dXMgJSN4XG4iLAogCQkJCSAgdDRfcmVhZF9yZWcoYWRhcCwKLQkJCQkJICAgICAgTUFfUEFSSVRZX0VSUk9SX1NUQVRVUzIpKTsKKwkJCQkJICAgICAgTUFfUEFSSVRZX0VSUk9SX1NUQVRVUzJfQSkpOwogCX0KLQlpZiAoc3RhdHVzICYgTUVNX1dSQVBfSU5UX0NBVVNFKSB7Ci0JCXYgPSB0NF9yZWFkX3JlZyhhZGFwLCBNQV9JTlRfV1JBUF9TVEFUVVMpOworCWlmIChzdGF0dXMgJiBNRU1fV1JBUF9JTlRfQ0FVU0VfRikgeworCQl2ID0gdDRfcmVhZF9yZWcoYWRhcCwgTUFfSU5UX1dSQVBfU1RBVFVTX0EpOwogCQlkZXZfYWxlcnQoYWRhcC0+cGRldl9kZXYsICJNQSBhZGRyZXNzIHdyYXAtYXJvdW5kIGVycm9yIGJ5ICIKIAkJCSAgImNsaWVudCAldSB0byBhZGRyZXNzICUjeFxuIiwKLQkJCSAgTUVNX1dSQVBfQ0xJRU5UX05VTV9HRVQodiksCi0JCQkgIE1FTV9XUkFQX0FERFJFU1NfR0VUKHYpIDw8IDQpOworCQkJICBNRU1fV1JBUF9DTElFTlRfTlVNX0codiksCisJCQkgIE1FTV9XUkFQX0FERFJFU1NfRyh2KSA8PCA0KTsKIAl9Ci0JdDRfd3JpdGVfcmVnKGFkYXAsIE1BX0lOVF9DQVVTRSwgc3RhdHVzKTsKKwl0NF93cml0ZV9yZWcoYWRhcCwgTUFfSU5UX0NBVVNFX0EsIHN0YXR1cyk7CiAJdDRfZmF0YWxfZXJyKGFkYXApOwogfQogCkBAIC0xODY2LDEzICsxOTUyLDEzIEBACiBzdGF0aWMgdm9pZCBzbWJfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIHNtYl9pbnRyX2luZm9bXSA9IHsKLQkJeyBNU1RUWEZJRk9QQVJJTlQsICJTTUIgbWFzdGVyIFR4IEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNU1RSWEZJRk9QQVJJTlQsICJTTUIgbWFzdGVyIFJ4IEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBTTFZGSUZPUEFSSU5ULCAiU01CIHNsYXZlIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBNU1RUWEZJRk9QQVJJTlRfRiwgIlNNQiBtYXN0ZXIgVHggRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IE1TVFJYRklGT1BBUklOVF9GLCAiU01CIG1hc3RlciBSeCBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgU0xWRklGT1BBUklOVF9GLCAiU01CIHNsYXZlIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKIAkJeyAwIH0KIAl9OwogCi0JaWYgKHQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwLCBTTUJfSU5UX0NBVVNFLCBzbWJfaW50cl9pbmZvKSkKKwlpZiAodDRfaGFuZGxlX2ludHJfc3RhdHVzKGFkYXAsIFNNQl9JTlRfQ0FVU0VfQSwgc21iX2ludHJfaW5mbykpCiAJCXQ0X2ZhdGFsX2VycihhZGFwKTsKIH0KIApAQCAtMTg4MiwxNCArMTk2OCwxNCBAQAogc3RhdGljIHZvaWQgbmNzaV9pbnRyX2hhbmRsZXIoc3RydWN0IGFkYXB0ZXIgKmFkYXApCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBpbnRyX2luZm8gbmNzaV9pbnRyX2luZm9bXSA9IHsKLQkJeyBDSU1fRE1fUFJUWV9FUlIsICJOQy1TSSBDSU0gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNUFNfRE1fUFJUWV9FUlIsICJOQy1TSSBNUFMgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBUWEZJRk9fUFJUWV9FUlIsICJOQy1TSSBUeCBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUlhGSUZPX1BSVFlfRVJSLCAiTkMtU0kgUnggRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IENJTV9ETV9QUlRZX0VSUl9GLCAiTkMtU0kgQ0lNIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgTVBTX0RNX1BSVFlfRVJSX0YsICJOQy1TSSBNUFMgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBUWEZJRk9fUFJUWV9FUlJfRiwgIk5DLVNJIFR4IEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBSWEZJRk9fUFJUWV9FUlJfRiwgIk5DLVNJIFJ4IEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKIAkJeyAwIH0KIAl9OwogCi0JaWYgKHQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwLCBOQ1NJX0lOVF9DQVVTRSwgbmNzaV9pbnRyX2luZm8pKQorCWlmICh0NF9oYW5kbGVfaW50cl9zdGF0dXMoYWRhcCwgTkNTSV9JTlRfQ0FVU0VfQSwgbmNzaV9pbnRyX2luZm8pKQogCQl0NF9mYXRhbF9lcnIoYWRhcCk7CiB9CiAKQEAgLTE5MDEsMjMgKzE5ODcsMjMgQEAKIAl1MzIgdiwgaW50X2NhdXNlX3JlZzsKIAogCWlmIChpc190NChhZGFwLT5wYXJhbXMuY2hpcCkpCi0JCWludF9jYXVzZV9yZWcgPSBQT1JUX1JFRyhwb3J0LCBYR01BQ19QT1JUX0lOVF9DQVVTRSk7CisJCWludF9jYXVzZV9yZWcgPSBQT1JUX1JFRyhwb3J0LCBYR01BQ19QT1JUX0lOVF9DQVVTRV9BKTsKIAllbHNlCi0JCWludF9jYXVzZV9yZWcgPSBUNV9QT1JUX1JFRyhwb3J0LCBNQUNfUE9SVF9JTlRfQ0FVU0UpOworCQlpbnRfY2F1c2VfcmVnID0gVDVfUE9SVF9SRUcocG9ydCwgTUFDX1BPUlRfSU5UX0NBVVNFX0EpOwogCiAJdiA9IHQ0X3JlYWRfcmVnKGFkYXAsIGludF9jYXVzZV9yZWcpOwogCi0JdiAmPSBUWEZJRk9fUFJUWV9FUlIgfCBSWEZJRk9fUFJUWV9FUlI7CisJdiAmPSBUWEZJRk9fUFJUWV9FUlJfRiB8IFJYRklGT19QUlRZX0VSUl9GOwogCWlmICghdikKIAkJcmV0dXJuOwogCi0JaWYgKHYgJiBUWEZJRk9fUFJUWV9FUlIpCisJaWYgKHYgJiBUWEZJRk9fUFJUWV9FUlJfRikKIAkJZGV2X2FsZXJ0KGFkYXAtPnBkZXZfZGV2LCAiWEdNQUMgJWQgVHggRklGTyBwYXJpdHkgZXJyb3JcbiIsCiAJCQkgIHBvcnQpOwotCWlmICh2ICYgUlhGSUZPX1BSVFlfRVJSKQorCWlmICh2ICYgUlhGSUZPX1BSVFlfRVJSX0YpCiAJCWRldl9hbGVydChhZGFwLT5wZGV2X2RldiwgIlhHTUFDICVkIFJ4IEZJRk8gcGFyaXR5IGVycm9yXG4iLAogCQkJICBwb3J0KTsKLQl0NF93cml0ZV9yZWcoYWRhcCwgUE9SVF9SRUcocG9ydCwgWEdNQUNfUE9SVF9JTlRfQ0FVU0UpLCB2KTsKKwl0NF93cml0ZV9yZWcoYWRhcCwgUE9SVF9SRUcocG9ydCwgWEdNQUNfUE9SVF9JTlRfQ0FVU0VfQSksIHYpOwogCXQ0X2ZhdGFsX2VycihhZGFwKTsKIH0KIApAQCAtMTkyNywxOSArMjAxMywxOSBAQAogc3RhdGljIHZvaWQgcGxfaW50cl9oYW5kbGVyKHN0cnVjdCBhZGFwdGVyICphZGFwKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW50cl9pbmZvIHBsX2ludHJfaW5mb1tdID0gewotCQl7IEZBVEFMUEVSUiwgIlQ0IGZhdGFsIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUEVSUlZGSUQsICJQTCBWRklEX01BUCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IEZBVEFMUEVSUl9GLCAiVDQgZmF0YWwgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBQRVJSVkZJRF9GLCAiUEwgVkZJRF9NQVAgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKIAkJeyAwIH0KIAl9OwogCi0JaWYgKHQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwLCBQTF9QTF9JTlRfQ0FVU0UsIHBsX2ludHJfaW5mbykpCisJaWYgKHQ0X2hhbmRsZV9pbnRyX3N0YXR1cyhhZGFwLCBQTF9QTF9JTlRfQ0FVU0VfQSwgcGxfaW50cl9pbmZvKSkKIAkJdDRfZmF0YWxfZXJyKGFkYXApOwogfQogCi0jZGVmaW5lIFBGX0lOVFJfTUFTSyAoUEZTVykKLSNkZWZpbmUgR0xCTF9JTlRSX01BU0sgKENJTSB8IE1QUyB8IFBMIHwgUENJRSB8IE1DIHwgRURDMCB8IFwKLQkJRURDMSB8IExFIHwgVFAgfCBNQSB8IFBNX1RYIHwgUE1fUlggfCBVTFBfUlggfCBcCi0JCUNQTF9TV0lUQ0ggfCBTR0UgfCBVTFBfVFgpCisjZGVmaW5lIFBGX0lOVFJfTUFTSyAoUEZTV19GKQorI2RlZmluZSBHTEJMX0lOVFJfTUFTSyAoQ0lNX0YgfCBNUFNfRiB8IFBMX0YgfCBQQ0lFX0YgfCBNQ19GIHwgRURDMF9GIHwgXAorCQlFREMxX0YgfCBMRV9GIHwgVFBfRiB8IE1BX0YgfCBQTV9UWF9GIHwgUE1fUlhfRiB8IFVMUF9SWF9GIHwgXAorCQlDUExfU1dJVENIX0YgfCBTR0VfRiB8IFVMUF9UWF9GKQogCiAvKioKICAqCXQ0X3Nsb3dfaW50cl9oYW5kbGVyIC0gY29udHJvbCBwYXRoIGludGVycnVwdCBoYW5kbGVyCkBAIC0xOTUxLDYwICsyMDM3LDYwIEBACiAgKi8KIGludCB0NF9zbG93X2ludHJfaGFuZGxlcihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKIHsKLQl1MzIgY2F1c2UgPSB0NF9yZWFkX3JlZyhhZGFwdGVyLCBQTF9JTlRfQ0FVU0UpOworCXUzMiBjYXVzZSA9IHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFBMX0lOVF9DQVVTRV9BKTsKIAogCWlmICghKGNhdXNlICYgR0xCTF9JTlRSX01BU0spKQogCQlyZXR1cm4gMDsKLQlpZiAoY2F1c2UgJiBDSU0pCisJaWYgKGNhdXNlICYgQ0lNX0YpCiAJCWNpbV9pbnRyX2hhbmRsZXIoYWRhcHRlcik7Ci0JaWYgKGNhdXNlICYgTVBTKQorCWlmIChjYXVzZSAmIE1QU19GKQogCQltcHNfaW50cl9oYW5kbGVyKGFkYXB0ZXIpOwotCWlmIChjYXVzZSAmIE5DU0kpCisJaWYgKGNhdXNlICYgTkNTSV9GKQogCQluY3NpX2ludHJfaGFuZGxlcihhZGFwdGVyKTsKLQlpZiAoY2F1c2UgJiBQTCkKKwlpZiAoY2F1c2UgJiBQTF9GKQogCQlwbF9pbnRyX2hhbmRsZXIoYWRhcHRlcik7Ci0JaWYgKGNhdXNlICYgU01CKQorCWlmIChjYXVzZSAmIFNNQl9GKQogCQlzbWJfaW50cl9oYW5kbGVyKGFkYXB0ZXIpOwotCWlmIChjYXVzZSAmIFhHTUFDMCkKKwlpZiAoY2F1c2UgJiBYR01BQzBfRikKIAkJeGdtYWNfaW50cl9oYW5kbGVyKGFkYXB0ZXIsIDApOwotCWlmIChjYXVzZSAmIFhHTUFDMSkKKwlpZiAoY2F1c2UgJiBYR01BQzFfRikKIAkJeGdtYWNfaW50cl9oYW5kbGVyKGFkYXB0ZXIsIDEpOwotCWlmIChjYXVzZSAmIFhHTUFDX0tSMCkKKwlpZiAoY2F1c2UgJiBYR01BQ19LUjBfRikKIAkJeGdtYWNfaW50cl9oYW5kbGVyKGFkYXB0ZXIsIDIpOwotCWlmIChjYXVzZSAmIFhHTUFDX0tSMSkKKwlpZiAoY2F1c2UgJiBYR01BQ19LUjFfRikKIAkJeGdtYWNfaW50cl9oYW5kbGVyKGFkYXB0ZXIsIDMpOwotCWlmIChjYXVzZSAmIFBDSUUpCisJaWYgKGNhdXNlICYgUENJRV9GKQogCQlwY2llX2ludHJfaGFuZGxlcihhZGFwdGVyKTsKLQlpZiAoY2F1c2UgJiBNQykKKwlpZiAoY2F1c2UgJiBNQ19GKQogCQltZW1faW50cl9oYW5kbGVyKGFkYXB0ZXIsIE1FTV9NQyk7Ci0JaWYgKCFpc190NChhZGFwdGVyLT5wYXJhbXMuY2hpcCkgJiYgKGNhdXNlICYgTUMxKSkKKwlpZiAoIWlzX3Q0KGFkYXB0ZXItPnBhcmFtcy5jaGlwKSAmJiAoY2F1c2UgJiBNQzFfUykpCiAJCW1lbV9pbnRyX2hhbmRsZXIoYWRhcHRlciwgTUVNX01DMSk7Ci0JaWYgKGNhdXNlICYgRURDMCkKKwlpZiAoY2F1c2UgJiBFREMwX0YpCiAJCW1lbV9pbnRyX2hhbmRsZXIoYWRhcHRlciwgTUVNX0VEQzApOwotCWlmIChjYXVzZSAmIEVEQzEpCisJaWYgKGNhdXNlICYgRURDMV9GKQogCQltZW1faW50cl9oYW5kbGVyKGFkYXB0ZXIsIE1FTV9FREMxKTsKLQlpZiAoY2F1c2UgJiBMRSkKKwlpZiAoY2F1c2UgJiBMRV9GKQogCQlsZV9pbnRyX2hhbmRsZXIoYWRhcHRlcik7Ci0JaWYgKGNhdXNlICYgVFApCisJaWYgKGNhdXNlICYgVFBfRikKIAkJdHBfaW50cl9oYW5kbGVyKGFkYXB0ZXIpOwotCWlmIChjYXVzZSAmIE1BKQorCWlmIChjYXVzZSAmIE1BX0YpCiAJCW1hX2ludHJfaGFuZGxlcihhZGFwdGVyKTsKLQlpZiAoY2F1c2UgJiBQTV9UWCkKKwlpZiAoY2F1c2UgJiBQTV9UWF9GKQogCQlwbXR4X2ludHJfaGFuZGxlcihhZGFwdGVyKTsKLQlpZiAoY2F1c2UgJiBQTV9SWCkKKwlpZiAoY2F1c2UgJiBQTV9SWF9GKQogCQlwbXJ4X2ludHJfaGFuZGxlcihhZGFwdGVyKTsKLQlpZiAoY2F1c2UgJiBVTFBfUlgpCisJaWYgKGNhdXNlICYgVUxQX1JYX0YpCiAJCXVscHJ4X2ludHJfaGFuZGxlcihhZGFwdGVyKTsKLQlpZiAoY2F1c2UgJiBDUExfU1dJVENIKQorCWlmIChjYXVzZSAmIENQTF9TV0lUQ0hfRikKIAkJY3Bsc3dfaW50cl9oYW5kbGVyKGFkYXB0ZXIpOwotCWlmIChjYXVzZSAmIFNHRSkKKwlpZiAoY2F1c2UgJiBTR0VfRikKIAkJc2dlX2ludHJfaGFuZGxlcihhZGFwdGVyKTsKLQlpZiAoY2F1c2UgJiBVTFBfVFgpCisJaWYgKGNhdXNlICYgVUxQX1RYX0YpCiAJCXVscHR4X2ludHJfaGFuZGxlcihhZGFwdGVyKTsKIAogCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHRzIGp1c3QgcHJvY2Vzc2VkIGZvciB3aGljaCB3ZSBhcmUgdGhlIG1hc3Rlci4gKi8KLQl0NF93cml0ZV9yZWcoYWRhcHRlciwgUExfSU5UX0NBVVNFLCBjYXVzZSAmIEdMQkxfSU5UUl9NQVNLKTsKLQkodm9pZCkgdDRfcmVhZF9yZWcoYWRhcHRlciwgUExfSU5UX0NBVVNFKTsgLyogZmx1c2ggKi8KKwl0NF93cml0ZV9yZWcoYWRhcHRlciwgUExfSU5UX0NBVVNFX0EsIGNhdXNlICYgR0xCTF9JTlRSX01BU0spOworCSh2b2lkKXQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFBMX0lOVF9DQVVTRV9BKTsgLyogZmx1c2ggKi8KIAlyZXR1cm4gMTsKIH0KIApAQCAtMjAyMywxOSArMjEwOSwxOSBAQAogICovCiB2b2lkIHQ0X2ludHJfZW5hYmxlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewotCXUzMiBwZiA9IFNPVVJDRVBGX0dFVCh0NF9yZWFkX3JlZyhhZGFwdGVyLCBQTF9XSE9BTUkpKTsKKwl1MzIgcGYgPSBTT1VSQ0VQRl9HKHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFBMX1dIT0FNSV9BKSk7CiAKLQl0NF93cml0ZV9yZWcoYWRhcHRlciwgU0dFX0lOVF9FTkFCTEUzLCBFUlJfQ1BMX0VYQ0VFRF9JUUVfU0laRSB8Ci0JCSAgICAgRVJSX0lOVkFMSURfQ0lEWF9JTkMgfCBFUlJfQ1BMX09QQ09ERV8wIHwKLQkJICAgICBFUlJfRFJPUFBFRF9EQiB8IEVSUl9EQVRBX0NQTF9PTl9ISUdIX1FJRDEgfAotCQkgICAgIEVSUl9EQVRBX0NQTF9PTl9ISUdIX1FJRDAgfCBFUlJfQkFEX0RCX1BJRFgzIHwKLQkJICAgICBFUlJfQkFEX0RCX1BJRFgyIHwgRVJSX0JBRF9EQl9QSURYMSB8Ci0JCSAgICAgRVJSX0JBRF9EQl9QSURYMCB8IEVSUl9JTkdfQ1RYVF9QUklPIHwKLQkJICAgICBFUlJfRUdSX0NUWFRfUFJJTyB8IElOR1JFU1NfU0laRV9FUlIgfAotCQkgICAgIERCRklGT19IUF9JTlQgfCBEQkZJRk9fTFBfSU5UIHwKLQkJICAgICBFR1JFU1NfU0laRV9FUlIpOwotCXQ0X3dyaXRlX3JlZyhhZGFwdGVyLCBNWVBGX1JFRyhQTF9QRl9JTlRfRU5BQkxFKSwgUEZfSU5UUl9NQVNLKTsKLQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsIFBMX0lOVF9NQVAwLCAwLCAxIDw8IHBmKTsKKwl0NF93cml0ZV9yZWcoYWRhcHRlciwgU0dFX0lOVF9FTkFCTEUzX0EsIEVSUl9DUExfRVhDRUVEX0lRRV9TSVpFX0YgfAorCQkgICAgIEVSUl9JTlZBTElEX0NJRFhfSU5DX0YgfCBFUlJfQ1BMX09QQ09ERV8wX0YgfAorCQkgICAgIEVSUl9EUk9QUEVEX0RCX0YgfCBFUlJfREFUQV9DUExfT05fSElHSF9RSUQxX0YgfAorCQkgICAgIEVSUl9EQVRBX0NQTF9PTl9ISUdIX1FJRDBfRiB8IEVSUl9CQURfREJfUElEWDNfRiB8CisJCSAgICAgRVJSX0JBRF9EQl9QSURYMl9GIHwgRVJSX0JBRF9EQl9QSURYMV9GIHwKKwkJICAgICBFUlJfQkFEX0RCX1BJRFgwX0YgfCBFUlJfSU5HX0NUWFRfUFJJT19GIHwKKwkJICAgICBFUlJfRUdSX0NUWFRfUFJJT19GIHwgSU5HUkVTU19TSVpFX0VSUl9GIHwKKwkJICAgICBEQkZJRk9fSFBfSU5UX0YgfCBEQkZJRk9fTFBfSU5UX0YgfAorCQkgICAgIEVHUkVTU19TSVpFX0VSUl9GKTsKKwl0NF93cml0ZV9yZWcoYWRhcHRlciwgTVlQRl9SRUcoUExfUEZfSU5UX0VOQUJMRV9BKSwgUEZfSU5UUl9NQVNLKTsKKwl0NF9zZXRfcmVnX2ZpZWxkKGFkYXB0ZXIsIFBMX0lOVF9NQVAwX0EsIDAsIDEgPDwgcGYpOwogfQogCiAvKioKQEAgLTIwNDgsMTAgKzIxMzQsMTAgQEAKICAqLwogdm9pZCB0NF9pbnRyX2Rpc2FibGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JdTMyIHBmID0gU09VUkNFUEZfR0VUKHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFBMX1dIT0FNSSkpOworCXUzMiBwZiA9IFNPVVJDRVBGX0codDRfcmVhZF9yZWcoYWRhcHRlciwgUExfV0hPQU1JX0EpKTsKIAotCXQ0X3dyaXRlX3JlZyhhZGFwdGVyLCBNWVBGX1JFRyhQTF9QRl9JTlRfRU5BQkxFKSwgMCk7Ci0JdDRfc2V0X3JlZ19maWVsZChhZGFwdGVyLCBQTF9JTlRfTUFQMCwgMSA8PCBwZiwgMCk7CisJdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIE1ZUEZfUkVHKFBMX1BGX0lOVF9FTkFCTEVfQSksIDApOworCXQ0X3NldF9yZWdfZmllbGQoYWRhcHRlciwgUExfSU5UX01BUDBfQSwgMSA8PCBwZiwgMCk7CiB9CiAKIC8qKgpAQCAtMjE2Niw2ICsyMjUyLDE0NyBAQAogCXJldHVybiB0NF93cl9tYm94KGFkYXB0ZXIsIG1ib3gsICZjLCBzaXplb2YoYyksIE5VTEwpOwogfQogCisvKiBSZWFkIGFuIFJTUyB0YWJsZSByb3cgKi8KK3N0YXRpYyBpbnQgcmRfcnNzX3JvdyhzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgaW50IHJvdywgdTMyICp2YWwpCit7CisJdDRfd3JpdGVfcmVnKGFkYXAsIFRQX1JTU19MS1BfVEFCTEVfQSwgMHhmZmYwMDAwMCB8IHJvdyk7CisJcmV0dXJuIHQ0X3dhaXRfb3BfZG9uZV92YWwoYWRhcCwgVFBfUlNTX0xLUF9UQUJMRV9BLCBMS1BUQkxST1dWTERfRiwgMSwKKwkJCQkgICA1LCAwLCB2YWwpOworfQorCisvKioKKyAqCXQ0X3JlYWRfcnNzIC0gcmVhZCB0aGUgY29udGVudHMgb2YgdGhlIFJTUyBtYXBwaW5nIHRhYmxlCisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCUBtYXA6IGhvbGRzIHRoZSBjb250ZW50cyBvZiB0aGUgUlNTIG1hcHBpbmcgdGFibGUKKyAqCisgKglSZWFkcyB0aGUgY29udGVudHMgb2YgdGhlIFJTUyBoYXNoLT5xdWV1ZSBtYXBwaW5nIHRhYmxlLgorICovCitpbnQgdDRfcmVhZF9yc3Moc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUxNiAqbWFwKQoreworCXUzMiB2YWw7CisJaW50IGksIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBSU1NfTkVOVFJJRVMgLyAyOyArK2kpIHsKKwkJcmV0ID0gcmRfcnNzX3JvdyhhZGFwdGVyLCBpLCAmdmFsKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJCSptYXArKyA9IExLUFRCTFFVRVVFMF9HKHZhbCk7CisJCSptYXArKyA9IExLUFRCTFFVRVVFMV9HKHZhbCk7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqCXQ0X3JlYWRfcnNzX2tleSAtIHJlYWQgdGhlIGdsb2JhbCBSU1Mga2V5CisgKglAYWRhcDogdGhlIGFkYXB0ZXIKKyAqCUBrZXk6IDEwLWVudHJ5IGFycmF5IGhvbGRpbmcgdGhlIDMyMC1iaXQgUlNTIGtleQorICoKKyAqCVJlYWRzIHRoZSBnbG9iYWwgMzIwLWJpdCBSU1Mga2V5LgorICovCit2b2lkIHQ0X3JlYWRfcnNzX2tleShzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdTMyICprZXkpCit7CisJdDRfcmVhZF9pbmRpcmVjdChhZGFwLCBUUF9QSU9fQUREUl9BLCBUUF9QSU9fREFUQV9BLCBrZXksIDEwLAorCQkJIFRQX1JTU19TRUNSRVRfS0VZMF9BKTsKK30KKworLyoqCisgKgl0NF93cml0ZV9yc3Nfa2V5IC0gcHJvZ3JhbSBvbmUgb2YgdGhlIFJTUyBrZXlzCisgKglAYWRhcDogdGhlIGFkYXB0ZXIKKyAqCUBrZXk6IDEwLWVudHJ5IGFycmF5IGhvbGRpbmcgdGhlIDMyMC1iaXQgUlNTIGtleQorICoJQGlkeDogd2hpY2ggUlNTIGtleSB0byB3cml0ZQorICoKKyAqCVdyaXRlcyBvbmUgb2YgdGhlIFJTUyBrZXlzIHdpdGggdGhlIGdpdmVuIDMyMC1iaXQgdmFsdWUuICBJZiBAaWR4IGlzCisgKgkwLi4xNSB0aGUgY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUgUlNTIGtleSB0YWJsZSBpcyB3cml0dGVuLAorICoJb3RoZXJ3aXNlIHRoZSBnbG9iYWwgUlNTIGtleSBpcyB3cml0dGVuLgorICovCit2b2lkIHQ0X3dyaXRlX3Jzc19rZXkoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIGNvbnN0IHUzMiAqa2V5LCBpbnQgaWR4KQoreworCXQ0X3dyaXRlX2luZGlyZWN0KGFkYXAsIFRQX1BJT19BRERSX0EsIFRQX1BJT19EQVRBX0EsIGtleSwgMTAsCisJCQkgIFRQX1JTU19TRUNSRVRfS0VZMF9BKTsKKwlpZiAoaWR4ID49IDAgJiYgaWR4IDwgMTYpCisJCXQ0X3dyaXRlX3JlZyhhZGFwLCBUUF9SU1NfQ09ORklHX1ZSVF9BLAorCQkJICAgICBLRVlXUkFERFJfVihpZHgpIHwgS0VZV1JFTl9GKTsKK30KKworLyoqCisgKgl0NF9yZWFkX3Jzc19wZl9jb25maWcgLSByZWFkIFBGIFJTUyBDb25maWd1cmF0aW9uIFRhYmxlCisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCUBpbmRleDogdGhlIGVudHJ5IGluIHRoZSBQRiBSU1MgdGFibGUgdG8gcmVhZAorICoJQHZhbHA6IHdoZXJlIHRvIHN0b3JlIHRoZSByZXR1cm5lZCB2YWx1ZQorICoKKyAqCVJlYWRzIHRoZSBQRiBSU1MgQ29uZmlndXJhdGlvbiBUYWJsZSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IGFuZCByZXR1cm5zCisgKgl0aGUgdmFsdWUgZm91bmQgdGhlcmUuCisgKi8KK3ZvaWQgdDRfcmVhZF9yc3NfcGZfY29uZmlnKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBpbnQgaW5kZXgsCisJCQkgICB1MzIgKnZhbHApCit7CisJdDRfcmVhZF9pbmRpcmVjdChhZGFwdGVyLCBUUF9QSU9fQUREUl9BLCBUUF9QSU9fREFUQV9BLAorCQkJIHZhbHAsIDEsIFRQX1JTU19QRjBfQ09ORklHX0EgKyBpbmRleCk7Cit9CisKKy8qKgorICoJdDRfcmVhZF9yc3NfdmZfY29uZmlnIC0gcmVhZCBWRiBSU1MgQ29uZmlndXJhdGlvbiBUYWJsZQorICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKglAaW5kZXg6IHRoZSBlbnRyeSBpbiB0aGUgVkYgUlNTIHRhYmxlIHRvIHJlYWQKKyAqCUB2Zmw6IHdoZXJlIHRvIHN0b3JlIHRoZSByZXR1cm5lZCBWRkwKKyAqCUB2Zmg6IHdoZXJlIHRvIHN0b3JlIHRoZSByZXR1cm5lZCBWRkgKKyAqCisgKglSZWFkcyB0aGUgVkYgUlNTIENvbmZpZ3VyYXRpb24gVGFibGUgYXQgdGhlIHNwZWNpZmllZCBpbmRleCBhbmQgcmV0dXJucworICoJdGhlIChWRkwsIFZGSCkgdmFsdWVzIGZvdW5kIHRoZXJlLgorICovCit2b2lkIHQ0X3JlYWRfcnNzX3ZmX2NvbmZpZyhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdW5zaWduZWQgaW50IGluZGV4LAorCQkJICAgdTMyICp2ZmwsIHUzMiAqdmZoKQoreworCXUzMiB2cnQsIG1hc2ssIGRhdGE7CisKKwltYXNrID0gVkZXUkFERFJfVihWRldSQUREUl9NKTsKKwlkYXRhID0gVkZXUkFERFJfVihpbmRleCk7CisKKwkvKiBSZXF1ZXN0IHRoYXQgdGhlIGluZGV4J3RoIFZGIFRhYmxlIHZhbHVlcyBiZSByZWFkIGludG8gVkZML1ZGSC4KKwkgKi8KKwl2cnQgPSB0NF9yZWFkX3JlZyhhZGFwdGVyLCBUUF9SU1NfQ09ORklHX1ZSVF9BKTsKKwl2cnQgJj0gfihWRlJEUkdfRiB8IFZGV1JFTl9GIHwgS0VZV1JFTl9GIHwgbWFzayk7CisJdnJ0IHw9IGRhdGEgfCBWRlJERU5fRjsKKwl0NF93cml0ZV9yZWcoYWRhcHRlciwgVFBfUlNTX0NPTkZJR19WUlRfQSwgdnJ0KTsKKworCS8qIEdyYWIgdGhlIFZGTC9WRkggdmFsdWVzIC4uLgorCSAqLworCXQ0X3JlYWRfaW5kaXJlY3QoYWRhcHRlciwgVFBfUElPX0FERFJfQSwgVFBfUElPX0RBVEFfQSwKKwkJCSB2ZmwsIDEsIFRQX1JTU19WRkxfQ09ORklHX0EpOworCXQ0X3JlYWRfaW5kaXJlY3QoYWRhcHRlciwgVFBfUElPX0FERFJfQSwgVFBfUElPX0RBVEFfQSwKKwkJCSB2ZmgsIDEsIFRQX1JTU19WRkhfQ09ORklHX0EpOworfQorCisvKioKKyAqCXQ0X3JlYWRfcnNzX3BmX21hcCAtIHJlYWQgUEYgUlNTIE1hcAorICoJQGFkYXB0ZXI6IHRoZSBhZGFwdGVyCisgKgorICoJUmVhZHMgdGhlIFBGIFJTUyBNYXAgcmVnaXN0ZXIgYW5kIHJldHVybnMgaXRzIHZhbHVlLgorICovCit1MzIgdDRfcmVhZF9yc3NfcGZfbWFwKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBwZm1hcDsKKworCXQ0X3JlYWRfaW5kaXJlY3QoYWRhcHRlciwgVFBfUElPX0FERFJfQSwgVFBfUElPX0RBVEFfQSwKKwkJCSAmcGZtYXAsIDEsIFRQX1JTU19QRl9NQVBfQSk7CisJcmV0dXJuIHBmbWFwOworfQorCisvKioKKyAqCXQ0X3JlYWRfcnNzX3BmX21hc2sgLSByZWFkIFBGIFJTUyBNYXNrCisgKglAYWRhcHRlcjogdGhlIGFkYXB0ZXIKKyAqCisgKglSZWFkcyB0aGUgUEYgUlNTIE1hc2sgcmVnaXN0ZXIgYW5kIHJldHVybnMgaXRzIHZhbHVlLgorICovCit1MzIgdDRfcmVhZF9yc3NfcGZfbWFzayhzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgcGZtYXNrOworCisJdDRfcmVhZF9pbmRpcmVjdChhZGFwdGVyLCBUUF9QSU9fQUREUl9BLCBUUF9QSU9fREFUQV9BLAorCQkJICZwZm1hc2ssIDEsIFRQX1JTU19QRl9NU0tfQSk7CisJcmV0dXJuIHBmbWFzazsKK30KKwogLyoqCiAgKgl0NF90cF9nZXRfdGNwX3N0YXRzIC0gcmVhZCBUUCdzIFRDUCBNSUIgY291bnRlcnMKICAqCUBhZGFwOiB0aGUgYWRhcHRlcgpAQCAtMjE3OCwyMyArMjQwNSwyMyBAQAogdm9pZCB0NF90cF9nZXRfdGNwX3N0YXRzKHN0cnVjdCBhZGFwdGVyICphZGFwLCBzdHJ1Y3QgdHBfdGNwX3N0YXRzICp2NCwKIAkJCSBzdHJ1Y3QgdHBfdGNwX3N0YXRzICp2NikKIHsKLQl1MzIgdmFsW1RQX01JQl9UQ1BfUlhUX1NFR19MTyAtIFRQX01JQl9UQ1BfT1VUX1JTVCArIDFdOworCXUzMiB2YWxbVFBfTUlCX1RDUF9SWFRfU0VHX0xPX0EgLSBUUF9NSUJfVENQX09VVF9SU1RfQSArIDFdOwogCi0jZGVmaW5lIFNUQVRfSURYKHgpICgoVFBfTUlCX1RDUF8jI3gpIC0gVFBfTUlCX1RDUF9PVVRfUlNUKQorI2RlZmluZSBTVEFUX0lEWCh4KSAoKFRQX01JQl9UQ1BfIyN4IyNfQSkgLSBUUF9NSUJfVENQX09VVF9SU1RfQSkKICNkZWZpbmUgU1RBVCh4KSAgICAgdmFsW1NUQVRfSURYKHgpXQogI2RlZmluZSBTVEFUNjQoeCkgICAoKCh1NjQpU1RBVCh4IyNfSEkpIDw8IDMyKSB8IFNUQVQoeCMjX0xPKSkKIAogCWlmICh2NCkgewotCQl0NF9yZWFkX2luZGlyZWN0KGFkYXAsIFRQX01JQl9JTkRFWCwgVFBfTUlCX0RBVEEsIHZhbCwKLQkJCQkgQVJSQVlfU0laRSh2YWwpLCBUUF9NSUJfVENQX09VVF9SU1QpOworCQl0NF9yZWFkX2luZGlyZWN0KGFkYXAsIFRQX01JQl9JTkRFWF9BLCBUUF9NSUJfREFUQV9BLCB2YWwsCisJCQkJIEFSUkFZX1NJWkUodmFsKSwgVFBfTUlCX1RDUF9PVVRfUlNUX0EpOwogCQl2NC0+dGNwT3V0UnN0cyA9IFNUQVQoT1VUX1JTVCk7CiAJCXY0LT50Y3BJblNlZ3MgID0gU1RBVDY0KElOX1NFRyk7CiAJCXY0LT50Y3BPdXRTZWdzID0gU1RBVDY0KE9VVF9TRUcpOwogCQl2NC0+dGNwUmV0cmFuc1NlZ3MgPSBTVEFUNjQoUlhUX1NFRyk7CiAJfQogCWlmICh2NikgewotCQl0NF9yZWFkX2luZGlyZWN0KGFkYXAsIFRQX01JQl9JTkRFWCwgVFBfTUlCX0RBVEEsIHZhbCwKLQkJCQkgQVJSQVlfU0laRSh2YWwpLCBUUF9NSUJfVENQX1Y2T1VUX1JTVCk7CisJCXQ0X3JlYWRfaW5kaXJlY3QoYWRhcCwgVFBfTUlCX0lOREVYX0EsIFRQX01JQl9EQVRBX0EsIHZhbCwKKwkJCQkgQVJSQVlfU0laRSh2YWwpLCBUUF9NSUJfVENQX1Y2T1VUX1JTVF9BKTsKIAkJdjYtPnRjcE91dFJzdHMgPSBTVEFUKE9VVF9SU1QpOwogCQl2Ni0+dGNwSW5TZWdzICA9IFNUQVQ2NChJTl9TRUcpOwogCQl2Ni0+dGNwT3V0U2VncyA9IFNUQVQ2NChPVVRfU0VHKTsKQEAgLTIyMTksMTYgKzI0NDYsMzcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBOTVRVUzsgKytpKSB7Ci0JCXQ0X3dyaXRlX3JlZyhhZGFwLCBUUF9NVFVfVEFCTEUsCi0JCQkgICAgIE1UVUlOREVYKDB4ZmYpIHwgTVRVVkFMVUUoaSkpOwotCQl2ID0gdDRfcmVhZF9yZWcoYWRhcCwgVFBfTVRVX1RBQkxFKTsKLQkJbXR1c1tpXSA9IE1UVVZBTFVFX0dFVCh2KTsKKwkJdDRfd3JpdGVfcmVnKGFkYXAsIFRQX01UVV9UQUJMRV9BLAorCQkJICAgICBNVFVJTkRFWF9WKDB4ZmYpIHwgTVRVVkFMVUVfVihpKSk7CisJCXYgPSB0NF9yZWFkX3JlZyhhZGFwLCBUUF9NVFVfVEFCTEVfQSk7CisJCW10dXNbaV0gPSBNVFVWQUxVRV9HKHYpOwogCQlpZiAobXR1X2xvZykKLQkJCW10dV9sb2dbaV0gPSBNVFVXSURUSF9HRVQodik7CisJCQltdHVfbG9nW2ldID0gTVRVV0lEVEhfRyh2KTsKIAl9CiB9CiAKIC8qKgorICoJdDRfcmVhZF9jb25nX3RibCAtIHJlYWRzIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgdGFibGUKKyAqCUBhZGFwOiB0aGUgYWRhcHRlcgorICoJQGluY3I6IHdoZXJlIHRvIHN0b3JlIHRoZSBhbHBoYSB2YWx1ZXMKKyAqCisgKglSZWFkcyB0aGUgYWRkaXRpdmUgaW5jcmVtZW50cyBwcm9ncmFtbWVkIGludG8gdGhlIEhXIGNvbmdlc3Rpb24KKyAqCWNvbnRyb2wgdGFibGUuCisgKi8KK3ZvaWQgdDRfcmVhZF9jb25nX3RibChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdTE2IGluY3JbTk1UVVNdW05DQ1RSTF9XSU5dKQoreworCXVuc2lnbmVkIGludCBtdHUsIHc7CisKKwlmb3IgKG10dSA9IDA7IG10dSA8IE5NVFVTOyArK210dSkKKwkJZm9yICh3ID0gMDsgdyA8IE5DQ1RSTF9XSU47ICsrdykgeworCQkJdDRfd3JpdGVfcmVnKGFkYXAsIFRQX0NDVFJMX1RBQkxFX0EsCisJCQkJICAgICBST1dJTkRFWF9WKDB4ZmZmZikgfCAobXR1IDw8IDUpIHwgdyk7CisJCQlpbmNyW210dV1bd10gPSAodTE2KXQ0X3JlYWRfcmVnKGFkYXAsCisJCQkJCQlUUF9DQ1RSTF9UQUJMRV9BKSAmIDB4MWZmZjsKKwkJfQorfQorCisvKioKICAqCXQ0X3RwX3dyX2JpdHNfaW5kaXJlY3QgLSBzZXQvY2xlYXIgYml0cyBpbiBhbiBpbmRpcmVjdCBUUCByZWdpc3RlcgogICoJQGFkYXA6IHRoZSBhZGFwdGVyCiAgKglAYWRkcjogdGhlIGluZGlyZWN0IFRQIHJlZ2lzdGVyIGFkZHJlc3MKQEAgLTIyNDAsOSArMjQ4OCw5IEBACiB2b2lkIHQ0X3RwX3dyX2JpdHNfaW5kaXJlY3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHVuc2lnbmVkIGludCBhZGRyLAogCQkJICAgIHVuc2lnbmVkIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgdmFsKQogewotCXQ0X3dyaXRlX3JlZyhhZGFwLCBUUF9QSU9fQUREUiwgYWRkcik7Ci0JdmFsIHw9IHQ0X3JlYWRfcmVnKGFkYXAsIFRQX1BJT19EQVRBKSAmIH5tYXNrOwotCXQ0X3dyaXRlX3JlZyhhZGFwLCBUUF9QSU9fREFUQSwgdmFsKTsKKwl0NF93cml0ZV9yZWcoYWRhcCwgVFBfUElPX0FERFJfQSwgYWRkcik7CisJdmFsIHw9IHQ0X3JlYWRfcmVnKGFkYXAsIFRQX1BJT19EQVRBX0EpICYgfm1hc2s7CisJdDRfd3JpdGVfcmVnKGFkYXAsIFRQX1BJT19EQVRBX0EsIHZhbCk7CiB9CiAKIC8qKgpAQCAtMjMyMSw4ICsyNTY5LDggQEAKIAogCQlpZiAoIShtdHUgJiAoKDEgPDwgbG9nMikgPj4gMikpKSAgICAgLyogcm91bmQgKi8KIAkJCWxvZzItLTsKLQkJdDRfd3JpdGVfcmVnKGFkYXAsIFRQX01UVV9UQUJMRSwgTVRVSU5ERVgoaSkgfAotCQkJICAgICBNVFVXSURUSChsb2cyKSB8IE1UVVZBTFVFKG10dSkpOworCQl0NF93cml0ZV9yZWcoYWRhcCwgVFBfTVRVX1RBQkxFX0EsIE1UVUlOREVYX1YoaSkgfAorCQkJICAgICBNVFVXSURUSF9WKGxvZzIpIHwgTVRVVkFMVUVfVihtdHUpKTsKIAogCQlmb3IgKHcgPSAwOyB3IDwgTkNDVFJMX1dJTjsgKyt3KSB7CiAJCQl1bnNpZ25lZCBpbnQgaW5jOwpAQCAtMjMzMCwxMyArMjU3OCw2NyBAQAogCQkJaW5jID0gbWF4KCgobXR1IC0gNDApICogYWxwaGFbd10pIC8gYXZnX3BrdHNbd10sCiAJCQkJICBDQ19NSU5fSU5DUik7CiAKLQkJCXQ0X3dyaXRlX3JlZyhhZGFwLCBUUF9DQ1RSTF9UQUJMRSwgKGkgPDwgMjEpIHwKKwkJCXQ0X3dyaXRlX3JlZyhhZGFwLCBUUF9DQ1RSTF9UQUJMRV9BLCAoaSA8PCAyMSkgfAogCQkJCSAgICAgKHcgPDwgMTYpIHwgKGJldGFbd10gPDwgMTMpIHwgaW5jKTsKIAkJfQogCX0KIH0KIAogLyoqCisgKgl0NF9wbXR4X2dldF9zdGF0cyAtIHJldHVybnMgdGhlIEhXIHN0YXRzIGZyb20gUE1UWAorICoJQGFkYXA6IHRoZSBhZGFwdGVyCisgKglAY250OiB3aGVyZSB0byBzdG9yZSB0aGUgY291bnQgc3RhdGlzdGljcworICoJQGN5Y2xlczogd2hlcmUgdG8gc3RvcmUgdGhlIGN5Y2xlIHN0YXRpc3RpY3MKKyAqCisgKglSZXR1cm5zIHBlcmZvcm1hbmNlIHN0YXRpc3RpY3MgZnJvbSBQTVRYLgorICovCit2b2lkIHQ0X3BtdHhfZ2V0X3N0YXRzKHN0cnVjdCBhZGFwdGVyICphZGFwLCB1MzIgY250W10sIHU2NCBjeWNsZXNbXSkKK3sKKwlpbnQgaTsKKwl1MzIgZGF0YVsyXTsKKworCWZvciAoaSA9IDA7IGkgPCBQTV9OU1RBVFM7IGkrKykgeworCQl0NF93cml0ZV9yZWcoYWRhcCwgUE1fVFhfU1RBVF9DT05GSUdfQSwgaSArIDEpOworCQljbnRbaV0gPSB0NF9yZWFkX3JlZyhhZGFwLCBQTV9UWF9TVEFUX0NPVU5UX0EpOworCQlpZiAoaXNfdDQoYWRhcC0+cGFyYW1zLmNoaXApKSB7CisJCQljeWNsZXNbaV0gPSB0NF9yZWFkX3JlZzY0KGFkYXAsIFBNX1RYX1NUQVRfTFNCX0EpOworCQl9IGVsc2UgeworCQkJdDRfcmVhZF9pbmRpcmVjdChhZGFwLCBQTV9UWF9EQkdfQ1RSTF9BLAorCQkJCQkgUE1fVFhfREJHX0RBVEFfQSwgZGF0YSwgMiwKKwkJCQkJIFBNX1RYX0RCR19TVEFUX01TQl9BKTsKKwkJCWN5Y2xlc1tpXSA9ICgoKHU2NClkYXRhWzBdIDw8IDMyKSB8IGRhdGFbMV0pOworCQl9CisJfQorfQorCisvKioKKyAqCXQ0X3BtcnhfZ2V0X3N0YXRzIC0gcmV0dXJucyB0aGUgSFcgc3RhdHMgZnJvbSBQTVJYCisgKglAYWRhcDogdGhlIGFkYXB0ZXIKKyAqCUBjbnQ6IHdoZXJlIHRvIHN0b3JlIHRoZSBjb3VudCBzdGF0aXN0aWNzCisgKglAY3ljbGVzOiB3aGVyZSB0byBzdG9yZSB0aGUgY3ljbGUgc3RhdGlzdGljcworICoKKyAqCVJldHVybnMgcGVyZm9ybWFuY2Ugc3RhdGlzdGljcyBmcm9tIFBNUlguCisgKi8KK3ZvaWQgdDRfcG1yeF9nZXRfc3RhdHMoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHUzMiBjbnRbXSwgdTY0IGN5Y2xlc1tdKQoreworCWludCBpOworCXUzMiBkYXRhWzJdOworCisJZm9yIChpID0gMDsgaSA8IFBNX05TVEFUUzsgaSsrKSB7CisJCXQ0X3dyaXRlX3JlZyhhZGFwLCBQTV9SWF9TVEFUX0NPTkZJR19BLCBpICsgMSk7CisJCWNudFtpXSA9IHQ0X3JlYWRfcmVnKGFkYXAsIFBNX1JYX1NUQVRfQ09VTlRfQSk7CisJCWlmIChpc190NChhZGFwLT5wYXJhbXMuY2hpcCkpIHsKKwkJCWN5Y2xlc1tpXSA9IHQ0X3JlYWRfcmVnNjQoYWRhcCwgUE1fUlhfU1RBVF9MU0JfQSk7CisJCX0gZWxzZSB7CisJCQl0NF9yZWFkX2luZGlyZWN0KGFkYXAsIFBNX1JYX0RCR19DVFJMX0EsCisJCQkJCSBQTV9SWF9EQkdfREFUQV9BLCBkYXRhLCAyLAorCQkJCQkgUE1fUlhfREJHX1NUQVRfTVNCX0EpOworCQkJY3ljbGVzW2ldID0gKCgodTY0KWRhdGFbMF0gPDwgMzIpIHwgZGF0YVsxXSk7CisJCX0KKwl9Cit9CisKKy8qKgogICoJZ2V0X21wc19iZ19tYXAgLSByZXR1cm4gdGhlIGJ1ZmZlciBncm91cHMgYXNzb2NpYXRlZCB3aXRoIGEgcG9ydAogICoJQGFkYXA6IHRoZSBhZGFwdGVyCiAgKglAaWR4OiB0aGUgcG9ydCBpbmRleApAQCAtMjM0Nyw3ICsyNjQ5LDcgQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBnZXRfbXBzX2JnX21hcChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgaW50IGlkeCkKIHsKLQl1MzIgbiA9IE5VTVBPUlRTX0dFVCh0NF9yZWFkX3JlZyhhZGFwLCBNUFNfQ01OX0NUTCkpOworCXUzMiBuID0gTlVNUE9SVFNfRyh0NF9yZWFkX3JlZyhhZGFwLCBNUFNfQ01OX0NUTF9BKSk7CiAKIAlpZiAobiA9PSAwKQogCQlyZXR1cm4gaWR4ID09IDAgPyAweGYgOiAwOwpAQCAtMjQ4NSwxMSArMjc4NywxMSBAQAogCWlmIChpc190NChhZGFwLT5wYXJhbXMuY2hpcCkpIHsKIAkJbWFnX2lkX3JlZ19sID0gUE9SVF9SRUcocG9ydCwgWEdNQUNfUE9SVF9NQUdJQ19NQUNJRF9MTyk7CiAJCW1hZ19pZF9yZWdfaCA9IFBPUlRfUkVHKHBvcnQsIFhHTUFDX1BPUlRfTUFHSUNfTUFDSURfSEkpOwotCQlwb3J0X2NmZ19yZWcgPSBQT1JUX1JFRyhwb3J0LCBYR01BQ19QT1JUX0NGRzIpOworCQlwb3J0X2NmZ19yZWcgPSBQT1JUX1JFRyhwb3J0LCBYR01BQ19QT1JUX0NGRzJfQSk7CiAJfSBlbHNlIHsKIAkJbWFnX2lkX3JlZ19sID0gVDVfUE9SVF9SRUcocG9ydCwgTUFDX1BPUlRfTUFHSUNfTUFDSURfTE8pOwogCQltYWdfaWRfcmVnX2ggPSBUNV9QT1JUX1JFRyhwb3J0LCBNQUNfUE9SVF9NQUdJQ19NQUNJRF9ISSk7Ci0JCXBvcnRfY2ZnX3JlZyA9IFQ1X1BPUlRfUkVHKHBvcnQsIE1BQ19QT1JUX0NGRzIpOworCQlwb3J0X2NmZ19yZWcgPSBUNV9QT1JUX1JFRyhwb3J0LCBNQUNfUE9SVF9DRkcyX0EpOwogCX0KIAogCWlmIChhZGRyKSB7CkBAIC0yNDk5LDggKzI4MDEsOCBAQAogCQl0NF93cml0ZV9yZWcoYWRhcCwgbWFnX2lkX3JlZ19oLAogCQkJICAgICAoYWRkclswXSA8PCA4KSB8IGFkZHJbMV0pOwogCX0KLQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIHBvcnRfY2ZnX3JlZywgTUFHSUNFTiwKLQkJCSBhZGRyID8gTUFHSUNFTiA6IDApOworCXQ0X3NldF9yZWdfZmllbGQoYWRhcCwgcG9ydF9jZmdfcmVnLCBNQUdJQ0VOX0YsCisJCQkgYWRkciA/IE1BR0lDRU5fRiA6IDApOwogfQogCiAvKioKQEAgLTI1MjUsMjAgKzI4MjcsMjEgQEAKIAl1MzIgcG9ydF9jZmdfcmVnOwogCiAJaWYgKGlzX3Q0KGFkYXAtPnBhcmFtcy5jaGlwKSkKLQkJcG9ydF9jZmdfcmVnID0gUE9SVF9SRUcocG9ydCwgWEdNQUNfUE9SVF9DRkcyKTsKKwkJcG9ydF9jZmdfcmVnID0gUE9SVF9SRUcocG9ydCwgWEdNQUNfUE9SVF9DRkcyX0EpOwogCWVsc2UKLQkJcG9ydF9jZmdfcmVnID0gVDVfUE9SVF9SRUcocG9ydCwgTUFDX1BPUlRfQ0ZHMik7CisJCXBvcnRfY2ZnX3JlZyA9IFQ1X1BPUlRfUkVHKHBvcnQsIE1BQ19QT1JUX0NGRzJfQSk7CiAKIAlpZiAoIWVuYWJsZSkgewotCQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIHBvcnRfY2ZnX3JlZywgUEFURU4sIDApOworCQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIHBvcnRfY2ZnX3JlZywgUEFURU5fRiwgMCk7CiAJCXJldHVybiAwOwogCX0KIAlpZiAobWFwID4gMHhmZikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKICNkZWZpbmUgRVBJT19SRUcobmFtZSkgXAotCShpc190NChhZGFwLT5wYXJhbXMuY2hpcCkgPyBQT1JUX1JFRyhwb3J0LCBYR01BQ19QT1JUX0VQSU9fIyNuYW1lKSA6IFwKLQlUNV9QT1JUX1JFRyhwb3J0LCBNQUNfUE9SVF9FUElPXyMjbmFtZSkpCisJKGlzX3Q0KGFkYXAtPnBhcmFtcy5jaGlwKSA/IFwKKwkgUE9SVF9SRUcocG9ydCwgWEdNQUNfUE9SVF9FUElPXyMjbmFtZSMjX0EpIDogXAorCSBUNV9QT1JUX1JFRyhwb3J0LCBNQUNfUE9SVF9FUElPXyMjbmFtZSMjX0EpKQogCiAJdDRfd3JpdGVfcmVnKGFkYXAsIEVQSU9fUkVHKERBVEExKSwgbWFzazAgPj4gMzIpOwogCXQ0X3dyaXRlX3JlZyhhZGFwLCBFUElPX1JFRyhEQVRBMiksIG1hc2sxKTsKQEAgLTI1NTAsMjEgKzI4NTMsMjEgQEAKIAogCQkvKiB3cml0ZSBieXRlIG1hc2tzICovCiAJCXQ0X3dyaXRlX3JlZyhhZGFwLCBFUElPX1JFRyhEQVRBMCksIG1hc2swKTsKLQkJdDRfd3JpdGVfcmVnKGFkYXAsIEVQSU9fUkVHKE9QKSwgQUREUkVTUyhpKSB8IEVQSU9XUik7CisJCXQ0X3dyaXRlX3JlZyhhZGFwLCBFUElPX1JFRyhPUCksIEFERFJFU1NfVihpKSB8IEVQSU9XUl9GKTsKIAkJdDRfcmVhZF9yZWcoYWRhcCwgRVBJT19SRUcoT1ApKTsgICAgICAgICAgICAgICAgLyogZmx1c2ggKi8KLQkJaWYgKHQ0X3JlYWRfcmVnKGFkYXAsIEVQSU9fUkVHKE9QKSkgJiBTRl9CVVNZKQorCQlpZiAodDRfcmVhZF9yZWcoYWRhcCwgRVBJT19SRUcoT1ApKSAmIFNGX0JVU1lfRikKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCiAJCS8qIHdyaXRlIENSQyAqLwogCQl0NF93cml0ZV9yZWcoYWRhcCwgRVBJT19SRUcoREFUQTApLCBjcmMpOwotCQl0NF93cml0ZV9yZWcoYWRhcCwgRVBJT19SRUcoT1ApLCBBRERSRVNTKGkgKyAzMikgfCBFUElPV1IpOworCQl0NF93cml0ZV9yZWcoYWRhcCwgRVBJT19SRUcoT1ApLCBBRERSRVNTX1YoaSArIDMyKSB8IEVQSU9XUl9GKTsKIAkJdDRfcmVhZF9yZWcoYWRhcCwgRVBJT19SRUcoT1ApKTsgICAgICAgICAgICAgICAgLyogZmx1c2ggKi8KLQkJaWYgKHQ0X3JlYWRfcmVnKGFkYXAsIEVQSU9fUkVHKE9QKSkgJiBTRl9CVVNZKQorCQlpZiAodDRfcmVhZF9yZWcoYWRhcCwgRVBJT19SRUcoT1ApKSAmIFNGX0JVU1lfRikKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCX0KICN1bmRlZiBFUElPX1JFRwogCi0JdDRfc2V0X3JlZ19maWVsZChhZGFwLCBQT1JUX1JFRyhwb3J0LCBYR01BQ19QT1JUX0NGRzIpLCAwLCBQQVRFTik7CisJdDRfc2V0X3JlZ19maWVsZChhZGFwLCBQT1JUX1JFRyhwb3J0LCBYR01BQ19QT1JUX0NGRzJfQSksIDAsIFBBVEVOX0YpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzQ5LDkgKzMwNTIsOSBAQAogCQkiSURNQV9GTF9TRU5EX0NPTVBMRVRJT05fVE9fSU1TRyIsCiAJfTsKIAlzdGF0aWMgY29uc3QgdTMyIHNnZV9yZWdzW10gPSB7Ci0JCVNHRV9ERUJVR19EQVRBX0xPV19JTkRFWF8yLAotCQlTR0VfREVCVUdfREFUQV9MT1dfSU5ERVhfMywKLQkJU0dFX0RFQlVHX0RBVEFfSElHSF9JTkRFWF8xMCwKKwkJU0dFX0RFQlVHX0RBVEFfTE9XX0lOREVYXzJfQSwKKwkJU0dFX0RFQlVHX0RBVEFfTE9XX0lOREVYXzNfQSwKKwkJU0dFX0RFQlVHX0RBVEFfSElHSF9JTkRFWF8xMF9BLAogCX07CiAJY29uc3QgY2hhciAqKnNnZV9pZG1hX2RlY29kZTsKIAlpbnQgc2dlX2lkbWFfZGVjb2RlX25zdGF0ZXM7CkBAIC0yODE4LDcgKzMxMjEsNyBAQAogCWlmIChyZXQgPCAwKSB7CiAJCWlmICgocmV0ID09IC1FQlVTWSB8fCByZXQgPT0gLUVUSU1FRE9VVCkgJiYgcmV0cmllcy0tID4gMCkKIAkJCWdvdG8gcmV0cnk7Ci0JCWlmICh0NF9yZWFkX3JlZyhhZGFwLCBNQV9QQ0lFX0ZXKSAmIFBDSUVfRldfRVJSKQorCQlpZiAodDRfcmVhZF9yZWcoYWRhcCwgUENJRV9GV19BKSAmIFBDSUVfRldfRVJSX0YpCiAJCQl0NF9yZXBvcnRfZndfZXJyb3IoYWRhcCk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMjg2OCw4ICszMTcxLDggQEAKIAkJCSAqIHRpbWVvdXQgLi4uIGFuZCB0aGVuIHJldHJ5IGlmIHdlIGhhdmVuJ3QgZXhoYXVzdGVkCiAJCQkgKiBvdXIgcmV0cmllcyAuLi4KIAkJCSAqLwotCQkJcGNpZV9mdyA9IHQ0X3JlYWRfcmVnKGFkYXAsIE1BX1BDSUVfRlcpOwotCQkJaWYgKCEocGNpZV9mdyAmIChQQ0lFX0ZXX0VSUnxQQ0lFX0ZXX0lOSVQpKSkgeworCQkJcGNpZV9mdyA9IHQ0X3JlYWRfcmVnKGFkYXAsIFBDSUVfRldfQSk7CisJCQlpZiAoIShwY2llX2Z3ICYgKFBDSUVfRldfRVJSX0Z8UENJRV9GV19JTklUX0YpKSkgewogCQkJCWlmICh3YWl0aW5nIDw9IDApIHsKIAkJCQkJaWYgKHJldHJpZXMtLSA+IDApCiAJCQkJCQlnb3RvIHJldHJ5OwpAQCAtMjg4NCw5ICszMTg3LDkgQEAKIAkJCSAqIHJlcG9ydCBlcnJvcnMgcHJlZmVyZW50aWFsbHkuCiAJCQkgKi8KIAkJCWlmIChzdGF0ZSkgewotCQkJCWlmIChwY2llX2Z3ICYgUENJRV9GV19FUlIpCisJCQkJaWYgKHBjaWVfZncgJiBQQ0lFX0ZXX0VSUl9GKQogCQkJCQkqc3RhdGUgPSBERVZfU1RBVEVfRVJSOwotCQkJCWVsc2UgaWYgKHBjaWVfZncgJiBQQ0lFX0ZXX0lOSVQpCisJCQkJZWxzZSBpZiAocGNpZV9mdyAmIFBDSUVfRldfSU5JVF9GKQogCQkJCQkqc3RhdGUgPSBERVZfU1RBVEVfSU5JVDsKIAkJCX0KIApAQCAtMjg5Niw3ICszMTk5LDcgQEAKIAkJCSAqIGZvciBvdXIgY2FsbGVyLgogCQkJICovCiAJCQlpZiAobWFzdGVyX21ib3ggPT0gUENJRV9GV19NQVNURVJfTSAmJgotCQkJICAgIChwY2llX2Z3ICYgUENJRV9GV19NQVNURVJfVkxEKSkKKwkJCSAgICAocGNpZV9mdyAmIFBDSUVfRldfTUFTVEVSX1ZMRF9GKSkKIAkJCQltYXN0ZXJfbWJveCA9IFBDSUVfRldfTUFTVEVSX0cocGNpZV9mdyk7CiAJCQlicmVhazsKIAkJfQpAQCAtMjk4NSw3ICszMjg4LDcgQEAKIAogCQltZW1zZXQoJmMsIDAsIHNpemVvZihjKSk7CiAJCUlOSVRfQ01EKGMsIFJFU0VULCBXUklURSk7Ci0JCWMudmFsID0gaHRvbmwoUElPUlNUIHwgUElPUlNUTU9ERSk7CisJCWMudmFsID0gaHRvbmwoUElPUlNUX0YgfCBQSU9SU1RNT0RFX0YpOwogCQljLmhhbHRfcGtkID0gaHRvbmwoRldfUkVTRVRfQ01EX0hBTFRfRik7CiAJCXJldCA9IHQ0X3dyX21ib3goYWRhcCwgbWJveCwgJmMsIHNpemVvZihjKSwgTlVMTCk7CiAJfQpAQCAtMzAwNCw4ICszMzA3LDggQEAKIAkgKiByYXRoZXIgdGhhbiBhIFJFU0VUIC4uLiBpZiBpdCdzIG5ldyBlbm91Z2ggdG8gdW5kZXJzdGFuZCB0aGF0IC4uLgogCSAqLwogCWlmIChyZXQgPT0gMCB8fCBmb3JjZSkgewotCQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIENJTV9CT09UX0NGRywgVVBDUlNULCBVUENSU1QpOwotCQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIFBDSUVfRlcsIFBDSUVfRldfSEFMVF9GLAorCQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIENJTV9CT09UX0NGR19BLCBVUENSU1RfRiwgVVBDUlNUX0YpOworCQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIFBDSUVfRldfQSwgUENJRV9GV19IQUxUX0YsCiAJCQkJIFBDSUVfRldfSEFMVF9GKTsKIAl9CiAKQEAgLTMwNDUsNyArMzM0OCw3IEBACiAJCSAqIGRvaW5nIGl0IGF1dG9tYXRpY2FsbHksIHdlIG5lZWQgdG8gY2xlYXIgdGhlIFBDSUVfRlcuSEFMVAogCQkgKiBiaXQuCiAJCSAqLwotCQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIFBDSUVfRlcsIFBDSUVfRldfSEFMVF9GLCAwKTsKKwkJdDRfc2V0X3JlZ19maWVsZChhZGFwLCBQQ0lFX0ZXX0EsIFBDSUVfRldfSEFMVF9GLCAwKTsKIAogCQkvKgogCQkgKiBJZiB3ZSd2ZSBiZWVuIGdpdmVuIGEgdmFsaWQgbWFpbGJveCwgZmlyc3QgdHJ5IHRvIGdldCB0aGUKQEAgLTMwNTUsMjEgKzMzNTgsMjEgQEAKIAkJICogaGl0dGluZyB0aGUgY2hpcCB3aXRoIGEgaGFtbWVyLgogCQkgKi8KIAkJaWYgKG1ib3ggPD0gUENJRV9GV19NQVNURVJfTSkgewotCQkJdDRfc2V0X3JlZ19maWVsZChhZGFwLCBDSU1fQk9PVF9DRkcsIFVQQ1JTVCwgMCk7CisJCQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIENJTV9CT09UX0NGR19BLCBVUENSU1RfRiwgMCk7CiAJCQltc2xlZXAoMTAwKTsKIAkJCWlmICh0NF9md19yZXNldChhZGFwLCBtYm94LAotCQkJCQlQSU9SU1QgfCBQSU9SU1RNT0RFKSA9PSAwKQorCQkJCQlQSU9SU1RfRiB8IFBJT1JTVE1PREVfRikgPT0gMCkKIAkJCQlyZXR1cm4gMDsKIAkJfQogCi0JCXQ0X3dyaXRlX3JlZyhhZGFwLCBQTF9SU1QsIFBJT1JTVCB8IFBJT1JTVE1PREUpOworCQl0NF93cml0ZV9yZWcoYWRhcCwgUExfUlNUX0EsIFBJT1JTVF9GIHwgUElPUlNUTU9ERV9GKTsKIAkJbXNsZWVwKDIwMDApOwogCX0gZWxzZSB7CiAJCWludCBtczsKIAotCQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIENJTV9CT09UX0NGRywgVVBDUlNULCAwKTsKKwkJdDRfc2V0X3JlZ19maWVsZChhZGFwLCBDSU1fQk9PVF9DRkdfQSwgVVBDUlNUX0YsIDApOwogCQlmb3IgKG1zID0gMDsgbXMgPCBGV19DTURfTUFYX1RJTUVPVVQ7ICkgewotCQkJaWYgKCEodDRfcmVhZF9yZWcoYWRhcCwgUENJRV9GVykgJiBQQ0lFX0ZXX0hBTFRfRikpCisJCQlpZiAoISh0NF9yZWFkX3JlZyhhZGFwLCBQQ0lFX0ZXX0EpICYgUENJRV9GV19IQUxUX0YpKQogCQkJCXJldHVybiAwOwogCQkJbXNsZWVwKDEwMCk7CiAJCQltcyArPSAxMDA7CkBAIC0zMTQ4LDIyICszNDUxLDIzIEBACiAJdW5zaWduZWQgaW50IGZsX2FsaWduID0gY2FjaGVfbGluZV9zaXplIDwgMzIgPyAzMiA6IGNhY2hlX2xpbmVfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgZmxfYWxpZ25fbG9nID0gZmxzKGZsX2FsaWduKSAtIDE7CiAKLQl0NF93cml0ZV9yZWcoYWRhcCwgU0dFX0hPU1RfUEFHRV9TSVpFLAotCQkgICAgIEhPU1RQQUdFU0laRVBGMChzZ2VfaHBzKSB8Ci0JCSAgICAgSE9TVFBBR0VTSVpFUEYxKHNnZV9ocHMpIHwKLQkJICAgICBIT1NUUEFHRVNJWkVQRjIoc2dlX2hwcykgfAotCQkgICAgIEhPU1RQQUdFU0laRVBGMyhzZ2VfaHBzKSB8Ci0JCSAgICAgSE9TVFBBR0VTSVpFUEY0KHNnZV9ocHMpIHwKLQkJICAgICBIT1NUUEFHRVNJWkVQRjUoc2dlX2hwcykgfAotCQkgICAgIEhPU1RQQUdFU0laRVBGNihzZ2VfaHBzKSB8Ci0JCSAgICAgSE9TVFBBR0VTSVpFUEY3KHNnZV9ocHMpKTsKKwl0NF93cml0ZV9yZWcoYWRhcCwgU0dFX0hPU1RfUEFHRV9TSVpFX0EsCisJCSAgICAgSE9TVFBBR0VTSVpFUEYwX1Yoc2dlX2hwcykgfAorCQkgICAgIEhPU1RQQUdFU0laRVBGMV9WKHNnZV9ocHMpIHwKKwkJICAgICBIT1NUUEFHRVNJWkVQRjJfVihzZ2VfaHBzKSB8CisJCSAgICAgSE9TVFBBR0VTSVpFUEYzX1Yoc2dlX2hwcykgfAorCQkgICAgIEhPU1RQQUdFU0laRVBGNF9WKHNnZV9ocHMpIHwKKwkJICAgICBIT1NUUEFHRVNJWkVQRjVfVihzZ2VfaHBzKSB8CisJCSAgICAgSE9TVFBBR0VTSVpFUEY2X1Yoc2dlX2hwcykgfAorCQkgICAgIEhPU1RQQUdFU0laRVBGN19WKHNnZV9ocHMpKTsKIAogCWlmIChpc190NChhZGFwLT5wYXJhbXMuY2hpcCkpIHsKLQkJdDRfc2V0X3JlZ19maWVsZChhZGFwLCBTR0VfQ09OVFJPTCwKLQkJCQkgSU5HUEFEQk9VTkRBUllfTUFTSyB8Ci0JCQkJIEVHUlNUQVRVU1BBR0VTSVpFX01BU0ssCi0JCQkJIElOR1BBREJPVU5EQVJZKGZsX2FsaWduX2xvZyAtIDUpIHwKLQkJCQkgRUdSU1RBVFVTUEFHRVNJWkUoc3RhdF9sZW4gIT0gNjQpKTsKKwkJdDRfc2V0X3JlZ19maWVsZChhZGFwLCBTR0VfQ09OVFJPTF9BLAorCQkJCSBJTkdQQURCT1VOREFSWV9WKElOR1BBREJPVU5EQVJZX00pIHwKKwkJCQkgRUdSU1RBVFVTUEFHRVNJWkVfRiwKKwkJCQkgSU5HUEFEQk9VTkRBUllfVihmbF9hbGlnbl9sb2cgLQorCQkJCQkJICBJTkdQQURCT1VOREFSWV9TSElGVF9YKSB8CisJCQkJIEVHUlNUQVRVU1BBR0VTSVpFX1Yoc3RhdF9sZW4gIT0gNjQpKTsKIAl9IGVsc2UgewogCQkvKiBUNSBpbnRyb2R1Y2VkIHRoZSBzZXBhcmF0aW9uIG9mIHRoZSBGcmVlIExpc3QgUGFkZGluZyBhbmQKIAkJICogUGFja2luZyBCb3VuZGFyaWVzLiAgVGh1cywgd2UgY2FuIHNlbGVjdCBhIHNtYWxsZXIgUGFkZGluZwpAQCAtMzE5MywxNSArMzQ5NywxNSBAQAogCQkJZmxfYWxpZ24gPSA2NDsKIAkJCWZsX2FsaWduX2xvZyA9IDY7CiAJCX0KLQkJdDRfc2V0X3JlZ19maWVsZChhZGFwLCBTR0VfQ09OVFJPTCwKLQkJCQkgSU5HUEFEQk9VTkRBUllfTUFTSyB8Ci0JCQkJIEVHUlNUQVRVU1BBR0VTSVpFX01BU0ssCi0JCQkJIElOR1BBREJPVU5EQVJZKElOR1BDSUVCT1VOREFSWV8zMkJfWCkgfAotCQkJCSBFR1JTVEFUVVNQQUdFU0laRShzdGF0X2xlbiAhPSA2NCkpOworCQl0NF9zZXRfcmVnX2ZpZWxkKGFkYXAsIFNHRV9DT05UUk9MX0EsCisJCQkJIElOR1BBREJPVU5EQVJZX1YoSU5HUEFEQk9VTkRBUllfTSkgfAorCQkJCSBFR1JTVEFUVVNQQUdFU0laRV9GLAorCQkJCSBJTkdQQURCT1VOREFSWV9WKElOR1BDSUVCT1VOREFSWV8zMkJfWCkgfAorCQkJCSBFR1JTVEFUVVNQQUdFU0laRV9WKHN0YXRfbGVuICE9IDY0KSk7CiAJCXQ0X3NldF9yZWdfZmllbGQoYWRhcCwgU0dFX0NPTlRST0wyX0EsCiAJCQkJIElOR1BBQ0tCT1VOREFSWV9WKElOR1BBQ0tCT1VOREFSWV9NKSwKIAkJCQkgSU5HUEFDS0JPVU5EQVJZX1YoZmxfYWxpZ25fbG9nIC0KLQkJCQkJCSBJTkdQQUNLQk9VTkRBUllfU0hJRlRfWCkpOworCQkJCQkJICAgSU5HUEFDS0JPVU5EQVJZX1NISUZUX1gpKTsKIAl9CiAJLyoKIAkgKiBBZGp1c3QgdmFyaW91cyBTR0UgRnJlZSBMaXN0IEhvc3QgQnVmZmVyIFNpemVzLgpAQCAtMzIyNCwxNSArMzUyOCwxNSBAQAogCSAqIERlZmF1bHQgRmlybXdhcmUgQ29uZmlndXJhdGlvbiBGaWxlIGJ1dCB3ZSBuZWVkIHRvIGFkanVzdCBpdCBmb3IKIAkgKiB0aGlzIGhvc3QncyBjYWNoZSBsaW5lIHNpemUuCiAJICovCi0JdDRfd3JpdGVfcmVnKGFkYXAsIFNHRV9GTF9CVUZGRVJfU0laRTAsIHBhZ2Vfc2l6ZSk7Ci0JdDRfd3JpdGVfcmVnKGFkYXAsIFNHRV9GTF9CVUZGRVJfU0laRTIsCi0JCSAgICAgKHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9GTF9CVUZGRVJfU0laRTIpICsgZmxfYWxpZ24tMSkKKwl0NF93cml0ZV9yZWcoYWRhcCwgU0dFX0ZMX0JVRkZFUl9TSVpFMF9BLCBwYWdlX3NpemUpOworCXQ0X3dyaXRlX3JlZyhhZGFwLCBTR0VfRkxfQlVGRkVSX1NJWkUyX0EsCisJCSAgICAgKHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9GTF9CVUZGRVJfU0laRTJfQSkgKyBmbF9hbGlnbi0xKQogCQkgICAgICYgfihmbF9hbGlnbi0xKSk7Ci0JdDRfd3JpdGVfcmVnKGFkYXAsIFNHRV9GTF9CVUZGRVJfU0laRTMsCi0JCSAgICAgKHQ0X3JlYWRfcmVnKGFkYXAsIFNHRV9GTF9CVUZGRVJfU0laRTMpICsgZmxfYWxpZ24tMSkKKwl0NF93cml0ZV9yZWcoYWRhcCwgU0dFX0ZMX0JVRkZFUl9TSVpFM19BLAorCQkgICAgICh0NF9yZWFkX3JlZyhhZGFwLCBTR0VfRkxfQlVGRkVSX1NJWkUzX0EpICsgZmxfYWxpZ24tMSkKIAkJICAgICAmIH4oZmxfYWxpZ24tMSkpOwogCi0JdDRfd3JpdGVfcmVnKGFkYXAsIFVMUF9SWF9URERQX1BTWiwgSFBaMChwYWdlX3NoaWZ0IC0gMTIpKTsKKwl0NF93cml0ZV9yZWcoYWRhcCwgVUxQX1JYX1RERFBfUFNaX0EsIEhQWjBfVihwYWdlX3NoaWZ0IC0gMTIpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzkxNywxMiArNDIyMSwxMiBAQAogewogCXUzMiB3aG9hbWk7CiAKLQl3aG9hbWkgPSByZWFkbChyZWdzICsgUExfV0hPQU1JKTsKKwl3aG9hbWkgPSByZWFkbChyZWdzICsgUExfV0hPQU1JX0EpOwogCWlmICh3aG9hbWkgIT0gMHhmZmZmZmZmZiAmJiB3aG9hbWkgIT0gQ0lNX1BGX05PQUNDRVNTKQogCQlyZXR1cm4gMDsKIAogCW1zbGVlcCg1MDApOwotCXdob2FtaSA9IHJlYWRsKHJlZ3MgKyBQTF9XSE9BTUkpOworCXdob2FtaSA9IHJlYWRsKHJlZ3MgKyBQTF9XSE9BTUlfQSk7CiAJcmV0dXJuICh3aG9hbWkgIT0gMHhmZmZmZmZmZiAmJiB3aG9hbWkgIT0gQ0lNX1BGX05PQUNDRVNTID8gMCA6IC1FSU8pOwogfQogCkBAIC0zOTQ2LDcgKzQyNTAsNyBAQAogCXJldCA9IHNmMV93cml0ZShhZGFwLCAxLCAxLCAwLCBTRl9SRF9JRCk7CiAJaWYgKCFyZXQpCiAJCXJldCA9IHNmMV9yZWFkKGFkYXAsIDMsIDAsIDEsICZpbmZvKTsKLQl0NF93cml0ZV9yZWcoYWRhcCwgU0ZfT1AsIDApOyAgICAgICAgICAgICAgICAgICAgLyogdW5sb2NrIFNGICovCisJdDRfd3JpdGVfcmVnKGFkYXAsIFNGX09QX0EsIDApOyAgICAgICAgICAgICAgICAgICAgLyogdW5sb2NrIFNGICovCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMzk2OSw3ICs0MjczLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJYWRhcC0+cGFyYW1zLnNmX3NpemUgPSAxIDw8IGluZm87CiAJYWRhcC0+cGFyYW1zLnNmX2Z3X3N0YXJ0ID0KLQkJdDRfcmVhZF9yZWcoYWRhcCwgQ0lNX0JPT1RfQ0ZHKSAmIEJPT1RBRERSX01BU0s7CisJCXQ0X3JlYWRfcmVnKGFkYXAsIENJTV9CT09UX0NGR19BKSAmIEJPT1RBRERSX007CiAKIAlpZiAoYWRhcC0+cGFyYW1zLnNmX3NpemUgPCBGTEFTSF9NSU5fU0laRSkKIAkJZGV2X3dhcm4oYWRhcC0+cGRldl9kZXYsICJXQVJOSU5HISEhIEZMQVNIIHNpemUgJSN4IDwgJSN4ISEhXG4iLApAQCAtMzk5Myw3ICs0Mjk3LDcgQEAKIAl1MzIgcGxfcmV2OwogCiAJZ2V0X3BjaV9tb2RlKGFkYXB0ZXIsICZhZGFwdGVyLT5wYXJhbXMucGNpKTsKLQlwbF9yZXYgPSBHX1JFVih0NF9yZWFkX3JlZyhhZGFwdGVyLCBQTF9SRVYpKTsKKwlwbF9yZXYgPSBSRVZfRyh0NF9yZWFkX3JlZyhhZGFwdGVyLCBQTF9SRVZfQSkpOwogCiAJcmV0ID0gZ2V0X2ZsYXNoX3BhcmFtcyhhZGFwdGVyKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNDAxOSw2ICs0MzIzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJYWRhcHRlci0+cGFyYW1zLmNpbV9sYV9zaXplID0gQ0lNTEFfU0laRTsKIAlpbml0X2NvbmdfY3RybChhZGFwdGVyLT5wYXJhbXMuYV93bmQsIGFkYXB0ZXItPnBhcmFtcy5iX3duZCk7CiAKIAkvKgpAQCAtNDEzMyw3ICs0NDM4LDcgQEAKIAogCS8qIEV4dHJhY3QgdGhlIFNHRSBQYWdlIFNpemUgZm9yIG91ciBQRi4KIAkgKi8KLQlocHMgPSB0NF9yZWFkX3JlZyhhZGFwdGVyLCBTR0VfSE9TVF9QQUdFX1NJWkUpOworCWhwcyA9IHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFNHRV9IT1NUX1BBR0VfU0laRV9BKTsKIAlzX2hwcyA9IChIT1NUUEFHRVNJWkVQRjBfUyArCiAJCSAoSE9TVFBBR0VTSVpFUEYxX1MgLSBIT1NUUEFHRVNJWkVQRjBfUykgKiBhZGFwdGVyLT5mbik7CiAJc2dlX3BhcmFtcy0+aHBzID0gKChocHMgPj4gc19ocHMpICYgSE9TVFBBR0VTSVpFUEYwX00pOwpAQCAtNDE0MiwxMCArNDQ0NywxMCBAQAogCSAqLwogCXNfcXBwID0gKFFVRVVFU1BFUlBBR0VQRjBfUyArCiAJCShRVUVVRVNQRVJQQUdFUEYxX1MgLSBRVUVVRVNQRVJQQUdFUEYwX1MpICogYWRhcHRlci0+Zm4pOwotCXFwcCA9IHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFNHRV9FR1JFU1NfUVVFVUVTX1BFUl9QQUdFX1BGKTsKLQlzZ2VfcGFyYW1zLT5lcV9xcHAgPSAoKHFwcCA+PiBzX3FwcCkgJiBRVUVVRVNQRVJQQUdFUEYwX01BU0spOwotCXFwcCA9IHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFNHRV9JTkdSRVNTX1FVRVVFU19QRVJfUEFHRV9QRik7Ci0Jc2dlX3BhcmFtcy0+aXFfcXBwID0gKChxcHAgPj4gc19xcHApICYgUVVFVUVTUEVSUEFHRVBGMF9NQVNLKTsKKwlxcHAgPSB0NF9yZWFkX3JlZyhhZGFwdGVyLCBTR0VfRUdSRVNTX1FVRVVFU19QRVJfUEFHRV9QRl9BKTsKKwlzZ2VfcGFyYW1zLT5lcV9xcHAgPSAoKHFwcCA+PiBzX3FwcCkgJiBRVUVVRVNQRVJQQUdFUEYwX00pOworCXFwcCA9IHQ0X3JlYWRfcmVnKGFkYXB0ZXIsIFNHRV9JTkdSRVNTX1FVRVVFU19QRVJfUEFHRV9QRl9BKTsKKwlzZ2VfcGFyYW1zLT5pcV9xcHAgPSAoKHFwcCA+PiBzX3FwcCkgJiBRVUVVRVNQRVJQQUdFUEYwX00pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MTYxLDkgKzQ0NjYsOSBAQAogCWludCBjaGFuOwogCXUzMiB2OwogCi0JdiA9IHQ0X3JlYWRfcmVnKGFkYXAsIFRQX1RJTUVSX1JFU09MVVRJT04pOwotCWFkYXAtPnBhcmFtcy50cC50cmUgPSBUSU1FUlJFU09MVVRJT05fR0VUKHYpOwotCWFkYXAtPnBhcmFtcy50cC5kYWNrX3JlID0gREVMQVlFREFDS1JFU09MVVRJT05fR0VUKHYpOworCXYgPSB0NF9yZWFkX3JlZyhhZGFwLCBUUF9USU1FUl9SRVNPTFVUSU9OX0EpOworCWFkYXAtPnBhcmFtcy50cC50cmUgPSBUSU1FUlJFU09MVVRJT05fRyh2KTsKKwlhZGFwLT5wYXJhbXMudHAuZGFja19yZSA9IERFTEFZRURBQ0tSRVNPTFVUSU9OX0codik7CiAKIAkvKiBNT0RRX1JFUV9NQVAgZGVmYXVsdHMgdG8gc2V0dGluZyBxdWV1ZXMgMC0zIHRvIGNoYW4gMC0zICovCiAJZm9yIChjaGFuID0gMDsgY2hhbiA8IE5DSEFOOyBjaGFuKyspCkBAIC00MTcyLDI3ICs0NDc3LDI3IEBACiAJLyogQ2FjaGUgdGhlIGFkYXB0ZXIncyBDb21wcmVzc2VkIEZpbHRlciBNb2RlIGFuZCBnbG9iYWwgSW5jcmVzcwogCSAqIENvbmZpZ3VyYXRpb24uCiAJICovCi0JdDRfcmVhZF9pbmRpcmVjdChhZGFwLCBUUF9QSU9fQUREUiwgVFBfUElPX0RBVEEsCisJdDRfcmVhZF9pbmRpcmVjdChhZGFwLCBUUF9QSU9fQUREUl9BLCBUUF9QSU9fREFUQV9BLAogCQkJICZhZGFwLT5wYXJhbXMudHAudmxhbl9wcmlfbWFwLCAxLAotCQkJIFRQX1ZMQU5fUFJJX01BUCk7Ci0JdDRfcmVhZF9pbmRpcmVjdChhZGFwLCBUUF9QSU9fQUREUiwgVFBfUElPX0RBVEEsCisJCQkgVFBfVkxBTl9QUklfTUFQX0EpOworCXQ0X3JlYWRfaW5kaXJlY3QoYWRhcCwgVFBfUElPX0FERFJfQSwgVFBfUElPX0RBVEFfQSwKIAkJCSAmYWRhcC0+cGFyYW1zLnRwLmluZ3Jlc3NfY29uZmlnLCAxLAotCQkJIFRQX0lOR1JFU1NfQ09ORklHKTsKKwkJCSBUUF9JTkdSRVNTX0NPTkZJR19BKTsKIAogCS8qIE5vdyB0aGF0IHdlIGhhdmUgVFBfVkxBTl9QUklfTUFQIGNhY2hlZCwgd2UgY2FuIGNhbGN1bGF0ZSB0aGUgZmllbGQKIAkgKiBzaGlmdCBwb3NpdGlvbnMgb2Ygc2V2ZXJhbCBlbGVtZW50cyBvZiB0aGUgQ29tcHJlc3NlZCBGaWx0ZXIgVHVwbGUKIAkgKiBmb3IgdGhpcyBhZGFwdGVyIHdoaWNoIHdlIG5lZWQgZnJlcXVlbnRseSAuLi4KIAkgKi8KLQlhZGFwLT5wYXJhbXMudHAudmxhbl9zaGlmdCA9IHQ0X2ZpbHRlcl9maWVsZF9zaGlmdChhZGFwLCBGX1ZMQU4pOwotCWFkYXAtPnBhcmFtcy50cC52bmljX3NoaWZ0ID0gdDRfZmlsdGVyX2ZpZWxkX3NoaWZ0KGFkYXAsIEZfVk5JQ19JRCk7Ci0JYWRhcC0+cGFyYW1zLnRwLnBvcnRfc2hpZnQgPSB0NF9maWx0ZXJfZmllbGRfc2hpZnQoYWRhcCwgRl9QT1JUKTsKKwlhZGFwLT5wYXJhbXMudHAudmxhbl9zaGlmdCA9IHQ0X2ZpbHRlcl9maWVsZF9zaGlmdChhZGFwLCBWTEFOX0YpOworCWFkYXAtPnBhcmFtcy50cC52bmljX3NoaWZ0ID0gdDRfZmlsdGVyX2ZpZWxkX3NoaWZ0KGFkYXAsIFZOSUNfSURfRik7CisJYWRhcC0+cGFyYW1zLnRwLnBvcnRfc2hpZnQgPSB0NF9maWx0ZXJfZmllbGRfc2hpZnQoYWRhcCwgUE9SVF9GKTsKIAlhZGFwLT5wYXJhbXMudHAucHJvdG9jb2xfc2hpZnQgPSB0NF9maWx0ZXJfZmllbGRfc2hpZnQoYWRhcCwKLQkJCQkJCQkgICAgICAgRl9QUk9UT0NPTCk7CisJCQkJCQkJICAgICAgIFBST1RPQ09MX0YpOwogCiAJLyogSWYgVFBfSU5HUkVTU19DT05GSUcuVk5JRCA9PSAwLCB0aGVuIFRQX1ZMQU5fUFJJX01BUC5WTklDX0lECiAJICogcmVwcmVzZW50cyB0aGUgcHJlc2Vuc2Ugb2YgYW4gT3V0ZXIgVkxBTiBpbnN0ZWFkIG9mIGEgVk5JQyBJRC4KIAkgKi8KLQlpZiAoKGFkYXAtPnBhcmFtcy50cC5pbmdyZXNzX2NvbmZpZyAmIEZfVk5JQykgPT0gMCkKKwlpZiAoKGFkYXAtPnBhcmFtcy50cC5pbmdyZXNzX2NvbmZpZyAmIFZOSUNfRikgPT0gMCkKIAkJYWRhcC0+cGFyYW1zLnRwLnZuaWNfc2hpZnQgPSAtMTsKIAogCXJldHVybiAwOwpAQCAtNDIxOCwzNSArNDUyMywzNSBAQAogCiAJZm9yIChzZWwgPSAxLCBmaWVsZF9zaGlmdCA9IDA7IHNlbCA8IGZpbHRlcl9zZWw7IHNlbCA8PD0gMSkgewogCQlzd2l0Y2ggKGZpbHRlcl9tb2RlICYgc2VsKSB7Ci0JCWNhc2UgRl9GQ09FOgotCQkJZmllbGRfc2hpZnQgKz0gV19GVF9GQ09FOworCQljYXNlIEZDT0VfRjoKKwkJCWZpZWxkX3NoaWZ0ICs9IEZUX0ZDT0VfVzsKIAkJCWJyZWFrOwotCQljYXNlIEZfUE9SVDoKLQkJCWZpZWxkX3NoaWZ0ICs9IFdfRlRfUE9SVDsKKwkJY2FzZSBQT1JUX0Y6CisJCQlmaWVsZF9zaGlmdCArPSBGVF9QT1JUX1c7CiAJCQlicmVhazsKLQkJY2FzZSBGX1ZOSUNfSUQ6Ci0JCQlmaWVsZF9zaGlmdCArPSBXX0ZUX1ZOSUNfSUQ7CisJCWNhc2UgVk5JQ19JRF9GOgorCQkJZmllbGRfc2hpZnQgKz0gRlRfVk5JQ19JRF9XOwogCQkJYnJlYWs7Ci0JCWNhc2UgRl9WTEFOOgotCQkJZmllbGRfc2hpZnQgKz0gV19GVF9WTEFOOworCQljYXNlIFZMQU5fRjoKKwkJCWZpZWxkX3NoaWZ0ICs9IEZUX1ZMQU5fVzsKIAkJCWJyZWFrOwotCQljYXNlIEZfVE9TOgotCQkJZmllbGRfc2hpZnQgKz0gV19GVF9UT1M7CisJCWNhc2UgVE9TX0Y6CisJCQlmaWVsZF9zaGlmdCArPSBGVF9UT1NfVzsKIAkJCWJyZWFrOwotCQljYXNlIEZfUFJPVE9DT0w6Ci0JCQlmaWVsZF9zaGlmdCArPSBXX0ZUX1BST1RPQ09MOworCQljYXNlIFBST1RPQ09MX0Y6CisJCQlmaWVsZF9zaGlmdCArPSBGVF9QUk9UT0NPTF9XOwogCQkJYnJlYWs7Ci0JCWNhc2UgRl9FVEhFUlRZUEU6Ci0JCQlmaWVsZF9zaGlmdCArPSBXX0ZUX0VUSEVSVFlQRTsKKwkJY2FzZSBFVEhFUlRZUEVfRjoKKwkJCWZpZWxkX3NoaWZ0ICs9IEZUX0VUSEVSVFlQRV9XOwogCQkJYnJlYWs7Ci0JCWNhc2UgRl9NQUNNQVRDSDoKLQkJCWZpZWxkX3NoaWZ0ICs9IFdfRlRfTUFDTUFUQ0g7CisJCWNhc2UgTUFDTUFUQ0hfRjoKKwkJCWZpZWxkX3NoaWZ0ICs9IEZUX01BQ01BVENIX1c7CiAJCQlicmVhazsKLQkJY2FzZSBGX01QU0hJVFRZUEU6Ci0JCQlmaWVsZF9zaGlmdCArPSBXX0ZUX01QU0hJVFRZUEU7CisJCWNhc2UgTVBTSElUVFlQRV9GOgorCQkJZmllbGRfc2hpZnQgKz0gRlRfTVBTSElUVFlQRV9XOwogCQkJYnJlYWs7Ci0JCWNhc2UgRl9GUkFHTUVOVEFUSU9OOgotCQkJZmllbGRfc2hpZnQgKz0gV19GVF9GUkFHTUVOVEFUSU9OOworCQljYXNlIEZSQUdNRU5UQVRJT05fRjoKKwkJCWZpZWxkX3NoaWZ0ICs9IEZUX0ZSQUdNRU5UQVRJT05fVzsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNDMxMSwzICs0NjE2LDI4OSBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKworLyoqCisgKgl0NF9yZWFkX2NpbXFfY2ZnIC0gcmVhZCBDSU0gcXVldWUgY29uZmlndXJhdGlvbgorICoJQGFkYXA6IHRoZSBhZGFwdGVyCisgKglAYmFzZTogaG9sZHMgdGhlIHF1ZXVlIGJhc2UgYWRkcmVzc2VzIGluIGJ5dGVzCisgKglAc2l6ZTogaG9sZHMgdGhlIHF1ZXVlIHNpemVzIGluIGJ5dGVzCisgKglAdGhyZXM6IGhvbGRzIHRoZSBxdWV1ZSBmdWxsIHRocmVzaG9sZHMgaW4gYnl0ZXMKKyAqCisgKglSZXR1cm5zIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb2YgdGhlIENJTSBxdWV1ZXMsIHN0YXJ0aW5nIHdpdGgKKyAqCXRoZSBJQlFzLCB0aGVuIHRoZSBPQlFzLgorICovCit2b2lkIHQ0X3JlYWRfY2ltcV9jZmcoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHUxNiAqYmFzZSwgdTE2ICpzaXplLCB1MTYgKnRocmVzKQoreworCXVuc2lnbmVkIGludCBpLCB2OworCWludCBjaW1fbnVtX29icSA9IGlzX3Q0KGFkYXAtPnBhcmFtcy5jaGlwKSA/CisJCQkJQ0lNX05VTV9PQlEgOiBDSU1fTlVNX09CUV9UNTsKKworCWZvciAoaSA9IDA7IGkgPCBDSU1fTlVNX0lCUTsgaSsrKSB7CisJCXQ0X3dyaXRlX3JlZyhhZGFwLCBDSU1fUVVFVUVfQ09ORklHX1JFRl9BLCBJQlFTRUxFQ1RfRiB8CisJCQkgICAgIFFVRU5VTVNFTEVDVF9WKGkpKTsKKwkJdiA9IHQ0X3JlYWRfcmVnKGFkYXAsIENJTV9RVUVVRV9DT05GSUdfQ1RSTF9BKTsKKwkJLyogdmFsdWUgaXMgaW4gMjU2LWJ5dGUgdW5pdHMgKi8KKwkJKmJhc2UrKyA9IENJTVFCQVNFX0codikgKiAyNTY7CisJCSpzaXplKysgPSBDSU1RU0laRV9HKHYpICogMjU2OworCQkqdGhyZXMrKyA9IFFVRUZVTExUSFJTSF9HKHYpICogODsgLyogOC1ieXRlIHVuaXQgKi8KKwl9CisJZm9yIChpID0gMDsgaSA8IGNpbV9udW1fb2JxOyBpKyspIHsKKwkJdDRfd3JpdGVfcmVnKGFkYXAsIENJTV9RVUVVRV9DT05GSUdfUkVGX0EsIE9CUVNFTEVDVF9GIHwKKwkJCSAgICAgUVVFTlVNU0VMRUNUX1YoaSkpOworCQl2ID0gdDRfcmVhZF9yZWcoYWRhcCwgQ0lNX1FVRVVFX0NPTkZJR19DVFJMX0EpOworCQkvKiB2YWx1ZSBpcyBpbiAyNTYtYnl0ZSB1bml0cyAqLworCQkqYmFzZSsrID0gQ0lNUUJBU0VfRyh2KSAqIDI1NjsKKwkJKnNpemUrKyA9IENJTVFTSVpFX0codikgKiAyNTY7CisJfQorfQorCisvKioKKyAqCXQ0X3JlYWRfY2ltX2licSAtIHJlYWQgdGhlIGNvbnRlbnRzIG9mIGEgQ0lNIGluYm91bmQgcXVldWUKKyAqCUBhZGFwOiB0aGUgYWRhcHRlcgorICoJQHFpZDogdGhlIHF1ZXVlIGluZGV4CisgKglAZGF0YTogd2hlcmUgdG8gc3RvcmUgdGhlIHF1ZXVlIGNvbnRlbnRzCisgKglAbjogY2FwYWNpdHkgb2YgQGRhdGEgaW4gMzItYml0IHdvcmRzCisgKgorICoJUmVhZHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBzZWxlY3RlZCBDSU0gcXVldWUgc3RhcnRpbmcgYXQgYWRkcmVzcyAwIHVwCisgKgl0byB0aGUgY2FwYWNpdHkgb2YgQGRhdGEuICBAbiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4gIFJldHVybnMgPCAwIG9uCisgKgllcnJvciBhbmQgdGhlIG51bWJlciBvZiAzMi1iaXQgd29yZHMgYWN0dWFsbHkgcmVhZCBvbiBzdWNjZXNzLgorICovCitpbnQgdDRfcmVhZF9jaW1faWJxKHN0cnVjdCBhZGFwdGVyICphZGFwLCB1bnNpZ25lZCBpbnQgcWlkLCB1MzIgKmRhdGEsIHNpemVfdCBuKQoreworCWludCBpLCBlcnIsIGF0dGVtcHRzOworCXVuc2lnbmVkIGludCBhZGRyOworCWNvbnN0IHVuc2lnbmVkIGludCBud29yZHMgPSBDSU1fSUJRX1NJWkUgKiA0OworCisJaWYgKHFpZCA+IDUgfHwgKG4gJiAzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhZGRyID0gcWlkICogbndvcmRzOworCWlmIChuID4gbndvcmRzKQorCQluID0gbndvcmRzOworCisJLyogSXQgbWlnaHQgdGFrZSAzLTEwbXMgYmVmb3JlIHRoZSBJQlEgZGVidWcgcmVhZCBhY2Nlc3MgaXMgYWxsb3dlZC4KKwkgKiBXYWl0IGZvciAxIFNlYyB3aXRoIGEgZGVsYXkgb2YgMSB1c2VjLgorCSAqLworCWF0dGVtcHRzID0gMTAwMDAwMDsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyssIGFkZHIrKykgeworCQl0NF93cml0ZV9yZWcoYWRhcCwgQ0lNX0lCUV9EQkdfQ0ZHX0EsIElCUURCR0FERFJfVihhZGRyKSB8CisJCQkgICAgIElCUURCR0VOX0YpOworCQllcnIgPSB0NF93YWl0X29wX2RvbmUoYWRhcCwgQ0lNX0lCUV9EQkdfQ0ZHX0EsIElCUURCR0JVU1lfRiwgMCwKKwkJCQkgICAgICBhdHRlbXB0cywgMSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQkqZGF0YSsrID0gdDRfcmVhZF9yZWcoYWRhcCwgQ0lNX0lCUV9EQkdfREFUQV9BKTsKKwl9CisJdDRfd3JpdGVfcmVnKGFkYXAsIENJTV9JQlFfREJHX0NGR19BLCAwKTsKKwlyZXR1cm4gaTsKK30KKworLyoqCisgKgl0NF9yZWFkX2NpbV9vYnEgLSByZWFkIHRoZSBjb250ZW50cyBvZiBhIENJTSBvdXRib3VuZCBxdWV1ZQorICoJQGFkYXA6IHRoZSBhZGFwdGVyCisgKglAcWlkOiB0aGUgcXVldWUgaW5kZXgKKyAqCUBkYXRhOiB3aGVyZSB0byBzdG9yZSB0aGUgcXVldWUgY29udGVudHMKKyAqCUBuOiBjYXBhY2l0eSBvZiBAZGF0YSBpbiAzMi1iaXQgd29yZHMKKyAqCisgKglSZWFkcyB0aGUgY29udGVudHMgb2YgdGhlIHNlbGVjdGVkIENJTSBxdWV1ZSBzdGFydGluZyBhdCBhZGRyZXNzIDAgdXAKKyAqCXRvIHRoZSBjYXBhY2l0eSBvZiBAZGF0YS4gIEBuIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LiAgUmV0dXJucyA8IDAgb24KKyAqCWVycm9yIGFuZCB0aGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyBhY3R1YWxseSByZWFkIG9uIHN1Y2Nlc3MuCisgKi8KK2ludCB0NF9yZWFkX2NpbV9vYnEoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHVuc2lnbmVkIGludCBxaWQsIHUzMiAqZGF0YSwgc2l6ZV90IG4pCit7CisJaW50IGksIGVycjsKKwl1bnNpZ25lZCBpbnQgYWRkciwgdiwgbndvcmRzOworCWludCBjaW1fbnVtX29icSA9IGlzX3Q0KGFkYXAtPnBhcmFtcy5jaGlwKSA/CisJCQkJQ0lNX05VTV9PQlEgOiBDSU1fTlVNX09CUV9UNTsKKworCWlmICgocWlkID4gKGNpbV9udW1fb2JxIC0gMSkpIHx8IChuICYgMykpCisJCXJldHVybiAtRUlOVkFMOworCisJdDRfd3JpdGVfcmVnKGFkYXAsIENJTV9RVUVVRV9DT05GSUdfUkVGX0EsIE9CUVNFTEVDVF9GIHwKKwkJICAgICBRVUVOVU1TRUxFQ1RfVihxaWQpKTsKKwl2ID0gdDRfcmVhZF9yZWcoYWRhcCwgQ0lNX1FVRVVFX0NPTkZJR19DVFJMX0EpOworCisJYWRkciA9IENJTVFCQVNFX0codikgKiA2NDsgICAgLyogbXVsaXBsZSBvZiAyNTYgLT4gbXVsaXBsZSBvZiA0ICovCisJbndvcmRzID0gQ0lNUVNJWkVfRyh2KSAqIDY0OyAgLyogc2FtZSAqLworCWlmIChuID4gbndvcmRzKQorCQluID0gbndvcmRzOworCisJZm9yIChpID0gMDsgaSA8IG47IGkrKywgYWRkcisrKSB7CisJCXQ0X3dyaXRlX3JlZyhhZGFwLCBDSU1fT0JRX0RCR19DRkdfQSwgT0JRREJHQUREUl9WKGFkZHIpIHwKKwkJCSAgICAgT0JRREJHRU5fRik7CisJCWVyciA9IHQ0X3dhaXRfb3BfZG9uZShhZGFwLCBDSU1fT0JRX0RCR19DRkdfQSwgT0JRREJHQlVTWV9GLCAwLAorCQkJCSAgICAgIDIsIDEpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJKmRhdGErKyA9IHQ0X3JlYWRfcmVnKGFkYXAsIENJTV9PQlFfREJHX0RBVEFfQSk7CisJfQorCXQ0X3dyaXRlX3JlZyhhZGFwLCBDSU1fT0JRX0RCR19DRkdfQSwgMCk7CisJcmV0dXJuIGk7Cit9CisKKy8qKgorICoJdDRfY2ltX3JlYWQgLSByZWFkIGEgYmxvY2sgZnJvbSBDSU0gaW50ZXJuYWwgYWRkcmVzcyBzcGFjZQorICoJQGFkYXA6IHRoZSBhZGFwdGVyCisgKglAYWRkcjogdGhlIHN0YXJ0IGFkZHJlc3Mgd2l0aGluIHRoZSBDSU0gYWRkcmVzcyBzcGFjZQorICoJQG46IG51bWJlciBvZiB3b3JkcyB0byByZWFkCisgKglAdmFscDogd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdAorICoKKyAqCVJlYWRzIGEgYmxvY2sgb2YgNC1ieXRlIHdvcmRzIGZyb20gdGhlIENJTSBpbnRlbmFsIGFkZHJlc3Mgc3BhY2UuCisgKi8KK2ludCB0NF9jaW1fcmVhZChzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdW5zaWduZWQgaW50IGFkZHIsIHVuc2lnbmVkIGludCBuLAorCQl1bnNpZ25lZCBpbnQgKnZhbHApCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAodDRfcmVhZF9yZWcoYWRhcCwgQ0lNX0hPU1RfQUNDX0NUUkxfQSkgJiBIT1NUQlVTWV9GKQorCQlyZXR1cm4gLUVCVVNZOworCisJZm9yICggOyAhcmV0ICYmIG4tLTsgYWRkciArPSA0KSB7CisJCXQ0X3dyaXRlX3JlZyhhZGFwLCBDSU1fSE9TVF9BQ0NfQ1RSTF9BLCBhZGRyKTsKKwkJcmV0ID0gdDRfd2FpdF9vcF9kb25lKGFkYXAsIENJTV9IT1NUX0FDQ19DVFJMX0EsIEhPU1RCVVNZX0YsCisJCQkJICAgICAgMCwgNSwgMik7CisJCWlmICghcmV0KQorCQkJKnZhbHArKyA9IHQ0X3JlYWRfcmVnKGFkYXAsIENJTV9IT1NUX0FDQ19EQVRBX0EpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqCXQ0X2NpbV93cml0ZSAtIHdyaXRlIGEgYmxvY2sgaW50byBDSU0gaW50ZXJuYWwgYWRkcmVzcyBzcGFjZQorICoJQGFkYXA6IHRoZSBhZGFwdGVyCisgKglAYWRkcjogdGhlIHN0YXJ0IGFkZHJlc3Mgd2l0aGluIHRoZSBDSU0gYWRkcmVzcyBzcGFjZQorICoJQG46IG51bWJlciBvZiB3b3JkcyB0byB3cml0ZQorICoJQHZhbHA6IHNldCBvZiB2YWx1ZXMgdG8gd3JpdGUKKyAqCisgKglXcml0ZXMgYSBibG9jayBvZiA0LWJ5dGUgd29yZHMgaW50byB0aGUgQ0lNIGludGVuYWwgYWRkcmVzcyBzcGFjZS4KKyAqLworaW50IHQ0X2NpbV93cml0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdW5zaWduZWQgaW50IGFkZHIsIHVuc2lnbmVkIGludCBuLAorCQkgY29uc3QgdW5zaWduZWQgaW50ICp2YWxwKQoreworCWludCByZXQgPSAwOworCisJaWYgKHQ0X3JlYWRfcmVnKGFkYXAsIENJTV9IT1NUX0FDQ19DVFJMX0EpICYgSE9TVEJVU1lfRikKKwkJcmV0dXJuIC1FQlVTWTsKKworCWZvciAoIDsgIXJldCAmJiBuLS07IGFkZHIgKz0gNCkgeworCQl0NF93cml0ZV9yZWcoYWRhcCwgQ0lNX0hPU1RfQUNDX0RBVEFfQSwgKnZhbHArKyk7CisJCXQ0X3dyaXRlX3JlZyhhZGFwLCBDSU1fSE9TVF9BQ0NfQ1RSTF9BLCBhZGRyIHwgSE9TVFdSSVRFX0YpOworCQlyZXQgPSB0NF93YWl0X29wX2RvbmUoYWRhcCwgQ0lNX0hPU1RfQUNDX0NUUkxfQSwgSE9TVEJVU1lfRiwKKwkJCQkgICAgICAwLCA1LCAyKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0NF9jaW1fd3JpdGUxKHN0cnVjdCBhZGFwdGVyICphZGFwLCB1bnNpZ25lZCBpbnQgYWRkciwKKwkJCSB1bnNpZ25lZCBpbnQgdmFsKQoreworCXJldHVybiB0NF9jaW1fd3JpdGUoYWRhcCwgYWRkciwgMSwgJnZhbCk7Cit9CisKKy8qKgorICoJdDRfY2ltX3JlYWRfbGEgLSByZWFkIENJTSBMQSBjYXB0dXJlIGJ1ZmZlcgorICoJQGFkYXA6IHRoZSBhZGFwdGVyCisgKglAbGFfYnVmOiB3aGVyZSB0byBzdG9yZSB0aGUgTEEgZGF0YQorICoJQHdycHRyOiB0aGUgSFcgd3JpdGUgcG9pbnRlciB3aXRoaW4gdGhlIGNhcHR1cmUgYnVmZmVyCisgKgorICoJUmVhZHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBDSU0gTEEgYnVmZmVyIHdpdGggdGhlIG1vc3QgcmVjZW50IGVudHJ5IGF0CisgKgl0aGUgZW5kCW9mIHRoZSByZXR1cm5lZCBkYXRhIGFuZCB3aXRoIHRoZSBlbnRyeSBhdCBAd3JwdHIgZmlyc3QuCisgKglXZSB0cnkgdG8gbGVhdmUgdGhlIExBIGluIHRoZSBydW5uaW5nIHN0YXRlIHdlIGZpbmQgaXQgaW4uCisgKi8KK2ludCB0NF9jaW1fcmVhZF9sYShzdHJ1Y3QgYWRhcHRlciAqYWRhcCwgdTMyICpsYV9idWYsIHVuc2lnbmVkIGludCAqd3JwdHIpCit7CisJaW50IGksIHJldDsKKwl1bnNpZ25lZCBpbnQgY2ZnLCB2YWwsIGlkeDsKKworCXJldCA9IHQ0X2NpbV9yZWFkKGFkYXAsIFVQX1VQX0RCR19MQV9DRkdfQSwgMSwgJmNmZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChjZmcgJiBVUERCR0xBRU5fRikgewkvKiBMQSBpcyBydW5uaW5nLCBmcmVlemUgaXQgKi8KKwkJcmV0ID0gdDRfY2ltX3dyaXRlMShhZGFwLCBVUF9VUF9EQkdfTEFfQ0ZHX0EsIDApOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSB0NF9jaW1fcmVhZChhZGFwLCBVUF9VUF9EQkdfTEFfQ0ZHX0EsIDEsICZ2YWwpOworCWlmIChyZXQpCisJCWdvdG8gcmVzdGFydDsKKworCWlkeCA9IFVQREJHTEFXUlBUUl9HKHZhbCk7CisJaWYgKHdycHRyKQorCQkqd3JwdHIgPSBpZHg7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcC0+cGFyYW1zLmNpbV9sYV9zaXplOyBpKyspIHsKKwkJcmV0ID0gdDRfY2ltX3dyaXRlMShhZGFwLCBVUF9VUF9EQkdfTEFfQ0ZHX0EsCisJCQkJICAgIFVQREJHTEFSRFBUUl9WKGlkeCkgfCBVUERCR0xBUkRFTl9GKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCQlyZXQgPSB0NF9jaW1fcmVhZChhZGFwLCBVUF9VUF9EQkdfTEFfQ0ZHX0EsIDEsICZ2YWwpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCWlmICh2YWwgJiBVUERCR0xBUkRFTl9GKSB7CisJCQlyZXQgPSAtRVRJTUVET1VUOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gdDRfY2ltX3JlYWQoYWRhcCwgVVBfVVBfREJHX0xBX0RBVEFfQSwgMSwgJmxhX2J1ZltpXSk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwkJaWR4ID0gKGlkeCArIDEpICYgVVBEQkdMQVJEUFRSX007CisJfQorcmVzdGFydDoKKwlpZiAoY2ZnICYgVVBEQkdMQUVOX0YpIHsKKwkJaW50IHIgPSB0NF9jaW1fd3JpdGUxKGFkYXAsIFVQX1VQX0RCR19MQV9DRkdfQSwKKwkJCQkgICAgICBjZmcgJiB+VVBEQkdMQVJERU5fRik7CisJCWlmICghcmV0KQorCQkJcmV0ID0gcjsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKgl0NF90cF9yZWFkX2xhIC0gcmVhZCBUUCBMQSBjYXB0dXJlIGJ1ZmZlcgorICoJQGFkYXA6IHRoZSBhZGFwdGVyCisgKglAbGFfYnVmOiB3aGVyZSB0byBzdG9yZSB0aGUgTEEgZGF0YQorICoJQHdycHRyOiB0aGUgSFcgd3JpdGUgcG9pbnRlciB3aXRoaW4gdGhlIGNhcHR1cmUgYnVmZmVyCisgKgorICoJUmVhZHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBUUCBMQSBidWZmZXIgd2l0aCB0aGUgbW9zdCByZWNlbnQgZW50cnkgYXQKKyAqCXRoZSBlbmQJb2YgdGhlIHJldHVybmVkIGRhdGEgYW5kIHdpdGggdGhlIGVudHJ5IGF0IEB3cnB0ciBmaXJzdC4KKyAqCVdlIGxlYXZlIHRoZSBMQSBpbiB0aGUgcnVubmluZyBzdGF0ZSB3ZSBmaW5kIGl0IGluLgorICovCit2b2lkIHQ0X3RwX3JlYWRfbGEoc3RydWN0IGFkYXB0ZXIgKmFkYXAsIHU2NCAqbGFfYnVmLCB1bnNpZ25lZCBpbnQgKndycHRyKQoreworCWJvb2wgbGFzdF9pbmNvbXBsZXRlOworCXVuc2lnbmVkIGludCBpLCBjZmcsIHZhbCwgaWR4OworCisJY2ZnID0gdDRfcmVhZF9yZWcoYWRhcCwgVFBfREJHX0xBX0NPTkZJR19BKSAmIDB4ZmZmZjsKKwlpZiAoY2ZnICYgREJHTEFFTkFCTEVfRikJCQkvKiBmcmVlemUgTEEgKi8KKwkJdDRfd3JpdGVfcmVnKGFkYXAsIFRQX0RCR19MQV9DT05GSUdfQSwKKwkJCSAgICAgYWRhcC0+cGFyYW1zLnRwLmxhX21hc2sgfCAoY2ZnIF4gREJHTEFFTkFCTEVfRikpOworCisJdmFsID0gdDRfcmVhZF9yZWcoYWRhcCwgVFBfREJHX0xBX0NPTkZJR19BKTsKKwlpZHggPSBEQkdMQVdQVFJfRyh2YWwpOworCWxhc3RfaW5jb21wbGV0ZSA9IERCR0xBTU9ERV9HKHZhbCkgPj0gMiAmJiAodmFsICYgREJHTEFXSExGX0YpID09IDA7CisJaWYgKGxhc3RfaW5jb21wbGV0ZSkKKwkJaWR4ID0gKGlkeCArIDEpICYgREJHTEFSUFRSX007CisJaWYgKHdycHRyKQorCQkqd3JwdHIgPSBpZHg7CisKKwl2YWwgJj0gMHhmZmZmOworCXZhbCAmPSB+REJHTEFSUFRSX1YoREJHTEFSUFRSX00pOworCXZhbCB8PSBhZGFwLT5wYXJhbXMudHAubGFfbWFzazsKKworCWZvciAoaSA9IDA7IGkgPCBUUExBX1NJWkU7IGkrKykgeworCQl0NF93cml0ZV9yZWcoYWRhcCwgVFBfREJHX0xBX0NPTkZJR19BLCBEQkdMQVJQVFJfVihpZHgpIHwgdmFsKTsKKwkJbGFfYnVmW2ldID0gdDRfcmVhZF9yZWc2NChhZGFwLCBUUF9EQkdfTEFfREFUQUxfQSk7CisJCWlkeCA9IChpZHggKyAxKSAmIERCR0xBUlBUUl9NOworCX0KKworCS8qIFdpcGUgb3V0IGxhc3QgZW50cnkgaWYgaXQgaXNuJ3QgdmFsaWQgKi8KKwlpZiAobGFzdF9pbmNvbXBsZXRlKQorCQlsYV9idWZbVFBMQV9TSVpFIC0gMV0gPSB+MFVMTDsKKworCWlmIChjZmcgJiBEQkdMQUVOQUJMRV9GKSAgICAgICAgICAgICAgICAgICAgLyogcmVzdG9yZSBydW5uaW5nIHN0YXRlICovCisJCXQ0X3dyaXRlX3JlZyhhZGFwLCBUUF9EQkdfTEFfQ09ORklHX0EsCisJCQkgICAgIGNmZyB8IGFkYXAtPnBhcmFtcy50cC5sYV9tYXNrKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvdDRfaHcuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvdDRfaHcuaAppbmRleCBjMTlhOTBlLi4zODBiMTVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC90NF9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvdDRfaHcuaApAQCAtNDgsNiArNDgsNyBAQAogCU5NVFVTICAgICAgICAgID0gMTYsICAgIC8qIHNpemUgb2YgTVRVIHRhYmxlICovCiAJTkNDVFJMX1dJTiAgICAgPSAzMiwgICAgLyogIyBvZiBjb25nZXN0aW9uIGNvbnRyb2wgd2luZG93cyAqLwogCUwyVF9TSVpFICAgICAgID0gNDA5NiwgIC8qICMgb2YgTDJUIGVudHJpZXMgKi8KKwlQTV9OU1RBVFMgICAgICA9IDUsICAgICAvKiAjIG9mIFBNIHN0YXRzICovCiAJTUJPWF9MRU4gICAgICAgPSA2NCwgICAgLyogbWFpbGJveCBzaXplIGluIGJ5dGVzICovCiAJVFJBQ0VfTEVOICAgICAgPSAxMTIsICAgLyogbGVuZ3RoIG9mIHRyYWNlIGRhdGEgYW5kIG1hc2sgKi8KIAlGSUxURVJfT1BUX0xFTiA9IDM2LCAgICAvKiBmaWx0ZXIgdHVwbGUgd2lkdGggZm9yIG9wdGlvbmFsIGNvbXBvbmVudHMgKi8KQEAgLTU2LDYgKzU3LDE3IEBACiB9OwogCiBlbnVtIHsKKwlDSU1fTlVNX0lCUSAgICA9IDYsICAgICAvKiAjIG9mIENJTSBJQlFzICovCisJQ0lNX05VTV9PQlEgICAgPSA2LCAgICAgLyogIyBvZiBDSU0gT0JRcyAqLworCUNJTV9OVU1fT0JRX1Q1ID0gOCwgICAgIC8qICMgb2YgQ0lNIE9CUXMgZm9yIFQ1IGFkYXB0ZXIgKi8KKwlDSU1MQV9TSVpFICAgICA9IDIwNDgsICAvKiAjIG9mIDMyLWJpdCB3b3JkcyBpbiBDSU0gTEEgKi8KKwlDSU1fSUJRX1NJWkUgICA9IDEyOCwgICAvKiAjIG9mIDEyOC1iaXQgd29yZHMgaW4gYSBDSU0gSUJRICovCisJQ0lNX09CUV9TSVpFICAgPSAxMjgsICAgLyogIyBvZiAxMjgtYml0IHdvcmRzIGluIGEgQ0lNIE9CUSAqLworCVRQTEFfU0laRSAgICAgID0gMTI4LCAgIC8qICMgb2YgNjQtYml0IHdvcmRzIGluIFRQIExBICovCisJVUxQUlhfTEFfU0laRSAgPSA1MTIsICAgLyogIyBvZiAyNTYtYml0IHdvcmRzIGluIFVMUF9SWCBMQSAqLworfTsKKworZW51bSB7CiAJU0ZfUEFHRV9TSVpFID0gMjU2LCAgICAgICAgICAgLyogc2VyaWFsIGZsYXNoIHBhZ2Ugc2l6ZSAqLwogCVNGX1NFQ19TSVpFID0gNjQgKiAxMDI0LCAgICAgIC8qIHNlcmlhbCBmbGFzaCBzZWN0b3Igc2l6ZSAqLwogfTsKQEAgLTExMCw2ICsxMjIsMTggQEAKIAlTR0VfSU5HUEFEQk9VTkRBUllfU0hJRlQgPSA1LC8qIGluZ3Jlc3MgcXVldWUgcGFkIGJvdW5kYXJ5ICovCiB9OwogCisvKiBQQ0ktZSBtZW1vcnkgd2luZG93IGFjY2VzcyAqLworZW51bSBwY2llX21lbXdpbiB7CisJTUVNV0lOX05JQyAgICAgID0gMCwKKwlNRU1XSU5fUlNWRDEgICAgPSAxLAorCU1FTVdJTl9SU1ZEMiAgICA9IDIsCisJTUVNV0lOX1JETUEgICAgID0gMywKKwlNRU1XSU5fUlNWRDQgICAgPSA0LAorCU1FTVdJTl9GT0lTQ1NJICA9IDUsCisJTUVNV0lOX0NTSU9TVE9SID0gNiwKKwlNRU1XSU5fUlNWRDcgICAgPSA3LAorfTsKKwogc3RydWN0IHNnZV9xc3RhdCB7ICAgICAgICAgICAgICAgIC8qIGRhdGEgd3JpdHRlbiB0byBTR0UgcXVldWUgc3RhdHVzIGVudHJpZXMgKi8KIAlfX2JlMzIgcWlkOwogCV9fYmUxNiBjaWR4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC90NF9tc2cuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvdDRfbXNnLmgKaW5kZXggMGY4OWY2OC4uMGZiOTc1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC90NF9tc2cuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L3Q0X21zZy5oCkBAIC0xMjQsNiArMTI0LDEzIEBACiB9OwogCiBlbnVtIHsKKwlDUExfQ09OTl9QT0xJQ1lfQVVUTyA9IDAsCisJQ1BMX0NPTk5fUE9MSUNZX0FTSyAgPSAxLAorCUNQTF9DT05OX1BPTElDWV9GSUxURVIgPSAyLAorCUNQTF9DT05OX1BPTElDWV9ERU5ZID0gMworfTsKKworZW51bSB7CiAJVUxQX01PREVfTk9ORSAgICAgICAgICA9IDAsCiAJVUxQX01PREVfSVNDU0kgICAgICAgICA9IDIsCiAJVUxQX01PREVfUkRNQSAgICAgICAgICA9IDQsCkBAIC0xNjAsMTYgKzE2NywyOCBAQAogCXU4IG9wY29kZTsKIH07CiAKLSNkZWZpbmUgQ1BMX09QQ09ERSh4KSAoKHgpIDw8IDI0KQotI2RlZmluZSBHX0NQTF9PUENPREUoeCkgKCgoeCkgPj4gMjQpICYgMHhGRikKLSNkZWZpbmUgTUtfT1BDT0RFX1RJRChvcGNvZGUsIHRpZCkgKENQTF9PUENPREUob3Bjb2RlKSB8ICh0aWQpKQorI2RlZmluZSBDUExfT1BDT0RFX1MgICAgMjQKKyNkZWZpbmUgQ1BMX09QQ09ERV9WKHgpICgoeCkgPDwgQ1BMX09QQ09ERV9TKQorI2RlZmluZSBDUExfT1BDT0RFX0coeCkgKCgoeCkgPj4gQ1BMX09QQ09ERV9TKSAmIDB4RkYpCisjZGVmaW5lIFRJRF9HKHgpICAgICgoeCkgJiAweEZGRkZGRikKKworLyogdGlkIGlzIGFzc3VtZWQgdG8gYmUgMjQtYml0cyAqLworI2RlZmluZSBNS19PUENPREVfVElEKG9wY29kZSwgdGlkKSAoQ1BMX09QQ09ERV9WKG9wY29kZSkgfCAodGlkKSkKKwogI2RlZmluZSBPUENPREVfVElEKGNtZCkgKChjbWQpLT5vdC5vcGNvZGVfdGlkKQotI2RlZmluZSBHRVRfVElEKGNtZCkgKG50b2hsKE9QQ09ERV9USUQoY21kKSkgJiAweEZGRkZGRikKKworLyogZXh0cmFjdCB0aGUgVElEIGZyb20gYSBDUEwgY29tbWFuZCAqLworI2RlZmluZSBHRVRfVElEKGNtZCkgKFRJRF9HKGJlMzJfdG9fY3B1KE9QQ09ERV9USUQoY21kKSkpKQogCiAvKiBwYXJ0aXRpb25pbmcgb2YgVElEIGZpZWxkcyB0aGF0IGFsc28gY2FycnkgYSBxdWV1ZSBpZCAqLwotI2RlZmluZSBHRVRfVElEX1RJRCh4KSAoKHgpICYgMHgzZmZmKQotI2RlZmluZSBHRVRfVElEX1FJRCh4KSAoKCh4KSA+PiAxNCkgJiAweDNmZikKLSNkZWZpbmUgVElEX1FJRCh4KSAgICAgKCh4KSA8PCAxNCkKKyNkZWZpbmUgVElEX1RJRF9TICAgIDAKKyNkZWZpbmUgVElEX1RJRF9NICAgIDB4M2ZmZgorI2RlZmluZSBUSURfVElEX0coeCkgKCgoeCkgPj4gVElEX1RJRF9TKSAmIFRJRF9USURfTSkKKworI2RlZmluZSBUSURfUUlEX1MgICAgMTQKKyNkZWZpbmUgVElEX1FJRF9NICAgIDB4M2ZmCisjZGVmaW5lIFRJRF9RSURfVih4KSAoKHgpIDw8IFRJRF9RSURfUykKKyNkZWZpbmUgVElEX1FJRF9HKHgpICgoKHgpID4+IFRJRF9RSURfUykgJiBUSURfUUlEX00pCiAKIHN0cnVjdCByc3NfaGVhZGVyIHsKIAl1OCBvcGNvZGU7CkBAIC0xOTksOCArMjE4LDggQEAKIH07CiAKIC8qIHdyX2hpIGZpZWxkcyAqLwotI2RlZmluZSBTX1dSX09QICAgIDI0Ci0jZGVmaW5lIFZfV1JfT1AoeCkgKChfX3U2NCkoeCkgPDwgU19XUl9PUCkKKyNkZWZpbmUgV1JfT1BfUyAgICAyNAorI2RlZmluZSBXUl9PUF9WKHgpICgoX191NjQpKHgpIDw8IFdSX09QX1MpCiAKICNkZWZpbmUgV1JfSERSIHN0cnVjdCB3b3JrX3JlcXVlc3RfaGRyIHdyCiAKQEAgLTI3MCwxNyArMjg5LDQyIEBACiAJX19iZTMyIGxvY2FsX2lwOwogCV9fYmUzMiBwZWVyX2lwOwogCV9fYmU2NCBvcHQwOwotI2RlZmluZSBOT19DT05HKHgpICAgICgoeCkgPDwgNCkKLSNkZWZpbmUgREVMQUNLKHgpICAgICAoKHgpIDw8IDUpCi0jZGVmaW5lIERTQ1AoeCkgICAgICAgKCh4KSA8PCAyMikKLSNkZWZpbmUgVENBTV9CWVBBU1MoeCkgKCh1NjQpKHgpIDw8IDQ4KQotI2RlZmluZSBOQUdMRSh4KSAgICAgICgodTY0KSh4KSA8PCA0OSkKIAlfX2JlNjQgb3B0MTsKLSNkZWZpbmUgU1lOX1JTU19FTkFCTEUgICAoMSA8PCAwKQotI2RlZmluZSBTWU5fUlNTX1FVRVVFKHgpICgoeCkgPDwgMikKLSNkZWZpbmUgQ09OTl9QT0xJQ1lfQVNLICAoMSA8PCAyMikKIH07CiAKKy8qIG9wdGlvbiAwIGZpZWxkcyAqLworI2RlZmluZSBOT19DT05HX1MgICAgNAorI2RlZmluZSBOT19DT05HX1YoeCkgKCh4KSA8PCBOT19DT05HX1MpCisjZGVmaW5lIE5PX0NPTkdfRiAgICBOT19DT05HX1YoMVUpCisKKyNkZWZpbmUgREVMQUNLX1MgICAgNQorI2RlZmluZSBERUxBQ0tfVih4KSAoKHgpIDw8IERFTEFDS19TKQorI2RlZmluZSBERUxBQ0tfRiAgICBERUxBQ0tfVigxVSkKKworI2RlZmluZSBEU0NQX1MgICAgMjIKKyNkZWZpbmUgRFNDUF9NICAgIDB4M0YKKyNkZWZpbmUgRFNDUF9WKHgpICgoeCkgPDwgRFNDUF9TKQorI2RlZmluZSBEU0NQX0coeCkgKCgoeCkgPj4gRFNDUF9TKSAmIERTQ1BfTSkKKworI2RlZmluZSBUQ0FNX0JZUEFTU19TICAgIDQ4CisjZGVmaW5lIFRDQU1fQllQQVNTX1YoeCkgKChfX3U2NCkoeCkgPDwgVENBTV9CWVBBU1NfUykKKyNkZWZpbmUgVENBTV9CWVBBU1NfRiAgICBUQ0FNX0JZUEFTU19WKDFVTEwpCisKKyNkZWZpbmUgTkFHTEVfUyAgICA0OQorI2RlZmluZSBOQUdMRV9WKHgpICgoX191NjQpKHgpIDw8IE5BR0xFX1MpCisjZGVmaW5lIE5BR0xFX0YgICAgTkFHTEVfVigxVUxMKQorCisvKiBvcHRpb24gMSBmaWVsZHMgKi8KKyNkZWZpbmUgU1lOX1JTU19FTkFCTEVfUyAgICAwCisjZGVmaW5lIFNZTl9SU1NfRU5BQkxFX1YoeCkgKCh4KSA8PCBTWU5fUlNTX0VOQUJMRV9TKQorI2RlZmluZSBTWU5fUlNTX0VOQUJMRV9GICAgIFNZTl9SU1NfRU5BQkxFX1YoMVUpCisKKyNkZWZpbmUgU1lOX1JTU19RVUVVRV9TICAgIDIKKyNkZWZpbmUgU1lOX1JTU19RVUVVRV9WKHgpICgoeCkgPDwgU1lOX1JTU19RVUVVRV9TKQorCisjZGVmaW5lIENPTk5fUE9MSUNZX1MgICAgMjIKKyNkZWZpbmUgQ09OTl9QT0xJQ1lfVih4KSAoKHgpIDw8IENPTk5fUE9MSUNZX1MpCisKIHN0cnVjdCBjcGxfcGFzc19vcGVuX3JlcTYgewogCVdSX0hEUjsKIAl1bmlvbiBvcGNvZGVfdGlkIG90OwpAQCAtMzA0LDE2ICszNDgsMzcgQEAKIAlXUl9IRFI7CiAJdW5pb24gb3Bjb2RlX3RpZCBvdDsKIAlfX2JlMzIgb3B0MjsKLSNkZWZpbmUgUlhfQ09BTEVTQ0VfVkFMSUQoeCkgKCh4KSA8PCAxMSkKLSNkZWZpbmUgUlhfQ09BTEVTQ0UoeCkgICAgICAgKCh4KSA8PCAxMikKLSNkZWZpbmUgUEFDRSh4KQkgICAgICAoKHgpIDw8IDE2KQotI2RlZmluZSBUWF9RVUVVRSh4KSAgICAgICAgICAoKHgpIDw8IDIzKQotI2RlZmluZSBDQ1RSTF9FQ04oeCkgICAgICAgICAoKHgpIDw8IDI3KQotI2RlZmluZSBUU1RBTVBTX0VOKHgpICAgICAgICAoKHgpIDw8IDI5KQotI2RlZmluZSBTQUNLX0VOKHgpICAgICAgICAgICAoKHgpIDw8IDMwKQogCV9fYmU2NCBvcHQwOwogfTsKIAorLyogb3B0aW9uIDIgZmllbGRzICovCisjZGVmaW5lIFJYX0NPQUxFU0NFX1ZBTElEX1MgICAgMTEKKyNkZWZpbmUgUlhfQ09BTEVTQ0VfVkFMSURfVih4KSAoKHgpIDw8IFJYX0NPQUxFU0NFX1ZBTElEX1MpCisjZGVmaW5lIFJYX0NPQUxFU0NFX1ZBTElEX0YgICAgUlhfQ09BTEVTQ0VfVkFMSURfVigxVSkKKworI2RlZmluZSBSWF9DT0FMRVNDRV9TICAgIDEyCisjZGVmaW5lIFJYX0NPQUxFU0NFX1YoeCkgKCh4KSA8PCBSWF9DT0FMRVNDRV9TKQorCisjZGVmaW5lIFBBQ0VfUyAgICAxNgorI2RlZmluZSBQQUNFX1YoeCkgKCh4KSA8PCBQQUNFX1MpCisKKyNkZWZpbmUgVFhfUVVFVUVfUyAgICAyMworI2RlZmluZSBUWF9RVUVVRV9NICAgIDB4NworI2RlZmluZSBUWF9RVUVVRV9WKHgpICgoeCkgPDwgVFhfUVVFVUVfUykKKyNkZWZpbmUgVFhfUVVFVUVfRyh4KSAoKCh4KSA+PiBUWF9RVUVVRV9TKSAmIFRYX1FVRVVFX00pCisKKyNkZWZpbmUgQ0NUUkxfRUNOX1MgICAgMjcKKyNkZWZpbmUgQ0NUUkxfRUNOX1YoeCkgKCh4KSA8PCBDQ1RSTF9FQ05fUykKKyNkZWZpbmUgQ0NUUkxfRUNOX0YgICAgQ0NUUkxfRUNOX1YoMVUpCisKKyNkZWZpbmUgVFNUQU1QU19FTl9TICAgIDI5CisjZGVmaW5lIFRTVEFNUFNfRU5fVih4KSAoKHgpIDw8IFRTVEFNUFNfRU5fUykKKyNkZWZpbmUgVFNUQU1QU19FTl9GICAgIFRTVEFNUFNfRU5fVigxVSkKKworI2RlZmluZSBTQUNLX0VOX1MgICAgMzAKKyNkZWZpbmUgU0FDS19FTl9WKHgpICgoeCkgPDwgU0FDS19FTl9TKQorI2RlZmluZSBTQUNLX0VOX0YgICAgU0FDS19FTl9WKDFVKQorCiBzdHJ1Y3QgY3BsX3Q1X3Bhc3NfYWNjZXB0X3JwbCB7CiAJV1JfSERSOwogCXVuaW9uIG9wY29kZV90aWQgb3Q7CkBAIC0zODQsMzAgKzQ0OSw2MSBAQAogc3RydWN0IGNwbF9hY3Rfb3Blbl9ycGwgewogCXVuaW9uIG9wY29kZV90aWQgb3Q7CiAJX19iZTMyIGF0aWRfc3RhdHVzOwotI2RlZmluZSBHRVRfQU9QRU5fU1RBVFVTKHgpICgoeCkgJiAweGZmKQotI2RlZmluZSBHRVRfQU9QRU5fQVRJRCh4KSAgICgoKHgpID4+IDgpICYgMHhmZmZmZmYpCiB9OwogCisvKiBjcGxfYWN0X29wZW5fcnBsLmF0aWRfc3RhdHVzIGZpZWxkcyAqLworI2RlZmluZSBBT1BFTl9TVEFUVVNfUyAgICAwCisjZGVmaW5lIEFPUEVOX1NUQVRVU19NICAgIDB4RkYKKyNkZWZpbmUgQU9QRU5fU1RBVFVTX0coeCkgKCgoeCkgPj4gQU9QRU5fU1RBVFVTX1MpICYgQU9QRU5fU1RBVFVTX00pCisKKyNkZWZpbmUgQU9QRU5fQVRJRF9TICAgIDgKKyNkZWZpbmUgQU9QRU5fQVRJRF9NICAgIDB4RkZGRkZGCisjZGVmaW5lIEFPUEVOX0FUSURfRyh4KSAoKCh4KSA+PiBBT1BFTl9BVElEX1MpICYgQU9QRU5fQVRJRF9NKQorCiBzdHJ1Y3QgY3BsX3Bhc3NfZXN0YWJsaXNoIHsKIAl1bmlvbiBvcGNvZGVfdGlkIG90OwogCV9fYmUzMiByc3ZkOwogCV9fYmUzMiB0b3Nfc3RpZDsKLSNkZWZpbmUgUEFTU19PUEVOX1RJRCh4KSAoKHgpIDw8IDApCi0jZGVmaW5lIFBBU1NfT1BFTl9UT1MoeCkgKCh4KSA8PCAyNCkKLSNkZWZpbmUgR0VUX1BBU1NfT1BFTl9USUQoeCkJKCgoeCkgPj4gMCkgJiAweEZGRkZGRikKLSNkZWZpbmUgR0VUX1BPUEVOX1RJRCh4KSAoKHgpICYgMHhmZmZmZmYpCi0jZGVmaW5lIEdFVF9QT1BFTl9UT1MoeCkgKCgoeCkgPj4gMjQpICYgMHhmZikKIAlfX2JlMTYgbWFjX2lkeDsKIAlfX2JlMTYgdGNwX29wdDsKLSNkZWZpbmUgR0VUX1RDUE9QVF9XU0NBTEVfT0soeCkgICgoKHgpID4+IDUpICYgMSkKLSNkZWZpbmUgR0VUX1RDUE9QVF9TQUNLKHgpICAgICAgICgoKHgpID4+IDYpICYgMSkKLSNkZWZpbmUgR0VUX1RDUE9QVF9UU1RBTVAoeCkgICAgICgoKHgpID4+IDcpICYgMSkKLSNkZWZpbmUgR0VUX1RDUE9QVF9TTkRfV1NDQUxFKHgpICgoKHgpID4+IDgpICYgMHhmKQotI2RlZmluZSBHRVRfVENQT1BUX01TUyh4KSAgICAgICAgKCgoeCkgPj4gMTIpICYgMHhmKQogCV9fYmUzMiBzbmRfaXNuOwogCV9fYmUzMiByY3ZfaXNuOwogfTsKIAorLyogY3BsX3Bhc3NfZXN0YWJsaXNoLnRvc19zdGlkIGZpZWxkcyAqLworI2RlZmluZSBQQVNTX09QRU5fVElEX1MgICAgMAorI2RlZmluZSBQQVNTX09QRU5fVElEX00gICAgMHhGRkZGRkYKKyNkZWZpbmUgUEFTU19PUEVOX1RJRF9WKHgpICgoeCkgPDwgUEFTU19PUEVOX1RJRF9TKQorI2RlZmluZSBQQVNTX09QRU5fVElEX0coeCkgKCgoeCkgPj4gUEFTU19PUEVOX1RJRF9TKSAmIFBBU1NfT1BFTl9USURfTSkKKworI2RlZmluZSBQQVNTX09QRU5fVE9TX1MgICAgMjQKKyNkZWZpbmUgUEFTU19PUEVOX1RPU19NICAgIDB4RkYKKyNkZWZpbmUgUEFTU19PUEVOX1RPU19WKHgpICgoeCkgPDwgUEFTU19PUEVOX1RPU19TKQorI2RlZmluZSBQQVNTX09QRU5fVE9TX0coeCkgKCgoeCkgPj4gUEFTU19PUEVOX1RPU19TKSAmIFBBU1NfT1BFTl9UT1NfTSkKKworLyogY3BsX3Bhc3NfZXN0YWJsaXNoLnRjcF9vcHQgZmllbGRzIChhbHNvIGFwcGxpZXMgdG8gYWN0X29wZW5fZXN0YWJsaXNoKSAqLworI2RlZmluZSBUQ1BPUFRfV1NDQUxFX09LX1MJNQorI2RlZmluZSBUQ1BPUFRfV1NDQUxFX09LX00JMHgxCisjZGVmaW5lIFRDUE9QVF9XU0NBTEVfT0tfRyh4KQlcCisJKCgoeCkgPj4gVENQT1BUX1dTQ0FMRV9PS19TKSAmIFRDUE9QVF9XU0NBTEVfT0tfTSkKKworI2RlZmluZSBUQ1BPUFRfU0FDS19TCQk2CisjZGVmaW5lIFRDUE9QVF9TQUNLX00JCTB4MQorI2RlZmluZSBUQ1BPUFRfU0FDS19HKHgpCSgoKHgpID4+IFRDUE9QVF9TQUNLX1MpICYgVENQT1BUX1NBQ0tfTSkKKworI2RlZmluZSBUQ1BPUFRfVFNUQU1QX1MJCTcKKyNkZWZpbmUgVENQT1BUX1RTVEFNUF9NCQkweDEKKyNkZWZpbmUgVENQT1BUX1RTVEFNUF9HKHgpCSgoKHgpID4+IFRDUE9QVF9UU1RBTVBfUykgJiBUQ1BPUFRfVFNUQU1QX00pCisKKyNkZWZpbmUgVENQT1BUX1NORF9XU0NBTEVfUwk4CisjZGVmaW5lIFRDUE9QVF9TTkRfV1NDQUxFX00JMHhGCisjZGVmaW5lIFRDUE9QVF9TTkRfV1NDQUxFX0coeCkJXAorCSgoKHgpID4+IFRDUE9QVF9TTkRfV1NDQUxFX1MpICYgVENQT1BUX1NORF9XU0NBTEVfTSkKKworI2RlZmluZSBUQ1BPUFRfTVNTX1MJMTIKKyNkZWZpbmUgVENQT1BUX01TU19NCTB4RgorI2RlZmluZSBUQ1BPUFRfTVNTX0coeCkJKCgoeCkgPj4gVENQT1BUX01TU19TKSAmIFRDUE9QVF9NU1NfTSkKKwogc3RydWN0IGNwbF9hY3RfZXN0YWJsaXNoIHsKIAl1bmlvbiBvcGNvZGVfdGlkIG90OwogCV9fYmUzMiByc3ZkOwpAQCAtNDIyLDI0ICs1MTgsMzkgQEAKIAlXUl9IRFI7CiAJdW5pb24gb3Bjb2RlX3RpZCBvdDsKIAlfX2JlMTYgcmVwbHlfY3RybDsKLSNkZWZpbmUgUVVFVUVOTyh4KSAgICAoKHgpIDw8IDApCi0jZGVmaW5lIFJFUExZX0NIQU4oeCkgKCh4KSA8PCAxNCkKLSNkZWZpbmUgTk9fUkVQTFkoeCkgICAoKHgpIDw8IDE1KQogCV9fYmUxNiBjb29raWU7CiB9OwogCisvKiBjcGxfZ2V0X3RjYi5yZXBseV9jdHJsIGZpZWxkcyAqLworI2RlZmluZSBRVUVVRU5PX1MgICAgMAorI2RlZmluZSBRVUVVRU5PX1YoeCkgKCh4KSA8PCBRVUVVRU5PX1MpCisKKyNkZWZpbmUgUkVQTFlfQ0hBTl9TICAgIDE0CisjZGVmaW5lIFJFUExZX0NIQU5fVih4KSAoKHgpIDw8IFJFUExZX0NIQU5fUykKKyNkZWZpbmUgUkVQTFlfQ0hBTl9GICAgIFJFUExZX0NIQU5fVigxVSkKKworI2RlZmluZSBOT19SRVBMWV9TICAgIDE1CisjZGVmaW5lIE5PX1JFUExZX1YoeCkgKCh4KSA8PCBOT19SRVBMWV9TKQorI2RlZmluZSBOT19SRVBMWV9GICAgIE5PX1JFUExZX1YoMVUpCisKIHN0cnVjdCBjcGxfc2V0X3RjYl9maWVsZCB7CiAJV1JfSERSOwogCXVuaW9uIG9wY29kZV90aWQgb3Q7CiAJX19iZTE2IHJlcGx5X2N0cmw7CiAJX19iZTE2IHdvcmRfY29va2llOwotI2RlZmluZSBUQ0JfV09SRCh4KSAgICgoeCkgPDwgMCkKLSNkZWZpbmUgVENCX0NPT0tJRSh4KSAoKHgpIDw8IDUpCi0jZGVmaW5lIEdFVF9UQ0JfQ09PS0lFKHgpICgoKHgpID4+IDUpICYgNykKIAlfX2JlNjQgbWFzazsKIAlfX2JlNjQgdmFsOwogfTsKIAorLyogY3BsX3NldF90Y2JfZmllbGQud29yZF9jb29raWUgZmllbGRzICovCisjZGVmaW5lIFRDQl9XT1JEX1MgICAgMAorI2RlZmluZSBUQ0JfV09SRCh4KSAgICgoeCkgPDwgVENCX1dPUkRfUykKKworI2RlZmluZSBUQ0JfQ09PS0lFX1MgICAgNQorI2RlZmluZSBUQ0JfQ09PS0lFX00gICAgMHg3CisjZGVmaW5lIFRDQl9DT09LSUVfVih4KSAoKHgpIDw8IFRDQl9DT09LSUVfUykKKyNkZWZpbmUgVENCX0NPT0tJRV9HKHgpICgoKHgpID4+IFRDQl9DT09LSUVfUykgJiBUQ0JfQ09PS0lFX00pCisKIHN0cnVjdCBjcGxfc2V0X3RjYl9ycGwgewogCXVuaW9uIG9wY29kZV90aWQgb3Q7CiAJX19iZTE2IHJzdmQ7CkBAIC00NjYsMTAgKzU3NywxNCBAQAogCVdSX0hEUjsKIAl1bmlvbiBvcGNvZGVfdGlkIG90OwogCV9fYmUxNiByZXBseV9jdHJsOwotI2RlZmluZSBMSVNUU1ZSX0lQVjYoeCkgKCh4KSA8PCAxNCkKIAlfX2JlMTYgcnN2ZDsKIH07CiAKKy8qIGFkZGl0aW9uYWwgY3BsX2Nsb3NlX2xpc3RzdnJfcmVxLnJlcGx5X2N0cmwgZmllbGQgKi8KKyNkZWZpbmUgTElTVFNWUl9JUFY2X1MgICAgMTQKKyNkZWZpbmUgTElTVFNWUl9JUFY2X1YoeCkgKCh4KSA8PCBMSVNUU1ZSX0lQVjZfUykKKyNkZWZpbmUgTElTVFNWUl9JUFY2X0YgICAgTElTVFNWUl9JUFY2X1YoMVUpCisKIHN0cnVjdCBjcGxfY2xvc2VfbGlzdHN2cl9ycGwgewogCXVuaW9uIG9wY29kZV90aWQgb3Q7CiAJdTggcnN2ZFszXTsKQEAgLTU2NSw2ICs2ODAsMzQgQEAKIAkvKiBlbmNhcHN1bGF0ZWQgQ1BMIChUWF9QS1QsIFRYX1BLVF9YVCBvciBUWF9EQVRBKSBmb2xsb3dzIGhlcmUgKi8KIH07CiAKKy8qIGNwbF90eF9wa3RfbHNvX2NvcmUubHNvX2N0cmwgZmllbGRzICovCisjZGVmaW5lIExTT19UQ1BIRFJfTEVOX1MgICAgMAorI2RlZmluZSBMU09fVENQSERSX0xFTl9WKHgpICgoeCkgPDwgTFNPX1RDUEhEUl9MRU5fUykKKworI2RlZmluZSBMU09fSVBIRFJfTEVOX1MgICAgNAorI2RlZmluZSBMU09fSVBIRFJfTEVOX1YoeCkgKCh4KSA8PCBMU09fSVBIRFJfTEVOX1MpCisKKyNkZWZpbmUgTFNPX0VUSEhEUl9MRU5fUyAgICAxNgorI2RlZmluZSBMU09fRVRISERSX0xFTl9WKHgpICgoeCkgPDwgTFNPX0VUSEhEUl9MRU5fUykKKworI2RlZmluZSBMU09fSVBWNl9TICAgIDIwCisjZGVmaW5lIExTT19JUFY2X1YoeCkgKCh4KSA8PCBMU09fSVBWNl9TKQorI2RlZmluZSBMU09fSVBWNl9GICAgIExTT19JUFY2X1YoMVUpCisKKyNkZWZpbmUgTFNPX0xBU1RfU0xJQ0VfUyAgICAyMgorI2RlZmluZSBMU09fTEFTVF9TTElDRV9WKHgpICgoeCkgPDwgTFNPX0xBU1RfU0xJQ0VfUykKKyNkZWZpbmUgTFNPX0xBU1RfU0xJQ0VfRiAgICBMU09fTEFTVF9TTElDRV9WKDFVKQorCisjZGVmaW5lIExTT19GSVJTVF9TTElDRV9TICAgIDIzCisjZGVmaW5lIExTT19GSVJTVF9TTElDRV9WKHgpICgoeCkgPDwgTFNPX0ZJUlNUX1NMSUNFX1MpCisjZGVmaW5lIExTT19GSVJTVF9TTElDRV9GICAgIExTT19GSVJTVF9TTElDRV9WKDFVKQorCisjZGVmaW5lIExTT19PUENPREVfUyAgICAyNAorI2RlZmluZSBMU09fT1BDT0RFX1YoeCkgKCh4KSA8PCBMU09fT1BDT0RFX1MpCisKKyNkZWZpbmUgTFNPX1Q1X1hGRVJfU0laRV9TCSAgIDAKKyNkZWZpbmUgTFNPX1Q1X1hGRVJfU0laRV9WKHgpICgoeCkgPDwgTFNPX1Q1X1hGRVJfU0laRV9TKQorCiBzdHJ1Y3QgY3BsX3R4X3BrdF9sc28gewogCVdSX0hEUjsKIAlzdHJ1Y3QgY3BsX3R4X3BrdF9sc29fY29yZSBjOwpAQCAtNTc0LDggKzcxNyw2IEBACiBzdHJ1Y3QgY3BsX2lzY3NpX2hkciB7CiAJdW5pb24gb3Bjb2RlX3RpZCBvdDsKIAlfX2JlMTYgcGR1X2xlbl9kZHA7Ci0jZGVmaW5lIElTQ1NJX1BEVV9MRU4oeCkgKCh4KSAmIDB4N0ZGRikKLSNkZWZpbmUgSVNDU0lfRERQICAgICAgICAoMSA8PCAxNSkKIAlfX2JlMTYgbGVuOwogCV9fYmUzMiBzZXE7CiAJX19iZTE2IHVyZzsKQEAgLTU4Myw2ICs3MjQsMTYgQEAKIAl1OCBzdGF0dXM7CiB9OwogCisvKiBjcGxfaXNjc2lfaGRyLnBkdV9sZW5fZGRwIGZpZWxkcyAqLworI2RlZmluZSBJU0NTSV9QRFVfTEVOX1MgICAgMAorI2RlZmluZSBJU0NTSV9QRFVfTEVOX00gICAgMHg3RkZGCisjZGVmaW5lIElTQ1NJX1BEVV9MRU5fVih4KSAoKHgpIDw8IElTQ1NJX1BEVV9MRU5fUykKKyNkZWZpbmUgSVNDU0lfUERVX0xFTl9HKHgpICgoKHgpID4+IElTQ1NJX1BEVV9MRU5fUykgJiBJU0NTSV9QRFVfTEVOX00pCisKKyNkZWZpbmUgSVNDU0lfRERQX1MgICAgMTUKKyNkZWZpbmUgSVNDU0lfRERQX1YoeCkgKCh4KSA8PCBJU0NTSV9ERFBfUykKKyNkZWZpbmUgSVNDU0lfRERQX0YgICAgSVNDU0lfRERQX1YoMVUpCisKIHN0cnVjdCBjcGxfcnhfZGF0YSB7CiAJdW5pb24gb3Bjb2RlX3RpZCBvdDsKIAlfX2JlMTYgcnN2ZDsKQEAgLTYzOSw0OSArNzkwLDYxIEBACiAJX19iZTE2IHZsYW47CiAJX19iZTE2IGxlbjsKIAlfX2JlMzIgbDJpbmZvOwotI2RlZmluZSBSWEZfVURQICgxIDw8IDIyKQotI2RlZmluZSBSWEZfVENQICgxIDw8IDIzKQotI2RlZmluZSBSWEZfSVAgICgxIDw8IDI0KQotI2RlZmluZSBSWEZfSVA2ICgxIDw8IDI1KQogCV9fYmUxNiBoZHJfbGVuOwogCV9fYmUxNiBlcnJfdmVjOwogfTsKIAorI2RlZmluZSBSWEZfVURQX1MgICAgMjIKKyNkZWZpbmUgUlhGX1VEUF9WKHgpICgoeCkgPDwgUlhGX1VEUF9TKQorI2RlZmluZSBSWEZfVURQX0YgICAgUlhGX1VEUF9WKDFVKQorCisjZGVmaW5lIFJYRl9UQ1BfUyAgICAyMworI2RlZmluZSBSWEZfVENQX1YoeCkgKCh4KSA8PCBSWEZfVENQX1MpCisjZGVmaW5lIFJYRl9UQ1BfRiAgICBSWEZfVENQX1YoMVUpCisKKyNkZWZpbmUgUlhGX0lQX1MgICAgMjQKKyNkZWZpbmUgUlhGX0lQX1YoeCkgKCh4KSA8PCBSWEZfSVBfUykKKyNkZWZpbmUgUlhGX0lQX0YgICAgUlhGX0lQX1YoMVUpCisKKyNkZWZpbmUgUlhGX0lQNl9TICAgIDI1CisjZGVmaW5lIFJYRl9JUDZfVih4KSAoKHgpIDw8IFJYRl9JUDZfUykKKyNkZWZpbmUgUlhGX0lQNl9GICAgIFJYRl9JUDZfVigxVSkKKwogLyogcnhfcGt0LmwyaW5mbyBmaWVsZHMgKi8KLSNkZWZpbmUgU19SWF9FVEhIRFJfTEVOICAgIDAKLSNkZWZpbmUgTV9SWF9FVEhIRFJfTEVOICAgIDB4MUYKLSNkZWZpbmUgVl9SWF9FVEhIRFJfTEVOKHgpICgoeCkgPDwgU19SWF9FVEhIRFJfTEVOKQotI2RlZmluZSBHX1JYX0VUSEhEUl9MRU4oeCkgKCgoeCkgPj4gU19SWF9FVEhIRFJfTEVOKSAmIE1fUlhfRVRISERSX0xFTikKKyNkZWZpbmUgUlhfRVRISERSX0xFTl9TICAgIDAKKyNkZWZpbmUgUlhfRVRISERSX0xFTl9NICAgIDB4MUYKKyNkZWZpbmUgUlhfRVRISERSX0xFTl9WKHgpICgoeCkgPDwgUlhfRVRISERSX0xFTl9TKQorI2RlZmluZSBSWF9FVEhIRFJfTEVOX0coeCkgKCgoeCkgPj4gUlhfRVRISERSX0xFTl9TKSAmIFJYX0VUSEhEUl9MRU5fTSkKIAotI2RlZmluZSBTX1JYX1Q1X0VUSEhEUl9MRU4gICAgMAotI2RlZmluZSBNX1JYX1Q1X0VUSEhEUl9MRU4gICAgMHgzRgotI2RlZmluZSBWX1JYX1Q1X0VUSEhEUl9MRU4oeCkgKCh4KSA8PCBTX1JYX1Q1X0VUSEhEUl9MRU4pCi0jZGVmaW5lIEdfUlhfVDVfRVRISERSX0xFTih4KSAoKCh4KSA+PiBTX1JYX1Q1X0VUSEhEUl9MRU4pICYgTV9SWF9UNV9FVEhIRFJfTEVOKQorI2RlZmluZSBSWF9UNV9FVEhIRFJfTEVOX1MgICAgMAorI2RlZmluZSBSWF9UNV9FVEhIRFJfTEVOX00gICAgMHgzRgorI2RlZmluZSBSWF9UNV9FVEhIRFJfTEVOX1YoeCkgKCh4KSA8PCBSWF9UNV9FVEhIRFJfTEVOX1MpCisjZGVmaW5lIFJYX1Q1X0VUSEhEUl9MRU5fRyh4KSAoKCh4KSA+PiBSWF9UNV9FVEhIRFJfTEVOX1MpICYgUlhfVDVfRVRISERSX0xFTl9NKQogCi0jZGVmaW5lIFNfUlhfTUFDSURYICAgIDgKLSNkZWZpbmUgTV9SWF9NQUNJRFggICAgMHgxRkYKLSNkZWZpbmUgVl9SWF9NQUNJRFgoeCkgKCh4KSA8PCBTX1JYX01BQ0lEWCkKLSNkZWZpbmUgR19SWF9NQUNJRFgoeCkgKCgoeCkgPj4gU19SWF9NQUNJRFgpICYgTV9SWF9NQUNJRFgpCisjZGVmaW5lIFJYX01BQ0lEWF9TICAgIDgKKyNkZWZpbmUgUlhfTUFDSURYX00gICAgMHgxRkYKKyNkZWZpbmUgUlhfTUFDSURYX1YoeCkgKCh4KSA8PCBSWF9NQUNJRFhfUykKKyNkZWZpbmUgUlhfTUFDSURYX0coeCkgKCgoeCkgPj4gUlhfTUFDSURYX1MpICYgUlhfTUFDSURYX00pCiAKLSNkZWZpbmUgU19SWEZfU1lOICAgIDIxCi0jZGVmaW5lIFZfUlhGX1NZTih4KSAoKHgpIDw8IFNfUlhGX1NZTikKLSNkZWZpbmUgRl9SWEZfU1lOICAgIFZfUlhGX1NZTigxVSkKKyNkZWZpbmUgUlhGX1NZTl9TICAgIDIxCisjZGVmaW5lIFJYRl9TWU5fVih4KSAoKHgpIDw8IFJYRl9TWU5fUykKKyNkZWZpbmUgUlhGX1NZTl9GICAgIFJYRl9TWU5fVigxVSkKIAotI2RlZmluZSBTX1JYX0NIQU4gICAgMjgKLSNkZWZpbmUgTV9SWF9DSEFOICAgIDB4RgotI2RlZmluZSBWX1JYX0NIQU4oeCkgKCh4KSA8PCBTX1JYX0NIQU4pCi0jZGVmaW5lIEdfUlhfQ0hBTih4KSAoKCh4KSA+PiBTX1JYX0NIQU4pICYgTV9SWF9DSEFOKQorI2RlZmluZSBSWF9DSEFOX1MgICAgMjgKKyNkZWZpbmUgUlhfQ0hBTl9NICAgIDB4RgorI2RlZmluZSBSWF9DSEFOX1YoeCkgKCh4KSA8PCBSWF9DSEFOX1MpCisjZGVmaW5lIFJYX0NIQU5fRyh4KSAoKCh4KSA+PiBSWF9DSEFOX1MpICYgUlhfQ0hBTl9NKQogCiAvKiByeF9wa3QuaGRyX2xlbiBmaWVsZHMgKi8KLSNkZWZpbmUgU19SWF9UQ1BIRFJfTEVOICAgIDAKLSNkZWZpbmUgTV9SWF9UQ1BIRFJfTEVOICAgIDB4M0YKLSNkZWZpbmUgVl9SWF9UQ1BIRFJfTEVOKHgpICgoeCkgPDwgU19SWF9UQ1BIRFJfTEVOKQotI2RlZmluZSBHX1JYX1RDUEhEUl9MRU4oeCkgKCgoeCkgPj4gU19SWF9UQ1BIRFJfTEVOKSAmIE1fUlhfVENQSERSX0xFTikKKyNkZWZpbmUgUlhfVENQSERSX0xFTl9TICAgIDAKKyNkZWZpbmUgUlhfVENQSERSX0xFTl9NICAgIDB4M0YKKyNkZWZpbmUgUlhfVENQSERSX0xFTl9WKHgpICgoeCkgPDwgUlhfVENQSERSX0xFTl9TKQorI2RlZmluZSBSWF9UQ1BIRFJfTEVOX0coeCkgKCgoeCkgPj4gUlhfVENQSERSX0xFTl9TKSAmIFJYX1RDUEhEUl9MRU5fTSkKIAotI2RlZmluZSBTX1JYX0lQSERSX0xFTiAgICA2Ci0jZGVmaW5lIE1fUlhfSVBIRFJfTEVOICAgIDB4M0ZGCi0jZGVmaW5lIFZfUlhfSVBIRFJfTEVOKHgpICgoeCkgPDwgU19SWF9JUEhEUl9MRU4pCi0jZGVmaW5lIEdfUlhfSVBIRFJfTEVOKHgpICgoKHgpID4+IFNfUlhfSVBIRFJfTEVOKSAmIE1fUlhfSVBIRFJfTEVOKQorI2RlZmluZSBSWF9JUEhEUl9MRU5fUyAgICA2CisjZGVmaW5lIFJYX0lQSERSX0xFTl9NICAgIDB4M0ZGCisjZGVmaW5lIFJYX0lQSERSX0xFTl9WKHgpICgoeCkgPDwgUlhfSVBIRFJfTEVOX1MpCisjZGVmaW5lIFJYX0lQSERSX0xFTl9HKHgpICgoKHgpID4+IFJYX0lQSERSX0xFTl9TKSAmIFJYX0lQSERSX0xFTl9NKQogCiBzdHJ1Y3QgY3BsX3RyYWNlX3BrdCB7CiAJdTggb3Bjb2RlOwpAQCAtNzMwLDE0ICs4OTMsMjIgQEAKIAlXUl9IRFI7CiAJdW5pb24gb3Bjb2RlX3RpZCBvdDsKIAlfX2JlMTYgcGFyYW1zOwotI2RlZmluZSBMMlRfV19JTkZPKHgpICAgICgoeCkgPDwgMikKLSNkZWZpbmUgTDJUX1dfUE9SVCh4KSAgICAoKHgpIDw8IDgpCi0jZGVmaW5lIEwyVF9XX05PUkVQTFkoeCkgKCh4KSA8PCAxNSkKIAlfX2JlMTYgbDJ0X2lkeDsKIAlfX2JlMTYgdmxhbjsKIAl1OCBkc3RfbWFjWzZdOwogfTsKIAorLyogY3BsX2wydF93cml0ZV9yZXEucGFyYW1zIGZpZWxkcyAqLworI2RlZmluZSBMMlRfV19JTkZPX1MgICAgMgorI2RlZmluZSBMMlRfV19JTkZPX1YoeCkgKCh4KSA8PCBMMlRfV19JTkZPX1MpCisKKyNkZWZpbmUgTDJUX1dfUE9SVF9TICAgIDgKKyNkZWZpbmUgTDJUX1dfUE9SVF9WKHgpICgoeCkgPDwgTDJUX1dfUE9SVF9TKQorCisjZGVmaW5lIEwyVF9XX05PUkVQTFlfUyAgICAxNQorI2RlZmluZSBMMlRfV19OT1JFUExZX1YoeCkgKCh4KSA8PCBMMlRfV19OT1JFUExZX1MpCisjZGVmaW5lIEwyVF9XX05PUkVQTFlfRiAgICBMMlRfV19OT1JFUExZX1YoMVUpCisKIHN0cnVjdCBjcGxfbDJ0X3dyaXRlX3JwbCB7CiAJdW5pb24gb3Bjb2RlX3RpZCBvdDsKIAl1OCBzdGF0dXM7CkBAIC03NTIsMTEgKzkyMywxNSBAQAogCiBzdHJ1Y3QgY3BsX3NnZV9lZ3JfdXBkYXRlIHsKIAlfX2JlMzIgb3Bjb2RlX3FpZDsKLSNkZWZpbmUgRUdSX1FJRCh4KSAoKHgpICYgMHgxRkZGRikKIAlfX2JlMTYgY2lkeDsKIAlfX2JlMTYgcGlkeDsKIH07CiAKKy8qIGNwbF9zZ2VfZWdyX3VwZGF0ZS5vdCBmaWVsZHMgKi8KKyNkZWZpbmUgRUdSX1FJRF9TICAgIDAKKyNkZWZpbmUgRUdSX1FJRF9NICAgIDB4MUZGRkYKKyNkZWZpbmUgRUdSX1FJRF9HKHgpICgoKHgpID4+IEVHUl9RSURfUykgJiBFR1JfUUlEX00pCisKIC8qIGNwbF9mdyoudHlwZSB2YWx1ZXMgKi8KIGVudW0gewogCUZXX1RZUEVfQ01EX1JQTCA9IDAsCkBAIC04NDksMjIgKzEwMjQsMzAgQEAKIAogc3RydWN0IHVscHR4X3NnbCB7CiAJX19iZTMyIGNtZF9uc2dlOwotI2RlZmluZSBVTFBUWF9OU0dFKHgpICgoeCkgPDwgMCkKLSNkZWZpbmUgVUxQVFhfTU9SRSAoMVUgPDwgMjMpCiAJX19iZTMyIGxlbjA7CiAJX19iZTY0IGFkZHIwOwogCXN0cnVjdCB1bHB0eF9zZ2VfcGFpciBzZ2VbMF07CiB9OwogCisjZGVmaW5lIFVMUFRYX05TR0VfUyAgICAwCisjZGVmaW5lIFVMUFRYX05TR0VfVih4KSAoKHgpIDw8IFVMUFRYX05TR0VfUykKKworI2RlZmluZSBVTFBUWF9NT1JFX1MJMjMKKyNkZWZpbmUgVUxQVFhfTU9SRV9WKHgpCSgoeCkgPDwgVUxQVFhfTU9SRV9TKQorI2RlZmluZSBVTFBUWF9NT1JFX0YJVUxQVFhfTU9SRV9WKDFVKQorCiBzdHJ1Y3QgdWxwX21lbV9pbyB7CiAJV1JfSERSOwogCV9fYmUzMiBjbWQ7CiAJX19iZTMyIGxlbjE2OyAgICAgICAgICAgICAvKiBjb21tYW5kIGxlbmd0aCAqLwogCV9fYmUzMiBkbGVuOyAgICAgICAgICAgICAgLyogZGF0YSBsZW5ndGggaW4gMzItYnl0ZSB1bml0cyAqLwogCV9fYmUzMiBsb2NrX2FkZHI7Ci0jZGVmaW5lIFVMUF9NRU1JT19MT0NLKHgpICgoeCkgPDwgMzEpCiB9OwogCisjZGVmaW5lIFVMUF9NRU1JT19MT0NLX1MgICAgMzEKKyNkZWZpbmUgVUxQX01FTUlPX0xPQ0tfVih4KSAoKHgpIDw8IFVMUF9NRU1JT19MT0NLX1MpCisjZGVmaW5lIFVMUF9NRU1JT19MT0NLX0YgICAgVUxQX01FTUlPX0xPQ0tfVigxVSkKKwogLyogYWRkaXRpb25hbCB1bHBfbWVtX2lvLmNtZCBmaWVsZHMgKi8KICNkZWZpbmUgVUxQX01FTUlPX09SREVSX1MgICAgMjMKICNkZWZpbmUgVUxQX01FTUlPX09SREVSX1YoeCkgKCh4KSA8PCBVTFBfTUVNSU9fT1JERVJfUykKQEAgLTg3NCwxMyArMTA1Nyw5IEBACiAjZGVmaW5lIFQ1X1VMUF9NRU1JT19JTU1fVih4KSAoKHgpIDw8IFQ1X1VMUF9NRU1JT19JTU1fUykKICNkZWZpbmUgVDVfVUxQX01FTUlPX0lNTV9GICAgIFQ1X1VMUF9NRU1JT19JTU1fVigxVSkKIAotI2RlZmluZSBTX1Q1X1VMUF9NRU1JT19JTU0gICAgMjMKLSNkZWZpbmUgVl9UNV9VTFBfTUVNSU9fSU1NKHgpICgoeCkgPDwgU19UNV9VTFBfTUVNSU9fSU1NKQotI2RlZmluZSBGX1Q1X1VMUF9NRU1JT19JTU0gICAgVl9UNV9VTFBfTUVNSU9fSU1NKDFVKQotCi0jZGVmaW5lIFNfVDVfVUxQX01FTUlPX09SREVSICAgIDIyCi0jZGVmaW5lIFZfVDVfVUxQX01FTUlPX09SREVSKHgpICgoeCkgPDwgU19UNV9VTFBfTUVNSU9fT1JERVIpCi0jZGVmaW5lIEZfVDVfVUxQX01FTUlPX09SREVSICAgIFZfVDVfVUxQX01FTUlPX09SREVSKDFVKQorI2RlZmluZSBUNV9VTFBfTUVNSU9fT1JERVJfUyAgICAyMgorI2RlZmluZSBUNV9VTFBfTUVNSU9fT1JERVJfVih4KSAoKHgpIDw8IFQ1X1VMUF9NRU1JT19PUkRFUl9TKQorI2RlZmluZSBUNV9VTFBfTUVNSU9fT1JERVJfRiAgICBUNV9VTFBfTUVNSU9fT1JERVJfVigxVSkKIAogLyogdWxwX21lbV9pby5sb2NrX2FkZHIgZmllbGRzICovCiAjZGVmaW5lIFVMUF9NRU1JT19BRERSX1MgICAgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC90NF9wY2lfaWRfdGJsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L3Q0X3BjaV9pZF90YmwuaAppbmRleCA5ZTRmOTVhLi5kZGZiNWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L3Q0X3BjaV9pZF90YmwuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L3Q0X3BjaV9pZF90YmwuaApAQCAtMTUzLDYgKzE1Myw3IEBACiAJQ0hfUENJX0lEX1RBQkxFX0ZFTlRSWSgweDUwODYpLAkvKiBDdXN0b20gMnggVDU4MC1DUiAqLwogCUNIX1BDSV9JRF9UQUJMRV9GRU5UUlkoMHg1MDg3KSwJLyogQ3VzdG9tIFQ1ODAtQ1IgKi8KIAlDSF9QQ0lfSURfVEFCTEVfRkVOVFJZKDB4NTA4OCksCS8qIEN1c3RvbSBUNTcwLUNSICovCisJQ0hfUENJX0lEX1RBQkxFX0ZFTlRSWSgweDUwODkpLAkvKiBDdXN0b20gVDUyMC1DUiAqLwogQ0hfUENJX0RFVklDRV9JRF9UQUJMRV9ERUZJTkVfRU5EOwogCiAjZW5kaWYgLyogQ0hfUENJX0RFVklDRV9JRF9UQUJMRV9ERUZJTkVfQkVHSU4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvdDRfcmVncy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC90NF9yZWdzLmgKaW5kZXggZDdiZDM0ZS4uMjMxYTcyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC90NF9yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC90NF9yZWdzLmgKQEAgLTYzLDQ2MCArNjMsNzc5IEBACiAjZGVmaW5lIE1DX0JJU1RfU1RBVFVTX1JFRyhyZWdfYWRkciwgaWR4KSAoKHJlZ19hZGRyKSArIChpZHgpICogNCkKICNkZWZpbmUgRURDX0JJU1RfU1RBVFVTX1JFRyhyZWdfYWRkciwgaWR4KSAoKHJlZ19hZGRyKSArIChpZHgpICogNCkKIAotI2RlZmluZSBTR0VfUEZfS0RPT1JCRUxMIDB4MAotI2RlZmluZSAgUUlEX01BU0sgICAgMHhmZmZmODAwMFUKLSNkZWZpbmUgIFFJRF9TSElGVCAgIDE1Ci0jZGVmaW5lICBRSUQoeCkgICAgICAoKHgpIDw8IFFJRF9TSElGVCkKLSNkZWZpbmUgIERCUFJJTyh4KSAgICgoeCkgPDwgMTQpCi0jZGVmaW5lICBEQlRZUEUoeCkgICAoKHgpIDw8IDEzKQotI2RlZmluZSAgUElEWF9NQVNLICAgMHgwMDAwM2ZmZlUKLSNkZWZpbmUgIFBJRFhfU0hJRlQgIDAKLSNkZWZpbmUgIFBJRFgoeCkgICAgICgoeCkgPDwgUElEWF9TSElGVCkKLSNkZWZpbmUgIFBJRFhfU0hJRlRfVDUgICAwCi0jZGVmaW5lICBQSURYX1Q1KHgpICAoKHgpIDw8IFBJRFhfU0hJRlRfVDUpCisjZGVmaW5lIFNHRV9QRl9LRE9PUkJFTExfQSAweDAKIAorI2RlZmluZSBRSURfUyAgICAxNQorI2RlZmluZSBRSURfVih4KSAoKHgpIDw8IFFJRF9TKQogCi0jZGVmaW5lIFNHRV9USU1FUlJFR1MJNgotI2RlZmluZSBTR0VfUEZfR1RTIDB4NAotI2RlZmluZSAgSU5HUkVTU1FJRF9NQVNLICAgMHhmZmZmMDAwMFUKLSNkZWZpbmUgIElOR1JFU1NRSURfU0hJRlQgIDE2Ci0jZGVmaW5lICBJTkdSRVNTUUlEKHgpICAgICAoKHgpIDw8IElOR1JFU1NRSURfU0hJRlQpCi0jZGVmaW5lICBUSU1FUlJFR19NQVNLICAgICAweDAwMDBlMDAwVQotI2RlZmluZSAgVElNRVJSRUdfU0hJRlQgICAgMTMKLSNkZWZpbmUgIFRJTUVSUkVHKHgpICAgICAgICgoeCkgPDwgVElNRVJSRUdfU0hJRlQpCi0jZGVmaW5lICBTRUlOVEFSTV9NQVNLICAgICAweDAwMDAxMDAwVQotI2RlZmluZSAgU0VJTlRBUk1fU0hJRlQgICAgMTIKLSNkZWZpbmUgIFNFSU5UQVJNKHgpICAgICAgICgoeCkgPDwgU0VJTlRBUk1fU0hJRlQpCi0jZGVmaW5lICBDSURYSU5DX01BU0sgICAgICAweDAwMDAwZmZmVQotI2RlZmluZSAgQ0lEWElOQ19TSElGVCAgICAgMAotI2RlZmluZSAgQ0lEWElOQyh4KSAgICAgICAgKCh4KSA8PCBDSURYSU5DX1NISUZUKQorI2RlZmluZSBEQlBSSU9fUyAgICAxNAorI2RlZmluZSBEQlBSSU9fVih4KSAoKHgpIDw8IERCUFJJT19TKQorI2RlZmluZSBEQlBSSU9fRiAgICBEQlBSSU9fVigxVSkKIAotI2RlZmluZSBYX1JYUEtUQ1BMTU9ERV9TUExJVCAgICAgMQotI2RlZmluZSBYX0lOR1BBREJPVU5EQVJZX1NISUZUIDUKKyNkZWZpbmUgUElEWF9TICAgIDAKKyNkZWZpbmUgUElEWF9WKHgpICgoeCkgPDwgUElEWF9TKQogCi0jZGVmaW5lIFNHRV9DT05UUk9MIDB4MTAwOAotI2RlZmluZSBTR0VfQ09OVFJPTDJfQQkJMHgxMTI0Ci0jZGVmaW5lICBEQ0FTWVNUWVBFICAgICAgICAgICAgIDB4MDAwODAwMDBVCi0jZGVmaW5lICBSWFBLVENQTE1PREVfTUFTSyAgICAgIDB4MDAwNDAwMDBVCi0jZGVmaW5lICBSWFBLVENQTE1PREVfU0hJRlQgICAgIDE4Ci0jZGVmaW5lICBSWFBLVENQTE1PREUoeCkgICAgICAgICgoeCkgPDwgUlhQS1RDUExNT0RFX1NISUZUKQotI2RlZmluZSAgRUdSU1RBVFVTUEFHRVNJWkVfTUFTSyAgMHgwMDAyMDAwMFUKLSNkZWZpbmUgIEVHUlNUQVRVU1BBR0VTSVpFX1NISUZUIDE3Ci0jZGVmaW5lICBFR1JTVEFUVVNQQUdFU0laRSh4KSAgICAoKHgpIDw8IEVHUlNUQVRVU1BBR0VTSVpFX1NISUZUKQotI2RlZmluZSAgUEtUU0hJRlRfTUFTSyAgICAgICAgICAweDAwMDAxYzAwVQotI2RlZmluZSAgUEtUU0hJRlRfU0hJRlQgICAgICAgICAxMAotI2RlZmluZSAgUEtUU0hJRlQoeCkgICAgICAgICAgICAoKHgpIDw8IFBLVFNISUZUX1NISUZUKQotI2RlZmluZSAgUEtUU0hJRlRfR0VUKHgpCSgoKHgpICYgUEtUU0hJRlRfTUFTSykgPj4gUEtUU0hJRlRfU0hJRlQpCi0jZGVmaW5lICBJTkdQQ0lFQk9VTkRBUllfMzJCX1gJMAotI2RlZmluZSAgSU5HUENJRUJPVU5EQVJZX01BU0sgICAweDAwMDAwMzgwVQotI2RlZmluZSAgSU5HUENJRUJPVU5EQVJZX1NISUZUICA3Ci0jZGVmaW5lICBJTkdQQ0lFQk9VTkRBUlkoeCkgICAgICgoeCkgPDwgSU5HUENJRUJPVU5EQVJZX1NISUZUKQotI2RlZmluZSAgSU5HUEFEQk9VTkRBUllfTUFTSyAgICAweDAwMDAwMDcwVQotI2RlZmluZSAgSU5HUEFEQk9VTkRBUllfU0hJRlQgICA0Ci0jZGVmaW5lICBJTkdQQURCT1VOREFSWSh4KSAgICAgICgoeCkgPDwgSU5HUEFEQk9VTkRBUllfU0hJRlQpCi0jZGVmaW5lICBJTkdQQURCT1VOREFSWV9HRVQoeCkJKCgoeCkgJiBJTkdQQURCT1VOREFSWV9NQVNLKSBcCi0JCQkJID4+IElOR1BBREJPVU5EQVJZX1NISUZUKQotI2RlZmluZSAgSU5HUEFDS0JPVU5EQVJZXzE2Ql9YCTAKLSNkZWZpbmUgIElOR1BBQ0tCT1VOREFSWV9TSElGVF9YIDUKKyNkZWZpbmUgU0dFX1ZGX0tET09SQkVMTF9BIDB4MAorCisjZGVmaW5lIERCVFlQRV9TICAgIDEzCisjZGVmaW5lIERCVFlQRV9WKHgpICgoeCkgPDwgREJUWVBFX1MpCisjZGVmaW5lIERCVFlQRV9GICAgIERCVFlQRV9WKDFVKQorCisjZGVmaW5lIFBJRFhfVDVfUyAgICAwCisjZGVmaW5lIFBJRFhfVDVfTSAgICAweDFmZmZVCisjZGVmaW5lIFBJRFhfVDVfVih4KSAoKHgpIDw8IFBJRFhfVDVfUykKKyNkZWZpbmUgUElEWF9UNV9HKHgpICgoKHgpID4+IFBJRFhfVDVfUykgJiBQSURYX1Q1X00pCisKKyNkZWZpbmUgU0dFX1BGX0dUU19BIDB4NAorCisjZGVmaW5lIElOR1JFU1NRSURfUyAgICAxNgorI2RlZmluZSBJTkdSRVNTUUlEX1YoeCkgKCh4KSA8PCBJTkdSRVNTUUlEX1MpCisKKyNkZWZpbmUgVElNRVJSRUdfUyAgICAxMworI2RlZmluZSBUSU1FUlJFR19WKHgpICgoeCkgPDwgVElNRVJSRUdfUykKKworI2RlZmluZSBTRUlOVEFSTV9TICAgIDEyCisjZGVmaW5lIFNFSU5UQVJNX1YoeCkgKCh4KSA8PCBTRUlOVEFSTV9TKQorCisjZGVmaW5lIENJRFhJTkNfUyAgICAwCisjZGVmaW5lIENJRFhJTkNfTSAgICAweGZmZlUKKyNkZWZpbmUgQ0lEWElOQ19WKHgpICgoeCkgPDwgQ0lEWElOQ19TKQorCisjZGVmaW5lIFNHRV9DT05UUk9MX0EJMHgxMDA4CisjZGVmaW5lIFNHRV9DT05UUk9MMl9BCTB4MTEyNAorCisjZGVmaW5lIFJYUEtUQ1BMTU9ERV9TICAgIDE4CisjZGVmaW5lIFJYUEtUQ1BMTU9ERV9WKHgpICgoeCkgPDwgUlhQS1RDUExNT0RFX1MpCisjZGVmaW5lIFJYUEtUQ1BMTU9ERV9GICAgIFJYUEtUQ1BMTU9ERV9WKDFVKQorCisjZGVmaW5lIEVHUlNUQVRVU1BBR0VTSVpFX1MgICAgMTcKKyNkZWZpbmUgRUdSU1RBVFVTUEFHRVNJWkVfVih4KSAoKHgpIDw8IEVHUlNUQVRVU1BBR0VTSVpFX1MpCisjZGVmaW5lIEVHUlNUQVRVU1BBR0VTSVpFX0YgICAgRUdSU1RBVFVTUEFHRVNJWkVfVigxVSkKKworI2RlZmluZSBQS1RTSElGVF9TICAgIDEwCisjZGVmaW5lIFBLVFNISUZUX00gICAgMHg3VQorI2RlZmluZSBQS1RTSElGVF9WKHgpICgoeCkgPDwgUEtUU0hJRlRfUykKKyNkZWZpbmUgUEtUU0hJRlRfRyh4KSAoKCh4KSA+PiBQS1RTSElGVF9TKSAmIFBLVFNISUZUX00pCisKKyNkZWZpbmUgSU5HUENJRUJPVU5EQVJZX1MgICAgNworI2RlZmluZSBJTkdQQ0lFQk9VTkRBUllfVih4KSAoKHgpIDw8IElOR1BDSUVCT1VOREFSWV9TKQorCisjZGVmaW5lIElOR1BBREJPVU5EQVJZX1MgICAgNAorI2RlZmluZSBJTkdQQURCT1VOREFSWV9NICAgIDB4N1UKKyNkZWZpbmUgSU5HUEFEQk9VTkRBUllfVih4KSAoKHgpIDw8IElOR1BBREJPVU5EQVJZX1MpCisjZGVmaW5lIElOR1BBREJPVU5EQVJZX0coeCkgKCgoeCkgPj4gSU5HUEFEQk9VTkRBUllfUykgJiBJTkdQQURCT1VOREFSWV9NKQorCisjZGVmaW5lIEVHUlBDSUVCT1VOREFSWV9TICAgIDEKKyNkZWZpbmUgRUdSUENJRUJPVU5EQVJZX1YoeCkgKCh4KSA8PCBFR1JQQ0lFQk9VTkRBUllfUykKIAogI2RlZmluZSAgSU5HUEFDS0JPVU5EQVJZX1MJMTYKICNkZWZpbmUgIElOR1BBQ0tCT1VOREFSWV9NCTB4N1UKICNkZWZpbmUgIElOR1BBQ0tCT1VOREFSWV9WKHgpCSgoeCkgPDwgSU5HUEFDS0JPVU5EQVJZX1MpCiAjZGVmaW5lICBJTkdQQUNLQk9VTkRBUllfRyh4KQkoKCh4KSA+PiBJTkdQQUNLQk9VTkRBUllfUykgXAogCQkJCSAmIElOR1BBQ0tCT1VOREFSWV9NKQotI2RlZmluZSAgRUdSUENJRUJPVU5EQVJZX01BU0sgICAweDAwMDAwMDBlVQotI2RlZmluZSAgRUdSUENJRUJPVU5EQVJZX1NISUZUICAxCi0jZGVmaW5lICBFR1JQQ0lFQk9VTkRBUlkoeCkgICAgICgoeCkgPDwgRUdSUENJRUJPVU5EQVJZX1NISUZUKQotI2RlZmluZSAgR0xPQkFMRU5BQkxFICAgICAgICAgICAweDAwMDAwMDAxVQogCi0jZGVmaW5lIFNHRV9IT1NUX1BBR0VfU0laRSAweDEwMGMKKyNkZWZpbmUgR0xPQkFMRU5BQkxFX1MgICAgMAorI2RlZmluZSBHTE9CQUxFTkFCTEVfVih4KSAoKHgpIDw8IEdMT0JBTEVOQUJMRV9TKQorI2RlZmluZSBHTE9CQUxFTkFCTEVfRiAgICBHTE9CQUxFTkFCTEVfVigxVSkKIAotI2RlZmluZSAgSE9TVFBBR0VTSVpFUEY3X01BU0sgICAweDAwMDAwMDBmVQotI2RlZmluZSAgSE9TVFBBR0VTSVpFUEY3X1NISUZUICAyOAotI2RlZmluZSAgSE9TVFBBR0VTSVpFUEY3KHgpICAgICAoKHgpIDw8IEhPU1RQQUdFU0laRVBGN19TSElGVCkKKyNkZWZpbmUgU0dFX0hPU1RfUEFHRV9TSVpFX0EgMHgxMDBjCiAKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGNl9NQVNLICAgMHgwMDAwMDAwZlUKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGNl9TSElGVCAgMjQKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGNih4KSAgICAgKCh4KSA8PCBIT1NUUEFHRVNJWkVQRjZfU0hJRlQpCisjZGVmaW5lIEhPU1RQQUdFU0laRVBGN19TICAgIDI4CisjZGVmaW5lIEhPU1RQQUdFU0laRVBGN19NICAgIDB4ZlUKKyNkZWZpbmUgSE9TVFBBR0VTSVpFUEY3X1YoeCkgKCh4KSA8PCBIT1NUUEFHRVNJWkVQRjdfUykKKyNkZWZpbmUgSE9TVFBBR0VTSVpFUEY3X0coeCkgKCgoeCkgPj4gSE9TVFBBR0VTSVpFUEY3X1MpICYgSE9TVFBBR0VTSVpFUEY3X00pCiAKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGNV9NQVNLICAgMHgwMDAwMDAwZlUKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGNV9TSElGVCAgMjAKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGNSh4KSAgICAgKCh4KSA8PCBIT1NUUEFHRVNJWkVQRjVfU0hJRlQpCisjZGVmaW5lIEhPU1RQQUdFU0laRVBGNl9TICAgIDI0CisjZGVmaW5lIEhPU1RQQUdFU0laRVBGNl9NICAgIDB4ZlUKKyNkZWZpbmUgSE9TVFBBR0VTSVpFUEY2X1YoeCkgKCh4KSA8PCBIT1NUUEFHRVNJWkVQRjZfUykKKyNkZWZpbmUgSE9TVFBBR0VTSVpFUEY2X0coeCkgKCgoeCkgPj4gSE9TVFBBR0VTSVpFUEY2X1MpICYgSE9TVFBBR0VTSVpFUEY2X00pCiAKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGNF9NQVNLICAgMHgwMDAwMDAwZlUKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGNF9TSElGVCAgMTYKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGNCh4KSAgICAgKCh4KSA8PCBIT1NUUEFHRVNJWkVQRjRfU0hJRlQpCisjZGVmaW5lIEhPU1RQQUdFU0laRVBGNV9TICAgIDIwCisjZGVmaW5lIEhPU1RQQUdFU0laRVBGNV9NICAgIDB4ZlUKKyNkZWZpbmUgSE9TVFBBR0VTSVpFUEY1X1YoeCkgKCh4KSA8PCBIT1NUUEFHRVNJWkVQRjVfUykKKyNkZWZpbmUgSE9TVFBBR0VTSVpFUEY1X0coeCkgKCgoeCkgPj4gSE9TVFBBR0VTSVpFUEY1X1MpICYgSE9TVFBBR0VTSVpFUEY1X00pCiAKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGM19NQVNLICAgMHgwMDAwMDAwZlUKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGM19TSElGVCAgMTIKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGMyh4KSAgICAgKCh4KSA8PCBIT1NUUEFHRVNJWkVQRjNfU0hJRlQpCisjZGVmaW5lIEhPU1RQQUdFU0laRVBGNF9TICAgIDE2CisjZGVmaW5lIEhPU1RQQUdFU0laRVBGNF9NICAgIDB4ZlUKKyNkZWZpbmUgSE9TVFBBR0VTSVpFUEY0X1YoeCkgKCh4KSA8PCBIT1NUUEFHRVNJWkVQRjRfUykKKyNkZWZpbmUgSE9TVFBBR0VTSVpFUEY0X0coeCkgKCgoeCkgPj4gSE9TVFBBR0VTSVpFUEY0X1MpICYgSE9TVFBBR0VTSVpFUEY0X00pCiAKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGMl9NQVNLICAgMHgwMDAwMDAwZlUKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGMl9TSElGVCAgOAotI2RlZmluZSAgSE9TVFBBR0VTSVpFUEYyKHgpICAgICAoKHgpIDw8IEhPU1RQQUdFU0laRVBGMl9TSElGVCkKKyNkZWZpbmUgSE9TVFBBR0VTSVpFUEYzX1MgICAgMTIKKyNkZWZpbmUgSE9TVFBBR0VTSVpFUEYzX00gICAgMHhmVQorI2RlZmluZSBIT1NUUEFHRVNJWkVQRjNfVih4KSAoKHgpIDw8IEhPU1RQQUdFU0laRVBGM19TKQorI2RlZmluZSBIT1NUUEFHRVNJWkVQRjNfRyh4KSAoKCh4KSA+PiBIT1NUUEFHRVNJWkVQRjNfUykgJiBIT1NUUEFHRVNJWkVQRjNfTSkKIAotI2RlZmluZSAgSE9TVFBBR0VTSVpFUEYxX00JMHgwMDAwMDAwZlUKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGMV9TCTQKLSNkZWZpbmUgIEhPU1RQQUdFU0laRVBGMSh4KSAgICAgKCh4KSA8PCBIT1NUUEFHRVNJWkVQRjFfUykKKyNkZWZpbmUgSE9TVFBBR0VTSVpFUEYyX1MgICAgOAorI2RlZmluZSBIT1NUUEFHRVNJWkVQRjJfTSAgICAweGZVCisjZGVmaW5lIEhPU1RQQUdFU0laRVBGMl9WKHgpICgoeCkgPDwgSE9TVFBBR0VTSVpFUEYyX1MpCisjZGVmaW5lIEhPU1RQQUdFU0laRVBGMl9HKHgpICgoKHgpID4+IEhPU1RQQUdFU0laRVBGMl9TKSAmIEhPU1RQQUdFU0laRVBGMl9NKQogCi0jZGVmaW5lICBIT1NUUEFHRVNJWkVQRjBfTQkweDAwMDAwMDBmVQotI2RlZmluZSAgSE9TVFBBR0VTSVpFUEYwX1MJMAotI2RlZmluZSAgSE9TVFBBR0VTSVpFUEYwKHgpICAgICAoKHgpIDw8IEhPU1RQQUdFU0laRVBGMF9TKQorI2RlZmluZSBIT1NUUEFHRVNJWkVQRjFfUyAgICA0CisjZGVmaW5lIEhPU1RQQUdFU0laRVBGMV9NICAgIDB4ZlUKKyNkZWZpbmUgSE9TVFBBR0VTSVpFUEYxX1YoeCkgKCh4KSA8PCBIT1NUUEFHRVNJWkVQRjFfUykKKyNkZWZpbmUgSE9TVFBBR0VTSVpFUEYxX0coeCkgKCgoeCkgPj4gSE9TVFBBR0VTSVpFUEYxX1MpICYgSE9TVFBBR0VTSVpFUEYxX00pCiAKLSNkZWZpbmUgU0dFX0VHUkVTU19RVUVVRVNfUEVSX1BBR0VfUEYgMHgxMDEwCisjZGVmaW5lIEhPU1RQQUdFU0laRVBGMF9TICAgIDAKKyNkZWZpbmUgSE9TVFBBR0VTSVpFUEYwX00gICAgMHhmVQorI2RlZmluZSBIT1NUUEFHRVNJWkVQRjBfVih4KSAoKHgpIDw8IEhPU1RQQUdFU0laRVBGMF9TKQorI2RlZmluZSBIT1NUUEFHRVNJWkVQRjBfRyh4KSAoKCh4KSA+PiBIT1NUUEFHRVNJWkVQRjBfUykgJiBIT1NUUEFHRVNJWkVQRjBfTSkKKworI2RlZmluZSBTR0VfRUdSRVNTX1FVRVVFU19QRVJfUEFHRV9QRl9BIDB4MTAxMAogI2RlZmluZSBTR0VfRUdSRVNTX1FVRVVFU19QRVJfUEFHRV9WRl9BIDB4MTAxNAogCiAjZGVmaW5lIFFVRVVFU1BFUlBBR0VQRjFfUyAgICA0CiAKICNkZWZpbmUgUVVFVUVTUEVSUEFHRVBGMF9TICAgIDAKLSNkZWZpbmUgUVVFVUVTUEVSUEFHRVBGMF9NQVNLICAgMHgwMDAwMDAwZlUKLSNkZWZpbmUgUVVFVUVTUEVSUEFHRVBGMF9HRVQoeCkgKCh4KSAmIFFVRVVFU1BFUlBBR0VQRjBfTUFTSykKKyNkZWZpbmUgUVVFVUVTUEVSUEFHRVBGMF9NICAgIDB4ZlUKKyNkZWZpbmUgUVVFVUVTUEVSUEFHRVBGMF9WKHgpICgoeCkgPDwgUVVFVUVTUEVSUEFHRVBGMF9TKQorI2RlZmluZSBRVUVVRVNQRVJQQUdFUEYwX0coeCkgKCgoeCkgPj4gUVVFVUVTUEVSUEFHRVBGMF9TKSAmIFFVRVVFU1BFUlBBR0VQRjBfTSkKIAotI2RlZmluZSBRVUVVRVNQRVJQQUdFUEYwICAgIDAKLSNkZWZpbmUgUVVFVUVTUEVSUEFHRVBGMSAgICA0CisjZGVmaW5lIFNHRV9JTlRfQ0FVU0UxX0EJMHgxMDI0CisjZGVmaW5lIFNHRV9JTlRfQ0FVU0UyX0EJMHgxMDMwCisjZGVmaW5lIFNHRV9JTlRfQ0FVU0UzX0EJMHgxMDNjCiAKLS8qIFQ1IGFuZCBsYXRlciBzdXBwb3J0IGEgbmV3IEJBUjItYmFzZWQgZG9vcmJlbGwgbWVjaGFuaXNtIGZvciBFZ3Jlc3MgUXVldWVzLgotICogVGhlIFVzZXIgRG9vcmJlbGxzIGFyZSBlYWNoIDEyOCBieXRlcyBpbiBsZW5ndGggd2l0aCBhIFNpbXBsZSBEb29yYmVsbCBhdAotICogb2Zmc2V0cyA4eCBhbmQgYSBXcml0ZSBDb21iaW5pbmcgc2luZ2xlIDY0LWJ5dGUgRWdyZXNzIFF1ZXVlIFVuaXQKLSAqIChYX0lEWFNJWkVfVU5JVCkgR2F0aGVyIEJ1ZmZlciBpbnRlcmZhY2UgYXQgb2Zmc2V0IDY0LiAgRm9yIEluZ3Jlc3MgUXVldWVzLAotICogd2UgaGF2ZSBhIEdvaW5nIFRvIFNsZWVwIHJlZ2lzdGVyIGF0IG9mZnNldHMgOHgrNC4KLSAqCi0gKiBBcyBub3RlZCBhYm92ZSwgd2UgaGF2ZSBtYW55IGluc3RhbmNlcyBvZiB0aGUgU2ltcGxlIERvb3JiZWxsIGFuZCBHb2luZyBUbwotICogU2xlZXAgcmVnaXN0ZXJzIGF0IG9mZnNldHMgOHggYW5kIDh4KzQsIHJlc3BlY3RpdmVseS4gIFdlIHdhbnQgdG8gdXNlIGEKLSAqIG5vbi02NC1ieXRlIGFsaWduZWQgb2Zmc2V0IGZvciB0aGUgU2ltcGxlIERvb3JiZWxsIGluIG9yZGVyIHRvIGF0dGVtcHQgdG8KLSAqIGF2b2lkIGJ1ZmZlcmluZyBvZiB0aGUgd3JpdGVzIHRvIHRoZSBTaW1wbGUgRG9vcmJlbGwgYW5kIHdlIHdhbnQgdG8gdXNlIGEKLSAqIG5vbi1jb250aWd1b3VzIG9mZnNldCBmb3IgdGhlIEdvaW5nIFRvIFNsZWVwIHdyaXRlcyBpbiBvcmRlciB0byBhdm9pZAotICogcG9zc2libGUgY29tYmluaW5nIGJldHdlZW4gdGhlbS4KLSAqLwotI2RlZmluZSBTR0VfVURCX1NJWkUgICAgICAgICAgICAxMjgKLSNkZWZpbmUgU0dFX1VEQl9LRE9PUkJFTEwgICAgICAgOAotI2RlZmluZSBTR0VfVURCX0dUUyAgICAgICAgICAgICAyMAotI2RlZmluZSBTR0VfVURCX1dDRE9PUkJFTEwgICAgICA2NAorI2RlZmluZSBFUlJfRkxNX0RCUF9TICAgIDMxCisjZGVmaW5lIEVSUl9GTE1fREJQX1YoeCkgKCh4KSA8PCBFUlJfRkxNX0RCUF9TKQorI2RlZmluZSBFUlJfRkxNX0RCUF9GICAgIEVSUl9GTE1fREJQX1YoMVUpCiAKLSNkZWZpbmUgU0dFX0lOVF9DQVVTRTEgMHgxMDI0Ci0jZGVmaW5lIFNHRV9JTlRfQ0FVU0UyIDB4MTAzMAotI2RlZmluZSBTR0VfSU5UX0NBVVNFMyAweDEwM2MKLSNkZWZpbmUgIEVSUl9GTE1fREJQICAgICAgICAgICAgICAgMHg4MDAwMDAwMFUKLSNkZWZpbmUgIEVSUl9GTE1fSURNQTEgICAgICAgICAgICAgMHg0MDAwMDAwMFUKLSNkZWZpbmUgIEVSUl9GTE1fSURNQTAgICAgICAgICAgICAgMHgyMDAwMDAwMFUKLSNkZWZpbmUgIEVSUl9GTE1fSElOVCAgICAgICAgICAgICAgMHgxMDAwMDAwMFUKLSNkZWZpbmUgIEVSUl9QQ0lFX0VSUk9SMyAgICAgICAgICAgMHgwODAwMDAwMFUKLSNkZWZpbmUgIEVSUl9QQ0lFX0VSUk9SMiAgICAgICAgICAgMHgwNDAwMDAwMFUKLSNkZWZpbmUgIEVSUl9QQ0lFX0VSUk9SMSAgICAgICAgICAgMHgwMjAwMDAwMFUKLSNkZWZpbmUgIEVSUl9QQ0lFX0VSUk9SMCAgICAgICAgICAgMHgwMTAwMDAwMFUKLSNkZWZpbmUgIEVSUl9USU1FUl9BQk9WRV9NQVhfUUlEICAgMHgwMDgwMDAwMFUKLSNkZWZpbmUgIEVSUl9DUExfRVhDRUVEX0lRRV9TSVpFICAgMHgwMDQwMDAwMFUKLSNkZWZpbmUgIEVSUl9JTlZBTElEX0NJRFhfSU5DICAgICAgMHgwMDIwMDAwMFUKLSNkZWZpbmUgIEVSUl9JVFBfVElNRV9QQVVTRUQgICAgICAgMHgwMDEwMDAwMFUKLSNkZWZpbmUgIEVSUl9DUExfT1BDT0RFXzAgICAgICAgICAgMHgwMDA4MDAwMFUKLSNkZWZpbmUgIEVSUl9EUk9QUEVEX0RCICAgICAgICAgICAgMHgwMDA0MDAwMFUKLSNkZWZpbmUgIEVSUl9EQVRBX0NQTF9PTl9ISUdIX1FJRDEgMHgwMDAyMDAwMFUKLSNkZWZpbmUgIEVSUl9EQVRBX0NQTF9PTl9ISUdIX1FJRDAgMHgwMDAxMDAwMFUKLSNkZWZpbmUgIEVSUl9CQURfREJfUElEWDMgICAgICAgICAgMHgwMDAwODAwMFUKLSNkZWZpbmUgIEVSUl9CQURfREJfUElEWDIgICAgICAgICAgMHgwMDAwNDAwMFUKLSNkZWZpbmUgIEVSUl9CQURfREJfUElEWDEgICAgICAgICAgMHgwMDAwMjAwMFUKLSNkZWZpbmUgIEVSUl9CQURfREJfUElEWDAgICAgICAgICAgMHgwMDAwMTAwMFUKLSNkZWZpbmUgIEVSUl9JTkdfUENJRV9DSEFOICAgICAgICAgMHgwMDAwMDgwMFUKLSNkZWZpbmUgIEVSUl9JTkdfQ1RYVF9QUklPICAgICAgICAgMHgwMDAwMDQwMFUKLSNkZWZpbmUgIEVSUl9FR1JfQ1RYVF9QUklPICAgICAgICAgMHgwMDAwMDIwMFUKLSNkZWZpbmUgIERCRklGT19IUF9JTlQgICAgICAgICAgICAgMHgwMDAwMDEwMFUKLSNkZWZpbmUgIERCRklGT19MUF9JTlQgICAgICAgICAgICAgMHgwMDAwMDA4MFUKLSNkZWZpbmUgIFJFR19BRERSRVNTX0VSUiAgICAgICAgICAgMHgwMDAwMDA0MFUKLSNkZWZpbmUgIElOR1JFU1NfU0laRV9FUlIgICAgICAgICAgMHgwMDAwMDAyMFUKLSNkZWZpbmUgIEVHUkVTU19TSVpFX0VSUiAgICAgICAgICAgMHgwMDAwMDAxMFUKLSNkZWZpbmUgIEVSUl9JTlZfQ1RYVDMgICAgICAgICAgICAgMHgwMDAwMDAwOFUKLSNkZWZpbmUgIEVSUl9JTlZfQ1RYVDIgICAgICAgICAgICAgMHgwMDAwMDAwNFUKLSNkZWZpbmUgIEVSUl9JTlZfQ1RYVDEgICAgICAgICAgICAgMHgwMDAwMDAwMlUKLSNkZWZpbmUgIEVSUl9JTlZfQ1RYVDAgICAgICAgICAgICAgMHgwMDAwMDAwMVUKKyNkZWZpbmUgRVJSX0ZMTV9JRE1BMV9TICAgIDMwCisjZGVmaW5lIEVSUl9GTE1fSURNQTFfVih4KSAoKHgpIDw8IEVSUl9GTE1fSURNQTFfUykKKyNkZWZpbmUgRVJSX0ZMTV9JRE1BMV9GICAgIEVSUl9GTE1fSURNQTFfVigxVSkKIAotI2RlZmluZSBTR0VfSU5UX0VOQUJMRTMgMHgxMDQwCi0jZGVmaW5lIFNHRV9GTF9CVUZGRVJfU0laRTAgMHgxMDQ0Ci0jZGVmaW5lIFNHRV9GTF9CVUZGRVJfU0laRTEgMHgxMDQ4Ci0jZGVmaW5lIFNHRV9GTF9CVUZGRVJfU0laRTIgMHgxMDRjCi0jZGVmaW5lIFNHRV9GTF9CVUZGRVJfU0laRTMgMHgxMDUwCi0jZGVmaW5lIFNHRV9GTF9CVUZGRVJfU0laRTQgMHgxMDU0Ci0jZGVmaW5lIFNHRV9GTF9CVUZGRVJfU0laRTUgMHgxMDU4Ci0jZGVmaW5lIFNHRV9GTF9CVUZGRVJfU0laRTYgMHgxMDVjCi0jZGVmaW5lIFNHRV9GTF9CVUZGRVJfU0laRTcgMHgxMDYwCi0jZGVmaW5lIFNHRV9GTF9CVUZGRVJfU0laRTggMHgxMDY0CisjZGVmaW5lIEVSUl9GTE1fSURNQTBfUyAgICAyOQorI2RlZmluZSBFUlJfRkxNX0lETUEwX1YoeCkgKCh4KSA8PCBFUlJfRkxNX0lETUEwX1MpCisjZGVmaW5lIEVSUl9GTE1fSURNQTBfRiAgICBFUlJfRkxNX0lETUEwX1YoMVUpCiAKLSNkZWZpbmUgU0dFX0lOR1JFU1NfUlhfVEhSRVNIT0xEIDB4MTBhMAotI2RlZmluZSAgVEhSRVNIT0xEXzBfTUFTSyAgIDB4M2YwMDAwMDBVCi0jZGVmaW5lICBUSFJFU0hPTERfMF9TSElGVCAgMjQKLSNkZWZpbmUgIFRIUkVTSE9MRF8wKHgpICAgICAoKHgpIDw8IFRIUkVTSE9MRF8wX1NISUZUKQotI2RlZmluZSAgVEhSRVNIT0xEXzBfR0VUKHgpICgoKHgpICYgVEhSRVNIT0xEXzBfTUFTSykgPj4gVEhSRVNIT0xEXzBfU0hJRlQpCi0jZGVmaW5lICBUSFJFU0hPTERfMV9NQVNLICAgMHgwMDNmMDAwMFUKLSNkZWZpbmUgIFRIUkVTSE9MRF8xX1NISUZUICAxNgotI2RlZmluZSAgVEhSRVNIT0xEXzEoeCkgICAgICgoeCkgPDwgVEhSRVNIT0xEXzFfU0hJRlQpCi0jZGVmaW5lICBUSFJFU0hPTERfMV9HRVQoeCkgKCgoeCkgJiBUSFJFU0hPTERfMV9NQVNLKSA+PiBUSFJFU0hPTERfMV9TSElGVCkKLSNkZWZpbmUgIFRIUkVTSE9MRF8yX01BU0sgICAweDAwMDAzZjAwVQotI2RlZmluZSAgVEhSRVNIT0xEXzJfU0hJRlQgIDgKLSNkZWZpbmUgIFRIUkVTSE9MRF8yKHgpICAgICAoKHgpIDw8IFRIUkVTSE9MRF8yX1NISUZUKQotI2RlZmluZSAgVEhSRVNIT0xEXzJfR0VUKHgpICgoKHgpICYgVEhSRVNIT0xEXzJfTUFTSykgPj4gVEhSRVNIT0xEXzJfU0hJRlQpCi0jZGVmaW5lICBUSFJFU0hPTERfM19NQVNLICAgMHgwMDAwMDAzZlUKLSNkZWZpbmUgIFRIUkVTSE9MRF8zX1NISUZUICAwCi0jZGVmaW5lICBUSFJFU0hPTERfMyh4KSAgICAgKCh4KSA8PCBUSFJFU0hPTERfM19TSElGVCkKLSNkZWZpbmUgIFRIUkVTSE9MRF8zX0dFVCh4KSAoKCh4KSAmIFRIUkVTSE9MRF8zX01BU0spID4+IFRIUkVTSE9MRF8zX1NISUZUKQorI2RlZmluZSBFUlJfRkxNX0hJTlRfUyAgICAyOAorI2RlZmluZSBFUlJfRkxNX0hJTlRfVih4KSAoKHgpIDw8IEVSUl9GTE1fSElOVF9TKQorI2RlZmluZSBFUlJfRkxNX0hJTlRfRiAgICBFUlJfRkxNX0hJTlRfVigxVSkKIAotI2RlZmluZSBTR0VfQ09OTV9DVFJMIDB4MTA5NAotI2RlZmluZSAgRUdSVEhSRVNIT0xEX01BU0sgICAweDAwMDAzZjAwVQotI2RlZmluZSAgRUdSVEhSRVNIT0xEc2hpZnQgICA4Ci0jZGVmaW5lICBFR1JUSFJFU0hPTEQoeCkgICAgICgoeCkgPDwgRUdSVEhSRVNIT0xEc2hpZnQpCi0jZGVmaW5lICBFR1JUSFJFU0hPTERfR0VUKHgpICgoKHgpICYgRUdSVEhSRVNIT0xEX01BU0spID4+IEVHUlRIUkVTSE9MRHNoaWZ0KQorI2RlZmluZSBFUlJfUENJRV9FUlJPUjNfUyAgICAyNworI2RlZmluZSBFUlJfUENJRV9FUlJPUjNfVih4KSAoKHgpIDw8IEVSUl9QQ0lFX0VSUk9SM19TKQorI2RlZmluZSBFUlJfUENJRV9FUlJPUjNfRiAgICBFUlJfUENJRV9FUlJPUjNfVigxVSkKIAotI2RlZmluZSBFR1JUSFJFU0hPTERQQUNLSU5HX01BU0sJMHgzZlUKLSNkZWZpbmUgRUdSVEhSRVNIT0xEUEFDS0lOR19TSElGVAkxNAotI2RlZmluZSBFR1JUSFJFU0hPTERQQUNLSU5HKHgpCQkoKHgpIDw8IEVHUlRIUkVTSE9MRFBBQ0tJTkdfU0hJRlQpCi0jZGVmaW5lIEVHUlRIUkVTSE9MRFBBQ0tJTkdfR0VUKHgpCSgoKHgpID4+IEVHUlRIUkVTSE9MRFBBQ0tJTkdfU0hJRlQpICYgXAotCQkJCQkgIEVHUlRIUkVTSE9MRFBBQ0tJTkdfTUFTSykKKyNkZWZpbmUgRVJSX1BDSUVfRVJST1IyX1MgICAgMjYKKyNkZWZpbmUgRVJSX1BDSUVfRVJST1IyX1YoeCkgKCh4KSA8PCBFUlJfUENJRV9FUlJPUjJfUykKKyNkZWZpbmUgRVJSX1BDSUVfRVJST1IyX0YgICAgRVJSX1BDSUVfRVJST1IyX1YoMVUpCiAKLSNkZWZpbmUgU0dFX0RCRklGT19TVEFUVVMgMHgxMGE0Ci0jZGVmaW5lICBIUF9JTlRfVEhSRVNIX1NISUZUIDI4Ci0jZGVmaW5lICBIUF9JTlRfVEhSRVNIX01BU0sgIDB4ZlUKLSNkZWZpbmUgIEhQX0lOVF9USFJFU0goeCkgICAgKCh4KSA8PCBIUF9JTlRfVEhSRVNIX1NISUZUKQotI2RlZmluZSAgTFBfSU5UX1RIUkVTSF9TSElGVCAxMgotI2RlZmluZSAgTFBfSU5UX1RIUkVTSF9NQVNLICAweGZVCi0jZGVmaW5lICBMUF9JTlRfVEhSRVNIKHgpICAgICgoeCkgPDwgTFBfSU5UX1RIUkVTSF9TSElGVCkKKyNkZWZpbmUgRVJSX1BDSUVfRVJST1IxX1MgICAgMjUKKyNkZWZpbmUgRVJSX1BDSUVfRVJST1IxX1YoeCkgKCh4KSA8PCBFUlJfUENJRV9FUlJPUjFfUykKKyNkZWZpbmUgRVJSX1BDSUVfRVJST1IxX0YgICAgRVJSX1BDSUVfRVJST1IxX1YoMVUpCiAKLSNkZWZpbmUgU0dFX0RPT1JCRUxMX0NPTlRST0wgMHgxMGE4Ci0jZGVmaW5lICBFTkFCTEVfRFJPUCAgICAgICAgKDEgPDwgMTMpCisjZGVmaW5lIEVSUl9QQ0lFX0VSUk9SMF9TICAgIDI0CisjZGVmaW5lIEVSUl9QQ0lFX0VSUk9SMF9WKHgpICgoeCkgPDwgRVJSX1BDSUVfRVJST1IwX1MpCisjZGVmaW5lIEVSUl9QQ0lFX0VSUk9SMF9GICAgIEVSUl9QQ0lFX0VSUk9SMF9WKDFVKQogCi0jZGVmaW5lIFNfTk9DT0FMRVNDRSAgICAyNgotI2RlZmluZSBWX05PQ09BTEVTQ0UoeCkgKCh4KSA8PCBTX05PQ09BTEVTQ0UpCi0jZGVmaW5lIEZfTk9DT0FMRVNDRSAgICBWX05PQ09BTEVTQ0UoMVUpCisjZGVmaW5lIEVSUl9DUExfRVhDRUVEX0lRRV9TSVpFX1MgICAgMjIKKyNkZWZpbmUgRVJSX0NQTF9FWENFRURfSVFFX1NJWkVfVih4KSAoKHgpIDw8IEVSUl9DUExfRVhDRUVEX0lRRV9TSVpFX1MpCisjZGVmaW5lIEVSUl9DUExfRVhDRUVEX0lRRV9TSVpFX0YgICAgRVJSX0NQTF9FWENFRURfSVFFX1NJWkVfVigxVSkKIAotI2RlZmluZSBTR0VfVElNRVNUQU1QX0xPIDB4MTA5OAotI2RlZmluZSBTR0VfVElNRVNUQU1QX0hJIDB4MTA5YwotI2RlZmluZSBTX1RTVkFMICAgIDAKLSNkZWZpbmUgTV9UU1ZBTCAgICAweGZmZmZmZmZVCi0jZGVmaW5lIEdFVF9UU1ZBTCh4KSAoKCh4KSA+PiBTX1RTVkFMKSAmIE1fVFNWQUwpCisjZGVmaW5lIEVSUl9JTlZBTElEX0NJRFhfSU5DX1MgICAgMjEKKyNkZWZpbmUgRVJSX0lOVkFMSURfQ0lEWF9JTkNfVih4KSAoKHgpIDw8IEVSUl9JTlZBTElEX0NJRFhfSU5DX1MpCisjZGVmaW5lIEVSUl9JTlZBTElEX0NJRFhfSU5DX0YgICAgRVJSX0lOVkFMSURfQ0lEWF9JTkNfVigxVSkKIAotI2RlZmluZSBTR0VfVElNRVJfVkFMVUVfMF9BTkRfMSAweDEwYjgKLSNkZWZpbmUgIFRJTUVSVkFMVUUwX01BU0sgICAweGZmZmYwMDAwVQotI2RlZmluZSAgVElNRVJWQUxVRTBfU0hJRlQgIDE2Ci0jZGVmaW5lICBUSU1FUlZBTFVFMCh4KSAgICAgKCh4KSA8PCBUSU1FUlZBTFVFMF9TSElGVCkKLSNkZWZpbmUgIFRJTUVSVkFMVUUwX0dFVCh4KSAoKCh4KSAmIFRJTUVSVkFMVUUwX01BU0spID4+IFRJTUVSVkFMVUUwX1NISUZUKQotI2RlZmluZSAgVElNRVJWQUxVRTFfTUFTSyAgIDB4MDAwMGZmZmZVCi0jZGVmaW5lICBUSU1FUlZBTFVFMV9TSElGVCAgMAotI2RlZmluZSAgVElNRVJWQUxVRTEoeCkgICAgICgoeCkgPDwgVElNRVJWQUxVRTFfU0hJRlQpCi0jZGVmaW5lICBUSU1FUlZBTFVFMV9HRVQoeCkgKCgoeCkgJiBUSU1FUlZBTFVFMV9NQVNLKSA+PiBUSU1FUlZBTFVFMV9TSElGVCkKKyNkZWZpbmUgRVJSX0NQTF9PUENPREVfMF9TICAgIDE5CisjZGVmaW5lIEVSUl9DUExfT1BDT0RFXzBfVih4KSAoKHgpIDw8IEVSUl9DUExfT1BDT0RFXzBfUykKKyNkZWZpbmUgRVJSX0NQTF9PUENPREVfMF9GICAgIEVSUl9DUExfT1BDT0RFXzBfVigxVSkKIAotI2RlZmluZSBTR0VfVElNRVJfVkFMVUVfMl9BTkRfMyAweDEwYmMKLSNkZWZpbmUgIFRJTUVSVkFMVUUyX01BU0sgICAweGZmZmYwMDAwVQotI2RlZmluZSAgVElNRVJWQUxVRTJfU0hJRlQgIDE2Ci0jZGVmaW5lICBUSU1FUlZBTFVFMih4KSAgICAgKCh4KSA8PCBUSU1FUlZBTFVFMl9TSElGVCkKLSNkZWZpbmUgIFRJTUVSVkFMVUUyX0dFVCh4KSAoKCh4KSAmIFRJTUVSVkFMVUUyX01BU0spID4+IFRJTUVSVkFMVUUyX1NISUZUKQotI2RlZmluZSAgVElNRVJWQUxVRTNfTUFTSyAgIDB4MDAwMGZmZmZVCi0jZGVmaW5lICBUSU1FUlZBTFVFM19TSElGVCAgMAotI2RlZmluZSAgVElNRVJWQUxVRTMoeCkgICAgICgoeCkgPDwgVElNRVJWQUxVRTNfU0hJRlQpCi0jZGVmaW5lICBUSU1FUlZBTFVFM19HRVQoeCkgKCgoeCkgJiBUSU1FUlZBTFVFM19NQVNLKSA+PiBUSU1FUlZBTFVFM19TSElGVCkKKyNkZWZpbmUgRVJSX0RST1BQRURfREJfUyAgICAxOAorI2RlZmluZSBFUlJfRFJPUFBFRF9EQl9WKHgpICgoeCkgPDwgRVJSX0RST1BQRURfREJfUykKKyNkZWZpbmUgRVJSX0RST1BQRURfREJfRiAgICBFUlJfRFJPUFBFRF9EQl9WKDFVKQogCi0jZGVmaW5lIFNHRV9USU1FUl9WQUxVRV80X0FORF81IDB4MTBjMAotI2RlZmluZSAgVElNRVJWQUxVRTRfTUFTSyAgIDB4ZmZmZjAwMDBVCi0jZGVmaW5lICBUSU1FUlZBTFVFNF9TSElGVCAgMTYKLSNkZWZpbmUgIFRJTUVSVkFMVUU0KHgpICAgICAoKHgpIDw8IFRJTUVSVkFMVUU0X1NISUZUKQotI2RlZmluZSAgVElNRVJWQUxVRTRfR0VUKHgpICgoKHgpICYgVElNRVJWQUxVRTRfTUFTSykgPj4gVElNRVJWQUxVRTRfU0hJRlQpCi0jZGVmaW5lICBUSU1FUlZBTFVFNV9NQVNLICAgMHgwMDAwZmZmZlUKLSNkZWZpbmUgIFRJTUVSVkFMVUU1X1NISUZUICAwCi0jZGVmaW5lICBUSU1FUlZBTFVFNSh4KSAgICAgKCh4KSA8PCBUSU1FUlZBTFVFNV9TSElGVCkKLSNkZWZpbmUgIFRJTUVSVkFMVUU1X0dFVCh4KSAoKCh4KSAmIFRJTUVSVkFMVUU1X01BU0spID4+IFRJTUVSVkFMVUU1X1NISUZUKQorI2RlZmluZSBFUlJfREFUQV9DUExfT05fSElHSF9RSUQxX1MgICAgMTcKKyNkZWZpbmUgRVJSX0RBVEFfQ1BMX09OX0hJR0hfUUlEMV9WKHgpICgoeCkgPDwgRVJSX0RBVEFfQ1BMX09OX0hJR0hfUUlEMV9TKQorI2RlZmluZSBFUlJfREFUQV9DUExfT05fSElHSF9RSUQxX0YgICAgRVJSX0RBVEFfQ1BMX09OX0hJR0hfUUlEMV9WKDFVKQogCi0jZGVmaW5lIFNHRV9ERUJVR19JTkRFWCAweDEwY2MKLSNkZWZpbmUgU0dFX0RFQlVHX0RBVEFfSElHSCAweDEwZDAKLSNkZWZpbmUgU0dFX0RFQlVHX0RBVEFfTE9XIDB4MTBkNAotI2RlZmluZSBTR0VfREVCVUdfREFUQV9MT1dfSU5ERVhfMgkweDEyYzgKLSNkZWZpbmUgU0dFX0RFQlVHX0RBVEFfTE9XX0lOREVYXzMJMHgxMmNjCi0jZGVmaW5lIFNHRV9ERUJVR19EQVRBX0hJR0hfSU5ERVhfMTAJMHgxMmE4Ci0jZGVmaW5lIFNHRV9JTkdSRVNTX1FVRVVFU19QRVJfUEFHRV9QRiAweDEwZjQKKyNkZWZpbmUgRVJSX0RBVEFfQ1BMX09OX0hJR0hfUUlEMF9TICAgIDE2CisjZGVmaW5lIEVSUl9EQVRBX0NQTF9PTl9ISUdIX1FJRDBfVih4KSAoKHgpIDw8IEVSUl9EQVRBX0NQTF9PTl9ISUdIX1FJRDBfUykKKyNkZWZpbmUgRVJSX0RBVEFfQ1BMX09OX0hJR0hfUUlEMF9GICAgIEVSUl9EQVRBX0NQTF9PTl9ISUdIX1FJRDBfVigxVSkKKworI2RlZmluZSBFUlJfQkFEX0RCX1BJRFgzX1MgICAgMTUKKyNkZWZpbmUgRVJSX0JBRF9EQl9QSURYM19WKHgpICgoeCkgPDwgRVJSX0JBRF9EQl9QSURYM19TKQorI2RlZmluZSBFUlJfQkFEX0RCX1BJRFgzX0YgICAgRVJSX0JBRF9EQl9QSURYM19WKDFVKQorCisjZGVmaW5lIEVSUl9CQURfREJfUElEWDJfUyAgICAxNAorI2RlZmluZSBFUlJfQkFEX0RCX1BJRFgyX1YoeCkgKCh4KSA8PCBFUlJfQkFEX0RCX1BJRFgyX1MpCisjZGVmaW5lIEVSUl9CQURfREJfUElEWDJfRiAgICBFUlJfQkFEX0RCX1BJRFgyX1YoMVUpCisKKyNkZWZpbmUgRVJSX0JBRF9EQl9QSURYMV9TICAgIDEzCisjZGVmaW5lIEVSUl9CQURfREJfUElEWDFfVih4KSAoKHgpIDw8IEVSUl9CQURfREJfUElEWDFfUykKKyNkZWZpbmUgRVJSX0JBRF9EQl9QSURYMV9GICAgIEVSUl9CQURfREJfUElEWDFfVigxVSkKKworI2RlZmluZSBFUlJfQkFEX0RCX1BJRFgwX1MgICAgMTIKKyNkZWZpbmUgRVJSX0JBRF9EQl9QSURYMF9WKHgpICgoeCkgPDwgRVJSX0JBRF9EQl9QSURYMF9TKQorI2RlZmluZSBFUlJfQkFEX0RCX1BJRFgwX0YgICAgRVJSX0JBRF9EQl9QSURYMF9WKDFVKQorCisjZGVmaW5lIEVSUl9JTkdfQ1RYVF9QUklPX1MgICAgMTAKKyNkZWZpbmUgRVJSX0lOR19DVFhUX1BSSU9fVih4KSAoKHgpIDw8IEVSUl9JTkdfQ1RYVF9QUklPX1MpCisjZGVmaW5lIEVSUl9JTkdfQ1RYVF9QUklPX0YgICAgRVJSX0lOR19DVFhUX1BSSU9fVigxVSkKKworI2RlZmluZSBFUlJfRUdSX0NUWFRfUFJJT19TICAgIDkKKyNkZWZpbmUgRVJSX0VHUl9DVFhUX1BSSU9fVih4KSAoKHgpIDw8IEVSUl9FR1JfQ1RYVF9QUklPX1MpCisjZGVmaW5lIEVSUl9FR1JfQ1RYVF9QUklPX0YgICAgRVJSX0VHUl9DVFhUX1BSSU9fVigxVSkKKworI2RlZmluZSBEQkZJRk9fSFBfSU5UX1MgICAgOAorI2RlZmluZSBEQkZJRk9fSFBfSU5UX1YoeCkgKCh4KSA8PCBEQkZJRk9fSFBfSU5UX1MpCisjZGVmaW5lIERCRklGT19IUF9JTlRfRiAgICBEQkZJRk9fSFBfSU5UX1YoMVUpCisKKyNkZWZpbmUgREJGSUZPX0xQX0lOVF9TICAgIDcKKyNkZWZpbmUgREJGSUZPX0xQX0lOVF9WKHgpICgoeCkgPDwgREJGSUZPX0xQX0lOVF9TKQorI2RlZmluZSBEQkZJRk9fTFBfSU5UX0YgICAgREJGSUZPX0xQX0lOVF9WKDFVKQorCisjZGVmaW5lIElOR1JFU1NfU0laRV9FUlJfUyAgICA1CisjZGVmaW5lIElOR1JFU1NfU0laRV9FUlJfVih4KSAoKHgpIDw8IElOR1JFU1NfU0laRV9FUlJfUykKKyNkZWZpbmUgSU5HUkVTU19TSVpFX0VSUl9GICAgIElOR1JFU1NfU0laRV9FUlJfVigxVSkKKworI2RlZmluZSBFR1JFU1NfU0laRV9FUlJfUyAgICA0CisjZGVmaW5lIEVHUkVTU19TSVpFX0VSUl9WKHgpICgoeCkgPDwgRUdSRVNTX1NJWkVfRVJSX1MpCisjZGVmaW5lIEVHUkVTU19TSVpFX0VSUl9GICAgIEVHUkVTU19TSVpFX0VSUl9WKDFVKQorCisjZGVmaW5lIFNHRV9JTlRfRU5BQkxFM19BIDB4MTA0MAorI2RlZmluZSBTR0VfRkxfQlVGRkVSX1NJWkUwX0EgMHgxMDQ0CisjZGVmaW5lIFNHRV9GTF9CVUZGRVJfU0laRTFfQSAweDEwNDgKKyNkZWZpbmUgU0dFX0ZMX0JVRkZFUl9TSVpFMl9BIDB4MTA0YworI2RlZmluZSBTR0VfRkxfQlVGRkVSX1NJWkUzX0EgMHgxMDUwCisjZGVmaW5lIFNHRV9GTF9CVUZGRVJfU0laRTRfQSAweDEwNTQKKyNkZWZpbmUgU0dFX0ZMX0JVRkZFUl9TSVpFNV9BIDB4MTA1OAorI2RlZmluZSBTR0VfRkxfQlVGRkVSX1NJWkU2X0EgMHgxMDVjCisjZGVmaW5lIFNHRV9GTF9CVUZGRVJfU0laRTdfQSAweDEwNjAKKyNkZWZpbmUgU0dFX0ZMX0JVRkZFUl9TSVpFOF9BIDB4MTA2NAorCisjZGVmaW5lIFNHRV9JTkdSRVNTX1JYX1RIUkVTSE9MRF9BIDB4MTBhMAorCisjZGVmaW5lIFRIUkVTSE9MRF8wX1MgICAgMjQKKyNkZWZpbmUgVEhSRVNIT0xEXzBfTSAgICAweDNmVQorI2RlZmluZSBUSFJFU0hPTERfMF9WKHgpICgoeCkgPDwgVEhSRVNIT0xEXzBfUykKKyNkZWZpbmUgVEhSRVNIT0xEXzBfRyh4KSAoKCh4KSA+PiBUSFJFU0hPTERfMF9TKSAmIFRIUkVTSE9MRF8wX00pCisKKyNkZWZpbmUgVEhSRVNIT0xEXzFfUyAgICAxNgorI2RlZmluZSBUSFJFU0hPTERfMV9NICAgIDB4M2ZVCisjZGVmaW5lIFRIUkVTSE9MRF8xX1YoeCkgKCh4KSA8PCBUSFJFU0hPTERfMV9TKQorI2RlZmluZSBUSFJFU0hPTERfMV9HKHgpICgoKHgpID4+IFRIUkVTSE9MRF8xX1MpICYgVEhSRVNIT0xEXzFfTSkKKworI2RlZmluZSBUSFJFU0hPTERfMl9TICAgIDgKKyNkZWZpbmUgVEhSRVNIT0xEXzJfTSAgICAweDNmVQorI2RlZmluZSBUSFJFU0hPTERfMl9WKHgpICgoeCkgPDwgVEhSRVNIT0xEXzJfUykKKyNkZWZpbmUgVEhSRVNIT0xEXzJfRyh4KSAoKCh4KSA+PiBUSFJFU0hPTERfMl9TKSAmIFRIUkVTSE9MRF8yX00pCisKKyNkZWZpbmUgVEhSRVNIT0xEXzNfUyAgICAwCisjZGVmaW5lIFRIUkVTSE9MRF8zX00gICAgMHgzZlUKKyNkZWZpbmUgVEhSRVNIT0xEXzNfVih4KSAoKHgpIDw8IFRIUkVTSE9MRF8zX1MpCisjZGVmaW5lIFRIUkVTSE9MRF8zX0coeCkgKCgoeCkgPj4gVEhSRVNIT0xEXzNfUykgJiBUSFJFU0hPTERfM19NKQorCisjZGVmaW5lIFNHRV9DT05NX0NUUkxfQSAweDEwOTQKKworI2RlZmluZSBFR1JUSFJFU0hPTERfUyAgICA4CisjZGVmaW5lIEVHUlRIUkVTSE9MRF9NICAgIDB4M2ZVCisjZGVmaW5lIEVHUlRIUkVTSE9MRF9WKHgpICgoeCkgPDwgRUdSVEhSRVNIT0xEX1MpCisjZGVmaW5lIEVHUlRIUkVTSE9MRF9HKHgpICgoKHgpID4+IEVHUlRIUkVTSE9MRF9TKSAmIEVHUlRIUkVTSE9MRF9NKQorCisjZGVmaW5lIEVHUlRIUkVTSE9MRFBBQ0tJTkdfUyAgICAxNAorI2RlZmluZSBFR1JUSFJFU0hPTERQQUNLSU5HX00gICAgMHgzZlUKKyNkZWZpbmUgRUdSVEhSRVNIT0xEUEFDS0lOR19WKHgpICgoeCkgPDwgRUdSVEhSRVNIT0xEUEFDS0lOR19TKQorI2RlZmluZSBFR1JUSFJFU0hPTERQQUNLSU5HX0coeCkgXAorCSgoKHgpID4+IEVHUlRIUkVTSE9MRFBBQ0tJTkdfUykgJiBFR1JUSFJFU0hPTERQQUNLSU5HX00pCisKKyNkZWZpbmUgU0dFX1RJTUVTVEFNUF9MT19BIDB4MTA5OAorI2RlZmluZSBTR0VfVElNRVNUQU1QX0hJX0EgMHgxMDljCisKKyNkZWZpbmUgVFNPUF9TICAgIDI4CisjZGVmaW5lIFRTT1BfTSAgICAweDNVCisjZGVmaW5lIFRTT1BfVih4KSAoKHgpIDw8IFRTT1BfUykKKyNkZWZpbmUgVFNPUF9HKHgpICgoKHgpID4+IFRTT1BfUykgJiBUU09QX00pCisKKyNkZWZpbmUgVFNWQUxfUyAgICAwCisjZGVmaW5lIFRTVkFMX00gICAgMHhmZmZmZmZmVQorI2RlZmluZSBUU1ZBTF9WKHgpICgoeCkgPDwgVFNWQUxfUykKKyNkZWZpbmUgVFNWQUxfRyh4KSAoKCh4KSA+PiBUU1ZBTF9TKSAmIFRTVkFMX00pCisKKyNkZWZpbmUgU0dFX0RCRklGT19TVEFUVVNfQSAweDEwYTQKKworI2RlZmluZSBIUF9JTlRfVEhSRVNIX1MgICAgMjgKKyNkZWZpbmUgSFBfSU5UX1RIUkVTSF9NICAgIDB4ZlUKKyNkZWZpbmUgSFBfSU5UX1RIUkVTSF9WKHgpICgoeCkgPDwgSFBfSU5UX1RIUkVTSF9TKQorCisjZGVmaW5lIExQX0lOVF9USFJFU0hfUyAgICAxMgorI2RlZmluZSBMUF9JTlRfVEhSRVNIX00gICAgMHhmVQorI2RlZmluZSBMUF9JTlRfVEhSRVNIX1YoeCkgKCh4KSA8PCBMUF9JTlRfVEhSRVNIX1MpCisKKyNkZWZpbmUgU0dFX0RPT1JCRUxMX0NPTlRST0xfQSAweDEwYTgKKworI2RlZmluZSBOT0NPQUxFU0NFX1MgICAgMjYKKyNkZWZpbmUgTk9DT0FMRVNDRV9WKHgpICgoeCkgPDwgTk9DT0FMRVNDRV9TKQorI2RlZmluZSBOT0NPQUxFU0NFX0YgICAgTk9DT0FMRVNDRV9WKDFVKQorCisjZGVmaW5lIEVOQUJMRV9EUk9QX1MgICAgMTMKKyNkZWZpbmUgRU5BQkxFX0RST1BfVih4KSAoKHgpIDw8IEVOQUJMRV9EUk9QX1MpCisjZGVmaW5lIEVOQUJMRV9EUk9QX0YgICAgRU5BQkxFX0RST1BfVigxVSkKKworI2RlZmluZSBTR0VfVElNRVJfVkFMVUVfMF9BTkRfMV9BIDB4MTBiOAorCisjZGVmaW5lIFRJTUVSVkFMVUUwX1MgICAgMTYKKyNkZWZpbmUgVElNRVJWQUxVRTBfTSAgICAweGZmZmZVCisjZGVmaW5lIFRJTUVSVkFMVUUwX1YoeCkgKCh4KSA8PCBUSU1FUlZBTFVFMF9TKQorI2RlZmluZSBUSU1FUlZBTFVFMF9HKHgpICgoKHgpID4+IFRJTUVSVkFMVUUwX1MpICYgVElNRVJWQUxVRTBfTSkKKworI2RlZmluZSBUSU1FUlZBTFVFMV9TICAgIDAKKyNkZWZpbmUgVElNRVJWQUxVRTFfTSAgICAweGZmZmZVCisjZGVmaW5lIFRJTUVSVkFMVUUxX1YoeCkgKCh4KSA8PCBUSU1FUlZBTFVFMV9TKQorI2RlZmluZSBUSU1FUlZBTFVFMV9HKHgpICgoKHgpID4+IFRJTUVSVkFMVUUxX1MpICYgVElNRVJWQUxVRTFfTSkKKworI2RlZmluZSBTR0VfVElNRVJfVkFMVUVfMl9BTkRfM19BIDB4MTBiYworCisjZGVmaW5lIFRJTUVSVkFMVUUyX1MgICAgMTYKKyNkZWZpbmUgVElNRVJWQUxVRTJfTSAgICAweGZmZmZVCisjZGVmaW5lIFRJTUVSVkFMVUUyX1YoeCkgKCh4KSA8PCBUSU1FUlZBTFVFMl9TKQorI2RlZmluZSBUSU1FUlZBTFVFMl9HKHgpICgoKHgpID4+IFRJTUVSVkFMVUUyX1MpICYgVElNRVJWQUxVRTJfTSkKKworI2RlZmluZSBUSU1FUlZBTFVFM19TICAgIDAKKyNkZWZpbmUgVElNRVJWQUxVRTNfTSAgICAweGZmZmZVCisjZGVmaW5lIFRJTUVSVkFMVUUzX1YoeCkgKCh4KSA8PCBUSU1FUlZBTFVFM19TKQorI2RlZmluZSBUSU1FUlZBTFVFM19HKHgpICgoKHgpID4+IFRJTUVSVkFMVUUzX1MpICYgVElNRVJWQUxVRTNfTSkKKworI2RlZmluZSBTR0VfVElNRVJfVkFMVUVfNF9BTkRfNV9BIDB4MTBjMAorCisjZGVmaW5lIFRJTUVSVkFMVUU0X1MgICAgMTYKKyNkZWZpbmUgVElNRVJWQUxVRTRfTSAgICAweGZmZmZVCisjZGVmaW5lIFRJTUVSVkFMVUU0X1YoeCkgKCh4KSA8PCBUSU1FUlZBTFVFNF9TKQorI2RlZmluZSBUSU1FUlZBTFVFNF9HKHgpICgoKHgpID4+IFRJTUVSVkFMVUU0X1MpICYgVElNRVJWQUxVRTRfTSkKKworI2RlZmluZSBUSU1FUlZBTFVFNV9TICAgIDAKKyNkZWZpbmUgVElNRVJWQUxVRTVfTSAgICAweGZmZmZVCisjZGVmaW5lIFRJTUVSVkFMVUU1X1YoeCkgKCh4KSA8PCBUSU1FUlZBTFVFNV9TKQorI2RlZmluZSBUSU1FUlZBTFVFNV9HKHgpICgoKHgpID4+IFRJTUVSVkFMVUU1X1MpICYgVElNRVJWQUxVRTVfTSkKKworI2RlZmluZSBTR0VfREVCVUdfSU5ERVhfQSAweDEwY2MKKyNkZWZpbmUgU0dFX0RFQlVHX0RBVEFfSElHSF9BIDB4MTBkMAorI2RlZmluZSBTR0VfREVCVUdfREFUQV9MT1dfQSAweDEwZDQKKworI2RlZmluZSBTR0VfREVCVUdfREFUQV9MT1dfSU5ERVhfMl9BCTB4MTJjOAorI2RlZmluZSBTR0VfREVCVUdfREFUQV9MT1dfSU5ERVhfM19BCTB4MTJjYworI2RlZmluZSBTR0VfREVCVUdfREFUQV9ISUdIX0lOREVYXzEwX0EJMHgxMmE4CisKKyNkZWZpbmUgU0dFX0lOR1JFU1NfUVVFVUVTX1BFUl9QQUdFX1BGX0EgMHgxMGY0CiAjZGVmaW5lIFNHRV9JTkdSRVNTX1FVRVVFU19QRVJfUEFHRV9WRl9BIDB4MTBmOAogCi0jZGVmaW5lIFNfSFBfSU5UX1RIUkVTSCAgICAyOAotI2RlZmluZSBNX0hQX0lOVF9USFJFU0ggMHhmVQotI2RlZmluZSBWX0hQX0lOVF9USFJFU0goeCkgKCh4KSA8PCBTX0hQX0lOVF9USFJFU0gpCi0jZGVmaW5lIFNfTFBfSU5UX1RIUkVTSF9UNSAgICAxOAotI2RlZmluZSBWX0xQX0lOVF9USFJFU0hfVDUoeCkgKCh4KSA8PCBTX0xQX0lOVF9USFJFU0hfVDUpCi0jZGVmaW5lIE1fTFBfQ09VTlRfVDUgICAgMHgzZmZmZlUKLSNkZWZpbmUgR19MUF9DT1VOVF9UNSh4KSAoKCh4KSA+PiBTX0xQX0NPVU5UKSAmIE1fTFBfQ09VTlRfVDUpCi0jZGVmaW5lIE1fSFBfQ09VTlQgMHg3ZmZVCi0jZGVmaW5lIFNfSFBfQ09VTlQgMTYKLSNkZWZpbmUgR19IUF9DT1VOVCh4KSAoKCh4KSA+PiBTX0hQX0NPVU5UKSAmIE1fSFBfQ09VTlQpCi0jZGVmaW5lIFNfTFBfSU5UX1RIUkVTSCAgICAxMgotI2RlZmluZSBNX0xQX0lOVF9USFJFU0ggMHhmVQotI2RlZmluZSBNX0xQX0lOVF9USFJFU0hfVDUgICAgMHhmZmZVCi0jZGVmaW5lIFZfTFBfSU5UX1RIUkVTSCh4KSAoKHgpIDw8IFNfTFBfSU5UX1RIUkVTSCkKLSNkZWZpbmUgTV9MUF9DT1VOVCAweDdmZlUKLSNkZWZpbmUgU19MUF9DT1VOVCAwCi0jZGVmaW5lIEdfTFBfQ09VTlQoeCkgKCgoeCkgPj4gU19MUF9DT1VOVCkgJiBNX0xQX0NPVU5UKQotI2RlZmluZSBBX1NHRV9EQkZJRk9fU1RBVFVTIDB4MTBhNAorI2RlZmluZSBIUF9JTlRfVEhSRVNIX1MgICAgMjgKKyNkZWZpbmUgSFBfSU5UX1RIUkVTSF9NICAgIDB4ZlUKKyNkZWZpbmUgSFBfSU5UX1RIUkVTSF9WKHgpICgoeCkgPDwgSFBfSU5UX1RIUkVTSF9TKQogCi0jZGVmaW5lIFNHRV9TVEFUX1RPVEFMIDB4MTBlNAotI2RlZmluZSBTR0VfU1RBVF9NQVRDSCAweDEwZTgKKyNkZWZpbmUgSFBfQ09VTlRfUyAgICAxNgorI2RlZmluZSBIUF9DT1VOVF9NICAgIDB4N2ZmVQorI2RlZmluZSBIUF9DT1VOVF9HKHgpICgoKHgpID4+IEhQX0NPVU5UX1MpICYgSFBfQ09VTlRfTSkKIAotI2RlZmluZSBTR0VfU1RBVF9DRkcgICAweDEwZWMKLSNkZWZpbmUgU19TVEFUU09VUkNFX1Q1ICAgIDkKLSNkZWZpbmUgU1RBVFNPVVJDRV9UNSh4KSAoKHgpIDw8IFNfU1RBVFNPVVJDRV9UNSkKKyNkZWZpbmUgTFBfSU5UX1RIUkVTSF9TICAgIDEyCisjZGVmaW5lIExQX0lOVF9USFJFU0hfTSAgICAweGZVCisjZGVmaW5lIExQX0lOVF9USFJFU0hfVih4KSAoKHgpIDw8IExQX0lOVF9USFJFU0hfUykKIAotI2RlZmluZSBTR0VfREJGSUZPX1NUQVRVUzIgMHgxMTE4Ci0jZGVmaW5lIE1fSFBfQ09VTlRfVDUgICAgMHgzZmZVCi0jZGVmaW5lIEdfSFBfQ09VTlRfVDUoeCkgKCh4KSAgJiBNX0hQX0NPVU5UX1Q1KQotI2RlZmluZSBTX0hQX0lOVF9USFJFU0hfVDUgICAgMTAKLSNkZWZpbmUgTV9IUF9JTlRfVEhSRVNIX1Q1ICAgIDB4ZlUKLSNkZWZpbmUgVl9IUF9JTlRfVEhSRVNIX1Q1KHgpICgoeCkgPDwgU19IUF9JTlRfVEhSRVNIX1Q1KQorI2RlZmluZSBMUF9DT1VOVF9TICAgIDAKKyNkZWZpbmUgTFBfQ09VTlRfTSAgICAweDdmZlUKKyNkZWZpbmUgTFBfQ09VTlRfRyh4KSAoKCh4KSA+PiBMUF9DT1VOVF9TKSAmIExQX0NPVU5UX00pCiAKLSNkZWZpbmUgU19FTkFCTEVfRFJPUCAgICAxMwotI2RlZmluZSBWX0VOQUJMRV9EUk9QKHgpICgoeCkgPDwgU19FTkFCTEVfRFJPUCkKLSNkZWZpbmUgRl9FTkFCTEVfRFJPUCAgICBWX0VOQUJMRV9EUk9QKDFVKQotI2RlZmluZSBTX0RST1BQRURfREIgMAotI2RlZmluZSBWX0RST1BQRURfREIoeCkgKCh4KSA8PCBTX0RST1BQRURfREIpCi0jZGVmaW5lIEZfRFJPUFBFRF9EQiBWX0RST1BQRURfREIoMVUpCi0jZGVmaW5lIEFfU0dFX0RPT1JCRUxMX0NPTlRST0wgMHgxMGE4CisjZGVmaW5lIExQX0lOVF9USFJFU0hfVDVfUyAgICAxOAorI2RlZmluZSBMUF9JTlRfVEhSRVNIX1Q1X00gICAgMHhmZmZVCisjZGVmaW5lIExQX0lOVF9USFJFU0hfVDVfVih4KSAoKHgpIDw8IExQX0lOVF9USFJFU0hfVDVfUykKIAotI2RlZmluZSBBX1NHRV9DVFhUX0NNRCAweDExZmMKLSNkZWZpbmUgQV9TR0VfREJRX0NUWFRfQkFERFIgMHgxMDg0CisjZGVmaW5lIExQX0NPVU5UX1Q1X1MgICAgMAorI2RlZmluZSBMUF9DT1VOVF9UNV9NICAgIDB4M2ZmZmZVCisjZGVmaW5lIExQX0NPVU5UX1Q1X0coeCkgKCgoeCkgPj4gTFBfQ09VTlRfVDVfUykgJiBMUF9DT1VOVF9UNV9NKQogCi0jZGVmaW5lIFBDSUVfUEZfQ0ZHIDB4NDAKLSNkZWZpbmUgIEFJVkVDKHgpCSgoeCkgPDwgNCkKLSNkZWZpbmUgIEFJVkVDX01BU0sJMHgzZmZVCisjZGVmaW5lIFNHRV9ET09SQkVMTF9DT05UUk9MX0EgMHgxMGE4CiAKLSNkZWZpbmUgUENJRV9QRl9DTEkgMHg0NAotI2RlZmluZSBQQ0lFX0lOVF9DQVVTRSAweDMwMDQKLSNkZWZpbmUgIFVOWFNQTENQTEVSUiAgMHgyMDAwMDAwMFUKLSNkZWZpbmUgIFBDSUVQSU5UICAgICAgMHgxMDAwMDAwMFUKLSNkZWZpbmUgIFBDSUVTSU5UICAgICAgMHgwODAwMDAwMFUKLSNkZWZpbmUgIFJQTFBFUlIgICAgICAgMHgwNDAwMDAwMFUKLSNkZWZpbmUgIFJYV1JQRVJSICAgICAgMHgwMjAwMDAwMFUKLSNkZWZpbmUgIFJYQ1BMUEVSUiAgICAgMHgwMTAwMDAwMFUKLSNkZWZpbmUgIFBJT1RBR1BFUlIgICAgMHgwMDgwMDAwMFUKLSNkZWZpbmUgIE1BVEFHUEVSUiAgICAgMHgwMDQwMDAwMFUKLSNkZWZpbmUgIElOVFhDTFJQRVJSICAgMHgwMDIwMDAwMFUKLSNkZWZpbmUgIEZJRFBFUlIgICAgICAgMHgwMDEwMDAwMFUKLSNkZWZpbmUgIENGR1NOUFBFUlIgICAgMHgwMDA4MDAwMFUKLSNkZWZpbmUgIEhSU1BQRVJSICAgICAgMHgwMDA0MDAwMFUKLSNkZWZpbmUgIEhSRVFQRVJSICAgICAgMHgwMDAyMDAwMFUKLSNkZWZpbmUgIEhDTlRQRVJSICAgICAgMHgwMDAxMDAwMFUKLSNkZWZpbmUgIERSU1BQRVJSICAgICAgMHgwMDAwODAwMFUKLSNkZWZpbmUgIERSRVFQRVJSICAgICAgMHgwMDAwNDAwMFUKLSNkZWZpbmUgIERDTlRQRVJSICAgICAgMHgwMDAwMjAwMFUKLSNkZWZpbmUgIENSU1BQRVJSICAgICAgMHgwMDAwMTAwMFUKLSNkZWZpbmUgIENSRVFQRVJSICAgICAgMHgwMDAwMDgwMFUKLSNkZWZpbmUgIENDTlRQRVJSICAgICAgMHgwMDAwMDQwMFUKLSNkZWZpbmUgIFRBUlRBR1BFUlIgICAgMHgwMDAwMDIwMFUKLSNkZWZpbmUgIFBJT1JFUVBFUlIgICAgMHgwMDAwMDEwMFUKLSNkZWZpbmUgIFBJT0NQTFBFUlIgICAgMHgwMDAwMDA4MFUKLSNkZWZpbmUgIE1TSVhESVBFUlIgICAgMHgwMDAwMDA0MFUKLSNkZWZpbmUgIE1TSVhEQVRBUEVSUiAgMHgwMDAwMDAyMFUKLSNkZWZpbmUgIE1TSVhBRERSSFBFUlIgMHgwMDAwMDAxMFUKLSNkZWZpbmUgIE1TSVhBRERSTFBFUlIgMHgwMDAwMDAwOFUKLSNkZWZpbmUgIE1TSURBVEFQRVJSICAgMHgwMDAwMDAwNFUKLSNkZWZpbmUgIE1TSUFERFJIUEVSUiAgMHgwMDAwMDAwMlUKLSNkZWZpbmUgIE1TSUFERFJMUEVSUiAgMHgwMDAwMDAwMVUKKyNkZWZpbmUgU0dFX1NUQVRfVE9UQUxfQQkweDEwZTQKKyNkZWZpbmUgU0dFX1NUQVRfTUFUQ0hfQQkweDEwZTgKKyNkZWZpbmUgU0dFX1NUQVRfQ0ZHX0EJCTB4MTBlYwogCi0jZGVmaW5lICBSRUFEUlNQRVJSICAgICAgMHgyMDAwMDAwMFUKLSNkZWZpbmUgIFRSR1QxR1JQUEVSUiAgICAweDEwMDAwMDAwVQotI2RlZmluZSAgSVBTT1RQRVJSICAgICAgIDB4MDgwMDAwMDBVCi0jZGVmaW5lICBJUFJYREFUQUdSUFBFUlIgMHgwMjAwMDAwMFUKLSNkZWZpbmUgIElQUlhIRFJHUlBQRVJSICAweDAxMDAwMDAwVQotI2RlZmluZSAgTUFHUlBQRVJSICAgICAgIDB4MDA0MDAwMDBVCi0jZGVmaW5lICBWRklEUEVSUiAgICAgICAgMHgwMDIwMDAwMFUKLSNkZWZpbmUgIEhSRVFXUlBFUlIgICAgICAweDAwMDEwMDAwVQotI2RlZmluZSAgRFJFUVdSUEVSUiAgICAgIDB4MDAwMDIwMDBVCi0jZGVmaW5lICBNU1RUQUdRUEVSUiAgICAgMHgwMDAwMDQwMFUKLSNkZWZpbmUgIFBJT1JFUUdSUFBFUlIgICAweDAwMDAwMTAwVQotI2RlZmluZSAgUElPQ1BMR1JQUEVSUiAgIDB4MDAwMDAwODBVCi0jZGVmaW5lICBNU0lYU1RJUEVSUiAgICAgMHgwMDAwMDAwNFUKLSNkZWZpbmUgIE1TVFRJTUVPVVRQRVJSICAweDAwMDAwMDAyVQotI2RlZmluZSAgTVNUR1JQUEVSUiAgICAgIDB4MDAwMDAwMDFVCisjZGVmaW5lIFNUQVRTT1VSQ0VfVDVfUyAgICA5CisjZGVmaW5lIFNUQVRTT1VSQ0VfVDVfVih4KSAoKHgpIDw8IFNUQVRTT1VSQ0VfVDVfUykKIAotI2RlZmluZSBQQ0lFX05PTkZBVF9FUlIgMHgzMDEwCi0jZGVmaW5lIFBDSUVfQ0ZHX1NQQUNFX1JFUSAweDMwNjAKLSNkZWZpbmUgUENJRV9DRkdfU1BBQ0VfREFUQSAweDMwNjQKLSNkZWZpbmUgUENJRV9NRU1fQUNDRVNTX0JBU0VfV0lOIDB4MzA2OAotI2RlZmluZSBTX1BDSUVPRlNUICAgICAgIDEwCi0jZGVmaW5lIE1fUENJRU9GU1QgICAgICAgMHgzZmZmZmZVCi0jZGVmaW5lIEdFVF9QQ0lFT0ZTVCh4KSAgKCgoeCkgPj4gU19QQ0lFT0ZTVCkgJiBNX1BDSUVPRlNUKQotI2RlZmluZSAgUENJRU9GU1RfTUFTSyAgIDB4ZmZmZmZjMDBVCi0jZGVmaW5lICBCSVJfTUFTSyAgICAgICAgMHgwMDAwMDMwMFUKLSNkZWZpbmUgIEJJUl9TSElGVCAgICAgICA4Ci0jZGVmaW5lICBCSVIoeCkgICAgICAgICAgKCh4KSA8PCBCSVJfU0hJRlQpCi0jZGVmaW5lICBXSU5ET1dfTUFTSyAgICAgMHgwMDAwMDBmZlUKLSNkZWZpbmUgIFdJTkRPV19TSElGVCAgICAwCi0jZGVmaW5lICBXSU5ET1coeCkgICAgICAgKCh4KSA8PCBXSU5ET1dfU0hJRlQpCi0jZGVmaW5lICBHRVRfV0lORE9XKHgpCSAoKCh4KSA+PiBXSU5ET1dfU0hJRlQpICYgV0lORE9XX01BU0spCi0jZGVmaW5lIFBDSUVfTUVNX0FDQ0VTU19PRkZTRVQgMHgzMDZjCi0jZGVmaW5lIEVOQUJMRQkoMVUgPDwgMzApCi0jZGVmaW5lIEZVTkNUSU9OKHgpICgoeCkgPDwgMTIpCi0jZGVmaW5lIEZfTE9DQUxDRkcgICAgKDFVIDw8IDI4KQorI2RlZmluZSBTR0VfREJGSUZPX1NUQVRVUzJfQSAweDExMTgKIAotI2RlZmluZSBTX1BGTlVNICAgIDAKLSNkZWZpbmUgVl9QRk5VTSh4KSAoKHgpIDw8IFNfUEZOVU0pCisjZGVmaW5lIEhQX0lOVF9USFJFU0hfVDVfUyAgICAxMAorI2RlZmluZSBIUF9JTlRfVEhSRVNIX1Q1X00gICAgMHhmVQorI2RlZmluZSBIUF9JTlRfVEhSRVNIX1Q1X1YoeCkgKCh4KSA8PCBIUF9JTlRfVEhSRVNIX1Q1X1MpCiAKLSNkZWZpbmUgUENJRV9GVyAweDMwYjgKLSNkZWZpbmUgIFBDSUVfRldfRVJSCQkweDgwMDAwMDAwVQotI2RlZmluZSAgUENJRV9GV19JTklUCQkweDQwMDAwMDAwVQotI2RlZmluZSAgUENJRV9GV19IQUxUCQkweDIwMDAwMDAwVQotI2RlZmluZSAgUENJRV9GV19NQVNURVJfVkxECTB4MDAwMDgwMDBVCi0jZGVmaW5lICBQQ0lFX0ZXX01BU1RFUih4KQkoKHgpIDw8IDEyKQotI2RlZmluZSAgUENJRV9GV19NQVNURVJfTUFTSwkweDcKLSNkZWZpbmUgIFBDSUVfRldfTUFTVEVSX0dFVCh4KQkoKCh4KSA+PiAxMikgJiBQQ0lFX0ZXX01BU1RFUl9NQVNLKQorI2RlZmluZSBIUF9DT1VOVF9UNV9TICAgIDAKKyNkZWZpbmUgSFBfQ09VTlRfVDVfTSAgICAweDNmZlUKKyNkZWZpbmUgSFBfQ09VTlRfVDVfRyh4KSAoKCh4KSA+PiBIUF9DT1VOVF9UNV9TKSAmIEhQX0NPVU5UX1Q1X00pCiAKLSNkZWZpbmUgUENJRV9DT1JFX1VUTF9TWVNURU1fQlVTX0FHRU5UX1NUQVRVUyAweDU5MDgKLSNkZWZpbmUgIFJOUFAgMHg4MDAwMDAwMFUKLSNkZWZpbmUgIFJQQ1AgMHgyMDAwMDAwMFUKLSNkZWZpbmUgIFJDSVAgMHgwODAwMDAwMFUKLSNkZWZpbmUgIFJDQ1AgMHgwNDAwMDAwMFUKLSNkZWZpbmUgIFJGVFAgMHgwMDgwMDAwMFUKLSNkZWZpbmUgIFBUUlAgMHgwMDEwMDAwMFUKKyNkZWZpbmUgRU5BQkxFX0RST1BfUyAgICAxMworI2RlZmluZSBFTkFCTEVfRFJPUF9WKHgpICgoeCkgPDwgRU5BQkxFX0RST1BfUykKKyNkZWZpbmUgRU5BQkxFX0RST1BfRiAgICBFTkFCTEVfRFJPUF9WKDFVKQogCi0jZGVmaW5lIFBDSUVfQ09SRV9VVExfUENJX0VYUFJFU1NfUE9SVF9TVEFUVVMgMHg1OWE0Ci0jZGVmaW5lICBUUENQIDB4NDAwMDAwMDBVCi0jZGVmaW5lICBUTlBQIDB4MjAwMDAwMDBVCi0jZGVmaW5lICBURlRQIDB4MTAwMDAwMDBVCi0jZGVmaW5lICBUQ0FQIDB4MDgwMDAwMDBVCi0jZGVmaW5lICBUQ0lQIDB4MDQwMDAwMDBVCi0jZGVmaW5lICBSQ0FQIDB4MDIwMDAwMDBVCi0jZGVmaW5lICBQTFVQIDB4MDA4MDAwMDBVCi0jZGVmaW5lICBQTEROIDB4MDA0MDAwMDBVCi0jZGVmaW5lICBPVEREIDB4MDAyMDAwMDBVCi0jZGVmaW5lICBHVFJQIDB4MDAxMDAwMDBVCi0jZGVmaW5lICBSRFBFIDB4MDAwNDAwMDBVCi0jZGVmaW5lICBURENFIDB4MDAwMjAwMDBVCi0jZGVmaW5lICBURFVFIDB4MDAwMTAwMDBVCisjZGVmaW5lIERST1BQRURfREJfUyAgICAwCisjZGVmaW5lIERST1BQRURfREJfVih4KSAoKHgpIDw8IERST1BQRURfREJfUykKKyNkZWZpbmUgRFJPUFBFRF9EQl9GICAgIERST1BQRURfREJfVigxVSkKIAotI2RlZmluZSBNQ19JTlRfQ0FVU0UgMHg3NTE4Ci0jZGVmaW5lIE1DX1BfSU5UX0NBVVNFIDB4NDEzMTgKLSNkZWZpbmUgIEVDQ19VRV9JTlRfQ0FVU0UgMHgwMDAwMDAwNFUKLSNkZWZpbmUgIEVDQ19DRV9JTlRfQ0FVU0UgMHgwMDAwMDAwMlUKLSNkZWZpbmUgIFBFUlJfSU5UX0NBVVNFICAgMHgwMDAwMDAwMVUKKyNkZWZpbmUgU0dFX0NUWFRfQ01EX0EgMHgxMWZjCisjZGVmaW5lIFNHRV9EQlFfQ1RYVF9CQUREUl9BIDB4MTA4NAogCi0jZGVmaW5lIE1DX0VDQ19TVEFUVVMgMHg3NTFjCi0jZGVmaW5lIE1DX1BfRUNDX1NUQVRVUyAweDQxMzFjCi0jZGVmaW5lICBFQ0NfQ0VDTlRfTUFTSyAgIDB4ZmZmZjAwMDBVCi0jZGVmaW5lICBFQ0NfQ0VDTlRfU0hJRlQgIDE2Ci0jZGVmaW5lICBFQ0NfQ0VDTlQoeCkgICAgICgoeCkgPDwgRUNDX0NFQ05UX1NISUZUKQotI2RlZmluZSAgRUNDX0NFQ05UX0dFVCh4KSAoKCh4KSAmIEVDQ19DRUNOVF9NQVNLKSA+PiBFQ0NfQ0VDTlRfU0hJRlQpCi0jZGVmaW5lICBFQ0NfVUVDTlRfTUFTSyAgIDB4MDAwMGZmZmZVCi0jZGVmaW5lICBFQ0NfVUVDTlRfU0hJRlQgIDAKLSNkZWZpbmUgIEVDQ19VRUNOVCh4KSAgICAgKCh4KSA8PCBFQ0NfVUVDTlRfU0hJRlQpCi0jZGVmaW5lICBFQ0NfVUVDTlRfR0VUKHgpICgoKHgpICYgRUNDX1VFQ05UX01BU0spID4+IEVDQ19VRUNOVF9TSElGVCkKKy8qIHJlZ2lzdGVycyBmb3IgbW9kdWxlIFBDSUUgKi8KKyNkZWZpbmUgUENJRV9QRl9DRkdfQQkweDQwCiAKLSNkZWZpbmUgTUNfQklTVF9DTUQgMHg3NjAwCi0jZGVmaW5lICBTVEFSVF9CSVNUICAgICAgICAgIDB4ODAwMDAwMDBVCi0jZGVmaW5lICBCSVNUX0NNRF9HQVBfTUFTSyAgIDB4MDAwMGZmMDBVCi0jZGVmaW5lICBCSVNUX0NNRF9HQVBfU0hJRlQgIDgKLSNkZWZpbmUgIEJJU1RfQ01EX0dBUCh4KSAgICAgKCh4KSA8PCBCSVNUX0NNRF9HQVBfU0hJRlQpCi0jZGVmaW5lICBCSVNUX09QQ09ERV9NQVNLICAgIDB4MDAwMDAwMDNVCi0jZGVmaW5lICBCSVNUX09QQ09ERV9TSElGVCAgIDAKLSNkZWZpbmUgIEJJU1RfT1BDT0RFKHgpICAgICAgKCh4KSA8PCBCSVNUX09QQ09ERV9TSElGVCkKKyNkZWZpbmUgQUlWRUNfUyAgICA0CisjZGVmaW5lIEFJVkVDX00gICAgMHgzZmZVCisjZGVmaW5lIEFJVkVDX1YoeCkgKCh4KSA8PCBBSVZFQ19TKQogCi0jZGVmaW5lIE1DX0JJU1RfQ01EX0FERFIgMHg3NjA0Ci0jZGVmaW5lIE1DX0JJU1RfQ01EX0xFTiAweDc2MDgKLSNkZWZpbmUgTUNfQklTVF9EQVRBX1BBVFRFUk4gMHg3NjBjCi0jZGVmaW5lICBCSVNUX0RBVEFfVFlQRV9NQVNLICAgMHgwMDAwMDAwZlUKLSNkZWZpbmUgIEJJU1RfREFUQV9UWVBFX1NISUZUICAwCi0jZGVmaW5lICBCSVNUX0RBVEFfVFlQRSh4KSAgICAgKCh4KSA8PCBCSVNUX0RBVEFfVFlQRV9TSElGVCkKKyNkZWZpbmUgUENJRV9QRl9DTElfQQkweDQ0CisjZGVmaW5lIFBDSUVfSU5UX0NBVVNFX0EJMHgzMDA0CiAKLSNkZWZpbmUgTUNfQklTVF9TVEFUVVNfUkRBVEEgMHg3Njg4CisjZGVmaW5lIFVOWFNQTENQTEVSUl9TICAgIDI5CisjZGVmaW5lIFVOWFNQTENQTEVSUl9WKHgpICgoeCkgPDwgVU5YU1BMQ1BMRVJSX1MpCisjZGVmaW5lIFVOWFNQTENQTEVSUl9GICAgIFVOWFNQTENQTEVSUl9WKDFVKQogCisjZGVmaW5lIFBDSUVQSU5UX1MgICAgMjgKKyNkZWZpbmUgUENJRVBJTlRfVih4KSAoKHgpIDw8IFBDSUVQSU5UX1MpCisjZGVmaW5lIFBDSUVQSU5UX0YgICAgUENJRVBJTlRfVigxVSkKKworI2RlZmluZSBQQ0lFU0lOVF9TICAgIDI3CisjZGVmaW5lIFBDSUVTSU5UX1YoeCkgKCh4KSA8PCBQQ0lFU0lOVF9TKQorI2RlZmluZSBQQ0lFU0lOVF9GICAgIFBDSUVTSU5UX1YoMVUpCisKKyNkZWZpbmUgUlBMUEVSUl9TICAgIDI2CisjZGVmaW5lIFJQTFBFUlJfVih4KSAoKHgpIDw8IFJQTFBFUlJfUykKKyNkZWZpbmUgUlBMUEVSUl9GICAgIFJQTFBFUlJfVigxVSkKKworI2RlZmluZSBSWFdSUEVSUl9TICAgIDI1CisjZGVmaW5lIFJYV1JQRVJSX1YoeCkgKCh4KSA8PCBSWFdSUEVSUl9TKQorI2RlZmluZSBSWFdSUEVSUl9GICAgIFJYV1JQRVJSX1YoMVUpCisKKyNkZWZpbmUgUlhDUExQRVJSX1MgICAgMjQKKyNkZWZpbmUgUlhDUExQRVJSX1YoeCkgKCh4KSA8PCBSWENQTFBFUlJfUykKKyNkZWZpbmUgUlhDUExQRVJSX0YgICAgUlhDUExQRVJSX1YoMVUpCisKKyNkZWZpbmUgUElPVEFHUEVSUl9TICAgIDIzCisjZGVmaW5lIFBJT1RBR1BFUlJfVih4KSAoKHgpIDw8IFBJT1RBR1BFUlJfUykKKyNkZWZpbmUgUElPVEFHUEVSUl9GICAgIFBJT1RBR1BFUlJfVigxVSkKKworI2RlZmluZSBNQVRBR1BFUlJfUyAgICAyMgorI2RlZmluZSBNQVRBR1BFUlJfVih4KSAoKHgpIDw8IE1BVEFHUEVSUl9TKQorI2RlZmluZSBNQVRBR1BFUlJfRiAgICBNQVRBR1BFUlJfVigxVSkKKworI2RlZmluZSBJTlRYQ0xSUEVSUl9TICAgIDIxCisjZGVmaW5lIElOVFhDTFJQRVJSX1YoeCkgKCh4KSA8PCBJTlRYQ0xSUEVSUl9TKQorI2RlZmluZSBJTlRYQ0xSUEVSUl9GICAgIElOVFhDTFJQRVJSX1YoMVUpCisKKyNkZWZpbmUgRklEUEVSUl9TICAgIDIwCisjZGVmaW5lIEZJRFBFUlJfVih4KSAoKHgpIDw8IEZJRFBFUlJfUykKKyNkZWZpbmUgRklEUEVSUl9GICAgIEZJRFBFUlJfVigxVSkKKworI2RlZmluZSBDRkdTTlBQRVJSX1MgICAgMTkKKyNkZWZpbmUgQ0ZHU05QUEVSUl9WKHgpICgoeCkgPDwgQ0ZHU05QUEVSUl9TKQorI2RlZmluZSBDRkdTTlBQRVJSX0YgICAgQ0ZHU05QUEVSUl9WKDFVKQorCisjZGVmaW5lIEhSU1BQRVJSX1MgICAgMTgKKyNkZWZpbmUgSFJTUFBFUlJfVih4KSAoKHgpIDw8IEhSU1BQRVJSX1MpCisjZGVmaW5lIEhSU1BQRVJSX0YgICAgSFJTUFBFUlJfVigxVSkKKworI2RlZmluZSBIUkVRUEVSUl9TICAgIDE3CisjZGVmaW5lIEhSRVFQRVJSX1YoeCkgKCh4KSA8PCBIUkVRUEVSUl9TKQorI2RlZmluZSBIUkVRUEVSUl9GICAgIEhSRVFQRVJSX1YoMVUpCisKKyNkZWZpbmUgSENOVFBFUlJfUyAgICAxNgorI2RlZmluZSBIQ05UUEVSUl9WKHgpICgoeCkgPDwgSENOVFBFUlJfUykKKyNkZWZpbmUgSENOVFBFUlJfRiAgICBIQ05UUEVSUl9WKDFVKQorCisjZGVmaW5lIERSU1BQRVJSX1MgICAgMTUKKyNkZWZpbmUgRFJTUFBFUlJfVih4KSAoKHgpIDw8IERSU1BQRVJSX1MpCisjZGVmaW5lIERSU1BQRVJSX0YgICAgRFJTUFBFUlJfVigxVSkKKworI2RlZmluZSBEUkVRUEVSUl9TICAgIDE0CisjZGVmaW5lIERSRVFQRVJSX1YoeCkgKCh4KSA8PCBEUkVRUEVSUl9TKQorI2RlZmluZSBEUkVRUEVSUl9GICAgIERSRVFQRVJSX1YoMVUpCisKKyNkZWZpbmUgRENOVFBFUlJfUyAgICAxMworI2RlZmluZSBEQ05UUEVSUl9WKHgpICgoeCkgPDwgRENOVFBFUlJfUykKKyNkZWZpbmUgRENOVFBFUlJfRiAgICBEQ05UUEVSUl9WKDFVKQorCisjZGVmaW5lIENSU1BQRVJSX1MgICAgMTIKKyNkZWZpbmUgQ1JTUFBFUlJfVih4KSAoKHgpIDw8IENSU1BQRVJSX1MpCisjZGVmaW5lIENSU1BQRVJSX0YgICAgQ1JTUFBFUlJfVigxVSkKKworI2RlZmluZSBDUkVRUEVSUl9TICAgIDExCisjZGVmaW5lIENSRVFQRVJSX1YoeCkgKCh4KSA8PCBDUkVRUEVSUl9TKQorI2RlZmluZSBDUkVRUEVSUl9GICAgIENSRVFQRVJSX1YoMVUpCisKKyNkZWZpbmUgQ0NOVFBFUlJfUyAgICAxMAorI2RlZmluZSBDQ05UUEVSUl9WKHgpICgoeCkgPDwgQ0NOVFBFUlJfUykKKyNkZWZpbmUgQ0NOVFBFUlJfRiAgICBDQ05UUEVSUl9WKDFVKQorCisjZGVmaW5lIFRBUlRBR1BFUlJfUyAgICA5CisjZGVmaW5lIFRBUlRBR1BFUlJfVih4KSAoKHgpIDw8IFRBUlRBR1BFUlJfUykKKyNkZWZpbmUgVEFSVEFHUEVSUl9GICAgIFRBUlRBR1BFUlJfVigxVSkKKworI2RlZmluZSBQSU9SRVFQRVJSX1MgICAgOAorI2RlZmluZSBQSU9SRVFQRVJSX1YoeCkgKCh4KSA8PCBQSU9SRVFQRVJSX1MpCisjZGVmaW5lIFBJT1JFUVBFUlJfRiAgICBQSU9SRVFQRVJSX1YoMVUpCisKKyNkZWZpbmUgUElPQ1BMUEVSUl9TICAgIDcKKyNkZWZpbmUgUElPQ1BMUEVSUl9WKHgpICgoeCkgPDwgUElPQ1BMUEVSUl9TKQorI2RlZmluZSBQSU9DUExQRVJSX0YgICAgUElPQ1BMUEVSUl9WKDFVKQorCisjZGVmaW5lIE1TSVhESVBFUlJfUyAgICA2CisjZGVmaW5lIE1TSVhESVBFUlJfVih4KSAoKHgpIDw8IE1TSVhESVBFUlJfUykKKyNkZWZpbmUgTVNJWERJUEVSUl9GICAgIE1TSVhESVBFUlJfVigxVSkKKworI2RlZmluZSBNU0lYREFUQVBFUlJfUyAgICA1CisjZGVmaW5lIE1TSVhEQVRBUEVSUl9WKHgpICgoeCkgPDwgTVNJWERBVEFQRVJSX1MpCisjZGVmaW5lIE1TSVhEQVRBUEVSUl9GICAgIE1TSVhEQVRBUEVSUl9WKDFVKQorCisjZGVmaW5lIE1TSVhBRERSSFBFUlJfUyAgICA0CisjZGVmaW5lIE1TSVhBRERSSFBFUlJfVih4KSAoKHgpIDw8IE1TSVhBRERSSFBFUlJfUykKKyNkZWZpbmUgTVNJWEFERFJIUEVSUl9GICAgIE1TSVhBRERSSFBFUlJfVigxVSkKKworI2RlZmluZSBNU0lYQUREUkxQRVJSX1MgICAgMworI2RlZmluZSBNU0lYQUREUkxQRVJSX1YoeCkgKCh4KSA8PCBNU0lYQUREUkxQRVJSX1MpCisjZGVmaW5lIE1TSVhBRERSTFBFUlJfRiAgICBNU0lYQUREUkxQRVJSX1YoMVUpCisKKyNkZWZpbmUgTVNJREFUQVBFUlJfUyAgICAyCisjZGVmaW5lIE1TSURBVEFQRVJSX1YoeCkgKCh4KSA8PCBNU0lEQVRBUEVSUl9TKQorI2RlZmluZSBNU0lEQVRBUEVSUl9GICAgIE1TSURBVEFQRVJSX1YoMVUpCisKKyNkZWZpbmUgTVNJQUREUkhQRVJSX1MgICAgMQorI2RlZmluZSBNU0lBRERSSFBFUlJfVih4KSAoKHgpIDw8IE1TSUFERFJIUEVSUl9TKQorI2RlZmluZSBNU0lBRERSSFBFUlJfRiAgICBNU0lBRERSSFBFUlJfVigxVSkKKworI2RlZmluZSBNU0lBRERSTFBFUlJfUyAgICAwCisjZGVmaW5lIE1TSUFERFJMUEVSUl9WKHgpICgoeCkgPDwgTVNJQUREUkxQRVJSX1MpCisjZGVmaW5lIE1TSUFERFJMUEVSUl9GICAgIE1TSUFERFJMUEVSUl9WKDFVKQorCisjZGVmaW5lIFJFQURSU1BFUlJfUyAgICAyOQorI2RlZmluZSBSRUFEUlNQRVJSX1YoeCkgKCh4KSA8PCBSRUFEUlNQRVJSX1MpCisjZGVmaW5lIFJFQURSU1BFUlJfRiAgICBSRUFEUlNQRVJSX1YoMVUpCisKKyNkZWZpbmUgVFJHVDFHUlBQRVJSX1MgICAgMjgKKyNkZWZpbmUgVFJHVDFHUlBQRVJSX1YoeCkgKCh4KSA8PCBUUkdUMUdSUFBFUlJfUykKKyNkZWZpbmUgVFJHVDFHUlBQRVJSX0YgICAgVFJHVDFHUlBQRVJSX1YoMVUpCisKKyNkZWZpbmUgSVBTT1RQRVJSX1MgICAgMjcKKyNkZWZpbmUgSVBTT1RQRVJSX1YoeCkgKCh4KSA8PCBJUFNPVFBFUlJfUykKKyNkZWZpbmUgSVBTT1RQRVJSX0YgICAgSVBTT1RQRVJSX1YoMVUpCisKKyNkZWZpbmUgSVBSRVRSWVBFUlJfUyAgICAyNgorI2RlZmluZSBJUFJFVFJZUEVSUl9WKHgpICgoeCkgPDwgSVBSRVRSWVBFUlJfUykKKyNkZWZpbmUgSVBSRVRSWVBFUlJfRiAgICBJUFJFVFJZUEVSUl9WKDFVKQorCisjZGVmaW5lIElQUlhEQVRBR1JQUEVSUl9TICAgIDI1CisjZGVmaW5lIElQUlhEQVRBR1JQUEVSUl9WKHgpICgoeCkgPDwgSVBSWERBVEFHUlBQRVJSX1MpCisjZGVmaW5lIElQUlhEQVRBR1JQUEVSUl9GICAgIElQUlhEQVRBR1JQUEVSUl9WKDFVKQorCisjZGVmaW5lIElQUlhIRFJHUlBQRVJSX1MgICAgMjQKKyNkZWZpbmUgSVBSWEhEUkdSUFBFUlJfVih4KSAoKHgpIDw8IElQUlhIRFJHUlBQRVJSX1MpCisjZGVmaW5lIElQUlhIRFJHUlBQRVJSX0YgICAgSVBSWEhEUkdSUFBFUlJfVigxVSkKKworI2RlZmluZSBNQUdSUFBFUlJfUyAgICAyMgorI2RlZmluZSBNQUdSUFBFUlJfVih4KSAoKHgpIDw8IE1BR1JQUEVSUl9TKQorI2RlZmluZSBNQUdSUFBFUlJfRiAgICBNQUdSUFBFUlJfVigxVSkKKworI2RlZmluZSBWRklEUEVSUl9TICAgIDIxCisjZGVmaW5lIFZGSURQRVJSX1YoeCkgKCh4KSA8PCBWRklEUEVSUl9TKQorI2RlZmluZSBWRklEUEVSUl9GICAgIFZGSURQRVJSX1YoMVUpCisKKyNkZWZpbmUgSFJFUVdSUEVSUl9TICAgIDE2CisjZGVmaW5lIEhSRVFXUlBFUlJfVih4KSAoKHgpIDw8IEhSRVFXUlBFUlJfUykKKyNkZWZpbmUgSFJFUVdSUEVSUl9GICAgIEhSRVFXUlBFUlJfVigxVSkKKworI2RlZmluZSBEUkVRV1JQRVJSX1MgICAgMTMKKyNkZWZpbmUgRFJFUVdSUEVSUl9WKHgpICgoeCkgPDwgRFJFUVdSUEVSUl9TKQorI2RlZmluZSBEUkVRV1JQRVJSX0YgICAgRFJFUVdSUEVSUl9WKDFVKQorCisjZGVmaW5lIENSRVFSRFBFUlJfUyAgICAxMQorI2RlZmluZSBDUkVRUkRQRVJSX1YoeCkgKCh4KSA8PCBDUkVRUkRQRVJSX1MpCisjZGVmaW5lIENSRVFSRFBFUlJfRiAgICBDUkVRUkRQRVJSX1YoMVUpCisKKyNkZWZpbmUgTVNUVEFHUVBFUlJfUyAgICAxMAorI2RlZmluZSBNU1RUQUdRUEVSUl9WKHgpICgoeCkgPDwgTVNUVEFHUVBFUlJfUykKKyNkZWZpbmUgTVNUVEFHUVBFUlJfRiAgICBNU1RUQUdRUEVSUl9WKDFVKQorCisjZGVmaW5lIFBJT1JFUUdSUFBFUlJfUyAgICA4CisjZGVmaW5lIFBJT1JFUUdSUFBFUlJfVih4KSAoKHgpIDw8IFBJT1JFUUdSUFBFUlJfUykKKyNkZWZpbmUgUElPUkVRR1JQUEVSUl9GICAgIFBJT1JFUUdSUFBFUlJfVigxVSkKKworI2RlZmluZSBQSU9DUExHUlBQRVJSX1MgICAgNworI2RlZmluZSBQSU9DUExHUlBQRVJSX1YoeCkgKCh4KSA8PCBQSU9DUExHUlBQRVJSX1MpCisjZGVmaW5lIFBJT0NQTEdSUFBFUlJfRiAgICBQSU9DUExHUlBQRVJSX1YoMVUpCisKKyNkZWZpbmUgTVNJWFNUSVBFUlJfUyAgICAyCisjZGVmaW5lIE1TSVhTVElQRVJSX1YoeCkgKCh4KSA8PCBNU0lYU1RJUEVSUl9TKQorI2RlZmluZSBNU0lYU1RJUEVSUl9GICAgIE1TSVhTVElQRVJSX1YoMVUpCisKKyNkZWZpbmUgTVNUVElNRU9VVFBFUlJfUyAgICAxCisjZGVmaW5lIE1TVFRJTUVPVVRQRVJSX1YoeCkgKCh4KSA8PCBNU1RUSU1FT1VUUEVSUl9TKQorI2RlZmluZSBNU1RUSU1FT1VUUEVSUl9GICAgIE1TVFRJTUVPVVRQRVJSX1YoMVUpCisKKyNkZWZpbmUgTVNUR1JQUEVSUl9TICAgIDAKKyNkZWZpbmUgTVNUR1JQUEVSUl9WKHgpICgoeCkgPDwgTVNUR1JQUEVSUl9TKQorI2RlZmluZSBNU1RHUlBQRVJSX0YgICAgTVNUR1JQUEVSUl9WKDFVKQorCisjZGVmaW5lIFBDSUVfTk9ORkFUX0VSUl9BCTB4MzAxMAorI2RlZmluZSBQQ0lFX0NGR19TUEFDRV9SRVFfQQkweDMwNjAKKyNkZWZpbmUgUENJRV9DRkdfU1BBQ0VfREFUQV9BCTB4MzA2NAorI2RlZmluZSBQQ0lFX01FTV9BQ0NFU1NfQkFTRV9XSU5fQSAweDMwNjgKKworI2RlZmluZSBQQ0lFT0ZTVF9TICAgIDEwCisjZGVmaW5lIFBDSUVPRlNUX00gICAgMHgzZmZmZmZVCisjZGVmaW5lIFBDSUVPRlNUX0coeCkgKCgoeCkgPj4gUENJRU9GU1RfUykgJiBQQ0lFT0ZTVF9NKQorCisjZGVmaW5lIEJJUl9TICAgIDgKKyNkZWZpbmUgQklSX00gICAgMHgzVQorI2RlZmluZSBCSVJfVih4KSAoKHgpIDw8IEJJUl9TKQorI2RlZmluZSBCSVJfRyh4KSAoKCh4KSA+PiBCSVJfUykgJiBCSVJfTSkKKworI2RlZmluZSBXSU5ET1dfUyAgICAwCisjZGVmaW5lIFdJTkRPV19NICAgIDB4ZmZVCisjZGVmaW5lIFdJTkRPV19WKHgpICgoeCkgPDwgV0lORE9XX1MpCisjZGVmaW5lIFdJTkRPV19HKHgpICgoKHgpID4+IFdJTkRPV19TKSAmIFdJTkRPV19NKQorCisjZGVmaW5lIFBDSUVfTUVNX0FDQ0VTU19PRkZTRVRfQSAweDMwNmMKKworI2RlZmluZSBFTkFCTEVfUyAgICAzMAorI2RlZmluZSBFTkFCTEVfVih4KSAoKHgpIDw8IEVOQUJMRV9TKQorI2RlZmluZSBFTkFCTEVfRiAgICBFTkFCTEVfVigxVSkKKworI2RlZmluZSBMT0NBTENGR19TICAgIDI4CisjZGVmaW5lIExPQ0FMQ0ZHX1YoeCkgKCh4KSA8PCBMT0NBTENGR19TKQorI2RlZmluZSBMT0NBTENGR19GICAgIExPQ0FMQ0ZHX1YoMVUpCisKKyNkZWZpbmUgRlVOQ1RJT05fUyAgICAxMgorI2RlZmluZSBGVU5DVElPTl9WKHgpICgoeCkgPDwgRlVOQ1RJT05fUykKKworI2RlZmluZSBSRUdJU1RFUl9TICAgIDAKKyNkZWZpbmUgUkVHSVNURVJfVih4KSAoKHgpIDw8IFJFR0lTVEVSX1MpCisKKyNkZWZpbmUgUEZOVU1fUyAgICAwCisjZGVmaW5lIFBGTlVNX1YoeCkgKCh4KSA8PCBQRk5VTV9TKQorCisjZGVmaW5lIFBDSUVfRldfQSAweDMwYjgKKworI2RlZmluZSBQQ0lFX0NPUkVfVVRMX1NZU1RFTV9CVVNfQUdFTlRfU1RBVFVTX0EgMHg1OTA4CisKKyNkZWZpbmUgUk5QUF9TICAgIDMxCisjZGVmaW5lIFJOUFBfVih4KSAoKHgpIDw8IFJOUFBfUykKKyNkZWZpbmUgUk5QUF9GICAgIFJOUFBfVigxVSkKKworI2RlZmluZSBSUENQX1MgICAgMjkKKyNkZWZpbmUgUlBDUF9WKHgpICgoeCkgPDwgUlBDUF9TKQorI2RlZmluZSBSUENQX0YgICAgUlBDUF9WKDFVKQorCisjZGVmaW5lIFJDSVBfUyAgICAyNworI2RlZmluZSBSQ0lQX1YoeCkgKCh4KSA8PCBSQ0lQX1MpCisjZGVmaW5lIFJDSVBfRiAgICBSQ0lQX1YoMVUpCisKKyNkZWZpbmUgUkNDUF9TICAgIDI2CisjZGVmaW5lIFJDQ1BfVih4KSAoKHgpIDw8IFJDQ1BfUykKKyNkZWZpbmUgUkNDUF9GICAgIFJDQ1BfVigxVSkKKworI2RlZmluZSBSRlRQX1MgICAgMjMKKyNkZWZpbmUgUkZUUF9WKHgpICgoeCkgPDwgUkZUUF9TKQorI2RlZmluZSBSRlRQX0YgICAgUkZUUF9WKDFVKQorCisjZGVmaW5lIFBUUlBfUyAgICAyMAorI2RlZmluZSBQVFJQX1YoeCkgKCh4KSA8PCBQVFJQX1MpCisjZGVmaW5lIFBUUlBfRiAgICBQVFJQX1YoMVUpCisKKyNkZWZpbmUgUENJRV9DT1JFX1VUTF9QQ0lfRVhQUkVTU19QT1JUX1NUQVRVU19BIDB4NTlhNAorCisjZGVmaW5lIFRQQ1BfUyAgICAzMAorI2RlZmluZSBUUENQX1YoeCkgKCh4KSA8PCBUUENQX1MpCisjZGVmaW5lIFRQQ1BfRiAgICBUUENQX1YoMVUpCisKKyNkZWZpbmUgVE5QUF9TICAgIDI5CisjZGVmaW5lIFROUFBfVih4KSAoKHgpIDw8IFROUFBfUykKKyNkZWZpbmUgVE5QUF9GICAgIFROUFBfVigxVSkKKworI2RlZmluZSBURlRQX1MgICAgMjgKKyNkZWZpbmUgVEZUUF9WKHgpICgoeCkgPDwgVEZUUF9TKQorI2RlZmluZSBURlRQX0YgICAgVEZUUF9WKDFVKQorCisjZGVmaW5lIFRDQVBfUyAgICAyNworI2RlZmluZSBUQ0FQX1YoeCkgKCh4KSA8PCBUQ0FQX1MpCisjZGVmaW5lIFRDQVBfRiAgICBUQ0FQX1YoMVUpCisKKyNkZWZpbmUgVENJUF9TICAgIDI2CisjZGVmaW5lIFRDSVBfVih4KSAoKHgpIDw8IFRDSVBfUykKKyNkZWZpbmUgVENJUF9GICAgIFRDSVBfVigxVSkKKworI2RlZmluZSBSQ0FQX1MgICAgMjUKKyNkZWZpbmUgUkNBUF9WKHgpICgoeCkgPDwgUkNBUF9TKQorI2RlZmluZSBSQ0FQX0YgICAgUkNBUF9WKDFVKQorCisjZGVmaW5lIFBMVVBfUyAgICAyMworI2RlZmluZSBQTFVQX1YoeCkgKCh4KSA8PCBQTFVQX1MpCisjZGVmaW5lIFBMVVBfRiAgICBQTFVQX1YoMVUpCisKKyNkZWZpbmUgUExETl9TICAgIDIyCisjZGVmaW5lIFBMRE5fVih4KSAoKHgpIDw8IFBMRE5fUykKKyNkZWZpbmUgUExETl9GICAgIFBMRE5fVigxVSkKKworI2RlZmluZSBPVEREX1MgICAgMjEKKyNkZWZpbmUgT1RERF9WKHgpICgoeCkgPDwgT1RERF9TKQorI2RlZmluZSBPVEREX0YgICAgT1RERF9WKDFVKQorCisjZGVmaW5lIEdUUlBfUyAgICAyMAorI2RlZmluZSBHVFJQX1YoeCkgKCh4KSA8PCBHVFJQX1MpCisjZGVmaW5lIEdUUlBfRiAgICBHVFJQX1YoMVUpCisKKyNkZWZpbmUgUkRQRV9TICAgIDE4CisjZGVmaW5lIFJEUEVfVih4KSAoKHgpIDw8IFJEUEVfUykKKyNkZWZpbmUgUkRQRV9GICAgIFJEUEVfVigxVSkKKworI2RlZmluZSBURENFX1MgICAgMTcKKyNkZWZpbmUgVERDRV9WKHgpICgoeCkgPDwgVERDRV9TKQorI2RlZmluZSBURENFX0YgICAgVERDRV9WKDFVKQorCisjZGVmaW5lIFREVUVfUyAgICAxNgorI2RlZmluZSBURFVFX1YoeCkgKCh4KSA8PCBURFVFX1MpCisjZGVmaW5lIFREVUVfRiAgICBURFVFX1YoMVUpCisKKy8qIHJlZ2lzdGVycyBmb3IgbW9kdWxlIE1DICovCisjZGVmaW5lIE1DX0lOVF9DQVVTRV9BCQkweDc1MTgKKyNkZWZpbmUgTUNfUF9JTlRfQ0FVU0VfQQkweDQxMzE4CisKKyNkZWZpbmUgRUNDX1VFX0lOVF9DQVVTRV9TICAgIDIKKyNkZWZpbmUgRUNDX1VFX0lOVF9DQVVTRV9WKHgpICgoeCkgPDwgRUNDX1VFX0lOVF9DQVVTRV9TKQorI2RlZmluZSBFQ0NfVUVfSU5UX0NBVVNFX0YgICAgRUNDX1VFX0lOVF9DQVVTRV9WKDFVKQorCisjZGVmaW5lIEVDQ19DRV9JTlRfQ0FVU0VfUyAgICAxCisjZGVmaW5lIEVDQ19DRV9JTlRfQ0FVU0VfVih4KSAoKHgpIDw8IEVDQ19DRV9JTlRfQ0FVU0VfUykKKyNkZWZpbmUgRUNDX0NFX0lOVF9DQVVTRV9GICAgIEVDQ19DRV9JTlRfQ0FVU0VfVigxVSkKKworI2RlZmluZSBQRVJSX0lOVF9DQVVTRV9TICAgIDAKKyNkZWZpbmUgUEVSUl9JTlRfQ0FVU0VfVih4KSAoKHgpIDw8IFBFUlJfSU5UX0NBVVNFX1MpCisjZGVmaW5lIFBFUlJfSU5UX0NBVVNFX0YgICAgUEVSUl9JTlRfQ0FVU0VfVigxVSkKKworI2RlZmluZSBNQ19FQ0NfU1RBVFVTX0EJCTB4NzUxYworI2RlZmluZSBNQ19QX0VDQ19TVEFUVVNfQQkweDQxMzFjCisKKyNkZWZpbmUgRUNDX0NFQ05UX1MgICAgMTYKKyNkZWZpbmUgRUNDX0NFQ05UX00gICAgMHhmZmZmVQorI2RlZmluZSBFQ0NfQ0VDTlRfVih4KSAoKHgpIDw8IEVDQ19DRUNOVF9TKQorI2RlZmluZSBFQ0NfQ0VDTlRfRyh4KSAoKCh4KSA+PiBFQ0NfQ0VDTlRfUykgJiBFQ0NfQ0VDTlRfTSkKKworI2RlZmluZSBFQ0NfVUVDTlRfUyAgICAwCisjZGVmaW5lIEVDQ19VRUNOVF9NICAgIDB4ZmZmZlUKKyNkZWZpbmUgRUNDX1VFQ05UX1YoeCkgKCh4KSA8PCBFQ0NfVUVDTlRfUykKKyNkZWZpbmUgRUNDX1VFQ05UX0coeCkgKCgoeCkgPj4gRUNDX1VFQ05UX1MpICYgRUNDX1VFQ05UX00pCisKKyNkZWZpbmUgTUNfQklTVF9DTURfQSAweDc2MDAKKworI2RlZmluZSBTVEFSVF9CSVNUX1MgICAgMzEKKyNkZWZpbmUgU1RBUlRfQklTVF9WKHgpICgoeCkgPDwgU1RBUlRfQklTVF9TKQorI2RlZmluZSBTVEFSVF9CSVNUX0YgICAgU1RBUlRfQklTVF9WKDFVKQorCisjZGVmaW5lIEJJU1RfQ01EX0dBUF9TICAgIDgKKyNkZWZpbmUgQklTVF9DTURfR0FQX1YoeCkgKCh4KSA8PCBCSVNUX0NNRF9HQVBfUykKKworI2RlZmluZSBCSVNUX09QQ09ERV9TICAgIDAKKyNkZWZpbmUgQklTVF9PUENPREVfVih4KSAoKHgpIDw8IEJJU1RfT1BDT0RFX1MpCisKKyNkZWZpbmUgTUNfQklTVF9DTURfQUREUl9BIDB4NzYwNAorI2RlZmluZSBNQ19CSVNUX0NNRF9MRU5fQSAweDc2MDgKKyNkZWZpbmUgTUNfQklTVF9EQVRBX1BBVFRFUk5fQSAweDc2MGMKKworI2RlZmluZSBNQ19CSVNUX1NUQVRVU19SREFUQV9BIDB4NzY4OAorCisvKiByZWdpc3RlcnMgZm9yIG1vZHVsZSBNQSAqLwogI2RlZmluZSBNQV9FRFJBTTBfQkFSX0EgMHg3N2MwCiAKICNkZWZpbmUgRURSQU0wX1NJWkVfUyAgICAwCkBAIC01NzQsMjYzICs4OTMsNjA4IEBACiAjZGVmaW5lIEVYVF9NRU0wX0VOQUJMRV9WKHgpICgoeCkgPDwgRVhUX01FTTBfRU5BQkxFX1MpCiAjZGVmaW5lIEVYVF9NRU0wX0VOQUJMRV9GICAgIEVYVF9NRU0wX0VOQUJMRV9WKDFVKQogCi0jZGVmaW5lIE1BX0lOVF9DQVVTRSAweDc3ZTAKLSNkZWZpbmUgIE1FTV9QRVJSX0lOVF9DQVVTRSAweDAwMDAwMDAyVQotI2RlZmluZSAgTUVNX1dSQVBfSU5UX0NBVVNFIDB4MDAwMDAwMDFVCisjZGVmaW5lIE1BX0lOVF9DQVVTRV9BCTB4NzdlMAogCi0jZGVmaW5lIE1BX0lOVF9XUkFQX1NUQVRVUyAweDc3ZTQKLSNkZWZpbmUgIE1FTV9XUkFQX0FERFJFU1NfTUFTSyAgIDB4ZmZmZmZmZjBVCi0jZGVmaW5lICBNRU1fV1JBUF9BRERSRVNTX1NISUZUICA0Ci0jZGVmaW5lICBNRU1fV1JBUF9BRERSRVNTX0dFVCh4KSAoKCh4KSAmIE1FTV9XUkFQX0FERFJFU1NfTUFTSykgPj4gTUVNX1dSQVBfQUREUkVTU19TSElGVCkKLSNkZWZpbmUgIE1FTV9XUkFQX0NMSUVOVF9OVU1fTUFTSyAgIDB4MDAwMDAwMGZVCi0jZGVmaW5lICBNRU1fV1JBUF9DTElFTlRfTlVNX1NISUZUICAwCi0jZGVmaW5lICBNRU1fV1JBUF9DTElFTlRfTlVNX0dFVCh4KSAoKCh4KSAmIE1FTV9XUkFQX0NMSUVOVF9OVU1fTUFTSykgPj4gTUVNX1dSQVBfQ0xJRU5UX05VTV9TSElGVCkKLSNkZWZpbmUgTUFfUENJRV9GVyAweDMwYjgKLSNkZWZpbmUgTUFfUEFSSVRZX0VSUk9SX1NUQVRVUyAweDc3ZjQKLSNkZWZpbmUgTUFfUEFSSVRZX0VSUk9SX1NUQVRVUzIgMHg3ODA0CisjZGVmaW5lIE1FTV9QRVJSX0lOVF9DQVVTRV9TICAgIDEKKyNkZWZpbmUgTUVNX1BFUlJfSU5UX0NBVVNFX1YoeCkgKCh4KSA8PCBNRU1fUEVSUl9JTlRfQ0FVU0VfUykKKyNkZWZpbmUgTUVNX1BFUlJfSU5UX0NBVVNFX0YgICAgTUVNX1BFUlJfSU5UX0NBVVNFX1YoMVUpCiAKLSNkZWZpbmUgRURDXzBfQkFTRV9BRERSIDB4NzkwMAorI2RlZmluZSBNRU1fV1JBUF9JTlRfQ0FVU0VfUyAgICAwCisjZGVmaW5lIE1FTV9XUkFQX0lOVF9DQVVTRV9WKHgpICgoeCkgPDwgTUVNX1dSQVBfSU5UX0NBVVNFX1MpCisjZGVmaW5lIE1FTV9XUkFQX0lOVF9DQVVTRV9GICAgIE1FTV9XUkFQX0lOVF9DQVVTRV9WKDFVKQogCi0jZGVmaW5lIEVEQ19CSVNUX0NNRCAweDc5MDQKLSNkZWZpbmUgRURDX0JJU1RfQ01EX0FERFIgMHg3OTA4Ci0jZGVmaW5lIEVEQ19CSVNUX0NNRF9MRU4gMHg3OTBjCi0jZGVmaW5lIEVEQ19CSVNUX0RBVEFfUEFUVEVSTiAweDc5MTAKLSNkZWZpbmUgRURDX0JJU1RfU1RBVFVTX1JEQVRBIDB4NzkyOAotI2RlZmluZSBFRENfSU5UX0NBVVNFIDB4Nzk3OAotI2RlZmluZSAgRUNDX1VFX1BBUiAgICAgMHgwMDAwMDAyMFUKLSNkZWZpbmUgIEVDQ19DRV9QQVIgICAgIDB4MDAwMDAwMTBVCi0jZGVmaW5lICBQRVJSX1BBUl9DQVVTRSAweDAwMDAwMDA4VQorI2RlZmluZSBNQV9JTlRfV1JBUF9TVEFUVVNfQQkweDc3ZTQKIAotI2RlZmluZSBFRENfRUNDX1NUQVRVUyAweDc5N2MKKyNkZWZpbmUgTUVNX1dSQVBfQUREUkVTU19TICAgIDQKKyNkZWZpbmUgTUVNX1dSQVBfQUREUkVTU19NICAgIDB4ZmZmZmZmZlUKKyNkZWZpbmUgTUVNX1dSQVBfQUREUkVTU19HKHgpICgoKHgpID4+IE1FTV9XUkFQX0FERFJFU1NfUykgJiBNRU1fV1JBUF9BRERSRVNTX00pCiAKLSNkZWZpbmUgRURDXzFfQkFTRV9BRERSIDB4Nzk4MAorI2RlZmluZSBNRU1fV1JBUF9DTElFTlRfTlVNX1MgICAgMAorI2RlZmluZSBNRU1fV1JBUF9DTElFTlRfTlVNX00gICAgMHhmVQorI2RlZmluZSBNRU1fV1JBUF9DTElFTlRfTlVNX0coeCkgXAorCSgoKHgpID4+IE1FTV9XUkFQX0NMSUVOVF9OVU1fUykgJiBNRU1fV1JBUF9DTElFTlRfTlVNX00pCiAKLSNkZWZpbmUgQ0lNX0JPT1RfQ0ZHIDB4N2IwMAotI2RlZmluZSAgQk9PVEFERFJfTUFTSyAweGZmZmZmZjAwVQotI2RlZmluZSAgVVBDUlNUICAgICAgICAweDFVCisjZGVmaW5lIE1BX1BBUklUWV9FUlJPUl9TVEFUVVNfQQkweDc3ZjQKKyNkZWZpbmUgTUFfUEFSSVRZX0VSUk9SX1NUQVRVUzFfQQkweDc3ZjQKKyNkZWZpbmUgTUFfUEFSSVRZX0VSUk9SX1NUQVRVUzJfQQkweDc4MDQKIAotI2RlZmluZSBDSU1fUEZfTUFJTEJPWF9EQVRBIDB4MjQwCi0jZGVmaW5lIENJTV9QRl9NQUlMQk9YX0NUUkwgMHgyODAKLSNkZWZpbmUgIE1CTVNHVkFMSUQgICAgIDB4MDAwMDAwMDhVCi0jZGVmaW5lICBNQklOVFJFUSAgICAgICAweDAwMDAwMDA0VQotI2RlZmluZSAgTUJPV05FUl9NQVNLICAgMHgwMDAwMDAwM1UKLSNkZWZpbmUgIE1CT1dORVJfU0hJRlQgIDAKLSNkZWZpbmUgIE1CT1dORVIoeCkgICAgICgoeCkgPDwgTUJPV05FUl9TSElGVCkKLSNkZWZpbmUgIE1CT1dORVJfR0VUKHgpICgoKHgpICYgTUJPV05FUl9NQVNLKSA+PiBNQk9XTkVSX1NISUZUKQorLyogcmVnaXN0ZXJzIGZvciBtb2R1bGUgRURDXzAgKi8KKyNkZWZpbmUgRURDXzBfQkFTRV9BRERSCQkweDc5MDAKIAotI2RlZmluZSBDSU1fUEZfSE9TVF9JTlRfRU5BQkxFIDB4Mjg4Ci0jZGVmaW5lICBNQk1TR1JEWUlOVEVOKHgpICgoeCkgPDwgMTkpCisjZGVmaW5lIEVEQ19CSVNUX0NNRF9BCQkweDc5MDQKKyNkZWZpbmUgRURDX0JJU1RfQ01EX0FERFJfQQkweDc5MDgKKyNkZWZpbmUgRURDX0JJU1RfQ01EX0xFTl9BCTB4NzkwYworI2RlZmluZSBFRENfQklTVF9EQVRBX1BBVFRFUk5fQSAweDc5MTAKKyNkZWZpbmUgRURDX0JJU1RfU1RBVFVTX1JEQVRBX0EJMHg3OTI4CisjZGVmaW5lIEVEQ19JTlRfQ0FVU0VfQQkJMHg3OTc4CiAKLSNkZWZpbmUgQ0lNX1BGX0hPU1RfSU5UX0NBVVNFIDB4MjhjCi0jZGVmaW5lICBNQk1TR1JEWUlOVCAweDAwMDgwMDAwVQorI2RlZmluZSBFQ0NfVUVfUEFSX1MgICAgNQorI2RlZmluZSBFQ0NfVUVfUEFSX1YoeCkgKCh4KSA8PCBFQ0NfVUVfUEFSX1MpCisjZGVmaW5lIEVDQ19VRV9QQVJfRiAgICBFQ0NfVUVfUEFSX1YoMVUpCiAKLSNkZWZpbmUgQ0lNX0hPU1RfSU5UX0NBVVNFIDB4N2IyYwotI2RlZmluZSAgVElFUU9VVFBBUkVSUklOVCAgMHgwMDEwMDAwMFUKLSNkZWZpbmUgIFRJRVFJTlBBUkVSUklOVCAgIDB4MDAwODAwMDBVCi0jZGVmaW5lICBNQkhPU1RQQVJFUlIgICAgICAweDAwMDQwMDAwVQotI2RlZmluZSAgTUJVUFBBUkVSUiAgICAgICAgMHgwMDAyMDAwMFUKLSNkZWZpbmUgIElCUVBBUkVSUiAgICAgICAgIDB4MDAwMWY4MDBVCi0jZGVmaW5lICBJQlFUUDBQQVJFUlIgICAgICAweDAwMDEwMDAwVQotI2RlZmluZSAgSUJRVFAxUEFSRVJSICAgICAgMHgwMDAwODAwMFUKLSNkZWZpbmUgIElCUVVMUFBBUkVSUiAgICAgIDB4MDAwMDQwMDBVCi0jZGVmaW5lICBJQlFTR0VMT1BBUkVSUiAgICAweDAwMDAyMDAwVQotI2RlZmluZSAgSUJRU0dFSElQQVJFUlIgICAgMHgwMDAwMTAwMFUKLSNkZWZpbmUgIElCUU5DU0lQQVJFUlIgICAgIDB4MDAwMDA4MDBVCi0jZGVmaW5lICBPQlFQQVJFUlIgICAgICAgICAweDAwMDAwN2UwVQotI2RlZmluZSAgT0JRVUxQMFBBUkVSUiAgICAgMHgwMDAwMDQwMFUKLSNkZWZpbmUgIE9CUVVMUDFQQVJFUlIgICAgIDB4MDAwMDAyMDBVCi0jZGVmaW5lICBPQlFVTFAyUEFSRVJSICAgICAweDAwMDAwMTAwVQotI2RlZmluZSAgT0JRVUxQM1BBUkVSUiAgICAgMHgwMDAwMDA4MFUKLSNkZWZpbmUgIE9CUVNHRVBBUkVSUiAgICAgIDB4MDAwMDAwNDBVCi0jZGVmaW5lICBPQlFOQ1NJUEFSRVJSICAgICAweDAwMDAwMDIwVQotI2RlZmluZSAgUFJFRkRST1BJTlQgICAgICAgMHgwMDAwMDAwMlUKLSNkZWZpbmUgIFVQQUNDTk9OWkVSTyAgICAgIDB4MDAwMDAwMDFVCisjZGVmaW5lIEVDQ19DRV9QQVJfUyAgICA0CisjZGVmaW5lIEVDQ19DRV9QQVJfVih4KSAoKHgpIDw8IEVDQ19DRV9QQVJfUykKKyNkZWZpbmUgRUNDX0NFX1BBUl9GICAgIEVDQ19DRV9QQVJfVigxVSkKIAotI2RlZmluZSBDSU1fSE9TVF9VUEFDQ19JTlRfQ0FVU0UgMHg3YjM0Ci0jZGVmaW5lICBFRVBST01XUklOVCAgICAgIDB4NDAwMDAwMDBVCi0jZGVmaW5lICBUSU1FT1VUTUFJTlQgICAgIDB4MjAwMDAwMDBVCi0jZGVmaW5lICBUSU1FT1VUSU5UICAgICAgIDB4MTAwMDAwMDBVCi0jZGVmaW5lICBSU1BPVlJMT09LVVBJTlQgIDB4MDgwMDAwMDBVCi0jZGVmaW5lICBSRVFPVlJMT09LVVBJTlQgIDB4MDQwMDAwMDBVCi0jZGVmaW5lICBCTEtXUlBMSU5UICAgICAgIDB4MDIwMDAwMDBVCi0jZGVmaW5lICBCTEtSRFBMSU5UICAgICAgIDB4MDEwMDAwMDBVCi0jZGVmaW5lICBTR0xXUlBMSU5UICAgICAgIDB4MDA4MDAwMDBVCi0jZGVmaW5lICBTR0xSRFBMSU5UICAgICAgIDB4MDA0MDAwMDBVCi0jZGVmaW5lICBCTEtXUkNUTElOVCAgICAgIDB4MDAyMDAwMDBVCi0jZGVmaW5lICBCTEtSRENUTElOVCAgICAgIDB4MDAxMDAwMDBVCi0jZGVmaW5lICBTR0xXUkNUTElOVCAgICAgIDB4MDAwODAwMDBVCi0jZGVmaW5lICBTR0xSRENUTElOVCAgICAgIDB4MDAwNDAwMDBVCi0jZGVmaW5lICBCTEtXUkVFUFJPTUlOVCAgIDB4MDAwMjAwMDBVCi0jZGVmaW5lICBCTEtSREVFUFJPTUlOVCAgIDB4MDAwMTAwMDBVCi0jZGVmaW5lICBTR0xXUkVFUFJPTUlOVCAgIDB4MDAwMDgwMDBVCi0jZGVmaW5lICBTR0xSREVFUFJPTUlOVCAgIDB4MDAwMDQwMDBVCi0jZGVmaW5lICBCTEtXUkZMQVNISU5UICAgIDB4MDAwMDIwMDBVCi0jZGVmaW5lICBCTEtSREZMQVNISU5UICAgIDB4MDAwMDEwMDBVCi0jZGVmaW5lICBTR0xXUkZMQVNISU5UICAgIDB4MDAwMDA4MDBVCi0jZGVmaW5lICBTR0xSREZMQVNISU5UICAgIDB4MDAwMDA0MDBVCi0jZGVmaW5lICBCTEtXUkJPT1RJTlQgICAgIDB4MDAwMDAyMDBVCi0jZGVmaW5lICBCTEtSREJPT1RJTlQgICAgIDB4MDAwMDAxMDBVCi0jZGVmaW5lICBTR0xXUkJPT1RJTlQgICAgIDB4MDAwMDAwODBVCi0jZGVmaW5lICBTR0xSREJPT1RJTlQgICAgIDB4MDAwMDAwNDBVCi0jZGVmaW5lICBJTExXUkJFSU5UICAgICAgIDB4MDAwMDAwMjBVCi0jZGVmaW5lICBJTExSREJFSU5UICAgICAgIDB4MDAwMDAwMTBVCi0jZGVmaW5lICBJTExSRElOVCAgICAgICAgIDB4MDAwMDAwMDhVCi0jZGVmaW5lICBJTExXUklOVCAgICAgICAgIDB4MDAwMDAwMDRVCi0jZGVmaW5lICBJTExUUkFOU0lOVCAgICAgIDB4MDAwMDAwMDJVCi0jZGVmaW5lICBSU1ZEU1BBQ0VJTlQgICAgIDB4MDAwMDAwMDFVCisjZGVmaW5lIFBFUlJfUEFSX0NBVVNFX1MgICAgMworI2RlZmluZSBQRVJSX1BBUl9DQVVTRV9WKHgpICgoeCkgPDwgUEVSUl9QQVJfQ0FVU0VfUykKKyNkZWZpbmUgUEVSUl9QQVJfQ0FVU0VfRiAgICBQRVJSX1BBUl9DQVVTRV9WKDFVKQogCi0jZGVmaW5lIFRQX09VVF9DT05GSUcgMHg3ZDA0Ci0jZGVmaW5lICBWTEFORVhURU5BQkxFX01BU0sgIDB4MDAwMGYwMDBVCi0jZGVmaW5lICBWTEFORVhURU5BQkxFX1NISUZUIDEyCisjZGVmaW5lIEVEQ19FQ0NfU1RBVFVTX0EJMHg3OTdjCiAKLSNkZWZpbmUgVFBfR0xPQkFMX0NPTkZJRyAweDdkMDgKLSNkZWZpbmUgIEZJVkVUVVBMRUxPT0tVUF9TSElGVCAgMTcKLSNkZWZpbmUgIEZJVkVUVVBMRUxPT0tVUF9NQVNLICAgMHgwMDA2MDAwMFUKLSNkZWZpbmUgIEZJVkVUVVBMRUxPT0tVUCh4KSAgICAgKCh4KSA8PCBGSVZFVFVQTEVMT09LVVBfU0hJRlQpCi0jZGVmaW5lICBGSVZFVFVQTEVMT09LVVBfR0VUKHgpICgoKHgpICYgRklWRVRVUExFTE9PS1VQX01BU0spID4+IFwKLQkJCQlGSVZFVFVQTEVMT09LVVBfU0hJRlQpCisvKiByZWdpc3RlcnMgZm9yIG1vZHVsZSBFRENfMSAqLworI2RlZmluZSBFRENfMV9CQVNFX0FERFIJMHg3OTgwCiAKLSNkZWZpbmUgVFBfUEFSQV9SRUcyIDB4N2Q2OAotI2RlZmluZSAgTUFYUlhEQVRBX01BU0sgICAgMHhmZmZmMDAwMFUKLSNkZWZpbmUgIE1BWFJYREFUQV9TSElGVCAgIDE2Ci0jZGVmaW5lICBNQVhSWERBVEFfR0VUKHgpICgoKHgpICYgTUFYUlhEQVRBX01BU0spID4+IE1BWFJYREFUQV9TSElGVCkKKy8qIHJlZ2lzdGVycyBmb3IgbW9kdWxlIENJTSAqLworI2RlZmluZSBDSU1fQk9PVF9DRkdfQSAweDdiMDAKKyNkZWZpbmUgQ0lNX1BGX01BSUxCT1hfQ1RSTF9TSEFET1dfQ09QWV9BIDB4MjkwCiAKLSNkZWZpbmUgVFBfVElNRVJfUkVTT0xVVElPTiAweDdkOTAKLSNkZWZpbmUgIFRJTUVSUkVTT0xVVElPTl9NQVNLICAgMHgwMGZmMDAwMFUKLSNkZWZpbmUgIFRJTUVSUkVTT0xVVElPTl9TSElGVCAgMTYKLSNkZWZpbmUgIFRJTUVSUkVTT0xVVElPTl9HRVQoeCkgKCgoeCkgJiBUSU1FUlJFU09MVVRJT05fTUFTSykgPj4gVElNRVJSRVNPTFVUSU9OX1NISUZUKQotI2RlZmluZSAgREVMQVlFREFDS1JFU09MVVRJT05fTUFTSyAweDAwMDAwMGZmVQotI2RlZmluZSAgREVMQVlFREFDS1JFU09MVVRJT05fU0hJRlQgICAgIDAKLSNkZWZpbmUgIERFTEFZRURBQ0tSRVNPTFVUSU9OX0dFVCh4KSBcCi0JKCgoeCkgJiBERUxBWUVEQUNLUkVTT0xVVElPTl9NQVNLKSA+PiBERUxBWUVEQUNLUkVTT0xVVElPTl9TSElGVCkKKyNkZWZpbmUgIEJPT1RBRERSX00JMHhmZmZmZmYwMFUKIAotI2RlZmluZSBUUF9TSElGVF9DTlQgMHg3ZGMwCi0jZGVmaW5lICBTWU5TSElGVE1BWF9TSElGVCAgICAgICAgIDI0Ci0jZGVmaW5lICBTWU5TSElGVE1BWF9NQVNLICAgICAgICAgIDB4ZmYwMDAwMDBVCi0jZGVmaW5lICBTWU5TSElGVE1BWCh4KSAgICAgICAgICAgICgoeCkgPDwgU1lOU0hJRlRNQVhfU0hJRlQpCi0jZGVmaW5lICBTWU5TSElGVE1BWF9HRVQoeCkgICAgICAgICgoKHgpICYgU1lOU0hJRlRNQVhfTUFTSykgPj4gXAotCQkJCSAgIFNZTlNISUZUTUFYX1NISUZUKQotI2RlZmluZSAgUlhUU0hJRlRNQVhSMV9TSElGVCAgICAgICAyMAotI2RlZmluZSAgUlhUU0hJRlRNQVhSMV9NQVNLICAgICAgICAweDAwZjAwMDAwVQotI2RlZmluZSAgUlhUU0hJRlRNQVhSMSh4KSAgICAgICAgICAoKHgpIDw8IFJYVFNISUZUTUFYUjFfU0hJRlQpCi0jZGVmaW5lICBSWFRTSElGVE1BWFIxX0dFVCh4KSAgICAgICgoKHgpICYgUlhUU0hJRlRNQVhSMV9NQVNLKSA+PiBcCi0JCQkJICAgUlhUU0hJRlRNQVhSMV9TSElGVCkKLSNkZWZpbmUgIFJYVFNISUZUTUFYUjJfU0hJRlQgICAgICAgMTYKLSNkZWZpbmUgIFJYVFNISUZUTUFYUjJfTUFTSyAgICAgICAgMHgwMDBmMDAwMFUKLSNkZWZpbmUgIFJYVFNISUZUTUFYUjIoeCkgICAgICAgICAgKCh4KSA8PCBSWFRTSElGVE1BWFIyX1NISUZUKQotI2RlZmluZSAgUlhUU0hJRlRNQVhSMl9HRVQoeCkgICAgICAoKCh4KSAmIFJYVFNISUZUTUFYUjJfTUFTSykgPj4gXAotCQkJCSAgIFJYVFNISUZUTUFYUjJfU0hJRlQpCi0jZGVmaW5lICBQRVJTSElGVEJBQ0tPRkZNQVhfU0hJRlQgIDEyCi0jZGVmaW5lICBQRVJTSElGVEJBQ0tPRkZNQVhfTUFTSyAgIDB4MDAwMGYwMDBVCi0jZGVmaW5lICBQRVJTSElGVEJBQ0tPRkZNQVgoeCkgICAgICgoeCkgPDwgUEVSU0hJRlRCQUNLT0ZGTUFYX1NISUZUKQotI2RlZmluZSAgUEVSU0hJRlRCQUNLT0ZGTUFYX0dFVCh4KSAoKCh4KSAmIFBFUlNISUZUQkFDS09GRk1BWF9NQVNLKSA+PiBcCi0JCQkJICAgUEVSU0hJRlRCQUNLT0ZGTUFYX1NISUZUKQotI2RlZmluZSAgUEVSU0hJRlRNQVhfU0hJRlQgICAgICAgICA4Ci0jZGVmaW5lICBQRVJTSElGVE1BWF9NQVNLICAgICAgICAgIDB4MDAwMDBmMDBVCi0jZGVmaW5lICBQRVJTSElGVE1BWCh4KSAgICAgICAgICAgICgoeCkgPDwgUEVSU0hJRlRNQVhfU0hJRlQpCi0jZGVmaW5lICBQRVJTSElGVE1BWF9HRVQoeCkgICAgICAgICgoKHgpICYgUEVSU0hJRlRNQVhfTUFTSykgPj4gXAotCQkJCSAgIFBFUlNISUZUTUFYX1NISUZUKQotI2RlZmluZSAgS0VFUEFMSVZFTUFYUjFfU0hJRlQgICAgICA0Ci0jZGVmaW5lICBLRUVQQUxJVkVNQVhSMV9NQVNLICAgICAgIDB4MDAwMDAwZjBVCi0jZGVmaW5lICBLRUVQQUxJVkVNQVhSMSh4KSAgICAgICAgICgoeCkgPDwgS0VFUEFMSVZFTUFYUjFfU0hJRlQpCi0jZGVmaW5lICBLRUVQQUxJVkVNQVhSMV9HRVQoeCkgICAgICgoKHgpICYgS0VFUEFMSVZFTUFYUjFfTUFTSykgPj4gXAotCQkJCSAgIEtFRVBBTElWRU1BWFIxX1NISUZUKQotI2RlZmluZSBLRUVQQUxJVkVNQVhSMl9TSElGVCAgICAgICAwCi0jZGVmaW5lIEtFRVBBTElWRU1BWFIyX01BU0sgICAgICAgIDB4MDAwMDAwMGZVCi0jZGVmaW5lIEtFRVBBTElWRU1BWFIyKHgpICAgICAgICAgICgoeCkgPDwgS0VFUEFMSVZFTUFYUjJfU0hJRlQpCi0jZGVmaW5lIEtFRVBBTElWRU1BWFIyX0dFVCh4KSAgICAgICgoKHgpICYgS0VFUEFMSVZFTUFYUjJfTUFTSykgPj4gXAotCQkJCSAgIEtFRVBBTElWRU1BWFIyX1NISUZUKQorI2RlZmluZSBVUENSU1RfUyAgICAwCisjZGVmaW5lIFVQQ1JTVF9WKHgpICgoeCkgPDwgVVBDUlNUX1MpCisjZGVmaW5lIFVQQ1JTVF9GICAgIFVQQ1JTVF9WKDFVKQogCi0jZGVmaW5lIFRQX0NDVFJMX1RBQkxFIDB4N2RkYwotI2RlZmluZSBUUF9NVFVfVEFCTEUgMHg3ZGU0Ci0jZGVmaW5lICBNVFVJTkRFWF9NQVNLICAgMHhmZjAwMDAwMFUKLSNkZWZpbmUgIE1UVUlOREVYX1NISUZUICAyNAotI2RlZmluZSAgTVRVSU5ERVgoeCkgICAgICgoeCkgPDwgTVRVSU5ERVhfU0hJRlQpCi0jZGVmaW5lICBNVFVXSURUSF9NQVNLICAgMHgwMDBmMDAwMFUKLSNkZWZpbmUgIE1UVVdJRFRIX1NISUZUICAxNgotI2RlZmluZSAgTVRVV0lEVEgoeCkgICAgICgoeCkgPDwgTVRVV0lEVEhfU0hJRlQpCi0jZGVmaW5lICBNVFVXSURUSF9HRVQoeCkgKCgoeCkgJiBNVFVXSURUSF9NQVNLKSA+PiBNVFVXSURUSF9TSElGVCkKLSNkZWZpbmUgIE1UVVZBTFVFX01BU0sgICAweDAwMDAzZmZmVQotI2RlZmluZSAgTVRVVkFMVUVfU0hJRlQgIDAKLSNkZWZpbmUgIE1UVVZBTFVFKHgpICAgICAoKHgpIDw8IE1UVVZBTFVFX1NISUZUKQotI2RlZmluZSAgTVRVVkFMVUVfR0VUKHgpICgoKHgpICYgTVRVVkFMVUVfTUFTSykgPj4gTVRVVkFMVUVfU0hJRlQpCisjZGVmaW5lIENJTV9QRl9NQUlMQk9YX0RBVEFfQSAweDI0MAorI2RlZmluZSBDSU1fUEZfTUFJTEJPWF9DVFJMX0EgMHgyODAKIAotI2RlZmluZSBUUF9SU1NfTEtQX1RBQkxFIDB4N2RlYwotI2RlZmluZSAgTEtQVEJMUk9XVkxEICAgICAgICAweDgwMDAwMDAwVQotI2RlZmluZSAgTEtQVEJMUVVFVUUxX01BU0sgICAweDAwMGZmYzAwVQotI2RlZmluZSAgTEtQVEJMUVVFVUUxX1NISUZUICAxMAotI2RlZmluZSAgTEtQVEJMUVVFVUUxKHgpICAgICAoKHgpIDw8IExLUFRCTFFVRVVFMV9TSElGVCkKLSNkZWZpbmUgIExLUFRCTFFVRVVFMV9HRVQoeCkgKCgoeCkgJiBMS1BUQkxRVUVVRTFfTUFTSykgPj4gTEtQVEJMUVVFVUUxX1NISUZUKQotI2RlZmluZSAgTEtQVEJMUVVFVUUwX01BU0sgICAweDAwMDAwM2ZmVQotI2RlZmluZSAgTEtQVEJMUVVFVUUwX1NISUZUICAwCi0jZGVmaW5lICBMS1BUQkxRVUVVRTAoeCkgICAgICgoeCkgPDwgTEtQVEJMUVVFVUUwX1NISUZUKQotI2RlZmluZSAgTEtQVEJMUVVFVUUwX0dFVCh4KSAoKCh4KSAmIExLUFRCTFFVRVVFMF9NQVNLKSA+PiBMS1BUQkxRVUVVRTBfU0hJRlQpCisjZGVmaW5lIE1CTVNHVkFMSURfUyAgICAzCisjZGVmaW5lIE1CTVNHVkFMSURfVih4KSAoKHgpIDw8IE1CTVNHVkFMSURfUykKKyNkZWZpbmUgTUJNU0dWQUxJRF9GICAgIE1CTVNHVkFMSURfVigxVSkKIAotI2RlZmluZSBUUF9QSU9fQUREUiAweDdlNDAKLSNkZWZpbmUgVFBfUElPX0RBVEEgMHg3ZTQ0Ci0jZGVmaW5lIFRQX01JQl9JTkRFWCAweDdlNTAKLSNkZWZpbmUgVFBfTUlCX0RBVEEgMHg3ZTU0Ci0jZGVmaW5lIFRQX0lOVF9DQVVTRSAweDdlNzQKLSNkZWZpbmUgIEZMTVRYRkxTVEVNUFRZIDB4NDAwMDAwMDBVCisjZGVmaW5lIE1CSU5UUkVRX1MgICAgMgorI2RlZmluZSBNQklOVFJFUV9WKHgpICgoeCkgPDwgTUJJTlRSRVFfUykKKyNkZWZpbmUgTUJJTlRSRVFfRiAgICBNQklOVFJFUV9WKDFVKQogCi0jZGVmaW5lIFRQX1ZMQU5fUFJJX01BUCAweDE0MAotI2RlZmluZSAgRlJBR01FTlRBVElPTl9TSElGVCA5Ci0jZGVmaW5lICBGUkFHTUVOVEFUSU9OX01BU0sgIDB4MDAwMDAyMDBVCi0jZGVmaW5lICBNUFNISVRUWVBFX01BU0sgICAgIDB4MDAwMDAxMDBVCi0jZGVmaW5lICBNQUNNQVRDSF9NQVNLICAgICAgIDB4MDAwMDAwODBVCi0jZGVmaW5lICBFVEhFUlRZUEVfTUFTSyAgICAgIDB4MDAwMDAwNDBVCi0jZGVmaW5lICBQUk9UT0NPTF9NQVNLICAgICAgIDB4MDAwMDAwMjBVCi0jZGVmaW5lICBUT1NfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMTBVCi0jZGVmaW5lICBWTEFOX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDhVCi0jZGVmaW5lICBWTklDX0lEX01BU0sgICAgICAgIDB4MDAwMDAwMDRVCi0jZGVmaW5lICBQT1JUX01BU0sgICAgICAgICAgIDB4MDAwMDAwMDJVCi0jZGVmaW5lICBGQ09FX1NISUZUICAgICAgICAgIDAKLSNkZWZpbmUgIEZDT0VfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMVUKKyNkZWZpbmUgTUJPV05FUl9TICAgIDAKKyNkZWZpbmUgTUJPV05FUl9NICAgIDB4M1UKKyNkZWZpbmUgTUJPV05FUl9WKHgpICgoeCkgPDwgTUJPV05FUl9TKQorI2RlZmluZSBNQk9XTkVSX0coeCkgKCgoeCkgPj4gTUJPV05FUl9TKSAmIE1CT1dORVJfTSkKIAotI2RlZmluZSBUUF9JTkdSRVNTX0NPTkZJRyAweDE0MQotI2RlZmluZSAgVk5JQyAgICAgICAgICAgICAgICAweDAwMDAwODAwVQotI2RlZmluZSAgQ1NVTV9IQVNfUFNFVURPX0hEUiAweDAwMDAwNDAwVQotI2RlZmluZSAgUk1fT1ZMQU4gICAgICAgICAgICAweDAwMDAwMjAwVQotI2RlZmluZSAgTE9PS1VQRVZFUllQS1QgICAgICAweDAwMDAwMTAwVQorI2RlZmluZSBDSU1fUEZfSE9TVF9JTlRfRU5BQkxFX0EgMHgyODgKIAotI2RlZmluZSBUUF9NSUJfTUFDX0lOX0VSUl8wIDB4MAotI2RlZmluZSBUUF9NSUJfVENQX09VVF9SU1QgMHhjCi0jZGVmaW5lIFRQX01JQl9UQ1BfSU5fU0VHX0hJIDB4MTAKLSNkZWZpbmUgVFBfTUlCX1RDUF9JTl9TRUdfTE8gMHgxMQotI2RlZmluZSBUUF9NSUJfVENQX09VVF9TRUdfSEkgMHgxMgotI2RlZmluZSBUUF9NSUJfVENQX09VVF9TRUdfTE8gMHgxMwotI2RlZmluZSBUUF9NSUJfVENQX1JYVF9TRUdfSEkgMHgxNAotI2RlZmluZSBUUF9NSUJfVENQX1JYVF9TRUdfTE8gMHgxNQotI2RlZmluZSBUUF9NSUJfVE5MX0NOR19EUk9QXzAgMHgxOAotI2RlZmluZSBUUF9NSUJfVENQX1Y2SU5fRVJSXzAgMHgyOAotI2RlZmluZSBUUF9NSUJfVENQX1Y2T1VUX1JTVCAweDJjCi0jZGVmaW5lIFRQX01JQl9PRkRfQVJQX0RST1AgMHgzNgotI2RlZmluZSBUUF9NSUJfVE5MX0RST1BfMCAweDQ0Ci0jZGVmaW5lIFRQX01JQl9PRkRfVkxOX0RST1BfMCAweDU4CisjZGVmaW5lIE1CTVNHUkRZSU5URU5fUyAgICAxOQorI2RlZmluZSBNQk1TR1JEWUlOVEVOX1YoeCkgKCh4KSA8PCBNQk1TR1JEWUlOVEVOX1MpCisjZGVmaW5lIE1CTVNHUkRZSU5URU5fRiAgICBNQk1TR1JEWUlOVEVOX1YoMVUpCiAKLSNkZWZpbmUgVUxQX1RYX0lOVF9DQVVTRSAweDhkY2MKLSNkZWZpbmUgIFBCTF9CT1VORF9FUlJfQ0gzIDB4ODAwMDAwMDBVCi0jZGVmaW5lICBQQkxfQk9VTkRfRVJSX0NIMiAweDQwMDAwMDAwVQotI2RlZmluZSAgUEJMX0JPVU5EX0VSUl9DSDEgMHgyMDAwMDAwMFUKLSNkZWZpbmUgIFBCTF9CT1VORF9FUlJfQ0gwIDB4MTAwMDAwMDBVCisjZGVmaW5lIENJTV9QRl9IT1NUX0lOVF9DQVVTRV9BIDB4MjhjCiAKLSNkZWZpbmUgUE1fUlhfSU5UX0NBVVNFIDB4OGZkYwotI2RlZmluZSAgWkVST19FX0NNRF9FUlJPUiAgICAgMHgwMDQwMDAwMFUKLSNkZWZpbmUgIFBNUlhfRlJBTUlOR19FUlJPUiAgIDB4MDAzZmZmZjBVCi0jZGVmaW5lICBPQ1NQSV9QQVJfRVJST1IgICAgICAweDAwMDAwMDA4VQotI2RlZmluZSAgREJfT1BUSU9OU19QQVJfRVJST1IgMHgwMDAwMDAwNFUKLSNkZWZpbmUgIElFU1BJX1BBUl9FUlJPUiAgICAgIDB4MDAwMDAwMDJVCi0jZGVmaW5lICBFX1BDTURfUEFSX0VSUk9SICAgICAweDAwMDAwMDAxVQorI2RlZmluZSBNQk1TR1JEWUlOVF9TICAgIDE5CisjZGVmaW5lIE1CTVNHUkRZSU5UX1YoeCkgKCh4KSA8PCBNQk1TR1JEWUlOVF9TKQorI2RlZmluZSBNQk1TR1JEWUlOVF9GICAgIE1CTVNHUkRZSU5UX1YoMVUpCiAKLSNkZWZpbmUgUE1fVFhfSU5UX0NBVVNFIDB4OGZmYwotI2RlZmluZSAgUENNRF9MRU5fT1ZGTDAgICAgIDB4ODAwMDAwMDBVCi0jZGVmaW5lICBQQ01EX0xFTl9PVkZMMSAgICAgMHg0MDAwMDAwMFUKLSNkZWZpbmUgIFBDTURfTEVOX09WRkwyICAgICAweDIwMDAwMDAwVQotI2RlZmluZSAgWkVST19DX0NNRF9FUlJPUiAgIDB4MTAwMDAwMDBVCi0jZGVmaW5lICBQTVRYX0ZSQU1JTkdfRVJST1IgMHgwZmZmZmZmMFUKLSNkZWZpbmUgIE9FU1BJX1BBUl9FUlJPUiAgICAweDAwMDAwMDA4VQotI2RlZmluZSAgSUNTUElfUEFSX0VSUk9SICAgIDB4MDAwMDAwMDJVCi0jZGVmaW5lICBDX1BDTURfUEFSX0VSUk9SICAgMHgwMDAwMDAwMVUKKyNkZWZpbmUgQ0lNX0hPU1RfSU5UX0NBVVNFX0EgMHg3YjJjCisKKyNkZWZpbmUgVElFUU9VVFBBUkVSUklOVF9TICAgIDIwCisjZGVmaW5lIFRJRVFPVVRQQVJFUlJJTlRfVih4KSAoKHgpIDw8IFRJRVFPVVRQQVJFUlJJTlRfUykKKyNkZWZpbmUgVElFUU9VVFBBUkVSUklOVF9GICAgIFRJRVFPVVRQQVJFUlJJTlRfVigxVSkKKworI2RlZmluZSBUSUVRSU5QQVJFUlJJTlRfUyAgICAxOQorI2RlZmluZSBUSUVRSU5QQVJFUlJJTlRfVih4KSAoKHgpIDw8IFRJRVFJTlBBUkVSUklOVF9TKQorI2RlZmluZSBUSUVRSU5QQVJFUlJJTlRfRiAgICBUSUVRSU5QQVJFUlJJTlRfVigxVSkKKworI2RlZmluZSBQUkVGRFJPUElOVF9TICAgIDEKKyNkZWZpbmUgUFJFRkRST1BJTlRfVih4KSAoKHgpIDw8IFBSRUZEUk9QSU5UX1MpCisjZGVmaW5lIFBSRUZEUk9QSU5UX0YgICAgUFJFRkRST1BJTlRfVigxVSkKKworI2RlZmluZSBVUEFDQ05PTlpFUk9fUyAgICAwCisjZGVmaW5lIFVQQUNDTk9OWkVST19WKHgpICgoeCkgPDwgVVBBQ0NOT05aRVJPX1MpCisjZGVmaW5lIFVQQUNDTk9OWkVST19GICAgIFVQQUNDTk9OWkVST19WKDFVKQorCisjZGVmaW5lIE1CSE9TVFBBUkVSUl9TICAgIDE4CisjZGVmaW5lIE1CSE9TVFBBUkVSUl9WKHgpICgoeCkgPDwgTUJIT1NUUEFSRVJSX1MpCisjZGVmaW5lIE1CSE9TVFBBUkVSUl9GICAgIE1CSE9TVFBBUkVSUl9WKDFVKQorCisjZGVmaW5lIE1CVVBQQVJFUlJfUyAgICAxNworI2RlZmluZSBNQlVQUEFSRVJSX1YoeCkgKCh4KSA8PCBNQlVQUEFSRVJSX1MpCisjZGVmaW5lIE1CVVBQQVJFUlJfRiAgICBNQlVQUEFSRVJSX1YoMVUpCisKKyNkZWZpbmUgSUJRVFAwUEFSRVJSX1MgICAgMTYKKyNkZWZpbmUgSUJRVFAwUEFSRVJSX1YoeCkgKCh4KSA8PCBJQlFUUDBQQVJFUlJfUykKKyNkZWZpbmUgSUJRVFAwUEFSRVJSX0YgICAgSUJRVFAwUEFSRVJSX1YoMVUpCisKKyNkZWZpbmUgSUJRVFAxUEFSRVJSX1MgICAgMTUKKyNkZWZpbmUgSUJRVFAxUEFSRVJSX1YoeCkgKCh4KSA8PCBJQlFUUDFQQVJFUlJfUykKKyNkZWZpbmUgSUJRVFAxUEFSRVJSX0YgICAgSUJRVFAxUEFSRVJSX1YoMVUpCisKKyNkZWZpbmUgSUJRVUxQUEFSRVJSX1MgICAgMTQKKyNkZWZpbmUgSUJRVUxQUEFSRVJSX1YoeCkgKCh4KSA8PCBJQlFVTFBQQVJFUlJfUykKKyNkZWZpbmUgSUJRVUxQUEFSRVJSX0YgICAgSUJRVUxQUEFSRVJSX1YoMVUpCisKKyNkZWZpbmUgSUJRU0dFTE9QQVJFUlJfUyAgICAxMworI2RlZmluZSBJQlFTR0VMT1BBUkVSUl9WKHgpICgoeCkgPDwgSUJRU0dFTE9QQVJFUlJfUykKKyNkZWZpbmUgSUJRU0dFTE9QQVJFUlJfRiAgICBJQlFTR0VMT1BBUkVSUl9WKDFVKQorCisjZGVmaW5lIElCUVNHRUhJUEFSRVJSX1MgICAgMTIKKyNkZWZpbmUgSUJRU0dFSElQQVJFUlJfVih4KSAoKHgpIDw8IElCUVNHRUhJUEFSRVJSX1MpCisjZGVmaW5lIElCUVNHRUhJUEFSRVJSX0YgICAgSUJRU0dFSElQQVJFUlJfVigxVSkKKworI2RlZmluZSBJQlFOQ1NJUEFSRVJSX1MgICAgMTEKKyNkZWZpbmUgSUJRTkNTSVBBUkVSUl9WKHgpICgoeCkgPDwgSUJRTkNTSVBBUkVSUl9TKQorI2RlZmluZSBJQlFOQ1NJUEFSRVJSX0YgICAgSUJRTkNTSVBBUkVSUl9WKDFVKQorCisjZGVmaW5lIE9CUVVMUDBQQVJFUlJfUyAgICAxMAorI2RlZmluZSBPQlFVTFAwUEFSRVJSX1YoeCkgKCh4KSA8PCBPQlFVTFAwUEFSRVJSX1MpCisjZGVmaW5lIE9CUVVMUDBQQVJFUlJfRiAgICBPQlFVTFAwUEFSRVJSX1YoMVUpCisKKyNkZWZpbmUgT0JRVUxQMVBBUkVSUl9TICAgIDkKKyNkZWZpbmUgT0JRVUxQMVBBUkVSUl9WKHgpICgoeCkgPDwgT0JRVUxQMVBBUkVSUl9TKQorI2RlZmluZSBPQlFVTFAxUEFSRVJSX0YgICAgT0JRVUxQMVBBUkVSUl9WKDFVKQorCisjZGVmaW5lIE9CUVVMUDJQQVJFUlJfUyAgICA4CisjZGVmaW5lIE9CUVVMUDJQQVJFUlJfVih4KSAoKHgpIDw8IE9CUVVMUDJQQVJFUlJfUykKKyNkZWZpbmUgT0JRVUxQMlBBUkVSUl9GICAgIE9CUVVMUDJQQVJFUlJfVigxVSkKKworI2RlZmluZSBPQlFVTFAzUEFSRVJSX1MgICAgNworI2RlZmluZSBPQlFVTFAzUEFSRVJSX1YoeCkgKCh4KSA8PCBPQlFVTFAzUEFSRVJSX1MpCisjZGVmaW5lIE9CUVVMUDNQQVJFUlJfRiAgICBPQlFVTFAzUEFSRVJSX1YoMVUpCisKKyNkZWZpbmUgT0JRU0dFUEFSRVJSX1MgICAgNgorI2RlZmluZSBPQlFTR0VQQVJFUlJfVih4KSAoKHgpIDw8IE9CUVNHRVBBUkVSUl9TKQorI2RlZmluZSBPQlFTR0VQQVJFUlJfRiAgICBPQlFTR0VQQVJFUlJfVigxVSkKKworI2RlZmluZSBPQlFOQ1NJUEFSRVJSX1MgICAgNQorI2RlZmluZSBPQlFOQ1NJUEFSRVJSX1YoeCkgKCh4KSA8PCBPQlFOQ1NJUEFSRVJSX1MpCisjZGVmaW5lIE9CUU5DU0lQQVJFUlJfRiAgICBPQlFOQ1NJUEFSRVJSX1YoMVUpCisKKyNkZWZpbmUgQ0lNX0hPU1RfVVBBQ0NfSU5UX0NBVVNFX0EgMHg3YjM0CisKKyNkZWZpbmUgRUVQUk9NV1JJTlRfUyAgICAzMAorI2RlZmluZSBFRVBST01XUklOVF9WKHgpICgoeCkgPDwgRUVQUk9NV1JJTlRfUykKKyNkZWZpbmUgRUVQUk9NV1JJTlRfRiAgICBFRVBST01XUklOVF9WKDFVKQorCisjZGVmaW5lIFRJTUVPVVRNQUlOVF9TICAgIDI5CisjZGVmaW5lIFRJTUVPVVRNQUlOVF9WKHgpICgoeCkgPDwgVElNRU9VVE1BSU5UX1MpCisjZGVmaW5lIFRJTUVPVVRNQUlOVF9GICAgIFRJTUVPVVRNQUlOVF9WKDFVKQorCisjZGVmaW5lIFRJTUVPVVRJTlRfUyAgICAyOAorI2RlZmluZSBUSU1FT1VUSU5UX1YoeCkgKCh4KSA8PCBUSU1FT1VUSU5UX1MpCisjZGVmaW5lIFRJTUVPVVRJTlRfRiAgICBUSU1FT1VUSU5UX1YoMVUpCisKKyNkZWZpbmUgUlNQT1ZSTE9PS1VQSU5UX1MgICAgMjcKKyNkZWZpbmUgUlNQT1ZSTE9PS1VQSU5UX1YoeCkgKCh4KSA8PCBSU1BPVlJMT09LVVBJTlRfUykKKyNkZWZpbmUgUlNQT1ZSTE9PS1VQSU5UX0YgICAgUlNQT1ZSTE9PS1VQSU5UX1YoMVUpCisKKyNkZWZpbmUgUkVRT1ZSTE9PS1VQSU5UX1MgICAgMjYKKyNkZWZpbmUgUkVRT1ZSTE9PS1VQSU5UX1YoeCkgKCh4KSA8PCBSRVFPVlJMT09LVVBJTlRfUykKKyNkZWZpbmUgUkVRT1ZSTE9PS1VQSU5UX0YgICAgUkVRT1ZSTE9PS1VQSU5UX1YoMVUpCisKKyNkZWZpbmUgQkxLV1JQTElOVF9TICAgIDI1CisjZGVmaW5lIEJMS1dSUExJTlRfVih4KSAoKHgpIDw8IEJMS1dSUExJTlRfUykKKyNkZWZpbmUgQkxLV1JQTElOVF9GICAgIEJMS1dSUExJTlRfVigxVSkKKworI2RlZmluZSBCTEtSRFBMSU5UX1MgICAgMjQKKyNkZWZpbmUgQkxLUkRQTElOVF9WKHgpICgoeCkgPDwgQkxLUkRQTElOVF9TKQorI2RlZmluZSBCTEtSRFBMSU5UX0YgICAgQkxLUkRQTElOVF9WKDFVKQorCisjZGVmaW5lIFNHTFdSUExJTlRfUyAgICAyMworI2RlZmluZSBTR0xXUlBMSU5UX1YoeCkgKCh4KSA8PCBTR0xXUlBMSU5UX1MpCisjZGVmaW5lIFNHTFdSUExJTlRfRiAgICBTR0xXUlBMSU5UX1YoMVUpCisKKyNkZWZpbmUgU0dMUkRQTElOVF9TICAgIDIyCisjZGVmaW5lIFNHTFJEUExJTlRfVih4KSAoKHgpIDw8IFNHTFJEUExJTlRfUykKKyNkZWZpbmUgU0dMUkRQTElOVF9GICAgIFNHTFJEUExJTlRfVigxVSkKKworI2RlZmluZSBCTEtXUkNUTElOVF9TICAgIDIxCisjZGVmaW5lIEJMS1dSQ1RMSU5UX1YoeCkgKCh4KSA8PCBCTEtXUkNUTElOVF9TKQorI2RlZmluZSBCTEtXUkNUTElOVF9GICAgIEJMS1dSQ1RMSU5UX1YoMVUpCisKKyNkZWZpbmUgQkxLUkRDVExJTlRfUyAgICAyMAorI2RlZmluZSBCTEtSRENUTElOVF9WKHgpICgoeCkgPDwgQkxLUkRDVExJTlRfUykKKyNkZWZpbmUgQkxLUkRDVExJTlRfRiAgICBCTEtSRENUTElOVF9WKDFVKQorCisjZGVmaW5lIFNHTFdSQ1RMSU5UX1MgICAgMTkKKyNkZWZpbmUgU0dMV1JDVExJTlRfVih4KSAoKHgpIDw8IFNHTFdSQ1RMSU5UX1MpCisjZGVmaW5lIFNHTFdSQ1RMSU5UX0YgICAgU0dMV1JDVExJTlRfVigxVSkKKworI2RlZmluZSBTR0xSRENUTElOVF9TICAgIDE4CisjZGVmaW5lIFNHTFJEQ1RMSU5UX1YoeCkgKCh4KSA8PCBTR0xSRENUTElOVF9TKQorI2RlZmluZSBTR0xSRENUTElOVF9GICAgIFNHTFJEQ1RMSU5UX1YoMVUpCisKKyNkZWZpbmUgQkxLV1JFRVBST01JTlRfUyAgICAxNworI2RlZmluZSBCTEtXUkVFUFJPTUlOVF9WKHgpICgoeCkgPDwgQkxLV1JFRVBST01JTlRfUykKKyNkZWZpbmUgQkxLV1JFRVBST01JTlRfRiAgICBCTEtXUkVFUFJPTUlOVF9WKDFVKQorCisjZGVmaW5lIEJMS1JERUVQUk9NSU5UX1MgICAgMTYKKyNkZWZpbmUgQkxLUkRFRVBST01JTlRfVih4KSAoKHgpIDw8IEJMS1JERUVQUk9NSU5UX1MpCisjZGVmaW5lIEJMS1JERUVQUk9NSU5UX0YgICAgQkxLUkRFRVBST01JTlRfVigxVSkKKworI2RlZmluZSBTR0xXUkVFUFJPTUlOVF9TICAgIDE1CisjZGVmaW5lIFNHTFdSRUVQUk9NSU5UX1YoeCkgKCh4KSA8PCBTR0xXUkVFUFJPTUlOVF9TKQorI2RlZmluZSBTR0xXUkVFUFJPTUlOVF9GICAgIFNHTFdSRUVQUk9NSU5UX1YoMVUpCisKKyNkZWZpbmUgU0dMUkRFRVBST01JTlRfUyAgICAxNAorI2RlZmluZSBTR0xSREVFUFJPTUlOVF9WKHgpICgoeCkgPDwgU0dMUkRFRVBST01JTlRfUykKKyNkZWZpbmUgU0dMUkRFRVBST01JTlRfRiAgICBTR0xSREVFUFJPTUlOVF9WKDFVKQorCisjZGVmaW5lIEJMS1dSRkxBU0hJTlRfUyAgICAxMworI2RlZmluZSBCTEtXUkZMQVNISU5UX1YoeCkgKCh4KSA8PCBCTEtXUkZMQVNISU5UX1MpCisjZGVmaW5lIEJMS1dSRkxBU0hJTlRfRiAgICBCTEtXUkZMQVNISU5UX1YoMVUpCisKKyNkZWZpbmUgQkxLUkRGTEFTSElOVF9TICAgIDEyCisjZGVmaW5lIEJMS1JERkxBU0hJTlRfVih4KSAoKHgpIDw8IEJMS1JERkxBU0hJTlRfUykKKyNkZWZpbmUgQkxLUkRGTEFTSElOVF9GICAgIEJMS1JERkxBU0hJTlRfVigxVSkKKworI2RlZmluZSBTR0xXUkZMQVNISU5UX1MgICAgMTEKKyNkZWZpbmUgU0dMV1JGTEFTSElOVF9WKHgpICgoeCkgPDwgU0dMV1JGTEFTSElOVF9TKQorI2RlZmluZSBTR0xXUkZMQVNISU5UX0YgICAgU0dMV1JGTEFTSElOVF9WKDFVKQorCisjZGVmaW5lIFNHTFJERkxBU0hJTlRfUyAgICAxMAorI2RlZmluZSBTR0xSREZMQVNISU5UX1YoeCkgKCh4KSA8PCBTR0xSREZMQVNISU5UX1MpCisjZGVmaW5lIFNHTFJERkxBU0hJTlRfRiAgICBTR0xSREZMQVNISU5UX1YoMVUpCisKKyNkZWZpbmUgQkxLV1JCT09USU5UX1MgICAgOQorI2RlZmluZSBCTEtXUkJPT1RJTlRfVih4KSAoKHgpIDw8IEJMS1dSQk9PVElOVF9TKQorI2RlZmluZSBCTEtXUkJPT1RJTlRfRiAgICBCTEtXUkJPT1RJTlRfVigxVSkKKworI2RlZmluZSBCTEtSREJPT1RJTlRfUyAgICA4CisjZGVmaW5lIEJMS1JEQk9PVElOVF9WKHgpICgoeCkgPDwgQkxLUkRCT09USU5UX1MpCisjZGVmaW5lIEJMS1JEQk9PVElOVF9GICAgIEJMS1JEQk9PVElOVF9WKDFVKQorCisjZGVmaW5lIFNHTFdSQk9PVElOVF9TICAgIDcKKyNkZWZpbmUgU0dMV1JCT09USU5UX1YoeCkgKCh4KSA8PCBTR0xXUkJPT1RJTlRfUykKKyNkZWZpbmUgU0dMV1JCT09USU5UX0YgICAgU0dMV1JCT09USU5UX1YoMVUpCisKKyNkZWZpbmUgU0dMUkRCT09USU5UX1MgICAgNgorI2RlZmluZSBTR0xSREJPT1RJTlRfVih4KSAoKHgpIDw8IFNHTFJEQk9PVElOVF9TKQorI2RlZmluZSBTR0xSREJPT1RJTlRfRiAgICBTR0xSREJPT1RJTlRfVigxVSkKKworI2RlZmluZSBJTExXUkJFSU5UX1MgICAgNQorI2RlZmluZSBJTExXUkJFSU5UX1YoeCkgKCh4KSA8PCBJTExXUkJFSU5UX1MpCisjZGVmaW5lIElMTFdSQkVJTlRfRiAgICBJTExXUkJFSU5UX1YoMVUpCisKKyNkZWZpbmUgSUxMUkRCRUlOVF9TICAgIDQKKyNkZWZpbmUgSUxMUkRCRUlOVF9WKHgpICgoeCkgPDwgSUxMUkRCRUlOVF9TKQorI2RlZmluZSBJTExSREJFSU5UX0YgICAgSUxMUkRCRUlOVF9WKDFVKQorCisjZGVmaW5lIElMTFJESU5UX1MgICAgMworI2RlZmluZSBJTExSRElOVF9WKHgpICgoeCkgPDwgSUxMUkRJTlRfUykKKyNkZWZpbmUgSUxMUkRJTlRfRiAgICBJTExSRElOVF9WKDFVKQorCisjZGVmaW5lIElMTFdSSU5UX1MgICAgMgorI2RlZmluZSBJTExXUklOVF9WKHgpICgoeCkgPDwgSUxMV1JJTlRfUykKKyNkZWZpbmUgSUxMV1JJTlRfRiAgICBJTExXUklOVF9WKDFVKQorCisjZGVmaW5lIElMTFRSQU5TSU5UX1MgICAgMQorI2RlZmluZSBJTExUUkFOU0lOVF9WKHgpICgoeCkgPDwgSUxMVFJBTlNJTlRfUykKKyNkZWZpbmUgSUxMVFJBTlNJTlRfRiAgICBJTExUUkFOU0lOVF9WKDFVKQorCisjZGVmaW5lIFJTVkRTUEFDRUlOVF9TICAgIDAKKyNkZWZpbmUgUlNWRFNQQUNFSU5UX1YoeCkgKCh4KSA8PCBSU1ZEU1BBQ0VJTlRfUykKKyNkZWZpbmUgUlNWRFNQQUNFSU5UX0YgICAgUlNWRFNQQUNFSU5UX1YoMVUpCisKKy8qIHJlZ2lzdGVycyBmb3IgbW9kdWxlIFRQICovCisjZGVmaW5lIERCR0xBV0hMRl9TICAgIDIzCisjZGVmaW5lIERCR0xBV0hMRl9WKHgpICgoeCkgPDwgREJHTEFXSExGX1MpCisjZGVmaW5lIERCR0xBV0hMRl9GICAgIERCR0xBV0hMRl9WKDFVKQorCisjZGVmaW5lIERCR0xBV1BUUl9TICAgIDE2CisjZGVmaW5lIERCR0xBV1BUUl9NICAgIDB4N2ZVCisjZGVmaW5lIERCR0xBV1BUUl9HKHgpICgoKHgpID4+IERCR0xBV1BUUl9TKSAmIERCR0xBV1BUUl9NKQorCisjZGVmaW5lIERCR0xBRU5BQkxFX1MgICAgMTIKKyNkZWZpbmUgREJHTEFFTkFCTEVfVih4KSAoKHgpIDw8IERCR0xBRU5BQkxFX1MpCisjZGVmaW5lIERCR0xBRU5BQkxFX0YgICAgREJHTEFFTkFCTEVfVigxVSkKKworI2RlZmluZSBEQkdMQVJQVFJfUyAgICAwCisjZGVmaW5lIERCR0xBUlBUUl9NICAgIDB4N2ZVCisjZGVmaW5lIERCR0xBUlBUUl9WKHgpICgoeCkgPDwgREJHTEFSUFRSX1MpCisKKyNkZWZpbmUgVFBfREJHX0xBX0RBVEFMX0EJMHg3ZWQ4CisjZGVmaW5lIFRQX0RCR19MQV9DT05GSUdfQQkweDdlZDQKKyNkZWZpbmUgVFBfT1VUX0NPTkZJR19BCQkweDdkMDQKKyNkZWZpbmUgVFBfR0xPQkFMX0NPTkZJR19BCTB4N2QwOAorCisjZGVmaW5lIERCR0xBTU9ERV9TCTE0CisjZGVmaW5lIERCR0xBTU9ERV9NCTB4M1UKKyNkZWZpbmUgREJHTEFNT0RFX0coeCkJKCgoeCkgPj4gREJHTEFNT0RFX1MpICYgREJHTEFNT0RFX00pCisKKyNkZWZpbmUgRklWRVRVUExFTE9PS1VQX1MgICAgMTcKKyNkZWZpbmUgRklWRVRVUExFTE9PS1VQX00gICAgMHgzVQorI2RlZmluZSBGSVZFVFVQTEVMT09LVVBfVih4KSAoKHgpIDw8IEZJVkVUVVBMRUxPT0tVUF9TKQorI2RlZmluZSBGSVZFVFVQTEVMT09LVVBfRyh4KSAoKCh4KSA+PiBGSVZFVFVQTEVMT09LVVBfUykgJiBGSVZFVFVQTEVMT09LVVBfTSkKKworI2RlZmluZSBUUF9QQVJBX1JFRzJfQSAweDdkNjgKKworI2RlZmluZSBNQVhSWERBVEFfUyAgICAxNgorI2RlZmluZSBNQVhSWERBVEFfTSAgICAweGZmZmZVCisjZGVmaW5lIE1BWFJYREFUQV9HKHgpICgoKHgpID4+IE1BWFJYREFUQV9TKSAmIE1BWFJYREFUQV9NKQorCisjZGVmaW5lIFRQX1RJTUVSX1JFU09MVVRJT05fQSAweDdkOTAKKworI2RlZmluZSBUSU1FUlJFU09MVVRJT05fUyAgICAxNgorI2RlZmluZSBUSU1FUlJFU09MVVRJT05fTSAgICAweGZmVQorI2RlZmluZSBUSU1FUlJFU09MVVRJT05fRyh4KSAoKCh4KSA+PiBUSU1FUlJFU09MVVRJT05fUykgJiBUSU1FUlJFU09MVVRJT05fTSkKKworI2RlZmluZSBUSU1FU1RBTVBSRVNPTFVUSU9OX1MgICAgOAorI2RlZmluZSBUSU1FU1RBTVBSRVNPTFVUSU9OX00gICAgMHhmZlUKKyNkZWZpbmUgVElNRVNUQU1QUkVTT0xVVElPTl9HKHgpIFwKKwkoKCh4KSA+PiBUSU1FU1RBTVBSRVNPTFVUSU9OX1MpICYgVElNRVNUQU1QUkVTT0xVVElPTl9NKQorCisjZGVmaW5lIERFTEFZRURBQ0tSRVNPTFVUSU9OX1MgICAgMAorI2RlZmluZSBERUxBWUVEQUNLUkVTT0xVVElPTl9NICAgIDB4ZmZVCisjZGVmaW5lIERFTEFZRURBQ0tSRVNPTFVUSU9OX0coeCkgXAorCSgoKHgpID4+IERFTEFZRURBQ0tSRVNPTFVUSU9OX1MpICYgREVMQVlFREFDS1JFU09MVVRJT05fTSkKKworI2RlZmluZSBUUF9TSElGVF9DTlRfQSAweDdkYzAKKyNkZWZpbmUgVFBfUlhUX01JTl9BIDB4N2Q5OAorI2RlZmluZSBUUF9SWFRfTUFYX0EgMHg3ZDljCisjZGVmaW5lIFRQX1BFUlNfTUlOX0EgMHg3ZGEwCisjZGVmaW5lIFRQX1BFUlNfTUFYX0EgMHg3ZGE0CisjZGVmaW5lIFRQX0tFRVBfSURMRV9BIDB4N2RhOAorI2RlZmluZSBUUF9LRUVQX0lOVFZMX0EgMHg3ZGFjCisjZGVmaW5lIFRQX0lOSVRfU1JUVF9BIDB4N2RiMAorI2RlZmluZSBUUF9EQUNLX1RJTUVSX0EgMHg3ZGI0CisjZGVmaW5lIFRQX0ZJTldBSVQyX1RJTUVSX0EgMHg3ZGI4CisKKyNkZWZpbmUgSU5JVFNSVFRfUyAgICAwCisjZGVmaW5lIElOSVRTUlRUX00gICAgMHhmZmZmVQorI2RlZmluZSBJTklUU1JUVF9HKHgpICgoKHgpID4+IElOSVRTUlRUX1MpICYgSU5JVFNSVFRfTSkKKworI2RlZmluZSBQRVJTTUFYX1MgICAgMAorI2RlZmluZSBQRVJTTUFYX00gICAgMHgzZmZmZmZmZlUKKyNkZWZpbmUgUEVSU01BWF9WKHgpICgoeCkgPDwgUEVSU01BWF9TKQorI2RlZmluZSBQRVJTTUFYX0coeCkgKCgoeCkgPj4gUEVSU01BWF9TKSAmIFBFUlNNQVhfTSkKKworI2RlZmluZSBTWU5TSElGVE1BWF9TICAgIDI0CisjZGVmaW5lIFNZTlNISUZUTUFYX00gICAgMHhmZlUKKyNkZWZpbmUgU1lOU0hJRlRNQVhfVih4KSAoKHgpIDw8IFNZTlNISUZUTUFYX1MpCisjZGVmaW5lIFNZTlNISUZUTUFYX0coeCkgKCgoeCkgPj4gU1lOU0hJRlRNQVhfUykgJiBTWU5TSElGVE1BWF9NKQorCisjZGVmaW5lIFJYVFNISUZUTUFYUjFfUyAgICAyMAorI2RlZmluZSBSWFRTSElGVE1BWFIxX00gICAgMHhmVQorI2RlZmluZSBSWFRTSElGVE1BWFIxX1YoeCkgKCh4KSA8PCBSWFRTSElGVE1BWFIxX1MpCisjZGVmaW5lIFJYVFNISUZUTUFYUjFfRyh4KSAoKCh4KSA+PiBSWFRTSElGVE1BWFIxX1MpICYgUlhUU0hJRlRNQVhSMV9NKQorCisjZGVmaW5lIFJYVFNISUZUTUFYUjJfUyAgICAxNgorI2RlZmluZSBSWFRTSElGVE1BWFIyX00gICAgMHhmVQorI2RlZmluZSBSWFRTSElGVE1BWFIyX1YoeCkgKCh4KSA8PCBSWFRTSElGVE1BWFIyX1MpCisjZGVmaW5lIFJYVFNISUZUTUFYUjJfRyh4KSAoKCh4KSA+PiBSWFRTSElGVE1BWFIyX1MpICYgUlhUU0hJRlRNQVhSMl9NKQorCisjZGVmaW5lIFBFUlNISUZUQkFDS09GRk1BWF9TICAgIDEyCisjZGVmaW5lIFBFUlNISUZUQkFDS09GRk1BWF9NICAgIDB4ZlUKKyNkZWZpbmUgUEVSU0hJRlRCQUNLT0ZGTUFYX1YoeCkgKCh4KSA8PCBQRVJTSElGVEJBQ0tPRkZNQVhfUykKKyNkZWZpbmUgUEVSU0hJRlRCQUNLT0ZGTUFYX0coeCkgXAorCSgoKHgpID4+IFBFUlNISUZUQkFDS09GRk1BWF9TKSAmIFBFUlNISUZUQkFDS09GRk1BWF9NKQorCisjZGVmaW5lIFBFUlNISUZUTUFYX1MgICAgOAorI2RlZmluZSBQRVJTSElGVE1BWF9NICAgIDB4ZlUKKyNkZWZpbmUgUEVSU0hJRlRNQVhfVih4KSAoKHgpIDw8IFBFUlNISUZUTUFYX1MpCisjZGVmaW5lIFBFUlNISUZUTUFYX0coeCkgKCgoeCkgPj4gUEVSU0hJRlRNQVhfUykgJiBQRVJTSElGVE1BWF9NKQorCisjZGVmaW5lIEtFRVBBTElWRU1BWFIxX1MgICAgNAorI2RlZmluZSBLRUVQQUxJVkVNQVhSMV9NICAgIDB4ZlUKKyNkZWZpbmUgS0VFUEFMSVZFTUFYUjFfVih4KSAoKHgpIDw8IEtFRVBBTElWRU1BWFIxX1MpCisjZGVmaW5lIEtFRVBBTElWRU1BWFIxX0coeCkgKCgoeCkgPj4gS0VFUEFMSVZFTUFYUjFfUykgJiBLRUVQQUxJVkVNQVhSMV9NKQorCisjZGVmaW5lIEtFRVBBTElWRU1BWFIyX1MgICAgMAorI2RlZmluZSBLRUVQQUxJVkVNQVhSMl9NICAgIDB4ZlUKKyNkZWZpbmUgS0VFUEFMSVZFTUFYUjJfVih4KSAoKHgpIDw8IEtFRVBBTElWRU1BWFIyX1MpCisjZGVmaW5lIEtFRVBBTElWRU1BWFIyX0coeCkgKCgoeCkgPj4gS0VFUEFMSVZFTUFYUjJfUykgJiBLRUVQQUxJVkVNQVhSMl9NKQorCisjZGVmaW5lIFJPV0lOREVYX1MgICAgMTYKKyNkZWZpbmUgUk9XSU5ERVhfVih4KSAoKHgpIDw8IFJPV0lOREVYX1MpCisKKyNkZWZpbmUgVFBfQ0NUUkxfVEFCTEVfQQkweDdkZGMKKyNkZWZpbmUgVFBfTVRVX1RBQkxFX0EJCTB4N2RlNAorCisjZGVmaW5lIE1UVUlOREVYX1MgICAgMjQKKyNkZWZpbmUgTVRVSU5ERVhfVih4KSAoKHgpIDw8IE1UVUlOREVYX1MpCisKKyNkZWZpbmUgTVRVV0lEVEhfUyAgICAxNgorI2RlZmluZSBNVFVXSURUSF9NICAgIDB4ZlUKKyNkZWZpbmUgTVRVV0lEVEhfVih4KSAoKHgpIDw8IE1UVVdJRFRIX1MpCisjZGVmaW5lIE1UVVdJRFRIX0coeCkgKCgoeCkgPj4gTVRVV0lEVEhfUykgJiBNVFVXSURUSF9NKQorCisjZGVmaW5lIE1UVVZBTFVFX1MgICAgMAorI2RlZmluZSBNVFVWQUxVRV9NICAgIDB4M2ZmZlUKKyNkZWZpbmUgTVRVVkFMVUVfVih4KSAoKHgpIDw8IE1UVVZBTFVFX1MpCisjZGVmaW5lIE1UVVZBTFVFX0coeCkgKCgoeCkgPj4gTVRVVkFMVUVfUykgJiBNVFVWQUxVRV9NKQorCisjZGVmaW5lIFRQX1JTU19MS1BfVEFCTEVfQQkweDdkZWMKKworI2RlZmluZSBMS1BUQkxST1dWTERfUyAgICAzMQorI2RlZmluZSBMS1BUQkxST1dWTERfVih4KSAoKHgpIDw8IExLUFRCTFJPV1ZMRF9TKQorI2RlZmluZSBMS1BUQkxST1dWTERfRiAgICBMS1BUQkxST1dWTERfVigxVSkKKworI2RlZmluZSBMS1BUQkxRVUVVRTFfUyAgICAxMAorI2RlZmluZSBMS1BUQkxRVUVVRTFfTSAgICAweDNmZlUKKyNkZWZpbmUgTEtQVEJMUVVFVUUxX0coeCkgKCgoeCkgPj4gTEtQVEJMUVVFVUUxX1MpICYgTEtQVEJMUVVFVUUxX00pCisKKyNkZWZpbmUgTEtQVEJMUVVFVUUwX1MgICAgMAorI2RlZmluZSBMS1BUQkxRVUVVRTBfTSAgICAweDNmZlUKKyNkZWZpbmUgTEtQVEJMUVVFVUUwX0coeCkgKCgoeCkgPj4gTEtQVEJMUVVFVUUwX1MpICYgTEtQVEJMUVVFVUUwX00pCisKKyNkZWZpbmUgVFBfUElPX0FERFJfQQkweDdlNDAKKyNkZWZpbmUgVFBfUElPX0RBVEFfQQkweDdlNDQKKyNkZWZpbmUgVFBfTUlCX0lOREVYX0EJMHg3ZTUwCisjZGVmaW5lIFRQX01JQl9EQVRBX0EJMHg3ZTU0CisjZGVmaW5lIFRQX0lOVF9DQVVTRV9BCTB4N2U3NAorCisjZGVmaW5lIEZMTVRYRkxTVEVNUFRZX1MgICAgMzAKKyNkZWZpbmUgRkxNVFhGTFNURU1QVFlfVih4KSAoKHgpIDw8IEZMTVRYRkxTVEVNUFRZX1MpCisjZGVmaW5lIEZMTVRYRkxTVEVNUFRZX0YgICAgRkxNVFhGTFNURU1QVFlfVigxVSkKKworI2RlZmluZSBUUF9WTEFOX1BSSV9NQVBfQSAweDE0MAorCisjZGVmaW5lIEZSQUdNRU5UQVRJT05fUyAgICA5CisjZGVmaW5lIEZSQUdNRU5UQVRJT05fVih4KSAoKHgpIDw8IEZSQUdNRU5UQVRJT05fUykKKyNkZWZpbmUgRlJBR01FTlRBVElPTl9GICAgIEZSQUdNRU5UQVRJT05fVigxVSkKKworI2RlZmluZSBNUFNISVRUWVBFX1MgICAgOAorI2RlZmluZSBNUFNISVRUWVBFX1YoeCkgKCh4KSA8PCBNUFNISVRUWVBFX1MpCisjZGVmaW5lIE1QU0hJVFRZUEVfRiAgICBNUFNISVRUWVBFX1YoMVUpCisKKyNkZWZpbmUgTUFDTUFUQ0hfUyAgICA3CisjZGVmaW5lIE1BQ01BVENIX1YoeCkgKCh4KSA8PCBNQUNNQVRDSF9TKQorI2RlZmluZSBNQUNNQVRDSF9GICAgIE1BQ01BVENIX1YoMVUpCisKKyNkZWZpbmUgRVRIRVJUWVBFX1MgICAgNgorI2RlZmluZSBFVEhFUlRZUEVfVih4KSAoKHgpIDw8IEVUSEVSVFlQRV9TKQorI2RlZmluZSBFVEhFUlRZUEVfRiAgICBFVEhFUlRZUEVfVigxVSkKKworI2RlZmluZSBQUk9UT0NPTF9TICAgIDUKKyNkZWZpbmUgUFJPVE9DT0xfVih4KSAoKHgpIDw8IFBST1RPQ09MX1MpCisjZGVmaW5lIFBST1RPQ09MX0YgICAgUFJPVE9DT0xfVigxVSkKKworI2RlZmluZSBUT1NfUyAgICA0CisjZGVmaW5lIFRPU19WKHgpICgoeCkgPDwgVE9TX1MpCisjZGVmaW5lIFRPU19GICAgIFRPU19WKDFVKQorCisjZGVmaW5lIFZMQU5fUyAgICAzCisjZGVmaW5lIFZMQU5fVih4KSAoKHgpIDw8IFZMQU5fUykKKyNkZWZpbmUgVkxBTl9GICAgIFZMQU5fVigxVSkKKworI2RlZmluZSBWTklDX0lEX1MgICAgMgorI2RlZmluZSBWTklDX0lEX1YoeCkgKCh4KSA8PCBWTklDX0lEX1MpCisjZGVmaW5lIFZOSUNfSURfRiAgICBWTklDX0lEX1YoMVUpCisKKyNkZWZpbmUgUE9SVF9TICAgIDEKKyNkZWZpbmUgUE9SVF9WKHgpICgoeCkgPDwgUE9SVF9TKQorI2RlZmluZSBQT1JUX0YgICAgUE9SVF9WKDFVKQorCisjZGVmaW5lIEZDT0VfUyAgICAwCisjZGVmaW5lIEZDT0VfVih4KSAoKHgpIDw8IEZDT0VfUykKKyNkZWZpbmUgRkNPRV9GICAgIEZDT0VfVigxVSkKKworI2RlZmluZSBGSUxURVJNT0RFX1MgICAgMTUKKyNkZWZpbmUgRklMVEVSTU9ERV9WKHgpICgoeCkgPDwgRklMVEVSTU9ERV9TKQorI2RlZmluZSBGSUxURVJNT0RFX0YgICAgRklMVEVSTU9ERV9WKDFVKQorCisjZGVmaW5lIEZDT0VNQVNLX1MgICAgMTQKKyNkZWZpbmUgRkNPRU1BU0tfVih4KSAoKHgpIDw8IEZDT0VNQVNLX1MpCisjZGVmaW5lIEZDT0VNQVNLX0YgICAgRkNPRU1BU0tfVigxVSkKKworI2RlZmluZSBUUF9JTkdSRVNTX0NPTkZJR19BCTB4MTQxCisKKyNkZWZpbmUgVk5JQ19TICAgIDExCisjZGVmaW5lIFZOSUNfVih4KSAoKHgpIDw8IFZOSUNfUykKKyNkZWZpbmUgVk5JQ19GICAgIFZOSUNfVigxVSkKKworI2RlZmluZSBDU1VNX0hBU19QU0VVRE9fSERSX1MgICAgMTAKKyNkZWZpbmUgQ1NVTV9IQVNfUFNFVURPX0hEUl9WKHgpICgoeCkgPDwgQ1NVTV9IQVNfUFNFVURPX0hEUl9TKQorI2RlZmluZSBDU1VNX0hBU19QU0VVRE9fSERSX0YgICAgQ1NVTV9IQVNfUFNFVURPX0hEUl9WKDFVKQorCisjZGVmaW5lIFRQX01JQl9NQUNfSU5fRVJSXzBfQQkweDAKKyNkZWZpbmUgVFBfTUlCX1RDUF9PVVRfUlNUX0EJMHhjCisjZGVmaW5lIFRQX01JQl9UQ1BfSU5fU0VHX0hJX0EJMHgxMAorI2RlZmluZSBUUF9NSUJfVENQX0lOX1NFR19MT19BCTB4MTEKKyNkZWZpbmUgVFBfTUlCX1RDUF9PVVRfU0VHX0hJX0EJMHgxMgorI2RlZmluZSBUUF9NSUJfVENQX09VVF9TRUdfTE9fQSAweDEzCisjZGVmaW5lIFRQX01JQl9UQ1BfUlhUX1NFR19ISV9BCTB4MTQKKyNkZWZpbmUgVFBfTUlCX1RDUF9SWFRfU0VHX0xPX0EJMHgxNQorI2RlZmluZSBUUF9NSUJfVE5MX0NOR19EUk9QXzBfQSAweDE4CisjZGVmaW5lIFRQX01JQl9UQ1BfVjZJTl9FUlJfMF9BIDB4MjgKKyNkZWZpbmUgVFBfTUlCX1RDUF9WNk9VVF9SU1RfQQkweDJjCisjZGVmaW5lIFRQX01JQl9PRkRfQVJQX0RST1BfQQkweDM2CisjZGVmaW5lIFRQX01JQl9UTkxfRFJPUF8wX0EJMHg0NAorI2RlZmluZSBUUF9NSUJfT0ZEX1ZMTl9EUk9QXzBfQQkweDU4CisKKyNkZWZpbmUgVUxQX1RYX0lOVF9DQVVTRV9BCTB4OGRjYworCisjZGVmaW5lIFBCTF9CT1VORF9FUlJfQ0gzX1MgICAgMzEKKyNkZWZpbmUgUEJMX0JPVU5EX0VSUl9DSDNfVih4KSAoKHgpIDw8IFBCTF9CT1VORF9FUlJfQ0gzX1MpCisjZGVmaW5lIFBCTF9CT1VORF9FUlJfQ0gzX0YgICAgUEJMX0JPVU5EX0VSUl9DSDNfVigxVSkKKworI2RlZmluZSBQQkxfQk9VTkRfRVJSX0NIMl9TICAgIDMwCisjZGVmaW5lIFBCTF9CT1VORF9FUlJfQ0gyX1YoeCkgKCh4KSA8PCBQQkxfQk9VTkRfRVJSX0NIMl9TKQorI2RlZmluZSBQQkxfQk9VTkRfRVJSX0NIMl9GICAgIFBCTF9CT1VORF9FUlJfQ0gyX1YoMVUpCisKKyNkZWZpbmUgUEJMX0JPVU5EX0VSUl9DSDFfUyAgICAyOQorI2RlZmluZSBQQkxfQk9VTkRfRVJSX0NIMV9WKHgpICgoeCkgPDwgUEJMX0JPVU5EX0VSUl9DSDFfUykKKyNkZWZpbmUgUEJMX0JPVU5EX0VSUl9DSDFfRiAgICBQQkxfQk9VTkRfRVJSX0NIMV9WKDFVKQorCisjZGVmaW5lIFBCTF9CT1VORF9FUlJfQ0gwX1MgICAgMjgKKyNkZWZpbmUgUEJMX0JPVU5EX0VSUl9DSDBfVih4KSAoKHgpIDw8IFBCTF9CT1VORF9FUlJfQ0gwX1MpCisjZGVmaW5lIFBCTF9CT1VORF9FUlJfQ0gwX0YgICAgUEJMX0JPVU5EX0VSUl9DSDBfVigxVSkKKworI2RlZmluZSBQTV9SWF9JTlRfQ0FVU0VfQQkweDhmZGMKKyNkZWZpbmUgUE1fUlhfU1RBVF9DT05GSUdfQSAweDhmYzgKKyNkZWZpbmUgUE1fUlhfU1RBVF9DT1VOVF9BIDB4OGZjYworI2RlZmluZSBQTV9SWF9TVEFUX0xTQl9BIDB4OGZkMAorI2RlZmluZSBQTV9SWF9EQkdfQ1RSTF9BIDB4OGZkMAorI2RlZmluZSBQTV9SWF9EQkdfREFUQV9BIDB4OGZkNAorI2RlZmluZSBQTV9SWF9EQkdfU1RBVF9NU0JfQSAweDEwMDEzCisKKyNkZWZpbmUgUE1SWF9GUkFNSU5HX0VSUk9SX0YJMHgwMDNmZmZmMFUKKworI2RlZmluZSBaRVJPX0VfQ01EX0VSUk9SX1MgICAgMjIKKyNkZWZpbmUgWkVST19FX0NNRF9FUlJPUl9WKHgpICgoeCkgPDwgWkVST19FX0NNRF9FUlJPUl9TKQorI2RlZmluZSBaRVJPX0VfQ01EX0VSUk9SX0YgICAgWkVST19FX0NNRF9FUlJPUl9WKDFVKQorCisjZGVmaW5lIE9DU1BJX1BBUl9FUlJPUl9TICAgIDMKKyNkZWZpbmUgT0NTUElfUEFSX0VSUk9SX1YoeCkgKCh4KSA8PCBPQ1NQSV9QQVJfRVJST1JfUykKKyNkZWZpbmUgT0NTUElfUEFSX0VSUk9SX0YgICAgT0NTUElfUEFSX0VSUk9SX1YoMVUpCisKKyNkZWZpbmUgREJfT1BUSU9OU19QQVJfRVJST1JfUyAgICAyCisjZGVmaW5lIERCX09QVElPTlNfUEFSX0VSUk9SX1YoeCkgKCh4KSA8PCBEQl9PUFRJT05TX1BBUl9FUlJPUl9TKQorI2RlZmluZSBEQl9PUFRJT05TX1BBUl9FUlJPUl9GICAgIERCX09QVElPTlNfUEFSX0VSUk9SX1YoMVUpCisKKyNkZWZpbmUgSUVTUElfUEFSX0VSUk9SX1MgICAgMQorI2RlZmluZSBJRVNQSV9QQVJfRVJST1JfVih4KSAoKHgpIDw8IElFU1BJX1BBUl9FUlJPUl9TKQorI2RlZmluZSBJRVNQSV9QQVJfRVJST1JfRiAgICBJRVNQSV9QQVJfRVJST1JfVigxVSkKKworI2RlZmluZSBQTVJYX0VfUENNRF9QQVJfRVJST1JfUyAgICAwCisjZGVmaW5lIFBNUlhfRV9QQ01EX1BBUl9FUlJPUl9WKHgpICgoeCkgPDwgUE1SWF9FX1BDTURfUEFSX0VSUk9SX1MpCisjZGVmaW5lIFBNUlhfRV9QQ01EX1BBUl9FUlJPUl9GICAgIFBNUlhfRV9QQ01EX1BBUl9FUlJPUl9WKDFVKQorCisjZGVmaW5lIFBNX1RYX0lOVF9DQVVTRV9BCTB4OGZmYworI2RlZmluZSBQTV9UWF9TVEFUX0NPTkZJR19BIDB4OGZlOAorI2RlZmluZSBQTV9UWF9TVEFUX0NPVU5UX0EgMHg4ZmVjCisjZGVmaW5lIFBNX1RYX1NUQVRfTFNCX0EgMHg4ZmYwCisjZGVmaW5lIFBNX1RYX0RCR19DVFJMX0EgMHg4ZmYwCisjZGVmaW5lIFBNX1RYX0RCR19EQVRBX0EgMHg4ZmY0CisjZGVmaW5lIFBNX1RYX0RCR19TVEFUX01TQl9BIDB4MTAwMWEKKworI2RlZmluZSBQQ01EX0xFTl9PVkZMMF9TICAgIDMxCisjZGVmaW5lIFBDTURfTEVOX09WRkwwX1YoeCkgKCh4KSA8PCBQQ01EX0xFTl9PVkZMMF9TKQorI2RlZmluZSBQQ01EX0xFTl9PVkZMMF9GICAgIFBDTURfTEVOX09WRkwwX1YoMVUpCisKKyNkZWZpbmUgUENNRF9MRU5fT1ZGTDFfUyAgICAzMAorI2RlZmluZSBQQ01EX0xFTl9PVkZMMV9WKHgpICgoeCkgPDwgUENNRF9MRU5fT1ZGTDFfUykKKyNkZWZpbmUgUENNRF9MRU5fT1ZGTDFfRiAgICBQQ01EX0xFTl9PVkZMMV9WKDFVKQorCisjZGVmaW5lIFBDTURfTEVOX09WRkwyX1MgICAgMjkKKyNkZWZpbmUgUENNRF9MRU5fT1ZGTDJfVih4KSAoKHgpIDw8IFBDTURfTEVOX09WRkwyX1MpCisjZGVmaW5lIFBDTURfTEVOX09WRkwyX0YgICAgUENNRF9MRU5fT1ZGTDJfVigxVSkKKworI2RlZmluZSBaRVJPX0NfQ01EX0VSUk9SX1MgICAgMjgKKyNkZWZpbmUgWkVST19DX0NNRF9FUlJPUl9WKHgpICgoeCkgPDwgWkVST19DX0NNRF9FUlJPUl9TKQorI2RlZmluZSBaRVJPX0NfQ01EX0VSUk9SX0YgICAgWkVST19DX0NNRF9FUlJPUl9WKDFVKQorCisjZGVmaW5lICBQTVRYX0ZSQU1JTkdfRVJST1JfRiAweDBmZmZmZmYwVQorCisjZGVmaW5lIE9FU1BJX1BBUl9FUlJPUl9TICAgIDMKKyNkZWZpbmUgT0VTUElfUEFSX0VSUk9SX1YoeCkgKCh4KSA8PCBPRVNQSV9QQVJfRVJST1JfUykKKyNkZWZpbmUgT0VTUElfUEFSX0VSUk9SX0YgICAgT0VTUElfUEFSX0VSUk9SX1YoMVUpCisKKyNkZWZpbmUgSUNTUElfUEFSX0VSUk9SX1MgICAgMQorI2RlZmluZSBJQ1NQSV9QQVJfRVJST1JfVih4KSAoKHgpIDw8IElDU1BJX1BBUl9FUlJPUl9TKQorI2RlZmluZSBJQ1NQSV9QQVJfRVJST1JfRiAgICBJQ1NQSV9QQVJfRVJST1JfVigxVSkKKworI2RlZmluZSBQTVRYX0NfUENNRF9QQVJfRVJST1JfUyAgICAwCisjZGVmaW5lIFBNVFhfQ19QQ01EX1BBUl9FUlJPUl9WKHgpICgoeCkgPDwgUE1UWF9DX1BDTURfUEFSX0VSUk9SX1MpCisjZGVmaW5lIFBNVFhfQ19QQ01EX1BBUl9FUlJPUl9GICAgIFBNVFhfQ19QQ01EX1BBUl9FUlJPUl9WKDFVKQogCiAjZGVmaW5lIE1QU19QT1JUX1NUQVRfVFhfUE9SVF9CWVRFU19MIDB4NDAwCiAjZGVmaW5lIE1QU19QT1JUX1NUQVRfVFhfUE9SVF9CWVRFU19IIDB4NDA0CkBAIC05NTksNDEgKzE2MjMsNTcgQEAKICNkZWZpbmUgTVBTX1BPUlRfU1RBVF9SWF9QT1JUX1BQUDdfSCAweDYwYwogI2RlZmluZSBNUFNfUE9SVF9TVEFUX1JYX1BPUlRfTEVTU182NEJfTCAweDYxMAogI2RlZmluZSBNUFNfUE9SVF9TVEFUX1JYX1BPUlRfTEVTU182NEJfSCAweDYxNAotI2RlZmluZSBNQUNfUE9SVF9DRkcyIDB4ODE4CiAjZGVmaW5lIE1BQ19QT1JUX01BR0lDX01BQ0lEX0xPIDB4ODI0CiAjZGVmaW5lIE1BQ19QT1JUX01BR0lDX01BQ0lEX0hJIDB4ODI4Ci0jZGVmaW5lIE1BQ19QT1JUX0VQSU9fREFUQTAgMHg4YzAKLSNkZWZpbmUgTUFDX1BPUlRfRVBJT19EQVRBMSAweDhjNAotI2RlZmluZSBNQUNfUE9SVF9FUElPX0RBVEEyIDB4OGM4Ci0jZGVmaW5lIE1BQ19QT1JUX0VQSU9fREFUQTMgMHg4Y2MKLSNkZWZpbmUgTUFDX1BPUlRfRVBJT19PUCAweDhkMAogCi0jZGVmaW5lIE1QU19DTU5fQ1RMIDB4OTAwMAotI2RlZmluZSAgTlVNUE9SVFNfTUFTSyAgIDB4MDAwMDAwMDNVCi0jZGVmaW5lICBOVU1QT1JUU19TSElGVCAgMAotI2RlZmluZSAgTlVNUE9SVFNfR0VUKHgpICgoKHgpICYgTlVNUE9SVFNfTUFTSykgPj4gTlVNUE9SVFNfU0hJRlQpCisjZGVmaW5lIE1BQ19QT1JUX0VQSU9fREFUQTBfQSAweDhjMAorI2RlZmluZSBNQUNfUE9SVF9FUElPX0RBVEExX0EgMHg4YzQKKyNkZWZpbmUgTUFDX1BPUlRfRVBJT19EQVRBMl9BIDB4OGM4CisjZGVmaW5lIE1BQ19QT1JUX0VQSU9fREFUQTNfQSAweDhjYworI2RlZmluZSBNQUNfUE9SVF9FUElPX09QX0EgMHg4ZDAKIAotI2RlZmluZSBNUFNfSU5UX0NBVVNFIDB4OTAwOAotI2RlZmluZSAgU1RBVElOVCAweDAwMDAwMDIwVQotI2RlZmluZSAgVFhJTlQgICAweDAwMDAwMDEwVQotI2RlZmluZSAgUlhJTlQgICAweDAwMDAwMDA4VQotI2RlZmluZSAgVFJDSU5UICAweDAwMDAwMDA0VQotI2RlZmluZSAgQ0xTSU5UICAweDAwMDAwMDAyVQotI2RlZmluZSAgUExJTlQgICAweDAwMDAwMDAxVQorI2RlZmluZSBNQUNfUE9SVF9DRkcyX0EgMHg4MTgKIAotI2RlZmluZSBNUFNfVFhfSU5UX0NBVVNFIDB4OTQwOAotI2RlZmluZSAgUE9SVEVSUiAgICAweDAwMDEwMDAwVQotI2RlZmluZSAgRlJNRVJSICAgICAweDAwMDA4MDAwVQotI2RlZmluZSAgU0VDTlRFUlIgICAweDAwMDA0MDAwVQotI2RlZmluZSAgQlVCQkxFICAgICAweDAwMDAyMDAwVQotI2RlZmluZSAgVFhERVNDRklGTyAweDAwMDAxZTAwVQotI2RlZmluZSAgVFhEQVRBRklGTyAweDAwMDAwMWUwVQotI2RlZmluZSAgTkNTSUZJRk8gICAweDAwMDAwMDEwVQotI2RlZmluZSAgVFBGSUZPICAgICAweDAwMDAwMDBmVQorI2RlZmluZSBNUFNfQ01OX0NUTF9BCTB4OTAwMAogCi0jZGVmaW5lIE1QU19TVEFUX1BFUlJfSU5UX0NBVVNFX1NSQU0gMHg5NjE0Ci0jZGVmaW5lIE1QU19TVEFUX1BFUlJfSU5UX0NBVVNFX1RYX0ZJRk8gMHg5NjIwCi0jZGVmaW5lIE1QU19TVEFUX1BFUlJfSU5UX0NBVVNFX1JYX0ZJRk8gMHg5NjJjCisjZGVmaW5lIE5VTVBPUlRTX1MgICAgMAorI2RlZmluZSBOVU1QT1JUU19NICAgIDB4M1UKKyNkZWZpbmUgTlVNUE9SVFNfRyh4KSAoKCh4KSA+PiBOVU1QT1JUU19TKSAmIE5VTVBPUlRTX00pCisKKyNkZWZpbmUgTVBTX0lOVF9DQVVTRV9BIDB4OTAwOAorI2RlZmluZSBNUFNfVFhfSU5UX0NBVVNFX0EgMHg5NDA4CisKKyNkZWZpbmUgRlJNRVJSX1MgICAgMTUKKyNkZWZpbmUgRlJNRVJSX1YoeCkgKCh4KSA8PCBGUk1FUlJfUykKKyNkZWZpbmUgRlJNRVJSX0YgICAgRlJNRVJSX1YoMVUpCisKKyNkZWZpbmUgU0VDTlRFUlJfUyAgICAxNAorI2RlZmluZSBTRUNOVEVSUl9WKHgpICgoeCkgPDwgU0VDTlRFUlJfUykKKyNkZWZpbmUgU0VDTlRFUlJfRiAgICBTRUNOVEVSUl9WKDFVKQorCisjZGVmaW5lIEJVQkJMRV9TICAgIDEzCisjZGVmaW5lIEJVQkJMRV9WKHgpICgoeCkgPDwgQlVCQkxFX1MpCisjZGVmaW5lIEJVQkJMRV9GICAgIEJVQkJMRV9WKDFVKQorCisjZGVmaW5lIFRYREVTQ0ZJRk9fUyAgICA5CisjZGVmaW5lIFRYREVTQ0ZJRk9fTSAgICAweGZVCisjZGVmaW5lIFRYREVTQ0ZJRk9fVih4KSAoKHgpIDw8IFRYREVTQ0ZJRk9fUykKKworI2RlZmluZSBUWERBVEFGSUZPX1MgICAgNQorI2RlZmluZSBUWERBVEFGSUZPX00gICAgMHhmVQorI2RlZmluZSBUWERBVEFGSUZPX1YoeCkgKCh4KSA8PCBUWERBVEFGSUZPX1MpCisKKyNkZWZpbmUgTkNTSUZJRk9fUyAgICA0CisjZGVmaW5lIE5DU0lGSUZPX1YoeCkgKCh4KSA8PCBOQ1NJRklGT19TKQorI2RlZmluZSBOQ1NJRklGT19GICAgIE5DU0lGSUZPX1YoMVUpCisKKyNkZWZpbmUgVFBGSUZPX1MgICAgMAorI2RlZmluZSBUUEZJRk9fTSAgICAweGZVCisjZGVmaW5lIFRQRklGT19WKHgpICgoeCkgPDwgVFBGSUZPX1MpCisKKyNkZWZpbmUgTVBTX1NUQVRfUEVSUl9JTlRfQ0FVU0VfU1JBTV9BCQkweDk2MTQKKyNkZWZpbmUgTVBTX1NUQVRfUEVSUl9JTlRfQ0FVU0VfVFhfRklGT19BCTB4OTYyMAorI2RlZmluZSBNUFNfU1RBVF9QRVJSX0lOVF9DQVVTRV9SWF9GSUZPX0EJMHg5NjJjCiAKICNkZWZpbmUgTVBTX1NUQVRfUlhfQkdfMF9NQUNfRFJPUF9GUkFNRV9MIDB4OTY0MAogI2RlZmluZSBNUFNfU1RBVF9SWF9CR18wX01BQ19EUk9QX0ZSQU1FX0ggMHg5NjQ0CkBAIC0xMDI3LDI5NCArMTcwNyw4NTEgQEAKICNkZWZpbmUgTVBTX1NUQVRfUlhfQkdfMl9MQl9UUlVOQ19GUkFNRV9IIDB4OTZiNAogI2RlZmluZSBNUFNfU1RBVF9SWF9CR18zX0xCX1RSVU5DX0ZSQU1FX0wgMHg5NmI4CiAjZGVmaW5lIE1QU19TVEFUX1JYX0JHXzNfTEJfVFJVTkNfRlJBTUVfSCAweDk2YmMKLSNkZWZpbmUgTVBTX1RSQ19DRkcgMHg5ODAwCi0jZGVmaW5lICBUUkNGSUZPRU1QVFkgICAgICAgMHgwMDAwMDAxMFUKLSNkZWZpbmUgIFRSQ0lHTk9SRURST1BJTlBVVCAweDAwMDAwMDA4VQotI2RlZmluZSAgVFJDS0VFUERVUExJQ0FURVMgIDB4MDAwMDAwMDRVCi0jZGVmaW5lICBUUkNFTiAgICAgICAgICAgICAgMHgwMDAwMDAwMlUKLSNkZWZpbmUgIFRSQ01VTFRJRklMVEVSICAgICAweDAwMDAwMDAxVQogCi0jZGVmaW5lIE1QU19UUkNfUlNTX0NPTlRST0wgMHg5ODA4Ci0jZGVmaW5lIE1QU19UNV9UUkNfUlNTX0NPTlRST0wgMHhhMDBjCi0jZGVmaW5lICBSU1NDT05UUk9MX01BU0sgICAgMHgwMGZmMDAwMFUKLSNkZWZpbmUgIFJTU0NPTlRST0xfU0hJRlQgICAxNgotI2RlZmluZSAgUlNTQ09OVFJPTCh4KSAgICAgICgoeCkgPDwgUlNTQ09OVFJPTF9TSElGVCkKLSNkZWZpbmUgIFFVRVVFTlVNQkVSX01BU0sgICAweDAwMDBmZmZmVQotI2RlZmluZSAgUVVFVUVOVU1CRVJfU0hJRlQgIDAKLSNkZWZpbmUgIFFVRVVFTlVNQkVSKHgpICAgICAoKHgpIDw8IFFVRVVFTlVNQkVSX1NISUZUKQorI2RlZmluZSBNUFNfVFJDX0NGR19BIDB4OTgwMAogCi0jZGVmaW5lIE1QU19UUkNfRklMVEVSX01BVENIX0NUTF9BIDB4OTgxMAotI2RlZmluZSAgVEZJTlZFUlRNQVRDSCAgIDB4MDEwMDAwMDBVCi0jZGVmaW5lICBURlBLVFRPT0xBUkdFICAgMHgwMDgwMDAwMFUKLSNkZWZpbmUgIFRGRU4gICAgICAgICAgICAweDAwNDAwMDAwVQotI2RlZmluZSAgVEZQT1JUX01BU0sgICAgIDB4MDAzYzAwMDBVCi0jZGVmaW5lICBURlBPUlRfU0hJRlQgICAgMTgKLSNkZWZpbmUgIFRGUE9SVCh4KSAgICAgICAoKHgpIDw8IFRGUE9SVF9TSElGVCkKLSNkZWZpbmUgIFRGUE9SVF9HRVQoeCkgICAoKCh4KSAmIFRGUE9SVF9NQVNLKSA+PiBURlBPUlRfU0hJRlQpCi0jZGVmaW5lICBURkRST1AgICAgICAgICAgMHgwMDAyMDAwMFUKLSNkZWZpbmUgIFRGU09QRU9QRVJSICAgICAweDAwMDEwMDAwVQotI2RlZmluZSAgVEZMRU5HVEhfTUFTSyAgIDB4MDAwMDFmMDBVCi0jZGVmaW5lICBURkxFTkdUSF9TSElGVCAgOAotI2RlZmluZSAgVEZMRU5HVEgoeCkgICAgICgoeCkgPDwgVEZMRU5HVEhfU0hJRlQpCi0jZGVmaW5lICBURkxFTkdUSF9HRVQoeCkgKCgoeCkgJiBURkxFTkdUSF9NQVNLKSA+PiBURkxFTkdUSF9TSElGVCkKLSNkZWZpbmUgIFRGT0ZGU0VUX01BU0sgICAweDAwMDAwMDFmVQotI2RlZmluZSAgVEZPRkZTRVRfU0hJRlQgIDAKLSNkZWZpbmUgIFRGT0ZGU0VUKHgpICAgICAoKHgpIDw8IFRGT0ZGU0VUX1NISUZUKQotI2RlZmluZSAgVEZPRkZTRVRfR0VUKHgpICgoKHgpICYgVEZPRkZTRVRfTUFTSykgPj4gVEZPRkZTRVRfU0hJRlQpCisjZGVmaW5lIFRSQ0ZJRk9FTVBUWV9TICAgIDQKKyNkZWZpbmUgVFJDRklGT0VNUFRZX1YoeCkgKCh4KSA8PCBUUkNGSUZPRU1QVFlfUykKKyNkZWZpbmUgVFJDRklGT0VNUFRZX0YgICAgVFJDRklGT0VNUFRZX1YoMVUpCiAKLSNkZWZpbmUgTVBTX1RSQ19GSUxURVJfTUFUQ0hfQ1RMX0IgMHg5ODIwCi0jZGVmaW5lICBURk1JTlBLVFNJWkVfTUFTSyAgIDB4MDFmZjAwMDBVCi0jZGVmaW5lICBURk1JTlBLVFNJWkVfU0hJRlQgIDE2Ci0jZGVmaW5lICBURk1JTlBLVFNJWkUoeCkgICAgICgoeCkgPDwgVEZNSU5QS1RTSVpFX1NISUZUKQotI2RlZmluZSAgVEZNSU5QS1RTSVpFX0dFVCh4KSAoKCh4KSAmIFRGTUlOUEtUU0laRV9NQVNLKSA+PiBURk1JTlBLVFNJWkVfU0hJRlQpCi0jZGVmaW5lICBURkNBUFRVUkVNQVhfTUFTSyAgIDB4MDAwMDNmZmZVCi0jZGVmaW5lICBURkNBUFRVUkVNQVhfU0hJRlQgIDAKLSNkZWZpbmUgIFRGQ0FQVFVSRU1BWCh4KSAgICAgKCh4KSA8PCBURkNBUFRVUkVNQVhfU0hJRlQpCi0jZGVmaW5lICBURkNBUFRVUkVNQVhfR0VUKHgpICgoKHgpICYgVEZDQVBUVVJFTUFYX01BU0spID4+IFRGQ0FQVFVSRU1BWF9TSElGVCkKKyNkZWZpbmUgVFJDSUdOT1JFRFJPUElOUFVUX1MgICAgMworI2RlZmluZSBUUkNJR05PUkVEUk9QSU5QVVRfVih4KSAoKHgpIDw8IFRSQ0lHTk9SRURST1BJTlBVVF9TKQorI2RlZmluZSBUUkNJR05PUkVEUk9QSU5QVVRfRiAgICBUUkNJR05PUkVEUk9QSU5QVVRfVigxVSkKIAotI2RlZmluZSBNUFNfVFJDX0lOVF9DQVVTRSAweDk4NWMKLSNkZWZpbmUgIE1JU0NQRVJSIDB4MDAwMDAxMDBVCi0jZGVmaW5lICBQS1RGSUZPICAweDAwMDAwMGYwVQotI2RlZmluZSAgRklMVE1FTSAgMHgwMDAwMDAwZlUKKyNkZWZpbmUgVFJDS0VFUERVUExJQ0FURVNfUyAgICAyCisjZGVmaW5lIFRSQ0tFRVBEVVBMSUNBVEVTX1YoeCkgKCh4KSA8PCBUUkNLRUVQRFVQTElDQVRFU19TKQorI2RlZmluZSBUUkNLRUVQRFVQTElDQVRFU19GICAgIFRSQ0tFRVBEVVBMSUNBVEVTX1YoMVUpCiAKLSNkZWZpbmUgTVBTX1RSQ19GSUxURVIwX01BVENIIDB4OWMwMAotI2RlZmluZSBNUFNfVFJDX0ZJTFRFUjBfRE9OVF9DQVJFIDB4OWM4MAotI2RlZmluZSBNUFNfVFJDX0ZJTFRFUjFfTUFUQ0ggMHg5ZDAwCi0jZGVmaW5lIE1QU19DTFNfSU5UX0NBVVNFIDB4ZDAyOAotI2RlZmluZSAgUExFUlJFTkIgIDB4MDAwMDAwMDhVCi0jZGVmaW5lICBIQVNIU1JBTSAgMHgwMDAwMDAwNFUKLSNkZWZpbmUgIE1BVENIVENBTSAweDAwMDAwMDAyVQotI2RlZmluZSAgTUFUQ0hTUkFNIDB4MDAwMDAwMDFVCisjZGVmaW5lIFRSQ0VOX1MgICAgMQorI2RlZmluZSBUUkNFTl9WKHgpICgoeCkgPDwgVFJDRU5fUykKKyNkZWZpbmUgVFJDRU5fRiAgICBUUkNFTl9WKDFVKQogCi0jZGVmaW5lIE1QU19SWF9QRVJSX0lOVF9DQVVTRSAweDExMDc0CisjZGVmaW5lIFRSQ01VTFRJRklMVEVSX1MgICAgMAorI2RlZmluZSBUUkNNVUxUSUZJTFRFUl9WKHgpICgoeCkgPDwgVFJDTVVMVElGSUxURVJfUykKKyNkZWZpbmUgVFJDTVVMVElGSUxURVJfRiAgICBUUkNNVUxUSUZJTFRFUl9WKDFVKQogCi0jZGVmaW5lIENQTF9JTlRSX0NBVVNFIDB4MTkwNTQKLSNkZWZpbmUgIENJTV9PUF9NQVBfUEVSUiAgIDB4MDAwMDAwMjBVCi0jZGVmaW5lICBDSU1fT1ZGTF9FUlJPUiAgICAweDAwMDAwMDEwVQotI2RlZmluZSAgVFBfRlJBTUlOR19FUlJPUiAgMHgwMDAwMDAwOFUKLSNkZWZpbmUgIFNHRV9GUkFNSU5HX0VSUk9SIDB4MDAwMDAwMDRVCi0jZGVmaW5lICBDSU1fRlJBTUlOR19FUlJPUiAweDAwMDAwMDAyVQotI2RlZmluZSAgWkVST19TV0lUQ0hfRVJST1IgMHgwMDAwMDAwMVUKKyNkZWZpbmUgTVBTX1RSQ19SU1NfQ09OVFJPTF9BCQkweDk4MDgKKyNkZWZpbmUgTVBTX1Q1X1RSQ19SU1NfQ09OVFJPTF9BCTB4YTAwYwogCi0jZGVmaW5lIFNNQl9JTlRfQ0FVU0UgMHgxOTA5MAotI2RlZmluZSAgTVNUVFhGSUZPUEFSSU5UIDB4MDAyMDAwMDBVCi0jZGVmaW5lICBNU1RSWEZJRk9QQVJJTlQgMHgwMDEwMDAwMFUKLSNkZWZpbmUgIFNMVkZJRk9QQVJJTlQgICAweDAwMDgwMDAwVQorI2RlZmluZSBSU1NDT05UUk9MX1MgICAgMTYKKyNkZWZpbmUgUlNTQ09OVFJPTF9WKHgpICgoeCkgPDwgUlNTQ09OVFJPTF9TKQogCi0jZGVmaW5lIFVMUF9SWF9JTlRfQ0FVU0UgMHgxOTE1OAotI2RlZmluZSBVTFBfUlhfSVNDU0lfVEFHTUFTSyAweDE5MTY0Ci0jZGVmaW5lIFVMUF9SWF9JU0NTSV9QU1ogMHgxOTE2OAotI2RlZmluZSAgSFBaM19NQVNLICAgMHgwZjAwMDAwMFUKLSNkZWZpbmUgIEhQWjNfU0hJRlQgIDI0Ci0jZGVmaW5lICBIUFozKHgpICAgICAoKHgpIDw8IEhQWjNfU0hJRlQpCi0jZGVmaW5lICBIUFoyX01BU0sgICAweDAwMGYwMDAwVQotI2RlZmluZSAgSFBaMl9TSElGVCAgMTYKLSNkZWZpbmUgIEhQWjIoeCkgICAgICgoeCkgPDwgSFBaMl9TSElGVCkKLSNkZWZpbmUgIEhQWjFfTUFTSyAgIDB4MDAwMDBmMDBVCi0jZGVmaW5lICBIUFoxX1NISUZUICA4Ci0jZGVmaW5lICBIUFoxKHgpICAgICAoKHgpIDw8IEhQWjFfU0hJRlQpCi0jZGVmaW5lICBIUFowX01BU0sgICAweDAwMDAwMDBmVQotI2RlZmluZSAgSFBaMF9TSElGVCAgMAotI2RlZmluZSAgSFBaMCh4KSAgICAgKCh4KSA8PCBIUFowX1NISUZUKQorI2RlZmluZSBRVUVVRU5VTUJFUl9TICAgIDAKKyNkZWZpbmUgUVVFVUVOVU1CRVJfVih4KSAoKHgpIDw8IFFVRVVFTlVNQkVSX1MpCiAKLSNkZWZpbmUgVUxQX1JYX1RERFBfUFNaIDB4MTkxNzgKKyNkZWZpbmUgVFBfUlNTX0NPTkZJR19BIDB4N2RmMAogCi0jZGVmaW5lIFNGX0RBVEEgMHgxOTNmOAotI2RlZmluZSBTRl9PUCAweDE5M2ZjCi0jZGVmaW5lICBTRl9CVVNZICAgICAgIDB4ODAwMDAwMDBVCi0jZGVmaW5lICBTRl9MT0NLICAgICAgIDB4MDAwMDAwMTBVCi0jZGVmaW5lICBTRl9DT05UICAgICAgIDB4MDAwMDAwMDhVCi0jZGVmaW5lICBCWVRFQ05UX01BU0sgIDB4MDAwMDAwMDZVCi0jZGVmaW5lICBCWVRFQ05UX1NISUZUIDEKLSNkZWZpbmUgIEJZVEVDTlQoeCkgICAgKCh4KSA8PCBCWVRFQ05UX1NISUZUKQotI2RlZmluZSAgT1BfV1IgICAgICAgICAweDAwMDAwMDAxVQorI2RlZmluZSBUTkw0VFVQRU5JUFY2X1MgICAgMzEKKyNkZWZpbmUgVE5MNFRVUEVOSVBWNl9WKHgpICgoeCkgPDwgVE5MNFRVUEVOSVBWNl9TKQorI2RlZmluZSBUTkw0VFVQRU5JUFY2X0YgICAgVE5MNFRVUEVOSVBWNl9WKDFVKQogCi0jZGVmaW5lIFBMX1BGX0lOVF9DQVVTRSAweDNjMAotI2RlZmluZSAgUEZTVyAgMHgwMDAwMDAwOFUKLSNkZWZpbmUgIFBGU0dFIDB4MDAwMDAwMDRVCi0jZGVmaW5lICBQRkNJTSAweDAwMDAwMDAyVQotI2RlZmluZSAgUEZNUFMgMHgwMDAwMDAwMVUKKyNkZWZpbmUgVE5MMlRVUEVOSVBWNl9TICAgIDMwCisjZGVmaW5lIFROTDJUVVBFTklQVjZfVih4KSAoKHgpIDw8IFROTDJUVVBFTklQVjZfUykKKyNkZWZpbmUgVE5MMlRVUEVOSVBWNl9GICAgIFROTDJUVVBFTklQVjZfVigxVSkKIAotI2RlZmluZSBQTF9QRl9JTlRfRU5BQkxFIDB4M2M0Ci0jZGVmaW5lIFBMX1BGX0NUTCAweDNjOAotI2RlZmluZSAgU1dJTlQgMHgwMDAwMDAwMVUKKyNkZWZpbmUgVE5MNFRVUEVOSVBWNF9TICAgIDI5CisjZGVmaW5lIFROTDRUVVBFTklQVjRfVih4KSAoKHgpIDw8IFROTDRUVVBFTklQVjRfUykKKyNkZWZpbmUgVE5MNFRVUEVOSVBWNF9GICAgIFROTDRUVVBFTklQVjRfVigxVSkKIAotI2RlZmluZSBQTF9XSE9BTUkgMHgxOTQwMAotI2RlZmluZSAgU09VUkNFUEZfTUFTSyAgIDB4MDAwMDA3MDBVCi0jZGVmaW5lICBTT1VSQ0VQRl9TSElGVCAgOAotI2RlZmluZSAgU09VUkNFUEYoeCkgICAgICgoeCkgPDwgU09VUkNFUEZfU0hJRlQpCi0jZGVmaW5lICBTT1VSQ0VQRl9HRVQoeCkgKCgoeCkgJiBTT1VSQ0VQRl9NQVNLKSA+PiBTT1VSQ0VQRl9TSElGVCkKLSNkZWZpbmUgIElTVkYgICAgICAgICAgICAweDAwMDAwMDgwVQotI2RlZmluZSAgVkZJRF9NQVNLICAgICAgIDB4MDAwMDAwN2ZVCi0jZGVmaW5lICBWRklEX1NISUZUICAgICAgMAotI2RlZmluZSAgVkZJRCh4KSAgICAgICAgICgoeCkgPDwgVkZJRF9TSElGVCkKLSNkZWZpbmUgIFZGSURfR0VUKHgpICAgICAoKCh4KSAmIFZGSURfTUFTSykgPj4gVkZJRF9TSElGVCkKKyNkZWZpbmUgVE5MMlRVUEVOSVBWNF9TICAgIDI4CisjZGVmaW5lIFROTDJUVVBFTklQVjRfVih4KSAoKHgpIDw8IFROTDJUVVBFTklQVjRfUykKKyNkZWZpbmUgVE5MMlRVUEVOSVBWNF9GICAgIFROTDJUVVBFTklQVjRfVigxVSkKIAotI2RlZmluZSBQTF9JTlRfQ0FVU0UgMHgxOTQwYwotI2RlZmluZSAgVUxQX1RYICAgICAweDA4MDAwMDAwVQotI2RlZmluZSAgU0dFICAgICAgICAweDA0MDAwMDAwVQotI2RlZmluZSAgSE1BICAgICAgICAweDAyMDAwMDAwVQotI2RlZmluZSAgQ1BMX1NXSVRDSCAweDAxMDAwMDAwVQotI2RlZmluZSAgVUxQX1JYICAgICAweDAwODAwMDAwVQotI2RlZmluZSAgUE1fUlggICAgICAweDAwNDAwMDAwVQotI2RlZmluZSAgUE1fVFggICAgICAweDAwMjAwMDAwVQotI2RlZmluZSAgTUEgICAgICAgICAweDAwMTAwMDAwVQotI2RlZmluZSAgVFAgICAgICAgICAweDAwMDgwMDAwVQotI2RlZmluZSAgTEUgICAgICAgICAweDAwMDQwMDAwVQotI2RlZmluZSAgRURDMSAgICAgICAweDAwMDIwMDAwVQotI2RlZmluZSAgRURDMCAgICAgICAweDAwMDEwMDAwVQotI2RlZmluZSAgTUMgICAgICAgICAweDAwMDA4MDAwVQotI2RlZmluZSAgUENJRSAgICAgICAweDAwMDA0MDAwVQotI2RlZmluZSAgUE1VICAgICAgICAweDAwMDAyMDAwVQotI2RlZmluZSAgWEdNQUNfS1IxICAweDAwMDAxMDAwVQotI2RlZmluZSAgWEdNQUNfS1IwICAweDAwMDAwODAwVQotI2RlZmluZSAgWEdNQUMxICAgICAweDAwMDAwNDAwVQotI2RlZmluZSAgWEdNQUMwICAgICAweDAwMDAwMjAwVQotI2RlZmluZSAgU01CICAgICAgICAweDAwMDAwMTAwVQotI2RlZmluZSAgU0YgICAgICAgICAweDAwMDAwMDgwVQotI2RlZmluZSAgUEwgICAgICAgICAweDAwMDAwMDQwVQotI2RlZmluZSAgTkNTSSAgICAgICAweDAwMDAwMDIwVQotI2RlZmluZSAgTVBTICAgICAgICAweDAwMDAwMDEwVQotI2RlZmluZSAgTUkgICAgICAgICAweDAwMDAwMDA4VQotI2RlZmluZSAgREJHICAgICAgICAweDAwMDAwMDA0VQotI2RlZmluZSAgSTJDTSAgICAgICAweDAwMDAwMDAyVQotI2RlZmluZSAgQ0lNICAgICAgICAweDAwMDAwMDAxVQorI2RlZmluZSBUTkxUQ1BTRUxfUyAgICAyNworI2RlZmluZSBUTkxUQ1BTRUxfVih4KSAoKHgpIDw8IFROTFRDUFNFTF9TKQorI2RlZmluZSBUTkxUQ1BTRUxfRiAgICBUTkxUQ1BTRUxfVigxVSkKIAotI2RlZmluZSBNQzEgMHgzMQotI2RlZmluZSBQTF9JTlRfRU5BQkxFIDB4MTk0MTAKLSNkZWZpbmUgUExfSU5UX01BUDAgMHgxOTQxNAotI2RlZmluZSBQTF9SU1QgMHgxOTQyOAotI2RlZmluZSAgUElPUlNUICAgICAweDAwMDAwMDAyVQotI2RlZmluZSAgUElPUlNUTU9ERSAweDAwMDAwMDAxVQorI2RlZmluZSBUTkxJUDZTRUxfUyAgICAyNgorI2RlZmluZSBUTkxJUDZTRUxfVih4KSAoKHgpIDw8IFROTElQNlNFTF9TKQorI2RlZmluZSBUTkxJUDZTRUxfRiAgICBUTkxJUDZTRUxfVigxVSkKIAotI2RlZmluZSBQTF9QTF9JTlRfQ0FVU0UgMHgxOTQzMAotI2RlZmluZSAgRkFUQUxQRVJSIDB4MDAwMDAwMTBVCi0jZGVmaW5lICBQRVJSVkZJRCAgMHgwMDAwMDAwMVUKKyNkZWZpbmUgVE5MVlJUU0VMX1MgICAgMjUKKyNkZWZpbmUgVE5MVlJUU0VMX1YoeCkgKCh4KSA8PCBUTkxWUlRTRUxfUykKKyNkZWZpbmUgVE5MVlJUU0VMX0YgICAgVE5MVlJUU0VMX1YoMVUpCiAKLSNkZWZpbmUgUExfUkVWIDB4MTk0M2MKKyNkZWZpbmUgVE5MTUFQRU5fUyAgICAyNAorI2RlZmluZSBUTkxNQVBFTl9WKHgpICgoeCkgPDwgVE5MTUFQRU5fUykKKyNkZWZpbmUgVE5MTUFQRU5fRiAgICBUTkxNQVBFTl9WKDFVKQogCi0jZGVmaW5lIFNfUkVWICAgIDAKLSNkZWZpbmUgTV9SRVYgICAgMHhmVQotI2RlZmluZSBWX1JFVih4KSAoKHgpIDw8IFNfUkVWKQotI2RlZmluZSBHX1JFVih4KSAoKCh4KSA+PiBTX1JFVikgJiBNX1JFVikKKyNkZWZpbmUgT0ZESEFTSFNBVkVfUyAgICAxOQorI2RlZmluZSBPRkRIQVNIU0FWRV9WKHgpICgoeCkgPDwgT0ZESEFTSFNBVkVfUykKKyNkZWZpbmUgT0ZESEFTSFNBVkVfRiAgICBPRkRIQVNIU0FWRV9WKDFVKQogCi0jZGVmaW5lIExFX0RCX0NPTkZJRyAweDE5YzA0Ci0jZGVmaW5lICBIQVNIRU4gMHgwMDEwMDAwMFUKKyNkZWZpbmUgT0ZEVlJUU0VMX1MgICAgMTgKKyNkZWZpbmUgT0ZEVlJUU0VMX1YoeCkgKCh4KSA8PCBPRkRWUlRTRUxfUykKKyNkZWZpbmUgT0ZEVlJUU0VMX0YgICAgT0ZEVlJUU0VMX1YoMVUpCiAKLSNkZWZpbmUgTEVfREJfU0VSVkVSX0lOREVYIDB4MTljMTgKLSNkZWZpbmUgTEVfREJfQUNUX0NOVF9JUFY0IDB4MTljMjAKLSNkZWZpbmUgTEVfREJfQUNUX0NOVF9JUFY2IDB4MTljMjQKKyNkZWZpbmUgT0ZETUFQRU5fUyAgICAxNworI2RlZmluZSBPRkRNQVBFTl9WKHgpICgoeCkgPDwgT0ZETUFQRU5fUykKKyNkZWZpbmUgT0ZETUFQRU5fRiAgICBPRkRNQVBFTl9WKDFVKQogCi0jZGVmaW5lIExFX0RCX0lOVF9DQVVTRSAweDE5YzNjCi0jZGVmaW5lICBSRVFRUEFSRVJSIDB4MDAwMTAwMDBVCi0jZGVmaW5lICBVTktOT1dOQ01EIDB4MDAwMDgwMDBVCi0jZGVmaW5lICBQQVJJVFlFUlIgIDB4MDAwMDAwNDBVCi0jZGVmaW5lICBMSVBNSVNTICAgIDB4MDAwMDAwMjBVCi0jZGVmaW5lICBMSVAwICAgICAgIDB4MDAwMDAwMTBVCisjZGVmaW5lIE9GRExLUEVOX1MgICAgMTYKKyNkZWZpbmUgT0ZETEtQRU5fVih4KSAoKHgpIDw8IE9GRExLUEVOX1MpCisjZGVmaW5lIE9GRExLUEVOX0YgICAgT0ZETEtQRU5fVigxVSkKIAotI2RlZmluZSBMRV9EQl9USURfSEFTSEJBU0UgMHgxOWRmOAorI2RlZmluZSBTWU40VFVQRU5JUFY2X1MgICAgMTUKKyNkZWZpbmUgU1lONFRVUEVOSVBWNl9WKHgpICgoeCkgPDwgU1lONFRVUEVOSVBWNl9TKQorI2RlZmluZSBTWU40VFVQRU5JUFY2X0YgICAgU1lONFRVUEVOSVBWNl9WKDFVKQogCi0jZGVmaW5lIE5DU0lfSU5UX0NBVVNFIDB4MWEwZDgKLSNkZWZpbmUgIENJTV9ETV9QUlRZX0VSUiAweDAwMDAwMTAwVQotI2RlZmluZSAgTVBTX0RNX1BSVFlfRVJSIDB4MDAwMDAwODBVCi0jZGVmaW5lICBUWEZJRk9fUFJUWV9FUlIgMHgwMDAwMDAwMlUKLSNkZWZpbmUgIFJYRklGT19QUlRZX0VSUiAweDAwMDAwMDAxVQorI2RlZmluZSBTWU4yVFVQRU5JUFY2X1MgICAgMTQKKyNkZWZpbmUgU1lOMlRVUEVOSVBWNl9WKHgpICgoeCkgPDwgU1lOMlRVUEVOSVBWNl9TKQorI2RlZmluZSBTWU4yVFVQRU5JUFY2X0YgICAgU1lOMlRVUEVOSVBWNl9WKDFVKQogCi0jZGVmaW5lIFhHTUFDX1BPUlRfQ0ZHMiAweDEwMTgKLSNkZWZpbmUgIFBBVEVOICAgMHgwMDA0MDAwMFUKLSNkZWZpbmUgIE1BR0lDRU4gMHgwMDAyMDAwMFUKKyNkZWZpbmUgU1lONFRVUEVOSVBWNF9TICAgIDEzCisjZGVmaW5lIFNZTjRUVVBFTklQVjRfVih4KSAoKHgpIDw8IFNZTjRUVVBFTklQVjRfUykKKyNkZWZpbmUgU1lONFRVUEVOSVBWNF9GICAgIFNZTjRUVVBFTklQVjRfVigxVSkKKworI2RlZmluZSBTWU4yVFVQRU5JUFY0X1MgICAgMTIKKyNkZWZpbmUgU1lOMlRVUEVOSVBWNF9WKHgpICgoeCkgPDwgU1lOMlRVUEVOSVBWNF9TKQorI2RlZmluZSBTWU4yVFVQRU5JUFY0X0YgICAgU1lOMlRVUEVOSVBWNF9WKDFVKQorCisjZGVmaW5lIFNZTklQNlNFTF9TICAgIDExCisjZGVmaW5lIFNZTklQNlNFTF9WKHgpICgoeCkgPDwgU1lOSVA2U0VMX1MpCisjZGVmaW5lIFNZTklQNlNFTF9GICAgIFNZTklQNlNFTF9WKDFVKQorCisjZGVmaW5lIFNZTlZSVFNFTF9TICAgIDEwCisjZGVmaW5lIFNZTlZSVFNFTF9WKHgpICgoeCkgPDwgU1lOVlJUU0VMX1MpCisjZGVmaW5lIFNZTlZSVFNFTF9GICAgIFNZTlZSVFNFTF9WKDFVKQorCisjZGVmaW5lIFNZTk1BUEVOX1MgICAgOQorI2RlZmluZSBTWU5NQVBFTl9WKHgpICgoeCkgPDwgU1lOTUFQRU5fUykKKyNkZWZpbmUgU1lOTUFQRU5fRiAgICBTWU5NQVBFTl9WKDFVKQorCisjZGVmaW5lIFNZTkxLUEVOX1MgICAgOAorI2RlZmluZSBTWU5MS1BFTl9WKHgpICgoeCkgPDwgU1lOTEtQRU5fUykKKyNkZWZpbmUgU1lOTEtQRU5fRiAgICBTWU5MS1BFTl9WKDFVKQorCisjZGVmaW5lIENIQU5ORUxFTkFCTEVfUyAgICA3CisjZGVmaW5lIENIQU5ORUxFTkFCTEVfVih4KSAoKHgpIDw8IENIQU5ORUxFTkFCTEVfUykKKyNkZWZpbmUgQ0hBTk5FTEVOQUJMRV9GICAgIENIQU5ORUxFTkFCTEVfVigxVSkKKworI2RlZmluZSBQT1JURU5BQkxFX1MgICAgNgorI2RlZmluZSBQT1JURU5BQkxFX1YoeCkgKCh4KSA8PCBQT1JURU5BQkxFX1MpCisjZGVmaW5lIFBPUlRFTkFCTEVfRiAgICBQT1JURU5BQkxFX1YoMVUpCisKKyNkZWZpbmUgVE5MQUxMTE9PS1VQX1MgICAgNQorI2RlZmluZSBUTkxBTExMT09LVVBfVih4KSAoKHgpIDw8IFROTEFMTExPT0tVUF9TKQorI2RlZmluZSBUTkxBTExMT09LVVBfRiAgICBUTkxBTExMT09LVVBfVigxVSkKKworI2RlZmluZSBWSVJURU5BQkxFX1MgICAgNAorI2RlZmluZSBWSVJURU5BQkxFX1YoeCkgKCh4KSA8PCBWSVJURU5BQkxFX1MpCisjZGVmaW5lIFZJUlRFTkFCTEVfRiAgICBWSVJURU5BQkxFX1YoMVUpCisKKyNkZWZpbmUgQ09OR0VTVElPTkVOQUJMRV9TICAgIDMKKyNkZWZpbmUgQ09OR0VTVElPTkVOQUJMRV9WKHgpICgoeCkgPDwgQ09OR0VTVElPTkVOQUJMRV9TKQorI2RlZmluZSBDT05HRVNUSU9ORU5BQkxFX0YgICAgQ09OR0VTVElPTkVOQUJMRV9WKDFVKQorCisjZGVmaW5lIEhBU0hUT0VQTElUWl9TICAgIDIKKyNkZWZpbmUgSEFTSFRPRVBMSVRaX1YoeCkgKCh4KSA8PCBIQVNIVE9FUExJVFpfUykKKyNkZWZpbmUgSEFTSFRPRVBMSVRaX0YgICAgSEFTSFRPRVBMSVRaX1YoMVUpCisKKyNkZWZpbmUgVURQRU5BQkxFX1MgICAgMQorI2RlZmluZSBVRFBFTkFCTEVfVih4KSAoKHgpIDw8IFVEUEVOQUJMRV9TKQorI2RlZmluZSBVRFBFTkFCTEVfRiAgICBVRFBFTkFCTEVfVigxVSkKKworI2RlZmluZSBESVNBQkxFX1MgICAgMAorI2RlZmluZSBESVNBQkxFX1YoeCkgKCh4KSA8PCBESVNBQkxFX1MpCisjZGVmaW5lIERJU0FCTEVfRiAgICBESVNBQkxFX1YoMVUpCisKKyNkZWZpbmUgVFBfUlNTX0NPTkZJR19UTkxfQSAweDdkZjQKKworI2RlZmluZSBNQVNLU0laRV9TICAgIDI4CisjZGVmaW5lIE1BU0tTSVpFX00gICAgMHhmVQorI2RlZmluZSBNQVNLU0laRV9WKHgpICgoeCkgPDwgTUFTS1NJWkVfUykKKyNkZWZpbmUgTUFTS1NJWkVfRyh4KSAoKCh4KSA+PiBNQVNLU0laRV9TKSAmIE1BU0tTSVpFX00pCisKKyNkZWZpbmUgTUFTS0ZJTFRFUl9TICAgIDE2CisjZGVmaW5lIE1BU0tGSUxURVJfTSAgICAweDdmZlUKKyNkZWZpbmUgTUFTS0ZJTFRFUl9WKHgpICgoeCkgPDwgTUFTS0ZJTFRFUl9TKQorI2RlZmluZSBNQVNLRklMVEVSX0coeCkgKCgoeCkgPj4gTUFTS0ZJTFRFUl9TKSAmIE1BU0tGSUxURVJfTSkKKworI2RlZmluZSBVU0VXSVJFQ0hfUyAgICAwCisjZGVmaW5lIFVTRVdJUkVDSF9WKHgpICgoeCkgPDwgVVNFV0lSRUNIX1MpCisjZGVmaW5lIFVTRVdJUkVDSF9GICAgIFVTRVdJUkVDSF9WKDFVKQorCisjZGVmaW5lIEhBU0hBTExfUyAgICAyCisjZGVmaW5lIEhBU0hBTExfVih4KSAoKHgpIDw8IEhBU0hBTExfUykKKyNkZWZpbmUgSEFTSEFMTF9GICAgIEhBU0hBTExfVigxVSkKKworI2RlZmluZSBIQVNIRVRIX1MgICAgMQorI2RlZmluZSBIQVNIRVRIX1YoeCkgKCh4KSA8PCBIQVNIRVRIX1MpCisjZGVmaW5lIEhBU0hFVEhfRiAgICBIQVNIRVRIX1YoMVUpCisKKyNkZWZpbmUgVFBfUlNTX0NPTkZJR19PRkRfQSAweDdkZjgKKworI2RlZmluZSBSUkNQTE1BUEVOX1MgICAgMjAKKyNkZWZpbmUgUlJDUExNQVBFTl9WKHgpICgoeCkgPDwgUlJDUExNQVBFTl9TKQorI2RlZmluZSBSUkNQTE1BUEVOX0YgICAgUlJDUExNQVBFTl9WKDFVKQorCisjZGVmaW5lIFJSQ1BMUVVFV0lEVEhfUyAgICAxNgorI2RlZmluZSBSUkNQTFFVRVdJRFRIX00gICAgMHhmVQorI2RlZmluZSBSUkNQTFFVRVdJRFRIX1YoeCkgKCh4KSA8PCBSUkNQTFFVRVdJRFRIX1MpCisjZGVmaW5lIFJSQ1BMUVVFV0lEVEhfRyh4KSAoKCh4KSA+PiBSUkNQTFFVRVdJRFRIX1MpICYgUlJDUExRVUVXSURUSF9NKQorCisjZGVmaW5lIFRQX1JTU19DT05GSUdfU1lOX0EgMHg3ZGZjCisjZGVmaW5lIFRQX1JTU19DT05GSUdfVlJUX0EgMHg3ZTAwCisKKyNkZWZpbmUgVkZSRFJHX1MgICAgMjUKKyNkZWZpbmUgVkZSRFJHX1YoeCkgKCh4KSA8PCBWRlJEUkdfUykKKyNkZWZpbmUgVkZSRFJHX0YgICAgVkZSRFJHX1YoMVUpCisKKyNkZWZpbmUgVkZSREVOX1MgICAgMjQKKyNkZWZpbmUgVkZSREVOX1YoeCkgKCh4KSA8PCBWRlJERU5fUykKKyNkZWZpbmUgVkZSREVOX0YgICAgVkZSREVOX1YoMVUpCisKKyNkZWZpbmUgVkZQRVJSRU5fUyAgICAyMworI2RlZmluZSBWRlBFUlJFTl9WKHgpICgoeCkgPDwgVkZQRVJSRU5fUykKKyNkZWZpbmUgVkZQRVJSRU5fRiAgICBWRlBFUlJFTl9WKDFVKQorCisjZGVmaW5lIEtFWVBFUlJFTl9TICAgIDIyCisjZGVmaW5lIEtFWVBFUlJFTl9WKHgpICgoeCkgPDwgS0VZUEVSUkVOX1MpCisjZGVmaW5lIEtFWVBFUlJFTl9GICAgIEtFWVBFUlJFTl9WKDFVKQorCisjZGVmaW5lIERJU0FCTEVWTEFOX1MgICAgMjEKKyNkZWZpbmUgRElTQUJMRVZMQU5fVih4KSAoKHgpIDw8IERJU0FCTEVWTEFOX1MpCisjZGVmaW5lIERJU0FCTEVWTEFOX0YgICAgRElTQUJMRVZMQU5fVigxVSkKKworI2RlZmluZSBFTkFCTEVVUDBfUyAgICAyMAorI2RlZmluZSBFTkFCTEVVUDBfVih4KSAoKHgpIDw8IEVOQUJMRVVQMF9TKQorI2RlZmluZSBFTkFCTEVVUDBfRiAgICBFTkFCTEVVUDBfVigxVSkKKworI2RlZmluZSBIQVNIREVMQVlfUyAgICAxNgorI2RlZmluZSBIQVNIREVMQVlfTSAgICAweGZVCisjZGVmaW5lIEhBU0hERUxBWV9WKHgpICgoeCkgPDwgSEFTSERFTEFZX1MpCisjZGVmaW5lIEhBU0hERUxBWV9HKHgpICgoKHgpID4+IEhBU0hERUxBWV9TKSAmIEhBU0hERUxBWV9NKQorCisjZGVmaW5lIFZGV1JBRERSX1MgICAgOAorI2RlZmluZSBWRldSQUREUl9NICAgIDB4N2ZVCisjZGVmaW5lIFZGV1JBRERSX1YoeCkgKCh4KSA8PCBWRldSQUREUl9TKQorI2RlZmluZSBWRldSQUREUl9HKHgpICgoKHgpID4+IFZGV1JBRERSX1MpICYgVkZXUkFERFJfTSkKKworI2RlZmluZSBLRVlNT0RFX1MgICAgNgorI2RlZmluZSBLRVlNT0RFX00gICAgMHgzVQorI2RlZmluZSBLRVlNT0RFX1YoeCkgKCh4KSA8PCBLRVlNT0RFX1MpCisjZGVmaW5lIEtFWU1PREVfRyh4KSAoKCh4KSA+PiBLRVlNT0RFX1MpICYgS0VZTU9ERV9NKQorCisjZGVmaW5lIFZGV1JFTl9TICAgIDUKKyNkZWZpbmUgVkZXUkVOX1YoeCkgKCh4KSA8PCBWRldSRU5fUykKKyNkZWZpbmUgVkZXUkVOX0YgICAgVkZXUkVOX1YoMVUpCisKKyNkZWZpbmUgS0VZV1JFTl9TICAgIDQKKyNkZWZpbmUgS0VZV1JFTl9WKHgpICgoeCkgPDwgS0VZV1JFTl9TKQorI2RlZmluZSBLRVlXUkVOX0YgICAgS0VZV1JFTl9WKDFVKQorCisjZGVmaW5lIEtFWVdSQUREUl9TICAgIDAKKyNkZWZpbmUgS0VZV1JBRERSX00gICAgMHhmVQorI2RlZmluZSBLRVlXUkFERFJfVih4KSAoKHgpIDw8IEtFWVdSQUREUl9TKQorI2RlZmluZSBLRVlXUkFERFJfRyh4KSAoKCh4KSA+PiBLRVlXUkFERFJfUykgJiBLRVlXUkFERFJfTSkKKworI2RlZmluZSBLRVlXUkFERFJYX1MgICAgMzAKKyNkZWZpbmUgS0VZV1JBRERSWF9NICAgIDB4M1UKKyNkZWZpbmUgS0VZV1JBRERSWF9WKHgpICgoeCkgPDwgS0VZV1JBRERSWF9TKQorI2RlZmluZSBLRVlXUkFERFJYX0coeCkgKCgoeCkgPj4gS0VZV1JBRERSWF9TKSAmIEtFWVdSQUREUlhfTSkKKworI2RlZmluZSBLRVlFWFRFTkRfUyAgICAyNgorI2RlZmluZSBLRVlFWFRFTkRfVih4KSAoKHgpIDw8IEtFWUVYVEVORF9TKQorI2RlZmluZSBLRVlFWFRFTkRfRiAgICBLRVlFWFRFTkRfVigxVSkKKworI2RlZmluZSBMS1BJRFhTSVpFX1MgICAgMjQKKyNkZWZpbmUgTEtQSURYU0laRV9NICAgIDB4M1UKKyNkZWZpbmUgTEtQSURYU0laRV9WKHgpICgoeCkgPDwgTEtQSURYU0laRV9TKQorI2RlZmluZSBMS1BJRFhTSVpFX0coeCkgKCgoeCkgPj4gTEtQSURYU0laRV9TKSAmIExLUElEWFNJWkVfTSkKKworI2RlZmluZSBUUF9SU1NfVkZMX0NPTkZJR19BIDB4M2EKKyNkZWZpbmUgVFBfUlNTX1ZGSF9DT05GSUdfQSAweDNiCisKKyNkZWZpbmUgRU5BQkxFVURQSEFTSF9TICAgIDMxCisjZGVmaW5lIEVOQUJMRVVEUEhBU0hfVih4KSAoKHgpIDw8IEVOQUJMRVVEUEhBU0hfUykKKyNkZWZpbmUgRU5BQkxFVURQSEFTSF9GICAgIEVOQUJMRVVEUEhBU0hfVigxVSkKKworI2RlZmluZSBWRlVQRU5fUyAgICAzMAorI2RlZmluZSBWRlVQRU5fVih4KSAoKHgpIDw8IFZGVVBFTl9TKQorI2RlZmluZSBWRlVQRU5fRiAgICBWRlVQRU5fVigxVSkKKworI2RlZmluZSBWRlZMTkVYX1MgICAgMjgKKyNkZWZpbmUgVkZWTE5FWF9WKHgpICgoeCkgPDwgVkZWTE5FWF9TKQorI2RlZmluZSBWRlZMTkVYX0YgICAgVkZWTE5FWF9WKDFVKQorCisjZGVmaW5lIFZGUFJURU5fUyAgICAyNworI2RlZmluZSBWRlBSVEVOX1YoeCkgKCh4KSA8PCBWRlBSVEVOX1MpCisjZGVmaW5lIFZGUFJURU5fRiAgICBWRlBSVEVOX1YoMVUpCisKKyNkZWZpbmUgVkZDSE5FTl9TICAgIDI2CisjZGVmaW5lIFZGQ0hORU5fVih4KSAoKHgpIDw8IFZGQ0hORU5fUykKKyNkZWZpbmUgVkZDSE5FTl9GICAgIFZGQ0hORU5fVigxVSkKKworI2RlZmluZSBERUZBVUxUUVVFVUVfUyAgICAxNgorI2RlZmluZSBERUZBVUxUUVVFVUVfTSAgICAweDNmZlUKKyNkZWZpbmUgREVGQVVMVFFVRVVFX0coeCkgKCgoeCkgPj4gREVGQVVMVFFVRVVFX1MpICYgREVGQVVMVFFVRVVFX00pCisKKyNkZWZpbmUgVkZJUDZUV09UVVBFTl9TICAgIDYKKyNkZWZpbmUgVkZJUDZUV09UVVBFTl9WKHgpICgoeCkgPDwgVkZJUDZUV09UVVBFTl9TKQorI2RlZmluZSBWRklQNlRXT1RVUEVOX0YgICAgVkZJUDZUV09UVVBFTl9WKDFVKQorCisjZGVmaW5lIFZGSVA0Rk9VUlRVUEVOX1MgICAgNQorI2RlZmluZSBWRklQNEZPVVJUVVBFTl9WKHgpICgoeCkgPDwgVkZJUDRGT1VSVFVQRU5fUykKKyNkZWZpbmUgVkZJUDRGT1VSVFVQRU5fRiAgICBWRklQNEZPVVJUVVBFTl9WKDFVKQorCisjZGVmaW5lIFZGSVA0VFdPVFVQRU5fUyAgICA0CisjZGVmaW5lIFZGSVA0VFdPVFVQRU5fVih4KSAoKHgpIDw8IFZGSVA0VFdPVFVQRU5fUykKKyNkZWZpbmUgVkZJUDRUV09UVVBFTl9GICAgIFZGSVA0VFdPVFVQRU5fVigxVSkKKworI2RlZmluZSBLRVlJTkRFWF9TICAgIDAKKyNkZWZpbmUgS0VZSU5ERVhfTSAgICAweGZVCisjZGVmaW5lIEtFWUlOREVYX0coeCkgKCgoeCkgPj4gS0VZSU5ERVhfUykgJiBLRVlJTkRFWF9NKQorCisjZGVmaW5lIE1BUEVOQUJMRV9TICAgIDMxCisjZGVmaW5lIE1BUEVOQUJMRV9WKHgpICgoeCkgPDwgTUFQRU5BQkxFX1MpCisjZGVmaW5lIE1BUEVOQUJMRV9GICAgIE1BUEVOQUJMRV9WKDFVKQorCisjZGVmaW5lIENITkVOQUJMRV9TICAgIDMwCisjZGVmaW5lIENITkVOQUJMRV9WKHgpICgoeCkgPDwgQ0hORU5BQkxFX1MpCisjZGVmaW5lIENITkVOQUJMRV9GICAgIENITkVOQUJMRV9WKDFVKQorCisjZGVmaW5lIFBSVEVOQUJMRV9TICAgIDI5CisjZGVmaW5lIFBSVEVOQUJMRV9WKHgpICgoeCkgPDwgUFJURU5BQkxFX1MpCisjZGVmaW5lIFBSVEVOQUJMRV9GICAgIFBSVEVOQUJMRV9WKDFVKQorCisjZGVmaW5lIFVEUEZPVVJUVVBFTl9TICAgIDI4CisjZGVmaW5lIFVEUEZPVVJUVVBFTl9WKHgpICgoeCkgPDwgVURQRk9VUlRVUEVOX1MpCisjZGVmaW5lIFVEUEZPVVJUVVBFTl9GICAgIFVEUEZPVVJUVVBFTl9WKDFVKQorCisjZGVmaW5lIElQNkZPVVJUVVBFTl9TICAgIDI3CisjZGVmaW5lIElQNkZPVVJUVVBFTl9WKHgpICgoeCkgPDwgSVA2Rk9VUlRVUEVOX1MpCisjZGVmaW5lIElQNkZPVVJUVVBFTl9GICAgIElQNkZPVVJUVVBFTl9WKDFVKQorCisjZGVmaW5lIElQNlRXT1RVUEVOX1MgICAgMjYKKyNkZWZpbmUgSVA2VFdPVFVQRU5fVih4KSAoKHgpIDw8IElQNlRXT1RVUEVOX1MpCisjZGVmaW5lIElQNlRXT1RVUEVOX0YgICAgSVA2VFdPVFVQRU5fVigxVSkKKworI2RlZmluZSBJUDRGT1VSVFVQRU5fUyAgICAyNQorI2RlZmluZSBJUDRGT1VSVFVQRU5fVih4KSAoKHgpIDw8IElQNEZPVVJUVVBFTl9TKQorI2RlZmluZSBJUDRGT1VSVFVQRU5fRiAgICBJUDRGT1VSVFVQRU5fVigxVSkKKworI2RlZmluZSBJUDRUV09UVVBFTl9TICAgIDI0CisjZGVmaW5lIElQNFRXT1RVUEVOX1YoeCkgKCh4KSA8PCBJUDRUV09UVVBFTl9TKQorI2RlZmluZSBJUDRUV09UVVBFTl9GICAgIElQNFRXT1RVUEVOX1YoMVUpCisKKyNkZWZpbmUgSVZGV0lEVEhfUyAgICAyMAorI2RlZmluZSBJVkZXSURUSF9NICAgIDB4ZlUKKyNkZWZpbmUgSVZGV0lEVEhfVih4KSAoKHgpIDw8IElWRldJRFRIX1MpCisjZGVmaW5lIElWRldJRFRIX0coeCkgKCgoeCkgPj4gSVZGV0lEVEhfUykgJiBJVkZXSURUSF9NKQorCisjZGVmaW5lIENIMURFRkFVTFRRVUVVRV9TICAgIDEwCisjZGVmaW5lIENIMURFRkFVTFRRVUVVRV9NICAgIDB4M2ZmVQorI2RlZmluZSBDSDFERUZBVUxUUVVFVUVfVih4KSAoKHgpIDw8IENIMURFRkFVTFRRVUVVRV9TKQorI2RlZmluZSBDSDFERUZBVUxUUVVFVUVfRyh4KSAoKCh4KSA+PiBDSDFERUZBVUxUUVVFVUVfUykgJiBDSDFERUZBVUxUUVVFVUVfTSkKKworI2RlZmluZSBDSDBERUZBVUxUUVVFVUVfUyAgICAwCisjZGVmaW5lIENIMERFRkFVTFRRVUVVRV9NICAgIDB4M2ZmVQorI2RlZmluZSBDSDBERUZBVUxUUVVFVUVfVih4KSAoKHgpIDw8IENIMERFRkFVTFRRVUVVRV9TKQorI2RlZmluZSBDSDBERUZBVUxUUVVFVUVfRyh4KSAoKCh4KSA+PiBDSDBERUZBVUxUUVVFVUVfUykgJiBDSDBERUZBVUxUUVVFVUVfTSkKKworI2RlZmluZSBWRkxLUElEWF9TICAgIDgKKyNkZWZpbmUgVkZMS1BJRFhfTSAgICAweGZmVQorI2RlZmluZSBWRkxLUElEWF9HKHgpICgoKHgpID4+IFZGTEtQSURYX1MpICYgVkZMS1BJRFhfTSkKKworI2RlZmluZSBUUF9SU1NfQ09ORklHX0NOR19BIDB4N2UwNAorI2RlZmluZSBUUF9SU1NfU0VDUkVUX0tFWTBfQSAweDQwCisjZGVmaW5lIFRQX1JTU19QRjBfQ09ORklHX0EgMHgzMAorI2RlZmluZSBUUF9SU1NfUEZfTUFQX0EgMHgzOAorI2RlZmluZSBUUF9SU1NfUEZfTVNLX0EgMHgzOQorCisjZGVmaW5lIFBGMUxLUElEWF9TICAgIDMKKworI2RlZmluZSBQRjBMS1BJRFhfTSAgICAweDdVCisKKyNkZWZpbmUgUEYxTVNLU0laRV9TICAgIDQKKyNkZWZpbmUgUEYxTVNLU0laRV9NICAgIDB4ZlUKKworI2RlZmluZSBDSE5DT1VOVDNfUyAgICAzMQorI2RlZmluZSBDSE5DT1VOVDNfVih4KSAoKHgpIDw8IENITkNPVU5UM19TKQorI2RlZmluZSBDSE5DT1VOVDNfRiAgICBDSE5DT1VOVDNfVigxVSkKKworI2RlZmluZSBDSE5DT1VOVDJfUyAgICAzMAorI2RlZmluZSBDSE5DT1VOVDJfVih4KSAoKHgpIDw8IENITkNPVU5UMl9TKQorI2RlZmluZSBDSE5DT1VOVDJfRiAgICBDSE5DT1VOVDJfVigxVSkKKworI2RlZmluZSBDSE5DT1VOVDFfUyAgICAyOQorI2RlZmluZSBDSE5DT1VOVDFfVih4KSAoKHgpIDw8IENITkNPVU5UMV9TKQorI2RlZmluZSBDSE5DT1VOVDFfRiAgICBDSE5DT1VOVDFfVigxVSkKKworI2RlZmluZSBDSE5DT1VOVDBfUyAgICAyOAorI2RlZmluZSBDSE5DT1VOVDBfVih4KSAoKHgpIDw8IENITkNPVU5UMF9TKQorI2RlZmluZSBDSE5DT1VOVDBfRiAgICBDSE5DT1VOVDBfVigxVSkKKworI2RlZmluZSBDSE5VTkRGTE9XM19TICAgIDI3CisjZGVmaW5lIENITlVOREZMT1czX1YoeCkgKCh4KSA8PCBDSE5VTkRGTE9XM19TKQorI2RlZmluZSBDSE5VTkRGTE9XM19GICAgIENITlVOREZMT1czX1YoMVUpCisKKyNkZWZpbmUgQ0hOVU5ERkxPVzJfUyAgICAyNgorI2RlZmluZSBDSE5VTkRGTE9XMl9WKHgpICgoeCkgPDwgQ0hOVU5ERkxPVzJfUykKKyNkZWZpbmUgQ0hOVU5ERkxPVzJfRiAgICBDSE5VTkRGTE9XMl9WKDFVKQorCisjZGVmaW5lIENITlVOREZMT1cxX1MgICAgMjUKKyNkZWZpbmUgQ0hOVU5ERkxPVzFfVih4KSAoKHgpIDw8IENITlVOREZMT1cxX1MpCisjZGVmaW5lIENITlVOREZMT1cxX0YgICAgQ0hOVU5ERkxPVzFfVigxVSkKKworI2RlZmluZSBDSE5VTkRGTE9XMF9TICAgIDI0CisjZGVmaW5lIENITlVOREZMT1cwX1YoeCkgKCh4KSA8PCBDSE5VTkRGTE9XMF9TKQorI2RlZmluZSBDSE5VTkRGTE9XMF9GICAgIENITlVOREZMT1cwX1YoMVUpCisKKyNkZWZpbmUgUlNUQ0hOM19TICAgIDE5CisjZGVmaW5lIFJTVENITjNfVih4KSAoKHgpIDw8IFJTVENITjNfUykKKyNkZWZpbmUgUlNUQ0hOM19GICAgIFJTVENITjNfVigxVSkKKworI2RlZmluZSBSU1RDSE4yX1MgICAgMTgKKyNkZWZpbmUgUlNUQ0hOMl9WKHgpICgoeCkgPDwgUlNUQ0hOMl9TKQorI2RlZmluZSBSU1RDSE4yX0YgICAgUlNUQ0hOMl9WKDFVKQorCisjZGVmaW5lIFJTVENITjFfUyAgICAxNworI2RlZmluZSBSU1RDSE4xX1YoeCkgKCh4KSA8PCBSU1RDSE4xX1MpCisjZGVmaW5lIFJTVENITjFfRiAgICBSU1RDSE4xX1YoMVUpCisKKyNkZWZpbmUgUlNUQ0hOMF9TICAgIDE2CisjZGVmaW5lIFJTVENITjBfVih4KSAoKHgpIDw8IFJTVENITjBfUykKKyNkZWZpbmUgUlNUQ0hOMF9GICAgIFJTVENITjBfVigxVSkKKworI2RlZmluZSBVUERWTERfUyAgICAxNQorI2RlZmluZSBVUERWTERfVih4KSAoKHgpIDw8IFVQRFZMRF9TKQorI2RlZmluZSBVUERWTERfRiAgICBVUERWTERfVigxVSkKKworI2RlZmluZSBYT0ZGX1MgICAgMTQKKyNkZWZpbmUgWE9GRl9WKHgpICgoeCkgPDwgWE9GRl9TKQorI2RlZmluZSBYT0ZGX0YgICAgWE9GRl9WKDFVKQorCisjZGVmaW5lIFVQRENITjNfUyAgICAxMworI2RlZmluZSBVUERDSE4zX1YoeCkgKCh4KSA8PCBVUERDSE4zX1MpCisjZGVmaW5lIFVQRENITjNfRiAgICBVUERDSE4zX1YoMVUpCisKKyNkZWZpbmUgVVBEQ0hOMl9TICAgIDEyCisjZGVmaW5lIFVQRENITjJfVih4KSAoKHgpIDw8IFVQRENITjJfUykKKyNkZWZpbmUgVVBEQ0hOMl9GICAgIFVQRENITjJfVigxVSkKKworI2RlZmluZSBVUERDSE4xX1MgICAgMTEKKyNkZWZpbmUgVVBEQ0hOMV9WKHgpICgoeCkgPDwgVVBEQ0hOMV9TKQorI2RlZmluZSBVUERDSE4xX0YgICAgVVBEQ0hOMV9WKDFVKQorCisjZGVmaW5lIFVQRENITjBfUyAgICAxMAorI2RlZmluZSBVUERDSE4wX1YoeCkgKCh4KSA8PCBVUERDSE4wX1MpCisjZGVmaW5lIFVQRENITjBfRiAgICBVUERDSE4wX1YoMVUpCisKKyNkZWZpbmUgUVVFVUVfUyAgICAwCisjZGVmaW5lIFFVRVVFX00gICAgMHgzZmZVCisjZGVmaW5lIFFVRVVFX1YoeCkgKCh4KSA8PCBRVUVVRV9TKQorI2RlZmluZSBRVUVVRV9HKHgpICgoKHgpID4+IFFVRVVFX1MpICYgUVVFVUVfTSkKKworI2RlZmluZSBNUFNfVFJDX0lOVF9DQVVTRV9BCTB4OTg1YworCisjZGVmaW5lIE1JU0NQRVJSX1MgICAgOAorI2RlZmluZSBNSVNDUEVSUl9WKHgpICgoeCkgPDwgTUlTQ1BFUlJfUykKKyNkZWZpbmUgTUlTQ1BFUlJfRiAgICBNSVNDUEVSUl9WKDFVKQorCisjZGVmaW5lIFBLVEZJRk9fUyAgICA0CisjZGVmaW5lIFBLVEZJRk9fTSAgICAweGZVCisjZGVmaW5lIFBLVEZJRk9fVih4KSAoKHgpIDw8IFBLVEZJRk9fUykKKworI2RlZmluZSBGSUxUTUVNX1MgICAgMAorI2RlZmluZSBGSUxUTUVNX00gICAgMHhmVQorI2RlZmluZSBGSUxUTUVNX1YoeCkgKCh4KSA8PCBGSUxUTUVNX1MpCisKKyNkZWZpbmUgTVBTX0NMU19JTlRfQ0FVU0VfQSAweGQwMjgKKworI2RlZmluZSBIQVNIU1JBTV9TICAgIDIKKyNkZWZpbmUgSEFTSFNSQU1fVih4KSAoKHgpIDw8IEhBU0hTUkFNX1MpCisjZGVmaW5lIEhBU0hTUkFNX0YgICAgSEFTSFNSQU1fVigxVSkKKworI2RlZmluZSBNQVRDSFRDQU1fUyAgICAxCisjZGVmaW5lIE1BVENIVENBTV9WKHgpICgoeCkgPDwgTUFUQ0hUQ0FNX1MpCisjZGVmaW5lIE1BVENIVENBTV9GICAgIE1BVENIVENBTV9WKDFVKQorCisjZGVmaW5lIE1BVENIU1JBTV9TICAgIDAKKyNkZWZpbmUgTUFUQ0hTUkFNX1YoeCkgKCh4KSA8PCBNQVRDSFNSQU1fUykKKyNkZWZpbmUgTUFUQ0hTUkFNX0YgICAgTUFUQ0hTUkFNX1YoMVUpCisKKyNkZWZpbmUgTVBTX1JYX1BFUlJfSU5UX0NBVVNFX0EgMHgxMTA3NAorCisjZGVmaW5lIE1QU19DTFNfVENBTV9ZX0xfQSAweGYwMDAKKyNkZWZpbmUgTVBTX0NMU19UQ0FNX1hfTF9BIDB4ZjAwOAorCisjZGVmaW5lIE1QU19DTFNfVENBTV9ZX0woaWR4KSAoTVBTX0NMU19UQ0FNX1lfTF9BICsgKGlkeCkgKiAxNikKKyNkZWZpbmUgTlVNX01QU19DTFNfVENBTV9ZX0xfSU5TVEFOQ0VTIDUxMgorCisjZGVmaW5lIE1QU19DTFNfVENBTV9YX0woaWR4KSAoTVBTX0NMU19UQ0FNX1hfTF9BICsgKGlkeCkgKiAxNikKKyNkZWZpbmUgTlVNX01QU19DTFNfVENBTV9YX0xfSU5TVEFOQ0VTIDUxMgorCisjZGVmaW5lIE1QU19DTFNfU1JBTV9MX0EgMHhlMDAwCisjZGVmaW5lIE1QU19DTFNfU1JBTV9IX0EgMHhlMDA0CisKKyNkZWZpbmUgTVBTX0NMU19TUkFNX0woaWR4KSAoTVBTX0NMU19TUkFNX0xfQSArIChpZHgpICogOCkKKyNkZWZpbmUgTlVNX01QU19DTFNfU1JBTV9MX0lOU1RBTkNFUyAzMzYKKworI2RlZmluZSBNUFNfQ0xTX1NSQU1fSChpZHgpIChNUFNfQ0xTX1NSQU1fSF9BICsgKGlkeCkgKiA4KQorI2RlZmluZSBOVU1fTVBTX0NMU19TUkFNX0hfSU5TVEFOQ0VTIDMzNgorCisjZGVmaW5lIE1VTFRJTElTVEVOMF9TICAgIDI1CisKKyNkZWZpbmUgUkVQTElDQVRFX1MgICAgMTEKKyNkZWZpbmUgUkVQTElDQVRFX1YoeCkgKCh4KSA8PCBSRVBMSUNBVEVfUykKKyNkZWZpbmUgUkVQTElDQVRFX0YgICAgUkVQTElDQVRFX1YoMVUpCisKKyNkZWZpbmUgUEZfUyAgICA4CisjZGVmaW5lIFBGX00gICAgMHg3VQorI2RlZmluZSBQRl9HKHgpICgoKHgpID4+IFBGX1MpICYgUEZfTSkKKworI2RlZmluZSBWRl9WQUxJRF9TICAgIDcKKyNkZWZpbmUgVkZfVkFMSURfVih4KSAoKHgpIDw8IFZGX1ZBTElEX1MpCisjZGVmaW5lIFZGX1ZBTElEX0YgICAgVkZfVkFMSURfVigxVSkKKworI2RlZmluZSBWRl9TICAgIDAKKyNkZWZpbmUgVkZfTSAgICAweDdmVQorI2RlZmluZSBWRl9HKHgpICgoKHgpID4+IFZGX1MpICYgVkZfTSkKKworI2RlZmluZSBTUkFNX1BSSU8zX1MgICAgMjIKKyNkZWZpbmUgU1JBTV9QUklPM19NICAgIDB4N1UKKyNkZWZpbmUgU1JBTV9QUklPM19HKHgpICgoKHgpID4+IFNSQU1fUFJJTzNfUykgJiBTUkFNX1BSSU8zX00pCisKKyNkZWZpbmUgU1JBTV9QUklPMl9TICAgIDE5CisjZGVmaW5lIFNSQU1fUFJJTzJfTSAgICAweDdVCisjZGVmaW5lIFNSQU1fUFJJTzJfRyh4KSAoKCh4KSA+PiBTUkFNX1BSSU8yX1MpICYgU1JBTV9QUklPMl9NKQorCisjZGVmaW5lIFNSQU1fUFJJTzFfUyAgICAxNgorI2RlZmluZSBTUkFNX1BSSU8xX00gICAgMHg3VQorI2RlZmluZSBTUkFNX1BSSU8xX0coeCkgKCgoeCkgPj4gU1JBTV9QUklPMV9TKSAmIFNSQU1fUFJJTzFfTSkKKworI2RlZmluZSBTUkFNX1BSSU8wX1MgICAgMTMKKyNkZWZpbmUgU1JBTV9QUklPMF9NICAgIDB4N1UKKyNkZWZpbmUgU1JBTV9QUklPMF9HKHgpICgoKHgpID4+IFNSQU1fUFJJTzBfUykgJiBTUkFNX1BSSU8wX00pCisKKyNkZWZpbmUgU1JBTV9WTERfUyAgICAxMgorI2RlZmluZSBTUkFNX1ZMRF9WKHgpICgoeCkgPDwgU1JBTV9WTERfUykKKyNkZWZpbmUgU1JBTV9WTERfRiAgICBTUkFNX1ZMRF9WKDFVKQorCisjZGVmaW5lIFBPUlRNQVBfUyAgICAwCisjZGVmaW5lIFBPUlRNQVBfTSAgICAweGZVCisjZGVmaW5lIFBPUlRNQVBfRyh4KSAoKCh4KSA+PiBQT1JUTUFQX1MpICYgUE9SVE1BUF9NKQorCisjZGVmaW5lIENQTF9JTlRSX0NBVVNFX0EgMHgxOTA1NAorCisjZGVmaW5lIENJTV9PUF9NQVBfUEVSUl9TICAgIDUKKyNkZWZpbmUgQ0lNX09QX01BUF9QRVJSX1YoeCkgKCh4KSA8PCBDSU1fT1BfTUFQX1BFUlJfUykKKyNkZWZpbmUgQ0lNX09QX01BUF9QRVJSX0YgICAgQ0lNX09QX01BUF9QRVJSX1YoMVUpCisKKyNkZWZpbmUgQ0lNX09WRkxfRVJST1JfUyAgICA0CisjZGVmaW5lIENJTV9PVkZMX0VSUk9SX1YoeCkgKCh4KSA8PCBDSU1fT1ZGTF9FUlJPUl9TKQorI2RlZmluZSBDSU1fT1ZGTF9FUlJPUl9GICAgIENJTV9PVkZMX0VSUk9SX1YoMVUpCisKKyNkZWZpbmUgVFBfRlJBTUlOR19FUlJPUl9TICAgIDMKKyNkZWZpbmUgVFBfRlJBTUlOR19FUlJPUl9WKHgpICgoeCkgPDwgVFBfRlJBTUlOR19FUlJPUl9TKQorI2RlZmluZSBUUF9GUkFNSU5HX0VSUk9SX0YgICAgVFBfRlJBTUlOR19FUlJPUl9WKDFVKQorCisjZGVmaW5lIFNHRV9GUkFNSU5HX0VSUk9SX1MgICAgMgorI2RlZmluZSBTR0VfRlJBTUlOR19FUlJPUl9WKHgpICgoeCkgPDwgU0dFX0ZSQU1JTkdfRVJST1JfUykKKyNkZWZpbmUgU0dFX0ZSQU1JTkdfRVJST1JfRiAgICBTR0VfRlJBTUlOR19FUlJPUl9WKDFVKQorCisjZGVmaW5lIENJTV9GUkFNSU5HX0VSUk9SX1MgICAgMQorI2RlZmluZSBDSU1fRlJBTUlOR19FUlJPUl9WKHgpICgoeCkgPDwgQ0lNX0ZSQU1JTkdfRVJST1JfUykKKyNkZWZpbmUgQ0lNX0ZSQU1JTkdfRVJST1JfRiAgICBDSU1fRlJBTUlOR19FUlJPUl9WKDFVKQorCisjZGVmaW5lIFpFUk9fU1dJVENIX0VSUk9SX1MgICAgMAorI2RlZmluZSBaRVJPX1NXSVRDSF9FUlJPUl9WKHgpICgoeCkgPDwgWkVST19TV0lUQ0hfRVJST1JfUykKKyNkZWZpbmUgWkVST19TV0lUQ0hfRVJST1JfRiAgICBaRVJPX1NXSVRDSF9FUlJPUl9WKDFVKQorCisjZGVmaW5lIFNNQl9JTlRfQ0FVU0VfQSAweDE5MDkwCisKKyNkZWZpbmUgTVNUVFhGSUZPUEFSSU5UX1MgICAgMjEKKyNkZWZpbmUgTVNUVFhGSUZPUEFSSU5UX1YoeCkgKCh4KSA8PCBNU1RUWEZJRk9QQVJJTlRfUykKKyNkZWZpbmUgTVNUVFhGSUZPUEFSSU5UX0YgICAgTVNUVFhGSUZPUEFSSU5UX1YoMVUpCisKKyNkZWZpbmUgTVNUUlhGSUZPUEFSSU5UX1MgICAgMjAKKyNkZWZpbmUgTVNUUlhGSUZPUEFSSU5UX1YoeCkgKCh4KSA8PCBNU1RSWEZJRk9QQVJJTlRfUykKKyNkZWZpbmUgTVNUUlhGSUZPUEFSSU5UX0YgICAgTVNUUlhGSUZPUEFSSU5UX1YoMVUpCisKKyNkZWZpbmUgU0xWRklGT1BBUklOVF9TICAgIDE5CisjZGVmaW5lIFNMVkZJRk9QQVJJTlRfVih4KSAoKHgpIDw8IFNMVkZJRk9QQVJJTlRfUykKKyNkZWZpbmUgU0xWRklGT1BBUklOVF9GICAgIFNMVkZJRk9QQVJJTlRfVigxVSkKKworI2RlZmluZSBVTFBfUlhfSU5UX0NBVVNFX0EgMHgxOTE1OAorI2RlZmluZSBVTFBfUlhfSVNDU0lfVEFHTUFTS19BIDB4MTkxNjQKKyNkZWZpbmUgVUxQX1JYX0lTQ1NJX1BTWl9BIDB4MTkxNjgKKyNkZWZpbmUgVUxQX1JYX0xBX0NUTF9BIDB4MTkyM2MKKyNkZWZpbmUgVUxQX1JYX0xBX1JEUFRSX0EgMHgxOTI0MAorI2RlZmluZSBVTFBfUlhfTEFfUkREQVRBX0EgMHgxOTI0NAorI2RlZmluZSBVTFBfUlhfTEFfV1JQVFJfQSAweDE5MjQ4CisKKyNkZWZpbmUgSFBaM19TICAgIDI0CisjZGVmaW5lIEhQWjNfVih4KSAoKHgpIDw8IEhQWjNfUykKKworI2RlZmluZSBIUFoyX1MgICAgMTYKKyNkZWZpbmUgSFBaMl9WKHgpICgoeCkgPDwgSFBaMl9TKQorCisjZGVmaW5lIEhQWjFfUyAgICA4CisjZGVmaW5lIEhQWjFfVih4KSAoKHgpIDw8IEhQWjFfUykKKworI2RlZmluZSBIUFowX1MgICAgMAorI2RlZmluZSBIUFowX1YoeCkgKCh4KSA8PCBIUFowX1MpCisKKyNkZWZpbmUgVUxQX1JYX1RERFBfUFNaX0EgMHgxOTE3OAorCisvKiByZWdpc3RlcnMgZm9yIG1vZHVsZSBTRiAqLworI2RlZmluZSBTRl9EQVRBX0EgMHgxOTNmOAorI2RlZmluZSBTRl9PUF9BIDB4MTkzZmMKKworI2RlZmluZSBTRl9CVVNZX1MgICAgMzEKKyNkZWZpbmUgU0ZfQlVTWV9WKHgpICgoeCkgPDwgU0ZfQlVTWV9TKQorI2RlZmluZSBTRl9CVVNZX0YgICAgU0ZfQlVTWV9WKDFVKQorCisjZGVmaW5lIFNGX0xPQ0tfUyAgICA0CisjZGVmaW5lIFNGX0xPQ0tfVih4KSAoKHgpIDw8IFNGX0xPQ0tfUykKKyNkZWZpbmUgU0ZfTE9DS19GICAgIFNGX0xPQ0tfVigxVSkKKworI2RlZmluZSBTRl9DT05UX1MgICAgMworI2RlZmluZSBTRl9DT05UX1YoeCkgKCh4KSA8PCBTRl9DT05UX1MpCisjZGVmaW5lIFNGX0NPTlRfRiAgICBTRl9DT05UX1YoMVUpCisKKyNkZWZpbmUgQllURUNOVF9TICAgIDEKKyNkZWZpbmUgQllURUNOVF9WKHgpICgoeCkgPDwgQllURUNOVF9TKQorCisjZGVmaW5lIE9QX1MgICAgMAorI2RlZmluZSBPUF9WKHgpICgoeCkgPDwgT1BfUykKKyNkZWZpbmUgT1BfRiAgICBPUF9WKDFVKQorCisjZGVmaW5lIFBMX1BGX0lOVF9DQVVTRV9BIDB4M2MwCisKKyNkZWZpbmUgUEZTV19TICAgIDMKKyNkZWZpbmUgUEZTV19WKHgpICgoeCkgPDwgUEZTV19TKQorI2RlZmluZSBQRlNXX0YgICAgUEZTV19WKDFVKQorCisjZGVmaW5lIFBGQ0lNX1MgICAgMQorI2RlZmluZSBQRkNJTV9WKHgpICgoeCkgPDwgUEZDSU1fUykKKyNkZWZpbmUgUEZDSU1fRiAgICBQRkNJTV9WKDFVKQorCisjZGVmaW5lIFBMX1BGX0lOVF9FTkFCTEVfQSAweDNjNAorI2RlZmluZSBQTF9QRl9DVExfQSAweDNjOAorCisjZGVmaW5lIFBMX1dIT0FNSV9BIDB4MTk0MDAKKworI2RlZmluZSBTT1VSQ0VQRl9TICAgIDgKKyNkZWZpbmUgU09VUkNFUEZfTSAgICAweDdVCisjZGVmaW5lIFNPVVJDRVBGX0coeCkgKCgoeCkgPj4gU09VUkNFUEZfUykgJiBTT1VSQ0VQRl9NKQorCisjZGVmaW5lIFBMX0lOVF9DQVVTRV9BIDB4MTk0MGMKKworI2RlZmluZSBVTFBfVFhfUyAgICAyNworI2RlZmluZSBVTFBfVFhfVih4KSAoKHgpIDw8IFVMUF9UWF9TKQorI2RlZmluZSBVTFBfVFhfRiAgICBVTFBfVFhfVigxVSkKKworI2RlZmluZSBTR0VfUyAgICAyNgorI2RlZmluZSBTR0VfVih4KSAoKHgpIDw8IFNHRV9TKQorI2RlZmluZSBTR0VfRiAgICBTR0VfVigxVSkKKworI2RlZmluZSBDUExfU1dJVENIX1MgICAgMjQKKyNkZWZpbmUgQ1BMX1NXSVRDSF9WKHgpICgoeCkgPDwgQ1BMX1NXSVRDSF9TKQorI2RlZmluZSBDUExfU1dJVENIX0YgICAgQ1BMX1NXSVRDSF9WKDFVKQorCisjZGVmaW5lIFVMUF9SWF9TICAgIDIzCisjZGVmaW5lIFVMUF9SWF9WKHgpICgoeCkgPDwgVUxQX1JYX1MpCisjZGVmaW5lIFVMUF9SWF9GICAgIFVMUF9SWF9WKDFVKQorCisjZGVmaW5lIFBNX1JYX1MgICAgMjIKKyNkZWZpbmUgUE1fUlhfVih4KSAoKHgpIDw8IFBNX1JYX1MpCisjZGVmaW5lIFBNX1JYX0YgICAgUE1fUlhfVigxVSkKKworI2RlZmluZSBQTV9UWF9TICAgIDIxCisjZGVmaW5lIFBNX1RYX1YoeCkgKCh4KSA8PCBQTV9UWF9TKQorI2RlZmluZSBQTV9UWF9GICAgIFBNX1RYX1YoMVUpCisKKyNkZWZpbmUgTUFfUyAgICAyMAorI2RlZmluZSBNQV9WKHgpICgoeCkgPDwgTUFfUykKKyNkZWZpbmUgTUFfRiAgICBNQV9WKDFVKQorCisjZGVmaW5lIFRQX1MgICAgMTkKKyNkZWZpbmUgVFBfVih4KSAoKHgpIDw8IFRQX1MpCisjZGVmaW5lIFRQX0YgICAgVFBfVigxVSkKKworI2RlZmluZSBMRV9TICAgIDE4CisjZGVmaW5lIExFX1YoeCkgKCh4KSA8PCBMRV9TKQorI2RlZmluZSBMRV9GICAgIExFX1YoMVUpCisKKyNkZWZpbmUgRURDMV9TICAgIDE3CisjZGVmaW5lIEVEQzFfVih4KSAoKHgpIDw8IEVEQzFfUykKKyNkZWZpbmUgRURDMV9GICAgIEVEQzFfVigxVSkKKworI2RlZmluZSBFREMwX1MgICAgMTYKKyNkZWZpbmUgRURDMF9WKHgpICgoeCkgPDwgRURDMF9TKQorI2RlZmluZSBFREMwX0YgICAgRURDMF9WKDFVKQorCisjZGVmaW5lIE1DX1MgICAgMTUKKyNkZWZpbmUgTUNfVih4KSAoKHgpIDw8IE1DX1MpCisjZGVmaW5lIE1DX0YgICAgTUNfVigxVSkKKworI2RlZmluZSBQQ0lFX1MgICAgMTQKKyNkZWZpbmUgUENJRV9WKHgpICgoeCkgPDwgUENJRV9TKQorI2RlZmluZSBQQ0lFX0YgICAgUENJRV9WKDFVKQorCisjZGVmaW5lIFhHTUFDX0tSMV9TICAgIDEyCisjZGVmaW5lIFhHTUFDX0tSMV9WKHgpICgoeCkgPDwgWEdNQUNfS1IxX1MpCisjZGVmaW5lIFhHTUFDX0tSMV9GICAgIFhHTUFDX0tSMV9WKDFVKQorCisjZGVmaW5lIFhHTUFDX0tSMF9TICAgIDExCisjZGVmaW5lIFhHTUFDX0tSMF9WKHgpICgoeCkgPDwgWEdNQUNfS1IwX1MpCisjZGVmaW5lIFhHTUFDX0tSMF9GICAgIFhHTUFDX0tSMF9WKDFVKQorCisjZGVmaW5lIFhHTUFDMV9TICAgIDEwCisjZGVmaW5lIFhHTUFDMV9WKHgpICgoeCkgPDwgWEdNQUMxX1MpCisjZGVmaW5lIFhHTUFDMV9GICAgIFhHTUFDMV9WKDFVKQorCisjZGVmaW5lIFhHTUFDMF9TICAgIDkKKyNkZWZpbmUgWEdNQUMwX1YoeCkgKCh4KSA8PCBYR01BQzBfUykKKyNkZWZpbmUgWEdNQUMwX0YgICAgWEdNQUMwX1YoMVUpCisKKyNkZWZpbmUgU01CX1MgICAgOAorI2RlZmluZSBTTUJfVih4KSAoKHgpIDw8IFNNQl9TKQorI2RlZmluZSBTTUJfRiAgICBTTUJfVigxVSkKKworI2RlZmluZSBTRl9TICAgIDcKKyNkZWZpbmUgU0ZfVih4KSAoKHgpIDw8IFNGX1MpCisjZGVmaW5lIFNGX0YgICAgU0ZfVigxVSkKKworI2RlZmluZSBQTF9TICAgIDYKKyNkZWZpbmUgUExfVih4KSAoKHgpIDw8IFBMX1MpCisjZGVmaW5lIFBMX0YgICAgUExfVigxVSkKKworI2RlZmluZSBOQ1NJX1MgICAgNQorI2RlZmluZSBOQ1NJX1YoeCkgKCh4KSA8PCBOQ1NJX1MpCisjZGVmaW5lIE5DU0lfRiAgICBOQ1NJX1YoMVUpCisKKyNkZWZpbmUgTVBTX1MgICAgNAorI2RlZmluZSBNUFNfVih4KSAoKHgpIDw8IE1QU19TKQorI2RlZmluZSBNUFNfRiAgICBNUFNfVigxVSkKKworI2RlZmluZSBDSU1fUyAgICAwCisjZGVmaW5lIENJTV9WKHgpICgoeCkgPDwgQ0lNX1MpCisjZGVmaW5lIENJTV9GICAgIENJTV9WKDFVKQorCisjZGVmaW5lIE1DMV9TICAgIDMxCisKKyNkZWZpbmUgUExfSU5UX0VOQUJMRV9BIDB4MTk0MTAKKyNkZWZpbmUgUExfSU5UX01BUDBfQSAweDE5NDE0CisjZGVmaW5lIFBMX1JTVF9BIDB4MTk0MjgKKworI2RlZmluZSBQSU9SU1RfUyAgICAxCisjZGVmaW5lIFBJT1JTVF9WKHgpICgoeCkgPDwgUElPUlNUX1MpCisjZGVmaW5lIFBJT1JTVF9GICAgIFBJT1JTVF9WKDFVKQorCisjZGVmaW5lIFBJT1JTVE1PREVfUyAgICAwCisjZGVmaW5lIFBJT1JTVE1PREVfVih4KSAoKHgpIDw8IFBJT1JTVE1PREVfUykKKyNkZWZpbmUgUElPUlNUTU9ERV9GICAgIFBJT1JTVE1PREVfVigxVSkKKworI2RlZmluZSBQTF9QTF9JTlRfQ0FVU0VfQSAweDE5NDMwCisKKyNkZWZpbmUgRkFUQUxQRVJSX1MgICAgNAorI2RlZmluZSBGQVRBTFBFUlJfVih4KSAoKHgpIDw8IEZBVEFMUEVSUl9TKQorI2RlZmluZSBGQVRBTFBFUlJfRiAgICBGQVRBTFBFUlJfVigxVSkKKworI2RlZmluZSBQRVJSVkZJRF9TICAgIDAKKyNkZWZpbmUgUEVSUlZGSURfVih4KSAoKHgpIDw8IFBFUlJWRklEX1MpCisjZGVmaW5lIFBFUlJWRklEX0YgICAgUEVSUlZGSURfVigxVSkKKworI2RlZmluZSBQTF9SRVZfQSAweDE5NDNjCisKKyNkZWZpbmUgUkVWX1MgICAgMAorI2RlZmluZSBSRVZfTSAgICAweGZVCisjZGVmaW5lIFJFVl9WKHgpICgoeCkgPDwgUkVWX1MpCisjZGVmaW5lIFJFVl9HKHgpICgoKHgpID4+IFJFVl9TKSAmIFJFVl9NKQorCisjZGVmaW5lIExFX0RCX0lOVF9DQVVTRV9BIDB4MTljM2MKKworI2RlZmluZSBSRVFRUEFSRVJSX1MgICAgMTYKKyNkZWZpbmUgUkVRUVBBUkVSUl9WKHgpICgoeCkgPDwgUkVRUVBBUkVSUl9TKQorI2RlZmluZSBSRVFRUEFSRVJSX0YgICAgUkVRUVBBUkVSUl9WKDFVKQorCisjZGVmaW5lIFVOS05PV05DTURfUyAgICAxNQorI2RlZmluZSBVTktOT1dOQ01EX1YoeCkgKCh4KSA8PCBVTktOT1dOQ01EX1MpCisjZGVmaW5lIFVOS05PV05DTURfRiAgICBVTktOT1dOQ01EX1YoMVUpCisKKyNkZWZpbmUgUEFSSVRZRVJSX1MgICAgNgorI2RlZmluZSBQQVJJVFlFUlJfVih4KSAoKHgpIDw8IFBBUklUWUVSUl9TKQorI2RlZmluZSBQQVJJVFlFUlJfRiAgICBQQVJJVFlFUlJfVigxVSkKKworI2RlZmluZSBMSVBNSVNTX1MgICAgNQorI2RlZmluZSBMSVBNSVNTX1YoeCkgKCh4KSA8PCBMSVBNSVNTX1MpCisjZGVmaW5lIExJUE1JU1NfRiAgICBMSVBNSVNTX1YoMVUpCisKKyNkZWZpbmUgTElQMF9TICAgIDQKKyNkZWZpbmUgTElQMF9WKHgpICgoeCkgPDwgTElQMF9TKQorI2RlZmluZSBMSVAwX0YgICAgTElQMF9WKDFVKQorCisjZGVmaW5lIE5DU0lfSU5UX0NBVVNFX0EgMHgxYTBkOAorCisjZGVmaW5lIENJTV9ETV9QUlRZX0VSUl9TICAgIDgKKyNkZWZpbmUgQ0lNX0RNX1BSVFlfRVJSX1YoeCkgKCh4KSA8PCBDSU1fRE1fUFJUWV9FUlJfUykKKyNkZWZpbmUgQ0lNX0RNX1BSVFlfRVJSX0YgICAgQ0lNX0RNX1BSVFlfRVJSX1YoMVUpCisKKyNkZWZpbmUgTVBTX0RNX1BSVFlfRVJSX1MgICAgNworI2RlZmluZSBNUFNfRE1fUFJUWV9FUlJfVih4KSAoKHgpIDw8IE1QU19ETV9QUlRZX0VSUl9TKQorI2RlZmluZSBNUFNfRE1fUFJUWV9FUlJfRiAgICBNUFNfRE1fUFJUWV9FUlJfVigxVSkKKworI2RlZmluZSBUWEZJRk9fUFJUWV9FUlJfUyAgICAxCisjZGVmaW5lIFRYRklGT19QUlRZX0VSUl9WKHgpICgoeCkgPDwgVFhGSUZPX1BSVFlfRVJSX1MpCisjZGVmaW5lIFRYRklGT19QUlRZX0VSUl9GICAgIFRYRklGT19QUlRZX0VSUl9WKDFVKQorCisjZGVmaW5lIFJYRklGT19QUlRZX0VSUl9TICAgIDAKKyNkZWZpbmUgUlhGSUZPX1BSVFlfRVJSX1YoeCkgKCh4KSA8PCBSWEZJRk9fUFJUWV9FUlJfUykKKyNkZWZpbmUgUlhGSUZPX1BSVFlfRVJSX0YgICAgUlhGSUZPX1BSVFlfRVJSX1YoMVUpCisKKyNkZWZpbmUgWEdNQUNfUE9SVF9DRkcyX0EgMHgxMDE4CisKKyNkZWZpbmUgUEFURU5fUyAgICAxOAorI2RlZmluZSBQQVRFTl9WKHgpICgoeCkgPDwgUEFURU5fUykKKyNkZWZpbmUgUEFURU5fRiAgICBQQVRFTl9WKDFVKQorCisjZGVmaW5lIE1BR0lDRU5fUyAgICAxNworI2RlZmluZSBNQUdJQ0VOX1YoeCkgKCh4KSA8PCBNQUdJQ0VOX1MpCisjZGVmaW5lIE1BR0lDRU5fRiAgICBNQUdJQ0VOX1YoMVUpCiAKICNkZWZpbmUgWEdNQUNfUE9SVF9NQUdJQ19NQUNJRF9MTyAweDEwMjQKICNkZWZpbmUgWEdNQUNfUE9SVF9NQUdJQ19NQUNJRF9ISSAweDEwMjgKIAotI2RlZmluZSBYR01BQ19QT1JUX0VQSU9fREFUQTAgMHgxMGMwCi0jZGVmaW5lIFhHTUFDX1BPUlRfRVBJT19EQVRBMSAweDEwYzQKLSNkZWZpbmUgWEdNQUNfUE9SVF9FUElPX0RBVEEyIDB4MTBjOAotI2RlZmluZSBYR01BQ19QT1JUX0VQSU9fREFUQTMgMHgxMGNjCi0jZGVmaW5lIFhHTUFDX1BPUlRfRVBJT19PUCAweDEwZDAKLSNkZWZpbmUgIEVQSU9XUiAgICAgICAgIDB4MDAwMDAxMDBVCi0jZGVmaW5lICBBRERSRVNTX01BU0sgICAweDAwMDAwMGZmVQotI2RlZmluZSAgQUREUkVTU19TSElGVCAgMAotI2RlZmluZSAgQUREUkVTUyh4KSAgICAgKCh4KSA8PCBBRERSRVNTX1NISUZUKQorI2RlZmluZSBYR01BQ19QT1JUX0VQSU9fREFUQTBfQSAweDEwYzAKKyNkZWZpbmUgWEdNQUNfUE9SVF9FUElPX0RBVEExX0EgMHgxMGM0CisjZGVmaW5lIFhHTUFDX1BPUlRfRVBJT19EQVRBMl9BIDB4MTBjOAorI2RlZmluZSBYR01BQ19QT1JUX0VQSU9fREFUQTNfQSAweDEwY2MKKyNkZWZpbmUgWEdNQUNfUE9SVF9FUElPX09QX0EgMHgxMGQwCiAKLSNkZWZpbmUgTUFDX1BPUlRfSU5UX0NBVVNFIDB4OGRjCi0jZGVmaW5lIFhHTUFDX1BPUlRfSU5UX0NBVVNFIDB4MTBkYworI2RlZmluZSBFUElPV1JfUyAgICA4CisjZGVmaW5lIEVQSU9XUl9WKHgpICgoeCkgPDwgRVBJT1dSX1MpCisjZGVmaW5lIEVQSU9XUl9GICAgIEVQSU9XUl9WKDFVKQogCi0jZGVmaW5lIEFfVFBfVFhfTU9EX1FVRVVFX1JFUV9NQVAgMHg3ZTI4CisjZGVmaW5lIEFERFJFU1NfUyAgICAwCisjZGVmaW5lIEFERFJFU1NfVih4KSAoKHgpIDw8IEFERFJFU1NfUykKIAotI2RlZmluZSBBX1RQX1RYX01PRF9DSEFOTkVMX1dFSUdIVCAweDdlMzQKKyNkZWZpbmUgTUFDX1BPUlRfSU5UX0NBVVNFX0EgMHg4ZGMKKyNkZWZpbmUgWEdNQUNfUE9SVF9JTlRfQ0FVU0VfQSAweDEwZGMKIAotI2RlZmluZSBTX1RYX01PRF9RVUVVRV9SRVFfTUFQICAgIDAKLSNkZWZpbmUgTV9UWF9NT0RfUVVFVUVfUkVRX01BUCAgICAweGZmZmZVCi0jZGVmaW5lIFZfVFhfTU9EX1FVRVVFX1JFUV9NQVAoeCkgKCh4KSA8PCBTX1RYX01PRF9RVUVVRV9SRVFfTUFQKQorI2RlZmluZSBUUF9UWF9NT0RfUVVFVUVfUkVRX01BUF9BIDB4N2UyOAogCi0jZGVmaW5lIEFfVFBfVFhfTU9EX1FVRVVFX1dFSUdIVDAgMHg3ZTMwCisjZGVmaW5lIFRQX1RYX01PRF9RVUVVRV9XRUlHSFQwX0EgMHg3ZTMwCisjZGVmaW5lIFRQX1RYX01PRF9DSEFOTkVMX1dFSUdIVF9BIDB4N2UzNAogCi0jZGVmaW5lIFNfVFhfTU9EUV9XRUlHSFQzICAgIDI0Ci0jZGVmaW5lIE1fVFhfTU9EUV9XRUlHSFQzICAgIDB4ZmZVCi0jZGVmaW5lIFZfVFhfTU9EUV9XRUlHSFQzKHgpICgoeCkgPDwgU19UWF9NT0RRX1dFSUdIVDMpCisjZGVmaW5lIFRYX01PRF9RVUVVRV9SRVFfTUFQX1MgICAgMAorI2RlZmluZSBUWF9NT0RfUVVFVUVfUkVRX01BUF9WKHgpICgoeCkgPDwgVFhfTU9EX1FVRVVFX1JFUV9NQVBfUykKIAotI2RlZmluZSBTX1RYX01PRFFfV0VJR0hUMiAgICAxNgotI2RlZmluZSBNX1RYX01PRFFfV0VJR0hUMiAgICAweGZmVQotI2RlZmluZSBWX1RYX01PRFFfV0VJR0hUMih4KSAoKHgpIDw8IFNfVFhfTU9EUV9XRUlHSFQyKQorI2RlZmluZSBUWF9NT0RRX1dFSUdIVDNfUyAgICAyNAorI2RlZmluZSBUWF9NT0RRX1dFSUdIVDNfVih4KSAoKHgpIDw8IFRYX01PRFFfV0VJR0hUM19TKQogCi0jZGVmaW5lIFNfVFhfTU9EUV9XRUlHSFQxICAgIDgKLSNkZWZpbmUgTV9UWF9NT0RRX1dFSUdIVDEgICAgMHhmZlUKLSNkZWZpbmUgVl9UWF9NT0RRX1dFSUdIVDEoeCkgKCh4KSA8PCBTX1RYX01PRFFfV0VJR0hUMSkKKyNkZWZpbmUgVFhfTU9EUV9XRUlHSFQyX1MgICAgMTYKKyNkZWZpbmUgVFhfTU9EUV9XRUlHSFQyX1YoeCkgKCh4KSA8PCBUWF9NT0RRX1dFSUdIVDJfUykKIAotI2RlZmluZSBTX1RYX01PRFFfV0VJR0hUMCAgICAwCi0jZGVmaW5lIE1fVFhfTU9EUV9XRUlHSFQwICAgIDB4ZmZVCi0jZGVmaW5lIFZfVFhfTU9EUV9XRUlHSFQwKHgpICgoeCkgPDwgU19UWF9NT0RRX1dFSUdIVDApCisjZGVmaW5lIFRYX01PRFFfV0VJR0hUMV9TICAgIDgKKyNkZWZpbmUgVFhfTU9EUV9XRUlHSFQxX1YoeCkgKCh4KSA8PCBUWF9NT0RRX1dFSUdIVDFfUykKIAotI2RlZmluZSBBX1RQX1RYX1NDSEVEX0hEUiAweDIzCisjZGVmaW5lIFRYX01PRFFfV0VJR0hUMF9TICAgIDAKKyNkZWZpbmUgVFhfTU9EUV9XRUlHSFQwX1YoeCkgKCh4KSA8PCBUWF9NT0RRX1dFSUdIVDBfUykKIAotI2RlZmluZSBBX1RQX1RYX1NDSEVEX0ZJRk8gMHgyNAotCi0jZGVmaW5lIEFfVFBfVFhfU0NIRURfUENNRCAweDI1Ci0KLSNkZWZpbmUgU19WTklDICAgIDExCi0jZGVmaW5lIFZfVk5JQyh4KSAoKHgpIDw8IFNfVk5JQykKLSNkZWZpbmUgRl9WTklDICAgIFZfVk5JQygxVSkKLQotI2RlZmluZSBTX0ZSQUdNRU5UQVRJT04gICAgOQotI2RlZmluZSBWX0ZSQUdNRU5UQVRJT04oeCkgKCh4KSA8PCBTX0ZSQUdNRU5UQVRJT04pCi0jZGVmaW5lIEZfRlJBR01FTlRBVElPTiAgICBWX0ZSQUdNRU5UQVRJT04oMVUpCi0KLSNkZWZpbmUgU19NUFNISVRUWVBFICAgIDgKLSNkZWZpbmUgVl9NUFNISVRUWVBFKHgpICgoeCkgPDwgU19NUFNISVRUWVBFKQotI2RlZmluZSBGX01QU0hJVFRZUEUgICAgVl9NUFNISVRUWVBFKDFVKQotCi0jZGVmaW5lIFNfTUFDTUFUQ0ggICAgNwotI2RlZmluZSBWX01BQ01BVENIKHgpICgoeCkgPDwgU19NQUNNQVRDSCkKLSNkZWZpbmUgRl9NQUNNQVRDSCAgICBWX01BQ01BVENIKDFVKQotCi0jZGVmaW5lIFNfRVRIRVJUWVBFICAgIDYKLSNkZWZpbmUgVl9FVEhFUlRZUEUoeCkgKCh4KSA8PCBTX0VUSEVSVFlQRSkKLSNkZWZpbmUgRl9FVEhFUlRZUEUgICAgVl9FVEhFUlRZUEUoMVUpCi0KLSNkZWZpbmUgU19QUk9UT0NPTCAgICA1Ci0jZGVmaW5lIFZfUFJPVE9DT0woeCkgKCh4KSA8PCBTX1BST1RPQ09MKQotI2RlZmluZSBGX1BST1RPQ09MICAgIFZfUFJPVE9DT0woMVUpCi0KLSNkZWZpbmUgU19UT1MgICAgNAotI2RlZmluZSBWX1RPUyh4KSAoKHgpIDw8IFNfVE9TKQotI2RlZmluZSBGX1RPUyAgICBWX1RPUygxVSkKLQotI2RlZmluZSBTX1ZMQU4gICAgMwotI2RlZmluZSBWX1ZMQU4oeCkgKCh4KSA8PCBTX1ZMQU4pCi0jZGVmaW5lIEZfVkxBTiAgICBWX1ZMQU4oMVUpCi0KLSNkZWZpbmUgU19WTklDX0lEICAgIDIKLSNkZWZpbmUgVl9WTklDX0lEKHgpICgoeCkgPDwgU19WTklDX0lEKQotI2RlZmluZSBGX1ZOSUNfSUQgICAgVl9WTklDX0lEKDFVKQotCi0jZGVmaW5lIFNfUE9SVCAgICAxCi0jZGVmaW5lIFZfUE9SVCh4KSAoKHgpIDw8IFNfUE9SVCkKLSNkZWZpbmUgRl9QT1JUICAgIFZfUE9SVCgxVSkKLQotI2RlZmluZSBTX0ZDT0UgICAgMAotI2RlZmluZSBWX0ZDT0UoeCkgKCh4KSA8PCBTX0ZDT0UpCi0jZGVmaW5lIEZfRkNPRSAgICBWX0ZDT0UoMVUpCisjZGVmaW5lIFRQX1RYX1NDSEVEX0hEUl9BIDB4MjMKKyNkZWZpbmUgVFBfVFhfU0NIRURfRklGT19BIDB4MjQKKyNkZWZpbmUgVFBfVFhfU0NIRURfUENNRF9BIDB4MjUKIAogI2RlZmluZSBOVU1fTVBTX0NMU19TUkFNX0xfSU5TVEFOQ0VTIDMzNgogI2RlZmluZSBOVU1fTVBTX1Q1X0NMU19TUkFNX0xfSU5TVEFOQ0VTIDUxMgpAQCAtMTMyOSw2MiArMjU2NiwxNDkgQEAKICNkZWZpbmUgTUNfU1RSSURFIChNQ18xX0JBU0VfQUREUiAtIE1DXzBfQkFTRV9BRERSKQogI2RlZmluZSBNQ19SRUcocmVnLCBpZHgpIChyZWcgKyBNQ19TVFJJREUgKiBpZHgpCiAKLSNkZWZpbmUgTUNfUF9CSVNUX0NNRCAweDQxNDAwCi0jZGVmaW5lIE1DX1BfQklTVF9DTURfQUREUiAweDQxNDA0Ci0jZGVmaW5lIE1DX1BfQklTVF9DTURfTEVOIDB4NDE0MDgKLSNkZWZpbmUgTUNfUF9CSVNUX0RBVEFfUEFUVEVSTiAweDQxNDBjCi0jZGVmaW5lIE1DX1BfQklTVF9TVEFUVVNfUkRBVEEgMHg0MTQ4OAotI2RlZmluZSBFRENfVDUwX0JBU0VfQUREUiAweDUwMDAwCi0jZGVmaW5lIEVEQ19IX0JJU1RfQ01EIDB4NTAwMDQKLSNkZWZpbmUgRURDX0hfQklTVF9DTURfQUREUiAweDUwMDA4Ci0jZGVmaW5lIEVEQ19IX0JJU1RfQ01EX0xFTiAweDUwMDBjCi0jZGVmaW5lIEVEQ19IX0JJU1RfREFUQV9QQVRURVJOIDB4NTAwMTAKLSNkZWZpbmUgRURDX0hfQklTVF9TVEFUVVNfUkRBVEEgMHg1MDAyOAorI2RlZmluZSBNQ19QX0JJU1RfQ01EX0EJCQkweDQxNDAwCisjZGVmaW5lIE1DX1BfQklTVF9DTURfQUREUl9BCQkweDQxNDA0CisjZGVmaW5lIE1DX1BfQklTVF9DTURfTEVOX0EJCTB4NDE0MDgKKyNkZWZpbmUgTUNfUF9CSVNUX0RBVEFfUEFUVEVSTl9BCTB4NDE0MGMKKyNkZWZpbmUgTUNfUF9CSVNUX1NUQVRVU19SREFUQV9BCTB4NDE0ODgKIAotI2RlZmluZSBFRENfVDUxX0JBU0VfQUREUiAweDUwODAwCisjZGVmaW5lIEVEQ19UNTBfQkFTRV9BRERSCQkweDUwMDAwCisKKyNkZWZpbmUgRURDX0hfQklTVF9DTURfQQkJMHg1MDAwNAorI2RlZmluZSBFRENfSF9CSVNUX0NNRF9BRERSX0EJCTB4NTAwMDgKKyNkZWZpbmUgRURDX0hfQklTVF9DTURfTEVOX0EJCTB4NTAwMGMKKyNkZWZpbmUgRURDX0hfQklTVF9EQVRBX1BBVFRFUk5fQQkweDUwMDEwCisjZGVmaW5lIEVEQ19IX0JJU1RfU1RBVFVTX1JEQVRBX0EJMHg1MDAyOAorCisjZGVmaW5lIEVEQ19UNTFfQkFTRV9BRERSCQkweDUwODAwCisKICNkZWZpbmUgRURDX1NUUklERV9UNSAoRURDX1Q1MV9CQVNFX0FERFIgLSBFRENfVDUwX0JBU0VfQUREUikKICNkZWZpbmUgRURDX1JFR19UNShyZWcsIGlkeCkgKHJlZyArIEVEQ19TVFJJREVfVDUgKiBpZHgpCiAKLSNkZWZpbmUgQV9QTF9WRl9SRVYgMHg0Ci0jZGVmaW5lIEFfUExfVkZfV0hPQU1JIDB4MAotI2RlZmluZSBBX1BMX1ZGX1JFVklTSU9OIDB4OAorI2RlZmluZSBQTF9WRl9SRVZfQSAweDQKKyNkZWZpbmUgUExfVkZfV0hPQU1JX0EgMHgwCisjZGVmaW5lIFBMX1ZGX1JFVklTSU9OX0EgMHg4CiAKLSNkZWZpbmUgU19DSElQSUQgICAgNAotI2RlZmluZSBNX0NISVBJRCAgICAweGZVCi0jZGVmaW5lIFZfQ0hJUElEKHgpICgoeCkgPDwgU19DSElQSUQpCi0jZGVmaW5lIEdfQ0hJUElEKHgpICgoKHgpID4+IFNfQ0hJUElEKSAmIE1fQ0hJUElEKQorLyogcmVnaXN0ZXJzIGZvciBtb2R1bGUgQ0lNICovCisjZGVmaW5lIENJTV9IT1NUX0FDQ19DVFJMX0EJMHg3YjUwCisjZGVmaW5lIENJTV9IT1NUX0FDQ19EQVRBX0EJMHg3YjU0CisjZGVmaW5lIFVQX1VQX0RCR19MQV9DRkdfQQkweDE0MAorI2RlZmluZSBVUF9VUF9EQkdfTEFfREFUQV9BCTB4MTQ0CiAKLS8qIFRQX1ZMQU5fUFJJX01BUCBjb250cm9scyB3aGljaCBzdWJzZXQgb2YgZmllbGRzIHdpbGwgYmUgcHJlc2VudCBpbiB0aGUKLSAqIENvbXByZXNzZWQgRmlsdGVyIFR1cGxlIGZvciBMRSBmaWx0ZXJzLiAgRWFjaCBiaXQgc2V0IGluIFRQX1ZMQU5fUFJJX01BUAotICogc2VsZWN0cyBmb3IgYSBwYXJ0aWN1bGFyIGZpZWxkIGJlaW5nIHByZXNlbnQuICBUaGVzZSBmaWVsZHMsIHdoZW4gcHJlc2VudAotICogaW4gdGhlIENvbXByZXNzZWQgRmlsdGVyIFR1cGxlLCBoYXZlIHRoZSBmb2xsb3dpbmcgd2lkdGhzIGluIGJpdHMuCi0gKi8KLSNkZWZpbmUgV19GVF9GQ09FICAgICAgICAgICAgICAgICAgICAgICAxCi0jZGVmaW5lIFdfRlRfUE9SVCAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBXX0ZUX1ZOSUNfSUQgICAgICAgICAgICAgICAgICAgIDE3Ci0jZGVmaW5lIFdfRlRfVkxBTiAgICAgICAgICAgICAgICAgICAgICAgMTcKLSNkZWZpbmUgV19GVF9UT1MgICAgICAgICAgICAgICAgICAgICAgICA4Ci0jZGVmaW5lIFdfRlRfUFJPVE9DT0wgICAgICAgICAgICAgICAgICAgOAotI2RlZmluZSBXX0ZUX0VUSEVSVFlQRSAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFdfRlRfTUFDTUFUQ0ggICAgICAgICAgICAgICAgICAgOQotI2RlZmluZSBXX0ZUX01QU0hJVFRZUEUgICAgICAgICAgICAgICAgIDMKLSNkZWZpbmUgV19GVF9GUkFHTUVOVEFUSU9OICAgICAgICAgICAgICAxCisjZGVmaW5lIEhPU1RCVVNZX1MJMTcKKyNkZWZpbmUgSE9TVEJVU1lfVih4KQkoKHgpIDw8IEhPU1RCVVNZX1MpCisjZGVmaW5lIEhPU1RCVVNZX0YJSE9TVEJVU1lfVigxVSkKIAotLyogU29tZSBvZiB0aGUgQ29tcHJlc3NlZCBGaWx0ZXIgVHVwbGUgZmllbGRzIGhhdmUgaW50ZXJuYWwgc3RydWN0dXJlLiAgVGhlc2UKLSAqIGJpdCBzaGlmdHMvbWFza3MgZGVzY3JpYmUgdGhvc2Ugc3RydWN0dXJlcy4gIEFsbCBzaGlmdHMgYXJlIHJlbGF0aXZlIHRvIHRoZQotICogYmFzZSBwb3NpdGlvbiBvZiB0aGUgZmllbGRzIHdpdGhpbiB0aGUgQ29tcHJlc3NlZCBGaWx0ZXIgVHVwbGUKLSAqLwotI2RlZmluZSBTX0ZUX1ZMQU5fVkxEICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFZfRlRfVkxBTl9WTEQoeCkgICAgICAgICAgICAgICAgKCh4KSA8PCBTX0ZUX1ZMQU5fVkxEKQotI2RlZmluZSBGX0ZUX1ZMQU5fVkxEICAgICAgICAgICAgICAgICAgIFZfRlRfVkxBTl9WTEQoMVUpCisjZGVmaW5lIEhPU1RXUklURV9TCTE2CisjZGVmaW5lIEhPU1RXUklURV9WKHgpCSgoeCkgPDwgSE9TVFdSSVRFX1MpCisjZGVmaW5lIEhPU1RXUklURV9GCUhPU1RXUklURV9WKDFVKQogCi0jZGVmaW5lIFNfRlRfVk5JRF9JRF9WRiAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBWX0ZUX1ZOSURfSURfVkYoeCkgICAgICAgICAgICAgICgoeCkgPDwgU19GVF9WTklEX0lEX1ZGKQorI2RlZmluZSBDSU1fSUJRX0RCR19DRkdfQSAweDdiNjAKIAotI2RlZmluZSBTX0ZUX1ZOSURfSURfUEYgICAgICAgICAgICAgICAgIDcKLSNkZWZpbmUgVl9GVF9WTklEX0lEX1BGKHgpICAgICAgICAgICAgICAoKHgpIDw8IFNfRlRfVk5JRF9JRF9QRikKKyNkZWZpbmUgSUJRREJHQUREUl9TICAgIDE2CisjZGVmaW5lIElCUURCR0FERFJfTSAgICAweGZmZlUKKyNkZWZpbmUgSUJRREJHQUREUl9WKHgpICgoeCkgPDwgSUJRREJHQUREUl9TKQorI2RlZmluZSBJQlFEQkdBRERSX0coeCkgKCgoeCkgPj4gSUJRREJHQUREUl9TKSAmIElCUURCR0FERFJfTSkKIAotI2RlZmluZSBTX0ZUX1ZOSURfSURfVkxEICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIFZfRlRfVk5JRF9JRF9WTEQoeCkgICAgICAgICAgICAgKCh4KSA8PCBTX0ZUX1ZOSURfSURfVkxEKQorI2RlZmluZSBJQlFEQkdCVVNZX1MgICAgMQorI2RlZmluZSBJQlFEQkdCVVNZX1YoeCkgKCh4KSA8PCBJQlFEQkdCVVNZX1MpCisjZGVmaW5lIElCUURCR0JVU1lfRiAgICBJQlFEQkdCVVNZX1YoMVUpCisKKyNkZWZpbmUgSUJRREJHRU5fUyAgICAwCisjZGVmaW5lIElCUURCR0VOX1YoeCkgKCh4KSA8PCBJQlFEQkdFTl9TKQorI2RlZmluZSBJQlFEQkdFTl9GICAgIElCUURCR0VOX1YoMVUpCisKKyNkZWZpbmUgQ0lNX09CUV9EQkdfQ0ZHX0EgMHg3YjY0CisKKyNkZWZpbmUgT0JRREJHQUREUl9TICAgIDE2CisjZGVmaW5lIE9CUURCR0FERFJfTSAgICAweGZmZlUKKyNkZWZpbmUgT0JRREJHQUREUl9WKHgpICgoeCkgPDwgT0JRREJHQUREUl9TKQorI2RlZmluZSBPQlFEQkdBRERSX0coeCkgKCgoeCkgPj4gT0JRREJHQUREUl9TKSAmIE9CUURCR0FERFJfTSkKKworI2RlZmluZSBPQlFEQkdCVVNZX1MgICAgMQorI2RlZmluZSBPQlFEQkdCVVNZX1YoeCkgKCh4KSA8PCBPQlFEQkdCVVNZX1MpCisjZGVmaW5lIE9CUURCR0JVU1lfRiAgICBPQlFEQkdCVVNZX1YoMVUpCisKKyNkZWZpbmUgT0JRREJHRU5fUyAgICAwCisjZGVmaW5lIE9CUURCR0VOX1YoeCkgKCh4KSA8PCBPQlFEQkdFTl9TKQorI2RlZmluZSBPQlFEQkdFTl9GICAgIE9CUURCR0VOX1YoMVUpCisKKyNkZWZpbmUgQ0lNX0lCUV9EQkdfREFUQV9BIDB4N2I2OAorI2RlZmluZSBDSU1fT0JRX0RCR19EQVRBX0EgMHg3YjZjCisKKyNkZWZpbmUgVVBEQkdMQVJERU5fUwkJMQorI2RlZmluZSBVUERCR0xBUkRFTl9WKHgpCSgoeCkgPDwgVVBEQkdMQVJERU5fUykKKyNkZWZpbmUgVVBEQkdMQVJERU5fRgkJVVBEQkdMQVJERU5fVigxVSkKKworI2RlZmluZSBVUERCR0xBRU5fUwkwCisjZGVmaW5lIFVQREJHTEFFTl9WKHgpCSgoeCkgPDwgVVBEQkdMQUVOX1MpCisjZGVmaW5lIFVQREJHTEFFTl9GCVVQREJHTEFFTl9WKDFVKQorCisjZGVmaW5lIFVQREJHTEFSRFBUUl9TCQkyCisjZGVmaW5lIFVQREJHTEFSRFBUUl9NCQkweGZmZlUKKyNkZWZpbmUgVVBEQkdMQVJEUFRSX1YoeCkJKCh4KSA8PCBVUERCR0xBUkRQVFJfUykKKworI2RlZmluZSBVUERCR0xBV1JQVFJfUyAgICAxNgorI2RlZmluZSBVUERCR0xBV1JQVFJfTSAgICAweGZmZlUKKyNkZWZpbmUgVVBEQkdMQVdSUFRSX0coeCkgKCgoeCkgPj4gVVBEQkdMQVdSUFRSX1MpICYgVVBEQkdMQVdSUFRSX00pCisKKyNkZWZpbmUgVVBEQkdMQUNBUFRQQ09OTFlfUwkzMAorI2RlZmluZSBVUERCR0xBQ0FQVFBDT05MWV9WKHgpCSgoeCkgPDwgVVBEQkdMQUNBUFRQQ09OTFlfUykKKyNkZWZpbmUgVVBEQkdMQUNBUFRQQ09OTFlfRglVUERCR0xBQ0FQVFBDT05MWV9WKDFVKQorCisjZGVmaW5lIENJTV9RVUVVRV9DT05GSUdfUkVGX0EgMHg3YjQ4CisjZGVmaW5lIENJTV9RVUVVRV9DT05GSUdfQ1RSTF9BIDB4N2I0YworCisjZGVmaW5lIENJTVFTSVpFX1MgICAgMjQKKyNkZWZpbmUgQ0lNUVNJWkVfTSAgICAweDNmVQorI2RlZmluZSBDSU1RU0laRV9HKHgpICgoKHgpID4+IENJTVFTSVpFX1MpICYgQ0lNUVNJWkVfTSkKKworI2RlZmluZSBDSU1RQkFTRV9TICAgIDE2CisjZGVmaW5lIENJTVFCQVNFX00gICAgMHgzZlUKKyNkZWZpbmUgQ0lNUUJBU0VfRyh4KSAoKCh4KSA+PiBDSU1RQkFTRV9TKSAmIENJTVFCQVNFX00pCisKKyNkZWZpbmUgUVVFRlVMTFRIUlNIX1MgICAgMAorI2RlZmluZSBRVUVGVUxMVEhSU0hfTSAgICAweDFmZlUKKyNkZWZpbmUgUVVFRlVMTFRIUlNIX0coeCkgKCgoeCkgPj4gUVVFRlVMTFRIUlNIX1MpICYgUVVFRlVMTFRIUlNIX00pCisKKyNkZWZpbmUgVVBfSUJRXzBfUkRBRERSX0EgMHgxMAorI2RlZmluZSBVUF9JQlFfMF9TSEFET1dfUkRBRERSX0EgMHgyODAKKyNkZWZpbmUgVVBfT0JRXzBfUkVBTEFERFJfQSAweDEwNAorI2RlZmluZSBVUF9PQlFfMF9TSEFET1dfUkVBTEFERFJfQSAweDM5NAorCisjZGVmaW5lIElCUVJEQUREUl9TICAgIDAKKyNkZWZpbmUgSUJRUkRBRERSX00gICAgMHgxZmZmVQorI2RlZmluZSBJQlFSREFERFJfRyh4KSAoKCh4KSA+PiBJQlFSREFERFJfUykgJiBJQlFSREFERFJfTSkKKworI2RlZmluZSBJQlFXUkFERFJfUyAgICAwCisjZGVmaW5lIElCUVdSQUREUl9NICAgIDB4MWZmZlUKKyNkZWZpbmUgSUJRV1JBRERSX0coeCkgKCgoeCkgPj4gSUJRV1JBRERSX1MpICYgSUJRV1JBRERSX00pCisKKyNkZWZpbmUgUVVFUkRBRERSX1MgICAgMAorI2RlZmluZSBRVUVSREFERFJfTSAgICAweDdmZmZVCisjZGVmaW5lIFFVRVJEQUREUl9HKHgpICgoKHgpID4+IFFVRVJEQUREUl9TKSAmIFFVRVJEQUREUl9NKQorCisjZGVmaW5lIFFVRVJFTUZMSVRTX1MgICAgMAorI2RlZmluZSBRVUVSRU1GTElUU19NICAgIDB4N2ZmVQorI2RlZmluZSBRVUVSRU1GTElUU19HKHgpICgoKHgpID4+IFFVRVJFTUZMSVRTX1MpICYgUVVFUkVNRkxJVFNfTSkKKworI2RlZmluZSBRVUVFT1BDTlRfUyAgICAxNgorI2RlZmluZSBRVUVFT1BDTlRfTSAgICAweGZmZlUKKyNkZWZpbmUgUVVFRU9QQ05UX0coeCkgKCgoeCkgPj4gUVVFRU9QQ05UX1MpICYgUVVFRU9QQ05UX00pCisKKyNkZWZpbmUgUVVFU09QQ05UX1MgICAgMAorI2RlZmluZSBRVUVTT1BDTlRfTSAgICAweGZmZlUKKyNkZWZpbmUgUVVFU09QQ05UX0coeCkgKCgoeCkgPj4gUVVFU09QQ05UX1MpICYgUVVFU09QQ05UX00pCisKKyNkZWZpbmUgT0JRU0VMRUNUX1MgICAgNAorI2RlZmluZSBPQlFTRUxFQ1RfVih4KSAoKHgpIDw8IE9CUVNFTEVDVF9TKQorI2RlZmluZSBPQlFTRUxFQ1RfRiAgICBPQlFTRUxFQ1RfVigxVSkKKworI2RlZmluZSBJQlFTRUxFQ1RfUyAgICAzCisjZGVmaW5lIElCUVNFTEVDVF9WKHgpICgoeCkgPDwgSUJRU0VMRUNUX1MpCisjZGVmaW5lIElCUVNFTEVDVF9GICAgIElCUVNFTEVDVF9WKDFVKQorCisjZGVmaW5lIFFVRU5VTVNFTEVDVF9TICAgIDAKKyNkZWZpbmUgUVVFTlVNU0VMRUNUX1YoeCkgKCh4KSA8PCBRVUVOVU1TRUxFQ1RfUykKIAogI2VuZGlmIC8qIF9fVDRfUkVHU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L3Q0X3ZhbHVlcy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC90NF92YWx1ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWIyZGNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC90NF92YWx1ZXMuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBDaGVsc2lvIFQ0IEV0aGVybmV0IGRyaXZlciBmb3IgTGludXguCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTQgQ2hlbHNpbyBDb21tdW5pY2F0aW9ucywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfX1Q0X1ZBTFVFU19IX18KKyNkZWZpbmUgX19UNF9WQUxVRVNfSF9fCisKKy8qIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgdmFyaW91cyBUNCByZWdpc3RlciB2YWx1ZSBoYXJkd2FyZQorICogY29uc3RhbnRzLiAgVGhlIHR5cGVzIG9mIHZhbHVlcyBlbmNvZGVkIGhlcmUgYXJlIHByZWRvbWluYW50bHkgdGhvc2UgZm9yCisgKiByZWdpc3RlciBmaWVsZHMgd2hpY2ggY29udHJvbCAibW9kYWwiIGJlaGF2aW9yLiAgRm9yIHRoZSBtb3N0IHBhcnQsIHdlIGRvCisgKiBub3QgaW5jbHVkZSBkZWZpbml0aW9ucyBmb3IgcmVnaXN0ZXIgZmllbGRzIHdoaWNoIGFyZSBzaW1wbGUgbnVtZXJpYworICogbWV0cmljcywgZXRjLgorICovCisKKy8qIFNHRSByZWdpc3RlciBmaWVsZCB2YWx1ZXMuCisgKi8KKworLyogQ09OVFJPTDEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgUlhQS1RDUExNT0RFX1NQTElUX1gJCTEKKworI2RlZmluZSBJTkdQQ0lFQk9VTkRBUllfU0hJRlRfWAkJNQorI2RlZmluZSBJTkdQQ0lFQk9VTkRBUllfMzJCX1gJCTAKKworI2RlZmluZSBJTkdQQURCT1VOREFSWV9TSElGVF9YCQk1CisKKy8qIENPTlRST0wyIHJlZ2lzdGVyICovCisjZGVmaW5lIElOR1BBQ0tCT1VOREFSWV9TSElGVF9YCQk1CisjZGVmaW5lIElOR1BBQ0tCT1VOREFSWV8xNkJfWAkJMAorCisvKiBHVFMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0dFX1RJTUVSUkVHUwkJCTYKKyNkZWZpbmUgVElNRVJSRUdfQ09VTlRFUjBfWAkJMAorCisvKiBUNSBhbmQgbGF0ZXIgc3VwcG9ydCBhIG5ldyBCQVIyLWJhc2VkIGRvb3JiZWxsIG1lY2hhbmlzbSBmb3IgRWdyZXNzIFF1ZXVlcy4KKyAqIFRoZSBVc2VyIERvb3JiZWxscyBhcmUgZWFjaCAxMjggYnl0ZXMgaW4gbGVuZ3RoIHdpdGggYSBTaW1wbGUgRG9vcmJlbGwgYXQKKyAqIG9mZnNldHMgOHggYW5kIGEgV3JpdGUgQ29tYmluaW5nIHNpbmdsZSA2NC1ieXRlIEVncmVzcyBRdWV1ZSBVbml0CisgKiAoSURYU0laRV9VTklUX1gpIEdhdGhlciBCdWZmZXIgaW50ZXJmYWNlIGF0IG9mZnNldCA2NC4gIEZvciBJbmdyZXNzIFF1ZXVlcywKKyAqIHdlIGhhdmUgYSBHb2luZyBUbyBTbGVlcCByZWdpc3RlciBhdCBvZmZzZXRzIDh4KzQuCisgKgorICogQXMgbm90ZWQgYWJvdmUsIHdlIGhhdmUgbWFueSBpbnN0YW5jZXMgb2YgdGhlIFNpbXBsZSBEb29yYmVsbCBhbmQgR29pbmcgVG8KKyAqIFNsZWVwIHJlZ2lzdGVycyBhdCBvZmZzZXRzIDh4IGFuZCA4eCs0LCByZXNwZWN0aXZlbHkuICBXZSB3YW50IHRvIHVzZSBhCisgKiBub24tNjQtYnl0ZSBhbGlnbmVkIG9mZnNldCBmb3IgdGhlIFNpbXBsZSBEb29yYmVsbCBpbiBvcmRlciB0byBhdHRlbXB0IHRvCisgKiBhdm9pZCBidWZmZXJpbmcgb2YgdGhlIHdyaXRlcyB0byB0aGUgU2ltcGxlIERvb3JiZWxsIGFuZCB3ZSB3YW50IHRvIHVzZSBhCisgKiBub24tY29udGlndW91cyBvZmZzZXQgZm9yIHRoZSBHb2luZyBUbyBTbGVlcCB3cml0ZXMgaW4gb3JkZXIgdG8gYXZvaWQKKyAqIHBvc3NpYmxlIGNvbWJpbmluZyBiZXR3ZWVuIHRoZW0uCisgKi8KKyNkZWZpbmUgU0dFX1VEQl9TSVpFCQkxMjgKKyNkZWZpbmUgU0dFX1VEQl9LRE9PUkJFTEwJOAorI2RlZmluZSBTR0VfVURCX0dUUwkJMjAKKyNkZWZpbmUgU0dFX1VEQl9XQ0RPT1JCRUxMCTY0CisKKy8qIENJTSByZWdpc3RlciBmaWVsZCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgWF9NQk9XTkVSX0ZXCQkJMQorI2RlZmluZSBYX01CT1dORVJfUEwJCQkyCisKKy8qIFBDSS1FIGRlZmluaXRpb25zICovCisjZGVmaW5lIFdJTkRPV19TSElGVF9YCQkxMAorI2RlZmluZSBQQ0lFT0ZTVF9TSElGVF9YCTEwCisKKy8qIFRQX1ZMQU5fUFJJX01BUCBjb250cm9scyB3aGljaCBzdWJzZXQgb2YgZmllbGRzIHdpbGwgYmUgcHJlc2VudCBpbiB0aGUKKyAqIENvbXByZXNzZWQgRmlsdGVyIFR1cGxlIGZvciBMRSBmaWx0ZXJzLiAgRWFjaCBiaXQgc2V0IGluIFRQX1ZMQU5fUFJJX01BUAorICogc2VsZWN0cyBmb3IgYSBwYXJ0aWN1bGFyIGZpZWxkIGJlaW5nIHByZXNlbnQuICBUaGVzZSBmaWVsZHMsIHdoZW4gcHJlc2VudAorICogaW4gdGhlIENvbXByZXNzZWQgRmlsdGVyIFR1cGxlLCBoYXZlIHRoZSBmb2xsb3dpbmcgd2lkdGhzIGluIGJpdHMuCisgKi8KKyNkZWZpbmUgRlRfRkNPRV9XICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEZUX1BPUlRfVyAgICAgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBGVF9WTklDX0lEX1cgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEZUX1ZMQU5fVyAgICAgICAgICAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgRlRfVE9TX1cgICAgICAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEZUX1BST1RPQ09MX1cgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBGVF9FVEhFUlRZUEVfVyAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIEZUX01BQ01BVENIX1cgICAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBGVF9NUFNISVRUWVBFX1cgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRlRfRlJBR01FTlRBVElPTl9XICAgICAgICAgICAgICAxCisKKy8qIFNvbWUgb2YgdGhlIENvbXByZXNzZWQgRmlsdGVyIFR1cGxlIGZpZWxkcyBoYXZlIGludGVybmFsIHN0cnVjdHVyZS4gIFRoZXNlCisgKiBiaXQgc2hpZnRzL21hc2tzIGRlc2NyaWJlIHRob3NlIHN0cnVjdHVyZXMuICBBbGwgc2hpZnRzIGFyZSByZWxhdGl2ZSB0byB0aGUKKyAqIGJhc2UgcG9zaXRpb24gb2YgdGhlIGZpZWxkcyB3aXRoaW4gdGhlIENvbXByZXNzZWQgRmlsdGVyIFR1cGxlCisgKi8KKyNkZWZpbmUgRlRfVkxBTl9WTERfUyAgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBGVF9WTEFOX1ZMRF9WKHgpICAgICAgICAgICAgICAgICgoeCkgPDwgRlRfVkxBTl9WTERfUykKKyNkZWZpbmUgRlRfVkxBTl9WTERfRiAgICAgICAgICAgICAgICAgICBGVF9WTEFOX1ZMRF9WKDFVKQorCisjZGVmaW5lIEZUX1ZOSURfSURfVkZfUyAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBGVF9WTklEX0lEX1ZGX1YoeCkgICAgICAgICAgICAgICgoeCkgPDwgRlRfVk5JRF9JRF9WRl9TKQorCisjZGVmaW5lIEZUX1ZOSURfSURfUEZfUyAgICAgICAgICAgICAgICAgNworI2RlZmluZSBGVF9WTklEX0lEX1BGX1YoeCkgICAgICAgICAgICAgICgoeCkgPDwgRlRfVk5JRF9JRF9QRl9TKQorCisjZGVmaW5lIEZUX1ZOSURfSURfVkxEX1MgICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgRlRfVk5JRF9JRF9WTERfVih4KSAgICAgICAgICAgICAoKHgpIDw8IEZUX1ZOSURfSURfVkxEX1MpCisKKyNlbmRpZiAvKiBfX1Q0X1ZBTFVFU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvdDRmd19hcGkuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjQvdDRmd19hcGkuaAppbmRleCA3YzBhZWM4Li45YjM1M2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L3Q0ZndfYXBpLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC90NGZ3X2FwaS5oCkBAIC02NzMsNiArNjczLDcgQEAKIAlGV19SU1NfSU5EX1RCTF9DTUQgICAgICAgICAgICAgPSAweDIwLAogCUZXX1JTU19HTEJfQ09ORklHX0NNRCAgICAgICAgICA9IDB4MjIsCiAJRldfUlNTX1ZJX0NPTkZJR19DTUQgICAgICAgICAgID0gMHgyMywKKwlGV19ERVZMT0dfQ01EICAgICAgICAgICAgICAgICAgPSAweDI1LAogCUZXX0NMSVBfQ01EICAgICAgICAgICAgICAgICAgICA9IDB4MjgsCiAJRldfTEFTVEMyRV9DTUQgICAgICAgICAgICAgICAgID0gMHg0MCwKIAlGV19FUlJPUl9DTUQgICAgICAgICAgICAgICAgICAgPSAweDgwLApAQCAtMTA1OCw5ICsxMDU5LDExIEBACiAJRldfUEFSQU1TX1BBUkFNX0RFVl9GV1JFViA9IDB4MEIsCiAJRldfUEFSQU1TX1BBUkFNX0RFVl9UUFJFViA9IDB4MEMsCiAJRldfUEFSQU1TX1BBUkFNX0RFVl9DRiA9IDB4MEQsCisJRldfUEFSQU1TX1BBUkFNX0RFVl9ESUFHID0gMHgxMSwKIAlGV19QQVJBTVNfUEFSQU1fREVWX01BWE9SRElSRF9RUCA9IDB4MTMsIC8qIG1heCBzdXBwb3J0ZWQgUVAgSVJEL09SRCAqLwogCUZXX1BBUkFNU19QQVJBTV9ERVZfTUFYSVJEX0FEQVBURVIgPSAweDE0LCAvKiBtYXggc3VwcG9ydGVkIGFkYXAgSVJEICovCiAJRldfUEFSQU1TX1BBUkFNX0RFVl9VTFBUWF9NRU1XUklURV9EU0dMID0gMHgxNywKKwlGV19QQVJBTVNfUEFSQU1fREVWX0ZXQ0FDSEUgPSAweDE4LAogfTsKIAogLyoKQEAgLTExMjAsNiArMTEyMywxNiBAQAogCUZXX1BBUkFNU19QQVJBTV9ETUFRX0VRX0RDQlBSSU9fRVRIID0gMHgxMywKIH07CiAKK2VudW0gZndfcGFyYW1zX3BhcmFtX2Rldl9kaWFnIHsKKwlGV19QQVJBTV9ERVZfRElBR19UTVAJCT0gMHgwMCwKKwlGV19QQVJBTV9ERVZfRElBR19WREQJCT0gMHgwMSwKK307CisKK2VudW0gZndfcGFyYW1zX3BhcmFtX2Rldl9md2NhY2hlIHsKKwlGV19QQVJBTV9ERVZfRldDQUNIRV9GTFVTSCAgICAgID0gMHgwMCwKKwlGV19QQVJBTV9ERVZfRldDQUNIRV9GTFVTSElOViAgID0gMHgwMSwKK307CisKICNkZWZpbmUgRldfUEFSQU1TX01ORU1fUwkyNAogI2RlZmluZSBGV19QQVJBTVNfTU5FTV9WKHgpCSgoeCkgPDwgRldfUEFSQU1TX01ORU1fUykKIApAQCAtMzAwNSwyMSArMzAxOCwyOSBAQAogCiAjZGVmaW5lIEZXX0hEUl9GV19WRVJfTUFKT1JfUwkyNAogI2RlZmluZSBGV19IRFJfRldfVkVSX01BSk9SX00JMHhmZgorI2RlZmluZSBGV19IRFJfRldfVkVSX01BSk9SX1YoeCkgXAorCSgoeCkgPDwgRldfSERSX0ZXX1ZFUl9NQUpPUl9TKQogI2RlZmluZSBGV19IRFJfRldfVkVSX01BSk9SX0coeCkgXAogCSgoKHgpID4+IEZXX0hEUl9GV19WRVJfTUFKT1JfUykgJiBGV19IRFJfRldfVkVSX01BSk9SX00pCiAKICNkZWZpbmUgRldfSERSX0ZXX1ZFUl9NSU5PUl9TCTE2CiAjZGVmaW5lIEZXX0hEUl9GV19WRVJfTUlOT1JfTQkweGZmCisjZGVmaW5lIEZXX0hEUl9GV19WRVJfTUlOT1JfVih4KSBcCisJKCh4KSA8PCBGV19IRFJfRldfVkVSX01JTk9SX1MpCiAjZGVmaW5lIEZXX0hEUl9GV19WRVJfTUlOT1JfRyh4KSBcCiAJKCgoeCkgPj4gRldfSERSX0ZXX1ZFUl9NSU5PUl9TKSAmIEZXX0hEUl9GV19WRVJfTUlOT1JfTSkKIAogI2RlZmluZSBGV19IRFJfRldfVkVSX01JQ1JPX1MJOAogI2RlZmluZSBGV19IRFJfRldfVkVSX01JQ1JPX00JMHhmZgorI2RlZmluZSBGV19IRFJfRldfVkVSX01JQ1JPX1YoeCkgXAorCSgoeCkgPDwgRldfSERSX0ZXX1ZFUl9NSUNST19TKQogI2RlZmluZSBGV19IRFJfRldfVkVSX01JQ1JPX0coeCkgXAogCSgoKHgpID4+IEZXX0hEUl9GV19WRVJfTUlDUk9fUykgJiBGV19IRFJfRldfVkVSX01JQ1JPX00pCiAKICNkZWZpbmUgRldfSERSX0ZXX1ZFUl9CVUlMRF9TCTAKICNkZWZpbmUgRldfSERSX0ZXX1ZFUl9CVUlMRF9NCTB4ZmYKKyNkZWZpbmUgRldfSERSX0ZXX1ZFUl9CVUlMRF9WKHgpIFwKKwkoKHgpIDw8IEZXX0hEUl9GV19WRVJfQlVJTERfUykKICNkZWZpbmUgRldfSERSX0ZXX1ZFUl9CVUlMRF9HKHgpIFwKIAkoKCh4KSA+PiBGV19IRFJfRldfVkVSX0JVSUxEX1MpICYgRldfSERSX0ZXX1ZFUl9CVUlMRF9NKQogCkBAIC0zMDM4LDQgKzMwNTksODQgQEAKIAlGV19IRFJfRkxBR1NfUkVTRVRfSEFMVCA9IDB4MDAwMDAwMDEsCiB9OwogCisvKiBsZW5ndGggb2YgdGhlIGZvcm1hdHRpbmcgc3RyaW5nICAqLworI2RlZmluZSBGV19ERVZMT0dfRk1UX0xFTgkxOTIKKworLyogbWF4aW11bSBudW1iZXIgb2YgdGhlIGZvcm1hdHRpbmcgc3RyaW5nIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgRldfREVWTE9HX0ZNVF9QQVJBTVNfTlVNIDgKKworLyogcHJpb3JpdHkgbGV2ZWxzICovCitlbnVtIGZ3X2RldmxvZ19sZXZlbCB7CisJRldfREVWTE9HX0xFVkVMX0VNRVJHCT0gMHgwLAorCUZXX0RFVkxPR19MRVZFTF9DUklUCT0gMHgxLAorCUZXX0RFVkxPR19MRVZFTF9FUlIJPSAweDIsCisJRldfREVWTE9HX0xFVkVMX05PVElDRQk9IDB4MywKKwlGV19ERVZMT0dfTEVWRUxfSU5GTwk9IDB4NCwKKwlGV19ERVZMT0dfTEVWRUxfREVCVUcJPSAweDUsCisJRldfREVWTE9HX0xFVkVMX01BWAk9IDB4NSwKK307CisKKy8qIGZhY2lsaXRpZXMgdGhhdCBtYXkgc2VuZCBhIGxvZyBtZXNzYWdlICovCitlbnVtIGZ3X2RldmxvZ19mYWNpbGl0eSB7CisJRldfREVWTE9HX0ZBQ0lMSVRZX0NPUkUJCT0gMHgwMCwKKwlGV19ERVZMT0dfRkFDSUxJVFlfQ0YJCT0gMHgwMSwKKwlGV19ERVZMT0dfRkFDSUxJVFlfU0NIRUQJPSAweDAyLAorCUZXX0RFVkxPR19GQUNJTElUWV9USU1FUgk9IDB4MDQsCisJRldfREVWTE9HX0ZBQ0lMSVRZX1JFUwkJPSAweDA2LAorCUZXX0RFVkxPR19GQUNJTElUWV9IVwkJPSAweDA4LAorCUZXX0RFVkxPR19GQUNJTElUWV9GTFIJCT0gMHgxMCwKKwlGV19ERVZMT0dfRkFDSUxJVFlfRE1BUQkJPSAweDEyLAorCUZXX0RFVkxPR19GQUNJTElUWV9QSFkJCT0gMHgxNCwKKwlGV19ERVZMT0dfRkFDSUxJVFlfTUFDCQk9IDB4MTYsCisJRldfREVWTE9HX0ZBQ0lMSVRZX1BPUlQJCT0gMHgxOCwKKwlGV19ERVZMT0dfRkFDSUxJVFlfVkkJCT0gMHgxQSwKKwlGV19ERVZMT0dfRkFDSUxJVFlfRklMVEVSCT0gMHgxQywKKwlGV19ERVZMT0dfRkFDSUxJVFlfQUNMCQk9IDB4MUUsCisJRldfREVWTE9HX0ZBQ0lMSVRZX1RNCQk9IDB4MjAsCisJRldfREVWTE9HX0ZBQ0lMSVRZX1FGQwkJPSAweDIyLAorCUZXX0RFVkxPR19GQUNJTElUWV9EQ0IJCT0gMHgyNCwKKwlGV19ERVZMT0dfRkFDSUxJVFlfRVRICQk9IDB4MjYsCisJRldfREVWTE9HX0ZBQ0lMSVRZX09GTEQJCT0gMHgyOCwKKwlGV19ERVZMT0dfRkFDSUxJVFlfUkkJCT0gMHgyQSwKKwlGV19ERVZMT0dfRkFDSUxJVFlfSVNDU0kJPSAweDJDLAorCUZXX0RFVkxPR19GQUNJTElUWV9GQ09FCQk9IDB4MkUsCisJRldfREVWTE9HX0ZBQ0lMSVRZX0ZPSVNDU0kJPSAweDMwLAorCUZXX0RFVkxPR19GQUNJTElUWV9GT0ZDT0UJPSAweDMyLAorCUZXX0RFVkxPR19GQUNJTElUWV9NQVgJCT0gMHgzMiwKK307CisKKy8qIGxvZyBtZXNzYWdlIGZvcm1hdCAqLworc3RydWN0IGZ3X2RldmxvZ19lIHsKKwlfX2JlNjQJdGltZXN0YW1wOworCV9fYmUzMglzZXFubzsKKwlfX2JlMTYJcmVzZXJ2ZWQxOworCV9fdTgJbGV2ZWw7CisJX191OAlmYWNpbGl0eTsKKwlfX3U4CWZtdFtGV19ERVZMT0dfRk1UX0xFTl07CisJX19iZTMyCXBhcmFtc1tGV19ERVZMT0dfRk1UX1BBUkFNU19OVU1dOworCV9fYmUzMglyZXNlcnZlZDNbNF07Cit9OworCitzdHJ1Y3QgZndfZGV2bG9nX2NtZCB7CisJX19iZTMyIG9wX3RvX3dyaXRlOworCV9fYmUzMiByZXR2YWxfbGVuMTY7CisJX191OCAgIGxldmVsOworCV9fdTggICByMls3XTsKKwlfX2JlMzIgbWVtdHlwZV9kZXZsb2dfbWVtYWRkcjE2X2RldmxvZzsKKwlfX2JlMzIgbWVtc2l6ZV9kZXZsb2c7CisJX19iZTMyIHIzWzJdOworfTsKKworI2RlZmluZSBGV19ERVZMT0dfQ01EX01FTVRZUEVfREVWTE9HX1MJCTI4CisjZGVmaW5lIEZXX0RFVkxPR19DTURfTUVNVFlQRV9ERVZMT0dfTQkJMHhmCisjZGVmaW5lIEZXX0RFVkxPR19DTURfTUVNVFlQRV9ERVZMT0dfRyh4KQlcCisJKCgoeCkgPj4gRldfREVWTE9HX0NNRF9NRU1UWVBFX0RFVkxPR19TKSAmIFwKKwkgRldfREVWTE9HX0NNRF9NRU1UWVBFX0RFVkxPR19NKQorCisjZGVmaW5lIEZXX0RFVkxPR19DTURfTUVNQUREUjE2X0RFVkxPR19TCTAKKyNkZWZpbmUgRldfREVWTE9HX0NNRF9NRU1BRERSMTZfREVWTE9HX00JMHhmZmZmZmZmCisjZGVmaW5lIEZXX0RFVkxPR19DTURfTUVNQUREUjE2X0RFVkxPR19HKHgpCVwKKwkoKCh4KSA+PiBGV19ERVZMT0dfQ01EX01FTUFERFIxNl9ERVZMT0dfUykgJiBcCisJIEZXX0RFVkxPR19DTURfTUVNQUREUjE2X0RFVkxPR19NKQorCiAjZW5kaWYgLyogX1Q0RldfSU5URVJGQUNFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0L3Q0ZndfdmVyc2lvbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC90NGZ3X3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmJkM2Y3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNC90NGZ3X3ZlcnNpb24uaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIENoZWxzaW8gVDQgRXRoZXJuZXQgZHJpdmVyIGZvciBMaW51eC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAxNCBDaGVsc2lvIENvbW11bmljYXRpb25zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9fVDRGV19WRVJTSU9OX0hfXworI2RlZmluZSBfX1Q0RldfVkVSU0lPTl9IX18KKworI2RlZmluZSBUNEZXX1ZFUlNJT05fTUFKT1IgMHgwMQorI2RlZmluZSBUNEZXX1ZFUlNJT05fTUlOT1IgMHgwQworI2RlZmluZSBUNEZXX1ZFUlNJT05fTUlDUk8gMHgxOQorI2RlZmluZSBUNEZXX1ZFUlNJT05fQlVJTEQgMHgwMAorCisjZGVmaW5lIFQ1RldfVkVSU0lPTl9NQUpPUiAweDAxCisjZGVmaW5lIFQ1RldfVkVSU0lPTl9NSU5PUiAweDBDCisjZGVmaW5lIFQ1RldfVkVSU0lPTl9NSUNSTyAweDE5CisjZGVmaW5lIFQ1RldfVkVSU0lPTl9CVUlMRCAweDAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jCmluZGV4IGE5MzZlZTguLjEyMmUyOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9jeGdiNHZmX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKQEAgLTM4MCw5ICszODAsOSBAQAogCSAqIGVuYWJsZSBpbnRlcnJ1cHRzLgogCSAqLwogCXQ0X3dyaXRlX3JlZyhyc3BxLT5hZGFwdGVyLCBUNFZGX1NHRV9CQVNFX0FERFIgKyBTR0VfVkZfR1RTLAotCQkgICAgIENJRFhJTkMoMCkgfAotCQkgICAgIFNFSU5UQVJNKHJzcHEtPmludHJfcGFyYW1zKSB8Ci0JCSAgICAgSU5HUkVTU1FJRChyc3BxLT5jbnR4dF9pZCkpOworCQkgICAgIENJRFhJTkNfVigwKSB8CisJCSAgICAgU0VJTlRBUk1fVihyc3BxLT5pbnRyX3BhcmFtcykgfAorCQkgICAgIElOR1JFU1NRSURfVihyc3BxLT5jbnR4dF9pZCkpOwogfQogCiAvKgpAQCAtNDAzLDkgKzQwMyw5IEBACiAJICovCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgVVNJTkdfTVNJKQogCQl0NF93cml0ZV9yZWcoYWRhcHRlciwgVDRWRl9TR0VfQkFTRV9BRERSICsgU0dFX1ZGX0dUUywKLQkJCSAgICAgQ0lEWElOQygwKSB8Ci0JCQkgICAgIFNFSU5UQVJNKHMtPmludHJxLmludHJfcGFyYW1zKSB8Ci0JCQkgICAgIElOR1JFU1NRSUQocy0+aW50cnEuY250eHRfaWQpKTsKKwkJCSAgICAgQ0lEWElOQ19WKDApIHwKKwkJCSAgICAgU0VJTlRBUk1fVihzLT5pbnRycS5pbnRyX3BhcmFtcykgfAorCQkJICAgICBJTkdSRVNTUUlEX1Yocy0+aW50cnEuY250eHRfaWQpKTsKIAogfQogCkBAIC00NTAsNyArNDUwLDcgQEAKIAkJLyogRlcgY2FuIHNlbmQgRUdSX1VQREFURXMgZW5jYXBzdWxhdGVkIGluIGEgQ1BMX0ZXNF9NU0cuCiAJCSAqLwogCQljb25zdCBzdHJ1Y3QgY3BsX3NnZV9lZ3JfdXBkYXRlICpwID0gKHZvaWQgKikocnNwICsgMyk7Ci0JCW9wY29kZSA9IEdfQ1BMX09QQ09ERShudG9obChwLT5vcGNvZGVfcWlkKSk7CisJCW9wY29kZSA9IENQTF9PUENPREVfRyhudG9obChwLT5vcGNvZGVfcWlkKSk7CiAJCWlmIChvcGNvZGUgIT0gQ1BMX1NHRV9FR1JfVVBEQVRFKSB7CiAJCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LCAidW5leHBlY3RlZCBGVzQvQ1BMICUjeCBvbiBGVyBldmVudCBxdWV1ZVxuIgogCQkJCSwgb3Bjb2RlKTsKQEAgLTQ3MSw3ICs0NzEsNyBAQAogCQkgKiBmcmVlIFRYIFF1ZXVlIERlc2NyaXB0b3JzIC4uLgogCQkgKi8KIAkJY29uc3Qgc3RydWN0IGNwbF9zZ2VfZWdyX3VwZGF0ZSAqcCA9IGNwbDsKLQkJdW5zaWduZWQgaW50IHFpZCA9IEVHUl9RSUQoYmUzMl90b19jcHUocC0+b3Bjb2RlX3FpZCkpOworCQl1bnNpZ25lZCBpbnQgcWlkID0gRUdSX1FJRF9HKGJlMzJfdG9fY3B1KHAtPm9wY29kZV9xaWQpKTsKIAkJc3RydWN0IHNnZSAqcyA9ICZhZGFwdGVyLT5zZ2U7CiAJCXN0cnVjdCBzZ2VfdHhxICp0cTsKIAkJc3RydWN0IHNnZV9ldGhfdHhxICp0eHE7CkBAIC0xNjczLDcgKzE2NzMsNyBAQAogCXJlZ19ibG9ja19kdW1wKGFkYXB0ZXIsIHJlZ2J1ZiwKIAkJICAgICAgIFQ0VkZfUExfQkFTRV9BRERSICsgVDRWRl9NT0RfTUFQX1BMX0ZJUlNULAogCQkgICAgICAgVDRWRl9QTF9CQVNFX0FERFIgKyAoaXNfdDQoYWRhcHRlci0+cGFyYW1zLmNoaXApCi0JCSAgICAgICA/IEFfUExfVkZfV0hPQU1JIDogQV9QTF9WRl9SRVZJU0lPTikpOworCQkgICAgICAgPyBQTF9WRl9XSE9BTUlfQSA6IFBMX1ZGX1JFVklTSU9OX0EpKTsKIAlyZWdfYmxvY2tfZHVtcChhZGFwdGVyLCByZWdidWYsCiAJCSAgICAgICBUNFZGX0NJTV9CQVNFX0FERFIgKyBUNFZGX01PRF9NQVBfQ0lNX0ZJUlNULAogCQkgICAgICAgVDRWRl9DSU1fQkFTRV9BRERSICsgVDRWRl9NT0RfTUFQX0NJTV9MQVNUKTsKQEAgLTIyOTQsMjYgKzIyOTQsMjIgQEAKIAkgKiB0aHJlc2hvbGQgdmFsdWVzIGZyb20gdGhlIFNHRSBwYXJhbWV0ZXJzLgogCSAqLwogCXMtPnRpbWVyX3ZhbFswXSA9IGNvcmVfdGlja3NfdG9fdXMoYWRhcHRlciwKLQkJVElNRVJWQUxVRTBfR0VUKHNnZV9wYXJhbXMtPnNnZV90aW1lcl92YWx1ZV8wX2FuZF8xKSk7CisJCVRJTUVSVkFMVUUwX0coc2dlX3BhcmFtcy0+c2dlX3RpbWVyX3ZhbHVlXzBfYW5kXzEpKTsKIAlzLT50aW1lcl92YWxbMV0gPSBjb3JlX3RpY2tzX3RvX3VzKGFkYXB0ZXIsCi0JCVRJTUVSVkFMVUUxX0dFVChzZ2VfcGFyYW1zLT5zZ2VfdGltZXJfdmFsdWVfMF9hbmRfMSkpOworCQlUSU1FUlZBTFVFMV9HKHNnZV9wYXJhbXMtPnNnZV90aW1lcl92YWx1ZV8wX2FuZF8xKSk7CiAJcy0+dGltZXJfdmFsWzJdID0gY29yZV90aWNrc190b191cyhhZGFwdGVyLAotCQlUSU1FUlZBTFVFMF9HRVQoc2dlX3BhcmFtcy0+c2dlX3RpbWVyX3ZhbHVlXzJfYW5kXzMpKTsKKwkJVElNRVJWQUxVRTBfRyhzZ2VfcGFyYW1zLT5zZ2VfdGltZXJfdmFsdWVfMl9hbmRfMykpOwogCXMtPnRpbWVyX3ZhbFszXSA9IGNvcmVfdGlja3NfdG9fdXMoYWRhcHRlciwKLQkJVElNRVJWQUxVRTFfR0VUKHNnZV9wYXJhbXMtPnNnZV90aW1lcl92YWx1ZV8yX2FuZF8zKSk7CisJCVRJTUVSVkFMVUUxX0coc2dlX3BhcmFtcy0+c2dlX3RpbWVyX3ZhbHVlXzJfYW5kXzMpKTsKIAlzLT50aW1lcl92YWxbNF0gPSBjb3JlX3RpY2tzX3RvX3VzKGFkYXB0ZXIsCi0JCVRJTUVSVkFMVUUwX0dFVChzZ2VfcGFyYW1zLT5zZ2VfdGltZXJfdmFsdWVfNF9hbmRfNSkpOworCQlUSU1FUlZBTFVFMF9HKHNnZV9wYXJhbXMtPnNnZV90aW1lcl92YWx1ZV80X2FuZF81KSk7CiAJcy0+dGltZXJfdmFsWzVdID0gY29yZV90aWNrc190b191cyhhZGFwdGVyLAotCQlUSU1FUlZBTFVFMV9HRVQoc2dlX3BhcmFtcy0+c2dlX3RpbWVyX3ZhbHVlXzRfYW5kXzUpKTsKKwkJVElNRVJWQUxVRTFfRyhzZ2VfcGFyYW1zLT5zZ2VfdGltZXJfdmFsdWVfNF9hbmRfNSkpOwogCi0Jcy0+Y291bnRlcl92YWxbMF0gPQotCQlUSFJFU0hPTERfMF9HRVQoc2dlX3BhcmFtcy0+c2dlX2luZ3Jlc3NfcnhfdGhyZXNob2xkKTsKLQlzLT5jb3VudGVyX3ZhbFsxXSA9Ci0JCVRIUkVTSE9MRF8xX0dFVChzZ2VfcGFyYW1zLT5zZ2VfaW5ncmVzc19yeF90aHJlc2hvbGQpOwotCXMtPmNvdW50ZXJfdmFsWzJdID0KLQkJVEhSRVNIT0xEXzJfR0VUKHNnZV9wYXJhbXMtPnNnZV9pbmdyZXNzX3J4X3RocmVzaG9sZCk7Ci0Jcy0+Y291bnRlcl92YWxbM10gPQotCQlUSFJFU0hPTERfM19HRVQoc2dlX3BhcmFtcy0+c2dlX2luZ3Jlc3NfcnhfdGhyZXNob2xkKTsKKwlzLT5jb3VudGVyX3ZhbFswXSA9IFRIUkVTSE9MRF8wX0coc2dlX3BhcmFtcy0+c2dlX2luZ3Jlc3NfcnhfdGhyZXNob2xkKTsKKwlzLT5jb3VudGVyX3ZhbFsxXSA9IFRIUkVTSE9MRF8xX0coc2dlX3BhcmFtcy0+c2dlX2luZ3Jlc3NfcnhfdGhyZXNob2xkKTsKKwlzLT5jb3VudGVyX3ZhbFsyXSA9IFRIUkVTSE9MRF8yX0coc2dlX3BhcmFtcy0+c2dlX2luZ3Jlc3NfcnhfdGhyZXNob2xkKTsKKwlzLT5jb3VudGVyX3ZhbFszXSA9IFRIUkVTSE9MRF8zX0coc2dlX3BhcmFtcy0+c2dlX2luZ3Jlc3NfcnhfdGhyZXNob2xkKTsKIAogCS8qCiAJICogR3JhYiBvdXIgVmlydHVhbCBJbnRlcmZhY2UgcmVzb3VyY2UgYWxsb2NhdGlvbiwgZXh0cmFjdCB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9zZ2UuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi9zZ2UuYwppbmRleCBmN2ZkMTMxLi4wNTQ1ZjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvc2dlLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL3NnZS5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAidDR2Zl9kZWZzLmgiCiAKICNpbmNsdWRlICIuLi9jeGdiNC90NF9yZWdzLmgiCisjaW5jbHVkZSAiLi4vY3hnYjQvdDRfdmFsdWVzLmgiCiAjaW5jbHVkZSAiLi4vY3hnYjQvdDRmd19hcGkuaCIKICNpbmNsdWRlICIuLi9jeGdiNC90NF9tc2cuaCIKIApAQCAtNTMxLDExICs1MzIsMTEgQEAKIAkgKi8KIAlpZiAoZmwtPnBlbmRfY3JlZCA+PSBGTF9QRVJfRVFfVU5JVCkgewogCQlpZiAoaXNfdDQoYWRhcHRlci0+cGFyYW1zLmNoaXApKQotCQkJdmFsID0gUElEWChmbC0+cGVuZF9jcmVkIC8gRkxfUEVSX0VRX1VOSVQpOworCQkJdmFsID0gUElEWF9WKGZsLT5wZW5kX2NyZWQgLyBGTF9QRVJfRVFfVU5JVCk7CiAJCWVsc2UKLQkJCXZhbCA9IFBJRFhfVDUoZmwtPnBlbmRfY3JlZCAvIEZMX1BFUl9FUV9VTklUKSB8Ci0JCQkgICAgICBEQlRZUEUoMSk7Ci0JCXZhbCB8PSBEQlBSSU8oMSk7CisJCQl2YWwgPSBQSURYX1Q1X1YoZmwtPnBlbmRfY3JlZCAvIEZMX1BFUl9FUV9VTklUKSB8CisJCQkgICAgICBEQlRZUEVfRjsKKwkJdmFsIHw9IERCUFJJT19GOwogCiAJCS8qIE1ha2Ugc3VyZSBhbGwgbWVtb3J5IHdyaXRlcyB0byB0aGUgRnJlZSBMaXN0IHF1ZXVlIGFyZQogCQkgKiBjb21taXR0ZWQgYmVmb3JlIHdlIHRlbGwgdGhlIGhhcmR3YXJlIGFib3V0IHRoZW0uCkBAIC01NDksOSArNTUwLDkgQEAKIAkJaWYgKHVubGlrZWx5KGZsLT5iYXIyX2FkZHIgPT0gTlVMTCkpIHsKIAkJCXQ0X3dyaXRlX3JlZyhhZGFwdGVyLAogCQkJCSAgICAgVDRWRl9TR0VfQkFTRV9BRERSICsgU0dFX1ZGX0tET09SQkVMTCwKLQkJCQkgICAgIFFJRChmbC0+Y250eHRfaWQpIHwgdmFsKTsKKwkJCQkgICAgIFFJRF9WKGZsLT5jbnR4dF9pZCkgfCB2YWwpOwogCQl9IGVsc2UgewotCQkJd3JpdGVsKHZhbCB8IFFJRChmbC0+YmFyMl9xaWQpLAorCQkJd3JpdGVsKHZhbCB8IFFJRF9WKGZsLT5iYXIyX3FpZCksCiAJCQkgICAgICAgZmwtPmJhcjJfYWRkciArIFNHRV9VREJfS0RPT1JCRUxMKTsKIAogCQkJLyogVGhpcyBXcml0ZSBtZW1vcnkgQmFycmllciB3aWxsIGZvcmNlIHRoZSB3cml0ZSB0bwpAQCAtOTI1LDcgKzkyNiw3IEBACiAJfQogCiAJc2dsLT5jbWRfbnNnZSA9IGh0b25sKFVMUFRYX0NNRF9WKFVMUF9UWF9TQ19EU0dMKSB8Ci0JCQkgICAgICBVTFBUWF9OU0dFKG5mcmFncykpOworCQkJICAgICAgVUxQVFhfTlNHRV9WKG5mcmFncykpOwogCWlmIChsaWtlbHkoLS1uZnJhZ3MgPT0gMCkpCiAJCXJldHVybjsKIAkvKgpAQCAtOTc5LDEyICs5ODAsMTIgQEAKIAkgKiBkb29yYmVsbCBtZWNoYW5pc207IG90aGVyd2lzZSB1c2UgdGhlIG5ldyBCQVIyIG1lY2hhbmlzbS4KIAkgKi8KIAlpZiAodW5saWtlbHkodHEtPmJhcjJfYWRkciA9PSBOVUxMKSkgewotCQl1MzIgdmFsID0gUElEWChuKTsKKwkJdTMyIHZhbCA9IFBJRFhfVihuKTsKIAogCQl0NF93cml0ZV9yZWcoYWRhcHRlciwgVDRWRl9TR0VfQkFTRV9BRERSICsgU0dFX1ZGX0tET09SQkVMTCwKLQkJCSAgICAgUUlEKHRxLT5jbnR4dF9pZCkgfCB2YWwpOworCQkJICAgICBRSURfVih0cS0+Y250eHRfaWQpIHwgdmFsKTsKIAl9IGVsc2UgewotCQl1MzIgdmFsID0gUElEWF9UNShuKTsKKwkJdTMyIHZhbCA9IFBJRFhfVDVfVihuKTsKIAogCQkvKiBUNCBhbmQgbGF0ZXIgY2hpcHMgc2hhcmUgdGhlIHNhbWUgUElEWCBmaWVsZCBvZmZzZXQgd2l0aGluCiAJCSAqIHRoZSBkb29yYmVsbCwgYnV0IFQ1IGFuZCBsYXRlciBzaHJhbmsgdGhlIGZpZWxkIGluIG9yZGVyIHRvCkBAIC05OTIsNyArOTkzLDcgQEAKIAkJICogbGFyZ2UgaW4gdGhlIGZpcnN0IHBsYWNlICgxNCBiaXRzKSBzbyB3ZSBqdXN0IHVzZSB0aGUgVDUKIAkJICogYW5kIGxhdGVyIGxpbWl0cyBhbmQgd2FybiBpZiBhIFF1ZXVlIElEIGlzIHRvbyBsYXJnZS4KIAkJICovCi0JCVdBUk5fT04odmFsICYgREJQUklPKDEpKTsKKwkJV0FSTl9PTih2YWwgJiBEQlBSSU9fRik7CiAKIAkJLyogSWYgd2UncmUgb25seSB3cml0aW5nIGEgc2luZ2xlIEVncmVzcyBVbml0IGFuZCB0aGUgQkFSMgogCQkgKiBRdWV1ZSBJRCBpcyAwLCB3ZSBjYW4gdXNlIHRoZSBXcml0ZSBDb21iaW5pbmcgRG9vcmJlbGwKQEAgLTEwMjMsNyArMTAyNCw3IEBACiAJCQkJY291bnQtLTsKIAkJCX0KIAkJfSBlbHNlCi0JCQl3cml0ZWwodmFsIHwgUUlEKHRxLT5iYXIyX3FpZCksCisJCQl3cml0ZWwodmFsIHwgUUlEX1YodHEtPmJhcjJfcWlkKSwKIAkJCSAgICAgICB0cS0+YmFyMl9hZGRyICsgU0dFX1VEQl9LRE9PUkJFTEwpOwogCiAJCS8qIFRoaXMgV3JpdGUgTWVtb3J5IEJhcnJpZXIgd2lsbCBmb3JjZSB0aGUgd3JpdGUgdG8gdGhlIFVzZXIKQEAgLTEzMjUsOSArMTMyNiw5IEBACiAJICogSWYgdGhlcmUncyBhIFZMQU4gdGFnIHByZXNlbnQsIGFkZCB0aGF0IHRvIHRoZSBsaXN0IG9mIHRoaW5ncyB0bwogCSAqIGRvIGluIHRoaXMgV29yayBSZXF1ZXN0LgogCSAqLwotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgewogCQl0eHEtPnZsYW5faW5zKys7Ci0JCWNudHJsIHw9IFRYUEtUX1ZMQU5fVkxEIHwgVFhQS1RfVkxBTih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJCWNudHJsIHw9IFRYUEtUX1ZMQU5fVkxEIHwgVFhQS1RfVkxBTihza2Jfdmxhbl90YWdfZ2V0KHNrYikpOwogCX0KIAogCS8qCkBAIC0xNjAzLDcgKzE2MDQsNyBAQAogCSAqIElmIHRoaXMgaXMgYSBnb29kIFRDUCBwYWNrZXQgYW5kIHdlIGhhdmUgR2VuZXJpYyBSZWNlaXZlIE9mZmxvYWQKIAkgKiBlbmFibGVkLCBoYW5kbGUgdGhlIHBhY2tldCBpbiB0aGUgR1JPIHBhdGguCiAJICovCi0JaWYgKChwa3QtPmwyaW5mbyAmIGNwdV90b19iZTMyKFJYRl9UQ1ApKSAmJgorCWlmICgocGt0LT5sMmluZm8gJiBjcHVfdG9fYmUzMihSWEZfVENQX0YpKSAmJgogCSAgICAocnNwcS0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfR1JPKSAmJiBjc3VtX29rICYmCiAJICAgICFwa3QtPmlwX2ZyYWcpIHsKIAkJZG9fZ3JvKHJ4cSwgZ2wsIHBrdCk7CkBAIC0xNjI1LDcgKzE2MjYsNyBAQAogCXJ4cS0+c3RhdHMucGt0cysrOwogCiAJaWYgKGNzdW1fb2sgJiYgIXBrdC0+ZXJyX3ZlYyAmJgotCSAgICAoYmUzMl90b19jcHUocGt0LT5sMmluZm8pICYgKFJYRl9VRFB8UlhGX1RDUCkpKSB7CisJICAgIChiZTMyX3RvX2NwdShwa3QtPmwyaW5mbykgJiAoUlhGX1VEUF9GIHwgUlhGX1RDUF9GKSkpIHsKIAkJaWYgKCFwa3QtPmlwX2ZyYWcpCiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQllbHNlIHsKQEAgLTE4NzUsMTMgKzE4NzYsMTMgQEAKIAlpZiAodW5saWtlbHkod29ya19kb25lID09IDApKQogCQlyc3BxLT51bmhhbmRsZWRfaXJxcysrOwogCi0JdmFsID0gQ0lEWElOQyh3b3JrX2RvbmUpIHwgU0VJTlRBUk0oaW50cl9wYXJhbXMpOworCXZhbCA9IENJRFhJTkNfVih3b3JrX2RvbmUpIHwgU0VJTlRBUk1fVihpbnRyX3BhcmFtcyk7CiAJaWYgKGlzX3Q0KHJzcHEtPmFkYXB0ZXItPnBhcmFtcy5jaGlwKSkgewogCQl0NF93cml0ZV9yZWcocnNwcS0+YWRhcHRlciwKIAkJCSAgICAgVDRWRl9TR0VfQkFTRV9BRERSICsgU0dFX1ZGX0dUUywKLQkJCSAgICAgdmFsIHwgSU5HUkVTU1FJRCgodTMyKXJzcHEtPmNudHh0X2lkKSk7CisJCQkgICAgIHZhbCB8IElOR1JFU1NRSURfVigodTMyKXJzcHEtPmNudHh0X2lkKSk7CiAJfSBlbHNlIHsKLQkJd3JpdGVsKHZhbCB8IElOR1JFU1NRSUQocnNwcS0+YmFyMl9xaWQpLAorCQl3cml0ZWwodmFsIHwgSU5HUkVTU1FJRF9WKHJzcHEtPmJhcjJfcWlkKSwKIAkJICAgICAgIHJzcHEtPmJhcjJfYWRkciArIFNHRV9VREJfR1RTKTsKIAkJd21iKCk7CiAJfQpAQCAtMTk3NSwxMiArMTk3NiwxMiBAQAogCQlyc3BxX25leHQoaW50cnEpOwogCX0KIAotCXZhbCA9IENJRFhJTkMod29ya19kb25lKSB8IFNFSU5UQVJNKGludHJxLT5pbnRyX3BhcmFtcyk7CisJdmFsID0gQ0lEWElOQ19WKHdvcmtfZG9uZSkgfCBTRUlOVEFSTV9WKGludHJxLT5pbnRyX3BhcmFtcyk7CiAJaWYgKGlzX3Q0KGFkYXB0ZXItPnBhcmFtcy5jaGlwKSkKIAkJdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIFQ0VkZfU0dFX0JBU0VfQUREUiArIFNHRV9WRl9HVFMsCi0JCQkgICAgIHZhbCB8IElOR1JFU1NRSUQoaW50cnEtPmNudHh0X2lkKSk7CisJCQkgICAgIHZhbCB8IElOR1JFU1NRSURfVihpbnRycS0+Y250eHRfaWQpKTsKIAllbHNlIHsKLQkJd3JpdGVsKHZhbCB8IElOR1JFU1NRSUQoaW50cnEtPmJhcjJfcWlkKSwKKwkJd3JpdGVsKHZhbCB8IElOR1JFU1NRSURfVihpbnRycS0+YmFyMl9xaWQpLAogCQkgICAgICAgaW50cnEtPmJhcjJfYWRkciArIFNHRV9VREJfR1RTKTsKIAkJd21iKCk7CiAJfQpAQCAtMjU4Myw3ICsyNTg0LDcgQEAKIAkJCWZsMCwgZmwxKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmICgoc2dlX3BhcmFtcy0+c2dlX2NvbnRyb2wgJiBSWFBLVENQTE1PREVfTUFTSykgPT0gMCkgeworCWlmICgoc2dlX3BhcmFtcy0+c2dlX2NvbnRyb2wgJiBSWFBLVENQTE1PREVfRikgPT0gMCkgewogCQlkZXZfZXJyKGFkYXB0ZXItPnBkZXZfZGV2LCAiYmFkIFNHRSBDUEwgTU9ERVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI1OTMsOSArMjU5NCw5IEBACiAJICovCiAJaWYgKGZsMSkKIAkJcy0+ZmxfcGdfb3JkZXIgPSBpbG9nMihmbDEpIC0gUEFHRV9TSElGVDsKLQlzLT5zdGF0X2xlbiA9ICgoc2dlX3BhcmFtcy0+c2dlX2NvbnRyb2wgJiBFR1JTVEFUVVNQQUdFU0laRV9NQVNLKQorCXMtPnN0YXRfbGVuID0gKChzZ2VfcGFyYW1zLT5zZ2VfY29udHJvbCAmIEVHUlNUQVRVU1BBR0VTSVpFX0YpCiAJCQk/IDEyOCA6IDY0KTsKLQlzLT5wa3RzaGlmdCA9IFBLVFNISUZUX0dFVChzZ2VfcGFyYW1zLT5zZ2VfY29udHJvbCk7CisJcy0+cGt0c2hpZnQgPSBQS1RTSElGVF9HKHNnZV9wYXJhbXMtPnNnZV9jb250cm9sKTsKIAogCS8qIFQ0IHVzZXMgYSBzaW5nbGUgY29udHJvbCBmaWVsZCB0byBzcGVjaWZ5IGJvdGggdGhlIFBDSWUgUGFkZGluZyBhbmQKIAkgKiBQYWNraW5nIEJvdW5kYXJ5LiAgVDUgaW50cm9kdWNlZCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IHRoZXNlCkBAIC0yNjA3LDggKzI2MDgsOCBAQAogCSAqIGVuZCBkb2luZyB0aGlzIGJlY2F1c2UgaXQgd291bGQgaW5pdGlhbGl6ZSB0aGUgUGFkZGluZyBCb3VuZGFyeSBhbmQKIAkgKiBsZWF2ZSB0aGUgUGFja2luZyBCb3VuZGFyeSBpbml0aWFsaXplZCB0byAwICgxNiBieXRlcykuKQogCSAqLwotCWluZ3BhZGJvdW5kYXJ5ID0gMSA8PCAoSU5HUEFEQk9VTkRBUllfR0VUKHNnZV9wYXJhbXMtPnNnZV9jb250cm9sKSArCi0JCQkgICAgICAgWF9JTkdQQURCT1VOREFSWV9TSElGVCk7CisJaW5ncGFkYm91bmRhcnkgPSAxIDw8IChJTkdQQURCT1VOREFSWV9HKHNnZV9wYXJhbXMtPnNnZV9jb250cm9sKSArCisJCQkgICAgICAgSU5HUEFEQk9VTkRBUllfU0hJRlRfWCk7CiAJaWYgKGlzX3Q0KGFkYXB0ZXItPnBhcmFtcy5jaGlwKSkgewogCQlzLT5mbF9hbGlnbiA9IGluZ3BhZGJvdW5kYXJ5OwogCX0gZWxzZSB7CkBAIC0yNjMzLDcgKzI2MzQsNyBAQAogCSAqIENvbmdlc3Rpb24gVGhyZXNob2xkIGlzIGluIHVuaXRzIG9mIDIgRnJlZSBMaXN0IHBvaW50ZXJzLikKIAkgKi8KIAlzLT5mbF9zdGFydmVfdGhyZXMKLQkJPSBFR1JUSFJFU0hPTERfR0VUKHNnZV9wYXJhbXMtPnNnZV9jb25nZXN0aW9uX2NvbnRyb2wpKjIgKyAxOworCQk9IEVHUlRIUkVTSE9MRF9HKHNnZV9wYXJhbXMtPnNnZV9jb25nZXN0aW9uX2NvbnRyb2wpKjIgKyAxOwogCiAJLyoKIAkgKiBTZXQgdXAgdGFza2xldCB0aW1lcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvdDR2Zl9kZWZzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvdDR2Zl9kZWZzLmgKaW5kZXggYzdiMTI3ZC4uYjUxNmIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL3Q0dmZfZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi90NHZmX2RlZnMuaApAQCAtNjQsOCArNjQsOCBAQAogICogTWFpbGJveCBEYXRhIGluIHRoZSBmaXhlZCBDSU0gUEYgbWFwIGFuZCB0aGUgcHJvZ3JhbW1hYmxlIFZGIG1hcCBtdXN0CiAgKiBtYXRjaC4gIEhvd2V2ZXIsIGl0J3MgYSB1c2VmdWwgY29udmVudGlvbiAuLi4KICAqLwotI2lmIFQ0VkZfTUJEQVRBX0JBU0VfQUREUiAhPSBDSU1fUEZfTUFJTEJPWF9EQVRBCi0jZXJyb3IgVDRWRl9NQkRBVEFfQkFTRV9BRERSIG11c3QgbWF0Y2ggQ0lNX1BGX01BSUxCT1hfREFUQSEKKyNpZiBUNFZGX01CREFUQV9CQVNFX0FERFIgIT0gQ0lNX1BGX01BSUxCT1hfREFUQV9BCisjZXJyb3IgVDRWRl9NQkRBVEFfQkFTRV9BRERSIG11c3QgbWF0Y2ggQ0lNX1BGX01BSUxCT1hfREFUQV9BIQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvdDR2Zl9ody5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2hlbHNpby9jeGdiNHZmL3Q0dmZfaHcuYwppbmRleCA2MDQyNmNmLi4xYjU1MDZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaGVsc2lvL2N4Z2I0dmYvdDR2Zl9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NoZWxzaW8vY3hnYjR2Zi90NHZmX2h3LmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJ0NHZmX2RlZnMuaCIKIAogI2luY2x1ZGUgIi4uL2N4Z2I0L3Q0X3JlZ3MuaCIKKyNpbmNsdWRlICIuLi9jeGdiNC90NF92YWx1ZXMuaCIKICNpbmNsdWRlICIuLi9jeGdiNC90NGZ3X2FwaS5oIgogCiAvKgpAQCAtMTM3LDkgKzEzOCw5IEBACiAJICogTG9vcCB0cnlpbmcgdG8gZ2V0IG93bmVyc2hpcCBvZiB0aGUgbWFpbGJveC4gIFJldHVybiBhbiBlcnJvcgogCSAqIGlmIHdlIGNhbid0IGdhaW4gb3duZXJzaGlwLgogCSAqLwotCXYgPSBNQk9XTkVSX0dFVCh0NF9yZWFkX3JlZyhhZGFwdGVyLCBtYm94X2N0bCkpOworCXYgPSBNQk9XTkVSX0codDRfcmVhZF9yZWcoYWRhcHRlciwgbWJveF9jdGwpKTsKIAlmb3IgKGkgPSAwOyB2ID09IE1CT1hfT1dORVJfTk9ORSAmJiBpIDwgMzsgaSsrKQotCQl2ID0gTUJPV05FUl9HRVQodDRfcmVhZF9yZWcoYWRhcHRlciwgbWJveF9jdGwpKTsKKwkJdiA9IE1CT1dORVJfRyh0NF9yZWFkX3JlZyhhZGFwdGVyLCBtYm94X2N0bCkpOwogCWlmICh2ICE9IE1CT1hfT1dORVJfRFJWKQogCQlyZXR1cm4gdiA9PSBNQk9YX09XTkVSX0ZXID8gLUVCVVNZIDogLUVUSU1FRE9VVDsKIApAQCAtMTYxLDcgKzE2Miw3IEBACiAJdDRfcmVhZF9yZWcoYWRhcHRlciwgbWJveF9kYXRhKTsgICAgICAgICAvKiBmbHVzaCB3cml0ZSAqLwogCiAJdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIG1ib3hfY3RsLAotCQkgICAgIE1CTVNHVkFMSUQgfCBNQk9XTkVSKE1CT1hfT1dORVJfRlcpKTsKKwkJICAgICBNQk1TR1ZBTElEX0YgfCBNQk9XTkVSX1YoTUJPWF9PV05FUl9GVykpOwogCXQ0X3JlYWRfcmVnKGFkYXB0ZXIsIG1ib3hfY3RsKTsgICAgICAgICAgLyogZmx1c2ggd3JpdGUgKi8KIAogCS8qCkBAIC0xODMsMTQgKzE4NCwxNCBAQAogCQkgKiBJZiB3ZSdyZSB0aGUgb3duZXIsIHNlZSBpZiB0aGlzIGlzIHRoZSByZXBseSB3ZSB3YW50ZWQuCiAJCSAqLwogCQl2ID0gdDRfcmVhZF9yZWcoYWRhcHRlciwgbWJveF9jdGwpOwotCQlpZiAoTUJPV05FUl9HRVQodikgPT0gTUJPWF9PV05FUl9EUlYpIHsKKwkJaWYgKE1CT1dORVJfRyh2KSA9PSBNQk9YX09XTkVSX0RSVikgewogCQkJLyoKIAkJCSAqIElmIHRoZSBNZXNzYWdlIFZhbGlkIGJpdCBpc24ndCBvbiwgcmV2b2tlIG93bmVyc2hpcAogCQkJICogb2YgdGhlIG1haWxib3ggYW5kIGNvbnRpbnVlIHdhaXRpbmcgZm9yIG91ciByZXBseS4KIAkJCSAqLwotCQkJaWYgKCh2ICYgTUJNU0dWQUxJRCkgPT0gMCkgeworCQkJaWYgKCh2ICYgTUJNU0dWQUxJRF9GKSA9PSAwKSB7CiAJCQkJdDRfd3JpdGVfcmVnKGFkYXB0ZXIsIG1ib3hfY3RsLAotCQkJCQkgICAgIE1CT1dORVIoTUJPWF9PV05FUl9OT05FKSk7CisJCQkJCSAgICAgTUJPV05FUl9WKE1CT1hfT1dORVJfTk9ORSkpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCkBAIC0yMTYsNyArMjE3LDcgQEAKIAkJCQkJICYgRldfQ01EX1JFUVVFU1RfRikgIT0gMCk7CiAJCQl9CiAJCQl0NF93cml0ZV9yZWcoYWRhcHRlciwgbWJveF9jdGwsCi0JCQkJICAgICBNQk9XTkVSKE1CT1hfT1dORVJfTk9ORSkpOworCQkJCSAgICAgTUJPV05FUl9WKE1CT1hfT1dORVJfTk9ORSkpOwogCQkJcmV0dXJuIC1GV19DTURfUkVUVkFMX0codik7CiAJCX0KIAl9CkBAIC01MzAsMTkgKzUzMSwxOSBAQAogCWludCB2OwogCiAJcGFyYW1zWzBdID0gKEZXX1BBUkFNU19NTkVNX1YoRldfUEFSQU1TX01ORU1fUkVHKSB8Ci0JCSAgICAgRldfUEFSQU1TX1BBUkFNX1hZWl9WKFNHRV9DT05UUk9MKSk7CisJCSAgICAgRldfUEFSQU1TX1BBUkFNX1hZWl9WKFNHRV9DT05UUk9MX0EpKTsKIAlwYXJhbXNbMV0gPSAoRldfUEFSQU1TX01ORU1fVihGV19QQVJBTVNfTU5FTV9SRUcpIHwKLQkJICAgICBGV19QQVJBTVNfUEFSQU1fWFlaX1YoU0dFX0hPU1RfUEFHRV9TSVpFKSk7CisJCSAgICAgRldfUEFSQU1TX1BBUkFNX1hZWl9WKFNHRV9IT1NUX1BBR0VfU0laRV9BKSk7CiAJcGFyYW1zWzJdID0gKEZXX1BBUkFNU19NTkVNX1YoRldfUEFSQU1TX01ORU1fUkVHKSB8Ci0JCSAgICAgRldfUEFSQU1TX1BBUkFNX1hZWl9WKFNHRV9GTF9CVUZGRVJfU0laRTApKTsKKwkJICAgICBGV19QQVJBTVNfUEFSQU1fWFlaX1YoU0dFX0ZMX0JVRkZFUl9TSVpFMF9BKSk7CiAJcGFyYW1zWzNdID0gKEZXX1BBUkFNU19NTkVNX1YoRldfUEFSQU1TX01ORU1fUkVHKSB8Ci0JCSAgICAgRldfUEFSQU1TX1BBUkFNX1hZWl9WKFNHRV9GTF9CVUZGRVJfU0laRTEpKTsKKwkJICAgICBGV19QQVJBTVNfUEFSQU1fWFlaX1YoU0dFX0ZMX0JVRkZFUl9TSVpFMV9BKSk7CiAJcGFyYW1zWzRdID0gKEZXX1BBUkFNU19NTkVNX1YoRldfUEFSQU1TX01ORU1fUkVHKSB8Ci0JCSAgICAgRldfUEFSQU1TX1BBUkFNX1hZWl9WKFNHRV9USU1FUl9WQUxVRV8wX0FORF8xKSk7CisJCSAgICAgRldfUEFSQU1TX1BBUkFNX1hZWl9WKFNHRV9USU1FUl9WQUxVRV8wX0FORF8xX0EpKTsKIAlwYXJhbXNbNV0gPSAoRldfUEFSQU1TX01ORU1fVihGV19QQVJBTVNfTU5FTV9SRUcpIHwKLQkJICAgICBGV19QQVJBTVNfUEFSQU1fWFlaX1YoU0dFX1RJTUVSX1ZBTFVFXzJfQU5EXzMpKTsKKwkJICAgICBGV19QQVJBTVNfUEFSQU1fWFlaX1YoU0dFX1RJTUVSX1ZBTFVFXzJfQU5EXzNfQSkpOwogCXBhcmFtc1s2XSA9IChGV19QQVJBTVNfTU5FTV9WKEZXX1BBUkFNU19NTkVNX1JFRykgfAotCQkgICAgIEZXX1BBUkFNU19QQVJBTV9YWVpfVihTR0VfVElNRVJfVkFMVUVfNF9BTkRfNSkpOworCQkgICAgIEZXX1BBUkFNU19QQVJBTV9YWVpfVihTR0VfVElNRVJfVkFMVUVfNF9BTkRfNV9BKSk7CiAJdiA9IHQ0dmZfcXVlcnlfcGFyYW1zKGFkYXB0ZXIsIDcsIHBhcmFtcywgdmFscyk7CiAJaWYgKHYpCiAJCXJldHVybiB2OwpAQCAtNTc4LDkgKzU3OSw5IEBACiAJfQogCiAJcGFyYW1zWzBdID0gKEZXX1BBUkFNU19NTkVNX1YoRldfUEFSQU1TX01ORU1fUkVHKSB8Ci0JCSAgICAgRldfUEFSQU1TX1BBUkFNX1hZWl9WKFNHRV9JTkdSRVNTX1JYX1RIUkVTSE9MRCkpOworCQkgICAgIEZXX1BBUkFNU19QQVJBTV9YWVpfVihTR0VfSU5HUkVTU19SWF9USFJFU0hPTERfQSkpOwogCXBhcmFtc1sxXSA9IChGV19QQVJBTVNfTU5FTV9WKEZXX1BBUkFNU19NTkVNX1JFRykgfAotCQkgICAgIEZXX1BBUkFNU19QQVJBTV9YWVpfVihTR0VfQ09OTV9DVFJMKSk7CisJCSAgICAgRldfUEFSQU1TX1BBUkFNX1hZWl9WKFNHRV9DT05NX0NUUkxfQSkpOwogCXYgPSB0NHZmX3F1ZXJ5X3BhcmFtcyhhZGFwdGVyLCAyLCBwYXJhbXMsIHZhbHMpOwogCWlmICh2KQogCQlyZXR1cm4gdjsKQEAgLTYxNyw4ICs2MTgsOCBAQAogCQkgKiB0aGUgZHJpdmVyIGNhbiBqdXN0IHVzZSBpdC4KIAkJICovCiAJCXdob2FtaSA9IHQ0X3JlYWRfcmVnKGFkYXB0ZXIsCi0JCQkJICAgICBUNFZGX1BMX0JBU0VfQUREUiArIEFfUExfVkZfV0hPQU1JKTsKLQkJcGYgPSBTT1VSQ0VQRl9HRVQod2hvYW1pKTsKKwkJCQkgICAgIFQ0VkZfUExfQkFTRV9BRERSICsgUExfVkZfV0hPQU1JX0EpOworCQlwZiA9IFNPVVJDRVBGX0cod2hvYW1pKTsKIAogCQlzX2hwcyA9IChIT1NUUEFHRVNJWkVQRjBfUyArCiAJCQkgKEhPU1RQQUdFU0laRVBGMV9TIC0gSE9TVFBBR0VTSVpFUEYwX1MpICogcGYpOwpAQCAtNjMwLDEwICs2MzEsMTAgQEAKIAkJCSAoUVVFVUVTUEVSUEFHRVBGMV9TIC0gUVVFVUVTUEVSUEFHRVBGMF9TKSAqIHBmKTsKIAkJc2dlX3BhcmFtcy0+c2dlX3ZmX2VxX3FwcCA9CiAJCQkoKHNnZV9wYXJhbXMtPnNnZV9lZ3Jlc3NfcXVldWVzX3Blcl9wYWdlID4+IHNfcXBwKQotCQkJICYgUVVFVUVTUEVSUEFHRVBGMF9NQVNLKTsKKwkJCSAmIFFVRVVFU1BFUlBBR0VQRjBfTSk7CiAJCXNnZV9wYXJhbXMtPnNnZV92Zl9pcV9xcHAgPQogCQkJKChzZ2VfcGFyYW1zLT5zZ2VfaW5ncmVzc19xdWV1ZXNfcGVyX3BhZ2UgPj4gc19xcHApCi0JCQkgJiBRVUVVRVNQRVJQQUdFUEYwX01BU0spOworCQkJICYgUVVFVUVTUEVSUEFHRVBGMF9NKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE1OTIsNyArMTU5Myw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBDSEVMU0lPX1Q1OgotCQljaGlwaWQgPSBHX1JFVih0NF9yZWFkX3JlZyhhZGFwdGVyLCBBX1BMX1ZGX1JFVikpOworCQljaGlwaWQgPSBSRVZfRyh0NF9yZWFkX3JlZyhhZGFwdGVyLCBQTF9WRl9SRVZfQSkpOwogCQlhZGFwdGVyLT5wYXJhbXMuY2hpcCB8PSBDSEVMU0lPX0NISVBfQ09ERShDSEVMU0lPX1Q1LCBjaGlwaWQpOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NpcnJ1cy9LY29uZmlnCmluZGV4IDc0MDNkZmYuLjkwNWFjNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NpcnJ1cy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NpcnJ1cy9LY29uZmlnCkBAIC0zMiw3ICszMiw4IEBACiAJICB3aWxsIGJlIGNhbGxlZCBjczg5eDAuCiAKIGNvbmZpZyBDUzg5eDBfUExBVEZPUk0KLQlib29sICJDUzg5eDAgcGxhdGZvcm0gZHJpdmVyIHN1cHBvcnQiCisJYm9vbCAiQ1M4OXgwIHBsYXRmb3JtIGRyaXZlciBzdXBwb3J0IiBpZiBIQVNfSU9QT1JUX01BUAorCWRlZmF1bHQgIUhBU19JT1BPUlRfTUFQCiAJZGVwZW5kcyBvbiBDUzg5eDAKIAloZWxwCiAJICBTYXkgWSB0byBjb21waWxlIHRoZSBjczg5eDAgZHJpdmVyIGFzIGEgcGxhdGZvcm0gZHJpdmVyLiBUaGlzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvZXA5M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lycnVzL2VwOTN4eF9ldGguYwppbmRleCAzYTEyYzA5Li5kZTlmN2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXJydXMvZXA5M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2NpcnJ1cy9lcDkzeHhfZXRoLmMKQEAgLTQ3NSw4ICs0NzUsNyBAQAogCQlpZiAoZCkKIAkJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkLCBQS1RfQlVGX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CiAKLQkJaWYgKGVwLT5yeF9idWZbaV0gIT0gTlVMTCkKLQkJCWtmcmVlKGVwLT5yeF9idWZbaV0pOworCQlrZnJlZShlcC0+cnhfYnVmW2ldKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgVFhfUVVFVUVfRU5UUklFUzsgaSsrKSB7CkBAIC00ODYsOCArNDg1LDcgQEAKIAkJaWYgKGQpCiAJCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZCwgUEtUX0JVRl9TSVpFLCBETUFfVE9fREVWSUNFKTsKIAotCQlpZiAoZXAtPnR4X2J1ZltpXSAhPSBOVUxMKQotCQkJa2ZyZWUoZXAtPnR4X2J1ZltpXSk7CisJCWtmcmVlKGVwLT50eF9idWZbaV0pOwogCX0KIAogCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZW9mKHN0cnVjdCBlcDkzeHhfZGVzY3MpLCBlcC0+ZGVzY3MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oCmluZGV4IDI1YzRkODguLjg0YjZhMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pYy5oCkBAIC0zMyw3ICszMyw3IEBACiAKICNkZWZpbmUgRFJWX05BTUUJCSJlbmljIgogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JCSJDaXNjbyBWSUMgRXRoZXJuZXQgTklDIERyaXZlciIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIyLjEuMS42NyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIyLjEuMS44MyIKICNkZWZpbmUgRFJWX0NPUFlSSUdIVAkJIkNvcHlyaWdodCAyMDA4LTIwMTMgQ2lzY28gU3lzdGVtcywgSW5jIgogCiAjZGVmaW5lIEVOSUNfQkFSU19NQVgJCTYKQEAgLTE4OCw2ICsxODgsNyBAQAogCXN0cnVjdCBlbmljX3Jmc19mbHdfdGJsIHJmc19oOwogCXUzMiByeF9jb3B5YnJlYWs7CiAJdTggcnNzX2tleVtFTklDX1JTU19MRU5dOworCXN0cnVjdCB2bmljX2dlbl9zdGF0cyBnZW5fc3RhdHM7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2UgKmVuaWNfZ2V0X2RldihzdHJ1Y3QgZW5pYyAqZW5pYykKQEAgLTI0Miw2ICsyNDMsMTkgQEAKIAlyZXR1cm4gZW5pYy0+cnFfY291bnQgKyBlbmljLT53cV9jb3VudCArIDE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGVuaWNfZG1hX21hcF9jaGVjayhzdHJ1Y3QgZW5pYyAqZW5pYywgZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKGVuaWMtPnBkZXYsIGRtYV9hZGRyKSkpIHsKKwkJbmV0X3dhcm5fcmF0ZWxpbWl0ZWQoIiVzOiBQQ0kgZG1hIG1hcHBpbmcgZmFpbGVkIVxuIiwKKwkJCQkgICAgIGVuaWMtPm5ldGRldi0+bmFtZSk7CisJCWVuaWMtPmdlbl9zdGF0cy5kbWFfbWFwX2Vycm9yKys7CisKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHZvaWQgZW5pY19yZXNldF9hZGRyX2xpc3RzKHN0cnVjdCBlbmljICplbmljKTsKIGludCBlbmljX3NyaW92X2VuYWJsZWQoc3RydWN0IGVuaWMgKmVuaWMpOwogaW50IGVuaWNfaXNfdmFsaWRfdmYoc3RydWN0IGVuaWMgKmVuaWMsIGludCB2Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfZGV2LmMKaW5kZXggODdkZGM0NC4uZjhkMmE2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19kZXYuYwpAQCAtMTc3LDQwICsxNzcsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLWludCBlbmljX3ZuaWNfZGV2X2RlaW5pdChzdHJ1Y3QgZW5pYyAqZW5pYykKLXsKLQlpbnQgZXJyOwotCi0Jc3Bpbl9sb2NrX2JoKCZlbmljLT5kZXZjbWRfbG9jayk7Ci0JZXJyID0gdm5pY19kZXZfZGVpbml0KGVuaWMtPnZkZXYpOwotCXNwaW5fdW5sb2NrX2JoKCZlbmljLT5kZXZjbWRfbG9jayk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1pbnQgZW5pY19kZXZfaW5pdF9wcm92MihzdHJ1Y3QgZW5pYyAqZW5pYywgc3RydWN0IHZpY19wcm92aW5mbyAqdnApCi17Ci0JaW50IGVycjsKLQotCXNwaW5fbG9ja19iaCgmZW5pYy0+ZGV2Y21kX2xvY2spOwotCWVyciA9IHZuaWNfZGV2X2luaXRfcHJvdjIoZW5pYy0+dmRldiwKLQkJKHU4ICopdnAsIHZpY19wcm92aW5mb19zaXplKHZwKSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmVuaWMtPmRldmNtZF9sb2NrKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLWludCBlbmljX2Rldl9kZWluaXRfZG9uZShzdHJ1Y3QgZW5pYyAqZW5pYywgaW50ICpzdGF0dXMpCi17Ci0JaW50IGVycjsKLQotCXNwaW5fbG9ja19iaCgmZW5pYy0+ZGV2Y21kX2xvY2spOwotCWVyciA9IHZuaWNfZGV2X2RlaW5pdF9kb25lKGVuaWMtPnZkZXYsIHN0YXR1cyk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmVuaWMtPmRldmNtZF9sb2NrKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KIC8qIHJ0bmwgbG9jayBpcyBoZWxkICovCiBpbnQgZW5pY192bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgX19iZTE2IHByb3RvLCB1MTYgdmlkKQogewpAQCAtMjM3LDI4ICsyMDMsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLWludCBlbmljX2Rldl9lbmFibGUyKHN0cnVjdCBlbmljICplbmljLCBpbnQgYWN0aXZlKQotewotCWludCBlcnI7Ci0KLQlzcGluX2xvY2tfYmgoJmVuaWMtPmRldmNtZF9sb2NrKTsKLQllcnIgPSB2bmljX2Rldl9lbmFibGUyKGVuaWMtPnZkZXYsIGFjdGl2ZSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmVuaWMtPmRldmNtZF9sb2NrKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLWludCBlbmljX2Rldl9lbmFibGUyX2RvbmUoc3RydWN0IGVuaWMgKmVuaWMsIGludCAqc3RhdHVzKQotewotCWludCBlcnI7Ci0KLQlzcGluX2xvY2tfYmgoJmVuaWMtPmRldmNtZF9sb2NrKTsKLQllcnIgPSB2bmljX2Rldl9lbmFibGUyX2RvbmUoZW5pYy0+dmRldiwgc3RhdHVzKTsKLQlzcGluX3VubG9ja19iaCgmZW5pYy0+ZGV2Y21kX2xvY2spOwotCi0JcmV0dXJuIGVycjsKLX0KLQogaW50IGVuaWNfZGV2X3N0YXR1c190b19lcnJubyhpbnQgZGV2Y21kX3N0YXR1cykKIHsKIAlzd2l0Y2ggKGRldmNtZF9zdGF0dXMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19kZXYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19kZXYuaAppbmRleCAxMGJiOTcwLi5mNWJiMDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2Rldi5oCkBAIC01NSwxMSArNTUsNiBAQAogaW50IGVuaWNfZGV2X2VuYWJsZShzdHJ1Y3QgZW5pYyAqZW5pYyk7CiBpbnQgZW5pY19kZXZfZGlzYWJsZShzdHJ1Y3QgZW5pYyAqZW5pYyk7CiBpbnQgZW5pY19kZXZfaW50cl9jb2FsX3RpbWVyX2luZm8oc3RydWN0IGVuaWMgKmVuaWMpOwotaW50IGVuaWNfdm5pY19kZXZfZGVpbml0KHN0cnVjdCBlbmljICplbmljKTsKLWludCBlbmljX2Rldl9pbml0X3Byb3YyKHN0cnVjdCBlbmljICplbmljLCBzdHJ1Y3QgdmljX3Byb3ZpbmZvICp2cCk7Ci1pbnQgZW5pY19kZXZfZGVpbml0X2RvbmUoc3RydWN0IGVuaWMgKmVuaWMsIGludCAqc3RhdHVzKTsKLWludCBlbmljX2Rldl9lbmFibGUyKHN0cnVjdCBlbmljICplbmljLCBpbnQgYXJnKTsKLWludCBlbmljX2Rldl9lbmFibGUyX2RvbmUoc3RydWN0IGVuaWMgKmVuaWMsIGludCAqc3RhdHVzKTsKIGludCBlbmljX2Rldl9zdGF0dXNfdG9fZXJybm8oaW50IGRldmNtZF9zdGF0dXMpOwogCiAjZW5kaWYgLyogX0VOSUNfREVWX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX2V0aHRvb2wuYwppbmRleCBlYmExZWI4Li4yOGQ5Y2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL2VuaWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19ldGh0b29sLmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJlbmljX2Rldi5oIgogI2luY2x1ZGUgImVuaWNfY2xzZi5oIgogI2luY2x1ZGUgInZuaWNfcnNzLmgiCisjaW5jbHVkZSAidm5pY19zdGF0cy5oIgogCiBzdHJ1Y3QgZW5pY19zdGF0IHsKIAljaGFyIG5hbWVbRVRIX0dTVFJJTkdfTEVOXTsKQEAgLTQwLDYgKzQxLDExIEBACiAJLmluZGV4ID0gb2Zmc2V0b2Yoc3RydWN0IHZuaWNfcnhfc3RhdHMsIHN0YXQpIC8gc2l6ZW9mKHU2NCkgXAogfQogCisjZGVmaW5lIEVOSUNfR0VOX1NUQVQoc3RhdCkgeyBcCisJLm5hbWUgPSAjc3RhdCwgXAorCS5pbmRleCA9IG9mZnNldG9mKHN0cnVjdCB2bmljX2dlbl9zdGF0cywgc3RhdCkgLyBzaXplb2YodTY0KVwKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBlbmljX3N0YXQgZW5pY190eF9zdGF0c1tdID0gewogCUVOSUNfVFhfU1RBVCh0eF9mcmFtZXNfb2spLAogCUVOSUNfVFhfU1RBVCh0eF91bmljYXN0X2ZyYW1lc19vayksCkBAIC03OCwxMCArODQsMTUgQEAKIAlFTklDX1JYX1NUQVQocnhfZnJhbWVzX3RvX21heCksCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGVuaWNfc3RhdCBlbmljX2dlbl9zdGF0c1tdID0geworCUVOSUNfR0VOX1NUQVQoZG1hX21hcF9lcnJvciksCit9OworCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuaWNfbl90eF9zdGF0cyA9IEFSUkFZX1NJWkUoZW5pY190eF9zdGF0cyk7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuaWNfbl9yeF9zdGF0cyA9IEFSUkFZX1NJWkUoZW5pY19yeF9zdGF0cyk7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuaWNfbl9nZW5fc3RhdHMgPSBBUlJBWV9TSVpFKGVuaWNfZ2VuX3N0YXRzKTsKIAotdm9pZCBlbmljX2ludHJfY29hbF9zZXRfcngoc3RydWN0IGVuaWMgKmVuaWMsIHUzMiB0aW1lcikKK3N0YXRpYyB2b2lkIGVuaWNfaW50cl9jb2FsX3NldF9yeChzdHJ1Y3QgZW5pYyAqZW5pYywgdTMyIHRpbWVyKQogewogCWludCBpOwogCWludCBpbnRyOwpAQCAtMTQ2LDYgKzE1NywxMCBAQAogCQkJbWVtY3B5KGRhdGEsIGVuaWNfcnhfc3RhdHNbaV0ubmFtZSwgRVRIX0dTVFJJTkdfTEVOKTsKIAkJCWRhdGEgKz0gRVRIX0dTVFJJTkdfTEVOOwogCQl9CisJCWZvciAoaSA9IDA7IGkgPCBlbmljX25fZ2VuX3N0YXRzOyBpKyspIHsKKwkJCW1lbWNweShkYXRhLCBlbmljX2dlbl9zdGF0c1tpXS5uYW1lLCBFVEhfR1NUUklOR19MRU4pOworCQkJZGF0YSArPSBFVEhfR1NUUklOR19MRU47CisJCX0KIAkJYnJlYWs7CiAJfQogfQpAQCAtMTU0LDcgKzE2OSw3IEBACiB7CiAJc3dpdGNoIChzc2V0KSB7CiAJY2FzZSBFVEhfU1NfU1RBVFM6Ci0JCXJldHVybiBlbmljX25fdHhfc3RhdHMgKyBlbmljX25fcnhfc3RhdHM7CisJCXJldHVybiBlbmljX25fdHhfc3RhdHMgKyBlbmljX25fcnhfc3RhdHMgKyBlbmljX25fZ2VuX3N0YXRzOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xNzMsNiArMTg4LDggQEAKIAkJKihkYXRhKyspID0gKCh1NjQgKikmdnN0YXRzLT50eClbZW5pY190eF9zdGF0c1tpXS5pbmRleF07CiAJZm9yIChpID0gMDsgaSA8IGVuaWNfbl9yeF9zdGF0czsgaSsrKQogCQkqKGRhdGErKykgPSAoKHU2NCAqKSZ2c3RhdHMtPnJ4KVtlbmljX3J4X3N0YXRzW2ldLmluZGV4XTsKKwlmb3IgKGkgPSAwOyBpIDwgZW5pY19uX2dlbl9zdGF0czsgaSsrKQorCQkqKGRhdGErKykgPSAoKHU2NCAqKSZlbmljLT5nZW5fc3RhdHMpW2VuaWNfZ2VuX3N0YXRzW2ldLmluZGV4XTsKIH0KIAogc3RhdGljIHUzMiBlbmljX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMKaW5kZXggYjI5ZTAyNy4uOWNiZTAzOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvZW5pY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9lbmljX21haW4uYwpAQCAtNDUsNiArNDUsNyBAQAogI2lmZGVmIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMCiAjaW5jbHVkZSA8bmV0L2J1c3lfcG9sbC5oPgogI2VuZGlmCisjaW5jbHVkZSA8bGludXgvY3Jhc2hfZHVtcC5oPgogCiAjaW5jbHVkZSAiY3FfZW5ldF9kZXNjLmgiCiAjaW5jbHVkZSAidm5pY19kZXYuaCIKQEAgLTg4LDcgKzg5LDcgQEAKICAqICBjb2FsZXNjaW5nIHRpbWVyIHZhbHVlcwogICogIHtyeF9yYXRlIGluIE1icHMsIG1hcHBpbmcgcGVyY2VudGFnZSBvZiB0aGUgcmFuZ2V9CiAgKi8KLXN0cnVjdCBlbmljX2ludHJfbW9kX3RhYmxlIG1vZF90YWJsZVtFTklDX01BWF9DT0FMRVNDRV9USU1FUlMgKyAxXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZW5pY19pbnRyX21vZF90YWJsZSBtb2RfdGFibGVbRU5JQ19NQVhfQ09BTEVTQ0VfVElNRVJTICsgMV0gPSB7CiAJezQwMDAsICAwfSwKIAl7NDQwMCwgMTB9LAogCXs1MDYwLCAyMH0sCkBAIC0xMDUsNyArMTA2LDcgQEAKIC8qIFRoaXMgdGFibGUgaGVscHMgdGhlIGRyaXZlciB0byBwaWNrIGRpZmZlcmVudCByYW5nZXMgZm9yIHJ4IGNvYWxlc2NpbmcKICAqIHRpbWVyIGRlcGVuZGluZyBvbiB0aGUgbGluayBzcGVlZC4KICAqLwotc3RydWN0IGVuaWNfaW50cl9tb2RfcmFuZ2UgbW9kX3JhbmdlW0VOSUNfTUFYX0xJTktfU1BFRURTXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZW5pY19pbnRyX21vZF9yYW5nZSBtb2RfcmFuZ2VbRU5JQ19NQVhfTElOS19TUEVFRFNdID0gewogCXswLCAgMH0sIC8qIDAgIC0gNCAgR2JwcyAqLwogCXswLCAgM30sIC8qIDQgIC0gMTAgR2JwcyAqLwogCXszLCAgNn0sIC8qIDEwIC0gNDAgR2JwcyAqLwpAQCAtMzUxLDgwICszNTIsOTQgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmljX3F1ZXVlX3dxX3NrYl9jb250KHN0cnVjdCBlbmljICplbmljLAotCXN0cnVjdCB2bmljX3dxICp3cSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQl1bnNpZ25lZCBpbnQgbGVuX2xlZnQsIGludCBsb29wYmFjaykKK3N0YXRpYyBpbnQgZW5pY19xdWV1ZV93cV9za2JfY29udChzdHJ1Y3QgZW5pYyAqZW5pYywgc3RydWN0IHZuaWNfd3EgKndxLAorCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbl9sZWZ0LAorCQkJCSAgaW50IGxvb3BiYWNrKQogewogCWNvbnN0IHNrYl9mcmFnX3QgKmZyYWc7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKIAogCS8qIFF1ZXVlIGFkZGl0aW9uYWwgZGF0YSBmcmFnbWVudHMgKi8KIAlmb3IgKGZyYWcgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzOyBsZW5fbGVmdDsgZnJhZysrKSB7CiAJCWxlbl9sZWZ0IC09IHNrYl9mcmFnX3NpemUoZnJhZyk7Ci0JCWVuaWNfcXVldWVfd3FfZGVzY19jb250KHdxLCBza2IsCi0JCQlza2JfZnJhZ19kbWFfbWFwKCZlbmljLT5wZGV2LT5kZXYsCi0JCQkJCSBmcmFnLCAwLCBza2JfZnJhZ19zaXplKGZyYWcpLAotCQkJCQkgRE1BX1RPX0RFVklDRSksCi0JCQlza2JfZnJhZ19zaXplKGZyYWcpLAotCQkJKGxlbl9sZWZ0ID09IDApLAkvKiBFT1A/ICovCi0JCQlsb29wYmFjayk7CisJCWRtYV9hZGRyID0gc2tiX2ZyYWdfZG1hX21hcCgmZW5pYy0+cGRldi0+ZGV2LCBmcmFnLCAwLAorCQkJCQkgICAgc2tiX2ZyYWdfc2l6ZShmcmFnKSwKKwkJCQkJICAgIERNQV9UT19ERVZJQ0UpOworCQlpZiAodW5saWtlbHkoZW5pY19kbWFfbWFwX2NoZWNrKGVuaWMsIGRtYV9hZGRyKSkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZW5pY19xdWV1ZV93cV9kZXNjX2NvbnQod3EsIHNrYiwgZG1hX2FkZHIsIHNrYl9mcmFnX3NpemUoZnJhZyksCisJCQkJCShsZW5fbGVmdCA9PSAwKSwJLyogRU9QPyAqLworCQkJCQlsb29wYmFjayk7CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbmljX3F1ZXVlX3dxX3NrYl92bGFuKHN0cnVjdCBlbmljICplbmljLAotCXN0cnVjdCB2bmljX3dxICp3cSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQlpbnQgdmxhbl90YWdfaW5zZXJ0LCB1bnNpZ25lZCBpbnQgdmxhbl90YWcsIGludCBsb29wYmFjaykKK3N0YXRpYyBpbnQgZW5pY19xdWV1ZV93cV9za2JfdmxhbihzdHJ1Y3QgZW5pYyAqZW5pYywgc3RydWN0IHZuaWNfd3EgKndxLAorCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHZsYW5fdGFnX2luc2VydCwKKwkJCQkgIHVuc2lnbmVkIGludCB2bGFuX3RhZywgaW50IGxvb3BiYWNrKQogewogCXVuc2lnbmVkIGludCBoZWFkX2xlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAJdW5zaWduZWQgaW50IGxlbl9sZWZ0ID0gc2tiLT5sZW4gLSBoZWFkX2xlbjsKIAlpbnQgZW9wID0gKGxlbl9sZWZ0ID09IDApOworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJaW50IGVyciA9IDA7CisKKwlkbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGVuaWMtPnBkZXYsIHNrYi0+ZGF0YSwgaGVhZF9sZW4sCisJCQkJICBQQ0lfRE1BX1RPREVWSUNFKTsKKwlpZiAodW5saWtlbHkoZW5pY19kbWFfbWFwX2NoZWNrKGVuaWMsIGRtYV9hZGRyKSkpCisJCXJldHVybiAtRU5PTUVNOwogCiAJLyogUXVldWUgdGhlIG1haW4gc2tiIGZyYWdtZW50LiBUaGUgZnJhZ21lbnRzIGFyZSBubyBsYXJnZXIKIAkgKiB0aGFuIG1heCBNVFUoOTAwMCkrRVRIX0hEUl9MRU4oMTQpIGJ5dGVzLCB3aGljaCBpcyBsZXNzCiAJICogdGhhbiBXUV9FTkVUX01BWF9ERVNDX0xFTiBsZW5ndGguIFNvIG9ubHkgb25lIGRlc2NyaXB0b3IKIAkgKiBwZXIgZnJhZ21lbnQgaXMgcXVldWVkLgogCSAqLwotCWVuaWNfcXVldWVfd3FfZGVzYyh3cSwgc2tiLAotCQlwY2lfbWFwX3NpbmdsZShlbmljLT5wZGV2LCBza2ItPmRhdGEsCi0JCQloZWFkX2xlbiwgUENJX0RNQV9UT0RFVklDRSksCi0JCWhlYWRfbGVuLAotCQl2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnLAotCQllb3AsIGxvb3BiYWNrKTsKKwllbmljX3F1ZXVlX3dxX2Rlc2Mod3EsIHNrYiwgZG1hX2FkZHIsIGhlYWRfbGVuLAl2bGFuX3RhZ19pbnNlcnQsCisJCQkgICB2bGFuX3RhZywgZW9wLCBsb29wYmFjayk7CiAKIAlpZiAoIWVvcCkKLQkJZW5pY19xdWV1ZV93cV9za2JfY29udChlbmljLCB3cSwgc2tiLCBsZW5fbGVmdCwgbG9vcGJhY2spOworCQllcnIgPSBlbmljX3F1ZXVlX3dxX3NrYl9jb250KGVuaWMsIHdxLCBza2IsIGxlbl9sZWZ0LCBsb29wYmFjayk7CisKKwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW5pY19xdWV1ZV93cV9za2JfY3N1bV9sNChzdHJ1Y3QgZW5pYyAqZW5pYywKLQlzdHJ1Y3Qgdm5pY193cSAqd3EsIHN0cnVjdCBza19idWZmICpza2IsCi0JaW50IHZsYW5fdGFnX2luc2VydCwgdW5zaWduZWQgaW50IHZsYW5fdGFnLCBpbnQgbG9vcGJhY2spCitzdGF0aWMgaW50IGVuaWNfcXVldWVfd3Ffc2tiX2NzdW1fbDQoc3RydWN0IGVuaWMgKmVuaWMsIHN0cnVjdCB2bmljX3dxICp3cSwKKwkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCB2bGFuX3RhZ19pbnNlcnQsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgdmxhbl90YWcsIGludCBsb29wYmFjaykKIHsKIAl1bnNpZ25lZCBpbnQgaGVhZF9sZW4gPSBza2JfaGVhZGxlbihza2IpOwogCXVuc2lnbmVkIGludCBsZW5fbGVmdCA9IHNrYi0+bGVuIC0gaGVhZF9sZW47CiAJdW5zaWduZWQgaW50IGhkcl9sZW4gPSBza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYik7CiAJdW5zaWduZWQgaW50IGNzdW1fb2Zmc2V0ID0gaGRyX2xlbiArIHNrYi0+Y3N1bV9vZmZzZXQ7CiAJaW50IGVvcCA9IChsZW5fbGVmdCA9PSAwKTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOworCWludCBlcnIgPSAwOworCisJZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShlbmljLT5wZGV2LCBza2ItPmRhdGEsIGhlYWRfbGVuLAorCQkJCSAgUENJX0RNQV9UT0RFVklDRSk7CisJaWYgKHVubGlrZWx5KGVuaWNfZG1hX21hcF9jaGVjayhlbmljLCBkbWFfYWRkcikpKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIFF1ZXVlIHRoZSBtYWluIHNrYiBmcmFnbWVudC4gVGhlIGZyYWdtZW50cyBhcmUgbm8gbGFyZ2VyCiAJICogdGhhbiBtYXggTVRVKDkwMDApK0VUSF9IRFJfTEVOKDE0KSBieXRlcywgd2hpY2ggaXMgbGVzcwogCSAqIHRoYW4gV1FfRU5FVF9NQVhfREVTQ19MRU4gbGVuZ3RoLiBTbyBvbmx5IG9uZSBkZXNjcmlwdG9yCiAJICogcGVyIGZyYWdtZW50IGlzIHF1ZXVlZC4KIAkgKi8KLQllbmljX3F1ZXVlX3dxX2Rlc2NfY3N1bV9sNCh3cSwgc2tiLAotCQlwY2lfbWFwX3NpbmdsZShlbmljLT5wZGV2LCBza2ItPmRhdGEsCi0JCQloZWFkX2xlbiwgUENJX0RNQV9UT0RFVklDRSksCi0JCWhlYWRfbGVuLAotCQljc3VtX29mZnNldCwKLQkJaGRyX2xlbiwKLQkJdmxhbl90YWdfaW5zZXJ0LCB2bGFuX3RhZywKLQkJZW9wLCBsb29wYmFjayk7CisJZW5pY19xdWV1ZV93cV9kZXNjX2NzdW1fbDQod3EsIHNrYiwgZG1hX2FkZHIsIGhlYWRfbGVuLAljc3VtX29mZnNldCwKKwkJCQkgICBoZHJfbGVuLCB2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnLCBlb3AsCisJCQkJICAgbG9vcGJhY2spOwogCiAJaWYgKCFlb3ApCi0JCWVuaWNfcXVldWVfd3Ffc2tiX2NvbnQoZW5pYywgd3EsIHNrYiwgbGVuX2xlZnQsIGxvb3BiYWNrKTsKKwkJZXJyID0gZW5pY19xdWV1ZV93cV9za2JfY29udChlbmljLCB3cSwgc2tiLCBsZW5fbGVmdCwgbG9vcGJhY2spOworCisJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGVuaWNfcXVldWVfd3Ffc2tiX3RzbyhzdHJ1Y3QgZW5pYyAqZW5pYywKLQlzdHJ1Y3Qgdm5pY193cSAqd3EsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBtc3MsCi0JaW50IHZsYW5fdGFnX2luc2VydCwgdW5zaWduZWQgaW50IHZsYW5fdGFnLCBpbnQgbG9vcGJhY2spCitzdGF0aWMgaW50IGVuaWNfcXVldWVfd3Ffc2tiX3RzbyhzdHJ1Y3QgZW5pYyAqZW5pYywgc3RydWN0IHZuaWNfd3EgKndxLAorCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbXNzLAorCQkJCSBpbnQgdmxhbl90YWdfaW5zZXJ0LCB1bnNpZ25lZCBpbnQgdmxhbl90YWcsCisJCQkJIGludCBsb29wYmFjaykKIHsKIAl1bnNpZ25lZCBpbnQgZnJhZ19sZW5fbGVmdCA9IHNrYl9oZWFkbGVuKHNrYik7CiAJdW5zaWduZWQgaW50IGxlbl9sZWZ0ID0gc2tiLT5sZW4gLSBmcmFnX2xlbl9sZWZ0OwpAQCAtNDU0LDIwICs0NjksMTkgQEAKIAkgKi8KIAl3aGlsZSAoZnJhZ19sZW5fbGVmdCkgewogCQlsZW4gPSBtaW4oZnJhZ19sZW5fbGVmdCwgKHVuc2lnbmVkIGludClXUV9FTkVUX01BWF9ERVNDX0xFTik7Ci0JCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUoZW5pYy0+cGRldiwgc2tiLT5kYXRhICsgb2Zmc2V0LAotCQkJCWxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCWVuaWNfcXVldWVfd3FfZGVzY190c28od3EsIHNrYiwKLQkJCWRtYV9hZGRyLAotCQkJbGVuLAotCQkJbXNzLCBoZHJfbGVuLAotCQkJdmxhbl90YWdfaW5zZXJ0LCB2bGFuX3RhZywKLQkJCWVvcCAmJiAobGVuID09IGZyYWdfbGVuX2xlZnQpLCBsb29wYmFjayk7CisJCWRtYV9hZGRyID0gcGNpX21hcF9zaW5nbGUoZW5pYy0+cGRldiwgc2tiLT5kYXRhICsgb2Zmc2V0LCBsZW4sCisJCQkJCSAgUENJX0RNQV9UT0RFVklDRSk7CisJCWlmICh1bmxpa2VseShlbmljX2RtYV9tYXBfY2hlY2soZW5pYywgZG1hX2FkZHIpKSkKKwkJCXJldHVybiAtRU5PTUVNOworCQllbmljX3F1ZXVlX3dxX2Rlc2NfdHNvKHdxLCBza2IsIGRtYV9hZGRyLCBsZW4sIG1zcywgaGRyX2xlbiwKKwkJCQkgICAgICAgdmxhbl90YWdfaW5zZXJ0LCB2bGFuX3RhZywKKwkJCQkgICAgICAgZW9wICYmIChsZW4gPT0gZnJhZ19sZW5fbGVmdCksIGxvb3BiYWNrKTsKIAkJZnJhZ19sZW5fbGVmdCAtPSBsZW47CiAJCW9mZnNldCArPSBsZW47CiAJfQogCiAJaWYgKGVvcCkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCS8qIFF1ZXVlIFdRX0VORVRfTUFYX0RFU0NfTEVOIGxlbmd0aCBkZXNjcmlwdG9ycwogCSAqIGZvciBhZGRpdGlvbmFsIGRhdGEgZnJhZ21lbnRzCkBAIC00ODMsMTYgKzQ5NywxOCBAQAogCQkJZG1hX2FkZHIgPSBza2JfZnJhZ19kbWFfbWFwKCZlbmljLT5wZGV2LT5kZXYsIGZyYWcsCiAJCQkJCQkgICAgb2Zmc2V0LCBsZW4sCiAJCQkJCQkgICAgRE1BX1RPX0RFVklDRSk7Ci0JCQllbmljX3F1ZXVlX3dxX2Rlc2NfY29udCh3cSwgc2tiLAotCQkJCWRtYV9hZGRyLAotCQkJCWxlbiwKLQkJCQkobGVuX2xlZnQgPT0gMCkgJiYKLQkJCQkobGVuID09IGZyYWdfbGVuX2xlZnQpLAkJLyogRU9QPyAqLwotCQkJCWxvb3BiYWNrKTsKKwkJCWlmICh1bmxpa2VseShlbmljX2RtYV9tYXBfY2hlY2soZW5pYywgZG1hX2FkZHIpKSkKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCWVuaWNfcXVldWVfd3FfZGVzY19jb250KHdxLCBza2IsIGRtYV9hZGRyLCBsZW4sCisJCQkJCQkobGVuX2xlZnQgPT0gMCkgJiYKKwkJCQkJCSAobGVuID09IGZyYWdfbGVuX2xlZnQpLC8qRU9QKi8KKwkJCQkJCWxvb3BiYWNrKTsKIAkJCWZyYWdfbGVuX2xlZnQgLT0gbGVuOwogCQkJb2Zmc2V0ICs9IGxlbjsKIAkJfQogCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZW5pY19xdWV1ZV93cV9za2Ioc3RydWN0IGVuaWMgKmVuaWMsCkBAIC01MDIsMjUgKzUxOCw0MiBAQAogCXVuc2lnbmVkIGludCB2bGFuX3RhZyA9IDA7CiAJaW50IHZsYW5fdGFnX2luc2VydCA9IDA7CiAJaW50IGxvb3BiYWNrID0gMDsKKwlpbnQgZXJyOwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCS8qIFZMQU4gdGFnIGZyb20gdHJ1bmtpbmcgZHJpdmVyICovCiAJCXZsYW5fdGFnX2luc2VydCA9IDE7Ci0JCXZsYW5fdGFnID0gdmxhbl90eF90YWdfZ2V0KHNrYik7CisJCXZsYW5fdGFnID0gc2tiX3ZsYW5fdGFnX2dldChza2IpOwogCX0gZWxzZSBpZiAoZW5pYy0+bG9vcF9lbmFibGUpIHsKIAkJdmxhbl90YWcgPSBlbmljLT5sb29wX3RhZzsKIAkJbG9vcGJhY2sgPSAxOwogCX0KIAogCWlmIChtc3MpCi0JCWVuaWNfcXVldWVfd3Ffc2tiX3RzbyhlbmljLCB3cSwgc2tiLCBtc3MsCi0JCQl2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnLCBsb29wYmFjayk7CisJCWVyciA9IGVuaWNfcXVldWVfd3Ffc2tiX3RzbyhlbmljLCB3cSwgc2tiLCBtc3MsCisJCQkJCSAgICB2bGFuX3RhZ19pbnNlcnQsIHZsYW5fdGFnLAorCQkJCQkgICAgbG9vcGJhY2spOwogCWVsc2UgaWYJKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpCi0JCWVuaWNfcXVldWVfd3Ffc2tiX2NzdW1fbDQoZW5pYywgd3EsIHNrYiwKLQkJCXZsYW5fdGFnX2luc2VydCwgdmxhbl90YWcsIGxvb3BiYWNrKTsKKwkJZXJyID0gZW5pY19xdWV1ZV93cV9za2JfY3N1bV9sNChlbmljLCB3cSwgc2tiLCB2bGFuX3RhZ19pbnNlcnQsCisJCQkJCQl2bGFuX3RhZywgbG9vcGJhY2spOwogCWVsc2UKLQkJZW5pY19xdWV1ZV93cV9za2JfdmxhbihlbmljLCB3cSwgc2tiLAotCQkJdmxhbl90YWdfaW5zZXJ0LCB2bGFuX3RhZywgbG9vcGJhY2spOworCQllcnIgPSBlbmljX3F1ZXVlX3dxX3NrYl92bGFuKGVuaWMsIHdxLCBza2IsIHZsYW5fdGFnX2luc2VydCwKKwkJCQkJICAgICB2bGFuX3RhZywgbG9vcGJhY2spOworCWlmICh1bmxpa2VseShlcnIpKSB7CisJCXN0cnVjdCB2bmljX3dxX2J1ZiAqYnVmOworCisJCWJ1ZiA9IHdxLT50b191c2UtPnByZXY7CisJCS8qIHdoaWxlIG5vdCBFT1Agb2YgcHJldmlvdXMgcGt0ICYmIHF1ZXVlIG5vdCBlbXB0eS4KKwkJICogRm9yIGFsbCBub24gRU9QIGJ1ZnMsIG9zX2J1ZiBpcyBOVUxMLgorCQkgKi8KKwkJd2hpbGUgKCFidWYtPm9zX2J1ZiAmJiAoYnVmLT5uZXh0ICE9IHdxLT50b19jbGVhbikpIHsKKwkJCWVuaWNfZnJlZV93cV9idWYod3EsIGJ1Zik7CisJCQl3cS0+cmluZy5kZXNjX2F2YWlsKys7CisJCQlidWYgPSBidWYtPnByZXY7CisJCX0KKwkJd3EtPnRvX3VzZSA9IGJ1Zi0+bmV4dDsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCX0KIH0KIAogLyogbmV0aWZfdHhfbG9jayBoZWxkLCBwcm9jZXNzIGNvbnRleHQgd2l0aCBCSHMgZGlzYWJsZWQsIG9yIEJIICovCkBAIC05NTAsOCArOTgzLDEyIEBACiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShlbmljLT5wZGV2LCBza2ItPmRhdGEsCi0JCWxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlkbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKGVuaWMtPnBkZXYsIHNrYi0+ZGF0YSwgbGVuLAorCQkJCSAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlpZiAodW5saWtlbHkoZW5pY19kbWFfbWFwX2NoZWNrKGVuaWMsIGRtYV9hZGRyKSkpIHsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAKIAllbmljX3F1ZXVlX3JxX2Rlc2MocnEsIHNrYiwgb3NfYnVmX2luZGV4LAogCQlkbWFfYWRkciwgbGVuKTsKQEAgLTEyNjYsNyArMTMwMyw3IEBACiAjZW5kaWYgLyogQ09ORklHX1JGU19BQ0NFTCAqLwogCiAjaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTEwKLWludCBlbmljX2J1c3lfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkpCitzdGF0aWMgaW50IGVuaWNfYnVzeV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmFwaS0+ZGV2OwogCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTEzMzUsNyArMTM3Miw3IEBACiAJaW50IGVycjsKIAogCWlmICghZW5pY19wb2xsX2xvY2tfbmFwaSgmZW5pYy0+cnFbcnFdKSkKLQkJcmV0dXJuIHdvcmtfZG9uZTsKKwkJcmV0dXJuIGJ1ZGdldDsKIAkvKiBTZXJ2aWNlIFJRCiAJICovCiAKQEAgLTIyMzEsNiArMjI2OCwxOCBAQAogCWVuaWNfY2xlYXJfaW50cl9tb2RlKGVuaWMpOwogfQogCitzdGF0aWMgdm9pZCBlbmljX2tkdW1wX2tlcm5lbF9jb25maWcoc3RydWN0IGVuaWMgKmVuaWMpCit7CisJaWYgKGlzX2tkdW1wX2tlcm5lbCgpKSB7CisJCWRldl9pbmZvKGVuaWNfZ2V0X2RldihlbmljKSwgIlJ1bm5pbmcgZnJvbSB3aXRoaW4ga2R1bXAga2VybmVsLiBVc2luZyBtaW5pbWFsIHJlc291cmNlc1xuIik7CisJCWVuaWMtPnJxX2NvdW50ID0gMTsKKwkJZW5pYy0+d3FfY291bnQgPSAxOworCQllbmljLT5jb25maWcucnFfZGVzY19jb3VudCA9IEVOSUNfTUlOX1JRX0RFU0NTOworCQllbmljLT5jb25maWcud3FfZGVzY19jb3VudCA9IEVOSUNfTUlOX1dRX0RFU0NTOworCQllbmljLT5jb25maWcubXR1ID0gbWluX3QodTE2LCAxNTAwLCBlbmljLT5jb25maWcubXR1KTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgZW5pY19kZXZfaW5pdChzdHJ1Y3QgZW5pYyAqZW5pYykKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBlbmljX2dldF9kZXYoZW5pYyk7CkBAIC0yMjYwLDYgKzIzMDksMTAgQEAKIAogCWVuaWNfZ2V0X3Jlc19jb3VudHMoZW5pYyk7CiAKKwkvKiBtb2RpZnkgcmVzb3VyY2UgY291bnQgaWYgd2UgYXJlIGluIGtkdW1wX2tlcm5lbAorCSAqLworCWVuaWNfa2R1bXBfa2VybmVsX2NvbmZpZyhlbmljKTsKKwogCS8qIFNldCBpbnRlcnJ1cHQgbW9kZSBiYXNlZCBvbiByZXNvdXJjZSBjb3VudHMgYW5kIHN5c3RlbQogCSAqIGNhcGFiaWxpdGllcwogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX3N0YXRzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfc3RhdHMuaAppbmRleCA3Nzc1MGVjLi43NGM4MWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfc3RhdHMuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfc3RhdHMuaApAQCAtNjIsNiArNjIsMTEgQEAKIAl1NjQgcnN2ZFsxNl07CiB9OwogCisvKiBHZW5lcmljIHN0YXRpc3RpY3MgKi8KK3N0cnVjdCB2bmljX2dlbl9zdGF0cyB7CisJdTY0IGRtYV9tYXBfZXJyb3I7Cit9OworCiBzdHJ1Y3Qgdm5pY19zdGF0cyB7CiAJc3RydWN0IHZuaWNfdHhfc3RhdHMgdHg7CiAJc3RydWN0IHZuaWNfcnhfc3RhdHMgcng7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfd3EuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY193cS5jCmluZGV4IDNlNmI4ZDUuLmI1YTFjOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY193cS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvdm5pY193cS5jCkBAIC00NywxMSArNDcsMTQgQEAKIAkJCQl3cS0+cmluZy5kZXNjX3NpemUgKiBidWYtPmluZGV4OwogCQkJaWYgKGJ1Zi0+aW5kZXggKyAxID09IGNvdW50KSB7CiAJCQkJYnVmLT5uZXh0ID0gd3EtPmJ1ZnNbMF07CisJCQkJYnVmLT5uZXh0LT5wcmV2ID0gYnVmOwogCQkJCWJyZWFrOwogCQkJfSBlbHNlIGlmIChqICsgMSA9PSBWTklDX1dRX0JVRl9CTEtfRU5UUklFUyhjb3VudCkpIHsKIAkJCQlidWYtPm5leHQgPSB3cS0+YnVmc1tpICsgMV07CisJCQkJYnVmLT5uZXh0LT5wcmV2ID0gYnVmOwogCQkJfSBlbHNlIHsKIAkJCQlidWYtPm5leHQgPSBidWYgKyAxOworCQkJCWJ1Zi0+bmV4dC0+cHJldiA9IGJ1ZjsKIAkJCQlidWYrKzsKIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy92bmljX3dxLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfd3EuaAppbmRleCA4MTZmMWFkLi4yOTYxNTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfd3EuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL3ZuaWNfd3EuaApAQCAtNjIsNiArNjIsNyBAQAogCXVpbnQ4X3QgY3FfZW50cnk7IC8qIEdldHMgY29tcGxldGlvbiBldmVudCBmcm9tIGh3ICovCiAJdWludDhfdCBkZXNjX3NraXBfY250OyAvKiBOdW0gZGVzY3MgdG8gb2NjdXB5ICovCiAJdWludDhfdCBjb21wcmVzc2VkX3NlbmQ7IC8qIEJvdGggaGRyIGFuZCBwYXlsb2FkIGluIG9uZSBkZXNjICovCisJc3RydWN0IHZuaWNfd3FfYnVmICpwcmV2OwogfTsKIAogLyogQnJlYWsgdGhlIHZuaWNfd3FfYnVmIGFsbG9jYXRpb25zIGludG8gYmxvY2tzIG9mIDMyLzY0IGVudHJpZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDAwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9kYXZpY29tL2RtOTAwMC5jCmluZGV4IGVmMGJiNTguLmMwYTc4MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Rhdmljb20vZG05MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZGF2aWNvbS9kbTkwMDAuYwpAQCAtMzYsNiArMzYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMTQyNiwxMSArMTQyOSw0OCBAQAogCXN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRldik7CiAJc3RydWN0IGJvYXJkX2luZm8gKmRiOwkvKiBQb2ludCBhIGJvYXJkIGluZm9ybWF0aW9uIHN0cnVjdHVyZSAqLwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqbWFjX3NyYzsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgaW9zaXplOwogCWludCBpOwogCXUzMiBpZF92YWw7CisJaW50IHJlc2V0X2dwaW9zOworCWVudW0gb2ZfZ3Bpb19mbGFncyBmbGFnczsKKwlzdHJ1Y3QgcmVndWxhdG9yICpwb3dlcjsKKworCXBvd2VyID0gZGV2bV9yZWd1bGF0b3JfZ2V0KGRldiwgInZjYyIpOworCWlmIChJU19FUlIocG93ZXIpKSB7CisJCWlmIChQVFJfRVJSKHBvd2VyKSA9PSAtRVBST0JFX0RFRkVSKQorCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CisJCWRldl9kYmcoZGV2LCAibm8gcmVndWxhdG9yIHByb3ZpZGVkXG4iKTsKKwl9IGVsc2UgeworCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHBvd2VyKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKGRldiwKKwkJCQkiRmFpbGVkIHRvIGVuYWJsZSBwb3dlciByZWd1bGF0b3I6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlkZXZfZGJnKGRldiwgInJlZ3VsYXRvciBlbmFibGVkXG4iKTsKKwl9CisKKwlyZXNldF9ncGlvcyA9IG9mX2dldF9uYW1lZF9ncGlvX2ZsYWdzKGRldi0+b2Zfbm9kZSwgInJlc2V0LWdwaW9zIiwgMCwKKwkJCQkJICAgICAgJmZsYWdzKTsKKwlpZiAoZ3Bpb19pc192YWxpZChyZXNldF9ncGlvcykpIHsKKwkJcmV0ID0gZGV2bV9ncGlvX3JlcXVlc3Rfb25lKGRldiwgcmVzZXRfZ3Bpb3MsIGZsYWdzLAorCQkJCQkgICAgImRtOTAwMF9yZXNldCIpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXF1ZXN0IHJlc2V0IGdwaW8gJWQ6ICVkXG4iLAorCQkJCXJlc2V0X2dwaW9zLCByZXQpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBBY2NvcmRpbmcgdG8gbWFudWFsIFBXUlNUIyBMb3cgUGVyaW9kIE1pbiAxbXMgKi8KKwkJbXNsZWVwKDIpOworCQlncGlvX3NldF92YWx1ZShyZXNldF9ncGlvcywgMSk7CisJCS8qIE5lZWRzIDNtcyB0byByZWFkIGVlcHJvbSB3aGVuIFBXUlNUIGlzIGRlYXNzZXJ0ZWQgKi8KKwkJbXNsZWVwKDQpOworCX0KIAogCWlmICghcGRhdGEpIHsKIAkJcGRhdGEgPSBkbTkwMDBfcGFyc2VfZHQoJnBkZXYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jCmluZGV4IDZhYTg4N2UuLjliZWIzZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jCkBAIC05MDQsNyArOTA0LDcgQEAKIAl9CiAjZWxpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQogCWkgfD0gMHhFMDAwOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkMpIHx8IGRlZmluZWQgKENPTkZJR19QQVJJU0MpCisjZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQykgfHwgZGVmaW5lZCAoQ09ORklHX1BBUklTQykgfHwgZGVmaW5lZChDT05GSUdfQVJNKQogCWkgfD0gMHg0ODAwOwogI2Vsc2UKICN3YXJuaW5nIFByb2Nlc3NvciBhcmNoaXRlY3R1cmUgdW5kZWZpbmVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZS5oCmluZGV4IDcxMmU3ZjguLjI3ZGUzN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZS5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZS5oCkBAIC01OSwyNiArNTksNiBAQAogI2RlZmluZSBPQ19TVUJTWVNfREVWSUNFX0lEMwkweEU2MTIKICNkZWZpbmUgT0NfU1VCU1lTX0RFVklDRV9JRDQJMHhFNjUyCiAKLXN0YXRpYyBpbmxpbmUgY2hhciAqbmljX25hbWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKLQljYXNlIE9DX0RFVklDRV9JRDE6Ci0JCXJldHVybiBPQ19OQU1FOwotCWNhc2UgT0NfREVWSUNFX0lEMjoKLQkJcmV0dXJuIE9DX05BTUVfQkU7Ci0JY2FzZSBPQ19ERVZJQ0VfSUQzOgotCWNhc2UgT0NfREVWSUNFX0lENDoKLQkJcmV0dXJuIE9DX05BTUVfTEFOQ0VSOwotCWNhc2UgQkVfREVWSUNFX0lEMjoKLQkJcmV0dXJuIEJFM19OQU1FOwotCWNhc2UgT0NfREVWSUNFX0lENToKLQljYXNlIE9DX0RFVklDRV9JRDY6Ci0JCXJldHVybiBPQ19OQU1FX1NIOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBCRV9OQU1FOwotCX0KLX0KLQogLyogTnVtYmVyIG9mIGJ5dGVzIG9mIGFuIFJYIGZyYW1lIHRoYXQgYXJlIGNvcGllZCB0byBza2ItPmRhdGEgKi8KICNkZWZpbmUgQkVfSERSX0xFTgkJKCh1MTYpIDY0KQogLyogYWxsb2NhdGUgZXh0cmEgc3BhY2UgdG8gYWxsb3cgdHVubmVsaW5nIGRlY2Fwc3VsYXRpb24gd2l0aG91dCBoZWFkIHJlYWxsb2NhdGlvbiAqLwpAQCAtMjQzLDcgKzIyMyw2IEBACiAJdTY0IHR4X2J5dGVzOwogCXU2NCB0eF9wa3RzOwogCXU2NCB0eF9yZXFzOwotCXU2NCB0eF93cmJzOwogCXU2NCB0eF9jb21wbDsKIAl1bG9uZyB0eF9qaWZmaWVzOwogCXUzMiB0eF9zdG9wczsKQEAgLTI2Niw2ICsyNDUsOSBAQAogCS8qIFJlbWVtYmVyIHRoZSBza2JzIHRoYXQgd2VyZSB0cmFuc21pdHRlZCAqLwogCXN0cnVjdCBza19idWZmICpzZW50X3NrYl9saXN0W1RYX1FfTEVOXTsKIAlzdHJ1Y3QgYmVfdHhfc3RhdHMgc3RhdHM7CisJdTE2IHBlbmRfd3JiX2NudDsJLyogTnVtYmVyIG9mIFdSQnMgeWV0IHRvIGJlIGdpdmVuIHRvIEhXICovCisJdTE2IGxhc3RfcmVxX3dyYl9jbnQ7CS8qIHdyYiBjbnQgb2YgdGhlIGxhc3QgcmVxIGluIHRoZSBRICovCisJdTE2IGxhc3RfcmVxX2hkcjsJLyogaW5kZXggb2YgdGhlIGxhc3QgcmVxJ3MgaGRyLXdyYiAqLwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCiAvKiBTdHJ1Y3QgdG8gcmVtZW1iZXIgdGhlIHBhZ2VzIHBvc3RlZCBmb3IgcnggZnJhZ3MgKi8KQEAgLTM3OSwxNSArMzYxLDE0IEBACiAJQVNTSUdORUQgPSAxCiB9OwogCi0jZGVmaW5lIEJFX0ZMQUdTX0xJTktfU1RBVFVTX0lOSVQJCTEKLSNkZWZpbmUgQkVfRkxBR1NfU1JJT1ZfRU5BQkxFRAkJCSgxIDw8IDIpCi0jZGVmaW5lIEJFX0ZMQUdTX1dPUktFUl9TQ0hFRFVMRUQJCSgxIDw8IDMpCi0jZGVmaW5lIEJFX0ZMQUdTX1ZMQU5fUFJPTUlTQwkJCSgxIDw8IDQpCi0jZGVmaW5lIEJFX0ZMQUdTX01DQVNUX1BST01JU0MJCQkoMSA8PCA1KQotI2RlZmluZSBCRV9GTEFHU19OQVBJX0VOQUJMRUQJCQkoMSA8PCA5KQotI2RlZmluZSBCRV9GTEFHU19RTlFfQVNZTkNfRVZUX1JDVkQJCSgxIDw8IDExKQotI2RlZmluZSBCRV9GTEFHU19WWExBTl9PRkZMT0FEUwkJCSgxIDw8IDEyKQotI2RlZmluZSBCRV9GTEFHU19TRVRVUF9ET05FCQkJKDEgPDwgMTMpCisjZGVmaW5lIEJFX0ZMQUdTX0xJTktfU1RBVFVTX0lOSVQJCUJJVCgxKQorI2RlZmluZSBCRV9GTEFHU19TUklPVl9FTkFCTEVECQkJQklUKDIpCisjZGVmaW5lIEJFX0ZMQUdTX1dPUktFUl9TQ0hFRFVMRUQJCUJJVCgzKQorI2RlZmluZSBCRV9GTEFHU19OQVBJX0VOQUJMRUQJCQlCSVQoNikKKyNkZWZpbmUgQkVfRkxBR1NfUU5RX0FTWU5DX0VWVF9SQ1ZECQlCSVQoNykKKyNkZWZpbmUgQkVfRkxBR1NfVlhMQU5fT0ZGTE9BRFMJCQlCSVQoOCkKKyNkZWZpbmUgQkVfRkxBR1NfU0VUVVBfRE9ORQkJCUJJVCg5KQorI2RlZmluZSBCRV9GTEFHU19FVlRfSU5DT01QQVRJQkxFX1NGUAkJQklUKDEwKQogCiAjZGVmaW5lIEJFX1VDX1BNQUNfQ09VTlQJCQkzMAogI2RlZmluZSBCRV9WRl9VQ19QTUFDX0NPVU5UCQkJMgpAQCAtMzk3LDYgKzM3OCw4IEBACiAjZGVmaW5lIExBTkNFUl9ERUxFVEVfRldfRFVNUAkJCTB4MgogCiBzdHJ1Y3QgcGh5X2luZm8geworLyogRnJvbSBTRkYtODQ3MiBzcGVjICovCisjZGVmaW5lIFNGUF9WRU5ET1JfTkFNRV9MRU4JCQkxNwogCXU4IHRyYW5zY2VpdmVyOwogCXU4IGF1dG9uZWc7CiAJdTggZmNfYXV0b25lZzsKQEAgLTQxMCw2ICszOTMsOCBAQAogCXUzMiBhZHZlcnRpc2luZzsKIAl1MzIgc3VwcG9ydGVkOwogCXU4IGNhYmxlX3R5cGU7CisJdTggdmVuZG9yX25hbWVbU0ZQX1ZFTkRPUl9OQU1FX0xFTl07CisJdTggdmVuZG9yX3BuW1NGUF9WRU5ET1JfTkFNRV9MRU5dOwogfTsKIAogc3RydWN0IGJlX3Jlc291cmNlcyB7CkBAIC00NjcsOCArNDUyLDYgQEAKIAogCXN0cnVjdCBiZV9kcnZfc3RhdHMgZHJ2X3N0YXRzOwogCXN0cnVjdCBiZV9haWNfb2JqIGFpY19vYmpbTUFYX0VWVF9RU107Ci0JdTE2IHZsYW5zX2FkZGVkOwotCXVuc2lnbmVkIGxvbmcgdmlkc1tCSVRTX1RPX0xPTkdTKFZMQU5fTl9WSUQpXTsKIAl1OCB2bGFuX3ByaW9fYm1hcDsJLyogQXZhaWxhYmxlIFByaW9yaXR5IEJpdE1hcCAqLwogCXUxNiByZWNvbW1lbmRlZF9wcmlvOwkvKiBSZWNvbW1lbmRlZCBQcmlvcml0eSAqLwogCXN0cnVjdCBiZV9kbWFfbWVtIHJ4X2ZpbHRlcjsgLyogQ21kIERNQSBtZW0gZm9yIHJ4LWZpbHRlciAqLwpAQCAtNDg0LDggKzQ2NywxNSBAQAogCS8qIEV0aHRvb2wga25vYnMgYW5kIGluZm8gKi8KIAljaGFyIGZ3X3ZlcltGV19WRVJfTEVOXTsKIAljaGFyIGZ3X29uX2ZsYXNoW0ZXX1ZFUl9MRU5dOworCisJLyogSUZBQ0UgZmlsdGVyaW5nIGZpZWxkcyAqLwogCWludCBpZl9oYW5kbGU7CQkvKiBVc2VkIHRvIGNvbmZpZ3VyZSBmaWx0ZXJpbmcgKi8KKwl1MzIgaWZfZmxhZ3M7CQkvKiBJbnRlcmZhY2UgZmlsdGVyaW5nIGZsYWdzICovCiAJdTMyICpwbWFjX2lkOwkJLyogTUFDIGFkZHIgaGFuZGxlIHVzZWQgYnkgQkUgY2FyZCAqLworCXUzMiB1Y19tYWNzOwkJLyogQ291bnQgb2Ygc2Vjb25kYXJ5IFVDIE1BQyBwcm9ncmFtbWVkICovCisJdW5zaWduZWQgbG9uZyB2aWRzW0JJVFNfVE9fTE9OR1MoVkxBTl9OX1ZJRCldOworCXUxNiB2bGFuc19hZGRlZDsKKwogCXUzMiBiZWFjb25fc3RhdGU7CS8qIGZvciBzZXRfcGh5c19pZCAqLwogCiAJYm9vbCBlZWhfZXJyb3I7CkBAIC00OTMsNyArNDgzLDcgQEAKIAlib29sIGh3X2Vycm9yOwogCiAJdTMyIHBvcnRfbnVtOwotCWJvb2wgcHJvbWlzY3VvdXM7CisJY2hhciBwb3J0X25hbWU7CiAJdTggbWNfdHlwZTsKIAl1MzIgZnVuY3Rpb25fbW9kZTsKIAl1MzIgZnVuY3Rpb25fY2FwczsKQEAgLTUyNiw3ICs1MTYsNiBAQAogCXN0cnVjdCBwaHlfaW5mbyBwaHk7CiAJdTggd29sX2NhcDsKIAlib29sIHdvbF9lbjsKLQl1MzIgdWNfbWFjczsJCS8qIENvdW50IG9mIHNlY29uZGFyeSBVQyBNQUMgcHJvZ3JhbW1lZCAqLwogCXUxNiBhc2ljX3JldjsKIAl1MTYgcW5xX3ZpZDsKIAl1MzIgbXNnX2VuYWJsZTsKQEAgLTczMiwxOSArNzIxLDYgQEAKIAlyZXR1cm4gc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkgJiYgaXBfaGRyKHNrYiktPnZlcnNpb24gPT0gNDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGJlX3ZmX2V0aF9hZGRyX2dlbmVyYXRlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqbWFjKQotewotCXUzMiBhZGRyOwotCi0JYWRkciA9IGpoYXNoKGFkYXB0ZXItPm5ldGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOLCAwKTsKLQotCW1hY1s1XSA9ICh1OCkoYWRkciAmIDB4RkYpOwotCW1hY1s0XSA9ICh1OCkoKGFkZHIgPj4gOCkgJiAweEZGKTsKLQltYWNbM10gPSAodTgpKChhZGRyID4+IDE2KSAmIDB4RkYpOwotCS8qIFVzZSB0aGUgT1VJIGZyb20gdGhlIGN1cnJlbnQgTUFDIGFkZHJlc3MgKi8KLQltZW1jcHkobWFjLCBhZGFwdGVyLT5uZXRkZXYtPmRldl9hZGRyLCAzKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sIGJlX211bHRpX3J4cShjb25zdCBzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlyZXR1cm4gYWRhcHRlci0+bnVtX3J4X3FzID4gMTsKQEAgLTc2NywxMjkgKzc0Myw2IEBACiAJYWRhcHRlci0+ZndfdGltZW91dCA9IGZhbHNlOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgYmVfaXNfd29sX2V4Y2x1ZGVkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQotewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKLQotCWlmICghYmVfcGh5c2ZuKGFkYXB0ZXIpKQotCQlyZXR1cm4gdHJ1ZTsKLQotCXN3aXRjaCAocGRldi0+c3Vic3lzdGVtX2RldmljZSkgewotCWNhc2UgT0NfU1VCU1lTX0RFVklDRV9JRDE6Ci0JY2FzZSBPQ19TVUJTWVNfREVWSUNFX0lEMjoKLQljYXNlIE9DX1NVQlNZU19ERVZJQ0VfSUQzOgotCWNhc2UgT0NfU1VCU1lTX0RFVklDRV9JRDQ6Ci0JCXJldHVybiB0cnVlOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHFucV9hc3luY19ldnRfcmN2ZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlyZXR1cm4gYWRhcHRlci0+ZmxhZ3MgJiBCRV9GTEFHU19RTlFfQVNZTkNfRVZUX1JDVkQ7Ci19Ci0KLSNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTAotc3RhdGljIGlubGluZSBib29sIGJlX2xvY2tfbmFwaShzdHJ1Y3QgYmVfZXFfb2JqICplcW8pCi17Ci0JYm9vbCBzdGF0dXMgPSB0cnVlOwotCi0Jc3Bpbl9sb2NrKCZlcW8tPmxvY2spOyAvKiBCSCBpcyBhbHJlYWR5IGRpc2FibGVkICovCi0JaWYgKGVxby0+c3RhdGUgJiBCRV9FUV9MT0NLRUQpIHsKLQkJV0FSTl9PTihlcW8tPnN0YXRlICYgQkVfRVFfTkFQSSk7Ci0JCWVxby0+c3RhdGUgfD0gQkVfRVFfTkFQSV9ZSUVMRDsKLQkJc3RhdHVzID0gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJZXFvLT5zdGF0ZSA9IEJFX0VRX05BUEk7Ci0JfQotCXNwaW5fdW5sb2NrKCZlcW8tPmxvY2spOwotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiZV91bmxvY2tfbmFwaShzdHJ1Y3QgYmVfZXFfb2JqICplcW8pCi17Ci0Jc3Bpbl9sb2NrKCZlcW8tPmxvY2spOyAvKiBCSCBpcyBhbHJlYWR5IGRpc2FibGVkICovCi0KLQlXQVJOX09OKGVxby0+c3RhdGUgJiAoQkVfRVFfUE9MTCB8IEJFX0VRX05BUElfWUlFTEQpKTsKLQllcW8tPnN0YXRlID0gQkVfRVFfSURMRTsKLQotCXNwaW5fdW5sb2NrKCZlcW8tPmxvY2spOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgYmVfbG9ja19idXN5X3BvbGwoc3RydWN0IGJlX2VxX29iaiAqZXFvKQotewotCWJvb2wgc3RhdHVzID0gdHJ1ZTsKLQotCXNwaW5fbG9ja19iaCgmZXFvLT5sb2NrKTsKLQlpZiAoZXFvLT5zdGF0ZSAmIEJFX0VRX0xPQ0tFRCkgewotCQllcW8tPnN0YXRlIHw9IEJFX0VRX1BPTExfWUlFTEQ7Ci0JCXN0YXR1cyA9IGZhbHNlOwotCX0gZWxzZSB7Ci0JCWVxby0+c3RhdGUgfD0gQkVfRVFfUE9MTDsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmVxby0+bG9jayk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJlX3VubG9ja19idXN5X3BvbGwoc3RydWN0IGJlX2VxX29iaiAqZXFvKQotewotCXNwaW5fbG9ja19iaCgmZXFvLT5sb2NrKTsKLQotCVdBUk5fT04oZXFvLT5zdGF0ZSAmIChCRV9FUV9OQVBJKSk7Ci0JZXFvLT5zdGF0ZSA9IEJFX0VRX0lETEU7Ci0KLQlzcGluX3VubG9ja19iaCgmZXFvLT5sb2NrKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJlX2VuYWJsZV9idXN5X3BvbGwoc3RydWN0IGJlX2VxX29iaiAqZXFvKQotewotCXNwaW5fbG9ja19pbml0KCZlcW8tPmxvY2spOwotCWVxby0+c3RhdGUgPSBCRV9FUV9JRExFOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYmVfZGlzYWJsZV9idXN5X3BvbGwoc3RydWN0IGJlX2VxX29iaiAqZXFvKQotewotCWxvY2FsX2JoX2Rpc2FibGUoKTsKLQotCS8qIEl0J3MgZW5vdWdoIHRvIGp1c3QgYWNxdWlyZSBuYXBpIGxvY2sgb24gdGhlIGVxbyB0byBzdG9wCi0JICogYmVfYnVzeV9wb2xsKCkgZnJvbSBwcm9jZXNzaW5nIGFueSBxdWV1ZXVzLgotCSAqLwotCXdoaWxlICghYmVfbG9ja19uYXBpKGVxbykpCi0JCW1kZWxheSgxKTsKLQotCWxvY2FsX2JoX2VuYWJsZSgpOwotfQotCi0jZWxzZSAvKiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTCAqLwotCi1zdGF0aWMgaW5saW5lIGJvb2wgYmVfbG9ja19uYXBpKHN0cnVjdCBiZV9lcV9vYmogKmVxbykKLXsKLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJlX3VubG9ja19uYXBpKHN0cnVjdCBiZV9lcV9vYmogKmVxbykKLXsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGJlX2xvY2tfYnVzeV9wb2xsKHN0cnVjdCBiZV9lcV9vYmogKmVxbykKLXsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiZV91bmxvY2tfYnVzeV9wb2xsKHN0cnVjdCBiZV9lcV9vYmogKmVxbykKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGJlX2VuYWJsZV9idXN5X3BvbGwoc3RydWN0IGJlX2VxX29iaiAqZXFvKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYmVfZGlzYWJsZV9idXN5X3BvbGwoc3RydWN0IGJlX2VxX29iaiAqZXFvKQotewotfQotI2VuZGlmIC8qIENPTkZJR19ORVRfUlhfQlVTWV9QT0xMICovCi0KIHZvaWQgYmVfY3Ffbm90aWZ5KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MTYgcWlkLCBib29sIGFybSwKIAkJICB1MTYgbnVtX3BvcHBlZCk7CiB2b2lkIGJlX2xpbmtfc3RhdHVzX3VwZGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggbGlua19zdGF0dXMpOwpAQCAtODk4LDE2ICs3NTEsNiBAQAogYm9vbCBiZV9pc193b2xfc3VwcG9ydGVkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKIGJvb2wgYmVfcGF1c2Vfc3VwcG9ydGVkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKIHUzMiBiZV9nZXRfZndfbG9nX2xldmVsKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKLQotc3RhdGljIGlubGluZSBpbnQgZndfbWFqb3JfbnVtKGNvbnN0IGNoYXIgKmZ3X3ZlcikKLXsKLQlpbnQgZndfbWFqb3IgPSAwOwotCi0Jc3NjYW5mKGZ3X3ZlciwgIiVkLiIsICZmd19tYWpvcik7Ci0KLQlyZXR1cm4gZndfbWFqb3I7Ci19Ci0KIGludCBiZV91cGRhdGVfcXVldWVzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKIGludCBiZV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9jbWRzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfY21kcy5jCmluZGV4IGZlYWQ1YzYuLjM2OTE2Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9jbWRzLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX2NtZHMuYwpAQCAtMTksNiArMTksMjIgQEAKICNpbmNsdWRlICJiZS5oIgogI2luY2x1ZGUgImJlX2NtZHMuaCIKIAorc3RhdGljIGNoYXIgKmJlX3BvcnRfbWlzY29uZmlnX2V2dF9kZXNjW10gPSB7CisJIkEgdmFsaWQgU0ZQIG1vZHVsZSBkZXRlY3RlZCIsCisJIk9wdGljcyBmYXVsdGVkLyBpbmNvcnJlY3RseSBpbnN0YWxsZWQvIG5vdCBpbnN0YWxsZWQuIiwKKwkiT3B0aWNzIG9mIHR3byB0eXBlcyBpbnN0YWxsZWQuIiwKKwkiSW5jb21wYXRpYmxlIG9wdGljcy4iLAorCSJVbmtub3duIHBvcnQgU0ZQIHN0YXR1cyIKK307CisKK3N0YXRpYyBjaGFyICpiZV9wb3J0X21pc2NvbmZpZ19yZW1lZHlfZGVzY1tdID0geworCSIiLAorCSJSZXNlYXQgb3B0aWNzLiBJZiBpc3N1ZSBub3QgcmVzb2x2ZWQsIHJlcGxhY2UiLAorCSJSZW1vdmUgb25lIG9wdGljIG9yIGluc3RhbGwgbWF0Y2hpbmcgcGFpciBvZiBvcHRpY3MiLAorCSJSZXBsYWNlIHdpdGggY29tcGF0aWJsZSBvcHRpY3MgZm9yIGNhcmQgdG8gZnVuY3Rpb24iLAorCSIiCit9OworCiBzdGF0aWMgc3RydWN0IGJlX2NtZF9wcml2X21hcCBjbWRfcHJpdl9tYXBbXSA9IHsKIAl7CiAJCU9QQ09ERV9FVEhfQUNQSV9XT0xfTUFHSUNfQ09ORklHLApAQCAtMjQ5LDYgKzI2NSwyOSBAQAogCQkJCSAgICAgIGV2dC0+cG9ydF9saW5rX3N0YXR1cyAmIExJTktfU1RBVFVTX01BU0spOwogfQogCitzdGF0aWMgdm9pZCBiZV9hc3luY19wb3J0X21pc2NvbmZpZ19ldmVudF9wcm9jZXNzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJCQkJICBzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCkKK3sKKwlzdHJ1Y3QgYmVfYXN5bmNfZXZlbnRfbWlzY29uZmlnX3BvcnQgKmV2dCA9CisJCQkoc3RydWN0IGJlX2FzeW5jX2V2ZW50X21pc2NvbmZpZ19wb3J0ICopY29tcGw7CisJdTMyIHNmcF9taXNtYXRjaF9ldnQgPSBsZTMyX3RvX2NwdShldnQtPmV2ZW50X2RhdGFfd29yZDEpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhZGFwdGVyLT5wZGV2LT5kZXY7CisJdTggcG9ydF9taXNjb25maWdfZXZ0OworCisJcG9ydF9taXNjb25maWdfZXZ0ID0KKwkJKChzZnBfbWlzbWF0Y2hfZXZ0ID4+IChhZGFwdGVyLT5oYmFfcG9ydF9udW0gKiA4KSkgJiAweGZmKTsKKworCS8qIExvZyBhbiBlcnJvciBtZXNzYWdlIHRoYXQgd291bGQgYWxsb3cgYSB1c2VyIHRvIGRldGVybWluZQorCSAqIHdoZXRoZXIgdGhlIFNGUHMgaGF2ZSBhbiBpc3N1ZQorCSAqLworCWRldl9pbmZvKGRldiwgIlBvcnQgJWM6ICVzICVzIiwgYWRhcHRlci0+cG9ydF9uYW1lLAorCQkgYmVfcG9ydF9taXNjb25maWdfZXZ0X2Rlc2NbcG9ydF9taXNjb25maWdfZXZ0XSwKKwkJIGJlX3BvcnRfbWlzY29uZmlnX3JlbWVkeV9kZXNjW3BvcnRfbWlzY29uZmlnX2V2dF0pOworCisJaWYgKHBvcnRfbWlzY29uZmlnX2V2dCA9PSBJTkNPTVBBVElCTEVfU0ZQKQorCQlhZGFwdGVyLT5mbGFncyB8PSBCRV9GTEFHU19FVlRfSU5DT01QQVRJQkxFX1NGUDsKK30KKwogLyogR3JwNSBDb1MgUHJpb3JpdHkgZXZ0ICovCiBzdGF0aWMgdm9pZCBiZV9hc3luY19ncnA1X2Nvc19wcmlvcml0eV9wcm9jZXNzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgICAgICAgc3RydWN0IGJlX21jY19jb21wbCAqY29tcGwpCkBAIC0zMzQsNiArMzczLDE2IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBiZV9hc3luY19zbGlwb3J0X2V2dF9wcm9jZXNzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgc3RydWN0IGJlX21jY19jb21wbCAqY21wKQoreworCXU4IGV2ZW50X3R5cGUgPSAoY21wLT5mbGFncyA+PiBBU1lOQ19FVkVOVF9UWVBFX1NISUZUKSAmCisJCQlBU1lOQ19FVkVOVF9UWVBFX01BU0s7CisKKwlpZiAoZXZlbnRfdHlwZSA9PSBBU1lOQ19FVkVOVF9QT1JUX01JU0NPTkZJRykKKwkJYmVfYXN5bmNfcG9ydF9taXNjb25maWdfZXZlbnRfcHJvY2VzcyhhZGFwdGVyLCBjbXApOworfQorCiBzdGF0aWMgaW5saW5lIGJvb2wgaXNfbGlua19zdGF0ZV9ldnQodTMyIGZsYWdzKQogewogCXJldHVybiAoKGZsYWdzID4+IEFTWU5DX0VWRU5UX0NPREVfU0hJRlQpICYgQVNZTkNfRVZFTlRfQ09ERV9NQVNLKSA9PQpAQCAtMzUyLDYgKzQwMSwxMiBAQAogCQkJQVNZTkNfRVZFTlRfQ09ERV9RTlE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19zbGlwb3J0X2V2dCh1MzIgZmxhZ3MpCit7CisJcmV0dXJuICgoZmxhZ3MgPj4gQVNZTkNfRVZFTlRfQ09ERV9TSElGVCkgJiBBU1lOQ19FVkVOVF9DT0RFX01BU0spID09CisJCUFTWU5DX0VWRU5UX0NPREVfU0xJUE9SVDsKK30KKwogc3RhdGljIHZvaWQgYmVfbWNjX2V2ZW50X3Byb2Nlc3Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkJIHN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsKQogewpAQCAtMzYxLDYgKzQxNiw4IEBACiAJCWJlX2FzeW5jX2dycDVfZXZ0X3Byb2Nlc3MoYWRhcHRlciwgY29tcGwpOwogCWVsc2UgaWYgKGlzX2RiZ19ldnQoY29tcGwtPmZsYWdzKSkKIAkJYmVfYXN5bmNfZGJnX2V2dF9wcm9jZXNzKGFkYXB0ZXIsIGNvbXBsKTsKKwllbHNlIGlmIChpc19zbGlwb3J0X2V2dChjb21wbC0+ZmxhZ3MpKQorCQliZV9hc3luY19zbGlwb3J0X2V2dF9wcm9jZXNzKGFkYXB0ZXIsIGNvbXBsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBiZV9tY2NfY29tcGwgKmJlX21jY19jb21wbF9nZXQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC01NzMsNyArNjMwLDcgQEAKIHsKICNkZWZpbmUgU0xJUE9SVF9SRUFEWV9USU1FT1VUIDMwCiAJdTMyIHNsaXBvcnRfc3RhdHVzOwotCWludCBzdGF0dXMgPSAwLCBpOworCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFNMSVBPUlRfUkVBRFlfVElNRU9VVDsgaSsrKSB7CiAJCXNsaXBvcnRfc3RhdHVzID0gaW9yZWFkMzIoYWRhcHRlci0+ZGIgKyBTTElQT1JUX1NUQVRVU19PRkZTRVQpOwpAQCAtNTg0LDkgKzY0MSw5IEBACiAJfQogCiAJaWYgKGkgPT0gU0xJUE9SVF9SRUFEWV9USU1FT1VUKQotCQlzdGF0dXMgPSAtMTsKKwkJcmV0dXJuIHNsaXBvcnRfc3RhdHVzID8gOiAtMTsKIAotCXJldHVybiBzdGF0dXM7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBib29sIGxhbmNlcl9wcm92aXNpb25pbmdfZXJyb3Ioc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCkBAIC02MjQsNyArNjgxLDcgQEAKIAkJCWlvd3JpdGUzMihTTElfUE9SVF9DT05UUk9MX0lQX01BU0ssCiAJCQkJICBhZGFwdGVyLT5kYiArIFNMSVBPUlRfQ09OVFJPTF9PRkZTRVQpOwogCi0JCQkvKiBjaGVjayBhZGFwdGVyIGhhcyBjb3JyZWN0ZWQgdGhlIGVycm9yICovCisJCQkvKiBjaGVjayBpZiBhZGFwdGVyIGhhcyBjb3JyZWN0ZWQgdGhlIGVycm9yICovCiAJCQlzdGF0dXMgPSBsYW5jZXJfd2FpdF9yZWFkeShhZGFwdGVyKTsKIAkJCXNsaXBvcnRfc3RhdHVzID0gaW9yZWFkMzIoYWRhcHRlci0+ZGIgKwogCQkJCQkJICBTTElQT1JUX1NUQVRVU19PRkZTRVQpOwpAQCAtNjU1LDcgKzcxMiwxMSBAQAogCiAJaWYgKGxhbmNlcl9jaGlwKGFkYXB0ZXIpKSB7CiAJCXN0YXR1cyA9IGxhbmNlcl93YWl0X3JlYWR5KGFkYXB0ZXIpOwotCQlyZXR1cm4gc3RhdHVzOworCQlpZiAoc3RhdHVzKSB7CisJCQlzdGFnZSA9IHN0YXR1czsKKwkJCWdvdG8gZXJyOworCQl9CisJCXJldHVybiAwOwogCX0KIAogCWRvIHsKQEAgLTY3MSw3ICs3MzIsOCBAQAogCQl0aW1lb3V0ICs9IDI7CiAJfSB3aGlsZSAodGltZW91dCA8IDYwKTsKIAotCWRldl9lcnIoZGV2LCAiUE9TVCB0aW1lb3V0OyBzdGFnZT0weCV4XG4iLCBzdGFnZSk7CitlcnI6CisJZGV2X2VycihkZXYsICJQT1NUIHRpbWVvdXQ7IHN0YWdlPSUjeFxuIiwgc3RhZ2UpOwogCXJldHVybiAtMTsKIH0KIApAQCAtMTE2Niw5ICsxMjI4LDE1IEBACiAJCQkgICAgICBjdHh0LCAxKTsKIAl9CiAKLQkvKiBTdWJzY3JpYmUgdG8gTGluayBTdGF0ZSBhbmQgR3JvdXAgNSBFdmVudHMoYml0cyAxIGFuZCA1IHNldCkgKi8KLQlyZXEtPmFzeW5jX2V2ZW50X2JpdG1hcFswXSA9IGNwdV90b19sZTMyKDB4MDAwMDAwMjIpOwotCXJlcS0+YXN5bmNfZXZlbnRfYml0bWFwWzBdIHw9IGNwdV90b19sZTMyKDEgPDwgQVNZTkNfRVZFTlRfQ09ERV9RTlEpOworCS8qIFN1YnNjcmliZSB0byBMaW5rIFN0YXRlLCBTbGlwb3J0IEV2ZW50IGFuZCBHcm91cCA1IEV2ZW50cworCSAqIChiaXRzIDEsIDUgYW5kIDE3IHNldCkKKwkgKi8KKwlyZXEtPmFzeW5jX2V2ZW50X2JpdG1hcFswXSA9CisJCQljcHVfdG9fbGUzMihCSVQoQVNZTkNfRVZFTlRfQ09ERV9MSU5LX1NUQVRFKSB8CisJCQkJICAgIEJJVChBU1lOQ19FVkVOVF9DT0RFX0dSUF81KSB8CisJCQkJICAgIEJJVChBU1lOQ19FVkVOVF9DT0RFX1FOUSkgfAorCQkJCSAgICBCSVQoQVNZTkNfRVZFTlRfQ09ERV9TTElQT1JUKSk7CisKIAliZV9kd3NfY3B1X3RvX2xlKGN0eHQsIHNpemVvZihyZXEtPmNvbnRleHQpKTsKIAogCWJlX2NtZF9wYWdlX2FkZHJzX3ByZXBhcmUocmVxLT5wYWdlcywgQVJSQVlfU0laRShyZXEtPnBhZ2VzKSwgcV9tZW0pOwpAQCAtMTg4MSw3ICsxOTQ5LDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1pbnQgYmVfY21kX3J4X2ZpbHRlcihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGZsYWdzLCB1MzIgdmFsdWUpCitzdGF0aWMgaW50IF9fYmVfY21kX3J4X2ZpbHRlcihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGZsYWdzLCB1MzIgdmFsdWUpCiB7CiAJc3RydWN0IGJlX21jY193cmIgKndyYjsKIAlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtID0gJmFkYXB0ZXItPnJ4X2ZpbHRlcjsKQEAgLTE5MDEsMzEgKzE5NjksMTMgQEAKIAkJCSAgICAgICB3cmIsIG1lbSk7CiAKIAlyZXEtPmlmX2lkID0gY3B1X3RvX2xlMzIoYWRhcHRlci0+aWZfaGFuZGxlKTsKLQlpZiAoZmxhZ3MgJiBJRkZfUFJPTUlTQykgewotCQlyZXEtPmlmX2ZsYWdzX21hc2sgPSBjcHVfdG9fbGUzMihCRV9JRl9GTEFHU19QUk9NSVNDVU9VUyB8Ci0JCQkJCQkgQkVfSUZfRkxBR1NfVkxBTl9QUk9NSVNDVU9VUyB8Ci0JCQkJCQkgQkVfSUZfRkxBR1NfTUNBU1RfUFJPTUlTQ1VPVVMpOwotCQlpZiAodmFsdWUgPT0gT04pCi0JCQlyZXEtPmlmX2ZsYWdzID0KLQkJCQljcHVfdG9fbGUzMihCRV9JRl9GTEFHU19QUk9NSVNDVU9VUyB8Ci0JCQkJCSAgICBCRV9JRl9GTEFHU19WTEFOX1BST01JU0NVT1VTIHwKLQkJCQkJICAgIEJFX0lGX0ZMQUdTX01DQVNUX1BST01JU0NVT1VTKTsKLQl9IGVsc2UgaWYgKGZsYWdzICYgSUZGX0FMTE1VTFRJKSB7Ci0JCXJlcS0+aWZfZmxhZ3NfbWFzayA9IGNwdV90b19sZTMyKEJFX0lGX0ZMQUdTX01DQVNUX1BST01JU0NVT1VTKTsKLQkJcmVxLT5pZl9mbGFncyA9CWNwdV90b19sZTMyKEJFX0lGX0ZMQUdTX01DQVNUX1BST01JU0NVT1VTKTsKLQl9IGVsc2UgaWYgKGZsYWdzICYgQkVfRkxBR1NfVkxBTl9QUk9NSVNDKSB7Ci0JCXJlcS0+aWZfZmxhZ3NfbWFzayA9IGNwdV90b19sZTMyKEJFX0lGX0ZMQUdTX1ZMQU5fUFJPTUlTQ1VPVVMpOworCXJlcS0+aWZfZmxhZ3NfbWFzayA9IGNwdV90b19sZTMyKGZsYWdzKTsKKwlyZXEtPmlmX2ZsYWdzID0gKHZhbHVlID09IE9OKSA/IHJlcS0+aWZfZmxhZ3NfbWFzayA6IDA7CiAKLQkJaWYgKHZhbHVlID09IE9OKQotCQkJcmVxLT5pZl9mbGFncyA9Ci0JCQkJY3B1X3RvX2xlMzIoQkVfSUZfRkxBR1NfVkxBTl9QUk9NSVNDVU9VUyk7Ci0JfSBlbHNlIHsKKwlpZiAoZmxhZ3MgJiBCRV9JRl9GTEFHU19NVUxUSUNBU1QpIHsKIAkJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKIAkJaW50IGkgPSAwOwogCi0JCXJlcS0+aWZfZmxhZ3NfbWFzayA9IGNwdV90b19sZTMyKEJFX0lGX0ZMQUdTX01VTFRJQ0FTVCk7Ci0JCXJlcS0+aWZfZmxhZ3MgPQljcHVfdG9fbGUzMihCRV9JRl9GTEFHU19NVUxUSUNBU1QpOwotCiAJCS8qIFJlc2V0IG1jYXN0IHByb21pc2MgbW9kZSBpZiBhbHJlYWR5IHNldCBieSBzZXR0aW5nIG1hc2sKIAkJICogYW5kIG5vdCBzZXR0aW5nIGZsYWdzIGZpZWxkCiAJCSAqLwpAQCAtMTkzNywyNCArMTk4NywyNiBAQAogCQkJbWVtY3B5KHJlcS0+bWNhc3RfbWFjW2krK10uYnl0ZSwgaGEtPmFkZHIsIEVUSF9BTEVOKTsKIAl9CiAKLQlpZiAoKHJlcS0+aWZfZmxhZ3NfbWFzayAmIGNwdV90b19sZTMyKGJlX2lmX2NhcF9mbGFncyhhZGFwdGVyKSkpICE9Ci0JICAgIHJlcS0+aWZfZmxhZ3NfbWFzaykgewotCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJICJDYW5ub3Qgc2V0IHJ4IGZpbHRlciBmbGFncyAweCV4XG4iLAotCQkJIHJlcS0+aWZfZmxhZ3NfbWFzayk7Ci0JCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCi0JCQkgIkludGVyZmFjZSBpcyBjYXBhYmxlIG9mIDB4JXggZmxhZ3Mgb25seVxuIiwKLQkJCSBiZV9pZl9jYXBfZmxhZ3MoYWRhcHRlcikpOwotCX0KLQlyZXEtPmlmX2ZsYWdzX21hc2sgJj0gY3B1X3RvX2xlMzIoYmVfaWZfY2FwX2ZsYWdzKGFkYXB0ZXIpKTsKLQogCXN0YXR1cyA9IGJlX21jY19ub3RpZnlfd2FpdChhZGFwdGVyKTsKLQogZXJyOgogCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAoraW50IGJlX2NtZF9yeF9maWx0ZXIoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBmbGFncywgdTMyIHZhbHVlKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhZGFwdGVyLT5wZGV2LT5kZXY7CisKKwlpZiAoKGZsYWdzICYgYmVfaWZfY2FwX2ZsYWdzKGFkYXB0ZXIpKSAhPSBmbGFncykgeworCQlkZXZfd2FybihkZXYsICJDYW5ub3Qgc2V0IHJ4IGZpbHRlciBmbGFncyAweCV4XG4iLCBmbGFncyk7CisJCWRldl93YXJuKGRldiwgIkludGVyZmFjZSBpcyBjYXBhYmxlIG9mIDB4JXggZmxhZ3Mgb25seVxuIiwKKwkJCSBiZV9pZl9jYXBfZmxhZ3MoYWRhcHRlcikpOworCX0KKwlmbGFncyAmPSBiZV9pZl9jYXBfZmxhZ3MoYWRhcHRlcik7CisKKwlyZXR1cm4gX19iZV9jbWRfcnhfZmlsdGVyKGFkYXB0ZXIsIGZsYWdzLCB2YWx1ZSk7Cit9CisKIC8qIFVzZXMgc3luY2hyb3Vub3VzIG1jYyAqLwogaW50IGJlX2NtZF9zZXRfZmxvd19jb250cm9sKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgdHhfZmMsIHUzMiByeF9mYykKIHsKQEAgLTIzNTUsNiArMjQwNywyNCBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK2ludCBiZV9jbWRfcXVlcnlfc2ZwX2luZm8oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTggcGFnZV9kYXRhW1BBR0VfREFUQV9MRU5dOworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBiZV9jbWRfcmVhZF9wb3J0X3RyYW5zY2VpdmVyX2RhdGEoYWRhcHRlciwgVFJfUEFHRV9BMCwKKwkJCQkJCSAgIHBhZ2VfZGF0YSk7CisJaWYgKCFzdGF0dXMpIHsKKwkJc3RybGNweShhZGFwdGVyLT5waHkudmVuZG9yX25hbWUsIHBhZ2VfZGF0YSArCisJCQlTRlBfVkVORE9SX05BTUVfT0ZGU0VULCBTRlBfVkVORE9SX05BTUVfTEVOIC0gMSk7CisJCXN0cmxjcHkoYWRhcHRlci0+cGh5LnZlbmRvcl9wbiwKKwkJCXBhZ2VfZGF0YSArIFNGUF9WRU5ET1JfUE5fT0ZGU0VULAorCQkJU0ZQX1ZFTkRPUl9OQU1FX0xFTiAtIDEpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKIGludCBsYW5jZXJfY21kX2RlbGV0ZV9vYmplY3Qoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IGNoYXIgKm9ial9uYW1lKQogewogCXN0cnVjdCBsYW5jZXJfY21kX3JlcV9kZWxldGVfb2JqZWN0ICpyZXE7CkBAIC0yNDMxLDcgKzI1MDEsOCBAQAogfQogCiBpbnQgYmVfY21kX3dyaXRlX2ZsYXNocm9tKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgYmVfZG1hX21lbSAqY21kLAotCQkJICB1MzIgZmxhc2hfdHlwZSwgdTMyIGZsYXNoX29wY29kZSwgdTMyIGJ1Zl9zaXplKQorCQkJICB1MzIgZmxhc2hfdHlwZSwgdTMyIGZsYXNoX29wY29kZSwgdTMyIGltZ19vZmZzZXQsCisJCQkgIHUzMiBidWZfc2l6ZSkKIHsKIAlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOwogCXN0cnVjdCBiZV9jbWRfd3JpdGVfZmxhc2hyb20gKnJlcTsKQEAgLTI0NTIsNiArMjUyMyw5IEBACiAJCQkgICAgICAgY21kKTsKIAogCXJlcS0+cGFyYW1zLm9wX3R5cGUgPSBjcHVfdG9fbGUzMihmbGFzaF90eXBlKTsKKwlpZiAoZmxhc2hfdHlwZSA9PSBPUFRZUEVfT0ZGU0VUX1NQRUNJRklFRCkKKwkJcmVxLT5wYXJhbXMub2Zmc2V0ID0gY3B1X3RvX2xlMzIoaW1nX29mZnNldCk7CisKIAlyZXEtPnBhcmFtcy5vcF9jb2RlID0gY3B1X3RvX2xlMzIoZmxhc2hfb3Bjb2RlKTsKIAlyZXEtPnBhcmFtcy5kYXRhX2J1Zl9zaXplID0gY3B1X3RvX2xlMzIoYnVmX3NpemUpOwogCkBAIC0yNDcyLDEwICsyNTQ2LDEwIEBACiB9CiAKIGludCBiZV9jbWRfZ2V0X2ZsYXNoX2NyYyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKmZsYXNoZWRfY3JjLAotCQkJIHUxNiBvcHR5cGUsIGludCBvZmZzZXQpCisJCQkgdTE2IGltZ19vcHR5cGUsIHUzMiBpbWdfb2Zmc2V0LCB1MzIgY3JjX29mZnNldCkKIHsKLQlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOwogCXN0cnVjdCBiZV9jbWRfcmVhZF9mbGFzaF9jcmMgKnJlcTsKKwlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOwogCWludCBzdGF0dXM7CiAKIAlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKQEAgLTI0OTEsOSArMjU2NSwxMyBAQAogCQkJICAgICAgIE9QQ09ERV9DT01NT05fUkVBRF9GTEFTSFJPTSwgc2l6ZW9mKCpyZXEpLAogCQkJICAgICAgIHdyYiwgTlVMTCk7CiAKLQlyZXEtPnBhcmFtcy5vcF90eXBlID0gY3B1X3RvX2xlMzIob3B0eXBlKTsKKwlyZXEtPnBhcmFtcy5vcF90eXBlID0gY3B1X3RvX2xlMzIoaW1nX29wdHlwZSk7CisJaWYgKGltZ19vcHR5cGUgPT0gT1BUWVBFX09GRlNFVF9TUEVDSUZJRUQpCisJCXJlcS0+cGFyYW1zLm9mZnNldCA9IGNwdV90b19sZTMyKGltZ19vZmZzZXQgKyBjcmNfb2Zmc2V0KTsKKwllbHNlCisJCXJlcS0+cGFyYW1zLm9mZnNldCA9IGNwdV90b19sZTMyKGNyY19vZmZzZXQpOworCiAJcmVxLT5wYXJhbXMub3BfY29kZSA9IGNwdV90b19sZTMyKEZMQVNIUk9NX09QRVJfUkVQT1JUKTsKLQlyZXEtPnBhcmFtcy5vZmZzZXQgPSBjcHVfdG9fbGUzMihvZmZzZXQpOwogCXJlcS0+cGFyYW1zLmRhdGFfYnVmX3NpemUgPSBjcHVfdG9fbGUzMigweDQpOwogCiAJc3RhdHVzID0gYmVfbWNjX25vdGlmeV93YWl0KGFkYXB0ZXIpOwpAQCAtMjc0Miw3ICsyODIwLDcgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1pbnQgYmVfY21kX3NldF9xb3Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBicHMsIHUzMiBkb21haW4pCitzdGF0aWMgaW50IGJlX2NtZF9zZXRfcW9zKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgYnBzLCB1MzIgZG9tYWluKQogewogCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CiAJc3RydWN0IGJlX2NtZF9yZXFfc2V0X3FvcyAqcmVxOwpAQCAtMzIzNiw2ICszMzE0LDI0IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorc3RhdGljIGJvb2wgYmVfaXNfd29sX2V4Y2x1ZGVkKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWlmICghYmVfcGh5c2ZuKGFkYXB0ZXIpKQorCQlyZXR1cm4gdHJ1ZTsKKworCXN3aXRjaCAocGRldi0+c3Vic3lzdGVtX2RldmljZSkgeworCWNhc2UgT0NfU1VCU1lTX0RFVklDRV9JRDE6CisJY2FzZSBPQ19TVUJTWVNfREVWSUNFX0lEMjoKKwljYXNlIE9DX1NVQlNZU19ERVZJQ0VfSUQzOgorCWNhc2UgT0NfU1VCU1lTX0RFVklDRV9JRDQ6CisJCXJldHVybiB0cnVlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKIGludCBiZV9jbWRfZ2V0X2FjcGlfd29sX2NhcChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgYmVfbWNjX3dyYiAqd3JiOwpAQCAtMzQyMiw0MiArMzUxOCwzNCBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLWludCBiZV9jbWRfcXVlcnlfcG9ydF9uYW1lKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1OCAqcG9ydF9uYW1lKQoraW50IGJlX2NtZF9xdWVyeV9wb3J0X25hbWUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGJlX21jY193cmIgKndyYjsKIAlzdHJ1Y3QgYmVfY21kX3JlcV9nZXRfcG9ydF9uYW1lICpyZXE7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKIAlpbnQgc3RhdHVzOwogCi0JaWYgKCFsYW5jZXJfY2hpcChhZGFwdGVyKSkgewotCQkqcG9ydF9uYW1lID0gYWRhcHRlci0+aGJhX3BvcnRfbnVtICsgJzAnOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWRhcHRlci0+bWJveF9sb2NrKSkKKwkJcmV0dXJuIC0xOwogCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7Ci0KLQl3cmIgPSB3cmJfZnJvbV9tY2NxKGFkYXB0ZXIpOwotCWlmICghd3JiKSB7Ci0JCXN0YXR1cyA9IC1FQlVTWTsKLQkJZ290byBlcnI7Ci0JfQotCisJd3JiID0gd3JiX2Zyb21fbWJveChhZGFwdGVyKTsKIAlyZXEgPSBlbWJlZGRlZF9wYXlsb2FkKHdyYik7CiAKIAliZV93cmJfY21kX2hkcl9wcmVwYXJlKCZyZXEtPmhkciwgQ01EX1NVQlNZU1RFTV9DT01NT04sCiAJCQkgICAgICAgT1BDT0RFX0NPTU1PTl9HRVRfUE9SVF9OQU1FLCBzaXplb2YoKnJlcSksIHdyYiwKIAkJCSAgICAgICBOVUxMKTsKLQlyZXEtPmhkci52ZXJzaW9uID0gMTsKKwlpZiAoIUJFeF9jaGlwKGFkYXB0ZXIpKQorCQlyZXEtPmhkci52ZXJzaW9uID0gMTsKIAotCXN0YXR1cyA9IGJlX21jY19ub3RpZnlfd2FpdChhZGFwdGVyKTsKKwlzdGF0dXMgPSBiZV9tYm94X25vdGlmeV93YWl0KGFkYXB0ZXIpOwogCWlmICghc3RhdHVzKSB7CiAJCXN0cnVjdCBiZV9jbWRfcmVzcF9nZXRfcG9ydF9uYW1lICpyZXNwID0gZW1iZWRkZWRfcGF5bG9hZCh3cmIpOwogCi0JCSpwb3J0X25hbWUgPSByZXNwLT5wb3J0X25hbWVbYWRhcHRlci0+aGJhX3BvcnRfbnVtXTsKKwkJYWRhcHRlci0+cG9ydF9uYW1lID0gcmVzcC0+cG9ydF9uYW1lW2FkYXB0ZXItPmhiYV9wb3J0X251bV07CiAJfSBlbHNlIHsKLQkJKnBvcnRfbmFtZSA9IGFkYXB0ZXItPmhiYV9wb3J0X251bSArICcwJzsKKwkJYWRhcHRlci0+cG9ydF9uYW1lID0gYWRhcHRlci0+aGJhX3BvcnRfbnVtICsgJzAnOwogCX0KLWVycjoKLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOworCisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTM3NTEsNiArMzgzOSw3IEBACiAJYmVfcmVzZXRfbmljX2Rlc2MoJm5pY19kZXNjKTsKIAluaWNfZGVzYy5wZl9udW0gPSBhZGFwdGVyLT5wZl9udW1iZXI7CiAJbmljX2Rlc2MudmZfbnVtID0gZG9tYWluOworCW5pY19kZXNjLmJ3X21pbiA9IDA7CiAJaWYgKGxhbmNlcl9jaGlwKGFkYXB0ZXIpKSB7CiAJCW5pY19kZXNjLmhkci5kZXNjX3R5cGUgPSBOSUNfUkVTT1VSQ0VfREVTQ19UWVBFX1YwOwogCQluaWNfZGVzYy5oZHIuZGVzY19sZW4gPSBSRVNPVVJDRV9ERVNDX1NJWkVfVjA7CkBAIC00MDkyLDcgKzQxODEsNyBAQAogCWludCBzdGF0dXM7CiAKIAlpZiAoQkV4X2NoaXAoYWRhcHRlcikgfHwgbGFuY2VyX2NoaXAoYWRhcHRlcikpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19sb2NrKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX2NtZHMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9jbWRzLmgKaW5kZXggZWI1MDg1ZC4uZGI3NjFlOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9jbWRzLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX2NtZHMuaApAQCAtNDQsMTAgKzQ0LDEwIEBACiAJfSBwYXlsb2FkOwogfTsKIAotI2RlZmluZSBDUUVfRkxBR1NfVkFMSURfTUFTSyAJCSgxIDw8IDMxKQotI2RlZmluZSBDUUVfRkxBR1NfQVNZTkNfTUFTSyAJCSgxIDw8IDMwKQotI2RlZmluZSBDUUVfRkxBR1NfQ09NUExFVEVEX01BU0sgCSgxIDw8IDI4KQotI2RlZmluZSBDUUVfRkxBR1NfQ09OU1VNRURfTUFTSyAJKDEgPDwgMjcpCisjZGVmaW5lIENRRV9GTEFHU19WQUxJRF9NQVNLCQlCSVQoMzEpCisjZGVmaW5lIENRRV9GTEFHU19BU1lOQ19NQVNLCQlCSVQoMzApCisjZGVmaW5lIENRRV9GTEFHU19DT01QTEVURURfTUFTSwlCSVQoMjgpCisjZGVmaW5lIENRRV9GTEFHU19DT05TVU1FRF9NQVNLCQlCSVQoMjcpCiAKIC8qIENvbXBsZXRpb24gU3RhdHVzICovCiBlbnVtIG1jY19iYXNlX3N0YXR1cyB7CkBAIC0xMDIsNiArMTAyLDggQEAKICNkZWZpbmUgQVNZTkNfRVZFTlRfUFZJRF9TVEFURQkJMHgzCiAjZGVmaW5lIEFTWU5DX0VWRU5UX0NPREVfUU5RCQkweDYKICNkZWZpbmUgQVNZTkNfREVCVUdfRVZFTlRfVFlQRV9RTlEJMQorI2RlZmluZSBBU1lOQ19FVkVOVF9DT0RFX1NMSVBPUlQJMHgxMQorI2RlZmluZSBBU1lOQ19FVkVOVF9QT1JUX01JU0NPTkZJRwkweDkKIAogZW51bSB7CiAJTElOS19ET1dOCT0gMHgwLApAQCAtMTY5LDYgKzE3MSwxNSBAQAogCXUzMiBmbGFnczsKIH0gX19wYWNrZWQ7CiAKKyNkZWZpbmUgSU5DT01QQVRJQkxFX1NGUAkJMHgzCisvKiBhc3luYyBldmVudCBpbmRpY2F0aW5nIG1pc2NvbmZpZ3VyZWQgcG9ydCAqLworc3RydWN0IGJlX2FzeW5jX2V2ZW50X21pc2NvbmZpZ19wb3J0IHsKKwl1MzIgZXZlbnRfZGF0YV93b3JkMTsKKwl1MzIgZXZlbnRfZGF0YV93b3JkMjsKKwl1MzIgcnN2ZDA7CisJdTMyIGZsYWdzOworfSBfX3BhY2tlZDsKKwogc3RydWN0IGJlX21jY19tYWlsYm94IHsKIAlzdHJ1Y3QgYmVfbWNjX3dyYiB3cmI7CiAJc3RydWN0IGJlX21jY19jb21wbCBjb21wbDsKQEAgLTU4Niw2ICs1OTcsMTAgQEAKIAkJCSBCRV9JRl9GTEFHU19QQVNTX0wzTDRfRVJST1JTIHwgQkVfSUZfRkxBR1NfTVVMVElDQVNUIHxcCiAJCQkgQkVfSUZfRkxBR1NfVU5UQUdHRUQpCiAKKyNkZWZpbmUgQkVfSUZfRkxBR1NfQUxMX1BST01JU0NVT1VTCShCRV9JRl9GTEFHU19QUk9NSVNDVU9VUyB8IFwKKwkJCQkJIEJFX0lGX0ZMQUdTX1ZMQU5fUFJPTUlTQ1VPVVMgfFwKKwkJCQkJIEJFX0lGX0ZMQUdTX01DQVNUX1BST01JU0NVT1VTKQorCiAvKiBBbiBSWCBpbnRlcmZhY2UgaXMgYW4gb2JqZWN0IHdpdGggb25lIG9yIG1vcmUgTUFDIGFkZHJlc3NlcyBhbmQKICAqIGZpbHRlcmluZyBjYXBhYmlsaXRpZXMuICovCiBzdHJ1Y3QgYmVfY21kX3JlcV9pZl9jcmVhdGUgewpAQCAtMTAyNCw2ICsxMDM5LDggQEAKICNkZWZpbmUJU0ZQX1BMVVNfU0ZGXzg0NzJfQ09NUAkJMHg1RQogI2RlZmluZQlTRlBfUExVU19DQUJMRV9UWVBFX09GRlNFVAkweDgKICNkZWZpbmUJU0ZQX1BMVVNfQ09QUEVSX0NBQkxFCQkweDQKKyNkZWZpbmUgU0ZQX1ZFTkRPUl9OQU1FX09GRlNFVAkJMHgxNAorI2RlZmluZSBTRlBfVkVORE9SX1BOX09GRlNFVAkJMHgyOAogCiAjZGVmaW5lIFBBR0VfREFUQV9MRU4gICAyNTYKIHN0cnVjdCBiZV9jbWRfcmVzcF9wb3J0X3R5cGUgewpAQCAtMTA5MSw2ICsxMTA4LDEwIEBACiAJdTMyIHJzdmRbMzFdOwogfTsKIAorLyogQVNJQyByZXZpc2lvbnMgKi8KKyNkZWZpbmUgQVNJQ19SRVZfQjAJCTB4MTAKKyNkZWZpbmUgQVNJQ19SRVZfUDIJCTB4MTEKKwogc3RydWN0IGJlX2NtZF9yZXNwX3F1ZXJ5X2Z3X2NmZyB7CiAJc3RydWN0IGJlX2NtZF9yZXNwX2hkciBoZHI7CiAJdTMyIGJlX2NvbmZpZ19udW1iZXI7CkBAIC0xMTYxLDcgKzExODIsMTczIEBACiAJdTggcnN2ZDBbM107CiB9IF9fcGFja2VkOwogCisvKiBGbGFzaHJvbSByZWxhdGVkIGRlc2NyaXB0b3JzICovCisjZGVmaW5lIE1BWF9GTEFTSF9DT01QCQkJMzIKKworI2RlZmluZSBPUFRZUEVfSVNDU0lfQUNUSVZFCQkwCisjZGVmaW5lIE9QVFlQRV9SRURCT09UCQkJMQorI2RlZmluZSBPUFRZUEVfQklPUwkJCTIKKyNkZWZpbmUgT1BUWVBFX1BYRV9CSU9TCQkJMworI2RlZmluZSBPUFRZUEVfT0ZGU0VUX1NQRUNJRklFRAkJNworI2RlZmluZSBPUFRZUEVfRkNPRV9CSU9TCQk4CisjZGVmaW5lIE9QVFlQRV9JU0NTSV9CQUNLVVAJCTkKKyNkZWZpbmUgT1BUWVBFX0ZDT0VfRldfQUNUSVZFCQkxMAorI2RlZmluZSBPUFRZUEVfRkNPRV9GV19CQUNLVVAJCTExCisjZGVmaW5lIE9QVFlQRV9OQ1NJX0ZXCQkJMTMKKyNkZWZpbmUgT1BUWVBFX1JFREJPT1RfRElSCQkxOAorI2RlZmluZSBPUFRZUEVfUkVEQk9PVF9DT05GSUcJCTE5CisjZGVmaW5lIE9QVFlQRV9TSF9QSFlfRlcJCTIxCisjZGVmaW5lIE9QVFlQRV9GTEFTSElTTV9KVU1QVkVDVE9SCTIyCisjZGVmaW5lIE9QVFlQRV9VRklfRElSCQkJMjMKKyNkZWZpbmUgT1BUWVBFX1BIWV9GVwkJCTk5CisKKyNkZWZpbmUgRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRV9nMgkyNjIxNDQgIC8qIE1heCBPUFRJT04gUk9NIGltYWdlIHN6ICovCisjZGVmaW5lIEZMQVNIX1JFREJPT1RfSU1BR0VfTUFYX1NJWkVfZzIJMjYyMTQ0ICAvKiBNYXggUmVkYm9vdCBpbWFnZSBzeiAgICAqLworI2RlZmluZSBGTEFTSF9JTUFHRV9NQVhfU0laRV9nMgkJMTMxMDcyMCAvKiBNYXggZmlybXdhcmUgaW1hZ2Ugc2l6ZSAqLworCisjZGVmaW5lIEZMQVNIX05DU0lfSU1BR0VfTUFYX1NJWkVfZzMJMjYyMTQ0CisjZGVmaW5lIEZMQVNIX1BIWV9GV19JTUFHRV9NQVhfU0laRV9nMwkyNjIxNDQKKyNkZWZpbmUgRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRV9nMwk1MjQyODggIC8qIE1heCBPUFRJT04gUk9NIGltYWdlIHN6ICovCisjZGVmaW5lIEZMQVNIX1JFREJPT1RfSU1BR0VfTUFYX1NJWkVfZzMJMTA0ODU3NiAvKiBNYXggUmVkYm9vdCBpbWFnZSBzeiAgICAqLworI2RlZmluZSBGTEFTSF9JTUFHRV9NQVhfU0laRV9nMwkJMjA5NzE1MiAvKiBNYXggZmlybXdhcmUgaW1hZ2Ugc2l6ZSAqLworCisvKiBPZmZzZXRzIGZvciBjb21wb25lbnRzIG9uIEZsYXNoLiAqLworI2RlZmluZSBGTEFTSF9SRURCT09UX1NUQVJUX2cyCQkJMAorI2RlZmluZSBGTEFTSF9GQ29FX0JJT1NfU1RBUlRfZzIJCTUyNDI4OAorI2RlZmluZSBGTEFTSF9pU0NTSV9QUklNQVJZX0lNQUdFX1NUQVJUX2cyCTEwNDg1NzYKKyNkZWZpbmUgRkxBU0hfaVNDU0lfQkFDS1VQX0lNQUdFX1NUQVJUX2cyCTIzNTkyOTYKKyNkZWZpbmUgRkxBU0hfRkNvRV9QUklNQVJZX0lNQUdFX1NUQVJUX2cyCTM2NzAwMTYKKyNkZWZpbmUgRkxBU0hfRkNvRV9CQUNLVVBfSU1BR0VfU1RBUlRfZzIJNDk4MDczNgorI2RlZmluZSBGTEFTSF9pU0NTSV9CSU9TX1NUQVJUX2cyCQk3MzQwMDMyCisjZGVmaW5lIEZMQVNIX1BYRV9CSU9TX1NUQVJUX2cyCQkJNzg2NDMyMAorCisjZGVmaW5lIEZMQVNIX1JFREJPT1RfU1RBUlRfZzMJCQkyNjIxNDQKKyNkZWZpbmUgRkxBU0hfUEhZX0ZXX1NUQVJUX2czCQkJMTMxMDcyMAorI2RlZmluZSBGTEFTSF9pU0NTSV9QUklNQVJZX0lNQUdFX1NUQVJUX2czCTIwOTcxNTIKKyNkZWZpbmUgRkxBU0hfaVNDU0lfQkFDS1VQX0lNQUdFX1NUQVJUX2czCTQxOTQzMDQKKyNkZWZpbmUgRkxBU0hfRkNvRV9QUklNQVJZX0lNQUdFX1NUQVJUX2czCTYyOTE0NTYKKyNkZWZpbmUgRkxBU0hfRkNvRV9CQUNLVVBfSU1BR0VfU1RBUlRfZzMJODM4ODYwOAorI2RlZmluZSBGTEFTSF9pU0NTSV9CSU9TX1NUQVJUX2czCQkxMjU4MjkxMgorI2RlZmluZSBGTEFTSF9QWEVfQklPU19TVEFSVF9nMwkJCTEzMTA3MjAwCisjZGVmaW5lIEZMQVNIX0ZDb0VfQklPU19TVEFSVF9nMwkJMTM2MzE0ODgKKyNkZWZpbmUgRkxBU0hfTkNTSV9TVEFSVF9nMwkJCTE1OTkwNzg0CisKKyNkZWZpbmUgSU1BR0VfTkNTSQkJCTE2CisjZGVmaW5lIElNQUdFX09QVElPTl9ST01fUFhFCQkzMgorI2RlZmluZSBJTUFHRV9PUFRJT05fUk9NX0ZDb0UJCTMzCisjZGVmaW5lIElNQUdFX09QVElPTl9ST01fSVNDU0kJCTM0CisjZGVmaW5lIElNQUdFX0ZMQVNISVNNX0pVTVBWRUNUT1IJNDgKKyNkZWZpbmUgSU1BR0VfRklSTVdBUkVfaVNDU0kJCTE2MAorI2RlZmluZSBJTUFHRV9GSVJNV0FSRV9GQ29FCQkxNjIKKyNkZWZpbmUgSU1BR0VfRklSTVdBUkVfQkFDS1VQX2lTQ1NJCTE3NgorI2RlZmluZSBJTUFHRV9GSVJNV0FSRV9CQUNLVVBfRkNvRQkxNzgKKyNkZWZpbmUgSU1BR0VfRklSTVdBUkVfUEhZCQkxOTIKKyNkZWZpbmUgSU1BR0VfUkVEQk9PVF9ESVIJCTIwOAorI2RlZmluZSBJTUFHRV9SRURCT09UX0NPTkZJRwkJMjA5CisjZGVmaW5lIElNQUdFX1VGSV9ESVIJCQkyMTAKKyNkZWZpbmUgSU1BR0VfQk9PVF9DT0RFCQkJMjI0CisKK3N0cnVjdCBjb250cm9sbGVyX2lkIHsKKwl1MzIgdmVuZG9yOworCXUzMiBkZXZpY2U7CisJdTMyIHN1YnZlbmRvcjsKKwl1MzIgc3ViZGV2aWNlOworfTsKKworc3RydWN0IGZsYXNoX2NvbXAgeworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCWludCBvcHR5cGU7CisJaW50IHNpemU7CisJaW50IGltZ190eXBlOworfTsKKworc3RydWN0IGltYWdlX2hkciB7CisJdTMyIGltYWdlaWQ7CisJdTMyIGltYWdlb2Zmc2V0OworCXUzMiBpbWFnZWxlbmd0aDsKKwl1MzIgaW1hZ2VfY2hlY2tzdW07CisJdTggaW1hZ2VfdmVyc2lvblszMl07Cit9OworCitzdHJ1Y3QgZmxhc2hfZmlsZV9oZHJfZzIgeworCXU4IHNpZ25bMzJdOworCXUzMiBja3N1bTsKKwl1MzIgYW50aWRvdGU7CisJc3RydWN0IGNvbnRyb2xsZXJfaWQgY29udF9pZDsKKwl1MzIgZmlsZV9sZW47CisJdTMyIGNodW5rX251bTsKKwl1MzIgdG90YWxfY2h1bmtzOworCXUzMiBudW1faW1nczsKKwl1OCBidWlsZFsyNF07Cit9OworCisvKiBGaXJzdCBsZXR0ZXIgb2YgdGhlIGJ1aWxkIHZlcnNpb24gb2YgdGhlIGltYWdlICovCisjZGVmaW5lIEJMRF9TVFJfVUZJX1RZUEVfQkUyCScyJworI2RlZmluZSBCTERfU1RSX1VGSV9UWVBFX0JFMwknMycKKyNkZWZpbmUgQkxEX1NUUl9VRklfVFlQRV9TSAknNCcKKworc3RydWN0IGZsYXNoX2ZpbGVfaGRyX2czIHsKKwl1OCBzaWduWzUyXTsKKwl1OCB1ZmlfdmVyc2lvbls0XTsKKwl1MzIgZmlsZV9sZW47CisJdTMyIGNrc3VtOworCXUzMiBhbnRpZG90ZTsKKwl1MzIgbnVtX2ltZ3M7CisJdTggYnVpbGRbMjRdOworCXU4IGFzaWNfdHlwZV9yZXY7CisJdTggcnN2ZFszMV07Cit9OworCitzdHJ1Y3QgZmxhc2hfc2VjdGlvbl9oZHIgeworCXUzMiBmb3JtYXRfcmV2OworCXUzMiBja3N1bTsKKwl1MzIgYW50aWRvdGU7CisJdTMyIG51bV9pbWFnZXM7CisJdTggaWRfc3RyaW5nWzEyOF07CisJdTMyIHJzdmRbNF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgZmxhc2hfc2VjdGlvbl9oZHJfZzIgeworCXUzMiBmb3JtYXRfcmV2OworCXUzMiBja3N1bTsKKwl1MzIgYW50aWRvdGU7CisJdTMyIGJ1aWxkX251bTsKKwl1OCBpZF9zdHJpbmdbMTI4XTsKKwl1MzIgcnN2ZFs4XTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBmbGFzaF9zZWN0aW9uX2VudHJ5IHsKKwl1MzIgdHlwZTsKKwl1MzIgb2Zmc2V0OworCXUzMiBwYWRfc2l6ZTsKKwl1MzIgaW1hZ2Vfc2l6ZTsKKwl1MzIgY2tzdW07CisJdTMyIGVudHJ5X3BvaW50OworCXUxNiBvcHR5cGU7CisJdTE2IHJzdmQwOworCXUzMiByc3ZkMTsKKwl1OCB2ZXJfZGF0YVszMl07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgZmxhc2hfc2VjdGlvbl9pbmZvIHsKKwl1OCBjb29raWVbMzJdOworCXN0cnVjdCBmbGFzaF9zZWN0aW9uX2hkciBmc2VjX2hkcjsKKwlzdHJ1Y3QgZmxhc2hfc2VjdGlvbl9lbnRyeSBmc2VjX2VudHJ5WzMyXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBmbGFzaF9zZWN0aW9uX2luZm9fZzIgeworCXU4IGNvb2tpZVszMl07CisJc3RydWN0IGZsYXNoX3NlY3Rpb25faGRyX2cyIGZzZWNfaGRyOworCXN0cnVjdCBmbGFzaF9zZWN0aW9uX2VudHJ5IGZzZWNfZW50cnlbMzJdOworfSBfX3BhY2tlZDsKKwogLyoqKioqKioqKioqKioqKioqKiBGaXJtd2FyZSBGbGFzaCAqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEZMQVNIUk9NX09QRVJfRkxBU0gJCTEKKyNkZWZpbmUgRkxBU0hST01fT1BFUl9TQVZFCQkyCisjZGVmaW5lIEZMQVNIUk9NX09QRVJfUkVQT1JUCQk0CisjZGVmaW5lIEZMQVNIUk9NX09QRVJfUEhZX0ZMQVNICQk5CisjZGVmaW5lIEZMQVNIUk9NX09QRVJfUEhZX1NBVkUJCTEwCisKIHN0cnVjdCBmbGFzaHJvbV9wYXJhbXMgewogCXUzMiBvcF9jb2RlOwogCXUzMiBvcF90eXBlOwpAQCAtMTM2Niw2ICsxNTUzLDcgQEAKIAlQSFlfVFlQRV9RU0ZQLAogCVBIWV9UWVBFX0tSNF80MEdCLAogCVBIWV9UWVBFX0tSMl8yMEdCLAorCVBIWV9UWVBFX1ROXzgwMjIsCiAJUEhZX1RZUEVfRElTQUJMRUQgPSAyNTUKIH07CiAKQEAgLTE0MjksNiArMTYxNywyMCBAQAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqIENvbnRyb2xsZXIgQXR0cmlidXRlcyAqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0cnVjdCBtZ210X2hiYV9hdHRyaWJzIHsKKwl1MzIgcnN2ZDBbMjRdOworCXU4IGNvbnRyb2xsZXJfbW9kZWxfbnVtYmVyWzMyXTsKKwl1MzIgcnN2ZDFbNzldOworCXU4IHJzdmQyWzNdOworCXU4IHBoeV9wb3J0OworCXUzMiByc3ZkM1sxM107Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWdtdF9jb250cm9sbGVyX2F0dHJpYiB7CisJc3RydWN0IG1nbXRfaGJhX2F0dHJpYnMgaGJhX2F0dHJpYnM7CisJdTMyIHJzdmQwWzEwXTsKK30gX19wYWNrZWQ7CisKIHN0cnVjdCBiZV9jbWRfcmVxX2NudGxfYXR0cmlicyB7CiAJc3RydWN0IGJlX2NtZF9yZXFfaGRyIGhkcjsKIH07CkBAIC0yMDcwLDggKzIyNzIsMTAgQEAKIGludCBiZV9jbWRfcmVhZF9wb3J0X3RyYW5zY2VpdmVyX2RhdGEoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkJICAgICAgdTggcGFnZV9udW0sIHU4ICpkYXRhKTsKIGludCBiZV9jbWRfcXVlcnlfY2FibGVfdHlwZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgYmVfY21kX3F1ZXJ5X3NmcF9pbmZvKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKIGludCBiZV9jbWRfd3JpdGVfZmxhc2hyb20oc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV9kbWFfbWVtICpjbWQsCi0JCQkgIHUzMiBmbGFzaF9vcGVyLCB1MzIgZmxhc2hfb3Bjb2RlLCB1MzIgYnVmX3NpemUpOworCQkJICB1MzIgZmxhc2hfb3BlciwgdTMyIGZsYXNoX29wY29kZSwgdTMyIGltZ19vZmZzZXQsCisJCQkgIHUzMiBidWZfc2l6ZSk7CiBpbnQgbGFuY2VyX2NtZF93cml0ZV9vYmplY3Qoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV9kbWFfbWVtICpjbWQsCiAJCQkgICAgdTMyIGRhdGFfc2l6ZSwgdTMyIGRhdGFfb2Zmc2V0LAogCQkJICAgIGNvbnN0IGNoYXIgKm9ial9uYW1lLCB1MzIgKmRhdGFfd3JpdHRlbiwKQEAgLTIwODEsNyArMjI4NSw3IEBACiAJCQkgICB1MzIgKmRhdGFfcmVhZCwgdTMyICplb2YsIHU4ICphZGRuX3N0YXR1cyk7CiBpbnQgbGFuY2VyX2NtZF9kZWxldGVfb2JqZWN0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBjb25zdCBjaGFyICpvYmpfbmFtZSk7CiBpbnQgYmVfY21kX2dldF9mbGFzaF9jcmMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpmbGFzaGVkX2NyYywKLQkJCSAgdTE2IG9wdHlwZSwgaW50IG9mZnNldCk7CisJCQkgdTE2IGltZ19vcHR5cGUsIHUzMiBpbWdfb2Zmc2V0LCB1MzIgY3JjX29mZnNldCk7CiBpbnQgYmVfY21kX2VuYWJsZV9tYWdpY193b2woc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICptYWMsCiAJCQkgICAgc3RydWN0IGJlX2RtYV9tZW0gKm5vbmVtYl9jbWQpOwogaW50IGJlX2NtZF9md19pbml0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKQEAgLTIxMzYsNyArMjM0MCw3IEBACiBpbnQgbGFuY2VyX2RlbGV0ZV9kdW1wKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKIGJvb2wgZHVtcF9wcmVzZW50KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKIGludCBsYW5jZXJfdGVzdF9hbmRfc2V0X3JkeV9zdGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7Ci1pbnQgYmVfY21kX3F1ZXJ5X3BvcnRfbmFtZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKnBvcnRfbmFtZSk7CitpbnQgYmVfY21kX3F1ZXJ5X3BvcnRfbmFtZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CiBpbnQgYmVfY21kX2dldF9mdW5jX2NvbmZpZyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgIHN0cnVjdCBiZV9yZXNvdXJjZXMgKnJlcyk7CiBpbnQgYmVfY21kX2dldF9wcm9maWxlX2NvbmZpZyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfZXRodG9vbC5jCmluZGV4IDczYTUwMGMuLjRkMmRlNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX2V0aHRvb2wuYwpAQCAtMTkzLDggKzE5Myw2IEBACiAJe0RSVlNUQVRfVFhfSU5GTyh0eF9wa3RzKX0sCiAJLyogTnVtYmVyIG9mIHNrYnMgcXVldWVkIGZvciB0cmFzbWlzc2lvbiBieSB0aGUgZHJpdmVyICovCiAJe0RSVlNUQVRfVFhfSU5GTyh0eF9yZXFzKX0sCi0JLyogTnVtYmVyIG9mIFRYIHdvcmsgcmVxdWVzdCBibG9ja3MgRE1BZWQgdG8gSFcgKi8KLQl7RFJWU1RBVF9UWF9JTkZPKHR4X3dyYnMpfSwKIAkvKiBOdW1iZXIgb2YgdGltZXMgdGhlIFRYIHF1ZXVlIHdhcyBzdG9wcGVkIGR1ZSB0byBsYWNrCiAJICogb2Ygc3BhY2VzIGluIHRoZSBUWFEuCiAJICovCkBAIC03MDcsMTUgKzcwNSwxNyBAQAogCiAJaWYgKGVjbWQtPmF1dG9uZWcgIT0gYWRhcHRlci0+cGh5LmZjX2F1dG9uZWcpCiAJCXJldHVybiAtRUlOVkFMOworCisJc3RhdHVzID0gYmVfY21kX3NldF9mbG93X2NvbnRyb2woYWRhcHRlciwgZWNtZC0+dHhfcGF1c2UsCisJCQkJCSBlY21kLT5yeF9wYXVzZSk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LCAiUGF1c2UgcGFyYW0gc2V0IGZhaWxlZFxuIik7CisJCXJldHVybiBiZV9jbWRfc3RhdHVzKHN0YXR1cyk7CisJfQorCiAJYWRhcHRlci0+dHhfZmMgPSBlY21kLT50eF9wYXVzZTsKIAlhZGFwdGVyLT5yeF9mYyA9IGVjbWQtPnJ4X3BhdXNlOwotCi0Jc3RhdHVzID0gYmVfY21kX3NldF9mbG93X2NvbnRyb2woYWRhcHRlciwKLQkJCQkJIGFkYXB0ZXItPnR4X2ZjLCBhZGFwdGVyLT5yeF9mYyk7Ci0JaWYgKHN0YXR1cykKLQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwgIlBhdXNlIHBhcmFtIHNldCBmYWlsZWRcbiIpOwotCi0JcmV0dXJuIGJlX2NtZF9zdGF0dXMoc3RhdHVzKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBiZV9zZXRfcGh5c19pZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX2h3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfaHcuaAppbmRleCAyOTVlZTA4Li40ODg0MDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfaHcuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfaHcuaApAQCAtNzUsNyArNzUsNyBAQAogICogYXRvbWljYWxseSB3aXRob3V0IGhhdmluZyB0byBhcmJpdHJhdGUgZm9yIHRoZSBQQ0kgSW50ZXJydXB0IERpc2FibGUgYml0CiAgKiB3aXRoIHRoZSBPUy4KICAqLwotI2RlZmluZSBNRU1CQVJfQ1RSTF9JTlRfQ1RSTF9IT1NUSU5UUl9NQVNLCSgxIDw8IDI5KSAvKiBiaXQgMjkgKi8KKyNkZWZpbmUgTUVNQkFSX0NUUkxfSU5UX0NUUkxfSE9TVElOVFJfTUFTSwlCSVQoMjkpIC8qIGJpdCAyOSAqLwogCiAvKioqKioqKioqIFBDSSBGdW5jdGlvbiBDYXBhYmlsaXR5ICoqKioqKioqKi8KICNkZWZpbmUgQkVfRlVOQ1RJT05fQ0FQU19SU1MJCQkweDIKQEAgLTE3MSw5NCArMTcxLDYgQEAKICNkZWZpbmUgUkVUUklFVkVfRkFUCTAKICNkZWZpbmUgUVVFUllfRkFUCTEKIAotLyogRmxhc2hyb20gcmVsYXRlZCBkZXNjcmlwdG9ycyAqLwotI2RlZmluZSBNQVhfRkxBU0hfQ09NUAkJCTMyCi0jZGVmaW5lIElNQUdFX1RZUEVfRklSTVdBUkUJCTE2MAotI2RlZmluZSBJTUFHRV9UWVBFX0JPT1RDT0RFCQkyMjQKLSNkZWZpbmUgSU1BR0VfVFlQRV9PUFRJT05ST00JCTMyCi0KLSNkZWZpbmUgTlVNX0ZMQVNIRElSX0VOVFJJRVMJCTMyCi0KLSNkZWZpbmUgT1BUWVBFX0lTQ1NJX0FDVElWRQkJMAotI2RlZmluZSBPUFRZUEVfUkVEQk9PVAkJCTEKLSNkZWZpbmUgT1BUWVBFX0JJT1MJCQkyCi0jZGVmaW5lIE9QVFlQRV9QWEVfQklPUwkJCTMKLSNkZWZpbmUgT1BUWVBFX0ZDT0VfQklPUwkJOAotI2RlZmluZSBPUFRZUEVfSVNDU0lfQkFDS1VQCQk5Ci0jZGVmaW5lIE9QVFlQRV9GQ09FX0ZXX0FDVElWRQkJMTAKLSNkZWZpbmUgT1BUWVBFX0ZDT0VfRldfQkFDS1VQCQkxMQotI2RlZmluZSBPUFRZUEVfTkNTSV9GVwkJCTEzCi0jZGVmaW5lIE9QVFlQRV9SRURCT09UX0RJUgkJMTgKLSNkZWZpbmUgT1BUWVBFX1JFREJPT1RfQ09ORklHCQkxOQotI2RlZmluZSBPUFRZUEVfU0hfUEhZX0ZXCQkyMQotI2RlZmluZSBPUFRZUEVfRkxBU0hJU01fSlVNUFZFQ1RPUgkyMgotI2RlZmluZSBPUFRZUEVfVUZJX0RJUgkJCTIzCi0jZGVmaW5lIE9QVFlQRV9QSFlfRlcJCQk5OQotI2RlZmluZSBUTl84MDIyCQkJCTEzCi0KLSNkZWZpbmUgRkxBU0hST01fT1BFUl9QSFlfRkxBU0gJCTkKLSNkZWZpbmUgRkxBU0hST01fT1BFUl9QSFlfU0FWRQkJMTAKLSNkZWZpbmUgRkxBU0hST01fT1BFUl9GTEFTSAkJMQotI2RlZmluZSBGTEFTSFJPTV9PUEVSX1NBVkUJCTIKLSNkZWZpbmUgRkxBU0hST01fT1BFUl9SRVBPUlQJCTQKLQotI2RlZmluZSBGTEFTSF9JTUFHRV9NQVhfU0laRV9nMgkJKDEzMTA3MjApIC8qIE1heCBmaXJtd2FyZSBpbWFnZSBzaXplICovCi0jZGVmaW5lIEZMQVNIX0JJT1NfSU1BR0VfTUFYX1NJWkVfZzIJKDI2MjE0NCkgIC8qIE1heCBPUFRJT04gUk9NIGltYWdlIHN6ICovCi0jZGVmaW5lIEZMQVNIX1JFREJPT1RfSU1BR0VfTUFYX1NJWkVfZzIJKDI2MjE0NCkgIC8qIE1heCBSZWRib290IGltYWdlIHN6ICAgICovCi0jZGVmaW5lIEZMQVNIX0lNQUdFX01BWF9TSVpFX2czCQkoMjA5NzE1MikgLyogTWF4IGZpcm13YXJlIGltYWdlIHNpemUgKi8KLSNkZWZpbmUgRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRV9nMwkoNTI0Mjg4KSAgLyogTWF4IE9QVElPTiBST00gaW1hZ2Ugc3ogKi8KLSNkZWZpbmUgRkxBU0hfUkVEQk9PVF9JTUFHRV9NQVhfU0laRV9nMwkoMTA0ODU3NikgIC8qIE1heCBSZWRib290IGltYWdlIHN6ICAgICovCi0jZGVmaW5lIEZMQVNIX05DU0lfSU1BR0VfTUFYX1NJWkVfZzMJKDI2MjE0NCkKLSNkZWZpbmUgRkxBU0hfUEhZX0ZXX0lNQUdFX01BWF9TSVpFX2czCTI2MjE0NAotCi0jZGVmaW5lIEZMQVNIX05DU0lfTUFHSUMJCSgweDE2MDMyMDA5KQotI2RlZmluZSBGTEFTSF9OQ1NJX0RJU0FCTEVECQkoMCkKLSNkZWZpbmUgRkxBU0hfTkNTSV9FTkFCTEVECQkoMSkKLQotI2RlZmluZSBGTEFTSF9OQ1NJX0JJVEZJTEVfSERSX09GRlNFVAkoMHg2MDAwMDApCi0KLS8qIE9mZnNldHMgZm9yIGNvbXBvbmVudHMgb24gRmxhc2guICovCi0jZGVmaW5lIEZMQVNIX2lTQ1NJX1BSSU1BUllfSU1BR0VfU1RBUlRfZzIgKDEwNDg1NzYpCi0jZGVmaW5lIEZMQVNIX2lTQ1NJX0JBQ0tVUF9JTUFHRV9TVEFSVF9nMiAgKDIzNTkyOTYpCi0jZGVmaW5lIEZMQVNIX0ZDb0VfUFJJTUFSWV9JTUFHRV9TVEFSVF9nMiAgKDM2NzAwMTYpCi0jZGVmaW5lIEZMQVNIX0ZDb0VfQkFDS1VQX0lNQUdFX1NUQVJUX2cyICAgKDQ5ODA3MzYpCi0jZGVmaW5lIEZMQVNIX2lTQ1NJX0JJT1NfU1RBUlRfZzIgICAgICAgICAgKDczNDAwMzIpCi0jZGVmaW5lIEZMQVNIX1BYRV9CSU9TX1NUQVJUX2cyICAgICAgICAgICAgKDc4NjQzMjApCi0jZGVmaW5lIEZMQVNIX0ZDb0VfQklPU19TVEFSVF9nMiAgICAgICAgICAgKDUyNDI4OCkKLSNkZWZpbmUgRkxBU0hfUkVEQk9PVF9TVEFSVF9nMgkJICAoMCkKLQotI2RlZmluZSBGTEFTSF9OQ1NJX1NUQVJUX2czCQkgICAoMTU5OTA3ODQpCi0jZGVmaW5lIEZMQVNIX2lTQ1NJX1BSSU1BUllfSU1BR0VfU1RBUlRfZzMgKDIwOTcxNTIpCi0jZGVmaW5lIEZMQVNIX2lTQ1NJX0JBQ0tVUF9JTUFHRV9TVEFSVF9nMyAgKDQxOTQzMDQpCi0jZGVmaW5lIEZMQVNIX0ZDb0VfUFJJTUFSWV9JTUFHRV9TVEFSVF9nMyAgKDYyOTE0NTYpCi0jZGVmaW5lIEZMQVNIX0ZDb0VfQkFDS1VQX0lNQUdFX1NUQVJUX2czICAgKDgzODg2MDgpCi0jZGVmaW5lIEZMQVNIX2lTQ1NJX0JJT1NfU1RBUlRfZzMgICAgICAgICAgKDEyNTgyOTEyKQotI2RlZmluZSBGTEFTSF9QWEVfQklPU19TVEFSVF9nMyAgICAgICAgICAgICgxMzEwNzIwMCkKLSNkZWZpbmUgRkxBU0hfRkNvRV9CSU9TX1NUQVJUX2czICAgICAgICAgICAoMTM2MzE0ODgpCi0jZGVmaW5lIEZMQVNIX1JFREJPT1RfU1RBUlRfZzMgICAgICAgICAgICAgKDI2MjE0NCkKLSNkZWZpbmUgRkxBU0hfUEhZX0ZXX1NUQVJUX2czCQkgICAxMzEwNzIwCi0KLSNkZWZpbmUgSU1BR0VfTkNTSQkJCTE2Ci0jZGVmaW5lIElNQUdFX09QVElPTl9ST01fUFhFCQkzMgotI2RlZmluZSBJTUFHRV9PUFRJT05fUk9NX0ZDb0UJCTMzCi0jZGVmaW5lIElNQUdFX09QVElPTl9ST01fSVNDU0kJCTM0Ci0jZGVmaW5lIElNQUdFX0ZMQVNISVNNX0pVTVBWRUNUT1IJNDgKLSNkZWZpbmUgSU1BR0VfRkxBU0hfSVNNCQkJNDkKLSNkZWZpbmUgSU1BR0VfSlVNUF9WRUNUT1IJCTUwCi0jZGVmaW5lIElNQUdFX0ZJUk1XQVJFX2lTQ1NJCQkxNjAKLSNkZWZpbmUgSU1BR0VfRklSTVdBUkVfQ09NUF9pU0NTSQkxNjEKLSNkZWZpbmUgSU1BR0VfRklSTVdBUkVfRkNvRQkJMTYyCi0jZGVmaW5lIElNQUdFX0ZJUk1XQVJFX0NPTVBfRkNvRQkxNjMKLSNkZWZpbmUgSU1BR0VfRklSTVdBUkVfQkFDS1VQX2lTQ1NJCTE3NgotI2RlZmluZSBJTUFHRV9GSVJNV0FSRV9CQUNLVVBfQ09NUF9pU0NTSSAxNzcKLSNkZWZpbmUgSU1BR0VfRklSTVdBUkVfQkFDS1VQX0ZDb0UJMTc4Ci0jZGVmaW5lIElNQUdFX0ZJUk1XQVJFX0JBQ0tVUF9DT01QX0ZDb0UgMTc5Ci0jZGVmaW5lIElNQUdFX0ZJUk1XQVJFX1BIWQkJMTkyCi0jZGVmaW5lIElNQUdFX1JFREJPT1RfRElSCQkyMDgKLSNkZWZpbmUgSU1BR0VfUkVEQk9PVF9DT05GSUcJCTIwOQotI2RlZmluZSBJTUFHRV9VRklfRElSCQkJMjEwCi0jZGVmaW5lIElNQUdFX0JPT1RfQ09ERQkJCTIyNAotCiAvKioqKioqKioqKioqKiBSeCBQYWNrZXQgVHlwZSBFbmNvZGluZyAqKioqKioqKioqKioqKi8KICNkZWZpbmUgQkVfVU5JQ0FTVF9QQUNLRVQJCTAKICNkZWZpbmUgQkVfTVVMVElDQVNUX1BBQ0tFVAkJMQpAQCAtMjgxLDEwICsxOTMsMTAgQEAKIC8qIFRYIFF1ZXVlIERlc2NyaXB0b3IgKi8KICNkZWZpbmUgRVRIX1dSQl9GUkFHX0xFTl9NQVNLCQkweEZGRkYKIHN0cnVjdCBiZV9ldGhfd3JiIHsKLQl1MzIgZnJhZ19wYV9oaTsJCS8qIGR3b3JkIDAgKi8KLQl1MzIgZnJhZ19wYV9sbzsJCS8qIGR3b3JkIDEgKi8KLQl1MzIgcnN2ZDA7CQkvKiBkd29yZCAyICovCi0JdTMyIGZyYWdfbGVuOwkJLyogZHdvcmQgMzogYml0cyAwIC0gMTUgKi8KKwlfX2xlMzIgZnJhZ19wYV9oaTsJCS8qIGR3b3JkIDAgKi8KKwlfX2xlMzIgZnJhZ19wYV9sbzsJCS8qIGR3b3JkIDEgKi8KKwl1MzIgcnN2ZDA7CQkJLyogZHdvcmQgMiAqLworCV9fbGUzMiBmcmFnX2xlbjsJCS8qIGR3b3JkIDM6IGJpdHMgMCAtIDE1ICovCiB9IF9fcGFja2VkOwogCiAvKiBQc2V1ZG8gYW1hcCBkZWZpbml0aW9uIGZvciBldGhfaGRyX3dyYiBpbiB3aGljaCBlYWNoIGJpdCBvZiB0aGUKQEAgLTMxMSw4ICsyMjMsMTMgQEAKIAl1OCB2bGFuX3RhZ1sxNl07CiB9IF9fcGFja2VkOwogCisjZGVmaW5lIFRYX0hEUl9XUkJfQ09NUEwJCTEJCS8qIHdvcmQgMiAqLworI2RlZmluZSBUWF9IRFJfV1JCX0VWVAkJCUJJVCgxKQkJLyogd29yZCAyICovCisjZGVmaW5lIFRYX0hEUl9XUkJfTlVNX1NISUZUCQkxMwkJLyogd29yZCAyOiBiaXRzIDEzOjE3ICovCisjZGVmaW5lIFRYX0hEUl9XUkJfTlVNX01BU0sJCTB4MUYJCS8qIHdvcmQgMjogYml0cyAxMzoxNyAqLworCiBzdHJ1Y3QgYmVfZXRoX2hkcl93cmIgewotCXUzMiBkd1s0XTsKKwlfX2xlMzIgZHdbNF07CiB9OwogCiAvKioqKioqKioqIFR4IENvbXBsIFN0YXR1cyBFbmNvZGluZyAqKioqKioqKiovCkBAIC00MzUsMTM4ICszNTIsMyBAQAogc3RydWN0IGJlX2V0aF9yeF9jb21wbCB7CiAJdTMyIGR3WzRdOwogfTsKLQotc3RydWN0IG1nbXRfaGJhX2F0dHJpYnMgewotCXU4IGZsYXNocm9tX3ZlcnNpb25fc3RyaW5nWzMyXTsKLQl1OCBtYW51ZmFjdHVyZXJfbmFtZVszMl07Ci0JdTMyIHN1cHBvcnRlZF9tb2RlczsKLQl1MzIgcnN2ZDBbM107Ci0JdTggbmNzaV92ZXJfc3RyaW5nWzEyXTsKLQl1MzIgZGVmYXVsdF9leHRlbmRlZF90aW1lb3V0OwotCXU4IGNvbnRyb2xsZXJfbW9kZWxfbnVtYmVyWzMyXTsKLQl1OCBjb250cm9sbGVyX2Rlc2NyaXB0aW9uWzY0XTsKLQl1OCBjb250cm9sbGVyX3NlcmlhbF9udW1iZXJbMzJdOwotCXU4IGlwX3ZlcnNpb25fc3RyaW5nWzMyXTsKLQl1OCBmaXJtd2FyZV92ZXJzaW9uX3N0cmluZ1szMl07Ci0JdTggYmlvc192ZXJzaW9uX3N0cmluZ1szMl07Ci0JdTggcmVkYm9vdF92ZXJzaW9uX3N0cmluZ1szMl07Ci0JdTggZHJpdmVyX3ZlcnNpb25fc3RyaW5nWzMyXTsKLQl1OCBmd19vbl9mbGFzaF92ZXJzaW9uX3N0cmluZ1szMl07Ci0JdTMyIGZ1bmN0aW9uYWxpdGllc19zdXBwb3J0ZWQ7Ci0JdTE2IG1heF9jZGJsZW5ndGg7Ci0JdTggYXNpY19yZXZpc2lvbjsKLQl1OCBnZW5lcmF0aW9uYWxfZ3VpZFsxNl07Ci0JdTggaGJhX3BvcnRfY291bnQ7Ci0JdTE2IGRlZmF1bHRfbGlua19kb3duX3RpbWVvdXQ7Ci0JdTggaXNjc2lfdmVyX21pbl9tYXg7Ci0JdTggbXVsdGlmdW5jdGlvbl9kZXZpY2U7Ci0JdTggY2FjaGVfdmFsaWQ7Ci0JdTggaGJhX3N0YXR1czsKLQl1OCBtYXhfZG9tYWluc19zdXBwb3J0ZWQ7Ci0JdTggcGh5X3BvcnQ7Ci0JdTMyIGZpcm13YXJlX3Bvc3Rfc3RhdHVzOwotCXUzMiBoYmFfbXR1WzhdOwotCXUzMiByc3ZkMVs0XTsKLX07Ci0KLXN0cnVjdCBtZ210X2NvbnRyb2xsZXJfYXR0cmliIHsKLQlzdHJ1Y3QgbWdtdF9oYmFfYXR0cmlicyBoYmFfYXR0cmliczsKLQl1MTYgcGNpX3ZlbmRvcl9pZDsKLQl1MTYgcGNpX2RldmljZV9pZDsKLQl1MTYgcGNpX3N1Yl92ZW5kb3JfaWQ7Ci0JdTE2IHBjaV9zdWJfc3lzdGVtX2lkOwotCXU4IHBjaV9idXNfbnVtYmVyOwotCXU4IHBjaV9kZXZpY2VfbnVtYmVyOwotCXU4IHBjaV9mdW5jdGlvbl9udW1iZXI7Ci0JdTggaW50ZXJmYWNlX3R5cGU7Ci0JdTY0IHVuaXF1ZV9pZGVudGlmaWVyOwotCXUzMiByc3ZkMFs1XTsKLX07Ci0KLXN0cnVjdCBjb250cm9sbGVyX2lkIHsKLQl1MzIgdmVuZG9yOwotCXUzMiBkZXZpY2U7Ci0JdTMyIHN1YnZlbmRvcjsKLQl1MzIgc3ViZGV2aWNlOwotfTsKLQotc3RydWN0IGZsYXNoX2NvbXAgewotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotCWludCBvcHR5cGU7Ci0JaW50IHNpemU7Ci0JaW50IGltZ190eXBlOwotfTsKLQotc3RydWN0IGltYWdlX2hkciB7Ci0JdTMyIGltYWdlaWQ7Ci0JdTMyIGltYWdlb2Zmc2V0OwotCXUzMiBpbWFnZWxlbmd0aDsKLQl1MzIgaW1hZ2VfY2hlY2tzdW07Ci0JdTggaW1hZ2VfdmVyc2lvblszMl07Ci19Owotc3RydWN0IGZsYXNoX2ZpbGVfaGRyX2cyIHsKLQl1OCBzaWduWzMyXTsKLQl1MzIgY2tzdW07Ci0JdTMyIGFudGlkb3RlOwotCXN0cnVjdCBjb250cm9sbGVyX2lkIGNvbnRfaWQ7Ci0JdTMyIGZpbGVfbGVuOwotCXUzMiBjaHVua19udW07Ci0JdTMyIHRvdGFsX2NodW5rczsKLQl1MzIgbnVtX2ltZ3M7Ci0JdTggYnVpbGRbMjRdOwotfTsKLQotc3RydWN0IGZsYXNoX2ZpbGVfaGRyX2czIHsKLQl1OCBzaWduWzUyXTsKLQl1OCB1ZmlfdmVyc2lvbls0XTsKLQl1MzIgZmlsZV9sZW47Ci0JdTMyIGNrc3VtOwotCXUzMiBhbnRpZG90ZTsKLQl1MzIgbnVtX2ltZ3M7Ci0JdTggYnVpbGRbMjRdOwotCXU4IGFzaWNfdHlwZV9yZXY7Ci0JdTggcnN2ZFszMV07Ci19OwotCi1zdHJ1Y3QgZmxhc2hfc2VjdGlvbl9oZHIgewotCXUzMiBmb3JtYXRfcmV2OwotCXUzMiBja3N1bTsKLQl1MzIgYW50aWRvdGU7Ci0JdTMyIG51bV9pbWFnZXM7Ci0JdTggaWRfc3RyaW5nWzEyOF07Ci0JdTMyIHJzdmRbNF07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgZmxhc2hfc2VjdGlvbl9oZHJfZzIgewotCXUzMiBmb3JtYXRfcmV2OwotCXUzMiBja3N1bTsKLQl1MzIgYW50aWRvdGU7Ci0JdTMyIGJ1aWxkX251bTsKLQl1OCBpZF9zdHJpbmdbMTI4XTsKLQl1MzIgcnN2ZFs4XTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBmbGFzaF9zZWN0aW9uX2VudHJ5IHsKLQl1MzIgdHlwZTsKLQl1MzIgb2Zmc2V0OwotCXUzMiBwYWRfc2l6ZTsKLQl1MzIgaW1hZ2Vfc2l6ZTsKLQl1MzIgY2tzdW07Ci0JdTMyIGVudHJ5X3BvaW50OwotCXUxNiBvcHR5cGU7Ci0JdTE2IHJzdmQwOwotCXUzMiByc3ZkMTsKLQl1OCB2ZXJfZGF0YVszMl07Ci19IF9fcGFja2VkOwotCi1zdHJ1Y3QgZmxhc2hfc2VjdGlvbl9pbmZvIHsKLQl1OCBjb29raWVbMzJdOwotCXN0cnVjdCBmbGFzaF9zZWN0aW9uX2hkciBmc2VjX2hkcjsKLQlzdHJ1Y3QgZmxhc2hfc2VjdGlvbl9lbnRyeSBmc2VjX2VudHJ5WzMyXTsKLX0gX19wYWNrZWQ7Ci0KLXN0cnVjdCBmbGFzaF9zZWN0aW9uX2luZm9fZzIgewotCXU4IGNvb2tpZVszMl07Ci0Jc3RydWN0IGZsYXNoX3NlY3Rpb25faGRyX2cyIGZzZWNfaGRyOwotCXN0cnVjdCBmbGFzaF9zZWN0aW9uX2VudHJ5IGZzZWNfZW50cnlbMzJdOwotfSBfX3BhY2tlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9lbXVsZXgvYmVuZXQvYmVfbWFpbi5jCmluZGV4IGQ0ODgwNmIuLjkzMmI5M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2VtdWxleC9iZW5ldC9iZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZW11bGV4L2JlbmV0L2JlX21haW4uYwpAQCAtNjYyLDQ4ICs2NjIsNDAgQEAKIAkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgYmVfdHhfc3RhdHNfdXBkYXRlKHN0cnVjdCBiZV90eF9vYmogKnR4bywKLQkJCSAgICAgICB1MzIgd3JiX2NudCwgdTMyIGNvcGllZCwgdTMyIGdzb19zZWdzLAotCQkJICAgICAgIGJvb2wgc3RvcHBlZCkKK3N0YXRpYyB2b2lkIGJlX3R4X3N0YXRzX3VwZGF0ZShzdHJ1Y3QgYmVfdHhfb2JqICp0eG8sIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGJlX3R4X3N0YXRzICpzdGF0cyA9IHR4X3N0YXRzKHR4byk7CiAKIAl1NjRfc3RhdHNfdXBkYXRlX2JlZ2luKCZzdGF0cy0+c3luYyk7CiAJc3RhdHMtPnR4X3JlcXMrKzsKLQlzdGF0cy0+dHhfd3JicyArPSB3cmJfY250OwotCXN0YXRzLT50eF9ieXRlcyArPSBjb3BpZWQ7Ci0Jc3RhdHMtPnR4X3BrdHMgKz0gKGdzb19zZWdzID8gZ3NvX3NlZ3MgOiAxKTsKLQlpZiAoc3RvcHBlZCkKLQkJc3RhdHMtPnR4X3N0b3BzKys7CisJc3RhdHMtPnR4X2J5dGVzICs9IHNrYi0+bGVuOworCXN0YXRzLT50eF9wa3RzICs9IChza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzID8gOiAxKTsKIAl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmc3RhdHMtPnN5bmMpOwogfQogCi0vKiBEZXRlcm1pbmUgbnVtYmVyIG9mIFdSQiBlbnRyaWVzIG5lZWRlZCB0byB4bWl0IGRhdGEgaW4gYW4gc2tiICovCi1zdGF0aWMgdTMyIHdyYl9jbnRfZm9yX3NrYihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIGJvb2wgKmR1bW15KQorLyogUmV0dXJucyBudW1iZXIgb2YgV1JCcyBuZWVkZWQgZm9yIHRoZSBza2IgKi8KK3N0YXRpYyB1MzIgc2tiX3dyYl9jbnQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgY250ID0gKHNrYi0+bGVuID4gc2tiLT5kYXRhX2xlbik7Ci0KLQljbnQgKz0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKLQotCS8qIHRvIGFjY291bnQgZm9yIGhkciB3cmIgKi8KLQljbnQrKzsKLQlpZiAobGFuY2VyX2NoaXAoYWRhcHRlcikgfHwgIShjbnQgJiAxKSkgewotCQkqZHVtbXkgPSBmYWxzZTsKLQl9IGVsc2UgewotCQkvKiBhZGQgYSBkdW1teSB0byBtYWtlIGl0IGFuIGV2ZW4gbnVtICovCi0JCWNudCsrOwotCQkqZHVtbXkgPSB0cnVlOwotCX0KLQlCVUdfT04oY250ID4gQkVfTUFYX1RYX0ZSQUdfQ09VTlQpOwotCXJldHVybiBjbnQ7CisJLyogKzEgZm9yIHRoZSBoZWFkZXIgd3JiICovCisJcmV0dXJuIDEgKyAoc2tiX2hlYWRsZW4oc2tiKSA/IDEgOiAwKSArIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB3cmJfZmlsbChzdHJ1Y3QgYmVfZXRoX3dyYiAqd3JiLCB1NjQgYWRkciwgaW50IGxlbikKIHsKLQl3cmItPmZyYWdfcGFfaGkgPSB1cHBlcl8zMl9iaXRzKGFkZHIpOwotCXdyYi0+ZnJhZ19wYV9sbyA9IGFkZHIgJiAweEZGRkZGRkZGOwotCXdyYi0+ZnJhZ19sZW4gPSBsZW4gJiBFVEhfV1JCX0ZSQUdfTEVOX01BU0s7CisJd3JiLT5mcmFnX3BhX2hpID0gY3B1X3RvX2xlMzIodXBwZXJfMzJfYml0cyhhZGRyKSk7CisJd3JiLT5mcmFnX3BhX2xvID0gY3B1X3RvX2xlMzIobG93ZXJfMzJfYml0cyhhZGRyKSk7CisJd3JiLT5mcmFnX2xlbiA9IGNwdV90b19sZTMyKGxlbiAmIEVUSF9XUkJfRlJBR19MRU5fTUFTSyk7CisJd3JiLT5yc3ZkMCA9IDA7Cit9CisKKy8qIEEgZHVtbXkgd3JiIGlzIGp1c3QgYWxsIHplcm9zLiBVc2luZyBhIHNlcGFyYXRlIHJvdXRpbmUgZm9yIGR1bW15LXdyYgorICogdG8gYXZvaWQgdGhlIHN3YXAgYW5kIHNoaWZ0L21hc2sgb3BlcmF0aW9ucyBpbiB3cmJfZmlsbCgpLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgd3JiX2ZpbGxfZHVtbXkoc3RydWN0IGJlX2V0aF93cmIgKndyYikKK3sKKwl3cmItPmZyYWdfcGFfaGkgPSAwOworCXdyYi0+ZnJhZ19wYV9sbyA9IDA7CisJd3JiLT5mcmFnX2xlbiA9IDA7CiAJd3JiLT5yc3ZkMCA9IDA7CiB9CiAKQEAgLTcxMyw3ICs3MDUsNyBAQAogCXU4IHZsYW5fcHJpbzsKIAl1MTYgdmxhbl90YWc7CiAKLQl2bGFuX3RhZyA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCXZsYW5fdGFnID0gc2tiX3ZsYW5fdGFnX2dldChza2IpOwogCXZsYW5fcHJpbyA9ICh2bGFuX3RhZyAmIFZMQU5fUFJJT19NQVNLKSA+PiBWTEFOX1BSSU9fU0hJRlQ7CiAJLyogSWYgdmxhbiBwcmlvcml0eSBwcm92aWRlZCBieSBPUyBpcyBOT1QgaW4gYXZhaWxhYmxlIGJtYXAgKi8KIAlpZiAoIShhZGFwdGVyLT52bGFuX3ByaW9fYm1hcCAmICgxIDw8IHZsYW5fcHJpbykpKQpAQCAtNzY0LDUyICs3NTYsNTcgQEAKIAkJCVNFVF9UWF9XUkJfSERSX0JJVFModWRwY3MsIGhkciwgMSk7CiAJfQogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCVNFVF9UWF9XUkJfSERSX0JJVFModmxhbiwgaGRyLCAxKTsKIAkJdmxhbl90YWcgPSBiZV9nZXRfdHhfdmxhbl90YWcoYWRhcHRlciwgc2tiKTsKIAkJU0VUX1RYX1dSQl9IRFJfQklUUyh2bGFuX3RhZywgaGRyLCB2bGFuX3RhZyk7CiAJfQogCi0JLyogVG8gc2tpcCBIVyBWTEFOIHRhZ2dpbmc6IGV2dCA9IDEsIGNvbXBsID0gMCAqLwotCVNFVF9UWF9XUkJfSERSX0JJVFMoY29tcGxldGUsIGhkciwgIXNraXBfaHdfdmxhbik7Ci0JU0VUX1RYX1dSQl9IRFJfQklUUyhldmVudCwgaGRyLCAxKTsKIAlTRVRfVFhfV1JCX0hEUl9CSVRTKG51bV93cmIsIGhkciwgd3JiX2NudCk7CiAJU0VUX1RYX1dSQl9IRFJfQklUUyhsZW4sIGhkciwgbGVuKTsKKworCS8qIEhhY2sgdG8gc2tpcCBIVyBWTEFOIHRhZ2dpbmcgbmVlZHMgZXZ0ID0gMSwgY29tcGwgPSAwCisJICogV2hlbiB0aGlzIGhhY2sgaXMgbm90IG5lZWRlZCwgdGhlIGV2dCBiaXQgaXMgc2V0IHdoaWxlIHJpbmdpbmcgREIKKwkgKi8KKwlpZiAoc2tpcF9od192bGFuKQorCQlTRVRfVFhfV1JCX0hEUl9CSVRTKGV2ZW50LCBoZHIsIDEpOwogfQogCiBzdGF0aWMgdm9pZCB1bm1hcF90eF9mcmFnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGJlX2V0aF93cmIgKndyYiwKIAkJCSAgYm9vbCB1bm1hcF9zaW5nbGUpCiB7CiAJZG1hX2FkZHJfdCBkbWE7CisJdTMyIGZyYWdfbGVuID0gbGUzMl90b19jcHUod3JiLT5mcmFnX2xlbik7CiAKLQliZV9kd3NfbGVfdG9fY3B1KHdyYiwgc2l6ZW9mKCp3cmIpKTsKIAotCWRtYSA9ICh1NjQpd3JiLT5mcmFnX3BhX2hpIDw8IDMyIHwgKHU2NCl3cmItPmZyYWdfcGFfbG87Ci0JaWYgKHdyYi0+ZnJhZ19sZW4pIHsKKwlkbWEgPSAodTY0KWxlMzJfdG9fY3B1KHdyYi0+ZnJhZ19wYV9oaSkgPDwgMzIgfAorCQkodTY0KWxlMzJfdG9fY3B1KHdyYi0+ZnJhZ19wYV9sbyk7CisJaWYgKGZyYWdfbGVuKSB7CiAJCWlmICh1bm1hcF9zaW5nbGUpCi0JCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZG1hLCB3cmItPmZyYWdfbGVuLAotCQkJCQkgRE1BX1RPX0RFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgZG1hLCBmcmFnX2xlbiwgRE1BX1RPX0RFVklDRSk7CiAJCWVsc2UKLQkJCWRtYV91bm1hcF9wYWdlKGRldiwgZG1hLCB3cmItPmZyYWdfbGVuLCBETUFfVE9fREVWSUNFKTsKKwkJCWRtYV91bm1hcF9wYWdlKGRldiwgZG1hLCBmcmFnX2xlbiwgRE1BX1RPX0RFVklDRSk7CiAJfQogfQogCi1zdGF0aWMgaW50IG1ha2VfdHhfd3JicyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGJlX3F1ZXVlX2luZm8gKnR4cSwKLQkJCXN0cnVjdCBza19idWZmICpza2IsIHUzMiB3cmJfY250LCBib29sIGR1bW15X3dyYiwKLQkJCWJvb2wgc2tpcF9od192bGFuKQorLyogUmV0dXJucyB0aGUgbnVtYmVyIG9mIFdSQnMgdXNlZCB1cCBieSB0aGUgc2tiICovCitzdGF0aWMgdTMyIGJlX3htaXRfZW5xdWV1ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IGJlX3R4X29iaiAqdHhvLAorCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgYm9vbCBza2lwX2h3X3ZsYW4pCiB7Ci0JZG1hX2FkZHJfdCBidXNhZGRyOwotCWludCBpLCBjb3BpZWQgPSAwOworCXUzMiBpLCBjb3BpZWQgPSAwLCB3cmJfY250ID0gc2tiX3dyYl9jbnQoc2tiKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYWRhcHRlci0+cGRldi0+ZGV2OwotCXN0cnVjdCBza19idWZmICpmaXJzdF9za2IgPSBza2I7Ci0Jc3RydWN0IGJlX2V0aF93cmIgKndyYjsKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxID0gJnR4by0+cTsKIAlzdHJ1Y3QgYmVfZXRoX2hkcl93cmIgKmhkcjsKIAlib29sIG1hcF9zaW5nbGUgPSBmYWxzZTsKLQl1MTYgbWFwX2hlYWQ7CisJc3RydWN0IGJlX2V0aF93cmIgKndyYjsKKwlkbWFfYWRkcl90IGJ1c2FkZHI7CisJdTE2IGhlYWQgPSB0eHEtPmhlYWQ7CiAKIAloZHIgPSBxdWV1ZV9oZWFkX25vZGUodHhxKTsKKwl3cmJfZmlsbF9oZHIoYWRhcHRlciwgaGRyLCBza2IsIHdyYl9jbnQsIHNrYi0+bGVuLCBza2lwX2h3X3ZsYW4pOworCWJlX2R3c19jcHVfdG9fbGUoaGRyLCBzaXplb2YoKmhkcikpOworCiAJcXVldWVfaGVhZF9pbmModHhxKTsKLQltYXBfaGVhZCA9IHR4cS0+aGVhZDsKIAogCWlmIChza2ItPmxlbiA+IHNrYi0+ZGF0YV9sZW4pIHsKIAkJaW50IGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CkBAIC04MjAsNyArODE3LDYgQEAKIAkJbWFwX3NpbmdsZSA9IHRydWU7CiAJCXdyYiA9IHF1ZXVlX2hlYWRfbm9kZSh0eHEpOwogCQl3cmJfZmlsbCh3cmIsIGJ1c2FkZHIsIGxlbik7Ci0JCWJlX2R3c19jcHVfdG9fbGUod3JiLCBzaXplb2YoKndyYikpOwogCQlxdWV1ZV9oZWFkX2luYyh0eHEpOwogCQljb3BpZWQgKz0gbGVuOwogCX0KQEAgLTgzNCwzNSArODMwLDQ0IEBACiAJCQlnb3RvIGRtYV9lcnI7CiAJCXdyYiA9IHF1ZXVlX2hlYWRfbm9kZSh0eHEpOwogCQl3cmJfZmlsbCh3cmIsIGJ1c2FkZHIsIHNrYl9mcmFnX3NpemUoZnJhZykpOwotCQliZV9kd3NfY3B1X3RvX2xlKHdyYiwgc2l6ZW9mKCp3cmIpKTsKIAkJcXVldWVfaGVhZF9pbmModHhxKTsKIAkJY29waWVkICs9IHNrYl9mcmFnX3NpemUoZnJhZyk7CiAJfQogCi0JaWYgKGR1bW15X3dyYikgewotCQl3cmIgPSBxdWV1ZV9oZWFkX25vZGUodHhxKTsKLQkJd3JiX2ZpbGwod3JiLCAwLCAwKTsKLQkJYmVfZHdzX2NwdV90b19sZSh3cmIsIHNpemVvZigqd3JiKSk7Ci0JCXF1ZXVlX2hlYWRfaW5jKHR4cSk7Ci0JfQorCUJVR19PTih0eG8tPnNlbnRfc2tiX2xpc3RbaGVhZF0pOworCXR4by0+c2VudF9za2JfbGlzdFtoZWFkXSA9IHNrYjsKKwl0eG8tPmxhc3RfcmVxX2hkciA9IGhlYWQ7CisJYXRvbWljX2FkZCh3cmJfY250LCAmdHhxLT51c2VkKTsKKwl0eG8tPmxhc3RfcmVxX3dyYl9jbnQgPSB3cmJfY250OworCXR4by0+cGVuZF93cmJfY250ICs9IHdyYl9jbnQ7CiAKLQl3cmJfZmlsbF9oZHIoYWRhcHRlciwgaGRyLCBmaXJzdF9za2IsIHdyYl9jbnQsIGNvcGllZCwgc2tpcF9od192bGFuKTsKLQliZV9kd3NfY3B1X3RvX2xlKGhkciwgc2l6ZW9mKCpoZHIpKTsKKwliZV90eF9zdGF0c191cGRhdGUodHhvLCBza2IpOworCXJldHVybiB3cmJfY250OwogCi0JcmV0dXJuIGNvcGllZDsKIGRtYV9lcnI6Ci0JdHhxLT5oZWFkID0gbWFwX2hlYWQ7CisJLyogQnJpbmcgdGhlIHF1ZXVlIGJhY2sgdG8gdGhlIHN0YXRlIGl0IHdhcyBpbiBiZWZvcmUgdGhpcworCSAqIHJvdXRpbmUgd2FzIGludm9rZWQuCisJICovCisJdHhxLT5oZWFkID0gaGVhZDsKKwkvKiBza2lwIHRoZSBmaXJzdCB3cmIgKGhkcik7IGl0J3Mgbm90IG1hcHBlZCAqLworCXF1ZXVlX2hlYWRfaW5jKHR4cSk7CiAJd2hpbGUgKGNvcGllZCkgewogCQl3cmIgPSBxdWV1ZV9oZWFkX25vZGUodHhxKTsKIAkJdW5tYXBfdHhfZnJhZyhkZXYsIHdyYiwgbWFwX3NpbmdsZSk7CiAJCW1hcF9zaW5nbGUgPSBmYWxzZTsKLQkJY29waWVkIC09IHdyYi0+ZnJhZ19sZW47CisJCWNvcGllZCAtPSBsZTMyX3RvX2NwdSh3cmItPmZyYWdfbGVuKTsKIAkJYWRhcHRlci0+ZHJ2X3N0YXRzLmRtYV9tYXBfZXJyb3JzKys7CiAJCXF1ZXVlX2hlYWRfaW5jKHR4cSk7CiAJfQorCXR4cS0+aGVhZCA9IGhlYWQ7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHFucV9hc3luY19ldnRfcmN2ZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gYWRhcHRlci0+ZmxhZ3MgJiBCRV9GTEFHU19RTlFfQVNZTkNfRVZUX1JDVkQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYmVfaW5zZXJ0X3ZsYW5faW5fcGt0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSAgICAgYm9vbCAqc2tpcF9od192bGFuKQpAQCAtODczLDcgKzg3OCw3IEBACiAJaWYgKHVubGlrZWx5KCFza2IpKQogCQlyZXR1cm4gc2tiOwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkKIAkJdmxhbl90YWcgPSBiZV9nZXRfdHhfdmxhbl90YWcoYWRhcHRlciwgc2tiKTsKIAogCWlmIChxbnFfYXN5bmNfZXZ0X3JjdmQoYWRhcHRlcikgJiYgYWRhcHRlci0+cHZpZCkgewpAQCAtOTMyLDcgKzkzNyw3IEBACiAKIHN0YXRpYyBpbnQgYmVfdmxhbl90YWdfdHhfY2hrKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXJldHVybiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikgfHwgYWRhcHRlci0+cHZpZCB8fCBhZGFwdGVyLT5xbnFfdmlkOworCXJldHVybiBza2Jfdmxhbl90YWdfcHJlc2VudChza2IpIHx8IGFkYXB0ZXItPnB2aWQgfHwgYWRhcHRlci0+cW5xX3ZpZDsKIH0KIAogc3RhdGljIGludCBiZV9pcHY2X3R4X3N0YWxsX2NoayhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTk1NSw3ICs5NjAsNyBAQAogCWV0aF9oZHJfbGVuID0gbnRvaHMoc2tiLT5wcm90b2NvbCkgPT0gRVRIX1BfODAyMVEgPwogCQkJCQkJVkxBTl9FVEhfSExFTiA6IEVUSF9ITEVOOwogCWlmIChza2ItPmxlbiA8PSA2MCAmJgotCSAgICAobGFuY2VyX2NoaXAoYWRhcHRlcikgfHwgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSAmJgorCSAgICAobGFuY2VyX2NoaXAoYWRhcHRlcikgfHwgc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgJiYKIAkgICAgaXNfaXB2NF9wa3Qoc2tiKSkgewogCQlpcCA9IChzdHJ1Y3QgaXBoZHIgKilpcF9oZHIoc2tiKTsKIAkJcHNrYl90cmltKHNrYiwgZXRoX2hkcl9sZW4gKyBudG9ocyhpcC0+dG90X2xlbikpOwpAQCAtOTczLDcgKzk3OCw3IEBACiAJICogTWFudWFsbHkgaW5zZXJ0IFZMQU4gaW4gcGt0LgogCSAqLwogCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMICYmCi0JICAgIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCSAgICBza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCXNrYiA9IGJlX2luc2VydF92bGFuX2luX3BrdChhZGFwdGVyLCBza2IsIHNraXBfaHdfdmxhbik7CiAJCWlmICh1bmxpa2VseSghc2tiKSkKIAkJCWdvdG8gZXJyOwpAQCAtMTAzMCw1MiArMTAzNSw2NCBAQAogCXJldHVybiBza2I7CiB9CiAKK3N0YXRpYyB2b2lkIGJlX3htaXRfZmx1c2goc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBiZV90eF9vYmogKnR4bykKK3sKKwlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxID0gJnR4by0+cTsKKwlzdHJ1Y3QgYmVfZXRoX2hkcl93cmIgKmhkciA9IHF1ZXVlX2luZGV4X25vZGUodHhxLCB0eG8tPmxhc3RfcmVxX2hkcik7CisKKwkvKiBNYXJrIHRoZSBsYXN0IHJlcXVlc3QgZXZlbnRhYmxlIGlmIGl0IGhhc24ndCBiZWVuIG1hcmtlZCBhbHJlYWR5ICovCisJaWYgKCEoaGRyLT5kd1syXSAmIGNwdV90b19sZTMyKFRYX0hEUl9XUkJfRVZUKSkpCisJCWhkci0+ZHdbMl0gfD0gY3B1X3RvX2xlMzIoVFhfSERSX1dSQl9FVlQgfCBUWF9IRFJfV1JCX0NPTVBMKTsKKworCS8qIGNvbXBvc2UgYSBkdW1teSB3cmIgaWYgdGhlcmUgYXJlIG9kZCBzZXQgb2Ygd3JicyB0byBub3RpZnkgKi8KKwlpZiAoIWxhbmNlcl9jaGlwKGFkYXB0ZXIpICYmICh0eG8tPnBlbmRfd3JiX2NudCAmIDEpKSB7CisJCXdyYl9maWxsX2R1bW15KHF1ZXVlX2hlYWRfbm9kZSh0eHEpKTsKKwkJcXVldWVfaGVhZF9pbmModHhxKTsKKwkJYXRvbWljX2luYygmdHhxLT51c2VkKTsKKwkJdHhvLT5wZW5kX3dyYl9jbnQrKzsKKwkJaGRyLT5kd1syXSAmPSB+Y3B1X3RvX2xlMzIoVFhfSERSX1dSQl9OVU1fTUFTSyA8PAorCQkJCQkgICBUWF9IRFJfV1JCX05VTV9TSElGVCk7CisJCWhkci0+ZHdbMl0gfD0gY3B1X3RvX2xlMzIoKHR4by0+bGFzdF9yZXFfd3JiX2NudCArIDEpIDw8CisJCQkJCSAgVFhfSERSX1dSQl9OVU1fU0hJRlQpOworCX0KKwliZV90eHFfbm90aWZ5KGFkYXB0ZXIsIHR4bywgdHhvLT5wZW5kX3dyYl9jbnQpOworCXR4by0+cGVuZF93cmJfY250ID0gMDsKK30KKwogc3RhdGljIG5ldGRldl90eF90IGJlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKKwlib29sIHNraXBfaHdfdmxhbiA9IGZhbHNlLCBmbHVzaCA9ICFza2ItPnhtaXRfbW9yZTsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGJlX3R4X29iaiAqdHhvID0gJmFkYXB0ZXItPnR4X29ialtza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKV07CisJdTE2IHFfaWR4ID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CisJc3RydWN0IGJlX3R4X29iaiAqdHhvID0gJmFkYXB0ZXItPnR4X29ialtxX2lkeF07CiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnR4cSA9ICZ0eG8tPnE7Ci0JYm9vbCBkdW1teV93cmIsIHN0b3BwZWQgPSBmYWxzZTsKLQl1MzIgd3JiX2NudCA9IDAsIGNvcGllZCA9IDA7Ci0JYm9vbCBza2lwX2h3X3ZsYW4gPSBmYWxzZTsKLQl1MzIgc3RhcnQgPSB0eHEtPmhlYWQ7CisJdTE2IHdyYl9jbnQ7CiAKIAlza2IgPSBiZV94bWl0X3dvcmthcm91bmRzKGFkYXB0ZXIsIHNrYiwgJnNraXBfaHdfdmxhbik7Ci0JaWYgKCFza2IpIHsKLQkJdHhfc3RhdHModHhvKS0+dHhfZHJ2X2Ryb3BzKys7Ci0JCXJldHVybiBORVRERVZfVFhfT0s7Ci0JfQorCWlmICh1bmxpa2VseSghc2tiKSkKKwkJZ290byBkcm9wOwogCi0Jd3JiX2NudCA9IHdyYl9jbnRfZm9yX3NrYihhZGFwdGVyLCBza2IsICZkdW1teV93cmIpOwotCi0JY29waWVkID0gbWFrZV90eF93cmJzKGFkYXB0ZXIsIHR4cSwgc2tiLCB3cmJfY250LCBkdW1teV93cmIsCi0JCQkgICAgICBza2lwX2h3X3ZsYW4pOwotCWlmIChjb3BpZWQpIHsKLQkJaW50IGdzb19zZWdzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2VnczsKLQotCQkvKiByZWNvcmQgdGhlIHNlbnQgc2tiIGluIHRoZSBzZW50X3NrYiB0YWJsZSAqLwotCQlCVUdfT04odHhvLT5zZW50X3NrYl9saXN0W3N0YXJ0XSk7Ci0JCXR4by0+c2VudF9za2JfbGlzdFtzdGFydF0gPSBza2I7Ci0KLQkJLyogRW5zdXJlIHR4cSBoYXMgc3BhY2UgZm9yIHRoZSBuZXh0IHNrYjsgRWxzZSBzdG9wIHRoZSBxdWV1ZQotCQkgKiAqQkVGT1JFKiByaW5naW5nIHRoZSB0eCBkb29yYmVsbCwgc28gdGhhdCB3ZSBzZXJpYWx6ZSB0aGUKLQkJICogdHggY29tcGxzIG9mIHRoZSBjdXJyZW50IHRyYW5zbWl0IHdoaWNoJ2xsIHdha2UgdXAgdGhlIHF1ZXVlCi0JCSAqLwotCQlhdG9taWNfYWRkKHdyYl9jbnQsICZ0eHEtPnVzZWQpOwotCQlpZiAoKEJFX01BWF9UWF9GUkFHX0NPVU5UICsgYXRvbWljX3JlYWQoJnR4cS0+dXNlZCkpID49Ci0JCQkJCQkJCXR4cS0+bGVuKSB7Ci0JCQluZXRpZl9zdG9wX3N1YnF1ZXVlKG5ldGRldiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwotCQkJc3RvcHBlZCA9IHRydWU7Ci0JCX0KLQotCQliZV90eHFfbm90aWZ5KGFkYXB0ZXIsIHR4bywgd3JiX2NudCk7Ci0KLQkJYmVfdHhfc3RhdHNfdXBkYXRlKHR4bywgd3JiX2NudCwgY29waWVkLCBnc29fc2Vncywgc3RvcHBlZCk7Ci0JfSBlbHNlIHsKLQkJdHhxLT5oZWFkID0gc3RhcnQ7Ci0JCXR4X3N0YXRzKHR4byktPnR4X2Rydl9kcm9wcysrOworCXdyYl9jbnQgPSBiZV94bWl0X2VucXVldWUoYWRhcHRlciwgdHhvLCBza2IsIHNraXBfaHdfdmxhbik7CisJaWYgKHVubGlrZWx5KCF3cmJfY250KSkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlnb3RvIGRyb3A7CiAJfQorCisJaWYgKChhdG9taWNfcmVhZCgmdHhxLT51c2VkKSArIEJFX01BWF9UWF9GUkFHX0NPVU5UKSA+PSB0eHEtPmxlbikgeworCQluZXRpZl9zdG9wX3N1YnF1ZXVlKG5ldGRldiwgcV9pZHgpOworCQl0eF9zdGF0cyh0eG8pLT50eF9zdG9wcysrOworCX0KKworCWlmIChmbHVzaCB8fCBfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmV0ZGV2LCBxX2lkeCkpCisJCWJlX3htaXRfZmx1c2goYWRhcHRlciwgdHhvKTsKKworCXJldHVybiBORVRERVZfVFhfT0s7Citkcm9wOgorCXR4X3N0YXRzKHR4byktPnR4X2Rydl9kcm9wcysrOworCS8qIEZsdXNoIHRoZSBhbHJlYWR5IGVucXVldWVkIHR4IHJlcXVlc3RzICovCisJaWYgKGZsdXNoICYmIHR4by0+cGVuZF93cmJfY250KQorCQliZV94bWl0X2ZsdXNoKGFkYXB0ZXIsIHR4byk7CisKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC0xMDk2LDYgKzExMTMsNDMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGJlX2luX2FsbF9wcm9taXNjKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiAoYWRhcHRlci0+aWZfZmxhZ3MgJiBCRV9JRl9GTEFHU19BTExfUFJPTUlTQ1VPVVMpID09CisJCQlCRV9JRl9GTEFHU19BTExfUFJPTUlTQ1VPVVM7Cit9CisKK3N0YXRpYyBpbnQgYmVfc2V0X3ZsYW5fcHJvbWlzYyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYWRhcHRlci0+cGRldi0+ZGV2OworCWludCBzdGF0dXM7CisKKwlpZiAoYWRhcHRlci0+aWZfZmxhZ3MgJiBCRV9JRl9GTEFHU19WTEFOX1BST01JU0NVT1VTKQorCQlyZXR1cm4gMDsKKworCXN0YXR1cyA9IGJlX2NtZF9yeF9maWx0ZXIoYWRhcHRlciwgQkVfSUZfRkxBR1NfVkxBTl9QUk9NSVNDVU9VUywgT04pOworCWlmICghc3RhdHVzKSB7CisJCWRldl9pbmZvKGRldiwgIkVuYWJsZWQgVkxBTiBwcm9taXNjdW91cyBtb2RlXG4iKTsKKwkJYWRhcHRlci0+aWZfZmxhZ3MgfD0gQkVfSUZfRkxBR1NfVkxBTl9QUk9NSVNDVU9VUzsKKwl9IGVsc2UgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgVkxBTiBwcm9taXNjdW91cyBtb2RlXG4iKTsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBiZV9jbGVhcl92bGFuX3Byb21pc2Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFkYXB0ZXItPnBkZXYtPmRldjsKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gYmVfY21kX3J4X2ZpbHRlcihhZGFwdGVyLCBCRV9JRl9GTEFHU19WTEFOX1BST01JU0NVT1VTLCBPRkYpOworCWlmICghc3RhdHVzKSB7CisJCWRldl9pbmZvKGRldiwgIkRpc2FibGluZyBWTEFOIHByb21pc2N1b3VzIG1vZGVcbiIpOworCQlhZGFwdGVyLT5pZl9mbGFncyAmPSB+QkVfSUZfRkxBR1NfVkxBTl9QUk9NSVNDVU9VUzsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKwogLyoKICAqIEEgbWF4IG9mIDY0IChCRV9OVU1fVkxBTlNfU1VQUE9SVEVEKSB2bGFucyBjYW4gYmUgY29uZmlndXJlZCBpbiBCRS4KICAqIElmIHRoZSB1c2VyIGNvbmZpZ3VyZXMgbW9yZSwgcGxhY2UgQkUgaW4gdmxhbiBwcm9taXNjdW91cyBtb2RlLgpAQCAtMTEwOCwxMSArMTE2MiwxMSBAQAogCWludCBzdGF0dXMgPSAwOwogCiAJLyogTm8gbmVlZCB0byBmdXJ0aGVyIGNvbmZpZ3VyZSB2aWRzIGlmIGluIHByb21pc2N1b3VzIG1vZGUgKi8KLQlpZiAoYWRhcHRlci0+cHJvbWlzY3VvdXMpCisJaWYgKGJlX2luX2FsbF9wcm9taXNjKGFkYXB0ZXIpKQogCQlyZXR1cm4gMDsKIAogCWlmIChhZGFwdGVyLT52bGFuc19hZGRlZCA+IGJlX21heF92bGFucyhhZGFwdGVyKSkKLQkJZ290byBzZXRfdmxhbl9wcm9taXNjOworCQlyZXR1cm4gYmVfc2V0X3ZsYW5fcHJvbWlzYyhhZGFwdGVyKTsKIAogCS8qIENvbnN0cnVjdCBWTEFOIFRhYmxlIHRvIGdpdmUgdG8gSFcgKi8KIAlmb3JfZWFjaF9zZXRfYml0KGksIGFkYXB0ZXItPnZpZHMsIFZMQU5fTl9WSUQpCkBAIC0xMTIwLDM2ICsxMTc0LDE0IEBACiAKIAlzdGF0dXMgPSBiZV9jbWRfdmxhbl9jb25maWcoYWRhcHRlciwgYWRhcHRlci0+aWZfaGFuZGxlLCB2aWRzLCBudW0pOwogCWlmIChzdGF0dXMpIHsKKwkJZGV2X2VycihkZXYsICJTZXR0aW5nIEhXIFZMQU4gZmlsdGVyaW5nIGZhaWxlZFxuIik7CiAJCS8qIFNldCB0byBWTEFOIHByb21pc2MgbW9kZSBhcyBzZXR0aW5nIFZMQU4gZmlsdGVyIGZhaWxlZCAqLwogCQlpZiAoYWRkbF9zdGF0dXMoc3RhdHVzKSA9PQogCQkJCU1DQ19BRERMX1NUQVRVU19JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTKQotCQkJZ290byBzZXRfdmxhbl9wcm9taXNjOwotCQlkZXZfZXJyKGRldiwgIlNldHRpbmcgSFcgVkxBTiBmaWx0ZXJpbmcgZmFpbGVkXG4iKTsKLQl9IGVsc2UgewotCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBCRV9GTEFHU19WTEFOX1BST01JU0MpIHsKLQkJCS8qIGh3IFZMQU4gZmlsdGVyaW5nIHJlLWVuYWJsZWQuICovCi0JCQlzdGF0dXMgPSBiZV9jbWRfcnhfZmlsdGVyKGFkYXB0ZXIsCi0JCQkJCQkgIEJFX0ZMQUdTX1ZMQU5fUFJPTUlTQywgT0ZGKTsKLQkJCWlmICghc3RhdHVzKSB7Ci0JCQkJZGV2X2luZm8oZGV2LAotCQkJCQkgIkRpc2FibGluZyBWTEFOIFByb21pc2N1b3VzIG1vZGVcbiIpOwotCQkJCWFkYXB0ZXItPmZsYWdzICY9IH5CRV9GTEFHU19WTEFOX1BST01JU0M7Ci0JCQl9Ci0JCX0KKwkJCXJldHVybiBiZV9zZXRfdmxhbl9wcm9taXNjKGFkYXB0ZXIpOworCX0gZWxzZSBpZiAoYWRhcHRlci0+aWZfZmxhZ3MgJiBCRV9JRl9GTEFHU19WTEFOX1BST01JU0NVT1VTKSB7CisJCXN0YXR1cyA9IGJlX2NsZWFyX3ZsYW5fcHJvbWlzYyhhZGFwdGVyKTsKIAl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotCi1zZXRfdmxhbl9wcm9taXNjOgotCWlmIChhZGFwdGVyLT5mbGFncyAmIEJFX0ZMQUdTX1ZMQU5fUFJPTUlTQykKLQkJcmV0dXJuIDA7Ci0KLQlzdGF0dXMgPSBiZV9jbWRfcnhfZmlsdGVyKGFkYXB0ZXIsIEJFX0ZMQUdTX1ZMQU5fUFJPTUlTQywgT04pOwotCWlmICghc3RhdHVzKSB7Ci0JCWRldl9pbmZvKGRldiwgIkVuYWJsZSBWTEFOIFByb21pc2N1b3VzIG1vZGVcbiIpOwotCQlhZGFwdGVyLT5mbGFncyB8PSBCRV9GTEFHU19WTEFOX1BST01JU0M7Ci0JfSBlbHNlCi0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBWTEFOIFByb21pc2N1b3VzIG1vZGVcbiIpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTExOTEsNzkgKzEyMjMsOTkgQEAKIAlyZXR1cm4gYmVfdmlkX2NvbmZpZyhhZGFwdGVyKTsKIH0KIAotc3RhdGljIHZvaWQgYmVfY2xlYXJfcHJvbWlzYyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyB2b2lkIGJlX2NsZWFyX2FsbF9wcm9taXNjKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewotCWFkYXB0ZXItPnByb21pc2N1b3VzID0gZmFsc2U7Ci0JYWRhcHRlci0+ZmxhZ3MgJj0gfihCRV9GTEFHU19WTEFOX1BST01JU0MgfCBCRV9GTEFHU19NQ0FTVF9QUk9NSVNDKTsKKwliZV9jbWRfcnhfZmlsdGVyKGFkYXB0ZXIsIEJFX0lGX0ZMQUdTX0FMTF9QUk9NSVNDVU9VUywgT0ZGKTsKKwlhZGFwdGVyLT5pZl9mbGFncyAmPSB+QkVfSUZfRkxBR1NfQUxMX1BST01JU0NVT1VTOworfQogCi0JYmVfY21kX3J4X2ZpbHRlcihhZGFwdGVyLCBJRkZfUFJPTUlTQywgT0ZGKTsKK3N0YXRpYyB2b2lkIGJlX3NldF9hbGxfcHJvbWlzYyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwliZV9jbWRfcnhfZmlsdGVyKGFkYXB0ZXIsIEJFX0lGX0ZMQUdTX0FMTF9QUk9NSVNDVU9VUywgT04pOworCWFkYXB0ZXItPmlmX2ZsYWdzIHw9IEJFX0lGX0ZMQUdTX0FMTF9QUk9NSVNDVU9VUzsKK30KKworc3RhdGljIHZvaWQgYmVfc2V0X21jX3Byb21pc2Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHN0YXR1czsKKworCWlmIChhZGFwdGVyLT5pZl9mbGFncyAmIEJFX0lGX0ZMQUdTX01DQVNUX1BST01JU0NVT1VTKQorCQlyZXR1cm47CisKKwlzdGF0dXMgPSBiZV9jbWRfcnhfZmlsdGVyKGFkYXB0ZXIsIEJFX0lGX0ZMQUdTX01DQVNUX1BST01JU0NVT1VTLCBPTik7CisJaWYgKCFzdGF0dXMpCisJCWFkYXB0ZXItPmlmX2ZsYWdzIHw9IEJFX0lGX0ZMQUdTX01DQVNUX1BST01JU0NVT1VTOworfQorCitzdGF0aWMgdm9pZCBiZV9zZXRfbWNfbGlzdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gYmVfY21kX3J4X2ZpbHRlcihhZGFwdGVyLCBCRV9JRl9GTEFHU19NVUxUSUNBU1QsIE9OKTsKKwlpZiAoIXN0YXR1cykKKwkJYWRhcHRlci0+aWZfZmxhZ3MgJj0gfkJFX0lGX0ZMQUdTX01DQVNUX1BST01JU0NVT1VTOworCWVsc2UKKwkJYmVfc2V0X21jX3Byb21pc2MoYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGJlX3NldF91Y19saXN0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CisJaW50IGkgPSAxOyAvKiBGaXJzdCBzbG90IGlzIGNsYWltZWQgYnkgdGhlIFByaW1hcnkgTUFDICovCisKKwlmb3IgKDsgYWRhcHRlci0+dWNfbWFjcyA+IDA7IGFkYXB0ZXItPnVjX21hY3MtLSwgaSsrKQorCQliZV9jbWRfcG1hY19kZWwoYWRhcHRlciwgYWRhcHRlci0+aWZfaGFuZGxlLAorCQkJCWFkYXB0ZXItPnBtYWNfaWRbaV0sIDApOworCisJaWYgKG5ldGRldl91Y19jb3VudChhZGFwdGVyLT5uZXRkZXYpID4gYmVfbWF4X3VjKGFkYXB0ZXIpKSB7CisJCWJlX3NldF9hbGxfcHJvbWlzYyhhZGFwdGVyKTsKKwkJcmV0dXJuOworCX0KKworCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBhZGFwdGVyLT5uZXRkZXYpIHsKKwkJYWRhcHRlci0+dWNfbWFjcysrOyAvKiBGaXJzdCBzbG90IGlzIGZvciBQcmltYXJ5IE1BQyAqLworCQliZV9jbWRfcG1hY19hZGQoYWRhcHRlciwgKHU4ICopaGEtPmFkZHIsIGFkYXB0ZXItPmlmX2hhbmRsZSwKKwkJCQkmYWRhcHRlci0+cG1hY19pZFthZGFwdGVyLT51Y19tYWNzXSwgMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBiZV9jbGVhcl91Y19saXN0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCisJZm9yIChpID0gMTsgaSA8IChhZGFwdGVyLT51Y19tYWNzICsgMSk7IGkrKykKKwkJYmVfY21kX3BtYWNfZGVsKGFkYXB0ZXIsIGFkYXB0ZXItPmlmX2hhbmRsZSwKKwkJCQlhZGFwdGVyLT5wbWFjX2lkW2ldLCAwKTsKKwlhZGFwdGVyLT51Y19tYWNzID0gMDsKIH0KIAogc3RhdGljIHZvaWQgYmVfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JaW50IHN0YXR1czsKIAogCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJYmVfY21kX3J4X2ZpbHRlcihhZGFwdGVyLCBJRkZfUFJPTUlTQywgT04pOwotCQlhZGFwdGVyLT5wcm9taXNjdW91cyA9IHRydWU7Ci0JCWdvdG8gZG9uZTsKKwkJYmVfc2V0X2FsbF9wcm9taXNjKGFkYXB0ZXIpOworCQlyZXR1cm47CiAJfQogCi0JLyogQkUgd2FzIHByZXZpb3VzbHkgaW4gcHJvbWlzY3VvdXMgbW9kZTsgZGlzYWJsZSBpdCAqLwotCWlmIChhZGFwdGVyLT5wcm9taXNjdW91cykgewotCQliZV9jbGVhcl9wcm9taXNjKGFkYXB0ZXIpOworCS8qIEludGVyZmFjZSB3YXMgcHJldmlvdXNseSBpbiBwcm9taXNjdW91cyBtb2RlOyBkaXNhYmxlIGl0ICovCisJaWYgKGJlX2luX2FsbF9wcm9taXNjKGFkYXB0ZXIpKSB7CisJCWJlX2NsZWFyX2FsbF9wcm9taXNjKGFkYXB0ZXIpOwogCQlpZiAoYWRhcHRlci0+dmxhbnNfYWRkZWQpCiAJCQliZV92aWRfY29uZmlnKGFkYXB0ZXIpOwogCX0KIAogCS8qIEVuYWJsZSBtdWx0aWNhc3QgcHJvbWlzYyBpZiBudW0gY29uZmlndXJlZCBleGNlZWRzIHdoYXQgd2Ugc3VwcG9ydCAqLwogCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8Ci0JICAgIG5ldGRldl9tY19jb3VudChuZXRkZXYpID4gYmVfbWF4X21jKGFkYXB0ZXIpKQotCQlnb3RvIHNldF9tY2FzdF9wcm9taXNjOwotCi0JaWYgKG5ldGRldl91Y19jb3VudChuZXRkZXYpICE9IGFkYXB0ZXItPnVjX21hY3MpIHsKLQkJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKLQkJaW50IGkgPSAxOyAvKiBGaXJzdCBzbG90IGlzIGNsYWltZWQgYnkgdGhlIFByaW1hcnkgTUFDICovCi0KLQkJZm9yICg7IGFkYXB0ZXItPnVjX21hY3MgPiAwOyBhZGFwdGVyLT51Y19tYWNzLS0sIGkrKykgewotCQkJYmVfY21kX3BtYWNfZGVsKGFkYXB0ZXIsIGFkYXB0ZXItPmlmX2hhbmRsZSwKLQkJCQkJYWRhcHRlci0+cG1hY19pZFtpXSwgMCk7Ci0JCX0KLQotCQlpZiAobmV0ZGV2X3VjX2NvdW50KG5ldGRldikgPiBiZV9tYXhfdWMoYWRhcHRlcikpIHsKLQkJCWJlX2NtZF9yeF9maWx0ZXIoYWRhcHRlciwgSUZGX1BST01JU0MsIE9OKTsKLQkJCWFkYXB0ZXItPnByb21pc2N1b3VzID0gdHJ1ZTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBhZGFwdGVyLT5uZXRkZXYpIHsKLQkJCWFkYXB0ZXItPnVjX21hY3MrKzsgLyogRmlyc3Qgc2xvdCBpcyBmb3IgUHJpbWFyeSBNQUMgKi8KLQkJCWJlX2NtZF9wbWFjX2FkZChhZGFwdGVyLCAodTggKiloYS0+YWRkciwKLQkJCQkJYWRhcHRlci0+aWZfaGFuZGxlLAotCQkJCQkmYWRhcHRlci0+cG1hY19pZFthZGFwdGVyLT51Y19tYWNzXSwgMCk7Ci0JCX0KLQl9Ci0KLQlzdGF0dXMgPSBiZV9jbWRfcnhfZmlsdGVyKGFkYXB0ZXIsIElGRl9NVUxUSUNBU1QsIE9OKTsKLQlpZiAoIXN0YXR1cykgewotCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBCRV9GTEFHU19NQ0FTVF9QUk9NSVNDKQotCQkJYWRhcHRlci0+ZmxhZ3MgJj0gfkJFX0ZMQUdTX01DQVNUX1BST01JU0M7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLXNldF9tY2FzdF9wcm9taXNjOgotCWlmIChhZGFwdGVyLT5mbGFncyAmIEJFX0ZMQUdTX01DQVNUX1BST01JU0MpCisJICAgIG5ldGRldl9tY19jb3VudChuZXRkZXYpID4gYmVfbWF4X21jKGFkYXB0ZXIpKSB7CisJCWJlX3NldF9tY19wcm9taXNjKGFkYXB0ZXIpOwogCQlyZXR1cm47CisJfQogCi0JLyogU2V0IHRvIE1DQVNUIHByb21pc2MgbW9kZSBpZiBzZXR0aW5nIE1VTFRJQ0FTVCBhZGRyZXNzIGZhaWxzCi0JICogb3IgaWYgbnVtIGNvbmZpZ3VyZWQgZXhjZWVkcyB3aGF0IHdlIHN1cHBvcnQKLQkgKi8KLQlzdGF0dXMgPSBiZV9jbWRfcnhfZmlsdGVyKGFkYXB0ZXIsIElGRl9BTExNVUxUSSwgT04pOwotCWlmICghc3RhdHVzKQotCQlhZGFwdGVyLT5mbGFncyB8PSBCRV9GTEFHU19NQ0FTVF9QUk9NSVNDOwotZG9uZToKLQlyZXR1cm47CisJaWYgKG5ldGRldl91Y19jb3VudChuZXRkZXYpICE9IGFkYXB0ZXItPnVjX21hY3MpCisJCWJlX3NldF91Y19saXN0KGFkYXB0ZXIpOworCisJYmVfc2V0X21jX2xpc3QoYWRhcHRlcik7CiB9CiAKIHN0YXRpYyBpbnQgYmVfc2V0X3ZmX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsIHU4ICptYWMpCkBAIC0xOTU5LDMyICsyMDExLDM0IEBACiBzdGF0aWMgdTE2IGJlX3R4X2NvbXBsX3Byb2Nlc3Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQkgICAgICAgc3RydWN0IGJlX3R4X29iaiAqdHhvLCB1MTYgbGFzdF9pbmRleCkKIHsKLQlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxID0gJnR4by0+cTsKLQlzdHJ1Y3QgYmVfZXRoX3dyYiAqd3JiOwogCXN0cnVjdCBza19idWZmICoqc2VudF9za2JzID0gdHhvLT5zZW50X3NrYl9saXN0OwotCXN0cnVjdCBza19idWZmICpzZW50X3NrYjsKLQl1MTYgY3VyX2luZGV4LCBudW1fd3JicyA9IDE7IC8qIGFjY291bnQgZm9yIGhkciB3cmIgKi8KLQlib29sIHVubWFwX3NrYl9oZHIgPSB0cnVlOwotCi0Jc2VudF9za2IgPSBzZW50X3NrYnNbdHhxLT50YWlsXTsKLQlCVUdfT04oIXNlbnRfc2tiKTsKLQlzZW50X3NrYnNbdHhxLT50YWlsXSA9IE5VTEw7Ci0KLQkvKiBza2lwIGhlYWRlciB3cmIgKi8KLQlxdWV1ZV90YWlsX2luYyh0eHEpOworCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eHEgPSAmdHhvLT5xOworCXUxNiBmcmFnX2luZGV4LCBudW1fd3JicyA9IDA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisJYm9vbCB1bm1hcF9za2JfaGRyID0gZmFsc2U7CisJc3RydWN0IGJlX2V0aF93cmIgKndyYjsKIAogCWRvIHsKLQkJY3VyX2luZGV4ID0gdHhxLT50YWlsOworCQlpZiAoc2VudF9za2JzW3R4cS0+dGFpbF0pIHsKKwkJCS8qIEZyZWUgc2tiIGZyb20gcHJldiByZXEgKi8KKwkJCWlmIChza2IpCisJCQkJZGV2X2NvbnN1bWVfc2tiX2FueShza2IpOworCQkJc2tiID0gc2VudF9za2JzW3R4cS0+dGFpbF07CisJCQlzZW50X3NrYnNbdHhxLT50YWlsXSA9IE5VTEw7CisJCQlxdWV1ZV90YWlsX2luYyh0eHEpOyAgLyogc2tpcCBoZHIgd3JiICovCisJCQludW1fd3JicysrOworCQkJdW5tYXBfc2tiX2hkciA9IHRydWU7CisJCX0KIAkJd3JiID0gcXVldWVfdGFpbF9ub2RlKHR4cSk7CisJCWZyYWdfaW5kZXggPSB0eHEtPnRhaWw7CiAJCXVubWFwX3R4X2ZyYWcoJmFkYXB0ZXItPnBkZXYtPmRldiwgd3JiLAotCQkJICAgICAgKHVubWFwX3NrYl9oZHIgJiYgc2tiX2hlYWRsZW4oc2VudF9za2IpKSk7CisJCQkgICAgICAodW5tYXBfc2tiX2hkciAmJiBza2JfaGVhZGxlbihza2IpKSk7CiAJCXVubWFwX3NrYl9oZHIgPSBmYWxzZTsKLQotCQludW1fd3JicysrOwogCQlxdWV1ZV90YWlsX2luYyh0eHEpOwotCX0gd2hpbGUgKGN1cl9pbmRleCAhPSBsYXN0X2luZGV4KTsKKwkJbnVtX3dyYnMrKzsKKwl9IHdoaWxlIChmcmFnX2luZGV4ICE9IGxhc3RfaW5kZXgpOworCWRldl9jb25zdW1lX3NrYl9hbnkoc2tiKTsKIAotCWRldl9jb25zdW1lX3NrYl9hbnkoc2VudF9za2IpOwogCXJldHVybiBudW1fd3JiczsKIH0KIApAQCAtMjA2OCwxMiArMjEyMiwxMSBAQAogCiBzdGF0aWMgdm9pZCBiZV90eF9jb21wbF9jbGVhbihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKKwl1MTYgZW5kX2lkeCwgbm90aWZpZWRfaWR4LCBjbXBsID0gMCwgdGltZW8gPSAwLCBudW1fd3JicyA9IDA7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFkYXB0ZXItPnBkZXYtPmRldjsKIAlzdHJ1Y3QgYmVfdHhfb2JqICp0eG87CiAJc3RydWN0IGJlX3F1ZXVlX2luZm8gKnR4cTsKIAlzdHJ1Y3QgYmVfZXRoX3R4X2NvbXBsICp0eGNwOwotCXUxNiBlbmRfaWR4LCBjbXBsID0gMCwgdGltZW8gPSAwLCBudW1fd3JicyA9IDA7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNlbnRfc2tiOwotCWJvb2wgZHVtbXlfd3JiOwogCWludCBpLCBwZW5kaW5nX3R4cXM7CiAKIAkvKiBTdG9wIHBvbGxpbmcgZm9yIGNvbXBscyB3aGVuIEhXIGhhcyBiZWVuIHNpbGVudCBmb3IgMTBtcyAqLwpAQCAtMjA5NSw3ICsyMTQ4LDcgQEAKIAkJCQlhdG9taWNfc3ViKG51bV93cmJzLCAmdHhxLT51c2VkKTsKIAkJCQl0aW1lbyA9IDA7CiAJCQl9Ci0JCQlpZiAoYXRvbWljX3JlYWQoJnR4cS0+dXNlZCkgPT0gMCkKKwkJCWlmIChhdG9taWNfcmVhZCgmdHhxLT51c2VkKSA9PSB0eG8tPnBlbmRfd3JiX2NudCkKIAkJCQlwZW5kaW5nX3R4cXMtLTsKIAkJfQogCkBAIC0yMTA1LDIxICsyMTU4LDI5IEBACiAJCW1kZWxheSgxKTsKIAl9IHdoaWxlICh0cnVlKTsKIAorCS8qIEZyZWUgZW5xdWV1ZWQgVFggdGhhdCB3YXMgbmV2ZXIgbm90aWZpZWQgdG8gSFcgKi8KIAlmb3JfYWxsX3R4X3F1ZXVlcyhhZGFwdGVyLCB0eG8sIGkpIHsKIAkJdHhxID0gJnR4by0+cTsKLQkJaWYgKGF0b21pY19yZWFkKCZ0eHEtPnVzZWQpKQotCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiJWQgcGVuZGluZyB0eC1jb21wbHNcbiIsCi0JCQkJYXRvbWljX3JlYWQoJnR4cS0+dXNlZCkpOwogCi0JCS8qIGZyZWUgcG9zdGVkIHR4IGZvciB3aGljaCBjb21wbHMgd2lsbCBuZXZlciBhcnJpdmUgKi8KLQkJd2hpbGUgKGF0b21pY19yZWFkKCZ0eHEtPnVzZWQpKSB7Ci0JCQlzZW50X3NrYiA9IHR4by0+c2VudF9za2JfbGlzdFt0eHEtPnRhaWxdOworCQlpZiAoYXRvbWljX3JlYWQoJnR4cS0+dXNlZCkpIHsKKwkJCWRldl9pbmZvKGRldiwgInR4cSVkOiBjbGVhbmluZyAlZCBwZW5kaW5nIHR4LXdyYnNcbiIsCisJCQkJIGksIGF0b21pY19yZWFkKCZ0eHEtPnVzZWQpKTsKKwkJCW5vdGlmaWVkX2lkeCA9IHR4cS0+dGFpbDsKIAkJCWVuZF9pZHggPSB0eHEtPnRhaWw7Ci0JCQludW1fd3JicyA9IHdyYl9jbnRfZm9yX3NrYihhZGFwdGVyLCBzZW50X3NrYiwKLQkJCQkJCSAgICZkdW1teV93cmIpOwotCQkJaW5kZXhfYWR2KCZlbmRfaWR4LCBudW1fd3JicyAtIDEsIHR4cS0+bGVuKTsKKwkJCWluZGV4X2FkdigmZW5kX2lkeCwgYXRvbWljX3JlYWQoJnR4cS0+dXNlZCkgLSAxLAorCQkJCSAgdHhxLT5sZW4pOworCQkJLyogVXNlIHRoZSB0eC1jb21wbCBwcm9jZXNzIGxvZ2ljIHRvIGhhbmRsZSByZXF1ZXN0cworCQkJICogdGhhdCB3ZXJlIG5vdCBzZW50IHRvIHRoZSBIVy4KKwkJCSAqLwogCQkJbnVtX3dyYnMgPSBiZV90eF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIHR4bywgZW5kX2lkeCk7CiAJCQlhdG9taWNfc3ViKG51bV93cmJzLCAmdHhxLT51c2VkKTsKKwkJCUJVR19PTihhdG9taWNfcmVhZCgmdHhxLT51c2VkKSk7CisJCQl0eG8tPnBlbmRfd3JiX2NudCA9IDA7CisJCQkvKiBTaW5jZSBodyB3YXMgbmV2ZXIgbm90aWZpZWQgb2YgdGhlc2UgcmVxdWVzdHMsCisJCQkgKiByZXNldCBUWFEgaW5kaWNlcworCQkJICovCisJCQl0eHEtPmhlYWQgPSBub3RpZmllZF9pZHg7CisJCQl0eHEtPnRhaWwgPSBub3RpZmllZF9pZHg7CiAJCX0KIAl9CiB9CkBAIC0yNTE0LDYgKzI1NzUsMTA2IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTEwKK3N0YXRpYyBpbmxpbmUgYm9vbCBiZV9sb2NrX25hcGkoc3RydWN0IGJlX2VxX29iaiAqZXFvKQoreworCWJvb2wgc3RhdHVzID0gdHJ1ZTsKKworCXNwaW5fbG9jaygmZXFvLT5sb2NrKTsgLyogQkggaXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCWlmIChlcW8tPnN0YXRlICYgQkVfRVFfTE9DS0VEKSB7CisJCVdBUk5fT04oZXFvLT5zdGF0ZSAmIEJFX0VRX05BUEkpOworCQllcW8tPnN0YXRlIHw9IEJFX0VRX05BUElfWUlFTEQ7CisJCXN0YXR1cyA9IGZhbHNlOworCX0gZWxzZSB7CisJCWVxby0+c3RhdGUgPSBCRV9FUV9OQVBJOworCX0KKwlzcGluX3VubG9jaygmZXFvLT5sb2NrKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmVfdW5sb2NrX25hcGkoc3RydWN0IGJlX2VxX29iaiAqZXFvKQoreworCXNwaW5fbG9jaygmZXFvLT5sb2NrKTsgLyogQkggaXMgYWxyZWFkeSBkaXNhYmxlZCAqLworCisJV0FSTl9PTihlcW8tPnN0YXRlICYgKEJFX0VRX1BPTEwgfCBCRV9FUV9OQVBJX1lJRUxEKSk7CisJZXFvLT5zdGF0ZSA9IEJFX0VRX0lETEU7CisKKwlzcGluX3VubG9jaygmZXFvLT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGJlX2xvY2tfYnVzeV9wb2xsKHN0cnVjdCBiZV9lcV9vYmogKmVxbykKK3sKKwlib29sIHN0YXR1cyA9IHRydWU7CisKKwlzcGluX2xvY2tfYmgoJmVxby0+bG9jayk7CisJaWYgKGVxby0+c3RhdGUgJiBCRV9FUV9MT0NLRUQpIHsKKwkJZXFvLT5zdGF0ZSB8PSBCRV9FUV9QT0xMX1lJRUxEOworCQlzdGF0dXMgPSBmYWxzZTsKKwl9IGVsc2UgeworCQllcW8tPnN0YXRlIHw9IEJFX0VRX1BPTEw7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZlcW8tPmxvY2spOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZV91bmxvY2tfYnVzeV9wb2xsKHN0cnVjdCBiZV9lcV9vYmogKmVxbykKK3sKKwlzcGluX2xvY2tfYmgoJmVxby0+bG9jayk7CisKKwlXQVJOX09OKGVxby0+c3RhdGUgJiAoQkVfRVFfTkFQSSkpOworCWVxby0+c3RhdGUgPSBCRV9FUV9JRExFOworCisJc3Bpbl91bmxvY2tfYmgoJmVxby0+bG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZV9lbmFibGVfYnVzeV9wb2xsKHN0cnVjdCBiZV9lcV9vYmogKmVxbykKK3sKKwlzcGluX2xvY2tfaW5pdCgmZXFvLT5sb2NrKTsKKwllcW8tPnN0YXRlID0gQkVfRVFfSURMRTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJlX2Rpc2FibGVfYnVzeV9wb2xsKHN0cnVjdCBiZV9lcV9vYmogKmVxbykKK3sKKwlsb2NhbF9iaF9kaXNhYmxlKCk7CisKKwkvKiBJdCdzIGVub3VnaCB0byBqdXN0IGFjcXVpcmUgbmFwaSBsb2NrIG9uIHRoZSBlcW8gdG8gc3RvcAorCSAqIGJlX2J1c3lfcG9sbCgpIGZyb20gcHJvY2Vzc2luZyBhbnkgcXVldWV1cy4KKwkgKi8KKwl3aGlsZSAoIWJlX2xvY2tfbmFwaShlcW8pKQorCQltZGVsYXkoMSk7CisKKwlsb2NhbF9iaF9lbmFibGUoKTsKK30KKworI2Vsc2UgLyogQ09ORklHX05FVF9SWF9CVVNZX1BPTEwgKi8KKworc3RhdGljIGlubGluZSBib29sIGJlX2xvY2tfbmFwaShzdHJ1Y3QgYmVfZXFfb2JqICplcW8pCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZV91bmxvY2tfbmFwaShzdHJ1Y3QgYmVfZXFfb2JqICplcW8pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBiZV9sb2NrX2J1c3lfcG9sbChzdHJ1Y3QgYmVfZXFfb2JqICplcW8pCit7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmVfdW5sb2NrX2J1c3lfcG9sbChzdHJ1Y3QgYmVfZXFfb2JqICplcW8pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZV9lbmFibGVfYnVzeV9wb2xsKHN0cnVjdCBiZV9lcV9vYmogKmVxbykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJlX2Rpc2FibGVfYnVzeV9wb2xsKHN0cnVjdCBiZV9lcV9vYmogKmVxbykKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTCAqLworCiBpbnQgYmVfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CiAJc3RydWN0IGJlX2VxX29iaiAqZXFvID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBiZV9lcV9vYmosIG5hcGkpOwpAQCAtMjgzMywxMSArMjk5NCw3IEBACiAJYmVfdHhfY29tcGxfY2xlYW4oYWRhcHRlcik7CiAKIAliZV9yeF9xc19kZXN0cm95KGFkYXB0ZXIpOwotCi0JZm9yIChpID0gMTsgaSA8IChhZGFwdGVyLT51Y19tYWNzICsgMSk7IGkrKykKLQkJYmVfY21kX3BtYWNfZGVsKGFkYXB0ZXIsIGFkYXB0ZXItPmlmX2hhbmRsZSwKLQkJCQlhZGFwdGVyLT5wbWFjX2lkW2ldLCAwKTsKLQlhZGFwdGVyLT51Y19tYWNzID0gMDsKKwliZV9jbGVhcl91Y19saXN0KGFkYXB0ZXIpOwogCiAJZm9yX2FsbF9ldnRfcXVldWVzKGFkYXB0ZXIsIGVxbywgaSkgewogCQlpZiAobXNpeF9lbmFibGVkKGFkYXB0ZXIpKQpAQCAtMzAwOCw2ICszMTY1LDE5IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorc3RhdGljIHZvaWQgYmVfdmZfZXRoX2FkZHJfZ2VuZXJhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICptYWMpCit7CisJdTMyIGFkZHI7CisKKwlhZGRyID0gamhhc2goYWRhcHRlci0+bmV0ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4sIDApOworCisJbWFjWzVdID0gKHU4KShhZGRyICYgMHhGRik7CisJbWFjWzRdID0gKHU4KSgoYWRkciA+PiA4KSAmIDB4RkYpOworCW1hY1szXSA9ICh1OCkoKGFkZHIgPj4gMTYpICYgMHhGRik7CisJLyogVXNlIHRoZSBPVUkgZnJvbSB0aGUgY3VycmVudCBNQUMgYWRkcmVzcyAqLworCW1lbWNweShtYWMsIGFkYXB0ZXItPm5ldGRldi0+ZGV2X2FkZHIsIDMpOworfQorCiAvKgogICogR2VuZXJhdGUgYSBzZWVkIE1BQyBhZGRyZXNzIGZyb20gdGhlIFBGIE1BQyBBZGRyZXNzIHVzaW5nIGpoYXNoLgogICogTUFDIEFkZHJlc3MgZm9yIFZGcyBhcmUgYXNzaWduZWQgaW5jcmVtZW50YWxseSBzdGFydGluZyBmcm9tIHRoZSBzZWVkLgpAQCAtMzEwOCwxNCArMzI3OCw5IEBACiAKIHN0YXRpYyB2b2lkIGJlX21hY19jbGVhcihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgaTsKLQogCWlmIChhZGFwdGVyLT5wbWFjX2lkKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAoYWRhcHRlci0+dWNfbWFjcyArIDEpOyBpKyspCi0JCQliZV9jbWRfcG1hY19kZWwoYWRhcHRlciwgYWRhcHRlci0+aWZfaGFuZGxlLAotCQkJCQlhZGFwdGVyLT5wbWFjX2lkW2ldLCAwKTsKLQkJYWRhcHRlci0+dWNfbWFjcyA9IDA7Ci0KKwkJYmVfY21kX3BtYWNfZGVsKGFkYXB0ZXIsIGFkYXB0ZXItPmlmX2hhbmRsZSwKKwkJCQlhZGFwdGVyLT5wbWFjX2lkWzBdLCAwKTsKIAkJa2ZyZWUoYWRhcHRlci0+cG1hY19pZCk7CiAJCWFkYXB0ZXItPnBtYWNfaWQgPSBOVUxMOwogCX0KQEAgLTMxNzEsMTMgKzMzMzYsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBiZV9pZl9jcmVhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiAqaWZfaGFuZGxlLAorCQkJdTMyIGNhcF9mbGFncywgdTMyIHZmKQoreworCXUzMiBlbl9mbGFnczsKKwlpbnQgc3RhdHVzOworCisJZW5fZmxhZ3MgPSBCRV9JRl9GTEFHU19VTlRBR0dFRCB8IEJFX0lGX0ZMQUdTX0JST0FEQ0FTVCB8CisJCSAgIEJFX0lGX0ZMQUdTX01VTFRJQ0FTVCB8IEJFX0lGX0ZMQUdTX1BBU1NfTDNMNF9FUlJPUlMgfAorCQkgICBCRV9JRl9GTEFHU19SU1M7CisKKwllbl9mbGFncyAmPSBjYXBfZmxhZ3M7CisKKwlzdGF0dXMgPSBiZV9jbWRfaWZfY3JlYXRlKGFkYXB0ZXIsIGNhcF9mbGFncywgZW5fZmxhZ3MsCisJCQkJICBpZl9oYW5kbGUsIHZmKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKIHN0YXRpYyBpbnQgYmVfdmZzX2lmX2NyZWF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgYmVfcmVzb3VyY2VzIHJlcyA9IHswfTsKIAlzdHJ1Y3QgYmVfdmZfY2ZnICp2Zl9jZmc7Ci0JdTMyIGNhcF9mbGFncywgZW5fZmxhZ3MsIHZmOwotCWludCBzdGF0dXMgPSAwOworCXUzMiBjYXBfZmxhZ3MsIHZmOworCWludCBzdGF0dXM7CiAKKwkvKiBJZiBhIEZXIHByb2ZpbGUgZXhpc3RzLCB0aGVuIGNhcF9mbGFncyBhcmUgdXBkYXRlZCAqLwogCWNhcF9mbGFncyA9IEJFX0lGX0ZMQUdTX1VOVEFHR0VEIHwgQkVfSUZfRkxBR1NfQlJPQURDQVNUIHwKIAkJICAgIEJFX0lGX0ZMQUdTX01VTFRJQ0FTVDsKIApAQCAtMzE4OSwxOCArMzM3MywxMyBAQAogCQkJCWNhcF9mbGFncyA9IHJlcy5pZl9jYXBfZmxhZ3M7CiAJCX0KIAotCQkvKiBJZiBhIEZXIHByb2ZpbGUgZXhpc3RzLCB0aGVuIGNhcF9mbGFncyBhcmUgdXBkYXRlZCAqLwotCQllbl9mbGFncyA9IGNhcF9mbGFncyAmIChCRV9JRl9GTEFHU19VTlRBR0dFRCB8Ci0JCQkJCUJFX0lGX0ZMQUdTX0JST0FEQ0FTVCB8Ci0JCQkJCUJFX0lGX0ZMQUdTX01VTFRJQ0FTVCk7Ci0JCXN0YXR1cyA9Ci0JCSAgICBiZV9jbWRfaWZfY3JlYXRlKGFkYXB0ZXIsIGNhcF9mbGFncywgZW5fZmxhZ3MsCi0JCQkJICAgICAmdmZfY2ZnLT5pZl9oYW5kbGUsIHZmICsgMSk7CisJCXN0YXR1cyA9IGJlX2lmX2NyZWF0ZShhZGFwdGVyLCAmdmZfY2ZnLT5pZl9oYW5kbGUsCisJCQkJICAgICAgY2FwX2ZsYWdzLCB2ZiArIDEpOwogCQlpZiAoc3RhdHVzKQotCQkJZ290byBlcnI7CisJCQlyZXR1cm4gc3RhdHVzOwogCX0KLWVycjoKLQlyZXR1cm4gc3RhdHVzOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYmVfdmZfc2V0dXBfaW5pdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKQEAgLTMzODUsNyArMzU2NCw3IEBACiAJYWRhcHRlci0+cGh5Lmxpbmtfc3BlZWQgPSAtMTsKIAlhZGFwdGVyLT5pZl9oYW5kbGUgPSAtMTsKIAlhZGFwdGVyLT5iZTNfbmF0aXZlID0gZmFsc2U7Ci0JYWRhcHRlci0+cHJvbWlzY3VvdXMgPSBmYWxzZTsKKwlhZGFwdGVyLT5pZl9mbGFncyA9IDA7CiAJaWYgKGJlX3BoeXNmbihhZGFwdGVyKSkKIAkJYWRhcHRlci0+Y21kX3ByaXZpbGVnZXMgPSBNQVhfUFJJVklMRUdFUzsKIAllbHNlCkBAIC0zNTEyLDcgKzM2OTEsOSBAQAogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKLQkgaWYgKGJlX3BoeXNmbihhZGFwdGVyKSkgeworCWJlX2NtZF9xdWVyeV9wb3J0X25hbWUoYWRhcHRlcik7CisKKwlpZiAoYmVfcGh5c2ZuKGFkYXB0ZXIpKSB7CiAJCXN0YXR1cyA9IGJlX2NtZF9nZXRfYWN0aXZlX3Byb2ZpbGUoYWRhcHRlciwgJnByb2ZpbGVfaWQpOwogCQlpZiAoIXN0YXR1cykKIAkJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsCkBAIC0zNjM4LDEwICszODE5LDIwIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZndfbWFqb3JfbnVtKGNvbnN0IGNoYXIgKmZ3X3ZlcikKK3sKKwlpbnQgZndfbWFqb3IgPSAwLCBpOworCisJaSA9IHNzY2FuZihmd192ZXIsICIlZC4iLCAmZndfbWFqb3IpOworCWlmIChpICE9IDEpCisJCXJldHVybiAwOworCisJcmV0dXJuIGZ3X21ham9yOworfQorCiBzdGF0aWMgaW50IGJlX3NldHVwKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhZGFwdGVyLT5wZGV2LT5kZXY7Ci0JdTMyIHR4X2ZjLCByeF9mYywgZW5fZmxhZ3M7CiAJaW50IHN0YXR1czsKIAogCWJlX3NldHVwX2luaXQoYWRhcHRlcik7CkBAIC0zNjU3LDEzICszODQ4LDggQEAKIAlpZiAoc3RhdHVzKQogCQlnb3RvIGVycjsKIAotCWVuX2ZsYWdzID0gQkVfSUZfRkxBR1NfVU5UQUdHRUQgfCBCRV9JRl9GTEFHU19CUk9BRENBU1QgfAotCQkgICBCRV9JRl9GTEFHU19NVUxUSUNBU1QgfCBCRV9JRl9GTEFHU19QQVNTX0wzTDRfRVJST1JTOwotCWlmIChhZGFwdGVyLT5mdW5jdGlvbl9jYXBzICYgQkVfRlVOQ1RJT05fQ0FQU19SU1MpCi0JCWVuX2ZsYWdzIHw9IEJFX0lGX0ZMQUdTX1JTUzsKLQllbl9mbGFncyA9IGVuX2ZsYWdzICYgYmVfaWZfY2FwX2ZsYWdzKGFkYXB0ZXIpOwotCXN0YXR1cyA9IGJlX2NtZF9pZl9jcmVhdGUoYWRhcHRlciwgYmVfaWZfY2FwX2ZsYWdzKGFkYXB0ZXIpLCBlbl9mbGFncywKLQkJCQkgICZhZGFwdGVyLT5pZl9oYW5kbGUsIDApOworCXN0YXR1cyA9IGJlX2lmX2NyZWF0ZShhZGFwdGVyLCAmYWRhcHRlci0+aWZfaGFuZGxlLAorCQkJICAgICAgYmVfaWZfY2FwX2ZsYWdzKGFkYXB0ZXIpLCAwKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIGVycjsKIApAQCAtMzY5NiwxMSArMzg4MiwxNCBAQAogCiAJYmVfY21kX2dldF9hY3BpX3dvbF9jYXAoYWRhcHRlcik7CiAKLQliZV9jbWRfZ2V0X2Zsb3dfY29udHJvbChhZGFwdGVyLCAmdHhfZmMsICZyeF9mYyk7CisJc3RhdHVzID0gYmVfY21kX3NldF9mbG93X2NvbnRyb2woYWRhcHRlciwgYWRhcHRlci0+dHhfZmMsCisJCQkJCSBhZGFwdGVyLT5yeF9mYyk7CisJaWYgKHN0YXR1cykKKwkJYmVfY21kX2dldF9mbG93X2NvbnRyb2woYWRhcHRlciwgJmFkYXB0ZXItPnR4X2ZjLAorCQkJCQkmYWRhcHRlci0+cnhfZmMpOwogCi0JaWYgKHJ4X2ZjICE9IGFkYXB0ZXItPnJ4X2ZjIHx8IHR4X2ZjICE9IGFkYXB0ZXItPnR4X2ZjKQotCQliZV9jbWRfc2V0X2Zsb3dfY29udHJvbChhZGFwdGVyLCBhZGFwdGVyLT50eF9mYywKLQkJCQkJYWRhcHRlci0+cnhfZmMpOworCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJIVyBGbG93IGNvbnRyb2wgLSBUWDolZCBSWDolZFxuIiwKKwkJIGFkYXB0ZXItPnR4X2ZjLCBhZGFwdGVyLT5yeF9mYyk7CiAKIAlpZiAoYmVfcGh5c2ZuKGFkYXB0ZXIpKQogCQliZV9jbWRfc2V0X2xvZ2ljYWxfbGlua19jb25maWcoYWRhcHRlciwKQEAgLTM3MzksNyArMzkyOCw3IEBACiAKIHN0YXRpYyBib29sIHBoeV9mbGFzaGluZ19yZXF1aXJlZChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlyZXR1cm4gKGFkYXB0ZXItPnBoeS5waHlfdHlwZSA9PSBUTl84MDIyICYmCisJcmV0dXJuIChhZGFwdGVyLT5waHkucGh5X3R5cGUgPT0gUEhZX1RZUEVfVE5fODAyMiAmJgogCQlhZGFwdGVyLT5waHkuaW50ZXJmYWNlX3R5cGUgPT0gUEhZX1RZUEVfQkFTRVRfMTBHQik7CiB9CiAKQEAgLTM3OTAsNyArMzk3OSw4IEBACiAJaW50IHN0YXR1czsKIAl1OCBjcmNbNF07CiAKLQlzdGF0dXMgPSBiZV9jbWRfZ2V0X2ZsYXNoX2NyYyhhZGFwdGVyLCBjcmMsIGltZ19vcHR5cGUsIGltZ19zaXplIC0gNCk7CisJc3RhdHVzID0gYmVfY21kX2dldF9mbGFzaF9jcmMoYWRhcHRlciwgY3JjLCBpbWdfb3B0eXBlLCBpbWdfb2Zmc2V0LAorCQkJCSAgICAgIGltZ19zaXplIC0gNCk7CiAJaWYgKHN0YXR1cykKIAkJcmV0dXJuIHN0YXR1czsKIApAQCAtMzgwNiwxMyArMzk5NiwxMyBAQAogfQogCiBzdGF0aWMgaW50IGJlX2ZsYXNoKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCBjb25zdCB1OCAqaW1nLAotCQkgICAgc3RydWN0IGJlX2RtYV9tZW0gKmZsYXNoX2NtZCwgaW50IG9wdHlwZSwgaW50IGltZ19zaXplKQorCQkgICAgc3RydWN0IGJlX2RtYV9tZW0gKmZsYXNoX2NtZCwgaW50IG9wdHlwZSwgaW50IGltZ19zaXplLAorCQkgICAgdTMyIGltZ19vZmZzZXQpCiB7CisJdTMyIGZsYXNoX29wLCBudW1fYnl0ZXMsIHRvdGFsX2J5dGVzID0gaW1nX3NpemUsIGJ5dGVzX3NlbnQgPSAwOwogCXN0cnVjdCBiZV9jbWRfd3JpdGVfZmxhc2hyb20gKnJlcSA9IGZsYXNoX2NtZC0+dmE7Ci0JdTMyIHRvdGFsX2J5dGVzLCBmbGFzaF9vcCwgbnVtX2J5dGVzOwogCWludCBzdGF0dXM7CiAKLQl0b3RhbF9ieXRlcyA9IGltZ19zaXplOwogCXdoaWxlICh0b3RhbF9ieXRlcykgewogCQludW1fYnl0ZXMgPSBtaW5fdCh1MzIsIDMyKjEwMjQsIHRvdGFsX2J5dGVzKTsKIApAQCAtMzgzMywxMiArNDAyMywxNSBAQAogCQltZW1jcHkocmVxLT5kYXRhX2J1ZiwgaW1nLCBudW1fYnl0ZXMpOwogCQlpbWcgKz0gbnVtX2J5dGVzOwogCQlzdGF0dXMgPSBiZV9jbWRfd3JpdGVfZmxhc2hyb20oYWRhcHRlciwgZmxhc2hfY21kLCBvcHR5cGUsCi0JCQkJCSAgICAgICBmbGFzaF9vcCwgbnVtX2J5dGVzKTsKKwkJCQkJICAgICAgIGZsYXNoX29wLCBpbWdfb2Zmc2V0ICsKKwkJCQkJICAgICAgIGJ5dGVzX3NlbnQsIG51bV9ieXRlcyk7CiAJCWlmIChiYXNlX3N0YXR1cyhzdGF0dXMpID09IE1DQ19TVEFUVVNfSUxMRUdBTF9SRVFVRVNUICYmCiAJCSAgICBvcHR5cGUgPT0gT1BUWVBFX1BIWV9GVykKIAkJCWJyZWFrOwogCQllbHNlIGlmIChzdGF0dXMpCiAJCQlyZXR1cm4gc3RhdHVzOworCisJCWJ5dGVzX3NlbnQgKz0gbnVtX2J5dGVzOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTM5MDYsNiArNDA5OSw3IEBACiAJCXBmbGFzaGNvbXAgPSBnZW4yX2ZsYXNoX3R5cGVzOwogCQlmaWxlaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGZsYXNoX2ZpbGVfaGRyX2cyKTsKIAkJbnVtX2NvbXAgPSBBUlJBWV9TSVpFKGdlbjJfZmxhc2hfdHlwZXMpOworCQlpbWdfaGRyc19zaXplID0gMDsKIAl9CiAKIAkvKiBHZXQgZmxhc2ggc2VjdGlvbiBpbmZvKi8KQEAgLTM5NTAsNyArNDE0NCw3IEBACiAJCQlyZXR1cm4gLTE7CiAKIAkJc3RhdHVzID0gYmVfZmxhc2goYWRhcHRlciwgcCwgZmxhc2hfY21kLCBwZmxhc2hjb21wW2ldLm9wdHlwZSwKLQkJCQkgIHBmbGFzaGNvbXBbaV0uc2l6ZSk7CisJCQkJICBwZmxhc2hjb21wW2ldLnNpemUsIDApOwogCQlpZiAoc3RhdHVzKSB7CiAJCQlkZXZfZXJyKGRldiwgIkZsYXNoaW5nIHNlY3Rpb24gdHlwZSAweCV4IGZhaWxlZFxuIiwKIAkJCQlwZmxhc2hjb21wW2ldLmltZ190eXBlKTsKQEAgLTQwMTcsMTIgKzQyMTEsMTIgQEAKIAkJCSAgICBzdHJ1Y3QgYmVfZG1hX21lbSAqZmxhc2hfY21kLCBpbnQgbnVtX29mX2ltYWdlcykKIHsKIAlpbnQgaW1nX2hkcnNfc2l6ZSA9IG51bV9vZl9pbWFnZXMgKiBzaXplb2Yoc3RydWN0IGltYWdlX2hkcik7CisJYm9vbCBjcmNfbWF0Y2gsIG9sZF9md19pbWcsIGZsYXNoX29mZnNldF9zdXBwb3J0ID0gdHJ1ZTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYWRhcHRlci0+cGRldi0+ZGV2OwogCXN0cnVjdCBmbGFzaF9zZWN0aW9uX2luZm8gKmZzZWMgPSBOVUxMOwogCXUzMiBpbWdfb2Zmc2V0LCBpbWdfc2l6ZSwgaW1nX3R5cGU7CisJdTE2IGltZ19vcHR5cGUsIGZsYXNoX29wdHlwZTsKIAlpbnQgc3RhdHVzLCBpLCBmaWxlaGRyX3NpemU7Ci0JYm9vbCBjcmNfbWF0Y2gsIG9sZF9md19pbWc7Ci0JdTE2IGltZ19vcHR5cGU7CiAJY29uc3QgdTggKnA7CiAKIAlmaWxlaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGZsYXNoX2ZpbGVfaGRyX2czKTsKQEAgLTQwMzIsNiArNDIyNiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorcmV0cnlfZmxhc2g6CiAJZm9yIChpID0gMDsgaSA8IGxlMzJfdG9fY3B1KGZzZWMtPmZzZWNfaGRyLm51bV9pbWFnZXMpOyBpKyspIHsKIAkJaW1nX29mZnNldCA9IGxlMzJfdG9fY3B1KGZzZWMtPmZzZWNfZW50cnlbaV0ub2Zmc2V0KTsKIAkJaW1nX3NpemUgICA9IGxlMzJfdG9fY3B1KGZzZWMtPmZzZWNfZW50cnlbaV0ucGFkX3NpemUpOwpAQCAtNDA0MSw2ICs0MjM2LDEyIEBACiAKIAkJaWYgKGltZ19vcHR5cGUgPT0gMHhGRkZGKQogCQkJY29udGludWU7CisKKwkJaWYgKGZsYXNoX29mZnNldF9zdXBwb3J0KQorCQkJZmxhc2hfb3B0eXBlID0gT1BUWVBFX09GRlNFVF9TUEVDSUZJRUQ7CisJCWVsc2UKKwkJCWZsYXNoX29wdHlwZSA9IGltZ19vcHR5cGU7CisKIAkJLyogRG9uJ3QgYm90aGVyIHZlcmlmeWluZyBDUkMgaWYgYW4gb2xkIEZXIGltYWdlIGlzIGJlaW5nCiAJCSAqIGZsYXNoZWQKIAkJICovCkBAIC00MDQ5LDE2ICs0MjUwLDI2IEBACiAKIAkJc3RhdHVzID0gYmVfY2hlY2tfZmxhc2hfY3JjKGFkYXB0ZXIsIGZ3LT5kYXRhLCBpbWdfb2Zmc2V0LAogCQkJCQkgICAgaW1nX3NpemUsIGZpbGVoZHJfc2l6ZSArCi0JCQkJCSAgICBpbWdfaGRyc19zaXplLCBpbWdfb3B0eXBlLAorCQkJCQkgICAgaW1nX2hkcnNfc2l6ZSwgZmxhc2hfb3B0eXBlLAogCQkJCQkgICAgJmNyY19tYXRjaCk7Ci0JCS8qIFRoZSBjdXJyZW50IEZXIGltYWdlIG9uIHRoZSBjYXJkIGRvZXMgbm90IHJlY29nbml6ZSB0aGUgbmV3Ci0JCSAqIEZMQVNIIG9wX3R5cGUuIFRoZSBGVyBkb3dubG9hZCBpcyBwYXJ0aWFsbHkgY29tcGxldGUuCi0JCSAqIFJlYm9vdCB0aGUgc2VydmVyIG5vdyB0byBlbmFibGUgRlcgaW1hZ2UgdG8gcmVjb2duaXplIHRoZQotCQkgKiBuZXcgRkxBU0ggb3BfdHlwZS4gVG8gY29tcGxldGUgdGhlIHJlbWFpbmluZyBwcm9jZXNzLAotCQkgKiBkb3dubG9hZCB0aGUgc2FtZSBGVyBhZ2FpbiBhZnRlciB0aGUgcmVib290LgotCQkgKi8KIAkJaWYgKGJhc2Vfc3RhdHVzKHN0YXR1cykgPT0gTUNDX1NUQVRVU19JTExFR0FMX1JFUVVFU1QgfHwKIAkJICAgIGJhc2Vfc3RhdHVzKHN0YXR1cykgPT0gTUNDX1NUQVRVU19JTExFR0FMX0ZJRUxEKSB7CisJCQkvKiBUaGUgY3VycmVudCBGVyBpbWFnZSBvbiB0aGUgY2FyZCBkb2VzIG5vdCBzdXBwb3J0CisJCQkgKiBPRkZTRVQgYmFzZWQgZmxhc2hpbmcuIFJldHJ5IHVzaW5nIG9sZGVyIG1lY2hhbmlzbQorCQkJICogb2YgT1BUWVBFIGJhc2VkIGZsYXNoaW5nCisJCQkgKi8KKwkJCWlmIChmbGFzaF9vcHR5cGUgPT0gT1BUWVBFX09GRlNFVF9TUEVDSUZJRUQpIHsKKwkJCQlmbGFzaF9vZmZzZXRfc3VwcG9ydCA9IGZhbHNlOworCQkJCWdvdG8gcmV0cnlfZmxhc2g7CisJCQl9CisKKwkJCS8qIFRoZSBjdXJyZW50IEZXIGltYWdlIG9uIHRoZSBjYXJkIGRvZXMgbm90IHJlY29nbml6ZQorCQkJICogdGhlIG5ldyBGTEFTSCBvcF90eXBlLiBUaGUgRlcgZG93bmxvYWQgaXMgcGFydGlhbGx5CisJCQkgKiBjb21wbGV0ZS4gUmVib290IHRoZSBzZXJ2ZXIgbm93IHRvIGVuYWJsZSBGVyBpbWFnZQorCQkJICogdG8gcmVjb2duaXplIHRoZSBuZXcgRkxBU0ggb3BfdHlwZS4gVG8gY29tcGxldGUgdGhlCisJCQkgKiByZW1haW5pbmcgcHJvY2VzcywgZG93bmxvYWQgdGhlIHNhbWUgRlcgYWdhaW4gYWZ0ZXIKKwkJCSAqIHRoZSByZWJvb3QuCisJCQkgKi8KIAkJCWRldl9lcnIoZGV2LCAiRmxhc2ggaW5jb21wbGV0ZS4gUmVzZXQgdGhlIHNlcnZlclxuIik7CiAJCQlkZXZfZXJyKGRldiwgIkRvd25sb2FkIEZXIGltYWdlIGFnYWluIGFmdGVyIHJlc2V0XG4iKTsKIAkJCXJldHVybiAtRUFHQUlOOwpAQCAtNDA3Niw3ICs0Mjg3LDE5IEBACiAJCWlmIChwICsgaW1nX3NpemUgPiBmdy0+ZGF0YSArIGZ3LT5zaXplKQogCQkJcmV0dXJuIC0xOwogCi0JCXN0YXR1cyA9IGJlX2ZsYXNoKGFkYXB0ZXIsIHAsIGZsYXNoX2NtZCwgaW1nX29wdHlwZSwgaW1nX3NpemUpOworCQlzdGF0dXMgPSBiZV9mbGFzaChhZGFwdGVyLCBwLCBmbGFzaF9jbWQsIGZsYXNoX29wdHlwZSwgaW1nX3NpemUsCisJCQkJICBpbWdfb2Zmc2V0KTsKKworCQkvKiBUaGUgY3VycmVudCBGVyBpbWFnZSBvbiB0aGUgY2FyZCBkb2VzIG5vdCBzdXBwb3J0IE9GRlNFVAorCQkgKiBiYXNlZCBmbGFzaGluZy4gUmV0cnkgdXNpbmcgb2xkZXIgbWVjaGFuaXNtIG9mIE9QVFlQRSBiYXNlZAorCQkgKiBmbGFzaGluZworCQkgKi8KKwkJaWYgKGJhc2Vfc3RhdHVzKHN0YXR1cykgPT0gTUNDX1NUQVRVU19JTExFR0FMX0ZJRUxEICYmCisJCSAgICBmbGFzaF9vcHR5cGUgPT0gT1BUWVBFX09GRlNFVF9TUEVDSUZJRUQpIHsKKwkJCWZsYXNoX29mZnNldF9zdXBwb3J0ID0gZmFsc2U7CisJCQlnb3RvIHJldHJ5X2ZsYXNoOworCQl9CisKIAkJLyogRm9yIG9sZCBGVyBpbWFnZXMgaWdub3JlIElMTEVHQUxfRklFTEQgZXJyb3Igb3IgZXJyb3JzIG9uCiAJCSAqIFVGSV9ESVIgcmVnaW9uCiAJCSAqLwpAQCAtNDE3OSw5OCArNDQwMiwxMDUgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBVRklfVFlQRTIJCTIKLSNkZWZpbmUgVUZJX1RZUEUzCQkzCi0jZGVmaW5lIFVGSV9UWVBFM1IJCTEwCi0jZGVmaW5lIFVGSV9UWVBFNAkJNAorI2RlZmluZSBCRTJfVUZJCQkyCisjZGVmaW5lIEJFM19VRkkJCTMKKyNkZWZpbmUgQkUzUl9VRkkJMTAKKyNkZWZpbmUgU0hfVUZJCQk0CisjZGVmaW5lIFNIX1AyX1VGSQkxMQorCiBzdGF0aWMgaW50IGJlX2dldF91ZmlfdHlwZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCSAgIHN0cnVjdCBmbGFzaF9maWxlX2hkcl9nMyAqZmhkcikKIHsKLQlpZiAoIWZoZHIpCi0JCWdvdG8gYmVfZ2V0X3VmaV9leGl0OworCWlmICghZmhkcikgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJJbnZhbGlkIEZXIFVGSSBmaWxlIik7CisJCXJldHVybiAtMTsKKwl9CiAKLQlpZiAoc2t5aGF3a19jaGlwKGFkYXB0ZXIpICYmIGZoZHItPmJ1aWxkWzBdID09ICc0JykKLQkJcmV0dXJuIFVGSV9UWVBFNDsKLQllbHNlIGlmIChCRTNfY2hpcChhZGFwdGVyKSAmJiBmaGRyLT5idWlsZFswXSA9PSAnMycpIHsKLQkJaWYgKGZoZHItPmFzaWNfdHlwZV9yZXYgPT0gMHgxMCkKLQkJCXJldHVybiBVRklfVFlQRTNSOwotCQllbHNlCi0JCQlyZXR1cm4gVUZJX1RZUEUzOwotCX0gZWxzZSBpZiAoQkUyX2NoaXAoYWRhcHRlcikgJiYgZmhkci0+YnVpbGRbMF0gPT0gJzInKQotCQlyZXR1cm4gVUZJX1RZUEUyOworCS8qIEZpcnN0IGxldHRlciBvZiB0aGUgYnVpbGQgdmVyc2lvbiBpcyB1c2VkIHRvIGlkZW50aWZ5CisJICogd2hpY2ggY2hpcCB0aGlzIGltYWdlIGZpbGUgaXMgbWVhbnQgZm9yLgorCSAqLworCXN3aXRjaCAoZmhkci0+YnVpbGRbMF0pIHsKKwljYXNlIEJMRF9TVFJfVUZJX1RZUEVfU0g6CisJCXJldHVybiAoZmhkci0+YXNpY190eXBlX3JldiA9PSBBU0lDX1JFVl9QMikgPyBTSF9QMl9VRkkgOgorCQkJCQkJCQlTSF9VRkk7CisJY2FzZSBCTERfU1RSX1VGSV9UWVBFX0JFMzoKKwkJcmV0dXJuIChmaGRyLT5hc2ljX3R5cGVfcmV2ID09IEFTSUNfUkVWX0IwKSA/IEJFM1JfVUZJIDoKKwkJCQkJCQkJQkUzX1VGSTsKKwljYXNlIEJMRF9TVFJfVUZJX1RZUEVfQkUyOgorCQlyZXR1cm4gQkUyX1VGSTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorfQogCi1iZV9nZXRfdWZpX2V4aXQ6Ci0JZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkiVUZJIGFuZCBJbnRlcmZhY2UgYXJlIG5vdCBjb21wYXRpYmxlIGZvciBmbGFzaGluZ1xuIik7Ci0JcmV0dXJuIC0xOworLyogQ2hlY2sgaWYgdGhlIGZsYXNoIGltYWdlIGZpbGUgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBhZGFwdGVyIHRoYXQKKyAqIGlzIGJlaW5nIGZsYXNoZWQuCisgKiBCRTMgY2hpcHMgd2l0aCBhc2ljLXJldiBCMCBtdXN0IGJlIGZsYXNoZWQgb25seSB3aXRoIEJFM1JfVUZJIHR5cGUuCisgKiBTa3loYXdrIGNoaXBzIHdpdGggYXNpYy1yZXYgUDIgbXVzdCBiZSBmbGFzaGVkIG9ubHkgd2l0aCBTSF9QMl9VRkkgdHlwZS4KKyAqLworc3RhdGljIGJvb2wgYmVfY2hlY2tfdWZpX2NvbXBhdGliaWxpdHkoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgICAgIHN0cnVjdCBmbGFzaF9maWxlX2hkcl9nMyAqZmhkcikKK3sKKwlpbnQgdWZpX3R5cGUgPSBiZV9nZXRfdWZpX3R5cGUoYWRhcHRlciwgZmhkcik7CisKKwlzd2l0Y2ggKHVmaV90eXBlKSB7CisJY2FzZSBTSF9QMl9VRkk6CisJCXJldHVybiBza3loYXdrX2NoaXAoYWRhcHRlcik7CisJY2FzZSBTSF9VRkk6CisJCXJldHVybiAoc2t5aGF3a19jaGlwKGFkYXB0ZXIpICYmCisJCQlhZGFwdGVyLT5hc2ljX3JldiA8IEFTSUNfUkVWX1AyKTsKKwljYXNlIEJFM1JfVUZJOgorCQlyZXR1cm4gQkUzX2NoaXAoYWRhcHRlcik7CisJY2FzZSBCRTNfVUZJOgorCQlyZXR1cm4gKEJFM19jaGlwKGFkYXB0ZXIpICYmIGFkYXB0ZXItPmFzaWNfcmV2IDwgQVNJQ19SRVZfQjApOworCWNhc2UgQkUyX1VGSToKKwkJcmV0dXJuIEJFMl9jaGlwKGFkYXB0ZXIpOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQgYmVfZndfZG93bmxvYWQoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSogZncpCiB7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFkYXB0ZXItPnBkZXYtPmRldjsKIAlzdHJ1Y3QgZmxhc2hfZmlsZV9oZHJfZzMgKmZoZHIzOwotCXN0cnVjdCBpbWFnZV9oZHIgKmltZ19oZHJfcHRyID0gTlVMTDsKKwlzdHJ1Y3QgaW1hZ2VfaGRyICppbWdfaGRyX3B0cjsKKwlpbnQgc3RhdHVzID0gMCwgaSwgbnVtX2ltZ3M7CiAJc3RydWN0IGJlX2RtYV9tZW0gZmxhc2hfY21kOwotCWNvbnN0IHU4ICpwOwotCWludCBzdGF0dXMgPSAwLCBpID0gMCwgbnVtX2ltZ3MgPSAwLCB1ZmlfdHlwZSA9IDA7CiAKLQlmbGFzaF9jbWQuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmVfY21kX3dyaXRlX2ZsYXNocm9tKTsKLQlmbGFzaF9jbWQudmEgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwgZmxhc2hfY21kLnNpemUsCi0JCQkJCSAgJmZsYXNoX2NtZC5kbWEsIEdGUF9LRVJORUwpOwotCWlmICghZmxhc2hfY21kLnZhKSB7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JCWdvdG8gYmVfZndfZXhpdDsKKwlmaGRyMyA9IChzdHJ1Y3QgZmxhc2hfZmlsZV9oZHJfZzMgKilmdy0+ZGF0YTsKKwlpZiAoIWJlX2NoZWNrX3VmaV9jb21wYXRpYmlsaXR5KGFkYXB0ZXIsIGZoZHIzKSkgeworCQlkZXZfZXJyKGRldiwgIkZsYXNoIGltYWdlIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggYWRhcHRlclxuIik7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXAgPSBmdy0+ZGF0YTsKLQlmaGRyMyA9IChzdHJ1Y3QgZmxhc2hfZmlsZV9oZHJfZzMgKilwOwotCi0JdWZpX3R5cGUgPSBiZV9nZXRfdWZpX3R5cGUoYWRhcHRlciwgZmhkcjMpOworCWZsYXNoX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9jbWRfd3JpdGVfZmxhc2hyb20pOworCWZsYXNoX2NtZC52YSA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIGZsYXNoX2NtZC5zaXplLCAmZmxhc2hfY21kLmRtYSwKKwkJCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIWZsYXNoX2NtZC52YSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAludW1faW1ncyA9IGxlMzJfdG9fY3B1KGZoZHIzLT5udW1faW1ncyk7CiAJZm9yIChpID0gMDsgaSA8IG51bV9pbWdzOyBpKyspIHsKIAkJaW1nX2hkcl9wdHIgPSAoc3RydWN0IGltYWdlX2hkciAqKShmdy0+ZGF0YSArCiAJCQkJKHNpemVvZihzdHJ1Y3QgZmxhc2hfZmlsZV9oZHJfZzMpICsKIAkJCQkgaSAqIHNpemVvZihzdHJ1Y3QgaW1hZ2VfaGRyKSkpOwotCQlpZiAobGUzMl90b19jcHUoaW1nX2hkcl9wdHItPmltYWdlaWQpID09IDEpIHsKLQkJCXN3aXRjaCAodWZpX3R5cGUpIHsKLQkJCWNhc2UgVUZJX1RZUEU0OgotCQkJCXN0YXR1cyA9IGJlX2ZsYXNoX3NreWhhd2soYWRhcHRlciwgZncsCi0JCQkJCQkJICAmZmxhc2hfY21kLCBudW1faW1ncyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFVGSV9UWVBFM1I6Ci0JCQkJc3RhdHVzID0gYmVfZmxhc2hfQkV4KGFkYXB0ZXIsIGZ3LCAmZmxhc2hfY21kLAotCQkJCQkJICAgICAgbnVtX2ltZ3MpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBVRklfVFlQRTM6Ci0JCQkJLyogRG8gbm90IGZsYXNoIHRoaXMgdWZpIG9uIEJFMy1SIGNhcmRzICovCi0JCQkJaWYgKGFkYXB0ZXItPmFzaWNfcmV2IDwgMHgxMCkKLQkJCQkJc3RhdHVzID0gYmVfZmxhc2hfQkV4KGFkYXB0ZXIsIGZ3LAotCQkJCQkJCSAgICAgICZmbGFzaF9jbWQsCi0JCQkJCQkJICAgICAgbnVtX2ltZ3MpOwotCQkJCWVsc2UgewotCQkJCQlzdGF0dXMgPSAtRUlOVkFMOwotCQkJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCi0JCQkJCQkiQ2FuJ3QgbG9hZCBCRTMgVUZJIG9uIEJFM1JcbiIpOwotCQkJCX0KLQkJCX0KLQkJfQorCQlpZiAoIUJFMl9jaGlwKGFkYXB0ZXIpICYmCisJCSAgICBsZTMyX3RvX2NwdShpbWdfaGRyX3B0ci0+aW1hZ2VpZCkgIT0gMSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChza3loYXdrX2NoaXAoYWRhcHRlcikpCisJCQlzdGF0dXMgPSBiZV9mbGFzaF9za3loYXdrKGFkYXB0ZXIsIGZ3LCAmZmxhc2hfY21kLAorCQkJCQkJICBudW1faW1ncyk7CisJCWVsc2UKKwkJCXN0YXR1cyA9IGJlX2ZsYXNoX0JFeChhZGFwdGVyLCBmdywgJmZsYXNoX2NtZCwKKwkJCQkJICAgICAgbnVtX2ltZ3MpOwogCX0KIAotCWlmICh1ZmlfdHlwZSA9PSBVRklfVFlQRTIpCi0JCXN0YXR1cyA9IGJlX2ZsYXNoX0JFeChhZGFwdGVyLCBmdywgJmZsYXNoX2NtZCwgMCk7Ci0JZWxzZSBpZiAodWZpX3R5cGUgPT0gLTEpCi0JCXN0YXR1cyA9IC1FSU5WQUw7CisJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBmbGFzaF9jbWQuc2l6ZSwgZmxhc2hfY21kLnZhLCBmbGFzaF9jbWQuZG1hKTsKKwlpZiAoIXN0YXR1cykKKwkJZGV2X2luZm8oZGV2LCAiRmlybXdhcmUgZmxhc2hlZCBzdWNjZXNzZnVsbHlcbiIpOwogCi0JZG1hX2ZyZWVfY29oZXJlbnQoJmFkYXB0ZXItPnBkZXYtPmRldiwgZmxhc2hfY21kLnNpemUsIGZsYXNoX2NtZC52YSwKLQkJCSAgZmxhc2hfY21kLmRtYSk7Ci0JaWYgKHN0YXR1cykgewotCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJGaXJtd2FyZSBsb2FkIGVycm9yXG4iKTsKLQkJZ290byBiZV9md19leGl0OwotCX0KLQotCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJGaXJtd2FyZSBmbGFzaGVkIHN1Y2Nlc3NmdWxseVxuIik7Ci0KLWJlX2Z3X2V4aXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNDMwNCw3ICs0NTM0LDggQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1zdGF0aWMgaW50IGJlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKK3N0YXRpYyBpbnQgYmVfbmRvX2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJCSB1MTYgZmxhZ3MpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBubGF0dHIgKmF0dHIsICpicl9zcGVjOwpAQCAtNDgzMiw2ICs1MDYzLDIwIEBACiAJCQkJICAgICAgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGJlX2xvZ19zZnBfaW5mbyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgc3RhdHVzOworCisJc3RhdHVzID0gYmVfY21kX3F1ZXJ5X3NmcF9pbmZvKGFkYXB0ZXIpOworCWlmICghc3RhdHVzKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJVbnF1YWxpZmllZCBTRlArIGRldGVjdGVkIG9uICVjIGZyb20gJXMgcGFydCBubzogJXMiLAorCQkJYWRhcHRlci0+cG9ydF9uYW1lLCBhZGFwdGVyLT5waHkudmVuZG9yX25hbWUsCisJCQlhZGFwdGVyLT5waHkudmVuZG9yX3BuKTsKKwl9CisJYWRhcHRlci0+ZmxhZ3MgJj0gfkJFX0ZMQUdTX0VWVF9JTkNPTVBBVElCTEVfU0ZQOworfQorCiBzdGF0aWMgdm9pZCBiZV93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0KQEAgLTQ4NzAsNiArNTExNSw5IEBACiAKIAliZV9lcWRfdXBkYXRlKGFkYXB0ZXIpOwogCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgQkVfRkxBR1NfRVZUX0lOQ09NUEFUSUJMRV9TRlApCisJCWJlX2xvZ19zZnBfaW5mbyhhZGFwdGVyKTsKKwogcmVzY2hlZHVsZToKIAlhZGFwdGVyLT53b3JrX2NvdW50ZXIrKzsKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFkYXB0ZXItPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOwpAQCAtNDkxNiwxMiArNTE2NCwzMSBAQAogCXJldHVybiBiZV9waHlzZm4oYWRhcHRlcikgPyAiUEYiIDogIlZGIjsKIH0KIAorc3RhdGljIGlubGluZSBjaGFyICpuaWNfbmFtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzd2l0Y2ggKHBkZXYtPmRldmljZSkgeworCWNhc2UgT0NfREVWSUNFX0lEMToKKwkJcmV0dXJuIE9DX05BTUU7CisJY2FzZSBPQ19ERVZJQ0VfSUQyOgorCQlyZXR1cm4gT0NfTkFNRV9CRTsKKwljYXNlIE9DX0RFVklDRV9JRDM6CisJY2FzZSBPQ19ERVZJQ0VfSUQ0OgorCQlyZXR1cm4gT0NfTkFNRV9MQU5DRVI7CisJY2FzZSBCRV9ERVZJQ0VfSUQyOgorCQlyZXR1cm4gQkUzX05BTUU7CisJY2FzZSBPQ19ERVZJQ0VfSUQ1OgorCWNhc2UgT0NfREVWSUNFX0lENjoKKwkJcmV0dXJuIE9DX05BTUVfU0g7CisJZGVmYXVsdDoKKwkJcmV0dXJuIEJFX05BTUU7CisJfQorfQorCiBzdGF0aWMgaW50IGJlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGRldl9pZCkKIHsKLQlpbnQgc3RhdHVzID0gMDsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwotCWNoYXIgcG9ydF9uYW1lOworCWludCBzdGF0dXMgPSAwOwogCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIHZlcnNpb24gaXMgJXNcbiIsIERSVl9OQU1FLCBEUlZfVkVSKTsKIApAQCAtNTAxNSwxMCArNTI4Miw4IEBACiAJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhZGFwdGVyLT5mdW5jX3JlY292ZXJ5X3dvcmssCiAJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKDEwMDApKTsKIAotCWJlX2NtZF9xdWVyeV9wb3J0X25hbWUoYWRhcHRlciwgJnBvcnRfbmFtZSk7Ci0KIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXM6ICVzICVzIHBvcnQgJWNcbiIsIG5pY19uYW1lKHBkZXYpLAotCQkgZnVuY19uYW1lKGFkYXB0ZXIpLCBtY19uYW1lKGFkYXB0ZXIpLCBwb3J0X25hbWUpOworCQkgZnVuY19uYW1lKGFkYXB0ZXIpLCBtY19uYW1lKGFkYXB0ZXIpLCBhZGFwdGVyLT5wb3J0X25hbWUpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTUwODMsNiArNTM0OCwxMCBAQAogCWlmIChzdGF0dXMpCiAJCXJldHVybiBzdGF0dXM7CiAKKwlzdGF0dXMgPSBiZV9jbWRfcmVzZXRfZnVuY3Rpb24oYWRhcHRlcik7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKwogCWJlX2ludHJfc2V0KGFkYXB0ZXIsIHRydWUpOwogCS8qIHRlbGwgZncgd2UncmUgcmVhZHkgdG8gZmlyZSBjbWRzICovCiAJc3RhdHVzID0gYmVfY21kX2Z3X2luaXQoYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnCmluZGV4IDI3MDMwODMuLmJhODRjNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnCkBAIC02OSw3ICs2OSw4IEBACiAJc2VsZWN0IFBIWUxJQgogCXNlbGVjdCBPRl9NRElPCiAJLS0taGVscC0tLQotCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gYnVzIG9uIHRoZSBGbWFuIDEwRyBFdGhlcm5ldCBNQUNzLgorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIE1ESU8gYnVzIG9uIHRoZSBGbWFuIDEwRyBFdGhlcm5ldCBNQUNzLCBhbmQKKwkgIG9uIHRoZSBGTWFuIG1FTUFDICh3aGljaCBzdXBwb3J0cyBib3RoIENsYXVzZXMgMjIgYW5kIDQ1KQogCiBjb25maWcgVUNDX0dFVEgKIAl0cmlzdGF0ZSAiRnJlZXNjYWxlIFFFIEdpZ2FiaXQgRXRoZXJuZXQiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjLmgKaW5kZXggNDAxMzI5Mi4uYTg2YWY4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlYy5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWMuaApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0X3RzdGFtcC5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cF9jbG9ja19rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lY291bnRlci5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfTTUyM3gpIHx8IGRlZmluZWQoQ09ORklHX001Mjd4KSB8fCBkZWZpbmVkKENPTkZJR19NNTI4eCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX001MjB4KSB8fCBkZWZpbmVkKENPTkZJR19NNTMyeCkgfHwgXApAQCAtMzU2LDYgKzM1Nyw3IEBACiAjZGVmaW5lIEZFQ19FTkVUX1JYQiAgICAoKHVpbnQpMHgwMTAwMDAwMCkgICAgICAvKiBBIGJ1ZmZlciB3YXMgcmVjZWl2ZWQgKi8KICNkZWZpbmUgRkVDX0VORVRfTUlJICAgICgodWludCkweDAwODAwMDAwKSAgICAgIC8qIE1JSSBpbnRlcnJ1cHQgKi8KICNkZWZpbmUgRkVDX0VORVRfRUJFUlIgICgodWludCkweDAwNDAwMDAwKSAgICAgIC8qIFNETUEgYnVzIGVycm9yICovCisjZGVmaW5lIEZFQ19FTkVUX1dBS0VVUAkoKHVpbnQpMHgwMDAyMDAwMCkJLyogV2FrZXVwIHJlcXVlc3QgKi8KICNkZWZpbmUgRkVDX0VORVRfVFhGCShGRUNfRU5FVF9UWEZfMCB8IEZFQ19FTkVUX1RYRl8xIHwgRkVDX0VORVRfVFhGXzIpCiAjZGVmaW5lIEZFQ19FTkVUX1JYRgkoRkVDX0VORVRfUlhGXzAgfCBGRUNfRU5FVF9SWEZfMSB8IEZFQ19FTkVUX1JYRl8yKQogI2RlZmluZSBGRUNfRU5FVF9UU19BVkFJTCAgICAgICAoKHVpbnQpMHgwMDAxMDAwMCkKQEAgLTUxMyw2ICs1MTUsNyBAQAogCWludAlpcnFbRkVDX0lSUV9OVU1dOwogCWJvb2wJYnVmZGVzY19leDsKIAlpbnQJcGF1c2VfZmxhZzsKKwlpbnQJd29sX2ZsYWc7CiAJdTMyCXF1aXJrczsKIAogCXN0cnVjdAluYXBpX3N0cnVjdCBuYXBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYwppbmRleCBiYmE4Nzc3Li45YmI2MjIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX21haW4uYwpAQCAtMTg4LDYgKzE4OCw5IEBACiAjZGVmaW5lIEZFQ19NTUZSX1JBKHYpCQkoKHYgJiAweDFmKSA8PCAxOCkKICNkZWZpbmUgRkVDX01NRlJfVEEJCSgyIDw8IDE2KQogI2RlZmluZSBGRUNfTU1GUl9EQVRBKHYpCSh2ICYgMHhmZmZmKQorLyogRkVDIEVDUiBiaXRzIGRlZmluaXRpb24gKi8KKyNkZWZpbmUgRkVDX0VDUl9NQUdJQ0VOCQkoMSA8PCAyKQorI2RlZmluZSBGRUNfRUNSX1NMRUVQCQkoMSA8PCAzKQogCiAjZGVmaW5lIEZFQ19NSUlfVElNRU9VVAkJMzAwMDAgLyogdXMgKi8KIApAQCAtMTk2LDYgKzE5OSw5IEBACiAKICNkZWZpbmUgRkVDX1BBVVNFX0ZMQUdfQVVUT05FRwkweDEKICNkZWZpbmUgRkVDX1BBVVNFX0ZMQUdfRU5BQkxFCTB4MgorI2RlZmluZSBGRUNfV09MX0hBU19NQUdJQ19QQUNLRVQJKDB4MSA8PCAwKQorI2RlZmluZSBGRUNfV09MX0ZMQUdfRU5BQkxFCQkoMHgxIDw8IDEpCisjZGVmaW5lIEZFQ19XT0xfRkxBR19TTEVFUF9PTgkJKDB4MSA8PCAyKQogCiAjZGVmaW5lIENPUFlCUkVBS19ERUZBVUxUCTI1NgogCkBAIC0xMDkwLDcgKzEwOTYsOSBAQAogZmVjX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJc3RydWN0IGZlY19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBmZWNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBmZXAtPnBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXUzMiBybWlpX21vZGUgPSByZWFkbChmZXAtPmh3cCArIEZFQ19SX0NOVFJMKSAmICgxIDw8IDgpOworCXUzMiB2YWw7CiAKIAkvKiBXZSBjYW5ub3QgZXhwZWN0IGEgZ3JhY2VmdWwgdHJhbnNtaXQgc3RvcCB3aXRob3V0IGxpbmsgISEhICovCiAJaWYgKGZlcC0+bGluaykgewpAQCAtMTEwNCwxNyArMTExMiwyOCBAQAogCSAqIEZvciBpLk1YNlNYIFNPQywgZW5ldCB1c2UgQVhJIGJ1cywgd2UgdXNlIGRpc2FibGUgTUFDCiAJICogaW5zdGVhZCBvZiByZXNldCBNQUMgaXRzZWxmLgogCSAqLwotCWlmIChmZXAtPnF1aXJrcyAmIEZFQ19RVUlSS19IQVNfQVZCKSB7Ci0JCXdyaXRlbCgwLCBmZXAtPmh3cCArIEZFQ19FQ05UUkwpOworCWlmICghKGZlcC0+d29sX2ZsYWcgJiBGRUNfV09MX0ZMQUdfU0xFRVBfT04pKSB7CisJCWlmIChmZXAtPnF1aXJrcyAmIEZFQ19RVUlSS19IQVNfQVZCKSB7CisJCQl3cml0ZWwoMCwgZmVwLT5od3AgKyBGRUNfRUNOVFJMKTsKKwkJfSBlbHNlIHsKKwkJCXdyaXRlbCgxLCBmZXAtPmh3cCArIEZFQ19FQ05UUkwpOworCQkJdWRlbGF5KDEwKTsKKwkJfQorCQl3cml0ZWwoRkVDX0RFRkFVTFRfSU1BU0ssIGZlcC0+aHdwICsgRkVDX0lNQVNLKTsKIAl9IGVsc2UgewotCQl3cml0ZWwoMSwgZmVwLT5od3AgKyBGRUNfRUNOVFJMKTsKLQkJdWRlbGF5KDEwKTsKKwkJd3JpdGVsKEZFQ19ERUZBVUxUX0lNQVNLIHwgRkVDX0VORVRfV0FLRVVQLCBmZXAtPmh3cCArIEZFQ19JTUFTSyk7CisJCXZhbCA9IHJlYWRsKGZlcC0+aHdwICsgRkVDX0VDTlRSTCk7CisJCXZhbCB8PSAoRkVDX0VDUl9NQUdJQ0VOIHwgRkVDX0VDUl9TTEVFUCk7CisJCXdyaXRlbCh2YWwsIGZlcC0+aHdwICsgRkVDX0VDTlRSTCk7CisKKwkJaWYgKHBkYXRhICYmIHBkYXRhLT5zbGVlcF9tb2RlX2VuYWJsZSkKKwkJCXBkYXRhLT5zbGVlcF9tb2RlX2VuYWJsZSh0cnVlKTsKIAl9CiAJd3JpdGVsKGZlcC0+cGh5X3NwZWVkLCBmZXAtPmh3cCArIEZFQ19NSUlfU1BFRUQpOwotCXdyaXRlbChGRUNfREVGQVVMVF9JTUFTSywgZmVwLT5od3AgKyBGRUNfSU1BU0spOwogCiAJLyogV2UgaGF2ZSB0byBrZWVwIEVORVQgZW5hYmxlZCB0byBoYXZlIE1JSSBpbnRlcnJ1cHQgc3RheSB3b3JraW5nICovCi0JaWYgKGZlcC0+cXVpcmtzICYgRkVDX1FVSVJLX0VORVRfTUFDKSB7CisJaWYgKGZlcC0+cXVpcmtzICYgRkVDX1FVSVJLX0VORVRfTUFDICYmCisJCSEoZmVwLT53b2xfZmxhZyAmIEZFQ19XT0xfRkxBR19TTEVFUF9PTikpIHsKIAkJd3JpdGVsKDIsIGZlcC0+aHdwICsgRkVDX0VDTlRSTCk7CiAJCXdyaXRlbChybWlpX21vZGUsIGZlcC0+aHdwICsgRkVDX1JfQ05UUkwpOwogCX0KQEAgLTExNzAsMTIgKzExODksMTMgQEAKIGZlY19lbmV0X3R4X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MTYgcXVldWVfaWQpCiB7CiAJc3RydWN0CWZlY19lbmV0X3ByaXZhdGUgKmZlcDsKLQlzdHJ1Y3QgYnVmZGVzYyAqYmRwOworCXN0cnVjdCBidWZkZXNjICpiZHAsICpiZHBfdDsKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAJc3RydWN0CXNrX2J1ZmYJKnNrYjsKIAlzdHJ1Y3QgZmVjX2VuZXRfcHJpdl90eF9xICp0eHE7CiAJc3RydWN0IG5ldGRldl9xdWV1ZSAqbnE7CiAJaW50CWluZGV4ID0gMDsKKwlpbnQJaSwgYmRudW07CiAJaW50CWVudHJpZXNfZnJlZTsKIAogCWZlcCA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtMTE5NiwxOCArMTIxNiwyOSBAQAogCQlpZiAoYmRwID09IHR4cS0+Y3VyX3R4KQogCQkJYnJlYWs7CiAKLQkJaW5kZXggPSBmZWNfZW5ldF9nZXRfYmRfaW5kZXgodHhxLT50eF9iZF9iYXNlLCBiZHAsIGZlcCk7Ci0KKwkJYmRwX3QgPSBiZHA7CisJCWJkbnVtID0gMTsKKwkJaW5kZXggPSBmZWNfZW5ldF9nZXRfYmRfaW5kZXgodHhxLT50eF9iZF9iYXNlLCBiZHBfdCwgZmVwKTsKIAkJc2tiID0gdHhxLT50eF9za2J1ZmZbaW5kZXhdOwotCQl0eHEtPnR4X3NrYnVmZltpbmRleF0gPSBOVUxMOwotCQlpZiAoIUlTX1RTT19IRUFERVIodHhxLCBiZHAtPmNiZF9idWZhZGRyKSkKLQkJCWRtYV91bm1hcF9zaW5nbGUoJmZlcC0+cGRldi0+ZGV2LCBiZHAtPmNiZF9idWZhZGRyLAotCQkJCQliZHAtPmNiZF9kYXRsZW4sIERNQV9UT19ERVZJQ0UpOwotCQliZHAtPmNiZF9idWZhZGRyID0gMDsKLQkJaWYgKCFza2IpIHsKLQkJCWJkcCA9IGZlY19lbmV0X2dldF9uZXh0ZGVzYyhiZHAsIGZlcCwgcXVldWVfaWQpOwotCQkJY29udGludWU7CisJCXdoaWxlICghc2tiKSB7CisJCQliZHBfdCA9IGZlY19lbmV0X2dldF9uZXh0ZGVzYyhiZHBfdCwgZmVwLCBxdWV1ZV9pZCk7CisJCQlpbmRleCA9IGZlY19lbmV0X2dldF9iZF9pbmRleCh0eHEtPnR4X2JkX2Jhc2UsIGJkcF90LCBmZXApOworCQkJc2tiID0gdHhxLT50eF9za2J1ZmZbaW5kZXhdOworCQkJYmRudW0rKzsKIAkJfQorCQlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAmJgorCQkgICAgKHN0YXR1cyA9IGJkcF90LT5jYmRfc2MpICYgQkRfRU5FVF9UWF9SRUFEWSkKKwkJCWJyZWFrOworCisJCWZvciAoaSA9IDA7IGkgPCBiZG51bTsgaSsrKSB7CisJCQlpZiAoIUlTX1RTT19IRUFERVIodHhxLCBiZHAtPmNiZF9idWZhZGRyKSkKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKCZmZXAtPnBkZXYtPmRldiwgYmRwLT5jYmRfYnVmYWRkciwKKwkJCQkJCSBiZHAtPmNiZF9kYXRsZW4sIERNQV9UT19ERVZJQ0UpOworCQkJYmRwLT5jYmRfYnVmYWRkciA9IDA7CisJCQlpZiAoaSA8IGJkbnVtIC0gMSkKKwkJCQliZHAgPSBmZWNfZW5ldF9nZXRfbmV4dGRlc2MoYmRwLCBmZXAsIHF1ZXVlX2lkKTsKKwkJfQorCQl0eHEtPnR4X3NrYnVmZltpbmRleF0gPSBOVUxMOwogCiAJCS8qIENoZWNrIGZvciBlcnJvcnMuICovCiAJCWlmIChzdGF0dXMgJiAoQkRfRU5FVF9UWF9IQiB8IEJEX0VORVRfVFhfTEMgfApAQCAtMjQyOCw2ICsyNDU5LDQ0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQKK2ZlY19lbmV0X2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwlpZiAoZmVwLT53b2xfZmxhZyAmIEZFQ19XT0xfSEFTX01BR0lDX1BBQ0tFVCkgeworCQl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfTUFHSUM7CisJCXdvbC0+d29sb3B0cyA9IGZlcC0+d29sX2ZsYWcgJiBGRUNfV09MX0ZMQUdfRU5BQkxFID8gV0FLRV9NQUdJQyA6IDA7CisJfSBlbHNlIHsKKwkJd29sLT5zdXBwb3J0ZWQgPSB3b2wtPndvbG9wdHMgPSAwOworCX0KK30KKworc3RhdGljIGludAorZmVjX2VuZXRfc2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCWlmICghKGZlcC0+d29sX2ZsYWcgJiBGRUNfV09MX0hBU19NQUdJQ19QQUNLRVQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3b2wtPndvbG9wdHMgJiB+V0FLRV9NQUdJQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJm5kZXYtPmRldiwgd29sLT53b2xvcHRzICYgV0FLRV9NQUdJQyk7CisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZuZGV2LT5kZXYpKSB7CisJCWZlcC0+d29sX2ZsYWcgfD0gRkVDX1dPTF9GTEFHX0VOQUJMRTsKKwkJaWYgKGZlcC0+aXJxWzBdID4gMCkKKwkJCWVuYWJsZV9pcnFfd2FrZShmZXAtPmlycVswXSk7CisJfSBlbHNlIHsKKwkJZmVwLT53b2xfZmxhZyAmPSAofkZFQ19XT0xfRkxBR19FTkFCTEUpOworCQlpZiAoZmVwLT5pcnFbMF0gPiAwKQorCQkJZGlzYWJsZV9pcnFfd2FrZShmZXAtPmlycVswXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZmVjX2VuZXRfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncwkJPSBmZWNfZW5ldF9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkJPSBmZWNfZW5ldF9zZXRfc2V0dGluZ3MsCkBAIC0yNDQ2LDYgKzI1MTUsOCBAQAogCS5nZXRfdHNfaW5mbwkJPSBmZWNfZW5ldF9nZXRfdHNfaW5mbywKIAkuZ2V0X3R1bmFibGUJCT0gZmVjX2VuZXRfZ2V0X3R1bmFibGUsCiAJLnNldF90dW5hYmxlCQk9IGZlY19lbmV0X3NldF90dW5hYmxlLAorCS5nZXRfd29sCQk9IGZlY19lbmV0X2dldF93b2wsCisJLnNldF93b2wJCT0gZmVjX2VuZXRfc2V0X3dvbCwKIH07CiAKIHN0YXRpYyBpbnQgZmVjX2VuZXRfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCkBAIC0yNTI1LDEyICsyNTk2LDkgQEAKIAkJfQogCiAJZm9yIChpID0gMDsgaSA8IGZlcC0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQlpZiAoZmVwLT5yeF9xdWV1ZVtpXSkKLQkJCWtmcmVlKGZlcC0+cnhfcXVldWVbaV0pOwotCisJCWtmcmVlKGZlcC0+cnhfcXVldWVbaV0pOwogCWZvciAoaSA9IDA7IGkgPCBmZXAtPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJaWYgKGZlcC0+dHhfcXVldWVbaV0pCi0JCQlrZnJlZShmZXAtPnR4X3F1ZXVlW2ldKTsKKwkJa2ZyZWUoZmVwLT50eF9xdWV1ZVtpXSk7CiB9CiAKIHN0YXRpYyBpbnQgZmVjX2VuZXRfYWxsb2NfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCkBAIC0yNzA2LDYgKzI3NzQsOSBAQAogCXBoeV9zdGFydChmZXAtPnBoeV9kZXYpOwogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmRldik7CiAKKwlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJm5kZXYtPmRldiwgZmVwLT53b2xfZmxhZyAmCisJCQkJIEZFQ19XT0xfRkxBR19FTkFCTEUpOworCiAJcmV0dXJuIDA7CiAKIGVycl9lbmV0X21paV9wcm9iZToKQEAgLTMxNTUsNiArMzIyNiw5IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKIAorCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJmc2wsbWFnaWMtcGFja2V0IiwgTlVMTCkpCisJCWZlcC0+d29sX2ZsYWcgfD0gRkVDX1dPTF9IQVNfTUFHSUNfUEFDS0VUOworCiAJcGh5X25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG5wLCAicGh5LWhhbmRsZSIsIDApOwogCWlmICghcGh5X25vZGUgJiYgb2ZfcGh5X2lzX2ZpeGVkX2xpbmsobnApKSB7CiAJCXJldCA9IG9mX3BoeV9yZWdpc3Rlcl9maXhlZF9saW5rKG5wKTsKQEAgLTMyNDksNiArMzMyMyw4IEBACiAJCQkJICAgICAgIDAsIHBkZXYtPm5hbWUsIG5kZXYpOwogCQlpZiAocmV0KQogCQkJZ290byBmYWlsZWRfaXJxOworCisJCWZlcC0+aXJxW2ldID0gaXJxOwogCX0KIAogCWluaXRfY29tcGxldGlvbigmZmVwLT5tZGlvX2RvbmUpOwpAQCAtMzI2NSw2ICszMzQxLDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIGZhaWxlZF9yZWdpc3RlcjsKIAorCWRldmljZV9pbml0X3dha2V1cCgmbmRldi0+ZGV2LCBmZXAtPndvbF9mbGFnICYKKwkJCSAgIEZFQ19XT0xfSEFTX01BR0lDX1BBQ0tFVCk7CisKIAlpZiAoZmVwLT5idWZkZXNjX2V4ICYmIGZlcC0+cHRwX2Nsb2NrKQogCQluZXRkZXZfaW5mbyhuZGV2LCAicmVnaXN0ZXJlZCBQSEMgZGV2aWNlICVkXG4iLCBmZXAtPmRldl9pZCk7CiAKQEAgLTMzMTgsNiArMzM5Nyw4IEBACiAKIAlydG5sX2xvY2soKTsKIAlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgeworCQlpZiAoZmVwLT53b2xfZmxhZyAmIEZFQ19XT0xfRkxBR19FTkFCTEUpCisJCQlmZXAtPndvbF9mbGFnIHw9IEZFQ19XT0xfRkxBR19TTEVFUF9PTjsKIAkJcGh5X3N0b3AoZmVwLT5waHlfZGV2KTsKIAkJbmFwaV9kaXNhYmxlKCZmZXAtPm5hcGkpOwogCQluZXRpZl90eF9sb2NrX2JoKG5kZXYpOwpAQCAtMzMyNSwxMSArMzQwNiwxMiBAQAogCQluZXRpZl90eF91bmxvY2tfYmgobmRldik7CiAJCWZlY19zdG9wKG5kZXYpOwogCQlmZWNfZW5ldF9jbGtfZW5hYmxlKG5kZXYsIGZhbHNlKTsKLQkJcGluY3RybF9wbV9zZWxlY3Rfc2xlZXBfc3RhdGUoJmZlcC0+cGRldi0+ZGV2KTsKKwkJaWYgKCEoZmVwLT53b2xfZmxhZyAmIEZFQ19XT0xfRkxBR19FTkFCTEUpKQorCQkJcGluY3RybF9wbV9zZWxlY3Rfc2xlZXBfc3RhdGUoJmZlcC0+cGRldi0+ZGV2KTsKIAl9CiAJcnRubF91bmxvY2soKTsKIAotCWlmIChmZXAtPnJlZ19waHkpCisJaWYgKGZlcC0+cmVnX3BoeSAmJiAhKGZlcC0+d29sX2ZsYWcgJiBGRUNfV09MX0ZMQUdfRU5BQkxFKSkKIAkJcmVndWxhdG9yX2Rpc2FibGUoZmVwLT5yZWdfcGh5KTsKIAogCS8qIFNPQyBzdXBwbHkgY2xvY2sgdG8gcGh5LCB3aGVuIGNsb2NrIGlzIGRpc2FibGVkLCBwaHkgbGluayBkb3duCkBAIC0zMzQ1LDkgKzM0MjcsMTEgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3QgZmVjX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gZmVwLT5wZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpbnQgcmV0OworCWludCB2YWw7CiAKLQlpZiAoZmVwLT5yZWdfcGh5KSB7CisJaWYgKGZlcC0+cmVnX3BoeSAmJiAhKGZlcC0+d29sX2ZsYWcgJiBGRUNfV09MX0ZMQUdfRU5BQkxFKSkgewogCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGZlcC0+cmVnX3BoeSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwpAQCAtMzM1NSwxMiArMzQzOSwyMSBAQAogCiAJcnRubF9sb2NrKCk7CiAJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKLQkJcGluY3RybF9wbV9zZWxlY3RfZGVmYXVsdF9zdGF0ZSgmZmVwLT5wZGV2LT5kZXYpOwogCQlyZXQgPSBmZWNfZW5ldF9jbGtfZW5hYmxlKG5kZXYsIHRydWUpOwogCQlpZiAocmV0KSB7CiAJCQlydG5sX3VubG9jaygpOwogCQkJZ290byBmYWlsZWRfY2xrOwogCQl9CisJCWlmIChmZXAtPndvbF9mbGFnICYgRkVDX1dPTF9GTEFHX0VOQUJMRSkgeworCQkJaWYgKHBkYXRhICYmIHBkYXRhLT5zbGVlcF9tb2RlX2VuYWJsZSkKKwkJCQlwZGF0YS0+c2xlZXBfbW9kZV9lbmFibGUoZmFsc2UpOworCQkJdmFsID0gcmVhZGwoZmVwLT5od3AgKyBGRUNfRUNOVFJMKTsKKwkJCXZhbCAmPSB+KEZFQ19FQ1JfTUFHSUNFTiB8IEZFQ19FQ1JfU0xFRVApOworCQkJd3JpdGVsKHZhbCwgZmVwLT5od3AgKyBGRUNfRUNOVFJMKTsKKwkJCWZlcC0+d29sX2ZsYWcgJj0gfkZFQ19XT0xfRkxBR19TTEVFUF9PTjsKKwkJfSBlbHNlIHsKKwkJCXBpbmN0cmxfcG1fc2VsZWN0X2RlZmF1bHRfc3RhdGUoJmZlcC0+cGRldi0+ZGV2KTsKKwkJfQogCQlmZWNfcmVzdGFydChuZGV2KTsKIAkJbmV0aWZfdHhfbG9ja19iaChuZGV2KTsKIAkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZmVjX3B0cC5jCmluZGV4IDk5MmM4YzMuLjFmOWNmMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mZWNfcHRwLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZlY19wdHAuYwpAQCAtMzc0LDIzICszNzQsOSBAQAogCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPQogCSAgICBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSwgcHRwX2NhcHMpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTY0IG5vdzsKLQl1MzIgY291bnRlcjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZmZXAtPnRtcmVnX2xvY2ssIGZsYWdzKTsKLQotCW5vdyA9IHRpbWVjb3VudGVyX3JlYWQoJmZlcC0+dGMpOwotCW5vdyArPSBkZWx0YTsKLQotCS8qIEdldCB0aGUgdGltZXIgdmFsdWUgYmFzZWQgb24gYWRqdXN0ZWQgdGltZXN0YW1wLgotCSAqIFVwZGF0ZSB0aGUgY291bnRlciB3aXRoIHRoZSBtYXNrZWQgdmFsdWUuCi0JICovCi0JY291bnRlciA9IG5vdyAmIGZlcC0+Y2MubWFzazsKLQl3cml0ZWwoY291bnRlciwgZmVwLT5od3AgKyBGRUNfQVRJTUUpOwotCi0JLyogcmVzZXQgdGhlIHRpbWVjb3VudGVyICovCi0JdGltZWNvdW50ZXJfaW5pdCgmZmVwLT50YywgJmZlcC0+Y2MsIG5vdyk7Ci0KKwl0aW1lY291bnRlcl9hZGp0aW1lKCZmZXAtPnRjLCBkZWx0YSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVwLT50bXJlZ19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKaW5kZXggOWUyYmNiOC4uYTE3NjI4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKQEAgLTI3OCwxNCArMjc4LDIwIEBACiAJCQlmZXAtPnN0YXRzLmNvbGxpc2lvbnMrKzsKIAogCQkvKiB1bm1hcCAqLwotCQlkbWFfdW5tYXBfc2luZ2xlKGZlcC0+ZGV2LCBDQkRSX0JVRkFERFIoYmRwKSwKLQkJCQlza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CisJCWlmIChmZXAtPm1hcHBlZF9hc19wYWdlW2RpcnR5aWR4XSkKKwkJCWRtYV91bm1hcF9wYWdlKGZlcC0+ZGV2LCBDQkRSX0JVRkFERFIoYmRwKSwKKwkJCQkgICAgICAgQ0JEUl9EQVRMRU4oYmRwKSwgRE1BX1RPX0RFVklDRSk7CisJCWVsc2UKKwkJCWRtYV91bm1hcF9zaW5nbGUoZmVwLT5kZXYsIENCRFJfQlVGQUREUihiZHApLAorCQkJCQkgQ0JEUl9EQVRMRU4oYmRwKSwgRE1BX1RPX0RFVklDRSk7CiAKIAkJLyoKIAkJICogRnJlZSB0aGUgc2sgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxhc3QgdHJhbnNtaXQuCiAJCSAqLwotCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCWZlcC0+dHhfc2tidWZmW2RpcnR5aWR4XSA9IE5VTEw7CisJCWlmIChza2IpIHsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCWZlcC0+dHhfc2tidWZmW2RpcnR5aWR4XSA9IE5VTEw7CisJCX0KIAogCQkvKgogCQkgKiBVcGRhdGUgcG9pbnRlciB0byBuZXh0IGJ1ZmZlciBkZXNjcmlwdG9yIHRvIGJlIHRyYW5zbWl0dGVkLgpAQCAtMjk5LDcgKzMwNSw3IEBACiAJCSAqIFNpbmNlIHdlIGhhdmUgZnJlZWQgdXAgYSBidWZmZXIsIHRoZSByaW5nIGlzIG5vIGxvbmdlcgogCQkgKiBmdWxsLgogCQkgKi8KLQkJaWYgKCFmZXAtPnR4X2ZyZWUrKykKKwkJaWYgKCsrZmVwLT50eF9mcmVlID49IE1BWF9TS0JfRlJBR1MpCiAJCQlkb193YWtlID0gMTsKIAkJaGFzX3R4X3dvcmsgPSAxOwogCX0KQEAgLTUwOSw2ICs1MTUsOSBAQAogCWNiZF90IF9faW9tZW0gKmJkcDsKIAlpbnQgY3VyaWR4OwogCXUxNiBzYzsKKwlpbnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCXNrYl9mcmFnX3QgKmZyYWc7CisJaW50IGxlbjsKIAogI2lmZGVmIENPTkZJR19GU19FTkVUX01QQzUxMjFfRkVDCiAJaWYgKCgodW5zaWduZWQgbG9uZylza2ItPmRhdGEpICYgMHgzKSB7CkBAIC01MzAsNyArNTM5LDcgQEAKIAkgKi8KIAliZHAgPSBmZXAtPmN1cl90eDsKIAotCWlmICghZmVwLT50eF9mcmVlIHx8IChDQkRSX1NDKGJkcCkgJiBCRF9FTkVUX1RYX1JFQURZKSkgeworCWlmIChmZXAtPnR4X2ZyZWUgPD0gbnJfZnJhZ3MgfHwgKENCRFJfU0MoYmRwKSAmIEJEX0VORVRfVFhfUkVBRFkpKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJc3Bpbl91bmxvY2soJmZlcC0+dHhfbG9jayk7CiAKQEAgLTU0MywzNSArNTUyLDQyIEBACiAJfQogCiAJY3VyaWR4ID0gYmRwIC0gZmVwLT50eF9iZF9iYXNlOwotCS8qCi0JICogQ2xlYXIgYWxsIG9mIHRoZSBzdGF0dXMgZmxhZ3MuCi0JICovCi0JQ0JEQ19TQyhiZHAsIEJEX0VORVRfVFhfU1RBVFMpOwogCi0JLyoKLQkgKiBTYXZlIHNrYiBwb2ludGVyLgotCSAqLwotCWZlcC0+dHhfc2tidWZmW2N1cmlkeF0gPSBza2I7Ci0KLQlmZXAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCisJbGVuID0gc2tiLT5sZW47CisJZmVwLT5zdGF0cy50eF9ieXRlcyArPSBsZW47CisJaWYgKG5yX2ZyYWdzKQorCQlsZW4gLT0gc2tiLT5kYXRhX2xlbjsKKwlmZXAtPnR4X2ZyZWUgLT0gbnJfZnJhZ3MgKyAxOwogCS8qCiAJICogUHVzaCB0aGUgZGF0YSBjYWNoZSBzbyB0aGUgQ1BNIGRvZXMgbm90IGdldCBzdGFsZSBtZW1vcnkgZGF0YS4KIAkgKi8KIAlDQkRXX0JVRkFERFIoYmRwLCBkbWFfbWFwX3NpbmdsZShmZXAtPmRldiwKLQkJCQlza2ItPmRhdGEsIHNrYi0+bGVuLCBETUFfVE9fREVWSUNFKSk7Ci0JQ0JEV19EQVRMRU4oYmRwLCBza2ItPmxlbik7CisJCQkJc2tiLT5kYXRhLCBsZW4sIERNQV9UT19ERVZJQ0UpKTsKKwlDQkRXX0RBVExFTihiZHAsIGxlbik7CiAKLQkvKgotCSAqIElmIHRoaXMgd2FzIHRoZSBsYXN0IEJEIGluIHRoZSByaW5nLCBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIGFnYWluLgotCSAqLwotCWlmICgoQ0JEUl9TQyhiZHApICYgQkRfRU5FVF9UWF9XUkFQKSA9PSAwKQotCQlmZXAtPmN1cl90eCsrOwotCWVsc2UKLQkJZmVwLT5jdXJfdHggPSBmZXAtPnR4X2JkX2Jhc2U7CisJZmVwLT5tYXBwZWRfYXNfcGFnZVtjdXJpZHhdID0gMDsKKwlmcmFnID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnczsKKwl3aGlsZSAobnJfZnJhZ3MpIHsKKwkJQ0JEQ19TQyhiZHAsCisJCQlCRF9FTkVUX1RYX1NUQVRTIHwgQkRfRU5FVF9UWF9MQVNUIHwgQkRfRU5FVF9UWF9UQyk7CisJCUNCRFNfU0MoYmRwLCBCRF9FTkVUX1RYX1JFQURZKTsKIAotCWlmICghLS1mZXAtPnR4X2ZyZWUpCi0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJaWYgKChDQkRSX1NDKGJkcCkgJiBCRF9FTkVUX1RYX1dSQVApID09IDApCisJCQliZHArKywgY3VyaWR4Kys7CisJCWVsc2UKKwkJCWJkcCA9IGZlcC0+dHhfYmRfYmFzZSwgY3VyaWR4ID0gMDsKKworCQlsZW4gPSBza2JfZnJhZ19zaXplKGZyYWcpOworCQlDQkRXX0JVRkFERFIoYmRwLCBza2JfZnJhZ19kbWFfbWFwKGZlcC0+ZGV2LCBmcmFnLCAwLCBsZW4sCisJCQkJCQkgICBETUFfVE9fREVWSUNFKSk7CisJCUNCRFdfREFUTEVOKGJkcCwgbGVuKTsKKworCQlmZXAtPnR4X3NrYnVmZltjdXJpZHhdID0gTlVMTDsKKwkJZmVwLT5tYXBwZWRfYXNfcGFnZVtjdXJpZHhdID0gMTsKKworCQlmcmFnKys7CisJCW5yX2ZyYWdzLS07CisJfQogCiAJLyogVHJpZ2dlciB0cmFuc21pc3Npb24gc3RhcnQgKi8KIAlzYyA9IEJEX0VORVRfVFhfUkVBRFkgfCBCRF9FTkVUX1RYX0lOVFIgfApAQCAtNTgyLDggKzU5OCwyMiBAQAogCSAqIHlheSBmb3IgaHcgcmV1c2UgOikgKi8KIAlpZiAoc2tiLT5sZW4gPD0gNjApCiAJCXNjIHw9IEJEX0VORVRfVFhfUEFEOworCUNCRENfU0MoYmRwLCBCRF9FTkVUX1RYX1NUQVRTKTsKIAlDQkRTX1NDKGJkcCwgc2MpOwogCisJLyogU2F2ZSBza2IgcG9pbnRlci4gKi8KKwlmZXAtPnR4X3NrYnVmZltjdXJpZHhdID0gc2tiOworCisJLyogSWYgdGhpcyB3YXMgdGhlIGxhc3QgQkQgaW4gdGhlIHJpbmcsIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgYWdhaW4uICovCisJaWYgKChDQkRSX1NDKGJkcCkgJiBCRF9FTkVUX1RYX1dSQVApID09IDApCisJCWJkcCsrOworCWVsc2UKKwkJYmRwID0gZmVwLT50eF9iZF9iYXNlOworCWZlcC0+Y3VyX3R4ID0gYmRwOworCisJaWYgKGZlcC0+dHhfZnJlZSA8IE1BWF9TS0JfRlJBR1MpCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwogCXNrYl90eF90aW1lc3RhbXAoc2tiKTsKIAogCSgqZmVwLT5vcHMtPnR4X2tpY2tzdGFydCkoZGV2KTsKQEAgLTkxNyw3ICs5NDcsNyBAQAogCX0KIAogCWZwaS0+cnhfcmluZyA9IDMyOwotCWZwaS0+dHhfcmluZyA9IDMyOworCWZwaS0+dHhfcmluZyA9IDY0OwogCWZwaS0+cnhfY29weWJyZWFrID0gMjQwOwogCWZwaS0+bmFwaV93ZWlnaHQgPSAxNzsKIAlmcGktPnBoeV9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShvZmRldi0+ZGV2Lm9mX25vZGUsICJwaHktaGFuZGxlIiwgMCk7CkBAIC05NTUsNyArOTg1LDggQEAKIAogCXByaXZzaXplID0gc2l6ZW9mKCpmZXApICsKIAkgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKikgKgotCSAgICAgICAgICAgKGZwaS0+cnhfcmluZyArIGZwaS0+dHhfcmluZyk7CisJCSAgICAgKGZwaS0+cnhfcmluZyArIGZwaS0+dHhfcmluZykgKworCQkgICBzaXplb2YoY2hhcikgKiBmcGktPnR4X3Jpbmc7CiAKIAluZGV2ID0gYWxsb2NfZXRoZXJkZXYocHJpdnNpemUpOwogCWlmICghbmRldikgewpAQCAtOTc4LDYgKzEwMDksOCBAQAogCiAJZmVwLT5yeF9za2J1ZmYgPSAoc3RydWN0IHNrX2J1ZmYgKiopJmZlcFsxXTsKIAlmZXAtPnR4X3NrYnVmZiA9IGZlcC0+cnhfc2tidWZmICsgZnBpLT5yeF9yaW5nOworCWZlcC0+bWFwcGVkX2FzX3BhZ2UgPSAoY2hhciAqKShmZXAtPnJ4X3NrYnVmZiArIGZwaS0+cnhfcmluZyArCisJCQkJICAgICAgIGZwaS0+dHhfcmluZyk7CiAKIAlzcGluX2xvY2tfaW5pdCgmZmVwLT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmZmVwLT50eF9sb2NrKTsKQEAgLTEwMDcsNiArMTA0MCw4IEBACiAKIAluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKIAorCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CisKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZnJlZV9iZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQuaAppbmRleCAzYTRiNDllLi5mMTg0ZDhmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQuaApAQCAtMTM0LDYgKzEzNCw3IEBACiAJdm9pZCBfX2lvbWVtICpyaW5nX2Jhc2U7CiAJc3RydWN0IHNrX2J1ZmYgKipyeF9za2J1ZmY7CiAJc3RydWN0IHNrX2J1ZmYgKip0eF9za2J1ZmY7CisJY2hhciAqbWFwcGVkX2FzX3BhZ2U7CiAJY2JkX3QgX19pb21lbSAqcnhfYmRfYmFzZTsJLyogQWRkcmVzcyBvZiBSeCBhbmQgVHggYnVmZmVycy4gICAgKi8KIAljYmRfdCBfX2lvbWVtICp0eF9iZF9iYXNlOwogCWNiZF90IF9faW9tZW0gKmRpcnR5X3R4OwkvKiByaW5nIGVudHJpZXMgdG8gYmUgZnJlZSgpZWQuICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmMKaW5kZXggNTY0NTM0Mi4uNDNkZjc4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5jCkBAIC0xMTYsNyArMTE2LDggQEAKIHN0YXRpYyB2b2lkIGdmYXJfcmVzZXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgZ2Zhcl90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBnZmFyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RydWN0IHNrX2J1ZmYgKmdmYXJfbmV3X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBkbWFfYWRkcl90ICpidWZhZGRyKTsKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqZ2Zhcl9uZXdfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgIGRtYV9hZGRyX3QgKmJ1ZmFkZHIpOwogc3RhdGljIGludCBnZmFyX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZ2Zhcl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBnZmFyX2Vycm9yKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CkBAIC0xNzYsNyArMTc3LDcgQEAKIAlzdHJ1Y3QgZ2Zhcl9wcml2X3J4X3EgKnJ4X3F1ZXVlID0gTlVMTDsKIAlzdHJ1Y3QgdHhiZDggKnR4YmRwOwogCXN0cnVjdCByeGJkOCAqcnhiZHA7Ci0JdTMyICpyZmJwdHI7CisJdTMyIF9faW9tZW0gKnJmYnB0cjsKIAlpbnQgaSwgajsKIAlkbWFfYWRkcl90IGJ1ZmFkZHI7CiAKQEAgLTU1NCw3ICs1NTUsNyBAQAogCX0KIH0KIAotdm9pZCBsb2NrX3R4X3FzKHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpCitzdGF0aWMgdm9pZCBsb2NrX3R4X3FzKHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpCiB7CiAJaW50IGk7CiAKQEAgLTU2Miw3ICs1NjMsNyBAQAogCQlzcGluX2xvY2soJnByaXYtPnR4X3F1ZXVlW2ldLT50eGxvY2spOwogfQogCi12b2lkIHVubG9ja190eF9xcyhzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2KQorc3RhdGljIHZvaWQgdW5sb2NrX3R4X3FzKHN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYpCiB7CiAJaW50IGk7CiAKQEAgLTc2Myw3ICs3NjQsNyBAQAogCXUzMiAqdHhfcXVldWVzLCAqcnhfcXVldWVzOwogCXVuc2lnbmVkIHNob3J0IG1vZGUsIHBvbGxfbW9kZTsKIAotCWlmICghbnAgfHwgIW9mX2RldmljZV9pc19hdmFpbGFibGUobnApKQorCWlmICghbnApCiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAiZnNsLGV0c2VjMiIpKSB7CkBAIC0yMTY5LDcgKzIxNzAsNyBAQAogdm9pZCBpbmxpbmUgZ2Zhcl90eF92bGFuKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0eGZjYiAqZmNiKQogewogCWZjYi0+ZmxhZ3MgfD0gVFhGQ0JfVkxOOwotCWZjYi0+dmxjdGwgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwlmY2ItPnZsY3RsID0gc2tiX3ZsYW5fdGFnX2dldChza2IpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0eGJkOCAqc2tpcF90eGJkKHN0cnVjdCB0eGJkOCAqYmRwLCBpbnQgc3RyaWRlLApAQCAtMjIyOSw3ICsyMjMwLDcgQEAKIAlyZWdzID0gdHhfcXVldWUtPmdycC0+cmVnczsKIAogCWRvX2NzdW0gPSAoQ0hFQ0tTVU1fUEFSVElBTCA9PSBza2ItPmlwX3N1bW1lZCk7Ci0JZG9fdmxhbiA9IHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKTsKKwlkb192bGFuID0gc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKTsKIAlkb190c3RhbXAgPSAoc2tiX3NoaW5mbyhza2IpLT50eF9mbGFncyAmIFNLQlRYX0hXX1RTVEFNUCkgJiYKIAkJICAgIHByaXYtPmh3dHNfdHhfZW47CiAKQEAgLTI2NzEsNyArMjY3Miw3IEBACiAJcmV0dXJuIHNrYjsKIH0KIAotc3RydWN0IHNrX2J1ZmYgKmdmYXJfbmV3X3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBkbWFfYWRkcl90ICpidWZhZGRyKQorc3RhdGljIHN0cnVjdCBza19idWZmICpnZmFyX25ld19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgZG1hX2FkZHJfdCAqYnVmYWRkcikKIHsKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyLmgKaW5kZXggYjU4MWI4OC4uOWUxODAyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXIuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhci5oCkBAIC0xMDM5LDcgKzEwMzksNyBAQAogCS8qIFJYIENvYWxlc2NpbmcgdmFsdWVzICovCiAJdW5zaWduZWQgY2hhciByeGNvYWxlc2Npbmc7CiAJdW5zaWduZWQgbG9uZyByeGljOwotCXUzMiAqcmZicHRyOworCXUzMiBfX2lvbWVtICpyZmJwdHI7CiB9OwogCiBlbnVtIGdmYXJfaXJxaW5mb19pZCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZ2lhbmZhcl9ldGh0b29sLmMKaW5kZXggM2UxYTljMS4uZmRhMTJmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2dpYW5mYXJfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9naWFuZmFyX2V0aHRvb2wuYwpAQCAtMTU4Niw3ICsxNTg2LDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCS8qIEZpbGwgcmVndWxhciBlbnRyaWVzICovCi0JZm9yICg7IGkgPCBNQVhfRklMRVJfSURYIC0gMSAmJiAodGFiLT5mZVtpXS5jdHJsIHwgdGFiLT5mZVtpXS5jdHJsKTsKKwlmb3IgKDsgaSA8IE1BWF9GSUxFUl9JRFggLSAxICYmICh0YWItPmZlW2ldLmN0cmwgfCB0YWItPmZlW2ldLnByb3ApOwogCSAgICAgaSsrKQogCQlnZmFyX3dyaXRlX2ZpbGVyKHByaXYsIGksIHRhYi0+ZmVbaV0uY3RybCwgdGFiLT5mZVtpXS5wcm9wKTsKIAkvKiBGaWxsIHRoZSByZXN0IHdpdGggZmFsbC10cm91Z2hzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3hnbWFjX21kaW8uYwppbmRleCA2ZTdkYjY2Li4zYTgzYmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUveGdtYWNfbWRpby5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS94Z21hY19tZGlvLmMKQEAgLTMyLDE4ICszMiwxOSBAQAogCV9fYmUzMgltZGlvX2FkZHI7CS8qIE1ESU8gYWRkcmVzcyAqLwogfSBfX3BhY2tlZDsKIAorI2RlZmluZSBNRElPX1NUQVRfRU5DCQlCSVQoNikKICNkZWZpbmUgTURJT19TVEFUX0NMS0RJVih4KQkoKCh4Pj4xKSAmIDB4ZmYpIDw8IDgpCi0jZGVmaW5lIE1ESU9fU1RBVF9CU1kJCSgxIDw8IDApCi0jZGVmaW5lIE1ESU9fU1RBVF9SRF9FUgkJKDEgPDwgMSkKKyNkZWZpbmUgTURJT19TVEFUX0JTWQkJQklUKDApCisjZGVmaW5lIE1ESU9fU1RBVF9SRF9FUgkJQklUKDEpCiAjZGVmaW5lIE1ESU9fQ1RMX0RFVl9BRERSKHgpIAkoeCAmIDB4MWYpCiAjZGVmaW5lIE1ESU9fQ1RMX1BPUlRfQUREUih4KQkoKHggJiAweDFmKSA8PCA1KQotI2RlZmluZSBNRElPX0NUTF9QUkVfRElTCSgxIDw8IDEwKQotI2RlZmluZSBNRElPX0NUTF9TQ0FOX0VOCSgxIDw8IDExKQotI2RlZmluZSBNRElPX0NUTF9QT1NUX0lOQwkoMSA8PCAxNCkKLSNkZWZpbmUgTURJT19DVExfUkVBRAkJKDEgPDwgMTUpCisjZGVmaW5lIE1ESU9fQ1RMX1BSRV9ESVMJQklUKDEwKQorI2RlZmluZSBNRElPX0NUTF9TQ0FOX0VOCUJJVCgxMSkKKyNkZWZpbmUgTURJT19DVExfUE9TVF9JTkMJQklUKDE0KQorI2RlZmluZSBNRElPX0NUTF9SRUFECQlCSVQoMTUpCiAKICNkZWZpbmUgTURJT19EQVRBKHgpCQkoeCAmIDB4ZmZmZikKLSNkZWZpbmUgTURJT19EQVRBX0JTWQkJKDEgPDwgMzEpCisjZGVmaW5lIE1ESU9fREFUQV9CU1kJCUJJVCgzMSkKIAogLyoKICAqIFdhaXQgdW50aWwgdGhlIE1ESU8gYnVzIGlzIGZyZWUKQEAgLTUxLDEyICs1MiwxNiBAQAogc3RhdGljIGludCB4Z21hY193YWl0X3VudGlsX2ZyZWUoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSBzdHJ1Y3QgdGdlY19tZGlvX2NvbnRyb2xsZXIgX19pb21lbSAqcmVncykKIHsKLQl1aW50MzJfdCBzdGF0dXM7CisJdW5zaWduZWQgaW50IHRpbWVvdXQ7CiAKIAkvKiBXYWl0IHRpbGwgdGhlIGJ1cyBpcyBmcmVlICovCi0Jc3RhdHVzID0gc3Bpbl9ldmVudF90aW1lb3V0KAotCQkhKChpbl9iZTMyKCZyZWdzLT5tZGlvX3N0YXQpKSAmIE1ESU9fU1RBVF9CU1kpLCBUSU1FT1VULCAwKTsKLQlpZiAoIXN0YXR1cykgeworCXRpbWVvdXQgPSBUSU1FT1VUOworCXdoaWxlICgoaW9yZWFkMzJiZSgmcmVncy0+bWRpb19zdGF0KSAmIE1ESU9fU1RBVF9CU1kpICYmIHRpbWVvdXQpIHsKKwkJY3B1X3JlbGF4KCk7CisJCXRpbWVvdXQtLTsKKwl9CisKKwlpZiAoIXRpbWVvdXQpIHsKIAkJZGV2X2VycihkZXYsICJ0aW1lb3V0IHdhaXRpbmcgZm9yIGJ1cyB0byBiZSBmcmVlXG4iKTsKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQpAQCAtNzAsMTIgKzc1LDE2IEBACiBzdGF0aWMgaW50IHhnbWFjX3dhaXRfdW50aWxfZG9uZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJIHN0cnVjdCB0Z2VjX21kaW9fY29udHJvbGxlciBfX2lvbWVtICpyZWdzKQogewotCXVpbnQzMl90IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgdGltZW91dDsKIAogCS8qIFdhaXQgdGlsbCB0aGUgTURJTyB3cml0ZSBpcyBjb21wbGV0ZSAqLwotCXN0YXR1cyA9IHNwaW5fZXZlbnRfdGltZW91dCgKLQkJISgoaW5fYmUzMigmcmVncy0+bWRpb19kYXRhKSkgJiBNRElPX0RBVEFfQlNZKSwgVElNRU9VVCwgMCk7Ci0JaWYgKCFzdGF0dXMpIHsKKwl0aW1lb3V0ID0gVElNRU9VVDsKKwl3aGlsZSAoKGlvcmVhZDMyYmUoJnJlZ3MtPm1kaW9fZGF0YSkgJiBNRElPX0RBVEFfQlNZKSAmJiB0aW1lb3V0KSB7CisJCWNwdV9yZWxheCgpOworCQl0aW1lb3V0LS07CisJfQorCisJaWYgKCF0aW1lb3V0KSB7CiAJCWRldl9lcnIoZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBvcGVyYXRpb24gdG8gY29tcGxldGVcbiIpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CkBAIC05MSwyOSArMTAwLDQyIEBACiBzdGF0aWMgaW50IHhnbWFjX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZ251bSwgdTE2IHZhbHVlKQogewogCXN0cnVjdCB0Z2VjX21kaW9fY29udHJvbGxlciBfX2lvbWVtICpyZWdzID0gYnVzLT5wcml2OwotCXVpbnQxNl90IGRldl9hZGRyID0gcmVnbnVtID4+IDE2OworCXVpbnQxNl90IGRldl9hZGRyOworCXUzMiBtZGlvX2N0bCwgbWRpb19zdGF0OwogCWludCByZXQ7CiAKLQkvKiBTZXR1cCB0aGUgTUlJIE1nbXQgY2xvY2sgc3BlZWQgKi8KLQlvdXRfYmUzMigmcmVncy0+bWRpb19zdGF0LCBNRElPX1NUQVRfQ0xLRElWKDEwMCkpOworCW1kaW9fc3RhdCA9IGlvcmVhZDMyYmUoJnJlZ3MtPm1kaW9fc3RhdCk7CisJaWYgKHJlZ251bSAmIE1JSV9BRERSX0M0NSkgeworCQkvKiBDbGF1c2UgNDUgKGllIDEwRykgKi8KKwkJZGV2X2FkZHIgPSAocmVnbnVtID4+IDE2KSAmIDB4MWY7CisJCW1kaW9fc3RhdCB8PSBNRElPX1NUQVRfRU5DOworCX0gZWxzZSB7CisJCS8qIENsYXVzZSAyMiAoaWUgMUcpICovCisJCWRldl9hZGRyID0gcmVnbnVtICYgMHgxZjsKKwkJbWRpb19zdGF0ICY9IH5NRElPX1NUQVRfRU5DOworCX0KKworCWlvd3JpdGUzMmJlKG1kaW9fc3RhdCwgJnJlZ3MtPm1kaW9fc3RhdCk7CiAKIAlyZXQgPSB4Z21hY193YWl0X3VudGlsX2ZyZWUoJmJ1cy0+ZGV2LCByZWdzKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCiAJLyogU2V0IHRoZSBwb3J0IGFuZCBkZXYgYWRkciAqLwotCW91dF9iZTMyKCZyZWdzLT5tZGlvX2N0bCwKLQkJIE1ESU9fQ1RMX1BPUlRfQUREUihwaHlfaWQpIHwgTURJT19DVExfREVWX0FERFIoZGV2X2FkZHIpKTsKKwltZGlvX2N0bCA9IE1ESU9fQ1RMX1BPUlRfQUREUihwaHlfaWQpIHwgTURJT19DVExfREVWX0FERFIoZGV2X2FkZHIpOworCWlvd3JpdGUzMmJlKG1kaW9fY3RsLCAmcmVncy0+bWRpb19jdGwpOwogCiAJLyogU2V0IHRoZSByZWdpc3RlciBhZGRyZXNzICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1kaW9fYWRkciwgcmVnbnVtICYgMHhmZmZmKTsKKwlpZiAocmVnbnVtICYgTUlJX0FERFJfQzQ1KSB7CisJCWlvd3JpdGUzMmJlKHJlZ251bSAmIDB4ZmZmZiwgJnJlZ3MtPm1kaW9fYWRkcik7CiAKLQlyZXQgPSB4Z21hY193YWl0X3VudGlsX2ZyZWUoJmJ1cy0+ZGV2LCByZWdzKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlyZXQgPSB4Z21hY193YWl0X3VudGlsX2ZyZWUoJmJ1cy0+ZGV2LCByZWdzKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQogCiAJLyogV3JpdGUgdGhlIHZhbHVlIHRvIHRoZSByZWdpc3RlciAqLwotCW91dF9iZTMyKCZyZWdzLT5tZGlvX2RhdGEsIE1ESU9fREFUQSh2YWx1ZSkpOworCWlvd3JpdGUzMmJlKE1ESU9fREFUQSh2YWx1ZSksICZyZWdzLT5tZGlvX2RhdGEpOwogCiAJcmV0ID0geGdtYWNfd2FpdF91bnRpbF9kb25lKCZidXMtPmRldiwgcmVncyk7CiAJaWYgKHJldCkKQEAgLTEzMCwxMyArMTUyLDIyIEBACiBzdGF0aWMgaW50IHhnbWFjX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnbnVtKQogewogCXN0cnVjdCB0Z2VjX21kaW9fY29udHJvbGxlciBfX2lvbWVtICpyZWdzID0gYnVzLT5wcml2OwotCXVpbnQxNl90IGRldl9hZGRyID0gcmVnbnVtID4+IDE2OworCXVpbnQxNl90IGRldl9hZGRyOworCXVpbnQzMl90IG1kaW9fc3RhdDsKIAl1aW50MzJfdCBtZGlvX2N0bDsKIAl1aW50MTZfdCB2YWx1ZTsKIAlpbnQgcmV0OwogCi0JLyogU2V0dXAgdGhlIE1JSSBNZ210IGNsb2NrIHNwZWVkICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1kaW9fc3RhdCwgTURJT19TVEFUX0NMS0RJVigxMDApKTsKKwltZGlvX3N0YXQgPSBpb3JlYWQzMmJlKCZyZWdzLT5tZGlvX3N0YXQpOworCWlmIChyZWdudW0gJiBNSUlfQUREUl9DNDUpIHsKKwkJZGV2X2FkZHIgPSAocmVnbnVtID4+IDE2KSAmIDB4MWY7CisJCW1kaW9fc3RhdCB8PSBNRElPX1NUQVRfRU5DOworCX0gZWxzZSB7CisJCWRldl9hZGRyID0gcmVnbnVtICYgMHgxZjsKKwkJbWRpb19zdGF0ICY9IH5NRElPX1NUQVRfRU5DOworCX0KKworCWlvd3JpdGUzMmJlKG1kaW9fc3RhdCwgJnJlZ3MtPm1kaW9fc3RhdCk7CiAKIAlyZXQgPSB4Z21hY193YWl0X3VudGlsX2ZyZWUoJmJ1cy0+ZGV2LCByZWdzKTsKIAlpZiAocmV0KQpAQCAtMTQ0LDU0ICsxNzUsMzggQEAKIAogCS8qIFNldCB0aGUgUG9ydCBhbmQgRGV2aWNlIEFkZHJzICovCiAJbWRpb19jdGwgPSBNRElPX0NUTF9QT1JUX0FERFIocGh5X2lkKSB8IE1ESU9fQ1RMX0RFVl9BRERSKGRldl9hZGRyKTsKLQlvdXRfYmUzMigmcmVncy0+bWRpb19jdGwsIG1kaW9fY3RsKTsKKwlpb3dyaXRlMzJiZShtZGlvX2N0bCwgJnJlZ3MtPm1kaW9fY3RsKTsKIAogCS8qIFNldCB0aGUgcmVnaXN0ZXIgYWRkcmVzcyAqLwotCW91dF9iZTMyKCZyZWdzLT5tZGlvX2FkZHIsIHJlZ251bSAmIDB4ZmZmZik7CisJaWYgKHJlZ251bSAmIE1JSV9BRERSX0M0NSkgeworCQlpb3dyaXRlMzJiZShyZWdudW0gJiAweGZmZmYsICZyZWdzLT5tZGlvX2FkZHIpOwogCi0JcmV0ID0geGdtYWNfd2FpdF91bnRpbF9mcmVlKCZidXMtPmRldiwgcmVncyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJcmV0ID0geGdtYWNfd2FpdF91bnRpbF9mcmVlKCZidXMtPmRldiwgcmVncyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KIAogCS8qIEluaXRpYXRlIHRoZSByZWFkICovCi0Jb3V0X2JlMzIoJnJlZ3MtPm1kaW9fY3RsLCBtZGlvX2N0bCB8IE1ESU9fQ1RMX1JFQUQpOworCWlvd3JpdGUzMmJlKG1kaW9fY3RsIHwgTURJT19DVExfUkVBRCwgJnJlZ3MtPm1kaW9fY3RsKTsKIAogCXJldCA9IHhnbWFjX3dhaXRfdW50aWxfZG9uZSgmYnVzLT5kZXYsIHJlZ3MpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAkvKiBSZXR1cm4gYWxsIEZzIGlmIG5vdGhpbmcgd2FzIHRoZXJlICovCi0JaWYgKGluX2JlMzIoJnJlZ3MtPm1kaW9fc3RhdCkgJiBNRElPX1NUQVRfUkRfRVIpIHsKKwlpZiAoaW9yZWFkMzJiZSgmcmVncy0+bWRpb19zdGF0KSAmIE1ESU9fU1RBVF9SRF9FUikgewogCQlkZXZfZXJyKCZidXMtPmRldiwKIAkJCSJFcnJvciB3aGlsZSByZWFkaW5nIFBIWSVkIHJlZyBhdCAlZC4laGh1XG4iLAogCQkJcGh5X2lkLCBkZXZfYWRkciwgcmVnbnVtKTsKIAkJcmV0dXJuIDB4ZmZmZjsKIAl9CiAKLQl2YWx1ZSA9IGluX2JlMzIoJnJlZ3MtPm1kaW9fZGF0YSkgJiAweGZmZmY7CisJdmFsdWUgPSBpb3JlYWQzMmJlKCZyZWdzLT5tZGlvX2RhdGEpICYgMHhmZmZmOwogCWRldl9kYmcoJmJ1cy0+ZGV2LCAicmVhZCAlMDR4XG4iLCB2YWx1ZSk7CiAKIAlyZXR1cm4gdmFsdWU7CiB9CiAKLS8qIFJlc2V0IHRoZSBNSUlNIHJlZ2lzdGVycywgYW5kIHdhaXQgZm9yIHRoZSBidXMgdG8gZnJlZSAqLwotc3RhdGljIGludCB4Z21hY19tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCi17Ci0Jc3RydWN0IHRnZWNfbWRpb19jb250cm9sbGVyIF9faW9tZW0gKnJlZ3MgPSBidXMtPnByaXY7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJmJ1cy0+bWRpb19sb2NrKTsKLQotCS8qIFNldHVwIHRoZSBNSUkgTWdtdCBjbG9jayBzcGVlZCAqLwotCW91dF9iZTMyKCZyZWdzLT5tZGlvX3N0YXQsIE1ESU9fU1RBVF9DTEtESVYoMTAwKSk7Ci0KLQlyZXQgPSB4Z21hY193YWl0X3VudGlsX2ZyZWUoJmJ1cy0+ZGV2LCByZWdzKTsKLQotCW11dGV4X3VubG9jaygmYnVzLT5tZGlvX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCB4Z21hY19tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOwpAQCAtMjA1LDE1ICsyMjAsMTMgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlidXMgPSBtZGlvYnVzX2FsbG9jX3NpemUoUEhZX01BWF9BRERSICogc2l6ZW9mKGludCkpOworCWJ1cyA9IG1kaW9idXNfYWxsb2MoKTsKIAlpZiAoIWJ1cykKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlidXMtPm5hbWUgPSAiRnJlZXNjYWxlIFhHTUFDIE1ESU8gQnVzIjsKIAlidXMtPnJlYWQgPSB4Z21hY19tZGlvX3JlYWQ7CiAJYnVzLT53cml0ZSA9IHhnbWFjX21kaW9fd3JpdGU7Ci0JYnVzLT5yZXNldCA9IHhnbWFjX21kaW9fcmVzZXQ7Ci0JYnVzLT5pcnEgPSBidXMtPnByaXY7CiAJYnVzLT5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCXNucHJpbnRmKGJ1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiVsbHgiLCAodW5zaWduZWQgbG9uZyBsb25nKXJlcy5zdGFydCk7CiAKQEAgLTI1OCw2ICsyNzEsOSBAQAogCXsKIAkJLmNvbXBhdGlibGUgPSAiZnNsLGZtYW4teG1kaW8iLAogCX0sCisJeworCQkuY29tcGF0aWJsZSA9ICJmc2wsZm1hbi1tZW1hYy1tZGlvIiwKKwl9LAogCXt9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHhnbWFjX21kaW9fbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZwppbmRleCBlOTQyMTczLi5hNTRkODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZwpAQCAtMjQsNCArMjQsMTMgQEAKIAloZWxwCiAJICBUaGlzIHNlbGVjdHMgdGhlIGhpeDVoZDIgbWFjIGZhbWlseSBuZXR3b3JrIGRldmljZS4KIAorY29uZmlnIEhJUDA0X0VUSAorCXRyaXN0YXRlICJISVNJTElDT04gUDA0IEV0aGVybmV0IHN1cHBvcnQiCisJc2VsZWN0IFBIWUxJQgorCXNlbGVjdCBNQVJWRUxMX1BIWQorCXNlbGVjdCBNRkRfU1lTQ09OCisJLS0taGVscC0tLQorCSAgSWYgeW91IHdpc2ggdG8gY29tcGlsZSBhIGtlcm5lbCBmb3IgYSBoYXJkd2FyZSB3aXRoIGhpc2lsaWNvbiBwMDQgU29DIGFuZAorCSAgd2FudCB0byB1c2UgdGhlIGludGVybmFsIGV0aGVybmV0IHRoZW4geW91IHNob3VsZCBhbnN3ZXIgWSB0byB0aGlzLgorCiBlbmRpZiAjIE5FVF9WRU5ET1JfSElTSUxJQ09OCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vTWFrZWZpbGUKaW5kZXggOTE3NWU4NDYuLjZjMTQ1NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vTWFrZWZpbGUKQEAgLTMsMyArMyw0IEBACiAjCiAKIG9iai0kKENPTkZJR19ISVg1SEQyX0dNQUMpICs9IGhpeDVoZDJfZ21hYy5vCitvYmotJChDT05GSUdfSElQMDRfRVRIKSArPSBoaXAwNF9tZGlvLm8gaGlwMDRfZXRoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzJkMjM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jCkBAIC0wLDAgKzEsOTcxIEBACisKKy8qIENvcHlyaWdodCAoYykgMjAxNCBMaW5hcm8gTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDE0IEhpc2lsaWNvbiBMaW1pdGVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfbWRpby5oPgorI2luY2x1ZGUgPGxpbnV4L29mX25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKworI2RlZmluZSBQUEVfQ0ZHX1JYX0FERFIJCQkweDEwMAorI2RlZmluZSBQUEVfQ0ZHX1BPT0xfR1JQCQkweDMwMAorI2RlZmluZSBQUEVfQ0ZHX1JYX0JVRl9TSVpFCQkweDQwMAorI2RlZmluZSBQUEVfQ0ZHX1JYX0ZJRk9fU0laRQkJMHg1MDAKKyNkZWZpbmUgUFBFX0NVUlJfQlVGX0NOVAkJMHhhMjAwCisKKyNkZWZpbmUgR0VfRFVQTEVYX1RZUEUJCQkweDA4CisjZGVmaW5lIEdFX01BWF9GUk1fU0laRV9SRUcJCTB4M2MKKyNkZWZpbmUgR0VfUE9SVF9NT0RFCQkJMHg0MAorI2RlZmluZSBHRV9QT1JUX0VOCQkJMHg0NAorI2RlZmluZSBHRV9TSE9SVF9SVU5UU19USFJfUkVHCQkweDUwCisjZGVmaW5lIEdFX1RYX0xPQ0FMX1BBR0VfUkVHCQkweDVjCisjZGVmaW5lIEdFX1RSQU5TTUlUX0NPTlRST0xfUkVHCQkweDYwCisjZGVmaW5lIEdFX0NGX0NSQ19TVFJJUF9SRUcJCTB4MWIwCisjZGVmaW5lIEdFX01PREVfQ0hBTkdFX1JFRwkJMHgxYjQKKyNkZWZpbmUgR0VfUkVDVl9DT05UUk9MX1JFRwkJMHgxZTAKKyNkZWZpbmUgR0VfU1RBVElPTl9NQUNfQUREUkVTUwkJMHgyMTAKKyNkZWZpbmUgUFBFX0NGR19DUFVfQUREX0FERFIJCTB4NTgwCisjZGVmaW5lIFBQRV9DRkdfTUFYX0ZSQU1FX0xFTl9SRUcJMHg0MDgKKyNkZWZpbmUgUFBFX0NGR19CVVNfQ1RSTF9SRUcJCTB4NDI0CisjZGVmaW5lIFBQRV9DRkdfUlhfQ1RSTF9SRUcJCTB4NDI4CisjZGVmaW5lIFBQRV9DRkdfUlhfUEtUX01PREVfUkVHCQkweDQzOAorI2RlZmluZSBQUEVfQ0ZHX1FPU19WTUlEX0dFTgkJMHg1MDAKKyNkZWZpbmUgUFBFX0NGR19SWF9QS1RfSU5UCQkweDUzOAorI2RlZmluZSBQUEVfSU5URU4JCQkweDYwMAorI2RlZmluZSBQUEVfSU5UU1RTCQkJMHg2MDgKKyNkZWZpbmUgUFBFX1JJTlQJCQkweDYwNAorI2RlZmluZSBQUEVfQ0ZHX1NUU19NT0RFCQkweDcwMAorI2RlZmluZSBQUEVfSElTX1JYX1BLVF9DTlQJCTB4ODA0CisKKy8qIFJFR19JTlRFUlJVUFQgKi8KKyNkZWZpbmUgUkNWX0lOVAkJCQlCSVQoMTApCisjZGVmaW5lIFJDVl9OT0JVRgkJCUJJVCg4KQorI2RlZmluZSBSQ1ZfRFJPUAkJCUJJVCg3KQorI2RlZmluZSBUWF9EUk9QCQkJCUJJVCg2KQorI2RlZmluZSBERUZfSU5UX0VSUgkJCShSQ1ZfTk9CVUYgfCBSQ1ZfRFJPUCB8IFRYX0RST1ApCisjZGVmaW5lIERFRl9JTlRfTUFTSwkJCShSQ1ZfSU5UIHwgREVGX0lOVF9FUlIpCisKKy8qIFRYIGRlc2NyaXB0b3IgY29uZmlnICovCisjZGVmaW5lIFRYX0ZSRUVfTUVNCQkJQklUKDApCisjZGVmaW5lIFRYX1JFQURfQUxMT0NfTDMJCUJJVCgxKQorI2RlZmluZSBUWF9GSU5JU0hfQ0FDSEVfSU5WCQlCSVQoMikKKyNkZWZpbmUgVFhfQ0xFQVJfV0IJCQlCSVQoNCkKKyNkZWZpbmUgVFhfTDNfQ0hFQ0tTVU0JCQlCSVQoNSkKKyNkZWZpbmUgVFhfTE9PUF9CQUNLCQkJQklUKDExKQorCisvKiBSWCBlcnJvciAqLworI2RlZmluZSBSWF9QS1RfRFJPUAkJCUJJVCgwKQorI2RlZmluZSBSWF9MMl9FUlIJCQlCSVQoMSkKKyNkZWZpbmUgUlhfUEtUX0VSUgkJCShSWF9QS1RfRFJPUCB8IFJYX0wyX0VSUikKKworI2RlZmluZSBTR01JSV9TUEVFRF8xMDAwCQkweDA4CisjZGVmaW5lIFNHTUlJX1NQRUVEXzEwMAkJCTB4MDcKKyNkZWZpbmUgU0dNSUlfU1BFRURfMTAJCQkweDA2CisjZGVmaW5lIE1JSV9TUEVFRF8xMDAJCQkweDAxCisjZGVmaW5lIE1JSV9TUEVFRF8xMAkJCTB4MDAKKworI2RlZmluZSBHRV9EVVBMRVhfRlVMTAkJCUJJVCgwKQorI2RlZmluZSBHRV9EVVBMRVhfSEFMRgkJCTB4MDAKKyNkZWZpbmUgR0VfTU9ERV9DSEFOR0VfRU4JCUJJVCgwKQorCisjZGVmaW5lIEdFX1RYX0FVVE9fTkVHCQkJQklUKDUpCisjZGVmaW5lIEdFX1RYX0FERF9DUkMJCQlCSVQoNikKKyNkZWZpbmUgR0VfVFhfU0hPUlRfUEFEX1RIUk9VR0gJCUJJVCg3KQorCisjZGVmaW5lIEdFX1JYX1NUUklQX0NSQwkJCUJJVCgwKQorI2RlZmluZSBHRV9SWF9TVFJJUF9QQUQJCQlCSVQoMykKKyNkZWZpbmUgR0VfUlhfUEFEX0VOCQkJQklUKDQpCisKKyNkZWZpbmUgR0VfQVVUT19ORUdfQ1RMCQkJQklUKDApCisKKyNkZWZpbmUgR0VfUlhfSU5UX1RIUkVTSE9MRAkJQklUKDYpCisjZGVmaW5lIEdFX1JYX1RJTUVPVVQJCQkweDA0CisKKyNkZWZpbmUgR0VfUlhfUE9SVF9FTgkJCUJJVCgxKQorI2RlZmluZSBHRV9UWF9QT1JUX0VOCQkJQklUKDIpCisKKyNkZWZpbmUgUFBFX0NGR19TVFNfUlhfUEtUX0NOVF9SQwlCSVQoMTIpCisKKyNkZWZpbmUgUFBFX0NGR19SWF9QS1RfQUxJR04JCUJJVCgxOCkKKyNkZWZpbmUgUFBFX0NGR19RT1NfVk1JRF9NT0RFCQlCSVQoMTQpCisjZGVmaW5lIFBQRV9DRkdfUU9TX1ZNSURfR1JQX1NISUZUCTgKKworI2RlZmluZSBQUEVfQ0ZHX1JYX0ZJRk9fRlNGVQkJQklUKDExKQorI2RlZmluZSBQUEVfQ0ZHX1JYX0RFUFRIX1NISUZUCQkxNgorI2RlZmluZSBQUEVfQ0ZHX1JYX1NUQVJUX1NISUZUCQkwCisjZGVmaW5lIFBQRV9DRkdfUlhfQ1RSTF9BTElHTl9TSElGVAkxMQorCisjZGVmaW5lIFBQRV9DRkdfQlVTX0xPQ0FMX1JFTAkJQklUKDE0KQorI2RlZmluZSBQUEVfQ0ZHX0JVU19CSUdfRU5ESUVOCQlCSVQoMCkKKworI2RlZmluZSBSWF9ERVNDX05VTQkJCTEyOAorI2RlZmluZSBUWF9ERVNDX05VTQkJCTI1NgorI2RlZmluZSBUWF9ORVhUKE4pCQkJKCgoTikgKyAxKSAmIChUWF9ERVNDX05VTS0xKSkKKyNkZWZpbmUgUlhfTkVYVChOKQkJCSgoKE4pICsgMSkgJiAoUlhfREVTQ19OVU0tMSkpCisKKyNkZWZpbmUgR01BQ19QUEVfUlhfUEtUX01BWF9MRU4JCTM3OQorI2RlZmluZSBHTUFDX01BWF9QS1RfTEVOCQkxNTE2CisjZGVmaW5lIEdNQUNfTUlOX1BLVF9MRU4JCTMxCisjZGVmaW5lIFJYX0JVRl9TSVpFCQkJMTYwMAorI2RlZmluZSBSRVNFVF9USU1FT1VUCQkJMTAwMAorI2RlZmluZSBUWF9USU1FT1VUCQkJKDYgKiBIWikKKworI2RlZmluZSBEUlZfTkFNRQkJCSJoaXAwNC1ldGhlciIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCQkidjEuMCIKKworI2RlZmluZSBISVAwNF9NQVhfVFhfQ09BTEVTQ0VfVVNFQ1MJMjAwCisjZGVmaW5lIEhJUDA0X01JTl9UWF9DT0FMRVNDRV9VU0VDUwkxMDAKKyNkZWZpbmUgSElQMDRfTUFYX1RYX0NPQUxFU0NFX0ZSQU1FUwkyMDAKKyNkZWZpbmUgSElQMDRfTUlOX1RYX0NPQUxFU0NFX0ZSQU1FUwkxMDAKKworc3RydWN0IHR4X2Rlc2MgeworCXUzMiBzZW5kX2FkZHI7CisJdTMyIHNlbmRfc2l6ZTsKKwl1MzIgbmV4dF9hZGRyOworCXUzMiBjZmc7CisJdTMyIHdiX2FkZHI7Cit9IF9fYWxpZ25lZCg2NCk7CisKK3N0cnVjdCByeF9kZXNjIHsKKwl1MTYgcmVzZXJ2ZWRfMTY7CisJdTE2IHBrdF9sZW47CisJdTMyIHJlc2VydmUxWzNdOworCXUzMiBwa3RfZXJyOworCXUzMiByZXNlcnZlMls0XTsKK307CisKK3N0cnVjdCBoaXAwNF9wcml2IHsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJaW50IHBoeV9tb2RlOworCWludCBjaGFuOworCXVuc2lnbmVkIGludCBwb3J0OworCXVuc2lnbmVkIGludCBzcGVlZDsKKwl1bnNpZ25lZCBpbnQgZHVwbGV4OworCXVuc2lnbmVkIGludCByZWdfaW50ZW47CisKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKKworCXN0cnVjdCB0eF9kZXNjICp0eF9kZXNjOworCWRtYV9hZGRyX3QgdHhfZGVzY19kbWE7CisJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYltUWF9ERVNDX05VTV07CisJZG1hX2FkZHJfdCB0eF9waHlzW1RYX0RFU0NfTlVNXTsKKwl1bnNpZ25lZCBpbnQgdHhfaGVhZDsKKworCWludCB0eF9jb2FsZXNjZV9mcmFtZXM7CisJaW50IHR4X2NvYWxlc2NlX3VzZWNzOworCXN0cnVjdCBocnRpbWVyIHR4X2NvYWxlc2NlX3RpbWVyOworCisJdW5zaWduZWQgY2hhciAqcnhfYnVmW1JYX0RFU0NfTlVNXTsKKwlkbWFfYWRkcl90IHJ4X3BoeXNbUlhfREVTQ19OVU1dOworCXVuc2lnbmVkIGludCByeF9oZWFkOworCXVuc2lnbmVkIGludCByeF9idWZfc2l6ZTsKKworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X25vZGU7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeTsKKwlzdHJ1Y3QgcmVnbWFwICptYXA7CisJc3RydWN0IHdvcmtfc3RydWN0IHR4X3RpbWVvdXRfdGFzazsKKworCS8qIHdyaXR0ZW4gb25seSBieSB0eCBjbGVhbnVwICovCisJdW5zaWduZWQgaW50IHR4X3RhaWwgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHR4X2NvdW50KHVuc2lnbmVkIGludCBoZWFkLCB1bnNpZ25lZCBpbnQgdGFpbCkKK3sKKwlyZXR1cm4gKGhlYWQgLSB0YWlsKSAlIChUWF9ERVNDX05VTSAtIDEpOworfQorCitzdGF0aWMgdm9pZCBoaXAwNF9jb25maWdfcG9ydChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHNwZWVkLCB1MzIgZHVwbGV4KQoreworCXN0cnVjdCBoaXAwNF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJdTMyIHZhbDsKKworCXByaXYtPnNwZWVkID0gc3BlZWQ7CisJcHJpdi0+ZHVwbGV4ID0gZHVwbGV4OworCisJc3dpdGNoIChwcml2LT5waHlfbW9kZSkgeworCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJOgorCQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkKKwkJCXZhbCA9IFNHTUlJX1NQRUVEXzEwMDA7CisJCWVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkKKwkJCXZhbCA9IFNHTUlJX1NQRUVEXzEwMDsKKwkJZWxzZQorCQkJdmFsID0gU0dNSUlfU1BFRURfMTA7CisJCWJyZWFrOworCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX01JSToKKwkJaWYgKHNwZWVkID09IFNQRUVEXzEwMCkKKwkJCXZhbCA9IE1JSV9TUEVFRF8xMDA7CisJCWVsc2UKKwkJCXZhbCA9IE1JSV9TUEVFRF8xMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbmV0ZGV2X3dhcm4obmRldiwgIm5vdCBzdXBwb3J0ZWQgbW9kZVxuIik7CisJCXZhbCA9IE1JSV9TUEVFRF8xMDsKKwkJYnJlYWs7CisJfQorCXdyaXRlbF9yZWxheGVkKHZhbCwgcHJpdi0+YmFzZSArIEdFX1BPUlRfTU9ERSk7CisKKwl2YWwgPSBkdXBsZXggPyBHRV9EVVBMRVhfRlVMTCA6IEdFX0RVUExFWF9IQUxGOworCXdyaXRlbF9yZWxheGVkKHZhbCwgcHJpdi0+YmFzZSArIEdFX0RVUExFWF9UWVBFKTsKKworCXZhbCA9IEdFX01PREVfQ0hBTkdFX0VOOworCXdyaXRlbF9yZWxheGVkKHZhbCwgcHJpdi0+YmFzZSArIEdFX01PREVfQ0hBTkdFX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIGhpcDA0X3Jlc2V0X3BwZShzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdikKK3sKKwl1MzIgdmFsLCB0bXAsIHRpbWVvdXQgPSAwOworCisJZG8geworCQlyZWdtYXBfcmVhZChwcml2LT5tYXAsIHByaXYtPnBvcnQgKiA0ICsgUFBFX0NVUlJfQlVGX0NOVCwgJnZhbCk7CisJCXJlZ21hcF9yZWFkKHByaXYtPm1hcCwgcHJpdi0+cG9ydCAqIDQgKyBQUEVfQ0ZHX1JYX0FERFIsICZ0bXApOworCQlpZiAodGltZW91dCsrID4gUkVTRVRfVElNRU9VVCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKHZhbCAmIDB4ZmZmKTsKK30KKworc3RhdGljIHZvaWQgaGlwMDRfY29uZmlnX2ZpZm8oc3RydWN0IGhpcDA0X3ByaXYgKnByaXYpCit7CisJdTMyIHZhbDsKKworCXZhbCA9IHJlYWRsX3JlbGF4ZWQocHJpdi0+YmFzZSArIFBQRV9DRkdfU1RTX01PREUpOworCXZhbCB8PSBQUEVfQ0ZHX1NUU19SWF9QS1RfQ05UX1JDOworCXdyaXRlbF9yZWxheGVkKHZhbCwgcHJpdi0+YmFzZSArIFBQRV9DRkdfU1RTX01PREUpOworCisJdmFsID0gQklUKHByaXYtPnBvcnQpOworCXJlZ21hcF93cml0ZShwcml2LT5tYXAsIHByaXYtPnBvcnQgKiA0ICsgUFBFX0NGR19QT09MX0dSUCwgdmFsKTsKKworCXZhbCA9IHByaXYtPnBvcnQgPDwgUFBFX0NGR19RT1NfVk1JRF9HUlBfU0hJRlQ7CisJdmFsIHw9IFBQRV9DRkdfUU9TX1ZNSURfTU9ERTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHByaXYtPmJhc2UgKyBQUEVfQ0ZHX1FPU19WTUlEX0dFTik7CisKKwl2YWwgPSBSWF9CVUZfU0laRTsKKwlyZWdtYXBfd3JpdGUocHJpdi0+bWFwLCBwcml2LT5wb3J0ICogNCArIFBQRV9DRkdfUlhfQlVGX1NJWkUsIHZhbCk7CisKKwl2YWwgPSBSWF9ERVNDX05VTSA8PCBQUEVfQ0ZHX1JYX0RFUFRIX1NISUZUOworCXZhbCB8PSBQUEVfQ0ZHX1JYX0ZJRk9fRlNGVTsKKwl2YWwgfD0gcHJpdi0+Y2hhbiA8PCBQUEVfQ0ZHX1JYX1NUQVJUX1NISUZUOworCXJlZ21hcF93cml0ZShwcml2LT5tYXAsIHByaXYtPnBvcnQgKiA0ICsgUFBFX0NGR19SWF9GSUZPX1NJWkUsIHZhbCk7CisKKwl2YWwgPSBORVRfSVBfQUxJR04gPDwgUFBFX0NGR19SWF9DVFJMX0FMSUdOX1NISUZUOworCXdyaXRlbF9yZWxheGVkKHZhbCwgcHJpdi0+YmFzZSArIFBQRV9DRkdfUlhfQ1RSTF9SRUcpOworCisJdmFsID0gUFBFX0NGR19SWF9QS1RfQUxJR047CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBwcml2LT5iYXNlICsgUFBFX0NGR19SWF9QS1RfTU9ERV9SRUcpOworCisJdmFsID0gUFBFX0NGR19CVVNfTE9DQUxfUkVMIHwgUFBFX0NGR19CVVNfQklHX0VORElFTjsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHByaXYtPmJhc2UgKyBQUEVfQ0ZHX0JVU19DVFJMX1JFRyk7CisKKwl2YWwgPSBHTUFDX1BQRV9SWF9QS1RfTUFYX0xFTjsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHByaXYtPmJhc2UgKyBQUEVfQ0ZHX01BWF9GUkFNRV9MRU5fUkVHKTsKKworCXZhbCA9IEdNQUNfTUFYX1BLVF9MRU47CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBwcml2LT5iYXNlICsgR0VfTUFYX0ZSTV9TSVpFX1JFRyk7CisKKwl2YWwgPSBHTUFDX01JTl9QS1RfTEVOOworCXdyaXRlbF9yZWxheGVkKHZhbCwgcHJpdi0+YmFzZSArIEdFX1NIT1JUX1JVTlRTX1RIUl9SRUcpOworCisJdmFsID0gcmVhZGxfcmVsYXhlZChwcml2LT5iYXNlICsgR0VfVFJBTlNNSVRfQ09OVFJPTF9SRUcpOworCXZhbCB8PSBHRV9UWF9BVVRPX05FRyB8IEdFX1RYX0FERF9DUkMgfCBHRV9UWF9TSE9SVF9QQURfVEhST1VHSDsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHByaXYtPmJhc2UgKyBHRV9UUkFOU01JVF9DT05UUk9MX1JFRyk7CisKKwl2YWwgPSBHRV9SWF9TVFJJUF9DUkM7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBwcml2LT5iYXNlICsgR0VfQ0ZfQ1JDX1NUUklQX1JFRyk7CisKKwl2YWwgPSByZWFkbF9yZWxheGVkKHByaXYtPmJhc2UgKyBHRV9SRUNWX0NPTlRST0xfUkVHKTsKKwl2YWwgfD0gR0VfUlhfU1RSSVBfUEFEIHwgR0VfUlhfUEFEX0VOOworCXdyaXRlbF9yZWxheGVkKHZhbCwgcHJpdi0+YmFzZSArIEdFX1JFQ1ZfQ09OVFJPTF9SRUcpOworCisJdmFsID0gR0VfQVVUT19ORUdfQ1RMOworCXdyaXRlbF9yZWxheGVkKHZhbCwgcHJpdi0+YmFzZSArIEdFX1RYX0xPQ0FMX1BBR0VfUkVHKTsKK30KKworc3RhdGljIHZvaWQgaGlwMDRfbWFjX2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCXUzMiB2YWw7CisKKwkvKiBlbmFibGUgdHggJiByeCAqLworCXZhbCA9IHJlYWRsX3JlbGF4ZWQocHJpdi0+YmFzZSArIEdFX1BPUlRfRU4pOworCXZhbCB8PSBHRV9SWF9QT1JUX0VOIHwgR0VfVFhfUE9SVF9FTjsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHByaXYtPmJhc2UgKyBHRV9QT1JUX0VOKTsKKworCS8qIGNsZWFyIHJ4IGludCAqLworCXZhbCA9IFJDVl9JTlQ7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBwcml2LT5iYXNlICsgUFBFX1JJTlQpOworCisJLyogY29uZmlnIHJlY3YgaW50ICovCisJdmFsID0gR0VfUlhfSU5UX1RIUkVTSE9MRCB8IEdFX1JYX1RJTUVPVVQ7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBwcml2LT5iYXNlICsgUFBFX0NGR19SWF9QS1RfSU5UKTsKKworCS8qIGVuYWJsZSBpbnRlcnJ1cHQgKi8KKwlwcml2LT5yZWdfaW50ZW4gPSBERUZfSU5UX01BU0s7CisJd3JpdGVsX3JlbGF4ZWQocHJpdi0+cmVnX2ludGVuLCBwcml2LT5iYXNlICsgUFBFX0lOVEVOKTsKK30KKworc3RhdGljIHZvaWQgaGlwMDRfbWFjX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IGhpcDA0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1MzIgdmFsOworCisJLyogZGlzYWJsZSBpbnQgKi8KKwlwcml2LT5yZWdfaW50ZW4gJj0gfihERUZfSU5UX01BU0spOworCXdyaXRlbF9yZWxheGVkKHByaXYtPnJlZ19pbnRlbiwgcHJpdi0+YmFzZSArIFBQRV9JTlRFTik7CisKKwkvKiBkaXNhYmxlIHR4ICYgcnggKi8KKwl2YWwgPSByZWFkbF9yZWxheGVkKHByaXYtPmJhc2UgKyBHRV9QT1JUX0VOKTsKKwl2YWwgJj0gfihHRV9SWF9QT1JUX0VOIHwgR0VfVFhfUE9SVF9FTik7CisJd3JpdGVsX3JlbGF4ZWQodmFsLCBwcml2LT5iYXNlICsgR0VfUE9SVF9FTik7Cit9CisKK3N0YXRpYyB2b2lkIGhpcDA0X3NldF94bWl0X2Rlc2Moc3RydWN0IGhpcDA0X3ByaXYgKnByaXYsIGRtYV9hZGRyX3QgcGh5cykKK3sKKwl3cml0ZWwocGh5cywgcHJpdi0+YmFzZSArIFBQRV9DRkdfQ1BVX0FERF9BRERSKTsKK30KKworc3RhdGljIHZvaWQgaGlwMDRfc2V0X3JlY3ZfZGVzYyhzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdiwgZG1hX2FkZHJfdCBwaHlzKQoreworCXJlZ21hcF93cml0ZShwcml2LT5tYXAsIHByaXYtPnBvcnQgKiA0ICsgUFBFX0NGR19SWF9BRERSLCBwaHlzKTsKK30KKworc3RhdGljIHUzMiBoaXAwNF9yZWN2X2NudChzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdikKK3sKKwlyZXR1cm4gcmVhZGwocHJpdi0+YmFzZSArIFBQRV9ISVNfUlhfUEtUX0NOVCk7Cit9CisKK3N0YXRpYyB2b2lkIGhpcDA0X3VwZGF0ZV9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCisJd3JpdGVsX3JlbGF4ZWQoKChuZGV2LT5kZXZfYWRkclswXSA8PCA4KSB8IChuZGV2LT5kZXZfYWRkclsxXSkpLAorCQkgICAgICAgcHJpdi0+YmFzZSArIEdFX1NUQVRJT05fTUFDX0FERFJFU1MpOworCXdyaXRlbF9yZWxheGVkKCgobmRldi0+ZGV2X2FkZHJbMl0gPDwgMjQpIHwgKG5kZXYtPmRldl9hZGRyWzNdIDw8IDE2KSB8CisJCQkobmRldi0+ZGV2X2FkZHJbNF0gPDwgOCkgfCAobmRldi0+ZGV2X2FkZHJbNV0pKSwKKwkJICAgICAgIHByaXYtPmJhc2UgKyBHRV9TVEFUSU9OX01BQ19BRERSRVNTICsgNCk7Cit9CisKK3N0YXRpYyBpbnQgaGlwMDRfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB2b2lkICphZGRyKQoreworCWV0aF9tYWNfYWRkcihuZGV2LCBhZGRyKTsKKwloaXAwNF91cGRhdGVfbWFjX2FkZHJlc3MobmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlwMDRfdHhfcmVjbGFpbShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgYm9vbCBmb3JjZSkKK3sKKwlzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCXVuc2lnbmVkIHR4X3RhaWwgPSBwcml2LT50eF90YWlsOworCXN0cnVjdCB0eF9kZXNjICpkZXNjOworCXVuc2lnbmVkIGludCBieXRlc19jb21wbCA9IDAsIHBrdHNfY29tcGwgPSAwOworCXVuc2lnbmVkIGludCBjb3VudDsKKworCXNtcF9ybWIoKTsKKwljb3VudCA9IHR4X2NvdW50KEFDQ0VTU19PTkNFKHByaXYtPnR4X2hlYWQpLCB0eF90YWlsKTsKKwlpZiAoY291bnQgPT0gMCkKKwkJZ290byBvdXQ7CisKKwl3aGlsZSAoY291bnQpIHsKKwkJZGVzYyA9ICZwcml2LT50eF9kZXNjW3R4X3RhaWxdOworCQlpZiAoZGVzYy0+c2VuZF9hZGRyICE9IDApIHsKKwkJCWlmIChmb3JjZSkKKwkJCQlkZXNjLT5zZW5kX2FkZHIgPSAwOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHByaXYtPnR4X3BoeXNbdHhfdGFpbF0pIHsKKwkJCWRtYV91bm1hcF9zaW5nbGUoJm5kZXYtPmRldiwgcHJpdi0+dHhfcGh5c1t0eF90YWlsXSwKKwkJCQkJIHByaXYtPnR4X3NrYlt0eF90YWlsXS0+bGVuLAorCQkJCQkgRE1BX1RPX0RFVklDRSk7CisJCQlwcml2LT50eF9waHlzW3R4X3RhaWxdID0gMDsKKwkJfQorCQlwa3RzX2NvbXBsKys7CisJCWJ5dGVzX2NvbXBsICs9IHByaXYtPnR4X3NrYlt0eF90YWlsXS0+bGVuOworCQlkZXZfa2ZyZWVfc2tiKHByaXYtPnR4X3NrYlt0eF90YWlsXSk7CisJCXByaXYtPnR4X3NrYlt0eF90YWlsXSA9IE5VTEw7CisJCXR4X3RhaWwgPSBUWF9ORVhUKHR4X3RhaWwpOworCQljb3VudC0tOworCX0KKworCXByaXYtPnR4X3RhaWwgPSB0eF90YWlsOworCXNtcF93bWIoKTsgLyogRW5zdXJlIHR4X3RhaWwgdmlzaWJsZSB0byB4bWl0ICovCisKK291dDoKKwlpZiAocGt0c19jb21wbCB8fCBieXRlc19jb21wbCkKKwkJbmV0ZGV2X2NvbXBsZXRlZF9xdWV1ZShuZGV2LCBwa3RzX2NvbXBsLCBieXRlc19jb21wbCk7CisKKwlpZiAodW5saWtlbHkobmV0aWZfcXVldWVfc3RvcHBlZChuZGV2KSkgJiYgKGNvdW50IDwgKFRYX0RFU0NfTlVNIC0gMSkpKQorCQluZXRpZl93YWtlX3F1ZXVlKG5kZXYpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGhpcDA0X21hY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBoaXAwNF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJm5kZXYtPnN0YXRzOworCXVuc2lnbmVkIGludCB0eF9oZWFkID0gcHJpdi0+dHhfaGVhZCwgY291bnQ7CisJc3RydWN0IHR4X2Rlc2MgKmRlc2MgPSAmcHJpdi0+dHhfZGVzY1t0eF9oZWFkXTsKKwlkbWFfYWRkcl90IHBoeXM7CisKKwlzbXBfcm1iKCk7CisJY291bnQgPSB0eF9jb3VudCh0eF9oZWFkLCBBQ0NFU1NfT05DRShwcml2LT50eF90YWlsKSk7CisJaWYgKGNvdW50ID09IChUWF9ERVNDX05VTSAtIDEpKSB7CisJCW5ldGlmX3N0b3BfcXVldWUobmRldik7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlwaHlzID0gZG1hX21hcF9zaW5nbGUoJm5kZXYtPmRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CisJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZuZGV2LT5kZXYsIHBoeXMpKSB7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlwcml2LT50eF9za2JbdHhfaGVhZF0gPSBza2I7CisJcHJpdi0+dHhfcGh5c1t0eF9oZWFkXSA9IHBoeXM7CisJZGVzYy0+c2VuZF9hZGRyID0gY3B1X3RvX2JlMzIocGh5cyk7CisJZGVzYy0+c2VuZF9zaXplID0gY3B1X3RvX2JlMzIoc2tiLT5sZW4pOworCWRlc2MtPmNmZyA9IGNwdV90b19iZTMyKFRYX0NMRUFSX1dCIHwgVFhfRklOSVNIX0NBQ0hFX0lOVik7CisJcGh5cyA9IHByaXYtPnR4X2Rlc2NfZG1hICsgdHhfaGVhZCAqIHNpemVvZihzdHJ1Y3QgdHhfZGVzYyk7CisJZGVzYy0+d2JfYWRkciA9IGNwdV90b19iZTMyKHBoeXMpOworCXNrYl90eF90aW1lc3RhbXAoc2tiKTsKKworCWhpcDA0X3NldF94bWl0X2Rlc2MocHJpdiwgcGh5cyk7CisJcHJpdi0+dHhfaGVhZCA9IFRYX05FWFQodHhfaGVhZCk7CisJY291bnQrKzsKKwluZXRkZXZfc2VudF9xdWV1ZShuZGV2LCBza2ItPmxlbik7CisKKwlzdGF0cy0+dHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJc3RhdHMtPnR4X3BhY2tldHMrKzsKKworCS8qIEVuc3VyZSB0eF9oZWFkIHVwZGF0ZSB2aXNpYmxlIHRvIHR4IHJlY2xhaW0gKi8KKwlzbXBfd21iKCk7CisKKwkvKiBxdWV1ZSBpcyBnZXR0aW5nIGZ1bGwsIGJldHRlciBzdGFydCBjbGVhbmluZyB1cCBub3cgKi8KKwlpZiAoY291bnQgPj0gcHJpdi0+dHhfY29hbGVzY2VfZnJhbWVzKSB7CisJCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSB7CisJCQkvKiBkaXNhYmxlIHJ4IGludGVycnVwdCBhbmQgdGltZXIgKi8KKwkJCXByaXYtPnJlZ19pbnRlbiAmPSB+KFJDVl9JTlQpOworCQkJd3JpdGVsX3JlbGF4ZWQoREVGX0lOVF9NQVNLICYgflJDVl9JTlQsCisJCQkJICAgICAgIHByaXYtPmJhc2UgKyBQUEVfSU5URU4pOworCQkJaHJ0aW1lcl9jYW5jZWwoJnByaXYtPnR4X2NvYWxlc2NlX3RpbWVyKTsKKwkJCV9fbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJCX0KKwl9IGVsc2UgaWYgKCFocnRpbWVyX2lzX3F1ZXVlZCgmcHJpdi0+dHhfY29hbGVzY2VfdGltZXIpKSB7CisJCS8qIGNsZWFudXAgbm90IHBlbmRpbmcgeWV0LCBzdGFydCBhIG5ldyB0aW1lciAqLworCQlocnRpbWVyX3N0YXJ0X2V4cGlyZXMoJnByaXYtPnR4X2NvYWxlc2NlX3RpbWVyLAorCQkJCSAgICAgIEhSVElNRVJfTU9ERV9SRUwpOworCX0KKworCXJldHVybiBORVRERVZfVFhfT0s7Cit9CisKK3N0YXRpYyBpbnQgaGlwMDRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGhpcDA0X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGhpcDA0X3ByaXYsIG5hcGkpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcHJpdi0+bmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbmRldi0+c3RhdHM7CisJdW5zaWduZWQgaW50IGNudCA9IGhpcDA0X3JlY3ZfY250KHByaXYpOworCXN0cnVjdCByeF9kZXNjICpkZXNjOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgY2hhciAqYnVmOworCWJvb2wgbGFzdCA9IGZhbHNlOworCWRtYV9hZGRyX3QgcGh5czsKKwlpbnQgcnggPSAwOworCWludCB0eF9yZW1haW5pbmc7CisJdTE2IGxlbjsKKwl1MzIgZXJyOworCisJd2hpbGUgKGNudCAmJiAhbGFzdCkgeworCQlidWYgPSBwcml2LT5yeF9idWZbcHJpdi0+cnhfaGVhZF07CisJCXNrYiA9IGJ1aWxkX3NrYihidWYsIHByaXYtPnJ4X2J1Zl9zaXplKTsKKwkJaWYgKHVubGlrZWx5KCFza2IpKQorCQkJbmV0X2RiZ19yYXRlbGltaXRlZCgiYnVpbGRfc2tiIGZhaWxlZFxuIik7CisKKwkJZG1hX3VubWFwX3NpbmdsZSgmbmRldi0+ZGV2LCBwcml2LT5yeF9waHlzW3ByaXYtPnJ4X2hlYWRdLAorCQkJCSBSWF9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJcHJpdi0+cnhfcGh5c1twcml2LT5yeF9oZWFkXSA9IDA7CisKKwkJZGVzYyA9IChzdHJ1Y3QgcnhfZGVzYyAqKXNrYi0+ZGF0YTsKKwkJbGVuID0gYmUxNl90b19jcHUoZGVzYy0+cGt0X2xlbik7CisJCWVyciA9IGJlMzJfdG9fY3B1KGRlc2MtPnBrdF9lcnIpOworCisJCWlmICgwID09IGxlbikgeworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCWxhc3QgPSB0cnVlOworCQl9IGVsc2UgaWYgKChlcnIgJiBSWF9QS1RfRVJSKSB8fCAobGVuID49IEdNQUNfTUFYX1BLVF9MRU4pKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKKwkJCXN0YXRzLT5yeF9lcnJvcnMrKzsKKwkJfSBlbHNlIHsKKwkJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX1NLQl9QQUQgKyBORVRfSVBfQUxJR04pOworCQkJc2tiX3B1dChza2IsIGxlbik7CisJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKKwkJCW5hcGlfZ3JvX3JlY2VpdmUoJnByaXYtPm5hcGksIHNrYik7CisJCQlzdGF0cy0+cnhfcGFja2V0cysrOworCQkJc3RhdHMtPnJ4X2J5dGVzICs9IGxlbjsKKwkJCXJ4Kys7CisJCX0KKworCQlidWYgPSBuZXRkZXZfYWxsb2NfZnJhZyhwcml2LT5yeF9idWZfc2l6ZSk7CisJCWlmICghYnVmKQorCQkJZ290byBkb25lOworCQlwaHlzID0gZG1hX21hcF9zaW5nbGUoJm5kZXYtPmRldiwgYnVmLAorCQkJCSAgICAgIFJYX0JVRl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJm5kZXYtPmRldiwgcGh5cykpCisJCQlnb3RvIGRvbmU7CisJCXByaXYtPnJ4X2J1Zltwcml2LT5yeF9oZWFkXSA9IGJ1ZjsKKwkJcHJpdi0+cnhfcGh5c1twcml2LT5yeF9oZWFkXSA9IHBoeXM7CisJCWhpcDA0X3NldF9yZWN2X2Rlc2MocHJpdiwgcGh5cyk7CisKKwkJcHJpdi0+cnhfaGVhZCA9IFJYX05FWFQocHJpdi0+cnhfaGVhZCk7CisJCWlmIChyeCA+PSBidWRnZXQpCisJCQlnb3RvIGRvbmU7CisKKwkJaWYgKC0tY250ID09IDApCisJCQljbnQgPSBoaXAwNF9yZWN2X2NudChwcml2KTsKKwl9CisKKwlpZiAoIShwcml2LT5yZWdfaW50ZW4gJiBSQ1ZfSU5UKSkgeworCQkvKiBlbmFibGUgcnggaW50ZXJydXB0ICovCisJCXByaXYtPnJlZ19pbnRlbiB8PSBSQ1ZfSU5UOworCQl3cml0ZWxfcmVsYXhlZChwcml2LT5yZWdfaW50ZW4sIHByaXYtPmJhc2UgKyBQUEVfSU5URU4pOworCX0KKwluYXBpX2NvbXBsZXRlKG5hcGkpOworZG9uZToKKwkvKiBjbGVhbiB1cCB0eCBkZXNjcmlwdG9ycyBhbmQgc3RhcnQgYSBuZXcgdGltZXIgaWYgbmVjZXNzYXJ5ICovCisJdHhfcmVtYWluaW5nID0gaGlwMDRfdHhfcmVjbGFpbShuZGV2LCBmYWxzZSk7CisJaWYgKHJ4IDwgYnVkZ2V0ICYmIHR4X3JlbWFpbmluZykKKwkJaHJ0aW1lcl9zdGFydF9leHBpcmVzKCZwcml2LT50eF9jb2FsZXNjZV90aW1lciwgSFJUSU1FUl9NT0RFX1JFTCk7CisKKwlyZXR1cm4gcng7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBoaXAwNF9tYWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKKwlzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZuZGV2LT5zdGF0czsKKwl1MzIgaXN0cyA9IHJlYWRsX3JlbGF4ZWQocHJpdi0+YmFzZSArIFBQRV9JTlRTVFMpOworCisJaWYgKCFpc3RzKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwl3cml0ZWxfcmVsYXhlZChERUZfSU5UX01BU0ssIHByaXYtPmJhc2UgKyBQUEVfUklOVCk7CisKKwlpZiAodW5saWtlbHkoaXN0cyAmIERFRl9JTlRfRVJSKSkgeworCQlpZiAoaXN0cyAmIChSQ1ZfTk9CVUYgfCBSQ1ZfRFJPUCkpIHsKKwkJCXN0YXRzLT5yeF9lcnJvcnMrKzsKKwkJCXN0YXRzLT5yeF9kcm9wcGVkKys7CisJCQluZXRkZXZfZXJyKG5kZXYsICJyeCBkcm9wXG4iKTsKKwkJfQorCQlpZiAoaXN0cyAmIFRYX0RST1ApIHsKKwkJCXN0YXRzLT50eF9kcm9wcGVkKys7CisJCQluZXRkZXZfZXJyKG5kZXYsICJ0eCBkcm9wXG4iKTsKKwkJfQorCX0KKworCWlmIChpc3RzICYgUkNWX0lOVCAmJiBuYXBpX3NjaGVkdWxlX3ByZXAoJnByaXYtPm5hcGkpKSB7CisJCS8qIGRpc2FibGUgcnggaW50ZXJydXB0ICovCisJCXByaXYtPnJlZ19pbnRlbiAmPSB+KFJDVl9JTlQpOworCQl3cml0ZWxfcmVsYXhlZChERUZfSU5UX01BU0sgJiB+UkNWX0lOVCwgcHJpdi0+YmFzZSArIFBQRV9JTlRFTik7CisJCWhydGltZXJfY2FuY2VsKCZwcml2LT50eF9jb2FsZXNjZV90aW1lcik7CisJCV9fbmFwaV9zY2hlZHVsZSgmcHJpdi0+bmFwaSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitlbnVtIGhydGltZXJfcmVzdGFydCB0eF9kb25lKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKQoreworCXN0cnVjdCBoaXAwNF9wcml2ICpwcml2OworCisJcHJpdiA9IGNvbnRhaW5lcl9vZihocnRpbWVyLCBzdHJ1Y3QgaGlwMDRfcHJpdiwgdHhfY29hbGVzY2VfdGltZXIpOworCisJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmcHJpdi0+bmFwaSkpIHsKKwkJLyogZGlzYWJsZSByeCBpbnRlcnJ1cHQgKi8KKwkJcHJpdi0+cmVnX2ludGVuICY9IH4oUkNWX0lOVCk7CisJCXdyaXRlbF9yZWxheGVkKERFRl9JTlRfTUFTSyAmIH5SQ1ZfSU5ULCBwcml2LT5iYXNlICsgUFBFX0lOVEVOKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZwcml2LT5uYXBpKTsKKwl9CisKKwlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7Cit9CisKK3N0YXRpYyB2b2lkIGhpcDA0X2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBoaXAwNF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSA9IHByaXYtPnBoeTsKKworCWlmICgocHJpdi0+c3BlZWQgIT0gcGh5LT5zcGVlZCkgfHwgKHByaXYtPmR1cGxleCAhPSBwaHktPmR1cGxleCkpIHsKKwkJaGlwMDRfY29uZmlnX3BvcnQobmRldiwgcGh5LT5zcGVlZCwgcGh5LT5kdXBsZXgpOworCQlwaHlfcHJpbnRfc3RhdHVzKHBoeSk7CisJfQorfQorCitzdGF0aWMgaW50IGhpcDA0X21hY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBoaXAwNF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJaW50IGk7CisKKwlwcml2LT5yeF9oZWFkID0gMDsKKwlwcml2LT50eF9oZWFkID0gMDsKKwlwcml2LT50eF90YWlsID0gMDsKKwloaXAwNF9yZXNldF9wcGUocHJpdik7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlhfREVTQ19OVU07IGkrKykgeworCQlkbWFfYWRkcl90IHBoeXM7CisKKwkJcGh5cyA9IGRtYV9tYXBfc2luZ2xlKCZuZGV2LT5kZXYsIHByaXYtPnJ4X2J1ZltpXSwKKwkJCQkgICAgICBSWF9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZuZGV2LT5kZXYsIHBoeXMpKQorCQkJcmV0dXJuIC1FSU87CisKKwkJcHJpdi0+cnhfcGh5c1tpXSA9IHBoeXM7CisJCWhpcDA0X3NldF9yZWN2X2Rlc2MocHJpdiwgcGh5cyk7CisJfQorCisJaWYgKHByaXYtPnBoeSkKKwkJcGh5X3N0YXJ0KHByaXYtPnBoeSk7CisKKwluZXRkZXZfcmVzZXRfcXVldWUobmRldik7CisJbmV0aWZfc3RhcnRfcXVldWUobmRldik7CisJaGlwMDRfbWFjX2VuYWJsZShuZGV2KTsKKwluYXBpX2VuYWJsZSgmcHJpdi0+bmFwaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaXAwNF9tYWNfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCWludCBpOworCisJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKKwluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOworCWhpcDA0X21hY19kaXNhYmxlKG5kZXYpOworCWhpcDA0X3R4X3JlY2xhaW0obmRldiwgdHJ1ZSk7CisJaGlwMDRfcmVzZXRfcHBlKHByaXYpOworCisJaWYgKHByaXYtPnBoeSkKKwkJcGh5X3N0b3AocHJpdi0+cGh5KTsKKworCWZvciAoaSA9IDA7IGkgPCBSWF9ERVNDX05VTTsgaSsrKSB7CisJCWlmIChwcml2LT5yeF9waHlzW2ldKSB7CisJCQlkbWFfdW5tYXBfc2luZ2xlKCZuZGV2LT5kZXYsIHByaXYtPnJ4X3BoeXNbaV0sCisJCQkJCSBSWF9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJCXByaXYtPnJ4X3BoeXNbaV0gPSAwOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhpcDA0X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IGhpcDA0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCXNjaGVkdWxlX3dvcmsoJnByaXYtPnR4X3RpbWVvdXRfdGFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGhpcDA0X3R4X3RpbWVvdXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGhpcDA0X3ByaXYgKnByaXY7CisKKwlwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoaXAwNF9wcml2LCB0eF90aW1lb3V0X3Rhc2spOworCWhpcDA0X21hY19zdG9wKHByaXYtPm5kZXYpOworCWhpcDA0X21hY19vcGVuKHByaXYtPm5kZXYpOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmhpcDA0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlyZXR1cm4gJm5kZXYtPnN0YXRzOworfQorCitzdGF0aWMgaW50IGhpcDA0X2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQoreworCXN0cnVjdCBoaXAwNF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWVjLT50eF9jb2FsZXNjZV91c2VjcyA9IHByaXYtPnR4X2NvYWxlc2NlX3VzZWNzOworCWVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IHByaXYtPnR4X2NvYWxlc2NlX2ZyYW1lczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpcDA0X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjKQoreworCXN0cnVjdCBoaXAwNF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCS8qIENoZWNrIG5vdCBzdXBwb3J0ZWQgcGFyYW1ldGVycyAgKi8KKwlpZiAoKGVjLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcykgfHwgKGVjLT5yeF9jb2FsZXNjZV91c2Vjc19pcnEpIHx8CisJICAgIChlYy0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxKSB8fCAoZWMtPnR4X2NvYWxlc2NlX3VzZWNzX2lycSkgfHwKKwkgICAgKGVjLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UpIHx8IChlYy0+dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlKSB8fAorCSAgICAoZWMtPnBrdF9yYXRlX2xvdykgfHwgKGVjLT5yeF9jb2FsZXNjZV91c2Vjc19sb3cpIHx8CisJICAgIChlYy0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93KSB8fCAoZWMtPnR4X2NvYWxlc2NlX3VzZWNzX2hpZ2gpIHx8CisJICAgIChlYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93KSB8fCAoZWMtPnBrdF9yYXRlX2hpZ2gpIHx8CisJICAgIChlYy0+dHhfY29hbGVzY2VfdXNlY3NfbG93KSB8fCAoZWMtPnJ4X2NvYWxlc2NlX3VzZWNzX2hpZ2gpIHx8CisJICAgIChlYy0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCkgfHwgKGVjLT5yeF9jb2FsZXNjZV91c2VjcykgfHwKKwkgICAgKGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEpIHx8CisJICAgIChlYy0+c3RhdHNfYmxvY2tfY29hbGVzY2VfdXNlY3MpIHx8CisJICAgIChlYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaCkgfHwgKGVjLT5yYXRlX3NhbXBsZV9pbnRlcnZhbCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmICgoZWMtPnR4X2NvYWxlc2NlX3VzZWNzID4gSElQMDRfTUFYX1RYX0NPQUxFU0NFX1VTRUNTIHx8CisJICAgICBlYy0+dHhfY29hbGVzY2VfdXNlY3MgPCBISVAwNF9NSU5fVFhfQ09BTEVTQ0VfVVNFQ1MpIHx8CisJICAgIChlYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPiBISVAwNF9NQVhfVFhfQ09BTEVTQ0VfRlJBTUVTIHx8CisJICAgICBlYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPCBISVAwNF9NSU5fVFhfQ09BTEVTQ0VfRlJBTUVTKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcml2LT50eF9jb2FsZXNjZV91c2VjcyA9IGVjLT50eF9jb2FsZXNjZV91c2VjczsKKwlwcml2LT50eF9jb2FsZXNjZV9mcmFtZXMgPSBlYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGlwMDRfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmRydmluZm8pCit7CisJc3RybGNweShkcnZpbmZvLT5kcml2ZXIsIERSVl9OQU1FLCBzaXplb2YoZHJ2aW5mby0+ZHJpdmVyKSk7CisJc3RybGNweShkcnZpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTiwgc2l6ZW9mKGRydmluZm8tPnZlcnNpb24pKTsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBoaXAwNF9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X2NvYWxlc2NlCQk9IGhpcDA0X2dldF9jb2FsZXNjZSwKKwkuc2V0X2NvYWxlc2NlCQk9IGhpcDA0X3NldF9jb2FsZXNjZSwKKwkuZ2V0X2RydmluZm8JCT0gaGlwMDRfZ2V0X2RydmluZm8sCit9OworCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGhpcDA0X25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IGhpcDA0X21hY19vcGVuLAorCS5uZG9fc3RvcAkJPSBoaXAwNF9tYWNfc3RvcCwKKwkubmRvX2dldF9zdGF0cwkJPSBoaXAwNF9nZXRfc3RhdHMsCisJLm5kb19zdGFydF94bWl0CQk9IGhpcDA0X21hY19zdGFydF94bWl0LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gaGlwMDRfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fdHhfdGltZW91dCAgICAgICAgID0gaGlwMDRfdGltZW91dCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX2NoYW5nZV9tdHUJCT0gZXRoX2NoYW5nZV9tdHUsCit9OworCitzdGF0aWMgaW50IGhpcDA0X2FsbG9jX3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBkZXZpY2UgKmQpCit7CisJc3RydWN0IGhpcDA0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpbnQgaTsKKworCXByaXYtPnR4X2Rlc2MgPSBkbWFfYWxsb2NfY29oZXJlbnQoZCwKKwkJCQkJICAgVFhfREVTQ19OVU0gKiBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpLAorCQkJCQkgICAmcHJpdi0+dHhfZGVzY19kbWEsIEdGUF9LRVJORUwpOworCWlmICghcHJpdi0+dHhfZGVzYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5yeF9idWZfc2l6ZSA9IFJYX0JVRl9TSVpFICsKKwkJCSAgICBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpOworCWZvciAoaSA9IDA7IGkgPCBSWF9ERVNDX05VTTsgaSsrKSB7CisJCXByaXYtPnJ4X2J1ZltpXSA9IG5ldGRldl9hbGxvY19mcmFnKHByaXYtPnJ4X2J1Zl9zaXplKTsKKwkJaWYgKCFwcml2LT5yeF9idWZbaV0pCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaGlwMDRfZnJlZV9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgZGV2aWNlICpkKQoreworCXN0cnVjdCBoaXAwNF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlhfREVTQ19OVU07IGkrKykKKwkJaWYgKHByaXYtPnJ4X2J1ZltpXSkKKwkJCXB1dF9wYWdlKHZpcnRfdG9faGVhZF9wYWdlKHByaXYtPnJ4X2J1ZltpXSkpOworCisJZm9yIChpID0gMDsgaSA8IFRYX0RFU0NfTlVNOyBpKyspCisJCWlmIChwcml2LT50eF9za2JbaV0pCisJCQlkZXZfa2ZyZWVfc2tiX2FueShwcml2LT50eF9za2JbaV0pOworCisJZG1hX2ZyZWVfY29oZXJlbnQoZCwgVFhfREVTQ19OVU0gKiBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpLAorCQkJICBwcml2LT50eF9kZXNjLCBwcml2LT50eF9kZXNjX2RtYSk7Cit9CisKK3N0YXRpYyBpbnQgaGlwMDRfbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZCA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gZC0+b2Zfbm9kZTsKKwlzdHJ1Y3Qgb2ZfcGhhbmRsZV9hcmdzIGFyZzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKKwlzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl1bnNpZ25lZCBpbnQgaXJxOworCWt0aW1lX3QgdHh0aW1lOworCWludCByZXQ7CisKKwluZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBoaXAwNF9wcml2KSk7CisJaWYgKCFuZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlwcml2LT5uZGV2ID0gbmRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcHJpdi0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkLCByZXMpOworCWlmIChJU19FUlIocHJpdi0+YmFzZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihwcml2LT5iYXNlKTsKKwkJZ290byBpbml0X2ZhaWw7CisJfQorCisJcmV0ID0gb2ZfcGFyc2VfcGhhbmRsZV93aXRoX2ZpeGVkX2FyZ3Mobm9kZSwgInBvcnQtaGFuZGxlIiwgMiwgMCwgJmFyZyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3dhcm4oZCwgIm5vIHBvcnQtaGFuZGxlXG4iKTsKKwkJZ290byBpbml0X2ZhaWw7CisJfQorCisJcHJpdi0+cG9ydCA9IGFyZy5hcmdzWzBdOworCXByaXYtPmNoYW4gPSBhcmcuYXJnc1sxXSAqIFJYX0RFU0NfTlVNOworCisJaHJ0aW1lcl9pbml0KCZwcml2LT50eF9jb2FsZXNjZV90aW1lciwgQ0xPQ0tfTU9OT1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKKworCS8qIEJRTCB3aWxsIHRyeSB0byBrZWVwIHRoZSBUWCBxdWV1ZSBhcyBzaG9ydCBhcyBwb3NzaWJsZSwgYnV0IGl0IGNhbid0CisJICogYmUgZmFzdGVyIHRoYW4gdHhfY29hbGVzY2VfdXNlY3MsIHNvIHdlIG5lZWQgYSBmYXN0IHRpbWVvdXQgaGVyZSwKKwkgKiBidXQgYWxzbyBsb25nIGVub3VnaCB0byBnYXRoZXIgdXAgZW5vdWdoIGZyYW1lcyB0byBlbnN1cmUgd2UgZG9uJ3QKKwkgKiBnZXQgbW9yZSBpbnRlcnJ1cHRzIHRoYW4gbmVjZXNzYXJ5LgorCSAqIDIwMHVzIGlzIGVub3VnaCBmb3IgMTYgZnJhbWVzIG9mIDE1MDAgYnl0ZXMgYXQgZ2lnYWJpdCBldGhlcm5ldCByYXRlCisJICovCisJcHJpdi0+dHhfY29hbGVzY2VfZnJhbWVzID0gVFhfREVTQ19OVU0gKiAzIC8gNDsKKwlwcml2LT50eF9jb2FsZXNjZV91c2VjcyA9IDIwMDsKKwkvKiBhbGxvdyB0aW1lciB0byBmaXJlIGFmdGVyIGhhbGYgdGhlIHRpbWUgYXQgdGhlIGVhcmxpZXN0ICovCisJdHh0aW1lID0ga3RpbWVfc2V0KDAsIHByaXYtPnR4X2NvYWxlc2NlX3VzZWNzICogTlNFQ19QRVJfVVNFQyAvIDIpOworCWhydGltZXJfc2V0X2V4cGlyZXNfcmFuZ2UoJnByaXYtPnR4X2NvYWxlc2NlX3RpbWVyLCB0eHRpbWUsIHR4dGltZSk7CisJcHJpdi0+dHhfY29hbGVzY2VfdGltZXIuZnVuY3Rpb24gPSB0eF9kb25lOworCisJcHJpdi0+bWFwID0gc3lzY29uX25vZGVfdG9fcmVnbWFwKGFyZy5ucCk7CisJaWYgKElTX0VSUihwcml2LT5tYXApKSB7CisJCWRldl93YXJuKGQsICJubyBzeXNjb24gaGlzaWxpY29uLGhpcDA0LXBwZVxuIik7CisJCXJldCA9IFBUUl9FUlIocHJpdi0+bWFwKTsKKwkJZ290byBpbml0X2ZhaWw7CisJfQorCisJcHJpdi0+cGh5X21vZGUgPSBvZl9nZXRfcGh5X21vZGUobm9kZSk7CisJaWYgKHByaXYtPnBoeV9tb2RlIDwgMCkgeworCQlkZXZfd2FybihkLCAibm90IGZpbmQgcGh5LW1vZGVcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGluaXRfZmFpbDsKKwl9CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPD0gMCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGluaXRfZmFpbDsKKwl9CisKKwlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGQsIGlycSwgaGlwMDRfbWFjX2ludGVycnVwdCwKKwkJCSAgICAgICAwLCBwZGV2LT5uYW1lLCBuZGV2KTsKKwlpZiAocmV0KSB7CisJCW5ldGRldl9lcnIobmRldiwgImRldm1fcmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKKwkJZ290byBpbml0X2ZhaWw7CisJfQorCisJcHJpdi0+cGh5X25vZGUgPSBvZl9wYXJzZV9waGFuZGxlKG5vZGUsICJwaHktaGFuZGxlIiwgMCk7CisJaWYgKHByaXYtPnBoeV9ub2RlKSB7CisJCXByaXYtPnBoeSA9IG9mX3BoeV9jb25uZWN0KG5kZXYsIHByaXYtPnBoeV9ub2RlLAorCQkJCQkgICAmaGlwMDRfYWRqdXN0X2xpbmssCisJCQkJCSAgIDAsIHByaXYtPnBoeV9tb2RlKTsKKwkJaWYgKCFwcml2LT5waHkpIHsKKwkJCXJldCA9IC1FUFJPQkVfREVGRVI7CisJCQlnb3RvIGluaXRfZmFpbDsKKwkJfQorCX0KKworCUlOSVRfV09SSygmcHJpdi0+dHhfdGltZW91dF90YXNrLCBoaXAwNF90eF90aW1lb3V0X3Rhc2spOworCisJZXRoZXJfc2V0dXAobmRldik7CisJbmRldi0+bmV0ZGV2X29wcyA9ICZoaXAwNF9uZXRkZXZfb3BzOworCW5kZXYtPmV0aHRvb2xfb3BzID0gJmhpcDA0X2V0aHRvb2xfb3BzOworCW5kZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKKwluZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9VTklDQVNUX0ZMVDsKKwluZGV2LT5pcnEgPSBpcnE7CisJbmV0aWZfbmFwaV9hZGQobmRldiwgJnByaXYtPm5hcGksIGhpcDA0X3J4X3BvbGwsIE5BUElfUE9MTF9XRUlHSFQpOworCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2LT5kZXYpOworCisJaGlwMDRfcmVzZXRfcHBlKHByaXYpOworCWlmIChwcml2LT5waHlfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTUlJKQorCQloaXAwNF9jb25maWdfcG9ydChuZGV2LCBTUEVFRF8xMDAsIERVUExFWF9GVUxMKTsKKworCWhpcDA0X2NvbmZpZ19maWZvKHByaXYpOworCXJhbmRvbV9ldGhlcl9hZGRyKG5kZXYtPmRldl9hZGRyKTsKKwloaXAwNF91cGRhdGVfbWFjX2FkZHJlc3MobmRldik7CisKKwlyZXQgPSBoaXAwNF9hbGxvY19yaW5nKG5kZXYsIGQpOworCWlmIChyZXQpIHsKKwkJbmV0ZGV2X2VycihuZGV2LCAiYWxsb2MgcmluZyBmYWlsXG4iKTsKKwkJZ290byBhbGxvY19mYWlsOworCX0KKworCXJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKKwlpZiAocmV0KSB7CisJCWZyZWVfbmV0ZGV2KG5kZXYpOworCQlnb3RvIGFsbG9jX2ZhaWw7CisJfQorCisJcmV0dXJuIDA7CisKK2FsbG9jX2ZhaWw6CisJaGlwMDRfZnJlZV9yaW5nKG5kZXYsIGQpOworaW5pdF9mYWlsOgorCW9mX25vZGVfcHV0KHByaXYtPnBoeV9ub2RlKTsKKwlmcmVlX25ldGRldihuZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGhpcDA0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGhpcDA0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlICpkID0gJnBkZXYtPmRldjsKKworCWlmIChwcml2LT5waHkpCisJCXBoeV9kaXNjb25uZWN0KHByaXYtPnBoeSk7CisKKwloaXAwNF9mcmVlX3JpbmcobmRldiwgZCk7CisJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CisJZnJlZV9pcnEobmRldi0+aXJxLCBuZGV2KTsKKwlvZl9ub2RlX3B1dChwcml2LT5waHlfbm9kZSk7CisJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+dHhfdGltZW91dF90YXNrKTsKKwlmcmVlX25ldGRldihuZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBoaXAwNF9tYWNfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImhpc2lsaWNvbixoaXAwNC1tYWMiIH0sCisJeyB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBoaXAwNF9tYWNfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBoaXAwNF9tYWNfZHJpdmVyID0geworCS5wcm9iZQk9IGhpcDA0X21hY19wcm9iZSwKKwkucmVtb3ZlCT0gaGlwMDRfcmVtb3ZlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCQk9IERSVl9OQU1FLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZQk9IGhpcDA0X21hY19tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoaGlwMDRfbWFjX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiSElTSUxJQ09OIFAwNCBFdGhlcm5ldCBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9tZGlvLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfbWRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYmFjMjVkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X21kaW8uYwpAQCAtMCwwICsxLDE4NiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE0IExpbmFybyBMdGQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgSGlzaWxpY29uIExpbWl0ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9tZGlvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2RlZmluZSBNRElPX0NNRF9SRUcJCTB4MAorI2RlZmluZSBNRElPX0FERFJfUkVHCQkweDQKKyNkZWZpbmUgTURJT19XREFUQV9SRUcJCTB4OAorI2RlZmluZSBNRElPX1JEQVRBX1JFRwkJMHhjCisjZGVmaW5lIE1ESU9fU1RBX1JFRwkJMHgxMAorCisjZGVmaW5lIE1ESU9fU1RBUlQJCUJJVCgxNCkKKyNkZWZpbmUgTURJT19SX1ZBTElECQlCSVQoMSkKKyNkZWZpbmUgTURJT19SRUFECSAgICAgICAgKEJJVCgxMikgfCBCSVQoMTEpIHwgTURJT19TVEFSVCkKKyNkZWZpbmUgTURJT19XUklURQkgICAgICAgIChCSVQoMTIpIHwgQklUKDEwKSB8IE1ESU9fU1RBUlQpCisKK3N0cnVjdCBoaXAwNF9tZGlvX3ByaXYgeworCXZvaWQgX19pb21lbSAqYmFzZTsKK307CisKKyNkZWZpbmUgV0FJVF9USU1FT1VUIDEwCitzdGF0aWMgaW50IGhpcDA0X21kaW9fd2FpdF9yZWFkeShzdHJ1Y3QgbWlpX2J1cyAqYnVzKQoreworCXN0cnVjdCBoaXAwNF9tZGlvX3ByaXYgKnByaXYgPSBidXMtPnByaXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyByZWFkbF9yZWxheGVkKHByaXYtPmJhc2UgKyBNRElPX0NNRF9SRUcpICYgTURJT19TVEFSVDsgaSsrKSB7CisJCWlmIChpID09IFdBSVRfVElNRU9VVCkKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQltc2xlZXAoMjApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpcDA0X21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKQoreworCXN0cnVjdCBoaXAwNF9tZGlvX3ByaXYgKnByaXYgPSBidXMtPnByaXY7CisJdTMyIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gaGlwMDRfbWRpb193YWl0X3JlYWR5KGJ1cyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJdmFsID0gcmVnbnVtIHwgKG1paV9pZCA8PCA1KSB8IE1ESU9fUkVBRDsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHByaXYtPmJhc2UgKyBNRElPX0NNRF9SRUcpOworCisJcmV0ID0gaGlwMDRfbWRpb193YWl0X3JlYWR5KGJ1cyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJdmFsID0gcmVhZGxfcmVsYXhlZChwcml2LT5iYXNlICsgTURJT19TVEFfUkVHKTsKKwlpZiAodmFsICYgTURJT19SX1ZBTElEKSB7CisJCWRldl9lcnIoYnVzLT5wYXJlbnQsICJTTUkgYnVzIHJlYWQgbm90IHZhbGlkXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJdmFsID0gcmVhZGxfcmVsYXhlZChwcml2LT5iYXNlICsgTURJT19SREFUQV9SRUcpOworCXJldCA9IHZhbCAmIDB4RkZGRjsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGhpcDA0X21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IG1paV9pZCwKKwkJCSAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpCit7CisJc3RydWN0IGhpcDA0X21kaW9fcHJpdiAqcHJpdiA9IGJ1cy0+cHJpdjsKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSBoaXAwNF9tZGlvX3dhaXRfcmVhZHkoYnVzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwl3cml0ZWxfcmVsYXhlZCh2YWx1ZSwgcHJpdi0+YmFzZSArIE1ESU9fV0RBVEFfUkVHKTsKKwl2YWwgPSByZWdudW0gfCAobWlpX2lkIDw8IDUpIHwgTURJT19XUklURTsKKwl3cml0ZWxfcmVsYXhlZCh2YWwsIHByaXYtPmJhc2UgKyBNRElPX0NNRF9SRUcpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaGlwMDRfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQoreworCWludCB0ZW1wLCBpOworCisJZm9yIChpID0gMDsgaSA8IFBIWV9NQVhfQUREUjsgaSsrKSB7CisJCWhpcDA0X21kaW9fd3JpdGUoYnVzLCBpLCAyMiwgMCk7CisJCXRlbXAgPSBoaXAwNF9tZGlvX3JlYWQoYnVzLCBpLCBNSUlfQk1DUik7CisJCWlmICh0ZW1wIDwgMCkKKwkJCWNvbnRpbnVlOworCisJCXRlbXAgfD0gQk1DUl9SRVNFVDsKKwkJaWYgKGhpcDA0X21kaW9fd3JpdGUoYnVzLCBpLCBNSUlfQk1DUiwgdGVtcCkgPCAwKQorCQkJY29udGludWU7CisJfQorCisJbWRlbGF5KDUwMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaGlwMDRfbWRpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcjsKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzOworCXN0cnVjdCBoaXAwNF9tZGlvX3ByaXYgKnByaXY7CisJaW50IHJldDsKKworCWJ1cyA9IG1kaW9idXNfYWxsb2Nfc2l6ZShzaXplb2Yoc3RydWN0IGhpcDA0X21kaW9fcHJpdikpOworCWlmICghYnVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSBNRElPIGJ1c1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWJ1cy0+bmFtZSA9ICJoaXAwNF9tZGlvX2J1cyI7CisJYnVzLT5yZWFkID0gaGlwMDRfbWRpb19yZWFkOworCWJ1cy0+d3JpdGUgPSBoaXAwNF9tZGlvX3dyaXRlOworCWJ1cy0+cmVzZXQgPSBoaXAwNF9tZGlvX3Jlc2V0OworCXNucHJpbnRmKGJ1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiVzLW1paSIsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlidXMtPnBhcmVudCA9ICZwZGV2LT5kZXY7CisJcHJpdiA9IGJ1cy0+cHJpdjsKKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXByaXYtPmJhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcik7CisJaWYgKElTX0VSUihwcml2LT5iYXNlKSkgeworCQlyZXQgPSBQVFJfRVJSKHByaXYtPmJhc2UpOworCQlnb3RvIG91dF9tZGlvOworCX0KKworCXJldCA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBwZGV2LT5kZXYub2Zfbm9kZSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIE1ESU8gYnVzICglZClcbiIsIHJldCk7CisJCWdvdG8gb3V0X21kaW87CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYnVzKTsKKworCXJldHVybiAwOworCitvdXRfbWRpbzoKKwltZGlvYnVzX2ZyZWUoYnVzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGhpcDA0X21kaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7CisJbWRpb2J1c19mcmVlKGJ1cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgaGlwMDRfbWRpb19tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiaGlzaWxpY29uLGhpcDA0LW1kaW8iIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgaGlwMDRfbWRpb19tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhpcDA0X21kaW9fZHJpdmVyID0geworCS5wcm9iZSA9IGhpcDA0X21kaW9fcHJvYmUsCisJLnJlbW92ZSA9IGhpcDA0X21kaW9fcmVtb3ZlLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImhpcDA0LW1kaW8iLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gaGlwMDRfbWRpb19tYXRjaCwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihoaXAwNF9tZGlvX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiSElTSUxJQ09OIFAwNCBNRElPIGludGVyZmFjZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06aGlwMDQtbWRpbyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VoZWEvZWhlYV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZWhlYS9laGVhX21haW4uYwppbmRleCA1NjZiMTdkLi5lOGExYWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZWhlYS9laGVhX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZWhlYS9laGVhX21haW4uYwpAQCAtMjA2NCw5ICsyMDY0LDkgQEAKIAltZW1zZXQoc3dxZSwgMCwgU1dRRV9IRUFERVJfU0laRSk7CiAJYXRvbWljX2RlYygmcHItPnN3cWVfYXZhaWwpOwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCXN3cWUtPnR4X2NvbnRyb2wgfD0gRUhFQV9TV1FFX1ZMQU5fSU5TRVJUOwotCQlzd3FlLT52bGFuX3RhZyA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQlzd3FlLT52bGFuX3RhZyA9IHNrYl92bGFuX3RhZ19nZXQoc2tiKTsKIAl9CiAKIAlwci0+dHhfcGFja2V0cysrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jCmluZGV4IDkzODhhODMuLjE2Mjc2MmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pYm0vZW1hYy9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaWJtL2VtYWMvY29yZS5jCkBAIC0yMzY3LDcgKzIzNjcsNyBAQAogCWVyciA9IGVtYWNfY2hlY2tfZGVwcyhkZXYsIGRlcHMpID8gMCA6IC1FTk9ERVY7CiAJZm9yIChpID0gMDsgaSA8IEVNQUNfREVQX0NPVU5UOyBpKyspIHsKIAkJb2Zfbm9kZV9wdXQoZGVwc1tpXS5ub2RlKTsKLQkJaWYgKGVyciAmJiBkZXBzW2ldLm9mZGV2KQorCQlpZiAoZXJyKQogCQkJb2ZfZGV2X3B1dChkZXBzW2ldLm9mZGV2KTsKIAl9CiAJaWYgKGVyciA9PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvS2NvbmZpZwppbmRleCA0ZDYxZWY1Li5mNGZmNDY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL0tjb25maWcKQEAgLTE5Miw2ICsxOTIsMTcgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGl4Z2JlLgogCitjb25maWcgSVhHQkVfVlhMQU4KKwlib29sICJWaXJ0dWFsIGVYdGVuc2libGUgTG9jYWwgQXJlYSBOZXR3b3JrIFN1cHBvcnQiCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBJWEdCRSAmJiBWWExBTiAmJiAhKElYR0JFPXkgJiYgVlhMQU49bSkKKwktLS1oZWxwLS0tCisJICBUaGlzIGFsbG93cyBvbmUgdG8gY3JlYXRlIFZYTEFOIHZpcnR1YWwgaW50ZXJmYWNlcyB0aGF0IHByb3ZpZGUKKwkgIExheWVyIDIgTmV0d29ya3Mgb3ZlciBMYXllciAzIE5ldHdvcmtzLiBWWExBTiBpcyBvZnRlbiB1c2VkCisJICB0byB0dW5uZWwgdmlydHVhbCBuZXR3b3JrIGluZnJhc3RydWN0dXJlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIFZpcnR1YWwgZVh0ZW5zaWJsZSBMb2NhbCBBcmVhIE5ldHdvcmsKKwkgIChWWExBTikgaW4gdGhlIGRyaXZlci4KKwogY29uZmlnIElYR0JFX0hXTU9OCiAJYm9vbCAiSW50ZWwoUikgMTBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgSFdNT04gc3VwcG9ydCIKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX2V0aHRvb2wuYwppbmRleCBiNjkxZWI0Li40MjcwYWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDAvZTEwMDBfZXRodG9vbC5jCkBAIC0yNCw2ICsyNCw3IEBACiAvKiBldGh0b29sIHN1cHBvcnQgZm9yIGUxMDAwICovCiAKICNpbmNsdWRlICJlMTAwMC5oIgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKIGVudW0ge05FVERFVl9TVEFUUywgRTEwMDBfU1RBVFN9OwpAQCAtMTQ2MCw3ICsxNDYxLDcgQEAKIAkJCXJldF92YWwgPSAxMzsgLyogcmV0X3ZhbCBpcyB0aGUgc2FtZSBhcyBtaXMtY29tcGFyZSAqLwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKGppZmZpZXMgPj0gKHRpbWUgKyAyKSkgeworCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCB0aW1lICsgMikpIHsKIAkJCXJldF92YWwgPSAxNDsgLyogZXJyb3IgY29kZSBmb3IgdGltZSBvdXQgZXJyb3IgKi8KIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggODMxNDBjYi4uN2Y5OTdkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwL2UxMDAwX21haW4uYwpAQCAtMjk3Nyw3ICsyOTc3LDYgQEAKIAkJCSAgIHN0cnVjdCBlMTAwMF90eF9yaW5nICp0eF9yaW5nLCBpbnQgdHhfZmxhZ3MsCiAJCQkgICBpbnQgY291bnQpCiB7Ci0Jc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgZTEwMDBfdHhfZGVzYyAqdHhfZGVzYyA9IE5VTEw7CiAJc3RydWN0IGUxMDAwX3R4X2J1ZmZlciAqYnVmZmVyX2luZm87CiAJdTMyIHR4ZF91cHBlciA9IDAsIHR4ZF9sb3dlciA9IEUxMDAwX1RYRF9DTURfSUZDUzsKQEAgLTMwMzEsMTEgKzMwMzAsNiBAQAogCXdtYigpOwogCiAJdHhfcmluZy0+bmV4dF90b191c2UgPSBpOwotCXdyaXRlbChpLCBody0+aHdfYWRkciArIHR4X3JpbmctPnRkdCk7Ci0JLyogd2UgbmVlZCB0aGlzIGlmIG1vcmUgdGhhbiBvbmUgcHJvY2Vzc29yIGNhbiB3cml0ZSB0byBvdXIgdGFpbAotCSAqIGF0IGEgdGltZSwgaXQgc3luY2hyb25pemVzIElPIG9uIElBNjQvQWx0aXggc3lzdGVtcwotCSAqLwotCW1taW93YigpOwogfQogCiAvKiA4MjU0NyB3b3JrYXJvdW5kIHRvIGF2b2lkIGNvbnRyb2xsZXIgaGFuZyBpbiBoYWxmLWR1cGxleCBlbnZpcm9ubWVudC4KQEAgLTMyMjYsOSArMzIyMCwxMCBAQAogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCXR4X2ZsYWdzIHw9IEUxMDAwX1RYX0ZMQUdTX1ZMQU47Ci0JCXR4X2ZsYWdzIHw9ICh2bGFuX3R4X3RhZ19nZXQoc2tiKSA8PCBFMTAwMF9UWF9GTEFHU19WTEFOX1NISUZUKTsKKwkJdHhfZmxhZ3MgfD0gKHNrYl92bGFuX3RhZ19nZXQoc2tiKSA8PAorCQkJICAgICBFMTAwMF9UWF9GTEFHU19WTEFOX1NISUZUKTsKIAl9CiAKIAlmaXJzdCA9IHR4X3JpbmctPm5leHRfdG9fdXNlOwpAQCAtMzI2Myw2ICszMjU4LDE1IEBACiAJCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgcmluZyBmb3IgdGhlIG5leHQgc2VuZC4gKi8KIAkJZTEwMDBfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIE1BWF9TS0JfRlJBR1MgKyAyKTsKIAorCQlpZiAoIXNrYi0+eG1pdF9tb3JlIHx8CisJCSAgICBuZXRpZl94bWl0X3N0b3BwZWQobmV0ZGV2X2dldF90eF9xdWV1ZShuZXRkZXYsIDApKSkgeworCQkJd3JpdGVsKHR4X3JpbmctPm5leHRfdG9fdXNlLCBody0+aHdfYWRkciArIHR4X3JpbmctPnRkdCk7CisJCQkvKiB3ZSBuZWVkIHRoaXMgaWYgbW9yZSB0aGFuIG9uZSBwcm9jZXNzb3IgY2FuIHdyaXRlIHRvCisJCQkgKiBvdXIgdGFpbCBhdCBhIHRpbWUsIGl0IHN5bmNocm9uaXplcyBJTyBvbiBJQTY0L0FsdGl4CisJCQkgKiBzeXN0ZW1zCisJCQkgKi8KKwkJCW1taW93YigpOworCQl9CiAJfSBlbHNlIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLnRpbWVfc3RhbXAgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL2UxMDAwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvZTEwMDAuaAppbmRleCA3Nzg1MjQwLi45NDE2ZTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvZTEwMDAuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvZTEwMDAuaApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS1hc3BtLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lY291bnRlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldF90c3RhbXAuaD4KICNpbmNsdWRlIDxsaW51eC9wdHBfY2xvY2tfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcHRwX2NsYXNzaWZ5Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvbmV0ZGV2LmMKaW5kZXggZTE0ZmQ4NS4uMWU4YzQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9uZXRkZXYuYwpAQCAtNDE4OSw3ICs0MTg5LDcgQEAKIAkvKiBTZXR1cCBoYXJkd2FyZSB0aW1lIHN0YW1waW5nIGN5Y2xlY291bnRlciAqLwogCWlmIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0hXX1RJTUVTVEFNUCkgewogCQlhZGFwdGVyLT5jYy5yZWFkID0gZTEwMDBlX2N5Y2xlY291bnRlcl9yZWFkOwotCQlhZGFwdGVyLT5jYy5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCk7CisJCWFkYXB0ZXItPmNjLm1hc2sgPSBDWUNMRUNPVU5URVJfTUFTSyg2NCk7CiAJCWFkYXB0ZXItPmNjLm11bHQgPSAxOwogCQkvKiBjYy5zaGlmdCBzZXQgaW4gZTEwMDBlX2dldF9iYXNlX3RpbmluY2EoKSAqLwogCkBAIC01NDQ0LDE2ICs1NDQ0LDYgQEAKIAl3bWIoKTsKIAogCXR4X3JpbmctPm5leHRfdG9fdXNlID0gaTsKLQotCWlmIChhZGFwdGVyLT5mbGFnczIgJiBGTEFHMl9QQ0lNMlBDSV9BUkJJVEVSX1dBKQotCQllMTAwMGVfdXBkYXRlX3RkdF93YSh0eF9yaW5nLCBpKTsKLQllbHNlCi0JCXdyaXRlbChpLCB0eF9yaW5nLT50YWlsKTsKLQotCS8qIHdlIG5lZWQgdGhpcyBpZiBtb3JlIHRoYW4gb25lIHByb2Nlc3NvciBjYW4gd3JpdGUgdG8gb3VyIHRhaWwKLQkgKiBhdCBhIHRpbWUsIGl0IHN5bmNocm9uaXplcyBJTyBvbiBJQTY0L0FsdGl4IHN5c3RlbXMKLQkgKi8KLQltbWlvd2IoKTsKIH0KIAogI2RlZmluZSBNSU5JTVVNX0RIQ1BfUEFDS0VUX1NJWkUgMjgyCkBAIC01NDYzLDggKzU0NTMsOCBAQAogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJdTE2IGxlbmd0aCwgb2Zmc2V0OwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSAmJgotCSAgICAhKCh2bGFuX3R4X3RhZ19nZXQoc2tiKSA9PSBhZGFwdGVyLT5ody5tbmdfY29va2llLnZsYW5faWQpICYmCisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgJiYKKwkgICAgISgoc2tiX3ZsYW5fdGFnX2dldChza2IpID09IGFkYXB0ZXItPmh3Lm1uZ19jb29raWUudmxhbl9pZCkgJiYKIAkgICAgICAoYWRhcHRlci0+aHcubW5nX2Nvb2tpZS5zdGF0dXMgJgogCSAgICAgICBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU4pKSkKIAkJcmV0dXJuIDA7CkBAIC01NjAzLDkgKzU1OTMsMTAgQEAKIAlpZiAoZTEwMDBfbWF5YmVfc3RvcF90eCh0eF9yaW5nLCBjb3VudCArIDIpKQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKIAkJdHhfZmxhZ3MgfD0gRTEwMDBfVFhfRkxBR1NfVkxBTjsKLQkJdHhfZmxhZ3MgfD0gKHZsYW5fdHhfdGFnX2dldChza2IpIDw8IEUxMDAwX1RYX0ZMQUdTX1ZMQU5fU0hJRlQpOworCQl0eF9mbGFncyB8PSAoc2tiX3ZsYW5fdGFnX2dldChza2IpIDw8CisJCQkgICAgIEUxMDAwX1RYX0ZMQUdTX1ZMQU5fU0hJRlQpOwogCX0KIAogCWZpcnN0ID0gdHhfcmluZy0+bmV4dF90b191c2U7CkBAIC01NjM1LDggKzU2MjYsOSBAQAogCWNvdW50ID0gZTEwMDBfdHhfbWFwKHR4X3JpbmcsIHNrYiwgZmlyc3QsIGFkYXB0ZXItPnR4X2ZpZm9fbGltaXQsCiAJCQkgICAgIG5yX2ZyYWdzKTsKIAlpZiAoY291bnQpIHsKLQkJaWYgKHVubGlrZWx5KChza2Jfc2hpbmZvKHNrYiktPnR4X2ZsYWdzICYgU0tCVFhfSFdfVFNUQU1QKSAmJgotCQkJICAgICAhYWRhcHRlci0+dHhfaHd0c3RhbXBfc2tiKSkgeworCQlpZiAodW5saWtlbHkoc2tiX3NoaW5mbyhza2IpLT50eF9mbGFncyAmIFNLQlRYX0hXX1RTVEFNUCkgJiYKKwkJICAgIChhZGFwdGVyLT5mbGFncyAmIEZMQUdfSEFTX0hXX1RJTUVTVEFNUCkgJiYKKwkJICAgICFhZGFwdGVyLT50eF9od3RzdGFtcF9za2IpIHsKIAkJCXNrYl9zaGluZm8oc2tiKS0+dHhfZmxhZ3MgfD0gU0tCVFhfSU5fUFJPR1JFU1M7CiAJCQl0eF9mbGFncyB8PSBFMTAwMF9UWF9GTEFHU19IV1RTVEFNUDsKIAkJCWFkYXB0ZXItPnR4X2h3dHN0YW1wX3NrYiA9IHNrYl9nZXQoc2tiKTsKQEAgLTU2NTMsNiArNTY0NSwyMSBAQAogCQkJCSAgICAoTUFYX1NLQl9GUkFHUyAqCiAJCQkJICAgICBESVZfUk9VTkRfVVAoUEFHRV9TSVpFLAogCQkJCQkJICBhZGFwdGVyLT50eF9maWZvX2xpbWl0KSArIDIpKTsKKworCQlpZiAoIXNrYi0+eG1pdF9tb3JlIHx8CisJCSAgICBuZXRpZl94bWl0X3N0b3BwZWQobmV0ZGV2X2dldF90eF9xdWV1ZShuZXRkZXYsIDApKSkgeworCQkJaWYgKGFkYXB0ZXItPmZsYWdzMiAmIEZMQUcyX1BDSU0yUENJX0FSQklURVJfV0EpCisJCQkJZTEwMDBlX3VwZGF0ZV90ZHRfd2EodHhfcmluZywKKwkJCQkJCSAgICAgdHhfcmluZy0+bmV4dF90b191c2UpOworCQkJZWxzZQorCQkJCXdyaXRlbCh0eF9yaW5nLT5uZXh0X3RvX3VzZSwgdHhfcmluZy0+dGFpbCk7CisKKwkJCS8qIHdlIG5lZWQgdGhpcyBpZiBtb3JlIHRoYW4gb25lIHByb2Nlc3NvciBjYW4gd3JpdGUKKwkJCSAqIHRvIG91ciB0YWlsIGF0IGEgdGltZSwgaXQgc3luY2hyb25pemVzIElPIG9uCisJCQkgKklBNjQvQWx0aXggc3lzdGVtcworCQkJICovCisJCQltbWlvd2IoKTsKKwkJfQogCX0gZWxzZSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ZpcnN0XS50aW1lX3N0YW1wID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2UxMDAwZS9wdHAuYwppbmRleCBmYjFhOTE0Li45NzhlZjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9lMTAwMGUvcHRwLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZTEwMDBlL3B0cC5jCkBAIC05MCwxMiArOTAsOSBAQAogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IGUxMDAwX2FkYXB0ZXIsCiAJCQkJCQkgICAgIHB0cF9jbG9ja19pbmZvKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXM2NCBub3c7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c3lzdGltX2xvY2ssIGZsYWdzKTsKLQlub3cgPSB0aW1lY291bnRlcl9yZWFkKCZhZGFwdGVyLT50Yyk7Ci0Jbm93ICs9IGRlbHRhOwotCXRpbWVjb3VudGVyX2luaXQoJmFkYXB0ZXItPnRjLCAmYWRhcHRlci0+Y2MsIG5vdyk7CisJdGltZWNvdW50ZXJfYWRqdGltZSgmYWRhcHRlci0+dGMsIGRlbHRhKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5zeXN0aW1fbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19tYWluLmMKaW5kZXggZWIwODhiMS4uODRhYjllZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX21haW4uYwpAQCAtOTcsNyArOTcsNiBAQAogCSAqLwogCWlmIChkbWFfbWFwcGluZ19lcnJvcihyeF9yaW5nLT5kZXYsIGRtYSkpIHsKIAkJX19mcmVlX3BhZ2UocGFnZSk7Ci0JCWJpLT5wYWdlID0gTlVMTDsKIAogCQlyeF9yaW5nLT5yeF9zdGF0cy5hbGxvY19mYWlsZWQrKzsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTQ3LDggKzE0Niw4IEBACiAJCQlpIC09IHJ4X3JpbmctPmNvdW50OwogCQl9CiAKLQkJLyogY2xlYXIgdGhlIGhkcl9hZGRyIGZvciB0aGUgbmV4dF90b191c2UgZGVzY3JpcHRvciAqLwotCQlyeF9kZXNjLT5xLmhkcl9hZGRyID0gMDsKKwkJLyogY2xlYXIgdGhlIHN0YXR1cyBiaXRzIGZvciB0aGUgbmV4dF90b191c2UgZGVzY3JpcHRvciAqLworCQlyeF9kZXNjLT5kLnN0YXRlcnIgPSAwOwogCiAJCWNsZWFuZWRfY291bnQtLTsKIAl9IHdoaWxlIChjbGVhbmVkX2NvdW50KTsKQEAgLTE5NCw3ICsxOTMsNyBAQAogCXJ4X3JpbmctPm5leHRfdG9fYWxsb2MgPSAobnRhIDwgcnhfcmluZy0+Y291bnQpID8gbnRhIDogMDsKIAogCS8qIHRyYW5zZmVyIHBhZ2UgZnJvbSBvbGQgYnVmZmVyIHRvIG5ldyBidWZmZXIgKi8KLQltZW1jcHkobmV3X2J1ZmYsIG9sZF9idWZmLCBzaXplb2Yoc3RydWN0IGZtMTBrX3J4X2J1ZmZlcikpOworCSpuZXdfYnVmZiA9ICpvbGRfYnVmZjsKIAogCS8qIHN5bmMgdGhlIGJ1ZmZlciBmb3IgdXNlIGJ5IHRoZSBkZXZpY2UgKi8KIAlkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShyeF9yaW5nLT5kZXYsIG9sZF9idWZmLT5kbWEsCkBAIC0yMDMsMTIgKzIwMiwxNyBAQAogCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGZtMTBrX3BhZ2VfaXNfcmVzZXJ2ZWQoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuIChwYWdlX3RvX25pZChwYWdlKSAhPSBudW1hX21lbV9pZCgpKSB8fCBwYWdlLT5wZm1lbWFsbG9jOworfQorCiBzdGF0aWMgYm9vbCBmbTEwa19jYW5fcmV1c2VfcnhfcGFnZShzdHJ1Y3QgZm0xMGtfcnhfYnVmZmVyICpyeF9idWZmZXIsCiAJCQkJICAgIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgdHJ1ZXNpemUpCiB7CiAJLyogYXZvaWQgcmUtdXNpbmcgcmVtb3RlIHBhZ2VzICovCi0JaWYgKHVubGlrZWx5KHBhZ2VfdG9fbmlkKHBhZ2UpICE9IG51bWFfbWVtX2lkKCkpKQorCWlmICh1bmxpa2VseShmbTEwa19wYWdlX2lzX3Jlc2VydmVkKHBhZ2UpKSkKIAkJcmV0dXJuIGZhbHNlOwogCiAjaWYgKFBBR0VfU0laRSA8IDgxOTIpCkBAIC0yMTgsMjIgKzIyMiwxOSBAQAogCiAJLyogZmxpcCBwYWdlIG9mZnNldCB0byBvdGhlciBidWZmZXIgKi8KIAlyeF9idWZmZXItPnBhZ2Vfb2Zmc2V0IF49IEZNMTBLX1JYX0JVRlNaOwotCi0JLyogRXZlbiBpZiB3ZSBvd24gdGhlIHBhZ2UsIHdlIGFyZSBub3QgYWxsb3dlZCB0byB1c2UgYXRvbWljX3NldCgpCi0JICogVGhpcyB3b3VsZCBicmVhayBnZXRfcGFnZV91bmxlc3NfemVybygpIHVzZXJzLgotCSAqLwotCWF0b21pY19pbmMoJnBhZ2UtPl9jb3VudCk7CiAjZWxzZQogCS8qIG1vdmUgb2Zmc2V0IHVwIHRvIHRoZSBuZXh0IGNhY2hlIGxpbmUgKi8KIAlyeF9idWZmZXItPnBhZ2Vfb2Zmc2V0ICs9IHRydWVzaXplOwogCiAJaWYgKHJ4X2J1ZmZlci0+cGFnZV9vZmZzZXQgPiAoUEFHRV9TSVpFIC0gRk0xMEtfUlhfQlVGU1opKQogCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKiBidW1wIHJlZiBjb3VudCBvbiBwYWdlIGJlZm9yZSBpdCBpcyBnaXZlbiB0byB0aGUgc3RhY2sgKi8KLQlnZXRfcGFnZShwYWdlKTsKICNlbmRpZgogCisJLyogRXZlbiBpZiB3ZSBvd24gdGhlIHBhZ2UsIHdlIGFyZSBub3QgYWxsb3dlZCB0byB1c2UgYXRvbWljX3NldCgpCisJICogVGhpcyB3b3VsZCBicmVhayBnZXRfcGFnZV91bmxlc3NfemVybygpIHVzZXJzLgorCSAqLworCWF0b21pY19pbmMoJnBhZ2UtPl9jb3VudCk7CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjcwLDEyICsyNzEsMTIgQEAKIAogCQltZW1jcHkoX19za2JfcHV0KHNrYiwgc2l6ZSksIHZhLCBBTElHTihzaXplLCBzaXplb2YobG9uZykpKTsKIAotCQkvKiB3ZSBjYW4gcmV1c2UgYnVmZmVyIGFzLWlzLCBqdXN0IG1ha2Ugc3VyZSBpdCBpcyBsb2NhbCAqLwotCQlpZiAobGlrZWx5KHBhZ2VfdG9fbmlkKHBhZ2UpID09IG51bWFfbWVtX2lkKCkpKQorCQkvKiBwYWdlIGlzIG5vdCByZXNlcnZlZCwgd2UgY2FuIHJldXNlIGJ1ZmZlciBhcy1pcyAqLworCQlpZiAobGlrZWx5KCFmbTEwa19wYWdlX2lzX3Jlc2VydmVkKHBhZ2UpKSkKIAkJCXJldHVybiB0cnVlOwogCiAJCS8qIHRoaXMgcGFnZSBjYW5ub3QgYmUgcmV1c2VkIHNvIGRpc2NhcmQgaXQgKi8KLQkJcHV0X3BhZ2UocGFnZSk7CisJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC0yOTMsNyArMjk0LDYgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCXJ4X2J1ZmZlciA9ICZyeF9yaW5nLT5yeF9idWZmZXJbcnhfcmluZy0+bmV4dF90b19jbGVhbl07Ci0KIAlwYWdlID0gcnhfYnVmZmVyLT5wYWdlOwogCXByZWZldGNodyhwYWdlKTsKIApAQCAtNzI3LDYgKzcyNywxMiBAQAogCXN0cnVjdCBldGhoZHIgKmV0aF9oZHI7CiAJdTggbDRfaGRyID0gMDsKIAorLyogZm0xMGsgc3VwcG9ydHMgMTg0IG9jdGV0cyBvZiBvdXRlcitpbm5lciBoZWFkZXJzLiBNaW51cyAyMCBmb3IgaW5uZXIgTDQuICovCisjZGVmaW5lIEZNMTBLX01BWF9FTkNBUF9UUkFOU1BPUlRfT0ZGU0VUCTE2NAorCWlmIChza2JfaW5uZXJfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0gc2tiX21hY19oZWFkZXIoc2tiKSA+CisJICAgIEZNMTBLX01BWF9FTkNBUF9UUkFOU1BPUlRfT0ZGU0VUKQorCQlyZXR1cm4gMDsKKwogCXN3aXRjaCAodmxhbl9nZXRfcHJvdG9jb2woc2tiKSkgewogCWNhc2UgaHRvbnMoRVRIX1BfSVApOgogCQlsNF9oZHIgPSBpcF9oZHIoc2tiKS0+cHJvdG9jb2w7CkBAIC05NjUsOCArOTcxLDggQEAKIAl0eF9kZXNjID0gRk0xMEtfVFhfREVTQyh0eF9yaW5nLCBpKTsKIAogCS8qIGFkZCBIVyBWTEFOIHRhZyAqLwotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCi0JCXR4X2Rlc2MtPnZsYW4gPSBjcHVfdG9fbGUxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpCisJCXR4X2Rlc2MtPnZsYW4gPSBjcHVfdG9fbGUxNihza2Jfdmxhbl90YWdfZ2V0KHNrYikpOwogCWVsc2UKIAkJdHhfZGVzYy0+dmxhbiA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX21ieC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfbWJ4LmMKaW5kZXggMTRhNGVhNy4uOWY1NDU3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfbWJ4LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfbWJ4LmMKQEAgLTExOTQsMTIgKzExOTQsMTEgQEAKIHsKIAljb25zdCBlbnVtIGZtMTBrX21ieF9zdGF0ZSBzdGF0ZSA9IG1ieC0+c3RhdGU7CiAJY29uc3QgdTMyICpoZHIgPSAmbWJ4LT5tYnhfaGRyOwotCXUxNiBoZWFkLCB0YWlsOworCXUxNiBoZWFkOwogCXMzMiBlcnI7CiAKLQkvKiB3ZSB3aWxsIG5lZWQgdG8gcHVsbCBhbGwgb2YgdGhlIGZpZWxkcyBmb3IgdmVyaWZpY2F0aW9uICovCisJLyogd2Ugd2lsbCBuZWVkIHRvIHB1bGwgdGhlIGhlYWRlciBmaWVsZCBmb3IgdmVyaWZpY2F0aW9uICovCiAJaGVhZCA9IEZNMTBLX01TR19IRFJfRklFTERfR0VUKCpoZHIsIEhFQUQpOwotCXRhaWwgPSBGTTEwS19NU0dfSERSX0ZJRUxEX0dFVCgqaGRyLCBUQUlMKTsKIAogCS8qIFdlIHNob3VsZCBub3QgYmUgcmVjZWl2aW5nIGRpc2Nvbm5lY3QgaWYgUnggaXMgaW5jb21wbGV0ZSAqLwogCWlmIChtYngtPnB1c2hlZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX25ldGRldi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfbmV0ZGV2LmMKaW5kZXggODgxMTM2NC4uY2ZkZThiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfbmV0ZGV2LmMKQEAgLTYwOSw3ICs2MDksNyBAQAogCWludCBlcnI7CiAKIAlpZiAoKHNrYi0+cHJvdG9jb2wgPT0gIGh0b25zKEVUSF9QXzgwMjFRKSkgJiYKLQkgICAgIXZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCSAgICAhc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgewogCQkvKiBGTTEwSyBvbmx5IHN1cHBvcnRzIGhhcmR3YXJlIHRhZ2dpbmcsIGFueSB0YWdzIGluIGZyYW1lCiAJCSAqIGFyZSBjb25zaWRlcmVkIDJuZCBsZXZlbCBvciAib3V0ZXIiIHRhZ3MKIAkJICovCkBAIC0xNDE0LDEzICsxNDE0LDEyIEBACiAJZGV2LT52bGFuX2ZlYXR1cmVzIHw9IGRldi0+ZmVhdHVyZXM7CiAKIAkvKiBjb25maWd1cmUgdHVubmVsIG9mZmxvYWRzICovCi0JZGV2LT5od19lbmNfZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfAotCQkJICAgICAgIE5FVElGX0ZfVFNPIHwKLQkJCSAgICAgICBORVRJRl9GX1RTTzYgfAotCQkJICAgICAgIE5FVElGX0ZfVFNPX0VDTiB8Ci0JCQkgICAgICAgTkVUSUZfRl9HU09fVURQX1RVTk5FTCB8Ci0JCQkgICAgICAgTkVUSUZfRl9JUFY2X0NTVU0gfAotCQkJICAgICAgIE5FVElGX0ZfU0c7CisJZGV2LT5od19lbmNfZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwKKwkJCQlORVRJRl9GX1RTTyB8CisJCQkJTkVUSUZfRl9UU082IHwKKwkJCQlORVRJRl9GX1RTT19FQ04gfAorCQkJCU5FVElGX0ZfR1NPX1VEUF9UVU5ORUwgfAorCQkJCU5FVElGX0ZfSVBWNl9DU1VNOwogCiAJLyogd2Ugd2FudCB0byBsZWF2ZSB0aGVzZSBib3RoIG9uIGFzIHdlIGNhbm5vdCBkaXNhYmxlIFZMQU4gdGFnCiAJICogaW5zZXJ0aW9uIG9yIHN0cmlwcGluZyBvbiB0aGUgaGFyZHdhcmUgc2luY2UgaXQgaXMgY29udGFpbmVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wZi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfcGYuYwppbmRleCAyNzU0MjNkLi43ZTQ3MTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wZi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX3BmLmMKQEAgLTMzMCwxMyArMzMwLDEwIEBACiAJc3RydWN0IGZtMTBrX21hY191cGRhdGUgbWFjX3VwZGF0ZTsKIAl1MzIgbXNnWzVdOwogCi0JLyogaWYgZ2xvcnQgaXMgbm90IHZhbGlkIHJldHVybiBlcnJvciAqLwotCWlmICghZm0xMGtfZ2xvcnRfdmFsaWRfcGYoaHcsIGdsb3J0KSkKKwkvKiBpZiBnbG9ydCBvciB2bGFuIGFyZSBub3QgdmFsaWQgcmV0dXJuIGVycm9yICovCisJaWYgKCFmbTEwa19nbG9ydF92YWxpZF9wZihodywgZ2xvcnQpIHx8IHZpZCA+PSBGTTEwS19WTEFOX1RBQkxFX1ZJRF9NQVgpCiAJCXJldHVybiBGTTEwS19FUlJfUEFSQU07CiAKLQkvKiBkcm9wIHVwcGVyIDQgYml0cyBvZiBWTEFOIElEICovCi0JdmlkID0gKHZpZCA8PCA0KSA+PiA0OwotCiAJLyogcmVjb3JkIGZpZWxkcyAqLwogCW1hY191cGRhdGUubWFjX2xvd2VyID0gY3B1X3RvX2xlMzIoKCh1MzIpbWFjWzJdIDw8IDI0KSB8CiAJCQkJCQkgKCh1MzIpbWFjWzNdIDw8IDE2KSB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa19wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX3B0cC5jCmluZGV4IDc4MjI4MDkuLmQ5NjYwNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX3B0cC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX3B0cC5jCkBAIC01Nyw3ICs1Nyw2IEBACiAJc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCA9ICZpbnRlcmZhY2UtPnRzX3R4X3NrYl9xdWV1ZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlfX2xlMTYgZGdsb3J0OwogCiAJLyogY3JlYXRlIGNsb25lIGZvciB1cyB0byByZXR1cm4gb24gdGhlIFR4IHBhdGggKi8KIAljbG9uZSA9IHNrYl9jbG9uZV9zayhza2IpOwpAQCAtNjUsOCArNjQsNiBAQAogCQlyZXR1cm47CiAKIAlGTTEwS19DQihjbG9uZSktPnRzX3R4X3RpbWVvdXQgPSBqaWZmaWVzICsgRk0xMEtfVFNfVFhfVElNRU9VVDsKLQlkZ2xvcnQgPSBGTTEwS19DQihjbG9uZSktPmZpLncuZGdsb3J0OwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxpc3QtPmxvY2ssIGZsYWdzKTsKIAogCS8qIGF0dGVtcHQgdG8gbG9jYXRlIGFueSBidWZmZXJzIHdpdGggdGhlIHNhbWUgZGdsb3J0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfdHlwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvZm0xMGsvZm0xMGtfdHlwZS5oCmluZGV4IDI4MDI5NmYuLjdjNmQ5ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ZtMTBrL2ZtMTBrX3R5cGUuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9mbTEway9mbTEwa190eXBlLmgKQEAgLTM1NCw3ICszNTQsNyBAQAogCiAvKiBEZWZpbmUgdGltZW91dHMgZm9yIHJlc2V0cyBhbmQgZGlzYWJsZXMgKi8KICNkZWZpbmUgRk0xMEtfUVVFVUVfRElTQUJMRV9USU1FT1VUCQkxMDAKLSNkZWZpbmUgRk0xMEtfUkVTRVRfVElNRU9VVAkJCTEwMAorI2RlZmluZSBGTTEwS19SRVNFVF9USU1FT1VUCQkJMTUwCiAKIC8qIFZGIHJlZ2lzdGVycyAqLwogI2RlZmluZSBGTTEwS19WRkNUUkwJCTB4MDAwMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlLmgKaW5kZXggZmM1MGY2NC4uMmI2NWNkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlLmgKQEAgLTg3LDExICs4NywxMiBAQAogI2RlZmluZSBJNDBFX01JTklNVU1fRkNPRSAgICAgICAgICAgICAxIC8qIG1pbmltdW0gbnVtYmVyIG9mIFFQcyBmb3IgRkNvRSAqLwogI2VuZGlmIC8qIEk0MEVfRkNPRSAqLwogI2RlZmluZSBJNDBFX01BWF9BUV9CVUZfU0laRSAgICAgICAgICA0MDk2Ci0jZGVmaW5lIEk0MEVfQVFfTEVOICAgICAgICAgICAgICAgICAgIDEyOAotI2RlZmluZSBJNDBFX0FRX1dPUktfTElNSVQgICAgICAgICAgICAxNgorI2RlZmluZSBJNDBFX0FRX0xFTiAgICAgICAgICAgICAgICAgICAyNTYKKyNkZWZpbmUgSTQwRV9BUV9XT1JLX0xJTUlUICAgICAgICAgICAgMzIKICNkZWZpbmUgSTQwRV9NQVhfVVNFUl9QUklPUklUWSAgICAgICAgOAogI2RlZmluZSBJNDBFX0RFRkFVTFRfTVNHX0VOQUJMRSAgICAgICA0CiAjZGVmaW5lIEk0MEVfUVVFVUVfV0FJVF9SRVRSWV9MSU1JVCAgIDEwCisjZGVmaW5lIEk0MEVfSU5UX05BTUVfU1RSX0xFTiAgICAgICAgKElGTkFNU0laICsgOSkKIAogI2RlZmluZSBJNDBFX05WTV9WRVJTSU9OX0xPX1NISUZUICAwCiAjZGVmaW5lIEk0MEVfTlZNX1ZFUlNJT05fTE9fTUFTSyAgICgweGZmIDw8IEk0MEVfTlZNX1ZFUlNJT05fTE9fU0hJRlQpCkBAIC0xNDcsNiArMTQ4LDcgQEAKIAlfX0k0MEVfRkRfRkxVU0hfUkVRVUVTVEVELAogCV9fSTQwRV9SRVNFVF9GQUlMRUQsCiAJX19JNDBFX1BPUlRfVFhfU1VTUEVOREVELAorCV9fSTQwRV9WRl9ESVNBQkxFLAogfTsKIAogZW51bSBpNDBlX2ludGVycnVwdF9wb2xpY3kgewpAQCAtMjY4LDcgKzI3MCw3IEBACiAJdTE2IHJ4X2l0cl9kZWZhdWx0OwogCXUxNiB0eF9pdHJfZGVmYXVsdDsKIAl1MTYgbXNnX2VuYWJsZTsKLQljaGFyIG1pc2NfaW50X25hbWVbSUZOQU1TSVogKyA5XTsKKwljaGFyIGludF9uYW1lW0k0MEVfSU5UX05BTUVfU1RSX0xFTl07CiAJdTE2IGFkbWlucV93b3JrX2xpbWl0OyAvKiBudW0gb2YgYWRtaW4gcmVjZWl2ZSBxdWV1ZSBkZXNjIHRvIHByb2Nlc3MgKi8KIAl1bnNpZ25lZCBsb25nIHNlcnZpY2VfdGltZXJfcGVyaW9kOwogCXVuc2lnbmVkIGxvbmcgc2VydmljZV90aW1lcl9wcmV2aW91czsKQEAgLTUyNCw3ICs1MjYsNyBAQAogCiAJY3B1bWFza190IGFmZmluaXR5X21hc2s7CiAJc3RydWN0IHJjdV9oZWFkIHJjdTsJLyogdG8gYXZvaWQgcmFjZSB3aXRoIHVwZGF0ZSBzdGF0cyBvbiBmcmVlICovCi0JY2hhciBuYW1lW0lGTkFNU0laICsgOV07CisJY2hhciBuYW1lW0k0MEVfSU5UX05BTUVfU1RSX0xFTl07CiB9IF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7CiAKIC8qIGxhbiBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9hZG1pbnEuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9hZG1pbnEuaAppbmRleCA1NjRkMGIwLi5kZTE3YjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfYWRtaW5xLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2FkbWlucS5oCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAogLyogZ2VuZXJhbCBpbmZvcm1hdGlvbiAqLwogI2RlZmluZSBJNDBFX0FRX0xBUkdFX0JVRgk1MTIKLSNkZWZpbmUgSTQwRV9BU1FfQ01EX1RJTUVPVVQJMTAwICAvKiBtc2VjcyAqLworI2RlZmluZSBJNDBFX0FTUV9DTURfVElNRU9VVAkyNTAgIC8qIG1zZWNzICovCiAKIHZvaWQgaTQwZV9maWxsX2RlZmF1bHRfZGlyZWN0X2NtZF9kZXNjKHN0cnVjdCBpNDBlX2FxX2Rlc2MgKmRlc2MsCiAJCQkJICAgICAgIHUxNiBvcGNvZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2FkbWlucV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9hZG1pbnFfY21kLmgKaW5kZXggODgzNWFlZS4uOTI5ZTNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2FkbWlucV9jbWQuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfYWRtaW5xX2NtZC5oCkBAIC0yNTYsNiArMjU2LDggQEAKIAlpNDBlX2FxY19vcGNfbGxkcF9zdG9wCQk9IDB4MEEwNSwKIAlpNDBlX2FxY19vcGNfbGxkcF9zdGFydAkJPSAweDBBMDYsCiAJaTQwZV9hcWNfb3BjX2dldF9jZWVfZGNiX2NmZwk9IDB4MEEwNywKKwlpNDBlX2FxY19vcGNfbGxkcF9zZXRfbG9jYWxfbWliCT0gMHgwQTA4LAorCWk0MGVfYXFjX29wY19sbGRwX3N0b3Bfc3RhcnRfc3BlY19hZ2VudAk9IDB4MEEwOSwKIAogCS8qIFR1bm5lbCBjb21tYW5kcyAqLwogCWk0MGVfYXFjX29wY19hZGRfdWRwX3R1bm5lbAk9IDB4MEIwMCwKQEAgLTI2OCw2ICsyNzAsOCBAQAogCS8qIE9FTSBjb21tYW5kcyAqLwogCWk0MGVfYXFjX29wY19vZW1fcGFyYW1ldGVyX2NoYW5nZQk9IDB4RkUwMCwKIAlpNDBlX2FxY19vcGNfb2VtX2RldmljZV9zdGF0dXNfY2hhbmdlCT0gMHhGRTAxLAorCWk0MGVfYXFjX29wY19vZW1fb2NzZF9pbml0aWFsaXplCT0gMHhGRTAyLAorCWk0MGVfYXFjX29wY19vZW1fb2NiYl9pbml0aWFsaXplCT0gMHhGRTAzLAogCiAJLyogZGVidWcgY29tbWFuZHMgKi8KIAlpNDBlX2FxY19vcGNfZGVidWdfZ2V0X2RldmljZWlkCQk9IDB4RkYwMCwKQEAgLTI3Niw3ICsyODAsNiBAQAogCWk0MGVfYXFjX29wY19kZWJ1Z193cml0ZV9yZWcJCT0gMHhGRjA0LAogCWk0MGVfYXFjX29wY19kZWJ1Z19tb2RpZnlfcmVnCQk9IDB4RkYwNywKIAlpNDBlX2FxY19vcGNfZGVidWdfZHVtcF9pbnRlcm5hbHMJPSAweEZGMDgsCi0JaTQwZV9hcWNfb3BjX2RlYnVnX21vZGlmeV9pbnRlcm5hbHMJPSAweEZGMDksCiB9OwogCiAvKiBjb21tYW5kIHN0cnVjdHVyZXMgYW5kIGluZGlyZWN0IGRhdGEgc3RydWN0dXJlcyAqLwpAQCAtNDEwLDYgKzQxMyw3IEBACiAjZGVmaW5lIEk0MEVfQVFfQ0FQX0lEX1ZTSQkJMHgwMDE3CiAjZGVmaW5lIEk0MEVfQVFfQ0FQX0lEX0RDQgkJMHgwMDE4CiAjZGVmaW5lIEk0MEVfQVFfQ0FQX0lEX0ZDT0UJCTB4MDAyMQorI2RlZmluZSBJNDBFX0FRX0NBUF9JRF9JU0NTSQkJMHgwMDIyCiAjZGVmaW5lIEk0MEVfQVFfQ0FQX0lEX1JTUwkJMHgwMDQwCiAjZGVmaW5lIEk0MEVfQVFfQ0FQX0lEX1JYUQkJMHgwMDQxCiAjZGVmaW5lIEk0MEVfQVFfQ0FQX0lEX1RYUQkJMHgwMDQyCkBAIC00NTQsOCArNDU4LDExIEBACiAJX19sZTMyCXBmcG1fcHJveHlmYzsKIAlfX2xlMzIJaXBfYWRkcjsKIAl1OAltYWNfYWRkcls2XTsKKwl1OAlyZXNlcnZlZFsyXTsKIH07CiAKK0k0MEVfQ0hFQ0tfU1RSVUNUX0xFTigweDE0LCBpNDBlX2FxY19hcnBfcHJveHlfZGF0YSk7CisKIC8qIFNldCBOUyBQcm94eSBUYWJsZSBFbnRyeSBDb21tYW5kIChpbmRpcmVjdCAweDAxMDUpICovCiBzdHJ1Y3QgaTQwZV9hcWNfbnNfcHJveHlfZGF0YSB7CiAJX19sZTE2CXRhYmxlX2lkeF9tYWNfYWRkcl8wOwpAQCAtNDgxLDYgKzQ4OCw4IEBACiAJdTgJaXB2Nl9hZGRyXzFbMTZdOwogfTsKIAorSTQwRV9DSEVDS19TVFJVQ1RfTEVOKDB4M2MsIGk0MGVfYXFjX25zX3Byb3h5X2RhdGEpOworCiAvKiBNYW5hZ2UgTEFBIENvbW1hbmQgKDB4MDEwNikgLSBvYnNvbGV0ZSAqLwogc3RydWN0IGk0MGVfYXFjX21uZ19sYWEgewogCV9fbGUxNgljb21tYW5kX2ZsYWdzOwpAQCAtNDkxLDYgKzUwMCw4IEBACiAJdTgJcmVzZXJ2ZWQyWzZdOwogfTsKIAorSTQwRV9DSEVDS19DTURfTEVOR1RIKGk0MGVfYXFjX21uZ19sYWEpOworCiAvKiBNYW5hZ2UgTUFDIEFkZHJlc3MgUmVhZCBDb21tYW5kIChpbmRpcmVjdCAweDAxMDcpICovCiBzdHJ1Y3QgaTQwZV9hcWNfbWFjX2FkZHJlc3NfcmVhZCB7CiAJX19sZTE2CWNvbW1hbmRfZmxhZ3M7CkBAIC01NjIsNiArNTczLDggQEAKIAl1OAlyZXNlcnZlZFsxMl07CiB9OwogCitJNDBFX0NIRUNLX0NNRF9MRU5HVEgoaTQwZV9hcWNfZ2V0X3N3aXRjaF9jb25maWdfaGVhZGVyX3Jlc3ApOworCiBzdHJ1Y3QgaTQwZV9hcWNfc3dpdGNoX2NvbmZpZ19lbGVtZW50X3Jlc3AgewogCXU4CWVsZW1lbnRfdHlwZTsKICNkZWZpbmUgSTQwRV9BUV9TV19FTEVNX1RZUEVfTUFDCTEKQEAgLTU4Nyw2ICs2MDAsOCBAQAogCV9fbGUxNgllbGVtZW50X2luZm87CiB9OwogCitJNDBFX0NIRUNLX1NUUlVDVF9MRU4oMHgxMCwgaTQwZV9hcWNfc3dpdGNoX2NvbmZpZ19lbGVtZW50X3Jlc3ApOworCiAvKiBHZXQgU3dpdGNoIENvbmZpZ3VyYXRpb24gKGluZGlyZWN0IDB4MDIwMCkKICAqICAgIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFyZSByZXR1cm5lZCBpbiB0aGUgcmVzcG9uc2UgYnVmZmVyCiAgKiAgICB0aGUgZmlyc3QgaW4gdGhlIGFycmF5IGlzIHRoZSBoZWFkZXIsIHJlbWFpbmRlciBhcmUgZWxlbWVudHMKQEAgLTU5Niw2ICs2MTEsOCBAQAogCXN0cnVjdCBpNDBlX2FxY19zd2l0Y2hfY29uZmlnX2VsZW1lbnRfcmVzcAllbGVtZW50WzFdOwogfTsKIAorSTQwRV9DSEVDS19TVFJVQ1RfTEVOKDB4MjAsIGk0MGVfYXFjX2dldF9zd2l0Y2hfY29uZmlnX3Jlc3ApOworCiAvKiBBZGQgU3RhdGlzdGljcyAoZGlyZWN0IDB4MDIwMSkKICAqIFJlbW92ZSBTdGF0aXN0aWNzIChkaXJlY3QgMHgwMjAyKQogICovCkBAIC02NjEsNiArNjc4LDggQEAKIAl1OAlyZXNlcnZlZDJbNl07CiB9OwogCitJNDBFX0NIRUNLX1NUUlVDVF9MRU4oMHgxMCwgaTQwZV9hcWNfc3dpdGNoX3Jlc291cmNlX2FsbG9jX2VsZW1lbnRfcmVzcCk7CisKIC8qIEFkZCBWU0kgKGluZGlyZWN0IDB4MDIxMCkKICAqICAgIHRoaXMgaW5kaXJlY3QgY29tbWFuZCB1c2VzIHN0cnVjdCBpNDBlX2FxY192c2lfcHJvcGVydGllc19kYXRhCiAgKiAgICBhcyB0aGUgaW5kaXJlY3QgYnVmZmVyICgxMjggYnl0ZXMpCkBAIC0xMDkyLDYgKzExMTEsOCBAQAogCXU4CXJlc2VydmVkWzEyXTsKIH07CiAKK0k0MEVfQ0hFQ0tfQ01EX0xFTkdUSChpNDBlX2FxY19yZW1vdmVfdGFnKTsKKwogLyogQWRkIG11bHRpY2FzdCBFLVRhZyAoZGlyZWN0IDB4MDI1NykKICAqIGRlbCBtdWx0aWNhc3QgRS1UYWcgKGRpcmVjdCAweDAyNTgpIG9ubHkgdXNlcyBwdl9zZWlkIGFuZCBldGFnIGZpZWxkcwogICogYW5kIG5vIGV4dGVybmFsIGRhdGEKQEAgLTEyMDcsNyArMTIyOCw3IEBACiAJfSBpcGFkZHI7CiAJX19sZTE2CWZsYWdzOwogI2RlZmluZSBJNDBFX0FRQ19BRERfQ0xPVURfRklMVEVSX1NISUZUCQkJMAotI2RlZmluZSBJNDBFX0FRQ19BRERfQ0xPVURfRklMVEVSX01BU0sJCQkoMHgzRiA8PCBcCisjZGVmaW5lIEk0MEVfQVFDX0FERF9DTE9VRF9GSUxURVJfTUFTSwkoMHgzRiA8PCBcCiAJCQkJCUk0MEVfQVFDX0FERF9DTE9VRF9GSUxURVJfU0hJRlQpCiAvKiAweDAwMDAgcmVzZXJ2ZWQgKi8KICNkZWZpbmUgSTQwRV9BUUNfQUREX0NMT1VEX0ZJTFRFUl9PSVAJCQkweDAwMDEKQEAgLTEyNDAsNyArMTI2MSw3IEBACiAJdTgJcmVzZXJ2ZWRbNF07CiAJX19sZTE2CXF1ZXVlX251bWJlcjsKICNkZWZpbmUgSTQwRV9BUUNfQUREX0NMT1VEX1FVRVVFX1NISUZUCQkwCi0jZGVmaW5lIEk0MEVfQVFDX0FERF9DTE9VRF9RVUVVRV9NQVNLCQkoMHgzRiA8PCBcCisjZGVmaW5lIEk0MEVfQVFDX0FERF9DTE9VRF9RVUVVRV9NQVNLCQkoMHg3RkYgPDwgXAogCQkJCQkJIEk0MEVfQVFDX0FERF9DTE9VRF9RVUVVRV9TSElGVCkKIAl1OAlyZXNlcnZlZDJbMTRdOwogCS8qIHJlc3BvbnNlIHNlY3Rpb24gKi8KQEAgLTEzNTksNiArMTM4MCw4IEBACiAJdTgJcmVzZXJ2ZWQxWzI4XTsKIH07CiAKK0k0MEVfQ0hFQ0tfU1RSVUNUX0xFTigweDQwLCBpNDBlX2FxY19jb25maWd1cmVfdnNpX2V0c19zbGFfYndfZGF0YSk7CisKIC8qIENvbmZpZ3VyZSBWU0kgQmFuZHdpZHRoIEFsbG9jYXRpb24gcGVyIFRyYWZmaWMgVHlwZSAoaW5kaXJlY3QgMHgwNDA3KQogICogICAgcmVzcG9uZHMgd2l0aCBpNDBlX2FxY19xc19oYW5kbGVzX3Jlc3AKICAqLwpAQCAtMTM3MCw2ICsxMzkzLDggQEAKIAlfX2xlMTYJcXNfaGFuZGxlc1s4XTsKIH07CiAKK0k0MEVfQ0hFQ0tfU1RSVUNUX0xFTigweDIwLCBpNDBlX2FxY19jb25maWd1cmVfdnNpX3RjX2J3X2RhdGEpOworCiAvKiBRdWVyeSB2c2kgYncgY29uZmlndXJhdGlvbiAoaW5kaXJlY3QgMHgwNDA4KSAqLwogc3RydWN0IGk0MGVfYXFjX3F1ZXJ5X3ZzaV9id19jb25maWdfcmVzcCB7CiAJdTgJdGNfdmFsaWRfYml0czsKQEAgLTEzODMsNiArMTQwOCw4IEBACiAJdTgJcmVzZXJ2ZWQzWzIzXTsKIH07CiAKK0k0MEVfQ0hFQ0tfU1RSVUNUX0xFTigweDQwLCBpNDBlX2FxY19xdWVyeV92c2lfYndfY29uZmlnX3Jlc3ApOworCiAvKiBRdWVyeSBWU0kgQmFuZHdpZHRoIEFsbG9jYXRpb24gcGVyIFRyYWZmaWMgVHlwZSAoaW5kaXJlY3QgMHgwNDBBKSAqLwogc3RydWN0IGk0MGVfYXFjX3F1ZXJ5X3ZzaV9ldHNfc2xhX2NvbmZpZ19yZXNwIHsKIAl1OAl0Y192YWxpZF9iaXRzOwpAQCAtMTM5NCw2ICsxNDIxLDggQEAKIAlfX2xlMTYJdGNfYndfbWF4WzJdOwogfTsKIAorSTQwRV9DSEVDS19TVFJVQ1RfTEVOKDB4MjAsIGk0MGVfYXFjX3F1ZXJ5X3ZzaV9ldHNfc2xhX2NvbmZpZ19yZXNwKTsKKwogLyogQ29uZmlndXJlIFN3aXRjaGluZyBDb21wb25lbnQgQmFuZHdpZHRoIExpbWl0IChkaXJlY3QgMHgwNDEwKSAqLwogc3RydWN0IGk0MGVfYXFjX2NvbmZpZ3VyZV9zd2l0Y2hpbmdfY29tcF9id19saW1pdCB7CiAJX19sZTE2CXNlaWQ7CkBAIC0xNDIxLDYgKzE0NTAsOCBAQAogCXU4CXJlc2VydmVkMls5Nl07CiB9OwogCitJNDBFX0NIRUNLX1NUUlVDVF9MRU4oMHg4MCwgaTQwZV9hcWNfY29uZmlndXJlX3N3aXRjaGluZ19jb21wX2V0c19kYXRhKTsKKwogLyogQ29uZmlndXJlIFN3aXRjaGluZyBDb21wb25lbnQgQmFuZHdpZHRoIExpbWl0cyBwZXIgVGMgKGluZGlyZWN0IDB4MDQxNikgKi8KIHN0cnVjdCBpNDBlX2FxY19jb25maWd1cmVfc3dpdGNoaW5nX2NvbXBfZXRzX2J3X2xpbWl0X2RhdGEgewogCXU4CXRjX3ZhbGlkX2JpdHM7CkBAIC0xNDMyLDYgKzE0NjMsOSBAQAogCXU4CXJlc2VydmVkMVsyOF07CiB9OwogCitJNDBFX0NIRUNLX1NUUlVDVF9MRU4oMHg0MCwKKwkJICAgICAgaTQwZV9hcWNfY29uZmlndXJlX3N3aXRjaGluZ19jb21wX2V0c19id19saW1pdF9kYXRhKTsKKwogLyogQ29uZmlndXJlIFN3aXRjaGluZyBDb21wb25lbnQgQmFuZHdpZHRoIEFsbG9jYXRpb24gcGVyIFRjCiAgKiAoaW5kaXJlY3QgMHgwNDE3KQogICovCkBAIC0xNDQzLDYgKzE0NzcsOCBAQAogCXU4CXJlc2VydmVkMVsyMF07CiB9OwogCitJNDBFX0NIRUNLX1NUUlVDVF9MRU4oMHgyMCwgaTQwZV9hcWNfY29uZmlndXJlX3N3aXRjaGluZ19jb21wX2J3X2NvbmZpZ19kYXRhKTsKKwogLyogUXVlcnkgU3dpdGNoaW5nIENvbXBvbmVudCBDb25maWd1cmF0aW9uIChpbmRpcmVjdCAweDA0MTgpICovCiBzdHJ1Y3QgaTQwZV9hcWNfcXVlcnlfc3dpdGNoaW5nX2NvbXBfZXRzX2NvbmZpZ19yZXNwIHsKIAl1OAl0Y192YWxpZF9iaXRzOwpAQCAtMTQ1Myw2ICsxNDg5LDggQEAKIAl1OAlyZXNlcnZlZDJbMjNdOwogfTsKIAorSTQwRV9DSEVDS19TVFJVQ1RfTEVOKDB4NDAsIGk0MGVfYXFjX3F1ZXJ5X3N3aXRjaGluZ19jb21wX2V0c19jb25maWdfcmVzcCk7CisKIC8qIFF1ZXJ5IFBoeXNpY2FsUG9ydCBFVFMgQ29uZmlndXJhdGlvbiAoaW5kaXJlY3QgMHgwNDE5KSAqLwogc3RydWN0IGk0MGVfYXFjX3F1ZXJ5X3BvcnRfZXRzX2NvbmZpZ19yZXNwIHsKIAl1OAlyZXNlcnZlZFs0XTsKQEAgLTE0NjgsNiArMTUwNiw4IEBACiAJdTgJcmVzZXJ2ZWQzWzMyXTsKIH07CiAKK0k0MEVfQ0hFQ0tfU1RSVUNUX0xFTigweDQ0LCBpNDBlX2FxY19xdWVyeV9wb3J0X2V0c19jb25maWdfcmVzcCk7CisKIC8qIFF1ZXJ5IFN3aXRjaGluZyBDb21wb25lbnQgQmFuZHdpZHRoIEFsbG9jYXRpb24gcGVyIFRyYWZmaWMgVHlwZQogICogKGluZGlyZWN0IDB4MDQxQSkKICAqLwpAQCAtMTQ4Miw2ICsxNTIyLDggQEAKIAlfX2xlMTYJdGNfYndfbWF4WzJdOwogfTsKIAorSTQwRV9DSEVDS19TVFJVQ1RfTEVOKDB4MjAsIGk0MGVfYXFjX3F1ZXJ5X3N3aXRjaGluZ19jb21wX2J3X2NvbmZpZ19yZXNwKTsKKwogLyogU3VzcGVuZC9yZXN1bWUgcG9ydCBUWCB0cmFmZmljCiAgKiAoZGlyZWN0IDB4MDQxQiBhbmQgMHgwNDFDKSB1c2VzIHRoZSBnZW5lcmljIFNFSUQgc3RydWN0CiAgKi8KQEAgLTE0OTUsNiArMTUzNyw4IEBACiAJdTgJbWF4X2J3WzE2XTsgICAgICAvKiBiYW5kd2lkdGggbGltaXQgKi8KIH07CiAKK0k0MEVfQ0hFQ0tfU1RSVUNUX0xFTigweDIyLCBpNDBlX2FxY19jb25maWd1cmVfcGFydGl0aW9uX2J3X2RhdGEpOworCiAvKiBHZXQgYW5kIHNldCB0aGUgYWN0aXZlIEhNQyByZXNvdXJjZSBwcm9maWxlIGFuZCBzdGF0dXMuCiAgKiAoZGlyZWN0IDB4MDUwMCkgYW5kIChkaXJlY3QgMHgwNTAxKQogICovCkBAIC0xNTc3LDYgKzE2MjEsOCBAQAogCXU4IHJlc2VydmVkMls4XTsKIH07CiAKK0k0MEVfQ0hFQ0tfU1RSVUNUX0xFTigweDIwLCBpNDBlX2FxY19tb2R1bGVfZGVzYyk7CisKIHN0cnVjdCBpNDBlX2FxX2dldF9waHlfYWJpbGl0aWVzX3Jlc3AgewogCV9fbGUzMglwaHlfdHlwZTsgICAgICAgLyogYml0bWFwIHVzaW5nIHRoZSBhYm92ZSBlbnVtIGZvciBvZmZzZXRzICovCiAJdTgJbGlua19zcGVlZDsgICAgIC8qIGJpdG1hcCB1c2luZyB0aGUgYWJvdmUgZW51bSBiaXQgcGF0dGVybnMgKi8KQEAgLTE2MDUsNiArMTY1MSw4IEBACiAJc3RydWN0IGk0MGVfYXFjX21vZHVsZV9kZXNjCXF1YWxpZmllZF9tb2R1bGVbSTQwRV9BUV9QSFlfTUFYX1FNU107CiB9OwogCitJNDBFX0NIRUNLX1NUUlVDVF9MRU4oMHgyMTgsIGk0MGVfYXFfZ2V0X3BoeV9hYmlsaXRpZXNfcmVzcCk7CisKIC8qIFNldCBQSFkgQ29uZmlnIChkaXJlY3QgMHgwNjAxKSAqLwogc3RydWN0IGk0MGVfYXFfc2V0X3BoeV9jb25maWcgeyAvKiBzYW1lIGJpdHMgYXMgYWJvdmUgaW4gYWxsICovCiAJX19sZTMyCXBoeV90eXBlOwpAQCAtMTc4OCwxMiArMTgzNiwxMiBAQAogLyogTlZNIENvbmZpZyBSZWFkIChpbmRpcmVjdCAweDA3MDQpICovCiBzdHJ1Y3QgaTQwZV9hcWNfbnZtX2NvbmZpZ19yZWFkIHsKIAlfX2xlMTYJY21kX2ZsYWdzOwotI2RlZmluZSBBTlZNX1NJTkdMRV9PUl9NVUxUSVBMRV9GRUFUVVJFU19NQVNLCTEKLSNkZWZpbmUgQU5WTV9SRUFEX1NJTkdMRV9GRUFUVVJFCQkwCi0jZGVmaW5lIEFOVk1fUkVBRF9NVUxUSVBMRV9GRUFUVVJFUwkJMQorI2RlZmluZSBJNDBFX0FRX0FOVk1fU0lOR0xFX09SX01VTFRJUExFX0ZFQVRVUkVTX01BU0sJMSAKKyNkZWZpbmUgSTQwRV9BUV9BTlZNX1JFQURfU0lOR0xFX0ZFQVRVUkUJCTAgCisjZGVmaW5lIEk0MEVfQVFfQU5WTV9SRUFEX01VTFRJUExFX0ZFQVRVUkVTCQkxCiAJX19sZTE2CWVsZW1lbnRfY291bnQ7Ci0JX19sZTE2CWVsZW1lbnRfaWQ7IC8qIEZlYXR1cmUvZmllbGQgSUQgKi8KLQl1OAlyZXNlcnZlZFsyXTsKKwlfX2xlMTYJZWxlbWVudF9pZDsJLyogRmVhdHVyZS9maWVsZCBJRCAqLworCV9fbGUxNgllbGVtZW50X2lkX21zdzsJLyogTVNXb3JkIG9mIGZpZWxkIElEICovCiAJX19sZTMyCWFkZHJlc3NfaGlnaDsKIAlfX2xlMzIJYWRkcmVzc19sb3c7CiB9OwpAQCAtMTgxMSwyMSArMTg1OSwzMiBAQAogCiBJNDBFX0NIRUNLX0NNRF9MRU5HVEgoaTQwZV9hcWNfbnZtX2NvbmZpZ193cml0ZSk7CiAKKy8qIFVzZWQgZm9yIDB4MDcwNCBhcyB3ZWxsIGFzIGZvciAweDA3MDUgY29tbWFuZHMgKi8KKyNkZWZpbmUgSTQwRV9BUV9BTlZNX0ZFQVRVUkVfT1JfSU1NRURJQVRFX1NISUZUCQkxCisjZGVmaW5lIEk0MEVfQVFfQU5WTV9GRUFUVVJFX09SX0lNTUVESUFURV9NQVNLIFwKKwkJCQkoMSA8PCBJNDBFX0FRX0FOVk1fRkVBVFVSRV9PUl9JTU1FRElBVEVfU0hJRlQpCisjZGVmaW5lIEk0MEVfQVFfQU5WTV9GRUFUVVJFCQkwCisjZGVmaW5lIEk0MEVfQVFfQU5WTV9JTU1FRElBVEVfRklFTEQJKDEgPDwgRkVBVFVSRV9PUl9JTU1FRElBVEVfU0hJRlQpCiBzdHJ1Y3QgaTQwZV9hcWNfbnZtX2NvbmZpZ19kYXRhX2ZlYXR1cmUgewogCV9fbGUxNiBmZWF0dXJlX2lkOwotCV9fbGUxNiBpbnN0YW5jZV9pZDsKKyNkZWZpbmUgSTQwRV9BUV9BTlZNX0ZFQVRVUkVfT1BUSU9OX09FTV9PTkxZCQkweDAxCisjZGVmaW5lIEk0MEVfQVFfQU5WTV9GRUFUVVJFX09QVElPTl9EV09SRF9NQVAJCTB4MDgKKyNkZWZpbmUgSTQwRV9BUV9BTlZNX0ZFQVRVUkVfT1BUSU9OX1BPUl9DU1IJCTB4MTAKIAlfX2xlMTYgZmVhdHVyZV9vcHRpb25zOwogCV9fbGUxNiBmZWF0dXJlX3NlbGVjdGlvbjsKIH07CiAKK0k0MEVfQ0hFQ0tfU1RSVUNUX0xFTigweDYsIGk0MGVfYXFjX252bV9jb25maWdfZGF0YV9mZWF0dXJlKTsKKwogc3RydWN0IGk0MGVfYXFjX252bV9jb25maWdfZGF0YV9pbW1lZGlhdGVfZmllbGQgewotI2RlZmluZSBBTlZNX0ZFQVRVUkVfT1JfSU1NRURJQVRFX01BU0sJMHgyCi0JX19sZTE2IGZpZWxkX2lkOwotCV9fbGUxNiBpbnN0YW5jZV9pZDsKKwlfX2xlMzIgZmllbGRfaWQ7CisJX19sZTMyIGZpZWxkX3ZhbHVlOwogCV9fbGUxNiBmaWVsZF9vcHRpb25zOwotCV9fbGUxNiBmaWVsZF92YWx1ZTsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CiB9OwogCitJNDBFX0NIRUNLX1NUUlVDVF9MRU4oMHhjLCBpNDBlX2FxY19udm1fY29uZmlnX2RhdGFfaW1tZWRpYXRlX2ZpZWxkKTsKKwogLyogU2VuZCB0byBQRiBjb21tYW5kIChpbmRpcmVjdCAweDA4MDEpIGlkIGlzIG9ubHkgdXNlZCBieSBQRgogICogU2VuZCB0byBWRiBjb21tYW5kIChpbmRpcmVjdCAweDA4MDIpIGlkIGlzIG9ubHkgdXNlZCBieSBQRgogICogU2VuZCB0byBQZWVyIFBGIGNvbW1hbmQgKGluZGlyZWN0IDB4MDgwMykKQEAgLTIwMjYsMTIgKzIwODUsNTQgQEAKIAl1OAlvcGVyX3RjX2J3WzhdOwogCXU4CW9wZXJfcGZjX2VuOwogCV9fbGUxNglvcGVyX2FwcF9wcmlvOworI2RlZmluZSBJNDBFX0FRQ19DRUVfQVBQX0ZDT0VfU0hJRlQJMHgwCisjZGVmaW5lIEk0MEVfQVFDX0NFRV9BUFBfRkNPRV9NQVNLCSgweDcgPDwgSTQwRV9BUUNfQ0VFX0FQUF9GQ09FX1NISUZUKQorI2RlZmluZSBJNDBFX0FRQ19DRUVfQVBQX0lTQ1NJX1NISUZUCTB4MworI2RlZmluZSBJNDBFX0FRQ19DRUVfQVBQX0lTQ1NJX01BU0sJKDB4NyA8PCBJNDBFX0FRQ19DRUVfQVBQX0lTQ1NJX1NISUZUKQorI2RlZmluZSBJNDBFX0FRQ19DRUVfQVBQX0ZJUF9TSElGVAkweDgKKyNkZWZpbmUgSTQwRV9BUUNfQ0VFX0FQUF9GSVBfTUFTSwkoMHg3IDw8IEk0MEVfQVFDX0NFRV9BUFBfRklQX1NISUZUKQorI2RlZmluZSBJNDBFX0FRQ19DRUVfQVBQX0ZJUF9NQVNLCSgweDcgPDwgSTQwRV9BUUNfQ0VFX0FQUF9GSVBfU0hJRlQpCiAJX19sZTMyCXRsdl9zdGF0dXM7CisjZGVmaW5lIEk0MEVfQVFDX0NFRV9QR19TVEFUVVNfU0hJRlQJMHgwCisjZGVmaW5lIEk0MEVfQVFDX0NFRV9QR19TVEFUVVNfTUFTSwkoMHg3IDw8IEk0MEVfQVFDX0NFRV9QR19TVEFUVVNfU0hJRlQpCisjZGVmaW5lIEk0MEVfQVFDX0NFRV9QRkNfU1RBVFVTX1NISUZUCTB4MworI2RlZmluZSBJNDBFX0FRQ19DRUVfUEZDX1NUQVRVU19NQVNLCSgweDcgPDwgSTQwRV9BUUNfQ0VFX1BGQ19TVEFUVVNfU0hJRlQpCisjZGVmaW5lIEk0MEVfQVFDX0NFRV9BUFBfU1RBVFVTX1NISUZUCTB4OAorI2RlZmluZSBJNDBFX0FRQ19DRUVfQVBQX1NUQVRVU19NQVNLCSgweDcgPDwgSTQwRV9BUUNfQ0VFX0FQUF9TVEFUVVNfU0hJRlQpCiAJdTgJcmVzZXJ2ZWRbMTJdOwogfTsKIAogSTQwRV9DSEVDS19TVFJVQ1RfTEVOKDB4MjAsIGk0MGVfYXFjX2dldF9jZWVfZGNiX2NmZ19yZXNwKTsKIAorLyoJU2V0IExvY2FsIExMRFAgTUlCIChpbmRpcmVjdCAweDBBMDgpCisgKglVc2VkIHRvIHJlcGxhY2UgdGhlIGxvY2FsIE1JQiBvZiBhIGdpdmVuIExMRFAgYWdlbnQuIGUuZy4gRENCeAorICovCitzdHJ1Y3QgaTQwZV9hcWNfbGxkcF9zZXRfbG9jYWxfbWliIHsKKyNkZWZpbmUgU0VUX0xPQ0FMX01JQl9BQ19UWVBFX0RDQlhfU0hJRlQJMAorI2RlZmluZSBTRVRfTE9DQUxfTUlCX0FDX1RZUEVfRENCWF9NQVNLCSgxIDw8IFNFVF9MT0NBTF9NSUJfQUNfVFlQRV9EQ0JYX1NISUZUKQorCXU4CXR5cGU7CisJdTgJcmVzZXJ2ZWQwOworCV9fbGUxNglsZW5ndGg7CisJdTgJcmVzZXJ2ZWQxWzRdOworCV9fbGUzMglhZGRyZXNzX2hpZ2g7CisJX19sZTMyCWFkZHJlc3NfbG93OworfTsKKworSTQwRV9DSEVDS19DTURfTEVOR1RIKGk0MGVfYXFjX2xsZHBfc2V0X2xvY2FsX21pYik7CisKKy8qCVN0b3AvU3RhcnQgTExEUCBBZ2VudCAoZGlyZWN0IDB4MEEwOSkKKyAqCVVzZWQgZm9yIHN0b3BwaW5nL3N0YXJ0aW5nIHNwZWNpZmljIExMRFAgYWdlbnQuIGUuZy4gRENCeAorICovCitzdHJ1Y3QgaTQwZV9hcWNfbGxkcF9zdG9wX3N0YXJ0X3NwZWNpZmljX2FnZW50IHsKKyNkZWZpbmUgSTQwRV9BUUNfU1RBUlRfU1BFQ0lGSUNfQUdFTlRfU0hJRlQJMAorI2RlZmluZSBJNDBFX0FRQ19TVEFSVF9TUEVDSUZJQ19BR0VOVF9NQVNLIFwKKwkJCQkoMSA8PCBJNDBFX0FRQ19TVEFSVF9TUEVDSUZJQ19BR0VOVF9TSElGVCkKKwl1OAljb21tYW5kOworCXU4CXJlc2VydmVkWzE1XTsKK307CisKK0k0MEVfQ0hFQ0tfQ01EX0xFTkdUSChpNDBlX2FxY19sbGRwX3N0b3Bfc3RhcnRfc3BlY2lmaWNfYWdlbnQpOworCiAvKiBBZGQgVWRwIFR1bm5lbCBjb21tYW5kIGFuZCBjb21wbGV0aW9uIChkaXJlY3QgMHgwQjAwKSAqLwogc3RydWN0IGk0MGVfYXFjX2FkZF91ZHBfdHVubmVsIHsKIAlfX2xlMTYJdWRwX3BvcnQ7CkBAIC0yMTA2LDcgKzIyMDcsOCBAQAogI2RlZmluZSBJNDBFX0FRX09FTV9QQVJBTV9UWVBFX0JXX0NUTAkxCiAjZGVmaW5lIEk0MEVfQVFfT0VNX1BBUkFNX01BQwkJMgogCV9fbGUzMglwYXJhbV92YWx1ZTE7Ci0JdTgJcGFyYW1fdmFsdWUyWzhdOworCV9fbGUxNglwYXJhbV92YWx1ZTI7CisJdTgJcmVzZXJ2ZWRbNl07CiB9OwogCiBJNDBFX0NIRUNLX0NNRF9MRU5HVEgoaTQwZV9hcWNfb2VtX3BhcmFtX2NoYW5nZSk7CkBAIC0yMTIwLDYgKzIyMjIsMjggQEAKIAogSTQwRV9DSEVDS19DTURfTEVOR1RIKGk0MGVfYXFjX29lbV9zdGF0ZV9jaGFuZ2UpOwogCisvKiBJbml0aWFsaXplIE9DU0QgKDB4RkUwMiwgZGlyZWN0KSAqLworc3RydWN0IGk0MGVfYXFjX29wY19vZW1fb2NzZF9pbml0aWFsaXplIHsKKwl1OCB0eXBlX3N0YXR1czsKKwl1OCByZXNlcnZlZDFbM107CisJX19sZTMyIG9jc2RfbWVtb3J5X2Jsb2NrX2FkZHJfaGlnaDsKKwlfX2xlMzIgb2NzZF9tZW1vcnlfYmxvY2tfYWRkcl9sb3c7CisJX19sZTMyIHJlcXVlc3RlZF91cGRhdGVfaW50ZXJ2YWw7Cit9OworCitJNDBFX0NIRUNLX0NNRF9MRU5HVEgoaTQwZV9hcWNfb3BjX29lbV9vY3NkX2luaXRpYWxpemUpOworCisvKiBJbml0aWFsaXplIE9DQkIgICgweEZFMDMsIGRpcmVjdCkgKi8KK3N0cnVjdCBpNDBlX2FxY19vcGNfb2VtX29jYmJfaW5pdGlhbGl6ZSB7CisJdTggdHlwZV9zdGF0dXM7CisJdTggcmVzZXJ2ZWQxWzNdOworCV9fbGUzMiBvY2JiX21lbW9yeV9ibG9ja19hZGRyX2hpZ2g7CisJX19sZTMyIG9jYmJfbWVtb3J5X2Jsb2NrX2FkZHJfbG93OworCXU4IHJlc2VydmVkMls0XTsKK307CisKK0k0MEVfQ0hFQ0tfQ01EX0xFTkdUSChpNDBlX2FxY19vcGNfb2VtX29jYmJfaW5pdGlhbGl6ZSk7CisKIC8qIGRlYnVnIGNvbW1hbmRzICovCiAKIC8qIGdldCBkZXZpY2UgaWQgKDB4RkYwMCkgdXNlcyB0aGUgZ2VuZXJpYyBzdHJ1Y3R1cmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9jb21tb24uYwppbmRleCAzZDc0MWVlLi4xMWE5ZmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2NvbW1vbi5jCkBAIC03NDIsNiArNzQyLDY1IEBACiAjZW5kaWYKIAogLyoqCisgKiAgaTQwZV9yZWFkX3BiYV9zdHJpbmcgLSBSZWFkcyBwYXJ0IG51bWJlciBzdHJpbmcgZnJvbSBFRVBST00KKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHBiYV9udW06IHN0b3JlcyB0aGUgcGFydCBudW1iZXIgc3RyaW5nIGZyb20gdGhlIEVFUFJPTQorICogIEBwYmFfbnVtX3NpemU6IHBhcnQgbnVtYmVyIHN0cmluZyBidWZmZXIgbGVuZ3RoCisgKgorICogIFJlYWRzIHRoZSBwYXJ0IG51bWJlciBzdHJpbmcgZnJvbSB0aGUgRUVQUk9NLgorICoqLworaTQwZV9zdGF0dXMgaTQwZV9yZWFkX3BiYV9zdHJpbmcoc3RydWN0IGk0MGVfaHcgKmh3LCB1OCAqcGJhX251bSwKKwkJCQkgdTMyIHBiYV9udW1fc2l6ZSkKK3sKKwlpNDBlX3N0YXR1cyBzdGF0dXMgPSAwOworCXUxNiBwYmFfd29yZCA9IDA7CisJdTE2IHBiYV9zaXplID0gMDsKKwl1MTYgcGJhX3B0ciA9IDA7CisJdTE2IGkgPSAwOworCisJc3RhdHVzID0gaTQwZV9yZWFkX252bV93b3JkKGh3LCBJNDBFX1NSX1BCQV9GTEFHUywgJnBiYV93b3JkKTsKKwlpZiAoc3RhdHVzIHx8IChwYmFfd29yZCAhPSAweEZBRkEpKSB7CisJCWh3X2RiZyhodywgIkZhaWxlZCB0byByZWFkIFBCQSBmbGFncyBvciBmbGFnIGlzIGludmFsaWQuXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlzdGF0dXMgPSBpNDBlX3JlYWRfbnZtX3dvcmQoaHcsIEk0MEVfU1JfUEJBX0JMT0NLX1BUUiwgJnBiYV9wdHIpOworCWlmIChzdGF0dXMpIHsKKwkJaHdfZGJnKGh3LCAiRmFpbGVkIHRvIHJlYWQgUEJBIEJsb2NrIHBvaW50ZXIuXG4iKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlzdGF0dXMgPSBpNDBlX3JlYWRfbnZtX3dvcmQoaHcsIHBiYV9wdHIsICZwYmFfc2l6ZSk7CisJaWYgKHN0YXR1cykgeworCQlod19kYmcoaHcsICJGYWlsZWQgdG8gcmVhZCBQQkEgQmxvY2sgc2l6ZS5cbiIpOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIFN1YnRyYWN0IG9uZSB0byBnZXQgUEJBIHdvcmQgY291bnQgKFBCQSBTaXplIHdvcmQgaXMgaW5jbHVkZWQgaW4KKwkgKiB0b3RhbCBzaXplKQorCSAqLworCXBiYV9zaXplLS07CisJaWYgKHBiYV9udW1fc2l6ZSA8ICgoKHUzMilwYmFfc2l6ZSAqIDIpICsgMSkpIHsKKwkJaHdfZGJnKGh3LCAiQnVmZmVyIHRvIHNtYWxsIGZvciBQQkEgZGF0YS5cbiIpOworCQlyZXR1cm4gSTQwRV9FUlJfUEFSQU07CisJfQorCisJZm9yIChpID0gMDsgaSA8IHBiYV9zaXplOyBpKyspIHsKKwkJc3RhdHVzID0gaTQwZV9yZWFkX252bV93b3JkKGh3LCAocGJhX3B0ciArIDEpICsgaSwgJnBiYV93b3JkKTsKKwkJaWYgKHN0YXR1cykgeworCQkJaHdfZGJnKGh3LCAiRmFpbGVkIHRvIHJlYWQgUEJBIEJsb2NrIHdvcmQgJWQuXG4iLCBpKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKworCQlwYmFfbnVtWyhpICogMildID0gKHBiYV93b3JkID4+IDgpICYgMHhGRjsKKwkJcGJhX251bVsoaSAqIDIpICsgMV0gPSBwYmFfd29yZCAmIDB4RkY7CisJfQorCXBiYV9udW1bKHBiYV9zaXplICogMildID0gJ1wwJzsKKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgogICogaTQwZV9nZXRfbWVkaWFfdHlwZSAtIEdldHMgbWVkaWEgdHlwZQogICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqKi8KQEAgLTEwODMsOCArMTE0MiwxMCBAQAogCQlpZiAobW9kZSA9PSBJNDBFX0xJTktfQUNUSVZJVFkpCiAJCQlibGluayA9IGZhbHNlOwogCi0JCWdwaW9fdmFsIHw9IChibGluayA/IDEgOiAwKSA8PAotCQkJICAgIEk0MEVfR0xHRU5fR1BJT19DVExfTEVEX0JMSU5LX1NISUZUOworCQlpZiAoYmxpbmspCisJCQlncGlvX3ZhbCB8PSAoMSA8PCBJNDBFX0dMR0VOX0dQSU9fQ1RMX0xFRF9CTElOS19TSElGVCk7CisJCWVsc2UKKwkJCWdwaW9fdmFsICY9IH4oMSA8PCBJNDBFX0dMR0VOX0dQSU9fQ1RMX0xFRF9CTElOS19TSElGVCk7CiAKIAkJd3IzMihodywgSTQwRV9HTEdFTl9HUElPX0NUTChpKSwgZ3Bpb192YWwpOwogCQlicmVhazsKQEAgLTIwMzUsNiArMjA5Niw0MyBAQAogfQogCiAvKioKKyAqIGk0MGVfYXFfZGVidWdfcmVhZF9yZWdpc3RlcgorICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3QKKyAqIEByZWdfYWRkcjogcmVnaXN0ZXIgYWRkcmVzcworICogQHJlZ192YWw6IHJlZ2lzdGVyIHZhbHVlCisgKiBAY21kX2RldGFpbHM6IHBvaW50ZXIgdG8gY29tbWFuZCBkZXRhaWxzIHN0cnVjdHVyZSBvciBOVUxMCisgKgorICogUmVhZCB0aGUgcmVnaXN0ZXIgdXNpbmcgdGhlIGFkbWluIHF1ZXVlIGNvbW1hbmRzCisgKiovCitpNDBlX3N0YXR1cyBpNDBlX2FxX2RlYnVnX3JlYWRfcmVnaXN0ZXIoc3RydWN0IGk0MGVfaHcgKmh3LAorCQkJCXUzMiAgcmVnX2FkZHIsIHU2NCAqcmVnX3ZhbCwKKwkJCQlzdHJ1Y3QgaTQwZV9hc3FfY21kX2RldGFpbHMgKmNtZF9kZXRhaWxzKQoreworCXN0cnVjdCBpNDBlX2FxX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgaTQwZV9hcWNfZGVidWdfcmVnX3JlYWRfd3JpdGUgKmNtZF9yZXNwID0KKwkJKHN0cnVjdCBpNDBlX2FxY19kZWJ1Z19yZWdfcmVhZF93cml0ZSAqKSZkZXNjLnBhcmFtcy5yYXc7CisJaTQwZV9zdGF0dXMgc3RhdHVzOworCisJaWYgKHJlZ192YWwgPT0gTlVMTCkKKwkJcmV0dXJuIEk0MEVfRVJSX1BBUkFNOworCisJaTQwZV9maWxsX2RlZmF1bHRfZGlyZWN0X2NtZF9kZXNjKCZkZXNjLAorCQkJCQkgIGk0MGVfYXFjX29wY19kZWJ1Z19yZWFkX3JlZyk7CisKKwljbWRfcmVzcC0+YWRkcmVzcyA9IGNwdV90b19sZTMyKHJlZ19hZGRyKTsKKworCXN0YXR1cyA9IGk0MGVfYXNxX3NlbmRfY29tbWFuZChodywgJmRlc2MsIE5VTEwsIDAsIGNtZF9kZXRhaWxzKTsKKworCWlmICghc3RhdHVzKSB7CisJCSpyZWdfdmFsID0gKCh1NjQpY21kX3Jlc3AtPnZhbHVlX2hpZ2ggPDwgMzIpIHwKKwkJCSAgICAodTY0KWNtZF9yZXNwLT52YWx1ZV9sb3c7CisJCSpyZWdfdmFsID0gbGU2NF90b19jcHUoKnJlZ192YWwpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKgogICogaTQwZV9hcV9kZWJ1Z193cml0ZV9yZWdpc3RlcgogICogQGh3OiBwb2ludGVyIHRvIHRoZSBodyBzdHJ1Y3QKICAqIEByZWdfYWRkcjogcmVnaXN0ZXIgYWRkcmVzcwpAQCAtMjI2NCw2ICsyMzYyLDcgQEAKICNkZWZpbmUgSTQwRV9ERVZfRlVOQ19DQVBfVlNJCQkweDE3CiAjZGVmaW5lIEk0MEVfREVWX0ZVTkNfQ0FQX0RDQgkJMHgxOAogI2RlZmluZSBJNDBFX0RFVl9GVU5DX0NBUF9GQ09FCQkweDIxCisjZGVmaW5lIEk0MEVfREVWX0ZVTkNfQ0FQX0lTQ1NJCQkweDIyCiAjZGVmaW5lIEk0MEVfREVWX0ZVTkNfQ0FQX1JTUwkJMHg0MAogI2RlZmluZSBJNDBFX0RFVl9GVU5DX0NBUF9SWF9RVUVVRVMJMHg0MQogI2RlZmluZSBJNDBFX0RFVl9GVU5DX0NBUF9UWF9RVUVVRVMJMHg0MgpAQCAtMjI5Miw2ICsyMzkxLDcgQEAKIAkJCQkgICAgIGVudW0gaTQwZV9hZG1pbl9xdWV1ZV9vcGMgbGlzdF90eXBlX29wYykKIHsKIAlzdHJ1Y3QgaTQwZV9hcWNfbGlzdF9jYXBhYmlsaXRpZXNfZWxlbWVudF9yZXNwICpjYXA7CisJdTMyIHZhbGlkX2Z1bmN0aW9ucywgbnVtX2Z1bmN0aW9uczsKIAl1MzIgbnVtYmVyLCBsb2dpY2FsX2lkLCBwaHlzX2lkOwogCXN0cnVjdCBpNDBlX2h3X2NhcGFiaWxpdGllcyAqcDsKIAl1MzIgaSA9IDA7CkBAIC0yMzYyLDYgKzI0NjIsMTAgQEAKIAkJCWlmIChudW1iZXIgPT0gMSkKIAkJCQlwLT5mY29lID0gdHJ1ZTsKIAkJCWJyZWFrOworCQljYXNlIEk0MEVfREVWX0ZVTkNfQ0FQX0lTQ1NJOgorCQkJaWYgKG51bWJlciA9PSAxKQorCQkJCXAtPmlzY3NpID0gdHJ1ZTsKKwkJCWJyZWFrOwogCQljYXNlIEk0MEVfREVWX0ZVTkNfQ0FQX1JTUzoKIAkJCXAtPnJzcyA9IHRydWU7CiAJCQlwLT5yc3NfdGFibGVfc2l6ZSA9IG51bWJlcjsKQEAgLTI0MjcsNiArMjUzMSwzNCBAQAogCWlmIChwLT5ucGFyX2VuYWJsZSB8fCBwLT5tZnBfbW9kZV8xKQogCQlwLT5mY29lID0gZmFsc2U7CiAKKwkvKiBjb3VudCB0aGUgZW5hYmxlZCBwb3J0cyAoYWthIHRoZSAibm90IGRpc2FibGVkIiBwb3J0cykgKi8KKwlody0+bnVtX3BvcnRzID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXUzMiBwb3J0X2NmZ19yZWcgPSBJNDBFX1BSVEdFTl9DTkYgKyAoNCAqIGkpOworCQl1NjQgcG9ydF9jZmcgPSAwOworCisJCS8qIHVzZSBBUSByZWFkIHRvIGdldCB0aGUgcGh5c2ljYWwgcmVnaXN0ZXIgb2Zmc2V0IGluc3RlYWQKKwkJICogb2YgdGhlIHBvcnQgcmVsYXRpdmUgb2Zmc2V0CisJCSAqLworCQlpNDBlX2FxX2RlYnVnX3JlYWRfcmVnaXN0ZXIoaHcsIHBvcnRfY2ZnX3JlZywgJnBvcnRfY2ZnLCBOVUxMKTsKKwkJaWYgKCEocG9ydF9jZmcgJiBJNDBFX1BSVEdFTl9DTkZfUE9SVF9ESVNfTUFTSykpCisJCQlody0+bnVtX3BvcnRzKys7CisJfQorCisJdmFsaWRfZnVuY3Rpb25zID0gcC0+dmFsaWRfZnVuY3Rpb25zOworCW51bV9mdW5jdGlvbnMgPSAwOworCXdoaWxlICh2YWxpZF9mdW5jdGlvbnMpIHsKKwkJaWYgKHZhbGlkX2Z1bmN0aW9ucyAmIDEpCisJCQludW1fZnVuY3Rpb25zKys7CisJCXZhbGlkX2Z1bmN0aW9ucyA+Pj0gMTsKKwl9CisKKwkvKiBwYXJ0aXRpb24gaWQgaXMgMS1iYXNlZCwgYW5kIGZ1bmN0aW9ucyBhcmUgZXZlbmx5IHNwcmVhZAorCSAqIGFjcm9zcyB0aGUgcG9ydHMgYXMgcGFydGl0aW9ucworCSAqLworCWh3LT5wYXJ0aXRpb25faWQgPSAoaHctPnBmX2lkIC8gaHctPm51bV9wb3J0cykgKyAxOworCWh3LT5udW1fcGFydGl0aW9ucyA9IG51bV9mdW5jdGlvbnMgLyBody0+bnVtX3BvcnRzOworCiAJLyogYWRkaXRpb25hbCBIVyBzcGVjaWZpYyBnb29kaWVzIHRoYXQgbWlnaHQKIAkgKiBzb21lZGF5IGJlIEhXIHZlcnNpb24gc3BlY2lmaWMKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZGVidWdmcy5jCmluZGV4IGNiMGRlNDU1Li42MTIzNmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9kZWJ1Z2ZzLmMKQEAgLTE4OTAsNyArMTg5MCw2IEBACiAJCWRldl9pbmZvKCZwZi0+cGRldi0+ZGV2LCAiICBkdW1wIGRlc2MgdHggPHZzaV9zZWlkPiA8cmluZ19pZD4gWzxkZXNjX24+XVxuIik7CiAJCWRldl9pbmZvKCZwZi0+cGRldi0+ZGV2LCAiICBkdW1wIGRlc2MgcnggPHZzaV9zZWlkPiA8cmluZ19pZD4gWzxkZXNjX24+XVxuIik7CiAJCWRldl9pbmZvKCZwZi0+cGRldi0+ZGV2LCAiICBkdW1wIGRlc2MgYXFcbiIpOwotCQlkZXZfaW5mbygmcGYtPnBkZXYtPmRldiwgIiAgZHVtcCBzdGF0c1xuIik7CiAJCWRldl9pbmZvKCZwZi0+cGRldi0+ZGV2LCAiICBkdW1wIHJlc2V0IHN0YXRzXG4iKTsKIAkJZGV2X2luZm8oJnBmLT5wZGV2LT5kZXYsICIgIG1zZ19lbmFibGUgW2xldmVsXVxuIik7CiAJCWRldl9pbmZvKCZwZi0+cGRldi0+ZGV2LCAiICByZWFkIDxyZWc+XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZXRodG9vbC5jCmluZGV4IDk1MWU4NzYuLmI4MjMwZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2V0aHRvb2wuYwpAQCAtMjE5LDYgKzIxOSwxNiBAQAogI2RlZmluZSBJNDBFX1RFU1RfTEVOIChzaXplb2YoaTQwZV9nc3RyaW5nc190ZXN0KSAvIEVUSF9HU1RSSU5HX0xFTikKIAogLyoqCisgKiBpNDBlX3BhcnRpdGlvbl9zZXR0aW5nX2NvbXBsYWludCAtIGdlbmVyaWMgY29tcGxhaW50IGZvciBNRlAgcmVzdHJpY3Rpb24KKyAqIEBwZjogdGhlIFBGIHN0cnVjdAorICoqLworc3RhdGljIHZvaWQgaTQwZV9wYXJ0aXRpb25fc2V0dGluZ19jb21wbGFpbnQoc3RydWN0IGk0MGVfcGYgKnBmKQoreworCWRldl9pbmZvKCZwZi0+cGRldi0+ZGV2LAorCQkgIlRoZSBsaW5rIHNldHRpbmdzIGFyZSBhbGxvd2VkIHRvIGJlIGNoYW5nZWQgb25seSBmcm9tIHRoZSBmaXJzdCBwYXJ0aXRpb24gb2YgYSBnaXZlbiBwb3J0LiBQbGVhc2Ugc3dpdGNoIHRvIHRoZSBmaXJzdCBwYXJ0aXRpb24gaW4gb3JkZXIgdG8gY2hhbmdlIHRoZSBzZXR0aW5nLlxuIik7Cit9CisKKy8qKgogICogaTQwZV9nZXRfc2V0dGluZ3MgLSBHZXQgTGluayBTcGVlZCBhbmQgRHVwbGV4IHNldHRpbmdzCiAgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAZWNtZDogZXRodG9vbCBjb21tYW5kCkBAIC00ODUsNiArNDk1LDE0IEBACiAJdTggYXV0b25lZzsKIAl1MzIgYWR2ZXJ0aXNlOwogCisJLyogQ2hhbmdpbmcgcG9ydCBzZXR0aW5ncyBpcyBub3Qgc3VwcG9ydGVkIGlmIHRoaXMgaXNuJ3QgdGhlCisJICogcG9ydCdzIGNvbnRyb2xsaW5nIFBGCisJICovCisJaWYgKGh3LT5wYXJ0aXRpb25faWQgIT0gMSkgeworCQlpNDBlX3BhcnRpdGlvbl9zZXR0aW5nX2NvbXBsYWludChwZik7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKIAlpZiAodnNpICE9IHBmLT52c2lbcGYtPmxhbl92c2ldKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKQEAgLTY4Nyw2ICs3MDUsMTQgQEAKIAl1OCBhcV9mYWlsdXJlczsKIAlpbnQgZXJyID0gMDsKIAorCS8qIENoYW5naW5nIHRoZSBwb3J0J3MgZmxvdyBjb250cm9sIGlzIG5vdCBzdXBwb3J0ZWQgaWYgdGhpcyBpc24ndCB0aGUKKwkgKiBwb3J0J3MgY29udHJvbGxpbmcgUEYKKwkgKi8KKwlpZiAoaHctPnBhcnRpdGlvbl9pZCAhPSAxKSB7CisJCWk0MGVfcGFydGl0aW9uX3NldHRpbmdfY29tcGxhaW50KHBmKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwogCWlmICh2c2kgIT0gcGYtPnZzaVtwZi0+bGFuX3ZzaV0pCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIApAQCAtMTUwMyw3ICsxNTI5LDcgQEAKIAogCS8qIE5WTSBiaXQgb24gbWVhbnMgV29MIGRpc2FibGVkIGZvciB0aGUgcG9ydCAqLwogCWk0MGVfcmVhZF9udm1fd29yZChodywgSTQwRV9TUl9OVk1fV0FLRV9PTl9MQU4sICZ3b2xfbnZtX2JpdHMpOwotCWlmICgoMSA8PCBody0+cG9ydCkgJiB3b2xfbnZtX2JpdHMpIHsKKwlpZiAoKDEgPDwgaHctPnBvcnQpICYgd29sX252bV9iaXRzIHx8IGh3LT5wYXJ0aXRpb25faWQgIT0gMSkgewogCQl3b2wtPnN1cHBvcnRlZCA9IDA7CiAJCXdvbC0+d29sb3B0cyA9IDA7CiAJfSBlbHNlIHsKQEAgLTE1MTIsMTMgKzE1MzgsMjggQEAKIAl9CiB9CiAKKy8qKgorICogaTQwZV9zZXRfd29sIC0gc2V0IHRoZSBXYWtlT25MQU4gY29uZmlndXJhdGlvbgorICogQG5ldGRldjogdGhlIG5ldGRldiBpbiBxdWVzdGlvbgorICogQHdvbDogdGhlIGV0aHRvb2wgV29MIHNldHRpbmcgZGF0YQorICoqLwogc3RhdGljIGludCBpNDBlX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewogCXN0cnVjdCBpNDBlX25ldGRldl9wcml2ICpucCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGk0MGVfcGYgKnBmID0gbnAtPnZzaS0+YmFjazsKKwlzdHJ1Y3QgaTQwZV92c2kgKnZzaSA9IG5wLT52c2k7CiAJc3RydWN0IGk0MGVfaHcgKmh3ID0gJnBmLT5odzsKIAl1MTYgd29sX252bV9iaXRzOwogCisJLyogV29MIG5vdCBzdXBwb3J0ZWQgaWYgdGhpcyBpc24ndCB0aGUgY29udHJvbGxpbmcgUEYgb24gdGhlIHBvcnQgKi8KKwlpZiAoaHctPnBhcnRpdGlvbl9pZCAhPSAxKSB7CisJCWk0MGVfcGFydGl0aW9uX3NldHRpbmdfY29tcGxhaW50KHBmKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWlmICh2c2kgIT0gcGYtPnZzaVtwZi0+bGFuX3ZzaV0pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwogCS8qIE5WTSBiaXQgb24gbWVhbnMgV29MIGRpc2FibGVkIGZvciB0aGUgcG9ydCAqLwogCWk0MGVfcmVhZF9udm1fd29yZChodywgSTQwRV9TUl9OVk1fV0FLRV9PTl9MQU4sICZ3b2xfbnZtX2JpdHMpOwogCWlmICgoKDEgPDwgaHctPnBvcnQpICYgd29sX252bV9iaXRzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9mY29lLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfZmNvZS5jCmluZGV4IGE4YjhiZDkuLjI3YzIwNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9mY29lLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX2Zjb2UuYwpAQCAtMzksMTUgKzM5LDYgQEAKICNpbmNsdWRlICJpNDBlX2Zjb2UuaCIKIAogLyoqCi0gKiBpNDBlX3J4X2lzX2ZpcCAtIHJldHVybnMgdHJ1ZSBpZiB0aGUgcnggcGFja2V0IHR5cGUgaXMgRklQCi0gKiBAcHR5cGU6IHRoZSBwYWNrZXQgdHlwZSBmaWVsZCBmcm9tIHJ4IGRlc2NyaXB0b3Igd3JpdGUtYmFjawotICoqLwotc3RhdGljIGlubGluZSBib29sIGk0MGVfcnhfaXNfZmlwKHUxNiBwdHlwZSkKLXsKLQlyZXR1cm4gcHR5cGUgPT0gSTQwRV9SWF9QVFlQRV9MMl9GSVBfUEFZMjsKLX0KLQotLyoqCiAgKiBpNDBlX3J4X2lzX2Zjb2UgLSByZXR1cm5zIHRydWUgaWYgdGhlIHJ4IHBhY2tldCB0eXBlIGlzIEZDb0UKICAqIEBwdHlwZTogdGhlIHBhY2tldCB0eXBlIGZpZWxkIGZyb20gcnggZGVzY3JpcHRvciB3cml0ZS1iYWNrCiAgKiovCkBAIC00MDQsNiArMzk1LDcgQEAKIAkJCQkJICAgIEk0MEVfQVFfVlNJX1BST1BfSU5HUkVTU19VUF9WQUxJRCB8CiAJCQkJCSAgICBJNDBFX0FRX1ZTSV9QUk9QX0VHUkVTU19VUF9WQUxJRCkpOwogCisJaW5mby0+c3dpdGNoX2lkID0gY3B1X3RvX2xlMTYoSTQwRV9BUV9WU0lfU1dfSURfRkxBR19BTExPV19MQik7CiAJZW5hYmxlZF90YyA9IGk0MGVfZ2V0X2Zjb2VfdGNfbWFwKHBmKTsKIAlpNDBlX3ZzaV9zZXR1cF9xdWV1ZV9tYXAodnNpLCBjdHh0LCBlbmFibGVkX3RjLCB0cnVlKTsKIApAQCAtMTUxMSwxMiArMTUwMywxNiBAQAogCXN0cmxjcHkobmV0ZGV2LT5uYW1lLCAiZmNvZSVkIiwgSUZOQU1TSVotMSk7CiAJbmV0ZGV2LT5tdHUgPSBGQ09FX01UVTsKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwZi0+cGRldi0+ZGV2KTsKKwkvKiBzZXQgZGlmZmVyZW50IGRldl9wb3J0IHZhbHVlIDEgZm9yIEZDb0UgbmV0ZGV2IHRoYW4gdGhlIGRlZmF1bHQKKwkgKiB6ZXJvIGRldl9wb3J0IHZhbHVlIGZvciBQRiBuZXRkZXYsIHRoaXMgaGVscHMgYmlvc2Rldm5hbWUgdXNlcgorCSAqIHRvb2wgdG8gZGlmZmVyZW50aWF0ZSB0aGVtIGNvcnJlY3RseSB3aGlsZSBib3RoIGF0dGFjaGVkIHRvIHRoZQorCSAqIHNhbWUgUENJIGZ1bmN0aW9uLgorCSAqLworCW5ldGRldi0+ZGV2X3BvcnQgPSAxOwogCWk0MGVfYWRkX2ZpbHRlcih2c2ksIGh3LT5tYWMuc2FuX2FkZHIsIDAsIGZhbHNlLCBmYWxzZSk7CiAJaTQwZV9hZGRfZmlsdGVyKHZzaSwgKHU4WzZdKSBGQ19GQ09FX0ZMT0dJX01BQywgMCwgZmFsc2UsIGZhbHNlKTsKIAlpNDBlX2FkZF9maWx0ZXIodnNpLCBGSVBfQUxMX0ZDT0VfTUFDUywgMCwgZmFsc2UsIGZhbHNlKTsKIAlpNDBlX2FkZF9maWx0ZXIodnNpLCBGSVBfQUxMX0VOT0RFX01BQ1MsIDAsIGZhbHNlLCBmYWxzZSk7Ci0JaTQwZV9hZGRfZmlsdGVyKHZzaSwgRklQX0FMTF9WTjJWTl9NQUNTLCAwLCBmYWxzZSwgZmFsc2UpOwotCWk0MGVfYWRkX2ZpbHRlcih2c2ksIEZJUF9BTExfUDJQX01BQ1MsIDAsIGZhbHNlLCBmYWxzZSk7CiAKIAkvKiB1c2Ugc2FuIG1hYyAqLwogCWV0aGVyX2FkZHJfY29weShuZXRkZXYtPmRldl9hZGRyLCBody0+bWFjLnNhbl9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfbWFpbi5jCmluZGV4IGE1ZjI2NjAuLmNiZTI4MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX21haW4uYwpAQCAtMzksNyArMzksNyBAQAogCiAjZGVmaW5lIERSVl9WRVJTSU9OX01BSk9SIDEKICNkZWZpbmUgRFJWX1ZFUlNJT05fTUlOT1IgMgotI2RlZmluZSBEUlZfVkVSU0lPTl9CVUlMRCAyCisjZGVmaW5lIERSVl9WRVJTSU9OX0JVSUxEIDYKICNkZWZpbmUgRFJWX1ZFUlNJT04gX19zdHJpbmdpZnkoRFJWX1ZFUlNJT05fTUFKT1IpICIuIiBcCiAJICAgICBfX3N0cmluZ2lmeShEUlZfVkVSU0lPTl9NSU5PUikgIi4iIFwKIAkgICAgIF9fc3RyaW5naWZ5KERSVl9WRVJTSU9OX0JVSUxEKSAgICBEUlZfS0VSTgpAQCAtMjgxOSw4ICsyODE5LDkgQEAKICAqIGk0MGVfZW5hYmxlX21pc2NfaW50X2NhdXNlcyAtIGVuYWJsZSB0aGUgbm9uLXF1ZXVlIGludGVycnVwdHMKICAqIEBodzogcHRyIHRvIHRoZSBoYXJkd2FyZSBpbmZvCiAgKiovCi1zdGF0aWMgdm9pZCBpNDBlX2VuYWJsZV9taXNjX2ludF9jYXVzZXMoc3RydWN0IGk0MGVfaHcgKmh3KQorc3RhdGljIHZvaWQgaTQwZV9lbmFibGVfbWlzY19pbnRfY2F1c2VzKHN0cnVjdCBpNDBlX3BmICpwZikKIHsKKwlzdHJ1Y3QgaTQwZV9odyAqaHcgPSAmcGYtPmh3OwogCXUzMiB2YWw7CiAKIAkvKiBjbGVhciB0aGluZ3MgZmlyc3QgKi8KQEAgLTI4MzIsMTEgKzI4MzMsMTMgQEAKIAkgICAgICBJNDBFX1BGSU5UX0lDUjBfRU5BX0dSU1RfTUFTSyAgICAgICAgICB8CiAJICAgICAgSTQwRV9QRklOVF9JQ1IwX0VOQV9QQ0lfRVhDRVBUSU9OX01BU0sgfAogCSAgICAgIEk0MEVfUEZJTlRfSUNSMF9FTkFfR1BJT19NQVNLICAgICAgICAgIHwKLQkgICAgICBJNDBFX1BGSU5UX0lDUjBfRU5BX1RJTUVTWU5DX01BU0sgICAgICB8CiAJICAgICAgSTQwRV9QRklOVF9JQ1IwX0VOQV9ITUNfRVJSX01BU0sgICAgICAgfAogCSAgICAgIEk0MEVfUEZJTlRfSUNSMF9FTkFfVkZMUl9NQVNLICAgICAgICAgIHwKIAkgICAgICBJNDBFX1BGSU5UX0lDUjBfRU5BX0FETUlOUV9NQVNLOwogCisJaWYgKHBmLT5mbGFncyAmIEk0MEVfRkxBR19QVFApCisJCXZhbCB8PSBJNDBFX1BGSU5UX0lDUjBfRU5BX1RJTUVTWU5DX01BU0s7CisKIAl3cjMyKGh3LCBJNDBFX1BGSU5UX0lDUjBfRU5BLCB2YWwpOwogCiAJLyogU1dfSVRSX0lEWCA9IDAsIGJ1dCBkb24ndCBjaGFuZ2UgSU5URU5BICovCkBAIC0yODY2LDcgKzI4NjksNyBAQAogCXFfdmVjdG9yLT50eC5sYXRlbmN5X3JhbmdlID0gSTQwRV9MT1dfTEFURU5DWTsKIAl3cjMyKGh3LCBJNDBFX1BGSU5UX0lUUjAoSTQwRV9UWF9JVFIpLCBxX3ZlY3Rvci0+dHguaXRyKTsKIAotCWk0MGVfZW5hYmxlX21pc2NfaW50X2NhdXNlcyhodyk7CisJaTQwZV9lbmFibGVfbWlzY19pbnRfY2F1c2VzKHBmKTsKIAogCS8qIEZJUlNUUV9JTkRYID0gMCwgRklSU1RRX1RZUEUgPSAwIChyeCkgKi8KIAl3cjMyKGh3LCBJNDBFX1BGSU5UX0xOS0xTVDAsIDApOwpAQCAtMjkzNyw3ICsyOTQwLDcgQEAKIC8qKgogICogaTQwZV9pcnFfZHluYW1pY19kaXNhYmxlIC0gRGlzYWJsZSBkZWZhdWx0IGludGVycnVwdCBnZW5lcmF0aW9uIHNldHRpbmdzCiAgKiBAdnNpOiBwb2ludGVyIHRvIGEgdnNpCi0gKiBAdmVjdG9yOiBlbmFibGUgYSBwYXJ0aWN1bGFyIEh3IEludGVycnVwdCB2ZWN0b3IKKyAqIEB2ZWN0b3I6IGRpc2FibGUgYSBwYXJ0aWN1bGFyIEh3IEludGVycnVwdCB2ZWN0b3IKICAqKi8KIHZvaWQgaTQwZV9pcnFfZHluYW1pY19kaXNhYmxlKHN0cnVjdCBpNDBlX3ZzaSAqdnNpLCBpbnQgdmVjdG9yKQogewpAQCAtMzQwMiwxMCArMzQwNSwxMCBAQAogCQllcnIgPSBpNDBlX3ZzaV9yZXF1ZXN0X2lycV9tc2l4KHZzaSwgYmFzZW5hbWUpOwogCWVsc2UgaWYgKHBmLT5mbGFncyAmIEk0MEVfRkxBR19NU0lfRU5BQkxFRCkKIAkJZXJyID0gcmVxdWVzdF9pcnEocGYtPnBkZXYtPmlycSwgaTQwZV9pbnRyLCAwLAotCQkJCSAgcGYtPm1pc2NfaW50X25hbWUsIHBmKTsKKwkJCQkgIHBmLT5pbnRfbmFtZSwgcGYpOwogCWVsc2UKIAkJZXJyID0gcmVxdWVzdF9pcnEocGYtPnBkZXYtPmlycSwgaTQwZV9pbnRyLCBJUlFGX1NIQVJFRCwKLQkJCQkgIHBmLT5taXNjX2ludF9uYW1lLCBwZik7CisJCQkJICBwZi0+aW50X25hbWUsIHBmKTsKIAogCWlmIChlcnIpCiAJCWRldl9pbmZvKCZwZi0+cGRldi0+ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkLCBFcnJvciAlZFxuIiwgZXJyKTsKQEAgLTM5OTksNiArNDAwMiwzNSBAQAogCiAjZW5kaWYKIC8qKgorICogaTQwZV9nZXRfaXNjc2lfdGNfbWFwIC0gUmV0dXJuIFRDIG1hcCBmb3IgaVNDU0kgQVBQCisgKiBAcGY6IHBvaW50ZXIgdG8gcGYKKyAqCisgKiBHZXQgVEMgbWFwIGZvciBJU0NTSSBQRiB0eXBlIHRoYXQgd2lsbCBpbmNsdWRlIGlTQ1NJIFRDCisgKiBhbmQgTEFOIFRDLgorICoqLworc3RhdGljIHU4IGk0MGVfZ2V0X2lzY3NpX3RjX21hcChzdHJ1Y3QgaTQwZV9wZiAqcGYpCit7CisJc3RydWN0IGk0MGVfZGNiX2FwcF9wcmlvcml0eV90YWJsZSBhcHA7CisJc3RydWN0IGk0MGVfaHcgKmh3ID0gJnBmLT5odzsKKwl1OCBlbmFibGVkX3RjID0gMTsgLyogVEMwIGlzIGFsd2F5cyBlbmFibGVkICovCisJdTggdGMsIGk7CisJLyogR2V0IHRoZSBpU0NTSSBBUFAgVExWICovCisJc3RydWN0IGk0MGVfZGNieF9jb25maWcgKmRjYmNmZyA9ICZody0+bG9jYWxfZGNieF9jb25maWc7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGNiY2ZnLT5udW1hcHBzOyBpKyspIHsKKwkJYXBwID0gZGNiY2ZnLT5hcHBbaV07CisJCWlmIChhcHAuc2VsZWN0b3IgPT0gSTQwRV9BUFBfU0VMX1RDUElQICYmCisJCSAgICBhcHAucHJvdG9jb2xpZCA9PSBJNDBFX0FQUF9QUk9UT0lEX0lTQ1NJKSB7CisJCQl0YyA9IGRjYmNmZy0+ZXRzY2ZnLnByaW9yaXR5dGFibGVbYXBwLnByaW9yaXR5XTsKKwkJCWVuYWJsZWRfdGMgfD0gKDEgPDwgdGMpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gZW5hYmxlZF90YzsKK30KKworLyoqCiAgKiBpNDBlX2RjYl9nZXRfbnVtX3RjIC0gIEdldCB0aGUgbnVtYmVyIG9mIFRDcyBmcm9tIERDQnggY29uZmlnCiAgKiBAZGNiY2ZnOiB0aGUgY29ycmVzcG9uZGluZyBEQ0J4IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlCiAgKgpAQCAtNDA2MSwxOCArNDA5MywyMyBAQAogCWlmICghKHBmLT5mbGFncyAmIEk0MEVfRkxBR19EQ0JfRU5BQkxFRCkpCiAJCXJldHVybiAxOwogCi0JLyogTUZQIG1vZGUgcmV0dXJuIGNvdW50IG9mIGVuYWJsZWQgVENzIGZvciB0aGlzIFBGICovCi0JaWYgKHBmLT5mbGFncyAmIEk0MEVfRkxBR19NRlBfRU5BQkxFRCkgewotCQllbmFibGVkX3RjID0gcGYtPmh3LmZ1bmNfY2Fwcy5lbmFibGVkX3RjbWFwOwotCQlmb3IgKGkgPSAwOyBpIDwgSTQwRV9NQVhfVFJBRkZJQ19DTEFTUzsgaSsrKSB7Ci0JCQlpZiAoZW5hYmxlZF90YyAmICgxIDw8IGkpKQotCQkJCW51bV90YysrOwotCQl9Ci0JCXJldHVybiBudW1fdGM7Ci0JfQotCiAJLyogU0ZQIG1vZGUgd2lsbCBiZSBlbmFibGVkIGZvciBhbGwgVENzIG9uIHBvcnQgKi8KLQlyZXR1cm4gaTQwZV9kY2JfZ2V0X251bV90YyhkY2JjZmcpOworCWlmICghKHBmLT5mbGFncyAmIEk0MEVfRkxBR19NRlBfRU5BQkxFRCkpCisJCXJldHVybiBpNDBlX2RjYl9nZXRfbnVtX3RjKGRjYmNmZyk7CisKKwkvKiBNRlAgbW9kZSByZXR1cm4gY291bnQgb2YgZW5hYmxlZCBUQ3MgZm9yIHRoaXMgUEYgKi8KKwlpZiAocGYtPmh3LmZ1bmNfY2Fwcy5pc2NzaSkKKwkJZW5hYmxlZF90YyA9ICBpNDBlX2dldF9pc2NzaV90Y19tYXAocGYpOworCWVsc2UKKwkJZW5hYmxlZF90YyA9IHBmLT5ody5mdW5jX2NhcHMuZW5hYmxlZF90Y21hcDsKKworCS8qIEF0IGxlYXN0IGhhdmUgVEMwICovCisJZW5hYmxlZF90YyA9IChlbmFibGVkX3RjID8gZW5hYmxlZF90YyA6IDB4MSk7CisJZm9yIChpID0gMDsgaSA8IEk0MEVfTUFYX1RSQUZGSUNfQ0xBU1M7IGkrKykgeworCQlpZiAoZW5hYmxlZF90YyAmICgxIDw8IGkpKQorCQkJbnVtX3RjKys7CisJfQorCXJldHVybiBudW1fdGM7CiB9CiAKIC8qKgpAQCAtNDExMCwxMiArNDE0NywxNSBAQAogCWlmICghKHBmLT5mbGFncyAmIEk0MEVfRkxBR19EQ0JfRU5BQkxFRCkpCiAJCXJldHVybiBpNDBlX3BmX2dldF9kZWZhdWx0X3RjKHBmKTsKIAotCS8qIE1GUCBtb2RlIHdpbGwgaGF2ZSBlbmFibGVkIFRDcyBzZXQgYnkgRlcgKi8KLQlpZiAocGYtPmZsYWdzICYgSTQwRV9GTEFHX01GUF9FTkFCTEVEKQotCQlyZXR1cm4gcGYtPmh3LmZ1bmNfY2Fwcy5lbmFibGVkX3RjbWFwOwotCiAJLyogU0ZQIG1vZGUgd2Ugd2FudCBQRiB0byBiZSBlbmFibGVkIGZvciBhbGwgVENzICovCi0JcmV0dXJuIGk0MGVfZGNiX2dldF9lbmFibGVkX3RjKCZwZi0+aHcubG9jYWxfZGNieF9jb25maWcpOworCWlmICghKHBmLT5mbGFncyAmIEk0MEVfRkxBR19NRlBfRU5BQkxFRCkpCisJCXJldHVybiBpNDBlX2RjYl9nZXRfZW5hYmxlZF90YygmcGYtPmh3LmxvY2FsX2RjYnhfY29uZmlnKTsKKworCS8qIE1QRiBlbmFibGVkIGFuZCBpU0NTSSBQRiB0eXBlICovCisJaWYgKHBmLT5ody5mdW5jX2NhcHMuaXNjc2kpCisJCXJldHVybiBpNDBlX2dldF9pc2NzaV90Y19tYXAocGYpOworCWVsc2UKKwkJcmV0dXJuIHBmLT5ody5mdW5jX2NhcHMuZW5hYmxlZF90Y21hcDsKIH0KIAogLyoqCkBAIC00NTA1LDkgKzQ1NDUsNiBAQAogCXN0cnVjdCBpNDBlX2h3ICpodyA9ICZwZi0+aHc7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAocGYtPmh3LmZ1bmNfY2Fwcy5ucGFyX2VuYWJsZSkKLQkJZ290byBvdXQ7Ci0KIAkvKiBHZXQgdGhlIGluaXRpYWwgRENCIGNvbmZpZ3VyYXRpb24gKi8KIAllcnIgPSBpNDBlX2luaXRfZGNiKGh3KTsKIAlpZiAoIWVycikgewpAQCAtNDUzMyw3ICs0NTcwLDggQEAKIAkJCQkiRENCWCBvZmZsb2FkIGlzIHN1cHBvcnRlZCBmb3IgdGhpcyBQRi5cbiIpOwogCQl9CiAJfSBlbHNlIHsKLQkJZGV2X2luZm8oJnBmLT5wZGV2LT5kZXYsICJBUSBRdWVyeWluZyBEQ0IgY29uZmlndXJhdGlvbiBmYWlsZWQ6ICVkXG4iLAorCQlkZXZfaW5mbygmcGYtPnBkZXYtPmRldiwKKwkJCSAiQVEgUXVlcnlpbmcgRENCIGNvbmZpZ3VyYXRpb24gZmFpbGVkOiBhcV9lcnIgJWRcbiIsCiAJCQkgcGYtPmh3LmFxLmFzcV9sYXN0X3N0YXR1cyk7CiAJfQogCkBAIC00NTU3LDYgKzQ1OTUsMTUgQEAKIAkJcmV0dXJuOwogCX0KIAorCS8qIFdhcm4gdXNlciBpZiBsaW5rIHNwZWVkIG9uIE5QQVIgZW5hYmxlZCBwYXJ0aXRpb24gaXMgbm90IGF0CisJICogbGVhc3QgMTBHQgorCSAqLworCWlmICh2c2ktPmJhY2stPmh3LmZ1bmNfY2Fwcy5ucGFyX2VuYWJsZSAmJgorCSAgICAodnNpLT5iYWNrLT5ody5waHkubGlua19pbmZvLmxpbmtfc3BlZWQgPT0gSTQwRV9MSU5LX1NQRUVEXzFHQiB8fAorCSAgICAgdnNpLT5iYWNrLT5ody5waHkubGlua19pbmZvLmxpbmtfc3BlZWQgPT0gSTQwRV9MSU5LX1NQRUVEXzEwME1CKSkKKwkJbmV0ZGV2X3dhcm4odnNpLT5uZXRkZXYsCisJCQkgICAgIlRoZSBwYXJ0aXRpb24gZGV0ZWN0ZWQgbGluayBzcGVlZCB0aGF0IGlzIGxlc3MgdGhhbiAxMEdicHNcbiIpOworCiAJc3dpdGNoICh2c2ktPmJhY2stPmh3LnBoeS5saW5rX2luZm8ubGlua19zcGVlZCkgewogCWNhc2UgSTQwRV9MSU5LX1NQRUVEXzQwR0I6CiAJCXN0cmxjcHkoc3BlZWQsICI0MCBHYnBzIiwgU1BFRURfU0laRSk7CkBAIC00ODM2LDcgKzQ4ODMsNyBAQAogaW50IGk0MGVfdnNpX29wZW4oc3RydWN0IGk0MGVfdnNpICp2c2kpCiB7CiAJc3RydWN0IGk0MGVfcGYgKnBmID0gdnNpLT5iYWNrOwotCWNoYXIgaW50X25hbWVbSUZOQU1TSVpdOworCWNoYXIgaW50X25hbWVbSTQwRV9JTlRfTkFNRV9TVFJfTEVOXTsKIAlpbnQgZXJyOwogCiAJLyogYWxsb2NhdGUgZGVzY3JpcHRvcnMgKi8KQEAgLTQ4NzAsNyArNDkxNyw3IEBACiAJCQlnb3RvIGVycl9zZXRfcXVldWVzOwogCiAJfSBlbHNlIGlmICh2c2ktPnR5cGUgPT0gSTQwRV9WU0lfRkRJUikgewotCQlzbnByaW50ZihpbnRfbmFtZSwgc2l6ZW9mKGludF9uYW1lKSAtIDEsICIlcy0lcy1mZGlyIiwKKwkJc25wcmludGYoaW50X25hbWUsIHNpemVvZihpbnRfbmFtZSkgLSAxLCAiJXMtJXM6ZmRpciIsCiAJCQkgZGV2X2RyaXZlcl9zdHJpbmcoJnBmLT5wZGV2LT5kZXYpLAogCQkJIGRldl9uYW1lKCZwZi0+cGRldi0+ZGV2KSk7CiAJCWVyciA9IGk0MGVfdnNpX3JlcXVlc3RfaXJxKHZzaSwgaW50X25hbWUpOwpAQCAtNTQ5NCwxNCArNTU0MSwxOCBAQAogewogCWJvb2wgbmV3X2xpbmssIG9sZF9saW5rOwogCXN0cnVjdCBpNDBlX3ZzaSAqdnNpID0gcGYtPnZzaVtwZi0+bGFuX3ZzaV07CisJdTggbmV3X2xpbmtfc3BlZWQsIG9sZF9saW5rX3NwZWVkOwogCiAJLyogc2V0IHRoaXMgdG8gZm9yY2UgdGhlIGdldF9saW5rX3N0YXR1cyBjYWxsIHRvIHJlZnJlc2ggc3RhdGUgKi8KIAlwZi0+aHcucGh5LmdldF9saW5rX2luZm8gPSB0cnVlOwogCiAJb2xkX2xpbmsgPSAocGYtPmh3LnBoeS5saW5rX2luZm9fb2xkLmxpbmtfaW5mbyAmIEk0MEVfQVFfTElOS19VUCk7CiAJbmV3X2xpbmsgPSBpNDBlX2dldF9saW5rX3N0YXR1cygmcGYtPmh3KTsKKwlvbGRfbGlua19zcGVlZCA9IHBmLT5ody5waHkubGlua19pbmZvX29sZC5saW5rX3NwZWVkOworCW5ld19saW5rX3NwZWVkID0gcGYtPmh3LnBoeS5saW5rX2luZm8ubGlua19zcGVlZDsKIAogCWlmIChuZXdfbGluayA9PSBvbGRfbGluayAmJgorCSAgICBuZXdfbGlua19zcGVlZCA9PSBvbGRfbGlua19zcGVlZCAmJgogCSAgICAodGVzdF9iaXQoX19JNDBFX0RPV04sICZ2c2ktPnN0YXRlKSB8fAogCSAgICAgbmV3X2xpbmsgPT0gbmV0aWZfY2Fycmllcl9vayh2c2ktPm5ldGRldikpKQogCQlyZXR1cm47CkBAIC02MTc1LDggKzYyMjYsOSBAQAogI2lmZGVmIENPTkZJR19JNDBFX0RDQgogCXJldCA9IGk0MGVfaW5pdF9wZl9kY2IocGYpOwogCWlmIChyZXQpIHsKLQkJZGV2X2luZm8oJnBmLT5wZGV2LT5kZXYsICJpbml0X3BmX2RjYiBmYWlsZWQ6ICVkXG4iLCByZXQpOwotCQlnb3RvIGVuZF9jb3JlX3Jlc2V0OworCQlkZXZfaW5mbygmcGYtPnBkZXYtPmRldiwgIkRDQiBpbml0IGZhaWxlZCAlZCwgZGlzYWJsZWRcbiIsIHJldCk7CisJCXBmLT5mbGFncyAmPSB+STQwRV9GTEFHX0RDQl9DQVBBQkxFOworCQkvKiBDb250aW51ZSB3aXRob3V0IERDQiBlbmFibGVkICovCiAJfQogI2VuZGlmIC8qIENPTkZJR19JNDBFX0RDQiAqLwogI2lmZGVmIEk0MEVfRkNPRQpAQCAtNjg4MSwxNyArNjkzMywxNyBAQAogCWlmIChwZi0+ZmxhZ3MgJiBJNDBFX0ZMQUdfRkRfU0JfRU5BQkxFRCkKIAkJb3RoZXJfdmVjcysrOwogCisJLyogU2NhbGUgZG93biBpZiBuZWNlc3NhcnksIGFuZCB0aGUgcmluZ3Mgd2lsbCBzaGFyZSB2ZWN0b3JzICovCisJcGYtPm51bV9sYW5fbXNpeCA9IG1pbl90KGludCwgcGYtPm51bV9sYW5fbXNpeCwKKwkJCShody0+ZnVuY19jYXBzLm51bV9tc2l4X3ZlY3RvcnMgLSBvdGhlcl92ZWNzKSk7CisJdl9idWRnZXQgPSBwZi0+bnVtX2xhbl9tc2l4ICsgb3RoZXJfdmVjczsKKwogI2lmZGVmIEk0MEVfRkNPRQogCWlmIChwZi0+ZmxhZ3MgJiBJNDBFX0ZMQUdfRkNPRV9FTkFCTEVEKSB7CiAJCXBmLT5udW1fZmNvZV9tc2l4ID0gcGYtPm51bV9mY29lX3FwczsKIAkJdl9idWRnZXQgKz0gcGYtPm51bV9mY29lX21zaXg7CiAJfQotCiAjZW5kaWYKLQkvKiBTY2FsZSBkb3duIGlmIG5lY2Vzc2FyeSwgYW5kIHRoZSByaW5ncyB3aWxsIHNoYXJlIHZlY3RvcnMgKi8KLQlwZi0+bnVtX2xhbl9tc2l4ID0gbWluX3QoaW50LCBwZi0+bnVtX2xhbl9tc2l4LAotCQkJKGh3LT5mdW5jX2NhcHMubnVtX21zaXhfdmVjdG9ycyAtIG90aGVyX3ZlY3MpKTsKLQl2X2J1ZGdldCA9IHBmLT5udW1fbGFuX21zaXggKyBvdGhlcl92ZWNzOwogCiAJcGYtPm1zaXhfZW50cmllcyA9IGtjYWxsb2Modl9idWRnZXQsIHNpemVvZihzdHJ1Y3QgbXNpeF9lbnRyeSksCiAJCQkJICAgR0ZQX0tFUk5FTCk7CkBAIC03MTEzLDE2ICs3MTY1LDE2IEBACiAJICovCiAJaWYgKCF0ZXN0X2JpdChfX0k0MEVfUkVTRVRfUkVDT1ZFUllfUEVORElORywgJnBmLT5zdGF0ZSkpIHsKIAkJZXJyID0gcmVxdWVzdF9pcnEocGYtPm1zaXhfZW50cmllc1swXS52ZWN0b3IsCi0JCQkJICBpNDBlX2ludHIsIDAsIHBmLT5taXNjX2ludF9uYW1lLCBwZik7CisJCQkJICBpNDBlX2ludHIsIDAsIHBmLT5pbnRfbmFtZSwgcGYpOwogCQlpZiAoZXJyKSB7CiAJCQlkZXZfaW5mbygmcGYtPnBkZXYtPmRldiwKIAkJCQkgInJlcXVlc3RfaXJxIGZvciAlcyBmYWlsZWQ6ICVkXG4iLAotCQkJCSBwZi0+bWlzY19pbnRfbmFtZSwgZXJyKTsKKwkJCQkgcGYtPmludF9uYW1lLCBlcnIpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAl9CiAKLQlpNDBlX2VuYWJsZV9taXNjX2ludF9jYXVzZXMoaHcpOworCWk0MGVfZW5hYmxlX21pc2NfaW50X2NhdXNlcyhwZik7CiAKIAkvKiBhc3NvY2lhdGUgbm8gcXVldWVzIHRvIHRoZSBtaXNjIHZlY3RvciAqLwogCXdyMzIoaHcsIEk0MEVfUEZJTlRfTE5LTFNUMCwgSTQwRV9RVUVVRV9FTkRfT0ZfTElTVCk7CkBAIC03MzA2LDcgKzczNTgsNyBAQAogCiAjZW5kaWYgLyogSTQwRV9GQ09FICovCiAjaWZkZWYgQ09ORklHX1BDSV9JT1YKLQlpZiAocGYtPmh3LmZ1bmNfY2Fwcy5udW1fdmZzKSB7CisJaWYgKHBmLT5ody5mdW5jX2NhcHMubnVtX3ZmcyAmJiBwZi0+aHcucGFydGl0aW9uX2lkID09IDEpIHsKIAkJcGYtPm51bV92Zl9xcHMgPSBJNDBFX0RFRkFVTFRfUVVFVUVTX1BFUl9WRjsKIAkJcGYtPmZsYWdzIHw9IEk0MEVfRkxBR19TUklPVl9FTkFCTEVEOwogCQlwZi0+bnVtX3JlcV92ZnMgPSBtaW5fdChpbnQsCkBAIC03NzY2LDcgKzc4MTgsOCBAQAogCQllbmFibGVkX3RjID0gaTQwZV9wZl9nZXRfdGNfbWFwKHBmKTsKIAogCQkvKiBNRlAgbW9kZSBzZXR1cCBxdWV1ZSBtYXAgYW5kIHVwZGF0ZSBWU0kgKi8KLQkJaWYgKHBmLT5mbGFncyAmIEk0MEVfRkxBR19NRlBfRU5BQkxFRCkgeworCQlpZiAoKHBmLT5mbGFncyAmIEk0MEVfRkxBR19NRlBfRU5BQkxFRCkgJiYKKwkJICAgICEocGYtPmh3LmZ1bmNfY2Fwcy5pc2NzaSkpIHsgLyogTklDIHR5cGUgUEYgKi8KIAkJCW1lbXNldCgmY3R4dCwgMCwgc2l6ZW9mKGN0eHQpKTsKIAkJCWN0eHQuc2VpZCA9IHBmLT5tYWluX3ZzaV9zZWlkOwogCQkJY3R4dC5wZl9udW0gPSBwZi0+aHcucGZfaWQ7CkBAIC03Nzg3LDYgKzc4NDAsOCBAQAogCQkJLyogRGVmYXVsdC9NYWluIFZTSSBpcyBvbmx5IGVuYWJsZWQgZm9yIFRDMAogCQkJICogcmVjb25maWd1cmUgaXQgdG8gZW5hYmxlIGFsbCBUQ3MgdGhhdCBhcmUKIAkJCSAqIGF2YWlsYWJsZSBvbiB0aGUgcG9ydCBpbiBTRlAgbW9kZS4KKwkJCSAqIEZvciBNRlAgY2FzZSB0aGUgaVNDU0kgUEYgd291bGQgdXNlIHRoaXMKKwkJCSAqIGZsb3cgdG8gZW5hYmxlIExBTitpU0NTSSBUQy4KIAkJCSAqLwogCQkJcmV0ID0gaTQwZV92c2lfY29uZmlnX3RjKHZzaSwgZW5hYmxlZF90Yyk7CiAJCQlpZiAocmV0KSB7CkBAIC05MTY0LDcgKzkyMTksNyBAQAogCWh3LT5hcS5hc3FfYnVmX3NpemUgPSBJNDBFX01BWF9BUV9CVUZfU0laRTsKIAlwZi0+YWRtaW5xX3dvcmtfbGltaXQgPSBJNDBFX0FRX1dPUktfTElNSVQ7CiAKLQlzbnByaW50ZihwZi0+bWlzY19pbnRfbmFtZSwgc2l6ZW9mKHBmLT5taXNjX2ludF9uYW1lKSAtIDEsCisJc25wcmludGYocGYtPmludF9uYW1lLCBzaXplb2YocGYtPmludF9uYW1lKSAtIDEsCiAJCSAiJXMtJXM6bWlzYyIsCiAJCSBkZXZfZHJpdmVyX3N0cmluZygmcGYtPnBkZXYtPmRldiksIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKIApAQCAtOTIyNyw2ICs5MjgyLDE2IEBACiAJCWdvdG8gZXJyX2NvbmZpZ3VyZV9sYW5faG1jOwogCX0KIAorCS8qIERpc2FibGUgTExEUCBmb3IgTklDcyB0aGF0IGhhdmUgZmlybXdhcmUgdmVyc2lvbnMgbG93ZXIgdGhhbiB2NC4zLgorCSAqIElnbm9yZSBlcnJvciByZXR1cm4gY29kZXMgYmVjYXVzZSBpZiBpdCB3YXMgYWxyZWFkeSBkaXNhYmxlZCB2aWEKKwkgKiBoYXJkd2FyZSBzZXR0aW5ncyB0aGlzIHdpbGwgZmFpbAorCSAqLworCWlmICgoKHBmLT5ody5hcS5md19tYWpfdmVyID09IDQpICYmIChwZi0+aHcuYXEuZndfbWluX3ZlciA8IDMpKSB8fAorCSAgICAocGYtPmh3LmFxLmZ3X21hal92ZXIgPCA0KSkgeworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiU3RvcHBpbmcgZmlybXdhcmUgTExEUCBhZ2VudC5cbiIpOworCQlpNDBlX2FxX3N0b3BfbGxkcChodywgdHJ1ZSwgTlVMTCk7CisJfQorCiAJaTQwZV9nZXRfbWFjX2FkZHIoaHcsIGh3LT5tYWMuYWRkcik7CiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGh3LT5tYWMuYWRkcikpIHsKIAkJZGV2X2luZm8oJnBkZXYtPmRldiwgImludmFsaWQgTUFDIGFkZHJlc3MgJXBNXG4iLCBody0+bWFjLmFkZHIpOwpAQCAtOTI1Niw3ICs5MzIxLDcgQEAKICNpZmRlZiBDT05GSUdfSTQwRV9EQ0IKIAllcnIgPSBpNDBlX2luaXRfcGZfZGNiKHBmKTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9pbmZvKCZwZGV2LT5kZXYsICJpbml0X3BmX2RjYiBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiRENCIGluaXQgZmFpbGVkICVkLCBkaXNhYmxlZFxuIiwgZXJyKTsKIAkJcGYtPmZsYWdzICY9IH5JNDBFX0ZMQUdfRENCX0NBUEFCTEU7CiAJCS8qIENvbnRpbnVlIHdpdGhvdXQgRENCIGVuYWJsZWQgKi8KIAl9CkBAIC05NjcxLDYgKzk3MzYsOCBAQAogCiAJc2V0X2JpdChfX0k0MEVfU1VTUEVOREVELCAmcGYtPnN0YXRlKTsKIAlzZXRfYml0KF9fSTQwRV9ET1dOLCAmcGYtPnN0YXRlKTsKKwlkZWxfdGltZXJfc3luYygmcGYtPnNlcnZpY2VfdGltZXIpOworCWNhbmNlbF93b3JrX3N5bmMoJnBmLT5zZXJ2aWNlX3Rhc2spOwogCXJ0bmxfbG9jaygpOwogCWk0MGVfcHJlcF9mb3JfcmVzZXQocGYpOwogCXJ0bmxfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfcHJvdG90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfcHJvdG90eXBlLmgKaW5kZXggMmZiNDMwNi4uNjhlODUyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3Byb3RvdHlwZS5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9wcm90b3R5cGUuaApAQCAtNzEsNiArNzEsOSBAQAogaTQwZV9zdGF0dXMgaTQwZV9hcV9kZWJ1Z193cml0ZV9yZWdpc3RlcihzdHJ1Y3QgaTQwZV9odyAqaHcsCiAJCQkJCXUzMiByZWdfYWRkciwgdTY0IHJlZ192YWwsCiAJCQkJCXN0cnVjdCBpNDBlX2FzcV9jbWRfZGV0YWlscyAqY21kX2RldGFpbHMpOworaTQwZV9zdGF0dXMgaTQwZV9hcV9kZWJ1Z19yZWFkX3JlZ2lzdGVyKHN0cnVjdCBpNDBlX2h3ICpodywKKwkJCQl1MzIgIHJlZ19hZGRyLCB1NjQgKnJlZ192YWwsCisJCQkJc3RydWN0IGk0MGVfYXNxX2NtZF9kZXRhaWxzICpjbWRfZGV0YWlscyk7CiBpNDBlX3N0YXR1cyBpNDBlX2FxX3NldF9waHlfZGVidWcoc3RydWN0IGk0MGVfaHcgKmh3LCB1OCBjbWRfZmxhZ3MsCiAJCQkJc3RydWN0IGk0MGVfYXNxX2NtZF9kZXRhaWxzICpjbWRfZGV0YWlscyk7CiBpNDBlX3N0YXR1cyBpNDBlX2FxX3NldF9kZWZhdWx0X3ZzaShzdHJ1Y3QgaTQwZV9odyAqaHcsIHUxNiB2c2lfaWQsCkBAIC0yNDUsNiArMjQ4LDggQEAKIGJvb2wgaTQwZV9nZXRfbGlua19zdGF0dXMoc3RydWN0IGk0MGVfaHcgKmh3KTsKIGk0MGVfc3RhdHVzIGk0MGVfZ2V0X21hY19hZGRyKHN0cnVjdCBpNDBlX2h3ICpodywgdTggKm1hY19hZGRyKTsKIGk0MGVfc3RhdHVzIGk0MGVfZ2V0X3BvcnRfbWFjX2FkZHIoc3RydWN0IGk0MGVfaHcgKmh3LCB1OCAqbWFjX2FkZHIpOworaTQwZV9zdGF0dXMgaTQwZV9yZWFkX3BiYV9zdHJpbmcoc3RydWN0IGk0MGVfaHcgKmh3LCB1OCAqcGJhX251bSwKKwkJCQkgdTMyIHBiYV9udW1fc2l6ZSk7CiBpNDBlX3N0YXR1cyBpNDBlX3ZhbGlkYXRlX21hY19hZGRyKHU4ICptYWNfYWRkcik7CiB2b2lkIGk0MGVfcHJlX3R4X3F1ZXVlX2NmZyhzdHJ1Y3QgaTQwZV9odyAqaHcsIHUzMiBxdWV1ZSwgYm9vbCBlbmFibGUpOwogI2lmZGVmIEk0MEVfRkNPRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3B0cC5jCmluZGV4IDZkMWVjOTIuLmZhYmNmYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV9wdHAuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfcHRwLmMKQEAgLTI0Nyw3ICsyNDcsMTIgQEAKIAl1MzIgcHJ0dHN5bl9zdGF0OwogCWludCBuOwogCi0JaWYgKCEocGYtPmZsYWdzICYgSTQwRV9GTEFHX1BUUCkpCisJLyogU2luY2Ugd2UgY2Fubm90IHR1cm4gb2ZmIHRoZSBSeCB0aW1lc3RhbXAgbG9naWMgaWYgdGhlIGRldmljZSBpcworCSAqIGNvbmZpZ3VyZWQgZm9yIFR4IHRpbWVzdGFtcGluZywgd2UgY2hlY2sgaWYgUnggdGltZXN0YW1waW5nIGlzCisJICogY29uZmlndXJlZC4gV2UgZG9uJ3Qgd2FudCB0byBzcHVyaW91c2x5IHdhcm4gYWJvdXQgUnggdGltZXN0YW1wCisJICogaGFuZ3MgaWYgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGUgdGltZXN0YW1wcy4KKwkgKi8KKwlpZiAoIShwZi0+ZmxhZ3MgJiBJNDBFX0ZMQUdfUFRQKSB8fCAhcGYtPnB0cF9yeCkKIAkJcmV0dXJuOwogCiAJcHJ0dHN5bl9zdGF0ID0gcmQzMihodywgSTQwRV9QUlRUU1lOX1NUQVRfMSk7CkBAIC0zMDUsNiArMzEwLDEzIEBACiAJdTMyIGhpLCBsbzsKIAl1NjQgbnM7CiAKKwlpZiAoIShwZi0+ZmxhZ3MgJiBJNDBFX0ZMQUdfUFRQKSB8fCAhcGYtPnB0cF90eCkKKwkJcmV0dXJuOworCisJLyogZG9uJ3QgYXR0ZW1wdCB0byB0aW1lc3RhbXAgaWYgd2UgZG9uJ3QgaGF2ZSBhbiBza2IgKi8KKwlpZiAoIXBmLT5wdHBfdHhfc2tiKQorCQlyZXR1cm47CisKIAlsbyA9IHJkMzIoaHcsIEk0MEVfUFJUVFNZTl9UWFRJTUVfTCk7CiAJaGkgPSByZDMyKGh3LCBJNDBFX1BSVFRTWU5fVFhUSU1FX0gpOwogCkBAIC0zMzgsNyArMzUwLDcgQEAKIAkvKiBTaW5jZSB3ZSBjYW5ub3QgdHVybiBvZmYgdGhlIFJ4IHRpbWVzdGFtcCBsb2dpYyBpZiB0aGUgZGV2aWNlIGlzCiAJICogZG9pbmcgVHggdGltZXN0YW1waW5nLCBjaGVjayBpZiBSeCB0aW1lc3RhbXBpbmcgaXMgY29uZmlndXJlZC4KIAkgKi8KLQlpZiAoIXBmLT5wdHBfcngpCisJaWYgKCEocGYtPmZsYWdzICYgSTQwRV9GTEFHX1BUUCkgfHwgIXBmLT5wdHBfcngpCiAJCXJldHVybjsKIAogCWh3ID0gJnBmLT5odzsKQEAgLTQ2Nyw3ICs0NzksMTIgQEAKIAlzd2l0Y2ggKGNvbmZpZy0+cnhfZmlsdGVyKSB7CiAJY2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORToKIAkJcGYtPnB0cF9yeCA9IGZhbHNlOwotCQl0c3ludHlwZSA9IDA7CisJCS8qIFdlIHNldCB0aGUgdHlwZSB0byBWMSwgYnV0IGRvIG5vdCBlbmFibGUgVURQIHBhY2tldAorCQkgKiByZWNvZ25pdGlvbi4gSW4gdGhpcyB3YXksIHdlIHNob3VsZCBiZSBhcyBjbG9zZSB0bworCQkgKiBkaXNhYmxpbmcgUFRQIFJ4IHRpbWVzdGFtcHMgYXMgcG9zc2libGUgc2luY2UgVjEgcGFja2V0cworCQkgKiBhcmUgYWx3YXlzIFVEUCwgc2luY2UgTDIgcGFja2V0cyBhcmUgYSBWMiBmZWF0dXJlLgorCQkgKi8KKwkJdHN5bnR5cGUgPSBJNDBFX1BSVFRTWU5fQ1RMMV9UU1lOVFlQRV9WMTsKIAkJYnJlYWs7CiAJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkM6CiAJY2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0RFTEFZX1JFUToKQEAgLTUyMSwxNyArNTM4LDE4IEBACiAJCXJlZ3ZhbCAmPSB+STQwRV9QRklOVF9JQ1IwX0VOQV9USU1FU1lOQ19NQVNLOwogCXdyMzIoaHcsIEk0MEVfUEZJTlRfSUNSMF9FTkEsIHJlZ3ZhbCk7CiAKLQkvKiBUaGVyZSBpcyBubyBzaW1wbGUgb24vb2ZmIHN3aXRjaCBmb3IgUnguIFRvICJkaXNhYmxlIiBSeCBzdXBwb3J0LAotCSAqIGlnbm9yZSBhbnkgcmVjZWl2ZWQgdGltZXN0YW1wcywgcmF0aGVyIHRoYW4gdHVybiBvZmYgdGhlIGNsb2NrLgorCS8qIEFsdGhvdWdoIHRoZXJlIGlzIG5vIHNpbXBsZSBvbi9vZmYgc3dpdGNoIGZvciBSeCwgd2UgImRpc2FibGUiIFJ4CisJICogdGltZXN0YW1wcyBieSBzZXR0aW5nIHRvIFYxIG9ubHkgbW9kZSBhbmQgY2xlYXIgdGhlIFVEUAorCSAqIHJlY29nbml0aW9uLiBUaGlzIG91Z2h0IHRvIGRpc2FibGUgYWxsIFBUUCBSeCB0aW1lc3RhbXBzIGFzIFYxCisJICogcGFja2V0cyBhcmUgYWx3YXlzIG92ZXIgVURQLiBOb3RlIHRoYXQgc29mdHdhcmUgaXMgY29uZmlndXJlZCB0bworCSAqIGlnbm9yZSBSeCB0aW1lc3RhbXBzIHZpYSB0aGUgcGYtPnB0cF9yeCBmbGFnLgogCSAqLwotCWlmIChwZi0+cHRwX3J4KSB7Ci0JCXJlZ3ZhbCA9IHJkMzIoaHcsIEk0MEVfUFJUVFNZTl9DVEwxKTsKLQkJLyogY2xlYXIgZXZlcnl0aGluZyBidXQgdGhlIGVuYWJsZSBiaXQgKi8KLQkJcmVndmFsICY9IEk0MEVfUFJUVFNZTl9DVEwxX1RTWU5FTkFfTUFTSzsKLQkJLyogbm93IGVuYWJsZSBiaXRzIGZvciBkZXNpcmVkIFJ4IHRpbWVzdGFtcHMgKi8KLQkJcmVndmFsIHw9IHRzeW50eXBlOwotCQl3cjMyKGh3LCBJNDBFX1BSVFRTWU5fQ1RMMSwgcmVndmFsKTsKLQl9CisJcmVndmFsID0gcmQzMihodywgSTQwRV9QUlRUU1lOX0NUTDEpOworCS8qIGNsZWFyIGV2ZXJ5dGhpbmcgYnV0IHRoZSBlbmFibGUgYml0ICovCisJcmVndmFsICY9IEk0MEVfUFJUVFNZTl9DVEwxX1RTWU5FTkFfTUFTSzsKKwkvKiBub3cgZW5hYmxlIGJpdHMgZm9yIGRlc2lyZWQgUnggdGltZXN0YW1wcyAqLworCXJlZ3ZhbCB8PSB0c3ludHlwZTsKKwl3cjMyKGh3LCBJNDBFX1BSVFRTWU5fQ1RMMSwgcmVndmFsKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eHJ4LmMKaW5kZXggY2VjYjM0MC4uMjIwNmQyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R4cnguYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHhyeC5jCkBAIC04MzYsOCArODM2LDggQEAKIHsKIAl1MzIgdmFsID0gSTQwRV9QRklOVF9EWU5fQ1RMTl9JTlRFTkFfTUFTSyB8CiAJCSAgSTQwRV9QRklOVF9EWU5fQ1RMTl9TV0lOVF9UUklHX01BU0sgfAotCQkgIEk0MEVfUEZJTlRfRFlOX0NUTE5fU1dfSVRSX0lORFhfRU5BX01BU0sKLQkJICAvKiBhbGxvdyAwMCB0byBiZSB3cml0dGVuIHRvIHRoZSBpbmRleCAqLzsKKwkJICBJNDBFX1BGSU5UX0RZTl9DVExOX1NXX0lUUl9JTkRYX0VOQV9NQVNLOworCQkgIC8qIGFsbG93IDAwIHRvIGJlIHdyaXR0ZW4gdG8gdGhlIGluZGV4ICovCiAKIAl3cjMyKCZ2c2ktPmJhY2stPmh3LAogCSAgICAgSTQwRV9QRklOVF9EWU5fQ1RMTihxX3ZlY3Rvci0+dl9pZHggKyB2c2ktPmJhc2VfdmVjdG9yIC0gMSksCkBAIC0xMDk4LDYgKzEwOTgsOCBAQAogCWlmICghcnhfcmluZy0+cnhfYmkpCiAJCWdvdG8gZXJyOwogCisJdTY0X3N0YXRzX2luaXQoJnJ4X3JpbmctPnN5bmNwKTsKKwogCS8qIFJvdW5kIHVwIHRvIG5lYXJlc3QgNEsgKi8KIAlyeF9yaW5nLT5zaXplID0gcmluZ19pc18xNmJ5dGVfZGVzY19lbmFibGVkKHJ4X3JpbmcpCiAJCT8gcnhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gaTQwZV8xNmJ5dGVfcnhfZGVzYykKQEAgLTE4MTUsOCArMTgxNyw4IEBACiAJdTMyICB0eF9mbGFncyA9IDA7CiAKIAkvKiBpZiB3ZSBoYXZlIGEgSFcgVkxBTiB0YWcgYmVpbmcgYWRkZWQsIGRlZmF1bHQgdG8gdGhlIEhXIG9uZSAqLwotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJdHhfZmxhZ3MgfD0gdmxhbl90eF90YWdfZ2V0KHNrYikgPDwgSTQwRV9UWF9GTEFHU19WTEFOX1NISUZUOworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CisJCXR4X2ZsYWdzIHw9IHNrYl92bGFuX3RhZ19nZXQoc2tiKSA8PCBJNDBFX1RYX0ZMQUdTX1ZMQU5fU0hJRlQ7CiAJCXR4X2ZsYWdzIHw9IEk0MEVfVFhfRkxBR1NfSFdfVkxBTjsKIAkvKiBlbHNlIGlmIGl0IGlzIGEgU1cgVkxBTiwgY2hlY2sgdGhlIG5leHQgcHJvdG9jb2wgYW5kIHN0b3JlIHRoZSB0YWcgKi8KIAl9IGVsc2UgaWYgKHByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSkgewpAQCAtMTkzOSw2ICsxOTQxLDkgQEAKIAkgKiB3ZSBhcmUgbm90IGFscmVhZHkgdHJhbnNtaXR0aW5nIGEgcGFja2V0IHRvIGJlIHRpbWVzdGFtcGVkCiAJICovCiAJcGYgPSBpNDBlX25ldGRldl90b19wZih0eF9yaW5nLT5uZXRkZXYpOworCWlmICghKHBmLT5mbGFncyAmIEk0MEVfRkxBR19QVFApKQorCQlyZXR1cm4gMDsKKwogCWlmIChwZi0+cHRwX3R4ICYmCiAJICAgICF0ZXN0X2FuZF9zZXRfYml0X2xvY2soX19JNDBFX1BUUF9UWF9JTl9QUk9HUkVTUywgJnBmLT5zdGF0ZSkpIHsKIAkJc2tiX3NoaW5mbyhza2IpLT50eF9mbGFncyB8PSBTS0JUWF9JTl9QUk9HUkVTUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eXBlLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdHlwZS5oCmluZGV4IGMxZjJlYjkuLmU5OTAxZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV90eXBlLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZS9pNDBlX3R5cGUuaApAQCAtMjExLDYgKzIxMSw3IEBACiAJYm9vbCBldmJfODAyXzFfcWJoOyAvKiBCcmlkZ2UgUG9ydCBFeHRlbnNpb24gKi8KIAlib29sIGRjYjsKIAlib29sIGZjb2U7CisJYm9vbCBpc2NzaTsgLyogSW5kaWNhdGVzIGlTQ1NJIGVuYWJsZWQgKi8KIAlib29sIG1mcF9tb2RlXzE7CiAJYm9vbCBtZ210X2NlbTsKIAlib29sIGllZWVfMTU4ODsKQEAgLTQzMSw3ICs0MzIsNyBAQAogCXU4IF9faW9tZW0gKmh3X2FkZHI7CiAJdm9pZCAqYmFjazsKIAotCS8qIGZ1bmN0aW9uIHBvaW50ZXIgc3RydWN0cyAqLworCS8qIHN1YnN5c3RlbSBzdHJ1Y3RzICovCiAJc3RydWN0IGk0MGVfcGh5X2luZm8gcGh5OwogCXN0cnVjdCBpNDBlX21hY19pbmZvIG1hYzsKIAlzdHJ1Y3QgaTQwZV9idXNfaW5mbyBidXM7CkBAIC00NTgsNiArNDU5LDExIEBACiAJdTggIHBmX2lkOwogCXUxNiBtYWluX3ZzaV9zZWlkOwogCisJLyogZm9yIG11bHRpLWZ1bmN0aW9uIE1BQ3MgKi8KKwl1MTYgcGFydGl0aW9uX2lkOworCXUxNiBudW1fcGFydGl0aW9uczsKKwl1MTYgbnVtX3BvcnRzOworCiAJLyogQ2xvc2VzdCBudW1hIG5vZGUgdG8gdGhlIGRldmljZSAqLwogCXUxNiBudW1hX25vZGU7CiAKQEAgLTExMzUsNiArMTE0MSw4IEBACiAvKiBDaGVja3N1bSBhbmQgU2hhZG93IFJBTSBwb2ludGVycyAqLwogI2RlZmluZSBJNDBFX1NSX05WTV9DT05UUk9MX1dPUkQJCTB4MDAKICNkZWZpbmUgSTQwRV9TUl9FTVBfTU9EVUxFX1BUUgkJCTB4MEYKKyNkZWZpbmUgSTQwRV9TUl9QQkFfRkxBR1MJCQkweDE1CisjZGVmaW5lIEk0MEVfU1JfUEJBX0JMT0NLX1BUUgkJCTB4MTYKICNkZWZpbmUgSTQwRV9TUl9OVk1fSU1BR0VfVkVSU0lPTgkJMHgxOAogI2RlZmluZSBJNDBFX1NSX05WTV9XQUtFX09OX0xBTgkJCTB4MTkKICNkZWZpbmUgSTQwRV9TUl9BTFRFUk5BVEVfU0FOX01BQ19BRERSRVNTX1BUUgkweDI3CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBlL2k0MGVfdmlydGNobmxfcGYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jCmluZGV4IDViYWU4OTUuLjQwZjA0MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGUvaTQwZV92aXJ0Y2hubF9wZi5jCkBAIC02NDcsNiArNjQ3LDkgQEAKIAlpbnQgaTsKIAl1MzIgcmVnOwogCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoX19JNDBFX1ZGX0RJU0FCTEUsICZwZi0+c3RhdGUpKQorCQlyZXR1cm47CisKIAkvKiB3YXJuIHRoZSBWRiAqLwogCWNsZWFyX2JpdChJNDBFX1ZGX1NUQVRfQUNUSVZFLCAmdmYtPnZmX3N0YXRlcyk7CiAKQEAgLTY2OCwxMyArNjcxLDEzIEBACiAJLyogcG9sbCBWUEdFTl9WRlJTVEFUIHJlZyB0byBtYWtlIHN1cmUKIAkgKiB0aGF0IHJlc2V0IGlzIGNvbXBsZXRlCiAJICovCi0JZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKSB7Ci0JCS8qIHZmIHJlc2V0IHJlcXVpcmVzIGRyaXZlciB0byBmaXJzdCByZXNldCB0aGUKLQkJICogdmYgYW5kIHRoZW4gcG9sbCB0aGUgc3RhdHVzIHJlZ2lzdGVyIHRvIG1ha2Ugc3VyZQotCQkgKiB0aGF0IHRoZSByZXF1ZXN0ZWQgb3Agd2FzIGNvbXBsZXRlZAotCQkgKiBzdWNjZXNzZnVsbHkKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkvKiBWRiByZXNldCByZXF1aXJlcyBkcml2ZXIgdG8gZmlyc3QgcmVzZXQgdGhlIFZGIGFuZCB0aGVuCisJCSAqIHBvbGwgdGhlIHN0YXR1cyByZWdpc3RlciB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVzZXQKKwkJICogY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gRHVlIHRvIGludGVybmFsIEhXIEZJRk8gZmx1c2hlcywKKwkJICogd2UgbXVzdCB3YWl0IDEwbXMgYmVmb3JlIHRoZSByZWdpc3RlciB3aWxsIGJlIHZhbGlkLgogCQkgKi8KLQkJdXNsZWVwX3JhbmdlKDEwLCAyMCk7CisJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMjAwMDApOwogCQlyZWcgPSByZDMyKGh3LCBJNDBFX1ZQR0VOX1ZGUlNUQVQodmYtPnZmX2lkKSk7CiAJCWlmIChyZWcgJiBJNDBFX1ZQR0VOX1ZGUlNUQVRfVkZSRF9NQVNLKSB7CiAJCQlyc2QgPSB0cnVlOwpAQCAtNzA2LDYgKzcwOSw3IEBACiAJLyogdGVsbCB0aGUgVkYgdGhlIHJlc2V0IGlzIGRvbmUgKi8KIAl3cjMyKGh3LCBJNDBFX1ZGR0VOX1JTVEFUMSh2Zi0+dmZfaWQpLCBJNDBFX1ZGUl9WRkFDVElWRSk7CiAJaTQwZV9mbHVzaChodyk7CisJY2xlYXJfYml0KF9fSTQwRV9WRl9ESVNBQkxFLCAmcGYtPnN0YXRlKTsKIH0KIAogLyoqCkBAIC03OTAsMTEgKzc5NCwxOCBAQAogCiAJaWYgKCFwZi0+dmYpCiAJCXJldHVybjsKKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0k0MEVfVkZfRElTQUJMRSwgJnBmLT5zdGF0ZSkpCisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKIAotCS8qIERpc2FibGUgaW50ZXJydXB0IDAgc28gd2UgZG9uJ3QgdHJ5IHRvIGhhbmRsZSB0aGUgVkZMUi4gKi8KLQlpNDBlX2lycV9keW5hbWljX2Rpc2FibGVfaWNyMChwZik7CisJLyogRGlzYWJsZSBJT1YgYmVmb3JlIGZyZWVpbmcgcmVzb3VyY2VzLiBUaGlzIGxldHMgYW55IFZGIGRyaXZlcnMKKwkgKiBydW5uaW5nIGluIHRoZSBob3N0IGdldCB0aGVtc2VsdmVzIGNsZWFuZWQgdXAgYmVmb3JlIHdlIHlhbmsKKwkgKiB0aGUgY2FycGV0IG91dCBmcm9tIHVuZGVybmVhdGggdGhlaXIgZmVldC4KKwkgKi8KKwlpZiAoIXBjaV92ZnNfYXNzaWduZWQocGYtPnBkZXYpKQorCQlwY2lfZGlzYWJsZV9zcmlvdihwZi0+cGRldik7CiAKLQltZGVsYXkoMTApOyAvKiBsZXQgYW55IG1lc3NhZ2VzIGluIHRyYW5zaXQgZ2V0IGZpbmlzaGVkIHVwICovCisJbXNsZWVwKDIwKTsgLyogbGV0IGFueSBtZXNzYWdlcyBpbiB0cmFuc2l0IGdldCBmaW5pc2hlZCB1cCAqLworCiAJLyogZnJlZSB1cCB2ZiByZXNvdXJjZXMgKi8KIAl0bXAgPSBwZi0+bnVtX2FsbG9jX3ZmczsKIAlwZi0+bnVtX2FsbG9jX3ZmcyA9IDA7CkBAIC04MTMsNyArODI0LDYgQEAKIAkgKiBiZWZvcmUgdGhpcyBmdW5jdGlvbiBldmVyIGdldHMgY2FsbGVkLgogCSAqLwogCWlmICghcGNpX3Zmc19hc3NpZ25lZChwZi0+cGRldikpIHsKLQkJcGNpX2Rpc2FibGVfc3Jpb3YocGYtPnBkZXYpOwogCQkvKiBBY2tub3dsZWRnZSBWRkxSIGZvciBhbGwgVkZTLiBXaXRob3V0IHRoaXMsIFZGcyB3aWxsIGZhaWwgdG8KIAkJICogd29yayBjb3JyZWN0bHkgd2hlbiBTUi1JT1YgZ2V0cyByZS1lbmFibGVkLgogCQkgKi8KQEAgLTgyNyw5ICs4MzcsNyBAQAogCQlkZXZfd2FybigmcGYtPnBkZXYtPmRldiwKIAkJCSAidW5hYmxlIHRvIGRpc2FibGUgU1ItSU9WIGJlY2F1c2UgVkZzIGFyZSBhc3NpZ25lZC5cbiIpOwogCX0KLQotCS8qIFJlLWVuYWJsZSBpbnRlcnJ1cHQgMC4gKi8KLQlpNDBlX2lycV9keW5hbWljX2VuYWJsZV9pY3IwKHBmKTsKKwljbGVhcl9iaXQoX19JNDBFX1ZGX0RJU0FCTEUsICZwZi0+c3RhdGUpOwogfQogCiAjaWZkZWYgQ09ORklHX1BDSV9JT1YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGV2Zi9pNDBlX2FkbWlucS5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZXZmL2k0MGVfYWRtaW5xLmgKaW5kZXggNmMzMWJmMi4uNjBmMDRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZXZmL2k0MGVfYWRtaW5xLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZXZmL2k0MGVfYWRtaW5xLmgKQEAgLTE0OCw3ICsxNDgsNyBAQAogCiAvKiBnZW5lcmFsIGluZm9ybWF0aW9uICovCiAjZGVmaW5lIEk0MEVfQVFfTEFSR0VfQlVGCTUxMgotI2RlZmluZSBJNDBFX0FTUV9DTURfVElNRU9VVAkxMDAgIC8qIG1zZWNzICovCisjZGVmaW5lIEk0MEVfQVNRX0NNRF9USU1FT1VUCTI1MCAgLyogbXNlY3MgKi8KIAogdm9pZCBpNDBldmZfZmlsbF9kZWZhdWx0X2RpcmVjdF9jbWRfZGVzYyhzdHJ1Y3QgaTQwZV9hcV9kZXNjICpkZXNjLAogCQkJCSAgICAgICB1MTYgb3Bjb2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGV2Zi9pNDBlX2FkbWlucV9jbWQuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGV2Zi9pNDBlX2FkbWlucV9jbWQuaAppbmRleCBmZjFiMTYzLi5lNzE1YmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBldmYvaTQwZV9hZG1pbnFfY21kLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZXZmL2k0MGVfYWRtaW5xX2NtZC5oCkBAIC0yNjgsNiArMjY4LDggQEAKIAkvKiBPRU0gY29tbWFuZHMgKi8KIAlpNDBlX2FxY19vcGNfb2VtX3BhcmFtZXRlcl9jaGFuZ2UJPSAweEZFMDAsCiAJaTQwZV9hcWNfb3BjX29lbV9kZXZpY2Vfc3RhdHVzX2NoYW5nZQk9IDB4RkUwMSwKKwlpNDBlX2FxY19vcGNfb2VtX29jc2RfaW5pdGlhbGl6ZQk9IDB4RkUwMiwKKwlpNDBlX2FxY19vcGNfb2VtX29jYmJfaW5pdGlhbGl6ZQk9IDB4RkUwMywKIAogCS8qIGRlYnVnIGNvbW1hbmRzICovCiAJaTQwZV9hcWNfb3BjX2RlYnVnX2dldF9kZXZpY2VpZAkJPSAweEZGMDAsCkBAIC0yNzYsNyArMjc4LDYgQEAKIAlpNDBlX2FxY19vcGNfZGVidWdfd3JpdGVfcmVnCQk9IDB4RkYwNCwKIAlpNDBlX2FxY19vcGNfZGVidWdfbW9kaWZ5X3JlZwkJPSAweEZGMDcsCiAJaTQwZV9hcWNfb3BjX2RlYnVnX2R1bXBfaW50ZXJuYWxzCT0gMHhGRjA4LAotCWk0MGVfYXFjX29wY19kZWJ1Z19tb2RpZnlfaW50ZXJuYWxzCT0gMHhGRjA5LAogfTsKIAogLyogY29tbWFuZCBzdHJ1Y3R1cmVzIGFuZCBpbmRpcmVjdCBkYXRhIHN0cnVjdHVyZXMgKi8KQEAgLTQxMCw2ICs0MTEsNyBAQAogI2RlZmluZSBJNDBFX0FRX0NBUF9JRF9WU0kJCTB4MDAxNwogI2RlZmluZSBJNDBFX0FRX0NBUF9JRF9EQ0IJCTB4MDAxOAogI2RlZmluZSBJNDBFX0FRX0NBUF9JRF9GQ09FCQkweDAwMjEKKyNkZWZpbmUgSTQwRV9BUV9DQVBfSURfSVNDU0kJCTB4MDAyMgogI2RlZmluZSBJNDBFX0FRX0NBUF9JRF9SU1MJCTB4MDA0MAogI2RlZmluZSBJNDBFX0FRX0NBUF9JRF9SWFEJCTB4MDA0MQogI2RlZmluZSBJNDBFX0FRX0NBUF9JRF9UWFEJCTB4MDA0MgpAQCAtNDU0LDggKzQ1NiwxMSBAQAogCV9fbGUzMglwZnBtX3Byb3h5ZmM7CiAJX19sZTMyCWlwX2FkZHI7CiAJdTgJbWFjX2FkZHJbNl07CisJdTgJcmVzZXJ2ZWRbMl07CiB9OwogCitJNDBFX0NIRUNLX1NUUlVDVF9MRU4oMHgxNCwgaTQwZV9hcWNfYXJwX3Byb3h5X2RhdGEpOworCiAvKiBTZXQgTlMgUHJveHkgVGFibGUgRW50cnkgQ29tbWFuZCAoaW5kaXJlY3QgMHgwMTA1KSAqLwogc3RydWN0IGk0MGVfYXFjX25zX3Byb3h5X2RhdGEgewogCV9fbGUxNgl0YWJsZV9pZHhfbWFjX2FkZHJfMDsKQEAgLTQ4MSw2ICs0ODYsOCBAQAogCXU4CWlwdjZfYWRkcl8xWzE2XTsKIH07CiAKK0k0MEVfQ0hFQ0tfU1RSVUNUX0xFTigweDNjLCBpNDBlX2FxY19uc19wcm94eV9kYXRhKTsKKwogLyogTWFuYWdlIExBQSBDb21tYW5kICgweDAxMDYpIC0gb2Jzb2xldGUgKi8KIHN0cnVjdCBpNDBlX2FxY19tbmdfbGFhIHsKIAlfX2xlMTYJY29tbWFuZF9mbGFnczsKQEAgLTQ5MSw2ICs0OTgsOCBAQAogCXU4CXJlc2VydmVkMls2XTsKIH07CiAKK0k0MEVfQ0hFQ0tfQ01EX0xFTkdUSChpNDBlX2FxY19tbmdfbGFhKTsKKwogLyogTWFuYWdlIE1BQyBBZGRyZXNzIFJlYWQgQ29tbWFuZCAoaW5kaXJlY3QgMHgwMTA3KSAqLwogc3RydWN0IGk0MGVfYXFjX21hY19hZGRyZXNzX3JlYWQgewogCV9fbGUxNgljb21tYW5kX2ZsYWdzOwpAQCAtNTYyLDYgKzU3MSw4IEBACiAJdTgJcmVzZXJ2ZWRbMTJdOwogfTsKIAorSTQwRV9DSEVDS19DTURfTEVOR1RIKGk0MGVfYXFjX2dldF9zd2l0Y2hfY29uZmlnX2hlYWRlcl9yZXNwKTsKKwogc3RydWN0IGk0MGVfYXFjX3N3aXRjaF9jb25maWdfZWxlbWVudF9yZXNwIHsKIAl1OAllbGVtZW50X3R5cGU7CiAjZGVmaW5lIEk0MEVfQVFfU1dfRUxFTV9UWVBFX01BQwkxCkBAIC01ODcsNiArNTk4LDggQEAKIAlfX2xlMTYJZWxlbWVudF9pbmZvOwogfTsKIAorSTQwRV9DSEVDS19TVFJVQ1RfTEVOKDB4MTAsIGk0MGVfYXFjX3N3aXRjaF9jb25maWdfZWxlbWVudF9yZXNwKTsKKwogLyogR2V0IFN3aXRjaCBDb25maWd1cmF0aW9uIChpbmRpcmVjdCAweDAyMDApCiAgKiAgICBhbiBhcnJheSBvZiBlbGVtZW50cyBhcmUgcmV0dXJuZWQgaW4gdGhlIHJlc3BvbnNlIGJ1ZmZlcgogICogICAgdGhlIGZpcnN0IGluIHRoZSBhcnJheSBpcyB0aGUgaGVhZGVyLCByZW1haW5kZXIgYXJlIGVsZW1lbnRzCkBAIC01OTYsNiArNjA5LDggQEAKIAlzdHJ1Y3QgaTQwZV9hcWNfc3dpdGNoX2NvbmZpZ19lbGVtZW50X3Jlc3AJZWxlbWVudFsxXTsKIH07CiAKK0k0MEVfQ0hFQ0tfU1RSVUNUX0xFTigweDIwLCBpNDBlX2FxY19nZXRfc3dpdGNoX2NvbmZpZ19yZXNwKTsKKwogLyogQWRkIFN0YXRpc3RpY3MgKGRpcmVjdCAweDAyMDEpCiAgKiBSZW1vdmUgU3RhdGlzdGljcyAoZGlyZWN0IDB4MDIwMikKICAqLwpAQCAtNjYxLDYgKzY3Niw4IEBACiAJdTgJcmVzZXJ2ZWQyWzZdOwogfTsKIAorSTQwRV9DSEVDS19TVFJVQ1RfTEVOKDB4MTAsIGk0MGVfYXFjX3N3aXRjaF9yZXNvdXJjZV9hbGxvY19lbGVtZW50X3Jlc3ApOworCiAvKiBBZGQgVlNJIChpbmRpcmVjdCAweDAyMTApCiAgKiAgICB0aGlzIGluZGlyZWN0IGNvbW1hbmQgdXNlcyBzdHJ1Y3QgaTQwZV9hcWNfdnNpX3Byb3BlcnRpZXNfZGF0YQogICogICAgYXMgdGhlIGluZGlyZWN0IGJ1ZmZlciAoMTI4IGJ5dGVzKQpAQCAtMTA5Miw2ICsxMTA5LDggQEAKIAl1OAlyZXNlcnZlZFsxMl07CiB9OwogCitJNDBFX0NIRUNLX0NNRF9MRU5HVEgoaTQwZV9hcWNfcmVtb3ZlX3RhZyk7CisKIC8qIEFkZCBtdWx0aWNhc3QgRS1UYWcgKGRpcmVjdCAweDAyNTcpCiAgKiBkZWwgbXVsdGljYXN0IEUtVGFnIChkaXJlY3QgMHgwMjU4KSBvbmx5IHVzZXMgcHZfc2VpZCBhbmQgZXRhZyBmaWVsZHMKICAqIGFuZCBubyBleHRlcm5hbCBkYXRhCkBAIC0xMjA3LDcgKzEyMjYsNyBAQAogCX0gaXBhZGRyOwogCV9fbGUxNglmbGFnczsKICNkZWZpbmUgSTQwRV9BUUNfQUREX0NMT1VEX0ZJTFRFUl9TSElGVAkJCTAKLSNkZWZpbmUgSTQwRV9BUUNfQUREX0NMT1VEX0ZJTFRFUl9NQVNLCQkJKDB4M0YgPDwgXAorI2RlZmluZSBJNDBFX0FRQ19BRERfQ0xPVURfRklMVEVSX01BU0sJKDB4M0YgPDwgXAogCQkJCQlJNDBFX0FRQ19BRERfQ0xPVURfRklMVEVSX1NISUZUKQogLyogMHgwMDAwIHJlc2VydmVkICovCiAjZGVmaW5lIEk0MEVfQVFDX0FERF9DTE9VRF9GSUxURVJfT0lQCQkJMHgwMDAxCkBAIC0xMjQwLDcgKzEyNTksNyBAQAogCXU4CXJlc2VydmVkWzRdOwogCV9fbGUxNglxdWV1ZV9udW1iZXI7CiAjZGVmaW5lIEk0MEVfQVFDX0FERF9DTE9VRF9RVUVVRV9TSElGVAkJMAotI2RlZmluZSBJNDBFX0FRQ19BRERfQ0xPVURfUVVFVUVfTUFTSwkJKDB4M0YgPDwgXAorI2RlZmluZSBJNDBFX0FRQ19BRERfQ0xPVURfUVVFVUVfTUFTSwkJKDB4N0ZGIDw8IFwKIAkJCQkJCSBJNDBFX0FRQ19BRERfQ0xPVURfUVVFVUVfU0hJRlQpCiAJdTgJcmVzZXJ2ZWQyWzE0XTsKIAkvKiByZXNwb25zZSBzZWN0aW9uICovCkBAIC0xMzU5LDYgKzEzNzgsOCBAQAogCXU4CXJlc2VydmVkMVsyOF07CiB9OwogCitJNDBFX0NIRUNLX1NUUlVDVF9MRU4oMHg0MCwgaTQwZV9hcWNfY29uZmlndXJlX3ZzaV9ldHNfc2xhX2J3X2RhdGEpOworCiAvKiBDb25maWd1cmUgVlNJIEJhbmR3aWR0aCBBbGxvY2F0aW9uIHBlciBUcmFmZmljIFR5cGUgKGluZGlyZWN0IDB4MDQwNykKICAqICAgIHJlc3BvbmRzIHdpdGggaTQwZV9hcWNfcXNfaGFuZGxlc19yZXNwCiAgKi8KQEAgLTEzNzAsNiArMTM5MSw4IEBACiAJX19sZTE2CXFzX2hhbmRsZXNbOF07CiB9OwogCitJNDBFX0NIRUNLX1NUUlVDVF9MRU4oMHgyMCwgaTQwZV9hcWNfY29uZmlndXJlX3ZzaV90Y19id19kYXRhKTsKKwogLyogUXVlcnkgdnNpIGJ3IGNvbmZpZ3VyYXRpb24gKGluZGlyZWN0IDB4MDQwOCkgKi8KIHN0cnVjdCBpNDBlX2FxY19xdWVyeV92c2lfYndfY29uZmlnX3Jlc3AgewogCXU4CXRjX3ZhbGlkX2JpdHM7CkBAIC0xMzgzLDYgKzE0MDYsOCBAQAogCXU4CXJlc2VydmVkM1syM107CiB9OwogCitJNDBFX0NIRUNLX1NUUlVDVF9MRU4oMHg0MCwgaTQwZV9hcWNfcXVlcnlfdnNpX2J3X2NvbmZpZ19yZXNwKTsKKwogLyogUXVlcnkgVlNJIEJhbmR3aWR0aCBBbGxvY2F0aW9uIHBlciBUcmFmZmljIFR5cGUgKGluZGlyZWN0IDB4MDQwQSkgKi8KIHN0cnVjdCBpNDBlX2FxY19xdWVyeV92c2lfZXRzX3NsYV9jb25maWdfcmVzcCB7CiAJdTgJdGNfdmFsaWRfYml0czsKQEAgLTEzOTQsNiArMTQxOSw4IEBACiAJX19sZTE2CXRjX2J3X21heFsyXTsKIH07CiAKK0k0MEVfQ0hFQ0tfU1RSVUNUX0xFTigweDIwLCBpNDBlX2FxY19xdWVyeV92c2lfZXRzX3NsYV9jb25maWdfcmVzcCk7CisKIC8qIENvbmZpZ3VyZSBTd2l0Y2hpbmcgQ29tcG9uZW50IEJhbmR3aWR0aCBMaW1pdCAoZGlyZWN0IDB4MDQxMCkgKi8KIHN0cnVjdCBpNDBlX2FxY19jb25maWd1cmVfc3dpdGNoaW5nX2NvbXBfYndfbGltaXQgewogCV9fbGUxNglzZWlkOwpAQCAtMTQyMSw2ICsxNDQ4LDggQEAKIAl1OAlyZXNlcnZlZDJbOTZdOwogfTsKIAorSTQwRV9DSEVDS19TVFJVQ1RfTEVOKDB4ODAsIGk0MGVfYXFjX2NvbmZpZ3VyZV9zd2l0Y2hpbmdfY29tcF9ldHNfZGF0YSk7CisKIC8qIENvbmZpZ3VyZSBTd2l0Y2hpbmcgQ29tcG9uZW50IEJhbmR3aWR0aCBMaW1pdHMgcGVyIFRjIChpbmRpcmVjdCAweDA0MTYpICovCiBzdHJ1Y3QgaTQwZV9hcWNfY29uZmlndXJlX3N3aXRjaGluZ19jb21wX2V0c19id19saW1pdF9kYXRhIHsKIAl1OAl0Y192YWxpZF9iaXRzOwpAQCAtMTQzMiw2ICsxNDYxLDkgQEAKIAl1OAlyZXNlcnZlZDFbMjhdOwogfTsKIAorSTQwRV9DSEVDS19TVFJVQ1RfTEVOKDB4NDAsCisJCSAgICAgIGk0MGVfYXFjX2NvbmZpZ3VyZV9zd2l0Y2hpbmdfY29tcF9ldHNfYndfbGltaXRfZGF0YSk7CisKIC8qIENvbmZpZ3VyZSBTd2l0Y2hpbmcgQ29tcG9uZW50IEJhbmR3aWR0aCBBbGxvY2F0aW9uIHBlciBUYwogICogKGluZGlyZWN0IDB4MDQxNykKICAqLwpAQCAtMTQ0Myw2ICsxNDc1LDggQEAKIAl1OAlyZXNlcnZlZDFbMjBdOwogfTsKIAorSTQwRV9DSEVDS19TVFJVQ1RfTEVOKDB4MjAsIGk0MGVfYXFjX2NvbmZpZ3VyZV9zd2l0Y2hpbmdfY29tcF9id19jb25maWdfZGF0YSk7CisKIC8qIFF1ZXJ5IFN3aXRjaGluZyBDb21wb25lbnQgQ29uZmlndXJhdGlvbiAoaW5kaXJlY3QgMHgwNDE4KSAqLwogc3RydWN0IGk0MGVfYXFjX3F1ZXJ5X3N3aXRjaGluZ19jb21wX2V0c19jb25maWdfcmVzcCB7CiAJdTgJdGNfdmFsaWRfYml0czsKQEAgLTE0NTMsNiArMTQ4Nyw4IEBACiAJdTgJcmVzZXJ2ZWQyWzIzXTsKIH07CiAKK0k0MEVfQ0hFQ0tfU1RSVUNUX0xFTigweDQwLCBpNDBlX2FxY19xdWVyeV9zd2l0Y2hpbmdfY29tcF9ldHNfY29uZmlnX3Jlc3ApOworCiAvKiBRdWVyeSBQaHlzaWNhbFBvcnQgRVRTIENvbmZpZ3VyYXRpb24gKGluZGlyZWN0IDB4MDQxOSkgKi8KIHN0cnVjdCBpNDBlX2FxY19xdWVyeV9wb3J0X2V0c19jb25maWdfcmVzcCB7CiAJdTgJcmVzZXJ2ZWRbNF07CkBAIC0xNDY4LDYgKzE1MDQsOCBAQAogCXU4CXJlc2VydmVkM1szMl07CiB9OwogCitJNDBFX0NIRUNLX1NUUlVDVF9MRU4oMHg0NCwgaTQwZV9hcWNfcXVlcnlfcG9ydF9ldHNfY29uZmlnX3Jlc3ApOworCiAvKiBRdWVyeSBTd2l0Y2hpbmcgQ29tcG9uZW50IEJhbmR3aWR0aCBBbGxvY2F0aW9uIHBlciBUcmFmZmljIFR5cGUKICAqIChpbmRpcmVjdCAweDA0MUEpCiAgKi8KQEAgLTE0ODIsNiArMTUyMCw4IEBACiAJX19sZTE2CXRjX2J3X21heFsyXTsKIH07CiAKK0k0MEVfQ0hFQ0tfU1RSVUNUX0xFTigweDIwLCBpNDBlX2FxY19xdWVyeV9zd2l0Y2hpbmdfY29tcF9id19jb25maWdfcmVzcCk7CisKIC8qIFN1c3BlbmQvcmVzdW1lIHBvcnQgVFggdHJhZmZpYwogICogKGRpcmVjdCAweDA0MUIgYW5kIDB4MDQxQykgdXNlcyB0aGUgZ2VuZXJpYyBTRUlEIHN0cnVjdAogICovCkBAIC0xNDk1LDYgKzE1MzUsOCBAQAogCXU4CW1heF9id1sxNl07ICAgICAgLyogYmFuZHdpZHRoIGxpbWl0ICovCiB9OwogCitJNDBFX0NIRUNLX1NUUlVDVF9MRU4oMHgyMiwgaTQwZV9hcWNfY29uZmlndXJlX3BhcnRpdGlvbl9id19kYXRhKTsKKwogLyogR2V0IGFuZCBzZXQgdGhlIGFjdGl2ZSBITUMgcmVzb3VyY2UgcHJvZmlsZSBhbmQgc3RhdHVzLgogICogKGRpcmVjdCAweDA1MDApIGFuZCAoZGlyZWN0IDB4MDUwMSkKICAqLwpAQCAtMTU3Nyw2ICsxNjE5LDggQEAKIAl1OCByZXNlcnZlZDJbOF07CiB9OwogCitJNDBFX0NIRUNLX1NUUlVDVF9MRU4oMHgyMCwgaTQwZV9hcWNfbW9kdWxlX2Rlc2MpOworCiBzdHJ1Y3QgaTQwZV9hcV9nZXRfcGh5X2FiaWxpdGllc19yZXNwIHsKIAlfX2xlMzIJcGh5X3R5cGU7ICAgICAgIC8qIGJpdG1hcCB1c2luZyB0aGUgYWJvdmUgZW51bSBmb3Igb2Zmc2V0cyAqLwogCXU4CWxpbmtfc3BlZWQ7ICAgICAvKiBiaXRtYXAgdXNpbmcgdGhlIGFib3ZlIGVudW0gYml0IHBhdHRlcm5zICovCkBAIC0xNjA1LDYgKzE2NDksOCBAQAogCXN0cnVjdCBpNDBlX2FxY19tb2R1bGVfZGVzYwlxdWFsaWZpZWRfbW9kdWxlW0k0MEVfQVFfUEhZX01BWF9RTVNdOwogfTsKIAorSTQwRV9DSEVDS19TVFJVQ1RfTEVOKDB4MjE4LCBpNDBlX2FxX2dldF9waHlfYWJpbGl0aWVzX3Jlc3ApOworCiAvKiBTZXQgUEhZIENvbmZpZyAoZGlyZWN0IDB4MDYwMSkgKi8KIHN0cnVjdCBpNDBlX2FxX3NldF9waHlfY29uZmlnIHsgLyogc2FtZSBiaXRzIGFzIGFib3ZlIGluIGFsbCAqLwogCV9fbGUzMglwaHlfdHlwZTsKQEAgLTE3ODgsMTIgKzE4MzQsMTIgQEAKIC8qIE5WTSBDb25maWcgUmVhZCAoaW5kaXJlY3QgMHgwNzA0KSAqLwogc3RydWN0IGk0MGVfYXFjX252bV9jb25maWdfcmVhZCB7CiAJX19sZTE2CWNtZF9mbGFnczsKLSNkZWZpbmUgQU5WTV9TSU5HTEVfT1JfTVVMVElQTEVfRkVBVFVSRVNfTUFTSwkxCi0jZGVmaW5lIEFOVk1fUkVBRF9TSU5HTEVfRkVBVFVSRQkJMAotI2RlZmluZSBBTlZNX1JFQURfTVVMVElQTEVfRkVBVFVSRVMJCTEKKyNkZWZpbmUgSTQwRV9BUV9BTlZNX1NJTkdMRV9PUl9NVUxUSVBMRV9GRUFUVVJFU19NQVNLCTEKKyNkZWZpbmUgSTQwRV9BUV9BTlZNX1JFQURfU0lOR0xFX0ZFQVRVUkUJCTAKKyNkZWZpbmUgSTQwRV9BUV9BTlZNX1JFQURfTVVMVElQTEVfRkVBVFVSRVMJCTEKIAlfX2xlMTYJZWxlbWVudF9jb3VudDsKLQlfX2xlMTYJZWxlbWVudF9pZDsgLyogRmVhdHVyZS9maWVsZCBJRCAqLwotCXU4CXJlc2VydmVkWzJdOworCV9fbGUxNgllbGVtZW50X2lkOwkvKiBGZWF0dXJlL2ZpZWxkIElEICovCisJX19sZTE2CWVsZW1lbnRfaWRfbXN3OwkvKiBNU1dvcmQgb2YgZmllbGQgSUQgKi8KIAlfX2xlMzIJYWRkcmVzc19oaWdoOwogCV9fbGUzMglhZGRyZXNzX2xvdzsKIH07CkBAIC0xODExLDIxICsxODU3LDMyIEBACiAKIEk0MEVfQ0hFQ0tfQ01EX0xFTkdUSChpNDBlX2FxY19udm1fY29uZmlnX3dyaXRlKTsKIAorLyogVXNlZCBmb3IgMHgwNzA0IGFzIHdlbGwgYXMgZm9yIDB4MDcwNSBjb21tYW5kcyAqLworI2RlZmluZSBJNDBFX0FRX0FOVk1fRkVBVFVSRV9PUl9JTU1FRElBVEVfU0hJRlQJCTEKKyNkZWZpbmUgSTQwRV9BUV9BTlZNX0ZFQVRVUkVfT1JfSU1NRURJQVRFX01BU0sgXAorCQkJCSgxIDw8IEk0MEVfQVFfQU5WTV9GRUFUVVJFX09SX0lNTUVESUFURV9TSElGVCkKKyNkZWZpbmUgSTQwRV9BUV9BTlZNX0ZFQVRVUkUJCTAKKyNkZWZpbmUgSTQwRV9BUV9BTlZNX0lNTUVESUFURV9GSUVMRAkoMSA8PCBGRUFUVVJFX09SX0lNTUVESUFURV9TSElGVCkKIHN0cnVjdCBpNDBlX2FxY19udm1fY29uZmlnX2RhdGFfZmVhdHVyZSB7CiAJX19sZTE2IGZlYXR1cmVfaWQ7Ci0JX19sZTE2IGluc3RhbmNlX2lkOworI2RlZmluZSBJNDBFX0FRX0FOVk1fRkVBVFVSRV9PUFRJT05fT0VNX09OTFkJCTB4MDEKKyNkZWZpbmUgSTQwRV9BUV9BTlZNX0ZFQVRVUkVfT1BUSU9OX0RXT1JEX01BUAkJMHgwOAorI2RlZmluZSBJNDBFX0FRX0FOVk1fRkVBVFVSRV9PUFRJT05fUE9SX0NTUgkJMHgxMAogCV9fbGUxNiBmZWF0dXJlX29wdGlvbnM7CiAJX19sZTE2IGZlYXR1cmVfc2VsZWN0aW9uOwogfTsKIAorSTQwRV9DSEVDS19TVFJVQ1RfTEVOKDB4NiwgaTQwZV9hcWNfbnZtX2NvbmZpZ19kYXRhX2ZlYXR1cmUpOworCiBzdHJ1Y3QgaTQwZV9hcWNfbnZtX2NvbmZpZ19kYXRhX2ltbWVkaWF0ZV9maWVsZCB7Ci0jZGVmaW5lIEFOVk1fRkVBVFVSRV9PUl9JTU1FRElBVEVfTUFTSwkweDIKLQlfX2xlMTYgZmllbGRfaWQ7Ci0JX19sZTE2IGluc3RhbmNlX2lkOworCV9fbGUzMiBmaWVsZF9pZDsKKwlfX2xlMzIgZmllbGRfdmFsdWU7CiAJX19sZTE2IGZpZWxkX29wdGlvbnM7Ci0JX19sZTE2IGZpZWxkX3ZhbHVlOworCV9fbGUxNiByZXNlcnZlZDsKIH07CiAKK0k0MEVfQ0hFQ0tfU1RSVUNUX0xFTigweGMsIGk0MGVfYXFjX252bV9jb25maWdfZGF0YV9pbW1lZGlhdGVfZmllbGQpOworCiAvKiBTZW5kIHRvIFBGIGNvbW1hbmQgKGluZGlyZWN0IDB4MDgwMSkgaWQgaXMgb25seSB1c2VkIGJ5IFBGCiAgKiBTZW5kIHRvIFZGIGNvbW1hbmQgKGluZGlyZWN0IDB4MDgwMikgaWQgaXMgb25seSB1c2VkIGJ5IFBGCiAgKiBTZW5kIHRvIFBlZXIgUEYgY29tbWFuZCAoaW5kaXJlY3QgMHgwODAzKQpAQCAtMjA4Miw3ICsyMTM5LDggQEAKICNkZWZpbmUgSTQwRV9BUV9PRU1fUEFSQU1fVFlQRV9CV19DVEwJMQogI2RlZmluZSBJNDBFX0FRX09FTV9QQVJBTV9NQUMJCTIKIAlfX2xlMzIJcGFyYW1fdmFsdWUxOwotCXU4CXBhcmFtX3ZhbHVlMls4XTsKKwlfX2xlMTYJcGFyYW1fdmFsdWUyOworCXU4CXJlc2VydmVkWzZdOwogfTsKIAogSTQwRV9DSEVDS19DTURfTEVOR1RIKGk0MGVfYXFjX29lbV9wYXJhbV9jaGFuZ2UpOwpAQCAtMjA5Niw2ICsyMTU0LDI4IEBACiAKIEk0MEVfQ0hFQ0tfQ01EX0xFTkdUSChpNDBlX2FxY19vZW1fc3RhdGVfY2hhbmdlKTsKIAorLyogSW5pdGlhbGl6ZSBPQ1NEICgweEZFMDIsIGRpcmVjdCkgKi8KK3N0cnVjdCBpNDBlX2FxY19vcGNfb2VtX29jc2RfaW5pdGlhbGl6ZSB7CisJdTggdHlwZV9zdGF0dXM7CisJdTggcmVzZXJ2ZWQxWzNdOworCV9fbGUzMiBvY3NkX21lbW9yeV9ibG9ja19hZGRyX2hpZ2g7CisJX19sZTMyIG9jc2RfbWVtb3J5X2Jsb2NrX2FkZHJfbG93OworCV9fbGUzMiByZXF1ZXN0ZWRfdXBkYXRlX2ludGVydmFsOworfTsKKworSTQwRV9DSEVDS19DTURfTEVOR1RIKGk0MGVfYXFjX29wY19vZW1fb2NzZF9pbml0aWFsaXplKTsKKworLyogSW5pdGlhbGl6ZSBPQ0JCICAoMHhGRTAzLCBkaXJlY3QpICovCitzdHJ1Y3QgaTQwZV9hcWNfb3BjX29lbV9vY2JiX2luaXRpYWxpemUgeworCXU4IHR5cGVfc3RhdHVzOworCXU4IHJlc2VydmVkMVszXTsKKwlfX2xlMzIgb2NiYl9tZW1vcnlfYmxvY2tfYWRkcl9oaWdoOworCV9fbGUzMiBvY2JiX21lbW9yeV9ibG9ja19hZGRyX2xvdzsKKwl1OCByZXNlcnZlZDJbNF07Cit9OworCitJNDBFX0NIRUNLX0NNRF9MRU5HVEgoaTQwZV9hcWNfb3BjX29lbV9vY2JiX2luaXRpYWxpemUpOworCiAvKiBkZWJ1ZyBjb21tYW5kcyAqLwogCiAvKiBnZXQgZGV2aWNlIGlkICgweEZGMDApIHVzZXMgdGhlIGdlbmVyaWMgc3RydWN0dXJlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBldmYvaTQwZV90eHJ4LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBldmYvaTQwZV90eHJ4LmMKaW5kZXggMDRjN2MxNS4uMjkwMDQzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZXZmL2k0MGVfdHhyeC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGV2Zi9pNDBlX3R4cnguYwpAQCAtMTkyLDYgKzE5Miw4IEBACiAJcmV0dXJuIGxlMzJfdG9fY3B1KCoodm9sYXRpbGUgX19sZTMyICopaGVhZCk7CiB9CiAKKyNkZWZpbmUgV0JfU1RSSURFIDB4MworCiAvKioKICAqIGk0MGVfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzCiAgKiBAdHhfcmluZzogIHR4IHJpbmcgdG8gY2xlYW4KQEAgLTI5Myw2ICsyOTUsMTQgQEAKIAl0eF9yaW5nLT5xX3ZlY3Rvci0+dHgudG90YWxfYnl0ZXMgKz0gdG90YWxfYnl0ZXM7CiAJdHhfcmluZy0+cV92ZWN0b3ItPnR4LnRvdGFsX3BhY2tldHMgKz0gdG90YWxfcGFja2V0czsKIAorCWlmIChidWRnZXQgJiYKKwkgICAgISgoaSAmIFdCX1NUUklERSkgPT0gV0JfU1RSSURFKSAmJgorCSAgICAhdGVzdF9iaXQoX19JNDBFX0RPV04sICZ0eF9yaW5nLT52c2ktPnN0YXRlKSAmJgorCSAgICAoSTQwRV9ERVNDX1VOVVNFRCh0eF9yaW5nKSAhPSB0eF9yaW5nLT5jb3VudCkpCisJCXR4X3JpbmctPmFybV93YiA9IHRydWU7CisJZWxzZQorCQl0eF9yaW5nLT5hcm1fd2IgPSBmYWxzZTsKKwogCWlmIChjaGVja19mb3JfdHhfaGFuZyh0eF9yaW5nKSAmJiBpNDBlX2NoZWNrX3R4X2hhbmcodHhfcmluZykpIHsKIAkJLyogc2NoZWR1bGUgaW1tZWRpYXRlIHJlc2V0IGlmIHdlIGJlbGlldmUgd2UgaHVuZyAqLwogCQlkZXZfaW5mbyh0eF9yaW5nLT5kZXYsICJEZXRlY3RlZCBUeCBVbml0IEhhbmdcbiIKQEAgLTM0NCw2ICszNTQsMjQgQEAKIH0KIAogLyoqCisgKiBpNDBlX2ZvcmNlX3diIC1Bcm0gaGFyZHdhcmUgdG8gZG8gYSB3YiBvbiBub25jYWNoZSBhbGlnbmVkIGRlc2NyaXB0b3JzCisgKiBAdnNpOiB0aGUgVlNJIHdlIGNhcmUgYWJvdXQKKyAqIEBxX3ZlY3RvcjogdGhlIHZlY3RvciAgb24gd2hpY2ggdG8gZm9yY2Ugd3JpdGViYWNrCisgKgorICoqLworc3RhdGljIHZvaWQgaTQwZV9mb3JjZV93YihzdHJ1Y3QgaTQwZV92c2kgKnZzaSwgc3RydWN0IGk0MGVfcV92ZWN0b3IgKnFfdmVjdG9yKQoreworCXUzMiB2YWwgPSBJNDBFX1ZGSU5UX0RZTl9DVExOX0lOVEVOQV9NQVNLIHwKKwkJICBJNDBFX1ZGSU5UX0RZTl9DVExOX1NXSU5UX1RSSUdfTUFTSyB8CisJCSAgSTQwRV9WRklOVF9EWU5fQ1RMTl9TV19JVFJfSU5EWF9FTkFfTUFTSzsKKwkJICAvKiBhbGxvdyAwMCB0byBiZSB3cml0dGVuIHRvIHRoZSBpbmRleCAqLworCisJd3IzMigmdnNpLT5iYWNrLT5odywKKwkgICAgIEk0MEVfVkZJTlRfRFlOX0NUTE4xKHFfdmVjdG9yLT52X2lkeCArIHZzaS0+YmFzZV92ZWN0b3IgLSAxKSwKKwkgICAgIHZhbCk7Cit9CisKKy8qKgogICogaTQwZV9zZXRfbmV3X2R5bmFtaWNfaXRyIC0gRmluZCBuZXcgSVRSIGxldmVsCiAgKiBAcmM6IHN0cnVjdHVyZSBjb250YWluaW5nIHJpbmcgcGVyZm9ybWFuY2UgZGF0YQogICoKQEAgLTU2OCw2ICs1OTYsOCBAQAogCWlmICghcnhfcmluZy0+cnhfYmkpCiAJCWdvdG8gZXJyOwogCisJdTY0X3N0YXRzX2luaXQoJnJ4X3JpbmctPnN5bmNwKTsKKwogCS8qIFJvdW5kIHVwIHRvIG5lYXJlc3QgNEsgKi8KIAlyeF9yaW5nLT5zaXplID0gcmluZ19pc18xNmJ5dGVfZGVzY19lbmFibGVkKHJ4X3JpbmcpCiAJCT8gcnhfcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gaTQwZV8xNmJ5dGVfcnhfZGVzYykKQEAgLTEwNjUsNiArMTA5NSw3IEBACiAJc3RydWN0IGk0MGVfdnNpICp2c2kgPSBxX3ZlY3Rvci0+dnNpOwogCXN0cnVjdCBpNDBlX3JpbmcgKnJpbmc7CiAJYm9vbCBjbGVhbl9jb21wbGV0ZSA9IHRydWU7CisJYm9vbCBhcm1fd2IgPSBmYWxzZTsKIAlpbnQgYnVkZ2V0X3Blcl9yaW5nOwogCiAJaWYgKHRlc3RfYml0KF9fSTQwRV9ET1dOLCAmdnNpLT5zdGF0ZSkpIHsKQEAgLTEwNzUsOCArMTEwNiwxMCBAQAogCS8qIFNpbmNlIHRoZSBhY3R1YWwgVHggd29yayBpcyBtaW5pbWFsLCB3ZSBjYW4gZ2l2ZSB0aGUgVHggYSBsYXJnZXIKIAkgKiBidWRnZXQgYW5kIGJlIG1vcmUgYWdncmVzc2l2ZSBhYm91dCBjbGVhbmluZyB1cCB0aGUgVHggZGVzY3JpcHRvcnMuCiAJICovCi0JaTQwZV9mb3JfZWFjaF9yaW5nKHJpbmcsIHFfdmVjdG9yLT50eCkKKwlpNDBlX2Zvcl9lYWNoX3JpbmcocmluZywgcV92ZWN0b3ItPnR4KSB7CiAJCWNsZWFuX2NvbXBsZXRlICY9IGk0MGVfY2xlYW5fdHhfaXJxKHJpbmcsIHZzaS0+d29ya19saW1pdCk7CisJCWFybV93YiB8PSByaW5nLT5hcm1fd2I7CisJfQogCiAJLyogV2UgYXR0ZW1wdCB0byBkaXN0cmlidXRlIGJ1ZGdldCB0byBlYWNoIFJ4IHF1ZXVlIGZhaXJseSwgYnV0IGRvbid0CiAJICogYWxsb3cgdGhlIGJ1ZGdldCB0byBnbyBiZWxvdyAxIGJlY2F1c2UgdGhhdCB3b3VsZCBleGl0IHBvbGxpbmcgZWFybHkuCkBAIC0xMDg3LDggKzExMjAsMTEgQEAKIAkJY2xlYW5fY29tcGxldGUgJj0gaTQwZV9jbGVhbl9yeF9pcnEocmluZywgYnVkZ2V0X3Blcl9yaW5nKTsKIAogCS8qIElmIHdvcmsgbm90IGNvbXBsZXRlZCwgcmV0dXJuIGJ1ZGdldCBhbmQgcG9sbGluZyB3aWxsIHJldHVybiAqLwotCWlmICghY2xlYW5fY29tcGxldGUpCisJaWYgKCFjbGVhbl9jb21wbGV0ZSkgeworCQlpZiAoYXJtX3diKQorCQkJaTQwZV9mb3JjZV93Yih2c2ksIHFfdmVjdG9yKTsKIAkJcmV0dXJuIGJ1ZGdldDsKKwl9CiAKIAkvKiBXb3JrIGlzIGRvbmUgc28gZXhpdCB0aGUgcG9sbGluZyBtb2RlIGFuZCByZS1lbmFibGUgdGhlIGludGVycnVwdCAqLwogCW5hcGlfY29tcGxldGUobmFwaSk7CkBAIC0xMTIyLDggKzExNTgsOCBAQAogCXUzMiAgdHhfZmxhZ3MgPSAwOwogCiAJLyogaWYgd2UgaGF2ZSBhIEhXIFZMQU4gdGFnIGJlaW5nIGFkZGVkLCBkZWZhdWx0IHRvIHRoZSBIVyBvbmUgKi8KLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCXR4X2ZsYWdzIHw9IHZsYW5fdHhfdGFnX2dldChza2IpIDw8IEk0MEVfVFhfRkxBR1NfVkxBTl9TSElGVDsKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgeworCQl0eF9mbGFncyB8PSBza2Jfdmxhbl90YWdfZ2V0KHNrYikgPDwgSTQwRV9UWF9GTEFHU19WTEFOX1NISUZUOwogCQl0eF9mbGFncyB8PSBJNDBFX1RYX0ZMQUdTX0hXX1ZMQU47CiAJLyogZWxzZSBpZiBpdCBpcyBhIFNXIFZMQU4sIGNoZWNrIHRoZSBuZXh0IHByb3RvY29sIGFuZCBzdG9yZSB0aGUgdGFnICovCiAJfSBlbHNlIGlmIChwcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxUSkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGV2Zi9pNDBlX3R4cnguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGV2Zi9pNDBlX3R4cnguaAppbmRleCBjN2YyOTYyLi40ZTE1OTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBldmYvaTQwZV90eHJ4LmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZXZmL2k0MGVfdHhyeC5oCkBAIC0yMzgsNiArMjM4LDcgQEAKIAl1OCBhdHJfY291bnQ7CiAKIAlib29sIHJpbmdfYWN0aXZlOwkJLyogaXMgcmluZyBvbmxpbmUgb3Igbm90ICovCisJYm9vbCBhcm1fd2I7CQkvKiBkbyBzb21ldGhpbmcgdG8gYXJtIHdyaXRlIGJhY2sgKi8KIAogCS8qIHN0YXRzIHN0cnVjdHMgKi8KIAlzdHJ1Y3QgaTQwZV9xdWV1ZV9zdGF0cwlzdGF0czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGV2Zi9pNDBlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGV2Zi9pNDBlX3R5cGUuaAppbmRleCA2OGFlYzExLi4zZDBmZGFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBldmYvaTQwZV90eXBlLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZXZmL2k0MGVfdHlwZS5oCkBAIC0yMTEsNiArMjExLDcgQEAKIAlib29sIGV2Yl84MDJfMV9xYmg7IC8qIEJyaWRnZSBQb3J0IEV4dGVuc2lvbiAqLwogCWJvb2wgZGNiOwogCWJvb2wgZmNvZTsKKwlib29sIGlzY3NpOyAvKiBJbmRpY2F0ZXMgaVNDU0kgZW5hYmxlZCAqLwogCWJvb2wgbWZwX21vZGVfMTsKIAlib29sIG1nbXRfY2VtOwogCWJvb2wgaWVlZV8xNTg4OwpAQCAtNDI1LDcgKzQyNiw3IEBACiAJdTggX19pb21lbSAqaHdfYWRkcjsKIAl2b2lkICpiYWNrOwogCi0JLyogZnVuY3Rpb24gcG9pbnRlciBzdHJ1Y3RzICovCisJLyogc3Vic3lzdGVtIHN0cnVjdHMgKi8KIAlzdHJ1Y3QgaTQwZV9waHlfaW5mbyBwaHk7CiAJc3RydWN0IGk0MGVfbWFjX2luZm8gbWFjOwogCXN0cnVjdCBpNDBlX2J1c19pbmZvIGJ1czsKQEAgLTQ1Miw2ICs0NTMsMTEgQEAKIAl1OCAgcGZfaWQ7CiAJdTE2IG1haW5fdnNpX3NlaWQ7CiAKKwkvKiBmb3IgbXVsdGktZnVuY3Rpb24gTUFDcyAqLworCXUxNiBwYXJ0aXRpb25faWQ7CisJdTE2IG51bV9wYXJ0aXRpb25zOworCXUxNiBudW1fcG9ydHM7CisKIAkvKiBDbG9zZXN0IG51bWEgbm9kZSB0byB0aGUgZGV2aWNlICovCiAJdTE2IG51bWFfbm9kZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZXZmL2k0MGV2Zl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBldmYvaTQwZXZmX21haW4uYwppbmRleCBjYWJhZjU5Li44ZDhjMjAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBldmYvaTQwZXZmX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBldmYvaTQwZXZmX21haW4uYwpAQCAtMzYsNyArMzYsNyBAQAogc3RhdGljIGNvbnN0IGNoYXIgaTQwZXZmX2RyaXZlcl9zdHJpbmdbXSA9CiAJIkludGVsKFIpIFhMNzEwL1g3MTAgVmlydHVhbCBGdW5jdGlvbiBOZXR3b3JrIERyaXZlciI7CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMC42IgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4yLjAiCiBjb25zdCBjaGFyIGk0MGV2Zl9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiBzdGF0aWMgY29uc3QgY2hhciBpNDBldmZfY29weXJpZ2h0W10gPQogCSJDb3B5cmlnaHQgKGMpIDIwMTMgLSAyMDE0IEludGVsIENvcnBvcmF0aW9uLiI7CkBAIC0zMTMsMTAgKzMxMyw2IEBACiAJdmFsID0gdmFsIHwgSTQwRV9QRklOVF9EWU5fQ1RMMF9DTEVBUlBCQV9NQVNLOwogCXdyMzIoaHcsIEk0MEVfVkZJTlRfRFlOX0NUTDAxLCB2YWwpOwogCi0JLyogcmUtZW5hYmxlIGludGVycnVwdCBjYXVzZXMgKi8KLQl3cjMyKGh3LCBJNDBFX1ZGSU5UX0lDUjBfRU5BMSwgZW5hX21hc2spOwotCXdyMzIoaHcsIEk0MEVfVkZJTlRfRFlOX0NUTDAxLCBJNDBFX1ZGSU5UX0RZTl9DVEwwMV9JTlRFTkFfTUFTSyk7Ci0KIAkvKiBzY2hlZHVsZSB3b3JrIG9uIHRoZSBwcml2YXRlIHdvcmtxdWV1ZSAqLwogCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPmFkbWlucV90YXNrKTsKIApAQCAtOTQ3LDMwICs5NDMsNiBAQAogfQogCiAvKioKLSAqIGk0MGV2Zl9jbGVhbl9hbGxfcnhfcmluZ3MgLSBGcmVlIFJ4IEJ1ZmZlcnMgZm9yIGFsbCBxdWV1ZXMKLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQotICoqLwotc3RhdGljIHZvaWQgaTQwZXZmX2NsZWFuX2FsbF9yeF9yaW5ncyhzdHJ1Y3QgaTQwZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX2FjdGl2ZV9xdWV1ZXM7IGkrKykKLQkJaTQwZXZmX2NsZWFuX3J4X3JpbmcoYWRhcHRlci0+cnhfcmluZ3NbaV0pOwotfQotCi0vKioKLSAqIGk0MGV2Zl9jbGVhbl9hbGxfdHhfcmluZ3MgLSBGcmVlIFR4IEJ1ZmZlcnMgZm9yIGFsbCBxdWV1ZXMKLSAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQotICoqLwotc3RhdGljIHZvaWQgaTQwZXZmX2NsZWFuX2FsbF90eF9yaW5ncyhzdHJ1Y3QgaTQwZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX2FjdGl2ZV9xdWV1ZXM7IGkrKykKLQkJaTQwZXZmX2NsZWFuX3R4X3JpbmcoYWRhcHRlci0+dHhfcmluZ3NbaV0pOwotfQotCi0vKioKICAqIGk0MGVfZG93biAtIFNodXRkb3duIHRoZSBjb25uZWN0aW9uIHByb2Nlc3NpbmcKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoqLwpAQCAtOTgyLDYgKzk1NCwxMiBAQAogCWlmIChhZGFwdGVyLT5zdGF0ZSA9PSBfX0k0MEVWRl9ET1dOKQogCQlyZXR1cm47CiAKKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0k0MEVWRl9JTl9DUklUSUNBTF9UQVNLLAorCQkJCSZhZGFwdGVyLT5jcml0X3NlY3Rpb24pKQorCQl1c2xlZXBfcmFuZ2UoNTAwLCAxMDAwKTsKKworCWk0MGV2Zl9pcnFfZGlzYWJsZShhZGFwdGVyKTsKKwogCS8qIHJlbW92ZSBhbGwgTUFDIGZpbHRlcnMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGYsICZhZGFwdGVyLT5tYWNfZmlsdGVyX2xpc3QsIGxpc3QpIHsKIAkJZi0+cmVtb3ZlID0gdHJ1ZTsKQEAgLTk5MiwyNSArOTcwLDI3IEBACiAJfQogCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSTQwRVZGX0ZMQUdfUEZfQ09NTVNfRkFJTEVEKSAmJgogCSAgICBhZGFwdGVyLT5zdGF0ZSAhPSBfX0k0MEVWRl9SRVNFVFRJTkcpIHsKLQkJYWRhcHRlci0+YXFfcmVxdWlyZWQgfD0gSTQwRVZGX0ZMQUdfQVFfREVMX01BQ19GSUxURVI7CisJCS8qIGNhbmNlbCBhbnkgY3VycmVudCBvcGVyYXRpb24gKi8KKwkJYWRhcHRlci0+Y3VycmVudF9vcCA9IEk0MEVfVklSVENITkxfT1BfVU5LTk9XTjsKKwkJYWRhcHRlci0+YXFfcGVuZGluZyA9IDA7CisJCS8qIFNjaGVkdWxlIG9wZXJhdGlvbnMgdG8gY2xvc2UgZG93biB0aGUgSFcuIERvbid0IHdhaXQKKwkJICogaGVyZSBmb3IgdGhpcyB0byBjb21wbGV0ZS4gVGhlIHdhdGNoZG9nIGlzIHN0aWxsIHJ1bm5pbmcKKwkJICogYW5kIGl0IHdpbGwgdGFrZSBjYXJlIG9mIHRoaXMuCisJCSAqLworCQlhZGFwdGVyLT5hcV9yZXF1aXJlZCA9IEk0MEVWRl9GTEFHX0FRX0RFTF9NQUNfRklMVEVSOwogCQlhZGFwdGVyLT5hcV9yZXF1aXJlZCB8PSBJNDBFVkZfRkxBR19BUV9ERUxfVkxBTl9GSUxURVI7Ci0JCS8qIGRpc2FibGUgcmVjZWl2ZXMgKi8KIAkJYWRhcHRlci0+YXFfcmVxdWlyZWQgfD0gSTQwRVZGX0ZMQUdfQVFfRElTQUJMRV9RVUVVRVM7Ci0JCW1vZF90aW1lcl9wZW5kaW5nKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIDEpOwotCQltc2xlZXAoMjApOwogCX0KIAluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CiAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAotCWk0MGV2Zl9pcnFfZGlzYWJsZShhZGFwdGVyKTsKLQogCWk0MGV2Zl9uYXBpX2Rpc2FibGVfYWxsKGFkYXB0ZXIpOwogCi0JbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwltc2xlZXAoMjApOwogCi0JaTQwZXZmX2NsZWFuX2FsbF90eF9yaW5ncyhhZGFwdGVyKTsKLQlpNDBldmZfY2xlYW5fYWxsX3J4X3JpbmdzKGFkYXB0ZXIpOworCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJY2xlYXJfYml0KF9fSTQwRVZGX0lOX0NSSVRJQ0FMX1RBU0ssICZhZGFwdGVyLT5jcml0X3NlY3Rpb24pOwogfQogCiAvKioKQEAgLTEzNTYsOCArMTMzNiwxMyBAQAogCS8qIFByb2Nlc3MgYWRtaW4gcXVldWUgdGFza3MuIEFmdGVyIGluaXQsIGV2ZXJ5dGhpbmcgZ2V0cyBkb25lCiAJICogaGVyZSBzbyB3ZSBkb24ndCByYWNlIG9uIHRoZSBhZG1pbiBxdWV1ZS4KIAkgKi8KLQlpZiAoYWRhcHRlci0+YXFfcGVuZGluZykKKwlpZiAoYWRhcHRlci0+YXFfcGVuZGluZykgeworCQlpZiAoIWk0MGV2Zl9hc3FfZG9uZShodykpIHsKKwkJCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwgIkFkbWluIHF1ZXVlIHRpbWVvdXRcbiIpOworCQkJaTQwZXZmX3NlbmRfYXBpX3ZlcihhZGFwdGVyKTsKKwkJfQogCQlnb3RvIHdhdGNoZG9nX2RvbmU7CisJfQogCiAJaWYgKGFkYXB0ZXItPmFxX3JlcXVpcmVkICYgSTQwRVZGX0ZMQUdfQVFfTUFQX1ZFQ1RPUlMpIHsKIAkJaTQwZXZmX21hcF9xdWV1ZXMoYWRhcHRlcik7CkBAIC0xNDAxLDExICsxMzg2LDE0IEBACiAKIAlpZiAoYWRhcHRlci0+c3RhdGUgPT0gX19JNDBFVkZfUlVOTklORykKIAkJaTQwZXZmX3JlcXVlc3Rfc3RhdHMoYWRhcHRlcik7Ci0KLQlpNDBldmZfaXJxX2VuYWJsZShhZGFwdGVyLCB0cnVlKTsKLQlpNDBldmZfZmlyZV9zd19pbnQoYWRhcHRlciwgMHhGRik7Ci0KIHdhdGNoZG9nX2RvbmU6CisJaWYgKGFkYXB0ZXItPnN0YXRlID09IF9fSTQwRVZGX1JVTk5JTkcpIHsKKwkJaTQwZXZmX2lycV9lbmFibGVfcXVldWVzKGFkYXB0ZXIsIH4wKTsKKwkJaTQwZXZmX2ZpcmVfc3dfaW50KGFkYXB0ZXIsIDB4RkYpOworCX0gZWxzZSB7CisJCWk0MGV2Zl9maXJlX3N3X2ludChhZGFwdGVyLCAweDEpOworCX0KKwogCWNsZWFyX2JpdChfX0k0MEVWRl9JTl9DUklUSUNBTF9UQVNLLCAmYWRhcHRlci0+Y3JpdF9zZWN0aW9uKTsKIHJlc3RhcnRfd2F0Y2hkb2c6CiAJaWYgKGFkYXB0ZXItPnN0YXRlID09IF9fSTQwRVZGX1JFTU9WRSkKQEAgLTE2MzMsMTcgKzE2MjEsMTcgQEAKIAl1MTYgcGVuZGluZzsKIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIEk0MEVWRl9GTEFHX1BGX0NPTU1TX0ZBSUxFRCkKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAogCWV2ZW50LmJ1Zl9sZW4gPSBJNDBFVkZfTUFYX0FRX0JVRl9TSVpFOwogCWV2ZW50Lm1zZ19idWYgPSBremFsbG9jKGV2ZW50LmJ1Zl9sZW4sIEdGUF9LRVJORUwpOwogCWlmICghZXZlbnQubXNnX2J1ZikKLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAogCXZfbXNnID0gKHN0cnVjdCBpNDBlX3ZpcnRjaG5sX21zZyAqKSZldmVudC5kZXNjOwogCWRvIHsKIAkJcmV0ID0gaTQwZXZmX2NsZWFuX2FycV9lbGVtZW50KGh3LCAmZXZlbnQsICZwZW5kaW5nKTsKLQkJaWYgKHJldCkKKwkJaWYgKHJldCB8fCAhdl9tc2ctPnZfb3Bjb2RlKQogCQkJYnJlYWs7IC8qIE5vIGV2ZW50IHRvIHByb2Nlc3Mgb3IgZXJyb3IgY2xlYW5pbmcgQVJRICovCiAKIAkJaTQwZXZmX3ZpcnRjaG5sX2NvbXBsZXRpb24oYWRhcHRlciwgdl9tc2ctPnZfb3Bjb2RlLApAQCAtMTY4OCwxMCArMTY3NiwxMCBAQAogCWlmIChvbGR2YWwgIT0gdmFsKQogCQl3cjMyKGh3LCBody0+YXEuYXNxLmxlbiwgdmFsKTsKIAorCWtmcmVlKGV2ZW50Lm1zZ19idWYpOworb3V0OgogCS8qIHJlLWVuYWJsZSBBZG1pbiBxdWV1ZSBpbnRlcnJ1cHQgY2F1c2UgKi8KIAlpNDBldmZfbWlzY19pcnFfZW5hYmxlKGFkYXB0ZXIpOwotCi0Ja2ZyZWUoZXZlbnQubXNnX2J1Zik7CiB9CiAKIC8qKgpAQCAtMjA1MywxMiArMjA0MSw4IEBACiAJCS8qIGFxIG1zZyBzZW50LCBhd2FpdGluZyByZXBseSAqLwogCQllcnIgPSBpNDBldmZfdmVyaWZ5X2FwaV92ZXIoYWRhcHRlcik7CiAJCWlmIChlcnIpIHsKLQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gdmVyaWZ5IEFQSSB2ZXJzaW9uICglZCksIHJldHJ5aW5nXG4iLAotCQkJCSBlcnIpOwotCQkJaWYgKGVyciA9PSBJNDBFX0VSUl9BRE1JTl9RVUVVRV9OT19XT1JLKSB7Ci0JCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlJlc2VuZGluZyByZXF1ZXN0XG4iKTsKKwkJCWlmIChlcnIgPT0gSTQwRV9FUlJfQURNSU5fUVVFVUVfTk9fV09SSykKIAkJCQllcnIgPSBpNDBldmZfc2VuZF9hcGlfdmVyKGFkYXB0ZXIpOwotCQkJfQogCQkJZ290byBlcnI7CiAJCX0KIAkJZXJyID0gaTQwZXZmX3NlbmRfdmZfY29uZmlnX21zZyhhZGFwdGVyKTsKQEAgLTIwODEsNyArMjA2NSw2IEBACiAJCX0KIAkJZXJyID0gaTQwZXZmX2dldF92Zl9jb25maWcoYWRhcHRlcik7CiAJCWlmIChlcnIgPT0gSTQwRV9FUlJfQURNSU5fUVVFVUVfTk9fV09SSykgewotCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlJlc2VuZGluZyBWRiBjb25maWcgcmVxdWVzdFxuIik7CiAJCQllcnIgPSBpNDBldmZfc2VuZF92Zl9jb25maWdfbXNnKGFkYXB0ZXIpOwogCQkJZ290byBlcnI7CiAJCX0KQEAgLTIyMzAsMTIgKzIyMTMsMTggQEAKIHN0YXRpYyB2b2lkIGk0MGV2Zl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpNDBldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CiAKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQogCQlpNDBldmZfY2xvc2UobmV0ZGV2KTsKIAorCS8qIFByZXZlbnQgdGhlIHdhdGNoZG9nIGZyb20gcnVubmluZy4gKi8KKwlhZGFwdGVyLT5zdGF0ZSA9IF9fSTQwRVZGX1JFTU9WRTsKKwlhZGFwdGVyLT5hcV9yZXF1aXJlZCA9IDA7CisJYWRhcHRlci0+YXFfcGVuZGluZyA9IDA7CisKICNpZmRlZiBDT05GSUdfUE0KIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIApAQCAtMjQ0OCw3ICsyNDM3LDE4IEBACiAJCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAJCWFkYXB0ZXItPm5ldGRldl9yZWdpc3RlcmVkID0gZmFsc2U7CiAJfQorCisJLyogU2h1dCBkb3duIGFsbCB0aGUgZ2FyYmFnZSBtYXNoZXJzIG9uIHRoZSBkZXRlbnRpb24gbGV2ZWwgKi8KIAlhZGFwdGVyLT5zdGF0ZSA9IF9fSTQwRVZGX1JFTU9WRTsKKwlhZGFwdGVyLT5hcV9yZXF1aXJlZCA9IDA7CisJYWRhcHRlci0+YXFfcGVuZGluZyA9IDA7CisJaTQwZXZmX3JlcXVlc3RfcmVzZXQoYWRhcHRlcik7CisJbXNsZWVwKDIwKTsKKwkvKiBJZiB0aGUgRlcgaXNuJ3QgcmVzcG9uZGluZywga2ljayBpdCBvbmNlLCBidXQgb25seSBvbmNlLiAqLworCWlmICghaTQwZXZmX2FzcV9kb25lKGh3KSkgeworCQlpNDBldmZfcmVxdWVzdF9yZXNldChhZGFwdGVyKTsKKwkJbXNsZWVwKDIwKTsKKwl9CiAKIAlpZiAoYWRhcHRlci0+bXNpeF9lbnRyaWVzKSB7CiAJCWk0MGV2Zl9taXNjX2lycV9kaXNhYmxlKGFkYXB0ZXIpOwpAQCAtMjQ3Nyw2ICsyNDc3LDEwIEBACiAJCWxpc3RfZGVsKCZmLT5saXN0KTsKIAkJa2ZyZWUoZik7CiAJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmLCBmdG1wLCAmYWRhcHRlci0+dmxhbl9maWx0ZXJfbGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmZi0+bGlzdCk7CisJCWtmcmVlKGYpOworCX0KIAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGV2Zi9pNDBldmZfdmlydGNobmwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2k0MGV2Zi9pNDBldmZfdmlydGNobmwuYwppbmRleCA1ZmRlNWE3Li4zZjBjODVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pNDBldmYvaTQwZXZmX3ZpcnRjaG5sLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaTQwZXZmL2k0MGV2Zl92aXJ0Y2hubC5jCkBAIC03MTUsMTQgKzcxNSwxNCBAQAogCQl9CiAJCXJldHVybjsKIAl9Ci0JaWYgKHZfb3Bjb2RlICE9IGFkYXB0ZXItPmN1cnJlbnRfb3ApCi0JCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJQZW5kaW5nIG9wIGlzICVkLCByZWNlaXZlZCAlZFxuIiwKLQkJCSBhZGFwdGVyLT5jdXJyZW50X29wLCB2X29wY29kZSk7CiAJaWYgKHZfcmV0dmFsKSB7CiAJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzOiBQRiByZXR1cm5lZCBlcnJvciAlZCB0byBvdXIgcmVxdWVzdCAlZFxuIiwKIAkJCV9fZnVuY19fLCB2X3JldHZhbCwgdl9vcGNvZGUpOwogCX0KIAlzd2l0Y2ggKHZfb3Bjb2RlKSB7CisJY2FzZSBJNDBFX1ZJUlRDSE5MX09QX1ZFUlNJT046CisJCS8qIG5vIGFjdGlvbiwgYnV0IGFsc28gbm90IGFuIGVycm9yICovCisJCWJyZWFrOwogCWNhc2UgSTQwRV9WSVJUQ0hOTF9PUF9HRVRfU1RBVFM6IHsKIAkJc3RydWN0IGk0MGVfZXRoX3N0YXRzICpzdGF0cyA9CiAJCQkoc3RydWN0IGk0MGVfZXRoX3N0YXRzICopbXNnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYi5oCmluZGV4IDgyZDg5MWUuLmMyYmQ0ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2IuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJlMTAwMF9tYWMuaCIKICNpbmNsdWRlICJlMTAwMF84MjU3NS5oIgogCi0jaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lY291bnRlci5oPgogI2luY2x1ZGUgPGxpbnV4L25ldF90c3RhbXAuaD4KICNpbmNsdWRlIDxsaW51eC9wdHBfY2xvY2tfa2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CkBAIC0zNDMsNiArMzQzLDkgQEAKIAl9OwogI2VuZGlmCiAKKyNkZWZpbmUgSUdCX05fRVhUVFMJMgorI2RlZmluZSBJR0JfTl9QRVJPVVQJMgorI2RlZmluZSBJR0JfTl9TRFAJNAogI2RlZmluZSBJR0JfUkVUQV9TSVpFCTEyOAogCiAvKiBib2FyZCBzcGVjaWZpYyBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCkBAIC00MzksNiArNDQyLDEyIEBACiAJdTMyIHR4X2h3dHN0YW1wX3RpbWVvdXRzOwogCXUzMiByeF9od3RzdGFtcF9jbGVhcmVkOwogCisJc3RydWN0IHB0cF9waW5fZGVzYyBzZHBfY29uZmlnW0lHQl9OX1NEUF07CisJc3RydWN0IHsKKwkJc3RydWN0IHRpbWVzcGVjIHN0YXJ0OworCQlzdHJ1Y3QgdGltZXNwZWMgcGVyaW9kOworCX0gcGVyb3V0W0lHQl9OX1BFUk9VVF07CisKIAljaGFyIGZ3X3ZlcnNpb25bMzJdOwogI2lmZGVmIENPTkZJR19JR0JfSFdNT04KIAlzdHJ1Y3QgaHdtb25fYnVmZiAqaWdiX2h3bW9uX2J1ZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jCmluZGV4IGZmNTk4OTcuLmYzNjZiM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfbWFpbi5jCkBAIC01MDM1LDkgKzUwMzUsOSBAQAogCiAJc2tiX3R4X3RpbWVzdGFtcChza2IpOwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFHU19WTEFOOwotCQl0eF9mbGFncyB8PSAodmxhbl90eF90YWdfZ2V0KHNrYikgPDwgSUdCX1RYX0ZMQUdTX1ZMQU5fU0hJRlQpOworCQl0eF9mbGFncyB8PSAoc2tiX3ZsYW5fdGFnX2dldChza2IpIDw8IElHQl9UWF9GTEFHU19WTEFOX1NISUZUKTsKIAl9CiAKIAkvKiByZWNvcmQgaW5pdGlhbCBmbGFncyBhbmQgcHJvdG9jb2wgKi8KQEAgLTUzODQsNiArNTM4NCw4MCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgaWdiX3RzeW5jX2ludGVycnVwdChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgcHRwX2Nsb2NrX2V2ZW50IGV2ZW50OworCXN0cnVjdCB0aW1lc3BlYyB0czsKKwl1MzIgYWNrID0gMCwgdHNhdXhjLCBzZWMsIG5zZWMsIHRzaWNyID0gcmQzMihFMTAwMF9UU0lDUik7CisKKwlpZiAodHNpY3IgJiBUU0lOVFJfU1lTX1dSQVApIHsKKwkJZXZlbnQudHlwZSA9IFBUUF9DTE9DS19QUFM7CisJCWlmIChhZGFwdGVyLT5wdHBfY2Fwcy5wcHMpCisJCQlwdHBfY2xvY2tfZXZlbnQoYWRhcHRlci0+cHRwX2Nsb2NrLCAmZXZlbnQpOworCQllbHNlCisJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJ1bmV4cGVjdGVkIFNZUyBXUkFQIik7CisJCWFjayB8PSBUU0lOVFJfU1lTX1dSQVA7CisJfQorCisJaWYgKHRzaWNyICYgRTEwMDBfVFNJQ1JfVFhUUykgeworCQkvKiByZXRyaWV2ZSBoYXJkd2FyZSB0aW1lc3RhbXAgKi8KKwkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cHRwX3R4X3dvcmspOworCQlhY2sgfD0gRTEwMDBfVFNJQ1JfVFhUUzsKKwl9CisKKwlpZiAodHNpY3IgJiBUU0lOVFJfVFQwKSB7CisJCXNwaW5fbG9jaygmYWRhcHRlci0+dG1yZWdfbG9jayk7CisJCXRzID0gdGltZXNwZWNfYWRkKGFkYXB0ZXItPnBlcm91dFswXS5zdGFydCwKKwkJCQkgIGFkYXB0ZXItPnBlcm91dFswXS5wZXJpb2QpOworCQl3cjMyKEUxMDAwX1RSR1RUSU1MMCwgdHMudHZfbnNlYyk7CisJCXdyMzIoRTEwMDBfVFJHVFRJTUgwLCB0cy50dl9zZWMpOworCQl0c2F1eGMgPSByZDMyKEUxMDAwX1RTQVVYQyk7CisJCXRzYXV4YyB8PSBUU0FVWENfRU5fVFQwOworCQl3cjMyKEUxMDAwX1RTQVVYQywgdHNhdXhjKTsKKwkJYWRhcHRlci0+cGVyb3V0WzBdLnN0YXJ0ID0gdHM7CisJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT50bXJlZ19sb2NrKTsKKwkJYWNrIHw9IFRTSU5UUl9UVDA7CisJfQorCisJaWYgKHRzaWNyICYgVFNJTlRSX1RUMSkgeworCQlzcGluX2xvY2soJmFkYXB0ZXItPnRtcmVnX2xvY2spOworCQl0cyA9IHRpbWVzcGVjX2FkZChhZGFwdGVyLT5wZXJvdXRbMV0uc3RhcnQsCisJCQkJICBhZGFwdGVyLT5wZXJvdXRbMV0ucGVyaW9kKTsKKwkJd3IzMihFMTAwMF9UUkdUVElNTDEsIHRzLnR2X25zZWMpOworCQl3cjMyKEUxMDAwX1RSR1RUSU1IMSwgdHMudHZfc2VjKTsKKwkJdHNhdXhjID0gcmQzMihFMTAwMF9UU0FVWEMpOworCQl0c2F1eGMgfD0gVFNBVVhDX0VOX1RUMTsKKwkJd3IzMihFMTAwMF9UU0FVWEMsIHRzYXV4Yyk7CisJCWFkYXB0ZXItPnBlcm91dFsxXS5zdGFydCA9IHRzOworCQlzcGluX3VubG9jaygmYWRhcHRlci0+dG1yZWdfbG9jayk7CisJCWFjayB8PSBUU0lOVFJfVFQxOworCX0KKworCWlmICh0c2ljciAmIFRTSU5UUl9BVVRUMCkgeworCQluc2VjID0gcmQzMihFMTAwMF9BVVhTVE1QTDApOworCQlzZWMgID0gcmQzMihFMTAwMF9BVVhTVE1QSDApOworCQlldmVudC50eXBlID0gUFRQX0NMT0NLX0VYVFRTOworCQlldmVudC5pbmRleCA9IDA7CisJCWV2ZW50LnRpbWVzdGFtcCA9IHNlYyAqIDEwMDAwMDAwMDBVTEwgKyBuc2VjOworCQlwdHBfY2xvY2tfZXZlbnQoYWRhcHRlci0+cHRwX2Nsb2NrLCAmZXZlbnQpOworCQlhY2sgfD0gVFNJTlRSX0FVVFQwOworCX0KKworCWlmICh0c2ljciAmIFRTSU5UUl9BVVRUMSkgeworCQluc2VjID0gcmQzMihFMTAwMF9BVVhTVE1QTDEpOworCQlzZWMgID0gcmQzMihFMTAwMF9BVVhTVE1QSDEpOworCQlldmVudC50eXBlID0gUFRQX0NMT0NLX0VYVFRTOworCQlldmVudC5pbmRleCA9IDE7CisJCWV2ZW50LnRpbWVzdGFtcCA9IHNlYyAqIDEwMDAwMDAwMDBVTEwgKyBuc2VjOworCQlwdHBfY2xvY2tfZXZlbnQoYWRhcHRlci0+cHRwX2Nsb2NrLCAmZXZlbnQpOworCQlhY2sgfD0gVFNJTlRSX0FVVFQxOworCX0KKworCS8qIGFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHRzICovCisJd3IzMihFMTAwMF9UU0lDUiwgYWNrKTsKK30KKwogc3RhdGljIGlycXJldHVybl90IGlnYl9tc2l4X290aGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gZGF0YTsKQEAgLTU0MTUsMTYgKzU0ODksOCBAQAogCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIDEpOwogCX0KIAotCWlmIChpY3IgJiBFMTAwMF9JQ1JfVFMpIHsKLQkJdTMyIHRzaWNyID0gcmQzMihFMTAwMF9UU0lDUik7Ci0KLQkJaWYgKHRzaWNyICYgRTEwMDBfVFNJQ1JfVFhUUykgewotCQkJLyogYWNrbm93bGVkZ2UgdGhlIGludGVycnVwdCAqLwotCQkJd3IzMihFMTAwMF9UU0lDUiwgRTEwMDBfVFNJQ1JfVFhUUyk7Ci0JCQkvKiByZXRyaWV2ZSBoYXJkd2FyZSB0aW1lc3RhbXAgKi8KLQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnB0cF90eF93b3JrKTsKLQkJfQotCX0KKwlpZiAoaWNyICYgRTEwMDBfSUNSX1RTKQorCQlpZ2JfdHN5bmNfaW50ZXJydXB0KGFkYXB0ZXIpOwogCiAJd3IzMihFMTAwMF9FSU1TLCBhZGFwdGVyLT5laW1zX290aGVyKTsKIApAQCAtNjAxMSw4ICs2MDc3LDEyIEBACiAJYWRhcHRlci0+dmZfZGF0YVt2Zl0uZmxhZ3MgfD0gSUdCX1ZGX0ZMQUdfQ1RTOwogCiAJLyogcmVwbHkgdG8gcmVzZXQgd2l0aCBhY2sgYW5kIHZmIG1hYyBhZGRyZXNzICovCi0JbXNnYnVmWzBdID0gRTEwMDBfVkZfUkVTRVQgfCBFMTAwMF9WVF9NU0dUWVBFX0FDSzsKLQltZW1jcHkoYWRkciwgdmZfbWFjLCBFVEhfQUxFTik7CisJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIodmZfbWFjKSkgeworCQltc2didWZbMF0gPSBFMTAwMF9WRl9SRVNFVCB8IEUxMDAwX1ZUX01TR1RZUEVfQUNLOworCQltZW1jcHkoYWRkciwgdmZfbWFjLCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJbXNnYnVmWzBdID0gRTEwMDBfVkZfUkVTRVQgfCBFMTAwMF9WVF9NU0dUWVBFX05BQ0s7CisJfQogCWlnYl93cml0ZV9tYngoaHcsIG1zZ2J1ZiwgMywgdmYpOwogfQogCkBAIC02MjAzLDE2ICs2MjczLDggQEAKIAkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKIAl9CiAKLQlpZiAoaWNyICYgRTEwMDBfSUNSX1RTKSB7Ci0JCXUzMiB0c2ljciA9IHJkMzIoRTEwMDBfVFNJQ1IpOwotCi0JCWlmICh0c2ljciAmIEUxMDAwX1RTSUNSX1RYVFMpIHsKLQkJCS8qIGFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgKi8KLQkJCXdyMzIoRTEwMDBfVFNJQ1IsIEUxMDAwX1RTSUNSX1RYVFMpOwotCQkJLyogcmV0cmlldmUgaGFyZHdhcmUgdGltZXN0YW1wICovCi0JCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5wdHBfdHhfd29yayk7Ci0JCX0KLQl9CisJaWYgKGljciAmIEUxMDAwX0lDUl9UUykKKwkJaWdiX3RzeW5jX2ludGVycnVwdChhZGFwdGVyKTsKIAogCW5hcGlfc2NoZWR1bGUoJnFfdmVjdG9yLT5uYXBpKTsKIApAQCAtNjI1NywxNiArNjMxOSw4IEBACiAJCQltb2RfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CiAJfQogCi0JaWYgKGljciAmIEUxMDAwX0lDUl9UUykgewotCQl1MzIgdHNpY3IgPSByZDMyKEUxMDAwX1RTSUNSKTsKLQotCQlpZiAodHNpY3IgJiBFMTAwMF9UU0lDUl9UWFRTKSB7Ci0JCQkvKiBhY2tub3dsZWRnZSB0aGUgaW50ZXJydXB0ICovCi0JCQl3cjMyKEUxMDAwX1RTSUNSLCBFMTAwMF9UU0lDUl9UWFRTKTsKLQkJCS8qIHJldHJpZXZlIGhhcmR3YXJlIHRpbWVzdGFtcCAqLwotCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cHRwX3R4X3dvcmspOwotCQl9Ci0JfQorCWlmIChpY3IgJiBFMTAwMF9JQ1JfVFMpCisJCWlnYl90c3luY19pbnRlcnJ1cHQoYWRhcHRlcik7CiAKIAluYXBpX3NjaGVkdWxlKCZxX3ZlY3Rvci0+bmFwaSk7CiAKQEAgLTY1MjcsMTUgKzY1ODEsMTcgQEAKIAkJCQkJIERNQV9GUk9NX0RFVklDRSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpZ2JfcGFnZV9pc19yZXNlcnZlZChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gKHBhZ2VfdG9fbmlkKHBhZ2UpICE9IG51bWFfbWVtX2lkKCkpIHx8IHBhZ2UtPnBmbWVtYWxsb2M7Cit9CisKIHN0YXRpYyBib29sIGlnYl9jYW5fcmV1c2VfcnhfcGFnZShzdHJ1Y3QgaWdiX3J4X2J1ZmZlciAqcnhfYnVmZmVyLAogCQkJCSAgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJICB1bnNpZ25lZCBpbnQgdHJ1ZXNpemUpCiB7CiAJLyogYXZvaWQgcmUtdXNpbmcgcmVtb3RlIHBhZ2VzICovCi0JaWYgKHVubGlrZWx5KHBhZ2VfdG9fbmlkKHBhZ2UpICE9IG51bWFfbm9kZV9pZCgpKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKHVubGlrZWx5KHBhZ2UtPnBmbWVtYWxsb2MpKQorCWlmICh1bmxpa2VseShpZ2JfcGFnZV9pc19yZXNlcnZlZChwYWdlKSkpCiAJCXJldHVybiBmYWxzZTsKIAogI2lmIChQQUdFX1NJWkUgPCA4MTkyKQpAQCAtNjU0NSwyMiArNjYwMSwxOSBAQAogCiAJLyogZmxpcCBwYWdlIG9mZnNldCB0byBvdGhlciBidWZmZXIgKi8KIAlyeF9idWZmZXItPnBhZ2Vfb2Zmc2V0IF49IElHQl9SWF9CVUZTWjsKLQotCS8qIEV2ZW4gaWYgd2Ugb3duIHRoZSBwYWdlLCB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIGF0b21pY19zZXQoKQotCSAqIFRoaXMgd291bGQgYnJlYWsgZ2V0X3BhZ2VfdW5sZXNzX3plcm8oKSB1c2Vycy4KLQkgKi8KLQlhdG9taWNfaW5jKCZwYWdlLT5fY291bnQpOwogI2Vsc2UKIAkvKiBtb3ZlIG9mZnNldCB1cCB0byB0aGUgbmV4dCBjYWNoZSBsaW5lICovCiAJcnhfYnVmZmVyLT5wYWdlX29mZnNldCArPSB0cnVlc2l6ZTsKIAogCWlmIChyeF9idWZmZXItPnBhZ2Vfb2Zmc2V0ID4gKFBBR0VfU0laRSAtIElHQl9SWF9CVUZTWikpCiAJCXJldHVybiBmYWxzZTsKLQotCS8qIGJ1bXAgcmVmIGNvdW50IG9uIHBhZ2UgYmVmb3JlIGl0IGlzIGdpdmVuIHRvIHRoZSBzdGFjayAqLwotCWdldF9wYWdlKHBhZ2UpOwogI2VuZGlmCiAKKwkvKiBFdmVuIGlmIHdlIG93biB0aGUgcGFnZSwgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIHVzZSBhdG9taWNfc2V0KCkKKwkgKiBUaGlzIHdvdWxkIGJyZWFrIGdldF9wYWdlX3VubGVzc196ZXJvKCkgdXNlcnMuCisJICovCisJYXRvbWljX2luYygmcGFnZS0+X2NvdW50KTsKKwogCXJldHVybiB0cnVlOwogfQogCkBAIC02NjAzLDEzICs2NjU2LDEyIEBACiAKIAkJbWVtY3B5KF9fc2tiX3B1dChza2IsIHNpemUpLCB2YSwgQUxJR04oc2l6ZSwgc2l6ZW9mKGxvbmcpKSk7CiAKLQkJLyogd2UgY2FuIHJldXNlIGJ1ZmZlciBhcy1pcywganVzdCBtYWtlIHN1cmUgaXQgaXMgbG9jYWwgKi8KLQkJaWYgKGxpa2VseSgocGFnZV90b19uaWQocGFnZSkgPT0gbnVtYV9ub2RlX2lkKCkpICYmCi0JCQkgICAhcGFnZS0+cGZtZW1hbGxvYykpCisJCS8qIHBhZ2UgaXMgbm90IHJlc2VydmVkLCB3ZSBjYW4gcmV1c2UgYnVmZmVyIGFzLWlzICovCisJCWlmIChsaWtlbHkoIWlnYl9wYWdlX2lzX3Jlc2VydmVkKHBhZ2UpKSkKIAkJCXJldHVybiB0cnVlOwogCiAJCS8qIHRoaXMgcGFnZSBjYW5ub3QgYmUgcmV1c2VkIHNvIGRpc2NhcmQgaXQgKi8KLQkJcHV0X3BhZ2UocGFnZSk7CisJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCkBAIC02NjI3LDcgKzY2NzksNiBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCiAJcnhfYnVmZmVyID0gJnJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvW3J4X3JpbmctPm5leHRfdG9fY2xlYW5dOwotCiAJcGFnZSA9IHJ4X2J1ZmZlci0+cGFnZTsKIAlwcmVmZXRjaHcocGFnZSk7CiAKQEAgLTcwNDIsOCArNzA5Myw4IEBACiAJCQlpIC09IHJ4X3JpbmctPmNvdW50OwogCQl9CiAKLQkJLyogY2xlYXIgdGhlIGhkcl9hZGRyIGZvciB0aGUgbmV4dF90b191c2UgZGVzY3JpcHRvciAqLwotCQlyeF9kZXNjLT5yZWFkLmhkcl9hZGRyID0gMDsKKwkJLyogY2xlYXIgdGhlIHN0YXR1cyBiaXRzIGZvciB0aGUgbmV4dF90b191c2UgZGVzY3JpcHRvciAqLworCQlyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNfZXJyb3IgPSAwOwogCiAJCWNsZWFuZWRfY291bnQtLTsKIAl9IHdoaWxlIChjbGVhbmVkX2NvdW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvaWdiX3B0cC5jCmluZGV4IDc5NGMxMzkuLmQyMGZjOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9pZ2JfcHRwLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2lnYl9wdHAuYwpAQCAtMjU2LDE0ICsyNTYsOSBAQAogCXN0cnVjdCBpZ2JfYWRhcHRlciAqaWdiID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IGlnYl9hZGFwdGVyLAogCQkJCQkgICAgICAgcHRwX2NhcHMpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JczY0IG5vdzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpZ2ItPnRtcmVnX2xvY2ssIGZsYWdzKTsKLQotCW5vdyA9IHRpbWVjb3VudGVyX3JlYWQoJmlnYi0+dGMpOwotCW5vdyArPSBkZWx0YTsKLQl0aW1lY291bnRlcl9pbml0KCZpZ2ItPnRjLCAmaWdiLT5jYywgbm93KTsKLQorCXRpbWVjb3VudGVyX2FkanRpbWUoJmlnYi0+dGMsIGRlbHRhKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZ2ItPnRtcmVnX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtMzYwLDEyICszNTUsMjM5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGlnYl9waW5fZGlyZWN0aW9uKGludCBwaW4sIGludCBpbnB1dCwgdTMyICpjdHJsLCB1MzIgKmN0cmxfZXh0KQoreworCXUzMiAqcHRyID0gcGluIDwgMiA/IGN0cmwgOiBjdHJsX2V4dDsKKwl1MzIgbWFza1tJR0JfTl9TRFBdID0geworCQlFMTAwMF9DVFJMX1NEUDBfRElSLAorCQlFMTAwMF9DVFJMX1NEUDFfRElSLAorCQlFMTAwMF9DVFJMX0VYVF9TRFAyX0RJUiwKKwkJRTEwMDBfQ1RSTF9FWFRfU0RQM19ESVIsCisJfTsKKworCWlmIChpbnB1dCkKKwkJKnB0ciAmPSB+bWFza1twaW5dOworCWVsc2UKKwkJKnB0ciB8PSBtYXNrW3Bpbl07Cit9CisKK3N0YXRpYyB2b2lkIGlnYl9waW5fZXh0dHMoc3RydWN0IGlnYl9hZGFwdGVyICppZ2IsIGludCBjaGFuLCBpbnQgcGluKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmaWdiLT5odzsKKwl1MzIgYXV4MF9zZWxfc2RwW0lHQl9OX1NEUF0gPSB7CisJCUFVWDBfU0VMX1NEUDAsIEFVWDBfU0VMX1NEUDEsIEFVWDBfU0VMX1NEUDIsIEFVWDBfU0VMX1NEUDMsCisJfTsKKwl1MzIgYXV4MV9zZWxfc2RwW0lHQl9OX1NEUF0gPSB7CisJCUFVWDFfU0VMX1NEUDAsIEFVWDFfU0VMX1NEUDEsIEFVWDFfU0VMX1NEUDIsIEFVWDFfU0VMX1NEUDMsCisJfTsKKwl1MzIgdHNfc2RwX2VuW0lHQl9OX1NEUF0gPSB7CisJCVRTX1NEUDBfRU4sIFRTX1NEUDFfRU4sIFRTX1NEUDJfRU4sIFRTX1NEUDNfRU4sCisJfTsKKwl1MzIgY3RybCwgY3RybF9leHQsIHRzc2RwID0gMDsKKworCWN0cmwgPSByZDMyKEUxMDAwX0NUUkwpOworCWN0cmxfZXh0ID0gcmQzMihFMTAwMF9DVFJMX0VYVCk7CisJdHNzZHAgPSByZDMyKEUxMDAwX1RTU0RQKTsKKworCWlnYl9waW5fZGlyZWN0aW9uKHBpbiwgMSwgJmN0cmwsICZjdHJsX2V4dCk7CisKKwkvKiBNYWtlIHN1cmUgdGhpcyBwaW4gaXMgbm90IGVuYWJsZWQgYXMgYW4gb3V0cHV0LiAqLworCXRzc2RwICY9IH50c19zZHBfZW5bcGluXTsKKworCWlmIChjaGFuID09IDEpIHsKKwkJdHNzZHAgJj0gfkFVWDFfU0VMX1NEUDM7CisJCXRzc2RwIHw9IGF1eDFfc2VsX3NkcFtwaW5dIHwgQVVYMV9UU19TRFBfRU47CisJfSBlbHNlIHsKKwkJdHNzZHAgJj0gfkFVWDBfU0VMX1NEUDM7CisJCXRzc2RwIHw9IGF1eDBfc2VsX3NkcFtwaW5dIHwgQVVYMF9UU19TRFBfRU47CisJfQorCisJd3IzMihFMTAwMF9UU1NEUCwgdHNzZHApOworCXdyMzIoRTEwMDBfQ1RSTCwgY3RybCk7CisJd3IzMihFMTAwMF9DVFJMX0VYVCwgY3RybF9leHQpOworfQorCitzdGF0aWMgdm9pZCBpZ2JfcGluX3Blcm91dChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmlnYiwgaW50IGNoYW4sIGludCBwaW4pCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZpZ2ItPmh3OworCXUzMiBhdXgwX3NlbF9zZHBbSUdCX05fU0RQXSA9IHsKKwkJQVVYMF9TRUxfU0RQMCwgQVVYMF9TRUxfU0RQMSwgQVVYMF9TRUxfU0RQMiwgQVVYMF9TRUxfU0RQMywKKwl9OworCXUzMiBhdXgxX3NlbF9zZHBbSUdCX05fU0RQXSA9IHsKKwkJQVVYMV9TRUxfU0RQMCwgQVVYMV9TRUxfU0RQMSwgQVVYMV9TRUxfU0RQMiwgQVVYMV9TRUxfU0RQMywKKwl9OworCXUzMiB0c19zZHBfZW5bSUdCX05fU0RQXSA9IHsKKwkJVFNfU0RQMF9FTiwgVFNfU0RQMV9FTiwgVFNfU0RQMl9FTiwgVFNfU0RQM19FTiwKKwl9OworCXUzMiB0c19zZHBfc2VsX3R0MFtJR0JfTl9TRFBdID0geworCQlUU19TRFAwX1NFTF9UVDAsIFRTX1NEUDFfU0VMX1RUMCwKKwkJVFNfU0RQMl9TRUxfVFQwLCBUU19TRFAzX1NFTF9UVDAsCisJfTsKKwl1MzIgdHNfc2RwX3NlbF90dDFbSUdCX05fU0RQXSA9IHsKKwkJVFNfU0RQMF9TRUxfVFQxLCBUU19TRFAxX1NFTF9UVDEsCisJCVRTX1NEUDJfU0VMX1RUMSwgVFNfU0RQM19TRUxfVFQxLAorCX07CisJdTMyIHRzX3NkcF9zZWxfY2xyW0lHQl9OX1NEUF0gPSB7CisJCVRTX1NEUDBfU0VMX0ZDMSwgVFNfU0RQMV9TRUxfRkMxLAorCQlUU19TRFAyX1NFTF9GQzEsIFRTX1NEUDNfU0VMX0ZDMSwKKwl9OworCXUzMiBjdHJsLCBjdHJsX2V4dCwgdHNzZHAgPSAwOworCisJY3RybCA9IHJkMzIoRTEwMDBfQ1RSTCk7CisJY3RybF9leHQgPSByZDMyKEUxMDAwX0NUUkxfRVhUKTsKKwl0c3NkcCA9IHJkMzIoRTEwMDBfVFNTRFApOworCisJaWdiX3Bpbl9kaXJlY3Rpb24ocGluLCAwLCAmY3RybCwgJmN0cmxfZXh0KTsKKworCS8qIE1ha2Ugc3VyZSB0aGlzIHBpbiBpcyBub3QgZW5hYmxlZCBhcyBhbiBpbnB1dC4gKi8KKwlpZiAoKHRzc2RwICYgQVVYMF9TRUxfU0RQMykgPT0gYXV4MF9zZWxfc2RwW3Bpbl0pCisJCXRzc2RwICY9IH5BVVgwX1RTX1NEUF9FTjsKKworCWlmICgodHNzZHAgJiBBVVgxX1NFTF9TRFAzKSA9PSBhdXgxX3NlbF9zZHBbcGluXSkKKwkJdHNzZHAgJj0gfkFVWDFfVFNfU0RQX0VOOworCisJdHNzZHAgJj0gfnRzX3NkcF9zZWxfY2xyW3Bpbl07CisJaWYgKGNoYW4gPT0gMSkKKwkJdHNzZHAgfD0gdHNfc2RwX3NlbF90dDFbcGluXTsKKwllbHNlCisJCXRzc2RwIHw9IHRzX3NkcF9zZWxfdHQwW3Bpbl07CisKKwl0c3NkcCB8PSB0c19zZHBfZW5bcGluXTsKKworCXdyMzIoRTEwMDBfVFNTRFAsIHRzc2RwKTsKKwl3cjMyKEUxMDAwX0NUUkwsIGN0cmwpOworCXdyMzIoRTEwMDBfQ1RSTF9FWFQsIGN0cmxfZXh0KTsKK30KKworc3RhdGljIGludCBpZ2JfcHRwX2ZlYXR1cmVfZW5hYmxlX2kyMTAoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsCisJCQkJICAgICAgIHN0cnVjdCBwdHBfY2xvY2tfcmVxdWVzdCAqcnEsIGludCBvbikKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmlnYiA9CisJCWNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCBpZ2JfYWRhcHRlciwgcHRwX2NhcHMpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmaWdiLT5odzsKKwl1MzIgdHNhdXhjLCB0c2ltLCB0c2F1eGNfbWFzaywgdHNpbV9tYXNrLCB0cmd0dGltbCwgdHJndHRpbWg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisJaW50IHBpbjsKKwlzNjQgbnM7CisKKwlzd2l0Y2ggKHJxLT50eXBlKSB7CisJY2FzZSBQVFBfQ0xLX1JFUV9FWFRUUzoKKwkJaWYgKG9uKSB7CisJCQlwaW4gPSBwdHBfZmluZF9waW4oaWdiLT5wdHBfY2xvY2ssIFBUUF9QRl9FWFRUUywKKwkJCQkJICAgcnEtPmV4dHRzLmluZGV4KTsKKwkJCWlmIChwaW4gPCAwKQorCQkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJaWYgKHJxLT5leHR0cy5pbmRleCA9PSAxKSB7CisJCQl0c2F1eGNfbWFzayA9IFRTQVVYQ19FTl9UUzE7CisJCQl0c2ltX21hc2sgPSBUU0lOVFJfQVVUVDE7CisJCX0gZWxzZSB7CisJCQl0c2F1eGNfbWFzayA9IFRTQVVYQ19FTl9UUzA7CisJCQl0c2ltX21hc2sgPSBUU0lOVFJfQVVUVDA7CisJCX0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlnYi0+dG1yZWdfbG9jaywgZmxhZ3MpOworCQl0c2F1eGMgPSByZDMyKEUxMDAwX1RTQVVYQyk7CisJCXRzaW0gPSByZDMyKEUxMDAwX1RTSU0pOworCQlpZiAob24pIHsKKwkJCWlnYl9waW5fZXh0dHMoaWdiLCBycS0+ZXh0dHMuaW5kZXgsIHBpbik7CisJCQl0c2F1eGMgfD0gdHNhdXhjX21hc2s7CisJCQl0c2ltIHw9IHRzaW1fbWFzazsKKwkJfSBlbHNlIHsKKwkJCXRzYXV4YyAmPSB+dHNhdXhjX21hc2s7CisJCQl0c2ltICY9IH50c2ltX21hc2s7CisJCX0KKwkJd3IzMihFMTAwMF9UU0FVWEMsIHRzYXV4Yyk7CisJCXdyMzIoRTEwMDBfVFNJTSwgdHNpbSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlnYi0+dG1yZWdfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gMDsKKworCWNhc2UgUFRQX0NMS19SRVFfUEVST1VUOgorCQlpZiAob24pIHsKKwkJCXBpbiA9IHB0cF9maW5kX3BpbihpZ2ItPnB0cF9jbG9jaywgUFRQX1BGX1BFUk9VVCwKKwkJCQkJICAgcnEtPnBlcm91dC5pbmRleCk7CisJCQlpZiAocGluIDwgMCkKKwkJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJCXRzLnR2X3NlYyA9IHJxLT5wZXJvdXQucGVyaW9kLnNlYzsKKwkJdHMudHZfbnNlYyA9IHJxLT5wZXJvdXQucGVyaW9kLm5zZWM7CisJCW5zID0gdGltZXNwZWNfdG9fbnMoJnRzKTsKKwkJbnMgPSBucyA+PiAxOworCQlpZiAob24gJiYgbnMgPCA1MDAwMDBMTCkgeworCQkJLyogMmsgaW50ZXJydXB0cyBwZXIgc2Vjb25kIGlzIGFuIGF3ZnVsIGxvdC4gKi8KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXRzID0gbnNfdG9fdGltZXNwZWMobnMpOworCQlpZiAocnEtPnBlcm91dC5pbmRleCA9PSAxKSB7CisJCQl0c2F1eGNfbWFzayA9IFRTQVVYQ19FTl9UVDE7CisJCQl0c2ltX21hc2sgPSBUU0lOVFJfVFQxOworCQkJdHJndHRpbWwgPSBFMTAwMF9UUkdUVElNTDE7CisJCQl0cmd0dGltaCA9IEUxMDAwX1RSR1RUSU1IMTsKKwkJfSBlbHNlIHsKKwkJCXRzYXV4Y19tYXNrID0gVFNBVVhDX0VOX1RUMDsKKwkJCXRzaW1fbWFzayA9IFRTSU5UUl9UVDA7CisJCQl0cmd0dGltbCA9IEUxMDAwX1RSR1RUSU1MMDsKKwkJCXRyZ3R0aW1oID0gRTEwMDBfVFJHVFRJTUgwOworCQl9CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpZ2ItPnRtcmVnX2xvY2ssIGZsYWdzKTsKKwkJdHNhdXhjID0gcmQzMihFMTAwMF9UU0FVWEMpOworCQl0c2ltID0gcmQzMihFMTAwMF9UU0lNKTsKKwkJaWYgKG9uKSB7CisJCQlpbnQgaSA9IHJxLT5wZXJvdXQuaW5kZXg7CisKKwkJCWlnYl9waW5fcGVyb3V0KGlnYiwgaSwgcGluKTsKKwkJCWlnYi0+cGVyb3V0W2ldLnN0YXJ0LnR2X3NlYyA9IHJxLT5wZXJvdXQuc3RhcnQuc2VjOworCQkJaWdiLT5wZXJvdXRbaV0uc3RhcnQudHZfbnNlYyA9IHJxLT5wZXJvdXQuc3RhcnQubnNlYzsKKwkJCWlnYi0+cGVyb3V0W2ldLnBlcmlvZC50dl9zZWMgPSB0cy50dl9zZWM7CisJCQlpZ2ItPnBlcm91dFtpXS5wZXJpb2QudHZfbnNlYyA9IHRzLnR2X25zZWM7CisJCQl3cjMyKHRyZ3R0aW1sLCBycS0+cGVyb3V0LnN0YXJ0LnNlYyk7CisJCQl3cjMyKHRyZ3R0aW1oLCBycS0+cGVyb3V0LnN0YXJ0Lm5zZWMpOworCQkJdHNhdXhjIHw9IHRzYXV4Y19tYXNrOworCQkJdHNpbSB8PSB0c2ltX21hc2s7CisJCX0gZWxzZSB7CisJCQl0c2F1eGMgJj0gfnRzYXV4Y19tYXNrOworCQkJdHNpbSAmPSB+dHNpbV9tYXNrOworCQl9CisJCXdyMzIoRTEwMDBfVFNBVVhDLCB0c2F1eGMpOworCQl3cjMyKEUxMDAwX1RTSU0sIHRzaW0pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZ2ItPnRtcmVnX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFBUUF9DTEtfUkVRX1BQUzoKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlnYi0+dG1yZWdfbG9jaywgZmxhZ3MpOworCQl0c2ltID0gcmQzMihFMTAwMF9UU0lNKTsKKwkJaWYgKG9uKQorCQkJdHNpbSB8PSBUU0lOVFJfU1lTX1dSQVA7CisJCWVsc2UKKwkJCXRzaW0gJj0gflRTSU5UUl9TWVNfV1JBUDsKKwkJd3IzMihFMTAwMF9UU0lNLCB0c2ltKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWdiLT50bXJlZ19sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKwogc3RhdGljIGludCBpZ2JfcHRwX2ZlYXR1cmVfZW5hYmxlKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAogCQkJCSAgc3RydWN0IHB0cF9jbG9ja19yZXF1ZXN0ICpycSwgaW50IG9uKQogewogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAorc3RhdGljIGludCBpZ2JfcHRwX3ZlcmlmeV9waW4oc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHVuc2lnbmVkIGludCBwaW4sCisJCQkgICAgICBlbnVtIHB0cF9waW5fZnVuY3Rpb24gZnVuYywgdW5zaWduZWQgaW50IGNoYW4pCit7CisJc3dpdGNoIChmdW5jKSB7CisJY2FzZSBQVFBfUEZfTk9ORToKKwljYXNlIFBUUF9QRl9FWFRUUzoKKwljYXNlIFBUUF9QRl9QRVJPVVQ6CisJCWJyZWFrOworCWNhc2UgUFRQX1BGX1BIWVNZTkM6CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogaWdiX3B0cF90eF93b3JrCiAgKiBAd29yazogcG9pbnRlciB0byB3b3JrIHN0cnVjdApAQCAtNzU2LDYgKzk3OCw3IEBACiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBpOwogCiAJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKIAljYXNlIGUxMDAwXzgyNTc2OgpAQCAtNzcwLDcgKzk5Myw3IEBACiAJCWFkYXB0ZXItPnB0cF9jYXBzLnNldHRpbWUgPSBpZ2JfcHRwX3NldHRpbWVfODI1NzY7CiAJCWFkYXB0ZXItPnB0cF9jYXBzLmVuYWJsZSA9IGlnYl9wdHBfZmVhdHVyZV9lbmFibGU7CiAJCWFkYXB0ZXItPmNjLnJlYWQgPSBpZ2JfcHRwX3JlYWRfODI1NzY7Ci0JCWFkYXB0ZXItPmNjLm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKDY0KTsKKwkJYWRhcHRlci0+Y2MubWFzayA9IENZQ0xFQ09VTlRFUl9NQVNLKDY0KTsKIAkJYWRhcHRlci0+Y2MubXVsdCA9IDE7CiAJCWFkYXB0ZXItPmNjLnNoaWZ0ID0gSUdCXzgyNTc2X1RTWU5DX1NISUZUOwogCQkvKiBEaWFsIHRoZSBub21pbmFsIGZyZXF1ZW5jeS4gKi8KQEAgLTc5MCw3ICsxMDEzLDcgQEAKIAkJYWRhcHRlci0+cHRwX2NhcHMuc2V0dGltZSA9IGlnYl9wdHBfc2V0dGltZV84MjU3NjsKIAkJYWRhcHRlci0+cHRwX2NhcHMuZW5hYmxlID0gaWdiX3B0cF9mZWF0dXJlX2VuYWJsZTsKIAkJYWRhcHRlci0+Y2MucmVhZCA9IGlnYl9wdHBfcmVhZF84MjU4MDsKLQkJYWRhcHRlci0+Y2MubWFzayA9IENMT0NLU09VUkNFX01BU0soSUdCX05CSVRTXzgyNTgwKTsKKwkJYWRhcHRlci0+Y2MubWFzayA9IENZQ0xFQ09VTlRFUl9NQVNLKElHQl9OQklUU184MjU4MCk7CiAJCWFkYXB0ZXItPmNjLm11bHQgPSAxOwogCQlhZGFwdGVyLT5jYy5zaGlmdCA9IDA7CiAJCS8qIEVuYWJsZSB0aGUgdGltZXIgZnVuY3Rpb25zIGJ5IGNsZWFyaW5nIGJpdCAzMS4gKi8KQEAgLTc5OCwxNiArMTAyMSwyNyBAQAogCQlicmVhazsKIAljYXNlIGUxMDAwX2kyMTA6CiAJY2FzZSBlMTAwMF9pMjExOgorCQlmb3IgKGkgPSAwOyBpIDwgSUdCX05fU0RQOyBpKyspIHsKKwkJCXN0cnVjdCBwdHBfcGluX2Rlc2MgKnBwZCA9ICZhZGFwdGVyLT5zZHBfY29uZmlnW2ldOworCisJCQlzbnByaW50ZihwcGQtPm5hbWUsIHNpemVvZihwcGQtPm5hbWUpLCAiU0RQJWQiLCBpKTsKKwkJCXBwZC0+aW5kZXggPSBpOworCQkJcHBkLT5mdW5jID0gUFRQX1BGX05PTkU7CisJCX0KIAkJc25wcmludGYoYWRhcHRlci0+cHRwX2NhcHMubmFtZSwgMTYsICIlcG0iLCBuZXRkZXYtPmRldl9hZGRyKTsKIAkJYWRhcHRlci0+cHRwX2NhcHMub3duZXIgPSBUSElTX01PRFVMRTsKIAkJYWRhcHRlci0+cHRwX2NhcHMubWF4X2FkaiA9IDYyNDk5OTk5OwotCQlhZGFwdGVyLT5wdHBfY2Fwcy5uX2V4dF90cyA9IDA7Ci0JCWFkYXB0ZXItPnB0cF9jYXBzLnBwcyA9IDA7CisJCWFkYXB0ZXItPnB0cF9jYXBzLm5fZXh0X3RzID0gSUdCX05fRVhUVFM7CisJCWFkYXB0ZXItPnB0cF9jYXBzLm5fcGVyX291dCA9IElHQl9OX1BFUk9VVDsKKwkJYWRhcHRlci0+cHRwX2NhcHMubl9waW5zID0gSUdCX05fU0RQOworCQlhZGFwdGVyLT5wdHBfY2Fwcy5wcHMgPSAxOworCQlhZGFwdGVyLT5wdHBfY2Fwcy5waW5fY29uZmlnID0gYWRhcHRlci0+c2RwX2NvbmZpZzsKIAkJYWRhcHRlci0+cHRwX2NhcHMuYWRqZnJlcSA9IGlnYl9wdHBfYWRqZnJlcV84MjU4MDsKIAkJYWRhcHRlci0+cHRwX2NhcHMuYWRqdGltZSA9IGlnYl9wdHBfYWRqdGltZV9pMjEwOwogCQlhZGFwdGVyLT5wdHBfY2Fwcy5nZXR0aW1lID0gaWdiX3B0cF9nZXR0aW1lX2kyMTA7CiAJCWFkYXB0ZXItPnB0cF9jYXBzLnNldHRpbWUgPSBpZ2JfcHRwX3NldHRpbWVfaTIxMDsKLQkJYWRhcHRlci0+cHRwX2NhcHMuZW5hYmxlID0gaWdiX3B0cF9mZWF0dXJlX2VuYWJsZTsKKwkJYWRhcHRlci0+cHRwX2NhcHMuZW5hYmxlID0gaWdiX3B0cF9mZWF0dXJlX2VuYWJsZV9pMjEwOworCQlhZGFwdGVyLT5wdHBfY2Fwcy52ZXJpZnkgPSBpZ2JfcHRwX3ZlcmlmeV9waW47CiAJCS8qIEVuYWJsZSB0aGUgdGltZXIgZnVuY3Rpb25zIGJ5IGNsZWFyaW5nIGJpdCAzMS4gKi8KIAkJd3IzMihFMTAwMF9UU0FVWEMsIDB4MCk7CiAJCWJyZWFrOwpAQCAtOTA1LDYgKzExMzksNyBAQAogdm9pZCBpZ2JfcHRwX3Jlc2V0KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX1BUUCkpCiAJCXJldHVybjsKQEAgLTkxMiw2ICsxMTQ3LDggQEAKIAkvKiByZXNldCB0aGUgdHN0YW1wX2NvbmZpZyAqLwogCWlnYl9wdHBfc2V0X3RpbWVzdGFtcF9tb2RlKGFkYXB0ZXIsICZhZGFwdGVyLT50c3RhbXBfY29uZmlnKTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT50bXJlZ19sb2NrLCBmbGFncyk7CisKIAlzd2l0Y2ggKGFkYXB0ZXItPmh3Lm1hYy50eXBlKSB7CiAJY2FzZSBlMTAwMF84MjU3NjoKIAkJLyogRGlhbCB0aGUgbm9taW5hbCBmcmVxdWVuY3kuICovCkBAIC05MjIsMjMgKzExNTksMjUgQEAKIAljYXNlIGUxMDAwX2kzNTA6CiAJY2FzZSBlMTAwMF9pMjEwOgogCWNhc2UgZTEwMDBfaTIxMToKLQkJLyogRW5hYmxlIHRoZSB0aW1lciBmdW5jdGlvbnMgYW5kIGludGVycnVwdHMuICovCiAJCXdyMzIoRTEwMDBfVFNBVVhDLCAweDApOworCQl3cjMyKEUxMDAwX1RTU0RQLCAweDApOwogCQl3cjMyKEUxMDAwX1RTSU0sIFRTWU5DX0lOVEVSUlVQVFMpOwogCQl3cjMyKEUxMDAwX0lNUywgRTEwMDBfSU1TX1RTKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogTm8gd29yayB0byBkby4gKi8KLQkJcmV0dXJuOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBSZS1pbml0aWFsaXplIHRoZSB0aW1lci4gKi8KIAlpZiAoKGh3LT5tYWMudHlwZSA9PSBlMTAwMF9pMjEwKSB8fCAoaHctPm1hYy50eXBlID09IGUxMDAwX2kyMTEpKSB7CiAJCXN0cnVjdCB0aW1lc3BlYyB0cyA9IGt0aW1lX3RvX3RpbWVzcGVjKGt0aW1lX2dldF9yZWFsKCkpOwogCi0JCWlnYl9wdHBfc2V0dGltZV9pMjEwKCZhZGFwdGVyLT5wdHBfY2FwcywgJnRzKTsKKwkJaWdiX3B0cF93cml0ZV9pMjEwKGFkYXB0ZXIsICZ0cyk7CiAJfSBlbHNlIHsKIAkJdGltZWNvdW50ZXJfaW5pdCgmYWRhcHRlci0+dGMsICZhZGFwdGVyLT5jYywKIAkJCQkga3RpbWVfdG9fbnMoa3RpbWVfZ2V0X3JlYWwoKSkpOwogCX0KK291dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT50bXJlZ19sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2J2Zi9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jCmluZGV4IDYzYzgwN2MuLmViZjlkNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYnZmL25ldGRldi5jCkBAIC0xOTA3LDcgKzE5MDcsOCBAQAogCiBzdGF0aWMgaW50IGlnYnZmX3RzbyhzdHJ1Y3QgaWdidmZfYWRhcHRlciAqYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZ2J2Zl9yaW5nICp0eF9yaW5nLAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR4X2ZsYWdzLCB1OCAqaGRyX2xlbikKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdHhfZmxhZ3MsIHU4ICpoZHJfbGVuLAorCQkgICAgIF9fYmUxNiBwcm90b2NvbCkKIHsKIAlzdHJ1Y3QgZTEwMDBfYWR2X3R4X2NvbnRleHRfZGVzYyAqY29udGV4dF9kZXNjOwogCXN0cnVjdCBpZ2J2Zl9idWZmZXIgKmJ1ZmZlcl9pbmZvOwpAQCAtMTkyNyw3ICsxOTI4LDcgQEAKIAlsNGxlbiA9IHRjcF9oZHJsZW4oc2tiKTsKIAkqaGRyX2xlbiArPSBsNGxlbjsKIAotCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgeworCWlmIChwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKIAkJc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKIAkJaXBoLT50b3RfbGVuID0gMDsKIAkJaXBoLT5jaGVjayA9IDA7CkBAIC0xOTU4LDcgKzE5NTksNyBAQAogCS8qIEFEViBEVFlQIFRVQ01EIE1LUkxPQy9JU0NTSUhFRExFTiAqLwogCXR1X2NtZCB8PSAoRTEwMDBfVFhEX0NNRF9ERVhUIHwgRTEwMDBfQURWVFhEX0RUWVBfQ1RYVCk7CiAKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCisJaWYgKHByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJdHVfY21kIHw9IEUxMDAwX0FEVlRYRF9UVUNNRF9JUFY0OwogCXR1X2NtZCB8PSBFMTAwMF9BRFZUWERfVFVDTURfTDRUX1RDUDsKIApAQCAtMTk4NCw3ICsxOTg1LDggQEAKIAogc3RhdGljIGlubGluZSBib29sIGlnYnZmX3R4X2NzdW0oc3RydWN0IGlnYnZmX2FkYXB0ZXIgKmFkYXB0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWdidmZfcmluZyAqdHhfcmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eF9mbGFncykKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR4X2ZsYWdzLAorCQkJCSBfX2JlMTYgcHJvdG9jb2wpCiB7CiAJc3RydWN0IGUxMDAwX2Fkdl90eF9jb250ZXh0X2Rlc2MgKmNvbnRleHRfZGVzYzsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTIwMTEsNyArMjAxMyw3IEBACiAJCXR1X2NtZCB8PSAoRTEwMDBfVFhEX0NNRF9ERVhUIHwgRTEwMDBfQURWVFhEX0RUWVBfQ1RYVCk7CiAKIAkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKLQkJCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgeworCQkJc3dpdGNoIChwcm90b2NvbCkgewogCQkJY2FzZSBodG9ucyhFVEhfUF9JUCk6CiAJCQkJdHVfY21kIHw9IEUxMDAwX0FEVlRYRF9UVUNNRF9JUFY0OwogCQkJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApCkBAIC0yMjExLDYgKzIyMTMsNyBAQAogCXU4IGhkcl9sZW4gPSAwOwogCWludCBjb3VudCA9IDA7CiAJaW50IHRzbyA9IDA7CisJX19iZTE2IHByb3RvY29sID0gdmxhbl9nZXRfcHJvdG9jb2woc2tiKTsKIAogCWlmICh0ZXN0X2JpdChfX0lHQlZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKQEAgLTIyMzQsMTggKzIyMzcsMTkgQEAKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgewogCQl0eF9mbGFncyB8PSBJR0JWRl9UWF9GTEFHU19WTEFOOwotCQl0eF9mbGFncyB8PSAodmxhbl90eF90YWdfZ2V0KHNrYikgPDwgSUdCVkZfVFhfRkxBR1NfVkxBTl9TSElGVCk7CisJCXR4X2ZsYWdzIHw9IChza2Jfdmxhbl90YWdfZ2V0KHNrYikgPDwKKwkJCSAgICAgSUdCVkZfVFhfRkxBR1NfVkxBTl9TSElGVCk7CiAJfQogCi0JaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorCWlmIChwcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCiAJCXR4X2ZsYWdzIHw9IElHQlZGX1RYX0ZMQUdTX0lQVjQ7CiAKIAlmaXJzdCA9IHR4X3JpbmctPm5leHRfdG9fdXNlOwogCiAJdHNvID0gc2tiX2lzX2dzbyhza2IpID8KLQkJaWdidmZfdHNvKGFkYXB0ZXIsIHR4X3JpbmcsIHNrYiwgdHhfZmxhZ3MsICZoZHJfbGVuKSA6IDA7CisJCWlnYnZmX3RzbyhhZGFwdGVyLCB0eF9yaW5nLCBza2IsIHR4X2ZsYWdzLCAmaGRyX2xlbiwgcHJvdG9jb2wpIDogMDsKIAlpZiAodW5saWtlbHkodHNvIDwgMCkpIHsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKQEAgLTIyNTMsNyArMjI1Nyw3IEBACiAKIAlpZiAodHNvKQogCQl0eF9mbGFncyB8PSBJR0JWRl9UWF9GTEFHU19UU087Ci0JZWxzZSBpZiAoaWdidmZfdHhfY3N1bShhZGFwdGVyLCB0eF9yaW5nLCBza2IsIHR4X2ZsYWdzKSAmJgorCWVsc2UgaWYgKGlnYnZmX3R4X2NzdW0oYWRhcHRlciwgdHhfcmluZywgc2tiLCB0eF9mbGFncywgcHJvdG9jb2wpICYmCiAJICAgICAgICAgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKQogCQl0eF9mbGFncyB8PSBJR0JWRl9UWF9GTEFHU19DU1VNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiL2l4Z2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYi9peGdiX21haW4uYwppbmRleCBhYTg3NjA1Li4xMWExYmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiL2l4Z2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2IvaXhnYl9tYWluLmMKQEAgLTE1MzIsOSArMTUzMiw5IEBACiAgICAgICAgICAgICAgICAgICAgICBERVNDX05FRURFRCkpKQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKIAkJdHhfZmxhZ3MgfD0gSVhHQl9UWF9GTEFHU19WTEFOOwotCQl2bGFuX2lkID0gdmxhbl90eF90YWdfZ2V0KHNrYik7CisJCXZsYW5faWQgPSBza2Jfdmxhbl90YWdfZ2V0KHNrYik7CiAJfQogCiAJZmlyc3QgPSBhZGFwdGVyLT50eF9yaW5nLm5leHRfdG9fdXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlLmgKaW5kZXggYjYxMzdiZS4uN2RjYmJlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmUuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZS5oCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZWNvdW50ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRfdHN0YW1wLmg+CiAjaW5jbHVkZSA8bGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oPgogCkBAIC03Niw2ICs3Niw4IEBACiAjZGVmaW5lIElYR0JFX01BWF9SWEQJCQkgICA0MDk2CiAjZGVmaW5lIElYR0JFX01JTl9SWEQJCQkgICAgIDY0CiAKKyNkZWZpbmUgSVhHQkVfRVRIX1BfTExEUAkJIDB4ODhDQworCiAvKiBmbG93IGNvbnRyb2wgKi8KICNkZWZpbmUgSVhHQkVfTUlOX0ZDUlRMCQkJICAgMHg0MAogI2RlZmluZSBJWEdCRV9NQVhfRkNSVEwJCQkweDdGRjgwCkBAIC03NTMsNiArNzU1LDcgQEAKIAl1MzIgdGltZXJfZXZlbnRfYWNjdW11bGF0b3I7CiAJdTMyIHZmZXJyX3JlZmNvdW50OwogCXN0cnVjdCBpeGdiZV9tYWNfYWRkciAqbWFjX3RhYmxlOworCXUxNiB2eGxhbl9wb3J0OwogCXN0cnVjdCBrb2JqZWN0ICppbmZvX2tvYmo7CiAjaWZkZWYgQ09ORklHX0lYR0JFX0hXTU9OCiAJc3RydWN0IGh3bW9uX2J1ZmYgKml4Z2JlX2h3bW9uX2J1ZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMKaW5kZXggMmVkMmM3ZC4uNzBjYzRjNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9icmlkZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPHNjc2kvZmMvZmNfZmNvZS5oPgorI2luY2x1ZGUgPG5ldC92eGxhbi5oPgogCiAjaWZkZWYgQ09ORklHX09GCiAjaW5jbHVkZSA8bGludXgvb2ZfbmV0Lmg+CkBAIC0xMzk2LDEyICsxMzk3LDIzIEBACiAJCQkJICAgICB1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYywKIAkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJX19sZTE2IHBrdF9pbmZvID0gcnhfZGVzYy0+d2IubG93ZXIubG9fZHdvcmQuaHNfcnNzLnBrdF9pbmZvOworCV9fbGUxNiBoZHJfaW5mbyA9IHJ4X2Rlc2MtPndiLmxvd2VyLmxvX2R3b3JkLmhzX3Jzcy5oZHJfaW5mbzsKKwlib29sIGVuY2FwX3BrdCA9IGZhbHNlOworCiAJc2tiX2NoZWNrc3VtX25vbmVfYXNzZXJ0KHNrYik7CiAKIAkvKiBSeCBjc3VtIGRpc2FibGVkICovCiAJaWYgKCEocmluZy0+bmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfUlhDU1VNKSkKIAkJcmV0dXJuOwogCisJaWYgKChwa3RfaW5mbyAmIGNwdV90b19sZTE2KElYR0JFX1JYREFEVl9QS1RUWVBFX1ZYTEFOKSkgJiYKKwkgICAgKGhkcl9pbmZvICYgY3B1X3RvX2xlMTYoSVhHQkVfUlhEQURWX1BLVFRZUEVfVFVOTkVMID4+IDE2KSkpIHsKKwkJZW5jYXBfcGt0ID0gdHJ1ZTsKKwkJc2tiLT5lbmNhcHN1bGF0aW9uID0gMTsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCX0KKwogCS8qIGlmIElQIGFuZCBlcnJvciAqLwogCWlmIChpeGdiZV90ZXN0X3N0YXRlcnIocnhfZGVzYywgSVhHQkVfUlhEX1NUQVRfSVBDUykgJiYKIAkgICAgaXhnYmVfdGVzdF9zdGF0ZXJyKHJ4X2Rlc2MsIElYR0JFX1JYREFEVl9FUlJfSVBFKSkgewpAQCAtMTQxMyw4ICsxNDI1LDYgQEAKIAkJcmV0dXJuOwogCiAJaWYgKGl4Z2JlX3Rlc3Rfc3RhdGVycihyeF9kZXNjLCBJWEdCRV9SWERBRFZfRVJSX1RDUEUpKSB7Ci0JCV9fbGUxNiBwa3RfaW5mbyA9IHJ4X2Rlc2MtPndiLmxvd2VyLmxvX2R3b3JkLmhzX3Jzcy5wa3RfaW5mbzsKLQogCQkvKgogCQkgKiA4MjU5OSBlcnJhdGEsIFVEUCBmcmFtZXMgd2l0aCBhIDAgY2hlY2tzdW0gY2FuIGJlIG1hcmtlZCBhcwogCQkgKiBjaGVja3N1bSBlcnJvcnMuCkBAIC0xNDI5LDYgKzE0MzksMTcgQEAKIAogCS8qIEl0IG11c3QgYmUgYSBUQ1Agb3IgVURQIHBhY2tldCB3aXRoIGEgdmFsaWQgY2hlY2tzdW0gKi8KIAlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCWlmIChlbmNhcF9wa3QpIHsKKwkJaWYgKCFpeGdiZV90ZXN0X3N0YXRlcnIocnhfZGVzYywgSVhHQkVfUlhEX1NUQVRfT1VURVJJUENTKSkKKwkJCXJldHVybjsKKworCQlpZiAoaXhnYmVfdGVzdF9zdGF0ZXJyKHJ4X2Rlc2MsIElYR0JFX1JYREFEVl9FUlJfT1VURVJJUEVSKSkgeworCQkJcmluZy0+cnhfc3RhdHMuY3N1bV9lcnIrKzsKKwkJCXJldHVybjsKKwkJfQorCQkvKiBJZiB3ZSBjaGVja2VkIHRoZSBvdXRlciBoZWFkZXIgbGV0IHRoZSBzdGFjayBrbm93ICovCisJCXNrYi0+Y3N1bV9sZXZlbCA9IDE7CisJfQogfQogCiBzdGF0aWMgYm9vbCBpeGdiZV9hbGxvY19tYXBwZWRfcGFnZShzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZywKQEAgLTM1NjQsMTAgKzM1ODUsMjQgQEAKIAkvKiBFbmFibGUgTUFDIEFudGktU3Bvb2ZpbmcgKi8KIAlody0+bWFjLm9wcy5zZXRfbWFjX2FudGlfc3Bvb2ZpbmcoaHcsIChhZGFwdGVyLT5udW1fdmZzICE9IDApLAogCQkJCQkgIGFkYXB0ZXItPm51bV92ZnMpOworCisJLyogRW5zdXJlIExMRFAgaXMgc2V0IGZvciBFdGhlcnR5cGUgQW50aXNwb29maW5nIGlmIHdlIHdpbGwgYmUKKwkgKiBjYWxsaW5nIHNldF9ldGhlcnR5cGVfYW50aV9zcG9vZmluZyBmb3IgZWFjaCBWRiBpbiBsb29wIGJlbG93CisJICovCisJaWYgKGh3LT5tYWMub3BzLnNldF9ldGhlcnR5cGVfYW50aV9zcG9vZmluZykKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FVFFGKElYR0JFX0VUUUZfRklMVEVSX0xMRFApLAorCQkJCShJWEdCRV9FVFFGX0ZJTFRFUl9FTiAgICB8IC8qIGVuYWJsZSBmaWx0ZXIgKi8KKwkJCQkgSVhHQkVfRVRRRl9UWF9BTlRJU1BPT0YgfCAvKiB0eCBhbnRpc3Bvb2YgKi8KKwkJCQkgSVhHQkVfRVRIX1BfTExEUCkpOwkgICAvKiBMTERQIGV0aCB0eXBlICovCisKIAkvKiBGb3IgVkZzIHRoYXQgaGF2ZSBzcG9vZiBjaGVja2luZyB0dXJuZWQgb2ZmICovCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV92ZnM7IGkrKykgewogCQlpZiAoIWFkYXB0ZXItPnZmaW5mb1tpXS5zcG9vZmNoa19lbmFibGVkKQogCQkJaXhnYmVfbmRvX3NldF92Zl9zcG9vZmNoayhhZGFwdGVyLT5uZXRkZXYsIGksIGZhbHNlKTsKKworCQkvKiBlbmFibGUgZXRoZXJ0eXBlIGFudGkgc3Bvb2ZpbmcgaWYgaHcgc3VwcG9ydHMgaXQgKi8KKwkJaWYgKGh3LT5tYWMub3BzLnNldF9ldGhlcnR5cGVfYW50aV9zcG9vZmluZykKKwkJCWh3LT5tYWMub3BzLnNldF9ldGhlcnR5cGVfYW50aV9zcG9vZmluZyhodywgdHJ1ZSwgaSk7CiAJfQogfQogCkBAIC01NjI3LDYgKzU2NjIsMTAgQEAKIAogCWl4Z2JlX3VwX2NvbXBsZXRlKGFkYXB0ZXIpOwogCisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVhHQkVfVlhMQU4pCisJdnhsYW5fZ2V0X3J4X3BvcnQobmV0ZGV2KTsKKworI2VuZGlmCiAJcmV0dXJuIDA7CiAKIGVycl9zZXRfcXVldWVzOgpAQCAtNzIxNyw4ICs3MjU2LDggQEAKIAlmaXJzdC0+Z3NvX3NlZ3MgPSAxOwogCiAJLyogaWYgd2UgaGF2ZSBhIEhXIFZMQU4gdGFnIGJlaW5nIGFkZGVkIGRlZmF1bHQgdG8gdGhlIEhXIG9uZSAqLwotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJdHhfZmxhZ3MgfD0gdmxhbl90eF90YWdfZ2V0KHNrYikgPDwgSVhHQkVfVFhfRkxBR1NfVkxBTl9TSElGVDsKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgeworCQl0eF9mbGFncyB8PSBza2Jfdmxhbl90YWdfZ2V0KHNrYikgPDwgSVhHQkVfVFhfRkxBR1NfVkxBTl9TSElGVDsKIAkJdHhfZmxhZ3MgfD0gSVhHQkVfVFhfRkxBR1NfSFdfVkxBTjsKIAkvKiBlbHNlIGlmIGl0IGlzIGEgU1cgVkxBTiBjaGVjayB0aGUgbmV4dCBwcm90b2NvbCBhbmQgc3RvcmUgdGhlIHRhZyAqLwogCX0gZWxzZSBpZiAocHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7CkBAIC03MjI3LDExICs3MjY2LDExIEBACiAJCWlmICghdmhkcikKIAkJCWdvdG8gb3V0X2Ryb3A7CiAKLQkJcHJvdG9jb2wgPSB2aGRyLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOwogCQl0eF9mbGFncyB8PSBudG9ocyh2aGRyLT5oX3ZsYW5fVENJKSA8PAogCQkJCSAgSVhHQkVfVFhfRkxBR1NfVkxBTl9TSElGVDsKIAkJdHhfZmxhZ3MgfD0gSVhHQkVfVFhfRkxBR1NfU1dfVkxBTjsKIAl9CisJcHJvdG9jb2wgPSB2bGFuX2dldF9wcm90b2NvbChza2IpOwogCiAJaWYgKHVubGlrZWx5KHNrYl9zaGluZm8oc2tiKS0+dHhfZmxhZ3MgJiBTS0JUWF9IV19UU1RBTVApICYmCiAJICAgIGFkYXB0ZXItPnB0cF9jbG9jayAmJgpAQCAtNzc3MSw2ICs3ODEwLDY0IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICogaXhnYmVfYWRkX3Z4bGFuX3BvcnQgLSBHZXQgbm90aWZpY2F0aW9ucyBhYm91dCBWWExBTiBwb3J0cyB0aGF0IGNvbWUgdXAKKyAqIEBkZXY6IFRoZSBwb3J0J3MgbmV0ZGV2CisgKiBAc2FfZmFtaWx5OiBTb2NrZXQgRmFtaWx5IHRoYXQgVlhMQU4gaXMgbm90aWZpeWluZyB1cyBhYm91dAorICogQHBvcnQ6IE5ldyBVRFAgcG9ydCBudW1iZXIgdGhhdCBWWExBTiBzdGFydGVkIGxpc3RlbmluZyB0bworICoqLworc3RhdGljIHZvaWQgaXhnYmVfYWRkX3Z4bGFuX3BvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5LAorCQkJCSBfX2JlMTYgcG9ydCkKK3sKKwlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MTYgbmV3X3BvcnQgPSBudG9ocyhwb3J0KTsKKworCWlmIChzYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisJCXJldHVybjsKKworCWlmIChhZGFwdGVyLT52eGxhbl9wb3J0ID09IG5ld19wb3J0KSB7CisJCW5ldGRldl9pbmZvKGRldiwgIlBvcnQgJWQgYWxyZWFkeSBvZmZsb2FkZWRcbiIsIG5ld19wb3J0KTsKKwkJcmV0dXJuOworCX0KKworCWlmIChhZGFwdGVyLT52eGxhbl9wb3J0KSB7CisJCW5ldGRldl9pbmZvKGRldiwKKwkJCSAgICAiSGl0IE1heCBudW0gb2YgVURQIHBvcnRzLCBub3QgYWRkaW5nIHBvcnQgJWRcbiIsCisJCQkgICAgbmV3X3BvcnQpOworCQlyZXR1cm47CisJfQorCisJYWRhcHRlci0+dnhsYW5fcG9ydCA9IG5ld19wb3J0OworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlhMQU5DVFJMLCBuZXdfcG9ydCk7Cit9CisKKy8qKgorICogaXhnYmVfZGVsX3Z4bGFuX3BvcnQgLSBHZXQgbm90aWZpY2F0aW9ucyBhYm91dCBWWExBTiBwb3J0cyB0aGF0IGdvIGF3YXkKKyAqIEBkZXY6IFRoZSBwb3J0J3MgbmV0ZGV2CisgKiBAc2FfZmFtaWx5OiBTb2NrZXQgRmFtaWx5IHRoYXQgVlhMQU4gaXMgbm90aWZ5aW5nIHVzIGFib3V0CisgKiBAcG9ydDogVURQIHBvcnQgbnVtYmVyIHRoYXQgVlhMQU4gc3RvcHBlZCBsaXN0ZW5pbmcgdG8KKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JlX2RlbF92eGxhbl9wb3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHNhX2ZhbWlseV90IHNhX2ZhbWlseSwKKwkJCQkgX19iZTE2IHBvcnQpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTE2IG5ld19wb3J0ID0gbnRvaHMocG9ydCk7CisKKwlpZiAoc2FfZmFtaWx5ID09IEFGX0lORVQ2KQorCQlyZXR1cm47CisKKwlpZiAoYWRhcHRlci0+dnhsYW5fcG9ydCAhPSBuZXdfcG9ydCkgeworCQluZXRkZXZfaW5mbyhkZXYsICJQb3J0ICVkIHdhcyBub3QgZm91bmQsIG5vdCBkZWxldGluZ1xuIiwKKwkJCSAgICBuZXdfcG9ydCk7CisJCXJldHVybjsKKwl9CisKKwlhZGFwdGVyLT52eGxhbl9wb3J0ID0gMDsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZYTEFOQ1RSTCwgMCk7Cit9CisKIHN0YXRpYyBpbnQgaXhnYmVfbmRvX2ZkYl9hZGQoc3RydWN0IG5kbXNnICpuZG0sIHN0cnVjdCBubGF0dHIgKnRiW10sCiAJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQsCkBAIC03Nzg2LDcgKzc4ODMsNyBAQAogfQogCiBzdGF0aWMgaW50IGl4Z2JlX25kb19icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKKwkJCQkgICAgc3RydWN0IG5sbXNnaGRyICpubGgsIHUxNiBmbGFncykKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5sYXR0ciAqYXR0ciwgKmJyX3NwZWM7CkBAIC03OTgyLDYgKzgwNzksOCBAQAogCS5uZG9fYnJpZGdlX2dldGxpbmsJPSBpeGdiZV9uZG9fYnJpZGdlX2dldGxpbmssCiAJLm5kb19kZndkX2FkZF9zdGF0aW9uCT0gaXhnYmVfZndkX2FkZCwKIAkubmRvX2Rmd2RfZGVsX3N0YXRpb24JPSBpeGdiZV9md2RfZGVsLAorCS5uZG9fYWRkX3Z4bGFuX3BvcnQJPSBpeGdiZV9hZGRfdnhsYW5fcG9ydCwKKwkubmRvX2RlbF92eGxhbl9wb3J0CT0gaXhnYmVfZGVsX3Z4bGFuX3BvcnQsCiB9OwogCiAvKioKQEAgLTgzMzksNiArODQzOCwxNSBAQAogCW5ldGRldi0+cHJpdl9mbGFncyB8PSBJRkZfVU5JQ0FTVF9GTFQ7CiAJbmV0ZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9TVVBQX05PRkNTOwogCisJc3dpdGNoIChhZGFwdGVyLT5ody5tYWMudHlwZSkgeworCWNhc2UgaXhnYmVfbWFjX1g1NTA6CisJY2FzZSBpeGdiZV9tYWNfWDU1MEVNX3g6CisJCW5ldGRldi0+aHdfZW5jX2ZlYXR1cmVzIHw9IE5FVElGX0ZfUlhDU1VNOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJbmV0ZGV2LT5kY2JubF9vcHMgPSAmZGNibmxfb3BzOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3B0cC5jCmluZGV4IDVmZDRiNTIuLjc5YzAwZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3B0cC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3B0cC5jCkBAIC0yNjEsMTggKzI2MSw5IEBACiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPQogCQljb250YWluZXJfb2YocHRwLCBzdHJ1Y3QgaXhnYmVfYWRhcHRlciwgcHRwX2NhcHMpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTY0IG5vdzsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT50bXJlZ19sb2NrLCBmbGFncyk7Ci0KLQlub3cgPSB0aW1lY291bnRlcl9yZWFkKCZhZGFwdGVyLT50Yyk7Ci0Jbm93ICs9IGRlbHRhOwotCi0JLyogcmVzZXQgdGhlIHRpbWVjb3VudGVyICovCi0JdGltZWNvdW50ZXJfaW5pdCgmYWRhcHRlci0+dGMsCi0JCQkgJmFkYXB0ZXItPmNjLAotCQkJIG5vdyk7Ci0KKwl0aW1lY291bnRlcl9hZGp0aW1lKCZhZGFwdGVyLT50YywgZGVsdGEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnRtcmVnX2xvY2ssIGZsYWdzKTsKIAogCWl4Z2JlX3B0cF9zZXR1cF9zZHAoYWRhcHRlcik7CkBAIC04MDIsNyArNzkzLDcgQEAKIAogCW1lbXNldCgmYWRhcHRlci0+Y2MsIDAsIHNpemVvZihhZGFwdGVyLT5jYykpOwogCWFkYXB0ZXItPmNjLnJlYWQgPSBpeGdiZV9wdHBfcmVhZDsKLQlhZGFwdGVyLT5jYy5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCk7CisJYWRhcHRlci0+Y2MubWFzayA9IENZQ0xFQ09VTlRFUl9NQVNLKDY0KTsKIAlhZGFwdGVyLT5jYy5zaGlmdCA9IHNoaWZ0OwogCWFkYXB0ZXItPmNjLm11bHQgPSAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfc3Jpb3YuYwppbmRleCBjNzZiYTkwLi43ZjM3ZmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV9zcmlvdi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3NyaW92LmMKQEAgLTEwMSw5ICsxMDEsNiBAQAogCQkJYWRhcHRlci0+ZGNiX2NmZy5udW1fdGNzLnBmY190Y3MgPSAxOwogCQl9CiAKLQkJLyogV2UgZG8gbm90IHN1cHBvcnQgUlNTIHcvIFNSLUlPViAqLwotCQlhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX1JTU10ubGltaXQgPSAxOwotCiAJCS8qIERpc2FibGUgUlNDIHdoZW4gaW4gU1ItSU9WIG1vZGUgKi8KIAkJYWRhcHRlci0+ZmxhZ3MyICY9IH4oSVhHQkVfRkxBRzJfUlNDX0NBUEFCTEUgfAogCQkJCSAgICAgSVhHQkVfRkxBRzJfUlNDX0VOQUJMRUQpOwpAQCAtMTA5NywxNCArMTA5NCwxMiBAQAogCQkJCSAgdTE2IHZsYW4sIHU4IHFvcykKIHsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCWludCBlcnIgPSAwOworCWludCBlcnI7CiAKLQlpZiAoYWRhcHRlci0+dmZpbmZvW3ZmXS5wZl92bGFuKQotCQllcnIgPSBpeGdiZV9zZXRfdmZfdmxhbihhZGFwdGVyLCBmYWxzZSwKLQkJCQkJYWRhcHRlci0+dmZpbmZvW3ZmXS5wZl92bGFuLAotCQkJCQl2Zik7CisJZXJyID0gaXhnYmVfc2V0X3ZmX3ZsYW4oYWRhcHRlciwgdHJ1ZSwgdmxhbiwgdmYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OworCiAJaXhnYmVfc2V0X3ZtdmlyKGFkYXB0ZXIsIHZsYW4sIHFvcywgdmYpOwogCWl4Z2JlX3NldF92bW9scihodywgdmYsIGZhbHNlKTsKIAlpZiAoYWRhcHRlci0+dmZpbmZvW3ZmXS5zcG9vZmNoa19lbmFibGVkKQpAQCAtMTE0Myw2ICsxMTM4LDExIEBACiAJaHctPm1hYy5vcHMuc2V0X3ZsYW5fYW50aV9zcG9vZmluZyhodywgZmFsc2UsIHZmKTsKIAlpZiAoYWRhcHRlci0+dmZpbmZvW3ZmXS52bGFuX2NvdW50KQogCQlhZGFwdGVyLT52ZmluZm9bdmZdLnZsYW5fY291bnQtLTsKKworCS8qIGRpc2FibGUgaGlkZSBWTEFOIG9uIFg1NTAgKi8KKwlpZiAoaHctPm1hYy50eXBlID49IGl4Z2JlX21hY19YNTUwKQorCQlpeGdiZV93cml0ZV9xZGUoYWRhcHRlciwgdmYsIElYR0JFX1FERV9FTkFCTEUpOworCiAJYWRhcHRlci0+dmZpbmZvW3ZmXS5wZl92bGFuID0gMDsKIAlhZGFwdGVyLT52ZmluZm9bdmZdLnBmX3FvcyA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3R5cGUuaAppbmRleCBkMTAxYjI1Li5mYzVlY2VlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfdHlwZS5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3R5cGUuaApAQCAtMzc4LDYgKzM3OCw4IEBACiAjZGVmaW5lIElYR0JFX1NQT09GX01BQ0FTX01BU0sgICAgICAgICAgMHhGRgogI2RlZmluZSBJWEdCRV9TUE9PRl9WTEFOQVNfTUFTSyAgICAgICAgIDB4RkYwMAogI2RlZmluZSBJWEdCRV9TUE9PRl9WTEFOQVNfU0hJRlQgICAgICAgIDgKKyNkZWZpbmUgSVhHQkVfU1BPT0ZfRVRIRVJUWVBFQVMJCTB4RkYwMDAwMDAKKyNkZWZpbmUgSVhHQkVfU1BPT0ZfRVRIRVJUWVBFQVNfU0hJRlQJMTYKICNkZWZpbmUgSVhHQkVfUEZWRlNQT09GX1JFR19DT1VOVCAgICAgICA4CiAKICNkZWZpbmUgSVhHQkVfRENBX1RYQ1RSTChfaSkgICAgKDB4MDcyMDAgKyAoKF9pKSAqIDQpKSAvKiAxNiBvZiB0aGVzZSAoMC0xNSkgKi8KQEAgLTM5OSw2ICs0MDEsNyBAQAogCiAjZGVmaW5lIElYR0JFX1dVUEwgICAgICAweDA1OTAwCiAjZGVmaW5lIElYR0JFX1dVUE0gICAgICAweDA1QTAwIC8qIHdha2UgdXAgcGt0IG1lbW9yeSAweDVBMDAtMHg1QTdDICovCisjZGVmaW5lIElYR0JFX1ZYTEFOQ1RSTAkweDAwMDA1MDdDIC8qIFJ4IGZpbHRlciBWWExBTiBVRFBQT1JUIFJlZ2lzdGVyICovCiAjZGVmaW5lIElYR0JFX0ZIRlQoX24pCSgweDA5MDAwICsgKChfbikgKiAweDEwMCkpIC8qIEZsZXggaG9zdCBmaWx0ZXIgdGFibGUgKi8KICNkZWZpbmUgSVhHQkVfRkhGVF9FWFQoX24pCSgweDA5ODAwICsgKChfbikgKiAweDEwMCkpIC8qIEV4dCBGbGV4aWJsZSBIb3N0CiAJCQkJCQkJICAgICogRmlsdGVyIFRhYmxlICovCkBAIC0xNTQwLDYgKzE1NDMsNyBAQAogI2RlZmluZSBJWEdCRV9NQVhfRVRRRl9GSUxURVJTICA4CiAjZGVmaW5lIElYR0JFX0VUUUZfRkNPRSAgICAgICAgIDB4MDgwMDAwMDAgLyogYml0IDI3ICovCiAjZGVmaW5lIElYR0JFX0VUUUZfQkNOICAgICAgICAgIDB4MTAwMDAwMDAgLyogYml0IDI4ICovCisjZGVmaW5lIElYR0JFX0VUUUZfVFhfQU5USVNQT09GCTB4MjAwMDAwMDAgLyogYml0IDI5ICovCiAjZGVmaW5lIElYR0JFX0VUUUZfMTU4OCAgICAgICAgIDB4NDAwMDAwMDAgLyogYml0IDMwICovCiAjZGVmaW5lIElYR0JFX0VUUUZfRklMVEVSX0VOICAgIDB4ODAwMDAwMDAgLyogYml0IDMxICovCiAjZGVmaW5lIElYR0JFX0VUUUZfUE9PTF9FTkFCTEUgICAoMSA8PCAyNikgLyogYml0IDI2ICovCkBAIC0xNTY1LDYgKzE1NjksOSBAQAogI2RlZmluZSBJWEdCRV9FVFFGX0ZJTFRFUl9GQ09FICAgICAgICAgICAyCiAjZGVmaW5lIElYR0JFX0VUUUZfRklMVEVSXzE1ODggICAgICAgICAgIDMKICNkZWZpbmUgSVhHQkVfRVRRRl9GSUxURVJfRklQICAgICAgICAgICAgNAorI2RlZmluZSBJWEdCRV9FVFFGX0ZJTFRFUl9MTERQCQkgNQorI2RlZmluZSBJWEdCRV9FVFFGX0ZJTFRFUl9MQUNQCQkgNgorCiAvKiBWTEFOIENvbnRyb2wgQml0IE1hc2tzICovCiAjZGVmaW5lIElYR0JFX1ZMTkNUUkxfVkVUICAgICAgIDB4MDAwMEZGRkYgIC8qIGJpdHMgMC0xNSAqLwogI2RlZmluZSBJWEdCRV9WTE5DVFJMX0NGSSAgICAgICAweDEwMDAwMDAwICAvKiBiaXQgMjggKi8KQEAgLTIxMjIsNiArMjEyOSw3IEBACiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0lQQ1MgICAgIDB4NDAgICAgLyogSVAgeHN1bSBjYWxjdWxhdGVkICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1BJRiAgICAgIDB4ODAgICAgLyogcGFzc2VkIGluLWV4YWN0IGZpbHRlciAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9DUkNWICAgICAweDEwMCAgIC8qIFNwZWN1bGF0aXZlIENSQyBWYWxpZCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9PVVRFUklQQ1MgIDB4MTAwIC8qIENsb3VkIElQIHhzdW0gY2FsY3VsYXRlZCAqLwogI2RlZmluZSBJWEdCRV9SWERfU1RBVF9WRVhUICAgICAweDIwMCAgIC8qIDFzdCBWTEFOIGZvdW5kICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX1VEUFYgICAgIDB4NDAwICAgLyogVmFsaWQgVURQIGNoZWNrc3VtICovCiAjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0RZTklOVCAgIDB4ODAwICAgLyogUGt0IGNhdXNlZCBJTlQgdmlhIERZTklOVCAqLwpAQCAtMjEzOSw2ICsyMTQ3LDcgQEAKICNkZWZpbmUgSVhHQkVfUlhEX0VSUl9JUEUgICAgICAgMHg4MCAgICAvKiBJUCBDaGVja3N1bSBFcnJvciAqLwogI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX01BU0sgICAgICAgICAgIDB4ZmZmMDAwMDAgLyogUkRFU0MuRVJST1JTIG1hc2sgKi8KICNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9TSElGVCAgICAgICAgICAyMCAgICAgICAgIC8qIFJERVNDLkVSUk9SUyBzaGlmdCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX09VVEVSSVBFUgkweDA0MDAwMDAwIC8qIENSQyBJUCBIZWFkZXIgZXJyb3IgKi8KICNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9GQ0VPRkUgICAgICAgICAweDgwMDAwMDAwIC8qIEZDb0VGZS9JUEUgKi8KICNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9GQ0VSUiAgICAgICAgICAweDAwNzAwMDAwIC8qIEZDRVJSL0ZESVJFUlIgKi8KICNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9GRElSX0xFTiAgICAgICAweDAwMTAwMDAwIC8qIEZESVIgTGVuZ3RoIGVycm9yICovCkBAIC0yMjI3LDYgKzIyMzYsOCBAQAogI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9VRFAgICAgICAgIDB4MDAwMDAyMDAgLyogVURQIGhkciBwcmVzZW50ICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX1NDVFAgICAgICAgMHgwMDAwMDQwMCAvKiBTQ1RQIGhkciBwcmVzZW50ICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX05GUyAgICAgICAgMHgwMDAwMDgwMCAvKiBORlMgaGRyIHByZXNlbnQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1BLVFRZUEVfVlhMQU4JMHgwMDAwMDgwMCAvKiBWWExBTiBoZHIgcHJlc2VudCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9UVU5ORUwJMHgwMDAxMDAwMCAvKiBUdW5uZWwgdHlwZSAqLwogI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9JUFNFQ19FU1AgIDB4MDAwMDEwMDAgLyogSVBTZWMgRVNQICovCiAjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX0lQU0VDX0FIICAgMHgwMDAwMjAwMCAvKiBJUFNlYyBBSCAqLwogI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9MSU5LU0VDICAgIDB4MDAwMDQwMDAgLyogTGlua1NlYyBFbmNhcCAqLwpAQCAtMzA1Niw2ICszMDY3LDcgQEAKIAlzMzIgKCpzZXRfZndfZHJ2X3Zlcikoc3RydWN0IGl4Z2JlX2h3ICosIHU4LCB1OCwgdTgsIHU4KTsKIAlzMzIgKCpnZXRfdGhlcm1hbF9zZW5zb3JfZGF0YSkoc3RydWN0IGl4Z2JlX2h3ICopOwogCXMzMiAoKmluaXRfdGhlcm1hbF9zZW5zb3JfdGhyZXNoKShzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKKwl2b2lkICgqc2V0X2V0aGVydHlwZV9hbnRpX3Nwb29maW5nKShzdHJ1Y3QgaXhnYmVfaHcgKiwgYm9vbCwgaW50KTsKIAogCS8qIERNQSBDb2FsZXNjaW5nICovCiAJczMyICgqZG1hY19jb25maWcpKHN0cnVjdCBpeGdiZV9odyAqaHcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeDU0MC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeDU0MC5jCmluZGV4IGJhNTRmZjAuLjQ5Mzk1NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3g1NDAuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94NTQwLmMKQEAgLTU1LDkgKzU1LDYgQEAKIHsKIAlzdHJ1Y3QgaXhnYmVfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwogCi0JLyogQ2FsbCBQSFkgaWRlbnRpZnkgcm91dGluZSB0byBnZXQgdGhlIHBoeSB0eXBlICovCi0JaXhnYmVfaWRlbnRpZnlfcGh5X2dlbmVyaWMoaHcpOwotCiAJbWFjLT5tY2Z0X3NpemUgPSBJWEdCRV9YNTQwX01DX1RCTF9TSVpFOwogCW1hYy0+dmZ0X3NpemUgPSBJWEdCRV9YNTQwX1ZGVF9UQkxfU0laRTsKIAltYWMtPm51bV9yYXJfZW50cmllcyA9IElYR0JFX1g1NDBfUkFSX0VOVFJJRVM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94NTUwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZS9peGdiZV94NTUwLmMKaW5kZXggZmZkZDEyMy4uNTBiZjgxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmUvaXhnYmVfeDU1MC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JlL2l4Z2JlX3g1NTAuYwpAQCAtODAsNyArODAsNyBAQAogICogIEluaXRpYWxpemVzIHRoZSBFRVBST00gcGFyYW1ldGVycyBpeGdiZV9lZXByb21faW5mbyB3aXRoaW4gdGhlCiAgKiAgaXhnYmVfaHcgc3RydWN0IGluIG9yZGVyIHRvIHNldCB1cCBFRVBST00gYWNjZXNzLgogICoqLwotczMyIGl4Z2JlX2luaXRfZWVwcm9tX3BhcmFtc19YNTUwKHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgczMyIGl4Z2JlX2luaXRfZWVwcm9tX3BhcmFtc19YNTUwKHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJc3RydWN0IGl4Z2JlX2VlcHJvbV9pbmZvICplZXByb20gPSAmaHctPmVlcHJvbTsKIAl1MzIgZWVjOwpAQCAtMTEwLDggKzExMCw4IEBACiAgKiAgQGRldmljZV90eXBlOiAzIGJpdCBkZXZpY2UgdHlwZQogICogIEBwaHlfZGF0YTogUG9pbnRlciB0byByZWFkIGRhdGEgZnJvbSB0aGUgcmVnaXN0ZXIKICAqKi8KLXMzMiBpeGdiZV9yZWFkX2lvc2Zfc2JfcmVnX3g1NTAoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ19hZGRyLAotCQkJCXUzMiBkZXZpY2VfdHlwZSwgdTMyICpkYXRhKQorc3RhdGljIHMzMiBpeGdiZV9yZWFkX2lvc2Zfc2JfcmVnX3g1NTAoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ19hZGRyLAorCQkJCSAgICAgICB1MzIgZGV2aWNlX3R5cGUsIHUzMiAqZGF0YSkKIHsKIAl1MzIgaSwgY29tbWFuZCwgZXJyb3I7CiAKQEAgLTE1OCw3ICsxNTgsOCBAQAogICoKICAqICBSZWFkcyBhIDE2IGJpdCB3b3JkIGZyb20gdGhlIEVFUFJPTSB1c2luZyB0aGUgaG9zdGlmLgogICoqLwotczMyIGl4Z2JlX3JlYWRfZWVfaG9zdGlmX2RhdGFfWDU1MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpCitzdGF0aWMgczMyIGl4Z2JlX3JlYWRfZWVfaG9zdGlmX2RhdGFfWDU1MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LAorCQkJCQkgIHUxNiAqZGF0YSkKIHsKIAlzMzIgc3RhdHVzOwogCXN0cnVjdCBpeGdiZV9oaWNfcmVhZF9zaGFkb3dfcmFtIGJ1ZmZlcjsKQEAgLTE5Myw4ICsxOTQsOCBAQAogICoKICAqICBSZWFkcyBhIDE2IGJpdCB3b3JkKHMpIGZyb20gdGhlIEVFUFJPTSB1c2luZyB0aGUgaG9zdGlmLgogICoqLwotczMyIGl4Z2JlX3JlYWRfZWVfaG9zdGlmX2J1ZmZlcl9YNTUwKHN0cnVjdCBpeGdiZV9odyAqaHcsCi0JCQkJICAgICB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsIHUxNiAqZGF0YSkKK3N0YXRpYyBzMzIgaXhnYmVfcmVhZF9lZV9ob3N0aWZfYnVmZmVyX1g1NTAoc3RydWN0IGl4Z2JlX2h3ICpodywKKwkJCQkJICAgIHUxNiBvZmZzZXQsIHUxNiB3b3JkcywgdTE2ICpkYXRhKQogewogCXN0cnVjdCBpeGdiZV9oaWNfcmVhZF9zaGFkb3dfcmFtIGJ1ZmZlcjsKIAl1MzIgY3VycmVudF93b3JkID0gMDsKQEAgLTMzMSw3ICszMzIsOCBAQAogICoKICAqICBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBlcnJvciwgb3IgdGhlIDE2LWJpdCBjaGVja3N1bQogICoqLwotczMyIGl4Z2JlX2NhbGNfY2hlY2tzdW1fWDU1MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgKmJ1ZmZlciwgdTMyIGJ1ZmZlcl9zaXplKQorc3RhdGljIHMzMiBpeGdiZV9jYWxjX2NoZWNrc3VtX1g1NTAoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2ICpidWZmZXIsCisJCQkJICAgIHUzMiBidWZmZXJfc2l6ZSkKIHsKIAl1MTYgZWVwcm9tX3B0cnNbSVhHQkVfRUVQUk9NX0xBU1RfV09SRCArIDFdOwogCXUxNiAqbG9jYWxfYnVmZmVyOwpAQCAtNDA3LDcgKzQwOSw3IEBACiAgKgogICogIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGVycm9yLCBvciB0aGUgMTYtYml0IGNoZWNrc3VtCiAgKiovCi1zMzIgaXhnYmVfY2FsY19lZXByb21fY2hlY2tzdW1fWDU1MChzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHMzMiBpeGdiZV9jYWxjX2VlcHJvbV9jaGVja3N1bV9YNTUwKHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJcmV0dXJuIGl4Z2JlX2NhbGNfY2hlY2tzdW1fWDU1MChodywgTlVMTCwgMCk7CiB9CkBAIC00MTksNyArNDIxLDcgQEAKICAqCiAgKiAgIFJlYWRzIGEgMTYgYml0IHdvcmQgZnJvbSB0aGUgRUVQUk9NIHVzaW5nIHRoZSBob3N0aWYuCiAgKiovCi1zMzIgaXhnYmVfcmVhZF9lZV9ob3N0aWZfWDU1MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpCitzdGF0aWMgczMyIGl4Z2JlX3JlYWRfZWVfaG9zdGlmX1g1NTAoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKQogewogCXMzMiBzdGF0dXMgPSAwOwogCkBAIC00NDAsNyArNDQyLDggQEAKICAqICBQZXJmb3JtcyBjaGVja3N1bSBjYWxjdWxhdGlvbiBhbmQgdmFsaWRhdGVzIHRoZSBFRVBST00gY2hlY2tzdW0uICBJZiB0aGUKICAqICBjYWxsZXIgZG9lcyBub3QgbmVlZCBjaGVja3N1bV92YWwsIHRoZSB2YWx1ZSBjYW4gYmUgTlVMTC4KICAqKi8KLXMzMiBpeGdiZV92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW1fWDU1MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgKmNoZWNrc3VtX3ZhbCkKK3N0YXRpYyBzMzIgaXhnYmVfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtX1g1NTAoc3RydWN0IGl4Z2JlX2h3ICpodywKKwkJCQkJICAgICAgIHUxNiAqY2hlY2tzdW1fdmFsKQogewogCXMzMiBzdGF0dXM7CiAJdTE2IGNoZWNrc3VtOwpAQCAtNDg5LDcgKzQ5Miw4IEBACiAgKgogICogIFdyaXRlIGEgMTYgYml0IHdvcmQgdG8gdGhlIEVFUFJPTSB1c2luZyB0aGUgaG9zdGlmLgogICoqLwotczMyIGl4Z2JlX3dyaXRlX2VlX2hvc3RpZl9kYXRhX1g1NTAoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IGRhdGEpCitzdGF0aWMgczMyIGl4Z2JlX3dyaXRlX2VlX2hvc3RpZl9kYXRhX1g1NTAoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG9mZnNldCwKKwkJCQkJICAgdTE2IGRhdGEpCiB7CiAJczMyIHN0YXR1czsKIAlzdHJ1Y3QgaXhnYmVfaGljX3dyaXRlX3NoYWRvd19yYW0gYnVmZmVyOwpAQCAtNTE3LDcgKzUyMSw3IEBACiAgKgogICogIFdyaXRlIGEgMTYgYml0IHdvcmQgdG8gdGhlIEVFUFJPTSB1c2luZyB0aGUgaG9zdGlmLgogICoqLwotczMyIGl4Z2JlX3dyaXRlX2VlX2hvc3RpZl9YNTUwKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiBkYXRhKQorc3RhdGljIHMzMiBpeGdiZV93cml0ZV9lZV9ob3N0aWZfWDU1MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgZGF0YSkKIHsKIAlzMzIgc3RhdHVzID0gMDsKIApAQCAtNTM3LDcgKzU0MSw3IEBACiAgKgogICogIElzc3VlIGEgc2hhZG93IFJBTSBkdW1wIHRvIEZXIHRvIGNvcHkgRUVQUk9NIGZyb20gc2hhZG93IFJBTSB0byB0aGUgZmxhc2guCiAgKiovCi1zMzIgaXhnYmVfdXBkYXRlX2ZsYXNoX1g1NTAoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyBzMzIgaXhnYmVfdXBkYXRlX2ZsYXNoX1g1NTAoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzMzIgc3RhdHVzID0gMDsKIAl1bmlvbiBpeGdiZV9oaWNfaGRyMiBidWZmZXI7CkBAIC01NjAsNyArNTY0LDcgQEAKICAqICBjaGVja3N1bSBhbmQgdXBkYXRlcyB0aGUgRUVQUk9NIGFuZCBpbnN0cnVjdHMgdGhlIGhhcmR3YXJlIHRvIHVwZGF0ZQogICogIHRoZSBmbGFzaC4KICAqKi8KLXMzMiBpeGdiZV91cGRhdGVfZWVwcm9tX2NoZWNrc3VtX1g1NTAoc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyBzMzIgaXhnYmVfdXBkYXRlX2VlcHJvbV9jaGVja3N1bV9YNTUwKHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJczMyIHN0YXR1czsKIAl1MTYgY2hlY2tzdW0gPSAwOwpAQCAtNjAwLDggKzYwNCw5IEBACiAgKgogICogIFdyaXRlIGEgMTYgYml0IHdvcmQocykgdG8gdGhlIEVFUFJPTSB1c2luZyB0aGUgaG9zdGlmLgogICoqLwotczMyIGl4Z2JlX3dyaXRlX2VlX2hvc3RpZl9idWZmZXJfWDU1MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotCQkJCSAgICAgIHUxNiBvZmZzZXQsIHUxNiB3b3JkcywgdTE2ICpkYXRhKQorc3RhdGljIHMzMiBpeGdiZV93cml0ZV9lZV9ob3N0aWZfYnVmZmVyX1g1NTAoc3RydWN0IGl4Z2JlX2h3ICpodywKKwkJCQkJICAgICB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsCisJCQkJCSAgICAgdTE2ICpkYXRhKQogewogCXMzMiBzdGF0dXMgPSAwOwogCXUzMiBpID0gMDsKQEAgLTYzMCw3ICs2MzUsNyBAQAogLyoqIGl4Z2JlX2luaXRfbWFjX2xpbmtfb3BzX1g1NTBlbSAtIGluaXQgbWFjIGxpbmsgZnVuY3Rpb24gcG9pbnRlcnMKICAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCiAgKiovCi12b2lkIGl4Z2JlX2luaXRfbWFjX2xpbmtfb3BzX1g1NTBlbShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHZvaWQgaXhnYmVfaW5pdF9tYWNfbGlua19vcHNfWDU1MGVtKHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJc3RydWN0IGl4Z2JlX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKIApAQCAtNjQ3LDcgKzY1Miw3IEBACiAvKiogaXhnYmVfc2V0dXBfc2ZwX21vZHVsZXNfWDU1MGVtIC0gU2V0dXAgU0ZQIG1vZHVsZQogICogQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICovCi1zMzIgaXhnYmVfc2V0dXBfc2ZwX21vZHVsZXNfWDU1MGVtKHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX3NmcF9tb2R1bGVzX1g1NTBlbShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCWJvb2wgc2V0dXBfbGluZWFyOwogCXUxNiByZWdfc2xpY2UsIGVkY19tb2RlOwpAQCAtNzAzLDkgKzcwOCw5IEBACiAgKiBAc3BlZWQ6IHBvaW50ZXIgdG8gbGluayBzcGVlZAogICogQGF1dG9uZWc6IHRydWUgd2hlbiBhdXRvbmVnIG9yIGF1dG90cnkgaXMgZW5hYmxlZAogICoqLwotczMyIGl4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc19YNTUwZW0oc3RydWN0IGl4Z2JlX2h3ICpodywKLQkJCQkgICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCi0JCQkJICAgICAgIGJvb2wgKmF1dG9uZWcpCitzdGF0aWMgczMyIGl4Z2JlX2dldF9saW5rX2NhcGFiaWxpdGllc19YNTUwZW0oc3RydWN0IGl4Z2JlX2h3ICpodywKKwkJCQkJICAgICAgaXhnYmVfbGlua19zcGVlZCAqc3BlZWQsCisJCQkJCSAgICAgIGJvb2wgKmF1dG9uZWcpCiB7CiAJLyogU0ZQICovCiAJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBpeGdiZV9tZWRpYV90eXBlX2ZpYmVyKSB7CkBAIC03NDAsOCArNzQ1LDggQEAKICAqICBAZGV2aWNlX3R5cGU6IDMgYml0IGRldmljZSB0eXBlCiAgKiAgQGRhdGE6IERhdGEgdG8gd3JpdGUgdG8gdGhlIHJlZ2lzdGVyCiAgKiovCi1zMzIgaXhnYmVfd3JpdGVfaW9zZl9zYl9yZWdfeDU1MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgcmVnX2FkZHIsCi0JCQkJIHUzMiBkZXZpY2VfdHlwZSwgdTMyIGRhdGEpCitzdGF0aWMgczMyIGl4Z2JlX3dyaXRlX2lvc2Zfc2JfcmVnX3g1NTAoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ19hZGRyLAorCQkJCQl1MzIgZGV2aWNlX3R5cGUsIHUzMiBkYXRhKQogewogCXUzMiBpLCBjb21tYW5kLCBlcnJvcjsKIApAQCAtOTA0LDcgKzkwOSw3IEBACiAgKgogICogICBDb25maWd1cmVzIHRoZSBpbnRlZ3JhdGVkIEtYNCBQSFkuCiAgKiovCi1zMzIgaXhnYmVfc2V0dXBfa3g0X3g1NTBlbShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9reDRfeDU1MGVtKHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJczMyIHN0YXR1czsKIAl1MzIgcmVnX3ZhbDsKQEAgLTk0Miw3ICs5NDcsNyBAQAogICoKICAqICAgQ29uZmlndXJlcyB0aGUgaW50ZWdyYXRlZCBLUiBQSFkuCiAgKiovCi1zMzIgaXhnYmVfc2V0dXBfa3JfeDU1MGVtKHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgczMyIGl4Z2JlX3NldHVwX2tyX3g1NTBlbShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXMzMiBzdGF0dXM7CiAJdTMyIHJlZ192YWw7CkBAIC05ODcsNyArOTkyLDcgQEAKICAqICBBIHJldHVybiBvZiBhIG5vbi16ZXJvIHZhbHVlIGluZGljYXRlcyBhbiBlcnJvciwgYW5kIHRoZSBiYXNlIGRyaXZlciBzaG91bGQKICAqICBub3QgcmVwb3J0IGxpbmsgdXAuCiAgKiovCi1zMzIgaXhnYmVfc2V0dXBfaW50ZXJuYWxfcGh5X3g1NTBlbShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHMzMiBpeGdiZV9zZXR1cF9pbnRlcm5hbF9waHlfeDU1MGVtKHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJdTMyIHN0YXR1czsKIAl1MTYgbGFzaSwgYXV0b25lZ19zdGF0dXMsIHNwZWVkOwpAQCAtMTA0OSw3ICsxMDU0LDcgQEAKICAqICBzZXQgZHVyaW5nIGluaXRfc2hhcmVkX2NvZGUgYmVjYXVzZSB0aGUgUEhZL1NGUCB0eXBlIHdhcwogICogIG5vdCBrbm93bi4gIFBlcmZvcm0gdGhlIFNGUCBpbml0IGlmIG5lY2Vzc2FyeS4KICAqKi8KLXMzMiBpeGdiZV9pbml0X3BoeV9vcHNfWDU1MGVtKHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgczMyIGl4Z2JlX2luaXRfcGh5X29wc19YNTUwZW0oc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzdHJ1Y3QgaXhnYmVfcGh5X2luZm8gKnBoeSA9ICZody0+cGh5OwogCXMzMiByZXRfdmFsOwpAQCAtMTEwMiw3ICsxMTA3LDcgQEAKICAqICBSZXR1cm5zIHRoZSBtZWRpYSB0eXBlIChmaWJlciwgY29wcGVyLCBiYWNrcGxhbmUpCiAgKgogICovCi1lbnVtIGl4Z2JlX21lZGlhX3R5cGUgaXhnYmVfZ2V0X21lZGlhX3R5cGVfWDU1MGVtKHN0cnVjdCBpeGdiZV9odyAqaHcpCitzdGF0aWMgZW51bSBpeGdiZV9tZWRpYV90eXBlIGl4Z2JlX2dldF9tZWRpYV90eXBlX1g1NTBlbShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCWVudW0gaXhnYmVfbWVkaWFfdHlwZSBtZWRpYV90eXBlOwogCkBAIC0xMTI5LDcgKzExMzQsNyBAQAogLyoqIGl4Z2JlX2luaXRfZXh0X3RfeDU1MGVtIC0gU3RhcnQgKHVuc3RhbGwpIHRoZSBleHRlcm5hbCBCYXNlIFQgUEhZLgogICoqIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKICAqKi8KLXMzMiBpeGdiZV9pbml0X2V4dF90X3g1NTBlbShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQorc3RhdGljIHMzMiBpeGdiZV9pbml0X2V4dF90X3g1NTBlbShzdHJ1Y3QgaXhnYmVfaHcgKmh3KQogewogCXUzMiBzdGF0dXM7CiAJdTE2IHJlZzsKQEAgLTEyMDIsNyArMTIwNyw3IEBACiAgKiogIGFuZCBjbGVhcnMgYWxsIGludGVycnVwdHMsIHBlcmZvcm0gYSBQSFkgcmVzZXQsIGFuZCBwZXJmb3JtIGEgbGluayAoTUFDKQogICoqICByZXNldC4KICAqKi8KLXMzMiBpeGdiZV9yZXNldF9od19YNTUwZW0oc3RydWN0IGl4Z2JlX2h3ICpodykKK3N0YXRpYyBzMzIgaXhnYmVfcmVzZXRfaHdfWDU1MGVtKHN0cnVjdCBpeGdiZV9odyAqaHcpCiB7CiAJaXhnYmVfbGlua19zcGVlZCBsaW5rX3NwZWVkOwogCXMzMiBzdGF0dXM7CkBAIC0xMjk1LDYgKzEzMDAsMjggQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCisvKiogaXhnYmVfc2V0X2V0aGVydHlwZV9hbnRpX3Nwb29maW5nX1g1NTAgLSBFbmFibGUvRGlzYWJsZSBFdGhlcnR5cGUKKyAqCWFudGktc3Bvb2ZpbmcKKyAqICBAaHc6ICBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICogIEBlbmFibGU6IGVuYWJsZSBvciBkaXNhYmxlIHN3aXRjaCBmb3IgRXRoZXJ0eXBlIGFudGktc3Bvb2ZpbmcKKyAqICBAdmY6IFZpcnR1YWwgRnVuY3Rpb24gcG9vbCAtIFZGIFBvb2wgdG8gc2V0IGZvciBFdGhlcnR5cGUgYW50aS1zcG9vZmluZworICoqLwordm9pZCBpeGdiZV9zZXRfZXRoZXJ0eXBlX2FudGlfc3Bvb2ZpbmdfWDU1MChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCBib29sIGVuYWJsZSwKKwkJCQkJICAgIGludCB2ZikKK3sKKwlpbnQgdmZfdGFyZ2V0X3JlZyA9IHZmID4+IDM7CisJaW50IHZmX3RhcmdldF9zaGlmdCA9IHZmICUgOCArIElYR0JFX1NQT09GX0VUSEVSVFlQRUFTX1NISUZUOworCXUzMiBwZnZmc3Bvb2Y7CisKKwlwZnZmc3Bvb2YgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUEZWRlNQT09GKHZmX3RhcmdldF9yZWcpKTsKKwlpZiAoZW5hYmxlKQorCQlwZnZmc3Bvb2YgfD0gKDEgPDwgdmZfdGFyZ2V0X3NoaWZ0KTsKKwllbHNlCisJCXBmdmZzcG9vZiAmPSB+KDEgPDwgdmZfdGFyZ2V0X3NoaWZ0KTsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUEZWRlNQT09GKHZmX3RhcmdldF9yZWcpLCBwZnZmc3Bvb2YpOworfQorCiAjZGVmaW5lIFg1NTBfQ09NTU9OX01BQyBcCiAJLmluaXRfaHcJCQk9ICZpeGdiZV9pbml0X2h3X2dlbmVyaWMsIFwKIAkuc3RhcnRfaHcJCQk9ICZpeGdiZV9zdGFydF9od19YNTQwLCBcCkBAIC0xMzI5LDYgKzEzNTYsOCBAQAogCS5pbml0X3V0YV90YWJsZXMJCT0gJml4Z2JlX2luaXRfdXRhX3RhYmxlc19nZW5lcmljLCBcCiAJLnNldF9tYWNfYW50aV9zcG9vZmluZwkJPSAmaXhnYmVfc2V0X21hY19hbnRpX3Nwb29maW5nLCBcCiAJLnNldF92bGFuX2FudGlfc3Bvb2ZpbmcJCT0gJml4Z2JlX3NldF92bGFuX2FudGlfc3Bvb2ZpbmcsIFwKKwkuc2V0X2V0aGVydHlwZV9hbnRpX3Nwb29maW5nCT0gXAorCQkJCSZpeGdiZV9zZXRfZXRoZXJ0eXBlX2FudGlfc3Bvb2ZpbmdfWDU1MCwgXAogCS5hY3F1aXJlX3N3Zndfc3luYwkJPSAmaXhnYmVfYWNxdWlyZV9zd2Z3X3N5bmNfWDU0MCwgXAogCS5yZWxlYXNlX3N3Zndfc3luYwkJPSAmaXhnYmVfcmVsZWFzZV9zd2Z3X3N5bmNfWDU0MCwgXAogCS5kaXNhYmxlX3J4X2J1ZmYJCT0gJml4Z2JlX2Rpc2FibGVfcnhfYnVmZl9nZW5lcmljLCBcCkBAIC0xMzQ1LDcgKzEzNzQsNiBAQAogCS5nZXRfc2FuX21hY19hZGRyCT0gJml4Z2JlX2dldF9zYW5fbWFjX2FkZHJfZ2VuZXJpYywKIAkuZ2V0X3d3bl9wcmVmaXgJCT0gJml4Z2JlX2dldF93d25fcHJlZml4X2dlbmVyaWMsCiAJLnNldHVwX2xpbmsJCT0gJml4Z2JlX3NldHVwX21hY19saW5rX1g1NDAsCi0JLnNldF9yeHBiYQkJPSAmaXhnYmVfc2V0X3J4cGJhX2dlbmVyaWMsCiAJLmdldF9saW5rX2NhcGFiaWxpdGllcwk9ICZpeGdiZV9nZXRfY29wcGVyX2xpbmtfY2FwYWJpbGl0aWVzX2dlbmVyaWMsCiAJLnNldHVwX3NmcAkJPSBOVUxMLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmLmgKaW5kZXggOGM0NGFiMi4uM2E5YjM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9peGdiZXZmLmgKQEAgLTQzLDYgKzQzLDEzIEBACiAjZGVmaW5lIEJQX0VYVEVOREVEX1NUQVRTCiAjZW5kaWYKIAorI2RlZmluZSBJWEdCRV9NQVhfVFhEX1BXUgkxNAorI2RlZmluZSBJWEdCRV9NQVhfREFUQV9QRVJfVFhECUJJVChJWEdCRV9NQVhfVFhEX1BXUikKKworLyogVHggRGVzY3JpcHRvcnMgbmVlZGVkLCB3b3JzdCBjYXNlICovCisjZGVmaW5lIFRYRF9VU0VfQ09VTlQoUykgRElWX1JPVU5EX1VQKChTKSwgSVhHQkVfTUFYX0RBVEFfUEVSX1RYRCkKKyNkZWZpbmUgREVTQ19ORUVERUQgKE1BWF9TS0JfRlJBR1MgKyA0KQorCiAvKiB3cmFwcGVyIGFyb3VuZCBhIHBvaW50ZXIgdG8gYSBzb2NrZXQgYnVmZmVyLAogICogc28gYSBETUEgaGFuZGxlIGNhbiBiZSBzdG9yZWQgYWxvbmcgd2l0aCB0aGUgYnVmZmVyICovCiBzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIgewpAQCAtODUsNiArOTIsMTggQEAKIAl1NjQgY3N1bV9lcnI7CiB9OwogCitlbnVtIGl4Z2JldmZfcmluZ19zdGF0ZV90IHsKKwlfX0lYR0JFVkZfVFhfREVURUNUX0hBTkcsCisJX19JWEdCRVZGX0hBTkdfQ0hFQ0tfQVJNRUQsCit9OworCisjZGVmaW5lIGNoZWNrX2Zvcl90eF9oYW5nKHJpbmcpIFwKKwl0ZXN0X2JpdChfX0lYR0JFVkZfVFhfREVURUNUX0hBTkcsICYocmluZyktPnN0YXRlKQorI2RlZmluZSBzZXRfY2hlY2tfZm9yX3R4X2hhbmcocmluZykgXAorCXNldF9iaXQoX19JWEdCRVZGX1RYX0RFVEVDVF9IQU5HLCAmKHJpbmcpLT5zdGF0ZSkKKyNkZWZpbmUgY2xlYXJfY2hlY2tfZm9yX3R4X2hhbmcocmluZykgXAorCWNsZWFyX2JpdChfX0lYR0JFVkZfVFhfREVURUNUX0hBTkcsICYocmluZyktPnN0YXRlKQorCiBzdHJ1Y3QgaXhnYmV2Zl9yaW5nIHsKIAlzdHJ1Y3QgaXhnYmV2Zl9yaW5nICpuZXh0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CkBAIC0xMDEsNyArMTIwLDcgQEAKIAkJc3RydWN0IGl4Z2JldmZfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKIAkJc3RydWN0IGl4Z2JldmZfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKIAl9OwotCisJdW5zaWduZWQgbG9uZyBzdGF0ZTsKIAlzdHJ1Y3QgaXhnYmV2Zl9zdGF0cyBzdGF0czsKIAlzdHJ1Y3QgdTY0X3N0YXRzX3N5bmMgc3luY3A7CiAJdW5pb24gewpAQCAtMTI0LDYgKzE0Myw3IEBACiAKICNkZWZpbmUgTUFYX1JYX1FVRVVFUyBJWEdCRV9WRl9NQVhfUlhfUVVFVUVTCiAjZGVmaW5lIE1BWF9UWF9RVUVVRVMgSVhHQkVfVkZfTUFYX1RYX1FVRVVFUworI2RlZmluZSBJWEdCRVZGX01BWF9SU1NfUVVFVUVTIDIKIAogI2RlZmluZSBJWEdCRVZGX0RFRkFVTFRfVFhEICAgMTAyNAogI2RlZmluZSBJWEdCRVZGX0RFRkFVTFRfUlhEICAgNTEyCkBAIC0zNDcsOCArMzY3LDYgQEAKIAkvKiB0aGlzIGZpZWxkIG11c3QgYmUgZmlyc3QsIHNlZSBpeGdiZXZmX3Byb2Nlc3Nfc2tiX2ZpZWxkcyAqLwogCXVuc2lnbmVkIGxvbmcgYWN0aXZlX3ZsYW5zW0JJVFNfVE9fTE9OR1MoVkxBTl9OX1ZJRCldOwogCi0Jc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHJlc2V0X3Rhc2s7CiAJc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yW01BWF9NU0lYX1FfVkVDVE9SU107CiAKIAkvKiBJbnRlcnJ1cHQgVGhyb3R0bGUgUmF0ZSAqLwpAQCAtMzc4LDggKzM5Niw3IEBACiAJICogdGh1cyB0aGUgYWRkaXRpb25hbCAqX0NBUEFCTEUgZmxhZ3MuCiAJICovCiAJdTMyIGZsYWdzOwotI2RlZmluZSBJWEdCRV9GTEFHX0lOX1dBVENIRE9HX1RBU0sgICAgICAgICAgICAgKHUzMikoMSkKLQorI2RlZmluZSBJWEdCRVZGX0ZMQUdfUkVTRVRfUkVRVUVTVEVECQkodTMyKSgxKQogI2RlZmluZSBJWEdCRVZGX0ZMQUdfUVVFVUVfUkVTRVRfUkVRVUVTVEVECSh1MzIpKDEgPDwgMikKIAogCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X2VudHJpZXM7CkBAIC00MTUsOSArNDMyLDExIEBACiAJdTMyIGxpbmtfc3BlZWQ7CiAJYm9vbCBsaW5rX3VwOwogCi0Jc3BpbmxvY2tfdCBtYnhfbG9jazsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBzZXJ2aWNlX3RpbWVyOworCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXJ2aWNlX3Rhc2s7CiAKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfdGFzazsKKwlzcGlubG9ja190IG1ieF9sb2NrOworCXVuc2lnbmVkIGxvbmcgbGFzdF9yZXNldDsKIH07CiAKIGVudW0gaXhiZ2V2Zl9zdGF0ZV90IHsKQEAgLTQyNiw3ICs0NDUsOCBAQAogCV9fSVhHQkVWRl9ET1dOLAogCV9fSVhHQkVWRl9ESVNBQkxFRCwKIAlfX0lYR0JFVkZfUkVNT1ZJTkcsCi0JX19JWEdCRVZGX1dPUktfSU5JVCwKKwlfX0lYR0JFVkZfU0VSVklDRV9TQ0hFRCwKKwlfX0lYR0JFVkZfU0VSVklDRV9JTklURUQsCiB9OwogCiBlbnVtIGl4Z2JldmZfYm9hcmRzIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jCmluZGV4IDYyYTBkOGUuLjQxODY5ODFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL2l4Z2JldmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMKQEAgLTk4LDYgKzk4LDIzIEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDA9bm9uZSwuLi4sMTY9YWxsKSIpOwogCitzdGF0aWMgdm9pZCBpeGdiZXZmX3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoIXRlc3RfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpICYmCisJICAgICF0ZXN0X2JpdChfX0lYR0JFVkZfUkVNT1ZJTkcsICZhZGFwdGVyLT5zdGF0ZSkgJiYKKwkgICAgIXRlc3RfYW5kX3NldF9iaXQoX19JWEdCRVZGX1NFUlZJQ0VfU0NIRUQsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnNlcnZpY2VfdGFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCUJVR19PTighdGVzdF9iaXQoX19JWEdCRVZGX1NFUlZJQ0VfU0NIRUQsICZhZGFwdGVyLT5zdGF0ZSkpOworCisJLyogZmx1c2ggbWVtb3J5IHRvIG1ha2Ugc3VyZSBzdGF0ZSBpcyBjb3JyZWN0IGJlZm9yZSBuZXh0IHdhdGNoZG9nICovCisJc21wX21iX19iZWZvcmVfYXRvbWljKCk7CisJY2xlYXJfYml0KF9fSVhHQkVWRl9TRVJWSUNFX1NDSEVELCAmYWRhcHRlci0+c3RhdGUpOworfQorCiAvKiBmb3J3YXJkIGRlY2xzICovCiBzdGF0aWMgdm9pZCBpeGdiZXZmX3F1ZXVlX3Jlc2V0X3N1YnRhc2soc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcik7CiBzdGF0aWMgdm9pZCBpeGdiZXZmX3NldF9pdHIoc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yKTsKQEAgLTExMSw4ICsxMjgsOCBAQAogCQlyZXR1cm47CiAJaHctPmh3X2FkZHIgPSBOVUxMOwogCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIkFkYXB0ZXIgcmVtb3ZlZFxuIik7Ci0JaWYgKHRlc3RfYml0KF9fSVhHQkVWRl9XT1JLX0lOSVQsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPndhdGNoZG9nX3Rhc2spOworCWlmICh0ZXN0X2JpdChfX0lYR0JFVkZfU0VSVklDRV9JTklURUQsICZhZGFwdGVyLT5zdGF0ZSkpCisJCWl4Z2JldmZfc2VydmljZV9ldmVudF9zY2hlZHVsZShhZGFwdGVyKTsKIH0KIAogc3RhdGljIHZvaWQgaXhnYmV2Zl9jaGVja19yZW1vdmUoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZykKQEAgLTE5OSwxNCArMjE2LDcyIEBACiAJLyogdHhfYnVmZmVyIG11c3QgYmUgY29tcGxldGVseSBzZXQgdXAgaW4gdGhlIHRyYW5zbWl0IHBhdGggKi8KIH0KIAotI2RlZmluZSBJWEdCRV9NQVhfVFhEX1BXUgkxNAotI2RlZmluZSBJWEdCRV9NQVhfREFUQV9QRVJfVFhECSgxIDw8IElYR0JFX01BWF9UWERfUFdSKQorc3RhdGljIHU2NCBpeGdiZXZmX2dldF90eF9jb21wbGV0ZWQoc3RydWN0IGl4Z2JldmZfcmluZyAqcmluZykKK3sKKwlyZXR1cm4gcmluZy0+c3RhdHMucGFja2V0czsKK30KIAotLyogVHggRGVzY3JpcHRvcnMgbmVlZGVkLCB3b3JzdCBjYXNlICovCi0jZGVmaW5lIFRYRF9VU0VfQ09VTlQoUykgRElWX1JPVU5EX1VQKChTKSwgSVhHQkVfTUFYX0RBVEFfUEVSX1RYRCkKLSNkZWZpbmUgREVTQ19ORUVERUQgKE1BWF9TS0JfRlJBR1MgKyA0KQorc3RhdGljIHUzMiBpeGdiZXZmX2dldF90eF9wZW5kaW5nKHN0cnVjdCBpeGdiZXZmX3JpbmcgKnJpbmcpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KHJpbmctPm5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAotc3RhdGljIHZvaWQgaXhnYmV2Zl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworCXUzMiBoZWFkID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVERIKHJpbmctPnJlZ19pZHgpKTsKKwl1MzIgdGFpbCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlREVChyaW5nLT5yZWdfaWR4KSk7CisKKwlpZiAoaGVhZCAhPSB0YWlsKQorCQlyZXR1cm4gKGhlYWQgPCB0YWlsKSA/CisJCQl0YWlsIC0gaGVhZCA6ICh0YWlsICsgcmluZy0+Y291bnQgLSBoZWFkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmV2Zl9jaGVja190eF9oYW5nKHN0cnVjdCBpeGdiZXZmX3JpbmcgKnR4X3JpbmcpCit7CisJdTMyIHR4X2RvbmUgPSBpeGdiZXZmX2dldF90eF9jb21wbGV0ZWQodHhfcmluZyk7CisJdTMyIHR4X2RvbmVfb2xkID0gdHhfcmluZy0+dHhfc3RhdHMudHhfZG9uZV9vbGQ7CisJdTMyIHR4X3BlbmRpbmcgPSBpeGdiZXZmX2dldF90eF9wZW5kaW5nKHR4X3JpbmcpOworCisJY2xlYXJfY2hlY2tfZm9yX3R4X2hhbmcodHhfcmluZyk7CisKKwkvKiBDaGVjayBmb3IgYSBodW5nIHF1ZXVlLCBidXQgYmUgdGhvcm91Z2guIFRoaXMgdmVyaWZpZXMKKwkgKiB0aGF0IGEgdHJhbnNtaXQgaGFzIGJlZW4gY29tcGxldGVkIHNpbmNlIHRoZSBwcmV2aW91cworCSAqIGNoZWNrIEFORCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgcGFja2V0IHBlbmRpbmcuIFRoZQorCSAqIEFSTUVEIGJpdCBpcyBzZXQgdG8gaW5kaWNhdGUgYSBwb3RlbnRpYWwgaGFuZy4KKwkgKi8KKwlpZiAoKHR4X2RvbmVfb2xkID09IHR4X2RvbmUpICYmIHR4X3BlbmRpbmcpIHsKKwkJLyogbWFrZSBzdXJlIGl0IGlzIHRydWUgZm9yIHR3byBjaGVja3MgaW4gYSByb3cgKi8KKwkJcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoX19JWEdCRVZGX0hBTkdfQ0hFQ0tfQVJNRUQsCisJCQkJCSZ0eF9yaW5nLT5zdGF0ZSk7CisJfQorCS8qIHJlc2V0IHRoZSBjb3VudGRvd24gKi8KKwljbGVhcl9iaXQoX19JWEdCRVZGX0hBTkdfQ0hFQ0tfQVJNRUQsICZ0eF9yaW5nLT5zdGF0ZSk7CisKKwkvKiB1cGRhdGUgY29tcGxldGVkIHN0YXRzIGFuZCBjb250aW51ZSAqLworCXR4X3JpbmctPnR4X3N0YXRzLnR4X2RvbmVfb2xkID0gdHhfZG9uZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl90eF90aW1lb3V0X3Jlc2V0KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJLyogRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgKi8KKwlpZiAoIXRlc3RfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFVkZfRkxBR19SRVNFVF9SRVFVRVNURUQ7CisJCWl4Z2JldmZfc2VydmljZV9ldmVudF9zY2hlZHVsZShhZGFwdGVyKTsKKwl9Cit9CisKKy8qKgorICogaXhnYmV2Zl90eF90aW1lb3V0IC0gUmVzcG9uZCB0byBhIFR4IEhhbmcKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaXhnYmV2Zl90eF90aW1lb3V0X3Jlc2V0KGFkYXB0ZXIpOworfQogCiAvKioKICAqIGl4Z2JldmZfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzCkBAIC0zMTEsNiArMzg2LDM3IEBACiAJcV92ZWN0b3ItPnR4LnRvdGFsX2J5dGVzICs9IHRvdGFsX2J5dGVzOwogCXFfdmVjdG9yLT50eC50b3RhbF9wYWNrZXRzICs9IHRvdGFsX3BhY2tldHM7CiAKKwlpZiAoY2hlY2tfZm9yX3R4X2hhbmcodHhfcmluZykgJiYgaXhnYmV2Zl9jaGVja190eF9oYW5nKHR4X3JpbmcpKSB7CisJCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJCXVuaW9uIGl4Z2JlX2Fkdl90eF9kZXNjICplb3BfZGVzYzsKKworCQllb3BfZGVzYyA9IHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldLm5leHRfdG9fd2F0Y2g7CisKKwkJcHJfZXJyKCJEZXRlY3RlZCBUeCBVbml0IEhhbmdcbiIKKwkJICAgICAgICIgIFR4IFF1ZXVlICAgICAgICAgICAgIDwlZD5cbiIKKwkJICAgICAgICIgIFRESCwgVERUICAgICAgICAgICAgIDwleD4sIDwleD5cbiIKKwkJICAgICAgICIgIG5leHRfdG9fdXNlICAgICAgICAgIDwleD5cbiIKKwkJICAgICAgICIgIG5leHRfdG9fY2xlYW4gICAgICAgIDwleD5cbiIKKwkJICAgICAgICJ0eF9idWZmZXJfaW5mb1tuZXh0X3RvX2NsZWFuXVxuIgorCQkgICAgICAgIiAgbmV4dF90b193YXRjaCAgICAgICAgPCVwPlxuIgorCQkgICAgICAgIiAgZW9wX2Rlc2MtPndiLnN0YXR1cyAgPCV4PlxuIgorCQkgICAgICAgIiAgdGltZV9zdGFtcCAgICAgICAgICAgPCVseD5cbiIKKwkJICAgICAgICIgIGppZmZpZXMgICAgICAgICAgICAgIDwlbHg+XG4iLAorCQkgICAgICAgdHhfcmluZy0+cXVldWVfaW5kZXgsCisJCSAgICAgICBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZUREgodHhfcmluZy0+cmVnX2lkeCkpLAorCQkgICAgICAgSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVERUKHR4X3JpbmctPnJlZ19pZHgpKSwKKwkJICAgICAgIHR4X3JpbmctPm5leHRfdG9fdXNlLCBpLAorCQkgICAgICAgZW9wX2Rlc2MsIChlb3BfZGVzYyA/IGVvcF9kZXNjLT53Yi5zdGF0dXMgOiAwKSwKKwkJICAgICAgIHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldLnRpbWVfc3RhbXAsIGppZmZpZXMpOworCisJCW5ldGlmX3N0b3Bfc3VicXVldWUodHhfcmluZy0+bmV0ZGV2LCB0eF9yaW5nLT5xdWV1ZV9pbmRleCk7CisKKwkJLyogc2NoZWR1bGUgaW1tZWRpYXRlIHJlc2V0IGlmIHdlIGJlbGlldmUgd2UgaHVuZyAqLworCQlpeGdiZXZmX3R4X3RpbWVvdXRfcmVzZXQoYWRhcHRlcik7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCiAjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpCiAJaWYgKHVubGlrZWx5KHRvdGFsX3BhY2tldHMgJiYgbmV0aWZfY2Fycmllcl9vayh0eF9yaW5nLT5uZXRkZXYpICYmCiAJCSAgICAgKGl4Z2JldmZfZGVzY191bnVzZWQodHhfcmluZykgPj0gVFhfV0FLRV9USFJFU0hPTEQpKSkgewpAQCAtMTE1OCw5ICsxMjY0LDcgQEAKIAogCWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzID0gMTsKIAotCWlmICghdGVzdF9iaXQoX19JWEdCRVZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkgJiYKLQkgICAgIXRlc3RfYml0KF9fSVhHQkVWRl9SRU1PVklORywgJmFkYXB0ZXItPnN0YXRlKSkKLQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisJaXhnYmV2Zl9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKGFkYXB0ZXIpOwogCiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVEVJTVMsIGFkYXB0ZXItPmVpbXNfb3RoZXIpOwogCkBAIC0xNDc5LDYgKzE1ODMsOCBAQAogCXR4ZGN0bCB8PSAoMSA8PCA4KSB8ICAgIC8qIEhUSFJFU0ggPSAxICovCiAJCSAgMzI7ICAgICAgICAgIC8qIFBUSFJFU0ggPSAzMiAqLwogCisJY2xlYXJfYml0KF9fSVhHQkVWRl9IQU5HX0NIRUNLX0FSTUVELCAmcmluZy0+c3RhdGUpOworCiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRYRENUTChyZWdfaWR4KSwgdHhkY3RsKTsKIAogCS8qIHBvbGwgdG8gdmVyaWZ5IHF1ZXVlIGlzIGVuYWJsZWQgKi8KQEAgLTE1ODQsNiArMTY5MCwzOSBAQAogCQkgICAgICAgcmVnX2lkeCk7CiB9CiAKK3N0YXRpYyB2b2lkIGl4Z2JldmZfc2V0dXBfdmZtcnFjKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgdmZtcnFjID0gMCwgdmZyZXRhID0gMDsKKwl1MzIgcnNzX2tleVsxMF07CisJdTE2IHJzc19pID0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKKwlpbnQgaSwgajsKKworCS8qIEZpbGwgb3V0IGhhc2ggZnVuY3Rpb24gc2VlZHMgKi8KKwluZXRkZXZfcnNzX2tleV9maWxsKHJzc19rZXksIHNpemVvZihyc3Nfa2V5KSk7CisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZSU1NSSyhpKSwgcnNzX2tleVtpXSk7CisKKwkvKiBGaWxsIG91dCByZWRpcmVjdGlvbiB0YWJsZSAqLworCWZvciAoaSA9IDAsIGogPSAwOyBpIDwgNjQ7IGkrKywgaisrKSB7CisJCWlmIChqID09IHJzc19pKQorCQkJaiA9IDA7CisJCXZmcmV0YSA9ICh2ZnJldGEgPDwgOCkgfCAoaiAqIDB4MSk7CisJCWlmICgoaSAmIDMpID09IDMpCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUkVUQShpID4+IDIpLCB2ZnJldGEpOworCX0KKworCS8qIFBlcmZvcm0gaGFzaCBvbiB0aGVzZSBwYWNrZXQgdHlwZXMgKi8KKwl2Zm1ycWMgfD0gSVhHQkVfVkZNUlFDX1JTU19GSUVMRF9JUFY0IHwKKwkJSVhHQkVfVkZNUlFDX1JTU19GSUVMRF9JUFY0X1RDUCB8CisJCUlYR0JFX1ZGTVJRQ19SU1NfRklFTERfSVBWNiB8CisJCUlYR0JFX1ZGTVJRQ19SU1NfRklFTERfSVBWNl9UQ1A7CisKKwl2Zm1ycWMgfD0gSVhHQkVfVkZNUlFDX1JTU0VOOworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRk1SUUMsIHZmbXJxYyk7Cit9CisKIHN0YXRpYyB2b2lkIGl4Z2JldmZfY29uZmlndXJlX3J4X3Jpbmcoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKIAkJCQkgICAgICBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICpyaW5nKQogewpAQCAtMTY0MCw2ICsxNzc5LDggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCiAJaXhnYmV2Zl9zZXR1cF9wc3J0eXBlKGFkYXB0ZXIpOworCWlmIChody0+bWFjLnR5cGUgPj0gaXhnYmVfbWFjX1g1NTBfdmYpCisJCWl4Z2JldmZfc2V0dXBfdmZtcnFjKGFkYXB0ZXIpOwogCiAJLyogbm90aWZ5IHRoZSBQRiBvZiBvdXIgaW50ZW50IHRvIHVzZSB0aGlzIHNpemUgb2YgZnJhbWUgKi8KIAlpeGdiZXZmX3JscG1sX3NldF92ZihodywgbmV0ZGV2LT5tdHUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOKTsKQEAgLTE3OTQsNyArMTkzNSw4IEBACiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1bnNpZ25lZCBpbnQgZGVmX3EgPSAwOwogCXVuc2lnbmVkIGludCBudW1fdGNzID0gMDsKLQl1bnNpZ25lZCBpbnQgbnVtX3J4X3F1ZXVlcyA9IDE7CisJdW5zaWduZWQgaW50IG51bV9yeF9xdWV1ZXMgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCXVuc2lnbmVkIGludCBudW1fdHhfcXVldWVzID0gYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsKIAlpbnQgZXJyOwogCiAJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tYnhfbG9jayk7CkBAIC0xODA4LDYgKzE5NTAsOSBAQAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKG51bV90Y3MgPiAxKSB7CisJCS8qIHdlIG5lZWQgb25seSBvbmUgVHggcXVldWUgKi8KKwkJbnVtX3R4X3F1ZXVlcyA9IDE7CisKIAkJLyogdXBkYXRlIGRlZmF1bHQgVHggcmluZyByZWdpc3RlciBpbmRleCAqLwogCQlhZGFwdGVyLT50eF9yaW5nWzBdLT5yZWdfaWR4ID0gZGVmX3E7CiAKQEAgLTE4MTYsNyArMTk2MSw4IEBACiAJfQogCiAJLyogaWYgd2UgaGF2ZSBhIGJhZCBjb25maWcgYWJvcnQgcmVxdWVzdCBxdWV1ZSByZXNldCAqLwotCWlmIChhZGFwdGVyLT5udW1fcnhfcXVldWVzICE9IG51bV9yeF9xdWV1ZXMpIHsKKwlpZiAoKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgIT0gbnVtX3J4X3F1ZXVlcykgfHwKKwkgICAgKGFkYXB0ZXItPm51bV90eF9xdWV1ZXMgIT0gbnVtX3R4X3F1ZXVlcykpIHsKIAkJLyogZm9yY2UgbWFpbGJveCB0aW1lb3V0IHRvIHByZXZlbnQgZnVydGhlciBtZXNzYWdlcyAqLwogCQlody0+bWJ4LnRpbWVvdXQgPSAwOwogCkBAIC0xOTE3LDYgKzIwNjMsMTAgQEAKIAljbGVhcl9iaXQoX19JWEdCRVZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSk7CiAJaXhnYmV2Zl9uYXBpX2VuYWJsZV9hbGwoYWRhcHRlcik7CiAKKwkvKiBjbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzLCBtYXkgYXV0byBtYXNrICovCisJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlDUik7CisJaXhnYmV2Zl9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCiAJLyogZW5hYmxlIHRyYW5zbWl0cyAqLwogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTsKIApAQCAtMTkyNCwyMSArMjA3NCwxNCBAQAogCWl4Z2JldmZfaW5pdF9sYXN0X2NvdW50ZXJfc3RhdHMoYWRhcHRlcik7CiAKIAlody0+bWFjLmdldF9saW5rX3N0YXR1cyA9IDE7Ci0JbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisJbW9kX3RpbWVyKCZhZGFwdGVyLT5zZXJ2aWNlX3RpbWVyLCBqaWZmaWVzKTsKIH0KIAogdm9pZCBpeGdiZXZmX3VwKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQogCWl4Z2JldmZfY29uZmlndXJlKGFkYXB0ZXIpOwogCiAJaXhnYmV2Zl91cF9jb21wbGV0ZShhZGFwdGVyKTsKLQotCS8qIGNsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMsIG1heSBhdXRvIG1hc2sgKi8KLQlJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVlRFSUNSKTsKLQotCWl4Z2JldmZfaXJxX2VuYWJsZShhZGFwdGVyKTsKIH0KIAogLyoqCkBAIC0yMDQ1LDIyICsyMTg4LDE5IEBACiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKIAkJaXhnYmV2Zl9kaXNhYmxlX3J4X3F1ZXVlKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogCi0JbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOwotCi0JbXNsZWVwKDEwKTsKKwl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKIAogCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCisJLyogY2FsbCBjYXJyaWVyIG9mZiBmaXJzdCB0byBhdm9pZCBmYWxzZSBkZXZfd2F0Y2hkb2cgdGltZW91dHMgKi8KKwluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCW5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTsKKwogCWl4Z2JldmZfaXJxX2Rpc2FibGUoYWRhcHRlcik7CiAKIAlpeGdiZXZmX25hcGlfZGlzYWJsZV9hbGwoYWRhcHRlcik7CiAKLQlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOwotCS8qIGNhbid0IGNhbGwgZmx1c2ggc2NoZWR1bGVkIHdvcmsgaGVyZSBiZWNhdXNlIGl0IGNhbiBkZWFkbG9jawotCSAqIGlmIGxpbmt3YXRjaF9ldmVudCB0cmllcyB0byBhY3F1aXJlIHRoZSBydG5sX2xvY2sgd2hpY2ggd2UgYXJlCi0JICogaG9sZGluZyAqLwotCXdoaWxlIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfSU5fV0FUQ0hET0dfVEFTSykKLQkJbXNsZWVwKDEpOworCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5zZXJ2aWNlX3RpbWVyKTsKIAogCS8qIGRpc2FibGUgdHJhbnNtaXRzIGluIHRoZSBoYXJkd2FyZSBub3cgdGhhdCBpbnRlcnJ1cHRzIGFyZSBvZmYgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CkBAIC0yMDcwLDggKzIyMTAsNiBAQAogCQkJCUlYR0JFX1RYRENUTF9TV0ZMU0gpOwogCX0KIAotCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0KIAlpZiAoIXBjaV9jaGFubmVsX29mZmxpbmUoYWRhcHRlci0+cGRldikpCiAJCWl4Z2JldmZfcmVzZXQoYWRhcHRlcik7CiAKQEAgLTIxMTAsNiArMjI0OCw4IEBACiAJCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgYWRhcHRlci0+aHcubWFjLmFkZHIsCiAJCSAgICAgICBuZXRkZXYtPmFkZHJfbGVuKTsKIAl9CisKKwlhZGFwdGVyLT5sYXN0X3Jlc2V0ID0gamlmZmllczsKIH0KIAogc3RhdGljIGludCBpeGdiZXZmX2FjcXVpcmVfbXNpeF92ZWN0b3JzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCkBAIC0yMTgxLDggKzIzMjEsMTkgQEAKIAkJcmV0dXJuOwogCiAJLyogd2UgbmVlZCBhcyBtYW55IHF1ZXVlcyBhcyB0cmFmZmljIGNsYXNzZXMgKi8KLQlpZiAobnVtX3RjcyA+IDEpCisJaWYgKG51bV90Y3MgPiAxKSB7CiAJCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSBudW1fdGNzOworCX0gZWxzZSB7CisJCXUxNiByc3MgPSBtaW5fdCh1MTYsIG51bV9vbmxpbmVfY3B1cygpLCBJWEdCRVZGX01BWF9SU1NfUVVFVUVTKTsKKworCQlzd2l0Y2ggKGh3LT5hcGlfdmVyc2lvbikgeworCQljYXNlIGl4Z2JlX21ib3hfYXBpXzExOgorCQkJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IHJzczsKKwkJCWFkYXB0ZXItPm51bV90eF9xdWV1ZXMgPSByc3M7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KIH0KIAogLyoqCkBAIC0yNTUyLDcgKzI3MDMsOCBAQAogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJaW50IGk7CiAKLQlpZiAoIWFkYXB0ZXItPmxpbmtfdXApCisJaWYgKHRlc3RfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpIHx8CisJICAgIHRlc3RfYml0KF9fSVhHQkVWRl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCiAJCXJldHVybjsKIAogCVVQREFURV9WRl9DT1VOVEVSXzMyYml0KElYR0JFX1ZGR1BSQywgYWRhcHRlci0+c3RhdHMubGFzdF92ZmdwcmMsCkBAIC0yNTc2LDU3ICsyNzI4LDI4IEBACiB9CiAKIC8qKgotICogaXhnYmV2Zl93YXRjaGRvZyAtIFRpbWVyIENhbGwtYmFjaworICogaXhnYmV2Zl9zZXJ2aWNlX3RpbWVyIC0gVGltZXIgQ2FsbC1iYWNrCiAgKiBAZGF0YTogcG9pbnRlciB0byBhZGFwdGVyIGNhc3QgaW50byBhbiB1bnNpZ25lZCBsb25nCiAgKiovCi1zdGF0aWMgdm9pZCBpeGdiZXZmX3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIGl4Z2JldmZfc2VydmljZV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICopZGF0YTsKLQlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwotCXUzMiBlaWNzID0gMDsKLQlpbnQgaTsKIAotCS8qCi0JICogRG8gdGhlIHdhdGNoZG9nIG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgZHVlIHRvIHRoZSBsb3ZlbHkKLQkgKiBkZWxheXMgdGhhdCBzb21lIG9mIHRoZSBuZXdlciBoYXJkd2FyZSByZXF1aXJlcwotCSAqLworCS8qIFJlc2V0IHRoZSB0aW1lciAqLworCW1vZF90aW1lcigmYWRhcHRlci0+c2VydmljZV90aW1lciwgKEhaICogMikgKyBqaWZmaWVzKTsKIAotCWlmICh0ZXN0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKLQkJZ290byB3YXRjaGRvZ19zaG9ydF9jaXJjdWl0OwotCi0JLyogZ2V0IG9uZSBiaXQgZm9yIGV2ZXJ5IGFjdGl2ZSB0eC9yeCBpbnRlcnJ1cHQgdmVjdG9yICovCi0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOyBpKyspIHsKLQkJc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnF2ID0gYWRhcHRlci0+cV92ZWN0b3JbaV07Ci0JCWlmIChxdi0+cngucmluZyB8fCBxdi0+dHgucmluZykKLQkJCWVpY3MgfD0gMSA8PCBpOwotCX0KLQotCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRFSUNTLCBlaWNzKTsKLQotd2F0Y2hkb2dfc2hvcnRfY2lyY3VpdDoKLQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKKwlpeGdiZXZmX3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoYWRhcHRlcik7CiB9CiAKLS8qKgotICogaXhnYmV2Zl90eF90aW1lb3V0IC0gUmVzcG9uZCB0byBhIFR4IEhhbmcKLSAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKLSAqKi8KLXN0YXRpYyB2b2lkIGl4Z2JldmZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQorc3RhdGljIHZvaWQgaXhnYmV2Zl9yZXNldF9zdWJ0YXNrKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRVZGX0ZMQUdfUkVTRVRfUkVRVUVTVEVEKSkKKwkJcmV0dXJuOwogCi0JLyogRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgKi8KLQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKLX0KLQotc3RhdGljIHZvaWQgaXhnYmV2Zl9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyOwotCWFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl4Z2JldmZfYWRhcHRlciwgcmVzZXRfdGFzayk7CisJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFVkZfRkxBR19SRVNFVF9SRVFVRVNURUQ7CiAKIAkvKiBJZiB3ZSdyZSBhbHJlYWR5IGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi8KIAlpZiAodGVzdF9iaXQoX19JWEdCRVZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkgfHwKLQkgICAgdGVzdF9iaXQoX19JWEdCRVZGX1JFTU9WSU5HLCAmYWRhcHRlci0+c3RhdGUpIHx8CiAJICAgIHRlc3RfYml0KF9fSVhHQkVWRl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCiAJCXJldHVybjsKIApAQCAtMjYzNSwyMCArMjc1OCwxNDYgQEAKIAlpeGdiZXZmX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7CiB9CiAKLS8qKgotICogaXhnYmV2Zl93YXRjaGRvZ190YXNrIC0gd29ya2VyIHRocmVhZCB0byBicmluZyBsaW5rIHVwCi0gKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCi0gKiovCi1zdGF0aWMgdm9pZCBpeGdiZXZmX3dhdGNoZG9nX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorLyogaXhnYmV2Zl9jaGVja19oYW5nX3N1YnRhc2sgLSBjaGVjayBmb3IgaHVuZyBxdWV1ZXMgYW5kIGRyb3BwZWQgaW50ZXJydXB0cworICogQGFkYXB0ZXIgLSBwb2ludGVyIHRvIHRoZSBkZXZpY2UgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNlcnZlcyB0d28gcHVycG9zZXMuICBGaXJzdCBpdCBzdHJvYmVzIHRoZSBpbnRlcnJ1cHQgbGluZXMKKyAqIGluIG9yZGVyIHRvIG1ha2UgY2VydGFpbiBpbnRlcnJ1cHRzIGFyZSBvY2N1cnJpbmcuICBTZWNvbmRseSBpdCBzZXRzIHRoZQorICogYml0cyBuZWVkZWQgdG8gY2hlY2sgZm9yIFRYIGhhbmdzLiAgQXMgYSByZXN1bHQgd2Ugc2hvdWxkIGltbWVkaWF0ZWx5CisgKiBkZXRlcm1pbmUgaWYgYSBoYW5nIGhhcyBvY2N1cnJlZC4KKyAqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9jaGVja19oYW5nX3N1YnRhc2soc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCi0JCQkJCQkgICAgICAgc3RydWN0IGl4Z2JldmZfYWRhcHRlciwKLQkJCQkJCSAgICAgICB3YXRjaGRvZ190YXNrKTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGVpY3MgPSAwOworCWludCBpOworCisJLyogSWYgd2UncmUgZG93biBvciByZXNldHRpbmcsIGp1c3QgYmFpbCAqLworCWlmICh0ZXN0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSB8fAorCSAgICB0ZXN0X2JpdChfX0lYR0JFVkZfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKKwkvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyICovCisJaWYgKG5ldGlmX2NhcnJpZXJfb2soYWRhcHRlci0+bmV0ZGV2KSkgeworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQkJc2V0X2NoZWNrX2Zvcl90eF9oYW5nKGFkYXB0ZXItPnR4X3JpbmdbaV0pOworCX0KKworCS8qIGdldCBvbmUgYml0IGZvciBldmVyeSBhY3RpdmUgdHgvcnggaW50ZXJydXB0IHZlY3RvciAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsgaSsrKSB7CisJCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxdiA9IGFkYXB0ZXItPnFfdmVjdG9yW2ldOworCisJCWlmIChxdi0+cngucmluZyB8fCBxdi0+dHgucmluZykKKwkJCWVpY3MgfD0gMSA8PCBpOworCX0KKworCS8qIENhdXNlIHNvZnR3YXJlIGludGVycnVwdCB0byBlbnN1cmUgcmluZ3MgYXJlIGNsZWFuZWQgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZURUlDUywgZWljcyk7Cit9CisKKy8qKgorICogaXhnYmV2Zl93YXRjaGRvZ191cGRhdGVfbGluayAtIHVwZGF0ZSB0aGUgbGluayBzdGF0dXMKKyAqIEBhZGFwdGVyIC0gcG9pbnRlciB0byB0aGUgZGV2aWNlIGFkYXB0ZXIgc3RydWN0dXJlCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX3dhdGNoZG9nX3VwZGF0ZV9saW5rKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgbGlua19zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7CiAJYm9vbCBsaW5rX3VwID0gYWRhcHRlci0+bGlua191cDsKLQlzMzIgbmVlZF9yZXNldDsKKwlzMzIgZXJyOworCisJc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tYnhfbG9jayk7CisKKwllcnIgPSBody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmbGlua19zcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKKworCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tYnhfbG9jayk7CisKKwkvKiBpZiBjaGVjayBmb3IgbGluayByZXR1cm5zIGVycm9yIHdlIHdpbGwgbmVlZCB0byByZXNldCAqLworCWlmIChlcnIgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBhZGFwdGVyLT5sYXN0X3Jlc2V0ICsgKDEwICogSFopKSkgeworCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRVZGX0ZMQUdfUkVTRVRfUkVRVUVTVEVEOworCQlsaW5rX3VwID0gZmFsc2U7CisJfQorCisJYWRhcHRlci0+bGlua191cCA9IGxpbmtfdXA7CisJYWRhcHRlci0+bGlua19zcGVlZCA9IGxpbmtfc3BlZWQ7Cit9CisKKy8qKgorICogaXhnYmV2Zl93YXRjaGRvZ19saW5rX2lzX3VwIC0gdXBkYXRlIG5ldGlmX2NhcnJpZXIgc3RhdHVzIGFuZAorICoJCQkJIHByaW50IGxpbmsgdXAgbWVzc2FnZQorICogQGFkYXB0ZXIgLSBwb2ludGVyIHRvIHRoZSBkZXZpY2UgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfd2F0Y2hkb2dfbGlua19pc191cChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwkvKiBvbmx5IGNvbnRpbnVlIGlmIGxpbmsgd2FzIHByZXZpb3VzbHkgZG93biAqLworCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpCisJCXJldHVybjsKKworCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJOSUMgTGluayBpcyBVcCAlc1xuIiwKKwkJIChhZGFwdGVyLT5saW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKSA/CisJCSAiMTAgR2JwcyIgOgorCQkgKGFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCkgPworCQkgIjEgR2JwcyIgOgorCQkgKGFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xMDBfRlVMTCkgPworCQkgIjEwMCBNYnBzIiA6CisJCSAidW5rbm93biBzcGVlZCIpOworCisJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOworfQorCisvKioKKyAqIGl4Z2JldmZfd2F0Y2hkb2dfbGlua19pc19kb3duIC0gdXBkYXRlIG5ldGlmX2NhcnJpZXIgc3RhdHVzIGFuZAorICoJCQkJICAgcHJpbnQgbGluayBkb3duIG1lc3NhZ2UKKyAqIEBhZGFwdGVyIC0gcG9pbnRlciB0byB0aGUgYWRhcHRlciBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfd2F0Y2hkb2dfbGlua19pc19kb3duKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAwOworCisJLyogb25seSBjb250aW51ZSBpZiBsaW5rIHdhcyB1cCBwcmV2aW91c2x5ICovCisJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpCisJCXJldHVybjsKKworCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJOSUMgTGluayBpcyBEb3duXG4iKTsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Cit9CisKKy8qKgorICogaXhnYmV2Zl93YXRjaGRvZ19zdWJ0YXNrIC0gd29ya2VyIHRocmVhZCB0byBicmluZyBsaW5rIHVwCisgKiBAd29yazogcG9pbnRlciB0byB3b3JrX3N0cnVjdCBjb250YWluaW5nIG91ciBkYXRhCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX3dhdGNoZG9nX3N1YnRhc2soc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwkvKiBpZiBpbnRlcmZhY2UgaXMgZG93biBkbyBub3RoaW5nICovCisJaWYgKHRlc3RfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpIHx8CisJICAgIHRlc3RfYml0KF9fSVhHQkVWRl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKworCWl4Z2JldmZfd2F0Y2hkb2dfdXBkYXRlX2xpbmsoYWRhcHRlcik7CisKKwlpZiAoYWRhcHRlci0+bGlua191cCkKKwkJaXhnYmV2Zl93YXRjaGRvZ19saW5rX2lzX3VwKGFkYXB0ZXIpOworCWVsc2UKKwkJaXhnYmV2Zl93YXRjaGRvZ19saW5rX2lzX2Rvd24oYWRhcHRlcik7CisKKwlpeGdiZXZmX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKK30KKworLyoqCisgKiBpeGdiZXZmX3NlcnZpY2VfdGFzayAtIG1hbmFnZXMgYW5kIHJ1bnMgc3VidGFza3MKKyAqIEB3b3JrOiBwb2ludGVyIHRvIHdvcmtfc3RydWN0IGNvbnRhaW5pbmcgb3VyIGRhdGEKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJCQkgICAgICAgc3RydWN0IGl4Z2JldmZfYWRhcHRlciwKKwkJCQkJCSAgICAgICBzZXJ2aWNlX3Rhc2spOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKIAlpZiAoSVhHQkVfUkVNT1ZFRChody0+aHdfYWRkcikpIHsKIAkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgewpAQCAtMjY1OCw3MyArMjkwNywxMyBAQAogCQl9CiAJCXJldHVybjsKIAl9CisKIAlpeGdiZXZmX3F1ZXVlX3Jlc2V0X3N1YnRhc2soYWRhcHRlcik7CisJaXhnYmV2Zl9yZXNldF9zdWJ0YXNrKGFkYXB0ZXIpOworCWl4Z2JldmZfd2F0Y2hkb2dfc3VidGFzayhhZGFwdGVyKTsKKwlpeGdiZXZmX2NoZWNrX2hhbmdfc3VidGFzayhhZGFwdGVyKTsKIAotCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfSU5fV0FUQ0hET0dfVEFTSzsKLQotCS8qCi0JICogQWx3YXlzIGNoZWNrIHRoZSBsaW5rIG9uIHRoZSB3YXRjaGRvZyBiZWNhdXNlIHdlIGhhdmUKLQkgKiBubyBMU0MgaW50ZXJydXB0Ci0JICovCi0Jc3Bpbl9sb2NrX2JoKCZhZGFwdGVyLT5tYnhfbG9jayk7Ci0KLQluZWVkX3Jlc2V0ID0gaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJmxpbmtfc3BlZWQsICZsaW5rX3VwLCBmYWxzZSk7Ci0KLQlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWJ4X2xvY2spOwotCi0JaWYgKG5lZWRfcmVzZXQpIHsKLQkJYWRhcHRlci0+bGlua191cCA9IGxpbmtfdXA7Ci0JCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBsaW5rX3NwZWVkOwotCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwotCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKLQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7Ci0JCWdvdG8gcGZfaGFzX3Jlc2V0OwotCX0KLQlhZGFwdGVyLT5saW5rX3VwID0gbGlua191cDsKLQlhZGFwdGVyLT5saW5rX3NwZWVkID0gbGlua19zcGVlZDsKLQotCWlmIChsaW5rX3VwKSB7Ci0JCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7Ci0JCQljaGFyICpsaW5rX3NwZWVkX3N0cmluZzsKLQkJCXN3aXRjaCAobGlua19zcGVlZCkgewotCQkJY2FzZSBJWEdCRV9MSU5LX1NQRUVEXzEwR0JfRlVMTDoKLQkJCQlsaW5rX3NwZWVkX3N0cmluZyA9ICIxMCBHYnBzIjsKLQkJCQlicmVhazsKLQkJCWNhc2UgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDoKLQkJCQlsaW5rX3NwZWVkX3N0cmluZyA9ICIxIEdicHMiOwotCQkJCWJyZWFrOwotCQkJY2FzZSBJWEdCRV9MSU5LX1NQRUVEXzEwMF9GVUxMOgotCQkJCWxpbmtfc3BlZWRfc3RyaW5nID0gIjEwMCBNYnBzIjsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJbGlua19zcGVlZF9zdHJpbmcgPSAidW5rbm93biBzcGVlZCI7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJCSJOSUMgTGluayBpcyBVcCwgJXNcbiIsIGxpbmtfc3BlZWRfc3RyaW5nKTsKLQkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKLQkJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpOwotCQl9Ci0JfSBlbHNlIHsKLQkJYWRhcHRlci0+bGlua191cCA9IGZhbHNlOwotCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gMDsKLQkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewotCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIk5JQyBMaW5rIGlzIERvd25cbiIpOwotCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKLQkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwotCQl9Ci0JfQotCi0JaXhnYmV2Zl91cGRhdGVfc3RhdHMoYWRhcHRlcik7Ci0KLXBmX2hhc19yZXNldDoKLQkvKiBSZXNldCB0aGUgdGltZXIgKi8KLQlpZiAoIXRlc3RfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpICYmCi0JICAgICF0ZXN0X2JpdChfX0lYR0JFVkZfUkVNT1ZJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCi0JCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsCi0JCQkgIHJvdW5kX2ppZmZpZXMoamlmZmllcyArICgyICogSFopKSk7Ci0KLQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19JTl9XQVRDSERPR19UQVNLOworCWl4Z2JldmZfc2VydmljZV9ldmVudF9jb21wbGV0ZShhZGFwdGVyKTsKIH0KIAogLyoqCkBAIC0yOTQ0LDEwICszMTMzLDYgQEAKIAlpZiAoIWFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogZGlzYWxsb3cgb3BlbiBkdXJpbmcgdGVzdCAqLwotCWlmICh0ZXN0X2JpdChfX0lYR0JFVkZfVEVTVElORywgJmFkYXB0ZXItPnN0YXRlKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQogCWlmIChody0+YWRhcHRlcl9zdG9wcGVkKSB7CiAJCWl4Z2JldmZfcmVzZXQoYWRhcHRlcik7CiAJCS8qIGlmIGFkYXB0ZXIgaXMgc3RpbGwgc3RvcHBlZCB0aGVuIFBGIGlzbid0IHVwIGFuZApAQCAtMjk2MCw2ICszMTQ1LDEyIEBACiAJCX0KIAl9CiAKKwkvKiBkaXNhbGxvdyBvcGVuIGR1cmluZyB0ZXN0ICovCisJaWYgKHRlc3RfYml0KF9fSVhHQkVWRl9URVNUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwogCS8qIGFsbG9jYXRlIHRyYW5zbWl0IGRlc2NyaXB0b3JzICovCiAJZXJyID0gaXhnYmV2Zl9zZXR1cF9hbGxfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpOwogCWlmIChlcnIpCkBAIC0yOTc5LDE1ICszMTcwLDExIEBACiAJICovCiAJaXhnYmV2Zl9tYXBfcmluZ3NfdG9fdmVjdG9ycyhhZGFwdGVyKTsKIAotCWl4Z2JldmZfdXBfY29tcGxldGUoYWRhcHRlcik7Ci0KLQkvKiBjbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzLCBtYXkgYXV0byBtYXNrICovCi0JSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlDUik7CiAJZXJyID0gaXhnYmV2Zl9yZXF1ZXN0X2lycShhZGFwdGVyKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9yZXFfaXJxOwogCi0JaXhnYmV2Zl9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCWl4Z2JldmZfdXBfY29tcGxldGUoYWRhcHRlcik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMzA5OSw3ICszMjg2LDcgQEAKIAkvKiBBRFYgRFRZUCBUVUNNRCBNS1JMT0MvSVNDU0lIRURMRU4gKi8KIAl0eXBlX3R1Y21kID0gSVhHQkVfQURWVFhEX1RVQ01EX0w0VF9UQ1A7CiAKLQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKKwlpZiAoZmlyc3QtPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgewogCQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwogCQlpcGgtPnRvdF9sZW4gPSAwOwogCQlpcGgtPmNoZWNrID0gMDsKQEAgLTMxNTYsNyArMzM0Myw3IEBACiAKIAlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgewogCQl1OCBsNF9oZHIgPSAwOwotCQlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKKwkJc3dpdGNoIChmaXJzdC0+cHJvdG9jb2wpIHsKIAkJY2FzZSBodG9ucyhFVEhfUF9JUCk6CiAJCQl2bGFuX21hY2lwX2xlbnMgfD0gc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpOwogCQkJdHlwZV90dWNtZCB8PSBJWEdCRV9BRFZUWERfVFVDTURfSVBWNDsKQEAgLTM0NTIsOCArMzYzOSw4IEBACiAJZmlyc3QtPmJ5dGVjb3VudCA9IHNrYi0+bGVuOwogCWZpcnN0LT5nc29fc2VncyA9IDE7CiAKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCXR4X2ZsYWdzIHw9IHZsYW5fdHhfdGFnX2dldChza2IpOworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CisJCXR4X2ZsYWdzIHw9IHNrYl92bGFuX3RhZ19nZXQoc2tiKTsKIAkJdHhfZmxhZ3MgPDw9IElYR0JFX1RYX0ZMQUdTX1ZMQU5fU0hJRlQ7CiAJCXR4X2ZsYWdzIHw9IElYR0JFX1RYX0ZMQUdTX1ZMQU47CiAJfQpAQCAtMzgyMiwyOCArNDAwOSwyOCBAQAogCQkJICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfAogCQkJICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSOwogCi0JbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7Ci0JbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKLQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9JUFY2X0NTVU07Ci0JbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwKKwkJCQkgTkVUSUZfRl9UU082IHwKKwkJCQkgTkVUSUZfRl9JUF9DU1VNIHwKKwkJCQkgTkVUSUZfRl9JUFY2X0NTVU0gfAorCQkJCSBORVRJRl9GX1NHOwogCiAJaWYgKHBjaV91c2luZ19kYWMpCiAJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOwogCiAJbmV0ZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9VTklDQVNUX0ZMVDsKIAotCWluaXRfdGltZXIoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKLQlhZGFwdGVyLT53YXRjaGRvZ190aW1lci5mdW5jdGlvbiA9IGl4Z2JldmZfd2F0Y2hkb2c7Ci0JYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXI7Ci0KIAlpZiAoSVhHQkVfUkVNT1ZFRChody0+aHdfYWRkcikpIHsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfc3dfaW5pdDsKIAl9Ci0JSU5JVF9XT1JLKCZhZGFwdGVyLT5yZXNldF90YXNrLCBpeGdiZXZmX3Jlc2V0X3Rhc2spOwotCUlOSVRfV09SSygmYWRhcHRlci0+d2F0Y2hkb2dfdGFzaywgaXhnYmV2Zl93YXRjaGRvZ190YXNrKTsKLQlzZXRfYml0KF9fSVhHQkVWRl9XT1JLX0lOSVQsICZhZGFwdGVyLT5zdGF0ZSk7CisKKwlzZXR1cF90aW1lcigmYWRhcHRlci0+c2VydmljZV90aW1lciwgJml4Z2JldmZfc2VydmljZV90aW1lciwKKwkJICAgICh1bnNpZ25lZCBsb25nKWFkYXB0ZXIpOworCisJSU5JVF9XT1JLKCZhZGFwdGVyLT5zZXJ2aWNlX3Rhc2ssIGl4Z2JldmZfc2VydmljZV90YXNrKTsKKwlzZXRfYml0KF9fSVhHQkVWRl9TRVJWSUNFX0lOSVRFRCwgJmFkYXB0ZXItPnN0YXRlKTsKKwljbGVhcl9iaXQoX19JWEdCRVZGX1NFUlZJQ0VfU0NIRUQsICZhZGFwdGVyLT5zdGF0ZSk7CiAKIAllcnIgPSBpeGdiZXZmX2luaXRfaW50ZXJydXB0X3NjaGVtZShhZGFwdGVyKTsKIAlpZiAoZXJyKQpAQCAtMzkxNywxMSArNDEwNCw3IEBACiAJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAlzZXRfYml0KF9fSVhHQkVWRl9SRU1PVklORywgJmFkYXB0ZXItPnN0YXRlKTsKLQotCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7Ci0KLQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKLQljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZXJ2aWNlX3Rhc2spOwogCiAJaWYgKG5ldGRldi0+cmVnX3N0YXRlID09IE5FVFJFR19SRUdJU1RFUkVEKQogCQl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwpAQCAtMzk1NSw3ICs0MTM4LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JaWYgKCF0ZXN0X2JpdChfX0lYR0JFVkZfV09SS19JTklULCAmYWRhcHRlci0+c3RhdGUpKQorCWlmICghdGVzdF9iaXQoX19JWEdCRVZGX1NFUlZJQ0VfSU5JVEVELCAmYWRhcHRlci0+c3RhdGUpKQogCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKIAogCXJ0bmxfbG9jaygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaXhnYmV2Zi9yZWdzLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3JlZ3MuaAppbmRleCAwOWRkOGY2Li4zZTcxMmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3JlZ3MuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9peGdiZXZmL3JlZ3MuaApAQCAtNjksNiArNjksMTYgQEAKICNkZWZpbmUgSVhHQkVfVkZHT1RDX0xTQiAgICAgICAweDAyMDIwCiAjZGVmaW5lIElYR0JFX1ZGR09UQ19NU0IgICAgICAgMHgwMjAyNAogI2RlZmluZSBJWEdCRV9WRk1QUkMgICAgICAgICAgIDB4MDEwMzQKKyNkZWZpbmUgSVhHQkVfVkZNUlFDICAgICAgICAgICAweDMwMDAKKyNkZWZpbmUgSVhHQkVfVkZSU1NSSyh4KSAgICAgICAoMHgzMTAwICsgKCh4KSAqIDQpKQorI2RlZmluZSBJWEdCRV9WRlJFVEEoeCkgICAgICAgICgweDMyMDAgKyAoKHgpICogNCkpCisKKy8qIFZGTVJRQyBiaXRzICovCisjZGVmaW5lIElYR0JFX1ZGTVJRQ19SU1NFTiAgICAgICAgICAgICAgMHgwMDAwMDAwMSAgLyogUlNTIEVuYWJsZSAqLworI2RlZmluZSBJWEdCRV9WRk1SUUNfUlNTX0ZJRUxEX0lQVjRfVENQIDB4MDAwMTAwMDAKKyNkZWZpbmUgSVhHQkVfVkZNUlFDX1JTU19GSUVMRF9JUFY0ICAgICAweDAwMDIwMDAwCisjZGVmaW5lIElYR0JFX1ZGTVJRQ19SU1NfRklFTERfSVBWNiAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBJWEdCRV9WRk1SUUNfUlNTX0ZJRUxEX0lQVjZfVENQIDB4MDAyMDAwMDAKIAogI2RlZmluZSBJWEdCRV9XUklURV9GTFVTSChhKSAoSVhHQkVfUkVBRF9SRUcoYSwgSVhHQkVfVkZTVEFUVVMpKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9qbWUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ptZS5jCmluZGV4IDQ0Y2U3ZDguLjZlOWE3OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ptZS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ptZS5jCkBAIC0yMTU0LDkgKzIxNTQsOSBAQAogc3RhdGljIGlubGluZSB2b2lkCiBqbWVfdHhfdmxhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2xlMTYgKnZsYW4sIHU4ICpmbGFncykKIHsKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKIAkJKmZsYWdzIHw9IFRYRkxBR19UQUdPTjsKLQkJKnZsYW4gPSBjcHVfdG9fbGUxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJCSp2bGFuID0gY3B1X3RvX2xlMTYoc2tiX3ZsYW5fdGFnX2dldChza2IpKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXY2NDN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvbXY2NDN4eF9ldGguYwppbmRleCBhNjJmYzM4Li4xYzc1ODI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL212NjQzeHhfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9tdjY0M3h4X2V0aC5jCkBAIC0xOTIsNiArMTkyLDEwIEBACiAjZGVmaW5lIElTX1RTT19IRUFERVIodHhxLCBhZGRyKSBcCiAJKChhZGRyID49IHR4cS0+dHNvX2hkcnNfZG1hKSAmJiBcCiAJIChhZGRyIDwgdHhxLT50c29faGRyc19kbWEgKyB0eHEtPnR4X3Jpbmdfc2l6ZSAqIFRTT19IRUFERVJfU0laRSkpCisKKyNkZWZpbmUgREVTQ19ETUFfTUFQX1NJTkdMRSAwCisjZGVmaW5lIERFU0NfRE1BX01BUF9QQUdFIDEKKwogLyoKICAqIFJYL1RYIGRlc2NyaXB0b3JzLgogICovCkBAIC0zNjIsNiArMzY2LDcgQEAKIAlkbWFfYWRkcl90IHRzb19oZHJzX2RtYTsKIAogCXN0cnVjdCB0eF9kZXNjICp0eF9kZXNjX2FyZWE7CisJY2hhciAqdHhfZGVzY19tYXBwaW5nOyAvKiBhcnJheSB0byB0cmFjayB0aGUgdHlwZSBvZiB0aGUgZG1hIG1hcHBpbmcgKi8KIAlkbWFfYWRkcl90IHR4X2Rlc2NfZG1hOwogCWludCB0eF9kZXNjX2FyZWFfc2l6ZTsKIApAQCAtNzUwLDYgKzc1NSw3IEBACiAJaWYgKHR4cS0+dHhfY3Vycl9kZXNjID09IHR4cS0+dHhfcmluZ19zaXplKQogCQl0eHEtPnR4X2N1cnJfZGVzYyA9IDA7CiAJZGVzYyA9ICZ0eHEtPnR4X2Rlc2NfYXJlYVt0eF9pbmRleF07CisJdHhxLT50eF9kZXNjX21hcHBpbmdbdHhfaW5kZXhdID0gREVTQ19ETUFfTUFQX1NJTkdMRTsKIAogCWRlc2MtPmw0aV9jaGsgPSAwOwogCWRlc2MtPmJ5dGVfY250ID0gbGVuZ3RoOwpAQCAtODc5LDE0ICs4ODUsMTMgQEAKIAkJc2tiX2ZyYWdfdCAqdGhpc19mcmFnOwogCQlpbnQgdHhfaW5kZXg7CiAJCXN0cnVjdCB0eF9kZXNjICpkZXNjOwotCQl2b2lkICphZGRyOwogCiAJCXRoaXNfZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZyYWddOwotCQlhZGRyID0gcGFnZV9hZGRyZXNzKHRoaXNfZnJhZy0+cGFnZS5wKSArIHRoaXNfZnJhZy0+cGFnZV9vZmZzZXQ7CiAJCXR4X2luZGV4ID0gdHhxLT50eF9jdXJyX2Rlc2MrKzsKIAkJaWYgKHR4cS0+dHhfY3Vycl9kZXNjID09IHR4cS0+dHhfcmluZ19zaXplKQogCQkJdHhxLT50eF9jdXJyX2Rlc2MgPSAwOwogCQlkZXNjID0gJnR4cS0+dHhfZGVzY19hcmVhW3R4X2luZGV4XTsKKwkJdHhxLT50eF9kZXNjX21hcHBpbmdbdHhfaW5kZXhdID0gREVTQ19ETUFfTUFQX1BBR0U7CiAKIAkJLyoKIAkJICogVGhlIGxhc3QgZnJhZ21lbnQgd2lsbCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQKQEAgLTkwMiw4ICs5MDcsOSBAQAogCiAJCWRlc2MtPmw0aV9jaGsgPSAwOwogCQlkZXNjLT5ieXRlX2NudCA9IHNrYl9mcmFnX3NpemUodGhpc19mcmFnKTsKLQkJZGVzYy0+YnVmX3B0ciA9IGRtYV9tYXBfc2luZ2xlKG1wLT5kZXYtPmRldi5wYXJlbnQsIGFkZHIsCi0JCQkJCSAgICAgICBkZXNjLT5ieXRlX2NudCwgRE1BX1RPX0RFVklDRSk7CisJCWRlc2MtPmJ1Zl9wdHIgPSBza2JfZnJhZ19kbWFfbWFwKG1wLT5kZXYtPmRldi5wYXJlbnQsCisJCQkJCQkgdGhpc19mcmFnLCAwLCBkZXNjLT5ieXRlX2NudCwKKwkJCQkJCSBETUFfVE9fREVWSUNFKTsKIAl9CiB9CiAKQEAgLTkzNiw2ICs5NDIsNyBAQAogCWlmICh0eHEtPnR4X2N1cnJfZGVzYyA9PSB0eHEtPnR4X3Jpbmdfc2l6ZSkKIAkJdHhxLT50eF9jdXJyX2Rlc2MgPSAwOwogCWRlc2MgPSAmdHhxLT50eF9kZXNjX2FyZWFbdHhfaW5kZXhdOworCXR4cS0+dHhfZGVzY19tYXBwaW5nW3R4X2luZGV4XSA9IERFU0NfRE1BX01BUF9TSU5HTEU7CiAKIAlpZiAobnJfZnJhZ3MpIHsKIAkJdHhxX3N1Ym1pdF9mcmFnX3NrYih0eHEsIHNrYik7CkBAIC0xMDQ3LDkgKzEwNTQsMTIgQEAKIAkJaW50IHR4X2luZGV4OwogCQlzdHJ1Y3QgdHhfZGVzYyAqZGVzYzsKIAkJdTMyIGNtZF9zdHM7CisJCWNoYXIgZGVzY19kbWFfbWFwOwogCiAJCXR4X2luZGV4ID0gdHhxLT50eF91c2VkX2Rlc2M7CiAJCWRlc2MgPSAmdHhxLT50eF9kZXNjX2FyZWFbdHhfaW5kZXhdOworCQlkZXNjX2RtYV9tYXAgPSB0eHEtPnR4X2Rlc2NfbWFwcGluZ1t0eF9pbmRleF07CisKIAkJY21kX3N0cyA9IGRlc2MtPmNtZF9zdHM7CiAKIAkJaWYgKGNtZF9zdHMgJiBCVUZGRVJfT1dORURfQllfRE1BKSB7CkBAIC0xMDY1LDkgKzEwNzUsMTkgQEAKIAkJcmVjbGFpbWVkKys7CiAJCXR4cS0+dHhfZGVzY19jb3VudC0tOwogCi0JCWlmICghSVNfVFNPX0hFQURFUih0eHEsIGRlc2MtPmJ1Zl9wdHIpKQotCQkJZG1hX3VubWFwX3NpbmdsZShtcC0+ZGV2LT5kZXYucGFyZW50LCBkZXNjLT5idWZfcHRyLAotCQkJCQkgZGVzYy0+Ynl0ZV9jbnQsIERNQV9UT19ERVZJQ0UpOworCQlpZiAoIUlTX1RTT19IRUFERVIodHhxLCBkZXNjLT5idWZfcHRyKSkgeworCisJCQlpZiAoZGVzY19kbWFfbWFwID09IERFU0NfRE1BX01BUF9QQUdFKQorCQkJCWRtYV91bm1hcF9wYWdlKG1wLT5kZXYtPmRldi5wYXJlbnQsCisJCQkJCSAgICAgICBkZXNjLT5idWZfcHRyLAorCQkJCQkgICAgICAgZGVzYy0+Ynl0ZV9jbnQsCisJCQkJCSAgICAgICBETUFfVE9fREVWSUNFKTsKKwkJCWVsc2UKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKG1wLT5kZXYtPmRldi5wYXJlbnQsCisJCQkJCQkgZGVzYy0+YnVmX3B0ciwKKwkJCQkJCSBkZXNjLT5ieXRlX2NudCwKKwkJCQkJCSBETUFfVE9fREVWSUNFKTsKKwkJfQogCiAJCWlmIChjbWRfc3RzICYgVFhfRU5BQkxFX0lOVEVSUlVQVCkgewogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUoJnR4cS0+dHhfc2tiKTsKQEAgLTE5OTYsNiArMjAxNiw3IEBACiAJc3RydWN0IHR4X3F1ZXVlICp0eHEgPSBtcC0+dHhxICsgaW5kZXg7CiAJc3RydWN0IHR4X2Rlc2MgKnR4X2Rlc2M7CiAJaW50IHNpemU7CisJaW50IHJldDsKIAlpbnQgaTsKIAogCXR4cS0+aW5kZXggPSBpbmRleDsKQEAgLTIwNDgsMTggKzIwNjksMzQgQEAKIAkJCQkJbmV4dGkgKiBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpOwogCX0KIAorCXR4cS0+dHhfZGVzY19tYXBwaW5nID0ga2NhbGxvYyh0eHEtPnR4X3Jpbmdfc2l6ZSwgc2l6ZW9mKGNoYXIpLAorCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXR4cS0+dHhfZGVzY19tYXBwaW5nKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfZGVzY19hcmVhOworCX0KKwogCS8qIEFsbG9jYXRlIERNQSBidWZmZXJzIGZvciBUU08gTUFDL0lQL1RDUCBoZWFkZXJzICovCiAJdHhxLT50c29faGRycyA9IGRtYV9hbGxvY19jb2hlcmVudChtcC0+ZGV2LT5kZXYucGFyZW50LAogCQkJCQkgICB0eHEtPnR4X3Jpbmdfc2l6ZSAqIFRTT19IRUFERVJfU0laRSwKIAkJCQkJICAgJnR4cS0+dHNvX2hkcnNfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAodHhxLT50c29faGRycyA9PSBOVUxMKSB7Ci0JCWRtYV9mcmVlX2NvaGVyZW50KG1wLT5kZXYtPmRldi5wYXJlbnQsIHR4cS0+dHhfZGVzY19hcmVhX3NpemUsCi0JCQkJICB0eHEtPnR4X2Rlc2NfYXJlYSwgdHhxLT50eF9kZXNjX2RtYSk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2Rlc2NfbWFwcGluZzsKIAl9CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdHhxLT50eF9za2IpOwogCiAJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2Rlc2NfbWFwcGluZzoKKwlrZnJlZSh0eHEtPnR4X2Rlc2NfbWFwcGluZyk7CitlcnJfZnJlZV9kZXNjX2FyZWE6CisJaWYgKGluZGV4ID09IDAgJiYgc2l6ZSA8PSBtcC0+dHhfZGVzY19zcmFtX3NpemUpCisJCWlvdW5tYXAodHhxLT50eF9kZXNjX2FyZWEpOworCWVsc2UKKwkJZG1hX2ZyZWVfY29oZXJlbnQobXAtPmRldi0+ZGV2LnBhcmVudCwgdHhxLT50eF9kZXNjX2FyZWFfc2l6ZSwKKwkJCQkgIHR4cS0+dHhfZGVzY19hcmVhLCB0eHEtPnR4X2Rlc2NfZG1hKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCB0eHFfZGVpbml0KHN0cnVjdCB0eF9xdWV1ZSAqdHhxKQpAQCAtMjA3Nyw2ICsyMTE0LDggQEAKIAllbHNlCiAJCWRtYV9mcmVlX2NvaGVyZW50KG1wLT5kZXYtPmRldi5wYXJlbnQsIHR4cS0+dHhfZGVzY19hcmVhX3NpemUsCiAJCQkJICB0eHEtPnR4X2Rlc2NfYXJlYSwgdHhxLT50eF9kZXNjX2RtYSk7CisJa2ZyZWUodHhxLT50eF9kZXNjX21hcHBpbmcpOworCiAJaWYgKHR4cS0+dHNvX2hkcnMpCiAJCWRtYV9mcmVlX2NvaGVyZW50KG1wLT5kZXYtPmRldi5wYXJlbnQsCiAJCQkJICB0eHEtPnR4X3Jpbmdfc2l6ZSAqIFRTT19IRUFERVJfU0laRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvc2t5Mi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9za3kyLmMKaW5kZXggODY3YTZhMy4uZDlmNDQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9za3kyLmMKQEAgLTE4OTUsMTQgKzE4OTUsMTQgQEAKIAljdHJsID0gMDsKIAogCS8qIEFkZCBWTEFOIHRhZywgY2FuIHBpZ2d5YmFjayBvbiBMUkdMRU4gb3IgQUREUjY0ICovCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCWlmICghbGUpIHsKIAkJCWxlID0gZ2V0X3R4X2xlKHNreTIsICZzbG90KTsKIAkJCWxlLT5hZGRyID0gMDsKIAkJCWxlLT5vcGNvZGUgPSBPUF9WTEFOfEhXX09XTkVSOwogCQl9IGVsc2UKIAkJCWxlLT5vcGNvZGUgfD0gT1BfVkxBTjsKLQkJbGUtPmxlbmd0aCA9IGNwdV90b19iZTE2KHZsYW5fdHhfdGFnX2dldChza2IpKTsKKwkJbGUtPmxlbmd0aCA9IGNwdV90b19iZTE2KHNrYl92bGFuX3RhZ19nZXQoc2tiKSk7CiAJCWN0cmwgfD0gSU5TX1ZMQU47CiAJfQogCkBAIC0yNTk0LDcgKzI1OTQsNyBAQAogCXNreTItPnJ4X25leHQgPSAoc2t5Mi0+cnhfbmV4dCArIDEpICUgc2t5Mi0+cnhfcGVuZGluZzsKIAlwcmVmZXRjaChza3kyLT5yeF9yaW5nICsgc2t5Mi0+cnhfbmV4dCk7CiAKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChyZS0+c2tiKSkKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQocmUtPnNrYikpCiAJCWNvdW50IC09IFZMQU5fSExFTjsJLyogQWNjb3VudCBmb3IgdmxhbiB0YWcgKi8KIAogCS8qIFRoaXMgY2hpcCBoYXMgaGFyZHdhcmUgcHJvYmxlbXMgdGhhdCBnZW5lcmF0ZXMgYm9ndXMgc3RhdHVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9hbGxvYy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9hbGxvYy5jCmluZGV4IDk2M2RkN2UuLjBjNTFjNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvYWxsb2MuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2FsbG9jLmMKQEAgLTU5Miw3ICs1OTIsNyBAQAogCQlidWYtPm5idWZzICAgICAgICA9IDE7CiAJCWJ1Zi0+bnBhZ2VzICAgICAgID0gMTsKIAkJYnVmLT5wYWdlX3NoaWZ0ICAgPSBnZXRfb3JkZXIoc2l6ZSkgKyBQQUdFX1NISUZUOwotCQlidWYtPmRpcmVjdC5idWYgICA9IGRtYV9hbGxvY19jb2hlcmVudCgmZGV2LT5wZGV2LT5kZXYsCisJCWJ1Zi0+ZGlyZWN0LmJ1ZiAgID0gZG1hX2FsbG9jX2NvaGVyZW50KCZkZXYtPnBlcnNpc3QtPnBkZXYtPmRldiwKIAkJCQkJCSAgICAgICBzaXplLCAmdCwgZ2ZwKTsKIAkJaWYgKCFidWYtPmRpcmVjdC5idWYpCiAJCQlyZXR1cm4gLUVOT01FTTsKQEAgLTYxOSw3ICs2MTksOCBAQAogCiAJCWZvciAoaSA9IDA7IGkgPCBidWYtPm5idWZzOyArK2kpIHsKIAkJCWJ1Zi0+cGFnZV9saXN0W2ldLmJ1ZiA9Ci0JCQkJZG1hX2FsbG9jX2NvaGVyZW50KCZkZXYtPnBkZXYtPmRldiwgUEFHRV9TSVpFLAorCQkJCWRtYV9hbGxvY19jb2hlcmVudCgmZGV2LT5wZXJzaXN0LT5wZGV2LT5kZXYsCisJCQkJCQkgICBQQUdFX1NJWkUsCiAJCQkJCQkgICAmdCwgZ2ZwKTsKIAkJCWlmICghYnVmLT5wYWdlX2xpc3RbaV0uYnVmKQogCQkJCWdvdG8gZXJyX2ZyZWU7CkBAIC02NTcsMTUgKzY1OCwxNyBAQAogCWludCBpOwogCiAJaWYgKGJ1Zi0+bmJ1ZnMgPT0gMSkKLQkJZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+cGRldi0+ZGV2LCBzaXplLCBidWYtPmRpcmVjdC5idWYsCisJCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPnBlcnNpc3QtPnBkZXYtPmRldiwgc2l6ZSwKKwkJCQkgIGJ1Zi0+ZGlyZWN0LmJ1ZiwKIAkJCQkgIGJ1Zi0+ZGlyZWN0Lm1hcCk7CiAJZWxzZSB7Ci0JCWlmIChCSVRTX1BFUl9MT05HID09IDY0ICYmIGJ1Zi0+ZGlyZWN0LmJ1ZikKKwkJaWYgKEJJVFNfUEVSX0xPTkcgPT0gNjQpCiAJCQl2dW5tYXAoYnVmLT5kaXJlY3QuYnVmKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgYnVmLT5uYnVmczsgKytpKQogCQkJaWYgKGJ1Zi0+cGFnZV9saXN0W2ldLmJ1ZikKLQkJCQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5wZGV2LT5kZXYsIFBBR0VfU0laRSwKKwkJCQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5wZXJzaXN0LT5wZGV2LT5kZXYsCisJCQkJCQkgIFBBR0VfU0laRSwKIAkJCQkJCSAgYnVmLT5wYWdlX2xpc3RbaV0uYnVmLAogCQkJCQkJICBidWYtPnBhZ2VfbGlzdFtpXS5tYXApOwogCQlrZnJlZShidWYtPnBhZ2VfbGlzdCk7CkBAIC03MzgsNyArNzQxLDcgQEAKIAkJaWYgKCFtbHg0X2FsbG9jX2RiX2Zyb21fcGdkaXIocGdkaXIsIGRiLCBvcmRlcikpCiAJCQlnb3RvIG91dDsKIAotCXBnZGlyID0gbWx4NF9hbGxvY19kYl9wZ2RpcigmKGRldi0+cGRldi0+ZGV2KSwgZ2ZwKTsKKwlwZ2RpciA9IG1seDRfYWxsb2NfZGJfcGdkaXIoJmRldi0+cGVyc2lzdC0+cGRldi0+ZGV2LCBnZnApOwogCWlmICghcGdkaXIpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CkBAIC03NzUsNyArNzc4LDcgQEAKIAlzZXRfYml0KGksIGRiLT51LnBnZGlyLT5iaXRzW29dKTsKIAogCWlmIChiaXRtYXBfZnVsbChkYi0+dS5wZ2Rpci0+b3JkZXIxLCBNTFg0X0RCX1BFUl9QQUdFIC8gMikpIHsKLQkJZG1hX2ZyZWVfY29oZXJlbnQoJihkZXYtPnBkZXYtPmRldiksIFBBR0VfU0laRSwKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+cGVyc2lzdC0+cGRldi0+ZGV2LCBQQUdFX1NJWkUsCiAJCQkJICBkYi0+dS5wZ2Rpci0+ZGJfcGFnZSwgZGItPnUucGdkaXItPmRiX2RtYSk7CiAJCWxpc3RfZGVsKCZkYi0+dS5wZ2Rpci0+bGlzdCk7CiAJCWtmcmVlKGRiLT51LnBnZGlyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvY2F0YXMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvY2F0YXMuYwppbmRleCA5YzY1NmZlLi43MTVkZThhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2NhdGFzLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9jYXRhcy5jCkBAIC00MCwxNiArNDAsMTc3IEBACiAJTUxYNF9DQVRBU19QT0xMX0lOVEVSVkFMCT0gNSAqIEhaLAogfTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhjYXRhc19sb2NrKTsKIAotc3RhdGljIExJU1RfSEVBRChjYXRhc19saXN0KTsKLXN0YXRpYyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2F0YXNfd29yazsKIAotc3RhdGljIGludCBpbnRlcm5hbF9lcnJfcmVzZXQgPSAxOwotbW9kdWxlX3BhcmFtKGludGVybmFsX2Vycl9yZXNldCwgaW50LCAwNjQ0KTsKK2ludCBtbHg0X2ludGVybmFsX2Vycl9yZXNldCA9IDE7Cittb2R1bGVfcGFyYW1fbmFtZWQoaW50ZXJuYWxfZXJyX3Jlc2V0LCBtbHg0X2ludGVybmFsX2Vycl9yZXNldCwgIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGludGVybmFsX2Vycl9yZXNldCwKLQkJICJSZXNldCBkZXZpY2Ugb24gaW50ZXJuYWwgZXJyb3JzIGlmIG5vbi16ZXJvIgotCQkgIiAoZGVmYXVsdCAxLCBpbiBTUklPViBtb2RlIGRlZmF1bHQgaXMgMCkiKTsKKwkJICJSZXNldCBkZXZpY2Ugb24gaW50ZXJuYWwgZXJyb3JzIGlmIG5vbi16ZXJvIChkZWZhdWx0IDEpIik7CisKK3N0YXRpYyBpbnQgcmVhZF92ZW5kb3JfaWQoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJdTE2IHZlbmRvcl9pZCA9IDA7CisJaW50IHJldDsKKworCXJldCA9IHBjaV9yZWFkX2NvbmZpZ193b3JkKGRldi0+cGVyc2lzdC0+cGRldiwgMCwgJnZlbmRvcl9pZCk7CisJaWYgKHJldCkgeworCQltbHg0X2VycihkZXYsICJGYWlsZWQgdG8gcmVhZCB2ZW5kb3IgSUQsIHJldD0lZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAodmVuZG9yX2lkID09IDB4ZmZmZikgeworCQltbHg0X2VycihkZXYsICJQQ0kgY2FuJ3QgYmUgYWNjZXNzZWQgdG8gcmVhZCB2ZW5kb3IgaWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbHg0X3Jlc2V0X21hc3RlcihzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmIChtbHg0X2lzX21hc3RlcihkZXYpKQorCQltbHg0X3JlcG9ydF9pbnRlcm5hbF9lcnJfY29tbV9ldmVudChkZXYpOworCisJaWYgKCFwY2lfY2hhbm5lbF9vZmZsaW5lKGRldi0+cGVyc2lzdC0+cGRldikpIHsKKwkJZXJyID0gcmVhZF92ZW5kb3JfaWQoZGV2KTsKKwkJLyogSWYgUENJIGNhbid0IGJlIGFjY2Vzc2VkIHRvIHJlYWQgdmVuZG9yIElEIHdlIGFzc3VtZSB0aGF0IGl0cworCQkgKiBsaW5rIHdhcyBkaXNhYmxlZCBhbmQgY2hpcCB3YXMgYWxyZWFkeSByZXNldC4KKwkJICovCisJCWlmIChlcnIpCisJCQlyZXR1cm4gMDsKKworCQllcnIgPSBtbHg0X3Jlc2V0KGRldik7CisJCWlmIChlcnIpCisJCQltbHg0X2VycihkZXYsICJGYWlsIHRvIHJlc2V0IEhDQVxuIik7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBtbHg0X3Jlc2V0X3NsYXZlKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworI2RlZmluZSBDT01fQ0hBTl9SU1RfUkVRX09GRlNFVCAweDEwCisjZGVmaW5lIENPTV9DSEFOX1JTVF9BQ0tfT0ZGU0VUIDB4MDgKKworCXUzMiBjb21tX2ZsYWdzOworCXUzMiByc3RfcmVxOworCXUzMiByc3RfYWNrOworCXVuc2lnbmVkIGxvbmcgZW5kOworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKworCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKGRldi0+cGVyc2lzdC0+cGRldikpCisJCXJldHVybiAwOworCisJY29tbV9mbGFncyA9IHN3YWIzMihyZWFkbCgoX19pb21lbSBjaGFyICopcHJpdi0+bWZ1bmMuY29tbSArCisJCQkJICBNTFg0X0NPTU1fQ0hBTl9GTEFHUykpOworCWlmIChjb21tX2ZsYWdzID09IDB4ZmZmZmZmZmYpIHsKKwkJbWx4NF9lcnIoZGV2LCAiVkYgcmVzZXQgaXMgbm90IG5lZWRlZFxuIik7CisJCXJldHVybiAwOworCX0KKworCWlmICghKGRldi0+Y2Fwcy52Zl9jYXBzICYgTUxYNF9WRl9DQVBfRkxBR19SRVNFVCkpIHsKKwkJbWx4NF9lcnIoZGV2LCAiVkYgcmVzZXQgaXMgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlyc3RfcmVxID0gKGNvbW1fZmxhZ3MgJiAodTMyKSgxIDw8IENPTV9DSEFOX1JTVF9SRVFfT0ZGU0VUKSkgPj4KKwkJQ09NX0NIQU5fUlNUX1JFUV9PRkZTRVQ7CisJcnN0X2FjayA9IChjb21tX2ZsYWdzICYgKHUzMikoMSA8PCBDT01fQ0hBTl9SU1RfQUNLX09GRlNFVCkpID4+CisJCUNPTV9DSEFOX1JTVF9BQ0tfT0ZGU0VUOworCWlmIChyc3RfcmVxICE9IHJzdF9hY2spIHsKKwkJbWx4NF9lcnIoZGV2LCAiQ29tbXVuaWNhdGlvbiBjaGFubmVsIGlzbid0IHN5bmMsIGZhaWwgdG8gc2VuZCByZXNldFxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXJzdF9yZXEgXj0gMTsKKwltbHg0X3dhcm4oZGV2LCAiVkYgaXMgc2VuZGluZyByZXNldCByZXF1ZXN0IHRvIEZpcm13YXJlXG4iKTsKKwljb21tX2ZsYWdzID0gcnN0X3JlcSA8PCBDT01fQ0hBTl9SU1RfUkVRX09GRlNFVDsKKwlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKWNwdV90b19iZTMyKGNvbW1fZmxhZ3MpLAorCQkgICAgIChfX2lvbWVtIGNoYXIgKilwcml2LT5tZnVuYy5jb21tICsgTUxYNF9DT01NX0NIQU5fRkxBR1MpOworCS8qIE1ha2Ugc3VyZSB0aGF0IG91ciBjb21tIGNoYW5uZWwgd3JpdGUgZG9lc24ndAorCSAqIGdldCBtaXhlZCBpbiB3aXRoIHdyaXRlcyBmcm9tIGFub3RoZXIgQ1BVLgorCSAqLworCW1taW93YigpOworCisJZW5kID0gbXNlY3NfdG9famlmZmllcyhNTFg0X0NPTU1fVElNRSkgKyBqaWZmaWVzOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmQpKSB7CisJCWNvbW1fZmxhZ3MgPSBzd2FiMzIocmVhZGwoKF9faW9tZW0gY2hhciAqKXByaXYtPm1mdW5jLmNvbW0gKworCQkJCQkgIE1MWDRfQ09NTV9DSEFOX0ZMQUdTKSk7CisJCXJzdF9hY2sgPSAoY29tbV9mbGFncyAmICh1MzIpKDEgPDwgQ09NX0NIQU5fUlNUX0FDS19PRkZTRVQpKSA+PgorCQkJQ09NX0NIQU5fUlNUX0FDS19PRkZTRVQ7CisKKwkJLyogUmVhZGluZyByc3RfcmVxIGFnYWluIHNpbmNlIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgY2FuCisJCSAqIGJlIHJlc2V0IGF0IGFueSB0aW1lIGJ5IHRoZSBQRiBhbmQgYWxsIGl0cyBiaXRzIHdpbGwgYmUKKwkJICogc2V0IHRvIHplcm8uCisJCSAqLworCQlyc3RfcmVxID0gKGNvbW1fZmxhZ3MgJiAodTMyKSgxIDw8IENPTV9DSEFOX1JTVF9SRVFfT0ZGU0VUKSkgPj4KKwkJCUNPTV9DSEFOX1JTVF9SRVFfT0ZGU0VUOworCisJCWlmIChyc3RfYWNrID09IHJzdF9yZXEpIHsKKwkJCW1seDRfd2FybihkZXYsICJWRiBSZXNldCBzdWNjZWVkXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCWNvbmRfcmVzY2hlZCgpOworCX0KKwltbHg0X2VycihkZXYsICJGYWlsIHRvIHNlbmQgcmVzZXQgb3ZlciB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsXG4iKTsKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIGludCBtbHg0X2NvbW1faW50ZXJuYWxfZXJyKHUzMiBzbGF2ZV9yZWFkKQoreworCXJldHVybiAodTMyKUNPTU1fQ0hBTl9FVkVOVF9JTlRFUk5BTF9FUlIgPT0KKwkJKHNsYXZlX3JlYWQgJiAodTMyKUNPTU1fQ0hBTl9FVkVOVF9JTlRFUk5BTF9FUlIpID8gMSA6IDA7Cit9CisKK3ZvaWQgbWx4NF9lbnRlcl9lcnJvcl9zdGF0ZShzdHJ1Y3QgbWx4NF9kZXZfcGVyc2lzdGVudCAqcGVyc2lzdCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBtbHg0X2RldiAqZGV2OworCisJaWYgKCFtbHg0X2ludGVybmFsX2Vycl9yZXNldCkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmcGVyc2lzdC0+ZGV2aWNlX3N0YXRlX211dGV4KTsKKwlpZiAocGVyc2lzdC0+c3RhdGUgJiBNTFg0X0RFVklDRV9TVEFURV9JTlRFUk5BTF9FUlJPUikKKwkJZ290byBvdXQ7CisKKwlkZXYgPSBwZXJzaXN0LT5kZXY7CisJbWx4NF9lcnIoZGV2LCAiZGV2aWNlIGlzIGdvaW5nIHRvIGJlIHJlc2V0XG4iKTsKKwlpZiAobWx4NF9pc19zbGF2ZShkZXYpKQorCQllcnIgPSBtbHg0X3Jlc2V0X3NsYXZlKGRldik7CisJZWxzZQorCQllcnIgPSBtbHg0X3Jlc2V0X21hc3RlcihkZXYpOworCUJVR19PTihlcnIgIT0gMCk7CisKKwlkZXYtPnBlcnNpc3QtPnN0YXRlIHw9IE1MWDRfREVWSUNFX1NUQVRFX0lOVEVSTkFMX0VSUk9SOworCW1seDRfZXJyKGRldiwgImRldmljZSB3YXMgcmVzZXQgc3VjY2Vzc2Z1bGx5XG4iKTsKKwltdXRleF91bmxvY2soJnBlcnNpc3QtPmRldmljZV9zdGF0ZV9tdXRleCk7CisKKwkvKiBBdCB0aGF0IHN0ZXAgSFcgd2FzIGFscmVhZHkgcmVzZXQsIG5vdyBub3RpZnkgY2xpZW50cyAqLworCW1seDRfZGlzcGF0Y2hfZXZlbnQoZGV2LCBNTFg0X0RFVl9FVkVOVF9DQVRBU1RST1BISUNfRVJST1IsIDApOworCW1seDRfY21kX3dha2VfY29tcGxldGlvbnMoZGV2KTsKKwlyZXR1cm47CisKK291dDoKKwltdXRleF91bmxvY2soJnBlcnNpc3QtPmRldmljZV9zdGF0ZV9tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIG1seDRfaGFuZGxlX2Vycm9yX3N0YXRlKHN0cnVjdCBtbHg0X2Rldl9wZXJzaXN0ZW50ICpwZXJzaXN0KQoreworCWludCBlcnIgPSAwOworCisJbWx4NF9lbnRlcl9lcnJvcl9zdGF0ZShwZXJzaXN0KTsKKwltdXRleF9sb2NrKCZwZXJzaXN0LT5pbnRlcmZhY2Vfc3RhdGVfbXV0ZXgpOworCWlmIChwZXJzaXN0LT5pbnRlcmZhY2Vfc3RhdGUgJiBNTFg0X0lOVEVSRkFDRV9TVEFURV9VUCAmJgorCSAgICAhKHBlcnNpc3QtPmludGVyZmFjZV9zdGF0ZSAmIE1MWDRfSU5URVJGQUNFX1NUQVRFX0RFTEVUSU9OKSkgeworCQllcnIgPSBtbHg0X3Jlc3RhcnRfb25lKHBlcnNpc3QtPnBkZXYpOworCQltbHg0X2luZm8ocGVyc2lzdC0+ZGV2LCAibWx4NF9yZXN0YXJ0X29uZSB3YXMgZW5kZWQsIHJldD0lZFxuIiwKKwkJCSAgZXJyKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwZXJzaXN0LT5pbnRlcmZhY2Vfc3RhdGVfbXV0ZXgpOworfQogCiBzdGF0aWMgdm9pZCBkdW1wX2Vycl9idWYoc3RydWN0IG1seDRfZGV2ICpkZXYpCiB7CkBAIC02Nyw1OCArMjI4LDQwIEBACiB7CiAJc3RydWN0IG1seDRfZGV2ICpkZXYgPSAoc3RydWN0IG1seDRfZGV2ICopIGRldl9wdHI7CiAJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXUzMiBzbGF2ZV9yZWFkOwogCi0JaWYgKHJlYWRsKHByaXYtPmNhdGFzX2Vyci5tYXApKSB7Ci0JCS8qIElmIHRoZSBkZXZpY2UgaXMgb2ZmLWxpbmUsIHdlIGNhbm5vdCB0cnkgdG8gcmVjb3ZlciBpdCAqLwotCQlpZiAocGNpX2NoYW5uZWxfb2ZmbGluZShkZXYtPnBkZXYpKQotCQkJbW9kX3RpbWVyKCZwcml2LT5jYXRhc19lcnIudGltZXIsCi0JCQkJICByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBNTFg0X0NBVEFTX1BPTExfSU5URVJWQUwpKTsKLQkJZWxzZSB7Ci0JCQlkdW1wX2Vycl9idWYoZGV2KTsKLQkJCW1seDRfZGlzcGF0Y2hfZXZlbnQoZGV2LCBNTFg0X0RFVl9FVkVOVF9DQVRBU1RST1BISUNfRVJST1IsIDApOwotCi0JCQlpZiAoaW50ZXJuYWxfZXJyX3Jlc2V0KSB7Ci0JCQkJc3Bpbl9sb2NrKCZjYXRhc19sb2NrKTsKLQkJCQlsaXN0X2FkZCgmcHJpdi0+Y2F0YXNfZXJyLmxpc3QsICZjYXRhc19saXN0KTsKLQkJCQlzcGluX3VubG9jaygmY2F0YXNfbG9jayk7Ci0KLQkJCQlxdWV1ZV93b3JrKG1seDRfd3EsICZjYXRhc193b3JrKTsKLQkJCX0KKwlpZiAobWx4NF9pc19zbGF2ZShkZXYpKSB7CisJCXNsYXZlX3JlYWQgPSBzd2FiMzIocmVhZGwoJnByaXYtPm1mdW5jLmNvbW0tPnNsYXZlX3JlYWQpKTsKKwkJaWYgKG1seDRfY29tbV9pbnRlcm5hbF9lcnIoc2xhdmVfcmVhZCkpIHsKKwkJCW1seDRfd2FybihkZXYsICJJbnRlcm5hbCBlcnJvciBkZXRlY3RlZCBvbiB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsXG4iKTsKKwkJCWdvdG8gaW50ZXJuYWxfZXJyOwogCQl9Ci0JfSBlbHNlCi0JCW1vZF90aW1lcigmcHJpdi0+Y2F0YXNfZXJyLnRpbWVyLAotCQkJICByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBNTFg0X0NBVEFTX1BPTExfSU5URVJWQUwpKTsKKwl9IGVsc2UgaWYgKHJlYWRsKHByaXYtPmNhdGFzX2Vyci5tYXApKSB7CisJCWR1bXBfZXJyX2J1ZihkZXYpOworCQlnb3RvIGludGVybmFsX2VycjsKKwl9CisKKwlpZiAoZGV2LT5wZXJzaXN0LT5zdGF0ZSAmIE1MWDRfREVWSUNFX1NUQVRFX0lOVEVSTkFMX0VSUk9SKSB7CisJCW1seDRfd2FybihkZXYsICJJbnRlcm5hbCBlcnJvciBtYXJrIHdhcyBkZXRlY3RlZCBvbiBkZXZpY2VcbiIpOworCQlnb3RvIGludGVybmFsX2VycjsKKwl9CisKKwltb2RfdGltZXIoJnByaXYtPmNhdGFzX2Vyci50aW1lciwKKwkJICByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBNTFg0X0NBVEFTX1BPTExfSU5URVJWQUwpKTsKKwlyZXR1cm47CisKK2ludGVybmFsX2VycjoKKwlpZiAobWx4NF9pbnRlcm5hbF9lcnJfcmVzZXQpCisJCXF1ZXVlX3dvcmsoZGV2LT5wZXJzaXN0LT5jYXRhc193cSwgJmRldi0+cGVyc2lzdC0+Y2F0YXNfd29yayk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhdGFzX3Jlc2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2LCAqdG1wcHJpdjsKLQlzdHJ1Y3QgbWx4NF9kZXYgKmRldjsKKwlzdHJ1Y3QgbWx4NF9kZXZfcGVyc2lzdGVudCAqcGVyc2lzdCA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbWx4NF9kZXZfcGVyc2lzdGVudCwKKwkJCSAgICAgY2F0YXNfd29yayk7CiAKLQlMSVNUX0hFQUQodGxpc3QpOwotCWludCByZXQ7Ci0KLQlzcGluX2xvY2tfaXJxKCZjYXRhc19sb2NrKTsKLQlsaXN0X3NwbGljZV9pbml0KCZjYXRhc19saXN0LCAmdGxpc3QpOwotCXNwaW5fdW5sb2NrX2lycSgmY2F0YXNfbG9jayk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wcHJpdiwgJnRsaXN0LCBjYXRhc19lcnIubGlzdCkgewotCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHByaXYtPmRldi5wZGV2OwotCi0JCS8qIElmIHRoZSBkZXZpY2UgaXMgb2ZmLWxpbmUsIHdlIGNhbm5vdCByZXNldCBpdCAqLwotCQlpZiAocGNpX2NoYW5uZWxfb2ZmbGluZShwZGV2KSkKLQkJCWNvbnRpbnVlOwotCi0JCXJldCA9IG1seDRfcmVzdGFydF9vbmUocHJpdi0+ZGV2LnBkZXYpOwotCQkvKiAncHJpdicgbm93IGlzIG5vdCB2YWxpZCAqLwotCQlpZiAocmV0KQotCQkJcHJfZXJyKCJtbHg0ICVzOiBSZXNldCBmYWlsZWQgKCVkKVxuIiwKLQkJCSAgICAgICBwY2lfbmFtZShwZGV2KSwgcmV0KTsKLQkJZWxzZSB7Ci0JCQlkZXYgID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCQkJbWx4NF9kYmcoZGV2LCAiUmVzZXQgc3VjY2VlZGVkXG4iKTsKLQkJfQotCX0KKwltbHg0X2hhbmRsZV9lcnJvcl9zdGF0ZShwZXJzaXN0KTsKIH0KIAogdm9pZCBtbHg0X3N0YXJ0X2NhdGFzX3BvbGwoc3RydWN0IG1seDRfZGV2ICpkZXYpCkBAIC0xMjYsMjIgKzI2OSwyMSBAQAogCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKIAlwaHlzX2FkZHJfdCBhZGRyOwogCi0JLypJZiB3ZSBhcmUgaW4gU1JJT1YgdGhlIGRlZmF1bHQgb2YgdGhlIG1vZHVsZSBwYXJhbSBtdXN0IGJlIDAqLwotCWlmIChtbHg0X2lzX21mdW5jKGRldikpCi0JCWludGVybmFsX2Vycl9yZXNldCA9IDA7Ci0KIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+Y2F0YXNfZXJyLmxpc3QpOwogCWluaXRfdGltZXIoJnByaXYtPmNhdGFzX2Vyci50aW1lcik7CiAJcHJpdi0+Y2F0YXNfZXJyLm1hcCA9IE5VTEw7CiAKLQlhZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgcHJpdi0+ZncuY2F0YXNfYmFyKSArCi0JCXByaXYtPmZ3LmNhdGFzX29mZnNldDsKKwlpZiAoIW1seDRfaXNfc2xhdmUoZGV2KSkgeworCQlhZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGVyc2lzdC0+cGRldiwKKwkJCQkJICBwcml2LT5mdy5jYXRhc19iYXIpICsKKwkJCQkJICBwcml2LT5mdy5jYXRhc19vZmZzZXQ7CiAKLQlwcml2LT5jYXRhc19lcnIubWFwID0gaW9yZW1hcChhZGRyLCBwcml2LT5mdy5jYXRhc19zaXplICogNCk7Ci0JaWYgKCFwcml2LT5jYXRhc19lcnIubWFwKSB7Ci0JCW1seDRfd2FybihkZXYsICJGYWlsZWQgdG8gbWFwIGludGVybmFsIGVycm9yIGJ1ZmZlciBhdCAweCVsbHhcbiIsCi0JCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIGFkZHIpOwotCQlyZXR1cm47CisJCXByaXYtPmNhdGFzX2Vyci5tYXAgPSBpb3JlbWFwKGFkZHIsIHByaXYtPmZ3LmNhdGFzX3NpemUgKiA0KTsKKwkJaWYgKCFwcml2LT5jYXRhc19lcnIubWFwKSB7CisJCQltbHg0X3dhcm4oZGV2LCAiRmFpbGVkIHRvIG1hcCBpbnRlcm5hbCBlcnJvciBidWZmZXIgYXQgMHglbGx4XG4iLAorCQkJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylhZGRyKTsKKwkJCXJldHVybjsKKwkJfQogCX0KIAogCXByaXYtPmNhdGFzX2Vyci50aW1lci5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKSBkZXY7CkBAIC0xNTcsMTUgKzI5OSwyOSBAQAogCiAJZGVsX3RpbWVyX3N5bmMoJnByaXYtPmNhdGFzX2Vyci50aW1lcik7CiAKLQlpZiAocHJpdi0+Y2F0YXNfZXJyLm1hcCkKKwlpZiAocHJpdi0+Y2F0YXNfZXJyLm1hcCkgewogCQlpb3VubWFwKHByaXYtPmNhdGFzX2Vyci5tYXApOworCQlwcml2LT5jYXRhc19lcnIubWFwID0gTlVMTDsKKwl9CiAKLQlzcGluX2xvY2tfaXJxKCZjYXRhc19sb2NrKTsKLQlsaXN0X2RlbCgmcHJpdi0+Y2F0YXNfZXJyLmxpc3QpOwotCXNwaW5fdW5sb2NrX2lycSgmY2F0YXNfbG9jayk7CisJaWYgKGRldi0+cGVyc2lzdC0+aW50ZXJmYWNlX3N0YXRlICYgTUxYNF9JTlRFUkZBQ0VfU1RBVEVfREVMRVRJT04pCisJCWZsdXNoX3dvcmtxdWV1ZShkZXYtPnBlcnNpc3QtPmNhdGFzX3dxKTsKIH0KIAotdm9pZCAgX19pbml0IG1seDRfY2F0YXNfaW5pdCh2b2lkKQoraW50ICBtbHg0X2NhdGFzX2luaXQoc3RydWN0IG1seDRfZGV2ICpkZXYpCiB7Ci0JSU5JVF9XT1JLKCZjYXRhc193b3JrLCBjYXRhc19yZXNldCk7CisJSU5JVF9XT1JLKCZkZXYtPnBlcnNpc3QtPmNhdGFzX3dvcmssIGNhdGFzX3Jlc2V0KTsKKwlkZXYtPnBlcnNpc3QtPmNhdGFzX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoIm1seDRfaGVhbHRoIik7CisJaWYgKCFkZXYtPnBlcnNpc3QtPmNhdGFzX3dxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCit2b2lkIG1seDRfY2F0YXNfZW5kKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCWlmIChkZXYtPnBlcnNpc3QtPmNhdGFzX3dxKSB7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGRldi0+cGVyc2lzdC0+Y2F0YXNfd3EpOworCQlkZXYtPnBlcnNpc3QtPmNhdGFzX3dxID0gTlVMTDsKKwl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2NtZC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9jbWQuYwppbmRleCA1YzkzZDE0Li5hNjgxZDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvY21kLmMKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbHg0L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPHJkbWEvaWJfc21pLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC0xODIsNiArMTgzLDcyIEBACiAJfQogfQogCitzdGF0aWMgaW50IG1seDRfaW50ZXJuYWxfZXJyX3JldF92YWx1ZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTE2IG9wLAorCQkJCSAgICAgICB1OCBvcF9tb2RpZmllcikKK3sKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBNTFg0X0NNRF9VTk1BUF9JQ006CisJY2FzZSBNTFg0X0NNRF9VTk1BUF9JQ01fQVVYOgorCWNhc2UgTUxYNF9DTURfVU5NQVBfRkE6CisJY2FzZSBNTFg0X0NNRF8yUlNUX1FQOgorCWNhc2UgTUxYNF9DTURfSFcyU1dfRVE6CisJY2FzZSBNTFg0X0NNRF9IVzJTV19DUToKKwljYXNlIE1MWDRfQ01EX0hXMlNXX1NSUToKKwljYXNlIE1MWDRfQ01EX0hXMlNXX01QVDoKKwljYXNlIE1MWDRfQ01EX0NMT1NFX0hDQToKKwljYXNlIE1MWDRfUVBfRkxPV19TVEVFUklOR19ERVRBQ0g6CisJY2FzZSBNTFg0X0NNRF9GUkVFX1JFUzoKKwljYXNlIE1MWDRfQ01EX0NMT1NFX1BPUlQ6CisJCXJldHVybiBDTURfU1RBVF9PSzsKKworCWNhc2UgTUxYNF9DTURfUVBfQVRUQUNIOgorCQkvKiBPbiBEZXRhY2ggY2FzZSByZXR1cm4gc3VjY2VzcyAqLworCQlpZiAob3BfbW9kaWZpZXIgPT0gMCkKKwkJCXJldHVybiBDTURfU1RBVF9PSzsKKwkJcmV0dXJuIG1seDRfc3RhdHVzX3RvX2Vycm5vKENNRF9TVEFUX0lOVEVSTkFMX0VSUik7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gbWx4NF9zdGF0dXNfdG9fZXJybm8oQ01EX1NUQVRfSU5URVJOQUxfRVJSKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9jbG9zaW5nX2NtZF9mYXRhbF9lcnJvcih1MTYgb3AsIHU4IGZ3X3N0YXR1cykKK3sKKwkvKiBBbnkgZXJyb3IgZHVyaW5nIHRoZSBjbG9zaW5nIGNvbW1hbmRzIGJlbG93IGlzIGNvbnNpZGVyZWQgZmF0YWwgKi8KKwlpZiAob3AgPT0gTUxYNF9DTURfQ0xPU0VfSENBIHx8CisJICAgIG9wID09IE1MWDRfQ01EX0hXMlNXX0VRIHx8CisJICAgIG9wID09IE1MWDRfQ01EX0hXMlNXX0NRIHx8CisJICAgIG9wID09IE1MWDRfQ01EXzJSU1RfUVAgfHwKKwkgICAgb3AgPT0gTUxYNF9DTURfSFcyU1dfU1JRIHx8CisJICAgIG9wID09IE1MWDRfQ01EX1NZTkNfVFBUIHx8CisJICAgIG9wID09IE1MWDRfQ01EX1VOTUFQX0lDTSB8fAorCSAgICBvcCA9PSBNTFg0X0NNRF9VTk1BUF9JQ01fQVVYIHx8CisJICAgIG9wID09IE1MWDRfQ01EX1VOTUFQX0ZBKQorCQlyZXR1cm4gMTsKKwkvKiBFcnJvciBvbiBNTFg0X0NNRF9IVzJTV19NUFQgaXMgZmF0YWwgZXhjZXB0IHdoZW4gZncgc3RhdHVzIGVxdWFscworCSAgKiBDTURfU1RBVF9SRUdfQk9VTkQuCisJICAqIFRoaXMgc3RhdHVzIGluZGljYXRlcyB0aGF0IG1lbW9yeSByZWdpb24gaGFzIG1lbW9yeSB3aW5kb3dzIGJvdW5kIHRvIGl0CisJICAqIHdoaWNoIG1heSByZXN1bHQgZnJvbSBpbnZhbGlkIHVzZXIgc3BhY2UgdXNhZ2UgYW5kIGlzIG5vdCBmYXRhbC4KKwkgICovCisJaWYgKG9wID09IE1MWDRfQ01EX0hXMlNXX01QVCAmJiBmd19zdGF0dXMgIT0gQ01EX1NUQVRfUkVHX0JPVU5EKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbHg0X2NtZF9yZXNldF9mbG93KHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1MTYgb3AsIHU4IG9wX21vZGlmaWVyLAorCQkJICAgICAgIGludCBlcnIpCit7CisJLyogT25seSBpZiByZXNldCBmbG93IGlzIHJlYWxseSBhY3RpdmUgcmV0dXJuIGNvZGUgaXMgYmFzZWQgb24KKwkgICogY29tbWFuZCwgb3RoZXJ3aXNlIGN1cnJlbnQgZXJyb3IgY29kZSBpcyByZXR1cm5lZC4KKwkgICovCisJaWYgKG1seDRfaW50ZXJuYWxfZXJyX3Jlc2V0KSB7CisJCW1seDRfZW50ZXJfZXJyb3Jfc3RhdGUoZGV2LT5wZXJzaXN0KTsKKwkJZXJyID0gbWx4NF9pbnRlcm5hbF9lcnJfcmV0X3ZhbHVlKGRldiwgb3AsIG9wX21vZGlmaWVyKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgaW50IGNvbW1fcGVuZGluZyhzdHJ1Y3QgbWx4NF9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CkBAIC0xOTAsMTYgKzI1NywzMCBAQAogCXJldHVybiAoc3dhYjMyKHN0YXR1cykgPj4gMzEpICE9IHByaXYtPmNtZC5jb21tX3RvZ2dsZTsKIH0KIAotc3RhdGljIHZvaWQgbWx4NF9jb21tX2NtZF9wb3N0KHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1OCBjbWQsIHUxNiBwYXJhbSkKK3N0YXRpYyBpbnQgbWx4NF9jb21tX2NtZF9wb3N0KHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1OCBjbWQsIHUxNiBwYXJhbSkKIHsKIAlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CiAJdTMyIHZhbDsKIAorCS8qIFRvIGF2b2lkIHdyaXRpbmcgdG8gdW5rbm93biBhZGRyZXNzZXMgYWZ0ZXIgdGhlIGRldmljZSBzdGF0ZSB3YXMKKwkgKiBjaGFuZ2VkIHRvIGludGVybmFsIGVycm9yIGFuZCB0aGUgZnVuY3Rpb24gd2FzIHJlc3QsCisJICogY2hlY2sgdGhlIElOVEVSTkFMX0VSUk9SIGZsYWcgd2hpY2ggaXMgdXBkYXRlZCB1bmRlcgorCSAqIGRldmljZV9zdGF0ZV9tdXRleCBsb2NrLgorCSAqLworCW11dGV4X2xvY2soJmRldi0+cGVyc2lzdC0+ZGV2aWNlX3N0YXRlX211dGV4KTsKKworCWlmIChkZXYtPnBlcnNpc3QtPnN0YXRlICYgTUxYNF9ERVZJQ0VfU1RBVEVfSU5URVJOQUxfRVJST1IpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnBlcnNpc3QtPmRldmljZV9zdGF0ZV9tdXRleCk7CisJCXJldHVybiAtRUlPOworCX0KKwogCXByaXYtPmNtZC5jb21tX3RvZ2dsZSBePSAxOwogCXZhbCA9IHBhcmFtIHwgKGNtZCA8PCAxNikgfCAocHJpdi0+Y21kLmNvbW1fdG9nZ2xlIDw8IDMxKTsKIAlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKSBjcHVfdG9fYmUzMih2YWwpLAogCQkgICAgICZwcml2LT5tZnVuYy5jb21tLT5zbGF2ZV93cml0ZSk7CiAJbW1pb3diKCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnBlcnNpc3QtPmRldmljZV9zdGF0ZV9tdXRleCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbWx4NF9jb21tX2NtZF9wb2xsKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1OCBjbWQsIHUxNiBwYXJhbSwKQEAgLTIxOSw3ICszMDAsMTMgQEAKIAogCS8qIFdyaXRlIGNvbW1hbmQgKi8KIAlkb3duKCZwcml2LT5jbWQucG9sbF9zZW0pOwotCW1seDRfY29tbV9jbWRfcG9zdChkZXYsIGNtZCwgcGFyYW0pOworCWlmIChtbHg0X2NvbW1fY21kX3Bvc3QoZGV2LCBjbWQsIHBhcmFtKSkgeworCQkvKiBPbmx5IGluIGNhc2UgdGhlIGRldmljZSBzdGF0ZSBpcyBJTlRFUk5BTF9FUlJPUiwKKwkJICogbWx4NF9jb21tX2NtZF9wb3N0IHJldHVybnMgd2l0aCBhbiBlcnJvcgorCQkgKi8KKwkJZXJyID0gbWx4NF9zdGF0dXNfdG9fZXJybm8oQ01EX1NUQVRfSU5URVJOQUxfRVJSKTsKKwkJZ290byBvdXQ7CisJfQogCiAJZW5kID0gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSArIGppZmZpZXM7CiAJd2hpbGUgKGNvbW1fcGVuZGluZyhkZXYpICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZCkpCkBAIC0yMzEsMTggKzMxOCwyMyBAQAogCQkgKiBpcyBNTFg0X0RFTEFZX1JFU0VUX1NMQVZFKi8KIAkJaWYgKChNTFg0X0NPTU1fQ01EX1JFU0VUID09IGNtZCkpIHsKIAkJCWVyciA9IE1MWDRfREVMQVlfUkVTRVRfU0xBVkU7CisJCQlnb3RvIG91dDsKIAkJfSBlbHNlIHsKLQkJCW1seDRfd2FybihkZXYsICJDb21tdW5pY2F0aW9uIGNoYW5uZWwgdGltZWQgb3V0XG4iKTsKLQkJCWVyciA9IC1FVElNRURPVVQ7CisJCQltbHg0X3dhcm4oZGV2LCAiQ29tbXVuaWNhdGlvbiBjaGFubmVsIGNvbW1hbmQgMHgleCB0aW1lZCBvdXRcbiIsCisJCQkJICBjbWQpOworCQkJZXJyID0gbWx4NF9zdGF0dXNfdG9fZXJybm8oQ01EX1NUQVRfSU5URVJOQUxfRVJSKTsKIAkJfQogCX0KIAorCWlmIChlcnIpCisJCW1seDRfZW50ZXJfZXJyb3Jfc3RhdGUoZGV2LT5wZXJzaXN0KTsKK291dDoKIAl1cCgmcHJpdi0+Y21kLnBvbGxfc2VtKTsKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1seDRfY29tbV9jbWRfd2FpdChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTggb3AsCi0JCQkgICAgICB1MTYgcGFyYW0sIHVuc2lnbmVkIGxvbmcgdGltZW91dCkKK3N0YXRpYyBpbnQgbWx4NF9jb21tX2NtZF93YWl0KHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1OCB2aGNyX2NtZCwKKwkJCSAgICAgIHUxNiBwYXJhbSwgdTE2IG9wLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCiB7CiAJc3RydWN0IG1seDRfY21kICpjbWQgPSAmbWx4NF9wcml2KGRldiktPmNtZDsKIAlzdHJ1Y3QgbWx4NF9jbWRfY29udGV4dCAqY29udGV4dDsKQEAgLTI1OCwzNCArMzUwLDQ5IEBACiAJY21kLT5mcmVlX2hlYWQgPSBjb250ZXh0LT5uZXh0OwogCXNwaW5fdW5sb2NrKCZjbWQtPmNvbnRleHRfbG9jayk7CiAKLQlpbml0X2NvbXBsZXRpb24oJmNvbnRleHQtPmRvbmUpOworCXJlaW5pdF9jb21wbGV0aW9uKCZjb250ZXh0LT5kb25lKTsKIAotCW1seDRfY29tbV9jbWRfcG9zdChkZXYsIG9wLCBwYXJhbSk7CisJaWYgKG1seDRfY29tbV9jbWRfcG9zdChkZXYsIHZoY3JfY21kLCBwYXJhbSkpIHsKKwkJLyogT25seSBpbiBjYXNlIHRoZSBkZXZpY2Ugc3RhdGUgaXMgSU5URVJOQUxfRVJST1IsCisJCSAqIG1seDRfY29tbV9jbWRfcG9zdCByZXR1cm5zIHdpdGggYW4gZXJyb3IKKwkJICovCisJCWVyciA9IG1seDRfc3RhdHVzX3RvX2Vycm5vKENNRF9TVEFUX0lOVEVSTkFMX0VSUik7CisJCWdvdG8gb3V0OworCX0KIAogCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZjb250ZXh0LT5kb25lLAogCQkJCQkgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSkpIHsKLQkJbWx4NF93YXJuKGRldiwgImNvbW11bmljYXRpb24gY2hhbm5lbCBjb21tYW5kIDB4JXggdGltZWQgb3V0XG4iLAotCQkJICBvcCk7Ci0JCWVyciA9IC1FQlVTWTsKLQkJZ290byBvdXQ7CisJCW1seDRfd2FybihkZXYsICJjb21tdW5pY2F0aW9uIGNoYW5uZWwgY29tbWFuZCAweCV4IChvcD0weCV4KSB0aW1lZCBvdXRcbiIsCisJCQkgIHZoY3JfY21kLCBvcCk7CisJCWdvdG8gb3V0X3Jlc2V0OwogCX0KIAogCWVyciA9IGNvbnRleHQtPnJlc3VsdDsKIAlpZiAoZXJyICYmIGNvbnRleHQtPmZ3X3N0YXR1cyAhPSBDTURfU1RBVF9NVUxUSV9GVU5DX1JFUSkgewogCQltbHg0X2VycihkZXYsICJjb21tYW5kIDB4JXggZmFpbGVkOiBmdyBzdGF0dXMgPSAweCV4XG4iLAotCQkJIG9wLCBjb250ZXh0LT5md19zdGF0dXMpOwotCQlnb3RvIG91dDsKKwkJCSB2aGNyX2NtZCwgY29udGV4dC0+Zndfc3RhdHVzKTsKKwkJaWYgKG1seDRfY2xvc2luZ19jbWRfZmF0YWxfZXJyb3Iob3AsIGNvbnRleHQtPmZ3X3N0YXR1cykpCisJCQlnb3RvIG91dF9yZXNldDsKIAl9CiAKLW91dDoKIAkvKiB3YWl0IGZvciBjb21tIGNoYW5uZWwgcmVhZHkKIAkgKiB0aGlzIGlzIG5lY2Vzc2FyeSBmb3IgcHJldmVudGlvbiB0aGUgcmFjZQogCSAqIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gZXZlbnQgdG8gcG9sbGluZyBtb2RlCisJICogU2tpcHBpbmcgdGhpcyBzZWN0aW9uIGluIGNhc2UgdGhlIGRldmljZSBpcyBpbiBGQVRBTF9FUlJPUiBzdGF0ZSwKKwkgKiBJbiB0aGlzIHN0YXRlLCBubyBjb21tYW5kcyBhcmUgc2VudCB2aWEgdGhlIGNvbW0gY2hhbm5lbCB1bnRpbAorCSAqIHRoZSBkZXZpY2UgaGFzIHJldHVybmVkIGZyb20gcmVzZXQuCiAJICovCi0JZW5kID0gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSArIGppZmZpZXM7Ci0Jd2hpbGUgKGNvbW1fcGVuZGluZyhkZXYpICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZCkpCi0JCWNvbmRfcmVzY2hlZCgpOworCWlmICghKGRldi0+cGVyc2lzdC0+c3RhdGUgJiBNTFg0X0RFVklDRV9TVEFURV9JTlRFUk5BTF9FUlJPUikpIHsKKwkJZW5kID0gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSArIGppZmZpZXM7CisJCXdoaWxlIChjb21tX3BlbmRpbmcoZGV2KSAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmQpKQorCQkJY29uZF9yZXNjaGVkKCk7CisJfQorCWdvdG8gb3V0OwogCitvdXRfcmVzZXQ6CisJZXJyID0gbWx4NF9zdGF0dXNfdG9fZXJybm8oQ01EX1NUQVRfSU5URVJOQUxfRVJSKTsKKwltbHg0X2VudGVyX2Vycm9yX3N0YXRlKGRldi0+cGVyc2lzdCk7CitvdXQ6CiAJc3Bpbl9sb2NrKCZjbWQtPmNvbnRleHRfbG9jayk7CiAJY29udGV4dC0+bmV4dCA9IGNtZC0+ZnJlZV9oZWFkOwogCWNtZC0+ZnJlZV9oZWFkID0gY29udGV4dCAtIGNtZC0+Y29udGV4dDsKQEAgLTI5NiwxMCArNDAzLDEzIEBACiB9CiAKIGludCBtbHg0X2NvbW1fY21kKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1OCBjbWQsIHUxNiBwYXJhbSwKLQkJICB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCisJCSAgdTE2IG9wLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpCiB7CisJaWYgKGRldi0+cGVyc2lzdC0+c3RhdGUgJiBNTFg0X0RFVklDRV9TVEFURV9JTlRFUk5BTF9FUlJPUikKKwkJcmV0dXJuIG1seDRfc3RhdHVzX3RvX2Vycm5vKENNRF9TVEFUX0lOVEVSTkFMX0VSUik7CisKIAlpZiAobWx4NF9wcml2KGRldiktPmNtZC51c2VfZXZlbnRzKQotCQlyZXR1cm4gbWx4NF9jb21tX2NtZF93YWl0KGRldiwgY21kLCBwYXJhbSwgdGltZW91dCk7CisJCXJldHVybiBtbHg0X2NvbW1fY21kX3dhaXQoZGV2LCBjbWQsIHBhcmFtLCBvcCwgdGltZW91dCk7CiAJcmV0dXJuIG1seDRfY29tbV9jbWRfcG9sbChkZXYsIGNtZCwgcGFyYW0sIHRpbWVvdXQpOwogfQogCkBAIC0zMDcsNyArNDE3LDcgQEAKIHsKIAl1MzIgc3RhdHVzOwogCi0JaWYgKHBjaV9jaGFubmVsX29mZmxpbmUoZGV2LT5wZGV2KSkKKwlpZiAocGNpX2NoYW5uZWxfb2ZmbGluZShkZXYtPnBlcnNpc3QtPnBkZXYpKQogCQlyZXR1cm4gLUVJTzsKIAogCXN0YXR1cyA9IHJlYWRsKG1seDRfcHJpdihkZXYpLT5jbWQuaGNyICsgSENSX1NUQVRVU19PRkZTRVQpOwpAQCAtMzIzLDE3ICs0MzMsMjEgQEAKIHsKIAlzdHJ1Y3QgbWx4NF9jbWQgKmNtZCA9ICZtbHg0X3ByaXYoZGV2KS0+Y21kOwogCXUzMiBfX2lvbWVtICpoY3IgPSBjbWQtPmhjcjsKLQlpbnQgcmV0ID0gLUVBR0FJTjsKKwlpbnQgcmV0ID0gLUVJTzsKIAl1bnNpZ25lZCBsb25nIGVuZDsKIAotCW11dGV4X2xvY2soJmNtZC0+aGNyX211dGV4KTsKLQotCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKGRldi0+cGRldikpIHsKKwltdXRleF9sb2NrKCZkZXYtPnBlcnNpc3QtPmRldmljZV9zdGF0ZV9tdXRleCk7CisJLyogVG8gYXZvaWQgd3JpdGluZyB0byB1bmtub3duIGFkZHJlc3NlcyBhZnRlciB0aGUgZGV2aWNlIHN0YXRlIHdhcworCSAgKiBjaGFuZ2VkIHRvIGludGVybmFsIGVycm9yIGFuZCB0aGUgY2hpcCB3YXMgcmVzZXQsCisJICAqIGNoZWNrIHRoZSBJTlRFUk5BTF9FUlJPUiBmbGFnIHdoaWNoIGlzIHVwZGF0ZWQgdW5kZXIKKwkgICogZGV2aWNlX3N0YXRlX211dGV4IGxvY2suCisJICAqLworCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKGRldi0+cGVyc2lzdC0+cGRldikgfHwKKwkgICAgKGRldi0+cGVyc2lzdC0+c3RhdGUgJiBNTFg0X0RFVklDRV9TVEFURV9JTlRFUk5BTF9FUlJPUikpIHsKIAkJLyoKIAkJICogRGV2aWNlIGlzIGdvaW5nIHRocm91Z2ggZXJyb3IgcmVjb3ZlcnkKIAkJICogYW5kIGNhbm5vdCBhY2NlcHQgY29tbWFuZHMuCiAJCSAqLwotCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTM0MiwxMiArNDU2LDExIEBACiAJCWVuZCArPSBtc2Vjc190b19qaWZmaWVzKEdPX0JJVF9USU1FT1VUX01TRUNTKTsKIAogCXdoaWxlIChjbWRfcGVuZGluZyhkZXYpKSB7Ci0JCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKGRldi0+cGRldikpIHsKKwkJaWYgKHBjaV9jaGFubmVsX29mZmxpbmUoZGV2LT5wZXJzaXN0LT5wZGV2KSkgewogCQkJLyoKIAkJCSAqIERldmljZSBpcyBnb2luZyB0aHJvdWdoIGVycm9yIHJlY292ZXJ5CiAJCQkgKiBhbmQgY2Fubm90IGFjY2VwdCBjb21tYW5kcy4KIAkJCSAqLwotCQkJcmV0ID0gLUVJTzsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTM5MSw3ICs1MDQsMTEgQEAKIAlyZXQgPSAwOwogCiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZjbWQtPmhjcl9tdXRleCk7CisJaWYgKHJldCkKKwkJbWx4NF93YXJuKGRldiwgIkNvdWxkIG5vdCBwb3N0IGNvbW1hbmQgMHgleDogcmV0PSVkLCBpbl9wYXJhbT0weCVsbHgsIGluX21vZD0weCV4LCBvcF9tb2Q9MHgleFxuIiwKKwkJCSAgb3AsIHJldCwgaW5fcGFyYW0sIGluX21vZGlmaWVyLCBvcF9tb2RpZmllcik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnBlcnNpc3QtPmRldmljZV9zdGF0ZV9tdXRleCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00MjgsOCArNTQ1LDExIEBACiAJCQl9CiAJCQlyZXQgPSBtbHg0X3N0YXR1c190b19lcnJubyh2aGNyLT5zdGF0dXMpOwogCQl9CisJCWlmIChyZXQgJiYKKwkJICAgIGRldi0+cGVyc2lzdC0+c3RhdGUgJiBNTFg0X0RFVklDRV9TVEFURV9JTlRFUk5BTF9FUlJPUikKKwkJCXJldCA9IG1seDRfaW50ZXJuYWxfZXJyX3JldF92YWx1ZShkZXYsIG9wLCBvcF9tb2RpZmllcik7CiAJfSBlbHNlIHsKLQkJcmV0ID0gbWx4NF9jb21tX2NtZChkZXYsIE1MWDRfQ09NTV9DTURfVkhDUl9QT1NULCAwLAorCQlyZXQgPSBtbHg0X2NvbW1fY21kKGRldiwgTUxYNF9DT01NX0NNRF9WSENSX1BPU1QsIDAsIG9wLAogCQkJCSAgICBNTFg0X0NPTU1fVElNRSArIHRpbWVvdXQpOwogCQlpZiAoIXJldCkgewogCQkJaWYgKG91dF9pc19pbW0pIHsKQEAgLTQ0Myw5ICs1NjMsMTQgQEAKIAkJCQl9CiAJCQl9CiAJCQlyZXQgPSBtbHg0X3N0YXR1c190b19lcnJubyh2aGNyLT5zdGF0dXMpOwotCQl9IGVsc2UKLQkJCW1seDRfZXJyKGRldiwgImZhaWxlZCBleGVjdXRpb24gb2YgVkhDUl9QT1NUIGNvbW1hbmQgb3Bjb2RlIDB4JXhcbiIsCi0JCQkJIG9wKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChkZXYtPnBlcnNpc3QtPnN0YXRlICYKKwkJCSAgICBNTFg0X0RFVklDRV9TVEFURV9JTlRFUk5BTF9FUlJPUikKKwkJCQlyZXQgPSBtbHg0X2ludGVybmFsX2Vycl9yZXRfdmFsdWUoZGV2LCBvcCwKKwkJCQkJCQkJICBvcF9tb2RpZmllcik7CisJCQllbHNlCisJCQkJbWx4NF9lcnIoZGV2LCAiZmFpbGVkIGV4ZWN1dGlvbiBvZiBWSENSX1BPU1QgY29tbWFuZCBvcGNvZGUgMHgleFxuIiwgb3ApOworCQl9CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jbWQuc2xhdmVfY21kX211dGV4KTsKQEAgLTQ2NCwxMiArNTg5LDEyIEBACiAKIAlkb3duKCZwcml2LT5jbWQucG9sbF9zZW0pOwogCi0JaWYgKHBjaV9jaGFubmVsX29mZmxpbmUoZGV2LT5wZGV2KSkgeworCWlmIChkZXYtPnBlcnNpc3QtPnN0YXRlICYgTUxYNF9ERVZJQ0VfU1RBVEVfSU5URVJOQUxfRVJST1IpIHsKIAkJLyoKIAkJICogRGV2aWNlIGlzIGdvaW5nIHRocm91Z2ggZXJyb3IgcmVjb3ZlcnkKIAkJICogYW5kIGNhbm5vdCBhY2NlcHQgY29tbWFuZHMuCiAJCSAqLwotCQllcnIgPSAtRUlPOworCQllcnIgPSBtbHg0X2ludGVybmFsX2Vycl9yZXRfdmFsdWUoZGV2LCBvcCwgb3BfbW9kaWZpZXIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTQ4MywxNiArNjA4LDIxIEBACiAJZXJyID0gbWx4NF9jbWRfcG9zdChkZXYsIGluX3BhcmFtLCBvdXRfcGFyYW0gPyAqb3V0X3BhcmFtIDogMCwKIAkJCSAgICBpbl9tb2RpZmllciwgb3BfbW9kaWZpZXIsIG9wLCBDTURfUE9MTF9UT0tFTiwgMCk7CiAJaWYgKGVycikKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3Jlc2V0OwogCiAJZW5kID0gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSArIGppZmZpZXM7CiAJd2hpbGUgKGNtZF9wZW5kaW5nKGRldikgJiYgdGltZV9iZWZvcmUoamlmZmllcywgZW5kKSkgewotCQlpZiAocGNpX2NoYW5uZWxfb2ZmbGluZShkZXYtPnBkZXYpKSB7CisJCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKGRldi0+cGVyc2lzdC0+cGRldikpIHsKIAkJCS8qCiAJCQkgKiBEZXZpY2UgaXMgZ29pbmcgdGhyb3VnaCBlcnJvciByZWNvdmVyeQogCQkJICogYW5kIGNhbm5vdCBhY2NlcHQgY29tbWFuZHMuCiAJCQkgKi8KIAkJCWVyciA9IC1FSU87CisJCQlnb3RvIG91dF9yZXNldDsKKwkJfQorCisJCWlmIChkZXYtPnBlcnNpc3QtPnN0YXRlICYgTUxYNF9ERVZJQ0VfU1RBVEVfSU5URVJOQUxfRVJST1IpIHsKKwkJCWVyciA9IG1seDRfaW50ZXJuYWxfZXJyX3JldF92YWx1ZShkZXYsIG9wLCBvcF9tb2RpZmllcik7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC01MDIsOCArNjMyLDggQEAKIAlpZiAoY21kX3BlbmRpbmcoZGV2KSkgewogCQltbHg0X3dhcm4oZGV2LCAiY29tbWFuZCAweCV4IHRpbWVkIG91dCAoZ28gYml0IG5vdCBjbGVhcmVkKVxuIiwKIAkJCSAgb3ApOwotCQllcnIgPSAtRVRJTUVET1VUOwotCQlnb3RvIG91dDsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXRfcmVzZXQ7CiAJfQogCiAJaWYgKG91dF9pc19pbW0pCkBAIC01MTUsMTAgKzY0NSwxNyBAQAogCXN0YXQgPSBiZTMyX3RvX2NwdSgoX19mb3JjZSBfX2JlMzIpCiAJCQkgICBfX3Jhd19yZWFkbChoY3IgKyBIQ1JfU1RBVFVTX09GRlNFVCkpID4+IDI0OwogCWVyciA9IG1seDRfc3RhdHVzX3RvX2Vycm5vKHN0YXQpOwotCWlmIChlcnIpCisJaWYgKGVycikgewogCQltbHg0X2VycihkZXYsICJjb21tYW5kIDB4JXggZmFpbGVkOiBmdyBzdGF0dXMgPSAweCV4XG4iLAogCQkJIG9wLCBzdGF0KTsKKwkJaWYgKG1seDRfY2xvc2luZ19jbWRfZmF0YWxfZXJyb3Iob3AsIHN0YXQpKQorCQkJZ290byBvdXRfcmVzZXQ7CisJCWdvdG8gb3V0OworCX0KIAorb3V0X3Jlc2V0OgorCWlmIChlcnIpCisJCWVyciA9IG1seDRfY21kX3Jlc2V0X2Zsb3coZGV2LCBvcCwgb3BfbW9kaWZpZXIsIGVycik7CiBvdXQ6CiAJdXAoJnByaXYtPmNtZC5wb2xsX3NlbSk7CiAJcmV0dXJuIGVycjsKQEAgLTU2NSwxNyArNzAyLDE5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWluaXRfY29tcGxldGlvbigmY29udGV4dC0+ZG9uZSk7CisJcmVpbml0X2NvbXBsZXRpb24oJmNvbnRleHQtPmRvbmUpOwogCi0JbWx4NF9jbWRfcG9zdChkZXYsIGluX3BhcmFtLCBvdXRfcGFyYW0gPyAqb3V0X3BhcmFtIDogMCwKLQkJICAgICAgaW5fbW9kaWZpZXIsIG9wX21vZGlmaWVyLCBvcCwgY29udGV4dC0+dG9rZW4sIDEpOworCWVyciA9IG1seDRfY21kX3Bvc3QoZGV2LCBpbl9wYXJhbSwgb3V0X3BhcmFtID8gKm91dF9wYXJhbSA6IDAsCisJCQkgICAgaW5fbW9kaWZpZXIsIG9wX21vZGlmaWVyLCBvcCwgY29udGV4dC0+dG9rZW4sIDEpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3Jlc2V0OwogCiAJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmNvbnRleHQtPmRvbmUsCiAJCQkJCSBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpKSkgewogCQltbHg0X3dhcm4oZGV2LCAiY29tbWFuZCAweCV4IHRpbWVkIG91dCAoZ28gYml0IG5vdCBjbGVhcmVkKVxuIiwKIAkJCSAgb3ApOwotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OworCQllcnIgPSAtRUlPOworCQlnb3RvIG91dF9yZXNldDsKIAl9CiAKIAllcnIgPSBjb250ZXh0LT5yZXN1bHQ7CkBAIC01OTIsMTIgKzczMSwyMCBAQAogCQllbHNlCiAJCQltbHg0X2VycihkZXYsICJjb21tYW5kIDB4JXggZmFpbGVkOiBmdyBzdGF0dXMgPSAweCV4XG4iLAogCQkJCSBvcCwgY29udGV4dC0+Zndfc3RhdHVzKTsKKwkJaWYgKGRldi0+cGVyc2lzdC0+c3RhdGUgJiBNTFg0X0RFVklDRV9TVEFURV9JTlRFUk5BTF9FUlJPUikKKwkJCWVyciA9IG1seDRfaW50ZXJuYWxfZXJyX3JldF92YWx1ZShkZXYsIG9wLCBvcF9tb2RpZmllcik7CisJCWVsc2UgaWYgKG1seDRfY2xvc2luZ19jbWRfZmF0YWxfZXJyb3Iob3AsIGNvbnRleHQtPmZ3X3N0YXR1cykpCisJCQlnb3RvIG91dF9yZXNldDsKKwogCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAob3V0X2lzX2ltbSkKIAkJKm91dF9wYXJhbSA9IGNvbnRleHQtPm91dF9wYXJhbTsKIAorb3V0X3Jlc2V0OgorCWlmIChlcnIpCisJCWVyciA9IG1seDRfY21kX3Jlc2V0X2Zsb3coZGV2LCBvcCwgb3BfbW9kaWZpZXIsIGVycik7CiBvdXQ6CiAJc3Bpbl9sb2NrKCZjbWQtPmNvbnRleHRfbG9jayk7CiAJY29udGV4dC0+bmV4dCA9IGNtZC0+ZnJlZV9oZWFkOwpAQCAtNjEyLDEwICs3NTksMTMgQEAKIAkgICAgICAgaW50IG91dF9pc19pbW0sIHUzMiBpbl9tb2RpZmllciwgdTggb3BfbW9kaWZpZXIsCiAJICAgICAgIHUxNiBvcCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBpbnQgbmF0aXZlKQogewotCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKGRldi0+cGRldikpCi0JCXJldHVybiAtRUlPOworCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKGRldi0+cGVyc2lzdC0+cGRldikpCisJCXJldHVybiBtbHg0X2NtZF9yZXNldF9mbG93KGRldiwgb3AsIG9wX21vZGlmaWVyLCAtRUlPKTsKIAogCWlmICghbWx4NF9pc19tZnVuYyhkZXYpIHx8IChuYXRpdmUgJiYgbWx4NF9pc19tYXN0ZXIoZGV2KSkpIHsKKwkJaWYgKGRldi0+cGVyc2lzdC0+c3RhdGUgJiBNTFg0X0RFVklDRV9TVEFURV9JTlRFUk5BTF9FUlJPUikKKwkJCXJldHVybiBtbHg0X2ludGVybmFsX2Vycl9yZXRfdmFsdWUoZGV2LCBvcCwKKwkJCQkJCQkgIG9wX21vZGlmaWVyKTsKIAkJaWYgKG1seDRfcHJpdihkZXYpLT5jbWQudXNlX2V2ZW50cykKIAkJCXJldHVybiBtbHg0X2NtZF93YWl0KGRldiwgaW5fcGFyYW0sIG91dF9wYXJhbSwKIAkJCQkJICAgICBvdXRfaXNfaW1tLCBpbl9tb2RpZmllciwKQEAgLTYzMSw3ICs3ODEsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoX19tbHg0X2NtZCk7CiAKIAotc3RhdGljIGludCBtbHg0X0FSTV9DT01NX0NIQU5ORUwoc3RydWN0IG1seDRfZGV2ICpkZXYpCitpbnQgbWx4NF9BUk1fQ09NTV9DSEFOTkVMKHN0cnVjdCBtbHg0X2RldiAqZGV2KQogewogCXJldHVybiBtbHg0X2NtZChkZXYsIDAsIDAsIDAsIE1MWDRfQ01EX0FSTV9DT01NX0NIQU5ORUwsCiAJCQlNTFg0X0NNRF9USU1FX0NMQVNTX0IsIE1MWDRfQ01EX05BVElWRSk7CkBAIC03NTEsNyArOTAxLDkgQEAKIAkJCQlpbmRleCA9IGJlMzJfdG9fY3B1KHNtcC0+YXR0cl9tb2QpOwogCQkJCWlmIChwb3J0IDwgMSB8fCBwb3J0ID4gZGV2LT5jYXBzLm51bV9wb3J0cykKIAkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJdGFibGUgPSBrY2FsbG9jKGRldi0+Y2Fwcy5wa2V5X3RhYmxlX2xlbltwb3J0XSwgc2l6ZW9mICp0YWJsZSwgR0ZQX0tFUk5FTCk7CisJCQkJdGFibGUgPSBrY2FsbG9jKChkZXYtPmNhcHMucGtleV90YWJsZV9sZW5bcG9ydF0gLyAzMikgKyAxLAorCQkJCQkJc2l6ZW9mKCp0YWJsZSkgKiAzMiwgR0ZQX0tFUk5FTCk7CisKIAkJCQlpZiAoIXRhYmxlKQogCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQkvKiBuZWVkIHRvIGdldCB0aGUgZnVsbCBwa2V5IHRhYmxlIGJlY2F1c2UgdGhlIHBhcmF2aXJ0dWFsaXplZApAQCAtMTA3MSw3ICsxMjIzLDcgQEAKIAl7CiAJCS5vcGNvZGUgPSBNTFg0X0NNRF9IVzJTV19FUSwKIAkJLmhhc19pbmJveCA9IGZhbHNlLAotCQkuaGFzX291dGJveCA9IHRydWUsCisJCS5oYXNfb3V0Ym94ID0gZmFsc2UsCiAJCS5vdXRfaXNfaW1tID0gZmFsc2UsCiAJCS5lbmNvZGVfc2xhdmVfaWQgPSB0cnVlLAogCQkudmVyaWZ5ID0gTlVMTCwKQEAgLTE0MzEsNiArMTU4MywxNSBAQAogCQkudmVyaWZ5ID0gTlVMTCwKIAkJLndyYXBwZXIgPSBtbHg0X0NNRF9FUEVSTV93cmFwcGVyCiAJfSwKKwl7CisJCS5vcGNvZGUgPSBNTFg0X0NNRF9WSVJUX1BPUlRfTUFQLAorCQkuaGFzX2luYm94ID0gZmFsc2UsCisJCS5oYXNfb3V0Ym94ID0gZmFsc2UsCisJCS5vdXRfaXNfaW1tID0gZmFsc2UsCisJCS5lbmNvZGVfc2xhdmVfaWQgPSBmYWxzZSwKKwkJLnZlcmlmeSA9IE5VTEwsCisJCS53cmFwcGVyID0gbWx4NF9DTURfRVBFUk1fd3JhcHBlcgorCX0sCiB9OwogCiBzdGF0aWMgaW50IG1seDRfbWFzdGVyX3Byb2Nlc3NfdmhjcihzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHNsYXZlLApAQCAtMTQ2MCw4ICsxNjIxLDEwIEBACiAJCQkJICAgICAgQUxJR04oc2l6ZW9mKHN0cnVjdCBtbHg0X3ZoY3JfY21kKSwKIAkJCQkJICAgIE1MWDRfQUNDRVNTX01FTV9BTElHTiksIDEpOwogCQlpZiAocmV0KSB7Ci0JCQltbHg0X2VycihkZXYsICIlczogRmFpbGVkIHJlYWRpbmcgdmhjciByZXQ6IDB4JXhcbiIsCi0JCQkJIF9fZnVuY19fLCByZXQpOworCQkJaWYgKCEoZGV2LT5wZXJzaXN0LT5zdGF0ZSAmCisJCQkgICAgTUxYNF9ERVZJQ0VfU1RBVEVfSU5URVJOQUxfRVJST1IpKQorCQkJCW1seDRfZXJyKGRldiwgIiVzOiBGYWlsZWQgcmVhZGluZyB2aGNyIHJldDogMHgleFxuIiwKKwkJCQkJIF9fZnVuY19fLCByZXQpOwogCQkJa2ZyZWUodmhjcik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CkBAIC0xNTAwLDExICsxNjYzLDE0IEBACiAJCQlnb3RvIG91dF9zdGF0dXM7CiAJCX0KIAotCQlpZiAobWx4NF9BQ0NFU1NfTUVNKGRldiwgaW5ib3gtPmRtYSwgc2xhdmUsCi0JCQkJICAgIHZoY3ItPmluX3BhcmFtLAotCQkJCSAgICBNTFg0X01BSUxCT1hfU0laRSwgMSkpIHsKLQkJCW1seDRfZXJyKGRldiwgIiVzOiBGYWlsZWQgcmVhZGluZyBpbmJveCAoY21kOjB4JXgpXG4iLAotCQkJCSBfX2Z1bmNfXywgY21kLT5vcGNvZGUpOworCQlyZXQgPSBtbHg0X0FDQ0VTU19NRU0oZGV2LCBpbmJveC0+ZG1hLCBzbGF2ZSwKKwkJCQkgICAgICB2aGNyLT5pbl9wYXJhbSwKKwkJCQkgICAgICBNTFg0X01BSUxCT1hfU0laRSwgMSk7CisJCWlmIChyZXQpIHsKKwkJCWlmICghKGRldi0+cGVyc2lzdC0+c3RhdGUgJgorCQkJICAgIE1MWDRfREVWSUNFX1NUQVRFX0lOVEVSTkFMX0VSUk9SKSkKKwkJCQltbHg0X2VycihkZXYsICIlczogRmFpbGVkIHJlYWRpbmcgaW5ib3ggKGNtZDoweCV4KVxuIiwKKwkJCQkJIF9fZnVuY19fLCBjbWQtPm9wY29kZSk7CiAJCQl2aGNyX2NtZC0+c3RhdHVzID0gQ01EX1NUQVRfSU5URVJOQUxfRVJSOwogCQkJZ290byBvdXRfc3RhdHVzOwogCQl9CkBAIC0xNTUyLDggKzE3MTgsOSBAQAogCX0KIAogCWlmIChlcnIpIHsKLQkJbWx4NF93YXJuKGRldiwgInZoY3IgY29tbWFuZDoweCV4IHNsYXZlOiVkIGZhaWxlZCB3aXRoIGVycm9yOiVkLCBzdGF0dXMgJWRcbiIsCi0JCQkgIHZoY3ItPm9wLCBzbGF2ZSwgdmhjci0+ZXJybm8sIGVycik7CisJCWlmICghKGRldi0+cGVyc2lzdC0+c3RhdGUgJiBNTFg0X0RFVklDRV9TVEFURV9JTlRFUk5BTF9FUlJPUikpCisJCQltbHg0X3dhcm4oZGV2LCAidmhjciBjb21tYW5kOjB4JXggc2xhdmU6JWQgZmFpbGVkIHdpdGggZXJyb3I6JWQsIHN0YXR1cyAlZFxuIiwKKwkJCQkgIHZoY3ItPm9wLCBzbGF2ZSwgdmhjci0+ZXJybm8sIGVycik7CiAJCXZoY3JfY21kLT5zdGF0dXMgPSBtbHg0X2Vycm5vX3RvX3N0YXR1cyhlcnIpOwogCQlnb3RvIG91dF9zdGF0dXM7CiAJfQpAQCAtMTU2OCw3ICsxNzM1LDkgQEAKIAkJCS8qIElmIHdlIGZhaWxlZCB0byB3cml0ZSBiYWNrIHRoZSBvdXRib3ggYWZ0ZXIgdGhlCiAJCQkgKmNvbW1hbmQgd2FzIHN1Y2Nlc3NmdWxseSBleGVjdXRlZCwgd2UgbXVzdCBmYWlsIHRoaXMKIAkJCSAqIHNsYXZlLCBhcyBpdCBpcyBub3cgaW4gdW5kZWZpbmVkIHN0YXRlICovCi0JCQltbHg0X2VycihkZXYsICIlczpGYWlsZWQgd3JpdGluZyBvdXRib3hcbiIsIF9fZnVuY19fKTsKKwkJCWlmICghKGRldi0+cGVyc2lzdC0+c3RhdGUgJgorCQkJICAgIE1MWDRfREVWSUNFX1NUQVRFX0lOVEVSTkFMX0VSUk9SKSkKKwkJCQltbHg0X2VycihkZXYsICIlczpGYWlsZWQgd3JpdGluZyBvdXRib3hcbiIsIF9fZnVuY19fKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpAQCAtMTg0Nyw4ICsyMDE2LDExIEBACiAJCWJyZWFrOwogCWNhc2UgTUxYNF9DT01NX0NNRF9WSENSX1BPU1Q6CiAJCWlmICgoc2xhdmVfc3RhdGVbc2xhdmVdLmxhc3RfY21kICE9IE1MWDRfQ09NTV9DTURfVkhDUl9FTikgJiYKLQkJICAgIChzbGF2ZV9zdGF0ZVtzbGF2ZV0ubGFzdF9jbWQgIT0gTUxYNF9DT01NX0NNRF9WSENSX1BPU1QpKQorCQkgICAgKHNsYXZlX3N0YXRlW3NsYXZlXS5sYXN0X2NtZCAhPSBNTFg0X0NPTU1fQ01EX1ZIQ1JfUE9TVCkpIHsKKwkJCW1seDRfd2FybihkZXYsICJzbGF2ZTolZCBpcyBvdXQgb2Ygc3luYywgY21kPTB4JXgsIGxhc3QgY29tbWFuZD0weCV4LCByZXNldCBpcyBuZWVkZWRcbiIsCisJCQkJICBzbGF2ZSwgY21kLCBzbGF2ZV9zdGF0ZVtzbGF2ZV0ubGFzdF9jbWQpOwogCQkJZ290byByZXNldF9zbGF2ZTsKKwkJfQogCiAJCW11dGV4X2xvY2soJnByaXYtPmNtZC5zbGF2ZV9jbWRfbXV0ZXgpOwogCQlpZiAobWx4NF9tYXN0ZXJfcHJvY2Vzc192aGNyKGRldiwgc2xhdmUsIE5VTEwpKSB7CkBAIC0xODgyLDcgKzIwNTQsMTggQEAKIAogcmVzZXRfc2xhdmU6CiAJLyogY2xlYW51cCBhbnkgc2xhdmUgcmVzb3VyY2VzICovCi0JbWx4NF9kZWxldGVfYWxsX3Jlc291cmNlc19mb3Jfc2xhdmUoZGV2LCBzbGF2ZSk7CisJaWYgKGRldi0+cGVyc2lzdC0+aW50ZXJmYWNlX3N0YXRlICYgTUxYNF9JTlRFUkZBQ0VfU1RBVEVfVVApCisJCW1seDRfZGVsZXRlX2FsbF9yZXNvdXJjZXNfZm9yX3NsYXZlKGRldiwgc2xhdmUpOworCisJaWYgKGNtZCAhPSBNTFg0X0NPTU1fQ01EX1JFU0VUKSB7CisJCW1seDRfd2FybihkZXYsICJUdXJuIG9uIGludGVybmFsIGVycm9yIHRvIGZvcmNlIHJlc2V0LCBzbGF2ZT0lZCwgY21kPTB4JXhcbiIsCisJCQkgIHNsYXZlLCBjbWQpOworCQkvKiBUdXJuIG9uIGludGVybmFsIGVycm9yIGxldHRpbmcgc2xhdmUgcmVzZXQgaXRzZWxmIGltbWVkaXRhbHksCisJCSAqIG90aGVyd2lzZSBpdCBtaWdodCB0YWtlIHRpbGwgdGltZW91dCBvbiBjb21tYW5kIGlzIHBhc3NlZAorCQkgKi8KKwkJcmVwbHkgfD0gKCh1MzIpQ09NTV9DSEFOX0VWRU5UX0lOVEVSTkFMX0VSUik7CisJfQorCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPm1mdW5jLm1hc3Rlci5zbGF2ZV9zdGF0ZV9sb2NrLCBmbGFncyk7CiAJaWYgKCFzbGF2ZV9zdGF0ZVtzbGF2ZV0uaXNfc2xhdmVfZ29pbmdfZG93bikKIAkJc2xhdmVfc3RhdGVbc2xhdmVdLmxhc3RfY21kID0gTUxYNF9DT01NX0NNRF9SRVNFVDsKQEAgLTE5NTgsMTcgKzIxNDEsMjggQEAKIHN0YXRpYyBpbnQgc3luY190b2dnbGVzKHN0cnVjdCBtbHg0X2RldiAqZGV2KQogewogCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKLQlpbnQgd3JfdG9nZ2xlOwotCWludCByZF90b2dnbGU7CisJdTMyIHdyX3RvZ2dsZTsKKwl1MzIgcmRfdG9nZ2xlOwogCXVuc2lnbmVkIGxvbmcgZW5kOwogCi0Jd3JfdG9nZ2xlID0gc3dhYjMyKHJlYWRsKCZwcml2LT5tZnVuYy5jb21tLT5zbGF2ZV93cml0ZSkpID4+IDMxOwotCWVuZCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMDApOworCXdyX3RvZ2dsZSA9IHN3YWIzMihyZWFkbCgmcHJpdi0+bWZ1bmMuY29tbS0+c2xhdmVfd3JpdGUpKTsKKwlpZiAod3JfdG9nZ2xlID09IDB4ZmZmZmZmZmYpCisJCWVuZCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDMwMDAwKTsKKwllbHNlCisJCWVuZCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMDApOwogCiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZCkpIHsKLQkJcmRfdG9nZ2xlID0gc3dhYjMyKHJlYWRsKCZwcml2LT5tZnVuYy5jb21tLT5zbGF2ZV9yZWFkKSkgPj4gMzE7Ci0JCWlmIChyZF90b2dnbGUgPT0gd3JfdG9nZ2xlKSB7Ci0JCQlwcml2LT5jbWQuY29tbV90b2dnbGUgPSByZF90b2dnbGU7CisJCXJkX3RvZ2dsZSA9IHN3YWIzMihyZWFkbCgmcHJpdi0+bWZ1bmMuY29tbS0+c2xhdmVfcmVhZCkpOworCQlpZiAod3JfdG9nZ2xlID09IDB4ZmZmZmZmZmYgfHwgcmRfdG9nZ2xlID09IDB4ZmZmZmZmZmYpIHsKKwkJCS8qIFBDSSBtaWdodCBiZSBvZmZsaW5lICovCisJCQltc2xlZXAoMTAwKTsKKwkJCXdyX3RvZ2dsZSA9IHN3YWIzMihyZWFkbCgmcHJpdi0+bWZ1bmMuY29tbS0+CisJCQkJCSAgIHNsYXZlX3dyaXRlKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChyZF90b2dnbGUgPj4gMzEgPT0gd3JfdG9nZ2xlID4+IDMxKSB7CisJCQlwcml2LT5jbWQuY29tbV90b2dnbGUgPSByZF90b2dnbGUgPj4gMzE7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC0xOTk3LDExICsyMTkxLDEyIEBACiAKIAlpZiAobWx4NF9pc19tYXN0ZXIoZGV2KSkKIAkJcHJpdi0+bWZ1bmMuY29tbSA9Ci0JCWlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgcHJpdi0+ZncuY29tbV9iYXIpICsKKwkJaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZXJzaXN0LT5wZGV2LAorCQkJCQkgICBwcml2LT5mdy5jb21tX2JhcikgKwogCQkJcHJpdi0+ZncuY29tbV9iYXNlLCBNTFg0X0NPTU1fUEFHRVNJWkUpOwogCWVsc2UKIAkJcHJpdi0+bWZ1bmMuY29tbSA9Ci0JCWlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMikgKworCQlpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBlcnNpc3QtPnBkZXYsIDIpICsKIAkJCU1MWDRfU0xBVkVfQ09NTV9CQVNFLCBNTFg0X0NPTU1fUEFHRVNJWkUpOwogCWlmICghcHJpdi0+bWZ1bmMuY29tbSkgewogCQltbHg0X2VycihkZXYsICJDb3VsZG4ndCBtYXAgY29tbXVuaWNhdGlvbiB2ZWN0b3JcbiIpOwpAQCAtMjA3MywxMyArMjI2OCw2IEBACiAJCWlmIChtbHg0X2luaXRfcmVzb3VyY2VfdHJhY2tlcihkZXYpKQogCQkJZ290byBlcnJfdGhyZWFkOwogCi0JCWVyciA9IG1seDRfQVJNX0NPTU1fQ0hBTk5FTChkZXYpOwotCQlpZiAoZXJyKSB7Ci0JCQltbHg0X2VycihkZXYsICIgRmFpbGVkIHRvIGFybSBjb21tIGNoYW5uZWwgZXE6ICV4XG4iLAotCQkJCSBlcnIpOwotCQkJZ290byBlcnJfcmVzb3VyY2U7Ci0JCX0KLQogCX0gZWxzZSB7CiAJCWVyciA9IHN5bmNfdG9nZ2xlcyhkZXYpOwogCQlpZiAoZXJyKSB7CkBAIC0yMDg5LDggKzIyNzcsNiBAQAogCX0KIAlyZXR1cm4gMDsKIAotZXJyX3Jlc291cmNlOgotCW1seDRfZnJlZV9yZXNvdXJjZV90cmFja2VyKGRldiwgUkVTX1RSX0ZSRUVfQUxMKTsKIGVycl90aHJlYWQ6CiAJZmx1c2hfd29ya3F1ZXVlKHByaXYtPm1mdW5jLm1hc3Rlci5jb21tX3dxKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT5tZnVuYy5tYXN0ZXIuY29tbV93cSk7CkBAIC0yMTA3LDkgKzIyOTMsOSBAQAogZXJyX2NvbW06CiAJaW91bm1hcChwcml2LT5tZnVuYy5jb21tKTsKIGVycl92aGNyOgotCWRtYV9mcmVlX2NvaGVyZW50KCYoZGV2LT5wZGV2LT5kZXYpLCBQQUdFX1NJWkUsCi0JCQkJCSAgICAgcHJpdi0+bWZ1bmMudmhjciwKLQkJCQkJICAgICBwcml2LT5tZnVuYy52aGNyX2RtYSk7CisJZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+cGVyc2lzdC0+cGRldi0+ZGV2LCBQQUdFX1NJWkUsCisJCQkgIHByaXYtPm1mdW5jLnZoY3IsCisJCQkgIHByaXYtPm1mdW5jLnZoY3JfZG1hKTsKIAlwcml2LT5tZnVuYy52aGNyID0gTlVMTDsKIAlyZXR1cm4gLUVOT01FTTsKIH0KQEAgLTIxMjAsNyArMjMwNiw2IEBACiAJaW50IGZsYWdzID0gMDsKIAogCWlmICghcHJpdi0+Y21kLmluaXRpYWxpemVkKSB7Ci0JCW11dGV4X2luaXQoJnByaXYtPmNtZC5oY3JfbXV0ZXgpOwogCQltdXRleF9pbml0KCZwcml2LT5jbWQuc2xhdmVfY21kX211dGV4KTsKIAkJc2VtYV9pbml0KCZwcml2LT5jbWQucG9sbF9zZW0sIDEpOwogCQlwcml2LT5jbWQudXNlX2V2ZW50cyA9IDA7CkBAIC0yMTMwLDggKzIzMTUsOCBAQAogCX0KIAogCWlmICghbWx4NF9pc19zbGF2ZShkZXYpICYmICFwcml2LT5jbWQuaGNyKSB7Ci0JCXByaXYtPmNtZC5oY3IgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDApICsKLQkJCQkJTUxYNF9IQ1JfQkFTRSwgTUxYNF9IQ1JfU0laRSk7CisJCXByaXYtPmNtZC5oY3IgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBlcnNpc3QtPnBkZXYsCisJCQkJCTApICsgTUxYNF9IQ1JfQkFTRSwgTUxYNF9IQ1JfU0laRSk7CiAJCWlmICghcHJpdi0+Y21kLmhjcikgewogCQkJbWx4NF9lcnIoZGV2LCAiQ291bGRuJ3QgbWFwIGNvbW1hbmQgcmVnaXN0ZXJcbiIpOwogCQkJZ290byBlcnI7CkBAIC0yMTQwLDcgKzIzMjUsOCBAQAogCX0KIAogCWlmIChtbHg0X2lzX21mdW5jKGRldikgJiYgIXByaXYtPm1mdW5jLnZoY3IpIHsKLQkJcHJpdi0+bWZ1bmMudmhjciA9IGRtYV9hbGxvY19jb2hlcmVudCgmKGRldi0+cGRldi0+ZGV2KSwgUEFHRV9TSVpFLAorCQlwcml2LT5tZnVuYy52aGNyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZkZXYtPnBlcnNpc3QtPnBkZXYtPmRldiwKKwkJCQkJCSAgICAgIFBBR0VfU0laRSwKIAkJCQkJCSAgICAgICZwcml2LT5tZnVuYy52aGNyX2RtYSwKIAkJCQkJCSAgICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIXByaXYtPm1mdW5jLnZoY3IpCkBAIC0yMTUwLDcgKzIzMzYsOCBAQAogCX0KIAogCWlmICghcHJpdi0+Y21kLnBvb2wpIHsKLQkJcHJpdi0+Y21kLnBvb2wgPSBwY2lfcG9vbF9jcmVhdGUoIm1seDRfY21kIiwgZGV2LT5wZGV2LAorCQlwcml2LT5jbWQucG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgibWx4NF9jbWQiLAorCQkJCQkJIGRldi0+cGVyc2lzdC0+cGRldiwKIAkJCQkJCSBNTFg0X01BSUxCT1hfU0laRSwKIAkJCQkJCSBNTFg0X01BSUxCT1hfU0laRSwgMCk7CiAJCWlmICghcHJpdi0+Y21kLnBvb2wpCkBAIC0yMTY2LDYgKzIzNTMsMjcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAordm9pZCBtbHg0X3JlcG9ydF9pbnRlcm5hbF9lcnJfY29tbV9ldmVudChzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJaW50IHNsYXZlOworCXUzMiBzbGF2ZV9yZWFkOworCisJLyogUmVwb3J0IGFuIGludGVybmFsIGVycm9yIGV2ZW50IHRvIGFsbAorCSAqIGNvbW11bmljYXRpb24gY2hhbm5lbHMuCisJICovCisJZm9yIChzbGF2ZSA9IDA7IHNsYXZlIDwgZGV2LT5udW1fc2xhdmVzOyBzbGF2ZSsrKSB7CisJCXNsYXZlX3JlYWQgPSBzd2FiMzIocmVhZGwoJnByaXYtPm1mdW5jLmNvbW1bc2xhdmVdLnNsYXZlX3JlYWQpKTsKKwkJc2xhdmVfcmVhZCB8PSAodTMyKUNPTU1fQ0hBTl9FVkVOVF9JTlRFUk5BTF9FUlI7CisJCV9fcmF3X3dyaXRlbCgoX19mb3JjZSB1MzIpY3B1X3RvX2JlMzIoc2xhdmVfcmVhZCksCisJCQkgICAgICZwcml2LT5tZnVuYy5jb21tW3NsYXZlXS5zbGF2ZV9yZWFkKTsKKwkJLyogTWFrZSBzdXJlIHRoYXQgb3VyIGNvbW0gY2hhbm5lbCB3cml0ZSBkb2Vzbid0CisJCSAqIGdldCBtaXhlZCBpbiB3aXRoIHdyaXRlcyBmcm9tIGFub3RoZXIgQ1BVLgorCQkgKi8KKwkJbW1pb3diKCk7CisJfQorfQorCiB2b2lkIG1seDRfbXVsdGlfZnVuY19jbGVhbnVwKHN0cnVjdCBtbHg0X2RldiAqZGV2KQogewogCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKQEAgLTIxODEsNiArMjM4OSw3IEBACiAJCWtmcmVlKHByaXYtPm1mdW5jLm1hc3Rlci5zbGF2ZV9zdGF0ZSk7CiAJCWtmcmVlKHByaXYtPm1mdW5jLm1hc3Rlci52Zl9hZG1pbik7CiAJCWtmcmVlKHByaXYtPm1mdW5jLm1hc3Rlci52Zl9vcGVyKTsKKwkJZGV2LT5udW1fc2xhdmVzID0gMDsKIAl9CiAKIAlpb3VubWFwKHByaXYtPm1mdW5jLmNvbW0pOwpAQCAtMjIwMiw3ICsyNDExLDcgQEAKIAl9CiAJaWYgKG1seDRfaXNfbWZ1bmMoZGV2KSAmJiBwcml2LT5tZnVuYy52aGNyICYmCiAJICAgIChjbGVhbnVwX21hc2sgJiBNTFg0X0NNRF9DTEVBTlVQX1ZIQ1IpKSB7Ci0JCWRtYV9mcmVlX2NvaGVyZW50KCYoZGV2LT5wZGV2LT5kZXYpLCBQQUdFX1NJWkUsCisJCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPnBlcnNpc3QtPnBkZXYtPmRldiwgUEFHRV9TSVpFLAogCQkJCSAgcHJpdi0+bWZ1bmMudmhjciwgcHJpdi0+bWZ1bmMudmhjcl9kbWEpOwogCQlwcml2LT5tZnVuYy52aGNyID0gTlVMTDsKIAl9CkBAIC0yMjI5LDYgKzI0MzgsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+Y21kLm1heF9jbWRzOyArK2kpIHsKIAkJcHJpdi0+Y21kLmNvbnRleHRbaV0udG9rZW4gPSBpOwogCQlwcml2LT5jbWQuY29udGV4dFtpXS5uZXh0ICA9IGkgKyAxOworCQkvKiBUbyBzdXBwb3J0IGZhdGFsIGVycm9yIGZsb3csIGluaXRpYWxpemUgYWxsCisJCSAqIGNtZCBjb250ZXh0cyB0byBhbGxvdyBzaW11bGF0aW5nIGNvbXBsZXRpb25zCisJCSAqIHdpdGggY29tcGxldGUoKSBhdCBhbnkgdGltZS4KKwkJICovCisJCWluaXRfY29tcGxldGlvbigmcHJpdi0+Y21kLmNvbnRleHRbaV0uZG9uZSk7CiAJfQogCiAJcHJpdi0+Y21kLmNvbnRleHRbcHJpdi0+Y21kLm1heF9jbWRzIC0gMV0ubmV4dCA9IC0xOwpAQCAtMjMwNiw4ICsyNTIwLDkgQEAKIAogc3RhdGljIGludCBtbHg0X2dldF9zbGF2ZV9pbmR4KHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgdmYpCiB7Ci0JaWYgKCh2ZiA8IDApIHx8ICh2ZiA+PSBkZXYtPm51bV92ZnMpKSB7Ci0JCW1seDRfZXJyKGRldiwgIkJhZCB2ZiBudW1iZXI6JWQgKG51bWJlciBvZiBhY3RpdmF0ZWQgdmY6ICVkKVxuIiwgdmYsIGRldi0+bnVtX3Zmcyk7CisJaWYgKCh2ZiA8IDApIHx8ICh2ZiA+PSBkZXYtPnBlcnNpc3QtPm51bV92ZnMpKSB7CisJCW1seDRfZXJyKGRldiwgIkJhZCB2ZiBudW1iZXI6JWQgKG51bWJlciBvZiBhY3RpdmF0ZWQgdmY6ICVkKVxuIiwKKwkJCSB2ZiwgZGV2LT5wZXJzaXN0LT5udW1fdmZzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMzE2LDcgKzI1MzEsNyBAQAogCiBpbnQgbWx4NF9nZXRfdmZfaW5keChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHNsYXZlKQogewotCWlmIChzbGF2ZSA8IDEgfHwgc2xhdmUgPiBkZXYtPm51bV92ZnMpIHsKKwlpZiAoc2xhdmUgPCAxIHx8IHNsYXZlID4gZGV2LT5wZXJzaXN0LT5udW1fdmZzKSB7CiAJCW1seDRfZXJyKGRldiwKIAkJCSAiQmFkIHNsYXZlIG51bWJlcjolZCAobnVtYmVyIG9mIGFjdGl2YXRlZCBzbGF2ZXM6ICVsdSlcbiIsCiAJCQkgc2xhdmUsIGRldi0+bnVtX3NsYXZlcyk7CkBAIC0yMzI1LDYgKzI1NDAsMjUgQEAKIAlyZXR1cm4gc2xhdmUgLSAxOwogfQogCit2b2lkIG1seDRfY21kX3dha2VfY29tcGxldGlvbnMoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2NtZF9jb250ZXh0ICpjb250ZXh0OworCWludCBpOworCisJc3Bpbl9sb2NrKCZwcml2LT5jbWQuY29udGV4dF9sb2NrKTsKKwlpZiAocHJpdi0+Y21kLmNvbnRleHQpIHsKKwkJZm9yIChpID0gMDsgaSA8IHByaXYtPmNtZC5tYXhfY21kczsgKytpKSB7CisJCQljb250ZXh0ID0gJnByaXYtPmNtZC5jb250ZXh0W2ldOworCQkJY29udGV4dC0+Zndfc3RhdHVzID0gQ01EX1NUQVRfSU5URVJOQUxfRVJSOworCQkJY29udGV4dC0+cmVzdWx0ICAgID0KKwkJCQltbHg0X3N0YXR1c190b19lcnJubyhDTURfU1RBVF9JTlRFUk5BTF9FUlIpOworCQkJY29tcGxldGUoJmNvbnRleHQtPmRvbmUpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZwcml2LT5jbWQuY29udGV4dF9sb2NrKTsKK30KKwogc3RydWN0IG1seDRfYWN0aXZlX3BvcnRzIG1seDRfZ2V0X2FjdGl2ZV9wb3J0cyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHNsYXZlKQogewogCXN0cnVjdCBtbHg0X2FjdGl2ZV9wb3J0cyBhY3R2X3BvcnRzOwpAQCAtMjM4OCw3ICsyNjIyLDcgQEAKIAlpZiAocG9ydCA8PSAwIHx8IHBvcnQgPiBkZXYtPmNhcHMubnVtX3BvcnRzKQogCQlyZXR1cm4gc2xhdmVzX3Bwb3J0OwogCi0JZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3ZmcyArIDE7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkZXYtPnBlcnNpc3QtPm51bV92ZnMgKyAxOyBpKyspIHsKIAkJc3RydWN0IG1seDRfYWN0aXZlX3BvcnRzIGFjdHZfcG9ydHMgPQogCQkJbWx4NF9nZXRfYWN0aXZlX3BvcnRzKGRldiwgaSk7CiAJCWlmICh0ZXN0X2JpdChwb3J0IC0gMSwgYWN0dl9wb3J0cy5wb3J0cykpCkBAIC0yNDA4LDcgKzI2NDIsNyBAQAogCiAJYml0bWFwX3plcm8oc2xhdmVzX3Bwb3J0LnNsYXZlcywgTUxYNF9NRlVOQ19NQVgpOwogCi0JZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3ZmcyArIDE7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkZXYtPnBlcnNpc3QtPm51bV92ZnMgKyAxOyBpKyspIHsKIAkJc3RydWN0IG1seDRfYWN0aXZlX3BvcnRzIGFjdHZfcG9ydHMgPQogCQkJbWx4NF9nZXRfYWN0aXZlX3BvcnRzKGRldiwgaSk7CiAJCWlmIChiaXRtYXBfZXF1YWwoY3JpdF9wb3J0cy0+cG9ydHMsIGFjdHZfcG9ydHMucG9ydHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX2Nsb2NrLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX2Nsb2NrLmMKaW5kZXggOTk5MDE0NC4uOTBiNTMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9jbG9jay5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fY2xvY2suYwpAQCAtMzIsNiArMzIsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tbHg0L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAKICNpbmNsdWRlICJtbHg0X2VuLmgiCiAKQEAgLTE0NywxMiArMTQ4LDkgQEAKIAlzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYgPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3QgbWx4NF9lbl9kZXYsCiAJCQkJCQlwdHBfY2xvY2tfaW5mbyk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzNjQgbm93OwogCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZtZGV2LT5jbG9ja19sb2NrLCBmbGFncyk7Ci0Jbm93ID0gdGltZWNvdW50ZXJfcmVhZCgmbWRldi0+Y2xvY2spOwotCW5vdyArPSBkZWx0YTsKLQl0aW1lY291bnRlcl9pbml0KCZtZGV2LT5jbG9jaywgJm1kZXYtPmN5Y2xlcywgbm93KTsKKwl0aW1lY291bnRlcl9hZGp0aW1lKCZtZGV2LT5jbG9jaywgZGVsdGEpOwogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZtZGV2LT5jbG9ja19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTI0Myw3ICsyNDEsNyBAQAogewogCXN0cnVjdCBtbHg0X2RldiAqZGV2ID0gbWRldi0+ZGV2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTY0IG5zOworCXU2NCBucywgemVybyA9IDA7CiAKIAlyd2xvY2tfaW5pdCgmbWRldi0+Y2xvY2tfbG9jayk7CiAKQEAgLTI2OCw3ICsyNjYsNyBAQAogCS8qIENhbGN1bGF0ZSBwZXJpb2QgaW4gc2Vjb25kcyB0byBjYWxsIHRoZSBvdmVyZmxvdyB3YXRjaGRvZyAtIHRvIG1ha2UKIAkgKiBzdXJlIGNvdW50ZXIgaXMgY2hlY2tlZCBhdCBsZWFzdCBvbmNlIGV2ZXJ5IHdyYXAgYXJvdW5kLgogCSAqLwotCW5zID0gY3ljbGVjb3VudGVyX2N5YzJucygmbWRldi0+Y3ljbGVzLCBtZGV2LT5jeWNsZXMubWFzayk7CisJbnMgPSBjeWNsZWNvdW50ZXJfY3ljMm5zKCZtZGV2LT5jeWNsZXMsIG1kZXYtPmN5Y2xlcy5tYXNrLCB6ZXJvLCAmemVybyk7CiAJZG9fZGl2KG5zLCBOU0VDX1BFUl9TRUMgLyAyIC8gSFopOwogCW1kZXYtPm92ZXJmbG93X3BlcmlvZCA9IG5zOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX2NxLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX2NxLmMKaW5kZXggODIzMjJiMS4uMjJkYTRkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9jcS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fY3EuYwpAQCAtNzAsMTAgKzcwLDEwIEBACiAJLyogQWxsb2NhdGUgSFcgYnVmZmVycyBvbiBwcm92aWRlZCBOVU1BIG5vZGUuCiAJICogZGV2LT5udW1hX25vZGUgaXMgdXNlZCBpbiBtdHQgcmFuZ2UgYWxsb2NhdGlvbiBmbG93LgogCSAqLwotCXNldF9kZXZfbm9kZSgmbWRldi0+ZGV2LT5wZGV2LT5kZXYsIG5vZGUpOworCXNldF9kZXZfbm9kZSgmbWRldi0+ZGV2LT5wZXJzaXN0LT5wZGV2LT5kZXYsIG5vZGUpOwogCWVyciA9IG1seDRfYWxsb2NfaHdxX3JlcyhtZGV2LT5kZXYsICZjcS0+d3FyZXMsCiAJCQkJY3EtPmJ1Zl9zaXplLCAyICogUEFHRV9TSVpFKTsKLQlzZXRfZGV2X25vZGUoJm1kZXYtPmRldi0+cGRldi0+ZGV2LCBtZGV2LT5kZXYtPm51bWFfbm9kZSk7CisJc2V0X2Rldl9ub2RlKCZtZGV2LT5kZXYtPnBlcnNpc3QtPnBkZXYtPmRldiwgbWRldi0+ZGV2LT5udW1hX25vZGUpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2NxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fZXRodG9vbC5jCmluZGV4IDkwZTBmMDQuLmE3YjU4YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fZXRodG9vbC5jCkBAIC05Miw3ICs5Miw3IEBACiAJCSh1MTYpIChtZGV2LT5kZXYtPmNhcHMuZndfdmVyID4+IDMyKSwKIAkJKHUxNikgKChtZGV2LT5kZXYtPmNhcHMuZndfdmVyID4+IDE2KSAmIDB4ZmZmZiksCiAJCSh1MTYpIChtZGV2LT5kZXYtPmNhcHMuZndfdmVyICYgMHhmZmZmKSk7Ci0Jc3RybGNweShkcnZpbmZvLT5idXNfaW5mbywgcGNpX25hbWUobWRldi0+ZGV2LT5wZGV2KSwKKwlzdHJsY3B5KGRydmluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShtZGV2LT5kZXYtPnBlcnNpc3QtPnBkZXYpLAogCQlzaXplb2YoZHJ2aW5mby0+YnVzX2luZm8pKTsKIAlkcnZpbmZvLT5uX3N0YXRzID0gMDsKIAlkcnZpbmZvLT5yZWdkdW1wX2xlbiA9IDA7CkBAIC03NzAsMjIgKzc3MCwyMCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlwcm90b19hZG1pbiA9IGNwdV90b19iZTMyKHB0eXNfYWR2KTsKLQlpZiAoc3BlZWQgPj0gMCAmJiBzcGVlZCAhPSBwcml2LT5wb3J0X3N0YXRlLmxpbmtfc3BlZWQpCi0JCS8qIElmIHNwZWVkIHdhcyBzZXQgdGhlbiBzcGVlZCBkZWNpZGVzIDotKSAqLwotCQlwcm90b19hZG1pbiA9IHNwZWVkX3NldF9wdHlzX2FkbWluKHByaXYsIHNwZWVkLAotCQkJCQkJICAgcHR5c19yZWcuZXRoX3Byb3RvX2NhcCk7CisJcHJvdG9fYWRtaW4gPSBjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgPworCQljcHVfdG9fYmUzMihwdHlzX2FkdikgOgorCQlzcGVlZF9zZXRfcHR5c19hZG1pbihwcml2LCBzcGVlZCwKKwkJCQkgICAgIHB0eXNfcmVnLmV0aF9wcm90b19jYXApOwogCiAJcHJvdG9fYWRtaW4gJj0gcHR5c19yZWcuZXRoX3Byb3RvX2NhcDsKLQotCWlmIChwcm90b19hZG1pbiA9PSBwdHlzX3JlZy5ldGhfcHJvdG9fYWRtaW4pCi0JCXJldHVybiAwOyAvKiBOb3RoaW5nIHRvIGNoYW5nZSAqLwotCiAJaWYgKCFwcm90b19hZG1pbikgewogCQllbl93YXJuKHByaXYsICJOb3Qgc3VwcG9ydGVkIGxpbmsgbW9kZShzKSByZXF1ZXN0ZWQsIGNoZWNrIHN1cHBvcnRlZCBsaW5rIG1vZGVzLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOyAvKiBub3RoaW5nIHRvIGNoYW5nZSBkdWUgdG8gYmFkIGlucHV0ICovCiAJfQogCisJaWYgKHByb3RvX2FkbWluID09IHB0eXNfcmVnLmV0aF9wcm90b19hZG1pbikKKwkJcmV0dXJuIDA7IC8qIE5vdGhpbmcgdG8gY2hhbmdlICovCisKIAllbl9kYmcoRFJWLCBwcml2LCAibWx4NF9BQ0NFU1NfUFRZU19SRUcgU0VUOiBwdHlzX3JlZy5ldGhfcHJvdG9fYWRtaW4gPSAweCV4XG4iLAogCSAgICAgICBiZTMyX3RvX2NwdShwcm90b19hZG1pbikpOwogCkBAIC03OTgsOSArNzk2LDkgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQllbl93YXJuKHByaXYsICJQb3J0IGxpbmsgbW9kZSBjaGFuZ2VkLCByZXN0YXJ0aW5nIHBvcnQuLi5cbiIpOwogCW11dGV4X2xvY2soJnByaXYtPm1kZXYtPnN0YXRlX2xvY2spOwogCWlmIChwcml2LT5wb3J0X3VwKSB7CisJCWVuX3dhcm4ocHJpdiwgIlBvcnQgbGluayBtb2RlIGNoYW5nZWQsIHJlc3RhcnRpbmcgcG9ydC4uLlxuIik7CiAJCW1seDRfZW5fc3RvcF9wb3J0KGRldiwgMSk7CiAJCWlmIChtbHg0X2VuX3N0YXJ0X3BvcnQoZGV2KSkKIAkJCWVuX2Vycihwcml2LCAiRmFpbGVkIHJlc3RhcnRpbmcgcG9ydCAlZFxuIiwgcHJpdi0+cG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fbWFpbi5jCmluZGV4IDlmMTZmNzUuLjU4ZDVhMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fbWFpbi5jCkBAIC0yMTQsNiArMjE0LDggQEAKIAlpb3VubWFwKG1kZXYtPnVhcl9tYXApOwogCW1seDRfdWFyX2ZyZWUoZGV2LCAmbWRldi0+cHJpdl91YXIpOwogCW1seDRfcGRfZnJlZShkZXYsIG1kZXYtPnByaXZfcGRuKTsKKwlpZiAobWRldi0+bmIubm90aWZpZXJfY2FsbCkKKwkJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm1kZXYtPm5iKTsKIAlrZnJlZShtZGV2KTsKIH0KIApAQCAtMjQxLDggKzI0Myw4IEBACiAJc3Bpbl9sb2NrX2luaXQoJm1kZXYtPnVhcl9sb2NrKTsKIAogCW1kZXYtPmRldiA9IGRldjsKLQltZGV2LT5kbWFfZGV2aWNlID0gJihkZXYtPnBkZXYtPmRldik7Ci0JbWRldi0+cGRldiA9IGRldi0+cGRldjsKKwltZGV2LT5kbWFfZGV2aWNlID0gJmRldi0+cGVyc2lzdC0+cGRldi0+ZGV2OworCW1kZXYtPnBkZXYgPSBkZXYtPnBlcnNpc3QtPnBkZXY7CiAJbWRldi0+ZGV2aWNlX3VwID0gZmFsc2U7CiAKIAltZGV2LT5MU09fc3VwcG9ydCA9ICEhKGRldi0+Y2Fwcy5mbGFncyAmICgxIDw8IDE1KSk7CkBAIC0yOTgsNiArMzAwLDEyIEBACiAJCWlmIChtbHg0X2VuX2luaXRfbmV0ZGV2KG1kZXYsIGksICZtZGV2LT5wcm9maWxlLnByb2ZbaV0pKQogCQkJbWRldi0+cG5kZXZbaV0gPSBOVUxMOwogCX0KKwkvKiByZWdpc3RlciBub3RpZmllciAqLworCW1kZXYtPm5iLm5vdGlmaWVyX2NhbGwgPSBtbHg0X2VuX25ldGRldl9ldmVudDsKKwlpZiAocmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZtZGV2LT5uYikpIHsKKwkJbWRldi0+bmIubm90aWZpZXJfY2FsbCA9IE5VTEw7CisJCW1seDRfZXJyKG1kZXYsICJGYWlsZWQgdG8gY3JlYXRlIG5vdGlmaWVyXG4iKTsKKwl9CiAKIAlyZXR1cm4gbWRldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fbmV0ZGV2LmMKaW5kZXggYWM2YThmMS4uMmEyMTBjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX25ldGRldi5jCkBAIC0yMDYyLDYgKzIwNjIsNyBAQAogCS8qIERldGFjaCB0aGUgbmV0ZGV2IHNvIHRhc2tzIHdvdWxkIG5vdCBhdHRlbXB0IHRvIGFjY2VzcyBpdCAqLwogCW11dGV4X2xvY2soJm1kZXYtPnN0YXRlX2xvY2spOwogCW1kZXYtPnBuZGV2W3ByaXYtPnBvcnRdID0gTlVMTDsKKwltZGV2LT51cHBlcltwcml2LT5wb3J0XSA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZtZGV2LT5zdGF0ZV9sb2NrKTsKIAogCW1seDRfZW5fZnJlZV9yZXNvdXJjZXMocHJpdik7CkBAIC0yMjAxLDYgKzIyMDIsMTAgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCisJaWYgKERFVl9GRUFUVVJFX0NIQU5HRUQobmV0ZGV2LCBmZWF0dXJlcywgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFgpKQorCQllbl9pbmZvKHByaXYsICJUdXJuICVzIFRYIHZsYW4gc3RyaXAgb2ZmbG9hZFxuIiwKKwkJCShmZWF0dXJlcyAmIE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYKSA/ICJPTiIgOiAiT0ZGIik7CisKIAlpZiAoZmVhdHVyZXMgJiBORVRJRl9GX0xPT1BCQUNLKQogCQlwcml2LT5jdHJsX2ZsYWdzIHw9IGNwdV90b19iZTMyKE1MWDRfV1FFX0NUUkxfRk9SQ0VfTE9PUEJBQ0spOwogCWVsc2UKQEAgLTI0NDEsNiArMjQ0NiwxODAgQEAKICNlbmRpZgogfTsKIAorc3RydWN0IG1seDRfZW5fYm9uZCB7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdjsKKwlpbnQgaXNfYm9uZGVkOworCXN0cnVjdCBtbHg0X3BvcnRfbWFwIHBvcnRfbWFwOworfTsKKworc3RhdGljIHZvaWQgbWx4NF9lbl9ib25kX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtbHg0X2VuX2JvbmQgKmJvbmQgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQkJCSAgICAgc3RydWN0IG1seDRfZW5fYm9uZCwKKwkJCQkJCSAgICAgd29yayk7CisJaW50IGVyciA9IDA7CisJc3RydWN0IG1seDRfZGV2ICpkZXYgPSBib25kLT5wcml2LT5tZGV2LT5kZXY7CisKKwlpZiAoYm9uZC0+aXNfYm9uZGVkKSB7CisJCWlmICghbWx4NF9pc19ib25kZWQoZGV2KSkgeworCQkJZXJyID0gbWx4NF9ib25kKGRldik7CisJCQlpZiAoZXJyKQorCQkJCWVuX2Vycihib25kLT5wcml2LCAiRmFpbCB0byBib25kIGRldmljZVxuIik7CisJCX0KKwkJaWYgKCFlcnIpIHsKKwkJCWVyciA9IG1seDRfcG9ydF9tYXBfc2V0KGRldiwgJmJvbmQtPnBvcnRfbWFwKTsKKwkJCWlmIChlcnIpCisJCQkJZW5fZXJyKGJvbmQtPnByaXYsICJGYWlsIHRvIHNldCBwb3J0IG1hcCBbJWRdWyVkXTogJWRcbiIsCisJCQkJICAgICAgIGJvbmQtPnBvcnRfbWFwLnBvcnQxLAorCQkJCSAgICAgICBib25kLT5wb3J0X21hcC5wb3J0MiwKKwkJCQkgICAgICAgZXJyKTsKKwkJfQorCX0gZWxzZSBpZiAobWx4NF9pc19ib25kZWQoZGV2KSkgeworCQllcnIgPSBtbHg0X3VuYm9uZChkZXYpOworCQlpZiAoZXJyKQorCQkJZW5fZXJyKGJvbmQtPnByaXYsICJGYWlsIHRvIHVuYm9uZCBkZXZpY2VcbiIpOworCX0KKwlkZXZfcHV0KGJvbmQtPnByaXYtPmRldik7CisJa2ZyZWUoYm9uZCk7Cit9CisKK3N0YXRpYyBpbnQgbWx4NF9lbl9xdWV1ZV9ib25kX3dvcmsoc3RydWN0IG1seDRfZW5fcHJpdiAqcHJpdiwgaW50IGlzX2JvbmRlZCwKKwkJCQkgICB1OCB2MnBfcDEsIHU4IHYycF9wMikKK3sKKwlzdHJ1Y3QgbWx4NF9lbl9ib25kICpib25kID0gTlVMTDsKKworCWJvbmQgPSBremFsbG9jKHNpemVvZigqYm9uZCksIEdGUF9BVE9NSUMpOworCWlmICghYm9uZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlJTklUX1dPUksoJmJvbmQtPndvcmssIG1seDRfZW5fYm9uZF93b3JrKTsKKwlib25kLT5wcml2ID0gcHJpdjsKKwlib25kLT5pc19ib25kZWQgPSBpc19ib25kZWQ7CisJYm9uZC0+cG9ydF9tYXAucG9ydDEgPSB2MnBfcDE7CisJYm9uZC0+cG9ydF9tYXAucG9ydDIgPSB2MnBfcDI7CisJZGV2X2hvbGQocHJpdi0+ZGV2KTsKKwlxdWV1ZV93b3JrKHByaXYtPm1kZXYtPndvcmtxdWV1ZSwgJmJvbmQtPndvcmspOworCXJldHVybiAwOworfQorCitpbnQgbWx4NF9lbl9uZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAorCQkJIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpOworCXU4IHBvcnQgPSAwOworCXN0cnVjdCBtbHg0X2VuX2RldiAqbWRldjsKKwlzdHJ1Y3QgbWx4NF9kZXYgKmRldjsKKwlpbnQgaSwgbnVtX2V0aF9wb3J0cyA9IDA7CisJYm9vbCBkb19ib25kID0gdHJ1ZTsKKwlzdHJ1Y3QgbWx4NF9lbl9wcml2ICpwcml2OworCXU4IHYycF9wb3J0MSA9IDA7CisJdTggdjJwX3BvcnQyID0gMDsKKworCWlmICghbmV0X2VxKGRldl9uZXQobmRldiksICZpbml0X25ldCkpCisJCXJldHVybiBOT1RJRllfRE9ORTsKKworCW1kZXYgPSBjb250YWluZXJfb2YodGhpcywgc3RydWN0IG1seDRfZW5fZGV2LCBuYik7CisJZGV2ID0gbWRldi0+ZGV2OworCisJLyogR28gaW50byB0aGlzIG1vZGUgb25seSB3aGVuIHR3byBuZXR3b3JrIGRldmljZXMgc2V0IG9uIHR3byBwb3J0cworCSAqIG9mIHRoZSBzYW1lIG1seDQgZGV2aWNlIGFyZSBzbGF2ZXMgb2YgdGhlIHNhbWUgYm9uZGluZyBtYXN0ZXIKKwkgKi8KKwltbHg0X2ZvcmVhY2hfcG9ydChpLCBkZXYsIE1MWDRfUE9SVF9UWVBFX0VUSCkgeworCQkrK251bV9ldGhfcG9ydHM7CisJCWlmICghcG9ydCAmJiAobWRldi0+cG5kZXZbaV0gPT0gbmRldikpCisJCQlwb3J0ID0gaTsKKwkJbWRldi0+dXBwZXJbaV0gPSBtZGV2LT5wbmRldltpXSA/CisJCQluZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQobWRldi0+cG5kZXZbaV0pIDogTlVMTDsKKwkJLyogY29uZGl0aW9uIG5vdCBtZXQ6IG5ldHdvcmsgZGV2aWNlIGlzIGEgc2xhdmUgKi8KKwkJaWYgKCFtZGV2LT51cHBlcltpXSkKKwkJCWRvX2JvbmQgPSBmYWxzZTsKKwkJaWYgKG51bV9ldGhfcG9ydHMgPCAyKQorCQkJY29udGludWU7CisJCS8qIGNvbmRpdGlvbiBub3QgbWV0OiBzYW1lIG1hc3RlciAqLworCQlpZiAobWRldi0+dXBwZXJbaV0gIT0gbWRldi0+dXBwZXJbaS0xXSkKKwkJCWRvX2JvbmQgPSBmYWxzZTsKKwl9CisJLyogY29uZGl0aW9uIG5vdCBtZXQ6IDIgc2FsdmVzICovCisJZG9fYm9uZCA9IChudW1fZXRoX3BvcnRzID09ICAyKSA/IGRvX2JvbmQgOiBmYWxzZTsKKworCS8qIGhhbmRsZSBvbmx5IGV2ZW50cyB0aGF0IGNvbWUgd2l0aCBlbm91Z2ggaW5mbyAqLworCWlmICgoZG9fYm9uZCAmJiAoZXZlbnQgIT0gTkVUREVWX0JPTkRJTkdfSU5GTykpIHx8ICFwb3J0KQorCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwlwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJaWYgKGRvX2JvbmQpIHsKKwkJc3RydWN0IG5ldGRldl9ub3RpZmllcl9ib25kaW5nX2luZm8gKm5vdGlmaWVyX2luZm8gPSBwdHI7CisJCXN0cnVjdCBuZXRkZXZfYm9uZGluZ19pbmZvICpib25kaW5nX2luZm8gPQorCQkJJm5vdGlmaWVyX2luZm8tPmJvbmRpbmdfaW5mbzsKKworCQkvKiByZXF1aXJlZCBtb2RlIDEsIDIgb3IgNCAqLworCQlpZiAoKGJvbmRpbmdfaW5mby0+bWFzdGVyLmJvbmRfbW9kZSAhPSBCT05EX01PREVfQUNUSVZFQkFDS1VQKSAmJgorCQkgICAgKGJvbmRpbmdfaW5mby0+bWFzdGVyLmJvbmRfbW9kZSAhPSBCT05EX01PREVfWE9SKSAmJgorCQkgICAgKGJvbmRpbmdfaW5mby0+bWFzdGVyLmJvbmRfbW9kZSAhPSBCT05EX01PREVfODAyM0FEKSkKKwkJCWRvX2JvbmQgPSBmYWxzZTsKKworCQkvKiByZXF1aXJlIGV4YWN0bHkgMiBzbGF2ZXMgKi8KKwkJaWYgKGJvbmRpbmdfaW5mby0+bWFzdGVyLm51bV9zbGF2ZXMgIT0gMikKKwkJCWRvX2JvbmQgPSBmYWxzZTsKKworCQkvKiBjYWxjIHYycCAqLworCQlpZiAoZG9fYm9uZCkgeworCQkJaWYgKGJvbmRpbmdfaW5mby0+bWFzdGVyLmJvbmRfbW9kZSA9PQorCQkJICAgIEJPTkRfTU9ERV9BQ1RJVkVCQUNLVVApIHsKKwkJCQkvKiBpbiBhY3RpdmUtYmFja3VwIG1vZGUgdmlydHVhbCBwb3J0cyBhcmUKKwkJCQkgKiBtYXBwZWQgdG8gdGhlIHBoeXNpY2FsIHBvcnQgb2YgdGhlIGFjdGl2ZQorCQkJCSAqIHNsYXZlICovCisJCQkJaWYgKGJvbmRpbmdfaW5mby0+c2xhdmUuc3RhdGUgPT0KKwkJCQkgICAgQk9ORF9TVEFURV9CQUNLVVApIHsKKwkJCQkJaWYgKHBvcnQgPT0gMSkgeworCQkJCQkJdjJwX3BvcnQxID0gMjsKKwkJCQkJCXYycF9wb3J0MiA9IDI7CisJCQkJCX0gZWxzZSB7CisJCQkJCQl2MnBfcG9ydDEgPSAxOworCQkJCQkJdjJwX3BvcnQyID0gMTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7IC8qIEJPTkRfU1RBVEVfQUNUSVZFICovCisJCQkJCWlmIChwb3J0ID09IDEpIHsKKwkJCQkJCXYycF9wb3J0MSA9IDE7CisJCQkJCQl2MnBfcG9ydDIgPSAxOworCQkJCQl9IGVsc2UgeworCQkJCQkJdjJwX3BvcnQxID0gMjsKKwkJCQkJCXYycF9wb3J0MiA9IDI7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeyAvKiBBY3RpdmUtQWN0aXZlICovCisJCQkJLyogaW4gYWN0aXZlLWFjdGl2ZSBtb2RlIGEgdmlydHVhbCBwb3J0IGlzCisJCQkJICogbWFwcGVkIHRvIHRoZSBuYXRpdmUgcGh5c2ljYWwgcG9ydCBpZiBhbmQgb25seQorCQkJCSAqIGlmIHRoZSBwaHlzaWNhbCBwb3J0IGlzIHVwICovCisJCQkJX19zOCBsaW5rID0gYm9uZGluZ19pbmZvLT5zbGF2ZS5saW5rOworCisJCQkJaWYgKHBvcnQgPT0gMSkKKwkJCQkJdjJwX3BvcnQyID0gMjsKKwkJCQllbHNlCisJCQkJCXYycF9wb3J0MSA9IDE7CisJCQkJaWYgKChsaW5rID09IEJPTkRfTElOS19VUCkgfHwKKwkJCQkgICAgKGxpbmsgPT0gQk9ORF9MSU5LX0ZBSUwpKSB7CisJCQkJCWlmIChwb3J0ID09IDEpCisJCQkJCQl2MnBfcG9ydDEgPSAxOworCQkJCQllbHNlCisJCQkJCQl2MnBfcG9ydDIgPSAyOworCQkJCX0gZWxzZSB7IC8qIEJPTkRfTElOS19ET1dOIHx8IEJPTkRfTElOS19CQUNLICovCisJCQkJCWlmIChwb3J0ID09IDEpCisJCQkJCQl2MnBfcG9ydDEgPSAyOworCQkJCQllbHNlCisJCQkJCQl2MnBfcG9ydDIgPSAxOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCW1seDRfZW5fcXVldWVfYm9uZF93b3JrKHByaXYsIGRvX2JvbmQsCisJCQkJdjJwX3BvcnQxLCB2MnBfcG9ydDIpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCiBpbnQgbWx4NF9lbl9pbml0X25ldGRldihzdHJ1Y3QgbWx4NF9lbl9kZXYgKm1kZXYsIGludCBwb3J0LAogCQkJc3RydWN0IG1seDRfZW5fcG9ydF9wcm9maWxlICpwcm9mKQogewpAQCAtMjQ1OCw3ICsyNjM3LDcgQEAKIAluZXRpZl9zZXRfcmVhbF9udW1fdHhfcXVldWVzKGRldiwgcHJvZi0+dHhfcmluZ19udW0pOwogCW5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMoZGV2LCBwcm9mLT5yeF9yaW5nX251bSk7CiAKLQlTRVRfTkVUREVWX0RFVihkZXYsICZtZGV2LT5kZXYtPnBkZXYtPmRldik7CisJU0VUX05FVERFVl9ERVYoZGV2LCAmbWRldi0+ZGV2LT5wZXJzaXN0LT5wZGV2LT5kZXYpOwogCWRldi0+ZGV2X3BvcnQgPSBwb3J0IC0gMTsKIAogCS8qCkBAIC0yNjIzLDYgKzI4MDIsNyBAQAogCX0KIAogCW1kZXYtPnBuZGV2W3BvcnRdID0gZGV2OworCW1kZXYtPnVwcGVyW3BvcnRdID0gTlVMTDsKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJbWx4NF9lbl9zZXRfZGVmYXVsdF9tb2RlcmF0aW9uKHByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9yZXNvdXJjZXMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fcmVzb3VyY2VzLmMKaW5kZXggZjFhNTUwMC4uMzRmMmZkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9yZXNvdXJjZXMuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3Jlc291cmNlcy5jCkBAIC01MCwxMCArNTAsMTQgQEAKIAljb250ZXh0LT5tdHVfbXNnbWF4ID0gMHhmZjsKIAlpZiAoIWlzX3R4ICYmICFyc3MpCiAJCWNvbnRleHQtPnJxX3NpemVfc3RyaWRlID0gaWxvZzIoc2l6ZSkgPDwgMyB8IChpbG9nMihzdHJpZGUpIC0gNCk7Ci0JaWYgKGlzX3R4KQorCWlmIChpc190eCkgewogCQljb250ZXh0LT5zcV9zaXplX3N0cmlkZSA9IGlsb2cyKHNpemUpIDw8IDMgfCAoaWxvZzIoc3RyaWRlKSAtIDQpOwotCWVsc2UKKwkJaWYgKG1kZXYtPmRldi0+Y2Fwcy5mbGFnczIgJiBNTFg0X0RFVl9DQVBfRkxBRzJfUE9SVF9SRU1BUCkKKwkJCWNvbnRleHQtPnBhcmFtczIgfD0gTUxYNF9RUF9CSVRfRlBQOworCisJfSBlbHNlIHsKIAkJY29udGV4dC0+c3Ffc2l6ZV9zdHJpZGUgPSBpbG9nMihUWEJCX1NJWkUpIC0gNDsKKwl9CiAJY29udGV4dC0+dXNyX3BhZ2UgPSBjcHVfdG9fYmUzMihtZGV2LT5wcml2X3Vhci5pbmRleCk7CiAJY29udGV4dC0+bG9jYWxfcXBuID0gY3B1X3RvX2JlMzIocXBuKTsKIAljb250ZXh0LT5wcmlfcGF0aC5hY2t0byA9IDEgJiAweDA3OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9yeC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9yeC5jCmluZGV4IGEwNDc0ZWIuLjY5OGQ2MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fcnguYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3J4LmMKQEAgLTE2Miw2ICsxNjIsMTAgQEAKIAkJaWYgKG1seDRfYWxsb2NfcGFnZXMocHJpdiwgJnJpbmctPnBhZ2VfYWxsb2NbaV0sCiAJCQkJICAgICBmcmFnX2luZm8sIEdGUF9LRVJORUwgfCBfX0dGUF9DT0xEKSkKIAkJCWdvdG8gb3V0OworCisJCWVuX2RiZyhEUlYsIHByaXYsICIgIGZyYWcgJWQgYWxsb2NhdG9yOiAtIHNpemU6JWQgZnJhZ3M6JWRcbiIsCisJCSAgICAgICBpLCByaW5nLT5wYWdlX2FsbG9jW2ldLnBhZ2Vfc2l6ZSwKKwkJICAgICAgIGF0b21pY19yZWFkKCZyaW5nLT5wYWdlX2FsbG9jW2ldLnBhZ2UtPl9jb3VudCkpOwogCX0KIAlyZXR1cm4gMDsKIApAQCAtMzg3LDEwICszOTEsMTAgQEAKIAkJIHJpbmctPnJ4X2luZm8sIHRtcCk7CiAKIAkvKiBBbGxvY2F0ZSBIVyBidWZmZXJzIG9uIHByb3ZpZGVkIE5VTUEgbm9kZSAqLwotCXNldF9kZXZfbm9kZSgmbWRldi0+ZGV2LT5wZGV2LT5kZXYsIG5vZGUpOworCXNldF9kZXZfbm9kZSgmbWRldi0+ZGV2LT5wZXJzaXN0LT5wZGV2LT5kZXYsIG5vZGUpOwogCWVyciA9IG1seDRfYWxsb2NfaHdxX3JlcyhtZGV2LT5kZXYsICZyaW5nLT53cXJlcywKIAkJCQkgcmluZy0+YnVmX3NpemUsIDIgKiBQQUdFX1NJWkUpOwotCXNldF9kZXZfbm9kZSgmbWRldi0+ZGV2LT5wZGV2LT5kZXYsIG1kZXYtPmRldi0+bnVtYV9ub2RlKTsKKwlzZXRfZGV2X25vZGUoJm1kZXYtPmRldi0+cGVyc2lzdC0+cGRldi0+ZGV2LCBtZGV2LT5kZXYtPm51bWFfbm9kZSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfaW5mbzsKIApAQCAtMTA1OSw4ICsxMDYzLDkgQEAKIAkJCShlZmZfbXR1ID4gYnVmX3NpemUgKyBmcmFnX3NpemVzW2ldKSA/CiAJCQkJZnJhZ19zaXplc1tpXSA6IGVmZl9tdHUgLSBidWZfc2l6ZTsKIAkJcHJpdi0+ZnJhZ19pbmZvW2ldLmZyYWdfcHJlZml4X3NpemUgPSBidWZfc2l6ZTsKLQkJcHJpdi0+ZnJhZ19pbmZvW2ldLmZyYWdfc3RyaWRlID0gQUxJR04oZnJhZ19zaXplc1tpXSwKLQkJCQkJCSAgICAgICBTTVBfQ0FDSEVfQllURVMpOworCQlwcml2LT5mcmFnX2luZm9baV0uZnJhZ19zdHJpZGUgPQorCQkJCUFMSUdOKHByaXYtPmZyYWdfaW5mb1tpXS5mcmFnX3NpemUsCisJCQkJICAgICAgU01QX0NBQ0hFX0JZVEVTKTsKIAkJYnVmX3NpemUgKz0gcHJpdi0+ZnJhZ19pbmZvW2ldLmZyYWdfc2l6ZTsKIAkJaSsrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fdHguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZW5fdHguYwppbmRleCBlMzM1N2JmLi41NWY5ZjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX3R4LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl90eC5jCkBAIC05MSwxMCArOTEsMTAgQEAKIAlyaW5nLT5idWZfc2l6ZSA9IEFMSUdOKHNpemUgKiByaW5nLT5zdHJpZGUsIE1MWDRfRU5fUEFHRV9TSVpFKTsKIAogCS8qIEFsbG9jYXRlIEhXIGJ1ZmZlcnMgb24gcHJvdmlkZWQgTlVNQSBub2RlICovCi0Jc2V0X2Rldl9ub2RlKCZtZGV2LT5kZXYtPnBkZXYtPmRldiwgbm9kZSk7CisJc2V0X2Rldl9ub2RlKCZtZGV2LT5kZXYtPnBlcnNpc3QtPnBkZXYtPmRldiwgbm9kZSk7CiAJZXJyID0gbWx4NF9hbGxvY19od3FfcmVzKG1kZXYtPmRldiwgJnJpbmctPndxcmVzLCByaW5nLT5idWZfc2l6ZSwKIAkJCQkgMiAqIFBBR0VfU0laRSk7Ci0Jc2V0X2Rldl9ub2RlKCZtZGV2LT5kZXYtPnBkZXYtPmRldiwgbWRldi0+ZGV2LT5udW1hX25vZGUpOworCXNldF9kZXZfbm9kZSgmbWRldi0+ZGV2LT5wZXJzaXN0LT5wZGV2LT5kZXYsIG1kZXYtPmRldi0+bnVtYV9ub2RlKTsKIAlpZiAoZXJyKSB7CiAJCWVuX2Vycihwcml2LCAiRmFpbGVkIGFsbG9jYXRpbmcgaHdxIHJlc291cmNlc1xuIik7CiAJCWdvdG8gZXJyX2JvdW5jZTsKQEAgLTY4Miw4ICs2ODIsOCBAQAogCWlmIChkZXYtPm51bV90YykKIAkJcmV0dXJuIHNrYl90eF9oYXNoKGRldiwgc2tiKTsKIAotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCi0JCXVwID0gdmxhbl90eF90YWdfZ2V0KHNrYikgPj4gVkxBTl9QUklPX1NISUZUOworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKQorCQl1cCA9IHNrYl92bGFuX3RhZ19nZXQoc2tiKSA+PiBWTEFOX1BSSU9fU0hJRlQ7CiAKIAlyZXR1cm4gZmFsbGJhY2soZGV2LCBza2IpICUgcmluZ3NfcF91cCArIHVwICogcmluZ3NfcF91cDsKIH0KQEAgLTc0Miw4ICs3NDIsOCBAQAogCQlnb3RvIHR4X2Ryb3A7CiAJfQogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKLQkJdmxhbl90YWcgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkKKwkJdmxhbl90YWcgPSBza2Jfdmxhbl90YWdfZ2V0KHNrYik7CiAKIAogCW5ldGRldl90eHFfYnFsX2VucXVldWVfcHJlZmV0Y2h3KHJpbmctPnR4X3F1ZXVlKTsKQEAgLTkzMCw3ICs5MzAsNyBAQAogCXJlYWxfc2l6ZSA9IChyZWFsX3NpemUgLyAxNikgJiAweDNmOwogCiAJaWYgKHJpbmctPmJmX2VuYWJsZWQgJiYgZGVzY19zaXplIDw9IE1BWF9CRiAmJiAhYm91bmNlICYmCi0JICAgICF2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikgJiYgc2VuZF9kb29yYmVsbCkgeworCSAgICAhc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSAmJiBzZW5kX2Rvb3JiZWxsKSB7CiAJCXR4X2Rlc2MtPmN0cmwuYmZfcXBuID0gcmluZy0+ZG9vcmJlbGxfcXBuIHwKIAkJCQkgICAgICAgY3B1X3RvX2JlMzIocmVhbF9zaXplKTsKIApAQCAtOTUyLDcgKzk1Miw3IEBACiAJfSBlbHNlIHsKIAkJdHhfZGVzYy0+Y3RybC52bGFuX3RhZyA9IGNwdV90b19iZTE2KHZsYW5fdGFnKTsKIAkJdHhfZGVzYy0+Y3RybC5pbnNfdmxhbiA9IE1MWDRfV1FFX0NUUkxfSU5TX1ZMQU4gKgotCQkJISF2bGFuX3R4X3RhZ19wcmVzZW50KHNrYik7CisJCQkhIXNrYl92bGFuX3RhZ19wcmVzZW50KHNrYik7CiAJCXR4X2Rlc2MtPmN0cmwuZmVuY2Vfc2l6ZSA9IHJlYWxfc2l6ZTsKIAogCQkvKiBFbnN1cmUgbmV3IGRlc2NyaXB0b3IgaGl0cyBtZW1vcnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZXEuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZXEuYwppbmRleCAzZDI3NWZiLi4yNjRiYzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VxLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lcS5jCkBAIC04OCw2ICs4OCw4IEBACiAJdTY0IGFzeW5jX2V2X21hc2sgPSBNTFg0X0FTWU5DX0VWRU5UX01BU0s7CiAJaWYgKGRldi0+Y2Fwcy5mbGFncyAmIE1MWDRfREVWX0NBUF9GTEFHX1BPUlRfTU5HX0NIR19FVikKIAkJYXN5bmNfZXZfbWFzayB8PSAoMXVsbCA8PCBNTFg0X0VWRU5UX1RZUEVfUE9SVF9NTkdfQ0hHX0VWRU5UKTsKKwlpZiAoZGV2LT5jYXBzLmZsYWdzMiAmIE1MWDRfREVWX0NBUF9GTEFHMl9SRUNPVkVSQUJMRV9FUlJPUl9FVkVOVCkKKwkJYXN5bmNfZXZfbWFzayB8PSAoMXVsbCA8PCBNTFg0X0VWRU5UX1RZUEVfUkVDT1ZFUkFCTEVfRVJST1JfRVZFTlQpOwogCiAJcmV0dXJuIGFzeW5jX2V2X21hc2s7CiB9CkBAIC0yMzcsNyArMjM5LDcgQEAKIAlzdHJ1Y3QgbWx4NF9lcWUgZXFlOwogCiAJLypkb24ndCBzZW5kIGlmIHdlIGRvbid0IGhhdmUgdGhlIHRoYXQgc2xhdmUgKi8KLQlpZiAoZGV2LT5udW1fdmZzIDwgc2xhdmUpCisJaWYgKGRldi0+cGVyc2lzdC0+bnVtX3ZmcyA8IHNsYXZlKQogCQlyZXR1cm4gMDsKIAltZW1zZXQoJmVxZSwgMCwgc2l6ZW9mIGVxZSk7CiAKQEAgLTI1NSw3ICsyNTcsNyBAQAogCXN0cnVjdCBtbHg0X2VxZSBlcWU7CiAKIAkvKmRvbid0IHNlbmQgaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgdGhhdCBzbGF2ZSAqLwotCWlmIChkZXYtPm51bV92ZnMgPCBzbGF2ZSkKKwlpZiAoZGV2LT5wZXJzaXN0LT5udW1fdmZzIDwgc2xhdmUpCiAJCXJldHVybiAwOwogCW1lbXNldCgmZXFlLCAwLCBzaXplb2YgZXFlKTsKIApAQCAtMzEwLDcgKzMxMiw3IEBACiAJc3RydWN0IG1seDRfc2xhdmVzX3Bwb3J0IHNsYXZlc19wcG9ydCA9IG1seDRfcGh5c190b19zbGF2ZXNfcHBvcnQoZGV2LAogCQkJCQkJCQkJICBwb3J0KTsKIAotCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV92ZnMgKyAxOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGRldi0+cGVyc2lzdC0+bnVtX3ZmcyArIDE7IGkrKykKIAkJaWYgKHRlc3RfYml0KGksIHNsYXZlc19wcG9ydC5zbGF2ZXMpKQogCQkJc2V0X2FuZF9jYWxjX3NsYXZlX3BvcnRfc3RhdGUoZGV2LCBpLCBwb3J0LAogCQkJCQkJICAgICAgZXZlbnQsICZnZW5fZXZlbnQpOwpAQCAtNDI5LDggKzQzMSwxNCBAQAogCQlpZiAoTUxYNF9DT01NX0NNRF9GTFIgPT0gc2xhdmVfc3RhdGVbaV0ubGFzdF9jbWQpIHsKIAkJCW1seDRfZGJnKGRldiwgIm1seDRfaGFuZGxlX3NsYXZlX2ZscjogY2xlYW4gc2xhdmU6ICVkXG4iLAogCQkJCSBpKTsKLQotCQkJbWx4NF9kZWxldGVfYWxsX3Jlc291cmNlc19mb3Jfc2xhdmUoZGV2LCBpKTsKKwkJCS8qIEluIGNhc2Ugb2YgJ1Jlc2V0IGZsb3cnIEZMUiBjYW4gYmUgZ2VuZXJhdGVkIGZvcgorCQkJICogYSBzbGF2ZSBiZWZvcmUgbWx4NF9sb2FkX29uZSBpcyBkb25lLgorCQkJICogbWFrZSBzdXJlIGludGVyZmFjZSBpcyB1cCBiZWZvcmUgdHJ5aW5nIHRvIGRlbGV0ZQorCQkJICogc2xhdmUgcmVzb3VyY2VzIHdoaWNoIHdlcmVuJ3QgYWxsb2NhdGVkIHlldC4KKwkJCSAqLworCQkJaWYgKGRldi0+cGVyc2lzdC0+aW50ZXJmYWNlX3N0YXRlICYKKwkJCSAgICBNTFg0X0lOVEVSRkFDRV9TVEFURV9VUCkKKwkJCQltbHg0X2RlbGV0ZV9hbGxfcmVzb3VyY2VzX2Zvcl9zbGF2ZShkZXYsIGkpOwogCQkJLypyZXR1cm4gdGhlIHNsYXZlIHRvIHJ1bm5pbmcgbW9kZSovCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bWZ1bmMubWFzdGVyLnNsYXZlX3N0YXRlX2xvY2ssIGZsYWdzKTsKIAkJCXNsYXZlX3N0YXRlW2ldLmxhc3RfY21kID0gTUxYNF9DT01NX0NNRF9SRVNFVDsKQEAgLTU2MCw3ICs1NjgsOCBAQAogCQkJCW1seDRfcHJpdihkZXYpLT5zZW5zZS5kb19zZW5zZV9wb3J0W3BvcnRdID0gMTsKIAkJCQlpZiAoIW1seDRfaXNfbWFzdGVyKGRldikpCiAJCQkJCWJyZWFrOwotCQkJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm51bV92ZnMgKyAxOyBpKyspIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5wZXJzaXN0LT5udW1fdmZzICsgMTsKKwkJCQkgICAgIGkrKykgewogCQkJCQlpZiAoIXRlc3RfYml0KGksIHNsYXZlc19wb3J0LnNsYXZlcykpCiAJCQkJCQljb250aW51ZTsKIAkJCQkJaWYgKGRldi0+Y2Fwcy5wb3J0X3R5cGVbcG9ydF0gPT0gTUxYNF9QT1JUX1RZUEVfRVRIKSB7CkBAIC01OTYsNyArNjA1LDkgQEAKIAkJCQlpZiAoIW1seDRfaXNfbWFzdGVyKGRldikpCiAJCQkJCWJyZWFrOwogCQkJCWlmIChkZXYtPmNhcHMucG9ydF90eXBlW3BvcnRdID09IE1MWDRfUE9SVF9UWVBFX0VUSCkKLQkJCQkJZm9yIChpID0gMDsgaSA8IGRldi0+bnVtX3ZmcyArIDE7IGkrKykgeworCQkJCQlmb3IgKGkgPSAwOworCQkJCQkgICAgIGkgPCBkZXYtPnBlcnNpc3QtPm51bV92ZnMgKyAxOworCQkJCQkgICAgIGkrKykgewogCQkJCQkJaWYgKCF0ZXN0X2JpdChpLCBzbGF2ZXNfcG9ydC5zbGF2ZXMpKQogCQkJCQkJCWNvbnRpbnVlOwogCQkJCQkJaWYgKGkgPT0gbWx4NF9tYXN0ZXJfZnVuY19udW0oZGV2KSkKQEAgLTcyNyw2ICs3MzgsMjYgQEAKIAkJCQkJICAgICh1bnNpZ25lZCBsb25nKSBlcWUpOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfUkVDT1ZFUkFCTEVfRVJST1JfRVZFTlQ6CisJCQlzd2l0Y2ggKGVxZS0+c3VidHlwZSkgeworCQkJY2FzZSBNTFg0X1JFQ09WRVJBQkxFX0VSUk9SX0VWRU5UX1NVQlRZUEVfQkFEX0NBQkxFOgorCQkJCW1seDRfd2FybihkZXYsICJCYWQgY2FibGUgZGV0ZWN0ZWQgb24gcG9ydCAldVxuIiwKKwkJCQkJICBlcWUtPmV2ZW50LmJhZF9jYWJsZS5wb3J0KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgTUxYNF9SRUNPVkVSQUJMRV9FUlJPUl9FVkVOVF9TVUJUWVBFX1VOU1VQUE9SVEVEX0NBQkxFOgorCQkJCW1seDRfd2FybihkZXYsICJVbnN1cHBvcnRlZCBjYWJsZSBkZXRlY3RlZFxuIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW1seDRfZGJnKGRldiwKKwkJCQkJICJVbmhhbmRsZWQgcmVjb3ZlcmFibGUgZXJyb3IgZXZlbnQgZGV0ZWN0ZWQ6ICUwMngoJTAyeCkgb24gRVEgJWQgYXQgaW5kZXggJXUuIG93bmVyPSV4LCBuZW50PTB4JXgsIG93bmVyc2hpcD0lc1xuIiwKKwkJCQkJIGVxZS0+dHlwZSwgZXFlLT5zdWJ0eXBlLCBlcS0+ZXFuLAorCQkJCQkgZXEtPmNvbnNfaW5kZXgsIGVxZS0+b3duZXIsIGVxLT5uZW50LAorCQkJCQkgISEoZXFlLT5vd25lciAmIDB4ODApIF4KKwkJCQkJICEhKGVxLT5jb25zX2luZGV4ICYgZXEtPm5lbnQpID8gIkhXIiA6ICJTVyIpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisKIAkJY2FzZSBNTFg0X0VWRU5UX1RZUEVfRUVDX0NBVEFTX0VSUk9SOgogCQljYXNlIE1MWDRfRVZFTlRfVFlQRV9FQ0NfREVURUNUOgogCQlkZWZhdWx0OgpAQCAtODM3LDEyICs4NjgsMTAgQEAKIAkJCU1MWDRfQ01EX1dSQVBQRUQpOwogfQogCi1zdGF0aWMgaW50IG1seDRfSFcyU1dfRVEoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94LAotCQkJIGludCBlcV9udW0pCitzdGF0aWMgaW50IG1seDRfSFcyU1dfRVEoc3RydWN0IG1seDRfZGV2ICpkZXYsICBpbnQgZXFfbnVtKQogewotCXJldHVybiBtbHg0X2NtZF9ib3goZGV2LCAwLCBtYWlsYm94LT5kbWEsIGVxX251bSwKLQkJCSAgICAwLCBNTFg0X0NNRF9IVzJTV19FUSwgTUxYNF9DTURfVElNRV9DTEFTU19BLAotCQkJICAgIE1MWDRfQ01EX1dSQVBQRUQpOworCXJldHVybiBtbHg0X2NtZChkZXYsIDAsIGVxX251bSwgMSwgTUxYNF9DTURfSFcyU1dfRVEsCisJCQlNTFg0X0NNRF9USU1FX0NMQVNTX0EsIE1MWDRfQ01EX1dSQVBQRUQpOwogfQogCiBzdGF0aWMgaW50IG1seDRfbnVtX2VxX3VhcihzdHJ1Y3QgbWx4NF9kZXYgKmRldikKQEAgLTg2NSw3ICs4OTQsNyBAQAogCiAJaWYgKCFwcml2LT5lcV90YWJsZS51YXJfbWFwW2luZGV4XSkgewogCQlwcml2LT5lcV90YWJsZS51YXJfbWFwW2luZGV4XSA9Ci0JCQlpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBkZXYsIDIpICsKKwkJCWlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGVyc2lzdC0+cGRldiwgMikgKwogCQkJCSgoZXEtPmVxbiAvIDQpIDw8IFBBR0VfU0hJRlQpLAogCQkJCVBBR0VfU0laRSk7CiAJCWlmICghcHJpdi0+ZXFfdGFibGUudWFyX21hcFtpbmRleF0pIHsKQEAgLTkyOCw4ICs5NTcsMTAgQEAKIAllcV9jb250ZXh0ID0gbWFpbGJveC0+YnVmOwogCiAJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgKytpKSB7Ci0JCWVxLT5wYWdlX2xpc3RbaV0uYnVmID0gZG1hX2FsbG9jX2NvaGVyZW50KCZkZXYtPnBkZXYtPmRldiwKLQkJCQkJCQkgIFBBR0VfU0laRSwgJnQsIEdGUF9LRVJORUwpOworCQllcS0+cGFnZV9saXN0W2ldLmJ1ZiA9IGRtYV9hbGxvY19jb2hlcmVudCgmZGV2LT5wZXJzaXN0LT4KKwkJCQkJCQkgIHBkZXYtPmRldiwKKwkJCQkJCQkgIFBBR0VfU0laRSwgJnQsCisJCQkJCQkJICBHRlBfS0VSTkVMKTsKIAkJaWYgKCFlcS0+cGFnZV9saXN0W2ldLmJ1ZikKIAkJCWdvdG8gZXJyX291dF9mcmVlX3BhZ2VzOwogCkBAIC05OTUsNyArMTAyNiw3IEBACiBlcnJfb3V0X2ZyZWVfcGFnZXM6CiAJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgKytpKQogCQlpZiAoZXEtPnBhZ2VfbGlzdFtpXS5idWYpCi0JCQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5wZGV2LT5kZXYsIFBBR0VfU0laRSwKKwkJCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPnBlcnNpc3QtPnBkZXYtPmRldiwgUEFHRV9TSVpFLAogCQkJCQkgIGVxLT5wYWdlX2xpc3RbaV0uYnVmLAogCQkJCQkgIGVxLT5wYWdlX2xpc3RbaV0ubWFwKTsKIApAQCAtMTAxMyw3ICsxMDQ0LDYgQEAKIAkJCSBzdHJ1Y3QgbWx4NF9lcSAqZXEpCiB7CiAJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOwotCXN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94OwogCWludCBlcnI7CiAJaW50IGk7CiAJLyogQ1gzIGlzIGNhcGFibGUgb2YgZXh0ZW5kaW5nIHRoZSBDUUUvRVFFIGZyb20gMzIgdG8gNjQgYnl0ZXMsIHdpdGgKQEAgLTEwMjEsMzYgKzEwNTEsMjEgQEAKIAkgKi8KIAlpbnQgbnBhZ2VzID0gUEFHRV9BTElHTihkZXYtPmNhcHMuZXFlX3NpemUgICogZXEtPm5lbnQpIC8gUEFHRV9TSVpFOwogCi0JbWFpbGJveCA9IG1seDRfYWxsb2NfY21kX21haWxib3goZGV2KTsKLQlpZiAoSVNfRVJSKG1haWxib3gpKQotCQlyZXR1cm47Ci0KLQllcnIgPSBtbHg0X0hXMlNXX0VRKGRldiwgbWFpbGJveCwgZXEtPmVxbik7CisJZXJyID0gbWx4NF9IVzJTV19FUShkZXYsIGVxLT5lcW4pOwogCWlmIChlcnIpCiAJCW1seDRfd2FybihkZXYsICJIVzJTV19FUSBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKIAotCWlmICgwKSB7Ci0JCW1seDRfZGJnKGRldiwgIkR1bXBpbmcgRVEgY29udGV4dCAlMDJ4OlxuIiwgZXEtPmVxbik7Ci0JCWZvciAoaSA9IDA7IGkgPCBzaXplb2YgKHN0cnVjdCBtbHg0X2VxX2NvbnRleHQpIC8gNDsgKytpKSB7Ci0JCQlpZiAoaSAlIDQgPT0gMCkKLQkJCQlwcl9jb250KCJbJTAyeF0gIiwgaSAqIDQpOwotCQkJcHJfY29udCgiICUwOHgiLCBiZTMyX3RvX2NwdXAobWFpbGJveC0+YnVmICsgaSAqIDQpKTsKLQkJCWlmICgoaSArIDEpICUgNCA9PSAwKQotCQkJCXByX2NvbnQoIlxuIik7Ci0JCX0KLQl9CiAJc3luY2hyb25pemVfaXJxKGVxLT5pcnEpOwogCXRhc2tsZXRfZGlzYWJsZSgmZXEtPnRhc2tsZXRfY3R4LnRhc2spOwogCiAJbWx4NF9tdHRfY2xlYW51cChkZXYsICZlcS0+bXR0KTsKIAlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyArK2kpCi0JCWRtYV9mcmVlX2NvaGVyZW50KCZkZXYtPnBkZXYtPmRldiwgUEFHRV9TSVpFLAotCQkJCSAgICBlcS0+cGFnZV9saXN0W2ldLmJ1ZiwKLQkJCQkgICAgZXEtPnBhZ2VfbGlzdFtpXS5tYXApOworCQlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5wZXJzaXN0LT5wZGV2LT5kZXYsIFBBR0VfU0laRSwKKwkJCQkgIGVxLT5wYWdlX2xpc3RbaV0uYnVmLAorCQkJCSAgZXEtPnBhZ2VfbGlzdFtpXS5tYXApOwogCiAJa2ZyZWUoZXEtPnBhZ2VfbGlzdCk7CiAJbWx4NF9iaXRtYXBfZnJlZSgmcHJpdi0+ZXFfdGFibGUuYml0bWFwLCBlcS0+ZXFuLCBNTFg0X1VTRV9SUik7Ci0JbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7CiB9CiAKIHN0YXRpYyB2b2lkIG1seDRfZnJlZV9pcnFzKHN0cnVjdCBtbHg0X2RldiAqZGV2KQpAQCAtMTA2MCw3ICsxMDc1LDcgQEAKIAlpbnQJaSwgdmVjOwogCiAJaWYgKGVxX3RhYmxlLT5oYXZlX2lycSkKLQkJZnJlZV9pcnEoZGV2LT5wZGV2LT5pcnEsIGRldik7CisJCWZyZWVfaXJxKGRldi0+cGVyc2lzdC0+cGRldi0+aXJxLCBkZXYpOwogCiAJZm9yIChpID0gMDsgaSA8IGRldi0+Y2Fwcy5udW1fY29tcF92ZWN0b3JzICsgMTsgKytpKQogCQlpZiAoZXFfdGFibGUtPmVxW2ldLmhhdmVfaXJxKSB7CkBAIC0xMDg5LDcgKzExMDQsOCBAQAogewogCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKIAotCXByaXYtPmNscl9iYXNlID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCBwcml2LT5mdy5jbHJfaW50X2JhcikgKworCXByaXYtPmNscl9iYXNlID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZXJzaXN0LT5wZGV2LAorCQkJCSBwcml2LT5mdy5jbHJfaW50X2JhcikgKwogCQkJCSBwcml2LT5mdy5jbHJfaW50X2Jhc2UsIE1MWDRfQ0xSX0lOVF9TSVpFKTsKIAlpZiAoIXByaXYtPmNscl9iYXNlKSB7CiAJCW1seDRfZXJyKGRldiwgIkNvdWxkbid0IG1hcCBpbnRlcnJ1cHQgY2xlYXIgcmVnaXN0ZXIsIGFib3J0aW5nXG4iKTsKQEAgLTEyMTIsMTMgKzEyMjgsMTMgQEAKIAkJCQkJIGkgKiBNTFg0X0lSUU5BTUVfU0laRSwKIAkJCQkJIE1MWDRfSVJRTkFNRV9TSVpFLAogCQkJCQkgIm1seDQtY29tcC0lZEBwY2k6JXMiLCBpLAotCQkJCQkgcGNpX25hbWUoZGV2LT5wZGV2KSk7CisJCQkJCSBwY2lfbmFtZShkZXYtPnBlcnNpc3QtPnBkZXYpKTsKIAkJCX0gZWxzZSB7CiAJCQkJc25wcmludGYocHJpdi0+ZXFfdGFibGUuaXJxX25hbWVzICsKIAkJCQkJIGkgKiBNTFg0X0lSUU5BTUVfU0laRSwKIAkJCQkJIE1MWDRfSVJRTkFNRV9TSVpFLAogCQkJCQkgIm1seDQtYXN5bmNAcGNpOiVzIiwKLQkJCQkJIHBjaV9uYW1lKGRldi0+cGRldikpOworCQkJCQkgcGNpX25hbWUoZGV2LT5wZXJzaXN0LT5wZGV2KSk7CiAJCQl9CiAKIAkJCWVxX25hbWUgPSBwcml2LT5lcV90YWJsZS5pcnFfbmFtZXMgKwpAQCAtMTIzNSw4ICsxMjUxLDggQEAKIAkJc25wcmludGYocHJpdi0+ZXFfdGFibGUuaXJxX25hbWVzLAogCQkJIE1MWDRfSVJRTkFNRV9TSVpFLAogCQkJIERSVl9OQU1FICJAcGNpOiVzIiwKLQkJCSBwY2lfbmFtZShkZXYtPnBkZXYpKTsKLQkJZXJyID0gcmVxdWVzdF9pcnEoZGV2LT5wZGV2LT5pcnEsIG1seDRfaW50ZXJydXB0LAorCQkJIHBjaV9uYW1lKGRldi0+cGVyc2lzdC0+cGRldikpOworCQllcnIgPSByZXF1ZXN0X2lycShkZXYtPnBlcnNpc3QtPnBkZXYtPmlycSwgbWx4NF9pbnRlcnJ1cHQsCiAJCQkJICBJUlFGX1NIQVJFRCwgcHJpdi0+ZXFfdGFibGUuaXJxX25hbWVzLCBkZXYpOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJfb3V0X2FzeW5jOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9mdy5jCmluZGV4IDk4Mjg2MWQuLjVhMjFlNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZncuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2Z3LmMKQEAgLTg0LDEzICs4NCwxMCBAQAogCQlbIDFdID0gIlVDIHRyYW5zcG9ydCIsCiAJCVsgMl0gPSAiVUQgdHJhbnNwb3J0IiwKIAkJWyAzXSA9ICJYUkMgdHJhbnNwb3J0IiwKLQkJWyA0XSA9ICJyZWxpYWJsZSBtdWx0aWNhc3QiLAotCQlbIDVdID0gIkZDb0lCIHN1cHBvcnQiLAogCQlbIDZdID0gIlNSUSBzdXBwb3J0IiwKIAkJWyA3XSA9ICJJUG9JQiBjaGVja3N1bSBvZmZsb2FkIiwKIAkJWyA4XSA9ICJQX0tleSB2aW9sYXRpb24gY291bnRlciIsCiAJCVsgOV0gPSAiUV9LZXkgdmlvbGF0aW9uIGNvdW50ZXIiLAotCQlbMTBdID0gIlZNTSIsCiAJCVsxMl0gPSAiRHVhbCBQb3J0IERpZmZlcmVudCBQcm90b2NvbCAoRFBEUCkgc3VwcG9ydCIsCiAJCVsxNV0gPSAiQmlnIExTTyBoZWFkZXJzIiwKIAkJWzE2XSA9ICJNVyBzdXBwb3J0IiwKQEAgLTk5LDEyICs5NiwxMSBAQAogCQlbMTldID0gIlJhdyBtdWx0aWNhc3Qgc3VwcG9ydCIsCiAJCVsyMF0gPSAiQWRkcmVzcyB2ZWN0b3IgcG9ydCBjaGVja2luZyBzdXBwb3J0IiwKIAkJWzIxXSA9ICJVRCBtdWx0aWNhc3Qgc3VwcG9ydCIsCi0JCVsyNF0gPSAiRGVtYW5kIHBhZ2luZyBzdXBwb3J0IiwKLQkJWzI1XSA9ICJSb3V0ZXIgc3VwcG9ydCIsCiAJCVszMF0gPSAiSUJvRSBzdXBwb3J0IiwKIAkJWzMyXSA9ICJVbmljYXN0IGxvb3BiYWNrIHN1cHBvcnQiLAogCQlbMzRdID0gIkZDUyBoZWFkZXIgY29udHJvbCIsCi0JCVszOF0gPSAiV2FrZSBPbiBMQU4gc3VwcG9ydCIsCisJCVszN10gPSAiV2FrZSBPbiBMQU4gKHBvcnQxKSBzdXBwb3J0IiwKKwkJWzM4XSA9ICJXYWtlIE9uIExBTiAocG9ydDIpIHN1cHBvcnQiLAogCQlbNDBdID0gIlVEUCBSU1Mgc3VwcG9ydCIsCiAJCVs0MV0gPSAiVW5pY2FzdCBWRVAgc3RlZXJpbmcgc3VwcG9ydCIsCiAJCVs0Ml0gPSAiTXVsdGljYXN0IFZFUCBzdGVlcmluZyBzdXBwb3J0IiwKQEAgLTE0NSw3ICsxNDEsOSBAQAogCQlbMTZdID0gIkNPTkZJRyBERVYgc3VwcG9ydCIsCiAJCVsxN10gPSAiQXN5bW1ldHJpYyBFUXMgc3VwcG9ydCIsCiAJCVsxOF0gPSAiTW9yZSB0aGFuIDgwIFZGcyBzdXBwb3J0IiwKLQkJWzE5XSA9ICJQZXJmb3JtYW5jZSBvcHRpbWl6ZWQgZm9yIGxpbWl0ZWQgcnVsZSBjb25maWd1cmF0aW9uIGZsb3cgc3RlZXJpbmcgc3VwcG9ydCIKKwkJWzE5XSA9ICJQZXJmb3JtYW5jZSBvcHRpbWl6ZWQgZm9yIGxpbWl0ZWQgcnVsZSBjb25maWd1cmF0aW9uIGZsb3cgc3RlZXJpbmcgc3VwcG9ydCIsCisJCVsyMF0gPSAiUmVjb3ZlcmFibGUgZXJyb3IgZXZlbnRzIHN1cHBvcnQiLAorCQlbMjFdID0gIlBvcnQgUmVtYXAgc3VwcG9ydCIKIAl9OwogCWludCBpOwogCkBAIC0yNTksNiArMjU3LDcgQEAKICNkZWZpbmUgUVVFUllfRlVOQ19DQVBfTUNHX1FVT1RBX09GRlNFVF9ERVAJMHgyOAogI2RlZmluZSBRVUVSWV9GVU5DX0NBUF9NQVhfRVFfT0ZGU0VUCQkweDJjCiAjZGVmaW5lIFFVRVJZX0ZVTkNfQ0FQX1JFU0VSVkVEX0VRX09GRlNFVAkweDMwCisjZGVmaW5lIFFVRVJZX0ZVTkNfQ0FQX1FQX1JFU0RfTEtFWV9PRkZTRVQJMHg0OAogCiAjZGVmaW5lIFFVRVJZX0ZVTkNfQ0FQX1FQX1FVT1RBX09GRlNFVAkJMHg1MAogI2RlZmluZSBRVUVSWV9GVU5DX0NBUF9DUV9RVU9UQV9PRkZTRVQJCTB4NTQKQEAgLTI3Myw2ICsyNzIsNyBAQAogI2RlZmluZSBRVUVSWV9GVU5DX0NBUF9GTEFHX1JETUEJCTB4NDAKICNkZWZpbmUgUVVFUllfRlVOQ19DQVBfRkxBR19FVEgJCQkweDgwCiAjZGVmaW5lIFFVRVJZX0ZVTkNfQ0FQX0ZMQUdfUVVPVEFTCQkweDEwCisjZGVmaW5lIFFVRVJZX0ZVTkNfQ0FQX0ZMQUdfUkVTRF9MS0VZCQkweDA4CiAjZGVmaW5lIFFVRVJZX0ZVTkNfQ0FQX0ZMQUdfVkFMSURfTUFJTEJPWAkweDA0CiAKICNkZWZpbmUgUVVFUllfRlVOQ19DQVBfRVhUUkFfRkxBR1NfQkZfUVBfQUxMT0NfRkxBRwkoMVVMIDw8IDMxKQpAQCAtMzQ0LDkgKzM0NCwxMiBAQAogCX0gZWxzZSBpZiAodmhjci0+b3BfbW9kaWZpZXIgPT0gMCkgewogCQlzdHJ1Y3QgbWx4NF9hY3RpdmVfcG9ydHMgYWN0dl9wb3J0cyA9CiAJCQltbHg0X2dldF9hY3RpdmVfcG9ydHMoZGV2LCBzbGF2ZSk7Ci0JCS8qIGVuYWJsZSByZG1hIGFuZCBldGhlcm5ldCBpbnRlcmZhY2VzLCBhbmQgbmV3IHF1b3RhIGxvY2F0aW9ucyAqLworCQkvKiBlbmFibGUgcmRtYSBhbmQgZXRoZXJuZXQgaW50ZXJmYWNlcywgbmV3IHF1b3RhIGxvY2F0aW9ucywKKwkJICogYW5kIHJlc2VydmVkIGxrZXkKKwkJICovCiAJCWZpZWxkID0gKFFVRVJZX0ZVTkNfQ0FQX0ZMQUdfRVRIIHwgUVVFUllfRlVOQ19DQVBfRkxBR19SRE1BIHwKLQkJCSBRVUVSWV9GVU5DX0NBUF9GTEFHX1FVT1RBUyB8IFFVRVJZX0ZVTkNfQ0FQX0ZMQUdfVkFMSURfTUFJTEJPWCk7CisJCQkgUVVFUllfRlVOQ19DQVBfRkxBR19RVU9UQVMgfCBRVUVSWV9GVU5DX0NBUF9GTEFHX1ZBTElEX01BSUxCT1ggfAorCQkJIFFVRVJZX0ZVTkNfQ0FQX0ZMQUdfUkVTRF9MS0VZKTsKIAkJTUxYNF9QVVQob3V0Ym94LT5idWYsIGZpZWxkLCBRVUVSWV9GVU5DX0NBUF9GTEFHU19PRkZTRVQpOwogCiAJCWZpZWxkID0gbWluKApAQCAtNDExLDYgKzQxNCw5IEBACiAJCXNpemUgPSBRVUVSWV9GVU5DX0NBUF9FWFRSQV9GTEFHU19CRl9RUF9BTExPQ19GTEFHIHwKIAkJCVFVRVJZX0ZVTkNfQ0FQX0VYVFJBX0ZMQUdTX0EwX1FQX0FMTE9DX0ZMQUc7CiAJCU1MWDRfUFVUKG91dGJveC0+YnVmLCBzaXplLCBRVUVSWV9GVU5DX0NBUF9FWFRSQV9GTEFHU19PRkZTRVQpOworCisJCXNpemUgPSBkZXYtPmNhcHMucmVzZXJ2ZWRfbGtleSArICgoc2xhdmUgPDwgOCkgJiAweEZGMDApOworCQlNTFg0X1BVVChvdXRib3gtPmJ1Ziwgc2l6ZSwgUVVFUllfRlVOQ19DQVBfUVBfUkVTRF9MS0VZX09GRlNFVCk7CiAJfSBlbHNlCiAJCWVyciA9IC1FSU5WQUw7CiAKQEAgLTUwMyw2ICs1MDksMTMgQEAKIAkJTUxYNF9HRVQoc2l6ZSwgb3V0Ym94LCBRVUVSWV9GVU5DX0NBUF9SRVNFUlZFRF9FUV9PRkZTRVQpOwogCQlmdW5jX2NhcC0+cmVzZXJ2ZWRfZXEgPSBzaXplICYgMHhGRkZGRkY7CiAKKwkJaWYgKGZ1bmNfY2FwLT5mbGFncyAmIFFVRVJZX0ZVTkNfQ0FQX0ZMQUdfUkVTRF9MS0VZKSB7CisJCQlNTFg0X0dFVChzaXplLCBvdXRib3gsIFFVRVJZX0ZVTkNfQ0FQX1FQX1JFU0RfTEtFWV9PRkZTRVQpOworCQkJZnVuY19jYXAtPnJlc2VydmVkX2xrZXkgPSBzaXplOworCQl9IGVsc2UgeworCQkJZnVuY19jYXAtPnJlc2VydmVkX2xrZXkgPSAwOworCQl9CisKIAkJZnVuY19jYXAtPmV4dHJhX2ZsYWdzID0gMDsKIAogCQkvKiBNYWlsYm94IGRhdGEgZnJvbSAweDZjIGFuZCBvbndhcmQgc2hvdWxkIG9ubHkgYmUgdHJlYXRlZCBpZgpAQCAtODUxLDYgKzg2NCw4IEBACiAJCWRldl9jYXAtPmZsYWdzMiB8PSBNTFg0X0RFVl9DQVBfRkxBRzJfRVFFX1NUUklERTsKIAlNTFg0X0dFVChkZXZfY2FwLT5ibW1lX2ZsYWdzLCBvdXRib3gsCiAJCSBRVUVSWV9ERVZfQ0FQX0JNTUVfRkxBR1NfT0ZGU0VUKTsKKwlpZiAoZGV2X2NhcC0+Ym1tZV9mbGFncyAmIE1MWDRfRkxBR19QT1JUX1JFTUFQKQorCQlkZXZfY2FwLT5mbGFnczIgfD0gTUxYNF9ERVZfQ0FQX0ZMQUcyX1BPUlRfUkVNQVA7CiAJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9DT05GSUdfREVWX09GRlNFVCk7CiAJaWYgKGZpZWxkICYgMHgyMCkKIAkJZGV2X2NhcC0+ZmxhZ3MyIHw9IE1MWDRfREVWX0NBUF9GTEFHMl9DT05GSUdfREVWOwpAQCAtODU5LDYgKzg3NCw4IEBACiAJTUxYNF9HRVQoZmllbGQzMiwgb3V0Ym94LCBRVUVSWV9ERVZfQ0FQX0VUSF9CQUNLUExfT0ZGU0VUKTsKIAlpZiAoZmllbGQzMiAmICgxIDw8IDApKQogCQlkZXZfY2FwLT5mbGFnczIgfD0gTUxYNF9ERVZfQ0FQX0ZMQUcyX0VUSF9CQUNLUExfQU5fUkVQOworCWlmIChmaWVsZDMyICYgKDEgPDwgNykpCisJCWRldl9jYXAtPmZsYWdzMiB8PSBNTFg0X0RFVl9DQVBfRkxBRzJfUkVDT1ZFUkFCTEVfRVJST1JfRVZFTlQ7CiAJTUxYNF9HRVQoZmllbGQsIG91dGJveCwgUVVFUllfREVWX0NBUF9GV19SRUFTU0lHTl9NQUMpOwogCWlmIChmaWVsZCAmIDE8PDYpCiAJCWRldl9jYXAtPmZsYWdzMiB8PSBNTFg0X0RFVl9DQVBfRkxBRzJfUkVBU1NJR05fTUFDX0VOOwpAQCAtMTEwNiw5ICsxMTIzLDEwIEBACiAJZmllbGQgJj0gMHg3ZjsKIAlNTFg0X1BVVChvdXRib3gtPmJ1ZiwgZmllbGQsIFFVRVJZX0RFVl9DQVBfQkZfT0ZGU0VUKTsKIAotCS8qIEZvciBndWVzdHMsIGRpc2FibGUgbXcgdHlwZSAyICovCisJLyogRm9yIGd1ZXN0cywgZGlzYWJsZSBtdyB0eXBlIDIgYW5kIHBvcnQgcmVtYXAqLwogCU1MWDRfR0VUKGJtbWVfZmxhZ3MsIG91dGJveC0+YnVmLCBRVUVSWV9ERVZfQ0FQX0JNTUVfRkxBR1NfT0ZGU0VUKTsKIAlibW1lX2ZsYWdzICY9IH5NTFg0X0JNTUVfRkxBR19UWVBFXzJfV0lOOworCWJtbWVfZmxhZ3MgJj0gfk1MWDRfRkxBR19QT1JUX1JFTUFQOwogCU1MWDRfUFVUKG91dGJveC0+YnVmLCBibW1lX2ZsYWdzLCBRVUVSWV9ERVZfQ0FQX0JNTUVfRkxBR1NfT0ZGU0VUKTsKIAogCS8qIHR1cm4gb2ZmIGRldmljZS1tYW5hZ2VkIHN0ZWVyaW5nIGNhcGFiaWxpdHkgaWYgbm90IGVuYWJsZWQgKi8KQEAgLTE1NjIsNiArMTU4MCw3IEBACiAjZGVmaW5lIElOSVRfSENBX1ZYTEFOX09GRlNFVAkJIDB4MGMKICNkZWZpbmUgSU5JVF9IQ0FfQ0FDSEVMSU5FX1NaX09GRlNFVAkgMHgwZQogI2RlZmluZSBJTklUX0hDQV9GTEFHU19PRkZTRVQJCSAweDAxNAorI2RlZmluZSBJTklUX0hDQV9SRUNPVkVSQUJMRV9FUlJPUl9FVkVOVF9PRkZTRVQgMHgwMTgKICNkZWZpbmUgSU5JVF9IQ0FfUVBDX09GRlNFVAkJIDB4MDIwCiAjZGVmaW5lCSBJTklUX0hDQV9RUENfQkFTRV9PRkZTRVQJIChJTklUX0hDQV9RUENfT0ZGU0VUICsgMHgxMCkKICNkZWZpbmUJIElOSVRfSENBX0xPR19RUF9PRkZTRVQJCSAoSU5JVF9IQ0FfUVBDX09GRlNFVCArIDB4MTcpCkBAIC0xNjY4LDYgKzE2ODcsOSBAQAogCQlkZXYtPmNhcHMudXNlcnNwYWNlX2NhcHMgfD0gTUxYNF9VU0VSX0RFVl9DQVBfTEFSR0VfQ1FFOwogCX0KIAorCWlmIChkZXYtPmNhcHMuZmxhZ3MyICYgTUxYNF9ERVZfQ0FQX0ZMQUcyX1JFQ09WRVJBQkxFX0VSUk9SX0VWRU5UKQorCQkqKGluYm94ICsgSU5JVF9IQ0FfUkVDT1ZFUkFCTEVfRVJST1JfRVZFTlRfT0ZGU0VUIC8gNCkgfD0gY3B1X3RvX2JlMzIoMSA8PCAzMSk7CisKIAkvKiBRUEMvRUVDL0NRQy9FUUMvUkRNQVJDIGF0dHJpYnV0ZXMgKi8KIAogCU1MWDRfUFVUKGluYm94LCBwYXJhbS0+cXBjX2Jhc2UsICAgICAgSU5JVF9IQ0FfUVBDX0JBU0VfT0ZGU0VUKTsKQEAgLTE3NTIsOCArMTc3NCw4IEBACiAJCU1MWDRfUFVUKGluYm94LCBwYXJzZXJfcGFyYW1zLAlJTklUX0hDQV9WWExBTl9PRkZTRVQpOwogCX0KIAotCWVyciA9IG1seDRfY21kKGRldiwgbWFpbGJveC0+ZG1hLCAwLCAwLCBNTFg0X0NNRF9JTklUX0hDQSwgMTAwMDAsCi0JCSAgICAgICBNTFg0X0NNRF9OQVRJVkUpOworCWVyciA9IG1seDRfY21kKGRldiwgbWFpbGJveC0+ZG1hLCAwLCAwLCBNTFg0X0NNRF9JTklUX0hDQSwKKwkJICAgICAgIE1MWDRfQ01EX1RJTUVfQ0xBU1NfQywgTUxYNF9DTURfTkFUSVZFKTsKIAogCWlmIChlcnIpCiAJCW1seDRfZXJyKGRldiwgIklOSVRfSENBIHJldHVybnMgJWRcbiIsIGVycik7CkBAIC0xODc5LDYgKzE5MDEsMzYgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IG1seDRfaGNhX2NvcmVfY2xvY2tfdXBkYXRlKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94OworCV9fYmUzMiAqb3V0Ym94OworCWludCBlcnI7CisKKwltYWlsYm94ID0gbWx4NF9hbGxvY19jbWRfbWFpbGJveChkZXYpOworCWlmIChJU19FUlIobWFpbGJveCkpIHsKKwkJbWx4NF93YXJuKGRldiwgImhjYV9jb3JlX2Nsb2NrIG1haWxib3ggYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gUFRSX0VSUihtYWlsYm94KTsKKwl9CisJb3V0Ym94ID0gbWFpbGJveC0+YnVmOworCisJZXJyID0gbWx4NF9jbWRfYm94KGRldiwgMCwgbWFpbGJveC0+ZG1hLCAwLCAwLAorCQkJICAgTUxYNF9DTURfUVVFUllfSENBLAorCQkJICAgTUxYNF9DTURfVElNRV9DTEFTU19CLAorCQkJICAgIW1seDRfaXNfc2xhdmUoZGV2KSk7CisJaWYgKGVycikgeworCQltbHg0X3dhcm4oZGV2LCAiaGNhX2NvcmVfY2xvY2sgdXBkYXRlIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCU1MWDRfR0VUKGRldi0+Y2Fwcy5oY2FfY29yZV9jbG9jaywgb3V0Ym94LCBRVUVSWV9IQ0FfQ09SRV9DTE9DS19PRkZTRVQpOworCitvdXQ6CisJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7CisKKwlyZXR1cm4gZXJyOworfQorCiAvKiBmb3IgSUItdHlwZSBwb3J0cyBvbmx5IGluIFNSSU9WIG1vZGUuIENoZWNrcyB0aGF0IGJvdGggcHJveHkgUVAwCiAgKiBhbmQgcmVhbCBRUDAgYXJlIGFjdGl2ZSwgc28gdGhhdCB0aGUgcGFyYXZpcnR1YWxpemVkIFFQMCBpcyByZWFkeQogICogdG8gb3BlcmF0ZSAqLwpAQCAtMTk4Myw2ICsyMDM1LDkgQEAKIAkJZXJyID0gbWx4NF9jbWQoZGV2LCAwLCBwb3J0LCAwLCBNTFg0X0NNRF9JTklUX1BPUlQsCiAJCQkgICAgICAgTUxYNF9DTURfVElNRV9DTEFTU19BLCBNTFg0X0NNRF9XUkFQUEVEKTsKIAorCWlmICghZXJyKQorCQltbHg0X2hjYV9jb3JlX2Nsb2NrX3VwZGF0ZShkZXYpOworCiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1seDRfSU5JVF9QT1JUKTsKQEAgLTIwMDcsNyArMjA2Miw3IEBACiAJaWYgKGRldi0+Y2Fwcy5wb3J0X21hc2tbcG9ydF0gIT0gTUxYNF9QT1JUX1RZUEVfSUIpIHsKIAkJaWYgKHByaXYtPm1mdW5jLm1hc3Rlci5pbml0X3BvcnRfcmVmW3BvcnRdID09IDEpIHsKIAkJCWVyciA9IG1seDRfY21kKGRldiwgMCwgcG9ydCwgMCwgTUxYNF9DTURfQ0xPU0VfUE9SVCwKLQkJCQkgICAgICAgMTAwMCwgTUxYNF9DTURfTkFUSVZFKTsKKwkJCQkgICAgICAgTUxYNF9DTURfVElNRV9DTEFTU19BLCBNTFg0X0NNRF9OQVRJVkUpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9CkBAIC0yMDE4LDcgKzIwNzMsNyBAQAogCQkJaWYgKCFwcml2LT5tZnVuYy5tYXN0ZXIucXAwX3N0YXRlW3BvcnRdLnFwMF9hY3RpdmUgJiYKIAkJCSAgICBwcml2LT5tZnVuYy5tYXN0ZXIucXAwX3N0YXRlW3BvcnRdLnBvcnRfYWN0aXZlKSB7CiAJCQkJZXJyID0gbWx4NF9jbWQoZGV2LCAwLCBwb3J0LCAwLCBNTFg0X0NNRF9DTE9TRV9QT1JULAotCQkJCQkgICAgICAgMTAwMCwgTUxYNF9DTURfTkFUSVZFKTsKKwkJCQkJICAgICAgIE1MWDRfQ01EX1RJTUVfQ0xBU1NfQSwgTUxYNF9DTURfTkFUSVZFKTsKIAkJCQlpZiAoZXJyKQogCQkJCQlyZXR1cm4gZXJyOwogCQkJCXByaXYtPm1mdW5jLm1hc3Rlci5zbGF2ZV9zdGF0ZVtzbGF2ZV0uaW5pdF9wb3J0X21hc2sgJj0gfigxIDw8IHBvcnQpOwpAQCAtMjAzMywxNSArMjA4OCwxNSBAQAogCiBpbnQgbWx4NF9DTE9TRV9QT1JUKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgcG9ydCkKIHsKLQlyZXR1cm4gbWx4NF9jbWQoZGV2LCAwLCBwb3J0LCAwLCBNTFg0X0NNRF9DTE9TRV9QT1JULCAxMDAwLAotCQkJTUxYNF9DTURfV1JBUFBFRCk7CisJcmV0dXJuIG1seDRfY21kKGRldiwgMCwgcG9ydCwgMCwgTUxYNF9DTURfQ0xPU0VfUE9SVCwKKwkJCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQSwgTUxYNF9DTURfV1JBUFBFRCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtbHg0X0NMT1NFX1BPUlQpOwogCiBpbnQgbWx4NF9DTE9TRV9IQ0Eoc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBwYW5pYykKIHsKLQlyZXR1cm4gbWx4NF9jbWQoZGV2LCAwLCAwLCBwYW5pYywgTUxYNF9DTURfQ0xPU0VfSENBLCAxMDAwLAotCQkJTUxYNF9DTURfTkFUSVZFKTsKKwlyZXR1cm4gbWx4NF9jbWQoZGV2LCAwLCAwLCBwYW5pYywgTUxYNF9DTURfQ0xPU0VfSENBLAorCQkJTUxYNF9DTURfVElNRV9DTEFTU19DLCBNTFg0X0NNRF9OQVRJVkUpOwogfQogCiBzdHJ1Y3QgbWx4NF9jb25maWdfZGV2IHsKQEAgLTIwNDksMTMgKzIxMDQsMTYgQEAKIAlfX2JlMzIJcnN2ZDFbM107CiAJX19iZTE2CXZ4bGFuX3VkcF9kcG9ydDsKIAlfX2JlMTYJcnN2ZDI7Ci0JX19iZTMyCXJzdmQzWzI3XTsKLQlfX2JlMTYJcnN2ZDQ7Ci0JdTgJcnN2ZDU7CisJX19iZTMyCXJzdmQzOworCV9fYmUzMglyb2NlX2ZsYWdzOworCV9fYmUzMglyc3ZkNFsyNV07CisJX19iZTE2CXJzdmQ1OworCXU4CXJzdmQ2OwogCXU4CXJ4X2NoZWNrc3VtX3ZhbDsKIH07CiAKICNkZWZpbmUgTUxYNF9WWExBTl9VRFBfRFBPUlQgKDEgPDwgMCkKKyNkZWZpbmUgTUxYNF9ESVNBQkxFX1JYX1BPUlQgQklUKDE4KQogCiBzdGF0aWMgaW50IG1seDRfQ09ORklHX0RFVl9zZXQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X2NvbmZpZ19kZXYgKmNvbmZpZ19kZXYpCiB7CkBAIC0yMTExLDcgKzIxNjksNyBAQAogaW50IG1seDRfY29uZmlnX2Rldl9yZXRyaWV2YWwoc3RydWN0IG1seDRfZGV2ICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgbWx4NF9jb25maWdfZGV2X3BhcmFtcyAqcGFyYW1zKQogewotCXN0cnVjdCBtbHg0X2NvbmZpZ19kZXYgY29uZmlnX2RldjsKKwlzdHJ1Y3QgbWx4NF9jb25maWdfZGV2IGNvbmZpZ19kZXYgPSB7MH07CiAJaW50IGVycjsKIAl1OCBjc3VtX21hc2s7CiAKQEAgLTIxNTgsNiArMjIxNiw0NSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9jb25maWdfdnhsYW5fcG9ydCk7CiAKKyNkZWZpbmUgQ09ORklHX0RJU0FCTEVfUlhfUE9SVCBCSVQoMTUpCitpbnQgbWx4NF9kaXNhYmxlX3J4X3BvcnRfY2hlY2soc3RydWN0IG1seDRfZGV2ICpkZXYsIGJvb2wgZGlzKQoreworCXN0cnVjdCBtbHg0X2NvbmZpZ19kZXYgY29uZmlnX2RldjsKKworCW1lbXNldCgmY29uZmlnX2RldiwgMCwgc2l6ZW9mKGNvbmZpZ19kZXYpKTsKKwljb25maWdfZGV2LnVwZGF0ZV9mbGFncyA9IGNwdV90b19iZTMyKE1MWDRfRElTQUJMRV9SWF9QT1JUKTsKKwlpZiAoZGlzKQorCQljb25maWdfZGV2LnJvY2VfZmxhZ3MgPQorCQkJY3B1X3RvX2JlMzIoQ09ORklHX0RJU0FCTEVfUlhfUE9SVCk7CisKKwlyZXR1cm4gbWx4NF9DT05GSUdfREVWX3NldChkZXYsICZjb25maWdfZGV2KTsKK30KKworaW50IG1seDRfdmlydDJwaHlfcG9ydF9tYXAoc3RydWN0IG1seDRfZGV2ICpkZXYsIHUzMiBwb3J0MSwgdTMyIHBvcnQyKQoreworCXN0cnVjdCBtbHg0X2NtZF9tYWlsYm94ICptYWlsYm94OworCXN0cnVjdCB7CisJCV9fYmUzMiB2X3BvcnQxOworCQlfX2JlMzIgdl9wb3J0MjsKKwl9ICp2MnA7CisJaW50IGVycjsKKworCW1haWxib3ggPSBtbHg0X2FsbG9jX2NtZF9tYWlsYm94KGRldik7CisJaWYgKElTX0VSUihtYWlsYm94KSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl2MnAgPSBtYWlsYm94LT5idWY7CisJdjJwLT52X3BvcnQxID0gY3B1X3RvX2JlMzIocG9ydDEpOworCXYycC0+dl9wb3J0MiA9IGNwdV90b19iZTMyKHBvcnQyKTsKKworCWVyciA9IG1seDRfY21kKGRldiwgbWFpbGJveC0+ZG1hLCAwLAorCQkgICAgICAgTUxYNF9TRVRfUE9SVF9WSVJUMlBIWSwgTUxYNF9DTURfVklSVF9QT1JUX01BUCwKKwkJICAgICAgIE1MWDRfQ01EX1RJTUVfQ0xBU1NfQiwgTUxYNF9DTURfTkFUSVZFKTsKKworCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYsIG1haWxib3gpOworCXJldHVybiBlcnI7Cit9CisKIAogaW50IG1seDRfU0VUX0lDTV9TSVpFKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1NjQgaWNtX3NpemUsIHU2NCAqYXV4X3BhZ2VzKQogewpAQCAtMjE4MCw3ICsyMjc3LDggQEAKIGludCBtbHg0X05PUChzdHJ1Y3QgbWx4NF9kZXYgKmRldikKIHsKIAkvKiBJbnB1dCBtb2RpZmllciBvZiAweDFmIG1lYW5zICJmaW5pc2ggYXMgc29vbiBhcyBwb3NzaWJsZS4iICovCi0JcmV0dXJuIG1seDRfY21kKGRldiwgMCwgMHgxZiwgMCwgTUxYNF9DTURfTk9QLCAxMDAsIE1MWDRfQ01EX05BVElWRSk7CisJcmV0dXJuIG1seDRfY21kKGRldiwgMCwgMHgxZiwgMCwgTUxYNF9DTURfTk9QLCBNTFg0X0NNRF9USU1FX0NMQVNTX0EsCisJCQlNTFg0X0NNRF9OQVRJVkUpOwogfQogCiBpbnQgbWx4NF9nZXRfcGh5c19wb3J0X2lkKHN0cnVjdCBtbHg0X2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9mdy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9mdy5oCmluZGV4IDYyNTYyYjYuLmY0NGY3ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvZncuaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2Z3LmgKQEAgLTE0Nyw2ICsxNDcsNyBAQAogCXUzMglxcDBfcHJveHlfcXBuOwogCXUzMglxcDFfdHVubmVsX3FwbjsKIAl1MzIJcXAxX3Byb3h5X3FwbjsKKwl1MzIJcmVzZXJ2ZWRfbGtleTsKIAl1OAlwaHlzaWNhbF9wb3J0OwogCXU4CXBvcnRfZmxhZ3M7CiAJdTgJZmxhZ3MxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9pY20uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvaWNtLmMKaW5kZXggOTdjOWIxZC4uMmE5ZGQ0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9pY20uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2ljbS5jCkBAIC01Niw3ICs1Niw3IEBACiAJaW50IGk7CiAKIAlpZiAoY2h1bmstPm5zZyA+IDApCi0JCXBjaV91bm1hcF9zZyhkZXYtPnBkZXYsIGNodW5rLT5tZW0sIGNodW5rLT5ucGFnZXMsCisJCXBjaV91bm1hcF9zZyhkZXYtPnBlcnNpc3QtPnBkZXYsIGNodW5rLT5tZW0sIGNodW5rLT5ucGFnZXMsCiAJCQkgICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY2h1bmstPm5wYWdlczsgKytpKQpAQCAtNjksNyArNjksOCBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGNodW5rLT5ucGFnZXM7ICsraSkKLQkJZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+cGRldi0+ZGV2LCBjaHVuay0+bWVtW2ldLmxlbmd0aCwKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+cGVyc2lzdC0+cGRldi0+ZGV2LAorCQkJCSAgY2h1bmstPm1lbVtpXS5sZW5ndGgsCiAJCQkJICBsb3dtZW1fcGFnZV9hZGRyZXNzKHNnX3BhZ2UoJmNodW5rLT5tZW1baV0pKSwKIAkJCQkgIHNnX2RtYV9hZGRyZXNzKCZjaHVuay0+bWVtW2ldKSk7CiB9CkBAIC0xNzMsNyArMTc0LDcgQEAKIAkJCS0tY3VyX29yZGVyOwogCiAJCWlmIChjb2hlcmVudCkKLQkJCXJldCA9IG1seDRfYWxsb2NfaWNtX2NvaGVyZW50KCZkZXYtPnBkZXYtPmRldiwKKwkJCXJldCA9IG1seDRfYWxsb2NfaWNtX2NvaGVyZW50KCZkZXYtPnBlcnNpc3QtPnBkZXYtPmRldiwKIAkJCQkJCSAgICAgICZjaHVuay0+bWVtW2NodW5rLT5ucGFnZXNdLAogCQkJCQkJICAgICAgY3VyX29yZGVyLCBnZnBfbWFzayk7CiAJCWVsc2UKQEAgLTE5Myw3ICsxOTQsNyBAQAogCQlpZiAoY29oZXJlbnQpCiAJCQkrK2NodW5rLT5uc2c7CiAJCWVsc2UgaWYgKGNodW5rLT5ucGFnZXMgPT0gTUxYNF9JQ01fQ0hVTktfTEVOKSB7Ci0JCQljaHVuay0+bnNnID0gcGNpX21hcF9zZyhkZXYtPnBkZXYsIGNodW5rLT5tZW0sCisJCQljaHVuay0+bnNnID0gcGNpX21hcF9zZyhkZXYtPnBlcnNpc3QtPnBkZXYsIGNodW5rLT5tZW0sCiAJCQkJCQljaHVuay0+bnBhZ2VzLAogCQkJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIApAQCAtMjA4LDcgKzIwOSw3IEBACiAJfQogCiAJaWYgKCFjb2hlcmVudCAmJiBjaHVuaykgewotCQljaHVuay0+bnNnID0gcGNpX21hcF9zZyhkZXYtPnBkZXYsIGNodW5rLT5tZW0sCisJCWNodW5rLT5uc2cgPSBwY2lfbWFwX3NnKGRldi0+cGVyc2lzdC0+cGRldiwgY2h1bmstPm1lbSwKIAkJCQkJY2h1bmstPm5wYWdlcywKIAkJCQkJUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9pbnRmLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2ludGYuYwppbmRleCAxMTY4OTVhLi42ZmNlNTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2ludGYuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2ludGYuYwpAQCAtMzMsMTEgKzMzLDEzIEBACiAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAogI2luY2x1ZGUgIm1seDQuaCIKIAogc3RydWN0IG1seDRfZGV2aWNlX2NvbnRleHQgewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWJvbmRfbGlzdDsKIAlzdHJ1Y3QgbWx4NF9pbnRlcmZhY2UgICppbnRmOwogCXZvaWQJCSAgICAgICAqY29udGV4dDsKIH07CkBAIC0xMTUsNiArMTE3LDU4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtbHg0X3VucmVnaXN0ZXJfaW50ZXJmYWNlKTsKIAoraW50IG1seDRfZG9fYm9uZChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXN0cnVjdCBtbHg0X2RldmljZV9jb250ZXh0ICpkZXZfY3R4ID0gTlVMTCwgKnRlbXBfZGV2X2N0eDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisJTElTVF9IRUFEKGJvbmRfbGlzdCk7CisKKwlpZiAoIShkZXYtPmNhcHMuZmxhZ3MyICYgTUxYNF9ERVZfQ0FQX0ZMQUcyX1BPUlRfUkVNQVApKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCisJcmV0ID0gbWx4NF9kaXNhYmxlX3J4X3BvcnRfY2hlY2soZGV2LCBlbmFibGUpOworCWlmIChyZXQpIHsKKwkJbWx4NF9lcnIoZGV2LCAiRmFpbCB0byAlcyByeCBwb3J0IGNoZWNrXG4iLAorCQkJIGVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKGVuYWJsZSkgeworCQlkZXYtPmZsYWdzIHw9IE1MWDRfRkxBR19CT05ERUQ7CisJfSBlbHNlIHsKKwkJIHJldCA9IG1seDRfdmlydDJwaHlfcG9ydF9tYXAoZGV2LCAxLCAyKTsKKwkJaWYgKHJldCkgeworCQkJbWx4NF9lcnIoZGV2LCAiRmFpbCB0byByZXNldCBwb3J0IG1hcFxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWRldi0+ZmxhZ3MgJj0gfk1MWDRfRkxBR19CT05ERUQ7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmN0eF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldl9jdHgsIHRlbXBfZGV2X2N0eCwgJnByaXYtPmN0eF9saXN0LCBsaXN0KSB7CisJCWlmIChkZXZfY3R4LT5pbnRmLT5mbGFncyAmIE1MWDRfSU5URkZfQk9ORElORykgeworCQkJbGlzdF9hZGRfdGFpbCgmZGV2X2N0eC0+Ym9uZF9saXN0LCAmYm9uZF9saXN0KTsKKwkJCWxpc3RfZGVsKCZkZXZfY3R4LT5saXN0KTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5jdHhfbG9jaywgZmxhZ3MpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXZfY3R4LCAmYm9uZF9saXN0LCBib25kX2xpc3QpIHsKKwkJZGV2X2N0eC0+aW50Zi0+cmVtb3ZlKGRldiwgZGV2X2N0eC0+Y29udGV4dCk7CisJCWRldl9jdHgtPmNvbnRleHQgPSAgZGV2X2N0eC0+aW50Zi0+YWRkKGRldik7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmN0eF9sb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJmRldl9jdHgtPmxpc3QsICZwcml2LT5jdHhfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmN0eF9sb2NrLCBmbGFncyk7CisKKwkJbWx4NF9kYmcoZGV2LCAiSW5yZXJmYWNlIGZvciBwcm90b2NvbCAlZCByZXN0YXJ0ZWQgd2l0aCB3aGVuIGJvbmRlZCBtb2RlIGlzICVzXG4iLAorCQkJIGRldl9jdHgtPmludGYtPnByb3RvY29sLCBlbmFibGUgPworCQkJICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCX0KKwlyZXR1cm4gMDsKK30KKwogdm9pZCBtbHg0X2Rpc3BhdGNoX2V2ZW50KHN0cnVjdCBtbHg0X2RldiAqZGV2LCBlbnVtIG1seDRfZGV2X2V2ZW50IHR5cGUsCiAJCQkgdW5zaWduZWQgbG9uZyBwYXJhbSkKIHsKQEAgLTEzOCwxMyArMTkyLDEzIEBACiAKIAltdXRleF9sb2NrKCZpbnRmX211dGV4KTsKIAorCWRldi0+cGVyc2lzdC0+aW50ZXJmYWNlX3N0YXRlIHw9IE1MWDRfSU5URVJGQUNFX1NUQVRFX1VQOwogCWxpc3RfYWRkX3RhaWwoJnByaXYtPmRldl9saXN0LCAmZGV2X2xpc3QpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaW50ZiwgJmludGZfbGlzdCwgbGlzdCkKIAkJbWx4NF9hZGRfZGV2aWNlKGludGYsIHByaXYpOwogCiAJbXV0ZXhfdW5sb2NrKCZpbnRmX211dGV4KTsKLQlpZiAoIW1seDRfaXNfc2xhdmUoZGV2KSkKLQkJbWx4NF9zdGFydF9jYXRhc19wb2xsKGRldik7CisJbWx4NF9zdGFydF9jYXRhc19wb2xsKGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1NCwxNCArMjA4LDE0IEBACiAJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOwogCXN0cnVjdCBtbHg0X2ludGVyZmFjZSAqaW50ZjsKIAotCWlmICghbWx4NF9pc19zbGF2ZShkZXYpKQotCQltbHg0X3N0b3BfY2F0YXNfcG9sbChkZXYpOworCW1seDRfc3RvcF9jYXRhc19wb2xsKGRldik7CiAJbXV0ZXhfbG9jaygmaW50Zl9tdXRleCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGludGYsICZpbnRmX2xpc3QsIGxpc3QpCiAJCW1seDRfcmVtb3ZlX2RldmljZShpbnRmLCBwcml2KTsKIAogCWxpc3RfZGVsKCZwcml2LT5kZXZfbGlzdCk7CisJZGV2LT5wZXJzaXN0LT5pbnRlcmZhY2Vfc3RhdGUgJj0gfk1MWDRfSU5URVJGQUNFX1NUQVRFX1VQOwogCiAJbXV0ZXhfdW5sb2NrKCZpbnRmX211dGV4KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tYWluLmMKaW5kZXggNmUwODM1Mi4uN2U0ODcyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tYWluLmMKQEAgLTEwOCw2ICsxMDgsOCBAQAogCQkJCQkgTUxYNF9GVU5DX0NBUF9FUUVfQ1FFX1NUUklERSB8IFwKIAkJCQkJIE1MWDRfRlVOQ19DQVBfRE1GU19BMF9TVEFUSUMpCiAKKyNkZWZpbmUgUkVTRVRfUEVSU0lTVF9NQVNLX0ZMQUdTCShNTFg0X0ZMQUdfU1JJT1YpCisKIHN0YXRpYyBjaGFyIG1seDRfdmVyc2lvbltdID0KIAlEUlZfTkFNRSAiOiBNZWxsYW5veCBDb25uZWN0WCBjb3JlIGRyaXZlciB2IgogCURSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIilcbiI7CkBAIC0yNDksNyArMjUxLDggQEAKIAkJaWYgKG1seDRfaXNfbWFzdGVyKGRldikpCiAJCQlkZXZfY2FwLT5mdW5jdGlvbl9jYXBzIHw9IE1MWDRfRlVOQ19DQVBfRVFFX0NRRV9TVFJJREU7CiAJfSBlbHNlIHsKLQkJbWx4NF9kYmcoZGV2LCAiRGlzYWJsaW5nIENRRSBzdHJpZGUgY2FjaGVMaW5lIHVuc3VwcG9ydGVkXG4iKTsKKwkJaWYgKGNhY2hlX2xpbmVfc2l6ZSgpICE9IDMyICAmJiBjYWNoZV9saW5lX3NpemUoKSAhPSA2NCkKKwkJCW1seDRfZGJnKGRldiwgIkRpc2FibGluZyBDUUUgc3RyaWRlLCBjYWNoZUxpbmUgc2l6ZSB1bnN1cHBvcnRlZFxuIik7CiAJCWRldl9jYXAtPmZsYWdzMiAmPSB+TUxYNF9ERVZfQ0FQX0ZMQUcyX0NRRV9TVFJJREU7CiAJCWRldl9jYXAtPmZsYWdzMiAmPSB+TUxYNF9ERVZfQ0FQX0ZMQUcyX0VRRV9TVFJJREU7CiAJfQpAQCAtMzE4LDEwICszMjEsMTEgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKGRldl9jYXAtPnVhcl9zaXplID4gcGNpX3Jlc291cmNlX2xlbihkZXYtPnBkZXYsIDIpKSB7CisJaWYgKGRldl9jYXAtPnVhcl9zaXplID4gcGNpX3Jlc291cmNlX2xlbihkZXYtPnBlcnNpc3QtPnBkZXYsIDIpKSB7CiAJCW1seDRfZXJyKGRldiwgIkhDQSByZXBvcnRlZCBVQVIgc2l6ZSBvZiAweCV4IGJpZ2dlciB0aGFuIFBDSSByZXNvdXJjZSAyIHNpemUgb2YgMHglbGx4LCBhYm9ydGluZ1xuIiwKIAkJCSBkZXZfY2FwLT51YXJfc2l6ZSwKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMikpOworCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBlcnNpc3QtPnBkZXYsIDIpKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC01NDEsOCArNTQ1LDEwIEBACiAJKnNwZWVkID0gUENJX1NQRUVEX1VOS05PV047CiAJKndpZHRoID0gUENJRV9MTktfV0lEVEhfVU5LTk9XTjsKIAotCWVycjEgPSBwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChkZXYtPnBkZXYsIFBDSV9FWFBfTE5LQ0FQLCAmbG5rY2FwMSk7Ci0JZXJyMiA9IHBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKGRldi0+cGRldiwgUENJX0VYUF9MTktDQVAyLCAmbG5rY2FwMik7CisJZXJyMSA9IHBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKGRldi0+cGVyc2lzdC0+cGRldiwgUENJX0VYUF9MTktDQVAsCisJCQkJCSAgJmxua2NhcDEpOworCWVycjIgPSBwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChkZXYtPnBlcnNpc3QtPnBkZXYsIFBDSV9FWFBfTE5LQ0FQMiwKKwkJCQkJICAmbG5rY2FwMik7CiAJaWYgKCFlcnIyICYmIGxua2NhcDIpIHsgLyogUENJZSByMy4wLWNvbXBsaWFudCAqLwogCQlpZiAobG5rY2FwMiAmIFBDSV9FWFBfTE5LQ0FQMl9TTFNfOF8wR0IpCiAJCQkqc3BlZWQgPSBQQ0lFX1NQRUVEXzhfMEdUOwpAQCAtNTg3LDcgKzU5Myw3IEBACiAJCXJldHVybjsKIAl9CiAKLQllcnIgPSBwY2llX2dldF9taW5pbXVtX2xpbmsoZGV2LT5wZGV2LCAmc3BlZWQsICZ3aWR0aCk7CisJZXJyID0gcGNpZV9nZXRfbWluaW11bV9saW5rKGRldi0+cGVyc2lzdC0+cGRldiwgJnNwZWVkLCAmd2lkdGgpOwogCWlmIChlcnIgfHwgc3BlZWQgPT0gUENJX1NQRUVEX1VOS05PV04gfHwKIAkgICAgd2lkdGggPT0gUENJRV9MTktfV0lEVEhfVU5LTk9XTikgewogCQltbHg0X3dhcm4oZGV2LApAQCAtNzkyLDYgKzc5OCw3IEBACiAJZGV2LT5jYXBzLm51bV9tcHRzCQk9IDEgPDwgaGNhX3BhcmFtLmxvZ19tcHRfc3o7CiAJZGV2LT5jYXBzLm51bV9lcXMJCT0gZnVuY19jYXAubWF4X2VxOwogCWRldi0+Y2Fwcy5yZXNlcnZlZF9lcXMJCT0gZnVuY19jYXAucmVzZXJ2ZWRfZXE7CisJZGV2LT5jYXBzLnJlc2VydmVkX2xrZXkJCT0gZnVuY19jYXAucmVzZXJ2ZWRfbGtleTsKIAlkZXYtPmNhcHMubnVtX3BkcyAgICAgICAgICAgICAgID0gTUxYNF9OVU1fUERTOwogCWRldi0+Y2Fwcy5udW1fbWdtcyAgICAgICAgICAgICAgPSAwOwogCWRldi0+Y2Fwcy5udW1fYW1nbXMgICAgICAgICAgICAgPSAwOwpAQCAtODM3LDEwICs4NDQsMTIgQEAKIAogCWlmIChkZXYtPmNhcHMudWFyX3BhZ2Vfc2l6ZSAqIChkZXYtPmNhcHMubnVtX3VhcnMgLQogCQkJCSAgICAgICBkZXYtPmNhcHMucmVzZXJ2ZWRfdWFycykgPgotCQkJCSAgICAgICBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMikpIHsKKwkJCQkgICAgICAgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBlcnNpc3QtPnBkZXYsCisJCQkJCQkJMikpIHsKIAkJbWx4NF9lcnIoZGV2LCAiSENBIHJlcG9ydGVkIFVBUiByZWdpb24gc2l6ZSBvZiAweCV4IGJpZ2dlciB0aGFuIFBDSSByZXNvdXJjZSAyIHNpemUgb2YgMHglbGx4LCBhYm9ydGluZ1xuIiwKIAkJCSBkZXYtPmNhcHMudWFyX3BhZ2Vfc2l6ZSAqIGRldi0+Y2Fwcy5udW1fdWFycywKLQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMikpOworCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkgcGNpX3Jlc291cmNlX2xlbihkZXYtPnBlcnNpc3QtPnBkZXYsIDIpKTsKIAkJZ290byBlcnJfbWVtOwogCX0KIApAQCAtMTE1Miw2ICsxMTYxLDkxIEBACiAJcmV0dXJuIGVyciA/IGVyciA6IGNvdW50OwogfQogCitpbnQgbWx4NF9ib25kKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKworCW11dGV4X2xvY2soJnByaXYtPmJvbmRfbXV0ZXgpOworCisJaWYgKCFtbHg0X2lzX2JvbmRlZChkZXYpKQorCQlyZXQgPSBtbHg0X2RvX2JvbmQoZGV2LCB0cnVlKTsKKwllbHNlCisJCXJldCA9IDA7CisKKwltdXRleF91bmxvY2soJnByaXYtPmJvbmRfbXV0ZXgpOworCWlmIChyZXQpCisJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBib25kIGRldmljZTogJWRcbiIsIHJldCk7CisJZWxzZQorCQltbHg0X2RiZyhkZXYsICJEZXZpY2UgaXMgYm9uZGVkXG4iKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9ib25kKTsKKworaW50IG1seDRfdW5ib25kKHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKworCW11dGV4X2xvY2soJnByaXYtPmJvbmRfbXV0ZXgpOworCisJaWYgKG1seDRfaXNfYm9uZGVkKGRldikpCisJCXJldCA9IG1seDRfZG9fYm9uZChkZXYsIGZhbHNlKTsKKworCW11dGV4X3VubG9jaygmcHJpdi0+Ym9uZF9tdXRleCk7CisJaWYgKHJldCkKKwkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIHVuYm9uZCBkZXZpY2U6ICVkXG4iLCByZXQpOworCWVsc2UKKwkJbWx4NF9kYmcoZGV2LCAiRGV2aWNlIGlzIHVuYm9uZGVkXG4iKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwobWx4NF91bmJvbmQpOworCisKK2ludCBtbHg0X3BvcnRfbWFwX3NldChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgc3RydWN0IG1seDRfcG9ydF9tYXAgKnYycCkKK3sKKwl1OCBwb3J0MSA9IHYycC0+cG9ydDE7CisJdTggcG9ydDIgPSB2MnAtPnBvcnQyOworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwlpbnQgZXJyOworCisJaWYgKCEoZGV2LT5jYXBzLmZsYWdzMiAmIE1MWDRfREVWX0NBUF9GTEFHMl9QT1JUX1JFTUFQKSkKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKworCW11dGV4X2xvY2soJnByaXYtPmJvbmRfbXV0ZXgpOworCisJLyogemVybyBtZWFucyBrZWVwIGN1cnJlbnQgbWFwcGluZyBmb3IgdGhpcyBwb3J0ICovCisJaWYgKHBvcnQxID09IDApCisJCXBvcnQxID0gcHJpdi0+djJwLnBvcnQxOworCWlmIChwb3J0MiA9PSAwKQorCQlwb3J0MiA9IHByaXYtPnYycC5wb3J0MjsKKworCWlmICgocG9ydDEgPCAxKSB8fCAocG9ydDEgPiBNTFg0X01BWF9QT1JUUykgfHwKKwkgICAgKHBvcnQyIDwgMSkgfHwgKHBvcnQyID4gTUxYNF9NQVhfUE9SVFMpIHx8CisJICAgIChwb3J0MSA9PSAyICYmIHBvcnQyID09IDEpKSB7CisJCS8qIGJlc2lkZXMgYm91bmRhcnkgY2hlY2tzIGNyb3NzIG1hcHBpbmcgbWFrZXMKKwkJICogbm8gc2Vuc2UgYW5kIHRoZXJlZm9yZSBub3QgYWxsb3dlZCAqLworCQllcnIgPSAtRUlOVkFMOworCX0gZWxzZSBpZiAoKHBvcnQxID09IHByaXYtPnYycC5wb3J0MSkgJiYKKwkJIChwb3J0MiA9PSBwcml2LT52MnAucG9ydDIpKSB7CisJCWVyciA9IDA7CisJfSBlbHNlIHsKKwkJZXJyID0gbWx4NF92aXJ0MnBoeV9wb3J0X21hcChkZXYsIHBvcnQxLCBwb3J0Mik7CisJCWlmICghZXJyKSB7CisJCQltbHg0X2RiZyhkZXYsICJwb3J0IG1hcCBjaGFuZ2VkOiBbJWRdWyVkXVxuIiwKKwkJCQkgcG9ydDEsIHBvcnQyKTsKKwkJCXByaXYtPnYycC5wb3J0MSA9IHBvcnQxOworCQkJcHJpdi0+djJwLnBvcnQyID0gcG9ydDI7CisJCX0gZWxzZSB7CisJCQltbHg0X2VycihkZXYsICJGYWlsZWQgdG8gY2hhbmdlIHBvcnQgbWFwZTogJWRcbiIsIGVycik7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnByaXYtPmJvbmRfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtbHg0X3BvcnRfbWFwX3NldCk7CisKIHN0YXRpYyBpbnQgbWx4NF9sb2FkX2Z3KHN0cnVjdCBtbHg0X2RldiAqZGV2KQogewogCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKQEAgLTE0NzcsNyArMTU3MSw4IEBACiAJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+Y21kLnNsYXZlX2NtZF9tdXRleCk7Ci0JaWYgKG1seDRfY29tbV9jbWQoZGV2LCBNTFg0X0NPTU1fQ01EX1JFU0VULCAwLCBNTFg0X0NPTU1fVElNRSkpCisJaWYgKG1seDRfY29tbV9jbWQoZGV2LCBNTFg0X0NPTU1fQ01EX1JFU0VULCAwLCBNTFg0X0NPTU1fQ01EX05BX09QLAorCQkJICBNTFg0X0NPTU1fVElNRSkpCiAJCW1seDRfd2FybihkZXYsICJGYWlsZWQgdG8gY2xvc2Ugc2xhdmUgZnVuY3Rpb25cbiIpOwogCW11dGV4X3VubG9jaygmcHJpdi0+Y21kLnNsYXZlX2NtZF9tdXRleCk7CiB9CkBAIC0xNDkyLDkgKzE1ODcsOSBAQAogCWlmICghZGV2LT5jYXBzLmJmX3JlZ19zaXplKQogCQlyZXR1cm4gLUVOWElPOwogCi0JYmZfc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAyKSArCisJYmZfc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZXJzaXN0LT5wZGV2LCAyKSArCiAJCQkoZGV2LT5jYXBzLm51bV91YXJzIDw8IFBBR0VfU0hJRlQpOwotCWJmX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4oZGV2LT5wZGV2LCAyKSAtCisJYmZfbGVuID0gcGNpX3Jlc291cmNlX2xlbihkZXYtPnBlcnNpc3QtPnBkZXYsIDIpIC0KIAkJCShkZXYtPmNhcHMubnVtX3VhcnMgPDwgUEFHRV9TSElGVCk7CiAJcHJpdi0+YmZfbWFwcGluZyA9IGlvX21hcHBpbmdfY3JlYXRlX3djKGJmX3N0YXJ0LCBiZl9sZW4pOwogCWlmICghcHJpdi0+YmZfbWFwcGluZykKQEAgLTE1MzYsNyArMTYzMSw4IEBACiAJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOwogCiAJcHJpdi0+Y2xvY2tfbWFwcGluZyA9Ci0JCWlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgcHJpdi0+ZncuY2xvY2tfYmFyKSArCisJCWlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGVyc2lzdC0+cGRldiwKKwkJCQkJICAgcHJpdi0+ZncuY2xvY2tfYmFyKSArCiAJCQlwcml2LT5mdy5jbG9ja19vZmZzZXQsIE1MWDRfQ0xPQ0tfU0laRSk7CiAKIAlpZiAoIXByaXYtPmNsb2NrX21hcHBpbmcpCkBAIC0xNTczLDYgKzE2NjksNTAgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgbWx4NF9jb21tX2NoZWNrX29mZmxpbmUoc3RydWN0IG1seDRfZGV2ICpkZXYpCit7CisjZGVmaW5lIENPTU1fQ0hBTl9PRkZMSU5FX09GRlNFVCAweDA5CisKKwl1MzIgY29tbV9mbGFnczsKKwl1MzIgb2ZmbGluZV9iaXQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCisJZW5kID0gbXNlY3NfdG9famlmZmllcyhNTFg0X0NPTU1fT0ZGTElORV9USU1FX09VVCkgKyBqaWZmaWVzOworCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmQpKSB7CisJCWNvbW1fZmxhZ3MgPSBzd2FiMzIocmVhZGwoKF9faW9tZW0gY2hhciAqKXByaXYtPm1mdW5jLmNvbW0gKworCQkJCQkgIE1MWDRfQ09NTV9DSEFOX0ZMQUdTKSk7CisJCW9mZmxpbmVfYml0ID0gKGNvbW1fZmxhZ3MgJgorCQkJICAgICAgICh1MzIpKDEgPDwgQ09NTV9DSEFOX09GRkxJTkVfT0ZGU0VUKSk7CisJCWlmICghb2ZmbGluZV9iaXQpCisJCQlyZXR1cm4gMDsKKwkJLyogVGhlcmUgYXJlIGNhc2VzIGFzIHBhcnQgb2YgQUVSL1Jlc2V0IGZsb3cgdGhhdCBQRiBuZWVkcworCQkgKiBhcm91bmQgMTAwIG1zZWMgdG8gbG9hZC4gV2UgdGhlcmVmb3JlIHNsZWVwIGZvciAxMDAgbXNlYworCQkgKiB0byBhbGxvdyBvdGhlciB0YXNrcyB0byBtYWtlIHVzZSBvZiB0aGF0IENQVSBkdXJpbmcgdGhpcworCQkgKiB0aW1lIGludGVydmFsLgorCQkgKi8KKwkJbXNsZWVwKDEwMCk7CisJfQorCW1seDRfZXJyKGRldiwgIkNvbW11bmljYXRpb24gY2hhbm5lbCBpcyBvZmZsaW5lLlxuIik7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyB2b2lkIG1seDRfcmVzZXRfdmZfc3VwcG9ydChzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKyNkZWZpbmUgQ09NTV9DSEFOX1JTVF9PRkZTRVQgMHgxZQorCisJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOworCXUzMiBjb21tX3JzdDsKKwl1MzIgY29tbV9jYXBzOworCisJY29tbV9jYXBzID0gc3dhYjMyKHJlYWRsKChfX2lvbWVtIGNoYXIgKilwcml2LT5tZnVuYy5jb21tICsKKwkJCQkgTUxYNF9DT01NX0NIQU5fQ0FQUykpOworCWNvbW1fcnN0ID0gKGNvbW1fY2FwcyAmICh1MzIpKDEgPDwgQ09NTV9DSEFOX1JTVF9PRkZTRVQpKTsKKworCWlmIChjb21tX3JzdCkKKwkJZGV2LT5jYXBzLnZmX2NhcHMgfD0gTUxYNF9WRl9DQVBfRkxBR19SRVNFVDsKK30KKwogc3RhdGljIGludCBtbHg0X2luaXRfc2xhdmUoc3RydWN0IG1seDRfZGV2ICpkZXYpCiB7CiAJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOwpAQCAtMTU4OCw5ICsxNzI4LDE1IEBACiAKIAltdXRleF9sb2NrKCZwcml2LT5jbWQuc2xhdmVfY21kX211dGV4KTsKIAlwcml2LT5jbWQubWF4X2NtZHMgPSAxOworCWlmIChtbHg0X2NvbW1fY2hlY2tfb2ZmbGluZShkZXYpKSB7CisJCW1seDRfZXJyKGRldiwgIlBGIGlzIG5vdCByZXNwb25zaXZlLCBza2lwcGluZyBpbml0aWFsaXphdGlvblxuIik7CisJCWdvdG8gZXJyX29mZmxpbmU7CisJfQorCisJbWx4NF9yZXNldF92Zl9zdXBwb3J0KGRldik7CiAJbWx4NF93YXJuKGRldiwgIlNlbmRpbmcgcmVzZXRcbiIpOwogCXJldF9mcm9tX3Jlc2V0ID0gbWx4NF9jb21tX2NtZChkZXYsIE1MWDRfQ09NTV9DTURfUkVTRVQsIDAsCi0JCQkJICAgICAgIE1MWDRfQ09NTV9USU1FKTsKKwkJCQkgICAgICAgTUxYNF9DT01NX0NNRF9OQV9PUCwgTUxYNF9DT01NX1RJTUUpOwogCS8qIGlmIHdlIGFyZSBpbiB0aGUgbWlkZGxlIG9mIGZsciB0aGUgc2xhdmUgd2lsbCB0cnkKIAkgKiBOVU1fT0ZfUkVTRVRfUkVUUklFUyB0aW1lcyBiZWZvcmUgbGVhdmluZy4qLwogCWlmIChyZXRfZnJvbV9yZXNldCkgewpAQCAtMTYxNSwyMiArMTc2MSwyNCBAQAogCiAJbWx4NF93YXJuKGRldiwgIlNlbmRpbmcgdmhjcjBcbiIpOwogCWlmIChtbHg0X2NvbW1fY21kKGRldiwgTUxYNF9DT01NX0NNRF9WSENSMCwgZG1hID4+IDQ4LAotCQkJCQkJICAgIE1MWDRfQ09NTV9USU1FKSkKKwkJCSAgICAgTUxYNF9DT01NX0NNRF9OQV9PUCwgTUxYNF9DT01NX1RJTUUpKQogCQlnb3RvIGVycjsKIAlpZiAobWx4NF9jb21tX2NtZChkZXYsIE1MWDRfQ09NTV9DTURfVkhDUjEsIGRtYSA+PiAzMiwKLQkJCQkJCSAgICBNTFg0X0NPTU1fVElNRSkpCisJCQkgICAgIE1MWDRfQ09NTV9DTURfTkFfT1AsIE1MWDRfQ09NTV9USU1FKSkKIAkJZ290byBlcnI7CiAJaWYgKG1seDRfY29tbV9jbWQoZGV2LCBNTFg0X0NPTU1fQ01EX1ZIQ1IyLCBkbWEgPj4gMTYsCi0JCQkJCQkgICAgTUxYNF9DT01NX1RJTUUpKQorCQkJICAgICBNTFg0X0NPTU1fQ01EX05BX09QLCBNTFg0X0NPTU1fVElNRSkpCiAJCWdvdG8gZXJyOwotCWlmIChtbHg0X2NvbW1fY21kKGRldiwgTUxYNF9DT01NX0NNRF9WSENSX0VOLCBkbWEsIE1MWDRfQ09NTV9USU1FKSkKKwlpZiAobWx4NF9jb21tX2NtZChkZXYsIE1MWDRfQ09NTV9DTURfVkhDUl9FTiwgZG1hLAorCQkJICBNTFg0X0NPTU1fQ01EX05BX09QLCBNTFg0X0NPTU1fVElNRSkpCiAJCWdvdG8gZXJyOwogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jbWQuc2xhdmVfY21kX211dGV4KTsKIAlyZXR1cm4gMDsKIAogZXJyOgotCW1seDRfY29tbV9jbWQoZGV2LCBNTFg0X0NPTU1fQ01EX1JFU0VULCAwLCAwKTsKKwltbHg0X2NvbW1fY21kKGRldiwgTUxYNF9DT01NX0NNRF9SRVNFVCwgMCwgTUxYNF9DT01NX0NNRF9OQV9PUCwgMCk7CitlcnJfb2ZmbGluZToKIAltdXRleF91bmxvY2soJnByaXYtPmNtZC5zbGF2ZV9jbWRfbXV0ZXgpOwogCXJldHVybiAtRUlPOwogfQpAQCAtMTcwNSw3ICsxODUzLDggQEAKIAlpZiAobWx4NF9sb2dfbnVtX21nbV9lbnRyeV9zaXplIDw9IDAgJiYKIAkgICAgZGV2X2NhcC0+ZmxhZ3MyICYgTUxYNF9ERVZfQ0FQX0ZMQUcyX0ZTX0VOICYmCiAJICAgICghbWx4NF9pc19tZnVuYyhkZXYpIHx8Ci0JICAgICAoZGV2X2NhcC0+ZnNfbWF4X251bV9xcF9wZXJfZW50cnkgPj0gKGRldi0+bnVtX3ZmcyArIDEpKSkgJiYKKwkgICAgIChkZXZfY2FwLT5mc19tYXhfbnVtX3FwX3Blcl9lbnRyeSA+PQorCSAgICAgKGRldi0+cGVyc2lzdC0+bnVtX3ZmcyArIDEpKSkgJiYKIAkgICAgY2hvb3NlX2xvZ19mc19tZ21fZW50cnlfc2l6ZShkZXZfY2FwLT5mc19tYXhfbnVtX3FwX3Blcl9lbnRyeSkgPj0KIAkJTUxYNF9NSU5fTUdNX0xPR19FTlRSWV9TSVpFKSB7CiAJCWRldi0+b3Blcl9sb2dfbWdtX2VudHJ5X3NpemUgPQpAQCAtMjI4Nyw3ICsyNDM2LDggQEAKIAkJZm9yIChpID0gMDsgaSA8IG5yZXE7ICsraSkKIAkJCWVudHJpZXNbaV0uZW50cnkgPSBpOwogCi0JCW5yZXEgPSBwY2lfZW5hYmxlX21zaXhfcmFuZ2UoZGV2LT5wZGV2LCBlbnRyaWVzLCAyLCBucmVxKTsKKwkJbnJlcSA9IHBjaV9lbmFibGVfbXNpeF9yYW5nZShkZXYtPnBlcnNpc3QtPnBkZXYsIGVudHJpZXMsIDIsCisJCQkJCSAgICAgbnJlcSk7CiAKIAkJaWYgKG5yZXEgPCAwKSB7CiAJCQlrZnJlZShlbnRyaWVzKTsKQEAgLTIzMTUsNyArMjQ2NSw3IEBACiAJZGV2LT5jYXBzLmNvbXBfcG9vbAkgICA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQotCQlwcml2LT5lcV90YWJsZS5lcVtpXS5pcnEgPSBkZXYtPnBkZXYtPmlycTsKKwkJcHJpdi0+ZXFfdGFibGUuZXFbaV0uaXJxID0gZGV2LT5wZXJzaXN0LT5wZGV2LT5pcnE7CiB9CiAKIHN0YXRpYyBpbnQgbWx4NF9pbml0X3BvcnRfaW5mbyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHBvcnQpCkBAIC0yMzQzLDcgKzI0OTMsNyBAQAogCWluZm8tPnBvcnRfYXR0ci5zaG93ICAgICAgPSBzaG93X3BvcnRfdHlwZTsKIAlzeXNmc19hdHRyX2luaXQoJmluZm8tPnBvcnRfYXR0ci5hdHRyKTsKIAotCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5wZGV2LT5kZXYsICZpbmZvLT5wb3J0X2F0dHIpOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5wZXJzaXN0LT5wZGV2LT5kZXYsICZpbmZvLT5wb3J0X2F0dHIpOwogCWlmIChlcnIpIHsKIAkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBmaWxlIGZvciBwb3J0ICVkXG4iLCBwb3J0KTsKIAkJaW5mby0+cG9ydCA9IC0xOwpAQCAtMjM2MCwxMCArMjUxMCwxMiBAQAogCWluZm8tPnBvcnRfbXR1X2F0dHIuc2hvdyAgICAgID0gc2hvd19wb3J0X2liX210dTsKIAlzeXNmc19hdHRyX2luaXQoJmluZm8tPnBvcnRfbXR1X2F0dHIuYXR0cik7CiAKLQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldi0+cGRldi0+ZGV2LCAmaW5mby0+cG9ydF9tdHVfYXR0cik7CisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPnBlcnNpc3QtPnBkZXYtPmRldiwKKwkJCQkgJmluZm8tPnBvcnRfbXR1X2F0dHIpOwogCWlmIChlcnIpIHsKIAkJbWx4NF9lcnIoZGV2LCAiRmFpbGVkIHRvIGNyZWF0ZSBtdHUgZmlsZSBmb3IgcG9ydCAlZFxuIiwgcG9ydCk7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW5mby0+ZGV2LT5wZGV2LT5kZXYsICZpbmZvLT5wb3J0X2F0dHIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmluZm8tPmRldi0+cGVyc2lzdC0+cGRldi0+ZGV2LAorCQkJCSAgICZpbmZvLT5wb3J0X2F0dHIpOwogCQlpbmZvLT5wb3J0ID0gLTE7CiAJfQogCkBAIC0yMzc1LDggKzI1MjcsOSBAQAogCWlmIChpbmZvLT5wb3J0IDwgMCkKIAkJcmV0dXJuOwogCi0JZGV2aWNlX3JlbW92ZV9maWxlKCZpbmZvLT5kZXYtPnBkZXYtPmRldiwgJmluZm8tPnBvcnRfYXR0cik7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZpbmZvLT5kZXYtPnBkZXYtPmRldiwgJmluZm8tPnBvcnRfbXR1X2F0dHIpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW5mby0+ZGV2LT5wZXJzaXN0LT5wZGV2LT5kZXYsICZpbmZvLT5wb3J0X2F0dHIpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW5mby0+ZGV2LT5wZXJzaXN0LT5wZGV2LT5kZXYsCisJCQkgICAmaW5mby0+cG9ydF9tdHVfYXR0cik7CiB9CiAKIHN0YXRpYyBpbnQgbWx4NF9pbml0X3N0ZWVyaW5nKHN0cnVjdCBtbHg0X2RldiAqZGV2KQpAQCAtMjQ0MywxMCArMjU5NiwxMSBAQAogCXZvaWQgX19pb21lbSAqb3duZXI7CiAJdTMyIHJldDsKIAotCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKGRldi0+cGRldikpCisJaWYgKHBjaV9jaGFubmVsX29mZmxpbmUoZGV2LT5wZXJzaXN0LT5wZGV2KSkKIAkJcmV0dXJuIC1FSU87CiAKLQlvd25lciA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMCkgKyBNTFg0X09XTkVSX0JBU0UsCisJb3duZXIgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYtPnBlcnNpc3QtPnBkZXYsIDApICsKKwkJCU1MWDRfT1dORVJfQkFTRSwKIAkJCU1MWDRfT1dORVJfU0laRSk7CiAJaWYgKCFvd25lcikgewogCQltbHg0X2VycihkZXYsICJGYWlsZWQgdG8gb2J0YWluIG93bmVyc2hpcCBiaXRcbiIpOwpAQCAtMjQ2MiwxMCArMjYxNiwxMSBAQAogewogCXZvaWQgX19pb21lbSAqb3duZXI7CiAKLQlpZiAocGNpX2NoYW5uZWxfb2ZmbGluZShkZXYtPnBkZXYpKQorCWlmIChwY2lfY2hhbm5lbF9vZmZsaW5lKGRldi0+cGVyc2lzdC0+cGRldikpCiAJCXJldHVybjsKIAotCW93bmVyID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAwKSArIE1MWDRfT1dORVJfQkFTRSwKKwlvd25lciA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGVyc2lzdC0+cGRldiwgMCkgKworCQkJTUxYNF9PV05FUl9CQVNFLAogCQkJTUxYNF9PV05FUl9TSVpFKTsKIAlpZiAoIW93bmVyKSB7CiAJCW1seDRfZXJyKGRldiwgIkZhaWxlZCB0byBvYnRhaW4gb3duZXJzaGlwIGJpdFxuIik7CkBAIC0yNDgwLDExICsyNjM1LDE5IEBACiAJCQkJICAhISgoZmxhZ3MpICYgTUxYNF9GTEFHX01BU1RFUikpCiAKIHN0YXRpYyB1NjQgbWx4NF9lbmFibGVfc3Jpb3Yoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJICAgICB1OCB0b3RhbF92ZnMsIGludCBleGlzdGluZ192ZnMpCisJCQkgICAgIHU4IHRvdGFsX3ZmcywgaW50IGV4aXN0aW5nX3ZmcywgaW50IHJlc2V0X2Zsb3cpCiB7CiAJdTY0IGRldl9mbGFncyA9IGRldi0+ZmxhZ3M7CiAJaW50IGVyciA9IDA7CiAKKwlpZiAocmVzZXRfZmxvdykgeworCQlkZXYtPmRldl92ZnMgPSBrY2FsbG9jKHRvdGFsX3Zmcywgc2l6ZW9mKCpkZXYtPmRldl92ZnMpLAorCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKCFkZXYtPmRldl92ZnMpCisJCQlnb3RvIGZyZWVfbWVtOworCQlyZXR1cm4gZGV2X2ZsYWdzOworCX0KKwogCWF0b21pY19pbmMoJnBmX2xvYWRpbmcpOwogCWlmIChkZXYtPmZsYWdzICYgIE1MWDRfRkxBR19TUklPVikgewogCQlpZiAoZXhpc3RpbmdfdmZzICE9IHRvdGFsX3ZmcykgewpAQCAtMjUxMywxMyArMjY3NiwxNCBAQAogCQlkZXZfZmxhZ3MgfD0gTUxYNF9GTEFHX1NSSU9WIHwKIAkJCU1MWDRfRkxBR19NQVNURVI7CiAJCWRldl9mbGFncyAmPSB+TUxYNF9GTEFHX1NMQVZFOwotCQlkZXYtPm51bV92ZnMgPSB0b3RhbF92ZnM7CisJCWRldi0+cGVyc2lzdC0+bnVtX3ZmcyA9IHRvdGFsX3ZmczsKIAl9CiAJcmV0dXJuIGRldl9mbGFnczsKIAogZGlzYWJsZV9zcmlvdjoKIAlhdG9taWNfZGVjKCZwZl9sb2FkaW5nKTsKLQlkZXYtPm51bV92ZnMgPSAwOworZnJlZV9tZW06CisJZGV2LT5wZXJzaXN0LT5udW1fdmZzID0gMDsKIAlrZnJlZShkZXYtPmRldl92ZnMpOwogCXJldHVybiBkZXZfZmxhZ3MgJiB+TUxYNF9GTEFHX01BU1RFUjsKIH0KQEAgLTI1NDMsNyArMjcwNyw4IEBACiB9CiAKIHN0YXRpYyBpbnQgbWx4NF9sb2FkX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IHBjaV9kZXZfZGF0YSwKLQkJCSBpbnQgdG90YWxfdmZzLCBpbnQgKm52ZnMsIHN0cnVjdCBtbHg0X3ByaXYgKnByaXYpCisJCQkgaW50IHRvdGFsX3ZmcywgaW50ICpudmZzLCBzdHJ1Y3QgbWx4NF9wcml2ICpwcml2LAorCQkJIGludCByZXNldF9mbG93KQogewogCXN0cnVjdCBtbHg0X2RldiAqZGV2OwogCXVuc2lnbmVkIHN1bSA9IDA7CkBAIC0yNTU5LDYgKzI3MjQsNyBAQAogCXNwaW5fbG9ja19pbml0KCZwcml2LT5jdHhfbG9jayk7CiAKIAltdXRleF9pbml0KCZwcml2LT5wb3J0X211dGV4KTsKKwltdXRleF9pbml0KCZwcml2LT5ib25kX211dGV4KTsKIAogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5wZ2Rpcl9saXN0KTsKIAltdXRleF9pbml0KCZwcml2LT5wZ2Rpcl9tdXRleCk7CkBAIC0yNjA2LDEwICsyNzcyLDE1IEBACiAJCQlleGlzdGluZ192ZnMgPSBwY2lfbnVtX3ZmKHBkZXYpOwogCQkJaWYgKGV4aXN0aW5nX3ZmcykKIAkJCQlkZXYtPmZsYWdzIHw9IE1MWDRfRkxBR19TUklPVjsKLQkJCWRldi0+bnVtX3ZmcyA9IHRvdGFsX3ZmczsKKwkJCWRldi0+cGVyc2lzdC0+bnVtX3ZmcyA9IHRvdGFsX3ZmczsKIAkJfQogCX0KIAorCS8qIG9uIGxvYWQgcmVtb3ZlIGFueSBwcmV2aW91cyBpbmRpY2F0aW9uIG9mIGludGVybmFsIGVycm9yLAorCSAqIGRldmljZSBpcyB1cC4KKwkgKi8KKwlkZXYtPnBlcnNpc3QtPnN0YXRlID0gTUxYNF9ERVZJQ0VfU1RBVEVfVVA7CisKIHNsYXZlX3N0YXJ0OgogCWVyciA9IG1seDRfY21kX2luaXQoZGV2KTsKIAlpZiAoZXJyKSB7CkBAIC0yNjYwLDggKzI4MzEsMTAgQEAKIAkJCQlnb3RvIGVycl9mdzsKIAogCQkJaWYgKCEoZGV2X2NhcC0+ZmxhZ3MyICYgTUxYNF9ERVZfQ0FQX0ZMQUcyX1NZU19FUVMpKSB7Ci0JCQkJdTY0IGRldl9mbGFncyA9IG1seDRfZW5hYmxlX3NyaW92KGRldiwgcGRldiwgdG90YWxfdmZzLAotCQkJCQkJCQkgIGV4aXN0aW5nX3Zmcyk7CisJCQkJdTY0IGRldl9mbGFncyA9IG1seDRfZW5hYmxlX3NyaW92KGRldiwgcGRldiwKKwkJCQkJCQkJICB0b3RhbF92ZnMsCisJCQkJCQkJCSAgZXhpc3RpbmdfdmZzLAorCQkJCQkJCQkgIHJlc2V0X2Zsb3cpOwogCiAJCQkJbWx4NF9jbWRfY2xlYW51cChkZXYsIE1MWDRfQ01EX0NMRUFOVVBfQUxMKTsKIAkJCQlkZXYtPmZsYWdzID0gZGV2X2ZsYWdzOwpAQCAtMjcwMyw3ICsyODc2LDcgQEAKIAkJCWlmIChkZXYtPmZsYWdzICYgTUxYNF9GTEFHX1NSSU9WKSB7CiAJCQkJaWYgKCFleGlzdGluZ192ZnMpCiAJCQkJCXBjaV9kaXNhYmxlX3NyaW92KHBkZXYpOwotCQkJCWlmIChtbHg0X2lzX21hc3RlcihkZXYpKQorCQkJCWlmIChtbHg0X2lzX21hc3RlcihkZXYpICYmICFyZXNldF9mbG93KQogCQkJCQlhdG9taWNfZGVjKCZwZl9sb2FkaW5nKTsKIAkJCQlkZXYtPmZsYWdzICY9IH5NTFg0X0ZMQUdfU1JJT1Y7CiAJCQl9CkBAIC0yNzE3LDcgKzI4OTAsOCBAQAogCX0KIAogCWlmIChtbHg0X2lzX21hc3RlcihkZXYpICYmIChkZXZfY2FwLT5mbGFnczIgJiBNTFg0X0RFVl9DQVBfRkxBRzJfU1lTX0VRUykpIHsKLQkJdTY0IGRldl9mbGFncyA9IG1seDRfZW5hYmxlX3NyaW92KGRldiwgcGRldiwgdG90YWxfdmZzLCBleGlzdGluZ192ZnMpOworCQl1NjQgZGV2X2ZsYWdzID0gbWx4NF9lbmFibGVfc3Jpb3YoZGV2LCBwZGV2LCB0b3RhbF92ZnMsCisJCQkJCQkgIGV4aXN0aW5nX3ZmcywgcmVzZXRfZmxvdyk7CiAKIAkJaWYgKChkZXYtPmZsYWdzIF4gZGV2X2ZsYWdzKSAmIChNTFg0X0ZMQUdfTUFTVEVSIHwgTUxYNF9GTEFHX1NMQVZFKSkgewogCQkJbWx4NF9jbWRfY2xlYW51cChkZXYsIE1MWDRfQ01EX0NMRUFOVVBfVkhDUik7CkBAIC0yNzcwLDEyICsyOTQ0LDE0IEBACiAJCQkJIGRldi0+Y2Fwcy5udW1fcG9ydHMpOwogCQkJZ290byBlcnJfY2xvc2U7CiAJCX0KLQkJbWVtY3B5KGRldi0+bnZmcywgbnZmcywgc2l6ZW9mKGRldi0+bnZmcykpOworCQltZW1jcHkoZGV2LT5wZXJzaXN0LT5udmZzLCBudmZzLCBzaXplb2YoZGV2LT5wZXJzaXN0LT5udmZzKSk7CiAKLQkJZm9yIChpID0gMDsgaSA8IHNpemVvZihkZXYtPm52ZnMpL3NpemVvZihkZXYtPm52ZnNbMF0pOyBpKyspIHsKKwkJZm9yIChpID0gMDsKKwkJICAgICBpIDwgc2l6ZW9mKGRldi0+cGVyc2lzdC0+bnZmcykvCisJCSAgICAgc2l6ZW9mKGRldi0+cGVyc2lzdC0+bnZmc1swXSk7IGkrKykgewogCQkJdW5zaWduZWQgajsKIAotCQkJZm9yIChqID0gMDsgaiA8IGRldi0+bnZmc1tpXTsgKytzdW0sICsraikgeworCQkJZm9yIChqID0gMDsgaiA8IGRldi0+cGVyc2lzdC0+bnZmc1tpXTsgKytzdW0sICsraikgewogCQkJCWRldi0+ZGV2X3Zmc1tzdW1dLm1pbl9wb3J0ID0gaSA8IDIgPyBpICsgMSA6IDE7CiAJCQkJZGV2LT5kZXZfdmZzW3N1bV0ubl9wb3J0cyA9IGkgPCAyID8gMSA6CiAJCQkJCWRldi0+Y2Fwcy5udW1fcG9ydHM7CkBAIC0yODI3LDYgKzMwMDMsMTcgQEAKIAkJZ290byBlcnJfc3RlZXI7CiAKIAltbHg0X2luaXRfcXVvdGFzKGRldik7CisJLyogV2hlbiBQRiByZXNvdXJjZXMgYXJlIHJlYWR5IGFybSBpdHMgY29tbSBjaGFubmVsIHRvIGVuYWJsZQorCSAqIGdldHRpbmcgY29tbWFuZHMKKwkgKi8KKwlpZiAobWx4NF9pc19tYXN0ZXIoZGV2KSkgeworCQllcnIgPSBtbHg0X0FSTV9DT01NX0NIQU5ORUwoZGV2KTsKKwkJaWYgKGVycikgeworCQkJbWx4NF9lcnIoZGV2LCAiIEZhaWxlZCB0byBhcm0gY29tbSBjaGFubmVsIGVxOiAleFxuIiwKKwkJCQkgZXJyKTsKKwkJCWdvdG8gZXJyX3N0ZWVyOworCQl9CisJfQogCiAJZm9yIChwb3J0ID0gMTsgcG9ydCA8PSBkZXYtPmNhcHMubnVtX3BvcnRzOyBwb3J0KyspIHsKIAkJZXJyID0gbWx4NF9pbml0X3BvcnRfaW5mbyhkZXYsIHBvcnQpOwpAQCAtMjgzNCw2ICszMDIxLDkgQEAKIAkJCWdvdG8gZXJyX3BvcnQ7CiAJfQogCisJcHJpdi0+djJwLnBvcnQxID0gMTsKKwlwcml2LT52MnAucG9ydDIgPSAyOworCiAJZXJyID0gbWx4NF9yZWdpc3Rlcl9kZXZpY2UoZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9wb3J0OwpAQCAtMjg0NSw3ICszMDM1LDcgQEAKIAogCXByaXYtPnJlbW92ZWQgPSAwOwogCi0JaWYgKG1seDRfaXNfbWFzdGVyKGRldikgJiYgZGV2LT5udW1fdmZzKQorCWlmIChtbHg0X2lzX21hc3RlcihkZXYpICYmIGRldi0+cGVyc2lzdC0+bnVtX3ZmcyAmJiAhcmVzZXRfZmxvdykKIAkJYXRvbWljX2RlYygmcGZfbG9hZGluZyk7CiAKIAlrZnJlZShkZXZfY2FwKTsKQEAgLTI4NzksOCArMzA2OSwxMCBAQAogCW1seDRfZnJlZV9lcV90YWJsZShkZXYpOwogCiBlcnJfbWFzdGVyX21mdW5jOgotCWlmIChtbHg0X2lzX21hc3RlcihkZXYpKQorCWlmIChtbHg0X2lzX21hc3RlcihkZXYpKSB7CisJCW1seDRfZnJlZV9yZXNvdXJjZV90cmFja2VyKGRldiwgUkVTX1RSX0ZSRUVfU1RSVUNUU19PTkxZKTsKIAkJbWx4NF9tdWx0aV9mdW5jX2NsZWFudXAoZGV2KTsKKwl9CiAKIAlpZiAobWx4NF9pc19zbGF2ZShkZXYpKSB7CiAJCWtmcmVlKGRldi0+Y2Fwcy5xcDBfcWtleSk7CkBAIC0yOTA0LDEwICszMDk2LDEyIEBACiAJbWx4NF9jbWRfY2xlYW51cChkZXYsIE1MWDRfQ01EX0NMRUFOVVBfQUxMKTsKIAogZXJyX3NyaW92OgotCWlmIChkZXYtPmZsYWdzICYgTUxYNF9GTEFHX1NSSU9WICYmICFleGlzdGluZ192ZnMpCisJaWYgKGRldi0+ZmxhZ3MgJiBNTFg0X0ZMQUdfU1JJT1YgJiYgIWV4aXN0aW5nX3ZmcykgewogCQlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKKwkJZGV2LT5mbGFncyAmPSB+TUxYNF9GTEFHX1NSSU9WOworCX0KIAotCWlmIChtbHg0X2lzX21hc3RlcihkZXYpICYmIGRldi0+bnVtX3ZmcykKKwlpZiAobWx4NF9pc19tYXN0ZXIoZGV2KSAmJiBkZXYtPnBlcnNpc3QtPm51bV92ZnMgJiYgIXJlc2V0X2Zsb3cpCiAJCWF0b21pY19kZWMoJnBmX2xvYWRpbmcpOwogCiAJa2ZyZWUocHJpdi0+ZGV2LmRldl92ZnMpOwpAQCAtMzA0OCwxMSArMzI0MiwxOSBAQAogCQl9CiAJfQogCi0JZXJyID0gbWx4NF9sb2FkX29uZShwZGV2LCBwY2lfZGV2X2RhdGEsIHRvdGFsX3ZmcywgbnZmcywgcHJpdik7CisJZXJyID0gbWx4NF9jYXRhc19pbml0KCZwcml2LT5kZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uczsKKworCWVyciA9IG1seDRfbG9hZF9vbmUocGRldiwgcGNpX2Rldl9kYXRhLCB0b3RhbF92ZnMsIG52ZnMsIHByaXYsIDApOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2NhdGFzOworCiAJcmV0dXJuIDA7CiAKK2Vycl9jYXRhczoKKwltbHg0X2NhdGFzX2VuZCgmcHJpdi0+ZGV2KTsKKwogZXJyX3JlbGVhc2VfcmVnaW9uczoKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCkBAIC0zMDc1LDM4ICszMjc3LDYwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJZGV2ICAgICAgID0gJnByaXYtPmRldjsKLQlkZXYtPnBkZXYgPSBwZGV2OwotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCWRldi0+cGVyc2lzdCA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYtPnBlcnNpc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+cGVyc2lzdCkgeworCQlrZnJlZShwcml2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWRldi0+cGVyc2lzdC0+cGRldiA9IHBkZXY7CisJZGV2LT5wZXJzaXN0LT5kZXYgPSBkZXY7CisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldi0+cGVyc2lzdCk7CiAJcHJpdi0+cGNpX2Rldl9kYXRhID0gaWQtPmRyaXZlcl9kYXRhOworCW11dGV4X2luaXQoJmRldi0+cGVyc2lzdC0+ZGV2aWNlX3N0YXRlX211dGV4KTsKKwltdXRleF9pbml0KCZkZXYtPnBlcnNpc3QtPmludGVyZmFjZV9zdGF0ZV9tdXRleCk7CiAKIAlyZXQgPSAgX19tbHg0X2luaXRfb25lKHBkZXYsIGlkLT5kcml2ZXJfZGF0YSwgcHJpdik7Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CisJCWtmcmVlKGRldi0+cGVyc2lzdCk7CiAJCWtmcmVlKHByaXYpOworCX0gZWxzZSB7CisJCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCX0KIAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIG1seDRfY2xlYW5fZGV2KHN0cnVjdCBtbHg0X2RldiAqZGV2KQoreworCXN0cnVjdCBtbHg0X2Rldl9wZXJzaXN0ZW50ICpwZXJzaXN0ID0gZGV2LT5wZXJzaXN0OworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nCWZsYWdzID0gKGRldi0+ZmxhZ3MgJiBSRVNFVF9QRVJTSVNUX01BU0tfRkxBR1MpOworCisJbWVtc2V0KHByaXYsIDAsIHNpemVvZigqcHJpdikpOworCXByaXYtPmRldi5wZXJzaXN0ID0gcGVyc2lzdDsKKwlwcml2LT5kZXYuZmxhZ3MgPSBmbGFnczsKK30KKwogc3RhdGljIHZvaWQgbWx4NF91bmxvYWRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBtbHg0X2RldiAgKmRldiAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG1seDRfZGV2X3BlcnNpc3RlbnQgKnBlcnNpc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG1seDRfZGV2ICAqZGV2ICA9IHBlcnNpc3QtPmRldjsKIAlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CiAJaW50ICAgICAgICAgICAgICAgcGNpX2Rldl9kYXRhOwotCWludCBwOwotCWludCBhY3RpdmVfdmZzID0gMDsKKwlpbnQgcCwgaTsKIAogCWlmIChwcml2LT5yZW1vdmVkKQogCQlyZXR1cm47CiAKKwkvKiBzYXZpbmcgY3VycmVudCBwb3J0cyB0eXBlIGZvciBmdXJ0aGVyIHVzZSAqLworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmNhcHMubnVtX3BvcnRzOyBpKyspIHsKKwkJZGV2LT5wZXJzaXN0LT5jdXJyX3BvcnRfdHlwZVtpXSA9IGRldi0+Y2Fwcy5wb3J0X3R5cGVbaSArIDFdOworCQlkZXYtPnBlcnNpc3QtPmN1cnJfcG9ydF9wb3NzX3R5cGVbaV0gPSBkZXYtPmNhcHMuCisJCQkJCQkgICAgICAgcG9zc2libGVfdHlwZVtpICsgMV07CisJfQorCiAJcGNpX2Rldl9kYXRhID0gcHJpdi0+cGNpX2Rldl9kYXRhOwogCi0JLyogRGlzYWJsaW5nIFNSLUlPViBpcyBub3QgYWxsb3dlZCB3aGlsZSB0aGVyZSBhcmUgYWN0aXZlIHZmJ3MgKi8KLQlpZiAobWx4NF9pc19tYXN0ZXIoZGV2KSkgewotCQlhY3RpdmVfdmZzID0gbWx4NF9ob3dfbWFueV9saXZlc192ZihkZXYpOwotCQlpZiAoYWN0aXZlX3ZmcykgewotCQkJcHJfd2FybigiUmVtb3ZpbmcgUEYgd2hlbiB0aGVyZSBhcmUgYWN0aXZlIFZGJ3MgISFcbiIpOwotCQkJcHJfd2FybigiV2lsbCBub3QgZGlzYWJsZSBTUi1JT1YuXG4iKTsKLQkJfQotCX0KIAltbHg0X3N0b3Bfc2Vuc2UoZGV2KTsKIAltbHg0X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CiAKQEAgLTMxNTAsMTIgKzMzNzQsNiBAQAogCiAJaWYgKGRldi0+ZmxhZ3MgJiBNTFg0X0ZMQUdfTVNJX1gpCiAJCXBjaV9kaXNhYmxlX21zaXgocGRldik7Ci0JaWYgKGRldi0+ZmxhZ3MgJiBNTFg0X0ZMQUdfU1JJT1YgJiYgIWFjdGl2ZV92ZnMpIHsKLQkJbWx4NF93YXJuKGRldiwgIkRpc2FibGluZyBTUi1JT1ZcbiIpOwotCQlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKLQkJZGV2LT5mbGFncyAmPSB+TUxYNF9GTEFHX1NSSU9WOwotCQlkZXYtPm51bV92ZnMgPSAwOwotCX0KIAogCWlmICghbWx4NF9pc19zbGF2ZShkZXYpKQogCQltbHg0X2ZyZWVfb3duZXJzaGlwKGRldik7CkBAIC0zMTY3LDQyICszMzg1LDk2IEBACiAJa2ZyZWUoZGV2LT5jYXBzLnFwMV9wcm94eSk7CiAJa2ZyZWUoZGV2LT5kZXZfdmZzKTsKIAotCW1lbXNldChwcml2LCAwLCBzaXplb2YoKnByaXYpKTsKKwltbHg0X2NsZWFuX2RldihkZXYpOwogCXByaXYtPnBjaV9kZXZfZGF0YSA9IHBjaV9kZXZfZGF0YTsKIAlwcml2LT5yZW1vdmVkID0gMTsKIH0KIAogc3RhdGljIHZvaWQgbWx4NF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBtbHg0X2RldiAgKmRldiAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG1seDRfZGV2X3BlcnNpc3RlbnQgKnBlcnNpc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG1seDRfZGV2ICAqZGV2ICA9IHBlcnNpc3QtPmRldjsKIAlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CisJaW50IGFjdGl2ZV92ZnMgPSAwOwogCi0JbWx4NF91bmxvYWRfb25lKHBkZXYpOworCW11dGV4X2xvY2soJnBlcnNpc3QtPmludGVyZmFjZV9zdGF0ZV9tdXRleCk7CisJcGVyc2lzdC0+aW50ZXJmYWNlX3N0YXRlIHw9IE1MWDRfSU5URVJGQUNFX1NUQVRFX0RFTEVUSU9OOworCW11dGV4X3VubG9jaygmcGVyc2lzdC0+aW50ZXJmYWNlX3N0YXRlX211dGV4KTsKKworCS8qIERpc2FibGluZyBTUi1JT1YgaXMgbm90IGFsbG93ZWQgd2hpbGUgdGhlcmUgYXJlIGFjdGl2ZSB2ZidzICovCisJaWYgKG1seDRfaXNfbWFzdGVyKGRldikgJiYgZGV2LT5mbGFncyAmIE1MWDRfRkxBR19TUklPVikgeworCQlhY3RpdmVfdmZzID0gbWx4NF9ob3dfbWFueV9saXZlc192ZihkZXYpOworCQlpZiAoYWN0aXZlX3ZmcykgeworCQkJcHJfd2FybigiUmVtb3ZpbmcgUEYgd2hlbiB0aGVyZSBhcmUgYWN0aXZlIFZGJ3MgISFcbiIpOworCQkJcHJfd2FybigiV2lsbCBub3QgZGlzYWJsZSBTUi1JT1YuXG4iKTsKKwkJfQorCX0KKworCS8qIGRldmljZSBtYXJrZWQgdG8gYmUgdW5kZXIgZGVsZXRpb24gcnVubmluZyBub3cgd2l0aG91dCB0aGUgbG9jaworCSAqIGxldHRpbmcgb3RoZXIgdGFza3MgdG8gYmUgdGVybWluYXRlZAorCSAqLworCWlmIChwZXJzaXN0LT5pbnRlcmZhY2Vfc3RhdGUgJiBNTFg0X0lOVEVSRkFDRV9TVEFURV9VUCkKKwkJbWx4NF91bmxvYWRfb25lKHBkZXYpOworCWVsc2UKKwkJbWx4NF9pbmZvKGRldiwgIiVzOiBpbnRlcmZhY2UgaXMgZG93blxuIiwgX19mdW5jX18pOworCW1seDRfY2F0YXNfZW5kKGRldik7CisJaWYgKGRldi0+ZmxhZ3MgJiBNTFg0X0ZMQUdfU1JJT1YgJiYgIWFjdGl2ZV92ZnMpIHsKKwkJbWx4NF93YXJuKGRldiwgIkRpc2FibGluZyBTUi1JT1ZcbiIpOworCQlwY2lfZGlzYWJsZV9zcmlvdihwZGV2KTsKKwl9CisKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlrZnJlZShkZXYtPnBlcnNpc3QpOwogCWtmcmVlKHByaXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIH0KIAorc3RhdGljIGludCByZXN0b3JlX2N1cnJlbnRfcG9ydF90eXBlcyhzdHJ1Y3QgbWx4NF9kZXYgKmRldiwKKwkJCQkgICAgICBlbnVtIG1seDRfcG9ydF90eXBlICp0eXBlcywKKwkJCQkgICAgICBlbnVtIG1seDRfcG9ydF90eXBlICpwb3NzX3R5cGVzKQoreworCXN0cnVjdCBtbHg0X3ByaXYgKnByaXYgPSBtbHg0X3ByaXYoZGV2KTsKKwlpbnQgZXJyLCBpOworCisJbWx4NF9zdG9wX3NlbnNlKGRldik7CisKKwltdXRleF9sb2NrKCZwcml2LT5wb3J0X211dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5jYXBzLm51bV9wb3J0czsgaSsrKQorCQlkZXYtPmNhcHMucG9zc2libGVfdHlwZVtpICsgMV0gPSBwb3NzX3R5cGVzW2ldOworCWVyciA9IG1seDRfY2hhbmdlX3BvcnRfdHlwZXMoZGV2LCB0eXBlcyk7CisJbWx4NF9zdGFydF9zZW5zZShkZXYpOworCW11dGV4X3VubG9jaygmcHJpdi0+cG9ydF9tdXRleCk7CisKKwlyZXR1cm4gZXJyOworfQorCiBpbnQgbWx4NF9yZXN0YXJ0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgbWx4NF9kZXYJICpkZXYgID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBtbHg0X2Rldl9wZXJzaXN0ZW50ICpwZXJzaXN0ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBtbHg0X2RldgkgKmRldiAgPSBwZXJzaXN0LT5kZXY7CiAJc3RydWN0IG1seDRfcHJpdiAqcHJpdiA9IG1seDRfcHJpdihkZXYpOwogCWludCBudmZzW01MWDRfTUFYX1BPUlRTICsgMV0gPSB7MCwgMCwgMH07CiAJaW50IHBjaV9kZXZfZGF0YSwgZXJyLCB0b3RhbF92ZnM7CiAKIAlwY2lfZGV2X2RhdGEgPSBwcml2LT5wY2lfZGV2X2RhdGE7Ci0JdG90YWxfdmZzID0gZGV2LT5udW1fdmZzOwotCW1lbWNweShudmZzLCBkZXYtPm52ZnMsIHNpemVvZihkZXYtPm52ZnMpKTsKKwl0b3RhbF92ZnMgPSBkZXYtPnBlcnNpc3QtPm51bV92ZnM7CisJbWVtY3B5KG52ZnMsIGRldi0+cGVyc2lzdC0+bnZmcywgc2l6ZW9mKGRldi0+cGVyc2lzdC0+bnZmcykpOwogCiAJbWx4NF91bmxvYWRfb25lKHBkZXYpOwotCWVyciA9IG1seDRfbG9hZF9vbmUocGRldiwgcGNpX2Rldl9kYXRhLCB0b3RhbF92ZnMsIG52ZnMsIHByaXYpOworCWVyciA9IG1seDRfbG9hZF9vbmUocGRldiwgcGNpX2Rldl9kYXRhLCB0b3RhbF92ZnMsIG52ZnMsIHByaXYsIDEpOwogCWlmIChlcnIpIHsKIAkJbWx4NF9lcnIoZGV2LCAiJXM6IEVSUk9SOiBtbHg0X2xvYWRfb25lIGZhaWxlZCwgcGNpX25hbWU9JXMsIGVycj0lZFxuIiwKIAkJCSBfX2Z1bmNfXywgcGNpX25hbWUocGRldiksIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCisJZXJyID0gcmVzdG9yZV9jdXJyZW50X3BvcnRfdHlwZXMoZGV2LCBkZXYtPnBlcnNpc3QtPmN1cnJfcG9ydF90eXBlLAorCQkJCQkgZGV2LT5wZXJzaXN0LT5jdXJyX3BvcnRfcG9zc190eXBlKTsKKwlpZiAoZXJyKQorCQltbHg0X2VycihkZXYsICJjb3VsZCBub3QgcmVzdG9yZSBvcmlnaW5hbCBwb3J0IHR5cGVzICglZClcbiIsCisJCQkgZXJyKTsKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTMyNTcsMjMgKzM1MjksNzkgQEAKIHN0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IG1seDRfcGNpX2Vycl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkJICAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKIHsKLQltbHg0X3VubG9hZF9vbmUocGRldik7CisJc3RydWN0IG1seDRfZGV2X3BlcnNpc3RlbnQgKnBlcnNpc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKLQlyZXR1cm4gc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlID8KLQkJUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVCA6IFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7CisJbWx4NF9lcnIocGVyc2lzdC0+ZGV2LCAibWx4NF9wY2lfZXJyX2RldGVjdGVkIHdhcyBjYWxsZWRcbiIpOworCW1seDRfZW50ZXJfZXJyb3Jfc3RhdGUocGVyc2lzdCk7CisKKwltdXRleF9sb2NrKCZwZXJzaXN0LT5pbnRlcmZhY2Vfc3RhdGVfbXV0ZXgpOworCWlmIChwZXJzaXN0LT5pbnRlcmZhY2Vfc3RhdGUgJiBNTFg0X0lOVEVSRkFDRV9TVEFURV9VUCkKKwkJbWx4NF91bmxvYWRfb25lKHBkZXYpOworCisJbXV0ZXhfdW5sb2NrKCZwZXJzaXN0LT5pbnRlcmZhY2Vfc3RhdGVfbXV0ZXgpOworCWlmIChzdGF0ZSA9PSBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUpCisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOwogfQogCiBzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBtbHg0X3BjaV9zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBtbHg0X2RldgkgKmRldiAgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG1seDRfZGV2X3BlcnNpc3RlbnQgKnBlcnNpc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG1seDRfZGV2CSAqZGV2ICA9IHBlcnNpc3QtPmRldjsKIAlzdHJ1Y3QgbWx4NF9wcml2ICpwcml2ID0gbWx4NF9wcml2KGRldik7CiAJaW50ICAgICAgICAgICAgICAgcmV0OworCWludCBudmZzW01MWDRfTUFYX1BPUlRTICsgMV0gPSB7MCwgMCwgMH07CisJaW50IHRvdGFsX3ZmczsKIAotCXJldCA9IF9fbWx4NF9pbml0X29uZShwZGV2LCBwcml2LT5wY2lfZGV2X2RhdGEsIHByaXYpOworCW1seDRfZXJyKGRldiwgIm1seDRfcGNpX3Nsb3RfcmVzZXQgd2FzIGNhbGxlZFxuIik7CisJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJldCkgeworCQltbHg0X2VycihkZXYsICJDYW4gbm90IHJlLWVuYWJsZSBkZXZpY2UsIHJldD0lZFxuIiwgcmV0KTsKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKKwl0b3RhbF92ZnMgPSBkZXYtPnBlcnNpc3QtPm51bV92ZnM7CisJbWVtY3B5KG52ZnMsIGRldi0+cGVyc2lzdC0+bnZmcywgc2l6ZW9mKGRldi0+cGVyc2lzdC0+bnZmcykpOworCisJbXV0ZXhfbG9jaygmcGVyc2lzdC0+aW50ZXJmYWNlX3N0YXRlX211dGV4KTsKKwlpZiAoIShwZXJzaXN0LT5pbnRlcmZhY2Vfc3RhdGUgJiBNTFg0X0lOVEVSRkFDRV9TVEFURV9VUCkpIHsKKwkJcmV0ID0gbWx4NF9sb2FkX29uZShwZGV2LCBwcml2LT5wY2lfZGV2X2RhdGEsIHRvdGFsX3ZmcywgbnZmcywKKwkJCQkgICAgcHJpdiwgMSk7CisJCWlmIChyZXQpIHsKKwkJCW1seDRfZXJyKGRldiwgIiVzOiBtbHg0X2xvYWRfb25lIGZhaWxlZCwgcmV0PSVkXG4iLAorCQkJCSBfX2Z1bmNfXywgIHJldCk7CisJCQlnb3RvIGVuZDsKKwkJfQorCisJCXJldCA9IHJlc3RvcmVfY3VycmVudF9wb3J0X3R5cGVzKGRldiwgZGV2LT5wZXJzaXN0LT4KKwkJCQkJCSBjdXJyX3BvcnRfdHlwZSwgZGV2LT5wZXJzaXN0LT4KKwkJCQkJCSBjdXJyX3BvcnRfcG9zc190eXBlKTsKKwkJaWYgKHJldCkKKwkJCW1seDRfZXJyKGRldiwgImNvdWxkIG5vdCByZXN0b3JlIG9yaWdpbmFsIHBvcnQgdHlwZXMgKCVkKVxuIiwgcmV0KTsKKwl9CitlbmQ6CisJbXV0ZXhfdW5sb2NrKCZwZXJzaXN0LT5pbnRlcmZhY2Vfc3RhdGVfbXV0ZXgpOwogCiAJcmV0dXJuIHJldCA/IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1QgOiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CiB9CiAKK3N0YXRpYyB2b2lkIG1seDRfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG1seDRfZGV2X3BlcnNpc3RlbnQgKnBlcnNpc3QgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwltbHg0X2luZm8ocGVyc2lzdC0+ZGV2LCAibWx4NF9zaHV0ZG93biB3YXMgY2FsbGVkXG4iKTsKKwltdXRleF9sb2NrKCZwZXJzaXN0LT5pbnRlcmZhY2Vfc3RhdGVfbXV0ZXgpOworCWlmIChwZXJzaXN0LT5pbnRlcmZhY2Vfc3RhdGUgJiBNTFg0X0lOVEVSRkFDRV9TVEFURV9VUCkKKwkJbWx4NF91bmxvYWRfb25lKHBkZXYpOworCW11dGV4X3VubG9jaygmcGVyc2lzdC0+aW50ZXJmYWNlX3N0YXRlX211dGV4KTsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgbWx4NF9lcnJfaGFuZGxlciA9IHsKIAkuZXJyb3JfZGV0ZWN0ZWQgPSBtbHg0X3BjaV9lcnJfZGV0ZWN0ZWQsCiAJLnNsb3RfcmVzZXQgICAgID0gbWx4NF9wY2lfc2xvdF9yZXNldCwKQEAgLTMyODMsNyArMzYxMSw3IEBACiAJLm5hbWUJCT0gRFJWX05BTUUsCiAJLmlkX3RhYmxlCT0gbWx4NF9wY2lfdGFibGUsCiAJLnByb2JlCQk9IG1seDRfaW5pdF9vbmUsCi0JLnNodXRkb3duCT0gbWx4NF91bmxvYWRfb25lLAorCS5zaHV0ZG93bgk9IG1seDRfc2h1dGRvd24sCiAJLnJlbW92ZQkJPSBtbHg0X3JlbW92ZV9vbmUsCiAJLmVycl9oYW5kbGVyICAgID0gJm1seDRfZXJyX2hhbmRsZXIsCiB9OwpAQCAtMzMzNSw3ICszNjYzLDYgQEAKIAlpZiAobWx4NF92ZXJpZnlfcGFyYW1zKCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWx4NF9jYXRhc19pbml0KCk7CiAKIAltbHg0X3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoIm1seDQiKTsKIAlpZiAoIW1seDRfd3EpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21jZy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tY2cuYwppbmRleCBhMzg2N2U3Li5iZDllYTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21jZy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWNnLmMKQEAgLTEzMTgsNiArMTMxOCw5IEBACiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tY2dfdGFibGUubXV0ZXgpOwogCiAJbWx4NF9mcmVlX2NtZF9tYWlsYm94KGRldiwgbWFpbGJveCk7CisJaWYgKGVyciAmJiBkZXYtPnBlcnNpc3QtPnN0YXRlICYgTUxYNF9ERVZJQ0VfU1RBVEVfSU5URVJOQUxfRVJST1IpCisJCS8qIEluIGNhc2UgZGV2aWNlIGlzIHVuZGVyIGFuIGVycm9yLCByZXR1cm4gc3VjY2VzcyBhcyBhIGNsb3NpbmcgY29tbWFuZCAqLworCQllcnIgPSAwOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTEzNDcsNiArMTM1MCw5IEBACiAJCSAgICAgICBNTFg0X0NNRF9XUkFQUEVEKTsKIAogCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYsIG1haWxib3gpOworCWlmIChlcnIgJiYgIWF0dGFjaCAmJgorCSAgICBkZXYtPnBlcnNpc3QtPnN0YXRlICYgTUxYNF9ERVZJQ0VfU1RBVEVfSU5URVJOQUxfRVJST1IpCisJCWVyciA9IDA7CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tbHg0LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21seDQuaAppbmRleCBiZGQ0ZWVhLi4xNDA5ZDBjZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWx4NC5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbWx4NC5oCkBAIC04NSw3ICs4NSw5IEBACiAJTUxYNF9DTFJfSU5UX1NJWkUJPSAweDAwMDA4LAogCU1MWDRfU0xBVkVfQ09NTV9CQVNFCT0gMHgwLAogCU1MWDRfQ09NTV9QQUdFU0laRQk9IDB4MTAwMCwKLQlNTFg0X0NMT0NLX1NJWkUJCT0gMHgwMDAwOAorCU1MWDRfQ0xPQ0tfU0laRQkJPSAweDAwMDA4LAorCU1MWDRfQ09NTV9DSEFOX0NBUFMJPSAweDgsCisJTUxYNF9DT01NX0NIQU5fRkxBR1MJPSAweGMKIH07CiAKIGVudW0gewpAQCAtMTIwLDYgKzEyMiwxMCBAQAogfTsKIAogI2RlZmluZSBNTFg0X0NPTU1fVElNRQkJMTAwMDAKKyNkZWZpbmUgTUxYNF9DT01NX09GRkxJTkVfVElNRV9PVVQgMzAwMDAKKyNkZWZpbmUgTUxYNF9DT01NX0NNRF9OQV9PUCAgICAweDAKKworCiBlbnVtIHsKIAlNTFg0X0NPTU1fQ01EX1JFU0VULAogCU1MWDRfQ09NTV9DTURfVkhDUjAsCkBAIC0xOTAsNiArMTk2LDcgQEAKIHN0cnVjdCBtbHg0X3ZoY3JfY21kIHsKIAlfX2JlNjQgaW5fcGFyYW07CiAJX19iZTMyIGluX21vZGlmaWVyOworCXUzMiByZXNlcnZlZDE7CiAJX19iZTY0IG91dF9wYXJhbTsKIAlfX2JlMTYgdG9rZW47CiAJdTE2IHJlc2VydmVkOwpAQCAtMjIxLDIxICsyMjgsMjQgQEAKICNkZWZpbmUgbWx4NF9kYmcobWRldiwgZm9ybWF0LCAuLi4pCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCWlmIChtbHg0X2RlYnVnX2xldmVsKQkJCQkJCVwKLQkJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmKG1kZXYpLT5wZGV2LT5kZXYsIGZvcm1hdCwJXAorCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsCQkJCQlcCisJCQkgICAmKG1kZXYpLT5wZXJzaXN0LT5wZGV2LT5kZXYsIGZvcm1hdCwJCVwKIAkJCSAgICMjX19WQV9BUkdTX18pOwkJCQlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIG1seDRfZXJyKG1kZXYsIGZvcm1hdCwgLi4uKQkJCQkJXAotCWRldl9lcnIoJihtZGV2KS0+cGRldi0+ZGV2LCBmb3JtYXQsICMjX19WQV9BUkdTX18pCisJZGV2X2VycigmKG1kZXYpLT5wZXJzaXN0LT5wZGV2LT5kZXYsIGZvcm1hdCwgIyNfX1ZBX0FSR1NfXykKICNkZWZpbmUgbWx4NF9pbmZvKG1kZXYsIGZvcm1hdCwgLi4uKQkJCQkJXAotCWRldl9pbmZvKCYobWRldiktPnBkZXYtPmRldiwgZm9ybWF0LCAjI19fVkFfQVJHU19fKQorCWRldl9pbmZvKCYobWRldiktPnBlcnNpc3QtPnBkZXYtPmRldiwgZm9ybWF0LCAjI19fVkFfQVJHU19fKQogI2RlZmluZSBtbHg0X3dhcm4obWRldiwgZm9ybWF0LCAuLi4pCQkJCQlcCi0JZGV2X3dhcm4oJihtZGV2KS0+cGRldi0+ZGV2LCBmb3JtYXQsICMjX19WQV9BUkdTX18pCisJZGV2X3dhcm4oJihtZGV2KS0+cGVyc2lzdC0+cGRldi0+ZGV2LCBmb3JtYXQsICMjX19WQV9BUkdTX18pCiAKIGV4dGVybiBpbnQgbWx4NF9sb2dfbnVtX21nbV9lbnRyeV9zaXplOwogZXh0ZXJuIGludCBsb2dfbXR0c19wZXJfc2VnOworZXh0ZXJuIGludCBtbHg0X2ludGVybmFsX2Vycl9yZXNldDsKIAotI2RlZmluZSBNTFg0X01BWF9OVU1fU0xBVkVTCShNTFg0X01BWF9OVU1fUEYgKyBNTFg0X01BWF9OVU1fVkYpCisjZGVmaW5lIE1MWDRfTUFYX05VTV9TTEFWRVMJKG1pbihNTFg0X01BWF9OVU1fUEYgKyBNTFg0X01BWF9OVU1fVkYsIFwKKwkJCQkgICAgIE1MWDRfTUZVTkNfTUFYKSkKICNkZWZpbmUgQUxMX1NMQVZFUyAweGZmCiAKIHN0cnVjdCBtbHg0X2JpdG1hcCB7CkBAIC02MDYsNyArNjE2LDYgQEAKIHN0cnVjdCBtbHg0X2NtZCB7CiAJc3RydWN0IHBjaV9wb29sCSAgICAgICAqcG9vbDsKIAl2b2lkIF9faW9tZW0JICAgICAgICpoY3I7Ci0Jc3RydWN0IG11dGV4CQloY3JfbXV0ZXg7CiAJc3RydWN0IG11dGV4CQlzbGF2ZV9jbWRfbXV0ZXg7CiAJc3RydWN0IHNlbWFwaG9yZQlwb2xsX3NlbTsKIAlzdHJ1Y3Qgc2VtYXBob3JlCWV2ZW50X3NlbTsKQEAgLTg3Nyw2ICs4ODYsOCBAQAogCWludAkJCXJlc2VydmVkX210dHM7CiAJaW50CQkJZnNfaGFzaF9tb2RlOwogCXU4IHZpcnQycGh5c19wa2V5W01MWDRfTUZVTkNfTUFYXVtNTFg0X01BWF9QT1JUU11bTUxYNF9NQVhfUE9SVF9QS0VZU107CisJc3RydWN0IG1seDRfcG9ydF9tYXAJdjJwOyAvKiBjYWNoZWQgcG9ydCBtYXBwaW5nIGNvbmZpZ3VyYXRpb24gKi8KKwlzdHJ1Y3QgbXV0ZXgJCWJvbmRfbXV0ZXg7IC8qIGZvciBib25kIG1vZGUgKi8KIAlfX2JlNjQJCQlzbGF2ZV9ub2RlX2d1aWRzW01MWDRfTUZVTkNfTUFYXTsKIAogCWF0b21pY190CQlvcHJlcV9jb3VudDsKQEAgLTk5NCw3ICsxMDA1LDggQEAKIAogdm9pZCBtbHg0X3N0YXJ0X2NhdGFzX3BvbGwoc3RydWN0IG1seDRfZGV2ICpkZXYpOwogdm9pZCBtbHg0X3N0b3BfY2F0YXNfcG9sbChzdHJ1Y3QgbWx4NF9kZXYgKmRldik7Ci12b2lkIG1seDRfY2F0YXNfaW5pdCh2b2lkKTsKK2ludCBtbHg0X2NhdGFzX2luaXQoc3RydWN0IG1seDRfZGV2ICpkZXYpOwordm9pZCBtbHg0X2NhdGFzX2VuZChzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CiBpbnQgbWx4NF9yZXN0YXJ0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiBpbnQgbWx4NF9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG1seDRfZGV2ICpkZXYpOwogdm9pZCBtbHg0X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKQEAgLTExNjAsMTMgKzExNzIsMTQgQEAKIGludCBtbHg0X2NtZF9pbml0KHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIHZvaWQgbWx4NF9jbWRfY2xlYW51cChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IGNsZWFudXBfbWFzayk7CiBpbnQgbWx4NF9tdWx0aV9mdW5jX2luaXQoc3RydWN0IG1seDRfZGV2ICpkZXYpOworaW50IG1seDRfQVJNX0NPTU1fQ0hBTk5FTChzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CiB2b2lkIG1seDRfbXVsdGlfZnVuY19jbGVhbnVwKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIHZvaWQgbWx4NF9jbWRfZXZlbnQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHUxNiB0b2tlbiwgdTggc3RhdHVzLCB1NjQgb3V0X3BhcmFtKTsKIGludCBtbHg0X2NtZF91c2VfZXZlbnRzKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIHZvaWQgbWx4NF9jbWRfdXNlX3BvbGxpbmcoc3RydWN0IG1seDRfZGV2ICpkZXYpOwogCiBpbnQgbWx4NF9jb21tX2NtZChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTggY21kLCB1MTYgcGFyYW0sCi0JCSAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKKwkJICB1MTYgb3AsIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7CiAKIHZvaWQgbWx4NF9jcV90YXNrbGV0X2NiKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiB2b2lkIG1seDRfY3FfY29tcGxldGlvbihzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgdTMyIGNxbik7CkBAIC0xMTc2LDcgKzExODksNyBAQAogCiB2b2lkIG1seDRfc3JxX2V2ZW50KHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1MzIgc3JxbiwgaW50IGV2ZW50X3R5cGUpOwogCi12b2lkIG1seDRfaGFuZGxlX2NhdGFzX2VycihzdHJ1Y3QgbWx4NF9kZXYgKmRldik7Cit2b2lkIG1seDRfZW50ZXJfZXJyb3Jfc3RhdGUoc3RydWN0IG1seDRfZGV2X3BlcnNpc3RlbnQgKnBlcnNpc3QpOwogCiBpbnQgbWx4NF9TRU5TRV9QT1JUKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgcG9ydCwKIAkJICAgIGVudW0gbWx4NF9wb3J0X3R5cGUgKnR5cGUpOwpAQCAtMTM1NCw2ICsxMzY3LDcgQEAKIC8qIFJldHVybnMgdGhlIFZGIGluZGV4IG9mIHNsYXZlICovCiBpbnQgbWx4NF9nZXRfdmZfaW5keChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHNsYXZlKTsKIGludCBtbHg0X2NvbmZpZ19tYWRfZGVtdXgoc3RydWN0IG1seDRfZGV2ICpkZXYpOworaW50IG1seDRfZG9fYm9uZChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgYm9vbCBlbmFibGUpOwogCiBlbnVtIG1seDRfem9uZV9mbGFncyB7CiAJTUxYNF9aT05FX0FMTE9XX0FMTE9DX0ZST01fTE9XRVJfUFJJTwk9IDFVTCA8PCAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tbHg0X2VuLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21seDRfZW4uaAppbmRleCA5NDRhMTEyLi4yYTgyNjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21seDRfZW4uaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21seDRfZW4uaApAQCAtMzkwLDYgKzM5MCw3IEBACiAJc3RydWN0IHBjaV9kZXYJCSpwZGV2OwogCXN0cnVjdCBtdXRleAkJc3RhdGVfbG9jazsKIAlzdHJ1Y3QgbmV0X2RldmljZSAgICAgICAqcG5kZXZbTUxYNF9NQVhfUE9SVFMgKyAxXTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAgICAgICAqdXBwZXJbTUxYNF9NQVhfUE9SVFMgKyAxXTsKIAl1MzIgICAgICAgICAgICAgICAgICAgICBwb3J0X2NudDsKIAlib29sCQkJZGV2aWNlX3VwOwogCXN0cnVjdCBtbHg0X2VuX3Byb2ZpbGUgIHByb2ZpbGU7CkBAIC00MTAsNiArNDExLDcgQEAKIAl1bnNpZ25lZCBsb25nCQlvdmVyZmxvd19wZXJpb2Q7CiAJc3RydWN0IHB0cF9jbG9jawkqcHRwX2Nsb2NrOwogCXN0cnVjdCBwdHBfY2xvY2tfaW5mbwlwdHBfY2xvY2tfaW5mbzsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJbmI7CiB9OwogCiAKQEAgLTg0NSw2ICs4NDcsOSBAQAogCQkJIHN0cnVjdCBod3RzdGFtcF9jb25maWcgdHNfY29uZmlnLAogCQkJIG5ldGRldl9mZWF0dXJlc190IG5ld19mZWF0dXJlcyk7CiAKK2ludCBtbHg0X2VuX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKTsKKwogLyoKICAqIEZ1bmN0aW9ucyBmb3IgdGltZSBzdGFtcGluZwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21yLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L21yLmMKaW5kZXggNzA5NGE5Yy4uNzhmNTFlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9tci5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvbXIuYwpAQCAtNTk4LDE0ICs1OTgsMTEgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JbXB0X2VudHJ5LT5zdGFydCAgICAgICA9IGNwdV90b19iZTY0KG1yLT5pb3ZhKTsKLQltcHRfZW50cnktPmxlbmd0aCAgICAgID0gY3B1X3RvX2JlNjQobXItPnNpemUpOwotCW1wdF9lbnRyeS0+ZW50aXR5X3NpemUgPSBjcHVfdG9fYmUzMihtci0+bXR0LnBhZ2Vfc2hpZnQpOwotCi0JbXB0X2VudHJ5LT5wZF9mbGFncyAmPSBjcHVfdG9fYmUzMihNTFg0X01QVF9QRF9NQVNLIHwKLQkJCQkJICAgTUxYNF9NUFRfUERfRkxBR19FTl9JTlYpOwotCW1wdF9lbnRyeS0+ZmxhZ3MgICAgJj0gY3B1X3RvX2JlMzIoTUxYNF9NUFRfRkxBR19GUkVFIHwKLQkJCQkJICAgTUxYNF9NUFRfRkxBR19TV19PV05TKTsKKwltcHRfZW50cnktPnN0YXJ0ICAgICAgID0gY3B1X3RvX2JlNjQoaW92YSk7CisJbXB0X2VudHJ5LT5sZW5ndGggICAgICA9IGNwdV90b19iZTY0KHNpemUpOworCW1wdF9lbnRyeS0+ZW50aXR5X3NpemUgPSBjcHVfdG9fYmUzMihwYWdlX3NoaWZ0KTsKKwltcHRfZW50cnktPmZsYWdzICAgICY9IH4oY3B1X3RvX2JlMzIoTUxYNF9NUFRfRkxBR19GUkVFIHwKKwkJCQkJICAgTUxYNF9NUFRfRkxBR19TV19PV05TKSk7CiAJaWYgKG1yLT5tdHQub3JkZXIgPCAwKSB7CiAJCW1wdF9lbnRyeS0+ZmxhZ3MgfD0gY3B1X3RvX2JlMzIoTUxYNF9NUFRfRkxBR19QSFlTSUNBTCk7CiAJCW1wdF9lbnRyeS0+bXR0X2FkZHIgPSAwOwpAQCAtNzA4LDEzICs3MDUsMTMgQEAKIAlpZiAoIW10dHMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoJmRldi0+cGRldi0+ZGV2LCBkbWFfaGFuZGxlLAorCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZkZXYtPnBlcnNpc3QtPnBkZXYtPmRldiwgZG1hX2hhbmRsZSwKIAkJCQlucGFnZXMgKiBzaXplb2YgKHU2NCksIERNQV9UT19ERVZJQ0UpOwogCiAJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgKytpKQogCQltdHRzW2ldID0gY3B1X3RvX2JlNjQocGFnZV9saXN0W2ldIHwgTUxYNF9NVFRfRkxBR19QUkVTRU5UKTsKIAotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKCZkZXYtPnBkZXYtPmRldiwgZG1hX2hhbmRsZSwKKwlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSgmZGV2LT5wZXJzaXN0LT5wZGV2LT5kZXYsIGRtYV9oYW5kbGUsCiAJCQkJICAgbnBhZ2VzICogc2l6ZW9mICh1NjQpLCBETUFfVE9fREVWSUNFKTsKIAogCXJldHVybiAwOwpAQCAtMTAyMCwxMyArMTAxNywxMyBAQAogCS8qIE1ha2Ugc3VyZSBNUFQgc3RhdHVzIGlzIHZpc2libGUgYmVmb3JlIHdyaXRpbmcgTVRUIGVudHJpZXMgKi8KIAl3bWIoKTsKIAotCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZkZXYtPnBkZXYtPmRldiwgZm1yLT5kbWFfaGFuZGxlLAorCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZkZXYtPnBlcnNpc3QtPnBkZXYtPmRldiwgZm1yLT5kbWFfaGFuZGxlLAogCQkJCW5wYWdlcyAqIHNpemVvZih1NjQpLCBETUFfVE9fREVWSUNFKTsKIAogCWZvciAoaSA9IDA7IGkgPCBucGFnZXM7ICsraSkKIAkJZm1yLT5tdHRzW2ldID0gY3B1X3RvX2JlNjQocGFnZV9saXN0W2ldIHwgTUxYNF9NVFRfRkxBR19QUkVTRU5UKTsKIAotCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKCZkZXYtPnBkZXYtPmRldiwgZm1yLT5kbWFfaGFuZGxlLAorCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKCZkZXYtPnBlcnNpc3QtPnBkZXYtPmRldiwgZm1yLT5kbWFfaGFuZGxlLAogCQkJCSAgIG5wYWdlcyAqIHNpemVvZih1NjQpLCBETUFfVE9fREVWSUNFKTsKIAogCWZtci0+bXB0LT5rZXkgICAgPSBjcHVfdG9fYmUzMihrZXkpOwpAQCAtMTE1NSw3ICsxMTUyLDcgQEAKIAogaW50IG1seDRfU1lOQ19UUFQoc3RydWN0IG1seDRfZGV2ICpkZXYpCiB7Ci0JcmV0dXJuIG1seDRfY21kKGRldiwgMCwgMCwgMCwgTUxYNF9DTURfU1lOQ19UUFQsIDEwMDAsCi0JCQlNTFg0X0NNRF9OQVRJVkUpOworCXJldHVybiBtbHg0X2NtZChkZXYsIDAsIDAsIDAsIE1MWDRfQ01EX1NZTkNfVFBULAorCQkJTUxYNF9DTURfVElNRV9DTEFTU19BLCBNTFg0X0NNRF9OQVRJVkUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobWx4NF9TWU5DX1RQVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L3BkLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L3BkLmMKaW5kZXggNzQyMTYwNzEuLjYwOWM1OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvcGQuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L3BkLmMKQEAgLTE1MSwxMSArMTUxLDEzIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKG1seDRfaXNfc2xhdmUoZGV2KSkKLQkJb2Zmc2V0ID0gdWFyLT5pbmRleCAlICgoaW50KSBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgMikgLworCQlvZmZzZXQgPSB1YXItPmluZGV4ICUgKChpbnQpcGNpX3Jlc291cmNlX2xlbihkZXYtPnBlcnNpc3QtPnBkZXYsCisJCQkJCQkJICAgICAyKSAvCiAJCQkJICAgICAgIGRldi0+Y2Fwcy51YXJfcGFnZV9zaXplKTsKIAllbHNlCiAJCW9mZnNldCA9IHVhci0+aW5kZXg7Ci0JdWFyLT5wZm4gPSAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgMikgPj4gUEFHRV9TSElGVCkgKyBvZmZzZXQ7CisJdWFyLT5wZm4gPSAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGVyc2lzdC0+cGRldiwgMikgPj4gUEFHRV9TSElGVCkKKwkJICAgICsgb2Zmc2V0OwogCXVhci0+bWFwID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMiw3ICsyMTQsNiBAQAogCQlsaXN0X2FkZCgmdWFyLT5iZl9saXN0LCAmcHJpdi0+YmZfbGlzdCk7CiAJfQogCi0JYmYtPnVhciA9IHVhcjsKIAlpZHggPSBmZnoodWFyLT5mcmVlX2JmX2JtYXApOwogCXVhci0+ZnJlZV9iZl9ibWFwIHw9IDEgPDwgaWR4OwogCWJmLT51YXIgPSB1YXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L3BvcnQuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvcG9ydC5jCmluZGV4IDMwZWIxZWEuLjlmMjY4ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvcG9ydC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvcG9ydC5jCkBAIC01NTMsOSArNTUzLDkgQEAKIAkJc2xhdmVzX3Bwb3J0X2FjdHYgPSBtbHg0X3BoeXNfdG9fc2xhdmVzX3Bwb3J0X2FjdHYoCiAJCQkJICAgIGRldiwgJmV4Y2x1c2l2ZV9wb3J0cyk7CiAJCXNsYXZlX2dpZCAtPSBiaXRtYXBfd2VpZ2h0KHNsYXZlc19wcG9ydF9hY3R2LnNsYXZlcywKLQkJCQkJICAgZGV2LT5udW1fdmZzICsgMSk7CisJCQkJCSAgIGRldi0+cGVyc2lzdC0+bnVtX3ZmcyArIDEpOwogCX0KLQl2ZnMgPSBiaXRtYXBfd2VpZ2h0KHNsYXZlc19wcG9ydC5zbGF2ZXMsIGRldi0+bnVtX3ZmcyArIDEpIC0gMTsKKwl2ZnMgPSBiaXRtYXBfd2VpZ2h0KHNsYXZlc19wcG9ydC5zbGF2ZXMsIGRldi0+cGVyc2lzdC0+bnVtX3ZmcyArIDEpIC0gMTsKIAlpZiAoc2xhdmVfZ2lkIDw9ICgoTUxYNF9ST0NFX01BWF9HSURTIC0gTUxYNF9ST0NFX1BGX0dJRFMpICUgdmZzKSkKIAkJcmV0dXJuICgoTUxYNF9ST0NFX01BWF9HSURTIC0gTUxYNF9ST0NFX1BGX0dJRFMpIC8gdmZzKSArIDE7CiAJcmV0dXJuIChNTFg0X1JPQ0VfTUFYX0dJRFMgLSBNTFg0X1JPQ0VfUEZfR0lEUykgLyB2ZnM7CkBAIC01OTAsMTAgKzU5MCwxMCBAQAogCQlzbGF2ZXNfcHBvcnRfYWN0diA9IG1seDRfcGh5c190b19zbGF2ZXNfcHBvcnRfYWN0digKIAkJCQkgICAgZGV2LCAmZXhjbHVzaXZlX3BvcnRzKTsKIAkJc2xhdmVfZ2lkIC09IGJpdG1hcF93ZWlnaHQoc2xhdmVzX3Bwb3J0X2FjdHYuc2xhdmVzLAotCQkJCQkgICBkZXYtPm51bV92ZnMgKyAxKTsKKwkJCQkJICAgZGV2LT5wZXJzaXN0LT5udW1fdmZzICsgMSk7CiAJfQogCWdpZHMgPSBNTFg0X1JPQ0VfTUFYX0dJRFMgLSBNTFg0X1JPQ0VfUEZfR0lEUzsKLQl2ZnMgPSBiaXRtYXBfd2VpZ2h0KHNsYXZlc19wcG9ydC5zbGF2ZXMsIGRldi0+bnVtX3ZmcyArIDEpIC0gMTsKKwl2ZnMgPSBiaXRtYXBfd2VpZ2h0KHNsYXZlc19wcG9ydC5zbGF2ZXMsIGRldi0+cGVyc2lzdC0+bnVtX3ZmcyArIDEpIC0gMTsKIAlpZiAoc2xhdmVfZ2lkIDw9IGdpZHMgJSB2ZnMpCiAJCXJldHVybiBNTFg0X1JPQ0VfUEZfR0lEUyArICgoZ2lkcyAvIHZmcykgKyAxKSAqIChzbGF2ZV9naWQgLSAxKTsKIApAQCAtNjQ0LDcgKzY0NCw3IEBACiAJaW50IG51bV9ldGhfcG9ydHMsIGVycjsKIAlpbnQgaTsKIAotCWlmIChzbGF2ZSA8IDAgfHwgc2xhdmUgPiBkZXYtPm51bV92ZnMpCisJaWYgKHNsYXZlIDwgMCB8fCBzbGF2ZSA+IGRldi0+cGVyc2lzdC0+bnVtX3ZmcykKIAkJcmV0dXJuOwogCiAJYWN0dl9wb3J0cyA9IG1seDRfZ2V0X2FjdGl2ZV9wb3J0cyhkZXYsIHNsYXZlKTsKQEAgLTEyMTQsNyArMTIxNCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJc2xhdmVzX3Bwb3J0ID0gbWx4NF9waHlzX3RvX3NsYXZlc19wcG9ydChkZXYsIHBvcnQpOwotCW51bV92ZnMgPSBiaXRtYXBfd2VpZ2h0KHNsYXZlc19wcG9ydC5zbGF2ZXMsIGRldi0+bnVtX3ZmcyArIDEpIC0gMTsKKwludW1fdmZzID0gYml0bWFwX3dlaWdodChzbGF2ZXNfcHBvcnQuc2xhdmVzLAorCQkJCWRldi0+cGVyc2lzdC0+bnVtX3ZmcyArIDEpIC0gMTsKIAogCWZvciAoaSA9IDA7IGkgPCBNTFg0X1JPQ0VfTUFYX0dJRFM7IGkrKykgewogCQlpZiAoIW1lbWNtcChwcml2LT5wb3J0W3BvcnRdLmdpZF90YWJsZS5yb2NlX2dpZHNbaV0ucmF3LCBnaWQsCkBAIC0xMjU4LDcgKzEyNTksNyBAQAogCQkJCQkJCWRldiwgJmV4Y2x1c2l2ZV9wb3J0cyk7CiAJCQkJbnVtX3Zmc19iZWZvcmUgKz0gYml0bWFwX3dlaWdodCgKIAkJCQkJCXNsYXZlc19wcG9ydF9hY3R2LnNsYXZlcywKLQkJCQkJCWRldi0+bnVtX3ZmcyArIDEpOworCQkJCQkJZGV2LT5wZXJzaXN0LT5udW1fdmZzICsgMSk7CiAJCQl9CiAKIAkJCS8qIGNhbmRpZGF0ZV9zbGF2ZV9naWQgaXNuJ3QgbmVjZXNzYXJpbHkgdGhlIGNvcnJlY3Qgc2xhdmUsIGJ1dApAQCAtMTI4OCw3ICsxMjg5LDcgQEAKIAkJCQkJCWRldiwgJmV4Y2x1c2l2ZV9wb3J0cyk7CiAJCQkJc2xhdmVfZ2lkICs9IGJpdG1hcF93ZWlnaHQoCiAJCQkJCQlzbGF2ZXNfcHBvcnRfYWN0di5zbGF2ZXMsCi0JCQkJCQlkZXYtPm51bV92ZnMgKyAxKTsKKwkJCQkJCWRldi0+cGVyc2lzdC0+bnVtX3ZmcyArIDEpOwogCQkJfQogCQl9CiAJCSpzbGF2ZV9pZCA9IHNsYXZlX2dpZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvcXAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvcXAuYwppbmRleCAxNTg2ZWNjLi4yYmI4NTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L3FwLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9xcC5jCkBAIC04ODIsNiArODgyLDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGF0ZXMpIC0gMTsgaSsrKSB7CiAJCWNvbnRleHQtPmZsYWdzICY9IGNwdV90b19iZTMyKH4oMHhmIDw8IDI4KSk7CiAJCWNvbnRleHQtPmZsYWdzIHw9IGNwdV90b19iZTMyKHN0YXRlc1tpICsgMV0gPDwgMjgpOworCQlpZiAoc3RhdGVzW2kgKyAxXSAhPSBNTFg0X1FQX1NUQVRFX1JUUikKKwkJCWNvbnRleHQtPnBhcmFtczIgJj0gfk1MWDRfUVBfQklUX0ZQUDsKIAkJZXJyID0gbWx4NF9xcF9tb2RpZnkoZGV2LCBtdHQsIHN0YXRlc1tpXSwgc3RhdGVzW2kgKyAxXSwKIAkJCQkgICAgIGNvbnRleHQsIDAsIDAsIHFwKTsKIAkJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9yZXNldC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9yZXNldC5jCmluZGV4IGVhMWM2ZDAuLjAwNzZkODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvcmVzZXQuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L3Jlc2V0LmMKQEAgLTc2LDE5ICs3NiwyMSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlwY2llX2NhcCA9IHBjaV9wY2llX2NhcChkZXYtPnBkZXYpOworCXBjaWVfY2FwID0gcGNpX3BjaWVfY2FwKGRldi0+cGVyc2lzdC0+cGRldik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNjQ7ICsraSkgewogCQlpZiAoaSA9PSAyMiB8fCBpID09IDIzKQogCQkJY29udGludWU7Ci0JCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LT5wZGV2LCBpICogNCwgaGNhX2hlYWRlciArIGkpKSB7CisJCWlmIChwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LT5wZXJzaXN0LT5wZGV2LCBpICogNCwKKwkJCQkJICBoY2FfaGVhZGVyICsgaSkpIHsKIAkJCWVyciA9IC1FTk9ERVY7CiAJCQltbHg0X2VycihkZXYsICJDb3VsZG4ndCBzYXZlIEhDQSBQQ0kgaGVhZGVyLCBhYm9ydGluZ1xuIik7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KIAotCXJlc2V0ID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LT5wZGV2LCAwKSArIE1MWDRfUkVTRVRfQkFTRSwKKwlyZXNldCA9IGlvcmVtYXAocGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGVyc2lzdC0+cGRldiwgMCkgKworCQkJTUxYNF9SRVNFVF9CQVNFLAogCQkJTUxYNF9SRVNFVF9TSVpFKTsKIAlpZiAoIXJlc2V0KSB7CiAJCWVyciA9IC1FTk9NRU07CkBAIC0xMjIsOCArMTI0LDggQEAKIAogCWVuZCA9IGppZmZpZXMgKyBNTFg0X1JFU0VUX1RJTUVPVVRfSklGRklFUzsKIAlkbyB7Ci0JCWlmICghcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBQQ0lfVkVORE9SX0lELCAmdmVuZG9yKSAmJgotCQkgICAgdmVuZG9yICE9IDB4ZmZmZikKKwkJaWYgKCFwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBlcnNpc3QtPnBkZXYsIFBDSV9WRU5ET1JfSUQsCisJCQkJCSAgJnZlbmRvcikgJiYgdmVuZG9yICE9IDB4ZmZmZikKIAkJCWJyZWFrOwogCiAJCW1zbGVlcCgxKTsKQEAgLTEzOCwxNCArMTQwLDE2IEBACiAJLyogTm93IHJlc3RvcmUgdGhlIFBDSSBoZWFkZXJzICovCiAJaWYgKHBjaWVfY2FwKSB7CiAJCWRldmN0bCA9IGhjYV9oZWFkZXJbKHBjaWVfY2FwICsgUENJX0VYUF9ERVZDVEwpIC8gNF07Ci0JCWlmIChwY2llX2NhcGFiaWxpdHlfd3JpdGVfd29yZChkZXYtPnBkZXYsIFBDSV9FWFBfREVWQ1RMLAorCQlpZiAocGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQoZGV2LT5wZXJzaXN0LT5wZGV2LAorCQkJCQkgICAgICAgUENJX0VYUF9ERVZDVEwsCiAJCQkJCSAgICAgICBkZXZjdGwpKSB7CiAJCQllcnIgPSAtRU5PREVWOwogCQkJbWx4NF9lcnIoZGV2LCAiQ291bGRuJ3QgcmVzdG9yZSBIQ0EgUENJIEV4cHJlc3MgRGV2aWNlIENvbnRyb2wgcmVnaXN0ZXIsIGFib3J0aW5nXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWxpbmtjdGwgPSBoY2FfaGVhZGVyWyhwY2llX2NhcCArIFBDSV9FWFBfTE5LQ1RMKSAvIDRdOwotCQlpZiAocGNpZV9jYXBhYmlsaXR5X3dyaXRlX3dvcmQoZGV2LT5wZGV2LCBQQ0lfRVhQX0xOS0NUTCwKKwkJaWYgKHBjaWVfY2FwYWJpbGl0eV93cml0ZV93b3JkKGRldi0+cGVyc2lzdC0+cGRldiwKKwkJCQkJICAgICAgIFBDSV9FWFBfTE5LQ1RMLAogCQkJCQkgICAgICAgbGlua2N0bCkpIHsKIAkJCWVyciA9IC1FTk9ERVY7CiAJCQltbHg0X2VycihkZXYsICJDb3VsZG4ndCByZXN0b3JlIEhDQSBQQ0kgRXhwcmVzcyBMaW5rIGNvbnRyb2wgcmVnaXN0ZXIsIGFib3J0aW5nXG4iKTsKQEAgLTE1Nyw3ICsxNjEsOCBAQAogCQlpZiAoaSAqIDQgPT0gUENJX0NPTU1BTkQpCiAJCQljb250aW51ZTsKIAotCQlpZiAocGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYtPnBkZXYsIGkgKiA0LCBoY2FfaGVhZGVyW2ldKSkgeworCQlpZiAocGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYtPnBlcnNpc3QtPnBkZXYsIGkgKiA0LAorCQkJCQkgICBoY2FfaGVhZGVyW2ldKSkgewogCQkJZXJyID0gLUVOT0RFVjsKIAkJCW1seDRfZXJyKGRldiwgIkNvdWxkbid0IHJlc3RvcmUgSENBIHJlZyAleCwgYWJvcnRpbmdcbiIsCiAJCQkJIGkpOwpAQCAtMTY1LDcgKzE3MCw3IEBACiAJCX0KIAl9CiAKLQlpZiAocGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYtPnBkZXYsIFBDSV9DT01NQU5ELAorCWlmIChwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldi0+cGVyc2lzdC0+cGRldiwgUENJX0NPTU1BTkQsCiAJCQkJICAgaGNhX2hlYWRlcltQQ0lfQ09NTUFORCAvIDRdKSkgewogCQllcnIgPSAtRU5PREVWOwogCQltbHg0X2VycihkZXYsICJDb3VsZG4ndCByZXN0b3JlIEhDQSBDT01NQU5ELCBhYm9ydGluZ1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L3Jlc291cmNlX3RyYWNrZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvcmVzb3VyY2VfdHJhY2tlci5jCmluZGV4IDRlZmJkMWUuLjQ4NmUzZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvcmVzb3VyY2VfdHJhY2tlci5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvcmVzb3VyY2VfdHJhY2tlci5jCkBAIC0zMDksMTIgKzMwOSwxMyBAQAogCWludCBhbGxvY2F0ZWQsIGZyZWUsIHJlc2VydmVkLCBndWFyYW50ZWVkLCBmcm9tX2ZyZWU7CiAJaW50IGZyb21fcnN2ZDsKIAotCWlmIChzbGF2ZSA+IGRldi0+bnVtX3ZmcykKKwlpZiAoc2xhdmUgPiBkZXYtPnBlcnNpc3QtPm51bV92ZnMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrKCZyZXNfYWxsb2MtPmFsbG9jX2xvY2spOwogCWFsbG9jYXRlZCA9IChwb3J0ID4gMCkgPwotCQlyZXNfYWxsb2MtPmFsbG9jYXRlZFsocG9ydCAtIDEpICogKGRldi0+bnVtX3ZmcyArIDEpICsgc2xhdmVdIDoKKwkJcmVzX2FsbG9jLT5hbGxvY2F0ZWRbKHBvcnQgLSAxKSAqCisJCShkZXYtPnBlcnNpc3QtPm51bV92ZnMgKyAxKSArIHNsYXZlXSA6CiAJCXJlc19hbGxvYy0+YWxsb2NhdGVkW3NsYXZlXTsKIAlmcmVlID0gKHBvcnQgPiAwKSA/IHJlc19hbGxvYy0+cmVzX3BvcnRfZnJlZVtwb3J0IC0gMV0gOgogCQlyZXNfYWxsb2MtPnJlc19mcmVlOwpAQCAtMzUyLDcgKzM1Myw4IEBACiAJaWYgKCFlcnIpIHsKIAkJLyogZ3JhbnQgdGhlIHJlcXVlc3QgKi8KIAkJaWYgKHBvcnQgPiAwKSB7Ci0JCQlyZXNfYWxsb2MtPmFsbG9jYXRlZFsocG9ydCAtIDEpICogKGRldi0+bnVtX3ZmcyArIDEpICsgc2xhdmVdICs9IGNvdW50OworCQkJcmVzX2FsbG9jLT5hbGxvY2F0ZWRbKHBvcnQgLSAxKSAqCisJCQkoZGV2LT5wZXJzaXN0LT5udW1fdmZzICsgMSkgKyBzbGF2ZV0gKz0gY291bnQ7CiAJCQlyZXNfYWxsb2MtPnJlc19wb3J0X2ZyZWVbcG9ydCAtIDFdIC09IGNvdW50OwogCQkJcmVzX2FsbG9jLT5yZXNfcG9ydF9yc3ZkW3BvcnQgLSAxXSAtPSBmcm9tX3JzdmQ7CiAJCX0gZWxzZSB7CkBAIC0zNzYsMTMgKzM3OCwxNCBAQAogCQkmcHJpdi0+bWZ1bmMubWFzdGVyLnJlc190cmFja2VyLnJlc19hbGxvY1tyZXNfdHlwZV07CiAJaW50IGFsbG9jYXRlZCwgZ3VhcmFudGVlZCwgZnJvbV9yc3ZkOwogCi0JaWYgKHNsYXZlID4gZGV2LT5udW1fdmZzKQorCWlmIChzbGF2ZSA+IGRldi0+cGVyc2lzdC0+bnVtX3ZmcykKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrKCZyZXNfYWxsb2MtPmFsbG9jX2xvY2spOwogCiAJYWxsb2NhdGVkID0gKHBvcnQgPiAwKSA/Ci0JCXJlc19hbGxvYy0+YWxsb2NhdGVkWyhwb3J0IC0gMSkgKiAoZGV2LT5udW1fdmZzICsgMSkgKyBzbGF2ZV0gOgorCQlyZXNfYWxsb2MtPmFsbG9jYXRlZFsocG9ydCAtIDEpICoKKwkJKGRldi0+cGVyc2lzdC0+bnVtX3ZmcyArIDEpICsgc2xhdmVdIDoKIAkJcmVzX2FsbG9jLT5hbGxvY2F0ZWRbc2xhdmVdOwogCWd1YXJhbnRlZWQgPSByZXNfYWxsb2MtPmd1YXJhbnRlZWRbc2xhdmVdOwogCkBAIC0zOTcsNyArNDAwLDggQEAKIAl9CiAKIAlpZiAocG9ydCA+IDApIHsKLQkJcmVzX2FsbG9jLT5hbGxvY2F0ZWRbKHBvcnQgLSAxKSAqIChkZXYtPm51bV92ZnMgKyAxKSArIHNsYXZlXSAtPSBjb3VudDsKKwkJcmVzX2FsbG9jLT5hbGxvY2F0ZWRbKHBvcnQgLSAxKSAqCisJCShkZXYtPnBlcnNpc3QtPm51bV92ZnMgKyAxKSArIHNsYXZlXSAtPSBjb3VudDsKIAkJcmVzX2FsbG9jLT5yZXNfcG9ydF9mcmVlW3BvcnQgLSAxXSArPSBjb3VudDsKIAkJcmVzX2FsbG9jLT5yZXNfcG9ydF9yc3ZkW3BvcnQgLSAxXSArPSBmcm9tX3JzdmQ7CiAJfSBlbHNlIHsKQEAgLTQxNSw3ICs0MTksOCBAQAogCQkJCQkgZW51bSBtbHg0X3Jlc291cmNlIHJlc190eXBlLAogCQkJCQkgaW50IHZmLCBpbnQgbnVtX2luc3RhbmNlcykKIHsKLQlyZXNfYWxsb2MtPmd1YXJhbnRlZWRbdmZdID0gbnVtX2luc3RhbmNlcyAvICgyICogKGRldi0+bnVtX3ZmcyArIDEpKTsKKwlyZXNfYWxsb2MtPmd1YXJhbnRlZWRbdmZdID0gbnVtX2luc3RhbmNlcyAvCisJCQkJICAgICgyICogKGRldi0+cGVyc2lzdC0+bnVtX3ZmcyArIDEpKTsKIAlyZXNfYWxsb2MtPnF1b3RhW3ZmXSA9IChudW1faW5zdGFuY2VzIC8gMikgKyByZXNfYWxsb2MtPmd1YXJhbnRlZWRbdmZdOwogCWlmICh2ZiA9PSBtbHg0X21hc3Rlcl9mdW5jX251bShkZXYpKSB7CiAJCXJlc19hbGxvYy0+cmVzX2ZyZWUgPSBudW1faW5zdGFuY2VzOwpAQCAtNDg2LDIxICs0OTEsMjYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTUxYNF9OVU1fT0ZfUkVTT1VSQ0VfVFlQRTsgaSsrKSB7CiAJCXN0cnVjdCByZXNvdXJjZV9hbGxvY2F0b3IgKnJlc19hbGxvYyA9CiAJCQkmcHJpdi0+bWZ1bmMubWFzdGVyLnJlc190cmFja2VyLnJlc19hbGxvY1tpXTsKLQkJcmVzX2FsbG9jLT5xdW90YSA9IGttYWxsb2MoKGRldi0+bnVtX3ZmcyArIDEpICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOwotCQlyZXNfYWxsb2MtPmd1YXJhbnRlZWQgPSBrbWFsbG9jKChkZXYtPm51bV92ZnMgKyAxKSAqIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKKwkJcmVzX2FsbG9jLT5xdW90YSA9IGttYWxsb2MoKGRldi0+cGVyc2lzdC0+bnVtX3ZmcyArIDEpICoKKwkJCQkJICAgc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOworCQlyZXNfYWxsb2MtPmd1YXJhbnRlZWQgPSBrbWFsbG9jKChkZXYtPnBlcnNpc3QtPm51bV92ZnMgKyAxKSAqCisJCQkJCQlzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChpID09IFJFU19NQUMgfHwgaSA9PSBSRVNfVkxBTikKIAkJCXJlc19hbGxvYy0+YWxsb2NhdGVkID0ga3phbGxvYyhNTFg0X01BWF9QT1JUUyAqCi0JCQkJCQkgICAgICAgKGRldi0+bnVtX3ZmcyArIDEpICogc2l6ZW9mKGludCksCi0JCQkJCQkJR0ZQX0tFUk5FTCk7CisJCQkJCQkgICAgICAgKGRldi0+cGVyc2lzdC0+bnVtX3ZmcworCQkJCQkJICAgICAgICsgMSkgKgorCQkJCQkJICAgICAgIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKIAkJZWxzZQotCQkJcmVzX2FsbG9jLT5hbGxvY2F0ZWQgPSBremFsbG9jKChkZXYtPm51bV92ZnMgKyAxKSAqIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKKwkJCXJlc19hbGxvYy0+YWxsb2NhdGVkID0ga3phbGxvYygoZGV2LT5wZXJzaXN0LT4KKwkJCQkJCQludW1fdmZzICsgMSkgKgorCQkJCQkJICAgICAgIHNpemVvZihpbnQpLCBHRlBfS0VSTkVMKTsKIAogCQlpZiAoIXJlc19hbGxvYy0+cXVvdGEgfHwgIXJlc19hbGxvYy0+Z3VhcmFudGVlZCB8fAogCQkgICAgIXJlc19hbGxvYy0+YWxsb2NhdGVkKQogCQkJZ290byBub19tZW1fZXJyOwogCiAJCXNwaW5fbG9ja19pbml0KCZyZXNfYWxsb2MtPmFsbG9jX2xvY2spOwotCQlmb3IgKHQgPSAwOyB0IDwgZGV2LT5udW1fdmZzICsgMTsgdCsrKSB7CisJCWZvciAodCA9IDA7IHQgPCBkZXYtPnBlcnNpc3QtPm51bV92ZnMgKyAxOyB0KyspIHsKIAkJCXN0cnVjdCBtbHg0X2FjdGl2ZV9wb3J0cyBhY3R2X3BvcnRzID0KIAkJCQltbHg0X2dldF9hY3RpdmVfcG9ydHMoZGV2LCB0KTsKIAkJCXN3aXRjaCAoaSkgewpAQCAtMjUzMSw3ICsyNTQxLDcgQEAKIAkvKiBNYWtlIHN1cmUgdGhhdCB0aGUgUEQgYml0cyByZWxhdGVkIHRvIHRoZSBzbGF2ZSBpZCBhcmUgemVyb3MuICovCiAJcGQgPSBtcl9nZXRfcGQoaW5ib3gtPmJ1Zik7CiAJcGRfc2xhdmUgPSAocGQgPj4gMTcpICYgMHg3ZjsKLQlpZiAocGRfc2xhdmUgIT0gMCAmJiBwZF9zbGF2ZSAhPSBzbGF2ZSkgeworCWlmIChwZF9zbGF2ZSAhPSAwICYmIC0tcGRfc2xhdmUgIT0gc2xhdmUpIHsKIAkJZXJyID0gLUVQRVJNOwogCQlnb3RvIGV4X2Fib3J0OwogCX0KQEAgLTI5MzQsNiArMjk0NCw5IEBACiAJcXBfdHlwZQk9IChiZTMyX3RvX2NwdShxcF9jdHgtPmZsYWdzKSA+PiAxNikgJiAweGZmOwogCW9wdHBhcgk9IGJlMzJfdG9fY3B1KCooX19iZTMyICopIGluYm94LT5idWYpOwogCisJaWYgKHNsYXZlICE9IG1seDRfbWFzdGVyX2Z1bmNfbnVtKGRldikpCisJCXFwX2N0eC0+cGFyYW1zMiAmPSB+TUxYNF9RUF9CSVRfRlBQOworCiAJc3dpdGNoIChxcF90eXBlKSB7CiAJY2FzZSBNTFg0X1FQX1NUX1JDOgogCWNhc2UgTUxYNF9RUF9TVF9YUkM6CkBAIC00NjY3LDcgKzQ2ODAsNiBAQAogCWludCBzdGF0ZTsKIAlMSVNUX0hFQUQodGxpc3QpOwogCWludCBlcW47Ci0Jc3RydWN0IG1seDRfY21kX21haWxib3ggKm1haWxib3g7CiAKIAllcnIgPSBtb3ZlX2FsbF9idXN5KGRldiwgc2xhdmUsIFJFU19FUSk7CiAJaWYgKGVycikKQEAgLTQ2OTMsMjAgKzQ3MDUsMTMgQEAKIAkJCQkJYnJlYWs7CiAKIAkJCQljYXNlIFJFU19FUV9IVzoKLQkJCQkJbWFpbGJveCA9IG1seDRfYWxsb2NfY21kX21haWxib3goZGV2KTsKLQkJCQkJaWYgKElTX0VSUihtYWlsYm94KSkgewotCQkJCQkJY29uZF9yZXNjaGVkKCk7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCQkJCQllcnIgPSBtbHg0X2NtZF9ib3goZGV2LCBzbGF2ZSwgMCwKLQkJCQkJCQkgICBlcW4gJiAweGZmLCAwLAotCQkJCQkJCSAgIE1MWDRfQ01EX0hXMlNXX0VRLAotCQkJCQkJCSAgIE1MWDRfQ01EX1RJTUVfQ0xBU1NfQSwKLQkJCQkJCQkgICBNTFg0X0NNRF9OQVRJVkUpOworCQkJCQllcnIgPSBtbHg0X2NtZChkZXYsIHNsYXZlLCBlcW4gJiAweGZmLAorCQkJCQkJICAgICAgIDEsIE1MWDRfQ01EX0hXMlNXX0VRLAorCQkJCQkJICAgICAgIE1MWDRfQ01EX1RJTUVfQ0xBU1NfQSwKKwkJCQkJCSAgICAgICBNTFg0X0NNRF9OQVRJVkUpOwogCQkJCQlpZiAoZXJyKQogCQkJCQkJbWx4NF9kYmcoZGV2LCAicmVtX3NsYXZlX2VxczogZmFpbGVkIHRvIG1vdmUgc2xhdmUgJWQgZXFzICVkIHRvIFNXIG93bmVyc2hpcFxuIiwKIAkJCQkJCQkgc2xhdmUsIGVxbik7Ci0JCQkJCW1seDRfZnJlZV9jbWRfbWFpbGJveChkZXYsIG1haWxib3gpOwogCQkJCQlhdG9taWNfZGVjKCZlcS0+bXR0LT5yZWZfY291bnQpOwogCQkJCQlzdGF0ZSA9IFJFU19FUV9SRVNFUlZFRDsKIAkJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvYWxsb2MuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jCmluZGV4IDU2Nzc5YzEuLjIwMWNhNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9hbGxvYy5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAkJZG1hX2ZyZWVfY29oZXJlbnQoJmRldi0+cGRldi0+ZGV2LCBidWYtPnNpemUsIGJ1Zi0+ZGlyZWN0LmJ1ZiwKIAkJCQkgIGJ1Zi0+ZGlyZWN0Lm1hcCk7CiAJZWxzZSB7Ci0JCWlmIChCSVRTX1BFUl9MT05HID09IDY0ICYmIGJ1Zi0+ZGlyZWN0LmJ1ZikKKwkJaWYgKEJJVFNfUEVSX0xPTkcgPT0gNjQpCiAJCQl2dW5tYXAoYnVmLT5kaXJlY3QuYnVmKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgYnVmLT5uYnVmczsgaSsrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9kZWJ1Z2ZzLmMKaW5kZXggMTBlMWYxYS4uNDg3ODAyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZGVidWdmcy5jCkBAIC0zMDAsMTEgKzMwMCwxMSBAQAogCQlwYXJhbSA9IHFwLT5waWQ7CiAJCWJyZWFrOwogCWNhc2UgUVBfU1RBVEU6Ci0JCXBhcmFtID0gKHU2NCltbHg1X3FwX3N0YXRlX3N0cihiZTMyX3RvX2NwdShjdHgtPmZsYWdzKSA+PiAyOCk7CisJCXBhcmFtID0gKHVuc2lnbmVkIGxvbmcpbWx4NV9xcF9zdGF0ZV9zdHIoYmUzMl90b19jcHUoY3R4LT5mbGFncykgPj4gMjgpOwogCQkqaXNfc3RyID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBRUF9YUE9SVDoKLQkJcGFyYW0gPSAodTY0KW1seDVfcXBfdHlwZV9zdHIoKGJlMzJfdG9fY3B1KGN0eC0+ZmxhZ3MpID4+IDE2KSAmIDB4ZmYpOworCQlwYXJhbSA9ICh1bnNpZ25lZCBsb25nKW1seDVfcXBfdHlwZV9zdHIoKGJlMzJfdG9fY3B1KGN0eC0+ZmxhZ3MpID4+IDE2KSAmIDB4ZmYpOwogCQkqaXNfc3RyID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBRUF9NVFU6CkBAIC00NjQsNyArNDY0LDcgQEAKIAogCiAJaWYgKGlzX3N0cikKLQkJcmV0ID0gc25wcmludGYodGJ1Ziwgc2l6ZW9mKHRidWYpLCAiJXNcbiIsIChjb25zdCBjaGFyICopZmllbGQpOworCQlyZXQgPSBzbnByaW50Zih0YnVmLCBzaXplb2YodGJ1ZiksICIlc1xuIiwgKGNvbnN0IGNoYXIgKikodW5zaWduZWQgbG9uZylmaWVsZCk7CiAJZWxzZQogCQlyZXQgPSBzbnByaW50Zih0YnVmLCBzaXplb2YodGJ1ZiksICIweCVsbHhcbiIsIGZpZWxkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9tYWluLmMKaW5kZXggM2Y0NTI1Ni4uZDY2NTE5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvbWFpbi5jCkBAIC05MDMsMTIgKzkwMywxMiBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWx4NV9jb3JlX3BjaV90YWJsZVtdID0gewotCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDQxMTMpIH0sIC8qIENvbm5lY3QtSUIgKi8KLQl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCA0MTE0KSB9LCAvKiBDb25uZWN0LUlCIFZGICovCi0JeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgNDExNSkgfSwgLyogQ29ubmVjdFgtNCAqLwotCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDQxMTYpIH0sIC8qIENvbm5lY3RYLTQgVkYgKi8KLQl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCA0MTE3KSB9LCAvKiBDb25uZWN0WC00TFggKi8KLQl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCA0MTE4KSB9LCAvKiBDb25uZWN0WC00TFggVkYgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMTEpIH0sIC8qIENvbm5lY3QtSUIgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMTIpIH0sIC8qIENvbm5lY3QtSUIgVkYgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMTMpIH0sIC8qIENvbm5lY3RYLTQgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMTQpIH0sIC8qIENvbm5lY3RYLTQgVkYgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMTUpIH0sIC8qIENvbm5lY3RYLTRMWCAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAxNikgfSwgLyogQ29ubmVjdFgtNExYIFZGICovCiAJeyAwLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3N6ODg0eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcmVsL2tzejg4NHguYwppbmRleCAyZmE2YWUwLi4xMDk4OGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyZWwva3N6ODg0eC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JlbC9rc3o4ODR4LmMKQEAgLTQzNDIsOSArNDM0Miw3IEBACiB7CiAJaW5mby0+bWF4ID0gMDsKIAlpbmZvLT5wZXJpb2QgPSBwZXJpb2Q7Ci0JaW5pdF90aW1lcigmaW5mby0+dGltZXIpOwotCWluZm8tPnRpbWVyLmZ1bmN0aW9uID0gZnVuY3Rpb247Ci0JaW5mby0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkYXRhOworCXNldHVwX3RpbWVyKCZpbmZvLT50aW1lciwgZnVuY3Rpb24sICh1bnNpZ25lZCBsb25nKWRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBrc3pfdXBkYXRlX3RpbWVyKHN0cnVjdCBrc3pfdGltZXJfaW5mbyAqaW5mbykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L215cmljb20vbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L215cmljb20vbXlyaTEwZ2UvbXlyaTEwZ2UuYwppbmRleCA3MWFmOThiLi4xNDEyZjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9teXJpY29tL215cmkxMGdlL215cmkxMGdlLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbXlyaWNvbS9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC00MjI2LDggKzQyMjYsNyBAQAogCQltdHJyX2RlbChtZ3AtPm10cnIsIG1ncC0+aW9tZW1fYmFzZSwgbWdwLT5ib2FyZF9zcGFuKTsKICNlbmRpZgogCW15cmkxMGdlX2ZyZWVfc2xpY2VzKG1ncCk7Ci0JaWYgKG1ncC0+bXNpeF92ZWN0b3JzICE9IE5VTEwpCi0JCWtmcmVlKG1ncC0+bXNpeF92ZWN0b3JzKTsKKwlrZnJlZShtZ3AtPm1zaXhfdmVjdG9ycyk7CiAJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgc2l6ZW9mKCptZ3AtPmNtZCksCiAJCQkgIG1ncC0+Y21kLCBtZ3AtPmNtZF9idXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uYXRzZW1pL25zODM4MjAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25hdHNlbWkvbnM4MzgyMC5jCmluZGV4IDI1NTJlNTUuLmViODA3YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25hdHNlbWkvbnM4MzgyMC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25hdHNlbWkvbnM4MzgyMC5jCkBAIC0xMTIyLDEyICsxMTIyLDEyIEBACiAJfQogCiAjaWZkZWYgTlM4MzgyMF9WTEFOX0FDQ0VMX1NVUFBPUlQKLQlpZih2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgewogCQkvKiBmZXRjaCB0aGUgdmxhbiB0YWcgaW5mbyBvdXQgb2YgdGhlCiAJCSAqIGFuY2lsbGFyeSBkYXRhIGlmIHRoZSB2bGFuIGNvZGUKIAkJICogaXMgdXNpbmcgaHcgdmxhbiBhY2NlbGVyYXRpb24KIAkJICovCi0JCXNob3J0IHRhZyA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQlzaG9ydCB0YWcgPSBza2Jfdmxhbl90YWdfZ2V0KHNrYik7CiAJCWV4dHN0cyB8PSAoRVhUU1RTX1ZQS1QgfCBodG9ucyh0YWcpKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldGVyaW9uL3MyaW8uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldGVyaW9uL3MyaW8uYwppbmRleCBkYjBjN2E5Li5hNGNkZjJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0ZXJpb24vczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldGVyaW9uL3MyaW8uYwpAQCAtNDA0NSw4ICs0MDQ1LDggQEAKIAl9CiAKIAlxdWV1ZSA9IDA7Ci0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKLQkJdmxhbl90YWcgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkKKwkJdmxhbl90YWcgPSBza2Jfdmxhbl90YWdfZ2V0KHNrYik7CiAJaWYgKHNwLT5jb25maWcudHhfc3RlZXJpbmdfdHlwZSA9PSBUWF9ERUZBVUxUX1NURUVSSU5HKSB7CiAJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgewogCQkJc3RydWN0IGlwaGRyICppcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldGVyaW9uL3Z4Z2UvdnhnZS1jb25maWcuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldGVyaW9uL3Z4Z2UvdnhnZS1jb25maWcuYwppbmRleCAyYmJkMDFmLi42MjIzOTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRlcmlvbi92eGdlL3Z4Z2UtY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0ZXJpb24vdnhnZS92eGdlLWNvbmZpZy5jCkBAIC00NjM3LDcgKzQ2MzcsNyBAQAogCXZwYXRoLT5yaW5naCA9IE5VTEw7CiAJdnBhdGgtPmZpZm9oID0gTlVMTDsKIAltZW1zZXQoJnZwYXRoLT52cGF0aF9oYW5kbGVzLCAwLCBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCkpOwotCXZwYXRoLT5zdGF0c19ibG9jayA9IDA7CisJdnBhdGgtPnN0YXRzX2Jsb2NrID0gTlVMTDsKIAl2cGF0aC0+aHdfc3RhdHMgPSBOVUxMOwogCXZwYXRoLT5od19zdGF0c19zYXYgPSBOVUxMOwogCXZwYXRoLT5zd19zdGF0cyA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRlcmlvbi92eGdlL3Z4Z2UtbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0ZXJpb24vdnhnZS92eGdlLW1haW4uYwppbmRleCBjYzA0ODVlLi41MGQ1NjA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRlcmlvbi92eGdlL3Z4Z2UtbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldGVyaW9uL3Z4Z2UvdnhnZS1tYWluLmMKQEAgLTg5MCw4ICs4OTAsOCBAQAogCQlkZXYtPm5hbWUsIF9fZnVuY19fLCBfX0xJTkVfXywKIAkJZmlmb19odywgZHRyLCBkdHJfcHJpdik7CiAKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCXUxNiB2bGFuX3RhZyA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CisJCXUxNiB2bGFuX3RhZyA9IHNrYl92bGFuX3RhZ19nZXQoc2tiKTsKIAkJdnhnZV9od19maWZvX3R4ZGxfdmxhbl9zZXQoZHRyLCB2bGFuX3RhZyk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvZm9yY2VkZXRoLmMKaW5kZXggZjM5Y2FlNi4uYTQxYmI1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbnZpZGlhL2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L252aWRpYS9mb3JjZWRldGguYwpAQCAtMjQ2Miw5ICsyNDYyLDkgQEAKIAkJCSBOVl9UWDJfQ0hFQ0tTVU1fTDMgfCBOVl9UWDJfQ0hFQ0tTVU1fTDQgOiAwOwogCiAJLyogdmxhbiB0YWcgKi8KLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKQorCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKQogCQlzdGFydF90eC0+dHh2bGFuID0gY3B1X3RvX2xlMzIoTlZfVFgzX1ZMQU5fVEFHX1BSRVNFTlQgfAotCQkJCQl2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJCQkJCXNrYl92bGFuX3RhZ19nZXQoc2tiKSk7CiAJZWxzZQogCQlzdGFydF90eC0+dHh2bGFuID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggNjEzMDM3NS4uZTBjMzFlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCkBAIC0xNzYsOSArMTc2LDcgQEAKIHN0YXRpYyB2b2lkCiBuZXR4ZW5fZnJlZV9zZHNfcmluZ3Moc3RydWN0IG5ldHhlbl9yZWN2X2NvbnRleHQgKnJlY3ZfY3R4KQogewotCWlmIChyZWN2X2N0eC0+c2RzX3JpbmdzICE9IE5VTEwpCi0JCWtmcmVlKHJlY3ZfY3R4LT5zZHNfcmluZ3MpOwotCisJa2ZyZWUocmVjdl9jdHgtPnNkc19yaW5ncyk7CiAJcmVjdl9jdHgtPnNkc19yaW5ncyA9IE5VTEw7CiB9CiAKQEAgLTE4OTMsOSArMTg5MSw5IEBACiAJCXByb3RvY29sID0gdmgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CiAJCWZsYWdzID0gRkxBR1NfVkxBTl9UQUdHRUQ7CiAKLQl9IGVsc2UgaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCX0gZWxzZSBpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgewogCQlmbGFncyA9IEZMQUdTX1ZMQU5fT09COwotCQl2aWQgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwkJdmlkID0gc2tiX3ZsYW5fdGFnX2dldChza2IpOwogCQluZXR4ZW5fc2V0X3R4X3ZsYW5fdGNpKGZpcnN0X2Rlc2MsIHZpZCk7CiAJCXZsYW5fb29iID0gMTsKIAl9CkBAIC0yMzg4LDcgKzIzODYsMTAgQEAKIAogCXdvcmtfZG9uZSA9IG5ldHhlbl9wcm9jZXNzX3Jjdl9yaW5nKHNkc19yaW5nLCBidWRnZXQpOwogCi0JaWYgKCh3b3JrX2RvbmUgPCBidWRnZXQpICYmIHR4X2NvbXBsZXRlKSB7CisJaWYgKCF0eF9jb21wbGV0ZSkKKwkJd29ya19kb25lID0gYnVkZ2V0OworCisJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewogCQluYXBpX2NvbXBsZXRlKCZzZHNfcmluZy0+bmFwaSk7CiAJCWlmICh0ZXN0X2JpdChfX05YX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKSkKIAkJCW5ldHhlbl9uaWNfZW5hYmxlX2ludChzZHNfcmluZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19pby5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfaW8uYwppbmRleCAxOGU1ZGU3Li5kNGI1MDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19pby5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX2lvLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CiAKICNpbmNsdWRlICJxbGNuaWMuaCIKIApAQCAtMzIwLDggKzMyMSw4IEBACiAJCWlmIChwcm90b2NvbCA9PSBFVEhfUF84MDIxUSkgewogCQkJdmggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiLT5kYXRhOwogCQkJdmxhbl9pZCA9IG50b2hzKHZoLT5oX3ZsYW5fVENJKTsKLQkJfSBlbHNlIGlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJCXZsYW5faWQgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwkJfSBlbHNlIGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CisJCQl2bGFuX2lkID0gc2tiX3ZsYW5fdGFnX2dldChza2IpOwogCQl9CiAJfQogCkBAIC00NzIsOSArNDczLDkgQEAKIAkJZmxhZ3MgPSBRTENOSUNfRkxBR1NfVkxBTl9UQUdHRUQ7CiAJCXZsYW5fdGNpID0gbnRvaHModmgtPmhfdmxhbl9UQ0kpOwogCQlwcm90b2NvbCA9IG50b2hzKHZoLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvKTsKLQl9IGVsc2UgaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCX0gZWxzZSBpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgewogCQlmbGFncyA9IFFMQ05JQ19GTEFHU19WTEFOX09PQjsKLQkJdmxhbl90Y2kgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwkJdmxhbl90Y2kgPSBza2Jfdmxhbl90YWdfZ2V0KHNrYik7CiAJfQogCWlmICh1bmxpa2VseShhZGFwdGVyLT50eF9wdmlkKSkgewogCQlpZiAodmxhbl90Y2kgJiYgIShhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19UQUdHSU5HX0VOQUJMRUQpKQpAQCAtOTY3LDcgKzk2OCwxMiBAQAogCXR4X2NvbXBsZXRlID0gcWxjbmljX3Byb2Nlc3NfY21kX3JpbmcoYWRhcHRlciwgdHhfcmluZywKIAkJCQkJICAgICAgYnVkZ2V0KTsKIAl3b3JrX2RvbmUgPSBxbGNuaWNfcHJvY2Vzc19yY3ZfcmluZyhzZHNfcmluZywgYnVkZ2V0KTsKLQlpZiAoKHdvcmtfZG9uZSA8IGJ1ZGdldCkgJiYgdHhfY29tcGxldGUpIHsKKworCS8qIENoZWNrIGlmIHdlIG5lZWQgYSByZXBvbGwgKi8KKwlpZiAoIXR4X2NvbXBsZXRlKQorCQl3b3JrX2RvbmUgPSBidWRnZXQ7CisKKwlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CiAJCW5hcGlfY29tcGxldGUoJnNkc19yaW5nLT5uYXBpKTsKIAkJaWYgKHRlc3RfYml0KF9fUUxDTklDX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKSkgewogCQkJcWxjbmljX2VuYWJsZV9zZHNfaW50cihhZGFwdGVyLCBzZHNfcmluZyk7CkBAIC05OTIsNiArOTk4LDkgQEAKIAkJbmFwaV9jb21wbGV0ZSgmdHhfcmluZy0+bmFwaSk7CiAJCWlmICh0ZXN0X2JpdChfX1FMQ05JQ19ERVZfVVAsICZhZGFwdGVyLT5zdGF0ZSkpCiAJCQlxbGNuaWNfZW5hYmxlX3R4X2ludHIoYWRhcHRlciwgdHhfcmluZyk7CisJfSBlbHNlIHsKKwkJLyogQXMgcWxjbmljX3Byb2Nlc3NfY21kX3JpbmcoKSByZXR1cm5lZCAwLCB3ZSBuZWVkIGEgcmVwb2xsKi8KKwkJd29ya19kb25lID0gYnVkZ2V0OwogCX0KIAogCXJldHVybiB3b3JrX2RvbmU7CkBAIC0xNDY1LDE0ICsxNDc0LDE0IEBACiAKIHN0YXRpYyB2b2lkIGR1bXBfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlpbnQgaTsKLQl1bnNpZ25lZCBjaGFyICpkYXRhID0gc2tiLT5kYXRhOworCWlmIChhZGFwdGVyLT5haHctPm1zZ19lbmFibGUgJiBORVRJRl9NU0dfRFJWKSB7CisJCWNoYXIgcHJlZml4WzMwXTsKIAotCXByX2luZm8oS0VSTl9JTkZPICJcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBza2ItPmxlbjsgaSsrKSB7Ci0JCVFMQ0RCKGFkYXB0ZXIsIERSViwgIiUwMnggIiwgZGF0YVtpXSk7Ci0JCWlmICgoaSAmIDB4MGYpID09IDgpCi0JCQlwcl9pbmZvKEtFUk5fSU5GTyAiXG4iKTsKKwkJc2NucHJpbnRmKHByZWZpeCwgc2l6ZW9mKHByZWZpeCksICIlczogJXM6ICIsCisJCQkgIGRldl9uYW1lKCZhZGFwdGVyLT5wZGV2LT5kZXYpLCBfX2Z1bmNfXyk7CisKKwkJcHJpbnRfaGV4X2R1bXBfZGVidWcocHJlZml4LCBEVU1QX1BSRUZJWF9OT05FLCAxNiwgMSwKKwkJCQkgICAgIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIHRydWUpOwogCX0KIH0KIApAQCAtMTk1MCw3ICsxOTU5LDEyIEBACiAKIAl0eF9jb21wbGV0ZSA9IHFsY25pY19wcm9jZXNzX2NtZF9yaW5nKGFkYXB0ZXIsIHR4X3JpbmcsIGJ1ZGdldCk7CiAJd29ya19kb25lID0gcWxjbmljXzgzeHhfcHJvY2Vzc19yY3ZfcmluZyhzZHNfcmluZywgYnVkZ2V0KTsKLQlpZiAoKHdvcmtfZG9uZSA8IGJ1ZGdldCkgJiYgdHhfY29tcGxldGUpIHsKKworCS8qIENoZWNrIGlmIHdlIG5lZWQgYSByZXBvbGwgKi8KKwlpZiAoIXR4X2NvbXBsZXRlKQorCQl3b3JrX2RvbmUgPSBidWRnZXQ7CisKKwlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CiAJCW5hcGlfY29tcGxldGUoJnNkc19yaW5nLT5uYXBpKTsKIAkJcWxjbmljX2VuYWJsZV9zZHNfaW50cihhZGFwdGVyLCBzZHNfcmluZyk7CiAJfQpAQCAtMTk3Myw3ICsxOTg3LDEyIEBACiAKIAl0eF9jb21wbGV0ZSA9IHFsY25pY19wcm9jZXNzX2NtZF9yaW5nKGFkYXB0ZXIsIHR4X3JpbmcsIGJ1ZGdldCk7CiAJd29ya19kb25lID0gcWxjbmljXzgzeHhfcHJvY2Vzc19yY3ZfcmluZyhzZHNfcmluZywgYnVkZ2V0KTsKLQlpZiAoKHdvcmtfZG9uZSA8IGJ1ZGdldCkgJiYgdHhfY29tcGxldGUpIHsKKworCS8qIENoZWNrIGlmIHdlIG5lZWQgYSByZXBvbGwgKi8KKwlpZiAoIXR4X2NvbXBsZXRlKQorCQl3b3JrX2RvbmUgPSBidWRnZXQ7CisKKwlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CiAJCW5hcGlfY29tcGxldGUoJnNkc19yaW5nLT5uYXBpKTsKIAkJcWxjbmljX2VuYWJsZV9zZHNfaW50cihhZGFwdGVyLCBzZHNfcmluZyk7CiAJfQpAQCAtMTk5NSw2ICsyMDE0LDkgQEAKIAkJbmFwaV9jb21wbGV0ZSgmdHhfcmluZy0+bmFwaSk7CiAJCWlmICh0ZXN0X2JpdChfX1FMQ05JQ19ERVZfVVAgLCAmYWRhcHRlci0+c3RhdGUpKQogCQkJcWxjbmljX2VuYWJsZV90eF9pbnRyKGFkYXB0ZXIsIHR4X3JpbmcpOworCX0gZWxzZSB7CisJCS8qIG5lZWQgYSByZXBvbGwgKi8KKwkJd29ya19kb25lID0gYnVkZ2V0OwogCX0KIAogCXJldHVybiB3b3JrX2RvbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmMKaW5kZXggMjUyOGMzZi4uYTQzMGEzNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19tYWluLmMKQEAgLTI5NCw5ICsyOTQsNyBAQAogCiB2b2lkIHFsY25pY19mcmVlX3Nkc19yaW5ncyhzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHgpCiB7Ci0JaWYgKHJlY3ZfY3R4LT5zZHNfcmluZ3MgIT0gTlVMTCkKLQkJa2ZyZWUocmVjdl9jdHgtPnNkc19yaW5ncyk7Ci0KKwlrZnJlZShyZWN2X2N0eC0+c2RzX3JpbmdzKTsKIAlyZWN2X2N0eC0+c2RzX3JpbmdzID0gTlVMTDsKIH0KIApAQCAtMTI1Nyw4ICsxMjU1LDcgQEAKIAlpZiAoYWh3LT5vcF9tb2RlICE9IFFMQ05JQ19OT05fUFJJVl9GVU5DKSB7CiAJCWlmIChmd19kdW1wLT50bXBsX2hkciA9PSBOVUxMIHx8CiAJCQkJYWRhcHRlci0+ZndfdmVyc2lvbiA+IHByZXZfZndfdmVyc2lvbikgewotCQkJaWYgKGZ3X2R1bXAtPnRtcGxfaGRyKQotCQkJCXZmcmVlKGZ3X2R1bXAtPnRtcGxfaGRyKTsKKwkJCXZmcmVlKGZ3X2R1bXAtPnRtcGxfaGRyKTsKIAkJCWlmICghcWxjbmljX2Z3X2NtZF9nZXRfbWluaWR1bXBfdGVtcChhZGFwdGVyKSkKIAkJCQlkZXZfaW5mbygmcGRldi0+ZGV2LAogCQkJCQkiU3VwcG9ydHMgRlcgZHVtcCBjYXBhYmlsaXR5XG4iKTsKQEAgLTIzNzQsMTMgKzIzNzEsMTIgQEAKIAogCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5kcnZfdHhfcmluZ3M7IHJpbmcrKykgewogCQl0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3JpbmdbcmluZ107Ci0JCWlmICh0eF9yaW5nICYmIHR4X3JpbmctPmNtZF9idWZfYXJyICE9IE5VTEwpIHsKKwkJaWYgKHR4X3JpbmcpIHsKIAkJCXZmcmVlKHR4X3JpbmctPmNtZF9idWZfYXJyKTsKIAkJCXR4X3JpbmctPmNtZF9idWZfYXJyID0gTlVMTDsKIAkJfQogCX0KLQlpZiAoYWRhcHRlci0+dHhfcmluZyAhPSBOVUxMKQotCQlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKKwlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKIH0KIAogaW50IHFsY25pY19hbGxvY190eF9yaW5ncyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCkBAIC0yNzU4LDEzICsyNzU0LDkgQEAKIAl9CiAKIAlxbGNuaWNfZGNiX2ZyZWUoYWRhcHRlci0+ZGNiKTsKLQogCXFsY25pY19kZXRhY2goYWRhcHRlcik7Ci0KLQlpZiAoYWRhcHRlci0+bnBhcnMgIT0gTlVMTCkKLQkJa2ZyZWUoYWRhcHRlci0+bnBhcnMpOwotCWlmIChhZGFwdGVyLT5lc3dpdGNoICE9IE5VTEwpCi0JCWtmcmVlKGFkYXB0ZXItPmVzd2l0Y2gpOworCWtmcmVlKGFkYXB0ZXItPm5wYXJzKTsKKwlrZnJlZShhZGFwdGVyLT5lc3dpdGNoKTsKIAogCWlmIChxbGNuaWNfODJ4eF9jaGVjayhhZGFwdGVyKSkKIAkJcWxjbmljX2Nscl9hbGxfZHJ2X3N0YXRlKGFkYXB0ZXIsIDApOwpAQCAtMjkzMiwxMyArMjkyNCwxMyBAQAogCiBzdGF0aWMgdm9pZCBxbGNuaWNfZnJlZV9sYl9maWx0ZXJzX21lbShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JaWYgKGFkYXB0ZXItPmZoYXNoLmZtYXggJiYgYWRhcHRlci0+Zmhhc2guZmhlYWQpCisJaWYgKGFkYXB0ZXItPmZoYXNoLmZtYXgpCiAJCWtmcmVlKGFkYXB0ZXItPmZoYXNoLmZoZWFkKTsKIAogCWFkYXB0ZXItPmZoYXNoLmZoZWFkID0gTlVMTDsKIAlhZGFwdGVyLT5maGFzaC5mbWF4ID0gMDsKIAotCWlmIChhZGFwdGVyLT5yeF9maGFzaC5mbWF4ICYmIGFkYXB0ZXItPnJ4X2ZoYXNoLmZoZWFkKQorCWlmIChhZGFwdGVyLT5yeF9maGFzaC5mbWF4KQogCQlrZnJlZShhZGFwdGVyLT5yeF9maGFzaC5maGVhZCk7CiAKIAlhZGFwdGVyLT5yeF9maGFzaC5mbWF4ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21pbmlkdW1wLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxjbmljL3FsY25pY19taW5pZHVtcC5jCmluZGV4IGM5ZjU3ZmIuLjMzMmJiOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9xbGNuaWMvcWxjbmljX21pbmlkdW1wLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsY25pYy9xbGNuaWNfbWluaWR1bXAuYwpAQCAtMTQwNyw4ICsxNDA3LDcgQEAKIAljdXJyZW50X3ZlcnNpb24gPSBxbGNuaWNfODN4eF9nZXRfZndfdmVyc2lvbihhZGFwdGVyKTsKIAogCWlmIChmd19kdW1wLT50bXBsX2hkciA9PSBOVUxMIHx8IGN1cnJlbnRfdmVyc2lvbiA+IHByZXZfdmVyc2lvbikgewotCQlpZiAoZndfZHVtcC0+dG1wbF9oZHIpCi0JCQl2ZnJlZShmd19kdW1wLT50bXBsX2hkcik7CisJCXZmcmVlKGZ3X2R1bXAtPnRtcGxfaGRyKTsKIAkJaWYgKCFxbGNuaWNfZndfY21kX2dldF9taW5pZHVtcF90ZW1wKGFkYXB0ZXIpKQogCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlN1cHBvcnRzIEZXIGR1bXAgY2FwYWJpbGl0eVxuIik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FsZ2UvcWxnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxnZS9xbGdlX21haW4uYwppbmRleCA2YzkwNGE2Li44MDExZWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxnZS9xbGdlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWxnZS9xbGdlX21haW4uYwpAQCAtMjM1MSwyMyArMjM1MSwyOSBAQAogewogCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJaW50IHN0YXR1cyA9IDA7CisJYm9vbCBuZWVkX3Jlc3RhcnQgPSBuZXRpZl9ydW5uaW5nKG5kZXYpOwogCi0Jc3RhdHVzID0gcWxfYWRhcHRlcl9kb3duKHFkZXYpOwotCWlmIChzdGF0dXMpIHsKLQkJbmV0aWZfZXJyKHFkZXYsIGxpbmssIHFkZXYtPm5kZXYsCi0JCQkgICJGYWlsZWQgdG8gYnJpbmcgZG93biB0aGUgYWRhcHRlclxuIik7Ci0JCXJldHVybiBzdGF0dXM7CisJaWYgKG5lZWRfcmVzdGFydCkgeworCQlzdGF0dXMgPSBxbF9hZGFwdGVyX2Rvd24ocWRldik7CisJCWlmIChzdGF0dXMpIHsKKwkJCW5ldGlmX2VycihxZGV2LCBsaW5rLCBxZGV2LT5uZGV2LAorCQkJCSAgIkZhaWxlZCB0byBicmluZyBkb3duIHRoZSBhZGFwdGVyXG4iKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KIAl9CiAKIAkvKiB1cGRhdGUgdGhlIGZlYXR1cmVzIHdpdGggcmVzZW50IGNoYW5nZSAqLwogCW5kZXYtPmZlYXR1cmVzID0gZmVhdHVyZXM7CiAKLQlzdGF0dXMgPSBxbF9hZGFwdGVyX3VwKHFkZXYpOwotCWlmIChzdGF0dXMpIHsKLQkJbmV0aWZfZXJyKHFkZXYsIGxpbmssIHFkZXYtPm5kZXYsCi0JCQkgICJGYWlsZWQgdG8gYnJpbmcgdXAgdGhlIGFkYXB0ZXJcbiIpOwotCQlyZXR1cm4gc3RhdHVzOworCWlmIChuZWVkX3Jlc3RhcnQpIHsKKwkJc3RhdHVzID0gcWxfYWRhcHRlcl91cChxZGV2KTsKKwkJaWYgKHN0YXR1cykgeworCQkJbmV0aWZfZXJyKHFkZXYsIGxpbmssIHFkZXYtPm5kZXYsCisJCQkJICAiRmFpbGVkIHRvIGJyaW5nIHVwIHRoZSBhZGFwdGVyXG4iKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KIAl9CisKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0yNjYwLDExICsyNjY2LDExIEBACiAKIAltYWNfaW9jYl9wdHItPmZyYW1lX2xlbiA9IGNwdV90b19sZTE2KCh1MTYpIHNrYi0+bGVuKTsKIAotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgewogCQluZXRpZl9wcmludGsocWRldiwgdHhfcXVldWVkLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAotCQkJICAgICAiQWRkaW5nIGEgdmxhbiB0YWcgJWQuXG4iLCB2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJCQkgICAgICJBZGRpbmcgYSB2bGFuIHRhZyAlZC5cbiIsIHNrYl92bGFuX3RhZ19nZXQoc2tiKSk7CiAJCW1hY19pb2NiX3B0ci0+ZmxhZ3MzIHw9IE9CX01BQ19JT0NCX1Y7Ci0JCW1hY19pb2NiX3B0ci0+dmxhbl90Y2kgPSBjcHVfdG9fbGUxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJCW1hY19pb2NiX3B0ci0+dmxhbl90Y2kgPSBjcHVfdG9fbGUxNihza2Jfdmxhbl90YWdfZ2V0KHNrYikpOwogCX0KIAl0c28gPSBxbF90c28oc2tiLCAoc3RydWN0IG9iX21hY190c29faW9jYl9yZXEgKiltYWNfaW9jYl9wdHIpOwogCWlmICh0c28gPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzljcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5Y3AuYwppbmRleCA5YzMxZTQ2ZC4uZDc5ZTMzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay84MTM5Y3AuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLzgxMzljcC5jCkBAIC03MDgsOCArNzA4LDggQEAKIAogc3RhdGljIGlubGluZSB1MzIgY3BfdHhfdmxhbl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlyZXR1cm4gdmxhbl90eF90YWdfcHJlc2VudChza2IpID8KLQkJVHhWbGFuVGFnIHwgc3dhYjE2KHZsYW5fdHhfdGFnX2dldChza2IpKSA6IDB4MDA7CisJcmV0dXJuIHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgPworCQlUeFZsYW5UYWcgfCBzd2FiMTYoc2tiX3ZsYW5fdGFnX2dldChza2IpKSA6IDB4MDA7CiB9CiAKIHN0YXRpYyB2b2lkIHVud2luZF90eF9mcmFnX21hcHBpbmcoc3RydWN0IGNwX3ByaXZhdGUgKmNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OS5jCmluZGV4IDE0YTFjNWMuLmFkMDAyMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5LmMKQEAgLTIwNzMsOCArMjA3Myw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdTMyIHJ0bDgxNjlfdHhfdmxhbl90YWcoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlyZXR1cm4gKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgPwotCQlUeFZsYW5UYWcgfCBzd2FiMTYodmxhbl90eF90YWdfZ2V0KHNrYikpIDogMHgwMDsKKwlyZXR1cm4gKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpID8KKwkJVHhWbGFuVGFnIHwgc3dhYjE2KHNrYl92bGFuX3RhZ19nZXQoc2tiKSkgOiAweDAwOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X3J4X3ZsYW5fdGFnKHN0cnVjdCBSeERlc2MgKmRlc2MsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC00OTE1LDcgKzQ5MTUsNyBAQAogCiAJUlRMX1c4KENvbmZpZzMsIFJUTF9SOChDb25maWczKSB8IEp1bWJvX0VuMCk7CiAJUlRMX1c4KENvbmZpZzQsIFJUTF9SOChDb25maWc0KSB8IEp1bWJvX0VuMSk7Ci0JcnRsX3R4X3BlcmZvcm1hbmNlX3R3ZWFrKHRwLT5wY2lfZGV2LCAweDIgPDwgTUFYX1JFQURfUkVRVUVTVF9TSElGVCk7CisJcnRsX3R4X3BlcmZvcm1hbmNlX3R3ZWFrKHRwLT5wY2lfZGV2LCBQQ0lfRVhQX0RFVkNUTF9SRUFEUlFfNTEyQik7CiB9CiAKIHN0YXRpYyB2b2lkIHI4MTY4Y19od19qdW1ib19kaXNhYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtNDk0OCw3ICs0OTQ4LDcgQEAKIAlSVExfVzgoTWF4VHhQYWNrZXRTaXplLCAweDNmKTsKIAlSVExfVzgoQ29uZmlnMywgUlRMX1I4KENvbmZpZzMpIHwgSnVtYm9fRW4wKTsKIAlSVExfVzgoQ29uZmlnNCwgUlRMX1I4KENvbmZpZzQpIHwgMHgwMSk7Ci0JcnRsX3R4X3BlcmZvcm1hbmNlX3R3ZWFrKHRwLT5wY2lfZGV2LCAweDIgPDwgTUFYX1JFQURfUkVRVUVTVF9TSElGVCk7CisJcnRsX3R4X3BlcmZvcm1hbmNlX3R3ZWFrKHRwLT5wY2lfZGV2LCBQQ0lfRVhQX0RFVkNUTF9SRUFEUlFfNTEyQik7CiB9CiAKIHN0YXRpYyB2b2lkIHI4MTY4ZV9od19qdW1ib19kaXNhYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtNDk2NCw3ICs0OTY0LDcgQEAKIHN0YXRpYyB2b2lkIHI4MTY4Yl8wX2h3X2p1bWJvX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlydGxfdHhfcGVyZm9ybWFuY2VfdHdlYWsodHAtPnBjaV9kZXYsCi0JCSgweDIgPDwgTUFYX1JFQURfUkVRVUVTVF9TSElGVCkgfCBQQ0lfRVhQX0RFVkNUTF9OT1NOT09QX0VOKTsKKwkJUENJX0VYUF9ERVZDVExfUkVBRFJRXzUxMkIgfCBQQ0lfRVhQX0RFVkNUTF9OT1NOT09QX0VOKTsKIH0KIAogc3RhdGljIHZvaWQgcjgxNjhiXzBfaHdfanVtYm9fZGlzYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKQEAgLTcwNDksNiArNzA0OSw3IEBACiAJdTMyIHN0YXR1cywgbGVuOwogCXUzMiBvcHRzWzJdOwogCWludCBmcmFnczsKKwlib29sIHN0b3BfcXVldWU7CiAKIAlpZiAodW5saWtlbHkoIVRYX0ZSQUdTX1JFQURZX0ZPUih0cCwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncykpKSB7CiAJCW5ldGlmX2Vycih0cCwgZHJ2LCBkZXYsICJCVUchIFR4IFJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIik7CkBAIC03MTA1LDExICs3MTA2LDE2IEBACiAKIAl0cC0+Y3VyX3R4ICs9IGZyYWdzICsgMTsKIAotCVJUTF9XOChUeFBvbGwsIE5QUSk7CisJc3RvcF9xdWV1ZSA9ICFUWF9GUkFHU19SRUFEWV9GT1IodHAsIE1BWF9TS0JfRlJBR1MpOwogCi0JbW1pb3diKCk7CisJaWYgKCFza2ItPnhtaXRfbW9yZSB8fCBzdG9wX3F1ZXVlIHx8CisJICAgIG5ldGlmX3htaXRfc3RvcHBlZChuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgMCkpKSB7CisJCVJUTF9XOChUeFBvbGwsIE5QUSk7CiAKLQlpZiAoIVRYX0ZSQUdTX1JFQURZX0ZPUih0cCwgTUFYX1NLQl9GUkFHUykpIHsKKwkJbW1pb3diKCk7CisJfQorCisJaWYgKHN0b3BfcXVldWUpIHsKIAkJLyogQXZvaWQgd3JvbmdseSBvcHRpbWlzdGljIHF1ZXVlIHdha2UtdXA6IHJ0bF90eCB0aHJlYWQgbXVzdAogCQkgKiBub3QgbWlzcyBhIHJpbmcgdXBkYXRlIHdoZW4gaXQgbm90aWNlcyBhIHN0b3BwZWQgcXVldWUuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvc2hfZXRoLmMKaW5kZXggNjU3NjI0My4uNGRhOGJkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5jCkBAIC0zOTYsNiArMzk2LDkgQEAKIAlbVFNVX0FEUkwzMV0JPSAweDAxZmMsCiB9OwogCitzdGF0aWMgdm9pZCBzaF9ldGhfcmN2X3NuZF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc2hfZXRoX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CisKIHN0YXRpYyBib29sIHNoX2V0aF9pc19nZXRoZXIoc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHApCiB7CiAJcmV0dXJuIG1kcC0+cmVnX29mZnNldCA9PSBzaF9ldGhfb2Zmc2V0X2dpZ2FiaXQ7CkBAIC01OTQsNyArNTk3LDcgQEAKIHN0YXRpYyB2b2lkIHNoX2V0aF9jaGlwX3Jlc2V0X2dpZ2Eoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBtYWhyWzJdLCBtYWxyWzJdOworCXUzMiBtYWhyWzJdLCBtYWxyWzJdOwogCiAJLyogc2F2ZSBNQUhSIGFuZCBNQUxSICovCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewpAQCAtOTg4LDcgKzk5MSw3IEBACiAJfQogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaF9ldGhfZ2V0X2VkdHJyX3RybnMoc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHApCitzdGF0aWMgdTMyIHNoX2V0aF9nZXRfZWR0cnJfdHJucyhzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCkKIHsKIAlpZiAoc2hfZXRoX2lzX2dldGhlcihtZHApIHx8IHNoX2V0aF9pc19yel9mYXN0X2V0aGVyKG1kcCkpCiAJCXJldHVybiBFRFRSUl9UUk5TX0dFVEhFUjsKQEAgLTExMjAsNiArMTEyMyw3IEBACiAJaW50IHJ4X3JpbmdzaXplID0gc2l6ZW9mKCpyeGRlc2MpICogbWRwLT5udW1fcnhfcmluZzsKIAlpbnQgdHhfcmluZ3NpemUgPSBzaXplb2YoKnR4ZGVzYykgKiBtZHAtPm51bV90eF9yaW5nOwogCWludCBza2J1ZmZfc2l6ZSA9IG1kcC0+cnhfYnVmX3N6ICsgU0hfRVRIX1JYX0FMSUdOIC0gMTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOwogCiAJbWRwLT5jdXJfcnggPSAwOwogCW1kcC0+Y3VyX3R4ID0gMDsKQEAgLTExMzMsNyArMTEzNyw2IEBACiAJCS8qIHNrYiAqLwogCQltZHAtPnJ4X3NrYnVmZltpXSA9IE5VTEw7CiAJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmRldiwgc2tidWZmX3NpemUpOwotCQltZHAtPnJ4X3NrYnVmZltpXSA9IHNrYjsKIAkJaWYgKHNrYiA9PSBOVUxMKQogCQkJYnJlYWs7CiAJCXNoX2V0aF9zZXRfcmVjZWl2ZV9hbGlnbihza2IpOwpAQCAtMTE0Miw5ICsxMTQ1LDE1IEBACiAJCXJ4ZGVzYyA9ICZtZHAtPnJ4X3JpbmdbaV07CiAJCS8qIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgaXMgYSBtdWx0aXBsZSBvZiAxNiBieXRlcy4gKi8KIAkJcnhkZXNjLT5idWZmZXJfbGVuZ3RoID0gQUxJR04obWRwLT5yeF9idWZfc3osIDE2KTsKLQkJZG1hX21hcF9zaW5nbGUoJm5kZXYtPmRldiwgc2tiLT5kYXRhLCByeGRlc2MtPmJ1ZmZlcl9sZW5ndGgsCi0JCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKLQkJcnhkZXNjLT5hZGRyID0gdmlydF90b19waHlzKHNrYi0+ZGF0YSk7CisJCWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoJm5kZXYtPmRldiwgc2tiLT5kYXRhLAorCQkJCQkgIHJ4ZGVzYy0+YnVmZmVyX2xlbmd0aCwKKwkJCQkJICBETUFfRlJPTV9ERVZJQ0UpOworCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoJm5kZXYtPmRldiwgZG1hX2FkZHIpKSB7CisJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCWJyZWFrOworCQl9CisJCW1kcC0+cnhfc2tidWZmW2ldID0gc2tiOworCQlyeGRlc2MtPmFkZHIgPSBkbWFfYWRkcjsKIAkJcnhkZXNjLT5zdGF0dXMgPSBjcHVfdG9fZWRtYWMobWRwLCBSRF9SQUNUIHwgUkRfUkZQKTsKIAogCQkvKiBSeCBkZXNjcmlwdG9yIGFkZHJlc3Mgc2V0ICovCkBAIC0xMzE2LDggKzEzMjUsMTAgQEAKIAkJICAgICBSRkxSKTsKIAogCXNoX2V0aF93cml0ZShuZGV2LCBzaF9ldGhfcmVhZChuZGV2LCBFRVNSKSwgRUVTUik7Ci0JaWYgKHN0YXJ0KQorCWlmIChzdGFydCkgeworCQltZHAtPmlycV9lbmFibGVkID0gdHJ1ZTsKIAkJc2hfZXRoX3dyaXRlKG5kZXYsIG1kcC0+Y2QtPmVlc2lwcl92YWx1ZSwgRUVTSVBSKTsKKwl9CiAKIAkvKiBQQVVTRSBQcm9oaWJpdGlvbiAqLwogCXZhbCA9IChzaF9ldGhfcmVhZChuZGV2LCBFQ01SKSAmIEVDTVJfRE0pIHwKQEAgLTEzNTYsNiArMTM2NywzMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHNoX2V0aF9kZXZfZXhpdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCA9IG5ldGRldl9wcml2KG5kZXYpOworCWludCBpOworCisJLyogRGVhY3RpdmF0ZSBhbGwgVFggZGVzY3JpcHRvcnMsIHNvIERNQSBzaG91bGQgc3RvcCBhdCBuZXh0CisJICogcGFja2V0IGJvdW5kYXJ5IGlmIGl0J3MgY3VycmVudGx5IHJ1bm5pbmcKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWRwLT5udW1fdHhfcmluZzsgaSsrKQorCQltZHAtPnR4X3JpbmdbaV0uc3RhdHVzICY9IH5jcHVfdG9fZWRtYWMobWRwLCBURF9UQUNUKTsKKworCS8qIERpc2FibGUgVFggRklGTyBlZ3Jlc3MgdG8gTUFDICovCisJc2hfZXRoX3Jjdl9zbmRfZGlzYWJsZShuZGV2KTsKKworCS8qIFN0b3AgUlggRE1BIGF0IG5leHQgcGFja2V0IGJvdW5kYXJ5ICovCisJc2hfZXRoX3dyaXRlKG5kZXYsIDAsIEVEUlJSKTsKKworCS8qIEFzaWRlIGZyb20gVFggRE1BLCB3ZSBjYW4ndCB0ZWxsIHdoZW4gdGhlIGhhcmR3YXJlIGlzCisJICogcmVhbGx5IHN0b3BwZWQsIHNvIHdlIG5lZWQgdG8gcmVzZXQgdG8gbWFrZSBzdXJlLgorCSAqIEJlZm9yZSBkb2luZyB0aGF0LCB3YWl0IGZvciBsb25nIGVub3VnaCB0byAqcHJvYmFibHkqCisJICogZmluaXNoIHRyYW5zbWl0dGluZyB0aGUgbGFzdCBwYWNrZXQgYW5kIHBvbGwgc3RhdHMuCisJICovCisJbXNsZWVwKDIpOyAvKiBtYXggZnJhbWUgdGltZSBhdCAxMCBNYnBzIDwgMTI1MCB1cyAqLworCXNoX2V0aF9nZXRfc3RhdHMobmRldik7CisJc2hfZXRoX3Jlc2V0KG5kZXYpOworfQorCiAvKiBmcmVlIFR4IHNrYiBmdW5jdGlvbiAqLwogc3RhdGljIGludCBzaF9ldGhfdHhmcmVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogewpAQCAtMTQwMCw2ICsxNDM4LDcgQEAKIAl1MTYgcGt0X2xlbiA9IDA7CiAJdTMyIGRlc2Nfc3RhdHVzOwogCWludCBza2J1ZmZfc2l6ZSA9IG1kcC0+cnhfYnVmX3N6ICsgU0hfRVRIX1JYX0FMSUdOIC0gMTsKKwlkbWFfYWRkcl90IGRtYV9hZGRyOwogCiAJYm9ndXNjbnQgPSBtaW4oYm9ndXNjbnQsICpxdW90YSk7CiAJbGltaXQgPSBib2d1c2NudDsKQEAgLTE0NDcsOSArMTQ4Niw5IEBACiAJCQltZHAtPnJ4X3NrYnVmZltlbnRyeV0gPSBOVUxMOwogCQkJaWYgKG1kcC0+Y2QtPnJwYWRpcikKIAkJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7Ci0JCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgmbmRldi0+ZGV2LCByeGRlc2MtPmFkZHIsCi0JCQkJCQlBTElHTihtZHAtPnJ4X2J1Zl9zeiwgMTYpLAotCQkJCQkJRE1BX0ZST01fREVWSUNFKTsKKwkJCWRtYV91bm1hcF9zaW5nbGUoJm5kZXYtPmRldiwgcnhkZXNjLT5hZGRyLAorCQkJCQkgQUxJR04obWRwLT5yeF9idWZfc3osIDE2KSwKKwkJCQkJIERNQV9GUk9NX0RFVklDRSk7CiAJCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKIAkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CkBAIC0xNDY5LDE1ICsxNTA4LDIwIEBACiAKIAkJaWYgKG1kcC0+cnhfc2tidWZmW2VudHJ5XSA9PSBOVUxMKSB7CiAJCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5kZXYsIHNrYnVmZl9zaXplKTsKLQkJCW1kcC0+cnhfc2tidWZmW2VudHJ5XSA9IHNrYjsKIAkJCWlmIChza2IgPT0gTlVMTCkKIAkJCQlicmVhazsJLyogQmV0dGVyIGx1Y2sgbmV4dCByb3VuZC4gKi8KIAkJCXNoX2V0aF9zZXRfcmVjZWl2ZV9hbGlnbihza2IpOwotCQkJZG1hX21hcF9zaW5nbGUoJm5kZXYtPmRldiwgc2tiLT5kYXRhLAotCQkJCSAgICAgICByeGRlc2MtPmJ1ZmZlcl9sZW5ndGgsIERNQV9GUk9NX0RFVklDRSk7CisJCQlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKCZuZGV2LT5kZXYsIHNrYi0+ZGF0YSwKKwkJCQkJCSAgcnhkZXNjLT5idWZmZXJfbGVuZ3RoLAorCQkJCQkJICBETUFfRlJPTV9ERVZJQ0UpOworCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKCZuZGV2LT5kZXYsIGRtYV9hZGRyKSkgeworCQkJCWtmcmVlX3NrYihza2IpOworCQkJCWJyZWFrOworCQkJfQorCQkJbWRwLT5yeF9za2J1ZmZbZW50cnldID0gc2tiOwogCiAJCQlza2JfY2hlY2tzdW1fbm9uZV9hc3NlcnQoc2tiKTsKLQkJCXJ4ZGVzYy0+YWRkciA9IHZpcnRfdG9fcGh5cyhza2ItPmRhdGEpOworCQkJcnhkZXNjLT5hZGRyID0gZG1hX2FkZHI7CiAJCX0KIAkJaWYgKGVudHJ5ID49IG1kcC0+bnVtX3J4X3JpbmcgLSAxKQogCQkJcnhkZXNjLT5zdGF0dXMgfD0KQEAgLTE1MjEsNyArMTU2NSw3IEBACiB9CiAKIC8qIGVycm9yIGNvbnRyb2wgZnVuY3Rpb24gKi8KLXN0YXRpYyB2b2lkIHNoX2V0aF9lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IGludHJfc3RhdHVzKQorc3RhdGljIHZvaWQgc2hfZXRoX2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgaW50cl9zdGF0dXMpCiB7CiAJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1MzIgZmVsaWNfc3RhdDsKQEAgLTE1NzMsNyArMTYxNyw2IEBACiAJCWlmIChpbnRyX3N0YXR1cyAmIEVFU1JfUkZSTUVSKSB7CiAJCQkvKiBSZWNlaXZlIEZyYW1lIE92ZXJmbG93IGludCAqLwogCQkJbmRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7Ci0JCQluZXRpZl9lcnIobWRwLCByeF9lcnIsIG5kZXYsICJSZWNlaXZlIEFib3J0XG4iKTsKIAkJfQogCX0KIApAQCAtMTU5MiwxMyArMTYzNSwxMSBAQAogCWlmIChpbnRyX3N0YXR1cyAmIEVFU1JfUkRFKSB7CiAJCS8qIFJlY2VpdmUgRGVzY3JpcHRvciBFbXB0eSBpbnQgKi8KIAkJbmRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKLQkJbmV0aWZfZXJyKG1kcCwgcnhfZXJyLCBuZGV2LCAiUmVjZWl2ZSBEZXNjcmlwdG9yIEVtcHR5XG4iKTsKIAl9CiAKIAlpZiAoaW50cl9zdGF0dXMgJiBFRVNSX1JGRSkgewogCQkvKiBSZWNlaXZlIEZJRk8gT3ZlcmZsb3cgaW50ICovCiAJCW5kZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7Ci0JCW5ldGlmX2VycihtZHAsIHJ4X2VyciwgbmRldiwgIlJlY2VpdmUgRklGTyBPdmVyZmxvd1xuIik7CiAJfQogCiAJaWYgKCFtZHAtPmNkLT5ub19hZGUgJiYgKGludHJfc3RhdHVzICYgRUVTUl9BREUpKSB7CkBAIC0xNjM3LDcgKzE2NzgsNyBAQAogCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHNoX2V0aF9jcHVfZGF0YSAqY2QgPSBtZHAtPmNkOwogCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwotCXVuc2lnbmVkIGxvbmcgaW50cl9zdGF0dXMsIGludHJfZW5hYmxlOworCXUzMiBpbnRyX3N0YXR1cywgaW50cl9lbmFibGU7CiAKIAlzcGluX2xvY2soJm1kcC0+bG9jayk7CiAKQEAgLTE2NTMsNyArMTY5NCwxMiBAQAogCWlmIChpbnRyX3N0YXR1cyAmIChFRVNSX1JYX0NIRUNLIHwgY2QtPnR4X2NoZWNrIHwgY2QtPmVlc3JfZXJyX2NoZWNrKSkKIAkJcmV0ID0gSVJRX0hBTkRMRUQ7CiAJZWxzZQotCQlnb3RvIG90aGVyX2lycTsKKwkJZ290byBvdXQ7CisKKwlpZiAoIWxpa2VseShtZHAtPmlycV9lbmFibGVkKSkgeworCQlzaF9ldGhfd3JpdGUobmRldiwgMCwgRUVTSVBSKTsKKwkJZ290byBvdXQ7CisJfQogCiAJaWYgKGludHJfc3RhdHVzICYgRUVTUl9SWF9DSEVDSykgewogCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZtZHAtPm5hcGkpKSB7CkBAIC0xNjYzLDcgKzE3MDksNyBAQAogCQkJX19uYXBpX3NjaGVkdWxlKCZtZHAtPm5hcGkpOwogCQl9IGVsc2UgewogCQkJbmV0ZGV2X3dhcm4obmRldiwKLQkJCQkgICAgImlnbm9yaW5nIGludGVycnVwdCwgc3RhdHVzIDB4JTA4bHgsIG1hc2sgMHglMDhseC5cbiIsCisJCQkJICAgICJpZ25vcmluZyBpbnRlcnJ1cHQsIHN0YXR1cyAweCUwOHgsIG1hc2sgMHglMDh4LlxuIiwKIAkJCQkgICAgaW50cl9zdGF0dXMsIGludHJfZW5hYmxlKTsKIAkJfQogCX0KQEAgLTE2ODQsNyArMTczMCw3IEBACiAJCXNoX2V0aF9lcnJvcihuZGV2LCBpbnRyX3N0YXR1cyk7CiAJfQogCi1vdGhlcl9pcnE6CitvdXQ6CiAJc3Bpbl91bmxvY2soJm1kcC0+bG9jayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTY5Niw3ICsxNzQyLDcgQEAKIAkJCQkJCSAgbmFwaSk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBuYXBpLT5kZXY7CiAJaW50IHF1b3RhID0gYnVkZ2V0OwotCXVuc2lnbmVkIGxvbmcgaW50cl9zdGF0dXM7CisJdTMyIGludHJfc3RhdHVzOwogCiAJZm9yICg7OykgewogCQlpbnRyX3N0YXR1cyA9IHNoX2V0aF9yZWFkKG5kZXYsIEVFU1IpOwpAQCAtMTcxMiw3ICsxNzU4LDggQEAKIAluYXBpX2NvbXBsZXRlKG5hcGkpOwogCiAJLyogUmVlbmFibGUgUnggaW50ZXJydXB0cyAqLwotCXNoX2V0aF93cml0ZShuZGV2LCBtZHAtPmNkLT5lZXNpcHJfdmFsdWUsIEVFU0lQUik7CisJaWYgKG1kcC0+aXJxX2VuYWJsZWQpCisJCXNoX2V0aF93cml0ZShuZGV2LCBtZHAtPmNkLT5lZXNpcHJfdmFsdWUsIEVFU0lQUik7CiBvdXQ6CiAJcmV0dXJuIGJ1ZGdldCAtIHF1b3RhOwogfQpAQCAtMTk2OCw0MCArMjAxNSw1MCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7CiAJCW5ldGlmX3R4X2Rpc2FibGUobmRldik7Ci0JCS8qIERpc2FibGUgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCi0JCXNoX2V0aF93cml0ZShuZGV2LCAweDAwMDAsIEVFU0lQUik7Ci0JCS8qIFN0b3AgdGhlIGNoaXAncyBUeCBhbmQgUnggcHJvY2Vzc2VzLiAqLwotCQlzaF9ldGhfd3JpdGUobmRldiwgMCwgRURUUlIpOwotCQlzaF9ldGhfd3JpdGUobmRldiwgMCwgRURSUlIpOwotCQlzeW5jaHJvbml6ZV9pcnEobmRldi0+aXJxKTsKLQl9CiAKLQkvKiBGcmVlIGFsbCB0aGUgc2tidWZmcyBpbiB0aGUgUnggcXVldWUuICovCi0Jc2hfZXRoX3JpbmdfZnJlZShuZGV2KTsKLQkvKiBGcmVlIERNQSBidWZmZXIgKi8KLQlzaF9ldGhfZnJlZV9kbWFfYnVmZmVyKG1kcCk7CisJCS8qIFNlcmlhbGlzZSB3aXRoIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgTkFQSSwgdGhlbgorCQkgKiBkaXNhYmxlIGludGVycnVwdHMuICBXZSBoYXZlIHRvIGNsZWFyIHRoZQorCQkgKiBpcnFfZW5hYmxlZCBmbGFnIGZpcnN0IHRvIGVuc3VyZSB0aGF0IGludGVycnVwdHMKKwkJICogd29uJ3QgYmUgcmUtZW5hYmxlZC4KKwkJICovCisJCW1kcC0+aXJxX2VuYWJsZWQgPSBmYWxzZTsKKwkJc3luY2hyb25pemVfaXJxKG5kZXYtPmlycSk7CisJCW5hcGlfc3luY2hyb25pemUoJm1kcC0+bmFwaSk7CisJCXNoX2V0aF93cml0ZShuZGV2LCAweDAwMDAsIEVFU0lQUik7CisKKwkJc2hfZXRoX2Rldl9leGl0KG5kZXYpOworCisJCS8qIEZyZWUgYWxsIHRoZSBza2J1ZmZzIGluIHRoZSBSeCBxdWV1ZS4gKi8KKwkJc2hfZXRoX3JpbmdfZnJlZShuZGV2KTsKKwkJLyogRnJlZSBETUEgYnVmZmVyICovCisJCXNoX2V0aF9mcmVlX2RtYV9idWZmZXIobWRwKTsKKwl9CiAKIAkvKiBTZXQgbmV3IHBhcmFtZXRlcnMgKi8KIAltZHAtPm51bV9yeF9yaW5nID0gcmluZy0+cnhfcGVuZGluZzsKIAltZHAtPm51bV90eF9yaW5nID0gcmluZy0+dHhfcGVuZGluZzsKIAotCXJldCA9IHNoX2V0aF9yaW5nX2luaXQobmRldik7Ci0JaWYgKHJldCA8IDApIHsKLQkJbmV0ZGV2X2VycihuZGV2LCAiJXM6IHNoX2V0aF9yaW5nX2luaXQgZmFpbGVkLlxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gcmV0OwotCX0KLQlyZXQgPSBzaF9ldGhfZGV2X2luaXQobmRldiwgZmFsc2UpOwotCWlmIChyZXQgPCAwKSB7Ci0JCW5ldGRldl9lcnIobmRldiwgIiVzOiBzaF9ldGhfZGV2X2luaXQgZmFpbGVkLlxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gcmV0OwotCX0KLQogCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCXJldCA9IHNoX2V0aF9yaW5nX2luaXQobmRldik7CisJCWlmIChyZXQgPCAwKSB7CisJCQluZXRkZXZfZXJyKG5kZXYsICIlczogc2hfZXRoX3JpbmdfaW5pdCBmYWlsZWQuXG4iLAorCQkJCSAgIF9fZnVuY19fKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJcmV0ID0gc2hfZXRoX2Rldl9pbml0KG5kZXYsIGZhbHNlKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCW5ldGRldl9lcnIobmRldiwgIiVzOiBzaF9ldGhfZGV2X2luaXQgZmFpbGVkLlxuIiwKKwkJCQkgICBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJbWRwLT5pcnFfZW5hYmxlZCA9IHRydWU7CiAJCXNoX2V0aF93cml0ZShuZGV2LCBtZHAtPmNkLT5lZXNpcHJfdmFsdWUsIEVFU0lQUik7CiAJCS8qIFNldHRpbmcgdGhlIFJ4IG1vZGUgd2lsbCBzdGFydCB0aGUgUnggcHJvY2Vzcy4gKi8KIAkJc2hfZXRoX3dyaXRlKG5kZXYsIEVEUlJSX1IsIEVEUlJSKTsKLQkJbmV0aWZfd2FrZV9xdWV1ZShuZGV2KTsKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTIwNzYsNyArMjEzMyw3IEBACiAKIAluZXRpZl9lcnIobWRwLCB0aW1lciwgbmRldiwKIAkJICAidHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTguOHgsIHJlc2V0dGluZy4uLlxuIiwKLQkJICAoaW50KXNoX2V0aF9yZWFkKG5kZXYsIEVFU1IpKTsKKwkJICBzaF9ldGhfcmVhZChuZGV2LCBFRVNSKSk7CiAKIAkvKiB0eF9lcnJvcnMgY291bnQgdXAgKi8KIAluZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKQEAgLTIxMTcsNiArMjE3NCw5IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1kcC0+bG9jaywgZmxhZ3MpOwogCisJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwogCWVudHJ5ID0gbWRwLT5jdXJfdHggJSBtZHAtPm51bV90eF9yaW5nOwogCW1kcC0+dHhfc2tidWZmW2VudHJ5XSA9IHNrYjsKIAl0eGRlc2MgPSAmbWRwLT50eF9yaW5nW2VudHJ5XTsKQEAgLTIxMjYsMTAgKzIxODYsMTEgQEAKIAkJCQkgc2tiLT5sZW4gKyAyKTsKIAl0eGRlc2MtPmFkZHIgPSBkbWFfbWFwX3NpbmdsZSgmbmRldi0+ZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAogCQkJCSAgICAgIERNQV9UT19ERVZJQ0UpOwotCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKQotCQl0eGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBFVEhfWkxFTjsKLQllbHNlCi0JCXR4ZGVzYy0+YnVmZmVyX2xlbmd0aCA9IHNrYi0+bGVuOworCWlmIChkbWFfbWFwcGluZ19lcnJvcigmbmRldi0+ZGV2LCB0eGRlc2MtPmFkZHIpKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKwl0eGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBza2ItPmxlbjsKIAogCWlmIChlbnRyeSA+PSBtZHAtPm51bV90eF9yaW5nIC0gMSkKIAkJdHhkZXNjLT5zdGF0dXMgfD0gY3B1X3RvX2VkbWFjKG1kcCwgVERfVEFDVCB8IFREX1RETEUpOwpAQCAtMjE4MSwxNCArMjI0MiwxNyBAQAogCiAJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKIAotCS8qIERpc2FibGUgaW50ZXJydXB0cyBieSBjbGVhcmluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCisJLyogU2VyaWFsaXNlIHdpdGggdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCBOQVBJLCB0aGVuIGRpc2FibGUKKwkgKiBpbnRlcnJ1cHRzLiAgV2UgaGF2ZSB0byBjbGVhciB0aGUgaXJxX2VuYWJsZWQgZmxhZyBmaXJzdCB0bworCSAqIGVuc3VyZSB0aGF0IGludGVycnVwdHMgd29uJ3QgYmUgcmUtZW5hYmxlZC4KKwkgKi8KKwltZHAtPmlycV9lbmFibGVkID0gZmFsc2U7CisJc3luY2hyb25pemVfaXJxKG5kZXYtPmlycSk7CisJbmFwaV9kaXNhYmxlKCZtZHAtPm5hcGkpOwogCXNoX2V0aF93cml0ZShuZGV2LCAweDAwMDAsIEVFU0lQUik7CiAKLQkvKiBTdG9wIHRoZSBjaGlwJ3MgVHggYW5kIFJ4IHByb2Nlc3Nlcy4gKi8KLQlzaF9ldGhfd3JpdGUobmRldiwgMCwgRURUUlIpOwotCXNoX2V0aF93cml0ZShuZGV2LCAwLCBFRFJSUik7CisJc2hfZXRoX2Rldl9leGl0KG5kZXYpOwogCi0Jc2hfZXRoX2dldF9zdGF0cyhuZGV2KTsKIAkvKiBQSFkgRGlzY29ubmVjdCAqLwogCWlmIChtZHAtPnBoeWRldikgewogCQlwaHlfc3RvcChtZHAtPnBoeWRldik7CkBAIC0yMTk4LDggKzIyNjIsNiBAQAogCiAJZnJlZV9pcnEobmRldi0+aXJxLCBuZGV2KTsKIAotCW5hcGlfZGlzYWJsZSgmbWRwLT5uYXBpKTsKLQogCS8qIEZyZWUgYWxsIHRoZSBza2J1ZmZzIGluIHRoZSBSeCBxdWV1ZS4gKi8KIAlzaF9ldGhfcmluZ19mcmVlKG5kZXYpOwogCkBAIC0yOTU3LDYgKzMwMTksMzYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QTQorI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCBzaF9ldGhfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7CisJCXJldCA9IHNoX2V0aF9jbG9zZShuZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNoX2V0aF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldCA9IDA7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgeworCQlyZXQgPSBzaF9ldGhfb3BlbihuZGV2KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQluZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpOworCX0KKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBzaF9ldGhfcnVudGltZV9ub3Aoc3RydWN0IGRldmljZSAqZGV2KQogewogCS8qIFJ1bnRpbWUgUE0gY2FsbGJhY2sgc2hhcmVkIGJldHdlZW4gLT5ydW50aW1lX3N1c3BlbmQoKQpAQCAtMjk3MCw4ICszMDYyLDggQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHNoX2V0aF9kZXZfcG1fb3BzID0gewotCS5ydW50aW1lX3N1c3BlbmQgPSBzaF9ldGhfcnVudGltZV9ub3AsCi0JLnJ1bnRpbWVfcmVzdW1lID0gc2hfZXRoX3J1bnRpbWVfbm9wLAorCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHNoX2V0aF9zdXNwZW5kLCBzaF9ldGhfcmVzdW1lKQorCVNFVF9SVU5USU1FX1BNX09QUyhzaF9ldGhfcnVudGltZV9ub3AsIHNoX2V0aF9ydW50aW1lX25vcCwgTlVMTCkKIH07CiAjZGVmaW5lIFNIX0VUSF9QTV9PUFMgKCZzaF9ldGhfZGV2X3BtX29wcykKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguaAppbmRleCA3MWY1ZGUxLi4yNTlkMDNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9zaF9ldGguaAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL3NoX2V0aC5oCkBAIC00NTksMjEgKzQ1OSwyMSBAQAogCiAJLyogbWFuZGF0b3J5IGluaXRpYWxpemUgdmFsdWUgKi8KIAlpbnQgcmVnaXN0ZXJfdHlwZTsKLQl1bnNpZ25lZCBsb25nIGVlc2lwcl92YWx1ZTsKKwl1MzIgZWVzaXByX3ZhbHVlOwogCiAJLyogb3B0aW9uYWwgaW5pdGlhbGl6ZSB2YWx1ZSAqLwotCXVuc2lnbmVkIGxvbmcgZWNzcl92YWx1ZTsKLQl1bnNpZ25lZCBsb25nIGVjc2lwcl92YWx1ZTsKLQl1bnNpZ25lZCBsb25nIGZkcl92YWx1ZTsKLQl1bnNpZ25lZCBsb25nIGZjZnRyX3ZhbHVlOwotCXVuc2lnbmVkIGxvbmcgcnBhZGlyX3ZhbHVlOworCXUzMiBlY3NyX3ZhbHVlOworCXUzMiBlY3NpcHJfdmFsdWU7CisJdTMyIGZkcl92YWx1ZTsKKwl1MzIgZmNmdHJfdmFsdWU7CisJdTMyIHJwYWRpcl92YWx1ZTsKIAogCS8qIGludGVycnVwdCBjaGVja2luZyBtYXNrICovCi0JdW5zaWduZWQgbG9uZyB0eF9jaGVjazsKLQl1bnNpZ25lZCBsb25nIGVlc3JfZXJyX2NoZWNrOworCXUzMiB0eF9jaGVjazsKKwl1MzIgZWVzcl9lcnJfY2hlY2s7CiAKIAkvKiBFcnJvciBtYXNrICovCi0JdW5zaWduZWQgbG9uZyB0cnNjZXJfZXJyX21hc2s7CisJdTMyIHRyc2Nlcl9lcnJfbWFzazsKIAogCS8qIGhhcmR3YXJlIGZlYXR1cmVzICovCiAJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7IC8qIElSUSBjb25maWd1cmF0aW9uIGZsYWdzICovCkBAIC01MTMsNiArNTEzLDcgQEAKIAl1MzIgcnhfYnVmX3N6OwkJCS8qIEJhc2VkIG9uIE1UVStzbGFjay4gKi8KIAlpbnQgZWRtYWNfZW5kaWFuOwogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCWJvb2wgaXJxX2VuYWJsZWQ7CiAJLyogTUlJIHRyYW5zY2VpdmVyIHNlY3Rpb24uICovCiAJdTMyIHBoeV9pZDsJCQkvKiBQSFkgSUQgKi8KIAlzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1czsJLyogTURJTyBidXMgY29udHJvbCAqLwpAQCAtNTQyLDcgKzU0Myw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNoX2V0aF93cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdW5zaWduZWQgbG9uZyBkYXRhLAorc3RhdGljIGlubGluZSB2b2lkIHNoX2V0aF93cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGRhdGEsCiAJCQkJaW50IGVudW1faW5kZXgpCiB7CiAJc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKQEAgLTU1MCw4ICs1NTEsNyBAQAogCWlvd3JpdGUzMihkYXRhLCBtZHAtPmFkZHIgKyBtZHAtPnJlZ19vZmZzZXRbZW51bV9pbmRleF0pOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2hfZXRoX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCi0JCQkJCWludCBlbnVtX2luZGV4KQorc3RhdGljIGlubGluZSB1MzIgc2hfZXRoX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBlbnVtX2luZGV4KQogewogCXN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwID0gbmV0ZGV2X3ByaXYobmRldik7CiAKQEAgLTU2NCwxNCArNTY0LDEzIEBACiAJcmV0dXJuIG1kcC0+dHN1X2FkZHIgKyBtZHAtPnJlZ19vZmZzZXRbZW51bV9pbmRleF07CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzaF9ldGhfdHN1X3dyaXRlKHN0cnVjdCBzaF9ldGhfcHJpdmF0ZSAqbWRwLAotCQkJCXVuc2lnbmVkIGxvbmcgZGF0YSwgaW50IGVudW1faW5kZXgpCitzdGF0aWMgaW5saW5lIHZvaWQgc2hfZXRoX3RzdV93cml0ZShzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCwgdTMyIGRhdGEsCisJCQkJICAgIGludCBlbnVtX2luZGV4KQogewogCWlvd3JpdGUzMihkYXRhLCBtZHAtPnRzdV9hZGRyICsgbWRwLT5yZWdfb2Zmc2V0W2VudW1faW5kZXhdKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNoX2V0aF90c3VfcmVhZChzdHJ1Y3Qgc2hfZXRoX3ByaXZhdGUgKm1kcCwKLQkJCQkJaW50IGVudW1faW5kZXgpCitzdGF0aWMgaW5saW5lIHUzMiBzaF9ldGhfdHN1X3JlYWQoc3RydWN0IHNoX2V0aF9wcml2YXRlICptZHAsIGludCBlbnVtX2luZGV4KQogewogCXJldHVybiBpb3JlYWQzMihtZHAtPnRzdV9hZGRyICsgbWRwLT5yZWdfb2Zmc2V0W2VudW1faW5kZXhdKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXIuYwppbmRleCAyZjM5OGZhLi4zNDM4OWI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlci5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JvY2tlci9yb2NrZXIuYwpAQCAtODA2LDEzICs4MDYsMTMgQEAKIAogc3RhdGljIHZvaWQgKnJvY2tlcl9kZXNjX2Nvb2tpZV9wdHJfZ2V0KHN0cnVjdCByb2NrZXJfZGVzY19pbmZvICpkZXNjX2luZm8pCiB7Ci0JcmV0dXJuICh2b2lkICopIGRlc2NfaW5mby0+ZGVzYy0+Y29va2llOworCXJldHVybiAodm9pZCAqKSh1aW50cHRyX3QpZGVzY19pbmZvLT5kZXNjLT5jb29raWU7CiB9CiAKIHN0YXRpYyB2b2lkIHJvY2tlcl9kZXNjX2Nvb2tpZV9wdHJfc2V0KHN0cnVjdCByb2NrZXJfZGVzY19pbmZvICpkZXNjX2luZm8sCiAJCQkJICAgICAgIHZvaWQgKnB0cikKIHsKLQlkZXNjX2luZm8tPmRlc2MtPmNvb2tpZSA9IChsb25nKSBwdHI7CisJZGVzY19pbmZvLT5kZXNjLT5jb29raWUgPSAodWludHB0cl90KSBwdHI7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgcm9ja2VyX2Rlc2NfaW5mbyAqCkBAIC0zMDI2LDExICszMDI2LDE3IEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgcm9ja2VyX2ZkYl9sZWFybl93b3JrLCB3b3JrKTsKIAlib29sIHJlbW92aW5nID0gKGx3LT5mbGFncyAmIFJPQ0tFUl9PUF9GTEFHX1JFTU9WRSk7CiAJYm9vbCBsZWFybmVkID0gKGx3LT5mbGFncyAmIFJPQ0tFUl9PUF9GTEFHX0xFQVJORUQpOworCXN0cnVjdCBuZXRkZXZfc3dpdGNoX25vdGlmaWVyX2ZkYl9pbmZvIGluZm87CisKKwlpbmZvLmFkZHIgPSBsdy0+YWRkcjsKKwlpbmZvLnZpZCA9IGx3LT52aWQ7CiAKIAlpZiAobGVhcm5lZCAmJiByZW1vdmluZykKLQkJYnJfZmRiX2V4dGVybmFsX2xlYXJuX2RlbChsdy0+ZGV2LCBsdy0+YWRkciwgbHctPnZpZCk7CisJCWNhbGxfbmV0ZGV2X3N3aXRjaF9ub3RpZmllcnMoTkVUREVWX1NXSVRDSF9GREJfREVMLAorCQkJCQkgICAgIGx3LT5kZXYsICZpbmZvLmluZm8pOwogCWVsc2UgaWYgKGxlYXJuZWQgJiYgIXJlbW92aW5nKQotCQlicl9mZGJfZXh0ZXJuYWxfbGVhcm5fYWRkKGx3LT5kZXYsIGx3LT5hZGRyLCBsdy0+dmlkKTsKKwkJY2FsbF9uZXRkZXZfc3dpdGNoX25vdGlmaWVycyhORVRERVZfU1dJVENIX0ZEQl9BREQsCisJCQkJCSAgICAgbHctPmRldiwgJmluZm8uaW5mbyk7CiAKIAlrZnJlZSh3b3JrKTsKIH0KQEAgLTM1NjUsNiArMzU3MSw4IEBACiAJcm9ja2VyX3Rsdl9uZXN0X2NhbmNlbChkZXNjX2luZm8sIGZyYWdzKTsKIG91dDoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CisJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CisKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC0zNjY4LDcgKzM2NzYsOCBAQAogCWlmICh2aWQgJiYgbmxhX3B1dF91MTYoc2tiLCBOREFfVkxBTiwgdmlkKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKQEAgLTM3MTMsNyArMzcyMiw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcm9ja2VyX3BvcnRfYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKKwkJCQkgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdTE2IGZsYWdzKQogewogCXN0cnVjdCByb2NrZXJfcG9ydCAqcm9ja2VyX3BvcnQgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBubGF0dHIgKnByb3RpbmZvOwpAQCAtMzgyNCwxMSArMzgzMywxNDUgQEAKIAlzdHJsY3B5KGRydmluZm8tPnZlcnNpb24sIFVUU19SRUxFQVNFLCBzaXplb2YoZHJ2aW5mby0+dmVyc2lvbikpOwogfQogCitzdGF0aWMgc3RydWN0IHJvY2tlcl9wb3J0X3N0YXRzIHsKKwljaGFyIHN0cltFVEhfR1NUUklOR19MRU5dOworCWludCB0eXBlOworfSByb2NrZXJfcG9ydF9zdGF0c1tdID0geworCXsgInJ4X3BhY2tldHMiLCBST0NLRVJfVExWX0NNRF9QT1JUX1NUQVRTX1JYX1BLVFMsICAgIH0sCisJeyAicnhfYnl0ZXMiLCAgIFJPQ0tFUl9UTFZfQ01EX1BPUlRfU1RBVFNfUlhfQllURVMsICAgfSwKKwl7ICJyeF9kcm9wcGVkIiwgUk9DS0VSX1RMVl9DTURfUE9SVF9TVEFUU19SWF9EUk9QUEVELCB9LAorCXsgInJ4X2Vycm9ycyIsICBST0NLRVJfVExWX0NNRF9QT1JUX1NUQVRTX1JYX0VSUk9SUywgIH0sCisKKwl7ICJ0eF9wYWNrZXRzIiwgUk9DS0VSX1RMVl9DTURfUE9SVF9TVEFUU19UWF9QS1RTLCAgICB9LAorCXsgInR4X2J5dGVzIiwgICBST0NLRVJfVExWX0NNRF9QT1JUX1NUQVRTX1RYX0JZVEVTLCAgIH0sCisJeyAidHhfZHJvcHBlZCIsIFJPQ0tFUl9UTFZfQ01EX1BPUlRfU1RBVFNfVFhfRFJPUFBFRCwgfSwKKwl7ICJ0eF9lcnJvcnMiLCAgUk9DS0VSX1RMVl9DTURfUE9SVF9TVEFUU19UWF9FUlJPUlMsICB9LAorfTsKKworI2RlZmluZSBST0NLRVJfUE9SVF9TVEFUU19MRU4gIEFSUkFZX1NJWkUocm9ja2VyX3BvcnRfc3RhdHMpCisKK3N0YXRpYyB2b2lkIHJvY2tlcl9wb3J0X2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBzdHJpbmdzZXQsCisJCQkJICAgIHU4ICpkYXRhKQoreworCXU4ICpwID0gZGF0YTsKKwlpbnQgaTsKKworCXN3aXRjaCAoc3RyaW5nc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJvY2tlcl9wb3J0X3N0YXRzKTsgaSsrKSB7CisJCQltZW1jcHkocCwgcm9ja2VyX3BvcnRfc3RhdHNbaV0uc3RyLCBFVEhfR1NUUklOR19MRU4pOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCX0KKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50Cityb2NrZXJfY21kX2dldF9wb3J0X3N0YXRzX3ByZXAoc3RydWN0IHJvY2tlciAqcm9ja2VyLAorCQkJICAgICAgIHN0cnVjdCByb2NrZXJfcG9ydCAqcm9ja2VyX3BvcnQsCisJCQkgICAgICAgc3RydWN0IHJvY2tlcl9kZXNjX2luZm8gKmRlc2NfaW5mbywKKwkJCSAgICAgICB2b2lkICpwcml2KQoreworCXN0cnVjdCByb2NrZXJfdGx2ICpjbWRfc3RhdHM7CisKKwlpZiAocm9ja2VyX3Rsdl9wdXRfdTE2KGRlc2NfaW5mbywgUk9DS0VSX1RMVl9DTURfVFlQRSwKKwkJCSAgICAgICBST0NLRVJfVExWX0NNRF9UWVBFX0dFVF9QT1JUX1NUQVRTKSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCWNtZF9zdGF0cyA9IHJvY2tlcl90bHZfbmVzdF9zdGFydChkZXNjX2luZm8sIFJPQ0tFUl9UTFZfQ01EX0lORk8pOworCWlmICghY21kX3N0YXRzKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJaWYgKHJvY2tlcl90bHZfcHV0X3UzMihkZXNjX2luZm8sIFJPQ0tFUl9UTFZfQ01EX1BPUlRfU1RBVFNfTFBPUlQsCisJCQkgICAgICAgcm9ja2VyX3BvcnQtPmxwb3J0KSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCXJvY2tlcl90bHZfbmVzdF9lbmQoZGVzY19pbmZvLCBjbWRfc3RhdHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JvY2tlcl9jbWRfZ2V0X3BvcnRfc3RhdHNfZXRodG9vbF9wcm9jKHN0cnVjdCByb2NrZXIgKnJvY2tlciwKKwkJCQkgICAgICAgc3RydWN0IHJvY2tlcl9wb3J0ICpyb2NrZXJfcG9ydCwKKwkJCQkgICAgICAgc3RydWN0IHJvY2tlcl9kZXNjX2luZm8gKmRlc2NfaW5mbywKKwkJCQkgICAgICAgdm9pZCAqcHJpdikKK3sKKwlzdHJ1Y3Qgcm9ja2VyX3RsdiAqYXR0cnNbUk9DS0VSX1RMVl9DTURfTUFYICsgMV07CisJc3RydWN0IHJvY2tlcl90bHYgKnN0YXRzX2F0dHJzW1JPQ0tFUl9UTFZfQ01EX1BPUlRfU1RBVFNfTUFYICsgMV07CisJc3RydWN0IHJvY2tlcl90bHYgKnBhdHRyOworCXUzMiBscG9ydDsKKwl1NjQgKmRhdGEgPSBwcml2OworCWludCBpOworCisJcm9ja2VyX3Rsdl9wYXJzZV9kZXNjKGF0dHJzLCBST0NLRVJfVExWX0NNRF9NQVgsIGRlc2NfaW5mbyk7CisKKwlpZiAoIWF0dHJzW1JPQ0tFUl9UTFZfQ01EX0lORk9dKQorCQlyZXR1cm4gLUVJTzsKKworCXJvY2tlcl90bHZfcGFyc2VfbmVzdGVkKHN0YXRzX2F0dHJzLCBST0NLRVJfVExWX0NNRF9QT1JUX1NUQVRTX01BWCwKKwkJCQlhdHRyc1tST0NLRVJfVExWX0NNRF9JTkZPXSk7CisKKwlpZiAoIXN0YXRzX2F0dHJzW1JPQ0tFUl9UTFZfQ01EX1BPUlRfU1RBVFNfTFBPUlRdKQorCQlyZXR1cm4gLUVJTzsKKworCWxwb3J0ID0gcm9ja2VyX3Rsdl9nZXRfdTMyKHN0YXRzX2F0dHJzW1JPQ0tFUl9UTFZfQ01EX1BPUlRfU1RBVFNfTFBPUlRdKTsKKwlpZiAobHBvcnQgIT0gcm9ja2VyX3BvcnQtPmxwb3J0KQorCQlyZXR1cm4gLUVJTzsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJvY2tlcl9wb3J0X3N0YXRzKTsgaSsrKSB7CisJCXBhdHRyID0gc3RhdHNfYXR0cnNbcm9ja2VyX3BvcnRfc3RhdHNbaV0udHlwZV07CisJCWlmICghcGF0dHIpCisJCQljb250aW51ZTsKKworCQlkYXRhW2ldID0gcm9ja2VyX3Rsdl9nZXRfdTY0KHBhdHRyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByb2NrZXJfY21kX2dldF9wb3J0X3N0YXRzX2V0aHRvb2woc3RydWN0IHJvY2tlcl9wb3J0ICpyb2NrZXJfcG9ydCwKKwkJCQkJICAgICB2b2lkICpwcml2KQoreworCXJldHVybiByb2NrZXJfY21kX2V4ZWMocm9ja2VyX3BvcnQtPnJvY2tlciwgcm9ja2VyX3BvcnQsCisJCQkgICAgICAgcm9ja2VyX2NtZF9nZXRfcG9ydF9zdGF0c19wcmVwLCBOVUxMLAorCQkJICAgICAgIHJvY2tlcl9jbWRfZ2V0X3BvcnRfc3RhdHNfZXRodG9vbF9wcm9jLAorCQkJICAgICAgIHByaXYsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgcm9ja2VyX3BvcnRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgcm9ja2VyX3BvcnQgKnJvY2tlcl9wb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChyb2NrZXJfY21kX2dldF9wb3J0X3N0YXRzX2V0aHRvb2wocm9ja2VyX3BvcnQsIGRhdGEpICE9IDApIHsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocm9ja2VyX3BvcnRfc3RhdHMpOyArK2kpCisJCQlkYXRhW2ldID0gMDsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgcm9ja2VyX3BvcnRfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHNzZXQpCit7CisJc3dpdGNoIChzc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCXJldHVybiBST0NLRVJfUE9SVF9TVEFUU19MRU47CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyByb2NrZXJfcG9ydF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCQk9IHJvY2tlcl9wb3J0X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IHJvY2tlcl9wb3J0X3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JCT0gcm9ja2VyX3BvcnRfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9zdHJpbmdzCQk9IHJvY2tlcl9wb3J0X2dldF9zdHJpbmdzLAorCS5nZXRfZXRodG9vbF9zdGF0cwk9IHJvY2tlcl9wb3J0X2dldF9zdGF0cywKKwkuZ2V0X3NzZXRfY291bnQJCT0gcm9ja2VyX3BvcnRfZ2V0X3NzZXRfY291bnQsCiB9OwogCiAvKioqKioqKioqKioqKioqKioKQEAgLTM4NTAsMTIgKzM5OTMsMjIgQEAKIAogCS8qIENsZWFudXAgdHggZGVzY3JpcHRvcnMgKi8KIAl3aGlsZSAoKGRlc2NfaW5mbyA9IHJvY2tlcl9kZXNjX3RhaWxfZ2V0KCZyb2NrZXJfcG9ydC0+dHhfcmluZykpKSB7CisJCXN0cnVjdCBza19idWZmICpza2I7CisKIAkJZXJyID0gcm9ja2VyX2Rlc2NfZXJyKGRlc2NfaW5mbyk7CiAJCWlmIChlcnIgJiYgbmV0X3JhdGVsaW1pdCgpKQogCQkJbmV0ZGV2X2Vycihyb2NrZXJfcG9ydC0+ZGV2LCAidHggZGVzYyByZWNlaXZlZCB3aXRoIGVyciAlZFxuIiwKIAkJCQkgICBlcnIpOwogCQlyb2NrZXJfdHhfZGVzY19mcmFnc191bm1hcChyb2NrZXJfcG9ydCwgZGVzY19pbmZvKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkocm9ja2VyX2Rlc2NfY29va2llX3B0cl9nZXQoZGVzY19pbmZvKSk7CisKKwkJc2tiID0gcm9ja2VyX2Rlc2NfY29va2llX3B0cl9nZXQoZGVzY19pbmZvKTsKKwkJaWYgKGVyciA9PSAwKSB7CisJCQlyb2NrZXJfcG9ydC0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQlyb2NrZXJfcG9ydC0+ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKwkJfSBlbHNlCisJCQlyb2NrZXJfcG9ydC0+ZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQljcmVkaXRzKys7CiAJfQogCkBAIC0zODg4LDYgKzQwNDEsMTAgQEAKIAlyeF9sZW4gPSByb2NrZXJfdGx2X2dldF91MTYoYXR0cnNbUk9DS0VSX1RMVl9SWF9GUkFHX0xFTl0pOwogCXNrYl9wdXQoc2tiLCByeF9sZW4pOwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHJvY2tlcl9wb3J0LT5kZXYpOworCisJcm9ja2VyX3BvcnQtPmRldi0+c3RhdHMucnhfcGFja2V0cysrOworCXJvY2tlcl9wb3J0LT5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCiAJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKIAogCXJldHVybiByb2NrZXJfZG1hX3J4X3Jpbmdfc2tiX2FsbG9jKHJvY2tlciwgcm9ja2VyX3BvcnQsIGRlc2NfaW5mbyk7CkBAIC0zOTIxLDYgKzQwNzgsOSBAQAogCQkJCW5ldGRldl9lcnIocm9ja2VyX3BvcnQtPmRldiwgInJ4IHByb2Nlc3NpbmcgZmFpbGVkIHdpdGggZXJyICVkXG4iLAogCQkJCQkgICBlcnIpOwogCQl9CisJCWlmIChlcnIpCisJCQlyb2NrZXJfcG9ydC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwogCQlyb2NrZXJfZGVzY19nZW5fY2xlYXIoZGVzY19pbmZvKTsKIAkJcm9ja2VyX2Rlc2NfaGVhZF9zZXQocm9ja2VyLCAmcm9ja2VyX3BvcnQtPnJ4X3JpbmcsIGRlc2NfaW5mbyk7CiAJCWNyZWRpdHMrKzsKQEAgLTQwMDQsNyArNDE2NCw4IEBACiAJCSAgICAgICBOQVBJX1BPTExfV0VJR0hUKTsKIAlyb2NrZXJfY2Fycmllcl9pbml0KHJvY2tlcl9wb3J0KTsKIAotCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSOworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSIHwKKwkJCQlORVRJRl9GX0hXX1NXSVRDSF9PRkZMT0FEOwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlci5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlci5oCmluZGV4IDhkMjg2NWJhLi5hNWJjNDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yb2NrZXIvcm9ja2VyLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcm9ja2VyL3JvY2tlci5oCkBAIC0xMjcsNiArMTI3LDkgQEAKIAlST0NLRVJfVExWX0NNRF9UWVBFX09GX0RQQV9HUk9VUF9ERUwsCiAJUk9DS0VSX1RMVl9DTURfVFlQRV9PRl9EUEFfR1JPVVBfR0VUX1NUQVRTLAogCisJUk9DS0VSX1RMVl9DTURfVFlQRV9DTEVBUl9QT1JUX1NUQVRTLAorCVJPQ0tFUl9UTFZfQ01EX1RZUEVfR0VUX1BPUlRfU1RBVFMsCisKIAlfX1JPQ0tFUl9UTFZfQ01EX1RZUEVfTUFYLAogCVJPQ0tFUl9UTFZfQ01EX1RZUEVfTUFYID0gX19ST0NLRVJfVExWX0NNRF9UWVBFX01BWCAtIDEsCiB9OwpAQCAtMTQ2LDYgKzE0OSwyNCBAQAogCQkJX19ST0NLRVJfVExWX0NNRF9QT1JUX1NFVFRJTkdTX01BWCAtIDEsCiB9OwogCitlbnVtIHsKKwlST0NLRVJfVExWX0NNRF9QT1JUX1NUQVRTX1VOU1BFQywKKwlST0NLRVJfVExWX0NNRF9QT1JUX1NUQVRTX0xQT1JULCAgICAgICAgICAgIC8qIHUzMiAqLworCisJUk9DS0VSX1RMVl9DTURfUE9SVF9TVEFUU19SWF9QS1RTLCAgICAgICAgICAvKiB1NjQgKi8KKwlST0NLRVJfVExWX0NNRF9QT1JUX1NUQVRTX1JYX0JZVEVTLCAgICAgICAgIC8qIHU2NCAqLworCVJPQ0tFUl9UTFZfQ01EX1BPUlRfU1RBVFNfUlhfRFJPUFBFRCwgICAgICAgLyogdTY0ICovCisJUk9DS0VSX1RMVl9DTURfUE9SVF9TVEFUU19SWF9FUlJPUlMsICAgICAgICAvKiB1NjQgKi8KKworCVJPQ0tFUl9UTFZfQ01EX1BPUlRfU1RBVFNfVFhfUEtUUywgICAgICAgICAgLyogdTY0ICovCisJUk9DS0VSX1RMVl9DTURfUE9SVF9TVEFUU19UWF9CWVRFUywgICAgICAgICAvKiB1NjQgKi8KKwlST0NLRVJfVExWX0NNRF9QT1JUX1NUQVRTX1RYX0RST1BQRUQsICAgICAgIC8qIHU2NCAqLworCVJPQ0tFUl9UTFZfQ01EX1BPUlRfU1RBVFNfVFhfRVJST1JTLCAgICAgICAgLyogdTY0ICovCisKKwlfX1JPQ0tFUl9UTFZfQ01EX1BPUlRfU1RBVFNfTUFYLAorCVJPQ0tFUl9UTFZfQ01EX1BPUlRfU1RBVFNfTUFYID0gX19ST0NLRVJfVExWX0NNRF9QT1JUX1NUQVRTX01BWCAtIDEsCit9OworCiBlbnVtIHJvY2tlcl9wb3J0X21vZGUgewogCVJPQ0tFUl9QT1JUX01PREVfT0ZfRFBBLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3NhbXN1bmcvc3hnYmUvc3hnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMKaW5kZXggYjFhMjcxOC4uYzhhMDFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc2Ftc3VuZy9zeGdiZS9zeGdiZV9tYWluLmMKQEAgLTEzMyw5ICsxMzMsOCBAQAogCQkJcmV0dXJuIGZhbHNlOwogCiAJCXByaXYtPmVlZV9hY3RpdmUgPSAxOwotCQlpbml0X3RpbWVyKCZwcml2LT5lZWVfY3RybF90aW1lcik7Ci0JCXByaXYtPmVlZV9jdHJsX3RpbWVyLmZ1bmN0aW9uID0gc3hnYmVfZWVlX2N0cmxfdGltZXI7Ci0JCXByaXYtPmVlZV9jdHJsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylwcml2OworCQlzZXR1cF90aW1lcigmcHJpdi0+ZWVlX2N0cmxfdGltZXIsIHN4Z2JlX2VlZV9jdHJsX3RpbWVyLAorCQkJICAgICh1bnNpZ25lZCBsb25nKXByaXYpOwogCQlwcml2LT5lZWVfY3RybF90aW1lci5leHBpcmVzID0gU1hHQkVfTFBJX1RJTUVSKGVlZV90aW1lcik7CiAJCWFkZF90aW1lcigmcHJpdi0+ZWVlX2N0cmxfdGltZXIpOwogCkBAIC0zNjUsNiArMzY0LDI2IEBACiAKIAlyZXR1cm4gMDsKIH0KKworLyoqCisgKiBzeGdiZV9mcmVlX3J4X2J1ZmZlcnMgLSBmcmVlIHdoYXQgc3hnYmVfaW5pdF9yeF9idWZmZXJzKCkgYWxsb2NhdGVkCisgKiBAZGV2OiBuZXQgZGV2aWNlIHN0cnVjdHVyZQorICogQHJ4X3Jpbmc6IHJpbmcgdG8gYmUgZnJlZWQKKyAqIEByeF9yc2l6ZTogcmluZyBzaXplCisgKiBEZXNjcmlwdGlvbjogIHRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIERNQSBSWCBkZXNjcmlwdG9yCisgKi8KK3N0YXRpYyB2b2lkIHN4Z2JlX2ZyZWVfcnhfYnVmZmVycyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IHN4Z2JlX3J4X25vcm1fZGVzYyAqcCwgaW50IGksCisJCQkJICB1bnNpZ25lZCBpbnQgZG1hX2J1Zl9zeiwKKwkJCQkgIHN0cnVjdCBzeGdiZV9yeF9xdWV1ZSAqcnhfcmluZykKK3sKKwlzdHJ1Y3Qgc3hnYmVfcHJpdl9kYXRhICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWtmcmVlX3NrYihyeF9yaW5nLT5yeF9za2J1ZmZbaV0pOworCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+ZGV2aWNlLCByeF9yaW5nLT5yeF9za2J1ZmZfZG1hW2ldLAorCQkJIGRtYV9idWZfc3osIERNQV9GUk9NX0RFVklDRSk7Cit9CisKIC8qKgogICogaW5pdF90eF9yaW5nIC0gaW5pdCB0aGUgVFggZGVzY3JpcHRvciByaW5nCiAgKiBAZGV2OiBuZXQgZGV2aWNlIHN0cnVjdHVyZQpAQCAtNDU3LDcgKzQ3Niw3IEBACiAJLyogUlggcmluZyBpcyBub3QgYWxsY29hdGVkICovCiAJaWYgKHJ4X3JpbmcgPT0gTlVMTCkgewogCQluZXRkZXZfZXJyKGRldiwgIk5vIG1lbW9yeSBmb3IgUlggcXVldWVcbiIpOwotCQlnb3RvIGVycm9yOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBhc3NpZ24gcXVldWUgbnVtYmVyICovCkBAIC00NjksMjMgKzQ4OCwyMSBAQAogCQkJCQkgICAgICAmcnhfcmluZy0+ZG1hX3J4X3BoeSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAocnhfcmluZy0+ZG1hX3J4ID09IE5VTEwpCi0JCWdvdG8gZXJyb3I7CisJCXJldHVybiAtRU5PTUVNOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBSWCBza2J1ZmYgYXJyYXkgKi8KIAlyeF9yaW5nLT5yeF9za2J1ZmZfZG1hID0ga21hbGxvY19hcnJheShyeF9yc2l6ZSwKIAkJCQkJICAgICAgIHNpemVvZihkbWFfYWRkcl90KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyeF9yaW5nLT5yeF9za2J1ZmZfZG1hKSB7Ci0JCWRtYV9mcmVlX2NvaGVyZW50KHByaXYtPmRldmljZSwKLQkJCQkgIHJ4X3JzaXplICogc2l6ZW9mKHN0cnVjdCBzeGdiZV9yeF9ub3JtX2Rlc2MpLAotCQkJCSAgcnhfcmluZy0+ZG1hX3J4LCByeF9yaW5nLT5kbWFfcnhfcGh5KTsKLQkJZ290byBlcnJvcjsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9kbWFfcng7CiAJfQogCiAJcnhfcmluZy0+cnhfc2tidWZmID0ga21hbGxvY19hcnJheShyeF9yc2l6ZSwKIAkJCQkJICAgc2l6ZW9mKHN0cnVjdCBza19idWZmICopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJ4X3JpbmctPnJ4X3NrYnVmZikgewotCQlrZnJlZShyeF9yaW5nLT5yeF9za2J1ZmZfZG1hKTsKLQkJZ290byBlcnJvcjsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBlcnJfZnJlZV9za2J1ZmZfZG1hOwogCX0KIAogCS8qIGluaXRpYWxpc2UgdGhlIGJ1ZmZlcnMgKi8KQEAgLTQ5NSw3ICs1MTIsNyBAQAogCQlyZXQgPSBzeGdiZV9pbml0X3J4X2J1ZmZlcnMoZGV2LCBwLCBkZXNjX2luZGV4LAogCQkJCQkgICAgYmZzaXplLCByeF9yaW5nKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gZXJyX2luaXRfcnhfYnVmZmVyczsKKwkJCWdvdG8gZXJyX2ZyZWVfcnhfYnVmZmVyczsKIAl9CiAKIAkvKiBpbml0YWxpc2UgY291bnRlcnMgKi8KQEAgLTUwNSwxMSArNTIyLDIyIEBACiAKIAlyZXR1cm4gMDsKIAotZXJyX2luaXRfcnhfYnVmZmVyczoKLQl3aGlsZSAoLS1kZXNjX2luZGV4ID49IDApCi0JCWZyZWVfcnhfcmluZyhwcml2LT5kZXZpY2UsIHJ4X3JpbmcsIGRlc2NfaW5kZXgpOwotZXJyb3I6Ci0JcmV0dXJuIC1FTk9NRU07CitlcnJfZnJlZV9yeF9idWZmZXJzOgorCXdoaWxlICgtLWRlc2NfaW5kZXggPj0gMCkgeworCQlzdHJ1Y3Qgc3hnYmVfcnhfbm9ybV9kZXNjICpwOworCisJCXAgPSByeF9yaW5nLT5kbWFfcnggKyBkZXNjX2luZGV4OworCQlzeGdiZV9mcmVlX3J4X2J1ZmZlcnMoZGV2LCBwLCBkZXNjX2luZGV4LCBiZnNpemUsIHJ4X3JpbmcpOworCX0KKwlrZnJlZShyeF9yaW5nLT5yeF9za2J1ZmYpOworZXJyX2ZyZWVfc2tidWZmX2RtYToKKwlrZnJlZShyeF9yaW5nLT5yeF9za2J1ZmZfZG1hKTsKK2Vycl9mcmVlX2RtYV9yeDoKKwlkbWFfZnJlZV9jb2hlcmVudChwcml2LT5kZXZpY2UsCisJCQkgIHJ4X3JzaXplICogc2l6ZW9mKHN0cnVjdCBzeGdiZV9yeF9ub3JtX2Rlc2MpLAorCQkJICByeF9yaW5nLT5kbWFfcngsIHJ4X3JpbmctPmRtYV9yeF9waHkpOworCisJcmV0dXJuIHJldDsKIH0KIC8qKgogICogZnJlZV90eF9yaW5nIC0gZnJlZSB0aGUgVFggZGVzY3JpcHRvciByaW5nCkBAIC0xMDA4LDEwICsxMDM2LDkgQEAKIAkJc3RydWN0IHN4Z2JlX3R4X3F1ZXVlICpwID0gcHJpdi0+dHhxW3F1ZXVlX251bV07CiAJCXAtPnR4X2NvYWxfZnJhbWVzID0gIFNYR0JFX1RYX0ZSQU1FUzsKIAkJcC0+dHhfY29hbF90aW1lciA9IFNYR0JFX0NPQUxfVFhfVElNRVI7Ci0JCWluaXRfdGltZXIoJnAtPnR4dGltZXIpOworCQlzZXR1cF90aW1lcigmcC0+dHh0aW1lciwgc3hnYmVfdHhfdGltZXIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpJnByaXYtPnR4cVtxdWV1ZV9udW1dKTsKIAkJcC0+dHh0aW1lci5leHBpcmVzID0gU1hHQkVfQ09BTF9USU1FUihwLT50eF9jb2FsX3RpbWVyKTsKLQkJcC0+dHh0aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpJnByaXYtPnR4cVtxdWV1ZV9udW1dOwotCQlwLT50eHRpbWVyLmZ1bmN0aW9uID0gc3hnYmVfdHhfdGltZXI7CiAJCWFkZF90aW1lcigmcC0+dHh0aW1lcik7CiAJfQogfQpAQCAtMTI3Myw3ICsxMzAwLDcgQEAKIAlpZiAodW5saWtlbHkoc2tiX2lzX2dzbyhza2IpICYmIHRxdWV1ZS0+cHJldl9tc3MgIT0gY3VyX21zcykpCiAJCWN0eHRfZGVzY19yZXEgPSAxOwogCi0JaWYgKHVubGlrZWx5KHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSB8fAorCWlmICh1bmxpa2VseShza2Jfdmxhbl90YWdfcHJlc2VudChza2IpIHx8CiAJCSAgICAgKChza2Jfc2hpbmZvKHNrYiktPnR4X2ZsYWdzICYgU0tCVFhfSFdfVFNUQU1QKSAmJgogCQkgICAgICB0cXVldWUtPmh3dHNfdHhfZW4pKSkKIAkJY3R4dF9kZXNjX3JlcSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL0tjb25maWcKaW5kZXggOTQ2OGU2NC4uM2U5N2E4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc21zYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2MvS2NvbmZpZwpAQCAtNSw4ICs1LDkgQEAKIGNvbmZpZyBORVRfVkVORE9SX1NNU0MKIAlib29sICJTTUMgKFNNU0MpL1dlc3Rlcm4gRGlnaXRhbCBkZXZpY2VzIgogCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gQVJNIHx8IElTQSB8fCBNQUMgfHwgQVJNNjQgfHwgTUlQUyB8fCBNMzJSIHx8IFNVUEVSSCB8fCBcCi0JCUJMQUNLRklOIHx8IE1OMTAzMDAgfHwgQ09MREZJUkUgfHwgWFRFTlNBIHx8IE5JT1MyIHx8IFBDSSB8fCBQQ01DSUEKKwlkZXBlbmRzIG9uIEFSTSB8fCBBUk02NCB8fCBBVEFSSV9FVEhFUk5BVCB8fCBCTEFDS0ZJTiB8fCBDT0xERklSRSB8fCBcCisJCSAgIElTQSB8fCBNMzJSIHx8IE1BQyB8fCBNSVBTIHx8IE1OMTAzMDAgfHwgTklPUzIgfHwgUENJIHx8IFwKKwkJICAgUENNQ0lBIHx8IFNVUEVSSCB8fCBYVEVOU0EKIAktLS1oZWxwLS0tCiAJICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWQogCSAgYW5kIHJlYWQgdGhlIEV0aGVybmV0LUhPV1RPLCBhdmFpbGFibGUgZnJvbQpAQCAtMzgsOCArMzksOSBAQAogCXRyaXN0YXRlICJTTUMgOTFDOXgvOTFDMXh4eCBzdXBwb3J0IgogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBNSUkKLQlkZXBlbmRzIG9uIChBUk0gfHwgTTMyUiB8fCBTVVBFUkggfHwgTUlQUyB8fCBCTEFDS0ZJTiB8fCBcCi0JCSAgICBNTjEwMzAwIHx8IENPTERGSVJFIHx8IEFSTTY0IHx8IFhURU5TQSB8fCBOSU9TMikgJiYgKCFPRiB8fCBHUElPTElCKQorCWRlcGVuZHMgb24gIU9GIHx8IEdQSU9MSUIKKwlkZXBlbmRzIG9uIEFSTSB8fCBBUk02NCB8fCBBVEFSSV9FVEhFUk5BVCB8fCBCTEFDS0ZJTiB8fCBDT0xERklSRSB8fCBcCisJCSAgIE0zMlIgfHwgTUlQUyB8fCBNTjEwMzAwIHx8IE5JT1MyIHx8IFNVUEVSSCB8fCBYVEVOU0EKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciBTTUMncyA5MXggc2VyaWVzIG9mIEV0aGVybmV0IGNoaXBzZXRzLAogCSAgaW5jbHVkaW5nIHRoZSBTTUM5MUM5NCBhbmQgdGhlIFNNQzkxQzExMS4gU2F5IFkgaWYgeW91IHdhbnQgaXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5oCmluZGV4IDJhMzhkYWNiLi5iZTY3YmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zbXNjL3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Ntc2Mvc21jOTF4LmgKQEAgLTIxNiw2ICsyMTYsMjcgQEAKIAogI2luY2x1ZGUgPHVuaXQvc21jOTExMTEuaD4KIAorI2VsaWYgZGVmaW5lZChDT05GSUdfQVRBUkkpCisKKyNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVCAgICAgICAgMQorI2RlZmluZSBTTUNfQ0FOX1VTRV8xNkJJVCAgICAgICAxCisjZGVmaW5lIFNNQ19DQU5fVVNFXzMyQklUICAgICAgIDEKKyNkZWZpbmUgU01DX05PV0FJVCAgICAgICAgICAgICAgMQorCisjZGVmaW5lIFNNQ19pbmIoYSwgcikgICAgICAgICAgIHJlYWRiKChhKSArIChyKSkKKyNkZWZpbmUgU01DX2ludyhhLCByKSAgICAgICAgICAgcmVhZHcoKGEpICsgKHIpKQorI2RlZmluZSBTTUNfaW5sKGEsIHIpICAgICAgICAgICByZWFkbCgoYSkgKyAocikpCisjZGVmaW5lIFNNQ19vdXRiKHYsIGEsIHIpICAgICAgIHdyaXRlYih2LCAoYSkgKyAocikpCisjZGVmaW5lIFNNQ19vdXR3KHYsIGEsIHIpICAgICAgIHdyaXRldyh2LCAoYSkgKyAocikpCisjZGVmaW5lIFNNQ19vdXRsKHYsIGEsIHIpICAgICAgIHdyaXRlbCh2LCAoYSkgKyAocikpCisjZGVmaW5lIFNNQ19pbnN3KGEsIHIsIHAsIGwpICAgIHJlYWRzdygoYSkgKyAociksIHAsIGwpCisjZGVmaW5lIFNNQ19vdXRzdyhhLCByLCBwLCBsKSAgIHdyaXRlc3coKGEpICsgKHIpLCBwLCBsKQorI2RlZmluZSBTTUNfaW5zbChhLCByLCBwLCBsKSAgICByZWFkc2woKGEpICsgKHIpLCBwLCBsKQorI2RlZmluZSBTTUNfb3V0c2woYSwgciwgcCwgbCkgICB3cml0ZXNsKChhKSArIChyKSwgcCwgbCkKKworI2RlZmluZSBSUENfTFNBX0RFRkFVTFQgICAgICAgICBSUENfTEVEXzEwMF8xMAorI2RlZmluZSBSUENfTFNCX0RFRkFVTFQgICAgICAgICBSUENfTEVEX1RYX1JYCisKICNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVNNKQogCiAjZGVmaW5lIFNNQ19DQU5fVVNFXzhCSVQJMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZQppbmRleCBhYzRkNTYyLi43M2MyNzE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIAogb2JqLSQoQ09ORklHX1NUTU1BQ19QTEFURk9STSkgKz0gc3RtbWFjLXBsYXRmb3JtLm8KIHN0bW1hYy1wbGF0Zm9ybS1vYmpzOj0gc3RtbWFjX3BsYXRmb3JtLm8gZHdtYWMtbWVzb24ubyBkd21hYy1zdW54aS5vCVwKLQkJICAgICAgIGR3bWFjLXN0aS5vIGR3bWFjLXNvY2ZwZ2EubworCQkgICAgICAgZHdtYWMtc3RpLm8gZHdtYWMtc29jZnBnYS5vIGR3bWFjLXJrLm8KIAogb2JqLSQoQ09ORklHX1NUTU1BQ19QQ0kpICs9IHN0bW1hYy1wY2kubwogc3RtbWFjLXBjaS1vYmpzOj0gc3RtbWFjX3BjaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1yay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjQ5YTRlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvZHdtYWMtcmsuYwpAQCAtMCwwICsxLDQzNyBAQAorLyoqCisgKiBkd21hYy1yay5jIC0gUm9ja2NoaXAgUkszMjg4IERXTUFDIHNwZWNpZmljIGdsdWUgbGF5ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQ2hlbi1aaGkgKFJvZ2VyIENoZW4pCisgKgorICogQ2hlbi1aaGkgKFJvZ2VyIENoZW4pICA8cm9nZXIuY2hlbkByb2NrLWNoaXBzLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0bW1hYy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisKK3N0cnVjdCBya19wcml2X2RhdGEgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJaW50IHBoeV9pZmFjZTsKKwlzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3I7CisKKwlib29sIGNsa19lbmFibGVkOworCWJvb2wgY2xvY2tfaW5wdXQ7CisKKwlzdHJ1Y3QgY2xrICpjbGtfbWFjOworCXN0cnVjdCBjbGsgKmNsa19tYWNfcGxsOworCXN0cnVjdCBjbGsgKmdtYWNfY2xraW47CisJc3RydWN0IGNsayAqbWFjX2Nsa19yeDsKKwlzdHJ1Y3QgY2xrICptYWNfY2xrX3R4OworCXN0cnVjdCBjbGsgKmNsa19tYWNfcmVmOworCXN0cnVjdCBjbGsgKmNsa19tYWNfcmVmb3V0OworCXN0cnVjdCBjbGsgKmFjbGtfbWFjOworCXN0cnVjdCBjbGsgKnBjbGtfbWFjOworCisJaW50IHR4X2RlbGF5OworCWludCByeF9kZWxheTsKKworCXN0cnVjdCByZWdtYXAgKmdyZjsKK307CisKKyNkZWZpbmUgSElXT1JEX1VQREFURSh2YWwsIG1hc2ssIHNoaWZ0KSBcCisJCSgodmFsKSA8PCAoc2hpZnQpIHwgKG1hc2spIDw8ICgoc2hpZnQpICsgMTYpKQorCisjZGVmaW5lIEdSRl9CSVQobnIpCShCSVQobnIpIHwgQklUKG5yKzE2KSkKKyNkZWZpbmUgR1JGX0NMUl9CSVQobnIpCShCSVQobnIrMTYpKQorCisjZGVmaW5lIFJLMzI4OF9HUkZfU09DX0NPTjEJMHgwMjQ4CisjZGVmaW5lIFJLMzI4OF9HUkZfU09DX0NPTjMJMHgwMjUwCisjZGVmaW5lIFJLMzI4OF9HUkZfR1BJTzNEX0UJMHgwMWVjCisjZGVmaW5lIFJLMzI4OF9HUkZfR1BJTzRBX0UJMHgwMWYwCisjZGVmaW5lIFJLMzI4OF9HUkZfR1BJTzRCX0UJMHgwMWY0CisKKy8qUkszMjg4X0dSRl9TT0NfQ09OMSovCisjZGVmaW5lIEdNQUNfUEhZX0lOVEZfU0VMX1JHTUlJCShHUkZfQklUKDYpIHwgR1JGX0NMUl9CSVQoNykgfCBHUkZfQ0xSX0JJVCg4KSkKKyNkZWZpbmUgR01BQ19QSFlfSU5URl9TRUxfUk1JSQkoR1JGX0NMUl9CSVQoNikgfCBHUkZfQ0xSX0JJVCg3KSB8IEdSRl9CSVQoOCkpCisjZGVmaW5lIEdNQUNfRkxPV19DVFJMCQlHUkZfQklUKDkpCisjZGVmaW5lIEdNQUNfRkxPV19DVFJMX0NMUglHUkZfQ0xSX0JJVCg5KQorI2RlZmluZSBHTUFDX1NQRUVEXzEwTQkJR1JGX0NMUl9CSVQoMTApCisjZGVmaW5lIEdNQUNfU1BFRURfMTAwTQkJR1JGX0JJVCgxMCkKKyNkZWZpbmUgR01BQ19STUlJX0NMS18yNU0JR1JGX0JJVCgxMSkKKyNkZWZpbmUgR01BQ19STUlJX0NMS18yXzVNCUdSRl9DTFJfQklUKDExKQorI2RlZmluZSBHTUFDX0NMS18xMjVNCQkoR1JGX0NMUl9CSVQoMTIpIHwgR1JGX0NMUl9CSVQoMTMpKQorI2RlZmluZSBHTUFDX0NMS18yNU0JCShHUkZfQklUKDEyKSB8IEdSRl9CSVQoMTMpKQorI2RlZmluZSBHTUFDX0NMS18yXzVNCQkoR1JGX0NMUl9CSVQoMTIpIHwgR1JGX0JJVCgxMykpCisjZGVmaW5lIEdNQUNfUk1JSV9NT0RFCQlHUkZfQklUKDE0KQorI2RlZmluZSBHTUFDX1JNSUlfTU9ERV9DTFIJR1JGX0NMUl9CSVQoMTQpCisKKy8qUkszMjg4X0dSRl9TT0NfQ09OMyovCisjZGVmaW5lIEdNQUNfVFhDTEtfRExZX0VOQUJMRQlHUkZfQklUKDE0KQorI2RlZmluZSBHTUFDX1RYQ0xLX0RMWV9ESVNBQkxFCUdSRl9DTFJfQklUKDE0KQorI2RlZmluZSBHTUFDX1JYQ0xLX0RMWV9FTkFCTEUJR1JGX0JJVCgxNSkKKyNkZWZpbmUgR01BQ19SWENMS19ETFlfRElTQUJMRQlHUkZfQ0xSX0JJVCgxNSkKKyNkZWZpbmUgR01BQ19DTEtfUlhfRExfQ0ZHKHZhbCkJSElXT1JEX1VQREFURSh2YWwsIDB4N0YsIDcpCisjZGVmaW5lIEdNQUNfQ0xLX1RYX0RMX0NGRyh2YWwpCUhJV09SRF9VUERBVEUodmFsLCAweDdGLCAwKQorCitzdGF0aWMgdm9pZCBzZXRfdG9fcmdtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsCisJCQkgaW50IHR4X2RlbGF5LCBpbnQgcnhfZGVsYXkpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmJzcF9wcml2LT5wZGV2LT5kZXY7CisKKwlpZiAoSVNfRVJSKGJzcF9wcml2LT5ncmYpKSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IE1pc3Npbmcgcm9ja2NoaXAsZ3JmIHByb3BlcnR5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlyZWdtYXBfd3JpdGUoYnNwX3ByaXYtPmdyZiwgUkszMjg4X0dSRl9TT0NfQ09OMSwKKwkJICAgICBHTUFDX1BIWV9JTlRGX1NFTF9SR01JSSB8IEdNQUNfUk1JSV9NT0RFX0NMUik7CisJcmVnbWFwX3dyaXRlKGJzcF9wcml2LT5ncmYsIFJLMzI4OF9HUkZfU09DX0NPTjMsCisJCSAgICAgR01BQ19SWENMS19ETFlfRU5BQkxFIHwgR01BQ19UWENMS19ETFlfRU5BQkxFIHwKKwkJICAgICBHTUFDX0NMS19SWF9ETF9DRkcocnhfZGVsYXkpIHwKKwkJICAgICBHTUFDX0NMS19UWF9ETF9DRkcodHhfZGVsYXkpKTsKK30KKworc3RhdGljIHZvaWQgc2V0X3RvX3JtaWkoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmJzcF9wcml2LT5wZGV2LT5kZXY7CisKKwlpZiAoSVNfRVJSKGJzcF9wcml2LT5ncmYpKSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IE1pc3Npbmcgcm9ja2NoaXAsZ3JmIHByb3BlcnR5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlyZWdtYXBfd3JpdGUoYnNwX3ByaXYtPmdyZiwgUkszMjg4X0dSRl9TT0NfQ09OMSwKKwkJICAgICBHTUFDX1BIWV9JTlRGX1NFTF9STUlJIHwgR01BQ19STUlJX01PREUpOworfQorCitzdGF0aWMgdm9pZCBzZXRfcmdtaWlfc3BlZWQoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsIGludCBzcGVlZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYnNwX3ByaXYtPnBkZXYtPmRldjsKKworCWlmIChJU19FUlIoYnNwX3ByaXYtPmdyZikpIHsKKwkJZGV2X2VycihkZXYsICIlczogTWlzc2luZyByb2NrY2hpcCxncmYgcHJvcGVydHlcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzcGVlZCA9PSAxMCkKKwkJcmVnbWFwX3dyaXRlKGJzcF9wcml2LT5ncmYsIFJLMzI4OF9HUkZfU09DX0NPTjEsIEdNQUNfQ0xLXzJfNU0pOworCWVsc2UgaWYgKHNwZWVkID09IDEwMCkKKwkJcmVnbWFwX3dyaXRlKGJzcF9wcml2LT5ncmYsIFJLMzI4OF9HUkZfU09DX0NPTjEsIEdNQUNfQ0xLXzI1TSk7CisJZWxzZSBpZiAoc3BlZWQgPT0gMTAwMCkKKwkJcmVnbWFwX3dyaXRlKGJzcF9wcml2LT5ncmYsIFJLMzI4OF9HUkZfU09DX0NPTjEsIEdNQUNfQ0xLXzEyNU0pOworCWVsc2UKKwkJZGV2X2VycihkZXYsICJ1bmtub3duIHNwZWVkIHZhbHVlIGZvciBSR01JSSEgc3BlZWQ9JWQiLCBzcGVlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9ybWlpX3NwZWVkKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LCBpbnQgc3BlZWQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmJzcF9wcml2LT5wZGV2LT5kZXY7CisKKwlpZiAoSVNfRVJSKGJzcF9wcml2LT5ncmYpKSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IE1pc3Npbmcgcm9ja2NoaXAsZ3JmIHByb3BlcnR5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoc3BlZWQgPT0gMTApIHsKKwkJcmVnbWFwX3dyaXRlKGJzcF9wcml2LT5ncmYsIFJLMzI4OF9HUkZfU09DX0NPTjEsCisJCQkgICAgIEdNQUNfUk1JSV9DTEtfMl81TSB8IEdNQUNfU1BFRURfMTBNKTsKKwl9IGVsc2UgaWYgKHNwZWVkID09IDEwMCkgeworCQlyZWdtYXBfd3JpdGUoYnNwX3ByaXYtPmdyZiwgUkszMjg4X0dSRl9TT0NfQ09OMSwKKwkJCSAgICAgR01BQ19STUlJX0NMS18yNU0gfCBHTUFDX1NQRUVEXzEwME0pOworCX0gZWxzZSB7CisJCWRldl9lcnIoZGV2LCAidW5rbm93biBzcGVlZCB2YWx1ZSBmb3IgUk1JSSEgc3BlZWQ9JWQiLCBzcGVlZCk7CisJfQorfQorCitzdGF0aWMgaW50IGdtYWNfY2xrX2luaXQoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmJzcF9wcml2LT5wZGV2LT5kZXY7CisKKwlic3BfcHJpdi0+Y2xrX2VuYWJsZWQgPSBmYWxzZTsKKworCWJzcF9wcml2LT5tYWNfY2xrX3J4ID0gZGV2bV9jbGtfZ2V0KGRldiwgIm1hY19jbGtfcngiKTsKKwlpZiAoSVNfRVJSKGJzcF9wcml2LT5tYWNfY2xrX3J4KSkKKwkJZGV2X2VycihkZXYsICIlczogY2Fubm90IGdldCBjbG9jayAlc1xuIiwKKwkJCV9fZnVuY19fLCAibWFjX2Nsa19yeCIpOworCisJYnNwX3ByaXYtPm1hY19jbGtfdHggPSBkZXZtX2Nsa19nZXQoZGV2LCAibWFjX2Nsa190eCIpOworCWlmIChJU19FUlIoYnNwX3ByaXYtPm1hY19jbGtfdHgpKQorCQlkZXZfZXJyKGRldiwgIiVzOiBjYW5ub3QgZ2V0IGNsb2NrICVzXG4iLAorCQkJX19mdW5jX18sICJtYWNfY2xrX3R4Iik7CisKKwlic3BfcHJpdi0+YWNsa19tYWMgPSBkZXZtX2Nsa19nZXQoZGV2LCAiYWNsa19tYWMiKTsKKwlpZiAoSVNfRVJSKGJzcF9wcml2LT5hY2xrX21hYykpCisJCWRldl9lcnIoZGV2LCAiJXM6IGNhbm5vdCBnZXQgY2xvY2sgJXNcbiIsCisJCQlfX2Z1bmNfXywgImFjbGtfbWFjIik7CisKKwlic3BfcHJpdi0+cGNsa19tYWMgPSBkZXZtX2Nsa19nZXQoZGV2LCAicGNsa19tYWMiKTsKKwlpZiAoSVNfRVJSKGJzcF9wcml2LT5wY2xrX21hYykpCisJCWRldl9lcnIoZGV2LCAiJXM6IGNhbm5vdCBnZXQgY2xvY2sgJXNcbiIsCisJCQlfX2Z1bmNfXywgInBjbGtfbWFjIik7CisKKwlic3BfcHJpdi0+Y2xrX21hYyA9IGRldm1fY2xrX2dldChkZXYsICJzdG1tYWNldGgiKTsKKwlpZiAoSVNfRVJSKGJzcF9wcml2LT5jbGtfbWFjKSkKKwkJZGV2X2VycihkZXYsICIlczogY2Fubm90IGdldCBjbG9jayAlc1xuIiwKKwkJCV9fZnVuY19fLCAic3RtbWFjZXRoIik7CisKKwlpZiAoYnNwX3ByaXYtPnBoeV9pZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkgeworCQlic3BfcHJpdi0+Y2xrX21hY19yZWYgPSBkZXZtX2Nsa19nZXQoZGV2LCAiY2xrX21hY19yZWYiKTsKKwkJaWYgKElTX0VSUihic3BfcHJpdi0+Y2xrX21hY19yZWYpKQorCQkJZGV2X2VycihkZXYsICIlczogY2Fubm90IGdldCBjbG9jayAlc1xuIiwKKwkJCQlfX2Z1bmNfXywgImNsa19tYWNfcmVmIik7CisKKwkJaWYgKCFic3BfcHJpdi0+Y2xvY2tfaW5wdXQpIHsKKwkJCWJzcF9wcml2LT5jbGtfbWFjX3JlZm91dCA9CisJCQkJZGV2bV9jbGtfZ2V0KGRldiwgImNsa19tYWNfcmVmb3V0Iik7CisJCQlpZiAoSVNfRVJSKGJzcF9wcml2LT5jbGtfbWFjX3JlZm91dCkpCisJCQkJZGV2X2VycihkZXYsICIlczogY2Fubm90IGdldCBjbG9jayAlc1xuIiwKKwkJCQkJX19mdW5jX18sICJjbGtfbWFjX3JlZm91dCIpOworCQl9CisJfQorCisJaWYgKGJzcF9wcml2LT5jbG9ja19pbnB1dCkgeworCQlkZXZfaW5mbyhkZXYsICIlczogY2xvY2sgaW5wdXQgZnJvbSBQSFlcbiIsIF9fZnVuY19fKTsKKwl9IGVsc2UgeworCQlpZiAoYnNwX3ByaXYtPnBoeV9pZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKKwkJCWNsa19zZXRfcmF0ZShic3BfcHJpdi0+Y2xrX21hY19wbGwsIDUwMDAwMDAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnbWFjX2Nsa19lbmFibGUoc3RydWN0IHJrX3ByaXZfZGF0YSAqYnNwX3ByaXYsIGJvb2wgZW5hYmxlKQoreworCWludCBwaHlfaWZhY2UgPSBwaHlfaWZhY2UgPSBic3BfcHJpdi0+cGh5X2lmYWNlOworCisJaWYgKGVuYWJsZSkgeworCQlpZiAoIWJzcF9wcml2LT5jbGtfZW5hYmxlZCkgeworCQkJaWYgKHBoeV9pZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkgeworCQkJCWlmICghSVNfRVJSKGJzcF9wcml2LT5tYWNfY2xrX3J4KSkKKwkJCQkJY2xrX3ByZXBhcmVfZW5hYmxlKAorCQkJCQkJYnNwX3ByaXYtPm1hY19jbGtfcngpOworCisJCQkJaWYgKCFJU19FUlIoYnNwX3ByaXYtPmNsa19tYWNfcmVmKSkKKwkJCQkJY2xrX3ByZXBhcmVfZW5hYmxlKAorCQkJCQkJYnNwX3ByaXYtPmNsa19tYWNfcmVmKTsKKworCQkJCWlmICghSVNfRVJSKGJzcF9wcml2LT5jbGtfbWFjX3JlZm91dCkpCisJCQkJCWNsa19wcmVwYXJlX2VuYWJsZSgKKwkJCQkJCWJzcF9wcml2LT5jbGtfbWFjX3JlZm91dCk7CisJCQl9CisKKwkJCWlmICghSVNfRVJSKGJzcF9wcml2LT5hY2xrX21hYykpCisJCQkJY2xrX3ByZXBhcmVfZW5hYmxlKGJzcF9wcml2LT5hY2xrX21hYyk7CisKKwkJCWlmICghSVNfRVJSKGJzcF9wcml2LT5wY2xrX21hYykpCisJCQkJY2xrX3ByZXBhcmVfZW5hYmxlKGJzcF9wcml2LT5wY2xrX21hYyk7CisKKwkJCWlmICghSVNfRVJSKGJzcF9wcml2LT5tYWNfY2xrX3R4KSkKKwkJCQljbGtfcHJlcGFyZV9lbmFibGUoYnNwX3ByaXYtPm1hY19jbGtfdHgpOworCisJCQkvKioKKwkJCSAqIGlmICghSVNfRVJSKGJzcF9wcml2LT5jbGtfbWFjKSkKKwkJCSAqCWNsa19wcmVwYXJlX2VuYWJsZShic3BfcHJpdi0+Y2xrX21hYyk7CisJCQkgKi8KKwkJCW1kZWxheSg1KTsKKwkJCWJzcF9wcml2LT5jbGtfZW5hYmxlZCA9IHRydWU7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYnNwX3ByaXYtPmNsa19lbmFibGVkKSB7CisJCQlpZiAocGh5X2lmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9STUlJKSB7CisJCQkJaWYgKCFJU19FUlIoYnNwX3ByaXYtPm1hY19jbGtfcngpKQorCQkJCQljbGtfZGlzYWJsZV91bnByZXBhcmUoCisJCQkJCQlic3BfcHJpdi0+bWFjX2Nsa19yeCk7CisKKwkJCQlpZiAoIUlTX0VSUihic3BfcHJpdi0+Y2xrX21hY19yZWYpKQorCQkJCQljbGtfZGlzYWJsZV91bnByZXBhcmUoCisJCQkJCQlic3BfcHJpdi0+Y2xrX21hY19yZWYpOworCisJCQkJaWYgKCFJU19FUlIoYnNwX3ByaXYtPmNsa19tYWNfcmVmb3V0KSkKKwkJCQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKAorCQkJCQkJYnNwX3ByaXYtPmNsa19tYWNfcmVmb3V0KTsKKwkJCX0KKworCQkJaWYgKCFJU19FUlIoYnNwX3ByaXYtPmFjbGtfbWFjKSkKKwkJCQljbGtfZGlzYWJsZV91bnByZXBhcmUoYnNwX3ByaXYtPmFjbGtfbWFjKTsKKworCQkJaWYgKCFJU19FUlIoYnNwX3ByaXYtPnBjbGtfbWFjKSkKKwkJCQljbGtfZGlzYWJsZV91bnByZXBhcmUoYnNwX3ByaXYtPnBjbGtfbWFjKTsKKworCQkJaWYgKCFJU19FUlIoYnNwX3ByaXYtPm1hY19jbGtfdHgpKQorCQkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShic3BfcHJpdi0+bWFjX2Nsa190eCk7CisJCQkvKioKKwkJCSAqIGlmICghSVNfRVJSKGJzcF9wcml2LT5jbGtfbWFjKSkKKwkJCSAqCWNsa19kaXNhYmxlX3VucHJlcGFyZShic3BfcHJpdi0+Y2xrX21hYyk7CisJCQkgKi8KKwkJCWJzcF9wcml2LT5jbGtfZW5hYmxlZCA9IGZhbHNlOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGh5X3Bvd2VyX29uKHN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2LCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yICpsZG8gPSBic3BfcHJpdi0+cmVndWxhdG9yOworCWludCByZXQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmJzcF9wcml2LT5wZGV2LT5kZXY7CisKKwlpZiAoIWxkbykgeworCQlkZXZfZXJyKGRldiwgIiVzOiBubyByZWd1bGF0b3IgZm91bmRcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChlbmFibGUpIHsKKwkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShsZG8pOworCQlpZiAocmV0KQorCQkJZGV2X2VycihkZXYsICIlczogZmFpbCB0byBlbmFibGUgcGh5LXN1cHBseVxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJfSBlbHNlIHsKKwkJcmV0ID0gcmVndWxhdG9yX2Rpc2FibGUobGRvKTsKKwkJaWYgKHJldCkKKwkJCWRldl9lcnIoZGV2LCAiJXM6IGZhaWwgdG8gZGlzYWJsZSBwaHktc3VwcGx5XG4iLAorCQkJCV9fZnVuY19fKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgKnJrX2dtYWNfc2V0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmtfcHJpdl9kYXRhICpic3BfcHJpdjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCWludCByZXQ7CisJY29uc3QgY2hhciAqc3RyaW5ncyA9IE5VTEw7CisJaW50IHZhbHVlOworCisJYnNwX3ByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmJzcF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFic3BfcHJpdikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlic3BfcHJpdi0+cGh5X2lmYWNlID0gb2ZfZ2V0X3BoeV9tb2RlKGRldi0+b2Zfbm9kZSk7CisKKwlic3BfcHJpdi0+cmVndWxhdG9yID0gZGV2bV9yZWd1bGF0b3JfZ2V0X29wdGlvbmFsKGRldiwgInBoeSIpOworCWlmIChJU19FUlIoYnNwX3ByaXYtPnJlZ3VsYXRvcikpIHsKKwkJaWYgKFBUUl9FUlIoYnNwX3ByaXYtPnJlZ3VsYXRvcikgPT0gLUVQUk9CRV9ERUZFUikgeworCQkJZGV2X2VycihkZXYsICJwaHkgcmVndWxhdG9yIGlzIG5vdCBhdmFpbGFibGUgeWV0LCBkZWZlcnJlZCBwcm9iaW5nXG4iKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOworCQl9CisJCWRldl9lcnIoZGV2LCAibm8gcmVndWxhdG9yIGZvdW5kXG4iKTsKKwkJYnNwX3ByaXYtPnJlZ3VsYXRvciA9IE5VTEw7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcoZGV2LT5vZl9ub2RlLCAiY2xvY2tfaW5fb3V0IiwgJnN0cmluZ3MpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICIlczogQ2FuIG5vdCByZWFkIHByb3BlcnR5OiBjbG9ja19pbl9vdXQuXG4iLAorCQkJX19mdW5jX18pOworCQlic3BfcHJpdi0+Y2xvY2tfaW5wdXQgPSB0cnVlOworCX0gZWxzZSB7CisJCWRldl9pbmZvKGRldiwgIiVzOiBjbG9jayBpbnB1dCBvciBvdXRwdXQ/ICglcykuXG4iLAorCQkJIF9fZnVuY19fLCBzdHJpbmdzKTsKKwkJaWYgKCFzdHJjbXAoc3RyaW5ncywgImlucHV0IikpCisJCQlic3BfcHJpdi0+Y2xvY2tfaW5wdXQgPSB0cnVlOworCQllbHNlCisJCQlic3BfcHJpdi0+Y2xvY2tfaW5wdXQgPSBmYWxzZTsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJ0eF9kZWxheSIsICZ2YWx1ZSk7CisJaWYgKHJldCkgeworCQlic3BfcHJpdi0+dHhfZGVsYXkgPSAweDMwOworCQlkZXZfZXJyKGRldiwgIiVzOiBDYW4gbm90IHJlYWQgcHJvcGVydHk6IHR4X2RlbGF5LiIsIF9fZnVuY19fKTsKKwkJZGV2X2VycihkZXYsICIlczogc2V0IHR4X2RlbGF5IHRvIDB4JXhcbiIsCisJCQlfX2Z1bmNfXywgYnNwX3ByaXYtPnR4X2RlbGF5KTsKKwl9IGVsc2UgeworCQlkZXZfaW5mbyhkZXYsICIlczogVFggZGVsYXkoMHgleCkuXG4iLCBfX2Z1bmNfXywgdmFsdWUpOworCQlic3BfcHJpdi0+dHhfZGVsYXkgPSB2YWx1ZTsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsICJyeF9kZWxheSIsICZ2YWx1ZSk7CisJaWYgKHJldCkgeworCQlic3BfcHJpdi0+cnhfZGVsYXkgPSAweDEwOworCQlkZXZfZXJyKGRldiwgIiVzOiBDYW4gbm90IHJlYWQgcHJvcGVydHk6IHJ4X2RlbGF5LiIsIF9fZnVuY19fKTsKKwkJZGV2X2VycihkZXYsICIlczogc2V0IHJ4X2RlbGF5IHRvIDB4JXhcbiIsCisJCQlfX2Z1bmNfXywgYnNwX3ByaXYtPnJ4X2RlbGF5KTsKKwl9IGVsc2UgeworCQlkZXZfaW5mbyhkZXYsICIlczogUlggZGVsYXkoMHgleCkuXG4iLCBfX2Z1bmNfXywgdmFsdWUpOworCQlic3BfcHJpdi0+cnhfZGVsYXkgPSB2YWx1ZTsKKwl9CisKKwlic3BfcHJpdi0+Z3JmID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShkZXYtPm9mX25vZGUsCisJCQkJCQkJInJvY2tjaGlwLGdyZiIpOworCWJzcF9wcml2LT5wZGV2ID0gcGRldjsKKworCS8qcm1paSBvciByZ21paSovCisJaWYgKGJzcF9wcml2LT5waHlfaWZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JHTUlJKSB7CisJCWRldl9pbmZvKGRldiwgIiVzOiBpbml0IGZvciBSR01JSVxuIiwgX19mdW5jX18pOworCQlzZXRfdG9fcmdtaWkoYnNwX3ByaXYsIGJzcF9wcml2LT50eF9kZWxheSwgYnNwX3ByaXYtPnJ4X2RlbGF5KTsKKwl9IGVsc2UgaWYgKGJzcF9wcml2LT5waHlfaWZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUkpIHsKKwkJZGV2X2luZm8oZGV2LCAiJXM6IGluaXQgZm9yIFJNSUlcbiIsIF9fZnVuY19fKTsKKwkJc2V0X3RvX3JtaWkoYnNwX3ByaXYpOworCX0gZWxzZSB7CisJCWRldl9lcnIoZGV2LCAiJXM6IE5PIGludGVyZmFjZSBkZWZpbmVkIVxuIiwgX19mdW5jX18pOworCX0KKworCWdtYWNfY2xrX2luaXQoYnNwX3ByaXYpOworCisJcmV0dXJuIGJzcF9wcml2OworfQorCitzdGF0aWMgaW50IHJrX2dtYWNfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB2b2lkICpwcml2KQoreworCXN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2ID0gcHJpdjsKKwlpbnQgcmV0OworCisJcmV0ID0gcGh5X3Bvd2VyX29uKGJzcF9wcml2LCB0cnVlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gZ21hY19jbGtfZW5hYmxlKGJzcF9wcml2LCB0cnVlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJrX2dtYWNfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB2b2lkICpwcml2KQoreworCXN0cnVjdCBya19wcml2X2RhdGEgKmdtYWMgPSBwcml2OworCisJcGh5X3Bvd2VyX29uKGdtYWMsIGZhbHNlKTsKKwlnbWFjX2Nsa19lbmFibGUoZ21hYywgZmFsc2UpOworfQorCitzdGF0aWMgdm9pZCBya19maXhfc3BlZWQodm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IHNwZWVkKQoreworCXN0cnVjdCBya19wcml2X2RhdGEgKmJzcF9wcml2ID0gcHJpdjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYnNwX3ByaXYtPnBkZXYtPmRldjsKKworCWlmIChic3BfcHJpdi0+cGh5X2lmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSSkKKwkJc2V0X3JnbWlpX3NwZWVkKGJzcF9wcml2LCBzcGVlZCk7CisJZWxzZSBpZiAoYnNwX3ByaXYtPnBoeV9pZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSkKKwkJc2V0X3JtaWlfc3BlZWQoYnNwX3ByaXYsIHNwZWVkKTsKKwllbHNlCisJCWRldl9lcnIoZGV2LCAidW5zdXBwb3J0ZWQgaW50ZXJmYWNlICVkIiwgYnNwX3ByaXYtPnBoeV9pZmFjZSk7Cit9CisKK2NvbnN0IHN0cnVjdCBzdG1tYWNfb2ZfZGF0YSByazMyODhfZ21hY19kYXRhID0geworCS5oYXNfZ21hYyA9IDEsCisJLmZpeF9tYWNfc3BlZWQgPSBya19maXhfc3BlZWQsCisJLnNldHVwID0gcmtfZ21hY19zZXR1cCwKKwkuaW5pdCA9IHJrX2dtYWNfaW5pdCwKKwkuZXhpdCA9IHJrX2dtYWNfZXhpdCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9kd21hYy1zdGkuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0aS5jCmluZGV4IDA1NmIzNTguLmJiNmUyZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0aS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL2R3bWFjLXN0aS5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAlib29sIGV4dF9waHljbGs7CS8qIENsb2NrIGZyb20gZXh0ZXJuYWwgUEhZICovCiAJdTMyIHR4X3JldGltZV9zcmM7CS8qIFRYQ0xLIFJldGltaW5nKi8KIAlzdHJ1Y3QgY2xrICpjbGs7CS8qIFBIWSBjbG9jayAqLwotCWludCBjdHJsX3JlZzsJCS8qIEdNQUMgZ2x1ZS1sb2dpYyBjb250cm9sIHJlZ2lzdGVyICovCisJdTMyIGN0cmxfcmVnOwkJLyogR01BQyBnbHVlLWxvZ2ljIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIAlpbnQgY2xrX3NlbF9yZWc7CS8qIEdNQUMgZXh0IGNsayBzZWxlY3Rpb24gcmVnaXN0ZXIgKi8KIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwpAQCAtMjg1LDExICsyODUsNiBAQAogCWlmICghbnApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInN0aS1ldGhjb25mIik7Ci0JaWYgKCFyZXMpCi0JCXJldHVybiAtRU5PREFUQTsKLQlkd21hYy0+Y3RybF9yZWcgPSByZXMtPnN0YXJ0OwotCiAJLyogY2xrIHNlbGVjdGlvbiBmcm9tIGV4dHJhIHN5c2NmZyByZWdpc3RlciAqLwogCWR3bWFjLT5jbGtfc2VsX3JlZyA9IC1FTlhJTzsKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAic3RpLWNsa2NvbmYiKTsKQEAgLTMwMCw2ICsyOTUsMTIgQEAKIAlpZiAoSVNfRVJSKHJlZ21hcCkpCiAJCXJldHVybiBQVFJfRVJSKHJlZ21hcCk7CiAKKwllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgInN0LHN5c2NvbiIsIDEsICZkd21hYy0+Y3RybF9yZWcpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICJDYW4ndCBnZXQgc3lzY29uZmlnIGN0cmwgb2Zmc2V0ICglZClcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCiAJZHdtYWMtPmRldiA9IGRldjsKIAlkd21hYy0+aW50ZXJmYWNlID0gb2ZfZ2V0X3BoeV9tb2RlKG5wKTsKIAlkd21hYy0+cmVnbWFwID0gcmVnbWFwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggOGM2YjdjMS4uNTVlODliMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfbWFpbi5jCkBAIC0xMDk3LDYgKzEwOTcsNyBAQAogCiAJcHJpdi0+ZGlydHlfdHggPSAwOwogCXByaXYtPmN1cl90eCA9IDA7CisJbmV0ZGV2X3Jlc2V0X3F1ZXVlKHByaXYtPmRldik7CiAKIAlzdG1tYWNfY2xlYXJfZGVzY3JpcHRvcnMocHJpdik7CiAKQEAgLTEyODcsNyArMTI4OCw3IEBACiAJCSAqICAgIHRoYXQgbmVlZHMgdG8gbm90IGluc2VydCBjc3VtIGluIHRoZSBUREVTLgogCQkgKi8KIAkJcHJpdi0+aHctPmRtYS0+ZG1hX21vZGUocHJpdi0+aW9hZGRyLCBTRl9ETUFfTU9ERSwgU0ZfRE1BX01PREUpOwotCQl0YyA9IFNGX0RNQV9NT0RFOworCQlwcml2LT54c3RhdHMudGhyZXNob2xkID0gU0ZfRE1BX01PREU7CiAJfSBlbHNlCiAJCXByaXYtPmh3LT5kbWEtPmRtYV9tb2RlKHByaXYtPmlvYWRkciwgdGMsIFNGX0RNQV9NT0RFKTsKIH0KQEAgLTEzMDAsNiArMTMwMSw3IEBACiBzdGF0aWMgdm9pZCBzdG1tYWNfdHhfY2xlYW4oc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGludCB0eHNpemUgPSBwcml2LT5kbWFfdHhfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgYnl0ZXNfY29tcGwgPSAwLCBwa3RzX2NvbXBsID0gMDsKIAogCXNwaW5fbG9jaygmcHJpdi0+dHhfbG9jayk7CiAKQEAgLTEzNTYsNiArMTM1OCw4IEBACiAJCXByaXYtPmh3LT5tb2RlLT5jbGVhbl9kZXNjMyhwcml2LCBwKTsKIAogCQlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkgeworCQkJcGt0c19jb21wbCsrOworCQkJYnl0ZXNfY29tcGwgKz0gc2tiLT5sZW47CiAJCQlkZXZfY29uc3VtZV9za2JfYW55KHNrYik7CiAJCQlwcml2LT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKIAkJfQpAQCAtMTM2NCw2ICsxMzY4LDkgQEAKIAogCQlwcml2LT5kaXJ0eV90eCsrOwogCX0KKworCW5ldGRldl9jb21wbGV0ZWRfcXVldWUocHJpdi0+ZGV2LCBwa3RzX2NvbXBsLCBieXRlc19jb21wbCk7CisKIAlpZiAodW5saWtlbHkobmV0aWZfcXVldWVfc3RvcHBlZChwcml2LT5kZXYpICYmCiAJCSAgICAgc3RtbWFjX3R4X2F2YWlsKHByaXYpID4gU1RNTUFDX1RYX1RIUkVTSChwcml2KSkpIHsKIAkJbmV0aWZfdHhfbG9jayhwcml2LT5kZXYpOwpAQCAtMTQxOCw2ICsxNDI1LDcgQEAKIAkJCQkJCSAgICAgKGkgPT0gdHhzaXplIC0gMSkpOwogCXByaXYtPmRpcnR5X3R4ID0gMDsKIAlwcml2LT5jdXJfdHggPSAwOworCW5ldGRldl9yZXNldF9xdWV1ZShwcml2LT5kZXYpOwogCXByaXYtPmh3LT5kbWEtPnN0YXJ0X3R4KHByaXYtPmlvYWRkcik7CiAKIAlwcml2LT5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOwpAQCAtMTQ0NCw5ICsxNDUyLDE0IEBACiAJfQogCWlmICh1bmxpa2VseShzdGF0dXMgJiB0eF9oYXJkX2Vycm9yX2J1bXBfdGMpKSB7CiAJCS8qIFRyeSB0byBidW1wIHVwIHRoZSBkbWEgdGhyZXNob2xkIG9uIHRoaXMgZmFpbHVyZSAqLwotCQlpZiAodW5saWtlbHkodGMgIT0gU0ZfRE1BX01PREUpICYmICh0YyA8PSAyNTYpKSB7CisJCWlmICh1bmxpa2VseShwcml2LT54c3RhdHMudGhyZXNob2xkICE9IFNGX0RNQV9NT0RFKSAmJgorCQkgICAgKHRjIDw9IDI1NikpIHsKIAkJCXRjICs9IDY0OwotCQkJcHJpdi0+aHctPmRtYS0+ZG1hX21vZGUocHJpdi0+aW9hZGRyLCB0YywgU0ZfRE1BX01PREUpOworCQkJaWYgKHByaXYtPnBsYXQtPmZvcmNlX3RocmVzaF9kbWFfbW9kZSkKKwkJCQlwcml2LT5ody0+ZG1hLT5kbWFfbW9kZShwcml2LT5pb2FkZHIsIHRjLCB0Yyk7CisJCQllbHNlCisJCQkJcHJpdi0+aHctPmRtYS0+ZG1hX21vZGUocHJpdi0+aW9hZGRyLCB0YywKKwkJCQkJU0ZfRE1BX01PREUpOwogCQkJcHJpdi0+eHN0YXRzLnRocmVzaG9sZCA9IHRjOwogCQl9CiAJfSBlbHNlIGlmICh1bmxpa2VseShzdGF0dXMgPT0gdHhfaGFyZF9lcnJvcikpCkBAIC0yMDUwLDYgKzIwNjMsNyBAQAogCWlmICghcHJpdi0+aHd0c190eF9lbikKIAkJc2tiX3R4X3RpbWVzdGFtcChza2IpOwogCisJbmV0ZGV2X3NlbnRfcXVldWUoZGV2LCBza2ItPmxlbik7CiAJcHJpdi0+aHctPmRtYS0+ZW5hYmxlX2RtYV90cmFuc21pc3Npb24ocHJpdi0+aW9hZGRyKTsKIAogCXNwaW5fdW5sb2NrKCZwcml2LT50eF9sb2NrKTsKQEAgLTI3NDIsNyArMjc1NiwxMSBAQAogCQlwcml2LT5wbGF0LT5lbmhfZGVzYyA9IHByaXYtPmRtYV9jYXAuZW5oX2Rlc2M7CiAJCXByaXYtPnBsYXQtPnBtdCA9IHByaXYtPmRtYV9jYXAucG10X3JlbW90ZV93YWtlX3VwOwogCi0JCXByaXYtPnBsYXQtPnR4X2NvZSA9IHByaXYtPmRtYV9jYXAudHhfY29lOworCQkvKiBUWENPRSBkb2Vzbid0IHdvcmsgaW4gdGhyZXNoIERNQSBtb2RlICovCisJCWlmIChwcml2LT5wbGF0LT5mb3JjZV90aHJlc2hfZG1hX21vZGUpCisJCQlwcml2LT5wbGF0LT50eF9jb2UgPSAwOworCQllbHNlCisJCQlwcml2LT5wbGF0LT50eF9jb2UgPSBwcml2LT5kbWFfY2FwLnR4X2NvZTsKIAogCQlpZiAocHJpdi0+ZG1hX2NhcC5yeF9jb2VfdHlwZTIpCiAJCQlwcml2LT5wbGF0LT5yeF9jb2UgPSBTVE1NQUNfUlhfQ09FX1RZUEUyOwpAQCAtMjc3OCw2ICsyNzk2LDkgQEAKICAqIEBhZGRyOiBpb2Jhc2UgbWVtb3J5IGFkZHJlc3MKICAqIERlc2NyaXB0aW9uOiB0aGlzIGlzIHRoZSBtYWluIHByb2JlIGZ1bmN0aW9uIHVzZWQgdG8KICAqIGNhbGwgdGhlIGFsbG9jX2V0aGVyZGV2LCBhbGxvY2F0ZSB0aGUgcHJpdiBzdHJ1Y3R1cmUuCisgKiBSZXR1cm46CisgKiBvbiBzdWNjZXNzIHRoZSBuZXcgcHJpdmF0ZSBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQsIG90aGVyd2lzZSB0aGUgZXJyb3IKKyAqIHBvaW50ZXIuCiAgKi8KIHN0cnVjdCBzdG1tYWNfcHJpdiAqc3RtbWFjX2R2cl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsCiAJCQkJICAgICBzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXRfZGF0LApAQCAtMjc4OSw3ICsyODEwLDcgQEAKIAogCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHN0bW1hY19wcml2KSk7CiAJaWYgKCFuZGV2KQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlTRVRfTkVUREVWX0RFVihuZGV2LCBkZXZpY2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGNpLmMKaW5kZXggMDU0NTIwZC4uM2JjYTkwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvc3RtbWFjX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wY2kuYwpAQCAtMjQsOCArMjQsNTAgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKwogI2luY2x1ZGUgInN0bW1hYy5oIgogCisvKgorICogVGhpcyBzdHJ1Y3QgaXMgdXNlZCB0byBhc3NvY2lhdGUgUENJIEZ1bmN0aW9uIG9mIE1BQyBjb250cm9sbGVyIG9uIGEgYm9hcmQsCisgKiBkaXNjb3ZlcmVkIHZpYSBETUksIHdpdGggdGhlIGFkZHJlc3Mgb2YgUEhZIGNvbm5lY3RlZCB0byB0aGUgTUFDLiBUaGUKKyAqIG5lZ2F0aXZlIHZhbHVlIG9mIHRoZSBhZGRyZXNzIG1lYW5zIHRoYXQgTUFDIGNvbnRyb2xsZXIgaXMgbm90IGNvbm5lY3RlZAorICogd2l0aCBQSFkuCisgKi8KK3N0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhIHsKKwljb25zdCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCBmdW5jOworCWludCBwaHlfYWRkcjsKK307CisKK3N0cnVjdCBzdG1tYWNfcGNpX2luZm8geworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCWludCAoKnNldHVwKShzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKnBsYXQsCisJCSAgICAgc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqaW5mbyk7CisJc3RydWN0IHN0bW1hY19wY2lfZG1pX2RhdGEgKmRtaTsKK307CisKK3N0YXRpYyBpbnQgc3RtbWFjX3BjaV9maW5kX3BoeV9hZGRyKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKmluZm8pCit7CisJY29uc3QgY2hhciAqbmFtZSA9IGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JPQVJEX05BTUUpOworCXVuc2lnbmVkIGludCBmdW5jID0gUENJX0ZVTkMoaW5mby0+cGRldi0+ZGV2Zm4pOworCXN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhICpkbWk7CisKKwkvKgorCSAqIEdhbGlsZW8gYm9hcmRzIHdpdGggb2xkIGZpcm13YXJlIGRvbid0IHN1cHBvcnQgRE1JLiBXZSBhbHdheXMgcmV0dXJuCisJICogMSBoZXJlLCBzbyBhdCBsZWFzdCBmaXJzdCBmb3VuZCBNQUMgY29udHJvbGxlciB3b3VsZCBiZSBwcm9iZWQuCisJICovCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gMTsKKworCWZvciAoZG1pID0gaW5mby0+ZG1pOyBkbWktPm5hbWUgJiYgKmRtaS0+bmFtZTsgZG1pKyspIHsKKwkJaWYgKCFzdHJjbXAoZG1pLT5uYW1lLCBuYW1lKSAmJiBkbWktPmZ1bmMgPT0gZnVuYykKKwkJCXJldHVybiBkbWktPnBoeV9hZGRyOworCX0KKworCXJldHVybiAtRU5PREVWOworfQorCiBzdGF0aWMgdm9pZCBzdG1tYWNfZGVmYXVsdF9kYXRhKHN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdCkKIHsKIAlwbGF0LT5idXNfaWQgPSAxOwpAQCAtNDgsNiArOTAsNjIgQEAKIAlwbGF0LT51bmljYXN0X2ZpbHRlcl9lbnRyaWVzID0gMTsKIH0KIAorc3RhdGljIGludCBxdWFya19kZWZhdWx0X2RhdGEoc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0LAorCQkJICAgICAgc3RydWN0IHN0bW1hY19wY2lfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGluZm8tPnBkZXY7CisJaW50IHJldDsKKworCS8qCisJICogUmVmdXNlIHRvIGxvYWQgdGhlIGRyaXZlciBhbmQgcmVnaXN0ZXIgbmV0IGRldmljZSBpZiBNQUMgY29udHJvbGxlcgorCSAqIGRvZXMgbm90IGNvbm5lY3QgdG8gYW55IFBIWSBpbnRlcmZhY2UuCisJICovCisJcmV0ID0gc3RtbWFjX3BjaV9maW5kX3BoeV9hZGRyKGluZm8pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcGxhdC0+YnVzX2lkID0gUENJX0RFVklEKHBkZXYtPmJ1cy0+bnVtYmVyLCBwZGV2LT5kZXZmbik7CisJcGxhdC0+cGh5X2FkZHIgPSByZXQ7CisJcGxhdC0+aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUk7CisJcGxhdC0+Y2xrX2NzciA9IDI7CisJcGxhdC0+aGFzX2dtYWMgPSAxOworCXBsYXQtPmZvcmNlX3NmX2RtYV9tb2RlID0gMTsKKworCXBsYXQtPm1kaW9fYnVzX2RhdGEtPnBoeV9yZXNldCA9IE5VTEw7CisJcGxhdC0+bWRpb19idXNfZGF0YS0+cGh5X21hc2sgPSAwOworCisJcGxhdC0+ZG1hX2NmZy0+cGJsID0gMTY7CisJcGxhdC0+ZG1hX2NmZy0+YnVyc3RfbGVuID0gRE1BX0FYSV9CTEVOXzI1NjsKKwlwbGF0LT5kbWFfY2ZnLT5maXhlZF9idXJzdCA9IDE7CisKKwkvKiBTZXQgZGVmYXVsdCB2YWx1ZSBmb3IgbXVsdGljYXN0IGhhc2ggYmlucyAqLworCXBsYXQtPm11bHRpY2FzdF9maWx0ZXJfYmlucyA9IEhBU0hfVEFCTEVfU0laRTsKKworCS8qIFNldCBkZWZhdWx0IHZhbHVlIGZvciB1bmljYXN0IGZpbHRlciBlbnRyaWVzICovCisJcGxhdC0+dW5pY2FzdF9maWx0ZXJfZW50cmllcyA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2RtaV9kYXRhIHF1YXJrX3BjaV9kbWlfZGF0YVtdID0geworCXsKKwkJLm5hbWUgPSAiR2FsaWxlbyIsCisJCS5mdW5jID0gNiwKKwkJLnBoeV9hZGRyID0gMSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiR2FsaWxlb0dlbjIiLAorCQkuZnVuYyA9IDYsCisJCS5waHlfYWRkciA9IDEsCisJfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gcXVhcmtfcGNpX2luZm8gPSB7CisJLnNldHVwID0gcXVhcmtfZGVmYXVsdF9kYXRhLAorCS5kbWkgPSBxdWFya19wY2lfZG1pX2RhdGEsCit9OworCiAvKioKICAqIHN0bW1hY19wY2lfcHJvYmUKICAqCkBAIC02Myw2ICsxNjEsNyBAQAogc3RhdGljIGludCBzdG1tYWNfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3Qgc3RtbWFjX3BjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdG1tYWNfcGNpX2luZm8gKilpZC0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHBsYXRfc3RtbWFjZW5ldF9kYXRhICpwbGF0OwogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdjsKIAlpbnQgaTsKQEAgLTEwMyw3ICsyMDIsMTcgQEAKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCi0Jc3RtbWFjX2RlZmF1bHRfZGF0YShwbGF0KTsKKwlpZiAoaW5mbykgeworCQlpbmZvLT5wZGV2ID0gcGRldjsKKwkJaWYgKGluZm8tPnNldHVwKSB7CisJCQlyZXQgPSBpbmZvLT5zZXR1cChwbGF0LCBpbmZvKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gZWxzZQorCQlzdG1tYWNfZGVmYXVsdF9kYXRhKHBsYXQpOworCisJcGNpX2VuYWJsZV9tc2kocGRldik7CiAKIAlwcml2ID0gc3RtbWFjX2R2cl9wcm9iZSgmcGRldi0+ZGV2LCBwbGF0LCBwY2ltX2lvbWFwX3RhYmxlKHBkZXYpW2ldKTsKIAlpZiAoSVNfRVJSKHByaXYpKSB7CkBAIC0xNTUsMTEgKzI2NCwxMyBAQAogc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKHN0bW1hY19wbV9vcHMsIHN0bW1hY19wY2lfc3VzcGVuZCwgc3RtbWFjX3BjaV9yZXN1bWUpOwogCiAjZGVmaW5lIFNUTU1BQ19WRU5ET1JfSUQgMHg3MDAKKyNkZWZpbmUgU1RNTUFDX1FVQVJLX0lEICAweDA5MzcKICNkZWZpbmUgU1RNTUFDX0RFVklDRV9JRCAweDExMDgKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0bW1hY19pZF90YWJsZVtdID0gewogCXtQQ0lfREVWSUNFKFNUTU1BQ19WRU5ET1JfSUQsIFNUTU1BQ19ERVZJQ0VfSUQpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NUTUlDUk8sIFBDSV9ERVZJQ0VfSURfU1RNSUNST19NQUMpfSwKKwl7UENJX1ZERVZJQ0UoSU5URUwsIFNUTU1BQ19RVUFSS19JRCksIChrZXJuZWxfdWxvbmdfdCkmcXVhcmtfcGNpX2luZm99LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jCmluZGV4IDMwMzlkZTIuLmZiODQ2ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5jCkBAIC0zMyw2ICszMyw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN0bW1hY19kdF9pZHNbXSA9IHsKIAkvKiBTb0Mgc3BlY2lmaWMgZ2x1ZSBsYXllcnMgc2hvdWxkIGNvbWUgYmVmb3JlIGdlbmVyaWMgYmluZGluZ3MgKi8KKwl7IC5jb21wYXRpYmxlID0gInJvY2tjaGlwLHJrMzI4OC1nbWFjIiwgLmRhdGEgPSAmcmszMjg4X2dtYWNfZGF0YX0sCiAJeyAuY29tcGF0aWJsZSA9ICJhbWxvZ2ljLG1lc29uNi1kd21hYyIsIC5kYXRhID0gJm1lc29uNl9kd21hY19kYXRhfSwKIAl7IC5jb21wYXRpYmxlID0gImFsbHdpbm5lcixzdW43aS1hMjAtZ21hYyIsIC5kYXRhID0gJnN1bjdpX2dtYWNfZGF0YX0sCiAJeyAuY29tcGF0aWJsZSA9ICJzdCxzdGloNDE1LWR3bWFjIiwgLmRhdGEgPSAmc3RpaDR4eF9kd21hY19kYXRhfSwKQEAgLTIzNCw2ICsyMzUsOSBAQAogCQkJb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAic25wcyxmaXhlZC1idXJzdCIpOwogCQlkbWFfY2ZnLT5taXhlZF9idXJzdCA9CiAJCQlvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJzbnBzLG1peGVkLWJ1cnN0Iik7CisJCW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAic25wcyxidXJzdF9sZW4iLCAmZG1hX2NmZy0+YnVyc3RfbGVuKTsKKwkJaWYgKGRtYV9jZmctPmJ1cnN0X2xlbiA8IDAgfHwgZG1hX2NmZy0+YnVyc3RfbGVuID4gMjU2KQorCQkJZG1hX2NmZy0+YnVyc3RfbGVuID0gMDsKIAl9CiAJcGxhdC0+Zm9yY2VfdGhyZXNoX2RtYV9tb2RlID0gb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAic25wcyxmb3JjZV90aHJlc2hfZG1hX21vZGUiKTsKIAlpZiAocGxhdC0+Zm9yY2VfdGhyZXNoX2RtYV9tb2RlKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9zdG1tYWNfcGxhdGZvcm0uaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5oCmluZGV4IDI1ZGQxZjcuLjA5M2ViOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL3N0bW1hY19wbGF0Zm9ybS5oCkBAIC0yNCw1ICsyNCw2IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IHN0bW1hY19vZl9kYXRhIHN0aWg0eHhfZHdtYWNfZGF0YTsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX29mX2RhdGEgc3RpZDEyN19kd21hY19kYXRhOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzdG1tYWNfb2ZfZGF0YSBzb2NmcGdhX2dtYWNfZGF0YTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3RtbWFjX29mX2RhdGEgcmszMjg4X2dtYWNfZGF0YTsKIAogI2VuZGlmIC8qIF9fU1RNTUFDX1BMQVRGT1JNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL25pdS5jCmluZGV4IDBjNjQxNjIuLjRiNTFmOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9uaXUuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vbml1LmMKQEAgLTMzNDEsOCArMzM0MSw3IEBACiAKIAluaXVfaGFzaF9wYWdlKHJwLCBwYWdlLCBhZGRyKTsKIAlpZiAocnAtPnJicl9ibG9ja3NfcGVyX3BhZ2UgPiAxKQotCQlhdG9taWNfYWRkKHJwLT5yYnJfYmxvY2tzX3Blcl9wYWdlIC0gMSwKLQkJCSAgICZjb21wb3VuZF9oZWFkKHBhZ2UpLT5fY291bnQpOworCQlhdG9taWNfYWRkKHJwLT5yYnJfYmxvY2tzX3Blcl9wYWdlIC0gMSwgJnBhZ2UtPl9jb3VudCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcnAtPnJicl9ibG9ja3NfcGVyX3BhZ2U7IGkrKykgewogCQlfX2xlMzIgKnJiciA9ICZycC0+cmJyW3N0YXJ0X2luZGV4ICsgaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vc3Vudm5ldC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvc3VuL3N1bnZuZXQuYwppbmRleCBkMjgzNWJmLi4yYjEwYjg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9zdW4vc3Vudm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3N1bi9zdW52bmV0LmMKQEAgLTUwLDYgKzUwLDcgQEAKICNkZWZpbmUJVk5FVF9NQVhfUkVUUklFUwkxMAogCiBzdGF0aWMgaW50IF9fdm5ldF90eF90cmlnZ2VyKHN0cnVjdCB2bmV0X3BvcnQgKnBvcnQsIHUzMiBzdGFydCk7CitzdGF0aWMgdm9pZCB2bmV0X3BvcnRfcmVzZXQoc3RydWN0IHZuZXRfcG9ydCAqcG9ydCk7CiAKIC8qIE9yZGVyZWQgZnJvbSBsYXJnZXN0IG1ham9yIHRvIGxvd2VzdCAqLwogc3RhdGljIHN0cnVjdCB2aW9fdmVyc2lvbiB2bmV0X3ZlcnNpb25zW10gPSB7CkBAIC0zNTEsMTAgKzM1MiwxNSBAQAogCXVuc2lnbmVkIGludCBsZW4gPSBkZXNjLT5zaXplOwogCXVuc2lnbmVkIGludCBjb3B5X2xlbjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBtYXhsZW47CiAJaW50IGVycjsKIAogCWVyciA9IC1FTVNHU0laRTsKLQlpZiAodW5saWtlbHkobGVuIDwgRVRIX1pMRU4gfHwgbGVuID4gcG9ydC0+cm10dSkpIHsKKwlpZiAocG9ydC0+dHNvICYmIHBvcnQtPnRzb2xlbiA+IHBvcnQtPnJtdHUpCisJCW1heGxlbiA9IHBvcnQtPnRzb2xlbjsKKwllbHNlCisJCW1heGxlbiA9IHBvcnQtPnJtdHU7CisJaWYgKHVubGlrZWx5KGxlbiA8IEVUSF9aTEVOIHx8IGxlbiA+IG1heGxlbikpIHsKIAkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCWdvdG8gb3V0X2Ryb3BwZWQ7CiAJfQpAQCAtNzMxLDkgKzczNyw3IEBACiAJCXZpb19saW5rX3N0YXRlX2NoYW5nZSh2aW8sIGV2ZW50KTsKIAogCQlpZiAoZXZlbnQgPT0gTERDX0VWRU5UX1JFU0VUKSB7Ci0JCQlwb3J0LT5ybXR1ID0gMDsKLQkJCXBvcnQtPnRzbyA9IHRydWU7Ci0JCQlwb3J0LT50c29sZW4gPSAwOworCQkJdm5ldF9wb3J0X3Jlc2V0KHBvcnQpOwogCQkJdmlvX3BvcnRfdXAodmlvKTsKIAkJfQogCQlwb3J0LT5yeF9ldmVudCA9IDA7CkBAIC05MjksMzYgKzkzMywzNiBAQAogCiAJKnBlbmRpbmcgPSAwOwogCi0JdHhpID0gZHItPnByb2QtMTsKLQlpZiAodHhpIDwgMCkKLQkJdHhpID0gVk5FVF9UWF9SSU5HX1NJWkUtMTsKLQorCXR4aSA9IGRyLT5wcm9kOwogCWZvciAoaSA9IDA7IGkgPCBWTkVUX1RYX1JJTkdfU0laRTsgKytpKSB7CiAJCXN0cnVjdCB2aW9fbmV0X2Rlc2MgKmQ7CiAKLQkJZCA9IHZpb19kcmluZ19lbnRyeShkciwgdHhpKTsKLQotCQlpZiAoZC0+aGRyLnN0YXRlID09IFZJT19ERVNDX0RPTkUpIHsKLQkJCWlmIChwb3J0LT50eF9idWZzW3R4aV0uc2tiKSB7Ci0JCQkJQlVHX09OKHBvcnQtPnR4X2J1ZnNbdHhpXS5za2ItPm5leHQpOwotCi0JCQkJcG9ydC0+dHhfYnVmc1t0eGldLnNrYi0+bmV4dCA9IHNrYjsKLQkJCQlza2IgPSBwb3J0LT50eF9idWZzW3R4aV0uc2tiOwotCQkJCXBvcnQtPnR4X2J1ZnNbdHhpXS5za2IgPSBOVUxMOwotCi0JCQkJbGRjX3VubWFwKHBvcnQtPnZpby5scCwKLQkJCQkJICBwb3J0LT50eF9idWZzW3R4aV0uY29va2llcywKLQkJCQkJICBwb3J0LT50eF9idWZzW3R4aV0ubmNvb2tpZXMpOwotCQkJfQotCQkJZC0+aGRyLnN0YXRlID0gVklPX0RFU0NfRlJFRTsKLQkJfSBlbHNlIGlmIChkLT5oZHIuc3RhdGUgPT0gVklPX0RFU0NfUkVBRFkpIHsKLQkJCSgqcGVuZGluZykrKzsKLQkJfSBlbHNlIGlmIChkLT5oZHIuc3RhdGUgPT0gVklPX0RFU0NfRlJFRSkgewotCQkJYnJlYWs7Ci0JCX0KIAkJLS10eGk7CiAJCWlmICh0eGkgPCAwKQogCQkJdHhpID0gVk5FVF9UWF9SSU5HX1NJWkUtMTsKKworCQlkID0gdmlvX2RyaW5nX2VudHJ5KGRyLCB0eGkpOworCisJCWlmIChkLT5oZHIuc3RhdGUgPT0gVklPX0RFU0NfUkVBRFkpIHsKKwkJCSgqcGVuZGluZykrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChwb3J0LT50eF9idWZzW3R4aV0uc2tiKSB7CisJCQlpZiAoZC0+aGRyLnN0YXRlICE9IFZJT19ERVNDX0RPTkUpCisJCQkJcHJfbm90aWNlKCJpbnZhbGlkIHJpbmcgYnVmZmVyIHN0YXRlICVkXG4iLAorCQkJCQkgIGQtPmhkci5zdGF0ZSk7CisJCQlCVUdfT04ocG9ydC0+dHhfYnVmc1t0eGldLnNrYi0+bmV4dCk7CisKKwkJCXBvcnQtPnR4X2J1ZnNbdHhpXS5za2ItPm5leHQgPSBza2I7CisJCQlza2IgPSBwb3J0LT50eF9idWZzW3R4aV0uc2tiOworCQkJcG9ydC0+dHhfYnVmc1t0eGldLnNrYiA9IE5VTEw7CisKKwkJCWxkY191bm1hcChwb3J0LT52aW8ubHAsCisJCQkJICBwb3J0LT50eF9idWZzW3R4aV0uY29va2llcywKKwkJCQkgIHBvcnQtPnR4X2J1ZnNbdHhpXS5uY29va2llcyk7CisJCX0gZWxzZSBpZiAoZC0+aGRyLnN0YXRlID09IFZJT19ERVNDX0ZSRUUpCisJCQlicmVhazsKKwkJZC0+aGRyLnN0YXRlID0gVklPX0RFU0NfRlJFRTsKIAl9CiAJcmV0dXJuIHNrYjsKIH0KQEAgLTExMTksNiArMTEyMyw3IEBACiAJCQlza2Jfc2hpbmZvKG5za2IpLT5nc29fc2l6ZSA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CiAJCQlza2Jfc2hpbmZvKG5za2IpLT5nc29fdHlwZSA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGU7CiAJCX0KKwkJbnNrYi0+cXVldWVfbWFwcGluZyA9IHNrYi0+cXVldWVfbWFwcGluZzsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlza2IgPSBuc2tiOwogCX0KQEAgLTE2MzIsMTYgKzE2MzcsOSBAQAogCWludCBpOwogCiAJZHIgPSAmcG9ydC0+dmlvLmRyaW5nc1tWSU9fRFJJVkVSX1RYX1JJTkddOwotCWlmIChkci0+YmFzZSkgewotCQlsZGNfZnJlZV9leHBfZHJpbmcocG9ydC0+dmlvLmxwLCBkci0+YmFzZSwKLQkJCQkgICAoZHItPmVudHJ5X3NpemUgKiBkci0+bnVtX2VudHJpZXMpLAotCQkJCSAgIGRyLT5jb29raWVzLCBkci0+bmNvb2tpZXMpOwotCQlkci0+YmFzZSA9IE5VTEw7Ci0JCWRyLT5lbnRyeV9zaXplID0gMDsKLQkJZHItPm51bV9lbnRyaWVzID0gMDsKLQkJZHItPnBlbmRpbmcgPSAwOwotCQlkci0+bmNvb2tpZXMgPSAwOwotCX0KKworCWlmIChkci0+YmFzZSA9PSBOVUxMKQorCQlyZXR1cm47CiAKIAlmb3IgKGkgPSAwOyBpIDwgVk5FVF9UWF9SSU5HX1NJWkU7IGkrKykgewogCQlzdHJ1Y3QgdmlvX25ldF9kZXNjICpkOwpAQCAtMTY1MSw4ICsxNjQ5LDYgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWQgPSB2aW9fZHJpbmdfZW50cnkoZHIsIGkpOwotCQlpZiAoZC0+aGRyLnN0YXRlID09IFZJT19ERVNDX1JFQURZKQotCQkJcHJfd2FybigiYWN0aXZlIHRyYW5zbWl0IGJ1ZmZlcnMgZnJlZWRcbiIpOwogCiAJCWxkY191bm1hcChwb3J0LT52aW8ubHAsCiAJCQkgIHBvcnQtPnR4X2J1ZnNbaV0uY29va2llcywKQEAgLTE2NjEsNiArMTY1NywyMyBAQAogCQlwb3J0LT50eF9idWZzW2ldLnNrYiA9IE5VTEw7CiAJCWQtPmhkci5zdGF0ZSA9IFZJT19ERVNDX0ZSRUU7CiAJfQorCWxkY19mcmVlX2V4cF9kcmluZyhwb3J0LT52aW8ubHAsIGRyLT5iYXNlLAorCQkJICAgKGRyLT5lbnRyeV9zaXplICogZHItPm51bV9lbnRyaWVzKSwKKwkJCSAgIGRyLT5jb29raWVzLCBkci0+bmNvb2tpZXMpOworCWRyLT5iYXNlID0gTlVMTDsKKwlkci0+ZW50cnlfc2l6ZSA9IDA7CisJZHItPm51bV9lbnRyaWVzID0gMDsKKwlkci0+cGVuZGluZyA9IDA7CisJZHItPm5jb29raWVzID0gMDsKK30KKworc3RhdGljIHZvaWQgdm5ldF9wb3J0X3Jlc2V0KHN0cnVjdCB2bmV0X3BvcnQgKnBvcnQpCit7CisJZGVsX3RpbWVyKCZwb3J0LT5jbGVhbl90aW1lcik7CisJdm5ldF9wb3J0X2ZyZWVfdHhfYnVmcyhwb3J0KTsKKwlwb3J0LT5ybXR1ID0gMDsKKwlwb3J0LT50c28gPSB0cnVlOworCXBvcnQtPnRzb2xlbiA9IDA7CiB9CiAKIHN0YXRpYyBpbnQgdm5ldF9wb3J0X2FsbG9jX3R4X3Jpbmcoc3RydWN0IHZuZXRfcG9ydCAqcG9ydCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS90ZWh1dGkuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS90ZWh1dGkuYwppbmRleCA2YWIzNmQ5Li5hOWNhYzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvdGVodXRpLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL3RlaHV0aS5jCkBAIC0xNjUwLDkgKzE2NTAsOSBAQAogCQkgICAgdHhkX21zcyk7CiAJfQogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCS8qQ3V0IFZMQU4gSUQgdG8gMTIgYml0cyAqLwotCQl0eGRfdmxhbl9pZCA9IHZsYW5fdHhfdGFnX2dldChza2IpICYgQklUU19NQVNLKDEyKTsKKwkJdHhkX3ZsYW5faWQgPSBza2Jfdmxhbl90YWdfZ2V0KHNrYikgJiBCSVRTX01BU0soMTIpOwogCQl0eGRfdnRhZyA9IDE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZwppbmRleCA2MDVkZDkwLi4zYmM5OTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWcKQEAgLTU2LDEyICs1NiwxOCBAQAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgY29uZmlndXJpbmcgb2YgdGhlIHBoeSBtb2RlIGNvbm5lY3RlZCB0bwogCSAgdGhlIENQU1cuCiAKK2NvbmZpZyBUSV9DUFNXX0FMRQorCXRyaXN0YXRlICJUSSBDUFNXIEFMRSBTdXBwb3J0IgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIFRJJ3MgQ1BTVyBBTEUgbW9kdWxlLgorCiBjb25maWcgVElfQ1BTVwogCXRyaXN0YXRlICJUSSBDUFNXIFN3aXRjaCBTdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJIHx8IEFSQ0hfT01BUDJQTFVTCiAJc2VsZWN0IFRJX0RBVklOQ0lfQ1BETUEKIAlzZWxlY3QgVElfREFWSU5DSV9NRElPCiAJc2VsZWN0IFRJX0NQU1dfUEhZX1NFTAorCXNlbGVjdCBUSV9DUFNXX0FMRQogCXNlbGVjdCBNRkRfU1lTQ09OCiAJc2VsZWN0IFJFR01BUAogCS0tLWhlbHAtLS0KQEAgLTc5LDYgKzg1LDI1IEBACiAJICB0aGUgQ1BTVyBFdGhlcm5ldCBTd2l0Y2guIFRoZSB1bml0IGNhbiB0aW1lIHN0YW1wIFBUUCBVRFAvSVB2NAogCSAgYW5kIExheWVyIDIgcGFja2V0cywgYW5kIHRoZSBkcml2ZXIgb2ZmZXJzIGEgUFRQIEhhcmR3YXJlIENsb2NrLgogCitjb25maWcgVElfS0VZU1RPTkVfTkVUQ1AKKwl0cmlzdGF0ZSAiVEkgS2V5c3RvbmUgTkVUQ1AgQ29yZSBTdXBwb3J0IgorCXNlbGVjdCBUSV9DUFNXX0FMRQorCWRlcGVuZHMgb24gT0YKKwlkZXBlbmRzIG9uIEtFWVNUT05FX05BVklHQVRPUl9ETUEgJiYgS0VZU1RPTkVfTkFWSUdBVE9SX1FNU1MKKwktLS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBUSSdzIEtleXN0b25lIE5FVENQIENvcmUuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIGtleXN0b25lX25ldGNwLgorCitjb25maWcgVElfS0VZU1RPTkVfTkVUQ1BfRVRIU1MKKwlkZXBlbmRzIG9uIFRJX0tFWVNUT05FX05FVENQCisJdHJpc3RhdGUgIlRJIEtleXN0b25lIE5FVENQIEV0aGVybmV0IHN1YnN5c3RlbSBTdXBwb3J0IgorCS0tLWhlbHAtLS0KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQga2V5c3RvbmVfbmV0Y3BfZXRoc3MuCisKIGNvbmZpZyBUTEFOCiAJdHJpc3RhdGUgIlRJIFRodW5kZXJMQU4gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIChQQ0kgfHwgRUlTQSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUKaW5kZXggOWNmYWFiOC4uZDQyMGQ5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvTWFrZWZpbGUKQEAgLTIsMTEgKzIsMjAgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBUSSBuZXR3b3JrIGRldmljZSBkcml2ZXJzLgogIwogCitvYmotJChDT05GSUdfVElfQ1BTVykgKz0gY3Bzdy1jb21tb24ubworb2JqLSQoQ09ORklHX1RJX0RBVklOQ0lfRU1BQykgKz0gY3Bzdy1jb21tb24ubworCiBvYmotJChDT05GSUdfVExBTikgKz0gdGxhbi5vCiBvYmotJChDT05GSUdfQ1BNQUMpICs9IGNwbWFjLm8KIG9iai0kKENPTkZJR19USV9EQVZJTkNJX0VNQUMpICs9IGRhdmluY2lfZW1hYy5vCiBvYmotJChDT05GSUdfVElfREFWSU5DSV9NRElPKSArPSBkYXZpbmNpX21kaW8ubwogb2JqLSQoQ09ORklHX1RJX0RBVklOQ0lfQ1BETUEpICs9IGRhdmluY2lfY3BkbWEubwogb2JqLSQoQ09ORklHX1RJX0NQU1dfUEhZX1NFTCkgKz0gY3Bzdy1waHktc2VsLm8KK29iai0kKENPTkZJR19USV9DUFNXX0FMRSkgKz0gY3Bzd19hbGUubwogb2JqLSQoQ09ORklHX1RJX0NQU1cpICs9IHRpX2Nwc3cubwotdGlfY3Bzdy15IDo9IGNwc3dfYWxlLm8gY3Bzdy5vIGNwdHMubwordGlfY3Bzdy15IDo9IGNwc3cubyBjcHRzLm8KKworb2JqLSQoQ09ORklHX1RJX0tFWVNUT05FX05FVENQKSArPSBrZXlzdG9uZV9uZXRjcC5vCitrZXlzdG9uZV9uZXRjcC15IDo9IG5ldGNwX2NvcmUubworb2JqLSQoQ09ORklHX1RJX0tFWVNUT05FX05FVENQX0VUSFNTKSArPSBrZXlzdG9uZV9uZXRjcF9ldGhzcy5vCitrZXlzdG9uZV9uZXRjcF9ldGhzcy15IDo9IG5ldGNwX2V0aHNzLm8gbmV0Y3Bfc2dtaWkubyBuZXRjcF94Z2JlcGNzci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LWNvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy1jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTk1MDk0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy1jb21tb24uYwpAQCAtMCwwICsxLDU1IEBACisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKworI2luY2x1ZGUgImNwc3cuaCIKKworI2RlZmluZSBBTTMzWFhfQ1RSTF9NQUNfTE9fUkVHKG9mZnNldCwgaWQpICgob2Zmc2V0KSArIDB4OCAqIChpZCkpCisjZGVmaW5lIEFNMzNYWF9DVFJMX01BQ19ISV9SRUcob2Zmc2V0LCBpZCkgKChvZmZzZXQpICsgMHg4ICogKGlkKSArIDB4NCkKKworaW50IGNwc3dfYW0zM3h4X2NtX2dldF9tYWNpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUxNiBvZmZzZXQsIGludCBzbGF2ZSwKKwkJCSAgICAgdTggKm1hY19hZGRyKQoreworCXUzMiBtYWNpZF9sbzsKKwl1MzIgbWFjaWRfaGk7CisJc3RydWN0IHJlZ21hcCAqc3lzY29uOworCisJc3lzY29uID0gc3lzY29uX3JlZ21hcF9sb29rdXBfYnlfcGhhbmRsZShkZXYtPm9mX25vZGUsICJzeXNjb24iKTsKKwlpZiAoSVNfRVJSKHN5c2NvbikpIHsKKwkJaWYgKFBUUl9FUlIoc3lzY29uKSA9PSAtRU5PREVWKQorCQkJcmV0dXJuIDA7CisJCXJldHVybiBQVFJfRVJSKHN5c2Nvbik7CisJfQorCisJcmVnbWFwX3JlYWQoc3lzY29uLCBBTTMzWFhfQ1RSTF9NQUNfTE9fUkVHKG9mZnNldCwgc2xhdmUpLAorCQkgICAgJm1hY2lkX2xvKTsKKwlyZWdtYXBfcmVhZChzeXNjb24sIEFNMzNYWF9DVFJMX01BQ19ISV9SRUcob2Zmc2V0LCBzbGF2ZSksCisJCSAgICAmbWFjaWRfaGkpOworCisJbWFjX2FkZHJbNV0gPSAobWFjaWRfbG8gPj4gOCkgJiAweGZmOworCW1hY19hZGRyWzRdID0gbWFjaWRfbG8gJiAweGZmOworCW1hY19hZGRyWzNdID0gKG1hY2lkX2hpID4+IDI0KSAmIDB4ZmY7CisJbWFjX2FkZHJbMl0gPSAobWFjaWRfaGkgPj4gMTYpICYgMHhmZjsKKwltYWNfYWRkclsxXSA9IChtYWNpZF9oaSA+PiA4KSAmIDB4ZmY7CisJbWFjX2FkZHJbMF0gPSBtYWNpZF9oaSAmIDB4ZmY7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNwc3dfYW0zM3h4X2NtX2dldF9tYWNpZCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3cuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3cuYwppbmRleCBlMDY4ZDQ4Li43ZDhkZDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy5jCkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KLSNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvY29uc3VtZXIuaD4KIApAQCAtNzYxLDE3ICs3NTksMjUgQEAKIAkJZGV2X2tmcmVlX3NrYl9hbnkobmV3X3NrYik7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBjcHN3X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgaXJxcmV0dXJuX3QgY3Bzd190eF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXN0cnVjdCBjcHN3X3ByaXYgKnByaXYgPSBkZXZfaWQ7Ci0JaW50IHZhbHVlID0gaXJxIC0gcHJpdi0+aXJxc190YWJsZVswXTsKIAotCS8qIE5PVElDRTogRW5kaW5nIElSUSBoZXJlLiBUaGUgdHJpY2sgd2l0aCB0aGUgJ3ZhbHVlJyB2YXJpYWJsZSBhYm92ZQotCSAqIGlzIHRvIG1ha2Ugc3VyZSB3ZSB3aWxsIGFsd2F5cyB3cml0ZSB0aGUgY29ycmVjdCB2YWx1ZSB0byB0aGUgRU9JCi0JICogcmVnaXN0ZXIuIE5hbWVseSAwIGZvciBSWF9USFJFU0ggSW50ZXJydXB0LCAxIGZvciBSWCBJbnRlcnJ1cHQsIDIKLQkgKiBmb3IgVFggSW50ZXJydXB0IGFuZCAzIGZvciBNSVNDIEludGVycnVwdC4KLQkgKi8KLQljcGRtYV9jdGxyX2VvaShwcml2LT5kbWEsIHZhbHVlKTsKKwljcGRtYV9jdGxyX2VvaShwcml2LT5kbWEsIENQRE1BX0VPSV9UWCk7CisJY3BkbWFfY2hhbl9wcm9jZXNzKHByaXYtPnR4Y2gsIDEyOCk7CisKKwlwcml2ID0gY3Bzd19nZXRfc2xhdmVfcHJpdihwcml2LCAxKTsKKwlpZiAocHJpdikKKwkJY3BkbWFfY2hhbl9wcm9jZXNzKHByaXYtPnR4Y2gsIDEyOCk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBjcHN3X3J4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGNwc3dfcHJpdiAqcHJpdiA9IGRldl9pZDsKKworCWNwZG1hX2N0bHJfZW9pKHByaXYtPmRtYSwgQ1BETUFfRU9JX1JYKTsKIAogCWNwc3dfaW50cl9kaXNhYmxlKHByaXYpOwogCWlmIChwcml2LT5pcnFfZW5hYmxlZCA9PSB0cnVlKSB7CkBAIC0xNjI0LDcgKzE2MzAsOCBAQAogCiAJY3Bzd19pbnRyX2Rpc2FibGUocHJpdik7CiAJY3BkbWFfY3Rscl9pbnRfY3RybChwcml2LT5kbWEsIGZhbHNlKTsKLQljcHN3X2ludGVycnVwdChuZGV2LT5pcnEsIHByaXYpOworCWNwc3dfcnhfaW50ZXJydXB0KHByaXYtPmlycXNfdGFibGVbMF0sIHByaXYpOworCWNwc3dfdHhfaW50ZXJydXB0KHByaXYtPmlycXNfdGFibGVbMV0sIHByaXYpOwogCWNwZG1hX2N0bHJfaW50X2N0cmwocHJpdi0+ZG1hLCB0cnVlKTsKIAljcHN3X2ludHJfZW5hYmxlKHByaXYpOwogfQpAQCAtMTY4Myw2ICsxNjkwLDE5IEBACiAJaWYgKHZpZCA9PSBwcml2LT5kYXRhLmRlZmF1bHRfdmxhbikKIAkJcmV0dXJuIDA7CiAKKwlpZiAocHJpdi0+ZGF0YS5kdWFsX2VtYWMpIHsKKwkJLyogSW4gZHVhbCBFTUFDLCByZXNlcnZlZCBWTEFOIGlkIHNob3VsZCBub3QgYmUgdXNlZCBmb3IKKwkJICogY3JlYXRpbmcgVkxBTiBpbnRlcmZhY2VzIGFzIHRoaXMgY2FuIGJyZWFrIHRoZSBkdWFsCisJCSAqIEVNQUMgcG9ydCBzZXBhcmF0aW9uCisJCSAqLworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+ZGF0YS5zbGF2ZXM7IGkrKykgeworCQkJaWYgKHZpZCA9PSBwcml2LT5zbGF2ZXNbaV0ucG9ydF92bGFuKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCiAJZGV2X2luZm8ocHJpdi0+ZGV2LCAiQWRkaW5nIHZsYW5pZCAlZCB0byB2bGFuIGZpbHRlclxuIiwgdmlkKTsKIAlyZXR1cm4gY3Bzd19hZGRfdmxhbl9hbGVfZW50cnkocHJpdiwgdmlkKTsKIH0KQEAgLTE2OTYsNiArMTcxNiwxNSBAQAogCWlmICh2aWQgPT0gcHJpdi0+ZGF0YS5kZWZhdWx0X3ZsYW4pCiAJCXJldHVybiAwOwogCisJaWYgKHByaXYtPmRhdGEuZHVhbF9lbWFjKSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBwcml2LT5kYXRhLnNsYXZlczsgaSsrKSB7CisJCQlpZiAodmlkID09IHByaXYtPnNsYXZlc1tpXS5wb3J0X3ZsYW4pCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKIAlkZXZfaW5mbyhwcml2LT5kZXYsICJyZW1vdmluZyB2bGFuaWQgJWQgZnJvbSB2bGFuIGZpbHRlclxuIiwgdmlkKTsKIAlyZXQgPSBjcHN3X2FsZV9kZWxfdmxhbihwcml2LT5hbGUsIHZpZCwgMCk7CiAJaWYgKHJldCAhPSAwKQpAQCAtMTkwNSwzNiArMTkzNCw2IEBACiAJc2xhdmUtPnBvcnRfdmxhbiA9IGRhdGEtPmR1YWxfZW1hY19yZXNfdmxhbjsKIH0KIAotI2RlZmluZSBBTTMzWFhfQ1RSTF9NQUNfTE9fUkVHKGlkKSAoMHg2MzAgKyAweDggKiBpZCkKLSNkZWZpbmUgQU0zM1hYX0NUUkxfTUFDX0hJX1JFRyhpZCkgKDB4NjMwICsgMHg4ICogaWQgKyAweDQpCi0KLXN0YXRpYyBpbnQgY3Bzd19hbTMzeHhfY21fZ2V0X21hY2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsYXZlLAotCQl1OCAqbWFjX2FkZHIpCi17Ci0JdTMyIG1hY2lkX2xvOwotCXUzMiBtYWNpZF9oaTsKLQlzdHJ1Y3QgcmVnbWFwICpzeXNjb247Ci0KLQlzeXNjb24gPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKGRldi0+b2Zfbm9kZSwgInN5c2NvbiIpOwotCWlmIChJU19FUlIoc3lzY29uKSkgewotCQlpZiAoUFRSX0VSUihzeXNjb24pID09IC1FTk9ERVYpCi0JCQlyZXR1cm4gMDsKLQkJcmV0dXJuIFBUUl9FUlIoc3lzY29uKTsKLQl9Ci0KLQlyZWdtYXBfcmVhZChzeXNjb24sIEFNMzNYWF9DVFJMX01BQ19MT19SRUcoc2xhdmUpLCAmbWFjaWRfbG8pOwotCXJlZ21hcF9yZWFkKHN5c2NvbiwgQU0zM1hYX0NUUkxfTUFDX0hJX1JFRyhzbGF2ZSksICZtYWNpZF9oaSk7Ci0KLQltYWNfYWRkcls1XSA9IChtYWNpZF9sbyA+PiA4KSAmIDB4ZmY7Ci0JbWFjX2FkZHJbNF0gPSBtYWNpZF9sbyAmIDB4ZmY7Ci0JbWFjX2FkZHJbM10gPSAobWFjaWRfaGkgPj4gMjQpICYgMHhmZjsKLQltYWNfYWRkclsyXSA9IChtYWNpZF9oaSA+PiAxNikgJiAweGZmOwotCW1hY19hZGRyWzFdID0gKG1hY2lkX2hpID4+IDgpICYgMHhmZjsKLQltYWNfYWRkclswXSA9IG1hY2lkX2hpICYgMHhmZjsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGNwc3dfcHJvYmVfZHQoc3RydWN0IGNwc3dfcGxhdGZvcm1fZGF0YSAqZGF0YSwKIAkJCSBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewpAQCAtMjA1OSw3ICsyMDU4LDggQEAKIAkJCW1lbWNweShzbGF2ZV9kYXRhLT5tYWNfYWRkciwgbWFjX2FkZHIsIEVUSF9BTEVOKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoInRpLGFtMzN4eCIpKSB7Ci0JCQkJcmV0ID0gY3Bzd19hbTMzeHhfY21fZ2V0X21hY2lkKCZwZGV2LT5kZXYsIGksCisJCQkJcmV0ID0gY3Bzd19hbTMzeHhfY21fZ2V0X21hY2lkKCZwZGV2LT5kZXYsCisJCQkJCQkJMHg2MzAsIGksCiAJCQkJCQkJc2xhdmVfZGF0YS0+bWFjX2FkZHIpOwogCQkJCWlmIChyZXQpCiAJCQkJCXJldHVybiByZXQ7CkBAIC0yMTcwLDcgKzIxNzAsOCBAQAogCXZvaWQgX19pb21lbQkJCSpzc19yZWdzOwogCXN0cnVjdCByZXNvdXJjZQkJCSpyZXMsICpzc19yZXM7CiAJdTMyIHNsYXZlX29mZnNldCwgc2xpdmVyX29mZnNldCwgc2xhdmVfc2l6ZTsKLQlpbnQgcmV0ID0gMCwgaSwgayA9IDA7CisJaW50IHJldCA9IDAsIGk7CisJaW50IGlycTsKIAogCW5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGNwc3dfcHJpdikpOwogCWlmICghbmRldikgewpAQCAtMjM1MiwzMSArMjM1Myw0NyBAQAogCQlnb3RvIGNsZWFuX2RtYV9yZXQ7CiAJfQogCi0JbmRldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwluZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOwogCWlmIChuZGV2LT5pcnEgPCAwKSB7CiAJCWRldl9lcnIocHJpdi0+ZGV2LCAiZXJyb3IgZ2V0dGluZyBpcnEgcmVzb3VyY2VcbiIpOwogCQlyZXQgPSAtRU5PRU5UOwogCQlnb3RvIGNsZWFuX2FsZV9yZXQ7CiAJfQogCi0Jd2hpbGUgKChyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocHJpdi0+cGRldiwgSU9SRVNPVVJDRV9JUlEsIGspKSkgewotCQlpZiAoayA+PSBBUlJBWV9TSVpFKHByaXYtPmlycXNfdGFibGUpKSB7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBjbGVhbl9hbGVfcmV0OwotCQl9CisJLyogR3JhYiBSWCBhbmQgVFggSVJRcy4gTm90ZSB0aGF0IHdlIGFsc28gaGF2ZSBSWF9USFJFU0hPTEQgYW5kCisJICogTUlTQyBJUlFzIHdoaWNoIGFyZSBhbHdheXMga2VwdCBkaXNhYmxlZCB3aXRoIHRoaXMgZHJpdmVyIHNvCisJICogd2Ugd2lsbCBub3QgcmVxdWVzdCB0aGVtLgorCSAqCisJICogSWYgYW55b25lIHdhbnRzIHRvIGltcGxlbWVudCBzdXBwb3J0IGZvciB0aG9zZSwgbWFrZSBzdXJlIHRvCisJICogZmlyc3QgcmVxdWVzdCBhbmQgYXBwZW5kIHRoZW0gdG8gaXJxc190YWJsZSBhcnJheS4KKwkgKi8KIAotCQlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsIGNwc3dfaW50ZXJydXB0LAotCQkJCSAgICAgICAwLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgcHJpdik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKHByaXYtPmRldiwgImVycm9yIGF0dGFjaGluZyBpcnEgKCVkKVxuIiwgcmV0KTsKLQkJCWdvdG8gY2xlYW5fYWxlX3JldDsKLQkJfQorCS8qIFJYIElSUSAqLworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CisJaWYgKGlycSA8IDApCisJCWdvdG8gY2xlYW5fYWxlX3JldDsKIAotCQlwcml2LT5pcnFzX3RhYmxlW2tdID0gcmVzLT5zdGFydDsKLQkJaysrOworCXByaXYtPmlycXNfdGFibGVbMF0gPSBpcnE7CisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnEsIGNwc3dfcnhfaW50ZXJydXB0LAorCQkJICAgICAgIDAsIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBwcml2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHByaXYtPmRldiwgImVycm9yIGF0dGFjaGluZyBpcnEgKCVkKVxuIiwgcmV0KTsKKwkJZ290byBjbGVhbl9hbGVfcmV0OwogCX0KIAotCXByaXYtPm51bV9pcnFzID0gazsKKwkvKiBUWCBJUlEgKi8KKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDIpOworCWlmIChpcnEgPCAwKQorCQlnb3RvIGNsZWFuX2FsZV9yZXQ7CisKKwlwcml2LT5pcnFzX3RhYmxlWzFdID0gaXJxOworCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJxLCBjcHN3X3R4X2ludGVycnVwdCwKKwkJCSAgICAgICAwLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgcHJpdik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycihwcml2LT5kZXYsICJlcnJvciBhdHRhY2hpbmcgaXJxICglZClcbiIsIHJldCk7CisJCWdvdG8gY2xlYW5fYWxlX3JldDsKKwl9CisJcHJpdi0+bnVtX2lycXMgPSAyOwogCiAJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3LmgKaW5kZXggMWI3MTA2Ny4uY2E5MGVmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzdy5oCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3cuaApAQCAtNDEsNSArNDEsNyBAQAogfTsKIAogdm9pZCBjcHN3X3BoeV9zZWwoc3RydWN0IGRldmljZSAqZGV2LCBwaHlfaW50ZXJmYWNlX3QgcGh5X21vZGUsIGludCBzbGF2ZSk7CitpbnQgY3Bzd19hbTMzeHhfY21fZ2V0X21hY2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTE2IG9mZnNldCwgaW50IHNsYXZlLAorCQkJICAgICB1OCAqbWFjX2FkZHIpOwogCiAjZW5kaWYgLyogX19DUFNXX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19hbGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2Nwc3dfYWxlLmMKaW5kZXggNTI0NmIzYS4uNmU5MjdiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3Bzd19hbGUuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHN3X2FsZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0xNDYsNyArMTQ3LDcgQEAKIAlyZXR1cm4gaWR4OwogfQogCi1pbnQgY3Bzd19hbGVfbWF0Y2hfYWRkcihzdHJ1Y3QgY3Bzd19hbGUgKmFsZSwgdTggKmFkZHIsIHUxNiB2aWQpCitzdGF0aWMgaW50IGNwc3dfYWxlX21hdGNoX2FkZHIoc3RydWN0IGNwc3dfYWxlICphbGUsIHU4ICphZGRyLCB1MTYgdmlkKQogewogCXUzMiBhbGVfZW50cnlbQUxFX0VOVFJZX1dPUkRTXTsKIAlpbnQgdHlwZSwgaWR4OwpAQCAtMTY3LDcgKzE2OCw3IEBACiAJcmV0dXJuIC1FTk9FTlQ7CiB9CiAKLWludCBjcHN3X2FsZV9tYXRjaF92bGFuKHN0cnVjdCBjcHN3X2FsZSAqYWxlLCB1MTYgdmlkKQorc3RhdGljIGludCBjcHN3X2FsZV9tYXRjaF92bGFuKHN0cnVjdCBjcHN3X2FsZSAqYWxlLCB1MTYgdmlkKQogewogCXUzMiBhbGVfZW50cnlbQUxFX0VOVFJZX1dPUkRTXTsKIAlpbnQgdHlwZSwgaWR4OwpAQCAtMjY1LDYgKzI2Niw3IEBACiAJfQogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoY3Bzd19hbGVfZmx1c2hfbXVsdGljYXN0KTsKIAogc3RhdGljIHZvaWQgY3Bzd19hbGVfZmx1c2hfdWNhc3Qoc3RydWN0IGNwc3dfYWxlICphbGUsIHUzMiAqYWxlX2VudHJ5LAogCQkJCSBpbnQgcG9ydF9tYXNrKQpAQCAtMjk3LDYgKzI5OSw3IEBACiAJfQogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoY3Bzd19hbGVfZmx1c2gpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgY3Bzd19hbGVfc2V0X3ZsYW5fZW50cnlfdHlwZSh1MzIgKmFsZV9lbnRyeSwKIAkJCQkJCWludCBmbGFncywgdTE2IHZpZCkKQEAgLTMzNCw2ICszMzcsNyBAQAogCWNwc3dfYWxlX3dyaXRlKGFsZSwgaWR4LCBhbGVfZW50cnkpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoY3Bzd19hbGVfYWRkX3VjYXN0KTsKIAogaW50IGNwc3dfYWxlX2RlbF91Y2FzdChzdHJ1Y3QgY3Bzd19hbGUgKmFsZSwgdTggKmFkZHIsIGludCBwb3J0LAogCQkgICAgICAgaW50IGZsYWdzLCB1MTYgdmlkKQpAQCAtMzQ5LDYgKzM1Myw3IEBACiAJY3Bzd19hbGVfd3JpdGUoYWxlLCBpZHgsIGFsZV9lbnRyeSk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcHN3X2FsZV9kZWxfdWNhc3QpOwogCiBpbnQgY3Bzd19hbGVfYWRkX21jYXN0KHN0cnVjdCBjcHN3X2FsZSAqYWxlLCB1OCAqYWRkciwgaW50IHBvcnRfbWFzaywKIAkJICAgICAgIGludCBmbGFncywgdTE2IHZpZCwgaW50IG1jYXN0X3N0YXRlKQpAQCAtMzgwLDYgKzM4NSw3IEBACiAJY3Bzd19hbGVfd3JpdGUoYWxlLCBpZHgsIGFsZV9lbnRyeSk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcHN3X2FsZV9hZGRfbWNhc3QpOwogCiBpbnQgY3Bzd19hbGVfZGVsX21jYXN0KHN0cnVjdCBjcHN3X2FsZSAqYWxlLCB1OCAqYWRkciwgaW50IHBvcnRfbWFzaywKIAkJICAgICAgIGludCBmbGFncywgdTE2IHZpZCkKQEAgLTQwMSw2ICs0MDcsNyBAQAogCWNwc3dfYWxlX3dyaXRlKGFsZSwgaWR4LCBhbGVfZW50cnkpOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoY3Bzd19hbGVfZGVsX21jYXN0KTsKIAogaW50IGNwc3dfYWxlX2FkZF92bGFuKHN0cnVjdCBjcHN3X2FsZSAqYWxlLCB1MTYgdmlkLCBpbnQgcG9ydCwgaW50IHVudGFnLAogCQkgICAgICBpbnQgcmVnX21jYXN0LCBpbnQgdW5yZWdfbWNhc3QpCkBAIC00MzAsNiArNDM3LDcgQEAKIAljcHN3X2FsZV93cml0ZShhbGUsIGlkeCwgYWxlX2VudHJ5KTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNwc3dfYWxlX2FkZF92bGFuKTsKIAogaW50IGNwc3dfYWxlX2RlbF92bGFuKHN0cnVjdCBjcHN3X2FsZSAqYWxlLCB1MTYgdmlkLCBpbnQgcG9ydF9tYXNrKQogewpAQCAtNDUwLDYgKzQ1OCw3IEBACiAJY3Bzd19hbGVfd3JpdGUoYWxlLCBpZHgsIGFsZV9lbnRyeSk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcHN3X2FsZV9kZWxfdmxhbik7CiAKIHZvaWQgY3Bzd19hbGVfc2V0X2FsbG11bHRpKHN0cnVjdCBjcHN3X2FsZSAqYWxlLCBpbnQgYWxsbXVsdGkpCiB7CkBAIC00NzksNiArNDg4LDcgQEAKIAkJY3Bzd19hbGVfd3JpdGUoYWxlLCBpZHgsIGFsZV9lbnRyeSk7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwoY3Bzd19hbGVfc2V0X2FsbG11bHRpKTsKIAogc3RydWN0IGFsZV9jb250cm9sX2luZm8gewogCWNvbnN0IGNoYXIJKm5hbWU7CkBAIC03MDQsNiArNzE0LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoY3Bzd19hbGVfY29udHJvbF9zZXQpOwogCiBpbnQgY3Bzd19hbGVfY29udHJvbF9nZXQoc3RydWN0IGNwc3dfYWxlICphbGUsIGludCBwb3J0LCBpbnQgY29udHJvbCkKIHsKQEAgLTcyNyw2ICs3MzgsNyBAQAogCXRtcCA9IF9fcmF3X3JlYWRsKGFsZS0+cGFyYW1zLmFsZV9yZWdzICsgb2Zmc2V0KSA+PiBzaGlmdDsKIAlyZXR1cm4gdG1wICYgQklUTUFTSyhpbmZvLT5iaXRzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNwc3dfYWxlX2NvbnRyb2xfZ2V0KTsKIAogc3RhdGljIHZvaWQgY3Bzd19hbGVfdGltZXIodW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC03NTAsNiArNzYyLDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcHN3X2FsZV9zZXRfYWdlb3V0KTsKIAogdm9pZCBjcHN3X2FsZV9zdGFydChzdHJ1Y3QgY3Bzd19hbGUgKmFsZSkKIHsKQEAgLTc2OSwxMSArNzgyLDEzIEBACiAJCWFkZF90aW1lcigmYWxlLT50aW1lcik7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9HUEwoY3Bzd19hbGVfc3RhcnQpOwogCiB2b2lkIGNwc3dfYWxlX3N0b3Aoc3RydWN0IGNwc3dfYWxlICphbGUpCiB7CiAJZGVsX3RpbWVyX3N5bmMoJmFsZS0+dGltZXIpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoY3Bzd19hbGVfc3RvcCk7CiAKIHN0cnVjdCBjcHN3X2FsZSAqY3Bzd19hbGVfY3JlYXRlKHN0cnVjdCBjcHN3X2FsZV9wYXJhbXMgKnBhcmFtcykKIHsKQEAgLTc4OCw2ICs4MDMsNyBAQAogCiAJcmV0dXJuIGFsZTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNwc3dfYWxlX2NyZWF0ZSk7CiAKIGludCBjcHN3X2FsZV9kZXN0cm95KHN0cnVjdCBjcHN3X2FsZSAqYWxlKQogewpAQCAtNzk3LDYgKzgxMyw3IEBACiAJa2ZyZWUoYWxlKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNwc3dfYWxlX2Rlc3Ryb3kpOwogCiB2b2lkIGNwc3dfYWxlX2R1bXAoc3RydWN0IGNwc3dfYWxlICphbGUsIHUzMiAqZGF0YSkKIHsKQEAgLTgwNywzICs4MjQsOCBAQAogCQlkYXRhICs9IEFMRV9FTlRSWV9XT1JEUzsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcHN3X2FsZV9kdW1wKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUSSBDUFNXIEFMRSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIlRleGFzIEluc3RydW1lbnRzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHRzLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHRzLmMKaW5kZXggNGE0Mzg4Yi4uZmJlNDJjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3B0cy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2NwdHMuYwpAQCAtMTU3LDE0ICsxNTcsMTEgQEAKIAogc3RhdGljIGludCBjcHRzX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpCiB7Ci0JczY0IG5vdzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBjcHRzICpjcHRzID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IGNwdHMsIGluZm8pOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdHMtPmxvY2ssIGZsYWdzKTsKLQlub3cgPSB0aW1lY291bnRlcl9yZWFkKCZjcHRzLT50Yyk7Ci0Jbm93ICs9IGRlbHRhOwotCXRpbWVjb3VudGVyX2luaXQoJmNwdHMtPnRjLCAmY3B0cy0+Y2MsIG5vdyk7CisJdGltZWNvdW50ZXJfYWRqdGltZSgmY3B0cy0+dGMsIGRlbHRhKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHRzLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2NwdHMuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2NwdHMuaAppbmRleCAxYTU4MWVmLi42OWE0NmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9jcHRzLmgKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvY3B0cy5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cF9jbG9ja19rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lY291bnRlci5oPgogCiBzdHJ1Y3QgY3Bzd19jcHRzIHsKIAl1MzIgaWR2ZXI7ICAgICAgICAgICAgICAgIC8qIElkZW50aWZpY2F0aW9uIGFuZCB2ZXJzaW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9kYXZpbmNpX2VtYWMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2RhdmluY2lfZW1hYy5jCmluZGV4IDVmYWU0MzUuLmFlZWJjMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2RhdmluY2lfZW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL2RhdmluY2lfZW1hYy5jCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KQEAgLTY1LDEwICs2NiwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L29mX21kaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAorI2luY2x1ZGUgImNwc3cuaCIKICNpbmNsdWRlICJkYXZpbmNpX2NwZG1hLmgiCiAKIHN0YXRpYyBpbnQgZGVidWdfbGV2ZWw7CkBAIC0xODM4LDcgKzE4NDEsNyBAQAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihwZGF0YS0+bWFjX2FkZHIpKSB7CiAJCW1hY19hZGRyID0gb2ZfZ2V0X21hY19hZGRyZXNzKG5wKTsKIAkJaWYgKG1hY19hZGRyKQotCQkJbWVtY3B5KHBkYXRhLT5tYWNfYWRkciwgbWFjX2FkZHIsIEVUSF9BTEVOKTsKKwkJCWV0aGVyX2FkZHJfY29weShwZGF0YS0+bWFjX2FkZHIsIG1hY19hZGRyKTsKIAl9CiAKIAlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInRpLGRhdmluY2ktY3RybC1yZWctb2Zmc2V0IiwKQEAgLTE4NzksNiArMTg4Miw1MyBAQAogCXJldHVybiAgcGRhdGE7CiB9CiAKK3N0YXRpYyBpbnQgZGF2aW5jaV9lbWFjXzM1MTdfZ2V0X21hY2lkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTE2IG9mZnNldCwKKwkJCQkgICAgICAgaW50IHNsYXZlLCB1OCAqbWFjX2FkZHIpCit7CisJdTMyIG1hY2lkX2xzYjsKKwl1MzIgbWFjaWRfbXNiOworCXN0cnVjdCByZWdtYXAgKnN5c2NvbjsKKworCXN5c2NvbiA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAic3lzY29uIik7CisJaWYgKElTX0VSUihzeXNjb24pKSB7CisJCWlmIChQVFJfRVJSKHN5c2NvbikgPT0gLUVOT0RFVikKKwkJCXJldHVybiAwOworCQlyZXR1cm4gUFRSX0VSUihzeXNjb24pOworCX0KKworCXJlZ21hcF9yZWFkKHN5c2Nvbiwgb2Zmc2V0LCAmbWFjaWRfbHNiKTsKKwlyZWdtYXBfcmVhZChzeXNjb24sIG9mZnNldCArIDQsICZtYWNpZF9tc2IpOworCisJbWFjX2FkZHJbMF0gPSAobWFjaWRfbXNiID4+IDE2KSAmIDB4ZmY7CisJbWFjX2FkZHJbMV0gPSAobWFjaWRfbXNiID4+IDgpICAmIDB4ZmY7CisJbWFjX2FkZHJbMl0gPSBtYWNpZF9tc2IgJiAweGZmOworCW1hY19hZGRyWzNdID0gKG1hY2lkX2xzYiA+PiAxNikgJiAweGZmOworCW1hY19hZGRyWzRdID0gKG1hY2lkX2xzYiA+PiA4KSAgJiAweGZmOworCW1hY19hZGRyWzVdID0gbWFjaWRfbHNiICYgMHhmZjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhdmluY2lfZW1hY190cnlfZ2V0X21hYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCSAgICBpbnQgaW5zdGFuY2UsIHU4ICptYWNfYWRkcikKK3sKKwlpbnQgZXJyb3IgPSAtRUlOVkFMOworCisJaWYgKCFwZGV2LT5kZXYub2Zfbm9kZSkKKwkJcmV0dXJuIGVycm9yOworCisJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBkZXYtPmRldi5vZl9ub2RlLCAidGksYW0zNTE3LWVtYWMiKSkKKwkJZXJyb3IgPSBkYXZpbmNpX2VtYWNfMzUxN19nZXRfbWFjaWQoJnBkZXYtPmRldiwgMHgxMTAsCisJCQkJCQkgICAgMCwgbWFjX2FkZHIpOworCWVsc2UgaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKHBkZXYtPmRldi5vZl9ub2RlLAorCQkJCQkgInRpLGRtODE2LWVtYWMiKSkKKwkJZXJyb3IgPSBjcHN3X2FtMzN4eF9jbV9nZXRfbWFjaWQoJnBkZXYtPmRldiwgMHgzMCwKKwkJCQkJCSBpbnN0YW5jZSwKKwkJCQkJCSBtYWNfYWRkcik7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKIC8qKgogICogZGF2aW5jaV9lbWFjX3Byb2JlIC0gRU1BQyBkZXZpY2UgcHJvYmUKICAqIEBwZGV2OiBUaGUgRGFWaW5jaSBFTUFDIGRldmljZSB0aGF0IHdlIGFyZSByZW1vdmluZwpAQCAtMjAwOSw2ICsyMDU5LDEwIEBACiAJfQogCW5kZXYtPmlycSA9IHJlcy0+c3RhcnQ7CiAKKwlyYyA9IGRhdmluY2lfZW1hY190cnlfZ2V0X21hYyhwZGV2LCByZXNfY3RybCA/IDAgOiAxLCBwcml2LT5tYWNfYWRkcik7CisJaWYgKCFyYykKKwkJZXRoZXJfYWRkcl9jb3B5KG5kZXYtPmRldl9hZGRyLCBwcml2LT5tYWNfYWRkcik7CisKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIocHJpdi0+bWFjX2FkZHIpKSB7CiAJCS8qIFVzZSByYW5kb20gTUFDIGlmIG5vbmUgcGFzc2VkICovCiAJCWV0aF9od19hZGRyX3JhbmRvbShuZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL25ldGNwLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9uZXRjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNmU5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9uZXRjcC5oCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogTmV0Q1AgZHJpdmVyIGxvY2FsIGhlYWRlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyAqIEF1dGhvcnM6CVNhbmRlZXAgTmFpciA8c2FuZGVlcF9uQHRpLmNvbT4KKyAqCQlTYW5kZWVwIFBhdWxyYWogPHMtcGF1bHJhakB0aS5jb20+CisgKgkJQ3lyaWwgQ2hlbXBhcmF0aHkgPGN5cmlsQHRpLmNvbT4KKyAqCQlTYW50b3NoIFNoaWxpbWthciA8c2FudG9zaC5zaGlsaW1rYXJAdGkuY29tPgorICoJCVdpbmdtYW4gS3dvayA8dy1rd29rMkB0aS5jb20+CisgKgkJTXVyYWxpIEthcmljaGVyaSA8bS1rYXJpY2hlcmkyQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfX05FVENQX0hfXworI2RlZmluZSBfX05FVENQX0hfXworCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc29jL3RpL2tuYXZfZG1hLmg+CisKKy8qIE1heGltdW0gRXRoZXJuZXQgZnJhbWUgc2l6ZSBzdXBwb3J0ZWQgYnkgS2V5c3RvbmUgc3dpdGNoICovCisjZGVmaW5lIE5FVENQX01BWF9GUkFNRV9TSVpFCQk5NTA0CisKKyNkZWZpbmUgU0dNSUlfTElOS19NQUNfTUFDX0FVVE9ORUcJMAorI2RlZmluZSBTR01JSV9MSU5LX01BQ19QSFkJCTEKKyNkZWZpbmUgU0dNSUlfTElOS19NQUNfTUFDX0ZPUkNFRAkyCisjZGVmaW5lIFNHTUlJX0xJTktfTUFDX0ZJQkVSCQkzCisjZGVmaW5lIFNHTUlJX0xJTktfTUFDX1BIWV9OT19NRElPCTQKKyNkZWZpbmUgWEdNSUlfTElOS19NQUNfUEhZCQkxMAorI2RlZmluZSBYR01JSV9MSU5LX01BQ19NQUNfRk9SQ0VECTExCisKK3N0cnVjdCBuZXRjcF9kZXZpY2U7CisKK3N0cnVjdCBuZXRjcF90eF9waXBlIHsKKwlzdHJ1Y3QgbmV0Y3BfZGV2aWNlCSpuZXRjcF9kZXZpY2U7CisJdm9pZAkJCSpkbWFfcXVldWU7CisJdW5zaWduZWQgaW50CQlkbWFfcXVldWVfaWQ7CisJdTgJCQlkbWFfcHNmbGFnczsKKwl2b2lkCQkJKmRtYV9jaGFubmVsOworCWNvbnN0IGNoYXIJCSpkbWFfY2hhbl9uYW1lOworfTsKKworI2RlZmluZSBBRERSX05FVwkJCUJJVCgwKQorI2RlZmluZSBBRERSX1ZBTElECQkJQklUKDEpCisKK2VudW0gbmV0Y3BfYWRkcl90eXBlIHsKKwlBRERSX0FOWSwKKwlBRERSX0RFViwKKwlBRERSX1VDQVNULAorCUFERFJfTUNBU1QsCisJQUREUl9CQ0FTVAorfTsKKworc3RydWN0IG5ldGNwX2FkZHIgeworCXN0cnVjdCBuZXRjcF9pbnRmCSpuZXRjcDsKKwl1bnNpZ25lZCBjaGFyCQlhZGRyW0VUSF9BTEVOXTsKKwllbnVtIG5ldGNwX2FkZHJfdHlwZQl0eXBlOworCXVuc2lnbmVkIGludAkJZmxhZ3M7CisJc3RydWN0IGxpc3RfaGVhZAlub2RlOworfTsKKworc3RydWN0IG5ldGNwX2ludGYgeworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CisJc3RydWN0IGRldmljZQkJKm5kZXZfZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlCSpuZGV2OworCWJvb2wJCQliaWdfZW5kaWFuOworCXVuc2lnbmVkIGludAkJdHhfY29tcGxfcWlkOworCXZvaWQJCQkqdHhfcG9vbDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXR4aG9va19saXN0X2hlYWQ7CisJdW5zaWduZWQgaW50CQl0eF9wYXVzZV90aHJlc2hvbGQ7CisJdm9pZAkJCSp0eF9jb21wbF9xOworCisJdW5zaWduZWQgaW50CQl0eF9yZXN1bWVfdGhyZXNob2xkOworCXZvaWQJCQkqcnhfcXVldWU7CisJdm9pZAkJCSpyeF9wb29sOworCXN0cnVjdCBsaXN0X2hlYWQJcnhob29rX2xpc3RfaGVhZDsKKwl1bnNpZ25lZCBpbnQJCXJ4X3F1ZXVlX2lkOworCXZvaWQJCQkqcnhfZmRxW0tOQVZfRE1BX0ZEUV9QRVJfQ0hBTl07CisJdTMyCQkJcnhfYnVmZmVyX3NpemVzW0tOQVZfRE1BX0ZEUV9QRVJfQ0hBTl07CisJc3RydWN0IG5hcGlfc3RydWN0CXJ4X25hcGk7CisJc3RydWN0IG5hcGlfc3RydWN0CXR4X25hcGk7CisKKwl2b2lkCQkJKnJ4X2NoYW5uZWw7CisJY29uc3QgY2hhcgkJKmRtYV9jaGFuX25hbWU7CisJdTMyCQkJcnhfcG9vbF9zaXplOworCXUzMgkJCXJ4X3Bvb2xfcmVnaW9uX2lkOworCXUzMgkJCXR4X3Bvb2xfc2l6ZTsKKwl1MzIJCQl0eF9wb29sX3JlZ2lvbl9pZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCW1vZHVsZV9oZWFkOworCXN0cnVjdCBsaXN0X2hlYWQJaW50ZXJmYWNlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlhZGRyX2xpc3Q7CisJYm9vbAkJCW5ldGRldl9yZWdpc3RlcmVkOworCWJvb2wJCQlwcmltYXJ5X21vZHVsZV9hdHRhY2hlZDsKKworCS8qIExvY2sgdXNlZCBmb3IgcHJvdGVjdGluZyBSeC9UeCBob29rIGxpc3QgbWFuYWdlbWVudCAqLworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IG5ldGNwX2RldmljZQkqbmV0Y3BfZGV2aWNlOworCXN0cnVjdCBkZXZpY2Vfbm9kZQkqbm9kZV9pbnRlcmZhY2U7CisKKwkvKiBETUEgY29uZmlndXJhdGlvbiBkYXRhICovCisJdTMyCQkJbXNnX2VuYWJsZTsKKwl1MzIJCQlyeF9xdWV1ZV9kZXB0aHNbS05BVl9ETUFfRkRRX1BFUl9DSEFOXTsKK307CisKKyNkZWZpbmUJTkVUQ1BfUFNEQVRBX0xFTgkJS05BVl9ETUFfTlVNX1BTX1dPUkRTCitzdHJ1Y3QgbmV0Y3BfcGFja2V0IHsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKnNrYjsKKwl1MzIJCQkqZXBpYjsKKwl1MzIJCQkqcHNkYXRhOworCXVuc2lnbmVkIGludAkJcHNkYXRhX2xlbjsKKwlzdHJ1Y3QgbmV0Y3BfaW50ZgkqbmV0Y3A7CisJc3RydWN0IG5ldGNwX3R4X3BpcGUJKnR4X3BpcGU7CisJYm9vbAkJCXJ4dHN0YW1wX2NvbXBsZXRlOworCXZvaWQJCQkqdHNfY29udGV4dDsKKworCWludAkoKnR4dHN0YW1wX2NvbXBsZXRlKSh2b2lkICpjdHgsIHN0cnVjdCBuZXRjcF9wYWNrZXQgKnBrdCk7Cit9OworCitzdGF0aWMgaW5saW5lIHUzMiAqbmV0Y3BfcHVzaF9wc2RhdGEoc3RydWN0IG5ldGNwX3BhY2tldCAqcF9pbmZvLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGJ5dGVzKQoreworCXUzMiAqYnVmOworCXVuc2lnbmVkIGludCB3b3JkczsKKworCWlmICgoYnl0ZXMgJiAweDAzKSAhPSAwKQorCQlyZXR1cm4gTlVMTDsKKwl3b3JkcyA9IGJ5dGVzID4+IDI7CisKKwlpZiAoKHBfaW5mby0+cHNkYXRhX2xlbiArIHdvcmRzKSA+IE5FVENQX1BTREFUQV9MRU4pCisJCXJldHVybiBOVUxMOworCisJcF9pbmZvLT5wc2RhdGFfbGVuICs9IHdvcmRzOworCWJ1ZiA9ICZwX2luZm8tPnBzZGF0YVtORVRDUF9QU0RBVEFfTEVOIC0gcF9pbmZvLT5wc2RhdGFfbGVuXTsKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgaW5saW5lIGludCBuZXRjcF9hbGlnbl9wc2RhdGEoc3RydWN0IG5ldGNwX3BhY2tldCAqcF9pbmZvLAorCQkJCSAgICAgdW5zaWduZWQgaW50IGJ5dGVfYWxpZ24pCit7CisJaW50IHBhZGRpbmc7CisKKwlzd2l0Y2ggKGJ5dGVfYWxpZ24pIHsKKwljYXNlIDA6CisJCXBhZGRpbmcgPSAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgNDoKKwkJcGFkZGluZyA9IDA7CisJCWJyZWFrOworCWNhc2UgODoKKwkJcGFkZGluZyA9IChwX2luZm8tPnBzZGF0YV9sZW4gPDwgMikgJSA4OworCQlicmVhazsKKwljYXNlIDE2OgorCQlwYWRkaW5nID0gKHBfaW5mby0+cHNkYXRhX2xlbiA8PCAyKSAlIDE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwYWRkaW5nID0gKHBfaW5mby0+cHNkYXRhX2xlbiA8PCAyKSAlIGJ5dGVfYWxpZ247CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcGFkZGluZzsKK30KKworc3RydWN0IG5ldGNwX21vZHVsZSB7CisJY29uc3QgY2hhcgkJKm5hbWU7CisJc3RydWN0IG1vZHVsZQkJKm93bmVyOworCWJvb2wJCQlwcmltYXJ5OworCisJLyogcHJvYmUvcmVtb3ZlOiBjYWxsZWQgb25jZSBwZXIgTkVUQ1AgaW5zdGFuY2UgKi8KKwlpbnQJKCpwcm9iZSkoc3RydWN0IG5ldGNwX2RldmljZSAqbmV0Y3BfZGV2aWNlLAorCQkJIHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJIHZvaWQgKippbnN0X3ByaXYpOworCWludAkoKnJlbW92ZSkoc3RydWN0IG5ldGNwX2RldmljZSAqbmV0Y3BfZGV2aWNlLCB2b2lkICppbnN0X3ByaXYpOworCisJLyogYXR0YWNoL3JlbGVhc2U6IGNhbGxlZCBvbmNlIHBlciBuZXR3b3JrIGludGVyZmFjZSAqLworCWludAkoKmF0dGFjaCkodm9pZCAqaW5zdF9wcml2LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKKwkJCSAgc3RydWN0IGRldmljZV9ub2RlICpub2RlLCB2b2lkICoqaW50Zl9wcml2KTsKKwlpbnQJKCpyZWxlYXNlKSh2b2lkICppbnRmX3ByaXYpOworCWludAkoKm9wZW4pKHZvaWQgKmludGZfcHJpdiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOworCWludAkoKmNsb3NlKSh2b2lkICppbnRmX3ByaXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKKwlpbnQJKCphZGRfYWRkcikodm9pZCAqaW50Zl9wcml2LCBzdHJ1Y3QgbmV0Y3BfYWRkciAqbmFkZHIpOworCWludAkoKmRlbF9hZGRyKSh2b2lkICppbnRmX3ByaXYsIHN0cnVjdCBuZXRjcF9hZGRyICpuYWRkcik7CisJaW50CSgqYWRkX3ZpZCkodm9pZCAqaW50Zl9wcml2LCBpbnQgdmlkKTsKKwlpbnQJKCpkZWxfdmlkKSh2b2lkICppbnRmX3ByaXYsIGludCB2aWQpOworCWludAkoKmlvY3RsKSh2b2lkICppbnRmX3ByaXYsIHN0cnVjdCBpZnJlcSAqcmVxLCBpbnQgY21kKTsKKworCS8qIHVzZWQgaW50ZXJuYWxseSAqLworCXN0cnVjdCBsaXN0X2hlYWQJbW9kdWxlX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlpbnRlcmZhY2VfbGlzdDsKK307CisKK2ludCBuZXRjcF9yZWdpc3Rlcl9tb2R1bGUoc3RydWN0IG5ldGNwX21vZHVsZSAqbW9kdWxlKTsKK3ZvaWQgbmV0Y3BfdW5yZWdpc3Rlcl9tb2R1bGUoc3RydWN0IG5ldGNwX21vZHVsZSAqbW9kdWxlKTsKK3ZvaWQgKm5ldGNwX21vZHVsZV9nZXRfaW50Zl9kYXRhKHN0cnVjdCBuZXRjcF9tb2R1bGUgKm1vZHVsZSwKKwkJCQkgc3RydWN0IG5ldGNwX2ludGYgKmludGYpOworCitpbnQgbmV0Y3BfdHhwaXBlX2luaXQoc3RydWN0IG5ldGNwX3R4X3BpcGUgKnR4X3BpcGUsCisJCSAgICAgIHN0cnVjdCBuZXRjcF9kZXZpY2UgKm5ldGNwX2RldmljZSwKKwkJICAgICAgY29uc3QgY2hhciAqZG1hX2NoYW5fbmFtZSwgdW5zaWduZWQgaW50IGRtYV9xdWV1ZV9pZCk7CitpbnQgbmV0Y3BfdHhwaXBlX29wZW4oc3RydWN0IG5ldGNwX3R4X3BpcGUgKnR4X3BpcGUpOworaW50IG5ldGNwX3R4cGlwZV9jbG9zZShzdHJ1Y3QgbmV0Y3BfdHhfcGlwZSAqdHhfcGlwZSk7CisKK3R5cGVkZWYgaW50IG5ldGNwX2hvb2tfcnRuKGludCBvcmRlciwgdm9pZCAqZGF0YSwgc3RydWN0IG5ldGNwX3BhY2tldCAqcGFja2V0KTsKK2ludCBuZXRjcF9yZWdpc3Rlcl90eGhvb2soc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwX3ByaXYsIGludCBvcmRlciwKKwkJCSAgbmV0Y3BfaG9va19ydG4gKmhvb2tfcnRuLCB2b2lkICpob29rX2RhdGEpOworaW50IG5ldGNwX3VucmVnaXN0ZXJfdHhob29rKHN0cnVjdCBuZXRjcF9pbnRmICpuZXRjcF9wcml2LCBpbnQgb3JkZXIsCisJCQkgICAgbmV0Y3BfaG9va19ydG4gKmhvb2tfcnRuLCB2b2lkICpob29rX2RhdGEpOworaW50IG5ldGNwX3JlZ2lzdGVyX3J4aG9vayhzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3BfcHJpdiwgaW50IG9yZGVyLAorCQkJICBuZXRjcF9ob29rX3J0biAqaG9va19ydG4sIHZvaWQgKmhvb2tfZGF0YSk7CitpbnQgbmV0Y3BfdW5yZWdpc3Rlcl9yeGhvb2soc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwX3ByaXYsIGludCBvcmRlciwKKwkJCSAgICBuZXRjcF9ob29rX3J0biAqaG9va19ydG4sIHZvaWQgKmhvb2tfZGF0YSk7Cit2b2lkICpuZXRjcF9kZXZpY2VfZmluZF9tb2R1bGUoc3RydWN0IG5ldGNwX2RldmljZSAqbmV0Y3BfZGV2aWNlLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiBTR01JSSBmdW5jdGlvbnMgKi8KK2ludCBuZXRjcF9zZ21paV9yZXNldCh2b2lkIF9faW9tZW0gKnNnbWlpX29mcywgaW50IHBvcnQpOworaW50IG5ldGNwX3NnbWlpX2dldF9wb3J0X2xpbmsodm9pZCBfX2lvbWVtICpzZ21paV9vZnMsIGludCBwb3J0KTsKK2ludCBuZXRjcF9zZ21paV9jb25maWcodm9pZCBfX2lvbWVtICpzZ21paV9vZnMsIGludCBwb3J0LCB1MzIgaW50ZXJmYWNlKTsKKworLyogWEdCRSBTRVJERVMgaW5pdCBmdW5jdGlvbnMgKi8KK2ludCBuZXRjcF94Z2JlX3NlcmRlc19pbml0KHZvaWQgX19pb21lbSAqc2VyZGVzX3JlZ3MsIHZvaWQgX19pb21lbSAqeGdiZV9yZWdzKTsKKworI2VuZGlmCS8qIF9fTkVUQ1BfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9uZXRjcF9jb3JlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9uZXRjcF9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMxYThjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL25ldGNwX2NvcmUuYwpAQCAtMCwwICsxLDIxNDkgQEAKKy8qCisgKiBLZXlzdG9uZSBOZXRDUCBDb3JlIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUZXhhcyBJbnN0cnVtZW50cyBJbmNvcnBvcmF0ZWQKKyAqIEF1dGhvcnM6CVNhbmRlZXAgTmFpciA8c2FuZGVlcF9uQHRpLmNvbT4KKyAqCQlTYW5kZWVwIFBhdWxyYWogPHMtcGF1bHJhakB0aS5jb20+CisgKgkJQ3lyaWwgQ2hlbXBhcmF0aHkgPGN5cmlsQHRpLmNvbT4KKyAqCQlTYW50b3NoIFNoaWxpbWthciA8c2FudG9zaC5zaGlsaW1rYXJAdGkuY29tPgorICoJCU11cmFsaSBLYXJpY2hlcmkgPG0ta2FyaWNoZXJpMkB0aS5jb20+CisgKgkJV2luZ21hbiBLd29rIDx3LWt3b2syQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gdmVyc2lvbiAyLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCAiYXMgaXMiIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQ7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorICogb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2MvdGkva25hdl9xbXNzLmg+CisjaW5jbHVkZSA8bGludXgvc29jL3RpL2tuYXZfZG1hLmg+CisKKyNpbmNsdWRlICJuZXRjcC5oIgorCisjZGVmaW5lIE5FVENQX1NPUF9PRkZTRVQJKE5FVF9JUF9BTElHTiArIE5FVF9TS0JfUEFEKQorI2RlZmluZSBORVRDUF9OQVBJX1dFSUdIVAk2NAorI2RlZmluZSBORVRDUF9UWF9USU1FT1VUCSg1ICogSFopCisjZGVmaW5lIE5FVENQX01JTl9QQUNLRVRfU0laRQlFVEhfWkxFTgorI2RlZmluZSBORVRDUF9NQVhfTUNBU1RfQUREUgkxNgorCisjZGVmaW5lIE5FVENQX0VGVVNFX1JFR19JTkRFWAkwCisKKyNkZWZpbmUgTkVUQ1BfTU9EX1BST0JFX1NLSVBQRUQJMQorI2RlZmluZSBORVRDUF9NT0RfUFJPQkVfRkFJTEVECTIKKworI2RlZmluZSBORVRDUF9ERUJVRyAoTkVUSUZfTVNHX0hXCXwgTkVUSUZfTVNHX1dPTAkJfAlcCisJCSAgICBORVRJRl9NU0dfRFJWCXwgTkVUSUZfTVNHX0xJTksJfAlcCisJCSAgICBORVRJRl9NU0dfSUZVUAl8IE5FVElGX01TR19JTlRSCXwJXAorCQkgICAgTkVUSUZfTVNHX1BST0JFCXwgTkVUSUZfTVNHX1RJTUVSCXwJXAorCQkgICAgTkVUSUZfTVNHX0lGRE9XTgl8IE5FVElGX01TR19SWF9FUlIJfAlcCisJCSAgICBORVRJRl9NU0dfVFhfRVJSCXwgTkVUSUZfTVNHX1RYX0RPTkUJfAlcCisJCSAgICBORVRJRl9NU0dfUEtUREFUQQl8IE5FVElGX01TR19UWF9RVUVVRUQJfAlcCisJCSAgICBORVRJRl9NU0dfUlhfU1RBVFVTKQorCisjZGVmaW5lIGtuYXZfcXVldWVfZ2V0X2lkKHEpCWtuYXZfcXVldWVfZGV2aWNlX2NvbnRyb2wocSwgXAorCQkJCUtOQVZfUVVFVUVfR0VUX0lELCAodW5zaWduZWQgbG9uZylOVUxMKQorCisjZGVmaW5lIGtuYXZfcXVldWVfZW5hYmxlX25vdGlmeShxKSBrbmF2X3F1ZXVlX2RldmljZV9jb250cm9sKHEsCVwKKwkJCQkJS05BVl9RVUVVRV9FTkFCTEVfTk9USUZZLAlcCisJCQkJCSh1bnNpZ25lZCBsb25nKU5VTEwpCisKKyNkZWZpbmUga25hdl9xdWV1ZV9kaXNhYmxlX25vdGlmeShxKSBrbmF2X3F1ZXVlX2RldmljZV9jb250cm9sKHEsCVwKKwkJCQkJS05BVl9RVUVVRV9ESVNBQkxFX05PVElGWSwJXAorCQkJCQkodW5zaWduZWQgbG9uZylOVUxMKQorCisjZGVmaW5lIGtuYXZfcXVldWVfZ2V0X2NvdW50KHEpCWtuYXZfcXVldWVfZGV2aWNlX2NvbnRyb2wocSwgXAorCQkJCUtOQVZfUVVFVUVfR0VUX0NPVU5ULCAodW5zaWduZWQgbG9uZylOVUxMKQorCisjZGVmaW5lIGZvcl9lYWNoX25ldGNwX21vZHVsZShtb2R1bGUpCQkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kdWxlLCAmbmV0Y3BfbW9kdWxlcywgbW9kdWxlX2xpc3QpCisKKyNkZWZpbmUgZm9yX2VhY2hfbmV0Y3BfZGV2aWNlX21vZHVsZShuZXRjcF9kZXZpY2UsIGluc3RfbW9kcHJpdikgXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5zdF9tb2Rwcml2LCBcCisJCSYoKG5ldGNwX2RldmljZSktPm1vZHByaXZfaGVhZCksIGluc3RfbGlzdCkKKworI2RlZmluZSBmb3JfZWFjaF9tb2R1bGUobmV0Y3AsIGludGZfbW9kcHJpdikJCQlcCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnRmX21vZHByaXYsICZuZXRjcC0+bW9kdWxlX2hlYWQsIGludGZfbGlzdCkKKworLyogTW9kdWxlIG1hbmFnZW1lbnQgc3RydWN0dXJlcyAqLworc3RydWN0IG5ldGNwX2RldmljZSB7CisJc3RydWN0IGxpc3RfaGVhZAlkZXZpY2VfbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWludGVyZmFjZV9oZWFkOworCXN0cnVjdCBsaXN0X2hlYWQJbW9kcHJpdl9oZWFkOworCXN0cnVjdCBkZXZpY2UJCSpkZXZpY2U7Cit9OworCitzdHJ1Y3QgbmV0Y3BfaW5zdF9tb2Rwcml2IHsKKwlzdHJ1Y3QgbmV0Y3BfZGV2aWNlCSpuZXRjcF9kZXZpY2U7CisJc3RydWN0IG5ldGNwX21vZHVsZQkqbmV0Y3BfbW9kdWxlOworCXN0cnVjdCBsaXN0X2hlYWQJaW5zdF9saXN0OworCXZvaWQJCQkqbW9kdWxlX3ByaXY7Cit9OworCitzdHJ1Y3QgbmV0Y3BfaW50Zl9tb2Rwcml2IHsKKwlzdHJ1Y3QgbmV0Y3BfaW50ZgkqbmV0Y3BfcHJpdjsKKwlzdHJ1Y3QgbmV0Y3BfbW9kdWxlCSpuZXRjcF9tb2R1bGU7CisJc3RydWN0IGxpc3RfaGVhZAlpbnRmX2xpc3Q7CisJdm9pZAkJCSptb2R1bGVfcHJpdjsKK307CisKK3N0YXRpYyBMSVNUX0hFQUQobmV0Y3BfZGV2aWNlcyk7CitzdGF0aWMgTElTVF9IRUFEKG5ldGNwX21vZHVsZXMpOworc3RhdGljIERFRklORV9NVVRFWChuZXRjcF9tb2R1bGVzX2xvY2spOworCitzdGF0aWMgaW50IG5ldGNwX2RlYnVnX2xldmVsID0gLTE7Cittb2R1bGVfcGFyYW0obmV0Y3BfZGVidWdfbGV2ZWwsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG5ldGNwX2RlYnVnX2xldmVsLCAiTmV0Y3AgZGVidWcgbGV2ZWwgKE5FVElGX01TRyBiaXRzKSAoMD1ub25lLC4uLiwxNj1hbGwpIik7CisKKy8qIEhlbHBlciBmdW5jdGlvbnMgLSBHZXQvU2V0ICovCitzdGF0aWMgdm9pZCBnZXRfcGt0X2luZm8odTMyICpidWZmLCB1MzIgKmJ1ZmZfbGVuLCB1MzIgKm5kZXNjLAorCQkJIHN0cnVjdCBrbmF2X2RtYV9kZXNjICpkZXNjKQoreworCSpidWZmX2xlbiA9IGRlc2MtPmJ1ZmZfbGVuOworCSpidWZmID0gZGVzYy0+YnVmZjsKKwkqbmRlc2MgPSBkZXNjLT5uZXh0X2Rlc2M7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9wYWRfaW5mbyh1MzIgKnBhZDAsIHUzMiAqcGFkMSwgc3RydWN0IGtuYXZfZG1hX2Rlc2MgKmRlc2MpCit7CisJKnBhZDAgPSBkZXNjLT5wYWRbMF07CisJKnBhZDEgPSBkZXNjLT5wYWRbMV07Cit9CisKK3N0YXRpYyB2b2lkIGdldF9vcmdfcGt0X2luZm8odTMyICpidWZmLCB1MzIgKmJ1ZmZfbGVuLAorCQkJICAgICBzdHJ1Y3Qga25hdl9kbWFfZGVzYyAqZGVzYykKK3sKKwkqYnVmZiA9IGRlc2MtPm9yaWdfYnVmZjsKKwkqYnVmZl9sZW4gPSBkZXNjLT5vcmlnX2xlbjsKK30KKworc3RhdGljIHZvaWQgZ2V0X3dvcmRzKHUzMiAqd29yZHMsIGludCBudW1fd29yZHMsIHUzMiAqZGVzYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fd29yZHM7IGkrKykKKwkJd29yZHNbaV0gPSBkZXNjW2ldOworfQorCitzdGF0aWMgdm9pZCBzZXRfcGt0X2luZm8odTMyIGJ1ZmYsIHUzMiBidWZmX2xlbiwgdTMyIG5kZXNjLAorCQkJIHN0cnVjdCBrbmF2X2RtYV9kZXNjICpkZXNjKQoreworCWRlc2MtPmJ1ZmZfbGVuID0gYnVmZl9sZW47CisJZGVzYy0+YnVmZiA9IGJ1ZmY7CisJZGVzYy0+bmV4dF9kZXNjID0gbmRlc2M7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9kZXNjX2luZm8odTMyIGRlc2NfaW5mbywgdTMyIHBrdF9pbmZvLAorCQkJICBzdHJ1Y3Qga25hdl9kbWFfZGVzYyAqZGVzYykKK3sKKwlkZXNjLT5kZXNjX2luZm8gPSBkZXNjX2luZm87CisJZGVzYy0+cGFja2V0X2luZm8gPSBwa3RfaW5mbzsKK30KKworc3RhdGljIHZvaWQgc2V0X3BhZF9pbmZvKHUzMiBwYWQwLCB1MzIgcGFkMSwgc3RydWN0IGtuYXZfZG1hX2Rlc2MgKmRlc2MpCit7CisJZGVzYy0+cGFkWzBdID0gcGFkMDsKKwlkZXNjLT5wYWRbMV0gPSBwYWQxOworfQorCitzdGF0aWMgdm9pZCBzZXRfb3JnX3BrdF9pbmZvKHUzMiBidWZmLCB1MzIgYnVmZl9sZW4sCisJCQkgICAgIHN0cnVjdCBrbmF2X2RtYV9kZXNjICpkZXNjKQoreworCWRlc2MtPm9yaWdfYnVmZiA9IGJ1ZmY7CisJZGVzYy0+b3JpZ19sZW4gPSBidWZmX2xlbjsKK30KKworc3RhdGljIHZvaWQgc2V0X3dvcmRzKHUzMiAqd29yZHMsIGludCBudW1fd29yZHMsIHUzMiAqZGVzYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fd29yZHM7IGkrKykKKwkJZGVzY1tpXSA9IHdvcmRzW2ldOworfQorCisvKiBSZWFkIHRoZSBlLWZ1c2UgdmFsdWUgYXMgMzIgYml0IHZhbHVlcyB0byBiZSBlbmRpYW4gaW5kZXBlbmRlbnQgKi8KK3N0YXRpYyBpbnQgZW1hY19hcmNoX2dldF9tYWNfYWRkcihjaGFyICp4LCB2b2lkIF9faW9tZW0gKmVmdXNlX21hYykKK3sKKwl1bnNpZ25lZCBpbnQgYWRkcjAsIGFkZHIxOworCisJYWRkcjEgPSByZWFkbChlZnVzZV9tYWMgKyA0KTsKKwlhZGRyMCA9IHJlYWRsKGVmdXNlX21hYyk7CisKKwl4WzBdID0gKGFkZHIxICYgMHgwMDAwZmYwMCkgPj4gODsKKwl4WzFdID0gYWRkcjEgJiAweDAwMDAwMGZmOworCXhbMl0gPSAoYWRkcjAgJiAweGZmMDAwMDAwKSA+PiAyNDsKKwl4WzNdID0gKGFkZHIwICYgMHgwMGZmMDAwMCkgPj4gMTY7CisJeFs0XSA9IChhZGRyMCAmIDB4MDAwMGZmMDApID4+IDg7CisJeFs1XSA9IGFkZHIwICYgMHgwMDAwMDBmZjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqbmV0Y3Bfbm9kZV9uYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwljb25zdCBjaGFyICpuYW1lOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5vZGUsICJsYWJlbCIsICZuYW1lKSA8IDApCisJCW5hbWUgPSBub2RlLT5uYW1lOworCWlmICghbmFtZSkKKwkJbmFtZSA9ICJ1bmtub3duIjsKKwlyZXR1cm4gbmFtZTsKK30KKworLyogTW9kdWxlIG1hbmFnZW1lbnQgcm91dGluZXMgKi8KK3N0YXRpYyBpbnQgbmV0Y3BfcmVnaXN0ZXJfaW50ZXJmYWNlKHN0cnVjdCBuZXRjcF9pbnRmICpuZXRjcCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGNwLT5uZGV2KTsKKwlpZiAoIXJldCkKKwkJbmV0Y3AtPm5ldGRldl9yZWdpc3RlcmVkID0gdHJ1ZTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG5ldGNwX21vZHVsZV9wcm9iZShzdHJ1Y3QgbmV0Y3BfZGV2aWNlICpuZXRjcF9kZXZpY2UsCisJCQkgICAgICBzdHJ1Y3QgbmV0Y3BfbW9kdWxlICptb2R1bGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gbmV0Y3BfZGV2aWNlLT5kZXZpY2U7CisJc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2VzLCAqaW50ZXJmYWNlLCAqbm9kZSA9IGRldi0+b2Zfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOworCXN0cnVjdCBuZXRjcF9pbnN0X21vZHByaXYgKmluc3RfbW9kcHJpdjsKKwlzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3BfaW50ZjsKKwlzdHJ1Y3QgbmV0Y3BfbW9kdWxlICp0bXA7CisJYm9vbCBwcmltYXJ5X21vZHVsZV9yZWdpc3RlcmVkID0gZmFsc2U7CisJaW50IHJldDsKKworCS8qIEZpbmQgdGhpcyBtb2R1bGUgaW4gdGhlIHN1Yi10cmVlIGZvciB0aGlzIGRldmljZSAqLworCWRldmljZXMgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShub2RlLCAibmV0Y3AtZGV2aWNlcyIpOworCWlmICghZGV2aWNlcykgeworCQlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBmaW5kIG5ldGNwLWRldmljZXMgbm9kZVxuIik7CisJCXJldHVybiBORVRDUF9NT0RfUFJPQkVfU0tJUFBFRDsKKwl9CisKKwlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShkZXZpY2VzLCBjaGlsZCkgeworCQljb25zdCBjaGFyICpuYW1lID0gbmV0Y3Bfbm9kZV9uYW1lKGNoaWxkKTsKKworCQlpZiAoIXN0cmNhc2VjbXAobW9kdWxlLT5uYW1lLCBuYW1lKSkKKwkJCWJyZWFrOworCX0KKworCW9mX25vZGVfcHV0KGRldmljZXMpOworCS8qIElmIG1vZHVsZSBub3QgdXNlZCBmb3IgdGhpcyBkZXZpY2UsIHNraXAgaXQgKi8KKwlpZiAoIWNoaWxkKSB7CisJCWRldl93YXJuKGRldiwgIm1vZHVsZSglcykgbm90IHVzZWQgZm9yIGRldmljZVxuIiwgbW9kdWxlLT5uYW1lKTsKKwkJcmV0dXJuIE5FVENQX01PRF9QUk9CRV9TS0lQUEVEOworCX0KKworCWluc3RfbW9kcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaW5zdF9tb2Rwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbnN0X21vZHByaXYpIHsKKwkJb2Zfbm9kZV9wdXQoY2hpbGQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpbnN0X21vZHByaXYtPm5ldGNwX2RldmljZSA9IG5ldGNwX2RldmljZTsKKwlpbnN0X21vZHByaXYtPm5ldGNwX21vZHVsZSA9IG1vZHVsZTsKKwlsaXN0X2FkZF90YWlsKCZpbnN0X21vZHByaXYtPmluc3RfbGlzdCwgJm5ldGNwX2RldmljZS0+bW9kcHJpdl9oZWFkKTsKKworCXJldCA9IG1vZHVsZS0+cHJvYmUobmV0Y3BfZGV2aWNlLCBkZXYsIGNoaWxkLAorCQkJICAgICZpbnN0X21vZHByaXYtPm1vZHVsZV9wcml2KTsKKwlvZl9ub2RlX3B1dChjaGlsZCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIlByb2JlIG9mIG1vZHVsZSglcykgZmFpbGVkIHdpdGggJWRcbiIsCisJCQltb2R1bGUtPm5hbWUsIHJldCk7CisJCWxpc3RfZGVsKCZpbnN0X21vZHByaXYtPmluc3RfbGlzdCk7CisJCWRldm1fa2ZyZWUoZGV2LCBpbnN0X21vZHByaXYpOworCQlyZXR1cm4gTkVUQ1BfTU9EX1BST0JFX0ZBSUxFRDsKKwl9CisKKwkvKiBBdHRhY2ggbW9kdWxlcyBvbmx5IGlmIHRoZSBwcmltYXJ5IG1vZHVsZSBpcyBwcm9iZWQgKi8KKwlmb3JfZWFjaF9uZXRjcF9tb2R1bGUodG1wKSB7CisJCWlmICh0bXAtPnByaW1hcnkpCisJCQlwcmltYXJ5X21vZHVsZV9yZWdpc3RlcmVkID0gdHJ1ZTsKKwl9CisKKwlpZiAoIXByaW1hcnlfbW9kdWxlX3JlZ2lzdGVyZWQpCisJCXJldHVybiAwOworCisJLyogQXR0YWNoIG1vZHVsZSB0byBpbnRlcmZhY2VzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXRjcF9pbnRmLCAmbmV0Y3BfZGV2aWNlLT5pbnRlcmZhY2VfaGVhZCwKKwkJCSAgICBpbnRlcmZhY2VfbGlzdCkgeworCQlzdHJ1Y3QgbmV0Y3BfaW50Zl9tb2Rwcml2ICppbnRmX21vZHByaXY7CisKKwkJLyogSWYgaW50ZXJmYWNlIG5vdCByZWdpc3RlcmVkIHRoZW4gcmVnaXN0ZXIgbm93ICovCisJCWlmICghbmV0Y3BfaW50Zi0+bmV0ZGV2X3JlZ2lzdGVyZWQpCisJCQlyZXQgPSBuZXRjcF9yZWdpc3Rlcl9pbnRlcmZhY2UobmV0Y3BfaW50Zik7CisKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtRU5PREVWOworCisJCWludGZfbW9kcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqaW50Zl9tb2Rwcml2KSwKKwkJCQkJICAgIEdGUF9LRVJORUwpOworCQlpZiAoIWludGZfbW9kcHJpdikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWludGVyZmFjZSA9IG9mX3BhcnNlX3BoYW5kbGUobmV0Y3BfaW50Zi0+bm9kZV9pbnRlcmZhY2UsCisJCQkJCSAgICAgbW9kdWxlLT5uYW1lLCAwKTsKKworCQlpbnRmX21vZHByaXYtPm5ldGNwX3ByaXYgPSBuZXRjcF9pbnRmOworCQlpbnRmX21vZHByaXYtPm5ldGNwX21vZHVsZSA9IG1vZHVsZTsKKwkJbGlzdF9hZGRfdGFpbCgmaW50Zl9tb2Rwcml2LT5pbnRmX2xpc3QsCisJCQkgICAgICAmbmV0Y3BfaW50Zi0+bW9kdWxlX2hlYWQpOworCisJCXJldCA9IG1vZHVsZS0+YXR0YWNoKGluc3RfbW9kcHJpdi0+bW9kdWxlX3ByaXYsCisJCQkJICAgICBuZXRjcF9pbnRmLT5uZGV2LCBpbnRlcmZhY2UsCisJCQkJICAgICAmaW50Zl9tb2Rwcml2LT5tb2R1bGVfcHJpdik7CisJCW9mX25vZGVfcHV0KGludGVyZmFjZSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9kYmcoZGV2LCAiQXR0YWNoIG9mIG1vZHVsZSAlcyBkZWNsaW5lZCB3aXRoICVkXG4iLAorCQkJCW1vZHVsZS0+bmFtZSwgcmV0KTsKKwkJCWxpc3RfZGVsKCZpbnRmX21vZHByaXYtPmludGZfbGlzdCk7CisJCQlkZXZtX2tmcmVlKGRldiwgaW50Zl9tb2Rwcml2KTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCXJldHVybiAwOworfQorCitpbnQgbmV0Y3BfcmVnaXN0ZXJfbW9kdWxlKHN0cnVjdCBuZXRjcF9tb2R1bGUgKm1vZHVsZSkKK3sKKwlzdHJ1Y3QgbmV0Y3BfZGV2aWNlICpuZXRjcF9kZXZpY2U7CisJc3RydWN0IG5ldGNwX21vZHVsZSAqdG1wOworCWludCByZXQ7CisKKwlpZiAoIW1vZHVsZS0+bmFtZSkgeworCQlXQVJOKDEsICJlcnJvciByZWdpc3RlcmluZyBuZXRjcCBtb2R1bGU6IG5vIG5hbWVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIW1vZHVsZS0+cHJvYmUpIHsKKwkJV0FSTigxLCAiZXJyb3IgcmVnaXN0ZXJpbmcgbmV0Y3AgbW9kdWxlOiBubyBwcm9iZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJm5ldGNwX21vZHVsZXNfbG9jayk7CisKKwlmb3JfZWFjaF9uZXRjcF9tb2R1bGUodG1wKSB7CisJCWlmICghc3RyY2FzZWNtcCh0bXAtPm5hbWUsIG1vZHVsZS0+bmFtZSkpIHsKKwkJCW11dGV4X3VubG9jaygmbmV0Y3BfbW9kdWxlc19sb2NrKTsKKwkJCXJldHVybiAtRUVYSVNUOworCQl9CisJfQorCWxpc3RfYWRkX3RhaWwoJm1vZHVsZS0+bW9kdWxlX2xpc3QsICZuZXRjcF9tb2R1bGVzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobmV0Y3BfZGV2aWNlLCAmbmV0Y3BfZGV2aWNlcywgZGV2aWNlX2xpc3QpIHsKKwkJcmV0ID0gbmV0Y3BfbW9kdWxlX3Byb2JlKG5ldGNwX2RldmljZSwgbW9kdWxlKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWw7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZuZXRjcF9tb2R1bGVzX2xvY2spOworCXJldHVybiAwOworCitmYWlsOgorCW11dGV4X3VubG9jaygmbmV0Y3BfbW9kdWxlc19sb2NrKTsKKwluZXRjcF91bnJlZ2lzdGVyX21vZHVsZShtb2R1bGUpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZXRjcF9yZWdpc3Rlcl9tb2R1bGUpOworCitzdGF0aWMgdm9pZCBuZXRjcF9yZWxlYXNlX21vZHVsZShzdHJ1Y3QgbmV0Y3BfZGV2aWNlICpuZXRjcF9kZXZpY2UsCisJCQkJIHN0cnVjdCBuZXRjcF9tb2R1bGUgKm1vZHVsZSkKK3sKKwlzdHJ1Y3QgbmV0Y3BfaW5zdF9tb2Rwcml2ICppbnN0X21vZHByaXYsICppbnN0X3RtcDsKKwlzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3BfaW50ZiwgKm5ldGNwX3RtcDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBuZXRjcF9kZXZpY2UtPmRldmljZTsKKworCS8qIFJlbGVhc2UgdGhlIG1vZHVsZSBmcm9tIGVhY2ggaW50ZXJmYWNlICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5ldGNwX2ludGYsIG5ldGNwX3RtcCwKKwkJCQkgJm5ldGNwX2RldmljZS0+aW50ZXJmYWNlX2hlYWQsCisJCQkJIGludGVyZmFjZV9saXN0KSB7CisJCXN0cnVjdCBuZXRjcF9pbnRmX21vZHByaXYgKmludGZfbW9kcHJpdiwgKmludGZfdG1wOworCisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbnRmX21vZHByaXYsIGludGZfdG1wLAorCQkJCQkgJm5ldGNwX2ludGYtPm1vZHVsZV9oZWFkLAorCQkJCQkgaW50Zl9saXN0KSB7CisJCQlpZiAoaW50Zl9tb2Rwcml2LT5uZXRjcF9tb2R1bGUgPT0gbW9kdWxlKSB7CisJCQkJbW9kdWxlLT5yZWxlYXNlKGludGZfbW9kcHJpdi0+bW9kdWxlX3ByaXYpOworCQkJCWxpc3RfZGVsKCZpbnRmX21vZHByaXYtPmludGZfbGlzdCk7CisJCQkJZGV2bV9rZnJlZShkZXYsIGludGZfbW9kcHJpdik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiBSZW1vdmUgdGhlIG1vZHVsZSBmcm9tIGVhY2ggaW5zdGFuY2UgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW5zdF9tb2Rwcml2LCBpbnN0X3RtcCwKKwkJCQkgJm5ldGNwX2RldmljZS0+bW9kcHJpdl9oZWFkLCBpbnN0X2xpc3QpIHsKKwkJaWYgKGluc3RfbW9kcHJpdi0+bmV0Y3BfbW9kdWxlID09IG1vZHVsZSkgeworCQkJbW9kdWxlLT5yZW1vdmUobmV0Y3BfZGV2aWNlLAorCQkJCSAgICAgICBpbnN0X21vZHByaXYtPm1vZHVsZV9wcml2KTsKKwkJCWxpc3RfZGVsKCZpbnN0X21vZHByaXYtPmluc3RfbGlzdCk7CisJCQlkZXZtX2tmcmVlKGRldiwgaW5zdF9tb2Rwcml2KTsKKwkJCWJyZWFrOworCQl9CisJfQorfQorCit2b2lkIG5ldGNwX3VucmVnaXN0ZXJfbW9kdWxlKHN0cnVjdCBuZXRjcF9tb2R1bGUgKm1vZHVsZSkKK3sKKwlzdHJ1Y3QgbmV0Y3BfZGV2aWNlICpuZXRjcF9kZXZpY2U7CisJc3RydWN0IG5ldGNwX21vZHVsZSAqbW9kdWxlX3RtcDsKKworCW11dGV4X2xvY2soJm5ldGNwX21vZHVsZXNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5ldGNwX2RldmljZSwgJm5ldGNwX2RldmljZXMsIGRldmljZV9saXN0KSB7CisJCW5ldGNwX3JlbGVhc2VfbW9kdWxlKG5ldGNwX2RldmljZSwgbW9kdWxlKTsKKwl9CisKKwkvKiBSZW1vdmUgdGhlIG1vZHVsZSBmcm9tIHRoZSBtb2R1bGUgbGlzdCAqLworCWZvcl9lYWNoX25ldGNwX21vZHVsZShtb2R1bGVfdG1wKSB7CisJCWlmIChtb2R1bGUgPT0gbW9kdWxlX3RtcCkgeworCQkJbGlzdF9kZWwoJm1vZHVsZS0+bW9kdWxlX2xpc3QpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJm5ldGNwX21vZHVsZXNfbG9jayk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZXRjcF91bnJlZ2lzdGVyX21vZHVsZSk7CisKK3ZvaWQgKm5ldGNwX21vZHVsZV9nZXRfaW50Zl9kYXRhKHN0cnVjdCBuZXRjcF9tb2R1bGUgKm1vZHVsZSwKKwkJCQkgc3RydWN0IG5ldGNwX2ludGYgKmludGYpCit7CisJc3RydWN0IG5ldGNwX2ludGZfbW9kcHJpdiAqaW50Zl9tb2Rwcml2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbnRmX21vZHByaXYsICZpbnRmLT5tb2R1bGVfaGVhZCwgaW50Zl9saXN0KQorCQlpZiAoaW50Zl9tb2Rwcml2LT5uZXRjcF9tb2R1bGUgPT0gbW9kdWxlKQorCQkJcmV0dXJuIGludGZfbW9kcHJpdi0+bW9kdWxlX3ByaXY7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZXRjcF9tb2R1bGVfZ2V0X2ludGZfZGF0YSk7CisKKy8qIE1vZHVsZSBUWCBhbmQgUlggSG9vayBtYW5hZ2VtZW50ICovCitzdHJ1Y3QgbmV0Y3BfaG9va19saXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSBsaXN0OworCW5ldGNwX2hvb2tfcnRuCQkqaG9va19ydG47CisJdm9pZAkJCSpob29rX2RhdGE7CisJaW50CQkJIG9yZGVyOworfTsKKworaW50IG5ldGNwX3JlZ2lzdGVyX3R4aG9vayhzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3BfcHJpdiwgaW50IG9yZGVyLAorCQkJICBuZXRjcF9ob29rX3J0biAqaG9va19ydG4sIHZvaWQgKmhvb2tfZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0Y3BfaG9va19saXN0ICplbnRyeTsKKwlzdHJ1Y3QgbmV0Y3BfaG9va19saXN0ICpuZXh0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwllbnRyeSA9IGRldm1fa3phbGxvYyhuZXRjcF9wcml2LT5kZXYsIHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVudHJ5LT5ob29rX3J0biAgPSBob29rX3J0bjsKKwllbnRyeS0+aG9va19kYXRhID0gaG9va19kYXRhOworCWVudHJ5LT5vcmRlciAgICAgPSBvcmRlcjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZuZXRjcF9wcml2LT5sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShuZXh0LCAmbmV0Y3BfcHJpdi0+dHhob29rX2xpc3RfaGVhZCwgbGlzdCkgeworCQlpZiAobmV4dC0+b3JkZXIgPiBvcmRlcikKKwkJCWJyZWFrOworCX0KKwlfX2xpc3RfYWRkKCZlbnRyeS0+bGlzdCwgbmV4dC0+bGlzdC5wcmV2LCAmbmV4dC0+bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmV0Y3BfcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZXRjcF9yZWdpc3Rlcl90eGhvb2spOworCitpbnQgbmV0Y3BfdW5yZWdpc3Rlcl90eGhvb2soc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwX3ByaXYsIGludCBvcmRlciwKKwkJCSAgICBuZXRjcF9ob29rX3J0biAqaG9va19ydG4sIHZvaWQgKmhvb2tfZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0Y3BfaG9va19saXN0ICpuZXh0LCAqbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5ldGNwX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV4dCwgbiwgJm5ldGNwX3ByaXYtPnR4aG9va19saXN0X2hlYWQsIGxpc3QpIHsKKwkJaWYgKChuZXh0LT5vcmRlciAgICAgPT0gb3JkZXIpICYmCisJCSAgICAobmV4dC0+aG9va19ydG4gID09IGhvb2tfcnRuKSAmJgorCQkgICAgKG5leHQtPmhvb2tfZGF0YSA9PSBob29rX2RhdGEpKSB7CisJCQlsaXN0X2RlbCgmbmV4dC0+bGlzdCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXRjcF9wcml2LT5sb2NrLCBmbGFncyk7CisJCQlkZXZtX2tmcmVlKG5ldGNwX3ByaXYtPmRldiwgbmV4dCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXRjcF9wcml2LT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIC1FTk9FTlQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZXRjcF91bnJlZ2lzdGVyX3R4aG9vayk7CisKK2ludCBuZXRjcF9yZWdpc3Rlcl9yeGhvb2soc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwX3ByaXYsIGludCBvcmRlciwKKwkJCSAgbmV0Y3BfaG9va19ydG4gKmhvb2tfcnRuLCB2b2lkICpob29rX2RhdGEpCit7CisJc3RydWN0IG5ldGNwX2hvb2tfbGlzdCAqZW50cnk7CisJc3RydWN0IG5ldGNwX2hvb2tfbGlzdCAqbmV4dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZW50cnkgPSBkZXZtX2t6YWxsb2MobmV0Y3BfcHJpdi0+ZGV2LCBzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllbnRyeS0+aG9va19ydG4gID0gaG9va19ydG47CisJZW50cnktPmhvb2tfZGF0YSA9IGhvb2tfZGF0YTsKKwllbnRyeS0+b3JkZXIgICAgID0gb3JkZXI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbmV0Y3BfcHJpdi0+bG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkobmV4dCwgJm5ldGNwX3ByaXYtPnJ4aG9va19saXN0X2hlYWQsIGxpc3QpIHsKKwkJaWYgKG5leHQtPm9yZGVyID4gb3JkZXIpCisJCQlicmVhazsKKwl9CisJX19saXN0X2FkZCgmZW50cnktPmxpc3QsIG5leHQtPmxpc3QucHJldiwgJm5leHQtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5ldGNwX3ByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitpbnQgbmV0Y3BfdW5yZWdpc3Rlcl9yeGhvb2soc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwX3ByaXYsIGludCBvcmRlciwKKwkJCSAgICBuZXRjcF9ob29rX3J0biAqaG9va19ydG4sIHZvaWQgKmhvb2tfZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0Y3BfaG9va19saXN0ICpuZXh0LCAqbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5ldGNwX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmV4dCwgbiwgJm5ldGNwX3ByaXYtPnJ4aG9va19saXN0X2hlYWQsIGxpc3QpIHsKKwkJaWYgKChuZXh0LT5vcmRlciAgICAgPT0gb3JkZXIpICYmCisJCSAgICAobmV4dC0+aG9va19ydG4gID09IGhvb2tfcnRuKSAmJgorCQkgICAgKG5leHQtPmhvb2tfZGF0YSA9PSBob29rX2RhdGEpKSB7CisJCQlsaXN0X2RlbCgmbmV4dC0+bGlzdCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXRjcF9wcml2LT5sb2NrLCBmbGFncyk7CisJCQlkZXZtX2tmcmVlKG5ldGNwX3ByaXYtPmRldiwgbmV4dCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXRjcF9wcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworc3RhdGljIHZvaWQgbmV0Y3BfZnJhZ19mcmVlKGJvb2wgaXNfZnJhZywgdm9pZCAqcHRyKQoreworCWlmIChpc19mcmFnKQorCQlwdXRfcGFnZSh2aXJ0X3RvX2hlYWRfcGFnZShwdHIpKTsKKwllbHNlCisJCWtmcmVlKHB0cik7Cit9CisKK3N0YXRpYyB2b2lkIG5ldGNwX2ZyZWVfcnhfZGVzY19jaGFpbihzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AsCisJCQkJICAgICBzdHJ1Y3Qga25hdl9kbWFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3Qga25hdl9kbWFfZGVzYyAqbmRlc2M7CisJZG1hX2FkZHJfdCBkbWFfZGVzYywgZG1hX2J1ZjsKKwl1bnNpZ25lZCBpbnQgYnVmX2xlbiwgZG1hX3N6ID0gc2l6ZW9mKCpuZGVzYyk7CisJdm9pZCAqYnVmX3B0cjsKKwl1MzIgdG1wOworCisJZ2V0X3dvcmRzKCZkbWFfZGVzYywgMSwgJmRlc2MtPm5leHRfZGVzYyk7CisKKwl3aGlsZSAoZG1hX2Rlc2MpIHsKKwkJbmRlc2MgPSBrbmF2X3Bvb2xfZGVzY191bm1hcChuZXRjcC0+cnhfcG9vbCwgZG1hX2Rlc2MsIGRtYV9zeik7CisJCWlmICh1bmxpa2VseSghbmRlc2MpKSB7CisJCQlkZXZfZXJyKG5ldGNwLT5uZGV2X2RldiwgImZhaWxlZCB0byB1bm1hcCBSeCBkZXNjXG4iKTsKKwkJCWJyZWFrOworCQl9CisJCWdldF9wa3RfaW5mbygmZG1hX2J1ZiwgJnRtcCwgJmRtYV9kZXNjLCBuZGVzYyk7CisJCWdldF9wYWRfaW5mbygodTMyICopJmJ1Zl9wdHIsICZ0bXAsIG5kZXNjKTsKKwkJZG1hX3VubWFwX3BhZ2UobmV0Y3AtPmRldiwgZG1hX2J1ZiwgUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCQlfX2ZyZWVfcGFnZShidWZfcHRyKTsKKwkJa25hdl9wb29sX2Rlc2NfcHV0KG5ldGNwLT5yeF9wb29sLCBkZXNjKTsKKwl9CisKKwlnZXRfcGFkX2luZm8oKHUzMiAqKSZidWZfcHRyLCAmYnVmX2xlbiwgZGVzYyk7CisJaWYgKGJ1Zl9wdHIpCisJCW5ldGNwX2ZyYWdfZnJlZShidWZfbGVuIDw9IFBBR0VfU0laRSwgYnVmX3B0cik7CisJa25hdl9wb29sX2Rlc2NfcHV0KG5ldGNwLT5yeF9wb29sLCBkZXNjKTsKK30KKworc3RhdGljIHZvaWQgbmV0Y3BfZW1wdHlfcnhfcXVldWUoc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwKQoreworCXN0cnVjdCBrbmF2X2RtYV9kZXNjICpkZXNjOworCXVuc2lnbmVkIGludCBkbWFfc3o7CisJZG1hX2FkZHJfdCBkbWE7CisKKwlmb3IgKDsgOykgeworCQlkbWEgPSBrbmF2X3F1ZXVlX3BvcChuZXRjcC0+cnhfcXVldWUsICZkbWFfc3opOworCQlpZiAoIWRtYSkKKwkJCWJyZWFrOworCisJCWRlc2MgPSBrbmF2X3Bvb2xfZGVzY191bm1hcChuZXRjcC0+cnhfcG9vbCwgZG1hLCBkbWFfc3opOworCQlpZiAodW5saWtlbHkoIWRlc2MpKSB7CisJCQlkZXZfZXJyKG5ldGNwLT5uZGV2X2RldiwgIiVzOiBmYWlsZWQgdG8gdW5tYXAgUnggZGVzY1xuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQluZXRjcC0+bmRldi0+c3RhdHMucnhfZXJyb3JzKys7CisJCQljb250aW51ZTsKKwkJfQorCQluZXRjcF9mcmVlX3J4X2Rlc2NfY2hhaW4obmV0Y3AsIGRlc2MpOworCQluZXRjcC0+bmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCX0KK30KKworc3RhdGljIGludCBuZXRjcF9wcm9jZXNzX29uZV9yeF9wYWNrZXQoc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwKQoreworCXVuc2lnbmVkIGludCBkbWFfc3osIGJ1Zl9sZW4sIG9yZ19idWZfbGVuOworCXN0cnVjdCBrbmF2X2RtYV9kZXNjICpkZXNjLCAqbmRlc2M7CisJdW5zaWduZWQgaW50IHBrdF9zeiA9IDAsIGFjY3VtX3N6OworCXN0cnVjdCBuZXRjcF9ob29rX2xpc3QgKnJ4X2hvb2s7CisJZG1hX2FkZHJfdCBkbWFfZGVzYywgZG1hX2J1ZmY7CisJc3RydWN0IG5ldGNwX3BhY2tldCBwX2luZm87CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl2b2lkICpvcmdfYnVmX3B0cjsKKwl1MzIgdG1wOworCisJZG1hX2Rlc2MgPSBrbmF2X3F1ZXVlX3BvcChuZXRjcC0+cnhfcXVldWUsICZkbWFfc3opOworCWlmICghZG1hX2Rlc2MpCisJCXJldHVybiAtMTsKKworCWRlc2MgPSBrbmF2X3Bvb2xfZGVzY191bm1hcChuZXRjcC0+cnhfcG9vbCwgZG1hX2Rlc2MsIGRtYV9zeik7CisJaWYgKHVubGlrZWx5KCFkZXNjKSkgeworCQlkZXZfZXJyKG5ldGNwLT5uZGV2X2RldiwgImZhaWxlZCB0byB1bm1hcCBSeCBkZXNjXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZ2V0X3BrdF9pbmZvKCZkbWFfYnVmZiwgJmJ1Zl9sZW4sICZkbWFfZGVzYywgZGVzYyk7CisJZ2V0X3BhZF9pbmZvKCh1MzIgKikmb3JnX2J1Zl9wdHIsICZvcmdfYnVmX2xlbiwgZGVzYyk7CisKKwlpZiAodW5saWtlbHkoIW9yZ19idWZfcHRyKSkgeworCQlkZXZfZXJyKG5ldGNwLT5uZGV2X2RldiwgIk5VTEwgYnVmcHRyIGluIGRlc2NcbiIpOworCQlnb3RvIGZyZWVfZGVzYzsKKwl9CisKKwlwa3Rfc3ogJj0gS05BVl9ETUFfREVTQ19QS1RfTEVOX01BU0s7CisJYWNjdW1fc3ogPSBidWZfbGVuOworCWRtYV91bm1hcF9zaW5nbGUobmV0Y3AtPmRldiwgZG1hX2J1ZmYsIGJ1Zl9sZW4sIERNQV9GUk9NX0RFVklDRSk7CisKKwkvKiBCdWlsZCBhIG5ldyBza19idWZmIGZvciB0aGUgcHJpbWFyeSBidWZmZXIgKi8KKwlza2IgPSBidWlsZF9za2Iob3JnX2J1Zl9wdHIsIG9yZ19idWZfbGVuKTsKKwlpZiAodW5saWtlbHkoIXNrYikpIHsKKwkJZGV2X2VycihuZXRjcC0+bmRldl9kZXYsICJidWlsZF9za2IoKSBmYWlsZWRcbiIpOworCQlnb3RvIGZyZWVfZGVzYzsKKwl9CisKKwkvKiB1cGRhdGUgZGF0YSwgdGFpbCBhbmQgbGVuICovCisJc2tiX3Jlc2VydmUoc2tiLCBORVRDUF9TT1BfT0ZGU0VUKTsKKwlfX3NrYl9wdXQoc2tiLCBidWZfbGVuKTsKKworCS8qIEZpbGwgaW4gdGhlIHBhZ2UgZnJhZ21lbnQgbGlzdCAqLworCXdoaWxlIChkbWFfZGVzYykgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCQluZGVzYyA9IGtuYXZfcG9vbF9kZXNjX3VubWFwKG5ldGNwLT5yeF9wb29sLCBkbWFfZGVzYywgZG1hX3N6KTsKKwkJaWYgKHVubGlrZWx5KCFuZGVzYykpIHsKKwkJCWRldl9lcnIobmV0Y3AtPm5kZXZfZGV2LCAiZmFpbGVkIHRvIHVubWFwIFJ4IGRlc2NcbiIpOworCQkJZ290byBmcmVlX2Rlc2M7CisJCX0KKworCQlnZXRfcGt0X2luZm8oJmRtYV9idWZmLCAmYnVmX2xlbiwgJmRtYV9kZXNjLCBuZGVzYyk7CisJCWdldF9wYWRfaW5mbygodTMyICopJnBhZ2UsICZ0bXAsIG5kZXNjKTsKKworCQlpZiAobGlrZWx5KGRtYV9idWZmICYmIGJ1Zl9sZW4gJiYgcGFnZSkpIHsKKwkJCWRtYV91bm1hcF9wYWdlKG5ldGNwLT5kZXYsIGRtYV9idWZmLCBQQUdFX1NJWkUsCisJCQkJICAgICAgIERNQV9GUk9NX0RFVklDRSk7CisJCX0gZWxzZSB7CisJCQlkZXZfZXJyKG5ldGNwLT5uZGV2X2RldiwgIkJhZCBSeCBkZXNjIGRtYV9idWZmKCVwKSwgbGVuKCVkKSwgcGFnZSglcClcbiIsCisJCQkJKHZvaWQgKilkbWFfYnVmZiwgYnVmX2xlbiwgcGFnZSk7CisJCQlnb3RvIGZyZWVfZGVzYzsKKwkJfQorCisJCXNrYl9hZGRfcnhfZnJhZyhza2IsIHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MsIHBhZ2UsCisJCQkJb2Zmc2V0X2luX3BhZ2UoZG1hX2J1ZmYpLCBidWZfbGVuLCBQQUdFX1NJWkUpOworCQlhY2N1bV9zeiArPSBidWZfbGVuOworCisJCS8qIEZyZWUgdGhlIGRlc2NyaXB0b3IgKi8KKwkJa25hdl9wb29sX2Rlc2NfcHV0KG5ldGNwLT5yeF9wb29sLCBuZGVzYyk7CisJfQorCisJLyogRnJlZSB0aGUgcHJpbWFyeSBkZXNjcmlwdG9yICovCisJa25hdl9wb29sX2Rlc2NfcHV0KG5ldGNwLT5yeF9wb29sLCBkZXNjKTsKKworCS8qIGNoZWNrIGZvciBwYWNrZXQgbGVuIGFuZCB3YXJuICovCisJaWYgKHVubGlrZWx5KHBrdF9zeiAhPSBhY2N1bV9zeikpCisJCWRldl9kYmcobmV0Y3AtPm5kZXZfZGV2LCAibWlzbWF0Y2ggaW4gcGFja2V0IHNpemUoJWQpICYgc3VtIG9mIGZyYWdtZW50cyglZClcbiIsCisJCQlwa3Rfc3osIGFjY3VtX3N6KTsKKworCS8qIFJlbW92ZSBldGhlcm5ldCBGQ1MgZnJvbSB0aGUgcGFja2V0ICovCisJX19wc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIEVUSF9GQ1NfTEVOKTsKKworCS8qIENhbGwgZWFjaCBvZiB0aGUgUlggaG9va3MgKi8KKwlwX2luZm8uc2tiID0gc2tiOworCXBfaW5mby5yeHRzdGFtcF9jb21wbGV0ZSA9IGZhbHNlOworCWxpc3RfZm9yX2VhY2hfZW50cnkocnhfaG9vaywgJm5ldGNwLT5yeGhvb2tfbGlzdF9oZWFkLCBsaXN0KSB7CisJCWludCByZXQ7CisKKwkJcmV0ID0gcnhfaG9vay0+aG9va19ydG4ocnhfaG9vay0+b3JkZXIsIHJ4X2hvb2stPmhvb2tfZGF0YSwKKwkJCQkJJnBfaW5mbyk7CisJCWlmICh1bmxpa2VseShyZXQpKSB7CisJCQlkZXZfZXJyKG5ldGNwLT5uZGV2X2RldiwgIlJYIGhvb2sgJWQgZmFpbGVkOiAlZFxuIiwKKwkJCQlyeF9ob29rLT5vcmRlciwgcmV0KTsKKwkJCW5ldGNwLT5uZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJbmV0Y3AtPm5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCW5ldGNwLT5uZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJbmV0Y3AtPm5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCisJLyogcHVzaCBza2IgdXAgdGhlIHN0YWNrICovCisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0Y3AtPm5kZXYpOworCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJcmV0dXJuIDA7CisKK2ZyZWVfZGVzYzoKKwluZXRjcF9mcmVlX3J4X2Rlc2NfY2hhaW4obmV0Y3AsIGRlc2MpOworCW5ldGNwLT5uZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXRjcF9wcm9jZXNzX3J4X3BhY2tldHMoc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgYnVkZ2V0KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgKGkgPCBidWRnZXQpICYmICFuZXRjcF9wcm9jZXNzX29uZV9yeF9wYWNrZXQobmV0Y3ApOyBpKyspCisJCTsKKwlyZXR1cm4gaTsKK30KKworLyogUmVsZWFzZSBkZXNjcmlwdG9ycyBhbmQgYXR0YWNoZWQgYnVmZmVycyBmcm9tIFJ4IEZEUSAqLworc3RhdGljIHZvaWQgbmV0Y3BfZnJlZV9yeF9idWYoc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwLCBpbnQgZmRxKQoreworCXN0cnVjdCBrbmF2X2RtYV9kZXNjICpkZXNjOworCXVuc2lnbmVkIGludCBidWZfbGVuLCBkbWFfc3o7CisJZG1hX2FkZHJfdCBkbWE7CisJdm9pZCAqYnVmX3B0cjsKKwl1MzIgdG1wOworCisJLyogQWxsb2NhdGUgZGVzY3JpcHRvciAqLworCXdoaWxlICgoZG1hID0ga25hdl9xdWV1ZV9wb3AobmV0Y3AtPnJ4X2ZkcVtmZHFdLCAmZG1hX3N6KSkpIHsKKwkJZGVzYyA9IGtuYXZfcG9vbF9kZXNjX3VubWFwKG5ldGNwLT5yeF9wb29sLCBkbWEsIGRtYV9zeik7CisJCWlmICh1bmxpa2VseSghZGVzYykpIHsKKwkJCWRldl9lcnIobmV0Y3AtPm5kZXZfZGV2LCAiZmFpbGVkIHRvIHVubWFwIFJ4IGRlc2NcbiIpOworCQkJY29udGludWU7CisJCX0KKworCQlnZXRfb3JnX3BrdF9pbmZvKCZkbWEsICZidWZfbGVuLCBkZXNjKTsKKwkJZ2V0X3BhZF9pbmZvKCh1MzIgKikmYnVmX3B0ciwgJnRtcCwgZGVzYyk7CisKKwkJaWYgKHVubGlrZWx5KCFkbWEpKSB7CisJCQlkZXZfZXJyKG5ldGNwLT5uZGV2X2RldiwgIk5VTEwgb3JpZ19idWZmIGluIGRlc2NcbiIpOworCQkJa25hdl9wb29sX2Rlc2NfcHV0KG5ldGNwLT5yeF9wb29sLCBkZXNjKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHVubGlrZWx5KCFidWZfcHRyKSkgeworCQkJZGV2X2VycihuZXRjcC0+bmRldl9kZXYsICJOVUxMIGJ1ZnB0ciBpbiBkZXNjXG4iKTsKKwkJCWtuYXZfcG9vbF9kZXNjX3B1dChuZXRjcC0+cnhfcG9vbCwgZGVzYyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChmZHEgPT0gMCkgeworCQkJZG1hX3VubWFwX3NpbmdsZShuZXRjcC0+ZGV2LCBkbWEsIGJ1Zl9sZW4sCisJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQkJbmV0Y3BfZnJhZ19mcmVlKChidWZfbGVuIDw9IFBBR0VfU0laRSksIGJ1Zl9wdHIpOworCQl9IGVsc2UgeworCQkJZG1hX3VubWFwX3BhZ2UobmV0Y3AtPmRldiwgZG1hLCBidWZfbGVuLAorCQkJCSAgICAgICBETUFfRlJPTV9ERVZJQ0UpOworCQkJX19mcmVlX3BhZ2UoYnVmX3B0cik7CisJCX0KKworCQlrbmF2X3Bvb2xfZGVzY19wdXQobmV0Y3AtPnJ4X3Bvb2wsIGRlc2MpOworCX0KK30KKworc3RhdGljIHZvaWQgbmV0Y3Bfcnhwb29sX2ZyZWUoc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEtOQVZfRE1BX0ZEUV9QRVJfQ0hBTiAmJgorCSAgICAgIUlTX0VSUl9PUl9OVUxMKG5ldGNwLT5yeF9mZHFbaV0pOyBpKyspCisJCW5ldGNwX2ZyZWVfcnhfYnVmKG5ldGNwLCBpKTsKKworCWlmIChrbmF2X3Bvb2xfY291bnQobmV0Y3AtPnJ4X3Bvb2wpICE9IG5ldGNwLT5yeF9wb29sX3NpemUpCisJCWRldl9lcnIobmV0Y3AtPm5kZXZfZGV2LCAiTG9zdCBSeCAoJWQpIGRlc2NyaXB0b3JzXG4iLAorCQkJbmV0Y3AtPnJ4X3Bvb2xfc2l6ZSAtIGtuYXZfcG9vbF9jb3VudChuZXRjcC0+cnhfcG9vbCkpOworCisJa25hdl9wb29sX2Rlc3Ryb3kobmV0Y3AtPnJ4X3Bvb2wpOworCW5ldGNwLT5yeF9wb29sID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgbmV0Y3BfYWxsb2NhdGVfcnhfYnVmKHN0cnVjdCBuZXRjcF9pbnRmICpuZXRjcCwgaW50IGZkcSkKK3sKKwlzdHJ1Y3Qga25hdl9kbWFfZGVzYyAqaHdkZXNjOworCXVuc2lnbmVkIGludCBidWZfbGVuLCBkbWFfc3o7CisJdTMyIGRlc2NfaW5mbywgcGt0X2luZm87CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJZG1hX2FkZHJfdCBkbWE7CisJdm9pZCAqYnVmcHRyOworCXUzMiBwYWRbMl07CisKKwkvKiBBbGxvY2F0ZSBkZXNjcmlwdG9yICovCisJaHdkZXNjID0ga25hdl9wb29sX2Rlc2NfZ2V0KG5ldGNwLT5yeF9wb29sKTsKKwlpZiAoSVNfRVJSX09SX05VTEwoaHdkZXNjKSkgeworCQlkZXZfZGJnKG5ldGNwLT5uZGV2X2RldiwgIm91dCBvZiByeCBwb29sIGRlc2NcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGxpa2VseShmZHEgPT0gMCkpIHsKKwkJdW5zaWduZWQgaW50IHByaW1hcnlfYnVmX2xlbjsKKwkJLyogQWxsb2NhdGUgYSBwcmltYXJ5IHJlY2VpdmUgcXVldWUgZW50cnkgKi8KKwkJYnVmX2xlbiA9IG5ldGNwLT5yeF9idWZmZXJfc2l6ZXNbMF0gKyBORVRDUF9TT1BfT0ZGU0VUOworCQlwcmltYXJ5X2J1Zl9sZW4gPSBTS0JfREFUQV9BTElHTihidWZfbGVuKSArCisJCQkJU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8pKTsKKworCQlpZiAocHJpbWFyeV9idWZfbGVuIDw9IFBBR0VfU0laRSkgeworCQkJYnVmcHRyID0gbmV0ZGV2X2FsbG9jX2ZyYWcocHJpbWFyeV9idWZfbGVuKTsKKwkJCXBhZFsxXSA9IHByaW1hcnlfYnVmX2xlbjsKKwkJfSBlbHNlIHsKKwkJCWJ1ZnB0ciA9IGttYWxsb2MocHJpbWFyeV9idWZfbGVuLCBHRlBfQVRPTUlDIHwKKwkJCQkJIEdGUF9ETUEzMiB8IF9fR0ZQX0NPTEQpOworCQkJcGFkWzFdID0gMDsKKwkJfQorCisJCWlmICh1bmxpa2VseSghYnVmcHRyKSkgeworCQkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobmV0Y3AtPm5kZXZfZGV2LCAiUHJpbWFyeSBSWCBidWZmZXIgYWxsb2MgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlkbWEgPSBkbWFfbWFwX3NpbmdsZShuZXRjcC0+ZGV2LCBidWZwdHIsIGJ1Zl9sZW4sCisJCQkJICAgICBETUFfVE9fREVWSUNFKTsKKwkJcGFkWzBdID0gKHUzMilidWZwdHI7CisKKwl9IGVsc2UgeworCQkvKiBBbGxvY2F0ZSBhIHNlY29uZGFyeSByZWNlaXZlIHF1ZXVlIGVudHJ5ICovCisJCXBhZ2UgPSBhbGxvY19wYWdlKEdGUF9BVE9NSUMgfCBHRlBfRE1BMzIgfCBfX0dGUF9DT0xEKTsKKwkJaWYgKHVubGlrZWx5KCFwYWdlKSkgeworCQkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQobmV0Y3AtPm5kZXZfZGV2LCAiU2Vjb25kYXJ5IHBhZ2UgYWxsb2MgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCQlidWZfbGVuID0gUEFHRV9TSVpFOworCQlkbWEgPSBkbWFfbWFwX3BhZ2UobmV0Y3AtPmRldiwgcGFnZSwgMCwgYnVmX2xlbiwgRE1BX1RPX0RFVklDRSk7CisJCXBhZFswXSA9ICh1MzIpcGFnZTsKKwkJcGFkWzFdID0gMDsKKwl9CisKKwlkZXNjX2luZm8gPSAgS05BVl9ETUFfREVTQ19QU19JTkZPX0lOX0RFU0M7CisJZGVzY19pbmZvIHw9IGJ1Zl9sZW4gJiBLTkFWX0RNQV9ERVNDX1BLVF9MRU5fTUFTSzsKKwlwa3RfaW5mbyA9ICBLTkFWX0RNQV9ERVNDX0hBU19FUElCOworCXBrdF9pbmZvIHw9IEtOQVZfRE1BX05VTV9QU19XT1JEUyA8PCBLTkFWX0RNQV9ERVNDX1BTTEVOX1NISUZUOworCXBrdF9pbmZvIHw9IChuZXRjcC0+cnhfcXVldWVfaWQgJiBLTkFWX0RNQV9ERVNDX1JFVFFfTUFTSykgPDwKKwkJICAgIEtOQVZfRE1BX0RFU0NfUkVUUV9TSElGVDsKKwlzZXRfb3JnX3BrdF9pbmZvKGRtYSwgYnVmX2xlbiwgaHdkZXNjKTsKKwlzZXRfcGFkX2luZm8ocGFkWzBdLCBwYWRbMV0sIGh3ZGVzYyk7CisJc2V0X2Rlc2NfaW5mbyhkZXNjX2luZm8sIHBrdF9pbmZvLCBod2Rlc2MpOworCisJLyogUHVzaCB0byBGRFFzICovCisJa25hdl9wb29sX2Rlc2NfbWFwKG5ldGNwLT5yeF9wb29sLCBod2Rlc2MsIHNpemVvZigqaHdkZXNjKSwgJmRtYSwKKwkJCSAgICZkbWFfc3opOworCWtuYXZfcXVldWVfcHVzaChuZXRjcC0+cnhfZmRxW2ZkcV0sIGRtYSwgc2l6ZW9mKCpod2Rlc2MpLCAwKTsKKwlyZXR1cm47CisKK2ZhaWw6CisJa25hdl9wb29sX2Rlc2NfcHV0KG5ldGNwLT5yeF9wb29sLCBod2Rlc2MpOworfQorCisvKiBSZWZpbGwgUnggRkRRIHdpdGggZGVzY3JpcHRvcnMgJiBhdHRhY2hlZCBidWZmZXJzICovCitzdGF0aWMgdm9pZCBuZXRjcF9yeHBvb2xfcmVmaWxsKHN0cnVjdCBuZXRjcF9pbnRmICpuZXRjcCkKK3sKKwl1MzIgZmRxX2RlZmljaXRbS05BVl9ETUFfRkRRX1BFUl9DSEFOXSA9IHswfTsKKwlpbnQgaTsKKworCS8qIENhbGN1bGF0ZSB0aGUgRkRRIGRlZmljaXQgYW5kIHJlZmlsbCAqLworCWZvciAoaSA9IDA7IGkgPCBLTkFWX0RNQV9GRFFfUEVSX0NIQU4gJiYgbmV0Y3AtPnJ4X2ZkcVtpXTsgaSsrKSB7CisJCWZkcV9kZWZpY2l0W2ldID0gbmV0Y3AtPnJ4X3F1ZXVlX2RlcHRoc1tpXSAtCisJCQkJIGtuYXZfcXVldWVfZ2V0X2NvdW50KG5ldGNwLT5yeF9mZHFbaV0pOworCisJCXdoaWxlIChmZHFfZGVmaWNpdFtpXS0tKQorCQkJbmV0Y3BfYWxsb2NhdGVfcnhfYnVmKG5ldGNwLCBpKTsKKwl9IC8qIGVuZCBmb3IgZmRxcyAqLworfQorCisvKiBOQVBJIHBvbGwgKi8KK3N0YXRpYyBpbnQgbmV0Y3BfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBuZXRjcF9pbnRmLAorCQkJCQkJcnhfbmFwaSk7CisJdW5zaWduZWQgaW50IHBhY2tldHM7CisKKwlwYWNrZXRzID0gbmV0Y3BfcHJvY2Vzc19yeF9wYWNrZXRzKG5ldGNwLCBidWRnZXQpOworCisJaWYgKHBhY2tldHMgPCBidWRnZXQpIHsKKwkJbmFwaV9jb21wbGV0ZSgmbmV0Y3AtPnJ4X25hcGkpOworCQlrbmF2X3F1ZXVlX2VuYWJsZV9ub3RpZnkobmV0Y3AtPnJ4X3F1ZXVlKTsKKwl9CisKKwluZXRjcF9yeHBvb2xfcmVmaWxsKG5ldGNwKTsKKwlyZXR1cm4gcGFja2V0czsKK30KKworc3RhdGljIHZvaWQgbmV0Y3Bfcnhfbm90aWZ5KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AgPSBhcmc7CisKKwlrbmF2X3F1ZXVlX2Rpc2FibGVfbm90aWZ5KG5ldGNwLT5yeF9xdWV1ZSk7CisJbmFwaV9zY2hlZHVsZSgmbmV0Y3AtPnJ4X25hcGkpOworfQorCitzdGF0aWMgdm9pZCBuZXRjcF9mcmVlX3R4X2Rlc2NfY2hhaW4oc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwLAorCQkJCSAgICAgc3RydWN0IGtuYXZfZG1hX2Rlc2MgKmRlc2MsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgZGVzY19zeikKK3sKKwlzdHJ1Y3Qga25hdl9kbWFfZGVzYyAqbmRlc2MgPSBkZXNjOworCWRtYV9hZGRyX3QgZG1hX2Rlc2MsIGRtYV9idWY7CisJdW5zaWduZWQgaW50IGJ1Zl9sZW47CisKKwl3aGlsZSAobmRlc2MpIHsKKwkJZ2V0X3BrdF9pbmZvKCZkbWFfYnVmLCAmYnVmX2xlbiwgJmRtYV9kZXNjLCBuZGVzYyk7CisKKwkJaWYgKGRtYV9idWYgJiYgYnVmX2xlbikKKwkJCWRtYV91bm1hcF9zaW5nbGUobmV0Y3AtPmRldiwgZG1hX2J1ZiwgYnVmX2xlbiwKKwkJCQkJIERNQV9UT19ERVZJQ0UpOworCQllbHNlCisJCQlkZXZfd2FybihuZXRjcC0+bmRldl9kZXYsICJiYWQgVHggZGVzYyBidWYoJXApLCBsZW4oJWQpXG4iLAorCQkJCSAodm9pZCAqKWRtYV9idWYsIGJ1Zl9sZW4pOworCisJCWtuYXZfcG9vbF9kZXNjX3B1dChuZXRjcC0+dHhfcG9vbCwgbmRlc2MpOworCQluZGVzYyA9IE5VTEw7CisJCWlmIChkbWFfZGVzYykgeworCQkJbmRlc2MgPSBrbmF2X3Bvb2xfZGVzY191bm1hcChuZXRjcC0+dHhfcG9vbCwgZG1hX2Rlc2MsCisJCQkJCQkgICAgIGRlc2Nfc3opOworCQkJaWYgKCFuZGVzYykKKwkJCQlkZXZfZXJyKG5ldGNwLT5uZGV2X2RldiwgImZhaWxlZCB0byB1bm1hcCBUeCBkZXNjXG4iKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBuZXRjcF9wcm9jZXNzX3R4X2NvbXBsX3BhY2tldHMoc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwLAorCQkJCQkgIHVuc2lnbmVkIGludCBidWRnZXQpCit7CisJc3RydWN0IGtuYXZfZG1hX2Rlc2MgKmRlc2M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgZG1hX3N6OworCWRtYV9hZGRyX3QgZG1hOworCWludCBwa3RzID0gMDsKKwl1MzIgdG1wOworCisJd2hpbGUgKGJ1ZGdldC0tKSB7CisJCWRtYSA9IGtuYXZfcXVldWVfcG9wKG5ldGNwLT50eF9jb21wbF9xLCAmZG1hX3N6KTsKKwkJaWYgKCFkbWEpCisJCQlicmVhazsKKwkJZGVzYyA9IGtuYXZfcG9vbF9kZXNjX3VubWFwKG5ldGNwLT50eF9wb29sLCBkbWEsIGRtYV9zeik7CisJCWlmICh1bmxpa2VseSghZGVzYykpIHsKKwkJCWRldl9lcnIobmV0Y3AtPm5kZXZfZGV2LCAiZmFpbGVkIHRvIHVubWFwIFR4IGRlc2NcbiIpOworCQkJbmV0Y3AtPm5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJY29udGludWU7CisJCX0KKworCQlnZXRfcGFkX2luZm8oKHUzMiAqKSZza2IsICZ0bXAsIGRlc2MpOworCQluZXRjcF9mcmVlX3R4X2Rlc2NfY2hhaW4obmV0Y3AsIGRlc2MsIGRtYV9zeik7CisJCWlmICghc2tiKSB7CisJCQlkZXZfZXJyKG5ldGNwLT5uZGV2X2RldiwgIk5vIHNrYiBpbiBUeCBkZXNjXG4iKTsKKwkJCW5ldGNwLT5uZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKG5ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmV0Y3AtPm5kZXYsIHNrYikgJiYKKwkJICAgIG5ldGlmX3J1bm5pbmcobmV0Y3AtPm5kZXYpICYmCisJCSAgICAoa25hdl9wb29sX2NvdW50KG5ldGNwLT50eF9wb29sKSA+CisJCSAgICBuZXRjcC0+dHhfcmVzdW1lX3RocmVzaG9sZCkpIHsKKwkJCXUxNiBzdWJxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCisJCQluZXRpZl93YWtlX3N1YnF1ZXVlKG5ldGNwLT5uZGV2LCBzdWJxdWV1ZSk7CisJCX0KKworCQluZXRjcC0+bmRldi0+c3RhdHMudHhfcGFja2V0cysrOworCQluZXRjcC0+bmRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcGt0cysrOworCX0KKwlyZXR1cm4gcGt0czsKK30KKworc3RhdGljIGludCBuZXRjcF90eF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlpbnQgcGFja2V0czsKKwlzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IG5ldGNwX2ludGYsCisJCQkJCQl0eF9uYXBpKTsKKworCXBhY2tldHMgPSBuZXRjcF9wcm9jZXNzX3R4X2NvbXBsX3BhY2tldHMobmV0Y3AsIGJ1ZGdldCk7CisJaWYgKHBhY2tldHMgPCBidWRnZXQpIHsKKwkJbmFwaV9jb21wbGV0ZSgmbmV0Y3AtPnR4X25hcGkpOworCQlrbmF2X3F1ZXVlX2VuYWJsZV9ub3RpZnkobmV0Y3AtPnR4X2NvbXBsX3EpOworCX0KKworCXJldHVybiBwYWNrZXRzOworfQorCitzdGF0aWMgdm9pZCBuZXRjcF90eF9ub3RpZnkodm9pZCAqYXJnKQoreworCXN0cnVjdCBuZXRjcF9pbnRmICpuZXRjcCA9IGFyZzsKKworCWtuYXZfcXVldWVfZGlzYWJsZV9ub3RpZnkobmV0Y3AtPnR4X2NvbXBsX3EpOworCW5hcGlfc2NoZWR1bGUoJm5ldGNwLT50eF9uYXBpKTsKK30KKworc3RhdGljIHN0cnVjdCBrbmF2X2RtYV9kZXNjKgorbmV0Y3BfdHhfbWFwX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3ApCit7CisJc3RydWN0IGtuYXZfZG1hX2Rlc2MgKmRlc2MsICpuZGVzYywgKnBkZXNjOworCXVuc2lnbmVkIGludCBwa3RfbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBuZXRjcC0+ZGV2OworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJdW5zaWduZWQgaW50IGRtYV9zejsKKwlpbnQgaTsKKworCS8qIE1hcCB0aGUgbGluZWFyIGJ1ZmZlciAqLworCWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCBza2ItPmRhdGEsIHBrdF9sZW4sIERNQV9UT19ERVZJQ0UpOworCWlmICh1bmxpa2VseSghZG1hX2FkZHIpKSB7CisJCWRldl9lcnIobmV0Y3AtPm5kZXZfZGV2LCAiRmFpbGVkIHRvIG1hcCBza2IgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZGVzYyA9IGtuYXZfcG9vbF9kZXNjX2dldChuZXRjcC0+dHhfcG9vbCk7CisJaWYgKHVubGlrZWx5KElTX0VSUl9PUl9OVUxMKGRlc2MpKSkgeworCQlkZXZfZXJyKG5ldGNwLT5uZGV2X2RldiwgIm91dCBvZiBUWCBkZXNjXG4iKTsKKwkJZG1hX3VubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBwa3RfbGVuLCBETUFfVE9fREVWSUNFKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJc2V0X3BrdF9pbmZvKGRtYV9hZGRyLCBwa3RfbGVuLCAwLCBkZXNjKTsKKwlpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKSB7CisJCXByZWZldGNodyhza2Jfc2hpbmZvKHNrYikpOworCX0gZWxzZSB7CisJCWRlc2MtPm5leHRfZGVzYyA9IDA7CisJCWdvdG8gdXBkX3BrdF9sZW47CisJfQorCisJcGRlc2MgPSBkZXNjOworCisJLyogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHNrYiBpcyBmcmFnbWVudGVkIGluIHBhZ2VzICovCisJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgeworCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisJCXN0cnVjdCBwYWdlICpwYWdlID0gc2tiX2ZyYWdfcGFnZShmcmFnKTsKKwkJdTMyIHBhZ2Vfb2Zmc2V0ID0gZnJhZy0+cGFnZV9vZmZzZXQ7CisJCXUzMiBidWZfbGVuID0gc2tiX2ZyYWdfc2l6ZShmcmFnKTsKKwkJZG1hX2FkZHJfdCBkZXNjX2RtYTsKKwkJdTMyIHBrdF9pbmZvOworCisJCWRtYV9hZGRyID0gZG1hX21hcF9wYWdlKGRldiwgcGFnZSwgcGFnZV9vZmZzZXQsIGJ1Zl9sZW4sCisJCQkJCURNQV9UT19ERVZJQ0UpOworCQlpZiAodW5saWtlbHkoIWRtYV9hZGRyKSkgeworCQkJZGV2X2VycihuZXRjcC0+bmRldl9kZXYsICJGYWlsZWQgdG8gbWFwIHNrYiBwYWdlXG4iKTsKKwkJCWdvdG8gZnJlZV9kZXNjczsKKwkJfQorCisJCW5kZXNjID0ga25hdl9wb29sX2Rlc2NfZ2V0KG5ldGNwLT50eF9wb29sKTsKKwkJaWYgKHVubGlrZWx5KElTX0VSUl9PUl9OVUxMKG5kZXNjKSkpIHsKKwkJCWRldl9lcnIobmV0Y3AtPm5kZXZfZGV2LCAib3V0IG9mIFRYIGRlc2MgZm9yIGZyYWdzXG4iKTsKKwkJCWRtYV91bm1hcF9wYWdlKGRldiwgZG1hX2FkZHIsIGJ1Zl9sZW4sIERNQV9UT19ERVZJQ0UpOworCQkJZ290byBmcmVlX2Rlc2NzOworCQl9CisKKwkJZGVzY19kbWEgPSBrbmF2X3Bvb2xfZGVzY192aXJ0X3RvX2RtYShuZXRjcC0+dHhfcG9vbCwKKwkJCQkJCSAgICAgICh2b2lkICopbmRlc2MpOworCQlwa3RfaW5mbyA9CisJCQkobmV0Y3AtPnR4X2NvbXBsX3FpZCAmIEtOQVZfRE1BX0RFU0NfUkVUUV9NQVNLKSA8PAorCQkJCUtOQVZfRE1BX0RFU0NfUkVUUV9TSElGVDsKKwkJc2V0X3BrdF9pbmZvKGRtYV9hZGRyLCBidWZfbGVuLCAwLCBuZGVzYyk7CisJCXNldF93b3JkcygmZGVzY19kbWEsIDEsICZwZGVzYy0+bmV4dF9kZXNjKTsKKwkJcGt0X2xlbiArPSBidWZfbGVuOworCQlpZiAocGRlc2MgIT0gZGVzYykKKwkJCWtuYXZfcG9vbF9kZXNjX21hcChuZXRjcC0+dHhfcG9vbCwgcGRlc2MsCisJCQkJCSAgIHNpemVvZigqcGRlc2MpLCAmZGVzY19kbWEsICZkbWFfc3opOworCQlwZGVzYyA9IG5kZXNjOworCX0KKwlpZiAocGRlc2MgIT0gZGVzYykKKwkJa25hdl9wb29sX2Rlc2NfbWFwKG5ldGNwLT50eF9wb29sLCBwZGVzYywgc2l6ZW9mKCpwZGVzYyksCisJCQkJICAgJmRtYV9hZGRyLCAmZG1hX3N6KTsKKworCS8qIGZyYWcgbGlzdCBiYXNlZCBsaW5rYWdlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdy4gKi8KKwlpZiAoc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3QpIHsKKwkJZGV2X2Vycl9yYXRlbGltaXRlZChuZXRjcC0+bmRldl9kZXYsICJORVRJRl9GX0ZSQUdMSVNUIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlnb3RvIGZyZWVfZGVzY3M7CisJfQorCit1cGRfcGt0X2xlbjoKKwlXQVJOX09OKHBrdF9sZW4gIT0gc2tiLT5sZW4pOworCisJcGt0X2xlbiAmPSBLTkFWX0RNQV9ERVNDX1BLVF9MRU5fTUFTSzsKKwlzZXRfd29yZHMoJnBrdF9sZW4sIDEsICZkZXNjLT5kZXNjX2luZm8pOworCXJldHVybiBkZXNjOworCitmcmVlX2Rlc2NzOgorCW5ldGNwX2ZyZWVfdHhfZGVzY19jaGFpbihuZXRjcCwgZGVzYywgc2l6ZW9mKCpkZXNjKSk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbmV0Y3BfdHhfc3VibWl0X3NrYihzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AsCisJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgICBzdHJ1Y3Qga25hdl9kbWFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgbmV0Y3BfdHhfcGlwZSAqdHhfcGlwZSA9IE5VTEw7CisJc3RydWN0IG5ldGNwX2hvb2tfbGlzdCAqdHhfaG9vazsKKwlzdHJ1Y3QgbmV0Y3BfcGFja2V0IHBfaW5mbzsKKwl1MzIgcGFja2V0X2luZm8gPSAwOworCXVuc2lnbmVkIGludCBkbWFfc3o7CisJZG1hX2FkZHJfdCBkbWE7CisJaW50IHJldCA9IDA7CisKKwlwX2luZm8ubmV0Y3AgPSBuZXRjcDsKKwlwX2luZm8uc2tiID0gc2tiOworCXBfaW5mby50eF9waXBlID0gTlVMTDsKKwlwX2luZm8ucHNkYXRhX2xlbiA9IDA7CisJcF9pbmZvLnRzX2NvbnRleHQgPSBOVUxMOworCXBfaW5mby50eHRzdGFtcF9jb21wbGV0ZSA9IE5VTEw7CisJcF9pbmZvLmVwaWIgPSBkZXNjLT5lcGliOworCXBfaW5mby5wc2RhdGEgPSBkZXNjLT5wc2RhdGE7CisJbWVtc2V0KHBfaW5mby5lcGliLCAwLCBLTkFWX0RNQV9OVU1fRVBJQl9XT1JEUyAqIHNpemVvZih1MzIpKTsKKworCS8qIEZpbmQgb3V0IHdoZXJlIHRvIGluamVjdCB0aGUgcGFja2V0IGZvciB0cmFuc21pc3Npb24gKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHR4X2hvb2ssICZuZXRjcC0+dHhob29rX2xpc3RfaGVhZCwgbGlzdCkgeworCQlyZXQgPSB0eF9ob29rLT5ob29rX3J0bih0eF9ob29rLT5vcmRlciwgdHhfaG9vay0+aG9va19kYXRhLAorCQkJCQkmcF9pbmZvKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQkJZGV2X2VycihuZXRjcC0+bmRldl9kZXYsICJUWCBob29rICVkIHJlamVjdGVkIHRoZSBwYWNrZXQgd2l0aCByZWFzb24oJWQpXG4iLAorCQkJCXR4X2hvb2stPm9yZGVyLCByZXQpOworCQkJcmV0ID0gKHJldCA8IDApID8gcmV0IDogTkVUREVWX1RYX09LOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBNYWtlIHN1cmUgc29tZSBUWCBob29rIGNsYWltZWQgdGhlIHBhY2tldCAqLworCXR4X3BpcGUgPSBwX2luZm8udHhfcGlwZTsKKwlpZiAoIXR4X3BpcGUpIHsKKwkJZGV2X2VycihuZXRjcC0+bmRldl9kZXYsICJObyBUWCBob29rIGNsYWltZWQgdGhlIHBhY2tldCFcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKworCS8qIHVwZGF0ZSBkZXNjcmlwdG9yICovCisJaWYgKHBfaW5mby5wc2RhdGFfbGVuKSB7CisJCXUzMiAqcHNkYXRhID0gcF9pbmZvLnBzZGF0YTsKKworCQltZW1tb3ZlKHBfaW5mby5wc2RhdGEsIHBfaW5mby5wc2RhdGEgKyBwX2luZm8ucHNkYXRhX2xlbiwKKwkJCXBfaW5mby5wc2RhdGFfbGVuKTsKKwkJc2V0X3dvcmRzKHBzZGF0YSwgcF9pbmZvLnBzZGF0YV9sZW4sIHBzZGF0YSk7CisJCXBhY2tldF9pbmZvIHw9CisJCQkocF9pbmZvLnBzZGF0YV9sZW4gJiBLTkFWX0RNQV9ERVNDX1BTTEVOX01BU0spIDw8CisJCQlLTkFWX0RNQV9ERVNDX1BTTEVOX1NISUZUOworCX0KKworCXBhY2tldF9pbmZvIHw9IEtOQVZfRE1BX0RFU0NfSEFTX0VQSUIgfAorCQkoKG5ldGNwLT50eF9jb21wbF9xaWQgJiBLTkFWX0RNQV9ERVNDX1JFVFFfTUFTSykgPDwKKwkJS05BVl9ETUFfREVTQ19SRVRRX1NISUZUKSB8CisJCSgodHhfcGlwZS0+ZG1hX3BzZmxhZ3MgJiBLTkFWX0RNQV9ERVNDX1BTRkxBR19NQVNLKSA8PAorCQlLTkFWX0RNQV9ERVNDX1BTRkxBR19TSElGVCk7CisKKwlzZXRfd29yZHMoJnBhY2tldF9pbmZvLCAxLCAmZGVzYy0+cGFja2V0X2luZm8pOworCXNldF93b3JkcygodTMyICopJnNrYiwgMSwgJmRlc2MtPnBhZFswXSk7CisKKwkvKiBzdWJtaXQgcGFja2V0IGRlc2NyaXB0b3IgKi8KKwlyZXQgPSBrbmF2X3Bvb2xfZGVzY19tYXAobmV0Y3AtPnR4X3Bvb2wsIGRlc2MsIHNpemVvZigqZGVzYyksICZkbWEsCisJCQkJICZkbWFfc3opOworCWlmICh1bmxpa2VseShyZXQpKSB7CisJCWRldl9lcnIobmV0Y3AtPm5kZXZfZGV2LCAiJXMoKSBmYWlsZWQgdG8gbWFwIGRlc2NcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCXNrYl90eF90aW1lc3RhbXAoc2tiKTsKKwlrbmF2X3F1ZXVlX3B1c2godHhfcGlwZS0+ZG1hX3F1ZXVlLCBkbWEsIGRtYV9zeiwgMCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKiBTdWJtaXQgdGhlIHBhY2tldCAqLworc3RhdGljIGludCBuZXRjcF9uZG9fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpbnQgc3VicXVldWUgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKKwlzdHJ1Y3Qga25hdl9kbWFfZGVzYyAqZGVzYzsKKwlpbnQgZGVzY19jb3VudCwgcmV0ID0gMDsKKworCWlmICh1bmxpa2VseShza2ItPmxlbiA8PSAwKSkgeworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJaWYgKHVubGlrZWx5KHNrYi0+bGVuIDwgTkVUQ1BfTUlOX1BBQ0tFVF9TSVpFKSkgeworCQlyZXQgPSBza2JfcGFkdG8oc2tiLCBORVRDUF9NSU5fUEFDS0VUX1NJWkUpOworCQlpZiAocmV0IDwgMCkgeworCQkJLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBza2IgaGFzIGFscmVhZHkgYmVlbiBkcm9wcGVkICovCisJCQlkZXZfd2FybihuZXRjcC0+bmRldl9kZXYsICJwYWRkaW5nIGZhaWxlZCAoJWQpLCBwYWNrZXQgZHJvcHBlZFxuIiwKKwkJCQkgcmV0KTsKKwkJCW5kZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJc2tiLT5sZW4gPSBORVRDUF9NSU5fUEFDS0VUX1NJWkU7CisJfQorCisJZGVzYyA9IG5ldGNwX3R4X21hcF9za2Ioc2tiLCBuZXRjcCk7CisJaWYgKHVubGlrZWx5KCFkZXNjKSkgeworCQluZXRpZl9zdG9wX3N1YnF1ZXVlKG5kZXYsIHN1YnF1ZXVlKTsKKwkJcmV0ID0gLUVOT0JVRlM7CisJCWdvdG8gZHJvcDsKKwl9CisKKwlyZXQgPSBuZXRjcF90eF9zdWJtaXRfc2tiKG5ldGNwLCBza2IsIGRlc2MpOworCWlmIChyZXQpCisJCWdvdG8gZHJvcDsKKworCW5kZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCS8qIENoZWNrIFR4IHBvb2wgY291bnQgJiBzdG9wIHN1YnF1ZXVlIGlmIG5lZWRlZCAqLworCWRlc2NfY291bnQgPSBrbmF2X3Bvb2xfY291bnQobmV0Y3AtPnR4X3Bvb2wpOworCWlmIChkZXNjX2NvdW50IDwgbmV0Y3AtPnR4X3BhdXNlX3RocmVzaG9sZCkgeworCQlkZXZfZGJnKG5ldGNwLT5uZGV2X2RldiwgInBhdXNpbmcgdHgsIGNvdW50KCVkKVxuIiwgZGVzY19jb3VudCk7CisJCW5ldGlmX3N0b3Bfc3VicXVldWUobmRldiwgc3VicXVldWUpOworCX0KKwlyZXR1cm4gTkVUREVWX1RYX09LOworCitkcm9wOgorCW5kZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwlpZiAoZGVzYykKKwkJbmV0Y3BfZnJlZV90eF9kZXNjX2NoYWluKG5ldGNwLCBkZXNjLCBzaXplb2YoKmRlc2MpKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIHJldDsKK30KKworaW50IG5ldGNwX3R4cGlwZV9jbG9zZShzdHJ1Y3QgbmV0Y3BfdHhfcGlwZSAqdHhfcGlwZSkKK3sKKwlpZiAodHhfcGlwZS0+ZG1hX2NoYW5uZWwpIHsKKwkJa25hdl9kbWFfY2xvc2VfY2hhbm5lbCh0eF9waXBlLT5kbWFfY2hhbm5lbCk7CisJCXR4X3BpcGUtPmRtYV9jaGFubmVsID0gTlVMTDsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZXRjcF90eHBpcGVfY2xvc2UpOworCitpbnQgbmV0Y3BfdHhwaXBlX29wZW4oc3RydWN0IG5ldGNwX3R4X3BpcGUgKnR4X3BpcGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdHhfcGlwZS0+bmV0Y3BfZGV2aWNlLT5kZXZpY2U7CisJc3RydWN0IGtuYXZfZG1hX2NmZyBjb25maWc7CisJaW50IHJldCA9IDA7CisJdTggbmFtZVsxNl07CisKKwltZW1zZXQoJmNvbmZpZywgMCwgc2l6ZW9mKGNvbmZpZykpOworCWNvbmZpZy5kaXJlY3Rpb24gPSBETUFfTUVNX1RPX0RFVjsKKwljb25maWcudS50eC5maWx0X2VpbmZvID0gZmFsc2U7CisJY29uZmlnLnUudHguZmlsdF9wc3dvcmRzID0gZmFsc2U7CisJY29uZmlnLnUudHgucHJpb3JpdHkgPSBETUFfUFJJT19NRURfTDsKKworCXR4X3BpcGUtPmRtYV9jaGFubmVsID0ga25hdl9kbWFfb3Blbl9jaGFubmVsKGRldiwKKwkJCQl0eF9waXBlLT5kbWFfY2hhbl9uYW1lLCAmY29uZmlnKTsKKwlpZiAoSVNfRVJSX09SX05VTEwodHhfcGlwZS0+ZG1hX2NoYW5uZWwpKSB7CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIG9wZW5pbmcgdHggY2hhbiglcylcbiIsCisJCQl0eF9waXBlLT5kbWFfY2hhbl9uYW1lKTsKKwkJZ290byBlcnI7CisJfQorCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAidHgtcGlwZS0lcyIsIGRldl9uYW1lKGRldikpOworCXR4X3BpcGUtPmRtYV9xdWV1ZSA9IGtuYXZfcXVldWVfb3BlbihuYW1lLCB0eF9waXBlLT5kbWFfcXVldWVfaWQsCisJCQkJCSAgICAgS05BVl9RVUVVRV9TSEFSRUQpOworCWlmIChJU19FUlIodHhfcGlwZS0+ZG1hX3F1ZXVlKSkgeworCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBvcGVuIERNQSBxdWV1ZSBmb3IgY2hhbm5lbCBcIiVzXCI6ICVkXG4iLAorCQkJbmFtZSwgcmV0KTsKKwkJcmV0ID0gUFRSX0VSUih0eF9waXBlLT5kbWFfcXVldWUpOworCQlnb3RvIGVycjsKKwl9CisKKwlkZXZfZGJnKGRldiwgIm9wZW5lZCB0eCBwaXBlICVzXG4iLCBuYW1lKTsKKwlyZXR1cm4gMDsKKworZXJyOgorCWlmICghSVNfRVJSX09SX05VTEwodHhfcGlwZS0+ZG1hX2NoYW5uZWwpKQorCQlrbmF2X2RtYV9jbG9zZV9jaGFubmVsKHR4X3BpcGUtPmRtYV9jaGFubmVsKTsKKwl0eF9waXBlLT5kbWFfY2hhbm5lbCA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5ldGNwX3R4cGlwZV9vcGVuKTsKKworaW50IG5ldGNwX3R4cGlwZV9pbml0KHN0cnVjdCBuZXRjcF90eF9waXBlICp0eF9waXBlLAorCQkgICAgICBzdHJ1Y3QgbmV0Y3BfZGV2aWNlICpuZXRjcF9kZXZpY2UsCisJCSAgICAgIGNvbnN0IGNoYXIgKmRtYV9jaGFuX25hbWUsIHVuc2lnbmVkIGludCBkbWFfcXVldWVfaWQpCit7CisJbWVtc2V0KHR4X3BpcGUsIDAsIHNpemVvZigqdHhfcGlwZSkpOworCXR4X3BpcGUtPm5ldGNwX2RldmljZSA9IG5ldGNwX2RldmljZTsKKwl0eF9waXBlLT5kbWFfY2hhbl9uYW1lID0gZG1hX2NoYW5fbmFtZTsKKwl0eF9waXBlLT5kbWFfcXVldWVfaWQgPSBkbWFfcXVldWVfaWQ7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZXRjcF90eHBpcGVfaW5pdCk7CisKK3N0YXRpYyBzdHJ1Y3QgbmV0Y3BfYWRkciAqbmV0Y3BfYWRkcl9maW5kKHN0cnVjdCBuZXRjcF9pbnRmICpuZXRjcCwKKwkJCQkJICBjb25zdCB1OCAqYWRkciwKKwkJCQkJICBlbnVtIG5ldGNwX2FkZHJfdHlwZSB0eXBlKQoreworCXN0cnVjdCBuZXRjcF9hZGRyICpuYWRkcjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobmFkZHIsICZuZXRjcC0+YWRkcl9saXN0LCBub2RlKSB7CisJCWlmIChuYWRkci0+dHlwZSAhPSB0eXBlKQorCQkJY29udGludWU7CisJCWlmIChhZGRyICYmIG1lbWNtcChhZGRyLCBuYWRkci0+YWRkciwgRVRIX0FMRU4pKQorCQkJY29udGludWU7CisJCXJldHVybiBuYWRkcjsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRjcF9hZGRyICpuZXRjcF9hZGRyX2FkZChzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AsCisJCQkJCSBjb25zdCB1OCAqYWRkciwKKwkJCQkJIGVudW0gbmV0Y3BfYWRkcl90eXBlIHR5cGUpCit7CisJc3RydWN0IG5ldGNwX2FkZHIgKm5hZGRyOworCisJbmFkZHIgPSBkZXZtX2ttYWxsb2MobmV0Y3AtPmRldiwgc2l6ZW9mKCpuYWRkciksIEdGUF9BVE9NSUMpOworCWlmICghbmFkZHIpCisJCXJldHVybiBOVUxMOworCisJbmFkZHItPnR5cGUgPSB0eXBlOworCW5hZGRyLT5mbGFncyA9IDA7CisJbmFkZHItPm5ldGNwID0gbmV0Y3A7CisJaWYgKGFkZHIpCisJCWV0aGVyX2FkZHJfY29weShuYWRkci0+YWRkciwgYWRkcik7CisJZWxzZQorCQltZW1zZXQobmFkZHItPmFkZHIsIDAsIEVUSF9BTEVOKTsKKwlsaXN0X2FkZF90YWlsKCZuYWRkci0+bm9kZSwgJm5ldGNwLT5hZGRyX2xpc3QpOworCisJcmV0dXJuIG5hZGRyOworfQorCitzdGF0aWMgdm9pZCBuZXRjcF9hZGRyX2RlbChzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AsIHN0cnVjdCBuZXRjcF9hZGRyICpuYWRkcikKK3sKKwlsaXN0X2RlbCgmbmFkZHItPm5vZGUpOworCWRldm1fa2ZyZWUobmV0Y3AtPmRldiwgbmFkZHIpOworfQorCitzdGF0aWMgdm9pZCBuZXRjcF9hZGRyX2NsZWFyX21hcmsoc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwKQoreworCXN0cnVjdCBuZXRjcF9hZGRyICpuYWRkcjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkobmFkZHIsICZuZXRjcC0+YWRkcl9saXN0LCBub2RlKQorCQluYWRkci0+ZmxhZ3MgPSAwOworfQorCitzdGF0aWMgdm9pZCBuZXRjcF9hZGRyX2FkZF9tYXJrKHN0cnVjdCBuZXRjcF9pbnRmICpuZXRjcCwgY29uc3QgdTggKmFkZHIsCisJCQkJZW51bSBuZXRjcF9hZGRyX3R5cGUgdHlwZSkKK3sKKwlzdHJ1Y3QgbmV0Y3BfYWRkciAqbmFkZHI7CisKKwluYWRkciA9IG5ldGNwX2FkZHJfZmluZChuZXRjcCwgYWRkciwgdHlwZSk7CisJaWYgKG5hZGRyKSB7CisJCW5hZGRyLT5mbGFncyB8PSBBRERSX1ZBTElEOworCQlyZXR1cm47CisJfQorCisJbmFkZHIgPSBuZXRjcF9hZGRyX2FkZChuZXRjcCwgYWRkciwgdHlwZSk7CisJaWYgKCFXQVJOX09OKCFuYWRkcikpCisJCW5hZGRyLT5mbGFncyB8PSBBRERSX05FVzsKK30KKworc3RhdGljIHZvaWQgbmV0Y3BfYWRkcl9zd2VlcF9kZWwoc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwKQoreworCXN0cnVjdCBuZXRjcF9hZGRyICpuYWRkciwgKnRtcDsKKwlzdHJ1Y3QgbmV0Y3BfaW50Zl9tb2Rwcml2ICpwcml2OworCXN0cnVjdCBuZXRjcF9tb2R1bGUgKm1vZHVsZTsKKwlpbnQgZXJyb3I7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobmFkZHIsIHRtcCwgJm5ldGNwLT5hZGRyX2xpc3QsIG5vZGUpIHsKKwkJaWYgKG5hZGRyLT5mbGFncyAmIChBRERSX1ZBTElEIHwgQUREUl9ORVcpKQorCQkJY29udGludWU7CisJCWRldl9kYmcobmV0Y3AtPm5kZXZfZGV2LCAiZGVsZXRpbmcgYWRkcmVzcyAlcE0sIHR5cGUgJXhcbiIsCisJCQluYWRkci0+YWRkciwgbmFkZHItPnR5cGUpOworCQltdXRleF9sb2NrKCZuZXRjcF9tb2R1bGVzX2xvY2spOworCQlmb3JfZWFjaF9tb2R1bGUobmV0Y3AsIHByaXYpIHsKKwkJCW1vZHVsZSA9IHByaXYtPm5ldGNwX21vZHVsZTsKKwkJCWlmICghbW9kdWxlLT5kZWxfYWRkcikKKwkJCQljb250aW51ZTsKKwkJCWVycm9yID0gbW9kdWxlLT5kZWxfYWRkcihwcml2LT5tb2R1bGVfcHJpdiwKKwkJCQkJCSBuYWRkcik7CisJCQlXQVJOX09OKGVycm9yKTsKKwkJfQorCQltdXRleF91bmxvY2soJm5ldGNwX21vZHVsZXNfbG9jayk7CisJCW5ldGNwX2FkZHJfZGVsKG5ldGNwLCBuYWRkcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBuZXRjcF9hZGRyX3N3ZWVwX2FkZChzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3ApCit7CisJc3RydWN0IG5ldGNwX2FkZHIgKm5hZGRyLCAqdG1wOworCXN0cnVjdCBuZXRjcF9pbnRmX21vZHByaXYgKnByaXY7CisJc3RydWN0IG5ldGNwX21vZHVsZSAqbW9kdWxlOworCWludCBlcnJvcjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuYWRkciwgdG1wLCAmbmV0Y3AtPmFkZHJfbGlzdCwgbm9kZSkgeworCQlpZiAoIShuYWRkci0+ZmxhZ3MgJiBBRERSX05FVykpCisJCQljb250aW51ZTsKKwkJZGV2X2RiZyhuZXRjcC0+bmRldl9kZXYsICJhZGRpbmcgYWRkcmVzcyAlcE0sIHR5cGUgJXhcbiIsCisJCQluYWRkci0+YWRkciwgbmFkZHItPnR5cGUpOworCQltdXRleF9sb2NrKCZuZXRjcF9tb2R1bGVzX2xvY2spOworCQlmb3JfZWFjaF9tb2R1bGUobmV0Y3AsIHByaXYpIHsKKwkJCW1vZHVsZSA9IHByaXYtPm5ldGNwX21vZHVsZTsKKwkJCWlmICghbW9kdWxlLT5hZGRfYWRkcikKKwkJCQljb250aW51ZTsKKwkJCWVycm9yID0gbW9kdWxlLT5hZGRfYWRkcihwcml2LT5tb2R1bGVfcHJpdiwgbmFkZHIpOworCQkJV0FSTl9PTihlcnJvcik7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZuZXRjcF9tb2R1bGVzX2xvY2spOworCX0KK30KKworc3RhdGljIHZvaWQgbmV0Y3Bfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IG5ldGRldl9od19hZGRyICpuZGV2X2FkZHI7CisJYm9vbCBwcm9taXNjOworCisJcHJvbWlzYyA9IChuZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDIHx8CisJCSAgIG5kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8CisJCSAgIG5ldGRldl9tY19jb3VudChuZGV2KSA+IE5FVENQX01BWF9NQ0FTVF9BRERSKTsKKworCS8qIGZpcnN0IGNsZWFyIGFsbCBtYXJrcyAqLworCW5ldGNwX2FkZHJfY2xlYXJfbWFyayhuZXRjcCk7CisKKwkvKiBuZXh0IGFkZCBuZXcgZW50cmllcywgbWFyayBleGlzdGluZyBvbmVzICovCisJbmV0Y3BfYWRkcl9hZGRfbWFyayhuZXRjcCwgbmRldi0+YnJvYWRjYXN0LCBBRERSX0JDQVNUKTsKKwlmb3JfZWFjaF9kZXZfYWRkcihuZGV2LCBuZGV2X2FkZHIpCisJCW5ldGNwX2FkZHJfYWRkX21hcmsobmV0Y3AsIG5kZXZfYWRkci0+YWRkciwgQUREUl9ERVYpOworCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKG5kZXZfYWRkciwgbmRldikKKwkJbmV0Y3BfYWRkcl9hZGRfbWFyayhuZXRjcCwgbmRldl9hZGRyLT5hZGRyLCBBRERSX1VDQVNUKTsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihuZGV2X2FkZHIsIG5kZXYpCisJCW5ldGNwX2FkZHJfYWRkX21hcmsobmV0Y3AsIG5kZXZfYWRkci0+YWRkciwgQUREUl9NQ0FTVCk7CisKKwlpZiAocHJvbWlzYykKKwkJbmV0Y3BfYWRkcl9hZGRfbWFyayhuZXRjcCwgTlVMTCwgQUREUl9BTlkpOworCisJLyogZmluYWxseSBzd2VlcCBhbmQgY2FsbG91dCBpbnRvIG1vZHVsZXMgKi8KKwluZXRjcF9hZGRyX3N3ZWVwX2RlbChuZXRjcCk7CisJbmV0Y3BfYWRkcl9zd2VlcF9hZGQobmV0Y3ApOworfQorCitzdGF0aWMgdm9pZCBuZXRjcF9mcmVlX25hdmlnYXRvcl9yZXNvdXJjZXMoc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwKQoreworCWludCBpOworCisJaWYgKG5ldGNwLT5yeF9jaGFubmVsKSB7CisJCWtuYXZfZG1hX2Nsb3NlX2NoYW5uZWwobmV0Y3AtPnJ4X2NoYW5uZWwpOworCQluZXRjcC0+cnhfY2hhbm5lbCA9IE5VTEw7CisJfQorCisJaWYgKCFJU19FUlJfT1JfTlVMTChuZXRjcC0+cnhfcG9vbCkpCisJCW5ldGNwX3J4cG9vbF9mcmVlKG5ldGNwKTsKKworCWlmICghSVNfRVJSX09SX05VTEwobmV0Y3AtPnJ4X3F1ZXVlKSkgeworCQlrbmF2X3F1ZXVlX2Nsb3NlKG5ldGNwLT5yeF9xdWV1ZSk7CisJCW5ldGNwLT5yeF9xdWV1ZSA9IE5VTEw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEtOQVZfRE1BX0ZEUV9QRVJfQ0hBTiAmJgorCSAgICAgIUlTX0VSUl9PUl9OVUxMKG5ldGNwLT5yeF9mZHFbaV0pIDsgKytpKSB7CisJCWtuYXZfcXVldWVfY2xvc2UobmV0Y3AtPnJ4X2ZkcVtpXSk7CisJCW5ldGNwLT5yeF9mZHFbaV0gPSBOVUxMOworCX0KKworCWlmICghSVNfRVJSX09SX05VTEwobmV0Y3AtPnR4X2NvbXBsX3EpKSB7CisJCWtuYXZfcXVldWVfY2xvc2UobmV0Y3AtPnR4X2NvbXBsX3EpOworCQluZXRjcC0+dHhfY29tcGxfcSA9IE5VTEw7CisJfQorCisJaWYgKCFJU19FUlJfT1JfTlVMTChuZXRjcC0+dHhfcG9vbCkpIHsKKwkJa25hdl9wb29sX2Rlc3Ryb3kobmV0Y3AtPnR4X3Bvb2wpOworCQluZXRjcC0+dHhfcG9vbCA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IG5ldGNwX3NldHVwX25hdmlnYXRvcl9yZXNvdXJjZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IGtuYXZfcXVldWVfbm90aWZ5X2NvbmZpZyBub3RpZnlfY2ZnOworCXN0cnVjdCBrbmF2X2RtYV9jZmcgY29uZmlnOworCXUzMiBsYXN0X2ZkcSA9IDA7CisJdTggbmFtZVsxNl07CisJaW50IHJldDsKKwlpbnQgaTsKKworCS8qIENyZWF0ZSBSeC9UeCBkZXNjcmlwdG9yIHBvb2xzICovCisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAicngtcG9vbC0lcyIsIG5kZXYtPm5hbWUpOworCW5ldGNwLT5yeF9wb29sID0ga25hdl9wb29sX2NyZWF0ZShuYW1lLCBuZXRjcC0+cnhfcG9vbF9zaXplLAorCQkJCQkJbmV0Y3AtPnJ4X3Bvb2xfcmVnaW9uX2lkKTsKKwlpZiAoSVNfRVJSX09SX05VTEwobmV0Y3AtPnJ4X3Bvb2wpKSB7CisJCWRldl9lcnIobmV0Y3AtPm5kZXZfZGV2LCAiQ291bGRuJ3QgY3JlYXRlIHJ4IHBvb2xcbiIpOworCQlyZXQgPSBQVFJfRVJSKG5ldGNwLT5yeF9wb29sKTsKKwkJZ290byBmYWlsOworCX0KKworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInR4LXBvb2wtJXMiLCBuZGV2LT5uYW1lKTsKKwluZXRjcC0+dHhfcG9vbCA9IGtuYXZfcG9vbF9jcmVhdGUobmFtZSwgbmV0Y3AtPnR4X3Bvb2xfc2l6ZSwKKwkJCQkJCW5ldGNwLT50eF9wb29sX3JlZ2lvbl9pZCk7CisJaWYgKElTX0VSUl9PUl9OVUxMKG5ldGNwLT50eF9wb29sKSkgeworCQlkZXZfZXJyKG5ldGNwLT5uZGV2X2RldiwgIkNvdWxkbid0IGNyZWF0ZSB0eCBwb29sXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihuZXRjcC0+dHhfcG9vbCk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBvcGVuIFR4IGNvbXBsZXRpb24gcXVldWUgKi8KKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJ0eC1jb21wbC0lcyIsIG5kZXYtPm5hbWUpOworCW5ldGNwLT50eF9jb21wbF9xID0ga25hdl9xdWV1ZV9vcGVuKG5hbWUsIG5ldGNwLT50eF9jb21wbF9xaWQsIDApOworCWlmIChJU19FUlJfT1JfTlVMTChuZXRjcC0+dHhfY29tcGxfcSkpIHsKKwkJcmV0ID0gUFRSX0VSUihuZXRjcC0+dHhfY29tcGxfcSk7CisJCWdvdG8gZmFpbDsKKwl9CisJbmV0Y3AtPnR4X2NvbXBsX3FpZCA9IGtuYXZfcXVldWVfZ2V0X2lkKG5ldGNwLT50eF9jb21wbF9xKTsKKworCS8qIFNldCBub3RpZmljYXRpb24gZm9yIFR4IGNvbXBsZXRpb24gKi8KKwlub3RpZnlfY2ZnLmZuID0gbmV0Y3BfdHhfbm90aWZ5OworCW5vdGlmeV9jZmcuZm5fYXJnID0gbmV0Y3A7CisJcmV0ID0ga25hdl9xdWV1ZV9kZXZpY2VfY29udHJvbChuZXRjcC0+dHhfY29tcGxfcSwKKwkJCQkJS05BVl9RVUVVRV9TRVRfTk9USUZJRVIsCisJCQkJCSh1bnNpZ25lZCBsb25nKSZub3RpZnlfY2ZnKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlrbmF2X3F1ZXVlX2Rpc2FibGVfbm90aWZ5KG5ldGNwLT50eF9jb21wbF9xKTsKKworCS8qIG9wZW4gUnggY29tcGxldGlvbiBxdWV1ZSAqLworCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInJ4LWNvbXBsLSVzIiwgbmRldi0+bmFtZSk7CisJbmV0Y3AtPnJ4X3F1ZXVlID0ga25hdl9xdWV1ZV9vcGVuKG5hbWUsIG5ldGNwLT5yeF9xdWV1ZV9pZCwgMCk7CisJaWYgKElTX0VSUl9PUl9OVUxMKG5ldGNwLT5yeF9xdWV1ZSkpIHsKKwkJcmV0ID0gUFRSX0VSUihuZXRjcC0+cnhfcXVldWUpOworCQlnb3RvIGZhaWw7CisJfQorCW5ldGNwLT5yeF9xdWV1ZV9pZCA9IGtuYXZfcXVldWVfZ2V0X2lkKG5ldGNwLT5yeF9xdWV1ZSk7CisKKwkvKiBTZXQgbm90aWZpY2F0aW9uIGZvciBSeCBjb21wbGV0aW9uICovCisJbm90aWZ5X2NmZy5mbiA9IG5ldGNwX3J4X25vdGlmeTsKKwlub3RpZnlfY2ZnLmZuX2FyZyA9IG5ldGNwOworCXJldCA9IGtuYXZfcXVldWVfZGV2aWNlX2NvbnRyb2wobmV0Y3AtPnJ4X3F1ZXVlLAorCQkJCQlLTkFWX1FVRVVFX1NFVF9OT1RJRklFUiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpJm5vdGlmeV9jZmcpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCWtuYXZfcXVldWVfZGlzYWJsZV9ub3RpZnkobmV0Y3AtPnJ4X3F1ZXVlKTsKKworCS8qIG9wZW4gUnggRkRRcyAqLworCWZvciAoaSA9IDA7IGkgPCBLTkFWX0RNQV9GRFFfUEVSX0NIQU4gJiYKKwkgICAgIG5ldGNwLT5yeF9xdWV1ZV9kZXB0aHNbaV0gJiYgbmV0Y3AtPnJ4X2J1ZmZlcl9zaXplc1tpXTsgKytpKSB7CisJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInJ4LWZkcS0lcy0lZCIsIG5kZXYtPm5hbWUsIGkpOworCQluZXRjcC0+cnhfZmRxW2ldID0ga25hdl9xdWV1ZV9vcGVuKG5hbWUsIEtOQVZfUVVFVUVfR1AsIDApOworCQlpZiAoSVNfRVJSX09SX05VTEwobmV0Y3AtPnJ4X2ZkcVtpXSkpIHsKKwkJCXJldCA9IFBUUl9FUlIobmV0Y3AtPnJ4X2ZkcVtpXSk7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKwltZW1zZXQoJmNvbmZpZywgMCwgc2l6ZW9mKGNvbmZpZykpOworCWNvbmZpZy5kaXJlY3Rpb24JCT0gRE1BX0RFVl9UT19NRU07CisJY29uZmlnLnUucnguZWluZm9fcHJlc2VudAk9IHRydWU7CisJY29uZmlnLnUucngucHNpbmZvX3ByZXNlbnQJPSB0cnVlOworCWNvbmZpZy51LnJ4LmVycl9tb2RlCQk9IERNQV9EUk9QOworCWNvbmZpZy51LnJ4LmRlc2NfdHlwZQkJPSBETUFfREVTQ19IT1NUOworCWNvbmZpZy51LnJ4LnBzaW5mb19hdF9zb3AJPSBmYWxzZTsKKwljb25maWcudS5yeC5zb3Bfb2Zmc2V0CQk9IE5FVENQX1NPUF9PRkZTRVQ7CisJY29uZmlnLnUucnguZHN0X3EJCT0gbmV0Y3AtPnJ4X3F1ZXVlX2lkOworCWNvbmZpZy51LnJ4LnRocmVzaAkJPSBETUFfVEhSRVNIX05PTkU7CisKKwlmb3IgKGkgPSAwOyBpIDwgS05BVl9ETUFfRkRRX1BFUl9DSEFOOyArK2kpIHsKKwkJaWYgKG5ldGNwLT5yeF9mZHFbaV0pCisJCQlsYXN0X2ZkcSA9IGtuYXZfcXVldWVfZ2V0X2lkKG5ldGNwLT5yeF9mZHFbaV0pOworCQljb25maWcudS5yeC5mZHFbaV0gPSBsYXN0X2ZkcTsKKwl9CisKKwluZXRjcC0+cnhfY2hhbm5lbCA9IGtuYXZfZG1hX29wZW5fY2hhbm5lbChuZXRjcC0+bmV0Y3BfZGV2aWNlLT5kZXZpY2UsCisJCQkJCW5ldGNwLT5kbWFfY2hhbl9uYW1lLCAmY29uZmlnKTsKKwlpZiAoSVNfRVJSX09SX05VTEwobmV0Y3AtPnJ4X2NoYW5uZWwpKSB7CisJCWRldl9lcnIobmV0Y3AtPm5kZXZfZGV2LCAiZmFpbGVkIG9wZW5pbmcgcnggY2hhbiglc1xuIiwKKwkJCW5ldGNwLT5kbWFfY2hhbl9uYW1lKTsKKwkJZ290byBmYWlsOworCX0KKworCWRldl9kYmcobmV0Y3AtPm5kZXZfZGV2LCAib3BlbmVkIFJYIGNoYW5uZWw6ICVwXG4iLCBuZXRjcC0+cnhfY2hhbm5lbCk7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJbmV0Y3BfZnJlZV9uYXZpZ2F0b3JfcmVzb3VyY2VzKG5ldGNwKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBPcGVuIHRoZSBkZXZpY2UgKi8KK3N0YXRpYyBpbnQgbmV0Y3BfbmRvX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IG5ldGNwX2ludGZfbW9kcHJpdiAqaW50Zl9tb2Rwcml2OworCXN0cnVjdCBuZXRjcF9tb2R1bGUgKm1vZHVsZTsKKwlpbnQgcmV0OworCisJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CisJcmV0ID0gbmV0Y3Bfc2V0dXBfbmF2aWdhdG9yX3Jlc291cmNlcyhuZGV2KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIobmV0Y3AtPm5kZXZfZGV2LCAiRmFpbGVkIHRvIHNldHVwIG5hdmlnYXRvciByZXNvdXJjZXNcbiIpOworCQlnb3RvIGZhaWw7CisJfQorCisJbXV0ZXhfbG9jaygmbmV0Y3BfbW9kdWxlc19sb2NrKTsKKwlmb3JfZWFjaF9tb2R1bGUobmV0Y3AsIGludGZfbW9kcHJpdikgeworCQltb2R1bGUgPSBpbnRmX21vZHByaXYtPm5ldGNwX21vZHVsZTsKKwkJaWYgKG1vZHVsZS0+b3BlbikgeworCQkJcmV0ID0gbW9kdWxlLT5vcGVuKGludGZfbW9kcHJpdi0+bW9kdWxlX3ByaXYsIG5kZXYpOworCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJZGV2X2VycihuZXRjcC0+bmRldl9kZXYsICJtb2R1bGUgb3BlbiBmYWlsZWRcbiIpOworCQkJCWdvdG8gZmFpbF9vcGVuOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmbmV0Y3BfbW9kdWxlc19sb2NrKTsKKworCW5ldGNwX3J4cG9vbF9yZWZpbGwobmV0Y3ApOworCW5hcGlfZW5hYmxlKCZuZXRjcC0+cnhfbmFwaSk7CisJbmFwaV9lbmFibGUoJm5ldGNwLT50eF9uYXBpKTsKKwlrbmF2X3F1ZXVlX2VuYWJsZV9ub3RpZnkobmV0Y3AtPnR4X2NvbXBsX3EpOworCWtuYXZfcXVldWVfZW5hYmxlX25vdGlmeShuZXRjcC0+cnhfcXVldWUpOworCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZGV2KTsKKwlkZXZfZGJnKG5ldGNwLT5uZGV2X2RldiwgIm5ldGNwIGRldmljZSAlcyBvcGVuZWRcbiIsIG5kZXYtPm5hbWUpOworCXJldHVybiAwOworCitmYWlsX29wZW46CisJZm9yX2VhY2hfbW9kdWxlKG5ldGNwLCBpbnRmX21vZHByaXYpIHsKKwkJbW9kdWxlID0gaW50Zl9tb2Rwcml2LT5uZXRjcF9tb2R1bGU7CisJCWlmIChtb2R1bGUtPmNsb3NlKQorCQkJbW9kdWxlLT5jbG9zZShpbnRmX21vZHByaXYtPm1vZHVsZV9wcml2LCBuZGV2KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZuZXRjcF9tb2R1bGVzX2xvY2spOworCitmYWlsOgorCW5ldGNwX2ZyZWVfbmF2aWdhdG9yX3Jlc291cmNlcyhuZXRjcCk7CisJcmV0dXJuIHJldDsKK30KKworLyogQ2xvc2UgdGhlIGRldmljZSAqLworc3RhdGljIGludCBuZXRjcF9uZG9fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3QgbmV0Y3BfaW50Zl9tb2Rwcml2ICppbnRmX21vZHByaXY7CisJc3RydWN0IG5ldGNwX21vZHVsZSAqbW9kdWxlOworCWludCBlcnIgPSAwOworCisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5kZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOworCW5ldGNwX2FkZHJfY2xlYXJfbWFyayhuZXRjcCk7CisJbmV0Y3BfYWRkcl9zd2VlcF9kZWwobmV0Y3ApOworCWtuYXZfcXVldWVfZGlzYWJsZV9ub3RpZnkobmV0Y3AtPnJ4X3F1ZXVlKTsKKwlrbmF2X3F1ZXVlX2Rpc2FibGVfbm90aWZ5KG5ldGNwLT50eF9jb21wbF9xKTsKKwluYXBpX2Rpc2FibGUoJm5ldGNwLT5yeF9uYXBpKTsKKwluYXBpX2Rpc2FibGUoJm5ldGNwLT50eF9uYXBpKTsKKworCW11dGV4X2xvY2soJm5ldGNwX21vZHVsZXNfbG9jayk7CisJZm9yX2VhY2hfbW9kdWxlKG5ldGNwLCBpbnRmX21vZHByaXYpIHsKKwkJbW9kdWxlID0gaW50Zl9tb2Rwcml2LT5uZXRjcF9tb2R1bGU7CisJCWlmIChtb2R1bGUtPmNsb3NlKSB7CisJCQllcnIgPSBtb2R1bGUtPmNsb3NlKGludGZfbW9kcHJpdi0+bW9kdWxlX3ByaXYsIG5kZXYpOworCQkJaWYgKGVyciAhPSAwKQorCQkJCWRldl9lcnIobmV0Y3AtPm5kZXZfZGV2LCAiQ2xvc2UgZmFpbGVkXG4iKTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJm5ldGNwX21vZHVsZXNfbG9jayk7CisKKwkvKiBSZWN5Y2xlIFJ4IGRlc2NyaXB0b3JzIGZyb20gY29tcGxldGlvbiBxdWV1ZSAqLworCW5ldGNwX2VtcHR5X3J4X3F1ZXVlKG5ldGNwKTsKKworCS8qIFJlY3ljbGUgVHggZGVzY3JpcHRvcnMgZnJvbSBjb21wbGV0aW9uIHF1ZXVlICovCisJbmV0Y3BfcHJvY2Vzc190eF9jb21wbF9wYWNrZXRzKG5ldGNwLCBuZXRjcC0+dHhfcG9vbF9zaXplKTsKKworCWlmIChrbmF2X3Bvb2xfY291bnQobmV0Y3AtPnR4X3Bvb2wpICE9IG5ldGNwLT50eF9wb29sX3NpemUpCisJCWRldl9lcnIobmV0Y3AtPm5kZXZfZGV2LCAiTG9zdCAoJWQpIFR4IGRlc2NzXG4iLAorCQkJbmV0Y3AtPnR4X3Bvb2xfc2l6ZSAtIGtuYXZfcG9vbF9jb3VudChuZXRjcC0+dHhfcG9vbCkpOworCisJbmV0Y3BfZnJlZV9uYXZpZ2F0b3JfcmVzb3VyY2VzKG5ldGNwKTsKKwlkZXZfZGJnKG5ldGNwLT5uZGV2X2RldiwgIm5ldGNwIGRldmljZSAlcyBzdG9wcGVkXG4iLCBuZGV2LT5uYW1lKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZXRjcF9uZG9faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCisJCQkgICBzdHJ1Y3QgaWZyZXEgKnJlcSwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3QgbmV0Y3BfaW50Zl9tb2Rwcml2ICppbnRmX21vZHByaXY7CisJc3RydWN0IG5ldGNwX21vZHVsZSAqbW9kdWxlOworCWludCByZXQgPSAtMSwgZXJyID0gLUVPUE5PVFNVUFA7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcobmRldikpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmbmV0Y3BfbW9kdWxlc19sb2NrKTsKKwlmb3JfZWFjaF9tb2R1bGUobmV0Y3AsIGludGZfbW9kcHJpdikgeworCQltb2R1bGUgPSBpbnRmX21vZHByaXYtPm5ldGNwX21vZHVsZTsKKwkJaWYgKCFtb2R1bGUtPmlvY3RsKQorCQkJY29udGludWU7CisKKwkJZXJyID0gbW9kdWxlLT5pb2N0bChpbnRmX21vZHByaXYtPm1vZHVsZV9wcml2LCByZXEsIGNtZCk7CisJCWlmICgoZXJyIDwgMCkgJiYgKGVyciAhPSAtRU9QTk9UU1VQUCkpIHsKKwkJCXJldCA9IGVycjsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChlcnIgPT0gMCkKKwkJCXJldCA9IGVycjsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJm5ldGNwX21vZHVsZXNfbG9jayk7CisJcmV0dXJuIChyZXQgPT0gMCkgPyAwIDogZXJyOworfQorCitzdGF0aWMgaW50IG5ldGNwX25kb19jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCS8qIE1UVSA8IDY4IGlzIGFuIGVycm9yIGZvciBJUHY0IHRyYWZmaWMgKi8KKwlpZiAoKG5ld19tdHUgPCA2OCkgfHwKKwkgICAgKG5ld19tdHUgPiAoTkVUQ1BfTUFYX0ZSQU1FX1NJWkUgLSBFVEhfSExFTiAtIEVUSF9GQ1NfTEVOKSkpIHsKKwkJZGV2X2VycihuZXRjcC0+bmRldl9kZXYsICJJbnZhbGlkIG10dSBzaXplID0gJWRcbiIsIG5ld19tdHUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwluZGV2LT5tdHUgPSBuZXdfbXR1OworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuZXRjcF9uZG9fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwl1bnNpZ25lZCBpbnQgZGVzY3MgPSBrbmF2X3Bvb2xfY291bnQobmV0Y3AtPnR4X3Bvb2wpOworCisJZGV2X2VycihuZXRjcC0+bmRldl9kZXYsICJ0cmFuc21pdCB0aW1lZCBvdXQgdHggZGVzY3MoJWQpXG4iLCBkZXNjcyk7CisJbmV0Y3BfcHJvY2Vzc190eF9jb21wbF9wYWNrZXRzKG5ldGNwLCBuZXRjcC0+dHhfcG9vbF9zaXplKTsKKwluZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5kZXYpOworfQorCitzdGF0aWMgaW50IG5ldGNwX3J4X2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIF9fYmUxNiBwcm90bywgdTE2IHZpZCkKK3sKKwlzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3QgbmV0Y3BfaW50Zl9tb2Rwcml2ICppbnRmX21vZHByaXY7CisJc3RydWN0IG5ldGNwX21vZHVsZSAqbW9kdWxlOworCWludCBlcnIgPSAwOworCisJZGV2X2RiZyhuZXRjcC0+bmRldl9kZXYsICJhZGRpbmcgcnggdmxhbiBpZDogJWRcbiIsIHZpZCk7CisKKwltdXRleF9sb2NrKCZuZXRjcF9tb2R1bGVzX2xvY2spOworCWZvcl9lYWNoX21vZHVsZShuZXRjcCwgaW50Zl9tb2Rwcml2KSB7CisJCW1vZHVsZSA9IGludGZfbW9kcHJpdi0+bmV0Y3BfbW9kdWxlOworCQlpZiAoKG1vZHVsZS0+YWRkX3ZpZCkgJiYgKHZpZCAhPSAwKSkgeworCQkJZXJyID0gbW9kdWxlLT5hZGRfdmlkKGludGZfbW9kcHJpdi0+bW9kdWxlX3ByaXYsIHZpZCk7CisJCQlpZiAoZXJyICE9IDApIHsKKwkJCQlkZXZfZXJyKG5ldGNwLT5uZGV2X2RldiwgIkNvdWxkIG5vdCBhZGQgdmxhbiBpZCA9ICVkXG4iLAorCQkJCQl2aWQpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCW11dGV4X3VubG9jaygmbmV0Y3BfbW9kdWxlc19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG5ldGNwX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBfX2JlMTYgcHJvdG8sIHUxNiB2aWQpCit7CisJc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IG5ldGNwX2ludGZfbW9kcHJpdiAqaW50Zl9tb2Rwcml2OworCXN0cnVjdCBuZXRjcF9tb2R1bGUgKm1vZHVsZTsKKwlpbnQgZXJyID0gMDsKKworCWRldl9kYmcobmV0Y3AtPm5kZXZfZGV2LCAicmVtb3ZpbmcgcnggdmxhbiBpZDogJWRcbiIsIHZpZCk7CisKKwltdXRleF9sb2NrKCZuZXRjcF9tb2R1bGVzX2xvY2spOworCWZvcl9lYWNoX21vZHVsZShuZXRjcCwgaW50Zl9tb2Rwcml2KSB7CisJCW1vZHVsZSA9IGludGZfbW9kcHJpdi0+bmV0Y3BfbW9kdWxlOworCQlpZiAobW9kdWxlLT5kZWxfdmlkKSB7CisJCQllcnIgPSBtb2R1bGUtPmRlbF92aWQoaW50Zl9tb2Rwcml2LT5tb2R1bGVfcHJpdiwgdmlkKTsKKwkJCWlmIChlcnIgIT0gMCkgeworCQkJCWRldl9lcnIobmV0Y3AtPm5kZXZfZGV2LCAiQ291bGQgbm90IGRlbGV0ZSB2bGFuIGlkID0gJWRcbiIsCisJCQkJCXZpZCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZuZXRjcF9tb2R1bGVzX2xvY2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB1MTYgbmV0Y3Bfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICB2b2lkICphY2NlbF9wcml2LAorCQkJICAgICAgc2VsZWN0X3F1ZXVlX2ZhbGxiYWNrX3QgZmFsbGJhY2spCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmV0Y3Bfc2V0dXBfdGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggbnVtX3RjKQoreworCWludCBpOworCisJLyogc2V0dXAgdGMgbXVzdCBiZSBjYWxsZWQgdW5kZXIgcnRubCBsb2NrICovCisJQVNTRVJUX1JUTkwoKTsKKworCS8qIFNhbml0eS1jaGVjayB0aGUgbnVtYmVyIG9mIHRyYWZmaWMgY2xhc3NlcyByZXF1ZXN0ZWQgKi8KKwlpZiAoKGRldi0+cmVhbF9udW1fdHhfcXVldWVzIDw9IDEpIHx8CisJICAgIChkZXYtPnJlYWxfbnVtX3R4X3F1ZXVlcyA8IG51bV90YykpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ29uZmlndXJlIHRyYWZmaWMgY2xhc3MgdG8gcXVldWUgbWFwcGluZ3MgKi8KKwlpZiAobnVtX3RjKSB7CisJCW5ldGRldl9zZXRfbnVtX3RjKGRldiwgbnVtX3RjKTsKKwkJZm9yIChpID0gMDsgaSA8IG51bV90YzsgaSsrKQorCQkJbmV0ZGV2X3NldF90Y19xdWV1ZShkZXYsIGksIDEsIGkpOworCX0gZWxzZSB7CisJCW5ldGRldl9yZXNldF90YyhkZXYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIG5ldGNwX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9IG5ldGNwX25kb19vcGVuLAorCS5uZG9fc3RvcAkJPSBuZXRjcF9uZG9fc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gbmV0Y3BfbmRvX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfcnhfbW9kZQk9IG5ldGNwX3NldF9yeF9tb2RlLAorCS5uZG9fZG9faW9jdGwgICAgICAgICAgID0gbmV0Y3BfbmRvX2lvY3RsLAorCS5uZG9fY2hhbmdlX210dQkJPSBuZXRjcF9uZG9fY2hhbmdlX210dSwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9IG5ldGNwX3J4X2FkZF92aWQsCisJLm5kb192bGFuX3J4X2tpbGxfdmlkCT0gbmV0Y3Bfcnhfa2lsbF92aWQsCisJLm5kb190eF90aW1lb3V0CQk9IG5ldGNwX25kb190eF90aW1lb3V0LAorCS5uZG9fc2VsZWN0X3F1ZXVlCT0gbmV0Y3Bfc2VsZWN0X3F1ZXVlLAorCS5uZG9fc2V0dXBfdGMJCT0gbmV0Y3Bfc2V0dXBfdGMsCit9OworCitzdGF0aWMgaW50IG5ldGNwX2NyZWF0ZV9pbnRlcmZhY2Uoc3RydWN0IG5ldGNwX2RldmljZSAqbmV0Y3BfZGV2aWNlLAorCQkJCSAgc3RydWN0IGRldmljZV9ub2RlICpub2RlX2ludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBuZXRjcF9kZXZpY2UtPmRldmljZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OworCXJlc291cmNlX3NpemVfdCBzaXplOworCXN0cnVjdCByZXNvdXJjZSByZXM7CisJdm9pZCBfX2lvbWVtICplZnVzZSA9IE5VTEw7CisJdTMyIGVmdXNlX21hYyA9IDA7CisJY29uc3Qgdm9pZCAqbWFjX2FkZHI7CisJdTggZWZ1c2VfbWFjX2FkZHJbNl07CisJdTMyIHRlbXBbMl07CisJaW50IHJldCA9IDA7CisKKwluZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXFzKHNpemVvZigqbmV0Y3ApLCAxLCAxKTsKKwlpZiAoIW5kZXYpIHsKKwkJZGV2X2VycihkZXYsICJFcnJvciBhbGxvY2F0aW5nIG5ldGRldlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CisJbmRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0NUQUdfRklMVEVSOworCW5kZXYtPmh3X2ZlYXR1cmVzID0gbmRldi0+ZmVhdHVyZXM7CisJbmRldi0+dmxhbl9mZWF0dXJlcyB8PSAgTkVUSUZfRl9TRzsKKworCW5ldGNwID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3Bpbl9sb2NrX2luaXQoJm5ldGNwLT5sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmbmV0Y3AtPm1vZHVsZV9oZWFkKTsKKwlJTklUX0xJU1RfSEVBRCgmbmV0Y3AtPnR4aG9va19saXN0X2hlYWQpOworCUlOSVRfTElTVF9IRUFEKCZuZXRjcC0+cnhob29rX2xpc3RfaGVhZCk7CisJSU5JVF9MSVNUX0hFQUQoJm5ldGNwLT5hZGRyX2xpc3QpOworCW5ldGNwLT5uZXRjcF9kZXZpY2UgPSBuZXRjcF9kZXZpY2U7CisJbmV0Y3AtPmRldiA9IG5ldGNwX2RldmljZS0+ZGV2aWNlOworCW5ldGNwLT5uZGV2ID0gbmRldjsKKwluZXRjcC0+bmRldl9kZXYgID0gJm5kZXYtPmRldjsKKwluZXRjcC0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KG5ldGNwX2RlYnVnX2xldmVsLCBORVRDUF9ERUJVRyk7CisJbmV0Y3AtPnR4X3BhdXNlX3RocmVzaG9sZCA9IE1BWF9TS0JfRlJBR1M7CisJbmV0Y3AtPnR4X3Jlc3VtZV90aHJlc2hvbGQgPSBuZXRjcC0+dHhfcGF1c2VfdGhyZXNob2xkOworCW5ldGNwLT5ub2RlX2ludGVyZmFjZSA9IG5vZGVfaW50ZXJmYWNlOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZV9pbnRlcmZhY2UsICJlZnVzZS1tYWMiLCAmZWZ1c2VfbWFjKTsKKwlpZiAoZWZ1c2VfbWFjKSB7CisJCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5vZGUsIE5FVENQX0VGVVNFX1JFR19JTkRFWCwgJnJlcykpIHsKKwkJCWRldl9lcnIoZGV2LCAiY291bGQgbm90IGZpbmQgZWZ1c2UtbWFjIHJlZyByZXNvdXJjZVxuIik7CisJCQlyZXQgPSAtRU5PREVWOworCQkJZ290byBxdWl0OworCQl9CisJCXNpemUgPSByZXNvdXJjZV9zaXplKCZyZXMpOworCisJCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oZGV2LCByZXMuc3RhcnQsIHNpemUsCisJCQkJCSAgICAgZGV2X25hbWUoZGV2KSkpIHsKKwkJCWRldl9lcnIoZGV2LCAiY291bGQgbm90IHJlc2VydmUgcmVzb3VyY2VcbiIpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gcXVpdDsKKwkJfQorCisJCWVmdXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoZGV2LCByZXMuc3RhcnQsIHNpemUpOworCQlpZiAoIWVmdXNlKSB7CisJCQlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBtYXAgcmVzb3VyY2VcbiIpOworCQkJZGV2bV9yZWxlYXNlX21lbV9yZWdpb24oZGV2LCByZXMuc3RhcnQsIHNpemUpOworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gcXVpdDsKKwkJfQorCisJCWVtYWNfYXJjaF9nZXRfbWFjX2FkZHIoZWZ1c2VfbWFjX2FkZHIsIGVmdXNlKTsKKwkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZWZ1c2VfbWFjX2FkZHIpKQorCQkJZXRoZXJfYWRkcl9jb3B5KG5kZXYtPmRldl9hZGRyLCBlZnVzZV9tYWNfYWRkcik7CisJCWVsc2UKKwkJCXJhbmRvbV9ldGhlcl9hZGRyKG5kZXYtPmRldl9hZGRyKTsKKworCQlkZXZtX2lvdW5tYXAoZGV2LCBlZnVzZSk7CisJCWRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKGRldiwgcmVzLnN0YXJ0LCBzaXplKTsKKwl9IGVsc2UgeworCQltYWNfYWRkciA9IG9mX2dldF9tYWNfYWRkcmVzcyhub2RlX2ludGVyZmFjZSk7CisJCWlmIChtYWNfYWRkcikKKwkJCWV0aGVyX2FkZHJfY29weShuZGV2LT5kZXZfYWRkciwgbWFjX2FkZHIpOworCQllbHNlCisJCQlyYW5kb21fZXRoZXJfYWRkcihuZGV2LT5kZXZfYWRkcik7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobm9kZV9pbnRlcmZhY2UsICJyeC1jaGFubmVsIiwKKwkJCQkgICAgICAmbmV0Y3AtPmRtYV9jaGFuX25hbWUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAibWlzc2luZyBcInJ4LWNoYW5uZWxcIiBwYXJhbWV0ZXJcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHF1aXQ7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZV9pbnRlcmZhY2UsICJyeC1xdWV1ZSIsCisJCQkJICAgJm5ldGNwLT5yeF9xdWV1ZV9pZCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3dhcm4oZGV2LCAibWlzc2luZyBcInJ4LXF1ZXVlXCIgcGFyYW1ldGVyXG4iKTsKKwkJbmV0Y3AtPnJ4X3F1ZXVlX2lkID0gS05BVl9RVUVVRV9RUEVORDsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShub2RlX2ludGVyZmFjZSwgInJ4LXF1ZXVlLWRlcHRoIiwKKwkJCQkJIG5ldGNwLT5yeF9xdWV1ZV9kZXB0aHMsCisJCQkJCSBLTkFWX0RNQV9GRFFfUEVSX0NIQU4pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAibWlzc2luZyBcInJ4LXF1ZXVlLWRlcHRoXCIgcGFyYW1ldGVyXG4iKTsKKwkJbmV0Y3AtPnJ4X3F1ZXVlX2RlcHRoc1swXSA9IDEyODsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShub2RlX2ludGVyZmFjZSwgInJ4LWJ1ZmZlci1zaXplIiwKKwkJCQkJIG5ldGNwLT5yeF9idWZmZXJfc2l6ZXMsCisJCQkJCSBLTkFWX0RNQV9GRFFfUEVSX0NIQU4pOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJtaXNzaW5nIFwicngtYnVmZmVyLXNpemVcIiBwYXJhbWV0ZXJcbiIpOworCQluZXRjcC0+cnhfYnVmZmVyX3NpemVzWzBdID0gMTUzNjsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShub2RlX2ludGVyZmFjZSwgInJ4LXBvb2wiLCB0ZW1wLCAyKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgXCJyeC1wb29sXCIgcGFyYW1ldGVyXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBxdWl0OworCX0KKwluZXRjcC0+cnhfcG9vbF9zaXplID0gdGVtcFswXTsKKwluZXRjcC0+cnhfcG9vbF9yZWdpb25faWQgPSB0ZW1wWzFdOworCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkobm9kZV9pbnRlcmZhY2UsICJ0eC1wb29sIiwgdGVtcCwgMik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJtaXNzaW5nIFwidHgtcG9vbFwiIHBhcmFtZXRlclxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gcXVpdDsKKwl9CisJbmV0Y3AtPnR4X3Bvb2xfc2l6ZSA9IHRlbXBbMF07CisJbmV0Y3AtPnR4X3Bvb2xfcmVnaW9uX2lkID0gdGVtcFsxXTsKKworCWlmIChuZXRjcC0+dHhfcG9vbF9zaXplIDwgTUFYX1NLQl9GUkFHUykgeworCQlkZXZfZXJyKGRldiwgInR4LXBvb2wgc2l6ZSB0b28gc21hbGwsIG11c3QgYmUgYXRsZWFzdCglbGQpXG4iLAorCQkJTUFYX1NLQl9GUkFHUyk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gcXVpdDsKKwl9CisKKwlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlX2ludGVyZmFjZSwgInR4LWNvbXBsZXRpb24tcXVldWUiLAorCQkJCSAgICZuZXRjcC0+dHhfY29tcGxfcWlkKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfd2FybihkZXYsICJtaXNzaW5nIFwidHgtY29tcGxldGlvbi1xdWV1ZVwiIHBhcmFtZXRlclxuIik7CisJCW5ldGNwLT50eF9jb21wbF9xaWQgPSBLTkFWX1FVRVVFX1FQRU5EOworCX0KKworCS8qIE5BUEkgcmVnaXN0ZXIgKi8KKwluZXRpZl9uYXBpX2FkZChuZGV2LCAmbmV0Y3AtPnJ4X25hcGksIG5ldGNwX3J4X3BvbGwsIE5FVENQX05BUElfV0VJR0hUKTsKKwluZXRpZl9uYXBpX2FkZChuZGV2LCAmbmV0Y3AtPnR4X25hcGksIG5ldGNwX3R4X3BvbGwsIE5FVENQX05BUElfV0VJR0hUKTsKKworCS8qIFJlZ2lzdGVyIHRoZSBuZXR3b3JrIGRldmljZSAqLworCW5kZXYtPmRldl9pZAkJPSAwOworCW5kZXYtPndhdGNoZG9nX3RpbWVvCT0gTkVUQ1BfVFhfVElNRU9VVDsKKwluZGV2LT5uZXRkZXZfb3BzCT0gJm5ldGNwX25ldGRldl9vcHM7CisJU0VUX05FVERFVl9ERVYobmRldiwgZGV2KTsKKworCWxpc3RfYWRkX3RhaWwoJm5ldGNwLT5pbnRlcmZhY2VfbGlzdCwgJm5ldGNwX2RldmljZS0+aW50ZXJmYWNlX2hlYWQpOworCXJldHVybiAwOworCitxdWl0OgorCWZyZWVfbmV0ZGV2KG5kZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG5ldGNwX2RlbGV0ZV9pbnRlcmZhY2Uoc3RydWN0IG5ldGNwX2RldmljZSAqbmV0Y3BfZGV2aWNlLAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBuZXRjcF9pbnRmX21vZHByaXYgKmludGZfbW9kcHJpdiwgKnRtcDsKKwlzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3QgbmV0Y3BfbW9kdWxlICptb2R1bGU7CisKKwlkZXZfZGJnKG5ldGNwX2RldmljZS0+ZGV2aWNlLCAiUmVtb3ZpbmcgaW50ZXJmYWNlIFwiJXNcIlxuIiwKKwkJbmRldi0+bmFtZSk7CisKKwkvKiBOb3RpZnkgZWFjaCBvZiB0aGUgbW9kdWxlcyB0aGF0IHRoZSBpbnRlcmZhY2UgaXMgZ29pbmcgYXdheSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbnRmX21vZHByaXYsIHRtcCwgJm5ldGNwLT5tb2R1bGVfaGVhZCwKKwkJCQkgaW50Zl9saXN0KSB7CisJCW1vZHVsZSA9IGludGZfbW9kcHJpdi0+bmV0Y3BfbW9kdWxlOworCQlkZXZfZGJnKG5ldGNwX2RldmljZS0+ZGV2aWNlLCAiUmVsZWFzaW5nIG1vZHVsZSBcIiVzXCJcbiIsCisJCQltb2R1bGUtPm5hbWUpOworCQlpZiAobW9kdWxlLT5yZWxlYXNlKQorCQkJbW9kdWxlLT5yZWxlYXNlKGludGZfbW9kcHJpdi0+bW9kdWxlX3ByaXYpOworCQlsaXN0X2RlbCgmaW50Zl9tb2Rwcml2LT5pbnRmX2xpc3QpOworCQlrZnJlZShpbnRmX21vZHByaXYpOworCX0KKwlXQVJOKCFsaXN0X2VtcHR5KCZuZXRjcC0+bW9kdWxlX2hlYWQpLCAiJXMgaW50ZXJmYWNlIG1vZHVsZSBsaXN0IGlzIG5vdCBlbXB0eSFcbiIsCisJICAgICBuZGV2LT5uYW1lKTsKKworCWxpc3RfZGVsKCZuZXRjcC0+aW50ZXJmYWNlX2xpc3QpOworCisJb2Zfbm9kZV9wdXQobmV0Y3AtPm5vZGVfaW50ZXJmYWNlKTsKKwl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKKwluZXRpZl9uYXBpX2RlbCgmbmV0Y3AtPnJ4X25hcGkpOworCWZyZWVfbmV0ZGV2KG5kZXYpOworfQorCitzdGF0aWMgaW50IG5ldGNwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7CisJc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwX2ludGYsICpuZXRjcF90bXA7CisJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgKmludGVyZmFjZXM7CisJc3RydWN0IG5ldGNwX2RldmljZSAqbmV0Y3BfZGV2aWNlOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IG5ldGNwX21vZHVsZSAqbW9kdWxlOworCWludCByZXQ7CisKKwlpZiAoIW5vZGUpIHsKKwkJZGV2X2VycihkZXYsICJjb3VsZCBub3QgZmluZCBkZXZpY2UgaW5mb1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCS8qIEFsbG9jYXRlIGEgbmV3IE5FVENQIGRldmljZSBpbnN0YW5jZSAqLworCW5ldGNwX2RldmljZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbmV0Y3BfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXRjcF9kZXZpY2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisJcmV0ID0gcG1fcnVudGltZV9nZXRfc3luYygmcGRldi0+ZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgTkVUQ1AgcG93ZXItZG9tYWluXG4iKTsKKwkJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEluaXRpYWxpemUgdGhlIE5FVENQIGRldmljZSBpbnN0YW5jZSAqLworCUlOSVRfTElTVF9IRUFEKCZuZXRjcF9kZXZpY2UtPmludGVyZmFjZV9oZWFkKTsKKwlJTklUX0xJU1RfSEVBRCgmbmV0Y3BfZGV2aWNlLT5tb2Rwcml2X2hlYWQpOworCW5ldGNwX2RldmljZS0+ZGV2aWNlID0gZGV2OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5ldGNwX2RldmljZSk7CisKKwkvKiBjcmVhdGUgaW50ZXJmYWNlcyAqLworCWludGVyZmFjZXMgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShub2RlLCAibmV0Y3AtaW50ZXJmYWNlcyIpOworCWlmICghaW50ZXJmYWNlcykgeworCQlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBmaW5kIG5ldGNwLWludGVyZmFjZXMgbm9kZVxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gcHJvYmVfcXVpdDsKKwl9CisKKwlmb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfb2Zfbm9kZShpbnRlcmZhY2VzLCBjaGlsZCkgeworCQlyZXQgPSBuZXRjcF9jcmVhdGVfaW50ZXJmYWNlKG5ldGNwX2RldmljZSwgY2hpbGQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBjcmVhdGUgaW50ZXJmYWNlKCVzKVxuIiwKKwkJCQljaGlsZC0+bmFtZSk7CisJCQlnb3RvIHByb2JlX3F1aXRfaW50ZXJmYWNlOworCQl9CisJfQorCisJLyogQWRkIHRoZSBkZXZpY2UgaW5zdGFuY2UgdG8gdGhlIGxpc3QgKi8KKwlsaXN0X2FkZF90YWlsKCZuZXRjcF9kZXZpY2UtPmRldmljZV9saXN0LCAmbmV0Y3BfZGV2aWNlcyk7CisKKwkvKiBQcm9iZSAmIGF0dGFjaCBhbnkgbW9kdWxlcyBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KKwltdXRleF9sb2NrKCZuZXRjcF9tb2R1bGVzX2xvY2spOworCWZvcl9lYWNoX25ldGNwX21vZHVsZShtb2R1bGUpIHsKKwkJcmV0ID0gbmV0Y3BfbW9kdWxlX3Byb2JlKG5ldGNwX2RldmljZSwgbW9kdWxlKTsKKwkJaWYgKHJldCA8IDApCisJCQlkZXZfZXJyKGRldiwgIm1vZHVsZSglcykgcHJvYmUgZmFpbGVkXG4iLCBtb2R1bGUtPm5hbWUpOworCX0KKwltdXRleF91bmxvY2soJm5ldGNwX21vZHVsZXNfbG9jayk7CisJcmV0dXJuIDA7CisKK3Byb2JlX3F1aXRfaW50ZXJmYWNlOgorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShuZXRjcF9pbnRmLCBuZXRjcF90bXAsCisJCQkJICZuZXRjcF9kZXZpY2UtPmludGVyZmFjZV9oZWFkLAorCQkJCSBpbnRlcmZhY2VfbGlzdCkgeworCQluZXRjcF9kZWxldGVfaW50ZXJmYWNlKG5ldGNwX2RldmljZSwgbmV0Y3BfaW50Zi0+bmRldik7CisJfQorCitwcm9iZV9xdWl0OgorCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbmV0Y3BfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5ldGNwX2RldmljZSAqbmV0Y3BfZGV2aWNlID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldGNwX2luc3RfbW9kcHJpdiAqaW5zdF9tb2Rwcml2LCAqdG1wOworCXN0cnVjdCBuZXRjcF9tb2R1bGUgKm1vZHVsZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbnN0X21vZHByaXYsIHRtcCwgJm5ldGNwX2RldmljZS0+bW9kcHJpdl9oZWFkLAorCQkJCSBpbnN0X2xpc3QpIHsKKwkJbW9kdWxlID0gaW5zdF9tb2Rwcml2LT5uZXRjcF9tb2R1bGU7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgIlJlbW92aW5nIG1vZHVsZSBcIiVzXCJcbiIsIG1vZHVsZS0+bmFtZSk7CisJCW1vZHVsZS0+cmVtb3ZlKG5ldGNwX2RldmljZSwgaW5zdF9tb2Rwcml2LT5tb2R1bGVfcHJpdik7CisJCWxpc3RfZGVsKCZpbnN0X21vZHByaXYtPmluc3RfbGlzdCk7CisJCWtmcmVlKGluc3RfbW9kcHJpdik7CisJfQorCVdBUk4oIWxpc3RfZW1wdHkoJm5ldGNwX2RldmljZS0+aW50ZXJmYWNlX2hlYWQpLCAiJXMgaW50ZXJmYWNlIGxpc3Qgbm90IGVtcHR5IVxuIiwKKwkgICAgIHBkZXYtPm5hbWUpOworCisJZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBuZXRjcF9kZXZpY2UpOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBvZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAidGksbmV0Y3AtMS4wIiwgfSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBvZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG5ldGNwX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQkJPSAibmV0Y3AtMS4wIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUJPSBvZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IG5ldGNwX3Byb2JlLAorCS5yZW1vdmUgPSBuZXRjcF9yZW1vdmUsCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihuZXRjcF9kcml2ZXIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRJIE5FVENQIGRyaXZlciBmb3IgS2V5c3RvbmUgU09DcyIpOworTU9EVUxFX0FVVEhPUigiU2FuZGVlcCBOYWlyIDxzYW5kZWVwX25AdGkuY29tIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9uZXRjcF9ldGhzcy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvbmV0Y3BfZXRoc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGY1Y2U1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvbmV0Y3BfZXRoc3MuYwpAQCAtMCwwICsxLDIxNTkgQEAKKy8qCisgKiBLZXlzdG9uZSBHQkUgYW5kIFhHQkUgc3Vic3lzdGVtIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisgKiBBdXRob3JzOglTYW5kZWVwIE5haXIgPHNhbmRlZXBfbkB0aS5jb20+CisgKgkJU2FuZGVlcCBQYXVscmFqIDxzLXBhdWxyYWpAdGkuY29tPgorICoJCUN5cmlsIENoZW1wYXJhdGh5IDxjeXJpbEB0aS5jb20+CisgKgkJU2FudG9zaCBTaGlsaW1rYXIgPHNhbnRvc2guc2hpbGlta2FyQHRpLmNvbT4KKyAqCQlXaW5nbWFuIEt3b2sgPHcta3dvazJAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkICJhcyBpcyIgV0lUSE9VVCBBTlkgV0FSUkFOVFkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZDsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CisgKiBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX21kaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKworI2luY2x1ZGUgImNwc3dfYWxlLmgiCisjaW5jbHVkZSAibmV0Y3AuaCIKKworI2RlZmluZSBORVRDUF9EUklWRVJfTkFNRQkJIlRJIEtleVN0b25lIEV0aGVybmV0IERyaXZlciIKKyNkZWZpbmUgTkVUQ1BfRFJJVkVSX1ZFUlNJT04JCSJ2MS4wIgorCisjZGVmaW5lIEdCRV9JREVOVChyZWcpCQkJKChyZWcgPj4gMTYpICYgMHhmZmZmKQorI2RlZmluZSBHQkVfTUFKT1JfVkVSU0lPTihyZWcpCQkocmVnID4+IDggJiAweDcpCisjZGVmaW5lIEdCRV9NSU5PUl9WRVJTSU9OKHJlZykJCShyZWcgJiAweGZmKQorI2RlZmluZSBHQkVfUlRMX1ZFUlNJT04ocmVnKQkJKChyZWcgPj4gMTEpICYgMHgxZikKKworLyogMUcgRXRoZXJuZXQgU1MgZGVmaW5lcyAqLworI2RlZmluZSBHQkVfTU9EVUxFX05BTUUJCQkibmV0Y3AtZ2JlIgorI2RlZmluZSBHQkVfU1NfVkVSU0lPTl8xNAkJMHg0ZWQyMTEwNAorCisjZGVmaW5lIEdCRTEzX1NHTUlJX01PRFVMRV9PRkZTRVQJMHgxMDAKKyNkZWZpbmUgR0JFMTNfU0dNSUkzNF9NT0RVTEVfT0ZGU0VUCTB4NDAwCisjZGVmaW5lIEdCRTEzX1NXSVRDSF9NT0RVTEVfT0ZGU0VUCTB4ODAwCisjZGVmaW5lIEdCRTEzX0hPU1RfUE9SVF9PRkZTRVQJCTB4ODM0CisjZGVmaW5lIEdCRTEzX1NMQVZFX1BPUlRfT0ZGU0VUCQkweDg2MAorI2RlZmluZSBHQkUxM19FTUFDX09GRlNFVAkJMHg5MDAKKyNkZWZpbmUgR0JFMTNfU0xBVkVfUE9SVDJfT0ZGU0VUCTB4YTAwCisjZGVmaW5lIEdCRTEzX0hXX1NUQVRTX09GRlNFVAkJMHhiMDAKKyNkZWZpbmUgR0JFMTNfQUxFX09GRlNFVAkJMHhlMDAKKyNkZWZpbmUgR0JFMTNfSE9TVF9QT1JUX05VTQkJMAorI2RlZmluZSBHQkUxM19OVU1fU0xBVkVTCQk0CisjZGVmaW5lIEdCRTEzX05VTV9BTEVfUE9SVFMJCShHQkUxM19OVU1fU0xBVkVTICsgMSkKKyNkZWZpbmUgR0JFMTNfTlVNX0FMRV9FTlRSSUVTCQkxMDI0CisKKy8qIDEwRyBFdGhlcm5ldCBTUyBkZWZpbmVzICovCisjZGVmaW5lIFhHQkVfTU9EVUxFX05BTUUJCSJuZXRjcC14Z2JlIgorI2RlZmluZSBYR0JFX1NTX1ZFUlNJT05fMTAJCTB4NGVlNDIxMDAKKworI2RlZmluZSBYR0JFX1NFUkRFU19SRUdfSU5ERVgJCTEKKyNkZWZpbmUgWEdCRTEwX1NHTUlJX01PRFVMRV9PRkZTRVQJMHgxMDAKKyNkZWZpbmUgWEdCRTEwX1NXSVRDSF9NT0RVTEVfT0ZGU0VUCTB4MTAwMAorI2RlZmluZSBYR0JFMTBfSE9TVF9QT1JUX09GRlNFVAkJMHgxMDM0CisjZGVmaW5lIFhHQkUxMF9TTEFWRV9QT1JUX09GRlNFVAkweDEwNjQKKyNkZWZpbmUgWEdCRTEwX0VNQUNfT0ZGU0VUCQkweDE0MDAKKyNkZWZpbmUgWEdCRTEwX0FMRV9PRkZTRVQJCTB4MTcwMAorI2RlZmluZSBYR0JFMTBfSFdfU1RBVFNfT0ZGU0VUCQkweDE4MDAKKyNkZWZpbmUgWEdCRTEwX0hPU1RfUE9SVF9OVU0JCTAKKyNkZWZpbmUgWEdCRTEwX05VTV9TTEFWRVMJCTIKKyNkZWZpbmUgWEdCRTEwX05VTV9BTEVfUE9SVFMJCShYR0JFMTBfTlVNX1NMQVZFUyArIDEpCisjZGVmaW5lIFhHQkUxMF9OVU1fQUxFX0VOVFJJRVMJCTEwMjQKKworI2RlZmluZQlHQkVfVElNRVJfSU5URVJWQUwJCQkoSFogLyAyKQorCisvKiBTb2Z0IHJlc2V0IHJlZ2lzdGVyIHZhbHVlcyAqLworI2RlZmluZSBTT0ZUX1JFU0VUX01BU0sJCQkJQklUKDApCisjZGVmaW5lIFNPRlRfUkVTRVQJCQkJQklUKDApCisjZGVmaW5lIERFVklDRV9FTUFDU0xfUkVTRVRfUE9MTF9DT1VOVAkJMTAwCisjZGVmaW5lIEdNQUNTTF9SRVRfV0FSTl9SRVNFVF9JTkNPTVBMRVRFCS0yCisKKyNkZWZpbmUgTUFDU0xfUlhfRU5BQkxFX0NTRgkJCUJJVCgyMykKKyNkZWZpbmUgTUFDU0xfRU5BQkxFX0VYVF9DVEwJCQlCSVQoMTgpCisjZGVmaW5lIE1BQ1NMX1hHTUlJX0VOQUJMRQkJCUJJVCgxMykKKyNkZWZpbmUgTUFDU0xfWEdJR19NT0RFCQkJCUJJVCg4KQorI2RlZmluZSBNQUNTTF9HSUdfTU9ERQkJCQlCSVQoNykKKyNkZWZpbmUgTUFDU0xfR01JSV9FTkFCTEUJCQlCSVQoNSkKKyNkZWZpbmUgTUFDU0xfRlVMTERVUExFWAkJCUJJVCgwKQorCisjZGVmaW5lIEdCRV9DVExfUDBfRU5BQkxFCQkJQklUKDIpCisjZGVmaW5lIEdCRV9SRUdfVkFMX1NUQVRfRU5BQkxFX0FMTAkJMHhmZgorI2RlZmluZSBYR0JFX1JFR19WQUxfU1RBVF9FTkFCTEVfQUxMCQkweGYKKyNkZWZpbmUgR0JFX1NUQVRTX0NEX1NFTAkJCUJJVCgyOCkKKworI2RlZmluZSBHQkVfUE9SVF9NQVNLKHgpCQkJKEJJVCh4KSAtIDEpCisjZGVmaW5lIEdCRV9NQVNLX05PX1BPUlRTCQkJMAorCisjZGVmaW5lIEdCRV9ERUZfMUdfTUFDX0NPTlRST0wJCQkJCVwKKwkJKE1BQ1NMX0dJR19NT0RFIHwgTUFDU0xfR01JSV9FTkFCTEUgfAkJXAorCQkgTUFDU0xfRU5BQkxFX0VYVF9DVEwgfAlNQUNTTF9SWF9FTkFCTEVfQ1NGKQorCisjZGVmaW5lIEdCRV9ERUZfMTBHX01BQ19DT05UUk9MCQkJCVwKKwkJKE1BQ1NMX1hHSUdfTU9ERSB8IE1BQ1NMX1hHTUlJX0VOQUJMRSB8CQlcCisJCSBNQUNTTF9FTkFCTEVfRVhUX0NUTCB8CU1BQ1NMX1JYX0VOQUJMRV9DU0YpCisKKyNkZWZpbmUgR0JFX1NUQVRTQV9NT0RVTEUJCQkwCisjZGVmaW5lIEdCRV9TVEFUU0JfTU9EVUxFCQkJMQorI2RlZmluZSBHQkVfU1RBVFNDX01PRFVMRQkJCTIKKyNkZWZpbmUgR0JFX1NUQVRTRF9NT0RVTEUJCQkzCisKKyNkZWZpbmUgWEdCRV9TVEFUUzBfTU9EVUxFCQkJMAorI2RlZmluZSBYR0JFX1NUQVRTMV9NT0RVTEUJCQkxCisjZGVmaW5lIFhHQkVfU1RBVFMyX01PRFVMRQkJCTIKKworI2RlZmluZSBNQVhfU0xBVkVTCQkJCUdCRTEzX05VTV9TTEFWRVMKKy8qIHM6IDAtYmFzZWQgc2xhdmVfcG9ydCAqLworI2RlZmluZSBTR01JSV9CQVNFKHMpIFwKKwkoKChzKSA8IDIpID8gZ2JlX2Rldi0+c2dtaWlfcG9ydF9yZWdzIDogZ2JlX2Rldi0+c2dtaWlfcG9ydDM0X3JlZ3MpCisKKyNkZWZpbmUgR0JFX1RYX1FVRVVFCQkJCTY0OAorI2RlZmluZQlHQkVfVFhIT09LX09SREVSCQkJMAorI2RlZmluZSBHQkVfREVGQVVMVF9BTEVfQUdFT1VUCQkJMzAKKyNkZWZpbmUgU0xBVkVfTElOS19JU19YR01JSShzKSAoKHMpLT5saW5rX2ludGVyZmFjZSA+PSBYR01JSV9MSU5LX01BQ19QSFkpCisjZGVmaW5lIE5FVENQX0xJTktfU1RBVEVfSU5WQUxJRAkJLTEKKworI2RlZmluZSBHQkVfU0VUX1JFR19PRlMocCwgcmIsIHJuKSBwLT5yYiMjX29mcy5ybiA9IFwKKwkJb2Zmc2V0b2Yoc3RydWN0IGdiZSMjXyMjcmIsIHJuKQorI2RlZmluZSBYR0JFX1NFVF9SRUdfT0ZTKHAsIHJiLCBybikgcC0+cmIjI19vZnMucm4gPSBcCisJCW9mZnNldG9mKHN0cnVjdCB4Z2JlIyNfIyNyYiwgcm4pCisjZGVmaW5lIEdCRV9SRUdfQUREUihwLCByYiwgcm4pIChwLT5yYiArIHAtPnJiIyNfb2ZzLnJuKQorCitzdHJ1Y3QgeGdiZV9zc19yZWdzIHsKKwl1MzIJaWRfdmVyOworCXUzMglzeW5jZV9jb3VudDsKKwl1MzIJc3luY2VfbXV4OworCXUzMgljb250cm9sOworfTsKKworc3RydWN0IHhnYmVfc3dpdGNoX3JlZ3MgeworCXUzMglpZF92ZXI7CisJdTMyCWNvbnRyb2w7CisJdTMyCWVtY29udHJvbDsKKwl1MzIJc3RhdF9wb3J0X2VuOworCXUzMglwdHlwZTsKKwl1MzIJc29mdF9pZGxlOworCXUzMgl0aHJ1X3JhdGU7CisJdTMyCWdhcF90aHJlc2g7CisJdTMyCXR4X3N0YXJ0X3dkczsKKwl1MzIJZmxvd19jb250cm9sOworCXUzMgljcHBpX3RocmVzaDsKK307CisKK3N0cnVjdCB4Z2JlX3BvcnRfcmVncyB7CisJdTMyCWJsa19jbnQ7CisJdTMyCXBvcnRfdmxhbjsKKwl1MzIJdHhfcHJpX21hcDsKKwl1MzIJc2FfbG87CisJdTMyCXNhX2hpOworCXUzMgl0c19jdGw7CisJdTMyCXRzX3NlcV9sdHlwZTsKKwl1MzIJdHNfdmxhbjsKKwl1MzIJdHNfY3RsX2x0eXBlMjsKKwl1MzIJdHNfY3RsMjsKKwl1MzIJY29udHJvbDsKK307CisKK3N0cnVjdCB4Z2JlX2hvc3RfcG9ydF9yZWdzIHsKKwl1MzIJYmxrX2NudDsKKwl1MzIJcG9ydF92bGFuOworCXUzMgl0eF9wcmlfbWFwOworCXUzMglzcmNfaWQ7CisJdTMyCXJ4X3ByaV9tYXA7CisJdTMyCXJ4X21heGxlbjsKK307CisKK3N0cnVjdCB4Z2JlX2VtYWNfcmVncyB7CisJdTMyCWlkX3ZlcjsKKwl1MzIJbWFjX2NvbnRyb2w7CisJdTMyCW1hY19zdGF0dXM7CisJdTMyCXNvZnRfcmVzZXQ7CisJdTMyCXJ4X21heGxlbjsKKwl1MzIJX19yZXNlcnZlZF8wOworCXUzMglyeF9wYXVzZTsKKwl1MzIJdHhfcGF1c2U7CisJdTMyCWVtX2NvbnRyb2w7CisJdTMyCV9fcmVzZXJ2ZWRfMTsKKwl1MzIJdHhfZ2FwOworCXUzMglyc3ZkWzRdOworfTsKKworc3RydWN0IHhnYmVfaG9zdF9od19zdGF0cyB7CisJdTMyCXJ4X2dvb2RfZnJhbWVzOworCXUzMglyeF9icm9hZGNhc3RfZnJhbWVzOworCXUzMglyeF9tdWx0aWNhc3RfZnJhbWVzOworCXUzMglfX3JzdmRfMFszXTsKKwl1MzIJcnhfb3ZlcnNpemVkX2ZyYW1lczsKKwl1MzIJX19yc3ZkXzE7CisJdTMyCXJ4X3VuZGVyc2l6ZWRfZnJhbWVzOworCXUzMglfX3JzdmRfMjsKKwl1MzIJb3ZlcnJ1bl90eXBlNDsKKwl1MzIJb3ZlcnJ1bl90eXBlNTsKKwl1MzIJcnhfYnl0ZXM7CisJdTMyCXR4X2dvb2RfZnJhbWVzOworCXUzMgl0eF9icm9hZGNhc3RfZnJhbWVzOworCXUzMgl0eF9tdWx0aWNhc3RfZnJhbWVzOworCXUzMglfX3JzdmRfM1s5XTsKKwl1MzIJdHhfYnl0ZXM7CisJdTMyCXR4XzY0Ynl0ZV9mcmFtZXM7CisJdTMyCXR4XzY1X3RvXzEyN2J5dGVfZnJhbWVzOworCXUzMgl0eF8xMjhfdG9fMjU1Ynl0ZV9mcmFtZXM7CisJdTMyCXR4XzI1Nl90b181MTFieXRlX2ZyYW1lczsKKwl1MzIJdHhfNTEyX3RvXzEwMjNieXRlX2ZyYW1lczsKKwl1MzIJdHhfMTAyNGJ5dGVfZnJhbWVzOworCXUzMgluZXRfYnl0ZXM7CisJdTMyCXJ4X3NvZl9vdmVycnVuczsKKwl1MzIJcnhfbW9mX292ZXJydW5zOworCXUzMglyeF9kbWFfb3ZlcnJ1bnM7Cit9OworCitzdHJ1Y3QgeGdiZV9od19zdGF0cyB7CisJdTMyCXJ4X2dvb2RfZnJhbWVzOworCXUzMglyeF9icm9hZGNhc3RfZnJhbWVzOworCXUzMglyeF9tdWx0aWNhc3RfZnJhbWVzOworCXUzMglyeF9wYXVzZV9mcmFtZXM7CisJdTMyCXJ4X2NyY19lcnJvcnM7CisJdTMyCXJ4X2FsaWduX2NvZGVfZXJyb3JzOworCXUzMglyeF9vdmVyc2l6ZWRfZnJhbWVzOworCXUzMglyeF9qYWJiZXJfZnJhbWVzOworCXUzMglyeF91bmRlcnNpemVkX2ZyYW1lczsKKwl1MzIJcnhfZnJhZ21lbnRzOworCXUzMglvdmVycnVuX3R5cGU0OworCXUzMglvdmVycnVuX3R5cGU1OworCXUzMglyeF9ieXRlczsKKwl1MzIJdHhfZ29vZF9mcmFtZXM7CisJdTMyCXR4X2Jyb2FkY2FzdF9mcmFtZXM7CisJdTMyCXR4X211bHRpY2FzdF9mcmFtZXM7CisJdTMyCXR4X3BhdXNlX2ZyYW1lczsKKwl1MzIJdHhfZGVmZXJyZWRfZnJhbWVzOworCXUzMgl0eF9jb2xsaXNpb25fZnJhbWVzOworCXUzMgl0eF9zaW5nbGVfY29sbF9mcmFtZXM7CisJdTMyCXR4X211bHRfY29sbF9mcmFtZXM7CisJdTMyCXR4X2V4Y2Vzc2l2ZV9jb2xsaXNpb25zOworCXUzMgl0eF9sYXRlX2NvbGxpc2lvbnM7CisJdTMyCXR4X3VuZGVycnVuOworCXUzMgl0eF9jYXJyaWVyX3NlbnNlX2Vycm9yczsKKwl1MzIJdHhfYnl0ZXM7CisJdTMyCXR4XzY0Ynl0ZV9mcmFtZXM7CisJdTMyCXR4XzY1X3RvXzEyN2J5dGVfZnJhbWVzOworCXUzMgl0eF8xMjhfdG9fMjU1Ynl0ZV9mcmFtZXM7CisJdTMyCXR4XzI1Nl90b181MTFieXRlX2ZyYW1lczsKKwl1MzIJdHhfNTEyX3RvXzEwMjNieXRlX2ZyYW1lczsKKwl1MzIJdHhfMTAyNGJ5dGVfZnJhbWVzOworCXUzMgluZXRfYnl0ZXM7CisJdTMyCXJ4X3NvZl9vdmVycnVuczsKKwl1MzIJcnhfbW9mX292ZXJydW5zOworCXUzMglyeF9kbWFfb3ZlcnJ1bnM7Cit9OworCisjZGVmaW5lIFhHQkUxMF9OVU1fU1RBVF9FTlRSSUVTIChzaXplb2Yoc3RydWN0IHhnYmVfaHdfc3RhdHMpL3NpemVvZih1MzIpKQorCitzdHJ1Y3QgZ2JlX3NzX3JlZ3MgeworCXUzMglpZF92ZXI7CisJdTMyCXN5bmNlX2NvdW50OworCXUzMglzeW5jZV9tdXg7Cit9OworCitzdHJ1Y3QgZ2JlX3NzX3JlZ3Nfb2ZzIHsKKwl1MTYJaWRfdmVyOworCXUxNgljb250cm9sOworfTsKKworc3RydWN0IGdiZV9zd2l0Y2hfcmVncyB7CisJdTMyCWlkX3ZlcjsKKwl1MzIJY29udHJvbDsKKwl1MzIJc29mdF9yZXNldDsKKwl1MzIJc3RhdF9wb3J0X2VuOworCXUzMglwdHlwZTsKKwl1MzIJc29mdF9pZGxlOworCXUzMgl0aHJ1X3JhdGU7CisJdTMyCWdhcF90aHJlc2g7CisJdTMyCXR4X3N0YXJ0X3dkczsKKwl1MzIJZmxvd19jb250cm9sOworfTsKKworc3RydWN0IGdiZV9zd2l0Y2hfcmVnc19vZnMgeworCXUxNglpZF92ZXI7CisJdTE2CWNvbnRyb2w7CisJdTE2CXNvZnRfcmVzZXQ7CisJdTE2CWVtY29udHJvbDsKKwl1MTYJc3RhdF9wb3J0X2VuOworCXUxNglwdHlwZTsKKwl1MTYJZmxvd19jb250cm9sOworfTsKKworc3RydWN0IGdiZV9wb3J0X3JlZ3MgeworCXUzMgltYXhfYmxrczsKKwl1MzIJYmxrX2NudDsKKwl1MzIJcG9ydF92bGFuOworCXUzMgl0eF9wcmlfbWFwOworCXUzMglzYV9sbzsKKwl1MzIJc2FfaGk7CisJdTMyCXRzX2N0bDsKKwl1MzIJdHNfc2VxX2x0eXBlOworCXUzMgl0c192bGFuOworCXUzMgl0c19jdGxfbHR5cGUyOworCXUzMgl0c19jdGwyOworfTsKKworc3RydWN0IGdiZV9wb3J0X3JlZ3Nfb2ZzIHsKKwl1MTYJcG9ydF92bGFuOworCXUxNgl0eF9wcmlfbWFwOworCXUxNglzYV9sbzsKKwl1MTYJc2FfaGk7CisJdTE2CXRzX2N0bDsKKwl1MTYJdHNfc2VxX2x0eXBlOworCXUxNgl0c192bGFuOworCXUxNgl0c19jdGxfbHR5cGUyOworCXUxNgl0c19jdGwyOworfTsKKworc3RydWN0IGdiZV9ob3N0X3BvcnRfcmVncyB7CisJdTMyCXNyY19pZDsKKwl1MzIJcG9ydF92bGFuOworCXUzMglyeF9wcmlfbWFwOworCXUzMglyeF9tYXhsZW47Cit9OworCitzdHJ1Y3QgZ2JlX2hvc3RfcG9ydF9yZWdzX29mcyB7CisJdTE2CXBvcnRfdmxhbjsKKwl1MTYJdHhfcHJpX21hcDsKKwl1MTYJcnhfbWF4bGVuOworfTsKKworc3RydWN0IGdiZV9lbWFjX3JlZ3MgeworCXUzMglpZF92ZXI7CisJdTMyCW1hY19jb250cm9sOworCXUzMgltYWNfc3RhdHVzOworCXUzMglzb2Z0X3Jlc2V0OworCXUzMglyeF9tYXhsZW47CisJdTMyCV9fcmVzZXJ2ZWRfMDsKKwl1MzIJcnhfcGF1c2U7CisJdTMyCXR4X3BhdXNlOworCXUzMglfX3Jlc2VydmVkXzE7CisJdTMyCXJ4X3ByaV9tYXA7CisJdTMyCXJzdmRbNl07Cit9OworCitzdHJ1Y3QgZ2JlX2VtYWNfcmVnc19vZnMgeworCXUxNgltYWNfY29udHJvbDsKKwl1MTYJc29mdF9yZXNldDsKKwl1MTYJcnhfbWF4bGVuOworfTsKKworc3RydWN0IGdiZV9od19zdGF0cyB7CisJdTMyCXJ4X2dvb2RfZnJhbWVzOworCXUzMglyeF9icm9hZGNhc3RfZnJhbWVzOworCXUzMglyeF9tdWx0aWNhc3RfZnJhbWVzOworCXUzMglyeF9wYXVzZV9mcmFtZXM7CisJdTMyCXJ4X2NyY19lcnJvcnM7CisJdTMyCXJ4X2FsaWduX2NvZGVfZXJyb3JzOworCXUzMglyeF9vdmVyc2l6ZWRfZnJhbWVzOworCXUzMglyeF9qYWJiZXJfZnJhbWVzOworCXUzMglyeF91bmRlcnNpemVkX2ZyYW1lczsKKwl1MzIJcnhfZnJhZ21lbnRzOworCXUzMglfX3BhZF8wWzJdOworCXUzMglyeF9ieXRlczsKKwl1MzIJdHhfZ29vZF9mcmFtZXM7CisJdTMyCXR4X2Jyb2FkY2FzdF9mcmFtZXM7CisJdTMyCXR4X211bHRpY2FzdF9mcmFtZXM7CisJdTMyCXR4X3BhdXNlX2ZyYW1lczsKKwl1MzIJdHhfZGVmZXJyZWRfZnJhbWVzOworCXUzMgl0eF9jb2xsaXNpb25fZnJhbWVzOworCXUzMgl0eF9zaW5nbGVfY29sbF9mcmFtZXM7CisJdTMyCXR4X211bHRfY29sbF9mcmFtZXM7CisJdTMyCXR4X2V4Y2Vzc2l2ZV9jb2xsaXNpb25zOworCXUzMgl0eF9sYXRlX2NvbGxpc2lvbnM7CisJdTMyCXR4X3VuZGVycnVuOworCXUzMgl0eF9jYXJyaWVyX3NlbnNlX2Vycm9yczsKKwl1MzIJdHhfYnl0ZXM7CisJdTMyCXR4XzY0Ynl0ZV9mcmFtZXM7CisJdTMyCXR4XzY1X3RvXzEyN2J5dGVfZnJhbWVzOworCXUzMgl0eF8xMjhfdG9fMjU1Ynl0ZV9mcmFtZXM7CisJdTMyCXR4XzI1Nl90b181MTFieXRlX2ZyYW1lczsKKwl1MzIJdHhfNTEyX3RvXzEwMjNieXRlX2ZyYW1lczsKKwl1MzIJdHhfMTAyNGJ5dGVfZnJhbWVzOworCXUzMgluZXRfYnl0ZXM7CisJdTMyCXJ4X3NvZl9vdmVycnVuczsKKwl1MzIJcnhfbW9mX292ZXJydW5zOworCXUzMglyeF9kbWFfb3ZlcnJ1bnM7Cit9OworCisjZGVmaW5lIEdCRTEzX05VTV9IV19TVEFUX0VOVFJJRVMgKHNpemVvZihzdHJ1Y3QgZ2JlX2h3X3N0YXRzKS9zaXplb2YodTMyKSkKKyNkZWZpbmUgR0JFMTNfTlVNX0hXX1NUQVRTX01PRAkJCTIKKyNkZWZpbmUgWEdCRTEwX05VTV9IV19TVEFUU19NT0QJCQkzCisjZGVmaW5lIEdCRV9NQVhfSFdfU1RBVF9NT0RTCQkJMworI2RlZmluZSBHQkVfSFdfU1RBVFNfUkVHX01BUF9TWgkJCTB4MTAwCisKK3N0cnVjdCBnYmVfc2xhdmUgeworCXZvaWQgX19pb21lbQkJCSpwb3J0X3JlZ3M7CisJdm9pZCBfX2lvbWVtCQkJKmVtYWNfcmVnczsKKwlzdHJ1Y3QgZ2JlX3BvcnRfcmVnc19vZnMJcG9ydF9yZWdzX29mczsKKwlzdHJ1Y3QgZ2JlX2VtYWNfcmVnc19vZnMJZW1hY19yZWdzX29mczsKKwlpbnQJCQkJc2xhdmVfbnVtOyAvKiAwIGJhc2VkIGxvZ2ljYWwgbnVtYmVyICovCisJaW50CQkJCXBvcnRfbnVtOyAgLyogYWN0dWFsIHBvcnQgbnVtYmVyICovCisJYXRvbWljX3QJCQlsaW5rX3N0YXRlOworCWJvb2wJCQkJb3BlbjsKKwlzdHJ1Y3QgcGh5X2RldmljZQkJKnBoeTsKKwl1MzIJCQkJbGlua19pbnRlcmZhY2U7CisJdTMyCQkJCW1hY19jb250cm9sOworCXU4CQkJCXBoeV9wb3J0X3Q7CisJc3RydWN0IGRldmljZV9ub2RlCQkqcGh5X25vZGU7CisJc3RydWN0IGxpc3RfaGVhZAkJc2xhdmVfbGlzdDsKK307CisKK3N0cnVjdCBnYmVfcHJpdiB7CisJc3RydWN0IGRldmljZQkJCSpkZXY7CisJc3RydWN0IG5ldGNwX2RldmljZQkJKm5ldGNwX2RldmljZTsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJdGltZXI7CisJdTMyCQkJCW51bV9zbGF2ZXM7CisJdTMyCQkJCWFsZV9lbnRyaWVzOworCXUzMgkJCQlhbGVfcG9ydHM7CisJYm9vbAkJCQllbmFibGVfYWxlOworCXN0cnVjdCBuZXRjcF90eF9waXBlCQl0eF9waXBlOworCisJaW50CQkJCWhvc3RfcG9ydDsKKwl1MzIJCQkJcnhfcGFja2V0X21heDsKKwl1MzIJCQkJc3NfdmVyc2lvbjsKKworCXZvaWQgX19pb21lbQkJCSpzc19yZWdzOworCXZvaWQgX19pb21lbQkJCSpzd2l0Y2hfcmVnczsKKwl2b2lkIF9faW9tZW0JCQkqaG9zdF9wb3J0X3JlZ3M7CisJdm9pZCBfX2lvbWVtCQkJKmFsZV9yZWc7CisJdm9pZCBfX2lvbWVtCQkJKnNnbWlpX3BvcnRfcmVnczsKKwl2b2lkIF9faW9tZW0JCQkqc2dtaWlfcG9ydDM0X3JlZ3M7CisJdm9pZCBfX2lvbWVtCQkJKnhnYmVfc2VyZGVzX3JlZ3M7CisJdm9pZCBfX2lvbWVtCQkJKmh3X3N0YXRzX3JlZ3NbR0JFX01BWF9IV19TVEFUX01PRFNdOworCisJc3RydWN0IGdiZV9zc19yZWdzX29mcwkJc3NfcmVnc19vZnM7CisJc3RydWN0IGdiZV9zd2l0Y2hfcmVnc19vZnMJc3dpdGNoX3JlZ3Nfb2ZzOworCXN0cnVjdCBnYmVfaG9zdF9wb3J0X3JlZ3Nfb2ZzCWhvc3RfcG9ydF9yZWdzX29mczsKKworCXN0cnVjdCBjcHN3X2FsZQkJCSphbGU7CisJdW5zaWduZWQgaW50CQkJdHhfcXVldWVfaWQ7CisJY29uc3QgY2hhcgkJCSpkbWFfY2hhbl9uYW1lOworCisJc3RydWN0IGxpc3RfaGVhZAkJZ2JlX2ludGZfaGVhZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlzZWNvbmRhcnlfc2xhdmVzOworCXN0cnVjdCBuZXRfZGV2aWNlCQkqZHVtbXlfbmRldjsKKworCXU2NAkJCQkqaHdfc3RhdHM7CisJY29uc3Qgc3RydWN0IG5ldGNwX2V0aHRvb2xfc3RhdCAqZXRfc3RhdHM7CisJaW50CQkJCW51bV9ldF9zdGF0czsKKwkvKiAgTG9jayBmb3IgdXBkYXRpbmcgdGhlIGh3c3RhdHMgKi8KKwlzcGlubG9ja190CQkJaHdfc3RhdHNfbG9jazsKK307CisKK3N0cnVjdCBnYmVfaW50ZiB7CisJc3RydWN0IG5ldF9kZXZpY2UJKm5kZXY7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwlzdHJ1Y3QgZ2JlX3ByaXYJCSpnYmVfZGV2OworCXN0cnVjdCBuZXRjcF90eF9waXBlCXR4X3BpcGU7CisJc3RydWN0IGdiZV9zbGF2ZQkqc2xhdmU7CisJc3RydWN0IGxpc3RfaGVhZAlnYmVfaW50Zl9saXN0OworCXVuc2lnbmVkIGxvbmcJCWFjdGl2ZV92bGFuc1tCSVRTX1RPX0xPTkdTKFZMQU5fTl9WSUQpXTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmV0Y3BfbW9kdWxlIGdiZV9tb2R1bGU7CitzdGF0aWMgc3RydWN0IG5ldGNwX21vZHVsZSB4Z2JlX21vZHVsZTsKKworLyogU3RhdGlzdGljIG1hbmFnZW1lbnQgKi8KK3N0cnVjdCBuZXRjcF9ldGh0b29sX3N0YXQgeworCWNoYXIgZGVzY1tFVEhfR1NUUklOR19MRU5dOworCWludCB0eXBlOworCXUzMiBzaXplOworCWludCBvZmZzZXQ7Cit9OworCisjZGVmaW5lIEdCRV9TVEFUU0FfSU5GTyhmaWVsZCkJCSJHQkVfQToiI2ZpZWxkLCBHQkVfU1RBVFNBX01PRFVMRSxcCisJCQkJRklFTERfU0laRU9GKHN0cnVjdCBnYmVfaHdfc3RhdHMsIGZpZWxkKSwgXAorCQkJCW9mZnNldG9mKHN0cnVjdCBnYmVfaHdfc3RhdHMsIGZpZWxkKQorCisjZGVmaW5lIEdCRV9TVEFUU0JfSU5GTyhmaWVsZCkJCSJHQkVfQjoiI2ZpZWxkLCBHQkVfU1RBVFNCX01PRFVMRSxcCisJCQkJRklFTERfU0laRU9GKHN0cnVjdCBnYmVfaHdfc3RhdHMsIGZpZWxkKSwgXAorCQkJCW9mZnNldG9mKHN0cnVjdCBnYmVfaHdfc3RhdHMsIGZpZWxkKQorCisjZGVmaW5lIEdCRV9TVEFUU0NfSU5GTyhmaWVsZCkJCSJHQkVfQzoiI2ZpZWxkLCBHQkVfU1RBVFNDX01PRFVMRSxcCisJCQkJRklFTERfU0laRU9GKHN0cnVjdCBnYmVfaHdfc3RhdHMsIGZpZWxkKSwgXAorCQkJCW9mZnNldG9mKHN0cnVjdCBnYmVfaHdfc3RhdHMsIGZpZWxkKQorCisjZGVmaW5lIEdCRV9TVEFUU0RfSU5GTyhmaWVsZCkJCSJHQkVfRDoiI2ZpZWxkLCBHQkVfU1RBVFNEX01PRFVMRSxcCisJCQkJRklFTERfU0laRU9GKHN0cnVjdCBnYmVfaHdfc3RhdHMsIGZpZWxkKSwgXAorCQkJCW9mZnNldG9mKHN0cnVjdCBnYmVfaHdfc3RhdHMsIGZpZWxkKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGNwX2V0aHRvb2xfc3RhdCBnYmUxM19ldF9zdGF0c1tdID0geworCS8qIEdCRSBtb2R1bGUgQSAqLworCXtHQkVfU1RBVFNBX0lORk8ocnhfZ29vZF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQV9JTkZPKHJ4X2Jyb2FkY2FzdF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQV9JTkZPKHJ4X211bHRpY2FzdF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQV9JTkZPKHJ4X3BhdXNlX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNBX0lORk8ocnhfY3JjX2Vycm9ycyl9LAorCXtHQkVfU1RBVFNBX0lORk8ocnhfYWxpZ25fY29kZV9lcnJvcnMpfSwKKwl7R0JFX1NUQVRTQV9JTkZPKHJ4X292ZXJzaXplZF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQV9JTkZPKHJ4X2phYmJlcl9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQV9JTkZPKHJ4X3VuZGVyc2l6ZWRfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0FfSU5GTyhyeF9mcmFnbWVudHMpfSwKKwl7R0JFX1NUQVRTQV9JTkZPKHJ4X2J5dGVzKX0sCisJe0dCRV9TVEFUU0FfSU5GTyh0eF9nb29kX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNBX0lORk8odHhfYnJvYWRjYXN0X2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNBX0lORk8odHhfbXVsdGljYXN0X2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNBX0lORk8odHhfcGF1c2VfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0FfSU5GTyh0eF9kZWZlcnJlZF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQV9JTkZPKHR4X2NvbGxpc2lvbl9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQV9JTkZPKHR4X3NpbmdsZV9jb2xsX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNBX0lORk8odHhfbXVsdF9jb2xsX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNBX0lORk8odHhfZXhjZXNzaXZlX2NvbGxpc2lvbnMpfSwKKwl7R0JFX1NUQVRTQV9JTkZPKHR4X2xhdGVfY29sbGlzaW9ucyl9LAorCXtHQkVfU1RBVFNBX0lORk8odHhfdW5kZXJydW4pfSwKKwl7R0JFX1NUQVRTQV9JTkZPKHR4X2NhcnJpZXJfc2Vuc2VfZXJyb3JzKX0sCisJe0dCRV9TVEFUU0FfSU5GTyh0eF9ieXRlcyl9LAorCXtHQkVfU1RBVFNBX0lORk8odHhfNjRieXRlX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNBX0lORk8odHhfNjVfdG9fMTI3Ynl0ZV9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQV9JTkZPKHR4XzEyOF90b18yNTVieXRlX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNBX0lORk8odHhfMjU2X3RvXzUxMWJ5dGVfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0FfSU5GTyh0eF81MTJfdG9fMTAyM2J5dGVfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0FfSU5GTyh0eF8xMDI0Ynl0ZV9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQV9JTkZPKG5ldF9ieXRlcyl9LAorCXtHQkVfU1RBVFNBX0lORk8ocnhfc29mX292ZXJydW5zKX0sCisJe0dCRV9TVEFUU0FfSU5GTyhyeF9tb2Zfb3ZlcnJ1bnMpfSwKKwl7R0JFX1NUQVRTQV9JTkZPKHJ4X2RtYV9vdmVycnVucyl9LAorCS8qIEdCRSBtb2R1bGUgQiAqLworCXtHQkVfU1RBVFNCX0lORk8ocnhfZ29vZF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQl9JTkZPKHJ4X2Jyb2FkY2FzdF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQl9JTkZPKHJ4X211bHRpY2FzdF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQl9JTkZPKHJ4X3BhdXNlX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNCX0lORk8ocnhfY3JjX2Vycm9ycyl9LAorCXtHQkVfU1RBVFNCX0lORk8ocnhfYWxpZ25fY29kZV9lcnJvcnMpfSwKKwl7R0JFX1NUQVRTQl9JTkZPKHJ4X292ZXJzaXplZF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQl9JTkZPKHJ4X2phYmJlcl9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQl9JTkZPKHJ4X3VuZGVyc2l6ZWRfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0JfSU5GTyhyeF9mcmFnbWVudHMpfSwKKwl7R0JFX1NUQVRTQl9JTkZPKHJ4X2J5dGVzKX0sCisJe0dCRV9TVEFUU0JfSU5GTyh0eF9nb29kX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNCX0lORk8odHhfYnJvYWRjYXN0X2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNCX0lORk8odHhfbXVsdGljYXN0X2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNCX0lORk8odHhfcGF1c2VfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0JfSU5GTyh0eF9kZWZlcnJlZF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQl9JTkZPKHR4X2NvbGxpc2lvbl9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQl9JTkZPKHR4X3NpbmdsZV9jb2xsX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNCX0lORk8odHhfbXVsdF9jb2xsX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNCX0lORk8odHhfZXhjZXNzaXZlX2NvbGxpc2lvbnMpfSwKKwl7R0JFX1NUQVRTQl9JTkZPKHR4X2xhdGVfY29sbGlzaW9ucyl9LAorCXtHQkVfU1RBVFNCX0lORk8odHhfdW5kZXJydW4pfSwKKwl7R0JFX1NUQVRTQl9JTkZPKHR4X2NhcnJpZXJfc2Vuc2VfZXJyb3JzKX0sCisJe0dCRV9TVEFUU0JfSU5GTyh0eF9ieXRlcyl9LAorCXtHQkVfU1RBVFNCX0lORk8odHhfNjRieXRlX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNCX0lORk8odHhfNjVfdG9fMTI3Ynl0ZV9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQl9JTkZPKHR4XzEyOF90b18yNTVieXRlX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNCX0lORk8odHhfMjU2X3RvXzUxMWJ5dGVfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0JfSU5GTyh0eF81MTJfdG9fMTAyM2J5dGVfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0JfSU5GTyh0eF8xMDI0Ynl0ZV9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQl9JTkZPKG5ldF9ieXRlcyl9LAorCXtHQkVfU1RBVFNCX0lORk8ocnhfc29mX292ZXJydW5zKX0sCisJe0dCRV9TVEFUU0JfSU5GTyhyeF9tb2Zfb3ZlcnJ1bnMpfSwKKwl7R0JFX1NUQVRTQl9JTkZPKHJ4X2RtYV9vdmVycnVucyl9LAorCS8qIEdCRSBtb2R1bGUgQyAqLworCXtHQkVfU1RBVFNDX0lORk8ocnhfZ29vZF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQ19JTkZPKHJ4X2Jyb2FkY2FzdF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQ19JTkZPKHJ4X211bHRpY2FzdF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQ19JTkZPKHJ4X3BhdXNlX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNDX0lORk8ocnhfY3JjX2Vycm9ycyl9LAorCXtHQkVfU1RBVFNDX0lORk8ocnhfYWxpZ25fY29kZV9lcnJvcnMpfSwKKwl7R0JFX1NUQVRTQ19JTkZPKHJ4X292ZXJzaXplZF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQ19JTkZPKHJ4X2phYmJlcl9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQ19JTkZPKHJ4X3VuZGVyc2l6ZWRfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0NfSU5GTyhyeF9mcmFnbWVudHMpfSwKKwl7R0JFX1NUQVRTQ19JTkZPKHJ4X2J5dGVzKX0sCisJe0dCRV9TVEFUU0NfSU5GTyh0eF9nb29kX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNDX0lORk8odHhfYnJvYWRjYXN0X2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNDX0lORk8odHhfbXVsdGljYXN0X2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNDX0lORk8odHhfcGF1c2VfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0NfSU5GTyh0eF9kZWZlcnJlZF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQ19JTkZPKHR4X2NvbGxpc2lvbl9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQ19JTkZPKHR4X3NpbmdsZV9jb2xsX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNDX0lORk8odHhfbXVsdF9jb2xsX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNDX0lORk8odHhfZXhjZXNzaXZlX2NvbGxpc2lvbnMpfSwKKwl7R0JFX1NUQVRTQ19JTkZPKHR4X2xhdGVfY29sbGlzaW9ucyl9LAorCXtHQkVfU1RBVFNDX0lORk8odHhfdW5kZXJydW4pfSwKKwl7R0JFX1NUQVRTQ19JTkZPKHR4X2NhcnJpZXJfc2Vuc2VfZXJyb3JzKX0sCisJe0dCRV9TVEFUU0NfSU5GTyh0eF9ieXRlcyl9LAorCXtHQkVfU1RBVFNDX0lORk8odHhfNjRieXRlX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNDX0lORk8odHhfNjVfdG9fMTI3Ynl0ZV9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQ19JTkZPKHR4XzEyOF90b18yNTVieXRlX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNDX0lORk8odHhfMjU2X3RvXzUxMWJ5dGVfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0NfSU5GTyh0eF81MTJfdG9fMTAyM2J5dGVfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0NfSU5GTyh0eF8xMDI0Ynl0ZV9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTQ19JTkZPKG5ldF9ieXRlcyl9LAorCXtHQkVfU1RBVFNDX0lORk8ocnhfc29mX292ZXJydW5zKX0sCisJe0dCRV9TVEFUU0NfSU5GTyhyeF9tb2Zfb3ZlcnJ1bnMpfSwKKwl7R0JFX1NUQVRTQ19JTkZPKHJ4X2RtYV9vdmVycnVucyl9LAorCS8qIEdCRSBtb2R1bGUgRCAqLworCXtHQkVfU1RBVFNEX0lORk8ocnhfZ29vZF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTRF9JTkZPKHJ4X2Jyb2FkY2FzdF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTRF9JTkZPKHJ4X211bHRpY2FzdF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTRF9JTkZPKHJ4X3BhdXNlX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNEX0lORk8ocnhfY3JjX2Vycm9ycyl9LAorCXtHQkVfU1RBVFNEX0lORk8ocnhfYWxpZ25fY29kZV9lcnJvcnMpfSwKKwl7R0JFX1NUQVRTRF9JTkZPKHJ4X292ZXJzaXplZF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTRF9JTkZPKHJ4X2phYmJlcl9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTRF9JTkZPKHJ4X3VuZGVyc2l6ZWRfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0RfSU5GTyhyeF9mcmFnbWVudHMpfSwKKwl7R0JFX1NUQVRTRF9JTkZPKHJ4X2J5dGVzKX0sCisJe0dCRV9TVEFUU0RfSU5GTyh0eF9nb29kX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNEX0lORk8odHhfYnJvYWRjYXN0X2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNEX0lORk8odHhfbXVsdGljYXN0X2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNEX0lORk8odHhfcGF1c2VfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0RfSU5GTyh0eF9kZWZlcnJlZF9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTRF9JTkZPKHR4X2NvbGxpc2lvbl9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTRF9JTkZPKHR4X3NpbmdsZV9jb2xsX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNEX0lORk8odHhfbXVsdF9jb2xsX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNEX0lORk8odHhfZXhjZXNzaXZlX2NvbGxpc2lvbnMpfSwKKwl7R0JFX1NUQVRTRF9JTkZPKHR4X2xhdGVfY29sbGlzaW9ucyl9LAorCXtHQkVfU1RBVFNEX0lORk8odHhfdW5kZXJydW4pfSwKKwl7R0JFX1NUQVRTRF9JTkZPKHR4X2NhcnJpZXJfc2Vuc2VfZXJyb3JzKX0sCisJe0dCRV9TVEFUU0RfSU5GTyh0eF9ieXRlcyl9LAorCXtHQkVfU1RBVFNEX0lORk8odHhfNjRieXRlX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNEX0lORk8odHhfNjVfdG9fMTI3Ynl0ZV9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTRF9JTkZPKHR4XzEyOF90b18yNTVieXRlX2ZyYW1lcyl9LAorCXtHQkVfU1RBVFNEX0lORk8odHhfMjU2X3RvXzUxMWJ5dGVfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0RfSU5GTyh0eF81MTJfdG9fMTAyM2J5dGVfZnJhbWVzKX0sCisJe0dCRV9TVEFUU0RfSU5GTyh0eF8xMDI0Ynl0ZV9mcmFtZXMpfSwKKwl7R0JFX1NUQVRTRF9JTkZPKG5ldF9ieXRlcyl9LAorCXtHQkVfU1RBVFNEX0lORk8ocnhfc29mX292ZXJydW5zKX0sCisJe0dCRV9TVEFUU0RfSU5GTyhyeF9tb2Zfb3ZlcnJ1bnMpfSwKKwl7R0JFX1NUQVRTRF9JTkZPKHJ4X2RtYV9vdmVycnVucyl9LAorfTsKKworI2RlZmluZSBYR0JFX1NUQVRTMF9JTkZPKGZpZWxkKQkiR0JFXzA6IiNmaWVsZCwgWEdCRV9TVEFUUzBfTU9EVUxFLCBcCisJCQkJRklFTERfU0laRU9GKHN0cnVjdCB4Z2JlX2h3X3N0YXRzLCBmaWVsZCksIFwKKwkJCQlvZmZzZXRvZihzdHJ1Y3QgeGdiZV9od19zdGF0cywgZmllbGQpCisKKyNkZWZpbmUgWEdCRV9TVEFUUzFfSU5GTyhmaWVsZCkJIkdCRV8xOiIjZmllbGQsIFhHQkVfU1RBVFMxX01PRFVMRSwgXAorCQkJCUZJRUxEX1NJWkVPRihzdHJ1Y3QgeGdiZV9od19zdGF0cywgZmllbGQpLCBcCisJCQkJb2Zmc2V0b2Yoc3RydWN0IHhnYmVfaHdfc3RhdHMsIGZpZWxkKQorCisjZGVmaW5lIFhHQkVfU1RBVFMyX0lORk8oZmllbGQpCSJHQkVfMjoiI2ZpZWxkLCBYR0JFX1NUQVRTMl9NT0RVTEUsIFwKKwkJCQlGSUVMRF9TSVpFT0Yoc3RydWN0IHhnYmVfaHdfc3RhdHMsIGZpZWxkKSwgXAorCQkJCW9mZnNldG9mKHN0cnVjdCB4Z2JlX2h3X3N0YXRzLCBmaWVsZCkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRjcF9ldGh0b29sX3N0YXQgeGdiZTEwX2V0X3N0YXRzW10gPSB7CisJLyogR0JFIG1vZHVsZSAwICovCisJe1hHQkVfU1RBVFMwX0lORk8ocnhfZ29vZF9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzBfSU5GTyhyeF9icm9hZGNhc3RfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMwX0lORk8ocnhfbXVsdGljYXN0X2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMF9JTkZPKHJ4X292ZXJzaXplZF9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzBfSU5GTyhyeF91bmRlcnNpemVkX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMF9JTkZPKG92ZXJydW5fdHlwZTQpfSwKKwl7WEdCRV9TVEFUUzBfSU5GTyhvdmVycnVuX3R5cGU1KX0sCisJe1hHQkVfU1RBVFMwX0lORk8ocnhfYnl0ZXMpfSwKKwl7WEdCRV9TVEFUUzBfSU5GTyh0eF9nb29kX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMF9JTkZPKHR4X2Jyb2FkY2FzdF9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzBfSU5GTyh0eF9tdWx0aWNhc3RfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMwX0lORk8odHhfYnl0ZXMpfSwKKwl7WEdCRV9TVEFUUzBfSU5GTyh0eF82NGJ5dGVfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMwX0lORk8odHhfNjVfdG9fMTI3Ynl0ZV9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzBfSU5GTyh0eF8xMjhfdG9fMjU1Ynl0ZV9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzBfSU5GTyh0eF8yNTZfdG9fNTExYnl0ZV9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzBfSU5GTyh0eF81MTJfdG9fMTAyM2J5dGVfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMwX0lORk8odHhfMTAyNGJ5dGVfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMwX0lORk8obmV0X2J5dGVzKX0sCisJe1hHQkVfU1RBVFMwX0lORk8ocnhfc29mX292ZXJydW5zKX0sCisJe1hHQkVfU1RBVFMwX0lORk8ocnhfbW9mX292ZXJydW5zKX0sCisJe1hHQkVfU1RBVFMwX0lORk8ocnhfZG1hX292ZXJydW5zKX0sCisJLyogWEdCRSBtb2R1bGUgMSAqLworCXtYR0JFX1NUQVRTMV9JTkZPKHJ4X2dvb2RfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMxX0lORk8ocnhfYnJvYWRjYXN0X2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMV9JTkZPKHJ4X211bHRpY2FzdF9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzFfSU5GTyhyeF9wYXVzZV9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzFfSU5GTyhyeF9jcmNfZXJyb3JzKX0sCisJe1hHQkVfU1RBVFMxX0lORk8ocnhfYWxpZ25fY29kZV9lcnJvcnMpfSwKKwl7WEdCRV9TVEFUUzFfSU5GTyhyeF9vdmVyc2l6ZWRfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMxX0lORk8ocnhfamFiYmVyX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMV9JTkZPKHJ4X3VuZGVyc2l6ZWRfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMxX0lORk8ocnhfZnJhZ21lbnRzKX0sCisJe1hHQkVfU1RBVFMxX0lORk8ob3ZlcnJ1bl90eXBlNCl9LAorCXtYR0JFX1NUQVRTMV9JTkZPKG92ZXJydW5fdHlwZTUpfSwKKwl7WEdCRV9TVEFUUzFfSU5GTyhyeF9ieXRlcyl9LAorCXtYR0JFX1NUQVRTMV9JTkZPKHR4X2dvb2RfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMxX0lORk8odHhfYnJvYWRjYXN0X2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMV9JTkZPKHR4X211bHRpY2FzdF9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzFfSU5GTyh0eF9wYXVzZV9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzFfSU5GTyh0eF9kZWZlcnJlZF9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzFfSU5GTyh0eF9jb2xsaXNpb25fZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMxX0lORk8odHhfc2luZ2xlX2NvbGxfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMxX0lORk8odHhfbXVsdF9jb2xsX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMV9JTkZPKHR4X2V4Y2Vzc2l2ZV9jb2xsaXNpb25zKX0sCisJe1hHQkVfU1RBVFMxX0lORk8odHhfbGF0ZV9jb2xsaXNpb25zKX0sCisJe1hHQkVfU1RBVFMxX0lORk8odHhfdW5kZXJydW4pfSwKKwl7WEdCRV9TVEFUUzFfSU5GTyh0eF9jYXJyaWVyX3NlbnNlX2Vycm9ycyl9LAorCXtYR0JFX1NUQVRTMV9JTkZPKHR4X2J5dGVzKX0sCisJe1hHQkVfU1RBVFMxX0lORk8odHhfNjRieXRlX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMV9JTkZPKHR4XzY1X3RvXzEyN2J5dGVfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMxX0lORk8odHhfMTI4X3RvXzI1NWJ5dGVfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMxX0lORk8odHhfMjU2X3RvXzUxMWJ5dGVfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMxX0lORk8odHhfNTEyX3RvXzEwMjNieXRlX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMV9JTkZPKHR4XzEwMjRieXRlX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMV9JTkZPKG5ldF9ieXRlcyl9LAorCXtYR0JFX1NUQVRTMV9JTkZPKHJ4X3NvZl9vdmVycnVucyl9LAorCXtYR0JFX1NUQVRTMV9JTkZPKHJ4X21vZl9vdmVycnVucyl9LAorCXtYR0JFX1NUQVRTMV9JTkZPKHJ4X2RtYV9vdmVycnVucyl9LAorCS8qIFhHQkUgbW9kdWxlIDIgKi8KKwl7WEdCRV9TVEFUUzJfSU5GTyhyeF9nb29kX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMl9JTkZPKHJ4X2Jyb2FkY2FzdF9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzJfSU5GTyhyeF9tdWx0aWNhc3RfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMyX0lORk8ocnhfcGF1c2VfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMyX0lORk8ocnhfY3JjX2Vycm9ycyl9LAorCXtYR0JFX1NUQVRTMl9JTkZPKHJ4X2FsaWduX2NvZGVfZXJyb3JzKX0sCisJe1hHQkVfU1RBVFMyX0lORk8ocnhfb3ZlcnNpemVkX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMl9JTkZPKHJ4X2phYmJlcl9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzJfSU5GTyhyeF91bmRlcnNpemVkX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMl9JTkZPKHJ4X2ZyYWdtZW50cyl9LAorCXtYR0JFX1NUQVRTMl9JTkZPKG92ZXJydW5fdHlwZTQpfSwKKwl7WEdCRV9TVEFUUzJfSU5GTyhvdmVycnVuX3R5cGU1KX0sCisJe1hHQkVfU1RBVFMyX0lORk8ocnhfYnl0ZXMpfSwKKwl7WEdCRV9TVEFUUzJfSU5GTyh0eF9nb29kX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMl9JTkZPKHR4X2Jyb2FkY2FzdF9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzJfSU5GTyh0eF9tdWx0aWNhc3RfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMyX0lORk8odHhfcGF1c2VfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMyX0lORk8odHhfZGVmZXJyZWRfZnJhbWVzKX0sCisJe1hHQkVfU1RBVFMyX0lORk8odHhfY29sbGlzaW9uX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMl9JTkZPKHR4X3NpbmdsZV9jb2xsX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMl9JTkZPKHR4X211bHRfY29sbF9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzJfSU5GTyh0eF9leGNlc3NpdmVfY29sbGlzaW9ucyl9LAorCXtYR0JFX1NUQVRTMl9JTkZPKHR4X2xhdGVfY29sbGlzaW9ucyl9LAorCXtYR0JFX1NUQVRTMl9JTkZPKHR4X3VuZGVycnVuKX0sCisJe1hHQkVfU1RBVFMyX0lORk8odHhfY2Fycmllcl9zZW5zZV9lcnJvcnMpfSwKKwl7WEdCRV9TVEFUUzJfSU5GTyh0eF9ieXRlcyl9LAorCXtYR0JFX1NUQVRTMl9JTkZPKHR4XzY0Ynl0ZV9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzJfSU5GTyh0eF82NV90b18xMjdieXRlX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMl9JTkZPKHR4XzEyOF90b18yNTVieXRlX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMl9JTkZPKHR4XzI1Nl90b181MTFieXRlX2ZyYW1lcyl9LAorCXtYR0JFX1NUQVRTMl9JTkZPKHR4XzUxMl90b18xMDIzYnl0ZV9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzJfSU5GTyh0eF8xMDI0Ynl0ZV9mcmFtZXMpfSwKKwl7WEdCRV9TVEFUUzJfSU5GTyhuZXRfYnl0ZXMpfSwKKwl7WEdCRV9TVEFUUzJfSU5GTyhyeF9zb2Zfb3ZlcnJ1bnMpfSwKKwl7WEdCRV9TVEFUUzJfSU5GTyhyeF9tb2Zfb3ZlcnJ1bnMpfSwKKwl7WEdCRV9TVEFUUzJfSU5GTyhyeF9kbWFfb3ZlcnJ1bnMpfSwKK307CisKKyNkZWZpbmUgZm9yX2VhY2hfaW50ZihpLCBwcml2KSBcCisJbGlzdF9mb3JfZWFjaF9lbnRyeSgoaSksICYocHJpdiktPmdiZV9pbnRmX2hlYWQsIGdiZV9pbnRmX2xpc3QpCisKKyNkZWZpbmUgZm9yX2VhY2hfc2VjX3NsYXZlKHNsYXZlLCBwcml2KSBcCisJbGlzdF9mb3JfZWFjaF9lbnRyeSgoc2xhdmUpLCAmKHByaXYpLT5zZWNvbmRhcnlfc2xhdmVzLCBzbGF2ZV9saXN0KQorCisjZGVmaW5lIGZpcnN0X3NlY19zbGF2ZShwcml2KQkJCQkJXAorCWxpc3RfZmlyc3RfZW50cnkoJnByaXYtPnNlY29uZGFyeV9zbGF2ZXMsIFwKKwkJCXN0cnVjdCBnYmVfc2xhdmUsIHNsYXZlX2xpc3QpCisKK3N0YXRpYyB2b2lkIGtleXN0b25lX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAorCQkJCSBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQoreworCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBORVRDUF9EUklWRVJfTkFNRSwgc2l6ZW9mKGluZm8tPmRyaXZlcikpOworCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgTkVUQ1BfRFJJVkVSX1ZFUlNJT04sIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7Cit9CisKK3N0YXRpYyB1MzIga2V5c3RvbmVfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBuZXRjcF9pbnRmICpuZXRjcCA9IG5ldGRldl9wcml2KG5kZXYpOworCisJcmV0dXJuIG5ldGNwLT5tc2dfZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCBrZXlzdG9uZV9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCW5ldGNwLT5tc2dfZW5hYmxlID0gdmFsdWU7Cit9CisKK3N0YXRpYyB2b2lkIGtleXN0b25lX2dldF9zdGF0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCisJCQkJICAgICAgdWludDMyX3Qgc3RyaW5nc2V0LCB1aW50OF90ICpkYXRhKQoreworCXN0cnVjdCBuZXRjcF9pbnRmICpuZXRjcCA9IG5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBnYmVfaW50ZiAqZ2JlX2ludGY7CisJc3RydWN0IGdiZV9wcml2ICpnYmVfZGV2OworCWludCBpOworCisJZ2JlX2ludGYgPSBuZXRjcF9tb2R1bGVfZ2V0X2ludGZfZGF0YSgmZ2JlX21vZHVsZSwgbmV0Y3ApOworCWlmICghZ2JlX2ludGYpCisJCXJldHVybjsKKwlnYmVfZGV2ID0gZ2JlX2ludGYtPmdiZV9kZXY7CisKKwlzd2l0Y2ggKHN0cmluZ3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlmb3IgKGkgPSAwOyBpIDwgZ2JlX2Rldi0+bnVtX2V0X3N0YXRzOyBpKyspIHsKKwkJCW1lbWNweShkYXRhLCBnYmVfZGV2LT5ldF9zdGF0c1tpXS5kZXNjLAorCQkJICAgICAgIEVUSF9HU1RSSU5HX0xFTik7CisJCQlkYXRhICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJfQorCQlicmVhazsKKwljYXNlIEVUSF9TU19URVNUOgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQga2V5c3RvbmVfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBzdHJpbmdzZXQpCit7CisJc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IGdiZV9pbnRmICpnYmVfaW50ZjsKKwlzdHJ1Y3QgZ2JlX3ByaXYgKmdiZV9kZXY7CisKKwlnYmVfaW50ZiA9IG5ldGNwX21vZHVsZV9nZXRfaW50Zl9kYXRhKCZnYmVfbW9kdWxlLCBuZXRjcCk7CisJaWYgKCFnYmVfaW50ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisJZ2JlX2RldiA9IGdiZV9pbnRmLT5nYmVfZGV2OworCisJc3dpdGNoIChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19URVNUOgorCQlyZXR1cm4gMDsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJcmV0dXJuIGdiZV9kZXYtPm51bV9ldF9zdGF0czsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdiZV91cGRhdGVfc3RhdHMoc3RydWN0IGdiZV9wcml2ICpnYmVfZGV2LCB1aW50NjRfdCAqZGF0YSkKK3sKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBOVUxMOworCXUzMiAgX19pb21lbSAqcDsKKwl1MzIgdG1wID0gMDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBnYmVfZGV2LT5udW1fZXRfc3RhdHM7IGkrKykgeworCQliYXNlID0gZ2JlX2Rldi0+aHdfc3RhdHNfcmVnc1tnYmVfZGV2LT5ldF9zdGF0c1tpXS50eXBlXTsKKwkJcCA9IGJhc2UgKyBnYmVfZGV2LT5ldF9zdGF0c1tpXS5vZmZzZXQ7CisJCXRtcCA9IHJlYWRsKHApOworCQlnYmVfZGV2LT5od19zdGF0c1tpXSA9IGdiZV9kZXYtPmh3X3N0YXRzW2ldICsgdG1wOworCQlpZiAoZGF0YSkKKwkJCWRhdGFbaV0gPSBnYmVfZGV2LT5od19zdGF0c1tpXTsKKwkJLyogd3JpdGUtdG8tZGVjcmVtZW50OgorCQkgKiBuZXcgcmVnaXN0ZXIgdmFsdWUgPSBvbGQgcmVnaXN0ZXIgdmFsdWUgLSB3cml0ZSB2YWx1ZQorCQkgKi8KKwkJd3JpdGVsKHRtcCwgcCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBnYmVfdXBkYXRlX3N0YXRzX3ZlcjE0KHN0cnVjdCBnYmVfcHJpdiAqZ2JlX2RldiwgdWludDY0X3QgKmRhdGEpCit7CisJdm9pZCBfX2lvbWVtICpnYmVfc3RhdHNhID0gZ2JlX2Rldi0+aHdfc3RhdHNfcmVnc1swXTsKKwl2b2lkIF9faW9tZW0gKmdiZV9zdGF0c2IgPSBnYmVfZGV2LT5od19zdGF0c19yZWdzWzFdOworCXU2NCAqaHdfc3RhdHMgPSAmZ2JlX2Rldi0+aHdfc3RhdHNbMF07CisJdm9pZCBfX2lvbWVtICpiYXNlID0gTlVMTDsKKwl1MzIgIF9faW9tZW0gKnA7CisJdTMyIHRtcCA9IDAsIHZhbCwgcGFpcl9zaXplID0gKGdiZV9kZXYtPm51bV9ldF9zdGF0cyAvIDIpOworCWludCBpLCBqLCBwYWlyOworCisJZm9yIChwYWlyID0gMDsgcGFpciA8IDI7IHBhaXIrKykgeworCQl2YWwgPSByZWFkbChHQkVfUkVHX0FERFIoZ2JlX2Rldiwgc3dpdGNoX3JlZ3MsIHN0YXRfcG9ydF9lbikpOworCisJCWlmIChwYWlyID09IDApCisJCQl2YWwgJj0gfkdCRV9TVEFUU19DRF9TRUw7CisJCWVsc2UKKwkJCXZhbCB8PSBHQkVfU1RBVFNfQ0RfU0VMOworCisJCS8qIG1ha2UgdGhlIHN0YXQgbW9kdWxlcyB2aXNpYmxlICovCisJCXdyaXRlbCh2YWwsIEdCRV9SRUdfQUREUihnYmVfZGV2LCBzd2l0Y2hfcmVncywgc3RhdF9wb3J0X2VuKSk7CisKKwkJZm9yIChpID0gMDsgaSA8IHBhaXJfc2l6ZTsgaSsrKSB7CisJCQlqID0gcGFpciAqIHBhaXJfc2l6ZSArIGk7CisJCQlzd2l0Y2ggKGdiZV9kZXYtPmV0X3N0YXRzW2pdLnR5cGUpIHsKKwkJCWNhc2UgR0JFX1NUQVRTQV9NT0RVTEU6CisJCQljYXNlIEdCRV9TVEFUU0NfTU9EVUxFOgorCQkJCWJhc2UgPSBnYmVfc3RhdHNhOworCQkJYnJlYWs7CisJCQljYXNlIEdCRV9TVEFUU0JfTU9EVUxFOgorCQkJY2FzZSBHQkVfU1RBVFNEX01PRFVMRToKKwkJCQliYXNlICA9IGdiZV9zdGF0c2I7CisJCQlicmVhazsKKwkJCX0KKworCQkJcCA9IGJhc2UgKyBnYmVfZGV2LT5ldF9zdGF0c1tqXS5vZmZzZXQ7CisJCQl0bXAgPSByZWFkbChwKTsKKwkJCWh3X3N0YXRzW2pdICs9IHRtcDsKKwkJCWlmIChkYXRhKQorCQkJCWRhdGFbal0gPSBod19zdGF0c1tqXTsKKwkJCS8qIHdyaXRlLXRvLWRlY3JlbWVudDoKKwkJCSAqIG5ldyByZWdpc3RlciB2YWx1ZSA9IG9sZCByZWdpc3RlciB2YWx1ZSAtIHdyaXRlIHZhbHVlCisJCQkgKi8KKwkJCXdyaXRlbCh0bXAsIHApOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBrZXlzdG9uZV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKKwkJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLAorCQkJCSAgICAgICB1aW50NjRfdCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3QgZ2JlX2ludGYgKmdiZV9pbnRmOworCXN0cnVjdCBnYmVfcHJpdiAqZ2JlX2RldjsKKworCWdiZV9pbnRmID0gbmV0Y3BfbW9kdWxlX2dldF9pbnRmX2RhdGEoJmdiZV9tb2R1bGUsIG5ldGNwKTsKKwlpZiAoIWdiZV9pbnRmKQorCQlyZXR1cm47CisKKwlnYmVfZGV2ID0gZ2JlX2ludGYtPmdiZV9kZXY7CisJc3Bpbl9sb2NrX2JoKCZnYmVfZGV2LT5od19zdGF0c19sb2NrKTsKKwlpZiAoZ2JlX2Rldi0+c3NfdmVyc2lvbiA9PSBHQkVfU1NfVkVSU0lPTl8xNCkKKwkJZ2JlX3VwZGF0ZV9zdGF0c192ZXIxNChnYmVfZGV2LCBkYXRhKTsKKwllbHNlCisJCWdiZV91cGRhdGVfc3RhdHMoZ2JlX2RldiwgZGF0YSk7CisJc3Bpbl91bmxvY2tfYmgoJmdiZV9kZXYtPmh3X3N0YXRzX2xvY2spOworfQorCitzdGF0aWMgaW50IGtleXN0b25lX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKKwkJCQkgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSA9IG5kZXYtPnBoeWRldjsKKwlzdHJ1Y3QgZ2JlX2ludGYgKmdiZV9pbnRmOworCWludCByZXQ7CisKKwlpZiAoIXBoeSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlnYmVfaW50ZiA9IG5ldGNwX21vZHVsZV9nZXRfaW50Zl9kYXRhKCZnYmVfbW9kdWxlLCBuZXRjcCk7CisJaWYgKCFnYmVfaW50ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWdiZV9pbnRmLT5zbGF2ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBwaHlfZXRodG9vbF9nc2V0KHBoeSwgY21kKTsKKwlpZiAoIXJldCkKKwkJY21kLT5wb3J0ID0gZ2JlX2ludGYtPnNsYXZlLT5waHlfcG9ydF90OworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBrZXlzdG9uZV9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCisJCQkJIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBuZXRjcF9pbnRmICpuZXRjcCA9IG5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHkgPSBuZGV2LT5waHlkZXY7CisJc3RydWN0IGdiZV9pbnRmICpnYmVfaW50ZjsKKwl1MzIgZmVhdHVyZXMgPSBjbWQtPmFkdmVydGlzaW5nICYgY21kLT5zdXBwb3J0ZWQ7CisKKwlpZiAoIXBoeSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlnYmVfaW50ZiA9IG5ldGNwX21vZHVsZV9nZXRfaW50Zl9kYXRhKCZnYmVfbW9kdWxlLCBuZXRjcCk7CisJaWYgKCFnYmVfaW50ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWdiZV9pbnRmLT5zbGF2ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY21kLT5wb3J0ICE9IGdiZV9pbnRmLT5zbGF2ZS0+cGh5X3BvcnRfdCkgeworCQlpZiAoKGNtZC0+cG9ydCA9PSBQT1JUX1RQKSAmJiAhKGZlYXR1cmVzICYgQURWRVJUSVNFRF9UUCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoKGNtZC0+cG9ydCA9PSBQT1JUX0FVSSkgJiYgIShmZWF0dXJlcyAmIEFEVkVSVElTRURfQVVJKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICgoY21kLT5wb3J0ID09IFBPUlRfQk5DKSAmJiAhKGZlYXR1cmVzICYgQURWRVJUSVNFRF9CTkMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJaWYgKChjbWQtPnBvcnQgPT0gUE9SVF9NSUkpICYmICEoZmVhdHVyZXMgJiBBRFZFUlRJU0VEX01JSSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoKGNtZC0+cG9ydCA9PSBQT1JUX0ZJQlJFKSAmJiAhKGZlYXR1cmVzICYgQURWRVJUSVNFRF9GSUJSRSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlnYmVfaW50Zi0+c2xhdmUtPnBoeV9wb3J0X3QgPSBjbWQtPnBvcnQ7CisJcmV0dXJuIHBoeV9ldGh0b29sX3NzZXQocGh5LCBjbWQpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGtleXN0b25lX2V0aHRvb2xfb3BzID0geworCS5nZXRfZHJ2aW5mbwkJPSBrZXlzdG9uZV9nZXRfZHJ2aW5mbywKKwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X21zZ2xldmVsCQk9IGtleXN0b25lX2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsCQk9IGtleXN0b25lX3NldF9tc2dsZXZlbCwKKwkuZ2V0X3N0cmluZ3MJCT0ga2V5c3RvbmVfZ2V0X3N0YXRfc3RyaW5ncywKKwkuZ2V0X3NzZXRfY291bnQJCT0ga2V5c3RvbmVfZ2V0X3NzZXRfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzCT0ga2V5c3RvbmVfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9zZXR0aW5ncwkJPSBrZXlzdG9uZV9nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncwkJPSBrZXlzdG9uZV9zZXRfc2V0dGluZ3MsCit9OworCisjZGVmaW5lIG1hY19oaShtYWMpCSgoKG1hYylbMF0gPDwgMCkgfCAoKG1hYylbMV0gPDwgOCkgfAlcCisJCQkgKChtYWMpWzJdIDw8IDE2KSB8ICgobWFjKVszXSA8PCAyNCkpCisjZGVmaW5lIG1hY19sbyhtYWMpCSgoKG1hYylbNF0gPDwgMCkgfCAoKG1hYylbNV0gPDwgOCkpCisKK3N0YXRpYyB2b2lkIGdiZV9zZXRfc2xhdmVfbWFjKHN0cnVjdCBnYmVfc2xhdmUgKnNsYXZlLAorCQkJICAgICAgc3RydWN0IGdiZV9pbnRmICpnYmVfaW50ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGdiZV9pbnRmLT5uZGV2OworCisJd3JpdGVsKG1hY19oaShuZGV2LT5kZXZfYWRkciksIEdCRV9SRUdfQUREUihzbGF2ZSwgcG9ydF9yZWdzLCBzYV9oaSkpOworCXdyaXRlbChtYWNfbG8obmRldi0+ZGV2X2FkZHIpLCBHQkVfUkVHX0FERFIoc2xhdmUsIHBvcnRfcmVncywgc2FfbG8pKTsKK30KKworc3RhdGljIGludCBnYmVfZ2V0X3NsYXZlX3BvcnQoc3RydWN0IGdiZV9wcml2ICpwcml2LCB1MzIgc2xhdmVfbnVtKQoreworCWlmIChwcml2LT5ob3N0X3BvcnQgPT0gMCkKKwkJcmV0dXJuIHNsYXZlX251bSArIDE7CisKKwlyZXR1cm4gc2xhdmVfbnVtOworfQorCitzdGF0aWMgdm9pZCBuZXRjcF9ldGhzc19saW5rX3N0YXRlX2FjdGlvbihzdHJ1Y3QgZ2JlX3ByaXYgKmdiZV9kZXYsCisJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCisJCQkJCSAgc3RydWN0IGdiZV9zbGF2ZSAqc2xhdmUsCisJCQkJCSAgaW50IHVwKQoreworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHkgPSBzbGF2ZS0+cGh5OworCXUzMiBtYWNfY29udHJvbCA9IDA7CisKKwlpZiAodXApIHsKKwkJbWFjX2NvbnRyb2wgPSBzbGF2ZS0+bWFjX2NvbnRyb2w7CisJCWlmIChwaHkgJiYgKHBoeS0+c3BlZWQgPT0gU1BFRURfMTAwMCkpIHsKKwkJCW1hY19jb250cm9sIHw9IE1BQ1NMX0dJR19NT0RFOworCQkJbWFjX2NvbnRyb2wgJj0gfk1BQ1NMX1hHSUdfTU9ERTsKKwkJfSBlbHNlIGlmIChwaHkgJiYgKHBoeS0+c3BlZWQgPT0gU1BFRURfMTAwMDApKSB7CisJCQltYWNfY29udHJvbCB8PSBNQUNTTF9YR0lHX01PREU7CisJCQltYWNfY29udHJvbCAmPSB+TUFDU0xfR0lHX01PREU7CisJCX0KKworCQl3cml0ZWwobWFjX2NvbnRyb2wsIEdCRV9SRUdfQUREUihzbGF2ZSwgZW1hY19yZWdzLAorCQkJCQkJIG1hY19jb250cm9sKSk7CisKKwkJY3Bzd19hbGVfY29udHJvbF9zZXQoZ2JlX2Rldi0+YWxlLCBzbGF2ZS0+cG9ydF9udW0sCisJCQkJICAgICBBTEVfUE9SVF9TVEFURSwKKwkJCQkgICAgIEFMRV9QT1JUX1NUQVRFX0ZPUldBUkQpOworCisJCWlmIChuZGV2ICYmIHNsYXZlLT5vcGVuKQorCQkJbmV0aWZfY2Fycmllcl9vbihuZGV2KTsKKwl9IGVsc2UgeworCQl3cml0ZWwobWFjX2NvbnRyb2wsIEdCRV9SRUdfQUREUihzbGF2ZSwgZW1hY19yZWdzLAorCQkJCQkJIG1hY19jb250cm9sKSk7CisJCWNwc3dfYWxlX2NvbnRyb2xfc2V0KGdiZV9kZXYtPmFsZSwgc2xhdmUtPnBvcnRfbnVtLAorCQkJCSAgICAgQUxFX1BPUlRfU1RBVEUsCisJCQkJICAgICBBTEVfUE9SVF9TVEFURV9ESVNBQkxFKTsKKwkJaWYgKG5kZXYpCisJCQluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKKwl9CisKKwlpZiAocGh5KQorCQlwaHlfcHJpbnRfc3RhdHVzKHBoeSk7Cit9CisKK3N0YXRpYyBib29sIGdiZV9waHlfbGlua19zdGF0dXMoc3RydWN0IGdiZV9zbGF2ZSAqc2xhdmUpCit7CisJIHJldHVybiAhc2xhdmUtPnBoeSB8fCBzbGF2ZS0+cGh5LT5saW5rOworfQorCitzdGF0aWMgdm9pZCBuZXRjcF9ldGhzc191cGRhdGVfbGlua19zdGF0ZShzdHJ1Y3QgZ2JlX3ByaXYgKmdiZV9kZXYsCisJCQkJCSAgc3RydWN0IGdiZV9zbGF2ZSAqc2xhdmUsCisJCQkJCSAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJaW50IHNwID0gc2xhdmUtPnNsYXZlX251bTsKKwlpbnQgcGh5X2xpbmtfc3RhdGUsIHNnbWlpX2xpbmtfc3RhdGUgPSAxLCBsaW5rX3N0YXRlOworCisJaWYgKCFzbGF2ZS0+b3BlbikKKwkJcmV0dXJuOworCisJaWYgKCFTTEFWRV9MSU5LX0lTX1hHTUlJKHNsYXZlKSkKKwkJc2dtaWlfbGlua19zdGF0ZSA9IG5ldGNwX3NnbWlpX2dldF9wb3J0X2xpbmsoU0dNSUlfQkFTRShzcCksCisJCQkJCQkJICAgICBzcCk7CisJcGh5X2xpbmtfc3RhdGUgPSBnYmVfcGh5X2xpbmtfc3RhdHVzKHNsYXZlKTsKKwlsaW5rX3N0YXRlID0gcGh5X2xpbmtfc3RhdGUgJiBzZ21paV9saW5rX3N0YXRlOworCisJaWYgKGF0b21pY194Y2hnKCZzbGF2ZS0+bGlua19zdGF0ZSwgbGlua19zdGF0ZSkgIT0gbGlua19zdGF0ZSkKKwkJbmV0Y3BfZXRoc3NfbGlua19zdGF0ZV9hY3Rpb24oZ2JlX2RldiwgbmRldiwgc2xhdmUsCisJCQkJCSAgICAgIGxpbmtfc3RhdGUpOworfQorCitzdGF0aWMgdm9pZCB4Z2JlX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBuZXRjcF9pbnRmICpuZXRjcCA9IG5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBnYmVfaW50ZiAqZ2JlX2ludGY7CisKKwlnYmVfaW50ZiA9IG5ldGNwX21vZHVsZV9nZXRfaW50Zl9kYXRhKCZ4Z2JlX21vZHVsZSwgbmV0Y3ApOworCWlmICghZ2JlX2ludGYpCisJCXJldHVybjsKKworCW5ldGNwX2V0aHNzX3VwZGF0ZV9saW5rX3N0YXRlKGdiZV9pbnRmLT5nYmVfZGV2LCBnYmVfaW50Zi0+c2xhdmUsCisJCQkJICAgICAgbmRldik7Cit9CisKK3N0YXRpYyB2b2lkIGdiZV9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3QgbmV0Y3BfaW50ZiAqbmV0Y3AgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3QgZ2JlX2ludGYgKmdiZV9pbnRmOworCisJZ2JlX2ludGYgPSBuZXRjcF9tb2R1bGVfZ2V0X2ludGZfZGF0YSgmZ2JlX21vZHVsZSwgbmV0Y3ApOworCWlmICghZ2JlX2ludGYpCisJCXJldHVybjsKKworCW5ldGNwX2V0aHNzX3VwZGF0ZV9saW5rX3N0YXRlKGdiZV9pbnRmLT5nYmVfZGV2LCBnYmVfaW50Zi0+c2xhdmUsCisJCQkJICAgICAgbmRldik7Cit9CisKK3N0YXRpYyB2b2lkIGdiZV9hZGp1c3RfbGlua19zZWNfc2xhdmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBnYmVfcHJpdiAqZ2JlX2RldiA9IG5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBnYmVfc2xhdmUgKnNsYXZlOworCisJZm9yX2VhY2hfc2VjX3NsYXZlKHNsYXZlLCBnYmVfZGV2KQorCQluZXRjcF9ldGhzc191cGRhdGVfbGlua19zdGF0ZShnYmVfZGV2LCBzbGF2ZSwgTlVMTCk7Cit9CisKKy8qIFJlc2V0IEVNQUMKKyAqIFNvZnQgcmVzZXQgaXMgc2V0IGFuZCBwb2xsZWQgdW50aWwgY2xlYXIsIG9yIHVudGlsIGEgdGltZW91dCBvY2N1cnMKKyAqLworc3RhdGljIGludCBnYmVfcG9ydF9yZXNldChzdHJ1Y3QgZ2JlX3NsYXZlICpzbGF2ZSkKK3sKKwl1MzIgaSwgdjsKKworCS8qIFNldCB0aGUgc29mdCByZXNldCBiaXQgKi8KKwl3cml0ZWwoU09GVF9SRVNFVCwgR0JFX1JFR19BRERSKHNsYXZlLCBlbWFjX3JlZ3MsIHNvZnRfcmVzZXQpKTsKKworCS8qIFdhaXQgZm9yIHRoZSBiaXQgdG8gY2xlYXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgREVWSUNFX0VNQUNTTF9SRVNFVF9QT0xMX0NPVU5UOyBpKyspIHsKKwkJdiA9IHJlYWRsKEdCRV9SRUdfQUREUihzbGF2ZSwgZW1hY19yZWdzLCBzb2Z0X3Jlc2V0KSk7CisJCWlmICgodiAmIFNPRlRfUkVTRVRfTUFTSykgIT0gU09GVF9SRVNFVCkKKwkJCXJldHVybiAwOworCX0KKworCS8qIFRpbWVvdXQgb24gdGhlIHJlc2V0ICovCisJcmV0dXJuIEdNQUNTTF9SRVRfV0FSTl9SRVNFVF9JTkNPTVBMRVRFOworfQorCisvKiBDb25maWd1cmUgRU1BQyAqLworc3RhdGljIHZvaWQgZ2JlX3BvcnRfY29uZmlnKHN0cnVjdCBnYmVfcHJpdiAqZ2JlX2Rldiwgc3RydWN0IGdiZV9zbGF2ZSAqc2xhdmUsCisJCQkgICAgaW50IG1heF9yeF9sZW4pCit7CisJdTMyIHhnbWlpX21vZGU7CisKKwlpZiAobWF4X3J4X2xlbiA+IE5FVENQX01BWF9GUkFNRV9TSVpFKQorCQltYXhfcnhfbGVuID0gTkVUQ1BfTUFYX0ZSQU1FX1NJWkU7CisKKwkvKiBFbmFibGUgY29ycmVjdCBNSUkgbW9kZSBhdCBTUyBsZXZlbCAqLworCWlmICgoZ2JlX2Rldi0+c3NfdmVyc2lvbiA9PSBYR0JFX1NTX1ZFUlNJT05fMTApICYmCisJICAgIChzbGF2ZS0+bGlua19pbnRlcmZhY2UgPj0gWEdNSUlfTElOS19NQUNfUEhZKSkgeworCQl4Z21paV9tb2RlID0gcmVhZGwoR0JFX1JFR19BRERSKGdiZV9kZXYsIHNzX3JlZ3MsIGNvbnRyb2wpKTsKKwkJeGdtaWlfbW9kZSB8PSAoMSA8PCBzbGF2ZS0+c2xhdmVfbnVtKTsKKwkJd3JpdGVsKHhnbWlpX21vZGUsIEdCRV9SRUdfQUREUihnYmVfZGV2LCBzc19yZWdzLCBjb250cm9sKSk7CisJfQorCisJd3JpdGVsKG1heF9yeF9sZW4sIEdCRV9SRUdfQUREUihzbGF2ZSwgZW1hY19yZWdzLCByeF9tYXhsZW4pKTsKKwl3cml0ZWwoc2xhdmUtPm1hY19jb250cm9sLCBHQkVfUkVHX0FERFIoc2xhdmUsIGVtYWNfcmVncywgbWFjX2NvbnRyb2wpKTsKK30KKworc3RhdGljIHZvaWQgZ2JlX3NsYXZlX3N0b3Aoc3RydWN0IGdiZV9pbnRmICppbnRmKQoreworCXN0cnVjdCBnYmVfcHJpdiAqZ2JlX2RldiA9IGludGYtPmdiZV9kZXY7CisJc3RydWN0IGdiZV9zbGF2ZSAqc2xhdmUgPSBpbnRmLT5zbGF2ZTsKKworCWdiZV9wb3J0X3Jlc2V0KHNsYXZlKTsKKwkvKiBEaXNhYmxlIGZvcndhcmRpbmcgKi8KKwljcHN3X2FsZV9jb250cm9sX3NldChnYmVfZGV2LT5hbGUsIHNsYXZlLT5wb3J0X251bSwKKwkJCSAgICAgQUxFX1BPUlRfU1RBVEUsIEFMRV9QT1JUX1NUQVRFX0RJU0FCTEUpOworCWNwc3dfYWxlX2RlbF9tY2FzdChnYmVfZGV2LT5hbGUsIGludGYtPm5kZXYtPmJyb2FkY2FzdCwKKwkJCSAgIDEgPDwgc2xhdmUtPnBvcnRfbnVtLCAwLCAwKTsKKworCWlmICghc2xhdmUtPnBoeSkKKwkJcmV0dXJuOworCisJcGh5X3N0b3Aoc2xhdmUtPnBoeSk7CisJcGh5X2Rpc2Nvbm5lY3Qoc2xhdmUtPnBoeSk7CisJc2xhdmUtPnBoeSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGdiZV9zZ21paV9jb25maWcoc3RydWN0IGdiZV9wcml2ICpwcml2LCBzdHJ1Y3QgZ2JlX3NsYXZlICpzbGF2ZSkKK3sKKwl2b2lkIF9faW9tZW0gKnNnbWlpX3BvcnRfcmVnczsKKworCXNnbWlpX3BvcnRfcmVncyA9IHByaXYtPnNnbWlpX3BvcnRfcmVnczsKKwlpZiAoKHByaXYtPnNzX3ZlcnNpb24gPT0gR0JFX1NTX1ZFUlNJT05fMTQpICYmIChzbGF2ZS0+c2xhdmVfbnVtID49IDIpKQorCQlzZ21paV9wb3J0X3JlZ3MgPSBwcml2LT5zZ21paV9wb3J0MzRfcmVnczsKKworCWlmICghU0xBVkVfTElOS19JU19YR01JSShzbGF2ZSkpIHsKKwkJbmV0Y3Bfc2dtaWlfcmVzZXQoc2dtaWlfcG9ydF9yZWdzLCBzbGF2ZS0+c2xhdmVfbnVtKTsKKwkJbmV0Y3Bfc2dtaWlfY29uZmlnKHNnbWlpX3BvcnRfcmVncywgc2xhdmUtPnNsYXZlX251bSwKKwkJCQkgICBzbGF2ZS0+bGlua19pbnRlcmZhY2UpOworCX0KK30KKworc3RhdGljIGludCBnYmVfc2xhdmVfb3BlbihzdHJ1Y3QgZ2JlX2ludGYgKmdiZV9pbnRmKQoreworCXN0cnVjdCBnYmVfcHJpdiAqcHJpdiA9IGdiZV9pbnRmLT5nYmVfZGV2OworCXN0cnVjdCBnYmVfc2xhdmUgKnNsYXZlID0gZ2JlX2ludGYtPnNsYXZlOworCXBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTsKKwlib29sIGhhc19waHkgPSBmYWxzZTsKKworCXZvaWQgKCpobmRscikoc3RydWN0IG5ldF9kZXZpY2UgKikgPSBnYmVfYWRqdXN0X2xpbms7CisKKwlnYmVfc2dtaWlfY29uZmlnKHByaXYsIHNsYXZlKTsKKwlnYmVfcG9ydF9yZXNldChzbGF2ZSk7CisJZ2JlX3BvcnRfY29uZmlnKHByaXYsIHNsYXZlLCBwcml2LT5yeF9wYWNrZXRfbWF4KTsKKwlnYmVfc2V0X3NsYXZlX21hYyhzbGF2ZSwgZ2JlX2ludGYpOworCS8qIGVuYWJsZSBmb3J3YXJkaW5nICovCisJY3Bzd19hbGVfY29udHJvbF9zZXQocHJpdi0+YWxlLCBzbGF2ZS0+cG9ydF9udW0sCisJCQkgICAgIEFMRV9QT1JUX1NUQVRFLCBBTEVfUE9SVF9TVEFURV9GT1JXQVJEKTsKKwljcHN3X2FsZV9hZGRfbWNhc3QocHJpdi0+YWxlLCBnYmVfaW50Zi0+bmRldi0+YnJvYWRjYXN0LAorCQkJICAgMSA8PCBzbGF2ZS0+cG9ydF9udW0sIDAsIDAsIEFMRV9NQ0FTVF9GV0RfMik7CisKKwlpZiAoc2xhdmUtPmxpbmtfaW50ZXJmYWNlID09IFNHTUlJX0xJTktfTUFDX1BIWSkgeworCQloYXNfcGh5ID0gdHJ1ZTsKKwkJcGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk7CisJCXNsYXZlLT5waHlfcG9ydF90ID0gUE9SVF9NSUk7CisJfSBlbHNlIGlmIChzbGF2ZS0+bGlua19pbnRlcmZhY2UgPT0gWEdNSUlfTElOS19NQUNfUEhZKSB7CisJCWhhc19waHkgPSB0cnVlOworCQlwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQTsKKwkJc2xhdmUtPnBoeV9wb3J0X3QgPSBQT1JUX0ZJQlJFOworCX0KKworCWlmIChoYXNfcGh5KSB7CisJCWlmIChwcml2LT5zc192ZXJzaW9uID09IFhHQkVfU1NfVkVSU0lPTl8xMCkKKwkJCWhuZGxyID0geGdiZV9hZGp1c3RfbGluazsKKworCQlzbGF2ZS0+cGh5ID0gb2ZfcGh5X2Nvbm5lY3QoZ2JlX2ludGYtPm5kZXYsCisJCQkJCSAgICBzbGF2ZS0+cGh5X25vZGUsCisJCQkJCSAgICBobmRsciwgMCwKKwkJCQkJICAgIHBoeV9tb2RlKTsKKwkJaWYgKCFzbGF2ZS0+cGh5KSB7CisJCQlkZXZfZXJyKHByaXYtPmRldiwgInBoeSBub3QgZm91bmQgb24gc2xhdmUgJWRcbiIsCisJCQkJc2xhdmUtPnNsYXZlX251bSk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCQlkZXZfZGJnKHByaXYtPmRldiwgInBoeSBmb3VuZDogaWQgaXM6IDB4JXNcbiIsCisJCQlkZXZfbmFtZSgmc2xhdmUtPnBoeS0+ZGV2KSk7CisJCXBoeV9zdGFydChzbGF2ZS0+cGh5KTsKKwkJcGh5X3JlYWRfc3RhdHVzKHNsYXZlLT5waHkpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ2JlX2luaXRfaG9zdF9wb3J0KHN0cnVjdCBnYmVfcHJpdiAqcHJpdikKK3sKKwlpbnQgYnlwYXNzX2VuID0gMTsKKwkvKiBNYXggbGVuZ3RoIHJlZ2lzdGVyICovCisJd3JpdGVsKE5FVENQX01BWF9GUkFNRV9TSVpFLCBHQkVfUkVHX0FERFIocHJpdiwgaG9zdF9wb3J0X3JlZ3MsCisJCQkJCQkgIHJ4X21heGxlbikpOworCisJY3Bzd19hbGVfc3RhcnQocHJpdi0+YWxlKTsKKworCWlmIChwcml2LT5lbmFibGVfYWxlKQorCQlieXBhc3NfZW4gPSAwOworCisJY3Bzd19hbGVfY29udHJvbF9zZXQocHJpdi0+YWxlLCAwLCBBTEVfQllQQVNTLCBieXBhc3NfZW4pOworCisJY3Bzd19hbGVfY29udHJvbF9zZXQocHJpdi0+YWxlLCAwLCBBTEVfTk9fUE9SVF9WTEFOLCAxKTsKKworCWNwc3dfYWxlX2NvbnRyb2xfc2V0KHByaXYtPmFsZSwgcHJpdi0+aG9zdF9wb3J0LAorCQkJICAgICBBTEVfUE9SVF9TVEFURSwgQUxFX1BPUlRfU1RBVEVfRk9SV0FSRCk7CisKKwljcHN3X2FsZV9jb250cm9sX3NldChwcml2LT5hbGUsIDAsCisJCQkgICAgIEFMRV9QT1JUX1VOS05PV05fVkxBTl9NRU1CRVIsCisJCQkgICAgIEdCRV9QT1JUX01BU0socHJpdi0+YWxlX3BvcnRzKSk7CisKKwljcHN3X2FsZV9jb250cm9sX3NldChwcml2LT5hbGUsIDAsCisJCQkgICAgIEFMRV9QT1JUX1VOS05PV05fTUNBU1RfRkxPT0QsCisJCQkgICAgIEdCRV9QT1JUX01BU0socHJpdi0+YWxlX3BvcnRzIC0gMSkpOworCisJY3Bzd19hbGVfY29udHJvbF9zZXQocHJpdi0+YWxlLCAwLAorCQkJICAgICBBTEVfUE9SVF9VTktOT1dOX1JFR19NQ0FTVF9GTE9PRCwKKwkJCSAgICAgR0JFX1BPUlRfTUFTSyhwcml2LT5hbGVfcG9ydHMpKTsKKworCWNwc3dfYWxlX2NvbnRyb2xfc2V0KHByaXYtPmFsZSwgMCwKKwkJCSAgICAgQUxFX1BPUlRfVU5UQUdHRURfRUdSRVNTLAorCQkJICAgICBHQkVfUE9SVF9NQVNLKHByaXYtPmFsZV9wb3J0cykpOworfQorCitzdGF0aWMgdm9pZCBnYmVfYWRkX21jYXN0X2FkZHIoc3RydWN0IGdiZV9pbnRmICpnYmVfaW50ZiwgdTggKmFkZHIpCit7CisJc3RydWN0IGdiZV9wcml2ICpnYmVfZGV2ID0gZ2JlX2ludGYtPmdiZV9kZXY7CisJdTE2IHZsYW5faWQ7CisKKwljcHN3X2FsZV9hZGRfbWNhc3QoZ2JlX2Rldi0+YWxlLCBhZGRyLAorCQkJICAgR0JFX1BPUlRfTUFTSyhnYmVfZGV2LT5hbGVfcG9ydHMpLCAwLCAwLAorCQkJICAgQUxFX01DQVNUX0ZXRF8yKTsKKwlmb3JfZWFjaF9zZXRfYml0KHZsYW5faWQsIGdiZV9pbnRmLT5hY3RpdmVfdmxhbnMsIFZMQU5fTl9WSUQpIHsKKwkJY3Bzd19hbGVfYWRkX21jYXN0KGdiZV9kZXYtPmFsZSwgYWRkciwKKwkJCQkgICBHQkVfUE9SVF9NQVNLKGdiZV9kZXYtPmFsZV9wb3J0cyksCisJCQkJICAgQUxFX1ZMQU4sIHZsYW5faWQsIEFMRV9NQ0FTVF9GV0RfMik7CisJfQorfQorCitzdGF0aWMgdm9pZCBnYmVfYWRkX3VjYXN0X2FkZHIoc3RydWN0IGdiZV9pbnRmICpnYmVfaW50ZiwgdTggKmFkZHIpCit7CisJc3RydWN0IGdiZV9wcml2ICpnYmVfZGV2ID0gZ2JlX2ludGYtPmdiZV9kZXY7CisJdTE2IHZsYW5faWQ7CisKKwljcHN3X2FsZV9hZGRfdWNhc3QoZ2JlX2Rldi0+YWxlLCBhZGRyLCBnYmVfZGV2LT5ob3N0X3BvcnQsIDAsIDApOworCisJZm9yX2VhY2hfc2V0X2JpdCh2bGFuX2lkLCBnYmVfaW50Zi0+YWN0aXZlX3ZsYW5zLCBWTEFOX05fVklEKQorCQljcHN3X2FsZV9hZGRfdWNhc3QoZ2JlX2Rldi0+YWxlLCBhZGRyLCBnYmVfZGV2LT5ob3N0X3BvcnQsCisJCQkJICAgQUxFX1ZMQU4sIHZsYW5faWQpOworfQorCitzdGF0aWMgdm9pZCBnYmVfZGVsX21jYXN0X2FkZHIoc3RydWN0IGdiZV9pbnRmICpnYmVfaW50ZiwgdTggKmFkZHIpCit7CisJc3RydWN0IGdiZV9wcml2ICpnYmVfZGV2ID0gZ2JlX2ludGYtPmdiZV9kZXY7CisJdTE2IHZsYW5faWQ7CisKKwljcHN3X2FsZV9kZWxfbWNhc3QoZ2JlX2Rldi0+YWxlLCBhZGRyLCAwLCAwLCAwKTsKKworCWZvcl9lYWNoX3NldF9iaXQodmxhbl9pZCwgZ2JlX2ludGYtPmFjdGl2ZV92bGFucywgVkxBTl9OX1ZJRCkgeworCQljcHN3X2FsZV9kZWxfbWNhc3QoZ2JlX2Rldi0+YWxlLCBhZGRyLCAwLCBBTEVfVkxBTiwgdmxhbl9pZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBnYmVfZGVsX3VjYXN0X2FkZHIoc3RydWN0IGdiZV9pbnRmICpnYmVfaW50ZiwgdTggKmFkZHIpCit7CisJc3RydWN0IGdiZV9wcml2ICpnYmVfZGV2ID0gZ2JlX2ludGYtPmdiZV9kZXY7CisJdTE2IHZsYW5faWQ7CisKKwljcHN3X2FsZV9kZWxfdWNhc3QoZ2JlX2Rldi0+YWxlLCBhZGRyLCBnYmVfZGV2LT5ob3N0X3BvcnQsIDAsIDApOworCisJZm9yX2VhY2hfc2V0X2JpdCh2bGFuX2lkLCBnYmVfaW50Zi0+YWN0aXZlX3ZsYW5zLCBWTEFOX05fVklEKSB7CisJCWNwc3dfYWxlX2RlbF91Y2FzdChnYmVfZGV2LT5hbGUsIGFkZHIsIGdiZV9kZXYtPmhvc3RfcG9ydCwKKwkJCQkgICBBTEVfVkxBTiwgdmxhbl9pZCk7CisJfQorfQorCitzdGF0aWMgaW50IGdiZV9hZGRfYWRkcih2b2lkICppbnRmX3ByaXYsIHN0cnVjdCBuZXRjcF9hZGRyICpuYWRkcikKK3sKKwlzdHJ1Y3QgZ2JlX2ludGYgKmdiZV9pbnRmID0gaW50Zl9wcml2OworCXN0cnVjdCBnYmVfcHJpdiAqZ2JlX2RldiA9IGdiZV9pbnRmLT5nYmVfZGV2OworCisJZGV2X2RiZyhnYmVfZGV2LT5kZXYsICJldGhzcyBhZGRpbmcgYWRkcmVzcyAlcE0sIHR5cGUgJWRcbiIsCisJCW5hZGRyLT5hZGRyLCBuYWRkci0+dHlwZSk7CisKKwlzd2l0Y2ggKG5hZGRyLT50eXBlKSB7CisJY2FzZSBBRERSX01DQVNUOgorCWNhc2UgQUREUl9CQ0FTVDoKKwkJZ2JlX2FkZF9tY2FzdF9hZGRyKGdiZV9pbnRmLCBuYWRkci0+YWRkcik7CisJCWJyZWFrOworCWNhc2UgQUREUl9VQ0FTVDoKKwljYXNlIEFERFJfREVWOgorCQlnYmVfYWRkX3VjYXN0X2FkZHIoZ2JlX2ludGYsIG5hZGRyLT5hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBBRERSX0FOWToKKwkJLyogbm90aGluZyB0byBkbyBmb3IgcHJvbWlzY3VvdXMgKi8KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnYmVfZGVsX2FkZHIodm9pZCAqaW50Zl9wcml2LCBzdHJ1Y3QgbmV0Y3BfYWRkciAqbmFkZHIpCit7CisJc3RydWN0IGdiZV9pbnRmICpnYmVfaW50ZiA9IGludGZfcHJpdjsKKwlzdHJ1Y3QgZ2JlX3ByaXYgKmdiZV9kZXYgPSBnYmVfaW50Zi0+Z2JlX2RldjsKKworCWRldl9kYmcoZ2JlX2Rldi0+ZGV2LCAiZXRoc3MgZGVsZXRpbmcgYWRkcmVzcyAlcE0sIHR5cGUgJWRcbiIsCisJCW5hZGRyLT5hZGRyLCBuYWRkci0+dHlwZSk7CisKKwlzd2l0Y2ggKG5hZGRyLT50eXBlKSB7CisJY2FzZSBBRERSX01DQVNUOgorCWNhc2UgQUREUl9CQ0FTVDoKKwkJZ2JlX2RlbF9tY2FzdF9hZGRyKGdiZV9pbnRmLCBuYWRkci0+YWRkcik7CisJCWJyZWFrOworCWNhc2UgQUREUl9VQ0FTVDoKKwljYXNlIEFERFJfREVWOgorCQlnYmVfZGVsX3VjYXN0X2FkZHIoZ2JlX2ludGYsIG5hZGRyLT5hZGRyKTsKKwkJYnJlYWs7CisJY2FzZSBBRERSX0FOWToKKwkJLyogbm90aGluZyB0byBkbyBmb3IgcHJvbWlzY3VvdXMgKi8KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnYmVfYWRkX3ZpZCh2b2lkICppbnRmX3ByaXYsIGludCB2aWQpCit7CisJc3RydWN0IGdiZV9pbnRmICpnYmVfaW50ZiA9IGludGZfcHJpdjsKKwlzdHJ1Y3QgZ2JlX3ByaXYgKmdiZV9kZXYgPSBnYmVfaW50Zi0+Z2JlX2RldjsKKworCXNldF9iaXQodmlkLCBnYmVfaW50Zi0+YWN0aXZlX3ZsYW5zKTsKKworCWNwc3dfYWxlX2FkZF92bGFuKGdiZV9kZXYtPmFsZSwgdmlkLAorCQkJICBHQkVfUE9SVF9NQVNLKGdiZV9kZXYtPmFsZV9wb3J0cyksCisJCQkgIEdCRV9NQVNLX05PX1BPUlRTLAorCQkJICBHQkVfUE9SVF9NQVNLKGdiZV9kZXYtPmFsZV9wb3J0cyksCisJCQkgIEdCRV9QT1JUX01BU0soZ2JlX2Rldi0+YWxlX3BvcnRzIC0gMSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2JlX2RlbF92aWQodm9pZCAqaW50Zl9wcml2LCBpbnQgdmlkKQoreworCXN0cnVjdCBnYmVfaW50ZiAqZ2JlX2ludGYgPSBpbnRmX3ByaXY7CisJc3RydWN0IGdiZV9wcml2ICpnYmVfZGV2ID0gZ2JlX2ludGYtPmdiZV9kZXY7CisKKwljcHN3X2FsZV9kZWxfdmxhbihnYmVfZGV2LT5hbGUsIHZpZCwgMCk7CisJY2xlYXJfYml0KHZpZCwgZ2JlX2ludGYtPmFjdGl2ZV92bGFucyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2JlX2lvY3RsKHZvaWQgKmludGZfcHJpdiwgc3RydWN0IGlmcmVxICpyZXEsIGludCBjbWQpCit7CisJc3RydWN0IGdiZV9pbnRmICpnYmVfaW50ZiA9IGludGZfcHJpdjsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ID0gZ2JlX2ludGYtPnNsYXZlLT5waHk7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOworCisJaWYgKHBoeSkKKwkJcmV0ID0gcGh5X21paV9pb2N0bChwaHksIHJlcSwgY21kKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG5ldGNwX2V0aHNzX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBnYmVfcHJpdiAqZ2JlX2RldiA9IChzdHJ1Y3QgZ2JlX3ByaXYgKilhcmc7CisJc3RydWN0IGdiZV9pbnRmICpnYmVfaW50ZjsKKwlzdHJ1Y3QgZ2JlX3NsYXZlICpzbGF2ZTsKKworCS8qIENoZWNrICYgdXBkYXRlIFNHTUlJIGxpbmsgc3RhdGUgb2YgaW50ZXJmYWNlcyAqLworCWZvcl9lYWNoX2ludGYoZ2JlX2ludGYsIGdiZV9kZXYpIHsKKwkJaWYgKCFnYmVfaW50Zi0+c2xhdmUtPm9wZW4pCisJCQljb250aW51ZTsKKwkJbmV0Y3BfZXRoc3NfdXBkYXRlX2xpbmtfc3RhdGUoZ2JlX2RldiwgZ2JlX2ludGYtPnNsYXZlLAorCQkJCQkgICAgICBnYmVfaW50Zi0+bmRldik7CisJfQorCisJLyogQ2hlY2sgJiB1cGRhdGUgU0dNSUkgbGluayBzdGF0ZSBvZiBzZWNvbmRhcnkgcG9ydHMgKi8KKwlmb3JfZWFjaF9zZWNfc2xhdmUoc2xhdmUsIGdiZV9kZXYpIHsKKwkJbmV0Y3BfZXRoc3NfdXBkYXRlX2xpbmtfc3RhdGUoZ2JlX2Rldiwgc2xhdmUsIE5VTEwpOworCX0KKworCXNwaW5fbG9ja19iaCgmZ2JlX2Rldi0+aHdfc3RhdHNfbG9jayk7CisKKwlpZiAoZ2JlX2Rldi0+c3NfdmVyc2lvbiA9PSBHQkVfU1NfVkVSU0lPTl8xNCkKKwkJZ2JlX3VwZGF0ZV9zdGF0c192ZXIxNChnYmVfZGV2LCBOVUxMKTsKKwllbHNlCisJCWdiZV91cGRhdGVfc3RhdHMoZ2JlX2RldiwgTlVMTCk7CisKKwlzcGluX3VubG9ja19iaCgmZ2JlX2Rldi0+aHdfc3RhdHNfbG9jayk7CisKKwlnYmVfZGV2LT50aW1lci5leHBpcmVzCT0gamlmZmllcyArIEdCRV9USU1FUl9JTlRFUlZBTDsKKwlhZGRfdGltZXIoJmdiZV9kZXYtPnRpbWVyKTsKK30KKworc3RhdGljIGludCBnYmVfdHhfaG9vayhpbnQgb3JkZXIsIHZvaWQgKmRhdGEsIHN0cnVjdCBuZXRjcF9wYWNrZXQgKnBfaW5mbykKK3sKKwlzdHJ1Y3QgZ2JlX2ludGYgKmdiZV9pbnRmID0gZGF0YTsKKworCXBfaW5mby0+dHhfcGlwZSA9ICZnYmVfaW50Zi0+dHhfcGlwZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnYmVfb3Blbih2b2lkICppbnRmX3ByaXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBnYmVfaW50ZiAqZ2JlX2ludGYgPSBpbnRmX3ByaXY7CisJc3RydWN0IGdiZV9wcml2ICpnYmVfZGV2ID0gZ2JlX2ludGYtPmdiZV9kZXY7CisJc3RydWN0IG5ldGNwX2ludGYgKm5ldGNwID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IGdiZV9zbGF2ZSAqc2xhdmUgPSBnYmVfaW50Zi0+c2xhdmU7CisJaW50IHBvcnRfbnVtID0gc2xhdmUtPnBvcnRfbnVtOworCXUzMiByZWc7CisJaW50IHJldDsKKworCXJlZyA9IHJlYWRsKEdCRV9SRUdfQUREUihnYmVfZGV2LCBzd2l0Y2hfcmVncywgaWRfdmVyKSk7CisJZGV2X2RiZyhnYmVfZGV2LT5kZXYsICJpbml0aWFsaXppbmcgZ2JlIHZlcnNpb24gJWQuJWQgKCVkKSBHQkUgaWRlbnRpZmljYXRpb24gdmFsdWUgMHgleFxuIiwKKwkJR0JFX01BSk9SX1ZFUlNJT04ocmVnKSwgR0JFX01JTk9SX1ZFUlNJT04ocmVnKSwKKwkJR0JFX1JUTF9WRVJTSU9OKHJlZyksIEdCRV9JREVOVChyZWcpKTsKKworCWlmIChnYmVfZGV2LT5lbmFibGVfYWxlKQorCQlnYmVfaW50Zi0+dHhfcGlwZS5kbWFfcHNmbGFncyA9IDA7CisJZWxzZQorCQlnYmVfaW50Zi0+dHhfcGlwZS5kbWFfcHNmbGFncyA9IHBvcnRfbnVtOworCisJZGV2X2RiZyhnYmVfZGV2LT5kZXYsICJvcGVuZWQgVFggY2hhbm5lbCAlczogJXAgd2l0aCBwc2ZsYWdzICVkXG4iLAorCQlnYmVfaW50Zi0+dHhfcGlwZS5kbWFfY2hhbl9uYW1lLAorCQlnYmVfaW50Zi0+dHhfcGlwZS5kbWFfY2hhbm5lbCwKKwkJZ2JlX2ludGYtPnR4X3BpcGUuZG1hX3BzZmxhZ3MpOworCisJZ2JlX3NsYXZlX3N0b3AoZ2JlX2ludGYpOworCisJLyogZGlzYWJsZSBwcmlvcml0eSBlbGV2YXRpb24gYW5kIGVuYWJsZSBzdGF0aXN0aWNzIG9uIGFsbCBwb3J0cyAqLworCXdyaXRlbCgwLCBHQkVfUkVHX0FERFIoZ2JlX2Rldiwgc3dpdGNoX3JlZ3MsIHB0eXBlKSk7CisKKwkvKiBDb250cm9sIHJlZ2lzdGVyICovCisJd3JpdGVsKEdCRV9DVExfUDBfRU5BQkxFLCBHQkVfUkVHX0FERFIoZ2JlX2Rldiwgc3dpdGNoX3JlZ3MsIGNvbnRyb2wpKTsKKworCS8qIEFsbCBzdGF0aXN0aWNzIGVuYWJsZWQgYW5kIFNUQVQgQUIgdmlzaWJsZSBieSBkZWZhdWx0ICovCisJd3JpdGVsKEdCRV9SRUdfVkFMX1NUQVRfRU5BQkxFX0FMTCwgR0JFX1JFR19BRERSKGdiZV9kZXYsIHN3aXRjaF9yZWdzLAorCQkJCQkJCSBzdGF0X3BvcnRfZW4pKTsKKworCXJldCA9IGdiZV9zbGF2ZV9vcGVuKGdiZV9pbnRmKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwluZXRjcF9yZWdpc3Rlcl90eGhvb2sobmV0Y3AsIEdCRV9UWEhPT0tfT1JERVIsIGdiZV90eF9ob29rLAorCQkJICAgICAgZ2JlX2ludGYpOworCisJc2xhdmUtPm9wZW4gPSB0cnVlOworCW5ldGNwX2V0aHNzX3VwZGF0ZV9saW5rX3N0YXRlKGdiZV9kZXYsIHNsYXZlLCBuZGV2KTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlnYmVfc2xhdmVfc3RvcChnYmVfaW50Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnYmVfY2xvc2Uodm9pZCAqaW50Zl9wcml2LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3QgZ2JlX2ludGYgKmdiZV9pbnRmID0gaW50Zl9wcml2OworCXN0cnVjdCBuZXRjcF9pbnRmICpuZXRjcCA9IG5ldGRldl9wcml2KG5kZXYpOworCisJZ2JlX3NsYXZlX3N0b3AoZ2JlX2ludGYpOworCW5ldGNwX3VucmVnaXN0ZXJfdHhob29rKG5ldGNwLCBHQkVfVFhIT09LX09SREVSLCBnYmVfdHhfaG9vaywKKwkJCQlnYmVfaW50Zik7CisKKwlnYmVfaW50Zi0+c2xhdmUtPm9wZW4gPSBmYWxzZTsKKwlhdG9taWNfc2V0KCZnYmVfaW50Zi0+c2xhdmUtPmxpbmtfc3RhdGUsIE5FVENQX0xJTktfU1RBVEVfSU5WQUxJRCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9zbGF2ZShzdHJ1Y3QgZ2JlX3ByaXYgKmdiZV9kZXYsIHN0cnVjdCBnYmVfc2xhdmUgKnNsYXZlLAorCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJaW50IHBvcnRfcmVnX251bTsKKwl1MzIgcG9ydF9yZWdfb2ZzLCBlbWFjX3JlZ19vZnM7CisKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInNsYXZlLXBvcnQiLCAmc2xhdmUtPnNsYXZlX251bSkpIHsKKwkJZGV2X2VycihnYmVfZGV2LT5kZXYsICJtaXNzaW5nIHNsYXZlLXBvcnQgcGFyYW1ldGVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJsaW5rLWludGVyZmFjZSIsCisJCQkJICZzbGF2ZS0+bGlua19pbnRlcmZhY2UpKSB7CisJCWRldl93YXJuKGdiZV9kZXYtPmRldiwKKwkJCSAibWlzc2luZyBsaW5rLWludGVyZmFjZSB2YWx1ZSBkZWZhdWx0aW5nIHRvIDFHIG1hYy1waHkgbGlua1xuIik7CisJCXNsYXZlLT5saW5rX2ludGVyZmFjZSA9IFNHTUlJX0xJTktfTUFDX1BIWTsKKwl9CisKKwlzbGF2ZS0+b3BlbiA9IGZhbHNlOworCXNsYXZlLT5waHlfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobm9kZSwgInBoeS1oYW5kbGUiLCAwKTsKKwlzbGF2ZS0+cG9ydF9udW0gPSBnYmVfZ2V0X3NsYXZlX3BvcnQoZ2JlX2Rldiwgc2xhdmUtPnNsYXZlX251bSk7CisKKwlpZiAoc2xhdmUtPmxpbmtfaW50ZXJmYWNlID49IFhHTUlJX0xJTktfTUFDX1BIWSkKKwkJc2xhdmUtPm1hY19jb250cm9sID0gR0JFX0RFRl8xMEdfTUFDX0NPTlRST0w7CisJZWxzZQorCQlzbGF2ZS0+bWFjX2NvbnRyb2wgPSBHQkVfREVGXzFHX01BQ19DT05UUk9MOworCisJLyogRW1hYyByZWdzIG1lbW1hcCBhcmUgY29udGlndW91cyBidXQgcG9ydCByZWdzIGFyZSBub3QgKi8KKwlwb3J0X3JlZ19udW0gPSBzbGF2ZS0+c2xhdmVfbnVtOworCWlmIChnYmVfZGV2LT5zc192ZXJzaW9uID09IEdCRV9TU19WRVJTSU9OXzE0KSB7CisJCWlmIChzbGF2ZS0+c2xhdmVfbnVtID4gMSkgeworCQkJcG9ydF9yZWdfb2ZzID0gR0JFMTNfU0xBVkVfUE9SVDJfT0ZGU0VUOworCQkJcG9ydF9yZWdfbnVtIC09IDI7CisJCX0gZWxzZSB7CisJCQlwb3J0X3JlZ19vZnMgPSBHQkUxM19TTEFWRV9QT1JUX09GRlNFVDsKKwkJfQorCX0gZWxzZSBpZiAoZ2JlX2Rldi0+c3NfdmVyc2lvbiA9PSBYR0JFX1NTX1ZFUlNJT05fMTApIHsKKwkJcG9ydF9yZWdfb2ZzID0gWEdCRTEwX1NMQVZFX1BPUlRfT0ZGU0VUOworCX0gZWxzZSB7CisJCWRldl9lcnIoZ2JlX2Rldi0+ZGV2LCAidW5rbm93biBldGhzcygweCV4KVxuIiwKKwkJCWdiZV9kZXYtPnNzX3ZlcnNpb24pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZ2JlX2Rldi0+c3NfdmVyc2lvbiA9PSBHQkVfU1NfVkVSU0lPTl8xNCkKKwkJZW1hY19yZWdfb2ZzID0gR0JFMTNfRU1BQ19PRkZTRVQ7CisJZWxzZSBpZiAoZ2JlX2Rldi0+c3NfdmVyc2lvbiA9PSBYR0JFX1NTX1ZFUlNJT05fMTApCisJCWVtYWNfcmVnX29mcyA9IFhHQkUxMF9FTUFDX09GRlNFVDsKKworCXNsYXZlLT5wb3J0X3JlZ3MgPSBnYmVfZGV2LT5zc19yZWdzICsgcG9ydF9yZWdfb2ZzICsKKwkJCQkoMHgzMCAqIHBvcnRfcmVnX251bSk7CisJc2xhdmUtPmVtYWNfcmVncyA9IGdiZV9kZXYtPnNzX3JlZ3MgKyBlbWFjX3JlZ19vZnMgKworCQkJCSgweDQwICogc2xhdmUtPnNsYXZlX251bSk7CisKKwlpZiAoZ2JlX2Rldi0+c3NfdmVyc2lvbiA9PSBHQkVfU1NfVkVSU0lPTl8xNCkgeworCQkvKiBJbml0aWFsaXplICBzbGF2ZSBwb3J0IHJlZ2lzdGVyIG9mZnNldHMgKi8KKwkJR0JFX1NFVF9SRUdfT0ZTKHNsYXZlLCBwb3J0X3JlZ3MsIHBvcnRfdmxhbik7CisJCUdCRV9TRVRfUkVHX09GUyhzbGF2ZSwgcG9ydF9yZWdzLCB0eF9wcmlfbWFwKTsKKwkJR0JFX1NFVF9SRUdfT0ZTKHNsYXZlLCBwb3J0X3JlZ3MsIHNhX2xvKTsKKwkJR0JFX1NFVF9SRUdfT0ZTKHNsYXZlLCBwb3J0X3JlZ3MsIHNhX2hpKTsKKwkJR0JFX1NFVF9SRUdfT0ZTKHNsYXZlLCBwb3J0X3JlZ3MsIHRzX2N0bCk7CisJCUdCRV9TRVRfUkVHX09GUyhzbGF2ZSwgcG9ydF9yZWdzLCB0c19zZXFfbHR5cGUpOworCQlHQkVfU0VUX1JFR19PRlMoc2xhdmUsIHBvcnRfcmVncywgdHNfdmxhbik7CisJCUdCRV9TRVRfUkVHX09GUyhzbGF2ZSwgcG9ydF9yZWdzLCB0c19jdGxfbHR5cGUyKTsKKwkJR0JFX1NFVF9SRUdfT0ZTKHNsYXZlLCBwb3J0X3JlZ3MsIHRzX2N0bDIpOworCisJCS8qIEluaXRpYWxpemUgRU1BQyByZWdpc3RlciBvZmZzZXRzICovCisJCUdCRV9TRVRfUkVHX09GUyhzbGF2ZSwgZW1hY19yZWdzLCBtYWNfY29udHJvbCk7CisJCUdCRV9TRVRfUkVHX09GUyhzbGF2ZSwgZW1hY19yZWdzLCBzb2Z0X3Jlc2V0KTsKKwkJR0JFX1NFVF9SRUdfT0ZTKHNsYXZlLCBlbWFjX3JlZ3MsIHJ4X21heGxlbik7CisKKwl9IGVsc2UgaWYgKGdiZV9kZXYtPnNzX3ZlcnNpb24gPT0gWEdCRV9TU19WRVJTSU9OXzEwKSB7CisJCS8qIEluaXRpYWxpemUgIHNsYXZlIHBvcnQgcmVnaXN0ZXIgb2Zmc2V0cyAqLworCQlYR0JFX1NFVF9SRUdfT0ZTKHNsYXZlLCBwb3J0X3JlZ3MsIHBvcnRfdmxhbik7CisJCVhHQkVfU0VUX1JFR19PRlMoc2xhdmUsIHBvcnRfcmVncywgdHhfcHJpX21hcCk7CisJCVhHQkVfU0VUX1JFR19PRlMoc2xhdmUsIHBvcnRfcmVncywgc2FfbG8pOworCQlYR0JFX1NFVF9SRUdfT0ZTKHNsYXZlLCBwb3J0X3JlZ3MsIHNhX2hpKTsKKwkJWEdCRV9TRVRfUkVHX09GUyhzbGF2ZSwgcG9ydF9yZWdzLCB0c19jdGwpOworCQlYR0JFX1NFVF9SRUdfT0ZTKHNsYXZlLCBwb3J0X3JlZ3MsIHRzX3NlcV9sdHlwZSk7CisJCVhHQkVfU0VUX1JFR19PRlMoc2xhdmUsIHBvcnRfcmVncywgdHNfdmxhbik7CisJCVhHQkVfU0VUX1JFR19PRlMoc2xhdmUsIHBvcnRfcmVncywgdHNfY3RsX2x0eXBlMik7CisJCVhHQkVfU0VUX1JFR19PRlMoc2xhdmUsIHBvcnRfcmVncywgdHNfY3RsMik7CisKKwkJLyogSW5pdGlhbGl6ZSBFTUFDIHJlZ2lzdGVyIG9mZnNldHMgKi8KKwkJWEdCRV9TRVRfUkVHX09GUyhzbGF2ZSwgZW1hY19yZWdzLCBtYWNfY29udHJvbCk7CisJCVhHQkVfU0VUX1JFR19PRlMoc2xhdmUsIGVtYWNfcmVncywgc29mdF9yZXNldCk7CisJCVhHQkVfU0VUX1JFR19PRlMoc2xhdmUsIGVtYWNfcmVncywgcnhfbWF4bGVuKTsKKwl9CisKKwlhdG9taWNfc2V0KCZzbGF2ZS0+bGlua19zdGF0ZSwgTkVUQ1BfTElOS19TVEFURV9JTlZBTElEKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW5pdF9zZWNvbmRhcnlfcG9ydHMoc3RydWN0IGdiZV9wcml2ICpnYmVfZGV2LAorCQkJCSBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZ2JlX2Rldi0+ZGV2OworCXBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTsKKwlzdHJ1Y3QgZ2JlX3ByaXYgKipwcml2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcG9ydDsKKwlzdHJ1Y3QgZ2JlX3NsYXZlICpzbGF2ZTsKKwlib29sIG1hY19waHlfbGluayA9IGZhbHNlOworCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShub2RlLCBwb3J0KSB7CisJCXNsYXZlID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpzbGF2ZSksIEdGUF9LRVJORUwpOworCQlpZiAoIXNsYXZlKSB7CisJCQlkZXZfZXJyKGRldiwKKwkJCQkibWVtb21yeSBhbGxvYyBmYWlsZWQgZm9yIHNlY29uZGFyeSBwb3J0KCVzKSwgc2tpcHBpbmcuLi5cbiIsCisJCQkJcG9ydC0+bmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChpbml0X3NsYXZlKGdiZV9kZXYsIHNsYXZlLCBwb3J0KSkgeworCQkJZGV2X2VycihkZXYsCisJCQkJIkZhaWxlZCB0byBpbml0aWFsaXplIHNlY29uZGFyeSBwb3J0KCVzKSwgc2tpcHBpbmcuLi5cbiIsCisJCQkJcG9ydC0+bmFtZSk7CisJCQlkZXZtX2tmcmVlKGRldiwgc2xhdmUpOworCQkJY29udGludWU7CisJCX0KKworCQlnYmVfc2dtaWlfY29uZmlnKGdiZV9kZXYsIHNsYXZlKTsKKwkJZ2JlX3BvcnRfcmVzZXQoc2xhdmUpOworCQlnYmVfcG9ydF9jb25maWcoZ2JlX2Rldiwgc2xhdmUsIGdiZV9kZXYtPnJ4X3BhY2tldF9tYXgpOworCQlsaXN0X2FkZF90YWlsKCZzbGF2ZS0+c2xhdmVfbGlzdCwgJmdiZV9kZXYtPnNlY29uZGFyeV9zbGF2ZXMpOworCQlnYmVfZGV2LT5udW1fc2xhdmVzKys7CisJCWlmICgoc2xhdmUtPmxpbmtfaW50ZXJmYWNlID09IFNHTUlJX0xJTktfTUFDX1BIWSkgfHwKKwkJICAgIChzbGF2ZS0+bGlua19pbnRlcmZhY2UgPT0gWEdNSUlfTElOS19NQUNfUEhZKSkKKwkJCW1hY19waHlfbGluayA9IHRydWU7CisKKwkJc2xhdmUtPm9wZW4gPSB0cnVlOworCX0KKworCS8qIG9mX3BoeV9jb25uZWN0KCkgaXMgbmVlZGVkIG9ubHkgZm9yIE1BQy1QSFkgaW50ZXJmYWNlICovCisJaWYgKCFtYWNfcGh5X2xpbmspCisJCXJldHVybjsKKworCS8qIEFsbG9jYXRlIGR1bW15IG5ldGRldiBkZXZpY2UgZm9yIGF0dGFjaGluZyB0byBwaHkgZGV2aWNlICovCisJZ2JlX2Rldi0+ZHVtbXlfbmRldiA9IGFsbG9jX25ldGRldihzaXplb2YoZ2JlX2RldiksICJkdW1teSIsCisJCQkJCU5FVF9OQU1FX1VOS05PV04sIGV0aGVyX3NldHVwKTsKKwlpZiAoIWdiZV9kZXYtPmR1bW15X25kZXYpIHsKKwkJZGV2X2VycihkZXYsCisJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIGR1bW15IG5ldGRldiBmb3Igc2Vjb25kYXJ5IHBvcnRzLCBza2lwcGluZyBwaHlfY29ubmVjdCgpLi4uXG4iKTsKKwkJcmV0dXJuOworCX0KKwlwcml2ID0gbmV0ZGV2X3ByaXYoZ2JlX2Rldi0+ZHVtbXlfbmRldik7CisJKnByaXYgPSBnYmVfZGV2OworCisJaWYgKHNsYXZlLT5saW5rX2ludGVyZmFjZSA9PSBTR01JSV9MSU5LX01BQ19QSFkpIHsKKwkJcGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk7CisJCXNsYXZlLT5waHlfcG9ydF90ID0gUE9SVF9NSUk7CisJfSBlbHNlIHsKKwkJcGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfTkE7CisJCXNsYXZlLT5waHlfcG9ydF90ID0gUE9SVF9GSUJSRTsKKwl9CisKKwlmb3JfZWFjaF9zZWNfc2xhdmUoc2xhdmUsIGdiZV9kZXYpIHsKKwkJaWYgKChzbGF2ZS0+bGlua19pbnRlcmZhY2UgIT0gU0dNSUlfTElOS19NQUNfUEhZKSAmJgorCQkgICAgKHNsYXZlLT5saW5rX2ludGVyZmFjZSAhPSBYR01JSV9MSU5LX01BQ19QSFkpKQorCQkJY29udGludWU7CisJCXNsYXZlLT5waHkgPQorCQkJb2ZfcGh5X2Nvbm5lY3QoZ2JlX2Rldi0+ZHVtbXlfbmRldiwKKwkJCQkgICAgICAgc2xhdmUtPnBoeV9ub2RlLAorCQkJCSAgICAgICBnYmVfYWRqdXN0X2xpbmtfc2VjX3NsYXZlcywKKwkJCQkgICAgICAgMCwgcGh5X21vZGUpOworCQlpZiAoIXNsYXZlLT5waHkpIHsKKwkJCWRldl9lcnIoZGV2LCAicGh5IG5vdCBmb3VuZCBmb3Igc2xhdmUgJWRcbiIsCisJCQkJc2xhdmUtPnNsYXZlX251bSk7CisJCQlzbGF2ZS0+cGh5ID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCWRldl9kYmcoZGV2LCAicGh5IGZvdW5kOiBpZCBpczogMHglc1xuIiwKKwkJCQlkZXZfbmFtZSgmc2xhdmUtPnBoeS0+ZGV2KSk7CisJCQlwaHlfc3RhcnQoc2xhdmUtPnBoeSk7CisJCQlwaHlfcmVhZF9zdGF0dXMoc2xhdmUtPnBoeSk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc2Vjb25kYXJ5X3BvcnRzKHN0cnVjdCBnYmVfcHJpdiAqZ2JlX2RldikKK3sKKwlzdHJ1Y3QgZ2JlX3NsYXZlICpzbGF2ZTsKKworCWZvciAoOzspIHsKKwkJc2xhdmUgPSBmaXJzdF9zZWNfc2xhdmUoZ2JlX2Rldik7CisJCWlmICghc2xhdmUpCisJCQlicmVhazsKKwkJaWYgKHNsYXZlLT5waHkpCisJCQlwaHlfZGlzY29ubmVjdChzbGF2ZS0+cGh5KTsKKwkJbGlzdF9kZWwoJnNsYXZlLT5zbGF2ZV9saXN0KTsKKwl9CisJaWYgKGdiZV9kZXYtPmR1bW15X25kZXYpCisJCWZyZWVfbmV0ZGV2KGdiZV9kZXYtPmR1bW15X25kZXYpOworfQorCitzdGF0aWMgaW50IHNldF94Z2JlX2V0aHNzMTBfcHJpdihzdHJ1Y3QgZ2JlX3ByaXYgKmdiZV9kZXYsCisJCQkJIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCXZvaWQgX19pb21lbSAqcmVnczsKKwlpbnQgcmV0LCBpOworCisJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShub2RlLCAwLCAmcmVzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZ2JlX2Rldi0+ZGV2LCAiQ2FuJ3QgdHJhbnNsYXRlIG9mIG5vZGUoJXMpIGFkZHJlc3MgZm9yIHhnYmUgc3Vic3lzdGVtIHJlZ3NcbiIsCisJCQlub2RlLT5uYW1lKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGdiZV9kZXYtPmRldiwgJnJlcyk7CisJaWYgKElTX0VSUihyZWdzKSkgeworCQlkZXZfZXJyKGdiZV9kZXYtPmRldiwgIkZhaWxlZCB0byBtYXAgeGdiZSByZWdpc3RlciBiYXNlXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocmVncyk7CisJfQorCWdiZV9kZXYtPnNzX3JlZ3MgPSByZWdzOworCisJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShub2RlLCBYR0JFX1NFUkRFU19SRUdfSU5ERVgsICZyZXMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihnYmVfZGV2LT5kZXYsICJDYW4ndCB0cmFuc2xhdGUgb2Ygbm9kZSglcykgYWRkcmVzcyBmb3IgeGdiZSBzZXJkZXMgcmVnc1xuIiwKKwkJCW5vZGUtPm5hbWUpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZ2JlX2Rldi0+ZGV2LCAmcmVzKTsKKwlpZiAoSVNfRVJSKHJlZ3MpKSB7CisJCWRldl9lcnIoZ2JlX2Rldi0+ZGV2LCAiRmFpbGVkIHRvIG1hcCB4Z2JlIHNlcmRlcyByZWdpc3RlciBiYXNlXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIocmVncyk7CisJfQorCWdiZV9kZXYtPnhnYmVfc2VyZGVzX3JlZ3MgPSByZWdzOworCisJZ2JlX2Rldi0+aHdfc3RhdHMgPSBkZXZtX2t6YWxsb2MoZ2JlX2Rldi0+ZGV2LAorCQkJCQkgIFhHQkUxMF9OVU1fU1RBVF9FTlRSSUVTICoKKwkJCQkJICAoWEdCRTEwX05VTV9TTEFWRVMgKyAxKSAqIHNpemVvZih1NjQpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCWlmICghZ2JlX2Rldi0+aHdfc3RhdHMpIHsKKwkJZGV2X2VycihnYmVfZGV2LT5kZXYsICJod19zdGF0cyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlnYmVfZGV2LT5zc192ZXJzaW9uID0gWEdCRV9TU19WRVJTSU9OXzEwOworCWdiZV9kZXYtPnNnbWlpX3BvcnRfcmVncyA9IGdiZV9kZXYtPnNzX3JlZ3MgKworCQkJCQlYR0JFMTBfU0dNSUlfTU9EVUxFX09GRlNFVDsKKwlnYmVfZGV2LT5zd2l0Y2hfcmVncyA9IGdiZV9kZXYtPnNzX3JlZ3MgKyBYR0JFMTBfU1dJVENIX01PRFVMRV9PRkZTRVQ7CisJZ2JlX2Rldi0+aG9zdF9wb3J0X3JlZ3MgPSBnYmVfZGV2LT5zc19yZWdzICsgWEdCRTEwX0hPU1RfUE9SVF9PRkZTRVQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgWEdCRTEwX05VTV9IV19TVEFUU19NT0Q7IGkrKykKKwkJZ2JlX2Rldi0+aHdfc3RhdHNfcmVnc1tpXSA9IGdiZV9kZXYtPnNzX3JlZ3MgKworCQkJWEdCRTEwX0hXX1NUQVRTX09GRlNFVCArIChHQkVfSFdfU1RBVFNfUkVHX01BUF9TWiAqIGkpOworCisJZ2JlX2Rldi0+YWxlX3JlZyA9IGdiZV9kZXYtPnNzX3JlZ3MgKyBYR0JFMTBfQUxFX09GRlNFVDsKKwlnYmVfZGV2LT5hbGVfcG9ydHMgPSBYR0JFMTBfTlVNX0FMRV9QT1JUUzsKKwlnYmVfZGV2LT5ob3N0X3BvcnQgPSBYR0JFMTBfSE9TVF9QT1JUX05VTTsKKwlnYmVfZGV2LT5hbGVfZW50cmllcyA9IFhHQkUxMF9OVU1fQUxFX0VOVFJJRVM7CisJZ2JlX2Rldi0+ZXRfc3RhdHMgPSB4Z2JlMTBfZXRfc3RhdHM7CisJZ2JlX2Rldi0+bnVtX2V0X3N0YXRzID0gQVJSQVlfU0laRSh4Z2JlMTBfZXRfc3RhdHMpOworCisJLyogU3Vic3lzdGVtIHJlZ2lzdGVycyAqLworCVhHQkVfU0VUX1JFR19PRlMoZ2JlX2Rldiwgc3NfcmVncywgaWRfdmVyKTsKKwlYR0JFX1NFVF9SRUdfT0ZTKGdiZV9kZXYsIHNzX3JlZ3MsIGNvbnRyb2wpOworCisJLyogU3dpdGNoIG1vZHVsZSByZWdpc3RlcnMgKi8KKwlYR0JFX1NFVF9SRUdfT0ZTKGdiZV9kZXYsIHN3aXRjaF9yZWdzLCBpZF92ZXIpOworCVhHQkVfU0VUX1JFR19PRlMoZ2JlX2Rldiwgc3dpdGNoX3JlZ3MsIGNvbnRyb2wpOworCVhHQkVfU0VUX1JFR19PRlMoZ2JlX2Rldiwgc3dpdGNoX3JlZ3MsIHB0eXBlKTsKKwlYR0JFX1NFVF9SRUdfT0ZTKGdiZV9kZXYsIHN3aXRjaF9yZWdzLCBzdGF0X3BvcnRfZW4pOworCVhHQkVfU0VUX1JFR19PRlMoZ2JlX2Rldiwgc3dpdGNoX3JlZ3MsIGZsb3dfY29udHJvbCk7CisKKwkvKiBIb3N0IHBvcnQgcmVnaXN0ZXJzICovCisJWEdCRV9TRVRfUkVHX09GUyhnYmVfZGV2LCBob3N0X3BvcnRfcmVncywgcG9ydF92bGFuKTsKKwlYR0JFX1NFVF9SRUdfT0ZTKGdiZV9kZXYsIGhvc3RfcG9ydF9yZWdzLCB0eF9wcmlfbWFwKTsKKwlYR0JFX1NFVF9SRUdfT0ZTKGdiZV9kZXYsIGhvc3RfcG9ydF9yZWdzLCByeF9tYXhsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdldF9nYmVfcmVzb3VyY2VfdmVyc2lvbihzdHJ1Y3QgZ2JlX3ByaXYgKmdiZV9kZXYsCisJCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCXZvaWQgX19pb21lbSAqcmVnczsKKwlpbnQgcmV0OworCisJcmV0ID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShub2RlLCAwLCAmcmVzKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZ2JlX2Rldi0+ZGV2LCAiQ2FuJ3QgdHJhbnNsYXRlIG9mIG5vZGUoJXMpIGFkZHJlc3NcbiIsCisJCQlub2RlLT5uYW1lKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGdiZV9kZXYtPmRldiwgJnJlcyk7CisJaWYgKElTX0VSUihyZWdzKSkgeworCQlkZXZfZXJyKGdiZV9kZXYtPmRldiwgIkZhaWxlZCB0byBtYXAgZ2JlIHJlZ2lzdGVyIGJhc2VcbiIpOworCQlyZXR1cm4gUFRSX0VSUihyZWdzKTsKKwl9CisJZ2JlX2Rldi0+c3NfcmVncyA9IHJlZ3M7CisJZ2JlX2Rldi0+c3NfdmVyc2lvbiA9IHJlYWRsKGdiZV9kZXYtPnNzX3JlZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldF9nYmVfZXRoc3MxNF9wcml2KHN0cnVjdCBnYmVfcHJpdiAqZ2JlX2RldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCWludCBpOworCisJZ2JlX2Rldi0+aHdfc3RhdHMgPSBkZXZtX2t6YWxsb2MoZ2JlX2Rldi0+ZGV2LAorCQkJCQkgIEdCRTEzX05VTV9IV19TVEFUX0VOVFJJRVMgKgorCQkJCQkgIEdCRTEzX05VTV9TTEFWRVMgKiBzaXplb2YodTY0KSwKKwkJCQkJICBHRlBfS0VSTkVMKTsKKwlpZiAoIWdiZV9kZXYtPmh3X3N0YXRzKSB7CisJCWRldl9lcnIoZ2JlX2Rldi0+ZGV2LCAiaHdfc3RhdHMgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmVncyA9IGdiZV9kZXYtPnNzX3JlZ3M7CisJZ2JlX2Rldi0+c2dtaWlfcG9ydF9yZWdzID0gcmVncyArIEdCRTEzX1NHTUlJX01PRFVMRV9PRkZTRVQ7CisJZ2JlX2Rldi0+c2dtaWlfcG9ydDM0X3JlZ3MgPSByZWdzICsgR0JFMTNfU0dNSUkzNF9NT0RVTEVfT0ZGU0VUOworCWdiZV9kZXYtPnN3aXRjaF9yZWdzID0gcmVncyArIEdCRTEzX1NXSVRDSF9NT0RVTEVfT0ZGU0VUOworCWdiZV9kZXYtPmhvc3RfcG9ydF9yZWdzID0gcmVncyArIEdCRTEzX0hPU1RfUE9SVF9PRkZTRVQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgR0JFMTNfTlVNX0hXX1NUQVRTX01PRDsgaSsrKQorCQlnYmVfZGV2LT5od19zdGF0c19yZWdzW2ldID0gcmVncyArIEdCRTEzX0hXX1NUQVRTX09GRlNFVCArCisJCQkJKEdCRV9IV19TVEFUU19SRUdfTUFQX1NaICogaSk7CisKKwlnYmVfZGV2LT5hbGVfcmVnID0gcmVncyArIEdCRTEzX0FMRV9PRkZTRVQ7CisJZ2JlX2Rldi0+YWxlX3BvcnRzID0gR0JFMTNfTlVNX0FMRV9QT1JUUzsKKwlnYmVfZGV2LT5ob3N0X3BvcnQgPSBHQkUxM19IT1NUX1BPUlRfTlVNOworCWdiZV9kZXYtPmFsZV9lbnRyaWVzID0gR0JFMTNfTlVNX0FMRV9FTlRSSUVTOworCWdiZV9kZXYtPmV0X3N0YXRzID0gZ2JlMTNfZXRfc3RhdHM7CisJZ2JlX2Rldi0+bnVtX2V0X3N0YXRzID0gQVJSQVlfU0laRShnYmUxM19ldF9zdGF0cyk7CisKKwkvKiBTdWJzeXN0ZW0gcmVnaXN0ZXJzICovCisJR0JFX1NFVF9SRUdfT0ZTKGdiZV9kZXYsIHNzX3JlZ3MsIGlkX3Zlcik7CisKKwkvKiBTd2l0Y2ggbW9kdWxlIHJlZ2lzdGVycyAqLworCUdCRV9TRVRfUkVHX09GUyhnYmVfZGV2LCBzd2l0Y2hfcmVncywgaWRfdmVyKTsKKwlHQkVfU0VUX1JFR19PRlMoZ2JlX2Rldiwgc3dpdGNoX3JlZ3MsIGNvbnRyb2wpOworCUdCRV9TRVRfUkVHX09GUyhnYmVfZGV2LCBzd2l0Y2hfcmVncywgc29mdF9yZXNldCk7CisJR0JFX1NFVF9SRUdfT0ZTKGdiZV9kZXYsIHN3aXRjaF9yZWdzLCBzdGF0X3BvcnRfZW4pOworCUdCRV9TRVRfUkVHX09GUyhnYmVfZGV2LCBzd2l0Y2hfcmVncywgcHR5cGUpOworCUdCRV9TRVRfUkVHX09GUyhnYmVfZGV2LCBzd2l0Y2hfcmVncywgZmxvd19jb250cm9sKTsKKworCS8qIEhvc3QgcG9ydCByZWdpc3RlcnMgKi8KKwlHQkVfU0VUX1JFR19PRlMoZ2JlX2RldiwgaG9zdF9wb3J0X3JlZ3MsIHBvcnRfdmxhbik7CisJR0JFX1NFVF9SRUdfT0ZTKGdiZV9kZXYsIGhvc3RfcG9ydF9yZWdzLCByeF9tYXhsZW4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdiZV9wcm9iZShzdHJ1Y3QgbmV0Y3BfZGV2aWNlICpuZXRjcF9kZXZpY2UsIHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIHZvaWQgKippbnN0X3ByaXYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICppbnRlcmZhY2VzLCAqaW50ZXJmYWNlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc2Vjb25kYXJ5X3BvcnRzOworCXN0cnVjdCBjcHN3X2FsZV9wYXJhbXMgYWxlX3BhcmFtczsKKwlzdHJ1Y3QgZ2JlX3ByaXYgKmdiZV9kZXY7CisJdTMyIHNsYXZlX251bTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghbm9kZSkgeworCQlkZXZfZXJyKGRldiwgImRldmljZSB0cmVlIGluZm8gdW5hdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlnYmVfZGV2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCBnYmVfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghZ2JlX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlnYmVfZGV2LT5kZXYgPSBkZXY7CisJZ2JlX2Rldi0+bmV0Y3BfZGV2aWNlID0gbmV0Y3BfZGV2aWNlOworCWdiZV9kZXYtPnJ4X3BhY2tldF9tYXggPSBORVRDUF9NQVhfRlJBTUVfU0laRTsKKworCS8qIGluaXQgdGhlIGh3IHN0YXRzIGxvY2sgKi8KKwlzcGluX2xvY2tfaW5pdCgmZ2JlX2Rldi0+aHdfc3RhdHNfbG9jayk7CisKKwlpZiAob2ZfZmluZF9wcm9wZXJ0eShub2RlLCAiZW5hYmxlLWFsZSIsIE5VTEwpKSB7CisJCWdiZV9kZXYtPmVuYWJsZV9hbGUgPSB0cnVlOworCQlkZXZfaW5mbyhkZXYsICJBTEUgZW5hYmxlZFxuIik7CisJfSBlbHNlIHsKKwkJZ2JlX2Rldi0+ZW5hYmxlX2FsZSA9IGZhbHNlOworCQlkZXZfZGJnKGRldiwgIkFMRSBieXBhc3MgZW5hYmxlZCpcbiIpOworCX0KKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJ0eC1xdWV1ZSIsCisJCQkJICAgJmdiZV9kZXYtPnR4X3F1ZXVlX2lkKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgdHhfcXVldWUgcGFyYW1ldGVyXG4iKTsKKwkJZ2JlX2Rldi0+dHhfcXVldWVfaWQgPSBHQkVfVFhfUVVFVUU7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobm9kZSwgInR4LWNoYW5uZWwiLAorCQkJCSAgICAgICZnYmVfZGV2LT5kbWFfY2hhbl9uYW1lKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIm1pc3NpbmcgXCJ0eC1jaGFubmVsXCIgcGFyYW1ldGVyXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBxdWl0OworCX0KKworCWlmICghc3RyY21wKG5vZGUtPm5hbWUsICJnYmUiKSkgeworCQlyZXQgPSBnZXRfZ2JlX3Jlc291cmNlX3ZlcnNpb24oZ2JlX2Rldiwgbm9kZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIHF1aXQ7CisKKwkJcmV0ID0gc2V0X2diZV9ldGhzczE0X3ByaXYoZ2JlX2Rldiwgbm9kZSk7CisJCWlmIChyZXQpCisJCQlnb3RvIHF1aXQ7CisJfSBlbHNlIGlmICghc3RyY21wKG5vZGUtPm5hbWUsICJ4Z2JlIikpIHsKKwkJcmV0ID0gc2V0X3hnYmVfZXRoc3MxMF9wcml2KGdiZV9kZXYsIG5vZGUpOworCQlpZiAocmV0KQorCQkJZ290byBxdWl0OworCQlyZXQgPSBuZXRjcF94Z2JlX3NlcmRlc19pbml0KGdiZV9kZXYtPnhnYmVfc2VyZGVzX3JlZ3MsCisJCQkJCSAgICAgZ2JlX2Rldi0+c3NfcmVncyk7CisJCWlmIChyZXQpCisJCQlnb3RvIHF1aXQ7CisJfSBlbHNlIHsKKwkJZGV2X2VycihkZXYsICJ1bmtub3duIEdCRSBub2RlKCVzKVxuIiwgbm9kZS0+bmFtZSk7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gcXVpdDsKKwl9CisKKwlpbnRlcmZhY2VzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobm9kZSwgImludGVyZmFjZXMiKTsKKwlpZiAoIWludGVyZmFjZXMpCisJCWRldl9lcnIoZGV2LCAiY291bGQgbm90IGZpbmQgaW50ZXJmYWNlc1xuIik7CisKKwlyZXQgPSBuZXRjcF90eHBpcGVfaW5pdCgmZ2JlX2Rldi0+dHhfcGlwZSwgbmV0Y3BfZGV2aWNlLAorCQkJCWdiZV9kZXYtPmRtYV9jaGFuX25hbWUsIGdiZV9kZXYtPnR4X3F1ZXVlX2lkKTsKKwlpZiAocmV0KQorCQlnb3RvIHF1aXQ7CisKKwlyZXQgPSBuZXRjcF90eHBpcGVfb3BlbigmZ2JlX2Rldi0+dHhfcGlwZSk7CisJaWYgKHJldCkKKwkJZ290byBxdWl0OworCisJLyogQ3JlYXRlIG5ldHdvcmsgaW50ZXJmYWNlcyAqLworCUlOSVRfTElTVF9IRUFEKCZnYmVfZGV2LT5nYmVfaW50Zl9oZWFkKTsKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKGludGVyZmFjZXMsIGludGVyZmFjZSkgeworCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihpbnRlcmZhY2UsICJzbGF2ZS1wb3J0IiwgJnNsYXZlX251bSk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LCAibWlzc2luZyBzbGF2ZS1wb3J0IHBhcmFtZXRlciwgc2tpcHBpbmcgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gZm9yICVzXG4iLAorCQkJCWludGVyZmFjZS0+bmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCQlnYmVfZGV2LT5udW1fc2xhdmVzKys7CisJfQorCisJaWYgKCFnYmVfZGV2LT5udW1fc2xhdmVzKQorCQlkZXZfd2FybihkZXYsICJObyBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmVkXG4iKTsKKworCS8qIEluaXRpYWxpemUgU2Vjb25kYXJ5IHNsYXZlIHBvcnRzICovCisJc2Vjb25kYXJ5X3BvcnRzID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobm9kZSwgInNlY29uZGFyeS1zbGF2ZS1wb3J0cyIpOworCUlOSVRfTElTVF9IRUFEKCZnYmVfZGV2LT5zZWNvbmRhcnlfc2xhdmVzKTsKKwlpZiAoc2Vjb25kYXJ5X3BvcnRzKQorCQlpbml0X3NlY29uZGFyeV9wb3J0cyhnYmVfZGV2LCBzZWNvbmRhcnlfcG9ydHMpOworCW9mX25vZGVfcHV0KHNlY29uZGFyeV9wb3J0cyk7CisKKwlpZiAoIWdiZV9kZXYtPm51bV9zbGF2ZXMpIHsKKwkJZGV2X2VycihkZXYsICJObyBuZXR3b3JrIGludGVyZmFjZSBvciBzZWNvbmRhcnkgcG9ydHMgY29uZmlndXJlZFxuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gcXVpdDsKKwl9CisKKwltZW1zZXQoJmFsZV9wYXJhbXMsIDAsIHNpemVvZihhbGVfcGFyYW1zKSk7CisJYWxlX3BhcmFtcy5kZXYJCT0gZ2JlX2Rldi0+ZGV2OworCWFsZV9wYXJhbXMuYWxlX3JlZ3MJPSBnYmVfZGV2LT5hbGVfcmVnOworCWFsZV9wYXJhbXMuYWxlX2FnZW91dAk9IEdCRV9ERUZBVUxUX0FMRV9BR0VPVVQ7CisJYWxlX3BhcmFtcy5hbGVfZW50cmllcwk9IGdiZV9kZXYtPmFsZV9lbnRyaWVzOworCWFsZV9wYXJhbXMuYWxlX3BvcnRzCT0gZ2JlX2Rldi0+YWxlX3BvcnRzOworCisJZ2JlX2Rldi0+YWxlID0gY3Bzd19hbGVfY3JlYXRlKCZhbGVfcGFyYW1zKTsKKwlpZiAoIWdiZV9kZXYtPmFsZSkgeworCQlkZXZfZXJyKGdiZV9kZXYtPmRldiwgImVycm9yIGluaXRpYWxpemluZyBhbGUgZW5naW5lXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBxdWl0OworCX0gZWxzZSB7CisJCWRldl9kYmcoZ2JlX2Rldi0+ZGV2LCAiQ3JlYXRlZCBhIGdiZSBhbGUgZW5naW5lXG4iKTsKKwl9CisKKwkvKiBpbml0aWFsaXplIGhvc3QgcG9ydCAqLworCWdiZV9pbml0X2hvc3RfcG9ydChnYmVfZGV2KTsKKworCWluaXRfdGltZXIoJmdiZV9kZXYtPnRpbWVyKTsKKwlnYmVfZGV2LT50aW1lci5kYXRhCSA9ICh1bnNpZ25lZCBsb25nKWdiZV9kZXY7CisJZ2JlX2Rldi0+dGltZXIuZnVuY3Rpb24gPSBuZXRjcF9ldGhzc190aW1lcjsKKwlnYmVfZGV2LT50aW1lci5leHBpcmVzCSA9IGppZmZpZXMgKyBHQkVfVElNRVJfSU5URVJWQUw7CisJYWRkX3RpbWVyKCZnYmVfZGV2LT50aW1lcik7CisJKmluc3RfcHJpdiA9IGdiZV9kZXY7CisJcmV0dXJuIDA7CisKK3F1aXQ6CisJaWYgKGdiZV9kZXYtPmh3X3N0YXRzKQorCQlkZXZtX2tmcmVlKGRldiwgZ2JlX2Rldi0+aHdfc3RhdHMpOworCWNwc3dfYWxlX2Rlc3Ryb3koZ2JlX2Rldi0+YWxlKTsKKwlpZiAoZ2JlX2Rldi0+c3NfcmVncykKKwkJZGV2bV9pb3VubWFwKGRldiwgZ2JlX2Rldi0+c3NfcmVncyk7CisJb2Zfbm9kZV9wdXQoaW50ZXJmYWNlcyk7CisJZGV2bV9rZnJlZShkZXYsIGdiZV9kZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZ2JlX2F0dGFjaCh2b2lkICppbnN0X3ByaXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAorCQkgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIHZvaWQgKippbnRmX3ByaXYpCit7CisJc3RydWN0IGdiZV9wcml2ICpnYmVfZGV2ID0gaW5zdF9wcml2OworCXN0cnVjdCBnYmVfaW50ZiAqZ2JlX2ludGY7CisJaW50IHJldDsKKworCWlmICghbm9kZSkgeworCQlkZXZfZXJyKGdiZV9kZXYtPmRldiwgImludGVyZmFjZSBub2RlIG5vdCBhdmFpbGFibGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlnYmVfaW50ZiA9IGRldm1fa3phbGxvYyhnYmVfZGV2LT5kZXYsIHNpemVvZigqZ2JlX2ludGYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWdiZV9pbnRmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWdiZV9pbnRmLT5uZGV2ID0gbmRldjsKKwlnYmVfaW50Zi0+ZGV2ID0gZ2JlX2Rldi0+ZGV2OworCWdiZV9pbnRmLT5nYmVfZGV2ID0gZ2JlX2RldjsKKworCWdiZV9pbnRmLT5zbGF2ZSA9IGRldm1fa3phbGxvYyhnYmVfZGV2LT5kZXYsCisJCQkJCXNpemVvZigqZ2JlX2ludGYtPnNsYXZlKSwKKwkJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFnYmVfaW50Zi0+c2xhdmUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKworCWlmIChpbml0X3NsYXZlKGdiZV9kZXYsIGdiZV9pbnRmLT5zbGF2ZSwgbm9kZSkpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBmYWlsOworCX0KKworCWdiZV9pbnRmLT50eF9waXBlID0gZ2JlX2Rldi0+dHhfcGlwZTsKKwluZGV2LT5ldGh0b29sX29wcyA9ICZrZXlzdG9uZV9ldGh0b29sX29wczsKKwlsaXN0X2FkZF90YWlsKCZnYmVfaW50Zi0+Z2JlX2ludGZfbGlzdCwgJmdiZV9kZXYtPmdiZV9pbnRmX2hlYWQpOworCSppbnRmX3ByaXYgPSBnYmVfaW50ZjsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlpZiAoZ2JlX2ludGYtPnNsYXZlKQorCQlkZXZtX2tmcmVlKGdiZV9kZXYtPmRldiwgZ2JlX2ludGYtPnNsYXZlKTsKKwlpZiAoZ2JlX2ludGYpCisJCWRldm1fa2ZyZWUoZ2JlX2Rldi0+ZGV2LCBnYmVfaW50Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBnYmVfcmVsZWFzZSh2b2lkICppbnRmX3ByaXYpCit7CisJc3RydWN0IGdiZV9pbnRmICpnYmVfaW50ZiA9IGludGZfcHJpdjsKKworCWdiZV9pbnRmLT5uZGV2LT5ldGh0b29sX29wcyA9IE5VTEw7CisJbGlzdF9kZWwoJmdiZV9pbnRmLT5nYmVfaW50Zl9saXN0KTsKKwlkZXZtX2tmcmVlKGdiZV9pbnRmLT5kZXYsIGdiZV9pbnRmLT5zbGF2ZSk7CisJZGV2bV9rZnJlZShnYmVfaW50Zi0+ZGV2LCBnYmVfaW50Zik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2JlX3JlbW92ZShzdHJ1Y3QgbmV0Y3BfZGV2aWNlICpuZXRjcF9kZXZpY2UsIHZvaWQgKmluc3RfcHJpdikKK3sKKwlzdHJ1Y3QgZ2JlX3ByaXYgKmdiZV9kZXYgPSBpbnN0X3ByaXY7CisKKwlkZWxfdGltZXJfc3luYygmZ2JlX2Rldi0+dGltZXIpOworCWNwc3dfYWxlX3N0b3AoZ2JlX2Rldi0+YWxlKTsKKwljcHN3X2FsZV9kZXN0cm95KGdiZV9kZXYtPmFsZSk7CisJbmV0Y3BfdHhwaXBlX2Nsb3NlKCZnYmVfZGV2LT50eF9waXBlKTsKKwlmcmVlX3NlY29uZGFyeV9wb3J0cyhnYmVfZGV2KTsKKworCWlmICghbGlzdF9lbXB0eSgmZ2JlX2Rldi0+Z2JlX2ludGZfaGVhZCkpCisJCWRldl9hbGVydChnYmVfZGV2LT5kZXYsICJ1bnJlbGVhc2VkIGV0aHNzIGludGVyZmFjZXMgcHJlc2VudFxuIik7CisKKwlkZXZtX2tmcmVlKGdiZV9kZXYtPmRldiwgZ2JlX2Rldi0+aHdfc3RhdHMpOworCWRldm1faW91bm1hcChnYmVfZGV2LT5kZXYsIGdiZV9kZXYtPnNzX3JlZ3MpOworCW1lbXNldChnYmVfZGV2LCAweDAwLCBzaXplb2YoKmdiZV9kZXYpKTsKKwlkZXZtX2tmcmVlKGdiZV9kZXYtPmRldiwgZ2JlX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0Y3BfbW9kdWxlIGdiZV9tb2R1bGUgPSB7CisJLm5hbWUJCT0gR0JFX01PRFVMRV9OQU1FLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucHJpbWFyeQk9IHRydWUsCisJLnByb2JlCQk9IGdiZV9wcm9iZSwKKwkub3BlbgkJPSBnYmVfb3BlbiwKKwkuY2xvc2UJCT0gZ2JlX2Nsb3NlLAorCS5yZW1vdmUJCT0gZ2JlX3JlbW92ZSwKKwkuYXR0YWNoCQk9IGdiZV9hdHRhY2gsCisJLnJlbGVhc2UJPSBnYmVfcmVsZWFzZSwKKwkuYWRkX2FkZHIJPSBnYmVfYWRkX2FkZHIsCisJLmRlbF9hZGRyCT0gZ2JlX2RlbF9hZGRyLAorCS5hZGRfdmlkCT0gZ2JlX2FkZF92aWQsCisJLmRlbF92aWQJPSBnYmVfZGVsX3ZpZCwKKwkuaW9jdGwJCT0gZ2JlX2lvY3RsLAorfTsKKworc3RhdGljIHN0cnVjdCBuZXRjcF9tb2R1bGUgeGdiZV9tb2R1bGUgPSB7CisJLm5hbWUJCT0gWEdCRV9NT0RVTEVfTkFNRSwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLnByaW1hcnkJPSB0cnVlLAorCS5wcm9iZQkJPSBnYmVfcHJvYmUsCisJLm9wZW4JCT0gZ2JlX29wZW4sCisJLmNsb3NlCQk9IGdiZV9jbG9zZSwKKwkucmVtb3ZlCQk9IGdiZV9yZW1vdmUsCisJLmF0dGFjaAkJPSBnYmVfYXR0YWNoLAorCS5yZWxlYXNlCT0gZ2JlX3JlbGVhc2UsCisJLmFkZF9hZGRyCT0gZ2JlX2FkZF9hZGRyLAorCS5kZWxfYWRkcgk9IGdiZV9kZWxfYWRkciwKKwkuYWRkX3ZpZAk9IGdiZV9hZGRfdmlkLAorCS5kZWxfdmlkCT0gZ2JlX2RlbF92aWQsCisJLmlvY3RsCQk9IGdiZV9pb2N0bCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGtleXN0b25lX2diZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IG5ldGNwX3JlZ2lzdGVyX21vZHVsZSgmZ2JlX21vZHVsZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG5ldGNwX3JlZ2lzdGVyX21vZHVsZSgmeGdiZV9tb2R1bGUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KGtleXN0b25lX2diZV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGtleXN0b25lX2diZV9leGl0KHZvaWQpCit7CisJbmV0Y3BfdW5yZWdpc3Rlcl9tb2R1bGUoJmdiZV9tb2R1bGUpOworCW5ldGNwX3VucmVnaXN0ZXJfbW9kdWxlKCZ4Z2JlX21vZHVsZSk7Cit9Cittb2R1bGVfZXhpdChrZXlzdG9uZV9nYmVfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVEkgTkVUQ1AgRVRIU1MgZHJpdmVyIGZvciBLZXlzdG9uZSBTT0NzIik7CitNT0RVTEVfQVVUSE9SKCJTYW5kZWVwIE5haXIgPHNhbmRlZXBfbkB0aS5jb20iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL25ldGNwX3NnbWlpLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9uZXRjcF9zZ21paS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZWIxNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9uZXRjcF9zZ21paS5jCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogU0dNSSBtb2R1bGUgaW5pdGlhbGlzYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGV4YXMgSW5zdHJ1bWVudHMgSW5jb3Jwb3JhdGVkCisgKiBBdXRob3JzOglTYW5kZWVwIE5haXIgPHNhbmRlZXBfbkB0aS5jb20+CisgKgkJU2FuZGVlcCBQYXVscmFqIDxzLXBhdWxyYWpAdGkuY29tPgorICoJCVdpbmdtYW4gS3dvayA8dy1rd29rMkB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgIm5ldGNwLmgiCisKKyNkZWZpbmUgU0dNSUlfUkVHX1NUQVRVU19MT0NLCQlCSVQoNCkKKyNkZWZpbmUJU0dNSUlfUkVHX1NUQVRVU19MSU5LCQlCSVQoMCkKKyNkZWZpbmUgU0dNSUlfUkVHX1NUQVRVU19BVVRPTkVHCUJJVCgyKQorI2RlZmluZSBTR01JSV9SRUdfQ09OVFJPTF9BVVRPTkVHCUJJVCgwKQorCisjZGVmaW5lIFNHTUlJMjNfT0ZGU0VUKHgpCSgoeCAtIDIpICogMHgxMDApCisjZGVmaW5lIFNHTUlJX09GRlNFVCh4KQkJKCh4IDw9IDEpID8gKHggKiAweDEwMCkgOiAoU0dNSUkyM19PRkZTRVQoeCkpKQorCisvKiBTR01JSSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgU0dNSUlfU1JFU0VUX1JFRyh4KSAgIChTR01JSV9PRkZTRVQoeCkgKyAweDAwNCkKKyNkZWZpbmUgU0dNSUlfQ1RMX1JFRyh4KSAgICAgIChTR01JSV9PRkZTRVQoeCkgKyAweDAxMCkKKyNkZWZpbmUgU0dNSUlfU1RBVFVTX1JFRyh4KSAgIChTR01JSV9PRkZTRVQoeCkgKyAweDAxNCkKKyNkZWZpbmUgU0dNSUlfTVJBRFZfUkVHKHgpICAgIChTR01JSV9PRkZTRVQoeCkgKyAweDAxOCkKKworc3RhdGljIHZvaWQgc2dtaWlfd3JpdGVfcmVnKHZvaWQgX19pb21lbSAqYmFzZSwgaW50IHJlZywgdTMyIHZhbCkKK3sKKwl3cml0ZWwodmFsLCBiYXNlICsgcmVnKTsKK30KKworc3RhdGljIHUzMiBzZ21paV9yZWFkX3JlZyh2b2lkIF9faW9tZW0gKmJhc2UsIGludCByZWcpCit7CisJcmV0dXJuIHJlYWRsKGJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBzZ21paV93cml0ZV9yZWdfYml0KHZvaWQgX19pb21lbSAqYmFzZSwgaW50IHJlZywgdTMyIHZhbCkKK3sKKwl3cml0ZWwoKHJlYWRsKGJhc2UgKyByZWcpIHwgdmFsKSwgYmFzZSArIHJlZyk7Cit9CisKKy8qIHBvcnQgaXMgMCBiYXNlZCAqLworaW50IG5ldGNwX3NnbWlpX3Jlc2V0KHZvaWQgX19pb21lbSAqc2dtaWlfb2ZzLCBpbnQgcG9ydCkKK3sKKwkvKiBTb2Z0IHJlc2V0ICovCisJc2dtaWlfd3JpdGVfcmVnX2JpdChzZ21paV9vZnMsIFNHTUlJX1NSRVNFVF9SRUcocG9ydCksIDB4MSk7CisJd2hpbGUgKHNnbWlpX3JlYWRfcmVnKHNnbWlpX29mcywgU0dNSUlfU1JFU0VUX1JFRyhwb3J0KSkgIT0gMHgwKQorCQk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBuZXRjcF9zZ21paV9nZXRfcG9ydF9saW5rKHZvaWQgX19pb21lbSAqc2dtaWlfb2ZzLCBpbnQgcG9ydCkKK3sKKwl1MzIgc3RhdHVzID0gMCwgbGluayA9IDA7CisKKwlzdGF0dXMgPSBzZ21paV9yZWFkX3JlZyhzZ21paV9vZnMsIFNHTUlJX1NUQVRVU19SRUcocG9ydCkpOworCWlmICgoc3RhdHVzICYgU0dNSUlfUkVHX1NUQVRVU19MSU5LKSAhPSAwKQorCQlsaW5rID0gMTsKKwlyZXR1cm4gbGluazsKK30KKworaW50IG5ldGNwX3NnbWlpX2NvbmZpZyh2b2lkIF9faW9tZW0gKnNnbWlpX29mcywgaW50IHBvcnQsIHUzMiBpbnRlcmZhY2UpCit7CisJdW5zaWduZWQgaW50IGksIHN0YXR1cywgbWFzazsKKwl1MzIgbXJfYWR2X2FiaWxpdHk7CisJdTMyIGNvbnRyb2w7CisKKwlzd2l0Y2ggKGludGVyZmFjZSkgeworCWNhc2UgU0dNSUlfTElOS19NQUNfTUFDX0FVVE9ORUc6CisJCW1yX2Fkdl9hYmlsaXR5CT0gMHg5ODAxOworCQljb250cm9sCQk9IDB4MjE7CisJCWJyZWFrOworCisJY2FzZSBTR01JSV9MSU5LX01BQ19QSFk6CisJY2FzZSBTR01JSV9MSU5LX01BQ19QSFlfTk9fTURJTzoKKwkJbXJfYWR2X2FiaWxpdHkJPSAxOworCQljb250cm9sCQk9IDE7CisJCWJyZWFrOworCisJY2FzZSBTR01JSV9MSU5LX01BQ19NQUNfRk9SQ0VEOgorCQltcl9hZHZfYWJpbGl0eQk9IDB4OTgwMTsKKwkJY29udHJvbAkJPSAweDIwOworCQlicmVhazsKKworCWNhc2UgU0dNSUlfTElOS19NQUNfRklCRVI6CisJCW1yX2Fkdl9hYmlsaXR5CT0gMHgyMDsKKwkJY29udHJvbAkJPSAweDE7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJV0FSTl9PTkNFKDEsICJJbnZhbGlkIHNnbWlpIGludGVyZmFjZTogJWRcbiIsIGludGVyZmFjZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXNnbWlpX3dyaXRlX3JlZyhzZ21paV9vZnMsIFNHTUlJX0NUTF9SRUcocG9ydCksIDApOworCisJLyogV2FpdCBmb3IgdGhlIFNlckRlcyBwbGwgdG8gbG9jayAqLworCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspICB7CisJCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKKwkJc3RhdHVzID0gc2dtaWlfcmVhZF9yZWcoc2dtaWlfb2ZzLCBTR01JSV9TVEFUVVNfUkVHKHBvcnQpKTsKKwkJaWYgKChzdGF0dXMgJiBTR01JSV9SRUdfU1RBVFVTX0xPQ0spICE9IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAoKHN0YXR1cyAmIFNHTUlJX1JFR19TVEFUVVNfTE9DSykgPT0gMCkKKwkJcHJfZXJyKCJzZXJkZXMgUExMIG5vdCBsb2NrZWRcbiIpOworCisJc2dtaWlfd3JpdGVfcmVnKHNnbWlpX29mcywgU0dNSUlfTVJBRFZfUkVHKHBvcnQpLCBtcl9hZHZfYWJpbGl0eSk7CisJc2dtaWlfd3JpdGVfcmVnKHNnbWlpX29mcywgU0dNSUlfQ1RMX1JFRyhwb3J0KSwgY29udHJvbCk7CisKKwltYXNrID0gU0dNSUlfUkVHX1NUQVRVU19MSU5LOworCWlmIChjb250cm9sICYgU0dNSUlfUkVHX0NPTlRST0xfQVVUT05FRykKKwkJbWFzayB8PSBTR01JSV9SRUdfU1RBVFVTX0FVVE9ORUc7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDsgaSsrKSAgeworCQl1c2xlZXBfcmFuZ2UoMjAwLCA1MDApOworCQlzdGF0dXMgPSBzZ21paV9yZWFkX3JlZyhzZ21paV9vZnMsIFNHTUlJX1NUQVRVU19SRUcocG9ydCkpOworCQlpZiAoKHN0YXR1cyAmIG1hc2spID09IG1hc2spCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL25ldGNwX3hnYmVwY3NyLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9uZXRjcF94Z2JlcGNzci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNTcxYWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9uZXRjcF94Z2JlcGNzci5jCkBAIC0wLDAgKzEsNTAxIEBACisvKgorICogWEdFIFBDU1IgbW9kdWxlIGluaXRpYWxpc2F0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFRleGFzIEluc3RydW1lbnRzIEluY29ycG9yYXRlZAorICogQXV0aG9yczoJU2FuZGVlcCBOYWlyIDxzYW5kZWVwX25AdGkuY29tPgorICoJCVdpbmdNYW4gS3dvayA8dy1rd29rMkB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHZlcnNpb24gMi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgImFzIGlzIiBXSVRIT1VUIEFOWSBXQVJSQU5UWSBvZiBhbnkKKyAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKKyAqIG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlICJuZXRjcC5oIgorCisvKiBYR0JFIHJlZ2lzdGVycyAqLworI2RlZmluZSBYR0JFX0NUUkxfT0ZGU0VUCQkweDBjCisjZGVmaW5lIFhHQkVfU0dNSUlfMV9PRkZTRVQJCTB4MDExNAorI2RlZmluZSBYR0JFX1NHTUlJXzJfT0ZGU0VUCQkweDAyMTQKKworLyogUENTLVIgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBDU1JfQ1BVX0NUUkxfT0ZGU0VUCQkweDFmZDAKKyNkZWZpbmUgUE9SX0VOCQkJCUJJVCgyOSkKKworI2RlZmluZSByZWdfcm13KGFkZHIsIHZhbHVlLCBtYXNrKSBcCisJd3JpdGVsKCgocmVhZGwoYWRkcikgJiAofihtYXNrKSkpIHwgXAorCQkJKHZhbHVlICYgKG1hc2spKSksIChhZGRyKSkKKworLyogYml0IG1hc2sgb2Ygd2lkdGggdyBhdCBvZmZzZXQgcyAqLworI2RlZmluZSBNQVNLX1dJRF9TSCh3LCBzKQkJKCgoMSA8PCB3KSAtIDEpIDw8IHMpCisKKy8qIHNoaWZ0IHZhbHVlIHYgdG8gb2Zmc2V0IHMgKi8KKyNkZWZpbmUgVkFMX1NIKHYsIHMpCQkJKHYgPDwgcykKKworI2RlZmluZSBQSFlfQShzZXJkZXMpCQkJMAorCitzdHJ1Y3Qgc2VyZGVzX2NmZyB7CisJdTMyIG9mczsKKwl1MzIgdmFsOworCXUzMiBtYXNrOworfTsKKworc3RhdGljIHN0cnVjdCBzZXJkZXNfY2ZnIGNmZ19waHliXzFwMjVnXzE1NnAyNW1oel9jbXUwW10gPSB7CisJezB4MDAwMCwgMHgwMDgwMDAwMiwgMHgwMGZmMDBmZn0sCisJezB4MDAxNCwgMHgwMDAwMzgzOCwgMHgwMDAwZmZmZn0sCisJezB4MDA2MCwgMHgxYzQ0ZTQzOCwgMHhmZmZmZmZmZn0sCisJezB4MDA2NCwgMHgwMGMxODQwMCwgMHgwMGZmZmZmZn0sCisJezB4MDA2OCwgMHgxNzA3ODIwMCwgMHhmZmZmZmYwMH0sCisJezB4MDA2YywgMHgwMDAwMDAxNCwgMHgwMDAwMDBmZn0sCisJezB4MDA3OCwgMHgwMDAwYzAwMCwgMHgwMDAwZmYwMH0sCisJezB4MDAwMCwgMHgwMDAwMDAwMywgMHgwMDAwMDBmZn0sCit9OworCitzdGF0aWMgc3RydWN0IHNlcmRlc19jZmcgY2ZnX3BoeWJfMTBwMzEyNWdfMTU2cDI1bWh6X2NtdTFbXSA9IHsKKwl7MHgwYzAwLCAweDAwMDMwMDAyLCAweDAwZmYwMGZmfSwKKwl7MHgwYzE0LCAweDAwMDA1MjUyLCAweDAwMDBmZmZmfSwKKwl7MHgwYzI4LCAweDgwMDAwMDAwLCAweGZmMDAwMDAwfSwKKwl7MHgwYzJjLCAweDAwMDAwMGY2LCAweDAwMDAwMGZmfSwKKwl7MHgwYzNjLCAweDA0MDAwNDA1LCAweGZmMDBmZmZmfSwKKwl7MHgwYzQwLCAweGMwODAwMDAwLCAweGZmZmYwMDAwfSwKKwl7MHgwYzQ0LCAweDVhMjAyMDYyLCAweGZmZmZmZmZmfSwKKwl7MHgwYzQ4LCAweDQwMDQwNDI0LCAweGZmZmZmZmZmfSwKKwl7MHgwYzRjLCAweDAwMDA0MDAyLCAweDAwMDBmZmZmfSwKKwl7MHgwYzUwLCAweDE5MDAxYzAwLCAweGZmMDBmZjAwfSwKKwl7MHgwYzU0LCAweDAwMDAyMTAwLCAweDAwMDBmZjAwfSwKKwl7MHgwYzU4LCAweDAwMDAwMDYwLCAweDAwMDAwMGZmfSwKKwl7MHgwYzYwLCAweDgwMTMxZTdjLCAweGZmZmZmZmZmfSwKKwl7MHgwYzY0LCAweDg0MDBjYjAyLCAweGZmMDBmZmZmfSwKKwl7MHgwYzY4LCAweDE3MDc4MjAwLCAweGZmZmZmZjAwfSwKKwl7MHgwYzZjLCAweDAwMDAwMDE2LCAweDAwMDAwMGZmfSwKKwl7MHgwYzc0LCAweDAwMDAwNDAwLCAweDAwMDBmZjAwfSwKKwl7MHgwYzc4LCAweDAwMDBjMDAwLCAweDAwMDBmZjAwfSwKKwl7MHgwYzAwLCAweDAwMDAwMDAzLCAweDAwMDAwMGZmfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2VyZGVzX2NmZyBjZmdfcGh5Yl8xMHAzMTI1Z18xNmJpdF9sYW5lW10gPSB7CisJezB4MDIwNCwgMHgwMDAwMDA4MCwgMHgwMDAwMDBmZn0sCisJezB4MDIwOCwgMHgwMDAwOTIwZCwgMHgwMDAwZmZmZn0sCisJezB4MDIwNCwgMHhmYzAwMDAwMCwgMHhmZjAwMDAwMH0sCisJezB4MDIwOCwgMHgwMDAwOTEwNCwgMHgwMDAwZmZmZn0sCisJezB4MDIxMCwgMHgxYTAwMDAwMCwgMHhmZjAwMDAwMH0sCisJezB4MDIxNCwgMHgwMDAwNmI1OCwgMHgwMGZmZmZmZn0sCisJezB4MDIxOCwgMHg3NTgwMDA4NCwgMHhmZmZmMDBmZn0sCisJezB4MDIyYywgMHgwMDMwMDAwMCwgMHgwMGZmMDAwMH0sCisJezB4MDIzMCwgMHgwMDAwMzgwMCwgMHgwMDAwZmYwMH0sCisJezB4MDI0YywgMHgwMDhmMDAwMCwgMHgwMGZmMDAwMH0sCisJezB4MDI1MCwgMHgzMDAwMDAwMCwgMHhmZjAwMDAwMH0sCisJezB4MDI2MCwgMHgwMDAwMDAwMiwgMHgwMDAwMDBmZn0sCisJezB4MDI2NCwgMHgwMDAwMDA1NywgMHgwMDAwMDBmZn0sCisJezB4MDI2OCwgMHgwMDU3NTcwMCwgMHgwMGZmZmYwMH0sCisJezB4MDI3OCwgMHhmZjAwMDAwMCwgMHhmZjAwMDAwMH0sCisJezB4MDI4MCwgMHgwMDUwMDA1MCwgMHgwMGZmMDBmZn0sCisJezB4MDI4NCwgMHgwMDAwMWYxNSwgMHgwMDAwZmZmZn0sCisJezB4MDI4YywgMHgwMDAwNmYwMCwgMHgwMDAwZmYwMH0sCisJezB4MDI5NCwgMHgwMDAwMDAwMCwgMHhmZmZmZmYwMH0sCisJezB4MDI5OCwgMHgwMDAwMjY0MCwgMHhmZjAwZmZmZn0sCisJezB4MDI5YywgMHgwMDAwMDAwMywgMHgwMDAwMDBmZn0sCisJezB4MDJhNCwgMHgwMDAwMGYxMywgMHgwMDAwZmZmZn0sCisJezB4MDJhOCwgMHgwMDAxYjYwMCwgMHgwMGZmZmYwMH0sCisJezB4MDM4MCwgMHgwMDAwMDAzMCwgMHgwMDAwMDBmZn0sCisJezB4MDNjMCwgMHgwMDAwMDIwMCwgMHgwMDAwZmYwMH0sCisJezB4MDNjYywgMHgwMDAwMDAxOCwgMHgwMDAwMDBmZn0sCisJezB4MDNjYywgMHgwMDAwMDAwMCwgMHgwMDAwMDBmZn0sCit9OworCitzdGF0aWMgc3RydWN0IHNlcmRlc19jZmcgY2ZnX3BoeWJfMTBwMzEyNWdfY29tbGFuZVtdID0geworCXsweDBhMDAsIDB4MDAwMDA4MDAsIDB4MDAwMGZmMDB9LAorCXsweDBhODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwZmZ9LAorCXsweDBhOGMsIDB4MDAxMzAwMDAsIDB4MDBmZjAwMDB9LAorCXsweDBhOTAsIDB4NzdhMDAwMDAsIDB4ZmZmZjAwMDB9LAorCXsweDBhOTQsIDB4MDAwMDc3NzcsIDB4MDAwMGZmZmZ9LAorCXsweDBiMDgsIDB4MDAwZjAwMDAsIDB4ZmZmZjAwMDB9LAorCXsweDBiMGMsIDB4MDAwZjAwMDAsIDB4MDBmZmZmZmZ9LAorCXsweDBiMTAsIDB4YmUwMDAwMDAsIDB4ZmYwMDAwMDB9LAorCXsweDBiMTQsIDB4MDAwMDAwZmYsIDB4MDAwMDAwZmZ9LAorCXsweDBiMTgsIDB4MDAwMDAwMTQsIDB4MDAwMDAwZmZ9LAorCXsweDBiNWMsIDB4OTgxYjAwMDAsIDB4ZmZmZjAwMDB9LAorCXsweDBiNjQsIDB4MDAwMDExMDAsIDB4MDAwMGZmMDB9LAorCXsweDBiNzgsIDB4MDAwMDBjMDAsIDB4MDAwMGZmMDB9LAorCXsweDBhYmMsIDB4ZmYwMDAwMDAsIDB4ZmYwMDAwMDB9LAorCXsweDBhYzAsIDB4MDAwMDAwOGIsIDB4MDAwMDAwZmZ9LAorfTsKKworc3RhdGljIHN0cnVjdCBzZXJkZXNfY2ZnIGNmZ19jbV9jMV9jMltdID0geworCXsweDAyMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDBmMDB9LAorCXsweDAyMDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMWZ9LAorCXsweDAyMDQsIDB4MDAwMDAwMDAsIDB4MDAwNDAwMDB9LAorCXsweDAyMDgsIDB4MDAwMDAwYTAsIDB4MDAwMDAwZTB9LAorfTsKKworc3RhdGljIHZvaWQgbmV0Y3BfeGdiZV9zZXJkZXNfY211X2luaXQodm9pZCBfX2lvbWVtICpzZXJkZXNfcmVncykKK3sKKwlpbnQgaTsKKworCS8qIGNtdTAgc2V0dXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjZmdfcGh5Yl8xcDI1Z18xNTZwMjVtaHpfY211MCk7IGkrKykgeworCQlyZWdfcm13KHNlcmRlc19yZWdzICsgY2ZnX3BoeWJfMXAyNWdfMTU2cDI1bWh6X2NtdTBbaV0ub2ZzLAorCQkJY2ZnX3BoeWJfMXAyNWdfMTU2cDI1bWh6X2NtdTBbaV0udmFsLAorCQkJY2ZnX3BoeWJfMXAyNWdfMTU2cDI1bWh6X2NtdTBbaV0ubWFzayk7CisJfQorCisJLyogY211MSBzZXR1cCAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNmZ19waHliXzEwcDMxMjVnXzE1NnAyNW1oel9jbXUxKTsgaSsrKSB7CisJCXJlZ19ybXcoc2VyZGVzX3JlZ3MgKyBjZmdfcGh5Yl8xMHAzMTI1Z18xNTZwMjVtaHpfY211MVtpXS5vZnMsCisJCQljZmdfcGh5Yl8xMHAzMTI1Z18xNTZwMjVtaHpfY211MVtpXS52YWwsCisJCQljZmdfcGh5Yl8xMHAzMTI1Z18xNTZwMjVtaHpfY211MVtpXS5tYXNrKTsKKwl9Cit9CisKKy8qIGxhbmUgaXMgMCBiYXNlZCAqLworc3RhdGljIHZvaWQgbmV0Y3BfeGdiZV9zZXJkZXNfbGFuZV9jb25maWcoCisJCQl2b2lkIF9faW9tZW0gKnNlcmRlc19yZWdzLCBpbnQgbGFuZSkKK3sKKwlpbnQgaTsKKworCS8qIGxhbmUgc2V0dXAgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjZmdfcGh5Yl8xMHAzMTI1Z18xNmJpdF9sYW5lKTsgaSsrKSB7CisJCXJlZ19ybXcoc2VyZGVzX3JlZ3MgKworCQkJCWNmZ19waHliXzEwcDMxMjVnXzE2Yml0X2xhbmVbaV0ub2ZzICsKKwkJCQkoMHgyMDAgKiBsYW5lKSwKKwkJCWNmZ19waHliXzEwcDMxMjVnXzE2Yml0X2xhbmVbaV0udmFsLAorCQkJY2ZnX3BoeWJfMTBwMzEyNWdfMTZiaXRfbGFuZVtpXS5tYXNrKTsKKwl9CisKKwkvKiBkaXNhYmxlIGF1dG8gbmVnb3RpYXRpb24qLworCXJlZ19ybXcoc2VyZGVzX3JlZ3MgKyAoMHgyMDAgKiBsYW5lKSArIDB4MDM4MCwKKwkJMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCk7CisKKwkvKiBkaXNhYmxlIGxpbmsgdHJhaW5pbmcgKi8KKwlyZWdfcm13KHNlcmRlc19yZWdzICsgKDB4MjAwICogbGFuZSkgKyAweDAzYzAsCisJCTB4MDAwMDAwMDAsIDB4MDAwMDAyMDApOworfQorCitzdGF0aWMgdm9pZCBuZXRjcF94Z2JlX3NlcmRlc19jb21fZW5hYmxlKHZvaWQgX19pb21lbSAqc2VyZGVzX3JlZ3MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjZmdfcGh5Yl8xMHAzMTI1Z19jb21sYW5lKTsgaSsrKSB7CisJCXJlZ19ybXcoc2VyZGVzX3JlZ3MgKyBjZmdfcGh5Yl8xMHAzMTI1Z19jb21sYW5lW2ldLm9mcywKKwkJCWNmZ19waHliXzEwcDMxMjVnX2NvbWxhbmVbaV0udmFsLAorCQkJY2ZnX3BoeWJfMTBwMzEyNWdfY29tbGFuZVtpXS5tYXNrKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG5ldGNwX3hnYmVfc2VyZGVzX2xhbmVfZW5hYmxlKAorCQkJdm9pZCBfX2lvbWVtICpzZXJkZXNfcmVncywgaW50IGxhbmUpCit7CisJLyogU2V0IExhbmUgQ29udHJvbCBSYXRlICovCisJd3JpdGVsKDB4ZTBlOWUwMzgsIHNlcmRlc19yZWdzICsgMHgxZmUwICsgKDQgKiBsYW5lKSk7Cit9CisKK3N0YXRpYyB2b2lkIG5ldGNwX3hnYmVfc2VyZGVzX3BoeWJfcnN0X2Nscih2b2lkIF9faW9tZW0gKnNlcmRlc19yZWdzKQoreworCXJlZ19ybXcoc2VyZGVzX3JlZ3MgKyAweDBhMDAsIDB4MDAwMDAwMWYsIDB4MDAwMDAwZmYpOworfQorCitzdGF0aWMgdm9pZCBuZXRjcF94Z2JlX3NlcmRlc19wbGxfZGlzYWJsZSh2b2lkIF9faW9tZW0gKnNlcmRlc19yZWdzKQoreworCXdyaXRlbCgweDg4MDAwMDAwLCBzZXJkZXNfcmVncyArIDB4MWZmNCk7Cit9CisKK3N0YXRpYyB2b2lkIG5ldGNwX3hnYmVfc2VyZGVzX3BsbF9lbmFibGUodm9pZCBfX2lvbWVtICpzZXJkZXNfcmVncykKK3sKKwluZXRjcF94Z2JlX3NlcmRlc19waHliX3JzdF9jbHIoc2VyZGVzX3JlZ3MpOworCXdyaXRlbCgweGVlMDAwMDAwLCBzZXJkZXNfcmVncyArIDB4MWZmNCk7Cit9CisKK3N0YXRpYyBpbnQgbmV0Y3BfeGdiZV93YWl0X3BsbF9sb2NrZWQodm9pZCBfX2lvbWVtICpzd19yZWdzKQoreworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgdmFsXzEsIHZhbF8wOworCisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMCk7CisJZG8geworCQl2YWxfMCA9IChyZWFkbChzd19yZWdzICsgWEdCRV9TR01JSV8xX09GRlNFVCkgJiBCSVQoNCkpOworCQl2YWxfMSA9IChyZWFkbChzd19yZWdzICsgWEdCRV9TR01JSV8yX09GRlNFVCkgJiBCSVQoNCkpOworCisJCWlmICh2YWxfMSAmJiB2YWxfMCkKKwkJCXJldHVybiAwOworCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlyZXQgPSAtRVRJTUVET1VUOworCQkJYnJlYWs7CisJCX0KKworCQljcHVfcmVsYXgoKTsKKwl9IHdoaWxlICh0cnVlKTsKKworCXByX2VycigiWEdCRSBzZXJkZXMgbm90IGxvY2tlZDogdGltZSBvdXQuXG4iKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBuZXRjcF94Z2JlX3NlcmRlc19lbmFibGVfeGdtaWlfcG9ydCh2b2lkIF9faW9tZW0gKnN3X3JlZ3MpCit7CisJd3JpdGVsKDB4MDMsIHN3X3JlZ3MgKyBYR0JFX0NUUkxfT0ZGU0VUKTsKK30KKworc3RhdGljIHUzMiBuZXRjcF94Z2JlX3NlcmRlc19yZWFkX3RidXNfdmFsKHZvaWQgX19pb21lbSAqc2VyZGVzX3JlZ3MpCit7CisJdTMyIHRtcDsKKworCWlmIChQSFlfQShzZXJkZXNfcmVncykpIHsKKwkJdG1wICA9IChyZWFkbChzZXJkZXNfcmVncyArIDB4MGVjKSA+PiAyNCkgJiAweDBmZjsKKwkJdG1wIHw9ICgocmVhZGwoc2VyZGVzX3JlZ3MgKyAweDBmYykgPj4gMTYpICYgMHgwMGYwMCk7CisJfSBlbHNlIHsKKwkJdG1wICA9IChyZWFkbChzZXJkZXNfcmVncyArIDB4MGY4KSA+PiAxNikgJiAweDBmZmY7CisJfQorCisJcmV0dXJuIHRtcDsKK30KKworc3RhdGljIHZvaWQgbmV0Y3BfeGdiZV9zZXJkZXNfd3JpdGVfdGJ1c19hZGRyKHZvaWQgX19pb21lbSAqc2VyZGVzX3JlZ3MsCisJCQkJCSAgICAgIGludCBzZWxlY3QsIGludCBvZnMpCit7CisJaWYgKFBIWV9BKHNlcmRlc19yZWdzKSkgeworCQlyZWdfcm13KHNlcmRlc19yZWdzICsgMHgwMDA4LCAoKHNlbGVjdCA8PCA1KSArIG9mcykgPDwgMjQsCisJCQl+MHgwMGZmZmZmZik7CisJCXJldHVybjsKKwl9CisKKwkvKiBGb3IgMiBsYW5lIFBoeS1CLCBsYW5lMCBpcyBhY3R1YWxseSBsYW5lMSAqLworCXN3aXRjaCAoc2VsZWN0KSB7CisJY2FzZSAxOgorCQlzZWxlY3QgPSAyOworCQlicmVhazsKKwljYXNlIDI6CisJCXNlbGVjdCA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwlyZWdfcm13KHNlcmRlc19yZWdzICsgMHgwMGZjLCAoKHNlbGVjdCA8PCA4KSArIG9mcykgPDwgMTYsIH4weGY4MDBmZmZmKTsKK30KKworc3RhdGljIHUzMiBuZXRjcF94Z2JlX3NlcmRlc19yZWFkX3NlbGVjdF90YnVzKHZvaWQgX19pb21lbSAqc2VyZGVzX3JlZ3MsCisJCQkJCSAgICAgIGludCBzZWxlY3QsIGludCBvZnMpCit7CisJLyogU2V0IHRidXMgYWRkcmVzcyAqLworCW5ldGNwX3hnYmVfc2VyZGVzX3dyaXRlX3RidXNfYWRkcihzZXJkZXNfcmVncywgc2VsZWN0LCBvZnMpOworCS8qIEdldCBUQlVTIFZhbHVlICovCisJcmV0dXJuIG5ldGNwX3hnYmVfc2VyZGVzX3JlYWRfdGJ1c192YWwoc2VyZGVzX3JlZ3MpOworfQorCitzdGF0aWMgdm9pZCBuZXRjcF94Z2JlX3NlcmRlc19yZXNldF9jZHIodm9pZCBfX2lvbWVtICpzZXJkZXNfcmVncywKKwkJCQkJdm9pZCBfX2lvbWVtICpzaWdfZGV0ZWN0X3JlZywgaW50IGxhbmUpCit7CisJdTMyIHRtcCwgZGxwZiwgdGJ1czsKKworCS8qR2V0IHRoZSBETFBGIHZhbHVlcyAqLworCXRtcCA9IG5ldGNwX3hnYmVfc2VyZGVzX3JlYWRfc2VsZWN0X3RidXMoCisJCQlzZXJkZXNfcmVncywgbGFuZSArIDEsIDUpOworCisJZGxwZiA9IHRtcCA+PiAyOworCisJaWYgKGRscGYgPCA0MDAgfHwgZGxwZiA+IDcwMCkgeworCQlyZWdfcm13KHNpZ19kZXRlY3RfcmVnLCBWQUxfU0goMiwgMSksIE1BU0tfV0lEX1NIKDIsIDEpKTsKKwkJbWRlbGF5KDEpOworCQlyZWdfcm13KHNpZ19kZXRlY3RfcmVnLCBWQUxfU0goMCwgMSksIE1BU0tfV0lEX1NIKDIsIDEpKTsKKwl9IGVsc2UgeworCQl0YnVzID0gbmV0Y3BfeGdiZV9zZXJkZXNfcmVhZF9zZWxlY3RfdGJ1cyhzZXJkZXNfcmVncywgbGFuZSArCisJCQkJCQkJICAxLCAweGUpOworCisJCXByX2RlYnVnKCJYR0JFOiBDRFIgY2VudGVyZWQsIERMUEY6ICU0ZCwlZCwlZC5cbiIsCisJCQkgdG1wID4+IDIsIHRtcCAmIDMsICh0YnVzID4+IDIpICYgMyk7CisJfQorfQorCisvKiBDYWxsIGV2ZXJ5IDEwMCBtcyAqLworc3RhdGljIGludCBuZXRjcF94Z2JlX2NoZWNrX2xpbmtfc3RhdHVzKHZvaWQgX19pb21lbSAqc2VyZGVzX3JlZ3MsCisJCQkJCXZvaWQgX19pb21lbSAqc3dfcmVncywgdTMyIGxhbmVzLAorCQkJCQl1MzIgKmN1cnJlbnRfc3RhdGUsIHUzMiAqbGFuZV9kb3duKQoreworCXZvaWQgX19pb21lbSAqcGNzcl9iYXNlID0gc3dfcmVncyArIDB4MDYwMDsKKwl2b2lkIF9faW9tZW0gKnNpZ19kZXRlY3RfcmVnOworCXUzMiBwY3NyX3J4X3N0YXQsIGJsa19sb2NrLCBibGtfZXJyczsKKwlpbnQgbG9zcywgaSwgc3RhdHVzID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBsYW5lczsgaSsrKSB7CisJCS8qIEdldCB0aGUgTG9zcyBiaXQgKi8KKwkJbG9zcyA9IHJlYWRsKHNlcmRlc19yZWdzICsgMHgxZmMwICsgMHgyMCArIChpICogMHgwNCkpICYgMHgxOworCisJCS8qIEdldCBCbG9jayBFcnJvcnMgYW5kIEJsb2NrIExvY2sgYml0cyAqLworCQlwY3NyX3J4X3N0YXQgPSByZWFkbChwY3NyX2Jhc2UgKyAweDBjICsgKGkgKiAweDgwKSk7CisJCWJsa19sb2NrID0gKHBjc3Jfcnhfc3RhdCA+PiAzMCkgJiAweDE7CisJCWJsa19lcnJzID0gKHBjc3Jfcnhfc3RhdCA+PiAxNikgJiAweDBmZjsKKworCQkvKiBHZXQgU2lnbmFsIERldGVjdCBPdmVybGF5IEFkZHJlc3MgKi8KKwkJc2lnX2RldGVjdF9yZWcgPSBzZXJkZXNfcmVncyArIChpICogMHgyMDApICsgMHgyMDAgKyAweDA0OworCisJCS8qIElmIEJsb2NrIGVycm9ycyBtYXhlZCBvdXQsIGF0dGVtcHQgcmVjb3ZlcnkhICovCisJCWlmIChibGtfZXJycyA9PSAweDBmZikKKwkJCWJsa19sb2NrID0gMDsKKworCQlzd2l0Y2ggKGN1cnJlbnRfc3RhdGVbaV0pIHsKKwkJY2FzZSAwOgorCQkJLyogaWYgZ29vZCBsaW5rIGxvY2sgdGhlIHNpZ25hbCBkZXRlY3QgT04hICovCisJCQlpZiAoIWxvc3MgJiYgYmxrX2xvY2spIHsKKwkJCQlwcl9kZWJ1ZygiWEdCRSBQQ1NSIExpbmtlZCBMYW5lOiAlZFxuIiwgaSk7CisJCQkJcmVnX3JtdyhzaWdfZGV0ZWN0X3JlZywgVkFMX1NIKDMsIDEpLAorCQkJCQlNQVNLX1dJRF9TSCgyLCAxKSk7CisJCQkJY3VycmVudF9zdGF0ZVtpXSA9IDE7CisJCQl9IGVsc2UgaWYgKCFibGtfbG9jaykgeworCQkJCS8qIGlmIG5vIGxvY2ssIHRoZW4gcmVzZXQgQ0RSICovCisJCQkJcHJfZGVidWcoIlhHQkUgUENTUiBSZWNvdmVyIExhbmU6ICVkXG4iLCBpKTsKKwkJCQluZXRjcF94Z2JlX3NlcmRlc19yZXNldF9jZHIoc2VyZGVzX3JlZ3MsCisJCQkJCQkJICAgIHNpZ19kZXRlY3RfcmVnLCBpKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgMToKKwkJCWlmICghYmxrX2xvY2spIHsKKwkJCQkvKiBMaW5rIExvc3Q/ICovCisJCQkJbGFuZV9kb3duW2ldID0gMTsKKwkJCQljdXJyZW50X3N0YXRlW2ldID0gMjsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgMjoKKwkJCWlmIChibGtfbG9jaykKKwkJCQkvKiBOb3BlIGp1c3Qgbm9pc2UgKi8KKwkJCQljdXJyZW50X3N0YXRlW2ldID0gMTsKKwkJCWVsc2UgeworCQkJCS8qIExvc3QgdGhlIGJsb2NrIGxvY2ssIHJlc2V0IENEUiBpZiBpdCBpcworCQkJCSAqIG5vdCBjZW50ZXJlZCBhbmQgZ28gYmFjayB0byBzeW5jIHN0YXRlCisJCQkJICovCisJCQkJbmV0Y3BfeGdiZV9zZXJkZXNfcmVzZXRfY2RyKHNlcmRlc19yZWdzLAorCQkJCQkJCSAgICBzaWdfZGV0ZWN0X3JlZywgaSk7CisJCQkJY3VycmVudF9zdGF0ZVtpXSA9IDA7CisJCQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcHJfZXJyKCJYR0JFOiB1bmtub3duIGN1cnJlbnRfc3RhdGVbJWRdICVkXG4iLAorCQkJICAgICAgIGksIGN1cnJlbnRfc3RhdGVbaV0pOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoYmxrX2VycnMgPiAwKSB7CisJCQkvKiBSZXNldCB0aGUgRXJyb3IgY291bnRzISAqLworCQkJcmVnX3JtdyhwY3NyX2Jhc2UgKyAweDA4ICsgKGkgKiAweDgwKSwgVkFMX1NIKDB4MTksIDApLAorCQkJCU1BU0tfV0lEX1NIKDgsIDApKTsKKworCQkJcmVnX3JtdyhwY3NyX2Jhc2UgKyAweDA4ICsgKGkgKiAweDgwKSwgVkFMX1NIKDB4MDAsIDApLAorCQkJCU1BU0tfV0lEX1NIKDgsIDApKTsKKwkJfQorCisJCXN0YXR1cyAmPSAoY3VycmVudF9zdGF0ZVtpXSA9PSAxKTsKKwl9CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IG5ldGNwX3hnYmVfc2VyZGVzX2NoZWNrX2xhbmUodm9pZCBfX2lvbWVtICpzZXJkZXNfcmVncywKKwkJCQkJdm9pZCBfX2lvbWVtICpzd19yZWdzKQoreworCXUzMiBjdXJyZW50X3N0YXRlWzJdID0gezAsIDB9OworCWludCByZXRyaWVzID0gMCwgbGlua191cDsKKwl1MzIgbGFuZV9kb3duWzJdOworCisJZG8geworCQlsYW5lX2Rvd25bMF0gPSAwOworCQlsYW5lX2Rvd25bMV0gPSAwOworCisJCWxpbmtfdXAgPSBuZXRjcF94Z2JlX2NoZWNrX2xpbmtfc3RhdHVzKHNlcmRlc19yZWdzLCBzd19yZWdzLCAyLAorCQkJCQkJICAgICAgIGN1cnJlbnRfc3RhdGUsCisJCQkJCQkgICAgICAgbGFuZV9kb3duKTsKKworCQkvKiBpZiB3ZSBkaWQgbm90IGdldCBsaW5rIHVwIHRoZW4gd2FpdCAxMDBtcyBiZWZvcmUgY2FsbGluZworCQkgKiBpdCBhZ2FpbgorCQkgKi8KKwkJaWYgKGxpbmtfdXApCisJCQlicmVhazsKKworCQlpZiAobGFuZV9kb3duWzBdKQorCQkJcHJfZGVidWcoIlhHQkU6IGRldGVjdGVkIGxpbmsgZG93biBvbiBsYW5lIDBcbiIpOworCisJCWlmIChsYW5lX2Rvd25bMV0pCisJCQlwcl9kZWJ1ZygiWEdCRTogZGV0ZWN0ZWQgbGluayBkb3duIG9uIGxhbmUgMVxuIik7CisKKwkJaWYgKCsrcmV0cmllcyA+IDEpIHsKKwkJCXByX2RlYnVnKCJYR0JFOiB0aW1lb3V0IHdhaXRpbmcgZm9yIHNlcmRlcyBsaW5rIHVwXG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJCW1kZWxheSgxMDApOworCX0gd2hpbGUgKCFsaW5rX3VwKTsKKworCXByX2RlYnVnKCJYR0JFOiBQQ1NSIGxpbmsgaXMgdXBcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuZXRjcF94Z2JlX3NlcmRlc19zZXR1cF9jbV9jMV9jMih2b2lkIF9faW9tZW0gKnNlcmRlc19yZWdzLAorCQkJCQkgICAgIGludCBsYW5lLCBpbnQgY20sIGludCBjMSwgaW50IGMyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2ZnX2NtX2MxX2MyKTsgaSsrKSB7CisJCXJlZ19ybXcoc2VyZGVzX3JlZ3MgKyBjZmdfY21fYzFfYzJbaV0ub2ZzICsgKDB4MjAwICogbGFuZSksCisJCQljZmdfY21fYzFfYzJbaV0udmFsLAorCQkJY2ZnX2NtX2MxX2MyW2ldLm1hc2spOworCX0KK30KKworc3RhdGljIHZvaWQgbmV0Y3BfeGdiZV9yZXNldF9zZXJkZXModm9pZCBfX2lvbWVtICpzZXJkZXNfcmVncykKK3sKKwkvKiBUb2dnbGUgdGhlIFBPUl9FTiBiaXQgaW4gQ09ORklHLkNQVV9DVFJMICovCisJLyogZW5hYmxlIFBPUl9FTiBiaXQgKi8KKwlyZWdfcm13KHNlcmRlc19yZWdzICsgUENTUl9DUFVfQ1RSTF9PRkZTRVQsIFBPUl9FTiwgUE9SX0VOKTsKKwl1c2xlZXBfcmFuZ2UoMTAsIDEwMCk7CisKKwkvKiBkaXNhYmxlIFBPUl9FTiBiaXQgKi8KKwlyZWdfcm13KHNlcmRlc19yZWdzICsgUENTUl9DUFVfQ1RSTF9PRkZTRVQsIDAsIFBPUl9FTik7CisJdXNsZWVwX3JhbmdlKDEwLCAxMDApOworfQorCitzdGF0aWMgaW50IG5ldGNwX3hnYmVfc2VyZGVzX2NvbmZpZyh2b2lkIF9faW9tZW0gKnNlcmRlc19yZWdzLAorCQkJCSAgICB2b2lkIF9faW9tZW0gKnN3X3JlZ3MpCit7CisJdTMyIHJldCwgaTsKKworCW5ldGNwX3hnYmVfc2VyZGVzX3BsbF9kaXNhYmxlKHNlcmRlc19yZWdzKTsKKwluZXRjcF94Z2JlX3NlcmRlc19jbXVfaW5pdChzZXJkZXNfcmVncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQluZXRjcF94Z2JlX3NlcmRlc19sYW5lX2NvbmZpZyhzZXJkZXNfcmVncywgaSk7CisKKwluZXRjcF94Z2JlX3NlcmRlc19jb21fZW5hYmxlKHNlcmRlc19yZWdzKTsKKwkvKiBUaGlzIGlzIEVWTSArIFJUTS1CT0Mgc3BlY2lmaWMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQluZXRjcF94Z2JlX3NlcmRlc19zZXR1cF9jbV9jMV9jMihzZXJkZXNfcmVncywgaSwgMCwgMCwgNSk7CisKKwluZXRjcF94Z2JlX3NlcmRlc19wbGxfZW5hYmxlKHNlcmRlc19yZWdzKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQluZXRjcF94Z2JlX3NlcmRlc19sYW5lX2VuYWJsZShzZXJkZXNfcmVncywgaSk7CisKKwkvKiBTQiBQTEwgU3RhdHVzIFBvbGwgKi8KKwlyZXQgPSBuZXRjcF94Z2JlX3dhaXRfcGxsX2xvY2tlZChzd19yZWdzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbmV0Y3BfeGdiZV9zZXJkZXNfZW5hYmxlX3hnbWlpX3BvcnQoc3dfcmVncyk7CisJbmV0Y3BfeGdiZV9zZXJkZXNfY2hlY2tfbGFuZShzZXJkZXNfcmVncywgc3dfcmVncyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IG5ldGNwX3hnYmVfc2VyZGVzX2luaXQodm9pZCBfX2lvbWVtICpzZXJkZXNfcmVncywgdm9pZCBfX2lvbWVtICp4Z2JlX3JlZ3MpCit7CisJdTMyIHZhbDsKKworCS8qIHJlYWQgQ09NTEFORSBiaXRzIDQ6MCAqLworCXZhbCA9IHJlYWRsKHNlcmRlc19yZWdzICsgMHhhMDApOworCWlmICh2YWwgJiAweDFmKSB7CisJCXByX2RlYnVnKCJYR0JFOiBzZXJkZXMgYWxyZWFkeSBpbiBvcGVyYXRpb24gLSByZXNldFxuIik7CisJCW5ldGNwX3hnYmVfcmVzZXRfc2VyZGVzKHNlcmRlc19yZWdzKTsKKwl9CisJcmV0dXJuIG5ldGNwX3hnYmVfc2VyZGVzX2NvbmZpZyhzZXJkZXNfcmVncywgeGdiZV9yZWdzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL3RsYW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3RpL3RsYW4uYwppbmRleCBmMmZmMDA3Li42OTFlYzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC90aS90bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvdGxhbi5jCkBAIC0yNTQwLDcgKzI1NDAsNyBAQAogCSAqIFRoaXMgaXMgYWJpdHJhcnkuICBJdCBpcyBpbnRlbmRlZCB0byBtYWtlIHN1cmUgdGhlCiAJICogdHJhbnNjZWl2ZXIgc2V0dGxlcy4KIAkgKi8KLQl0bGFuX3NldF90aW1lcihkZXYsIChIWi8yMCksIFRMQU5fVElNRVJfUEhZX1BVUCk7CisJdGxhbl9zZXRfdGltZXIoZGV2LCBtc2Vjc190b19qaWZmaWVzKDUwKSwgVExBTl9USU1FUl9QSFlfUFVQKTsKIAogfQogCkBAIC0yNTYxLDcgKzI1NjEsNyBAQAogCSAqIHRyYW5zY2VpdmVyLiAgVGhlIFRMQU4gZG9jcyBzYXkgYm90aCA1MCBtcyBhbmQKIAkgKiA1MDAgbXMsIHNvIGRvIHRoZSBsb25nZXIsIGp1c3QgaW4gY2FzZS4KIAkgKi8KLQl0bGFuX3NldF90aW1lcihkZXYsIChIWi8yMCksIFRMQU5fVElNRVJfUEhZX1JFU0VUKTsKKwl0bGFuX3NldF90aW1lcihkZXYsIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSwgVExBTl9USU1FUl9QSFlfUkVTRVQpOwogCiB9CiAKQEAgLTI1OTMsNyArMjU5Myw3IEBACiAJICogSSBkb24ndCByZW1lbWJlciB3aHkgSSB3YWl0IHRoaXMgbG9uZy4KIAkgKiBJJ3ZlIGNoYW5nZWQgdGhpcyB0byA1MG1zLCBhcyBpdCBzZWVtcyBsb25nIGVub3VnaC4KIAkgKi8KLQl0bGFuX3NldF90aW1lcihkZXYsIChIWi8yMCksIFRMQU5fVElNRVJfUEhZX1NUQVJUX0xJTkspOworCXRsYW5fc2V0X3RpbWVyKGRldiwgbXNlY3NfdG9famlmZmllcyg1MCksIFRMQU5fVElNRVJfUEhZX1NUQVJUX0xJTkspOwogCiB9CiAKQEAgLTI2NTgsNyArMjY1OCw3IEBACiAJCWRhdGEgPSBUTEFOX05FVF9DRkdfMUZSQUcgfCBUTEFOX05FVF9DRkdfMUNIQU4KIAkJCXwgVExBTl9ORVRfQ0ZHX1BIWV9FTjsKIAkJdGxhbl9kaW9fd3JpdGUxNihkZXYtPmJhc2VfYWRkciwgVExBTl9ORVRfQ09ORklHLCBkYXRhKTsKLQkJdGxhbl9zZXRfdGltZXIoZGV2LCAoNDAqSFovMTAwMCksIFRMQU5fVElNRVJfUEhZX1BET1dOKTsKKwkJdGxhbl9zZXRfdGltZXIoZGV2LCBtc2Vjc190b19qaWZmaWVzKDQwKSwgVExBTl9USU1FUl9QSFlfUERPV04pOwogCQlyZXR1cm47CiAJfSBlbHNlIGlmIChwcml2LT5waHlfbnVtID09IDApIHsKIAkJY29udHJvbCA9IDA7CkBAIC0yNzI1LDcgKzI3MjUsNyBAQAogCSAgICAocHJpdi0+YWRhcHRlci0+ZmxhZ3MgJiBUTEFOX0FEQVBURVJfVVNFX0lOVEVSTl8xMCkgJiYKIAkgICAgKHByaXYtPnBoeV9udW0gIT0gMCkpIHsKIAkJcHJpdi0+cGh5X251bSA9IDA7Ci0JCXRsYW5fc2V0X3RpbWVyKGRldiwgKDQwMCpIWi8xMDAwKSwgVExBTl9USU1FUl9QSFlfUERPV04pOworCQl0bGFuX3NldF90aW1lcihkZXYsIG1zZWNzX3RvX2ppZmZpZXMoNDAwKSwgVExBTl9USU1FUl9QSFlfUERPV04pOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNzQ0LDcgKzI3NDQsNyBAQAogCiAJLyogV2FpdCBmb3IgMTAwIG1zLiAgTm8gcmVhc29uIGluIHBhcnRpdGljdWxhci4KIAkgKi8KLQl0bGFuX3NldF90aW1lcihkZXYsIChIWi8xMCksIFRMQU5fVElNRVJfRklOSVNIX1JFU0VUKTsKKwl0bGFuX3NldF90aW1lcihkZXYsIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSwgVExBTl9USU1FUl9GSU5JU0hfUkVTRVQpOwogCiB9CiAKQEAgLTI3OTYsNyArMjc5Niw3IEBACiAJCQkJLyogc2V0IHRvIGV4dGVybmFsIFBIWSAqLwogCQkJCXByaXYtPnBoeV9udW0gPSAxOwogCQkJCS8qIHJlc3RhcnQgYXV0b25lZ290aWF0aW9uICovCi0JCQkJdGxhbl9zZXRfdGltZXIoZGV2LCA0ICogSFogLyAxMCwKKwkJCQl0bGFuX3NldF90aW1lcihkZXYsIG1zZWNzX3RvX2ppZmZpZXMoNDAwKSwKIAkJCQkJICAgICAgIFRMQU5fVElNRVJfUEhZX1BET1dOKTsKIAkJCQlyZXR1cm47CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvdmlhLXJoaW5lLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvdmlhLXJoaW5lLmMKaW5kZXggYTE5MWFmYy4uMTdlMjc2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdmlhL3ZpYS1yaGluZS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3ZpYS92aWEtcmhpbmUuYwpAQCAtMTMyNiw3ICsxMzI2LDggQEAKIAlzdHJ1Y3QgcmhpbmVfcHJpdmF0ZSAqcnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gcnAtPmJhc2U7CiAKLQltaWlfY2hlY2tfbWVkaWEoJnJwLT5taWlfaWYsIG5ldGlmX21zZ19saW5rKHJwKSwgaW5pdF9tZWRpYSk7CisJaWYgKCFycC0+bWlpX2lmLmZvcmNlX21lZGlhKQorCQltaWlfY2hlY2tfbWVkaWEoJnJwLT5taWlfaWYsIG5ldGlmX21zZ19saW5rKHJwKSwgaW5pdF9tZWRpYSk7CiAKIAlpZiAocnAtPm1paV9pZi5mdWxsX2R1cGxleCkKIAkgICAgaW93cml0ZTgoaW9yZWFkOChpb2FkZHIgKyBDaGlwQ21kMSkgfCBDbWQxRkR1cGxleCwKQEAgLTE3ODEsOCArMTc4Miw4IEBACiAJcnAtPnR4X3JpbmdbZW50cnldLmRlc2NfbGVuZ3RoID0KIAkJY3B1X3RvX2xlMzIoVFhERVNDIHwgKHNrYi0+bGVuID49IEVUSF9aTEVOID8gc2tiLT5sZW4gOiBFVEhfWkxFTikpOwogCi0JaWYgKHVubGlrZWx5KHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkpIHsKLQkJdTE2IHZpZF9wY3AgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwlpZiAodW5saWtlbHkoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkpIHsKKwkJdTE2IHZpZF9wY3AgPSBza2Jfdmxhbl90YWdfZ2V0KHNrYik7CiAKIAkJLyogZHJvcCBDRkkvREVJIGJpdCwgcmVnaXN0ZXIgbmVlZHMgVklEIGFuZCBQQ1AgKi8KIAkJdmlkX3BjcCA9ICh2aWRfcGNwICYgVkxBTl9WSURfTUFTSykgfApAQCAtMTgwMyw3ICsxODA0LDcgQEAKIAogCS8qIE5vbi14ODYgVG9kbzogZXhwbGljaXRseSBmbHVzaCBjYWNoZSBsaW5lcyBoZXJlLiAqLwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkKIAkJLyogVHggcXVldWVzIGFyZSBiaXRzIDctMCAoZmlyc3QgVHggcXVldWU6IGJpdCA3KSAqLwogCQlCWVRFX1JFR19CSVRTX09OKDEgPDwgNywgaW9hZGRyICsgVFFXYWtlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvdmlhL3ZpYS12ZWxvY2l0eS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvdmlhL3ZpYS12ZWxvY2l0eS5jCmluZGV4IDI4MmY4M2EuLmMyMDIwNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3ZpYS92aWEtdmVsb2NpdHkuYworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC92aWEvdmlhLXZlbG9jaXR5LmMKQEAgLTI2MTEsOCArMjYxMSw4IEBACiAKIAl0ZF9wdHItPnRkZXNjMS5jbWQgPSBUQ1BMU19OT1JNQUwgKyAodGRpbmZvLT5uc2tiX2RtYSArIDEpICogMTY7CiAKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCXRkX3B0ci0+dGRlc2MxLnZsYW4gPSBjcHVfdG9fbGUxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKKwkJdGRfcHRyLT50ZGVzYzEudmxhbiA9IGNwdV90b19sZTE2KHNrYl92bGFuX3RhZ19nZXQoc2tiKSk7CiAJCXRkX3B0ci0+dGRlc2MxLlRDUiB8PSBUQ1IwX1ZFVEFHOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmRkaS9za2ZwL3NtdC5jIGIvZHJpdmVycy9uZXQvZmRkaS9za2ZwL3NtdC5jCmluZGV4IDllZGFkYTguLmNkNzhiN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZkZGkvc2tmcC9zbXQuYworKysgYi9kcml2ZXJzL25ldC9mZGRpL3NrZnAvc210LmMKQEAgLTE3MzYsMTggKzE3MzYsNiBAQAogfQogI2VuZGlmCiAKLSNpZmRlZglBTTI5SwotaW50IHNtdF9pZmNvbmZpZyhpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCWlmIChhcmdjID49IDIgJiYgIXN0cmNtcChhcmd2WzBdLCJvcHRfYnlwYXNzIikgJiYKLQkgICAgIXN0cmNtcChhcmd2WzFdLCJ5ZXMiKSkgewotCQlzbWMtPm1pYi5mZGRpU01UQnlwYXNzUHJlc2VudCA9IDEgOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIGFtZGZkZGlfY29uZmlnKDAsIGFyZ2MsIGFyZ3YpOwotfQotI2VuZGlmCi0KIC8qCiAgKiByZXR1cm4gc3RhdGljIG1hYyBpbmRleAogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMgYi9kcml2ZXJzL25ldC9oeXBlcnYvbmV0dnNjLmMKaW5kZXggOWY0OWMwMS4uMjA4ZWIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHlwZXJ2L25ldHZzYy5jCisrKyBiL2RyaXZlcnMvbmV0L2h5cGVydi9uZXR2c2MuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiBzdGF0aWMgaW50IG5ldHZzY19pbml0X2J1ZihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2UpCiB7CiAJaW50IHJldCA9IDA7Ci0JaW50IHQ7CisJdW5zaWduZWQgbG9uZyB0OwogCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlOwogCXN0cnVjdCBudnNwX21lc3NhZ2UgKmluaXRfcGFja2V0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwpAQCAtNDA5LDcgKzQwOSw4IEBACiAJCQkgICAgICBzdHJ1Y3QgbnZzcF9tZXNzYWdlICppbml0X3BhY2tldCwKIAkJCSAgICAgIHUzMiBudnNwX3ZlcikKIHsKLQlpbnQgcmV0LCB0OworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyB0OwogCiAJbWVtc2V0KGluaXRfcGFja2V0LCAwLCBzaXplb2Yoc3RydWN0IG52c3BfbWVzc2FnZSkpOwogCWluaXRfcGFja2V0LT5oZHIubXNnX3R5cGUgPSBOVlNQX01TR19UWVBFX0lOSVQ7CkBAIC02ODQsOSArNjg1LDkgQEAKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIAotdTMyIG5ldHZzY19jb3B5X3RvX3NlbmRfYnVmKHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlLAotCQkJICAgIHVuc2lnbmVkIGludCBzZWN0aW9uX2luZGV4LAotCQkJICAgIHN0cnVjdCBodl9uZXR2c2NfcGFja2V0ICpwYWNrZXQpCitzdGF0aWMgdTMyIG5ldHZzY19jb3B5X3RvX3NlbmRfYnVmKHN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXRfZGV2aWNlLAorCQkJCSAgIHVuc2lnbmVkIGludCBzZWN0aW9uX2luZGV4LAorCQkJCSAgIHN0cnVjdCBodl9uZXR2c2NfcGFja2V0ICpwYWNrZXQpCiB7CiAJY2hhciAqc3RhcnQgPSBuZXRfZGV2aWNlLT5zZW5kX2J1ZjsKIAljaGFyICpkZXN0ID0gKHN0YXJ0ICsgKHNlY3Rpb25faW5kZXggKiBuZXRfZGV2aWNlLT5zZW5kX3NlY3Rpb25fc2l6ZSkpOwpAQCAtNzE2LDcgKzcxNyw3IEBACiAJdTY0IHJlcV9pZDsKIAl1bnNpZ25lZCBpbnQgc2VjdGlvbl9pbmRleCA9IE5FVFZTQ19JTlZBTElEX0lOREVYOwogCXUzMiBtc2dfc2l6ZSA9IDA7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAl1MTYgcV9pZHggPSBwYWNrZXQtPnFfaWR4OwogCiAKQEAgLTc0Myw4ICs3NDQsNiBAQAogCQkJCQkJCSAgIHBhY2tldCk7CiAJCQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikKIAkJCSAgICAgICh1bnNpZ25lZCBsb25nKXBhY2tldC0+c2VuZF9jb21wbGV0aW9uX3RpZDsKLQkJCWlmIChza2IpCi0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCXBhY2tldC0+cGFnZV9idWZfY250ID0gMDsKIAkJfQogCX0KQEAgLTgxMCw2ICs4MDksMTMgQEAKIAkJCSAgIHBhY2tldCwgcmV0KTsKIAl9CiAKKwlpZiAocmV0ICE9IDApIHsKKwkJaWYgKHNlY3Rpb25faW5kZXggIT0gTkVUVlNDX0lOVkFMSURfSU5ERVgpCisJCQluZXR2c2NfZnJlZV9zZW5kX3Nsb3QobmV0X2RldmljZSwgc2VjdGlvbl9pbmRleCk7CisJfSBlbHNlIGlmIChza2IpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwl9CisKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oeXBlcnYvcm5kaXNfZmlsdGVyLmMgYi9kcml2ZXJzL25ldC9oeXBlcnYvcm5kaXNfZmlsdGVyLmMKaW5kZXggZWMwYzQwYS4uNzgxNmQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHlwZXJ2L3JuZGlzX2ZpbHRlci5jCisrKyBiL2RyaXZlcnMvbmV0L2h5cGVydi9ybmRpc19maWx0ZXIuYwpAQCAtNDcwLDcgKzQ3MCw3IEBACiAJc3RydWN0IHJuZGlzX3F1ZXJ5X3JlcXVlc3QgKnF1ZXJ5OwogCXN0cnVjdCBybmRpc19xdWVyeV9jb21wbGV0ZSAqcXVlcnlfY29tcGxldGU7CiAJaW50IHJldCA9IDA7Ci0JaW50IHQ7CisJdW5zaWduZWQgbG9uZyB0OwogCiAJaWYgKCFyZXN1bHQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTYwLDcgKzU2MCw4IEBACiAJY2hhciBtYWNzdHJbMipFVEhfQUxFTisxXTsKIAl1MzIgZXh0bGVuID0gc2l6ZW9mKHN0cnVjdCBybmRpc19jb25maWdfcGFyYW1ldGVyX2luZm8pICsKIAkJMipOV0FEUl9TVFJMRU4gKyA0KkVUSF9BTEVOOwotCWludCByZXQsIHQ7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHQ7CiAKIAlyZXF1ZXN0ID0gZ2V0X3JuZGlzX3JlcXVlc3QocmRldiwgUk5ESVNfTVNHX1NFVCwKIAkJUk5ESVNfTUVTU0FHRV9TSVpFKHN0cnVjdCBybmRpc19zZXRfcmVxdWVzdCkgKyBleHRsZW4pOwpAQCAtNjIzLDcgKzYyNCw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHJuZGlzX2ZpbHRlcl9zZXRfb2ZmbG9hZF9wYXJhbXMoc3RydWN0IGh2X2RldmljZSAqaGRldiwKK3N0YXRpYyBpbnQKK3JuZGlzX2ZpbHRlcl9zZXRfb2ZmbG9hZF9wYXJhbXMoc3RydWN0IGh2X2RldmljZSAqaGRldiwKIAkJCQlzdHJ1Y3QgbmRpc19vZmZsb2FkX3BhcmFtcyAqcmVxX29mZmxvYWRzKQogewogCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpudmRldiA9IGh2X2dldF9kcnZkYXRhKGhkZXYpOwpAQCAtNjM0LDcgKzYzNiw4IEBACiAJc3RydWN0IG5kaXNfb2ZmbG9hZF9wYXJhbXMgKm9mZmxvYWRfcGFyYW1zOwogCXN0cnVjdCBybmRpc19zZXRfY29tcGxldGUgKnNldF9jb21wbGV0ZTsKIAl1MzIgZXh0bGVuID0gc2l6ZW9mKHN0cnVjdCBuZGlzX29mZmxvYWRfcGFyYW1zKTsKLQlpbnQgcmV0LCB0OworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyB0OwogCXUzMiB2c3BfdmVyc2lvbiA9IG52ZGV2LT5udnNwX3ZlcnNpb247CiAKIAlpZiAodnNwX3ZlcnNpb24gPD0gTlZTUF9QUk9UT0NPTF9WRVJTSU9OXzQpIHsKQEAgLTY5Nyw3ICs3MDAsNyBAQAogCTB4NmEsIDB4NDIsIDB4YjcsIDB4M2IsIDB4YmUsIDB4YWMsIDB4MDEsIDB4ZmEKIH07CiAKLWludCBybmRpc19maWx0ZXJfc2V0X3Jzc19wYXJhbShzdHJ1Y3Qgcm5kaXNfZGV2aWNlICpyZGV2LCBpbnQgbnVtX3F1ZXVlKQorc3RhdGljIGludCBybmRpc19maWx0ZXJfc2V0X3Jzc19wYXJhbShzdHJ1Y3Qgcm5kaXNfZGV2aWNlICpyZGV2LCBpbnQgbnVtX3F1ZXVlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcmRldi0+bmV0X2Rldi0+bmRldjsKIAlzdHJ1Y3Qgcm5kaXNfcmVxdWVzdCAqcmVxdWVzdDsKQEAgLTcwOCw3ICs3MTEsOCBAQAogCXN0cnVjdCBuZGlzX3JlY3Zfc2NhbGVfcGFyYW0gKnJzc3A7CiAJdTMyICppdGFiOwogCXU4ICprZXlwOwotCWludCBpLCB0LCByZXQ7CisJaW50IGksIHJldDsKKwl1bnNpZ25lZCBsb25nIHQ7CiAKIAlyZXF1ZXN0ID0gZ2V0X3JuZGlzX3JlcXVlc3QoCiAJCQlyZGV2LCBSTkRJU19NU0dfU0VULApAQCAtNzkyLDcgKzc5Niw4IEBACiAJc3RydWN0IHJuZGlzX3NldF9yZXF1ZXN0ICpzZXQ7CiAJc3RydWN0IHJuZGlzX3NldF9jb21wbGV0ZSAqc2V0X2NvbXBsZXRlOwogCXUzMiBzdGF0dXM7Ci0JaW50IHJldCwgdDsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgdDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAogCW5kZXYgPSBkZXYtPm5ldF9kZXYtPm5kZXY7CkBAIC04NDgsNyArODUzLDggQEAKIAlzdHJ1Y3Qgcm5kaXNfaW5pdGlhbGl6ZV9yZXF1ZXN0ICppbml0OwogCXN0cnVjdCBybmRpc19pbml0aWFsaXplX2NvbXBsZXRlICppbml0X2NvbXBsZXRlOwogCXUzMiBzdGF0dXM7Ci0JaW50IHJldCwgdDsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgdDsKIAogCXJlcXVlc3QgPSBnZXRfcm5kaXNfcmVxdWVzdChkZXYsIFJORElTX01TR19JTklULAogCQkJUk5ESVNfTUVTU0FHRV9TSVpFKHN0cnVjdCBybmRpc19pbml0aWFsaXplX3JlcXVlc3QpKTsKQEAgLTk5OCw3ICsxMDA0LDcgQEAKIAlzdHJ1Y3QgbmV0dnNjX2RldmljZV9pbmZvICpkZXZpY2VfaW5mbyA9IGFkZGl0aW9uYWxfaW5mbzsKIAlzdHJ1Y3QgbmRpc19vZmZsb2FkX3BhcmFtcyBvZmZsb2FkczsKIAlzdHJ1Y3QgbnZzcF9tZXNzYWdlICppbml0X3BhY2tldDsKLQlpbnQgdDsKKwl1bnNpZ25lZCBsb25nIHQ7CiAJc3RydWN0IG5kaXNfcmVjdl9zY2FsZV9jYXAgcnNzY2FwOwogCXUzMiByc3NjYXBfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbmRpc19yZWN2X3NjYWxlX2NhcCk7CiAJdTMyIG10dSwgc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvYXQ4NnJmMjMwLmMgYi9kcml2ZXJzL25ldC9pZWVlODAyMTU0L2F0ODZyZjIzMC5jCmluZGV4IDFjMDEzNTYuLjdiMDUxZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvYXQ4NnJmMjMwLmMKKysrIGIvZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9hdDg2cmYyMzAuYwpAQCAtNDI3LDcgKzQyNyw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgYXQ4NnJmMjMwX3JlZ21hcF9zcGlfY29uZmlnID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGF0ODZyZjIzMF9yZWdtYXBfc3BpX2NvbmZpZyA9IHsKIAkucmVnX2JpdHMgPSA4LAogCS52YWxfYml0cyA9IDgsCiAJLndyaXRlX2ZsYWdfbWFzayA9IENNRF9SRUcgfCBDTURfV1JJVEUsCkBAIC00NTAsNyArNDUwLDcgQEAKIAlpZWVlODAyMTU0X3dha2VfcXVldWUobHAtPmh3KTsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbmxpbmUgdm9pZAogYXQ4NnJmMjMwX2FzeW5jX2Vycm9yKHN0cnVjdCBhdDg2cmYyMzBfbG9jYWwgKmxwLAogCQkgICAgICBzdHJ1Y3QgYXQ4NnJmMjMwX3N0YXRlX2NoYW5nZSAqY3R4LCBpbnQgcmMpCiB7CkBAIC01MjQsNyArNTI0LDYgQEAKIAkJCX0KIAkJfQogCi0KIAkJZGV2X3dhcm4oJmxwLT5zcGktPmRldiwgInVuZXhjZXB0IHN0YXRlIGNoYW5nZSBmcm9tIDB4JTAyeCB0byAweCUwMnguIEFjdHVhbCBzdGF0ZTogMHglMDJ4XG4iLAogCQkJIGN0eC0+ZnJvbV9zdGF0ZSwgY3R4LT50b19zdGF0ZSwgdHJ4X3N0YXRlKTsKIAl9CkBAIC02NTUsNyArNjU0LDcgQEAKIAkJaWYgKGN0eC0+aXJxX2VuYWJsZSkKIAkJCWVuYWJsZV9pcnEobHAtPnNwaS0+aXJxKTsKIAotCQlhdDg2cmYyMzBfYXN5bmNfZXJyb3IobHAsICZscC0+c3RhdGUsIHJjKTsKKwkJYXQ4NnJmMjMwX2FzeW5jX2Vycm9yKGxwLCBjdHgsIHJjKTsKIAl9CiB9CiAKQEAgLTcxNSwxMCArNzE0LDcgQEAKIAogCWVuYWJsZV9pcnEobHAtPnNwaS0+aXJxKTsKIAotCWlmIChscC0+bWF4X2ZyYW1lX3JldHJpZXMgPD0gMCkKLQkJaWVlZTgwMjE1NF94bWl0X2NvbXBsZXRlKGxwLT5odywgc2tiLCB0cnVlKTsKLQllbHNlCi0JCWllZWU4MDIxNTRfeG1pdF9jb21wbGV0ZShscC0+aHcsIHNrYiwgZmFsc2UpOworCWllZWU4MDIxNTRfeG1pdF9jb21wbGV0ZShscC0+aHcsIHNrYiwgIWxwLT50eF9hcmV0KTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTc1MywxNiArNzQ5LDEzIEBACiAJICogdG8gU1RBVEVfRk9SQ0VfVFJYX09GRiB0aGVuIFNUQVRFX1RYX09OIHRvIHJlY292ZXIgdGhlIHRyYW5zY2VpdmVyCiAJICogc3RhdGUgdG8gVFhfT04uCiAJICovCi0JaWYgKHRyYWMpIHsKKwlpZiAodHJhYykKIAkJYXQ4NnJmMjMwX2FzeW5jX3N0YXRlX2NoYW5nZShscCwgY3R4LCBTVEFURV9GT1JDRV9UUlhfT0ZGLAogCQkJCQkgICAgIGF0ODZyZjIzMF90eF90cmFjX2Vycm9yLCB0cnVlKTsKLQkJcmV0dXJuOwotCX0KLQotCWF0ODZyZjIzMF90eF9vbihjb250ZXh0KTsKKwllbHNlCisJCWF0ODZyZjIzMF90eF9vbihjb250ZXh0KTsKIH0KIAotCiBzdGF0aWMgdm9pZAogYXQ4NnJmMjMwX3R4X3RyYWNfc3RhdHVzKHZvaWQgKmNvbnRleHQpCiB7CkBAIC0xMDgyLDcgKzEwNzUsNyBAQAogCQl1MTYgYWRkciA9IGxlMTZfdG9fY3B1KGZpbHQtPnNob3J0X2FkZHIpOwogCiAJCWRldl92ZGJnKCZscC0+c3BpLT5kZXYsCi0JCQkiYXQ4NnJmMjMwX3NldF9od19hZGRyX2ZpbHQgY2FsbGVkIGZvciBzYWRkclxuIik7CisJCQkgImF0ODZyZjIzMF9zZXRfaHdfYWRkcl9maWx0IGNhbGxlZCBmb3Igc2FkZHJcbiIpOwogCQlfX2F0ODZyZjIzMF93cml0ZShscCwgUkdfU0hPUlRfQUREUl8wLCBhZGRyKTsKIAkJX19hdDg2cmYyMzBfd3JpdGUobHAsIFJHX1NIT1JUX0FERFJfMSwgYWRkciA+PiA4KTsKIAl9CkBAIC0xMDkxLDcgKzEwODQsNyBAQAogCQl1MTYgcGFuID0gbGUxNl90b19jcHUoZmlsdC0+cGFuX2lkKTsKIAogCQlkZXZfdmRiZygmbHAtPnNwaS0+ZGV2LAotCQkJImF0ODZyZjIzMF9zZXRfaHdfYWRkcl9maWx0IGNhbGxlZCBmb3IgcGFuIGlkXG4iKTsKKwkJCSAiYXQ4NnJmMjMwX3NldF9od19hZGRyX2ZpbHQgY2FsbGVkIGZvciBwYW4gaWRcbiIpOwogCQlfX2F0ODZyZjIzMF93cml0ZShscCwgUkdfUEFOX0lEXzAsIHBhbik7CiAJCV9fYXQ4NnJmMjMwX3dyaXRlKGxwLCBSR19QQU5fSURfMSwgcGFuID4+IDgpOwogCX0KQEAgLTExMDEsMTQgKzEwOTQsMTQgQEAKIAogCQltZW1jcHkoYWRkciwgJmZpbHQtPmllZWVfYWRkciwgOCk7CiAJCWRldl92ZGJnKCZscC0+c3BpLT5kZXYsCi0JCQkiYXQ4NnJmMjMwX3NldF9od19hZGRyX2ZpbHQgY2FsbGVkIGZvciBJRUVFIGFkZHJcbiIpOworCQkJICJhdDg2cmYyMzBfc2V0X2h3X2FkZHJfZmlsdCBjYWxsZWQgZm9yIElFRUUgYWRkclxuIik7CiAJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiAJCQlfX2F0ODZyZjIzMF93cml0ZShscCwgUkdfSUVFRV9BRERSXzAgKyBpLCBhZGRyW2ldKTsKIAl9CiAKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxNTRfQUZJTFRfUEFOQ19DSEFOR0VEKSB7CiAJCWRldl92ZGJnKCZscC0+c3BpLT5kZXYsCi0JCQkiYXQ4NnJmMjMwX3NldF9od19hZGRyX2ZpbHQgY2FsbGVkIGZvciBwYW5jIGNoYW5nZVxuIik7CisJCQkgImF0ODZyZjIzMF9zZXRfaHdfYWRkcl9maWx0IGNhbGxlZCBmb3IgcGFuYyBjaGFuZ2VcbiIpOwogCQlpZiAoZmlsdC0+cGFuX2Nvb3JkKQogCQkJYXQ4NnJmMjMwX3dyaXRlX3N1YnJlZyhscCwgU1JfQUFDS19JX0FNX0NPT1JELCAxKTsKIAkJZWxzZQpAQCAtMTE0NiwxMSArMTEzOSwzNyBAQAogfQogCiBzdGF0aWMgaW50Ci1hdDg2cmYyMzBfc2V0X2NjYV9tb2RlKHN0cnVjdCBpZWVlODAyMTU0X2h3ICpodywgdTggbW9kZSkKK2F0ODZyZjIzMF9zZXRfY2NhX21vZGUoc3RydWN0IGllZWU4MDIxNTRfaHcgKmh3LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHdwYW5fcGh5X2NjYSAqY2NhKQogewogCXN0cnVjdCBhdDg2cmYyMzBfbG9jYWwgKmxwID0gaHctPnByaXY7CisJdTggdmFsOwogCi0JcmV0dXJuIGF0ODZyZjIzMF93cml0ZV9zdWJyZWcobHAsIFNSX0NDQV9NT0RFLCBtb2RlKTsKKwkvKiBtYXBwaW5nIDgwMi4xNS40IHRvIGRyaXZlciBzcGVjICovCisJc3dpdGNoIChjY2EtPm1vZGUpIHsKKwljYXNlIE5MODAyMTU0X0NDQV9FTkVSR1k6CisJCXZhbCA9IDE7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxNTRfQ0NBX0NBUlJJRVI6CisJCXZhbCA9IDI7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxNTRfQ0NBX0VORVJHWV9DQVJSSUVSOgorCQlzd2l0Y2ggKGNjYS0+b3B0KSB7CisJCWNhc2UgTkw4MDIxNTRfQ0NBX09QVF9FTkVSR1lfQ0FSUklFUl9BTkQ6CisJCQl2YWwgPSAzOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxNTRfQ0NBX09QVF9FTkVSR1lfQ0FSUklFUl9PUjoKKwkJCXZhbCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBhdDg2cmYyMzBfd3JpdGVfc3VicmVnKGxwLCBTUl9DQ0FfTU9ERSwgdmFsKTsKIH0KIAogc3RhdGljIGludApAQCAtMTQwMCw3ICsxNDE5LDcgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAotCXJjID0gX19hdDg2cmYyMzBfcmVhZChscCwgUkdfUEFSVF9OVU0sICZ2ZXJzaW9uKTsKKwlyYyA9IF9fYXQ4NnJmMjMwX3JlYWQobHAsIFJHX1ZFUlNJT05fTlVNLCAmdmVyc2lvbik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTE0MTAsMTEgKzE0MjksMTIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JbHAtPmh3LT5leHRyYV90eF9oZWFkcm9vbSA9IDA7CiAJbHAtPmh3LT5mbGFncyA9IElFRUU4MDIxNTRfSFdfVFhfT01JVF9DS1NVTSB8IElFRUU4MDIxNTRfSFdfQUFDSyB8CiAJCQlJRUVFODAyMTU0X0hXX1RYUE9XRVIgfCBJRUVFODAyMTU0X0hXX0FSRVQgfAogCQkJSUVFRTgwMjE1NF9IV19BRklMVCB8IElFRUU4MDIxNTRfSFdfUFJPTUlTQ1VPVVM7CiAKKwlscC0+aHctPnBoeS0+Y2NhLm1vZGUgPSBOTDgwMjE1NF9DQ0FfRU5FUkdZOworCiAJc3dpdGNoIChwYXJ0KSB7CiAJY2FzZSAyOgogCQljaGlwID0gImF0ODZyZjIzMCI7CkBAIC0xNDI5LDE2ICsxNDQ5LDEyIEBACiAJCWJyZWFrOwogCWNhc2UgNzoKIAkJY2hpcCA9ICJhdDg2cmYyMTIiOwotCQlpZiAodmVyc2lvbiA9PSAxKSB7Ci0JCQlscC0+ZGF0YSA9ICZhdDg2cmYyMTJfZGF0YTsKLQkJCWxwLT5ody0+ZmxhZ3MgfD0gSUVFRTgwMjE1NF9IV19MQlQ7Ci0JCQlscC0+aHctPnBoeS0+Y2hhbm5lbHNfc3VwcG9ydGVkWzBdID0gMHgwMDAwN0ZGOwotCQkJbHAtPmh3LT5waHktPmNoYW5uZWxzX3N1cHBvcnRlZFsyXSA9IDB4MDAwMDdGRjsKLQkJCWxwLT5ody0+cGh5LT5jdXJyZW50X2NoYW5uZWwgPSA1OwotCQkJbHAtPmh3LT5waHktPnN5bWJvbF9kdXJhdGlvbiA9IDI1OwotCQl9IGVsc2UgewotCQkJcmMgPSAtRU5PVFNVUFA7Ci0JCX0KKwkJbHAtPmRhdGEgPSAmYXQ4NnJmMjEyX2RhdGE7CisJCWxwLT5ody0+ZmxhZ3MgfD0gSUVFRTgwMjE1NF9IV19MQlQ7CisJCWxwLT5ody0+cGh5LT5jaGFubmVsc19zdXBwb3J0ZWRbMF0gPSAweDAwMDA3RkY7CisJCWxwLT5ody0+cGh5LT5jaGFubmVsc19zdXBwb3J0ZWRbMl0gPSAweDAwMDA3RkY7CisJCWxwLT5ody0+cGh5LT5jdXJyZW50X2NoYW5uZWwgPSA1OworCQlscC0+aHctPnBoeS0+c3ltYm9sX2R1cmF0aW9uID0gMjU7CiAJCWJyZWFrOwogCWNhc2UgMTE6CiAJCWNoaXAgPSAiYXQ4NnJmMjMzIjsKQEAgLTE0NDgsNyArMTQ2NCw3IEBACiAJCWxwLT5ody0+cGh5LT5zeW1ib2xfZHVyYXRpb24gPSAxNjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJY2hpcCA9ICJ1bmtvd24iOworCQljaGlwID0gInVua25vd24iOwogCQlyYyA9IC1FTk9UU1VQUDsKIAkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9jYzI1MjAuYyBiL2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvY2MyNTIwLmMKaW5kZXggZjlkZjlmYS4uMTgxYjM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9jYzI1MjAuYworKysgYi9kcml2ZXJzL25ldC9pZWVlODAyMTU0L2NjMjUyMC5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTU0Lmg+CiAKQEAgLTQ1LDkgKzQ0LDkgQEAKICNkZWZpbmUJQ0MyNTIwX0ZSRUdfTUFTSwkweDNGCiAKIC8qIHN0YXR1cyBieXRlIHZhbHVlcyAqLwotI2RlZmluZQlDQzI1MjBfU1RBVFVTX1hPU0MzMk1fU1RBQkxFCSgxIDw8IDcpCi0jZGVmaW5lCUNDMjUyMF9TVEFUVVNfUlNTSV9WQUxJRAkoMSA8PCA2KQotI2RlZmluZQlDQzI1MjBfU1RBVFVTX1RYX1VOREVSRkxPVwkoMSA8PCAzKQorI2RlZmluZQlDQzI1MjBfU1RBVFVTX1hPU0MzMk1fU1RBQkxFCUJJVCg3KQorI2RlZmluZQlDQzI1MjBfU1RBVFVTX1JTU0lfVkFMSUQJQklUKDYpCisjZGVmaW5lCUNDMjUyMF9TVEFUVVNfVFhfVU5ERVJGTE9XCUJJVCgzKQogCiAvKiBJRUVFLTgwMi4xNS40IGRlZmluZWQgY29uc3RhbnRzICgyLjQgR0h6IGxvZ2ljYWwgY2hhbm5lbHMpICovCiAjZGVmaW5lCUNDMjUyMF9NSU5DSEFOTkVMCQkxMQpAQCAtNTEzLDcgKzUxMiw2IEBACiAJcmV0dXJuIHJjOwogfQogCi0KIHN0YXRpYyBpbnQgY2MyNTIwX3J4KHN0cnVjdCBjYzI1MjBfcHJpdmF0ZSAqcHJpdikKIHsKIAl1OCBsZW4gPSAwLCBscWkgPSAwLCBieXRlcyA9IDE7CkBAIC01NTEsMTQgKzU0OSwxNCBAQAogCXU4IHJzc2k7CiAJaW50IHJldDsKIAotCXJldCA9IGNjMjUyMF9yZWFkX3JlZ2lzdGVyKHByaXYgLCBDQzI1MjBfUlNTSVNUQVQsICZzdGF0dXMpOworCXJldCA9IGNjMjUyMF9yZWFkX3JlZ2lzdGVyKHByaXYsIENDMjUyMF9SU1NJU1RBVCwgJnN0YXR1cyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCWlmIChzdGF0dXMgIT0gUlNTSV9WQUxJRCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBjYzI1MjBfcmVhZF9yZWdpc3Rlcihwcml2ICwgQ0MyNTIwX1JTU0ksICZyc3NpKTsKKwlyZXQgPSBjYzI1MjBfcmVhZF9yZWdpc3Rlcihwcml2LCBDQzI1MjBfUlNTSSwgJnJzc2kpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTY1Miw2ICs2NTAsNyBAQAogCXByaXYtPmh3LT5wYXJlbnQgPSAmcHJpdi0+c3BpLT5kZXY7CiAJcHJpdi0+aHctPmV4dHJhX3R4X2hlYWRyb29tID0gMDsKIAlwcml2LT5ody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZigqcHJpdik7CisJaWVlZTgwMjE1NF9yYW5kb21fZXh0ZW5kZWRfYWRkcigmcHJpdi0+aHctPnBoeS0+cGVybV9leHRlbmRlZF9hZGRyKTsKIAogCS8qIFdlIGRvIHN1cHBvcnQgb25seSAyLjQgR2h6ICovCiAJcHJpdi0+aHctPnBoeS0+Y2hhbm5lbHNfc3VwcG9ydGVkWzBdID0gMHg3RkZGODAwOwpAQCAtODQyLDI0ICs4NDEsMTUgQEAKIHN0YXRpYyBpbnQgY2MyNTIwX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IGNjMjUyMF9wcml2YXRlICpwcml2OwotCXN0cnVjdCBwaW5jdHJsICpwaW5jdHJsOwogCXN0cnVjdCBjYzI1MjBfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAJaW50IHJldDsKIAotCXByaXYgPSBkZXZtX2t6YWxsb2MoJnNwaS0+ZGV2LAotCQkJICAgIHNpemVvZihzdHJ1Y3QgY2MyNTIwX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfcmV0OwotCX0KKwlwcml2ID0gZGV2bV9remFsbG9jKCZzcGktPmRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaV9zZXRfZHJ2ZGF0YShzcGksIHByaXYpOwogCi0JcGluY3RybCA9IGRldm1fcGluY3RybF9nZXRfc2VsZWN0X2RlZmF1bHQoJnNwaS0+ZGV2KTsKLQlpZiAoSVNfRVJSKHBpbmN0cmwpKQotCQlkZXZfd2Fybigmc3BpLT5kZXYsCi0JCQkgInBpbmN0cmwgcGlucyBhcmUgbm90IGNvbmZpZ3VyZWRcbiIpOwotCiAJcGRhdGEgPSBjYzI1MjBfZ2V0X3BsYXRmb3JtX2RhdGEoc3BpKTsKIAlpZiAoIXBkYXRhKSB7CiAJCWRldl9lcnIoJnNwaS0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YVxuIik7CkBAIC04NzAsMTAgKzg2MCw4IEBACiAKIAlwcml2LT5idWYgPSBkZXZtX2t6YWxsb2MoJnNwaS0+ZGV2LAogCQkJCSBTUElfQ09NTUFORF9CVUZGRVIsIEdGUF9LRVJORUwpOwotCWlmICghcHJpdi0+YnVmKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3JldDsKLQl9CisJaWYgKCFwcml2LT5idWYpCisJCXJldHVybiAtRU5PTUVNOwogCiAJbXV0ZXhfaW5pdCgmcHJpdi0+YnVmZmVyX211dGV4KTsKIAlJTklUX1dPUksoJnByaXYtPmZpZm9wX2lycXdvcmssIGNjMjUyMF9maWZvcF9pcnF3b3JrKTsKQEAgLTk0Nyw3ICs5MzUsNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2h3X2luaXQ7CiAKLQogCWdwaW9fc2V0X3ZhbHVlKHBkYXRhLT52cmVnLCBISUdIKTsKIAl1c2xlZXBfcmFuZ2UoMTAwLCAxNTApOwogCkBAIC05OTEsOCArOTc4LDYgQEAKIGVycl9od19pbml0OgogCW11dGV4X2Rlc3Ryb3koJnByaXYtPmJ1ZmZlcl9tdXRleCk7CiAJZmx1c2hfd29yaygmcHJpdi0+Zmlmb3BfaXJxd29yayk7Ci0KLWVycl9yZXQ6CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tcmYyNGo0MC5jIGIvZHJpdmVycy9uZXQvaWVlZTgwMjE1NC9tcmYyNGo0MC5jCmluZGV4IGEyMDBmYTEuLmZiYTJkZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2llZWU4MDIxNTQvbXJmMjRqNDAuYworKysgYi9kcml2ZXJzL25ldC9pZWVlODAyMTU0L21yZjI0ajQwLmMKQEAgLTI4OSw3ICsyODksNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIFJhbmdlIGNoZWNrIHRoZSBSWCBGSUZPIGxlbmd0aCwgYWNjb3VudGluZyBmb3IgdGhlIG9uZS1ieXRlCi0JICogbGVuZ3RoIGZpZWxkIGF0IHRoZSBiZWdpbmluZy4gKi8KKwkgKiBsZW5ndGggZmllbGQgYXQgdGhlIGJlZ2lubmluZy4gKi8KIAlpZiAocnhfbGVuID4gUlhfRklGT19TSVpFLTEpIHsKIAkJZGV2X2VycihwcmludGRldihkZXZyZWMpLCAiSW52YWxpZCBsZW5ndGggcmVhZCBmcm9tIGRldmljZS4gUGVyZm9ybWluZyBzaG9ydCByZWFkLlxuIik7CiAJCXJ4X2xlbiA9IFJYX0ZJRk9fU0laRS0xOwpAQCAtMzIzLDcgKzMyMyw3IEBACiAKICNpZmRlZiBERUJVRwogCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJtcmYyNGo0MCByeDogIiwKLQkJRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwgZGF0YSwgKmxlbiwgMCk7CisJCSAgICAgICBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLCBkYXRhLCAqbGVuLCAwKTsKIAlwcl9kZWJ1ZygibXJmMjRqNDAgcng6IGxxaTogJTAyaGh4IHJzc2k6ICUwMmhoeFxuIiwKIAkJIGxxaV9yc3NpWzBdLCBscWlfcnNzaVsxXSk7CiAjZW5kaWYKQEAgLTUyMSw3ICs1MjEsNyBAQAogCQkgKi8KIAogCQlkZXZfZGJnKHByaW50ZGV2KGRldnJlYyksICJTZXQgUGFuIENvb3JkIHRvICVzXG4iLAotCQkJCQlmaWx0LT5wYW5fY29vcmQgPyAib24iIDogIm9mZiIpOworCQkJZmlsdC0+cGFuX2Nvb3JkID8gIm9uIiA6ICJvZmYiKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwdmxhbi9pcHZsYW5fY29yZS5jIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9jb3JlLmMKaW5kZXggYTE0ZDg3Ny4uMmExNzUwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvaXB2bGFuL2lwdmxhbl9jb3JlLmMKQEAgLTksNyArOSw3IEBACiAKICNpbmNsdWRlICJpcHZsYW4uaCIKIAotc3RhdGljIHUzMiBpcHZsYW5famhhc2hfc2VjcmV0Oworc3RhdGljIHUzMiBpcHZsYW5famhhc2hfc2VjcmV0IF9fcmVhZF9tb3N0bHk7CiAKIHZvaWQgaXB2bGFuX2luaXRfc2VjcmV0KHZvaWQpCiB7CkBAIC0zNzcsOSArMzc3LDExIEBACiAJfTsKIAogCWRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoZGV2X25ldChkZXYpLCBOVUxMLCAmZmw2KTsKLQlpZiAoSVNfRVJSKGRzdCkpCisJaWYgKGRzdC0+ZXJyb3IpIHsKKwkJcmV0ID0gZHN0LT5lcnJvcjsKKwkJZHN0X3JlbGVhc2UoZHN0KTsKIAkJZ290byBlcnI7Ci0KKwl9CiAJc2tiX2RzdF9kcm9wKHNrYik7CiAJc2tiX2RzdF9zZXQoc2tiLCBkc3QpOwogCWVyciA9IGlwNl9sb2NhbF9vdXQoc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYyBiL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuYwppbmRleCA1OGY5OGY0Li41OGFlMTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5jCkBAIC0xNDYyLDE3ICsxNDYyLDEyIEBACiAJCWlmIChtdHQpIAogCQl7CiAJCQkvKiBDaGVjayBob3cgbXVjaCB0aW1lIHdlIGhhdmUgdXNlZCBhbHJlYWR5ICovCi0JCQlkb19nZXR0aW1lb2ZkYXkoJnNlbGYtPm5vdyk7Ci0JCQkKLQkJCWRpZmYgPSBzZWxmLT5ub3cudHZfdXNlYyAtIHNlbGYtPnN0YW1wLnR2X3VzZWM7CisJCQlkaWZmID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHNlbGYtPnN0YW1wKTsKIAkJCS8qIHNlbGYtPnN0YW1wIGlzIHNldCBmcm9tIGFsaV9pcmNjX2RtYV9yZWNlaXZlX2NvbXBsZXRlKCkgKi8KIAkJCQkJCQkKIAkJCXByX2RlYnVnKCIlcygpLCAqKioqKioqIGRpZmYgPSAlZCAqKioqKioqXG4iLAogCQkJCSBfX2Z1bmNfXywgZGlmZik7Ci0JCQkKLQkJCWlmIChkaWZmIDwgMCkgCi0JCQkJZGlmZiArPSAxMDAwMDAwOwotCQkJCisKIAkJCS8qIENoZWNrIGlmIHRoZSBtdHQgaXMgbGFyZ2VyIHRoYW4gdGhlIHRpbWUgd2UgaGF2ZQogCQkJICogYWxyZWFkeSB1c2VkIGJ5IGFsbCB0aGUgcHJvdG9jb2wgcHJvY2Vzc2luZwogCQkJICovCkBAIC0xODg0LDcgKzE4NzksNyBAQAogCQkJICogcmVkdWNlIHRoZSBtaW4gdHVybiB0aW1lIGEgYml0IHNpbmNlIHdlIHdpbGwga25vdwogCQkJICogaG93IG11Y2ggdGltZSB3ZSBoYXZlIHVzZWQgZm9yIHByb3RvY29sIHByb2Nlc3NpbmcKIAkJCSAqLwotCQkJZG9fZ2V0dGltZW9mZGF5KCZzZWxmLT5zdGFtcCk7CisJCQlzZWxmLT5zdGFtcCA9IGt0aW1lX2dldCgpOwogCiAJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbisxKTsKIAkJCWlmIChza2IgPT0gTlVMTCkgIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5oIGIvZHJpdmVycy9uZXQvaXJkYS9hbGktaXJjYy5oCmluZGV4IDBjOGVkYjQuLmMyZDk3NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvYWxpLWlyY2MuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL2FsaS1pcmNjLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNpZm5kZWYgQUxJX0lSQ0NfSAogI2RlZmluZSBBTElfSVJDQ19ICiAKLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KQEAgLTIwOSw4ICsyMDksNyBAQAogCQogCXVuc2lnbmVkIGNoYXIgcmN2RnJhbWVzT3ZlcmZsb3c7CiAJCQotCXN0cnVjdCB0aW1ldmFsIHN0YW1wOwotCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlrdGltZV90IHN0YW1wOwogCiAJc3BpbmxvY2tfdCBsb2NrOyAgICAgICAgICAgLyogRm9yIHNlcmlhbGl6aW5nIG9wZXJhdGlvbnMgKi8KIAkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvYXUxa19pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKaW5kZXggZTE1MTIwNS4uNDRlNGYzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9hdTFrX2lyLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAKQEAgLTE2Myw4ICsxNjIsNiBAQAogCWlvYnVmZl90IHJ4X2J1ZmY7CiAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwotCXN0cnVjdCB0aW1ldmFsIHN0YW1wOwotCXN0cnVjdCB0aW1ldmFsIG5vdzsKIAlzdHJ1Y3QgcW9zX2luZm8gcW9zOwogCXN0cnVjdCBpcmxhcF9jYiAqaXJsYXA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYwppbmRleCA0OGIyZjlhLi5mNmM5MTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCkBAIC00OTUsMTggKzQ5NSwxMiBAQAogCQltdHQgPSBpcmRhX2dldF9tdHQoc2tiKTsKIAkJaWYgKG10dCkgewogCQkJaW50IGRpZmY7Ci0JCQlkb19nZXR0aW1lb2ZkYXkoJnNlbGYtPm5vdyk7Ci0JCQlkaWZmID0gc2VsZi0+bm93LnR2X3VzZWMgLSBzZWxmLT5zdGFtcC50dl91c2VjOworCQkJZGlmZiA9IGt0aW1lX3VzX2RlbHRhKGt0aW1lX2dldCgpLCBzZWxmLT5zdGFtcCk7CiAjaWZkZWYgSVVfVVNCX01JTl9SVFQKIAkJCS8qIEZhY3RvciBpbiBVU0IgZGVsYXlzIC0+IEdldCByaWQgb2YgdWRlbGF5KCkgdGhhdAogCQkJICogd291bGQgYmUgbG9zdCBpbiB0aGUgbm9pc2UgLSBKZWFuIElJICovCiAJCQlkaWZmICs9IElVX1VTQl9NSU5fUlRUOwogI2VuZGlmIC8qIElVX1VTQl9NSU5fUlRUICovCi0JCQkvKiBJZiB0aGUgdXNlYyBjb3VudGVyIGRpZCB3cmFwYXJvdW5kLCB0aGUgZGlmZiB3aWxsCi0JCQkgKiBnbyBuZWdhdGl2ZSAodHZfdXNlYyBpcyBhIGxvbmcpLCBzbyB3ZSBuZWVkIHRvCi0JCQkgKiBjb3JyZWN0IGl0IGJ5IG9uZSBzZWNvbmQuIEplYW4gSUkgKi8KLQkJCWlmIChkaWZmIDwgMCkKLQkJCQlkaWZmICs9IDEwMDAwMDA7CiAKIAkJICAgICAgICAvKiBDaGVjayBpZiB0aGUgbXR0IGlzIGxhcmdlciB0aGFuIHRoZSB0aW1lIHdlIGhhdmUKIAkJCSAqIGFscmVhZHkgdXNlZCBieSBhbGwgdGhlIHByb3RvY29sIHByb2Nlc3NpbmcKQEAgLTg2OSw3ICs4NjMsNyBAQAogCSAqIHJlZHVjZSB0aGUgbWluIHR1cm4gdGltZSBhIGJpdCBzaW5jZSB3ZSB3aWxsIGtub3cKIAkgKiBob3cgbXVjaCB0aW1lIHdlIGhhdmUgdXNlZCBmb3IgcHJvdG9jb2wgcHJvY2Vzc2luZwogCSAqLwotICAgICAgICBkb19nZXR0aW1lb2ZkYXkoJnNlbGYtPnN0YW1wKTsKKwlzZWxmLT5zdGFtcCA9IGt0aW1lX2dldCgpOwogCiAJLyogQ2hlY2sgaWYgd2UgbmVlZCB0byBjb3B5IHRoZSBkYXRhIHRvIGEgbmV3IHNrYiBvciBub3QuCiAJICogRm9yIG1vc3QgZnJhbWVzLCB3ZSB1c2UgWmVyb0NvcHkgYW5kIHBhc3MgdGhlIGFscmVhZHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuaCBiL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuaAppbmRleCA1OGRkYjUyLi44YWMzODlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5oCkBAIC0yOSw3ICsyOSw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CiAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYV9kZXZpY2UuaD4gICAgICAvKiBzdHJ1Y3QgaXJsYXBfY2IgKi8KQEAgLTE1Nyw4ICsxNTcsNyBAQAogCWNoYXIgKnNwZWVkX2J1ZmY7CQkvKiBCdWZmZXIgZm9yIHNwZWVkIGNoYW5nZXMgKi8KIAljaGFyICp0eF9idWZmOwogCi0Jc3RydWN0IHRpbWV2YWwgc3RhbXA7Ci0Jc3RydWN0IHRpbWV2YWwgbm93OworCWt0aW1lX3Qgc3RhbXA7CiAKIAlzcGlubG9ja190IGxvY2s7CQkvKiBGb3Igc2VyaWFsaXppbmcgVHggb3BlcmF0aW9ucyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2tpbmdzdW4tc2lyLmMKaW5kZXggZTYzODg5My4uZmI1ZDE2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9raW5nc3VuLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva2luZ3N1bi1zaXIuYwpAQCAtMTE0LDcgKzExNCw2IEBACiAJCQkJCSAgICh1c3VhbGx5IDgpICovCiAKIAlpb2J1ZmZfdCAgCSAgcnhfYnVmZjsJLyogcmVjZWl2ZSB1bndyYXAgc3RhdGUgbWFjaGluZSAqLwotCXN0cnVjdCB0aW1ldmFsCSAgcnhfdGltZTsKIAlzcGlubG9ja190IGxvY2s7CiAJaW50IHJlY2VpdmluZzsKIApAQCAtMjM1LDcgKzIzNCw2IEBACiAJCQkJCQkgICZraW5nc3VuLT5uZXRkZXYtPnN0YXRzLAogCQkJCQkJICAma2luZ3N1bi0+cnhfYnVmZiwgYnl0ZXNbaV0pOwogCQkJfQotCQkJZG9fZ2V0dGltZW9mZGF5KCZraW5nc3VuLT5yeF90aW1lKTsKIAkJCWtpbmdzdW4tPnJlY2VpdmluZyA9CiAJCQkJKGtpbmdzdW4tPnJ4X2J1ZmYuc3RhdGUgIT0gT1VUU0lERV9GUkFNRSkKIAkJCQk/IDEgOiAwOwpAQCAtMjczLDcgKzI3MSw2IEBACiAKIAlza2JfcmVzZXJ2ZShraW5nc3VuLT5yeF9idWZmLnNrYiwgMSk7CiAJa2luZ3N1bi0+cnhfYnVmZi5oZWFkID0ga2luZ3N1bi0+cnhfYnVmZi5za2ItPmRhdGE7Ci0JZG9fZ2V0dGltZW9mZGF5KCZraW5nc3VuLT5yeF90aW1lKTsKIAogCWtpbmdzdW4tPnJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFraW5nc3VuLT5yeF91cmIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jIGIvZHJpdmVycy9uZXQvaXJkYS9rczk1OS1zaXIuYwppbmRleCBlNmIzODA0Li44ZTZlMGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2tzOTU5LXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEva3M5NTktc2lyLmMKQEAgLTE4Nyw3ICsxODcsNiBAQAogCV9fdTggKnJ4X2J1ZjsKIAlfX3U4IHJ4X3ZhcmlhYmxlX3hvcm1hc2s7CiAJaW9idWZmX3QgcnhfdW53cmFwX2J1ZmY7Ci0Jc3RydWN0IHRpbWV2YWwgcnhfdGltZTsKIAogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnNwZWVkX3NldHVwcmVxdWVzdDsKIAlzdHJ1Y3QgdXJiICpzcGVlZF91cmI7CkBAIC00NzYsNyArNDc1LDYgQEAKIAkJCQkJCSAgYnl0ZXNbaV0pOwogCQkJfQogCQl9Ci0JCWRvX2dldHRpbWVvZmRheSgma2luZ3N1bi0+cnhfdGltZSk7CiAJCWtpbmdzdW4tPnJlY2VpdmluZyA9CiAJCSAgICAoa2luZ3N1bi0+cnhfdW53cmFwX2J1ZmYuc3RhdGUgIT0gT1VUU0lERV9GUkFNRSkgPyAxIDogMDsKIAl9CkBAIC01MTQsNyArNTEyLDYgQEAKIAogCXNrYl9yZXNlcnZlKGtpbmdzdW4tPnJ4X3Vud3JhcF9idWZmLnNrYiwgMSk7CiAJa2luZ3N1bi0+cnhfdW53cmFwX2J1ZmYuaGVhZCA9IGtpbmdzdW4tPnJ4X3Vud3JhcF9idWZmLnNrYi0+ZGF0YTsKLQlkb19nZXR0aW1lb2ZkYXkoJmtpbmdzdW4tPnJ4X3RpbWUpOwogCiAJa2luZ3N1bi0+cnhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWtpbmdzdW4tPnJ4X3VyYikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKaW5kZXggZTRkNjc4Zi4uYmNhNmExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKQEAgLTcyMiw3ICs3MjIsNiBAQAogCiAJc2tiX3Jlc2VydmUobWNzLT5yeF9idWZmLnNrYiwgMSk7CiAJbWNzLT5yeF9idWZmLmhlYWQgPSBtY3MtPnJ4X2J1ZmYuc2tiLT5kYXRhOwotCWRvX2dldHRpbWVvZmRheSgmbWNzLT5yeF90aW1lKTsKIAogCS8qCiAJICogTm93IHRoYXQgZXZlcnl0aGluZyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgcHJvcGVybHksCkBAIC03OTksNyArNzk4LDYgQEAKIAkJCW1jc191bndyYXBfZmlyKG1jcywgdXJiLT50cmFuc2Zlcl9idWZmZXIsCiAJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJfQotCQlkb19nZXR0aW1lb2ZkYXkoJm1jcy0+cnhfdGltZSk7CiAJfQogCiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5oIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmgKaW5kZXggYjEwNjg5Yi4uYTZlOGY3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmgKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmgKQEAgLTExNiw3ICsxMTYsNiBAQAogCV9fdTggKmZpZm9fc3RhdHVzOwogCiAJaW9idWZmX3QgcnhfYnVmZjsJLyogcmVjZWl2ZSB1bndyYXAgc3RhdGUgbWFjaGluZSAqLwotCXN0cnVjdCB0aW1ldmFsIHJ4X3RpbWU7CiAJc3BpbmxvY2tfdCBsb2NrOwogCWludCByZWNlaXZpbmc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYyBiL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYwppbmRleCBlNzMxN2IxLi5kYzBkYmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jCkBAIC0xNTAxLDEwICsxNTAxLDcgQEAKIAkJbXR0ID0gaXJkYV9nZXRfbXR0KHNrYik7CiAJCWlmIChtdHQpIHsKIAkJCS8qIENoZWNrIGhvdyBtdWNoIHRpbWUgd2UgaGF2ZSB1c2VkIGFscmVhZHkgKi8KLQkJCWRvX2dldHRpbWVvZmRheSgmc2VsZi0+bm93KTsKLQkJCWRpZmYgPSBzZWxmLT5ub3cudHZfdXNlYyAtIHNlbGYtPnN0YW1wLnR2X3VzZWM7Ci0JCQlpZiAoZGlmZiA8IDApIAotCQkJCWRpZmYgKz0gMTAwMDAwMDsKKwkJCWRpZmYgPSBrdGltZV91c19kZWx0YShrdGltZV9nZXQoKSwgc2VsZi0+c3RhbXApOwogCQkJCiAJCQkvKiBDaGVjayBpZiB0aGUgbXR0IGlzIGxhcmdlciB0aGFuIHRoZSB0aW1lIHdlIGhhdmUKIAkJCSAqIGFscmVhZHkgdXNlZCBieSBhbGwgdGhlIHByb3RvY29sIHByb2Nlc3NpbmcKQEAgLTE4NjcsNyArMTg2NCw3IEBACiAJCQkgKiByZWR1Y2UgdGhlIG1pbiB0dXJuIHRpbWUgYSBiaXQgc2luY2Ugd2Ugd2lsbCBrbm93CiAJCQkgKiBob3cgbXVjaCB0aW1lIHdlIGhhdmUgdXNlZCBmb3IgcHJvdG9jb2wgcHJvY2Vzc2luZwogCQkJICovCi0JCQlkb19nZXR0aW1lb2ZkYXkoJnNlbGYtPnN0YW1wKTsKKwkJCXNlbGYtPnN0YW1wID0ga3RpbWVfZ2V0KCk7CiAKIAkJCXNrYiA9IGRldl9hbGxvY19za2IobGVuKzEpOwogCQkJaWYgKHNrYiA9PSBOVUxMKSAgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5oIGIvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5oCmluZGV4IDMyZmE1ODIuLjdiZTVhY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpZm5kZWYgTlNDX0lSQ0NfSAogI2RlZmluZSBOU0NfSVJDQ19ICiAKLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KQEAgLTI2Myw4ICsyNjMsNyBAQAogCiAJX191OCBpZXI7ICAgICAgICAgICAgICAgICAgLyogSW50ZXJydXB0IGVuYWJsZSByZWdpc3RlciAqLwogCi0Jc3RydWN0IHRpbWV2YWwgc3RhbXA7Ci0Jc3RydWN0IHRpbWV2YWwgbm93OworCWt0aW1lX3Qgc3RhbXA7CiAKIAlzcGlubG9ja190IGxvY2s7ICAgICAgICAgICAvKiBGb3Igc2VyaWFsaXppbmcgb3BlcmF0aW9ucyAqLwogCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKaW5kZXggN2IxN2ZhMi4uYjZlNDRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jCkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcmRhLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9pcmRhLXNhMTF4MC5oPgogCiBzdGF0aWMgaW50IHBvd2VyX2xldmVsID0gMzsKIHN0YXRpYyBpbnQgdHhfbHBtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jIGIvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCmluZGV4IGRkMWJkMTAuLjgzY2M0OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTE3NCw3ICsxNzUsNyBAQAogCV9fdTgJCSAgKmZpZm9fc3RhdHVzOwogCiAJaW9idWZmX3QgIAkgIHJ4X2J1ZmY7CS8qIHJlY2VpdmUgdW53cmFwIHN0YXRlIG1hY2hpbmUgKi8KLQlzdHJ1Y3QgdGltZXZhbAkgIHJ4X3RpbWU7CisJa3RpbWVfdAkJcnhfdGltZTsKIAlpbnQJCSAgcmVjZWl2aW5nOwogCXN0cnVjdCB1cmIJICpyeF91cmI7CiB9OwpAQCAtNjUwLDE1ICs2NTEsMTIgQEAKIHN0YXRpYyB2b2lkIHR1cm5hcm91bmRfZGVsYXkoY29uc3Qgc3RydWN0IHN0aXJfY2IgKnN0aXIsIGxvbmcgdXMpCiB7CiAJbG9uZyB0aWNrczsKLQlzdHJ1Y3QgdGltZXZhbCBub3c7CiAKIAlpZiAodXMgPD0gMCkKIAkJcmV0dXJuOwogCi0JZG9fZ2V0dGltZW9mZGF5KCZub3cpOwotCWlmIChub3cudHZfc2VjIC0gc3Rpci0+cnhfdGltZS50dl9zZWMgPiAwKQotCQl1cyAtPSBVU0VDX1BFUl9TRUM7Ci0JdXMgLT0gbm93LnR2X3VzZWMgLSBzdGlyLT5yeF90aW1lLnR2X3VzZWM7CisJdXMgLT0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHN0aXItPnJ4X3RpbWUpOworCiAJaWYgKHVzIDwgMTApCiAJCXJldHVybjsKIApAQCAtODIzLDggKzgyMSw4IEBACiAJCXByX2RlYnVnKCJyZWNlaXZlICVkXG4iLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl1bndyYXBfY2hhcnMoc3RpciwgdXJiLT50cmFuc2Zlcl9idWZmZXIsCiAJCQkgICAgIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCQotCQlkb19nZXR0aW1lb2ZkYXkoJnN0aXItPnJ4X3RpbWUpOworCisJCXN0aXItPnJ4X3RpbWUgPSBrdGltZV9nZXQoKTsKIAl9CiAKIAkvKiBrZXJuZWwgdGhyZWFkIGlzIHN0b3BwaW5nIHJlY2VpdmVyIGRvbid0IHJlc3VibWl0ICovCkBAIC04NzYsNyArODc0LDcgQEAKIAogCXNrYl9yZXNlcnZlKHN0aXItPnJ4X2J1ZmYuc2tiLCAxKTsKIAlzdGlyLT5yeF9idWZmLmhlYWQgPSBzdGlyLT5yeF9idWZmLnNrYi0+ZGF0YTsKLQlkb19nZXR0aW1lb2ZkYXkoJnN0aXItPnJ4X3RpbWUpOworCXN0aXItPnJ4X3RpbWUgPSBrdGltZV9nZXQoKTsKIAogCXN0aXItPnJ4X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzdGlyLT5yeF91cmIpIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5oIGIvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5oCmluZGV4IDdjZTgyMGUuLmFjMTUyNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmgKQEAgLTI5LDcgKzI5LDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNpZm5kZWYgdmlhX0lSQ0NfSAogI2RlZmluZSB2aWFfSVJDQ19ICi0jaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMTA2LDkgKzEwNSw2IEBACiAKIAlfX3U4IGllcjsJCS8qIEludGVycnVwdCBlbmFibGUgcmVnaXN0ZXIgKi8KIAotCXN0cnVjdCB0aW1ldmFsIHN0YW1wOwotCXN0cnVjdCB0aW1ldmFsIG5vdzsKLQogCXNwaW5sb2NrX3QgbG9jazsJLyogRm9yIHNlcmlhbGl6aW5nIG9wZXJhdGlvbnMgKi8KIAogCV9fdTMyIGZsYWdzOwkJLyogSW50ZXJmYWNlIGZsYWdzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCmluZGV4IGFjMzlkOWYuLmEwODQ5ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCkBAIC0zMyw2ICszMyw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTQwLDkgKzQxLDkgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tYXRoNjQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpAQCAtMTgwLDggKzE4MSw3IEBACiAJdmxzaV9pcmRhX2Rldl90ICppZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJdTggYnl0ZTsKIAl1MTYgd29yZDsKLQl1bnNpZ25lZCBkZWx0YTEsIGRlbHRhMjsKLQlzdHJ1Y3QgdGltZXZhbCBub3c7CisJczMyIHNlYywgdXNlYzsKIAl1bnNpZ25lZCBpb2Jhc2UgPSBuZGV2LT5iYXNlX2FkZHI7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIlxuJXMgbGluayBzdGF0ZTogJXMgLyAlcyAvICVzIC8gJXNcbiIsIG5kZXYtPm5hbWUsCkBAIC0yNzcsMTcgKzI3Nyw5IEBACiAJc2VxX3ByaW50ZihzZXEsICJcbnN3LXN0YXRlOlxuIik7CiAJc2VxX3ByaW50ZihzZXEsICJJclBIWSBzZXR1cDogJWQgYmF1ZCAtICVzIGVuY29kaW5nXG4iLCBpZGV2LT5iYXVkLCAKIAkJKGlkZXYtPm1vZGU9PUlGRl9TSVIpPyJTSVIiOigoaWRldi0+bW9kZT09SUZGX01JUik/Ik1JUiI6IkZJUiIpKTsKLQlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7Ci0JaWYgKG5vdy50dl91c2VjID49IGlkZXYtPmxhc3RfcngudHZfdXNlYykgewotCQlkZWx0YTIgPSBub3cudHZfdXNlYyAtIGlkZXYtPmxhc3RfcngudHZfdXNlYzsKLQkJZGVsdGExID0gMDsKLQl9Ci0JZWxzZSB7Ci0JCWRlbHRhMiA9IDEwMDAwMDAgKyBub3cudHZfdXNlYyAtIGlkZXYtPmxhc3RfcngudHZfdXNlYzsKLQkJZGVsdGExID0gMTsKLQl9Ci0Jc2VxX3ByaW50ZihzZXEsICJsYXN0IHJ4OiAlbHUuJTA2dSBzZWNcbiIsCi0JCW5vdy50dl9zZWMgLSBpZGV2LT5sYXN0X3J4LnR2X3NlYyAtIGRlbHRhMSwgZGVsdGEyKTsJCisJc2VjID0gZGl2X3M2NF9yZW0oa3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIGlkZXYtPmxhc3RfcngpLAorCQkJICBVU0VDX1BFUl9TRUMsICZ1c2VjKTsKKwlzZXFfcHJpbnRmKHNlcSwgImxhc3Qgcng6ICV1bC4lMDZ1IHNlY1xuIiwgc2VjLCB1c2VjKTsKIAogCXNlcV9wcmludGYoc2VxLCAiUlg6IHBhY2tldHM9JWx1IC8gYnl0ZXM9JWx1IC8gZXJyb3JzPSVsdSAvIGRyb3BwZWQ9JWx1IiwKIAkJbmRldi0+c3RhdHMucnhfcGFja2V0cywgbmRldi0+c3RhdHMucnhfYnl0ZXMsIG5kZXYtPnN0YXRzLnJ4X2Vycm9ycywKQEAgLTY2MSw3ICs2NTMsNyBAQAogCQl9CiAJfQogCi0JZG9fZ2V0dGltZW9mZGF5KCZpZGV2LT5sYXN0X3J4KTsgLyogcmVtZW1iZXIgIm5vdyIgZm9yIGxhdGVyIG10dCBkZWxheSAqLworCWlkZXYtPmxhc3RfcnggPSBrdGltZV9nZXQoKTsgLyogcmVtZW1iZXIgIm5vdyIgZm9yIGxhdGVyIG10dCBkZWxheSAqLwogCiAJdmxzaV9maWxsX3J4KHIpOwogCkBAIC04NTgsOSArODUwLDggQEAKIAl1bnNpZ25lZCBpb2Jhc2UgPSBuZGV2LT5iYXNlX2FkZHI7CiAJdTggc3RhdHVzOwogCXUxNiBjb25maWc7Ci0JaW50IG10dDsKKwlpbnQgbXR0LCBkaWZmOwogCWludCBsZW4sIHNwZWVkOwotCXN0cnVjdCB0aW1ldmFsICBub3csIHJlYWR5OwogCWNoYXIgKm1zZyA9IE5VTEw7CiAKIAlzcGVlZCA9IGlyZGFfZ2V0X25leHRfc3BlZWQoc2tiKTsKQEAgLTk0MCwyMSArOTMxLDEwIEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRldi0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKChtdHQgPSBpcmRhX2dldF9tdHQoc2tiKSkgPiAwKSB7Ci0JCi0JCXJlYWR5LnR2X3VzZWMgPSBpZGV2LT5sYXN0X3J4LnR2X3VzZWMgKyBtdHQ7Ci0JCXJlYWR5LnR2X3NlYyA9IGlkZXYtPmxhc3RfcngudHZfc2VjOwotCQlpZiAocmVhZHkudHZfdXNlYyA+PSAxMDAwMDAwKSB7Ci0JCQlyZWFkeS50dl91c2VjIC09IDEwMDAwMDA7Ci0JCQlyZWFkeS50dl9zZWMrKzsJCS8qIElyTEFQIDEuMTogbXR0IGFsd2F5cyA8IDEgc2VjICovCi0JCX0KLQkJZm9yKDs7KSB7Ci0JCQlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7Ci0JCQlpZiAobm93LnR2X3NlYyA+IHJlYWR5LnR2X3NlYyB8fAotCQkJICAgIChub3cudHZfc2VjPT1yZWFkeS50dl9zZWMgJiYgbm93LnR2X3VzZWM+PXJlYWR5LnR2X3VzZWMpKQotCQkJICAgIAlicmVhazsKLQkJCXVkZWxheSgxMDApOworCQlkaWZmID0ga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIGlkZXYtPmxhc3RfcngpOworCQlpZiAobXR0ID4gZGlmZikKKwkJCXVkZWxheShtdHQgLSBkaWZmKTsKIAkJCS8qIG11c3Qgbm90IHNsZWVwIGhlcmUgLSBjYWxsZWQgdW5kZXIgbmV0aWZfdHhfbG9jayEgKi8KLQkJfQogCX0KIAogCS8qIHR4IGJ1ZmZlciBhbHJlYWR5IG93bmVkIGJ5IENQVSBkdWUgdG8gcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCkKQEAgLTEzMzMsNyArMTMxMyw3IEBACiAKIAl2bHNpX2ZpbGxfcngoaWRldi0+cnhfcmluZyk7CiAKLQlkb19nZXR0aW1lb2ZkYXkoJmlkZXYtPmxhc3RfcngpOwkvKiBmaXJzdCBtdHQgbWF5IHN0YXJ0IGZyb20gbm93IG9uICovCisJaWRldi0+bGFzdF9yeCA9IGt0aW1lX2dldCgpOwkvKiBmaXJzdCBtdHQgbWF5IHN0YXJ0IGZyb20gbm93IG9uICovCiAKIAlvdXR3KDAsIGlvYmFzZStWTFNJX1BJT19QUk9NUFQpOwkvKiBraWNrIGh3IHN0YXRlIG1hY2hpbmUgKi8KIApAQCAtMTUyMCw3ICsxNTAwLDcgQEAKIAlpZiAoIWlkZXYtPmlybGFwKQogCQlnb3RvIGVycm91dF9mcmVlX3Jpbmc7CiAKLQlkb19nZXR0aW1lb2ZkYXkoJmlkZXYtPmxhc3RfcngpOyAgLyogZmlyc3QgbXR0IG1heSBzdGFydCBmcm9tIG5vdyBvbiAqLworCWlkZXYtPmxhc3RfcnggPSBrdGltZV9nZXQoKTsgIC8qIGZpcnN0IG10dCBtYXkgc3RhcnQgZnJvbSBub3cgb24gKi8KIAogCWlkZXYtPm5ld19iYXVkID0gOTYwMDsJCS8qIHN0YXJ0IHdpdGggSXJQSFkgdXNpbmcgOTYwMChTSVIpIG1vZGUgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmggYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuaAppbmRleCBmOTExOWM2Li5mOWRiMmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuaApAQCAtNzIzLDcgKzcyMyw3IEBACiAJdm9pZAkJCSp2aXJ0YWRkcjsKIAlzdHJ1Y3QgdmxzaV9yaW5nCSp0eF9yaW5nLCAqcnhfcmluZzsKIAotCXN0cnVjdCB0aW1ldmFsCQlsYXN0X3J4OworCWt0aW1lX3QJCQlsYXN0X3J4OwogCiAJc3BpbmxvY2tfdAkJbG9jazsKIAlzdHJ1Y3QgbXV0ZXgJCW10eDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwppbmRleCA2MTJlMDczLi4xZGYzOGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWN2bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jCkBAIC0xNDcxLDExICsxNDcxLDE3IEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwobWFjdmxhbl9saW5rX3JlZ2lzdGVyKTsKIAorc3RhdGljIHN0cnVjdCBuZXQgKm1hY3ZsYW5fZ2V0X2xpbmtfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldl9uZXQobWFjdmxhbl9kZXZfcmVhbF9kZXYoZGV2KSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBtYWN2bGFuX2xpbmtfb3BzID0gewogCS5raW5kCQk9ICJtYWN2bGFuIiwKIAkuc2V0dXAJCT0gbWFjdmxhbl9zZXR1cCwKIAkubmV3bGluawk9IG1hY3ZsYW5fbmV3bGluaywKIAkuZGVsbGluawk9IG1hY3ZsYW5fZGVsbGluaywKKwkuZ2V0X2xpbmtfbmV0CT0gbWFjdmxhbl9nZXRfbGlua19uZXQsCiB9OwogCiBzdGF0aWMgaW50IG1hY3ZsYW5fZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdW51c2VkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjdnRhcC5jIGIvZHJpdmVycy9uZXQvbWFjdnRhcC5jCmluZGV4IDdkZjIyMTcuLmU0MGZkZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3Z0YXAuYworKysgYi9kcml2ZXJzL25ldC9tYWN2dGFwLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgogCi0jaW5jbHVkZSA8bmV0L2lwdjYuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgpAQCAtODEsNyArODAsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgbWFjdnRhcF9zb2NrZXRfb3BzOwogCiAjZGVmaW5lIFRVTl9PRkZMT0FEUyAoTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9UU09fRUNOIHwgTkVUSUZfRl9UU08gfCBcCi0JCSAgICAgIE5FVElGX0ZfVFNPNikKKwkJICAgICAgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9VRk8pCiAjZGVmaW5lIFJYX09GRkxPQURTIChORVRJRl9GX0dSTyB8IE5FVElGX0ZfTFJPKQogI2RlZmluZSBUQVBfRkVBVFVSRVMgKE5FVElGX0ZfR1NPIHwgTkVUSUZfRl9TRykKIApAQCAtNTg2LDExICs1ODUsNyBAQAogCQkJZ3NvX3R5cGUgPSBTS0JfR1NPX1RDUFY2OwogCQkJYnJlYWs7CiAJCWNhc2UgVklSVElPX05FVF9IRFJfR1NPX1VEUDoKLQkJCXByX3dhcm5fb25jZSgibWFjdnRhcDogJXM6IHVzaW5nIGRpc2FibGVkIFVGTyBmZWF0dXJlOyBwbGVhc2UgZml4IHRoaXMgcHJvZ3JhbVxuIiwKLQkJCQkgICAgIGN1cnJlbnQtPmNvbW0pOwogCQkJZ3NvX3R5cGUgPSBTS0JfR1NPX1VEUDsKLQkJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQotCQkJCWlwdjZfcHJveHlfc2VsZWN0X2lkZW50KHNrYik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNjM2LDYgKzYzMSw4IEBACiAJCQl2bmV0X2hkci0+Z3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjQ7CiAJCWVsc2UgaWYgKHNpbmZvLT5nc29fdHlwZSAmIFNLQl9HU09fVENQVjYpCiAJCQl2bmV0X2hkci0+Z3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjY7CisJCWVsc2UgaWYgKHNpbmZvLT5nc29fdHlwZSAmIFNLQl9HU09fVURQKQorCQkJdm5ldF9oZHItPmdzb190eXBlID0gVklSVElPX05FVF9IRFJfR1NPX1VEUDsKIAkJZWxzZQogCQkJQlVHKCk7CiAJCWlmIChzaW5mby0+Z3NvX3R5cGUgJiBTS0JfR1NPX1RDUF9FQ04pCkBAIC02NDUsNyArNjQyLDcgQEAKIAogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CiAJCXZuZXRfaGRyLT5mbGFncyA9IFZJUlRJT19ORVRfSERSX0ZfTkVFRFNfQ1NVTTsKLQkJaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKKwkJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpCiAJCQl2bmV0X2hkci0+Y3N1bV9zdGFydCA9IGNwdV90b19tYWN2dGFwMTYocSwKIAkJCQlza2JfY2hlY2tzdW1fc3RhcnRfb2Zmc2V0KHNrYikgKyBWTEFOX0hMRU4pOwogCQllbHNlCkBAIC04MjEsMTMgKzgxOCwxMyBAQAogCXRvdGFsID0gdm5ldF9oZHJfbGVuOwogCXRvdGFsICs9IHNrYi0+bGVuOwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCXN0cnVjdCB7CiAJCQlfX2JlMTYgaF92bGFuX3Byb3RvOwogCQkJX19iZTE2IGhfdmxhbl9UQ0k7CiAJCX0gdmV0aDsKIAkJdmV0aC5oX3ZsYW5fcHJvdG8gPSBza2ItPnZsYW5fcHJvdG87Ci0JCXZldGguaF92bGFuX1RDSSA9IGh0b25zKHZsYW5fdHhfdGFnX2dldChza2IpKTsKKwkJdmV0aC5oX3ZsYW5fVENJID0gaHRvbnMoc2tiX3ZsYW5fdGFnX2dldChza2IpKTsKIAogCQl2bGFuX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX3Byb3RvKTsKIAkJdG90YWwgKz0gVkxBTl9ITEVOOwpAQCAtOTY1LDYgKzk2Miw5IEBACiAJCQlpZiAoYXJnICYgVFVOX0ZfVFNPNikKIAkJCQlmZWF0dXJlX21hc2sgfD0gTkVUSUZfRl9UU082OwogCQl9CisKKwkJaWYgKGFyZyAmIFRVTl9GX1VGTykKKwkJCWZlYXR1cmVfbWFzayB8PSBORVRJRl9GX1VGTzsKIAl9CiAKIAkvKiB0dW4vdGFwIGRyaXZlciBpbnZlcnRzIHRoZSB1c2FnZSBmb3IgVFNPIG9mZmxvYWRzLCB3aGVyZQpAQCAtOTc1LDcgKzk3NSw3IEBACiAJICogV2hlbiB1c2VyIHNwYWNlIHR1cm5zIG9mZiBUU08sIHdlIHR1cm4gb2ZmIEdTTy9MUk8gc28gdGhhdAogCSAqIHVzZXItc3BhY2Ugd2lsbCBub3QgcmVjZWl2ZSBUU08gZnJhbWVzLgogCSAqLwotCWlmIChmZWF0dXJlX21hc2sgJiAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpKQorCWlmIChmZWF0dXJlX21hc2sgJiAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYgfCBORVRJRl9GX1VGTykpCiAJCWZlYXR1cmVzIHw9IFJYX09GRkxPQURTOwogCWVsc2UKIAkJZmVhdHVyZXMgJj0gflJYX09GRkxPQURTOwpAQCAtMTA5MCw3ICsxMDkwLDcgQEAKIAljYXNlIFRVTlNFVE9GRkxPQUQ6CiAJCS8qIGxldCB0aGUgdXNlciBjaGVjayBmb3IgZnV0dXJlIGZsYWdzICovCiAJCWlmIChhcmcgJiB+KFRVTl9GX0NTVU0gfCBUVU5fRl9UU080IHwgVFVOX0ZfVFNPNiB8Ci0JCQkgICAgVFVOX0ZfVFNPX0VDTikpCisJCQkgICAgVFVOX0ZfVFNPX0VDTiB8IFRVTl9GX1VGTykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlydG5sX2xvY2soKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21paS5jIGIvZHJpdmVycy9uZXQvbWlpLmMKaW5kZXggNGE5OWMzOS4uOTkzNTcwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWlpLmMKKysrIGIvZHJpdmVycy9uZXQvbWlpLmMKQEAgLTMwMiw3ICszMDIsNyBAQAogfQogCiAvKioKLSAqIG1paV9jaGVja19tZWRpYSAtIGNoZWNrIHRoZSBNSUkgaW50ZXJmYWNlIGZvciBhIGR1cGxleCBjaGFuZ2UKKyAqIG1paV9jaGVja19tZWRpYSAtIGNoZWNrIHRoZSBNSUkgaW50ZXJmYWNlIGZvciBhIGNhcnJpZXIvc3BlZWQvZHVwbGV4IGNoYW5nZQogICogQG1paTogdGhlIE1JSSBpbnRlcmZhY2UKICAqIEBva190b19wcmludDogT0sgdG8gcHJpbnQgbGluayB1cC9kb3duIG1lc3NhZ2VzCiAgKiBAaW5pdF9tZWRpYTogT0sgdG8gc2F2ZSBkdXBsZXggbW9kZSBpbiBAbWlpCkBAIC0zMTgsMTAgKzMxOCw2IEBACiAJaW50IGFkdmVydGlzZSwgbHBhLCBtZWRpYSwgZHVwbGV4OwogCWludCBscGEyID0gMDsKIAotCS8qIGlmIGZvcmNlZCBtZWRpYSwgZ28gbm8gZnVydGhlciAqLwotCWlmIChtaWktPmZvcmNlX21lZGlhKQotCQlyZXR1cm4gMDsgLyogZHVwbGV4IGRpZCBub3QgY2hhbmdlICovCi0KIAkvKiBjaGVjayBjdXJyZW50IGFuZCBvbGQgbGluayBzdGF0dXMgKi8KIAlvbGRfY2FycmllciA9IG5ldGlmX2NhcnJpZXJfb2sobWlpLT5kZXYpID8gMSA6IDA7CiAJbmV3X2NhcnJpZXIgPSAodW5zaWduZWQgaW50KSBtaWlfbGlua19vayhtaWkpOwpAQCAtMzQ1LDYgKzM0MSwxMiBAQAogCSAqLwogCW5ldGlmX2NhcnJpZXJfb24obWlpLT5kZXYpOwogCisJaWYgKG1paS0+Zm9yY2VfbWVkaWEpIHsKKwkJaWYgKG9rX3RvX3ByaW50KQorCQkJbmV0ZGV2X2luZm8obWlpLT5kZXYsICJsaW5rIHVwXG4iKTsKKwkJcmV0dXJuIDA7IC8qIGR1cGxleCBkaWQgbm90IGNoYW5nZSAqLworCX0KKwogCS8qIGdldCBNSUkgYWR2ZXJ0aXNlIGFuZCBMUEEgdmFsdWVzICovCiAJaWYgKCghaW5pdF9tZWRpYSkgJiYgKG1paS0+YWR2ZXJ0aXNpbmcpKQogCQlhZHZlcnRpc2UgPSBtaWktPmFkdmVydGlzaW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwppbmRleCBhM2MyNTFiLi4xNmFkYmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwpAQCAtMjYsNyArMjYsNyBAQAogCiBjb25maWcgQU1EX1hHQkVfUEhZCiAJdHJpc3RhdGUgIkRyaXZlciBmb3IgdGhlIEFNRCAxMEdiRSAoYW1kLXhnYmUpIFBIWXMiCi0JZGVwZW5kcyBvbiBPRiAmJiBIQVNfSU9NRU0KKwlkZXBlbmRzIG9uIChPRiB8fCBBQ1BJKSAmJiBIQVNfSU9NRU0KIAktLS1oZWxwLS0tCiAJICBDdXJyZW50bHkgc3VwcG9ydHMgdGhlIEFNRCAxMEdiRSBQSFkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2FtZC14Z2JlLXBoeS5jIGIvZHJpdmVycy9uZXQvcGh5L2FtZC14Z2JlLXBoeS5jCmluZGV4IDkwM2RjM2QuLjllM2FmNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9hbWQteGdiZS1waHkuYworKysgYi9kcml2ZXJzL25ldC9waHkvYW1kLXhnYmUtcGh5LmMKQEAgLTYwLDYgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpAQCAtNzQsNiArNzUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb3BlcnR5Lmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogCiBNT0RVTEVfQVVUSE9SKCJUb20gTGVuZGFja3kgPHRob21hcy5sZW5kYWNreUBhbWQuY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwpAQCAtODQsMjIgKzg4LDQzIEBACiAjZGVmaW5lIFhHQkVfUEhZX01BU0sJMHhmZmZmZmZmMAogCiAjZGVmaW5lIFhHQkVfUEhZX1NQRUVEU0VUX1BST1BFUlRZCSJhbWQsc3BlZWQtc2V0IgorI2RlZmluZSBYR0JFX1BIWV9CTFdDX1BST1BFUlRZCQkiYW1kLHNlcmRlcy1ibHdjIgorI2RlZmluZSBYR0JFX1BIWV9DRFJfUkFURV9QUk9QRVJUWQkiYW1kLHNlcmRlcy1jZHItcmF0ZSIKKyNkZWZpbmUgWEdCRV9QSFlfUFFfU0tFV19QUk9QRVJUWQkiYW1kLHNlcmRlcy1wcS1za2V3IgorI2RlZmluZSBYR0JFX1BIWV9UWF9BTVBfUFJPUEVSVFkJImFtZCxzZXJkZXMtdHgtYW1wIgorCisjZGVmaW5lIFhHQkVfUEhZX1NQRUVEUwkJCTMKKyNkZWZpbmUgWEdCRV9QSFlfU1BFRURfMTAwMAkJMAorI2RlZmluZSBYR0JFX1BIWV9TUEVFRF8yNTAwCQkxCisjZGVmaW5lIFhHQkVfUEhZX1NQRUVEXzEwMDAwCQkyCiAKICNkZWZpbmUgWEdCRV9BTl9JTlRfQ01QTFQJCTB4MDEKICNkZWZpbmUgWEdCRV9BTl9JTkNfTElOSwkJMHgwMgogI2RlZmluZSBYR0JFX0FOX1BHX1JDVgkJCTB4MDQKKyNkZWZpbmUgWEdCRV9BTl9JTlRfTUFTSwkJMHgwNwogCiAjZGVmaW5lIFhOUF9NQ0ZfTlVMTF9NRVNTQUdFCQkweDAwMQotI2RlZmluZSBYTlBfQUNLX1BST0NFU1NFRAkJKDEgPDwgMTIpCi0jZGVmaW5lIFhOUF9NUF9GT1JNQVRURUQJCSgxIDw8IDEzKQotI2RlZmluZSBYTlBfTlBfRVhDSEFOR0UJCQkoMSA8PCAxNSkKKyNkZWZpbmUgWE5QX0FDS19QUk9DRVNTRUQJCUJJVCgxMikKKyNkZWZpbmUgWE5QX01QX0ZPUk1BVFRFRAkJQklUKDEzKQorI2RlZmluZSBYTlBfTlBfRVhDSEFOR0UJCQlCSVQoMTUpCiAKICNkZWZpbmUgWEdCRV9QSFlfUkFURUNIQU5HRV9DT1VOVAk1MDAKIAorI2RlZmluZSBYR0JFX1BIWV9LUl9UUkFJTklOR19TVEFSVAkweDAxCisjZGVmaW5lIFhHQkVfUEhZX0tSX1RSQUlOSU5HX0VOQUJMRQkweDAyCisKKyNkZWZpbmUgWEdCRV9QSFlfRkVDX0VOQUJMRQkJMHgwMQorI2RlZmluZSBYR0JFX1BIWV9GRUNfRk9SV0FSRAkJMHgwMgorI2RlZmluZSBYR0JFX1BIWV9GRUNfTUFTSwkJMHgwMworCiAjaWZuZGVmIE1ESU9fUE1BXzEwR0JSX1BNRF9DVFJMCiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX1BNRF9DVFJMCQkweDAwOTYKICNlbmRpZgogCisjaWZuZGVmIE1ESU9fUE1BXzEwR0JSX0ZFQ19BQklMSVRZCisjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZFQ19BQklMSVRZCTB4MDBhYQorI2VuZGlmCisKICNpZm5kZWYgTURJT19QTUFfMTBHQlJfRkVDX0NUUkwKICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRkVDX0NUUkwJCTB4MDBhYgogI2VuZGlmCkBAIC0xMDgsNiArMTMzLDEwIEBACiAjZGVmaW5lIE1ESU9fQU5fWE5QCQkJMHgwMDE2CiAjZW5kaWYKIAorI2lmbmRlZiBNRElPX0FOX0xQWAorI2RlZmluZSBNRElPX0FOX0xQWAkJCTB4MDAxOQorI2VuZGlmCisKICNpZm5kZWYgTURJT19BTl9JTlRNQVNLCiAjZGVmaW5lIE1ESU9fQU5fSU5UTUFTSwkJCTB4ODAwMQogI2VuZGlmCkBAIC0xMTYsMTggKzE0NSwxMCBAQAogI2RlZmluZSBNRElPX0FOX0lOVAkJCTB4ODAwMgogI2VuZGlmCiAKLSNpZm5kZWYgTURJT19BTl9LUl9DVFJMCi0jZGVmaW5lIE1ESU9fQU5fS1JfQ1RSTAkJCTB4ODAwMwotI2VuZGlmCi0KICNpZm5kZWYgTURJT19DVFJMMV9TUEVFRDFHCiAjZGVmaW5lIE1ESU9fQ1RSTDFfU1BFRUQxRwkJKE1ESU9fQ1RSTDFfU1BFRUQxMEcgJiB+Qk1DUl9TUEVFRDEwMCkKICNlbmRpZgogCi0jaWZuZGVmIE1ESU9fS1JfQ1RSTF9QREVURUNUCi0jZGVmaW5lIE1ESU9fS1JfQ1RSTF9QREVURUNUCQkweDAxCi0jZW5kaWYKLQogLyogU2VyRGVzIGludGVncmF0aW9uIHJlZ2lzdGVyIG9mZnNldHMgKi8KICNkZWZpbmUgU0lSMF9LUl9SVF8xCQkJMHgwMDJjCiAjZGVmaW5lIFNJUjBfU1RBVFVTCQkJMHgwMDQwCkBAIC0xNDAsMTAgKzE2MSwxMCBAQAogI2RlZmluZSBTSVIwX1NUQVRVU19SWF9SRUFEWV9XSURUSAkxCiAjZGVmaW5lIFNJUjBfU1RBVFVTX1RYX1JFQURZX0lOREVYCTgKICNkZWZpbmUgU0lSMF9TVEFUVVNfVFhfUkVBRFlfV0lEVEgJMQorI2RlZmluZSBTSVIxX1NQRUVEX0NEUl9SQVRFX0lOREVYCTEyCisjZGVmaW5lIFNJUjFfU1BFRURfQ0RSX1JBVEVfV0lEVEgJNAogI2RlZmluZSBTSVIxX1NQRUVEX0RBVEFSQVRFX0lOREVYCTQKICNkZWZpbmUgU0lSMV9TUEVFRF9EQVRBUkFURV9XSURUSAkyCi0jZGVmaW5lIFNJUjFfU1BFRURfUElfU1BEX1NFTF9JTkRFWAkxMgotI2RlZmluZSBTSVIxX1NQRUVEX1BJX1NQRF9TRUxfV0lEVEgJNAogI2RlZmluZSBTSVIxX1NQRUVEX1BMTFNFTF9JTkRFWAkJMwogI2RlZmluZSBTSVIxX1NQRUVEX1BMTFNFTF9XSURUSAkJMQogI2RlZmluZSBTSVIxX1NQRUVEX1JBVEVDSEFOR0VfSU5ERVgJNgpAQCAtMTUzLDIwICsxNzQsMjYgQEAKICNkZWZpbmUgU0lSMV9TUEVFRF9XT1JETU9ERV9JTkRFWAkwCiAjZGVmaW5lIFNJUjFfU1BFRURfV09SRE1PREVfV0lEVEgJMwogCisjZGVmaW5lIFNQRUVEXzEwMDAwX0JMV0MJCTAKICNkZWZpbmUgU1BFRURfMTAwMDBfQ0RSCQkJMHg3CiAjZGVmaW5lIFNQRUVEXzEwMDAwX1BMTAkJCTB4MQorI2RlZmluZSBTUEVFRF8xMDAwMF9QUQkJCTB4MWUKICNkZWZpbmUgU1BFRURfMTAwMDBfUkFURQkJMHgwCiAjZGVmaW5lIFNQRUVEXzEwMDAwX1RYQU1QCQkweGEKICNkZWZpbmUgU1BFRURfMTAwMDBfV09SRAkJMHg3CiAKKyNkZWZpbmUgU1BFRURfMjUwMF9CTFdDCQkJMQogI2RlZmluZSBTUEVFRF8yNTAwX0NEUgkJCTB4MgogI2RlZmluZSBTUEVFRF8yNTAwX1BMTAkJCTB4MAorI2RlZmluZSBTUEVFRF8yNTAwX1BRCQkJMHhhCiAjZGVmaW5lIFNQRUVEXzI1MDBfUkFURQkJCTB4MQogI2RlZmluZSBTUEVFRF8yNTAwX1RYQU1QCQkweGYKICNkZWZpbmUgU1BFRURfMjUwMF9XT1JECQkJMHgxCiAKKyNkZWZpbmUgU1BFRURfMTAwMF9CTFdDCQkJMQogI2RlZmluZSBTUEVFRF8xMDAwX0NEUgkJCTB4MgogI2RlZmluZSBTUEVFRF8xMDAwX1BMTAkJCTB4MAorI2RlZmluZSBTUEVFRF8xMDAwX1BRCQkJMHhhCiAjZGVmaW5lIFNQRUVEXzEwMDBfUkFURQkJCTB4MwogI2RlZmluZSBTUEVFRF8xMDAwX1RYQU1QCQkweGYKICNkZWZpbmUgU1BFRURfMTAwMF9XT1JECQkJMHgxCkBAIC0xODEsMTUgKzIwOCw2IEBACiAjZGVmaW5lIFJYVFhfUkVHMTE0X1BRX1JFR19JTkRFWAk5CiAjZGVmaW5lIFJYVFhfUkVHMTE0X1BRX1JFR19XSURUSAk3CiAKLSNkZWZpbmUgUlhUWF8xMDAwMF9CTFdDCQkJMAotI2RlZmluZSBSWFRYXzEwMDAwX1BRCQkJMHgxZQotCi0jZGVmaW5lIFJYVFhfMjUwMF9CTFdDCQkJMQotI2RlZmluZSBSWFRYXzI1MDBfUFEJCQkweGEKLQotI2RlZmluZSBSWFRYXzEwMDBfQkxXQwkJCTEKLSNkZWZpbmUgUlhUWF8xMDAwX1BRCQkJMHhhCi0KIC8qIEJpdCBzZXR0aW5nIGFuZCBnZXR0aW5nIG1hY3JvcwogICogIFRoZSBnZXQgbWFjcm8gd2lsbCBleHRyYWN0IHRoZSBjdXJyZW50IGJpdCBmaWVsZCB2YWx1ZSBmcm9tIHdpdGhpbgogICogIHRoZSB2YXJpYWJsZQpAQCAtMjkxLDIzICszMDksNDQgQEAKIAlYUlhUWF9JT1dSSVRFKChfcHJpdiksIF9yZWcsIHJlZ192YWwpOwkJCQlcCiB9IHdoaWxlICgwKQogCitzdGF0aWMgY29uc3QgdTMyIGFtZF94Z2JlX3BoeV9zZXJkZXNfYmx3Y1tdID0geworCVNQRUVEXzEwMDBfQkxXQywKKwlTUEVFRF8yNTAwX0JMV0MsCisJU1BFRURfMTAwMDBfQkxXQywKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYW1kX3hnYmVfcGh5X3NlcmRlc19jZHJfcmF0ZVtdID0geworCVNQRUVEXzEwMDBfQ0RSLAorCVNQRUVEXzI1MDBfQ0RSLAorCVNQRUVEXzEwMDAwX0NEUiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgYW1kX3hnYmVfcGh5X3NlcmRlc19wcV9za2V3W10gPSB7CisJU1BFRURfMTAwMF9QUSwKKwlTUEVFRF8yNTAwX1BRLAorCVNQRUVEXzEwMDAwX1BRLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBhbWRfeGdiZV9waHlfc2VyZGVzX3R4X2FtcFtdID0geworCVNQRUVEXzEwMDBfVFhBTVAsCisJU1BFRURfMjUwMF9UWEFNUCwKKwlTUEVFRF8xMDAwMF9UWEFNUCwKK307CisKIGVudW0gYW1kX3hnYmVfcGh5X2FuIHsKIAlBTURfWEdCRV9BTl9SRUFEWSA9IDAsCi0JQU1EX1hHQkVfQU5fU1RBUlQsCi0JQU1EX1hHQkVfQU5fRVZFTlQsCiAJQU1EX1hHQkVfQU5fUEFHRV9SRUNFSVZFRCwKIAlBTURfWEdCRV9BTl9JTkNPTVBBVF9MSU5LLAogCUFNRF9YR0JFX0FOX0NPTVBMRVRFLAogCUFNRF9YR0JFX0FOX05PX0xJTkssCi0JQU1EX1hHQkVfQU5fRVhJVCwKIAlBTURfWEdCRV9BTl9FUlJPUiwKIH07CiAKIGVudW0gYW1kX3hnYmVfcGh5X3J4IHsKLQlBTURfWEdCRV9SWF9SRUFEWSA9IDAsCi0JQU1EX1hHQkVfUlhfQlBBLAorCUFNRF9YR0JFX1JYX0JQQSA9IDAsCiAJQU1EX1hHQkVfUlhfWE5QLAogCUFNRF9YR0JFX1JYX0NPTVBMRVRFLAorCUFNRF9YR0JFX1JYX0VSUk9SLAogfTsKIAogZW51bSBhbWRfeGdiZV9waHlfbW9kZSB7CkBAIC0zMTYsMTIgKzM1NSwxMyBAQAogfTsKIAogZW51bSBhbWRfeGdiZV9waHlfc3BlZWRzZXQgewotCUFNRF9YR0JFX1BIWV9TUEVFRFNFVF8xMDAwXzEwMDAwLAorCUFNRF9YR0JFX1BIWV9TUEVFRFNFVF8xMDAwXzEwMDAwID0gMCwKIAlBTURfWEdCRV9QSFlfU1BFRURTRVRfMjUwMF8xMDAwMCwKIH07CiAKIHN0cnVjdCBhbWRfeGdiZV9waHlfcHJpdiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXY7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKQEAgLTMzNiwxMCArMzc2LDI0IEBACiAJdm9pZCBfX2lvbWVtICpzaXIwX3JlZ3M7CS8qIFNlckRlcyBpbnRlZ3JhdGlvbiByZWdpc3RlcnMgKDEvMikgKi8KIAl2b2lkIF9faW9tZW0gKnNpcjFfcmVnczsJLyogU2VyRGVzIGludGVncmF0aW9uIHJlZ2lzdGVycyAoMi8yKSAqLwogCi0JLyogTWFpbnRhaW4gbGluayBzdGF0dXMgZm9yIHJlLXN0YXJ0aW5nIGF1dG8tbmVnb3RpYXRpb24gKi8KLQl1bnNpZ25lZCBpbnQgbGluazsKKwlpbnQgYW5faXJxOworCWNoYXIgYW5faXJxX25hbWVbSUZOQU1TSVogKyAzMl07CisJc3RydWN0IHdvcmtfc3RydWN0IGFuX2lycV93b3JrOworCXVuc2lnbmVkIGludCBhbl9pcnFfYWxsb2NhdGVkOworCiAJdW5zaWduZWQgaW50IHNwZWVkX3NldDsKIAorCS8qIFNlckRlcyBVRUZJIGNvbmZpZ3VyYWJsZSBzZXR0aW5ncy4KKwkgKiAgIFN3aXRjaGluZyBiZXR3ZWVuIG1vZGVzL3NwZWVkcyByZXF1aXJlcyBuZXcgdmFsdWVzIGZvciBzb21lCisJICogICBTZXJEZXMgc2V0dGluZ3MuICBUaGUgdmFsdWVzIGNhbiBiZSBzdXBwbGllZCBhcyBkZXZpY2UKKwkgKiAgIHByb3BlcnRpZXMgaW4gYXJyYXkgZm9ybWF0LiAgVGhlIGZpcnN0IGFycmF5IGVudHJ5IGlzIGZvcgorCSAqICAgMUdiRSwgc2Vjb25kIGZvciAyLjVHYkUgYW5kIHRoaXJkIGZvciAxMEdiRQorCSAqLworCXUzMiBzZXJkZXNfYmx3Y1tYR0JFX1BIWV9TUEVFRFNdOworCXUzMiBzZXJkZXNfY2RyX3JhdGVbWEdCRV9QSFlfU1BFRURTXTsKKwl1MzIgc2VyZGVzX3BxX3NrZXdbWEdCRV9QSFlfU1BFRURTXTsKKwl1MzIgc2VyZGVzX3R4X2FtcFtYR0JFX1BIWV9TUEVFRFNdOworCiAJLyogQXV0by1uZWdvdGlhdGlvbiBzdGF0ZSBtYWNoaW5lIHN1cHBvcnQgKi8KIAlzdHJ1Y3QgbXV0ZXggYW5fbXV0ZXg7CiAJZW51bSBhbWRfeGdiZV9waHlfYW4gYW5fcmVzdWx0OwpAQCAtMzQ4LDcgKzQwMiwxMSBAQAogCWVudW0gYW1kX3hnYmVfcGh5X3J4IGt4X3N0YXRlOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBhbl93b3JrOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICphbl93b3JrcXVldWU7CisJdW5zaWduZWQgaW50IGFuX3N1cHBvcnRlZDsKIAl1bnNpZ25lZCBpbnQgcGFyYWxsZWxfZGV0ZWN0OworCXVuc2lnbmVkIGludCBmZWNfYWJpbGl0eTsKKworCXVuc2lnbmVkIGludCBscG1fY3RybDsJCS8qIENUUkwxIGZvciByZXN1bWUgKi8KIH07CiAKIHN0YXRpYyBpbnQgYW1kX3hnYmVfYW5fZW5hYmxlX2tyX3RyYWluaW5nKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCkBAIC0zNTksNyArNDE3LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCB8PSAweDAyOworCXJldCB8PSBYR0JFX1BIWV9LUl9UUkFJTklOR19FTkFCTEU7CiAJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlJfUE1EX0NUUkwsIHJldCk7CiAKIAlyZXR1cm4gMDsKQEAgLTM3Myw3ICs0MzEsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ICY9IH4weDAyOworCXJldCAmPSB+WEdCRV9QSFlfS1JfVFJBSU5JTkdfRU5BQkxFOwogCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JSX1BNRF9DVFJMLCByZXQpOwogCiAJcmV0dXJuIDA7CkBAIC00NjYsMTIgKzUyNCwxNiBAQAogCiAJWFNJUjFfSU9XUklURV9CSVRTKHByaXYsIFNJUjFfU1BFRUQsIERBVEFSQVRFLCBTUEVFRF8xMDAwMF9SQVRFKTsKIAlYU0lSMV9JT1dSSVRFX0JJVFMocHJpdiwgU0lSMV9TUEVFRCwgV09SRE1PREUsIFNQRUVEXzEwMDAwX1dPUkQpOwotCVhTSVIxX0lPV1JJVEVfQklUUyhwcml2LCBTSVIxX1NQRUVELCBUWEFNUCwgU1BFRURfMTAwMDBfVFhBTVApOwogCVhTSVIxX0lPV1JJVEVfQklUUyhwcml2LCBTSVIxX1NQRUVELCBQTExTRUwsIFNQRUVEXzEwMDAwX1BMTCk7Ci0JWFNJUjFfSU9XUklURV9CSVRTKHByaXYsIFNJUjFfU1BFRUQsIFBJX1NQRF9TRUwsIFNQRUVEXzEwMDAwX0NEUik7CiAKLQlYUlhUWF9JT1dSSVRFX0JJVFMocHJpdiwgUlhUWF9SRUcyMCwgQkxXQ19FTkEsIFJYVFhfMTAwMDBfQkxXQyk7Ci0JWFJYVFhfSU9XUklURV9CSVRTKHByaXYsIFJYVFhfUkVHMTE0LCBQUV9SRUcsIFJYVFhfMTAwMDBfUFEpOworCVhTSVIxX0lPV1JJVEVfQklUUyhwcml2LCBTSVIxX1NQRUVELCBDRFJfUkFURSwKKwkJCSAgIHByaXYtPnNlcmRlc19jZHJfcmF0ZVtYR0JFX1BIWV9TUEVFRF8xMDAwMF0pOworCVhTSVIxX0lPV1JJVEVfQklUUyhwcml2LCBTSVIxX1NQRUVELCBUWEFNUCwKKwkJCSAgIHByaXYtPnNlcmRlc190eF9hbXBbWEdCRV9QSFlfU1BFRURfMTAwMDBdKTsKKwlYUlhUWF9JT1dSSVRFX0JJVFMocHJpdiwgUlhUWF9SRUcyMCwgQkxXQ19FTkEsCisJCQkgICBwcml2LT5zZXJkZXNfYmx3Y1tYR0JFX1BIWV9TUEVFRF8xMDAwMF0pOworCVhSWFRYX0lPV1JJVEVfQklUUyhwcml2LCBSWFRYX1JFRzExNCwgUFFfUkVHLAorCQkJICAgcHJpdi0+c2VyZGVzX3BxX3NrZXdbWEdCRV9QSFlfU1BFRURfMTAwMDBdKTsKIAogCWFtZF94Z2JlX3BoeV9zZXJkZXNfY29tcGxldGVfcmF0ZWNoYW5nZShwaHlkZXYpOwogCkBAIC01MTQsMTIgKzU3NiwxNiBAQAogCiAJWFNJUjFfSU9XUklURV9CSVRTKHByaXYsIFNJUjFfU1BFRUQsIERBVEFSQVRFLCBTUEVFRF8yNTAwX1JBVEUpOwogCVhTSVIxX0lPV1JJVEVfQklUUyhwcml2LCBTSVIxX1NQRUVELCBXT1JETU9ERSwgU1BFRURfMjUwMF9XT1JEKTsKLQlYU0lSMV9JT1dSSVRFX0JJVFMocHJpdiwgU0lSMV9TUEVFRCwgVFhBTVAsIFNQRUVEXzI1MDBfVFhBTVApOwogCVhTSVIxX0lPV1JJVEVfQklUUyhwcml2LCBTSVIxX1NQRUVELCBQTExTRUwsIFNQRUVEXzI1MDBfUExMKTsKLQlYU0lSMV9JT1dSSVRFX0JJVFMocHJpdiwgU0lSMV9TUEVFRCwgUElfU1BEX1NFTCwgU1BFRURfMjUwMF9DRFIpOwogCi0JWFJYVFhfSU9XUklURV9CSVRTKHByaXYsIFJYVFhfUkVHMjAsIEJMV0NfRU5BLCBSWFRYXzI1MDBfQkxXQyk7Ci0JWFJYVFhfSU9XUklURV9CSVRTKHByaXYsIFJYVFhfUkVHMTE0LCBQUV9SRUcsIFJYVFhfMjUwMF9QUSk7CisJWFNJUjFfSU9XUklURV9CSVRTKHByaXYsIFNJUjFfU1BFRUQsIENEUl9SQVRFLAorCQkJICAgcHJpdi0+c2VyZGVzX2Nkcl9yYXRlW1hHQkVfUEhZX1NQRUVEXzI1MDBdKTsKKwlYU0lSMV9JT1dSSVRFX0JJVFMocHJpdiwgU0lSMV9TUEVFRCwgVFhBTVAsCisJCQkgICBwcml2LT5zZXJkZXNfdHhfYW1wW1hHQkVfUEhZX1NQRUVEXzI1MDBdKTsKKwlYUlhUWF9JT1dSSVRFX0JJVFMocHJpdiwgUlhUWF9SRUcyMCwgQkxXQ19FTkEsCisJCQkgICBwcml2LT5zZXJkZXNfYmx3Y1tYR0JFX1BIWV9TUEVFRF8yNTAwXSk7CisJWFJYVFhfSU9XUklURV9CSVRTKHByaXYsIFJYVFhfUkVHMTE0LCBQUV9SRUcsCisJCQkgICBwcml2LT5zZXJkZXNfcHFfc2tld1tYR0JFX1BIWV9TUEVFRF8yNTAwXSk7CiAKIAlhbWRfeGdiZV9waHlfc2VyZGVzX2NvbXBsZXRlX3JhdGVjaGFuZ2UocGh5ZGV2KTsKIApAQCAtNTYyLDEyICs2MjgsMTYgQEAKIAogCVhTSVIxX0lPV1JJVEVfQklUUyhwcml2LCBTSVIxX1NQRUVELCBEQVRBUkFURSwgU1BFRURfMTAwMF9SQVRFKTsKIAlYU0lSMV9JT1dSSVRFX0JJVFMocHJpdiwgU0lSMV9TUEVFRCwgV09SRE1PREUsIFNQRUVEXzEwMDBfV09SRCk7Ci0JWFNJUjFfSU9XUklURV9CSVRTKHByaXYsIFNJUjFfU1BFRUQsIFRYQU1QLCBTUEVFRF8xMDAwX1RYQU1QKTsKIAlYU0lSMV9JT1dSSVRFX0JJVFMocHJpdiwgU0lSMV9TUEVFRCwgUExMU0VMLCBTUEVFRF8xMDAwX1BMTCk7Ci0JWFNJUjFfSU9XUklURV9CSVRTKHByaXYsIFNJUjFfU1BFRUQsIFBJX1NQRF9TRUwsIFNQRUVEXzEwMDBfQ0RSKTsKIAotCVhSWFRYX0lPV1JJVEVfQklUUyhwcml2LCBSWFRYX1JFRzIwLCBCTFdDX0VOQSwgUlhUWF8xMDAwX0JMV0MpOwotCVhSWFRYX0lPV1JJVEVfQklUUyhwcml2LCBSWFRYX1JFRzExNCwgUFFfUkVHLCBSWFRYXzEwMDBfUFEpOworCVhTSVIxX0lPV1JJVEVfQklUUyhwcml2LCBTSVIxX1NQRUVELCBDRFJfUkFURSwKKwkJCSAgIHByaXYtPnNlcmRlc19jZHJfcmF0ZVtYR0JFX1BIWV9TUEVFRF8xMDAwXSk7CisJWFNJUjFfSU9XUklURV9CSVRTKHByaXYsIFNJUjFfU1BFRUQsIFRYQU1QLAorCQkJICAgcHJpdi0+c2VyZGVzX3R4X2FtcFtYR0JFX1BIWV9TUEVFRF8xMDAwXSk7CisJWFJYVFhfSU9XUklURV9CSVRTKHByaXYsIFJYVFhfUkVHMjAsIEJMV0NfRU5BLAorCQkJICAgcHJpdi0+c2VyZGVzX2Jsd2NbWEdCRV9QSFlfU1BFRURfMTAwMF0pOworCVhSWFRYX0lPV1JJVEVfQklUUyhwcml2LCBSWFRYX1JFRzExNCwgUFFfUkVHLAorCQkJICAgcHJpdi0+c2VyZGVzX3BxX3NrZXdbWEdCRV9QSFlfU1BFRURfMTAwMF0pOwogCiAJYW1kX3hnYmVfcGh5X3NlcmRlc19jb21wbGV0ZV9yYXRlY2hhbmdlKHBoeWRldik7CiAKQEAgLTYzNSw2ICs3MDUsMzggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGFtZF94Z2JlX3BoeV9zZXRfYW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUsCisJCQkgICAgICAgYm9vbCByZXN0YXJ0KQoreworCWludCByZXQ7CisKKwlyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19DVFJMMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgJj0gfk1ESU9fQU5fQ1RSTDFfRU5BQkxFOworCisJaWYgKGVuYWJsZSkKKwkJcmV0IHw9IE1ESU9fQU5fQ1RSTDFfRU5BQkxFOworCisJaWYgKHJlc3RhcnQpCisJCXJldCB8PSBNRElPX0FOX0NUUkwxX1JFU1RBUlQ7CisKKwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQ1RSTDEsIHJldCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhbWRfeGdiZV9waHlfcmVzdGFydF9hbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCXJldHVybiBhbWRfeGdiZV9waHlfc2V0X2FuKHBoeWRldiwgdHJ1ZSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQgYW1kX3hnYmVfcGh5X2Rpc2FibGVfYW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlyZXR1cm4gYW1kX3hnYmVfcGh5X3NldF9hbihwaHlkZXYsIGZhbHNlLCBmYWxzZSk7Cit9CisKIHN0YXRpYyBlbnVtIGFtZF94Z2JlX3BoeV9hbiBhbWRfeGdiZV9hbl90eF90cmFpbmluZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAogCQkJCQkJICAgIGVudW0gYW1kX3hnYmVfcGh5X3J4ICpzdGF0ZSkKIHsKQEAgLTY0NSw3ICs3NDcsNyBAQAogCiAJLyogSWYgd2UncmUgbm90IGluIEtSIG1vZGUgdGhlbiB3ZSdyZSBkb25lICovCiAJaWYgKCFhbWRfeGdiZV9waHlfaW5fa3JfbW9kZShwaHlkZXYpKQotCQlyZXR1cm4gQU1EX1hHQkVfQU5fRVZFTlQ7CisJCXJldHVybiBBTURfWEdCRV9BTl9QQUdFX1JFQ0VJVkVEOwogCiAJLyogRW5hYmxlL0Rpc2FibGUgRkVDICovCiAJYWRfcmVnID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fQURWRVJUSVNFICsgMik7CkBAIC02NjAsMTAgKzc2Miw5IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiBBTURfWEdCRV9BTl9FUlJPUjsKIAorCXJldCAmPSB+WEdCRV9QSFlfRkVDX01BU0s7CiAJaWYgKChhZF9yZWcgJiAweGMwMDApICYmIChscF9yZWcgJiAweGMwMDApKQotCQlyZXQgfD0gMHgwMTsKLQllbHNlCi0JCXJldCAmPSB+MHgwMTsKKwkJcmV0IHw9IHByaXYtPmZlY19hYmlsaXR5OwogCiAJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlJfRkVDX0NUUkwsIHJldCk7CiAKQEAgLTY3MiwxNCArNzczLDE3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiBBTURfWEdCRV9BTl9FUlJPUjsKIAotCVhTSVIwX0lPV1JJVEVfQklUUyhwcml2LCBTSVIwX0tSX1JUXzEsIFJFU0VULCAxKTsKKwlpZiAocmV0ICYgWEdCRV9QSFlfS1JfVFJBSU5JTkdfRU5BQkxFKSB7CisJCVhTSVIwX0lPV1JJVEVfQklUUyhwcml2LCBTSVIwX0tSX1JUXzEsIFJFU0VULCAxKTsKIAotCXJldCB8PSAweDAxOwotCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JSX1BNRF9DVFJMLCByZXQpOworCQlyZXQgfD0gWEdCRV9QSFlfS1JfVFJBSU5JTkdfU1RBUlQ7CisJCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JSX1BNRF9DVFJMLAorCQkJICAgICAgcmV0KTsKIAotCVhTSVIwX0lPV1JJVEVfQklUUyhwcml2LCBTSVIwX0tSX1JUXzEsIFJFU0VULCAwKTsKKwkJWFNJUjBfSU9XUklURV9CSVRTKHByaXYsIFNJUjBfS1JfUlRfMSwgUkVTRVQsIDApOworCX0KIAotCXJldHVybiBBTURfWEdCRV9BTl9FVkVOVDsKKwlyZXR1cm4gQU1EX1hHQkVfQU5fUEFHRV9SRUNFSVZFRDsKIH0KIAogc3RhdGljIGVudW0gYW1kX3hnYmVfcGh5X2FuIGFtZF94Z2JlX2FuX3R4X3hucChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LApAQCAtNjk2LDcgKzgwMCw3IEBACiAJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX1hOUCArIDEsIDApOwogCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9YTlAsIG1zZyk7CiAKLQlyZXR1cm4gQU1EX1hHQkVfQU5fRVZFTlQ7CisJcmV0dXJuIEFNRF9YR0JFX0FOX1BBR0VfUkVDRUlWRUQ7CiB9CiAKIHN0YXRpYyBlbnVtIGFtZF94Z2JlX3BoeV9hbiBhbWRfeGdiZV9hbl9yeF9icGEoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKQEAgLTczNSwxMSArODM5LDExIEBACiAJaW50IGFkX3JlZywgbHBfcmVnOwogCiAJLyogQ2hlY2sgRXh0ZW5kZWQgTmV4dCBQYWdlIHN1cHBvcnQgKi8KLQlhZF9yZWcgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9BRFZFUlRJU0UpOworCWFkX3JlZyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX1hOUCk7CiAJaWYgKGFkX3JlZyA8IDApCiAJCXJldHVybiBBTURfWEdCRV9BTl9FUlJPUjsKIAotCWxwX3JlZyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0xQQSk7CisJbHBfcmVnID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fTFBYKTsKIAlpZiAobHBfcmVnIDwgMCkKIAkJcmV0dXJuIEFNRF9YR0JFX0FOX0VSUk9SOwogCkBAIC03NDgsMTE2ICs4NTIsNiBAQAogCSAgICAgICBhbWRfeGdiZV9hbl90eF90cmFpbmluZyhwaHlkZXYsIHN0YXRlKTsKIH0KIAotc3RhdGljIGVudW0gYW1kX3hnYmVfcGh5X2FuIGFtZF94Z2JlX2FuX3N0YXJ0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCi17Ci0Jc3RydWN0IGFtZF94Z2JlX3BoeV9wcml2ICpwcml2ID0gcGh5ZGV2LT5wcml2OwotCWludCByZXQ7Ci0KLQkvKiBCZSBzdXJlIHdlIGFyZW4ndCBsb29waW5nIHRyeWluZyB0byBuZWdvdGlhdGUgKi8KLQlpZiAoYW1kX3hnYmVfcGh5X2luX2tyX21vZGUocGh5ZGV2KSkgewotCQlpZiAocHJpdi0+a3Jfc3RhdGUgIT0gQU1EX1hHQkVfUlhfUkVBRFkpCi0JCQlyZXR1cm4gQU1EX1hHQkVfQU5fTk9fTElOSzsKLQkJcHJpdi0+a3Jfc3RhdGUgPSBBTURfWEdCRV9SWF9CUEE7Ci0JfSBlbHNlIHsKLQkJaWYgKHByaXYtPmt4X3N0YXRlICE9IEFNRF9YR0JFX1JYX1JFQURZKQotCQkJcmV0dXJuIEFNRF9YR0JFX0FOX05PX0xJTks7Ci0JCXByaXYtPmt4X3N0YXRlID0gQU1EX1hHQkVfUlhfQlBBOwotCX0KLQotCS8qIFNldCB1cCBBZHZlcnRpc2VtZW50IHJlZ2lzdGVyIDMgZmlyc3QgKi8KLQlyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9BRFZFUlRJU0UgKyAyKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIEFNRF9YR0JFX0FOX0VSUk9SOwotCi0JaWYgKHBoeWRldi0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDAwYmFzZVJfRkVDKQotCQlyZXQgfD0gMHhjMDAwOwotCWVsc2UKLQkJcmV0ICY9IH4weGMwMDA7Ci0KLQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fQURWRVJUSVNFICsgMiwgcmV0KTsKLQotCS8qIFNldCB1cCBBZHZlcnRpc2VtZW50IHJlZ2lzdGVyIDIgbmV4dCAqLwotCXJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0FEVkVSVElTRSArIDEpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gQU1EX1hHQkVfQU5fRVJST1I7Ci0KLQlpZiAocGh5ZGV2LT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlS1JfRnVsbCkKLQkJcmV0IHw9IDB4ODA7Ci0JZWxzZQotCQlyZXQgJj0gfjB4ODA7Ci0KLQlpZiAoKHBoeWRldi0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDBiYXNlS1hfRnVsbCkgfHwKLQkgICAgKHBoeWRldi0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsKSkKLQkJcmV0IHw9IDB4MjA7Ci0JZWxzZQotCQlyZXQgJj0gfjB4MjA7Ci0KLQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fQURWRVJUSVNFICsgMSwgcmV0KTsKLQotCS8qIFNldCB1cCBBZHZlcnRpc2VtZW50IHJlZ2lzdGVyIDEgbGFzdCAqLwotCXJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0FEVkVSVElTRSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiBBTURfWEdCRV9BTl9FUlJPUjsKLQotCWlmIChwaHlkZXYtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF9QYXVzZSkKLQkJcmV0IHw9IDB4NDAwOwotCWVsc2UKLQkJcmV0ICY9IH4weDQwMDsKLQotCWlmIChwaHlkZXYtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKQotCQlyZXQgfD0gMHg4MDA7Ci0JZWxzZQotCQlyZXQgJj0gfjB4ODAwOwotCi0JLyogV2UgZG9uJ3QgaW50ZW5kIHRvIHBlcmZvcm0gWE5QICovCi0JcmV0ICY9IH5YTlBfTlBfRVhDSEFOR0U7Ci0KLQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fQURWRVJUSVNFLCByZXQpOwotCi0JLyogRW5hYmxlIGFuZCBzdGFydCBhdXRvLW5lZ290aWF0aW9uICovCi0JcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0lOVCwgMCk7Ci0KLQlyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9LUl9DVFJMKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIEFNRF9YR0JFX0FOX0VSUk9SOwotCi0JcmV0IHw9IE1ESU9fS1JfQ1RSTF9QREVURUNUOwotCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9LUl9DVFJMLCByZXQpOwotCi0JcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQ1RSTDEpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gQU1EX1hHQkVfQU5fRVJST1I7Ci0KLQlyZXQgfD0gTURJT19BTl9DVFJMMV9FTkFCTEU7Ci0JcmV0IHw9IE1ESU9fQU5fQ1RSTDFfUkVTVEFSVDsKLQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQ1RSTDEsIHJldCk7Ci0KLQlyZXR1cm4gQU1EX1hHQkVfQU5fRVZFTlQ7Ci19Ci0KLXN0YXRpYyBlbnVtIGFtZF94Z2JlX3BoeV9hbiBhbWRfeGdiZV9hbl9ldmVudChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQotewotCWVudW0gYW1kX3hnYmVfcGh5X2FuIG5ld19zdGF0ZTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fSU5UKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIEFNRF9YR0JFX0FOX0VSUk9SOwotCi0JbmV3X3N0YXRlID0gQU1EX1hHQkVfQU5fRVZFTlQ7Ci0JaWYgKHJldCAmIFhHQkVfQU5fUEdfUkNWKQotCQluZXdfc3RhdGUgPSBBTURfWEdCRV9BTl9QQUdFX1JFQ0VJVkVEOwotCWVsc2UgaWYgKHJldCAmIFhHQkVfQU5fSU5DX0xJTkspCi0JCW5ld19zdGF0ZSA9IEFNRF9YR0JFX0FOX0lOQ09NUEFUX0xJTks7Ci0JZWxzZSBpZiAocmV0ICYgWEdCRV9BTl9JTlRfQ01QTFQpCi0JCW5ld19zdGF0ZSA9IEFNRF9YR0JFX0FOX0NPTVBMRVRFOwotCi0JaWYgKG5ld19zdGF0ZSAhPSBBTURfWEdCRV9BTl9FVkVOVCkKLQkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0lOVCwgMCk7Ci0KLQlyZXR1cm4gbmV3X3N0YXRlOwotfQotCiBzdGF0aWMgZW51bSBhbWRfeGdiZV9waHlfYW4gYW1kX3hnYmVfYW5fcGFnZV9yZWNlaXZlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewogCXN0cnVjdCBhbWRfeGdiZV9waHlfcHJpdiAqcHJpdiA9IHBoeWRldi0+cHJpdjsKQEAgLTg4NSwxMyArODc5LDY3IEBACiAKIHN0YXRpYyBlbnVtIGFtZF94Z2JlX3BoeV9hbiBhbWRfeGdiZV9hbl9pbmNvbXBhdF9saW5rKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CisJc3RydWN0IGFtZF94Z2JlX3BoeV9wcml2ICpwcml2ID0gcGh5ZGV2LT5wcml2OwogCWludCByZXQ7CiAKKwkvKiBCZSBzdXJlIHdlIGFyZW4ndCBsb29waW5nIHRyeWluZyB0byBuZWdvdGlhdGUgKi8KKwlpZiAoYW1kX3hnYmVfcGh5X2luX2tyX21vZGUocGh5ZGV2KSkgeworCQlwcml2LT5rcl9zdGF0ZSA9IEFNRF9YR0JFX1JYX0VSUk9SOworCisJCWlmICghKHBoeWRldi0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDBiYXNlS1hfRnVsbCkgJiYKKwkJICAgICEocGh5ZGV2LT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMjUwMGJhc2VYX0Z1bGwpKQorCQkJcmV0dXJuIEFNRF9YR0JFX0FOX05PX0xJTks7CisKKwkJaWYgKHByaXYtPmt4X3N0YXRlICE9IEFNRF9YR0JFX1JYX0JQQSkKKwkJCXJldHVybiBBTURfWEdCRV9BTl9OT19MSU5LOworCX0gZWxzZSB7CisJCXByaXYtPmt4X3N0YXRlID0gQU1EX1hHQkVfUlhfRVJST1I7CisKKwkJaWYgKCEocGh5ZGV2LT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlS1JfRnVsbCkpCisJCQlyZXR1cm4gQU1EX1hHQkVfQU5fTk9fTElOSzsKKworCQlpZiAocHJpdi0+a3Jfc3RhdGUgIT0gQU1EX1hHQkVfUlhfQlBBKQorCQkJcmV0dXJuIEFNRF9YR0JFX0FOX05PX0xJTks7CisJfQorCisJcmV0ID0gYW1kX3hnYmVfcGh5X2Rpc2FibGVfYW4ocGh5ZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gQU1EX1hHQkVfQU5fRVJST1I7CisKIAlyZXQgPSBhbWRfeGdiZV9waHlfc3dpdGNoX21vZGUocGh5ZGV2KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gQU1EX1hHQkVfQU5fRVJST1I7CiAKLQlyZXR1cm4gQU1EX1hHQkVfQU5fU1RBUlQ7CisJcmV0ID0gYW1kX3hnYmVfcGh5X3Jlc3RhcnRfYW4ocGh5ZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gQU1EX1hHQkVfQU5fRVJST1I7CisKKwlyZXR1cm4gQU1EX1hHQkVfQU5fSU5DT01QQVRfTElOSzsKK30KKworc3RhdGljIGlycXJldHVybl90IGFtZF94Z2JlX2FuX2lzcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhbWRfeGdiZV9waHlfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgYW1kX3hnYmVfcGh5X3ByaXYgKilkYXRhOworCisJLyogSW50ZXJydXB0IHJlYXNvbiBtdXN0IGJlIHJlYWQgYW5kIGNsZWFyZWQgb3V0c2lkZSBvZiBJUlEgY29udGV4dCAqLworCWRpc2FibGVfaXJxX25vc3luYyhwcml2LT5hbl9pcnEpOworCisJcXVldWVfd29yayhwcml2LT5hbl93b3JrcXVldWUsICZwcml2LT5hbl9pcnFfd29yayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF94Z2JlX2FuX2lycV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgYW1kX3hnYmVfcGh5X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywKKwkJCQkJCSAgICAgIHN0cnVjdCBhbWRfeGdiZV9waHlfcHJpdiwKKwkJCQkJCSAgICAgIGFuX2lycV93b3JrKTsKKworCS8qIEF2b2lkIGEgcmFjZSBiZXR3ZWVuIGVuYWJsaW5nIHRoZSBJUlEgYW5kIGV4aXRpbmcgdGhlIHdvcmsgYnkKKwkgKiB3YWl0aW5nIGZvciB0aGUgd29yayB0byBmaW5pc2ggYW5kIHRoZW4gcXVldWVpbmcgaXQKKwkgKi8KKwlmbHVzaF93b3JrKCZwcml2LT5hbl93b3JrKTsKKwlxdWV1ZV93b3JrKHByaXYtPmFuX3dvcmtxdWV1ZSwgJnByaXYtPmFuX3dvcmspOwogfQogCiBzdGF0aWMgdm9pZCBhbWRfeGdiZV9hbl9zdGF0ZV9tYWNoaW5lKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTkwMCw3NiArOTQ4LDE2MSBAQAogCQkJCQkJICAgICAgc3RydWN0IGFtZF94Z2JlX3BoeV9wcml2LAogCQkJCQkJICAgICAgYW5fd29yayk7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHByaXYtPnBoeWRldjsKLQllbnVtIGFtZF94Z2JlX3BoeV9hbiBjdXJfc3RhdGU7Ci0JaW50IHNsZWVwOwotCXVuc2lnbmVkIGludCBhbl9zdXBwb3J0ZWQgPSAwOworCWVudW0gYW1kX3hnYmVfcGh5X2FuIGN1cl9zdGF0ZSA9IHByaXYtPmFuX3N0YXRlOworCWludCBpbnRfcmVnLCBpbnRfbWFzazsKIAotCS8qIFN0YXJ0IGluIEtYIG1vZGUgKi8KLQlpZiAoYW1kX3hnYmVfcGh5X3NldF9tb2RlKHBoeWRldiwgQU1EX1hHQkVfTU9ERV9LWCkpCisJbXV0ZXhfbG9jaygmcHJpdi0+YW5fbXV0ZXgpOworCisJLyogUmVhZCB0aGUgaW50ZXJydXB0ICovCisJaW50X3JlZyA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0lOVCk7CisJaWYgKCFpbnRfcmVnKQorCQlnb3RvIG91dDsKKworbmV4dF9pbnQ6CisJaWYgKGludF9yZWcgPCAwKSB7CiAJCXByaXYtPmFuX3N0YXRlID0gQU1EX1hHQkVfQU5fRVJST1I7Ci0KLQl3aGlsZSAoMSkgewotCQltdXRleF9sb2NrKCZwcml2LT5hbl9tdXRleCk7Ci0KLQkJY3VyX3N0YXRlID0gcHJpdi0+YW5fc3RhdGU7Ci0KLQkJc3dpdGNoIChwcml2LT5hbl9zdGF0ZSkgewotCQljYXNlIEFNRF9YR0JFX0FOX1NUQVJUOgotCQkJYW5fc3VwcG9ydGVkID0gMDsKLQkJCXByaXYtPnBhcmFsbGVsX2RldGVjdCA9IDA7Ci0JCQlwcml2LT5hbl9zdGF0ZSA9IGFtZF94Z2JlX2FuX3N0YXJ0KHBoeWRldik7Ci0JCQlicmVhazsKLQotCQljYXNlIEFNRF9YR0JFX0FOX0VWRU5UOgotCQkJcHJpdi0+YW5fc3RhdGUgPSBhbWRfeGdiZV9hbl9ldmVudChwaHlkZXYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBTURfWEdCRV9BTl9QQUdFX1JFQ0VJVkVEOgotCQkJcHJpdi0+YW5fc3RhdGUgPSBhbWRfeGdiZV9hbl9wYWdlX3JlY2VpdmVkKHBoeWRldik7Ci0JCQlhbl9zdXBwb3J0ZWQrKzsKLQkJCWJyZWFrOwotCi0JCWNhc2UgQU1EX1hHQkVfQU5fSU5DT01QQVRfTElOSzoKLQkJCXByaXYtPmFuX3N0YXRlID0gYW1kX3hnYmVfYW5faW5jb21wYXRfbGluayhwaHlkZXYpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBBTURfWEdCRV9BTl9DT01QTEVURToKLQkJCXByaXYtPnBhcmFsbGVsX2RldGVjdCA9IGFuX3N1cHBvcnRlZCA/IDAgOiAxOwotCQkJbmV0ZGV2X2luZm8ocGh5ZGV2LT5hdHRhY2hlZF9kZXYsICIlcyBzdWNjZXNzZnVsXG4iLAotCQkJCSAgICBhbl9zdXBwb3J0ZWQgPyAiQXV0byBuZWdvdGlhdGlvbiIKLQkJCQkJCSA6ICJQYXJhbGxlbCBkZXRlY3Rpb24iKTsKLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCi0JCWNhc2UgQU1EX1hHQkVfQU5fTk9fTElOSzoKLQkJY2FzZSBBTURfWEdCRV9BTl9FWElUOgotCQkJZ290byBleGl0X3VubG9jazsKLQotCQlkZWZhdWx0OgotCQkJcHJpdi0+YW5fc3RhdGUgPSBBTURfWEdCRV9BTl9FUlJPUjsKLQkJfQotCi0JCWlmIChwcml2LT5hbl9zdGF0ZSA9PSBBTURfWEdCRV9BTl9FUlJPUikgewotCQkJbmV0ZGV2X2VycihwaHlkZXYtPmF0dGFjaGVkX2RldiwKLQkJCQkgICAiZXJyb3IgZHVyaW5nIGF1dG8tbmVnb3RpYXRpb24sIHN0YXRlPSV1XG4iLAotCQkJCSAgIGN1cl9zdGF0ZSk7Ci0JCQlnb3RvIGV4aXRfdW5sb2NrOwotCQl9Ci0KLQkJc2xlZXAgPSAocHJpdi0+YW5fc3RhdGUgPT0gQU1EX1hHQkVfQU5fRVZFTlQpID8gMSA6IDA7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5hbl9tdXRleCk7Ci0KLQkJaWYgKHNsZWVwKQotCQkJdXNsZWVwX3JhbmdlKDIwLCA1MCk7CisJCWludF9tYXNrID0gWEdCRV9BTl9JTlRfTUFTSzsKKwl9IGVsc2UgaWYgKGludF9yZWcgJiBYR0JFX0FOX1BHX1JDVikgeworCQlwcml2LT5hbl9zdGF0ZSA9IEFNRF9YR0JFX0FOX1BBR0VfUkVDRUlWRUQ7CisJCWludF9tYXNrID0gWEdCRV9BTl9QR19SQ1Y7CisJfSBlbHNlIGlmIChpbnRfcmVnICYgWEdCRV9BTl9JTkNfTElOSykgeworCQlwcml2LT5hbl9zdGF0ZSA9IEFNRF9YR0JFX0FOX0lOQ09NUEFUX0xJTks7CisJCWludF9tYXNrID0gWEdCRV9BTl9JTkNfTElOSzsKKwl9IGVsc2UgaWYgKGludF9yZWcgJiBYR0JFX0FOX0lOVF9DTVBMVCkgeworCQlwcml2LT5hbl9zdGF0ZSA9IEFNRF9YR0JFX0FOX0NPTVBMRVRFOworCQlpbnRfbWFzayA9IFhHQkVfQU5fSU5UX0NNUExUOworCX0gZWxzZSB7CisJCXByaXYtPmFuX3N0YXRlID0gQU1EX1hHQkVfQU5fRVJST1I7CisJCWludF9tYXNrID0gMDsKIAl9CiAKLWV4aXRfdW5sb2NrOgorCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgdG8gYmUgcHJvY2Vzc2VkICovCisJaW50X3JlZyAmPSB+aW50X21hc2s7CisJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0lOVCwgaW50X3JlZyk7CisKIAlwcml2LT5hbl9yZXN1bHQgPSBwcml2LT5hbl9zdGF0ZTsKLQlwcml2LT5hbl9zdGF0ZSA9IEFNRF9YR0JFX0FOX1JFQURZOworCithZ2FpbjoKKwljdXJfc3RhdGUgPSBwcml2LT5hbl9zdGF0ZTsKKworCXN3aXRjaCAocHJpdi0+YW5fc3RhdGUpIHsKKwljYXNlIEFNRF9YR0JFX0FOX1JFQURZOgorCQlwcml2LT5hbl9zdXBwb3J0ZWQgPSAwOworCQlicmVhazsKKworCWNhc2UgQU1EX1hHQkVfQU5fUEFHRV9SRUNFSVZFRDoKKwkJcHJpdi0+YW5fc3RhdGUgPSBhbWRfeGdiZV9hbl9wYWdlX3JlY2VpdmVkKHBoeWRldik7CisJCXByaXYtPmFuX3N1cHBvcnRlZCsrOworCQlicmVhazsKKworCWNhc2UgQU1EX1hHQkVfQU5fSU5DT01QQVRfTElOSzoKKwkJcHJpdi0+YW5fc3VwcG9ydGVkID0gMDsKKwkJcHJpdi0+cGFyYWxsZWxfZGV0ZWN0ID0gMDsKKwkJcHJpdi0+YW5fc3RhdGUgPSBhbWRfeGdiZV9hbl9pbmNvbXBhdF9saW5rKHBoeWRldik7CisJCWJyZWFrOworCisJY2FzZSBBTURfWEdCRV9BTl9DT01QTEVURToKKwkJcHJpdi0+cGFyYWxsZWxfZGV0ZWN0ID0gcHJpdi0+YW5fc3VwcG9ydGVkID8gMCA6IDE7CisJCW5ldGRldl9kYmcocGh5ZGV2LT5hdHRhY2hlZF9kZXYsICIlcyBzdWNjZXNzZnVsXG4iLAorCQkJICAgcHJpdi0+YW5fc3VwcG9ydGVkID8gIkF1dG8gbmVnb3RpYXRpb24iCisJCQkJCSAgICAgIDogIlBhcmFsbGVsIGRldGVjdGlvbiIpOworCQlicmVhazsKKworCWNhc2UgQU1EX1hHQkVfQU5fTk9fTElOSzoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcml2LT5hbl9zdGF0ZSA9IEFNRF9YR0JFX0FOX0VSUk9SOworCX0KKworCWlmIChwcml2LT5hbl9zdGF0ZSA9PSBBTURfWEdCRV9BTl9OT19MSU5LKSB7CisJCWludF9yZWcgPSAwOworCQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fSU5ULCAwKTsKKwl9IGVsc2UgaWYgKHByaXYtPmFuX3N0YXRlID09IEFNRF9YR0JFX0FOX0VSUk9SKSB7CisJCW5ldGRldl9lcnIocGh5ZGV2LT5hdHRhY2hlZF9kZXYsCisJCQkgICAiZXJyb3IgZHVyaW5nIGF1dG8tbmVnb3RpYXRpb24sIHN0YXRlPSV1XG4iLAorCQkJICAgY3VyX3N0YXRlKTsKKworCQlpbnRfcmVnID0gMDsKKwkJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0lOVCwgMCk7CisJfQorCisJaWYgKHByaXYtPmFuX3N0YXRlID49IEFNRF9YR0JFX0FOX0NPTVBMRVRFKSB7CisJCXByaXYtPmFuX3Jlc3VsdCA9IHByaXYtPmFuX3N0YXRlOworCQlwcml2LT5hbl9zdGF0ZSA9IEFNRF9YR0JFX0FOX1JFQURZOworCQlwcml2LT5rcl9zdGF0ZSA9IEFNRF9YR0JFX1JYX0JQQTsKKwkJcHJpdi0+a3hfc3RhdGUgPSBBTURfWEdCRV9SWF9CUEE7CisJfQorCisJaWYgKGN1cl9zdGF0ZSAhPSBwcml2LT5hbl9zdGF0ZSkKKwkJZ290byBhZ2FpbjsKKworCWlmIChpbnRfcmVnKQorCQlnb3RvIG5leHRfaW50OworCitvdXQ6CisJZW5hYmxlX2lycShwcml2LT5hbl9pcnEpOwogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5hbl9tdXRleCk7CiB9CiAKK3N0YXRpYyBpbnQgYW1kX3hnYmVfYW5faW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCWludCByZXQ7CisKKwkvKiBTZXQgdXAgQWR2ZXJ0aXNlbWVudCByZWdpc3RlciAzIGZpcnN0ICovCisJcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fQURWRVJUSVNFICsgMik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAocGh5ZGV2LT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlUl9GRUMpCisJCXJldCB8PSAweGMwMDA7CisJZWxzZQorCQlyZXQgJj0gfjB4YzAwMDsKKworCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9BRFZFUlRJU0UgKyAyLCByZXQpOworCisJLyogU2V0IHVwIEFkdmVydGlzZW1lbnQgcmVnaXN0ZXIgMiBuZXh0ICovCisJcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fQURWRVJUSVNFICsgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAocGh5ZGV2LT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMDBiYXNlS1JfRnVsbCkKKwkJcmV0IHw9IDB4ODA7CisJZWxzZQorCQlyZXQgJj0gfjB4ODA7CisKKwlpZiAoKHBoeWRldi0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDBiYXNlS1hfRnVsbCkgfHwKKwkgICAgKHBoeWRldi0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsKSkKKwkJcmV0IHw9IDB4MjA7CisJZWxzZQorCQlyZXQgJj0gfjB4MjA7CisKKwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fQURWRVJUSVNFICsgMSwgcmV0KTsKKworCS8qIFNldCB1cCBBZHZlcnRpc2VtZW50IHJlZ2lzdGVyIDEgbGFzdCAqLworCXJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0FEVkVSVElTRSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAocGh5ZGV2LT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfUGF1c2UpCisJCXJldCB8PSAweDQwMDsKKwllbHNlCisJCXJldCAmPSB+MHg0MDA7CisKKwlpZiAocGh5ZGV2LT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfQXN5bV9QYXVzZSkKKwkJcmV0IHw9IDB4ODAwOworCWVsc2UKKwkJcmV0ICY9IH4weDgwMDsKKworCS8qIFdlIGRvbid0IGludGVuZCB0byBwZXJmb3JtIFhOUCAqLworCXJldCAmPSB+WE5QX05QX0VYQ0hBTkdFOworCisJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0FEVkVSVElTRSwgcmV0KTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGFtZF94Z2JlX3BoeV9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJaW50IGNvdW50LCByZXQ7CkBAIC05OTIsMjAgKzExMjUsNTcgQEAKIAlpZiAocmV0ICYgTURJT19DVFJMMV9SRVNFVCkKIAkJcmV0dXJuIC1FVElNRURPVVQ7CiAKLQkvKiBNYWtlIHN1cmUgdGhlIFhQQ1MgYW5kIFNlckRlcyBhcmUgaW4gY29tcGF0aWJsZSBzdGF0ZXMgKi8KLQlyZXR1cm4gYW1kX3hnYmVfcGh5X3hnbWlpX21vZGUocGh5ZGV2KTsKKwkvKiBEaXNhYmxlIGF1dG8tbmVnb3RpYXRpb24gZm9yIG5vdyAqLworCXJldCA9IGFtZF94Z2JlX3BoeV9kaXNhYmxlX2FuKHBoeWRldik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBDbGVhciBhdXRvLW5lZ290aWF0aW9uIGludGVycnVwdHMgKi8KKwlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fSU5ULCAwKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFtZF94Z2JlX3BoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewogCXN0cnVjdCBhbWRfeGdiZV9waHlfcHJpdiAqcHJpdiA9IHBoeWRldi0+cHJpdjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGh5ZGV2LT5hdHRhY2hlZF9kZXY7CisJaW50IHJldDsKKworCWlmICghcHJpdi0+YW5faXJxX2FsbG9jYXRlZCkgeworCQkvKiBBbGxvY2F0ZSB0aGUgYXV0by1uZWdvdGlhdGlvbiB3b3JrcXVldWUgYW5kIGludGVycnVwdCAqLworCQlzbnByaW50Zihwcml2LT5hbl9pcnFfbmFtZSwgc2l6ZW9mKHByaXYtPmFuX2lycV9uYW1lKSAtIDEsCisJCQkgIiVzLXBjcyIsIG5ldGRldl9uYW1lKG5ldGRldikpOworCisJCXByaXYtPmFuX3dvcmtxdWV1ZSA9CisJCQljcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShwcml2LT5hbl9pcnFfbmFtZSk7CisJCWlmICghcHJpdi0+YW5fd29ya3F1ZXVlKSB7CisJCQluZXRkZXZfZXJyKG5ldGRldiwgInBoeSB3b3JrcXVldWUgY3JlYXRpb24gZmFpbGVkXG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShwcml2LT5kZXYsIHByaXYtPmFuX2lycSwKKwkJCQkgICAgICAgYW1kX3hnYmVfYW5faXNyLCAwLCBwcml2LT5hbl9pcnFfbmFtZSwKKwkJCQkgICAgICAgcHJpdik7CisJCWlmIChyZXQpIHsKKwkJCW5ldGRldl9lcnIobmV0ZGV2LCAicGh5IGlycSByZXF1ZXN0IGZhaWxlZFxuIik7CisJCQlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT5hbl93b3JrcXVldWUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXByaXYtPmFuX2lycV9hbGxvY2F0ZWQgPSAxOworCX0KKworCXJldCA9IHBoeV9yZWFkX21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlJfRkVDX0FCSUxJVFkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXByaXYtPmZlY19hYmlsaXR5ID0gcmV0ICYgWEdCRV9QSFlfRkVDX01BU0s7CiAKIAkvKiBJbml0aWFsaXplIHN1cHBvcnRlZCBmZWF0dXJlcyAqLwogCXBoeWRldi0+c3VwcG9ydGVkID0gU1VQUE9SVEVEX0F1dG9uZWc7CiAJcGh5ZGV2LT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX1BhdXNlIHwgU1VQUE9SVEVEX0FzeW1fUGF1c2U7CiAJcGh5ZGV2LT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0JhY2twbGFuZTsKLQlwaHlkZXYtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfMTAwMDBiYXNlS1JfRnVsbCB8Ci0JCQkgICAgIFNVUFBPUlRFRF8xMDAwMGJhc2VSX0ZFQzsKKwlwaHlkZXYtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfMTAwMDBiYXNlS1JfRnVsbDsKIAlzd2l0Y2ggKHByaXYtPnNwZWVkX3NldCkgewogCWNhc2UgQU1EX1hHQkVfUEhZX1NQRUVEU0VUXzEwMDBfMTAwMDA6CiAJCXBoeWRldi0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8xMDAwYmFzZUtYX0Z1bGw7CkBAIC0xMDE0LDExICsxMTg0LDMzIEBACiAJCXBoeWRldi0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF8yNTAwYmFzZVhfRnVsbDsKIAkJYnJlYWs7CiAJfQorCisJaWYgKHByaXYtPmZlY19hYmlsaXR5ICYgWEdCRV9QSFlfRkVDX0VOQUJMRSkKKwkJcGh5ZGV2LT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwMDAwYmFzZVJfRkVDOworCiAJcGh5ZGV2LT5hZHZlcnRpc2luZyA9IHBoeWRldi0+c3VwcG9ydGVkOwogCi0JLyogVHVybiBvZmYgYW5kIGNsZWFyIGludGVycnVwdHMgKi8KLQlwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfQU4sIE1ESU9fQU5fSU5UTUFTSywgMCk7Ci0JcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0lOVCwgMCk7CisJLyogU2V0IGluaXRpYWwgbW9kZSAtIGNhbGwgdGhlIG1vZGUgc2V0dGluZyByb3V0aW5lcworCSAqIGRpcmVjdGx5IHRvIGluc3VyZSB3ZSBhcmUgcHJvcGVybHkgY29uZmlndXJlZAorCSAqLworCWlmIChwaHlkZXYtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMDAwMGJhc2VLUl9GdWxsKQorCQlyZXQgPSBhbWRfeGdiZV9waHlfeGdtaWlfbW9kZShwaHlkZXYpOworCWVsc2UgaWYgKHBoeWRldi0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzEwMDBiYXNlS1hfRnVsbCkKKwkJcmV0ID0gYW1kX3hnYmVfcGh5X2dtaWlfbW9kZShwaHlkZXYpOworCWVsc2UgaWYgKHBoeWRldi0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsKQorCQlyZXQgPSBhbWRfeGdiZV9waHlfZ21paV8yNTAwX21vZGUocGh5ZGV2KTsKKwllbHNlCisJCXJldCA9IC1FSU5WQUw7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBTZXQgdXAgYWR2ZXJ0aXNlbWVudCByZWdpc3RlcnMgYmFzZWQgb24gY3VycmVudCBzZXR0aW5ncyAqLworCXJldCA9IGFtZF94Z2JlX2FuX2luaXQocGh5ZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogRW5hYmxlIGF1dG8tbmVnb3RpYXRpb24gaW50ZXJydXB0cyAqLworCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl9JTlRNQVNLLCAweDA3KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTAyOCwyNSArMTIyMCwxOSBAQAogCWludCByZXQ7CiAKIAkvKiBEaXNhYmxlIGF1dG8tbmVnb3RpYXRpb24gKi8KLQlyZXQgPSBwaHlfcmVhZF9tbWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19DVFJMMSk7CisJcmV0ID0gYW1kX3hnYmVfcGh5X2Rpc2FibGVfYW4ocGh5ZGV2KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCAmPSB+TURJT19BTl9DVFJMMV9FTkFCTEU7Ci0JcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0NUUkwxLCByZXQpOwotCiAJLyogVmFsaWRhdGUvU2V0IHNwZWNpZmllZCBzcGVlZCAqLwogCXN3aXRjaCAocGh5ZGV2LT5zcGVlZCkgewogCWNhc2UgU1BFRURfMTAwMDA6Ci0JCXJldCA9IGFtZF94Z2JlX3BoeV94Z21paV9tb2RlKHBoeWRldik7CisJCXJldCA9IGFtZF94Z2JlX3BoeV9zZXRfbW9kZShwaHlkZXYsIEFNRF9YR0JFX01PREVfS1IpOwogCQlicmVhazsKIAogCWNhc2UgU1BFRURfMjUwMDoKLQkJcmV0ID0gYW1kX3hnYmVfcGh5X2dtaWlfMjUwMF9tb2RlKHBoeWRldik7Ci0JCWJyZWFrOwotCiAJY2FzZSBTUEVFRF8xMDAwOgotCQlyZXQgPSBhbWRfeGdiZV9waHlfZ21paV9tb2RlKHBoeWRldik7CisJCXJldCA9IGFtZF94Z2JlX3BoeV9zZXRfbW9kZShwaHlkZXYsIEFNRF9YR0JFX01PREVfS1gpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xMDY2LDEwICsxMjUyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYW1kX3hnYmVfcGh5X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCitzdGF0aWMgaW50IF9fYW1kX3hnYmVfcGh5X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJc3RydWN0IGFtZF94Z2JlX3BoeV9wcml2ICpwcml2ID0gcGh5ZGV2LT5wcml2OwogCXUzMiBtbWRfbWFzayA9IHBoeWRldi0+YzQ1X2lkcy5kZXZpY2VzX2luX3BhY2thZ2U7CisJaW50IHJldDsKIAogCWlmIChwaHlkZXYtPmF1dG9uZWcgIT0gQVVUT05FR19FTkFCTEUpCiAJCXJldHVybiBhbWRfeGdiZV9waHlfc2V0dXBfZm9yY2VkKHBoeWRldik7CkBAIC0xMDc4LDU2ICsxMjY1LDc5IEBACiAJaWYgKCEobW1kX21hc2sgJiBNRElPX0RFVlNfQU4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIFN0YXJ0L1Jlc3RhcnQgdGhlIGF1dG8tbmVnb3RpYXRpb24gc3RhdGUgbWFjaGluZSAqLwotCW11dGV4X2xvY2soJnByaXYtPmFuX211dGV4KTsKKwkvKiBEaXNhYmxlIGF1dG8tbmVnb3RpYXRpb24gaW50ZXJydXB0ICovCisJZGlzYWJsZV9pcnEocHJpdi0+YW5faXJxKTsKKworCS8qIFN0YXJ0IGF1dG8tbmVnb3RpYXRpb24gaW4gYSBzdXBwb3J0ZWQgbW9kZSAqLworCWlmIChwaHlkZXYtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF8xMDAwMGJhc2VLUl9GdWxsKQorCQlyZXQgPSBhbWRfeGdiZV9waHlfc2V0X21vZGUocGh5ZGV2LCBBTURfWEdCRV9NT0RFX0tSKTsKKwllbHNlIGlmICgocGh5ZGV2LT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfMTAwMGJhc2VLWF9GdWxsKSB8fAorCQkgKHBoeWRldi0+c3VwcG9ydGVkICYgU1VQUE9SVEVEXzI1MDBiYXNlWF9GdWxsKSkKKwkJcmV0ID0gYW1kX3hnYmVfcGh5X3NldF9tb2RlKHBoeWRldiwgQU1EX1hHQkVfTU9ERV9LWCk7CisJZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCWlmIChyZXQgPCAwKSB7CisJCWVuYWJsZV9pcnEocHJpdi0+YW5faXJxKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBEaXNhYmxlIGFuZCBzdG9wIGFueSBpbiBwcm9ncmVzcyBhdXRvLW5lZ290aWF0aW9uICovCisJcmV0ID0gYW1kX3hnYmVfcGh5X2Rpc2FibGVfYW4ocGh5ZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qIENsZWFyIGFueSBhdXRvLW5lZ290aXRhdGlvbiBpbnRlcnJ1cHRzICovCisJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOX0lOVCwgMCk7CisKIAlwcml2LT5hbl9yZXN1bHQgPSBBTURfWEdCRV9BTl9SRUFEWTsKLQlwcml2LT5hbl9zdGF0ZSA9IEFNRF9YR0JFX0FOX1NUQVJUOwotCXByaXYtPmtyX3N0YXRlID0gQU1EX1hHQkVfUlhfUkVBRFk7Ci0JcHJpdi0+a3hfc3RhdGUgPSBBTURfWEdCRV9SWF9SRUFEWTsKKwlwcml2LT5hbl9zdGF0ZSA9IEFNRF9YR0JFX0FOX1JFQURZOworCXByaXYtPmtyX3N0YXRlID0gQU1EX1hHQkVfUlhfQlBBOworCXByaXYtPmt4X3N0YXRlID0gQU1EX1hHQkVfUlhfQlBBOworCisJLyogUmUtZW5hYmxlIGF1dG8tbmVnb3RpYXRpb24gaW50ZXJydXB0ICovCisJZW5hYmxlX2lycShwcml2LT5hbl9pcnEpOworCisJLyogU2V0IHVwIGFkdmVydGlzZW1lbnQgcmVnaXN0ZXJzIGJhc2VkIG9uIGN1cnJlbnQgc2V0dGluZ3MgKi8KKwlyZXQgPSBhbWRfeGdiZV9hbl9pbml0KHBoeWRldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEVuYWJsZSBhbmQgc3RhcnQgYXV0by1uZWdvdGlhdGlvbiAqLworCXJldHVybiBhbWRfeGdiZV9waHlfcmVzdGFydF9hbihwaHlkZXYpOworfQorCitzdGF0aWMgaW50IGFtZF94Z2JlX3BoeV9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCXN0cnVjdCBhbWRfeGdiZV9waHlfcHJpdiAqcHJpdiA9IHBoeWRldi0+cHJpdjsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmcHJpdi0+YW5fbXV0ZXgpOworCisJcmV0ID0gX19hbWRfeGdiZV9waHlfY29uZmlnX2FuZWcocGh5ZGV2KTsKKwogCW11dGV4X3VubG9jaygmcHJpdi0+YW5fbXV0ZXgpOwogCi0JcXVldWVfd29yayhwcml2LT5hbl93b3JrcXVldWUsICZwcml2LT5hbl93b3JrKTsKLQotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYW1kX3hnYmVfcGh5X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewogCXN0cnVjdCBhbWRfeGdiZV9waHlfcHJpdiAqcHJpdiA9IHBoeWRldi0+cHJpdjsKLQllbnVtIGFtZF94Z2JlX3BoeV9hbiBzdGF0ZTsKIAotCW11dGV4X2xvY2soJnByaXYtPmFuX211dGV4KTsKLQlzdGF0ZSA9IHByaXYtPmFuX3Jlc3VsdDsKLQltdXRleF91bmxvY2soJnByaXYtPmFuX211dGV4KTsKLQotCXJldHVybiAoc3RhdGUgPT0gQU1EX1hHQkVfQU5fQ09NUExFVEUpOworCXJldHVybiAocHJpdi0+YW5fcmVzdWx0ID09IEFNRF9YR0JFX0FOX0NPTVBMRVRFKTsKIH0KIAogc3RhdGljIGludCBhbWRfeGdiZV9waHlfdXBkYXRlX2xpbmsoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlzdHJ1Y3QgYW1kX3hnYmVfcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtPnByaXY7Ci0JZW51bSBhbWRfeGdiZV9waHlfYW4gc3RhdGU7Ci0JdW5zaWduZWQgaW50IGNoZWNrX2FnYWluLCBhdXRvbmVnOwogCWludCByZXQ7CiAKIAkvKiBJZiB3ZSdyZSBkb2luZyBhdXRvLW5lZ290aWF0aW9uIGRvbid0IHJlcG9ydCBsaW5rIGRvd24gKi8KLQltdXRleF9sb2NrKCZwcml2LT5hbl9tdXRleCk7Ci0Jc3RhdGUgPSBwcml2LT5hbl9zdGF0ZTsKLQltdXRleF91bmxvY2soJnByaXYtPmFuX211dGV4KTsKLQotCWlmIChzdGF0ZSAhPSBBTURfWEdCRV9BTl9SRUFEWSkgeworCWlmIChwcml2LT5hbl9zdGF0ZSAhPSBBTURfWEdCRV9BTl9SRUFEWSkgewogCQlwaHlkZXYtPmxpbmsgPSAxOwogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBTaW5jZSB0aGUgZGV2aWNlIGNhbiBiZSBpbiB0aGUgd3JvbmcgbW9kZSB3aGVuIGEgbGluayBpcwotCSAqIChyZS0pZXN0YWJsaXNoZWQgKGNhYmxlIGNvbm5lY3RlZCBhZnRlciB0aGUgaW50ZXJmYWNlIGlzCi0JICogdXAsIGV0Yy4pLCB0aGUgbGluayBzdGF0dXMgbWF5IHJlcG9ydCBubyBsaW5rLiBJZiB0aGVyZQotCSAqIGlzIG5vIGxpbmssIHRyeSBzd2l0Y2hpbmcgbW9kZXMgYW5kIGNoZWNraW5nIHRoZSBzdGF0dXMKLQkgKiBhZ2FpbiBpZiBhdXRvIG5lZ290aWF0aW9uIGlzIGVuYWJsZWQuCi0JICovCi0JY2hlY2tfYWdhaW4gPSAocGh5ZGV2LT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSA/IDEgOiAwOwotYWdhaW46CiAJLyogTGluayBzdGF0dXMgaXMgbGF0Y2hlZCBsb3csIHNvIHJlYWQgb25jZSB0byBjbGVhcgogCSAqIGFuZCB0aGVuIHJlYWQgYWdhaW4gdG8gZ2V0IGN1cnJlbnQgc3RhdGUKIAkgKi8KQEAgLTExNDEsMjUgKzEzNTEsNiBAQAogCiAJcGh5ZGV2LT5saW5rID0gKHJldCAmIE1ESU9fU1RBVDFfTFNUQVRVUykgPyAxIDogMDsKIAotCWlmICghcGh5ZGV2LT5saW5rKSB7Ci0JCWlmIChjaGVja19hZ2FpbikgewotCQkJcmV0ID0gYW1kX3hnYmVfcGh5X3N3aXRjaF9tb2RlKHBoeWRldik7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlyZXR1cm4gcmV0OwotCQkJY2hlY2tfYWdhaW4gPSAwOwotCQkJZ290byBhZ2FpbjsKLQkJfQotCX0KLQotCWF1dG9uZWcgPSAocGh5ZGV2LT5saW5rICYmICFwcml2LT5saW5rKSA/IDEgOiAwOwotCXByaXYtPmxpbmsgPSBwaHlkZXYtPmxpbms7Ci0JaWYgKGF1dG9uZWcpIHsKLQkJLyogTGluayBpcyAoYmFjaykgdXAsIHJlLXN0YXJ0IGF1dG8tbmVnb3RpYXRpb24gKi8KLQkJcmV0ID0gYW1kX3hnYmVfcGh5X2NvbmZpZ19hbmVnKHBoeWRldik7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI0OSw2ICsxNDQwLDcgQEAKIAogc3RhdGljIGludCBhbWRfeGdiZV9waHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogeworCXN0cnVjdCBhbWRfeGdiZV9waHlfcHJpdiAqcHJpdiA9IHBoeWRldi0+cHJpdjsKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmcGh5ZGV2LT5sb2NrKTsKQEAgLTEyNTcsNiArMTQ0OSw4IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gdW5sb2NrOwogCisJcHJpdi0+bHBtX2N0cmwgPSByZXQ7CisKIAlyZXQgfD0gTURJT19DVFJMMV9MUE9XRVI7CiAJcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1BDUywgTURJT19DVFJMMSwgcmV0KTsKIApAQCAtMTI3MCw2OSArMTQ2NCwxMDYgQEAKIAogc3RhdGljIGludCBhbWRfeGdiZV9waHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgYW1kX3hnYmVfcGh5X3ByaXYgKnByaXYgPSBwaHlkZXYtPnByaXY7CiAKIAltdXRleF9sb2NrKCZwaHlkZXYtPmxvY2spOwogCi0JcmV0ID0gcGh5X3JlYWRfbW1kKHBoeWRldiwgTURJT19NTURfUENTLCBNRElPX0NUUkwxKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byB1bmxvY2s7CisJcHJpdi0+bHBtX2N0cmwgJj0gfk1ESU9fQ1RSTDFfTFBPV0VSOworCXBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9QQ1MsIE1ESU9fQ1RSTDEsIHByaXYtPmxwbV9jdHJsKTsKIAotCXJldCAmPSB+TURJT19DVFJMMV9MUE9XRVI7Ci0JcGh5X3dyaXRlX21tZChwaHlkZXYsIE1ESU9fTU1EX1BDUywgTURJT19DVFJMMSwgcmV0KTsKLQotCXJldCA9IDA7Ci0KLXVubG9jazoKIAltdXRleF91bmxvY2soJnBoeWRldi0+bG9jayk7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGFtZF94Z2JlX3BoeV9yZXNvdXJjZV9jb3VudChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCQkJdW5zaWduZWQgaW50IHR5cGUpCit7CisJdW5zaWduZWQgaW50IGNvdW50OworCWludCBpOworCisJZm9yIChpID0gMCwgY291bnQgPSAwOyBpIDwgcGRldi0+bnVtX3Jlc291cmNlczsgaSsrKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZwZGV2LT5yZXNvdXJjZVtpXTsKKworCQlpZiAodHlwZSA9PSByZXNvdXJjZV90eXBlKHIpKQorCQkJY291bnQrKzsKKwl9CisKKwlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBpbnQgYW1kX3hnYmVfcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJc3RydWN0IGFtZF94Z2JlX3BoeV9wcml2ICpwcml2OwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCWNoYXIgKndxX25hbWU7Ci0JY29uc3QgX19iZTMyICpwcm9wZXJ0eTsKLQl1bnNpZ25lZCBpbnQgc3BlZWRfc2V0OworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBoeV9wZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiwgKnBoeV9kZXY7CisJdW5zaWduZWQgaW50IHBoeV9yZXNudW0sIHBoeV9pcnFudW07CiAJaW50IHJldDsKIAotCWlmICghcGh5ZGV2LT5kZXYub2Zfbm9kZSkKKwlpZiAoIXBoeWRldi0+YnVzIHx8ICFwaHlkZXYtPmJ1cy0+cGFyZW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBkZXYgPSBvZl9maW5kX2RldmljZV9ieV9ub2RlKHBoeWRldi0+ZGV2Lm9mX25vZGUpOwotCWlmICghcGRldikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZGV2ID0gJnBkZXYtPmRldjsKLQotCXdxX25hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzLWFtZC14Z2JlLXBoeSIsIHBoeWRldi0+YnVzLT5uYW1lKTsKLQlpZiAoIXdxX25hbWUpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfcGRldjsKLQl9CisJZGV2ID0gcGh5ZGV2LT5idXMtPnBhcmVudDsKIAogCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXByaXYpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfbmFtZTsKLQl9CisJaWYgKCFwcml2KQorCQlyZXR1cm4gLUVOT01FTTsKIAotCXByaXYtPnBkZXYgPSBwZGV2OworCXByaXYtPnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlwcml2LT5hZGV2ID0gQUNQSV9DT01QQU5JT04oZGV2KTsKIAlwcml2LT5kZXYgPSBkZXY7CiAJcHJpdi0+cGh5ZGV2ID0gcGh5ZGV2OworCW11dGV4X2luaXQoJnByaXYtPmFuX211dGV4KTsKKwlJTklUX1dPUksoJnByaXYtPmFuX2lycV93b3JrLCBhbWRfeGdiZV9hbl9pcnFfd29yayk7CisJSU5JVF9XT1JLKCZwcml2LT5hbl93b3JrLCBhbWRfeGdiZV9hbl9zdGF0ZV9tYWNoaW5lKTsKKworCWlmICghcHJpdi0+YWRldiB8fCBhY3BpX2Rpc2FibGVkKSB7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqYnVzX25vZGU7CisJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X25vZGU7CisKKwkJYnVzX25vZGUgPSBwcml2LT5kZXYtPm9mX25vZGU7CisJCXBoeV9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShidXNfbm9kZSwgInBoeS1oYW5kbGUiLCAwKTsKKwkJaWYgKCFwaHlfbm9kZSkgeworCQkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gcGFyc2UgcGh5LWhhbmRsZVxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJfcHJpdjsKKwkJfQorCisJCXBoeV9wZGV2ID0gb2ZfZmluZF9kZXZpY2VfYnlfbm9kZShwaHlfbm9kZSk7CisJCW9mX25vZGVfcHV0KHBoeV9ub2RlKTsKKworCQlpZiAoIXBoeV9wZGV2KSB7CisJCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBvYnRhaW4gcGh5IGRldmljZVxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJfcHJpdjsKKwkJfQorCisJCXBoeV9yZXNudW0gPSAwOworCQlwaHlfaXJxbnVtID0gMDsKKwl9IGVsc2UgeworCQkvKiBJbiBBQ1BJLCB0aGUgWEdCRSBhbmQgUEhZIHJlc291cmNlcyBhcmUgdGhlIGdyb3VwZWQKKwkJICogdG9nZXRoZXIgd2l0aCB0aGUgUEhZIHJlc291cmNlcyBhdCB0aGUgZW5kCisJCSAqLworCQlwaHlfcGRldiA9IHByaXYtPnBkZXY7CisJCXBoeV9yZXNudW0gPSBhbWRfeGdiZV9waHlfcmVzb3VyY2VfY291bnQocGh5X3BkZXYsCisJCQkJCQkJIElPUkVTT1VSQ0VfTUVNKSAtIDM7CisJCXBoeV9pcnFudW0gPSBhbWRfeGdiZV9waHlfcmVzb3VyY2VfY291bnQocGh5X3BkZXYsCisJCQkJCQkJIElPUkVTT1VSQ0VfSVJRKSAtIDE7CisJfQorCXBoeV9kZXYgPSAmcGh5X3BkZXYtPmRldjsKIAogCS8qIEdldCB0aGUgZGV2aWNlIG1taW8gYXJlYXMgKi8KLQlwcml2LT5yeHR4X3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJcHJpdi0+cnh0eF9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGh5X3BkZXYsIElPUkVTT1VSQ0VfTUVNLAorCQkJCQkgICAgICAgcGh5X3Jlc251bSsrKTsKIAlwcml2LT5yeHR4X3JlZ3MgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCBwcml2LT5yeHR4X3Jlcyk7CiAJaWYgKElTX0VSUihwcml2LT5yeHR4X3JlZ3MpKSB7CiAJCWRldl9lcnIoZGV2LCAicnh0eCBpb3JlbWFwIGZhaWxlZFxuIik7CiAJCXJldCA9IFBUUl9FUlIocHJpdi0+cnh0eF9yZWdzKTsKLQkJZ290byBlcnJfcHJpdjsKKwkJZ290byBlcnJfcHV0OwogCX0KIAotCXByaXYtPnNpcjBfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlwcml2LT5zaXIwX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwaHlfcGRldiwgSU9SRVNPVVJDRV9NRU0sCisJCQkJCSAgICAgICBwaHlfcmVzbnVtKyspOwogCXByaXYtPnNpcjBfcmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHByaXYtPnNpcjBfcmVzKTsKIAlpZiAoSVNfRVJSKHByaXYtPnNpcjBfcmVncykpIHsKIAkJZGV2X2VycihkZXYsICJzaXIwIGlvcmVtYXAgZmFpbGVkXG4iKTsKQEAgLTEzNDAsNyArMTU3MSw4IEBACiAJCWdvdG8gZXJyX3J4dHg7CiAJfQogCi0JcHJpdi0+c2lyMV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDIpOworCXByaXYtPnNpcjFfcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBoeV9wZGV2LCBJT1JFU09VUkNFX01FTSwKKwkJCQkJICAgICAgIHBoeV9yZXNudW0rKyk7CiAJcHJpdi0+c2lyMV9yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcHJpdi0+c2lyMV9yZXMpOwogCWlmIChJU19FUlIocHJpdi0+c2lyMV9yZWdzKSkgewogCQlkZXZfZXJyKGRldiwgInNpcjEgaW9yZW1hcCBmYWlsZWRcbiIpOwpAQCAtMTM0OCw0MCArMTU4MCw5OCBAQAogCQlnb3RvIGVycl9zaXIwOwogCX0KIAotCS8qIEdldCB0aGUgZGV2aWNlIHNwZWVkIHNldCBwcm9wZXJ0eSAqLwotCXNwZWVkX3NldCA9IDA7Ci0JcHJvcGVydHkgPSBvZl9nZXRfcHJvcGVydHkoZGV2LT5vZl9ub2RlLCBYR0JFX1BIWV9TUEVFRFNFVF9QUk9QRVJUWSwKLQkJCQkgICBOVUxMKTsKLQlpZiAocHJvcGVydHkpCi0JCXNwZWVkX3NldCA9IGJlMzJfdG9fY3B1KCpwcm9wZXJ0eSk7CisJLyogR2V0IHRoZSBhdXRvLW5lZ290aWF0aW9uIGludGVycnVwdCAqLworCXJldCA9IHBsYXRmb3JtX2dldF9pcnEocGh5X3BkZXYsIHBoeV9pcnFudW0pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAicGxhdGZvcm1fZ2V0X2lycSBmYWlsZWRcbiIpOworCQlnb3RvIGVycl9zaXIxOworCX0KKwlwcml2LT5hbl9pcnEgPSByZXQ7CiAKLQlzd2l0Y2ggKHNwZWVkX3NldCkgewotCWNhc2UgMDoKLQkJcHJpdi0+c3BlZWRfc2V0ID0gQU1EX1hHQkVfUEhZX1NQRUVEU0VUXzEwMDBfMTAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJcHJpdi0+c3BlZWRfc2V0ID0gQU1EX1hHQkVfUEhZX1NQRUVEU0VUXzI1MDBfMTAwMDA7CisJLyogR2V0IHRoZSBkZXZpY2Ugc3BlZWQgc2V0IHByb3BlcnR5ICovCisJcmV0ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKHBoeV9kZXYsIFhHQkVfUEhZX1NQRUVEU0VUX1BST1BFUlRZLAorCQkJCSAgICAgICAmcHJpdi0+c3BlZWRfc2V0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoZGV2LCAiaW52YWxpZCAlcyBwcm9wZXJ0eVxuIiwKKwkJCVhHQkVfUEhZX1NQRUVEU0VUX1BST1BFUlRZKTsKKwkJZ290byBlcnJfc2lyMTsKKwl9CisKKwlzd2l0Y2ggKHByaXYtPnNwZWVkX3NldCkgeworCWNhc2UgQU1EX1hHQkVfUEhZX1NQRUVEU0VUXzEwMDBfMTAwMDA6CisJY2FzZSBBTURfWEdCRV9QSFlfU1BFRURTRVRfMjUwMF8xMDAwMDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2VycihkZXYsICJpbnZhbGlkIGFtZCxzcGVlZC1zZXQgcHJvcGVydHlcbiIpOworCQlkZXZfZXJyKGRldiwgImludmFsaWQgJXMgcHJvcGVydHlcbiIsCisJCQlYR0JFX1BIWV9TUEVFRFNFVF9QUk9QRVJUWSk7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3NpcjE7CiAJfQogCi0JcHJpdi0+bGluayA9IDE7CisJaWYgKGRldmljZV9wcm9wZXJ0eV9wcmVzZW50KHBoeV9kZXYsIFhHQkVfUEhZX0JMV0NfUFJPUEVSVFkpKSB7CisJCXJldCA9IGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShwaHlfZGV2LAorCQkJCQkJICAgICBYR0JFX1BIWV9CTFdDX1BST1BFUlRZLAorCQkJCQkJICAgICBwcml2LT5zZXJkZXNfYmx3YywKKwkJCQkJCSAgICAgWEdCRV9QSFlfU1BFRURTKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsICJpbnZhbGlkICVzIHByb3BlcnR5XG4iLAorCQkJCVhHQkVfUEhZX0JMV0NfUFJPUEVSVFkpOworCQkJZ290byBlcnJfc2lyMTsKKwkJfQorCX0gZWxzZSB7CisJCW1lbWNweShwcml2LT5zZXJkZXNfYmx3YywgYW1kX3hnYmVfcGh5X3NlcmRlc19ibHdjLAorCQkgICAgICAgc2l6ZW9mKHByaXYtPnNlcmRlc19ibHdjKSk7CisJfQogCi0JbXV0ZXhfaW5pdCgmcHJpdi0+YW5fbXV0ZXgpOwotCUlOSVRfV09SSygmcHJpdi0+YW5fd29yaywgYW1kX3hnYmVfYW5fc3RhdGVfbWFjaGluZSk7Ci0JcHJpdi0+YW5fd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUod3FfbmFtZSk7Ci0JaWYgKCFwcml2LT5hbl93b3JrcXVldWUpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfc2lyMTsKKwlpZiAoZGV2aWNlX3Byb3BlcnR5X3ByZXNlbnQocGh5X2RldiwgWEdCRV9QSFlfQ0RSX1JBVEVfUFJPUEVSVFkpKSB7CisJCXJldCA9IGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShwaHlfZGV2LAorCQkJCQkJICAgICBYR0JFX1BIWV9DRFJfUkFURV9QUk9QRVJUWSwKKwkJCQkJCSAgICAgcHJpdi0+c2VyZGVzX2Nkcl9yYXRlLAorCQkJCQkJICAgICBYR0JFX1BIWV9TUEVFRFMpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGRldiwgImludmFsaWQgJXMgcHJvcGVydHlcbiIsCisJCQkJWEdCRV9QSFlfQ0RSX1JBVEVfUFJPUEVSVFkpOworCQkJZ290byBlcnJfc2lyMTsKKwkJfQorCX0gZWxzZSB7CisJCW1lbWNweShwcml2LT5zZXJkZXNfY2RyX3JhdGUsIGFtZF94Z2JlX3BoeV9zZXJkZXNfY2RyX3JhdGUsCisJCSAgICAgICBzaXplb2YocHJpdi0+c2VyZGVzX2Nkcl9yYXRlKSk7CisJfQorCisJaWYgKGRldmljZV9wcm9wZXJ0eV9wcmVzZW50KHBoeV9kZXYsIFhHQkVfUEhZX1BRX1NLRVdfUFJPUEVSVFkpKSB7CisJCXJldCA9IGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShwaHlfZGV2LAorCQkJCQkJICAgICBYR0JFX1BIWV9QUV9TS0VXX1BST1BFUlRZLAorCQkJCQkJICAgICBwcml2LT5zZXJkZXNfcHFfc2tldywKKwkJCQkJCSAgICAgWEdCRV9QSFlfU1BFRURTKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsICJpbnZhbGlkICVzIHByb3BlcnR5XG4iLAorCQkJCVhHQkVfUEhZX1BRX1NLRVdfUFJPUEVSVFkpOworCQkJZ290byBlcnJfc2lyMTsKKwkJfQorCX0gZWxzZSB7CisJCW1lbWNweShwcml2LT5zZXJkZXNfcHFfc2tldywgYW1kX3hnYmVfcGh5X3NlcmRlc19wcV9za2V3LAorCQkgICAgICAgc2l6ZW9mKHByaXYtPnNlcmRlc19wcV9za2V3KSk7CisJfQorCisJaWYgKGRldmljZV9wcm9wZXJ0eV9wcmVzZW50KHBoeV9kZXYsIFhHQkVfUEhZX1RYX0FNUF9QUk9QRVJUWSkpIHsKKwkJcmV0ID0gZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyX2FycmF5KHBoeV9kZXYsCisJCQkJCQkgICAgIFhHQkVfUEhZX1RYX0FNUF9QUk9QRVJUWSwKKwkJCQkJCSAgICAgcHJpdi0+c2VyZGVzX3R4X2FtcCwKKwkJCQkJCSAgICAgWEdCRV9QSFlfU1BFRURTKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsICJpbnZhbGlkICVzIHByb3BlcnR5XG4iLAorCQkJCVhHQkVfUEhZX1RYX0FNUF9QUk9QRVJUWSk7CisJCQlnb3RvIGVycl9zaXIxOworCQl9CisJfSBlbHNlIHsKKwkJbWVtY3B5KHByaXYtPnNlcmRlc190eF9hbXAsIGFtZF94Z2JlX3BoeV9zZXJkZXNfdHhfYW1wLAorCQkgICAgICAgc2l6ZW9mKHByaXYtPnNlcmRlc190eF9hbXApKTsKIAl9CiAKIAlwaHlkZXYtPnByaXYgPSBwcml2OwogCi0Ja2ZyZWUod3FfbmFtZSk7Ci0Jb2ZfZGV2X3B1dChwZGV2KTsKKwlpZiAoIXByaXYtPmFkZXYgfHwgYWNwaV9kaXNhYmxlZCkKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChwaHlfcGRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTQwMCwxNSArMTY5MCwxMyBAQAogCWRldm1fcmVsZWFzZV9tZW1fcmVnaW9uKGRldiwgcHJpdi0+cnh0eF9yZXMtPnN0YXJ0LAogCQkJCXJlc291cmNlX3NpemUocHJpdi0+cnh0eF9yZXMpKTsKIAorZXJyX3B1dDoKKwlpZiAoIXByaXYtPmFkZXYgfHwgYWNwaV9kaXNhYmxlZCkKKwkJcGxhdGZvcm1fZGV2aWNlX3B1dChwaHlfcGRldik7CisKIGVycl9wcml2OgogCWRldm1fa2ZyZWUoZGV2LCBwcml2KTsKIAotZXJyX25hbWU6Ci0Ja2ZyZWUod3FfbmFtZSk7Ci0KLWVycl9wZGV2OgotCW9mX2Rldl9wdXQocGRldik7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDE3LDEzICsxNzA1LDEyIEBACiAJc3RydWN0IGFtZF94Z2JlX3BoeV9wcml2ICpwcml2ID0gcGh5ZGV2LT5wcml2OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHByaXYtPmRldjsKIAotCS8qIFN0b3AgYW55IGluIHByb2Nlc3MgYXV0by1uZWdvdGlhdGlvbiAqLwotCW11dGV4X2xvY2soJnByaXYtPmFuX211dGV4KTsKLQlwcml2LT5hbl9zdGF0ZSA9IEFNRF9YR0JFX0FOX0VYSVQ7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5hbl9tdXRleCk7CisJaWYgKHByaXYtPmFuX2lycV9hbGxvY2F0ZWQpIHsKKwkJZGV2bV9mcmVlX2lycShkZXYsIHByaXYtPmFuX2lycSwgcHJpdik7CiAKLQlmbHVzaF93b3JrcXVldWUocHJpdi0+YW5fd29ya3F1ZXVlKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT5hbl93b3JrcXVldWUpOworCQlmbHVzaF93b3JrcXVldWUocHJpdi0+YW5fd29ya3F1ZXVlKTsKKwkJZGVzdHJveV93b3JrcXVldWUocHJpdi0+YW5fd29ya3F1ZXVlKTsKKwl9CiAKIAkvKiBSZWxlYXNlIHJlc291cmNlcyAqLwogCWRldm1faW91bm1hcChkZXYsIHByaXYtPnNpcjFfcmVncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMKaW5kZXggM2FkMGU2ZS4uYTA4YTNjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiAJc3RydWN0IGZpeGVkX21kaW9fYnVzICpmbWIgPSAmcGxhdGZvcm1fZm1iOwogCXN0cnVjdCBmaXhlZF9waHkgKmZwOwogCi0JaWYgKCFsaW5rX3VwZGF0ZSB8fCAhcGh5ZGV2IHx8ICFwaHlkZXYtPmJ1cykKKwlpZiAoIXBoeWRldiB8fCAhcGh5ZGV2LT5idXMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShmcCwgJmZtYi0+cGh5cywgbm9kZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwppbmRleCA1MDA1MWYyLi4wOTVlZjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYworKysgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwpAQCAtNDQzLDkgKzQ0MywxMyBAQAogCWlmICghZHJ2IHx8ICFwaHlkcnYtPnN1c3BlbmQpCiAJCXJldHVybiBmYWxzZTsKIAotCS8qIFBIWSBub3QgYXR0YWNoZWQ/IE1heSBzdXNwZW5kLiAqLworCS8qIFBIWSBub3QgYXR0YWNoZWQ/IE1heSBzdXNwZW5kIGlmIHRoZSBQSFkgaGFzIG5vdCBhbHJlYWR5IGJlZW4KKwkgKiBzdXNwZW5kZWQgYXMgcGFydCBvZiBhIHByaW9yIGNhbGwgdG8gcGh5X2Rpc2Nvbm5lY3QoKSAtPgorCSAqIHBoeV9kZXRhY2goKSAtPiBwaHlfc3VzcGVuZCgpIGJlY2F1c2UgdGhlIHBhcmVudCBuZXRkZXYgbWlnaHQgYmUgdGhlCisJICogTURJTyBidXMgZHJpdmVyIGFuZCBjbG9jayBnYXRlZCBhdCB0aGlzIHBvaW50LgorCSAqLwogCWlmICghbmV0ZGV2KQotCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuICFwaHlkZXYtPnN1c3BlbmRlZDsKIAogCS8qIERvbid0IHN1c3BlbmQgUEhZIGlmIHRoZSBhdHRjaGVkIG5ldGRldiBwYXJlbnQgbWF5IHdha2V1cC4KIAkgKiBUaGUgcGFyZW50IG1heSBwb2ludCB0byBhIFBDSSBkZXZpY2UsIGFzIGluIHRnMyBkcml2ZXIuCkBAIC00NjUsNyArNDY5LDYgQEAKIAogc3RhdGljIGludCBtZGlvX2J1c19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2ID0gdG9fcGh5X2RyaXZlcihkZXYtPmRyaXZlcik7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRvX3BoeV9kZXZpY2UoZGV2KTsKIAogCS8qIFdlIG11c3Qgc3RvcCB0aGUgc3RhdGUgbWFjaGluZSBtYW51YWxseSwgb3RoZXJ3aXNlIGl0IHN0b3BzIG91dCBvZgpAQCAtNDc5LDE5ICs0ODIsMTggQEAKIAlpZiAoIW1kaW9fYnVzX3BoeV9tYXlfc3VzcGVuZChwaHlkZXYpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBwaHlkcnYtPnN1c3BlbmQocGh5ZGV2KTsKKwlyZXR1cm4gcGh5X3N1c3BlbmQocGh5ZGV2KTsKIH0KIAogc3RhdGljIGludCBtZGlvX2J1c19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwaHlfZHJpdmVyICpwaHlkcnYgPSB0b19waHlfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdG9fcGh5X2RldmljZShkZXYpOwogCWludCByZXQ7CiAKIAlpZiAoIW1kaW9fYnVzX3BoeV9tYXlfc3VzcGVuZChwaHlkZXYpKQogCQlnb3RvIG5vX3Jlc3VtZTsKIAotCXJldCA9IHBoeWRydi0+cmVzdW1lKHBoeWRldik7CisJcmV0ID0gcGh5X3Jlc3VtZShwaHlkZXYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKaW5kZXggNzY3Y2QxMS4uY2RjYWM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHkuYwpAQCAtNDM5LDYgKzQzOSw5IEBACiAJaWYgKEFVVE9ORUdfRElTQUJMRSA9PSBwaHlkZXYtPmF1dG9uZWcpCiAJCXBoeV9zYW5pdGl6ZV9zZXR0aW5ncyhwaHlkZXYpOwogCisJLyogSW52YWxpZGF0ZSBMUCBhZHZlcnRpc2luZyBmbGFncyAqLworCXBoeWRldi0+bHBfYWR2ZXJ0aXNpbmcgPSAwOworCiAJZXJyID0gcGh5ZGV2LT5kcnYtPmNvbmZpZ19hbmVnKHBoeWRldik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0X3VubG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IDNmYzkxZTguLmJkZmU1MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtNjk5LDYgKzY5OSw3IEBACiB7CiAJc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydiA9IHRvX3BoeV9kcml2ZXIocGh5ZGV2LT5kZXYuZHJpdmVyKTsKIAlzdHJ1Y3QgZXRodG9vbF93b2xpbmZvIHdvbCA9IHsgLmNtZCA9IEVUSFRPT0xfR1dPTCB9OworCWludCByZXQgPSAwOwogCiAJLyogSWYgdGhlIGRldmljZSBoYXMgV09MIGVuYWJsZWQsIHdlIGNhbm5vdCBzdXNwZW5kIHRoZSBQSFkgKi8KIAlwaHlfZXRodG9vbF9nZXRfd29sKHBoeWRldiwgJndvbCk7CkBAIC03MDYsMTggKzcwNywzMSBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJaWYgKHBoeWRydi0+c3VzcGVuZCkKLQkJcmV0dXJuIHBoeWRydi0+c3VzcGVuZChwaHlkZXYpOwotCXJldHVybiAwOworCQlyZXQgPSBwaHlkcnYtPnN1c3BlbmQocGh5ZGV2KTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwaHlkZXYtPnN1c3BlbmRlZCA9IHRydWU7CisKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChwaHlfc3VzcGVuZCk7CiAKIGludCBwaHlfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydiA9IHRvX3BoeV9kcml2ZXIocGh5ZGV2LT5kZXYuZHJpdmVyKTsKKwlpbnQgcmV0ID0gMDsKIAogCWlmIChwaHlkcnYtPnJlc3VtZSkKLQkJcmV0dXJuIHBoeWRydi0+cmVzdW1lKHBoeWRldik7Ci0JcmV0dXJuIDA7CisJCXJldCA9IHBoeWRydi0+cmVzdW1lKHBoeWRldik7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcGh5ZGV2LT5zdXNwZW5kZWQgPSBmYWxzZTsKKworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHBoeV9yZXN1bWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHAvcHBwX2RlZmxhdGUuYyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCmluZGV4IDYwMmM2MjUuLmI1ZWRjN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcC9wcHBfZGVmbGF0ZS5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAkvKgogCSAqIFNlZSBpZiB3ZSBtYW5hZ2VkIHRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0LgogCSAqLwotCWlmIChvbGVuIDwgaXNpemUpIHsKKwlpZiAob2xlbiA8IGlzaXplICYmIG9sZW4gPD0gb3NpemUpIHsKIAkJc3RhdGUtPnN0YXRzLmNvbXBfYnl0ZXMgKz0gb2xlbjsKIAkJc3RhdGUtPnN0YXRzLmNvbXBfcGFja2V0cysrOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZWFtL3RlYW0uYyBiL2RyaXZlcnMvbmV0L3RlYW0vdGVhbS5jCmluZGV4IGY3ZmY0OTMuLjBlNjIyNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RlYW0vdGVhbS5jCisrKyBiL2RyaXZlcnMvbmV0L3RlYW0vdGVhbS5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L3NjaF9nZW5lcmljLmg+CisjaW5jbHVkZSA8bmV0L3N3aXRjaGRldi5oPgogI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdGVhbS5oPgogCkBAIC0xNzYsNyArMTc3LDYgQEAKIHN0YXRpYyBpbnQgX190ZWFtX29wdGlvbl9pbnN0X2FkZF9vcHRpb24oc3RydWN0IHRlYW0gKnRlYW0sCiAJCQkJCSBzdHJ1Y3QgdGVhbV9vcHRpb24gKm9wdGlvbikKIHsKLQlzdHJ1Y3QgdGVhbV9wb3J0ICpwb3J0OwogCWludCBlcnI7CiAKIAlpZiAoIW9wdGlvbi0+cGVyX3BvcnQpIHsKQEAgLTE4NCwxMiArMTg0LDYgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gaW5zdF9kZWxfb3B0aW9uOwogCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgJnRlYW0tPnBvcnRfbGlzdCwgbGlzdCkgewotCQllcnIgPSBfX3RlYW1fb3B0aW9uX2luc3RfYWRkKHRlYW0sIG9wdGlvbiwgcG9ydCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGluc3RfZGVsX29wdGlvbjsKLQl9CiAJcmV0dXJuIDA7CiAKIGluc3RfZGVsX29wdGlvbjoKQEAgLTE5MzIsNyArMTkyNiw3IEBACiAJc3RydWN0IHRlYW0gKnRlYW0gPSBuZXRkZXZfcHJpdihkZXYpOwogCW5ldGRldl9mZWF0dXJlc190IG1hc2s7CiAKLQltYXNrID0gZmVhdHVyZXM7CisJbWFzayA9IGZlYXR1cmVzIHwgTkVUSUZfRl9IV19TV0lUQ0hfT0ZGTE9BRDsKIAlmZWF0dXJlcyAmPSB+TkVUSUZfRl9PTkVfRk9SX0FMTDsKIAlmZWF0dXJlcyB8PSBORVRJRl9GX0FMTF9GT1JfQUxMOwogCkBAIC0xOTgyLDYgKzE5NzYsOCBAQAogCS5uZG9fZGVsX3NsYXZlCQk9IHRlYW1fZGVsX3NsYXZlLAogCS5uZG9fZml4X2ZlYXR1cmVzCT0gdGVhbV9maXhfZmVhdHVyZXMsCiAJLm5kb19jaGFuZ2VfY2FycmllciAgICAgPSB0ZWFtX2NoYW5nZV9jYXJyaWVyLAorCS5uZG9fYnJpZGdlX3NldGxpbmsgICAgID0gbmRvX2RmbHRfbmV0ZGV2X3N3aXRjaF9wb3J0X2JyaWRnZV9zZXRsaW5rLAorCS5uZG9fYnJpZGdlX2RlbGxpbmsgICAgID0gbmRvX2RmbHRfbmV0ZGV2X3N3aXRjaF9wb3J0X2JyaWRnZV9kZWxsaW5rLAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dW4uYyBiL2RyaXZlcnMvbmV0L3R1bi5jCmluZGV4IDhjOGRjMTYuLjg1N2RjYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bi5jCkBAIC02NSw3ICs2NSw2IEBACiAjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgotI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvbmV0bnMvZ2VuZXJpYy5oPgogI2luY2x1ZGUgPG5ldC9ydG5ldGxpbmsuaD4KQEAgLTEyNCwxMCArMTIzLDkgQEAKIAl1bnNpZ25lZCBjaGFyCWFkZHJbRkxUX0VYQUNUX0NPVU5UXVtFVEhfQUxFTl07CiB9OwogCi0vKiBERUZBVUxUX01BWF9OVU1fUlNTX1FVRVVFUyB3ZXJlIGNob3NlbiB0byBsZXQgdGhlIHJ4L3R4IHF1ZXVlcyBhbGxvY2F0ZWQgZm9yCi0gKiB0aGUgbmV0ZGV2aWNlIHRvIGJlIGZpdCBpbiBvbmUgcGFnZS4gU28gd2UgY2FuIG1ha2Ugc3VyZSB0aGUgc3VjY2VzcyBvZgotICogbWVtb3J5IGFsbG9jYXRpb24uIFRPRE86IGluY3JlYXNlIHRoZSBsaW1pdC4gKi8KLSNkZWZpbmUgTUFYX1RBUF9RVUVVRVMgREVGQVVMVF9NQVhfTlVNX1JTU19RVUVVRVMKKy8qIE1BWF9UQVBfUVVFVUVTIDI1NiBpcyBjaG9zZW4gdG8gYWxsb3cgcngvdHggcXVldWVzIHRvIGJlIGVxdWFsCisgKiB0byBtYXggbnVtYmVyIG9mIFZDUFVzIGluIGd1ZXN0LiAqLworI2RlZmluZSBNQVhfVEFQX1FVRVVFUyAyNTYKICNkZWZpbmUgTUFYX1RBUF9GTE9XUyAgNDA5NgogCiAjZGVmaW5lIFRVTl9GTE9XX0VYUElSRSAoMyAqIEhaKQpAQCAtMTg3LDcgKzE4NSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKIAluZXRkZXZfZmVhdHVyZXNfdAlzZXRfZmVhdHVyZXM7CiAjZGVmaW5lIFRVTl9VU0VSX0ZFQVRVUkVTIChORVRJRl9GX0hXX0NTVU18TkVUSUZfRl9UU09fRUNOfE5FVElGX0ZfVFNPfCBcCi0JCQkgIE5FVElGX0ZfVFNPNikKKwkJCSAgTkVUSUZfRl9UU082fE5FVElGX0ZfVUZPKQogCiAJaW50CQkJdm5ldF9oZHJfc3o7CiAJaW50CQkJc25kYnVmOwpAQCAtMjU4LDcgKzI1Niw2IEBACiB7CiAJdHVuX2RlYnVnKEtFUk5fSU5GTywgdHVuLCAiZGVsZXRlIGZsb3c6IGhhc2ggJXUgaW5kZXggJXVcbiIsCiAJCSAgZS0+cnhoYXNoLCBlLT5xdWV1ZV9pbmRleCk7Ci0Jc29ja19ycHNfcmVzZXRfZmxvd19oYXNoKGUtPnJwc19yeGhhc2gpOwogCWhsaXN0X2RlbF9yY3UoJmUtPmhhc2hfbGluayk7CiAJa2ZyZWVfcmN1KGUsIHJjdSk7CiAJLS10dW4tPmZsb3dfY291bnQ7CkBAIC0zNzUsMTAgKzM3Miw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB0dW5fZmxvd19zYXZlX3Jwc19yeGhhc2goc3RydWN0IHR1bl9mbG93X2VudHJ5ICplLCB1MzIgaGFzaCkKIHsKLQlpZiAodW5saWtlbHkoZS0+cnBzX3J4aGFzaCAhPSBoYXNoKSkgewotCQlzb2NrX3Jwc19yZXNldF9mbG93X2hhc2goZS0+cnBzX3J4aGFzaCk7CisJaWYgKHVubGlrZWx5KGUtPnJwc19yeGhhc2ggIT0gaGFzaCkpCiAJCWUtPnJwc19yeGhhc2ggPSBoYXNoOwotCX0KIH0KIAogLyogV2UgdHJ5IHRvIGlkZW50aWZ5IGEgZmxvdyB0aHJvdWdoIGl0cyByeGhhc2ggZmlyc3QuIFRoZSByZWFzb24gdGhhdApAQCAtMTE2Nyw4ICsxMTYyLDYgQEAKIAkJYnJlYWs7CiAJfQogCi0Jc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7Ci0KIAlpZiAoZ3NvLmdzb190eXBlICE9IFZJUlRJT19ORVRfSERSX0dTT19OT05FKSB7CiAJCXByX2RlYnVnKCJHU08hXG4iKTsKIAkJc3dpdGNoIChnc28uZ3NvX3R5cGUgJiB+VklSVElPX05FVF9IRFJfR1NPX0VDTikgewpAQCAtMTE3OSwyMCArMTE3Miw4IEBACiAJCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID0gU0tCX0dTT19UQ1BWNjsKIAkJCWJyZWFrOwogCQljYXNlIFZJUlRJT19ORVRfSERSX0dTT19VRFA6Ci0JCXsKLQkJCXN0YXRpYyBib29sIHdhcm5lZDsKLQotCQkJaWYgKCF3YXJuZWQpIHsKLQkJCQl3YXJuZWQgPSB0cnVlOwotCQkJCW5ldGRldl93YXJuKHR1bi0+ZGV2LAotCQkJCQkgICAgIiVzOiB1c2luZyBkaXNhYmxlZCBVRk8gZmVhdHVyZTsgcGxlYXNlIGZpeCB0aGlzIHByb2dyYW1cbiIsCi0JCQkJCSAgICBjdXJyZW50LT5jb21tKTsKLQkJCX0KIAkJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgPSBTS0JfR1NPX1VEUDsKLQkJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKQotCQkJCWlwdjZfcHJveHlfc2VsZWN0X2lkZW50KHNrYik7CiAJCQlicmVhazsKLQkJfQogCQlkZWZhdWx0OgogCQkJdHVuLT5kZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCQkJa2ZyZWVfc2tiKHNrYik7CkBAIC0xMjIxLDYgKzEyMDIsNyBAQAogCQlza2Jfc2hpbmZvKHNrYiktPnR4X2ZsYWdzIHw9IFNLQlRYX1NIQVJFRF9GUkFHOwogCX0KIAorCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCXNrYl9wcm9iZV90cmFuc3BvcnRfaGVhZGVyKHNrYiwgMCk7CiAKIAlyeGhhc2ggPSBza2JfZ2V0X2hhc2goc2tiKTsKQEAgLTEyNjEsNyArMTI0Myw3IEBACiAJaW50IHZsYW5faGxlbiA9IDA7CiAJaW50IHZuZXRfaGRyX3N6ID0gMDsKIAotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpCiAJCXZsYW5faGxlbiA9IFZMQU5fSExFTjsKIAogCWlmICh0dW4tPmZsYWdzICYgSUZGX1ZORVRfSERSKQpAQCAtMTI5OCw2ICsxMjgwLDggQEAKIAkJCQlnc28uZ3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjQ7CiAJCQllbHNlIGlmIChzaW5mby0+Z3NvX3R5cGUgJiBTS0JfR1NPX1RDUFY2KQogCQkJCWdzby5nc29fdHlwZSA9IFZJUlRJT19ORVRfSERSX0dTT19UQ1BWNjsKKwkJCWVsc2UgaWYgKHNpbmZvLT5nc29fdHlwZSAmIFNLQl9HU09fVURQKQorCQkJCWdzby5nc29fdHlwZSA9IFZJUlRJT19ORVRfSERSX0dTT19VRFA7CiAJCQllbHNlIHsKIAkJCQlwcl9lcnIoInVuZXhwZWN0ZWQgR1NPIHR5cGU6ICIKIAkJCQkgICAgICAgIjB4JXgsIGdzb19zaXplICVkLCBoZHJfbGVuICVkXG4iLApAQCAtMTMzOCw3ICsxMzIyLDcgQEAKIAkJfSB2ZXRoOwogCiAJCXZldGguaF92bGFuX3Byb3RvID0gc2tiLT52bGFuX3Byb3RvOwotCQl2ZXRoLmhfdmxhbl9UQ0kgPSBodG9ucyh2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJCXZldGguaF92bGFuX1RDSSA9IGh0b25zKHNrYl92bGFuX3RhZ19nZXQoc2tiKSk7CiAKIAkJdmxhbl9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9wcm90byk7CiAKQEAgLTEzODAsNyArMTM2NCw3IEBACiAJc2tiID0gX19za2JfcmVjdl9kYXRhZ3JhbSh0ZmlsZS0+c29ja2V0LnNrLCBub2Jsb2NrID8gTVNHX0RPTlRXQUlUIDogMCwKIAkJCQkgICZwZWVrZWQsICZvZmYsICZlcnIpOwogCWlmICghc2tiKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGVycjsKIAogCXJldCA9IHR1bl9wdXRfdXNlcih0dW4sIHRmaWxlLCBza2IsIHRvKTsKIAlpZiAodW5saWtlbHkocmV0IDwgMCkpCkBAIC0xNTAxLDcgKzE0ODUsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gdHVuX2RvX3JlYWQodHVuLCB0ZmlsZSwgJm0tPm1zZ19pdGVyLCBmbGFncyAmIE1TR19ET05UV0FJVCk7Ci0JaWYgKHJldCA+IHRvdGFsX2xlbikgeworCWlmIChyZXQgPiAoc3NpemVfdCl0b3RhbF9sZW4pIHsKIAkJbS0+bXNnX2ZsYWdzIHw9IE1TR19UUlVOQzsKIAkJcmV0ID0gZmxhZ3MgJiBNU0dfVFJVTkMgPyByZXQgOiB0b3RhbF9sZW47CiAJfQpAQCAtMTU2Niw2ICsxNTUwLDE3IEBACiBzdGF0aWMgREVWSUNFX0FUVFIob3duZXIsIDA0NDQsIHR1bl9zaG93X293bmVyLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihncm91cCwgMDQ0NCwgdHVuX3Nob3dfZ3JvdXAsIE5VTEwpOwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdHVuX2Rldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl90dW5fZmxhZ3MuYXR0ciwKKwkmZGV2X2F0dHJfb3duZXIuYXR0ciwKKwkmZGV2X2F0dHJfZ3JvdXAuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB0dW5fYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSB0dW5fZGV2X2F0dHJzCit9OworCiBzdGF0aWMgaW50IHR1bl9zZXRfaWZmKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpZnJlcSAqaWZyKQogewogCXN0cnVjdCB0dW5fc3RydWN0ICp0dW47CkBAIC0xNjQ2LDYgKzE2NDEsNyBAQAogCQlkZXZfbmV0X3NldChkZXYsIG5ldCk7CiAJCWRldi0+cnRubF9saW5rX29wcyA9ICZ0dW5fbGlua19vcHM7CiAJCWRldi0+aWZpbmRleCA9IHRmaWxlLT5pZmluZGV4OworCQlkZXYtPnN5c2ZzX2dyb3Vwc1swXSA9ICZ0dW5fYXR0cl9ncm91cDsKIAogCQl0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwogCQl0dW4tPmRldiA9IGRldjsKQEAgLTE2ODEsMTEgKzE2NzcsNiBAQAogCQllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UodHVuLT5kZXYpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gZXJyX2RldGFjaDsKLQotCQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZ0dW4tPmRldi0+ZGV2LCAmZGV2X2F0dHJfdHVuX2ZsYWdzKSB8fAotCQkgICAgZGV2aWNlX2NyZWF0ZV9maWxlKCZ0dW4tPmRldi0+ZGV2LCAmZGV2X2F0dHJfb3duZXIpIHx8Ci0JCSAgICBkZXZpY2VfY3JlYXRlX2ZpbGUoJnR1bi0+ZGV2LT5kZXYsICZkZXZfYXR0cl9ncm91cCkpCi0JCQlwcl9lcnIoIkZhaWxlZCB0byBjcmVhdGUgdHVuIHN5c2ZzIGZpbGVzXG4iKTsKIAl9CiAKIAluZXRpZl9jYXJyaWVyX29uKHR1bi0+ZGV2KTsKQEAgLTE3NDYsNiArMTczNywxMSBAQAogCQkJCWZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKIAkJCWFyZyAmPSB+KFRVTl9GX1RTTzR8VFVOX0ZfVFNPNik7CiAJCX0KKworCQlpZiAoYXJnICYgVFVOX0ZfVUZPKSB7CisJCQlmZWF0dXJlcyB8PSBORVRJRl9GX1VGTzsKKwkJCWFyZyAmPSB+VFVOX0ZfVUZPOworCQl9CiAJfQogCiAJLyogVGhpcyBnaXZlcyB0aGUgdXNlciBhIHdheSB0byB0ZXN0IGZvciBuZXcgZmVhdHVyZXMgaW4gZnV0dXJlIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKaW5kZXggOWM1YWE5Mi4uNmI4ZWZjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwpAQCAtNTgsNyArNTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgpAQCAtMTU0LDYgKzE1Myw3IEBACiAJc3RydWN0IGhzb19kZXZpY2UgKnBhcmVudDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0OwogCXN0cnVjdCByZmtpbGwgKnJma2lsbDsKKwljaGFyIG5hbWVbMjRdOwogCiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICppbl9lbmRwOwogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqb3V0X2VuZHA7CkBAIC0yNzQsNyArMjc0LDYgQEAKIAl1OCB1c2JfZ29uZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYXN5bmNfZ2V0X2ludGY7CiAJc3RydWN0IHdvcmtfc3RydWN0IGFzeW5jX3B1dF9pbnRmOwotCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF9kZXZpY2U7CiAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiOwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CkBAIC0zNDAsNyArMzM5LDYgQEAKIHN0YXRpYyBpbnQgaHNvX3B1dF9hY3Rpdml0eShzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2Rldik7CiBzdGF0aWMgaW50IGhzb19nZXRfYWN0aXZpdHkoc3RydWN0IGhzb19kZXZpY2UgKmhzb19kZXYpOwogc3RhdGljIHZvaWQgdGlvY21nZXRfaW50cl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwotc3RhdGljIHZvaWQgcmVzZXRfZGV2aWNlKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSk7CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBIZWxwaW5nIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01MzMsNiArNTMxLDEzIEBACiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoaHNvdHlwZSwgU19JUlVHTywgaHNvX3N5c2ZzX3Nob3dfcG9ydHR5cGUsIE5VTEwpOwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaHNvX3NlcmlhbF9kZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfaHNvdHlwZS5hdHRyLAorCU5VTEwKK307CisKK0FUVFJJQlVURV9HUk9VUFMoaHNvX3NlcmlhbF9kZXYpOworCiBzdGF0aWMgaW50IGhzb191cmJfdG9faW5kZXgoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwgc3RydWN0IHVyYiAqdXJiKQogewogCWludCBpZHg7CkBAIC02OTYsNyArNzAxLDcgQEAKIAljYXNlIC1FVElNRURPVVQ6CiAJCWV4cGxhbmF0aW9uID0gInByb3RvY29sIGVycm9yIjsKIAkJaWYgKGhzb19kZXYpCi0JCQlzY2hlZHVsZV93b3JrKCZoc29fZGV2LT5yZXNldF9kZXZpY2UpOworCQkJdXNiX3F1ZXVlX3Jlc2V0X2RldmljZShoc29fZGV2LT5pbnRlcmZhY2UpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlleHBsYW5hdGlvbiA9ICJ1bmtub3duIHN0YXR1cyI7CkBAIC0xMjcxLDcgKzEyNzYsNiBAQAogCQlnb3RvIGVycl9vdXQ7CiAKIAlEMSgiT3BlbmluZyAlZCIsIHNlcmlhbC0+bWlub3IpOwotCWtyZWZfZ2V0KCZzZXJpYWwtPnBhcmVudC0+cmVmKTsKIAogCS8qIHNldHVwICovCiAJdHR5LT5kcml2ZXJfZGF0YSA9IHNlcmlhbDsKQEAgLTEyOTAsNyArMTI5NCw4IEBACiAJCWlmIChyZXN1bHQpIHsKIAkJCWhzb19zdG9wX3NlcmlhbF9kZXZpY2Uoc2VyaWFsLT5wYXJlbnQpOwogCQkJc2VyaWFsLT5wb3J0LmNvdW50LS07Ci0JCQlrcmVmX3B1dCgmc2VyaWFsLT5wYXJlbnQtPnJlZiwgaHNvX3NlcmlhbF9yZWZfZnJlZSk7CisJCX0gZWxzZSB7CisJCQlrcmVmX2dldCgmc2VyaWFsLT5wYXJlbnQtPnJlZik7CiAJCX0KIAl9IGVsc2UgewogCQlEMSgiUG9ydCB3YXMgYWxyZWFkeSBvcGVuIik7CkBAIC0xMzQwLDggKzEzNDUsNiBAQAogCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc2VyaWFsLT5wYXJlbnQtPmludGVyZmFjZSk7CiAKIAltdXRleF91bmxvY2soJnNlcmlhbC0+cGFyZW50LT5tdXRleCk7Ci0KLQlrcmVmX3B1dCgmc2VyaWFsLT5wYXJlbnQtPnJlZiwgaHNvX3NlcmlhbF9yZWZfZnJlZSk7CiB9CiAKIC8qIGNsb3NlIHRoZSByZXF1ZXN0ZWQgc2VyaWFsIHBvcnQgKi8KQEAgLTEzOTIsNiArMTM5NSwxNiBAQAogCXJldHVybiByb29tOwogfQogCitzdGF0aWMgdm9pZCBoc29fc2VyaWFsX2NsZWFudXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsID0gdHR5LT5kcml2ZXJfZGF0YTsKKworCWlmICghc2VyaWFsKQorCQlyZXR1cm47CisKKwlrcmVmX3B1dCgmc2VyaWFsLT5wYXJlbnQtPnJlZiwgaHNvX3NlcmlhbF9yZWZfZnJlZSk7Cit9CisKIC8qIHNldHVwIHRoZSB0ZXJtICovCiBzdGF0aWMgdm9pZCBoc29fc2VyaWFsX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBrdGVybWlvcyAqb2xkKQogewpAQCAtMjE5OCw4ICsyMjExLDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9yeF91cmJzOyBpKyspIHsKIAkJaWYgKHNlcmlhbC0+cnhfdXJiW2ldKSB7Ci0JCQkJdXNiX2tpbGxfdXJiKHNlcmlhbC0+cnhfdXJiW2ldKTsKLQkJCQlzZXJpYWwtPnJ4X3VyYl9maWxsZWRbaV0gPSAwOworCQkJdXNiX2tpbGxfdXJiKHNlcmlhbC0+cnhfdXJiW2ldKTsKKwkJCXNlcmlhbC0+cnhfdXJiX2ZpbGxlZFtpXSA9IDA7CiAJCX0KIAl9CiAJc2VyaWFsLT5jdXJyX3J4X3VyYl9pZHggPSAwOwpAQCAtMjIyOCwxNSArMjI0MSwxNSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBoc29fc2VyaWFsX3R0eV91bnJlZ2lzdGVyKHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwpCit7CisJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKHR0eV9kcnYsIHNlcmlhbC0+bWlub3IpOworfQorCiBzdGF0aWMgdm9pZCBoc29fc2VyaWFsX2NvbW1vbl9mcmVlKHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IGk7CiAKLQlpZiAoc2VyaWFsLT5wYXJlbnQtPmRldikKLQkJZGV2aWNlX3JlbW92ZV9maWxlKHNlcmlhbC0+cGFyZW50LT5kZXYsICZkZXZfYXR0cl9oc290eXBlKTsKLQotCXR0eV91bnJlZ2lzdGVyX2RldmljZSh0dHlfZHJ2LCBzZXJpYWwtPm1pbm9yKTsKLQogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9yeF91cmJzOyBpKyspIHsKIAkJLyogdW5saW5rIGFuZCBmcmVlIFJYIFVSQiAqLwogCQl1c2JfZnJlZV91cmIoc2VyaWFsLT5yeF91cmJbaV0pOwpAQCAtMjI0Niw2ICsyMjU5LDcgQEAKIAogCS8qIHVubGluayBhbmQgZnJlZSBUWCBVUkIgKi8KIAl1c2JfZnJlZV91cmIoc2VyaWFsLT50eF91cmIpOworCWtmcmVlKHNlcmlhbC0+dHhfYnVmZmVyKTsKIAlrZnJlZShzZXJpYWwtPnR4X2RhdGEpOwogCXR0eV9wb3J0X2Rlc3Ryb3koJnNlcmlhbC0+cG9ydCk7CiB9CkBAIC0yMjY0LDExICsyMjc4LDEwIEBACiAJCWdvdG8gZXhpdDsKIAogCS8qIHJlZ2lzdGVyIG91ciBtaW5vciBudW1iZXIgKi8KLQlzZXJpYWwtPnBhcmVudC0+ZGV2ID0gdHR5X3BvcnRfcmVnaXN0ZXJfZGV2aWNlKCZzZXJpYWwtPnBvcnQsIHR0eV9kcnYsCi0JCQltaW5vciwgJnNlcmlhbC0+cGFyZW50LT5pbnRlcmZhY2UtPmRldik7CisJc2VyaWFsLT5wYXJlbnQtPmRldiA9IHR0eV9wb3J0X3JlZ2lzdGVyX2RldmljZV9hdHRyKCZzZXJpYWwtPnBvcnQsCisJCQl0dHlfZHJ2LCBtaW5vciwgJnNlcmlhbC0+cGFyZW50LT5pbnRlcmZhY2UtPmRldiwKKwkJCXNlcmlhbC0+cGFyZW50LCBoc29fc2VyaWFsX2Rldl9ncm91cHMpOwogCWRldiA9IHNlcmlhbC0+cGFyZW50LT5kZXY7Ci0JZGV2X3NldF9kcnZkYXRhKGRldiwgc2VyaWFsLT5wYXJlbnQpOwotCWkgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaHNvdHlwZSk7CiAKIAkvKiBmaWxsIGluIHNwZWNpZmljIGRhdGEgZm9yIGxhdGVyIHVzZSAqLwogCXNlcmlhbC0+bWlub3IgPSBtaW5vcjsKQEAgLTIzMTYsNiArMjMyOSw3IEBACiAKIAlyZXR1cm4gMDsKIGV4aXQ6CisJaHNvX3NlcmlhbF90dHlfdW5yZWdpc3RlcihzZXJpYWwpOwogCWhzb19zZXJpYWxfY29tbW9uX2ZyZWUoc2VyaWFsKTsKIAlyZXR1cm4gLTE7CiB9CkBAIC0yMzM4LDcgKzIzNTIsNiBAQAogCiAJSU5JVF9XT1JLKCZoc29fZGV2LT5hc3luY19nZXRfaW50ZiwgYXN5bmNfZ2V0X2ludGYpOwogCUlOSVRfV09SSygmaHNvX2Rldi0+YXN5bmNfcHV0X2ludGYsIGFzeW5jX3B1dF9pbnRmKTsKLQlJTklUX1dPUksoJmhzb19kZXYtPnJlc2V0X2RldmljZSwgcmVzZXRfZGV2aWNlKTsKIAogCXJldHVybiBoc29fZGV2OwogfQpAQCAtMjQ1OSwyNyArMjQ3MiwyMSBAQAogewogCXN0cnVjdCBoc29fbmV0ICpoc29fbmV0ID0gZGV2Mm5ldChoc29fZGV2KTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaHNvX25ldC0+bmV0LT5kZXY7Ci0JY2hhciAqcmZrbjsKKwlzdGF0aWMgdTMyIHJma2lsbF9jb3VudGVyOwogCi0JcmZrbiA9IGt6YWxsb2MoMjAsIEdGUF9LRVJORUwpOwotCWlmICghcmZrbikKLQkJZGV2X2VycihkZXYsICIlcyAtIE91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwlzbnByaW50Zihoc29fbmV0LT5uYW1lLCBzaXplb2YoaHNvX25ldC0+bmFtZSksICJoc28tJWQiLAorCQkgcmZraWxsX2NvdW50ZXIrKyk7CiAKLQlzbnByaW50ZihyZmtuLCAyMCwgImhzby0lZCIsCi0JCSBpbnRlcmZhY2UtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcik7Ci0KLQloc29fbmV0LT5yZmtpbGwgPSByZmtpbGxfYWxsb2MocmZrbiwKKwloc29fbmV0LT5yZmtpbGwgPSByZmtpbGxfYWxsb2MoaHNvX25ldC0+bmFtZSwKIAkJCQkgICAgICAgJmludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKS0+ZGV2LAogCQkJCSAgICAgICBSRktJTExfVFlQRV9XV0FOLAogCQkJCSAgICAgICAmaHNvX3Jma2lsbF9vcHMsIGhzb19kZXYpOwogCWlmICghaHNvX25ldC0+cmZraWxsKSB7CiAJCWRldl9lcnIoZGV2LCAiJXMgLSBPdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7Ci0JCWtmcmVlKHJma24pOwogCQlyZXR1cm47CiAJfQogCWlmIChyZmtpbGxfcmVnaXN0ZXIoaHNvX25ldC0+cmZraWxsKSA8IDApIHsKIAkJcmZraWxsX2Rlc3Ryb3koaHNvX25ldC0+cmZraWxsKTsKLQkJa2ZyZWUocmZrbik7CiAJCWhzb19uZXQtPnJma2lsbCA9IE5VTEw7CiAJCWRldl9lcnIoZGV2LCAiJXMgLSBGYWlsZWQgdG8gcmVnaXN0ZXIgcmZraWxsXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKQEAgLTI1OTQsNyArMjYwMSw2IEBACiAKIAlpZiAoIXNlcmlhbCkKIAkJcmV0dXJuOwotCXNldF9zZXJpYWxfYnlfaW5kZXgoc2VyaWFsLT5taW5vciwgTlVMTCk7CiAKIAloc29fc2VyaWFsX2NvbW1vbl9mcmVlKHNlcmlhbCk7CiAKQEAgLTI2ODQsNiArMjY5MCw3IEBACiAJcmV0dXJuIGhzb19kZXY7CiAKIGV4aXQyOgorCWhzb19zZXJpYWxfdHR5X3VucmVnaXN0ZXIoc2VyaWFsKTsKIAloc29fc2VyaWFsX2NvbW1vbl9mcmVlKHNlcmlhbCk7CiBleGl0OgogCWhzb19mcmVlX3Rpb21nZXQoc2VyaWFsKTsKQEAgLTMwODMsMjYgKzMwOTAsNiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc2V0X2RldmljZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCi17Ci0Jc3RydWN0IGhzb19kZXZpY2UgKmhzb19kZXYgPQotCSAgICBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGhzb19kZXZpY2UsIHJlc2V0X2RldmljZSk7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYiA9IGhzb19kZXYtPnVzYjsKLQlpbnQgcmVzdWx0OwotCi0JaWYgKGhzb19kZXYtPnVzYl9nb25lKSB7Ci0JCUQxKCJObyByZXNldCBkdXJpbmcgZGlzY29ubmVjdFxuIik7Ci0JfSBlbHNlIHsKLQkJcmVzdWx0ID0gdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCh1c2IsIGhzb19kZXYtPmludGVyZmFjZSk7Ci0JCWlmIChyZXN1bHQgPCAwKQotCQkJRDEoInVuYWJsZSB0byBsb2NrIGRldmljZSBmb3IgcmVzZXQ6ICVkXG4iLCByZXN1bHQpOwotCQllbHNlIHsKLQkJCXVzYl9yZXNldF9kZXZpY2UodXNiKTsKLQkJCXVzYl91bmxvY2tfZGV2aWNlKHVzYik7Ci0JCX0KLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIGhzb19zZXJpYWxfcmVmX2ZyZWUoc3RydWN0IGtyZWYgKnJlZikKIHsKIAlzdHJ1Y3QgaHNvX2RldmljZSAqaHNvX2RldiA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBoc29fZGV2aWNlLCByZWYpOwpAQCAtMzExMiwxOCArMzA5OSwyMiBAQAogCiBzdGF0aWMgdm9pZCBoc29fZnJlZV9pbnRlcmZhY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKLQlzdHJ1Y3QgaHNvX3NlcmlhbCAqaHNvX2RldjsKKwlzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsOwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEhTT19TRVJJQUxfVFRZX01JTk9SUzsgaSsrKSB7CiAJCWlmIChzZXJpYWxfdGFibGVbaV0gJiYKIAkJICAgIChzZXJpYWxfdGFibGVbaV0tPmludGVyZmFjZSA9PSBpbnRlcmZhY2UpKSB7Ci0JCQloc29fZGV2ID0gZGV2MnNlcihzZXJpYWxfdGFibGVbaV0pOwotCQkJdHR5X3BvcnRfdHR5X2hhbmd1cCgmaHNvX2Rldi0+cG9ydCwgZmFsc2UpOwotCQkJbXV0ZXhfbG9jaygmaHNvX2Rldi0+cGFyZW50LT5tdXRleCk7Ci0JCQloc29fZGV2LT5wYXJlbnQtPnVzYl9nb25lID0gMTsKLQkJCW11dGV4X3VubG9jaygmaHNvX2Rldi0+cGFyZW50LT5tdXRleCk7CisJCQlzZXJpYWwgPSBkZXYyc2VyKHNlcmlhbF90YWJsZVtpXSk7CisJCQl0dHlfcG9ydF90dHlfaGFuZ3VwKCZzZXJpYWwtPnBvcnQsIGZhbHNlKTsKKwkJCW11dGV4X2xvY2soJnNlcmlhbC0+cGFyZW50LT5tdXRleCk7CisJCQlzZXJpYWwtPnBhcmVudC0+dXNiX2dvbmUgPSAxOworCQkJbXV0ZXhfdW5sb2NrKCZzZXJpYWwtPnBhcmVudC0+bXV0ZXgpOworCQkJY2FuY2VsX3dvcmtfc3luYygmc2VyaWFsX3RhYmxlW2ldLT5hc3luY19wdXRfaW50Zik7CisJCQljYW5jZWxfd29ya19zeW5jKCZzZXJpYWxfdGFibGVbaV0tPmFzeW5jX2dldF9pbnRmKTsKKwkJCWhzb19zZXJpYWxfdHR5X3VucmVnaXN0ZXIoc2VyaWFsKTsKIAkJCWtyZWZfcHV0KCZzZXJpYWxfdGFibGVbaV0tPnJlZiwgaHNvX3NlcmlhbF9yZWZfZnJlZSk7CisJCQlzZXRfc2VyaWFsX2J5X2luZGV4KGksIE5VTEwpOwogCQl9CiAJfQogCkBAIC0zMjE1LDYgKzMyMDYsNyBAQAogCS5jbG9zZSA9IGhzb19zZXJpYWxfY2xvc2UsCiAJLndyaXRlID0gaHNvX3NlcmlhbF93cml0ZSwKIAkud3JpdGVfcm9vbSA9IGhzb19zZXJpYWxfd3JpdGVfcm9vbSwKKwkuY2xlYW51cCA9IGhzb19zZXJpYWxfY2xlYW51cCwKIAkuaW9jdGwgPSBoc29fc2VyaWFsX2lvY3RsLAogCS5zZXRfdGVybWlvcyA9IGhzb19zZXJpYWxfc2V0X3Rlcm1pb3MsCiAJLmNoYXJzX2luX2J1ZmZlciA9IGhzb19zZXJpYWxfY2hhcnNfaW5fYnVmZmVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMgYi9kcml2ZXJzL25ldC91c2IvcjgxNTIuYwppbmRleCBiZjQwNWYxMy4uNTk4MGFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3I4MTUyLmMKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IvY2RjLmg+CiAKIC8qIFZlcnNpb24gSW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjA3LjAgKDIwMTQvMTAvMDkpIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuMDguMCAoMjAxNS8wMS8xMykiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlJlYWx0ZWsgbGludXggbmljIG1haW50YWluZXJzIDxuaWNfc3dzZEByZWFsdGVrLmNvbT4iCiAjZGVmaW5lIERSSVZFUl9ERVNDICJSZWFsdGVrIFJUTDgxNTIvUlRMODE1MyBCYXNlZCBVU0IgRXRoZXJuZXQgQWRhcHRlcnMiCiAjZGVmaW5lIE1PRFVMRU5BTUUgInI4MTUyIgpAQCAtNDQ4LDYgKzQ0OCw3IEBACiAjZGVmaW5lIFJUTDgxNTJfUk1TCQkoVkxBTl9FVEhfRlJBTUVfTEVOICsgVkxBTl9ITEVOKQogI2RlZmluZSBSVEw4MTUzX1JNUwkJUlRMODE1M19NQVhfUEFDS0VUCiAjZGVmaW5lIFJUTDgxNTJfVFhfVElNRU9VVAkoNSAqIEhaKQorI2RlZmluZSBSVEw4MTUyX05BUElfV0VJR0hUCTY0CiAKIC8qIHJ0bDgxNTIgZmxhZ3MgKi8KIGVudW0gcnRsODE1Ml9mbGFncyB7CkBAIC00NTcsNyArNDU4LDcgQEAKIAlSVEw4MTUyX0xJTktfQ0hHLAogCVNFTEVDVElWRV9TVVNQRU5ELAogCVBIWV9SRVNFVCwKLQlTQ0hFRFVMRV9UQVNLTEVULAorCVNDSEVEVUxFX05BUEksCiB9OwogCiAvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlICovCkBAIC00ODgsMTYgKzQ4OSwxNiBAQAogI2RlZmluZSBSWF9MRU5fTUFTSwkJCTB4N2ZmZgogCiAJX19sZTMyIG9wdHMyOwotI2RlZmluZSBSRF9VRFBfQ1MJCQkoMSA8PCAyMykKLSNkZWZpbmUgUkRfVENQX0NTCQkJKDEgPDwgMjIpCi0jZGVmaW5lIFJEX0lQVjZfQ1MJCQkoMSA8PCAyMCkKLSNkZWZpbmUgUkRfSVBWNF9DUwkJCSgxIDw8IDE5KQorI2RlZmluZSBSRF9VRFBfQ1MJCQlCSVQoMjMpCisjZGVmaW5lIFJEX1RDUF9DUwkJCUJJVCgyMikKKyNkZWZpbmUgUkRfSVBWNl9DUwkJCUJJVCgyMCkKKyNkZWZpbmUgUkRfSVBWNF9DUwkJCUJJVCgxOSkKIAogCV9fbGUzMiBvcHRzMzsKLSNkZWZpbmUgSVBGCQkJCSgxIDw8IDIzKSAvKiBJUCBjaGVja3N1bSBmYWlsICovCi0jZGVmaW5lIFVEUEYJCQkJKDEgPDwgMjIpIC8qIFVEUCBjaGVja3N1bSBmYWlsICovCi0jZGVmaW5lIFRDUEYJCQkJKDEgPDwgMjEpIC8qIFRDUCBjaGVja3N1bSBmYWlsICovCi0jZGVmaW5lIFJYX1ZMQU5fVEFHCQkJKDEgPDwgMTYpCisjZGVmaW5lIElQRgkJCQlCSVQoMjMpIC8qIElQIGNoZWNrc3VtIGZhaWwgKi8KKyNkZWZpbmUgVURQRgkJCQlCSVQoMjIpIC8qIFVEUCBjaGVja3N1bSBmYWlsICovCisjZGVmaW5lIFRDUEYJCQkJQklUKDIxKSAvKiBUQ1AgY2hlY2tzdW0gZmFpbCAqLworI2RlZmluZSBSWF9WTEFOX1RBRwkJCUJJVCgxNikKIAogCV9fbGUzMiBvcHRzNDsKIAlfX2xlMzIgb3B0czU7CkBAIC01MDYsMjQgKzUwNywyNCBAQAogCiBzdHJ1Y3QgdHhfZGVzYyB7CiAJX19sZTMyIG9wdHMxOwotI2RlZmluZSBUWF9GUwkJCSgxIDw8IDMxKSAvKiBGaXJzdCBzZWdtZW50IG9mIGEgcGFja2V0ICovCi0jZGVmaW5lIFRYX0xTCQkJKDEgPDwgMzApIC8qIEZpbmFsIHNlZ21lbnQgb2YgYSBwYWNrZXQgKi8KLSNkZWZpbmUgR1RTRU5EVjQJCSgxIDw8IDI4KQotI2RlZmluZSBHVFNFTkRWNgkJKDEgPDwgMjcpCisjZGVmaW5lIFRYX0ZTCQkJQklUKDMxKSAvKiBGaXJzdCBzZWdtZW50IG9mIGEgcGFja2V0ICovCisjZGVmaW5lIFRYX0xTCQkJQklUKDMwKSAvKiBGaW5hbCBzZWdtZW50IG9mIGEgcGFja2V0ICovCisjZGVmaW5lIEdUU0VORFY0CQlCSVQoMjgpCisjZGVmaW5lIEdUU0VORFY2CQlCSVQoMjcpCiAjZGVmaW5lIEdUVENQSE9fU0hJRlQJCTE4CiAjZGVmaW5lIEdUVENQSE9fTUFYCQkweDdmVQogI2RlZmluZSBUWF9MRU5fTUFYCQkweDNmZmZmVQogCiAJX19sZTMyIG9wdHMyOwotI2RlZmluZSBVRFBfQ1MJCQkoMSA8PCAzMSkgLyogQ2FsY3VsYXRlIFVEUC9JUCBjaGVja3N1bSAqLwotI2RlZmluZSBUQ1BfQ1MJCQkoMSA8PCAzMCkgLyogQ2FsY3VsYXRlIFRDUC9JUCBjaGVja3N1bSAqLwotI2RlZmluZSBJUFY0X0NTCQkJKDEgPDwgMjkpIC8qIENhbGN1bGF0ZSBJUHY0IGNoZWNrc3VtICovCi0jZGVmaW5lIElQVjZfQ1MJCQkoMSA8PCAyOCkgLyogQ2FsY3VsYXRlIElQdjYgY2hlY2tzdW0gKi8KKyNkZWZpbmUgVURQX0NTCQkJQklUKDMxKSAvKiBDYWxjdWxhdGUgVURQL0lQIGNoZWNrc3VtICovCisjZGVmaW5lIFRDUF9DUwkJCUJJVCgzMCkgLyogQ2FsY3VsYXRlIFRDUC9JUCBjaGVja3N1bSAqLworI2RlZmluZSBJUFY0X0NTCQkJQklUKDI5KSAvKiBDYWxjdWxhdGUgSVB2NCBjaGVja3N1bSAqLworI2RlZmluZSBJUFY2X0NTCQkJQklUKDI4KSAvKiBDYWxjdWxhdGUgSVB2NiBjaGVja3N1bSAqLwogI2RlZmluZSBNU1NfU0hJRlQJCTE3CiAjZGVmaW5lIE1TU19NQVgJCQkweDdmZlUKICNkZWZpbmUgVENQSE9fU0hJRlQJCTE3CiAjZGVmaW5lIFRDUEhPX01BWAkJMHg3ZmZVCi0jZGVmaW5lIFRYX1ZMQU5fVEFHCQkJKDEgPDwgMTYpCisjZGVmaW5lIFRYX1ZMQU5fVEFHCQlCSVQoMTYpCiB9OwogCiBzdHJ1Y3QgcjgxNTI7CkBAIC01NDksMTQgKzU1MCwxNCBAQAogc3RydWN0IHI4MTUyIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0bDsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCB1cmIgKmludHJfdXJiOwogCXN0cnVjdCB0eF9hZ2cgdHhfaW5mb1tSVEw4MTUyX01BWF9UWF07CiAJc3RydWN0IHJ4X2FnZyByeF9pbmZvW1JUTDgxNTJfTUFYX1JYXTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X2RvbmUsIHR4X2ZyZWU7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlLCByeF9xdWV1ZTsKIAlzcGlubG9ja190IHJ4X2xvY2ssIHR4X2xvY2s7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBzY2hlZHVsZTsKIAlzdHJ1Y3QgbWlpX2lmX2luZm8gbWlpOwpAQCAtNTgwLDcgKzU4MSw2IEBACiAJdTE2IG9jcF9iYXNlOwogCXU4ICppbnRyX2J1ZmY7CiAJdTggdmVyc2lvbjsKLQl1OCBzcGVlZDsKIH07CiAKIGVudW0gcnRsX3ZlcnNpb24gewpAQCAtMTA1MCw3ICsxMDUwLDcgQEAKIAkJc3Bpbl9sb2NrKCZ0cC0+cnhfbG9jayk7CiAJCWxpc3RfYWRkX3RhaWwoJmFnZy0+bGlzdCwgJnRwLT5yeF9kb25lKTsKIAkJc3Bpbl91bmxvY2soJnRwLT5yeF9sb2NrKTsKLQkJdGFza2xldF9zY2hlZHVsZSgmdHAtPnRsKTsKKwkJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCQlyZXR1cm47CiAJY2FzZSAtRVNIVVRET1dOOgogCQlzZXRfYml0KFJUTDgxNTJfVU5QTFVHLCAmdHAtPmZsYWdzKTsKQEAgLTExMTQsNyArMTExNCw3IEBACiAJCXJldHVybjsKIAogCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZ0cC0+dHhfcXVldWUpKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZ0cC0+dGwpOworCQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiB9CiAKIHN0YXRpYyB2b2lkIGludHJfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQpAQCAtMTE1NiwxMiArMTE1NiwxMiBAQAogCiAJZCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOwogCWlmIChJTlRSX0xJTksgJiBfX2xlMTZfdG9fY3B1KGRbMF0pKSB7Ci0JCWlmICghKHRwLT5zcGVlZCAmIExJTktfU1RBVFVTKSkgeworCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sodHAtPm5ldGRldikpIHsKIAkJCXNldF9iaXQoUlRMODE1Ml9MSU5LX0NIRywgJnRwLT5mbGFncyk7CiAJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRwLT5zY2hlZHVsZSwgMCk7CiAJCX0KIAl9IGVsc2UgewotCQlpZiAodHAtPnNwZWVkICYgTElOS19TVEFUVVMpIHsKKwkJaWYgKG5ldGlmX2NhcnJpZXJfb2sodHAtPm5ldGRldikpIHsKIAkJCXNldF9iaXQoUlRMODE1Ml9MSU5LX0NIRywgJnRwLT5mbGFncyk7CiAJCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnRwLT5zY2hlZHVsZSwgMCk7CiAJCX0KQEAgLTEyMzMsNiArMTIzMyw3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnRwLT50eF9sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCgmdHAtPnR4X2ZyZWUpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnRwLT50eF9xdWV1ZSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdHAtPnJ4X3F1ZXVlKTsKIAogCWZvciAoaSA9IDA7IGkgPCBSVEw4MTUyX01BWF9SWDsgaSsrKSB7CiAJCWJ1ZiA9IGttYWxsb2Nfbm9kZShhZ2dfYnVmX3N6LCBHRlBfS0VSTkVMLCBub2RlKTsKQEAgLTEzMjksMTggKzEzMzAsNiBAQAogCXJldHVybiBhZ2c7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19iZTE2IGdldF9wcm90b2NvbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCV9fYmUxNiBwcm90b2NvbDsKLQotCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSkKLQkJcHJvdG9jb2wgPSB2bGFuX2V0aF9oZHIoc2tiKS0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKLQllbHNlCi0JCXByb3RvY29sID0gc2tiLT5wcm90b2NvbDsKLQotCXJldHVybiBwcm90b2NvbDsKLX0KLQogLyogcjgxNTJfY3N1bV93b3JrYXJvdW5kKCkKICAqIFRoZSBodyBsaW1pdGVzIHRoZSB2YWx1ZSB0aGUgdHJhbnNwb3J0IG9mZnNldC4gV2hlbiB0aGUgb2Zmc2V0IGlzIG91dCBvZiB0aGUKICAqIHJhbmdlLCBjYWxjdWxhdGUgdGhlIGNoZWNrc3VtIGJ5IHN3LgpAQCAtMTQwOSwxMCArMTM5OCwxMCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcnRsX3R4X3ZsYW5fdGFnKHN0cnVjdCB0eF9kZXNjICpkZXNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgewogCQl1MzIgb3B0czI7CiAKLQkJb3B0czIgPSBUWF9WTEFOX1RBRyB8IHN3YWIxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJCW9wdHMyID0gVFhfVkxBTl9UQUcgfCBzd2FiMTYoc2tiX3ZsYW5fdGFnX2dldChza2IpKTsKIAkJZGVzYy0+b3B0czIgfD0gY3B1X3RvX2xlMzIob3B0czIpOwogCX0KIH0KQEAgLTE0NDYsNyArMTQzNSw3IEBACiAJCQlnb3RvIHVuYXZhaWxhYmxlOwogCQl9CiAKLQkJc3dpdGNoIChnZXRfcHJvdG9jb2woc2tiKSkgeworCQlzd2l0Y2ggKHZsYW5fZ2V0X3Byb3RvY29sKHNrYikpIHsKIAkJY2FzZSBodG9ucyhFVEhfUF9JUCk6CiAJCQlvcHRzMSB8PSBHVFNFTkRWNDsKIAkJCWJyZWFrOwpAQCAtMTQ3Nyw3ICsxNDY2LDcgQEAKIAkJCWdvdG8gdW5hdmFpbGFibGU7CiAJCX0KIAotCQlzd2l0Y2ggKGdldF9wcm90b2NvbChza2IpKSB7CisJCXN3aXRjaCAodmxhbl9nZXRfcHJvdG9jb2woc2tiKSkgewogCQljYXNlIGh0b25zKEVUSF9QX0lQKToKIAkJCW9wdHMyIHw9IElQVjRfQ1M7CiAJCQlpcF9wcm90b2NvbCA9IGlwX2hkcihza2IpLT5wcm90b2NvbDsKQEAgLTE2MzcsMTMgKzE2MjYsMzIgQEAKIAlyZXR1cm4gY2hlY2tzdW07CiB9CiAKLXN0YXRpYyB2b2lkIHJ4X2JvdHRvbShzdHJ1Y3QgcjgxNTIgKnRwKQorc3RhdGljIGludCByeF9ib3R0b20oc3RydWN0IHI4MTUyICp0cCwgaW50IGJ1ZGdldCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKmN1cnNvciwgKm5leHQsIHJ4X3F1ZXVlOworCWludCByZXQgPSAwLCB3b3JrX2RvbmUgPSAwOworCisJaWYgKCFza2JfcXVldWVfZW1wdHkoJnRwLT5yeF9xdWV1ZSkpIHsKKwkJd2hpbGUgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUoJnRwLT5yeF9xdWV1ZSk7CisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gdHAtPm5ldGRldjsKKwkJCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZuZXRkZXYtPnN0YXRzOworCQkJdW5zaWduZWQgaW50IHBrdF9sZW47CisKKwkJCWlmICghc2tiKQorCQkJCWJyZWFrOworCisJCQlwa3RfbGVuID0gc2tiLT5sZW47CisJCQluYXBpX2dyb19yZWNlaXZlKCZ0cC0+bmFwaSwgc2tiKTsKKwkJCXdvcmtfZG9uZSsrOworCQkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKKwkJCXN0YXRzLT5yeF9ieXRlcyArPSBwa3RfbGVuOworCQl9CisJfQogCiAJaWYgKGxpc3RfZW1wdHkoJnRwLT5yeF9kb25lKSkKLQkJcmV0dXJuOworCQlnb3RvIG91dDE7CiAKIAlJTklUX0xJU1RfSEVBRCgmcnhfcXVldWUpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+cnhfbG9jaywgZmxhZ3MpOwpAQCAtMTY5Niw5ICsxNzA0LDE0IEBACiAJCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOwogCQkJcnRsX3J4X3ZsYW5fdGFnKHJ4X2Rlc2MsIHNrYik7Ci0JCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwotCQkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKLQkJCXN0YXRzLT5yeF9ieXRlcyArPSBwa3RfbGVuOworCQkJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgeworCQkJCW5hcGlfZ3JvX3JlY2VpdmUoJnRwLT5uYXBpLCBza2IpOworCQkJCXdvcmtfZG9uZSsrOworCQkJCXN0YXRzLT5yeF9wYWNrZXRzKys7CisJCQkJc3RhdHMtPnJ4X2J5dGVzICs9IHBrdF9sZW47CisJCQl9IGVsc2UgeworCQkJCV9fc2tiX3F1ZXVlX3RhaWwoJnRwLT5yeF9xdWV1ZSwgc2tiKTsKKwkJCX0KIAogZmluZF9uZXh0X3J4OgogCQkJcnhfZGF0YSA9IHJ4X2FnZ19hbGlnbihyeF9kYXRhICsgcGt0X2xlbiArIENSQ19TSVpFKTsKQEAgLTE3MDgsOCArMTcyMSwyMiBAQAogCQl9CiAKIHN1Ym1pdDoKLQkJcjgxNTJfc3VibWl0X3J4KHRwLCBhZ2csIEdGUF9BVE9NSUMpOworCQlpZiAoIXJldCkgeworCQkJcmV0ID0gcjgxNTJfc3VibWl0X3J4KHRwLCBhZ2csIEdGUF9BVE9NSUMpOworCQl9IGVsc2UgeworCQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwkJCWxpc3RfYWRkX3RhaWwoJmFnZy0+bGlzdCwgbmV4dCk7CisJCX0KIAl9CisKKwlpZiAoIWxpc3RfZW1wdHkoJnJ4X3F1ZXVlKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPnJ4X2xvY2ssIGZsYWdzKTsKKwkJbGlzdF9zcGxpY2VfdGFpbCgmcnhfcXVldWUsICZ0cC0+cnhfZG9uZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5yeF9sb2NrLCBmbGFncyk7CisJfQorCitvdXQxOgorCXJldHVybiB3b3JrX2RvbmU7CiB9CiAKIHN0YXRpYyB2b2lkIHR4X2JvdHRvbShzdHJ1Y3QgcjgxNTIgKnRwKQpAQCAtMTc0OSwxMiArMTc3Niw4IEBACiAJfSB3aGlsZSAocmVzID09IDApOwogfQogCi1zdGF0aWMgdm9pZCBib3R0b21faGFsZih1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBib3R0b21faGFsZihzdHJ1Y3QgcjgxNTIgKnRwKQogewotCXN0cnVjdCByODE1MiAqdHA7Ci0KLQl0cCA9IChzdHJ1Y3QgcjgxNTIgKilkYXRhOwotCiAJaWYgKHRlc3RfYml0KFJUTDgxNTJfVU5QTFVHLCAmdHAtPmZsYWdzKSkKIAkJcmV0dXJuOwogCkBAIC0xNzY2LDE3ICsxNzg5LDM4IEBACiAJaWYgKCFuZXRpZl9jYXJyaWVyX29rKHRwLT5uZXRkZXYpKQogCQlyZXR1cm47CiAKLQljbGVhcl9iaXQoU0NIRURVTEVfVEFTS0xFVCwgJnRwLT5mbGFncyk7CisJY2xlYXJfYml0KFNDSEVEVUxFX05BUEksICZ0cC0+ZmxhZ3MpOwogCi0JcnhfYm90dG9tKHRwKTsKIAl0eF9ib3R0b20odHApOwogfQogCitzdGF0aWMgaW50IHI4MTUyX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCByODE1MiAqdHAgPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IHI4MTUyLCBuYXBpKTsKKwlpbnQgd29ya19kb25lOworCisJd29ya19kb25lID0gcnhfYm90dG9tKHRwLCBidWRnZXQpOworCWJvdHRvbV9oYWxmKHRwKTsKKworCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZ0cC0+cnhfZG9uZSkpCisJCQluYXBpX3NjaGVkdWxlKG5hcGkpOworCX0KKworCXJldHVybiB3b3JrX2RvbmU7Cit9CisKIHN0YXRpYwogaW50IHI4MTUyX3N1Ym1pdF9yeChzdHJ1Y3QgcjgxNTIgKnRwLCBzdHJ1Y3QgcnhfYWdnICphZ2csIGdmcF90IG1lbV9mbGFncykKIHsKIAlpbnQgcmV0OwogCisJLyogVGhlIHJ4IHdvdWxkIGJlIHN0b3BwZWQsIHNvIHNraXAgc3VibWl0dGluZyAqLworCWlmICh0ZXN0X2JpdChSVEw4MTUyX1VOUExVRywgJnRwLT5mbGFncykgfHwKKwkgICAgIXRlc3RfYml0KFdPUktfRU5BQkxFLCAmdHAtPmZsYWdzKSB8fCAhbmV0aWZfY2Fycmllcl9vayh0cC0+bmV0ZGV2KSkKKwkJcmV0dXJuIDA7CisKIAl1c2JfZmlsbF9idWxrX3VyYihhZ2ctPnVyYiwgdHAtPnVkZXYsIHVzYl9yY3ZidWxrcGlwZSh0cC0+dWRldiwgMSksCiAJCQkgIGFnZy0+aGVhZCwgYWdnX2J1Zl9zeiwKIAkJCSAgKHVzYl9jb21wbGV0ZV90KXJlYWRfYnVsa19jYWxsYmFjaywgYWdnKTsKQEAgLTE3OTMsNyArMTgzNywxMSBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPnJ4X2xvY2ssIGZsYWdzKTsKIAkJbGlzdF9hZGRfdGFpbCgmYWdnLT5saXN0LCAmdHAtPnJ4X2RvbmUpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+cnhfbG9jaywgZmxhZ3MpOwotCQl0YXNrbGV0X3NjaGVkdWxlKCZ0cC0+dGwpOworCisJCW5ldGlmX2Vycih0cCwgcnhfZXJyLCB0cC0+bmV0ZGV2LAorCQkJICAiQ291bGRuJ3Qgc3VibWl0IHJ4WyVwXSwgcmV0ID0gJWRcbiIsIGFnZywgcmV0KTsKKworCQluYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTE4MzMsNyArMTg4MSw3IEBACiB7CiAJc3RydWN0IHI4MTUyICp0cCA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlpZiAodHAtPnNwZWVkICYgTElOS19TVEFUVVMpIHsKKwlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CiAJCXNldF9iaXQoUlRMODE1Ml9TRVRfUlhfTU9ERSwgJnRwLT5mbGFncyk7CiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdHAtPnNjaGVkdWxlLCAwKTsKIAl9CkBAIC0xOTEyLDExICsxOTYwLDExIEBACiAKIAlpZiAoIWxpc3RfZW1wdHkoJnRwLT50eF9mcmVlKSkgewogCQlpZiAodGVzdF9iaXQoU0VMRUNUSVZFX1NVU1BFTkQsICZ0cC0+ZmxhZ3MpKSB7Ci0JCQlzZXRfYml0KFNDSEVEVUxFX1RBU0tMRVQsICZ0cC0+ZmxhZ3MpOworCQkJc2V0X2JpdChTQ0hFRFVMRV9OQVBJLCAmdHAtPmZsYWdzKTsKIAkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmdHAtPnNjaGVkdWxlLCAwKTsKIAkJfSBlbHNlIHsKIAkJCXVzYl9tYXJrX2xhc3RfYnVzeSh0cC0+dWRldik7Ci0JCQl0YXNrbGV0X3NjaGVkdWxlKCZ0cC0+dGwpOworCQkJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCQl9CiAJfSBlbHNlIGlmIChza2JfcXVldWVfbGVuKCZ0cC0+dHhfcXVldWUpID4gdHAtPnR4X3FsZW4pIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwpAQCAtMTk5NSw2ICsyMDQzLDcgQEAKIHsKIAlpbnQgaSwgcmV0ID0gMDsKIAorCW5hcGlfZGlzYWJsZSgmdHAtPm5hcGkpOwogCUlOSVRfTElTVF9IRUFEKCZ0cC0+cnhfZG9uZSk7CiAJZm9yIChpID0gMDsgaSA8IFJUTDgxNTJfTUFYX1JYOyBpKyspIHsKIAkJSU5JVF9MSVNUX0hFQUQoJnRwLT5yeF9pbmZvW2ldLmxpc3QpOwpAQCAtMjAwMiw2ICsyMDUxLDcgQEAKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCX0KKwluYXBpX2VuYWJsZSgmdHAtPm5hcGkpOwogCiAJaWYgKHJldCAmJiArK2kgPCBSVEw4MTUyX01BWF9SWCkgewogCQlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X3F1ZXVlOwpAQCAtMjAzMiw2ICsyMDgyLDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgUlRMODE1Ml9NQVhfUlg7IGkrKykKIAkJdXNiX2tpbGxfdXJiKHRwLT5yeF9pbmZvW2ldLnVyYik7CiAKKwl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmdHAtPnJ4X3F1ZXVlKSkKKwkJZGV2X2tmcmVlX3NrYihfX3NrYl9kZXF1ZXVlKCZ0cC0+cnhfcXVldWUpKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMDQ3LDcgKzIxMDAsNyBAQAogCiAJcnhkeV9nYXRlZF9lbih0cCwgZmFsc2UpOwogCi0JcmV0dXJuIHJ0bF9zdGFydF9yeCh0cCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcnRsODE1Ml9lbmFibGUoc3RydWN0IHI4MTUyICp0cCkKQEAgLTI4NTIsMjAgKzI5MDUsMjAgQEAKIAlzcGVlZCA9IHJ0bDgxNTJfZ2V0X3NwZWVkKHRwKTsKIAogCWlmIChzcGVlZCAmIExJTktfU1RBVFVTKSB7Ci0JCWlmICghKHRwLT5zcGVlZCAmIExJTktfU1RBVFVTKSkgeworCQlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewogCQkJdHAtPnJ0bF9vcHMuZW5hYmxlKHRwKTsKIAkJCXNldF9iaXQoUlRMODE1Ml9TRVRfUlhfTU9ERSwgJnRwLT5mbGFncyk7CiAJCQluZXRpZl9jYXJyaWVyX29uKG5ldGRldik7CisJCQlydGxfc3RhcnRfcngodHApOwogCQl9CiAJfSBlbHNlIHsKLQkJaWYgKHRwLT5zcGVlZCAmIExJTktfU1RBVFVTKSB7CisJCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7Ci0JCQl0YXNrbGV0X2Rpc2FibGUoJnRwLT50bCk7CisJCQluYXBpX2Rpc2FibGUoJnRwLT5uYXBpKTsKIAkJCXRwLT5ydGxfb3BzLmRpc2FibGUodHApOwotCQkJdGFza2xldF9lbmFibGUoJnRwLT50bCk7CisJCQluYXBpX2VuYWJsZSgmdHAtPm5hcGkpOwogCQl9CiAJfQotCXRwLT5zcGVlZCA9IHNwZWVkOwogfQogCiBzdGF0aWMgdm9pZCBydGxfd29ya19mdW5jX3Qoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtMjg5NSwxMCArMjk0OCwxMSBAQAogCWlmICh0ZXN0X2JpdChSVEw4MTUyX1NFVF9SWF9NT0RFLCAmdHAtPmZsYWdzKSkKIAkJX3J0bDgxNTJfc2V0X3J4X21vZGUodHAtPm5ldGRldik7CiAKLQlpZiAodGVzdF9iaXQoU0NIRURVTEVfVEFTS0xFVCwgJnRwLT5mbGFncykgJiYKLQkgICAgKHRwLT5zcGVlZCAmIExJTktfU1RBVFVTKSkgewotCQljbGVhcl9iaXQoU0NIRURVTEVfVEFTS0xFVCwgJnRwLT5mbGFncyk7Ci0JCXRhc2tsZXRfc2NoZWR1bGUoJnRwLT50bCk7CisJLyogZG9uJ3Qgc2NoZWR1bGUgbmFwaSBiZWZvcmUgbGlua2luZyAqLworCWlmICh0ZXN0X2JpdChTQ0hFRFVMRV9OQVBJLCAmdHAtPmZsYWdzKSAmJgorCSAgICBuZXRpZl9jYXJyaWVyX29rKHRwLT5uZXRkZXYpKSB7CisJCWNsZWFyX2JpdChTQ0hFRFVMRV9OQVBJLCAmdHAtPmZsYWdzKTsKKwkJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCX0KIAogCWlmICh0ZXN0X2JpdChQSFlfUkVTRVQsICZ0cC0+ZmxhZ3MpKQpAQCAtMjkxOSw4ICsyOTczLDcgQEAKIAlpZiAocmVzKQogCQlnb3RvIG91dDsKIAotCS8qIHNldCBzcGVlZCB0byAwIHRvIGF2b2lkIGF1dG9yZXN1bWUgdHJ5IHRvIHN1Ym1pdCByeCAqLwotCXRwLT5zcGVlZCA9IDA7CisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAogCXJlcyA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSh0cC0+aW50Zik7CiAJaWYgKHJlcyA8IDApIHsKQEAgLTI5MzcsNyArMjk5MCw3IEBACiAJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdHAtPnNjaGVkdWxlKTsKIAogCQkvKiBkaXNhYmxlIHRoZSB0eC9yeCwgaWYgdGhlIHdvcmtxdWV1ZSBoYXMgZW5hYmxlZCB0aGVtLiAqLwotCQlpZiAodHAtPnNwZWVkICYgTElOS19TVEFUVVMpCisJCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpCiAJCQl0cC0+cnRsX29wcy5kaXNhYmxlKHRwKTsKIAl9CiAKQEAgLTI5NDYsNyArMjk5OSw2IEBACiAJcnRsODE1Ml9zZXRfc3BlZWQodHAsIEFVVE9ORUdfRU5BQkxFLAogCQkJICB0cC0+bWlpLnN1cHBvcnRzX2dtaWkgPyBTUEVFRF8xMDAwIDogU1BFRURfMTAwLAogCQkJICBEVVBMRVhfRlVMTCk7Ci0JdHAtPnNwZWVkID0gMDsKIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CiAJc2V0X2JpdChXT1JLX0VOQUJMRSwgJnRwLT5mbGFncyk7CkBAIC0yOTU5LDcgKzMwMTEsNyBAQAogCQkJICAgcmVzKTsKIAkJZnJlZV9hbGxfbWVtKHRwKTsKIAl9IGVsc2UgewotCQl0YXNrbGV0X2VuYWJsZSgmdHAtPnRsKTsKKwkJbmFwaV9lbmFibGUoJnRwLT5uYXBpKTsKIAl9CiAKIAltdXRleF91bmxvY2soJnRwLT5jb250cm9sKTsKQEAgLTI5NzUsMTUgKzMwMjcsMTYgQEAKIAlzdHJ1Y3QgcjgxNTIgKnRwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlpbnQgcmVzID0gMDsKIAotCXRhc2tsZXRfZGlzYWJsZSgmdHAtPnRsKTsKKwluYXBpX2Rpc2FibGUoJnRwLT5uYXBpKTsKIAljbGVhcl9iaXQoV09SS19FTkFCTEUsICZ0cC0+ZmxhZ3MpOwogCXVzYl9raWxsX3VyYih0cC0+aW50cl91cmIpOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdHAtPnNjaGVkdWxlKTsKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAKIAlyZXMgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UodHAtPmludGYpOwotCWlmIChyZXMgPCAwKSB7CisJaWYgKHJlcyA8IDAgfHwgdGVzdF9iaXQoUlRMODE1Ml9VTlBMVUcsICZ0cC0+ZmxhZ3MpKSB7CiAJCXJ0bF9kcm9wX3F1ZXVlZF90eCh0cCk7CisJCXJ0bF9zdG9wX3J4KHRwKTsKIAl9IGVsc2UgewogCQltdXRleF9sb2NrKCZ0cC0+Y29udHJvbCk7CiAKQEAgLTMxODcsMTAgKzMyNDAsMTAgQEAKIAogCW9jcF9kYXRhID0gb2NwX3JlYWRfYnl0ZSh0cCwgTUNVX1RZUEVfVVNCLCBVU0JfTFBNX0NUUkwpOwogCW9jcF9kYXRhICY9IH5MUE1fVElNRVJfTUFTSzsKLQlpZiAodHAtPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9TVVBFUikKLQkJb2NwX2RhdGEgfD0gTFBNX1RJTUVSXzUwMFVTOwotCWVsc2UKKwlpZiAodHAtPnZlcnNpb24gPT0gUlRMX1ZFUl8wNCAmJiB0cC0+dWRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX1NVUEVSKQogCQlvY3BfZGF0YSB8PSBMUE1fVElNRVJfNTAwTVM7CisJZWxzZQorCQlvY3BfZGF0YSB8PSBMUE1fVElNRVJfNTAwVVM7CiAJb2NwX3dyaXRlX2J5dGUodHAsIE1DVV9UWVBFX1VTQiwgVVNCX0xQTV9DVFJMLCBvY3BfZGF0YSk7CiAKIAlvY3BfZGF0YSA9IG9jcF9yZWFkX3dvcmQodHAsIE1DVV9UWVBFX1VTQiwgVVNCX0FGRV9DVFJMMik7CkBAIC0zMjM5LDcgKzMyOTIsNyBAQAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikgJiYgdGVzdF9iaXQoV09SS19FTkFCTEUsICZ0cC0+ZmxhZ3MpKSB7CiAJCWNsZWFyX2JpdChXT1JLX0VOQUJMRSwgJnRwLT5mbGFncyk7CiAJCXVzYl9raWxsX3VyYih0cC0+aW50cl91cmIpOwotCQl0YXNrbGV0X2Rpc2FibGUoJnRwLT50bCk7CisJCW5hcGlfZGlzYWJsZSgmdHAtPm5hcGkpOwogCQlpZiAodGVzdF9iaXQoU0VMRUNUSVZFX1NVU1BFTkQsICZ0cC0+ZmxhZ3MpKSB7CiAJCQlydGxfc3RvcF9yeCh0cCk7CiAJCQlydGxfcnVudGltZV9zdXNwZW5kX2VuYWJsZSh0cCwgdHJ1ZSk7CkBAIC0zMjQ3LDcgKzMzMDAsNyBAQAogCQkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ0cC0+c2NoZWR1bGUpOwogCQkJdHAtPnJ0bF9vcHMuZG93bih0cCk7CiAJCX0KLQkJdGFza2xldF9lbmFibGUoJnRwLT50bCk7CisJCW5hcGlfZW5hYmxlKCZ0cC0+bmFwaSk7CiAJfQogb3V0MToKIAltdXRleF91bmxvY2soJnRwLT5jb250cm9sKTsKQEAgLTMyNzEsNyArMzMyNCw3IEBACiAJCQlydGxfcnVudGltZV9zdXNwZW5kX2VuYWJsZSh0cCwgZmFsc2UpOwogCQkJY2xlYXJfYml0KFNFTEVDVElWRV9TVVNQRU5ELCAmdHAtPmZsYWdzKTsKIAkJCXNldF9iaXQoV09SS19FTkFCTEUsICZ0cC0+ZmxhZ3MpOwotCQkJaWYgKHRwLT5zcGVlZCAmIExJTktfU1RBVFVTKQorCQkJaWYgKG5ldGlmX2NhcnJpZXJfb2sodHAtPm5ldGRldikpCiAJCQkJcnRsX3N0YXJ0X3J4KHRwKTsKIAkJfSBlbHNlIHsKIAkJCXRwLT5ydGxfb3BzLnVwKHRwKTsKQEAgLTMyNzksNyArMzMzMiw2IEBACiAJCQkJCSAgdHAtPm1paS5zdXBwb3J0c19nbWlpID8KIAkJCQkJICBTUEVFRF8xMDAwIDogU1BFRURfMTAwLAogCQkJCQkgIERVUExFWF9GVUxMKTsKLQkJCXRwLT5zcGVlZCA9IDA7CiAJCQluZXRpZl9jYXJyaWVyX29mZih0cC0+bmV0ZGV2KTsKIAkJCXNldF9iaXQoV09SS19FTkFCTEUsICZ0cC0+ZmxhZ3MpOwogCQl9CkBAIC0zODMxLDcgKzM4ODMsNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCi0JdGFza2xldF9pbml0KCZ0cC0+dGwsIGJvdHRvbV9oYWxmLCAodW5zaWduZWQgbG9uZyl0cCk7CiAJbXV0ZXhfaW5pdCgmdHAtPmNvbnRyb2wpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZ0cC0+c2NoZWR1bGUsIHJ0bF93b3JrX2Z1bmNfdCk7CiAKQEAgLTM4NDUsOCArMzg5Niw3IEBACiAJbmV0ZGV2LT5od19mZWF0dXJlcyA9IE5FVElGX0ZfUlhDU1VNIHwgTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRyB8CiAJCQkgICAgICBORVRJRl9GX1RTTyB8IE5FVElGX0ZfRlJBR0xJU1QgfAogCQkJICAgICAgTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1RTTzYgfAotCQkJICAgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfUlggfAotCQkJICAgICAgTkVUSUZfRl9IV19WTEFOX0NUQUdfVFg7CisJCQkgICAgICBORVRJRl9GX0hXX1ZMQU5fQ1RBR19SWCB8IE5FVElGX0ZfSFdfVkxBTl9DVEFHX1RYOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyA9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTyB8CiAJCQkJTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9GUkFHTElTVCB8CiAJCQkJTkVUSUZfRl9JUFY2X0NTVU0gfCBORVRJRl9GX1RTTzY7CkBAIC0zODY3LDYgKzM5MTcsNyBAQAogCXNldF9ldGhlcm5ldF9hZGRyKHRwKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgdHApOworCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJnRwLT5uYXBpLCByODE1Ml9wb2xsLCBSVEw4MTUyX05BUElfV0VJR0hUKTsKIAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCWlmIChyZXQgIT0gMCkgewpAQCAtMzg4MCwxNSArMzkzMSwxMyBAQAogCWVsc2UKIAkJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZ1ZGV2LT5kZXYsIGZhbHNlKTsKIAotCXRhc2tsZXRfZGlzYWJsZSgmdHAtPnRsKTsKLQogCW5ldGlmX2luZm8odHAsIHByb2JlLCBuZXRkZXYsICIlc1xuIiwgRFJJVkVSX1ZFUlNJT04pOwogCiAJcmV0dXJuIDA7CiAKIG91dDE6CisJbmV0aWZfbmFwaV9kZWwoJnRwLT5uYXBpKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwotCXRhc2tsZXRfa2lsbCgmdHAtPnRsKTsKIG91dDoKIAlmcmVlX25ldGRldihuZXRkZXYpOwogCXJldHVybiByZXQ7CkBAIC0zOTA1LDcgKzM5NTQsNyBAQAogCQlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQogCQkJc2V0X2JpdChSVEw4MTUyX1VOUExVRywgJnRwLT5mbGFncyk7CiAKLQkJdGFza2xldF9raWxsKCZ0cC0+dGwpOworCQluZXRpZl9uYXBpX2RlbCgmdHAtPm5hcGkpOwogCQl1bnJlZ2lzdGVyX25ldGRldih0cC0+bmV0ZGV2KTsKIAkJdHAtPnJ0bF9vcHMudW5sb2FkKHRwKTsKIAkJZnJlZV9uZXRkZXYodHAtPm5ldGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMgYi9kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmMKaW5kZXggOTliNjlhZi4uNGExZTljNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9zcjk3MDAuYwpAQCAtNzcsNyArNzcsNyBAQAogCQlpbnQgcmV0OwogCiAJCXVkZWxheSgxKTsKLQkJcmV0ID0gc3JfcmVhZF9yZWcoZGV2LCBFUENSLCAmdG1wKTsKKwkJcmV0ID0gc3JfcmVhZF9yZWcoZGV2LCBTUl9FUENSLCAmdG1wKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCkBAIC05OCwxNSArOTgsMTUgQEAKIAogCW11dGV4X2xvY2soJmRldi0+cGh5X211dGV4KTsKIAotCXNyX3dyaXRlX3JlZyhkZXYsIEVQQVIsIHBoeSA/IChyZWcgfCBFUEFSX1BIWV9BRFIpIDogcmVnKTsKLQlzcl93cml0ZV9yZWcoZGV2LCBFUENSLCBwaHkgPyAoRVBDUl9FUE9TIHwgRVBDUl9FUlBSUikgOiBFUENSX0VSUFJSKTsKKwlzcl93cml0ZV9yZWcoZGV2LCBTUl9FUEFSLCBwaHkgPyAocmVnIHwgRVBBUl9QSFlfQURSKSA6IHJlZyk7CisJc3Jfd3JpdGVfcmVnKGRldiwgU1JfRVBDUiwgcGh5ID8gKEVQQ1JfRVBPUyB8IEVQQ1JfRVJQUlIpIDogRVBDUl9FUlBSUik7CiAKIAlyZXQgPSB3YWl0X3BoeV9lZXByb21fcmVhZHkoZGV2LCBwaHkpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlzcl93cml0ZV9yZWcoZGV2LCBFUENSLCAweDApOwotCXJldCA9IHNyX3JlYWQoZGV2LCBFUERSLCAyLCB2YWx1ZSk7CisJc3Jfd3JpdGVfcmVnKGRldiwgU1JfRVBDUiwgMHgwKTsKKwlyZXQgPSBzcl9yZWFkKGRldiwgU1JfRVBEUiwgMiwgdmFsdWUpOwogCiAJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgInJlYWQgc2hhcmVkICVkIDB4JTAyeCByZXR1cm5lZCAweCUwNHgsICVkXG4iLAogCQkgICBwaHksIHJlZywgKnZhbHVlLCByZXQpOwpAQCAtMTIzLDE5ICsxMjMsMTkgQEAKIAogCW11dGV4X2xvY2soJmRldi0+cGh5X211dGV4KTsKIAotCXJldCA9IHNyX3dyaXRlKGRldiwgRVBEUiwgMiwgJnZhbHVlKTsKKwlyZXQgPSBzcl93cml0ZShkZXYsIFNSX0VQRFIsIDIsICZ2YWx1ZSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCXNyX3dyaXRlX3JlZyhkZXYsIEVQQVIsIHBoeSA/IChyZWcgfCBFUEFSX1BIWV9BRFIpIDogcmVnKTsKLQlzcl93cml0ZV9yZWcoZGV2LCBFUENSLCBwaHkgPyAoRVBDUl9XRVAgfCBFUENSX0VQT1MgfCBFUENSX0VSUFJXKSA6CisJc3Jfd3JpdGVfcmVnKGRldiwgU1JfRVBBUiwgcGh5ID8gKHJlZyB8IEVQQVJfUEhZX0FEUikgOiByZWcpOworCXNyX3dyaXRlX3JlZyhkZXYsIFNSX0VQQ1IsIHBoeSA/IChFUENSX1dFUCB8IEVQQ1JfRVBPUyB8IEVQQ1JfRVJQUlcpIDoKIAkJICAgIChFUENSX1dFUCB8IEVQQ1JfRVJQUlcpKTsKIAogCXJldCA9IHdhaXRfcGh5X2VlcHJvbV9yZWFkeShkZXYsIHBoeSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCXNyX3dyaXRlX3JlZyhkZXYsIEVQQ1IsIDB4MCk7CisJc3Jfd3JpdGVfcmVnKGRldiwgU1JfRVBDUiwgMHgwKTsKIAogb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJmRldi0+cGh5X211dGV4KTsKQEAgLTE4OCw3ICsxODgsNyBAQAogCWlmIChsb2MgPT0gTUlJX0JNU1IpIHsKIAkJdTggdmFsdWU7CiAKLQkJc3JfcmVhZF9yZWcoZGV2LCBOU1IsICZ2YWx1ZSk7CisJCXNyX3JlYWRfcmVnKGRldiwgU1JfTlNSLCAmdmFsdWUpOwogCQlpZiAodmFsdWUgJiBOU1JfTElOS1NUKQogCQkJcmMgPSAxOwogCX0KQEAgLTIyOCw3ICsyMjgsNyBAQAogCWludCByYyA9IDA7CiAKIAkvKiBHZXQgdGhlIExpbmsgU3RhdHVzIGRpcmVjdGx5ICovCi0Jc3JfcmVhZF9yZWcoZGV2LCBOU1IsICZ2YWx1ZSk7CisJc3JfcmVhZF9yZWcoZGV2LCBTUl9OU1IsICZ2YWx1ZSk7CiAJaWYgKHZhbHVlICYgTlNSX0xJTktTVCkKIAkJcmMgPSAxOwogCkBAIC0yODEsOCArMjgxLDggQEAKIAkJfQogCX0KIAotCXNyX3dyaXRlX2FzeW5jKGRldiwgTUFSLCBTUl9NQ0FTVF9TSVpFLCBoYXNoZXMpOwotCXNyX3dyaXRlX3JlZ19hc3luYyhkZXYsIFJDUiwgcnhfY3RsKTsKKwlzcl93cml0ZV9hc3luYyhkZXYsIFNSX01BUiwgU1JfTUNBU1RfU0laRSwgaGFzaGVzKTsKKwlzcl93cml0ZV9yZWdfYXN5bmMoZGV2LCBTUl9SQ1IsIHJ4X2N0bCk7CiB9CiAKIHN0YXRpYyBpbnQgc3I5NzAwX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKQpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJfQogCiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwotCXNyX3dyaXRlX2FzeW5jKGRldiwgUEFSLCA2LCBuZXRkZXYtPmRldl9hZGRyKTsKKwlzcl93cml0ZV9hc3luYyhkZXYsIFNSX1BBUiwgNiwgbmV0ZGV2LT5kZXZfYWRkcik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM0MCw3ICszNDAsNyBAQAogCW1paS0+cGh5X2lkX21hc2sgPSAweDFmOwogCW1paS0+cmVnX251bV9tYXNrID0gMHgxZjsKIAotCXNyX3dyaXRlX3JlZyhkZXYsIE5DUiwgTkNSX1JTVCk7CisJc3Jfd3JpdGVfcmVnKGRldiwgU1JfTkNSLCBOQ1JfUlNUKTsKIAl1ZGVsYXkoMjApOwogCiAJLyogcmVhZCBNQUMKQEAgLTM0OCwxNyArMzQ4LDE3IEBACiAJICogRUVQUk9NIGF1dG9tYXRpY2FsbHkgdG8gUEFSLiBJbiBjYXNlIHRoZXJlIGlzIG5vIEVFUFJPTSBleHRlcm5hbGx5LAogCSAqIGEgZGVmYXVsdCBNQUMgYWRkcmVzcyBpcyBzdG9yZWQgaW4gUEFSIGZvciBtYWtpbmcgY2hpcCB3b3JrIHByb3Blcmx5LgogCSAqLwotCWlmIChzcl9yZWFkKGRldiwgUEFSLCBFVEhfQUxFTiwgbmV0ZGV2LT5kZXZfYWRkcikgPCAwKSB7CisJaWYgKHNyX3JlYWQoZGV2LCBTUl9QQVIsIEVUSF9BTEVOLCBuZXRkZXYtPmRldl9hZGRyKSA8IDApIHsKIAkJbmV0ZGV2X2VycihuZXRkZXYsICJFcnJvciByZWFkaW5nIE1BQyBhZGRyZXNzXG4iKTsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogcG93ZXIgdXAgYW5kIHJlc2V0IHBoeSAqLwotCXNyX3dyaXRlX3JlZyhkZXYsIFBSUiwgUFJSX1BIWV9SU1QpOworCXNyX3dyaXRlX3JlZyhkZXYsIFNSX1BSUiwgUFJSX1BIWV9SU1QpOwogCS8qIGF0IGxlYXN0IDEwbXMsIGhlcmUgMjBtcyBmb3Igc2FmZSAqLwogCW1kZWxheSgyMCk7Ci0Jc3Jfd3JpdGVfcmVnKGRldiwgUFJSLCAwKTsKKwlzcl93cml0ZV9yZWcoZGV2LCBTUl9QUlIsIDApOwogCS8qIGF0IGxlYXN0IDFtcywgaGVyZSAybXMgZm9yIHJlYWRpbmcgcmlnaHQgcmVnaXN0ZXIgKi8KIAl1ZGVsYXkoMiAqIDEwMDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmggYi9kcml2ZXJzL25ldC91c2Ivc3I5NzAwLmgKaW5kZXggZmQ2ODdjNS4uMjU4YjAzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3NyOTcwMC5oCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9zcjk3MDAuaApAQCAtMTQsMTMgKzE0LDEzIEBACiAvKiBzcjk3MDAgc3BlYy4gcmVnaXN0ZXIgdGFibGUgb24gTGludXggcGxhdGZvcm0gKi8KIAogLyogTmV0d29yayBDb250cm9sIFJlZyAqLwotI2RlZmluZQlOQ1IJCQkweDAwCisjZGVmaW5lCVNSX05DUgkJCTB4MDAKICNkZWZpbmUJCU5DUl9SU1QJCQkoMSA8PCAwKQogI2RlZmluZQkJTkNSX0xCSwkJCSgzIDw8IDEpCiAjZGVmaW5lCQlOQ1JfRkRYCQkJKDEgPDwgMykKICNkZWZpbmUJCU5DUl9XQUtFRU4JCSgxIDw8IDYpCiAvKiBOZXR3b3JrIFN0YXR1cyBSZWcgKi8KLSNkZWZpbmUJTlNSCQkJMHgwMQorI2RlZmluZQlTUl9OU1IJCQkweDAxCiAjZGVmaW5lCQlOU1JfUlhSRFkJCSgxIDw8IDApCiAjZGVmaW5lCQlOU1JfUlhPVgkJKDEgPDwgMSkKICNkZWZpbmUJCU5TUl9UWDFFTkQJCSgxIDw8IDIpCkBAIC0zMCw3ICszMCw3IEBACiAjZGVmaW5lCQlOU1JfTElOS1NUCQkoMSA8PCA2KQogI2RlZmluZQkJTlNSX1NQRUVECQkoMSA8PCA3KQogLyogVHggQ29udHJvbCBSZWcgKi8KLSNkZWZpbmUJVENSCQkJMHgwMgorI2RlZmluZQlTUl9UQ1IJCQkweDAyCiAjZGVmaW5lCQlUQ1JfQ1JDX0RJUwkJKDEgPDwgMSkKICNkZWZpbmUJCVRDUl9QQURfRElTCQkoMSA8PCAyKQogI2RlZmluZQkJVENSX0xDX0NBUkUJCSgxIDw8IDMpCkBAIC0zOCw3ICszOCw3IEBACiAjZGVmaW5lCQlUQ1JfRVhDRUNNCQkoMSA8PCA1KQogI2RlZmluZQkJVENSX0xGX0VOCQkoMSA8PCA2KQogLyogVHggU3RhdHVzIFJlZyBmb3IgUGFja2V0IEluZGV4IDEgKi8KLSNkZWZpbmUJVFNSMQkJMHgwMworI2RlZmluZQlTUl9UU1IxCQkweDAzCiAjZGVmaW5lCQlUU1IxX0VDCQkJKDEgPDwgMikKICNkZWZpbmUJCVRTUjFfQ09MCQkoMSA8PCAzKQogI2RlZmluZQkJVFNSMV9MQwkJCSgxIDw8IDQpCkBAIC00Niw3ICs0Niw3IEBACiAjZGVmaW5lCQlUU1IxX0xPQwkJKDEgPDwgNikKICNkZWZpbmUJCVRTUjFfVExGCQkoMSA8PCA3KQogLyogVHggU3RhdHVzIFJlZyBmb3IgUGFja2V0IEluZGV4IDIgKi8KLSNkZWZpbmUJVFNSMgkJMHgwNAorI2RlZmluZQlTUl9UU1IyCQkweDA0CiAjZGVmaW5lCQlUU1IyX0VDCQkJKDEgPDwgMikKICNkZWZpbmUJCVRTUjJfQ09MCQkoMSA8PCAzKQogI2RlZmluZQkJVFNSMl9MQwkJCSgxIDw8IDQpCkBAIC01NCw3ICs1NCw3IEBACiAjZGVmaW5lCQlUU1IyX0xPQwkJKDEgPDwgNikKICNkZWZpbmUJCVRTUjJfVExGCQkoMSA8PCA3KQogLyogUnggQ29udHJvbCBSZWcqLwotI2RlZmluZQlSQ1IJCQkweDA1CisjZGVmaW5lCVNSX1JDUgkJCTB4MDUKICNkZWZpbmUJCVJDUl9SWEVOCQkoMSA8PCAwKQogI2RlZmluZQkJUkNSX1BSTVNDCQkoMSA8PCAxKQogI2RlZmluZQkJUkNSX1JVTlQJCSgxIDw8IDIpCkBAIC02Miw4NyArNjIsODcgQEAKICNkZWZpbmUJCVJDUl9ESVNfQ1JDCQkoMSA8PCA0KQogI2RlZmluZQkJUkNSX0RJU19MT05HCSgxIDw8IDUpCiAvKiBSeCBTdGF0dXMgUmVnICovCi0jZGVmaW5lCVJTUgkJCTB4MDYKKyNkZWZpbmUJU1JfUlNSCQkJMHgwNgogI2RlZmluZQkJUlNSX0FFCQkJKDEgPDwgMikKICNkZWZpbmUJCVJTUl9NRgkJCSgxIDw8IDYpCiAjZGVmaW5lCQlSU1JfUkYJCQkoMSA8PCA3KQogLyogUnggT3ZlcmZsb3cgQ291bnRlciBSZWcgKi8KLSNkZWZpbmUJUk9DUgkJMHgwNworI2RlZmluZQlTUl9ST0NSCQkweDA3CiAjZGVmaW5lCQlST0NSX1JPQwkJKDB4N0YgPDwgMCkKICNkZWZpbmUJCVJPQ1JfUlhGVQkJKDEgPDwgNykKIC8qIEJhY2sgUHJlc3N1cmUgVGhyZXNob2xkIFJlZyAqLwotI2RlZmluZQlCUFRSCQkweDA4CisjZGVmaW5lCVNSX0JQVFIJCTB4MDgKICNkZWZpbmUJCUJQVFJfSlBUCQkoMHgwRiA8PCAwKQogI2RlZmluZQkJQlBUUl9CUEhXCQkoMHgwRiA8PCA0KQogLyogRmxvdyBDb250cm9sIFRocmVzaG9sZCBSZWcgKi8KLSNkZWZpbmUJRkNUUgkJMHgwOQorI2RlZmluZQlTUl9GQ1RSCQkweDA5CiAjZGVmaW5lCQlGQ1RSX0xXT1QJCSgweDBGIDw8IDApCiAjZGVmaW5lCQlGQ1RSX0hXT1QJCSgweDBGIDw8IDQpCiAvKiByeC90eCBGbG93IENvbnRyb2wgUmVnICovCi0jZGVmaW5lCUZDUgkJCTB4MEEKKyNkZWZpbmUJU1JfRkNSCQkJMHgwQQogI2RlZmluZQkJRkNSX0ZMQ0UJCSgxIDw8IDApCiAjZGVmaW5lCQlGQ1JfQktQQQkJKDEgPDwgNCkKICNkZWZpbmUJCUZDUl9UWFBFTgkJKDEgPDwgNSkKICNkZWZpbmUJCUZDUl9UWFBGCQkoMSA8PCA2KQogI2RlZmluZQkJRkNSX1RYUDAJCSgxIDw8IDcpCiAvKiBFZXByb20gJiBQaHkgQ29udHJvbCBSZWcgKi8KLSNkZWZpbmUJRVBDUgkJMHgwQgorI2RlZmluZQlTUl9FUENSCQkweDBCCiAjZGVmaW5lCQlFUENSX0VSUkUJCSgxIDw8IDApCiAjZGVmaW5lCQlFUENSX0VSUFJXCQkoMSA8PCAxKQogI2RlZmluZQkJRVBDUl9FUlBSUgkJKDEgPDwgMikKICNkZWZpbmUJCUVQQ1JfRVBPUwkJKDEgPDwgMykKICNkZWZpbmUJCUVQQ1JfV0VQCQkoMSA8PCA0KQogLyogRWVwcm9tICYgUGh5IEFkZHJlc3MgUmVnICovCi0jZGVmaW5lCUVQQVIJCTB4MEMKKyNkZWZpbmUJU1JfRVBBUgkJMHgwQwogI2RlZmluZQkJRVBBUl9FUk9BCQkoMHgzRiA8PCAwKQogI2RlZmluZQkJRVBBUl9QSFlfQURSX01BU0sJKDB4MDMgPDwgNikKICNkZWZpbmUJCUVQQVJfUEhZX0FEUgkJKDB4MDEgPDwgNikKIC8qIEVlcHJvbSAmCVBoeSBEYXRhIFJlZyAqLwotI2RlZmluZQlFUERSCQkweDBECS8qIDB4MEQgfiAweDBFIGZvciBEYXRhIFJlZyBMb3cgJiBIaWdoICovCisjZGVmaW5lCVNSX0VQRFIJCTB4MEQJLyogMHgwRCB+IDB4MEUgZm9yIERhdGEgUmVnIExvdyAmIEhpZ2ggKi8KIC8qIFdha2V1cCBDb250cm9sIFJlZyAqLwotI2RlZmluZQlXQ1IJCQkweDBGCisjZGVmaW5lCVNSX1dDUgkJCTB4MEYKICNkZWZpbmUJCVdDUl9NQUdJQ1NUCQkoMSA8PCAwKQogI2RlZmluZQkJV0NSX0xJTktTVAkJKDEgPDwgMikKICNkZWZpbmUJCVdDUl9NQUdJQ0VOCQkoMSA8PCAzKQogI2RlZmluZQkJV0NSX0xJTktFTgkJKDEgPDwgNSkKIC8qIFBoeXNpY2FsIEFkZHJlc3MgUmVnICovCi0jZGVmaW5lCVBBUgkJCTB4MTAJLyogMHgxMCB+IDB4MTUgNiBieXRlcyBmb3IgUEFSICovCisjZGVmaW5lCVNSX1BBUgkJCTB4MTAJLyogMHgxMCB+IDB4MTUgNiBieXRlcyBmb3IgUEFSICovCiAvKiBNdWx0aWNhc3QgQWRkcmVzcyBSZWcgKi8KLSNkZWZpbmUJTUFSCQkJMHgxNgkvKiAweDE2IH4gMHgxRCA4IGJ5dGVzIGZvciBNQVIgKi8KKyNkZWZpbmUJU1JfTUFSCQkJMHgxNgkvKiAweDE2IH4gMHgxRCA4IGJ5dGVzIGZvciBNQVIgKi8KIC8qIDB4MWUgdW51c2VkICovCiAvKiBQaHkgUmVzZXQgUmVnICovCi0jZGVmaW5lCVBSUgkJCTB4MUYKKyNkZWZpbmUJU1JfUFJSCQkJMHgxRgogI2RlZmluZQkJUFJSX1BIWV9SU1QJCSgxIDw8IDApCiAvKiBUeCBzZHJhbSBXcml0ZSBQb2ludGVyIEFkZHJlc3MgTG93ICovCi0jZGVmaW5lCVRXUEFMCQkweDIwCisjZGVmaW5lCVNSX1RXUEFMCQkweDIwCiAvKiBUeCBzZHJhbSBXcml0ZSBQb2ludGVyIEFkZHJlc3MgSGlnaCAqLwotI2RlZmluZQlUV1BBSAkJMHgyMQorI2RlZmluZQlTUl9UV1BBSAkJMHgyMQogLyogVHggc2RyYW0gUmVhZCBQb2ludGVyIEFkZHJlc3MgTG93ICovCi0jZGVmaW5lCVRSUEFMCQkweDIyCisjZGVmaW5lCVNSX1RSUEFMCQkweDIyCiAvKiBUeCBzZHJhbSBSZWFkIFBvaW50ZXIgQWRkcmVzcyBIaWdoICovCi0jZGVmaW5lCVRSUEFICQkweDIzCisjZGVmaW5lCVNSX1RSUEFICQkweDIzCiAvKiBSeCBzZHJhbSBXcml0ZSBQb2ludGVyIEFkZHJlc3MgTG93ICovCi0jZGVmaW5lCVJXUEFMCQkweDI0CisjZGVmaW5lCVNSX1JXUEFMCQkweDI0CiAvKiBSeCBzZHJhbSBXcml0ZSBQb2ludGVyIEFkZHJlc3MgSGlnaCAqLwotI2RlZmluZQlSV1BBSAkJMHgyNQorI2RlZmluZQlTUl9SV1BBSAkJMHgyNQogLyogUnggc2RyYW0gUmVhZCBQb2ludGVyIEFkZHJlc3MgTG93ICovCi0jZGVmaW5lCVJSUEFMCQkweDI2CisjZGVmaW5lCVNSX1JSUEFMCQkweDI2CiAvKiBSeCBzZHJhbSBSZWFkIFBvaW50ZXIgQWRkcmVzcyBIaWdoICovCi0jZGVmaW5lCVJSUEFICQkweDI3CisjZGVmaW5lCVNSX1JSUEFICQkweDI3CiAvKiBWZW5kb3IgSUQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJVklECQkJMHgyOAkvKiAweDI4IH4gMHgyOSAyIGJ5dGVzIGZvciBWSUQgKi8KKyNkZWZpbmUJU1JfVklECQkJMHgyOAkvKiAweDI4IH4gMHgyOSAyIGJ5dGVzIGZvciBWSUQgKi8KIC8qIFByb2R1Y3QgSUQgcmVnaXN0ZXIgKi8KLSNkZWZpbmUJUElECQkJMHgyQQkvKiAweDJBIH4gMHgyQiAyIGJ5dGVzIGZvciBQSUQgKi8KKyNkZWZpbmUJU1JfUElECQkJMHgyQQkvKiAweDJBIH4gMHgyQiAyIGJ5dGVzIGZvciBQSUQgKi8KIC8qIENISVAgUmV2aXNpb24gcmVnaXN0ZXIgKi8KLSNkZWZpbmUJQ0hJUFIJCTB4MkMKKyNkZWZpbmUJU1JfQ0hJUFIJCTB4MkMKIC8qIDB4MkQgLS0+IDB4RUYgdW51c2VkICovCiAvKiBVU0IgRGV2aWNlIEFkZHJlc3MgKi8KLSNkZWZpbmUJVVNCREEJCTB4RjAKKyNkZWZpbmUJU1JfVVNCREEJCTB4RjAKICNkZWZpbmUJCVVTQkRBX1VTQkZBCQkoMHg3RiA8PCAwKQogLyogUlggcGFja2V0IENvdW50ZXIgUmVnICovCi0jZGVmaW5lCVJYQwkJCTB4RjEKKyNkZWZpbmUJU1JfUlhDCQkJMHhGMQogLyogVHggcGFja2V0IENvdW50ZXIgJiBVU0IgU3RhdHVzIFJlZyAqLwotI2RlZmluZQlUWENfVVNCUwkweEYyCisjZGVmaW5lCVNSX1RYQ19VU0JTCQkweEYyCiAjZGVmaW5lCQlUWENfVVNCU19UWEMwCQkoMSA8PCAwKQogI2RlZmluZQkJVFhDX1VTQlNfVFhDMQkJKDEgPDwgMSkKICNkZWZpbmUJCVRYQ19VU0JTX1RYQzIJCSgxIDw8IDIpCkBAIC0xNTAsNyArMTUwLDcgQEAKICNkZWZpbmUJCVRYQ19VU0JTX1NVU0ZMQUcJKDEgPDwgNikKICNkZWZpbmUJCVRYQ19VU0JTX1JYRkFVTFQJKDEgPDwgNykKIC8qIFVTQiBDb250cm9sIHJlZ2lzdGVyICovCi0jZGVmaW5lCVVTQkMJCTB4RjQKKyNkZWZpbmUJU1JfVVNCQwkJCTB4RjQKICNkZWZpbmUJCVVTQkNfRVAzTkFLCQkoMSA8PCA0KQogI2RlZmluZQkJVVNCQ19FUDNBQ0sJCSgxIDw8IDUpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwppbmRleCAzYTY3NzBhLi40NDk4MzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCkBAIC0xNjAsMjAgKzE2MCwxOSBAQAogCiBpbnQgdXNibmV0X2dldF9ldGhlcm5ldF9hZGRyKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IGlNQUNBZGRyZXNzKQogewotCWludCAJCXRtcCwgaTsKKwlpbnQgCQl0bXAgPSAtMSwgcmV0OwogCXVuc2lnbmVkIGNoYXIJYnVmIFsxM107CiAKLQl0bXAgPSB1c2Jfc3RyaW5nKGRldi0+dWRldiwgaU1BQ0FkZHJlc3MsIGJ1Ziwgc2l6ZW9mIGJ1Zik7Ci0JaWYgKHRtcCAhPSAxMikgeworCXJldCA9IHVzYl9zdHJpbmcoZGV2LT51ZGV2LCBpTUFDQWRkcmVzcywgYnVmLCBzaXplb2YgYnVmKTsKKwlpZiAocmV0ID09IDEyKQorCQl0bXAgPSBoZXgyYmluKGRldi0+bmV0LT5kZXZfYWRkciwgYnVmLCA2KTsKKwlpZiAodG1wIDwgMCkgewogCQlkZXZfZGJnKCZkZXYtPnVkZXYtPmRldiwKIAkJCSJiYWQgTUFDIHN0cmluZyAlZCBmZXRjaCwgJWRcbiIsIGlNQUNBZGRyZXNzLCB0bXApOwotCQlpZiAodG1wID49IDApCi0JCQl0bXAgPSAtRUlOVkFMOwotCQlyZXR1cm4gdG1wOworCQlpZiAocmV0ID49IDApCisJCQlyZXQgPSAtRUlOVkFMOworCQlyZXR1cm4gcmV0OwogCX0KLQlmb3IgKGkgPSB0bXAgPSAwOyBpIDwgNjsgaSsrLCB0bXAgKz0gMikKLQkJZGV2LT5uZXQtPmRldl9hZGRyIFtpXSA9Ci0JCQkoaGV4X3RvX2JpbihidWZbdG1wXSkgPDwgNCkgKyBoZXhfdG9fYmluKGJ1Zlt0bXAgKyAxXSk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfZ2V0X2V0aGVybmV0X2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jCmluZGV4IDhhZDU5NjUuLjRjY2EzNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYworKysgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTQ2OSw2ICs0NjksMTQgQEAKIAlbVkVUSF9JTkZPX1BFRVJdCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpIH0sCiB9OwogCitzdGF0aWMgc3RydWN0IG5ldCAqdmV0aF9nZXRfbGlua19uZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdmV0aF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqcGVlciA9IHJ0bmxfZGVyZWZlcmVuY2UocHJpdi0+cGVlcik7CisKKwlyZXR1cm4gcGVlciA/IGRldl9uZXQocGVlcikgOiBkZXZfbmV0KGRldik7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyB2ZXRoX2xpbmtfb3BzID0gewogCS5raW5kCQk9IERSVl9OQU1FLAogCS5wcml2X3NpemUJPSBzaXplb2Yoc3RydWN0IHZldGhfcHJpdiksCkBAIC00NzgsNiArNDg2LDcgQEAKIAkuZGVsbGluawk9IHZldGhfZGVsbGluaywKIAkucG9saWN5CQk9IHZldGhfcG9saWN5LAogCS5tYXh0eXBlCT0gVkVUSF9JTkZPX01BWCwKKwkuZ2V0X2xpbmtfbmV0CT0gdmV0aF9nZXRfbGlua19uZXQsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IDVjYTk3NzEuLjExMGEyY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTQ5MCwxNyArNDkwLDggQEAKIAkJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgPSBTS0JfR1NPX1RDUFY0OwogCQkJYnJlYWs7CiAJCWNhc2UgVklSVElPX05FVF9IRFJfR1NPX1VEUDoKLQkJewotCQkJc3RhdGljIGJvb2wgd2FybmVkOwotCi0JCQlpZiAoIXdhcm5lZCkgewotCQkJCXdhcm5lZCA9IHRydWU7Ci0JCQkJbmV0ZGV2X3dhcm4oZGV2LAotCQkJCQkgICAgImhvc3QgdXNpbmcgZGlzYWJsZWQgVUZPIGZlYXR1cmU7IHBsZWFzZSBmaXggaXRcbiIpOwotCQkJfQogCQkJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9IFNLQl9HU09fVURQOwogCQkJYnJlYWs7Ci0JCX0KIAkJY2FzZSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjY6CiAJCQlza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID0gU0tCX0dTT19UQ1BWNjsKIAkJCWJyZWFrOwpAQCAtODg4LDYgKzg3OSw4IEBACiAJCQloZHItPmhkci5nc29fdHlwZSA9IFZJUlRJT19ORVRfSERSX0dTT19UQ1BWNDsKIAkJZWxzZSBpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSAmIFNLQl9HU09fVENQVjYpCiAJCQloZHItPmhkci5nc29fdHlwZSA9IFZJUlRJT19ORVRfSERSX0dTT19UQ1BWNjsKKwkJZWxzZSBpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSAmIFNLQl9HU09fVURQKQorCQkJaGRyLT5oZHIuZ3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVURQOwogCQllbHNlCiAJCQlCVUcoKTsKIAkJaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgJiBTS0JfR1NPX1RDUF9FQ04pCkBAIC05MjUsNiArOTE4LDkgQEAKIAkvKiBGcmVlIHVwIGFueSBwZW5kaW5nIG9sZCBidWZmZXJzIGJlZm9yZSBxdWV1ZWluZyBuZXcgb25lcy4gKi8KIAlmcmVlX29sZF94bWl0X3NrYnMoc3EpOwogCisJLyogdGltZXN0YW1wIHBhY2tldCBpbiBzb2Z0d2FyZSAqLworCXNrYl90eF90aW1lc3RhbXAoc2tiKTsKKwogCS8qIFRyeSB0byB0cmFuc21pdCAqLwogCWVyciA9IHhtaXRfc2tiKHNxLCBza2IpOwogCkBAIC0xMzc2LDYgKzEzNzIsNyBAQAogCS5nZXRfcmluZ3BhcmFtID0gdmlydG5ldF9nZXRfcmluZ3BhcmFtLAogCS5zZXRfY2hhbm5lbHMgPSB2aXJ0bmV0X3NldF9jaGFubmVscywKIAkuZ2V0X2NoYW5uZWxzID0gdmlydG5ldF9nZXRfY2hhbm5lbHMsCisJLmdldF90c19pbmZvID0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbywKIH07CiAKICNkZWZpbmUgTUlOX01UVSA2OApAQCAtMTc0OCw3ICsxNzQ1LDcgQEAKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNfE5FVElGX0ZfU0d8TkVUSUZfRl9GUkFHTElTVDsKIAogCQlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9HU08pKSB7Ci0JCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPCisJCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9VRk8KIAkJCQl8IE5FVElGX0ZfVFNPX0VDTiB8IE5FVElGX0ZfVFNPNjsKIAkJfQogCQkvKiBJbmRpdmlkdWFsIGZlYXR1cmUgYml0czogd2hhdCBjYW4gaG9zdCBoYW5kbGU/ICovCkBAIC0xNzU4LDkgKzE3NTUsMTMgQEAKIAkJCWRldi0+aHdfZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCQlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9IT1NUX0VDTikpCiAJCQlkZXYtPmh3X2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPX0VDTjsKKwkJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfSE9TVF9VRk8pKQorCQkJZGV2LT5od19mZWF0dXJlcyB8PSBORVRJRl9GX1VGTzsKKworCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfR1NPX1JPQlVTVDsKIAogCQlpZiAoZ3NvKQotCQkJZGV2LT5mZWF0dXJlcyB8PSBkZXYtPmh3X2ZlYXR1cmVzICYgTkVUSUZfRl9BTExfVFNPOworCQkJZGV2LT5mZWF0dXJlcyB8PSBkZXYtPmh3X2ZlYXR1cmVzICYgKE5FVElGX0ZfQUxMX1RTT3xORVRJRl9GX1VGTyk7CiAJCS8qICghY3N1bSAmJiBnc28pIGNhc2Ugd2lsbCBiZSBmaXhlZCBieSByZWdpc3Rlcl9uZXRkZXYoKSAqLwogCX0KIAlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9HVUVTVF9DU1VNKSkKQEAgLTE3OTgsNyArMTc5OSw4IEBACiAJLyogSWYgd2UgY2FuIHJlY2VpdmUgQU5ZIEdTTyBwYWNrZXRzLCB3ZSBtdXN0IGFsbG9jYXRlIGxhcmdlIG9uZXMuICovCiAJaWYgKHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNCkgfHwKIAkgICAgdmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9HVUVTVF9UU082KSB8fAotCSAgICB2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9GX0dVRVNUX0VDTikpCisJICAgIHZpcnRpb19oYXNfZmVhdHVyZSh2ZGV2LCBWSVJUSU9fTkVUX0ZfR1VFU1RfRUNOKSB8fAorCSAgICB2aXJ0aW9faGFzX2ZlYXR1cmUodmRldiwgVklSVElPX05FVF9GX0dVRVNUX1VGTykpCiAJCXZpLT5iaWdfcGFja2V0cyA9IHRydWU7CiAKIAlpZiAodmlydGlvX2hhc19mZWF0dXJlKHZkZXYsIFZJUlRJT19ORVRfRl9NUkdfUlhCVUYpKQpAQCAtMTk5NCw5ICsxOTk2LDkgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmVhdHVyZXNbXSA9IHsKIAlWSVJUSU9fTkVUX0ZfQ1NVTSwgVklSVElPX05FVF9GX0dVRVNUX0NTVU0sCiAJVklSVElPX05FVF9GX0dTTywgVklSVElPX05FVF9GX01BQywKLQlWSVJUSU9fTkVUX0ZfSE9TVF9UU080LCBWSVJUSU9fTkVUX0ZfSE9TVF9UU082LAorCVZJUlRJT19ORVRfRl9IT1NUX1RTTzQsIFZJUlRJT19ORVRfRl9IT1NUX1VGTywgVklSVElPX05FVF9GX0hPU1RfVFNPNiwKIAlWSVJUSU9fTkVUX0ZfSE9TVF9FQ04sIFZJUlRJT19ORVRfRl9HVUVTVF9UU080LCBWSVJUSU9fTkVUX0ZfR1VFU1RfVFNPNiwKLQlWSVJUSU9fTkVUX0ZfR1VFU1RfRUNOLAorCVZJUlRJT19ORVRfRl9HVUVTVF9FQ04sIFZJUlRJT19ORVRfRl9HVUVTVF9VRk8sCiAJVklSVElPX05FVF9GX01SR19SWEJVRiwgVklSVElPX05FVF9GX1NUQVRVUywgVklSVElPX05FVF9GX0NUUkxfVlEsCiAJVklSVElPX05FVF9GX0NUUkxfUlgsIFZJUlRJT19ORVRfRl9DVFJMX1ZMQU4sCiAJVklSVElPX05FVF9GX0dVRVNUX0FOTk9VTkNFLCBWSVJUSU9fTkVUX0ZfTVEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZGVmcy5oIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2RlZnMuaAppbmRleCA0ZDg0OTEyLi4zNzE4ZDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kZWZzLmgKQEAgLTM0Miw2ICszNDIsNyBAQAogI2RlZmluZSBWTVhORVQzX1RYX1JJTkdfTUFYX1NJWkUgICA0MDk2CiAjZGVmaW5lIFZNWE5FVDNfVENfUklOR19NQVhfU0laRSAgIDQwOTYKICNkZWZpbmUgVk1YTkVUM19SWF9SSU5HX01BWF9TSVpFICAgNDA5NgorI2RlZmluZSBWTVhORVQzX1JYX1JJTkcyX01BWF9TSVpFICAyMDQ4CiAjZGVmaW5lIFZNWE5FVDNfUkNfUklOR19NQVhfU0laRSAgIDgxOTIKIAogLyogYSBsaXN0IG9mIHJlYXNvbnMgZm9yIHF1ZXVlIHN0b3AgKi8KQEAgLTM5Miw3ICszOTMsNyBAQAogfTsKIAogCi0jZGVmaW5lIFZNWE5FVDNfUkVWMV9NQUdJQyAgMHhiYWJlZmVlMQorI2RlZmluZSBWTVhORVQzX1JFVjFfTUFHSUMgIDMxMzMwNzkyNjV1CiAKIC8qCiAgKiBRdWV1ZURlc2NQQSBtdXN0IGJlIDEyOCBieXRlcyBhbGlnbmVkLiBJdCBwb2ludHMgdG8gYW4gYXJyYXkgb2YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwppbmRleCBhZmQyOTUzLi4yOTQyMTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCkBAIC0xMDM4LDkgKzEwMzgsOSBAQAogCQlsZTMyX2FkZF9jcHUoJnRxLT5zaGFyZWQtPnR4TnVtRGVmZXJyZWQsIDEpOwogCX0KIAotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgewogCQlnZGVzYy0+dHhkLnRpID0gMTsKLQkJZ2Rlc2MtPnR4ZC50Y2kgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwkJZ2Rlc2MtPnR4ZC50Y2kgPSBza2Jfdmxhbl90YWdfZ2V0KHNrYik7CiAJfQogCiAJLyogZmluYWxseSBmbGlwcyB0aGUgR0VOIGJpdCBvZiB0aGUgU09QIGRlc2MuICovCkBAIC0yNTA1LDYgKzI1MDUsOSBAQAogCXJpbmcwX3NpemUgPSBtaW5fdCh1MzIsIHJpbmcwX3NpemUsIFZNWE5FVDNfUlhfUklOR19NQVhfU0laRSAvCiAJCQkgICBzeiAqIHN6KTsKIAlyaW5nMV9zaXplID0gYWRhcHRlci0+cnhfcXVldWVbMF0ucnhfcmluZ1sxXS5zaXplOworCXJpbmcxX3NpemUgPSAocmluZzFfc2l6ZSArIHN6IC0gMSkgLyBzeiAqIHN6OworCXJpbmcxX3NpemUgPSBtaW5fdCh1MzIsIHJpbmcxX3NpemUsIFZNWE5FVDNfUlhfUklORzJfTUFYX1NJWkUgLworCQkJICAgc3ogKiBzeik7CiAJY29tcF9zaXplID0gcmluZzBfc2l6ZSArIHJpbmcxX3NpemU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CkBAIC0yNTg1LDcgKzI1ODgsNyBAQAogCiAJZXJyID0gdm14bmV0M19jcmVhdGVfcXVldWVzKGFkYXB0ZXIsIGFkYXB0ZXItPnR4X3Jpbmdfc2l6ZSwKIAkJCQkgICAgYWRhcHRlci0+cnhfcmluZ19zaXplLAotCQkJCSAgICBWTVhORVQzX0RFRl9SWF9SSU5HX1NJWkUpOworCQkJCSAgICBhZGFwdGVyLT5yeF9yaW5nMl9zaXplKTsKIAlpZiAoZXJyKQogCQlnb3RvIHF1ZXVlX2VycjsKIApAQCAtMjk2NCw2ICsyOTY3LDcgQEAKIAogCWFkYXB0ZXItPnR4X3Jpbmdfc2l6ZSA9IFZNWE5FVDNfREVGX1RYX1JJTkdfU0laRTsKIAlhZGFwdGVyLT5yeF9yaW5nX3NpemUgPSBWTVhORVQzX0RFRl9SWF9SSU5HX1NJWkU7CisJYWRhcHRlci0+cnhfcmluZzJfc2l6ZSA9IFZNWE5FVDNfREVGX1JYX1JJTkcyX1NJWkU7CiAKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+Y21kX2xvY2spOwogCWFkYXB0ZXItPmFkYXB0ZXJfcGEgPSBkbWFfbWFwX3NpbmdsZSgmYWRhcHRlci0+cGRldi0+ZGV2LCBhZGFwdGVyLApAQCAtMzI4NiwyNyArMzI5MCwxNSBAQAogc3RhdGljIGludAogdm14bmV0M19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2aWNlKQogewotCWludCBlcnIsIGkgPSAwOworCWludCBlcnI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2aWNlKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB2bXhuZXQzX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBWbXhuZXQzX1BNQ29uZiAqcG1Db25mOwogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCXJldHVybiAwOwogCi0JLyogRGVzdHJveSB3YWtlLXVwIGZpbHRlcnMuICovCi0JcG1Db25mID0gYWRhcHRlci0+cG1fY29uZjsKLQltZW1zZXQocG1Db25mLCAwLCBzaXplb2YoKnBtQ29uZikpOwotCi0JYWRhcHRlci0+c2hhcmVkLT5kZXZSZWFkLnBtQ29uZkRlc2MuY29uZlZlciA9IGNwdV90b19sZTMyKDEpOwotCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5wbUNvbmZEZXNjLmNvbmZMZW4gPSBjcHVfdG9fbGUzMihzaXplb2YoCi0JCQkJCQkJCSAgKnBtQ29uZikpOwotCWFkYXB0ZXItPnNoYXJlZC0+ZGV2UmVhZC5wbUNvbmZEZXNjLmNvbmZQQSA9Ci0JCWNwdV90b19sZTY0KGFkYXB0ZXItPnBtX2NvbmZfcGEpOwotCi0JbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZV9tZW0ocGRldik7CkBAIC0zMzE1LDE1ICszMzA3LDMxIEBACiAKIAlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QwLCAwKTsKIAorCXZteG5ldDNfYWxsb2NfaW50cl9yZXNvdXJjZXMoYWRhcHRlcik7CisKKwkvKiBEdXJpbmcgaGliZXJuYXRlIGFuZCBzdXNwZW5kLCBkZXZpY2UgaGFzIHRvIGJlIHJlaW5pdGlhbGl6ZWQgYXMgdGhlCisJICogZGV2aWNlIHN0YXRlIG5lZWQgbm90IGJlIHByZXNlcnZlZC4KKwkgKi8KKworCS8qIE5lZWQgbm90IGNoZWNrIGFkYXB0ZXIgc3RhdGUgYXMgb3RoZXIgcmVzZXQgdGFza3MgY2Fubm90IHJ1biBkdXJpbmcKKwkgKiBkZXZpY2UgcmVzdW1lLgorCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAotCQkJICAgICAgIFZNWE5FVDNfQ01EX1VQREFURV9QTUNGRyk7CisJCQkgICAgICAgVk1YTkVUM19DTURfUVVJRVNDRV9ERVYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7Ci0Jdm14bmV0M19hbGxvY19pbnRyX3Jlc291cmNlcyhhZGFwdGVyKTsKLQl2bXhuZXQzX3JlcXVlc3RfaXJxcyhhZGFwdGVyKTsKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQluYXBpX2VuYWJsZSgmYWRhcHRlci0+cnhfcXVldWVbaV0ubmFwaSk7Ci0Jdm14bmV0M19lbmFibGVfYWxsX2ludHJzKGFkYXB0ZXIpOworCXZteG5ldDNfdHFfY2xlYW51cF9hbGwoYWRhcHRlcik7CisJdm14bmV0M19ycV9jbGVhbnVwX2FsbChhZGFwdGVyKTsKKworCXZteG5ldDNfcmVzZXRfZGV2KGFkYXB0ZXIpOworCWVyciA9IHZteG5ldDNfYWN0aXZhdGVfZGV2KGFkYXB0ZXIpOworCWlmIChlcnIgIT0gMCkgeworCQluZXRkZXZfZXJyKG5ldGRldiwKKwkJCSAgICJmYWlsZWQgdG8gcmUtYWN0aXZhdGUgb24gcmVzdW1lLCBlcnJvcjogJWQiLCBlcnIpOworCQl2bXhuZXQzX2ZvcmNlX2Nsb3NlKGFkYXB0ZXIpOworCQlyZXR1cm4gZXJyOworCX0KKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzMzEsNiArMzMzOSw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgdm14bmV0M19wbV9vcHMgPSB7CiAJLnN1c3BlbmQgPSB2bXhuZXQzX3N1c3BlbmQsCiAJLnJlc3VtZSA9IHZteG5ldDNfcmVzdW1lLAorCS5mcmVlemUgPSB2bXhuZXQzX3N1c3BlbmQsCisJLnJlc3RvcmUgPSB2bXhuZXQzX3Jlc3VtZSwKIH07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMKaW5kZXggYjdiNTMzMi4uNGM4YTk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jCkBAIC0zMjMsNyArMzIzLDcgQEAKIAkJCQkJICB2bXhuZXQzX3RxX2RyaXZlcl9zdGF0c1tpXS5vZmZzZXQpOwogCX0KIAotCWZvciAoaiA9IDA7IGogPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBqKyspIHsKKwlmb3IgKGogPSAwOyBqIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaisrKSB7CiAJCWJhc2UgPSAodTggKikmYWRhcHRlci0+cnFkX3N0YXJ0W2pdLnN0YXRzOwogCQkqYnVmKysgPSAodTY0KSBqOwogCQlmb3IgKGkgPSAxOyBpIDwgQVJSQVlfU0laRSh2bXhuZXQzX3JxX2Rldl9zdGF0cyk7IGkrKykKQEAgLTQ0NywxMiArNDQ3LDEyIEBACiAJcGFyYW0tPnJ4X21heF9wZW5kaW5nID0gVk1YTkVUM19SWF9SSU5HX01BWF9TSVpFOwogCXBhcmFtLT50eF9tYXhfcGVuZGluZyA9IFZNWE5FVDNfVFhfUklOR19NQVhfU0laRTsKIAlwYXJhbS0+cnhfbWluaV9tYXhfcGVuZGluZyA9IDA7Ci0JcGFyYW0tPnJ4X2p1bWJvX21heF9wZW5kaW5nID0gMDsKKwlwYXJhbS0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSBWTVhORVQzX1JYX1JJTkcyX01BWF9TSVpFOwogCiAJcGFyYW0tPnJ4X3BlbmRpbmcgPSBhZGFwdGVyLT5yeF9yaW5nX3NpemU7CiAJcGFyYW0tPnR4X3BlbmRpbmcgPSBhZGFwdGVyLT50eF9yaW5nX3NpemU7CiAJcGFyYW0tPnJ4X21pbmlfcGVuZGluZyA9IDA7Ci0JcGFyYW0tPnJ4X2p1bWJvX3BlbmRpbmcgPSAwOworCXBhcmFtLT5yeF9qdW1ib19wZW5kaW5nID0gYWRhcHRlci0+cnhfcmluZzJfc2l6ZTsKIH0KIAogCkBAIC00NjEsNyArNDYxLDcgQEAKIAkJICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpwYXJhbSkKIHsKIAlzdHJ1Y3Qgdm14bmV0M19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQl1MzIgbmV3X3R4X3Jpbmdfc2l6ZSwgbmV3X3J4X3Jpbmdfc2l6ZTsKKwl1MzIgbmV3X3R4X3Jpbmdfc2l6ZSwgbmV3X3J4X3Jpbmdfc2l6ZSwgbmV3X3J4X3JpbmcyX3NpemU7CiAJdTMyIHN6OwogCWludCBlcnIgPSAwOwogCkBAIC00NzMsNiArNDczLDEwIEBACiAJCQkJCQlWTVhORVQzX1JYX1JJTkdfTUFYX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKHBhcmFtLT5yeF9qdW1ib19wZW5kaW5nID09IDAgfHwKKwkgICAgcGFyYW0tPnJ4X2p1bWJvX3BlbmRpbmcgPiBWTVhORVQzX1JYX1JJTkcyX01BWF9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIGlmIGFkYXB0ZXIgbm90IHlldCBpbml0aWFsaXplZCwgZG8gbm90aGluZyAqLwogCWlmIChhZGFwdGVyLT5yeF9idWZfcGVyX3BrdCA9PSAwKSB7CiAJCW5ldGRldl9lcnIobmV0ZGV2LCAiYWRhcHRlciBub3QgY29tcGxldGVseSBpbml0aWFsaXplZCwgIgpAQCAtNTAwLDggKzUwNCwxNSBAQAogCQkJCQkJCSAgIHN6KSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChuZXdfdHhfcmluZ19zaXplID09IGFkYXB0ZXItPnR4X3F1ZXVlWzBdLnR4X3Jpbmcuc2l6ZSAmJgotCSAgICBuZXdfcnhfcmluZ19zaXplID09IGFkYXB0ZXItPnJ4X3F1ZXVlWzBdLnJ4X3JpbmdbMF0uc2l6ZSkgeworCS8qIHJpbmcyIGhhcyB0byBiZSBhIG11bHRpcGxlIG9mIFZNWE5FVDNfUklOR19TSVpFX0FMSUdOICovCisJbmV3X3J4X3JpbmcyX3NpemUgPSAocGFyYW0tPnJ4X2p1bWJvX3BlbmRpbmcgKyBWTVhORVQzX1JJTkdfU0laRV9NQVNLKSAmCisJCQkJflZNWE5FVDNfUklOR19TSVpFX01BU0s7CisJbmV3X3J4X3JpbmcyX3NpemUgPSBtaW5fdCh1MzIsIG5ld19yeF9yaW5nMl9zaXplLAorCQkJCSAgVk1YTkVUM19SWF9SSU5HMl9NQVhfU0laRSk7CisKKwlpZiAobmV3X3R4X3Jpbmdfc2l6ZSA9PSBhZGFwdGVyLT50eF9yaW5nX3NpemUgJiYKKwkgICAgbmV3X3J4X3Jpbmdfc2l6ZSA9PSBhZGFwdGVyLT5yeF9yaW5nX3NpemUgJiYKKwkgICAgbmV3X3J4X3JpbmcyX3NpemUgPT0gYWRhcHRlci0+cnhfcmluZzJfc2l6ZSkgewogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTUyMiw3ICs1MzMsNyBAQAogCQl2bXhuZXQzX3JxX2Rlc3Ryb3lfYWxsKGFkYXB0ZXIpOwogCiAJCWVyciA9IHZteG5ldDNfY3JlYXRlX3F1ZXVlcyhhZGFwdGVyLCBuZXdfdHhfcmluZ19zaXplLAotCQkJbmV3X3J4X3Jpbmdfc2l6ZSwgVk1YTkVUM19ERUZfUlhfUklOR19TSVpFKTsKKwkJCW5ld19yeF9yaW5nX3NpemUsIG5ld19yeF9yaW5nMl9zaXplKTsKIAogCQlpZiAoZXJyKSB7CiAJCQkvKiBmYWlsZWQsIG1vc3QgbGlrZWx5IGJlY2F1c2Ugb2YgT09NLCB0cnkgZGVmYXVsdApAQCAtNTMwLDExICs1NDEsMTIgQEAKIAkJCW5ldGRldl9lcnIobmV0ZGV2LCAiZmFpbGVkIHRvIGFwcGx5IG5ldyBzaXplcywgIgogCQkJCSAgICJ0cnkgdGhlIGRlZmF1bHQgb25lc1xuIik7CiAJCQluZXdfcnhfcmluZ19zaXplID0gVk1YTkVUM19ERUZfUlhfUklOR19TSVpFOworCQkJbmV3X3J4X3JpbmcyX3NpemUgPSBWTVhORVQzX0RFRl9SWF9SSU5HMl9TSVpFOwogCQkJbmV3X3R4X3Jpbmdfc2l6ZSA9IFZNWE5FVDNfREVGX1RYX1JJTkdfU0laRTsKIAkJCWVyciA9IHZteG5ldDNfY3JlYXRlX3F1ZXVlcyhhZGFwdGVyLAogCQkJCQkJICAgIG5ld190eF9yaW5nX3NpemUsCiAJCQkJCQkgICAgbmV3X3J4X3Jpbmdfc2l6ZSwKLQkJCQkJCSAgICBWTVhORVQzX0RFRl9SWF9SSU5HX1NJWkUpOworCQkJCQkJICAgIG5ld19yeF9yaW5nMl9zaXplKTsKIAkJCWlmIChlcnIpIHsKIAkJCQluZXRkZXZfZXJyKG5ldGRldiwgImZhaWxlZCB0byBjcmVhdGUgcXVldWVzICIKIAkJCQkJICAgIndpdGggZGVmYXVsdCBzaXplcy4gQ2xvc2luZyBpdFxuIik7CkBAIC01NDksNiArNTYxLDcgQEAKIAl9CiAJYWRhcHRlci0+dHhfcmluZ19zaXplID0gbmV3X3R4X3Jpbmdfc2l6ZTsKIAlhZGFwdGVyLT5yeF9yaW5nX3NpemUgPSBuZXdfcnhfcmluZ19zaXplOworCWFkYXB0ZXItPnJ4X3JpbmcyX3NpemUgPSBuZXdfcnhfcmluZzJfc2l6ZTsKIAogb3V0OgogCWNsZWFyX2JpdChWTVhORVQzX1NUQVRFX0JJVF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfaW50LmggYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfaW50LmgKaW5kZXggNWYwMTk5Zi4uY2Q3MWM3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2ludC5oCisrKyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19pbnQuaApAQCAtNjksMTAgKzY5LDEwIEBACiAvKgogICogVmVyc2lvbiBudW1iZXJzCiAgKi8KLSNkZWZpbmUgVk1YTkVUM19EUklWRVJfVkVSU0lPTl9TVFJJTkcgICAiMS4yLjEuMC1rIgorI2RlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX1NUUklORyAgICIxLjMuNC4wLWsiCiAKIC8qIGEgMzItYml0IGludCwgZWFjaCBieXRlIGVuY29kZSBhIHZlcmlvbiBudW1iZXIgaW4gVk1YTkVUM19EUklWRVJfVkVSU0lPTiAqLwotI2RlZmluZSBWTVhORVQzX0RSSVZFUl9WRVJTSU9OX05VTSAgICAgIDB4MDEwMjAxMDAKKyNkZWZpbmUgVk1YTkVUM19EUklWRVJfVkVSU0lPTl9OVU0gICAgICAweDAxMDMwNDAwCiAKICNpZiBkZWZpbmVkKENPTkZJR19QQ0lfTVNJKQogCS8qIFJTUyBvbmx5IG1ha2VzIHNlbnNlIGlmIE1TSS1YIGlzIHN1cHBvcnRlZC4gKi8KQEAgLTM1Miw2ICszNTIsNyBAQAogCS8qIFJpbmcgc2l6ZXMgKi8KIAl1MzIgdHhfcmluZ19zaXplOwogCXUzMiByeF9yaW5nX3NpemU7CisJdTMyIHJ4X3JpbmcyX3NpemU7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKIApAQCAtMzg0LDYgKzM4NSw3IEBACiAvKiBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgVk1YTkVUM19SSU5HX1NJWkVfQUxJR04gKi8KICNkZWZpbmUgVk1YTkVUM19ERUZfVFhfUklOR19TSVpFICAgIDUxMgogI2RlZmluZSBWTVhORVQzX0RFRl9SWF9SSU5HX1NJWkUgICAgMjU2CisjZGVmaW5lIFZNWE5FVDNfREVGX1JYX1JJTkcyX1NJWkUgICAxMjgKIAogI2RlZmluZSBWTVhORVQzX01BWF9FVEhfSERSX1NJWkUgICAgMjIKICNkZWZpbmUgVk1YTkVUM19NQVhfU0tCX0JVRl9TSVpFICAgICgzKjEwMjQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGxhbi5jIGIvZHJpdmVycy9uZXQvdnhsYW4uYwppbmRleCA3ZmJkODlmLi4wZTU3ZTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92eGxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3Z4bGFuLmMKQEAgLTYxLDEyICs2MSw2IEBACiAjZGVmaW5lIEZEQl9BR0VfREVGQVVMVCAzMDAgLyogNSBtaW4gKi8KICNkZWZpbmUgRkRCX0FHRV9JTlRFUlZBTCAoMTAgKiBIWikJLyogcmVzY2FuIGludGVydmFsICovCiAKLSNkZWZpbmUgVlhMQU5fTl9WSUQJKDF1IDw8IDI0KQotI2RlZmluZSBWWExBTl9WSURfTUFTSwkoVlhMQU5fTl9WSUQgLSAxKQotI2RlZmluZSBWWExBTl9ITEVOIChzaXplb2Yoc3RydWN0IHVkcGhkcikgKyBzaXplb2Yoc3RydWN0IHZ4bGFuaGRyKSkKLQotI2RlZmluZSBWWExBTl9GTEFHUyAweDA4MDAwMDAwCS8qIHN0cnVjdCB2eGxhbmhkci52eF9mbGFncyByZXF1aXJlZCB2YWx1ZS4gKi8KLQogLyogVURQIHBvcnQgZm9yIFZYTEFOIHRyYWZmaWMuCiAgKiBUaGUgSUFOQSBhc3NpZ25lZCBwb3J0IGlzIDQ3ODksIGJ1dCB0aGUgTGludXggZGVmYXVsdCBpcyA4NDcyCiAgKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGVhcmx5IGFkb3B0ZXJzLgpAQCAtMjY5LDE1ICsyNjMsMjAgQEAKIAlyZXR1cm4gbGlzdF9maXJzdF9lbnRyeSgmZmRiLT5yZW1vdGVzLCBzdHJ1Y3QgdnhsYW5fcmRzdCwgbGlzdCk7CiB9CiAKLS8qIEZpbmQgVlhMQU4gc29ja2V0IGJhc2VkIG9uIG5ldHdvcmsgbmFtZXNwYWNlLCBhZGRyZXNzIGZhbWlseSBhbmQgVURQIHBvcnQgKi8KLXN0YXRpYyBzdHJ1Y3QgdnhsYW5fc29jayAqdnhsYW5fZmluZF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkJICBzYV9mYW1pbHlfdCBmYW1pbHksIF9fYmUxNiBwb3J0KQorLyogRmluZCBWWExBTiBzb2NrZXQgYmFzZWQgb24gbmV0d29yayBuYW1lc3BhY2UsIGFkZHJlc3MgZmFtaWx5IGFuZCBVRFAgcG9ydAorICogYW5kIGVuYWJsZWQgdW5zaGFyZWFibGUgZmxhZ3MuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdnhsYW5fc29jayAqdnhsYW5fZmluZF9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgc2FfZmFtaWx5X3QgZmFtaWx5LAorCQkJCQkgIF9fYmUxNiBwb3J0LCB1MzIgZmxhZ3MpCiB7CiAJc3RydWN0IHZ4bGFuX3NvY2sgKnZzOwogCisJZmxhZ3MgJj0gVlhMQU5fRl9SQ1ZfRkxBR1M7CisKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodnMsIHZzX2hlYWQobmV0LCBwb3J0KSwgaGxpc3QpIHsKIAkJaWYgKGluZXRfc2sodnMtPnNvY2stPnNrKS0+aW5ldF9zcG9ydCA9PSBwb3J0ICYmCi0JCSAgICBpbmV0X3NrKHZzLT5zb2NrLT5zayktPnNrLnNrX2ZhbWlseSA9PSBmYW1pbHkpCisJCSAgICBpbmV0X3NrKHZzLT5zb2NrLT5zayktPnNrLnNrX2ZhbWlseSA9PSBmYW1pbHkgJiYKKwkJICAgIHZzLT5mbGFncyA9PSBmbGFncykKIAkJCXJldHVybiB2czsKIAl9CiAJcmV0dXJuIE5VTEw7CkBAIC0yOTcsMTEgKzI5NiwxMiBAQAogCiAvKiBMb29rIHVwIFZOSSBpbiBhIHBlciBuZXQgbmFtZXNwYWNlIHRhYmxlICovCiBzdGF0aWMgc3RydWN0IHZ4bGFuX2RldiAqdnhsYW5fZmluZF92bmkoc3RydWN0IG5ldCAqbmV0LCB1MzIgaWQsCi0JCQkJCXNhX2ZhbWlseV90IGZhbWlseSwgX19iZTE2IHBvcnQpCisJCQkJCXNhX2ZhbWlseV90IGZhbWlseSwgX19iZTE2IHBvcnQsCisJCQkJCXUzMiBmbGFncykKIHsKIAlzdHJ1Y3QgdnhsYW5fc29jayAqdnM7CiAKLQl2cyA9IHZ4bGFuX2ZpbmRfc29jayhuZXQsIGZhbWlseSwgcG9ydCk7CisJdnMgPSB2eGxhbl9maW5kX3NvY2sobmV0LCBmYW1pbHksIHBvcnQsIGZsYWdzKTsKIAlpZiAoIXZzKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMzQwLDYgKzM0MCwxMSBAQAogCW5kbS0+bmRtX2ZsYWdzID0gZmRiLT5mbGFnczsKIAluZG0tPm5kbV90eXBlID0gUlROX1VOSUNBU1Q7CiAKKwlpZiAoIW5ldF9lcShkZXZfbmV0KHZ4bGFuLT5kZXYpLCB2eGxhbi0+bmV0KSAmJgorCSAgICBubGFfcHV0X3MzMihza2IsIE5EQV9MSU5LX05FVE5TSUQsCisJCQlwZWVybmV0MmlkKGRldl9uZXQodnhsYW4tPmRldiksIHZ4bGFuLT5uZXQpKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKIAlpZiAoc2VuZF9ldGggJiYgbmxhX3B1dChza2IsIE5EQV9MTEFERFIsIEVUSF9BTEVOLCAmZmRiLT5ldGhfYWRkcikpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCkBAIC0zNjQsNyArMzY5LDggQEAKIAlpZiAobmxhX3B1dChza2IsIE5EQV9DQUNIRUlORk8sIHNpemVvZihjaSksICZjaSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIAogbmxhX3B1dF9mYWlsdXJlOgogCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CkBAIC0zNzksNiArMzg1LDcgQEAKIAkJKyBubGFfdG90YWxfc2l6ZShzaXplb2YoX19iZTE2KSkgLyogTkRBX1BPUlQgKi8KIAkJKyBubGFfdG90YWxfc2l6ZShzaXplb2YoX19iZTMyKSkgLyogTkRBX1ZOSSAqLwogCQkrIG5sYV90b3RhbF9zaXplKHNpemVvZihfX3UzMikpIC8qIE5EQV9JRklOREVYICovCisJCSsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fczMyKSkgLyogTkRBX0xJTktfTkVUTlNJRCAqLwogCQkrIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgbmRhX2NhY2hlaW5mbykpOwogfQogCkBAIC01NDUsMTUgKzU1Miw1MSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKip2eGxhbl9ncm9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKmhlYWQsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgc3RydWN0IHZ4bGFuaGRyICp2eGxhbl9ncm9fcmVtY3N1bShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHVuc2lnbmVkIGludCBvZmYsCisJCQkJCSAgc3RydWN0IHZ4bGFuaGRyICp2aCwgc2l6ZV90IGhkcmxlbiwKKwkJCQkJICB1MzIgZGF0YSkKK3sKKwlzaXplX3Qgc3RhcnQsIG9mZnNldCwgcGxlbjsKKworCWlmIChza2ItPnJlbWNzdW1fb2ZmbG9hZCkKKwkJcmV0dXJuIHZoOworCisJaWYgKCFOQVBJX0dST19DQihza2IpLT5jc3VtX3ZhbGlkKQorCQlyZXR1cm4gTlVMTDsKKworCXN0YXJ0ID0gKGRhdGEgJiBWWExBTl9SQ09fTUFTSykgPDwgVlhMQU5fUkNPX1NISUZUOworCW9mZnNldCA9IHN0YXJ0ICsgKChkYXRhICYgVlhMQU5fUkNPX1VEUCkgPworCQkJICBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykgOgorCQkJICBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBjaGVjaykpOworCisJcGxlbiA9IGhkcmxlbiArIG9mZnNldCArIHNpemVvZih1MTYpOworCisJLyogUHVsbCBjaGVja3N1bSB0aGF0IHdpbGwgYmUgd3JpdHRlbiAqLworCWlmIChza2JfZ3JvX2hlYWRlcl9oYXJkKHNrYiwgb2ZmICsgcGxlbikpIHsKKwkJdmggPSBza2JfZ3JvX2hlYWRlcl9zbG93KHNrYiwgb2ZmICsgcGxlbiwgb2ZmKTsKKwkJaWYgKCF2aCkKKwkJCXJldHVybiBOVUxMOworCX0KKworCXNrYl9ncm9fcmVtY3N1bV9wcm9jZXNzKHNrYiwgKHZvaWQgKil2aCArIGhkcmxlbiwgc3RhcnQsIG9mZnNldCk7CisKKwlza2ItPnJlbWNzdW1fb2ZmbG9hZCA9IDE7CisKKwlyZXR1cm4gdmg7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqKnZ4bGFuX2dyb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqaGVhZCwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCB1ZHBfb2ZmbG9hZCAqdW9mZikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcCwgKipwcCA9IE5VTEw7CiAJc3RydWN0IHZ4bGFuaGRyICp2aCwgKnZoMjsKLQlzdHJ1Y3QgZXRoaGRyICplaCwgKmVoMjsKLQl1bnNpZ25lZCBpbnQgaGxlbiwgb2ZmX3Z4LCBvZmZfZXRoOwotCWNvbnN0IHN0cnVjdCBwYWNrZXRfb2ZmbG9hZCAqcHR5cGU7Ci0JX19iZTE2IHR5cGU7CisJdW5zaWduZWQgaW50IGhsZW4sIG9mZl92eDsKIAlpbnQgZmx1c2ggPSAxOworCXN0cnVjdCB2eGxhbl9zb2NrICp2cyA9IGNvbnRhaW5lcl9vZih1b2ZmLCBzdHJ1Y3QgdnhsYW5fc29jaywKKwkJCQkJICAgICB1ZHBfb2ZmbG9hZHMpOworCXUzMiBmbGFnczsKIAogCW9mZl92eCA9IHNrYl9ncm9fb2Zmc2V0KHNrYik7CiAJaGxlbiA9IG9mZl92eCArIHNpemVvZigqdmgpOwpAQCAtNTYzLDE1ICs2MDYsMTcgQEAKIAkJaWYgKHVubGlrZWx5KCF2aCkpCiAJCQlnb3RvIG91dDsKIAl9CisKIAlza2JfZ3JvX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHZ4bGFuaGRyKSk7IC8qIHB1bGwgdnhsYW4gaGVhZGVyICovCiAJc2tiX2dyb19wb3N0cHVsbF9yY3N1bShza2IsIHZoLCBzaXplb2Yoc3RydWN0IHZ4bGFuaGRyKSk7CiAKLQlvZmZfZXRoID0gc2tiX2dyb19vZmZzZXQoc2tiKTsKLQlobGVuID0gb2ZmX2V0aCArIHNpemVvZigqZWgpOwotCWVoICAgPSBza2JfZ3JvX2hlYWRlcl9mYXN0KHNrYiwgb2ZmX2V0aCk7Ci0JaWYgKHNrYl9ncm9faGVhZGVyX2hhcmQoc2tiLCBobGVuKSkgewotCQllaCA9IHNrYl9ncm9faGVhZGVyX3Nsb3coc2tiLCBobGVuLCBvZmZfZXRoKTsKLQkJaWYgKHVubGlrZWx5KCFlaCkpCisJZmxhZ3MgPSBudG9obCh2aC0+dnhfZmxhZ3MpOworCisJaWYgKChmbGFncyAmIFZYTEFOX0hGX1JDTykgJiYgKHZzLT5mbGFncyAmIFZYTEFOX0ZfUkVNQ1NVTV9SWCkpIHsKKwkJdmggPSB2eGxhbl9ncm9fcmVtY3N1bShza2IsIG9mZl92eCwgdmgsIHNpemVvZihzdHJ1Y3QgdnhsYW5oZHIpLAorCQkJCSAgICAgICBudG9obCh2aC0+dnhfdm5pKSk7CisKKwkJaWYgKCF2aCkKIAkJCWdvdG8gb3V0OwogCX0KIApAQCAtNTgyLDU0ICs2MjcsMjcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXZoMiA9IChzdHJ1Y3QgdnhsYW5oZHIgKikocC0+ZGF0YSArIG9mZl92eCk7Ci0JCWVoMiA9IChzdHJ1Y3QgZXRoaGRyICAgKikocC0+ZGF0YSArIG9mZl9ldGgpOwotCQlpZiAodmgtPnZ4X3ZuaSAhPSB2aDItPnZ4X3ZuaSB8fCBjb21wYXJlX2V0aGVyX2hlYWRlcihlaCwgZWgyKSkgeworCQlpZiAodmgtPnZ4X2ZsYWdzICE9IHZoMi0+dnhfZmxhZ3MgfHwKKwkJICAgIHZoLT52eF92bmkgIT0gdmgyLT52eF92bmkpIHsKIAkJCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPSAwOwogCQkJY29udGludWU7CiAJCX0KIAl9CiAKLQl0eXBlID0gZWgtPmhfcHJvdG87CisJcHAgPSBldGhfZ3JvX3JlY2VpdmUoaGVhZCwgc2tiKTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlwdHlwZSA9IGdyb19maW5kX3JlY2VpdmVfYnlfdHlwZSh0eXBlKTsKLQlpZiAocHR5cGUgPT0gTlVMTCkgewotCQlmbHVzaCA9IDE7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlza2JfZ3JvX3B1bGwoc2tiLCBzaXplb2YoKmVoKSk7IC8qIHB1bGwgaW5uZXIgZXRoIGhlYWRlciAqLwotCXNrYl9ncm9fcG9zdHB1bGxfcmNzdW0oc2tiLCBlaCwgc2l6ZW9mKCplaCkpOwotCXBwID0gcHR5cGUtPmNhbGxiYWNrcy5ncm9fcmVjZWl2ZShoZWFkLCBza2IpOwotCi1vdXRfdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOwogb3V0OgogCU5BUElfR1JPX0NCKHNrYiktPmZsdXNoIHw9IGZsdXNoOwogCiAJcmV0dXJuIHBwOwogfQogCi1zdGF0aWMgaW50IHZ4bGFuX2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhvZmYpCitzdGF0aWMgaW50IHZ4bGFuX2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhvZmYsCisJCQkgICAgICBzdHJ1Y3QgdWRwX29mZmxvYWQgKnVvZmYpCiB7Ci0Jc3RydWN0IGV0aGhkciAqZWg7Ci0Jc3RydWN0IHBhY2tldF9vZmZsb2FkICpwdHlwZTsKLQlfX2JlMTYgdHlwZTsKLQlpbnQgdnhsYW5fbGVuICA9IHNpemVvZihzdHJ1Y3QgdnhsYW5oZHIpICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpOwotCWludCBlcnIgPSAtRU5PU1lTOwotCiAJdWRwX3R1bm5lbF9ncm9fY29tcGxldGUoc2tiLCBuaG9mZik7CiAKLQllaCA9IChzdHJ1Y3QgZXRoaGRyICopKHNrYi0+ZGF0YSArIG5ob2ZmICsgc2l6ZW9mKHN0cnVjdCB2eGxhbmhkcikpOwotCXR5cGUgPSBlaC0+aF9wcm90bzsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlwdHlwZSA9IGdyb19maW5kX2NvbXBsZXRlX2J5X3R5cGUodHlwZSk7Ci0JaWYgKHB0eXBlICE9IE5VTEwpCi0JCWVyciA9IHB0eXBlLT5jYWxsYmFja3MuZ3JvX2NvbXBsZXRlKHNrYiwgbmhvZmYgKyB2eGxhbl9sZW4pOwotCi0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gZXRoX2dyb19jb21wbGV0ZShza2IsIG5ob2ZmICsgc2l6ZW9mKHN0cnVjdCB2eGxhbmhkcikpOwogfQogCiAvKiBOb3RpZnkgbmV0ZGV2cyB0aGF0IFVEUCBwb3J0IHN0YXJ0ZWQgbGlzdGVuaW5nICovCkBAIC05OTEsNyArMTAwOSw3IEBACiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQluZXRkZXZfaW5mbyhkZXYsCiAJCQkJICAgICIlcE0gbWlncmF0ZWQgZnJvbSAlcElTIHRvICVwSVNcbiIsCi0JCQkJICAgIHNyY19tYWMsICZyZHN0LT5yZW1vdGVfaXAsICZzcmNfaXApOworCQkJCSAgICBzcmNfbWFjLCAmcmRzdC0+cmVtb3RlX2lwLnNhLCAmc3JjX2lwLT5zYSk7CiAKIAkJcmRzdC0+cmVtb3RlX2lwID0gKnNyY19pcDsKIAkJZi0+dXBkYXRlZCA9IGppZmZpZXM7CkBAIC0xMTMxLDMzICsxMTQ5LDEwNyBAQAogCWRldl9wdXQodnhsYW4tPmRldik7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdnhsYW5oZHIgKnZ4bGFuX3JlbWNzdW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHZ4bGFuaGRyICp2aCwKKwkJCQkgICAgICBzaXplX3QgaGRybGVuLCB1MzIgZGF0YSkKK3sKKwlzaXplX3Qgc3RhcnQsIG9mZnNldCwgcGxlbjsKKworCWlmIChza2ItPnJlbWNzdW1fb2ZmbG9hZCkgeworCQkvKiBBbHJlYWR5IHByb2Nlc3NlZCBpbiBHUk8gcGF0aCAqLworCQlza2ItPnJlbWNzdW1fb2ZmbG9hZCA9IDA7CisJCXJldHVybiB2aDsKKwl9CisKKwlzdGFydCA9IChkYXRhICYgVlhMQU5fUkNPX01BU0spIDw8IFZYTEFOX1JDT19TSElGVDsKKwlvZmZzZXQgPSBzdGFydCArICgoZGF0YSAmIFZYTEFOX1JDT19VRFApID8KKwkJCSAgb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spIDoKKwkJCSAgb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spKTsKKworCXBsZW4gPSBoZHJsZW4gKyBvZmZzZXQgKyBzaXplb2YodTE2KTsKKworCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHBsZW4pKQorCQlyZXR1cm4gTlVMTDsKKworCXZoID0gKHN0cnVjdCB2eGxhbmhkciAqKSh1ZHBfaGRyKHNrYikgKyAxKTsKKworCXNrYl9yZW1jc3VtX3Byb2Nlc3Moc2tiLCAodm9pZCAqKXZoICsgaGRybGVuLCBzdGFydCwgb2Zmc2V0KTsKKworCXJldHVybiB2aDsKK30KKwogLyogQ2FsbGJhY2sgZnJvbSBuZXQvaXB2NC91ZHAuYyB0byByZWNlaXZlIHBhY2tldHMgKi8KIHN0YXRpYyBpbnQgdnhsYW5fdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCB2eGxhbl9zb2NrICp2czsKIAlzdHJ1Y3QgdnhsYW5oZHIgKnZ4aDsKKwl1MzIgZmxhZ3MsIHZuaTsKKwlzdHJ1Y3QgdnhsYW5fbWV0YWRhdGEgbWQgPSB7MH07CiAKIAkvKiBOZWVkIFZ4bGFuIGFuZCBpbm5lciBFdGhlcm5ldCBoZWFkZXIgdG8gYmUgcHJlc2VudCAqLwogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIFZYTEFOX0hMRU4pKQogCQlnb3RvIGVycm9yOwogCi0JLyogUmV0dXJuIHBhY2tldHMgd2l0aCByZXNlcnZlZCBiaXRzIHNldCAqLwogCXZ4aCA9IChzdHJ1Y3QgdnhsYW5oZHIgKikodWRwX2hkcihza2IpICsgMSk7Ci0JaWYgKHZ4aC0+dnhfZmxhZ3MgIT0gaHRvbmwoVlhMQU5fRkxBR1MpIHx8Ci0JICAgICh2eGgtPnZ4X3ZuaSAmIGh0b25sKDB4ZmYpKSkgewotCQluZXRkZXZfZGJnKHNrYi0+ZGV2LCAiaW52YWxpZCB2eGxhbiBmbGFncz0lI3ggdm5pPSUjeFxuIiwKLQkJCSAgIG50b2hsKHZ4aC0+dnhfZmxhZ3MpLCBudG9obCh2eGgtPnZ4X3ZuaSkpOwotCQlnb3RvIGVycm9yOworCWZsYWdzID0gbnRvaGwodnhoLT52eF9mbGFncyk7CisJdm5pID0gbnRvaGwodnhoLT52eF92bmkpOworCisJaWYgKGZsYWdzICYgVlhMQU5fSEZfVk5JKSB7CisJCWZsYWdzICY9IH5WWExBTl9IRl9WTkk7CisJfSBlbHNlIHsKKwkJLyogVk5JIGZsYWcgYWx3YXlzIHJlcXVpcmVkIHRvIGJlIHNldCAqLworCQlnb3RvIGJhZF9mbGFnczsKIAl9CiAKIAlpZiAoaXB0dW5uZWxfcHVsbF9oZWFkZXIoc2tiLCBWWExBTl9ITEVOLCBodG9ucyhFVEhfUF9URUIpKSkKIAkJZ290byBkcm9wOworCXZ4aCA9IChzdHJ1Y3QgdnhsYW5oZHIgKikodWRwX2hkcihza2IpICsgMSk7CiAKIAl2cyA9IHJjdV9kZXJlZmVyZW5jZV9za191c2VyX2RhdGEoc2spOwogCWlmICghdnMpCiAJCWdvdG8gZHJvcDsKIAotCXZzLT5yY3YodnMsIHNrYiwgdnhoLT52eF92bmkpOworCWlmICgoZmxhZ3MgJiBWWExBTl9IRl9SQ08pICYmICh2cy0+ZmxhZ3MgJiBWWExBTl9GX1JFTUNTVU1fUlgpKSB7CisJCXZ4aCA9IHZ4bGFuX3JlbWNzdW0oc2tiLCB2eGgsIHNpemVvZihzdHJ1Y3QgdnhsYW5oZHIpLCB2bmkpOworCQlpZiAoIXZ4aCkKKwkJCWdvdG8gZHJvcDsKKworCQlmbGFncyAmPSB+VlhMQU5fSEZfUkNPOworCQl2bmkgJj0gVlhMQU5fVklEX01BU0s7CisJfQorCisJLyogRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBvbmx5IGFsbG93IHJlc2VydmVkIGZpZWxkcyB0byBiZQorCSAqIHVzZWQgYnkgVlhMQU4gZXh0ZW5zaW9ucyBpZiBleHBsaWNpdGx5IHJlcXVlc3RlZC4KKwkgKi8KKwlpZiAoKGZsYWdzICYgVlhMQU5fSEZfR0JQKSAmJiAodnMtPmZsYWdzICYgVlhMQU5fRl9HQlApKSB7CisJCXN0cnVjdCB2eGxhbmhkcl9nYnAgKmdicDsKKworCQlnYnAgPSAoc3RydWN0IHZ4bGFuaGRyX2dicCAqKXZ4aDsKKwkJbWQuZ2JwID0gbnRvaHMoZ2JwLT5wb2xpY3lfaWQpOworCisJCWlmIChnYnAtPmRvbnRfbGVhcm4pCisJCQltZC5nYnAgfD0gVlhMQU5fR0JQX0RPTlRfTEVBUk47CisKKwkJaWYgKGdicC0+cG9saWN5X2FwcGxpZWQpCisJCQltZC5nYnAgfD0gVlhMQU5fR0JQX1BPTElDWV9BUFBMSUVEOworCisJCWZsYWdzICY9IH5WWExBTl9HQlBfVVNFRF9CSVRTOworCX0KKworCWlmIChmbGFncyB8fCAodm5pICYgflZYTEFOX1ZJRF9NQVNLKSkgeworCQkvKiBJZiB0aGVyZSBhcmUgYW55IHVucHJvY2Vzc2VkIGZsYWdzIHJlbWFpbmluZyB0cmVhdAorCQkgKiB0aGlzIGFzIGEgbWFsZm9ybWVkIHBhY2tldC4gVGhpcyBiZWhhdmlvciBkaXZlcmdlcyBmcm9tCisJCSAqIFZYTEFOIFJGQyAoUkZDNzM0OCkgd2hpY2ggc3RpcHVsYXRlcyB0aGF0IGJpdHMgaW4gcmVzZXJ2ZWQKKwkJICogaW4gcmVzZXJ2ZWQgZmllbGRzIGFyZSB0byBiZSBpZ25vcmVkLiBUaGUgYXBwcm9hY2ggaGVyZQorCQkgKiBtYWludGFpbnMgY29tcGF0YmlsaXR5IHdpdGggcHJldmlvdXMgc3RhY2sgY29kZSwgYW5kIGFsc28KKwkJICogaXMgbW9yZSByb2J1c3QgYW5kIHByb3ZpZGVzIGEgbGl0dGxlIG1vcmUgc2VjdXJpdHkgaW4KKwkJICogYWRkaW5nIGV4dGVuc2lvbnMgdG8gVlhMQU4uCisJCSAqLworCisJCWdvdG8gYmFkX2ZsYWdzOworCX0KKworCW1kLnZuaSA9IHZ4aC0+dnhfdm5pOworCXZzLT5yY3YodnMsIHNrYiwgJm1kKTsKIAlyZXR1cm4gMDsKIAogZHJvcDoKQEAgLTExNjUsMTMgKzEyNTcsMTcgQEAKIAlrZnJlZV9za2Ioc2tiKTsKIAlyZXR1cm4gMDsKIAorYmFkX2ZsYWdzOgorCW5ldGRldl9kYmcoc2tiLT5kZXYsICJpbnZhbGlkIHZ4bGFuIGZsYWdzPSUjeCB2bmk9JSN4XG4iLAorCQkgICBudG9obCh2eGgtPnZ4X2ZsYWdzKSwgbnRvaGwodnhoLT52eF92bmkpKTsKKwogZXJyb3I6CiAJLyogUmV0dXJuIG5vbiB2eGxhbiBwa3QgKi8KIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgdnhsYW5fcmN2KHN0cnVjdCB2eGxhbl9zb2NrICp2cywKLQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHZ4X3ZuaSkKK3N0YXRpYyB2b2lkIHZ4bGFuX3JjdihzdHJ1Y3QgdnhsYW5fc29jayAqdnMsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqbWQpCiB7CiAJc3RydWN0IGlwaGRyICpvaXAgPSBOVUxMOwogCXN0cnVjdCBpcHY2aGRyICpvaXA2ID0gTlVMTDsKQEAgLTExODIsNyArMTI3OCw3IEBACiAJaW50IGVyciA9IDA7CiAJdW5pb24gdnhsYW5fYWRkciAqcmVtb3RlX2lwOwogCi0Jdm5pID0gbnRvaGwodnhfdm5pKSA+PiA4OworCXZuaSA9IG50b2hsKG1kLT52bmkpID4+IDg7CiAJLyogSXMgdGhpcyBWTkkgZGVmaW5lZD8gKi8KIAl2eGxhbiA9IHZ4bGFuX3ZzX2ZpbmRfdm5pKHZzLCB2bmkpOwogCWlmICghdnhsYW4pCkBAIC0xMjE2LDYgKzEzMTIsNyBAQAogCQlnb3RvIGRyb3A7CiAKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKKwlza2ItPm1hcmsgPSBtZC0+Z2JwOwogCiAJaWYgKG9pcDYpCiAJCWVyciA9IElQNl9FQ05fZGVjYXBzdWxhdGUob2lwNiwgc2tiKTsKQEAgLTE1NjUsMjAgKzE2NjIsNTQgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKK3N0YXRpYyB2b2lkIHZ4bGFuX2J1aWxkX2dicF9oZHIoc3RydWN0IHZ4bGFuaGRyICp2eGgsIHUzMiB2eGZsYWdzLAorCQkJCXN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqbWQpCit7CisJc3RydWN0IHZ4bGFuaGRyX2dicCAqZ2JwOworCisJaWYgKCFtZC0+Z2JwKQorCQlyZXR1cm47CisKKwlnYnAgPSAoc3RydWN0IHZ4bGFuaGRyX2dicCAqKXZ4aDsKKwl2eGgtPnZ4X2ZsYWdzIHw9IGh0b25sKFZYTEFOX0hGX0dCUCk7CisKKwlpZiAobWQtPmdicCAmIFZYTEFOX0dCUF9ET05UX0xFQVJOKQorCQlnYnAtPmRvbnRfbGVhcm4gPSAxOworCisJaWYgKG1kLT5nYnAgJiBWWExBTl9HQlBfUE9MSUNZX0FQUExJRUQpCisJCWdicC0+cG9saWN5X2FwcGxpZWQgPSAxOworCisJZ2JwLT5wb2xpY3lfaWQgPSBodG9ucyhtZC0+Z2JwICYgVlhMQU5fR0JQX0lEX01BU0spOworfQorCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKLXN0YXRpYyBpbnQgdnhsYW42X3htaXRfc2tiKHN0cnVjdCB2eGxhbl9zb2NrICp2cywKLQkJCSAgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyBpbnQgdnhsYW42X3htaXRfc2tiKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCiAJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyLCBfX3U4IHByaW8sIF9fdTggdHRsLAotCQkJICAgX19iZTE2IHNyY19wb3J0LCBfX2JlMTYgZHN0X3BvcnQsIF9fYmUzMiB2bmksCi0JCQkgICBib29sIHhuZXQpCisJCQkgICBfX2JlMTYgc3JjX3BvcnQsIF9fYmUxNiBkc3RfcG9ydCwKKwkJCSAgIHN0cnVjdCB2eGxhbl9tZXRhZGF0YSAqbWQsIGJvb2wgeG5ldCwgdTMyIHZ4ZmxhZ3MpCiB7CiAJc3RydWN0IHZ4bGFuaGRyICp2eGg7CiAJaW50IG1pbl9oZWFkcm9vbTsKIAlpbnQgZXJyOwotCWJvb2wgdWRwX3N1bSA9ICF1ZHBfZ2V0X25vX2NoZWNrNl90eCh2cy0+c29jay0+c2spOworCWJvb2wgdWRwX3N1bSA9ICEodnhmbGFncyAmIFZYTEFOX0ZfVURQX1pFUk9fQ1NVTTZfVFgpOworCWludCB0eXBlID0gdWRwX3N1bSA/IFNLQl9HU09fVURQX1RVTk5FTF9DU1VNIDogU0tCX0dTT19VRFBfVFVOTkVMOworCXUxNiBoZHJsZW4gPSBzaXplb2Yoc3RydWN0IHZ4bGFuaGRyKTsKIAotCXNrYiA9IHVkcF90dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgdWRwX3N1bSk7CisJaWYgKCh2eGZsYWdzICYgVlhMQU5fRl9SRU1DU1VNX1RYKSAmJgorCSAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCWludCBjc3VtX3N0YXJ0ID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpOworCisJCWlmIChjc3VtX3N0YXJ0IDw9IFZYTEFOX01BWF9SRU1DU1VNX1NUQVJUICYmCisJCSAgICAhKGNzdW1fc3RhcnQgJiBWWExBTl9SQ09fU0hJRlRfTUFTSykgJiYKKwkJICAgIChza2ItPmNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fAorCQkgICAgIHNrYi0+Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spKSkgeworCQkJdWRwX3N1bSA9IGZhbHNlOworCQkJdHlwZSB8PSBTS0JfR1NPX1RVTk5FTF9SRU1DU1VNOworCQl9CisJfQorCisJc2tiID0gaXB0dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgdWRwX3N1bSwgdHlwZSk7CiAJaWYgKElTX0VSUihza2IpKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyOwpAQCAtMTU4OCw3ICsxNzE5LDcgQEAKIAogCW1pbl9oZWFkcm9vbSA9IExMX1JFU0VSVkVEX1NQQUNFKGRzdC0+ZGV2KSArIGRzdC0+aGVhZGVyX2xlbgogCQkJKyBWWExBTl9ITEVOICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKQotCQkJKyAodmxhbl90eF90YWdfcHJlc2VudChza2IpID8gVkxBTl9ITEVOIDogMCk7CisJCQkrIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpID8gVkxBTl9ITEVOIDogMCk7CiAKIAkvKiBOZWVkIHNwYWNlIGZvciBuZXcgaGVhZGVycyAoaW52YWxpZGF0ZXMgaXBoIHB0cikgKi8KIAllcnIgPSBza2JfY293X2hlYWQoc2tiLCBtaW5faGVhZHJvb20pOwpAQCAtMTYwNCwxMyArMTczNSwzMyBAQAogCX0KIAogCXZ4aCA9IChzdHJ1Y3QgdnhsYW5oZHIgKikgX19za2JfcHVzaChza2IsIHNpemVvZigqdnhoKSk7Ci0JdnhoLT52eF9mbGFncyA9IGh0b25sKFZYTEFOX0ZMQUdTKTsKLQl2eGgtPnZ4X3ZuaSA9IHZuaTsKKwl2eGgtPnZ4X2ZsYWdzID0gaHRvbmwoVlhMQU5fSEZfVk5JKTsKKwl2eGgtPnZ4X3ZuaSA9IG1kLT52bmk7CisKKwlpZiAodHlwZSAmIFNLQl9HU09fVFVOTkVMX1JFTUNTVU0pIHsKKwkJdTMyIGRhdGEgPSAoc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpIC0gaGRybGVuKSA+PgorCQkJICAgVlhMQU5fUkNPX1NISUZUOworCisJCWlmIChza2ItPmNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSkKKwkJCWRhdGEgfD0gVlhMQU5fUkNPX1VEUDsKKworCQl2eGgtPnZ4X3ZuaSB8PSBodG9ubChkYXRhKTsKKwkJdnhoLT52eF9mbGFncyB8PSBodG9ubChWWExBTl9IRl9SQ08pOworCisJCWlmICghc2tiX2lzX2dzbyhza2IpKSB7CisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQlza2ItPmVuY2Fwc3VsYXRpb24gPSAwOworCQl9CisJfQorCisJaWYgKHZ4ZmxhZ3MgJiBWWExBTl9GX0dCUCkKKwkJdnhsYW5fYnVpbGRfZ2JwX2hkcih2eGgsIHZ4ZmxhZ3MsIG1kKTsKIAogCXNrYl9zZXRfaW5uZXJfcHJvdG9jb2woc2tiLCBodG9ucyhFVEhfUF9URUIpKTsKIAotCXVkcF90dW5uZWw2X3htaXRfc2tiKHZzLT5zb2NrLCBkc3QsIHNrYiwgZGV2LCBzYWRkciwgZGFkZHIsIHByaW8sCi0JCQkgICAgIHR0bCwgc3JjX3BvcnQsIGRzdF9wb3J0KTsKKwl1ZHBfdHVubmVsNl94bWl0X3NrYihkc3QsIHNrYiwgZGV2LCBzYWRkciwgZGFkZHIsIHByaW8sCisJCQkgICAgIHR0bCwgc3JjX3BvcnQsIGRzdF9wb3J0LAorCQkJICAgICAhISh2eGZsYWdzICYgVlhMQU5fRl9VRFBfWkVST19DU1VNNl9UWCkpOwogCXJldHVybiAwOwogZXJyOgogCWRzdF9yZWxlYXNlKGRzdCk7CkBAIC0xNjE4LDIzICsxNzY5LDM4IEBACiB9CiAjZW5kaWYKIAotaW50IHZ4bGFuX3htaXRfc2tiKHN0cnVjdCB2eGxhbl9zb2NrICp2cywKLQkJICAgc3RydWN0IHJ0YWJsZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IsCitpbnQgdnhsYW5feG1pdF9za2Ioc3RydWN0IHJ0YWJsZSAqcnQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsIF9fdTggdG9zLCBfX3U4IHR0bCwgX19iZTE2IGRmLAotCQkgICBfX2JlMTYgc3JjX3BvcnQsIF9fYmUxNiBkc3RfcG9ydCwgX19iZTMyIHZuaSwgYm9vbCB4bmV0KQorCQkgICBfX2JlMTYgc3JjX3BvcnQsIF9fYmUxNiBkc3RfcG9ydCwKKwkJICAgc3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCwgYm9vbCB4bmV0LCB1MzIgdnhmbGFncykKIHsKIAlzdHJ1Y3QgdnhsYW5oZHIgKnZ4aDsKIAlpbnQgbWluX2hlYWRyb29tOwogCWludCBlcnI7Ci0JYm9vbCB1ZHBfc3VtID0gIXZzLT5zb2NrLT5zay0+c2tfbm9fY2hlY2tfdHg7CisJYm9vbCB1ZHBfc3VtID0gISEodnhmbGFncyAmIFZYTEFOX0ZfVURQX0NTVU0pOworCWludCB0eXBlID0gdWRwX3N1bSA/IFNLQl9HU09fVURQX1RVTk5FTF9DU1VNIDogU0tCX0dTT19VRFBfVFVOTkVMOworCXUxNiBoZHJsZW4gPSBzaXplb2Yoc3RydWN0IHZ4bGFuaGRyKTsKIAotCXNrYiA9IHVkcF90dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgdWRwX3N1bSk7CisJaWYgKCh2eGZsYWdzICYgVlhMQU5fRl9SRU1DU1VNX1RYKSAmJgorCSAgICBza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCWludCBjc3VtX3N0YXJ0ID0gc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpOworCisJCWlmIChjc3VtX3N0YXJ0IDw9IFZYTEFOX01BWF9SRU1DU1VNX1NUQVJUICYmCisJCSAgICAhKGNzdW1fc3RhcnQgJiBWWExBTl9SQ09fU0hJRlRfTUFTSykgJiYKKwkJICAgIChza2ItPmNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSB8fAorCQkgICAgIHNrYi0+Y3N1bV9vZmZzZXQgPT0gb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgY2hlY2spKSkgeworCQkJdWRwX3N1bSA9IGZhbHNlOworCQkJdHlwZSB8PSBTS0JfR1NPX1RVTk5FTF9SRU1DU1VNOworCQl9CisJfQorCisJc2tiID0gaXB0dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgdWRwX3N1bSwgdHlwZSk7CiAJaWYgKElTX0VSUihza2IpKQogCQlyZXR1cm4gUFRSX0VSUihza2IpOwogCiAJbWluX2hlYWRyb29tID0gTExfUkVTRVJWRURfU1BBQ0UocnQtPmRzdC5kZXYpICsgcnQtPmRzdC5oZWFkZXJfbGVuCiAJCQkrIFZYTEFOX0hMRU4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKQotCQkJKyAodmxhbl90eF90YWdfcHJlc2VudChza2IpID8gVkxBTl9ITEVOIDogMCk7CisJCQkrIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpID8gVkxBTl9ITEVOIDogMCk7CiAKIAkvKiBOZWVkIHNwYWNlIGZvciBuZXcgaGVhZGVycyAoaW52YWxpZGF0ZXMgaXBoIHB0cikgKi8KIAllcnIgPSBza2JfY293X2hlYWQoc2tiLCBtaW5faGVhZHJvb20pOwpAQCAtMTY0OCwxMyArMTgxNCwzMyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXZ4aCA9IChzdHJ1Y3QgdnhsYW5oZHIgKikgX19za2JfcHVzaChza2IsIHNpemVvZigqdnhoKSk7Ci0JdnhoLT52eF9mbGFncyA9IGh0b25sKFZYTEFOX0ZMQUdTKTsKLQl2eGgtPnZ4X3ZuaSA9IHZuaTsKKwl2eGgtPnZ4X2ZsYWdzID0gaHRvbmwoVlhMQU5fSEZfVk5JKTsKKwl2eGgtPnZ4X3ZuaSA9IG1kLT52bmk7CisKKwlpZiAodHlwZSAmIFNLQl9HU09fVFVOTkVMX1JFTUNTVU0pIHsKKwkJdTMyIGRhdGEgPSAoc2tiX2NoZWNrc3VtX3N0YXJ0X29mZnNldChza2IpIC0gaGRybGVuKSA+PgorCQkJICAgVlhMQU5fUkNPX1NISUZUOworCisJCWlmIChza2ItPmNzdW1fb2Zmc2V0ID09IG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGNoZWNrKSkKKwkJCWRhdGEgfD0gVlhMQU5fUkNPX1VEUDsKKworCQl2eGgtPnZ4X3ZuaSB8PSBodG9ubChkYXRhKTsKKwkJdnhoLT52eF9mbGFncyB8PSBodG9ubChWWExBTl9IRl9SQ08pOworCisJCWlmICghc2tiX2lzX2dzbyhza2IpKSB7CisJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQlza2ItPmVuY2Fwc3VsYXRpb24gPSAwOworCQl9CisJfQorCisJaWYgKHZ4ZmxhZ3MgJiBWWExBTl9GX0dCUCkKKwkJdnhsYW5fYnVpbGRfZ2JwX2hkcih2eGgsIHZ4ZmxhZ3MsIG1kKTsKIAogCXNrYl9zZXRfaW5uZXJfcHJvdG9jb2woc2tiLCBodG9ucyhFVEhfUF9URUIpKTsKIAotCXJldHVybiB1ZHBfdHVubmVsX3htaXRfc2tiKHZzLT5zb2NrLCBydCwgc2tiLCBzcmMsIGRzdCwgdG9zLAotCQkJCSAgIHR0bCwgZGYsIHNyY19wb3J0LCBkc3RfcG9ydCwgeG5ldCk7CisJcmV0dXJuIHVkcF90dW5uZWxfeG1pdF9za2IocnQsIHNrYiwgc3JjLCBkc3QsIHRvcywKKwkJCQkgICB0dGwsIGRmLCBzcmNfcG9ydCwgZHN0X3BvcnQsIHhuZXQsCisJCQkJICAgISh2eGZsYWdzICYgVlhMQU5fRl9VRFBfQ1NVTSkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodnhsYW5feG1pdF9za2IpOwogCkBAIC0xNzExLDYgKzE4OTcsNyBAQAogCWNvbnN0IHN0cnVjdCBpcGhkciAqb2xkX2lwaDsKIAlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAl1bmlvbiB2eGxhbl9hZGRyICpkc3Q7CisJc3RydWN0IHZ4bGFuX21ldGFkYXRhIG1kOwogCV9fYmUxNiBzcmNfcG9ydCA9IDAsIGRzdF9wb3J0OwogCXUzMiB2bmk7CiAJX19iZTE2IGRmID0gMDsKQEAgLTE3NzIsNyArMTk1OSw4IEBACiAKIAkJCWlwX3J0X3B1dChydCk7CiAJCQlkc3RfdnhsYW4gPSB2eGxhbl9maW5kX3ZuaSh2eGxhbi0+bmV0LCB2bmksCi0JCQkJCQkgICBkc3QtPnNhLnNhX2ZhbWlseSwgZHN0X3BvcnQpOworCQkJCQkJICAgZHN0LT5zYS5zYV9mYW1pbHksIGRzdF9wb3J0LAorCQkJCQkJICAgdnhsYW4tPmZsYWdzKTsKIAkJCWlmICghZHN0X3Z4bGFuKQogCQkJCWdvdG8gdHhfZXJyb3I7CiAJCQl2eGxhbl9lbmNhcF9ieXBhc3Moc2tiLCB2eGxhbiwgZHN0X3Z4bGFuKTsKQEAgLTE3ODEsMTIgKzE5NjksMTQgQEAKIAogCQl0b3MgPSBpcF90dW5uZWxfZWNuX2VuY2FwKHRvcywgb2xkX2lwaCwgc2tiKTsKIAkJdHRsID0gdHRsID8gOiBpcDRfZHN0X2hvcGxpbWl0KCZydC0+ZHN0KTsKKwkJbWQudm5pID0gaHRvbmwodm5pIDw8IDgpOworCQltZC5nYnAgPSBza2ItPm1hcms7CiAKLQkJZXJyID0gdnhsYW5feG1pdF9za2IodnhsYW4tPnZuX3NvY2ssIHJ0LCBza2IsCi0JCQkJICAgICBmbDQuc2FkZHIsIGRzdC0+c2luLnNpbl9hZGRyLnNfYWRkciwKLQkJCQkgICAgIHRvcywgdHRsLCBkZiwgc3JjX3BvcnQsIGRzdF9wb3J0LAotCQkJCSAgICAgaHRvbmwodm5pIDw8IDgpLAotCQkJCSAgICAgIW5ldF9lcSh2eGxhbi0+bmV0LCBkZXZfbmV0KHZ4bGFuLT5kZXYpKSk7CisJCWVyciA9IHZ4bGFuX3htaXRfc2tiKHJ0LCBza2IsIGZsNC5zYWRkciwKKwkJCQkgICAgIGRzdC0+c2luLnNpbl9hZGRyLnNfYWRkciwgdG9zLCB0dGwsIGRmLAorCQkJCSAgICAgc3JjX3BvcnQsIGRzdF9wb3J0LCAmbWQsCisJCQkJICAgICAhbmV0X2VxKHZ4bGFuLT5uZXQsIGRldl9uZXQodnhsYW4tPmRldikpLAorCQkJCSAgICAgdnhsYW4tPmZsYWdzKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCS8qIHNrYiBpcyBhbHJlYWR5IGZyZWVkLiAqLwogCQkJc2tiID0gTlVMTDsKQEAgLTE4MzAsNyArMjAyMCw4IEBACiAKIAkJCWRzdF9yZWxlYXNlKG5kc3QpOwogCQkJZHN0X3Z4bGFuID0gdnhsYW5fZmluZF92bmkodnhsYW4tPm5ldCwgdm5pLAotCQkJCQkJICAgZHN0LT5zYS5zYV9mYW1pbHksIGRzdF9wb3J0KTsKKwkJCQkJCSAgIGRzdC0+c2Euc2FfZmFtaWx5LCBkc3RfcG9ydCwKKwkJCQkJCSAgIHZ4bGFuLT5mbGFncyk7CiAJCQlpZiAoIWRzdF92eGxhbikKIAkJCQlnb3RvIHR4X2Vycm9yOwogCQkJdnhsYW5fZW5jYXBfYnlwYXNzKHNrYiwgdnhsYW4sIGRzdF92eGxhbik7CkBAIC0xODM4LDExICsyMDI5LDEzIEBACiAJCX0KIAogCQl0dGwgPSB0dGwgPyA6IGlwNl9kc3RfaG9wbGltaXQobmRzdCk7CisJCW1kLnZuaSA9IGh0b25sKHZuaSA8PCA4KTsKKwkJbWQuZ2JwID0gc2tiLT5tYXJrOwogCi0JCWVyciA9IHZ4bGFuNl94bWl0X3NrYih2eGxhbi0+dm5fc29jaywgbmRzdCwgc2tiLAotCQkJCSAgICAgIGRldiwgJmZsNi5zYWRkciwgJmZsNi5kYWRkciwgMCwgdHRsLAotCQkJCSAgICAgIHNyY19wb3J0LCBkc3RfcG9ydCwgaHRvbmwodm5pIDw8IDgpLAotCQkJCSAgICAgICFuZXRfZXEodnhsYW4tPm5ldCwgZGV2X25ldCh2eGxhbi0+ZGV2KSkpOworCQllcnIgPSB2eGxhbjZfeG1pdF9za2IobmRzdCwgc2tiLCBkZXYsICZmbDYuc2FkZHIsICZmbDYuZGFkZHIsCisJCQkJICAgICAgMCwgdHRsLCBzcmNfcG9ydCwgZHN0X3BvcnQsICZtZCwKKwkJCQkgICAgICAhbmV0X2VxKHZ4bGFuLT5uZXQsIGRldl9uZXQodnhsYW4tPmRldikpLAorCQkJCSAgICAgIHZ4bGFuLT5mbGFncyk7CiAjZW5kaWYKIAl9CiAKQEAgLTE5OTgsNyArMjE5MSw3IEBACiAKIAlzcGluX2xvY2soJnZuLT5zb2NrX2xvY2spOwogCXZzID0gdnhsYW5fZmluZF9zb2NrKHZ4bGFuLT5uZXQsIGlwdjYgPyBBRl9JTkVUNiA6IEFGX0lORVQsCi0JCQkgICAgIHZ4bGFuLT5kc3RfcG9ydCk7CisJCQkgICAgIHZ4bGFuLT5kc3RfcG9ydCwgdnhsYW4tPmZsYWdzKTsKIAlpZiAodnMgJiYgYXRvbWljX2FkZF91bmxlc3MoJnZzLT5yZWZjbnQsIDEsIDApKSB7CiAJCS8qIElmIHdlIGhhdmUgYSBzb2NrZXQgd2l0aCBzYW1lIHBvcnQgYWxyZWFkeSwgcmV1c2UgaXQgKi8KIAkJdnhsYW5fdnNfYWRkX2Rldih2cywgdnhsYW4pOwpAQCAtMjI0Miw2ICsyNDM1LDkgQEAKIAlbSUZMQV9WWExBTl9VRFBfQ1NVTV0JPSB7IC50eXBlID0gTkxBX1U4IH0sCiAJW0lGTEFfVlhMQU5fVURQX1pFUk9fQ1NVTTZfVFhdCT0geyAudHlwZSA9IE5MQV9VOCB9LAogCVtJRkxBX1ZYTEFOX1VEUF9aRVJPX0NTVU02X1JYXQk9IHsgLnR5cGUgPSBOTEFfVTggfSwKKwlbSUZMQV9WWExBTl9SRU1DU1VNX1RYXQk9IHsgLnR5cGUgPSBOTEFfVTggfSwKKwlbSUZMQV9WWExBTl9SRU1DU1VNX1JYXQk9IHsgLnR5cGUgPSBOTEFfVTggfSwKKwlbSUZMQV9WWExBTl9HQlBdCT0geyAudHlwZSA9IE5MQV9GTEFHLCB9LAogfTsKIAogc3RhdGljIGludCB2eGxhbl92YWxpZGF0ZShzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10pCkBAIC0yMzExLDE1ICsyNTA3LDExIEBACiAKIAlpZiAoaXB2NikgewogCQl1ZHBfY29uZi5mYW1pbHkgPSBBRl9JTkVUNjsKLQkJdWRwX2NvbmYudXNlX3VkcDZfdHhfY2hlY2tzdW1zID0KLQkJICAgICEoZmxhZ3MgJiBWWExBTl9GX1VEUF9aRVJPX0NTVU02X1RYKTsKIAkJdWRwX2NvbmYudXNlX3VkcDZfcnhfY2hlY2tzdW1zID0KIAkJICAgICEoZmxhZ3MgJiBWWExBTl9GX1VEUF9aRVJPX0NTVU02X1JYKTsKIAl9IGVsc2UgewogCQl1ZHBfY29uZi5mYW1pbHkgPSBBRl9JTkVUOwogCQl1ZHBfY29uZi5sb2NhbF9pcC5zX2FkZHIgPSBJTkFERFJfQU5ZOwotCQl1ZHBfY29uZi51c2VfdWRwX2NoZWNrc3VtcyA9Ci0JCSAgICAhIShmbGFncyAmIFZYTEFOX0ZfVURQX0NTVU0pOwogCX0KIAogCXVkcF9jb25mLmxvY2FsX3VkcF9wb3J0ID0gcG9ydDsKQEAgLTIzNjMsNiArMjU1NSw3IEBACiAJYXRvbWljX3NldCgmdnMtPnJlZmNudCwgMSk7CiAJdnMtPnJjdiA9IHJjdjsKIAl2cy0+ZGF0YSA9IGRhdGE7CisJdnMtPmZsYWdzID0gKGZsYWdzICYgVlhMQU5fRl9SQ1ZfRkxBR1MpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgdnhsYW4gdWRwIG9mZmxvYWRzIHN0cnVjdHVyZSAqLwogCXZzLT51ZHBfb2ZmbG9hZHMucG9ydCA9IHBvcnQ7CkBAIC0yNDAxLDcgKzI1OTQsNyBAQAogCQlyZXR1cm4gdnM7CiAKIAlzcGluX2xvY2soJnZuLT5zb2NrX2xvY2spOwotCXZzID0gdnhsYW5fZmluZF9zb2NrKG5ldCwgaXB2NiA/IEFGX0lORVQ2IDogQUZfSU5FVCwgcG9ydCk7CisJdnMgPSB2eGxhbl9maW5kX3NvY2sobmV0LCBpcHY2ID8gQUZfSU5FVDYgOiBBRl9JTkVULCBwb3J0LCBmbGFncyk7CiAJaWYgKHZzICYmICgodnMtPnJjdiAhPSByY3YpIHx8CiAJCSAgICFhdG9taWNfYWRkX3VubGVzcygmdnMtPnJlZmNudCwgMSwgMCkpKQogCQkJdnMgPSBFUlJfUFRSKC1FQlVTWSk7CkBAIC0yNDMyLDEwICsyNjI1LDEwIEBACiAJZGV2X3B1dCh2eGxhbi0+ZGV2KTsKIH0KIAotc3RhdGljIGludCB2eGxhbl9uZXdsaW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKK3N0YXRpYyBpbnQgdnhsYW5fbmV3bGluayhzdHJ1Y3QgbmV0ICpzcmNfbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKIHsKLQlzdHJ1Y3QgdnhsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKG5ldCwgdnhsYW5fbmV0X2lkKTsKKwlzdHJ1Y3QgdnhsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKHNyY19uZXQsIHZ4bGFuX25ldF9pZCk7CiAJc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4gPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCB2eGxhbl9yZHN0ICpkc3QgPSAmdnhsYW4tPmRlZmF1bHRfZHN0OwogCV9fdTMyIHZuaTsKQEAgLTI0NDUsNyArMjYzOCw3IEBACiAJaWYgKCFkYXRhW0lGTEFfVlhMQU5fSURdKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXZ4bGFuLT5uZXQgPSBkZXZfbmV0KGRldik7CisJdnhsYW4tPm5ldCA9IHNyY19uZXQ7CiAKIAl2bmkgPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfVlhMQU5fSURdKTsKIAlkc3QtPnJlbW90ZV92bmkgPSB2bmk7CkBAIC0yNDgxLDcgKzI2NzQsNyBAQAogCWlmIChkYXRhW0lGTEFfVlhMQU5fTElOS10gJiYKIAkgICAgKGRzdC0+cmVtb3RlX2lmaW5kZXggPSBubGFfZ2V0X3UzMihkYXRhW0lGTEFfVlhMQU5fTElOS10pKSkgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJkZXYKLQkJCSA9IF9fZGV2X2dldF9ieV9pbmRleChuZXQsIGRzdC0+cmVtb3RlX2lmaW5kZXgpOworCQkJID0gX19kZXZfZ2V0X2J5X2luZGV4KHNyY19uZXQsIGRzdC0+cmVtb3RlX2lmaW5kZXgpOwogCiAJCWlmICghbG93ZXJkZXYpIHsKIAkJCXByX2luZm8oImlmaW5kZXggJWQgZG9lcyBub3QgZXhpc3RcbiIsIGRzdC0+cmVtb3RlX2lmaW5kZXgpOwpAQCAtMjU1Nyw4ICsyNzUwLDE5IEBACiAJICAgIG5sYV9nZXRfdTgoZGF0YVtJRkxBX1ZYTEFOX1VEUF9aRVJPX0NTVU02X1JYXSkpCiAJCXZ4bGFuLT5mbGFncyB8PSBWWExBTl9GX1VEUF9aRVJPX0NTVU02X1JYOwogCi0JaWYgKHZ4bGFuX2ZpbmRfdm5pKG5ldCwgdm5pLCB1c2VfaXB2NiA/IEFGX0lORVQ2IDogQUZfSU5FVCwKLQkJCSAgIHZ4bGFuLT5kc3RfcG9ydCkpIHsKKwlpZiAoZGF0YVtJRkxBX1ZYTEFOX1JFTUNTVU1fVFhdICYmCisJICAgIG5sYV9nZXRfdTgoZGF0YVtJRkxBX1ZYTEFOX1JFTUNTVU1fVFhdKSkKKwkJdnhsYW4tPmZsYWdzIHw9IFZYTEFOX0ZfUkVNQ1NVTV9UWDsKKworCWlmIChkYXRhW0lGTEFfVlhMQU5fUkVNQ1NVTV9SWF0gJiYKKwkgICAgbmxhX2dldF91OChkYXRhW0lGTEFfVlhMQU5fUkVNQ1NVTV9SWF0pKQorCQl2eGxhbi0+ZmxhZ3MgfD0gVlhMQU5fRl9SRU1DU1VNX1JYOworCisJaWYgKGRhdGFbSUZMQV9WWExBTl9HQlBdKQorCQl2eGxhbi0+ZmxhZ3MgfD0gVlhMQU5fRl9HQlA7CisKKwlpZiAodnhsYW5fZmluZF92bmkoc3JjX25ldCwgdm5pLCB1c2VfaXB2NiA/IEFGX0lORVQ2IDogQUZfSU5FVCwKKwkJCSAgIHZ4bGFuLT5kc3RfcG9ydCwgdnhsYW4tPmZsYWdzKSkgewogCQlwcl9pbmZvKCJkdXBsaWNhdGUgVk5JICV1XG4iLCB2bmkpOwogCQlyZXR1cm4gLUVFWElTVDsKIAl9CkBAIC0yNjI1LDYgKzI4MjksOCBAQAogCQlubGFfdG90YWxfc2l6ZShzaXplb2YoX191OCkpICsgLyogSUZMQV9WWExBTl9VRFBfQ1NVTSAqLwogCQlubGFfdG90YWxfc2l6ZShzaXplb2YoX191OCkpICsgLyogSUZMQV9WWExBTl9VRFBfWkVST19DU1VNNl9UWCAqLwogCQlubGFfdG90YWxfc2l6ZShzaXplb2YoX191OCkpICsgLyogSUZMQV9WWExBTl9VRFBfWkVST19DU1VNNl9SWCAqLworCQlubGFfdG90YWxfc2l6ZShzaXplb2YoX191OCkpICsgLyogSUZMQV9WWExBTl9SRU1DU1VNX1RYICovCisJCW5sYV90b3RhbF9zaXplKHNpemVvZihfX3U4KSkgKyAvKiBJRkxBX1ZYTEFOX1JFTUNTVU1fUlggKi8KIAkJMDsKIH0KIApAQCAtMjY5MCwxOCArMjg5NiwzMyBAQAogCSAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9WWExBTl9VRFBfWkVST19DU1VNNl9UWCwKIAkJCSEhKHZ4bGFuLT5mbGFncyAmIFZYTEFOX0ZfVURQX1pFUk9fQ1NVTTZfVFgpKSB8fAogCSAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9WWExBTl9VRFBfWkVST19DU1VNNl9SWCwKLQkJCSEhKHZ4bGFuLT5mbGFncyAmIFZYTEFOX0ZfVURQX1pFUk9fQ1NVTTZfUlgpKSkKKwkJCSEhKHZ4bGFuLT5mbGFncyAmIFZYTEFOX0ZfVURQX1pFUk9fQ1NVTTZfUlgpKSB8fAorCSAgICBubGFfcHV0X3U4KHNrYiwgSUZMQV9WWExBTl9SRU1DU1VNX1RYLAorCQkJISEodnhsYW4tPmZsYWdzICYgVlhMQU5fRl9SRU1DU1VNX1RYKSkgfHwKKwkgICAgbmxhX3B1dF91OChza2IsIElGTEFfVlhMQU5fUkVNQ1NVTV9SWCwKKwkJCSEhKHZ4bGFuLT5mbGFncyAmIFZYTEFOX0ZfUkVNQ1NVTV9SWCkpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCWlmIChubGFfcHV0KHNrYiwgSUZMQV9WWExBTl9QT1JUX1JBTkdFLCBzaXplb2YocG9ydHMpLCAmcG9ydHMpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAorCWlmICh2eGxhbi0+ZmxhZ3MgJiBWWExBTl9GX0dCUCAmJgorCSAgICBubGFfcHV0X2ZsYWcoc2tiLCBJRkxBX1ZYTEFOX0dCUCkpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCiAJcmV0dXJuIDA7CiAKIG5sYV9wdXRfZmFpbHVyZToKIAlyZXR1cm4gLUVNU0dTSVpFOwogfQogCitzdGF0aWMgc3RydWN0IG5ldCAqdnhsYW5fZ2V0X2xpbmtfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHZ4bGFuX2RldiAqdnhsYW4gPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuIHZ4bGFuLT5uZXQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyB2eGxhbl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0gewogCS5raW5kCQk9ICJ2eGxhbiIsCiAJLm1heHR5cGUJPSBJRkxBX1ZYTEFOX01BWCwKQEAgLTI3MTMsNiArMjkzNCw3IEBACiAJLmRlbGxpbmsJPSB2eGxhbl9kZWxsaW5rLAogCS5nZXRfc2l6ZQk9IHZ4bGFuX2dldF9zaXplLAogCS5maWxsX2luZm8JPSB2eGxhbl9maWxsX2luZm8sCisJLmdldF9saW5rX25ldAk9IHZ4bGFuX2dldF9saW5rX25ldCwKIH07CiAKIHN0YXRpYyB2b2lkIHZ4bGFuX2hhbmRsZV9sb3dlcmRldl91bnJlZ2lzdGVyKHN0cnVjdCB2eGxhbl9uZXQgKnZuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL0tjb25maWcgYi9kcml2ZXJzL25ldC93YW4vS2NvbmZpZwppbmRleCA5NGUyMzQ5Li5hMmZkZDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93YW4vS2NvbmZpZwpAQCAtMjUsNyArMjUsNyBAQAogIyBUaGVyZSBpcyBubyB3YXkgdG8gZGV0ZWN0IGEgY29tdHJvbCBzdjExIC0gZm9yY2UgaXQgbW9kdWxhciBmb3Igbm93LgogY29uZmlnIEhPU1RFU1NfU1YxMQogCXRyaXN0YXRlICJDb210cm9sIEhvc3Rlc3MgU1YtMTEgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElTQSAmJiBtICYmIElTQV9ETUFfQVBJICYmIElORVQgJiYgSERMQworCWRlcGVuZHMgb24gSVNBICYmIG0gJiYgSVNBX0RNQV9BUEkgJiYgSU5FVCAmJiBIRExDICYmIFZJUlRfVE9fQlVTCiAJaGVscAogCSAgRHJpdmVyIGZvciBDb210cm9sIEhvc3Rlc3MgU1YtMTEgbmV0d29yayBjYXJkIHdoaWNoCiAJICBvcGVyYXRlcyBvbiBsb3cgc3BlZWQgc3luY2hyb25vdXMgc2VyaWFsIGxpbmtzIGF0IHVwIHRvCkBAIC0zNyw3ICszNyw3IEBACiAjIFRoZSBDT1NBL1NSUCBkcml2ZXIgaGFzIG5vdCBiZWVuIHRlc3RlZCBhcyBub24tbW9kdWxhciB5ZXQuCiBjb25maWcgQ09TQQogCXRyaXN0YXRlICJDT1NBL1NSUCBzeW5jIHNlcmlhbCBib2FyZHMgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElTQSAmJiBtICYmIElTQV9ETUFfQVBJICYmIEhETEMKKwlkZXBlbmRzIG9uIElTQSAmJiBtICYmIElTQV9ETUFfQVBJICYmIEhETEMgJiYgVklSVF9UT19CVVMKIAktLS1oZWxwLS0tCiAJICBEcml2ZXIgZm9yIENPU0EgYW5kIFNSUCBzeW5jaHJvbm91cyBzZXJpYWwgYm9hcmRzLgogCkBAIC04Nyw3ICs4Nyw3IEBACiAjIFRoZXJlIGlzIG5vIHdheSB0byBkZXRlY3QgYSBTZWFsZXZlbCBib2FyZC4gRm9yY2UgaXQgbW9kdWxhcgogY29uZmlnIFNFQUxFVkVMXzQwMjEKIAl0cmlzdGF0ZSAiU2VhbGV2ZWwgU3lzdGVtcyA0MDIxIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJU0EgJiYgbSAmJiBJU0FfRE1BX0FQSSAmJiBJTkVUICYmIEhETEMKKwlkZXBlbmRzIG9uIElTQSAmJiBtICYmIElTQV9ETUFfQVBJICYmIElORVQgJiYgSERMQyAmJiBWSVJUX1RPX0JVUwogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBTZWFsZXZlbCBTeXN0ZW1zIEFDQiA1NiBzZXJpYWwgSS9PIGFkYXB0ZXIuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2FkbTgyMTEuYwppbmRleCAxN2ZjYWFiLi5mMDdhNjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5jCkBAIC0xODM3LDYgKzE4MzcsNyBAQAogCWlmICghcHJpdi0+bWFwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXMgKGFkbTgyMTEpOiBDYW5ub3QgbWFwIGRldmljZSBtZW1vcnlcbiIsCiAJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aC5oCmluZGV4IGNjYmE0ZmUuLjFlZWJlMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoLmgKQEAgLTY0LDYgKzY0LDcgQEAKIAlBVEhfT1BfSFdfUkVTRVQsCiAJQVRIX09QX1NDQU5OSU5HLAogCUFUSF9PUF9NVUxUSV9DSEFOTkVMLAorCUFUSF9PUF9XT1dfRU5BQkxFRCwKIH07CiAKIGVudW0gYXRoX2J1c190eXBlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL01ha2VmaWxlCmluZGV4IDhiMWIxYWQuLmY0ZGJiM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9NYWtlZmlsZQpAQCAtOCwxMSArOCwxNSBAQAogCQkgaHR0X3R4Lm8gXAogCQkgdHhyeC5vIFwKIAkJIHdtaS5vIFwKLQkJIGJtaS5vCisJCSB3bWktdGx2Lm8gXAorCQkgYm1pLm8gXAorCQkgaHcubwogCiBhdGgxMGtfY29yZS0kKENPTkZJR19BVEgxMEtfREVCVUdGUykgKz0gc3BlY3RyYWwubwogYXRoMTBrX2NvcmUtJChDT05GSUdfTkw4MDIxMV9URVNUTU9ERSkgKz0gdGVzdG1vZGUubwogYXRoMTBrX2NvcmUtJChDT05GSUdfQVRIMTBLX1RSQUNJTkcpICs9IHRyYWNlLm8KK2F0aDEwa19jb3JlLSQoQ09ORklHX1RIRVJNQUwpICs9IHRoZXJtYWwubworYXRoMTBrX2NvcmUtJChDT05GSUdfTUFDODAyMTFfREVCVUdGUykgKz0gZGVidWdmc19zdGEubwogCiBvYmotJChDT05GSUdfQVRIMTBLX1BDSSkgKz0gYXRoMTBrX3BjaS5vCiBhdGgxMGtfcGNpLXkgKz0gcGNpLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9jZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9jZS5jCmluZGV4IGExNTZlNmUuLmU1MDhjNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvY2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2NlLmMKQEAgLTgwMyw3ICs4MDMsNyBAQAogCWludCBjZV9pZDsKIAogCWZvciAoY2VfaWQgPSAwOyBjZV9pZCA8IENFX0NPVU5UOyBjZV9pZCsrKSB7Ci0JCXUzMiBjdHJsX2FkZHIgPSBhdGgxMGtfY2VfYmFzZV9hZGRyZXNzKGNlX2lkKTsKKwkJdTMyIGN0cmxfYWRkciA9IGF0aDEwa19jZV9iYXNlX2FkZHJlc3MoYXIsIGNlX2lkKTsKIAogCQlhdGgxMGtfY2VfY29weV9jb21wbGV0ZV9pbnRyX2Rpc2FibGUoYXIsIGN0cmxfYWRkcik7CiAJCWF0aDEwa19jZV9lcnJvcl9pbnRyX2Rpc2FibGUoYXIsIGN0cmxfYWRkcik7CkBAIC04MzIsNyArODMyLDcgQEAKIAlzdHJ1Y3QgYXRoMTBrX3BjaSAqYXJfcGNpID0gYXRoMTBrX3BjaV9wcml2KGFyKTsKIAlzdHJ1Y3QgYXRoMTBrX2NlX3BpcGUgKmNlX3N0YXRlID0gJmFyX3BjaS0+Y2Vfc3RhdGVzW2NlX2lkXTsKIAlzdHJ1Y3QgYXRoMTBrX2NlX3JpbmcgKnNyY19yaW5nID0gY2Vfc3RhdGUtPnNyY19yaW5nOwotCXUzMiBuZW50cmllcywgY3RybF9hZGRyID0gYXRoMTBrX2NlX2Jhc2VfYWRkcmVzcyhjZV9pZCk7CisJdTMyIG5lbnRyaWVzLCBjdHJsX2FkZHIgPSBhdGgxMGtfY2VfYmFzZV9hZGRyZXNzKGFyLCBjZV9pZCk7CiAKIAluZW50cmllcyA9IHJvdW5kdXBfcG93X29mX3R3byhhdHRyLT5zcmNfbmVudHJpZXMpOwogCkBAIC04NjksNyArODY5LDcgQEAKIAlzdHJ1Y3QgYXRoMTBrX3BjaSAqYXJfcGNpID0gYXRoMTBrX3BjaV9wcml2KGFyKTsKIAlzdHJ1Y3QgYXRoMTBrX2NlX3BpcGUgKmNlX3N0YXRlID0gJmFyX3BjaS0+Y2Vfc3RhdGVzW2NlX2lkXTsKIAlzdHJ1Y3QgYXRoMTBrX2NlX3JpbmcgKmRlc3RfcmluZyA9IGNlX3N0YXRlLT5kZXN0X3Jpbmc7Ci0JdTMyIG5lbnRyaWVzLCBjdHJsX2FkZHIgPSBhdGgxMGtfY2VfYmFzZV9hZGRyZXNzKGNlX2lkKTsKKwl1MzIgbmVudHJpZXMsIGN0cmxfYWRkciA9IGF0aDEwa19jZV9iYXNlX2FkZHJlc3MoYXIsIGNlX2lkKTsKIAogCW5lbnRyaWVzID0gcm91bmR1cF9wb3dfb2ZfdHdvKGF0dHItPmRlc3RfbmVudHJpZXMpOwogCkBAIC0xMDUxLDcgKzEwNTEsNyBAQAogCiBzdGF0aWMgdm9pZCBhdGgxMGtfY2VfZGVpbml0X3NyY19yaW5nKHN0cnVjdCBhdGgxMGsgKmFyLCB1bnNpZ25lZCBpbnQgY2VfaWQpCiB7Ci0JdTMyIGN0cmxfYWRkciA9IGF0aDEwa19jZV9iYXNlX2FkZHJlc3MoY2VfaWQpOworCXUzMiBjdHJsX2FkZHIgPSBhdGgxMGtfY2VfYmFzZV9hZGRyZXNzKGFyLCBjZV9pZCk7CiAKIAlhdGgxMGtfY2Vfc3JjX3JpbmdfYmFzZV9hZGRyX3NldChhciwgY3RybF9hZGRyLCAwKTsKIAlhdGgxMGtfY2Vfc3JjX3Jpbmdfc2l6ZV9zZXQoYXIsIGN0cmxfYWRkciwgMCk7CkBAIC0xMDYxLDcgKzEwNjEsNyBAQAogCiBzdGF0aWMgdm9pZCBhdGgxMGtfY2VfZGVpbml0X2Rlc3RfcmluZyhzdHJ1Y3QgYXRoMTBrICphciwgdW5zaWduZWQgaW50IGNlX2lkKQogewotCXUzMiBjdHJsX2FkZHIgPSBhdGgxMGtfY2VfYmFzZV9hZGRyZXNzKGNlX2lkKTsKKwl1MzIgY3RybF9hZGRyID0gYXRoMTBrX2NlX2Jhc2VfYWRkcmVzcyhhciwgY2VfaWQpOwogCiAJYXRoMTBrX2NlX2Rlc3RfcmluZ19iYXNlX2FkZHJfc2V0KGFyLCBjdHJsX2FkZHIsIDApOwogCWF0aDEwa19jZV9kZXN0X3Jpbmdfc2l6ZV9zZXQoYXIsIGN0cmxfYWRkciwgMCk7CkBAIC0xMDkzLDEwICsxMDkzLDEyIEBACiAJCSAgICAgKENFX0hUVF9IMlRfTVNHX1NSQ19ORU5UUklFUyAtIDEpKTsKIAlCVUlMRF9CVUdfT04oMipUQVJHRVRfMTBYX05VTV9NU0RVX0RFU0MgPgogCQkgICAgIChDRV9IVFRfSDJUX01TR19TUkNfTkVOVFJJRVMgLSAxKSk7CisJQlVJTERfQlVHX09OKDIqVEFSR0VUX1RMVl9OVU1fTVNEVV9ERVNDID4KKwkJICAgICAoQ0VfSFRUX0gyVF9NU0dfU1JDX05FTlRSSUVTIC0gMSkpOwogCiAJY2Vfc3RhdGUtPmFyID0gYXI7CiAJY2Vfc3RhdGUtPmlkID0gY2VfaWQ7Ci0JY2Vfc3RhdGUtPmN0cmxfYWRkciA9IGF0aDEwa19jZV9iYXNlX2FkZHJlc3MoY2VfaWQpOworCWNlX3N0YXRlLT5jdHJsX2FkZHIgPSBhdGgxMGtfY2VfYmFzZV9hZGRyZXNzKGFyLCBjZV9pZCk7CiAJY2Vfc3RhdGUtPmF0dHJfZmxhZ3MgPSBhdHRyLT5mbGFnczsKIAljZV9zdGF0ZS0+c3JjX3N6X21heCA9IGF0dHItPnNyY19zel9tYXg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvY2UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvY2UuaAppbmRleCA2MTdhMTUxLi5jMTg2NDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2NlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9jZS5oCkBAIC0zOTQsNyArMzk0LDcgQEAKICNkZWZpbmUgRFNUX1dBVEVSTUFSS19ISUdIX1JFU0VUCQkwCiAjZGVmaW5lIERTVF9XQVRFUk1BUktfQUREUkVTUwkJCTB4MDA1MAogCi1zdGF0aWMgaW5saW5lIHUzMiBhdGgxMGtfY2VfYmFzZV9hZGRyZXNzKHVuc2lnbmVkIGludCBjZV9pZCkKK3N0YXRpYyBpbmxpbmUgdTMyIGF0aDEwa19jZV9iYXNlX2FkZHJlc3Moc3RydWN0IGF0aDEwayAqYXIsIHVuc2lnbmVkIGludCBjZV9pZCkKIHsKIAlyZXR1cm4gQ0UwX0JBU0VfQUREUkVTUyArIChDRTFfQkFTRV9BRERSRVNTIC0gQ0UwX0JBU0VfQUREUkVTUykgKiBjZV9pZDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9jb3JlLmMKaW5kZXggNzc2MjA2MS4uMzEwZTEyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9jb3JlLmMKQEAgLTE3LDYgKzE3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KIAogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJtYWMuaCIKQEAgLTI3LDIwICsyOCwxOCBAQAogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAiaHR0LmgiCiAjaW5jbHVkZSAidGVzdG1vZGUuaCIKKyNpbmNsdWRlICJ3bWktb3BzLmgiCiAKIHVuc2lnbmVkIGludCBhdGgxMGtfZGVidWdfbWFzazsKIHN0YXRpYyBib29sIHVhcnRfcHJpbnQ7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGF0aDEwa19wMnA7CiBzdGF0aWMgYm9vbCBza2lwX290cDsKIAogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX21hc2ssIGF0aDEwa19kZWJ1Z19tYXNrLCB1aW50LCAwNjQ0KTsKIG1vZHVsZV9wYXJhbSh1YXJ0X3ByaW50LCBib29sLCAwNjQ0KTsKLW1vZHVsZV9wYXJhbV9uYW1lZChwMnAsIGF0aDEwa19wMnAsIHVpbnQsIDA2NDQpOwogbW9kdWxlX3BhcmFtKHNraXBfb3RwLCBib29sLCAwNjQ0KTsKIAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1Z19tYXNrLCAiRGVidWdnaW5nIG1hc2siKTsKIE1PRFVMRV9QQVJNX0RFU0ModWFydF9wcmludCwgIlVhcnQgdGFyZ2V0IGRlYnVnZ2luZyIpOwotTU9EVUxFX1BBUk1fREVTQyhwMnAsICJFbmFibGUgYXRoMTBrIFAyUCBzdXBwb3J0Iik7CiBNT0RVTEVfUEFSTV9ERVNDKHNraXBfb3RwLCAiU2tpcCBvdHAgZmFpbHVyZSBmb3IgY2FsaWJyYXRpb24gaW4gdGVzdG1vZGUiKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMGtfaHdfcGFyYW1zIGF0aDEwa19od19wYXJhbXNfbGlzdFtdID0gewpAQCAtNDgsMTEgKzQ3LDU3IEBACiAJCS5pZCA9IFFDQTk4OFhfSFdfMl8wX1ZFUlNJT04sCiAJCS5uYW1lID0gInFjYTk4OHggaHcyLjAiLAogCQkucGF0Y2hfbG9hZF9hZGRyID0gUUNBOTg4WF9IV18yXzBfUEFUQ0hfTE9BRF9BRERSLAorCQkudWFydF9waW4gPSA3LAogCQkuZncgPSB7CiAJCQkuZGlyID0gUUNBOTg4WF9IV18yXzBfRldfRElSLAogCQkJLmZ3ID0gUUNBOTg4WF9IV18yXzBfRldfRklMRSwKIAkJCS5vdHAgPSBRQ0E5ODhYX0hXXzJfMF9PVFBfRklMRSwKIAkJCS5ib2FyZCA9IFFDQTk4OFhfSFdfMl8wX0JPQVJEX0RBVEFfRklMRSwKKwkJCS5ib2FyZF9zaXplID0gUUNBOTg4WF9CT0FSRF9EQVRBX1NaLAorCQkJLmJvYXJkX2V4dF9zaXplID0gUUNBOTg4WF9CT0FSRF9FWFRfREFUQV9TWiwKKwkJfSwKKwl9LAorCXsKKwkJLmlkID0gUUNBNjE3NF9IV18yXzFfVkVSU0lPTiwKKwkJLm5hbWUgPSAicWNhNjE3NCBodzIuMSIsCisJCS5wYXRjaF9sb2FkX2FkZHIgPSBRQ0E2MTc0X0hXXzJfMV9QQVRDSF9MT0FEX0FERFIsCisJCS51YXJ0X3BpbiA9IDYsCisJCS5mdyA9IHsKKwkJCS5kaXIgPSBRQ0E2MTc0X0hXXzJfMV9GV19ESVIsCisJCQkuZncgPSBRQ0E2MTc0X0hXXzJfMV9GV19GSUxFLAorCQkJLm90cCA9IFFDQTYxNzRfSFdfMl8xX09UUF9GSUxFLAorCQkJLmJvYXJkID0gUUNBNjE3NF9IV18yXzFfQk9BUkRfREFUQV9GSUxFLAorCQkJLmJvYXJkX3NpemUgPSBRQ0E2MTc0X0JPQVJEX0RBVEFfU1osCisJCQkuYm9hcmRfZXh0X3NpemUgPSBRQ0E2MTc0X0JPQVJEX0VYVF9EQVRBX1NaLAorCQl9LAorCX0sCisJeworCQkuaWQgPSBRQ0E2MTc0X0hXXzNfMF9WRVJTSU9OLAorCQkubmFtZSA9ICJxY2E2MTc0IGh3My4wIiwKKwkJLnBhdGNoX2xvYWRfYWRkciA9IFFDQTYxNzRfSFdfM18wX1BBVENIX0xPQURfQUREUiwKKwkJLnVhcnRfcGluID0gNiwKKwkJLmZ3ID0geworCQkJLmRpciA9IFFDQTYxNzRfSFdfM18wX0ZXX0RJUiwKKwkJCS5mdyA9IFFDQTYxNzRfSFdfM18wX0ZXX0ZJTEUsCisJCQkub3RwID0gUUNBNjE3NF9IV18zXzBfT1RQX0ZJTEUsCisJCQkuYm9hcmQgPSBRQ0E2MTc0X0hXXzNfMF9CT0FSRF9EQVRBX0ZJTEUsCisJCQkuYm9hcmRfc2l6ZSA9IFFDQTYxNzRfQk9BUkRfREFUQV9TWiwKKwkJCS5ib2FyZF9leHRfc2l6ZSA9IFFDQTYxNzRfQk9BUkRfRVhUX0RBVEFfU1osCisJCX0sCisJfSwKKwl7CisJCS5pZCA9IFFDQTYxNzRfSFdfM18yX1ZFUlNJT04sCisJCS5uYW1lID0gInFjYTYxNzQgaHczLjIiLAorCQkucGF0Y2hfbG9hZF9hZGRyID0gUUNBNjE3NF9IV18zXzBfUEFUQ0hfTE9BRF9BRERSLAorCQkudWFydF9waW4gPSA2LAorCQkuZncgPSB7CisJCQkvKiB1c2VzIHNhbWUgYmluYXJpZXMgYXMgaHczLjAgKi8KKwkJCS5kaXIgPSBRQ0E2MTc0X0hXXzNfMF9GV19ESVIsCisJCQkuZncgPSBRQ0E2MTc0X0hXXzNfMF9GV19GSUxFLAorCQkJLm90cCA9IFFDQTYxNzRfSFdfM18wX09UUF9GSUxFLAorCQkJLmJvYXJkID0gUUNBNjE3NF9IV18zXzBfQk9BUkRfREFUQV9GSUxFLAorCQkJLmJvYXJkX3NpemUgPSBRQ0E2MTc0X0JPQVJEX0RBVEFfU1osCisJCQkuYm9hcmRfZXh0X3NpemUgPSBRQ0E2MTc0X0JPQVJEX0VYVF9EQVRBX1NaLAogCQl9LAogCX0sCiB9OwpAQCAtMTQ2LDggKzE5MSw4IEBACiBzdGF0aWMgaW50IGF0aDEwa19wdXNoX2JvYXJkX2V4dF9kYXRhKHN0cnVjdCBhdGgxMGsgKmFyLCBjb25zdCB2b2lkICpkYXRhLAogCQkJCSAgICAgIHNpemVfdCBkYXRhX2xlbikKIHsKLQl1MzIgYm9hcmRfZGF0YV9zaXplID0gUUNBOTg4WF9CT0FSRF9EQVRBX1NaOwotCXUzMiBib2FyZF9leHRfZGF0YV9zaXplID0gUUNBOTg4WF9CT0FSRF9FWFRfREFUQV9TWjsKKwl1MzIgYm9hcmRfZGF0YV9zaXplID0gYXItPmh3X3BhcmFtcy5mdy5ib2FyZF9zaXplOworCXUzMiBib2FyZF9leHRfZGF0YV9zaXplID0gYXItPmh3X3BhcmFtcy5mdy5ib2FyZF9leHRfc2l6ZTsKIAl1MzIgYm9hcmRfZXh0X2RhdGFfYWRkcjsKIAlpbnQgcmV0OwogCkBAIC0xOTMsNyArMjM4LDcgQEAKIHN0YXRpYyBpbnQgYXRoMTBrX2Rvd25sb2FkX2JvYXJkX2RhdGEoc3RydWN0IGF0aDEwayAqYXIsIGNvbnN0IHZvaWQgKmRhdGEsCiAJCQkJICAgICAgc2l6ZV90IGRhdGFfbGVuKQogewotCXUzMiBib2FyZF9kYXRhX3NpemUgPSBRQ0E5ODhYX0JPQVJEX0RBVEFfU1o7CisJdTMyIGJvYXJkX2RhdGFfc2l6ZSA9IGFyLT5od19wYXJhbXMuZncuYm9hcmRfc2l6ZTsKIAl1MzIgYWRkcmVzczsKIAlpbnQgcmV0OwogCkBAIC0yNDksNiArMjk0LDYzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYXRoMTBrX2Rvd25sb2FkX2NhbF9kdChzdHJ1Y3QgYXRoMTBrICphcikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CisJaW50IGRhdGFfbGVuOworCXZvaWQgKmRhdGE7CisJaW50IHJldDsKKworCW5vZGUgPSBhci0+ZGV2LT5vZl9ub2RlOworCWlmICghbm9kZSkKKwkJLyogRGV2aWNlIFRyZWUgaXMgb3B0aW9uYWwsIGRvbid0IHByaW50IGFueSB3YXJuaW5ncyBpZgorCQkgKiB0aGVyZSdzIG5vIG5vZGUgZm9yIGF0aDEway4KKwkJICovCisJCXJldHVybiAtRU5PRU5UOworCisJaWYgKCFvZl9nZXRfcHJvcGVydHkobm9kZSwgInFjb20sYXRoMTBrLWNhbGlicmF0aW9uLWRhdGEiLAorCQkJICAgICAmZGF0YV9sZW4pKSB7CisJCS8qIFRoZSBjYWxpYnJhdGlvbiBkYXRhIG5vZGUgaXMgb3B0aW9uYWwgKi8KKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJaWYgKGRhdGFfbGVuICE9IFFDQTk4OFhfQ0FMX0RBVEFfTEVOKSB7CisJCWF0aDEwa193YXJuKGFyLCAiaW52YWxpZCBjYWxpYnJhdGlvbiBkYXRhIGxlbmd0aCBpbiBEVDogJWRcbiIsCisJCQkgICAgZGF0YV9sZW4pOworCQlyZXQgPSAtRU1TR1NJWkU7CisJCWdvdG8gb3V0OworCX0KKworCWRhdGEgPSBrbWFsbG9jKGRhdGFfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91OF9hcnJheShub2RlLCAicWNvbSxhdGgxMGstY2FsaWJyYXRpb24tZGF0YSIsCisJCQkJCWRhdGEsIGRhdGFfbGVuKTsKKwlpZiAocmV0KSB7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHJlYWQgY2FsaWJyYXRpb24gZGF0YSBmcm9tIERUOiAlZFxuIiwKKwkJCSAgICByZXQpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXJldCA9IGF0aDEwa19kb3dubG9hZF9ib2FyZF9kYXRhKGFyLCBkYXRhLCBkYXRhX2xlbik7CisJaWYgKHJldCkgeworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBkb3dubG9hZCBjYWxpYnJhdGlvbiBkYXRhIGZyb20gRGV2aWNlIFRyZWU6ICVkXG4iLAorCQkJICAgIHJldCk7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJcmV0ID0gMDsKKworb3V0X2ZyZWU6CisJa2ZyZWUoZGF0YSk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGF0aDEwa19kb3dubG9hZF9hbmRfcnVuX290cChzdHJ1Y3QgYXRoMTBrICphcikKIHsKIAl1MzIgcmVzdWx0LCBhZGRyZXNzID0gYXItPmh3X3BhcmFtcy5wYXRjaF9sb2FkX2FkZHI7CkBAIC00NDcsNyArNTQ5LDcgQEAKIAlpbnQgaWVfaWQsIGksIGluZGV4LCBiaXQsIHJldDsKIAlzdHJ1Y3QgYXRoMTBrX2Z3X2llICpoZHI7CiAJY29uc3QgdTggKmRhdGE7Ci0JX19sZTMyICp0aW1lc3RhbXA7CisJX19sZTMyICp0aW1lc3RhbXAsICp2ZXJzaW9uOwogCiAJLyogZmlyc3QgZmV0Y2ggdGhlIGZpcm13YXJlIGZpbGUgKGZpcm13YXJlLSouYmluKSAqLwogCWFyLT5maXJtd2FyZSA9IGF0aDEwa19mZXRjaF9md19maWxlKGFyLCBhci0+aHdfcGFyYW1zLmZ3LmRpciwgbmFtZSk7CkBAIC01NjIsNiArNjY0LDE3IEBACiAJCQlhci0+b3RwX2xlbiA9IGllX2xlbjsKIAogCQkJYnJlYWs7CisJCWNhc2UgQVRIMTBLX0ZXX0lFX1dNSV9PUF9WRVJTSU9OOgorCQkJaWYgKGllX2xlbiAhPSBzaXplb2YodTMyKSkKKwkJCQlicmVhazsKKworCQkJdmVyc2lvbiA9IChfX2xlMzIgKilkYXRhOworCisJCQlhci0+d21pLm9wX3ZlcnNpb24gPSBsZTMyX3RvX2NwdXAodmVyc2lvbik7CisKKwkJCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfQk9PVCwgImZvdW5kIGZ3IGllIHdtaSBvcCB2ZXJzaW9uICVkXG4iLAorCQkJCSAgIGFyLT53bWkub3BfdmVyc2lvbik7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWF0aDEwa193YXJuKGFyLCAiVW5rbm93biBGVyBJRTogJXVcbiIsCiAJCQkJICAgIGxlMzJfdG9fY3B1KGhkci0+aWQpKTsKQEAgLTU4MiwxMyArNjk1LDYgQEAKIAkJZ290byBlcnI7CiAJfQogCi0JaWYgKHRlc3RfYml0KEFUSDEwS19GV19GRUFUVVJFX1dNSV8xMF8yLCBhci0+ZndfZmVhdHVyZXMpICYmCi0JICAgICF0ZXN0X2JpdChBVEgxMEtfRldfRkVBVFVSRV9XTUlfMTBYLCBhci0+ZndfZmVhdHVyZXMpKSB7Ci0JCWF0aDEwa19lcnIoYXIsICJmZWF0dXJlIGJpdHMgY29ycnVwdGVkOiAxMC4yIGZlYXR1cmUgcmVxdWlyZXMgMTAueCBmZWF0dXJlIHRvIGJlIHNldCBhcyB3ZWxsIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyOwotCX0KLQogCS8qIG5vdyBmZXRjaCB0aGUgYm9hcmQgZmlsZSAqLwogCWlmIChhci0+aHdfcGFyYW1zLmZ3LmJvYXJkID09IE5VTEwpIHsKIAkJYXRoMTBrX2VycihhciwgImJvYXJkIGRhdGEgZmlsZSBub3QgZGVmaW5lZCIpOwpAQCAtNjI0LDYgKzczMCwxMyBAQAogCS8qIGNhbGlicmF0aW9uIGZpbGUgaXMgb3B0aW9uYWwsIGRvbid0IGNoZWNrIGZvciBhbnkgZXJyb3JzICovCiAJYXRoMTBrX2ZldGNoX2NhbF9maWxlKGFyKTsKIAorCWFyLT5md19hcGkgPSA0OworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfQk9PVCwgInRyeWluZyBmdyBhcGkgJWRcbiIsIGFyLT5md19hcGkpOworCisJcmV0ID0gYXRoMTBrX2NvcmVfZmV0Y2hfZmlybXdhcmVfYXBpX24oYXIsIEFUSDEwS19GV19BUEk0X0ZJTEUpOworCWlmIChyZXQgPT0gMCkKKwkJZ290byBzdWNjZXNzOworCiAJYXItPmZ3X2FwaSA9IDM7CiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19CT09ULCAidHJ5aW5nIGZ3IGFwaSAlZFxuIiwgYXItPmZ3X2FwaSk7CiAKQEAgLTY2Miw3ICs3NzUsMTcgQEAKIAl9CiAKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX0JPT1QsCi0JCSAgICJib290IGRpZCBub3QgZmluZCBhIGNhbGlicmF0aW9uIGZpbGUsIHRyeSBPVFAgbmV4dDogJWRcbiIsCisJCSAgICJib290IGRpZCBub3QgZmluZCBhIGNhbGlicmF0aW9uIGZpbGUsIHRyeSBEVCBuZXh0OiAlZFxuIiwKKwkJICAgcmV0KTsKKworCXJldCA9IGF0aDEwa19kb3dubG9hZF9jYWxfZHQoYXIpOworCWlmIChyZXQgPT0gMCkgeworCQlhci0+Y2FsX21vZGUgPSBBVEgxMEtfQ0FMX01PREVfRFQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX0JPT1QsCisJCSAgICJib290IGRpZCBub3QgZmluZCBEVCBlbnRyeSwgdHJ5IE9UUCBuZXh0OiAlZFxuIiwKIAkJICAgcmV0KTsKIAogCXJldCA9IGF0aDEwa19kb3dubG9hZF9hbmRfcnVuX290cChhcik7CkBAIC02OTYsNyArODE5LDcgQEAKIAlpZiAoIXVhcnRfcHJpbnQpCiAJCXJldHVybiAwOwogCi0JcmV0ID0gYXRoMTBrX2JtaV93cml0ZTMyKGFyLCBoaV9kYmdfdWFydF90eHBpbiwgNyk7CisJcmV0ID0gYXRoMTBrX2JtaV93cml0ZTMyKGFyLCBoaV9kYmdfdWFydF90eHBpbiwgYXItPmh3X3BhcmFtcy51YXJ0X3Bpbik7CiAJaWYgKHJldCkgewogCQlhdGgxMGtfd2FybihhciwgImNvdWxkIG5vdCBlbmFibGUgVUFSVCBwcmludHMgKCVkKVxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKQEAgLTc2NCw2ICs4ODcsNyBAQAogCWNvbXBsZXRlX2FsbCgmYXItPm9mZmNoYW5fdHhfY29tcGxldGVkKTsKIAljb21wbGV0ZV9hbGwoJmFyLT5pbnN0YWxsX2tleV9kb25lKTsKIAljb21wbGV0ZV9hbGwoJmFyLT52ZGV2X3NldHVwX2RvbmUpOworCWNvbXBsZXRlX2FsbCgmYXItPnRoZXJtYWwud21pX3N5bmMpOwogCXdha2VfdXAoJmFyLT5odHQuZW1wdHlfdHhfd3EpOwogCXdha2VfdXAoJmFyLT53bWkudHhfY3JlZGl0c193cSk7CiAJd2FrZV91cCgmYXItPnBlZXJfbWFwcGluZ193cSk7CkBAIC03OTksMTUgKzkyMyw2MyBAQAogCW11dGV4X3VubG9jaygmYXItPmNvbmZfbXV0ZXgpOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfY29yZV9pbml0X21heF9zdGFfY291bnQoc3RydWN0IGF0aDEwayAqYXIpCitzdGF0aWMgaW50IGF0aDEwa19jb3JlX2luaXRfZmlybXdhcmVfZmVhdHVyZXMoc3RydWN0IGF0aDEwayAqYXIpCiB7Ci0JaWYgKHRlc3RfYml0KEFUSDEwS19GV19GRUFUVVJFX1dNSV8xMFgsIGFyLT5md19mZWF0dXJlcykpIHsKLQkJYXItPm1heF9udW1fcGVlcnMgPSBUQVJHRVRfMTBYX05VTV9QRUVSUzsKLQkJYXItPm1heF9udW1fc3RhdGlvbnMgPSBUQVJHRVRfMTBYX05VTV9TVEFUSU9OUzsKLQl9IGVsc2UgeworCWlmICh0ZXN0X2JpdChBVEgxMEtfRldfRkVBVFVSRV9XTUlfMTBfMiwgYXItPmZ3X2ZlYXR1cmVzKSAmJgorCSAgICAhdGVzdF9iaXQoQVRIMTBLX0ZXX0ZFQVRVUkVfV01JXzEwWCwgYXItPmZ3X2ZlYXR1cmVzKSkgeworCQlhdGgxMGtfZXJyKGFyLCAiZmVhdHVyZSBiaXRzIGNvcnJ1cHRlZDogMTAuMiBmZWF0dXJlIHJlcXVpcmVzIDEwLnggZmVhdHVyZSB0byBiZSBzZXQgYXMgd2VsbCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoYXItPndtaS5vcF92ZXJzaW9uID49IEFUSDEwS19GV19XTUlfT1BfVkVSU0lPTl9NQVgpIHsKKwkJYXRoMTBrX2VycihhciwgInVuc3VwcG9ydGVkIFdNSSBPUCB2ZXJzaW9uIChtYXggJWQpOiAlZFxuIiwKKwkJCSAgIEFUSDEwS19GV19XTUlfT1BfVkVSU0lPTl9NQVgsIGFyLT53bWkub3BfdmVyc2lvbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBmaXJtd2FyZXMgd2l0aG91dAorCSAqIEFUSDEwS19GV19JRV9XTUlfT1BfVkVSU0lPTi4KKwkgKi8KKwlpZiAoYXItPndtaS5vcF92ZXJzaW9uID09IEFUSDEwS19GV19XTUlfT1BfVkVSU0lPTl9VTlNFVCkgeworCQlpZiAodGVzdF9iaXQoQVRIMTBLX0ZXX0ZFQVRVUkVfV01JXzEwWCwgYXItPmZ3X2ZlYXR1cmVzKSkgeworCQkJaWYgKHRlc3RfYml0KEFUSDEwS19GV19GRUFUVVJFX1dNSV8xMF8yLAorCQkJCSAgICAgYXItPmZ3X2ZlYXR1cmVzKSkKKwkJCQlhci0+d21pLm9wX3ZlcnNpb24gPSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fMTBfMjsKKwkJCWVsc2UKKwkJCQlhci0+d21pLm9wX3ZlcnNpb24gPSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fMTBfMTsKKwkJfSBlbHNlIHsKKwkJCWFyLT53bWkub3BfdmVyc2lvbiA9IEFUSDEwS19GV19XTUlfT1BfVkVSU0lPTl9NQUlOOworCQl9CisJfQorCisJc3dpdGNoIChhci0+d21pLm9wX3ZlcnNpb24pIHsKKwljYXNlIEFUSDEwS19GV19XTUlfT1BfVkVSU0lPTl9NQUlOOgogCQlhci0+bWF4X251bV9wZWVycyA9IFRBUkdFVF9OVU1fUEVFUlM7CiAJCWFyLT5tYXhfbnVtX3N0YXRpb25zID0gVEFSR0VUX05VTV9TVEFUSU9OUzsKKwkJYXItPm1heF9udW1fdmRldnMgPSBUQVJHRVRfTlVNX1ZERVZTOworCQlhci0+aHR0Lm1heF9udW1fcGVuZGluZ190eCA9IFRBUkdFVF9OVU1fTVNEVV9ERVNDOworCQlicmVhazsKKwljYXNlIEFUSDEwS19GV19XTUlfT1BfVkVSU0lPTl8xMF8xOgorCWNhc2UgQVRIMTBLX0ZXX1dNSV9PUF9WRVJTSU9OXzEwXzI6CisJY2FzZSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fMTBfMl80OgorCQlhci0+bWF4X251bV9wZWVycyA9IFRBUkdFVF8xMFhfTlVNX1BFRVJTOworCQlhci0+bWF4X251bV9zdGF0aW9ucyA9IFRBUkdFVF8xMFhfTlVNX1NUQVRJT05TOworCQlhci0+bWF4X251bV92ZGV2cyA9IFRBUkdFVF8xMFhfTlVNX1ZERVZTOworCQlhci0+aHR0Lm1heF9udW1fcGVuZGluZ190eCA9IFRBUkdFVF8xMFhfTlVNX01TRFVfREVTQzsKKwkJYnJlYWs7CisJY2FzZSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fVExWOgorCQlhci0+bWF4X251bV9wZWVycyA9IFRBUkdFVF9UTFZfTlVNX1BFRVJTOworCQlhci0+bWF4X251bV9zdGF0aW9ucyA9IFRBUkdFVF9UTFZfTlVNX1NUQVRJT05TOworCQlhci0+bWF4X251bV92ZGV2cyA9IFRBUkdFVF9UTFZfTlVNX1ZERVZTOworCQlhci0+aHR0Lm1heF9udW1fcGVuZGluZ190eCA9IFRBUkdFVF9UTFZfTlVNX01TRFVfREVTQzsKKwkJYnJlYWs7CisJY2FzZSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fVU5TRVQ6CisJY2FzZSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fTUFYOgorCQlXQVJOX09OKDEpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisKKwlyZXR1cm4gMDsKIH0KIAogaW50IGF0aDEwa19jb3JlX3N0YXJ0KHN0cnVjdCBhdGgxMGsgKmFyLCBlbnVtIGF0aDEwa19maXJtd2FyZV9tb2RlIG1vZGUpCkBAIC05MzIsNiArMTEwNCwxOCBAQAogCQlnb3RvIGVycl9oaWZfc3RvcDsKIAl9CiAKKwkvKiBJZiBmaXJtd2FyZSBpbmRpY2F0ZXMgRnVsbCBSeCBSZW9yZGVyIHN1cHBvcnQgaXQgbXVzdCBiZSB1c2VkIGluIGEKKwkgKiBzbGlnaHRseSBkaWZmZXJlbnQgbWFubmVyLiBMZXQgSFRUIGNvZGUga25vdy4KKwkgKi8KKwlhci0+aHR0LnJ4X3JpbmcuaW5fb3JkX3J4ID0gISEodGVzdF9iaXQoV01JX1NFUlZJQ0VfUlhfRlVMTF9SRU9SREVSLAorCQkJCQkJYXItPndtaS5zdmNfbWFwKSk7CisKKwlzdGF0dXMgPSBhdGgxMGtfaHR0X3J4X3JpbmdfcmVmaWxsKGFyKTsKKwlpZiAoc3RhdHVzKSB7CisJCWF0aDEwa19lcnIoYXIsICJmYWlsZWQgdG8gcmVmaWxsIGh0dCByeCByaW5nOiAlZFxuIiwgc3RhdHVzKTsKKwkJZ290byBlcnJfaGlmX3N0b3A7CisJfQorCiAJLyogd2UgZG9uJ3QgY2FyZSBhYm91dCBIVFQgaW4gVVRGIG1vZGUgKi8KIAlpZiAobW9kZSA9PSBBVEgxMEtfRklSTVdBUkVfTU9ERV9OT1JNQUwpIHsKIAkJc3RhdHVzID0gYXRoMTBrX2h0dF9zZXR1cCgmYXItPmh0dCk7CkBAIC05NDUsMTAgKzExMjksNyBAQAogCWlmIChzdGF0dXMpCiAJCWdvdG8gZXJyX2hpZl9zdG9wOwogCi0JaWYgKHRlc3RfYml0KEFUSDEwS19GV19GRUFUVVJFX1dNSV8xMFgsIGFyLT5md19mZWF0dXJlcykpCi0JCWFyLT5mcmVlX3ZkZXZfbWFwID0gKDFMTCA8PCBUQVJHRVRfMTBYX05VTV9WREVWUykgLSAxOwotCWVsc2UKLQkJYXItPmZyZWVfdmRldl9tYXAgPSAoMUxMIDw8IFRBUkdFVF9OVU1fVkRFVlMpIC0gMTsKKwlhci0+ZnJlZV92ZGV2X21hcCA9ICgxTEwgPDwgYXItPm1heF9udW1fdmRldnMpIC0gMTsKIAogCUlOSVRfTElTVF9IRUFEKCZhci0+YXJ2aWZzKTsKIApAQCAtMTAyNSw4ICsxMjA2LDcgQEAKIAlyZXQgPSBhdGgxMGtfYm1pX2dldF90YXJnZXRfaW5mbyhhciwgJnRhcmdldF9pbmZvKTsKIAlpZiAocmV0KSB7CiAJCWF0aDEwa19lcnIoYXIsICJjb3VsZCBub3QgZ2V0IHRhcmdldCBpbmZvICglZClcbiIsIHJldCk7Ci0JCWF0aDEwa19oaWZfcG93ZXJfZG93bihhcik7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX3Bvd2VyX2Rvd247CiAJfQogCiAJYXItPnRhcmdldF92ZXJzaW9uID0gdGFyZ2V0X2luZm8udmVyc2lvbjsKQEAgLTEwMzUsMjggKzEyMTUsMjggQEAKIAlyZXQgPSBhdGgxMGtfaW5pdF9od19wYXJhbXMoYXIpOwogCWlmIChyZXQpIHsKIAkJYXRoMTBrX2VycihhciwgImNvdWxkIG5vdCBnZXQgaHcgcGFyYW1zICglZClcbiIsIHJldCk7Ci0JCWF0aDEwa19oaWZfcG93ZXJfZG93bihhcik7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX3Bvd2VyX2Rvd247CiAJfQogCiAJcmV0ID0gYXRoMTBrX2NvcmVfZmV0Y2hfZmlybXdhcmVfZmlsZXMoYXIpOwogCWlmIChyZXQpIHsKIAkJYXRoMTBrX2VycihhciwgImNvdWxkIG5vdCBmZXRjaCBmaXJtd2FyZSBmaWxlcyAoJWQpXG4iLCByZXQpOwotCQlhdGgxMGtfaGlmX3Bvd2VyX2Rvd24oYXIpOwotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycl9wb3dlcl9kb3duOwogCX0KIAotCWF0aDEwa19jb3JlX2luaXRfbWF4X3N0YV9jb3VudChhcik7CisJcmV0ID0gYXRoMTBrX2NvcmVfaW5pdF9maXJtd2FyZV9mZWF0dXJlcyhhcik7CisJaWYgKHJldCkgeworCQlhdGgxMGtfZXJyKGFyLCAiZmF0YWwgcHJvYmxlbSB3aXRoIGZpcm13YXJlIGZlYXR1cmVzOiAlZFxuIiwKKwkJCSAgIHJldCk7CisJCWdvdG8gZXJyX2ZyZWVfZmlybXdhcmVfZmlsZXM7CisJfQogCiAJbXV0ZXhfbG9jaygmYXItPmNvbmZfbXV0ZXgpOwogCiAJcmV0ID0gYXRoMTBrX2NvcmVfc3RhcnQoYXIsIEFUSDEwS19GSVJNV0FSRV9NT0RFX05PUk1BTCk7CiAJaWYgKHJldCkgewogCQlhdGgxMGtfZXJyKGFyLCAiY291bGQgbm90IGluaXQgY29yZSAoJWQpXG4iLCByZXQpOwotCQlhdGgxMGtfY29yZV9mcmVlX2Zpcm13YXJlX2ZpbGVzKGFyKTsKLQkJYXRoMTBrX2hpZl9wb3dlcl9kb3duKGFyKTsKLQkJbXV0ZXhfdW5sb2NrKCZhci0+Y29uZl9tdXRleCk7Ci0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX3VubG9jazsKIAl9CiAKIAlhdGgxMGtfcHJpbnRfZHJpdmVyX2luZm8oYXIpOwpAQCAtMTA2NiwzNCArMTI0NiwxNyBAQAogCiAJYXRoMTBrX2hpZl9wb3dlcl9kb3duKGFyKTsKIAlyZXR1cm4gMDsKLX0KIAotc3RhdGljIGludCBhdGgxMGtfY29yZV9jaGVja19jaGlwX2lkKHN0cnVjdCBhdGgxMGsgKmFyKQotewotCXUzMiBod19yZXZpc2lvbiA9IE1TKGFyLT5jaGlwX2lkLCBTT0NfQ0hJUF9JRF9SRVYpOworZXJyX3VubG9jazoKKwltdXRleF91bmxvY2soJmFyLT5jb25mX211dGV4KTsKIAotCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfQk9PVCwgImJvb3QgY2hpcF9pZCAweCUwOHggaHdfcmV2aXNpb24gMHgleFxuIiwKLQkJICAgYXItPmNoaXBfaWQsIGh3X3JldmlzaW9uKTsKK2Vycl9mcmVlX2Zpcm13YXJlX2ZpbGVzOgorCWF0aDEwa19jb3JlX2ZyZWVfZmlybXdhcmVfZmlsZXMoYXIpOwogCi0JLyogQ2hlY2sgdGhhdCB3ZSBhcmUgbm90IHVzaW5nIGh3MS4wIChzb21lIG9mIHRoZW0gaGF2ZSBzYW1lIHBjaSBpZAotCSAqIGFzIGh3Mi4wKSBiZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSBhcyBhdGgxMGsgY3Jhc2hlcyBob3JyaWJseQotCSAqIGR1ZSB0byBtaXNzaW5nIGh3MS4wIHdvcmthcm91bmRzLiAqLwotCXN3aXRjaCAoaHdfcmV2aXNpb24pIHsKLQljYXNlIFFDQTk4OFhfSFdfMV8wX0NISVBfSURfUkVWOgotCQlhdGgxMGtfZXJyKGFyLCAiRVJST1I6IHFjYTk4OHggaHcxLjAgaXMgbm90IHN1cHBvcnRlZFxuIik7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKK2Vycl9wb3dlcl9kb3duOgorCWF0aDEwa19oaWZfcG93ZXJfZG93bihhcik7CiAKLQljYXNlIFFDQTk4OFhfSFdfMl8wX0NISVBfSURfUkVWOgotCQkvKiBrbm93biBoYXJkd2FyZSByZXZpc2lvbiwgY29udGludWUgbm9ybWFsbHkgKi8KLQkJcmV0dXJuIDA7Ci0KLQlkZWZhdWx0OgotCQlhdGgxMGtfd2FybihhciwgIldhcm5pbmc6IGhhcmR3YXJlIHJldmlzaW9uIHVua25vd24gKDB4JXgpLCBleHBlY3QgcHJvYmxlbXNcbiIsCi0JCQkgICAgYXItPmNoaXBfaWQpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBhdGgxMGtfY29yZV9yZWdpc3Rlcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTExMjUsOSArMTI4OCwxOCBAQAogCQlnb3RvIGVycl9kZWJ1Z19kZXN0cm95OwogCX0KIAorCXN0YXR1cyA9IGF0aDEwa190aGVybWFsX3JlZ2lzdGVyKGFyKTsKKwlpZiAoc3RhdHVzKSB7CisJCWF0aDEwa19lcnIoYXIsICJjb3VsZCBub3QgcmVnaXN0ZXIgdGhlcm1hbCBkZXZpY2U6ICVkXG4iLAorCQkJICAgc3RhdHVzKTsKKwkJZ290byBlcnJfc3BlY3RyYWxfZGVzdHJveTsKKwl9CisKIAlzZXRfYml0KEFUSDEwS19GTEFHX0NPUkVfUkVHSVNURVJFRCwgJmFyLT5kZXZfZmxhZ3MpOwogCXJldHVybjsKIAorZXJyX3NwZWN0cmFsX2Rlc3Ryb3k6CisJYXRoMTBrX3NwZWN0cmFsX2Rlc3Ryb3koYXIpOwogZXJyX2RlYnVnX2Rlc3Ryb3k6CiAJYXRoMTBrX2RlYnVnX2Rlc3Ryb3koYXIpOwogZXJyX3VucmVnaXN0ZXJfbWFjOgpAQCAtMTE0MywxNiArMTMxNSw3IEBACiAKIGludCBhdGgxMGtfY29yZV9yZWdpc3RlcihzdHJ1Y3QgYXRoMTBrICphciwgdTMyIGNoaXBfaWQpCiB7Ci0JaW50IHN0YXR1czsKLQogCWFyLT5jaGlwX2lkID0gY2hpcF9pZDsKLQotCXN0YXR1cyA9IGF0aDEwa19jb3JlX2NoZWNrX2NoaXBfaWQoYXIpOwotCWlmIChzdGF0dXMpIHsKLQkJYXRoMTBrX2VycihhciwgIlVuc3VwcG9ydGVkIGNoaXAgaWQgMHglMDh4XG4iLCBhci0+Y2hpcF9pZCk7Ci0JCXJldHVybiBzdGF0dXM7Ci0JfQotCiAJcXVldWVfd29yayhhci0+d29ya3F1ZXVlLCAmYXItPnJlZ2lzdGVyX3dvcmspOwogCiAJcmV0dXJuIDA7CkBAIC0xMTY2LDYgKzEzMjksNyBAQAogCWlmICghdGVzdF9iaXQoQVRIMTBLX0ZMQUdfQ09SRV9SRUdJU1RFUkVELCAmYXItPmRldl9mbGFncykpCiAJCXJldHVybjsKIAorCWF0aDEwa190aGVybWFsX3VucmVnaXN0ZXIoYXIpOwogCS8qIFN0b3Agc3BlY3RyYWwgYmVmb3JlIHVucmVnaXN0ZXJpbmcgZnJvbSBtYWM4MDIxMSB0byByZW1vdmUgdGhlCiAJICogcmVsYXlmcyBkZWJ1Z2ZzIGZpbGUgY2xlYW5seS4gT3RoZXJ3aXNlIHRoZSBwYXJlbnQgZGVidWdmcyB0cmVlCiAJICogd291bGQgYmUgYWxyZWFkeSBiZSBmcmVlJ2QgcmVjdXJzaXZlbHksIGxlYWRpbmcgdG8gYSBkb3VibGUgZnJlZS4KQEAgLTExODcsNiArMTM1MSw3IEBACiAKIHN0cnVjdCBhdGgxMGsgKmF0aDEwa19jb3JlX2NyZWF0ZShzaXplX3QgcHJpdl9zaXplLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICBlbnVtIGF0aDEwa19idXMgYnVzLAorCQkJCSAgZW51bSBhdGgxMGtfaHdfcmV2IGh3X3JldiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBhdGgxMGtfaGlmX29wcyAqaGlmX29wcykKIHsKIAlzdHJ1Y3QgYXRoMTBrICphcjsKQEAgLTExOTgsMTMgKzEzNjMsMjUgQEAKIAogCWFyLT5hdGhfY29tbW9uLnByaXYgPSBhcjsKIAlhci0+YXRoX2NvbW1vbi5odyA9IGFyLT5odzsKLQotCWFyLT5wMnAgPSAhIWF0aDEwa19wMnA7CiAJYXItPmRldiA9IGRldjsKLQorCWFyLT5od19yZXYgPSBod19yZXY7CiAJYXItPmhpZi5vcHMgPSBoaWZfb3BzOwogCWFyLT5oaWYuYnVzID0gYnVzOwogCisJc3dpdGNoIChod19yZXYpIHsKKwljYXNlIEFUSDEwS19IV19RQ0E5ODhYOgorCQlhci0+cmVncyA9ICZxY2E5ODh4X3JlZ3M7CisJCWJyZWFrOworCWNhc2UgQVRIMTBLX0hXX1FDQTYxNzQ6CisJCWFyLT5yZWdzID0gJnFjYTYxNzRfcmVnczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXRoMTBrX2VycihhciwgInVuc3VwcG9ydGVkIGNvcmUgaGFyZHdhcmUgcmV2aXNpb24gJWRcbiIsCisJCQkgICBod19yZXYpOworCQlyZXQgPSAtRU5PVFNVUFA7CisJCWdvdG8gZXJyX2ZyZWVfbWFjOworCX0KKwogCWluaXRfY29tcGxldGlvbigmYXItPnNjYW4uc3RhcnRlZCk7CiAJaW5pdF9jb21wbGV0aW9uKCZhci0+c2Nhbi5jb21wbGV0ZWQpOwogCWluaXRfY29tcGxldGlvbigmYXItPnNjYW4ub25fY2hhbm5lbCk7CkBAIC0xMjEyLDYgKzEzODksNyBAQAogCiAJaW5pdF9jb21wbGV0aW9uKCZhci0+aW5zdGFsbF9rZXlfZG9uZSk7CiAJaW5pdF9jb21wbGV0aW9uKCZhci0+dmRldl9zZXR1cF9kb25lKTsKKwlpbml0X2NvbXBsZXRpb24oJmFyLT50aGVybWFsLndtaV9zeW5jKTsKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZhci0+c2Nhbi50aW1lb3V0LCBhdGgxMGtfc2Nhbl90aW1lb3V0X3dvcmspOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2NvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvY29yZS5oCmluZGV4IDUxNGMyMTkuLmQ2MGU0NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvY29yZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvY29yZS5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiLi4vcmVnZC5oIgogI2luY2x1ZGUgIi4uL2Rmc19wYXR0ZXJuX2RldGVjdG9yLmgiCiAjaW5jbHVkZSAic3BlY3RyYWwuaCIKKyNpbmNsdWRlICJ0aGVybWFsLmgiCiAKICNkZWZpbmUgTVMoX3YsIF9mKSAoKChfdikgJiBfZiMjX01BU0spID4+IF9mIyNfTFNCKQogI2RlZmluZSBTTShfdiwgX2YpICgoKF92KSA8PCBfZiMjX0xTQikgJiBfZiMjX01BU0spCkBAIC05Niw2ICs5NywxMSBAQAogCX0gYmNuOwogfSBfX3BhY2tlZDsKIAorc3RydWN0IGF0aDEwa19za2JfcnhjYiB7CisJZG1hX2FkZHJfdCBwYWRkcjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDsKK307CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF0aDEwa19za2JfY2IgKkFUSDEwS19TS0JfQ0Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBhdGgxMGtfc2tiX2NiKSA+CkBAIC0xMDMsNiArMTA5LDE1IEBACiAJcmV0dXJuIChzdHJ1Y3QgYXRoMTBrX3NrYl9jYiAqKSZJRUVFODAyMTFfU0tCX0NCKHNrYiktPmRyaXZlcl9kYXRhOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhdGgxMGtfc2tiX3J4Y2IgKkFUSDEwS19TS0JfUlhDQihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGF0aDEwa19za2JfcnhjYikgPiBzaXplb2Yoc2tiLT5jYikpOworCXJldHVybiAoc3RydWN0IGF0aDEwa19za2JfcnhjYiAqKXNrYi0+Y2I7Cit9CisKKyNkZWZpbmUgQVRIMTBLX1JYQ0JfU0tCKHJ4Y2IpIFwKKwkJY29udGFpbmVyX29mKCh2b2lkICopcnhjYiwgc3RydWN0IHNrX2J1ZmYsIGNiKQorCiBzdGF0aWMgaW5saW5lIHUzMiBob3N0X2ludGVyZXN0X2l0ZW1fYWRkcmVzcyh1MzIgaXRlbV9vZmZzZXQpCiB7CiAJcmV0dXJuIFFDQTk4OFhfSE9TVF9JTlRFUkVTVF9BRERSRVNTICsgaXRlbV9vZmZzZXQ7CkBAIC0xMjAsNiArMTM1LDcgQEAKIH07CiAKIHN0cnVjdCBhdGgxMGtfd21pIHsKKwllbnVtIGF0aDEwa19md193bWlfb3BfdmVyc2lvbiBvcF92ZXJzaW9uOwogCWVudW0gYXRoMTBrX2h0Y19lcF9pZCBlaWQ7CiAJc3RydWN0IGNvbXBsZXRpb24gc2VydmljZV9yZWFkeTsKIAlzdHJ1Y3QgY29tcGxldGlvbiB1bmlmaWVkX3JlYWR5OwpAQCAtMTI4LDYgKzE0NCw3IEBACiAJc3RydWN0IHdtaV9jbWRfbWFwICpjbWQ7CiAJc3RydWN0IHdtaV92ZGV2X3BhcmFtX21hcCAqdmRldl9wYXJhbTsKIAlzdHJ1Y3Qgd21pX3BkZXZfcGFyYW1fbWFwICpwZGV2X3BhcmFtOworCWNvbnN0IHN0cnVjdCB3bWlfb3BzICpvcHM7CiAKIAl1MzIgbnVtX21lbV9jaHVua3M7CiAJc3RydWN0IGF0aDEwa19tZW1fY2h1bmsgbWVtX2NodW5rc1tXTUlfTUFYX01FTV9SRVFTXTsKQEAgLTIzNiwxMCArMjUzLDIxIEBACiAJdTMyIHNtcHM7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdXBkYXRlX3drOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKKwkvKiBwcm90ZWN0ZWQgYnkgY29uZl9tdXRleCAqLworCWJvb2wgYWdncl9tb2RlOworI2VuZGlmCiB9OwogCiAjZGVmaW5lIEFUSDEwS19WREVWX1NFVFVQX1RJTUVPVVRfSFogKDUqSFopCiAKK2VudW0gYXRoMTBrX2JlYWNvbl9zdGF0ZSB7CisJQVRIMTBLX0JFQUNPTl9TQ0hFRFVMRUQgPSAwLAorCUFUSDEwS19CRUFDT05fU0VORElORywKKwlBVEgxMEtfQkVBQ09OX1NFTlQsCit9OworCiBzdHJ1Y3QgYXRoMTBrX3ZpZiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCkBAIC0yNTAsNyArMjc4LDcgQEAKIAl1MzIgZHRpbV9wZXJpb2Q7CiAJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKIAkvKiBwcm90ZWN0ZWQgYnkgZGF0YV9sb2NrICovCi0JYm9vbCBiZWFjb25fc2VudDsKKwllbnVtIGF0aDEwa19iZWFjb25fc3RhdGUgYmVhY29uX3N0YXRlOwogCXZvaWQgKmJlYWNvbl9idWY7CiAJZG1hX2FkZHJfdCBiZWFjb25fcGFkZHI7CiAKQEAgLTI2MywxMCArMjkxLDggQEAKIAl1MzIgYWlkOwogCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAotCXN0cnVjdCB3b3JrX3N0cnVjdCB3ZXBfa2V5X3dvcms7CiAJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqd2VwX2tleXNbV01JX01BWF9LRVlfSU5ERVggKyAxXTsKLQl1OCBkZWZfd2VwX2tleV9pZHg7Ci0JdTggZGVmX3dlcF9rZXlfbmV3aWR4OworCXM4IGRlZl93ZXBfa2V5X2lkeDsKIAogCXUxNiB0eF9zZXFfbm87CiAKQEAgLTI5Myw2ICszMTksNyBAQAogCWJvb2wgdXNlX2N0c19wcm90OwogCWludCBudW1fbGVnYWN5X3N0YXRpb25zOwogCWludCB0eHBvd2VyOworCXN0cnVjdCB3bWlfd21tX3BhcmFtc19hbGxfYXJnIHdtbV9wYXJhbXM7CiB9OwogCiBzdHJ1Y3QgYXRoMTBrX3ZpZl9pdGVyIHsKQEAgLTMyMyw4ICszNTAsMTAgQEAKIAogCS8qIHByb3RlY3RlZCBieSBjb25mX211dGV4ICovCiAJdTMyIGZ3X2RiZ2xvZ19tYXNrOworCXUzMiBmd19kYmdsb2dfbGV2ZWw7CiAJdTMyIHBrdGxvZ19maWx0ZXI7CiAJdTMyIHJlZ19hZGRyOworCXUzMiBuZl9jYWxfcGVyaW9kOwogCiAJdTggaHR0X21heF9hbXNkdTsKIAl1OCBodHRfbWF4X2FtcGR1OwpAQCAtMzY5LDcgKzM5OCw3IEBACiAJLyogd21pX21nbXRfcnhfaGRyIGNvbnRhaW5zIGV4dHJhIFJTU0kgaW5mb3JtYXRpb24gKi8KIAlBVEgxMEtfRldfRkVBVFVSRV9FWFRfV01JX01HTVRfUlggPSAwLAogCi0JLyogZmlybXdhcmUgZnJvbSAxMFggYnJhbmNoICovCisJLyogRmlybXdhcmUgZnJvbSAxMFggYnJhbmNoLiBEZXByZWNhdGVkLCBkb24ndCB1c2UgaW4gbmV3IGNvZGUuICovCiAJQVRIMTBLX0ZXX0ZFQVRVUkVfV01JXzEwWCA9IDEsCiAKIAkvKiBmaXJtd2FyZSBzdXBwb3J0IHR4IGZyYW1lIG1hbmFnZW1lbnQgb3ZlciBXTUksIG90aGVyd2lzZSBpdCdzIEhUVCAqLwpAQCAtMzc4LDggKzQwNyw5IEBACiAJLyogRmlybXdhcmUgZG9lcyBub3Qgc3VwcG9ydCBQMlAgKi8KIAlBVEgxMEtfRldfRkVBVFVSRV9OT19QMlAgPSAzLAogCi0JLyogRmlybXdhcmUgMTAuMiBmZWF0dXJlIGJpdC4gVGhlIEFUSDEwS19GV19GRUFUVVJFX1dNSV8xMFggZmVhdHVyZSBiaXQKLQkgKiBpcyByZXF1aXJlZCB0byBiZSBzZXQgYXMgd2VsbC4KKwkvKiBGaXJtd2FyZSAxMC4yIGZlYXR1cmUgYml0LiBUaGUgQVRIMTBLX0ZXX0ZFQVRVUkVfV01JXzEwWCBmZWF0dXJlCisJICogYml0IGlzIHJlcXVpcmVkIHRvIGJlIHNldCBhcyB3ZWxsLiBEZXByZWNhdGVkLCBkb24ndCB1c2UgaW4gbmV3CisJICogY29kZS4KIAkgKi8KIAlBVEgxMEtfRldfRkVBVFVSRV9XTUlfMTBfMiA9IDQsCiAKQEAgLTQwMSw2ICs0MzEsNyBAQAogZW51bSBhdGgxMGtfY2FsX21vZGUgewogCUFUSDEwS19DQUxfTU9ERV9GSUxFLAogCUFUSDEwS19DQUxfTU9ERV9PVFAsCisJQVRIMTBLX0NBTF9NT0RFX0RULAogfTsKIAogc3RhdGljIGlubGluZSBjb25zdCBjaGFyICphdGgxMGtfY2FsX21vZGVfc3RyKGVudW0gYXRoMTBrX2NhbF9tb2RlIG1vZGUpCkBAIC00MTAsNiArNDQxLDggQEAKIAkJcmV0dXJuICJmaWxlIjsKIAljYXNlIEFUSDEwS19DQUxfTU9ERV9PVFA6CiAJCXJldHVybiAib3RwIjsKKwljYXNlIEFUSDEwS19DQUxfTU9ERV9EVDoKKwkJcmV0dXJuICJkdCI7CiAJfQogCiAJcmV0dXJuICJ1bmtub3duIjsKQEAgLTQ0NCw2ICs0NzcsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CiAKKwllbnVtIGF0aDEwa19od19yZXYgaHdfcmV2OwogCXUzMiBjaGlwX2lkOwogCXUzMiB0YXJnZXRfdmVyc2lvbjsKIAl1OCBmd192ZXJzaW9uX21ham9yOwpAQCAtNDU5LDkgKzQ5Myw2IEBACiAKIAlERUNMQVJFX0JJVE1BUChmd19mZWF0dXJlcywgQVRIMTBLX0ZXX0ZFQVRVUkVfQ09VTlQpOwogCi0Jc3RydWN0IHRhcmdldGRlZiAqdGFyZ2V0ZGVmOwotCXN0cnVjdCBob3N0ZGVmICpob3N0ZGVmOwotCiAJYm9vbCBwMnA7CiAKIAlzdHJ1Y3QgewpAQCAtNDcxLDYgKzUwMiw3IEBACiAKIAlzdHJ1Y3QgY29tcGxldGlvbiB0YXJnZXRfc3VzcGVuZDsKIAorCWNvbnN0IHN0cnVjdCBhdGgxMGtfaHdfcmVncyAqcmVnczsKIAlzdHJ1Y3QgYXRoMTBrX2JtaSBibWk7CiAJc3RydWN0IGF0aDEwa193bWkgd21pOwogCXN0cnVjdCBhdGgxMGtfaHRjIGh0YzsKQEAgLTQ4MCwxMiArNTEyLDE1IEBACiAJCXUzMiBpZDsKIAkJY29uc3QgY2hhciAqbmFtZTsKIAkJdTMyIHBhdGNoX2xvYWRfYWRkcjsKKwkJaW50IHVhcnRfcGluOwogCiAJCXN0cnVjdCBhdGgxMGtfaHdfcGFyYW1zX2Z3IHsKIAkJCWNvbnN0IGNoYXIgKmRpcjsKIAkJCWNvbnN0IGNoYXIgKmZ3OwogCQkJY29uc3QgY2hhciAqb3RwOwogCQkJY29uc3QgY2hhciAqYm9hcmQ7CisJCQlzaXplX3QgYm9hcmRfc2l6ZTsKKwkJCXNpemVfdCBib2FyZF9leHRfc2l6ZTsKIAkJfSBmdzsKIAl9IGh3X3BhcmFtczsKIApAQCAtNTQ4LDcgKzU4Myw2IEBACiAJdTggY2ZnX3R4X2NoYWlubWFzazsKIAl1OCBjZmdfcnhfY2hhaW5tYXNrOwogCi0Jc3RydWN0IHdtaV9wZGV2X3NldF93bW1fcGFyYW1zX2FyZyB3bW1fcGFyYW1zOwogCXN0cnVjdCBjb21wbGV0aW9uIGluc3RhbGxfa2V5X2RvbmU7CiAKIAlzdHJ1Y3QgY29tcGxldGlvbiB2ZGV2X3NldHVwX2RvbmU7CkBAIC01NzEsNiArNjA1LDcgQEAKIAogCWludCBtYXhfbnVtX3BlZXJzOwogCWludCBtYXhfbnVtX3N0YXRpb25zOworCWludCBtYXhfbnVtX3ZkZXZzOwogCiAJc3RydWN0IHdvcmtfc3RydWN0IG9mZmNoYW5fdHhfd29yazsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIG9mZmNoYW5fdHhfcXVldWU7CkBAIC02MTAsNiArNjQ1LDcgQEAKIAkJLyogcHJvdGVjdGVkIGJ5IGNvbmZfbXV0ZXggKi8KIAkJY29uc3Qgc3RydWN0IGZpcm13YXJlICp1dGY7CiAJCURFQ0xBUkVfQklUTUFQKG9yaWdfZndfZmVhdHVyZXMsIEFUSDEwS19GV19GRUFUVVJFX0NPVU5UKTsKKwkJZW51bSBhdGgxMGtfZndfd21pX29wX3ZlcnNpb24gb3JpZ193bWlfb3BfdmVyc2lvbjsKIAogCQkvKiBwcm90ZWN0ZWQgYnkgZGF0YV9sb2NrICovCiAJCWJvb2wgdXRmX21vbml0b3I7CkBAIC02MjIsMTIgKzY1OCwxNSBAQAogCQl1MzIgZndfY29sZF9yZXNldF9jb3VudGVyOwogCX0gc3RhdHM7CiAKKwlzdHJ1Y3QgYXRoMTBrX3RoZXJtYWwgdGhlcm1hbDsKKwogCS8qIG11c3QgYmUgbGFzdCAqLwogCXU4IGRydl9wcml2WzBdIF9fYWxpZ25lZChzaXplb2Yodm9pZCAqKSk7CiB9OwogCiBzdHJ1Y3QgYXRoMTBrICphdGgxMGtfY29yZV9jcmVhdGUoc2l6ZV90IHByaXZfc2l6ZSwgc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgZW51bSBhdGgxMGtfYnVzIGJ1cywKKwkJCQkgIGVudW0gYXRoMTBrX2h3X3JldiBod19yZXYsCiAJCQkJICBjb25zdCBzdHJ1Y3QgYXRoMTBrX2hpZl9vcHMgKmhpZl9vcHMpOwogdm9pZCBhdGgxMGtfY29yZV9kZXN0cm95KHN0cnVjdCBhdGgxMGsgKmFyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9kZWJ1Zy5jCmluZGV4IGE3MTY3NTguLmQyMjgxZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvZGVidWcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2RlYnVnLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJjb3JlLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJoaWYuaCIKKyNpbmNsdWRlICJ3bWktb3BzLmgiCiAKIC8qIG1zICovCiAjZGVmaW5lIEFUSDEwS19ERUJVR19IVFRfU1RBVFNfSU5URVJWQUwgMTAwMApAQCAtMTIzLDcgKzEyNCw3IEBACiAKIHZvaWQgYXRoMTBrX3ByaW50X2RyaXZlcl9pbmZvKHN0cnVjdCBhdGgxMGsgKmFyKQogewotCWF0aDEwa19pbmZvKGFyLCAiJXMgKDB4JTA4eCwgMHglMDh4KSBmdyAlcyBhcGkgJWQgaHR0ICVkLiVkIHdtaSAlZC4lZC4lZC4lZCBjYWwgJXMgbWF4X3N0YSAlZFxuIiwKKwlhdGgxMGtfaW5mbyhhciwgIiVzICgweCUwOHgsIDB4JTA4eCkgZncgJXMgYXBpICVkIGh0dCAlZC4lZCB3bWkgJWQgY2FsICVzIG1heF9zdGEgJWRcbiIsCiAJCSAgICBhci0+aHdfcGFyYW1zLm5hbWUsCiAJCSAgICBhci0+dGFyZ2V0X3ZlcnNpb24sCiAJCSAgICBhci0+Y2hpcF9pZCwKQEAgLTEzMSwxMCArMTMyLDcgQEAKIAkJICAgIGFyLT5md19hcGksCiAJCSAgICBhci0+aHR0LnRhcmdldF92ZXJzaW9uX21ham9yLAogCQkgICAgYXItPmh0dC50YXJnZXRfdmVyc2lvbl9taW5vciwKLQkJICAgIGFyLT5md192ZXJzaW9uX21ham9yLAotCQkgICAgYXItPmZ3X3ZlcnNpb25fbWlub3IsCi0JCSAgICBhci0+ZndfdmVyc2lvbl9yZWxlYXNlLAotCQkgICAgYXItPmZ3X3ZlcnNpb25fYnVpbGQsCisJCSAgICBhci0+d21pLm9wX3ZlcnNpb24sCiAJCSAgICBhdGgxMGtfY2FsX21vZGVfc3RyKGFyLT5jYWxfbW9kZSksCiAJCSAgICBhci0+bWF4X251bV9zdGF0aW9ucyk7CiAJYXRoMTBrX2luZm8oYXIsICJkZWJ1ZyAlZCBkZWJ1Z2ZzICVkIHRyYWNpbmcgJWQgZGZzICVkIHRlc3Rtb2RlICVkXG4iLApAQCAtMzczLDcgKzM3MSw3IEBACiAKIAkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhci0+ZGVidWcuZndfc3RhdHNfY29tcGxldGUsCiAJCQkJCQkgIDEqSFopOwotCQlpZiAocmV0IDw9IDApCisJCWlmIChyZXQgPT0gMCkKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCiAJCXNwaW5fbG9ja19iaCgmYXItPmRhdGFfbG9jayk7CkBAIC0xMzIwLDEwICsxMzE4LDEwIEBACiB7CiAJc3RydWN0IGF0aDEwayAqYXIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IGxlbjsKLQljaGFyIGJ1ZlszMl07CisJY2hhciBidWZbNjRdOwogCi0JbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIweCUwOHhcbiIsCi0JCQlhci0+ZGVidWcuZndfZGJnbG9nX21hc2spOworCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiMHglMDh4ICV1XG4iLAorCQkJYXItPmRlYnVnLmZ3X2RiZ2xvZ19tYXNrLCBhci0+ZGVidWcuZndfZGJnbG9nX2xldmVsKTsKIAogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKIH0KQEAgLTEzMzMsMTkgKzEzMzEsMzIgQEAKIAkJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgYXRoMTBrICphciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBsb25nIG1hc2s7CiAJaW50IHJldDsKKwljaGFyIGJ1Zls2NF07CisJdW5zaWduZWQgaW50IGxvZ19sZXZlbCwgbWFzazsKIAotCXJldCA9IGtzdHJ0b3VsX2Zyb21fdXNlcih1c2VyX2J1ZiwgY291bnQsIDAsICZtYXNrKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCXNpbXBsZV93cml0ZV90b19idWZmZXIoYnVmLCBzaXplb2YoYnVmKSAtIDEsIHBwb3MsIHVzZXJfYnVmLCBjb3VudCk7CisKKwkvKiBtYWtlIHN1cmUgdGhhdCBidWYgaXMgbnVsbCB0ZXJtaW5hdGVkICovCisJYnVmW3NpemVvZihidWYpIC0gMV0gPSAwOworCisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV4ICV1IiwgJm1hc2ssICZsb2dfbGV2ZWwpOworCisJaWYgKCFyZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHJldCA9PSAxKQorCQkvKiBkZWZhdWx0IGlmIHVzZXIgZGlkIG5vdCBzcGVjaWZ5ICovCisJCWxvZ19sZXZlbCA9IEFUSDEwS19EQkdMT0dfTEVWRUxfV0FSTjsKIAogCW11dGV4X2xvY2soJmFyLT5jb25mX211dGV4KTsKIAogCWFyLT5kZWJ1Zy5md19kYmdsb2dfbWFzayA9IG1hc2s7CisJYXItPmRlYnVnLmZ3X2RiZ2xvZ19sZXZlbCA9IGxvZ19sZXZlbDsKIAogCWlmIChhci0+c3RhdGUgPT0gQVRIMTBLX1NUQVRFX09OKSB7Ci0JCXJldCA9IGF0aDEwa193bWlfZGJnbG9nX2NmZyhhciwgYXItPmRlYnVnLmZ3X2RiZ2xvZ19tYXNrKTsKKwkJcmV0ID0gYXRoMTBrX3dtaV9kYmdsb2dfY2ZnKGFyLCBhci0+ZGVidWcuZndfZGJnbG9nX21hc2ssCisJCQkJCSAgICBhci0+ZGVidWcuZndfZGJnbG9nX2xldmVsKTsKIAkJaWYgKHJldCkgewogCQkJYXRoMTBrX3dhcm4oYXIsICJkYmdsb2cgY2ZnIGZhaWxlZCBmcm9tIGRlYnVnZnM6ICVkXG4iLAogCQkJCSAgICByZXQpOwpAQCAtMTYwNyw2ICsxNjE4LDczIEBACiAJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAogfTsKIAorc3RhdGljIHNzaXplX3QgYXRoMTBrX3JlYWRfbmZfY2FsX3BlcmlvZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGgxMGsgKmFyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGludCBsZW47CisJY2hhciBidWZbMzJdOworCisJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZFxuIiwKKwkJCWFyLT5kZWJ1Zy5uZl9jYWxfcGVyaW9kKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHNzaXplX3QgYXRoMTBrX3dyaXRlX25mX2NhbF9wZXJpb2Qoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhdGgxMGsgKmFyID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgcGVyaW9kOworCWludCByZXQ7CisKKwlyZXQgPSBrc3RydG91bF9mcm9tX3VzZXIodXNlcl9idWYsIGNvdW50LCAwLCAmcGVyaW9kKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHBlcmlvZCA+IFdNSV9QREVWX1BBUkFNX0NBTF9QRVJJT0RfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHRoZXJlJ3Mgbm8gd2F5IHRvIHN3aXRjaCBiYWNrIHRvIHRoZSBmaXJtd2FyZSBkZWZhdWx0ICovCisJaWYgKHBlcmlvZCA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmFyLT5jb25mX211dGV4KTsKKworCWFyLT5kZWJ1Zy5uZl9jYWxfcGVyaW9kID0gcGVyaW9kOworCisJaWYgKGFyLT5zdGF0ZSAhPSBBVEgxMEtfU1RBVEVfT04pIHsKKwkJLyogZmlybXdhcmUgaXMgbm90IHJ1bm5pbmcsIG5vdGhpbmcgZWxzZSB0byBkbyAqLworCQlyZXQgPSBjb3VudDsKKwkJZ290byBleGl0OworCX0KKworCXJldCA9IGF0aDEwa193bWlfcGRldl9zZXRfcGFyYW0oYXIsIGFyLT53bWkucGRldl9wYXJhbS0+Y2FsX3BlcmlvZCwKKwkJCQkJYXItPmRlYnVnLm5mX2NhbF9wZXJpb2QpOworCWlmIChyZXQpIHsKKwkJYXRoMTBrX3dhcm4oYXIsICJjYWwgcGVyaW9kIGNmZyBmYWlsZWQgZnJvbSBkZWJ1Z2ZzOiAlZFxuIiwKKwkJCSAgICByZXQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJcmV0ID0gY291bnQ7CisKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZhci0+Y29uZl9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX25mX2NhbF9wZXJpb2QgPSB7CisJLnJlYWQgPSBhdGgxMGtfcmVhZF9uZl9jYWxfcGVyaW9kLAorCS53cml0ZSA9IGF0aDEwa193cml0ZV9uZl9jYWxfcGVyaW9kLAorCS5vcGVuID0gc2ltcGxlX29wZW4sCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAorfTsKKwogaW50IGF0aDEwa19kZWJ1Z19zdGFydChzdHJ1Y3QgYXRoMTBrICphcikKIHsKIAlpbnQgcmV0OwpAQCAtMTYyMCw3ICsxNjk4LDggQEAKIAkJCSAgICByZXQpOwogCiAJaWYgKGFyLT5kZWJ1Zy5md19kYmdsb2dfbWFzaykgewotCQlyZXQgPSBhdGgxMGtfd21pX2RiZ2xvZ19jZmcoYXIsIGFyLT5kZWJ1Zy5md19kYmdsb2dfbWFzayk7CisJCXJldCA9IGF0aDEwa193bWlfZGJnbG9nX2NmZyhhciwgYXItPmRlYnVnLmZ3X2RiZ2xvZ19tYXNrLAorCQkJCQkgICAgQVRIMTBLX0RCR0xPR19MRVZFTF9XQVJOKTsKIAkJaWYgKHJldCkKIAkJCS8qIG5vdCBzZXJpb3VzICovCiAJCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBlbmFibGUgZGJnbG9nIGR1cmluZyBzdGFydDogJWQiLApAQCAtMTY0Miw2ICsxNzIxLDE2IEBACiAJCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBkaXNhYmxlIHBrdGxvZzogJWRcbiIsIHJldCk7CiAJfQogCisJaWYgKGFyLT5kZWJ1Zy5uZl9jYWxfcGVyaW9kKSB7CisJCXJldCA9IGF0aDEwa193bWlfcGRldl9zZXRfcGFyYW0oYXIsCisJCQkJCQlhci0+d21pLnBkZXZfcGFyYW0tPmNhbF9wZXJpb2QsCisJCQkJCQlhci0+ZGVidWcubmZfY2FsX3BlcmlvZCk7CisJCWlmIChyZXQpCisJCQkvKiBub3Qgc2VyaW91cyAqLworCQkJYXRoMTBrX3dhcm4oYXIsICJjYWwgcGVyaW9kIGNmZyBmYWlsZWQgZnJvbSBkZWJ1ZyBzdGFydDogJWRcbiIsCisJCQkJICAgIHJldCk7CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTg4MCw2ICsxOTY5LDkgQEAKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjYWxfZGF0YSIsIFNfSVJVU1IsIGFyLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKIAkJCSAgICBhciwgJmZvcHNfY2FsX2RhdGEpOwogCisJZGVidWdmc19jcmVhdGVfZmlsZSgibmZfY2FsX3BlcmlvZCIsIFNfSVJVU1IgfCBTX0lXVVNSLAorCQkJICAgIGFyLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgYXIsICZmb3BzX25mX2NhbF9wZXJpb2QpOworCiAJaWYgKGNvbmZpZ19lbmFibGVkKENPTkZJR19BVEgxMEtfREZTX0NFUlRJRklFRCkpIHsKIAkJZGVidWdmc19jcmVhdGVfZmlsZSgiZGZzX3NpbXVsYXRlX3JhZGFyIiwgU19JV1VTUiwKIAkJCQkgICAgYXItPmRlYnVnLmRlYnVnZnNfcGh5LCBhciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvZGVidWcuaAppbmRleCAxYjg3YTVkLi5hMTJiODMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2RlYnVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9kZWJ1Zy5oCkBAIC00OCw2ICs0OCwxMiBAQAogCUFUSDEwS19QS1RMT0dfQU5ZICAgICAgICA9IDB4MDAwMDAwMDFmLAogfTsKIAorZW51bSBhdGgxMGtfZGJnX2FnZ3JfbW9kZSB7CisJQVRIMTBLX0RCR19BR0dSX01PREVfQVVUTywKKwlBVEgxMEtfREJHX0FHR1JfTU9ERV9NQU5VQUwsCisJQVRIMTBLX0RCR19BR0dSX01PREVfTUFYLAorfTsKKwogZXh0ZXJuIHVuc2lnbmVkIGludCBhdGgxMGtfZGVidWdfbWFzazsKIAogX19wcmludGYoMiwgMykgdm9pZCBhdGgxMGtfaW5mbyhzdHJ1Y3QgYXRoMTBrICphciwgY29uc3QgY2hhciAqZm10LCAuLi4pOwpAQCAtNzcsNyArODMsNiBAQAogdm9pZCBhdGgxMGtfZGVidWdfZ2V0X2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpOwotCiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgYXRoMTBrX2RlYnVnX3N0YXJ0KHN0cnVjdCBhdGgxMGsgKmFyKQogewpAQCAtMTI5LDYgKzEzNCwxMCBAQAogI2RlZmluZSBhdGgxMGtfZGVidWdfZ2V0X2V0X3N0YXRzIE5VTEwKIAogI2VuZGlmIC8qIENPTkZJR19BVEgxMEtfREVCVUdGUyAqLworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCit2b2lkIGF0aDEwa19zdGFfYWRkX2RlYnVnZnMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgc3RydWN0IGRlbnRyeSAqZGlyKTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfREVCVUdGUyAqLwogCiAjaWZkZWYgQ09ORklHX0FUSDEwS19ERUJVRwogX19wcmludGYoMywgNCkgdm9pZCBhdGgxMGtfZGJnKHN0cnVjdCBhdGgxMGsgKmFyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9kZWJ1Z2ZzX3N0YS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9kZWJ1Z2ZzX3N0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YjVjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2RlYnVnZnNfc3RhLmMKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgUXVhbGNvbW0gQXRoZXJvcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAid21pLW9wcy5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisKK3N0YXRpYyBzc2l6ZV90IGF0aDEwa19kYmdfc3RhX3JlYWRfYWdncl9tb2RlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICAgIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdGgxMGtfc3RhICphcnN0YSA9IChzdHJ1Y3QgYXRoMTBrX3N0YSAqKXN0YS0+ZHJ2X3ByaXY7CisJc3RydWN0IGF0aDEwayAqYXIgPSBhcnN0YS0+YXJ2aWYtPmFyOworCWNoYXIgYnVmWzMyXTsKKwlpbnQgbGVuID0gMDsKKworCW11dGV4X2xvY2soJmFyLT5jb25mX211dGV4KTsKKwlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSAtIGxlbiwgImFnZ3JlZ2F0aW9uIG1vZGU6ICVzXG4iLAorCQkJKGFyc3RhLT5hZ2dyX21vZGUgPT0gQVRIMTBLX0RCR19BR0dSX01PREVfQVVUTykgPworCQkJImF1dG8iIDogIm1hbnVhbCIpOworCW11dGV4X3VubG9jaygmYXItPmNvbmZfbXV0ZXgpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3NpemVfdCBhdGgxMGtfZGJnX3N0YV93cml0ZV9hZ2dyX21vZGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRoMTBrX3N0YSAqYXJzdGEgPSAoc3RydWN0IGF0aDEwa19zdGEgKilzdGEtPmRydl9wcml2OworCXN0cnVjdCBhdGgxMGsgKmFyID0gYXJzdGEtPmFydmlmLT5hcjsKKwl1MzIgYWdncl9tb2RlOworCWludCByZXQ7CisKKwlpZiAoa3N0cnRvdWludF9mcm9tX3VzZXIodXNlcl9idWYsIGNvdW50LCAwLCAmYWdncl9tb2RlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYWdncl9tb2RlID49IEFUSDEwS19EQkdfQUdHUl9NT0RFX01BWCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZhci0+Y29uZl9tdXRleCk7CisJaWYgKChhci0+c3RhdGUgIT0gQVRIMTBLX1NUQVRFX09OKSB8fAorCSAgICAoYWdncl9tb2RlID09IGFyc3RhLT5hZ2dyX21vZGUpKSB7CisJCXJldCA9IGNvdW50OworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBhdGgxMGtfd21pX2FkZGJhX2NsZWFyX3Jlc3AoYXIsIGFyc3RhLT5hcnZpZi0+dmRldl9pZCwgc3RhLT5hZGRyKTsKKwlpZiAocmV0KSB7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIGNsZWFyIGFkZGJhIHNlc3Npb24gcmV0OiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJYXJzdGEtPmFnZ3JfbW9kZSA9IGFnZ3JfbW9kZTsKK291dDoKKwltdXRleF91bmxvY2soJmFyLT5jb25mX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX2FnZ3JfbW9kZSA9IHsKKwkucmVhZCA9IGF0aDEwa19kYmdfc3RhX3JlYWRfYWdncl9tb2RlLAorCS53cml0ZSA9IGF0aDEwa19kYmdfc3RhX3dyaXRlX2FnZ3JfbW9kZSwKKwkub3BlbiA9IHNpbXBsZV9vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRpYyBzc2l6ZV90IGF0aDEwa19kYmdfc3RhX3dyaXRlX2FkZGJhKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdGgxMGtfc3RhICphcnN0YSA9IChzdHJ1Y3QgYXRoMTBrX3N0YSAqKXN0YS0+ZHJ2X3ByaXY7CisJc3RydWN0IGF0aDEwayAqYXIgPSBhcnN0YS0+YXJ2aWYtPmFyOworCXUzMiB0aWQsIGJ1Zl9zaXplOworCWludCByZXQ7CisJY2hhciBidWZbNjRdOworCisJc2ltcGxlX3dyaXRlX3RvX2J1ZmZlcihidWYsIHNpemVvZihidWYpIC0gMSwgcHBvcywgdXNlcl9idWYsIGNvdW50KTsKKworCS8qIG1ha2Ugc3VyZSB0aGF0IGJ1ZiBpcyBudWxsIHRlcm1pbmF0ZWQgKi8KKwlidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9ICdcMCc7CisKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXUgJXUiLCAmdGlkLCAmYnVmX3NpemUpOworCWlmIChyZXQgIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBWYWxpZCBUSUQgdmFsdWVzIGFyZSAwIHRocm91Z2ggMTUgKi8KKwlpZiAodGlkID4gSFRUX0RBVEFfVFhfRVhUX1RJRF9NR01UIC0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZhci0+Y29uZl9tdXRleCk7CisJaWYgKChhci0+c3RhdGUgIT0gQVRIMTBLX1NUQVRFX09OKSB8fAorCSAgICAoYXJzdGEtPmFnZ3JfbW9kZSAhPSBBVEgxMEtfREJHX0FHR1JfTU9ERV9NQU5VQUwpKSB7CisJCXJldCA9IGNvdW50OworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBhdGgxMGtfd21pX2FkZGJhX3NlbmQoYXIsIGFyc3RhLT5hcnZpZi0+dmRldl9pZCwgc3RhLT5hZGRyLAorCQkJCSAgICB0aWQsIGJ1Zl9zaXplKTsKKwlpZiAocmV0KSB7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHNlbmQgYWRkYmEgcmVxdWVzdDogdmRldl9pZCAldSBwZWVyICVwTSB0aWQgJXUgYnVmX3NpemUgJXVcbiIsCisJCQkgICAgYXJzdGEtPmFydmlmLT52ZGV2X2lkLCBzdGEtPmFkZHIsIHRpZCwgYnVmX3NpemUpOworCX0KKworCXJldCA9IGNvdW50Oworb3V0OgorCW11dGV4X3VubG9jaygmYXItPmNvbmZfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfYWRkYmEgPSB7CisJLndyaXRlID0gYXRoMTBrX2RiZ19zdGFfd3JpdGVfYWRkYmEsCisJLm9wZW4gPSBzaW1wbGVfb3BlbiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCitzdGF0aWMgc3NpemVfdCBhdGgxMGtfZGJnX3N0YV93cml0ZV9hZGRiYV9yZXNwKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRoMTBrX3N0YSAqYXJzdGEgPSAoc3RydWN0IGF0aDEwa19zdGEgKilzdGEtPmRydl9wcml2OworCXN0cnVjdCBhdGgxMGsgKmFyID0gYXJzdGEtPmFydmlmLT5hcjsKKwl1MzIgdGlkLCBzdGF0dXM7CisJaW50IHJldDsKKwljaGFyIGJ1Zls2NF07CisKKwlzaW1wbGVfd3JpdGVfdG9fYnVmZmVyKGJ1Ziwgc2l6ZW9mKGJ1ZikgLSAxLCBwcG9zLCB1c2VyX2J1ZiwgY291bnQpOworCisJLyogbWFrZSBzdXJlIHRoYXQgYnVmIGlzIG51bGwgdGVybWluYXRlZCAqLworCWJ1ZltzaXplb2YoYnVmKSAtIDFdID0gJ1wwJzsKKworCXJldCA9IHNzY2FuZihidWYsICIldSAldSIsICZ0aWQsICZzdGF0dXMpOworCWlmIChyZXQgIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBWYWxpZCBUSUQgdmFsdWVzIGFyZSAwIHRocm91Z2ggMTUgKi8KKwlpZiAodGlkID4gSFRUX0RBVEFfVFhfRVhUX1RJRF9NR01UIC0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZhci0+Y29uZl9tdXRleCk7CisJaWYgKChhci0+c3RhdGUgIT0gQVRIMTBLX1NUQVRFX09OKSB8fAorCSAgICAoYXJzdGEtPmFnZ3JfbW9kZSAhPSBBVEgxMEtfREJHX0FHR1JfTU9ERV9NQU5VQUwpKSB7CisJCXJldCA9IGNvdW50OworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBhdGgxMGtfd21pX2FkZGJhX3NldF9yZXNwKGFyLCBhcnN0YS0+YXJ2aWYtPnZkZXZfaWQsIHN0YS0+YWRkciwKKwkJCQkJdGlkLCBzdGF0dXMpOworCWlmIChyZXQpIHsKKwkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gc2VuZCBhZGRiYSByZXNwb25zZTogdmRldl9pZCAldSBwZWVyICVwTSB0aWQgJXUgc3RhdHVzJXVcbiIsCisJCQkgICAgYXJzdGEtPmFydmlmLT52ZGV2X2lkLCBzdGEtPmFkZHIsIHRpZCwgc3RhdHVzKTsKKwl9CisJcmV0ID0gY291bnQ7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZhci0+Y29uZl9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19hZGRiYV9yZXNwID0geworCS53cml0ZSA9IGF0aDEwa19kYmdfc3RhX3dyaXRlX2FkZGJhX3Jlc3AsCisJLm9wZW4gPSBzaW1wbGVfb3BlbiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCitzdGF0aWMgc3NpemVfdCBhdGgxMGtfZGJnX3N0YV93cml0ZV9kZWxiYShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRoMTBrX3N0YSAqYXJzdGEgPSAoc3RydWN0IGF0aDEwa19zdGEgKilzdGEtPmRydl9wcml2OworCXN0cnVjdCBhdGgxMGsgKmFyID0gYXJzdGEtPmFydmlmLT5hcjsKKwl1MzIgdGlkLCBpbml0aWF0b3IsIHJlYXNvbjsKKwlpbnQgcmV0OworCWNoYXIgYnVmWzY0XTsKKworCXNpbXBsZV93cml0ZV90b19idWZmZXIoYnVmLCBzaXplb2YoYnVmKSAtIDEsIHBwb3MsIHVzZXJfYnVmLCBjb3VudCk7CisKKwkvKiBtYWtlIHN1cmUgdGhhdCBidWYgaXMgbnVsbCB0ZXJtaW5hdGVkICovCisJYnVmW3NpemVvZihidWYpIC0gMV0gPSAnXDAnOworCisJcmV0ID0gc3NjYW5mKGJ1ZiwgIiV1ICV1ICV1IiwgJnRpZCwgJmluaXRpYXRvciwgJnJlYXNvbik7CisJaWYgKHJldCAhPSAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFZhbGlkIFRJRCB2YWx1ZXMgYXJlIDAgdGhyb3VnaCAxNSAqLworCWlmICh0aWQgPiBIVFRfREFUQV9UWF9FWFRfVElEX01HTVQgLSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmFyLT5jb25mX211dGV4KTsKKwlpZiAoKGFyLT5zdGF0ZSAhPSBBVEgxMEtfU1RBVEVfT04pIHx8CisJICAgIChhcnN0YS0+YWdncl9tb2RlICE9IEFUSDEwS19EQkdfQUdHUl9NT0RFX01BTlVBTCkpIHsKKwkJcmV0ID0gY291bnQ7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGF0aDEwa193bWlfZGVsYmFfc2VuZChhciwgYXJzdGEtPmFydmlmLT52ZGV2X2lkLCBzdGEtPmFkZHIsCisJCQkJICAgIHRpZCwgaW5pdGlhdG9yLCByZWFzb24pOworCWlmIChyZXQpIHsKKwkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gc2VuZCBkZWxiYTogdmRldl9pZCAldSBwZWVyICVwTSB0aWQgJXUgaW5pdGlhdG9yICV1IHJlYXNvbiAldVxuIiwKKwkJCSAgICBhcnN0YS0+YXJ2aWYtPnZkZXZfaWQsIHN0YS0+YWRkciwgdGlkLCBpbml0aWF0b3IsCisJCQkgICAgcmVhc29uKTsKKwl9CisJcmV0ID0gY291bnQ7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZhci0+Y29uZl9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19kZWxiYSA9IHsKKwkud3JpdGUgPSBhdGgxMGtfZGJnX3N0YV93cml0ZV9kZWxiYSwKKwkub3BlbiA9IHNpbXBsZV9vcGVuLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3ZvaWQgYXRoMTBrX3N0YV9hZGRfZGVidWdmcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBzdHJ1Y3QgZGVudHJ5ICpkaXIpCit7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiYWdncl9tb2RlIiwgU19JUlVHTyB8IFNfSVdVU1IsIGRpciwgc3RhLAorCQkJICAgICZmb3BzX2FnZ3JfbW9kZSk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiYWRkYmEiLCBTX0lXVVNSLCBkaXIsIHN0YSwgJmZvcHNfYWRkYmEpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImFkZGJhX3Jlc3AiLCBTX0lXVVNSLCBkaXIsIHN0YSwgJmZvcHNfYWRkYmFfcmVzcCk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiZGVsYmEiLCBTX0lXVVNSLCBkaXIsIHN0YSwgJmZvcHNfZGVsYmEpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odGMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHRjLmMKaW5kZXggZjE5NDZhNi4uMmZkOWUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odGMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0Yy5jCkBAIC03MDMsMTEgKzcwMyw5IEBACiAJLyogd2FpdCBmb3IgcmVzcG9uc2UgKi8KIAlzdGF0dXMgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmh0Yy0+Y3RsX3Jlc3AsCiAJCQkJCSAgICAgQVRIMTBLX0hUQ19DT05OX1NWQ19USU1FT1VUX0haKTsKLQlpZiAoc3RhdHVzIDw9IDApIHsKLQkJaWYgKHN0YXR1cyA9PSAwKQotCQkJc3RhdHVzID0gLUVUSU1FRE9VVDsKKwlpZiAoc3RhdHVzID09IDApIHsKIAkJYXRoMTBrX2VycihhciwgIlNlcnZpY2UgY29ubmVjdCB0aW1lb3V0OiAlZFxuIiwgc3RhdHVzKTsKLQkJcmV0dXJuIHN0YXR1czsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CiAJfQogCiAJLyogd2UgY29udHJvbGxlZCB0aGUgYnVmZmVyIGNyZWF0aW9uLCBpdCdzIGFsaWduZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dC5jCmluZGV4IDU2Y2I0YWMuLjRmNTlhYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHQuYwpAQCAtNTMsNyArNTMsNiBAQAogCXN0cnVjdCBhdGgxMGtfaHR0ICpodHQgPSAmYXItPmh0dDsKIAogCWh0dC0+YXIgPSBhcjsKLQlodHQtPm1heF90aHJvdWdocHV0X21icHMgPSA4MDA7CiAKIAkvKgogCSAqIFByZWZldGNoIGVub3VnaCBkYXRhIHRvIHNhdGlzZnkgdGFyZ2V0CkBAIC0xMDIsNyArMTAxLDcgQEAKIAogCXN0YXR1cyA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaHR0LT50YXJnZXRfdmVyc2lvbl9yZWNlaXZlZCwKIAkJCQkJICAgICBIVFRfVEFSR0VUX1ZFUlNJT05fVElNRU9VVF9IWik7Ci0JaWYgKHN0YXR1cyA8PSAwKSB7CisJaWYgKHN0YXR1cyA9PSAwKSB7CiAJCWF0aDEwa193YXJuKGFyLCAiaHR0IHZlcnNpb24gcmVxdWVzdCB0aW1lZCBvdXRcbiIpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHQuaAppbmRleCAxYmQ1NTQ1Li44NzRiZjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0LmgKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisjaW5jbHVkZSA8bGludXgvaGFzaHRhYmxlLmg+CiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CiAKICNpbmNsdWRlICJodGMuaCIKQEAgLTI4Niw3ICsyODcsMTkgQEAKIAlIVFRfVDJIX01TR19UWVBFX1JDX1VQREFURV9JTkQJCT0gMHhjLAogCUhUVF9UMkhfTVNHX1RZUEVfVFhfSU5TUEVDVF9JTkQJCT0gMHhkLAogCUhUVF9UMkhfTVNHX1RZUEVfTUdNVF9UWF9DT01QTEVUSU9OCT0gMHhlLAorCUhUVF9UMkhfTVNHX1RZUEVfVFhfQ1JFRElUX1VQREFURV9JTkQJPSAweGYsCisJSFRUX1QySF9NU0dfVFlQRV9SWF9QTl9JTkQJCT0gMHgxMCwKKwlIVFRfVDJIX01TR19UWVBFX1JYX09GRkxPQURfREVMSVZFUl9JTkQgPSAweDExLAorCUhUVF9UMkhfTVNHX1RZUEVfUlhfSU5fT1JEX1BBRERSX0lORAk9IDB4MTIsCisJLyogMHgxMyByZXNlcnZkICovCisJSFRUX1QySF9NU0dfVFlQRV9XRElfSVBBX09QX1JFU1BPTlNFCT0gMHgxNCwKKworCS8qIEZJWE1FOiBEbyBub3QgZGVwZW5kIG9uIHRoaXMgZXZlbnQgaWQuIE51bWJlcmluZyBvZiB0aGlzIGV2ZW50IGlkIGlzCisJICogYnJva2VuIGFjcm9zcyBkaWZmZXJlbnQgZmlybXdhcmUgcmV2aXNpb25zIGFuZCBIVFQgdmVyc2lvbiBmYWlscyB0bworCSAqIGluZGljYXRlIHRoaXMuCisJICovCiAJSFRUX1QySF9NU0dfVFlQRV9URVNULAorCiAJLyoga2VlcCB0aGlzIGxhc3QgKi8KIAlIVFRfVDJIX05VTV9NU0dTCiB9OwpAQCAtNjU1LDYgKzY2OCw1MyBAQAogI2RlZmluZSBIVFRfUlhfRlJBR19JTkRfSU5GTzFfRkxVU0hfU0VRX05VTV9FTkRfTUFTSyAgIDB4MDAwMDBGQzAKICNkZWZpbmUgSFRUX1JYX0ZSQUdfSU5EX0lORk8xX0ZMVVNIX1NFUV9OVU1fRU5EX0xTQiAgICA2CiAKK3N0cnVjdCBodHRfcnhfcG5faW5kIHsKKwlfX2xlMTYgcGVlcl9pZDsKKwl1OCB0aWQ7CisJdTggc2Vxbm9fc3RhcnQ7CisJdTggc2Vxbm9fZW5kOworCXU4IHBuX2llX2NvdW50OworCXU4IHJlc2VydmVkOworCXU4IHBuX2llc1swXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBodHRfcnhfb2ZmbG9hZF9tc2R1IHsKKwlfX2xlMTYgbXNkdV9sZW47CisJX19sZTE2IHBlZXJfaWQ7CisJdTggdmRldl9pZDsKKwl1OCB0aWQ7CisJdTggZndfZGVzYzsKKwl1OCBwYXlsb2FkWzBdOworfSBfX3BhY2tlZDsKKworc3RydWN0IGh0dF9yeF9vZmZsb2FkX2luZCB7CisJdTggcmVzZXJ2ZWQ7CisJX19sZTE2IG1zZHVfY291bnQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgaHR0X3J4X2luX29yZF9tc2R1X2Rlc2MgeworCV9fbGUzMiBtc2R1X3BhZGRyOworCV9fbGUxNiBtc2R1X2xlbjsKKwl1OCBmd19kZXNjOworCXU4IHJlc2VydmVkOworfSBfX3BhY2tlZDsKKworc3RydWN0IGh0dF9yeF9pbl9vcmRfaW5kIHsKKwl1OCBpbmZvOworCV9fbGUxNiBwZWVyX2lkOworCXU4IHZkZXZfaWQ7CisJdTggcmVzZXJ2ZWQ7CisJX19sZTE2IG1zZHVfY291bnQ7CisJc3RydWN0IGh0dF9yeF9pbl9vcmRfbXNkdV9kZXNjIG1zZHVfZGVzY3NbMF07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIEhUVF9SWF9JTl9PUkRfSU5EX0lORk9fVElEX01BU0sJCTB4MDAwMDAwMWYKKyNkZWZpbmUgSFRUX1JYX0lOX09SRF9JTkRfSU5GT19USURfTFNCCQkwCisjZGVmaW5lIEhUVF9SWF9JTl9PUkRfSU5EX0lORk9fT0ZGTE9BRF9NQVNLCTB4MDAwMDAwMjAKKyNkZWZpbmUgSFRUX1JYX0lOX09SRF9JTkRfSU5GT19PRkZMT0FEX0xTQgk1CisjZGVmaW5lIEhUVF9SWF9JTl9PUkRfSU5EX0lORk9fRlJBR19NQVNLCTB4MDAwMDAwNDAKKyNkZWZpbmUgSFRUX1JYX0lOX09SRF9JTkRfSU5GT19GUkFHX0xTQgkJNgorCiAvKgogICogdGFyZ2V0IC0+IGhvc3QgdGVzdCBtZXNzYWdlIGRlZmluaXRpb24KICAqCkBAIC0xMTUwLDYgKzEyMTAsOSBAQAogCQlzdHJ1Y3QgaHR0X3J4X3Rlc3QgcnhfdGVzdDsKIAkJc3RydWN0IGh0dF9wa3Rsb2dfbXNnIHBrdGxvZ19tc2c7CiAJCXN0cnVjdCBodHRfc3RhdHNfY29uZiBzdGF0c19jb25mOworCQlzdHJ1Y3QgaHR0X3J4X3BuX2luZCByeF9wbl9pbmQ7CisJCXN0cnVjdCBodHRfcnhfb2ZmbG9hZF9pbmQgcnhfb2ZmbG9hZF9pbmQ7CisJCXN0cnVjdCBodHRfcnhfaW5fb3JkX2luZCByeF9pbl9vcmRfaW5kOwogCX07CiB9IF9fcGFja2VkOwogCkBAIC0xMTgyLDcgKzEyNDUsNiBAQAogCXN0cnVjdCBhdGgxMGsgKmFyOwogCWVudW0gYXRoMTBrX2h0Y19lcF9pZCBlaWQ7CiAKLQlpbnQgbWF4X3Rocm91Z2hwdXRfbWJwczsKIAl1OCB0YXJnZXRfdmVyc2lvbl9tYWpvcjsKIAl1OCB0YXJnZXRfdmVyc2lvbl9taW5vcjsKIAlzdHJ1Y3QgY29tcGxldGlvbiB0YXJnZXRfdmVyc2lvbl9yZWNlaXZlZDsKQEAgLTExOTgsNiArMTI2MCwyMCBAQAogCQkgKiBmaWxsZWQuCiAJCSAqLwogCQlzdHJ1Y3Qgc2tfYnVmZiAqKm5ldGJ1ZnNfcmluZzsKKworCQkvKiBUaGlzIGlzIHVzZWQgb25seSB3aXRoIGZpcm13YXJlIHN1cHBvcnRpbmcgSU5fT1JEX0lORC4KKwkJICoKKwkJICogV2l0aCBGdWxsIFJ4IFJlb3JkZXIgdGhlIEhUVCBSeCBSaW5nIGlzIG1vcmUgb2YgYSB0ZW1wb3JhcnkKKwkJICogYnVmZmVyIHJpbmcgZnJvbSB3aGljaCBidWZmZXIgYWRkcmVzc2VzIGFyZSBjb3BpZWQgYnkgdGhlCisJCSAqIGZpcm13YXJlIHRvIE1BQyBSeCByaW5nLiBGaXJtd2FyZSB0aGVuIGRlbGl2ZXJzIElOX09SRF9JTkQKKwkJICogcG9pbnRpbmcgdG8gc3BlY2lmaWMgKHJlLW9yZGVyZWQpIGJ1ZmZlcnMuCisJCSAqCisJCSAqIEZJWE1FOiBXaXRoIGtlcm5lbCBnZW5lcmljIGhhc2hpbmcgZnVuY3Rpb25zIHRoZXJlJ3MgYSBsb3QKKwkJICogb2YgaGFzaCBjb2xsaXNpb25zIGZvciBza19idWZmcy4KKwkJICovCisJCWJvb2wgaW5fb3JkX3J4OworCQlERUNMQVJFX0hBU0hUQUJMRShza2JfdGFibGUsIDQpOworCiAJCS8qCiAJCSAqIFJpbmcgb2YgYnVmZmVyIGFkZHJlc3NlcyAtCiAJCSAqIFRoaXMgcmluZyBob2xkcyB0aGUgInBoeXNpY2FsIiBkZXZpY2UgYWRkcmVzcyBvZiB0aGUKQEAgLTEyNTIsMTIgKzEzMjgsMTEgQEAKIAogCXVuc2lnbmVkIGludCBwcmVmZXRjaF9sZW47CiAKLQkvKiBQcm90ZWN0cyBhY2Nlc3MgdG8gJXBlbmRpbmdfdHgsICV1c2VkX21zZHVfaWRzICovCisJLyogUHJvdGVjdHMgYWNjZXNzIHRvIHBlbmRpbmdfdHgsIG51bV9wZW5kaW5nX3R4ICovCiAJc3BpbmxvY2tfdCB0eF9sb2NrOwogCWludCBtYXhfbnVtX3BlbmRpbmdfdHg7CiAJaW50IG51bV9wZW5kaW5nX3R4OwotCXN0cnVjdCBza19idWZmICoqcGVuZGluZ190eDsKLQl1bnNpZ25lZCBsb25nICp1c2VkX21zZHVfaWRzOyAvKiBiaXRtYXAgKi8KKwlzdHJ1Y3QgaWRyIHBlbmRpbmdfdHg7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgZW1wdHlfdHhfd3E7CiAJc3RydWN0IGRtYV9wb29sICp0eF9wb29sOwogCkBAIC0xMjcxLDYgKzEzNDYsNyBAQAogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0eHJ4X2NvbXBsX3Rhc2s7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9jb21wbF9xOwogCXN0cnVjdCBza19idWZmX2hlYWQgcnhfY29tcGxfcTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X2luX29yZF9jb21wbF9xOwogCiAJLyogcnhfc3RhdHVzIHRlbXBsYXRlICovCiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgcnhfc3RhdHVzOwpAQCAtMTMzNCw2ICsxNDEwLDcgQEAKIHZvaWQgYXRoMTBrX2h0dF90eF9mcmVlKHN0cnVjdCBhdGgxMGtfaHR0ICpodHQpOwogCiBpbnQgYXRoMTBrX2h0dF9yeF9hbGxvYyhzdHJ1Y3QgYXRoMTBrX2h0dCAqaHR0KTsKK2ludCBhdGgxMGtfaHR0X3J4X3JpbmdfcmVmaWxsKHN0cnVjdCBhdGgxMGsgKmFyKTsKIHZvaWQgYXRoMTBrX2h0dF9yeF9mcmVlKHN0cnVjdCBhdGgxMGtfaHR0ICpodHQpOwogCiB2b2lkIGF0aDEwa19odHRfaHRjX3R4X2NvbXBsZXRlKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTEzNDYsNyArMTQyMyw3IEBACiAJCQkJdTggbWF4X3N1YmZybXNfYW1zZHUpOwogCiB2b2lkIF9fYXRoMTBrX2h0dF90eF9kZWNfcGVuZGluZyhzdHJ1Y3QgYXRoMTBrX2h0dCAqaHR0KTsKLWludCBhdGgxMGtfaHR0X3R4X2FsbG9jX21zZHVfaWQoc3RydWN0IGF0aDEwa19odHQgKmh0dCk7CitpbnQgYXRoMTBrX2h0dF90eF9hbGxvY19tc2R1X2lkKHN0cnVjdCBhdGgxMGtfaHR0ICpodHQsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBhdGgxMGtfaHR0X3R4X2ZyZWVfbXNkdV9pZChzdHJ1Y3QgYXRoMTBrX2h0dCAqaHR0LCB1MTYgbXNkdV9pZCk7CiBpbnQgYXRoMTBrX2h0dF9tZ210X3R4KHN0cnVjdCBhdGgxMGtfaHR0ICpodHQsIHN0cnVjdCBza19idWZmICopOwogaW50IGF0aDEwa19odHRfdHgoc3RydWN0IGF0aDEwa19odHQgKmh0dCwgc3RydWN0IHNrX2J1ZmYgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfcnguYwppbmRleCA5Yzc4MmE0Li5jMWRhNDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3J4LmMKQEAgLTI1LDggKzI1LDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KIAotI2RlZmluZSBIVFRfUlhfUklOR19TSVpFIDEwMjQKLSNkZWZpbmUgSFRUX1JYX1JJTkdfRklMTF9MRVZFTCAxMDAwCisjZGVmaW5lIEhUVF9SWF9SSU5HX1NJWkUgSFRUX1JYX1JJTkdfU0laRV9NQVgKKyNkZWZpbmUgSFRUX1JYX1JJTkdfRklMTF9MRVZFTCAoKChIVFRfUlhfUklOR19TSVpFKSAvIDIpIC0gMSkKIAogLyogd2hlbiB1bmRlciBtZW1vcnkgcHJlc3N1cmUgcnggcmluZyByZWZpbGwgbWF5IGZhaWwgYW5kIG5lZWRzIGEgcmV0cnkgKi8KICNkZWZpbmUgSFRUX1JYX1JJTkdfUkVGSUxMX1JFVFJZX01TIDUwCkBAIC0zNCwzMSArMzQsNzAgQEAKIHN0YXRpYyBpbnQgYXRoMTBrX2h0dF9yeF9nZXRfY3N1bV9zdGF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyB2b2lkIGF0aDEwa19odHRfdHhyeF9jb21wbF90YXNrKHVuc2lnbmVkIGxvbmcgcHRyKTsKIAorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa19odHRfcnhfZmluZF9za2JfcGFkZHIoc3RydWN0IGF0aDEwayAqYXIsIHUzMiBwYWRkcikKK3sKKwlzdHJ1Y3QgYXRoMTBrX3NrYl9yeGNiICpyeGNiOworCisJaGFzaF9mb3JfZWFjaF9wb3NzaWJsZShhci0+aHR0LnJ4X3Jpbmcuc2tiX3RhYmxlLCByeGNiLCBobGlzdCwgcGFkZHIpCisJCWlmIChyeGNiLT5wYWRkciA9PSBwYWRkcikKKwkJCXJldHVybiBBVEgxMEtfUlhDQl9TS0IocnhjYik7CisKKwlXQVJOX09OX09OQ0UoMSk7CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIGF0aDEwa19odHRfcnhfcmluZ19mcmVlKHN0cnVjdCBhdGgxMGtfaHR0ICpodHQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgYXRoMTBrX3NrYl9jYiAqY2I7CisJc3RydWN0IGF0aDEwa19za2JfcnhjYiAqcnhjYjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBodHQtPnJ4X3JpbmcuZmlsbF9jbnQ7IGkrKykgewotCQlza2IgPSBodHQtPnJ4X3JpbmcubmV0YnVmc19yaW5nW2ldOwotCQljYiA9IEFUSDEwS19TS0JfQ0Ioc2tiKTsKLQkJZG1hX3VubWFwX3NpbmdsZShodHQtPmFyLT5kZXYsIGNiLT5wYWRkciwKLQkJCQkgc2tiLT5sZW4gKyBza2JfdGFpbHJvb20oc2tiKSwKLQkJCQkgRE1BX0ZST01fREVWSUNFKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwlpZiAoaHR0LT5yeF9yaW5nLmluX29yZF9yeCkgeworCQloYXNoX2Zvcl9lYWNoX3NhZmUoaHR0LT5yeF9yaW5nLnNrYl90YWJsZSwgaSwgbiwgcnhjYiwgaGxpc3QpIHsKKwkJCXNrYiA9IEFUSDEwS19SWENCX1NLQihyeGNiKTsKKwkJCWRtYV91bm1hcF9zaW5nbGUoaHR0LT5hci0+ZGV2LCByeGNiLT5wYWRkciwKKwkJCQkJIHNrYi0+bGVuICsgc2tiX3RhaWxyb29tKHNrYiksCisJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQkJaGFzaF9kZWwoJnJ4Y2ItPmhsaXN0KTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgaHR0LT5yeF9yaW5nLnNpemU7IGkrKykgeworCQkJc2tiID0gaHR0LT5yeF9yaW5nLm5ldGJ1ZnNfcmluZ1tpXTsKKwkJCWlmICghc2tiKQorCQkJCWNvbnRpbnVlOworCisJCQlyeGNiID0gQVRIMTBLX1NLQl9SWENCKHNrYik7CisJCQlkbWFfdW5tYXBfc2luZ2xlKGh0dC0+YXItPmRldiwgcnhjYi0+cGFkZHIsCisJCQkJCSBza2ItPmxlbiArIHNrYl90YWlscm9vbShza2IpLAorCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCX0KIAl9CiAKIAlodHQtPnJ4X3JpbmcuZmlsbF9jbnQgPSAwOworCWhhc2hfaW5pdChodHQtPnJ4X3Jpbmcuc2tiX3RhYmxlKTsKKwltZW1zZXQoaHR0LT5yeF9yaW5nLm5ldGJ1ZnNfcmluZywgMCwKKwkgICAgICAgaHR0LT5yeF9yaW5nLnNpemUgKiBzaXplb2YoaHR0LT5yeF9yaW5nLm5ldGJ1ZnNfcmluZ1swXSkpOwogfQogCiBzdGF0aWMgaW50IF9fYXRoMTBrX2h0dF9yeF9yaW5nX2ZpbGxfbihzdHJ1Y3QgYXRoMTBrX2h0dCAqaHR0LCBpbnQgbnVtKQogewogCXN0cnVjdCBodHRfcnhfZGVzYyAqcnhfZGVzYzsKKwlzdHJ1Y3QgYXRoMTBrX3NrYl9yeGNiICpyeGNiOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJZG1hX2FkZHJfdCBwYWRkcjsKIAlpbnQgcmV0ID0gMCwgaWR4OwogCisJLyogVGhlIEZ1bGwgUnggUmVvcmRlciBmaXJtd2FyZSBoYXMgbm8gd2F5IG9mIHRlbGxpbmcgdGhlIGhvc3QKKwkgKiBpbXBsaWNpdGx5IHdoZW4gaXQgY29waWVkIEhUVCBSeCBSaW5nIGJ1ZmZlcnMgdG8gTUFDIFJ4IFJpbmcuCisJICogVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIG1ha2Ugc3VyZSByaW5nIGlzIGFsd2F5cyBoYWxmIGVtcHR5LiBUaGlzCisJICogZ3VhcmFudGVlcyB0aGVyZSdsbCBiZSBubyByZXBsZW5pc2htZW50IG92ZXJydW5zIHBvc3NpYmxlLgorCSAqLworCUJVSUxEX0JVR19PTihIVFRfUlhfUklOR19GSUxMX0xFVkVMID49IEhUVF9SWF9SSU5HX1NJWkUgLyAyKTsKKwogCWlkeCA9IF9fbGUzMl90b19jcHUoKmh0dC0+cnhfcmluZy5hbGxvY19pZHgudmFkZHIpOwogCXdoaWxlIChudW0gPiAwKSB7CiAJCXNrYiA9IGRldl9hbGxvY19za2IoSFRUX1JYX0JVRl9TSVpFICsgSFRUX1JYX0RFU0NfQUxJR04pOwpAQCAtODYsMTcgKzEyNSwyOSBAQAogCQkJZ290byBmYWlsOwogCQl9CiAKLQkJQVRIMTBLX1NLQl9DQihza2IpLT5wYWRkciA9IHBhZGRyOworCQlyeGNiID0gQVRIMTBLX1NLQl9SWENCKHNrYik7CisJCXJ4Y2ItPnBhZGRyID0gcGFkZHI7CiAJCWh0dC0+cnhfcmluZy5uZXRidWZzX3JpbmdbaWR4XSA9IHNrYjsKIAkJaHR0LT5yeF9yaW5nLnBhZGRyc19yaW5nW2lkeF0gPSBfX2NwdV90b19sZTMyKHBhZGRyKTsKIAkJaHR0LT5yeF9yaW5nLmZpbGxfY250Kys7CiAKKwkJaWYgKGh0dC0+cnhfcmluZy5pbl9vcmRfcngpIHsKKwkJCWhhc2hfYWRkKGh0dC0+cnhfcmluZy5za2JfdGFibGUsCisJCQkJICZBVEgxMEtfU0tCX1JYQ0Ioc2tiKS0+aGxpc3QsCisJCQkJICh1MzIpcGFkZHIpOworCQl9CisKIAkJbnVtLS07CiAJCWlkeCsrOwogCQlpZHggJj0gaHR0LT5yeF9yaW5nLnNpemVfbWFzazsKIAl9CiAKIGZhaWw6CisJLyoKKwkgKiBNYWtlIHN1cmUgdGhlIHJ4IGJ1ZmZlciBpcyB1cGRhdGVkIGJlZm9yZSBhdmFpbGFibGUgYnVmZmVyCisJICogaW5kZXggdG8gYXZvaWQgYW55IHBvdGVudGlhbCByeCByaW5nIGNvcnJ1cHRpb24uCisJICovCisJbWIoKTsKIAkqaHR0LT5yeF9yaW5nLmFsbG9jX2lkeC52YWRkciA9IF9fY3B1X3RvX2xlMzIoaWR4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUzLDIyICsyMDQsMjAgQEAKIAlhdGgxMGtfaHR0X3J4X21zZHVfYnVmZl9yZXBsZW5pc2goaHR0KTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX2h0dF9yeF9yaW5nX2NsZWFuX3VwKHN0cnVjdCBhdGgxMGtfaHR0ICpodHQpCitpbnQgYXRoMTBrX2h0dF9yeF9yaW5nX3JlZmlsbChzdHJ1Y3QgYXRoMTBrICphcikKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBpOworCXN0cnVjdCBhdGgxMGtfaHR0ICpodHQgPSAmYXItPmh0dDsKKwlpbnQgcmV0OwogCi0JZm9yIChpID0gMDsgaSA8IGh0dC0+cnhfcmluZy5zaXplOyBpKyspIHsKLQkJc2tiID0gaHR0LT5yeF9yaW5nLm5ldGJ1ZnNfcmluZ1tpXTsKLQkJaWYgKCFza2IpCi0JCQljb250aW51ZTsKKwlzcGluX2xvY2tfYmgoJmh0dC0+cnhfcmluZy5sb2NrKTsKKwlyZXQgPSBhdGgxMGtfaHR0X3J4X3JpbmdfZmlsbF9uKGh0dCwgKGh0dC0+cnhfcmluZy5maWxsX2xldmVsIC0KKwkJCQkJICAgICAgaHR0LT5yeF9yaW5nLmZpbGxfY250KSk7CisJc3Bpbl91bmxvY2tfYmgoJmh0dC0+cnhfcmluZy5sb2NrKTsKIAotCQlkbWFfdW5tYXBfc2luZ2xlKGh0dC0+YXItPmRldiwgQVRIMTBLX1NLQl9DQihza2IpLT5wYWRkciwKLQkJCQkgc2tiLT5sZW4gKyBza2JfdGFpbHJvb20oc2tiKSwKLQkJCQkgRE1BX0ZST01fREVWSUNFKTsKLQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQkJaHR0LT5yeF9yaW5nLm5ldGJ1ZnNfcmluZ1tpXSA9IE5VTEw7Ci0JfQorCWlmIChyZXQpCisJCWF0aDEwa19odHRfcnhfcmluZ19mcmVlKGh0dCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiB2b2lkIGF0aDEwa19odHRfcnhfZnJlZShzdHJ1Y3QgYXRoMTBrX2h0dCAqaHR0KQpAQCAtMTc5LDggKzIyOCw5IEBACiAKIAlza2JfcXVldWVfcHVyZ2UoJmh0dC0+dHhfY29tcGxfcSk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZodHQtPnJ4X2NvbXBsX3EpOworCXNrYl9xdWV1ZV9wdXJnZSgmaHR0LT5yeF9pbl9vcmRfY29tcGxfcSk7CiAKLQlhdGgxMGtfaHR0X3J4X3JpbmdfY2xlYW5fdXAoaHR0KTsKKwlhdGgxMGtfaHR0X3J4X3JpbmdfZnJlZShodHQpOwogCiAJZG1hX2ZyZWVfY29oZXJlbnQoaHR0LT5hci0+ZGV2LAogCQkJICAoaHR0LT5yeF9yaW5nLnNpemUgKgpAQCAtMjEyLDYgKzI2Miw3IEBACiAJaWR4ID0gaHR0LT5yeF9yaW5nLnN3X3JkX2lkeC5tc2R1X3BheWxkOwogCW1zZHUgPSBodHQtPnJ4X3JpbmcubmV0YnVmc19yaW5nW2lkeF07CiAJaHR0LT5yeF9yaW5nLm5ldGJ1ZnNfcmluZ1tpZHhdID0gTlVMTDsKKwlodHQtPnJ4X3JpbmcucGFkZHJzX3JpbmdbaWR4XSA9IDA7CiAKIAlpZHgrKzsKIAlpZHggJj0gaHR0LT5yeF9yaW5nLnNpemVfbWFzazsKQEAgLTIxOSw3ICsyNzAsNyBAQAogCWh0dC0+cnhfcmluZy5maWxsX2NudC0tOwogCiAJZG1hX3VubWFwX3NpbmdsZShodHQtPmFyLT5kZXYsCi0JCQkgQVRIMTBLX1NLQl9DQihtc2R1KS0+cGFkZHIsCisJCQkgQVRIMTBLX1NLQl9SWENCKG1zZHUpLT5wYWRkciwKIAkJCSBtc2R1LT5sZW4gKyBza2JfdGFpbHJvb20obXNkdSksCiAJCQkgRE1BX0ZST01fREVWSUNFKTsKIAlhdGgxMGtfZGJnX2R1bXAoYXIsIEFUSDEwS19EQkdfSFRUX0RVTVAsIE5VTEwsICJodHQgcnggbmV0YnVmIHBvcDogIiwKQEAgLTM3OSw2ICs0MzAsODIgQEAKIAlhdGgxMGtfaHR0X3J4X21zZHVfYnVmZl9yZXBsZW5pc2goaHR0KTsKIH0KIAorc3RhdGljIHN0cnVjdCBza19idWZmICphdGgxMGtfaHR0X3J4X3BvcF9wYWRkcihzdHJ1Y3QgYXRoMTBrX2h0dCAqaHR0LAorCQkJCQkgICAgICAgdTMyIHBhZGRyKQoreworCXN0cnVjdCBhdGgxMGsgKmFyID0gaHR0LT5hcjsKKwlzdHJ1Y3QgYXRoMTBrX3NrYl9yeGNiICpyeGNiOworCXN0cnVjdCBza19idWZmICptc2R1OworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaHR0LT5yeF9yaW5nLmxvY2spOworCisJbXNkdSA9IGF0aDEwa19odHRfcnhfZmluZF9za2JfcGFkZHIoYXIsIHBhZGRyKTsKKwlpZiAoIW1zZHUpCisJCXJldHVybiBOVUxMOworCisJcnhjYiA9IEFUSDEwS19TS0JfUlhDQihtc2R1KTsKKwloYXNoX2RlbCgmcnhjYi0+aGxpc3QpOworCWh0dC0+cnhfcmluZy5maWxsX2NudC0tOworCisJZG1hX3VubWFwX3NpbmdsZShodHQtPmFyLT5kZXYsIHJ4Y2ItPnBhZGRyLAorCQkJIG1zZHUtPmxlbiArIHNrYl90YWlscm9vbShtc2R1KSwKKwkJCSBETUFfRlJPTV9ERVZJQ0UpOworCWF0aDEwa19kYmdfZHVtcChhciwgQVRIMTBLX0RCR19IVFRfRFVNUCwgTlVMTCwgImh0dCByeCBuZXRidWYgcG9wOiAiLAorCQkJbXNkdS0+ZGF0YSwgbXNkdS0+bGVuICsgc2tiX3RhaWxyb29tKG1zZHUpKTsKKworCXJldHVybiBtc2R1OworfQorCitzdGF0aWMgaW50IGF0aDEwa19odHRfcnhfcG9wX3BhZGRyX2xpc3Qoc3RydWN0IGF0aDEwa19odHQgKmh0dCwKKwkJCQkJc3RydWN0IGh0dF9yeF9pbl9vcmRfaW5kICpldiwKKwkJCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgYXRoMTBrICphciA9IGh0dC0+YXI7CisJc3RydWN0IGh0dF9yeF9pbl9vcmRfbXNkdV9kZXNjICptc2R1X2Rlc2MgPSBldi0+bXNkdV9kZXNjczsKKwlzdHJ1Y3QgaHR0X3J4X2Rlc2MgKnJ4ZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNkdTsKKwlpbnQgbXNkdV9jb3VudDsKKwlib29sIGlzX29mZmxvYWQ7CisJdTMyIHBhZGRyOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaHR0LT5yeF9yaW5nLmxvY2spOworCisJbXNkdV9jb3VudCA9IF9fbGUxNl90b19jcHUoZXYtPm1zZHVfY291bnQpOworCWlzX29mZmxvYWQgPSAhIShldi0+aW5mbyAmIEhUVF9SWF9JTl9PUkRfSU5EX0lORk9fT0ZGTE9BRF9NQVNLKTsKKworCXdoaWxlIChtc2R1X2NvdW50LS0pIHsKKwkJcGFkZHIgPSBfX2xlMzJfdG9fY3B1KG1zZHVfZGVzYy0+bXNkdV9wYWRkcik7CisKKwkJbXNkdSA9IGF0aDEwa19odHRfcnhfcG9wX3BhZGRyKGh0dCwgcGFkZHIpOworCQlpZiAoIW1zZHUpIHsKKwkJCV9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0KKworCQlfX3NrYl9xdWV1ZV90YWlsKGxpc3QsIG1zZHUpOworCisJCWlmICghaXNfb2ZmbG9hZCkgeworCQkJcnhkID0gKHZvaWQgKiltc2R1LT5kYXRhOworCisJCQl0cmFjZV9hdGgxMGtfaHR0X3J4X2Rlc2MoYXIsIHJ4ZCwgc2l6ZW9mKCpyeGQpKTsKKworCQkJc2tiX3B1dChtc2R1LCBzaXplb2YoKnJ4ZCkpOworCQkJc2tiX3B1bGwobXNkdSwgc2l6ZW9mKCpyeGQpKTsKKwkJCXNrYl9wdXQobXNkdSwgX19sZTE2X3RvX2NwdShtc2R1X2Rlc2MtPm1zZHVfbGVuKSk7CisKKwkJCWlmICghKF9fbGUzMl90b19jcHUocnhkLT5hdHRlbnRpb24uZmxhZ3MpICYKKwkJCSAgICAgIFJYX0FUVEVOVElPTl9GTEFHU19NU0RVX0RPTkUpKSB7CisJCQkJYXRoMTBrX3dhcm4oaHR0LT5hciwgInRyaWVkIHRvIHBvcCBhbiBpbmNvbXBsZXRlIGZyYW1lLCBvb3BzIVxuIik7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CisJCX0KKworCQltc2R1X2Rlc2MrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogaW50IGF0aDEwa19odHRfcnhfYWxsb2Moc3RydWN0IGF0aDEwa19odHQgKmh0dCkKIHsKIAlzdHJ1Y3QgYXRoMTBrICphciA9IGh0dC0+YXI7CkBAIC00MjQsNyArNTUxLDcgQEAKIAogCWh0dC0+cnhfcmluZy5hbGxvY19pZHgudmFkZHIgPSB2YWRkcjsKIAlodHQtPnJ4X3JpbmcuYWxsb2NfaWR4LnBhZGRyID0gcGFkZHI7Ci0JaHR0LT5yeF9yaW5nLnN3X3JkX2lkeC5tc2R1X3BheWxkID0gMDsKKwlodHQtPnJ4X3Jpbmcuc3dfcmRfaWR4Lm1zZHVfcGF5bGQgPSBodHQtPnJ4X3Jpbmcuc2l6ZV9tYXNrOwogCSpodHQtPnJ4X3JpbmcuYWxsb2NfaWR4LnZhZGRyID0gMDsKIAogCS8qIEluaXRpYWxpemUgdGhlIFJ4IHJlZmlsbCByZXRyeSB0aW1lciAqLwpAQCAtNDMzLDE0ICs1NjAsMTUgQEAKIAlzcGluX2xvY2tfaW5pdCgmaHR0LT5yeF9yaW5nLmxvY2spOwogCiAJaHR0LT5yeF9yaW5nLmZpbGxfY250ID0gMDsKLQlpZiAoX19hdGgxMGtfaHR0X3J4X3JpbmdfZmlsbF9uKGh0dCwgaHR0LT5yeF9yaW5nLmZpbGxfbGV2ZWwpKQotCQlnb3RvIGVycl9maWxsX3Jpbmc7CisJaHR0LT5yeF9yaW5nLnN3X3JkX2lkeC5tc2R1X3BheWxkID0gMDsKKwloYXNoX2luaXQoaHR0LT5yeF9yaW5nLnNrYl90YWJsZSk7CiAKIAl0YXNrbGV0X2luaXQoJmh0dC0+cnhfcmVwbGVuaXNoX3Rhc2ssIGF0aDEwa19odHRfcnhfcmVwbGVuaXNoX3Rhc2ssCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpaHR0KTsKIAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmh0dC0+dHhfY29tcGxfcSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaHR0LT5yeF9jb21wbF9xKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZodHQtPnJ4X2luX29yZF9jb21wbF9xKTsKIAogCXRhc2tsZXRfaW5pdCgmaHR0LT50eHJ4X2NvbXBsX3Rhc2ssIGF0aDEwa19odHRfdHhyeF9jb21wbF90YXNrLAogCQkgICAgICh1bnNpZ25lZCBsb25nKWh0dCk7CkBAIC00NDksMTIgKzU3Nyw2IEBACiAJCSAgIGh0dC0+cnhfcmluZy5zaXplLCBodHQtPnJ4X3JpbmcuZmlsbF9sZXZlbCk7CiAJcmV0dXJuIDA7CiAKLWVycl9maWxsX3Jpbmc6Ci0JYXRoMTBrX2h0dF9yeF9yaW5nX2ZyZWUoaHR0KTsKLQlkbWFfZnJlZV9jb2hlcmVudChodHQtPmFyLT5kZXYsCi0JCQkgIHNpemVvZigqaHR0LT5yeF9yaW5nLmFsbG9jX2lkeC52YWRkciksCi0JCQkgIGh0dC0+cnhfcmluZy5hbGxvY19pZHgudmFkZHIsCi0JCQkgIGh0dC0+cnhfcmluZy5hbGxvY19pZHgucGFkZHIpOwogZXJyX2RtYV9pZHg6CiAJZG1hX2ZyZWVfY29oZXJlbnQoaHR0LT5hci0+ZGV2LAogCQkJICAoaHR0LT5yeF9yaW5nLnNpemUgKgpAQCAtNjkxLDcgKzgxMyw3IEBACiAJICoKIAkgKiBGSVhNRTogQ2FuIHdlIGdldC9jb21wdXRlIDY0Yml0IFRTRj8KIAkgKi8KLQlzdGF0dXMtPm1hY3RpbWUgPSBfX2xlMzJfdG9fY3B1KHJ4ZC0+cHBkdV9lbmQudHNmX3RpbWVzdGFtcCk7CisJc3RhdHVzLT5tYWN0aW1lID0gX19sZTMyX3RvX2NwdShyeGQtPnBwZHVfZW5kLmNvbW1vbi50c2ZfdGltZXN0YW1wKTsKIAlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19NQUNUSU1FX0VORDsKIH0KIApAQCAtMTU3OCw2ICsxNzAwLDE5NCBAQAogCXNwaW5fdW5sb2NrX2JoKCZhci0+ZGF0YV9sb2NrKTsKIH0KIAorc3RhdGljIGludCBhdGgxMGtfaHR0X3J4X2V4dHJhY3RfYW1zZHUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqYW1zZHUpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZHU7CisJc3RydWN0IGh0dF9yeF9kZXNjICpyeGQ7CisKKwlpZiAoc2tiX3F1ZXVlX2VtcHR5KGxpc3QpKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKKwlpZiAoV0FSTl9PTighc2tiX3F1ZXVlX2VtcHR5KGFtc2R1KSkpCisJCXJldHVybiAtRUlOVkFMOworCisJd2hpbGUgKChtc2R1ID0gX19za2JfZGVxdWV1ZShsaXN0KSkpIHsKKwkJX19za2JfcXVldWVfdGFpbChhbXNkdSwgbXNkdSk7CisKKwkJcnhkID0gKHZvaWQgKiltc2R1LT5kYXRhIC0gc2l6ZW9mKCpyeGQpOworCQlpZiAocnhkLT5tc2R1X2VuZC5pbmZvMCAmCisJCSAgICBfX2NwdV90b19sZTMyKFJYX01TRFVfRU5EX0lORk8wX0xBU1RfTVNEVSkpCisJCQlicmVhazsKKwl9CisKKwltc2R1ID0gc2tiX3BlZWtfdGFpbChhbXNkdSk7CisJcnhkID0gKHZvaWQgKiltc2R1LT5kYXRhIC0gc2l6ZW9mKCpyeGQpOworCWlmICghKHJ4ZC0+bXNkdV9lbmQuaW5mbzAgJgorCSAgICAgIF9fY3B1X3RvX2xlMzIoUlhfTVNEVV9FTkRfSU5GTzBfTEFTVF9NU0RVKSkpIHsKKwkJc2tiX3F1ZXVlX3NwbGljZV9pbml0KGFtc2R1LCBsaXN0KTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDEwa19odHRfcnhfaF9yeF9vZmZsb2FkX3Byb3Qoc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKworCWlmICghaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuOworCisJLyogT2ZmbG9hZGVkIGZyYW1lcyBhcmUgYWxyZWFkeSBkZWNyeXB0ZWQgYnV0IGZpcm13YXJlIGluc2lzdHMgdGhleSBhcmUKKwkgKiBwcm90ZWN0ZWQgaW4gdGhlIDgwMi4xMSBoZWFkZXIuIFN0cmlwIHRoZSBmbGFnLiAgT3RoZXJ3aXNlIG1hYzgwMjExCisJICogd2lsbCBkcm9wIHRoZSBmcmFtZS4KKwkgKi8KKworCWhkci0+ZnJhbWVfY29udHJvbCAmPSB+X19jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOworCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRCB8CisJCQlSWF9GTEFHX0lWX1NUUklQUEVEIHwKKwkJCVJYX0ZMQUdfTU1JQ19TVFJJUFBFRDsKK30KKworc3RhdGljIHZvaWQgYXRoMTBrX2h0dF9yeF9oX3J4X29mZmxvYWQoc3RydWN0IGF0aDEwayAqYXIsCisJCQkJICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGF0aDEwa19odHQgKmh0dCA9ICZhci0+aHR0OworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSAmaHR0LT5yeF9zdGF0dXM7CisJc3RydWN0IGh0dF9yeF9vZmZsb2FkX21zZHUgKnJ4OworCXN0cnVjdCBza19idWZmICptc2R1OworCXNpemVfdCBvZmZzZXQ7CisKKwl3aGlsZSAoKG1zZHUgPSBfX3NrYl9kZXF1ZXVlKGxpc3QpKSkgeworCQkvKiBPZmZsb2FkZWQgZnJhbWVzIGRvbid0IGhhdmUgUnggZGVzY3JpcHRvci4gSW5zdGVhZCB0aGV5IGhhdmUKKwkJICogYSBzaG9ydCBtZXRhIGluZm9ybWF0aW9uIGhlYWRlci4KKwkJICovCisKKwkJcnggPSAodm9pZCAqKW1zZHUtPmRhdGE7CisKKwkJc2tiX3B1dChtc2R1LCBzaXplb2YoKnJ4KSk7CisJCXNrYl9wdWxsKG1zZHUsIHNpemVvZigqcngpKTsKKworCQlpZiAoc2tiX3RhaWxyb29tKG1zZHUpIDwgX19sZTE2X3RvX2NwdShyeC0+bXNkdV9sZW4pKSB7CisJCQlhdGgxMGtfd2FybihhciwgImRyb3BwaW5nIGZyYW1lOiBvZmZsb2FkZWQgcnggbXNkdSBpcyB0b28gbG9uZyFcbiIpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkobXNkdSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXNrYl9wdXQobXNkdSwgX19sZTE2X3RvX2NwdShyeC0+bXNkdV9sZW4pKTsKKworCQkvKiBPZmZsb2FkZWQgcnggaGVhZGVyIGxlbmd0aCBpc24ndCBtdWx0aXBsZSBvZiAyIG5vciA0IHNvIHRoZQorCQkgKiBhY3R1YWwgcGF5bG9hZCBpcyB1bmFsaWduZWQuIEFsaWduIHRoZSBmcmFtZS4gIE90aGVyd2lzZQorCQkgKiBtYWM4MDIxMSBjb21wbGFpbnMuICBUaGlzIHNob3VsZG4ndCByZWR1Y2UgcGVyZm9ybWFuY2UgbXVjaAorCQkgKiBiZWNhdXNlIHRoZXNlIG9mZmxvYWRlZCBmcmFtZXMgYXJlIHJhcmUuCisJCSAqLworCQlvZmZzZXQgPSA0IC0gKCh1bnNpZ25lZCBsb25nKW1zZHUtPmRhdGEgJiAzKTsKKwkJc2tiX3B1dChtc2R1LCBvZmZzZXQpOworCQltZW1tb3ZlKG1zZHUtPmRhdGEgKyBvZmZzZXQsIG1zZHUtPmRhdGEsIG1zZHUtPmxlbik7CisJCXNrYl9wdWxsKG1zZHUsIG9mZnNldCk7CisKKwkJLyogRklYTUU6IFRoZSBmcmFtZSBpcyBOV2lmaS4gUmUtY29uc3RydWN0IFFvUyBDb250cm9sCisJCSAqIGlmIHBvc3NpYmxlIGxhdGVyLgorCQkgKi8KKworCQltZW1zZXQoc3RhdHVzLCAwLCBzaXplb2YoKnN0YXR1cykpOworCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19OT19TSUdOQUxfVkFMOworCisJCWF0aDEwa19odHRfcnhfaF9yeF9vZmZsb2FkX3Byb3Qoc3RhdHVzLCBtc2R1KTsKKwkJYXRoMTBrX2h0dF9yeF9oX2NoYW5uZWwoYXIsIHN0YXR1cyk7CisJCWF0aDEwa19wcm9jZXNzX3J4KGFyLCBzdGF0dXMsIG1zZHUpOworCX0KK30KKworc3RhdGljIHZvaWQgYXRoMTBrX2h0dF9yeF9pbl9vcmRfaW5kKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBhdGgxMGtfaHR0ICpodHQgPSAmYXItPmh0dDsKKwlzdHJ1Y3QgaHR0X3Jlc3AgKnJlc3AgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzID0gJmh0dC0+cnhfc3RhdHVzOworCXN0cnVjdCBza19idWZmX2hlYWQgbGlzdDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGFtc2R1OworCXUxNiBwZWVyX2lkOworCXUxNiBtc2R1X2NvdW50OworCXU4IHZkZXZfaWQ7CisJdTggdGlkOworCWJvb2wgb2ZmbG9hZDsKKwlib29sIGZyYWc7CisJaW50IHJldDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmh0dC0+cnhfcmluZy5sb2NrKTsKKworCWlmIChodHQtPnJ4X2NvbmZ1c2VkKQorCQlyZXR1cm47CisKKwlza2JfcHVsbChza2IsIHNpemVvZihyZXNwLT5oZHIpKTsKKwlza2JfcHVsbChza2IsIHNpemVvZihyZXNwLT5yeF9pbl9vcmRfaW5kKSk7CisKKwlwZWVyX2lkID0gX19sZTE2X3RvX2NwdShyZXNwLT5yeF9pbl9vcmRfaW5kLnBlZXJfaWQpOworCW1zZHVfY291bnQgPSBfX2xlMTZfdG9fY3B1KHJlc3AtPnJ4X2luX29yZF9pbmQubXNkdV9jb3VudCk7CisJdmRldl9pZCA9IHJlc3AtPnJ4X2luX29yZF9pbmQudmRldl9pZDsKKwl0aWQgPSBTTShyZXNwLT5yeF9pbl9vcmRfaW5kLmluZm8sIEhUVF9SWF9JTl9PUkRfSU5EX0lORk9fVElEKTsKKwlvZmZsb2FkID0gISEocmVzcC0+cnhfaW5fb3JkX2luZC5pbmZvICYKKwkJCUhUVF9SWF9JTl9PUkRfSU5EX0lORk9fT0ZGTE9BRF9NQVNLKTsKKwlmcmFnID0gISEocmVzcC0+cnhfaW5fb3JkX2luZC5pbmZvICYgSFRUX1JYX0lOX09SRF9JTkRfSU5GT19GUkFHX01BU0spOworCisJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19IVFQsCisJCSAgICJodHQgcnggaW4gb3JkIHZkZXYgJWkgcGVlciAlaSB0aWQgJWkgb2ZmbG9hZCAlaSBmcmFnICVpIG1zZHUgY291bnQgJWlcbiIsCisJCSAgIHZkZXZfaWQsIHBlZXJfaWQsIHRpZCwgb2ZmbG9hZCwgZnJhZywgbXNkdV9jb3VudCk7CisKKwlpZiAoc2tiLT5sZW4gPCBtc2R1X2NvdW50ICogc2l6ZW9mKCpyZXNwLT5yeF9pbl9vcmRfaW5kLm1zZHVfZGVzY3MpKSB7CisJCWF0aDEwa193YXJuKGFyLCAiZHJvcHBpbmcgaW52YWxpZCBpbiBvcmRlciByeCBpbmRpY2F0aW9uXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFRoZSBldmVudCBjYW4gZGVsaXZlciBtb3JlIHRoYW4gMSBBLU1TRFUuIEVhY2ggQS1NU0RVIGlzIGxhdGVyCisJICogZXh0cmFjdGVkIGFuZCBwcm9jZXNzZWQuCisJICovCisJX19za2JfcXVldWVfaGVhZF9pbml0KCZsaXN0KTsKKwlyZXQgPSBhdGgxMGtfaHR0X3J4X3BvcF9wYWRkcl9saXN0KGh0dCwgJnJlc3AtPnJ4X2luX29yZF9pbmQsICZsaXN0KTsKKwlpZiAocmV0IDwgMCkgeworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBwb3AgcGFkZHIgbGlzdDogJWRcbiIsIHJldCk7CisJCWh0dC0+cnhfY29uZnVzZWQgPSB0cnVlOworCQlyZXR1cm47CisJfQorCisJLyogT2ZmbG9hZGVkIGZyYW1lcyBhcmUgdmVyeSBkaWZmZXJlbnQgYW5kIG5lZWQgdG8gYmUgaGFuZGxlZAorCSAqIHNlcGFyYXRlbHkuCisJICovCisJaWYgKG9mZmxvYWQpCisJCWF0aDEwa19odHRfcnhfaF9yeF9vZmZsb2FkKGFyLCAmbGlzdCk7CisKKwl3aGlsZSAoIXNrYl9xdWV1ZV9lbXB0eSgmbGlzdCkpIHsKKwkJX19za2JfcXVldWVfaGVhZF9pbml0KCZhbXNkdSk7CisJCXJldCA9IGF0aDEwa19odHRfcnhfZXh0cmFjdF9hbXNkdSgmbGlzdCwgJmFtc2R1KTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAwOgorCQkJLyogTm90ZTogVGhlIGluLW9yZGVyIGluZGljYXRpb24gbWF5IHJlcG9ydCBpbnRlcmxlYXZlZAorCQkJICogZnJhbWVzIGZyb20gZGlmZmVyZW50IFBQRFVzIG1lYW5pbmcgcmVwb3J0ZWQgcnggcmF0ZQorCQkJICogdG8gbWFjODAyMTEgaXNuJ3QgYWNjdXJhdGUvcmVsaWFibGUuIEl0J3Mgc3RpbGwKKwkJCSAqIGJldHRlciB0byByZXBvcnQgc29tZXRoaW5nIHRoYW4gbm90aGluZyB0aG91Z2guIFRoaXMKKwkJCSAqIHNob3VsZCBzdGlsbCBnaXZlIGFuIGlkZWEgYWJvdXQgcnggcmF0ZSB0byB0aGUgdXNlci4KKwkJCSAqLworCQkJYXRoMTBrX2h0dF9yeF9oX3BwZHUoYXIsICZhbXNkdSwgc3RhdHVzKTsKKwkJCWF0aDEwa19odHRfcnhfaF9maWx0ZXIoYXIsICZhbXNkdSwgc3RhdHVzKTsKKwkJCWF0aDEwa19odHRfcnhfaF9tcGR1KGFyLCAmYW1zZHUsIHN0YXR1cyk7CisJCQlhdGgxMGtfaHR0X3J4X2hfZGVsaXZlcihhciwgJmFtc2R1LCBzdGF0dXMpOworCQkJYnJlYWs7CisJCWNhc2UgLUVBR0FJTjoKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQlkZWZhdWx0OgorCQkJLyogU2hvdWxkIG5vdCBoYXBwZW4uICovCisJCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBleHRyYWN0IGFtc2R1OiAlZFxuIiwgcmV0KTsKKwkJCWh0dC0+cnhfY29uZnVzZWQgPSB0cnVlOworCQkJX19za2JfcXVldWVfcHVyZ2UoJmxpc3QpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJdGFza2xldF9zY2hlZHVsZSgmaHR0LT5yeF9yZXBsZW5pc2hfdGFzayk7Cit9CisKIHZvaWQgYXRoMTBrX2h0dF90MmhfbXNnX2hhbmRsZXIoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGF0aDEwa19odHQgKmh0dCA9ICZhci0+aHR0OwpAQCAtMTcwMCw2ICsyMDEwLDIwIEBACiAJCSAqLwogCQlicmVhazsKIAl9CisJY2FzZSBIVFRfVDJIX01TR19UWVBFX1JYX0lOX09SRF9QQUREUl9JTkQ6IHsKKwkJc3Bpbl9sb2NrX2JoKCZodHQtPnJ4X3JpbmcubG9jayk7CisJCV9fc2tiX3F1ZXVlX3RhaWwoJmh0dC0+cnhfaW5fb3JkX2NvbXBsX3EsIHNrYik7CisJCXNwaW5fdW5sb2NrX2JoKCZodHQtPnJ4X3JpbmcubG9jayk7CisJCXRhc2tsZXRfc2NoZWR1bGUoJmh0dC0+dHhyeF9jb21wbF90YXNrKTsKKwkJcmV0dXJuOworCX0KKwljYXNlIEhUVF9UMkhfTVNHX1RZUEVfVFhfQ1JFRElUX1VQREFURV9JTkQ6CisJCS8qIEZJWE1FOiBUaGlzIFdNSS1UTFYgZXZlbnQgaXMgb3ZlcmxhcHBpbmcgd2l0aCAxMC4yCisJCSAqIENIQU5fQ0hBTkdFIC0gYm90aCBiZWluZyAweEYuIE5laXRoZXIgaXMgYmVpbmcgdXNlZCBpbgorCQkgKiBwcmFjdGljZSBzbyBubyBpbW1lZGlhdGUgYWN0aW9uIGlzIG5lY2Vzc2FyeS4gTmV2ZXJ0aGVsZXNzCisJCSAqIEhUVCBtYXkgbmVlZCBhbiBhYnN0cmFjdGlvbiBsYXllciBsaWtlIFdNSSBoYXMgb25lIGRheS4KKwkJICovCisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWF0aDEwa193YXJuKGFyLCAiaHR0IGV2ZW50ICglZCkgbm90IGhhbmRsZWRcbiIsCiAJCQkgICAgcmVzcC0+aGRyLm1zZ190eXBlKTsKQEAgLTE3MTUsNiArMjAzOSw3IEBACiBzdGF0aWMgdm9pZCBhdGgxMGtfaHR0X3R4cnhfY29tcGxfdGFzayh1bnNpZ25lZCBsb25nIHB0cikKIHsKIAlzdHJ1Y3QgYXRoMTBrX2h0dCAqaHR0ID0gKHN0cnVjdCBhdGgxMGtfaHR0ICopcHRyOworCXN0cnVjdCBhdGgxMGsgKmFyID0gaHR0LT5hcjsKIAlzdHJ1Y3QgaHR0X3Jlc3AgKnJlc3A7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtMTczMSw1ICsyMDU2LDEwIEBACiAJCWF0aDEwa19odHRfcnhfaGFuZGxlcihodHQsICZyZXNwLT5yeF9pbmQpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCX0KKworCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmaHR0LT5yeF9pbl9vcmRfY29tcGxfcSkpKSB7CisJCWF0aDEwa19odHRfcnhfaW5fb3JkX2luZChhciwgc2tiKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwl9CiAJc3Bpbl91bmxvY2tfYmgoJmh0dC0+cnhfcmluZy5sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h0dF90eC5jCmluZGV4IDRiYzUxZDguLmNiZDJiYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHR0X3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9odHRfdHguYwpAQCAtNTYsMjEgKzU2LDE4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGF0aDEwa19odHRfdHhfYWxsb2NfbXNkdV9pZChzdHJ1Y3QgYXRoMTBrX2h0dCAqaHR0KQoraW50IGF0aDEwa19odHRfdHhfYWxsb2NfbXNkdV9pZChzdHJ1Y3QgYXRoMTBrX2h0dCAqaHR0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBhdGgxMGsgKmFyID0gaHR0LT5hcjsKLQlpbnQgbXNkdV9pZDsKKwlpbnQgcmV0OwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmaHR0LT50eF9sb2NrKTsKIAotCW1zZHVfaWQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGh0dC0+dXNlZF9tc2R1X2lkcywKLQkJCQkgICAgICBodHQtPm1heF9udW1fcGVuZGluZ190eCk7Ci0JaWYgKG1zZHVfaWQgPT0gaHR0LT5tYXhfbnVtX3BlbmRpbmdfdHgpCi0JCXJldHVybiAtRU5PQlVGUzsKKwlyZXQgPSBpZHJfYWxsb2MoJmh0dC0+cGVuZGluZ190eCwgc2tiLCAwLCAweDEwMDAwLCBHRlBfQVRPTUlDKTsKIAotCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfSFRULCAiaHR0IHR4IGFsbG9jIG1zZHVfaWQgJWRcbiIsIG1zZHVfaWQpOwotCV9fc2V0X2JpdChtc2R1X2lkLCBodHQtPnVzZWRfbXNkdV9pZHMpOwotCXJldHVybiBtc2R1X2lkOworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfSFRULCAiaHR0IHR4IGFsbG9jIG1zZHVfaWQgJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiB2b2lkIGF0aDEwa19odHRfdHhfZnJlZV9tc2R1X2lkKHN0cnVjdCBhdGgxMGtfaHR0ICpodHQsIHUxNiBtc2R1X2lkKQpAQCAtNzksNzkgKzc2LDUzIEBACiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZodHQtPnR4X2xvY2spOwogCi0JaWYgKCF0ZXN0X2JpdChtc2R1X2lkLCBodHQtPnVzZWRfbXNkdV9pZHMpKQotCQlhdGgxMGtfd2FybihhciwgInRyeWluZyB0byBmcmVlIHVuYWxsb2NhdGVkIG1zZHVfaWQgJWRcbiIsCi0JCQkgICAgbXNkdV9pZCk7Ci0KIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX0hUVCwgImh0dCB0eCBmcmVlIG1zZHVfaWQgJWh1XG4iLCBtc2R1X2lkKTsKLQlfX2NsZWFyX2JpdChtc2R1X2lkLCBodHQtPnVzZWRfbXNkdV9pZHMpOworCisJaWRyX3JlbW92ZSgmaHR0LT5wZW5kaW5nX3R4LCBtc2R1X2lkKTsKIH0KIAogaW50IGF0aDEwa19odHRfdHhfYWxsb2Moc3RydWN0IGF0aDEwa19odHQgKmh0dCkKIHsKIAlzdHJ1Y3QgYXRoMTBrICphciA9IGh0dC0+YXI7CiAKLQlzcGluX2xvY2tfaW5pdCgmaHR0LT50eF9sb2NrKTsKLQotCWlmICh0ZXN0X2JpdChBVEgxMEtfRldfRkVBVFVSRV9XTUlfMTBYLCBodHQtPmFyLT5md19mZWF0dXJlcykpCi0JCWh0dC0+bWF4X251bV9wZW5kaW5nX3R4ID0gVEFSR0VUXzEwWF9OVU1fTVNEVV9ERVNDOwotCWVsc2UKLQkJaHR0LT5tYXhfbnVtX3BlbmRpbmdfdHggPSBUQVJHRVRfTlVNX01TRFVfREVTQzsKLQogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfQk9PVCwgImh0dCB0eCBtYXggbnVtIHBlbmRpbmcgdHggJWRcbiIsCiAJCSAgIGh0dC0+bWF4X251bV9wZW5kaW5nX3R4KTsKIAotCWh0dC0+cGVuZGluZ190eCA9IGt6YWxsb2Moc2l6ZW9mKCpodHQtPnBlbmRpbmdfdHgpICoKLQkJCQkgIGh0dC0+bWF4X251bV9wZW5kaW5nX3R4LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWh0dC0+cGVuZGluZ190eCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlodHQtPnVzZWRfbXNkdV9pZHMgPSBremFsbG9jKHNpemVvZih1bnNpZ25lZCBsb25nKSAqCi0JCQkJICAgICBCSVRTX1RPX0xPTkdTKGh0dC0+bWF4X251bV9wZW5kaW5nX3R4KSwKLQkJCQkgICAgIEdGUF9LRVJORUwpOwotCWlmICghaHR0LT51c2VkX21zZHVfaWRzKSB7Ci0JCWtmcmVlKGh0dC0+cGVuZGluZ190eCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KKwlzcGluX2xvY2tfaW5pdCgmaHR0LT50eF9sb2NrKTsKKwlpZHJfaW5pdCgmaHR0LT5wZW5kaW5nX3R4KTsKIAogCWh0dC0+dHhfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSgiYXRoMTBrIGh0dCB0eCBwb29sIiwgaHR0LT5hci0+ZGV2LAogCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGF0aDEwa19odHRfdHhidWYpLCA0LCAwKTsKIAlpZiAoIWh0dC0+dHhfcG9vbCkgewotCQlrZnJlZShodHQtPnVzZWRfbXNkdV9pZHMpOwotCQlrZnJlZShodHQtPnBlbmRpbmdfdHgpOworCQlpZHJfZGVzdHJveSgmaHR0LT5wZW5kaW5nX3R4KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDEwa19odHRfdHhfZnJlZV9wZW5kaW5nKHN0cnVjdCBhdGgxMGtfaHR0ICpodHQpCitzdGF0aWMgaW50IGF0aDEwa19odHRfdHhfY2xlYW5fdXBfcGVuZGluZyhpbnQgbXNkdV9pZCwgdm9pZCAqc2tiLCB2b2lkICpjdHgpCiB7Ci0Jc3RydWN0IGF0aDEwayAqYXIgPSBodHQtPmFyOworCXN0cnVjdCBhdGgxMGsgKmFyID0gY3R4OworCXN0cnVjdCBhdGgxMGtfaHR0ICpodHQgPSAmYXItPmh0dDsKIAlzdHJ1Y3QgaHR0X3R4X2RvbmUgdHhfZG9uZSA9IHswfTsKLQlpbnQgbXNkdV9pZDsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfSFRULCAiZm9yY2UgY2xlYW51cCBtc2R1X2lkICVodVxuIiwgbXNkdV9pZCk7CisKKwl0eF9kb25lLmRpc2NhcmQgPSAxOworCXR4X2RvbmUubXNkdV9pZCA9IG1zZHVfaWQ7CiAKIAlzcGluX2xvY2tfYmgoJmh0dC0+dHhfbG9jayk7Ci0JZm9yIChtc2R1X2lkID0gMDsgbXNkdV9pZCA8IGh0dC0+bWF4X251bV9wZW5kaW5nX3R4OyBtc2R1X2lkKyspIHsKLQkJaWYgKCF0ZXN0X2JpdChtc2R1X2lkLCBodHQtPnVzZWRfbXNkdV9pZHMpKQotCQkJY29udGludWU7Ci0KLQkJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19IVFQsICJmb3JjZSBjbGVhbnVwIG1zZHVfaWQgJWh1XG4iLAotCQkJICAgbXNkdV9pZCk7Ci0KLQkJdHhfZG9uZS5kaXNjYXJkID0gMTsKLQkJdHhfZG9uZS5tc2R1X2lkID0gbXNkdV9pZDsKLQotCQlhdGgxMGtfdHhyeF90eF91bnJlZihodHQsICZ0eF9kb25lKTsKLQl9CisJYXRoMTBrX3R4cnhfdHhfdW5yZWYoaHR0LCAmdHhfZG9uZSk7CiAJc3Bpbl91bmxvY2tfYmgoJmh0dC0+dHhfbG9jayk7CisKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBhdGgxMGtfaHR0X3R4X2ZyZWUoc3RydWN0IGF0aDEwa19odHQgKmh0dCkKIHsKLQlhdGgxMGtfaHR0X3R4X2ZyZWVfcGVuZGluZyhodHQpOwotCWtmcmVlKGh0dC0+cGVuZGluZ190eCk7Ci0Ja2ZyZWUoaHR0LT51c2VkX21zZHVfaWRzKTsKKwlpZHJfZm9yX2VhY2goJmh0dC0+cGVuZGluZ190eCwgYXRoMTBrX2h0dF90eF9jbGVhbl91cF9wZW5kaW5nLCBodHQtPmFyKTsKKwlpZHJfZGVzdHJveSgmaHR0LT5wZW5kaW5nX3R4KTsKIAlkbWFfcG9vbF9kZXN0cm95KGh0dC0+dHhfcG9vbCk7CiB9CiAKQEAgLTM4MywxMyArMzU0LDEyIEBACiAJbGVuICs9IHNpemVvZihjbWQtPm1nbXRfdHgpOwogCiAJc3Bpbl9sb2NrX2JoKCZodHQtPnR4X2xvY2spOwotCXJlcyA9IGF0aDEwa19odHRfdHhfYWxsb2NfbXNkdV9pZChodHQpOworCXJlcyA9IGF0aDEwa19odHRfdHhfYWxsb2NfbXNkdV9pZChodHQsIG1zZHUpOwogCWlmIChyZXMgPCAwKSB7CiAJCXNwaW5fdW5sb2NrX2JoKCZodHQtPnR4X2xvY2spOwogCQlnb3RvIGVycl90eF9kZWM7CiAJfQogCW1zZHVfaWQgPSByZXM7Ci0JaHR0LT5wZW5kaW5nX3R4W21zZHVfaWRdID0gbXNkdTsKIAlzcGluX3VubG9ja19iaCgmaHR0LT50eF9sb2NrKTsKIAogCXR4ZGVzYyA9IGF0aDEwa19odGNfYWxsb2Nfc2tiKGFyLCBsZW4pOwpAQCAtNDI4LDcgKzM5OCw2IEBACiAJZGV2X2tmcmVlX3NrYl9hbnkodHhkZXNjKTsKIGVycl9mcmVlX21zZHVfaWQ6CiAJc3Bpbl9sb2NrX2JoKCZodHQtPnR4X2xvY2spOwotCWh0dC0+cGVuZGluZ190eFttc2R1X2lkXSA9IE5VTEw7CiAJYXRoMTBrX2h0dF90eF9mcmVlX21zZHVfaWQoaHR0LCBtc2R1X2lkKTsKIAlzcGluX3VubG9ja19iaCgmaHR0LT50eF9sb2NrKTsKIGVycl90eF9kZWM6CkBAIC00NjAsMTMgKzQyOSwxMiBAQAogCQlnb3RvIGVycjsKIAogCXNwaW5fbG9ja19iaCgmaHR0LT50eF9sb2NrKTsKLQlyZXMgPSBhdGgxMGtfaHR0X3R4X2FsbG9jX21zZHVfaWQoaHR0KTsKKwlyZXMgPSBhdGgxMGtfaHR0X3R4X2FsbG9jX21zZHVfaWQoaHR0LCBtc2R1KTsKIAlpZiAocmVzIDwgMCkgewogCQlzcGluX3VubG9ja19iaCgmaHR0LT50eF9sb2NrKTsKIAkJZ290byBlcnJfdHhfZGVjOwogCX0KIAltc2R1X2lkID0gcmVzOwotCWh0dC0+cGVuZGluZ190eFttc2R1X2lkXSA9IG1zZHU7CiAJc3Bpbl91bmxvY2tfYmgoJmh0dC0+dHhfbG9jayk7CiAKIAlwcmVmZXRjaF9sZW4gPSBtaW4oaHR0LT5wcmVmZXRjaF9sZW4sIG1zZHUtPmxlbik7CkBAIC00ODAsMTAgKzQ0OCwxOCBAQAogCiAJc2tiX2NiLT5odHQudHhidWYgPSBkbWFfcG9vbF9hbGxvYyhodHQtPnR4X3Bvb2wsIEdGUF9BVE9NSUMsCiAJCQkJCSAgICZwYWRkcik7Ci0JaWYgKCFza2JfY2ItPmh0dC50eGJ1ZikKKwlpZiAoIXNrYl9jYi0+aHR0LnR4YnVmKSB7CisJCXJlcyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2ZyZWVfbXNkdV9pZDsKKwl9CiAJc2tiX2NiLT5odHQudHhidWZfcGFkZHIgPSBwYWRkcjsKIAorCWlmICgoaWVlZTgwMjExX2lzX2FjdGlvbihoZHItPmZyYW1lX2NvbnRyb2wpIHx8CisJICAgICBpZWVlODAyMTFfaXNfZGVhdXRoKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKKwkgICAgIGllZWU4MDIxMV9pc19kaXNhc3NvYyhoZHItPmZyYW1lX2NvbnRyb2wpKSAmJgorCSAgICAgaWVlZTgwMjExX2hhc19wcm90ZWN0ZWQoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJc2tiX3B1dChtc2R1LCBJRUVFODAyMTFfQ0NNUF9NSUNfTEVOKTsKKwogCXNrYl9jYi0+cGFkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYsIG1zZHUtPmRhdGEsIG1zZHUtPmxlbiwKIAkJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CiAJcmVzID0gZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBza2JfY2ItPnBhZGRyKTsKQEAgLTUzOSw4ICs1MTUsMTAgQEAKIAogCWZsYWdzMSB8PSBTTSgodTE2KXZkZXZfaWQsIEhUVF9EQVRBX1RYX0RFU0NfRkxBR1MxX1ZERVZfSUQpOwogCWZsYWdzMSB8PSBTTSgodTE2KXRpZCwgSFRUX0RBVEFfVFhfREVTQ19GTEFHUzFfRVhUX1RJRCk7Ci0JZmxhZ3MxIHw9IEhUVF9EQVRBX1RYX0RFU0NfRkxBR1MxX0NLU1VNX0wzX09GRkxPQUQ7Ci0JZmxhZ3MxIHw9IEhUVF9EQVRBX1RYX0RFU0NfRkxBR1MxX0NLU1VNX0w0X09GRkxPQUQ7CisJaWYgKG1zZHUtPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCWZsYWdzMSB8PSBIVFRfREFUQV9UWF9ERVNDX0ZMQUdTMV9DS1NVTV9MM19PRkZMT0FEOworCQlmbGFnczEgfD0gSFRUX0RBVEFfVFhfREVTQ19GTEFHUzFfQ0tTVU1fTDRfT0ZGTE9BRDsKKwl9CiAKIAkvKiBQcmV2ZW50IGZpcm13YXJlIGZyb20gc2VuZGluZyB1cCB0eCBpbnNwZWN0aW9uIHJlcXVlc3RzLiBUaGVyZSdzCiAJICogbm90aGluZyBhdGgxMGsgY2FuIGRvIHdpdGggZnJhbWVzIHJlcXVlc3RlZCBmb3IgaW5zcGVjdGlvbiBzbyBmb3JjZQpAQCAtNTk4LDcgKzU3Niw2IEBACiAJCSAgICAgIHNrYl9jYi0+aHR0LnR4YnVmX3BhZGRyKTsKIGVycl9mcmVlX21zZHVfaWQ6CiAJc3Bpbl9sb2NrX2JoKCZodHQtPnR4X2xvY2spOwotCWh0dC0+cGVuZGluZ190eFttc2R1X2lkXSA9IE5VTEw7CiAJYXRoMTBrX2h0dF90eF9mcmVlX21zZHVfaWQoaHR0LCBtc2R1X2lkKTsKIAlzcGluX3VubG9ja19iaCgmaHR0LT50eF9sb2NrKTsKIGVycl90eF9kZWM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5YTg3OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHcuYwpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUgUXVhbGNvbW0gQXRoZXJvcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgImh3LmgiCisKK2NvbnN0IHN0cnVjdCBhdGgxMGtfaHdfcmVncyBxY2E5ODh4X3JlZ3MgPSB7CisJLnJ0Y19zdGF0ZV9jb2xkX3Jlc2V0X21hc2sJPSAweDAwMDAwNDAwLAorCS5ydGNfc29jX2Jhc2VfYWRkcmVzcwkJPSAweDAwMDA0MDAwLAorCS5ydGNfd21hY19iYXNlX2FkZHJlc3MJCT0gMHgwMDAwNTAwMCwKKwkuc29jX2NvcmVfYmFzZV9hZGRyZXNzCQk9IDB4MDAwMDkwMDAsCisJLmNlX3dyYXBwZXJfYmFzZV9hZGRyZXNzCT0gMHgwMDA1NzAwMCwKKwkuY2UwX2Jhc2VfYWRkcmVzcwkJPSAweDAwMDU3NDAwLAorCS5jZTFfYmFzZV9hZGRyZXNzCQk9IDB4MDAwNTc4MDAsCisJLmNlMl9iYXNlX2FkZHJlc3MJCT0gMHgwMDA1N2MwMCwKKwkuY2UzX2Jhc2VfYWRkcmVzcwkJPSAweDAwMDU4MDAwLAorCS5jZTRfYmFzZV9hZGRyZXNzCQk9IDB4MDAwNTg0MDAsCisJLmNlNV9iYXNlX2FkZHJlc3MJCT0gMHgwMDA1ODgwMCwKKwkuY2U2X2Jhc2VfYWRkcmVzcwkJPSAweDAwMDU4YzAwLAorCS5jZTdfYmFzZV9hZGRyZXNzCQk9IDB4MDAwNTkwMDAsCisJLnNvY19yZXNldF9jb250cm9sX3NpMF9yc3RfbWFzawk9IDB4MDAwMDAwMDEsCisJLnNvY19yZXNldF9jb250cm9sX2NlX3JzdF9tYXNrCT0gMHgwMDA0MDAwMCwKKwkuc29jX2NoaXBfaWRfYWRkcmVzcwkJPSAweDAwZWMsCisJLnNjcmF0Y2hfM19hZGRyZXNzCQk9IDB4MDAzMCwKK307CisKK2NvbnN0IHN0cnVjdCBhdGgxMGtfaHdfcmVncyBxY2E2MTc0X3JlZ3MgPSB7CisJLnJ0Y19zdGF0ZV9jb2xkX3Jlc2V0X21hc2sJCT0gMHgwMDAwMjAwMCwKKwkucnRjX3NvY19iYXNlX2FkZHJlc3MJCQk9IDB4MDAwMDA4MDAsCisJLnJ0Y193bWFjX2Jhc2VfYWRkcmVzcwkJCT0gMHgwMDAwMTAwMCwKKwkuc29jX2NvcmVfYmFzZV9hZGRyZXNzCQkJPSAweDAwMDNhMDAwLAorCS5jZV93cmFwcGVyX2Jhc2VfYWRkcmVzcwkJPSAweDAwMDM0MDAwLAorCS5jZTBfYmFzZV9hZGRyZXNzCQkJPSAweDAwMDM0NDAwLAorCS5jZTFfYmFzZV9hZGRyZXNzCQkJPSAweDAwMDM0ODAwLAorCS5jZTJfYmFzZV9hZGRyZXNzCQkJPSAweDAwMDM0YzAwLAorCS5jZTNfYmFzZV9hZGRyZXNzCQkJPSAweDAwMDM1MDAwLAorCS5jZTRfYmFzZV9hZGRyZXNzCQkJPSAweDAwMDM1NDAwLAorCS5jZTVfYmFzZV9hZGRyZXNzCQkJPSAweDAwMDM1ODAwLAorCS5jZTZfYmFzZV9hZGRyZXNzCQkJPSAweDAwMDM1YzAwLAorCS5jZTdfYmFzZV9hZGRyZXNzCQkJPSAweDAwMDM2MDAwLAorCS5zb2NfcmVzZXRfY29udHJvbF9zaTBfcnN0X21hc2sJCT0gMHgwMDAwMDAwMCwKKwkuc29jX3Jlc2V0X2NvbnRyb2xfY2VfcnN0X21hc2sJCT0gMHgwMDAwMDAwMSwKKwkuc29jX2NoaXBfaWRfYWRkcmVzcwkJCT0gMHgwMDBmMCwKKwkuc2NyYXRjaF8zX2FkZHJlc3MJCQk9IDB4MDAyOCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL2h3LmgKaW5kZXggZGZlZGZkMC4uNDYwNzcxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvaHcuaApAQCAtMzQsOSArMzQsNTAgQEAKICNkZWZpbmUgUUNBOTg4WF9IV18yXzBfQk9BUkRfREFUQV9GSUxFCSJib2FyZC5iaW4iCiAjZGVmaW5lIFFDQTk4OFhfSFdfMl8wX1BBVENIX0xPQURfQUREUgkweDEyMzQKIAorLyogUUNBNjE3NCB0YXJnZXQgQk1JIHZlcnNpb24gc2lnbmF0dXJlcyAqLworI2RlZmluZSBRQ0E2MTc0X0hXXzFfMF9WRVJTSU9OCQkweDA1MDAwMDAwCisjZGVmaW5lIFFDQTYxNzRfSFdfMV8xX1ZFUlNJT04JCTB4MDUwMDAwMDEKKyNkZWZpbmUgUUNBNjE3NF9IV18xXzNfVkVSU0lPTgkJMHgwNTAwMDAwMworI2RlZmluZSBRQ0E2MTc0X0hXXzJfMV9WRVJTSU9OCQkweDA1MDEwMDAwCisjZGVmaW5lIFFDQTYxNzRfSFdfM18wX1ZFUlNJT04JCTB4MDUwMjAwMDAKKyNkZWZpbmUgUUNBNjE3NF9IV18zXzJfVkVSU0lPTgkJMHgwNTAzMDAwMAorCitlbnVtIHFjYTYxNzRfcGNpX3JldiB7CisJUUNBNjE3NF9QQ0lfUkVWXzFfMSA9IDB4MTEsCisJUUNBNjE3NF9QQ0lfUkVWXzFfMyA9IDB4MTMsCisJUUNBNjE3NF9QQ0lfUkVWXzJfMCA9IDB4MjAsCisJUUNBNjE3NF9QQ0lfUkVWXzNfMCA9IDB4MzAsCit9OworCitlbnVtIHFjYTYxNzRfY2hpcF9pZF9yZXYgeworCVFDQTYxNzRfSFdfMV8wX0NISVBfSURfUkVWID0gMCwKKwlRQ0E2MTc0X0hXXzFfMV9DSElQX0lEX1JFViA9IDEsCisJUUNBNjE3NF9IV18xXzNfQ0hJUF9JRF9SRVYgPSAyLAorCVFDQTYxNzRfSFdfMl8xX0NISVBfSURfUkVWID0gNCwKKwlRQ0E2MTc0X0hXXzJfMl9DSElQX0lEX1JFViA9IDUsCisJUUNBNjE3NF9IV18zXzBfQ0hJUF9JRF9SRVYgPSA4LAorCVFDQTYxNzRfSFdfM18xX0NISVBfSURfUkVWID0gOSwKKwlRQ0E2MTc0X0hXXzNfMl9DSElQX0lEX1JFViA9IDEwLAorfTsKKworI2RlZmluZSBRQ0E2MTc0X0hXXzJfMV9GV19ESVIJCSJhdGgxMGsvUUNBNjE3NC9odzIuMSIKKyNkZWZpbmUgUUNBNjE3NF9IV18yXzFfRldfRklMRQkJImZpcm13YXJlLmJpbiIKKyNkZWZpbmUgUUNBNjE3NF9IV18yXzFfT1RQX0ZJTEUJCSJvdHAuYmluIgorI2RlZmluZSBRQ0E2MTc0X0hXXzJfMV9CT0FSRF9EQVRBX0ZJTEUJImJvYXJkLmJpbiIKKyNkZWZpbmUgUUNBNjE3NF9IV18yXzFfUEFUQ0hfTE9BRF9BRERSCTB4MTIzNAorCisjZGVmaW5lIFFDQTYxNzRfSFdfM18wX0ZXX0RJUgkJImF0aDEway9RQ0E2MTc0L2h3My4wIgorI2RlZmluZSBRQ0E2MTc0X0hXXzNfMF9GV19GSUxFCQkiZmlybXdhcmUuYmluIgorI2RlZmluZSBRQ0E2MTc0X0hXXzNfMF9PVFBfRklMRQkJIm90cC5iaW4iCisjZGVmaW5lIFFDQTYxNzRfSFdfM18wX0JPQVJEX0RBVEFfRklMRQkiYm9hcmQuYmluIgorI2RlZmluZSBRQ0E2MTc0X0hXXzNfMF9QQVRDSF9MT0FEX0FERFIJMHgxMjM0CisKICNkZWZpbmUgQVRIMTBLX0ZXX0FQSTJfRklMRQkJImZpcm13YXJlLTIuYmluIgogI2RlZmluZSBBVEgxMEtfRldfQVBJM19GSUxFCQkiZmlybXdhcmUtMy5iaW4iCiAKKy8qIGFkZGVkIHN1cHBvcnQgZm9yIEFUSDEwS19GV19JRV9XTUlfT1BfVkVSU0lPTiAqLworI2RlZmluZSBBVEgxMEtfRldfQVBJNF9GSUxFCQkiZmlybXdhcmUtNC5iaW4iCisKICNkZWZpbmUgQVRIMTBLX0ZXX1VURl9GSUxFCQkidXRmLmJpbiIKIAogLyogaW5jbHVkZXMgYWxzbyB0aGUgbnVsbCBieXRlICovCkBAIC01OCw4ICs5OSw1NyBAQAogCUFUSDEwS19GV19JRV9GRUFUVVJFUyA9IDIsCiAJQVRIMTBLX0ZXX0lFX0ZXX0lNQUdFID0gMywKIAlBVEgxMEtfRldfSUVfT1RQX0lNQUdFID0gNCwKKworCS8qIFdNSSAib3BlcmF0aW9ucyIgaW50ZXJmYWNlIHZlcnNpb24sIDMyIGJpdCB2YWx1ZS4gU3VwcG9ydGVkIGZyb20KKwkgKiBGVyBBUEkgNCBhbmQgYWJvdmUuCisJICovCisJQVRIMTBLX0ZXX0lFX1dNSV9PUF9WRVJTSU9OID0gNSwKIH07CiAKK2VudW0gYXRoMTBrX2Z3X3dtaV9vcF92ZXJzaW9uIHsKKwlBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fVU5TRVQgPSAwLAorCisJQVRIMTBLX0ZXX1dNSV9PUF9WRVJTSU9OX01BSU4gPSAxLAorCUFUSDEwS19GV19XTUlfT1BfVkVSU0lPTl8xMF8xID0gMiwKKwlBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fMTBfMiA9IDMsCisJQVRIMTBLX0ZXX1dNSV9PUF9WRVJTSU9OX1RMViA9IDQsCisJQVRIMTBLX0ZXX1dNSV9PUF9WRVJTSU9OXzEwXzJfNCA9IDUsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fTUFYLAorfTsKKworZW51bSBhdGgxMGtfaHdfcmV2IHsKKwlBVEgxMEtfSFdfUUNBOTg4WCwKKwlBVEgxMEtfSFdfUUNBNjE3NCwKK307CisKK3N0cnVjdCBhdGgxMGtfaHdfcmVncyB7CisJdTMyIHJ0Y19zdGF0ZV9jb2xkX3Jlc2V0X21hc2s7CisJdTMyIHJ0Y19zb2NfYmFzZV9hZGRyZXNzOworCXUzMiBydGNfd21hY19iYXNlX2FkZHJlc3M7CisJdTMyIHNvY19jb3JlX2Jhc2VfYWRkcmVzczsKKwl1MzIgY2Vfd3JhcHBlcl9iYXNlX2FkZHJlc3M7CisJdTMyIGNlMF9iYXNlX2FkZHJlc3M7CisJdTMyIGNlMV9iYXNlX2FkZHJlc3M7CisJdTMyIGNlMl9iYXNlX2FkZHJlc3M7CisJdTMyIGNlM19iYXNlX2FkZHJlc3M7CisJdTMyIGNlNF9iYXNlX2FkZHJlc3M7CisJdTMyIGNlNV9iYXNlX2FkZHJlc3M7CisJdTMyIGNlNl9iYXNlX2FkZHJlc3M7CisJdTMyIGNlN19iYXNlX2FkZHJlc3M7CisJdTMyIHNvY19yZXNldF9jb250cm9sX3NpMF9yc3RfbWFzazsKKwl1MzIgc29jX3Jlc2V0X2NvbnRyb2xfY2VfcnN0X21hc2s7CisJdTMyIHNvY19jaGlwX2lkX2FkZHJlc3M7CisJdTMyIHNjcmF0Y2hfM19hZGRyZXNzOworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBhdGgxMGtfaHdfcmVncyBxY2E5ODh4X3JlZ3M7CitleHRlcm4gY29uc3Qgc3RydWN0IGF0aDEwa19od19yZWdzIHFjYTYxNzRfcmVnczsKKworI2RlZmluZSBRQ0FfUkVWXzk4OFgoYXIpICgoYXIpLT5od19yZXYgPT0gQVRIMTBLX0hXX1FDQTk4OFgpCisjZGVmaW5lIFFDQV9SRVZfNjE3NChhcikgKChhciktPmh3X3JldiA9PSBBVEgxMEtfSFdfUUNBNjE3NCkKKwogLyogS25vd24gcGVjdWxhcml0aWVzOgogICogIC0gY3VycmVudCBGVyBkb2Vzbid0IHN1cHBvcnQgcmF3IHJ4IG1vZGUgKGxhc3QgdGVzdGVkIHY1OTkpCiAgKiAgLSBjdXJyZW50IEZXIGR1bXBzIHVwb24gcmF3IHR4IG1vZGUgKGxhc3QgdGVzdGVkIHY1OTkpCkBAIC0xNjIsNiArMjUyLDE4IEBACiAjZGVmaW5lIFRBUkdFVF8xMFhfTlVNX01TRFVfREVTQwkJKDEwMjQgKyA0MDApCiAjZGVmaW5lIFRBUkdFVF8xMFhfTUFYX0ZSQUdfRU5UUklFUwkJMAogCisvKiAxMC4yIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgVEFSR0VUXzEwXzJfRE1BX0JVUlNUX1NJWkUJCTEKKworLyogVGFyZ2V0IHNwZWNpZmljIGRlZmluZXMgZm9yIFdNSS1UTFYgZmlybXdhcmUgKi8KKyNkZWZpbmUgVEFSR0VUX1RMVl9OVU1fVkRFVlMJCQkzCisjZGVmaW5lIFRBUkdFVF9UTFZfTlVNX1NUQVRJT05TCQkJMzIKKyNkZWZpbmUgVEFSR0VUX1RMVl9OVU1fUEVFUlMJCQkoKFRBUkdFVF9UTFZfTlVNX1NUQVRJT05TKSArIFwKKwkJCQkJCSAoVEFSR0VUX1RMVl9OVU1fVkRFVlMpICsgXAorCQkJCQkJIDIpCisjZGVmaW5lIFRBUkdFVF9UTFZfTlVNX1RJRFMJCQkoKFRBUkdFVF9UTFZfTlVNX1BFRVJTKSAqIDIpCisjZGVmaW5lIFRBUkdFVF9UTFZfTlVNX01TRFVfREVTQwkJKDEwMjQgKyAzMikKKwogLyogTnVtYmVyIG9mIENvcHkgRW5naW5lcyBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgQ0VfQ09VTlQgOAogCkBAIC0xOTIsNyArMjk0LDcgQEAKIC8qIGFzIG9mIElQMy43LjEgKi8KICNkZWZpbmUgUlRDX1NUQVRFX1ZfT04JCQkJMwogCi0jZGVmaW5lIFJUQ19TVEFURV9DT0xEX1JFU0VUX01BU0sJCTB4MDAwMDA0MDAKKyNkZWZpbmUgUlRDX1NUQVRFX0NPTERfUkVTRVRfTUFTSwkJYXItPnJlZ3MtPnJ0Y19zdGF0ZV9jb2xkX3Jlc2V0X21hc2sKICNkZWZpbmUgUlRDX1NUQVRFX1ZfTFNCCQkJCTAKICNkZWZpbmUgUlRDX1NUQVRFX1ZfTUFTSwkJCTB4MDAwMDAwMDcKICNkZWZpbmUgUlRDX1NUQVRFX0FERFJFU1MJCQkweDAwMDAKQEAgLTIwMSwxMiArMzAzLDEyIEBACiAjZGVmaW5lIFBDSUVfU09DX1dBS0VfUkVTRVQJCQkweDAwMDAwMDAwCiAjZGVmaW5lIFNPQ19HTE9CQUxfUkVTRVRfQUREUkVTUwkJMHgwMDA4CiAKLSNkZWZpbmUgUlRDX1NPQ19CQVNFX0FERFJFU1MJCQkweDAwMDA0MDAwCi0jZGVmaW5lIFJUQ19XTUFDX0JBU0VfQUREUkVTUwkJCTB4MDAwMDUwMDAKKyNkZWZpbmUgUlRDX1NPQ19CQVNFX0FERFJFU1MJCQlhci0+cmVncy0+cnRjX3NvY19iYXNlX2FkZHJlc3MKKyNkZWZpbmUgUlRDX1dNQUNfQkFTRV9BRERSRVNTCQkJYXItPnJlZ3MtPnJ0Y193bWFjX2Jhc2VfYWRkcmVzcwogI2RlZmluZSBNQUNfQ09FWF9CQVNFX0FERFJFU1MJCQkweDAwMDA2MDAwCiAjZGVmaW5lIEJUX0NPRVhfQkFTRV9BRERSRVNTCQkJMHgwMDAwNzAwMAogI2RlZmluZSBTT0NfUENJRV9CQVNFX0FERFJFU1MJCQkweDAwMDA4MDAwCi0jZGVmaW5lIFNPQ19DT1JFX0JBU0VfQUREUkVTUwkJCTB4MDAwMDkwMDAKKyNkZWZpbmUgU09DX0NPUkVfQkFTRV9BRERSRVNTCQkJYXItPnJlZ3MtPnNvY19jb3JlX2Jhc2VfYWRkcmVzcwogI2RlZmluZSBXTEFOX1VBUlRfQkFTRV9BRERSRVNTCQkJMHgwMDAwYzAwMAogI2RlZmluZSBXTEFOX1NJX0JBU0VfQUREUkVTUwkJCTB4MDAwMTAwMDAKICNkZWZpbmUgV0xBTl9HUElPX0JBU0VfQUREUkVTUwkJCTB4MDAwMTQwMDAKQEAgLTIxNSwyMyArMzE3LDIzIEBACiAjZGVmaW5lIEVGVVNFX0JBU0VfQUREUkVTUwkJCTB4MDAwMzAwMDAKICNkZWZpbmUgRlBHQV9SRUdfQkFTRV9BRERSRVNTCQkJMHgwMDAzOTAwMAogI2RlZmluZSBXTEFOX1VBUlQyX0JBU0VfQUREUkVTUwkJCTB4MDAwNTRjMDAKLSNkZWZpbmUgQ0VfV1JBUFBFUl9CQVNFX0FERFJFU1MJCQkweDAwMDU3MDAwCi0jZGVmaW5lIENFMF9CQVNFX0FERFJFU1MJCQkweDAwMDU3NDAwCi0jZGVmaW5lIENFMV9CQVNFX0FERFJFU1MJCQkweDAwMDU3ODAwCi0jZGVmaW5lIENFMl9CQVNFX0FERFJFU1MJCQkweDAwMDU3YzAwCi0jZGVmaW5lIENFM19CQVNFX0FERFJFU1MJCQkweDAwMDU4MDAwCi0jZGVmaW5lIENFNF9CQVNFX0FERFJFU1MJCQkweDAwMDU4NDAwCi0jZGVmaW5lIENFNV9CQVNFX0FERFJFU1MJCQkweDAwMDU4ODAwCi0jZGVmaW5lIENFNl9CQVNFX0FERFJFU1MJCQkweDAwMDU4YzAwCi0jZGVmaW5lIENFN19CQVNFX0FERFJFU1MJCQkweDAwMDU5MDAwCisjZGVmaW5lIENFX1dSQVBQRVJfQkFTRV9BRERSRVNTCQkJYXItPnJlZ3MtPmNlX3dyYXBwZXJfYmFzZV9hZGRyZXNzCisjZGVmaW5lIENFMF9CQVNFX0FERFJFU1MJCQlhci0+cmVncy0+Y2UwX2Jhc2VfYWRkcmVzcworI2RlZmluZSBDRTFfQkFTRV9BRERSRVNTCQkJYXItPnJlZ3MtPmNlMV9iYXNlX2FkZHJlc3MKKyNkZWZpbmUgQ0UyX0JBU0VfQUREUkVTUwkJCWFyLT5yZWdzLT5jZTJfYmFzZV9hZGRyZXNzCisjZGVmaW5lIENFM19CQVNFX0FERFJFU1MJCQlhci0+cmVncy0+Y2UzX2Jhc2VfYWRkcmVzcworI2RlZmluZSBDRTRfQkFTRV9BRERSRVNTCQkJYXItPnJlZ3MtPmNlNF9iYXNlX2FkZHJlc3MKKyNkZWZpbmUgQ0U1X0JBU0VfQUREUkVTUwkJCWFyLT5yZWdzLT5jZTVfYmFzZV9hZGRyZXNzCisjZGVmaW5lIENFNl9CQVNFX0FERFJFU1MJCQlhci0+cmVncy0+Y2U2X2Jhc2VfYWRkcmVzcworI2RlZmluZSBDRTdfQkFTRV9BRERSRVNTCQkJYXItPnJlZ3MtPmNlN19iYXNlX2FkZHJlc3MKICNkZWZpbmUgREJJX0JBU0VfQUREUkVTUwkJCTB4MDAwNjAwMDAKICNkZWZpbmUgV0xBTl9BTkFMT0dfSU5URl9QQ0lFX0JBU0VfQUREUkVTUwkweDAwMDZjMDAwCiAjZGVmaW5lIFBDSUVfTE9DQUxfQkFTRV9BRERSRVNTCQkJMHgwMDA4MDAwMAogCiAjZGVmaW5lIFNPQ19SRVNFVF9DT05UUk9MX0FERFJFU1MJCTB4MDAwMDAwMDAKICNkZWZpbmUgU09DX1JFU0VUX0NPTlRST0xfT0ZGU0VUCQkweDAwMDAwMDAwCi0jZGVmaW5lIFNPQ19SRVNFVF9DT05UUk9MX1NJMF9SU1RfTUFTSwkJMHgwMDAwMDAwMQotI2RlZmluZSBTT0NfUkVTRVRfQ09OVFJPTF9DRV9SU1RfTUFTSwkJMHgwMDA0MDAwMAorI2RlZmluZSBTT0NfUkVTRVRfQ09OVFJPTF9TSTBfUlNUX01BU0sJCWFyLT5yZWdzLT5zb2NfcmVzZXRfY29udHJvbF9zaTBfcnN0X21hc2sKKyNkZWZpbmUgU09DX1JFU0VUX0NPTlRST0xfQ0VfUlNUX01BU0sJCWFyLT5yZWdzLT5zb2NfcmVzZXRfY29udHJvbF9jZV9yc3RfbWFzawogI2RlZmluZSBTT0NfUkVTRVRfQ09OVFJPTF9DUFVfV0FSTV9SU1RfTUFTSwkweDAwMDAwMDQwCiAjZGVmaW5lIFNPQ19DUFVfQ0xPQ0tfT0ZGU0VUCQkJMHgwMDAwMDAyMAogI2RlZmluZSBTT0NfQ1BVX0NMT0NLX1NUQU5EQVJEX0xTQgkJMApAQCAtMjQ1LDcgKzM0Nyw3IEBACiAjZGVmaW5lIFNPQ19MRl9USU1FUl9DT05UUk9MMF9BRERSRVNTCQkweDAwMDAwMDUwCiAjZGVmaW5lIFNPQ19MRl9USU1FUl9DT05UUk9MMF9FTkFCTEVfTUFTSwkweDAwMDAwMDA0CiAKLSNkZWZpbmUgU09DX0NISVBfSURfQUREUkVTUwkJCTB4MDAwMDAwZWMKKyNkZWZpbmUgU09DX0NISVBfSURfQUREUkVTUwkJCWFyLT5yZWdzLT5zb2NfY2hpcF9pZF9hZGRyZXNzCiAjZGVmaW5lIFNPQ19DSElQX0lEX1JFVl9MU0IJCQk4CiAjZGVmaW5lIFNPQ19DSElQX0lEX1JFVl9NQVNLCQkJMHgwMDAwMGYwMAogCkBAIC0zMDEsNyArNDAzLDcgQEAKICNkZWZpbmUgUENJRV9JTlRSX0VOQUJMRV9BRERSRVNTCQkweDAwMDgKICNkZWZpbmUgUENJRV9JTlRSX0NBVVNFX0FERFJFU1MJCQkweDAwMGMKICNkZWZpbmUgUENJRV9JTlRSX0NMUl9BRERSRVNTCQkJMHgwMDE0Ci0jZGVmaW5lIFNDUkFUQ0hfM19BRERSRVNTCQkJMHgwMDMwCisjZGVmaW5lIFNDUkFUQ0hfM19BRERSRVNTCQkJYXItPnJlZ3MtPnNjcmF0Y2hfM19hZGRyZXNzCiAjZGVmaW5lIENQVV9JTlRSX0FERFJFU1MJCQkweDAwMTAKIAogLyogRmlybXdhcmUgaW5kaWNhdGlvbnMgdG8gdGhlIEhvc3QgdmlhIFNDUkFUQ0hfMyByZWdpc3Rlci4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL21hYy5jCmluZGV4IGM0MDA1NjcuLmQ2ZDJmMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9tYWMuYwpAQCAtMjcsNiArMjcsOCBAQAogI2luY2x1ZGUgImh0dC5oIgogI2luY2x1ZGUgInR4cnguaCIKICNpbmNsdWRlICJ0ZXN0bW9kZS5oIgorI2luY2x1ZGUgIndtaS5oIgorI2luY2x1ZGUgIndtaS1vcHMuaCIKIAogLyoqKioqKioqKiovCiAvKiBDcnlwdG8gKi8KQEAgLTM1LDcgKzM3LDcgQEAKIHN0YXRpYyBpbnQgYXRoMTBrX3NlbmRfa2V5KHN0cnVjdCBhdGgxMGtfdmlmICphcnZpZiwKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwKIAkJCSAgIGVudW0gc2V0X2tleV9jbWQgY21kLAotCQkJICAgY29uc3QgdTggKm1hY2FkZHIpCisJCQkgICBjb25zdCB1OCAqbWFjYWRkciwgYm9vbCBkZWZfaWR4KQogewogCXN0cnVjdCBhdGgxMGsgKmFyID0gYXJ2aWYtPmFyOwogCXN0cnVjdCB3bWlfdmRldl9pbnN0YWxsX2tleV9hcmcgYXJnID0gewpAQCAtNTYsMTAgKzU4LDcgQEAKIAlzd2l0Y2ggKGtleS0+Y2lwaGVyKSB7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgogCQlhcmcua2V5X2NpcGhlciA9IFdNSV9DSVBIRVJfQUVTX0NDTTsKLQkJaWYgKGFydmlmLT52ZGV2X3R5cGUgPT0gV01JX1ZERVZfVFlQRV9BUCkKLQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWX01HTVQ7Ci0JCWVsc2UKLQkJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1NXX01HTVRfVFg7CisJCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWX01HTVQ7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKIAkJYXJnLmtleV9jaXBoZXIgPSBXTUlfQ0lQSEVSX1RLSVA7CkBAIC03Myw3ICs3MiwxMyBAQAogCQkgKiBPdGhlcndpc2UgcGFpcndpc2Uga2V5IG11c3QgYmUgc2V0ICovCiAJCWlmIChtZW1jbXAobWFjYWRkciwgYXJ2aWYtPnZpZi0+YWRkciwgRVRIX0FMRU4pKQogCQkJYXJnLmtleV9mbGFncyA9IFdNSV9LRVlfUEFJUldJU0U7CisKKwkJaWYgKGRlZl9pZHgpCisJCQlhcmcua2V5X2ZsYWdzIHw9IFdNSV9LRVlfVFhfVVNBR0U7CiAJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6CisJCS8qIHRoaXMgb25lIG5lZWRzIHRvIGJlIGRvbmUgaW4gc29mdHdhcmUgKi8KKwkJcmV0dXJuIDE7CiAJZGVmYXVsdDoKIAkJYXRoMTBrX3dhcm4oYXIsICJjaXBoZXIgJWQgaXMgbm90IHN1cHBvcnRlZFxuIiwga2V5LT5jaXBoZXIpOwogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC05MCw3ICs5NSw3IEBACiBzdGF0aWMgaW50IGF0aDEwa19pbnN0YWxsX2tleShzdHJ1Y3QgYXRoMTBrX3ZpZiAqYXJ2aWYsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXksCiAJCQkgICAgICBlbnVtIHNldF9rZXlfY21kIGNtZCwKLQkJCSAgICAgIGNvbnN0IHU4ICptYWNhZGRyKQorCQkJICAgICAgY29uc3QgdTggKm1hY2FkZHIsIGJvb2wgZGVmX2lkeCkKIHsKIAlzdHJ1Y3QgYXRoMTBrICphciA9IGFydmlmLT5hcjsKIAlpbnQgcmV0OwpAQCAtOTksNyArMTA0LDcgQEAKIAogCXJlaW5pdF9jb21wbGV0aW9uKCZhci0+aW5zdGFsbF9rZXlfZG9uZSk7CiAKLQlyZXQgPSBhdGgxMGtfc2VuZF9rZXkoYXJ2aWYsIGtleSwgY21kLCBtYWNhZGRyKTsKKwlyZXQgPSBhdGgxMGtfc2VuZF9rZXkoYXJ2aWYsIGtleSwgY21kLCBtYWNhZGRyLCBkZWZfaWR4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMTcsNiArMTIyLDcgQEAKIAlzdHJ1Y3QgYXRoMTBrX3BlZXIgKnBlZXI7CiAJaW50IHJldDsKIAlpbnQgaTsKKwlib29sIGRlZl9pZHg7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhci0+Y29uZl9tdXRleCk7CiAKQEAgLTEzMCw5ICsxMzYsMTQgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcnZpZi0+d2VwX2tleXMpOyBpKyspIHsKIAkJaWYgKGFydmlmLT53ZXBfa2V5c1tpXSA9PSBOVUxMKQogCQkJY29udGludWU7CisJCS8qIHNldCBUWF9VU0FHRSBmbGFnIGZvciBkZWZhdWx0IGtleSBpZCAqLworCQlpZiAoYXJ2aWYtPmRlZl93ZXBfa2V5X2lkeCA9PSBpKQorCQkJZGVmX2lkeCA9IHRydWU7CisJCWVsc2UKKwkJCWRlZl9pZHggPSBmYWxzZTsKIAogCQlyZXQgPSBhdGgxMGtfaW5zdGFsbF9rZXkoYXJ2aWYsIGFydmlmLT53ZXBfa2V5c1tpXSwgU0VUX0tFWSwKLQkJCQkJIGFkZHIpOworCQkJCQkgYWRkciwgZGVmX2lkeCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCkBAIC0xNjYsOCArMTc3LDkgQEAKIAkJaWYgKHBlZXItPmtleXNbaV0gPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCisJCS8qIGtleSBmbGFncyBhcmUgbm90IHJlcXVpcmVkIHRvIGRlbGV0ZSB0aGUga2V5ICovCiAJCXJldCA9IGF0aDEwa19pbnN0YWxsX2tleShhcnZpZiwgcGVlci0+a2V5c1tpXSwKLQkJCQkJIERJU0FCTEVfS0VZLCBhZGRyKTsKKwkJCQkJIERJU0FCTEVfS0VZLCBhZGRyLCBmYWxzZSk7CiAJCWlmIChyZXQgJiYgZmlyc3RfZXJybm8gPT0gMCkKIAkJCWZpcnN0X2Vycm5vID0gcmV0OwogCkBAIC0yNDEsOCArMjUzLDggQEAKIAogCQlpZiAoaSA9PSBBUlJBWV9TSVpFKHBlZXItPmtleXMpKQogCQkJYnJlYWs7Ci0KLQkJcmV0ID0gYXRoMTBrX2luc3RhbGxfa2V5KGFydmlmLCBrZXksIERJU0FCTEVfS0VZLCBhZGRyKTsKKwkJLyoga2V5IGZsYWdzIGFyZSBub3QgcmVxdWlyZWQgdG8gZGVsZXRlIHRoZSBrZXkgKi8KKwkJcmV0ID0gYXRoMTBrX2luc3RhbGxfa2V5KGFydmlmLCBrZXksIERJU0FCTEVfS0VZLCBhZGRyLCBmYWxzZSk7CiAJCWlmIChyZXQgJiYgZmlyc3RfZXJybm8gPT0gMCkKIAkJCWZpcnN0X2Vycm5vID0gcmV0OwogCkBAIC0yNjcsNyArMjc5LDEwIEBACiAJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgogCQlzd2l0Y2ggKGNoYW5kZWYtPndpZHRoKSB7CiAJCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRIXzIwX05PSFQ6Ci0JCQlwaHltb2RlID0gTU9ERV8xMUc7CisJCQlpZiAoY2hhbmRlZi0+Y2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19PRkRNKQorCQkJCXBoeW1vZGUgPSBNT0RFXzExQjsKKwkJCWVsc2UKKwkJCQlwaHltb2RlID0gTU9ERV8xMUc7CiAJCQlicmVhazsKIAkJY2FzZSBOTDgwMjExX0NIQU5fV0lEVEhfMjA6CiAJCQlwaHltb2RlID0gTU9ERV8xMU5HX0hUMjA7CkBAIC01MTksMTAgKzUzNCwxNCBAQAogCQlkbWFfdW5tYXBfc2luZ2xlKGFyLT5kZXYsIEFUSDEwS19TS0JfQ0IoYXJ2aWYtPmJlYWNvbiktPnBhZGRyLAogCQkJCSBhcnZpZi0+YmVhY29uLT5sZW4sIERNQV9UT19ERVZJQ0UpOwogCisJaWYgKFdBUk5fT04oYXJ2aWYtPmJlYWNvbl9zdGF0ZSAhPSBBVEgxMEtfQkVBQ09OX1NDSEVEVUxFRCAmJgorCQkgICAgYXJ2aWYtPmJlYWNvbl9zdGF0ZSAhPSBBVEgxMEtfQkVBQ09OX1NFTlQpKQorCQlyZXR1cm47CisKIAlkZXZfa2ZyZWVfc2tiX2FueShhcnZpZi0+YmVhY29uKTsKIAogCWFydmlmLT5iZWFjb24gPSBOVUxMOwotCWFydmlmLT5iZWFjb25fc2VudCA9IGZhbHNlOworCWFydmlmLT5iZWFjb25fc3RhdGUgPSBBVEgxMEtfQkVBQ09OX1NDSEVEVUxFRDsKIH0KIAogc3RhdGljIHZvaWQgYXRoMTBrX21hY192aWZfYmVhY29uX2NsZWFudXAoc3RydWN0IGF0aDEwa192aWYgKmFydmlmKQpAQCAtOTYyLDYgKzk4MSwxNDMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGF0aDEwa19tYWNfc2V0dXBfYmNuX3AycF9pZShzdHJ1Y3QgYXRoMTBrX3ZpZiAqYXJ2aWYsCisJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpiY24pCit7CisJc3RydWN0IGF0aDEwayAqYXIgPSBhcnZpZi0+YXI7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCWNvbnN0IHU4ICpwMnBfaWU7CisJaW50IHJldDsKKworCWlmIChhcnZpZi0+dmRldl90eXBlICE9IFdNSV9WREVWX1RZUEVfQVApCisJCXJldHVybiAwOworCisJaWYgKGFydmlmLT52ZGV2X3N1YnR5cGUgIT0gV01JX1ZERVZfU1VCVFlQRV9QMlBfR08pCisJCXJldHVybiAwOworCisJbWdtdCA9ICh2b2lkICopYmNuLT5kYXRhOworCXAycF9pZSA9IGNmZzgwMjExX2ZpbmRfdmVuZG9yX2llKFdMQU5fT1VJX1dGQSwgV0xBTl9PVUlfVFlQRV9XRkFfUDJQLAorCQkJCQkgbWdtdC0+dS5iZWFjb24udmFyaWFibGUsCisJCQkJCSBiY24tPmxlbiAtIChtZ210LT51LmJlYWNvbi52YXJpYWJsZSAtCisJCQkJCQkgICAgIGJjbi0+ZGF0YSkpOworCWlmICghcDJwX2llKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJldCA9IGF0aDEwa193bWlfcDJwX2dvX2Jjbl9pZShhciwgYXJ2aWYtPnZkZXZfaWQsIHAycF9pZSk7CisJaWYgKHJldCkgeworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBzdWJtaXQgcDJwIGdvIGJjbiBpZSBmb3IgdmRldiAlaTogJWRcbiIsCisJCQkgICAgYXJ2aWYtPnZkZXZfaWQsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoMTBrX21hY19yZW1vdmVfdmVuZG9yX2llKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBvdWksCisJCQkJICAgICAgIHU4IG91aV90eXBlLCBzaXplX3QgaWVfb2Zmc2V0KQoreworCXNpemVfdCBsZW47CisJY29uc3QgdTggKm5leHQ7CisJY29uc3QgdTggKmVuZDsKKwl1OCAqaWU7CisKKwlpZiAoV0FSTl9PTihza2ItPmxlbiA8IGllX29mZnNldCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWUgPSAodTggKiljZmc4MDIxMV9maW5kX3ZlbmRvcl9pZShvdWksIG91aV90eXBlLAorCQkJCQkgICBza2ItPmRhdGEgKyBpZV9vZmZzZXQsCisJCQkJCSAgIHNrYi0+bGVuIC0gaWVfb2Zmc2V0KTsKKwlpZiAoIWllKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWxlbiA9IGllWzFdICsgMjsKKwllbmQgPSBza2ItPmRhdGEgKyBza2ItPmxlbjsKKwluZXh0ID0gaWUgKyBsZW47CisKKwlpZiAoV0FSTl9PTihuZXh0ID4gZW5kKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1tb3ZlKGllLCBuZXh0LCBlbmQgLSBuZXh0KTsKKwlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gbGVuKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0aDEwa19tYWNfc2V0dXBfYmNuX3RtcGwoc3RydWN0IGF0aDEwa192aWYgKmFydmlmKQoreworCXN0cnVjdCBhdGgxMGsgKmFyID0gYXJ2aWYtPmFyOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gYXItPmh3OworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBhcnZpZi0+dmlmOworCXN0cnVjdCBpZWVlODAyMTFfbXV0YWJsZV9vZmZzZXRzIG9mZnMgPSB7fTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYmNuOworCWludCByZXQ7CisKKwlpZiAoIXRlc3RfYml0KFdNSV9TRVJWSUNFX0JFQUNPTl9PRkZMT0FELCBhci0+d21pLnN2Y19tYXApKQorCQlyZXR1cm4gMDsKKworCWJjbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0X3RlbXBsYXRlKGh3LCB2aWYsICZvZmZzKTsKKwlpZiAoIWJjbikgeworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBnZXQgYmVhY29uIHRlbXBsYXRlIGZyb20gbWFjODAyMTFcbiIpOworCQlyZXR1cm4gLUVQRVJNOworCX0KKworCXJldCA9IGF0aDEwa19tYWNfc2V0dXBfYmNuX3AycF9pZShhcnZpZiwgYmNuKTsKKwlpZiAocmV0KSB7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHNldHVwIHAycCBnbyBiY24gaWU6ICVkXG4iLCByZXQpOworCQlrZnJlZV9za2IoYmNuKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBQMlAgSUUgaXMgaW5zZXJ0ZWQgYnkgZmlybXdhcmUgYXV0b21hdGljYWxseSAoYXMgY29uZmlndXJlZCBhYm92ZSkKKwkgKiBzbyByZW1vdmUgaXQgZnJvbSB0aGUgYmFzZSBiZWFjb24gdGVtcGxhdGUgdG8gYXZvaWQgZHVwbGljYXRlIFAyUAorCSAqIElFcyBpbiBiZWFjb24gZnJhbWVzLgorCSAqLworCWF0aDEwa19tYWNfcmVtb3ZlX3ZlbmRvcl9pZShiY24sIFdMQU5fT1VJX1dGQSwgV0xBTl9PVUlfVFlQRV9XRkFfUDJQLAorCQkJCSAgICBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsCisJCQkJCSAgICAgdS5iZWFjb24udmFyaWFibGUpKTsKKworCXJldCA9IGF0aDEwa193bWlfYmNuX3RtcGwoYXIsIGFydmlmLT52ZGV2X2lkLCBvZmZzLnRpbV9vZmZzZXQsIGJjbiwgMCwKKwkJCQkgIDAsIE5VTEwsIDApOworCWtmcmVlX3NrYihiY24pOworCisJaWYgKHJldCkgeworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBzdWJtaXQgYmVhY29uIHRlbXBsYXRlIGNvbW1hbmQ6ICVkXG4iLAorCQkJICAgIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoMTBrX21hY19zZXR1cF9wcmJfdG1wbChzdHJ1Y3QgYXRoMTBrX3ZpZiAqYXJ2aWYpCit7CisJc3RydWN0IGF0aDEwayAqYXIgPSBhcnZpZi0+YXI7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBhci0+aHc7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9IGFydmlmLT52aWY7CisJc3RydWN0IHNrX2J1ZmYgKnByYjsKKwlpbnQgcmV0OworCisJaWYgKCF0ZXN0X2JpdChXTUlfU0VSVklDRV9CRUFDT05fT0ZGTE9BRCwgYXItPndtaS5zdmNfbWFwKSkKKwkJcmV0dXJuIDA7CisKKwlwcmIgPSBpZWVlODAyMTFfcHJvYmVyZXNwX2dldChodywgdmlmKTsKKwlpZiAoIXByYikgeworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBnZXQgcHJvYmUgcmVzcCB0ZW1wbGF0ZSBmcm9tIG1hYzgwMjExXG4iKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlyZXQgPSBhdGgxMGtfd21pX3ByYl90bXBsKGFyLCBhcnZpZi0+dmRldl9pZCwgcHJiKTsKKwlrZnJlZV9za2IocHJiKTsKKworCWlmIChyZXQpIHsKKwkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gc3VibWl0IHByb2JlIHJlc3AgdGVtcGxhdGUgY29tbWFuZDogJWRcbiIsCisJCQkgICAgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgYXRoMTBrX2NvbnRyb2xfYmVhY29uaW5nKHN0cnVjdCBhdGgxMGtfdmlmICphcnZpZiwKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pCiB7CkBAIC0xMDQ2LDI4ICsxMjAyLDg1IEBACiAJCQkgICAgYXJ2aWYtPnZkZXZfaWQsIHJldCk7CiB9CiAKLS8qCi0gKiBSZXZpZXcgdGhpcyB3aGVuIG1hYzgwMjExIGdhaW5zIHBlci1pbnRlcmZhY2UgcG93ZXJzYXZlIHN1cHBvcnQuCi0gKi8KK3N0YXRpYyBpbnQgYXRoMTBrX21hY192aWZfcmVjYWxjX3BzX3dha2VfdGhyZXNob2xkKHN0cnVjdCBhdGgxMGtfdmlmICphcnZpZikKK3sKKwlzdHJ1Y3QgYXRoMTBrICphciA9IGFydmlmLT5hcjsKKwl1MzIgcGFyYW07CisJdTMyIHZhbHVlOworCWludCByZXQ7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhcnZpZi0+YXItPmNvbmZfbXV0ZXgpOworCisJaWYgKGFydmlmLT51LnN0YS51YXBzZCkKKwkJdmFsdWUgPSBXTUlfU1RBX1BTX1RYX1dBS0VfVEhSRVNIT0xEX05FVkVSOworCWVsc2UKKwkJdmFsdWUgPSBXTUlfU1RBX1BTX1RYX1dBS0VfVEhSRVNIT0xEX0FMV0FZUzsKKworCXBhcmFtID0gV01JX1NUQV9QU19QQVJBTV9UWF9XQUtFX1RIUkVTSE9MRDsKKwlyZXQgPSBhdGgxMGtfd21pX3NldF9zdGFfcHNfcGFyYW0oYXIsIGFydmlmLT52ZGV2X2lkLCBwYXJhbSwgdmFsdWUpOworCWlmIChyZXQpIHsKKwkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gc3VibWl0IHBzIHdha2UgdGhyZXNob2xkICV1IG9uIHZkZXYgJWk6ICVkXG4iLAorCQkJICAgIHZhbHVlLCBhcnZpZi0+dmRldl9pZCwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGgxMGtfbWFjX3ZpZl9yZWNhbGNfcHNfcG9sbF9jb3VudChzdHJ1Y3QgYXRoMTBrX3ZpZiAqYXJ2aWYpCit7CisJc3RydWN0IGF0aDEwayAqYXIgPSBhcnZpZi0+YXI7CisJdTMyIHBhcmFtOworCXUzMiB2YWx1ZTsKKwlpbnQgcmV0OworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYXJ2aWYtPmFyLT5jb25mX211dGV4KTsKKworCWlmIChhcnZpZi0+dS5zdGEudWFwc2QpCisJCXZhbHVlID0gV01JX1NUQV9QU19QU1BPTExfQ09VTlRfVUFQU0Q7CisJZWxzZQorCQl2YWx1ZSA9IFdNSV9TVEFfUFNfUFNQT0xMX0NPVU5UX05PX01BWDsKKworCXBhcmFtID0gV01JX1NUQV9QU19QQVJBTV9QU1BPTExfQ09VTlQ7CisJcmV0ID0gYXRoMTBrX3dtaV9zZXRfc3RhX3BzX3BhcmFtKGFyLCBhcnZpZi0+dmRldl9pZCwKKwkJCQkJICBwYXJhbSwgdmFsdWUpOworCWlmIChyZXQpIHsKKwkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gc3VibWl0IHBzIHBvbGwgY291bnQgJXUgb24gdmRldiAlaTogJWRcbiIsCisJCQkgICAgdmFsdWUsIGFydmlmLT52ZGV2X2lkLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGF0aDEwa19tYWNfdmlmX3NldHVwX3BzKHN0cnVjdCBhdGgxMGtfdmlmICphcnZpZikKIHsKIAlzdHJ1Y3QgYXRoMTBrICphciA9IGFydmlmLT5hcjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gYXJ2aWYtPnZpZjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYXItPmh3LT5jb25mOwogCWVudW0gd21pX3N0YV9wb3dlcnNhdmVfcGFyYW0gcGFyYW07CiAJZW51bSB3bWlfc3RhX3BzX21vZGUgcHNtb2RlOwogCWludCByZXQ7CisJaW50IHBzX3RpbWVvdXQ7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhcnZpZi0+YXItPmNvbmZfbXV0ZXgpOwogCiAJaWYgKGFydmlmLT52aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKIAkJcmV0dXJuIDA7CiAKLQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgeworCWlmICh2aWYtPmJzc19jb25mLnBzKSB7CiAJCXBzbW9kZSA9IFdNSV9TVEFfUFNfTU9ERV9FTkFCTEVEOwogCQlwYXJhbSA9IFdNSV9TVEFfUFNfUEFSQU1fSU5BQ1RJVklUWV9USU1FOwogCisJCXBzX3RpbWVvdXQgPSBjb25mLT5keW5hbWljX3BzX3RpbWVvdXQ7CisJCWlmIChwc190aW1lb3V0ID09IDApIHsKKwkJCS8qIEZpcm13YXJlIGRvZXNuJ3QgbGlrZSAwICovCisJCQlwc190aW1lb3V0ID0gaWVlZTgwMjExX3R1X3RvX3VzZWMoCisJCQkJdmlmLT5ic3NfY29uZi5iZWFjb25faW50KSAvIDEwMDA7CisJCX0KKwogCQlyZXQgPSBhdGgxMGtfd21pX3NldF9zdGFfcHNfcGFyYW0oYXIsIGFydmlmLT52ZGV2X2lkLCBwYXJhbSwKLQkJCQkJCSAgY29uZi0+ZHluYW1pY19wc190aW1lb3V0KTsKKwkJCQkJCSAgcHNfdGltZW91dCk7CiAJCWlmIChyZXQpIHsKIAkJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHNldCBpbmFjdGl2aXR5IHRpbWUgZm9yIHZkZXYgJWQ6ICVpXG4iLAogCQkJCSAgICBhcnZpZi0+dmRldl9pZCwgcmV0KTsKQEAgLTEwOTAsNiArMTMwMywzOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGF0aDEwa19tYWNfdmlmX2Rpc2FibGVfa2VlcGFsaXZlKHN0cnVjdCBhdGgxMGtfdmlmICphcnZpZikKK3sKKwlzdHJ1Y3QgYXRoMTBrICphciA9IGFydmlmLT5hcjsKKwlzdHJ1Y3Qgd21pX3N0YV9rZWVwYWxpdmVfYXJnIGFyZyA9IHt9OworCWludCByZXQ7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhcnZpZi0+YXItPmNvbmZfbXV0ZXgpOworCisJaWYgKGFydmlmLT52ZGV2X3R5cGUgIT0gV01JX1ZERVZfVFlQRV9TVEEpCisJCXJldHVybiAwOworCisJaWYgKCF0ZXN0X2JpdChXTUlfU0VSVklDRV9TVEFfS0VFUF9BTElWRSwgYXItPndtaS5zdmNfbWFwKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBTb21lIGZpcm13YXJlIHJldmlzaW9ucyBoYXZlIGEgYnVnIGFuZCBpZ25vcmUgdGhlIGBlbmFibGVkYCBmaWVsZC4KKwkgKiBJbnN0ZWFkIHVzZSB0aGUgaW50ZXJ2YWwgdG8gZGlzYWJsZSB0aGUga2VlcGFsaXZlLgorCSAqLworCWFyZy52ZGV2X2lkID0gYXJ2aWYtPnZkZXZfaWQ7CisJYXJnLmVuYWJsZWQgPSAxOworCWFyZy5tZXRob2QgPSBXTUlfU1RBX0tFRVBBTElWRV9NRVRIT0RfTlVMTF9GUkFNRTsKKwlhcmcuaW50ZXJ2YWwgPSBXTUlfU1RBX0tFRVBBTElWRV9JTlRFUlZBTF9ESVNBQkxFOworCisJcmV0ID0gYXRoMTBrX3dtaV9zdGFfa2VlcGFsaXZlKGFyLCAmYXJnKTsKKwlpZiAocmV0KSB7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHN1Ym1pdCBrZWVwYWxpdmUgb24gdmRldiAlaTogJWRcbiIsCisJCQkgICAgYXJ2aWYtPnZkZXZfaWQsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqLwogLyogU3RhdGlvbiBtYW5hZ2VtZW50ICovCiAvKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEzNTgsNiArMTYwMywxMCBAQAogCQlyZXR1cm47CiAKIAlhcmctPnBlZXJfZmxhZ3MgfD0gV01JX1BFRVJfVkhUOworCisJaWYgKGFyLT5ody0+Y29uZi5jaGFuZGVmLmNoYW4tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKKwkJYXJnLT5wZWVyX2ZsYWdzIHw9IFdNSV9QRUVSX1ZIVF8yRzsKKwogCWFyZy0+cGVlcl92aHRfY2FwcyA9IHZodF9jYXAtPmNhcDsKIAogCWFtcGR1X2ZhY3RvciA9ICh2aHRfY2FwLT5jYXAgJgpAQCAtMTQwOSw5ICsxNjU4LDIyIEBACiAJCWlmICh2aWYtPmJzc19jb25mLnFvcykKIAkJCWFyZy0+cGVlcl9mbGFncyB8PSBXTUlfUEVFUl9RT1M7CiAJCWJyZWFrOworCWNhc2UgV01JX1ZERVZfVFlQRV9JQlNTOgorCQlpZiAoc3RhLT53bWUpCisJCQlhcmctPnBlZXJfZmxhZ3MgfD0gV01JX1BFRVJfUU9TOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX01BQywgIm1hYyBwZWVyICVwTSBxb3MgJWRcbiIsCisJCSAgIHN0YS0+YWRkciwgISEoYXJnLT5wZWVyX2ZsYWdzICYgV01JX1BFRVJfUU9TKSk7Cit9CisKK3N0YXRpYyBib29sIGF0aDEwa19tYWNfc3RhX2hhc18xMWdfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwkvKiBGaXJzdCA0IHJhdGVzIGluIGF0aDEwa19yYXRlcyBhcmUgQ0NLICgxMWIpIHJhdGVzLiAqLworCXJldHVybiBzdGEtPnN1cHBfcmF0ZXNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPj4gNDsKIH0KIAogc3RhdGljIHZvaWQgYXRoMTBrX3BlZXJfYXNzb2NfaF9waHltb2RlKHN0cnVjdCBhdGgxMGsgKmFyLApAQCAtMTQyMywxMyArMTY4NSwyMCBAQAogCiAJc3dpdGNoIChhci0+aHctPmNvbmYuY2hhbmRlZi5jaGFuLT5iYW5kKSB7CiAJY2FzZSBJRUVFODAyMTFfQkFORF8yR0haOgotCQlpZiAoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB7CisJCWlmIChzdGEtPnZodF9jYXAudmh0X3N1cHBvcnRlZCkgeworCQkJaWYgKHN0YS0+YmFuZHdpZHRoID09IElFRUU4MDIxMV9TVEFfUlhfQldfNDApCisJCQkJcGh5bW9kZSA9IE1PREVfMTFBQ19WSFQ0MDsKKwkJCWVsc2UKKwkJCQlwaHltb2RlID0gTU9ERV8xMUFDX1ZIVDIwOworCQl9IGVsc2UgaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgewogCQkJaWYgKHN0YS0+YmFuZHdpZHRoID09IElFRUU4MDIxMV9TVEFfUlhfQldfNDApCiAJCQkJcGh5bW9kZSA9IE1PREVfMTFOR19IVDQwOwogCQkJZWxzZQogCQkJCXBoeW1vZGUgPSBNT0RFXzExTkdfSFQyMDsKLQkJfSBlbHNlIHsKKwkJfSBlbHNlIGlmIChhdGgxMGtfbWFjX3N0YV9oYXNfMTFnX3JhdGVzKHN0YSkpIHsKIAkJCXBoeW1vZGUgPSBNT0RFXzExRzsKKwkJfSBlbHNlIHsKKwkJCXBoeW1vZGUgPSBNT0RFXzExQjsKIAkJfQogCiAJCWJyZWFrOwpAQCAtMTYwMyw3ICsxODcyLDggQEAKIAkJYXRoMTBrX3dhcm4oYXIsICJmYWllbGQgdG8gZG93biB2ZGV2ICVpOiAlZFxuIiwKIAkJCSAgICBhcnZpZi0+dmRldl9pZCwgcmV0KTsKIAotCWFydmlmLT5kZWZfd2VwX2tleV9pZHggPSAwOworCWFydmlmLT5kZWZfd2VwX2tleV9pZHggPSAtMTsKKwogCWFydmlmLT5pc191cCA9IGZhbHNlOwogfQogCkBAIC0xNjYyLDExICsxOTMyLDE0IEBACiAJCQl9CiAJCX0KIAotCQlyZXQgPSBhdGgxMGtfaW5zdGFsbF9wZWVyX3dlcF9rZXlzKGFydmlmLCBzdGEtPmFkZHIpOwotCQlpZiAocmV0KSB7Ci0JCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBpbnN0YWxsIHBlZXIgd2VwIGtleXMgZm9yIHZkZXYgJWk6ICVkXG4iLAotCQkJCSAgICBhcnZpZi0+dmRldl9pZCwgcmV0KTsKLQkJCXJldHVybiByZXQ7CisJCS8qIFBsdW1iIGNhY2hlZCBrZXlzIG9ubHkgZm9yIHN0YXRpYyBXRVAgKi8KKwkJaWYgKGFydmlmLT5kZWZfd2VwX2tleV9pZHggIT0gLTEpIHsKKwkJCXJldCA9IGF0aDEwa19pbnN0YWxsX3BlZXJfd2VwX2tleXMoYXJ2aWYsIHN0YS0+YWRkcik7CisJCQlpZiAocmV0KSB7CisJCQkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gaW5zdGFsbCBwZWVyIHdlcCBrZXlzIGZvciB2ZGV2ICVpOiAlZFxuIiwKKwkJCQkJICAgIGFydmlmLT52ZGV2X2lkLCByZXQpOworCQkJCXJldHVybiByZXQ7CisJCQl9CiAJCX0KIAl9CiAKQEAgLTE5MzEsNzUgKzIyMDQsMTMgQEAKIAkgKiB1c2VkIG9ubHkgZm9yIENRTSBwdXJwb3NlcyAoZS5nLiBob3N0YXBkIHN0YXRpb24ga2VlcGFsaXZlIHBpbmcpIHNvCiAJICogaXQgaXMgc2FmZSB0byBkb3duZ3JhZGUgdG8gTnVsbEZ1bmMuCiAJICovCisJaGRyID0gKHZvaWQgKilza2ItPmRhdGE7CiAJaWYgKGllZWU4MDIxMV9pc19xb3NfbnVsbGZ1bmMoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQloZHItPmZyYW1lX2NvbnRyb2wgJj0gfl9fY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBKTsKIAkJY2ItPmh0dC50aWQgPSBIVFRfREFUQV9UWF9FWFRfVElEX05PTl9RT1NfTUNBU1RfQkNBU1Q7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfdHhfd2VwX2tleV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlzdHJ1Y3QgYXRoMTBrX3ZpZiAqYXJ2aWYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aDEwa192aWYsCi0JCQkJCQl3ZXBfa2V5X3dvcmspOwotCXN0cnVjdCBhdGgxMGsgKmFyID0gYXJ2aWYtPmFyOwotCWludCByZXQsIGtleWlkeCA9IGFydmlmLT5kZWZfd2VwX2tleV9uZXdpZHg7Ci0KLQltdXRleF9sb2NrKCZhcnZpZi0+YXItPmNvbmZfbXV0ZXgpOwotCi0JaWYgKGFydmlmLT5hci0+c3RhdGUgIT0gQVRIMTBLX1NUQVRFX09OKQotCQlnb3RvIHVubG9jazsKLQotCWlmIChhcnZpZi0+ZGVmX3dlcF9rZXlfaWR4ID09IGtleWlkeCkKLQkJZ290byB1bmxvY2s7Ci0KLQlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX01BQywgIm1hYyB2ZGV2ICVkIHNldCBrZXlpZHggJWRcbiIsCi0JCSAgIGFydmlmLT52ZGV2X2lkLCBrZXlpZHgpOwotCi0JcmV0ID0gYXRoMTBrX3dtaV92ZGV2X3NldF9wYXJhbShhcnZpZi0+YXIsCi0JCQkJCWFydmlmLT52ZGV2X2lkLAotCQkJCQlhcnZpZi0+YXItPndtaS52ZGV2X3BhcmFtLT5kZWZfa2V5aWQsCi0JCQkJCWtleWlkeCk7Ci0JaWYgKHJldCkgewotCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byB1cGRhdGUgd2VwIGtleSBpbmRleCBmb3IgdmRldiAlZDogJWRcbiIsCi0JCQkgICAgYXJ2aWYtPnZkZXZfaWQsCi0JCQkgICAgcmV0KTsKLQkJZ290byB1bmxvY2s7Ci0JfQotCi0JYXJ2aWYtPmRlZl93ZXBfa2V5X2lkeCA9IGtleWlkeDsKLQotdW5sb2NrOgotCW11dGV4X3VubG9jaygmYXJ2aWYtPmFyLT5jb25mX211dGV4KTsKLX0KLQotc3RhdGljIHZvaWQgYXRoMTBrX3R4X2hfdXBkYXRlX3dlcF9rZXkoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LAotCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXN0cnVjdCBhdGgxMGtfdmlmICphcnZpZiA9IGF0aDEwa192aWZfdG9fYXJ2aWYodmlmKTsKLQlzdHJ1Y3QgYXRoMTBrICphciA9IGFydmlmLT5hcjsKLQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwotCi0JaWYgKCFpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1lX2NvbnRyb2wpKQotCQlyZXR1cm47Ci0KLQlpZiAoIWtleSkKLQkJcmV0dXJuOwotCi0JaWYgKGtleS0+Y2lwaGVyICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwICYmCi0JICAgIGtleS0+Y2lwaGVyICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkKLQkJcmV0dXJuOwotCi0JaWYgKGtleS0+a2V5aWR4ID09IGFydmlmLT5kZWZfd2VwX2tleV9pZHgpCi0JCXJldHVybjsKLQotCS8qIEZJWE1FOiBNb3N0IGxpa2VseSBhIGZldyBmcmFtZXMgd2lsbCBiZSBUWGVkIHdpdGggYW4gb2xkIGtleS4gU2ltcGx5Ci0JICogcXVldWVpbmcgZnJhbWVzIHVudGlsIGtleSBpbmRleCBpcyB1cGRhdGVkIGlzIG5vdCBhbiBvcHRpb24gYmVjYXVzZQotCSAqIHNrX2J1ZmYgbWF5IG5lZWQgbW9yZSBwcm9jZXNzaW5nIHRvIGJlIGRvbmUsIGUuZy4gb2ZmY2hhbm5lbCAqLwotCWFydmlmLT5kZWZfd2VwX2tleV9uZXdpZHggPSBrZXktPmtleWlkeDsKLQlpZWVlODAyMTFfcXVldWVfd29yayhhci0+aHcsICZhcnZpZi0+d2VwX2tleV93b3JrKTsKLX0KLQogc3RhdGljIHZvaWQgYXRoMTBrX3R4X2hfYWRkX3AycF9ub2FfaWUoc3RydWN0IGF0aDEwayAqYXIsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0yMTUxLDcgKzIzNjIsNyBAQAogCiAJCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYXItPm9mZmNoYW5fdHhfY29tcGxldGVkLAogCQkJCQkJICAzICogSFopOwotCQlpZiAocmV0IDw9IDApCisJCWlmIChyZXQgPT0gMCkKIAkJCWF0aDEwa193YXJuKGFyLCAidGltZWQgb3V0IHdhaXRpbmcgZm9yIG9mZmNoYW5uZWwgc2tiICVwXG4iLAogCQkJCSAgICBza2IpOwogCkBAIC0yMjEzLDYgKzI0MjQsNyBAQAogCWNhc2UgQVRIMTBLX1NDQU5fUlVOTklORzoKIAkJaWYgKGFyLT5zY2FuLmlzX3JvYykKIAkJCWllZWU4MDIxMV9yZW1haW5fb25fY2hhbm5lbF9leHBpcmVkKGFyLT5odyk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQVRIMTBLX1NDQU5fQUJPUlRJTkc6CiAJCWlmICghYXItPnNjYW4uaXNfcm9jKQogCQkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKGFyLT5odywKQEAgLTIzNTksNyArMjU3MSw2IEBACiAJc3RydWN0IGF0aDEwayAqYXIgPSBody0+cHJpdjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9IGluZm8tPmNvbnRyb2wudmlmOwotCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSA9IGluZm8tPmNvbnRyb2wuaHdfa2V5OwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAKIAkvKiBXZSBzaG91bGQgZGlzYWJsZSBDQ0sgUkFURSBkdWUgdG8gUDJQICovCkBAIC0yMzczLDcgKzI1ODQsNiBAQAogCS8qIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHByb2Nlc3MgaW5qZWN0ZWQgZnJhbWVzIGxpa2UgdGhhdCAqLwogCWlmICh2aWYgJiYgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHsKIAkJYXRoMTBrX3R4X2hfbndpZmkoaHcsIHNrYik7Ci0JCWF0aDEwa190eF9oX3VwZGF0ZV93ZXBfa2V5KHZpZiwga2V5LCBza2IpOwogCQlhdGgxMGtfdHhfaF9hZGRfcDJwX25vYV9pZShhciwgdmlmLCBza2IpOwogCQlhdGgxMGtfdHhfaF9zZXFfbm8odmlmLCBza2IpOwogCX0KQEAgLTI4NzEsNiArMzA4MSw4IEBACiAJaW50IGJpdDsKIAl1MzIgdmRldl9wYXJhbTsKIAorCXZpZi0+ZHJpdmVyX2ZsYWdzIHw9IElFRUU4MDIxMV9WSUZfU1VQUE9SVFNfVUFQU0Q7CisKIAltdXRleF9sb2NrKCZhci0+Y29uZl9tdXRleCk7CiAKIAltZW1zZXQoYXJ2aWYsIDAsIHNpemVvZigqYXJ2aWYpKTsKQEAgLTI4NzgsNyArMzA5MCw2IEBACiAJYXJ2aWYtPmFyID0gYXI7CiAJYXJ2aWYtPnZpZiA9IHZpZjsKIAotCUlOSVRfV09SSygmYXJ2aWYtPndlcF9rZXlfd29yaywgYXRoMTBrX3R4X3dlcF9rZXlfd29yayk7CiAJSU5JVF9MSVNUX0hFQUQoJmFydmlmLT5saXN0KTsKIAogCWlmIChhci0+ZnJlZV92ZGV2X21hcCA9PSAwKSB7CkBAIC0yODk0LDEwICszMTA1LDExIEBACiAJYXJ2aWYtPnZkZXZfaWQgPSBiaXQ7CiAJYXJ2aWYtPnZkZXZfc3VidHlwZSA9IFdNSV9WREVWX1NVQlRZUEVfTk9ORTsKIAotCWlmIChhci0+cDJwKQotCQlhcnZpZi0+dmRldl9zdWJ0eXBlID0gV01JX1ZERVZfU1VCVFlQRV9QMlBfREVWSUNFOwotCiAJc3dpdGNoICh2aWYtPnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9ERVZJQ0U6CisJCWFydmlmLT52ZGV2X3R5cGUgPSBXTUlfVkRFVl9UWVBFX1NUQTsKKwkJYXJ2aWYtPnZkZXZfc3VidHlwZSA9IFdNSV9WREVWX1NVQlRZUEVfUDJQX0RFVklDRTsKKwkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDoKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCWFydmlmLT52ZGV2X3R5cGUgPSBXTUlfVkRFVl9UWVBFX1NUQTsKQEAgLTI5NjYsMTUgKzMxNzgsMTggQEAKIAlhci0+ZnJlZV92ZGV2X21hcCAmPSB+KDFMTCA8PCBhcnZpZi0+dmRldl9pZCk7CiAJbGlzdF9hZGQoJmFydmlmLT5saXN0LCAmYXItPmFydmlmcyk7CiAKLQl2ZGV2X3BhcmFtID0gYXItPndtaS52ZGV2X3BhcmFtLT5kZWZfa2V5aWQ7Ci0JcmV0ID0gYXRoMTBrX3dtaV92ZGV2X3NldF9wYXJhbShhciwgMCwgdmRldl9wYXJhbSwKLQkJCQkJYXJ2aWYtPmRlZl93ZXBfa2V5X2lkeCk7CisJLyogSXQgbWFrZXMgbm8gc2Vuc2UgdG8gaGF2ZSBmaXJtd2FyZSBkbyBrZWVwYWxpdmVzLiBtYWM4MDIxMSBhbHJlYWR5CisJICogdGFrZXMgY2FyZSBvZiB0aGlzIHdpdGggaWRsZSBjb25uZWN0aW9uIHBvbGxpbmcuCisJICovCisJcmV0ID0gYXRoMTBrX21hY192aWZfZGlzYWJsZV9rZWVwYWxpdmUoYXJ2aWYpOwogCWlmIChyZXQpIHsKLQkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gc2V0IHZkZXYgJWkgZGVmYXVsdCBrZXkgaWQ6ICVkXG4iLAorCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBkaXNhYmxlIGtlZXBhbGl2ZSBvbiB2ZGV2ICVpOiAlZFxuIiwKIAkJCSAgICBhcnZpZi0+dmRldl9pZCwgcmV0KTsKIAkJZ290byBlcnJfdmRldl9kZWxldGU7CiAJfQogCisJYXJ2aWYtPmRlZl93ZXBfa2V5X2lkeCA9IC0xOworCiAJdmRldl9wYXJhbSA9IGFyLT53bWkudmRldl9wYXJhbS0+dHhfZW5jYXBfdHlwZTsKIAlyZXQgPSBhdGgxMGtfd21pX3ZkZXZfc2V0X3BhcmFtKGFyLCBhcnZpZi0+dmRldl9pZCwgdmRldl9wYXJhbSwKIAkJCQkJQVRIMTBLX0hXX1RYUlhfTkFUSVZFX1dJRkkpOwpAQCAtMzAyNiwyMiArMzI0MSwxNiBAQAogCQkJZ290byBlcnJfcGVlcl9kZWxldGU7CiAJCX0KIAotCQlwYXJhbSA9IFdNSV9TVEFfUFNfUEFSQU1fVFhfV0FLRV9USFJFU0hPTEQ7Ci0JCXZhbHVlID0gV01JX1NUQV9QU19UWF9XQUtFX1RIUkVTSE9MRF9BTFdBWVM7Ci0JCXJldCA9IGF0aDEwa193bWlfc2V0X3N0YV9wc19wYXJhbShhciwgYXJ2aWYtPnZkZXZfaWQsCi0JCQkJCQkgIHBhcmFtLCB2YWx1ZSk7CisJCXJldCA9IGF0aDEwa19tYWNfdmlmX3JlY2FsY19wc193YWtlX3RocmVzaG9sZChhcnZpZik7CiAJCWlmIChyZXQpIHsKLQkJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHNldCB2ZGV2ICVpIFRYIHdha2UgdGhyZXNoOiAlZFxuIiwKKwkJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHJlY2FsYyBwcyB3YWtlIHRocmVzaG9sZCBvbiB2ZGV2ICVpOiAlZFxuIiwKIAkJCQkgICAgYXJ2aWYtPnZkZXZfaWQsIHJldCk7CiAJCQlnb3RvIGVycl9wZWVyX2RlbGV0ZTsKIAkJfQogCi0JCXBhcmFtID0gV01JX1NUQV9QU19QQVJBTV9QU1BPTExfQ09VTlQ7Ci0JCXZhbHVlID0gV01JX1NUQV9QU19QU1BPTExfQ09VTlRfTk9fTUFYOwotCQlyZXQgPSBhdGgxMGtfd21pX3NldF9zdGFfcHNfcGFyYW0oYXIsIGFydmlmLT52ZGV2X2lkLAotCQkJCQkJICBwYXJhbSwgdmFsdWUpOworCQlyZXQgPSBhdGgxMGtfbWFjX3ZpZl9yZWNhbGNfcHNfcG9sbF9jb3VudChhcnZpZik7CiAJCWlmIChyZXQpIHsKLQkJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHNldCB2ZGV2ICVpIFBTUE9MTCBjb3VudDogJWRcbiIsCisJCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byByZWNhbGMgcHMgcG9sbCBjb3VudCBvbiB2ZGV2ICVpOiAlZFxuIiwKIAkJCQkgICAgYXJ2aWYtPnZkZXZfaWQsIHJldCk7CiAJCQlnb3RvIGVycl9wZWVyX2RlbGV0ZTsKIAkJfQpAQCAtMzA5OSw4ICszMzA4LDYgQEAKIAlzdHJ1Y3QgYXRoMTBrX3ZpZiAqYXJ2aWYgPSBhdGgxMGtfdmlmX3RvX2FydmlmKHZpZik7CiAJaW50IHJldDsKIAotCWNhbmNlbF93b3JrX3N5bmMoJmFydmlmLT53ZXBfa2V5X3dvcmspOwotCiAJbXV0ZXhfbG9jaygmYXItPmNvbmZfbXV0ZXgpOwogCiAJc3Bpbl9sb2NrX2JoKCZhci0+ZGF0YV9sb2NrKTsKQEAgLTMyMTEsOSArMzQxOCwyMSBAQAogCQlpZiAocmV0KQogCQkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gc2V0IGJlYWNvbiBtb2RlIGZvciB2ZGV2ICVkOiAlaVxuIiwKIAkJCQkgICAgYXJ2aWYtPnZkZXZfaWQsIHJldCk7CisKKwkJcmV0ID0gYXRoMTBrX21hY19zZXR1cF9iY25fdG1wbChhcnZpZik7CisJCWlmIChyZXQpCisJCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byB1cGRhdGUgYmVhY29uIHRlbXBsYXRlOiAlZFxuIiwKKwkJCQkgICAgcmV0KTsKIAl9CiAKLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9JTkZPKSB7CisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BUF9QUk9CRV9SRVNQKSB7CisJCXJldCA9IGF0aDEwa19tYWNfc2V0dXBfcHJiX3RtcGwoYXJ2aWYpOworCQlpZiAocmV0KQorCQkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gc2V0dXAgcHJvYmUgcmVzcCB0ZW1wbGF0ZSBvbiB2ZGV2ICVpOiAlZFxuIiwKKwkJCQkgICAgYXJ2aWYtPnZkZXZfaWQsIHJldCk7CisJfQorCisJaWYgKGNoYW5nZWQgJiAoQlNTX0NIQU5HRURfQkVBQ09OX0lORk8gfCBCU1NfQ0hBTkdFRF9CRUFDT04pKSB7CiAJCWFydmlmLT5kdGltX3BlcmlvZCA9IGluZm8tPmR0aW1fcGVyaW9kOwogCiAJCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfTUFDLApAQCAtMzMxNCw2ICszNTMzLDEzIEBACiAJCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byByZWNhbGMgdHggcG93ZXI6ICVkXG4iLCByZXQpOwogCX0KIAorCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfUFMpIHsKKwkJcmV0ID0gYXRoMTBrX21hY192aWZfc2V0dXBfcHMoYXJ2aWYpOworCQlpZiAocmV0KQorCQkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gc2V0dXAgcHMgb24gdmRldiAlaTogJWRcbiIsCisJCQkJICAgIGFydmlmLT52ZGV2X2lkLCByZXQpOworCX0KKwogCW11dGV4X3VubG9jaygmYXItPmNvbmZfbXV0ZXgpOwogfQogCkBAIC0zNDUzLDYgKzM2NzksNyBAQAogCWNvbnN0IHU4ICpwZWVyX2FkZHI7CiAJYm9vbCBpc193ZXAgPSBrZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCB8fAogCQkgICAgICBrZXktPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ7CisJYm9vbCBkZWZfaWR4ID0gZmFsc2U7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoa2V5LT5rZXlpZHggPiBXTUlfTUFYX0tFWV9JTkRFWCkKQEAgLTM0OTgsNyArMzcyNSwxNCBAQAogCQkJYXRoMTBrX2NsZWFyX3ZkZXZfa2V5KGFydmlmLCBrZXkpOwogCX0KIAotCXJldCA9IGF0aDEwa19pbnN0YWxsX2tleShhcnZpZiwga2V5LCBjbWQsIHBlZXJfYWRkcik7CisJLyogc2V0IFRYX1VTQUdFIGZsYWcgZm9yIGFsbCB0aGUga2V5cyBpbmNhc2Ugb2YgZG90MXgtV0VQLiBGb3IKKwkgKiBzdGF0aWMgV0VQLCBkbyBub3Qgc2V0IHRoaXMgZmxhZyBmb3IgdGhlIGtleXMgd2hvc2Uga2V5IGlkCisJICogaXMgIGdyZWF0ZXIgdGhhbiBkZWZhdWx0IGtleSBpZC4KKwkgKi8KKwlpZiAoYXJ2aWYtPmRlZl93ZXBfa2V5X2lkeCA9PSAtMSkKKwkJZGVmX2lkeCA9IHRydWU7CisKKwlyZXQgPSBhdGgxMGtfaW5zdGFsbF9rZXkoYXJ2aWYsIGtleSwgY21kLCBwZWVyX2FkZHIsIGRlZl9pZHgpOwogCWlmIChyZXQpIHsKIAkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gaW5zdGFsbCBrZXkgZm9yIHZkZXYgJWkgcGVlciAlcE06ICVkXG4iLAogCQkJICAgIGFydmlmLT52ZGV2X2lkLCBwZWVyX2FkZHIsIHJldCk7CkBAIC0zNTIzLDYgKzM3NTcsMzkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBhdGgxMGtfc2V0X2RlZmF1bHRfdW5pY2FzdF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJCSAgIGludCBrZXlpZHgpCit7CisJc3RydWN0IGF0aDEwayAqYXIgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoMTBrX3ZpZiAqYXJ2aWYgPSBhdGgxMGtfdmlmX3RvX2FydmlmKHZpZik7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmFydmlmLT5hci0+Y29uZl9tdXRleCk7CisKKwlpZiAoYXJ2aWYtPmFyLT5zdGF0ZSAhPSBBVEgxMEtfU1RBVEVfT04pCisJCWdvdG8gdW5sb2NrOworCisJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19NQUMsICJtYWMgdmRldiAlZCBzZXQga2V5aWR4ICVkXG4iLAorCQkgICBhcnZpZi0+dmRldl9pZCwga2V5aWR4KTsKKworCXJldCA9IGF0aDEwa193bWlfdmRldl9zZXRfcGFyYW0oYXJ2aWYtPmFyLAorCQkJCQlhcnZpZi0+dmRldl9pZCwKKwkJCQkJYXJ2aWYtPmFyLT53bWkudmRldl9wYXJhbS0+ZGVmX2tleWlkLAorCQkJCQlrZXlpZHgpOworCisJaWYgKHJldCkgeworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byB1cGRhdGUgd2VwIGtleSBpbmRleCBmb3IgdmRldiAlZDogJWRcbiIsCisJCQkgICAgYXJ2aWYtPnZkZXZfaWQsCisJCQkgICAgcmV0KTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJYXJ2aWYtPmRlZl93ZXBfa2V5X2lkeCA9IGtleWlkeDsKK3VubG9jazoKKwltdXRleF91bmxvY2soJmFydmlmLT5hci0+Y29uZl9tdXRleCk7Cit9CisKIHN0YXRpYyB2b2lkIGF0aDEwa19zdGFfcmNfdXBkYXRlX3drKHN0cnVjdCB3b3JrX3N0cnVjdCAqd2spCiB7CiAJc3RydWN0IGF0aDEwayAqYXI7CkBAIC0zNTgzLDggKzM4NTAsOSBAQAogCQkJCSAgICBzdGEtPmFkZHIsIHNtcHMsIGVycik7CiAJfQogCi0JaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfUkNfU1VQUF9SQVRFU19DSEFOR0VEKSB7Ci0JCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfTUFDLCAibWFjIHVwZGF0ZSBzdGEgJXBNIHN1cHAgcmF0ZXNcbiIsCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfUkNfU1VQUF9SQVRFU19DSEFOR0VEIHx8CisJICAgIGNoYW5nZWQgJiBJRUVFODAyMTFfUkNfTlNTX0NIQU5HRUQpIHsKKwkJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19NQUMsICJtYWMgdXBkYXRlIHN0YSAlcE0gc3VwcCByYXRlcy9uc3NcbiIsCiAJCQkgICBzdGEtPmFkZHIpOwogCiAJCWVyciA9IGF0aDEwa19zdGF0aW9uX2Fzc29jKGFyLCBhcnZpZi0+dmlmLCBzdGEsIHRydWUpOwpAQCAtMzc1Nyw2ICs0MDI1LDggQEAKIAkJCQl1MTYgYWMsIGJvb2wgZW5hYmxlKQogewogCXN0cnVjdCBhdGgxMGtfdmlmICphcnZpZiA9IGF0aDEwa192aWZfdG9fYXJ2aWYodmlmKTsKKwlzdHJ1Y3Qgd21pX3N0YV91YXBzZF9hdXRvX3RyaWdfYXJnIGFyZyA9IHt9OworCXUzMiBwcmlvID0gMCwgYWNjID0gMDsKIAl1MzIgdmFsdWUgPSAwOwogCWludCByZXQgPSAwOwogCkBAIC0zNzY5LDE4ICs0MDM5LDI2IEBACiAJY2FzZSBJRUVFODAyMTFfQUNfVk86CiAJCXZhbHVlID0gV01JX1NUQV9QU19VQVBTRF9BQzNfREVMSVZFUllfRU4gfAogCQkJV01JX1NUQV9QU19VQVBTRF9BQzNfVFJJR0dFUl9FTjsKKwkJcHJpbyA9IDc7CisJCWFjYyA9IDM7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FDX1ZJOgogCQl2YWx1ZSA9IFdNSV9TVEFfUFNfVUFQU0RfQUMyX0RFTElWRVJZX0VOIHwKIAkJCVdNSV9TVEFfUFNfVUFQU0RfQUMyX1RSSUdHRVJfRU47CisJCXByaW8gPSA1OworCQlhY2MgPSAyOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9BQ19CRToKIAkJdmFsdWUgPSBXTUlfU1RBX1BTX1VBUFNEX0FDMV9ERUxJVkVSWV9FTiB8CiAJCQlXTUlfU1RBX1BTX1VBUFNEX0FDMV9UUklHR0VSX0VOOworCQlwcmlvID0gMjsKKwkJYWNjID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQUNfQks6CiAJCXZhbHVlID0gV01JX1NUQV9QU19VQVBTRF9BQzBfREVMSVZFUllfRU4gfAogCQkJV01JX1NUQV9QU19VQVBTRF9BQzBfVFJJR0dFUl9FTjsKKwkJcHJpbyA9IDA7CisJCWFjYyA9IDA7CiAJCWJyZWFrOwogCX0KIApAQCAtMzgwOCw2ICs0MDg2LDQzIEBACiAJaWYgKHJldCkKIAkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gc2V0IHJ4IHdha2UgcGFyYW06ICVkXG4iLCByZXQpOwogCisJcmV0ID0gYXRoMTBrX21hY192aWZfcmVjYWxjX3BzX3dha2VfdGhyZXNob2xkKGFydmlmKTsKKwlpZiAocmV0KSB7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHJlY2FsYyBwcyB3YWtlIHRocmVzaG9sZCBvbiB2ZGV2ICVpOiAlZFxuIiwKKwkJCSAgICBhcnZpZi0+dmRldl9pZCwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBhdGgxMGtfbWFjX3ZpZl9yZWNhbGNfcHNfcG9sbF9jb3VudChhcnZpZik7CisJaWYgKHJldCkgeworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byByZWNhbGMgcHMgcG9sbCBjb3VudCBvbiB2ZGV2ICVpOiAlZFxuIiwKKwkJCSAgICBhcnZpZi0+dmRldl9pZCwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAodGVzdF9iaXQoV01JX1NFUlZJQ0VfU1RBX1VBUFNEX0JBU0lDX0FVVE9fVFJJRywgYXItPndtaS5zdmNfbWFwKSB8fAorCSAgICB0ZXN0X2JpdChXTUlfU0VSVklDRV9TVEFfVUFQU0RfVkFSX0FVVE9fVFJJRywgYXItPndtaS5zdmNfbWFwKSkgeworCQkvKiBPbmx5IHVzZXJzcGFjZSBjYW4gbWFrZSBhbiBlZHVjYXRlZCBkZWNpc2lvbiB3aGVuIHRvIHNlbmQKKwkJICogdHJpZ2dlciBmcmFtZS4gVGhlIGZvbGxvd2luZyBlZmZlY3RpdmVseSBkaXNhYmxlcyB1LVVBUFNECisJCSAqIGF1dG90cmlnZ2VyIGluIGZpcm13YXJlICh3aGljaCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQKKwkJICogcHJvdmlkZWQgdGhlIGF1dG90cmlnZ2VyIHNlcnZpY2UgaXMgYXZhaWxhYmxlKS4KKwkJICovCisKKwkJYXJnLndtbV9hYyA9IGFjYzsKKwkJYXJnLnVzZXJfcHJpb3JpdHkgPSBwcmlvOworCQlhcmcuc2VydmljZV9pbnRlcnZhbCA9IDA7CisJCWFyZy5zdXNwZW5kX2ludGVydmFsID0gV01JX1NUQV9VQVBTRF9NQVhfSU5URVJWQUxfTVNFQzsKKwkJYXJnLmRlbGF5X2ludGVydmFsID0gV01JX1NUQV9VQVBTRF9NQVhfSU5URVJWQUxfTVNFQzsKKworCQlyZXQgPSBhdGgxMGtfd21pX3ZkZXZfc3RhX3VhcHNkKGFyLCBhcnZpZi0+dmRldl9pZCwKKwkJCQkJCWFydmlmLT5ic3NpZCwgJmFyZywgMSk7CisJCWlmIChyZXQpIHsKKwkJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHNldCB1YXBzZCBhdXRvIHRyaWdnZXIgJWRcbiIsCisJCQkJICAgIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCiBleGl0OgogCXJldHVybiByZXQ7CiB9CkBAIC0zODE3LDYgKzQxMzIsNyBAQAogCQkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBhdGgxMGsgKmFyID0gaHctPnByaXY7CisJc3RydWN0IGF0aDEwa192aWYgKmFydmlmID0gYXRoMTBrX3ZpZl90b19hcnZpZih2aWYpOwogCXN0cnVjdCB3bWlfd21tX3BhcmFtc19hcmcgKnAgPSBOVUxMOwogCWludCByZXQ7CiAKQEAgLTM4MjQsMTYgKzQxNDAsMTYgQEAKIAogCXN3aXRjaCAoYWMpIHsKIAljYXNlIElFRUU4MDIxMV9BQ19WTzoKLQkJcCA9ICZhci0+d21tX3BhcmFtcy5hY192bzsKKwkJcCA9ICZhcnZpZi0+d21tX3BhcmFtcy5hY192bzsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQUNfVkk6Ci0JCXAgPSAmYXItPndtbV9wYXJhbXMuYWNfdmk7CisJCXAgPSAmYXJ2aWYtPndtbV9wYXJhbXMuYWNfdmk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FDX0JFOgotCQlwID0gJmFyLT53bW1fcGFyYW1zLmFjX2JlOworCQlwID0gJmFydmlmLT53bW1fcGFyYW1zLmFjX2JlOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9BQ19CSzoKLQkJcCA9ICZhci0+d21tX3BhcmFtcy5hY19iazsKKwkJcCA9ICZhcnZpZi0+d21tX3BhcmFtcy5hY19iazsKIAkJYnJlYWs7CiAJfQogCkBAIC0zODUzLDExICs0MTY5LDIzIEBACiAJICovCiAJcC0+dHhvcCA9IHBhcmFtcy0+dHhvcCAqIDMyOwogCi0JLyogRklYTUU6IEZXIGFjY2VwdHMgd21tIHBhcmFtcyBwZXIgaHcsIG5vdCBwZXIgdmlmICovCi0JcmV0ID0gYXRoMTBrX3dtaV9wZGV2X3NldF93bW1fcGFyYW1zKGFyLCAmYXItPndtbV9wYXJhbXMpOwotCWlmIChyZXQpIHsKLQkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gc2V0IHdtbSBwYXJhbXM6ICVkXG4iLCByZXQpOwotCQlnb3RvIGV4aXQ7CisJaWYgKGFyLT53bWkub3BzLT5nZW5fdmRldl93bW1fY29uZikgeworCQlyZXQgPSBhdGgxMGtfd21pX3ZkZXZfd21tX2NvbmYoYXIsIGFydmlmLT52ZGV2X2lkLAorCQkJCQkgICAgICAgJmFydmlmLT53bW1fcGFyYW1zKTsKKwkJaWYgKHJldCkgeworCQkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gc2V0IHZkZXYgd21tIHBhcmFtcyBvbiB2ZGV2ICVpOiAlZFxuIiwKKwkJCQkgICAgYXJ2aWYtPnZkZXZfaWQsIHJldCk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9IGVsc2UgeworCQkvKiBUaGlzIHdvbid0IHdvcmsgd2VsbCB3aXRoIG11bHRpLWludGVyZmFjZSBjYXNlcyBidXQgaXQncworCQkgKiBiZXR0ZXIgdGhhbiBub3RoaW5nLgorCQkgKi8KKwkJcmV0ID0gYXRoMTBrX3dtaV9wZGV2X3NldF93bW1fcGFyYW1zKGFyLCAmYXJ2aWYtPndtbV9wYXJhbXMpOworCQlpZiAocmV0KSB7CisJCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBzZXQgd21tIHBhcmFtczogJWRcbiIsIHJldCk7CisJCQlnb3RvIGV4aXQ7CisJCX0KIAl9CiAKIAlyZXQgPSBhdGgxMGtfY29uZl90eF91YXBzZChhciwgdmlmLCBhYywgcGFyYW1zLT51YXBzZCk7CkBAIC0zOTg5LDI5ICs0MzE3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGF0aDEwa19zZXRfZnJhZ190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3QgYXRoMTBrICphciA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGgxMGtfdmlmICphcnZpZjsKLQlpbnQgcmV0ID0gMDsKLQotCW11dGV4X2xvY2soJmFyLT5jb25mX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFydmlmLCAmYXItPmFydmlmcywgbGlzdCkgewotCQlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX01BQywgIm1hYyB2ZGV2ICVkIGZyYWdtZW50YXRpb24gdGhyZXNob2xkICVkXG4iLAotCQkJICAgYXJ2aWYtPnZkZXZfaWQsIHZhbHVlKTsKLQotCQlyZXQgPSBhdGgxMGtfbWFjX3NldF9mcmFnKGFydmlmLCB2YWx1ZSk7Ci0JCWlmIChyZXQpIHsKLQkJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHNldCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCBmb3IgdmRldiAlZDogJWRcbiIsCi0JCQkJICAgIGFydmlmLT52ZGV2X2lkLCByZXQpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZhci0+Y29uZl9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgdm9pZCBhdGgxMGtfZmx1c2goc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkgdTMyIHF1ZXVlcywgYm9vbCBkcm9wKQogewpAQCAtNDY1MCwxMiArNDk1NSwxMiBAQAogCS5od19zY2FuCQkJPSBhdGgxMGtfaHdfc2NhbiwKIAkuY2FuY2VsX2h3X3NjYW4JCQk9IGF0aDEwa19jYW5jZWxfaHdfc2NhbiwKIAkuc2V0X2tleQkJCT0gYXRoMTBrX3NldF9rZXksCisJLnNldF9kZWZhdWx0X3VuaWNhc3Rfa2V5ICAgICAgICA9IGF0aDEwa19zZXRfZGVmYXVsdF91bmljYXN0X2tleSwKIAkuc3RhX3N0YXRlCQkJPSBhdGgxMGtfc3RhX3N0YXRlLAogCS5jb25mX3R4CQkJPSBhdGgxMGtfY29uZl90eCwKIAkucmVtYWluX29uX2NoYW5uZWwJCT0gYXRoMTBrX3JlbWFpbl9vbl9jaGFubmVsLAogCS5jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwJPSBhdGgxMGtfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsLAogCS5zZXRfcnRzX3RocmVzaG9sZAkJPSBhdGgxMGtfc2V0X3J0c190aHJlc2hvbGQsCi0JLnNldF9mcmFnX3RocmVzaG9sZAkJPSBhdGgxMGtfc2V0X2ZyYWdfdGhyZXNob2xkLAogCS5mbHVzaAkJCQk9IGF0aDEwa19mbHVzaCwKIAkudHhfbGFzdF9iZWFjb24JCQk9IGF0aDEwa190eF9sYXN0X2JlYWNvbiwKIAkuc2V0X2FudGVubmEJCQk9IGF0aDEwa19zZXRfYW50ZW5uYSwKQEAgLTQ2NzYsNiArNDk4MSw5IEBACiAJLnN1c3BlbmQJCQk9IGF0aDEwa19zdXNwZW5kLAogCS5yZXN1bWUJCQkJPSBhdGgxMGtfcmVzdW1lLAogI2VuZGlmCisjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKKwkuc3RhX2FkZF9kZWJ1Z2ZzCQk9IGF0aDEwa19zdGFfYWRkX2RlYnVnZnMsCisjZW5kaWYKIH07CiAKICNkZWZpbmUgUkFURVRBQl9FTlQoX3JhdGUsIF9yYXRlaWQsIF9mbGFncykgeyBcCkBAIC00NzQ2LDYgKzUwNTQsOSBAQAogCUNIQU41RygxNjUsIDU4MjUsIDApLAogfTsKIAorLyogTm90ZTogQmUgY2FyZWZ1bCBpZiB5b3UgcmUtb3JkZXIgdGhlc2UuIFRoZXJlIGlzIGNvZGUgd2hpY2ggZGVwZW5kcyBvbiB0aGlzCisgKiBvcmRlcmluZy4KKyAqLwogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBhdGgxMGtfcmF0ZXNbXSA9IHsKIAkvKiBDQ0sgKi8KIAlSQVRFVEFCX0VOVCgxMCwgIDB4ODIsIDApLApAQCAtNDc5OSw2ICs1MTEwLDEwIEBACiAJLnR5cGVzCT0gQklUKE5MODAyMTFfSUZUWVBFX1AyUF9HTykKIAl9LAogCXsKKwkubWF4CT0gMSwKKwkudHlwZXMJPSBCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0RFVklDRSkKKwl9LAorCXsKIAkubWF4CT0gNywKIAkudHlwZXMJPSBCSVQoTkw4MDIxMV9JRlRZUEVfQVApCiAJfSwKQEAgLTQ5NTYsNiArNTI3MSwxMyBAQAogCiBpbnQgYXRoMTBrX21hY19yZWdpc3RlcihzdHJ1Y3QgYXRoMTBrICphcikKIHsKKwlzdGF0aWMgY29uc3QgdTMyIGNpcGhlcl9zdWl0ZXNbXSA9IHsKKwkJV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAsCisJCVdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCwKKwkJV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCwKKwkJV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCwKKwkJV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUMsCisJfTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhX3ZodF9jYXAgdmh0X2NhcDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgaHRfY2FwOwpAQCAtNDk4NSw3ICs1MzA3LDggQEAKIAkJYmFuZC0+Yml0cmF0ZXMgPSBhdGgxMGtfZ19yYXRlczsKIAkJYmFuZC0+aHRfY2FwID0gaHRfY2FwOwogCi0JCS8qIHZodCBpcyBub3Qgc3VwcG9ydGVkIGluIDIuNCBHSHogKi8KKwkJLyogRW5hYmxlIHRoZSBWSFQgc3VwcG9ydCBhdCAyLjQgR0h6ICovCisJCWJhbmQtPnZodF9jYXAgPSB2aHRfY2FwOwogCiAJCWFyLT5ody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gYmFuZDsKIAl9CkBAIC01MDE4LDE4ICs1MzQxLDE5IEBACiAKIAlpZiAoIXRlc3RfYml0KEFUSDEwS19GV19GRUFUVVJFX05PX1AyUCwgYXItPmZ3X2ZlYXR1cmVzKSkKIAkJYXItPmh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzIHw9CisJCQlCSVQoTkw4MDIxMV9JRlRZUEVfUDJQX0RFVklDRSkgfAogCQkJQklUKE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQpIHwKIAkJCUJJVChOTDgwMjExX0lGVFlQRV9QMlBfR08pOwogCiAJYXItPmh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKIAkJCUlFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8CiAJCQlJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUyB8Ci0JCQlJRUVFODAyMTFfSFdfU1VQUE9SVFNfVUFQU0QgfAogCQkJSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFIHwKIAkJCUlFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMgfAogCQkJSUVFRTgwMjExX0hXX0hBU19SQVRFX0NPTlRST0wgfAogCQkJSUVFRTgwMjExX0hXX0FQX0xJTktfUFMgfAotCQkJSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQ7CisJCQlJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVCB8CisJCQlJRUVFODAyMTFfSFdfU1dfQ1JZUFRPX0NPTlRST0w7CiAKIAlhci0+aHctPndpcGh5LT5mZWF0dXJlcyB8PSBOTDgwMjExX0ZFQVRVUkVfU1RBVElDX1NNUFM7CiAKQEAgLTUwNDksNiArNTM3MywxOSBAQAogCiAJYXItPmh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gQVRIMTBLX01BWF9IV19MSVNURU5fSU5URVJWQUw7CiAKKwlpZiAodGVzdF9iaXQoV01JX1NFUlZJQ0VfQkVBQ09OX09GRkxPQUQsIGFyLT53bWkuc3ZjX21hcCkpIHsKKwkJYXItPmh3LT53aXBoeS0+ZmxhZ3MgfD0gV0lQSFlfRkxBR19BUF9QUk9CRV9SRVNQX09GRkxPQUQ7CisKKwkJLyogRmlybXdhcmUgZGVsaXZlcnMgV1BTL1AyUCBQcm9iZSBSZXF1ZXN0cyBmcmFtZXMgdG8gZHJpdmVyIHNvCisJCSAqIHRoYXQgdXNlcnNwYWNlIChlLmcuIHdwYV9zdXBwbGljYW50L2hvc3RhcGQpIGNhbiBnZW5lcmF0ZQorCQkgKiBjb3JyZWN0IFByb2JlIFJlc3BvbnNlcy4gVGhpcyBpcyBtb3JlIG9mIGEgaGFjayBhZHZlcnQuLgorCQkgKi8KKwkJYXItPmh3LT53aXBoeS0+cHJvYmVfcmVzcF9vZmZsb2FkIHw9CisJCQlOTDgwMjExX1BST0JFX1JFU1BfT0ZGTE9BRF9TVVBQT1JUX1dQUyB8CisJCQlOTDgwMjExX1BST0JFX1JFU1BfT0ZGTE9BRF9TVVBQT1JUX1dQUzIgfAorCQkJTkw4MDIxMV9QUk9CRV9SRVNQX09GRkxPQURfU1VQUE9SVF9QMlA7CisJfQorCiAJYXItPmh3LT53aXBoeS0+ZmxhZ3MgfD0gV0lQSFlfRkxBR19IQVNfUkVNQUlOX09OX0NIQU5ORUw7CiAJYXItPmh3LT53aXBoeS0+ZmxhZ3MgfD0gV0lQSFlfRkxBR19IQVNfQ0hBTk5FTF9TV0lUQ0g7CiAJYXItPmh3LT53aXBoeS0+bWF4X3JlbWFpbl9vbl9jaGFubmVsX2R1cmF0aW9uID0gNTAwMDsKQEAgLTUwNjIsMTYgKzUzOTksMjYgQEAKIAkgKi8KIAlhci0+aHctPnF1ZXVlcyA9IDQ7CiAKLQlpZiAodGVzdF9iaXQoQVRIMTBLX0ZXX0ZFQVRVUkVfV01JXzEwWCwgYXItPmZ3X2ZlYXR1cmVzKSkgewotCQlhci0+aHctPndpcGh5LT5pZmFjZV9jb21iaW5hdGlvbnMgPSBhdGgxMGtfMTB4X2lmX2NvbWI7Ci0JCWFyLT5ody0+d2lwaHktPm5faWZhY2VfY29tYmluYXRpb25zID0KLQkJCUFSUkFZX1NJWkUoYXRoMTBrXzEweF9pZl9jb21iKTsKLQl9IGVsc2UgeworCXN3aXRjaCAoYXItPndtaS5vcF92ZXJzaW9uKSB7CisJY2FzZSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fTUFJTjoKKwljYXNlIEFUSDEwS19GV19XTUlfT1BfVkVSU0lPTl9UTFY6CiAJCWFyLT5ody0+d2lwaHktPmlmYWNlX2NvbWJpbmF0aW9ucyA9IGF0aDEwa19pZl9jb21iOwogCQlhci0+aHctPndpcGh5LT5uX2lmYWNlX2NvbWJpbmF0aW9ucyA9CiAJCQlBUlJBWV9TSVpFKGF0aDEwa19pZl9jb21iKTsKLQogCQlhci0+aHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgfD0gQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKKwkJYnJlYWs7CisJY2FzZSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fMTBfMToKKwljYXNlIEFUSDEwS19GV19XTUlfT1BfVkVSU0lPTl8xMF8yOgorCWNhc2UgQVRIMTBLX0ZXX1dNSV9PUF9WRVJTSU9OXzEwXzJfNDoKKwkJYXItPmh3LT53aXBoeS0+aWZhY2VfY29tYmluYXRpb25zID0gYXRoMTBrXzEweF9pZl9jb21iOworCQlhci0+aHctPndpcGh5LT5uX2lmYWNlX2NvbWJpbmF0aW9ucyA9CisJCQlBUlJBWV9TSVpFKGF0aDEwa18xMHhfaWZfY29tYik7CisJCWJyZWFrOworCWNhc2UgQVRIMTBLX0ZXX1dNSV9PUF9WRVJTSU9OX1VOU0VUOgorCWNhc2UgQVRIMTBLX0ZXX1dNSV9PUF9WRVJTSU9OX01BWDoKKwkJV0FSTl9PTigxKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZnJlZTsKIAl9CiAKIAlhci0+aHctPm5ldGRldl9mZWF0dXJlcyA9IE5FVElGX0ZfSFdfQ1NVTTsKQEAgLTUwOTMsNiArNTQ0MCw5IEBACiAJCWdvdG8gZXJyX2ZyZWU7CiAJfQogCisJYXItPmh3LT53aXBoeS0+Y2lwaGVyX3N1aXRlcyA9IGNpcGhlcl9zdWl0ZXM7CisJYXItPmh3LT53aXBoeS0+bl9jaXBoZXJfc3VpdGVzID0gQVJSQVlfU0laRShjaXBoZXJfc3VpdGVzKTsKKwogCXJldCA9IGllZWU4MDIxMV9yZWdpc3Rlcl9odyhhci0+aHcpOwogCWlmIChyZXQpIHsKIAkJYXRoMTBrX2VycihhciwgImZhaWxlZCB0byByZWdpc3RlciBpZWVlODAyMTE6ICVkXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvcGNpLmMKaW5kZXggN2FiYjgzNi4uZTY5NzJiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3BjaS5jCkBAIC01OCwxMiArNTgsMjcgQEAKICNkZWZpbmUgQVRIMTBLX1BDSV9OVU1fV0FSTV9SRVNFVF9BVFRFTVBUUyAzCiAKICNkZWZpbmUgUUNBOTg4WF8yXzBfREVWSUNFX0lECSgweDAwM2MpCisjZGVmaW5lIFFDQTYxNzRfMl8xX0RFVklDRV9JRAkoMHgwMDNlKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRoMTBrX3BjaV9pZF90YWJsZVtdID0gewogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgUUNBOTg4WF8yXzBfREVWSUNFX0lEKSB9LCAvKiBQQ0ktRSBRQ0E5ODhYIFYyICovCisJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCBRQ0E2MTc0XzJfMV9ERVZJQ0VfSUQpIH0sIC8qIFBDSS1FIFFDQTYxNzQgVjIuMSAqLwogCXswfQogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdGgxMGtfcGNpX3N1cHBfY2hpcCBhdGgxMGtfcGNpX3N1cHBfY2hpcHNbXSA9IHsKKwkvKiBRQ0E5ODhYIHByZSAyLjAgY2hpcHMgYXJlIG5vdCBzdXBwb3J0ZWQgYmVjYXVzZSB0aGV5IG5lZWQgc29tZSBuYXN0eQorCSAqIGhhY2tzLiBhdGgxMGsgZG9lc24ndCBoYXZlIHRoZW0gYW5kIHRoZXNlIGRldmljZXMgY3Jhc2ggaG9ycmlibHkKKwkgKiBiZWNhdXNlIG9mIHRoYXQuCisJICovCisJeyBRQ0E5ODhYXzJfMF9ERVZJQ0VfSUQsIFFDQTk4OFhfSFdfMl8wX0NISVBfSURfUkVWIH0sCisJeyBRQ0E2MTc0XzJfMV9ERVZJQ0VfSUQsIFFDQTYxNzRfSFdfMl8xX0NISVBfSURfUkVWIH0sCisJeyBRQ0E2MTc0XzJfMV9ERVZJQ0VfSUQsIFFDQTYxNzRfSFdfMl8yX0NISVBfSURfUkVWIH0sCisJeyBRQ0E2MTc0XzJfMV9ERVZJQ0VfSUQsIFFDQTYxNzRfSFdfM18wX0NISVBfSURfUkVWIH0sCisJeyBRQ0E2MTc0XzJfMV9ERVZJQ0VfSUQsIFFDQTYxNzRfSFdfM18xX0NISVBfSURfUkVWIH0sCisJeyBRQ0E2MTc0XzJfMV9ERVZJQ0VfSUQsIFFDQTYxNzRfSFdfM18yX0NISVBfSURfUkVWIH0sCit9OworCiBzdGF0aWMgdm9pZCBhdGgxMGtfcGNpX2J1ZmZlcl9jbGVhbnVwKHN0cnVjdCBhdGgxMGsgKmFyKTsKIHN0YXRpYyBpbnQgYXRoMTBrX3BjaV9jb2xkX3Jlc2V0KHN0cnVjdCBhdGgxMGsgKmFyKTsKIHN0YXRpYyBpbnQgYXRoMTBrX3BjaV93YXJtX3Jlc2V0KHN0cnVjdCBhdGgxMGsgKmFyKTsKQEAgLTM5NSw3ICs0MTAsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlBVEgxMEtfU0tCX0NCKHNrYiktPnBhZGRyID0gcGFkZHI7CisJQVRIMTBLX1NLQl9SWENCKHNrYiktPnBhZGRyID0gcGFkZHI7CiAKIAlyZXQgPSBfX2F0aDEwa19jZV9yeF9wb3N0X2J1ZihjZV9waXBlLCBza2IsIHBhZGRyKTsKIAlpZiAocmV0KSB7CkBAIC04NjQsNyArODc5LDcgQEAKIAkJCQkJICAgICAmZmxhZ3MpID09IDApIHsKIAkJc2tiID0gdHJhbnNmZXJfY29udGV4dDsKIAkJbWF4X25ieXRlcyA9IHNrYi0+bGVuICsgc2tiX3RhaWxyb29tKHNrYik7Ci0JCWRtYV91bm1hcF9zaW5nbGUoYXItPmRldiwgQVRIMTBLX1NLQl9DQihza2IpLT5wYWRkciwKKwkJZG1hX3VubWFwX3NpbmdsZShhci0+ZGV2LCBBVEgxMEtfU0tCX1JYQ0Ioc2tiKS0+cGFkZHIsCiAJCQkJIG1heF9uYnl0ZXMsIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJaWYgKHVubGlrZWx5KG1heF9uYnl0ZXMgPCBuYnl0ZXMpKSB7CkBAIC0xMjMwLDcgKzEyNDUsNyBAQAogCiAJCWNlX3JpbmctPnBlcl90cmFuc2Zlcl9jb250ZXh0W2ldID0gTlVMTDsKIAotCQlkbWFfdW5tYXBfc2luZ2xlKGFyLT5kZXYsIEFUSDEwS19TS0JfQ0Ioc2tiKS0+cGFkZHIsCisJCWRtYV91bm1hcF9zaW5nbGUoYXItPmRldiwgQVRIMTBLX1NLQl9SWENCKHNrYiktPnBhZGRyLAogCQkJCSBza2ItPmxlbiArIHNrYl90YWlscm9vbShza2IpLAogCQkJCSBETUFfRlJPTV9ERVZJQ0UpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtMTQ5OCw2ICsxNTEzLDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYXRoMTBrX3BjaV9nZXRfbnVtX2JhbmtzKHN0cnVjdCBhdGgxMGsgKmFyKQoreworCXN0cnVjdCBhdGgxMGtfcGNpICphcl9wY2kgPSBhdGgxMGtfcGNpX3ByaXYoYXIpOworCisJc3dpdGNoIChhcl9wY2ktPnBkZXYtPmRldmljZSkgeworCWNhc2UgUUNBOTg4WF8yXzBfREVWSUNFX0lEOgorCQlyZXR1cm4gMTsKKwljYXNlIFFDQTYxNzRfMl8xX0RFVklDRV9JRDoKKwkJc3dpdGNoIChNUyhhci0+Y2hpcF9pZCwgU09DX0NISVBfSURfUkVWKSkgeworCQljYXNlIFFDQTYxNzRfSFdfMV8wX0NISVBfSURfUkVWOgorCQljYXNlIFFDQTYxNzRfSFdfMV8xX0NISVBfSURfUkVWOgorCQkJcmV0dXJuIDM7CisJCWNhc2UgUUNBNjE3NF9IV18xXzNfQ0hJUF9JRF9SRVY6CisJCQlyZXR1cm4gMjsKKwkJY2FzZSBRQ0E2MTc0X0hXXzJfMV9DSElQX0lEX1JFVjoKKwkJY2FzZSBRQ0E2MTc0X0hXXzJfMl9DSElQX0lEX1JFVjoKKwkJCXJldHVybiA2OworCQljYXNlIFFDQTYxNzRfSFdfM18wX0NISVBfSURfUkVWOgorCQljYXNlIFFDQTYxNzRfSFdfM18xX0NISVBfSURfUkVWOgorCQljYXNlIFFDQTYxNzRfSFdfM18yX0NISVBfSURfUkVWOgorCQkJcmV0dXJuIDk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJYXRoMTBrX3dhcm4oYXIsICJ1bmtub3duIG51bWJlciBvZiBiYW5rcywgYXNzdW1pbmcgMVxuIik7CisJcmV0dXJuIDE7Cit9CisKIHN0YXRpYyBpbnQgYXRoMTBrX3BjaV9pbml0X2NvbmZpZyhzdHJ1Y3QgYXRoMTBrICphcikKIHsKIAl1MzIgaW50ZXJjb25uZWN0X3RhcmdfYWRkcjsKQEAgLTE2MDgsNyArMTY1Miw4IEBACiAJLyogZmlyc3QgYmFuayBpcyBzd2l0Y2hlZCB0byBJUkFNICovCiAJZWFsbG9jX3ZhbHVlIHw9ICgoSElfRUFSTFlfQUxMT0NfTUFHSUMgPDwgSElfRUFSTFlfQUxMT0NfTUFHSUNfU0hJRlQpICYKIAkJCSBISV9FQVJMWV9BTExPQ19NQUdJQ19NQVNLKTsKLQllYWxsb2NfdmFsdWUgfD0gKCgxIDw8IEhJX0VBUkxZX0FMTE9DX0lSQU1fQkFOS1NfU0hJRlQpICYKKwllYWxsb2NfdmFsdWUgfD0gKChhdGgxMGtfcGNpX2dldF9udW1fYmFua3MoYXIpIDw8CisJCQkgIEhJX0VBUkxZX0FMTE9DX0lSQU1fQkFOS1NfU0hJRlQpICYKIAkJCSBISV9FQVJMWV9BTExPQ19JUkFNX0JBTktTX01BU0spOwogCiAJcmV0ID0gYXRoMTBrX3BjaV9kaWFnX3dyaXRlMzIoYXIsIGVhbGxvY190YXJnX2FkZHIsIGVhbGxvY192YWx1ZSk7CkBAIC0xODA0LDEyICsxODQ5LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXRoMTBrX3BjaV9jaGlwX3Jlc2V0KHN0cnVjdCBhdGgxMGsgKmFyKQorc3RhdGljIGludCBhdGgxMGtfcGNpX3FjYTk4OHhfY2hpcF9yZXNldChzdHJ1Y3QgYXRoMTBrICphcikKIHsKIAlpbnQgaSwgcmV0OwogCXUzMiB2YWw7CiAKLQlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX0JPT1QsICJib290IGNoaXAgcmVzZXRcbiIpOworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfQk9PVCwgImJvb3QgOTg4eCBjaGlwIHJlc2V0XG4iKTsKIAogCS8qIFNvbWUgaGFyZHdhcmUgcmV2aXNpb25zIChlLmcuIENVUzIyM3YyKSBoYXMgaXNzdWVzIHdpdGggY29sZCByZXNldC4KIAkgKiBJdCBpcyB0aHVzIHByZWZlcnJlZCB0byB1c2Ugd2FybSByZXNldCB3aGljaCBpcyBzYWZlciBidXQgbWF5IG5vdCBiZQpAQCAtMTg3MywxMSArMTkxOCw1MyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfQk9PVCwgImJvb3QgY2hpcCByZXNldCBjb21wbGV0ZSAoY29sZClcbiIpOworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfQk9PVCwgImJvb3QgcWNhOTg4eCBjaGlwIHJlc2V0IGNvbXBsZXRlIChjb2xkKVxuIik7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBhdGgxMGtfcGNpX3FjYTYxNzRfY2hpcF9yZXNldChzdHJ1Y3QgYXRoMTBrICphcikKK3sKKwlpbnQgcmV0OworCisJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19CT09ULCAiYm9vdCBxY2E2MTc0IGNoaXAgcmVzZXRcbiIpOworCisJLyogRklYTUU6IFFDQTYxNzQgcmVxdWlyZXMgY29sZCArIHdhcm0gcmVzZXQgdG8gd29yay4gKi8KKworCXJldCA9IGF0aDEwa19wY2lfY29sZF9yZXNldChhcik7CisJaWYgKHJldCkgeworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBjb2xkIHJlc2V0OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBhdGgxMGtfcGNpX3dhaXRfZm9yX3RhcmdldF9pbml0KGFyKTsKKwlpZiAocmV0KSB7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHdhaXQgZm9yIHRhcmdldCBhZnRlciBjb2xkIHJlc2V0OiAlZFxuIiwKKwkJCQlyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGF0aDEwa19wY2lfd2FybV9yZXNldChhcik7CisJaWYgKHJldCkgeworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byB3YXJtIHJlc2V0OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX0JPT1QsICJib290IHFjYTYxNzQgY2hpcCByZXNldCBjb21wbGV0ZSAoY29sZClcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoMTBrX3BjaV9jaGlwX3Jlc2V0KHN0cnVjdCBhdGgxMGsgKmFyKQoreworCWlmIChRQ0FfUkVWXzk4OFgoYXIpKQorCQlyZXR1cm4gYXRoMTBrX3BjaV9xY2E5ODh4X2NoaXBfcmVzZXQoYXIpOworCWVsc2UgaWYgKFFDQV9SRVZfNjE3NChhcikpCisJCXJldHVybiBhdGgxMGtfcGNpX3FjYTYxNzRfY2hpcF9yZXNldChhcik7CisJZWxzZQorCQlyZXR1cm4gLUVOT1RTVVBQOworfQorCiBzdGF0aWMgaW50IGF0aDEwa19wY2lfaGlmX3Bvd2VyX3VwKHN0cnVjdCBhdGgxMGsgKmFyKQogewogCWludCByZXQ7CkBAIC0xOTAyLDYgKzE5ODksMTIgQEAKIAkgKi8KIAlyZXQgPSBhdGgxMGtfcGNpX2NoaXBfcmVzZXQoYXIpOwogCWlmIChyZXQpIHsKKwkJaWYgKGF0aDEwa19wY2lfaGFzX2Z3X2NyYXNoZWQoYXIpKSB7CisJCQlhdGgxMGtfd2FybihhciwgImZpcm13YXJlIGNyYXNoZWQgZHVyaW5nIGNoaXAgcmVzZXRcbiIpOworCQkJYXRoMTBrX3BjaV9md19jcmFzaGVkX2NsZWFyKGFyKTsKKwkJCWF0aDEwa19wY2lfZndfY3Jhc2hlZF9kdW1wKGFyKTsKKwkJfQorCiAJCWF0aDEwa19lcnIoYXIsICJmYWlsZWQgdG8gcmVzZXQgY2hpcDogJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyX3NsZWVwOwogCX0KQEAgLTIwMzMsNiArMjEyNiw3IEBACiAJCXJldHVybjsKIAl9CiAKKwlhdGgxMGtfcGNpX2lycV9kaXNhYmxlKGFyKTsKIAlhdGgxMGtfcGNpX2Z3X2NyYXNoZWRfY2xlYXIoYXIpOwogCWF0aDEwa19wY2lfZndfY3Jhc2hlZF9kdW1wKGFyKTsKIH0KQEAgLTIxMDIsNiArMjE5Niw3IEBACiAJc3RydWN0IGF0aDEwa19wY2kgKmFyX3BjaSA9IGF0aDEwa19wY2lfcHJpdihhcik7CiAKIAlpZiAoYXRoMTBrX3BjaV9oYXNfZndfY3Jhc2hlZChhcikpIHsKKwkJYXRoMTBrX3BjaV9pcnFfZGlzYWJsZShhcik7CiAJCWF0aDEwa19wY2lfZndfY3Jhc2hlZF9jbGVhcihhcik7CiAJCWF0aDEwa19wY2lfZndfY3Jhc2hlZF9kdW1wKGFyKTsKIAkJcmV0dXJuOwpAQCAtMjM0NCw4ICsyNDM5LDYgQEAKIAogCWlmICh2YWwgJiBGV19JTkRfRVZFTlRfUEVORElORykgewogCQlhdGgxMGtfd2FybihhciwgImRldmljZSBoYXMgY3Jhc2hlZCBkdXJpbmcgaW5pdFxuIik7Ci0JCWF0aDEwa19wY2lfZndfY3Jhc2hlZF9jbGVhcihhcik7Ci0JCWF0aDEwa19wY2lfZndfY3Jhc2hlZF9kdW1wKGFyKTsKIAkJcmV0dXJuIC1FQ09NTTsKIAl9CiAKQEAgLTI0NzYsMTcgKzI1NjksNDYgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKK3N0YXRpYyBib29sIGF0aDEwa19wY2lfY2hpcF9pc19zdXBwb3J0ZWQodTMyIGRldl9pZCwgdTMyIGNoaXBfaWQpCit7CisJY29uc3Qgc3RydWN0IGF0aDEwa19wY2lfc3VwcF9jaGlwICpzdXBwX2NoaXA7CisJaW50IGk7CisJdTMyIHJldl9pZCA9IE1TKGNoaXBfaWQsIFNPQ19DSElQX0lEX1JFVik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdGgxMGtfcGNpX3N1cHBfY2hpcHMpOyBpKyspIHsKKwkJc3VwcF9jaGlwID0gJmF0aDEwa19wY2lfc3VwcF9jaGlwc1tpXTsKKworCQlpZiAoc3VwcF9jaGlwLT5kZXZfaWQgPT0gZGV2X2lkICYmCisJCSAgICBzdXBwX2NoaXAtPnJldl9pZCA9PSByZXZfaWQpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBpbnQgYXRoMTBrX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2RldikKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgYXRoMTBrICphcjsKIAlzdHJ1Y3QgYXRoMTBrX3BjaSAqYXJfcGNpOworCWVudW0gYXRoMTBrX2h3X3JldiBod19yZXY7CiAJdTMyIGNoaXBfaWQ7CiAKLQlhciA9IGF0aDEwa19jb3JlX2NyZWF0ZShzaXplb2YoKmFyX3BjaSksICZwZGV2LT5kZXYsCi0JCQkJQVRIMTBLX0JVU19QQ0ksCi0JCQkJJmF0aDEwa19wY2lfaGlmX29wcyk7CisJc3dpdGNoIChwY2lfZGV2LT5kZXZpY2UpIHsKKwljYXNlIFFDQTk4OFhfMl8wX0RFVklDRV9JRDoKKwkJaHdfcmV2ID0gQVRIMTBLX0hXX1FDQTk4OFg7CisJCWJyZWFrOworCWNhc2UgUUNBNjE3NF8yXzFfREVWSUNFX0lEOgorCQlod19yZXYgPSBBVEgxMEtfSFdfUUNBNjE3NDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisKKwlhciA9IGF0aDEwa19jb3JlX2NyZWF0ZShzaXplb2YoKmFyX3BjaSksICZwZGV2LT5kZXYsIEFUSDEwS19CVVNfUENJLAorCQkJCWh3X3JldiwgJmF0aDEwa19wY2lfaGlmX29wcyk7CiAJaWYgKCFhcikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgY29yZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjUxNSwxMiArMjYzNyw2IEBACiAJCWdvdG8gZXJyX3JlbGVhc2U7CiAJfQogCi0JY2hpcF9pZCA9IGF0aDEwa19wY2lfc29jX3JlYWQzMihhciwgU09DX0NISVBfSURfQUREUkVTUyk7Ci0JaWYgKGNoaXBfaWQgPT0gMHhmZmZmZmZmZikgewotCQlhdGgxMGtfZXJyKGFyLCAiZmFpbGVkIHRvIGdldCBjaGlwIGlkXG4iKTsKLQkJZ290byBlcnJfc2xlZXA7Ci0JfQotCiAJcmV0ID0gYXRoMTBrX3BjaV9hbGxvY19waXBlcyhhcik7CiAJaWYgKHJldCkgewogCQlhdGgxMGtfZXJyKGFyLCAiZmFpbGVkIHRvIGFsbG9jYXRlIGNvcHkgZW5naW5lIHBpcGVzOiAlZFxuIiwKQEAgLTI1NDcsNiArMjY2MywyNCBAQAogCQlnb3RvIGVycl9kZWluaXRfaXJxOwogCX0KIAorCXJldCA9IGF0aDEwa19wY2lfY2hpcF9yZXNldChhcik7CisJaWYgKHJldCkgeworCQlhdGgxMGtfZXJyKGFyLCAiZmFpbGVkIHRvIHJlc2V0IGNoaXA6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9mcmVlX2lycTsKKwl9CisKKwljaGlwX2lkID0gYXRoMTBrX3BjaV9zb2NfcmVhZDMyKGFyLCBTT0NfQ0hJUF9JRF9BRERSRVNTKTsKKwlpZiAoY2hpcF9pZCA9PSAweGZmZmZmZmZmKSB7CisJCWF0aDEwa19lcnIoYXIsICJmYWlsZWQgdG8gZ2V0IGNoaXAgaWRcbiIpOworCQlnb3RvIGVycl9mcmVlX2lycTsKKwl9CisKKwlpZiAoIWF0aDEwa19wY2lfY2hpcF9pc19zdXBwb3J0ZWQocGRldi0+ZGV2aWNlLCBjaGlwX2lkKSkgeworCQlhdGgxMGtfZXJyKGFyLCAiZGV2aWNlICUwNHggd2l0aCBjaGlwX2lkICUwOHggaXNuJ3Qgc3VwcG9ydGVkXG4iLAorCQkJICAgcGRldi0+ZGV2aWNlLCBjaGlwX2lkKTsKKwkJZ290byBlcnJfc2xlZXA7CisJfQorCiAJYXRoMTBrX3BjaV9zbGVlcChhcik7CiAKIAlyZXQgPSBhdGgxMGtfY29yZV9yZWdpc3RlcihhciwgY2hpcF9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3BjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9wY2kuaAppbmRleCBjZjM2NTExLi5iZGRmNTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3BjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvcGNpLmgKQEAgLTE1Miw2ICsxNTIsMTEgQEAKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgaW50cjsKIH07CiAKK3N0cnVjdCBhdGgxMGtfcGNpX3N1cHBfY2hpcCB7CisJdTMyIGRldl9pZDsKKwl1MzIgcmV2X2lkOworfTsKKwogc3RydWN0IGF0aDEwa19wY2kgewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKQEAgLTE4OSw3ICsxOTQsNyBAQAogCiAjZGVmaW5lIEFUSDEwS19QQ0lfUlhfUE9TVF9SRVRSWV9NUyA1MAogI2RlZmluZSBBVEhfUENJX1JFU0VUX1dBSVRfTUFYIDEwIC8qIG1zICovCi0jZGVmaW5lIFBDSUVfV0FLRV9USU1FT1VUIDUwMDAJLyogNW1zICovCisjZGVmaW5lIFBDSUVfV0FLRV9USU1FT1VUIDEwMDAwCS8qIDEwbXMgKi8KIAogI2RlZmluZSBCQVJfTlVNIDAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9yeF9kZXNjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3J4X2Rlc2MuaAppbmRleCBlMWZmZGQ1Li5lOWNjNzc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3J4X2Rlc2MuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3J4X2Rlc2MuaApAQCAtODUwLDcgKzg1MCw3IEBACiAKICNkZWZpbmUgUlhfUFBEVV9FTkRfSU5GTzFfUFBEVV9ET05FICgxIDw8IDE1KQogCi1zdHJ1Y3QgcnhfcHBkdV9lbmQgeworc3RydWN0IHJ4X3BwZHVfZW5kX2NvbW1vbiB7CiAJX19sZTMyIGV2bV9wMDsKIAlfX2xlMzIgZXZtX3AxOwogCV9fbGUzMiBldm1fcDI7CkBAIC04NzMsMTAgKzg3MywzMyBAQAogCXU4IHBoeV9lcnJfY29kZTsKIAlfX2xlMTYgZmxhZ3M7IC8qICVSWF9QUERVX0VORF9GTEFHU18gKi8KIAlfX2xlMzIgaW5mbzA7IC8qICVSWF9QUERVX0VORF9JTkZPMF8gKi8KK30gX19wYWNrZWQ7CisKK3N0cnVjdCByeF9wcGR1X2VuZF9xY2E5ODh4IHsKIAlfX2xlMTYgYmJfbGVuZ3RoOwogCV9fbGUxNiBpbmZvMTsgLyogJVJYX1BQRFVfRU5EX0lORk8xXyAqLwogfSBfX3BhY2tlZDsKIAorI2RlZmluZSBSWF9QUERVX0VORF9SVFRfQ09SUkVMQVRJT05fVkFMVUVfTUFTSyAweDAwZmZmZmZmCisjZGVmaW5lIFJYX1BQRFVfRU5EX1JUVF9DT1JSRUxBVElPTl9WQUxVRV9MU0IgIDAKKyNkZWZpbmUgUlhfUFBEVV9FTkRfUlRUX1VOVVNFRF9NQVNLICAgICAgICAgICAgMHg3ZjAwMDAwMAorI2RlZmluZSBSWF9QUERVX0VORF9SVFRfVU5VU0VEX0xTQiAgICAgICAgICAgICAyNAorI2RlZmluZSBSWF9QUERVX0VORF9SVFRfTk9STUFMX01PREUgICAgICAgICAgICBCSVQoMzEpCisKK3N0cnVjdCByeF9wcGR1X2VuZF9xY2E2MTc0IHsKKwlfX2xlMzIgcnR0OyAvKiAlUlhfUFBEVV9FTkRfUlRUXyAqLworCV9fbGUxNiBiYl9sZW5ndGg7CisJX19sZTE2IGluZm8xOyAvKiAlUlhfUFBEVV9FTkRfSU5GTzFfICovCit9IF9fcGFja2VkOworCitzdHJ1Y3QgcnhfcHBkdV9lbmQgeworCXN0cnVjdCByeF9wcGR1X2VuZF9jb21tb24gY29tbW9uOworCXVuaW9uIHsKKwkJc3RydWN0IHJ4X3BwZHVfZW5kX3FjYTk4OHggcWNhOTg4eDsKKwkJc3RydWN0IHJ4X3BwZHVfZW5kX3FjYTYxNzQgcWNhNjE3NDsKKwl9IF9fcGFja2VkOworfSBfX3BhY2tlZDsKKwogLyoKICAqIGV2bV9wMAogICoJCUVWTSBmb3IgcGlsb3QgMC4gIENvbnRhaW4gRVZNIGZvciBzdHJlYW1zOiAwLCAxLCAyIGFuZCAzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9zcGVjdHJhbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway9zcGVjdHJhbC5jCmluZGV4IDYzY2U2MWYuLmQyMmFkZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvc3BlY3RyYWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3NwZWN0cmFsLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWxheS5oPgogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgIndtaS1vcHMuaCIKIAogc3RhdGljIHZvaWQgc2VuZF9mZnRfc2FtcGxlKHN0cnVjdCBhdGgxMGsgKmFyLAogCQkJICAgIGNvbnN0IHN0cnVjdCBmZnRfc2FtcGxlX3RsdiAqZmZ0X3NhbXBsZV90bHYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3RhcmdhZGRycy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway90YXJnYWRkcnMuaAppbmRleCA5ZDBhZTMwLi5hNDE3YWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3RhcmdhZGRycy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvdGFyZ2FkZHJzLmgKQEAgLTE4LDYgKzE4LDggQEAKICNpZm5kZWYgX19UQVJHQUREUlNfSF9fCiAjZGVmaW5lIF9fVEFSR0FERFJTX0hfXwogCisjaW5jbHVkZSAiaHcuaCIKKwogLyoKICAqIHh4eF9IT1NUX0lOVEVSRVNUX0FERFJFU1MgaXMgdGhlIGFkZHJlc3MgaW4gVGFyZ2V0IFJBTSBvZiB0aGUKICAqIGhvc3RfaW50ZXJlc3Qgc3RydWN0dXJlLiAgSXQgbXVzdCBtYXRjaCB0aGUgYWRkcmVzcyBvZiB0aGUgX2hvc3RfaW50ZXJlc3QKQEAgLTQ0NSw0ICs0NDcsNyBAQAogI2RlZmluZSBRQ0E5ODhYX0JPQVJEX0RBVEFfU1ogICAgIDcxNjgKICNkZWZpbmUgUUNBOTg4WF9CT0FSRF9FWFRfREFUQV9TWiAwCiAKKyNkZWZpbmUgUUNBNjE3NF9CT0FSRF9EQVRBX1NaICAgICA4MTkyCisjZGVmaW5lIFFDQTYxNzRfQk9BUkRfRVhUX0RBVEFfU1ogMAorCiAjZW5kaWYgLyogX19UQVJHQUREUlNfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3Rlc3Rtb2RlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3Rlc3Rtb2RlLmMKaW5kZXggNDgzZGI5Yy4uYjA4NGY4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway90ZXN0bW9kZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvdGVzdG1vZGUuYwpAQCAtMTg3LDEzICsxODcsMTQgQEAKIAogCW1lbWNweShhci0+dGVzdG1vZGUub3JpZ19md19mZWF0dXJlcywgYXItPmZ3X2ZlYXR1cmVzLAogCSAgICAgICBzaXplb2YoYXItPmZ3X2ZlYXR1cmVzKSk7CisJYXItPnRlc3Rtb2RlLm9yaWdfd21pX29wX3ZlcnNpb24gPSBhci0+d21pLm9wX3ZlcnNpb247CiAKIAkvKiB1dGYuYmluIGZpcm13YXJlIGltYWdlIGRvZXMgbm90IGFkdmVydGlzZSBmaXJtd2FyZSBmZWF0dXJlcy4gRG8KIAkgKiBhbiB1Z2x5IGhhY2sgd2hlcmUgd2UgZm9yY2UgdGhlIGZpcm13YXJlIGZlYXR1cmVzIHNvIHRoYXQgd21pLmMKIAkgKiB3aWxsIHVzZSB0aGUgY29ycmVjdCBXTUkgaW50ZXJmYWNlLgogCSAqLwogCW1lbXNldChhci0+ZndfZmVhdHVyZXMsIDAsIHNpemVvZihhci0+ZndfZmVhdHVyZXMpKTsKLQlfX3NldF9iaXQoQVRIMTBLX0ZXX0ZFQVRVUkVfV01JXzEwWCwgYXItPmZ3X2ZlYXR1cmVzKTsKKwlhci0+d21pLm9wX3ZlcnNpb24gPSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fMTBfMTsKIAogCXJldCA9IGF0aDEwa19oaWZfcG93ZXJfdXAoYXIpOwogCWlmIChyZXQpIHsKQEAgLTIyNCw2ICsyMjUsNyBAQAogCS8qIHJldHVybiB0aGUgb3JpZ2luYWwgZmlybXdhcmUgZmVhdHVyZXMgKi8KIAltZW1jcHkoYXItPmZ3X2ZlYXR1cmVzLCBhci0+dGVzdG1vZGUub3JpZ19md19mZWF0dXJlcywKIAkgICAgICAgc2l6ZW9mKGFyLT5md19mZWF0dXJlcykpOworCWFyLT53bWkub3BfdmVyc2lvbiA9IGFyLT50ZXN0bW9kZS5vcmlnX3dtaV9vcF92ZXJzaW9uOwogCiAJcmVsZWFzZV9maXJtd2FyZShhci0+dGVzdG1vZGUudXRmKTsKIAlhci0+dGVzdG1vZGUudXRmID0gTlVMTDsKQEAgLTI1MCw2ICsyNTIsNyBAQAogCS8qIHJldHVybiB0aGUgb3JpZ2luYWwgZmlybXdhcmUgZmVhdHVyZXMgKi8KIAltZW1jcHkoYXItPmZ3X2ZlYXR1cmVzLCBhci0+dGVzdG1vZGUub3JpZ19md19mZWF0dXJlcywKIAkgICAgICAgc2l6ZW9mKGFyLT5md19mZWF0dXJlcykpOworCWFyLT53bWkub3BfdmVyc2lvbiA9IGFyLT50ZXN0bW9kZS5vcmlnX3dtaV9vcF92ZXJzaW9uOwogCiAJcmVsZWFzZV9maXJtd2FyZShhci0+dGVzdG1vZGUudXRmKTsKIAlhci0+dGVzdG1vZGUudXRmID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvdGhlcm1hbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway90aGVybWFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVkZTc1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvdGhlcm1hbC5jCkBAIC0wLDAgKzEsMjQ0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE0IFF1YWxjb21tIEF0aGVyb3MsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90aGVybWFsLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgIndtaS1vcHMuaCIKKworc3RhdGljIGludCBhdGgxMGtfdGhlcm1hbF9nZXRfYWN0aXZlX3ZpZnMoc3RydWN0IGF0aDEwayAqYXIsCisJCQkJCSAgZW51bSB3bWlfdmRldl90eXBlIHR5cGUpCit7CisJc3RydWN0IGF0aDEwa192aWYgKmFydmlmOworCWludCBjb3VudCA9IDA7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhci0+Y29uZl9tdXRleCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFydmlmLCAmYXItPmFydmlmcywgbGlzdCkgeworCQlpZiAoIWFydmlmLT5pc19zdGFydGVkKQorCQkJY29udGludWU7CisKKwkJaWYgKCFhcnZpZi0+aXNfdXApCisJCQljb250aW51ZTsKKworCQlpZiAoYXJ2aWYtPnZkZXZfdHlwZSAhPSB0eXBlKQorCQkJY29udGludWU7CisKKwkJY291bnQrKzsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGF0aDEwa190aGVybWFsX2dldF9tYXhfZHV0eWN5Y2xlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyAqc3RhdGUpCit7CisJKnN0YXRlID0gQVRIMTBLX1FVSUVUX0RVVFlfQ1lDTEVfTUFYOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoMTBrX3RoZXJtYWxfZ2V0X2N1cl9kdXR5Y3ljbGUoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKmNkZXYsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nICpzdGF0ZSkKK3sKKwlzdHJ1Y3QgYXRoMTBrICphciA9IGNkZXYtPmRldmRhdGE7CisKKwltdXRleF9sb2NrKCZhci0+Y29uZl9tdXRleCk7CisJKnN0YXRlID0gYXItPnRoZXJtYWwuZHV0eV9jeWNsZTsKKwltdXRleF91bmxvY2soJmFyLT5jb25mX211dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0aDEwa190aGVybWFsX3NldF9jdXJfZHV0eWN5Y2xlKHN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBkdXR5X2N5Y2xlKQoreworCXN0cnVjdCBhdGgxMGsgKmFyID0gY2Rldi0+ZGV2ZGF0YTsKKwl1MzIgcGVyaW9kLCBkdXJhdGlvbiwgZW5hYmxlZDsKKwlpbnQgbnVtX2JzcywgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJmFyLT5jb25mX211dGV4KTsKKwlpZiAoYXItPnN0YXRlICE9IEFUSDEwS19TVEFURV9PTikgeworCQlyZXQgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkdXR5X2N5Y2xlID4gQVRIMTBLX1FVSUVUX0RVVFlfQ1lDTEVfTUFYKSB7CisJCWF0aDEwa193YXJuKGFyLCAiZHV0eSBjeWNsZSAlbGQgaXMgZXhjZWVkaW5nIHRoZSBsaW1pdCAlZFxuIiwKKwkJCSAgICBkdXR5X2N5Y2xlLCBBVEgxMEtfUVVJRVRfRFVUWV9DWUNMRV9NQVgpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJLyogVE9ETzogUmlnaHQgbm93LCB0aGVybWFsIG1pdGlnYXRpb24gaXMgaGFuZGxlZCBvbmx5IGZvciBzaW5nbGUvbXVsdGkKKwkgKiB2aWYgQVAgbW9kZS4gU2luY2UgcXVpZXQgcGFyYW0gaXMgbm90IHZhbGlkYXRlZCBpbiBTVEEgbW9kZSwgaXQgbmVlZHMKKwkgKiB0byBiZSBpbnZlc3RpZ2F0ZWQgZnVydGhlciB0byBoYW5kbGUgbXVsdGkgU1RBIGFuZCBtdWx0aS12aWYgKEFQK1NUQSkKKwkgKiBtb2RlIHByb3Blcmx5LgorCSAqLworCW51bV9ic3MgPSBhdGgxMGtfdGhlcm1hbF9nZXRfYWN0aXZlX3ZpZnMoYXIsIFdNSV9WREVWX1RZUEVfQVApOworCWlmICghbnVtX2JzcykgeworCQlhdGgxMGtfd2FybihhciwgIm5vIGFjdGl2ZSBBUCBpbnRlcmZhY2VzXG4iKTsKKwkJcmV0ID0gLUVORVRET1dOOworCQlnb3RvIG91dDsKKwl9CisJcGVyaW9kID0gbWF4KEFUSDEwS19RVUlFVF9QRVJJT0RfTUlOLAorCQkgICAgIChBVEgxMEtfUVVJRVRfUEVSSU9EX0RFRkFVTFQgLyBudW1fYnNzKSk7CisJZHVyYXRpb24gPSAocGVyaW9kICogZHV0eV9jeWNsZSkgLyAxMDA7CisJZW5hYmxlZCA9IGR1cmF0aW9uID8gMSA6IDA7CisKKwlyZXQgPSBhdGgxMGtfd21pX3BkZXZfc2V0X3F1aWV0X21vZGUoYXIsIHBlcmlvZCwgZHVyYXRpb24sCisJCQkJCSAgICAgQVRIMTBLX1FVSUVUX1NUQVJUX09GRlNFVCwKKwkJCQkJICAgICBlbmFibGVkKTsKKwlpZiAocmV0KSB7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHNldCBxdWlldCBtb2RlIHBlcmlvZCAldSBkdWFyaW9uICV1IGVuYWJsZWQgJXUgcmV0ICVkXG4iLAorCQkJICAgIHBlcmlvZCwgZHVyYXRpb24sIGVuYWJsZWQsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlhci0+dGhlcm1hbC5kdXR5X2N5Y2xlID0gZHV0eV9jeWNsZTsKK291dDoKKwltdXRleF91bmxvY2soJmFyLT5jb25mX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2Vfb3BzIGF0aDEwa190aGVybWFsX29wcyA9IHsKKwkuZ2V0X21heF9zdGF0ZSA9IGF0aDEwa190aGVybWFsX2dldF9tYXhfZHV0eWN5Y2xlLAorCS5nZXRfY3VyX3N0YXRlID0gYXRoMTBrX3RoZXJtYWxfZ2V0X2N1cl9kdXR5Y3ljbGUsCisJLnNldF9jdXJfc3RhdGUgPSBhdGgxMGtfdGhlcm1hbF9zZXRfY3VyX2R1dHljeWNsZSwKK307CisKK3N0YXRpYyBzc2l6ZV90IGF0aDEwa190aGVybWFsX3Nob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCit7CisJc3RydWN0IGF0aDEwayAqYXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0LCB0ZW1wZXJhdHVyZTsKKworCW11dGV4X2xvY2soJmFyLT5jb25mX211dGV4KTsKKworCS8qIENhbid0IGdldCB0ZW1wZXJhdHVyZSB3aGVuIHRoZSBjYXJkIGlzIG9mZiAqLworCWlmIChhci0+c3RhdGUgIT0gQVRIMTBLX1NUQVRFX09OKSB7CisJCXJldCA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCisJcmVpbml0X2NvbXBsZXRpb24oJmFyLT50aGVybWFsLndtaV9zeW5jKTsKKwlyZXQgPSBhdGgxMGtfd21pX3BkZXZfZ2V0X3RlbXBlcmF0dXJlKGFyKTsKKwlpZiAocmV0KSB7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHJlYWQgdGVtcGVyYXR1cmUgJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh0ZXN0X2JpdChBVEgxMEtfRkxBR19DUkFTSF9GTFVTSCwgJmFyLT5kZXZfZmxhZ3MpKSB7CisJCXJldCA9IC1FU0hVVERPV047CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYXItPnRoZXJtYWwud21pX3N5bmMsCisJCQkJCSAgQVRIMTBLX1RIRVJNQUxfU1lOQ19USU1FT1VUX0haKTsKKwlpZiAocmV0ID09IDApIHsKKwkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gc3luY2hyb25pemUgdGhlcm1hbCByZWFkXG4iKTsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKKwkJZ290byBvdXQ7CisJfQorCisJc3Bpbl9sb2NrX2JoKCZhci0+ZGF0YV9sb2NrKTsKKwl0ZW1wZXJhdHVyZSA9IGFyLT50aGVybWFsLnRlbXBlcmF0dXJlOworCXNwaW5fdW5sb2NrX2JoKCZhci0+ZGF0YV9sb2NrKTsKKworCS8qIGRpc3BsYXkgaW4gbWlsbGlkZWdyZWUgY2VsY2l1cyAqLworCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHRlbXBlcmF0dXJlICogMTAwMCk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZhci0+Y29uZl9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBhdGgxMGtfdGhlcm1hbF9ldmVudF90ZW1wZXJhdHVyZShzdHJ1Y3QgYXRoMTBrICphciwgaW50IHRlbXBlcmF0dXJlKQoreworCXNwaW5fbG9ja19iaCgmYXItPmRhdGFfbG9jayk7CisJYXItPnRoZXJtYWwudGVtcGVyYXR1cmUgPSB0ZW1wZXJhdHVyZTsKKwlzcGluX3VubG9ja19iaCgmYXItPmRhdGFfbG9jayk7CisJY29tcGxldGUoJmFyLT50aGVybWFsLndtaV9zeW5jKTsKK30KKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgYXRoMTBrX3RoZXJtYWxfc2hvd190ZW1wLAorCQkJICBOVUxMLCAwKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmF0aDEwa19od21vbl9hdHRyc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwlOVUxMLAorfTsKK0FUVFJJQlVURV9HUk9VUFMoYXRoMTBrX2h3bW9uKTsKKworaW50IGF0aDEwa190aGVybWFsX3JlZ2lzdGVyKHN0cnVjdCBhdGgxMGsgKmFyKQoreworCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2OworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKKwlpbnQgcmV0OworCisJY2RldiA9IHRoZXJtYWxfY29vbGluZ19kZXZpY2VfcmVnaXN0ZXIoImF0aDEwa190aGVybWFsIiwgYXIsCisJCQkJCSAgICAgICAmYXRoMTBrX3RoZXJtYWxfb3BzKTsKKworCWlmIChJU19FUlIoY2RldikpIHsKKwkJYXRoMTBrX2VycihhciwgImZhaWxlZCB0byBzZXR1cCB0aGVybWFsIGRldmljZSByZXN1bHQ6ICVsZFxuIiwKKwkJCSAgIFBUUl9FUlIoY2RldikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBzeXNmc19jcmVhdGVfbGluaygmYXItPmRldi0+a29iaiwgJmNkZXYtPmRldmljZS5rb2JqLAorCQkJCSJjb29saW5nX2RldmljZSIpOworCWlmIChyZXQpIHsKKwkJYXRoMTBrX2VycihhciwgImZhaWxlZCB0byBjcmVhdGUgdGhlcm1hbCBzeW1saW5rXG4iKTsKKwkJZ290byBlcnJfY29vbGluZ19kZXN0cm95OworCX0KKworCWFyLT50aGVybWFsLmNkZXYgPSBjZGV2OworCisJLyogRG8gbm90IHJlZ2lzdGVyIGh3bW9uIGRldmljZSB3aGVuIHRlbXBlcmF0dXJlIHJlYWRpbmcgaXMgbm90CisJICogc3VwcG9ydGVkIGJ5IGZpcm13YXJlCisJICovCisJaWYgKGFyLT53bWkub3BfdmVyc2lvbiAhPSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fMTBfMl80KQorCQlyZXR1cm4gMDsKKworCS8qIEF2b2lkIGxpbmtpbmcgZXJyb3Igb24gZGV2bV9od21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9ncm91cHMsIEkKKwkgKiBndWVzcyBsaW51eC9od21vbi5oIGlzIG1pc3NpbmcgcHJvcGVyIHN0dWJzLiAqLworCWlmICghY29uZmlnX2VuYWJsZWQoQ09ORklHX0hXTU9OKSkKKwkJcmV0dXJuIDA7CisKKwlod21vbl9kZXYgPSBkZXZtX2h3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2dyb3Vwcyhhci0+ZGV2LAorCQkJCQkJCSAgICJhdGgxMGtfaHdtb24iLCBhciwKKwkJCQkJCQkgICBhdGgxMGtfaHdtb25fZ3JvdXBzKTsKKwlpZiAoSVNfRVJSKGh3bW9uX2RldikpIHsKKwkJYXRoMTBrX2VycihhciwgImZhaWxlZCB0byByZWdpc3RlciBod21vbiBkZXZpY2U6ICVsZFxuIiwKKwkJCSAgIFBUUl9FUlIoaHdtb25fZGV2KSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3JlbW92ZV9saW5rOworCX0KKwlyZXR1cm4gMDsKKworZXJyX3JlbW92ZV9saW5rOgorCXN5c2ZzX3JlbW92ZV9saW5rKCZhci0+ZGV2LT5rb2JqLCAidGhlcm1hbF9zZW5zb3IiKTsKK2Vycl9jb29saW5nX2Rlc3Ryb3k6CisJdGhlcm1hbF9jb29saW5nX2RldmljZV91bnJlZ2lzdGVyKGNkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgYXRoMTBrX3RoZXJtYWxfdW5yZWdpc3RlcihzdHJ1Y3QgYXRoMTBrICphcikKK3sKKwl0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3VucmVnaXN0ZXIoYXItPnRoZXJtYWwuY2Rldik7CisJc3lzZnNfcmVtb3ZlX2xpbmsoJmFyLT5kZXYtPmtvYmosICJjb29saW5nX2RldmljZSIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway90aGVybWFsLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3RoZXJtYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2NjMTdhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway90aGVybWFsLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBRdWFsY29tbSBBdGhlcm9zLCBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX1RIRVJNQUxfCisjZGVmaW5lIF9USEVSTUFMXworCisjZGVmaW5lIEFUSDEwS19RVUlFVF9QRVJJT0RfREVGQVVMVCAgICAgMTAwCisjZGVmaW5lIEFUSDEwS19RVUlFVF9QRVJJT0RfTUlOICAgICAgICAgMjUKKyNkZWZpbmUgQVRIMTBLX1FVSUVUX1NUQVJUX09GRlNFVCAgICAgICAxMAorI2RlZmluZSBBVEgxMEtfUVVJRVRfRFVUWV9DWUNMRV9NQVggICAgIDcwCisjZGVmaW5lIEFUSDEwS19IV01PTl9OQU1FX0xFTiAgICAgICAgICAgMTUKKyNkZWZpbmUgQVRIMTBLX1RIRVJNQUxfU1lOQ19USU1FT1VUX0haICg1KkhaKQorCitzdHJ1Y3QgYXRoMTBrX3RoZXJtYWwgeworCXN0cnVjdCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlICpjZGV2OworCXN0cnVjdCBjb21wbGV0aW9uIHdtaV9zeW5jOworCisJLyogcHJvdGVjdGVkIGJ5IGNvbmZfbXV0ZXggKi8KKwl1MzIgZHV0eV9jeWNsZTsKKwkvKiB0ZW1wZXJhdHVyZSB2YWx1ZSBpbiBDZWxjaXVzIGRlZ3JlZQorCSAqIHByb3RlY3RlZCBieSBkYXRhX2xvY2sKKwkgKi8KKwlpbnQgdGVtcGVyYXR1cmU7Cit9OworCisjaWZkZWYgQ09ORklHX1RIRVJNQUwKK2ludCBhdGgxMGtfdGhlcm1hbF9yZWdpc3RlcihzdHJ1Y3QgYXRoMTBrICphcik7Cit2b2lkIGF0aDEwa190aGVybWFsX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEwayAqYXIpOwordm9pZCBhdGgxMGtfdGhlcm1hbF9ldmVudF90ZW1wZXJhdHVyZShzdHJ1Y3QgYXRoMTBrICphciwgaW50IHRlbXBlcmF0dXJlKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBhdGgxMGtfdGhlcm1hbF9yZWdpc3RlcihzdHJ1Y3QgYXRoMTBrICphcikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF0aDEwa190aGVybWFsX3VucmVnaXN0ZXIoc3RydWN0IGF0aDEwayAqYXIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGgxMGtfdGhlcm1hbF9ldmVudF90ZW1wZXJhdHVyZShzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJCSAgICBpbnQgdGVtcGVyYXR1cmUpCit7Cit9CisKKyNlbmRpZgorI2VuZGlmIC8qIF9USEVSTUFMXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway90cmFjZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway90cmFjZS5oCmluZGV4IGIyODkzNzguLjU0MDc4ODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvdHJhY2UuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3RyYWNlLmgKQEAgLTQ1Myw2ICs0NTMsNzQgQEAKIAkgKQogKTsKIAorVFJBQ0VfRVZFTlQoYXRoMTBrX3dtaV9kaWFnX2NvbnRhaW5lciwKKwkgICAgVFBfUFJPVE8oc3RydWN0IGF0aDEwayAqYXIsCisJCSAgICAgdTggdHlwZSwKKwkJICAgICB1MzIgdGltZXN0YW1wLAorCQkgICAgIHUzMiBjb2RlLAorCQkgICAgIHUxNiBsZW4sCisJCSAgICAgY29uc3Qgdm9pZCAqZGF0YSksCisKKwlUUF9BUkdTKGFyLCB0eXBlLCB0aW1lc3RhbXAsIGNvZGUsIGxlbiwgZGF0YSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX3N0cmluZyhkZXZpY2UsIGRldl9uYW1lKGFyLT5kZXYpKQorCQlfX3N0cmluZyhkcml2ZXIsIGRldl9kcml2ZXJfc3RyaW5nKGFyLT5kZXYpKQorCQlfX2ZpZWxkKHU4LCB0eXBlKQorCQlfX2ZpZWxkKHUzMiwgdGltZXN0YW1wKQorCQlfX2ZpZWxkKHUzMiwgY29kZSkKKwkJX19maWVsZCh1MTYsIGxlbikKKwkJX19keW5hbWljX2FycmF5KHU4LCBkYXRhLCBsZW4pCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2Fzc2lnbl9zdHIoZGV2aWNlLCBkZXZfbmFtZShhci0+ZGV2KSk7CisJCV9fYXNzaWduX3N0cihkcml2ZXIsIGRldl9kcml2ZXJfc3RyaW5nKGFyLT5kZXYpKTsKKwkJX19lbnRyeS0+dHlwZSA9IHR5cGU7CisJCV9fZW50cnktPnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKwkJX19lbnRyeS0+Y29kZSA9IGNvZGU7CisJCV9fZW50cnktPmxlbiA9IGxlbjsKKwkJbWVtY3B5KF9fZ2V0X2R5bmFtaWNfYXJyYXkoZGF0YSksIGRhdGEsIGxlbik7CisJKSwKKworCVRQX3ByaW50aygKKwkJIiVzICVzIGRpYWcgY29udGFpbmVyIHR5cGUgJWhodSB0aW1lc3RhbXAgJXUgY29kZSAldSBsZW4gJWQiLAorCQlfX2dldF9zdHIoZHJpdmVyKSwKKwkJX19nZXRfc3RyKGRldmljZSksCisJCV9fZW50cnktPnR5cGUsCisJCV9fZW50cnktPnRpbWVzdGFtcCwKKwkJX19lbnRyeS0+Y29kZSwKKwkJX19lbnRyeS0+bGVuCisJKQorKTsKKworVFJBQ0VfRVZFTlQoYXRoMTBrX3dtaV9kaWFnLAorCSAgICBUUF9QUk9UTyhzdHJ1Y3QgYXRoMTBrICphciwgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbiksCisKKwlUUF9BUkdTKGFyLCBkYXRhLCBsZW4pLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19zdHJpbmcoZGV2aWNlLCBkZXZfbmFtZShhci0+ZGV2KSkKKwkJX19zdHJpbmcoZHJpdmVyLCBkZXZfZHJpdmVyX3N0cmluZyhhci0+ZGV2KSkKKwkJX19maWVsZCh1MTYsIGxlbikKKwkJX19keW5hbWljX2FycmF5KHU4LCBkYXRhLCBsZW4pCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2Fzc2lnbl9zdHIoZGV2aWNlLCBkZXZfbmFtZShhci0+ZGV2KSk7CisJCV9fYXNzaWduX3N0cihkcml2ZXIsIGRldl9kcml2ZXJfc3RyaW5nKGFyLT5kZXYpKTsKKwkJX19lbnRyeS0+bGVuID0gbGVuOworCQltZW1jcHkoX19nZXRfZHluYW1pY19hcnJheShkYXRhKSwgZGF0YSwgbGVuKTsKKwkpLAorCisJVFBfcHJpbnRrKAorCQkiJXMgJXMgdGx2IGRpYWcgbGVuICVkIiwKKwkJX19nZXRfc3RyKGRyaXZlciksCisJCV9fZ2V0X3N0cihkZXZpY2UpLAorCQlfX2VudHJ5LT5sZW4KKwkpCispOworCiAjZW5kaWYgLyogX1RSQUNFX0hfIHx8IFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKi8KIAogLyogd2UgZG9uJ3Qgd2FudCB0byB1c2UgaW5jbHVkZS90cmFjZS9ldmVudHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvdHhyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway90eHJ4LmMKaW5kZXggNzU3OWRlOC4uM2YwMGNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway90eHJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway90eHJ4LmMKQEAgLTY0LDcgKzY0LDEzIEBACiAJCXJldHVybjsKIAl9CiAKLQltc2R1ID0gaHR0LT5wZW5kaW5nX3R4W3R4X2RvbmUtPm1zZHVfaWRdOworCW1zZHUgPSBpZHJfZmluZCgmaHR0LT5wZW5kaW5nX3R4LCB0eF9kb25lLT5tc2R1X2lkKTsKKwlpZiAoIW1zZHUpIHsKKwkJYXRoMTBrX3dhcm4oYXIsICJyZWNlaXZlZCB0eCBjb21wbGV0aW9uIGZvciBpbnZhbGlkIG1zZHVfaWQ6ICVkXG4iLAorCQkJICAgIHR4X2RvbmUtPm1zZHVfaWQpOworCQlyZXR1cm47CisJfQorCiAJc2tiX2NiID0gQVRIMTBLX1NLQl9DQihtc2R1KTsKIAogCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBza2JfY2ItPnBhZGRyLCBtc2R1LT5sZW4sIERNQV9UT19ERVZJQ0UpOwpAQCAtOTUsNyArMTAxLDYgQEAKIAkvKiB3ZSBkbyBub3Qgb3duIHRoZSBtc2R1IGFueW1vcmUgKi8KIAogZXhpdDoKLQlodHQtPnBlbmRpbmdfdHhbdHhfZG9uZS0+bXNkdV9pZF0gPSBOVUxMOwogCWF0aDEwa19odHRfdHhfZnJlZV9tc2R1X2lkKGh0dCwgdHhfZG9uZS0+bXNkdV9pZCk7CiAJX19hdGgxMGtfaHR0X3R4X2RlY19wZW5kaW5nKGh0dCk7CiAJaWYgKGh0dC0+bnVtX3BlbmRpbmdfdHggPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLW9wcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWktb3BzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRkYzRiOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLW9wcy5oCkBAIC0wLDAgKzEsMTA2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDExIEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTQgUXVhbGNvbW0gQXRoZXJvcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX1dNSV9PUFNfSF8KKyNkZWZpbmUgX1dNSV9PUFNfSF8KKworc3RydWN0IGF0aDEwazsKK3N0cnVjdCBza19idWZmOworCitzdHJ1Y3Qgd21pX29wcyB7CisJdm9pZCAoKnJ4KShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdm9pZCAoKm1hcF9zdmMpKGNvbnN0IF9fbGUzMiAqaW4sIHVuc2lnbmVkIGxvbmcgKm91dCwgc2l6ZV90IGxlbik7CisKKwlpbnQgKCpwdWxsX3NjYW4pKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIHN0cnVjdCB3bWlfc2Nhbl9ldl9hcmcgKmFyZyk7CisJaW50ICgqcHVsbF9tZ210X3J4KShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICBzdHJ1Y3Qgd21pX21nbXRfcnhfZXZfYXJnICphcmcpOworCWludCAoKnB1bGxfY2hfaW5mbykoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgc3RydWN0IHdtaV9jaF9pbmZvX2V2X2FyZyAqYXJnKTsKKwlpbnQgKCpwdWxsX3ZkZXZfc3RhcnQpKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHN0cnVjdCB3bWlfdmRldl9zdGFydF9ldl9hcmcgKmFyZyk7CisJaW50ICgqcHVsbF9wZWVyX2tpY2spKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgc3RydWN0IHdtaV9wZWVyX2tpY2tfZXZfYXJnICphcmcpOworCWludCAoKnB1bGxfc3diYSkoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgc3RydWN0IHdtaV9zd2JhX2V2X2FyZyAqYXJnKTsKKwlpbnQgKCpwdWxsX3BoeWVycikoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICBzdHJ1Y3Qgd21pX3BoeWVycl9ldl9hcmcgKmFyZyk7CisJaW50ICgqcHVsbF9zdmNfcmR5KShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICBzdHJ1Y3Qgd21pX3N2Y19yZHlfZXZfYXJnICphcmcpOworCWludCAoKnB1bGxfcmR5KShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCXN0cnVjdCB3bWlfcmR5X2V2X2FyZyAqYXJnKTsKKwlpbnQgKCpwdWxsX2Z3X3N0YXRzKShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgc3RydWN0IGF0aDEwa19md19zdGF0cyAqc3RhdHMpOworCisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX3BkZXZfc3VzcGVuZCkoc3RydWN0IGF0aDEwayAqYXIsIHUzMiBzdXNwZW5kX29wdCk7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX3BkZXZfcmVzdW1lKShzdHJ1Y3QgYXRoMTBrICphcik7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX3BkZXZfc2V0X3JkKShzdHJ1Y3QgYXRoMTBrICphciwgdTE2IHJkLCB1MTYgcmQyZywKKwkJCQkJICAgdTE2IHJkNWcsIHUxNiBjdGwyZywgdTE2IGN0bDVnLAorCQkJCQkgICBlbnVtIHdtaV9kZnNfcmVnaW9uIGRmc19yZWcpOworCXN0cnVjdCBza19idWZmICooKmdlbl9wZGV2X3NldF9wYXJhbSkoc3RydWN0IGF0aDEwayAqYXIsIHUzMiBpZCwKKwkJCQkJICAgICAgdTMyIHZhbHVlKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnZW5faW5pdCkoc3RydWN0IGF0aDEwayAqYXIpOworCXN0cnVjdCBza19idWZmICooKmdlbl9zdGFydF9zY2FuKShzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJICBjb25zdCBzdHJ1Y3Qgd21pX3N0YXJ0X3NjYW5fYXJnICphcmcpOworCXN0cnVjdCBza19idWZmICooKmdlbl9zdG9wX3NjYW4pKHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCQkgY29uc3Qgc3RydWN0IHdtaV9zdG9wX3NjYW5fYXJnICphcmcpOworCXN0cnVjdCBza19idWZmICooKmdlbl92ZGV2X2NyZWF0ZSkoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJCQkgICBlbnVtIHdtaV92ZGV2X3R5cGUgdHlwZSwKKwkJCQkJICAgZW51bSB3bWlfdmRldl9zdWJ0eXBlIHN1YnR5cGUsCisJCQkJCSAgIGNvbnN0IHU4IG1hY2FkZHJbRVRIX0FMRU5dKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnZW5fdmRldl9kZWxldGUpKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCk7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX3ZkZXZfc3RhcnQpKHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCQkgIGNvbnN0IHN0cnVjdCB3bWlfdmRldl9zdGFydF9yZXF1ZXN0X2FyZyAqYXJnLAorCQkJCQkgIGJvb2wgcmVzdGFydCk7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX3ZkZXZfc3RvcCkoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnZW5fdmRldl91cCkoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLCB1MzIgYWlkLAorCQkJCSAgICAgICBjb25zdCB1OCAqYnNzaWQpOworCXN0cnVjdCBza19idWZmICooKmdlbl92ZGV2X2Rvd24pKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCk7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX3ZkZXZfc2V0X3BhcmFtKShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkJCSAgICAgIHUzMiBwYXJhbV9pZCwgdTMyIHBhcmFtX3ZhbHVlKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnZW5fdmRldl9pbnN0YWxsX2tleSkoc3RydWN0IGF0aDEwayAqYXIsCisJCQkJCQljb25zdCBzdHJ1Y3Qgd21pX3ZkZXZfaW5zdGFsbF9rZXlfYXJnICphcmcpOworCXN0cnVjdCBza19idWZmICooKmdlbl92ZGV2X3NwZWN0cmFsX2NvbmYpKHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCQkJICBjb25zdCBzdHJ1Y3Qgd21pX3ZkZXZfc3BlY3RyYWxfY29uZl9hcmcgKmFyZyk7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX3ZkZXZfc3BlY3RyYWxfZW5hYmxlKShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkJCQkgICAgdTMyIHRyaWdnZXIsIHUzMiBlbmFibGUpOworCXN0cnVjdCBza19idWZmICooKmdlbl92ZGV2X3dtbV9jb25mKShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IHdtaV93bW1fcGFyYW1zX2FsbF9hcmcgKmFyZyk7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX3BlZXJfY3JlYXRlKShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkJCSAgIGNvbnN0IHU4IHBlZXJfYWRkcltFVEhfQUxFTl0pOworCXN0cnVjdCBza19idWZmICooKmdlbl9wZWVyX2RlbGV0ZSkoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJCQkgICBjb25zdCB1OCBwZWVyX2FkZHJbRVRIX0FMRU5dKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnZW5fcGVlcl9mbHVzaCkoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJCQkgIGNvbnN0IHU4IHBlZXJfYWRkcltFVEhfQUxFTl0sCisJCQkJCSAgdTMyIHRpZF9iaXRtYXApOworCXN0cnVjdCBza19idWZmICooKmdlbl9wZWVyX3NldF9wYXJhbSkoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJCQkgICAgICBjb25zdCB1OCAqcGVlcl9hZGRyLAorCQkJCQkgICAgICBlbnVtIHdtaV9wZWVyX3BhcmFtIHBhcmFtX2lkLAorCQkJCQkgICAgICB1MzIgcGFyYW1fdmFsdWUpOworCXN0cnVjdCBza19idWZmICooKmdlbl9wZWVyX2Fzc29jKShzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJICBjb25zdCBzdHJ1Y3Qgd21pX3BlZXJfYXNzb2NfY29tcGxldGVfYXJnICphcmcpOworCXN0cnVjdCBza19idWZmICooKmdlbl9zZXRfcHNtb2RlKShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkJCSAgZW51bSB3bWlfc3RhX3BzX21vZGUgcHNtb2RlKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnZW5fc2V0X3N0YV9wcykoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJCQkgIGVudW0gd21pX3N0YV9wb3dlcnNhdmVfcGFyYW0gcGFyYW1faWQsCisJCQkJCSAgdTMyIHZhbHVlKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnZW5fc2V0X2FwX3BzKShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkJCSBjb25zdCB1OCAqbWFjLAorCQkJCQkgZW51bSB3bWlfYXBfcHNfcGVlcl9wYXJhbSBwYXJhbV9pZCwKKwkJCQkJIHUzMiB2YWx1ZSk7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX3NjYW5fY2hhbl9saXN0KShzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IHdtaV9zY2FuX2NoYW5fbGlzdF9hcmcgKmFyZyk7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX2JlYWNvbl9kbWEpKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCQkJICBjb25zdCB2b2lkICpiY24sIHNpemVfdCBiY25fbGVuLAorCQkJCQkgIHUzMiBiY25fcGFkZHIsIGJvb2wgZHRpbV96ZXJvLAorCQkJCQkgIGJvb2wgZGVsaXZlcl9jYWIpOworCXN0cnVjdCBza19idWZmICooKmdlbl9wZGV2X3NldF93bW0pKHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCQkgICAgY29uc3Qgc3RydWN0IHdtaV93bW1fcGFyYW1zX2FsbF9hcmcgKmFyZyk7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX3JlcXVlc3Rfc3RhdHMpKHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCQkgICAgIGVudW0gd21pX3N0YXRzX2lkIHN0YXRzX2lkKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnZW5fZm9yY2VfZndfaGFuZykoc3RydWN0IGF0aDEwayAqYXIsCisJCQkJCSAgICAgZW51bSB3bWlfZm9yY2VfZndfaGFuZ190eXBlIHR5cGUsCisJCQkJCSAgICAgdTMyIGRlbGF5X21zKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnZW5fbWdtdF90eCkoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpOworCXN0cnVjdCBza19idWZmICooKmdlbl9kYmdsb2dfY2ZnKShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIG1vZHVsZV9lbmFibGUsCisJCQkJCSAgdTMyIGxvZ19sZXZlbCk7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX3BrdGxvZ19lbmFibGUpKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgZmlsdGVyKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnZW5fcGt0bG9nX2Rpc2FibGUpKHN0cnVjdCBhdGgxMGsgKmFyKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnZW5fcGRldl9zZXRfcXVpZXRfbW9kZSkoc3RydWN0IGF0aDEwayAqYXIsCisJCQkJCQkgICB1MzIgcGVyaW9kLCB1MzIgZHVyYXRpb24sCisJCQkJCQkgICB1MzIgbmV4dF9vZmZzZXQsCisJCQkJCQkgICB1MzIgZW5hYmxlZCk7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX3BkZXZfZ2V0X3RlbXBlcmF0dXJlKShzdHJ1Y3QgYXRoMTBrICphcik7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX2FkZGJhX2NsZWFyX3Jlc3ApKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCQkJCWNvbnN0IHU4ICptYWMpOworCXN0cnVjdCBza19idWZmICooKmdlbl9hZGRiYV9zZW5kKShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkJCSAgY29uc3QgdTggKm1hYywgdTMyIHRpZCwgdTMyIGJ1Zl9zaXplKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnZW5fYWRkYmFfc2V0X3Jlc3ApKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCQkJICAgICAgY29uc3QgdTggKm1hYywgdTMyIHRpZCwKKwkJCQkJICAgICAgdTMyIHN0YXR1cyk7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX2RlbGJhX3NlbmQpKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCQkJICBjb25zdCB1OCAqbWFjLCB1MzIgdGlkLCB1MzIgaW5pdGlhdG9yLAorCQkJCQkgIHUzMiByZWFzb24pOworCXN0cnVjdCBza19idWZmICooKmdlbl9iY25fdG1wbCkoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJCQl1MzIgdGltX2llX29mZnNldCwgc3RydWN0IHNrX2J1ZmYgKmJjbiwKKwkJCQkJdTMyIHByYl9jYXBzLCB1MzIgcHJiX2VycCwKKwkJCQkJdm9pZCAqcHJiX2llcywgc2l6ZV90IHByYl9pZXNfbGVuKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnZW5fcHJiX3RtcGwpKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKmJjbik7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX3AycF9nb19iY25faWUpKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCQkJICAgICBjb25zdCB1OCAqcDJwX2llKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKCpnZW5fdmRldl9zdGFfdWFwc2QpKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCQkJICAgICAgY29uc3QgdTggcGVlcl9hZGRyW0VUSF9BTEVOXSwKKwkJCQkJICAgICAgY29uc3Qgc3RydWN0IHdtaV9zdGFfdWFwc2RfYXV0b190cmlnX2FyZyAqYXJncywKKwkJCQkJICAgICAgdTMyIG51bV9hYyk7CisJc3RydWN0IHNrX2J1ZmYgKigqZ2VuX3N0YV9rZWVwYWxpdmUpKHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCB3bWlfc3RhX2tlZXBhbGl2ZV9hcmcgKmFyZyk7Cit9OworCitpbnQgYXRoMTBrX3dtaV9jbWRfc2VuZChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGNtZF9pZCk7CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3J4KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWlmIChXQVJOX09OX09OQ0UoIWFyLT53bWkub3BzLT5yeCkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWFyLT53bWkub3BzLT5yeChhciwgc2tiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfbWFwX3N2YyhzdHJ1Y3QgYXRoMTBrICphciwgY29uc3QgX19sZTMyICppbiwgdW5zaWduZWQgbG9uZyAqb3V0LAorCQkgICBzaXplX3QgbGVuKQoreworCWlmICghYXItPndtaS5vcHMtPm1hcF9zdmMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWFyLT53bWkub3BzLT5tYXBfc3ZjKGluLCBvdXQsIGxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3B1bGxfc2NhbihzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICBzdHJ1Y3Qgd21pX3NjYW5fZXZfYXJnICphcmcpCit7CisJaWYgKCFhci0+d21pLm9wcy0+cHVsbF9zY2FuKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gYXItPndtaS5vcHMtPnB1bGxfc2Nhbihhciwgc2tiLCBhcmcpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9wdWxsX21nbXRfcngoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQlzdHJ1Y3Qgd21pX21nbXRfcnhfZXZfYXJnICphcmcpCit7CisJaWYgKCFhci0+d21pLm9wcy0+cHVsbF9tZ210X3J4KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gYXItPndtaS5vcHMtPnB1bGxfbWdtdF9yeChhciwgc2tiLCBhcmcpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9wdWxsX2NoX2luZm8oc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQlzdHJ1Y3Qgd21pX2NoX2luZm9fZXZfYXJnICphcmcpCit7CisJaWYgKCFhci0+d21pLm9wcy0+cHVsbF9jaF9pbmZvKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gYXItPndtaS5vcHMtPnB1bGxfY2hfaW5mbyhhciwgc2tiLCBhcmcpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9wdWxsX3ZkZXZfc3RhcnQoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICBzdHJ1Y3Qgd21pX3ZkZXZfc3RhcnRfZXZfYXJnICphcmcpCit7CisJaWYgKCFhci0+d21pLm9wcy0+cHVsbF92ZGV2X3N0YXJ0KQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlyZXR1cm4gYXItPndtaS5vcHMtPnB1bGxfdmRldl9zdGFydChhciwgc2tiLCBhcmcpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9wdWxsX3BlZXJfa2ljayhzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgc3RydWN0IHdtaV9wZWVyX2tpY2tfZXZfYXJnICphcmcpCit7CisJaWYgKCFhci0+d21pLm9wcy0+cHVsbF9wZWVyX2tpY2spCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBhci0+d21pLm9wcy0+cHVsbF9wZWVyX2tpY2soYXIsIHNrYiwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfcHVsbF9zd2JhKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgIHN0cnVjdCB3bWlfc3diYV9ldl9hcmcgKmFyZykKK3sKKwlpZiAoIWFyLT53bWkub3BzLT5wdWxsX3N3YmEpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBhci0+d21pLm9wcy0+cHVsbF9zd2JhKGFyLCBza2IsIGFyZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3B1bGxfcGh5ZXJyKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgICAgc3RydWN0IHdtaV9waHllcnJfZXZfYXJnICphcmcpCit7CisJaWYgKCFhci0+d21pLm9wcy0+cHVsbF9waHllcnIpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBhci0+d21pLm9wcy0+cHVsbF9waHllcnIoYXIsIHNrYiwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfcHVsbF9zdmNfcmR5KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJc3RydWN0IHdtaV9zdmNfcmR5X2V2X2FyZyAqYXJnKQoreworCWlmICghYXItPndtaS5vcHMtPnB1bGxfc3ZjX3JkeSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIGFyLT53bWkub3BzLT5wdWxsX3N2Y19yZHkoYXIsIHNrYiwgYXJnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfcHVsbF9yZHkoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICBzdHJ1Y3Qgd21pX3JkeV9ldl9hcmcgKmFyZykKK3sKKwlpZiAoIWFyLT53bWkub3BzLT5wdWxsX3JkeSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIGFyLT53bWkub3BzLT5wdWxsX3JkeShhciwgc2tiLCBhcmcpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9wdWxsX2Z3X3N0YXRzKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIHN0cnVjdCBhdGgxMGtfZndfc3RhdHMgKnN0YXRzKQoreworCWlmICghYXItPndtaS5vcHMtPnB1bGxfZndfc3RhdHMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBhci0+d21pLm9wcy0+cHVsbF9md19zdGF0cyhhciwgc2tiLCBzdGF0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX21nbXRfdHgoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICptc2R1KQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IobXNkdSk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgcmV0OworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX21nbXRfdHgpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fbWdtdF90eChhciwgbXNkdSk7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJcmV0ID0gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+bWdtdF90eF9jbWRpZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIEZJWE1FIFRoZXJlJ3Mgbm8gQUNLIGV2ZW50IGZvciBNYW5hZ2VtZW50IFR4LiBUaGlzIHByb2JhYmx5CisJICogc2hvdWxkbid0IGJlIGNhbGxlZCBoZXJlIGVpdGhlci4gKi8KKwlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGFyLT5odywgbXNkdSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfcGRldl9zZXRfcmVnZG9tYWluKHN0cnVjdCBhdGgxMGsgKmFyLCB1MTYgcmQsIHUxNiByZDJnLCB1MTYgcmQ1ZywKKwkJCSAgICAgIHUxNiBjdGwyZywgdTE2IGN0bDVnLAorCQkJICAgICAgZW51bSB3bWlfZGZzX3JlZ2lvbiBkZnNfcmVnKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIWFyLT53bWkub3BzLT5nZW5fcGRldl9zZXRfcmQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fcGRldl9zZXRfcmQoYXIsIHJkLCByZDJnLCByZDVnLCBjdGwyZywgY3RsNWcsCisJCQkJCSAgIGRmc19yZWcpOworCWlmIChJU19FUlIoc2tiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKKworCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsCisJCQkJICAgYXItPndtaS5jbWQtPnBkZXZfc2V0X3JlZ2RvbWFpbl9jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3BkZXZfc3VzcGVuZF90YXJnZXQoc3RydWN0IGF0aDEwayAqYXIsIHUzMiBzdXNwZW5kX29wdCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX3BkZXZfc3VzcGVuZCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl9wZGV2X3N1c3BlbmQoYXIsIHN1c3BlbmRfb3B0KTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+cGRldl9zdXNwZW5kX2NtZGlkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfcGRldl9yZXN1bWVfdGFyZ2V0KHN0cnVjdCBhdGgxMGsgKmFyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIWFyLT53bWkub3BzLT5nZW5fcGRldl9yZXN1bWUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fcGRldl9yZXN1bWUoYXIpOworCWlmIChJU19FUlIoc2tiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKKworCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsIGFyLT53bWkuY21kLT5wZGV2X3Jlc3VtZV9jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3BkZXZfc2V0X3BhcmFtKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgaWQsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX3BkZXZfc2V0X3BhcmFtKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlza2IgPSBhci0+d21pLm9wcy0+Z2VuX3BkZXZfc2V0X3BhcmFtKGFyLCBpZCwgdmFsdWUpOworCWlmIChJU19FUlIoc2tiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKKworCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsIGFyLT53bWkuY21kLT5wZGV2X3NldF9wYXJhbV9jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX2NtZF9pbml0KHN0cnVjdCBhdGgxMGsgKmFyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIWFyLT53bWkub3BzLT5nZW5faW5pdCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl9pbml0KGFyKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+aW5pdF9jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3N0YXJ0X3NjYW4oc3RydWN0IGF0aDEwayAqYXIsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB3bWlfc3RhcnRfc2Nhbl9hcmcgKmFyZykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX3N0YXJ0X3NjYW4pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fc3RhcnRfc2NhbihhciwgYXJnKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+c3RhcnRfc2Nhbl9jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3N0b3Bfc2NhbihzdHJ1Y3QgYXRoMTBrICphciwgY29uc3Qgc3RydWN0IHdtaV9zdG9wX3NjYW5fYXJnICphcmcpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghYXItPndtaS5vcHMtPmdlbl9zdG9wX3NjYW4pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fc3RvcF9zY2FuKGFyLCBhcmcpOworCWlmIChJU19FUlIoc2tiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKKworCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsIGFyLT53bWkuY21kLT5zdG9wX3NjYW5fY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV92ZGV2X2NyZWF0ZShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCSAgICAgICBlbnVtIHdtaV92ZGV2X3R5cGUgdHlwZSwKKwkJICAgICAgIGVudW0gd21pX3ZkZXZfc3VidHlwZSBzdWJ0eXBlLAorCQkgICAgICAgY29uc3QgdTggbWFjYWRkcltFVEhfQUxFTl0pCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghYXItPndtaS5vcHMtPmdlbl92ZGV2X2NyZWF0ZSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl92ZGV2X2NyZWF0ZShhciwgdmRldl9pZCwgdHlwZSwgc3VidHlwZSwgbWFjYWRkcik7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnZkZXZfY3JlYXRlX2NtZGlkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfdmRldl9kZWxldGUoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIWFyLT53bWkub3BzLT5nZW5fdmRldl9kZWxldGUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fdmRldl9kZWxldGUoYXIsIHZkZXZfaWQpOworCWlmIChJU19FUlIoc2tiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKKworCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsIGFyLT53bWkuY21kLT52ZGV2X2RlbGV0ZV9jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3ZkZXZfc3RhcnQoc3RydWN0IGF0aDEwayAqYXIsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB3bWlfdmRldl9zdGFydF9yZXF1ZXN0X2FyZyAqYXJnKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIWFyLT53bWkub3BzLT5nZW5fdmRldl9zdGFydCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl92ZGV2X3N0YXJ0KGFyLCBhcmcsIGZhbHNlKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLAorCQkJCSAgIGFyLT53bWkuY21kLT52ZGV2X3N0YXJ0X3JlcXVlc3RfY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV92ZGV2X3Jlc3RhcnQoc3RydWN0IGF0aDEwayAqYXIsCisJCQljb25zdCBzdHJ1Y3Qgd21pX3ZkZXZfc3RhcnRfcmVxdWVzdF9hcmcgKmFyZykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX3ZkZXZfc3RhcnQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fdmRldl9zdGFydChhciwgYXJnLCB0cnVlKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLAorCQkJCSAgIGFyLT53bWkuY21kLT52ZGV2X3Jlc3RhcnRfcmVxdWVzdF9jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3ZkZXZfc3RvcChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghYXItPndtaS5vcHMtPmdlbl92ZGV2X3N0b3ApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fdmRldl9zdG9wKGFyLCB2ZGV2X2lkKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+dmRldl9zdG9wX2NtZGlkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfdmRldl91cChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsIHUzMiBhaWQsIGNvbnN0IHU4ICpic3NpZCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX3ZkZXZfdXApCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fdmRldl91cChhciwgdmRldl9pZCwgYWlkLCBic3NpZCk7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnZkZXZfdXBfY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV92ZGV2X2Rvd24oc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIWFyLT53bWkub3BzLT5nZW5fdmRldl9kb3duKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlza2IgPSBhci0+d21pLm9wcy0+Z2VuX3ZkZXZfZG93bihhciwgdmRldl9pZCk7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnZkZXZfZG93bl9jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3ZkZXZfc2V0X3BhcmFtKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwgdTMyIHBhcmFtX2lkLAorCQkJICB1MzIgcGFyYW1fdmFsdWUpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghYXItPndtaS5vcHMtPmdlbl92ZGV2X3NldF9wYXJhbSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl92ZGV2X3NldF9wYXJhbShhciwgdmRldl9pZCwgcGFyYW1faWQsCisJCQkJCSAgICAgIHBhcmFtX3ZhbHVlKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+dmRldl9zZXRfcGFyYW1fY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV92ZGV2X2luc3RhbGxfa2V5KHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJICAgIGNvbnN0IHN0cnVjdCB3bWlfdmRldl9pbnN0YWxsX2tleV9hcmcgKmFyZykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX3ZkZXZfaW5zdGFsbF9rZXkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fdmRldl9pbnN0YWxsX2tleShhciwgYXJnKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLAorCQkJCSAgIGFyLT53bWkuY21kLT52ZGV2X2luc3RhbGxfa2V5X2NtZGlkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfdmRldl9zcGVjdHJhbF9jb25mKHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJICAgICAgY29uc3Qgc3RydWN0IHdtaV92ZGV2X3NwZWN0cmFsX2NvbmZfYXJnICphcmcpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIgY21kX2lkOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl92ZGV2X3NwZWN0cmFsX2NvbmYoYXIsIGFyZyk7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJY21kX2lkID0gYXItPndtaS5jbWQtPnZkZXZfc3BlY3RyYWxfc2Nhbl9jb25maWd1cmVfY21kaWQ7CisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgY21kX2lkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfdmRldl9zcGVjdHJhbF9lbmFibGUoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLCB1MzIgdHJpZ2dlciwKKwkJCQl1MzIgZW5hYmxlKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJdTMyIGNtZF9pZDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fdmRldl9zcGVjdHJhbF9lbmFibGUoYXIsIHZkZXZfaWQsIHRyaWdnZXIsCisJCQkJCQkgICAgZW5hYmxlKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwljbWRfaWQgPSBhci0+d21pLmNtZC0+dmRldl9zcGVjdHJhbF9zY2FuX2VuYWJsZV9jbWRpZDsKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBjbWRfaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV92ZGV2X3N0YV91YXBzZChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkgIGNvbnN0IHU4IHBlZXJfYWRkcltFVEhfQUxFTl0sCisJCQkgIGNvbnN0IHN0cnVjdCB3bWlfc3RhX3VhcHNkX2F1dG9fdHJpZ19hcmcgKmFyZ3MsCisJCQkgIHUzMiBudW1fYWMpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIgY21kX2lkOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX3ZkZXZfc3RhX3VhcHNkKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlza2IgPSBhci0+d21pLm9wcy0+Z2VuX3ZkZXZfc3RhX3VhcHNkKGFyLCB2ZGV2X2lkLCBwZWVyX2FkZHIsIGFyZ3MsCisJCQkJCSAgICAgIG51bV9hYyk7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJY21kX2lkID0gYXItPndtaS5jbWQtPnN0YV91YXBzZF9hdXRvX3RyaWdfY21kaWQ7CisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgY21kX2lkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfdmRldl93bW1fY29uZihzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkgY29uc3Qgc3RydWN0IHdtaV93bW1fcGFyYW1zX2FsbF9hcmcgKmFyZykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUzMiBjbWRfaWQ7CisKKwlza2IgPSBhci0+d21pLm9wcy0+Z2VuX3ZkZXZfd21tX2NvbmYoYXIsIHZkZXZfaWQsIGFyZyk7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJY21kX2lkID0gYXItPndtaS5jbWQtPnZkZXZfc2V0X3dtbV9wYXJhbXNfY21kaWQ7CisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgY21kX2lkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfcGVlcl9jcmVhdGUoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkgICAgICAgY29uc3QgdTggcGVlcl9hZGRyW0VUSF9BTEVOXSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX3BlZXJfY3JlYXRlKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlza2IgPSBhci0+d21pLm9wcy0+Z2VuX3BlZXJfY3JlYXRlKGFyLCB2ZGV2X2lkLCBwZWVyX2FkZHIpOworCWlmIChJU19FUlIoc2tiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKKworCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsIGFyLT53bWkuY21kLT5wZWVyX2NyZWF0ZV9jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3BlZXJfZGVsZXRlKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJICAgICAgIGNvbnN0IHU4IHBlZXJfYWRkcltFVEhfQUxFTl0pCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghYXItPndtaS5vcHMtPmdlbl9wZWVyX2RlbGV0ZSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl9wZWVyX2RlbGV0ZShhciwgdmRldl9pZCwgcGVlcl9hZGRyKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+cGVlcl9kZWxldGVfY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9wZWVyX2ZsdXNoKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJICAgICAgY29uc3QgdTggcGVlcl9hZGRyW0VUSF9BTEVOXSwgdTMyIHRpZF9iaXRtYXApCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghYXItPndtaS5vcHMtPmdlbl9wZWVyX2ZsdXNoKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlza2IgPSBhci0+d21pLm9wcy0+Z2VuX3BlZXJfZmx1c2goYXIsIHZkZXZfaWQsIHBlZXJfYWRkciwgdGlkX2JpdG1hcCk7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnBlZXJfZmx1c2hfdGlkc19jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3BlZXJfc2V0X3BhcmFtKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwgY29uc3QgdTggKnBlZXJfYWRkciwKKwkJCSAgZW51bSB3bWlfcGVlcl9wYXJhbSBwYXJhbV9pZCwgdTMyIHBhcmFtX3ZhbHVlKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIWFyLT53bWkub3BzLT5nZW5fcGVlcl9zZXRfcGFyYW0pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fcGVlcl9zZXRfcGFyYW0oYXIsIHZkZXZfaWQsIHBlZXJfYWRkciwgcGFyYW1faWQsCisJCQkJCSAgICAgIHBhcmFtX3ZhbHVlKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+cGVlcl9zZXRfcGFyYW1fY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9zZXRfcHNtb2RlKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJICAgICAgZW51bSB3bWlfc3RhX3BzX21vZGUgcHNtb2RlKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIWFyLT53bWkub3BzLT5nZW5fc2V0X3BzbW9kZSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl9zZXRfcHNtb2RlKGFyLCB2ZGV2X2lkLCBwc21vZGUpOworCWlmIChJU19FUlIoc2tiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKKworCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsCisJCQkJICAgYXItPndtaS5jbWQtPnN0YV9wb3dlcnNhdmVfbW9kZV9jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3NldF9zdGFfcHNfcGFyYW0oc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJICAgIGVudW0gd21pX3N0YV9wb3dlcnNhdmVfcGFyYW0gcGFyYW1faWQsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX3NldF9zdGFfcHMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fc2V0X3N0YV9wcyhhciwgdmRldl9pZCwgcGFyYW1faWQsIHZhbHVlKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLAorCQkJCSAgIGFyLT53bWkuY21kLT5zdGFfcG93ZXJzYXZlX3BhcmFtX2NtZGlkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfc2V0X2FwX3BzX3BhcmFtKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwgY29uc3QgdTggKm1hYywKKwkJCSAgIGVudW0gd21pX2FwX3BzX3BlZXJfcGFyYW0gcGFyYW1faWQsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX3NldF9hcF9wcykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl9zZXRfYXBfcHMoYXIsIHZkZXZfaWQsIG1hYywgcGFyYW1faWQsIHZhbHVlKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLAorCQkJCSAgIGFyLT53bWkuY21kLT5hcF9wc19wZWVyX3BhcmFtX2NtZGlkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfc2Nhbl9jaGFuX2xpc3Qoc3RydWN0IGF0aDEwayAqYXIsCisJCQkgIGNvbnN0IHN0cnVjdCB3bWlfc2Nhbl9jaGFuX2xpc3RfYXJnICphcmcpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghYXItPndtaS5vcHMtPmdlbl9zY2FuX2NoYW5fbGlzdCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl9zY2FuX2NoYW5fbGlzdChhciwgYXJnKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+c2Nhbl9jaGFuX2xpc3RfY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9wZWVyX2Fzc29jKHN0cnVjdCBhdGgxMGsgKmFyLAorCQkgICAgICBjb25zdCBzdHJ1Y3Qgd21pX3BlZXJfYXNzb2NfY29tcGxldGVfYXJnICphcmcpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghYXItPndtaS5vcHMtPmdlbl9wZWVyX2Fzc29jKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlza2IgPSBhci0+d21pLm9wcy0+Z2VuX3BlZXJfYXNzb2MoYXIsIGFyZyk7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnBlZXJfYXNzb2NfY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9iZWFjb25fc2VuZF9yZWZfbm93YWl0KHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCQkgIGNvbnN0IHZvaWQgKmJjbiwgc2l6ZV90IGJjbl9sZW4sCisJCQkJICB1MzIgYmNuX3BhZGRyLCBib29sIGR0aW1femVybywKKwkJCQkgIGJvb2wgZGVsaXZlcl9jYWIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgcmV0OworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX2JlYWNvbl9kbWEpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fYmVhY29uX2RtYShhciwgdmRldl9pZCwgYmNuLCBiY25fbGVuLCBiY25fcGFkZHIsCisJCQkJCSAgZHRpbV96ZXJvLCBkZWxpdmVyX2NhYik7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJcmV0ID0gYXRoMTBrX3dtaV9jbWRfc2VuZF9ub3dhaXQoYXIsIHNrYiwKKwkJCQkJIGFyLT53bWkuY21kLT5wZGV2X3NlbmRfYmNuX2NtZGlkKTsKKwlpZiAocmV0KSB7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfcGRldl9zZXRfd21tX3BhcmFtcyhzdHJ1Y3QgYXRoMTBrICphciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgd21pX3dtbV9wYXJhbXNfYWxsX2FyZyAqYXJnKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIWFyLT53bWkub3BzLT5nZW5fcGRldl9zZXRfd21tKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlza2IgPSBhci0+d21pLm9wcy0+Z2VuX3BkZXZfc2V0X3dtbShhciwgYXJnKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLAorCQkJCSAgIGFyLT53bWkuY21kLT5wZGV2X3NldF93bW1fcGFyYW1zX2NtZGlkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfcmVxdWVzdF9zdGF0cyhzdHJ1Y3QgYXRoMTBrICphciwgZW51bSB3bWlfc3RhdHNfaWQgc3RhdHNfaWQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghYXItPndtaS5vcHMtPmdlbl9yZXF1ZXN0X3N0YXRzKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlza2IgPSBhci0+d21pLm9wcy0+Z2VuX3JlcXVlc3Rfc3RhdHMoYXIsIHN0YXRzX2lkKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+cmVxdWVzdF9zdGF0c19jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX2ZvcmNlX2Z3X2hhbmcoc3RydWN0IGF0aDEwayAqYXIsCisJCQkgZW51bSB3bWlfZm9yY2VfZndfaGFuZ190eXBlIHR5cGUsIHUzMiBkZWxheV9tcykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX2ZvcmNlX2Z3X2hhbmcpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fZm9yY2VfZndfaGFuZyhhciwgdHlwZSwgZGVsYXlfbXMpOworCWlmIChJU19FUlIoc2tiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKKworCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsIGFyLT53bWkuY21kLT5mb3JjZV9md19oYW5nX2NtZGlkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfZGJnbG9nX2NmZyhzdHJ1Y3QgYXRoMTBrICphciwgdTMyIG1vZHVsZV9lbmFibGUsIHUzMiBsb2dfbGV2ZWwpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghYXItPndtaS5vcHMtPmdlbl9kYmdsb2dfY2ZnKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlza2IgPSBhci0+d21pLm9wcy0+Z2VuX2RiZ2xvZ19jZmcoYXIsIG1vZHVsZV9lbmFibGUsIGxvZ19sZXZlbCk7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPmRiZ2xvZ19jZmdfY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9wZGV2X3BrdGxvZ19lbmFibGUoc3RydWN0IGF0aDEwayAqYXIsIHUzMiBmaWx0ZXIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghYXItPndtaS5vcHMtPmdlbl9wa3Rsb2dfZW5hYmxlKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlza2IgPSBhci0+d21pLm9wcy0+Z2VuX3BrdGxvZ19lbmFibGUoYXIsIGZpbHRlcik7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnBkZXZfcGt0bG9nX2VuYWJsZV9jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3BkZXZfcGt0bG9nX2Rpc2FibGUoc3RydWN0IGF0aDEwayAqYXIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghYXItPndtaS5vcHMtPmdlbl9wa3Rsb2dfZGlzYWJsZSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl9wa3Rsb2dfZGlzYWJsZShhcik7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwKKwkJCQkgICBhci0+d21pLmNtZC0+cGRldl9wa3Rsb2dfZGlzYWJsZV9jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX3BkZXZfc2V0X3F1aWV0X21vZGUoc3RydWN0IGF0aDEwayAqYXIsIHUzMiBwZXJpb2QsIHUzMiBkdXJhdGlvbiwKKwkJCSAgICAgICB1MzIgbmV4dF9vZmZzZXQsIHUzMiBlbmFibGVkKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIWFyLT53bWkub3BzLT5nZW5fcGRldl9zZXRfcXVpZXRfbW9kZSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl9wZGV2X3NldF9xdWlldF9tb2RlKGFyLCBwZXJpb2QsIGR1cmF0aW9uLAorCQkJCQkJICAgbmV4dF9vZmZzZXQsIGVuYWJsZWQpOworCWlmIChJU19FUlIoc2tiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKKworCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsCisJCQkJICAgYXItPndtaS5jbWQtPnBkZXZfc2V0X3F1aWV0X21vZGVfY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9wZGV2X2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgYXRoMTBrICphcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX3BkZXZfZ2V0X3RlbXBlcmF0dXJlKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlza2IgPSBhci0+d21pLm9wcy0+Z2VuX3BkZXZfZ2V0X3RlbXBlcmF0dXJlKGFyKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLAorCQkJCSAgIGFyLT53bWkuY21kLT5wZGV2X2dldF90ZW1wZXJhdHVyZV9jbWRpZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CithdGgxMGtfd21pX2FkZGJhX2NsZWFyX3Jlc3Aoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLCBjb25zdCB1OCAqbWFjKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIWFyLT53bWkub3BzLT5nZW5fYWRkYmFfY2xlYXJfcmVzcCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl9hZGRiYV9jbGVhcl9yZXNwKGFyLCB2ZGV2X2lkLCBtYWMpOworCWlmIChJU19FUlIoc2tiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKKworCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsCisJCQkJICAgYXItPndtaS5jbWQtPmFkZGJhX2NsZWFyX3Jlc3BfY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9hZGRiYV9zZW5kKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwgY29uc3QgdTggKm1hYywKKwkJICAgICAgdTMyIHRpZCwgdTMyIGJ1Zl9zaXplKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIWFyLT53bWkub3BzLT5nZW5fYWRkYmFfc2VuZCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl9hZGRiYV9zZW5kKGFyLCB2ZGV2X2lkLCBtYWMsIHRpZCwgYnVmX3NpemUpOworCWlmIChJU19FUlIoc2tiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKKworCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsCisJCQkJICAgYXItPndtaS5jbWQtPmFkZGJhX3NlbmRfY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9hZGRiYV9zZXRfcmVzcChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsIGNvbnN0IHU4ICptYWMsCisJCQkgIHUzMiB0aWQsIHUzMiBzdGF0dXMpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghYXItPndtaS5vcHMtPmdlbl9hZGRiYV9zZXRfcmVzcCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc2tiID0gYXItPndtaS5vcHMtPmdlbl9hZGRiYV9zZXRfcmVzcChhciwgdmRldl9pZCwgbWFjLCB0aWQsIHN0YXR1cyk7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwKKwkJCQkgICBhci0+d21pLmNtZC0+YWRkYmFfc2V0X3Jlc3BfY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9kZWxiYV9zZW5kKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwgY29uc3QgdTggKm1hYywKKwkJICAgICAgdTMyIHRpZCwgdTMyIGluaXRpYXRvciwgdTMyIHJlYXNvbikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX2RlbGJhX3NlbmQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fZGVsYmFfc2VuZChhciwgdmRldl9pZCwgbWFjLCB0aWQsIGluaXRpYXRvciwKKwkJCQkJICByZWFzb24pOworCWlmIChJU19FUlIoc2tiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsKKworCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsCisJCQkJICAgYXItPndtaS5jbWQtPmRlbGJhX3NlbmRfY21kaWQpOworfQorCitzdGF0aWMgaW5saW5lIGludAorYXRoMTBrX3dtaV9iY25fdG1wbChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsIHUzMiB0aW1faWVfb2Zmc2V0LAorCQkgICAgc3RydWN0IHNrX2J1ZmYgKmJjbiwgdTMyIHByYl9jYXBzLCB1MzIgcHJiX2VycCwKKwkJICAgIHZvaWQgKnByYl9pZXMsIHNpemVfdCBwcmJfaWVzX2xlbikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX2Jjbl90bXBsKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlza2IgPSBhci0+d21pLm9wcy0+Z2VuX2Jjbl90bXBsKGFyLCB2ZGV2X2lkLCB0aW1faWVfb2Zmc2V0LCBiY24sCisJCQkJCXByYl9jYXBzLCBwcmJfZXJwLCBwcmJfaWVzLAorCQkJCQlwcmJfaWVzX2xlbik7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPmJjbl90bXBsX2NtZGlkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfcHJiX3RtcGwoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqcHJiKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIWFyLT53bWkub3BzLT5nZW5fcHJiX3RtcGwpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fcHJiX3RtcGwoYXIsIHZkZXZfaWQsIHByYik7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnByYl90bXBsX2NtZGlkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfcDJwX2dvX2Jjbl9pZShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsIGNvbnN0IHU4ICpwMnBfaWUpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghYXItPndtaS5vcHMtPmdlbl9wMnBfZ29fYmNuX2llKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlza2IgPSBhci0+d21pLm9wcy0+Z2VuX3AycF9nb19iY25faWUoYXIsIHZkZXZfaWQsIHAycF9pZSk7CisJaWYgKElTX0VSUihza2IpKQorCQlyZXR1cm4gUFRSX0VSUihza2IpOworCisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnAycF9nb19zZXRfYmVhY29uX2llKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2F0aDEwa193bWlfc3RhX2tlZXBhbGl2ZShzdHJ1Y3QgYXRoMTBrICphciwKKwkJCSBjb25zdCBzdHJ1Y3Qgd21pX3N0YV9rZWVwYWxpdmVfYXJnICphcmcpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIgY21kX2lkOworCisJaWYgKCFhci0+d21pLm9wcy0+Z2VuX3N0YV9rZWVwYWxpdmUpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXNrYiA9IGFyLT53bWkub3BzLT5nZW5fc3RhX2tlZXBhbGl2ZShhciwgYXJnKTsKKwlpZiAoSVNfRVJSKHNrYikpCisJCXJldHVybiBQVFJfRVJSKHNrYik7CisKKwljbWRfaWQgPSBhci0+d21pLmNtZC0+c3RhX2tlZXBhbGl2ZV9jbWQ7CisJcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgY21kX2lkKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3dtaS10bHYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLXRsdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNjE0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3dtaS10bHYuYwpAQCAtMCwwICsxLDI2OTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMS0yMDE0IFF1YWxjb21tIEF0aGVyb3MsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorI2luY2x1ZGUgImh3LmgiCisjaW5jbHVkZSAid21pLmgiCisjaW5jbHVkZSAid21pLW9wcy5oIgorI2luY2x1ZGUgIndtaS10bHYuaCIKKworLyoqKioqKioqKioqKioqKi8KKy8qIFRMViBoZWxwZXJzICovCisvKioqKioqKioqKioqKiovCisKK3N0cnVjdCB3bWlfdGx2X3BvbGljeSB7CisJc2l6ZV90IG1pbl9sZW47Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHdtaV90bHZfcG9saWN5IHdtaV90bHZfcG9saWNpZXNbXSA9IHsKKwlbV01JX1RMVl9UQUdfQVJSQVlfQllURV0KKwkJPSB7IC5taW5fbGVuID0gc2l6ZW9mKHU4KSB9LAorCVtXTUlfVExWX1RBR19BUlJBWV9VSU5UMzJdCisJCT0geyAubWluX2xlbiA9IHNpemVvZih1MzIpIH0sCisJW1dNSV9UTFZfVEFHX1NUUlVDVF9TQ0FOX0VWRU5UXQorCQk9IHsgLm1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IHdtaV9zY2FuX2V2ZW50KSB9LAorCVtXTUlfVExWX1RBR19TVFJVQ1RfTUdNVF9SWF9IRFJdCisJCT0geyAubWluX2xlbiA9IHNpemVvZihzdHJ1Y3Qgd21pX3Rsdl9tZ210X3J4X2V2KSB9LAorCVtXTUlfVExWX1RBR19TVFJVQ1RfQ0hBTl9JTkZPX0VWRU5UXQorCQk9IHsgLm1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IHdtaV9jaGFuX2luZm9fZXZlbnQpIH0sCisJW1dNSV9UTFZfVEFHX1NUUlVDVF9WREVWX1NUQVJUX1JFU1BPTlNFX0VWRU5UXQorCQk9IHsgLm1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IHdtaV92ZGV2X3N0YXJ0X3Jlc3BvbnNlX2V2ZW50KSB9LAorCVtXTUlfVExWX1RBR19TVFJVQ1RfUEVFUl9TVEFfS0lDS09VVF9FVkVOVF0KKwkJPSB7IC5taW5fbGVuID0gc2l6ZW9mKHN0cnVjdCB3bWlfcGVlcl9zdGFfa2lja291dF9ldmVudCkgfSwKKwlbV01JX1RMVl9UQUdfU1RSVUNUX0hPU1RfU1dCQV9FVkVOVF0KKwkJPSB7IC5taW5fbGVuID0gc2l6ZW9mKHN0cnVjdCB3bWlfaG9zdF9zd2JhX2V2ZW50KSB9LAorCVtXTUlfVExWX1RBR19TVFJVQ1RfVElNX0lORk9dCisJCT0geyAubWluX2xlbiA9IHNpemVvZihzdHJ1Y3Qgd21pX3RpbV9pbmZvKSB9LAorCVtXTUlfVExWX1RBR19TVFJVQ1RfUDJQX05PQV9JTkZPXQorCQk9IHsgLm1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IHdtaV9wMnBfbm9hX2luZm8pIH0sCisJW1dNSV9UTFZfVEFHX1NUUlVDVF9TRVJWSUNFX1JFQURZX0VWRU5UXQorCQk9IHsgLm1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IHdtaV90bHZfc3ZjX3JkeV9ldikgfSwKKwlbV01JX1RMVl9UQUdfU1RSVUNUX0hBTF9SRUdfQ0FQQUJJTElUSUVTXQorCQk9IHsgLm1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IGhhbF9yZWdfY2FwYWJpbGl0aWVzKSB9LAorCVtXTUlfVExWX1RBR19TVFJVQ1RfV0xBTl9IT1NUX01FTV9SRVFdCisJCT0geyAubWluX2xlbiA9IHNpemVvZihzdHJ1Y3Qgd2xhbl9ob3N0X21lbV9yZXEpIH0sCisJW1dNSV9UTFZfVEFHX1NUUlVDVF9SRUFEWV9FVkVOVF0KKwkJPSB7IC5taW5fbGVuID0gc2l6ZW9mKHN0cnVjdCB3bWlfdGx2X3JkeV9ldikgfSwKKwlbV01JX1RMVl9UQUdfU1RSVUNUX09GRkxPQURfQkNOX1RYX1NUQVRVU19FVkVOVF0KKwkJPSB7IC5taW5fbGVuID0gc2l6ZW9mKHN0cnVjdCB3bWlfdGx2X2Jjbl90eF9zdGF0dXNfZXYpIH0sCisJW1dNSV9UTFZfVEFHX1NUUlVDVF9ESUFHX0RBVEFfQ09OVEFJTkVSX0VWRU5UXQorCQk9IHsgLm1pbl9sZW4gPSBzaXplb2Yoc3RydWN0IHdtaV90bHZfZGlhZ19kYXRhX2V2KSB9LAorfTsKKworc3RhdGljIGludAorYXRoMTBrX3dtaV90bHZfaXRlcihzdHJ1Y3QgYXRoMTBrICphciwgY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbGVuLAorCQkgICAgaW50ICgqaXRlcikoc3RydWN0IGF0aDEwayAqYXIsIHUxNiB0YWcsIHUxNiBsZW4sCisJCQkJY29uc3Qgdm9pZCAqcHRyLCB2b2lkICpkYXRhKSwKKwkJICAgIHZvaWQgKmRhdGEpCit7CisJY29uc3Qgdm9pZCAqYmVnaW4gPSBwdHI7CisJY29uc3Qgc3RydWN0IHdtaV90bHYgKnRsdjsKKwl1MTYgdGx2X3RhZywgdGx2X2xlbjsKKwlpbnQgcmV0OworCisJd2hpbGUgKGxlbiA+IDApIHsKKwkJaWYgKGxlbiA8IHNpemVvZigqdGx2KSkgeworCQkJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCisJCQkJICAgIndtaSB0bHYgcGFyc2UgZmFpbHVyZSBhdCBieXRlICV6ZCAoJXp1IGJ5dGVzIGxlZnQsICV6dSBleHBlY3RlZClcbiIsCisJCQkJICAgcHRyIC0gYmVnaW4sIGxlbiwgc2l6ZW9mKCp0bHYpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJdGx2ID0gcHRyOworCQl0bHZfdGFnID0gX19sZTE2X3RvX2NwdSh0bHYtPnRhZyk7CisJCXRsdl9sZW4gPSBfX2xlMTZfdG9fY3B1KHRsdi0+bGVuKTsKKwkJcHRyICs9IHNpemVvZigqdGx2KTsKKwkJbGVuIC09IHNpemVvZigqdGx2KTsKKworCQlpZiAodGx2X2xlbiA+IGxlbikgeworCQkJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCisJCQkJICAgIndtaSB0bHYgcGFyc2UgZmFpbHVyZSBvZiB0YWcgJWhodSBhdCBieXRlICV6ZCAoJXp1IGJ5dGVzIGxlZnQsICVoaHUgZXhwZWN0ZWQpXG4iLAorCQkJCSAgIHRsdl90YWcsIHB0ciAtIGJlZ2luLCBsZW4sIHRsdl9sZW4pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAodGx2X3RhZyA8IEFSUkFZX1NJWkUod21pX3Rsdl9wb2xpY2llcykgJiYKKwkJICAgIHdtaV90bHZfcG9saWNpZXNbdGx2X3RhZ10ubWluX2xlbiAmJgorCQkgICAgd21pX3Rsdl9wb2xpY2llc1t0bHZfdGFnXS5taW5fbGVuID4gdGx2X2xlbikgeworCQkJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCisJCQkJICAgIndtaSB0bHYgcGFyc2UgZmFpbHVyZSBvZiB0YWcgJWhodSBhdCBieXRlICV6ZCAoJWhodSBieXRlcyBpcyBsZXNzIHRoYW4gbWluIGxlbmd0aCAlenUpXG4iLAorCQkJCSAgIHRsdl90YWcsIHB0ciAtIGJlZ2luLCB0bHZfbGVuLAorCQkJCSAgIHdtaV90bHZfcG9saWNpZXNbdGx2X3RhZ10ubWluX2xlbik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXJldCA9IGl0ZXIoYXIsIHRsdl90YWcsIHRsdl9sZW4sIHB0ciwgZGF0YSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCXB0ciArPSB0bHZfbGVuOworCQlsZW4gLT0gdGx2X2xlbjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGgxMGtfd21pX3Rsdl9pdGVyX3BhcnNlKHN0cnVjdCBhdGgxMGsgKmFyLCB1MTYgdGFnLCB1MTYgbGVuLAorCQkJCSAgICAgY29uc3Qgdm9pZCAqcHRyLCB2b2lkICpkYXRhKQoreworCWNvbnN0IHZvaWQgKip0YiA9IGRhdGE7CisKKwlpZiAodGFnIDwgV01JX1RMVl9UQUdfTUFYKQorCQl0Ylt0YWddID0gcHRyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoMTBrX3dtaV90bHZfcGFyc2Uoc3RydWN0IGF0aDEwayAqYXIsIGNvbnN0IHZvaWQgKip0YiwKKwkJCQljb25zdCB2b2lkICpwdHIsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuIGF0aDEwa193bWlfdGx2X2l0ZXIoYXIsIHB0ciwgbGVuLCBhdGgxMGtfd21pX3Rsdl9pdGVyX3BhcnNlLAorCQkJCSAgICh2b2lkICopdGIpOworfQorCitzdGF0aWMgY29uc3Qgdm9pZCAqKgorYXRoMTBrX3dtaV90bHZfcGFyc2VfYWxsb2Moc3RydWN0IGF0aDEwayAqYXIsIGNvbnN0IHZvaWQgKnB0ciwKKwkJCSAgIHNpemVfdCBsZW4sIGdmcF90IGdmcCkKK3sKKwljb25zdCB2b2lkICoqdGI7CisJaW50IHJldDsKKworCXRiID0ga3phbGxvYyhzaXplb2YoKnRiKSAqIFdNSV9UTFZfVEFHX01BWCwgZ2ZwKTsKKwlpZiAoIXRiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXJldCA9IGF0aDEwa193bWlfdGx2X3BhcnNlKGFyLCB0YiwgcHRyLCBsZW4pOworCWlmIChyZXQpIHsKKwkJa2ZyZWUodGIpOworCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCX0KKworCXJldHVybiB0YjsKK30KKworc3RhdGljIHUxNiBhdGgxMGtfd21pX3Rsdl9sZW4oY29uc3Qgdm9pZCAqcHRyKQoreworCXJldHVybiBfX2xlMTZfdG9fY3B1KCgoKGNvbnN0IHN0cnVjdCB3bWlfdGx2ICopcHRyKSAtIDEpLT5sZW4pOworfQorCisvKioqKioqKioqKioqKiovCisvKiBUTFYgZXZlbnRzICovCisvKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGF0aDEwa193bWlfdGx2X2V2ZW50X2Jjbl90eF9zdGF0dXMoc3RydWN0IGF0aDEwayAqYXIsCisJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJY29uc3Qgdm9pZCAqKnRiOworCWNvbnN0IHN0cnVjdCB3bWlfdGx2X2Jjbl90eF9zdGF0dXNfZXYgKmV2OworCXUzMiB2ZGV2X2lkLCB0eF9zdGF0dXM7CisJaW50IHJldDsKKworCXRiID0gYXRoMTBrX3dtaV90bHZfcGFyc2VfYWxsb2MoYXIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIEdGUF9BVE9NSUMpOworCWlmIChJU19FUlIodGIpKSB7CisJCXJldCA9IFBUUl9FUlIodGIpOworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBwYXJzZSB0bHY6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWV2ID0gdGJbV01JX1RMVl9UQUdfU1RSVUNUX09GRkxPQURfQkNOX1RYX1NUQVRVU19FVkVOVF07CisJaWYgKCFldikgeworCQlrZnJlZSh0Yik7CisJCXJldHVybiAtRVBST1RPOworCX0KKworCXR4X3N0YXR1cyA9IF9fbGUzMl90b19jcHUoZXYtPnR4X3N0YXR1cyk7CisJdmRldl9pZCA9IF9fbGUzMl90b19jcHUoZXYtPnZkZXZfaWQpOworCisJc3dpdGNoICh0eF9zdGF0dXMpIHsKKwljYXNlIFdNSV9UTFZfQkNOX1RYX1NUQVRVU19PSzoKKwkJYnJlYWs7CisJY2FzZSBXTUlfVExWX0JDTl9UWF9TVEFUVVNfWFJFVFJZOgorCWNhc2UgV01JX1RMVl9CQ05fVFhfU1RBVFVTX0RST1A6CisJY2FzZSBXTUlfVExWX0JDTl9UWF9TVEFUVVNfRklMVEVSRUQ6CisJCS8qIEZJWE1FOiBJdCdzIHByb2JhYmx5IHdvcnRoIHRlbGxpbmcgbWFjODAyMTEgdG8gc3RvcCB0aGUKKwkJICogaW50ZXJmYWNlIGFzIGl0IGlzIGNyaXBwbGVkLgorCQkgKi8KKwkJYXRoMTBrX3dhcm4oYXIsICJyZWNlaXZlZCBiY24gdG1wbCB0eCBzdGF0dXMgb24gdmRldiAlaTogJWQiLAorCQkJICAgIHZkZXZfaWQsIHR4X3N0YXR1cyk7CisJCWJyZWFrOworCX0KKworCWtmcmVlKHRiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGgxMGtfd21pX3Rsdl9ldmVudF9kaWFnX2RhdGEoc3RydWN0IGF0aDEwayAqYXIsCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwljb25zdCB2b2lkICoqdGI7CisJY29uc3Qgc3RydWN0IHdtaV90bHZfZGlhZ19kYXRhX2V2ICpldjsKKwljb25zdCBzdHJ1Y3Qgd21pX3Rsdl9kaWFnX2l0ZW0gKml0ZW07CisJY29uc3Qgdm9pZCAqZGF0YTsKKwlpbnQgcmV0LCBudW1faXRlbXMsIGxlbjsKKworCXRiID0gYXRoMTBrX3dtaV90bHZfcGFyc2VfYWxsb2MoYXIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIEdGUF9BVE9NSUMpOworCWlmIChJU19FUlIodGIpKSB7CisJCXJldCA9IFBUUl9FUlIodGIpOworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBwYXJzZSB0bHY6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWV2ID0gdGJbV01JX1RMVl9UQUdfU1RSVUNUX0RJQUdfREFUQV9DT05UQUlORVJfRVZFTlRdOworCWRhdGEgPSB0YltXTUlfVExWX1RBR19BUlJBWV9CWVRFXTsKKwlpZiAoIWV2IHx8ICFkYXRhKSB7CisJCWtmcmVlKHRiKTsKKwkJcmV0dXJuIC1FUFJPVE87CisJfQorCisJbnVtX2l0ZW1zID0gX19sZTMyX3RvX2NwdShldi0+bnVtX2l0ZW1zKTsKKwlsZW4gPSBhdGgxMGtfd21pX3Rsdl9sZW4oZGF0YSk7CisKKwl3aGlsZSAobnVtX2l0ZW1zLS0pIHsKKwkJaWYgKGxlbiA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChsZW4gPCBzaXplb2YoKml0ZW0pKSB7CisJCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBwYXJzZSBkaWFnIGRhdGE6IGNhbid0IGZpdCBpdGVtIGhlYWRlclxuIik7CisJCQlicmVhazsKKwkJfQorCisJCWl0ZW0gPSBkYXRhOworCisJCWlmIChsZW4gPCBzaXplb2YoKml0ZW0pICsgX19sZTE2X3RvX2NwdShpdGVtLT5sZW4pKSB7CisJCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBwYXJzZSBkaWFnIGRhdGE6IGl0ZW0gaXMgdG9vIGxvbmdcbiIpOworCQkJYnJlYWs7CisJCX0KKworCQl0cmFjZV9hdGgxMGtfd21pX2RpYWdfY29udGFpbmVyKGFyLAorCQkJCQkJaXRlbS0+dHlwZSwKKwkJCQkJCV9fbGUzMl90b19jcHUoaXRlbS0+dGltZXN0YW1wKSwKKwkJCQkJCV9fbGUzMl90b19jcHUoaXRlbS0+Y29kZSksCisJCQkJCQlfX2xlMTZfdG9fY3B1KGl0ZW0tPmxlbiksCisJCQkJCQlpdGVtLT5wYXlsb2FkKTsKKworCQlsZW4gLT0gc2l6ZW9mKCppdGVtKTsKKwkJbGVuIC09IHJvdW5kdXAoX19sZTE2X3RvX2NwdShpdGVtLT5sZW4pLCA0KTsKKworCQlkYXRhICs9IHNpemVvZigqaXRlbSk7CisJCWRhdGEgKz0gcm91bmR1cChfX2xlMTZfdG9fY3B1KGl0ZW0tPmxlbiksIDQpOworCX0KKworCWlmIChudW1faXRlbXMgIT0gLTEgfHwgbGVuICE9IDApCisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHBhcnNlIGRpYWcgZGF0YSBldmVudDogbnVtX2l0ZW1zICVkIGxlbiAlZFxuIiwKKwkJCSAgICBudW1faXRlbXMsIGxlbik7CisKKwlrZnJlZSh0Yik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoMTBrX3dtaV90bHZfZXZlbnRfZGlhZyhzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJY29uc3Qgdm9pZCAqKnRiOworCWNvbnN0IHZvaWQgKmRhdGE7CisJaW50IHJldCwgbGVuOworCisJdGIgPSBhdGgxMGtfd21pX3Rsdl9wYXJzZV9hbGxvYyhhciwgc2tiLT5kYXRhLCBza2ItPmxlbiwgR0ZQX0FUT01JQyk7CisJaWYgKElTX0VSUih0YikpIHsKKwkJcmV0ID0gUFRSX0VSUih0Yik7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHBhcnNlIHRsdjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGF0YSA9IHRiW1dNSV9UTFZfVEFHX0FSUkFZX0JZVEVdOworCWlmICghZGF0YSkgeworCQlrZnJlZSh0Yik7CisJCXJldHVybiAtRVBST1RPOworCX0KKwlsZW4gPSBhdGgxMGtfd21pX3Rsdl9sZW4oZGF0YSk7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgZGlhZyBldmVudCBsZW4gJWRcbiIsIGxlbik7CisJdHJhY2VfYXRoMTBrX3dtaV9kaWFnKGFyLCBkYXRhLCBsZW4pOworCisJa2ZyZWUodGIpOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKiovCisvKiBUTFYgb3BzICovCisvKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGF0aDEwa193bWlfdGx2X29wX3J4KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB3bWlfY21kX2hkciAqY21kX2hkcjsKKwllbnVtIHdtaV90bHZfZXZlbnRfaWQgaWQ7CisKKwljbWRfaGRyID0gKHN0cnVjdCB3bWlfY21kX2hkciAqKXNrYi0+ZGF0YTsKKwlpZCA9IE1TKF9fbGUzMl90b19jcHUoY21kX2hkci0+Y21kX2lkKSwgV01JX0NNRF9IRFJfQ01EX0lEKTsKKworCWlmIChza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3Qgd21pX2NtZF9oZHIpKSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl0cmFjZV9hdGgxMGtfd21pX2V2ZW50KGFyLCBpZCwgc2tiLT5kYXRhLCBza2ItPmxlbik7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBXTUlfVExWX01HTVRfUlhfRVZFTlRJRDoKKwkJYXRoMTBrX3dtaV9ldmVudF9tZ210X3J4KGFyLCBza2IpOworCQkvKiBtZ210X3J4KCkgb3ducyB0aGUgc2tiIG5vdyEgKi8KKwkJcmV0dXJuOworCWNhc2UgV01JX1RMVl9TQ0FOX0VWRU5USUQ6CisJCWF0aDEwa193bWlfZXZlbnRfc2Nhbihhciwgc2tiKTsKKwkJYnJlYWs7CisJY2FzZSBXTUlfVExWX0NIQU5fSU5GT19FVkVOVElEOgorCQlhdGgxMGtfd21pX2V2ZW50X2NoYW5faW5mbyhhciwgc2tiKTsKKwkJYnJlYWs7CisJY2FzZSBXTUlfVExWX0VDSE9fRVZFTlRJRDoKKwkJYXRoMTBrX3dtaV9ldmVudF9lY2hvKGFyLCBza2IpOworCQlicmVhazsKKwljYXNlIFdNSV9UTFZfREVCVUdfTUVTR19FVkVOVElEOgorCQlhdGgxMGtfd21pX2V2ZW50X2RlYnVnX21lc2coYXIsIHNrYik7CisJCWJyZWFrOworCWNhc2UgV01JX1RMVl9VUERBVEVfU1RBVFNfRVZFTlRJRDoKKwkJYXRoMTBrX3dtaV9ldmVudF91cGRhdGVfc3RhdHMoYXIsIHNrYik7CisJCWJyZWFrOworCWNhc2UgV01JX1RMVl9WREVWX1NUQVJUX1JFU1BfRVZFTlRJRDoKKwkJYXRoMTBrX3dtaV9ldmVudF92ZGV2X3N0YXJ0X3Jlc3AoYXIsIHNrYik7CisJCWJyZWFrOworCWNhc2UgV01JX1RMVl9WREVWX1NUT1BQRURfRVZFTlRJRDoKKwkJYXRoMTBrX3dtaV9ldmVudF92ZGV2X3N0b3BwZWQoYXIsIHNrYik7CisJCWJyZWFrOworCWNhc2UgV01JX1RMVl9QRUVSX1NUQV9LSUNLT1VUX0VWRU5USUQ6CisJCWF0aDEwa193bWlfZXZlbnRfcGVlcl9zdGFfa2lja291dChhciwgc2tiKTsKKwkJYnJlYWs7CisJY2FzZSBXTUlfVExWX0hPU1RfU1dCQV9FVkVOVElEOgorCQlhdGgxMGtfd21pX2V2ZW50X2hvc3Rfc3diYShhciwgc2tiKTsKKwkJYnJlYWs7CisJY2FzZSBXTUlfVExWX1RCVFRPRkZTRVRfVVBEQVRFX0VWRU5USUQ6CisJCWF0aDEwa193bWlfZXZlbnRfdGJ0dG9mZnNldF91cGRhdGUoYXIsIHNrYik7CisJCWJyZWFrOworCWNhc2UgV01JX1RMVl9QSFlFUlJfRVZFTlRJRDoKKwkJYXRoMTBrX3dtaV9ldmVudF9waHllcnIoYXIsIHNrYik7CisJCWJyZWFrOworCWNhc2UgV01JX1RMVl9ST0FNX0VWRU5USUQ6CisJCWF0aDEwa193bWlfZXZlbnRfcm9hbShhciwgc2tiKTsKKwkJYnJlYWs7CisJY2FzZSBXTUlfVExWX1BST0ZJTEVfTUFUQ0g6CisJCWF0aDEwa193bWlfZXZlbnRfcHJvZmlsZV9tYXRjaChhciwgc2tiKTsKKwkJYnJlYWs7CisJY2FzZSBXTUlfVExWX0RFQlVHX1BSSU5UX0VWRU5USUQ6CisJCWF0aDEwa193bWlfZXZlbnRfZGVidWdfcHJpbnQoYXIsIHNrYik7CisJCWJyZWFrOworCWNhc2UgV01JX1RMVl9QREVWX1FWSVRfRVZFTlRJRDoKKwkJYXRoMTBrX3dtaV9ldmVudF9wZGV2X3F2aXQoYXIsIHNrYik7CisJCWJyZWFrOworCWNhc2UgV01JX1RMVl9XTEFOX1BST0ZJTEVfREFUQV9FVkVOVElEOgorCQlhdGgxMGtfd21pX2V2ZW50X3dsYW5fcHJvZmlsZV9kYXRhKGFyLCBza2IpOworCQlicmVhazsKKwljYXNlIFdNSV9UTFZfUlRUX01FQVNVUkVNRU5UX1JFUE9SVF9FVkVOVElEOgorCQlhdGgxMGtfd21pX2V2ZW50X3J0dF9tZWFzdXJlbWVudF9yZXBvcnQoYXIsIHNrYik7CisJCWJyZWFrOworCWNhc2UgV01JX1RMVl9UU0ZfTUVBU1VSRU1FTlRfUkVQT1JUX0VWRU5USUQ6CisJCWF0aDEwa193bWlfZXZlbnRfdHNmX21lYXN1cmVtZW50X3JlcG9ydChhciwgc2tiKTsKKwkJYnJlYWs7CisJY2FzZSBXTUlfVExWX1JUVF9FUlJPUl9SRVBPUlRfRVZFTlRJRDoKKwkJYXRoMTBrX3dtaV9ldmVudF9ydHRfZXJyb3JfcmVwb3J0KGFyLCBza2IpOworCQlicmVhazsKKwljYXNlIFdNSV9UTFZfV09XX1dBS0VVUF9IT1NUX0VWRU5USUQ6CisJCWF0aDEwa193bWlfZXZlbnRfd293X3dha2V1cF9ob3N0KGFyLCBza2IpOworCQlicmVhazsKKwljYXNlIFdNSV9UTFZfRENTX0lOVEVSRkVSRU5DRV9FVkVOVElEOgorCQlhdGgxMGtfd21pX2V2ZW50X2Rjc19pbnRlcmZlcmVuY2UoYXIsIHNrYik7CisJCWJyZWFrOworCWNhc2UgV01JX1RMVl9QREVWX1RQQ19DT05GSUdfRVZFTlRJRDoKKwkJYXRoMTBrX3dtaV9ldmVudF9wZGV2X3RwY19jb25maWcoYXIsIHNrYik7CisJCWJyZWFrOworCWNhc2UgV01JX1RMVl9QREVWX0ZUTV9JTlRHX0VWRU5USUQ6CisJCWF0aDEwa193bWlfZXZlbnRfcGRldl9mdG1faW50Zyhhciwgc2tiKTsKKwkJYnJlYWs7CisJY2FzZSBXTUlfVExWX0dUS19PRkZMT0FEX1NUQVRVU19FVkVOVElEOgorCQlhdGgxMGtfd21pX2V2ZW50X2d0a19vZmZsb2FkX3N0YXR1cyhhciwgc2tiKTsKKwkJYnJlYWs7CisJY2FzZSBXTUlfVExWX0dUS19SRUtFWV9GQUlMX0VWRU5USUQ6CisJCWF0aDEwa193bWlfZXZlbnRfZ3RrX3Jla2V5X2ZhaWwoYXIsIHNrYik7CisJCWJyZWFrOworCWNhc2UgV01JX1RMVl9UWF9ERUxCQV9DT01QTEVURV9FVkVOVElEOgorCQlhdGgxMGtfd21pX2V2ZW50X2RlbGJhX2NvbXBsZXRlKGFyLCBza2IpOworCQlicmVhazsKKwljYXNlIFdNSV9UTFZfVFhfQUREQkFfQ09NUExFVEVfRVZFTlRJRDoKKwkJYXRoMTBrX3dtaV9ldmVudF9hZGRiYV9jb21wbGV0ZShhciwgc2tiKTsKKwkJYnJlYWs7CisJY2FzZSBXTUlfVExWX1ZERVZfSU5TVEFMTF9LRVlfQ09NUExFVEVfRVZFTlRJRDoKKwkJYXRoMTBrX3dtaV9ldmVudF92ZGV2X2luc3RhbGxfa2V5X2NvbXBsZXRlKGFyLCBza2IpOworCQlicmVhazsKKwljYXNlIFdNSV9UTFZfU0VSVklDRV9SRUFEWV9FVkVOVElEOgorCQlhdGgxMGtfd21pX2V2ZW50X3NlcnZpY2VfcmVhZHkoYXIsIHNrYik7CisJCWJyZWFrOworCWNhc2UgV01JX1RMVl9SRUFEWV9FVkVOVElEOgorCQlhdGgxMGtfd21pX2V2ZW50X3JlYWR5KGFyLCBza2IpOworCQlicmVhazsKKwljYXNlIFdNSV9UTFZfT0ZGTE9BRF9CQ05fVFhfU1RBVFVTX0VWRU5USUQ6CisJCWF0aDEwa193bWlfdGx2X2V2ZW50X2Jjbl90eF9zdGF0dXMoYXIsIHNrYik7CisJCWJyZWFrOworCWNhc2UgV01JX1RMVl9ESUFHX0RBVEFfQ09OVEFJTkVSX0VWRU5USUQ6CisJCWF0aDEwa193bWlfdGx2X2V2ZW50X2RpYWdfZGF0YShhciwgc2tiKTsKKwkJYnJlYWs7CisJY2FzZSBXTUlfVExWX0RJQUdfRVZFTlRJRDoKKwkJYXRoMTBrX3dtaV90bHZfZXZlbnRfZGlhZyhhciwgc2tiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYXRoMTBrX3dhcm4oYXIsICJVbmtub3duIGV2ZW50aWQ6ICVkXG4iLCBpZCk7CisJCWJyZWFrOworCX0KKworCWRldl9rZnJlZV9za2Ioc2tiKTsKK30KKworc3RhdGljIGludCBhdGgxMGtfd21pX3Rsdl9vcF9wdWxsX3NjYW5fZXYoc3RydWN0IGF0aDEwayAqYXIsCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3Qgd21pX3NjYW5fZXZfYXJnICphcmcpCit7CisJY29uc3Qgdm9pZCAqKnRiOworCWNvbnN0IHN0cnVjdCB3bWlfc2Nhbl9ldmVudCAqZXY7CisJaW50IHJldDsKKworCXRiID0gYXRoMTBrX3dtaV90bHZfcGFyc2VfYWxsb2MoYXIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIEdGUF9BVE9NSUMpOworCWlmIChJU19FUlIodGIpKSB7CisJCXJldCA9IFBUUl9FUlIodGIpOworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBwYXJzZSB0bHY6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWV2ID0gdGJbV01JX1RMVl9UQUdfU1RSVUNUX1NDQU5fRVZFTlRdOworCWlmICghZXYpIHsKKwkJa2ZyZWUodGIpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKKwlhcmctPmV2ZW50X3R5cGUgPSBldi0+ZXZlbnRfdHlwZTsKKwlhcmctPnJlYXNvbiA9IGV2LT5yZWFzb247CisJYXJnLT5jaGFubmVsX2ZyZXEgPSBldi0+Y2hhbm5lbF9mcmVxOworCWFyZy0+c2Nhbl9yZXFfaWQgPSBldi0+c2Nhbl9yZXFfaWQ7CisJYXJnLT5zY2FuX2lkID0gZXYtPnNjYW5faWQ7CisJYXJnLT52ZGV2X2lkID0gZXYtPnZkZXZfaWQ7CisKKwlrZnJlZSh0Yik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoMTBrX3dtaV90bHZfb3BfcHVsbF9tZ210X3J4X2V2KHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgc3RydWN0IHdtaV9tZ210X3J4X2V2X2FyZyAqYXJnKQoreworCWNvbnN0IHZvaWQgKip0YjsKKwljb25zdCBzdHJ1Y3Qgd21pX3Rsdl9tZ210X3J4X2V2ICpldjsKKwljb25zdCB1OCAqZnJhbWU7CisJdTMyIG1zZHVfbGVuOworCWludCByZXQ7CisKKwl0YiA9IGF0aDEwa193bWlfdGx2X3BhcnNlX2FsbG9jKGFyLCBza2ItPmRhdGEsIHNrYi0+bGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAoSVNfRVJSKHRiKSkgeworCQlyZXQgPSBQVFJfRVJSKHRiKTsKKwkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gcGFyc2UgdGx2OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlldiA9IHRiW1dNSV9UTFZfVEFHX1NUUlVDVF9NR01UX1JYX0hEUl07CisJZnJhbWUgPSB0YltXTUlfVExWX1RBR19BUlJBWV9CWVRFXTsKKworCWlmICghZXYgfHwgIWZyYW1lKSB7CisJCWtmcmVlKHRiKTsKKwkJcmV0dXJuIC1FUFJPVE87CisJfQorCisJYXJnLT5jaGFubmVsID0gZXYtPmNoYW5uZWw7CisJYXJnLT5idWZfbGVuID0gZXYtPmJ1Zl9sZW47CisJYXJnLT5zdGF0dXMgPSBldi0+c3RhdHVzOworCWFyZy0+c25yID0gZXYtPnNucjsKKwlhcmctPnBoeV9tb2RlID0gZXYtPnBoeV9tb2RlOworCWFyZy0+cmF0ZSA9IGV2LT5yYXRlOworCisJbXNkdV9sZW4gPSBfX2xlMzJfdG9fY3B1KGFyZy0+YnVmX2xlbik7CisKKwlpZiAoc2tiLT5sZW4gPCAoZnJhbWUgLSBza2ItPmRhdGEpICsgbXNkdV9sZW4pIHsKKwkJa2ZyZWUodGIpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKKwkvKiBzaGlmdCB0aGUgc2tfYnVmZiB0byBwb2ludCB0byBgZnJhbWVgICovCisJc2tiX3RyaW0oc2tiLCAwKTsKKwlza2JfcHV0KHNrYiwgZnJhbWUgLSBza2ItPmRhdGEpOworCXNrYl9wdWxsKHNrYiwgZnJhbWUgLSBza2ItPmRhdGEpOworCXNrYl9wdXQoc2tiLCBtc2R1X2xlbik7CisKKwlrZnJlZSh0Yik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoMTBrX3dtaV90bHZfb3BfcHVsbF9jaF9pbmZvX2V2KHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgc3RydWN0IHdtaV9jaF9pbmZvX2V2X2FyZyAqYXJnKQoreworCWNvbnN0IHZvaWQgKip0YjsKKwljb25zdCBzdHJ1Y3Qgd21pX2NoYW5faW5mb19ldmVudCAqZXY7CisJaW50IHJldDsKKworCXRiID0gYXRoMTBrX3dtaV90bHZfcGFyc2VfYWxsb2MoYXIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIEdGUF9BVE9NSUMpOworCWlmIChJU19FUlIodGIpKSB7CisJCXJldCA9IFBUUl9FUlIodGIpOworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBwYXJzZSB0bHY6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWV2ID0gdGJbV01JX1RMVl9UQUdfU1RSVUNUX0NIQU5fSU5GT19FVkVOVF07CisJaWYgKCFldikgeworCQlrZnJlZSh0Yik7CisJCXJldHVybiAtRVBST1RPOworCX0KKworCWFyZy0+ZXJyX2NvZGUgPSBldi0+ZXJyX2NvZGU7CisJYXJnLT5mcmVxID0gZXYtPmZyZXE7CisJYXJnLT5jbWRfZmxhZ3MgPSBldi0+Y21kX2ZsYWdzOworCWFyZy0+bm9pc2VfZmxvb3IgPSBldi0+bm9pc2VfZmxvb3I7CisJYXJnLT5yeF9jbGVhcl9jb3VudCA9IGV2LT5yeF9jbGVhcl9jb3VudDsKKwlhcmctPmN5Y2xlX2NvdW50ID0gZXYtPmN5Y2xlX2NvdW50OworCisJa2ZyZWUodGIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CithdGgxMGtfd21pX3Rsdl9vcF9wdWxsX3ZkZXZfc3RhcnRfZXYoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3Qgd21pX3ZkZXZfc3RhcnRfZXZfYXJnICphcmcpCit7CisJY29uc3Qgdm9pZCAqKnRiOworCWNvbnN0IHN0cnVjdCB3bWlfdmRldl9zdGFydF9yZXNwb25zZV9ldmVudCAqZXY7CisJaW50IHJldDsKKworCXRiID0gYXRoMTBrX3dtaV90bHZfcGFyc2VfYWxsb2MoYXIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIEdGUF9BVE9NSUMpOworCWlmIChJU19FUlIodGIpKSB7CisJCXJldCA9IFBUUl9FUlIodGIpOworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBwYXJzZSB0bHY6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWV2ID0gdGJbV01JX1RMVl9UQUdfU1RSVUNUX1ZERVZfU1RBUlRfUkVTUE9OU0VfRVZFTlRdOworCWlmICghZXYpIHsKKwkJa2ZyZWUodGIpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKKwlza2JfcHVsbChza2IsIHNpemVvZigqZXYpKTsKKwlhcmctPnZkZXZfaWQgPSBldi0+dmRldl9pZDsKKwlhcmctPnJlcV9pZCA9IGV2LT5yZXFfaWQ7CisJYXJnLT5yZXNwX3R5cGUgPSBldi0+cmVzcF90eXBlOworCWFyZy0+c3RhdHVzID0gZXYtPnN0YXR1czsKKworCWtmcmVlKHRiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGgxMGtfd21pX3Rsdl9vcF9wdWxsX3BlZXJfa2lja19ldihzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgICBzdHJ1Y3Qgd21pX3BlZXJfa2lja19ldl9hcmcgKmFyZykKK3sKKwljb25zdCB2b2lkICoqdGI7CisJY29uc3Qgc3RydWN0IHdtaV9wZWVyX3N0YV9raWNrb3V0X2V2ZW50ICpldjsKKwlpbnQgcmV0OworCisJdGIgPSBhdGgxMGtfd21pX3Rsdl9wYXJzZV9hbGxvYyhhciwgc2tiLT5kYXRhLCBza2ItPmxlbiwgR0ZQX0FUT01JQyk7CisJaWYgKElTX0VSUih0YikpIHsKKwkJcmV0ID0gUFRSX0VSUih0Yik7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHBhcnNlIHRsdjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZXYgPSB0YltXTUlfVExWX1RBR19TVFJVQ1RfUEVFUl9TVEFfS0lDS09VVF9FVkVOVF07CisJaWYgKCFldikgeworCQlrZnJlZSh0Yik7CisJCXJldHVybiAtRVBST1RPOworCX0KKworCWFyZy0+bWFjX2FkZHIgPSBldi0+cGVlcl9tYWNhZGRyLmFkZHI7CisKKwlrZnJlZSh0Yik7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCB3bWlfdGx2X3N3YmFfcGFyc2UgeworCWNvbnN0IHN0cnVjdCB3bWlfaG9zdF9zd2JhX2V2ZW50ICpldjsKKwlib29sIHRpbV9kb25lOworCWJvb2wgbm9hX2RvbmU7CisJc2l6ZV90IG5fdGltOworCXNpemVfdCBuX25vYTsKKwlzdHJ1Y3Qgd21pX3N3YmFfZXZfYXJnICphcmc7Cit9OworCitzdGF0aWMgaW50IGF0aDEwa193bWlfdGx2X3N3YmFfdGltX3BhcnNlKHN0cnVjdCBhdGgxMGsgKmFyLCB1MTYgdGFnLCB1MTYgbGVuLAorCQkJCQkgY29uc3Qgdm9pZCAqcHRyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB3bWlfdGx2X3N3YmFfcGFyc2UgKnN3YmEgPSBkYXRhOworCisJaWYgKHRhZyAhPSBXTUlfVExWX1RBR19TVFJVQ1RfVElNX0lORk8pCisJCXJldHVybiAtRVBST1RPOworCisJaWYgKHN3YmEtPm5fdGltID49IEFSUkFZX1NJWkUoc3diYS0+YXJnLT50aW1faW5mbykpCisJCXJldHVybiAtRU5PQlVGUzsKKworCXN3YmEtPmFyZy0+dGltX2luZm9bc3diYS0+bl90aW0rK10gPSBwdHI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoMTBrX3dtaV90bHZfc3diYV9ub2FfcGFyc2Uoc3RydWN0IGF0aDEwayAqYXIsIHUxNiB0YWcsIHUxNiBsZW4sCisJCQkJCSBjb25zdCB2b2lkICpwdHIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHdtaV90bHZfc3diYV9wYXJzZSAqc3diYSA9IGRhdGE7CisKKwlpZiAodGFnICE9IFdNSV9UTFZfVEFHX1NUUlVDVF9QMlBfTk9BX0lORk8pCisJCXJldHVybiAtRVBST1RPOworCisJaWYgKHN3YmEtPm5fbm9hID49IEFSUkFZX1NJWkUoc3diYS0+YXJnLT5ub2FfaW5mbykpCisJCXJldHVybiAtRU5PQlVGUzsKKworCXN3YmEtPmFyZy0+bm9hX2luZm9bc3diYS0+bl9ub2ErK10gPSBwdHI7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoMTBrX3dtaV90bHZfc3diYV9wYXJzZShzdHJ1Y3QgYXRoMTBrICphciwgdTE2IHRhZywgdTE2IGxlbiwKKwkJCQkgICAgIGNvbnN0IHZvaWQgKnB0ciwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3Qgd21pX3Rsdl9zd2JhX3BhcnNlICpzd2JhID0gZGF0YTsKKwlpbnQgcmV0OworCisJc3dpdGNoICh0YWcpIHsKKwljYXNlIFdNSV9UTFZfVEFHX1NUUlVDVF9IT1NUX1NXQkFfRVZFTlQ6CisJCXN3YmEtPmV2ID0gcHRyOworCQlicmVhazsKKwljYXNlIFdNSV9UTFZfVEFHX0FSUkFZX1NUUlVDVDoKKwkJaWYgKCFzd2JhLT50aW1fZG9uZSkgeworCQkJc3diYS0+dGltX2RvbmUgPSB0cnVlOworCQkJcmV0ID0gYXRoMTBrX3dtaV90bHZfaXRlcihhciwgcHRyLCBsZW4sCisJCQkJCQkgIGF0aDEwa193bWlfdGx2X3N3YmFfdGltX3BhcnNlLAorCQkJCQkJICBzd2JhKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfSBlbHNlIGlmICghc3diYS0+bm9hX2RvbmUpIHsKKwkJCXN3YmEtPm5vYV9kb25lID0gdHJ1ZTsKKwkJCXJldCA9IGF0aDEwa193bWlfdGx2X2l0ZXIoYXIsIHB0ciwgbGVuLAorCQkJCQkJICBhdGgxMGtfd21pX3Rsdl9zd2JhX25vYV9wYXJzZSwKKwkJCQkJCSAgc3diYSk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0aDEwa193bWlfdGx2X29wX3B1bGxfc3diYV9ldihzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgIHN0cnVjdCB3bWlfc3diYV9ldl9hcmcgKmFyZykKK3sKKwlzdHJ1Y3Qgd21pX3Rsdl9zd2JhX3BhcnNlIHN3YmEgPSB7IC5hcmcgPSBhcmcgfTsKKwl1MzIgbWFwOworCXNpemVfdCBuX3ZkZXZzOworCWludCByZXQ7CisKKwlyZXQgPSBhdGgxMGtfd21pX3Rsdl9pdGVyKGFyLCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJCSAgYXRoMTBrX3dtaV90bHZfc3diYV9wYXJzZSwgJnN3YmEpOworCWlmIChyZXQpIHsKKwkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gcGFyc2UgdGx2OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoIXN3YmEuZXYpCisJCXJldHVybiAtRVBST1RPOworCisJYXJnLT52ZGV2X21hcCA9IHN3YmEuZXYtPnZkZXZfbWFwOworCisJZm9yIChtYXAgPSBfX2xlMzJfdG9fY3B1KGFyZy0+dmRldl9tYXApLCBuX3ZkZXZzID0gMDsgbWFwOyBtYXAgPj49IDEpCisJCWlmIChtYXAgJiBCSVQoMCkpCisJCQluX3ZkZXZzKys7CisKKwlpZiAobl92ZGV2cyAhPSBzd2JhLm5fdGltIHx8CisJICAgIG5fdmRldnMgIT0gc3diYS5uX25vYSkKKwkJcmV0dXJuIC1FUFJPVE87CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGgxMGtfd21pX3Rsdl9vcF9wdWxsX3BoeWVycl9ldihzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICBzdHJ1Y3Qgd21pX3BoeWVycl9ldl9hcmcgKmFyZykKK3sKKwljb25zdCB2b2lkICoqdGI7CisJY29uc3Qgc3RydWN0IHdtaV90bHZfcGh5ZXJyX2V2ICpldjsKKwljb25zdCB2b2lkICpwaHllcnJzOworCWludCByZXQ7CisKKwl0YiA9IGF0aDEwa193bWlfdGx2X3BhcnNlX2FsbG9jKGFyLCBza2ItPmRhdGEsIHNrYi0+bGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAoSVNfRVJSKHRiKSkgeworCQlyZXQgPSBQVFJfRVJSKHRiKTsKKwkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gcGFyc2UgdGx2OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlldiA9IHRiW1dNSV9UTFZfVEFHX1NUUlVDVF9DT01CX1BIWUVSUl9SWF9IRFJdOworCXBoeWVycnMgPSB0YltXTUlfVExWX1RBR19BUlJBWV9CWVRFXTsKKworCWlmICghZXYgfHwgIXBoeWVycnMpIHsKKwkJa2ZyZWUodGIpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKKwlhcmctPm51bV9waHllcnJzICA9IGV2LT5udW1fcGh5ZXJyczsKKwlhcmctPnRzZl9sMzIgPSBldi0+dHNmX2wzMjsKKwlhcmctPnRzZl91MzIgPSBldi0+dHNmX3UzMjsKKwlhcmctPmJ1Zl9sZW4gPSBldi0+YnVmX2xlbjsKKwlhcmctPnBoeWVycnMgPSBwaHllcnJzOworCisJa2ZyZWUodGIpOworCXJldHVybiAwOworfQorCisjZGVmaW5lIFdNSV9UTFZfQUJJX1ZFUl9OUzAgMHg1RjQxNDM1MQorI2RlZmluZSBXTUlfVExWX0FCSV9WRVJfTlMxIDB4MDAwMDRDNEQKKyNkZWZpbmUgV01JX1RMVl9BQklfVkVSX05TMiAweDAwMDAwMDAwCisjZGVmaW5lIFdNSV9UTFZfQUJJX1ZFUl9OUzMgMHgwMDAwMDAwMAorCisjZGVmaW5lIFdNSV9UTFZfQUJJX1ZFUjBfTUFKT1IgMQorI2RlZmluZSBXTUlfVExWX0FCSV9WRVIwX01JTk9SIDAKKyNkZWZpbmUgV01JX1RMVl9BQklfVkVSMCAoKCgoV01JX1RMVl9BQklfVkVSMF9NQUpPUikgPDwgMjQpICYgMHhGRjAwMDAwMCkgfCBcCisJCQkgICgoKFdNSV9UTFZfQUJJX1ZFUjBfTUlOT1IpIDw8ICAwKSAmIDB4MDBGRkZGRkYpKQorI2RlZmluZSBXTUlfVExWX0FCSV9WRVIxIDUzCisKK3N0YXRpYyBpbnQKK2F0aDEwa193bWlfdGx2X3BhcnNlX21lbV9yZXFzKHN0cnVjdCBhdGgxMGsgKmFyLCB1MTYgdGFnLCB1MTYgbGVuLAorCQkJICAgICAgY29uc3Qgdm9pZCAqcHRyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCB3bWlfc3ZjX3JkeV9ldl9hcmcgKmFyZyA9IGRhdGE7CisJaW50IGk7CisKKwlpZiAodGFnICE9IFdNSV9UTFZfVEFHX1NUUlVDVF9XTEFOX0hPU1RfTUVNX1JFUSkKKwkJcmV0dXJuIC1FUFJPVE87CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhcmctPm1lbV9yZXFzKTsgaSsrKSB7CisJCWlmICghYXJnLT5tZW1fcmVxc1tpXSkgeworCQkJYXJnLT5tZW1fcmVxc1tpXSA9IHB0cjsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgYXRoMTBrX3dtaV90bHZfb3BfcHVsbF9zdmNfcmR5X2V2KHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgc3RydWN0IHdtaV9zdmNfcmR5X2V2X2FyZyAqYXJnKQoreworCWNvbnN0IHZvaWQgKip0YjsKKwljb25zdCBzdHJ1Y3QgaGFsX3JlZ19jYXBhYmlsaXRpZXMgKnJlZzsKKwljb25zdCBzdHJ1Y3Qgd21pX3Rsdl9zdmNfcmR5X2V2ICpldjsKKwljb25zdCBfX2xlMzIgKnN2Y19ibWFwOworCWNvbnN0IHN0cnVjdCB3bGFuX2hvc3RfbWVtX3JlcSAqbWVtX3JlcXM7CisJaW50IHJldDsKKworCXRiID0gYXRoMTBrX3dtaV90bHZfcGFyc2VfYWxsb2MoYXIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIEdGUF9BVE9NSUMpOworCWlmIChJU19FUlIodGIpKSB7CisJCXJldCA9IFBUUl9FUlIodGIpOworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBwYXJzZSB0bHY6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWV2ID0gdGJbV01JX1RMVl9UQUdfU1RSVUNUX1NFUlZJQ0VfUkVBRFlfRVZFTlRdOworCXJlZyA9IHRiW1dNSV9UTFZfVEFHX1NUUlVDVF9IQUxfUkVHX0NBUEFCSUxJVElFU107CisJc3ZjX2JtYXAgPSB0YltXTUlfVExWX1RBR19BUlJBWV9VSU5UMzJdOworCW1lbV9yZXFzID0gdGJbV01JX1RMVl9UQUdfQVJSQVlfU1RSVUNUXTsKKworCWlmICghZXYgfHwgIXJlZyB8fCAhc3ZjX2JtYXAgfHwgIW1lbV9yZXFzKSB7CisJCWtmcmVlKHRiKTsKKwkJcmV0dXJuIC1FUFJPVE87CisJfQorCisJLyogVGhpcyBpcyBhbiBpbnRlcm5hbCBBQkkgY29tcGF0aWJpbGl0eSBjaGVjayBmb3IgV01JIFRMViBzbyBjaGVjayBpdAorCSAqIGhlcmUgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpYyBXTUkgY29kZS4KKwkgKi8KKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwKKwkJICAgIndtaSB0bHYgYWJpIDB4JTA4eCA/PSAweCUwOHgsIDB4JTA4eCA/PSAweCUwOHgsIDB4JTA4eCA/PSAweCUwOHgsIDB4JTA4eCA/PSAweCUwOHgsIDB4JTA4eCA/PSAweCUwOHhcbiIsCisJCSAgIF9fbGUzMl90b19jcHUoZXYtPmFiaS5hYmlfdmVyMCksIFdNSV9UTFZfQUJJX1ZFUjAsCisJCSAgIF9fbGUzMl90b19jcHUoZXYtPmFiaS5hYmlfdmVyX25zMCksIFdNSV9UTFZfQUJJX1ZFUl9OUzAsCisJCSAgIF9fbGUzMl90b19jcHUoZXYtPmFiaS5hYmlfdmVyX25zMSksIFdNSV9UTFZfQUJJX1ZFUl9OUzEsCisJCSAgIF9fbGUzMl90b19jcHUoZXYtPmFiaS5hYmlfdmVyX25zMiksIFdNSV9UTFZfQUJJX1ZFUl9OUzIsCisJCSAgIF9fbGUzMl90b19jcHUoZXYtPmFiaS5hYmlfdmVyX25zMyksIFdNSV9UTFZfQUJJX1ZFUl9OUzMpOworCisJaWYgKF9fbGUzMl90b19jcHUoZXYtPmFiaS5hYmlfdmVyMCkgIT0gV01JX1RMVl9BQklfVkVSMCB8fAorCSAgICBfX2xlMzJfdG9fY3B1KGV2LT5hYmkuYWJpX3Zlcl9uczApICE9IFdNSV9UTFZfQUJJX1ZFUl9OUzAgfHwKKwkgICAgX19sZTMyX3RvX2NwdShldi0+YWJpLmFiaV92ZXJfbnMxKSAhPSBXTUlfVExWX0FCSV9WRVJfTlMxIHx8CisJICAgIF9fbGUzMl90b19jcHUoZXYtPmFiaS5hYmlfdmVyX25zMikgIT0gV01JX1RMVl9BQklfVkVSX05TMiB8fAorCSAgICBfX2xlMzJfdG9fY3B1KGV2LT5hYmkuYWJpX3Zlcl9uczMpICE9IFdNSV9UTFZfQUJJX1ZFUl9OUzMpIHsKKwkJa2ZyZWUodGIpOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0KKworCWFyZy0+bWluX3R4X3Bvd2VyID0gZXYtPmh3X21pbl90eF9wb3dlcjsKKwlhcmctPm1heF90eF9wb3dlciA9IGV2LT5od19tYXhfdHhfcG93ZXI7CisJYXJnLT5odF9jYXAgPSBldi0+aHRfY2FwX2luZm87CisJYXJnLT52aHRfY2FwID0gZXYtPnZodF9jYXBfaW5mbzsKKwlhcmctPnN3X3ZlcjAgPSBldi0+YWJpLmFiaV92ZXIwOworCWFyZy0+c3dfdmVyMSA9IGV2LT5hYmkuYWJpX3ZlcjE7CisJYXJnLT5md19idWlsZCA9IGV2LT5md19idWlsZF92ZXJzOworCWFyZy0+cGh5X2NhcGFiID0gZXYtPnBoeV9jYXBhYmlsaXR5OworCWFyZy0+bnVtX3JmX2NoYWlucyA9IGV2LT5udW1fcmZfY2hhaW5zOworCWFyZy0+ZWVwcm9tX3JkID0gcmVnLT5lZXByb21fcmQ7CisJYXJnLT5udW1fbWVtX3JlcXMgPSBldi0+bnVtX21lbV9yZXFzOworCWFyZy0+c2VydmljZV9tYXAgPSBzdmNfYm1hcDsKKwlhcmctPnNlcnZpY2VfbWFwX2xlbiA9IGF0aDEwa193bWlfdGx2X2xlbihzdmNfYm1hcCk7CisKKwlyZXQgPSBhdGgxMGtfd21pX3Rsdl9pdGVyKGFyLCBtZW1fcmVxcywgYXRoMTBrX3dtaV90bHZfbGVuKG1lbV9yZXFzKSwKKwkJCQkgIGF0aDEwa193bWlfdGx2X3BhcnNlX21lbV9yZXFzLCBhcmcpOworCWlmIChyZXQpIHsKKwkJa2ZyZWUodGIpOworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBwYXJzZSBtZW1fcmVxcyB0bHY6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWtmcmVlKHRiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdGgxMGtfd21pX3Rsdl9vcF9wdWxsX3JkeV9ldihzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3Qgd21pX3JkeV9ldl9hcmcgKmFyZykKK3sKKwljb25zdCB2b2lkICoqdGI7CisJY29uc3Qgc3RydWN0IHdtaV90bHZfcmR5X2V2ICpldjsKKwlpbnQgcmV0OworCisJdGIgPSBhdGgxMGtfd21pX3Rsdl9wYXJzZV9hbGxvYyhhciwgc2tiLT5kYXRhLCBza2ItPmxlbiwgR0ZQX0FUT01JQyk7CisJaWYgKElTX0VSUih0YikpIHsKKwkJcmV0ID0gUFRSX0VSUih0Yik7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHBhcnNlIHRsdjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZXYgPSB0YltXTUlfVExWX1RBR19TVFJVQ1RfUkVBRFlfRVZFTlRdOworCWlmICghZXYpIHsKKwkJa2ZyZWUodGIpOworCQlyZXR1cm4gLUVQUk9UTzsKKwl9CisKKwlhcmctPnN3X3ZlcnNpb24gPSBldi0+YWJpLmFiaV92ZXIwOworCWFyZy0+YWJpX3ZlcnNpb24gPSBldi0+YWJpLmFiaV92ZXIxOworCWFyZy0+c3RhdHVzID0gZXYtPnN0YXR1czsKKwlhcmctPm1hY19hZGRyID0gZXYtPm1hY19hZGRyLmFkZHI7CisKKwlrZnJlZSh0Yik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoMTBrX3dtaV90bHZfb3BfcHVsbF9md19zdGF0cyhzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IGF0aDEwa19md19zdGF0cyAqc3RhdHMpCit7CisJY29uc3Qgdm9pZCAqKnRiOworCWNvbnN0IHN0cnVjdCB3bWlfc3RhdHNfZXZlbnQgKmV2OworCWNvbnN0IHZvaWQgKmRhdGE7CisJdTMyIG51bV9wZGV2X3N0YXRzLCBudW1fdmRldl9zdGF0cywgbnVtX3BlZXJfc3RhdHM7CisJc2l6ZV90IGRhdGFfbGVuOworCWludCByZXQ7CisKKwl0YiA9IGF0aDEwa193bWlfdGx2X3BhcnNlX2FsbG9jKGFyLCBza2ItPmRhdGEsIHNrYi0+bGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAoSVNfRVJSKHRiKSkgeworCQlyZXQgPSBQVFJfRVJSKHRiKTsKKwkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gcGFyc2UgdGx2OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlldiA9IHRiW1dNSV9UTFZfVEFHX1NUUlVDVF9TVEFUU19FVkVOVF07CisJZGF0YSA9IHRiW1dNSV9UTFZfVEFHX0FSUkFZX0JZVEVdOworCisJaWYgKCFldiB8fCAhZGF0YSkgeworCQlrZnJlZSh0Yik7CisJCXJldHVybiAtRVBST1RPOworCX0KKworCWRhdGFfbGVuID0gYXRoMTBrX3dtaV90bHZfbGVuKGRhdGEpOworCW51bV9wZGV2X3N0YXRzID0gX19sZTMyX3RvX2NwdShldi0+bnVtX3BkZXZfc3RhdHMpOworCW51bV92ZGV2X3N0YXRzID0gX19sZTMyX3RvX2NwdShldi0+bnVtX3ZkZXZfc3RhdHMpOworCW51bV9wZWVyX3N0YXRzID0gX19sZTMyX3RvX2NwdShldi0+bnVtX3BlZXJfc3RhdHMpOworCisJV0FSTl9PTigxKTsgLyogRklYTUU6IG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KKworCWtmcmVlKHRiKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl9wZGV2X3N1c3BlbmQoc3RydWN0IGF0aDEwayAqYXIsIHUzMiBvcHQpCit7CisJc3RydWN0IHdtaV90bHZfcGRldl9zdXNwZW5kICpjbWQ7CisJc3RydWN0IHdtaV90bHYgKnRsdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVvZigqdGx2KSArIHNpemVvZigqY21kKSk7CisJaWYgKCFza2IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJdGx2ID0gKHZvaWQgKilza2ItPmRhdGE7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9QREVWX1NVU1BFTkRfQ01EKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQgPSAodm9pZCAqKXRsdi0+dmFsdWU7CisJY21kLT5vcHQgPSBfX2NwdV90b19sZTMyKG9wdCk7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgcGRldiBzdXNwZW5kXG4iKTsKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3BkZXZfcmVzdW1lKHN0cnVjdCBhdGgxMGsgKmFyKQoreworCXN0cnVjdCB3bWlfdGx2X3Jlc3VtZV9jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl0bHYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX1BERVZfUkVTVU1FX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+cmVzZXJ2ZWQgPSBfX2NwdV90b19sZTMyKDApOworCisJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJ3bWkgdGx2IHBkZXYgcmVzdW1lXG4iKTsKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3BkZXZfc2V0X3JkKHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCSAgdTE2IHJkLCB1MTYgcmQyZywgdTE2IHJkNWcsCisJCQkJICB1MTYgY3RsMmcsIHUxNiBjdGw1ZywKKwkJCQkgIGVudW0gd21pX2Rmc19yZWdpb24gZGZzX3JlZykKK3sKKwlzdHJ1Y3Qgd21pX3Rsdl9wZGV2X3NldF9yZF9jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl0bHYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX1BERVZfU0VUX1JFR0RPTUFJTl9DTUQpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZCA9ICh2b2lkICopdGx2LT52YWx1ZTsKKwljbWQtPnJlZ2QgPSBfX2NwdV90b19sZTMyKHJkKTsKKwljbWQtPnJlZ2RfMmdoeiA9IF9fY3B1X3RvX2xlMzIocmQyZyk7CisJY21kLT5yZWdkXzVnaHogPSBfX2NwdV90b19sZTMyKHJkNWcpOworCWNtZC0+Y29uZm9ybV9saW1pdF8yZ2h6ID0gX19jcHVfdG9fbGUzMihyZDJnKTsKKwljbWQtPmNvbmZvcm1fbGltaXRfNWdoeiA9IF9fY3B1X3RvX2xlMzIocmQ1Zyk7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgcGRldiBzZXQgcmRcbiIpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX3Rsdl9vcF9nZW5fcGRldl9zZXRfcGFyYW0oc3RydWN0IGF0aDEwayAqYXIsIHUzMiBwYXJhbV9pZCwKKwkJCQkgICAgIHUzMiBwYXJhbV92YWx1ZSkKK3sKKwlzdHJ1Y3Qgd21pX3Rsdl9wZGV2X3NldF9wYXJhbV9jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl0bHYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX1BERVZfU0VUX1BBUkFNX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+cGFyYW1faWQgPSBfX2NwdV90b19sZTMyKHBhcmFtX2lkKTsKKwljbWQtPnBhcmFtX3ZhbHVlID0gX19jcHVfdG9fbGUzMihwYXJhbV92YWx1ZSk7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgcGRldiBzZXQgcGFyYW1cbiIpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXRoMTBrX3dtaV90bHZfb3BfZ2VuX2luaXQoc3RydWN0IGF0aDEwayAqYXIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCB3bWlfdGx2X2luaXRfY21kICpjbWQ7CisJc3RydWN0IHdtaV90bHZfcmVzb3VyY2VfY29uZmlnICpjZmc7CisJc3RydWN0IHdtaV9ob3N0X21lbV9jaHVua3MgKmNodW5rczsKKwlzaXplX3QgbGVuLCBjaHVua3NfbGVuOworCXZvaWQgKnB0cjsKKworCWNodW5rc19sZW4gPSBhci0+d21pLm51bV9tZW1fY2h1bmtzICogc2l6ZW9mKHN0cnVjdCBob3N0X21lbW9yeV9jaHVuayk7CisJbGVuID0gKHNpemVvZigqdGx2KSArIHNpemVvZigqY21kKSkgKworCSAgICAgIChzaXplb2YoKnRsdikgKyBzaXplb2YoKmNmZykpICsKKwkgICAgICAoc2l6ZW9mKCp0bHYpICsgY2h1bmtzX2xlbik7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgbGVuKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlwdHIgPSBza2ItPmRhdGE7CisKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9JTklUX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IHNpemVvZigqY21kKTsKKworCXRsdiA9IHB0cjsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX1JFU09VUkNFX0NPTkZJRyk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY2ZnKSk7CisJY2ZnID0gKHZvaWQgKil0bHYtPnZhbHVlOworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IHNpemVvZigqY2ZnKTsKKworCXRsdiA9IHB0cjsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfQVJSQVlfU1RSVUNUKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoY2h1bmtzX2xlbik7CisJY2h1bmtzID0gKHZvaWQgKil0bHYtPnZhbHVlOworCisJcHRyICs9IHNpemVvZigqdGx2KTsKKwlwdHIgKz0gY2h1bmtzX2xlbjsKKworCWNtZC0+YWJpLmFiaV92ZXIwID0gX19jcHVfdG9fbGUzMihXTUlfVExWX0FCSV9WRVIwKTsKKwljbWQtPmFiaS5hYmlfdmVyMSA9IF9fY3B1X3RvX2xlMzIoV01JX1RMVl9BQklfVkVSMSk7CisJY21kLT5hYmkuYWJpX3Zlcl9uczAgPSBfX2NwdV90b19sZTMyKFdNSV9UTFZfQUJJX1ZFUl9OUzApOworCWNtZC0+YWJpLmFiaV92ZXJfbnMxID0gX19jcHVfdG9fbGUzMihXTUlfVExWX0FCSV9WRVJfTlMxKTsKKwljbWQtPmFiaS5hYmlfdmVyX25zMiA9IF9fY3B1X3RvX2xlMzIoV01JX1RMVl9BQklfVkVSX05TMik7CisJY21kLT5hYmkuYWJpX3Zlcl9uczMgPSBfX2NwdV90b19sZTMyKFdNSV9UTFZfQUJJX1ZFUl9OUzMpOworCWNtZC0+bnVtX2hvc3RfbWVtX2NodW5rcyA9IF9fY3B1X3RvX2xlMzIoYXItPndtaS5udW1fbWVtX2NodW5rcyk7CisKKwljZmctPm51bV92ZGV2cyA9IF9fY3B1X3RvX2xlMzIoVEFSR0VUX1RMVl9OVU1fVkRFVlMpOworCWNmZy0+bnVtX3BlZXJzID0gX19jcHVfdG9fbGUzMihUQVJHRVRfVExWX05VTV9QRUVSUyk7CisKKwlpZiAodGVzdF9iaXQoV01JX1NFUlZJQ0VfUlhfRlVMTF9SRU9SREVSLCBhci0+d21pLnN2Y19tYXApKSB7CisJCWNmZy0+bnVtX29mZmxvYWRfcGVlcnMgPSBfX2NwdV90b19sZTMyKDMpOworCQljZmctPm51bV9vZmZsb2FkX3Jlb3JkZXJfYnVmcyA9IF9fY3B1X3RvX2xlMzIoMyk7CisJfSBlbHNlIHsKKwkJY2ZnLT5udW1fb2ZmbG9hZF9wZWVycyA9IF9fY3B1X3RvX2xlMzIoMCk7CisJCWNmZy0+bnVtX29mZmxvYWRfcmVvcmRlcl9idWZzID0gX19jcHVfdG9fbGUzMigwKTsKKwl9CisKKwljZmctPm51bV9wZWVyX2tleXMgPSBfX2NwdV90b19sZTMyKDIpOworCWNmZy0+bnVtX3RpZHMgPSBfX2NwdV90b19sZTMyKFRBUkdFVF9UTFZfTlVNX1RJRFMpOworCWNmZy0+YXN0X3NraWRfbGltaXQgPSBfX2NwdV90b19sZTMyKDB4MTApOworCWNmZy0+dHhfY2hhaW5fbWFzayA9IF9fY3B1X3RvX2xlMzIoMHg3KTsKKwljZmctPnJ4X2NoYWluX21hc2sgPSBfX2NwdV90b19sZTMyKDB4Nyk7CisJY2ZnLT5yeF90aW1lb3V0X3ByaVswXSA9IF9fY3B1X3RvX2xlMzIoMHg2NCk7CisJY2ZnLT5yeF90aW1lb3V0X3ByaVsxXSA9IF9fY3B1X3RvX2xlMzIoMHg2NCk7CisJY2ZnLT5yeF90aW1lb3V0X3ByaVsyXSA9IF9fY3B1X3RvX2xlMzIoMHg2NCk7CisJY2ZnLT5yeF90aW1lb3V0X3ByaVszXSA9IF9fY3B1X3RvX2xlMzIoMHgyOCk7CisJY2ZnLT5yeF9kZWNhcF9tb2RlID0gX19jcHVfdG9fbGUzMigxKTsKKwljZmctPnNjYW5fbWF4X3BlbmRpbmdfcmVxcyA9IF9fY3B1X3RvX2xlMzIoNCk7CisJY2ZnLT5ibWlzc19vZmZsb2FkX21heF92ZGV2ID0gX19jcHVfdG9fbGUzMigzKTsKKwljZmctPnJvYW1fb2ZmbG9hZF9tYXhfdmRldiA9IF9fY3B1X3RvX2xlMzIoMyk7CisJY2ZnLT5yb2FtX29mZmxvYWRfbWF4X2FwX3Byb2ZpbGVzID0gX19jcHVfdG9fbGUzMig4KTsKKwljZmctPm51bV9tY2FzdF9ncm91cHMgPSBfX2NwdV90b19sZTMyKDApOworCWNmZy0+bnVtX21jYXN0X3RhYmxlX2VsZW1zID0gX19jcHVfdG9fbGUzMigwKTsKKwljZmctPm1jYXN0MnVjYXN0X21vZGUgPSBfX2NwdV90b19sZTMyKDApOworCWNmZy0+dHhfZGJnX2xvZ19zaXplID0gX19jcHVfdG9fbGUzMigweDQwMCk7CisJY2ZnLT5udW1fd2RzX2VudHJpZXMgPSBfX2NwdV90b19sZTMyKDB4MjApOworCWNmZy0+ZG1hX2J1cnN0X3NpemUgPSBfX2NwdV90b19sZTMyKDApOworCWNmZy0+bWFjX2FnZ3JfZGVsaW0gPSBfX2NwdV90b19sZTMyKDApOworCWNmZy0+cnhfc2tpcF9kZWZyYWdfdGltZW91dF9kdXBfZGV0ZWN0aW9uX2NoZWNrID0gX19jcHVfdG9fbGUzMigwKTsKKwljZmctPnZvd19jb25maWcgPSBfX2NwdV90b19sZTMyKDApOworCWNmZy0+Z3RrX29mZmxvYWRfbWF4X3ZkZXYgPSBfX2NwdV90b19sZTMyKDIpOworCWNmZy0+bnVtX21zZHVfZGVzYyA9IF9fY3B1X3RvX2xlMzIoVEFSR0VUX1RMVl9OVU1fTVNEVV9ERVNDKTsKKwljZmctPm1heF9mcmFnX2VudHJpZXMgPSBfX2NwdV90b19sZTMyKDIpOworCWNmZy0+bnVtX3RkbHNfdmRldnMgPSBfX2NwdV90b19sZTMyKDEpOworCWNmZy0+bnVtX3RkbHNfY29ubl90YWJsZV9lbnRyaWVzID0gX19jcHVfdG9fbGUzMigweDIwKTsKKwljZmctPmJlYWNvbl90eF9vZmZsb2FkX21heF92ZGV2ID0gX19jcHVfdG9fbGUzMigyKTsKKwljZmctPm51bV9tdWx0aWNhc3RfZmlsdGVyX2VudHJpZXMgPSBfX2NwdV90b19sZTMyKDUpOworCWNmZy0+bnVtX3dvd19maWx0ZXJzID0gX19jcHVfdG9fbGUzMigweDE2KTsKKwljZmctPm51bV9rZWVwX2FsaXZlX3BhdHRlcm4gPSBfX2NwdV90b19sZTMyKDYpOworCWNmZy0+a2VlcF9hbGl2ZV9wYXR0ZXJuX3NpemUgPSBfX2NwdV90b19sZTMyKDApOworCWNmZy0+bWF4X3RkbHNfY29uY3VycmVudF9zbGVlcF9zdGEgPSBfX2NwdV90b19sZTMyKDEpOworCWNmZy0+bWF4X3RkbHNfY29uY3VycmVudF9idWZmZXJfc3RhID0gX19jcHVfdG9fbGUzMigxKTsKKworCWF0aDEwa193bWlfcHV0X2hvc3RfbWVtX2NodW5rcyhhciwgY2h1bmtzKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIHRsdiBpbml0XG4iKTsKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3N0YXJ0X3NjYW4oc3RydWN0IGF0aDEwayAqYXIsCisJCQkJIGNvbnN0IHN0cnVjdCB3bWlfc3RhcnRfc2Nhbl9hcmcgKmFyZykKK3sKKwlzdHJ1Y3Qgd21pX3Rsdl9zdGFydF9zY2FuX2NtZCAqY21kOworCXN0cnVjdCB3bWlfdGx2ICp0bHY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzaXplX3QgbGVuLCBjaGFuX2xlbiwgc3NpZF9sZW4sIGJzc2lkX2xlbiwgaWVfbGVuOworCV9fbGUzMiAqY2hhbnM7CisJc3RydWN0IHdtaV9zc2lkICpzc2lkczsKKwlzdHJ1Y3Qgd21pX21hY19hZGRyICphZGRyczsKKwl2b2lkICpwdHI7CisJaW50IGksIHJldDsKKworCXJldCA9IGF0aDEwa193bWlfc3RhcnRfc2Nhbl92ZXJpZnkoYXJnKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJY2hhbl9sZW4gPSBhcmctPm5fY2hhbm5lbHMgKiBzaXplb2YoX19sZTMyKTsKKwlzc2lkX2xlbiA9IGFyZy0+bl9zc2lkcyAqIHNpemVvZihzdHJ1Y3Qgd21pX3NzaWQpOworCWJzc2lkX2xlbiA9IGFyZy0+bl9ic3NpZHMgKiBzaXplb2Yoc3RydWN0IHdtaV9tYWNfYWRkcik7CisJaWVfbGVuID0gcm91bmR1cChhcmctPmllX2xlbiwgNCk7CisJbGVuID0gKHNpemVvZigqdGx2KSArIHNpemVvZigqY21kKSkgKworCSAgICAgIChhcmctPm5fY2hhbm5lbHMgPyBzaXplb2YoKnRsdikgKyBjaGFuX2xlbiA6IDApICsKKwkgICAgICAoYXJnLT5uX3NzaWRzID8gc2l6ZW9mKCp0bHYpICsgc3NpZF9sZW4gOiAwKSArCisJICAgICAgKGFyZy0+bl9ic3NpZHMgPyBzaXplb2YoKnRsdikgKyBic3NpZF9sZW4gOiAwKSArCisJICAgICAgKGFyZy0+aWVfbGVuID8gc2l6ZW9mKCp0bHYpICsgaWVfbGVuIDogMCk7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgbGVuKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlwdHIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9TVEFSVF9TQ0FOX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCisJYXRoMTBrX3dtaV9wdXRfc3RhcnRfc2Nhbl9jb21tb24oJmNtZC0+Y29tbW9uLCBhcmcpOworCWNtZC0+YnVyc3RfZHVyYXRpb25fbXMgPSBfX2NwdV90b19sZTMyKDApOworCWNtZC0+bnVtX2NoYW5uZWxzID0gX19jcHVfdG9fbGUzMihhcmctPm5fY2hhbm5lbHMpOworCWNtZC0+bnVtX3NzaWRzID0gX19jcHVfdG9fbGUzMihhcmctPm5fc3NpZHMpOworCWNtZC0+bnVtX2Jzc2lkcyA9IF9fY3B1X3RvX2xlMzIoYXJnLT5uX2Jzc2lkcyk7CisJY21kLT5pZV9sZW4gPSBfX2NwdV90b19sZTMyKGFyZy0+aWVfbGVuKTsKKwljbWQtPm51bV9wcm9iZXMgPSBfX2NwdV90b19sZTMyKDMpOworCisJLyogRklYTUU6IFRoZXJlIGFyZSBzb21lIHNjYW4gZmxhZyBpbmNvbnNpc3RlbmNpZXMgYWNyb3NzIGZpcm13YXJlcywKKwkgKiBlLmcuIFdNSS1UTFYgaW52ZXJ0cyB0aGUgbG9naWMgYmVoaW5kIHRoZSBmb2xsb3dpbmcgZmxhZy4KKwkgKi8KKwljbWQtPmNvbW1vbi5zY2FuX2N0cmxfZmxhZ3MgXj0gX19jcHVfdG9fbGUzMihXTUlfU0NBTl9GSUxURVJfUFJPQkVfUkVRKTsKKworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IHNpemVvZigqY21kKTsKKworCXRsdiA9IHB0cjsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfQVJSQVlfVUlOVDMyKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoY2hhbl9sZW4pOworCWNoYW5zID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWZvciAoaSA9IDA7IGkgPCBhcmctPm5fY2hhbm5lbHM7IGkrKykKKwkJY2hhbnNbaV0gPSBfX2NwdV90b19sZTMyKGFyZy0+Y2hhbm5lbHNbaV0pOworCisJcHRyICs9IHNpemVvZigqdGx2KTsKKwlwdHIgKz0gY2hhbl9sZW47CisKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX0FSUkFZX0ZJWEVEX1NUUlVDVCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNzaWRfbGVuKTsKKwlzc2lkcyA9ICh2b2lkICopdGx2LT52YWx1ZTsKKwlmb3IgKGkgPSAwOyBpIDwgYXJnLT5uX3NzaWRzOyBpKyspIHsKKwkJc3NpZHNbaV0uc3NpZF9sZW4gPSBfX2NwdV90b19sZTMyKGFyZy0+c3NpZHNbaV0ubGVuKTsKKwkJbWVtY3B5KHNzaWRzW2ldLnNzaWQsIGFyZy0+c3NpZHNbaV0uc3NpZCwgYXJnLT5zc2lkc1tpXS5sZW4pOworCX0KKworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IHNzaWRfbGVuOworCisJdGx2ID0gcHRyOworCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19BUlJBWV9GSVhFRF9TVFJVQ1QpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihic3NpZF9sZW4pOworCWFkZHJzID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWZvciAoaSA9IDA7IGkgPCBhcmctPm5fYnNzaWRzOyBpKyspCisJCWV0aGVyX2FkZHJfY29weShhZGRyc1tpXS5hZGRyLCBhcmctPmJzc2lkc1tpXS5ic3NpZCk7CisKKwlwdHIgKz0gc2l6ZW9mKCp0bHYpOworCXB0ciArPSBic3NpZF9sZW47CisKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX0FSUkFZX0JZVEUpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihpZV9sZW4pOworCW1lbWNweSh0bHYtPnZhbHVlLCBhcmctPmllLCBhcmctPmllX2xlbik7CisKKwlwdHIgKz0gc2l6ZW9mKCp0bHYpOworCXB0ciArPSBpZV9sZW47CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgc3RhcnQgc2NhblxuIik7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl9zdG9wX3NjYW4oc3RydWN0IGF0aDEwayAqYXIsCisJCQkJY29uc3Qgc3RydWN0IHdtaV9zdG9wX3NjYW5fYXJnICphcmcpCit7CisJc3RydWN0IHdtaV9zdG9wX3NjYW5fY21kICpjbWQ7CisJc3RydWN0IHdtaV90bHYgKnRsdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUzMiBzY2FuX2lkOworCXUzMiByZXFfaWQ7CisKKwlpZiAoYXJnLT5yZXFfaWQgPiAweEZGRikKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKGFyZy0+cmVxX3R5cGUgPT0gV01JX1NDQU5fU1RPUF9PTkUgJiYgYXJnLT51LnNjYW5faWQgPiAweEZGRikKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlzY2FuX2lkID0gYXJnLT51LnNjYW5faWQ7CisJc2Nhbl9pZCB8PSBXTUlfSE9TVF9TQ0FOX1JFUV9JRF9QUkVGSVg7CisKKwlyZXFfaWQgPSBhcmctPnJlcV9pZDsKKwlyZXFfaWQgfD0gV01JX0hPU1RfU0NBTl9SRVFVRVNUT1JfSURfUFJFRklYOworCisJdGx2ID0gKHZvaWQgKilza2ItPmRhdGE7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9TVE9QX1NDQU5fQ01EKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQgPSAodm9pZCAqKXRsdi0+dmFsdWU7CisJY21kLT5yZXFfdHlwZSA9IF9fY3B1X3RvX2xlMzIoYXJnLT5yZXFfdHlwZSk7CisJY21kLT52ZGV2X2lkID0gX19jcHVfdG9fbGUzMihhcmctPnUudmRldl9pZCk7CisJY21kLT5zY2FuX2lkID0gX19jcHVfdG9fbGUzMihzY2FuX2lkKTsKKwljbWQtPnNjYW5fcmVxX2lkID0gX19jcHVfdG9fbGUzMihyZXFfaWQpOworCisJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJ3bWkgdGx2IHN0b3Agc2NhblxuIik7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl92ZGV2X2NyZWF0ZShzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkgIHUzMiB2ZGV2X2lkLAorCQkJCSAgZW51bSB3bWlfdmRldl90eXBlIHZkZXZfdHlwZSwKKwkJCQkgIGVudW0gd21pX3ZkZXZfc3VidHlwZSB2ZGV2X3N1YnR5cGUsCisJCQkJICBjb25zdCB1OCBtYWNfYWRkcltFVEhfQUxFTl0pCit7CisJc3RydWN0IHdtaV92ZGV2X2NyZWF0ZV9jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl0bHYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX1ZERVZfQ1JFQVRFX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CisJY21kLT52ZGV2X3R5cGUgPSBfX2NwdV90b19sZTMyKHZkZXZfdHlwZSk7CisJY21kLT52ZGV2X3N1YnR5cGUgPSBfX2NwdV90b19sZTMyKHZkZXZfc3VidHlwZSk7CisJZXRoZXJfYWRkcl9jb3B5KGNtZC0+dmRldl9tYWNhZGRyLmFkZHIsIG1hY19hZGRyKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIHRsdiB2ZGV2IGNyZWF0ZVxuIik7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl92ZGV2X2RlbGV0ZShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQpCit7CisJc3RydWN0IHdtaV92ZGV2X2RlbGV0ZV9jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl0bHYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX1ZERVZfREVMRVRFX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgdmRldiBkZWxldGVcbiIpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX3Rsdl9vcF9nZW5fdmRldl9zdGFydChzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkgY29uc3Qgc3RydWN0IHdtaV92ZGV2X3N0YXJ0X3JlcXVlc3RfYXJnICphcmcsCisJCQkJIGJvb2wgcmVzdGFydCkKK3sKKwlzdHJ1Y3Qgd21pX3Rsdl92ZGV2X3N0YXJ0X2NtZCAqY21kOworCXN0cnVjdCB3bWlfY2hhbm5lbCAqY2g7CisJc3RydWN0IHdtaV9wMnBfbm9hX2Rlc2NyaXB0b3IgKm5vYTsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCBza19idWZmICpza2I7CisJc2l6ZV90IGxlbjsKKwl2b2lkICpwdHI7CisJdTMyIGZsYWdzID0gMDsKKworCWlmIChXQVJOX09OKGFyZy0+c3NpZCAmJiBhcmctPnNzaWRfbGVuID09IDApKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwlpZiAoV0FSTl9PTihhcmctPmhpZGRlbl9zc2lkICYmICFhcmctPnNzaWQpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwlpZiAoV0FSTl9PTihhcmctPnNzaWRfbGVuID4gc2l6ZW9mKGNtZC0+c3NpZC5zc2lkKSkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJbGVuID0gKHNpemVvZigqdGx2KSArIHNpemVvZigqY21kKSkgKworCSAgICAgIChzaXplb2YoKnRsdikgKyBzaXplb2YoKmNoKSkgKworCSAgICAgIChzaXplb2YoKnRsdikgKyAwKTsKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgbGVuKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlpZiAoYXJnLT5oaWRkZW5fc3NpZCkKKwkJZmxhZ3MgfD0gV01JX1ZERVZfU1RBUlRfSElEREVOX1NTSUQ7CisJaWYgKGFyZy0+cG1mX2VuYWJsZWQpCisJCWZsYWdzIHw9IFdNSV9WREVWX1NUQVJUX1BNRl9FTkFCTEVEOworCisJcHRyID0gKHZvaWQgKilza2ItPmRhdGE7CisKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9WREVWX1NUQVJUX1JFUVVFU1RfQ01EKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQgPSAodm9pZCAqKXRsdi0+dmFsdWU7CisJY21kLT52ZGV2X2lkID0gX19jcHVfdG9fbGUzMihhcmctPnZkZXZfaWQpOworCWNtZC0+YmNuX2ludHZhbCA9IF9fY3B1X3RvX2xlMzIoYXJnLT5iY25faW50dmFsKTsKKwljbWQtPmR0aW1fcGVyaW9kID0gX19jcHVfdG9fbGUzMihhcmctPmR0aW1fcGVyaW9kKTsKKwljbWQtPmZsYWdzID0gX19jcHVfdG9fbGUzMihmbGFncyk7CisJY21kLT5iY25fdHhfcmF0ZSA9IF9fY3B1X3RvX2xlMzIoYXJnLT5iY25fdHhfcmF0ZSk7CisJY21kLT5iY25fdHhfcG93ZXIgPSBfX2NwdV90b19sZTMyKGFyZy0+YmNuX3R4X3Bvd2VyKTsKKwljbWQtPmRpc2FibGVfaHdfYWNrID0gX19jcHVfdG9fbGUzMihhcmctPmRpc2FibGVfaHdfYWNrKTsKKworCWlmIChhcmctPnNzaWQpIHsKKwkJY21kLT5zc2lkLnNzaWRfbGVuID0gX19jcHVfdG9fbGUzMihhcmctPnNzaWRfbGVuKTsKKwkJbWVtY3B5KGNtZC0+c3NpZC5zc2lkLCBhcmctPnNzaWQsIGFyZy0+c3NpZF9sZW4pOworCX0KKworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IHNpemVvZigqY21kKTsKKworCXRsdiA9IHB0cjsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX0NIQU5ORUwpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihzaXplb2YoKmNoKSk7CisJY2ggPSAodm9pZCAqKXRsdi0+dmFsdWU7CisJYXRoMTBrX3dtaV9wdXRfd21pX2NoYW5uZWwoY2gsICZhcmctPmNoYW5uZWwpOworCisJcHRyICs9IHNpemVvZigqdGx2KTsKKwlwdHIgKz0gc2l6ZW9mKCpjaCk7CisKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX0FSUkFZX1NUUlVDVCk7CisJdGx2LT5sZW4gPSAwOworCW5vYSA9ICh2b2lkICopdGx2LT52YWx1ZTsKKworCS8qIE5vdGU6IFRoaXMgaXMgYSBuZXN0ZWQgVExWIGNvbnRhaW5pbmc6CisJICogW3dtaV90bHZdW3dtaV9wMnBfbm9hX2Rlc2NyaXB0b3JdW3dtaV90bHZdLi4KKwkgKi8KKworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IDA7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgdmRldiBzdGFydFxuIik7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl92ZGV2X3N0b3Aoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkKQoreworCXN0cnVjdCB3bWlfdmRldl9zdG9wX2NtZCAqY21kOworCXN0cnVjdCB3bWlfdGx2ICp0bHY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKnRsdikgKyBzaXplb2YoKmNtZCkpOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXRsdiA9ICh2b2lkICopc2tiLT5kYXRhOworCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9TVE9QX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgdmRldiBzdG9wXG4iKTsKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3ZkZXZfdXAoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLCB1MzIgYWlkLAorCQkJICAgICAgY29uc3QgdTggKmJzc2lkKQorCit7CisJc3RydWN0IHdtaV92ZGV2X3VwX2NtZCAqY21kOworCXN0cnVjdCB3bWlfdGx2ICp0bHY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKnRsdikgKyBzaXplb2YoKmNtZCkpOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXRsdiA9ICh2b2lkICopc2tiLT5kYXRhOworCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9VUF9DTUQpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZCA9ICh2b2lkICopdGx2LT52YWx1ZTsKKwljbWQtPnZkZXZfaWQgPSBfX2NwdV90b19sZTMyKHZkZXZfaWQpOworCWNtZC0+dmRldl9hc3NvY19pZCA9IF9fY3B1X3RvX2xlMzIoYWlkKTsKKwlldGhlcl9hZGRyX2NvcHkoY21kLT52ZGV2X2Jzc2lkLmFkZHIsIGJzc2lkKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIHRsdiB2ZGV2IHVwXG4iKTsKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3ZkZXZfZG93bihzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQpCit7CisJc3RydWN0IHdtaV92ZGV2X2Rvd25fY21kICpjbWQ7CisJc3RydWN0IHdtaV90bHYgKnRsdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVvZigqdGx2KSArIHNpemVvZigqY21kKSk7CisJaWYgKCFza2IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJdGx2ID0gKHZvaWQgKilza2ItPmRhdGE7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9WREVWX0RPV05fQ01EKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQgPSAodm9pZCAqKXRsdi0+dmFsdWU7CisJY21kLT52ZGV2X2lkID0gX19jcHVfdG9fbGUzMih2ZGV2X2lkKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIHRsdiB2ZGV2IGRvd25cbiIpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX3Rsdl9vcF9nZW5fdmRldl9zZXRfcGFyYW0oc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJCSAgICAgdTMyIHBhcmFtX2lkLCB1MzIgcGFyYW1fdmFsdWUpCit7CisJc3RydWN0IHdtaV92ZGV2X3NldF9wYXJhbV9jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl0bHYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX1ZERVZfU0VUX1BBUkFNX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CisJY21kLT5wYXJhbV9pZCA9IF9fY3B1X3RvX2xlMzIocGFyYW1faWQpOworCWNtZC0+cGFyYW1fdmFsdWUgPSBfX2NwdV90b19sZTMyKHBhcmFtX3ZhbHVlKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIHRsdiB2ZGV2IHNldCBwYXJhbVxuIik7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl92ZGV2X2luc3RhbGxfa2V5KHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgd21pX3ZkZXZfaW5zdGFsbF9rZXlfYXJnICphcmcpCit7CisJc3RydWN0IHdtaV92ZGV2X2luc3RhbGxfa2V5X2NtZCAqY21kOworCXN0cnVjdCB3bWlfdGx2ICp0bHY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzaXplX3QgbGVuOworCXZvaWQgKnB0cjsKKworCWlmIChhcmctPmtleV9jaXBoZXIgPT0gV01JX0NJUEhFUl9OT05FICYmIGFyZy0+a2V5X2RhdGEgIT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKGFyZy0+a2V5X2NpcGhlciAhPSBXTUlfQ0lQSEVSX05PTkUgJiYgYXJnLT5rZXlfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWxlbiA9IHNpemVvZigqdGx2KSArIHNpemVvZigqY21kKSArCisJICAgICAgc2l6ZW9mKCp0bHYpICsgcm91bmR1cChhcmctPmtleV9sZW4sIHNpemVvZihfX2xlMzIpKTsKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgbGVuKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlwdHIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9WREVWX0lOU1RBTExfS0VZX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIoYXJnLT52ZGV2X2lkKTsKKwljbWQtPmtleV9pZHggPSBfX2NwdV90b19sZTMyKGFyZy0+a2V5X2lkeCk7CisJY21kLT5rZXlfZmxhZ3MgPSBfX2NwdV90b19sZTMyKGFyZy0+a2V5X2ZsYWdzKTsKKwljbWQtPmtleV9jaXBoZXIgPSBfX2NwdV90b19sZTMyKGFyZy0+a2V5X2NpcGhlcik7CisJY21kLT5rZXlfbGVuID0gX19jcHVfdG9fbGUzMihhcmctPmtleV9sZW4pOworCWNtZC0+a2V5X3R4bWljX2xlbiA9IF9fY3B1X3RvX2xlMzIoYXJnLT5rZXlfdHhtaWNfbGVuKTsKKwljbWQtPmtleV9yeG1pY19sZW4gPSBfX2NwdV90b19sZTMyKGFyZy0+a2V5X3J4bWljX2xlbik7CisKKwlpZiAoYXJnLT5tYWNhZGRyKQorCQlldGhlcl9hZGRyX2NvcHkoY21kLT5wZWVyX21hY2FkZHIuYWRkciwgYXJnLT5tYWNhZGRyKTsKKworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IHNpemVvZigqY21kKTsKKworCXRsdiA9IHB0cjsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfQVJSQVlfQllURSk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHJvdW5kdXAoYXJnLT5rZXlfbGVuLCBzaXplb2YoX19sZTMyKSkpOworCWlmIChhcmctPmtleV9kYXRhKQorCQltZW1jcHkodGx2LT52YWx1ZSwgYXJnLT5rZXlfZGF0YSwgYXJnLT5rZXlfbGVuKTsKKworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IHJvdW5kdXAoYXJnLT5rZXlfbGVuLCBzaXplb2YoX19sZTMyKSk7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgdmRldiBpbnN0YWxsIGtleVxuIik7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHZvaWQgKmF0aDEwa193bWlfdGx2X3B1dF91YXBzZF9hYyhzdHJ1Y3QgYXRoMTBrICphciwgdm9pZCAqcHRyLAorCQkJCQkgY29uc3Qgc3RydWN0IHdtaV9zdGFfdWFwc2RfYXV0b190cmlnX2FyZyAqYXJnKQoreworCXN0cnVjdCB3bWlfc3RhX3VhcHNkX2F1dG9fdHJpZ19wYXJhbSAqYWM7CisJc3RydWN0IHdtaV90bHYgKnRsdjsKKworCXRsdiA9IHB0cjsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX1NUQV9VQVBTRF9BVVRPX1RSSUdfUEFSQU0pOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihzaXplb2YoKmFjKSk7CisJYWMgPSAodm9pZCAqKXRsdi0+dmFsdWU7CisKKwlhYy0+d21tX2FjID0gX19jcHVfdG9fbGUzMihhcmctPndtbV9hYyk7CisJYWMtPnVzZXJfcHJpb3JpdHkgPSBfX2NwdV90b19sZTMyKGFyZy0+dXNlcl9wcmlvcml0eSk7CisJYWMtPnNlcnZpY2VfaW50ZXJ2YWwgPSBfX2NwdV90b19sZTMyKGFyZy0+c2VydmljZV9pbnRlcnZhbCk7CisJYWMtPnN1c3BlbmRfaW50ZXJ2YWwgPSBfX2NwdV90b19sZTMyKGFyZy0+c3VzcGVuZF9pbnRlcnZhbCk7CisJYWMtPmRlbGF5X2ludGVydmFsID0gX19jcHVfdG9fbGUzMihhcmctPmRlbGF5X2ludGVydmFsKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLAorCQkgICAid21pIHRsdiB2ZGV2IHN0YSB1YXBzZCBhdXRvIHRyaWdnZXIgYWMgJWQgcHJpbyAlZCBzdmMgaW50ICVkIHN1c3AgaW50ICVkIGRlbGF5IGludCAlZFxuIiwKKwkJICAgYWMtPndtbV9hYywgYWMtPnVzZXJfcHJpb3JpdHksIGFjLT5zZXJ2aWNlX2ludGVydmFsLAorCQkgICBhYy0+c3VzcGVuZF9pbnRlcnZhbCwgYWMtPmRlbGF5X2ludGVydmFsKTsKKworCXJldHVybiBwdHIgKyBzaXplb2YoKnRsdikgKyBzaXplb2YoKmFjKTsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl92ZGV2X3N0YV91YXBzZChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkJICAgICBjb25zdCB1OCBwZWVyX2FkZHJbRVRIX0FMRU5dLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHdtaV9zdGFfdWFwc2RfYXV0b190cmlnX2FyZyAqYXJncywKKwkJCQkgICAgIHUzMiBudW1fYWMpCit7CisJc3RydWN0IHdtaV9zdGFfdWFwc2RfYXV0b190cmlnX2NtZF9maXhlZF9wYXJhbSAqY21kOworCXN0cnVjdCB3bWlfc3RhX3VhcHNkX2F1dG9fdHJpZ19wYXJhbSAqYWM7CisJc3RydWN0IHdtaV90bHYgKnRsdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXNpemVfdCBsZW47CisJc2l6ZV90IGFjX3Rsdl9sZW47CisJdm9pZCAqcHRyOworCWludCBpOworCisJYWNfdGx2X2xlbiA9IG51bV9hYyAqIChzaXplb2YoKnRsdikgKyBzaXplb2YoKmFjKSk7CisJbGVuID0gc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpICsKKwkgICAgICBzaXplb2YoKnRsdikgKyBhY190bHZfbGVuOworCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBsZW4pOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXB0ciA9ICh2b2lkICopc2tiLT5kYXRhOworCXRsdiA9IHB0cjsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX1NUQV9VQVBTRF9BVVRPX1RSSUdfQ01EKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQgPSAodm9pZCAqKXRsdi0+dmFsdWU7CisJY21kLT52ZGV2X2lkID0gX19jcHVfdG9fbGUzMih2ZGV2X2lkKTsKKwljbWQtPm51bV9hYyA9IF9fY3B1X3RvX2xlMzIobnVtX2FjKTsKKwlldGhlcl9hZGRyX2NvcHkoY21kLT5wZWVyX21hY2FkZHIuYWRkciwgcGVlcl9hZGRyKTsKKworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IHNpemVvZigqY21kKTsKKworCXRsdiA9IHB0cjsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfQVJSQVlfU1RSVUNUKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoYWNfdGx2X2xlbik7CisJYWMgPSAodm9pZCAqKXRsdi0+dmFsdWU7CisKKwlwdHIgKz0gc2l6ZW9mKCp0bHYpOworCWZvciAoaSA9IDA7IGkgPCBudW1fYWM7IGkrKykKKwkJcHRyID0gYXRoMTBrX3dtaV90bHZfcHV0X3VhcHNkX2FjKGFyLCBwdHIsICZhcmdzW2ldKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIHRsdiB2ZGV2IHN0YSB1YXBzZCBhdXRvIHRyaWdnZXJcbiIpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyB2b2lkICphdGgxMGtfd21pX3Rsdl9wdXRfd21tKHZvaWQgKnB0ciwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHdtaV93bW1fcGFyYW1zX2FyZyAqYXJnKQoreworCXN0cnVjdCB3bWlfd21tX3BhcmFtcyAqd21tOworCXN0cnVjdCB3bWlfdGx2ICp0bHY7CisKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9XTU1fUEFSQU1TKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoc2l6ZW9mKCp3bW0pKTsKKwl3bW0gPSAodm9pZCAqKXRsdi0+dmFsdWU7CisJYXRoMTBrX3dtaV9zZXRfd21tX3BhcmFtKHdtbSwgYXJnKTsKKworCXJldHVybiBwdHIgKyBzaXplb2YoKnRsdikgKyBzaXplb2YoKndtbSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX3Rsdl9vcF9nZW5fdmRldl93bW1fY29uZihzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkJICAgIGNvbnN0IHN0cnVjdCB3bWlfd21tX3BhcmFtc19hbGxfYXJnICphcmcpCit7CisJc3RydWN0IHdtaV90bHZfdmRldl9zZXRfd21tX2NtZCAqY21kOworCXN0cnVjdCB3bWlfd21tX3BhcmFtcyAqd21tOworCXN0cnVjdCB3bWlfdGx2ICp0bHY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzaXplX3QgbGVuOworCXZvaWQgKnB0cjsKKworCWxlbiA9IChzaXplb2YoKnRsdikgKyBzaXplb2YoKmNtZCkpICsKKwkgICAgICAoNCAqIChzaXplb2YoKnRsdikgKyBzaXplb2YoKndtbSkpKTsKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgbGVuKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlwdHIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9WREVWX1NFVF9XTU1fUEFSQU1TX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CisKKwlwdHIgKz0gc2l6ZW9mKCp0bHYpOworCXB0ciArPSBzaXplb2YoKmNtZCk7CisKKwlwdHIgPSBhdGgxMGtfd21pX3Rsdl9wdXRfd21tKHB0ciwgJmFyZy0+YWNfYmUpOworCXB0ciA9IGF0aDEwa193bWlfdGx2X3B1dF93bW0ocHRyLCAmYXJnLT5hY19iayk7CisJcHRyID0gYXRoMTBrX3dtaV90bHZfcHV0X3dtbShwdHIsICZhcmctPmFjX3ZpKTsKKwlwdHIgPSBhdGgxMGtfd21pX3Rsdl9wdXRfd21tKHB0ciwgJmFyZy0+YWNfdm8pOworCisJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJ3bWkgdGx2IHZkZXYgd21tIGNvbmZcbiIpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX3Rsdl9vcF9nZW5fc3RhX2tlZXBhbGl2ZShzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHdtaV9zdGFfa2VlcGFsaXZlX2FyZyAqYXJnKQoreworCXN0cnVjdCB3bWlfdGx2X3N0YV9rZWVwYWxpdmVfY21kICpjbWQ7CisJc3RydWN0IHdtaV9zdGFfa2VlcGFsaXZlX2FycF9yZXNwICphcnA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXZvaWQgKnB0cjsKKwlzaXplX3QgbGVuOworCisJbGVuID0gc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpICsKKwkgICAgICBzaXplb2YoKnRsdikgKyBzaXplb2YoKmFycCk7CisJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIGxlbik7CisJaWYgKCFza2IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcHRyID0gKHZvaWQgKilza2ItPmRhdGE7CisJdGx2ID0gcHRyOworCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19TVFJVQ1RfU1RBX0tFRVBBTElWRV9DTUQpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZCA9ICh2b2lkICopdGx2LT52YWx1ZTsKKwljbWQtPnZkZXZfaWQgPSBfX2NwdV90b19sZTMyKGFyZy0+dmRldl9pZCk7CisJY21kLT5lbmFibGVkID0gX19jcHVfdG9fbGUzMihhcmctPmVuYWJsZWQpOworCWNtZC0+bWV0aG9kID0gX19jcHVfdG9fbGUzMihhcmctPm1ldGhvZCk7CisJY21kLT5pbnRlcnZhbCA9IF9fY3B1X3RvX2xlMzIoYXJnLT5pbnRlcnZhbCk7CisKKwlwdHIgKz0gc2l6ZW9mKCp0bHYpOworCXB0ciArPSBzaXplb2YoKmNtZCk7CisKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9TVEFfS0VFUEFMVkVfQVJQX1JFU1BPTlNFKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoc2l6ZW9mKCphcnApKTsKKwlhcnAgPSAodm9pZCAqKXRsdi0+dmFsdWU7CisKKwlhcnAtPnNyY19pcDRfYWRkciA9IGFyZy0+c3JjX2lwNF9hZGRyOworCWFycC0+ZGVzdF9pcDRfYWRkciA9IGFyZy0+ZGVzdF9pcDRfYWRkcjsKKwlldGhlcl9hZGRyX2NvcHkoYXJwLT5kZXN0X21hY19hZGRyLmFkZHIsIGFyZy0+ZGVzdF9tYWNfYWRkcik7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgc3RhIGtlZXBhbGl2ZSB2ZGV2ICVkIGVuYWJsZWQgJWQgbWV0aG9kICVkIGludmVydmFsICVkXG4iLAorCQkgICBhcmctPnZkZXZfaWQsIGFyZy0+ZW5hYmxlZCwgYXJnLT5tZXRob2QsIGFyZy0+aW50ZXJ2YWwpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX3Rsdl9vcF9nZW5fcGVlcl9jcmVhdGUoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJCSAgY29uc3QgdTggcGVlcl9hZGRyW0VUSF9BTEVOXSkKK3sKKwlzdHJ1Y3Qgd21pX3Rsdl9wZWVyX2NyZWF0ZV9jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl0bHYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX1BFRVJfQ1JFQVRFX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CisJY21kLT5wZWVyX3R5cGUgPSBfX2NwdV90b19sZTMyKFdNSV9UTFZfUEVFUl9UWVBFX0RFRkFVTFQpOyAvKiBGSVhNRSAqLworCWV0aGVyX2FkZHJfY29weShjbWQtPnBlZXJfYWRkci5hZGRyLCBwZWVyX2FkZHIpOworCisJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJ3bWkgdGx2IHBlZXIgY3JlYXRlXG4iKTsKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3BlZXJfZGVsZXRlKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCQkgIGNvbnN0IHU4IHBlZXJfYWRkcltFVEhfQUxFTl0pCit7CisJc3RydWN0IHdtaV9wZWVyX2RlbGV0ZV9jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl0bHYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX1BFRVJfREVMRVRFX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CisJZXRoZXJfYWRkcl9jb3B5KGNtZC0+cGVlcl9tYWNhZGRyLmFkZHIsIHBlZXJfYWRkcik7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgcGVlciBkZWxldGVcbiIpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX3Rsdl9vcF9nZW5fcGVlcl9mbHVzaChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkJIGNvbnN0IHU4IHBlZXJfYWRkcltFVEhfQUxFTl0sIHUzMiB0aWRfYml0bWFwKQoreworCXN0cnVjdCB3bWlfcGVlcl9mbHVzaF90aWRzX2NtZCAqY21kOworCXN0cnVjdCB3bWlfdGx2ICp0bHY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKnRsdikgKyBzaXplb2YoKmNtZCkpOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXRsdiA9ICh2b2lkICopc2tiLT5kYXRhOworCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19TVFJVQ1RfUEVFUl9GTFVTSF9USURTX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CisJY21kLT5wZWVyX3RpZF9iaXRtYXAgPSBfX2NwdV90b19sZTMyKHRpZF9iaXRtYXApOworCWV0aGVyX2FkZHJfY29weShjbWQtPnBlZXJfbWFjYWRkci5hZGRyLCBwZWVyX2FkZHIpOworCisJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJ3bWkgdGx2IHBlZXIgZmx1c2hcbiIpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX3Rsdl9vcF9nZW5fcGVlcl9zZXRfcGFyYW0oc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJCSAgICAgY29uc3QgdTggKnBlZXJfYWRkciwKKwkJCQkgICAgIGVudW0gd21pX3BlZXJfcGFyYW0gcGFyYW1faWQsCisJCQkJICAgICB1MzIgcGFyYW1fdmFsdWUpCit7CisJc3RydWN0IHdtaV9wZWVyX3NldF9wYXJhbV9jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl0bHYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX1BFRVJfU0VUX1BBUkFNX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CisJY21kLT5wYXJhbV9pZCA9IF9fY3B1X3RvX2xlMzIocGFyYW1faWQpOworCWNtZC0+cGFyYW1fdmFsdWUgPSBfX2NwdV90b19sZTMyKHBhcmFtX3ZhbHVlKTsKKwlldGhlcl9hZGRyX2NvcHkoY21kLT5wZWVyX21hY2FkZHIuYWRkciwgcGVlcl9hZGRyKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIHRsdiBwZWVyIHNldCBwYXJhbVxuIik7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl9wZWVyX2Fzc29jKHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCSBjb25zdCBzdHJ1Y3Qgd21pX3BlZXJfYXNzb2NfY29tcGxldGVfYXJnICphcmcpCit7CisJc3RydWN0IHdtaV90bHZfcGVlcl9hc3NvY19jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3ZodF9yYXRlX3NldCAqdmh0X3JhdGU7CisJc3RydWN0IHdtaV90bHYgKnRsdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXNpemVfdCBsZW4sIGxlZ2FjeV9yYXRlX2xlbiwgaHRfcmF0ZV9sZW47CisJdm9pZCAqcHRyOworCisJaWYgKGFyZy0+cGVlcl9tcGR1X2RlbnNpdHkgPiAxNikKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKGFyZy0+cGVlcl9sZWdhY3lfcmF0ZXMubnVtX3JhdGVzID4gTUFYX1NVUFBPUlRFRF9SQVRFUykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKGFyZy0+cGVlcl9odF9yYXRlcy5udW1fcmF0ZXMgPiBNQVhfU1VQUE9SVEVEX1JBVEVTKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWxlZ2FjeV9yYXRlX2xlbiA9IHJvdW5kdXAoYXJnLT5wZWVyX2xlZ2FjeV9yYXRlcy5udW1fcmF0ZXMsCisJCQkJICBzaXplb2YoX19sZTMyKSk7CisJaHRfcmF0ZV9sZW4gPSByb3VuZHVwKGFyZy0+cGVlcl9odF9yYXRlcy5udW1fcmF0ZXMsIHNpemVvZihfX2xlMzIpKTsKKwlsZW4gPSAoc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpKSArCisJICAgICAgKHNpemVvZigqdGx2KSArIGxlZ2FjeV9yYXRlX2xlbikgKworCSAgICAgIChzaXplb2YoKnRsdikgKyBodF9yYXRlX2xlbikgKworCSAgICAgIChzaXplb2YoKnRsdikgKyBzaXplb2YoKnZodF9yYXRlKSk7CisJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIGxlbik7CisJaWYgKCFza2IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcHRyID0gKHZvaWQgKilza2ItPmRhdGE7CisJdGx2ID0gcHRyOworCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19TVFJVQ1RfUEVFUl9BU1NPQ19DT01QTEVURV9DTUQpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZCA9ICh2b2lkICopdGx2LT52YWx1ZTsKKworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIoYXJnLT52ZGV2X2lkKTsKKwljbWQtPm5ld19hc3NvYyA9IF9fY3B1X3RvX2xlMzIoYXJnLT5wZWVyX3JlYXNzb2MgPyAwIDogMSk7CisJY21kLT5hc3NvY19pZCA9IF9fY3B1X3RvX2xlMzIoYXJnLT5wZWVyX2FpZCk7CisJY21kLT5mbGFncyA9IF9fY3B1X3RvX2xlMzIoYXJnLT5wZWVyX2ZsYWdzKTsKKwljbWQtPmNhcHMgPSBfX2NwdV90b19sZTMyKGFyZy0+cGVlcl9jYXBzKTsKKwljbWQtPmxpc3Rlbl9pbnR2YWwgPSBfX2NwdV90b19sZTMyKGFyZy0+cGVlcl9saXN0ZW5faW50dmFsKTsKKwljbWQtPmh0X2NhcHMgPSBfX2NwdV90b19sZTMyKGFyZy0+cGVlcl9odF9jYXBzKTsKKwljbWQtPm1heF9tcGR1ID0gX19jcHVfdG9fbGUzMihhcmctPnBlZXJfbWF4X21wZHUpOworCWNtZC0+bXBkdV9kZW5zaXR5ID0gX19jcHVfdG9fbGUzMihhcmctPnBlZXJfbXBkdV9kZW5zaXR5KTsKKwljbWQtPnJhdGVfY2FwcyA9IF9fY3B1X3RvX2xlMzIoYXJnLT5wZWVyX3JhdGVfY2Fwcyk7CisJY21kLT5uc3MgPSBfX2NwdV90b19sZTMyKGFyZy0+cGVlcl9udW1fc3BhdGlhbF9zdHJlYW1zKTsKKwljbWQtPnZodF9jYXBzID0gX19jcHVfdG9fbGUzMihhcmctPnBlZXJfdmh0X2NhcHMpOworCWNtZC0+cGh5X21vZGUgPSBfX2NwdV90b19sZTMyKGFyZy0+cGVlcl9waHltb2RlKTsKKwljbWQtPm51bV9sZWdhY3lfcmF0ZXMgPSBfX2NwdV90b19sZTMyKGFyZy0+cGVlcl9sZWdhY3lfcmF0ZXMubnVtX3JhdGVzKTsKKwljbWQtPm51bV9odF9yYXRlcyA9IF9fY3B1X3RvX2xlMzIoYXJnLT5wZWVyX2h0X3JhdGVzLm51bV9yYXRlcyk7CisJZXRoZXJfYWRkcl9jb3B5KGNtZC0+bWFjX2FkZHIuYWRkciwgYXJnLT5hZGRyKTsKKworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IHNpemVvZigqY21kKTsKKworCXRsdiA9IHB0cjsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfQVJSQVlfQllURSk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KGxlZ2FjeV9yYXRlX2xlbik7CisJbWVtY3B5KHRsdi0+dmFsdWUsIGFyZy0+cGVlcl9sZWdhY3lfcmF0ZXMucmF0ZXMsCisJICAgICAgIGFyZy0+cGVlcl9sZWdhY3lfcmF0ZXMubnVtX3JhdGVzKTsKKworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IGxlZ2FjeV9yYXRlX2xlbjsKKworCXRsdiA9IHB0cjsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfQVJSQVlfQllURSk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KGh0X3JhdGVfbGVuKTsKKwltZW1jcHkodGx2LT52YWx1ZSwgYXJnLT5wZWVyX2h0X3JhdGVzLnJhdGVzLAorCSAgICAgICBhcmctPnBlZXJfaHRfcmF0ZXMubnVtX3JhdGVzKTsKKworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IGh0X3JhdGVfbGVuOworCisJdGx2ID0gcHRyOworCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19TVFJVQ1RfVkhUX1JBVEVfU0VUKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoc2l6ZW9mKCp2aHRfcmF0ZSkpOworCXZodF9yYXRlID0gKHZvaWQgKil0bHYtPnZhbHVlOworCisJdmh0X3JhdGUtPnJ4X21heF9yYXRlID0gX19jcHVfdG9fbGUzMihhcmctPnBlZXJfdmh0X3JhdGVzLnJ4X21heF9yYXRlKTsKKwl2aHRfcmF0ZS0+cnhfbWNzX3NldCA9IF9fY3B1X3RvX2xlMzIoYXJnLT5wZWVyX3ZodF9yYXRlcy5yeF9tY3Nfc2V0KTsKKwl2aHRfcmF0ZS0+dHhfbWF4X3JhdGUgPSBfX2NwdV90b19sZTMyKGFyZy0+cGVlcl92aHRfcmF0ZXMudHhfbWF4X3JhdGUpOworCXZodF9yYXRlLT50eF9tY3Nfc2V0ID0gX19jcHVfdG9fbGUzMihhcmctPnBlZXJfdmh0X3JhdGVzLnR4X21jc19zZXQpOworCisJcHRyICs9IHNpemVvZigqdGx2KTsKKwlwdHIgKz0gc2l6ZW9mKCp2aHRfcmF0ZSk7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgcGVlciBhc3NvY1xuIik7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl9zZXRfcHNtb2RlKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCQkgZW51bSB3bWlfc3RhX3BzX21vZGUgcHNtb2RlKQoreworCXN0cnVjdCB3bWlfc3RhX3Bvd2Vyc2F2ZV9tb2RlX2NtZCAqY21kOworCXN0cnVjdCB3bWlfdGx2ICp0bHY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKnRsdikgKyBzaXplb2YoKmNtZCkpOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXRsdiA9ICh2b2lkICopc2tiLT5kYXRhOworCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19TVFJVQ1RfU1RBX1BPV0VSU0FWRV9NT0RFX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CisJY21kLT5zdGFfcHNfbW9kZSA9IF9fY3B1X3RvX2xlMzIocHNtb2RlKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIHRsdiBzZXQgcHNtb2RlXG4iKTsKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3NldF9zdGFfcHMoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJCSBlbnVtIHdtaV9zdGFfcG93ZXJzYXZlX3BhcmFtIHBhcmFtX2lkLAorCQkJCSB1MzIgcGFyYW1fdmFsdWUpCit7CisJc3RydWN0IHdtaV9zdGFfcG93ZXJzYXZlX3BhcmFtX2NtZCAqY21kOworCXN0cnVjdCB3bWlfdGx2ICp0bHY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKnRsdikgKyBzaXplb2YoKmNtZCkpOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXRsdiA9ICh2b2lkICopc2tiLT5kYXRhOworCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19TVFJVQ1RfU1RBX1BPV0VSU0FWRV9QQVJBTV9DTUQpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZCA9ICh2b2lkICopdGx2LT52YWx1ZTsKKwljbWQtPnZkZXZfaWQgPSBfX2NwdV90b19sZTMyKHZkZXZfaWQpOworCWNtZC0+cGFyYW1faWQgPSBfX2NwdV90b19sZTMyKHBhcmFtX2lkKTsKKwljbWQtPnBhcmFtX3ZhbHVlID0gX19jcHVfdG9fbGUzMihwYXJhbV92YWx1ZSk7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgc2V0IHN0YSBwc1xuIik7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl9zZXRfYXBfcHMoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLCBjb25zdCB1OCAqbWFjLAorCQkJCWVudW0gd21pX2FwX3BzX3BlZXJfcGFyYW0gcGFyYW1faWQsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgd21pX2FwX3BzX3BlZXJfY21kICpjbWQ7CisJc3RydWN0IHdtaV90bHYgKnRsdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFtYWMpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVvZigqY21kKSk7CisJaWYgKCFza2IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJdGx2ID0gKHZvaWQgKilza2ItPmRhdGE7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9BUF9QU19QRUVSX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CisJY21kLT5wYXJhbV9pZCA9IF9fY3B1X3RvX2xlMzIocGFyYW1faWQpOworCWNtZC0+cGFyYW1fdmFsdWUgPSBfX2NwdV90b19sZTMyKHZhbHVlKTsKKwlldGhlcl9hZGRyX2NvcHkoY21kLT5wZWVyX21hY2FkZHIuYWRkciwgbWFjKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIHRsdiBhcCBwcyBwYXJhbVxuIik7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl9zY2FuX2NoYW5fbGlzdChzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCB3bWlfc2Nhbl9jaGFuX2xpc3RfYXJnICphcmcpCit7CisJc3RydWN0IHdtaV90bHZfc2Nhbl9jaGFuX2xpc3RfY21kICpjbWQ7CisJc3RydWN0IHdtaV9jaGFubmVsICpjaTsKKwlzdHJ1Y3Qgd21pX2NoYW5uZWxfYXJnICpjaDsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCBza19idWZmICpza2I7CisJc2l6ZV90IGNoYW5zX2xlbiwgbGVuOworCWludCBpOworCXZvaWQgKnB0ciwgKmNoYW5zOworCisJY2hhbnNfbGVuID0gYXJnLT5uX2NoYW5uZWxzICogKHNpemVvZigqdGx2KSArIHNpemVvZigqY2kpKTsKKwlsZW4gPSAoc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpKSArCisJICAgICAgKHNpemVvZigqdGx2KSArIGNoYW5zX2xlbik7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgbGVuKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlwdHIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9TQ0FOX0NIQU5fTElTVF9DTUQpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZCA9ICh2b2lkICopdGx2LT52YWx1ZTsKKwljbWQtPm51bV9zY2FuX2NoYW5zID0gX19jcHVfdG9fbGUzMihhcmctPm5fY2hhbm5lbHMpOworCisJcHRyICs9IHNpemVvZigqdGx2KTsKKwlwdHIgKz0gc2l6ZW9mKCpjbWQpOworCisJdGx2ID0gcHRyOworCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19BUlJBWV9TVFJVQ1QpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihjaGFuc19sZW4pOworCWNoYW5zID0gKHZvaWQgKil0bHYtPnZhbHVlOworCisJZm9yIChpID0gMDsgaSA8IGFyZy0+bl9jaGFubmVsczsgaSsrKSB7CisJCWNoID0gJmFyZy0+Y2hhbm5lbHNbaV07CisKKwkJdGx2ID0gY2hhbnM7CisJCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19TVFJVQ1RfQ0hBTk5FTCk7CisJCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihzaXplb2YoKmNpKSk7CisJCWNpID0gKHZvaWQgKil0bHYtPnZhbHVlOworCisJCWF0aDEwa193bWlfcHV0X3dtaV9jaGFubmVsKGNpLCBjaCk7CisKKwkJY2hhbnMgKz0gc2l6ZW9mKCp0bHYpOworCQljaGFucyArPSBzaXplb2YoKmNpKTsKKwl9CisKKwlwdHIgKz0gc2l6ZW9mKCp0bHYpOworCXB0ciArPSBjaGFuc19sZW47CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgc2NhbiBjaGFuIGxpc3RcbiIpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX3Rsdl9vcF9nZW5fYmVhY29uX2RtYShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkJIGNvbnN0IHZvaWQgKmJjbiwgc2l6ZV90IGJjbl9sZW4sCisJCQkJIHUzMiBiY25fcGFkZHIsIGJvb2wgZHRpbV96ZXJvLAorCQkJCSBib29sIGRlbGl2ZXJfY2FiKQorCit7CisJc3RydWN0IHdtaV9iY25fdHhfcmVmX2NtZCAqY21kOworCXN0cnVjdCB3bWlfdGx2ICp0bHY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXUxNiBmYzsKKworCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKnRsdikgKyBzaXplb2YoKmNtZCkpOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJjbjsKKwlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CisKKwl0bHYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX0JDTl9TRU5EX0ZST01fSE9TVF9DTUQpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZCA9ICh2b2lkICopdGx2LT52YWx1ZTsKKwljbWQtPnZkZXZfaWQgPSBfX2NwdV90b19sZTMyKHZkZXZfaWQpOworCWNtZC0+ZGF0YV9sZW4gPSBfX2NwdV90b19sZTMyKGJjbl9sZW4pOworCWNtZC0+ZGF0YV9wdHIgPSBfX2NwdV90b19sZTMyKGJjbl9wYWRkcik7CisJY21kLT5tc2R1X2lkID0gMDsKKwljbWQtPmZyYW1lX2NvbnRyb2wgPSBfX2NwdV90b19sZTMyKGZjKTsKKwljbWQtPmZsYWdzID0gMDsKKworCWlmIChkdGltX3plcm8pCisJCWNtZC0+ZmxhZ3MgfD0gX19jcHVfdG9fbGUzMihXTUlfQkNOX1RYX1JFRl9GTEFHX0RUSU1fWkVSTyk7CisKKwlpZiAoZGVsaXZlcl9jYWIpCisJCWNtZC0+ZmxhZ3MgfD0gX19jcHVfdG9fbGUzMihXTUlfQkNOX1RYX1JFRl9GTEFHX0RFTElWRVJfQ0FCKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIHRsdiBiZWFjb24gZG1hXG4iKTsKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3BkZXZfc2V0X3dtbShzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgd21pX3dtbV9wYXJhbXNfYWxsX2FyZyAqYXJnKQoreworCXN0cnVjdCB3bWlfdGx2X3BkZXZfc2V0X3dtbV9jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3dtbV9wYXJhbXMgKndtbTsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCBza19idWZmICpza2I7CisJc2l6ZV90IGxlbjsKKwl2b2lkICpwdHI7CisKKwlsZW4gPSAoc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpKSArCisJICAgICAgKDQgKiAoc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCp3bW0pKSk7CisJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIGxlbik7CisJaWYgKCFza2IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcHRyID0gKHZvaWQgKilza2ItPmRhdGE7CisKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9QREVWX1NFVF9XTU1fUEFSQU1TX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCisJLyogbm90aGluZyB0byBzZXQgaGVyZSAqLworCisJcHRyICs9IHNpemVvZigqdGx2KTsKKwlwdHIgKz0gc2l6ZW9mKCpjbWQpOworCisJcHRyID0gYXRoMTBrX3dtaV90bHZfcHV0X3dtbShwdHIsICZhcmctPmFjX2JlKTsKKwlwdHIgPSBhdGgxMGtfd21pX3Rsdl9wdXRfd21tKHB0ciwgJmFyZy0+YWNfYmspOworCXB0ciA9IGF0aDEwa193bWlfdGx2X3B1dF93bW0ocHRyLCAmYXJnLT5hY192aSk7CisJcHRyID0gYXRoMTBrX3dtaV90bHZfcHV0X3dtbShwdHIsICZhcmctPmFjX3ZvKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIHRsdiBwZGV2IHNldCB3bW1cbiIpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX3Rsdl9vcF9nZW5fcmVxdWVzdF9zdGF0cyhzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkgICAgZW51bSB3bWlfc3RhdHNfaWQgc3RhdHNfaWQpCit7CisJc3RydWN0IHdtaV9yZXF1ZXN0X3N0YXRzX2NtZCAqY21kOworCXN0cnVjdCB3bWlfdGx2ICp0bHY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKnRsdikgKyBzaXplb2YoKmNtZCkpOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXRsdiA9ICh2b2lkICopc2tiLT5kYXRhOworCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19TVFJVQ1RfUkVRVUVTVF9TVEFUU19DTUQpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZCA9ICh2b2lkICopdGx2LT52YWx1ZTsKKwljbWQtPnN0YXRzX2lkID0gX19jcHVfdG9fbGUzMihzdGF0c19pZCk7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgcmVxdWVzdCBzdGF0c1xuIik7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl9mb3JjZV9md19oYW5nKHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCSAgICBlbnVtIHdtaV9mb3JjZV9md19oYW5nX3R5cGUgdHlwZSwKKwkJCQkgICAgdTMyIGRlbGF5X21zKQoreworCXN0cnVjdCB3bWlfZm9yY2VfZndfaGFuZ19jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl0bHYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX0ZPUkNFX0ZXX0hBTkdfQ01EKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQgPSAodm9pZCAqKXRsdi0+dmFsdWU7CisJY21kLT50eXBlID0gX19jcHVfdG9fbGUzMih0eXBlKTsKKwljbWQtPmRlbGF5X21zID0gX19jcHVfdG9fbGUzMihkZWxheV9tcyk7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgZm9yY2UgZncgaGFuZ1xuIik7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl9kYmdsb2dfY2ZnKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgbW9kdWxlX2VuYWJsZSwKKwkJCQkgdTMyIGxvZ19sZXZlbCkgeworCXN0cnVjdCB3bWlfdGx2X2RiZ2xvZ19jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3RsdiAqdGx2OworCXN0cnVjdCBza19idWZmICpza2I7CisJc2l6ZV90IGxlbiwgYm1hcF9sZW47CisJdTMyIHZhbHVlOworCXZvaWQgKnB0cjsKKworCWlmIChtb2R1bGVfZW5hYmxlKSB7CisJCXZhbHVlID0gV01JX1RMVl9EQkdMT0dfTE9HX0xFVkVMX1ZBTFVFKAorCQkJCW1vZHVsZV9lbmFibGUsCisJCQkJV01JX1RMVl9EQkdMT0dfTE9HX0xFVkVMX1ZFUkJPU0UpOworCX0gZWxzZSB7CisJCXZhbHVlID0gV01JX1RMVl9EQkdMT0dfTE9HX0xFVkVMX1ZBTFVFKAorCQkJCVdNSV9UTFZfREJHTE9HX0FMTF9NT0RVTEVTLAorCQkJCVdNSV9UTFZfREJHTE9HX0xPR19MRVZFTF9XQVJOKTsKKwl9CisKKwlibWFwX2xlbiA9IDA7CisJbGVuID0gc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpICsgc2l6ZW9mKCp0bHYpICsgYm1hcF9sZW47CisJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIGxlbik7CisJaWYgKCFza2IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcHRyID0gKHZvaWQgKilza2ItPmRhdGE7CisKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9ERUJVR19MT0dfQ09ORklHX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCWNtZC0+cGFyYW0gPSBfX2NwdV90b19sZTMyKFdNSV9UTFZfREJHTE9HX1BBUkFNX0xPR19MRVZFTCk7CisJY21kLT52YWx1ZSA9IF9fY3B1X3RvX2xlMzIodmFsdWUpOworCisJcHRyICs9IHNpemVvZigqdGx2KTsKKwlwdHIgKz0gc2l6ZW9mKCpjbWQpOworCisJdGx2ID0gcHRyOworCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19BUlJBWV9VSU5UMzIpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihibWFwX2xlbik7CisKKwkvKiBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IHNpemVvZihibWFwX2xlbik7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgZGJnbG9nIHZhbHVlIDB4JTA4eFxuIiwgdmFsdWUpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX3Rsdl9vcF9nZW5fcGt0bG9nX2VuYWJsZShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIGZpbHRlcikKK3sKKwlzdHJ1Y3Qgd21pX3Rsdl9wa3Rsb2dfZW5hYmxlICpjbWQ7CisJc3RydWN0IHdtaV90bHYgKnRsdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXZvaWQgKnB0cjsKKwlzaXplX3QgbGVuOworCisJbGVuID0gc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpOworCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBsZW4pOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXB0ciA9ICh2b2lkICopc2tiLT5kYXRhOworCXRsdiA9IHB0cjsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX1BERVZfUEtUTE9HX0VOQUJMRV9DTUQpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZCA9ICh2b2lkICopdGx2LT52YWx1ZTsKKwljbWQtPmZpbHRlciA9IF9fY3B1X3RvX2xlMzIoZmlsdGVyKTsKKworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IHNpemVvZigqY21kKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIHRsdiBwa3Rsb2cgZW5hYmxlIGZpbHRlciAweCUwOHhcbiIsCisJCSAgIGZpbHRlcik7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl9wa3Rsb2dfZGlzYWJsZShzdHJ1Y3QgYXRoMTBrICphcikKK3sKKwlzdHJ1Y3Qgd21pX3Rsdl9wa3Rsb2dfZGlzYWJsZSAqY21kOworCXN0cnVjdCB3bWlfdGx2ICp0bHY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl2b2lkICpwdHI7CisJc2l6ZV90IGxlbjsKKworCWxlbiA9IHNpemVvZigqdGx2KSArIHNpemVvZigqY21kKTsKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgbGVuKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlwdHIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9QREVWX1BLVExPR19ESVNBQkxFX0NNRCk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kID0gKHZvaWQgKil0bHYtPnZhbHVlOworCisJcHRyICs9IHNpemVvZigqdGx2KTsKKwlwdHIgKz0gc2l6ZW9mKCpjbWQpOworCisJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJ3bWkgdGx2IHBrdGxvZyBkaXNhYmxlXG4iKTsKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV90bHZfb3BfZ2VuX2Jjbl90bXBsKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCSAgICAgICB1MzIgdGltX2llX29mZnNldCwgc3RydWN0IHNrX2J1ZmYgKmJjbiwKKwkJCSAgICAgICB1MzIgcHJiX2NhcHMsIHUzMiBwcmJfZXJwLCB2b2lkICpwcmJfaWVzLAorCQkJICAgICAgIHNpemVfdCBwcmJfaWVzX2xlbikKK3sKKwlzdHJ1Y3Qgd21pX3Rsdl9iY25fdG1wbF9jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3Rsdl9iY25fcHJiX2luZm8gKmluZm87CisJc3RydWN0IHdtaV90bHYgKnRsdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXZvaWQgKnB0cjsKKwlzaXplX3QgbGVuOworCisJaWYgKFdBUk5fT04ocHJiX2llc19sZW4gPiAwICYmICFwcmJfaWVzKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlsZW4gPSBzaXplb2YoKnRsdikgKyBzaXplb2YoKmNtZCkgKworCSAgICAgIHNpemVvZigqdGx2KSArIHNpemVvZigqaW5mbykgKyBwcmJfaWVzX2xlbiArCisJICAgICAgc2l6ZW9mKCp0bHYpICsgcm91bmR1cChiY24tPmxlbiwgNCk7CisJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIGxlbik7CisJaWYgKCFza2IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcHRyID0gKHZvaWQgKilza2ItPmRhdGE7CisJdGx2ID0gcHRyOworCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19TVFJVQ1RfQkNOX1RNUExfQ01EKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQgPSAodm9pZCAqKXRsdi0+dmFsdWU7CisJY21kLT52ZGV2X2lkID0gX19jcHVfdG9fbGUzMih2ZGV2X2lkKTsKKwljbWQtPnRpbV9pZV9vZmZzZXQgPSBfX2NwdV90b19sZTMyKHRpbV9pZV9vZmZzZXQpOworCWNtZC0+YnVmX2xlbiA9IF9fY3B1X3RvX2xlMzIoYmNuLT5sZW4pOworCisJcHRyICs9IHNpemVvZigqdGx2KTsKKwlwdHIgKz0gc2l6ZW9mKCpjbWQpOworCisJLyogRklYTUU6IHByYl9pZXNfbGVuIHNob3VsZCBiZSBwcm9iYWJseSBhbGlnbmVkIHRvIDRieXRlIGJvdW5kYXJ5IGJ1dAorCSAqIHRoZW4gaXQgaXMgdGhlbiBpbXBvc3NpYmxlIHRvIHBhc3Mgb3JpZ2luYWwgaWUgbGVuLgorCSAqIFRoaXMgY2h1bmsgaXMgbm90IHVzZWQgeWV0IHNvIGlmIHNldHRpbmcgcHJvYmUgcmVzcCB0ZW1wbGF0ZSB5aWVsZHMKKwkgKiBwcm9ibGVtcyB3aXRoIGJlYWNvbmluZyBvciBjcmFzaGVzIGZpcm13YXJlIGxvb2sgaGVyZS4KKwkgKi8KKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9CQ05fUFJCX0lORk8pOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihzaXplb2YoKmluZm8pICsgcHJiX2llc19sZW4pOworCWluZm8gPSAodm9pZCAqKXRsdi0+dmFsdWU7CisJaW5mby0+Y2FwcyA9IF9fY3B1X3RvX2xlMzIocHJiX2NhcHMpOworCWluZm8tPmVycCA9IF9fY3B1X3RvX2xlMzIocHJiX2VycCk7CisJbWVtY3B5KGluZm8tPmllcywgcHJiX2llcywgcHJiX2llc19sZW4pOworCisJcHRyICs9IHNpemVvZigqdGx2KTsKKwlwdHIgKz0gc2l6ZW9mKCppbmZvKTsKKwlwdHIgKz0gcHJiX2llc19sZW47CisKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX0FSUkFZX0JZVEUpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihyb3VuZHVwKGJjbi0+bGVuLCA0KSk7CisJbWVtY3B5KHRsdi0+dmFsdWUsIGJjbi0+ZGF0YSwgYmNuLT5sZW4pOworCisJLyogRklYTUU6IEFkanVzdCBUU0Y/ICovCisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgYmNuIHRtcGwgdmRldl9pZCAlaVxuIiwKKwkJICAgdmRldl9pZCk7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl9wcmJfdG1wbChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnByYikKK3sKKwlzdHJ1Y3Qgd21pX3Rsdl9wcmJfdG1wbF9jbWQgKmNtZDsKKwlzdHJ1Y3Qgd21pX3Rsdl9iY25fcHJiX2luZm8gKmluZm87CisJc3RydWN0IHdtaV90bHYgKnRsdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXZvaWQgKnB0cjsKKwlzaXplX3QgbGVuOworCisJbGVuID0gc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpICsKKwkgICAgICBzaXplb2YoKnRsdikgKyBzaXplb2YoKmluZm8pICsKKwkgICAgICBzaXplb2YoKnRsdikgKyByb3VuZHVwKHByYi0+bGVuLCA0KTsKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgbGVuKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlwdHIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX1NUUlVDVF9QUkJfVE1QTF9DTUQpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZCA9ICh2b2lkICopdGx2LT52YWx1ZTsKKwljbWQtPnZkZXZfaWQgPSBfX2NwdV90b19sZTMyKHZkZXZfaWQpOworCWNtZC0+YnVmX2xlbiA9IF9fY3B1X3RvX2xlMzIocHJiLT5sZW4pOworCisJcHRyICs9IHNpemVvZigqdGx2KTsKKwlwdHIgKz0gc2l6ZW9mKCpjbWQpOworCisJdGx2ID0gcHRyOworCXRsdi0+dGFnID0gX19jcHVfdG9fbGUxNihXTUlfVExWX1RBR19TVFJVQ1RfQkNOX1BSQl9JTkZPKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoc2l6ZW9mKCppbmZvKSk7CisJaW5mbyA9ICh2b2lkICopdGx2LT52YWx1ZTsKKwlpbmZvLT5jYXBzID0gMDsKKwlpbmZvLT5lcnAgPSAwOworCisJcHRyICs9IHNpemVvZigqdGx2KTsKKwlwdHIgKz0gc2l6ZW9mKCppbmZvKTsKKworCXRsdiA9IHB0cjsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfQVJSQVlfQllURSk7CisJdGx2LT5sZW4gPSBfX2NwdV90b19sZTE2KHJvdW5kdXAocHJiLT5sZW4sIDQpKTsKKwltZW1jcHkodGx2LT52YWx1ZSwgcHJiLT5kYXRhLCBwcmItPmxlbik7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgcHJiIHRtcGwgdmRldl9pZCAlaVxuIiwKKwkJICAgdmRldl9pZCk7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfdGx2X29wX2dlbl9wMnBfZ29fYmNuX2llKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCQkgICAgY29uc3QgdTggKnAycF9pZSkKK3sKKwlzdHJ1Y3Qgd21pX3Rsdl9wMnBfZ29fYmNuX2llICpjbWQ7CisJc3RydWN0IHdtaV90bHYgKnRsdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXZvaWQgKnB0cjsKKwlzaXplX3QgbGVuOworCisJbGVuID0gc2l6ZW9mKCp0bHYpICsgc2l6ZW9mKCpjbWQpICsKKwkgICAgICBzaXplb2YoKnRsdikgKyByb3VuZHVwKHAycF9pZVsxXSArIDIsIDQpOworCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBsZW4pOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXB0ciA9ICh2b2lkICopc2tiLT5kYXRhOworCXRsdiA9IHB0cjsKKwl0bHYtPnRhZyA9IF9fY3B1X3RvX2xlMTYoV01JX1RMVl9UQUdfU1RSVUNUX1AyUF9HT19TRVRfQkVBQ09OX0lFKTsKKwl0bHYtPmxlbiA9IF9fY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQgPSAodm9pZCAqKXRsdi0+dmFsdWU7CisJY21kLT52ZGV2X2lkID0gX19jcHVfdG9fbGUzMih2ZGV2X2lkKTsKKwljbWQtPmllX2xlbiA9IF9fY3B1X3RvX2xlMzIocDJwX2llWzFdICsgMik7CisKKwlwdHIgKz0gc2l6ZW9mKCp0bHYpOworCXB0ciArPSBzaXplb2YoKmNtZCk7CisKKwl0bHYgPSBwdHI7CisJdGx2LT50YWcgPSBfX2NwdV90b19sZTE2KFdNSV9UTFZfVEFHX0FSUkFZX0JZVEUpOworCXRsdi0+bGVuID0gX19jcHVfdG9fbGUxNihyb3VuZHVwKHAycF9pZVsxXSArIDIsIDQpKTsKKwltZW1jcHkodGx2LT52YWx1ZSwgcDJwX2llLCBwMnBfaWVbMV0gKyAyKTsKKworCXB0ciArPSBzaXplb2YoKnRsdik7CisJcHRyICs9IHJvdW5kdXAocDJwX2llWzFdICsgMiwgNCk7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB0bHYgcDJwIGdvIGJjbiBpZSBmb3IgdmRldiAlaVxuIiwKKwkJICAgdmRldl9pZCk7CisJcmV0dXJuIHNrYjsKK30KKworLyoqKioqKioqKioqKioqKiovCisvKiBUTFYgbWFwcGluZ3MgKi8KKy8qKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHdtaV9jbWRfbWFwIHdtaV90bHZfY21kX21hcCA9IHsKKwkuaW5pdF9jbWRpZCA9IFdNSV9UTFZfSU5JVF9DTURJRCwKKwkuc3RhcnRfc2Nhbl9jbWRpZCA9IFdNSV9UTFZfU1RBUlRfU0NBTl9DTURJRCwKKwkuc3RvcF9zY2FuX2NtZGlkID0gV01JX1RMVl9TVE9QX1NDQU5fQ01ESUQsCisJLnNjYW5fY2hhbl9saXN0X2NtZGlkID0gV01JX1RMVl9TQ0FOX0NIQU5fTElTVF9DTURJRCwKKwkuc2Nhbl9zY2hfcHJpb190YmxfY21kaWQgPSBXTUlfVExWX1NDQU5fU0NIX1BSSU9fVEJMX0NNRElELAorCS5wZGV2X3NldF9yZWdkb21haW5fY21kaWQgPSBXTUlfVExWX1BERVZfU0VUX1JFR0RPTUFJTl9DTURJRCwKKwkucGRldl9zZXRfY2hhbm5lbF9jbWRpZCA9IFdNSV9UTFZfUERFVl9TRVRfQ0hBTk5FTF9DTURJRCwKKwkucGRldl9zZXRfcGFyYW1fY21kaWQgPSBXTUlfVExWX1BERVZfU0VUX1BBUkFNX0NNRElELAorCS5wZGV2X3BrdGxvZ19lbmFibGVfY21kaWQgPSBXTUlfVExWX1BERVZfUEtUTE9HX0VOQUJMRV9DTURJRCwKKwkucGRldl9wa3Rsb2dfZGlzYWJsZV9jbWRpZCA9IFdNSV9UTFZfUERFVl9QS1RMT0dfRElTQUJMRV9DTURJRCwKKwkucGRldl9zZXRfd21tX3BhcmFtc19jbWRpZCA9IFdNSV9UTFZfUERFVl9TRVRfV01NX1BBUkFNU19DTURJRCwKKwkucGRldl9zZXRfaHRfY2FwX2llX2NtZGlkID0gV01JX1RMVl9QREVWX1NFVF9IVF9DQVBfSUVfQ01ESUQsCisJLnBkZXZfc2V0X3ZodF9jYXBfaWVfY21kaWQgPSBXTUlfVExWX1BERVZfU0VUX1ZIVF9DQVBfSUVfQ01ESUQsCisJLnBkZXZfc2V0X2RzY3BfdGlkX21hcF9jbWRpZCA9IFdNSV9UTFZfUERFVl9TRVRfRFNDUF9USURfTUFQX0NNRElELAorCS5wZGV2X3NldF9xdWlldF9tb2RlX2NtZGlkID0gV01JX1RMVl9QREVWX1NFVF9RVUlFVF9NT0RFX0NNRElELAorCS5wZGV2X2dyZWVuX2FwX3BzX2VuYWJsZV9jbWRpZCA9IFdNSV9UTFZfUERFVl9HUkVFTl9BUF9QU19FTkFCTEVfQ01ESUQsCisJLnBkZXZfZ2V0X3RwY19jb25maWdfY21kaWQgPSBXTUlfVExWX1BERVZfR0VUX1RQQ19DT05GSUdfQ01ESUQsCisJLnBkZXZfc2V0X2Jhc2VfbWFjYWRkcl9jbWRpZCA9IFdNSV9UTFZfUERFVl9TRVRfQkFTRV9NQUNBRERSX0NNRElELAorCS52ZGV2X2NyZWF0ZV9jbWRpZCA9IFdNSV9UTFZfVkRFVl9DUkVBVEVfQ01ESUQsCisJLnZkZXZfZGVsZXRlX2NtZGlkID0gV01JX1RMVl9WREVWX0RFTEVURV9DTURJRCwKKwkudmRldl9zdGFydF9yZXF1ZXN0X2NtZGlkID0gV01JX1RMVl9WREVWX1NUQVJUX1JFUVVFU1RfQ01ESUQsCisJLnZkZXZfcmVzdGFydF9yZXF1ZXN0X2NtZGlkID0gV01JX1RMVl9WREVWX1JFU1RBUlRfUkVRVUVTVF9DTURJRCwKKwkudmRldl91cF9jbWRpZCA9IFdNSV9UTFZfVkRFVl9VUF9DTURJRCwKKwkudmRldl9zdG9wX2NtZGlkID0gV01JX1RMVl9WREVWX1NUT1BfQ01ESUQsCisJLnZkZXZfZG93bl9jbWRpZCA9IFdNSV9UTFZfVkRFVl9ET1dOX0NNRElELAorCS52ZGV2X3NldF9wYXJhbV9jbWRpZCA9IFdNSV9UTFZfVkRFVl9TRVRfUEFSQU1fQ01ESUQsCisJLnZkZXZfaW5zdGFsbF9rZXlfY21kaWQgPSBXTUlfVExWX1ZERVZfSU5TVEFMTF9LRVlfQ01ESUQsCisJLnBlZXJfY3JlYXRlX2NtZGlkID0gV01JX1RMVl9QRUVSX0NSRUFURV9DTURJRCwKKwkucGVlcl9kZWxldGVfY21kaWQgPSBXTUlfVExWX1BFRVJfREVMRVRFX0NNRElELAorCS5wZWVyX2ZsdXNoX3RpZHNfY21kaWQgPSBXTUlfVExWX1BFRVJfRkxVU0hfVElEU19DTURJRCwKKwkucGVlcl9zZXRfcGFyYW1fY21kaWQgPSBXTUlfVExWX1BFRVJfU0VUX1BBUkFNX0NNRElELAorCS5wZWVyX2Fzc29jX2NtZGlkID0gV01JX1RMVl9QRUVSX0FTU09DX0NNRElELAorCS5wZWVyX2FkZF93ZHNfZW50cnlfY21kaWQgPSBXTUlfVExWX1BFRVJfQUREX1dEU19FTlRSWV9DTURJRCwKKwkucGVlcl9yZW1vdmVfd2RzX2VudHJ5X2NtZGlkID0gV01JX1RMVl9QRUVSX1JFTU9WRV9XRFNfRU5UUllfQ01ESUQsCisJLnBlZXJfbWNhc3RfZ3JvdXBfY21kaWQgPSBXTUlfVExWX1BFRVJfTUNBU1RfR1JPVVBfQ01ESUQsCisJLmJjbl90eF9jbWRpZCA9IFdNSV9UTFZfQkNOX1RYX0NNRElELAorCS5wZGV2X3NlbmRfYmNuX2NtZGlkID0gV01JX1RMVl9QREVWX1NFTkRfQkNOX0NNRElELAorCS5iY25fdG1wbF9jbWRpZCA9IFdNSV9UTFZfQkNOX1RNUExfQ01ESUQsCisJLmJjbl9maWx0ZXJfcnhfY21kaWQgPSBXTUlfVExWX0JDTl9GSUxURVJfUlhfQ01ESUQsCisJLnByYl9yZXFfZmlsdGVyX3J4X2NtZGlkID0gV01JX1RMVl9QUkJfUkVRX0ZJTFRFUl9SWF9DTURJRCwKKwkubWdtdF90eF9jbWRpZCA9IFdNSV9UTFZfTUdNVF9UWF9DTURJRCwKKwkucHJiX3RtcGxfY21kaWQgPSBXTUlfVExWX1BSQl9UTVBMX0NNRElELAorCS5hZGRiYV9jbGVhcl9yZXNwX2NtZGlkID0gV01JX1RMVl9BRERCQV9DTEVBUl9SRVNQX0NNRElELAorCS5hZGRiYV9zZW5kX2NtZGlkID0gV01JX1RMVl9BRERCQV9TRU5EX0NNRElELAorCS5hZGRiYV9zdGF0dXNfY21kaWQgPSBXTUlfVExWX0FEREJBX1NUQVRVU19DTURJRCwKKwkuZGVsYmFfc2VuZF9jbWRpZCA9IFdNSV9UTFZfREVMQkFfU0VORF9DTURJRCwKKwkuYWRkYmFfc2V0X3Jlc3BfY21kaWQgPSBXTUlfVExWX0FEREJBX1NFVF9SRVNQX0NNRElELAorCS5zZW5kX3NpbmdsZWFtc2R1X2NtZGlkID0gV01JX1RMVl9TRU5EX1NJTkdMRUFNU0RVX0NNRElELAorCS5zdGFfcG93ZXJzYXZlX21vZGVfY21kaWQgPSBXTUlfVExWX1NUQV9QT1dFUlNBVkVfTU9ERV9DTURJRCwKKwkuc3RhX3Bvd2Vyc2F2ZV9wYXJhbV9jbWRpZCA9IFdNSV9UTFZfU1RBX1BPV0VSU0FWRV9QQVJBTV9DTURJRCwKKwkuc3RhX21pbW9fcHNfbW9kZV9jbWRpZCA9IFdNSV9UTFZfU1RBX01JTU9fUFNfTU9ERV9DTURJRCwKKwkucGRldl9kZnNfZW5hYmxlX2NtZGlkID0gV01JX1RMVl9QREVWX0RGU19FTkFCTEVfQ01ESUQsCisJLnBkZXZfZGZzX2Rpc2FibGVfY21kaWQgPSBXTUlfVExWX1BERVZfREZTX0RJU0FCTEVfQ01ESUQsCisJLnJvYW1fc2Nhbl9tb2RlID0gV01JX1RMVl9ST0FNX1NDQU5fTU9ERSwKKwkucm9hbV9zY2FuX3Jzc2lfdGhyZXNob2xkID0gV01JX1RMVl9ST0FNX1NDQU5fUlNTSV9USFJFU0hPTEQsCisJLnJvYW1fc2Nhbl9wZXJpb2QgPSBXTUlfVExWX1JPQU1fU0NBTl9QRVJJT0QsCisJLnJvYW1fc2Nhbl9yc3NpX2NoYW5nZV90aHJlc2hvbGQgPQorCQkJCVdNSV9UTFZfUk9BTV9TQ0FOX1JTU0lfQ0hBTkdFX1RIUkVTSE9MRCwKKwkucm9hbV9hcF9wcm9maWxlID0gV01JX1RMVl9ST0FNX0FQX1BST0ZJTEUsCisJLm9mbF9zY2FuX2FkZF9hcF9wcm9maWxlID0gV01JX1RMVl9ST0FNX0FQX1BST0ZJTEUsCisJLm9mbF9zY2FuX3JlbW92ZV9hcF9wcm9maWxlID0gV01JX1RMVl9PRkxfU0NBTl9SRU1PVkVfQVBfUFJPRklMRSwKKwkub2ZsX3NjYW5fcGVyaW9kID0gV01JX1RMVl9PRkxfU0NBTl9QRVJJT0QsCisJLnAycF9kZXZfc2V0X2RldmljZV9pbmZvID0gV01JX1RMVl9QMlBfREVWX1NFVF9ERVZJQ0VfSU5GTywKKwkucDJwX2Rldl9zZXRfZGlzY292ZXJhYmlsaXR5ID0gV01JX1RMVl9QMlBfREVWX1NFVF9ESVNDT1ZFUkFCSUxJVFksCisJLnAycF9nb19zZXRfYmVhY29uX2llID0gV01JX1RMVl9QMlBfR09fU0VUX0JFQUNPTl9JRSwKKwkucDJwX2dvX3NldF9wcm9iZV9yZXNwX2llID0gV01JX1RMVl9QMlBfR09fU0VUX1BST0JFX1JFU1BfSUUsCisJLnAycF9zZXRfdmVuZG9yX2llX2RhdGFfY21kaWQgPSBXTUlfVExWX1AyUF9TRVRfVkVORE9SX0lFX0RBVEFfQ01ESUQsCisJLmFwX3BzX3BlZXJfcGFyYW1fY21kaWQgPSBXTUlfVExWX0FQX1BTX1BFRVJfUEFSQU1fQ01ESUQsCisJLmFwX3BzX3BlZXJfdWFwc2RfY29leF9jbWRpZCA9IFdNSV9UTFZfQVBfUFNfUEVFUl9VQVBTRF9DT0VYX0NNRElELAorCS5wZWVyX3JhdGVfcmV0cnlfc2NoZWRfY21kaWQgPSBXTUlfVExWX1BFRVJfUkFURV9SRVRSWV9TQ0hFRF9DTURJRCwKKwkud2xhbl9wcm9maWxlX3RyaWdnZXJfY21kaWQgPSBXTUlfVExWX1dMQU5fUFJPRklMRV9UUklHR0VSX0NNRElELAorCS53bGFuX3Byb2ZpbGVfc2V0X2hpc3RfaW50dmxfY21kaWQgPQorCQkJCVdNSV9UTFZfV0xBTl9QUk9GSUxFX1NFVF9ISVNUX0lOVFZMX0NNRElELAorCS53bGFuX3Byb2ZpbGVfZ2V0X3Byb2ZpbGVfZGF0YV9jbWRpZCA9CisJCQkJV01JX1RMVl9XTEFOX1BST0ZJTEVfR0VUX1BST0ZJTEVfREFUQV9DTURJRCwKKwkud2xhbl9wcm9maWxlX2VuYWJsZV9wcm9maWxlX2lkX2NtZGlkID0KKwkJCQlXTUlfVExWX1dMQU5fUFJPRklMRV9FTkFCTEVfUFJPRklMRV9JRF9DTURJRCwKKwkud2xhbl9wcm9maWxlX2xpc3RfcHJvZmlsZV9pZF9jbWRpZCA9CisJCQkJV01JX1RMVl9XTEFOX1BST0ZJTEVfTElTVF9QUk9GSUxFX0lEX0NNRElELAorCS5wZGV2X3N1c3BlbmRfY21kaWQgPSBXTUlfVExWX1BERVZfU1VTUEVORF9DTURJRCwKKwkucGRldl9yZXN1bWVfY21kaWQgPSBXTUlfVExWX1BERVZfUkVTVU1FX0NNRElELAorCS5hZGRfYmNuX2ZpbHRlcl9jbWRpZCA9IFdNSV9UTFZfQUREX0JDTl9GSUxURVJfQ01ESUQsCisJLnJtdl9iY25fZmlsdGVyX2NtZGlkID0gV01JX1RMVl9STVZfQkNOX0ZJTFRFUl9DTURJRCwKKwkud293X2FkZF93YWtlX3BhdHRlcm5fY21kaWQgPSBXTUlfVExWX1dPV19BRERfV0FLRV9QQVRURVJOX0NNRElELAorCS53b3dfZGVsX3dha2VfcGF0dGVybl9jbWRpZCA9IFdNSV9UTFZfV09XX0RFTF9XQUtFX1BBVFRFUk5fQ01ESUQsCisJLndvd19lbmFibGVfZGlzYWJsZV93YWtlX2V2ZW50X2NtZGlkID0KKwkJCQlXTUlfVExWX1dPV19FTkFCTEVfRElTQUJMRV9XQUtFX0VWRU5UX0NNRElELAorCS53b3dfZW5hYmxlX2NtZGlkID0gV01JX1RMVl9XT1dfRU5BQkxFX0NNRElELAorCS53b3dfaG9zdHdha2V1cF9mcm9tX3NsZWVwX2NtZGlkID0KKwkJCQlXTUlfVExWX1dPV19IT1NUV0FLRVVQX0ZST01fU0xFRVBfQ01ESUQsCisJLnJ0dF9tZWFzcmVxX2NtZGlkID0gV01JX1RMVl9SVFRfTUVBU1JFUV9DTURJRCwKKwkucnR0X3RzZl9jbWRpZCA9IFdNSV9UTFZfUlRUX1RTRl9DTURJRCwKKwkudmRldl9zcGVjdHJhbF9zY2FuX2NvbmZpZ3VyZV9jbWRpZCA9IFdNSV9UTFZfU1BFQ1RSQUxfU0NBTl9DT05GX0NNRElELAorCS52ZGV2X3NwZWN0cmFsX3NjYW5fZW5hYmxlX2NtZGlkID0gV01JX1RMVl9TUEVDVFJBTF9TQ0FOX0VOQUJMRV9DTURJRCwKKwkucmVxdWVzdF9zdGF0c19jbWRpZCA9IFdNSV9UTFZfUkVRVUVTVF9TVEFUU19DTURJRCwKKwkuc2V0X2FycF9uc19vZmZsb2FkX2NtZGlkID0gV01JX1RMVl9TRVRfQVJQX05TX09GRkxPQURfQ01ESUQsCisJLm5ldHdvcmtfbGlzdF9vZmZsb2FkX2NvbmZpZ19jbWRpZCA9CisJCQkJV01JX1RMVl9ORVRXT1JLX0xJU1RfT0ZGTE9BRF9DT05GSUdfQ01ESUQsCisJLmd0a19vZmZsb2FkX2NtZGlkID0gV01JX1RMVl9HVEtfT0ZGTE9BRF9DTURJRCwKKwkuY3NhX29mZmxvYWRfZW5hYmxlX2NtZGlkID0gV01JX1RMVl9DU0FfT0ZGTE9BRF9FTkFCTEVfQ01ESUQsCisJLmNzYV9vZmZsb2FkX2NoYW5zd2l0Y2hfY21kaWQgPSBXTUlfVExWX0NTQV9PRkZMT0FEX0NIQU5TV0lUQ0hfQ01ESUQsCisJLmNoYXR0ZXJfc2V0X21vZGVfY21kaWQgPSBXTUlfVExWX0NIQVRURVJfU0VUX01PREVfQ01ESUQsCisJLnBlZXJfdGlkX2FkZGJhX2NtZGlkID0gV01JX1RMVl9QRUVSX1RJRF9BRERCQV9DTURJRCwKKwkucGVlcl90aWRfZGVsYmFfY21kaWQgPSBXTUlfVExWX1BFRVJfVElEX0RFTEJBX0NNRElELAorCS5zdGFfZHRpbV9wc19tZXRob2RfY21kaWQgPSBXTUlfVExWX1NUQV9EVElNX1BTX01FVEhPRF9DTURJRCwKKwkuc3RhX3VhcHNkX2F1dG9fdHJpZ19jbWRpZCA9IFdNSV9UTFZfU1RBX1VBUFNEX0FVVE9fVFJJR19DTURJRCwKKwkuc3RhX2tlZXBhbGl2ZV9jbWQgPSBXTUlfVExWX1NUQV9LRUVQQUxJVkVfQ01ESUQsCisJLmVjaG9fY21kaWQgPSBXTUlfVExWX0VDSE9fQ01ESUQsCisJLnBkZXZfdXRmX2NtZGlkID0gV01JX1RMVl9QREVWX1VURl9DTURJRCwKKwkuZGJnbG9nX2NmZ19jbWRpZCA9IFdNSV9UTFZfREJHTE9HX0NGR19DTURJRCwKKwkucGRldl9xdml0X2NtZGlkID0gV01JX1RMVl9QREVWX1FWSVRfQ01ESUQsCisJLnBkZXZfZnRtX2ludGdfY21kaWQgPSBXTUlfVExWX1BERVZfRlRNX0lOVEdfQ01ESUQsCisJLnZkZXZfc2V0X2tlZXBhbGl2ZV9jbWRpZCA9IFdNSV9UTFZfVkRFVl9TRVRfS0VFUEFMSVZFX0NNRElELAorCS52ZGV2X2dldF9rZWVwYWxpdmVfY21kaWQgPSBXTUlfVExWX1ZERVZfR0VUX0tFRVBBTElWRV9DTURJRCwKKwkuZm9yY2VfZndfaGFuZ19jbWRpZCA9IFdNSV9UTFZfRk9SQ0VfRldfSEFOR19DTURJRCwKKwkuZ3Bpb19jb25maWdfY21kaWQgPSBXTUlfVExWX0dQSU9fQ09ORklHX0NNRElELAorCS5ncGlvX291dHB1dF9jbWRpZCA9IFdNSV9UTFZfR1BJT19PVVRQVVRfQ01ESUQsCisJLnBkZXZfZ2V0X3RlbXBlcmF0dXJlX2NtZGlkID0gV01JX1RMVl9DTURfVU5TVVBQT1JURUQsCisJLnZkZXZfc2V0X3dtbV9wYXJhbXNfY21kaWQgPSBXTUlfVExWX1ZERVZfU0VUX1dNTV9QQVJBTVNfQ01ESUQsCit9OworCitzdGF0aWMgc3RydWN0IHdtaV9wZGV2X3BhcmFtX21hcCB3bWlfdGx2X3BkZXZfcGFyYW1fbWFwID0geworCS50eF9jaGFpbl9tYXNrID0gV01JX1RMVl9QREVWX1BBUkFNX1RYX0NIQUlOX01BU0ssCisJLnJ4X2NoYWluX21hc2sgPSBXTUlfVExWX1BERVZfUEFSQU1fUlhfQ0hBSU5fTUFTSywKKwkudHhwb3dlcl9saW1pdDJnID0gV01JX1RMVl9QREVWX1BBUkFNX1RYUE9XRVJfTElNSVQyRywKKwkudHhwb3dlcl9saW1pdDVnID0gV01JX1RMVl9QREVWX1BBUkFNX1RYUE9XRVJfTElNSVQ1RywKKwkudHhwb3dlcl9zY2FsZSA9IFdNSV9UTFZfUERFVl9QQVJBTV9UWFBPV0VSX1NDQUxFLAorCS5iZWFjb25fZ2VuX21vZGUgPSBXTUlfVExWX1BERVZfUEFSQU1fQkVBQ09OX0dFTl9NT0RFLAorCS5iZWFjb25fdHhfbW9kZSA9IFdNSV9UTFZfUERFVl9QQVJBTV9CRUFDT05fVFhfTU9ERSwKKwkucmVzbWdyX29mZmNoYW5fbW9kZSA9IFdNSV9UTFZfUERFVl9QQVJBTV9SRVNNR1JfT0ZGQ0hBTl9NT0RFLAorCS5wcm90ZWN0aW9uX21vZGUgPSBXTUlfVExWX1BERVZfUEFSQU1fUFJPVEVDVElPTl9NT0RFLAorCS5keW5hbWljX2J3ID0gV01JX1RMVl9QREVWX1BBUkFNX0RZTkFNSUNfQlcsCisJLm5vbl9hZ2dfc3dfcmV0cnlfdGggPSBXTUlfVExWX1BERVZfUEFSQU1fTk9OX0FHR19TV19SRVRSWV9USCwKKwkuYWdnX3N3X3JldHJ5X3RoID0gV01JX1RMVl9QREVWX1BBUkFNX0FHR19TV19SRVRSWV9USCwKKwkuc3RhX2tpY2tvdXRfdGggPSBXTUlfVExWX1BERVZfUEFSQU1fU1RBX0tJQ0tPVVRfVEgsCisJLmFjX2FnZ3JzaXplX3NjYWxpbmcgPSBXTUlfVExWX1BERVZfUEFSQU1fQUNfQUdHUlNJWkVfU0NBTElORywKKwkubHRyX2VuYWJsZSA9IFdNSV9UTFZfUERFVl9QQVJBTV9MVFJfRU5BQkxFLAorCS5sdHJfYWNfbGF0ZW5jeV9iZSA9IFdNSV9UTFZfUERFVl9QQVJBTV9MVFJfQUNfTEFURU5DWV9CRSwKKwkubHRyX2FjX2xhdGVuY3lfYmsgPSBXTUlfVExWX1BERVZfUEFSQU1fTFRSX0FDX0xBVEVOQ1lfQkssCisJLmx0cl9hY19sYXRlbmN5X3ZpID0gV01JX1RMVl9QREVWX1BBUkFNX0xUUl9BQ19MQVRFTkNZX1ZJLAorCS5sdHJfYWNfbGF0ZW5jeV92byA9IFdNSV9UTFZfUERFVl9QQVJBTV9MVFJfQUNfTEFURU5DWV9WTywKKwkubHRyX2FjX2xhdGVuY3lfdGltZW91dCA9IFdNSV9UTFZfUERFVl9QQVJBTV9MVFJfQUNfTEFURU5DWV9USU1FT1VULAorCS5sdHJfc2xlZXBfb3ZlcnJpZGUgPSBXTUlfVExWX1BERVZfUEFSQU1fTFRSX1NMRUVQX09WRVJSSURFLAorCS5sdHJfcnhfb3ZlcnJpZGUgPSBXTUlfVExWX1BERVZfUEFSQU1fTFRSX1JYX09WRVJSSURFLAorCS5sdHJfdHhfYWN0aXZpdHlfdGltZW91dCA9IFdNSV9UTFZfUERFVl9QQVJBTV9MVFJfVFhfQUNUSVZJVFlfVElNRU9VVCwKKwkubDFzc19lbmFibGUgPSBXTUlfVExWX1BERVZfUEFSQU1fTDFTU19FTkFCTEUsCisJLmRzbGVlcF9lbmFibGUgPSBXTUlfVExWX1BERVZfUEFSQU1fRFNMRUVQX0VOQUJMRSwKKwkucGNpZWxwX3R4YnVmX2ZsdXNoID0gV01JX1RMVl9QREVWX1BBUkFNX1BDSUVMUF9UWEJVRl9GTFVTSCwKKwkucGNpZWxwX3R4YnVmX3dhdGVybWFyayA9IFdNSV9UTFZfUERFVl9QQVJBTV9QQ0lFTFBfVFhCVUZfVE1PX0VOLAorCS5wY2llbHBfdHhidWZfdG1vX2VuID0gV01JX1RMVl9QREVWX1BBUkFNX1BDSUVMUF9UWEJVRl9UTU9fRU4sCisJLnBjaWVscF90eGJ1Zl90bW9fdmFsdWUgPSBXTUlfVExWX1BERVZfUEFSQU1fUENJRUxQX1RYQlVGX1RNT19WQUxVRSwKKwkucGRldl9zdGF0c191cGRhdGVfcGVyaW9kID0gV01JX1RMVl9QREVWX1BBUkFNX1BERVZfU1RBVFNfVVBEQVRFX1BFUklPRCwKKwkudmRldl9zdGF0c191cGRhdGVfcGVyaW9kID0gV01JX1RMVl9QREVWX1BBUkFNX1ZERVZfU1RBVFNfVVBEQVRFX1BFUklPRCwKKwkucGVlcl9zdGF0c191cGRhdGVfcGVyaW9kID0gV01JX1RMVl9QREVWX1BBUkFNX1BFRVJfU1RBVFNfVVBEQVRFX1BFUklPRCwKKwkuYmNuZmx0X3N0YXRzX3VwZGF0ZV9wZXJpb2QgPQorCQkJCVdNSV9UTFZfUERFVl9QQVJBTV9CQ05GTFRfU1RBVFNfVVBEQVRFX1BFUklPRCwKKwkucG1mX3FvcyA9IFdNSV9UTFZfUERFVl9QQVJBTV9QTUZfUU9TLAorCS5hcnBfYWNfb3ZlcnJpZGUgPSBXTUlfVExWX1BERVZfUEFSQU1fQVJQX0FDX09WRVJSSURFLAorCS5kY3MgPSBXTUlfVExWX1BERVZfUEFSQU1fRENTLAorCS5hbmlfZW5hYmxlID0gV01JX1RMVl9QREVWX1BBUkFNX0FOSV9FTkFCTEUsCisJLmFuaV9wb2xsX3BlcmlvZCA9IFdNSV9UTFZfUERFVl9QQVJBTV9BTklfUE9MTF9QRVJJT0QsCisJLmFuaV9saXN0ZW5fcGVyaW9kID0gV01JX1RMVl9QREVWX1BBUkFNX0FOSV9MSVNURU5fUEVSSU9ELAorCS5hbmlfb2ZkbV9sZXZlbCA9IFdNSV9UTFZfUERFVl9QQVJBTV9BTklfT0ZETV9MRVZFTCwKKwkuYW5pX2Nja19sZXZlbCA9IFdNSV9UTFZfUERFVl9QQVJBTV9BTklfQ0NLX0xFVkVMLAorCS5keW50eGNoYWluID0gV01JX1RMVl9QREVWX1BBUkFNX0RZTlRYQ0hBSU4sCisJLnByb3h5X3N0YSA9IFdNSV9UTFZfUERFVl9QQVJBTV9QUk9YWV9TVEEsCisJLmlkbGVfcHNfY29uZmlnID0gV01JX1RMVl9QREVWX1BBUkFNX0lETEVfUFNfQ09ORklHLAorCS5wb3dlcl9nYXRpbmdfc2xlZXAgPSBXTUlfVExWX1BERVZfUEFSQU1fUE9XRVJfR0FUSU5HX1NMRUVQLAorCS5mYXN0X2NoYW5uZWxfcmVzZXQgPSBXTUlfVExWX1BERVZfUEFSQU1fVU5TVVBQT1JURUQsCisJLmJ1cnN0X2R1ciA9IFdNSV9UTFZfUERFVl9QQVJBTV9CVVJTVF9EVVIsCisJLmJ1cnN0X2VuYWJsZSA9IFdNSV9UTFZfUERFVl9QQVJBTV9CVVJTVF9FTkFCTEUsCisJLmNhbF9wZXJpb2QgPSBXTUlfUERFVl9QQVJBTV9VTlNVUFBPUlRFRCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgd21pX3ZkZXZfcGFyYW1fbWFwIHdtaV90bHZfdmRldl9wYXJhbV9tYXAgPSB7CisJLnJ0c190aHJlc2hvbGQgPSBXTUlfVExWX1ZERVZfUEFSQU1fUlRTX1RIUkVTSE9MRCwKKwkuZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQgPSBXTUlfVExWX1ZERVZfUEFSQU1fRlJBR01FTlRBVElPTl9USFJFU0hPTEQsCisJLmJlYWNvbl9pbnRlcnZhbCA9IFdNSV9UTFZfVkRFVl9QQVJBTV9CRUFDT05fSU5URVJWQUwsCisJLmxpc3Rlbl9pbnRlcnZhbCA9IFdNSV9UTFZfVkRFVl9QQVJBTV9MSVNURU5fSU5URVJWQUwsCisJLm11bHRpY2FzdF9yYXRlID0gV01JX1RMVl9WREVWX1BBUkFNX01VTFRJQ0FTVF9SQVRFLAorCS5tZ210X3R4X3JhdGUgPSBXTUlfVExWX1ZERVZfUEFSQU1fTUdNVF9UWF9SQVRFLAorCS5zbG90X3RpbWUgPSBXTUlfVExWX1ZERVZfUEFSQU1fU0xPVF9USU1FLAorCS5wcmVhbWJsZSA9IFdNSV9UTFZfVkRFVl9QQVJBTV9QUkVBTUJMRSwKKwkuc3diYV90aW1lID0gV01JX1RMVl9WREVWX1BBUkFNX1NXQkFfVElNRSwKKwkud21pX3ZkZXZfc3RhdHNfdXBkYXRlX3BlcmlvZCA9IFdNSV9UTFZfVkRFVl9TVEFUU19VUERBVEVfUEVSSU9ELAorCS53bWlfdmRldl9wd3JzYXZlX2FnZW91dF90aW1lID0gV01JX1RMVl9WREVWX1BXUlNBVkVfQUdFT1VUX1RJTUUsCisJLndtaV92ZGV2X2hvc3Rfc3diYV9pbnRlcnZhbCA9IFdNSV9UTFZfVkRFVl9IT1NUX1NXQkFfSU5URVJWQUwsCisJLmR0aW1fcGVyaW9kID0gV01JX1RMVl9WREVWX1BBUkFNX0RUSU1fUEVSSU9ELAorCS53bWlfdmRldl9vY19zY2hlZHVsZXJfYWlyX3RpbWVfbGltaXQgPQorCQkJCVdNSV9UTFZfVkRFVl9PQ19TQ0hFRFVMRVJfQUlSX1RJTUVfTElNSVQsCisJLndkcyA9IFdNSV9UTFZfVkRFVl9QQVJBTV9XRFMsCisJLmF0aW1fd2luZG93ID0gV01JX1RMVl9WREVWX1BBUkFNX0FUSU1fV0lORE9XLAorCS5ibWlzc19jb3VudF9tYXggPSBXTUlfVExWX1ZERVZfUEFSQU1fQk1JU1NfQ09VTlRfTUFYLAorCS5ibWlzc19maXJzdF9iY250ID0gV01JX1RMVl9WREVWX1BBUkFNX0JNSVNTX0ZJUlNUX0JDTlQsCisJLmJtaXNzX2ZpbmFsX2JjbnQgPSBXTUlfVExWX1ZERVZfUEFSQU1fQk1JU1NfRklOQUxfQkNOVCwKKwkuZmVhdHVyZV93bW0gPSBXTUlfVExWX1ZERVZfUEFSQU1fRkVBVFVSRV9XTU0sCisJLmNod2lkdGggPSBXTUlfVExWX1ZERVZfUEFSQU1fQ0hXSURUSCwKKwkuY2hleHRvZmZzZXQgPSBXTUlfVExWX1ZERVZfUEFSQU1fQ0hFWFRPRkZTRVQsCisJLmRpc2FibGVfaHRwcm90ZWN0aW9uID0JV01JX1RMVl9WREVWX1BBUkFNX0RJU0FCTEVfSFRQUk9URUNUSU9OLAorCS5zdGFfcXVpY2traWNrb3V0ID0gV01JX1RMVl9WREVWX1BBUkFNX1NUQV9RVUlDS0tJQ0tPVVQsCisJLm1nbXRfcmF0ZSA9IFdNSV9UTFZfVkRFVl9QQVJBTV9NR01UX1JBVEUsCisJLnByb3RlY3Rpb25fbW9kZSA9IFdNSV9UTFZfVkRFVl9QQVJBTV9QUk9URUNUSU9OX01PREUsCisJLmZpeGVkX3JhdGUgPSBXTUlfVExWX1ZERVZfUEFSQU1fRklYRURfUkFURSwKKwkuc2dpID0gV01JX1RMVl9WREVWX1BBUkFNX1NHSSwKKwkubGRwYyA9IFdNSV9UTFZfVkRFVl9QQVJBTV9MRFBDLAorCS50eF9zdGJjID0gV01JX1RMVl9WREVWX1BBUkFNX1RYX1NUQkMsCisJLnJ4X3N0YmMgPSBXTUlfVExWX1ZERVZfUEFSQU1fUlhfU1RCQywKKwkuaW50cmFfYnNzX2Z3ZCA9IFdNSV9UTFZfVkRFVl9QQVJBTV9JTlRSQV9CU1NfRldELAorCS5kZWZfa2V5aWQgPSBXTUlfVExWX1ZERVZfUEFSQU1fREVGX0tFWUlELAorCS5uc3MgPSBXTUlfVExWX1ZERVZfUEFSQU1fTlNTLAorCS5iY2FzdF9kYXRhX3JhdGUgPSBXTUlfVExWX1ZERVZfUEFSQU1fQkNBU1RfREFUQV9SQVRFLAorCS5tY2FzdF9kYXRhX3JhdGUgPSBXTUlfVExWX1ZERVZfUEFSQU1fTUNBU1RfREFUQV9SQVRFLAorCS5tY2FzdF9pbmRpY2F0ZSA9IFdNSV9UTFZfVkRFVl9QQVJBTV9NQ0FTVF9JTkRJQ0FURSwKKwkuZGhjcF9pbmRpY2F0ZSA9IFdNSV9UTFZfVkRFVl9QQVJBTV9ESENQX0lORElDQVRFLAorCS51bmtub3duX2Rlc3RfaW5kaWNhdGUgPSBXTUlfVExWX1ZERVZfUEFSQU1fVU5LTk9XTl9ERVNUX0lORElDQVRFLAorCS5hcF9rZWVwYWxpdmVfbWluX2lkbGVfaW5hY3RpdmVfdGltZV9zZWNzID0KKwkJV01JX1RMVl9WREVWX1BBUkFNX0FQX0tFRVBBTElWRV9NSU5fSURMRV9JTkFDVElWRV9USU1FX1NFQ1MsCisJLmFwX2tlZXBhbGl2ZV9tYXhfaWRsZV9pbmFjdGl2ZV90aW1lX3NlY3MgPQorCQlXTUlfVExWX1ZERVZfUEFSQU1fQVBfS0VFUEFMSVZFX01BWF9JRExFX0lOQUNUSVZFX1RJTUVfU0VDUywKKwkuYXBfa2VlcGFsaXZlX21heF91bnJlc3BvbnNpdmVfdGltZV9zZWNzID0KKwkJV01JX1RMVl9WREVWX1BBUkFNX0FQX0tFRVBBTElWRV9NQVhfVU5SRVNQT05TSVZFX1RJTUVfU0VDUywKKwkuYXBfZW5hYmxlX25hd2RzID0gV01JX1RMVl9WREVWX1BBUkFNX0FQX0VOQUJMRV9OQVdEUywKKwkubWNhc3QydWNhc3Rfc2V0ID0gV01JX1RMVl9WREVWX1BBUkFNX1VOU1VQUE9SVEVELAorCS5lbmFibGVfcnRzY3RzID0gV01JX1RMVl9WREVWX1BBUkFNX0VOQUJMRV9SVFNDVFMsCisJLnR4YmYgPSBXTUlfVExWX1ZERVZfUEFSQU1fVFhCRiwKKwkucGFja2V0X3Bvd2Vyc2F2ZSA9IFdNSV9UTFZfVkRFVl9QQVJBTV9QQUNLRVRfUE9XRVJTQVZFLAorCS5kcm9wX3VuZW5jcnkgPSBXTUlfVExWX1ZERVZfUEFSQU1fRFJPUF9VTkVOQ1JZLAorCS50eF9lbmNhcF90eXBlID0gV01JX1RMVl9WREVWX1BBUkFNX1RYX0VOQ0FQX1RZUEUsCisJLmFwX2RldGVjdF9vdXRfb2Zfc3luY19zbGVlcGluZ19zdGFfdGltZV9zZWNzID0KKwkJCQkJV01JX1RMVl9WREVWX1BBUkFNX1VOU1VQUE9SVEVELAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB3bWlfb3BzIHdtaV90bHZfb3BzID0geworCS5yeCA9IGF0aDEwa193bWlfdGx2X29wX3J4LAorCS5tYXBfc3ZjID0gd21pX3Rsdl9zdmNfbWFwLAorCisJLnB1bGxfc2NhbiA9IGF0aDEwa193bWlfdGx2X29wX3B1bGxfc2Nhbl9ldiwKKwkucHVsbF9tZ210X3J4ID0gYXRoMTBrX3dtaV90bHZfb3BfcHVsbF9tZ210X3J4X2V2LAorCS5wdWxsX2NoX2luZm8gPSBhdGgxMGtfd21pX3Rsdl9vcF9wdWxsX2NoX2luZm9fZXYsCisJLnB1bGxfdmRldl9zdGFydCA9IGF0aDEwa193bWlfdGx2X29wX3B1bGxfdmRldl9zdGFydF9ldiwKKwkucHVsbF9wZWVyX2tpY2sgPSBhdGgxMGtfd21pX3Rsdl9vcF9wdWxsX3BlZXJfa2lja19ldiwKKwkucHVsbF9zd2JhID0gYXRoMTBrX3dtaV90bHZfb3BfcHVsbF9zd2JhX2V2LAorCS5wdWxsX3BoeWVyciA9IGF0aDEwa193bWlfdGx2X29wX3B1bGxfcGh5ZXJyX2V2LAorCS5wdWxsX3N2Y19yZHkgPSBhdGgxMGtfd21pX3Rsdl9vcF9wdWxsX3N2Y19yZHlfZXYsCisJLnB1bGxfcmR5ID0gYXRoMTBrX3dtaV90bHZfb3BfcHVsbF9yZHlfZXYsCisJLnB1bGxfZndfc3RhdHMgPSBhdGgxMGtfd21pX3Rsdl9vcF9wdWxsX2Z3X3N0YXRzLAorCisJLmdlbl9wZGV2X3N1c3BlbmQgPSBhdGgxMGtfd21pX3Rsdl9vcF9nZW5fcGRldl9zdXNwZW5kLAorCS5nZW5fcGRldl9yZXN1bWUgPSBhdGgxMGtfd21pX3Rsdl9vcF9nZW5fcGRldl9yZXN1bWUsCisJLmdlbl9wZGV2X3NldF9yZCA9IGF0aDEwa193bWlfdGx2X29wX2dlbl9wZGV2X3NldF9yZCwKKwkuZ2VuX3BkZXZfc2V0X3BhcmFtID0gYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3BkZXZfc2V0X3BhcmFtLAorCS5nZW5faW5pdCA9IGF0aDEwa193bWlfdGx2X29wX2dlbl9pbml0LAorCS5nZW5fc3RhcnRfc2NhbiA9IGF0aDEwa193bWlfdGx2X29wX2dlbl9zdGFydF9zY2FuLAorCS5nZW5fc3RvcF9zY2FuID0gYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3N0b3Bfc2NhbiwKKwkuZ2VuX3ZkZXZfY3JlYXRlID0gYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3ZkZXZfY3JlYXRlLAorCS5nZW5fdmRldl9kZWxldGUgPSBhdGgxMGtfd21pX3Rsdl9vcF9nZW5fdmRldl9kZWxldGUsCisJLmdlbl92ZGV2X3N0YXJ0ID0gYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3ZkZXZfc3RhcnQsCisJLmdlbl92ZGV2X3N0b3AgPSBhdGgxMGtfd21pX3Rsdl9vcF9nZW5fdmRldl9zdG9wLAorCS5nZW5fdmRldl91cCA9IGF0aDEwa193bWlfdGx2X29wX2dlbl92ZGV2X3VwLAorCS5nZW5fdmRldl9kb3duID0gYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3ZkZXZfZG93biwKKwkuZ2VuX3ZkZXZfc2V0X3BhcmFtID0gYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3ZkZXZfc2V0X3BhcmFtLAorCS5nZW5fdmRldl9pbnN0YWxsX2tleSA9IGF0aDEwa193bWlfdGx2X29wX2dlbl92ZGV2X2luc3RhbGxfa2V5LAorCS5nZW5fdmRldl93bW1fY29uZiA9IGF0aDEwa193bWlfdGx2X29wX2dlbl92ZGV2X3dtbV9jb25mLAorCS5nZW5fcGVlcl9jcmVhdGUgPSBhdGgxMGtfd21pX3Rsdl9vcF9nZW5fcGVlcl9jcmVhdGUsCisJLmdlbl9wZWVyX2RlbGV0ZSA9IGF0aDEwa193bWlfdGx2X29wX2dlbl9wZWVyX2RlbGV0ZSwKKwkuZ2VuX3BlZXJfZmx1c2ggPSBhdGgxMGtfd21pX3Rsdl9vcF9nZW5fcGVlcl9mbHVzaCwKKwkuZ2VuX3BlZXJfc2V0X3BhcmFtID0gYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3BlZXJfc2V0X3BhcmFtLAorCS5nZW5fcGVlcl9hc3NvYyA9IGF0aDEwa193bWlfdGx2X29wX2dlbl9wZWVyX2Fzc29jLAorCS5nZW5fc2V0X3BzbW9kZSA9IGF0aDEwa193bWlfdGx2X29wX2dlbl9zZXRfcHNtb2RlLAorCS5nZW5fc2V0X3N0YV9wcyA9IGF0aDEwa193bWlfdGx2X29wX2dlbl9zZXRfc3RhX3BzLAorCS5nZW5fc2V0X2FwX3BzID0gYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3NldF9hcF9wcywKKwkuZ2VuX3NjYW5fY2hhbl9saXN0ID0gYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3NjYW5fY2hhbl9saXN0LAorCS5nZW5fYmVhY29uX2RtYSA9IGF0aDEwa193bWlfdGx2X29wX2dlbl9iZWFjb25fZG1hLAorCS5nZW5fcGRldl9zZXRfd21tID0gYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3BkZXZfc2V0X3dtbSwKKwkuZ2VuX3JlcXVlc3Rfc3RhdHMgPSBhdGgxMGtfd21pX3Rsdl9vcF9nZW5fcmVxdWVzdF9zdGF0cywKKwkuZ2VuX2ZvcmNlX2Z3X2hhbmcgPSBhdGgxMGtfd21pX3Rsdl9vcF9nZW5fZm9yY2VfZndfaGFuZywKKwkvKiAuZ2VuX21nbXRfdHggPSBub3QgaW1wbGVtZW50ZWQ7IEhUVCBpcyB1c2VkICovCisJLmdlbl9kYmdsb2dfY2ZnID0gYXRoMTBrX3dtaV90bHZfb3BfZ2VuX2RiZ2xvZ19jZmcsCisJLmdlbl9wa3Rsb2dfZW5hYmxlID0gYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3BrdGxvZ19lbmFibGUsCisJLmdlbl9wa3Rsb2dfZGlzYWJsZSA9IGF0aDEwa193bWlfdGx2X29wX2dlbl9wa3Rsb2dfZGlzYWJsZSwKKwkvKiAuZ2VuX3BkZXZfc2V0X3F1aWV0X21vZGUgbm90IGltcGxlbWVudGVkICovCisJLyogLmdlbl9wZGV2X2dldF90ZW1wZXJhdHVyZSBub3QgaW1wbGVtZW50ZWQgKi8KKwkvKiAuZ2VuX2FkZGJhX2NsZWFyX3Jlc3Agbm90IGltcGxlbWVudGVkICovCisJLyogLmdlbl9hZGRiYV9zZW5kIG5vdCBpbXBsZW1lbnRlZCAqLworCS8qIC5nZW5fYWRkYmFfc2V0X3Jlc3Agbm90IGltcGxlbWVudGVkICovCisJLyogLmdlbl9kZWxiYV9zZW5kIG5vdCBpbXBsZW1lbnRlZCAqLworCS5nZW5fYmNuX3RtcGwgPSBhdGgxMGtfd21pX3Rsdl9vcF9nZW5fYmNuX3RtcGwsCisJLmdlbl9wcmJfdG1wbCA9IGF0aDEwa193bWlfdGx2X29wX2dlbl9wcmJfdG1wbCwKKwkuZ2VuX3AycF9nb19iY25faWUgPSBhdGgxMGtfd21pX3Rsdl9vcF9nZW5fcDJwX2dvX2Jjbl9pZSwKKwkuZ2VuX3ZkZXZfc3RhX3VhcHNkID0gYXRoMTBrX3dtaV90bHZfb3BfZ2VuX3ZkZXZfc3RhX3VhcHNkLAorCS5nZW5fc3RhX2tlZXBhbGl2ZSA9IGF0aDEwa193bWlfdGx2X29wX2dlbl9zdGFfa2VlcGFsaXZlLAorfTsKKworLyoqKioqKioqKioqKi8KKy8qIFRMViBpbml0ICovCisvKioqKioqKioqKioqLworCit2b2lkIGF0aDEwa193bWlfdGx2X2F0dGFjaChzdHJ1Y3QgYXRoMTBrICphcikKK3sKKwlhci0+d21pLmNtZCA9ICZ3bWlfdGx2X2NtZF9tYXA7CisJYXItPndtaS52ZGV2X3BhcmFtID0gJndtaV90bHZfdmRldl9wYXJhbV9tYXA7CisJYXItPndtaS5wZGV2X3BhcmFtID0gJndtaV90bHZfcGRldl9wYXJhbV9tYXA7CisJYXItPndtaS5vcHMgPSAmd21pX3Rsdl9vcHM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3dtaS10bHYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLXRsdi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjhmZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3dtaS10bHYuaApAQCAtMCwwICsxLDE0NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAxMSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMS0yMDE0IFF1YWxjb21tIEF0aGVyb3MsIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworI2lmbmRlZiBfV01JX1RMVl9ICisjZGVmaW5lIF9XTUlfVExWX0gKKworI2RlZmluZSBXTUlfVExWX0NNRChncnBfaWQpICgoKGdycF9pZCkgPDwgMTIpIHwgMHgxKQorI2RlZmluZSBXTUlfVExWX0VWKGdycF9pZCkgKCgoZ3JwX2lkKSA8PCAxMikgfCAweDEpCisjZGVmaW5lIFdNSV9UTFZfQ01EX1VOU1VQUE9SVEVEIDAKKyNkZWZpbmUgV01JX1RMVl9QREVWX1BBUkFNX1VOU1VQUE9SVEVEIDAKKyNkZWZpbmUgV01JX1RMVl9WREVWX1BBUkFNX1VOU1VQUE9SVEVEIDAKKworZW51bSB3bWlfdGx2X2dycF9pZCB7CisJV01JX1RMVl9HUlBfU1RBUlQgPSAweDMsCisJV01JX1RMVl9HUlBfU0NBTiA9IFdNSV9UTFZfR1JQX1NUQVJULAorCVdNSV9UTFZfR1JQX1BERVYsCisJV01JX1RMVl9HUlBfVkRFViwKKwlXTUlfVExWX0dSUF9QRUVSLAorCVdNSV9UTFZfR1JQX01HTVQsCisJV01JX1RMVl9HUlBfQkFfTkVHLAorCVdNSV9UTFZfR1JQX1NUQV9QUywKKwlXTUlfVExWX0dSUF9ERlMsCisJV01JX1RMVl9HUlBfUk9BTSwKKwlXTUlfVExWX0dSUF9PRkxfU0NBTiwKKwlXTUlfVExWX0dSUF9QMlAsCisJV01JX1RMVl9HUlBfQVBfUFMsCisJV01JX1RMVl9HUlBfUkFURUNUTCwKKwlXTUlfVExWX0dSUF9QUk9GSUxFLAorCVdNSV9UTFZfR1JQX1NVU1BFTkQsCisJV01JX1RMVl9HUlBfQkNOX0ZJTFRFUiwKKwlXTUlfVExWX0dSUF9XT1csCisJV01JX1RMVl9HUlBfUlRULAorCVdNSV9UTFZfR1JQX1NQRUNUUkFMLAorCVdNSV9UTFZfR1JQX1NUQVRTLAorCVdNSV9UTFZfR1JQX0FSUF9OU19PRkwsCisJV01JX1RMVl9HUlBfTkxPX09GTCwKKwlXTUlfVExWX0dSUF9HVEtfT0ZMLAorCVdNSV9UTFZfR1JQX0NTQV9PRkwsCisJV01JX1RMVl9HUlBfQ0hBVFRFUiwKKwlXTUlfVExWX0dSUF9USURfQUREQkEsCisJV01JX1RMVl9HUlBfTUlTQywKKwlXTUlfVExWX0dSUF9HUElPLAorCVdNSV9UTFZfR1JQX0ZXVEVTVCwKKwlXTUlfVExWX0dSUF9URExTLAorCVdNSV9UTFZfR1JQX1JFU01HUiwKKwlXTUlfVExWX0dSUF9TVEFfU01QUywKKwlXTUlfVExWX0dSUF9XTEFOX0hCLAorCVdNSV9UTFZfR1JQX1JNQywKKwlXTUlfVExWX0dSUF9NSEZfT0ZMLAorCVdNSV9UTFZfR1JQX0xPQ0FUSU9OX1NDQU4sCisJV01JX1RMVl9HUlBfT0VNLAorCVdNSV9UTFZfR1JQX05BTiwKKwlXTUlfVExWX0dSUF9DT0VYLAorCVdNSV9UTFZfR1JQX09CU1NfT0ZMLAorCVdNSV9UTFZfR1JQX0xQSSwKKwlXTUlfVExWX0dSUF9FWFRTQ0FOLAorCVdNSV9UTFZfR1JQX0RIQ1BfT0ZMLAorCVdNSV9UTFZfR1JQX0lQQSwKKwlXTUlfVExWX0dSUF9NRE5TX09GTCwKKwlXTUlfVExWX0dSUF9TQVBfT0ZMLAorfTsKKworZW51bSB3bWlfdGx2X2NtZF9pZCB7CisJV01JX1RMVl9JTklUX0NNRElEID0gMHgxLAorCVdNSV9UTFZfU1RBUlRfU0NBTl9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX1NDQU4pLAorCVdNSV9UTFZfU1RPUF9TQ0FOX0NNRElELAorCVdNSV9UTFZfU0NBTl9DSEFOX0xJU1RfQ01ESUQsCisJV01JX1RMVl9TQ0FOX1NDSF9QUklPX1RCTF9DTURJRCwKKwlXTUlfVExWX1NDQU5fVVBEQVRFX1JFUVVFU1RfQ01ESUQsCisJV01JX1RMVl9TQ0FOX1BST0JfUkVRX09VSV9DTURJRCwKKwlXTUlfVExWX1BERVZfU0VUX1JFR0RPTUFJTl9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX1BERVYpLAorCVdNSV9UTFZfUERFVl9TRVRfQ0hBTk5FTF9DTURJRCwKKwlXTUlfVExWX1BERVZfU0VUX1BBUkFNX0NNRElELAorCVdNSV9UTFZfUERFVl9QS1RMT0dfRU5BQkxFX0NNRElELAorCVdNSV9UTFZfUERFVl9QS1RMT0dfRElTQUJMRV9DTURJRCwKKwlXTUlfVExWX1BERVZfU0VUX1dNTV9QQVJBTVNfQ01ESUQsCisJV01JX1RMVl9QREVWX1NFVF9IVF9DQVBfSUVfQ01ESUQsCisJV01JX1RMVl9QREVWX1NFVF9WSFRfQ0FQX0lFX0NNRElELAorCVdNSV9UTFZfUERFVl9TRVRfRFNDUF9USURfTUFQX0NNRElELAorCVdNSV9UTFZfUERFVl9TRVRfUVVJRVRfTU9ERV9DTURJRCwKKwlXTUlfVExWX1BERVZfR1JFRU5fQVBfUFNfRU5BQkxFX0NNRElELAorCVdNSV9UTFZfUERFVl9HRVRfVFBDX0NPTkZJR19DTURJRCwKKwlXTUlfVExWX1BERVZfU0VUX0JBU0VfTUFDQUREUl9DTURJRCwKKwlXTUlfVExWX1BERVZfRFVNUF9DTURJRCwKKwlXTUlfVExWX1BERVZfU0VUX0xFRF9DT05GSUdfQ01ESUQsCisJV01JX1RMVl9QREVWX0dFVF9URU1QRVJBVFVSRV9DTURJRCwKKwlXTUlfVExWX1BERVZfU0VUX0xFRF9GTEFTSElOR19DTURJRCwKKwlXTUlfVExWX1ZERVZfQ1JFQVRFX0NNRElEID0gV01JX1RMVl9DTUQoV01JX1RMVl9HUlBfVkRFViksCisJV01JX1RMVl9WREVWX0RFTEVURV9DTURJRCwKKwlXTUlfVExWX1ZERVZfU1RBUlRfUkVRVUVTVF9DTURJRCwKKwlXTUlfVExWX1ZERVZfUkVTVEFSVF9SRVFVRVNUX0NNRElELAorCVdNSV9UTFZfVkRFVl9VUF9DTURJRCwKKwlXTUlfVExWX1ZERVZfU1RPUF9DTURJRCwKKwlXTUlfVExWX1ZERVZfRE9XTl9DTURJRCwKKwlXTUlfVExWX1ZERVZfU0VUX1BBUkFNX0NNRElELAorCVdNSV9UTFZfVkRFVl9JTlNUQUxMX0tFWV9DTURJRCwKKwlXTUlfVExWX1ZERVZfV05NX1NMRUVQTU9ERV9DTURJRCwKKwlXTUlfVExWX1ZERVZfV01NX0FERFRTX0NNRElELAorCVdNSV9UTFZfVkRFVl9XTU1fREVMVFNfQ01ESUQsCisJV01JX1RMVl9WREVWX1NFVF9XTU1fUEFSQU1TX0NNRElELAorCVdNSV9UTFZfVkRFVl9TRVRfR1RYX1BBUkFNU19DTURJRCwKKwlXTUlfVExWX1ZERVZfSVBTRUNfTkFUS0VFUEFMSVZFX0ZJTFRFUl9DTURJRCwKKwlXTUlfVExWX1ZERVZfUExNUkVRX1NUQVJUX0NNRElELAorCVdNSV9UTFZfVkRFVl9QTE1SRVFfU1RPUF9DTURJRCwKKwlXTUlfVExWX1BFRVJfQ1JFQVRFX0NNRElEID0gV01JX1RMVl9DTUQoV01JX1RMVl9HUlBfUEVFUiksCisJV01JX1RMVl9QRUVSX0RFTEVURV9DTURJRCwKKwlXTUlfVExWX1BFRVJfRkxVU0hfVElEU19DTURJRCwKKwlXTUlfVExWX1BFRVJfU0VUX1BBUkFNX0NNRElELAorCVdNSV9UTFZfUEVFUl9BU1NPQ19DTURJRCwKKwlXTUlfVExWX1BFRVJfQUREX1dEU19FTlRSWV9DTURJRCwKKwlXTUlfVExWX1BFRVJfUkVNT1ZFX1dEU19FTlRSWV9DTURJRCwKKwlXTUlfVExWX1BFRVJfTUNBU1RfR1JPVVBfQ01ESUQsCisJV01JX1RMVl9QRUVSX0lORk9fUkVRX0NNRElELAorCVdNSV9UTFZfUEVFUl9HRVRfRVNUSU1BVEVEX0xJTktTUEVFRF9DTURJRCwKKwlXTUlfVExWX0JDTl9UWF9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX01HTVQpLAorCVdNSV9UTFZfUERFVl9TRU5EX0JDTl9DTURJRCwKKwlXTUlfVExWX0JDTl9UTVBMX0NNRElELAorCVdNSV9UTFZfQkNOX0ZJTFRFUl9SWF9DTURJRCwKKwlXTUlfVExWX1BSQl9SRVFfRklMVEVSX1JYX0NNRElELAorCVdNSV9UTFZfTUdNVF9UWF9DTURJRCwKKwlXTUlfVExWX1BSQl9UTVBMX0NNRElELAorCVdNSV9UTFZfQUREQkFfQ0xFQVJfUkVTUF9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX0JBX05FRyksCisJV01JX1RMVl9BRERCQV9TRU5EX0NNRElELAorCVdNSV9UTFZfQUREQkFfU1RBVFVTX0NNRElELAorCVdNSV9UTFZfREVMQkFfU0VORF9DTURJRCwKKwlXTUlfVExWX0FEREJBX1NFVF9SRVNQX0NNRElELAorCVdNSV9UTFZfU0VORF9TSU5HTEVBTVNEVV9DTURJRCwKKwlXTUlfVExWX1NUQV9QT1dFUlNBVkVfTU9ERV9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX1NUQV9QUyksCisJV01JX1RMVl9TVEFfUE9XRVJTQVZFX1BBUkFNX0NNRElELAorCVdNSV9UTFZfU1RBX01JTU9fUFNfTU9ERV9DTURJRCwKKwlXTUlfVExWX1BERVZfREZTX0VOQUJMRV9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX0RGUyksCisJV01JX1RMVl9QREVWX0RGU19ESVNBQkxFX0NNRElELAorCVdNSV9UTFZfREZTX1BIWUVSUl9GSUxURVJfRU5BX0NNRElELAorCVdNSV9UTFZfREZTX1BIWUVSUl9GSUxURVJfRElTX0NNRElELAorCVdNSV9UTFZfUk9BTV9TQ0FOX01PREUgPSBXTUlfVExWX0NNRChXTUlfVExWX0dSUF9ST0FNKSwKKwlXTUlfVExWX1JPQU1fU0NBTl9SU1NJX1RIUkVTSE9MRCwKKwlXTUlfVExWX1JPQU1fU0NBTl9QRVJJT0QsCisJV01JX1RMVl9ST0FNX1NDQU5fUlNTSV9DSEFOR0VfVEhSRVNIT0xELAorCVdNSV9UTFZfUk9BTV9BUF9QUk9GSUxFLAorCVdNSV9UTFZfUk9BTV9DSEFOX0xJU1QsCisJV01JX1RMVl9ST0FNX1NDQU5fQ01ELAorCVdNSV9UTFZfUk9BTV9TWU5DSF9DT01QTEVURSwKKwlXTUlfVExWX1JPQU1fU0VUX1JJQ19SRVFVRVNUX0NNRElELAorCVdNSV9UTFZfUk9BTV9JTlZPS0VfQ01ESUQsCisJV01JX1RMVl9PRkxfU0NBTl9BRERfQVBfUFJPRklMRSA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX09GTF9TQ0FOKSwKKwlXTUlfVExWX09GTF9TQ0FOX1JFTU9WRV9BUF9QUk9GSUxFLAorCVdNSV9UTFZfT0ZMX1NDQU5fUEVSSU9ELAorCVdNSV9UTFZfUDJQX0RFVl9TRVRfREVWSUNFX0lORk8gPSBXTUlfVExWX0NNRChXTUlfVExWX0dSUF9QMlApLAorCVdNSV9UTFZfUDJQX0RFVl9TRVRfRElTQ09WRVJBQklMSVRZLAorCVdNSV9UTFZfUDJQX0dPX1NFVF9CRUFDT05fSUUsCisJV01JX1RMVl9QMlBfR09fU0VUX1BST0JFX1JFU1BfSUUsCisJV01JX1RMVl9QMlBfU0VUX1ZFTkRPUl9JRV9EQVRBX0NNRElELAorCVdNSV9UTFZfUDJQX0RJU0NfT0ZGTE9BRF9DT05GSUdfQ01ESUQsCisJV01JX1RMVl9QMlBfRElTQ19PRkZMT0FEX0FQUElFX0NNRElELAorCVdNSV9UTFZfUDJQX0RJU0NfT0ZGTE9BRF9QQVRURVJOX0NNRElELAorCVdNSV9UTFZfUDJQX1NFVF9PUFBQU19QQVJBTV9DTURJRCwKKwlXTUlfVExWX0FQX1BTX1BFRVJfUEFSQU1fQ01ESUQgPSBXTUlfVExWX0NNRChXTUlfVExWX0dSUF9BUF9QUyksCisJV01JX1RMVl9BUF9QU19QRUVSX1VBUFNEX0NPRVhfQ01ESUQsCisJV01JX1RMVl9QRUVSX1JBVEVfUkVUUllfU0NIRURfQ01ESUQgPSBXTUlfVExWX0NNRChXTUlfVExWX0dSUF9SQVRFQ1RMKSwKKwlXTUlfVExWX1dMQU5fUFJPRklMRV9UUklHR0VSX0NNRElEID0gV01JX1RMVl9DTUQoV01JX1RMVl9HUlBfUFJPRklMRSksCisJV01JX1RMVl9XTEFOX1BST0ZJTEVfU0VUX0hJU1RfSU5UVkxfQ01ESUQsCisJV01JX1RMVl9XTEFOX1BST0ZJTEVfR0VUX1BST0ZJTEVfREFUQV9DTURJRCwKKwlXTUlfVExWX1dMQU5fUFJPRklMRV9FTkFCTEVfUFJPRklMRV9JRF9DTURJRCwKKwlXTUlfVExWX1dMQU5fUFJPRklMRV9MSVNUX1BST0ZJTEVfSURfQ01ESUQsCisJV01JX1RMVl9QREVWX1NVU1BFTkRfQ01ESUQgPSBXTUlfVExWX0NNRChXTUlfVExWX0dSUF9TVVNQRU5EKSwKKwlXTUlfVExWX1BERVZfUkVTVU1FX0NNRElELAorCVdNSV9UTFZfQUREX0JDTl9GSUxURVJfQ01ESUQgPSBXTUlfVExWX0NNRChXTUlfVExWX0dSUF9CQ05fRklMVEVSKSwKKwlXTUlfVExWX1JNVl9CQ05fRklMVEVSX0NNRElELAorCVdNSV9UTFZfV09XX0FERF9XQUtFX1BBVFRFUk5fQ01ESUQgPSBXTUlfVExWX0NNRChXTUlfVExWX0dSUF9XT1cpLAorCVdNSV9UTFZfV09XX0RFTF9XQUtFX1BBVFRFUk5fQ01ESUQsCisJV01JX1RMVl9XT1dfRU5BQkxFX0RJU0FCTEVfV0FLRV9FVkVOVF9DTURJRCwKKwlXTUlfVExWX1dPV19FTkFCTEVfQ01ESUQsCisJV01JX1RMVl9XT1dfSE9TVFdBS0VVUF9GUk9NX1NMRUVQX0NNRElELAorCVdNSV9UTFZfV09XX0FDRVJfSU9BQ19BRERfS0VFUEFMSVZFX0NNRElELAorCVdNSV9UTFZfV09XX0FDRVJfSU9BQ19ERUxfS0VFUEFMSVZFX0NNRElELAorCVdNSV9UTFZfV09XX0FDRVJfSU9BQ19BRERfV0FLRV9QQVRURVJOX0NNRElELAorCVdNSV9UTFZfV09XX0FDRVJfSU9BQ19ERUxfV0FLRV9QQVRURVJOX0NNRElELAorCVdNSV9UTFZfRDBfV09XX0VOQUJMRV9ESVNBQkxFX0NNRElELAorCVdNSV9UTFZfRVhUV09XX0VOQUJMRV9DTURJRCwKKwlXTUlfVExWX0VYVFdPV19TRVRfQVBQX1RZUEUxX1BBUkFNU19DTURJRCwKKwlXTUlfVExWX0VYVFdPV19TRVRfQVBQX1RZUEUyX1BBUkFNU19DTURJRCwKKwlXTUlfVExWX1JUVF9NRUFTUkVRX0NNRElEID0gV01JX1RMVl9DTUQoV01JX1RMVl9HUlBfUlRUKSwKKwlXTUlfVExWX1JUVF9UU0ZfQ01ESUQsCisJV01JX1RMVl9TUEVDVFJBTF9TQ0FOX0NPTkZfQ01ESUQgPSBXTUlfVExWX0NNRChXTUlfVExWX0dSUF9TUEVDVFJBTCksCisJV01JX1RMVl9TUEVDVFJBTF9TQ0FOX0VOQUJMRV9DTURJRCwKKwlXTUlfVExWX1JFUVVFU1RfU1RBVFNfQ01ESUQgPSBXTUlfVExWX0NNRChXTUlfVExWX0dSUF9TVEFUUyksCisJV01JX1RMVl9NQ0NfU0NIRURfVFJBRkZJQ19TVEFUU19DTURJRCwKKwlXTUlfVExWX1JFUVVFU1RfU1RBVFNfRVhUX0NNRElELAorCVdNSV9UTFZfUkVRVUVTVF9MSU5LX1NUQVRTX0NNRElELAorCVdNSV9UTFZfU1RBUlRfTElOS19TVEFUU19DTURJRCwKKwlXTUlfVExWX0NMRUFSX0xJTktfU1RBVFNfQ01ESUQsCisJV01JX1RMVl9TRVRfQVJQX05TX09GRkxPQURfQ01ESUQgPSBXTUlfVExWX0NNRChXTUlfVExWX0dSUF9BUlBfTlNfT0ZMKSwKKwlXTUlfVExWX0FERF9QUk9BQ1RJVkVfQVJQX1JTUF9QQVRURVJOX0NNRElELAorCVdNSV9UTFZfREVMX1BST0FDVElWRV9BUlBfUlNQX1BBVFRFUk5fQ01ESUQsCisJV01JX1RMVl9ORVRXT1JLX0xJU1RfT0ZGTE9BRF9DT05GSUdfQ01ESUQgPQorCQkJV01JX1RMVl9DTUQoV01JX1RMVl9HUlBfTkxPX09GTCksCisJV01JX1RMVl9BUEZJTkRfQ01ESUQsCisJV01JX1RMVl9HVEtfT0ZGTE9BRF9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX0dUS19PRkwpLAorCVdNSV9UTFZfQ1NBX09GRkxPQURfRU5BQkxFX0NNRElEID0gV01JX1RMVl9DTUQoV01JX1RMVl9HUlBfQ1NBX09GTCksCisJV01JX1RMVl9DU0FfT0ZGTE9BRF9DSEFOU1dJVENIX0NNRElELAorCVdNSV9UTFZfQ0hBVFRFUl9TRVRfTU9ERV9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX0NIQVRURVIpLAorCVdNSV9UTFZfQ0hBVFRFUl9BRERfQ09BTEVTQ0lOR19GSUxURVJfQ01ESUQsCisJV01JX1RMVl9DSEFUVEVSX0RFTEVURV9DT0FMRVNDSU5HX0ZJTFRFUl9DTURJRCwKKwlXTUlfVExWX0NIQVRURVJfQ09BTEVTQ0lOR19RVUVSWV9DTURJRCwKKwlXTUlfVExWX1BFRVJfVElEX0FEREJBX0NNRElEID0gV01JX1RMVl9DTUQoV01JX1RMVl9HUlBfVElEX0FEREJBKSwKKwlXTUlfVExWX1BFRVJfVElEX0RFTEJBX0NNRElELAorCVdNSV9UTFZfU1RBX0RUSU1fUFNfTUVUSE9EX0NNRElELAorCVdNSV9UTFZfU1RBX1VBUFNEX0FVVE9fVFJJR19DTURJRCwKKwlXTUlfVExWX1NUQV9LRUVQQUxJVkVfQ01ESUQsCisJV01JX1RMVl9CQV9SRVFfU1NOX0NNRElELAorCVdNSV9UTFZfRUNIT19DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX01JU0MpLAorCVdNSV9UTFZfUERFVl9VVEZfQ01ESUQsCisJV01JX1RMVl9EQkdMT0dfQ0ZHX0NNRElELAorCVdNSV9UTFZfUERFVl9RVklUX0NNRElELAorCVdNSV9UTFZfUERFVl9GVE1fSU5UR19DTURJRCwKKwlXTUlfVExWX1ZERVZfU0VUX0tFRVBBTElWRV9DTURJRCwKKwlXTUlfVExWX1ZERVZfR0VUX0tFRVBBTElWRV9DTURJRCwKKwlXTUlfVExWX0ZPUkNFX0ZXX0hBTkdfQ01ESUQsCisJV01JX1RMVl9TRVRfTUNBU1RCQ0FTVF9GSUxURVJfQ01ESUQsCisJV01JX1RMVl9USEVSTUFMX01HTVRfQ01ESUQsCisJV01JX1RMVl9IT1NUX0FVVE9fU0hVVERPV05fQ0ZHX0NNRElELAorCVdNSV9UTFZfVFBDX0NIQUlOTUFTS19DT05GSUdfQ01ESUQsCisJV01JX1RMVl9TRVRfQU5URU5OQV9ESVZFUlNJVFlfQ01ESUQsCisJV01JX1RMVl9HUElPX0NPTkZJR19DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX0dQSU8pLAorCVdNSV9UTFZfR1BJT19PVVRQVVRfQ01ESUQsCisJV01JX1RMVl9UWEJGX0NNRElELAorCVdNSV9UTFZfRldURVNUX1ZERVZfTUNDX1NFVF9UQlRUX01PREVfQ01ESUQgPQorCQkJV01JX1RMVl9DTUQoV01JX1RMVl9HUlBfRldURVNUKSwKKwlXTUlfVExWX0ZXVEVTVF9QMlBfU0VUX05PQV9QQVJBTV9DTURJRCwKKwlXTUlfVExWX1VOSVRfVEVTVF9DTURJRCwKKwlXTUlfVExWX1RETFNfU0VUX1NUQVRFX0NNRElEID0gV01JX1RMVl9DTUQoV01JX1RMVl9HUlBfVERMUyksCisJV01JX1RMVl9URExTX1BFRVJfVVBEQVRFX0NNRElELAorCVdNSV9UTFZfVERMU19TRVRfT0ZGQ0hBTl9NT0RFX0NNRElELAorCVdNSV9UTFZfUkVTTUdSX0FEQVBUSVZFX09DU19DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX1JFU01HUiksCisJV01JX1RMVl9SRVNNR1JfU0VUX0NIQU5fVElNRV9RVU9UQV9DTURJRCwKKwlXTUlfVExWX1JFU01HUl9TRVRfQ0hBTl9MQVRFTkNZX0NNRElELAorCVdNSV9UTFZfU1RBX1NNUFNfRk9SQ0VfTU9ERV9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX1NUQV9TTVBTKSwKKwlXTUlfVExWX1NUQV9TTVBTX1BBUkFNX0NNRElELAorCVdNSV9UTFZfSEJfU0VUX0VOQUJMRV9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX1dMQU5fSEIpLAorCVdNSV9UTFZfSEJfU0VUX1RDUF9QQVJBTVNfQ01ESUQsCisJV01JX1RMVl9IQl9TRVRfVENQX1BLVF9GSUxURVJfQ01ESUQsCisJV01JX1RMVl9IQl9TRVRfVURQX1BBUkFNU19DTURJRCwKKwlXTUlfVExWX0hCX1NFVF9VRFBfUEtUX0ZJTFRFUl9DTURJRCwKKwlXTUlfVExWX1JNQ19TRVRfTU9ERV9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX1JNQyksCisJV01JX1RMVl9STUNfU0VUX0FDVElPTl9QRVJJT0RfQ01ESUQsCisJV01JX1RMVl9STUNfQ09ORklHX0NNRElELAorCVdNSV9UTFZfTUhGX09GRkxPQURfU0VUX01PREVfQ01ESUQgPSBXTUlfVExWX0NNRChXTUlfVExWX0dSUF9NSEZfT0ZMKSwKKwlXTUlfVExWX01IRl9PRkZMT0FEX1BMVU1CX1JPVVRJTkdfVEJMX0NNRElELAorCVdNSV9UTFZfQkFUQ0hfU0NBTl9FTkFCTEVfQ01ESUQgPQorCQkJV01JX1RMVl9DTUQoV01JX1RMVl9HUlBfTE9DQVRJT05fU0NBTiksCisJV01JX1RMVl9CQVRDSF9TQ0FOX0RJU0FCTEVfQ01ESUQsCisJV01JX1RMVl9CQVRDSF9TQ0FOX1RSSUdHRVJfUkVTVUxUX0NNRElELAorCVdNSV9UTFZfT0VNX1JFUV9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX09FTSksCisJV01JX1RMVl9OQU5fQ01ESUQgPSBXTUlfVExWX0NNRChXTUlfVExWX0dSUF9OQU4pLAorCVdNSV9UTFZfTU9ERU1fUE9XRVJfU1RBVEVfQ01ESUQgPSBXTUlfVExWX0NNRChXTUlfVExWX0dSUF9DT0VYKSwKKwlXTUlfVExWX0NIQU5fQVZPSURfVVBEQVRFX0NNRElELAorCVdNSV9UTFZfT0JTU19TQ0FOX0VOQUJMRV9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX09CU1NfT0ZMKSwKKwlXTUlfVExWX09CU1NfU0NBTl9ESVNBQkxFX0NNRElELAorCVdNSV9UTFZfTFBJX01HTVRfU05PT1BJTkdfQ09ORklHX0NNRElEID0gV01JX1RMVl9DTUQoV01JX1RMVl9HUlBfTFBJKSwKKwlXTUlfVExWX0xQSV9TVEFSVF9TQ0FOX0NNRElELAorCVdNSV9UTFZfTFBJX1NUT1BfU0NBTl9DTURJRCwKKwlXTUlfVExWX0VYVFNDQU5fU1RBUlRfQ01ESUQgPSBXTUlfVExWX0NNRChXTUlfVExWX0dSUF9FWFRTQ0FOKSwKKwlXTUlfVExWX0VYVFNDQU5fU1RPUF9DTURJRCwKKwlXTUlfVExWX0VYVFNDQU5fQ09ORklHVVJFX1dMQU5fQ0hBTkdFX01PTklUT1JfQ01ESUQsCisJV01JX1RMVl9FWFRTQ0FOX0NPTkZJR1VSRV9IT1RMSVNUX01PTklUT1JfQ01ESUQsCisJV01JX1RMVl9FWFRTQ0FOX0dFVF9DQUNIRURfUkVTVUxUU19DTURJRCwKKwlXTUlfVExWX0VYVFNDQU5fR0VUX1dMQU5fQ0hBTkdFX1JFU1VMVFNfQ01ESUQsCisJV01JX1RMVl9FWFRTQ0FOX1NFVF9DQVBBQklMSVRJRVNfQ01ESUQsCisJV01JX1RMVl9FWFRTQ0FOX0dFVF9DQVBBQklMSVRJRVNfQ01ESUQsCisJV01JX1RMVl9TRVRfREhDUF9TRVJWRVJfT0ZGTE9BRF9DTURJRCA9CisJCQlXTUlfVExWX0NNRChXTUlfVExWX0dSUF9ESENQX09GTCksCisJV01JX1RMVl9JUEFfT0ZGTE9BRF9FTkFCTEVfRElTQUJMRV9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX0lQQSksCisJV01JX1RMVl9NRE5TX09GRkxPQURfRU5BQkxFX0NNRElEID0gV01JX1RMVl9DTUQoV01JX1RMVl9HUlBfTUROU19PRkwpLAorCVdNSV9UTFZfTUROU19TRVRfRlFETl9DTURJRCwKKwlXTUlfVExWX01ETlNfU0VUX1JFU1BPTlNFX0NNRElELAorCVdNSV9UTFZfTUROU19HRVRfU1RBVFNfQ01ESUQsCisJV01JX1RMVl9TQVBfT0ZMX0VOQUJMRV9DTURJRCA9IFdNSV9UTFZfQ01EKFdNSV9UTFZfR1JQX1NBUF9PRkwpLAorfTsKKworZW51bSB3bWlfdGx2X2V2ZW50X2lkIHsKKwlXTUlfVExWX1NFUlZJQ0VfUkVBRFlfRVZFTlRJRCA9IDB4MSwKKwlXTUlfVExWX1JFQURZX0VWRU5USUQsCisJV01JX1RMVl9TQ0FOX0VWRU5USUQgPSBXTUlfVExWX0VWKFdNSV9UTFZfR1JQX1NDQU4pLAorCVdNSV9UTFZfUERFVl9UUENfQ09ORklHX0VWRU5USUQgPSBXTUlfVExWX0VWKFdNSV9UTFZfR1JQX1BERVYpLAorCVdNSV9UTFZfQ0hBTl9JTkZPX0VWRU5USUQsCisJV01JX1RMVl9QSFlFUlJfRVZFTlRJRCwKKwlXTUlfVExWX1BERVZfRFVNUF9FVkVOVElELAorCVdNSV9UTFZfVFhfUEFVU0VfRVZFTlRJRCwKKwlXTUlfVExWX0RGU19SQURBUl9FVkVOVElELAorCVdNSV9UTFZfUERFVl9MMVNTX1RSQUNLX0VWRU5USUQsCisJV01JX1RMVl9QREVWX1RFTVBFUkFUVVJFX0VWRU5USUQsCisJV01JX1RMVl9WREVWX1NUQVJUX1JFU1BfRVZFTlRJRCA9IFdNSV9UTFZfRVYoV01JX1RMVl9HUlBfVkRFViksCisJV01JX1RMVl9WREVWX1NUT1BQRURfRVZFTlRJRCwKKwlXTUlfVExWX1ZERVZfSU5TVEFMTF9LRVlfQ09NUExFVEVfRVZFTlRJRCwKKwlXTUlfVExWX1ZERVZfTUNDX0JDTl9JTlRFUlZBTF9DSEFOR0VfUkVRX0VWRU5USUQsCisJV01JX1RMVl9QRUVSX1NUQV9LSUNLT1VUX0VWRU5USUQgPSBXTUlfVExWX0VWKFdNSV9UTFZfR1JQX1BFRVIpLAorCVdNSV9UTFZfUEVFUl9JTkZPX0VWRU5USUQsCisJV01JX1RMVl9QRUVSX1RYX0ZBSUxfQ05UX1RIUl9FVkVOVElELAorCVdNSV9UTFZfUEVFUl9FU1RJTUFURURfTElOS1NQRUVEX0VWRU5USUQsCisJV01JX1RMVl9QRUVSX1NUQVRFX0VWRU5USUQsCisJV01JX1RMVl9NR01UX1JYX0VWRU5USUQgPSBXTUlfVExWX0VWKFdNSV9UTFZfR1JQX01HTVQpLAorCVdNSV9UTFZfSE9TVF9TV0JBX0VWRU5USUQsCisJV01JX1RMVl9UQlRUT0ZGU0VUX1VQREFURV9FVkVOVElELAorCVdNSV9UTFZfT0ZGTE9BRF9CQ05fVFhfU1RBVFVTX0VWRU5USUQsCisJV01JX1RMVl9PRkZMT0FEX1BST0JfUkVTUF9UWF9TVEFUVVNfRVZFTlRJRCwKKwlXTUlfVExWX1RYX0RFTEJBX0NPTVBMRVRFX0VWRU5USUQgPSBXTUlfVExWX0VWKFdNSV9UTFZfR1JQX0JBX05FRyksCisJV01JX1RMVl9UWF9BRERCQV9DT01QTEVURV9FVkVOVElELAorCVdNSV9UTFZfQkFfUlNQX1NTTl9FVkVOVElELAorCVdNSV9UTFZfQUdHUl9TVEFURV9UUklHX0VWRU5USUQsCisJV01JX1RMVl9ST0FNX0VWRU5USUQgPSBXTUlfVExWX0VWKFdNSV9UTFZfR1JQX1JPQU0pLAorCVdNSV9UTFZfUFJPRklMRV9NQVRDSCwKKwlXTUlfVExWX1JPQU1fU1lOQ0hfRVZFTlRJRCwKKwlXTUlfVExWX1AyUF9ESVNDX0VWRU5USUQgPSBXTUlfVExWX0VWKFdNSV9UTFZfR1JQX1AyUCksCisJV01JX1RMVl9QMlBfTk9BX0VWRU5USUQsCisJV01JX1RMVl9QREVWX1JFU1VNRV9FVkVOVElEID0gV01JX1RMVl9FVihXTUlfVExWX0dSUF9TVVNQRU5EKSwKKwlXTUlfVExWX1dPV19XQUtFVVBfSE9TVF9FVkVOVElEID0gV01JX1RMVl9FVihXTUlfVExWX0dSUF9XT1cpLAorCVdNSV9UTFZfRDBfV09XX0RJU0FCTEVfQUNLX0VWRU5USUQsCisJV01JX1RMVl9SVFRfTUVBU1VSRU1FTlRfUkVQT1JUX0VWRU5USUQgPSBXTUlfVExWX0VWKFdNSV9UTFZfR1JQX1JUVCksCisJV01JX1RMVl9UU0ZfTUVBU1VSRU1FTlRfUkVQT1JUX0VWRU5USUQsCisJV01JX1RMVl9SVFRfRVJST1JfUkVQT1JUX0VWRU5USUQsCisJV01JX1RMVl9TVEFUU19FWFRfRVZFTlRJRCA9IFdNSV9UTFZfRVYoV01JX1RMVl9HUlBfU1RBVFMpLAorCVdNSV9UTFZfSUZBQ0VfTElOS19TVEFUU19FVkVOVElELAorCVdNSV9UTFZfUEVFUl9MSU5LX1NUQVRTX0VWRU5USUQsCisJV01JX1RMVl9SQURJT19MSU5LX1NUQVRTX0VWRU5USUQsCisJV01JX1RMVl9OTE9fTUFUQ0hfRVZFTlRJRCA9IFdNSV9UTFZfRVYoV01JX1RMVl9HUlBfTkxPX09GTCksCisJV01JX1RMVl9OTE9fU0NBTl9DT01QTEVURV9FVkVOVElELAorCVdNSV9UTFZfQVBGSU5EX0VWRU5USUQsCisJV01JX1RMVl9HVEtfT0ZGTE9BRF9TVEFUVVNfRVZFTlRJRCA9IFdNSV9UTFZfRVYoV01JX1RMVl9HUlBfR1RLX09GTCksCisJV01JX1RMVl9HVEtfUkVLRVlfRkFJTF9FVkVOVElELAorCVdNSV9UTFZfQ1NBX0hBTkRMSU5HX0VWRU5USUQgPSBXTUlfVExWX0VWKFdNSV9UTFZfR1JQX0NTQV9PRkwpLAorCVdNSV9UTFZfQ0hBVFRFUl9QQ19RVUVSWV9FVkVOVElEID0gV01JX1RMVl9FVihXTUlfVExWX0dSUF9DSEFUVEVSKSwKKwlXTUlfVExWX0VDSE9fRVZFTlRJRCA9IFdNSV9UTFZfRVYoV01JX1RMVl9HUlBfTUlTQyksCisJV01JX1RMVl9QREVWX1VURl9FVkVOVElELAorCVdNSV9UTFZfREVCVUdfTUVTR19FVkVOVElELAorCVdNSV9UTFZfVVBEQVRFX1NUQVRTX0VWRU5USUQsCisJV01JX1RMVl9ERUJVR19QUklOVF9FVkVOVElELAorCVdNSV9UTFZfRENTX0lOVEVSRkVSRU5DRV9FVkVOVElELAorCVdNSV9UTFZfUERFVl9RVklUX0VWRU5USUQsCisJV01JX1RMVl9XTEFOX1BST0ZJTEVfREFUQV9FVkVOVElELAorCVdNSV9UTFZfUERFVl9GVE1fSU5UR19FVkVOVElELAorCVdNSV9UTFZfV0xBTl9GUkVRX0FWT0lEX0VWRU5USUQsCisJV01JX1RMVl9WREVWX0dFVF9LRUVQQUxJVkVfRVZFTlRJRCwKKwlXTUlfVExWX1RIRVJNQUxfTUdNVF9FVkVOVElELAorCVdNSV9UTFZfRElBR19EQVRBX0NPTlRBSU5FUl9FVkVOVElELAorCVdNSV9UTFZfSE9TVF9BVVRPX1NIVVRET1dOX0VWRU5USUQsCisJV01JX1RMVl9VUERBVEVfV0hBTF9NSUJfU1RBVFNfRVZFTlRJRCwKKwlXTUlfVExWX1VQREFURV9WREVWX1JBVEVfU1RBVFNfRVZFTlRJRCwKKwlXTUlfVExWX0RJQUdfRVZFTlRJRCwKKwlXTUlfVExWX0dQSU9fSU5QVVRfRVZFTlRJRCA9IFdNSV9UTFZfRVYoV01JX1RMVl9HUlBfR1BJTyksCisJV01JX1RMVl9VUExPQURIX0VWRU5USUQsCisJV01JX1RMVl9DQVBUVVJFSF9FVkVOVElELAorCVdNSV9UTFZfUkZLSUxMX1NUQVRFX0NIQU5HRV9FVkVOVElELAorCVdNSV9UTFZfVERMU19QRUVSX0VWRU5USUQgPSBXTUlfVExWX0VWKFdNSV9UTFZfR1JQX1RETFMpLAorCVdNSV9UTFZfQkFUQ0hfU0NBTl9FTkFCTEVEX0VWRU5USUQgPQorCQkJV01JX1RMVl9FVihXTUlfVExWX0dSUF9MT0NBVElPTl9TQ0FOKSwKKwlXTUlfVExWX0JBVENIX1NDQU5fUkVTVUxUX0VWRU5USUQsCisJV01JX1RMVl9PRU1fQ0FQQUJJTElUWV9FVkVOVElEID0gV01JX1RMVl9FVihXTUlfVExWX0dSUF9PRU0pLAorCVdNSV9UTFZfT0VNX01FQVNVUkVNRU5UX1JFUE9SVF9FVkVOVElELAorCVdNSV9UTFZfT0VNX0VSUk9SX1JFUE9SVF9FVkVOVElELAorCVdNSV9UTFZfTkFOX0VWRU5USUQgPSBXTUlfVExWX0VWKFdNSV9UTFZfR1JQX05BTiksCisJV01JX1RMVl9MUElfUkVTVUxUX0VWRU5USUQgPSBXTUlfVExWX0VWKFdNSV9UTFZfR1JQX0xQSSksCisJV01JX1RMVl9MUElfU1RBVFVTX0VWRU5USUQsCisJV01JX1RMVl9MUElfSEFORE9GRl9FVkVOVElELAorCVdNSV9UTFZfRVhUU0NBTl9TVEFSVF9TVE9QX0VWRU5USUQgPSBXTUlfVExWX0VWKFdNSV9UTFZfR1JQX0VYVFNDQU4pLAorCVdNSV9UTFZfRVhUU0NBTl9PUEVSQVRJT05fRVZFTlRJRCwKKwlXTUlfVExWX0VYVFNDQU5fVEFCTEVfVVNBR0VfRVZFTlRJRCwKKwlXTUlfVExWX0VYVFNDQU5fQ0FDSEVEX1JFU1VMVFNfRVZFTlRJRCwKKwlXTUlfVExWX0VYVFNDQU5fV0xBTl9DSEFOR0VfUkVTVUxUU19FVkVOVElELAorCVdNSV9UTFZfRVhUU0NBTl9IT1RMSVNUX01BVENIX0VWRU5USUQsCisJV01JX1RMVl9FWFRTQ0FOX0NBUEFCSUxJVElFU19FVkVOVElELAorCVdNSV9UTFZfTUROU19TVEFUU19FVkVOVElEID0gV01JX1RMVl9FVihXTUlfVExWX0dSUF9NRE5TX09GTCksCisJV01JX1RMVl9TQVBfT0ZMX0FERF9TVEFfRVZFTlRJRCA9IFdNSV9UTFZfRVYoV01JX1RMVl9HUlBfU0FQX09GTCksCisJV01JX1RMVl9TQVBfT0ZMX0RFTF9TVEFfRVZFTlRJRCwKK307CisKK2VudW0gd21pX3Rsdl9wZGV2X3BhcmFtIHsKKwlXTUlfVExWX1BERVZfUEFSQU1fVFhfQ0hBSU5fTUFTSyA9IDB4MSwKKwlXTUlfVExWX1BERVZfUEFSQU1fUlhfQ0hBSU5fTUFTSywKKwlXTUlfVExWX1BERVZfUEFSQU1fVFhQT1dFUl9MSU1JVDJHLAorCVdNSV9UTFZfUERFVl9QQVJBTV9UWFBPV0VSX0xJTUlUNUcsCisJV01JX1RMVl9QREVWX1BBUkFNX1RYUE9XRVJfU0NBTEUsCisJV01JX1RMVl9QREVWX1BBUkFNX0JFQUNPTl9HRU5fTU9ERSwKKwlXTUlfVExWX1BERVZfUEFSQU1fQkVBQ09OX1RYX01PREUsCisJV01JX1RMVl9QREVWX1BBUkFNX1JFU01HUl9PRkZDSEFOX01PREUsCisJV01JX1RMVl9QREVWX1BBUkFNX1BST1RFQ1RJT05fTU9ERSwKKwlXTUlfVExWX1BERVZfUEFSQU1fRFlOQU1JQ19CVywKKwlXTUlfVExWX1BERVZfUEFSQU1fTk9OX0FHR19TV19SRVRSWV9USCwKKwlXTUlfVExWX1BERVZfUEFSQU1fQUdHX1NXX1JFVFJZX1RILAorCVdNSV9UTFZfUERFVl9QQVJBTV9TVEFfS0lDS09VVF9USCwKKwlXTUlfVExWX1BERVZfUEFSQU1fQUNfQUdHUlNJWkVfU0NBTElORywKKwlXTUlfVExWX1BERVZfUEFSQU1fTFRSX0VOQUJMRSwKKwlXTUlfVExWX1BERVZfUEFSQU1fTFRSX0FDX0xBVEVOQ1lfQkUsCisJV01JX1RMVl9QREVWX1BBUkFNX0xUUl9BQ19MQVRFTkNZX0JLLAorCVdNSV9UTFZfUERFVl9QQVJBTV9MVFJfQUNfTEFURU5DWV9WSSwKKwlXTUlfVExWX1BERVZfUEFSQU1fTFRSX0FDX0xBVEVOQ1lfVk8sCisJV01JX1RMVl9QREVWX1BBUkFNX0xUUl9BQ19MQVRFTkNZX1RJTUVPVVQsCisJV01JX1RMVl9QREVWX1BBUkFNX0xUUl9TTEVFUF9PVkVSUklERSwKKwlXTUlfVExWX1BERVZfUEFSQU1fTFRSX1JYX09WRVJSSURFLAorCVdNSV9UTFZfUERFVl9QQVJBTV9MVFJfVFhfQUNUSVZJVFlfVElNRU9VVCwKKwlXTUlfVExWX1BERVZfUEFSQU1fTDFTU19FTkFCTEUsCisJV01JX1RMVl9QREVWX1BBUkFNX0RTTEVFUF9FTkFCTEUsCisJV01JX1RMVl9QREVWX1BBUkFNX1BDSUVMUF9UWEJVRl9GTFVTSCwKKwlXTUlfVExWX1BERVZfUEFSQU1fUENJRUxQX1RYQlVGX1dBVEVSTUFSSywKKwlXTUlfVExWX1BERVZfUEFSQU1fUENJRUxQX1RYQlVGX1RNT19FTiwKKwlXTUlfVExWX1BERVZfUEFSQU1fUENJRUxQX1RYQlVGX1RNT19WQUxVRSwKKwlXTUlfVExWX1BERVZfUEFSQU1fUERFVl9TVEFUU19VUERBVEVfUEVSSU9ELAorCVdNSV9UTFZfUERFVl9QQVJBTV9WREVWX1NUQVRTX1VQREFURV9QRVJJT0QsCisJV01JX1RMVl9QREVWX1BBUkFNX1BFRVJfU1RBVFNfVVBEQVRFX1BFUklPRCwKKwlXTUlfVExWX1BERVZfUEFSQU1fQkNORkxUX1NUQVRTX1VQREFURV9QRVJJT0QsCisJV01JX1RMVl9QREVWX1BBUkFNX1BNRl9RT1MsCisJV01JX1RMVl9QREVWX1BBUkFNX0FSUF9BQ19PVkVSUklERSwKKwlXTUlfVExWX1BERVZfUEFSQU1fRENTLAorCVdNSV9UTFZfUERFVl9QQVJBTV9BTklfRU5BQkxFLAorCVdNSV9UTFZfUERFVl9QQVJBTV9BTklfUE9MTF9QRVJJT0QsCisJV01JX1RMVl9QREVWX1BBUkFNX0FOSV9MSVNURU5fUEVSSU9ELAorCVdNSV9UTFZfUERFVl9QQVJBTV9BTklfT0ZETV9MRVZFTCwKKwlXTUlfVExWX1BERVZfUEFSQU1fQU5JX0NDS19MRVZFTCwKKwlXTUlfVExWX1BERVZfUEFSQU1fRFlOVFhDSEFJTiwKKwlXTUlfVExWX1BERVZfUEFSQU1fUFJPWFlfU1RBLAorCVdNSV9UTFZfUERFVl9QQVJBTV9JRExFX1BTX0NPTkZJRywKKwlXTUlfVExWX1BERVZfUEFSQU1fUE9XRVJfR0FUSU5HX1NMRUVQLAorCVdNSV9UTFZfUERFVl9QQVJBTV9SRktJTExfRU5BQkxFLAorCVdNSV9UTFZfUERFVl9QQVJBTV9CVVJTVF9EVVIsCisJV01JX1RMVl9QREVWX1BBUkFNX0JVUlNUX0VOQUJMRSwKKwlXTUlfVExWX1BERVZfUEFSQU1fSFdfUkZLSUxMX0NPTkZJRywKKwlXTUlfVExWX1BERVZfUEFSQU1fTE9XX1BPV0VSX1JGX0VOQUJMRSwKKwlXTUlfVExWX1BERVZfUEFSQU1fTDFTU19UUkFDSywKKwlXTUlfVExWX1BERVZfUEFSQU1fSFlTVF9FTiwKKwlXTUlfVExWX1BERVZfUEFSQU1fUE9XRVJfQ09MTEFQU0VfRU5BQkxFLAorCVdNSV9UTFZfUERFVl9QQVJBTV9MRURfU1lTX1NUQVRFLAorCVdNSV9UTFZfUERFVl9QQVJBTV9MRURfRU5BQkxFLAorCVdNSV9UTFZfUERFVl9QQVJBTV9BVURJT19PVkVSX1dMQU5fTEFURU5DWSwKKwlXTUlfVExWX1BERVZfUEFSQU1fQVVESU9fT1ZFUl9XTEFOX0VOQUJMRSwKKwlXTUlfVExWX1BERVZfUEFSQU1fV0hBTF9NSUJfU1RBVFNfVVBEQVRFX0VOQUJMRSwKKwlXTUlfVExWX1BERVZfUEFSQU1fVkRFVl9SQVRFX1NUQVRTX1VQREFURV9QRVJJT0QsCisJV01JX1RMVl9QREVWX1BBUkFNX1RYUE9XRVJfUkVBU09OX05PTkUsCisJV01JX1RMVl9QREVWX1BBUkFNX1RYUE9XRVJfUkVBU09OX1NBUiwKKwlXTUlfVExWX1BERVZfUEFSQU1fVFhQT1dFUl9SRUFTT05fTUFYLAorfTsKKworZW51bSB3bWlfdGx2X3ZkZXZfcGFyYW0geworCVdNSV9UTFZfVkRFVl9QQVJBTV9SVFNfVEhSRVNIT0xEID0gMHgxLAorCVdNSV9UTFZfVkRFVl9QQVJBTV9GUkFHTUVOVEFUSU9OX1RIUkVTSE9MRCwKKwlXTUlfVExWX1ZERVZfUEFSQU1fQkVBQ09OX0lOVEVSVkFMLAorCVdNSV9UTFZfVkRFVl9QQVJBTV9MSVNURU5fSU5URVJWQUwsCisJV01JX1RMVl9WREVWX1BBUkFNX01VTFRJQ0FTVF9SQVRFLAorCVdNSV9UTFZfVkRFVl9QQVJBTV9NR01UX1RYX1JBVEUsCisJV01JX1RMVl9WREVWX1BBUkFNX1NMT1RfVElNRSwKKwlXTUlfVExWX1ZERVZfUEFSQU1fUFJFQU1CTEUsCisJV01JX1RMVl9WREVWX1BBUkFNX1NXQkFfVElNRSwKKwlXTUlfVExWX1ZERVZfU1RBVFNfVVBEQVRFX1BFUklPRCwKKwlXTUlfVExWX1ZERVZfUFdSU0FWRV9BR0VPVVRfVElNRSwKKwlXTUlfVExWX1ZERVZfSE9TVF9TV0JBX0lOVEVSVkFMLAorCVdNSV9UTFZfVkRFVl9QQVJBTV9EVElNX1BFUklPRCwKKwlXTUlfVExWX1ZERVZfT0NfU0NIRURVTEVSX0FJUl9USU1FX0xJTUlULAorCVdNSV9UTFZfVkRFVl9QQVJBTV9XRFMsCisJV01JX1RMVl9WREVWX1BBUkFNX0FUSU1fV0lORE9XLAorCVdNSV9UTFZfVkRFVl9QQVJBTV9CTUlTU19DT1VOVF9NQVgsCisJV01JX1RMVl9WREVWX1BBUkFNX0JNSVNTX0ZJUlNUX0JDTlQsCisJV01JX1RMVl9WREVWX1BBUkFNX0JNSVNTX0ZJTkFMX0JDTlQsCisJV01JX1RMVl9WREVWX1BBUkFNX0ZFQVRVUkVfV01NLAorCVdNSV9UTFZfVkRFVl9QQVJBTV9DSFdJRFRILAorCVdNSV9UTFZfVkRFVl9QQVJBTV9DSEVYVE9GRlNFVCwKKwlXTUlfVExWX1ZERVZfUEFSQU1fRElTQUJMRV9IVFBST1RFQ1RJT04sCisJV01JX1RMVl9WREVWX1BBUkFNX1NUQV9RVUlDS0tJQ0tPVVQsCisJV01JX1RMVl9WREVWX1BBUkFNX01HTVRfUkFURSwKKwlXTUlfVExWX1ZERVZfUEFSQU1fUFJPVEVDVElPTl9NT0RFLAorCVdNSV9UTFZfVkRFVl9QQVJBTV9GSVhFRF9SQVRFLAorCVdNSV9UTFZfVkRFVl9QQVJBTV9TR0ksCisJV01JX1RMVl9WREVWX1BBUkFNX0xEUEMsCisJV01JX1RMVl9WREVWX1BBUkFNX1RYX1NUQkMsCisJV01JX1RMVl9WREVWX1BBUkFNX1JYX1NUQkMsCisJV01JX1RMVl9WREVWX1BBUkFNX0lOVFJBX0JTU19GV0QsCisJV01JX1RMVl9WREVWX1BBUkFNX0RFRl9LRVlJRCwKKwlXTUlfVExWX1ZERVZfUEFSQU1fTlNTLAorCVdNSV9UTFZfVkRFVl9QQVJBTV9CQ0FTVF9EQVRBX1JBVEUsCisJV01JX1RMVl9WREVWX1BBUkFNX01DQVNUX0RBVEFfUkFURSwKKwlXTUlfVExWX1ZERVZfUEFSQU1fTUNBU1RfSU5ESUNBVEUsCisJV01JX1RMVl9WREVWX1BBUkFNX0RIQ1BfSU5ESUNBVEUsCisJV01JX1RMVl9WREVWX1BBUkFNX1VOS05PV05fREVTVF9JTkRJQ0FURSwKKwlXTUlfVExWX1ZERVZfUEFSQU1fQVBfS0VFUEFMSVZFX01JTl9JRExFX0lOQUNUSVZFX1RJTUVfU0VDUywKKwlXTUlfVExWX1ZERVZfUEFSQU1fQVBfS0VFUEFMSVZFX01BWF9JRExFX0lOQUNUSVZFX1RJTUVfU0VDUywKKwlXTUlfVExWX1ZERVZfUEFSQU1fQVBfS0VFUEFMSVZFX01BWF9VTlJFU1BPTlNJVkVfVElNRV9TRUNTLAorCVdNSV9UTFZfVkRFVl9QQVJBTV9BUF9FTkFCTEVfTkFXRFMsCisJV01JX1RMVl9WREVWX1BBUkFNX0VOQUJMRV9SVFNDVFMsCisJV01JX1RMVl9WREVWX1BBUkFNX1RYQkYsCisJV01JX1RMVl9WREVWX1BBUkFNX1BBQ0tFVF9QT1dFUlNBVkUsCisJV01JX1RMVl9WREVWX1BBUkFNX0RST1BfVU5FTkNSWSwKKwlXTUlfVExWX1ZERVZfUEFSQU1fVFhfRU5DQVBfVFlQRSwKKwlXTUlfVExWX1ZERVZfUEFSQU1fQVBfREVURUNUX09VVF9PRl9TWU5DX1NMRUVQSU5HX1NUQV9USU1FX1NFQ1MsCisJV01JX1RMVl9WREVWX1BBUkFNX0VBUkxZX1JYX0FESlVTVF9FTkFCTEUsCisJV01JX1RMVl9WREVWX1BBUkFNX0VBUkxZX1JYX1RHVF9CTUlTU19OVU0sCisJV01JX1RMVl9WREVWX1BBUkFNX0VBUkxZX1JYX0JNSVNTX1NBTVBMRV9DWUNMRSwKKwlXTUlfVExWX1ZERVZfUEFSQU1fRUFSTFlfUlhfU0xPUF9TVEVQLAorCVdNSV9UTFZfVkRFVl9QQVJBTV9FQVJMWV9SWF9JTklUX1NMT1AsCisJV01JX1RMVl9WREVWX1BBUkFNX0VBUkxZX1JYX0FESlVTVF9QQVVTRSwKKwlXTUlfVExWX1ZERVZfUEFSQU1fVFhfUFdSTElNSVQsCisJV01JX1RMVl9WREVWX1BBUkFNX1NOUl9OVU1fRk9SX0NBTCwKKwlXTUlfVExWX1ZERVZfUEFSQU1fUk9BTV9GV19PRkZMT0FELAorCVdNSV9UTFZfVkRFVl9QQVJBTV9FTkFCTEVfUk1DLAorCVdNSV9UTFZfVkRFVl9QQVJBTV9JQlNTX01BWF9CQ05fTE9TVF9NUywKKwlXTUlfVExWX1ZERVZfUEFSQU1fTUFYX1JBVEUsCisJV01JX1RMVl9WREVWX1BBUkFNX0VBUkxZX1JYX0RSSUZUX1NBTVBMRSwKKwlXTUlfVExWX1ZERVZfUEFSQU1fU0VUX0lCU1NfVFhfRkFJTF9DTlRfVEhSLAorCVdNSV9UTFZfVkRFVl9QQVJBTV9FQlRfUkVTWU5DX1RJTUVPVVQsCisJV01JX1RMVl9WREVWX1BBUkFNX0FHR1JfVFJJR19FVkVOVF9FTkFCTEUsCisJV01JX1RMVl9WREVWX1BBUkFNX0lTX0lCU1NfUE9XRVJfU0FWRV9BTExPV0VELAorCVdNSV9UTFZfVkRFVl9QQVJBTV9JU19QT1dFUl9DT0xMQVBTRV9BTExPV0VELAorCVdNSV9UTFZfVkRFVl9QQVJBTV9JU19BV0FLRV9PTl9UWFJYX0VOQUJMRUQsCisJV01JX1RMVl9WREVWX1BBUkFNX0lOQUNUSVZJVFlfQ05ULAorCVdNSV9UTFZfVkRFVl9QQVJBTV9UWFNQX0VORF9JTkFDVElWSVRZX1RJTUVfTVMsCisJV01JX1RMVl9WREVWX1BBUkFNX0RUSU1fUE9MSUNZLAorCVdNSV9UTFZfVkRFVl9QQVJBTV9JQlNTX1BTX1dBUk1VUF9USU1FX1NFQ1MsCisJV01JX1RMVl9WREVWX1BBUkFNX0lCU1NfUFNfMVJYX0NIQUlOX0lOX0FUSU1fV0lORE9XX0VOQUJMRSwKK307CisKK2VudW0gd21pX3Rsdl90YWcgeworCVdNSV9UTFZfVEFHX0xBU1RfUkVTRVJWRUQgPSAxNSwKKworCVdNSV9UTFZfVEFHX0ZJUlNUX0FSUkFZX0VOVU0sCisJV01JX1RMVl9UQUdfQVJSQVlfVUlOVDMyID0gV01JX1RMVl9UQUdfRklSU1RfQVJSQVlfRU5VTSwKKwlXTUlfVExWX1RBR19BUlJBWV9CWVRFLAorCVdNSV9UTFZfVEFHX0FSUkFZX1NUUlVDVCwKKwlXTUlfVExWX1RBR19BUlJBWV9GSVhFRF9TVFJVQ1QsCisJV01JX1RMVl9UQUdfTEFTVF9BUlJBWV9FTlVNID0gMzEsCisKKwlXTUlfVExWX1RBR19TVFJVQ1RfU0VSVklDRV9SRUFEWV9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfSEFMX1JFR19DQVBBQklMSVRJRVMsCisJV01JX1RMVl9UQUdfU1RSVUNUX1dMQU5fSE9TVF9NRU1fUkVRLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9SRUFEWV9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfU0NBTl9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUERFVl9UUENfQ09ORklHX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9DSEFOX0lORk9fRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0NPTUJfUEhZRVJSX1JYX0hEUiwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9TVEFSVF9SRVNQT05TRV9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9TVE9QUEVEX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9WREVWX0lOU1RBTExfS0VZX0NPTVBMRVRFX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QRUVSX1NUQV9LSUNLT1VUX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9NR01UX1JYX0hEUiwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVEJUVF9PRkZTRVRfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1RYX0RFTEJBX0NPTVBMRVRFX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9UWF9BRERCQV9DT01QTEVURV9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUk9BTV9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfV09XX0VWRU5UX0lORk8sCisJV01JX1RMVl9UQUdfU1RSVUNUX1dPV19FVkVOVF9JTkZPX1NFQ1RJT05fQklUTUFQLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9SVFRfRVZFTlRfSEVBREVSLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9SVFRfRVJST1JfUkVQT1JUX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9SVFRfTUVBU19FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRUNIT19FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRlRNX0lOVEdfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1ZERVZfR0VUX0tFRVBBTElWRV9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfR1BJT19JTlBVVF9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQ1NBX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9HVEtfT0ZGTE9BRF9TVEFUVVNfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0lHVEtfSU5GTywKKwlXTUlfVExWX1RBR19TVFJVQ1RfRENTX0lOVEVSRkVSRU5DRV9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQVRIX0RDU19DV19JTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0FUSF9EQ1NfV0xBTl9JTlRfU1RBVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfV0xBTl9QUk9GSUxFX0NUWF9ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9XTEFOX1BST0ZJTEVfVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUERFVl9RVklUX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9IT1NUX1NXQkFfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1RJTV9JTkZPLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QMlBfTk9BX0lORk8sCisJV01JX1RMVl9UQUdfU1RSVUNUX1NUQVRTX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9BVk9JRF9GUkVRX1JBTkdFU19FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQVZPSURfRlJFUV9SQU5HRV9ERVNDLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9HVEtfUkVLRVlfRkFJTF9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfSU5JVF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1JFU09VUkNFX0NPTkZJRywKKwlXTUlfVExWX1RBR19TVFJVQ1RfV0xBTl9IT1NUX01FTU9SWV9DSFVOSywKKwlXTUlfVExWX1RBR19TVFJVQ1RfU1RBUlRfU0NBTl9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1NUT1BfU0NBTl9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1NDQU5fQ0hBTl9MSVNUX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQ0hBTk5FTCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUERFVl9TRVRfUkVHRE9NQUlOX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUERFVl9TRVRfUEFSQU1fQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QREVWX1NFVF9XTU1fUEFSQU1TX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfV01NX1BBUkFNUywKKwlXTUlfVExWX1RBR19TVFJVQ1RfUERFVl9TRVRfUVVJRVRfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9WREVWX0NSRUFURV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1ZERVZfREVMRVRFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9TVEFSVF9SRVFVRVNUX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUDJQX05PQV9ERVNDUklQVE9SLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QMlBfR09fU0VUX0JFQUNPTl9JRSwKKwlXTUlfVExWX1RBR19TVFJVQ1RfR1RLX09GRkxPQURfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9WREVWX1VQX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9TVE9QX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9ET1dOX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9TRVRfUEFSQU1fQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9WREVWX0lOU1RBTExfS0VZX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUEVFUl9DUkVBVEVfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QRUVSX0RFTEVURV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1BFRVJfRkxVU0hfVElEU19DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1BFRVJfU0VUX1BBUkFNX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUEVFUl9BU1NPQ19DT01QTEVURV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1ZIVF9SQVRFX1NFVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQkNOX1RNUExfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QUkJfVE1QTF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0JDTl9QUkJfSU5GTywKKwlXTUlfVExWX1RBR19TVFJVQ1RfUEVFUl9USURfQUREQkFfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QRUVSX1RJRF9ERUxCQV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1NUQV9QT1dFUlNBVkVfTU9ERV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1NUQV9QT1dFUlNBVkVfUEFSQU1fQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9TVEFfRFRJTV9QU19NRVRIT0RfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9ST0FNX1NDQU5fTU9ERSwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUk9BTV9TQ0FOX1JTU0lfVEhSRVNIT0xELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9ST0FNX1NDQU5fUEVSSU9ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9ST0FNX1NDQU5fUlNTSV9DSEFOR0VfVEhSRVNIT0xELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QREVWX1NVU1BFTkRfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QREVWX1JFU1VNRV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0FERF9CQ05fRklMVEVSX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUk1WX0JDTl9GSUxURVJfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9XT1dfRU5BQkxFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfV09XX0hPU1RXQUtFVVBfRlJPTV9TTEVFUF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1NUQV9VQVBTRF9BVVRPX1RSSUdfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9TVEFfVUFQU0RfQVVUT19UUklHX1BBUkFNLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9TRVRfQVJQX05TX09GRkxPQURfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9BUlBfT0ZGTE9BRF9UVVBMRSwKKwlXTUlfVExWX1RBR19TVFJVQ1RfTlNfT0ZGTE9BRF9UVVBMRSwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRlRNX0lOVEdfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9TVEFfS0VFUEFMSVZFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfU1RBX0tFRVBBTFZFX0FSUF9SRVNQT05TRSwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUDJQX1NFVF9WRU5ET1JfSUVfREFUQV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0FQX1BTX1BFRVJfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QRUVSX1JBVEVfUkVUUllfU0NIRURfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9XTEFOX1BST0ZJTEVfVFJJR0dFUl9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1dMQU5fUFJPRklMRV9TRVRfSElTVF9JTlRWTF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1dMQU5fUFJPRklMRV9HRVRfUFJPRl9EQVRBX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfV0xBTl9QUk9GSUxFX0VOQUJMRV9QUk9GSUxFX0lEX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfV09XX0RFTF9QQVRURVJOX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfV09XX0FERF9ERUxfRVZUX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUlRUX01FQVNSRVFfSEVBRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUlRUX01FQVNSRVFfQk9EWSwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUlRUX1RTRl9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1ZERVZfU1BFQ1RSQUxfQ09ORklHVVJFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9TUEVDVFJBTF9FTkFCTEVfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9SRVFVRVNUX1NUQVRTX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfTkxPX0NPTkZJR19DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX05MT19DT05GSUdVUkVEX1BBUkFNRVRFUlMsCisJV01JX1RMVl9UQUdfU1RSVUNUX0NTQV9PRkZMT0FEX0VOQUJMRV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0NTQV9PRkZMT0FEX0NIQU5TV0lUQ0hfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9DSEFUVEVSX1NFVF9NT0RFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRUNIT19DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1ZERVZfU0VUX0tFRVBBTElWRV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1ZERVZfR0VUX0tFRVBBTElWRV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0ZPUkNFX0ZXX0hBTkdfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9HUElPX0NPTkZJR19DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0dQSU9fT1VUUFVUX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUEVFUl9BRERfV0RTX0VOVFJZX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUEVFUl9SRU1PVkVfV0RTX0VOVFJZX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQkNOX1RYX0hEUiwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQkNOX1NFTkRfRlJPTV9IT1NUX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfTUdNVF9UWF9IRFIsCisJV01JX1RMVl9UQUdfU1RSVUNUX0FEREJBX0NMRUFSX1JFU1BfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9BRERCQV9TRU5EX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfREVMQkFfU0VORF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0FEREJBX1NFVFJFU1BPTlNFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfU0VORF9TSU5HTEVBTVNEVV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1BERVZfUEtUTE9HX0VOQUJMRV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1BERVZfUEtUTE9HX0RJU0FCTEVfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QREVWX1NFVF9IVF9JRV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1BERVZfU0VUX1ZIVF9JRV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1BERVZfU0VUX0RTQ1BfVElEX01BUF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1BERVZfR1JFRU5fQVBfUFNfRU5BQkxFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUERFVl9HRVRfVFBDX0NPTkZJR19DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1BERVZfU0VUX0JBU0VfTUFDQUREUl9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1BFRVJfTUNBU1RfR1JPVVBfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9ST0FNX0FQX1BST0ZJTEUsCisJV01JX1RMVl9UQUdfU1RSVUNUX0FQX1BST0ZJTEUsCisJV01JX1RMVl9UQUdfU1RSVUNUX1NDQU5fU0NIX1BSSU9SSVRZX1RBQkxFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUERFVl9ERlNfRU5BQkxFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUERFVl9ERlNfRElTQUJMRV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1dPV19BRERfUEFUVEVSTl9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1dPV19CSVRNQVBfUEFUVEVSTl9ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9XT1dfSVBWNF9TWU5DX1BBVFRFUk5fVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfV09XX0lQVjZfU1lOQ19QQVRURVJOX1QsCisJV01JX1RMVl9UQUdfU1RSVUNUX1dPV19NQUdJQ19QQVRURVJOX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfU0NBTl9VUERBVEVfUkVRVUVTVF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0NIQVRURVJfUEtUX0NPQUxFU0NJTkdfRklMVEVSLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9DSEFUVEVSX0NPQUxFU0NJTkdfQUREX0ZJTFRFUl9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0NIQVRURVJfQ09BTEVTQ0lOR19ERUxFVEVfRklMVEVSX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQ0hBVFRFUl9DT0FMRVNDSU5HX1FVRVJZX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVFhCRl9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0RFQlVHX0xPR19DT05GSUdfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9OTE9fRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0NIQVRURVJfUVVFUllfUkVQTFlfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1VQTE9BRF9IX0hEUiwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQ0FQVFVSRV9IX0VWRU5UX0hEUiwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9XTk1fU0xFRVBNT0RFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9JUFNFQ19OQVRLRUVQQUxJVkVfRklMVEVSX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9XTU1fQUREVFNfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9WREVWX1dNTV9ERUxUU19DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1ZERVZfU0VUX1dNTV9QQVJBTVNfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9URExTX1NFVF9TVEFURV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1RETFNfUEVFUl9VUERBVEVfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9URExTX1BFRVJfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1RETFNfUEVFUl9DQVBBQklMSVRJRVMsCisJV01JX1RMVl9UQUdfU1RSVUNUX1ZERVZfTUNDX1NFVF9UQlRUX01PREVfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9ST0FNX0NIQU5fTElTVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9NQ0NfQkNOX0lOVFZMX0NIQU5HRV9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUkVTTUdSX0FEQVBUSVZFX09DU19DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1JFU01HUl9TRVRfQ0hBTl9USU1FX1FVT1RBX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUkVTTUdSX1NFVF9DSEFOX0xBVEVOQ1lfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9CQV9SRVFfU1NOX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQkFfUlNQX1NTTl9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfU1RBX1NNUFNfRk9SQ0VfTU9ERV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1NFVF9NQ0FTVEJDQVNUX0ZJTFRFUl9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1AyUF9TRVRfT1BQUFNfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QMlBfU0VUX05PQV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0JBX1JFUV9TU05fQ01EX1NVQl9TVFJVQ1RfUEFSQU0sCisJV01JX1RMVl9UQUdfU1RSVUNUX0JBX1JFUV9TU05fRVZFTlRfU1VCX1NUUlVDVF9QQVJBTSwKKwlXTUlfVExWX1RBR19TVFJVQ1RfU1RBX1NNUFNfUEFSQU1fQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9WREVWX1NFVF9HVFhfUEFSQU1TX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfTUNDX1NDSEVEX1RSQUZGSUNfU1RBVFNfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9NQ0NfU0NIRURfU1RBX1RSQUZGSUNfU1RBVFMsCisJV01JX1RMVl9UQUdfU1RSVUNUX09GRkxPQURfQkNOX1RYX1NUQVRVU19FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUDJQX05PQV9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfSEJfU0VUX0VOQUJMRV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0hCX1NFVF9UQ1BfUEFSQU1TX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfSEJfU0VUX1RDUF9QS1RfRklMVEVSX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfSEJfU0VUX1VEUF9QQVJBTVNfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9IQl9TRVRfVURQX1BLVF9GSUxURVJfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9IQl9JTkRfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1RYX1BBVVNFX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9SRktJTExfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0RGU19SQURBUl9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfREZTX1BIWUVSUl9GSUxURVJfRU5BX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfREZTX1BIWUVSUl9GSUxURVJfRElTX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQkFUQ0hfU0NBTl9SRVNVTFRfU0NBTl9MSVNULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9CQVRDSF9TQ0FOX1JFU1VMVF9ORVRXT1JLX0lORk8sCisJV01JX1RMVl9UQUdfU1RSVUNUX0JBVENIX1NDQU5fRU5BQkxFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQkFUQ0hfU0NBTl9ESVNBQkxFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQkFUQ0hfU0NBTl9UUklHR0VSX1JFU1VMVF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0JBVENIX1NDQU5fRU5BQkxFRF9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQkFUQ0hfU0NBTl9SRVNVTFRfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1ZERVZfUExNUkVRX1NUQVJUX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9QTE1SRVFfU1RPUF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1RIRVJNQUxfTUdNVF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1RIRVJNQUxfTUdNVF9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUEVFUl9JTkZPX1JFUV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1BFRVJfSU5GT19FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUEVFUl9JTkZPLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QRUVSX1RYX0ZBSUxfQ05UX1RIUl9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUk1DX1NFVF9NT0RFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUk1DX1NFVF9BQ1RJT05fUEVSSU9EX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUk1DX0NPTkZJR19DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX01IRl9PRkZMT0FEX1NFVF9NT0RFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfTUhGX09GRkxPQURfUExVTUJfUk9VVElOR19UQUJMRV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0FERF9QUk9BQ1RJVkVfQVJQX1JTUF9QQVRURVJOX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfREVMX1BST0FDVElWRV9BUlBfUlNQX1BBVFRFUk5fQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9OQU5fQ01EX1BBUkFNLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9OQU5fRVZFTlRfSERSLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QREVWX0wxU1NfVFJBQ0tfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0RJQUdfREFUQV9DT05UQUlORVJfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX01PREVNX1BPV0VSX1NUQVRFX0NNRF9QQVJBTSwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUEVFUl9HRVRfRVNUSU1BVEVEX0xJTktTUEVFRF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1BFRVJfRVNUSU1BVEVEX0xJTktTUEVFRF9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQUdHUl9TVEFURV9UUklHX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9NSEZfT0ZGTE9BRF9ST1VUSU5HX1RBQkxFX0VOVFJZLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9ST0FNX1NDQU5fQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9SRVFfU1RBVFNfRVhUX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfU1RBVFNfRVhUX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9PQlNTX1NDQU5fRU5BQkxFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfT0JTU19TQ0FOX0RJU0FCTEVfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9PRkZMT0FEX1BSQl9SU1BfVFhfU1RBVFVTX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QREVWX1NFVF9MRURfQ09ORklHX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfSE9TVF9BVVRPX1NIVVRET1dOX0NGR19DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0hPU1RfQVVUT19TSFVURE9XTl9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVVBEQVRFX1dIQUxfTUlCX1NUQVRTX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9DSEFOX0FWT0lEX1VQREFURV9DTURfUEFSQU0sCisJV01JX1RMVl9UQUdfU1RSVUNUX1dPV19BQ0VSX0lPQUNfUEtUX1BBVFRFUk5fVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfV09XX0FDRVJfSU9BQ19UTVJfUEFUVEVSTl9ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9XT1dfSU9BQ19BRERfS0VFUEFMSVZFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfV09XX0lPQUNfREVMX0tFRVBBTElWRV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1dPV19JT0FDX0tFRVBBTElWRV9ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9XT1dfQUNFUl9JT0FDX0FERF9QQVRURVJOX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfV09XX0FDRVJfSU9BQ19ERUxfUEFUVEVSTl9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1NUQVJUX0xJTktfU1RBVFNfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9DTEVBUl9MSU5LX1NUQVRTX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUkVRVUVTVF9MSU5LX1NUQVRTX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfSUZBQ0VfTElOS19TVEFUU19FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUkFESU9fTElOS19TVEFUU19FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUEVFUl9TVEFUU19FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfQ0hBTk5FTF9TVEFUUywKKwlXTUlfVExWX1RBR19TVFJVQ1RfUkFESU9fTElOS19TVEFUUywKKwlXTUlfVExWX1RBR19TVFJVQ1RfUkFURV9TVEFUUywKKwlXTUlfVExWX1RBR19TVFJVQ1RfUEVFUl9MSU5LX1NUQVRTLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9XTU1fQUNfU1RBVFMsCisJV01JX1RMVl9UQUdfU1RSVUNUX0lGQUNFX0xJTktfU1RBVFMsCisJV01JX1RMVl9UQUdfU1RSVUNUX0xQSV9NR01UX1NOT09QSU5HX0NPTkZJR19DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0xQSV9TVEFSVF9TQ0FOX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfTFBJX1NUT1BfU0NBTl9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0xQSV9SRVNVTFRfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1BFRVJfU1RBVEVfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0VYVFNDQU5fQlVDS0VUX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRVhUU0NBTl9CVUNLRVRfQ0hBTk5FTF9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRVhUU0NBTl9TVEFSVF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0VYVFNDQU5fU1RPUF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0VYVFNDQU5fQ09ORklHVVJFX1dMQU5fQ0hBTkdFX01PTklUT1JfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9FWFRTQ0FOX1dMQU5fQ0hBTkdFX0JTU0lEX1BBUkFNX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRVhUU0NBTl9DT05GSUdVUkVfSE9UTElTVF9NT05JVE9SX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRVhUU0NBTl9HRVRfQ0FDSEVEX1JFU1VMVFNfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9FWFRTQ0FOX0dFVF9XTEFOX0NIQU5HRV9SRVNVTFRTX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRVhUU0NBTl9TRVRfQ0FQQUJJTElUSUVTX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRVhUU0NBTl9HRVRfQ0FQQUJJTElUSUVTX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRVhUU0NBTl9PUEVSQVRJT05fRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0VYVFNDQU5fU1RBUlRfU1RPUF9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRVhUU0NBTl9UQUJMRV9VU0FHRV9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRVhUU0NBTl9XTEFOX0RFU0NSSVBUT1JfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0VYVFNDQU5fUlNTSV9JTkZPX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9FWFRTQ0FOX0NBQ0hFRF9SRVNVTFRTX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9FWFRTQ0FOX1dMQU5fQ0hBTkdFX1JFU1VMVFNfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0VYVFNDQU5fV0xBTl9DSEFOR0VfUkVTVUxUX0JTU0lEX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9FWFRTQ0FOX0hPVExJU1RfTUFUQ0hfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX0VYVFNDQU5fQ0FQQUJJTElUSUVTX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9FWFRTQ0FOX0NBQ0hFX0NBUEFCSUxJVElFU19FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRVhUU0NBTl9XTEFOX0NIQU5HRV9NT05JVE9SX0NBUEFCSUxJVElFU19FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfRVhUU0NBTl9IT1RMSVNUX01PTklUT1JfQ0FQQUJJTElUSUVTX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9EMF9XT1dfRU5BQkxFX0RJU0FCTEVfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9EMF9XT1dfRElTQUJMRV9BQ0tfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1VOSVRfVEVTVF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1JPQU1fT0ZGTE9BRF9UTFZfUEFSQU0sCisJV01JX1RMVl9UQUdfU1RSVUNUX1JPQU1fMTFJX09GRkxPQURfVExWX1BBUkFNLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9ST0FNXzExUl9PRkZMT0FEX1RMVl9QQVJBTSwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUk9BTV9FU0VfT0ZGTE9BRF9UTFZfUEFSQU0sCisJV01JX1RMVl9UQUdfU1RSVUNUX1JPQU1fU1lOQ0hfRVZFTlQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1JPQU1fU1lOQ0hfQ09NUExFVEUsCisJV01JX1RMVl9UQUdfU1RSVUNUX0VYVFdPV19FTkFCTEVfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9FWFRXT1dfU0VUX0FQUF9UWVBFMV9QQVJBTVNfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9FWFRXT1dfU0VUX0FQUF9UWVBFMl9QQVJBTVNfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9MUElfU1RBVFVTX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9MUElfSEFORE9GRl9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfVkRFVl9SQVRFX1NUQVRTX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9WREVWX1JBVEVfSFRfSU5GTywKKwlXTUlfVExWX1RBR19TVFJVQ1RfUklDX1JFUVVFU1QsCisJV01JX1RMVl9UQUdfU1RSVUNUX1BERVZfR0VUX1RFTVBFUkFUVVJFX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUERFVl9URU1QRVJBVFVSRV9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfU0VUX0RIQ1BfU0VSVkVSX09GRkxPQURfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9UUENfQ0hBSU5NQVNLX0NPTkZJR19DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1JJQ19UU1BFQywKKwlXTUlfVExWX1RBR19TVFJVQ1RfVFBDX0NIQUlOTUFTS19DT05GSUcsCisJV01JX1RMVl9UQUdfU1RSVUNUX0lQQV9PRkZMT0FEX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfU0NBTl9QUk9CX1JFUV9PVUlfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9LRVlfTUFURVJJQUwsCisJV01JX1RMVl9UQUdfU1RSVUNUX1RETFNfU0VUX09GRkNIQU5fTU9ERV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1NFVF9MRURfRkxBU0hJTkdfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9NRE5TX09GRkxPQURfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9NRE5TX1NFVF9GUUROX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfTUROU19TRVRfUkVTUF9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX01ETlNfR0VUX1NUQVRTX0NNRCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfTUROU19TVEFUU19FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUk9BTV9JTlZPS0VfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9QREVWX1JFU1VNRV9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfUERFVl9TRVRfQU5URU5OQV9ESVZFUlNJVFlfQ01ELAorCVdNSV9UTFZfVEFHX1NUUlVDVF9TQVBfT0ZMX0VOQUJMRV9DTUQsCisJV01JX1RMVl9UQUdfU1RSVUNUX1NBUF9PRkxfQUREX1NUQV9FVkVOVCwKKwlXTUlfVExWX1RBR19TVFJVQ1RfU0FQX09GTF9ERUxfU1RBX0VWRU5ULAorCVdNSV9UTFZfVEFHX1NUUlVDVF9BUEZJTkRfQ01EX1BBUkFNLAorCVdNSV9UTFZfVEFHX1NUUlVDVF9BUEZJTkRfRVZFTlRfSERSLAorCisJV01JX1RMVl9UQUdfTUFYCit9OworCitlbnVtIHdtaV90bHZfc2VydmljZSB7CisJV01JX1RMVl9TRVJWSUNFX0JFQUNPTl9PRkZMT0FEID0gMCwKKwlXTUlfVExWX1NFUlZJQ0VfU0NBTl9PRkZMT0FELAorCVdNSV9UTFZfU0VSVklDRV9ST0FNX1NDQU5fT0ZGTE9BRCwKKwlXTUlfVExWX1NFUlZJQ0VfQkNOX01JU1NfT0ZGTE9BRCwKKwlXTUlfVExWX1NFUlZJQ0VfU1RBX1BXUlNBVkUsCisJV01JX1RMVl9TRVJWSUNFX1NUQV9BRFZBTkNFRF9QV1JTQVZFLAorCVdNSV9UTFZfU0VSVklDRV9BUF9VQVBTRCwKKwlXTUlfVExWX1NFUlZJQ0VfQVBfREZTLAorCVdNSV9UTFZfU0VSVklDRV8xMUFDLAorCVdNSV9UTFZfU0VSVklDRV9CTE9DS0FDSywKKwlXTUlfVExWX1NFUlZJQ0VfUEhZRVJSLAorCVdNSV9UTFZfU0VSVklDRV9CQ05fRklMVEVSLAorCVdNSV9UTFZfU0VSVklDRV9SVFQsCisJV01JX1RMVl9TRVJWSUNFX1dPVywKKwlXTUlfVExWX1NFUlZJQ0VfUkFURUNUUkxfQ0FDSEUsCisJV01JX1RMVl9TRVJWSUNFX0lSQU1fVElEUywKKwlXTUlfVExWX1NFUlZJQ0VfQVJQTlNfT0ZGTE9BRCwKKwlXTUlfVExWX1NFUlZJQ0VfTkxPLAorCVdNSV9UTFZfU0VSVklDRV9HVEtfT0ZGTE9BRCwKKwlXTUlfVExWX1NFUlZJQ0VfU0NBTl9TQ0gsCisJV01JX1RMVl9TRVJWSUNFX0NTQV9PRkZMT0FELAorCVdNSV9UTFZfU0VSVklDRV9DSEFUVEVSLAorCVdNSV9UTFZfU0VSVklDRV9DT0VYX0ZSRVFBVk9JRCwKKwlXTUlfVExWX1NFUlZJQ0VfUEFDS0VUX1BPV0VSX1NBVkUsCisJV01JX1RMVl9TRVJWSUNFX0ZPUkNFX0ZXX0hBTkcsCisJV01JX1RMVl9TRVJWSUNFX0dQSU8sCisJV01JX1RMVl9TRVJWSUNFX1NUQV9EVElNX1BTX01PRFVMQVRFRF9EVElNLAorCVdNSV9UTFZfU0VSVklDRV9TVEFfVUFQU0RfQkFTSUNfQVVUT19UUklHLAorCVdNSV9UTFZfU0VSVklDRV9TVEFfVUFQU0RfVkFSX0FVVE9fVFJJRywKKwlXTUlfVExWX1NFUlZJQ0VfU1RBX0tFRVBfQUxJVkUsCisJV01JX1RMVl9TRVJWSUNFX1RYX0VOQ0FQLAorCVdNSV9UTFZfU0VSVklDRV9BUF9QU19ERVRFQ1RfT1VUX09GX1NZTkMsCisJV01JX1RMVl9TRVJWSUNFX0VBUkxZX1JYLAorCVdNSV9UTFZfU0VSVklDRV9TVEFfU01QUywKKwlXTUlfVExWX1NFUlZJQ0VfRldURVNULAorCVdNSV9UTFZfU0VSVklDRV9TVEFfV01NQUMsCisJV01JX1RMVl9TRVJWSUNFX1RETFMsCisJV01JX1RMVl9TRVJWSUNFX0JVUlNULAorCVdNSV9UTFZfU0VSVklDRV9NQ0NfQkNOX0lOVEVSVkFMX0NIQU5HRSwKKwlXTUlfVExWX1NFUlZJQ0VfQURBUFRJVkVfT0NTLAorCVdNSV9UTFZfU0VSVklDRV9CQV9TU05fU1VQUE9SVCwKKwlXTUlfVExWX1NFUlZJQ0VfRklMVEVSX0lQU0VDX05BVEtFRVBBTElWRSwKKwlXTUlfVExWX1NFUlZJQ0VfV0xBTl9IQiwKKwlXTUlfVExWX1NFUlZJQ0VfTFRFX0FOVF9TSEFSRV9TVVBQT1JULAorCVdNSV9UTFZfU0VSVklDRV9CQVRDSF9TQ0FOLAorCVdNSV9UTFZfU0VSVklDRV9RUE9XRVIsCisJV01JX1RMVl9TRVJWSUNFX1BMTVJFUSwKKwlXTUlfVExWX1NFUlZJQ0VfVEhFUk1BTF9NR01ULAorCVdNSV9UTFZfU0VSVklDRV9STUMsCisJV01JX1RMVl9TRVJWSUNFX01IRl9PRkZMT0FELAorCVdNSV9UTFZfU0VSVklDRV9DT0VYX1NBUiwKKwlXTUlfVExWX1NFUlZJQ0VfQkNOX1RYUkFURV9PVkVSUklERSwKKwlXTUlfVExWX1NFUlZJQ0VfTkFOLAorCVdNSV9UTFZfU0VSVklDRV9MMVNTX1NUQVQsCisJV01JX1RMVl9TRVJWSUNFX0VTVElNQVRFX0xJTktTUEVFRCwKKwlXTUlfVExWX1NFUlZJQ0VfT0JTU19TQ0FOLAorCVdNSV9UTFZfU0VSVklDRV9URExTX09GRkNIQU4sCisJV01JX1RMVl9TRVJWSUNFX1RETFNfVUFQU0RfQlVGRkVSX1NUQSwKKwlXTUlfVExWX1NFUlZJQ0VfVERMU19VQVBTRF9TTEVFUF9TVEEsCisJV01JX1RMVl9TRVJWSUNFX0lCU1NfUFdSU0FWRSwKKwlXTUlfVExWX1NFUlZJQ0VfTFBBU1MsCisJV01JX1RMVl9TRVJWSUNFX0VYVFNDQU4sCisJV01JX1RMVl9TRVJWSUNFX0QwV09XLAorCVdNSV9UTFZfU0VSVklDRV9IU09GRkxPQUQsCisJV01JX1RMVl9TRVJWSUNFX1JPQU1fSE9fT0ZGTE9BRCwKKwlXTUlfVExWX1NFUlZJQ0VfUlhfRlVMTF9SRU9SREVSLAorCVdNSV9UTFZfU0VSVklDRV9ESENQX09GRkxPQUQsCisJV01JX1RMVl9TRVJWSUNFX1NUQV9SWF9JUEFfT0ZGTE9BRF9TVVBQT1JULAorCVdNSV9UTFZfU0VSVklDRV9NRE5TX09GRkxPQUQsCisJV01JX1RMVl9TRVJWSUNFX1NBUF9BVVRIX09GRkxPQUQsCit9OworCisjZGVmaW5lIFdNSV9TRVJWSUNFX0lTX0VOQUJMRUQod21pX3N2Y19ibWFwLCBzdmNfaWQsIGxlbikgXAorCSgoc3ZjX2lkKSA8IChsZW4pICYmIFwKKwkgX19sZTMyX3RvX2NwdSgod21pX3N2Y19ibWFwKVsoc3ZjX2lkKS8oc2l6ZW9mKHUzMikpXSkgJiBcCisJIEJJVCgoc3ZjX2lkKSUoc2l6ZW9mKHUzMikpKSkKKworI2RlZmluZSBTVkNNQVAoeCwgeSwgbGVuKSBcCisJZG8geyBcCisJCWlmIChXTUlfU0VSVklDRV9JU19FTkFCTEVEKChpbiksICh4KSwgKGxlbikpKSBcCisJCQlfX3NldF9iaXQoeSwgb3V0KTsgXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZAord21pX3Rsdl9zdmNfbWFwKGNvbnN0IF9fbGUzMiAqaW4sIHVuc2lnbmVkIGxvbmcgKm91dCwgc2l6ZV90IGxlbikKK3sKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0JFQUNPTl9PRkZMT0FELAorCSAgICAgICBXTUlfU0VSVklDRV9CRUFDT05fT0ZGTE9BRCwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX1NDQU5fT0ZGTE9BRCwKKwkgICAgICAgV01JX1NFUlZJQ0VfU0NBTl9PRkZMT0FELCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfUk9BTV9TQ0FOX09GRkxPQUQsCisJICAgICAgIFdNSV9TRVJWSUNFX1JPQU1fU0NBTl9PRkZMT0FELCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfQkNOX01JU1NfT0ZGTE9BRCwKKwkgICAgICAgV01JX1NFUlZJQ0VfQkNOX01JU1NfT0ZGTE9BRCwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX1NUQV9QV1JTQVZFLAorCSAgICAgICBXTUlfU0VSVklDRV9TVEFfUFdSU0FWRSwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX1NUQV9BRFZBTkNFRF9QV1JTQVZFLAorCSAgICAgICBXTUlfU0VSVklDRV9TVEFfQURWQU5DRURfUFdSU0FWRSwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0FQX1VBUFNELAorCSAgICAgICBXTUlfU0VSVklDRV9BUF9VQVBTRCwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0FQX0RGUywKKwkgICAgICAgV01JX1NFUlZJQ0VfQVBfREZTLCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfMTFBQywKKwkgICAgICAgV01JX1NFUlZJQ0VfMTFBQywgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0JMT0NLQUNLLAorCSAgICAgICBXTUlfU0VSVklDRV9CTE9DS0FDSywgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX1BIWUVSUiwKKwkgICAgICAgV01JX1NFUlZJQ0VfUEhZRVJSLCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfQkNOX0ZJTFRFUiwKKwkgICAgICAgV01JX1NFUlZJQ0VfQkNOX0ZJTFRFUiwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX1JUVCwKKwkgICAgICAgV01JX1NFUlZJQ0VfUlRULCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfV09XLAorCSAgICAgICBXTUlfU0VSVklDRV9XT1csIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9SQVRFQ1RSTF9DQUNIRSwKKwkgICAgICAgV01JX1NFUlZJQ0VfUkFURUNUUkxfQ0FDSEUsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9JUkFNX1RJRFMsCisJICAgICAgIFdNSV9TRVJWSUNFX0lSQU1fVElEUywgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0FSUE5TX09GRkxPQUQsCisJICAgICAgIFdNSV9TRVJWSUNFX0FSUE5TX09GRkxPQUQsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9OTE8sCisJICAgICAgIFdNSV9TRVJWSUNFX05MTywgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0dUS19PRkZMT0FELAorCSAgICAgICBXTUlfU0VSVklDRV9HVEtfT0ZGTE9BRCwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX1NDQU5fU0NILAorCSAgICAgICBXTUlfU0VSVklDRV9TQ0FOX1NDSCwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0NTQV9PRkZMT0FELAorCSAgICAgICBXTUlfU0VSVklDRV9DU0FfT0ZGTE9BRCwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0NIQVRURVIsCisJICAgICAgIFdNSV9TRVJWSUNFX0NIQVRURVIsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9DT0VYX0ZSRVFBVk9JRCwKKwkgICAgICAgV01JX1NFUlZJQ0VfQ09FWF9GUkVRQVZPSUQsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9QQUNLRVRfUE9XRVJfU0FWRSwKKwkgICAgICAgV01JX1NFUlZJQ0VfUEFDS0VUX1BPV0VSX1NBVkUsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9GT1JDRV9GV19IQU5HLAorCSAgICAgICBXTUlfU0VSVklDRV9GT1JDRV9GV19IQU5HLCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfR1BJTywKKwkgICAgICAgV01JX1NFUlZJQ0VfR1BJTywgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX1NUQV9EVElNX1BTX01PRFVMQVRFRF9EVElNLAorCSAgICAgICBXTUlfU0VSVklDRV9TVEFfRFRJTV9QU19NT0RVTEFURURfRFRJTSwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX1NUQV9VQVBTRF9CQVNJQ19BVVRPX1RSSUcsCisJICAgICAgIFdNSV9TRVJWSUNFX1NUQV9VQVBTRF9CQVNJQ19BVVRPX1RSSUcsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9TVEFfVUFQU0RfVkFSX0FVVE9fVFJJRywKKwkgICAgICAgV01JX1NFUlZJQ0VfU1RBX1VBUFNEX1ZBUl9BVVRPX1RSSUcsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9TVEFfS0VFUF9BTElWRSwKKwkgICAgICAgV01JX1NFUlZJQ0VfU1RBX0tFRVBfQUxJVkUsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9UWF9FTkNBUCwKKwkgICAgICAgV01JX1NFUlZJQ0VfVFhfRU5DQVAsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9BUF9QU19ERVRFQ1RfT1VUX09GX1NZTkMsCisJICAgICAgIFdNSV9TRVJWSUNFX0FQX1BTX0RFVEVDVF9PVVRfT0ZfU1lOQywgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0VBUkxZX1JYLAorCSAgICAgICBXTUlfU0VSVklDRV9FQVJMWV9SWCwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX1NUQV9TTVBTLAorCSAgICAgICBXTUlfU0VSVklDRV9TVEFfU01QUywgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0ZXVEVTVCwKKwkgICAgICAgV01JX1NFUlZJQ0VfRldURVNULCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfU1RBX1dNTUFDLAorCSAgICAgICBXTUlfU0VSVklDRV9TVEFfV01NQUMsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9URExTLAorCSAgICAgICBXTUlfU0VSVklDRV9URExTLCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfQlVSU1QsCisJICAgICAgIFdNSV9TRVJWSUNFX0JVUlNULCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfTUNDX0JDTl9JTlRFUlZBTF9DSEFOR0UsCisJICAgICAgIFdNSV9TRVJWSUNFX01DQ19CQ05fSU5URVJWQUxfQ0hBTkdFLCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfQURBUFRJVkVfT0NTLAorCSAgICAgICBXTUlfU0VSVklDRV9BREFQVElWRV9PQ1MsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9CQV9TU05fU1VQUE9SVCwKKwkgICAgICAgV01JX1NFUlZJQ0VfQkFfU1NOX1NVUFBPUlQsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9GSUxURVJfSVBTRUNfTkFUS0VFUEFMSVZFLAorCSAgICAgICBXTUlfU0VSVklDRV9GSUxURVJfSVBTRUNfTkFUS0VFUEFMSVZFLCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfV0xBTl9IQiwKKwkgICAgICAgV01JX1NFUlZJQ0VfV0xBTl9IQiwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0xURV9BTlRfU0hBUkVfU1VQUE9SVCwKKwkgICAgICAgV01JX1NFUlZJQ0VfTFRFX0FOVF9TSEFSRV9TVVBQT1JULCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfQkFUQ0hfU0NBTiwKKwkgICAgICAgV01JX1NFUlZJQ0VfQkFUQ0hfU0NBTiwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX1FQT1dFUiwKKwkgICAgICAgV01JX1NFUlZJQ0VfUVBPV0VSLCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfUExNUkVRLAorCSAgICAgICBXTUlfU0VSVklDRV9QTE1SRVEsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9USEVSTUFMX01HTVQsCisJICAgICAgIFdNSV9TRVJWSUNFX1RIRVJNQUxfTUdNVCwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX1JNQywKKwkgICAgICAgV01JX1NFUlZJQ0VfUk1DLCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfTUhGX09GRkxPQUQsCisJICAgICAgIFdNSV9TRVJWSUNFX01IRl9PRkZMT0FELCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfQ09FWF9TQVIsCisJICAgICAgIFdNSV9TRVJWSUNFX0NPRVhfU0FSLCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfQkNOX1RYUkFURV9PVkVSUklERSwKKwkgICAgICAgV01JX1NFUlZJQ0VfQkNOX1RYUkFURV9PVkVSUklERSwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX05BTiwKKwkgICAgICAgV01JX1NFUlZJQ0VfTkFOLCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfTDFTU19TVEFULAorCSAgICAgICBXTUlfU0VSVklDRV9MMVNTX1NUQVQsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9FU1RJTUFURV9MSU5LU1BFRUQsCisJICAgICAgIFdNSV9TRVJWSUNFX0VTVElNQVRFX0xJTktTUEVFRCwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX09CU1NfU0NBTiwKKwkgICAgICAgV01JX1NFUlZJQ0VfT0JTU19TQ0FOLCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfVERMU19PRkZDSEFOLAorCSAgICAgICBXTUlfU0VSVklDRV9URExTX09GRkNIQU4sIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9URExTX1VBUFNEX0JVRkZFUl9TVEEsCisJICAgICAgIFdNSV9TRVJWSUNFX1RETFNfVUFQU0RfQlVGRkVSX1NUQSwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX1RETFNfVUFQU0RfU0xFRVBfU1RBLAorCSAgICAgICBXTUlfU0VSVklDRV9URExTX1VBUFNEX1NMRUVQX1NUQSwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0lCU1NfUFdSU0FWRSwKKwkgICAgICAgV01JX1NFUlZJQ0VfSUJTU19QV1JTQVZFLCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfTFBBU1MsCisJICAgICAgIFdNSV9TRVJWSUNFX0xQQVNTLCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfRVhUU0NBTiwKKwkgICAgICAgV01JX1NFUlZJQ0VfRVhUU0NBTiwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0QwV09XLAorCSAgICAgICBXTUlfU0VSVklDRV9EMFdPVywgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0hTT0ZGTE9BRCwKKwkgICAgICAgV01JX1NFUlZJQ0VfSFNPRkZMT0FELCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfUk9BTV9IT19PRkZMT0FELAorCSAgICAgICBXTUlfU0VSVklDRV9ST0FNX0hPX09GRkxPQUQsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9SWF9GVUxMX1JFT1JERVIsCisJICAgICAgIFdNSV9TRVJWSUNFX1JYX0ZVTExfUkVPUkRFUiwgbGVuKTsKKwlTVkNNQVAoV01JX1RMVl9TRVJWSUNFX0RIQ1BfT0ZGTE9BRCwKKwkgICAgICAgV01JX1NFUlZJQ0VfREhDUF9PRkZMT0FELCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfU1RBX1JYX0lQQV9PRkZMT0FEX1NVUFBPUlQsCisJICAgICAgIFdNSV9TRVJWSUNFX1NUQV9SWF9JUEFfT0ZGTE9BRF9TVVBQT1JULCBsZW4pOworCVNWQ01BUChXTUlfVExWX1NFUlZJQ0VfTUROU19PRkZMT0FELAorCSAgICAgICBXTUlfU0VSVklDRV9NRE5TX09GRkxPQUQsIGxlbik7CisJU1ZDTUFQKFdNSV9UTFZfU0VSVklDRV9TQVBfQVVUSF9PRkZMT0FELAorCSAgICAgICBXTUlfU0VSVklDRV9TQVBfQVVUSF9PRkZMT0FELCBsZW4pOworfQorCisjdW5kZWYgU1ZDTUFQCisKK3N0cnVjdCB3bWlfdGx2IHsKKwlfX2xlMTYgbGVuOworCV9fbGUxNiB0YWc7CisJdTggdmFsdWVbMF07Cit9IF9fcGFja2VkOworCisjZGVmaW5lIFdNSV9UTFZfTUdNVF9SWF9OVU1fUlNTSSA0CisKK3N0cnVjdCB3bWlfdGx2X21nbXRfcnhfZXYgeworCV9fbGUzMiBjaGFubmVsOworCV9fbGUzMiBzbnI7CisJX19sZTMyIHJhdGU7CisJX19sZTMyIHBoeV9tb2RlOworCV9fbGUzMiBidWZfbGVuOworCV9fbGUzMiBzdGF0dXM7CisJX19sZTMyIHJzc2lbV01JX1RMVl9NR01UX1JYX05VTV9SU1NJXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bWlfdGx2X2FiaV92ZXJzaW9uIHsKKwlfX2xlMzIgYWJpX3ZlcjA7CisJX19sZTMyIGFiaV92ZXIxOworCV9fbGUzMiBhYmlfdmVyX25zMDsKKwlfX2xlMzIgYWJpX3Zlcl9uczE7CisJX19sZTMyIGFiaV92ZXJfbnMyOworCV9fbGUzMiBhYmlfdmVyX25zMzsKK30gX19wYWNrZWQ7CisKK2VudW0gd21pX3Rsdl9od19iZF9pZCB7CisJV01JX1RMVl9IV19CRF9MRUdBQ1kgPSAwLAorCVdNSV9UTFZfSFdfQkRfUUNBNjE3NCA9IDEsCisJV01JX1RMVl9IV19CRF9RQ0EyNTgyID0gMiwKK307CisKK3N0cnVjdCB3bWlfdGx2X2h3X2JkX2luZm8geworCXU4IHJldjsKKwl1OCBwcm9qZWN0X2lkOworCXU4IGN1c3RvbV9pZDsKKwl1OCByZWZlcmVuY2VfZGVzaWduX2lkOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV90bHZfc3ZjX3JkeV9ldiB7CisJX19sZTMyIGZ3X2J1aWxkX3ZlcnM7CisJc3RydWN0IHdtaV90bHZfYWJpX3ZlcnNpb24gYWJpOworCV9fbGUzMiBwaHlfY2FwYWJpbGl0eTsKKwlfX2xlMzIgbWF4X2ZyYWdfZW50cnk7CisJX19sZTMyIG51bV9yZl9jaGFpbnM7CisJX19sZTMyIGh0X2NhcF9pbmZvOworCV9fbGUzMiB2aHRfY2FwX2luZm87CisJX19sZTMyIHZodF9zdXBwX21jczsKKwlfX2xlMzIgaHdfbWluX3R4X3Bvd2VyOworCV9fbGUzMiBod19tYXhfdHhfcG93ZXI7CisJX19sZTMyIHN5c19jYXBfaW5mbzsKKwlfX2xlMzIgbWluX3BrdF9zaXplX2VuYWJsZTsKKwlfX2xlMzIgbWF4X2Jjbl9pZV9zaXplOworCV9fbGUzMiBudW1fbWVtX3JlcXM7CisJX19sZTMyIG1heF9udW1fc2Nhbl9jaGFuczsKKwlfX2xlMzIgaHdfYmRfaWQ7IC8qIDAgbWVhbnMgaHdfYmRfaW5mbyBpcyBpbnZhbGlkICovCisJc3RydWN0IHdtaV90bHZfaHdfYmRfaW5mbyBod19iZF9pbmZvWzVdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV90bHZfcmR5X2V2IHsKKwlzdHJ1Y3Qgd21pX3Rsdl9hYmlfdmVyc2lvbiBhYmk7CisJc3RydWN0IHdtaV9tYWNfYWRkciBtYWNfYWRkcjsKKwlfX2xlMzIgc3RhdHVzOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV90bHZfcmVzb3VyY2VfY29uZmlnIHsKKwlfX2xlMzIgbnVtX3ZkZXZzOworCV9fbGUzMiBudW1fcGVlcnM7CisJX19sZTMyIG51bV9vZmZsb2FkX3BlZXJzOworCV9fbGUzMiBudW1fb2ZmbG9hZF9yZW9yZGVyX2J1ZnM7CisJX19sZTMyIG51bV9wZWVyX2tleXM7CisJX19sZTMyIG51bV90aWRzOworCV9fbGUzMiBhc3Rfc2tpZF9saW1pdDsKKwlfX2xlMzIgdHhfY2hhaW5fbWFzazsKKwlfX2xlMzIgcnhfY2hhaW5fbWFzazsKKwlfX2xlMzIgcnhfdGltZW91dF9wcmlbNF07CisJX19sZTMyIHJ4X2RlY2FwX21vZGU7CisJX19sZTMyIHNjYW5fbWF4X3BlbmRpbmdfcmVxczsKKwlfX2xlMzIgYm1pc3Nfb2ZmbG9hZF9tYXhfdmRldjsKKwlfX2xlMzIgcm9hbV9vZmZsb2FkX21heF92ZGV2OworCV9fbGUzMiByb2FtX29mZmxvYWRfbWF4X2FwX3Byb2ZpbGVzOworCV9fbGUzMiBudW1fbWNhc3RfZ3JvdXBzOworCV9fbGUzMiBudW1fbWNhc3RfdGFibGVfZWxlbXM7CisJX19sZTMyIG1jYXN0MnVjYXN0X21vZGU7CisJX19sZTMyIHR4X2RiZ19sb2dfc2l6ZTsKKwlfX2xlMzIgbnVtX3dkc19lbnRyaWVzOworCV9fbGUzMiBkbWFfYnVyc3Rfc2l6ZTsKKwlfX2xlMzIgbWFjX2FnZ3JfZGVsaW07CisJX19sZTMyIHJ4X3NraXBfZGVmcmFnX3RpbWVvdXRfZHVwX2RldGVjdGlvbl9jaGVjazsKKwlfX2xlMzIgdm93X2NvbmZpZzsKKwlfX2xlMzIgZ3RrX29mZmxvYWRfbWF4X3ZkZXY7CisJX19sZTMyIG51bV9tc2R1X2Rlc2M7CisJX19sZTMyIG1heF9mcmFnX2VudHJpZXM7CisJX19sZTMyIG51bV90ZGxzX3ZkZXZzOworCV9fbGUzMiBudW1fdGRsc19jb25uX3RhYmxlX2VudHJpZXM7CisJX19sZTMyIGJlYWNvbl90eF9vZmZsb2FkX21heF92ZGV2OworCV9fbGUzMiBudW1fbXVsdGljYXN0X2ZpbHRlcl9lbnRyaWVzOworCV9fbGUzMiBudW1fd293X2ZpbHRlcnM7CisJX19sZTMyIG51bV9rZWVwX2FsaXZlX3BhdHRlcm47CisJX19sZTMyIGtlZXBfYWxpdmVfcGF0dGVybl9zaXplOworCV9fbGUzMiBtYXhfdGRsc19jb25jdXJyZW50X3NsZWVwX3N0YTsKKwlfX2xlMzIgbWF4X3RkbHNfY29uY3VycmVudF9idWZmZXJfc3RhOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV90bHZfaW5pdF9jbWQgeworCXN0cnVjdCB3bWlfdGx2X2FiaV92ZXJzaW9uIGFiaTsKKwlfX2xlMzIgbnVtX2hvc3RfbWVtX2NodW5rczsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bWlfdGx2X3BkZXZfc2V0X3BhcmFtX2NtZCB7CisJX19sZTMyIHBkZXZfaWQ7IC8qIG5vdCB1c2VkIHlldCAqLworCV9fbGUzMiBwYXJhbV9pZDsKKwlfX2xlMzIgcGFyYW1fdmFsdWU7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd21pX3Rsdl9wZGV2X3NldF9yZF9jbWQgeworCV9fbGUzMiBwZGV2X2lkOyAvKiBub3QgdXNlZCB5ZXQgKi8KKwlfX2xlMzIgcmVnZDsKKwlfX2xlMzIgcmVnZF8yZ2h6OworCV9fbGUzMiByZWdkXzVnaHo7CisJX19sZTMyIGNvbmZvcm1fbGltaXRfMmdoejsKKwlfX2xlMzIgY29uZm9ybV9saW1pdF81Z2h6OworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV90bHZfc2Nhbl9jaGFuX2xpc3RfY21kIHsKKwlfX2xlMzIgbnVtX3NjYW5fY2hhbnM7Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd21pX3Rsdl9zdGFydF9zY2FuX2NtZCB7CisJc3RydWN0IHdtaV9zdGFydF9zY2FuX2NvbW1vbiBjb21tb247CisJX19sZTMyIGJ1cnN0X2R1cmF0aW9uX21zOworCV9fbGUzMiBudW1fY2hhbm5lbHM7CisJX19sZTMyIG51bV9ic3NpZHM7CisJX19sZTMyIG51bV9zc2lkczsKKwlfX2xlMzIgaWVfbGVuOworCV9fbGUzMiBudW1fcHJvYmVzOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV90bHZfdmRldl9zdGFydF9jbWQgeworCV9fbGUzMiB2ZGV2X2lkOworCV9fbGUzMiByZXF1ZXN0b3JfaWQ7CisJX19sZTMyIGJjbl9pbnR2YWw7CisJX19sZTMyIGR0aW1fcGVyaW9kOworCV9fbGUzMiBmbGFnczsKKwlzdHJ1Y3Qgd21pX3NzaWQgc3NpZDsKKwlfX2xlMzIgYmNuX3R4X3JhdGU7CisJX19sZTMyIGJjbl90eF9wb3dlcjsKKwlfX2xlMzIgbnVtX25vYV9kZXNjcjsKKwlfX2xlMzIgZGlzYWJsZV9od19hY2s7Cit9IF9fcGFja2VkOworCitlbnVtIHsKKwlXTUlfVExWX1BFRVJfVFlQRV9ERUZBVUxUID0gMCwgLyogZ2VuZXJpYyAvIG5vbi1CU1MgLyBzZWxmLXBlZXIgKi8KKwlXTUlfVExWX1BFRVJfVFlQRV9CU1MgPSAxLAorCVdNSV9UTFZfUEVFUl9UWVBFX1RETFMgPSAyLAorCVdNSV9UTFZfUEVFUl9UWVBFX0hPU1RfTUFYID0gMTI3LAorCVdNSV9UTFZfUEVFUl9UWVBFX1JPQU1PRkZMT0FEX1RNUCA9IDEyOCwKK307CisKK3N0cnVjdCB3bWlfdGx2X3BlZXJfY3JlYXRlX2NtZCB7CisJX19sZTMyIHZkZXZfaWQ7CisJc3RydWN0IHdtaV9tYWNfYWRkciBwZWVyX2FkZHI7CisJX19sZTMyIHBlZXJfdHlwZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bWlfdGx2X3BlZXJfYXNzb2NfY21kIHsKKwlzdHJ1Y3Qgd21pX21hY19hZGRyIG1hY19hZGRyOworCV9fbGUzMiB2ZGV2X2lkOworCV9fbGUzMiBuZXdfYXNzb2M7CisJX19sZTMyIGFzc29jX2lkOworCV9fbGUzMiBmbGFnczsKKwlfX2xlMzIgY2FwczsKKwlfX2xlMzIgbGlzdGVuX2ludHZhbDsKKwlfX2xlMzIgaHRfY2FwczsKKwlfX2xlMzIgbWF4X21wZHU7CisJX19sZTMyIG1wZHVfZGVuc2l0eTsKKwlfX2xlMzIgcmF0ZV9jYXBzOworCV9fbGUzMiBuc3M7CisJX19sZTMyIHZodF9jYXBzOworCV9fbGUzMiBwaHlfbW9kZTsKKwlfX2xlMzIgaHRfaW5mb1syXTsKKwlfX2xlMzIgbnVtX2xlZ2FjeV9yYXRlczsKKwlfX2xlMzIgbnVtX2h0X3JhdGVzOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV90bHZfcGRldl9zdXNwZW5kIHsKKwlfX2xlMzIgcGRldl9pZDsgLyogbm90IHVzZWQgeWV0ICovCisJX19sZTMyIG9wdDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bWlfdGx2X3BkZXZfc2V0X3dtbV9jbWQgeworCV9fbGUzMiBwZGV2X2lkOyAvKiBub3QgdXNlZCB5ZXQgKi8KKwlfX2xlMzIgZGdfdHlwZTsgLyogbm8gaWRlYS4uICovCit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd21pX3Rsdl92ZGV2X3NldF93bW1fY21kIHsKKwlfX2xlMzIgdmRldl9pZDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bWlfdGx2X3BoeWVycl9ldiB7CisJX19sZTMyIG51bV9waHllcnJzOworCV9fbGUzMiB0c2ZfbDMyOworCV9fbGUzMiB0c2ZfdTMyOworCV9fbGUzMiBidWZfbGVuOworfSBfX3BhY2tlZDsKKworZW51bSB3bWlfdGx2X2RiZ2xvZ19wYXJhbSB7CisJV01JX1RMVl9EQkdMT0dfUEFSQU1fTE9HX0xFVkVMID0gMSwKKwlXTUlfVExWX0RCR0xPR19QQVJBTV9WREVWX0VOQUJMRSwKKwlXTUlfVExWX0RCR0xPR19QQVJBTV9WREVWX0RJU0FCTEUsCisJV01JX1RMVl9EQkdMT0dfUEFSQU1fVkRFVl9FTkFCTEVfQklUTUFQLAorCVdNSV9UTFZfREJHTE9HX1BBUkFNX1ZERVZfRElTQUJMRV9CSVRNQVAsCit9OworCitlbnVtIHdtaV90bHZfZGJnbG9nX2xvZ19sZXZlbCB7CisJV01JX1RMVl9EQkdMT0dfTE9HX0xFVkVMX1ZFUkJPU0UgPSAwLAorCVdNSV9UTFZfREJHTE9HX0xPR19MRVZFTF9JTkZPLAorCVdNSV9UTFZfREJHTE9HX0xPR19MRVZFTF9JTkZPX0xWTF8xLAorCVdNSV9UTFZfREJHTE9HX0xPR19MRVZFTF9JTkZPX0xWTF8yLAorCVdNSV9UTFZfREJHTE9HX0xPR19MRVZFTF9XQVJOLAorCVdNSV9UTFZfREJHTE9HX0xPR19MRVZFTF9FUlIsCit9OworCisjZGVmaW5lIFdNSV9UTFZfREJHTE9HX0JJVE1BUF9NQVhfSURTIDUxMgorI2RlZmluZSBXTUlfVExWX0RCR0xPR19CSVRNQVBfTUFYX1dPUkRTIChXTUlfVExWX0RCR0xPR19CSVRNQVBfTUFYX0lEUyAvIFwKKwkJCQkJIHNpemVvZihfX2xlMzIpKQorI2RlZmluZSBXTUlfVExWX0RCR0xPR19BTExfTU9EVUxFUyAweGZmZmYKKyNkZWZpbmUgV01JX1RMVl9EQkdMT0dfTE9HX0xFVkVMX1ZBTFVFKG1vZHVsZV9pZCwgbG9nX2xldmVsKSBcCisJCSgoKG1vZHVsZV9pZCA8PCAxNikgJiAweGZmZmYwMDAwKSB8IFwKKwkJICgobG9nX2xldmVsIDw8ICAwKSAmIDB4MDAwMDAwZmYpKQorCitzdHJ1Y3Qgd21pX3Rsdl9kYmdsb2dfY21kIHsKKwlfX2xlMzIgcGFyYW07CisJX19sZTMyIHZhbHVlOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV90bHZfcmVzdW1lX2NtZCB7CisJX19sZTMyIHJlc2VydmVkOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV90bHZfcmVxX3N0YXRzX2NtZCB7CisJX19sZTMyIHN0YXRzX2lkOyAvKiB3bWlfc3RhdHNfaWQgKi8KKwlfX2xlMzIgdmRldl9pZDsKKwlzdHJ1Y3Qgd21pX21hY19hZGRyIHBlZXJfbWFjYWRkcjsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bWlfdGx2X3ZkZXZfc3RhdHMgeworCV9fbGUzMiB2ZGV2X2lkOworCV9fbGUzMiBiZWFjb25fc25yOworCV9fbGUzMiBkYXRhX3NucjsKKwlfX2xlMzIgbnVtX3R4X2ZyYW1lc1s0XTsgLyogcGVyLUFDICovCisJX19sZTMyIG51bV9yeF9mcmFtZXM7CisJX19sZTMyIG51bV90eF9mcmFtZXNfcmV0cmllc1s0XTsKKwlfX2xlMzIgbnVtX3R4X2ZyYW1lc19mYWlsdXJlc1s0XTsKKwlfX2xlMzIgbnVtX3J0c19mYWlsOworCV9fbGUzMiBudW1fcnRzX3N1Y2Nlc3M7CisJX19sZTMyIG51bV9yeF9lcnI7CisJX19sZTMyIG51bV9yeF9kaXNjYXJkOworCV9fbGUzMiBudW1fdHhfbm90X2Fja2VkOworCV9fbGUzMiB0eF9yYXRlX2hpc3RvcnlbMTBdOworCV9fbGUzMiBiZWFjb25fcnNzaV9oaXN0b3J5WzEwXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bWlfdGx2X3BrdGxvZ19lbmFibGUgeworCV9fbGUzMiByZXNlcnZlZDsKKwlfX2xlMzIgZmlsdGVyOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV90bHZfcGt0bG9nX2Rpc2FibGUgeworCV9fbGUzMiByZXNlcnZlZDsKK30gX19wYWNrZWQ7CisKK2VudW0gd21pX3Rsdl9iY25fdHhfc3RhdHVzIHsKKwlXTUlfVExWX0JDTl9UWF9TVEFUVVNfT0ssCisJV01JX1RMVl9CQ05fVFhfU1RBVFVTX1hSRVRSWSwKKwlXTUlfVExWX0JDTl9UWF9TVEFUVVNfRFJPUCwKKwlXTUlfVExWX0JDTl9UWF9TVEFUVVNfRklMVEVSRUQsCit9OworCitzdHJ1Y3Qgd21pX3Rsdl9iY25fdHhfc3RhdHVzX2V2IHsKKwlfX2xlMzIgdmRldl9pZDsKKwlfX2xlMzIgdHhfc3RhdHVzOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV90bHZfYmNuX3ByYl9pbmZvIHsKKwlfX2xlMzIgY2FwczsKKwlfX2xlMzIgZXJwOworCXU4IGllc1swXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bWlfdGx2X2Jjbl90bXBsX2NtZCB7CisJX19sZTMyIHZkZXZfaWQ7CisJX19sZTMyIHRpbV9pZV9vZmZzZXQ7CisJX19sZTMyIGJ1Zl9sZW47Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd21pX3Rsdl9wcmJfdG1wbF9jbWQgeworCV9fbGUzMiB2ZGV2X2lkOworCV9fbGUzMiBidWZfbGVuOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV90bHZfcDJwX2dvX2Jjbl9pZSB7CisJX19sZTMyIHZkZXZfaWQ7CisJX19sZTMyIGllX2xlbjsKK30gX19wYWNrZWQ7CisKK2VudW0gd21pX3Rsdl9kaWFnX2l0ZW1fdHlwZSB7CisJV01JX1RMVl9ESUFHX0lURU1fVFlQRV9GV19FVkVOVCwKKwlXTUlfVExWX0RJQUdfSVRFTV9UWVBFX0ZXX0xPRywKKwlXTUlfVExWX0RJQUdfSVRFTV9UWVBFX0ZXX0RFQlVHX01TRywKK307CisKK3N0cnVjdCB3bWlfdGx2X2RpYWdfaXRlbSB7CisJdTggdHlwZTsKKwl1OCByZXNlcnZlZDsKKwlfX2xlMTYgbGVuOworCV9fbGUzMiB0aW1lc3RhbXA7CisJX19sZTMyIGNvZGU7CisJdTggcGF5bG9hZFswXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bWlfdGx2X2RpYWdfZGF0YV9ldiB7CisJX19sZTMyIG51bV9pdGVtczsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bWlfdGx2X3N0YV9rZWVwYWxpdmVfY21kIHsKKwlfX2xlMzIgdmRldl9pZDsKKwlfX2xlMzIgZW5hYmxlZDsKKwlfX2xlMzIgbWV0aG9kOyAvKiBXTUlfU1RBX0tFRVBBTElWRV9NRVRIT0RfICovCisJX19sZTMyIGludGVydmFsOyAvKiBpbiBzZWNvbmRzICovCit9IF9fcGFja2VkOworCit2b2lkIGF0aDEwa193bWlfdGx2X2F0dGFjaChzdHJ1Y3QgYXRoMTBrICphcik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLmMKaW5kZXggYzBmM2U0ZC4uYWVlYTFjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3dtaS5jCkBAIC0yMiw4ICsyMiwxMCBAQAogI2luY2x1ZGUgImh0Yy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAjaW5jbHVkZSAid21pLmgiCisjaW5jbHVkZSAid21pLXRsdi5oIgogI2luY2x1ZGUgIm1hYy5oIgogI2luY2x1ZGUgInRlc3Rtb2RlLmgiCisjaW5jbHVkZSAid21pLW9wcy5oIgogCiAvKiBNQUlOIFdNSSBjbWQgdHJhY2sgKi8KIHN0YXRpYyBzdHJ1Y3Qgd21pX2NtZF9tYXAgd21pX2NtZF9tYXAgPSB7CkBAIC0xNDMsNiArMTQ1LDcgQEAKIAkuZm9yY2VfZndfaGFuZ19jbWRpZCA9IFdNSV9GT1JDRV9GV19IQU5HX0NNRElELAogCS5ncGlvX2NvbmZpZ19jbWRpZCA9IFdNSV9HUElPX0NPTkZJR19DTURJRCwKIAkuZ3Bpb19vdXRwdXRfY21kaWQgPSBXTUlfR1BJT19PVVRQVVRfQ01ESUQsCisJLnBkZXZfZ2V0X3RlbXBlcmF0dXJlX2NtZGlkID0gV01JX0NNRF9VTlNVUFBPUlRFRCwKIH07CiAKIC8qIDEwLlggV01JIGNtZCB0cmFjayAqLwpAQCAtMjY1LDYgKzI2OCwxMjkgQEAKIAkuZm9yY2VfZndfaGFuZ19jbWRpZCA9IFdNSV9DTURfVU5TVVBQT1JURUQsCiAJLmdwaW9fY29uZmlnX2NtZGlkID0gV01JXzEwWF9HUElPX0NPTkZJR19DTURJRCwKIAkuZ3Bpb19vdXRwdXRfY21kaWQgPSBXTUlfMTBYX0dQSU9fT1VUUFVUX0NNRElELAorCS5wZGV2X2dldF90ZW1wZXJhdHVyZV9jbWRpZCA9IFdNSV9DTURfVU5TVVBQT1JURUQsCit9OworCisvKiAxMC4yLjQgV01JIGNtZCB0cmFjayAqLworc3RhdGljIHN0cnVjdCB3bWlfY21kX21hcCB3bWlfMTBfMl80X2NtZF9tYXAgPSB7CisJLmluaXRfY21kaWQgPSBXTUlfMTBfMl9JTklUX0NNRElELAorCS5zdGFydF9zY2FuX2NtZGlkID0gV01JXzEwXzJfU1RBUlRfU0NBTl9DTURJRCwKKwkuc3RvcF9zY2FuX2NtZGlkID0gV01JXzEwXzJfU1RPUF9TQ0FOX0NNRElELAorCS5zY2FuX2NoYW5fbGlzdF9jbWRpZCA9IFdNSV8xMF8yX1NDQU5fQ0hBTl9MSVNUX0NNRElELAorCS5zY2FuX3NjaF9wcmlvX3RibF9jbWRpZCA9IFdNSV9DTURfVU5TVVBQT1JURUQsCisJLnBkZXZfc2V0X3JlZ2RvbWFpbl9jbWRpZCA9IFdNSV8xMF8yX1BERVZfU0VUX1JFR0RPTUFJTl9DTURJRCwKKwkucGRldl9zZXRfY2hhbm5lbF9jbWRpZCA9IFdNSV8xMF8yX1BERVZfU0VUX0NIQU5ORUxfQ01ESUQsCisJLnBkZXZfc2V0X3BhcmFtX2NtZGlkID0gV01JXzEwXzJfUERFVl9TRVRfUEFSQU1fQ01ESUQsCisJLnBkZXZfcGt0bG9nX2VuYWJsZV9jbWRpZCA9IFdNSV8xMF8yX1BERVZfUEtUTE9HX0VOQUJMRV9DTURJRCwKKwkucGRldl9wa3Rsb2dfZGlzYWJsZV9jbWRpZCA9IFdNSV8xMF8yX1BERVZfUEtUTE9HX0RJU0FCTEVfQ01ESUQsCisJLnBkZXZfc2V0X3dtbV9wYXJhbXNfY21kaWQgPSBXTUlfMTBfMl9QREVWX1NFVF9XTU1fUEFSQU1TX0NNRElELAorCS5wZGV2X3NldF9odF9jYXBfaWVfY21kaWQgPSBXTUlfMTBfMl9QREVWX1NFVF9IVF9DQVBfSUVfQ01ESUQsCisJLnBkZXZfc2V0X3ZodF9jYXBfaWVfY21kaWQgPSBXTUlfMTBfMl9QREVWX1NFVF9WSFRfQ0FQX0lFX0NNRElELAorCS5wZGV2X3NldF9xdWlldF9tb2RlX2NtZGlkID0gV01JXzEwXzJfUERFVl9TRVRfUVVJRVRfTU9ERV9DTURJRCwKKwkucGRldl9ncmVlbl9hcF9wc19lbmFibGVfY21kaWQgPSBXTUlfMTBfMl9QREVWX0dSRUVOX0FQX1BTX0VOQUJMRV9DTURJRCwKKwkucGRldl9nZXRfdHBjX2NvbmZpZ19jbWRpZCA9IFdNSV8xMF8yX1BERVZfR0VUX1RQQ19DT05GSUdfQ01ESUQsCisJLnBkZXZfc2V0X2Jhc2VfbWFjYWRkcl9jbWRpZCA9IFdNSV8xMF8yX1BERVZfU0VUX0JBU0VfTUFDQUREUl9DTURJRCwKKwkudmRldl9jcmVhdGVfY21kaWQgPSBXTUlfMTBfMl9WREVWX0NSRUFURV9DTURJRCwKKwkudmRldl9kZWxldGVfY21kaWQgPSBXTUlfMTBfMl9WREVWX0RFTEVURV9DTURJRCwKKwkudmRldl9zdGFydF9yZXF1ZXN0X2NtZGlkID0gV01JXzEwXzJfVkRFVl9TVEFSVF9SRVFVRVNUX0NNRElELAorCS52ZGV2X3Jlc3RhcnRfcmVxdWVzdF9jbWRpZCA9IFdNSV8xMF8yX1ZERVZfUkVTVEFSVF9SRVFVRVNUX0NNRElELAorCS52ZGV2X3VwX2NtZGlkID0gV01JXzEwXzJfVkRFVl9VUF9DTURJRCwKKwkudmRldl9zdG9wX2NtZGlkID0gV01JXzEwXzJfVkRFVl9TVE9QX0NNRElELAorCS52ZGV2X2Rvd25fY21kaWQgPSBXTUlfMTBfMl9WREVWX0RPV05fQ01ESUQsCisJLnZkZXZfc2V0X3BhcmFtX2NtZGlkID0gV01JXzEwXzJfVkRFVl9TRVRfUEFSQU1fQ01ESUQsCisJLnZkZXZfaW5zdGFsbF9rZXlfY21kaWQgPSBXTUlfMTBfMl9WREVWX0lOU1RBTExfS0VZX0NNRElELAorCS5wZWVyX2NyZWF0ZV9jbWRpZCA9IFdNSV8xMF8yX1BFRVJfQ1JFQVRFX0NNRElELAorCS5wZWVyX2RlbGV0ZV9jbWRpZCA9IFdNSV8xMF8yX1BFRVJfREVMRVRFX0NNRElELAorCS5wZWVyX2ZsdXNoX3RpZHNfY21kaWQgPSBXTUlfMTBfMl9QRUVSX0ZMVVNIX1RJRFNfQ01ESUQsCisJLnBlZXJfc2V0X3BhcmFtX2NtZGlkID0gV01JXzEwXzJfUEVFUl9TRVRfUEFSQU1fQ01ESUQsCisJLnBlZXJfYXNzb2NfY21kaWQgPSBXTUlfMTBfMl9QRUVSX0FTU09DX0NNRElELAorCS5wZWVyX2FkZF93ZHNfZW50cnlfY21kaWQgPSBXTUlfMTBfMl9QRUVSX0FERF9XRFNfRU5UUllfQ01ESUQsCisJLnBlZXJfcmVtb3ZlX3dkc19lbnRyeV9jbWRpZCA9IFdNSV8xMF8yX1BFRVJfUkVNT1ZFX1dEU19FTlRSWV9DTURJRCwKKwkucGVlcl9tY2FzdF9ncm91cF9jbWRpZCA9IFdNSV8xMF8yX1BFRVJfTUNBU1RfR1JPVVBfQ01ESUQsCisJLmJjbl90eF9jbWRpZCA9IFdNSV8xMF8yX0JDTl9UWF9DTURJRCwKKwkucGRldl9zZW5kX2Jjbl9jbWRpZCA9IFdNSV8xMF8yX1BERVZfU0VORF9CQ05fQ01ESUQsCisJLmJjbl90bXBsX2NtZGlkID0gV01JX0NNRF9VTlNVUFBPUlRFRCwKKwkuYmNuX2ZpbHRlcl9yeF9jbWRpZCA9IFdNSV8xMF8yX0JDTl9GSUxURVJfUlhfQ01ESUQsCisJLnByYl9yZXFfZmlsdGVyX3J4X2NtZGlkID0gV01JXzEwXzJfUFJCX1JFUV9GSUxURVJfUlhfQ01ESUQsCisJLm1nbXRfdHhfY21kaWQgPSBXTUlfMTBfMl9NR01UX1RYX0NNRElELAorCS5wcmJfdG1wbF9jbWRpZCA9IFdNSV9DTURfVU5TVVBQT1JURUQsCisJLmFkZGJhX2NsZWFyX3Jlc3BfY21kaWQgPSBXTUlfMTBfMl9BRERCQV9DTEVBUl9SRVNQX0NNRElELAorCS5hZGRiYV9zZW5kX2NtZGlkID0gV01JXzEwXzJfQUREQkFfU0VORF9DTURJRCwKKwkuYWRkYmFfc3RhdHVzX2NtZGlkID0gV01JXzEwXzJfQUREQkFfU1RBVFVTX0NNRElELAorCS5kZWxiYV9zZW5kX2NtZGlkID0gV01JXzEwXzJfREVMQkFfU0VORF9DTURJRCwKKwkuYWRkYmFfc2V0X3Jlc3BfY21kaWQgPSBXTUlfMTBfMl9BRERCQV9TRVRfUkVTUF9DTURJRCwKKwkuc2VuZF9zaW5nbGVhbXNkdV9jbWRpZCA9IFdNSV8xMF8yX1NFTkRfU0lOR0xFQU1TRFVfQ01ESUQsCisJLnN0YV9wb3dlcnNhdmVfbW9kZV9jbWRpZCA9IFdNSV8xMF8yX1NUQV9QT1dFUlNBVkVfTU9ERV9DTURJRCwKKwkuc3RhX3Bvd2Vyc2F2ZV9wYXJhbV9jbWRpZCA9IFdNSV8xMF8yX1NUQV9QT1dFUlNBVkVfUEFSQU1fQ01ESUQsCisJLnN0YV9taW1vX3BzX21vZGVfY21kaWQgPSBXTUlfMTBfMl9TVEFfTUlNT19QU19NT0RFX0NNRElELAorCS5wZGV2X2Rmc19lbmFibGVfY21kaWQgPSBXTUlfMTBfMl9QREVWX0RGU19FTkFCTEVfQ01ESUQsCisJLnBkZXZfZGZzX2Rpc2FibGVfY21kaWQgPSBXTUlfMTBfMl9QREVWX0RGU19ESVNBQkxFX0NNRElELAorCS5yb2FtX3NjYW5fbW9kZSA9IFdNSV8xMF8yX1JPQU1fU0NBTl9NT0RFLAorCS5yb2FtX3NjYW5fcnNzaV90aHJlc2hvbGQgPSBXTUlfMTBfMl9ST0FNX1NDQU5fUlNTSV9USFJFU0hPTEQsCisJLnJvYW1fc2Nhbl9wZXJpb2QgPSBXTUlfMTBfMl9ST0FNX1NDQU5fUEVSSU9ELAorCS5yb2FtX3NjYW5fcnNzaV9jaGFuZ2VfdGhyZXNob2xkID0KKwkJCQlXTUlfMTBfMl9ST0FNX1NDQU5fUlNTSV9DSEFOR0VfVEhSRVNIT0xELAorCS5yb2FtX2FwX3Byb2ZpbGUgPSBXTUlfMTBfMl9ST0FNX0FQX1BST0ZJTEUsCisJLm9mbF9zY2FuX2FkZF9hcF9wcm9maWxlID0gV01JXzEwXzJfT0ZMX1NDQU5fQUREX0FQX1BST0ZJTEUsCisJLm9mbF9zY2FuX3JlbW92ZV9hcF9wcm9maWxlID0gV01JXzEwXzJfT0ZMX1NDQU5fUkVNT1ZFX0FQX1BST0ZJTEUsCisJLm9mbF9zY2FuX3BlcmlvZCA9IFdNSV8xMF8yX09GTF9TQ0FOX1BFUklPRCwKKwkucDJwX2Rldl9zZXRfZGV2aWNlX2luZm8gPSBXTUlfMTBfMl9QMlBfREVWX1NFVF9ERVZJQ0VfSU5GTywKKwkucDJwX2Rldl9zZXRfZGlzY292ZXJhYmlsaXR5ID0gV01JXzEwXzJfUDJQX0RFVl9TRVRfRElTQ09WRVJBQklMSVRZLAorCS5wMnBfZ29fc2V0X2JlYWNvbl9pZSA9IFdNSV8xMF8yX1AyUF9HT19TRVRfQkVBQ09OX0lFLAorCS5wMnBfZ29fc2V0X3Byb2JlX3Jlc3BfaWUgPSBXTUlfMTBfMl9QMlBfR09fU0VUX1BST0JFX1JFU1BfSUUsCisJLnAycF9zZXRfdmVuZG9yX2llX2RhdGFfY21kaWQgPSBXTUlfQ01EX1VOU1VQUE9SVEVELAorCS5hcF9wc19wZWVyX3BhcmFtX2NtZGlkID0gV01JXzEwXzJfQVBfUFNfUEVFUl9QQVJBTV9DTURJRCwKKwkuYXBfcHNfcGVlcl91YXBzZF9jb2V4X2NtZGlkID0gV01JX0NNRF9VTlNVUFBPUlRFRCwKKwkucGVlcl9yYXRlX3JldHJ5X3NjaGVkX2NtZGlkID0gV01JXzEwXzJfUEVFUl9SQVRFX1JFVFJZX1NDSEVEX0NNRElELAorCS53bGFuX3Byb2ZpbGVfdHJpZ2dlcl9jbWRpZCA9IFdNSV8xMF8yX1dMQU5fUFJPRklMRV9UUklHR0VSX0NNRElELAorCS53bGFuX3Byb2ZpbGVfc2V0X2hpc3RfaW50dmxfY21kaWQgPQorCQkJCVdNSV8xMF8yX1dMQU5fUFJPRklMRV9TRVRfSElTVF9JTlRWTF9DTURJRCwKKwkud2xhbl9wcm9maWxlX2dldF9wcm9maWxlX2RhdGFfY21kaWQgPQorCQkJCVdNSV8xMF8yX1dMQU5fUFJPRklMRV9HRVRfUFJPRklMRV9EQVRBX0NNRElELAorCS53bGFuX3Byb2ZpbGVfZW5hYmxlX3Byb2ZpbGVfaWRfY21kaWQgPQorCQkJCVdNSV8xMF8yX1dMQU5fUFJPRklMRV9FTkFCTEVfUFJPRklMRV9JRF9DTURJRCwKKwkud2xhbl9wcm9maWxlX2xpc3RfcHJvZmlsZV9pZF9jbWRpZCA9CisJCQkJV01JXzEwXzJfV0xBTl9QUk9GSUxFX0xJU1RfUFJPRklMRV9JRF9DTURJRCwKKwkucGRldl9zdXNwZW5kX2NtZGlkID0gV01JXzEwXzJfUERFVl9TVVNQRU5EX0NNRElELAorCS5wZGV2X3Jlc3VtZV9jbWRpZCA9IFdNSV8xMF8yX1BERVZfUkVTVU1FX0NNRElELAorCS5hZGRfYmNuX2ZpbHRlcl9jbWRpZCA9IFdNSV8xMF8yX0FERF9CQ05fRklMVEVSX0NNRElELAorCS5ybXZfYmNuX2ZpbHRlcl9jbWRpZCA9IFdNSV8xMF8yX1JNVl9CQ05fRklMVEVSX0NNRElELAorCS53b3dfYWRkX3dha2VfcGF0dGVybl9jbWRpZCA9IFdNSV8xMF8yX1dPV19BRERfV0FLRV9QQVRURVJOX0NNRElELAorCS53b3dfZGVsX3dha2VfcGF0dGVybl9jbWRpZCA9IFdNSV8xMF8yX1dPV19ERUxfV0FLRV9QQVRURVJOX0NNRElELAorCS53b3dfZW5hYmxlX2Rpc2FibGVfd2FrZV9ldmVudF9jbWRpZCA9CisJCQkJV01JXzEwXzJfV09XX0VOQUJMRV9ESVNBQkxFX1dBS0VfRVZFTlRfQ01ESUQsCisJLndvd19lbmFibGVfY21kaWQgPSBXTUlfMTBfMl9XT1dfRU5BQkxFX0NNRElELAorCS53b3dfaG9zdHdha2V1cF9mcm9tX3NsZWVwX2NtZGlkID0KKwkJCQlXTUlfMTBfMl9XT1dfSE9TVFdBS0VVUF9GUk9NX1NMRUVQX0NNRElELAorCS5ydHRfbWVhc3JlcV9jbWRpZCA9IFdNSV8xMF8yX1JUVF9NRUFTUkVRX0NNRElELAorCS5ydHRfdHNmX2NtZGlkID0gV01JXzEwXzJfUlRUX1RTRl9DTURJRCwKKwkudmRldl9zcGVjdHJhbF9zY2FuX2NvbmZpZ3VyZV9jbWRpZCA9CisJCQkJV01JXzEwXzJfVkRFVl9TUEVDVFJBTF9TQ0FOX0NPTkZJR1VSRV9DTURJRCwKKwkudmRldl9zcGVjdHJhbF9zY2FuX2VuYWJsZV9jbWRpZCA9CisJCQkJV01JXzEwXzJfVkRFVl9TUEVDVFJBTF9TQ0FOX0VOQUJMRV9DTURJRCwKKwkucmVxdWVzdF9zdGF0c19jbWRpZCA9IFdNSV8xMF8yX1JFUVVFU1RfU1RBVFNfQ01ESUQsCisJLnNldF9hcnBfbnNfb2ZmbG9hZF9jbWRpZCA9IFdNSV9DTURfVU5TVVBQT1JURUQsCisJLm5ldHdvcmtfbGlzdF9vZmZsb2FkX2NvbmZpZ19jbWRpZCA9IFdNSV9DTURfVU5TVVBQT1JURUQsCisJLmd0a19vZmZsb2FkX2NtZGlkID0gV01JX0NNRF9VTlNVUFBPUlRFRCwKKwkuY3NhX29mZmxvYWRfZW5hYmxlX2NtZGlkID0gV01JX0NNRF9VTlNVUFBPUlRFRCwKKwkuY3NhX29mZmxvYWRfY2hhbnN3aXRjaF9jbWRpZCA9IFdNSV9DTURfVU5TVVBQT1JURUQsCisJLmNoYXR0ZXJfc2V0X21vZGVfY21kaWQgPSBXTUlfQ01EX1VOU1VQUE9SVEVELAorCS5wZWVyX3RpZF9hZGRiYV9jbWRpZCA9IFdNSV9DTURfVU5TVVBQT1JURUQsCisJLnBlZXJfdGlkX2RlbGJhX2NtZGlkID0gV01JX0NNRF9VTlNVUFBPUlRFRCwKKwkuc3RhX2R0aW1fcHNfbWV0aG9kX2NtZGlkID0gV01JX0NNRF9VTlNVUFBPUlRFRCwKKwkuc3RhX3VhcHNkX2F1dG9fdHJpZ19jbWRpZCA9IFdNSV9DTURfVU5TVVBQT1JURUQsCisJLnN0YV9rZWVwYWxpdmVfY21kID0gV01JX0NNRF9VTlNVUFBPUlRFRCwKKwkuZWNob19jbWRpZCA9IFdNSV8xMF8yX0VDSE9fQ01ESUQsCisJLnBkZXZfdXRmX2NtZGlkID0gV01JXzEwXzJfUERFVl9VVEZfQ01ESUQsCisJLmRiZ2xvZ19jZmdfY21kaWQgPSBXTUlfMTBfMl9EQkdMT0dfQ0ZHX0NNRElELAorCS5wZGV2X3F2aXRfY21kaWQgPSBXTUlfMTBfMl9QREVWX1FWSVRfQ01ESUQsCisJLnBkZXZfZnRtX2ludGdfY21kaWQgPSBXTUlfQ01EX1VOU1VQUE9SVEVELAorCS52ZGV2X3NldF9rZWVwYWxpdmVfY21kaWQgPSBXTUlfQ01EX1VOU1VQUE9SVEVELAorCS52ZGV2X2dldF9rZWVwYWxpdmVfY21kaWQgPSBXTUlfQ01EX1VOU1VQUE9SVEVELAorCS5mb3JjZV9md19oYW5nX2NtZGlkID0gV01JX0NNRF9VTlNVUFBPUlRFRCwKKwkuZ3Bpb19jb25maWdfY21kaWQgPSBXTUlfMTBfMl9HUElPX0NPTkZJR19DTURJRCwKKwkuZ3Bpb19vdXRwdXRfY21kaWQgPSBXTUlfMTBfMl9HUElPX09VVFBVVF9DTURJRCwKKwkucGRldl9nZXRfdGVtcGVyYXR1cmVfY21kaWQgPSBXTUlfMTBfMl9QREVWX0dFVF9URU1QRVJBVFVSRV9DTURJRCwKIH07CiAKIC8qIE1BSU4gV01JIFZERVYgcGFyYW0gbWFwICovCkBAIC0zODUsNiArNTExLDY0IEBACiAJCVdNSV8xMFhfVkRFVl9QQVJBTV9BUF9ERVRFQ1RfT1VUX09GX1NZTkNfU0xFRVBJTkdfU1RBX1RJTUVfU0VDUywKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgd21pX3ZkZXZfcGFyYW1fbWFwIHdtaV8xMF8yXzRfdmRldl9wYXJhbV9tYXAgPSB7CisJLnJ0c190aHJlc2hvbGQgPSBXTUlfMTBYX1ZERVZfUEFSQU1fUlRTX1RIUkVTSE9MRCwKKwkuZnJhZ21lbnRhdGlvbl90aHJlc2hvbGQgPSBXTUlfMTBYX1ZERVZfUEFSQU1fRlJBR01FTlRBVElPTl9USFJFU0hPTEQsCisJLmJlYWNvbl9pbnRlcnZhbCA9IFdNSV8xMFhfVkRFVl9QQVJBTV9CRUFDT05fSU5URVJWQUwsCisJLmxpc3Rlbl9pbnRlcnZhbCA9IFdNSV8xMFhfVkRFVl9QQVJBTV9MSVNURU5fSU5URVJWQUwsCisJLm11bHRpY2FzdF9yYXRlID0gV01JXzEwWF9WREVWX1BBUkFNX01VTFRJQ0FTVF9SQVRFLAorCS5tZ210X3R4X3JhdGUgPSBXTUlfMTBYX1ZERVZfUEFSQU1fTUdNVF9UWF9SQVRFLAorCS5zbG90X3RpbWUgPSBXTUlfMTBYX1ZERVZfUEFSQU1fU0xPVF9USU1FLAorCS5wcmVhbWJsZSA9IFdNSV8xMFhfVkRFVl9QQVJBTV9QUkVBTUJMRSwKKwkuc3diYV90aW1lID0gV01JXzEwWF9WREVWX1BBUkFNX1NXQkFfVElNRSwKKwkud21pX3ZkZXZfc3RhdHNfdXBkYXRlX3BlcmlvZCA9IFdNSV8xMFhfVkRFVl9TVEFUU19VUERBVEVfUEVSSU9ELAorCS53bWlfdmRldl9wd3JzYXZlX2FnZW91dF90aW1lID0gV01JXzEwWF9WREVWX1BXUlNBVkVfQUdFT1VUX1RJTUUsCisJLndtaV92ZGV2X2hvc3Rfc3diYV9pbnRlcnZhbCA9IFdNSV8xMFhfVkRFVl9IT1NUX1NXQkFfSU5URVJWQUwsCisJLmR0aW1fcGVyaW9kID0gV01JXzEwWF9WREVWX1BBUkFNX0RUSU1fUEVSSU9ELAorCS53bWlfdmRldl9vY19zY2hlZHVsZXJfYWlyX3RpbWVfbGltaXQgPQorCQkJCVdNSV8xMFhfVkRFVl9PQ19TQ0hFRFVMRVJfQUlSX1RJTUVfTElNSVQsCisJLndkcyA9IFdNSV8xMFhfVkRFVl9QQVJBTV9XRFMsCisJLmF0aW1fd2luZG93ID0gV01JXzEwWF9WREVWX1BBUkFNX0FUSU1fV0lORE9XLAorCS5ibWlzc19jb3VudF9tYXggPSBXTUlfMTBYX1ZERVZfUEFSQU1fQk1JU1NfQ09VTlRfTUFYLAorCS5ibWlzc19maXJzdF9iY250ID0gV01JX1ZERVZfUEFSQU1fVU5TVVBQT1JURUQsCisJLmJtaXNzX2ZpbmFsX2JjbnQgPSBXTUlfVkRFVl9QQVJBTV9VTlNVUFBPUlRFRCwKKwkuZmVhdHVyZV93bW0gPSBXTUlfMTBYX1ZERVZfUEFSQU1fRkVBVFVSRV9XTU0sCisJLmNod2lkdGggPSBXTUlfMTBYX1ZERVZfUEFSQU1fQ0hXSURUSCwKKwkuY2hleHRvZmZzZXQgPSBXTUlfMTBYX1ZERVZfUEFSQU1fQ0hFWFRPRkZTRVQsCisJLmRpc2FibGVfaHRwcm90ZWN0aW9uID0gV01JXzEwWF9WREVWX1BBUkFNX0RJU0FCTEVfSFRQUk9URUNUSU9OLAorCS5zdGFfcXVpY2traWNrb3V0ID0gV01JXzEwWF9WREVWX1BBUkFNX1NUQV9RVUlDS0tJQ0tPVVQsCisJLm1nbXRfcmF0ZSA9IFdNSV8xMFhfVkRFVl9QQVJBTV9NR01UX1JBVEUsCisJLnByb3RlY3Rpb25fbW9kZSA9IFdNSV8xMFhfVkRFVl9QQVJBTV9QUk9URUNUSU9OX01PREUsCisJLmZpeGVkX3JhdGUgPSBXTUlfMTBYX1ZERVZfUEFSQU1fRklYRURfUkFURSwKKwkuc2dpID0gV01JXzEwWF9WREVWX1BBUkFNX1NHSSwKKwkubGRwYyA9IFdNSV8xMFhfVkRFVl9QQVJBTV9MRFBDLAorCS50eF9zdGJjID0gV01JXzEwWF9WREVWX1BBUkFNX1RYX1NUQkMsCisJLnJ4X3N0YmMgPSBXTUlfMTBYX1ZERVZfUEFSQU1fUlhfU1RCQywKKwkuaW50cmFfYnNzX2Z3ZCA9IFdNSV8xMFhfVkRFVl9QQVJBTV9JTlRSQV9CU1NfRldELAorCS5kZWZfa2V5aWQgPSBXTUlfMTBYX1ZERVZfUEFSQU1fREVGX0tFWUlELAorCS5uc3MgPSBXTUlfMTBYX1ZERVZfUEFSQU1fTlNTLAorCS5iY2FzdF9kYXRhX3JhdGUgPSBXTUlfMTBYX1ZERVZfUEFSQU1fQkNBU1RfREFUQV9SQVRFLAorCS5tY2FzdF9kYXRhX3JhdGUgPSBXTUlfMTBYX1ZERVZfUEFSQU1fTUNBU1RfREFUQV9SQVRFLAorCS5tY2FzdF9pbmRpY2F0ZSA9IFdNSV8xMFhfVkRFVl9QQVJBTV9NQ0FTVF9JTkRJQ0FURSwKKwkuZGhjcF9pbmRpY2F0ZSA9IFdNSV8xMFhfVkRFVl9QQVJBTV9ESENQX0lORElDQVRFLAorCS51bmtub3duX2Rlc3RfaW5kaWNhdGUgPSBXTUlfMTBYX1ZERVZfUEFSQU1fVU5LTk9XTl9ERVNUX0lORElDQVRFLAorCS5hcF9rZWVwYWxpdmVfbWluX2lkbGVfaW5hY3RpdmVfdGltZV9zZWNzID0KKwkJV01JXzEwWF9WREVWX1BBUkFNX0FQX0tFRVBBTElWRV9NSU5fSURMRV9JTkFDVElWRV9USU1FX1NFQ1MsCisJLmFwX2tlZXBhbGl2ZV9tYXhfaWRsZV9pbmFjdGl2ZV90aW1lX3NlY3MgPQorCQlXTUlfMTBYX1ZERVZfUEFSQU1fQVBfS0VFUEFMSVZFX01BWF9JRExFX0lOQUNUSVZFX1RJTUVfU0VDUywKKwkuYXBfa2VlcGFsaXZlX21heF91bnJlc3BvbnNpdmVfdGltZV9zZWNzID0KKwkJV01JXzEwWF9WREVWX1BBUkFNX0FQX0tFRVBBTElWRV9NQVhfVU5SRVNQT05TSVZFX1RJTUVfU0VDUywKKwkuYXBfZW5hYmxlX25hd2RzID0gV01JXzEwWF9WREVWX1BBUkFNX0FQX0VOQUJMRV9OQVdEUywKKwkubWNhc3QydWNhc3Rfc2V0ID0gV01JXzEwWF9WREVWX1BBUkFNX01DQVNUMlVDQVNUX1NFVCwKKwkuZW5hYmxlX3J0c2N0cyA9IFdNSV8xMFhfVkRFVl9QQVJBTV9FTkFCTEVfUlRTQ1RTLAorCS50eGJmID0gV01JX1ZERVZfUEFSQU1fVU5TVVBQT1JURUQsCisJLnBhY2tldF9wb3dlcnNhdmUgPSBXTUlfVkRFVl9QQVJBTV9VTlNVUFBPUlRFRCwKKwkuZHJvcF91bmVuY3J5ID0gV01JX1ZERVZfUEFSQU1fVU5TVVBQT1JURUQsCisJLnR4X2VuY2FwX3R5cGUgPSBXTUlfVkRFVl9QQVJBTV9VTlNVUFBPUlRFRCwKKwkuYXBfZGV0ZWN0X291dF9vZl9zeW5jX3NsZWVwaW5nX3N0YV90aW1lX3NlY3MgPQorCQlXTUlfMTBYX1ZERVZfUEFSQU1fQVBfREVURUNUX09VVF9PRl9TWU5DX1NMRUVQSU5HX1NUQV9USU1FX1NFQ1MsCit9OworCiBzdGF0aWMgc3RydWN0IHdtaV9wZGV2X3BhcmFtX21hcCB3bWlfcGRldl9wYXJhbV9tYXAgPSB7CiAJLnR4X2NoYWluX21hc2sgPSBXTUlfUERFVl9QQVJBTV9UWF9DSEFJTl9NQVNLLAogCS5yeF9jaGFpbl9tYXNrID0gV01JX1BERVZfUEFSQU1fUlhfQ0hBSU5fTUFTSywKQEAgLTQzNCw2ICs2MTgsNyBAQAogCS5mYXN0X2NoYW5uZWxfcmVzZXQgPSBXTUlfUERFVl9QQVJBTV9VTlNVUFBPUlRFRCwKIAkuYnVyc3RfZHVyID0gV01JX1BERVZfUEFSQU1fVU5TVVBQT1JURUQsCiAJLmJ1cnN0X2VuYWJsZSA9IFdNSV9QREVWX1BBUkFNX1VOU1VQUE9SVEVELAorCS5jYWxfcGVyaW9kID0gV01JX1BERVZfUEFSQU1fVU5TVVBQT1JURUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHdtaV9wZGV2X3BhcmFtX21hcCB3bWlfMTB4X3BkZXZfcGFyYW1fbWFwID0gewpAQCAtNDg2LDYgKzY3MSw2MCBAQAogCS5mYXN0X2NoYW5uZWxfcmVzZXQgPSBXTUlfMTBYX1BERVZfUEFSQU1fRkFTVF9DSEFOTkVMX1JFU0VULAogCS5idXJzdF9kdXIgPSBXTUlfMTBYX1BERVZfUEFSQU1fQlVSU1RfRFVSLAogCS5idXJzdF9lbmFibGUgPSBXTUlfMTBYX1BERVZfUEFSQU1fQlVSU1RfRU5BQkxFLAorCS5jYWxfcGVyaW9kID0gV01JXzEwWF9QREVWX1BBUkFNX0NBTF9QRVJJT0QsCit9OworCitzdGF0aWMgc3RydWN0IHdtaV9wZGV2X3BhcmFtX21hcCB3bWlfMTBfMl80X3BkZXZfcGFyYW1fbWFwID0geworCS50eF9jaGFpbl9tYXNrID0gV01JXzEwWF9QREVWX1BBUkFNX1RYX0NIQUlOX01BU0ssCisJLnJ4X2NoYWluX21hc2sgPSBXTUlfMTBYX1BERVZfUEFSQU1fUlhfQ0hBSU5fTUFTSywKKwkudHhwb3dlcl9saW1pdDJnID0gV01JXzEwWF9QREVWX1BBUkFNX1RYUE9XRVJfTElNSVQyRywKKwkudHhwb3dlcl9saW1pdDVnID0gV01JXzEwWF9QREVWX1BBUkFNX1RYUE9XRVJfTElNSVQ1RywKKwkudHhwb3dlcl9zY2FsZSA9IFdNSV8xMFhfUERFVl9QQVJBTV9UWFBPV0VSX1NDQUxFLAorCS5iZWFjb25fZ2VuX21vZGUgPSBXTUlfMTBYX1BERVZfUEFSQU1fQkVBQ09OX0dFTl9NT0RFLAorCS5iZWFjb25fdHhfbW9kZSA9IFdNSV8xMFhfUERFVl9QQVJBTV9CRUFDT05fVFhfTU9ERSwKKwkucmVzbWdyX29mZmNoYW5fbW9kZSA9IFdNSV8xMFhfUERFVl9QQVJBTV9SRVNNR1JfT0ZGQ0hBTl9NT0RFLAorCS5wcm90ZWN0aW9uX21vZGUgPSBXTUlfMTBYX1BERVZfUEFSQU1fUFJPVEVDVElPTl9NT0RFLAorCS5keW5hbWljX2J3ID0gV01JXzEwWF9QREVWX1BBUkFNX0RZTkFNSUNfQlcsCisJLm5vbl9hZ2dfc3dfcmV0cnlfdGggPSBXTUlfMTBYX1BERVZfUEFSQU1fTk9OX0FHR19TV19SRVRSWV9USCwKKwkuYWdnX3N3X3JldHJ5X3RoID0gV01JXzEwWF9QREVWX1BBUkFNX0FHR19TV19SRVRSWV9USCwKKwkuc3RhX2tpY2tvdXRfdGggPSBXTUlfMTBYX1BERVZfUEFSQU1fU1RBX0tJQ0tPVVRfVEgsCisJLmFjX2FnZ3JzaXplX3NjYWxpbmcgPSBXTUlfMTBYX1BERVZfUEFSQU1fQUNfQUdHUlNJWkVfU0NBTElORywKKwkubHRyX2VuYWJsZSA9IFdNSV8xMFhfUERFVl9QQVJBTV9MVFJfRU5BQkxFLAorCS5sdHJfYWNfbGF0ZW5jeV9iZSA9IFdNSV8xMFhfUERFVl9QQVJBTV9MVFJfQUNfTEFURU5DWV9CRSwKKwkubHRyX2FjX2xhdGVuY3lfYmsgPSBXTUlfMTBYX1BERVZfUEFSQU1fTFRSX0FDX0xBVEVOQ1lfQkssCisJLmx0cl9hY19sYXRlbmN5X3ZpID0gV01JXzEwWF9QREVWX1BBUkFNX0xUUl9BQ19MQVRFTkNZX1ZJLAorCS5sdHJfYWNfbGF0ZW5jeV92byA9IFdNSV8xMFhfUERFVl9QQVJBTV9MVFJfQUNfTEFURU5DWV9WTywKKwkubHRyX2FjX2xhdGVuY3lfdGltZW91dCA9IFdNSV8xMFhfUERFVl9QQVJBTV9MVFJfQUNfTEFURU5DWV9USU1FT1VULAorCS5sdHJfc2xlZXBfb3ZlcnJpZGUgPSBXTUlfMTBYX1BERVZfUEFSQU1fTFRSX1NMRUVQX09WRVJSSURFLAorCS5sdHJfcnhfb3ZlcnJpZGUgPSBXTUlfMTBYX1BERVZfUEFSQU1fTFRSX1JYX09WRVJSSURFLAorCS5sdHJfdHhfYWN0aXZpdHlfdGltZW91dCA9IFdNSV8xMFhfUERFVl9QQVJBTV9MVFJfVFhfQUNUSVZJVFlfVElNRU9VVCwKKwkubDFzc19lbmFibGUgPSBXTUlfMTBYX1BERVZfUEFSQU1fTDFTU19FTkFCTEUsCisJLmRzbGVlcF9lbmFibGUgPSBXTUlfMTBYX1BERVZfUEFSQU1fRFNMRUVQX0VOQUJMRSwKKwkucGNpZWxwX3R4YnVmX2ZsdXNoID0gV01JX1BERVZfUEFSQU1fVU5TVVBQT1JURUQsCisJLnBjaWVscF90eGJ1Zl93YXRlcm1hcmsgPSBXTUlfUERFVl9QQVJBTV9VTlNVUFBPUlRFRCwKKwkucGNpZWxwX3R4YnVmX3Rtb19lbiA9IFdNSV9QREVWX1BBUkFNX1VOU1VQUE9SVEVELAorCS5wY2llbHBfdHhidWZfdG1vX3ZhbHVlID0gV01JX1BERVZfUEFSQU1fVU5TVVBQT1JURUQsCisJLnBkZXZfc3RhdHNfdXBkYXRlX3BlcmlvZCA9IFdNSV8xMFhfUERFVl9QQVJBTV9QREVWX1NUQVRTX1VQREFURV9QRVJJT0QsCisJLnZkZXZfc3RhdHNfdXBkYXRlX3BlcmlvZCA9IFdNSV8xMFhfUERFVl9QQVJBTV9WREVWX1NUQVRTX1VQREFURV9QRVJJT0QsCisJLnBlZXJfc3RhdHNfdXBkYXRlX3BlcmlvZCA9IFdNSV8xMFhfUERFVl9QQVJBTV9QRUVSX1NUQVRTX1VQREFURV9QRVJJT0QsCisJLmJjbmZsdF9zdGF0c191cGRhdGVfcGVyaW9kID0KKwkJCQlXTUlfMTBYX1BERVZfUEFSQU1fQkNORkxUX1NUQVRTX1VQREFURV9QRVJJT0QsCisJLnBtZl9xb3MgPSBXTUlfMTBYX1BERVZfUEFSQU1fUE1GX1FPUywKKwkuYXJwX2FjX292ZXJyaWRlID0gV01JXzEwWF9QREVWX1BBUkFNX0FSUERIQ1BfQUNfT1ZFUlJJREUsCisJLmRjcyA9IFdNSV8xMFhfUERFVl9QQVJBTV9EQ1MsCisJLmFuaV9lbmFibGUgPSBXTUlfMTBYX1BERVZfUEFSQU1fQU5JX0VOQUJMRSwKKwkuYW5pX3BvbGxfcGVyaW9kID0gV01JXzEwWF9QREVWX1BBUkFNX0FOSV9QT0xMX1BFUklPRCwKKwkuYW5pX2xpc3Rlbl9wZXJpb2QgPSBXTUlfMTBYX1BERVZfUEFSQU1fQU5JX0xJU1RFTl9QRVJJT0QsCisJLmFuaV9vZmRtX2xldmVsID0gV01JXzEwWF9QREVWX1BBUkFNX0FOSV9PRkRNX0xFVkVMLAorCS5hbmlfY2NrX2xldmVsID0gV01JXzEwWF9QREVWX1BBUkFNX0FOSV9DQ0tfTEVWRUwsCisJLmR5bnR4Y2hhaW4gPSBXTUlfMTBYX1BERVZfUEFSQU1fRFlOVFhDSEFJTiwKKwkucHJveHlfc3RhID0gV01JX1BERVZfUEFSQU1fVU5TVVBQT1JURUQsCisJLmlkbGVfcHNfY29uZmlnID0gV01JX1BERVZfUEFSQU1fVU5TVVBQT1JURUQsCisJLnBvd2VyX2dhdGluZ19zbGVlcCA9IFdNSV9QREVWX1BBUkFNX1VOU1VQUE9SVEVELAorCS5mYXN0X2NoYW5uZWxfcmVzZXQgPSBXTUlfMTBYX1BERVZfUEFSQU1fRkFTVF9DSEFOTkVMX1JFU0VULAorCS5idXJzdF9kdXIgPSBXTUlfMTBYX1BERVZfUEFSQU1fQlVSU1RfRFVSLAorCS5idXJzdF9lbmFibGUgPSBXTUlfMTBYX1BERVZfUEFSQU1fQlVSU1RfRU5BQkxFLAorCS5jYWxfcGVyaW9kID0gV01JXzEwWF9QREVWX1BBUkFNX0NBTF9QRVJJT0QsCiB9OwogCiAvKiBmaXJtd2FyZSAxMC4yIHNwZWNpZmljIG1hcHBpbmdzICovCkBAIC02MDcsMTEgKzg0NiwxMSBAQAogCS5mb3JjZV9md19oYW5nX2NtZGlkID0gV01JX0NNRF9VTlNVUFBPUlRFRCwKIAkuZ3Bpb19jb25maWdfY21kaWQgPSBXTUlfMTBfMl9HUElPX0NPTkZJR19DTURJRCwKIAkuZ3Bpb19vdXRwdXRfY21kaWQgPSBXTUlfMTBfMl9HUElPX09VVFBVVF9DTURJRCwKKwkucGRldl9nZXRfdGVtcGVyYXR1cmVfY21kaWQgPSBXTUlfQ01EX1VOU1VQUE9SVEVELAogfTsKIAotc3RhdGljIHZvaWQKLWF0aDEwa193bWlfcHV0X3dtaV9jaGFubmVsKHN0cnVjdCB3bWlfY2hhbm5lbCAqY2gsCi0JCQkgICBjb25zdCBzdHJ1Y3Qgd21pX2NoYW5uZWxfYXJnICphcmcpCit2b2lkIGF0aDEwa193bWlfcHV0X3dtaV9jaGFubmVsKHN0cnVjdCB3bWlfY2hhbm5lbCAqY2gsCisJCQkJY29uc3Qgc3RydWN0IHdtaV9jaGFubmVsX2FyZyAqYXJnKQogewogCXUzMiBmbGFncyA9IDA7CiAKQEAgLTY4NSw4ICs5MjQsOCBAQAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIH0KIAotc3RhdGljIGludCBhdGgxMGtfd21pX2NtZF9zZW5kX25vd2FpdChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICB1MzIgY21kX2lkKQoraW50IGF0aDEwa193bWlfY21kX3NlbmRfbm93YWl0KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHUzMiBjbWRfaWQpCiB7CiAJc3RydWN0IGF0aDEwa19za2JfY2IgKnNrYl9jYiA9IEFUSDEwS19TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3Qgd21pX2NtZF9oZHIgKmNtZF9oZHI7CkBAIC03MTcsMjMgKzk1Niw0NSBAQAogCiBzdGF0aWMgdm9pZCBhdGgxMGtfd21pX3R4X2JlYWNvbl9ub3dhaXQoc3RydWN0IGF0aDEwa192aWYgKmFydmlmKQogeworCXN0cnVjdCBhdGgxMGsgKmFyID0gYXJ2aWYtPmFyOworCXN0cnVjdCBhdGgxMGtfc2tiX2NiICpjYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYmNuOwogCWludCByZXQ7CiAKLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhcnZpZi0+YXItPmRhdGFfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZhci0+ZGF0YV9sb2NrKTsKIAotCWlmIChhcnZpZi0+YmVhY29uID09IE5VTEwpCi0JCXJldHVybjsKKwliY24gPSBhcnZpZi0+YmVhY29uOwogCi0JaWYgKGFydmlmLT5iZWFjb25fc2VudCkKLQkJcmV0dXJuOworCWlmICghYmNuKQorCQlnb3RvIHVubG9jazsKIAotCXJldCA9IGF0aDEwa193bWlfYmVhY29uX3NlbmRfcmVmX25vd2FpdChhcnZpZik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuOworCWNiID0gQVRIMTBLX1NLQl9DQihiY24pOwogCi0JLyogV2UgbmVlZCB0byByZXRhaW4gdGhlIGFydmlmLT5iZWFjb24gcmVmZXJlbmNlIGZvciBETUEgdW5tYXBwaW5nIGFuZAotCSAqIGZyZWVpbmcgdGhlIHNrYnVmZiBsYXRlci4gKi8KLQlhcnZpZi0+YmVhY29uX3NlbnQgPSB0cnVlOworCXN3aXRjaCAoYXJ2aWYtPmJlYWNvbl9zdGF0ZSkgeworCWNhc2UgQVRIMTBLX0JFQUNPTl9TRU5ESU5HOgorCWNhc2UgQVRIMTBLX0JFQUNPTl9TRU5UOgorCQlicmVhazsKKwljYXNlIEFUSDEwS19CRUFDT05fU0NIRURVTEVEOgorCQlhcnZpZi0+YmVhY29uX3N0YXRlID0gQVRIMTBLX0JFQUNPTl9TRU5ESU5HOworCQlzcGluX3VubG9ja19iaCgmYXItPmRhdGFfbG9jayk7CisKKwkJcmV0ID0gYXRoMTBrX3dtaV9iZWFjb25fc2VuZF9yZWZfbm93YWl0KGFydmlmLT5hciwKKwkJCQkJCQlhcnZpZi0+dmRldl9pZCwKKwkJCQkJCQliY24tPmRhdGEsIGJjbi0+bGVuLAorCQkJCQkJCWNiLT5wYWRkciwKKwkJCQkJCQljYi0+YmNuLmR0aW1femVybywKKwkJCQkJCQljYi0+YmNuLmRlbGl2ZXJfY2FiKTsKKworCQlzcGluX2xvY2tfYmgoJmFyLT5kYXRhX2xvY2spOworCisJCWlmIChyZXQgPT0gMCkKKwkJCWFydmlmLT5iZWFjb25fc3RhdGUgPSBBVEgxMEtfQkVBQ09OX1NFTlQ7CisJCWVsc2UKKwkJCWFydmlmLT5iZWFjb25fc3RhdGUgPSBBVEgxMEtfQkVBQ09OX1NDSEVEVUxFRDsKKwl9CisKK3VubG9jazoKKwlzcGluX3VubG9ja19iaCgmYXItPmRhdGFfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDEwa193bWlfdHhfYmVhY29uc19pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsCkBAIC03NDYsMTIgKzEwMDcsMTAgQEAKIAogc3RhdGljIHZvaWQgYXRoMTBrX3dtaV90eF9iZWFjb25zX25vd2FpdChzdHJ1Y3QgYXRoMTBrICphcikKIHsKLQlzcGluX2xvY2tfYmgoJmFyLT5kYXRhX2xvY2spOwogCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYyhhci0+aHcsCiAJCQkJCQkgICBJRUVFODAyMTFfSUZBQ0VfSVRFUl9OT1JNQUwsCiAJCQkJCQkgICBhdGgxMGtfd21pX3R4X2JlYWNvbnNfaXRlciwKIAkJCQkJCSAgIE5VTEwpOwotCXNwaW5fdW5sb2NrX2JoKCZhci0+ZGF0YV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9vcF9lcF90eF9jcmVkaXRzKHN0cnVjdCBhdGgxMGsgKmFyKQpAQCAtNzkyLDI0ICsxMDUxLDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGF0aDEwa193bWlfbWdtdF90eChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX29wX2dlbl9tZ210X3R4KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqbXNkdSkKIHsKLQlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgd21pX21nbXRfdHhfY21kICpjbWQ7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqd21pX3NrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgbGVuOwotCXUzMiBidWZfbGVuID0gc2tiLT5sZW47CisJdTMyIGJ1Zl9sZW4gPSBtc2R1LT5sZW47CiAJdTE2IGZjOwogCi0JaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKW1zZHUtPmRhdGE7CiAJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJaWYgKFdBUk5fT05fT05DRSghaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCWxlbiA9IHNpemVvZihjbWQtPmhkcikgKyBza2ItPmxlbjsKKwlsZW4gPSBzaXplb2YoY21kLT5oZHIpICsgbXNkdS0+bGVuOwogCiAJaWYgKChpZWVlODAyMTFfaXNfYWN0aW9uKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKIAkgICAgIGllZWU4MDIxMV9pc19kZWF1dGgoaGRyLT5mcmFtZV9jb250cm9sKSB8fApAQCAtODIxLDM2ICsxMDc5LDI3IEBACiAKIAlsZW4gPSByb3VuZF91cChsZW4sIDQpOwogCi0Jd21pX3NrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBsZW4pOwotCWlmICghd21pX3NrYikKLQkJcmV0dXJuIC1FTk9NRU07CisJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIGxlbik7CisJaWYgKCFza2IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JY21kID0gKHN0cnVjdCB3bWlfbWdtdF90eF9jbWQgKil3bWlfc2tiLT5kYXRhOworCWNtZCA9IChzdHJ1Y3Qgd21pX21nbXRfdHhfY21kICopc2tiLT5kYXRhOwogCi0JY21kLT5oZHIudmRldl9pZCA9IF9fY3B1X3RvX2xlMzIoQVRIMTBLX1NLQl9DQihza2IpLT52ZGV2X2lkKTsKKwljbWQtPmhkci52ZGV2X2lkID0gX19jcHVfdG9fbGUzMihBVEgxMEtfU0tCX0NCKG1zZHUpLT52ZGV2X2lkKTsKIAljbWQtPmhkci50eF9yYXRlID0gMDsKIAljbWQtPmhkci50eF9wb3dlciA9IDA7CiAJY21kLT5oZHIuYnVmX2xlbiA9IF9fY3B1X3RvX2xlMzIoYnVmX2xlbik7CiAKIAlldGhlcl9hZGRyX2NvcHkoY21kLT5oZHIucGVlcl9tYWNhZGRyLmFkZHIsIGllZWU4MDIxMV9nZXRfREEoaGRyKSk7Ci0JbWVtY3B5KGNtZC0+YnVmLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwltZW1jcHkoY21kLT5idWYsIG1zZHUtPmRhdGEsIG1zZHUtPmxlbik7CiAKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSBtZ210IHR4IHNrYiAlcCBsZW4gJWQgZnR5cGUgJTAyeCBzdHlwZSAlMDJ4XG4iLAotCQkgICB3bWlfc2tiLCB3bWlfc2tiLT5sZW4sIGZjICYgSUVFRTgwMjExX0ZDVExfRlRZUEUsCisJCSAgIG1zZHUsIHNrYi0+bGVuLCBmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFLAogCQkgICBmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKTsKIAl0cmFjZV9hdGgxMGtfdHhfaGRyKGFyLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAl0cmFjZV9hdGgxMGtfdHhfcGF5bG9hZChhciwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAKLQkvKiBTZW5kIHRoZSBtYW5hZ2VtZW50IGZyYW1lIGJ1ZmZlciB0byB0aGUgdGFyZ2V0ICovCi0JcmV0ID0gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgd21pX3NrYiwgYXItPndtaS5jbWQtPm1nbXRfdHhfY21kaWQpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBUT0RPOiByZXBvcnQgdHggc3RhdHVzIHRvIG1hYzgwMjExIC0gdGVtcG9yYXJ5IGp1c3QgQUNLICovCi0JaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfQUNLOwotCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShhci0+aHcsIHNrYik7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBza2I7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDEwa193bWlfZXZlbnRfc2Nhbl9zdGFydGVkKHN0cnVjdCBhdGgxMGsgKmFyKQpAQCAtOTc3LDIyICsxMjI2LDQ4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGF0aDEwa193bWlfZXZlbnRfc2NhbihzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgYXRoMTBrX3dtaV9vcF9wdWxsX3NjYW5fZXYoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IHdtaV9zY2FuX2V2X2FyZyAqYXJnKQogewotCXN0cnVjdCB3bWlfc2Nhbl9ldmVudCAqZXZlbnQgPSAoc3RydWN0IHdtaV9zY2FuX2V2ZW50ICopc2tiLT5kYXRhOworCXN0cnVjdCB3bWlfc2Nhbl9ldmVudCAqZXYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKworCWlmIChza2ItPmxlbiA8IHNpemVvZigqZXYpKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpldikpOworCWFyZy0+ZXZlbnRfdHlwZSA9IGV2LT5ldmVudF90eXBlOworCWFyZy0+cmVhc29uID0gZXYtPnJlYXNvbjsKKwlhcmctPmNoYW5uZWxfZnJlcSA9IGV2LT5jaGFubmVsX2ZyZXE7CisJYXJnLT5zY2FuX3JlcV9pZCA9IGV2LT5zY2FuX3JlcV9pZDsKKwlhcmctPnNjYW5faWQgPSBldi0+c2Nhbl9pZDsKKwlhcmctPnZkZXZfaWQgPSBldi0+dmRldl9pZDsKKworCXJldHVybiAwOworfQorCitpbnQgYXRoMTBrX3dtaV9ldmVudF9zY2FuKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB3bWlfc2Nhbl9ldl9hcmcgYXJnID0ge307CiAJZW51bSB3bWlfc2Nhbl9ldmVudF90eXBlIGV2ZW50X3R5cGU7CiAJZW51bSB3bWlfc2Nhbl9jb21wbGV0aW9uX3JlYXNvbiByZWFzb247CiAJdTMyIGZyZXE7CiAJdTMyIHJlcV9pZDsKIAl1MzIgc2Nhbl9pZDsKIAl1MzIgdmRldl9pZDsKKwlpbnQgcmV0OwogCi0JZXZlbnRfdHlwZSA9IF9fbGUzMl90b19jcHUoZXZlbnQtPmV2ZW50X3R5cGUpOwotCXJlYXNvbiAgICAgPSBfX2xlMzJfdG9fY3B1KGV2ZW50LT5yZWFzb24pOwotCWZyZXEgICAgICAgPSBfX2xlMzJfdG9fY3B1KGV2ZW50LT5jaGFubmVsX2ZyZXEpOwotCXJlcV9pZCAgICAgPSBfX2xlMzJfdG9fY3B1KGV2ZW50LT5zY2FuX3JlcV9pZCk7Ci0Jc2Nhbl9pZCAgICA9IF9fbGUzMl90b19jcHUoZXZlbnQtPnNjYW5faWQpOwotCXZkZXZfaWQgICAgPSBfX2xlMzJfdG9fY3B1KGV2ZW50LT52ZGV2X2lkKTsKKwlyZXQgPSBhdGgxMGtfd21pX3B1bGxfc2Nhbihhciwgc2tiLCAmYXJnKTsKKwlpZiAocmV0KSB7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHBhcnNlIHNjYW4gZXZlbnQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWV2ZW50X3R5cGUgPSBfX2xlMzJfdG9fY3B1KGFyZy5ldmVudF90eXBlKTsKKwlyZWFzb24gPSBfX2xlMzJfdG9fY3B1KGFyZy5yZWFzb24pOworCWZyZXEgPSBfX2xlMzJfdG9fY3B1KGFyZy5jaGFubmVsX2ZyZXEpOworCXJlcV9pZCA9IF9fbGUzMl90b19jcHUoYXJnLnNjYW5fcmVxX2lkKTsKKwlzY2FuX2lkID0gX19sZTMyX3RvX2NwdShhcmcuc2Nhbl9pZCk7CisJdmRldl9pZCA9IF9fbGUzMl90b19jcHUoYXJnLnZkZXZfaWQpOwogCiAJc3Bpbl9sb2NrX2JoKCZhci0+ZGF0YV9sb2NrKTsKIApAQCAtMTE0NywyMSArMTQyMiwxNCBAQAogCX0KIH0KIAotc3RhdGljIGludCBhdGgxMGtfd21pX2V2ZW50X21nbXRfcngoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGF0aDEwa193bWlfb3BfcHVsbF9tZ210X3J4X2V2KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgc3RydWN0IHdtaV9tZ210X3J4X2V2X2FyZyAqYXJnKQogewogCXN0cnVjdCB3bWlfbWdtdF9yeF9ldmVudF92MSAqZXZfdjE7CiAJc3RydWN0IHdtaV9tZ210X3J4X2V2ZW50X3YyICpldl92MjsKIAlzdHJ1Y3Qgd21pX21nbXRfcnhfaGRyX3YxICpldl9oZHI7Ci0Jc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7Ci0JdTMyIHJ4X3N0YXR1czsKLQl1MzIgY2hhbm5lbDsKLQl1MzIgcGh5X21vZGU7Ci0JdTMyIHNucjsKLQl1MzIgcmF0ZTsKLQl1MzIgYnVmX2xlbjsKLQl1MTYgZmM7Ci0JaW50IHB1bGxfbGVuOworCXNpemVfdCBwdWxsX2xlbjsKKwl1MzIgbXNkdV9sZW47CiAKIAlpZiAodGVzdF9iaXQoQVRIMTBLX0ZXX0ZFQVRVUkVfRVhUX1dNSV9NR01UX1JYLCBhci0+ZndfZmVhdHVyZXMpKSB7CiAJCWV2X3YyID0gKHN0cnVjdCB3bWlfbWdtdF9yeF9ldmVudF92MiAqKXNrYi0+ZGF0YTsKQEAgLTExNzMsMTIgKzE0NDEsNTUgQEAKIAkJcHVsbF9sZW4gPSBzaXplb2YoKmV2X3YxKTsKIAl9CiAKLQljaGFubmVsICAgPSBfX2xlMzJfdG9fY3B1KGV2X2hkci0+Y2hhbm5lbCk7Ci0JYnVmX2xlbiAgID0gX19sZTMyX3RvX2NwdShldl9oZHItPmJ1Zl9sZW4pOwotCXJ4X3N0YXR1cyA9IF9fbGUzMl90b19jcHUoZXZfaGRyLT5zdGF0dXMpOwotCXNuciAgICAgICA9IF9fbGUzMl90b19jcHUoZXZfaGRyLT5zbnIpOwotCXBoeV9tb2RlICA9IF9fbGUzMl90b19jcHUoZXZfaGRyLT5waHlfbW9kZSk7Ci0JcmF0ZQkgID0gX19sZTMyX3RvX2NwdShldl9oZHItPnJhdGUpOworCWlmIChza2ItPmxlbiA8IHB1bGxfbGVuKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCXNrYl9wdWxsKHNrYiwgcHVsbF9sZW4pOworCWFyZy0+Y2hhbm5lbCA9IGV2X2hkci0+Y2hhbm5lbDsKKwlhcmctPmJ1Zl9sZW4gPSBldl9oZHItPmJ1Zl9sZW47CisJYXJnLT5zdGF0dXMgPSBldl9oZHItPnN0YXR1czsKKwlhcmctPnNuciA9IGV2X2hkci0+c25yOworCWFyZy0+cGh5X21vZGUgPSBldl9oZHItPnBoeV9tb2RlOworCWFyZy0+cmF0ZSA9IGV2X2hkci0+cmF0ZTsKKworCW1zZHVfbGVuID0gX19sZTMyX3RvX2NwdShhcmctPmJ1Zl9sZW4pOworCWlmIChza2ItPmxlbiA8IG1zZHVfbGVuKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCS8qIHRoZSBXTUkgYnVmZmVyIG1pZ2h0J3ZlIGVuZGVkIHVwIGJlaW5nIHBhZGRlZCB0byA0IGJ5dGVzIGR1ZSB0byBIVEMKKwkgKiB0cmFpbGVyIHdpdGggY3JlZGl0IHVwZGF0ZS4gVHJpbSB0aGUgZXhjZXNzIGdhcmJhZ2UuCisJICovCisJc2tiX3RyaW0oc2tiLCBtc2R1X2xlbik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGF0aDEwa193bWlfZXZlbnRfbWdtdF9yeChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgd21pX21nbXRfcnhfZXZfYXJnIGFyZyA9IHt9OworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXUzMiByeF9zdGF0dXM7CisJdTMyIGNoYW5uZWw7CisJdTMyIHBoeV9tb2RlOworCXUzMiBzbnI7CisJdTMyIHJhdGU7CisJdTMyIGJ1Zl9sZW47CisJdTE2IGZjOworCWludCByZXQ7CisKKwlyZXQgPSBhdGgxMGtfd21pX3B1bGxfbWdtdF9yeChhciwgc2tiLCAmYXJnKTsKKwlpZiAocmV0KSB7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHBhcnNlIG1nbXQgcnggZXZlbnQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWNoYW5uZWwgPSBfX2xlMzJfdG9fY3B1KGFyZy5jaGFubmVsKTsKKwlidWZfbGVuID0gX19sZTMyX3RvX2NwdShhcmcuYnVmX2xlbik7CisJcnhfc3RhdHVzID0gX19sZTMyX3RvX2NwdShhcmcuc3RhdHVzKTsKKwlzbnIgPSBfX2xlMzJfdG9fY3B1KGFyZy5zbnIpOworCXBoeV9tb2RlID0gX19sZTMyX3RvX2NwdShhcmcucGh5X21vZGUpOworCXJhdGUgPSBfX2xlMzJfdG9fY3B1KGFyZy5yYXRlKTsKIAogCW1lbXNldChzdGF0dXMsIDAsIHNpemVvZigqc3RhdHVzKSk7CiAKQEAgLTEyMzIsOCArMTU0Myw2IEBACiAJc3RhdHVzLT5zaWduYWwgPSBzbnIgKyBBVEgxMEtfREVGQVVMVF9OT0lTRV9GTE9PUjsKIAlzdGF0dXMtPnJhdGVfaWR4ID0gZ2V0X3JhdGVfaWR4KHJhdGUsIHN0YXR1cy0+YmFuZCk7CiAKLQlza2JfcHVsbChza2IsIHB1bGxfbGVuKTsKLQogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAKQEAgLTEyNjYsMTIgKzE1NzUsNiBAQAogCQkgICBzdGF0dXMtPmZyZXEsIHN0YXR1cy0+YmFuZCwgc3RhdHVzLT5zaWduYWwsCiAJCSAgIHN0YXR1cy0+cmF0ZV9pZHgpOwogCi0JLyoKLQkgKiBwYWNrZXRzIGZyb20gSFRDIGNvbWUgYWxpZ25lZCB0byA0Ynl0ZSBib3VuZGFyaWVzCi0JICogYmVjYXVzZSB0aGV5IGNhbiBvcmlnaW5hbGx5IGNvbWUgaW4gYWxvbmcgd2l0aCBhIHRyYWlsZXIKLQkgKi8KLQlza2JfdHJpbShza2IsIGJ1Zl9sZW4pOwotCiAJaWVlZTgwMjExX3J4KGFyLT5odywgc2tiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEyOTUsMjEgKzE1OTgsNDQgQEAKIAlyZXR1cm4gaWR4OwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfd21pX2V2ZW50X2NoYW5faW5mbyhzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgYXRoMTBrX3dtaV9vcF9wdWxsX2NoX2luZm9fZXYoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3Qgd21pX2NoX2luZm9fZXZfYXJnICphcmcpCiB7Ci0Jc3RydWN0IHdtaV9jaGFuX2luZm9fZXZlbnQgKmV2OworCXN0cnVjdCB3bWlfY2hhbl9pbmZvX2V2ZW50ICpldiA9ICh2b2lkICopc2tiLT5kYXRhOworCisJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCpldikpCisJCXJldHVybiAtRVBST1RPOworCisJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmV2KSk7CisJYXJnLT5lcnJfY29kZSA9IGV2LT5lcnJfY29kZTsKKwlhcmctPmZyZXEgPSBldi0+ZnJlcTsKKwlhcmctPmNtZF9mbGFncyA9IGV2LT5jbWRfZmxhZ3M7CisJYXJnLT5ub2lzZV9mbG9vciA9IGV2LT5ub2lzZV9mbG9vcjsKKwlhcmctPnJ4X2NsZWFyX2NvdW50ID0gZXYtPnJ4X2NsZWFyX2NvdW50OworCWFyZy0+Y3ljbGVfY291bnQgPSBldi0+Y3ljbGVfY291bnQ7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhdGgxMGtfd21pX2V2ZW50X2NoYW5faW5mbyhzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgd21pX2NoX2luZm9fZXZfYXJnIGFyZyA9IHt9OwogCXN0cnVjdCBzdXJ2ZXlfaW5mbyAqc3VydmV5OwogCXUzMiBlcnJfY29kZSwgZnJlcSwgY21kX2ZsYWdzLCBub2lzZV9mbG9vciwgcnhfY2xlYXJfY291bnQsIGN5Y2xlX2NvdW50OwotCWludCBpZHg7CisJaW50IGlkeCwgcmV0OwogCi0JZXYgPSAoc3RydWN0IHdtaV9jaGFuX2luZm9fZXZlbnQgKilza2ItPmRhdGE7CisJcmV0ID0gYXRoMTBrX3dtaV9wdWxsX2NoX2luZm8oYXIsIHNrYiwgJmFyZyk7CisJaWYgKHJldCkgeworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBwYXJzZSBjaGFuIGluZm8gZXZlbnQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJfQogCi0JZXJyX2NvZGUgPSBfX2xlMzJfdG9fY3B1KGV2LT5lcnJfY29kZSk7Ci0JZnJlcSA9IF9fbGUzMl90b19jcHUoZXYtPmZyZXEpOwotCWNtZF9mbGFncyA9IF9fbGUzMl90b19jcHUoZXYtPmNtZF9mbGFncyk7Ci0Jbm9pc2VfZmxvb3IgPSBfX2xlMzJfdG9fY3B1KGV2LT5ub2lzZV9mbG9vcik7Ci0JcnhfY2xlYXJfY291bnQgPSBfX2xlMzJfdG9fY3B1KGV2LT5yeF9jbGVhcl9jb3VudCk7Ci0JY3ljbGVfY291bnQgPSBfX2xlMzJfdG9fY3B1KGV2LT5jeWNsZV9jb3VudCk7CisJZXJyX2NvZGUgPSBfX2xlMzJfdG9fY3B1KGFyZy5lcnJfY29kZSk7CisJZnJlcSA9IF9fbGUzMl90b19jcHUoYXJnLmZyZXEpOworCWNtZF9mbGFncyA9IF9fbGUzMl90b19jcHUoYXJnLmNtZF9mbGFncyk7CisJbm9pc2VfZmxvb3IgPSBfX2xlMzJfdG9fY3B1KGFyZy5ub2lzZV9mbG9vcik7CisJcnhfY2xlYXJfY291bnQgPSBfX2xlMzJfdG9fY3B1KGFyZy5yeF9jbGVhcl9jb3VudCk7CisJY3ljbGVfY291bnQgPSBfX2xlMzJfdG9fY3B1KGFyZy5jeWNsZV9jb3VudCk7CiAKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwKIAkJICAgImNoYW4gaW5mbyBlcnJfY29kZSAlZCBmcmVxICVkIGNtZF9mbGFncyAlZCBub2lzZV9mbG9vciAlZCByeF9jbGVhcl9jb3VudCAlZCBjeWNsZV9jb3VudCAlZFxuIiwKQEAgLTEzNDQsMTEgKzE2NzAsMTEgQEAKIAkJcnhfY2xlYXJfY291bnQgLT0gYXItPnN1cnZleV9sYXN0X3J4X2NsZWFyX2NvdW50OwogCiAJCXN1cnZleSA9ICZhci0+c3VydmV5W2lkeF07Ci0JCXN1cnZleS0+Y2hhbm5lbF90aW1lID0gV01JX0NIQU5fSU5GT19NU0VDKGN5Y2xlX2NvdW50KTsKLQkJc3VydmV5LT5jaGFubmVsX3RpbWVfcnggPSBXTUlfQ0hBTl9JTkZPX01TRUMocnhfY2xlYXJfY291bnQpOworCQlzdXJ2ZXktPnRpbWUgPSBXTUlfQ0hBTl9JTkZPX01TRUMoY3ljbGVfY291bnQpOworCQlzdXJ2ZXktPnRpbWVfcnggPSBXTUlfQ0hBTl9JTkZPX01TRUMocnhfY2xlYXJfY291bnQpOwogCQlzdXJ2ZXktPm5vaXNlID0gbm9pc2VfZmxvb3I7Ci0JCXN1cnZleS0+ZmlsbGVkID0gU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FIHwKLQkJCQkgU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1JYIHwKKwkJc3VydmV5LT5maWxsZWQgPSBTVVJWRVlfSU5GT19USU1FIHwKKwkJCQkgU1VSVkVZX0lORk9fVElNRV9SWCB8CiAJCQkJIFNVUlZFWV9JTkZPX05PSVNFX0RCTTsKIAl9CiAKQEAgLTEzNTksMTIgKzE2ODUsMTIgQEAKIAlzcGluX3VubG9ja19iaCgmYXItPmRhdGFfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDEwa193bWlfZXZlbnRfZWNobyhzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF9lY2hvKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAiV01JX0VDSE9fRVZFTlRJRFxuIik7CiB9CiAKLXN0YXRpYyBpbnQgYXRoMTBrX3dtaV9ldmVudF9kZWJ1Z19tZXNnKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoraW50IGF0aDEwa193bWlfZXZlbnRfZGVidWdfbWVzZyhzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSBldmVudCBkZWJ1ZyBtZXNnIGxlbiAlZFxuIiwKIAkJICAgc2tiLT5sZW4pOwpAQCAtMTM3NCwxMiArMTcwMCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDEwa193bWlfcHVsbF9wZGV2X3N0YXRzKGNvbnN0IHN0cnVjdCB3bWlfcGRldl9zdGF0cyAqc3JjLAotCQkJCSAgICAgICBzdHJ1Y3QgYXRoMTBrX2Z3X3N0YXRzX3BkZXYgKmRzdCkKK3ZvaWQgYXRoMTBrX3dtaV9wdWxsX3BkZXZfc3RhdHNfYmFzZShjb25zdCBzdHJ1Y3Qgd21pX3BkZXZfc3RhdHNfYmFzZSAqc3JjLAorCQkJCSAgICAgc3RydWN0IGF0aDEwa19md19zdGF0c19wZGV2ICpkc3QpCiB7Ci0JY29uc3Qgc3RydWN0IHdhbF9kYmdfdHhfc3RhdHMgKnR4ID0gJnNyYy0+d2FsLnR4OwotCWNvbnN0IHN0cnVjdCB3YWxfZGJnX3J4X3N0YXRzICpyeCA9ICZzcmMtPndhbC5yeDsKLQogCWRzdC0+Y2hfbm9pc2VfZmxvb3IgPSBfX2xlMzJfdG9fY3B1KHNyYy0+Y2hhbl9uZik7CiAJZHN0LT50eF9mcmFtZV9jb3VudCA9IF9fbGUzMl90b19jcHUoc3JjLT50eF9mcmFtZV9jb3VudCk7CiAJZHN0LT5yeF9mcmFtZV9jb3VudCA9IF9fbGUzMl90b19jcHUoc3JjLT5yeF9mcmFtZV9jb3VudCk7CkBAIC0xMzg3LDU3ICsxNzEwLDc2IEBACiAJZHN0LT5jeWNsZV9jb3VudCA9IF9fbGUzMl90b19jcHUoc3JjLT5jeWNsZV9jb3VudCk7CiAJZHN0LT5waHlfZXJyX2NvdW50ID0gX19sZTMyX3RvX2NwdShzcmMtPnBoeV9lcnJfY291bnQpOwogCWRzdC0+Y2hhbl90eF9wb3dlciA9IF9fbGUzMl90b19jcHUoc3JjLT5jaGFuX3R4X3B3cik7Ci0KLQlkc3QtPmNvbXBfcXVldWVkID0gX19sZTMyX3RvX2NwdSh0eC0+Y29tcF9xdWV1ZWQpOwotCWRzdC0+Y29tcF9kZWxpdmVyZWQgPSBfX2xlMzJfdG9fY3B1KHR4LT5jb21wX2RlbGl2ZXJlZCk7Ci0JZHN0LT5tc2R1X2VucXVlZCA9IF9fbGUzMl90b19jcHUodHgtPm1zZHVfZW5xdWVkKTsKLQlkc3QtPm1wZHVfZW5xdWVkID0gX19sZTMyX3RvX2NwdSh0eC0+bXBkdV9lbnF1ZWQpOwotCWRzdC0+d21tX2Ryb3AgPSBfX2xlMzJfdG9fY3B1KHR4LT53bW1fZHJvcCk7Ci0JZHN0LT5sb2NhbF9lbnF1ZWQgPSBfX2xlMzJfdG9fY3B1KHR4LT5sb2NhbF9lbnF1ZWQpOwotCWRzdC0+bG9jYWxfZnJlZWQgPSBfX2xlMzJfdG9fY3B1KHR4LT5sb2NhbF9mcmVlZCk7Ci0JZHN0LT5od19xdWV1ZWQgPSBfX2xlMzJfdG9fY3B1KHR4LT5od19xdWV1ZWQpOwotCWRzdC0+aHdfcmVhcGVkID0gX19sZTMyX3RvX2NwdSh0eC0+aHdfcmVhcGVkKTsKLQlkc3QtPnVuZGVycnVuID0gX19sZTMyX3RvX2NwdSh0eC0+dW5kZXJydW4pOwotCWRzdC0+dHhfYWJvcnQgPSBfX2xlMzJfdG9fY3B1KHR4LT50eF9hYm9ydCk7Ci0JZHN0LT5tcGR1c19yZXF1ZWQgPSBfX2xlMzJfdG9fY3B1KHR4LT5tcGR1c19yZXF1ZWQpOwotCWRzdC0+dHhfa28gPSBfX2xlMzJfdG9fY3B1KHR4LT50eF9rbyk7Ci0JZHN0LT5kYXRhX3JjID0gX19sZTMyX3RvX2NwdSh0eC0+ZGF0YV9yYyk7Ci0JZHN0LT5zZWxmX3RyaWdnZXJzID0gX19sZTMyX3RvX2NwdSh0eC0+c2VsZl90cmlnZ2Vycyk7Ci0JZHN0LT5zd19yZXRyeV9mYWlsdXJlID0gX19sZTMyX3RvX2NwdSh0eC0+c3dfcmV0cnlfZmFpbHVyZSk7Ci0JZHN0LT5pbGxnbF9yYXRlX3BoeV9lcnIgPSBfX2xlMzJfdG9fY3B1KHR4LT5pbGxnbF9yYXRlX3BoeV9lcnIpOwotCWRzdC0+cGRldl9jb250X3hyZXRyeSA9IF9fbGUzMl90b19jcHUodHgtPnBkZXZfY29udF94cmV0cnkpOwotCWRzdC0+cGRldl90eF90aW1lb3V0ID0gX19sZTMyX3RvX2NwdSh0eC0+cGRldl90eF90aW1lb3V0KTsKLQlkc3QtPnBkZXZfcmVzZXRzID0gX19sZTMyX3RvX2NwdSh0eC0+cGRldl9yZXNldHMpOwotCWRzdC0+cGh5X3VuZGVycnVuID0gX19sZTMyX3RvX2NwdSh0eC0+cGh5X3VuZGVycnVuKTsKLQlkc3QtPnR4b3Bfb3ZmID0gX19sZTMyX3RvX2NwdSh0eC0+dHhvcF9vdmYpOwotCi0JZHN0LT5taWRfcHBkdV9yb3V0ZV9jaGFuZ2UgPSBfX2xlMzJfdG9fY3B1KHJ4LT5taWRfcHBkdV9yb3V0ZV9jaGFuZ2UpOwotCWRzdC0+c3RhdHVzX3JjdmQgPSBfX2xlMzJfdG9fY3B1KHJ4LT5zdGF0dXNfcmN2ZCk7Ci0JZHN0LT5yMF9mcmFncyA9IF9fbGUzMl90b19jcHUocngtPnIwX2ZyYWdzKTsKLQlkc3QtPnIxX2ZyYWdzID0gX19sZTMyX3RvX2NwdShyeC0+cjFfZnJhZ3MpOwotCWRzdC0+cjJfZnJhZ3MgPSBfX2xlMzJfdG9fY3B1KHJ4LT5yMl9mcmFncyk7Ci0JZHN0LT5yM19mcmFncyA9IF9fbGUzMl90b19jcHUocngtPnIzX2ZyYWdzKTsKLQlkc3QtPmh0dF9tc2R1cyA9IF9fbGUzMl90b19jcHUocngtPmh0dF9tc2R1cyk7Ci0JZHN0LT5odHRfbXBkdXMgPSBfX2xlMzJfdG9fY3B1KHJ4LT5odHRfbXBkdXMpOwotCWRzdC0+bG9jX21zZHVzID0gX19sZTMyX3RvX2NwdShyeC0+bG9jX21zZHVzKTsKLQlkc3QtPmxvY19tcGR1cyA9IF9fbGUzMl90b19jcHUocngtPmxvY19tcGR1cyk7Ci0JZHN0LT5vdmVyc2l6ZV9hbXNkdSA9IF9fbGUzMl90b19jcHUocngtPm92ZXJzaXplX2Ftc2R1KTsKLQlkc3QtPnBoeV9lcnJzID0gX19sZTMyX3RvX2NwdShyeC0+cGh5X2VycnMpOwotCWRzdC0+cGh5X2Vycl9kcm9wID0gX19sZTMyX3RvX2NwdShyeC0+cGh5X2Vycl9kcm9wKTsKLQlkc3QtPm1wZHVfZXJycyA9IF9fbGUzMl90b19jcHUocngtPm1wZHVfZXJycyk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDEwa193bWlfcHVsbF9wZWVyX3N0YXRzKGNvbnN0IHN0cnVjdCB3bWlfcGVlcl9zdGF0cyAqc3JjLAotCQkJCSAgICAgICBzdHJ1Y3QgYXRoMTBrX2Z3X3N0YXRzX3BlZXIgKmRzdCkKK3ZvaWQgYXRoMTBrX3dtaV9wdWxsX3BkZXZfc3RhdHNfdHgoY29uc3Qgc3RydWN0IHdtaV9wZGV2X3N0YXRzX3R4ICpzcmMsCisJCQkJICAgc3RydWN0IGF0aDEwa19md19zdGF0c19wZGV2ICpkc3QpCit7CisJZHN0LT5jb21wX3F1ZXVlZCA9IF9fbGUzMl90b19jcHUoc3JjLT5jb21wX3F1ZXVlZCk7CisJZHN0LT5jb21wX2RlbGl2ZXJlZCA9IF9fbGUzMl90b19jcHUoc3JjLT5jb21wX2RlbGl2ZXJlZCk7CisJZHN0LT5tc2R1X2VucXVlZCA9IF9fbGUzMl90b19jcHUoc3JjLT5tc2R1X2VucXVlZCk7CisJZHN0LT5tcGR1X2VucXVlZCA9IF9fbGUzMl90b19jcHUoc3JjLT5tcGR1X2VucXVlZCk7CisJZHN0LT53bW1fZHJvcCA9IF9fbGUzMl90b19jcHUoc3JjLT53bW1fZHJvcCk7CisJZHN0LT5sb2NhbF9lbnF1ZWQgPSBfX2xlMzJfdG9fY3B1KHNyYy0+bG9jYWxfZW5xdWVkKTsKKwlkc3QtPmxvY2FsX2ZyZWVkID0gX19sZTMyX3RvX2NwdShzcmMtPmxvY2FsX2ZyZWVkKTsKKwlkc3QtPmh3X3F1ZXVlZCA9IF9fbGUzMl90b19jcHUoc3JjLT5od19xdWV1ZWQpOworCWRzdC0+aHdfcmVhcGVkID0gX19sZTMyX3RvX2NwdShzcmMtPmh3X3JlYXBlZCk7CisJZHN0LT51bmRlcnJ1biA9IF9fbGUzMl90b19jcHUoc3JjLT51bmRlcnJ1bik7CisJZHN0LT50eF9hYm9ydCA9IF9fbGUzMl90b19jcHUoc3JjLT50eF9hYm9ydCk7CisJZHN0LT5tcGR1c19yZXF1ZWQgPSBfX2xlMzJfdG9fY3B1KHNyYy0+bXBkdXNfcmVxdWVkKTsKKwlkc3QtPnR4X2tvID0gX19sZTMyX3RvX2NwdShzcmMtPnR4X2tvKTsKKwlkc3QtPmRhdGFfcmMgPSBfX2xlMzJfdG9fY3B1KHNyYy0+ZGF0YV9yYyk7CisJZHN0LT5zZWxmX3RyaWdnZXJzID0gX19sZTMyX3RvX2NwdShzcmMtPnNlbGZfdHJpZ2dlcnMpOworCWRzdC0+c3dfcmV0cnlfZmFpbHVyZSA9IF9fbGUzMl90b19jcHUoc3JjLT5zd19yZXRyeV9mYWlsdXJlKTsKKwlkc3QtPmlsbGdsX3JhdGVfcGh5X2VyciA9IF9fbGUzMl90b19jcHUoc3JjLT5pbGxnbF9yYXRlX3BoeV9lcnIpOworCWRzdC0+cGRldl9jb250X3hyZXRyeSA9IF9fbGUzMl90b19jcHUoc3JjLT5wZGV2X2NvbnRfeHJldHJ5KTsKKwlkc3QtPnBkZXZfdHhfdGltZW91dCA9IF9fbGUzMl90b19jcHUoc3JjLT5wZGV2X3R4X3RpbWVvdXQpOworCWRzdC0+cGRldl9yZXNldHMgPSBfX2xlMzJfdG9fY3B1KHNyYy0+cGRldl9yZXNldHMpOworCWRzdC0+cGh5X3VuZGVycnVuID0gX19sZTMyX3RvX2NwdShzcmMtPnBoeV91bmRlcnJ1bik7CisJZHN0LT50eG9wX292ZiA9IF9fbGUzMl90b19jcHUoc3JjLT50eG9wX292Zik7Cit9CisKK3ZvaWQgYXRoMTBrX3dtaV9wdWxsX3BkZXZfc3RhdHNfcngoY29uc3Qgc3RydWN0IHdtaV9wZGV2X3N0YXRzX3J4ICpzcmMsCisJCQkJICAgc3RydWN0IGF0aDEwa19md19zdGF0c19wZGV2ICpkc3QpCit7CisJZHN0LT5taWRfcHBkdV9yb3V0ZV9jaGFuZ2UgPSBfX2xlMzJfdG9fY3B1KHNyYy0+bWlkX3BwZHVfcm91dGVfY2hhbmdlKTsKKwlkc3QtPnN0YXR1c19yY3ZkID0gX19sZTMyX3RvX2NwdShzcmMtPnN0YXR1c19yY3ZkKTsKKwlkc3QtPnIwX2ZyYWdzID0gX19sZTMyX3RvX2NwdShzcmMtPnIwX2ZyYWdzKTsKKwlkc3QtPnIxX2ZyYWdzID0gX19sZTMyX3RvX2NwdShzcmMtPnIxX2ZyYWdzKTsKKwlkc3QtPnIyX2ZyYWdzID0gX19sZTMyX3RvX2NwdShzcmMtPnIyX2ZyYWdzKTsKKwlkc3QtPnIzX2ZyYWdzID0gX19sZTMyX3RvX2NwdShzcmMtPnIzX2ZyYWdzKTsKKwlkc3QtPmh0dF9tc2R1cyA9IF9fbGUzMl90b19jcHUoc3JjLT5odHRfbXNkdXMpOworCWRzdC0+aHR0X21wZHVzID0gX19sZTMyX3RvX2NwdShzcmMtPmh0dF9tcGR1cyk7CisJZHN0LT5sb2NfbXNkdXMgPSBfX2xlMzJfdG9fY3B1KHNyYy0+bG9jX21zZHVzKTsKKwlkc3QtPmxvY19tcGR1cyA9IF9fbGUzMl90b19jcHUoc3JjLT5sb2NfbXBkdXMpOworCWRzdC0+b3ZlcnNpemVfYW1zZHUgPSBfX2xlMzJfdG9fY3B1KHNyYy0+b3ZlcnNpemVfYW1zZHUpOworCWRzdC0+cGh5X2VycnMgPSBfX2xlMzJfdG9fY3B1KHNyYy0+cGh5X2VycnMpOworCWRzdC0+cGh5X2Vycl9kcm9wID0gX19sZTMyX3RvX2NwdShzcmMtPnBoeV9lcnJfZHJvcCk7CisJZHN0LT5tcGR1X2VycnMgPSBfX2xlMzJfdG9fY3B1KHNyYy0+bXBkdV9lcnJzKTsKK30KKwordm9pZCBhdGgxMGtfd21pX3B1bGxfcGRldl9zdGF0c19leHRyYShjb25zdCBzdHJ1Y3Qgd21pX3BkZXZfc3RhdHNfZXh0cmEgKnNyYywKKwkJCQkgICAgICBzdHJ1Y3QgYXRoMTBrX2Z3X3N0YXRzX3BkZXYgKmRzdCkKK3sKKwlkc3QtPmFja19yeF9iYWQgPSBfX2xlMzJfdG9fY3B1KHNyYy0+YWNrX3J4X2JhZCk7CisJZHN0LT5ydHNfYmFkID0gX19sZTMyX3RvX2NwdShzcmMtPnJ0c19iYWQpOworCWRzdC0+cnRzX2dvb2QgPSBfX2xlMzJfdG9fY3B1KHNyYy0+cnRzX2dvb2QpOworCWRzdC0+ZmNzX2JhZCA9IF9fbGUzMl90b19jcHUoc3JjLT5mY3NfYmFkKTsKKwlkc3QtPm5vX2JlYWNvbnMgPSBfX2xlMzJfdG9fY3B1KHNyYy0+bm9fYmVhY29ucyk7CisJZHN0LT5taWJfaW50X2NvdW50ID0gX19sZTMyX3RvX2NwdShzcmMtPm1pYl9pbnRfY291bnQpOworfQorCit2b2lkIGF0aDEwa193bWlfcHVsbF9wZWVyX3N0YXRzKGNvbnN0IHN0cnVjdCB3bWlfcGVlcl9zdGF0cyAqc3JjLAorCQkJCXN0cnVjdCBhdGgxMGtfZndfc3RhdHNfcGVlciAqZHN0KQogewogCWV0aGVyX2FkZHJfY29weShkc3QtPnBlZXJfbWFjYWRkciwgc3JjLT5wZWVyX21hY2FkZHIuYWRkcik7CiAJZHN0LT5wZWVyX3Jzc2kgPSBfX2xlMzJfdG9fY3B1KHNyYy0+cGVlcl9yc3NpKTsKIAlkc3QtPnBlZXJfdHhfcmF0ZSA9IF9fbGUzMl90b19jcHUoc3JjLT5wZWVyX3R4X3JhdGUpOwogfQogCi1zdGF0aWMgaW50IGF0aDEwa193bWlfbWFpbl9wdWxsX2Z3X3N0YXRzKHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJIHN0cnVjdCBhdGgxMGtfZndfc3RhdHMgKnN0YXRzKQorc3RhdGljIGludCBhdGgxMGtfd21pX21haW5fb3BfcHVsbF9md19zdGF0cyhzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICBzdHJ1Y3QgYXRoMTBrX2Z3X3N0YXRzICpzdGF0cykKIHsKIAljb25zdCBzdHJ1Y3Qgd21pX3N0YXRzX2V2ZW50ICpldiA9ICh2b2lkICopc2tiLT5kYXRhOwogCXUzMiBudW1fcGRldl9zdGF0cywgbnVtX3ZkZXZfc3RhdHMsIG51bV9wZWVyX3N0YXRzOwpAQCAtMTQ2Miw3ICsxODA0LDEwIEBACiAJCWlmICghZHN0KQogCQkJY29udGludWU7CiAKLQkJYXRoMTBrX3dtaV9wdWxsX3BkZXZfc3RhdHMoc3JjLCBkc3QpOworCQlhdGgxMGtfd21pX3B1bGxfcGRldl9zdGF0c19iYXNlKCZzcmMtPmJhc2UsIGRzdCk7CisJCWF0aDEwa193bWlfcHVsbF9wZGV2X3N0YXRzX3R4KCZzcmMtPnR4LCBkc3QpOworCQlhdGgxMGtfd21pX3B1bGxfcGRldl9zdGF0c19yeCgmc3JjLT5yeCwgZHN0KTsKKwogCQlsaXN0X2FkZF90YWlsKCZkc3QtPmxpc3QsICZzdGF0cy0+cGRldnMpOwogCX0KIApAQCAtMTQ4Nyw5ICsxODMyLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdGgxMGtfd21pXzEweF9wdWxsX2Z3X3N0YXRzKHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCQlzdHJ1Y3QgYXRoMTBrX2Z3X3N0YXRzICpzdGF0cykKK3N0YXRpYyBpbnQgYXRoMTBrX3dtaV8xMHhfb3BfcHVsbF9md19zdGF0cyhzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IGF0aDEwa19md19zdGF0cyAqc3RhdHMpCiB7CiAJY29uc3Qgc3RydWN0IHdtaV9zdGF0c19ldmVudCAqZXYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKIAl1MzIgbnVtX3BkZXZfc3RhdHMsIG51bV92ZGV2X3N0YXRzLCBudW1fcGVlcl9zdGF0czsKQEAgLTE1MTQsMTQgKzE4NTksMTAgQEAKIAkJaWYgKCFkc3QpCiAJCQljb250aW51ZTsKIAotCQlhdGgxMGtfd21pX3B1bGxfcGRldl9zdGF0cygmc3JjLT5vbGQsIGRzdCk7Ci0KLQkJZHN0LT5hY2tfcnhfYmFkID0gX19sZTMyX3RvX2NwdShzcmMtPmFja19yeF9iYWQpOwotCQlkc3QtPnJ0c19iYWQgPSBfX2xlMzJfdG9fY3B1KHNyYy0+cnRzX2JhZCk7Ci0JCWRzdC0+cnRzX2dvb2QgPSBfX2xlMzJfdG9fY3B1KHNyYy0+cnRzX2dvb2QpOwotCQlkc3QtPmZjc19iYWQgPSBfX2xlMzJfdG9fY3B1KHNyYy0+ZmNzX2JhZCk7Ci0JCWRzdC0+bm9fYmVhY29ucyA9IF9fbGUzMl90b19jcHUoc3JjLT5ub19iZWFjb25zKTsKLQkJZHN0LT5taWJfaW50X2NvdW50ID0gX19sZTMyX3RvX2NwdShzcmMtPm1pYl9pbnRfY291bnQpOworCQlhdGgxMGtfd21pX3B1bGxfcGRldl9zdGF0c19iYXNlKCZzcmMtPmJhc2UsIGRzdCk7CisJCWF0aDEwa193bWlfcHVsbF9wZGV2X3N0YXRzX3R4KCZzcmMtPnR4LCBkc3QpOworCQlhdGgxMGtfd21pX3B1bGxfcGRldl9zdGF0c19yeCgmc3JjLT5yeCwgZHN0KTsKKwkJYXRoMTBrX3dtaV9wdWxsX3BkZXZfc3RhdHNfZXh0cmEoJnNyYy0+ZXh0cmEsIGRzdCk7CiAKIAkJbGlzdF9hZGRfdGFpbCgmZHN0LT5saXN0LCAmc3RhdHMtPnBkZXZzKTsKIAl9CkBAIC0xNTUwLDYxICsxODkxLDI1MCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgYXRoMTBrX3dtaV9wdWxsX2Z3X3N0YXRzKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICBzdHJ1Y3QgYXRoMTBrX2Z3X3N0YXRzICpzdGF0cykKK3N0YXRpYyBpbnQgYXRoMTBrX3dtaV8xMF8yX29wX3B1bGxfZndfc3RhdHMoc3RydWN0IGF0aDEwayAqYXIsCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IGF0aDEwa19md19zdGF0cyAqc3RhdHMpCiB7Ci0JaWYgKHRlc3RfYml0KEFUSDEwS19GV19GRUFUVVJFX1dNSV8xMFgsIGFyLT5md19mZWF0dXJlcykpCi0JCXJldHVybiBhdGgxMGtfd21pXzEweF9wdWxsX2Z3X3N0YXRzKGFyLCBza2IsIHN0YXRzKTsKLQllbHNlCi0JCXJldHVybiBhdGgxMGtfd21pX21haW5fcHVsbF9md19zdGF0cyhhciwgc2tiLCBzdGF0cyk7CisJY29uc3Qgc3RydWN0IHdtaV8xMF8yX3N0YXRzX2V2ZW50ICpldiA9ICh2b2lkICopc2tiLT5kYXRhOworCXUzMiBudW1fcGRldl9zdGF0czsKKwl1MzIgbnVtX3BkZXZfZXh0X3N0YXRzOworCXUzMiBudW1fdmRldl9zdGF0czsKKwl1MzIgbnVtX3BlZXJfc3RhdHM7CisJaW50IGk7CisKKwlpZiAoIXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpldikpKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCW51bV9wZGV2X3N0YXRzID0gX19sZTMyX3RvX2NwdShldi0+bnVtX3BkZXZfc3RhdHMpOworCW51bV9wZGV2X2V4dF9zdGF0cyA9IF9fbGUzMl90b19jcHUoZXYtPm51bV9wZGV2X2V4dF9zdGF0cyk7CisJbnVtX3ZkZXZfc3RhdHMgPSBfX2xlMzJfdG9fY3B1KGV2LT5udW1fdmRldl9zdGF0cyk7CisJbnVtX3BlZXJfc3RhdHMgPSBfX2xlMzJfdG9fY3B1KGV2LT5udW1fcGVlcl9zdGF0cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BkZXZfc3RhdHM7IGkrKykgeworCQljb25zdCBzdHJ1Y3Qgd21pXzEwXzJfcGRldl9zdGF0cyAqc3JjOworCQlzdHJ1Y3QgYXRoMTBrX2Z3X3N0YXRzX3BkZXYgKmRzdDsKKworCQlzcmMgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJaWYgKCFza2JfcHVsbChza2IsIHNpemVvZigqc3JjKSkpCisJCQlyZXR1cm4gLUVQUk9UTzsKKworCQlkc3QgPSBremFsbG9jKHNpemVvZigqZHN0KSwgR0ZQX0FUT01JQyk7CisJCWlmICghZHN0KQorCQkJY29udGludWU7CisKKwkJYXRoMTBrX3dtaV9wdWxsX3BkZXZfc3RhdHNfYmFzZSgmc3JjLT5iYXNlLCBkc3QpOworCQlhdGgxMGtfd21pX3B1bGxfcGRldl9zdGF0c190eCgmc3JjLT50eCwgZHN0KTsKKwkJYXRoMTBrX3dtaV9wdWxsX3BkZXZfc3RhdHNfcngoJnNyYy0+cngsIGRzdCk7CisJCWF0aDEwa193bWlfcHVsbF9wZGV2X3N0YXRzX2V4dHJhKCZzcmMtPmV4dHJhLCBkc3QpOworCQkvKiBGSVhNRTogZXhwb3NlIDEwLjIgc3BlY2lmaWMgdmFsdWVzICovCisKKwkJbGlzdF9hZGRfdGFpbCgmZHN0LT5saXN0LCAmc3RhdHMtPnBkZXZzKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BkZXZfZXh0X3N0YXRzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHdtaV8xMF8yX3BkZXZfZXh0X3N0YXRzICpzcmM7CisKKwkJc3JjID0gKHZvaWQgKilza2ItPmRhdGE7CisJCWlmICghc2tiX3B1bGwoc2tiLCBzaXplb2YoKnNyYykpKQorCQkJcmV0dXJuIC1FUFJPVE87CisKKwkJLyogRklYTUU6IGV4cG9zZSB2YWx1ZXMgdG8gdXNlcnNwYWNlCisJCSAqCisJCSAqIE5vdGU6IEV2ZW4gdGhvdWdoIHRoaXMgbG9vcCBzZWVtcyB0byBkbyBub3RoaW5nIGl0IGlzCisJCSAqIHJlcXVpcmVkIHRvIHBhcnNlIGZvbGxvd2luZyBzdWItc3RydWN0dXJlcyBwcm9wZXJseS4KKwkJICovCisJfQorCisJLyogZncgZG9lc24ndCBpbXBsZW1lbnQgdmRldiBzdGF0cyAqLworCisJZm9yIChpID0gMDsgaSA8IG51bV9wZWVyX3N0YXRzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHdtaV8xMF8yX3BlZXJfc3RhdHMgKnNyYzsKKwkJc3RydWN0IGF0aDEwa19md19zdGF0c19wZWVyICpkc3Q7CisKKwkJc3JjID0gKHZvaWQgKilza2ItPmRhdGE7CisJCWlmICghc2tiX3B1bGwoc2tiLCBzaXplb2YoKnNyYykpKQorCQkJcmV0dXJuIC1FUFJPVE87CisKKwkJZHN0ID0ga3phbGxvYyhzaXplb2YoKmRzdCksIEdGUF9BVE9NSUMpOworCQlpZiAoIWRzdCkKKwkJCWNvbnRpbnVlOworCisJCWF0aDEwa193bWlfcHVsbF9wZWVyX3N0YXRzKCZzcmMtPm9sZCwgZHN0KTsKKworCQlkc3QtPnBlZXJfcnhfcmF0ZSA9IF9fbGUzMl90b19jcHUoc3JjLT5wZWVyX3J4X3JhdGUpOworCQkvKiBGSVhNRTogZXhwb3NlIDEwLjIgc3BlY2lmaWMgdmFsdWVzICovCisKKwkJbGlzdF9hZGRfdGFpbCgmZHN0LT5saXN0LCAmc3RhdHMtPnBlZXJzKTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9ldmVudF91cGRhdGVfc3RhdHMoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgYXRoMTBrX3dtaV8xMF8yXzRfb3BfcHVsbF9md19zdGF0cyhzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgc3RydWN0IGF0aDEwa19md19zdGF0cyAqc3RhdHMpCit7CisJY29uc3Qgc3RydWN0IHdtaV8xMF8yX3N0YXRzX2V2ZW50ICpldiA9ICh2b2lkICopc2tiLT5kYXRhOworCXUzMiBudW1fcGRldl9zdGF0czsKKwl1MzIgbnVtX3BkZXZfZXh0X3N0YXRzOworCXUzMiBudW1fdmRldl9zdGF0czsKKwl1MzIgbnVtX3BlZXJfc3RhdHM7CisJaW50IGk7CisKKwlpZiAoIXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpldikpKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCW51bV9wZGV2X3N0YXRzID0gX19sZTMyX3RvX2NwdShldi0+bnVtX3BkZXZfc3RhdHMpOworCW51bV9wZGV2X2V4dF9zdGF0cyA9IF9fbGUzMl90b19jcHUoZXYtPm51bV9wZGV2X2V4dF9zdGF0cyk7CisJbnVtX3ZkZXZfc3RhdHMgPSBfX2xlMzJfdG9fY3B1KGV2LT5udW1fdmRldl9zdGF0cyk7CisJbnVtX3BlZXJfc3RhdHMgPSBfX2xlMzJfdG9fY3B1KGV2LT5udW1fcGVlcl9zdGF0cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BkZXZfc3RhdHM7IGkrKykgeworCQljb25zdCBzdHJ1Y3Qgd21pXzEwXzJfcGRldl9zdGF0cyAqc3JjOworCQlzdHJ1Y3QgYXRoMTBrX2Z3X3N0YXRzX3BkZXYgKmRzdDsKKworCQlzcmMgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJaWYgKCFza2JfcHVsbChza2IsIHNpemVvZigqc3JjKSkpCisJCQlyZXR1cm4gLUVQUk9UTzsKKworCQlkc3QgPSBremFsbG9jKHNpemVvZigqZHN0KSwgR0ZQX0FUT01JQyk7CisJCWlmICghZHN0KQorCQkJY29udGludWU7CisKKwkJYXRoMTBrX3dtaV9wdWxsX3BkZXZfc3RhdHNfYmFzZSgmc3JjLT5iYXNlLCBkc3QpOworCQlhdGgxMGtfd21pX3B1bGxfcGRldl9zdGF0c190eCgmc3JjLT50eCwgZHN0KTsKKwkJYXRoMTBrX3dtaV9wdWxsX3BkZXZfc3RhdHNfcngoJnNyYy0+cngsIGRzdCk7CisJCWF0aDEwa193bWlfcHVsbF9wZGV2X3N0YXRzX2V4dHJhKCZzcmMtPmV4dHJhLCBkc3QpOworCQkvKiBGSVhNRTogZXhwb3NlIDEwLjIgc3BlY2lmaWMgdmFsdWVzICovCisKKwkJbGlzdF9hZGRfdGFpbCgmZHN0LT5saXN0LCAmc3RhdHMtPnBkZXZzKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BkZXZfZXh0X3N0YXRzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHdtaV8xMF8yX3BkZXZfZXh0X3N0YXRzICpzcmM7CisKKwkJc3JjID0gKHZvaWQgKilza2ItPmRhdGE7CisJCWlmICghc2tiX3B1bGwoc2tiLCBzaXplb2YoKnNyYykpKQorCQkJcmV0dXJuIC1FUFJPVE87CisKKwkJLyogRklYTUU6IGV4cG9zZSB2YWx1ZXMgdG8gdXNlcnNwYWNlCisJCSAqCisJCSAqIE5vdGU6IEV2ZW4gdGhvdWdoIHRoaXMgbG9vcCBzZWVtcyB0byBkbyBub3RoaW5nIGl0IGlzCisJCSAqIHJlcXVpcmVkIHRvIHBhcnNlIGZvbGxvd2luZyBzdWItc3RydWN0dXJlcyBwcm9wZXJseS4KKwkJICovCisJfQorCisJLyogZncgZG9lc24ndCBpbXBsZW1lbnQgdmRldiBzdGF0cyAqLworCisJZm9yIChpID0gMDsgaSA8IG51bV9wZWVyX3N0YXRzOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHdtaV8xMF8yXzRfcGVlcl9zdGF0cyAqc3JjOworCQlzdHJ1Y3QgYXRoMTBrX2Z3X3N0YXRzX3BlZXIgKmRzdDsKKworCQlzcmMgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJaWYgKCFza2JfcHVsbChza2IsIHNpemVvZigqc3JjKSkpCisJCQlyZXR1cm4gLUVQUk9UTzsKKworCQlkc3QgPSBremFsbG9jKHNpemVvZigqZHN0KSwgR0ZQX0FUT01JQyk7CisJCWlmICghZHN0KQorCQkJY29udGludWU7CisKKwkJYXRoMTBrX3dtaV9wdWxsX3BlZXJfc3RhdHMoJnNyYy0+Y29tbW9uLm9sZCwgZHN0KTsKKworCQlkc3QtPnBlZXJfcnhfcmF0ZSA9IF9fbGUzMl90b19jcHUoc3JjLT5jb21tb24ucGVlcl9yeF9yYXRlKTsKKwkJLyogRklYTUU6IGV4cG9zZSAxMC4yIHNwZWNpZmljIHZhbHVlcyAqLworCisJCWxpc3RfYWRkX3RhaWwoJmRzdC0+bGlzdCwgJnN0YXRzLT5wZWVycyk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF91cGRhdGVfc3RhdHMoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJXTUlfVVBEQVRFX1NUQVRTX0VWRU5USURcbiIpOwogCWF0aDEwa19kZWJ1Z19md19zdGF0c19wcm9jZXNzKGFyLCBza2IpOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfd21pX2V2ZW50X3ZkZXZfc3RhcnRfcmVzcChzdHJ1Y3QgYXRoMTBrICphciwKLQkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludAorYXRoMTBrX3dtaV9vcF9wdWxsX3ZkZXZfc3RhcnRfZXYoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJIHN0cnVjdCB3bWlfdmRldl9zdGFydF9ldl9hcmcgKmFyZykKIHsKLQlzdHJ1Y3Qgd21pX3ZkZXZfc3RhcnRfcmVzcG9uc2VfZXZlbnQgKmV2OworCXN0cnVjdCB3bWlfdmRldl9zdGFydF9yZXNwb25zZV9ldmVudCAqZXYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKworCWlmIChza2ItPmxlbiA8IHNpemVvZigqZXYpKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpldikpOworCWFyZy0+dmRldl9pZCA9IGV2LT52ZGV2X2lkOworCWFyZy0+cmVxX2lkID0gZXYtPnJlcV9pZDsKKwlhcmctPnJlc3BfdHlwZSA9IGV2LT5yZXNwX3R5cGU7CisJYXJnLT5zdGF0dXMgPSBldi0+c3RhdHVzOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF92ZGV2X3N0YXJ0X3Jlc3Aoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHdtaV92ZGV2X3N0YXJ0X2V2X2FyZyBhcmcgPSB7fTsKKwlpbnQgcmV0OwogCiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJXTUlfVkRFVl9TVEFSVF9SRVNQX0VWRU5USURcbiIpOwogCi0JZXYgPSAoc3RydWN0IHdtaV92ZGV2X3N0YXJ0X3Jlc3BvbnNlX2V2ZW50ICopc2tiLT5kYXRhOworCXJldCA9IGF0aDEwa193bWlfcHVsbF92ZGV2X3N0YXJ0KGFyLCBza2IsICZhcmcpOworCWlmIChyZXQpIHsKKwkJYXRoMTBrX3dhcm4oYXIsICJmYWlsZWQgdG8gcGFyc2UgdmRldiBzdGFydCBldmVudDogJWRcbiIsIHJldCk7CisJCXJldHVybjsKKwl9CiAKLQlpZiAoV0FSTl9PTihfX2xlMzJfdG9fY3B1KGV2LT5zdGF0dXMpKSkKKwlpZiAoV0FSTl9PTihfX2xlMzJfdG9fY3B1KGFyZy5zdGF0dXMpKSkKIAkJcmV0dXJuOwogCiAJY29tcGxldGUoJmFyLT52ZGV2X3NldHVwX2RvbmUpOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfd21pX2V2ZW50X3ZkZXZfc3RvcHBlZChzdHJ1Y3QgYXRoMTBrICphciwKLQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBhdGgxMGtfd21pX2V2ZW50X3ZkZXZfc3RvcHBlZChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIldNSV9WREVWX1NUT1BQRURfRVZFTlRJRFxuIik7CiAJY29tcGxldGUoJmFyLT52ZGV2X3NldHVwX2RvbmUpOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfd21pX2V2ZW50X3BlZXJfc3RhX2tpY2tvdXQoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50CithdGgxMGtfd21pX29wX3B1bGxfcGVlcl9raWNrX2V2KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCB3bWlfcGVlcl9raWNrX2V2X2FyZyAqYXJnKQogewotCXN0cnVjdCB3bWlfcGVlcl9zdGFfa2lja291dF9ldmVudCAqZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwlzdHJ1Y3Qgd21pX3BlZXJfc3RhX2tpY2tvdXRfZXZlbnQgKmV2ID0gKHZvaWQgKilza2ItPmRhdGE7CiAKLQlldiA9IChzdHJ1Y3Qgd21pX3BlZXJfc3RhX2tpY2tvdXRfZXZlbnQgKilza2ItPmRhdGE7CisJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCpldikpCisJCXJldHVybiAtRVBST1RPOworCisJc2tiX3B1bGwoc2tiLCBzaXplb2YoKmV2KSk7CisJYXJnLT5tYWNfYWRkciA9IGV2LT5wZWVyX21hY2FkZHIuYWRkcjsKKworCXJldHVybiAwOworfQorCit2b2lkIGF0aDEwa193bWlfZXZlbnRfcGVlcl9zdGFfa2lja291dChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgd21pX3BlZXJfa2lja19ldl9hcmcgYXJnID0ge307CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gYXRoMTBrX3dtaV9wdWxsX3BlZXJfa2ljayhhciwgc2tiLCAmYXJnKTsKKwlpZiAocmV0KSB7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHBhcnNlIHBlZXIga2lja291dCBldmVudDogJWRcbiIsCisJCQkgICAgcmV0KTsKKwkJcmV0dXJuOworCX0KIAogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIGV2ZW50IHBlZXIgc3RhIGtpY2tvdXQgJXBNXG4iLAotCQkgICBldi0+cGVlcl9tYWNhZGRyLmFkZHIpOworCQkgICBhcmcubWFjX2FkZHIpOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhX2J5X2lmYWRkcihhci0+aHcsIGV2LT5wZWVyX21hY2FkZHIuYWRkciwgTlVMTCk7CisJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhX2J5X2lmYWRkcihhci0+aHcsIGFyZy5tYWNfYWRkciwgTlVMTCk7CiAJaWYgKCFzdGEpIHsKIAkJYXRoMTBrX3dhcm4oYXIsICJTcHVyaW91cyBxdWljayBraWNrb3V0IGZvciBTVEEgJXBNXG4iLAotCQkJICAgIGV2LT5wZWVyX21hY2FkZHIuYWRkcik7CisJCQkgICAgYXJnLm1hY19hZGRyKTsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMTY0MSw3ICsyMTcxLDcgQEAKIHN0YXRpYyB2b2lkIGF0aDEwa193bWlfdXBkYXRlX3RpbShzdHJ1Y3QgYXRoMTBrICphciwKIAkJCQkgIHN0cnVjdCBhdGgxMGtfdmlmICphcnZpZiwKIAkJCQkgIHN0cnVjdCBza19idWZmICpiY24sCi0JCQkJICBzdHJ1Y3Qgd21pX2Jjbl9pbmZvICpiY25faW5mbykKKwkJCQkgIGNvbnN0IHN0cnVjdCB3bWlfdGltX2luZm8gKnRpbV9pbmZvKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKiliY24tPmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV90aW1faWUgKnRpbTsKQEAgLTE2NTIsMTQgKzIxODIsMTQgQEAKIAogCS8qIGlmIG5leHQgU1dCQSBoYXMgbm8gdGltX2NoYW5nZWQgdGhlIHRpbV9iaXRtYXAgaXMgZ2FyYmFnZS4KIAkgKiB3ZSBtdXN0IGNvcHkgdGhlIGJpdG1hcCB1cG9uIGNoYW5nZSBhbmQgcmV1c2UgaXQgbGF0ZXIgKi8KLQlpZiAoX19sZTMyX3RvX2NwdShiY25faW5mby0+dGltX2luZm8udGltX2NoYW5nZWQpKSB7CisJaWYgKF9fbGUzMl90b19jcHUodGltX2luZm8tPnRpbV9jaGFuZ2VkKSkgewogCQlpbnQgaTsKIAogCQlCVUlMRF9CVUdfT04oc2l6ZW9mKGFydmlmLT51LmFwLnRpbV9iaXRtYXApICE9Ci0JCQkgICAgIHNpemVvZihiY25faW5mby0+dGltX2luZm8udGltX2JpdG1hcCkpOworCQkJICAgICBzaXplb2YodGltX2luZm8tPnRpbV9iaXRtYXApKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGFydmlmLT51LmFwLnRpbV9iaXRtYXApOyBpKyspIHsKLQkJCXQgPSBiY25faW5mby0+dGltX2luZm8udGltX2JpdG1hcFtpIC8gNF07CisJCQl0ID0gdGltX2luZm8tPnRpbV9iaXRtYXBbaSAvIDRdOwogCQkJdiA9IF9fbGUzMl90b19jcHUodCk7CiAJCQlhcnZpZi0+dS5hcC50aW1fYml0bWFwW2ldID0gKHYgPj4gKChpICUgNCkgKiA4KSkgJiAweEZGOwogCQl9CkBAIC0xNzExLDEzICsyMjQxLDEzIEBACiAJCXJldHVybjsKIAl9CiAKLQl0aW0tPmJpdG1hcF9jdHJsID0gISFfX2xlMzJfdG9fY3B1KGJjbl9pbmZvLT50aW1faW5mby50aW1fbWNhc3QpOworCXRpbS0+Yml0bWFwX2N0cmwgPSAhIV9fbGUzMl90b19jcHUodGltX2luZm8tPnRpbV9tY2FzdCk7CiAJbWVtY3B5KHRpbS0+dmlydHVhbF9tYXAsIGFydmlmLT51LmFwLnRpbV9iaXRtYXAsIHB2bV9sZW4pOwogCiAJaWYgKHRpbS0+ZHRpbV9jb3VudCA9PSAwKSB7CiAJCUFUSDEwS19TS0JfQ0IoYmNuKS0+YmNuLmR0aW1femVybyA9IHRydWU7CiAKLQkJaWYgKF9fbGUzMl90b19jcHUoYmNuX2luZm8tPnRpbV9pbmZvLnRpbV9tY2FzdCkgPT0gMSkKKwkJaWYgKF9fbGUzMl90b19jcHUodGltX2luZm8tPnRpbV9tY2FzdCkgPT0gMSkKIAkJCUFUSDEwS19TS0JfQ0IoYmNuKS0+YmNuLmRlbGl2ZXJfY2FiID0gdHJ1ZTsKIAl9CiAKQEAgLTE3MjcsNyArMjI1Nyw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGF0aDEwa19wMnBfZmlsbF9ub2FfaWUodTggKmRhdGEsIHUzMiBsZW4sCi0JCQkJICAgc3RydWN0IHdtaV9wMnBfbm9hX2luZm8gKm5vYSkKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgd21pX3AycF9ub2FfaW5mbyAqbm9hKQogewogCXN0cnVjdCBpZWVlODAyMTFfcDJwX25vYV9hdHRyICpub2FfYXR0cjsKIAl1OCAgY3R3aW5kb3dfb3BwcHMgPSBub2EtPmN0d2luZG93X29wcHBzOwpAQCAtMTc2OSw3ICsyMjk5LDcgQEAKIAkqbm9hX2F0dHJfbGVuID0gX19jcHVfdG9fbGUxNihhdHRyX2xlbik7CiB9CiAKLXN0YXRpYyB1MzIgYXRoMTBrX3AycF9jYWxjX25vYV9pZV9sZW4oc3RydWN0IHdtaV9wMnBfbm9hX2luZm8gKm5vYSkKK3N0YXRpYyB1MzIgYXRoMTBrX3AycF9jYWxjX25vYV9pZV9sZW4oY29uc3Qgc3RydWN0IHdtaV9wMnBfbm9hX2luZm8gKm5vYSkKIHsKIAl1MzIgbGVuID0gMDsKIAl1OCBub2FfZGVzY3JpcHRvcnMgPSBub2EtPm51bV9kZXNjcmlwdG9yczsKQEAgLTE3ODksOSArMjMxOSw4IEBACiAKIHN0YXRpYyB2b2lkIGF0aDEwa193bWlfdXBkYXRlX25vYShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IGF0aDEwa192aWYgKmFydmlmLAogCQkJCSAgc3RydWN0IHNrX2J1ZmYgKmJjbiwKLQkJCQkgIHN0cnVjdCB3bWlfYmNuX2luZm8gKmJjbl9pbmZvKQorCQkJCSAgY29uc3Qgc3RydWN0IHdtaV9wMnBfbm9hX2luZm8gKm5vYSkKIHsKLQlzdHJ1Y3Qgd21pX3AycF9ub2FfaW5mbyAqbm9hID0gJmJjbl9pbmZvLT5wMnBfbm9hX2luZm87CiAJdTggKm5ld19kYXRhLCAqb2xkX2RhdGEgPSBhcnZpZi0+dS5hcC5ub2FfZGF0YTsKIAl1MzIgbmV3X2xlbjsKIApAQCAtMTgzMiwyMiArMjM2MSw1OSBAQAogCWtmcmVlKG9sZF9kYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9ldmVudF9ob3N0X3N3YmEoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGF0aDEwa193bWlfb3BfcHVsbF9zd2JhX2V2KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCB3bWlfc3diYV9ldl9hcmcgKmFyZykKIHsKLQlzdHJ1Y3Qgd21pX2hvc3Rfc3diYV9ldmVudCAqZXY7CisJc3RydWN0IHdtaV9ob3N0X3N3YmFfZXZlbnQgKmV2ID0gKHZvaWQgKilza2ItPmRhdGE7CisJdTMyIG1hcDsKKwlzaXplX3QgaTsKKworCWlmIChza2ItPmxlbiA8IHNpemVvZigqZXYpKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpldikpOworCWFyZy0+dmRldl9tYXAgPSBldi0+dmRldl9tYXA7CisKKwlmb3IgKGkgPSAwLCBtYXAgPSBfX2xlMzJfdG9fY3B1KGV2LT52ZGV2X21hcCk7IG1hcDsgbWFwID4+PSAxKSB7CisJCWlmICghKG1hcCAmIEJJVCgwKSkpCisJCQljb250aW51ZTsKKworCQkvKiBJZiB0aGlzIGhhcHBlbnMgdGhlcmUgd2VyZSBzb21lIGNoYW5nZXMgaW4gZmlybXdhcmUgYW5kCisJCSAqIGF0aDEwayBzaG91bGQgdXBkYXRlIHRoZSBtYXggc2l6ZSBvZiB0aW1faW5mbyBhcnJheS4KKwkJICovCisJCWlmIChXQVJOX09OX09OQ0UoaSA9PSBBUlJBWV9TSVpFKGFyZy0+dGltX2luZm8pKSkKKwkJCWJyZWFrOworCisJCWFyZy0+dGltX2luZm9baV0gPSAmZXYtPmJjbl9pbmZvW2ldLnRpbV9pbmZvOworCQlhcmctPm5vYV9pbmZvW2ldID0gJmV2LT5iY25faW5mb1tpXS5wMnBfbm9hX2luZm87CisJCWkrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhdGgxMGtfd21pX2V2ZW50X2hvc3Rfc3diYShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgd21pX3N3YmFfZXZfYXJnIGFyZyA9IHt9OwogCXUzMiBtYXA7CiAJaW50IGkgPSAtMTsKLQlzdHJ1Y3Qgd21pX2Jjbl9pbmZvICpiY25faW5mbzsKKwljb25zdCBzdHJ1Y3Qgd21pX3RpbV9pbmZvICp0aW1faW5mbzsKKwljb25zdCBzdHJ1Y3Qgd21pX3AycF9ub2FfaW5mbyAqbm9hX2luZm87CiAJc3RydWN0IGF0aDEwa192aWYgKmFydmlmOwogCXN0cnVjdCBza19idWZmICpiY247CiAJZG1hX2FkZHJfdCBwYWRkcjsKIAlpbnQgcmV0LCB2ZGV2X2lkID0gMDsKIAotCWV2ID0gKHN0cnVjdCB3bWlfaG9zdF9zd2JhX2V2ZW50ICopc2tiLT5kYXRhOwotCW1hcCA9IF9fbGUzMl90b19jcHUoZXYtPnZkZXZfbWFwKTsKKwlyZXQgPSBhdGgxMGtfd21pX3B1bGxfc3diYShhciwgc2tiLCAmYXJnKTsKKwlpZiAocmV0KSB7CisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHBhcnNlIHN3YmEgZXZlbnQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm47CisJfQorCisJbWFwID0gX19sZTMyX3RvX2NwdShhcmcudmRldl9tYXApOwogCiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19NR01ULCAibWdtdCBzd2JhIHZkZXZfbWFwIDB4JXhcbiIsCi0JCSAgIGV2LT52ZGV2X21hcCk7CisJCSAgIG1hcCk7CiAKIAlmb3IgKDsgbWFwOyBtYXAgPj49IDEsIHZkZXZfaWQrKykgewogCQlpZiAoIShtYXAgJiAweDEpKQpAQCAtMTg2MCwxOSArMjQyNiwyMCBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQliY25faW5mbyA9ICZldi0+YmNuX2luZm9baV07CisJCXRpbV9pbmZvID0gYXJnLnRpbV9pbmZvW2ldOworCQlub2FfaW5mbyA9IGFyZy5ub2FfaW5mb1tpXTsKIAogCQlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX01HTVQsCiAJCQkgICAibWdtdCBldmVudCBiY25faW5mbyAlZCB0aW1fbGVuICVkIG1jYXN0ICVkIGNoYW5nZWQgJWQgbnVtX3BzX3BlbmRpbmcgJWQgYml0bWFwIDB4JTA4eCUwOHglMDh4JTA4eFxuIiwKIAkJCSAgIGksCi0JCQkgICBfX2xlMzJfdG9fY3B1KGJjbl9pbmZvLT50aW1faW5mby50aW1fbGVuKSwKLQkJCSAgIF9fbGUzMl90b19jcHUoYmNuX2luZm8tPnRpbV9pbmZvLnRpbV9tY2FzdCksCi0JCQkgICBfX2xlMzJfdG9fY3B1KGJjbl9pbmZvLT50aW1faW5mby50aW1fY2hhbmdlZCksCi0JCQkgICBfX2xlMzJfdG9fY3B1KGJjbl9pbmZvLT50aW1faW5mby50aW1fbnVtX3BzX3BlbmRpbmcpLAotCQkJICAgX19sZTMyX3RvX2NwdShiY25faW5mby0+dGltX2luZm8udGltX2JpdG1hcFszXSksCi0JCQkgICBfX2xlMzJfdG9fY3B1KGJjbl9pbmZvLT50aW1faW5mby50aW1fYml0bWFwWzJdKSwKLQkJCSAgIF9fbGUzMl90b19jcHUoYmNuX2luZm8tPnRpbV9pbmZvLnRpbV9iaXRtYXBbMV0pLAotCQkJICAgX19sZTMyX3RvX2NwdShiY25faW5mby0+dGltX2luZm8udGltX2JpdG1hcFswXSkpOworCQkJICAgX19sZTMyX3RvX2NwdSh0aW1faW5mby0+dGltX2xlbiksCisJCQkgICBfX2xlMzJfdG9fY3B1KHRpbV9pbmZvLT50aW1fbWNhc3QpLAorCQkJICAgX19sZTMyX3RvX2NwdSh0aW1faW5mby0+dGltX2NoYW5nZWQpLAorCQkJICAgX19sZTMyX3RvX2NwdSh0aW1faW5mby0+dGltX251bV9wc19wZW5kaW5nKSwKKwkJCSAgIF9fbGUzMl90b19jcHUodGltX2luZm8tPnRpbV9iaXRtYXBbM10pLAorCQkJICAgX19sZTMyX3RvX2NwdSh0aW1faW5mby0+dGltX2JpdG1hcFsyXSksCisJCQkgICBfX2xlMzJfdG9fY3B1KHRpbV9pbmZvLT50aW1fYml0bWFwWzFdKSwKKwkJCSAgIF9fbGUzMl90b19jcHUodGltX2luZm8tPnRpbV9iaXRtYXBbMF0pKTsKIAogCQlhcnZpZiA9IGF0aDEwa19nZXRfYXJ2aWYoYXIsIHZkZXZfaWQpOwogCQlpZiAoYXJ2aWYgPT0gTlVMTCkgewpAQCAtMTg5OSwxNSArMjQ2NiwyNSBAQAogCQl9CiAKIAkJYXRoMTBrX3R4X2hfc2VxX25vKGFydmlmLT52aWYsIGJjbik7Ci0JCWF0aDEwa193bWlfdXBkYXRlX3RpbShhciwgYXJ2aWYsIGJjbiwgYmNuX2luZm8pOwotCQlhdGgxMGtfd21pX3VwZGF0ZV9ub2EoYXIsIGFydmlmLCBiY24sIGJjbl9pbmZvKTsKKwkJYXRoMTBrX3dtaV91cGRhdGVfdGltKGFyLCBhcnZpZiwgYmNuLCB0aW1faW5mbyk7CisJCWF0aDEwa193bWlfdXBkYXRlX25vYShhciwgYXJ2aWYsIGJjbiwgbm9hX2luZm8pOwogCiAJCXNwaW5fbG9ja19iaCgmYXItPmRhdGFfbG9jayk7CiAKIAkJaWYgKGFydmlmLT5iZWFjb24pIHsKLQkJCWlmICghYXJ2aWYtPmJlYWNvbl9zZW50KQotCQkJCWF0aDEwa193YXJuKGFyLCAiU1dCQSBvdmVycnVuIG9uIHZkZXYgJWRcbiIsCisJCQlzd2l0Y2ggKGFydmlmLT5iZWFjb25fc3RhdGUpIHsKKwkJCWNhc2UgQVRIMTBLX0JFQUNPTl9TRU5UOgorCQkJCWJyZWFrOworCQkJY2FzZSBBVEgxMEtfQkVBQ09OX1NDSEVEVUxFRDoKKwkJCQlhdGgxMGtfd2FybihhciwgIlNXQkEgb3ZlcnJ1biBvbiB2ZGV2ICVkLCBza2lwcGVkIG9sZCBiZWFjb25cbiIsCiAJCQkJCSAgICBhcnZpZi0+dmRldl9pZCk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUSDEwS19CRUFDT05fU0VORElORzoKKwkJCQlhdGgxMGtfd2FybihhciwgIlNXQkEgb3ZlcnJ1biBvbiB2ZGV2ICVkLCBza2lwcGVkIG5ldyBiZWFjb25cbiIsCisJCQkJCSAgICBhcnZpZi0+dmRldl9pZCk7CisJCQkJZGV2X2tmcmVlX3NrYihiY24pOworCQkJCWdvdG8gc2tpcDsKKwkJCX0KIAogCQkJYXRoMTBrX21hY192aWZfYmVhY29uX2ZyZWUoYXJ2aWYpOwogCQl9CkBAIC0xOTM1LDE5ICsyNTEyLDE5IEBACiAJCX0KIAogCQlhcnZpZi0+YmVhY29uID0gYmNuOwotCQlhcnZpZi0+YmVhY29uX3NlbnQgPSBmYWxzZTsKKwkJYXJ2aWYtPmJlYWNvbl9zdGF0ZSA9IEFUSDEwS19CRUFDT05fU0NIRURVTEVEOwogCiAJCXRyYWNlX2F0aDEwa190eF9oZHIoYXIsIGJjbi0+ZGF0YSwgYmNuLT5sZW4pOwogCQl0cmFjZV9hdGgxMGtfdHhfcGF5bG9hZChhciwgYmNuLT5kYXRhLCBiY24tPmxlbik7CiAKLQkJYXRoMTBrX3dtaV90eF9iZWFjb25fbm93YWl0KGFydmlmKTsKIHNraXA6CiAJCXNwaW5fdW5sb2NrX2JoKCZhci0+ZGF0YV9sb2NrKTsKIAl9CisKKwlhdGgxMGtfd21pX3R4X2JlYWNvbnNfbm93YWl0KGFyKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9ldmVudF90YnR0b2Zmc2V0X3VwZGF0ZShzdHJ1Y3QgYXRoMTBrICphciwKLQkJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGF0aDEwa193bWlfZXZlbnRfdGJ0dG9mZnNldF91cGRhdGUoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJXTUlfVEJUVE9GRlNFVF9VUERBVEVfRVZFTlRJRFxuIik7CiB9CkBAIC0yMDY4LDkgKzI2NDUsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfd21pX2V2ZW50X2RmcyhzdHJ1Y3QgYXRoMTBrICphciwKLQkJCQkgY29uc3Qgc3RydWN0IHdtaV9waHllcnIgKnBoeWVyciwKLQkJCQkgdTY0IHRzZikKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF9kZnMoc3RydWN0IGF0aDEwayAqYXIsCisJCQkgIGNvbnN0IHN0cnVjdCB3bWlfcGh5ZXJyICpwaHllcnIsCisJCQkgIHU2NCB0c2YpCiB7CiAJaW50IGJ1Zl9sZW4sIHRsdl9sZW4sIHJlcywgaSA9IDA7CiAJY29uc3Qgc3RydWN0IHBoeWVycl90bHYgKnRsdjsKQEAgLTIxMzMsMTAgKzI3MTAsOSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQKLWF0aDEwa193bWlfZXZlbnRfc3BlY3RyYWxfc2NhbihzdHJ1Y3QgYXRoMTBrICphciwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgd21pX3BoeWVyciAqcGh5ZXJyLAotCQkJICAgICAgIHU2NCB0c2YpCit2b2lkIGF0aDEwa193bWlfZXZlbnRfc3BlY3RyYWxfc2NhbihzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkgICAgY29uc3Qgc3RydWN0IHdtaV9waHllcnIgKnBoeWVyciwKKwkJCQkgICAgdTY0IHRzZikKIHsKIAlpbnQgYnVmX2xlbiwgdGx2X2xlbiwgcmVzLCBpID0gMDsKIAlzdHJ1Y3QgcGh5ZXJyX3RsdiAqdGx2OwpAQCAtMjE4OCwzNyArMjc2NCw1MyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9ldmVudF9waHllcnIoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGF0aDEwa193bWlfb3BfcHVsbF9waHllcnJfZXYoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCB3bWlfcGh5ZXJyX2V2X2FyZyAqYXJnKQogewotCWNvbnN0IHN0cnVjdCB3bWlfcGh5ZXJyX2V2ZW50ICpldjsKKwlzdHJ1Y3Qgd21pX3BoeWVycl9ldmVudCAqZXYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKworCWlmIChza2ItPmxlbiA8IHNpemVvZigqZXYpKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCWFyZy0+bnVtX3BoeWVycnMgPSBldi0+bnVtX3BoeWVycnM7CisJYXJnLT50c2ZfbDMyID0gZXYtPnRzZl9sMzI7CisJYXJnLT50c2ZfdTMyID0gZXYtPnRzZl91MzI7CisJYXJnLT5idWZfbGVuID0gX19jcHVfdG9fbGUzMihza2ItPmxlbiAtIHNpemVvZigqZXYpKTsKKwlhcmctPnBoeWVycnMgPSBldi0+cGh5ZXJyczsKKworCXJldHVybiAwOworfQorCit2b2lkIGF0aDEwa193bWlfZXZlbnRfcGh5ZXJyKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB3bWlfcGh5ZXJyX2V2X2FyZyBhcmcgPSB7fTsKIAljb25zdCBzdHJ1Y3Qgd21pX3BoeWVyciAqcGh5ZXJyOwogCXUzMiBjb3VudCwgaSwgYnVmX2xlbiwgcGh5X2Vycl9jb2RlOwogCXU2NCB0c2Y7Ci0JaW50IGxlZnRfbGVuID0gc2tiLT5sZW47CisJaW50IGxlZnRfbGVuLCByZXQ7CiAKIAlBVEgxMEtfREZTX1NUQVRfSU5DKGFyLCBwaHlfZXJyb3JzKTsKIAotCS8qIENoZWNrIGlmIGNvbWJpbmVkIGV2ZW50IGF2YWlsYWJsZSAqLwotCWlmIChsZWZ0X2xlbiA8IHNpemVvZigqZXYpKSB7Ci0JCWF0aDEwa193YXJuKGFyLCAid21pIHBoeWVyciBjb21iaW5lZCBldmVudCB3cm9uZyBsZW5cbiIpOworCXJldCA9IGF0aDEwa193bWlfcHVsbF9waHllcnIoYXIsIHNrYiwgJmFyZyk7CisJaWYgKHJldCkgeworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBwYXJzZSBwaHllcnIgZXZlbnQ6ICVkXG4iLCByZXQpOwogCQlyZXR1cm47CiAJfQogCi0JbGVmdF9sZW4gLT0gc2l6ZW9mKCpldik7CisJbGVmdF9sZW4gPSBfX2xlMzJfdG9fY3B1KGFyZy5idWZfbGVuKTsKIAogCS8qIENoZWNrIG51bWJlciBvZiBpbmNsdWRlZCBldmVudHMgKi8KLQlldiA9IChjb25zdCBzdHJ1Y3Qgd21pX3BoeWVycl9ldmVudCAqKXNrYi0+ZGF0YTsKLQljb3VudCA9IF9fbGUzMl90b19jcHUoZXYtPm51bV9waHllcnJzKTsKKwljb3VudCA9IF9fbGUzMl90b19jcHUoYXJnLm51bV9waHllcnJzKTsKIAotCXRzZiA9IF9fbGUzMl90b19jcHUoZXYtPnRzZl91MzIpOworCXRzZiA9IF9fbGUzMl90b19jcHUoYXJnLnRzZl91MzIpOwogCXRzZiA8PD0gMzI7Ci0JdHNmIHw9IF9fbGUzMl90b19jcHUoZXYtPnRzZl9sMzIpOworCXRzZiB8PSBfX2xlMzJfdG9fY3B1KGFyZy50c2ZfbDMyKTsKIAogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLAogCQkgICAid21pIGV2ZW50IHBoeWVyciBjb3VudCAlZCB0c2Y2NCAweCVsbFhcbiIsCiAJCSAgIGNvdW50LCB0c2YpOwogCi0JcGh5ZXJyID0gZXYtPnBoeWVycnM7CisJcGh5ZXJyID0gYXJnLnBoeWVycnM7CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJLyogQ2hlY2sgaWYgd2UgY2FuIHJlYWQgZXZlbnQgaGVhZGVyICovCiAJCWlmIChsZWZ0X2xlbiA8IHNpemVvZigqcGh5ZXJyKSkgewpAQCAtMjI1OCwxOSArMjg1MCwxNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9ldmVudF9yb2FtKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBhdGgxMGtfd21pX2V2ZW50X3JvYW0oc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJXTUlfUk9BTV9FVkVOVElEXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9ldmVudF9wcm9maWxlX21hdGNoKHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBhdGgxMGtfd21pX2V2ZW50X3Byb2ZpbGVfbWF0Y2goc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJXTUlfUFJPRklMRV9NQVRDSFxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDEwa193bWlfZXZlbnRfZGVidWdfcHJpbnQoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBhdGgxMGtfd21pX2V2ZW50X2RlYnVnX3ByaW50KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWNoYXIgYnVmWzEwMV0sIGM7CiAJaW50IGk7CkBAIC0yMzAzLDEwMyArMjg5Myw5MCBAQAogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JX1BSSU5ULCAid21pIHByaW50ICclcydcbiIsIGJ1Zik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDEwa193bWlfZXZlbnRfcGRldl9xdml0KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBhdGgxMGtfd21pX2V2ZW50X3BkZXZfcXZpdChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIldNSV9QREVWX1FWSVRfRVZFTlRJRFxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDEwa193bWlfZXZlbnRfd2xhbl9wcm9maWxlX2RhdGEoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBhdGgxMGtfd21pX2V2ZW50X3dsYW5fcHJvZmlsZV9kYXRhKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAiV01JX1dMQU5fUFJPRklMRV9EQVRBX0VWRU5USURcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfd21pX2V2ZW50X3J0dF9tZWFzdXJlbWVudF9yZXBvcnQoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF9ydHRfbWVhc3VyZW1lbnRfcmVwb3J0KHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJXTUlfUlRUX01FQVNVUkVNRU5UX1JFUE9SVF9FVkVOVElEXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9ldmVudF90c2ZfbWVhc3VyZW1lbnRfcmVwb3J0KHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGF0aDEwa193bWlfZXZlbnRfdHNmX21lYXN1cmVtZW50X3JlcG9ydChzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAiV01JX1RTRl9NRUFTVVJFTUVOVF9SRVBPUlRfRVZFTlRJRFxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDEwa193bWlfZXZlbnRfcnR0X2Vycm9yX3JlcG9ydChzdHJ1Y3QgYXRoMTBrICphciwKLQkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF9ydHRfZXJyb3JfcmVwb3J0KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAiV01JX1JUVF9FUlJPUl9SRVBPUlRfRVZFTlRJRFxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDEwa193bWlfZXZlbnRfd293X3dha2V1cF9ob3N0KHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGF0aDEwa193bWlfZXZlbnRfd293X3dha2V1cF9ob3N0KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAiV01JX1dPV19XQUtFVVBfSE9TVF9FVkVOVElEXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9ldmVudF9kY3NfaW50ZXJmZXJlbmNlKHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBhdGgxMGtfd21pX2V2ZW50X2Rjc19pbnRlcmZlcmVuY2Uoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJXTUlfRENTX0lOVEVSRkVSRU5DRV9FVkVOVElEXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9ldmVudF9wZGV2X3RwY19jb25maWcoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF9wZGV2X3RwY19jb25maWcoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJXTUlfUERFVl9UUENfQ09ORklHX0VWRU5USURcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfd21pX2V2ZW50X3BkZXZfZnRtX2ludGcoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGF0aDEwa193bWlfZXZlbnRfcGRldl9mdG1faW50ZyhzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIldNSV9QREVWX0ZUTV9JTlRHX0VWRU5USURcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfd21pX2V2ZW50X2d0a19vZmZsb2FkX3N0YXR1cyhzdHJ1Y3QgYXRoMTBrICphciwKLQkJCQkJCXN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGF0aDEwa193bWlfZXZlbnRfZ3RrX29mZmxvYWRfc3RhdHVzKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAiV01JX0dUS19PRkZMT0FEX1NUQVRVU19FVkVOVElEXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9ldmVudF9ndGtfcmVrZXlfZmFpbChzdHJ1Y3QgYXRoMTBrICphciwKLQkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGF0aDEwa193bWlfZXZlbnRfZ3RrX3Jla2V5X2ZhaWwoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJXTUlfR1RLX1JFS0VZX0ZBSUxfRVZFTlRJRFxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDEwa193bWlfZXZlbnRfZGVsYmFfY29tcGxldGUoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBhdGgxMGtfd21pX2V2ZW50X2RlbGJhX2NvbXBsZXRlKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAiV01JX1RYX0RFTEJBX0NPTVBMRVRFX0VWRU5USURcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfd21pX2V2ZW50X2FkZGJhX2NvbXBsZXRlKHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF9hZGRiYV9jb21wbGV0ZShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIldNSV9UWF9BRERCQV9DT01QTEVURV9FVkVOVElEXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9ldmVudF92ZGV2X2luc3RhbGxfa2V5X2NvbXBsZXRlKHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGF0aDEwa193bWlfZXZlbnRfdmRldl9pbnN0YWxsX2tleV9jb21wbGV0ZShzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJCXN0cnVjdCBza19idWZmICpza2IpCiB7CiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJXTUlfVkRFVl9JTlNUQUxMX0tFWV9DT01QTEVURV9FVkVOVElEXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9ldmVudF9pbnN0X3Jzc2lfc3RhdHMoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF9pbnN0X3Jzc2lfc3RhdHMoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJXTUlfSU5TVF9SU1NJX1NUQVRTX0VWRU5USURcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfd21pX2V2ZW50X3ZkZXZfc3RhbmRieV9yZXEoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGF0aDEwa193bWlfZXZlbnRfdmRldl9zdGFuZGJ5X3JlcShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIldNSV9WREVWX1NUQU5EQllfUkVRX0VWRU5USURcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfd21pX2V2ZW50X3ZkZXZfcmVzdW1lX3JlcShzdHJ1Y3QgYXRoMTBrICphciwKLQkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBhdGgxMGtfd21pX2V2ZW50X3ZkZXZfcmVzdW1lX3JlcShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIldNSV9WREVWX1JFU1VNRV9SRVFfRVZFTlRJRFxuIik7CiB9CkBAIC0yNDM1LDggKzMwMTIsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF0aDEwa193bWlfbWFpbl9wdWxsX3N2Y19yZHlfZXYoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgc3RydWN0IHdtaV9zdmNfcmR5X2V2X2FyZyAqYXJnKQorc3RhdGljIGludAorYXRoMTBrX3dtaV9tYWluX29wX3B1bGxfc3ZjX3JkeV9ldihzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3Qgd21pX3N2Y19yZHlfZXZfYXJnICphcmcpCiB7CiAJc3RydWN0IHdtaV9zZXJ2aWNlX3JlYWR5X2V2ZW50ICpldjsKIAlzaXplX3QgaSwgbjsKQEAgLTI0NzEsOCArMzA0OSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXRoMTBrX3dtaV8xMHhfcHVsbF9zdmNfcmR5X2V2KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgc3RydWN0IHdtaV9zdmNfcmR5X2V2X2FyZyAqYXJnKQorc3RhdGljIGludAorYXRoMTBrX3dtaV8xMHhfb3BfcHVsbF9zdmNfcmR5X2V2KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgc3RydWN0IHdtaV9zdmNfcmR5X2V2X2FyZyAqYXJnKQogewogCXN0cnVjdCB3bWlfMTB4X3NlcnZpY2VfcmVhZHlfZXZlbnQgKmV2OwogCWludCBpLCBuOwpAQCAtMjUwNiwzMCArMzA4NSwyMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfd21pX2V2ZW50X3NlcnZpY2VfcmVhZHkoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCit2b2lkIGF0aDEwa193bWlfZXZlbnRfc2VydmljZV9yZWFkeShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgd21pX3N2Y19yZHlfZXZfYXJnIGFyZyA9IHt9OwogCXUzMiBudW1fdW5pdHMsIHJlcV9pZCwgdW5pdF9zaXplLCBudW1fbWVtX3JlcXMsIG51bV91bml0X2luZm8sIGk7CiAJaW50IHJldDsKIAotCW1lbXNldCgmYXItPndtaS5zdmNfbWFwLCAwLCBzaXplb2YoYXItPndtaS5zdmNfbWFwKSk7Ci0KLQlpZiAodGVzdF9iaXQoQVRIMTBLX0ZXX0ZFQVRVUkVfV01JXzEwWCwgYXItPmZ3X2ZlYXR1cmVzKSkgewotCQlyZXQgPSBhdGgxMGtfd21pXzEweF9wdWxsX3N2Y19yZHlfZXYoc2tiLCAmYXJnKTsKLQkJd21pXzEweF9zdmNfbWFwKGFyZy5zZXJ2aWNlX21hcCwgYXItPndtaS5zdmNfbWFwLAotCQkJCWFyZy5zZXJ2aWNlX21hcF9sZW4pOwotCX0gZWxzZSB7Ci0JCXJldCA9IGF0aDEwa193bWlfbWFpbl9wdWxsX3N2Y19yZHlfZXYoc2tiLCAmYXJnKTsKLQkJd21pX21haW5fc3ZjX21hcChhcmcuc2VydmljZV9tYXAsIGFyLT53bWkuc3ZjX21hcCwKLQkJCQkgYXJnLnNlcnZpY2VfbWFwX2xlbik7Ci0JfQotCisJcmV0ID0gYXRoMTBrX3dtaV9wdWxsX3N2Y19yZHkoYXIsIHNrYiwgJmFyZyk7CiAJaWYgKHJldCkgewogCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBwYXJzZSBzZXJ2aWNlIHJlYWR5OiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuOwogCX0KIAorCW1lbXNldCgmYXItPndtaS5zdmNfbWFwLCAwLCBzaXplb2YoYXItPndtaS5zdmNfbWFwKSk7CisJYXRoMTBrX3dtaV9tYXBfc3ZjKGFyLCBhcmcuc2VydmljZV9tYXAsIGFyLT53bWkuc3ZjX21hcCwKKwkJCSAgIGFyZy5zZXJ2aWNlX21hcF9sZW4pOworCiAJYXItPmh3X21pbl90eF9wb3dlciA9IF9fbGUzMl90b19jcHUoYXJnLm1pbl90eF9wb3dlcik7CiAJYXItPmh3X21heF90eF9wb3dlciA9IF9fbGUzMl90b19jcHUoYXJnLm1heF90eF9wb3dlcik7CiAJYXItPmh0X2NhcF9pbmZvID0gX19sZTMyX3RvX2NwdShhcmcuaHRfY2FwKTsKQEAgLTI2MDcsMTMgKzMxNzgsMTQgQEAKIAl9CiAKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwKLQkJICAgIndtaSBldmVudCBzZXJ2aWNlIHJlYWR5IG1pbl90eF9wb3dlciAweCUwOHggbWF4X3R4X3Bvd2VyIDB4JTA4eCBodF9jYXAgMHglMDh4IHZodF9jYXAgMHglMDh4IHN3X3ZlcjAgMHglMDh4IHN3X3ZlcjEgMHglMDh4IHBoeV9jYXBhYiAweCUwOHggbnVtX3JmX2NoYWlucyAweCUwOHggZWVwcm9tX3JkIDB4JTA4eCBudW1fbWVtX3JlcXMgMHglMDh4XG4iLAorCQkgICAid21pIGV2ZW50IHNlcnZpY2UgcmVhZHkgbWluX3R4X3Bvd2VyIDB4JTA4eCBtYXhfdHhfcG93ZXIgMHglMDh4IGh0X2NhcCAweCUwOHggdmh0X2NhcCAweCUwOHggc3dfdmVyMCAweCUwOHggc3dfdmVyMSAweCUwOHggZndfYnVpbGQgMHglMDh4IHBoeV9jYXBhYiAweCUwOHggbnVtX3JmX2NoYWlucyAweCUwOHggZWVwcm9tX3JkIDB4JTA4eCBudW1fbWVtX3JlcXMgMHglMDh4XG4iLAogCQkgICBfX2xlMzJfdG9fY3B1KGFyZy5taW5fdHhfcG93ZXIpLAogCQkgICBfX2xlMzJfdG9fY3B1KGFyZy5tYXhfdHhfcG93ZXIpLAogCQkgICBfX2xlMzJfdG9fY3B1KGFyZy5odF9jYXApLAogCQkgICBfX2xlMzJfdG9fY3B1KGFyZy52aHRfY2FwKSwKIAkJICAgX19sZTMyX3RvX2NwdShhcmcuc3dfdmVyMCksCiAJCSAgIF9fbGUzMl90b19jcHUoYXJnLnN3X3ZlcjEpLAorCQkgICBfX2xlMzJfdG9fY3B1KGFyZy5md19idWlsZCksCiAJCSAgIF9fbGUzMl90b19jcHUoYXJnLnBoeV9jYXBhYiksCiAJCSAgIF9fbGUzMl90b19jcHUoYXJnLm51bV9yZl9jaGFpbnMpLAogCQkgICBfX2xlMzJfdG9fY3B1KGFyZy5lZXByb21fcmQpLApAQCAtMjYyMiwyNyArMzE5NCw1OSBAQAogCWNvbXBsZXRlKCZhci0+d21pLnNlcnZpY2VfcmVhZHkpOwogfQogCi1zdGF0aWMgaW50IGF0aDEwa193bWlfZXZlbnRfcmVhZHkoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGF0aDEwa193bWlfb3BfcHVsbF9yZHlfZXYoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3Qgd21pX3JkeV9ldl9hcmcgKmFyZykKIHsKLQlzdHJ1Y3Qgd21pX3JlYWR5X2V2ZW50ICpldiA9IChzdHJ1Y3Qgd21pX3JlYWR5X2V2ZW50ICopc2tiLT5kYXRhOworCXN0cnVjdCB3bWlfcmVhZHlfZXZlbnQgKmV2ID0gKHZvaWQgKilza2ItPmRhdGE7CiAKLQlpZiAoV0FSTl9PTihza2ItPmxlbiA8IHNpemVvZigqZXYpKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCpldikpCisJCXJldHVybiAtRVBST1RPOwogCi0JZXRoZXJfYWRkcl9jb3B5KGFyLT5tYWNfYWRkciwgZXYtPm1hY19hZGRyLmFkZHIpOworCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpldikpOworCWFyZy0+c3dfdmVyc2lvbiA9IGV2LT5zd192ZXJzaW9uOworCWFyZy0+YWJpX3ZlcnNpb24gPSBldi0+YWJpX3ZlcnNpb247CisJYXJnLT5zdGF0dXMgPSBldi0+c3RhdHVzOworCWFyZy0+bWFjX2FkZHIgPSBldi0+bWFjX2FkZHIuYWRkcjsKKworCXJldHVybiAwOworfQorCitpbnQgYXRoMTBrX3dtaV9ldmVudF9yZWFkeShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgd21pX3JkeV9ldl9hcmcgYXJnID0ge307CisJaW50IHJldDsKKworCXJldCA9IGF0aDEwa193bWlfcHVsbF9yZHkoYXIsIHNrYiwgJmFyZyk7CisJaWYgKHJldCkgeworCQlhdGgxMGtfd2FybihhciwgImZhaWxlZCB0byBwYXJzZSByZWFkeSBldmVudDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQogCiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCi0JCSAgICJ3bWkgZXZlbnQgcmVhZHkgc3dfdmVyc2lvbiAldSBhYmlfdmVyc2lvbiAldSBtYWNfYWRkciAlcE0gc3RhdHVzICVkIHNrYi0+bGVuICVpIGV2LXN6ICV6dVxuIiwKLQkJICAgX19sZTMyX3RvX2NwdShldi0+c3dfdmVyc2lvbiksCi0JCSAgIF9fbGUzMl90b19jcHUoZXYtPmFiaV92ZXJzaW9uKSwKLQkJICAgZXYtPm1hY19hZGRyLmFkZHIsCi0JCSAgIF9fbGUzMl90b19jcHUoZXYtPnN0YXR1cyksIHNrYi0+bGVuLCBzaXplb2YoKmV2KSk7CisJCSAgICJ3bWkgZXZlbnQgcmVhZHkgc3dfdmVyc2lvbiAldSBhYmlfdmVyc2lvbiAldSBtYWNfYWRkciAlcE0gc3RhdHVzICVkXG4iLAorCQkgICBfX2xlMzJfdG9fY3B1KGFyZy5zd192ZXJzaW9uKSwKKwkJICAgX19sZTMyX3RvX2NwdShhcmcuYWJpX3ZlcnNpb24pLAorCQkgICBhcmcubWFjX2FkZHIsCisJCSAgIF9fbGUzMl90b19jcHUoYXJnLnN0YXR1cykpOwogCisJZXRoZXJfYWRkcl9jb3B5KGFyLT5tYWNfYWRkciwgYXJnLm1hY19hZGRyKTsKIAljb21wbGV0ZSgmYXItPndtaS51bmlmaWVkX3JlYWR5KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9tYWluX3Byb2Nlc3Nfcngoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGF0aDEwa193bWlfZXZlbnRfdGVtcGVyYXR1cmUoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJY29uc3Qgc3RydWN0IHdtaV9wZGV2X3RlbXBlcmF0dXJlX2V2ZW50ICpldjsKKworCWV2ID0gKHN0cnVjdCB3bWlfcGRldl90ZW1wZXJhdHVyZV9ldmVudCAqKXNrYi0+ZGF0YTsKKwlpZiAoV0FSTl9PTihza2ItPmxlbiA8IHNpemVvZigqZXYpKSkKKwkJcmV0dXJuIC1FUFJPVE87CisKKwlhdGgxMGtfdGhlcm1hbF9ldmVudF90ZW1wZXJhdHVyZShhciwgX19sZTMyX3RvX2NwdShldi0+dGVtcGVyYXR1cmUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYXRoMTBrX3dtaV9vcF9yeChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgd21pX2NtZF9oZHIgKmNtZF9oZHI7CiAJZW51bSB3bWlfZXZlbnRfaWQgaWQ7CkBAIC0yNzU4LDcgKzMzNjIsNyBAQAogCWRldl9rZnJlZV9za2Ioc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgYXRoMTBrX3dtaV8xMHhfcHJvY2Vzc19yeChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGF0aDEwa193bWlfMTBfMV9vcF9yeChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgd21pX2NtZF9oZHIgKmNtZF9oZHI7CiAJZW51bSB3bWlfMTB4X2V2ZW50X2lkIGlkOwpAQCAtMjg4Miw3ICszNDg2LDcgQEAKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDEwa193bWlfMTBfMl9wcm9jZXNzX3J4KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgYXRoMTBrX3dtaV8xMF8yX29wX3J4KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCB3bWlfY21kX2hkciAqY21kX2hkcjsKIAllbnVtIHdtaV8xMF8yX2V2ZW50X2lkIGlkOwpAQCAtMjk4MSw2ICszNTg1LDkgQEAKIAljYXNlIFdNSV8xMF8yX1JFQURZX0VWRU5USUQ6CiAJCWF0aDEwa193bWlfZXZlbnRfcmVhZHkoYXIsIHNrYik7CiAJCWJyZWFrOworCWNhc2UgV01JXzEwXzJfUERFVl9URU1QRVJBVFVSRV9FVkVOVElEOgorCQlhdGgxMGtfd21pX2V2ZW50X3RlbXBlcmF0dXJlKGFyLCBza2IpOworCQlicmVhazsKIAljYXNlIFdNSV8xMF8yX1JUVF9LRUVQQUxJVkVfRVZFTlRJRDoKIAljYXNlIFdNSV8xMF8yX0dQSU9fSU5QVVRfRVZFTlRJRDoKIAljYXNlIFdNSV8xMF8yX1BFRVJfUkFURUNPREVfTElTVF9FVkVOVElEOgpAQCAtMzAwMSwxNCArMzYwOCwxMSBAQAogCiBzdGF0aWMgdm9pZCBhdGgxMGtfd21pX3Byb2Nlc3Nfcngoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKHRlc3RfYml0KEFUSDEwS19GV19GRUFUVVJFX1dNSV8xMFgsIGFyLT5md19mZWF0dXJlcykpIHsKLQkJaWYgKHRlc3RfYml0KEFUSDEwS19GV19GRUFUVVJFX1dNSV8xMF8yLCBhci0+ZndfZmVhdHVyZXMpKQotCQkJYXRoMTBrX3dtaV8xMF8yX3Byb2Nlc3NfcngoYXIsIHNrYik7Ci0JCWVsc2UKLQkJCWF0aDEwa193bWlfMTB4X3Byb2Nlc3NfcngoYXIsIHNrYik7Ci0JfSBlbHNlIHsKLQkJYXRoMTBrX3dtaV9tYWluX3Byb2Nlc3NfcngoYXIsIHNrYik7Ci0JfQorCWludCByZXQ7CisKKwlyZXQgPSBhdGgxMGtfd21pX3J4KGFyLCBza2IpOworCWlmIChyZXQpCisJCWF0aDEwa193YXJuKGFyLCAiZmFpbGVkIHRvIHByb2Nlc3Mgd21pIHJ4OiAlZFxuIiwgcmV0KTsKIH0KIAogaW50IGF0aDEwa193bWlfY29ubmVjdChzdHJ1Y3QgYXRoMTBrICphcikKQEAgLTMwMzksMTYgKzM2NDMsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhdGgxMGtfd21pX21haW5fcGRldl9zZXRfcmVnZG9tYWluKHN0cnVjdCBhdGgxMGsgKmFyLCB1MTYgcmQsCi0JCQkJCSAgICAgIHUxNiByZDJnLCB1MTYgcmQ1ZywgdTE2IGN0bDJnLAotCQkJCQkgICAgICB1MTYgY3RsNWcpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fcGRldl9zZXRfcmQoc3RydWN0IGF0aDEwayAqYXIsIHUxNiByZCwgdTE2IHJkMmcsIHUxNiByZDVnLAorCQkJICAgICAgdTE2IGN0bDJnLCB1MTYgY3RsNWcsCisJCQkgICAgICBlbnVtIHdtaV9kZnNfcmVnaW9uIGRmc19yZWcpCiB7CiAJc3RydWN0IHdtaV9wZGV2X3NldF9yZWdkb21haW5fY21kICpjbWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKmNtZCkpOwogCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAljbWQgPSAoc3RydWN0IHdtaV9wZGV2X3NldF9yZWdkb21haW5fY21kICopc2tiLT5kYXRhOwogCWNtZC0+cmVnX2RvbWFpbiA9IF9fY3B1X3RvX2xlMzIocmQpOwpAQCAtMzA2MCwyMiArMzY2NSwyMCBAQAogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLAogCQkgICAid21pIHBkZXYgcmVnZG9tYWluIHJkICV4IHJkMmcgJXggcmQ1ZyAleCBjdGwyZyAleCBjdGw1ZyAleFxuIiwKIAkJICAgcmQsIHJkMmcsIHJkNWcsIGN0bDJnLCBjdGw1Zyk7Ci0KLQlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLAotCQkJCSAgIGFyLT53bWkuY21kLT5wZGV2X3NldF9yZWdkb21haW5fY21kaWQpOworCXJldHVybiBza2I7CiB9CiAKLXN0YXRpYyBpbnQgYXRoMTBrX3dtaV8xMHhfcGRldl9zZXRfcmVnZG9tYWluKHN0cnVjdCBhdGgxMGsgKmFyLCB1MTYgcmQsCi0JCQkJCSAgICAgdTE2IHJkMmcsIHUxNiByZDVnLAotCQkJCQkgICAgIHUxNiBjdGwyZywgdTE2IGN0bDVnLAotCQkJCQkgICAgIGVudW0gd21pX2Rmc19yZWdpb24gZGZzX3JlZykKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pXzEweF9vcF9nZW5fcGRldl9zZXRfcmQoc3RydWN0IGF0aDEwayAqYXIsIHUxNiByZCwgdTE2IHJkMmcsIHUxNgorCQkJCSAgcmQ1ZywgdTE2IGN0bDJnLCB1MTYgY3RsNWcsCisJCQkJICBlbnVtIHdtaV9kZnNfcmVnaW9uIGRmc19yZWcpCiB7CiAJc3RydWN0IHdtaV9wZGV2X3NldF9yZWdkb21haW5fY21kXzEweCAqY21kOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCpjbWQpKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJY21kID0gKHN0cnVjdCB3bWlfcGRldl9zZXRfcmVnZG9tYWluX2NtZF8xMHggKilza2ItPmRhdGE7CiAJY21kLT5yZWdfZG9tYWluID0gX19jcHVfdG9fbGUzMihyZCk7CkBAIC0zMDg4LDUwICszNjkxLDM5IEBACiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCiAJCSAgICJ3bWkgcGRldiByZWdkb21haW4gcmQgJXggcmQyZyAleCByZDVnICV4IGN0bDJnICV4IGN0bDVnICV4IGRmc19yZWdpb24gJXhcbiIsCiAJCSAgIHJkLCByZDJnLCByZDVnLCBjdGwyZywgY3RsNWcsIGRmc19yZWcpOwotCi0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwKLQkJCQkgICBhci0+d21pLmNtZC0+cGRldl9zZXRfcmVnZG9tYWluX2NtZGlkKTsKKwlyZXR1cm4gc2tiOwogfQogCi1pbnQgYXRoMTBrX3dtaV9wZGV2X3NldF9yZWdkb21haW4oc3RydWN0IGF0aDEwayAqYXIsIHUxNiByZCwgdTE2IHJkMmcsCi0JCQkJICB1MTYgcmQ1ZywgdTE2IGN0bDJnLCB1MTYgY3RsNWcsCi0JCQkJICBlbnVtIHdtaV9kZnNfcmVnaW9uIGRmc19yZWcpCi17Ci0JaWYgKHRlc3RfYml0KEFUSDEwS19GV19GRUFUVVJFX1dNSV8xMFgsIGFyLT5md19mZWF0dXJlcykpCi0JCXJldHVybiBhdGgxMGtfd21pXzEweF9wZGV2X3NldF9yZWdkb21haW4oYXIsIHJkLCByZDJnLCByZDVnLAotCQkJCQkJCWN0bDJnLCBjdGw1ZywgZGZzX3JlZyk7Ci0JZWxzZQotCQlyZXR1cm4gYXRoMTBrX3dtaV9tYWluX3BkZXZfc2V0X3JlZ2RvbWFpbihhciwgcmQsIHJkMmcsIHJkNWcsCi0JCQkJCQkJIGN0bDJnLCBjdGw1Zyk7Ci19Ci0KLWludCBhdGgxMGtfd21pX3BkZXZfc3VzcGVuZF90YXJnZXQoc3RydWN0IGF0aDEwayAqYXIsIHUzMiBzdXNwZW5kX29wdCkKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX29wX2dlbl9wZGV2X3N1c3BlbmQoc3RydWN0IGF0aDEwayAqYXIsIHUzMiBzdXNwZW5kX29wdCkKIHsKIAlzdHJ1Y3Qgd21pX3BkZXZfc3VzcGVuZF9jbWQgKmNtZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVvZigqY21kKSk7CiAJaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWNtZCA9IChzdHJ1Y3Qgd21pX3BkZXZfc3VzcGVuZF9jbWQgKilza2ItPmRhdGE7CiAJY21kLT5zdXNwZW5kX29wdCA9IF9fY3B1X3RvX2xlMzIoc3VzcGVuZF9vcHQpOwogCi0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnBkZXZfc3VzcGVuZF9jbWRpZCk7CisJcmV0dXJuIHNrYjsKIH0KIAotaW50IGF0aDEwa193bWlfcGRldl9yZXN1bWVfdGFyZ2V0KHN0cnVjdCBhdGgxMGsgKmFyKQorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX3BkZXZfcmVzdW1lKHN0cnVjdCBhdGgxMGsgKmFyKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgMCk7Ci0JaWYgKHNrYiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+cGRldl9yZXN1bWVfY21kaWQpOworCXJldHVybiBza2I7CiB9CiAKLWludCBhdGgxMGtfd21pX3BkZXZfc2V0X3BhcmFtKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgaWQsIHUzMiB2YWx1ZSkKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX29wX2dlbl9wZGV2X3NldF9wYXJhbShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIGlkLCB1MzIgdmFsdWUpCiB7CiAJc3RydWN0IHdtaV9wZGV2X3NldF9wYXJhbV9jbWQgKmNtZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMzEzOSwxMiArMzczMSwxMiBAQAogCWlmIChpZCA9PSBXTUlfUERFVl9QQVJBTV9VTlNVUFBPUlRFRCkgewogCQlhdGgxMGtfd2FybihhciwgInBkZXYgcGFyYW0gJWQgbm90IHN1cHBvcnRlZCBieSBmaXJtd2FyZVxuIiwKIAkJCSAgICBpZCk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApOwogCX0KIAogCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKmNtZCkpOwogCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAljbWQgPSAoc3RydWN0IHdtaV9wZGV2X3NldF9wYXJhbV9jbWQgKilza2ItPmRhdGE7CiAJY21kLT5wYXJhbV9pZCAgICA9IF9fY3B1X3RvX2xlMzIoaWQpOwpAQCAtMzE1MiwxMSArMzc0NCwxMSBAQAogCiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJ3bWkgcGRldiBzZXQgcGFyYW0gJWQgdmFsdWUgJWRcbiIsCiAJCSAgIGlkLCB2YWx1ZSk7Ci0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnBkZXZfc2V0X3BhcmFtX2NtZGlkKTsKKwlyZXR1cm4gc2tiOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfd21pX3B1dF9ob3N0X21lbV9jaHVua3Moc3RydWN0IGF0aDEwayAqYXIsCi0JCQkJCSAgIHN0cnVjdCB3bWlfaG9zdF9tZW1fY2h1bmtzICpjaHVua3MpCit2b2lkIGF0aDEwa193bWlfcHV0X2hvc3RfbWVtX2NodW5rcyhzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkgICAgc3RydWN0IHdtaV9ob3N0X21lbV9jaHVua3MgKmNodW5rcykKIHsKIAlzdHJ1Y3QgaG9zdF9tZW1vcnlfY2h1bmsgKmNodW5rOwogCWludCBpOwpAQCAtMzE3Nyw3ICszNzY5LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgYXRoMTBrX3dtaV9tYWluX2NtZF9pbml0KHN0cnVjdCBhdGgxMGsgKmFyKQorc3RhdGljIHN0cnVjdCBza19idWZmICphdGgxMGtfd21pX29wX2dlbl9pbml0KHN0cnVjdCBhdGgxMGsgKmFyKQogewogCXN0cnVjdCB3bWlfaW5pdF9jbWQgKmNtZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOwpAQCAtMzI0MCw3ICszODMyLDcgQEAKIAogCWJ1ZiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBsZW4pOwogCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAljbWQgPSAoc3RydWN0IHdtaV9pbml0X2NtZCAqKWJ1Zi0+ZGF0YTsKIApAQCAtMzI0OCwxMCArMzg0MCwxMCBAQAogCWF0aDEwa193bWlfcHV0X2hvc3RfbWVtX2NodW5rcyhhciwgJmNtZC0+bWVtX2NodW5rcyk7CiAKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSBpbml0XG4iKTsKLQlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgYnVmLCBhci0+d21pLmNtZC0+aW5pdF9jbWRpZCk7CisJcmV0dXJuIGJ1ZjsKIH0KIAotc3RhdGljIGludCBhdGgxMGtfd21pXzEweF9jbWRfaW5pdChzdHJ1Y3QgYXRoMTBrICphcikKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYXRoMTBrX3dtaV8xMF8xX29wX2dlbl9pbml0KHN0cnVjdCBhdGgxMGsgKmFyKQogewogCXN0cnVjdCB3bWlfaW5pdF9jbWRfMTB4ICpjbWQ7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKQEAgLTMzMDYsNyArMzg5OCw3IEBACiAKIAlidWYgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgbGVuKTsKIAlpZiAoIWJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJY21kID0gKHN0cnVjdCB3bWlfaW5pdF9jbWRfMTB4ICopYnVmLT5kYXRhOwogCkBAIC0zMzE0LDE1ICszOTA2LDE1IEBACiAJYXRoMTBrX3dtaV9wdXRfaG9zdF9tZW1fY2h1bmtzKGFyLCAmY21kLT5tZW1fY2h1bmtzKTsKIAogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIGluaXQgMTB4XG4iKTsKLQlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgYnVmLCBhci0+d21pLmNtZC0+aW5pdF9jbWRpZCk7CisJcmV0dXJuIGJ1ZjsKIH0KIAotc3RhdGljIGludCBhdGgxMGtfd21pXzEwXzJfY21kX2luaXQoc3RydWN0IGF0aDEwayAqYXIpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmF0aDEwa193bWlfMTBfMl9vcF9nZW5faW5pdChzdHJ1Y3QgYXRoMTBrICphcikKIHsKIAlzdHJ1Y3Qgd21pX2luaXRfY21kXzEwXzIgKmNtZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOwogCXN0cnVjdCB3bWlfcmVzb3VyY2VfY29uZmlnXzEweCBjb25maWcgPSB7fTsKLQl1MzIgbGVuLCB2YWw7CisJdTMyIGxlbiwgdmFsLCBmZWF0dXJlczsKIAogCWNvbmZpZy5udW1fdmRldnMgPSBfX2NwdV90b19sZTMyKFRBUkdFVF8xMFhfTlVNX1ZERVZTKTsKIAljb25maWcubnVtX3BlZXJzID0gX19jcHVfdG9fbGUzMihUQVJHRVRfMTBYX05VTV9QRUVSUyk7CkBAIC0zMzU2LDcgKzM5NDgsNyBAQAogCWNvbmZpZy5tY2FzdDJ1Y2FzdF9tb2RlID0gX19jcHVfdG9fbGUzMihUQVJHRVRfMTBYX01DQVNUMlVDQVNUX01PREUpOwogCWNvbmZpZy50eF9kYmdfbG9nX3NpemUgPSBfX2NwdV90b19sZTMyKFRBUkdFVF8xMFhfVFhfREJHX0xPR19TSVpFKTsKIAljb25maWcubnVtX3dkc19lbnRyaWVzID0gX19jcHVfdG9fbGUzMihUQVJHRVRfMTBYX05VTV9XRFNfRU5UUklFUyk7Ci0JY29uZmlnLmRtYV9idXJzdF9zaXplID0gX19jcHVfdG9fbGUzMihUQVJHRVRfMTBYX0RNQV9CVVJTVF9TSVpFKTsKKwljb25maWcuZG1hX2J1cnN0X3NpemUgPSBfX2NwdV90b19sZTMyKFRBUkdFVF8xMF8yX0RNQV9CVVJTVF9TSVpFKTsKIAljb25maWcubWFjX2FnZ3JfZGVsaW0gPSBfX2NwdV90b19sZTMyKFRBUkdFVF8xMFhfTUFDX0FHR1JfREVMSU0pOwogCiAJdmFsID0gVEFSR0VUXzEwWF9SWF9TS0lQX0RFRlJBR19USU1FT1VUX0RVUF9ERVRFQ1RJT05fQ0hFQ0s7CkBAIC0zMzcyLDM0ICszOTY0LDIxIEBACiAKIAlidWYgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgbGVuKTsKIAlpZiAoIWJ1ZikKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJY21kID0gKHN0cnVjdCB3bWlfaW5pdF9jbWRfMTBfMiAqKWJ1Zi0+ZGF0YTsKIAorCWZlYXR1cmVzID0gV01JXzEwXzJfUlhfQkFUQ0hfTU9ERTsKKwljbWQtPnJlc291cmNlX2NvbmZpZy5mZWF0dXJlX21hc2sgPSBfX2NwdV90b19sZTMyKGZlYXR1cmVzKTsKKwogCW1lbWNweSgmY21kLT5yZXNvdXJjZV9jb25maWcuY29tbW9uLCAmY29uZmlnLCBzaXplb2YoY29uZmlnKSk7CiAJYXRoMTBrX3dtaV9wdXRfaG9zdF9tZW1fY2h1bmtzKGFyLCAmY21kLT5tZW1fY2h1bmtzKTsKIAogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIGluaXQgMTAuMlxuIik7Ci0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIGJ1ZiwgYXItPndtaS5jbWQtPmluaXRfY21kaWQpOworCXJldHVybiBidWY7CiB9CiAKLWludCBhdGgxMGtfd21pX2NtZF9pbml0KHN0cnVjdCBhdGgxMGsgKmFyKQotewotCWludCByZXQ7Ci0KLQlpZiAodGVzdF9iaXQoQVRIMTBLX0ZXX0ZFQVRVUkVfV01JXzEwWCwgYXItPmZ3X2ZlYXR1cmVzKSkgewotCQlpZiAodGVzdF9iaXQoQVRIMTBLX0ZXX0ZFQVRVUkVfV01JXzEwXzIsIGFyLT5md19mZWF0dXJlcykpCi0JCQlyZXQgPSBhdGgxMGtfd21pXzEwXzJfY21kX2luaXQoYXIpOwotCQllbHNlCi0JCQlyZXQgPSBhdGgxMGtfd21pXzEweF9jbWRfaW5pdChhcik7Ci0JfSBlbHNlIHsKLQkJcmV0ID0gYXRoMTBrX3dtaV9tYWluX2NtZF9pbml0KGFyKTsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGF0aDEwa193bWlfc3RhcnRfc2Nhbl92ZXJpZnkoY29uc3Qgc3RydWN0IHdtaV9zdGFydF9zY2FuX2FyZyAqYXJnKQoraW50IGF0aDEwa193bWlfc3RhcnRfc2Nhbl92ZXJpZnkoY29uc3Qgc3RydWN0IHdtaV9zdGFydF9zY2FuX2FyZyAqYXJnKQogewogCWlmIChhcmctPmllX2xlbiAmJiAhYXJnLT5pZSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNDUwLDkgKzQwMjksOCBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyB2b2lkCi1hdGgxMGtfd21pX3B1dF9zdGFydF9zY2FuX2NvbW1vbihzdHJ1Y3Qgd21pX3N0YXJ0X3NjYW5fY29tbW9uICpjbW4sCi0JCQkJIGNvbnN0IHN0cnVjdCB3bWlfc3RhcnRfc2Nhbl9hcmcgKmFyZykKK3ZvaWQgYXRoMTBrX3dtaV9wdXRfc3RhcnRfc2Nhbl9jb21tb24oc3RydWN0IHdtaV9zdGFydF9zY2FuX2NvbW1vbiAqY21uLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCB3bWlfc3RhcnRfc2Nhbl9hcmcgKmFyZykKIHsKIAl1MzIgc2Nhbl9pZDsKIAl1MzIgc2Nhbl9yZXFfaWQ7CkBAIC0zNTQ2LDQ2ICs0MTI0LDYwIEBACiAJfQogfQogCi1pbnQgYXRoMTBrX3dtaV9zdGFydF9zY2FuKHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJICBjb25zdCBzdHJ1Y3Qgd21pX3N0YXJ0X3NjYW5fYXJnICphcmcpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fc3RhcnRfc2NhbihzdHJ1Y3QgYXRoMTBrICphciwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHdtaV9zdGFydF9zY2FuX2FyZyAqYXJnKQogeworCXN0cnVjdCB3bWlfc3RhcnRfc2Nhbl9jbWQgKmNtZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNpemVfdCBsZW47CiAJaW50IHJldDsKIAogCXJldCA9IGF0aDEwa193bWlfc3RhcnRfc2Nhbl92ZXJpZnkoYXJnKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCi0JaWYgKHRlc3RfYml0KEFUSDEwS19GV19GRUFUVVJFX1dNSV8xMFgsIGFyLT5md19mZWF0dXJlcykpCi0JCWxlbiA9IHNpemVvZihzdHJ1Y3Qgd21pXzEweF9zdGFydF9zY2FuX2NtZCkgKwotCQkgICAgICBhdGgxMGtfd21pX3N0YXJ0X3NjYW5fdGx2c19sZW4oYXJnKTsKLQllbHNlCi0JCWxlbiA9IHNpemVvZihzdHJ1Y3Qgd21pX3N0YXJ0X3NjYW5fY21kKSArCi0JCSAgICAgIGF0aDEwa193bWlfc3RhcnRfc2Nhbl90bHZzX2xlbihhcmcpOwotCisJbGVuID0gc2l6ZW9mKCpjbWQpICsgYXRoMTBrX3dtaV9zdGFydF9zY2FuX3RsdnNfbGVuKGFyZyk7CiAJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIGxlbik7CiAJaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWlmICh0ZXN0X2JpdChBVEgxMEtfRldfRkVBVFVSRV9XTUlfMTBYLCBhci0+ZndfZmVhdHVyZXMpKSB7Ci0JCXN0cnVjdCB3bWlfMTB4X3N0YXJ0X3NjYW5fY21kICpjbWQ7CisJY21kID0gKHN0cnVjdCB3bWlfc3RhcnRfc2Nhbl9jbWQgKilza2ItPmRhdGE7CiAKLQkJY21kID0gKHN0cnVjdCB3bWlfMTB4X3N0YXJ0X3NjYW5fY21kICopc2tiLT5kYXRhOwotCQlhdGgxMGtfd21pX3B1dF9zdGFydF9zY2FuX2NvbW1vbigmY21kLT5jb21tb24sIGFyZyk7Ci0JCWF0aDEwa193bWlfcHV0X3N0YXJ0X3NjYW5fdGx2cygmY21kLT50bHZzLCBhcmcpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCB3bWlfc3RhcnRfc2Nhbl9jbWQgKmNtZDsKKwlhdGgxMGtfd21pX3B1dF9zdGFydF9zY2FuX2NvbW1vbigmY21kLT5jb21tb24sIGFyZyk7CisJYXRoMTBrX3dtaV9wdXRfc3RhcnRfc2Nhbl90bHZzKCZjbWQtPnRsdnMsIGFyZyk7CiAKLQkJY21kID0gKHN0cnVjdCB3bWlfc3RhcnRfc2Nhbl9jbWQgKilza2ItPmRhdGE7Ci0JCWNtZC0+YnVyc3RfZHVyYXRpb25fbXMgPSBfX2NwdV90b19sZTMyKDApOwotCi0JCWF0aDEwa193bWlfcHV0X3N0YXJ0X3NjYW5fY29tbW9uKCZjbWQtPmNvbW1vbiwgYXJnKTsKLQkJYXRoMTBrX3dtaV9wdXRfc3RhcnRfc2Nhbl90bHZzKCZjbWQtPnRsdnMsIGFyZyk7Ci0JfQorCWNtZC0+YnVyc3RfZHVyYXRpb25fbXMgPSBfX2NwdV90b19sZTMyKDApOwogCiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJ3bWkgc3RhcnQgc2NhblxuIik7Ci0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnN0YXJ0X3NjYW5fY21kaWQpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pXzEweF9vcF9nZW5fc3RhcnRfc2NhbihzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkgY29uc3Qgc3RydWN0IHdtaV9zdGFydF9zY2FuX2FyZyAqYXJnKQoreworCXN0cnVjdCB3bWlfMTB4X3N0YXJ0X3NjYW5fY21kICpjbWQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzaXplX3QgbGVuOworCWludCByZXQ7CisKKwlyZXQgPSBhdGgxMGtfd21pX3N0YXJ0X3NjYW5fdmVyaWZ5KGFyZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKworCWxlbiA9IHNpemVvZigqY21kKSArIGF0aDEwa193bWlfc3RhcnRfc2Nhbl90bHZzX2xlbihhcmcpOworCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBsZW4pOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWNtZCA9IChzdHJ1Y3Qgd21pXzEweF9zdGFydF9zY2FuX2NtZCAqKXNrYi0+ZGF0YTsKKworCWF0aDEwa193bWlfcHV0X3N0YXJ0X3NjYW5fY29tbW9uKCZjbWQtPmNvbW1vbiwgYXJnKTsKKwlhdGgxMGtfd21pX3B1dF9zdGFydF9zY2FuX3RsdnMoJmNtZC0+dGx2cywgYXJnKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIDEweCBzdGFydCBzY2FuXG4iKTsKKwlyZXR1cm4gc2tiOwogfQogCiB2b2lkIGF0aDEwa193bWlfc3RhcnRfc2Nhbl9pbml0KHN0cnVjdCBhdGgxMGsgKmFyLApAQCAtMzYxNCw3ICs0MjA2LDkgQEAKIAlhcmctPmJzc2lkc1swXS5ic3NpZCA9ICJceEZGXHhGRlx4RkZceEZGXHhGRlx4RkYiOwogfQogCi1pbnQgYXRoMTBrX3dtaV9zdG9wX3NjYW4oc3RydWN0IGF0aDEwayAqYXIsIGNvbnN0IHN0cnVjdCB3bWlfc3RvcF9zY2FuX2FyZyAqYXJnKQorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX3N0b3Bfc2NhbihzdHJ1Y3QgYXRoMTBrICphciwKKwkJCSAgICBjb25zdCBzdHJ1Y3Qgd21pX3N0b3Bfc2Nhbl9hcmcgKmFyZykKIHsKIAlzdHJ1Y3Qgd21pX3N0b3Bfc2Nhbl9jbWQgKmNtZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMzYyMiwxMyArNDIxNiwxMyBAQAogCXUzMiByZXFfaWQ7CiAKIAlpZiAoYXJnLT5yZXFfaWQgPiAweEZGRikKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCWlmIChhcmctPnJlcV90eXBlID09IFdNSV9TQ0FOX1NUT1BfT05FICYmIGFyZy0+dS5zY2FuX2lkID4gMHhGRkYpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAogCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKmNtZCkpOwogCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlzY2FuX2lkID0gYXJnLT51LnNjYW5faWQ7CiAJc2Nhbl9pZCB8PSBXTUlfSE9TVF9TQ0FOX1JFUV9JRF9QUkVGSVg7CkBAIC0zNjQ1LDIwICs0MjM5LDIxIEBACiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCiAJCSAgICJ3bWkgc3RvcCBzY2FuIHJlcWlkICVkIHJlcV90eXBlICVkIHZkZXYvc2Nhbl9pZCAlZFxuIiwKIAkJICAgYXJnLT5yZXFfaWQsIGFyZy0+cmVxX3R5cGUsIGFyZy0+dS5zY2FuX2lkKTsKLQlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+c3RvcF9zY2FuX2NtZGlkKTsKKwlyZXR1cm4gc2tiOwogfQogCi1pbnQgYXRoMTBrX3dtaV92ZGV2X2NyZWF0ZShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCi0JCQkgICBlbnVtIHdtaV92ZGV2X3R5cGUgdHlwZSwKLQkJCSAgIGVudW0gd21pX3ZkZXZfc3VidHlwZSBzdWJ0eXBlLAotCQkJICAgY29uc3QgdTggbWFjYWRkcltFVEhfQUxFTl0pCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9jcmVhdGUoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJICAgICAgZW51bSB3bWlfdmRldl90eXBlIHR5cGUsCisJCQkgICAgICBlbnVtIHdtaV92ZGV2X3N1YnR5cGUgc3VidHlwZSwKKwkJCSAgICAgIGNvbnN0IHU4IG1hY2FkZHJbRVRIX0FMRU5dKQogewogCXN0cnVjdCB3bWlfdmRldl9jcmVhdGVfY21kICpjbWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKmNtZCkpOwogCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAljbWQgPSAoc3RydWN0IHdtaV92ZGV2X2NyZWF0ZV9jbWQgKilza2ItPmRhdGE7CiAJY21kLT52ZGV2X2lkICAgICAgPSBfX2NwdV90b19sZTMyKHZkZXZfaWQpOwpAQCAtMzY2OSw1OCArNDI2NCw1MiBAQAogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLAogCQkgICAiV01JIHZkZXYgY3JlYXRlOiBpZCAlZCB0eXBlICVkIHN1YnR5cGUgJWQgbWFjYWRkciAlcE1cbiIsCiAJCSAgIHZkZXZfaWQsIHR5cGUsIHN1YnR5cGUsIG1hY2FkZHIpOwotCi0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnZkZXZfY3JlYXRlX2NtZGlkKTsKKwlyZXR1cm4gc2tiOwogfQogCi1pbnQgYXRoMTBrX3dtaV92ZGV2X2RlbGV0ZShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9kZWxldGUoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkKQogewogCXN0cnVjdCB3bWlfdmRldl9kZWxldGVfY21kICpjbWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKmNtZCkpOwogCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAljbWQgPSAoc3RydWN0IHdtaV92ZGV2X2RlbGV0ZV9jbWQgKilza2ItPmRhdGE7CiAJY21kLT52ZGV2X2lkID0gX19jcHVfdG9fbGUzMih2ZGV2X2lkKTsKIAogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLAogCQkgICAiV01JIHZkZXYgZGVsZXRlIGlkICVkXG4iLCB2ZGV2X2lkKTsKLQotCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsIGFyLT53bWkuY21kLT52ZGV2X2RlbGV0ZV9jbWRpZCk7CisJcmV0dXJuIHNrYjsKIH0KIAotc3RhdGljIGludAotYXRoMTBrX3dtaV92ZGV2X3N0YXJ0X3Jlc3RhcnQoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3Qgd21pX3ZkZXZfc3RhcnRfcmVxdWVzdF9hcmcgKmFyZywKLQkJCSAgICAgIHUzMiBjbWRfaWQpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9zdGFydChzdHJ1Y3QgYXRoMTBrICphciwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHdtaV92ZGV2X3N0YXJ0X3JlcXVlc3RfYXJnICphcmcsCisJCQkgICAgIGJvb2wgcmVzdGFydCkKIHsKIAlzdHJ1Y3Qgd21pX3ZkZXZfc3RhcnRfcmVxdWVzdF9jbWQgKmNtZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWNvbnN0IGNoYXIgKmNtZG5hbWU7CiAJdTMyIGZsYWdzID0gMDsKIAotCWlmIChjbWRfaWQgIT0gYXItPndtaS5jbWQtPnZkZXZfc3RhcnRfcmVxdWVzdF9jbWRpZCAmJgotCSAgICBjbWRfaWQgIT0gYXItPndtaS5jbWQtPnZkZXZfcmVzdGFydF9yZXF1ZXN0X2NtZGlkKQotCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoV0FSTl9PTihhcmctPnNzaWQgJiYgYXJnLT5zc2lkX2xlbiA9PSAwKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCWlmIChXQVJOX09OKGFyZy0+aGlkZGVuX3NzaWQgJiYgIWFyZy0+c3NpZCkpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAlpZiAoV0FSTl9PTihhcmctPnNzaWRfbGVuID4gc2l6ZW9mKGNtZC0+c3NpZC5zc2lkKSkpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAotCWlmIChjbWRfaWQgPT0gYXItPndtaS5jbWQtPnZkZXZfc3RhcnRfcmVxdWVzdF9jbWRpZCkKLQkJY21kbmFtZSA9ICJzdGFydCI7Ci0JZWxzZSBpZiAoY21kX2lkID09IGFyLT53bWkuY21kLT52ZGV2X3Jlc3RhcnRfcmVxdWVzdF9jbWRpZCkKKwlpZiAocmVzdGFydCkKIAkJY21kbmFtZSA9ICJyZXN0YXJ0IjsKIAllbHNlCi0JCXJldHVybiAtRUlOVkFMOyAvKiBzaG91bGQgbm90IGhhcHBlbiwgd2UgYWxyZWFkeSBjaGVjayBjbWRfaWQgKi8KKwkJY21kbmFtZSA9ICJzdGFydCI7CiAKIAlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCpjbWQpKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJaWYgKGFyZy0+aGlkZGVuX3NzaWQpCiAJCWZsYWdzIHw9IFdNSV9WREVWX1NUQVJUX0hJRERFTl9TU0lEOwpAQCAtMzc0OSw1MCArNDMzOCwzNiBAQAogCQkgICBmbGFncywgYXJnLT5jaGFubmVsLmZyZXEsIGFyZy0+Y2hhbm5lbC5tb2RlLAogCQkgICBjbWQtPmNoYW4uZmxhZ3MsIGFyZy0+Y2hhbm5lbC5tYXhfcG93ZXIpOwogCi0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgY21kX2lkKTsKKwlyZXR1cm4gc2tiOwogfQogCi1pbnQgYXRoMTBrX3dtaV92ZGV2X3N0YXJ0KHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJICBjb25zdCBzdHJ1Y3Qgd21pX3ZkZXZfc3RhcnRfcmVxdWVzdF9hcmcgKmFyZykKLXsKLQl1MzIgY21kX2lkID0gYXItPndtaS5jbWQtPnZkZXZfc3RhcnRfcmVxdWVzdF9jbWRpZDsKLQotCXJldHVybiBhdGgxMGtfd21pX3ZkZXZfc3RhcnRfcmVzdGFydChhciwgYXJnLCBjbWRfaWQpOwotfQotCi1pbnQgYXRoMTBrX3dtaV92ZGV2X3Jlc3RhcnQoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkgICAgY29uc3Qgc3RydWN0IHdtaV92ZGV2X3N0YXJ0X3JlcXVlc3RfYXJnICphcmcpCi17Ci0JdTMyIGNtZF9pZCA9IGFyLT53bWkuY21kLT52ZGV2X3Jlc3RhcnRfcmVxdWVzdF9jbWRpZDsKLQotCXJldHVybiBhdGgxMGtfd21pX3ZkZXZfc3RhcnRfcmVzdGFydChhciwgYXJnLCBjbWRfaWQpOwotfQotCi1pbnQgYXRoMTBrX3dtaV92ZGV2X3N0b3Aoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkKQorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX3ZkZXZfc3RvcChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQpCiB7CiAJc3RydWN0IHdtaV92ZGV2X3N0b3BfY21kICpjbWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKmNtZCkpOwogCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAljbWQgPSAoc3RydWN0IHdtaV92ZGV2X3N0b3BfY21kICopc2tiLT5kYXRhOwogCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CiAKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSB2ZGV2IHN0b3AgaWQgMHgleFxuIiwgdmRldl9pZCk7Ci0KLQlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+dmRldl9zdG9wX2NtZGlkKTsKKwlyZXR1cm4gc2tiOwogfQogCi1pbnQgYXRoMTBrX3dtaV92ZGV2X3VwKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwgdTMyIGFpZCwgY29uc3QgdTggKmJzc2lkKQorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX3ZkZXZfdXAoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLCB1MzIgYWlkLAorCQkJICBjb25zdCB1OCAqYnNzaWQpCiB7CiAJc3RydWN0IHdtaV92ZGV2X3VwX2NtZCAqY21kOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCpjbWQpKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJY21kID0gKHN0cnVjdCB3bWlfdmRldl91cF9jbWQgKilza2ItPmRhdGE7CiAJY21kLT52ZGV2X2lkICAgICAgID0gX19jcHVfdG9fbGUzMih2ZGV2X2lkKTsKQEAgLTM4MDIsMzAgKzQzNzcsMzAgQEAKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwKIAkJICAgIndtaSBtZ210IHZkZXYgdXAgaWQgMHgleCBhc3NvYyBpZCAlZCBic3NpZCAlcE1cbiIsCiAJCSAgIHZkZXZfaWQsIGFpZCwgYnNzaWQpOwotCi0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnZkZXZfdXBfY21kaWQpOworCXJldHVybiBza2I7CiB9CiAKLWludCBhdGgxMGtfd21pX3ZkZXZfZG93bihzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9kb3duKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCkKIHsKIAlzdHJ1Y3Qgd21pX3ZkZXZfZG93bl9jbWQgKmNtZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVvZigqY21kKSk7CiAJaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWNtZCA9IChzdHJ1Y3Qgd21pX3ZkZXZfZG93bl9jbWQgKilza2ItPmRhdGE7CiAJY21kLT52ZGV2X2lkID0gX19jcHVfdG9fbGUzMih2ZGV2X2lkKTsKIAogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLAogCQkgICAid21pIG1nbXQgdmRldiBkb3duIGlkIDB4JXhcbiIsIHZkZXZfaWQpOwotCi0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnZkZXZfZG93bl9jbWRpZCk7CisJcmV0dXJuIHNrYjsKIH0KIAotaW50IGF0aDEwa193bWlfdmRldl9zZXRfcGFyYW0oc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAotCQkJICAgICAgdTMyIHBhcmFtX2lkLCB1MzIgcGFyYW1fdmFsdWUpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9zZXRfcGFyYW0oc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJCSB1MzIgcGFyYW1faWQsIHUzMiBwYXJhbV92YWx1ZSkKIHsKIAlzdHJ1Y3Qgd21pX3ZkZXZfc2V0X3BhcmFtX2NtZCAqY21kOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0zODM0LDEyICs0NDA5LDEyIEBACiAJCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLAogCQkJICAgInZkZXYgcGFyYW0gJWQgbm90IHN1cHBvcnRlZCBieSBmaXJtd2FyZVxuIiwKIAkJCSAgICBwYXJhbV9pZCk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApOwogCX0KIAogCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKmNtZCkpOwogCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAljbWQgPSAoc3RydWN0IHdtaV92ZGV2X3NldF9wYXJhbV9jbWQgKilza2ItPmRhdGE7CiAJY21kLT52ZGV2X2lkICAgICA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CkBAIC0zODQ5LDI0ICs0NDI0LDI0IEBACiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCiAJCSAgICJ3bWkgdmRldiBpZCAweCV4IHNldCBwYXJhbSAlZCB2YWx1ZSAlZFxuIiwKIAkJICAgdmRldl9pZCwgcGFyYW1faWQsIHBhcmFtX3ZhbHVlKTsKLQotCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsIGFyLT53bWkuY21kLT52ZGV2X3NldF9wYXJhbV9jbWRpZCk7CisJcmV0dXJuIHNrYjsKIH0KIAotaW50IGF0aDEwa193bWlfdmRldl9pbnN0YWxsX2tleShzdHJ1Y3QgYXRoMTBrICphciwKLQkJCQljb25zdCBzdHJ1Y3Qgd21pX3ZkZXZfaW5zdGFsbF9rZXlfYXJnICphcmcpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9pbnN0YWxsX2tleShzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgd21pX3ZkZXZfaW5zdGFsbF9rZXlfYXJnICphcmcpCiB7CiAJc3RydWN0IHdtaV92ZGV2X2luc3RhbGxfa2V5X2NtZCAqY21kOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlpZiAoYXJnLT5rZXlfY2lwaGVyID09IFdNSV9DSVBIRVJfTk9ORSAmJiBhcmctPmtleV9kYXRhICE9IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAlpZiAoYXJnLT5rZXlfY2lwaGVyICE9IFdNSV9DSVBIRVJfTk9ORSAmJiBhcmctPmtleV9kYXRhID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAogCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKmNtZCkgKyBhcmctPmtleV9sZW4pOwogCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAljbWQgPSAoc3RydWN0IHdtaV92ZGV2X2luc3RhbGxfa2V5X2NtZCAqKXNrYi0+ZGF0YTsKIAljbWQtPnZkZXZfaWQgICAgICAgPSBfX2NwdV90b19sZTMyKGFyZy0+dmRldl9pZCk7CkBAIC0zODg1LDIwICs0NDYwLDE5IEBACiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCiAJCSAgICJ3bWkgdmRldiBpbnN0YWxsIGtleSBpZHggJWQgY2lwaGVyICVkIGxlbiAlZFxuIiwKIAkJICAgYXJnLT5rZXlfaWR4LCBhcmctPmtleV9jaXBoZXIsIGFyZy0+a2V5X2xlbik7Ci0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwKLQkJCQkgICBhci0+d21pLmNtZC0+dmRldl9pbnN0YWxsX2tleV9jbWRpZCk7CisJcmV0dXJuIHNrYjsKIH0KIAotaW50IGF0aDEwa193bWlfdmRldl9zcGVjdHJhbF9jb25mKHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJCSAgY29uc3Qgc3RydWN0IHdtaV92ZGV2X3NwZWN0cmFsX2NvbmZfYXJnICphcmcpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9zcGVjdHJhbF9jb25mKHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHdtaV92ZGV2X3NwZWN0cmFsX2NvbmZfYXJnICphcmcpCiB7CiAJc3RydWN0IHdtaV92ZGV2X3NwZWN0cmFsX2NvbmZfY21kICpjbWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1MzIgY21kaWQ7CiAKIAlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCpjbWQpKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJY21kID0gKHN0cnVjdCB3bWlfdmRldl9zcGVjdHJhbF9jb25mX2NtZCAqKXNrYi0+ZGF0YTsKIAljbWQtPnZkZXZfaWQgPSBfX2NwdV90b19sZTMyKGFyZy0+dmRldl9pZCk7CkBAIC0zOTIxLDM5ICs0NDk1LDM4IEBACiAJY21kLT5zY2FuX2RibV9hZGogPSBfX2NwdV90b19sZTMyKGFyZy0+c2Nhbl9kYm1fYWRqKTsKIAljbWQtPnNjYW5fY2huX21hc2sgPSBfX2NwdV90b19sZTMyKGFyZy0+c2Nhbl9jaG5fbWFzayk7CiAKLQljbWRpZCA9IGFyLT53bWkuY21kLT52ZGV2X3NwZWN0cmFsX3NjYW5fY29uZmlndXJlX2NtZGlkOwotCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsIGNtZGlkKTsKKwlyZXR1cm4gc2tiOwogfQogCi1pbnQgYXRoMTBrX3dtaV92ZGV2X3NwZWN0cmFsX2VuYWJsZShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsIHUzMiB0cmlnZ2VyLAotCQkJCSAgICB1MzIgZW5hYmxlKQorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX3ZkZXZfc3BlY3RyYWxfZW5hYmxlKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCQkgICAgICAgdTMyIHRyaWdnZXIsIHUzMiBlbmFibGUpCiB7CiAJc3RydWN0IHdtaV92ZGV2X3NwZWN0cmFsX2VuYWJsZV9jbWQgKmNtZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXUzMiBjbWRpZDsKIAogCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKmNtZCkpOwogCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAljbWQgPSAoc3RydWN0IHdtaV92ZGV2X3NwZWN0cmFsX2VuYWJsZV9jbWQgKilza2ItPmRhdGE7CiAJY21kLT52ZGV2X2lkID0gX19jcHVfdG9fbGUzMih2ZGV2X2lkKTsKIAljbWQtPnRyaWdnZXJfY21kID0gX19jcHVfdG9fbGUzMih0cmlnZ2VyKTsKIAljbWQtPmVuYWJsZV9jbWQgPSBfX2NwdV90b19sZTMyKGVuYWJsZSk7CiAKLQljbWRpZCA9IGFyLT53bWkuY21kLT52ZGV2X3NwZWN0cmFsX3NjYW5fZW5hYmxlX2NtZGlkOwotCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsIGNtZGlkKTsKKwlyZXR1cm4gc2tiOwogfQogCi1pbnQgYXRoMTBrX3dtaV9wZWVyX2NyZWF0ZShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCi0JCQkgICBjb25zdCB1OCBwZWVyX2FkZHJbRVRIX0FMRU5dKQorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX3BlZXJfY3JlYXRlKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCSAgICAgIGNvbnN0IHU4IHBlZXJfYWRkcltFVEhfQUxFTl0pCiB7CiAJc3RydWN0IHdtaV9wZWVyX2NyZWF0ZV9jbWQgKmNtZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVvZigqY21kKSk7CiAJaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWNtZCA9IChzdHJ1Y3Qgd21pX3BlZXJfY3JlYXRlX2NtZCAqKXNrYi0+ZGF0YTsKIAljbWQtPnZkZXZfaWQgPSBfX2NwdV90b19sZTMyKHZkZXZfaWQpOwpAQCAtMzk2MiwxOCArNDUzNSwxOSBAQAogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLAogCQkgICAid21pIHBlZXIgY3JlYXRlIHZkZXZfaWQgJWQgcGVlcl9hZGRyICVwTVxuIiwKIAkJICAgdmRldl9pZCwgcGVlcl9hZGRyKTsKLQlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+cGVlcl9jcmVhdGVfY21kaWQpOworCXJldHVybiBza2I7CiB9CiAKLWludCBhdGgxMGtfd21pX3BlZXJfZGVsZXRlKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKLQkJCSAgIGNvbnN0IHU4IHBlZXJfYWRkcltFVEhfQUxFTl0pCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fcGVlcl9kZWxldGUoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJICAgICAgY29uc3QgdTggcGVlcl9hZGRyW0VUSF9BTEVOXSkKIHsKIAlzdHJ1Y3Qgd21pX3BlZXJfZGVsZXRlX2NtZCAqY21kOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCpjbWQpKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJY21kID0gKHN0cnVjdCB3bWlfcGVlcl9kZWxldGVfY21kICopc2tiLT5kYXRhOwogCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CkBAIC0zOTgyLDE4ICs0NTU2LDE5IEBACiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCiAJCSAgICJ3bWkgcGVlciBkZWxldGUgdmRldl9pZCAlZCBwZWVyX2FkZHIgJXBNXG4iLAogCQkgICB2ZGV2X2lkLCBwZWVyX2FkZHIpOwotCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsIGFyLT53bWkuY21kLT5wZWVyX2RlbGV0ZV9jbWRpZCk7CisJcmV0dXJuIHNrYjsKIH0KIAotaW50IGF0aDEwa193bWlfcGVlcl9mbHVzaChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCi0JCQkgIGNvbnN0IHU4IHBlZXJfYWRkcltFVEhfQUxFTl0sIHUzMiB0aWRfYml0bWFwKQorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX3BlZXJfZmx1c2goc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJICAgICBjb25zdCB1OCBwZWVyX2FkZHJbRVRIX0FMRU5dLCB1MzIgdGlkX2JpdG1hcCkKIHsKIAlzdHJ1Y3Qgd21pX3BlZXJfZmx1c2hfdGlkc19jbWQgKmNtZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVvZigqY21kKSk7CiAJaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWNtZCA9IChzdHJ1Y3Qgd21pX3BlZXJfZmx1c2hfdGlkc19jbWQgKilza2ItPmRhdGE7CiAJY21kLT52ZGV2X2lkICAgICAgICAgPSBfX2NwdV90b19sZTMyKHZkZXZfaWQpOwpAQCAtNDAwMywxOSArNDU3OCwyMSBAQAogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLAogCQkgICAid21pIHBlZXIgZmx1c2ggdmRldl9pZCAlZCBwZWVyX2FkZHIgJXBNIHRpZHMgJTA4eFxuIiwKIAkJICAgdmRldl9pZCwgcGVlcl9hZGRyLCB0aWRfYml0bWFwKTsKLQlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLCBhci0+d21pLmNtZC0+cGVlcl9mbHVzaF90aWRzX2NtZGlkKTsKKwlyZXR1cm4gc2tiOwogfQogCi1pbnQgYXRoMTBrX3dtaV9wZWVyX3NldF9wYXJhbShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCi0JCQkgICAgICBjb25zdCB1OCAqcGVlcl9hZGRyLCBlbnVtIHdtaV9wZWVyX3BhcmFtIHBhcmFtX2lkLAotCQkJICAgICAgdTMyIHBhcmFtX3ZhbHVlKQorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX3BlZXJfc2V0X3BhcmFtKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCQkgY29uc3QgdTggKnBlZXJfYWRkciwKKwkJCQkgZW51bSB3bWlfcGVlcl9wYXJhbSBwYXJhbV9pZCwKKwkJCQkgdTMyIHBhcmFtX3ZhbHVlKQogewogCXN0cnVjdCB3bWlfcGVlcl9zZXRfcGFyYW1fY21kICpjbWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKmNtZCkpOwogCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAljbWQgPSAoc3RydWN0IHdtaV9wZWVyX3NldF9wYXJhbV9jbWQgKilza2ItPmRhdGE7CiAJY21kLT52ZGV2X2lkICAgICA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CkBAIC00MDI2LDE5ICs0NjAzLDE5IEBACiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCiAJCSAgICJ3bWkgdmRldiAlZCBwZWVyIDB4JXBNIHNldCBwYXJhbSAlZCB2YWx1ZSAlZFxuIiwKIAkJICAgdmRldl9pZCwgcGVlcl9hZGRyLCBwYXJhbV9pZCwgcGFyYW1fdmFsdWUpOwotCi0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnBlZXJfc2V0X3BhcmFtX2NtZGlkKTsKKwlyZXR1cm4gc2tiOwogfQogCi1pbnQgYXRoMTBrX3dtaV9zZXRfcHNtb2RlKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKLQkJCSAgZW51bSB3bWlfc3RhX3BzX21vZGUgcHNtb2RlKQorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX3NldF9wc21vZGUoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAorCQkJICAgICBlbnVtIHdtaV9zdGFfcHNfbW9kZSBwc21vZGUpCiB7CiAJc3RydWN0IHdtaV9zdGFfcG93ZXJzYXZlX21vZGVfY21kICpjbWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKmNtZCkpOwogCWlmICghc2tiKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAljbWQgPSAoc3RydWN0IHdtaV9zdGFfcG93ZXJzYXZlX21vZGVfY21kICopc2tiLT5kYXRhOwogCWNtZC0+dmRldl9pZCAgICAgPSBfX2NwdV90b19sZTMyKHZkZXZfaWQpOwpAQCAtNDA0NywyMSArNDYyNCwyMCBAQAogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLAogCQkgICAid21pIHNldCBwb3dlcnNhdmUgaWQgMHgleCBtb2RlICVkXG4iLAogCQkgICB2ZGV2X2lkLCBwc21vZGUpOwotCi0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwKLQkJCQkgICBhci0+d21pLmNtZC0+c3RhX3Bvd2Vyc2F2ZV9tb2RlX2NtZGlkKTsKKwlyZXR1cm4gc2tiOwogfQogCi1pbnQgYXRoMTBrX3dtaV9zZXRfc3RhX3BzX3BhcmFtKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKLQkJCQllbnVtIHdtaV9zdGFfcG93ZXJzYXZlX3BhcmFtIHBhcmFtX2lkLAotCQkJCXUzMiB2YWx1ZSkKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX29wX2dlbl9zZXRfc3RhX3BzKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKKwkJCSAgICAgZW51bSB3bWlfc3RhX3Bvd2Vyc2F2ZV9wYXJhbSBwYXJhbV9pZCwKKwkJCSAgICAgdTMyIHZhbHVlKQogewogCXN0cnVjdCB3bWlfc3RhX3Bvd2Vyc2F2ZV9wYXJhbV9jbWQgKmNtZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVvZigqY21kKSk7CiAJaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWNtZCA9IChzdHJ1Y3Qgd21pX3N0YV9wb3dlcnNhdmVfcGFyYW1fY21kICopc2tiLT5kYXRhOwogCWNtZC0+dmRldl9pZCAgICAgPSBfX2NwdV90b19sZTMyKHZkZXZfaWQpOwpAQCAtNDA3MSwyMiArNDY0NywyMiBAQAogCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLAogCQkgICAid21pIHN0YSBwcyBwYXJhbSB2ZGV2X2lkIDB4JXggcGFyYW0gJWQgdmFsdWUgJWRcbiIsCiAJCSAgIHZkZXZfaWQsIHBhcmFtX2lkLCB2YWx1ZSk7Ci0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwKLQkJCQkgICBhci0+d21pLmNtZC0+c3RhX3Bvd2Vyc2F2ZV9wYXJhbV9jbWRpZCk7CisJcmV0dXJuIHNrYjsKIH0KIAotaW50IGF0aDEwa193bWlfc2V0X2FwX3BzX3BhcmFtKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwgY29uc3QgdTggKm1hYywKLQkJCSAgICAgICBlbnVtIHdtaV9hcF9wc19wZWVyX3BhcmFtIHBhcmFtX2lkLCB1MzIgdmFsdWUpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fc2V0X2FwX3BzKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwgY29uc3QgdTggKm1hYywKKwkJCSAgICBlbnVtIHdtaV9hcF9wc19wZWVyX3BhcmFtIHBhcmFtX2lkLCB1MzIgdmFsdWUpCiB7CiAJc3RydWN0IHdtaV9hcF9wc19wZWVyX2NtZCAqY21kOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlpZiAoIW1hYykKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVvZigqY21kKSk7CiAJaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWNtZCA9IChzdHJ1Y3Qgd21pX2FwX3BzX3BlZXJfY21kICopc2tiLT5kYXRhOwogCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CkBAIC00MDk3LDEzICs0NjczLDEyIEBACiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCiAJCSAgICJ3bWkgYXAgcHMgcGFyYW0gdmRldl9pZCAweCVYIHBhcmFtICVkIHZhbHVlICVkIG1hY19hZGRyICVwTVxuIiwKIAkJICAgdmRldl9pZCwgcGFyYW1faWQsIHZhbHVlLCBtYWMpOwotCi0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwKLQkJCQkgICBhci0+d21pLmNtZC0+YXBfcHNfcGVlcl9wYXJhbV9jbWRpZCk7CisJcmV0dXJuIHNrYjsKIH0KIAotaW50IGF0aDEwa193bWlfc2Nhbl9jaGFuX2xpc3Qoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkgICAgICBjb25zdCBzdHJ1Y3Qgd21pX3NjYW5fY2hhbl9saXN0X2FyZyAqYXJnKQorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX3NjYW5fY2hhbl9saXN0KHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCSBjb25zdCBzdHJ1Y3Qgd21pX3NjYW5fY2hhbl9saXN0X2FyZyAqYXJnKQogewogCXN0cnVjdCB3bWlfc2Nhbl9jaGFuX2xpc3RfY21kICpjbWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTQxMTYsNyArNDY5MSw3IEBACiAKIAlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgbGVuKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCiAJY21kID0gKHN0cnVjdCB3bWlfc2Nhbl9jaGFuX2xpc3RfY21kICopc2tiLT5kYXRhOwogCWNtZC0+bnVtX3NjYW5fY2hhbnMgPSBfX2NwdV90b19sZTMyKGFyZy0+bl9jaGFubmVscyk7CkBAIC00MTI4LDcgKzQ3MDMsNyBAQAogCQlhdGgxMGtfd21pX3B1dF93bWlfY2hhbm5lbChjaSwgY2gpOwogCX0KIAotCXJldHVybiBhdGgxMGtfd21pX2NtZF9zZW5kKGFyLCBza2IsIGFyLT53bWkuY21kLT5zY2FuX2NoYW5fbGlzdF9jbWRpZCk7CisJcmV0dXJuIHNrYjsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQyMDksMTIgKzQ3ODQsOSBAQAogCWNtZC0+aW5mbzAgPSBfX2NwdV90b19sZTMyKGluZm8wKTsKIH0KIAotaW50IGF0aDEwa193bWlfcGVlcl9hc3NvYyhzdHJ1Y3QgYXRoMTBrICphciwKLQkJCSAgY29uc3Qgc3RydWN0IHdtaV9wZWVyX2Fzc29jX2NvbXBsZXRlX2FyZyAqYXJnKQorc3RhdGljIGludAorYXRoMTBrX3dtaV9wZWVyX2Fzc29jX2NoZWNrX2FyZyhjb25zdCBzdHJ1Y3Qgd21pX3BlZXJfYXNzb2NfY29tcGxldGVfYXJnICphcmcpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgbGVuOwotCiAJaWYgKGFyZy0+cGVlcl9tcGR1X2RlbnNpdHkgPiAxNikKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGFyZy0+cGVlcl9sZWdhY3lfcmF0ZXMubnVtX3JhdGVzID4gTUFYX1NVUFBPUlRFRF9SQVRFUykKQEAgLTQyMjIsNzkgKzQ3OTQsMTM1IEBACiAJaWYgKGFyZy0+cGVlcl9odF9yYXRlcy5udW1fcmF0ZXMgPiBNQVhfU1VQUE9SVEVEX1JBVEVTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICh0ZXN0X2JpdChBVEgxMEtfRldfRkVBVFVSRV9XTUlfMTBYLCBhci0+ZndfZmVhdHVyZXMpKSB7Ci0JCWlmICh0ZXN0X2JpdChBVEgxMEtfRldfRkVBVFVSRV9XTUlfMTBfMiwgYXItPmZ3X2ZlYXR1cmVzKSkKLQkJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgd21pXzEwXzJfcGVlcl9hc3NvY19jb21wbGV0ZV9jbWQpOwotCQllbHNlCi0JCQlsZW4gPSBzaXplb2Yoc3RydWN0IHdtaV8xMF8xX3BlZXJfYXNzb2NfY29tcGxldGVfY21kKTsKLQl9IGVsc2UgewotCQlsZW4gPSBzaXplb2Yoc3RydWN0IHdtaV9tYWluX3BlZXJfYXNzb2NfY29tcGxldGVfY21kKTsKLQl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX29wX2dlbl9wZWVyX2Fzc29jKHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJICAgICBjb25zdCBzdHJ1Y3Qgd21pX3BlZXJfYXNzb2NfY29tcGxldGVfYXJnICphcmcpCit7CisJc2l6ZV90IGxlbiA9IHNpemVvZihzdHJ1Y3Qgd21pX21haW5fcGVlcl9hc3NvY19jb21wbGV0ZV9jbWQpOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHJldDsKKworCXJldCA9IGF0aDEwa193bWlfcGVlcl9hc3NvY19jaGVja19hcmcoYXJnKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOwogCiAJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIGxlbik7CiAJaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWlmICh0ZXN0X2JpdChBVEgxMEtfRldfRkVBVFVSRV9XTUlfMTBYLCBhci0+ZndfZmVhdHVyZXMpKSB7Ci0JCWlmICh0ZXN0X2JpdChBVEgxMEtfRldfRkVBVFVSRV9XTUlfMTBfMiwgYXItPmZ3X2ZlYXR1cmVzKSkKLQkJCWF0aDEwa193bWlfcGVlcl9hc3NvY19maWxsXzEwXzIoYXIsIHNrYi0+ZGF0YSwgYXJnKTsKLQkJZWxzZQotCQkJYXRoMTBrX3dtaV9wZWVyX2Fzc29jX2ZpbGxfMTBfMShhciwgc2tiLT5kYXRhLCBhcmcpOwotCX0gZWxzZSB7Ci0JCWF0aDEwa193bWlfcGVlcl9hc3NvY19maWxsX21haW4oYXIsIHNrYi0+ZGF0YSwgYXJnKTsKLQl9CisJYXRoMTBrX3dtaV9wZWVyX2Fzc29jX2ZpbGxfbWFpbihhciwgc2tiLT5kYXRhLCBhcmcpOwogCiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCiAJCSAgICJ3bWkgcGVlciBhc3NvYyB2ZGV2ICVkIGFkZHIgJXBNICglcylcbiIsCiAJCSAgIGFyZy0+dmRldl9pZCwgYXJnLT5hZGRyLAogCQkgICBhcmctPnBlZXJfcmVhc3NvYyA/ICJyZWFzc29jaWF0ZSIgOiAibmV3Iik7Ci0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnBlZXJfYXNzb2NfY21kaWQpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pXzEwXzFfb3BfZ2VuX3BlZXJfYXNzb2Moc3RydWN0IGF0aDEwayAqYXIsCisJCQkJICBjb25zdCBzdHJ1Y3Qgd21pX3BlZXJfYXNzb2NfY29tcGxldGVfYXJnICphcmcpCit7CisJc2l6ZV90IGxlbiA9IHNpemVvZihzdHJ1Y3Qgd21pXzEwXzFfcGVlcl9hc3NvY19jb21wbGV0ZV9jbWQpOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHJldDsKKworCXJldCA9IGF0aDEwa193bWlfcGVlcl9hc3NvY19jaGVja19hcmcoYXJnKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gRVJSX1BUUihyZXQpOworCisJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIGxlbik7CisJaWYgKCFza2IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJYXRoMTBrX3dtaV9wZWVyX2Fzc29jX2ZpbGxfMTBfMShhciwgc2tiLT5kYXRhLCBhcmcpOworCisJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCisJCSAgICJ3bWkgcGVlciBhc3NvYyB2ZGV2ICVkIGFkZHIgJXBNICglcylcbiIsCisJCSAgIGFyZy0+dmRldl9pZCwgYXJnLT5hZGRyLAorCQkgICBhcmctPnBlZXJfcmVhc3NvYyA/ICJyZWFzc29jaWF0ZSIgOiAibmV3Iik7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfMTBfMl9vcF9nZW5fcGVlcl9hc3NvYyhzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkgIGNvbnN0IHN0cnVjdCB3bWlfcGVlcl9hc3NvY19jb21wbGV0ZV9hcmcgKmFyZykKK3sKKwlzaXplX3QgbGVuID0gc2l6ZW9mKHN0cnVjdCB3bWlfMTBfMl9wZWVyX2Fzc29jX2NvbXBsZXRlX2NtZCk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgcmV0OworCisJcmV0ID0gYXRoMTBrX3dtaV9wZWVyX2Fzc29jX2NoZWNrX2FyZyhhcmcpOworCWlmIChyZXQpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgbGVuKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlhdGgxMGtfd21pX3BlZXJfYXNzb2NfZmlsbF8xMF8yKGFyLCBza2ItPmRhdGEsIGFyZyk7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwKKwkJICAgIndtaSBwZWVyIGFzc29jIHZkZXYgJWQgYWRkciAlcE0gKCVzKVxuIiwKKwkJICAgYXJnLT52ZGV2X2lkLCBhcmctPmFkZHIsCisJCSAgIGFyZy0+cGVlcl9yZWFzc29jID8gInJlYXNzb2NpYXRlIiA6ICJuZXciKTsKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV8xMF8yX29wX2dlbl9wZGV2X2dldF90ZW1wZXJhdHVyZShzdHJ1Y3QgYXRoMTBrICphcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIDApOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLCAid21pIHBkZXYgZ2V0IHRlbXBlcmF0dXJlXG4iKTsKKwlyZXR1cm4gc2tiOwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhlIGJlYWNvbiBpcyBhbHJlYWR5IERNQSBtYXBwZWQgKi8KLWludCBhdGgxMGtfd21pX2JlYWNvbl9zZW5kX3JlZl9ub3dhaXQoc3RydWN0IGF0aDEwa192aWYgKmFydmlmKQorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX2JlYWNvbl9kbWEoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLCBjb25zdCB2b2lkICpiY24sCisJCQkgICAgIHNpemVfdCBiY25fbGVuLCB1MzIgYmNuX3BhZGRyLCBib29sIGR0aW1femVybywKKwkJCSAgICAgYm9vbCBkZWxpdmVyX2NhYikKIHsKIAlzdHJ1Y3Qgd21pX2Jjbl90eF9yZWZfY21kICpjbWQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uID0gYXJ2aWYtPmJlYWNvbjsKLQlzdHJ1Y3QgYXRoMTBrICphciA9IGFydmlmLT5hcjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCWludCByZXQ7CiAJdTE2IGZjOwogCiAJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVvZigqY21kKSk7CiAJaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKWJlYWNvbi0+ZGF0YTsKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKiliY247CiAJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJY21kID0gKHN0cnVjdCB3bWlfYmNuX3R4X3JlZl9jbWQgKilza2ItPmRhdGE7Ci0JY21kLT52ZGV2X2lkID0gX19jcHVfdG9fbGUzMihhcnZpZi0+dmRldl9pZCk7Ci0JY21kLT5kYXRhX2xlbiA9IF9fY3B1X3RvX2xlMzIoYmVhY29uLT5sZW4pOwotCWNtZC0+ZGF0YV9wdHIgPSBfX2NwdV90b19sZTMyKEFUSDEwS19TS0JfQ0IoYmVhY29uKS0+cGFkZHIpOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CisJY21kLT5kYXRhX2xlbiA9IF9fY3B1X3RvX2xlMzIoYmNuX2xlbik7CisJY21kLT5kYXRhX3B0ciA9IF9fY3B1X3RvX2xlMzIoYmNuX3BhZGRyKTsKIAljbWQtPm1zZHVfaWQgPSAwOwogCWNtZC0+ZnJhbWVfY29udHJvbCA9IF9fY3B1X3RvX2xlMzIoZmMpOwogCWNtZC0+ZmxhZ3MgPSAwOwogCWNtZC0+YW50ZW5uYV9tYXNrID0gX19jcHVfdG9fbGUzMihXTUlfQkNOX1RYX1JFRl9ERUZfQU5URU5OQSk7CiAKLQlpZiAoQVRIMTBLX1NLQl9DQihiZWFjb24pLT5iY24uZHRpbV96ZXJvKQorCWlmIChkdGltX3plcm8pCiAJCWNtZC0+ZmxhZ3MgfD0gX19jcHVfdG9fbGUzMihXTUlfQkNOX1RYX1JFRl9GTEFHX0RUSU1fWkVSTyk7CiAKLQlpZiAoQVRIMTBLX1NLQl9DQihiZWFjb24pLT5iY24uZGVsaXZlcl9jYWIpCisJaWYgKGRlbGl2ZXJfY2FiKQogCQljbWQtPmZsYWdzIHw9IF9fY3B1X3RvX2xlMzIoV01JX0JDTl9UWF9SRUZfRkxBR19ERUxJVkVSX0NBQik7CiAKLQlyZXQgPSBhdGgxMGtfd21pX2NtZF9zZW5kX25vd2FpdChhciwgc2tiLAotCQkJCQkgYXItPndtaS5jbWQtPnBkZXZfc2VuZF9iY25fY21kaWQpOwotCi0JaWYgKHJldCkKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gc2tiOwogfQogCi1zdGF0aWMgdm9pZCBhdGgxMGtfd21pX3BkZXZfc2V0X3dtbV9wYXJhbShzdHJ1Y3Qgd21pX3dtbV9wYXJhbXMgKnBhcmFtcywKLQkJCQkJICBjb25zdCBzdHJ1Y3Qgd21pX3dtbV9wYXJhbXNfYXJnICphcmcpCit2b2lkIGF0aDEwa193bWlfc2V0X3dtbV9wYXJhbShzdHJ1Y3Qgd21pX3dtbV9wYXJhbXMgKnBhcmFtcywKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB3bWlfd21tX3BhcmFtc19hcmcgKmFyZykKIHsKIAlwYXJhbXMtPmN3bWluICA9IF9fY3B1X3RvX2xlMzIoYXJnLT5jd21pbik7CiAJcGFyYW1zLT5jd21heCAgPSBfX2NwdV90b19sZTMyKGFyZy0+Y3dtYXgpOwpAQCAtNDMwNCw1MiArNDkzMiw1NCBAQAogCXBhcmFtcy0+bm9fYWNrID0gX19jcHVfdG9fbGUzMihhcmctPm5vX2Fjayk7CiB9CiAKLWludCBhdGgxMGtfd21pX3BkZXZfc2V0X3dtbV9wYXJhbXMoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkJICAgY29uc3Qgc3RydWN0IHdtaV9wZGV2X3NldF93bW1fcGFyYW1zX2FyZyAqYXJnKQorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX3BkZXZfc2V0X3dtbShzdHJ1Y3QgYXRoMTBrICphciwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgd21pX3dtbV9wYXJhbXNfYWxsX2FyZyAqYXJnKQogewogCXN0cnVjdCB3bWlfcGRldl9zZXRfd21tX3BhcmFtcyAqY21kOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCpjbWQpKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJY21kID0gKHN0cnVjdCB3bWlfcGRldl9zZXRfd21tX3BhcmFtcyAqKXNrYi0+ZGF0YTsKLQlhdGgxMGtfd21pX3BkZXZfc2V0X3dtbV9wYXJhbSgmY21kLT5hY19iZSwgJmFyZy0+YWNfYmUpOwotCWF0aDEwa193bWlfcGRldl9zZXRfd21tX3BhcmFtKCZjbWQtPmFjX2JrLCAmYXJnLT5hY19iayk7Ci0JYXRoMTBrX3dtaV9wZGV2X3NldF93bW1fcGFyYW0oJmNtZC0+YWNfdmksICZhcmctPmFjX3ZpKTsKLQlhdGgxMGtfd21pX3BkZXZfc2V0X3dtbV9wYXJhbSgmY21kLT5hY192bywgJmFyZy0+YWNfdm8pOworCWF0aDEwa193bWlfc2V0X3dtbV9wYXJhbSgmY21kLT5hY19iZSwgJmFyZy0+YWNfYmUpOworCWF0aDEwa193bWlfc2V0X3dtbV9wYXJhbSgmY21kLT5hY19iaywgJmFyZy0+YWNfYmspOworCWF0aDEwa193bWlfc2V0X3dtbV9wYXJhbSgmY21kLT5hY192aSwgJmFyZy0+YWNfdmkpOworCWF0aDEwa193bWlfc2V0X3dtbV9wYXJhbSgmY21kLT5hY192bywgJmFyZy0+YWNfdm8pOwogCiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJ3bWkgcGRldiBzZXQgd21tIHBhcmFtc1xuIik7Ci0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwKLQkJCQkgICBhci0+d21pLmNtZC0+cGRldl9zZXRfd21tX3BhcmFtc19jbWRpZCk7CisJcmV0dXJuIHNrYjsKIH0KIAotaW50IGF0aDEwa193bWlfcmVxdWVzdF9zdGF0cyhzdHJ1Y3QgYXRoMTBrICphciwgZW51bSB3bWlfc3RhdHNfaWQgc3RhdHNfaWQpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fcmVxdWVzdF9zdGF0cyhzdHJ1Y3QgYXRoMTBrICphciwgZW51bSB3bWlfc3RhdHNfaWQgc3RhdHNfaWQpCiB7CiAJc3RydWN0IHdtaV9yZXF1ZXN0X3N0YXRzX2NtZCAqY21kOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCpjbWQpKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJY21kID0gKHN0cnVjdCB3bWlfcmVxdWVzdF9zdGF0c19jbWQgKilza2ItPmRhdGE7CiAJY21kLT5zdGF0c19pZCA9IF9fY3B1X3RvX2xlMzIoc3RhdHNfaWQpOwogCiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJ3bWkgcmVxdWVzdCBzdGF0cyAlZFxuIiwgKGludClzdGF0c19pZCk7Ci0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPnJlcXVlc3Rfc3RhdHNfY21kaWQpOworCXJldHVybiBza2I7CiB9CiAKLWludCBhdGgxMGtfd21pX2ZvcmNlX2Z3X2hhbmcoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkgICAgIGVudW0gd21pX2ZvcmNlX2Z3X2hhbmdfdHlwZSB0eXBlLCB1MzIgZGVsYXlfbXMpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fZm9yY2VfZndfaGFuZyhzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQllbnVtIHdtaV9mb3JjZV9md19oYW5nX3R5cGUgdHlwZSwgdTMyIGRlbGF5X21zKQogewogCXN0cnVjdCB3bWlfZm9yY2VfZndfaGFuZ19jbWQgKmNtZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVvZigqY21kKSk7CiAJaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWNtZCA9IChzdHJ1Y3Qgd21pX2ZvcmNlX2Z3X2hhbmdfY21kICopc2tiLT5kYXRhOwogCWNtZC0+dHlwZSA9IF9fY3B1X3RvX2xlMzIodHlwZSk7CkBAIC00MzU3LDEwICs0OTg3LDEyIEBACiAKIAlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwgIndtaSBmb3JjZSBmdyBoYW5nICVkIGRlbGF5ICVkXG4iLAogCQkgICB0eXBlLCBkZWxheV9tcyk7Ci0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPmZvcmNlX2Z3X2hhbmdfY21kaWQpOworCXJldHVybiBza2I7CiB9CiAKLWludCBhdGgxMGtfd21pX2RiZ2xvZ19jZmcoc3RydWN0IGF0aDEwayAqYXIsIHUzMiBtb2R1bGVfZW5hYmxlKQorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX2RiZ2xvZ19jZmcoc3RydWN0IGF0aDEwayAqYXIsIHUzMiBtb2R1bGVfZW5hYmxlLAorCQkJICAgICB1MzIgbG9nX2xldmVsKQogewogCXN0cnVjdCB3bWlfZGJnbG9nX2NmZ19jbWQgKmNtZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtNDM2OCwxMiArNTAwMCwxMiBAQAogCiAJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVvZigqY21kKSk7CiAJaWYgKCFza2IpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWNtZCA9IChzdHJ1Y3Qgd21pX2RiZ2xvZ19jZmdfY21kICopc2tiLT5kYXRhOwogCiAJaWYgKG1vZHVsZV9lbmFibGUpIHsKLQkJY2ZnID0gU00oQVRIMTBLX0RCR0xPR19MRVZFTF9WRVJCT1NFLAorCQljZmcgPSBTTShsb2dfbGV2ZWwsCiAJCQkgQVRIMTBLX0RCR0xPR19DRkdfTE9HX0xWTCk7CiAJfSBlbHNlIHsKIAkJLyogc2V0IGJhY2sgZGVmYXVsdHMsIGFsbCBtb2R1bGVzIHdpdGggV0FSTiBsZXZlbCAqLwpAQCAtNDM5Myw1NyArNTAyNSw0NDkgQEAKIAkJICAgX19sZTMyX3RvX2NwdShjbWQtPm1vZHVsZV92YWxpZCksCiAJCSAgIF9fbGUzMl90b19jcHUoY21kLT5jb25maWdfZW5hYmxlKSwKIAkJICAgX19sZTMyX3RvX2NwdShjbWQtPmNvbmZpZ192YWxpZCkpOwotCi0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwgYXItPndtaS5jbWQtPmRiZ2xvZ19jZmdfY21kaWQpOworCXJldHVybiBza2I7CiB9CiAKLWludCBhdGgxMGtfd21pX3BkZXZfcGt0bG9nX2VuYWJsZShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIGV2X2JpdG1hcCkKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX29wX2dlbl9wa3Rsb2dfZW5hYmxlKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgZXZfYml0bWFwKQogewogCXN0cnVjdCB3bWlfcGRldl9wa3Rsb2dfZW5hYmxlX2NtZCAqY21kOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCpjbWQpKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJZXZfYml0bWFwICY9IEFUSDEwS19QS1RMT0dfQU5ZOwotCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLAotCQkgICAid21pIGVuYWJsZSBwa3Rsb2cgZmlsdGVyOiV4XG4iLCBldl9iaXRtYXApOwogCiAJY21kID0gKHN0cnVjdCB3bWlfcGRldl9wa3Rsb2dfZW5hYmxlX2NtZCAqKXNrYi0+ZGF0YTsKIAljbWQtPmV2X2JpdG1hcCA9IF9fY3B1X3RvX2xlMzIoZXZfYml0bWFwKTsKLQlyZXR1cm4gYXRoMTBrX3dtaV9jbWRfc2VuZChhciwgc2tiLAotCQkJCSAgIGFyLT53bWkuY21kLT5wZGV2X3BrdGxvZ19lbmFibGVfY21kaWQpOworCisJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJ3bWkgZW5hYmxlIHBrdGxvZyBmaWx0ZXIgMHglMDh4XG4iLAorCQkgICBldl9iaXRtYXApOworCXJldHVybiBza2I7CiB9CiAKLWludCBhdGgxMGtfd21pX3BkZXZfcGt0bG9nX2Rpc2FibGUoc3RydWN0IGF0aDEwayAqYXIpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fcGt0bG9nX2Rpc2FibGUoc3RydWN0IGF0aDEwayAqYXIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCAwKTsKIAlpZiAoIXNrYikKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCiAJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksICJ3bWkgZGlzYWJsZSBwa3Rsb2dcbiIpOwotCi0JcmV0dXJuIGF0aDEwa193bWlfY21kX3NlbmQoYXIsIHNrYiwKLQkJCQkgICBhci0+d21pLmNtZC0+cGRldl9wa3Rsb2dfZGlzYWJsZV9jbWRpZCk7CisJcmV0dXJuIHNrYjsKIH0KIAorc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX3BkZXZfc2V0X3F1aWV0X21vZGUoc3RydWN0IGF0aDEwayAqYXIsIHUzMiBwZXJpb2QsCisJCQkJICAgICAgdTMyIGR1cmF0aW9uLCB1MzIgbmV4dF9vZmZzZXQsCisJCQkJICAgICAgdTMyIGVuYWJsZWQpCit7CisJc3RydWN0IHdtaV9wZGV2X3NldF9xdWlldF9jbWQgKmNtZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVvZigqY21kKSk7CisJaWYgKCFza2IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJY21kID0gKHN0cnVjdCB3bWlfcGRldl9zZXRfcXVpZXRfY21kICopc2tiLT5kYXRhOworCWNtZC0+cGVyaW9kID0gX19jcHVfdG9fbGUzMihwZXJpb2QpOworCWNtZC0+ZHVyYXRpb24gPSBfX2NwdV90b19sZTMyKGR1cmF0aW9uKTsKKwljbWQtPm5leHRfc3RhcnQgPSBfX2NwdV90b19sZTMyKG5leHRfb2Zmc2V0KTsKKwljbWQtPmVuYWJsZWQgPSBfX2NwdV90b19sZTMyKGVuYWJsZWQpOworCisJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCisJCSAgICJ3bWkgcXVpZXQgcGFyYW06IHBlcmlvZCAldSBkdXJhdGlvbiAldSBlbmFibGVkICVkXG4iLAorCQkgICBwZXJpb2QsIGR1cmF0aW9uLCBlbmFibGVkKTsKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fYWRkYmFfY2xlYXJfcmVzcChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCisJCQkJICAgY29uc3QgdTggKm1hYykKK3sKKwlzdHJ1Y3Qgd21pX2FkZGJhX2NsZWFyX3Jlc3BfY21kICpjbWQ7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmICghbWFjKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCXNrYiA9IGF0aDEwa193bWlfYWxsb2Nfc2tiKGFyLCBzaXplb2YoKmNtZCkpOworCWlmICghc2tiKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWNtZCA9IChzdHJ1Y3Qgd21pX2FkZGJhX2NsZWFyX3Jlc3BfY21kICopc2tiLT5kYXRhOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CisJZXRoZXJfYWRkcl9jb3B5KGNtZC0+cGVlcl9tYWNhZGRyLmFkZHIsIG1hYyk7CisKKwlhdGgxMGtfZGJnKGFyLCBBVEgxMEtfREJHX1dNSSwKKwkJICAgIndtaSBhZGRiYSBjbGVhciByZXNwIHZkZXZfaWQgMHglWCBtYWNfYWRkciAlcE1cbiIsCisJCSAgIHZkZXZfaWQsIG1hYyk7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICoKK2F0aDEwa193bWlfb3BfZ2VuX2FkZGJhX3NlbmQoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLCBjb25zdCB1OCAqbWFjLAorCQkJICAgICB1MzIgdGlkLCB1MzIgYnVmX3NpemUpCit7CisJc3RydWN0IHdtaV9hZGRiYV9zZW5kX2NtZCAqY21kOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIW1hYykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwljbWQgPSAoc3RydWN0IHdtaV9hZGRiYV9zZW5kX2NtZCAqKXNrYi0+ZGF0YTsKKwljbWQtPnZkZXZfaWQgPSBfX2NwdV90b19sZTMyKHZkZXZfaWQpOworCWV0aGVyX2FkZHJfY29weShjbWQtPnBlZXJfbWFjYWRkci5hZGRyLCBtYWMpOworCWNtZC0+dGlkID0gX19jcHVfdG9fbGUzMih0aWQpOworCWNtZC0+YnVmZmVyc2l6ZSA9IF9fY3B1X3RvX2xlMzIoYnVmX3NpemUpOworCisJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCisJCSAgICJ3bWkgYWRkYmEgc2VuZCB2ZGV2X2lkIDB4JVggbWFjX2FkZHIgJXBNIHRpZCAldSBidWZzaXplICV1XG4iLAorCQkgICB2ZGV2X2lkLCBtYWMsIHRpZCwgYnVmX3NpemUpOworCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCithdGgxMGtfd21pX29wX2dlbl9hZGRiYV9zZXRfcmVzcChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsIGNvbnN0IHU4ICptYWMsCisJCQkJIHUzMiB0aWQsIHUzMiBzdGF0dXMpCit7CisJc3RydWN0IHdtaV9hZGRiYV9zZXRyZXNwb25zZV9jbWQgKmNtZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFtYWMpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJc2tiID0gYXRoMTBrX3dtaV9hbGxvY19za2IoYXIsIHNpemVvZigqY21kKSk7CisJaWYgKCFza2IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJY21kID0gKHN0cnVjdCB3bWlfYWRkYmFfc2V0cmVzcG9uc2VfY21kICopc2tiLT5kYXRhOworCWNtZC0+dmRldl9pZCA9IF9fY3B1X3RvX2xlMzIodmRldl9pZCk7CisJZXRoZXJfYWRkcl9jb3B5KGNtZC0+cGVlcl9tYWNhZGRyLmFkZHIsIG1hYyk7CisJY21kLT50aWQgPSBfX2NwdV90b19sZTMyKHRpZCk7CisJY21kLT5zdGF0dXNjb2RlID0gX19jcHVfdG9fbGUzMihzdGF0dXMpOworCisJYXRoMTBrX2RiZyhhciwgQVRIMTBLX0RCR19XTUksCisJCSAgICJ3bWkgYWRkYmEgc2V0IHJlc3AgdmRldl9pZCAweCVYIG1hY19hZGRyICVwTSB0aWQgJXUgc3RhdHVzICV1XG4iLAorCQkgICB2ZGV2X2lkLCBtYWMsIHRpZCwgc3RhdHVzKTsKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgorYXRoMTBrX3dtaV9vcF9nZW5fZGVsYmFfc2VuZChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsIGNvbnN0IHU4ICptYWMsCisJCQkgICAgIHUzMiB0aWQsIHUzMiBpbml0aWF0b3IsIHUzMiByZWFzb24pCit7CisJc3RydWN0IHdtaV9kZWxiYV9zZW5kX2NtZCAqY21kOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlpZiAoIW1hYykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlza2IgPSBhdGgxMGtfd21pX2FsbG9jX3NrYihhciwgc2l6ZW9mKCpjbWQpKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwljbWQgPSAoc3RydWN0IHdtaV9kZWxiYV9zZW5kX2NtZCAqKXNrYi0+ZGF0YTsKKwljbWQtPnZkZXZfaWQgPSBfX2NwdV90b19sZTMyKHZkZXZfaWQpOworCWV0aGVyX2FkZHJfY29weShjbWQtPnBlZXJfbWFjYWRkci5hZGRyLCBtYWMpOworCWNtZC0+dGlkID0gX19jcHVfdG9fbGUzMih0aWQpOworCWNtZC0+aW5pdGlhdG9yID0gX19jcHVfdG9fbGUzMihpbml0aWF0b3IpOworCWNtZC0+cmVhc29uY29kZSA9IF9fY3B1X3RvX2xlMzIocmVhc29uKTsKKworCWF0aDEwa19kYmcoYXIsIEFUSDEwS19EQkdfV01JLAorCQkgICAid21pIGRlbGJhIHNlbmQgdmRldl9pZCAweCVYIG1hY19hZGRyICVwTSB0aWQgJXUgaW5pdGlhdG9yICV1IHJlYXNvbiAldVxuIiwKKwkJICAgdmRldl9pZCwgbWFjLCB0aWQsIGluaXRpYXRvciwgcmVhc29uKTsKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHdtaV9vcHMgd21pX29wcyA9IHsKKwkucnggPSBhdGgxMGtfd21pX29wX3J4LAorCS5tYXBfc3ZjID0gd21pX21haW5fc3ZjX21hcCwKKworCS5wdWxsX3NjYW4gPSBhdGgxMGtfd21pX29wX3B1bGxfc2Nhbl9ldiwKKwkucHVsbF9tZ210X3J4ID0gYXRoMTBrX3dtaV9vcF9wdWxsX21nbXRfcnhfZXYsCisJLnB1bGxfY2hfaW5mbyA9IGF0aDEwa193bWlfb3BfcHVsbF9jaF9pbmZvX2V2LAorCS5wdWxsX3ZkZXZfc3RhcnQgPSBhdGgxMGtfd21pX29wX3B1bGxfdmRldl9zdGFydF9ldiwKKwkucHVsbF9wZWVyX2tpY2sgPSBhdGgxMGtfd21pX29wX3B1bGxfcGVlcl9raWNrX2V2LAorCS5wdWxsX3N3YmEgPSBhdGgxMGtfd21pX29wX3B1bGxfc3diYV9ldiwKKwkucHVsbF9waHllcnIgPSBhdGgxMGtfd21pX29wX3B1bGxfcGh5ZXJyX2V2LAorCS5wdWxsX3N2Y19yZHkgPSBhdGgxMGtfd21pX21haW5fb3BfcHVsbF9zdmNfcmR5X2V2LAorCS5wdWxsX3JkeSA9IGF0aDEwa193bWlfb3BfcHVsbF9yZHlfZXYsCisJLnB1bGxfZndfc3RhdHMgPSBhdGgxMGtfd21pX21haW5fb3BfcHVsbF9md19zdGF0cywKKworCS5nZW5fcGRldl9zdXNwZW5kID0gYXRoMTBrX3dtaV9vcF9nZW5fcGRldl9zdXNwZW5kLAorCS5nZW5fcGRldl9yZXN1bWUgPSBhdGgxMGtfd21pX29wX2dlbl9wZGV2X3Jlc3VtZSwKKwkuZ2VuX3BkZXZfc2V0X3JkID0gYXRoMTBrX3dtaV9vcF9nZW5fcGRldl9zZXRfcmQsCisJLmdlbl9wZGV2X3NldF9wYXJhbSA9IGF0aDEwa193bWlfb3BfZ2VuX3BkZXZfc2V0X3BhcmFtLAorCS5nZW5faW5pdCA9IGF0aDEwa193bWlfb3BfZ2VuX2luaXQsCisJLmdlbl9zdGFydF9zY2FuID0gYXRoMTBrX3dtaV9vcF9nZW5fc3RhcnRfc2NhbiwKKwkuZ2VuX3N0b3Bfc2NhbiA9IGF0aDEwa193bWlfb3BfZ2VuX3N0b3Bfc2NhbiwKKwkuZ2VuX3ZkZXZfY3JlYXRlID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9jcmVhdGUsCisJLmdlbl92ZGV2X2RlbGV0ZSA9IGF0aDEwa193bWlfb3BfZ2VuX3ZkZXZfZGVsZXRlLAorCS5nZW5fdmRldl9zdGFydCA9IGF0aDEwa193bWlfb3BfZ2VuX3ZkZXZfc3RhcnQsCisJLmdlbl92ZGV2X3N0b3AgPSBhdGgxMGtfd21pX29wX2dlbl92ZGV2X3N0b3AsCisJLmdlbl92ZGV2X3VwID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl91cCwKKwkuZ2VuX3ZkZXZfZG93biA9IGF0aDEwa193bWlfb3BfZ2VuX3ZkZXZfZG93biwKKwkuZ2VuX3ZkZXZfc2V0X3BhcmFtID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9zZXRfcGFyYW0sCisJLmdlbl92ZGV2X2luc3RhbGxfa2V5ID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9pbnN0YWxsX2tleSwKKwkuZ2VuX3ZkZXZfc3BlY3RyYWxfY29uZiA9IGF0aDEwa193bWlfb3BfZ2VuX3ZkZXZfc3BlY3RyYWxfY29uZiwKKwkuZ2VuX3ZkZXZfc3BlY3RyYWxfZW5hYmxlID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9zcGVjdHJhbF9lbmFibGUsCisJLyogLmdlbl92ZGV2X3dtbV9jb25mIG5vdCBpbXBsZW1lbnRlZCAqLworCS5nZW5fcGVlcl9jcmVhdGUgPSBhdGgxMGtfd21pX29wX2dlbl9wZWVyX2NyZWF0ZSwKKwkuZ2VuX3BlZXJfZGVsZXRlID0gYXRoMTBrX3dtaV9vcF9nZW5fcGVlcl9kZWxldGUsCisJLmdlbl9wZWVyX2ZsdXNoID0gYXRoMTBrX3dtaV9vcF9nZW5fcGVlcl9mbHVzaCwKKwkuZ2VuX3BlZXJfc2V0X3BhcmFtID0gYXRoMTBrX3dtaV9vcF9nZW5fcGVlcl9zZXRfcGFyYW0sCisJLmdlbl9wZWVyX2Fzc29jID0gYXRoMTBrX3dtaV9vcF9nZW5fcGVlcl9hc3NvYywKKwkuZ2VuX3NldF9wc21vZGUgPSBhdGgxMGtfd21pX29wX2dlbl9zZXRfcHNtb2RlLAorCS5nZW5fc2V0X3N0YV9wcyA9IGF0aDEwa193bWlfb3BfZ2VuX3NldF9zdGFfcHMsCisJLmdlbl9zZXRfYXBfcHMgPSBhdGgxMGtfd21pX29wX2dlbl9zZXRfYXBfcHMsCisJLmdlbl9zY2FuX2NoYW5fbGlzdCA9IGF0aDEwa193bWlfb3BfZ2VuX3NjYW5fY2hhbl9saXN0LAorCS5nZW5fYmVhY29uX2RtYSA9IGF0aDEwa193bWlfb3BfZ2VuX2JlYWNvbl9kbWEsCisJLmdlbl9wZGV2X3NldF93bW0gPSBhdGgxMGtfd21pX29wX2dlbl9wZGV2X3NldF93bW0sCisJLmdlbl9yZXF1ZXN0X3N0YXRzID0gYXRoMTBrX3dtaV9vcF9nZW5fcmVxdWVzdF9zdGF0cywKKwkuZ2VuX2ZvcmNlX2Z3X2hhbmcgPSBhdGgxMGtfd21pX29wX2dlbl9mb3JjZV9md19oYW5nLAorCS5nZW5fbWdtdF90eCA9IGF0aDEwa193bWlfb3BfZ2VuX21nbXRfdHgsCisJLmdlbl9kYmdsb2dfY2ZnID0gYXRoMTBrX3dtaV9vcF9nZW5fZGJnbG9nX2NmZywKKwkuZ2VuX3BrdGxvZ19lbmFibGUgPSBhdGgxMGtfd21pX29wX2dlbl9wa3Rsb2dfZW5hYmxlLAorCS5nZW5fcGt0bG9nX2Rpc2FibGUgPSBhdGgxMGtfd21pX29wX2dlbl9wa3Rsb2dfZGlzYWJsZSwKKwkuZ2VuX3BkZXZfc2V0X3F1aWV0X21vZGUgPSBhdGgxMGtfd21pX29wX2dlbl9wZGV2X3NldF9xdWlldF9tb2RlLAorCS8qIC5nZW5fcGRldl9nZXRfdGVtcGVyYXR1cmUgbm90IGltcGxlbWVudGVkICovCisJLmdlbl9hZGRiYV9jbGVhcl9yZXNwID0gYXRoMTBrX3dtaV9vcF9nZW5fYWRkYmFfY2xlYXJfcmVzcCwKKwkuZ2VuX2FkZGJhX3NlbmQgPSBhdGgxMGtfd21pX29wX2dlbl9hZGRiYV9zZW5kLAorCS5nZW5fYWRkYmFfc2V0X3Jlc3AgPSBhdGgxMGtfd21pX29wX2dlbl9hZGRiYV9zZXRfcmVzcCwKKwkuZ2VuX2RlbGJhX3NlbmQgPSBhdGgxMGtfd21pX29wX2dlbl9kZWxiYV9zZW5kLAorCS8qIC5nZW5fYmNuX3RtcGwgbm90IGltcGxlbWVudGVkICovCisJLyogLmdlbl9wcmJfdG1wbCBub3QgaW1wbGVtZW50ZWQgKi8KKwkvKiAuZ2VuX3AycF9nb19iY25faWUgbm90IGltcGxlbWVudGVkICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHdtaV9vcHMgd21pXzEwXzFfb3BzID0geworCS5yeCA9IGF0aDEwa193bWlfMTBfMV9vcF9yeCwKKwkubWFwX3N2YyA9IHdtaV8xMHhfc3ZjX21hcCwKKwkucHVsbF9zdmNfcmR5ID0gYXRoMTBrX3dtaV8xMHhfb3BfcHVsbF9zdmNfcmR5X2V2LAorCS5wdWxsX2Z3X3N0YXRzID0gYXRoMTBrX3dtaV8xMHhfb3BfcHVsbF9md19zdGF0cywKKwkuZ2VuX2luaXQgPSBhdGgxMGtfd21pXzEwXzFfb3BfZ2VuX2luaXQsCisJLmdlbl9wZGV2X3NldF9yZCA9IGF0aDEwa193bWlfMTB4X29wX2dlbl9wZGV2X3NldF9yZCwKKwkuZ2VuX3N0YXJ0X3NjYW4gPSBhdGgxMGtfd21pXzEweF9vcF9nZW5fc3RhcnRfc2NhbiwKKwkuZ2VuX3BlZXJfYXNzb2MgPSBhdGgxMGtfd21pXzEwXzFfb3BfZ2VuX3BlZXJfYXNzb2MsCisJLyogLmdlbl9wZGV2X2dldF90ZW1wZXJhdHVyZSBub3QgaW1wbGVtZW50ZWQgKi8KKworCS8qIHNoYXJlZCB3aXRoIG1haW4gYnJhbmNoICovCisJLnB1bGxfc2NhbiA9IGF0aDEwa193bWlfb3BfcHVsbF9zY2FuX2V2LAorCS5wdWxsX21nbXRfcnggPSBhdGgxMGtfd21pX29wX3B1bGxfbWdtdF9yeF9ldiwKKwkucHVsbF9jaF9pbmZvID0gYXRoMTBrX3dtaV9vcF9wdWxsX2NoX2luZm9fZXYsCisJLnB1bGxfdmRldl9zdGFydCA9IGF0aDEwa193bWlfb3BfcHVsbF92ZGV2X3N0YXJ0X2V2LAorCS5wdWxsX3BlZXJfa2ljayA9IGF0aDEwa193bWlfb3BfcHVsbF9wZWVyX2tpY2tfZXYsCisJLnB1bGxfc3diYSA9IGF0aDEwa193bWlfb3BfcHVsbF9zd2JhX2V2LAorCS5wdWxsX3BoeWVyciA9IGF0aDEwa193bWlfb3BfcHVsbF9waHllcnJfZXYsCisJLnB1bGxfcmR5ID0gYXRoMTBrX3dtaV9vcF9wdWxsX3JkeV9ldiwKKworCS5nZW5fcGRldl9zdXNwZW5kID0gYXRoMTBrX3dtaV9vcF9nZW5fcGRldl9zdXNwZW5kLAorCS5nZW5fcGRldl9yZXN1bWUgPSBhdGgxMGtfd21pX29wX2dlbl9wZGV2X3Jlc3VtZSwKKwkuZ2VuX3BkZXZfc2V0X3BhcmFtID0gYXRoMTBrX3dtaV9vcF9nZW5fcGRldl9zZXRfcGFyYW0sCisJLmdlbl9zdG9wX3NjYW4gPSBhdGgxMGtfd21pX29wX2dlbl9zdG9wX3NjYW4sCisJLmdlbl92ZGV2X2NyZWF0ZSA9IGF0aDEwa193bWlfb3BfZ2VuX3ZkZXZfY3JlYXRlLAorCS5nZW5fdmRldl9kZWxldGUgPSBhdGgxMGtfd21pX29wX2dlbl92ZGV2X2RlbGV0ZSwKKwkuZ2VuX3ZkZXZfc3RhcnQgPSBhdGgxMGtfd21pX29wX2dlbl92ZGV2X3N0YXJ0LAorCS5nZW5fdmRldl9zdG9wID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9zdG9wLAorCS5nZW5fdmRldl91cCA9IGF0aDEwa193bWlfb3BfZ2VuX3ZkZXZfdXAsCisJLmdlbl92ZGV2X2Rvd24gPSBhdGgxMGtfd21pX29wX2dlbl92ZGV2X2Rvd24sCisJLmdlbl92ZGV2X3NldF9wYXJhbSA9IGF0aDEwa193bWlfb3BfZ2VuX3ZkZXZfc2V0X3BhcmFtLAorCS5nZW5fdmRldl9pbnN0YWxsX2tleSA9IGF0aDEwa193bWlfb3BfZ2VuX3ZkZXZfaW5zdGFsbF9rZXksCisJLmdlbl92ZGV2X3NwZWN0cmFsX2NvbmYgPSBhdGgxMGtfd21pX29wX2dlbl92ZGV2X3NwZWN0cmFsX2NvbmYsCisJLmdlbl92ZGV2X3NwZWN0cmFsX2VuYWJsZSA9IGF0aDEwa193bWlfb3BfZ2VuX3ZkZXZfc3BlY3RyYWxfZW5hYmxlLAorCS8qIC5nZW5fdmRldl93bW1fY29uZiBub3QgaW1wbGVtZW50ZWQgKi8KKwkuZ2VuX3BlZXJfY3JlYXRlID0gYXRoMTBrX3dtaV9vcF9nZW5fcGVlcl9jcmVhdGUsCisJLmdlbl9wZWVyX2RlbGV0ZSA9IGF0aDEwa193bWlfb3BfZ2VuX3BlZXJfZGVsZXRlLAorCS5nZW5fcGVlcl9mbHVzaCA9IGF0aDEwa193bWlfb3BfZ2VuX3BlZXJfZmx1c2gsCisJLmdlbl9wZWVyX3NldF9wYXJhbSA9IGF0aDEwa193bWlfb3BfZ2VuX3BlZXJfc2V0X3BhcmFtLAorCS5nZW5fc2V0X3BzbW9kZSA9IGF0aDEwa193bWlfb3BfZ2VuX3NldF9wc21vZGUsCisJLmdlbl9zZXRfc3RhX3BzID0gYXRoMTBrX3dtaV9vcF9nZW5fc2V0X3N0YV9wcywKKwkuZ2VuX3NldF9hcF9wcyA9IGF0aDEwa193bWlfb3BfZ2VuX3NldF9hcF9wcywKKwkuZ2VuX3NjYW5fY2hhbl9saXN0ID0gYXRoMTBrX3dtaV9vcF9nZW5fc2Nhbl9jaGFuX2xpc3QsCisJLmdlbl9iZWFjb25fZG1hID0gYXRoMTBrX3dtaV9vcF9nZW5fYmVhY29uX2RtYSwKKwkuZ2VuX3BkZXZfc2V0X3dtbSA9IGF0aDEwa193bWlfb3BfZ2VuX3BkZXZfc2V0X3dtbSwKKwkuZ2VuX3JlcXVlc3Rfc3RhdHMgPSBhdGgxMGtfd21pX29wX2dlbl9yZXF1ZXN0X3N0YXRzLAorCS5nZW5fZm9yY2VfZndfaGFuZyA9IGF0aDEwa193bWlfb3BfZ2VuX2ZvcmNlX2Z3X2hhbmcsCisJLmdlbl9tZ210X3R4ID0gYXRoMTBrX3dtaV9vcF9nZW5fbWdtdF90eCwKKwkuZ2VuX2RiZ2xvZ19jZmcgPSBhdGgxMGtfd21pX29wX2dlbl9kYmdsb2dfY2ZnLAorCS5nZW5fcGt0bG9nX2VuYWJsZSA9IGF0aDEwa193bWlfb3BfZ2VuX3BrdGxvZ19lbmFibGUsCisJLmdlbl9wa3Rsb2dfZGlzYWJsZSA9IGF0aDEwa193bWlfb3BfZ2VuX3BrdGxvZ19kaXNhYmxlLAorCS5nZW5fcGRldl9zZXRfcXVpZXRfbW9kZSA9IGF0aDEwa193bWlfb3BfZ2VuX3BkZXZfc2V0X3F1aWV0X21vZGUsCisJLmdlbl9hZGRiYV9jbGVhcl9yZXNwID0gYXRoMTBrX3dtaV9vcF9nZW5fYWRkYmFfY2xlYXJfcmVzcCwKKwkuZ2VuX2FkZGJhX3NlbmQgPSBhdGgxMGtfd21pX29wX2dlbl9hZGRiYV9zZW5kLAorCS5nZW5fYWRkYmFfc2V0X3Jlc3AgPSBhdGgxMGtfd21pX29wX2dlbl9hZGRiYV9zZXRfcmVzcCwKKwkuZ2VuX2RlbGJhX3NlbmQgPSBhdGgxMGtfd21pX29wX2dlbl9kZWxiYV9zZW5kLAorCS8qIC5nZW5fYmNuX3RtcGwgbm90IGltcGxlbWVudGVkICovCisJLyogLmdlbl9wcmJfdG1wbCBub3QgaW1wbGVtZW50ZWQgKi8KKwkvKiAuZ2VuX3AycF9nb19iY25faWUgbm90IGltcGxlbWVudGVkICovCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHdtaV9vcHMgd21pXzEwXzJfb3BzID0geworCS5yeCA9IGF0aDEwa193bWlfMTBfMl9vcF9yeCwKKwkucHVsbF9md19zdGF0cyA9IGF0aDEwa193bWlfMTBfMl9vcF9wdWxsX2Z3X3N0YXRzLAorCS5nZW5faW5pdCA9IGF0aDEwa193bWlfMTBfMl9vcF9nZW5faW5pdCwKKwkuZ2VuX3BlZXJfYXNzb2MgPSBhdGgxMGtfd21pXzEwXzJfb3BfZ2VuX3BlZXJfYXNzb2MsCisJLyogLmdlbl9wZGV2X2dldF90ZW1wZXJhdHVyZSBub3QgaW1wbGVtZW50ZWQgKi8KKworCS8qIHNoYXJlZCB3aXRoIDEwLjEgKi8KKwkubWFwX3N2YyA9IHdtaV8xMHhfc3ZjX21hcCwKKwkucHVsbF9zdmNfcmR5ID0gYXRoMTBrX3dtaV8xMHhfb3BfcHVsbF9zdmNfcmR5X2V2LAorCS5nZW5fcGRldl9zZXRfcmQgPSBhdGgxMGtfd21pXzEweF9vcF9nZW5fcGRldl9zZXRfcmQsCisJLmdlbl9zdGFydF9zY2FuID0gYXRoMTBrX3dtaV8xMHhfb3BfZ2VuX3N0YXJ0X3NjYW4sCisKKwkucHVsbF9zY2FuID0gYXRoMTBrX3dtaV9vcF9wdWxsX3NjYW5fZXYsCisJLnB1bGxfbWdtdF9yeCA9IGF0aDEwa193bWlfb3BfcHVsbF9tZ210X3J4X2V2LAorCS5wdWxsX2NoX2luZm8gPSBhdGgxMGtfd21pX29wX3B1bGxfY2hfaW5mb19ldiwKKwkucHVsbF92ZGV2X3N0YXJ0ID0gYXRoMTBrX3dtaV9vcF9wdWxsX3ZkZXZfc3RhcnRfZXYsCisJLnB1bGxfcGVlcl9raWNrID0gYXRoMTBrX3dtaV9vcF9wdWxsX3BlZXJfa2lja19ldiwKKwkucHVsbF9zd2JhID0gYXRoMTBrX3dtaV9vcF9wdWxsX3N3YmFfZXYsCisJLnB1bGxfcGh5ZXJyID0gYXRoMTBrX3dtaV9vcF9wdWxsX3BoeWVycl9ldiwKKwkucHVsbF9yZHkgPSBhdGgxMGtfd21pX29wX3B1bGxfcmR5X2V2LAorCisJLmdlbl9wZGV2X3N1c3BlbmQgPSBhdGgxMGtfd21pX29wX2dlbl9wZGV2X3N1c3BlbmQsCisJLmdlbl9wZGV2X3Jlc3VtZSA9IGF0aDEwa193bWlfb3BfZ2VuX3BkZXZfcmVzdW1lLAorCS5nZW5fcGRldl9zZXRfcGFyYW0gPSBhdGgxMGtfd21pX29wX2dlbl9wZGV2X3NldF9wYXJhbSwKKwkuZ2VuX3N0b3Bfc2NhbiA9IGF0aDEwa193bWlfb3BfZ2VuX3N0b3Bfc2NhbiwKKwkuZ2VuX3ZkZXZfY3JlYXRlID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9jcmVhdGUsCisJLmdlbl92ZGV2X2RlbGV0ZSA9IGF0aDEwa193bWlfb3BfZ2VuX3ZkZXZfZGVsZXRlLAorCS5nZW5fdmRldl9zdGFydCA9IGF0aDEwa193bWlfb3BfZ2VuX3ZkZXZfc3RhcnQsCisJLmdlbl92ZGV2X3N0b3AgPSBhdGgxMGtfd21pX29wX2dlbl92ZGV2X3N0b3AsCisJLmdlbl92ZGV2X3VwID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl91cCwKKwkuZ2VuX3ZkZXZfZG93biA9IGF0aDEwa193bWlfb3BfZ2VuX3ZkZXZfZG93biwKKwkuZ2VuX3ZkZXZfc2V0X3BhcmFtID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9zZXRfcGFyYW0sCisJLmdlbl92ZGV2X2luc3RhbGxfa2V5ID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9pbnN0YWxsX2tleSwKKwkuZ2VuX3ZkZXZfc3BlY3RyYWxfY29uZiA9IGF0aDEwa193bWlfb3BfZ2VuX3ZkZXZfc3BlY3RyYWxfY29uZiwKKwkuZ2VuX3ZkZXZfc3BlY3RyYWxfZW5hYmxlID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9zcGVjdHJhbF9lbmFibGUsCisJLyogLmdlbl92ZGV2X3dtbV9jb25mIG5vdCBpbXBsZW1lbnRlZCAqLworCS5nZW5fcGVlcl9jcmVhdGUgPSBhdGgxMGtfd21pX29wX2dlbl9wZWVyX2NyZWF0ZSwKKwkuZ2VuX3BlZXJfZGVsZXRlID0gYXRoMTBrX3dtaV9vcF9nZW5fcGVlcl9kZWxldGUsCisJLmdlbl9wZWVyX2ZsdXNoID0gYXRoMTBrX3dtaV9vcF9nZW5fcGVlcl9mbHVzaCwKKwkuZ2VuX3BlZXJfc2V0X3BhcmFtID0gYXRoMTBrX3dtaV9vcF9nZW5fcGVlcl9zZXRfcGFyYW0sCisJLmdlbl9zZXRfcHNtb2RlID0gYXRoMTBrX3dtaV9vcF9nZW5fc2V0X3BzbW9kZSwKKwkuZ2VuX3NldF9zdGFfcHMgPSBhdGgxMGtfd21pX29wX2dlbl9zZXRfc3RhX3BzLAorCS5nZW5fc2V0X2FwX3BzID0gYXRoMTBrX3dtaV9vcF9nZW5fc2V0X2FwX3BzLAorCS5nZW5fc2Nhbl9jaGFuX2xpc3QgPSBhdGgxMGtfd21pX29wX2dlbl9zY2FuX2NoYW5fbGlzdCwKKwkuZ2VuX2JlYWNvbl9kbWEgPSBhdGgxMGtfd21pX29wX2dlbl9iZWFjb25fZG1hLAorCS5nZW5fcGRldl9zZXRfd21tID0gYXRoMTBrX3dtaV9vcF9nZW5fcGRldl9zZXRfd21tLAorCS5nZW5fcmVxdWVzdF9zdGF0cyA9IGF0aDEwa193bWlfb3BfZ2VuX3JlcXVlc3Rfc3RhdHMsCisJLmdlbl9mb3JjZV9md19oYW5nID0gYXRoMTBrX3dtaV9vcF9nZW5fZm9yY2VfZndfaGFuZywKKwkuZ2VuX21nbXRfdHggPSBhdGgxMGtfd21pX29wX2dlbl9tZ210X3R4LAorCS5nZW5fZGJnbG9nX2NmZyA9IGF0aDEwa193bWlfb3BfZ2VuX2RiZ2xvZ19jZmcsCisJLmdlbl9wa3Rsb2dfZW5hYmxlID0gYXRoMTBrX3dtaV9vcF9nZW5fcGt0bG9nX2VuYWJsZSwKKwkuZ2VuX3BrdGxvZ19kaXNhYmxlID0gYXRoMTBrX3dtaV9vcF9nZW5fcGt0bG9nX2Rpc2FibGUsCisJLmdlbl9wZGV2X3NldF9xdWlldF9tb2RlID0gYXRoMTBrX3dtaV9vcF9nZW5fcGRldl9zZXRfcXVpZXRfbW9kZSwKKwkuZ2VuX2FkZGJhX2NsZWFyX3Jlc3AgPSBhdGgxMGtfd21pX29wX2dlbl9hZGRiYV9jbGVhcl9yZXNwLAorCS5nZW5fYWRkYmFfc2VuZCA9IGF0aDEwa193bWlfb3BfZ2VuX2FkZGJhX3NlbmQsCisJLmdlbl9hZGRiYV9zZXRfcmVzcCA9IGF0aDEwa193bWlfb3BfZ2VuX2FkZGJhX3NldF9yZXNwLAorCS5nZW5fZGVsYmFfc2VuZCA9IGF0aDEwa193bWlfb3BfZ2VuX2RlbGJhX3NlbmQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHdtaV9vcHMgd21pXzEwXzJfNF9vcHMgPSB7CisJLnJ4ID0gYXRoMTBrX3dtaV8xMF8yX29wX3J4LAorCS5wdWxsX2Z3X3N0YXRzID0gYXRoMTBrX3dtaV8xMF8yXzRfb3BfcHVsbF9md19zdGF0cywKKwkuZ2VuX2luaXQgPSBhdGgxMGtfd21pXzEwXzJfb3BfZ2VuX2luaXQsCisJLmdlbl9wZWVyX2Fzc29jID0gYXRoMTBrX3dtaV8xMF8yX29wX2dlbl9wZWVyX2Fzc29jLAorCS5nZW5fcGRldl9nZXRfdGVtcGVyYXR1cmUgPSBhdGgxMGtfd21pXzEwXzJfb3BfZ2VuX3BkZXZfZ2V0X3RlbXBlcmF0dXJlLAorCisJLyogc2hhcmVkIHdpdGggMTAuMSAqLworCS5tYXBfc3ZjID0gd21pXzEweF9zdmNfbWFwLAorCS5wdWxsX3N2Y19yZHkgPSBhdGgxMGtfd21pXzEweF9vcF9wdWxsX3N2Y19yZHlfZXYsCisJLmdlbl9wZGV2X3NldF9yZCA9IGF0aDEwa193bWlfMTB4X29wX2dlbl9wZGV2X3NldF9yZCwKKwkuZ2VuX3N0YXJ0X3NjYW4gPSBhdGgxMGtfd21pXzEweF9vcF9nZW5fc3RhcnRfc2NhbiwKKworCS5wdWxsX3NjYW4gPSBhdGgxMGtfd21pX29wX3B1bGxfc2Nhbl9ldiwKKwkucHVsbF9tZ210X3J4ID0gYXRoMTBrX3dtaV9vcF9wdWxsX21nbXRfcnhfZXYsCisJLnB1bGxfY2hfaW5mbyA9IGF0aDEwa193bWlfb3BfcHVsbF9jaF9pbmZvX2V2LAorCS5wdWxsX3ZkZXZfc3RhcnQgPSBhdGgxMGtfd21pX29wX3B1bGxfdmRldl9zdGFydF9ldiwKKwkucHVsbF9wZWVyX2tpY2sgPSBhdGgxMGtfd21pX29wX3B1bGxfcGVlcl9raWNrX2V2LAorCS5wdWxsX3N3YmEgPSBhdGgxMGtfd21pX29wX3B1bGxfc3diYV9ldiwKKwkucHVsbF9waHllcnIgPSBhdGgxMGtfd21pX29wX3B1bGxfcGh5ZXJyX2V2LAorCS5wdWxsX3JkeSA9IGF0aDEwa193bWlfb3BfcHVsbF9yZHlfZXYsCisKKwkuZ2VuX3BkZXZfc3VzcGVuZCA9IGF0aDEwa193bWlfb3BfZ2VuX3BkZXZfc3VzcGVuZCwKKwkuZ2VuX3BkZXZfcmVzdW1lID0gYXRoMTBrX3dtaV9vcF9nZW5fcGRldl9yZXN1bWUsCisJLmdlbl9wZGV2X3NldF9wYXJhbSA9IGF0aDEwa193bWlfb3BfZ2VuX3BkZXZfc2V0X3BhcmFtLAorCS5nZW5fc3RvcF9zY2FuID0gYXRoMTBrX3dtaV9vcF9nZW5fc3RvcF9zY2FuLAorCS5nZW5fdmRldl9jcmVhdGUgPSBhdGgxMGtfd21pX29wX2dlbl92ZGV2X2NyZWF0ZSwKKwkuZ2VuX3ZkZXZfZGVsZXRlID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9kZWxldGUsCisJLmdlbl92ZGV2X3N0YXJ0ID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9zdGFydCwKKwkuZ2VuX3ZkZXZfc3RvcCA9IGF0aDEwa193bWlfb3BfZ2VuX3ZkZXZfc3RvcCwKKwkuZ2VuX3ZkZXZfdXAgPSBhdGgxMGtfd21pX29wX2dlbl92ZGV2X3VwLAorCS5nZW5fdmRldl9kb3duID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9kb3duLAorCS5nZW5fdmRldl9zZXRfcGFyYW0gPSBhdGgxMGtfd21pX29wX2dlbl92ZGV2X3NldF9wYXJhbSwKKwkuZ2VuX3ZkZXZfaW5zdGFsbF9rZXkgPSBhdGgxMGtfd21pX29wX2dlbl92ZGV2X2luc3RhbGxfa2V5LAorCS5nZW5fdmRldl9zcGVjdHJhbF9jb25mID0gYXRoMTBrX3dtaV9vcF9nZW5fdmRldl9zcGVjdHJhbF9jb25mLAorCS5nZW5fdmRldl9zcGVjdHJhbF9lbmFibGUgPSBhdGgxMGtfd21pX29wX2dlbl92ZGV2X3NwZWN0cmFsX2VuYWJsZSwKKwkuZ2VuX3BlZXJfY3JlYXRlID0gYXRoMTBrX3dtaV9vcF9nZW5fcGVlcl9jcmVhdGUsCisJLmdlbl9wZWVyX2RlbGV0ZSA9IGF0aDEwa193bWlfb3BfZ2VuX3BlZXJfZGVsZXRlLAorCS5nZW5fcGVlcl9mbHVzaCA9IGF0aDEwa193bWlfb3BfZ2VuX3BlZXJfZmx1c2gsCisJLmdlbl9wZWVyX3NldF9wYXJhbSA9IGF0aDEwa193bWlfb3BfZ2VuX3BlZXJfc2V0X3BhcmFtLAorCS5nZW5fc2V0X3BzbW9kZSA9IGF0aDEwa193bWlfb3BfZ2VuX3NldF9wc21vZGUsCisJLmdlbl9zZXRfc3RhX3BzID0gYXRoMTBrX3dtaV9vcF9nZW5fc2V0X3N0YV9wcywKKwkuZ2VuX3NldF9hcF9wcyA9IGF0aDEwa193bWlfb3BfZ2VuX3NldF9hcF9wcywKKwkuZ2VuX3NjYW5fY2hhbl9saXN0ID0gYXRoMTBrX3dtaV9vcF9nZW5fc2Nhbl9jaGFuX2xpc3QsCisJLmdlbl9iZWFjb25fZG1hID0gYXRoMTBrX3dtaV9vcF9nZW5fYmVhY29uX2RtYSwKKwkuZ2VuX3BkZXZfc2V0X3dtbSA9IGF0aDEwa193bWlfb3BfZ2VuX3BkZXZfc2V0X3dtbSwKKwkuZ2VuX3JlcXVlc3Rfc3RhdHMgPSBhdGgxMGtfd21pX29wX2dlbl9yZXF1ZXN0X3N0YXRzLAorCS5nZW5fZm9yY2VfZndfaGFuZyA9IGF0aDEwa193bWlfb3BfZ2VuX2ZvcmNlX2Z3X2hhbmcsCisJLmdlbl9tZ210X3R4ID0gYXRoMTBrX3dtaV9vcF9nZW5fbWdtdF90eCwKKwkuZ2VuX2RiZ2xvZ19jZmcgPSBhdGgxMGtfd21pX29wX2dlbl9kYmdsb2dfY2ZnLAorCS5nZW5fcGt0bG9nX2VuYWJsZSA9IGF0aDEwa193bWlfb3BfZ2VuX3BrdGxvZ19lbmFibGUsCisJLmdlbl9wa3Rsb2dfZGlzYWJsZSA9IGF0aDEwa193bWlfb3BfZ2VuX3BrdGxvZ19kaXNhYmxlLAorCS5nZW5fcGRldl9zZXRfcXVpZXRfbW9kZSA9IGF0aDEwa193bWlfb3BfZ2VuX3BkZXZfc2V0X3F1aWV0X21vZGUsCisJLmdlbl9hZGRiYV9jbGVhcl9yZXNwID0gYXRoMTBrX3dtaV9vcF9nZW5fYWRkYmFfY2xlYXJfcmVzcCwKKwkuZ2VuX2FkZGJhX3NlbmQgPSBhdGgxMGtfd21pX29wX2dlbl9hZGRiYV9zZW5kLAorCS5nZW5fYWRkYmFfc2V0X3Jlc3AgPSBhdGgxMGtfd21pX29wX2dlbl9hZGRiYV9zZXRfcmVzcCwKKwkuZ2VuX2RlbGJhX3NlbmQgPSBhdGgxMGtfd21pX29wX2dlbl9kZWxiYV9zZW5kLAorCS8qIC5nZW5fYmNuX3RtcGwgbm90IGltcGxlbWVudGVkICovCisJLyogLmdlbl9wcmJfdG1wbCBub3QgaW1wbGVtZW50ZWQgKi8KKwkvKiAuZ2VuX3AycF9nb19iY25faWUgbm90IGltcGxlbWVudGVkICovCit9OworCiBpbnQgYXRoMTBrX3dtaV9hdHRhY2goc3RydWN0IGF0aDEwayAqYXIpCiB7Ci0JaWYgKHRlc3RfYml0KEFUSDEwS19GV19GRUFUVVJFX1dNSV8xMFgsIGFyLT5md19mZWF0dXJlcykpIHsKLQkJaWYgKHRlc3RfYml0KEFUSDEwS19GV19GRUFUVVJFX1dNSV8xMF8yLCBhci0+ZndfZmVhdHVyZXMpKQotCQkJYXItPndtaS5jbWQgPSAmd21pXzEwXzJfY21kX21hcDsKLQkJZWxzZQotCQkJYXItPndtaS5jbWQgPSAmd21pXzEweF9jbWRfbWFwOwotCisJc3dpdGNoIChhci0+d21pLm9wX3ZlcnNpb24pIHsKKwljYXNlIEFUSDEwS19GV19XTUlfT1BfVkVSU0lPTl8xMF8yXzQ6CisJCWFyLT53bWkuY21kID0gJndtaV8xMF8yXzRfY21kX21hcDsKKwkJYXItPndtaS5vcHMgPSAmd21pXzEwXzJfNF9vcHM7CisJCWFyLT53bWkudmRldl9wYXJhbSA9ICZ3bWlfMTBfMl80X3ZkZXZfcGFyYW1fbWFwOworCQlhci0+d21pLnBkZXZfcGFyYW0gPSAmd21pXzEwXzJfNF9wZGV2X3BhcmFtX21hcDsKKwkJYnJlYWs7CisJY2FzZSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fMTBfMjoKKwkJYXItPndtaS5jbWQgPSAmd21pXzEwXzJfY21kX21hcDsKKwkJYXItPndtaS5vcHMgPSAmd21pXzEwXzJfb3BzOwogCQlhci0+d21pLnZkZXZfcGFyYW0gPSAmd21pXzEweF92ZGV2X3BhcmFtX21hcDsKIAkJYXItPndtaS5wZGV2X3BhcmFtID0gJndtaV8xMHhfcGRldl9wYXJhbV9tYXA7Ci0JfSBlbHNlIHsKKwkJYnJlYWs7CisJY2FzZSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fMTBfMToKKwkJYXItPndtaS5jbWQgPSAmd21pXzEweF9jbWRfbWFwOworCQlhci0+d21pLm9wcyA9ICZ3bWlfMTBfMV9vcHM7CisJCWFyLT53bWkudmRldl9wYXJhbSA9ICZ3bWlfMTB4X3ZkZXZfcGFyYW1fbWFwOworCQlhci0+d21pLnBkZXZfcGFyYW0gPSAmd21pXzEweF9wZGV2X3BhcmFtX21hcDsKKwkJYnJlYWs7CisJY2FzZSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fTUFJTjoKIAkJYXItPndtaS5jbWQgPSAmd21pX2NtZF9tYXA7CisJCWFyLT53bWkub3BzID0gJndtaV9vcHM7CiAJCWFyLT53bWkudmRldl9wYXJhbSA9ICZ3bWlfdmRldl9wYXJhbV9tYXA7CiAJCWFyLT53bWkucGRldl9wYXJhbSA9ICZ3bWlfcGRldl9wYXJhbV9tYXA7CisJCWJyZWFrOworCWNhc2UgQVRIMTBLX0ZXX1dNSV9PUF9WRVJTSU9OX1RMVjoKKwkJYXRoMTBrX3dtaV90bHZfYXR0YWNoKGFyKTsKKwkJYnJlYWs7CisJY2FzZSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fVU5TRVQ6CisJY2FzZSBBVEgxMEtfRldfV01JX09QX1ZFUlNJT05fTUFYOgorCQlhdGgxMGtfZXJyKGFyLCAidW5zdXBwb3J0ZWQgV01JIG9wIHZlcnNpb246ICVkXG4iLAorCQkJICAgYXItPndtaS5vcF92ZXJzaW9uKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaW5pdF9jb21wbGV0aW9uKCZhci0+d21pLnNlcnZpY2VfcmVhZHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGgxMGsvd21pLmgKaW5kZXggMjEzOTE5Mi4uMjBjZTM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDEway93bWkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTBrL3dtaS5oCkBAIC0xMDksNiArMTA5LDQ1IEBACiAJV01JX1NFUlZJQ0VfQlVSU1QsCiAJV01JX1NFUlZJQ0VfU01BUlRfQU5URU5OQV9TV19TVVBQT1JULAogCVdNSV9TRVJWSUNFX1NNQVJUX0FOVEVOTkFfSFdfU1VQUE9SVCwKKwlXTUlfU0VSVklDRV9ST0FNX1NDQU5fT0ZGTE9BRCwKKwlXTUlfU0VSVklDRV9BUF9QU19ERVRFQ1RfT1VUX09GX1NZTkMsCisJV01JX1NFUlZJQ0VfRUFSTFlfUlgsCisJV01JX1NFUlZJQ0VfU1RBX1NNUFMsCisJV01JX1NFUlZJQ0VfRldURVNULAorCVdNSV9TRVJWSUNFX1NUQV9XTU1BQywKKwlXTUlfU0VSVklDRV9URExTLAorCVdNSV9TRVJWSUNFX01DQ19CQ05fSU5URVJWQUxfQ0hBTkdFLAorCVdNSV9TRVJWSUNFX0FEQVBUSVZFX09DUywKKwlXTUlfU0VSVklDRV9CQV9TU05fU1VQUE9SVCwKKwlXTUlfU0VSVklDRV9GSUxURVJfSVBTRUNfTkFUS0VFUEFMSVZFLAorCVdNSV9TRVJWSUNFX1dMQU5fSEIsCisJV01JX1NFUlZJQ0VfTFRFX0FOVF9TSEFSRV9TVVBQT1JULAorCVdNSV9TRVJWSUNFX0JBVENIX1NDQU4sCisJV01JX1NFUlZJQ0VfUVBPV0VSLAorCVdNSV9TRVJWSUNFX1BMTVJFUSwKKwlXTUlfU0VSVklDRV9USEVSTUFMX01HTVQsCisJV01JX1NFUlZJQ0VfUk1DLAorCVdNSV9TRVJWSUNFX01IRl9PRkZMT0FELAorCVdNSV9TRVJWSUNFX0NPRVhfU0FSLAorCVdNSV9TRVJWSUNFX0JDTl9UWFJBVEVfT1ZFUlJJREUsCisJV01JX1NFUlZJQ0VfTkFOLAorCVdNSV9TRVJWSUNFX0wxU1NfU1RBVCwKKwlXTUlfU0VSVklDRV9FU1RJTUFURV9MSU5LU1BFRUQsCisJV01JX1NFUlZJQ0VfT0JTU19TQ0FOLAorCVdNSV9TRVJWSUNFX1RETFNfT0ZGQ0hBTiwKKwlXTUlfU0VSVklDRV9URExTX1VBUFNEX0JVRkZFUl9TVEEsCisJV01JX1NFUlZJQ0VfVERMU19VQVBTRF9TTEVFUF9TVEEsCisJV01JX1NFUlZJQ0VfSUJTU19QV1JTQVZFLAorCVdNSV9TRVJWSUNFX0xQQVNTLAorCVdNSV9TRVJWSUNFX0VYVFNDQU4sCisJV01JX1NFUlZJQ0VfRDBXT1csCisJV01JX1NFUlZJQ0VfSFNPRkZMT0FELAorCVdNSV9TRVJWSUNFX1JPQU1fSE9fT0ZGTE9BRCwKKwlXTUlfU0VSVklDRV9SWF9GVUxMX1JFT1JERVIsCisJV01JX1NFUlZJQ0VfREhDUF9PRkZMT0FELAorCVdNSV9TRVJWSUNFX1NUQV9SWF9JUEFfT0ZGTE9BRF9TVVBQT1JULAorCVdNSV9TRVJWSUNFX01ETlNfT0ZGTE9BRCwKKwlXTUlfU0VSVklDRV9TQVBfQVVUSF9PRkZMT0FELAogCiAJLyoga2VlcCBsYXN0ICovCiAJV01JX1NFUlZJQ0VfTUFYLApAQCAtMjE1LDYgKzI1NCw0NSBAQAogCVNWQ1NUUihXTUlfU0VSVklDRV9CVVJTVCk7CiAJU1ZDU1RSKFdNSV9TRVJWSUNFX1NNQVJUX0FOVEVOTkFfU1dfU1VQUE9SVCk7CiAJU1ZDU1RSKFdNSV9TRVJWSUNFX1NNQVJUX0FOVEVOTkFfSFdfU1VQUE9SVCk7CisJU1ZDU1RSKFdNSV9TRVJWSUNFX1JPQU1fU0NBTl9PRkZMT0FEKTsKKwlTVkNTVFIoV01JX1NFUlZJQ0VfQVBfUFNfREVURUNUX09VVF9PRl9TWU5DKTsKKwlTVkNTVFIoV01JX1NFUlZJQ0VfRUFSTFlfUlgpOworCVNWQ1NUUihXTUlfU0VSVklDRV9TVEFfU01QUyk7CisJU1ZDU1RSKFdNSV9TRVJWSUNFX0ZXVEVTVCk7CisJU1ZDU1RSKFdNSV9TRVJWSUNFX1NUQV9XTU1BQyk7CisJU1ZDU1RSKFdNSV9TRVJWSUNFX1RETFMpOworCVNWQ1NUUihXTUlfU0VSVklDRV9NQ0NfQkNOX0lOVEVSVkFMX0NIQU5HRSk7CisJU1ZDU1RSKFdNSV9TRVJWSUNFX0FEQVBUSVZFX09DUyk7CisJU1ZDU1RSKFdNSV9TRVJWSUNFX0JBX1NTTl9TVVBQT1JUKTsKKwlTVkNTVFIoV01JX1NFUlZJQ0VfRklMVEVSX0lQU0VDX05BVEtFRVBBTElWRSk7CisJU1ZDU1RSKFdNSV9TRVJWSUNFX1dMQU5fSEIpOworCVNWQ1NUUihXTUlfU0VSVklDRV9MVEVfQU5UX1NIQVJFX1NVUFBPUlQpOworCVNWQ1NUUihXTUlfU0VSVklDRV9CQVRDSF9TQ0FOKTsKKwlTVkNTVFIoV01JX1NFUlZJQ0VfUVBPV0VSKTsKKwlTVkNTVFIoV01JX1NFUlZJQ0VfUExNUkVRKTsKKwlTVkNTVFIoV01JX1NFUlZJQ0VfVEhFUk1BTF9NR01UKTsKKwlTVkNTVFIoV01JX1NFUlZJQ0VfUk1DKTsKKwlTVkNTVFIoV01JX1NFUlZJQ0VfTUhGX09GRkxPQUQpOworCVNWQ1NUUihXTUlfU0VSVklDRV9DT0VYX1NBUik7CisJU1ZDU1RSKFdNSV9TRVJWSUNFX0JDTl9UWFJBVEVfT1ZFUlJJREUpOworCVNWQ1NUUihXTUlfU0VSVklDRV9OQU4pOworCVNWQ1NUUihXTUlfU0VSVklDRV9MMVNTX1NUQVQpOworCVNWQ1NUUihXTUlfU0VSVklDRV9FU1RJTUFURV9MSU5LU1BFRUQpOworCVNWQ1NUUihXTUlfU0VSVklDRV9PQlNTX1NDQU4pOworCVNWQ1NUUihXTUlfU0VSVklDRV9URExTX09GRkNIQU4pOworCVNWQ1NUUihXTUlfU0VSVklDRV9URExTX1VBUFNEX0JVRkZFUl9TVEEpOworCVNWQ1NUUihXTUlfU0VSVklDRV9URExTX1VBUFNEX1NMRUVQX1NUQSk7CisJU1ZDU1RSKFdNSV9TRVJWSUNFX0lCU1NfUFdSU0FWRSk7CisJU1ZDU1RSKFdNSV9TRVJWSUNFX0xQQVNTKTsKKwlTVkNTVFIoV01JX1NFUlZJQ0VfRVhUU0NBTik7CisJU1ZDU1RSKFdNSV9TRVJWSUNFX0QwV09XKTsKKwlTVkNTVFIoV01JX1NFUlZJQ0VfSFNPRkZMT0FEKTsKKwlTVkNTVFIoV01JX1NFUlZJQ0VfUk9BTV9IT19PRkZMT0FEKTsKKwlTVkNTVFIoV01JX1NFUlZJQ0VfUlhfRlVMTF9SRU9SREVSKTsKKwlTVkNTVFIoV01JX1NFUlZJQ0VfREhDUF9PRkZMT0FEKTsKKwlTVkNTVFIoV01JX1NFUlZJQ0VfU1RBX1JYX0lQQV9PRkZMT0FEX1NVUFBPUlQpOworCVNWQ1NUUihXTUlfU0VSVklDRV9NRE5TX09GRkxPQUQpOworCVNWQ1NUUihXTUlfU0VSVklDRV9TQVBfQVVUSF9PRkZMT0FEKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC00NzIsNiArNTUwLDggQEAKIAl1MzIgZm9yY2VfZndfaGFuZ19jbWRpZDsKIAl1MzIgZ3Bpb19jb25maWdfY21kaWQ7CiAJdTMyIGdwaW9fb3V0cHV0X2NtZGlkOworCXUzMiBwZGV2X2dldF90ZW1wZXJhdHVyZV9jbWRpZDsKKwl1MzIgdmRldl9zZXRfd21tX3BhcmFtc19jbWRpZDsKIH07CiAKIC8qCkBAIC0xMDc2LDYgKzExNTYsMTEgQEAKIAlXTUlfMTBfMl9QREVWX1NFVF9NSU1PR0FJTl9UQUJMRV9DTURJRCwKIAlXTUlfMTBfMl9QREVWX1JBVEVQV1JfVEFCTEVfQ01ESUQsCiAJV01JXzEwXzJfUERFVl9SQVRFUFdSX0NIQUlOTVNLX1RBQkxFX0NNRElELAorCVdNSV8xMF8yX1BERVZfR0VUX0lORk8sCisJV01JXzEwXzJfVkRFVl9HRVRfSU5GTywKKwlXTUlfMTBfMl9WREVWX0FURl9SRVFVRVNUX0NNRElELAorCVdNSV8xMF8yX1BFRVJfQVRGX1JFUVVFU1RfQ01ESUQsCisJV01JXzEwXzJfUERFVl9HRVRfVEVNUEVSQVRVUkVfQ01ESUQsCiAJV01JXzEwXzJfUERFVl9VVEZfQ01ESUQgPSBXTUlfMTBfMl9FTkRfQ01ESUQgLSAxLAogfTsKIApAQCAtMTExNyw2ICsxMjAyLDggQEAKIAlXTUlfMTBfMl9NQ0FTVF9CVUZfUkVMRUFTRV9FVkVOVElELAogCVdNSV8xMF8yX01DQVNUX0xJU1RfQUdFT1VUX0VWRU5USUQsCiAJV01JXzEwXzJfV0RTX1BFRVJfRVZFTlRJRCwKKwlXTUlfMTBfMl9QRUVSX1NUQV9QU19TVEFURUNIR19FVkVOVElELAorCVdNSV8xMF8yX1BERVZfVEVNUEVSQVRVUkVfRVZFTlRJRCwKIAlXTUlfMTBfMl9QREVWX1VURl9FVkVOVElEID0gV01JXzEwXzJfRU5EX0VWRU5USUQgLSAxLAogfTsKIApAQCAtMTg2Miw2ICsxOTQ5LDExIEBACiAJX19sZTMyIG1heF9mcmFnX2VudHJpZXM7CiB9IF9fcGFja2VkOwogCitlbnVtIHdtaV8xMF8yX2ZlYXR1cmVfbWFzayB7CisJV01JXzEwXzJfUlhfQkFUQ0hfTU9ERSA9IEJJVCgwKSwKKwlXTUlfMTBfMl9BVEZfQ09ORklHICAgID0gQklUKDEpLAorfTsKKwogc3RydWN0IHdtaV9yZXNvdXJjZV9jb25maWdfMTBfMiB7CiAJc3RydWN0IHdtaV9yZXNvdXJjZV9jb25maWdfMTB4IGNvbW1vbjsKIAlfX2xlMzIgbWF4X3BlZXJfZXh0X3N0YXRzOwpAQCAtMTg3MCw3ICsxOTYyLDcgQEAKIAlfX2xlMzIgYmVfbWluX2ZyZWU7CiAJX19sZTMyIHZpX21pbl9mcmVlOwogCV9fbGUzMiB2b19taW5fZnJlZTsKLQlfX2xlMzIgcnhfYmF0Y2htb2RlOyAvKiAwLWRpc2FibGUsIDEtZW5hYmxlICovCisJX19sZTMyIGZlYXR1cmVfbWFzazsKIH0gX19wYWNrZWQ7CiAKICNkZWZpbmUgTlVNX1VOSVRTX0lTX05VTV9WREVWUyAgIDB4MQpAQCAtMjUwNSw2ICsyNTk3LDcgQEAKIAl1MzIgZmFzdF9jaGFubmVsX3Jlc2V0OwogCXUzMiBidXJzdF9kdXI7CiAJdTMyIGJ1cnN0X2VuYWJsZTsKKwl1MzIgY2FsX3BlcmlvZDsKIH07CiAKICNkZWZpbmUgV01JX1BERVZfUEFSQU1fVU5TVVBQT1JURUQgMApAQCAtMjcxNSw2ICsyODA4LDkgQEAKIAlXTUlfMTBYX1BERVZfUEFSQU1fU0VUX01DQVNUMlVDQVNUX01PREUsCiAJV01JXzEwWF9QREVWX1BBUkFNX1NFVF9NQ0FTVDJVQ0FTVF9CVUZGRVIsCiAJV01JXzEwWF9QREVWX1BBUkFNX1JFTU9WRV9NQ0FTVDJVQ0FTVF9CVUZGRVIsCisJV01JXzEwWF9QREVWX1BBUkFNX1BFRVJfU1RBX1BTX1NUQVRFQ0hHX0VOQUJMRSwKKwlXTUlfMTBYX1BERVZfUEFSQU1fUlRTX0ZJWEVEX1JBVEUsCisJV01JXzEwWF9QREVWX1BBUkFNX0NBTF9QRVJJT0QKIH07CiAKIHN0cnVjdCB3bWlfcGRldl9zZXRfcGFyYW1fY21kIHsKQEAgLTI3MjIsNiArMjgxOCw5IEBACiAJX19sZTMyIHBhcmFtX3ZhbHVlOwogfSBfX3BhY2tlZDsKIAorLyogdmFsaWQgcGVyaW9kIGlzIDEgfiA2MDAwMG1zLCB1bml0IGluIG1pbGxpc2Vjb25kICovCisjZGVmaW5lIFdNSV9QREVWX1BBUkFNX0NBTF9QRVJJT0RfTUFYIDYwMDAwCisKIHN0cnVjdCB3bWlfcGRldl9nZXRfdHBjX2NvbmZpZ19jbWQgewogCS8qIHBhcmFtZXRlciAgICovCiAJX19sZTMyIHBhcmFtOwpAQCAtMjg0MSwxNCArMjk0MCwxNCBAQAogCXUzMiBub19hY2s7CiB9OwogCi1zdHJ1Y3Qgd21pX3BkZXZfc2V0X3dtbV9wYXJhbXNfYXJnIHsKK3N0cnVjdCB3bWlfd21tX3BhcmFtc19hbGxfYXJnIHsKIAlzdHJ1Y3Qgd21pX3dtbV9wYXJhbXNfYXJnIGFjX2JlOwogCXN0cnVjdCB3bWlfd21tX3BhcmFtc19hcmcgYWNfYms7CiAJc3RydWN0IHdtaV93bW1fcGFyYW1zX2FyZyBhY192aTsKIAlzdHJ1Y3Qgd21pX3dtbV9wYXJhbXNfYXJnIGFjX3ZvOwogfTsKIAotc3RydWN0IHdhbF9kYmdfdHhfc3RhdHMgeworc3RydWN0IHdtaV9wZGV2X3N0YXRzX3R4IHsKIAkvKiBOdW0gSFRUIGNvb2tpZXMgcXVldWVkIHRvIGRpc3BhdGNoIGxpc3QgKi8KIAlfX2xlMzIgY29tcF9xdWV1ZWQ7CiAKQEAgLTI5MTgsNyArMzAxNyw3IEBACiAJX19sZTMyIHR4b3Bfb3ZmOwogfSBfX3BhY2tlZDsKIAotc3RydWN0IHdhbF9kYmdfcnhfc3RhdHMgeworc3RydWN0IHdtaV9wZGV2X3N0YXRzX3J4IHsKIAkvKiBDbnRzIGFueSBjaGFuZ2UgaW4gcmluZyByb3V0aW5nIG1pZC1wcGR1ICovCiAJX19sZTMyIG1pZF9wcGR1X3JvdXRlX2NoYW5nZTsKIApAQCAtMjk1MiwxNyArMzA1MSwxMSBAQAogCV9fbGUzMiBtcGR1X2VycnM7CiB9IF9fcGFja2VkOwogCi1zdHJ1Y3Qgd2FsX2RiZ19wZWVyX3N0YXRzIHsKK3N0cnVjdCB3bWlfcGRldl9zdGF0c19wZWVyIHsKIAkvKiBSRU1PVkUgVEhJUyBPTkNFIFJFQUwgUEVFUiBTVEFUIENPVU5URVJTIEFSRSBBRERFRCAqLwogCV9fbGUzMiBkdW1teTsKIH0gX19wYWNrZWQ7CiAKLXN0cnVjdCB3YWxfZGJnX3N0YXRzIHsKLQlzdHJ1Y3Qgd2FsX2RiZ190eF9zdGF0cyB0eDsKLQlzdHJ1Y3Qgd2FsX2RiZ19yeF9zdGF0cyByeDsKLQlzdHJ1Y3Qgd2FsX2RiZ19wZWVyX3N0YXRzIHBlZXI7Ci19IF9fcGFja2VkOwotCiBlbnVtIHdtaV9zdGF0c19pZCB7CiAJV01JX1JFUVVFU1RfUEVFUl9TVEFUCT0gMHgwMSwKIAlXTUlfUkVRVUVTVF9BUF9TVEFUCT0gMHgwMgpAQCAtMzAyOSwyMyArMzEyMiwzOCBAQAogCXU4IGRhdGFbMF07CiB9IF9fcGFja2VkOwogCitzdHJ1Y3Qgd21pXzEwXzJfc3RhdHNfZXZlbnQgeworCV9fbGUzMiBzdGF0c19pZDsgLyogJVdNSV9SRVFVRVNUXyAqLworCV9fbGUzMiBudW1fcGRldl9zdGF0czsKKwlfX2xlMzIgbnVtX3BkZXZfZXh0X3N0YXRzOworCV9fbGUzMiBudW1fdmRldl9zdGF0czsKKwlfX2xlMzIgbnVtX3BlZXJfc3RhdHM7CisJX19sZTMyIG51bV9iY25mbHRfc3RhdHM7CisJdTggZGF0YVswXTsKK30gX19wYWNrZWQ7CisKIC8qCiAgKiBQREVWIHN0YXRpc3RpY3MKICAqIFRPRE86IGFkZCBhbGwgUERFViBzdGF0cyBoZXJlCiAgKi8KLXN0cnVjdCB3bWlfcGRldl9zdGF0cyB7Ci0JX19sZTMyIGNoYW5fbmY7ICAgICAgICAvKiBDaGFubmVsIG5vaXNlIGZsb29yICovCi0JX19sZTMyIHR4X2ZyYW1lX2NvdW50OyAvKiBUWCBmcmFtZSBjb3VudCAqLwotCV9fbGUzMiByeF9mcmFtZV9jb3VudDsgLyogUlggZnJhbWUgY291bnQgKi8KLQlfX2xlMzIgcnhfY2xlYXJfY291bnQ7IC8qIHJ4IGNsZWFyIGNvdW50ICovCi0JX19sZTMyIGN5Y2xlX2NvdW50OyAgICAvKiBjeWNsZSBjb3VudCAqLwotCV9fbGUzMiBwaHlfZXJyX2NvdW50OyAgLyogUGh5IGVycm9yIGNvdW50ICovCi0JX19sZTMyIGNoYW5fdHhfcHdyOyAgICAvKiBjaGFubmVsIHR4IHBvd2VyICovCi0Jc3RydWN0IHdhbF9kYmdfc3RhdHMgd2FsOyAvKiBXQUwgZGJnIHN0YXRzICovCitzdHJ1Y3Qgd21pX3BkZXZfc3RhdHNfYmFzZSB7CisJX19sZTMyIGNoYW5fbmY7CisJX19sZTMyIHR4X2ZyYW1lX2NvdW50OworCV9fbGUzMiByeF9mcmFtZV9jb3VudDsKKwlfX2xlMzIgcnhfY2xlYXJfY291bnQ7CisJX19sZTMyIGN5Y2xlX2NvdW50OworCV9fbGUzMiBwaHlfZXJyX2NvdW50OworCV9fbGUzMiBjaGFuX3R4X3B3cjsKIH0gX19wYWNrZWQ7CiAKLXN0cnVjdCB3bWlfMTB4X3BkZXZfc3RhdHMgewotCXN0cnVjdCB3bWlfcGRldl9zdGF0cyBvbGQ7CitzdHJ1Y3Qgd21pX3BkZXZfc3RhdHMgeworCXN0cnVjdCB3bWlfcGRldl9zdGF0c19iYXNlIGJhc2U7CisJc3RydWN0IHdtaV9wZGV2X3N0YXRzX3R4IHR4OworCXN0cnVjdCB3bWlfcGRldl9zdGF0c19yeCByeDsKKwlzdHJ1Y3Qgd21pX3BkZXZfc3RhdHNfcGVlciBwZWVyOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV9wZGV2X3N0YXRzX2V4dHJhIHsKIAlfX2xlMzIgYWNrX3J4X2JhZDsKIAlfX2xlMzIgcnRzX2JhZDsKIAlfX2xlMzIgcnRzX2dvb2Q7CkBAIC0zMDU0LDYgKzMxNjIsMzAgQEAKIAlfX2xlMzIgbWliX2ludF9jb3VudDsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCB3bWlfMTB4X3BkZXZfc3RhdHMgeworCXN0cnVjdCB3bWlfcGRldl9zdGF0c19iYXNlIGJhc2U7CisJc3RydWN0IHdtaV9wZGV2X3N0YXRzX3R4IHR4OworCXN0cnVjdCB3bWlfcGRldl9zdGF0c19yeCByeDsKKwlzdHJ1Y3Qgd21pX3BkZXZfc3RhdHNfcGVlciBwZWVyOworCXN0cnVjdCB3bWlfcGRldl9zdGF0c19leHRyYSBleHRyYTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bWlfcGRldl9zdGF0c19tZW0geworCV9fbGUzMiBkcmFtX2ZyZWU7CisJX19sZTMyIGlyYW1fZnJlZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCB3bWlfMTBfMl9wZGV2X3N0YXRzIHsKKwlzdHJ1Y3Qgd21pX3BkZXZfc3RhdHNfYmFzZSBiYXNlOworCXN0cnVjdCB3bWlfcGRldl9zdGF0c190eCB0eDsKKwlfX2xlMzIgbWNfZHJvcDsKKwlzdHJ1Y3Qgd21pX3BkZXZfc3RhdHNfcnggcng7CisJX19sZTMyIHBkZXZfcnhfdGltZW91dDsKKwlzdHJ1Y3Qgd21pX3BkZXZfc3RhdHNfbWVtIG1lbTsKKwlzdHJ1Y3Qgd21pX3BkZXZfc3RhdHNfcGVlciBwZWVyOworCXN0cnVjdCB3bWlfcGRldl9zdGF0c19leHRyYSBleHRyYTsKK30gX19wYWNrZWQ7CisKIC8qCiAgKiBWREVWIHN0YXRpc3RpY3MKICAqIFRPRE86IGFkZCBhbGwgVkRFViBzdGF0cyBoZXJlCkBAIC0zMDc3LDYgKzMyMDksMzIgQEAKIAlfX2xlMzIgcGVlcl9yeF9yYXRlOwogfSBfX3BhY2tlZDsKIAorc3RydWN0IHdtaV8xMF8yX3BlZXJfc3RhdHMgeworCXN0cnVjdCB3bWlfcGVlcl9zdGF0cyBvbGQ7CisJX19sZTMyIHBlZXJfcnhfcmF0ZTsKKwlfX2xlMzIgY3VycmVudF9wZXI7CisJX19sZTMyIHJldHJpZXM7CisJX19sZTMyIHR4X3JhdGVfY291bnQ7CisJX19sZTMyIG1heF80bXNfZnJhbWVfbGVuOworCV9fbGUzMiB0b3RhbF9zdWJfZnJhbWVzOworCV9fbGUzMiB0eF9ieXRlczsKKwlfX2xlMzIgbnVtX3BrdF9sb3NzX292ZXJmbG93WzRdOworCV9fbGUzMiBudW1fcGt0X2xvc3NfZXhjZXNzX3JldHJ5WzRdOworfSBfX3BhY2tlZDsKKworc3RydWN0IHdtaV8xMF8yXzRfcGVlcl9zdGF0cyB7CisJc3RydWN0IHdtaV8xMF8yX3BlZXJfc3RhdHMgY29tbW9uOworCV9fbGUzMiB1bmtub3duX3ZhbHVlOyAvKiBGSVhNRTogd2hhdCBpcyB0aGlzIHdvcmQ/ICovCit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd21pXzEwXzJfcGRldl9leHRfc3RhdHMgeworCV9fbGUzMiByeF9yc3NpX2NvbWI7CisJX19sZTMyIHJ4X3Jzc2lbNF07CisJX19sZTMyIHJ4X21jc1sxMF07CisJX19sZTMyIHR4X21jc1sxMF07CisJX19sZTMyIGFja19yc3NpOworfSBfX3BhY2tlZDsKKwogc3RydWN0IHdtaV92ZGV2X2NyZWF0ZV9jbWQgewogCV9fbGUzMiB2ZGV2X2lkOwogCV9fbGUzMiB2ZGV2X3R5cGU7CkBAIC0zOTMwLDYgKzQwODgsMTMgQEAKIAkgKiBWYWx1ZXMgZ3JlYXRlciB0aGFuIDAgaW5kaWNhdGUgdGhlIG1heGltdW0gbnVtZXIgb2YgUFMtUG9sbCBmcmFtZXMKIAkgKiBGVyB3aWxsIHNlbmQgYmVmb3JlIHdha2luZyB1cC4KIAkgKi8KKworCS8qIFdoZW4gdS1BUFNEIGlzIGVuYWJsZWQgdGhlIGZpcm13YXJlIHdpbGwgYmUgdmVyeSByZWx1Y3RhbnQgdG8gZXhpdAorCSAqIFNUQSBQUy4gVGhpcyBjb3VsZCByZXN1bHQgaW4gdmVyeSBwb29yIFJ4IHBlcmZvcm1hbmNlIHdpdGggU1RBIGRvaW5nCisJICogUFMtUG9sbCBmb3IgZWFjaCBhbmQgZXZlcnkgYnVmZmVyZWQgZnJhbWUuIFRoaXMgdmFsdWUgaXMgYSBiaXQKKwkgKiBhcmJpdHJhcnkuCisJICovCisJV01JX1NUQV9QU19QU1BPTExfQ09VTlRfVUFQU0QgPSAzLAogfTsKIAogLyoKQEAgLTM5NTUsNiArNDEyMCwzMCBAQAogCVdNSV9TVEFfUFNfVUFQU0RfQUMzX1RSSUdHRVJfRU4gID0gKDEgPDwgNyksCiB9OwogCisjZGVmaW5lIFdNSV9TVEFfVUFQU0RfTUFYX0lOVEVSVkFMX01TRUMgVUlOVF9NQVgKKworc3RydWN0IHdtaV9zdGFfdWFwc2RfYXV0b190cmlnX3BhcmFtIHsKKwlfX2xlMzIgd21tX2FjOworCV9fbGUzMiB1c2VyX3ByaW9yaXR5OworCV9fbGUzMiBzZXJ2aWNlX2ludGVydmFsOworCV9fbGUzMiBzdXNwZW5kX2ludGVydmFsOworCV9fbGUzMiBkZWxheV9pbnRlcnZhbDsKK307CisKK3N0cnVjdCB3bWlfc3RhX3VhcHNkX2F1dG9fdHJpZ19jbWRfZml4ZWRfcGFyYW0geworCV9fbGUzMiB2ZGV2X2lkOworCXN0cnVjdCB3bWlfbWFjX2FkZHIgcGVlcl9tYWNhZGRyOworCV9fbGUzMiBudW1fYWM7Cit9OworCitzdHJ1Y3Qgd21pX3N0YV91YXBzZF9hdXRvX3RyaWdfYXJnIHsKKwl1MzIgd21tX2FjOworCXUzMiB1c2VyX3ByaW9yaXR5OworCXUzMiBzZXJ2aWNlX2ludGVydmFsOworCXUzMiBzdXNwZW5kX2ludGVydmFsOworCXUzMiBkZWxheV9pbnRlcnZhbDsKK307CisKIGVudW0gd21pX3N0YV9wb3dlcnNhdmVfcGFyYW0gewogCS8qCiAJICogQ29udHJvbHMgaG93IGZyYW1lcyBhcmUgcmV0cmlldmQgZnJvbSBBUCB3aGlsZSBTVEEgaXMgc2xlZXBpbmcKQEAgLTQxMjAsNyArNDMwOSw3IEBACiAKIHN0cnVjdCB3bWlfaG9zdF9zd2JhX2V2ZW50IHsKIAlfX2xlMzIgdmRldl9tYXA7Ci0Jc3RydWN0IHdtaV9iY25faW5mbyBiY25faW5mb1sxXTsKKwlzdHJ1Y3Qgd21pX2Jjbl9pbmZvIGJjbl9pbmZvWzBdOwogfSBfX3BhY2tlZDsKIAogI2RlZmluZSBXTUlfTUFYX0FQX1ZERVYgMTYKQEAgLTQzMjUsNyArNDUxNCw3IEBACiAjZGVmaW5lIFdNSV9QRUVSX1NQQVRJQUxfTVVYICAgIDB4MDAyMDAwMDAKICNkZWZpbmUgV01JX1BFRVJfVkhUICAgICAgICAgICAgMHgwMjAwMDAwMAogI2RlZmluZSBXTUlfUEVFUl84ME1IWiAgICAgICAgICAweDA0MDAwMDAwCi0jZGVmaW5lIFdNSV9QRUVSX1BNRiAgICAgICAgICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgV01JX1BFRVJfVkhUXzJHICAgICAgICAgMHgwODAwMDAwMAogCiAvKgogICogUGVlciByYXRlIGNhcGFiaWxpdGllcy4KQEAgLTQ0NzYsNiArNDY2NSwxMSBAQAogCVdNSV9TVEFfS0VFUEFMSVZFX01FVEhPRF9VTlNPTElDSVRBVEVEX0FSUF9SRVNQT05TRSA9IDIsCiB9OwogCisjZGVmaW5lIFdNSV9TVEFfS0VFUEFMSVZFX0lOVEVSVkFMX0RJU0FCTEUgMAorCisvKiBGaXJtd2FyZSBjcmFzaGVzIGlmIGtlZXBhbGl2ZSBpbnRlcnZhbCBleGNlZWRzIHRoaXMgbGltaXQgKi8KKyNkZWZpbmUgV01JX1NUQV9LRUVQQUxJVkVfSU5URVJWQUxfTUFYX1NFQ09ORFMgMHhmZmZmCisKIC8qIG5vdGU6IGlwNCBhZGRyZXNzZXMgYXJlIGluIG5ldHdvcmsgYnl0ZSBvcmRlciwgaS5lLiBiaWcgZW5kaWFuICovCiBzdHJ1Y3Qgd21pX3N0YV9rZWVwYWxpdmVfYXJwX3Jlc3AgewogCV9fYmUzMiBzcmNfaXA0X2FkZHI7CkBAIC00NDkxLDYgKzQ2ODUsMTYgQEAKIAlzdHJ1Y3Qgd21pX3N0YV9rZWVwYWxpdmVfYXJwX3Jlc3AgYXJwX3Jlc3A7CiB9IF9fcGFja2VkOwogCitzdHJ1Y3Qgd21pX3N0YV9rZWVwYWxpdmVfYXJnIHsKKwl1MzIgdmRldl9pZDsKKwl1MzIgZW5hYmxlZDsKKwl1MzIgbWV0aG9kOworCXUzMiBpbnRlcnZhbDsKKwlfX2JlMzIgc3JjX2lwNF9hZGRyOworCV9fYmUzMiBkZXN0X2lwNF9hZGRyOworCWNvbnN0IHU4IGRlc3RfbWFjX2FkZHJbRVRIX0FMRU5dOworfTsKKwogZW51bSB3bWlfZm9yY2VfZndfaGFuZ190eXBlIHsKIAlXTUlfRk9SQ0VfRldfSEFOR19BU1NFUlQgPSAxLAogCVdNSV9GT1JDRV9GV19IQU5HX05PX0RFVEVDVCwKQEAgLTQ1NjcsNiArNDc3MSw1OCBAQAogCiAjZGVmaW5lIFdNSV9NQVhfTUVNX1JFUVMgMTYKIAorc3RydWN0IHdtaV9zY2FuX2V2X2FyZyB7CisJX19sZTMyIGV2ZW50X3R5cGU7IC8qICVXTUlfU0NBTl9FVkVOVF8gKi8KKwlfX2xlMzIgcmVhc29uOyAvKiAlV01JX1NDQU5fUkVBU09OXyAqLworCV9fbGUzMiBjaGFubmVsX2ZyZXE7IC8qIG9ubHkgdmFsaWQgZm9yIFdNSV9TQ0FOX0VWRU5UX0ZPUkVJR05fQ0hBTk5FTCAqLworCV9fbGUzMiBzY2FuX3JlcV9pZDsKKwlfX2xlMzIgc2Nhbl9pZDsKKwlfX2xlMzIgdmRldl9pZDsKK307CisKK3N0cnVjdCB3bWlfbWdtdF9yeF9ldl9hcmcgeworCV9fbGUzMiBjaGFubmVsOworCV9fbGUzMiBzbnI7CisJX19sZTMyIHJhdGU7CisJX19sZTMyIHBoeV9tb2RlOworCV9fbGUzMiBidWZfbGVuOworCV9fbGUzMiBzdGF0dXM7IC8qICVXTUlfUlhfU1RBVFVTXyAqLworfTsKKworc3RydWN0IHdtaV9jaF9pbmZvX2V2X2FyZyB7CisJX19sZTMyIGVycl9jb2RlOworCV9fbGUzMiBmcmVxOworCV9fbGUzMiBjbWRfZmxhZ3M7CisJX19sZTMyIG5vaXNlX2Zsb29yOworCV9fbGUzMiByeF9jbGVhcl9jb3VudDsKKwlfX2xlMzIgY3ljbGVfY291bnQ7Cit9OworCitzdHJ1Y3Qgd21pX3ZkZXZfc3RhcnRfZXZfYXJnIHsKKwlfX2xlMzIgdmRldl9pZDsKKwlfX2xlMzIgcmVxX2lkOworCV9fbGUzMiByZXNwX3R5cGU7IC8qICVXTUlfVkRFVl9SRVNQXyAqLworCV9fbGUzMiBzdGF0dXM7Cit9OworCitzdHJ1Y3Qgd21pX3BlZXJfa2lja19ldl9hcmcgeworCWNvbnN0IHU4ICptYWNfYWRkcjsKK307CisKK3N0cnVjdCB3bWlfc3diYV9ldl9hcmcgeworCV9fbGUzMiB2ZGV2X21hcDsKKwljb25zdCBzdHJ1Y3Qgd21pX3RpbV9pbmZvICp0aW1faW5mb1tXTUlfTUFYX0FQX1ZERVZdOworCWNvbnN0IHN0cnVjdCB3bWlfcDJwX25vYV9pbmZvICpub2FfaW5mb1tXTUlfTUFYX0FQX1ZERVZdOworfTsKKworc3RydWN0IHdtaV9waHllcnJfZXZfYXJnIHsKKwlfX2xlMzIgbnVtX3BoeWVycnM7CisJX19sZTMyIHRzZl9sMzI7CisJX19sZTMyIHRzZl91MzI7CisJX19sZTMyIGJ1Zl9sZW47CisJY29uc3Qgc3RydWN0IHdtaV9waHllcnIgKnBoeWVycnM7Cit9OworCiBzdHJ1Y3Qgd21pX3N2Y19yZHlfZXZfYXJnIHsKIAlfX2xlMzIgbWluX3R4X3Bvd2VyOwogCV9fbGUzMiBtYXhfdHhfcG93ZXI7CkBAIC00NTc0LDYgKzQ4MzAsNyBAQAogCV9fbGUzMiB2aHRfY2FwOwogCV9fbGUzMiBzd192ZXIwOwogCV9fbGUzMiBzd192ZXIxOworCV9fbGUzMiBmd19idWlsZDsKIAlfX2xlMzIgcGh5X2NhcGFiOwogCV9fbGUzMiBudW1fcmZfY2hhaW5zOwogCV9fbGUzMiBlZXByb21fcmQ7CkBAIC00NTgzLDgzICs0ODQwLDk5IEBACiAJY29uc3Qgc3RydWN0IHdsYW5faG9zdF9tZW1fcmVxICptZW1fcmVxc1tXTUlfTUFYX01FTV9SRVFTXTsKIH07CiAKK3N0cnVjdCB3bWlfcmR5X2V2X2FyZyB7CisJX19sZTMyIHN3X3ZlcnNpb247CisJX19sZTMyIGFiaV92ZXJzaW9uOworCV9fbGUzMiBzdGF0dXM7CisJY29uc3QgdTggKm1hY19hZGRyOworfTsKKworc3RydWN0IHdtaV9wZGV2X3RlbXBlcmF0dXJlX2V2ZW50IHsKKwkvKiB0ZW1wZXJhdHVyZSB2YWx1ZSBpbiBDZWxjaXVzIGRlZ3JlZSAqLworCV9fbGUzMiB0ZW1wZXJhdHVyZTsKK30gX19wYWNrZWQ7CisKIHN0cnVjdCBhdGgxMGs7CiBzdHJ1Y3QgYXRoMTBrX3ZpZjsKLXN0cnVjdCBhdGgxMGtfZndfc3RhdHM7CitzdHJ1Y3QgYXRoMTBrX2Z3X3N0YXRzX3BkZXY7CitzdHJ1Y3QgYXRoMTBrX2Z3X3N0YXRzX3BlZXI7CiAKIGludCBhdGgxMGtfd21pX2F0dGFjaChzdHJ1Y3QgYXRoMTBrICphcik7CiB2b2lkIGF0aDEwa193bWlfZGV0YWNoKHN0cnVjdCBhdGgxMGsgKmFyKTsKIGludCBhdGgxMGtfd21pX3dhaXRfZm9yX3NlcnZpY2VfcmVhZHkoc3RydWN0IGF0aDEwayAqYXIpOwogaW50IGF0aDEwa193bWlfd2FpdF9mb3JfdW5pZmllZF9yZWFkeShzdHJ1Y3QgYXRoMTBrICphcik7CiAKK3N0cnVjdCBza19idWZmICphdGgxMGtfd21pX2FsbG9jX3NrYihzdHJ1Y3QgYXRoMTBrICphciwgdTMyIGxlbik7CiBpbnQgYXRoMTBrX3dtaV9jb25uZWN0KHN0cnVjdCBhdGgxMGsgKmFyKTsKIAogc3RydWN0IHNrX2J1ZmYgKmF0aDEwa193bWlfYWxsb2Nfc2tiKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgbGVuKTsKIGludCBhdGgxMGtfd21pX2NtZF9zZW5kKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgY21kX2lkKTsKLQotaW50IGF0aDEwa193bWlfcGRldl9zdXNwZW5kX3RhcmdldChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHN1c3BlbmRfb3B0KTsKLWludCBhdGgxMGtfd21pX3BkZXZfcmVzdW1lX3RhcmdldChzdHJ1Y3QgYXRoMTBrICphcik7Ci1pbnQgYXRoMTBrX3dtaV9wZGV2X3NldF9yZWdkb21haW4oc3RydWN0IGF0aDEwayAqYXIsIHUxNiByZCwgdTE2IHJkMmcsCi0JCQkJICB1MTYgcmQ1ZywgdTE2IGN0bDJnLCB1MTYgY3RsNWcsCi0JCQkJICBlbnVtIHdtaV9kZnNfcmVnaW9uIGRmc19yZWcpOwotaW50IGF0aDEwa193bWlfcGRldl9zZXRfcGFyYW0oc3RydWN0IGF0aDEwayAqYXIsIHUzMiBpZCwgdTMyIHZhbHVlKTsKLWludCBhdGgxMGtfd21pX2NtZF9pbml0KHN0cnVjdCBhdGgxMGsgKmFyKTsKLWludCBhdGgxMGtfd21pX3N0YXJ0X3NjYW4oc3RydWN0IGF0aDEwayAqYXIsIGNvbnN0IHN0cnVjdCB3bWlfc3RhcnRfc2Nhbl9hcmcgKik7CitpbnQgYXRoMTBrX3dtaV9jbWRfc2VuZF9ub3dhaXQoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICAgdTMyIGNtZF9pZCk7CiB2b2lkIGF0aDEwa193bWlfc3RhcnRfc2Nhbl9pbml0KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgd21pX3N0YXJ0X3NjYW5fYXJnICopOwotaW50IGF0aDEwa193bWlfc3RvcF9zY2FuKHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJIGNvbnN0IHN0cnVjdCB3bWlfc3RvcF9zY2FuX2FyZyAqYXJnKTsKLWludCBhdGgxMGtfd21pX3ZkZXZfY3JlYXRlKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKLQkJCSAgIGVudW0gd21pX3ZkZXZfdHlwZSB0eXBlLAotCQkJICAgZW51bSB3bWlfdmRldl9zdWJ0eXBlIHN1YnR5cGUsCi0JCQkgICBjb25zdCB1OCBtYWNhZGRyW0VUSF9BTEVOXSk7Ci1pbnQgYXRoMTBrX3dtaV92ZGV2X2RlbGV0ZShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQpOwotaW50IGF0aDEwa193bWlfdmRldl9zdGFydChzdHJ1Y3QgYXRoMTBrICphciwKLQkJCSAgY29uc3Qgc3RydWN0IHdtaV92ZGV2X3N0YXJ0X3JlcXVlc3RfYXJnICopOwotaW50IGF0aDEwa193bWlfdmRldl9yZXN0YXJ0KHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJICAgIGNvbnN0IHN0cnVjdCB3bWlfdmRldl9zdGFydF9yZXF1ZXN0X2FyZyAqKTsKLWludCBhdGgxMGtfd21pX3ZkZXZfc3RvcChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQpOwotaW50IGF0aDEwa193bWlfdmRldl91cChzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsIHUzMiBhaWQsCi0JCSAgICAgICBjb25zdCB1OCAqYnNzaWQpOwotaW50IGF0aDEwa193bWlfdmRldl9kb3duKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCk7Ci1pbnQgYXRoMTBrX3dtaV92ZGV2X3NldF9wYXJhbShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCi0JCQkgICAgICB1MzIgcGFyYW1faWQsIHUzMiBwYXJhbV92YWx1ZSk7Ci1pbnQgYXRoMTBrX3dtaV92ZGV2X2luc3RhbGxfa2V5KHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJCWNvbnN0IHN0cnVjdCB3bWlfdmRldl9pbnN0YWxsX2tleV9hcmcgKmFyZyk7Ci1pbnQgYXRoMTBrX3dtaV92ZGV2X3NwZWN0cmFsX2NvbmYoc3RydWN0IGF0aDEwayAqYXIsCi0JCQkJICBjb25zdCBzdHJ1Y3Qgd21pX3ZkZXZfc3BlY3RyYWxfY29uZl9hcmcgKmFyZyk7Ci1pbnQgYXRoMTBrX3dtaV92ZGV2X3NwZWN0cmFsX2VuYWJsZShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsIHUzMiB0cmlnZ2VyLAotCQkJCSAgICB1MzIgZW5hYmxlKTsKLWludCBhdGgxMGtfd21pX3BlZXJfY3JlYXRlKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKLQkJCSAgIGNvbnN0IHU4IHBlZXJfYWRkcltFVEhfQUxFTl0pOwotaW50IGF0aDEwa193bWlfcGVlcl9kZWxldGUoc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAotCQkJICAgY29uc3QgdTggcGVlcl9hZGRyW0VUSF9BTEVOXSk7Ci1pbnQgYXRoMTBrX3dtaV9wZWVyX2ZsdXNoKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKLQkJCSAgY29uc3QgdTggcGVlcl9hZGRyW0VUSF9BTEVOXSwgdTMyIHRpZF9iaXRtYXApOwotaW50IGF0aDEwa193bWlfcGVlcl9zZXRfcGFyYW0oc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLAotCQkJICAgICAgY29uc3QgdTggKnBlZXJfYWRkciwKLQkJCSAgICAgIGVudW0gd21pX3BlZXJfcGFyYW0gcGFyYW1faWQsIHUzMiBwYXJhbV92YWx1ZSk7Ci1pbnQgYXRoMTBrX3dtaV9wZWVyX2Fzc29jKHN0cnVjdCBhdGgxMGsgKmFyLAotCQkJICBjb25zdCBzdHJ1Y3Qgd21pX3BlZXJfYXNzb2NfY29tcGxldGVfYXJnICphcmcpOwotaW50IGF0aDEwa193bWlfc2V0X3BzbW9kZShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIHZkZXZfaWQsCi0JCQkgIGVudW0gd21pX3N0YV9wc19tb2RlIHBzbW9kZSk7Ci1pbnQgYXRoMTBrX3dtaV9zZXRfc3RhX3BzX3BhcmFtKHN0cnVjdCBhdGgxMGsgKmFyLCB1MzIgdmRldl9pZCwKLQkJCQllbnVtIHdtaV9zdGFfcG93ZXJzYXZlX3BhcmFtIHBhcmFtX2lkLAotCQkJCXUzMiB2YWx1ZSk7Ci1pbnQgYXRoMTBrX3dtaV9zZXRfYXBfcHNfcGFyYW0oc3RydWN0IGF0aDEwayAqYXIsIHUzMiB2ZGV2X2lkLCBjb25zdCB1OCAqbWFjLAotCQkJICAgICAgIGVudW0gd21pX2FwX3BzX3BlZXJfcGFyYW0gcGFyYW1faWQsIHUzMiB2YWx1ZSk7Ci1pbnQgYXRoMTBrX3dtaV9zY2FuX2NoYW5fbGlzdChzdHJ1Y3QgYXRoMTBrICphciwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCB3bWlfc2Nhbl9jaGFuX2xpc3RfYXJnICphcmcpOwotaW50IGF0aDEwa193bWlfYmVhY29uX3NlbmRfcmVmX25vd2FpdChzdHJ1Y3QgYXRoMTBrX3ZpZiAqYXJ2aWYpOwotaW50IGF0aDEwa193bWlfcGRldl9zZXRfd21tX3BhcmFtcyhzdHJ1Y3QgYXRoMTBrICphciwKLQkJCQkgICBjb25zdCBzdHJ1Y3Qgd21pX3BkZXZfc2V0X3dtbV9wYXJhbXNfYXJnICphcmcpOwotaW50IGF0aDEwa193bWlfcmVxdWVzdF9zdGF0cyhzdHJ1Y3QgYXRoMTBrICphciwgZW51bSB3bWlfc3RhdHNfaWQgc3RhdHNfaWQpOwotaW50IGF0aDEwa193bWlfZm9yY2VfZndfaGFuZyhzdHJ1Y3QgYXRoMTBrICphciwKLQkJCSAgICAgZW51bSB3bWlfZm9yY2VfZndfaGFuZ190eXBlIHR5cGUsIHUzMiBkZWxheV9tcyk7Ci1pbnQgYXRoMTBrX3dtaV9tZ210X3R4KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLWludCBhdGgxMGtfd21pX2RiZ2xvZ19jZmcoc3RydWN0IGF0aDEwayAqYXIsIHUzMiBtb2R1bGVfZW5hYmxlKTsKLWludCBhdGgxMGtfd21pX3B1bGxfZndfc3RhdHMoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgIHN0cnVjdCBhdGgxMGtfZndfc3RhdHMgKnN0YXRzKTsKLWludCBhdGgxMGtfd21pX3BkZXZfcGt0bG9nX2VuYWJsZShzdHJ1Y3QgYXRoMTBrICphciwgdTMyIGV2X2xpc3QpOwotaW50IGF0aDEwa193bWlfcGRldl9wa3Rsb2dfZGlzYWJsZShzdHJ1Y3QgYXRoMTBrICphcik7CisKK3ZvaWQgYXRoMTBrX3dtaV9wdWxsX3BkZXZfc3RhdHNfYmFzZShjb25zdCBzdHJ1Y3Qgd21pX3BkZXZfc3RhdHNfYmFzZSAqc3JjLAorCQkJCSAgICAgc3RydWN0IGF0aDEwa19md19zdGF0c19wZGV2ICpkc3QpOwordm9pZCBhdGgxMGtfd21pX3B1bGxfcGRldl9zdGF0c190eChjb25zdCBzdHJ1Y3Qgd21pX3BkZXZfc3RhdHNfdHggKnNyYywKKwkJCQkgICBzdHJ1Y3QgYXRoMTBrX2Z3X3N0YXRzX3BkZXYgKmRzdCk7Cit2b2lkIGF0aDEwa193bWlfcHVsbF9wZGV2X3N0YXRzX3J4KGNvbnN0IHN0cnVjdCB3bWlfcGRldl9zdGF0c19yeCAqc3JjLAorCQkJCSAgIHN0cnVjdCBhdGgxMGtfZndfc3RhdHNfcGRldiAqZHN0KTsKK3ZvaWQgYXRoMTBrX3dtaV9wdWxsX3BkZXZfc3RhdHNfZXh0cmEoY29uc3Qgc3RydWN0IHdtaV9wZGV2X3N0YXRzX2V4dHJhICpzcmMsCisJCQkJICAgICAgc3RydWN0IGF0aDEwa19md19zdGF0c19wZGV2ICpkc3QpOwordm9pZCBhdGgxMGtfd21pX3B1bGxfcGVlcl9zdGF0cyhjb25zdCBzdHJ1Y3Qgd21pX3BlZXJfc3RhdHMgKnNyYywKKwkJCQlzdHJ1Y3QgYXRoMTBrX2Z3X3N0YXRzX3BlZXIgKmRzdCk7Cit2b2lkIGF0aDEwa193bWlfcHV0X2hvc3RfbWVtX2NodW5rcyhzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkgICAgc3RydWN0IHdtaV9ob3N0X21lbV9jaHVua3MgKmNodW5rcyk7Cit2b2lkIGF0aDEwa193bWlfcHV0X3N0YXJ0X3NjYW5fY29tbW9uKHN0cnVjdCB3bWlfc3RhcnRfc2Nhbl9jb21tb24gKmNtbiwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgd21pX3N0YXJ0X3NjYW5fYXJnICphcmcpOwordm9pZCBhdGgxMGtfd21pX3NldF93bW1fcGFyYW0oc3RydWN0IHdtaV93bW1fcGFyYW1zICpwYXJhbXMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgd21pX3dtbV9wYXJhbXNfYXJnICphcmcpOwordm9pZCBhdGgxMGtfd21pX3B1dF93bWlfY2hhbm5lbChzdHJ1Y3Qgd21pX2NoYW5uZWwgKmNoLAorCQkJCWNvbnN0IHN0cnVjdCB3bWlfY2hhbm5lbF9hcmcgKmFyZyk7CitpbnQgYXRoMTBrX3dtaV9zdGFydF9zY2FuX3ZlcmlmeShjb25zdCBzdHJ1Y3Qgd21pX3N0YXJ0X3NjYW5fYXJnICphcmcpOworCitpbnQgYXRoMTBrX3dtaV9ldmVudF9zY2FuKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBhdGgxMGtfd21pX2V2ZW50X21nbXRfcngoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBhdGgxMGtfd21pX2V2ZW50X2NoYW5faW5mbyhzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aDEwa193bWlfZXZlbnRfZWNobyhzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgYXRoMTBrX3dtaV9ldmVudF9kZWJ1Z19tZXNnKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF91cGRhdGVfc3RhdHMoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBhdGgxMGtfd21pX2V2ZW50X3ZkZXZfc3RhcnRfcmVzcChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aDEwa193bWlfZXZlbnRfdmRldl9zdG9wcGVkKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF9wZWVyX3N0YV9raWNrb3V0KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF9ob3N0X3N3YmEoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBhdGgxMGtfd21pX2V2ZW50X3RidHRvZmZzZXRfdXBkYXRlKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF9kZnMoc3RydWN0IGF0aDEwayAqYXIsCisJCQkgIGNvbnN0IHN0cnVjdCB3bWlfcGh5ZXJyICpwaHllcnIsIHU2NCB0c2YpOwordm9pZCBhdGgxMGtfd21pX2V2ZW50X3NwZWN0cmFsX3NjYW4oc3RydWN0IGF0aDEwayAqYXIsCisJCQkJICAgIGNvbnN0IHN0cnVjdCB3bWlfcGh5ZXJyICpwaHllcnIsCisJCQkJICAgIHU2NCB0c2YpOwordm9pZCBhdGgxMGtfd21pX2V2ZW50X3BoeWVycihzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aDEwa193bWlfZXZlbnRfcm9hbShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aDEwa193bWlfZXZlbnRfcHJvZmlsZV9tYXRjaChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aDEwa193bWlfZXZlbnRfZGVidWdfcHJpbnQoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBhdGgxMGtfd21pX2V2ZW50X3BkZXZfcXZpdChzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aDEwa193bWlfZXZlbnRfd2xhbl9wcm9maWxlX2RhdGEoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBhdGgxMGtfd21pX2V2ZW50X3J0dF9tZWFzdXJlbWVudF9yZXBvcnQoc3RydWN0IGF0aDEwayAqYXIsCisJCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aDEwa193bWlfZXZlbnRfdHNmX21lYXN1cmVtZW50X3JlcG9ydChzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF9ydHRfZXJyb3JfcmVwb3J0KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF93b3dfd2FrZXVwX2hvc3Qoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBhdGgxMGtfd21pX2V2ZW50X2Rjc19pbnRlcmZlcmVuY2Uoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBhdGgxMGtfd21pX2V2ZW50X3BkZXZfdHBjX2NvbmZpZyhzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aDEwa193bWlfZXZlbnRfcGRldl9mdG1faW50ZyhzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aDEwa193bWlfZXZlbnRfZ3RrX29mZmxvYWRfc3RhdHVzKHN0cnVjdCBhdGgxMGsgKmFyLAorCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aDEwa193bWlfZXZlbnRfZ3RrX3Jla2V5X2ZhaWwoc3RydWN0IGF0aDEwayAqYXIsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBhdGgxMGtfd21pX2V2ZW50X2RlbGJhX2NvbXBsZXRlKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF9hZGRiYV9jb21wbGV0ZShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aDEwa193bWlfZXZlbnRfdmRldl9pbnN0YWxsX2tleV9jb21wbGV0ZShzdHJ1Y3QgYXRoMTBrICphciwKKwkJCQkJCXN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBhdGgxMGtfd21pX2V2ZW50X2luc3RfcnNzaV9zdGF0cyhzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aDEwa193bWlfZXZlbnRfdmRldl9zdGFuZGJ5X3JlcShzdHJ1Y3QgYXRoMTBrICphciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIGF0aDEwa193bWlfZXZlbnRfdmRldl9yZXN1bWVfcmVxKHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgYXRoMTBrX3dtaV9ldmVudF9zZXJ2aWNlX3JlYWR5KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBhdGgxMGtfd21pX2V2ZW50X3JlYWR5KHN0cnVjdCBhdGgxMGsgKmFyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogI2VuZGlmIC8qIF9XTUlfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9haGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9haGIuYwppbmRleCA4ZjM4N2NmLi4yY2E4OGI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYWhiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2FoYi5jCkBAIC0yMjcsNyArMjI3LDYgQEAKIAkucmVtb3ZlICAgICA9IGF0aF9haGJfcmVtb3ZlLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJhcjIzMXgtd21hYyIsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvbWFjODAyMTEtb3BzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvbWFjODAyMTEtb3BzLmMKaW5kZXggMTllYWIyYS4uM2I0YTY0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL21hYzgwMjExLW9wcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9tYWM4MDIxMS1vcHMuYwpAQCAtNjcyLDEwICs2NzIsMTAgQEAKIAlzcGluX2xvY2tfYmgoJmNvbW1vbi0+Y2NfbG9jayk7CiAJYXRoX2h3X2N5Y2xlX2NvdW50ZXJzX3VwZGF0ZShjb21tb24pOwogCWlmIChjYy0+Y3ljbGVzID4gMCkgewotCQlhaC0+c3VydmV5LmNoYW5uZWxfdGltZSArPSBjYy0+Y3ljbGVzIC8gZGl2OwotCQlhaC0+c3VydmV5LmNoYW5uZWxfdGltZV9idXN5ICs9IGNjLT5yeF9idXN5IC8gZGl2OwotCQlhaC0+c3VydmV5LmNoYW5uZWxfdGltZV9yeCArPSBjYy0+cnhfZnJhbWUgLyBkaXY7Ci0JCWFoLT5zdXJ2ZXkuY2hhbm5lbF90aW1lX3R4ICs9IGNjLT50eF9mcmFtZSAvIGRpdjsKKwkJYWgtPnN1cnZleS50aW1lICs9IGNjLT5jeWNsZXMgLyBkaXY7CisJCWFoLT5zdXJ2ZXkudGltZV9idXN5ICs9IGNjLT5yeF9idXN5IC8gZGl2OworCQlhaC0+c3VydmV5LnRpbWVfcnggKz0gY2MtPnJ4X2ZyYW1lIC8gZGl2OworCQlhaC0+c3VydmV5LnRpbWVfdHggKz0gY2MtPnR4X2ZyYW1lIC8gZGl2OwogCX0KIAltZW1zZXQoY2MsIDAsIHNpemVvZigqY2MpKTsKIAlzcGluX3VubG9ja19iaCgmY29tbW9uLT5jY19sb2NrKTsKQEAgLTY4NiwxMCArNjg2LDEwIEBACiAJc3VydmV5LT5ub2lzZSA9IGFoLT5haF9ub2lzZV9mbG9vcjsKIAlzdXJ2ZXktPmZpbGxlZCA9IFNVUlZFWV9JTkZPX05PSVNFX0RCTSB8CiAJCQlTVVJWRVlfSU5GT19JTl9VU0UgfAotCQkJU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FIHwKLQkJCVNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRV9CVVNZIHwKLQkJCVNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRV9SWCB8Ci0JCQlTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfVFg7CisJCQlTVVJWRVlfSU5GT19USU1FIHwKKwkJCVNVUlZFWV9JTkZPX1RJTUVfQlVTWSB8CisJCQlTVVJWRVlfSU5GT19USU1FX1JYIHwKKwkJCVNVUlZFWV9JTkZPX1RJTUVfVFg7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYwppbmRleCBjNjBkMzZhLi5iZjI5ZGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCkBAIC05MTIsNiArOTEyLDcgQEAKIAkJcGN1X3JlZyB8PSBBUjVLX1NUQV9JRDFfS0VZU1JDSF9NT0RFCiAJCQl8IChhaC0+YWhfdmVyc2lvbiA9PSBBUjVLX0FSNTIxMCA/CiAJCQkJQVI1S19TVEFfSUQxX1BXUl9TViA6IDApOworCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6CiAJCXBjdV9yZWcgfD0gQVI1S19TVEFfSUQxX0tFWVNSQ0hfTU9ERQogCQkJfCAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTAgPwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwppbmRleCBhMzM5OWM0Li5iOWI2NTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwpAQCAtNDc4LDcgKzQ3OCw3IEBACiAJcmVndmFsID0gaW9yZWFkMzIocmVnKTsKIAlpb3dyaXRlMzIocmVndmFsIHwgdmFsLCByZWcpOwogCXJlZ3ZhbCA9IGlvcmVhZDMyKHJlZyk7Ci0JdXNsZWVwX3JhbmdlKDEwMCwgMTUwKTsKKwl1ZGVsYXkoMTAwKTsJLyogTkI6IHNob3VsZCBiZSBhdG9taWMgKi8KIAogCS8qIEJyaW5nIEJCL01BQyBvdXQgb2YgcmVzZXQgKi8KIAlpb3dyaXRlMzIocmVndmFsICYgfnZhbCwgcmVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvY2ZnODAyMTEuYwppbmRleCA3YTUzMzc4Li44NWRhNjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL2NmZzgwMjExLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDZrbC9jZmc4MDIxMS5jCkBAIC0xNzk5LDIwICsxNzk5LDIwIEBACiAKIAlpZiAodmlmLT50YXJnZXRfc3RhdHMucnhfYnl0ZSkgewogCQlzaW5mby0+cnhfYnl0ZXMgPSB2aWYtPnRhcmdldF9zdGF0cy5yeF9ieXRlOwotCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19SWF9CWVRFUzY0OworCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX1JYX0JZVEVTNjQpOwogCQlzaW5mby0+cnhfcGFja2V0cyA9IHZpZi0+dGFyZ2V0X3N0YXRzLnJ4X3BrdDsKLQkJc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fUlhfUEFDS0VUUzsKKwkJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19SWF9QQUNLRVRTKTsKIAl9CiAKIAlpZiAodmlmLT50YXJnZXRfc3RhdHMudHhfYnl0ZSkgewogCQlzaW5mby0+dHhfYnl0ZXMgPSB2aWYtPnRhcmdldF9zdGF0cy50eF9ieXRlOwotCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19UWF9CWVRFUzY0OworCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX1RYX0JZVEVTNjQpOwogCQlzaW5mby0+dHhfcGFja2V0cyA9IHZpZi0+dGFyZ2V0X3N0YXRzLnR4X3BrdDsKLQkJc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fVFhfUEFDS0VUUzsKKwkJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9QQUNLRVRTKTsKIAl9CiAKIAlzaW5mby0+c2lnbmFsID0gdmlmLT50YXJnZXRfc3RhdHMuY3NfcnNzaTsKLQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19TSUdOQUw7CisJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19TSUdOQUwpOwogCiAJcmF0ZSA9IHZpZi0+dGFyZ2V0X3N0YXRzLnR4X3VjYXN0X3JhdGU7CiAKQEAgLTE4MjcsNiArMTgyNyw3IEBACiAJCX0KIAogCQlzaW5mby0+dHhyYXRlLmZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU19NQ1M7CisJCXNpbmZvLT50eHJhdGUuYncgPSBSQVRFX0lORk9fQldfMjA7CiAJfSBlbHNlIGlmIChpc19yYXRlX2h0NDAocmF0ZSwgJm1jcywgJnNnaSkpIHsKIAkJaWYgKHNnaSkgewogCQkJc2luZm8tPnR4cmF0ZS5mbGFncyB8PSBSQVRFX0lORk9fRkxBR1NfU0hPUlRfR0k7CkBAIC0xODM1LDcgKzE4MzYsNyBAQAogCQkJc2luZm8tPnR4cmF0ZS5tY3MgPSBtY3M7CiAJCX0KIAotCQlzaW5mby0+dHhyYXRlLmZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU180MF9NSFpfV0lEVEg7CisJCXNpbmZvLT50eHJhdGUuYncgPSBSQVRFX0lORk9fQldfNDA7CiAJCXNpbmZvLT50eHJhdGUuZmxhZ3MgfD0gUkFURV9JTkZPX0ZMQUdTX01DUzsKIAl9IGVsc2UgewogCQlhdGg2a2xfZGJnKEFUSDZLTF9EQkdfV0xBTl9DRkcsCkBAIC0xODQ0LDEyICsxODQ1LDEyIEBACiAJCXJldHVybiAwOwogCX0KIAotCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1RYX0JJVFJBVEU7CisJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKTsKIAogCWlmICh0ZXN0X2JpdChDT05ORUNURUQsICZ2aWYtPmZsYWdzKSAmJgogCSAgICB0ZXN0X2JpdChEVElNX1BFUklPRF9BVkFJTCwgJnZpZi0+ZmxhZ3MpICYmCiAJICAgIHZpZi0+bndfdHlwZSA9PSBJTkZSQV9ORVRXT1JLKSB7Ci0JCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX0JTU19QQVJBTTsKKwkJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19CU1NfUEFSQU0pOwogCQlzaW5mby0+YnNzX3BhcmFtLmZsYWdzID0gMDsKIAkJc2luZm8tPmJzc19wYXJhbS5kdGltX3BlcmlvZCA9IHZpZi0+YXNzb2NfYnNzX2R0aW1fcGVyaW9kOwogCQlzaW5mby0+YnNzX3BhcmFtLmJlYWNvbl9pbnRlcnZhbCA9IHZpZi0+YXNzb2NfYnNzX2JlYWNvbl9pbnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNmtsL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jCmluZGV4IDkzM2FlZjAuLmI0MmJhNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg2a2wvbWFpbi5jCkBAIC00ODgsNyArNDg4LDYgQEAKIAogCXNpbmZvLmFzc29jX3JlcV9pZXMgPSBpZXM7CiAJc2luZm8uYXNzb2NfcmVxX2llc19sZW4gPSBpZXNfbGVuOwotCXNpbmZvLmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fQVNTT0NfUkVRX0lFUzsKIAogCWNmZzgwMjExX25ld19zdGEodmlmLT5uZGV2LCBtYWNfYWRkciwgJnNpbmZvLCBHRlBfS0VSTkVMKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jCmluZGV4IGUwMDBjNGMuLmJkNGExYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9haGIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYWhiLmMKQEAgLTQzLDYgKzQzLDEwIEBACiAJCS5uYW1lID0gInFjYTk1M3hfd21hYyIsCiAJCS5kcml2ZXJfZGF0YSA9IEFSOTMwMF9ERVZJRF9BUjk1M1gsCiAJfSwKKwl7CisJCS5uYW1lID0gInFjYTk1Nnhfd21hYyIsCisJCS5kcml2ZXJfZGF0YSA9IEFSOTMwMF9ERVZJRF9RQ0E5NTZYLAorCX0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYW5pLmMKaW5kZXggYmE1MDJhMi4uY2EwMWQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FuaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hbmkuYwpAQCAtMjU5LDcgKzI1OSw4IEBACiAJCQkJICAgICBlbnRyeV9jY2stPmZpcl9zdGVwX2xldmVsKTsKIAogCS8qIFNraXAgTVJDIENDSyBmb3IgcHJlIEFSOTAwMyBmYW1pbGllcyAqLwotCWlmICghQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSB8fCBBUl9TUkVWXzk0ODUoYWgpIHx8IEFSX1NSRVZfOTU2NShhaCkpCisJaWYgKCFBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpIHx8IEFSX1NSRVZfOTQ4NShhaCkgfHwKKwkgICAgQVJfU1JFVl85NTY1KGFoKSB8fCBBUl9TUkVWXzk1NjEoYWgpKQogCQlyZXR1cm47CiAKIAlpZiAoYW5pU3RhdGUtPm1yY0NDSyAhPSBlbnRyeV9jY2stPm1yY19jY2tfb24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI1MDA4X3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyNTAwOF9waHkuYwppbmRleCA1ODI5MDc0Li5mMjczNDI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI1MDA4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjUwMDhfcGh5LmMKQEAgLTIyLDYgKzIyLDIxIEBACiAKIC8qIEFsbCBjb2RlIGJlbG93IGlzIGZvciBBUjUwMDgsIEFSOTAwMSwgQVI5MDAyICovCiAKKyNkZWZpbmUgQVI1MDA4X09GRE1fUkFURVMJCTgKKyNkZWZpbmUgQVI1MDA4X0hUX1NTX1JBVEVTCQk4CisjZGVmaW5lIEFSNTAwOF9IVF9EU19SQVRFUwkJOAorCisjZGVmaW5lIEFSNTAwOF9IVDIwX1NISUZUCQkxNgorI2RlZmluZSBBUjUwMDhfSFQ0MF9TSElGVAkJMjQKKworI2RlZmluZSBBUjUwMDhfMTFOQV9PRkRNX1NISUZUCQkwCisjZGVmaW5lIEFSNTAwOF8xMU5BX0hUX1NTX1NISUZUCQk4CisjZGVmaW5lIEFSNTAwOF8xMU5BX0hUX0RTX1NISUZUCQkxNgorCisjZGVmaW5lIEFSNTAwOF8xMU5HX09GRE1fU0hJRlQJCTQKKyNkZWZpbmUgQVI1MDA4XzExTkdfSFRfU1NfU0hJRlQJCTEyCisjZGVmaW5lIEFSNTAwOF8xMU5HX0hUX0RTX1NISUZUCQkyMAorCiBzdGF0aWMgY29uc3QgaW50IGZpcnN0ZXBfdGFibGVbXSA9CiAvKiBsZXZlbDogIDAgICAxICAgMiAgIDMgICA0ICAgNSAgIDYgICA3ICAgOCAgKi8KIAl7IC00LCAtMiwgIDAsICAyLCAgNCwgIDYsICA4LCAxMCwgMTIgfTsgLyogbHZsIDAtOCwgZGVmYXVsdCAyICovCkBAIC0xMjM1LDYgKzEyNTAsNzEgQEAKIAljb25mLT5yYWRhcl9pbmJhbmQgPSA4OwogfQogCitzdGF0aWMgdm9pZCBhcjUwMDhfaHdfaW5pdF90eHBvd2VyX2NjayhzdHJ1Y3QgYXRoX2h3ICphaCwgaW50MTZfdCAqcmF0ZV9hcnJheSkKK3sKKyNkZWZpbmUgQ0NLX0RFTFRBKHgpICgoT0xDX0ZPUl9BUjkyODBfMjBfTEFURVIpID8gbWF4KCh4KSAtIDIsIDApIDogKHgpKQorCWFoLT50eF9wb3dlclswXSA9IENDS19ERUxUQShyYXRlX2FycmF5W3JhdGUxbF0pOworCWFoLT50eF9wb3dlclsxXSA9IENDS19ERUxUQShtaW4ocmF0ZV9hcnJheVtyYXRlMmxdLAorCQkJCQlyYXRlX2FycmF5W3JhdGUyc10pKTsKKwlhaC0+dHhfcG93ZXJbMl0gPSBDQ0tfREVMVEEobWluKHJhdGVfYXJyYXlbcmF0ZTVfNWxdLAorCQkJCQlyYXRlX2FycmF5W3JhdGU1XzVzXSkpOworCWFoLT50eF9wb3dlclszXSA9IENDS19ERUxUQShtaW4ocmF0ZV9hcnJheVtyYXRlMTFsXSwKKwkJCQkJcmF0ZV9hcnJheVtyYXRlMTFzXSkpOworI3VuZGVmIENDS19ERUxUQQorfQorCitzdGF0aWMgdm9pZCBhcjUwMDhfaHdfaW5pdF90eHBvd2VyX29mZG0oc3RydWN0IGF0aF9odyAqYWgsIGludDE2X3QgKnJhdGVfYXJyYXksCisJCQkJCWludCBvZmZzZXQpCit7CisJaW50IGksIGlkeCA9IDA7CisKKwlmb3IgKGkgPSBvZmZzZXQ7IGkgPCBvZmZzZXQgKyBBUjUwMDhfT0ZETV9SQVRFUzsgaSsrKSB7CisJCWFoLT50eF9wb3dlcltpXSA9IHJhdGVfYXJyYXlbaWR4XTsKKwkJaWR4Kys7CisJfQorfQorCitzdGF0aWMgdm9pZCBhcjUwMDhfaHdfaW5pdF90eHBvd2VyX2h0KHN0cnVjdCBhdGhfaHcgKmFoLCBpbnQxNl90ICpyYXRlX2FycmF5LAorCQkJCSAgICAgIGludCBzc19vZmZzZXQsIGludCBkc19vZmZzZXQsCisJCQkJICAgICAgYm9vbCBpc180MCwgaW50IGh0NDBfZGVsdGEpCit7CisJaW50IGksIG1jc19pZHggPSAoaXNfNDApID8gQVI1MDA4X0hUNDBfU0hJRlQgOiBBUjUwMDhfSFQyMF9TSElGVDsKKworCWZvciAoaSA9IHNzX29mZnNldDsgaSA8IHNzX29mZnNldCArIEFSNTAwOF9IVF9TU19SQVRFUzsgaSsrKSB7CisJCWFoLT50eF9wb3dlcltpXSA9IHJhdGVfYXJyYXlbbWNzX2lkeF0gKyBodDQwX2RlbHRhOworCQltY3NfaWR4Kys7CisJfQorCW1lbWNweSgmYWgtPnR4X3Bvd2VyW2RzX29mZnNldF0sICZhaC0+dHhfcG93ZXJbc3Nfb2Zmc2V0XSwKKwkgICAgICAgQVI1MDA4X0hUX1NTX1JBVEVTKTsKK30KKwordm9pZCBhcjUwMDhfaHdfaW5pdF9yYXRlX3R4cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsIGludDE2X3QgKnJhdGVfYXJyYXksCisJCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLCBpbnQgaHQ0MF9kZWx0YSkKK3sKKwlpZiAoSVNfQ0hBTl81R0haKGNoYW4pKSB7CisJCWFyNTAwOF9od19pbml0X3R4cG93ZXJfb2ZkbShhaCwgcmF0ZV9hcnJheSwKKwkJCQkJICAgIEFSNTAwOF8xMU5BX09GRE1fU0hJRlQpOworCQlpZiAoSVNfQ0hBTl9IVDIwKGNoYW4pIHx8IElTX0NIQU5fSFQ0MChjaGFuKSkgeworCQkJYXI1MDA4X2h3X2luaXRfdHhwb3dlcl9odChhaCwgcmF0ZV9hcnJheSwKKwkJCQkJCSAgQVI1MDA4XzExTkFfSFRfU1NfU0hJRlQsCisJCQkJCQkgIEFSNTAwOF8xMU5BX0hUX0RTX1NISUZULAorCQkJCQkJICBJU19DSEFOX0hUNDAoY2hhbiksCisJCQkJCQkgIGh0NDBfZGVsdGEpOworCQl9CisJfSBlbHNlIHsKKwkJYXI1MDA4X2h3X2luaXRfdHhwb3dlcl9jY2soYWgsIHJhdGVfYXJyYXkpOworCQlhcjUwMDhfaHdfaW5pdF90eHBvd2VyX29mZG0oYWgsIHJhdGVfYXJyYXksCisJCQkJCSAgICBBUjUwMDhfMTFOR19PRkRNX1NISUZUKTsKKwkJaWYgKElTX0NIQU5fSFQyMChjaGFuKSB8fCBJU19DSEFOX0hUNDAoY2hhbikpIHsKKwkJCWFyNTAwOF9od19pbml0X3R4cG93ZXJfaHQoYWgsIHJhdGVfYXJyYXksCisJCQkJCQkgIEFSNTAwOF8xMU5HX0hUX1NTX1NISUZULAorCQkJCQkJICBBUjUwMDhfMTFOR19IVF9EU19TSElGVCwKKwkJCQkJCSAgSVNfQ0hBTl9IVDQwKGNoYW4pLAorCQkJCQkJICBodDQwX2RlbHRhKTsKKwkJfQorCX0KK30KKwogaW50IGFyNTAwOF9od19hdHRhY2hfcGh5X29wcyhzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlzdHJ1Y3QgYXRoX2h3X3ByaXZhdGVfb3BzICpwcml2X29wcyA9IGF0aDlrX2h3X3ByaXZhdGVfb3BzKGFoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfY2FsaWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfY2FsaWIuYwppbmRleCAwNmFiNzFkYi4uMTc0NDQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfY2FsaWIuYwpAQCAtMTIwMywyNCArMTIwMyw0MSBAQAogc3RhdGljIHZvaWQgYXI5MDAzX2h3X21hbnVhbF9wZWFrX2NhbChzdHJ1Y3QgYXRoX2h3ICphaCwgdTggY2hhaW4sIGJvb2wgaXNfMmcpCiB7CiAJaW50IG9mZnNldFs4XSA9IHswfSwgdG90YWwgPSAwLCB0ZXN0OwotCWludCBhZ2Nfb3V0LCBpOworCWludCBhZ2Nfb3V0LCBpLCBwZWFrX2RldGVjdF90aHJlc2hvbGQ7CiAKKwlpZiAoQVJfU1JFVl85NTUwKGFoKSB8fCBBUl9TUkVWXzk1MzEoYWgpKQorCQlwZWFrX2RldGVjdF90aHJlc2hvbGQgPSA4OworCWVsc2UKKwkJcGVha19kZXRlY3RfdGhyZXNob2xkID0gMDsKKworCS8qCisJICogVHVybiBvZmYgTE5BL1NXLgorCSAqLwogCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV82NU5NX1JYUkZfR0FJTlNUQUdFUyhjaGFpbiksCiAJCSAgICAgIEFSX1BIWV82NU5NX1JYUkZfR0FJTlNUQUdFU19SWF9PVkVSUklERSwgMHgxKTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfNjVOTV9SWFJGX0dBSU5TVEFHRVMoY2hhaW4pLAogCQkgICAgICBBUl9QSFlfNjVOTV9SWFJGX0dBSU5TVEFHRVNfTE5BT05fQ0FMREMsIDB4MCk7Ci0JaWYgKGlzXzJnKQotCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfNjVOTV9SWFJGX0dBSU5TVEFHRVMoY2hhaW4pLAotCQkJICAgICAgQVJfUEhZXzY1Tk1fUlhSRl9HQUlOU1RBR0VTX0xOQTJHX0dBSU5fT1ZSLCAweDApOwotCWVsc2UKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZXzY1Tk1fUlhSRl9HQUlOU1RBR0VTKGNoYWluKSwKLQkJCSAgICAgIEFSX1BIWV82NU5NX1JYUkZfR0FJTlNUQUdFU19MTkE1R19HQUlOX09WUiwgMHgwKTsKIAorCWlmIChBUl9TUkVWXzkwMDNfUENPRU0oYWgpIHx8IEFSX1NSRVZfOTMzMF8xMShhaCkpIHsKKwkJaWYgKGlzXzJnKQorCQkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZXzY1Tk1fUlhSRl9HQUlOU1RBR0VTKGNoYWluKSwKKwkJCQkgICAgICBBUl9QSFlfNjVOTV9SWFJGX0dBSU5TVEFHRVNfTE5BMkdfR0FJTl9PVlIsIDB4MCk7CisJCWVsc2UKKwkJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV82NU5NX1JYUkZfR0FJTlNUQUdFUyhjaGFpbiksCisJCQkJICAgICAgQVJfUEhZXzY1Tk1fUlhSRl9HQUlOU1RBR0VTX0xOQTVHX0dBSU5fT1ZSLCAweDApOworCX0KKworCS8qCisJICogVHVybiBvZmYgUlhPTi4KKwkgKi8KIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfNjVOTV9SWFRYMihjaGFpbiksCiAJCSAgICAgIEFSX1BIWV82NU5NX1JYVFgyX1JYT05fT1ZSLCAweDEpOwogCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV82NU5NX1JYVFgyKGNoYWluKSwKIAkJICAgICAgQVJfUEhZXzY1Tk1fUlhUWDJfUlhPTiwgMHgwKTsKIAorCS8qCisJICogVHVybiBvbiBBR0MgZm9yIGNhbC4KKwkgKi8KIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfNjVOTV9SWFJGX0FHQyhjaGFpbiksCiAJCSAgICAgIEFSX1BIWV82NU5NX1JYUkZfQUdDX0FHQ19PVkVSUklERSwgMHgxKTsKIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfNjVOTV9SWFJGX0FHQyhjaGFpbiksCkBAIC0xMjI4LDE2ICsxMjQ1LDE5IEBACiAJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZXzY1Tk1fUlhSRl9BR0MoY2hhaW4pLAogCQkgICAgICBBUl9QSFlfNjVOTV9SWFJGX0FHQ19BR0NfQ0FMX09WUiwgMHgxKTsKIAotCWlmIChBUl9TUkVWXzkzMzBfMTEoYWgpKSB7CisJaWYgKEFSX1NSRVZfOTMzMF8xMShhaCkpCiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV82NU5NX1JYUkZfQUdDKGNoYWluKSwKIAkJCSAgICAgIEFSX1BIWV82NU5NX1JYUkZfQUdDX0FHQzJHX0NBTERBQ19PVlIsIDB4MCk7Ci0JfSBlbHNlIHsKKworCWlmIChBUl9TUkVWXzkwMDNfUENPRU0oYWgpIHx8IEFSX1NSRVZfOTU1MChhaCkgfHwgQVJfU1JFVl85NTMxKGFoKSkgewogCQlpZiAoaXNfMmcpCiAJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfNjVOTV9SWFJGX0FHQyhjaGFpbiksCi0JCQkJICAgICAgQVJfUEhZXzY1Tk1fUlhSRl9BR0NfQUdDMkdfREJEQUNfT1ZSLCAweDApOworCQkJCSAgICAgIEFSX1BIWV82NU5NX1JYUkZfQUdDX0FHQzJHX0RCREFDX09WUiwKKwkJCQkgICAgICBwZWFrX2RldGVjdF90aHJlc2hvbGQpOwogCQllbHNlCiAJCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfNjVOTV9SWFJGX0FHQyhjaGFpbiksCi0JCQkJICAgICAgQVJfUEhZXzY1Tk1fUlhSRl9BR0NfQUdDNUdfREJEQUNfT1ZSLCAweDApOworCQkJCSAgICAgIEFSX1BIWV82NU5NX1JYUkZfQUdDX0FHQzVHX0RCREFDX09WUiwKKwkJCQkgICAgICBwZWFrX2RldGVjdF90aHJlc2hvbGQpOwogCX0KIAogCWZvciAoaSA9IDY7IGkgPiAwOyBpLS0pIHsKQEAgLTEyNjYsMTAgKzEyODYsMTkgQEAKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZXzY1Tk1fUlhSRl9BR0MoY2hhaW4pLAogCQkJICAgICAgQVJfUEhZXzY1Tk1fUlhSRl9BR0NfQUdDNUdfQ0FMREFDX09WUiwgdG90YWwpOwogCisJLyoKKwkgKiBUdXJuIG9uIExOQS4KKwkgKi8KIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfNjVOTV9SWFJGX0dBSU5TVEFHRVMoY2hhaW4pLAogCQkgICAgICBBUl9QSFlfNjVOTV9SWFJGX0dBSU5TVEFHRVNfUlhfT1ZFUlJJREUsIDApOworCS8qCisJICogVHVybiBvZmYgUlhPTi4KKwkgKi8KIAlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9QSFlfNjVOTV9SWFRYMihjaGFpbiksCiAJCSAgICAgIEFSX1BIWV82NU5NX1JYVFgyX1JYT05fT1ZSLCAwKTsKKwkvKgorCSAqIFR1cm4gb2ZmIHBlYWsgZGV0ZWN0IGNhbGlicmF0aW9uLgorCSAqLwogCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV82NU5NX1JYUkZfQUdDKGNoYWluKSwKIAkJICAgICAgQVJfUEhZXzY1Tk1fUlhSRl9BR0NfQUdDX0NBTF9PVlIsIDApOwogfQpAQCAtMTYxMSw4ICsxNjQwLDE0IEBACiAKIHNraXBfdHhfaXFjYWw6CiAJaWYgKHJ1bl9hZ2NfY2FsIHx8ICEoYWgtPmFoX2ZsYWdzICYgQUhfRkFTVENDKSkgewotCQlpZiAoQVJfU1JFVl85MzMwXzExKGFoKSkKLQkJCWFyOTAwM19od19tYW51YWxfcGVha19jYWwoYWgsIDAsIElTX0NIQU5fMkdIWihjaGFuKSk7CisJCWlmIChBUl9TUkVWXzkzMzBfMTEoYWgpIHx8IEFSX1NSRVZfOTUzMShhaCkgfHwgQVJfU1JFVl85NTUwKGFoKSkgeworCQkJZm9yIChpID0gMDsgaSA8IEFSOTMwMF9NQVhfQ0hBSU5TOyBpKyspIHsKKwkJCQlpZiAoIShhaC0+cnhjaGFpbm1hc2sgJiAoMSA8PCBpKSkpCisJCQkJCWNvbnRpbnVlOworCQkJCWFyOTAwM19od19tYW51YWxfcGVha19jYWwoYWgsIGksCisJCQkJCQkJICBJU19DSEFOXzJHSFooY2hhbikpOworCQkJfQorCQl9CiAKIAkJLyoKIAkJICogRm9yIG5vbi1BUjk1NTAgY2hpcHMsIHdlIGp1c3QgdHJpZ2dlciBBR0MgY2FsaWJyYXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2VlcHJvbS5jCmluZGV4IDA4MjI1YTAuLjhiNDU2MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19lZXByb20uYwpAQCAtMzUzNiw3ICszNTM2LDcgQEAKIAlpbnQgYmlhcyA9IGFyOTAwM19tb2RhbF9oZWFkZXIoYWgsIGlzMmdoeiktPnhwYUJpYXNMdmw7CiAKIAlpZiAoQVJfU1JFVl85NDg1KGFoKSB8fCBBUl9TUkVWXzkzMzAoYWgpIHx8IEFSX1NSRVZfOTM0MChhaCkgfHwKLQkgICAgQVJfU1JFVl85NTMxKGFoKSkKKwkgICAgQVJfU1JFVl85NTMxKGFoKSB8fCBBUl9TUkVWXzk1NjEoYWgpKQogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9DSDBfVE9QMiwgQVJfQ0gwX1RPUDJfWFBBQklBU0xWTCwgYmlhcyk7CiAJZWxzZSBpZiAoQVJfU1JFVl85NDYyKGFoKSB8fCBBUl9TUkVWXzk1NTAoYWgpIHx8IEFSX1NSRVZfOTU2NShhaCkpCiAJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9UT1AsIEFSX0NIMF9UT1BfWFBBQklBU0xWTCwgYmlhcyk7CkBAIC0zNTk5LDcgKzM1OTksNyBAQAogCWlmIChBUl9TUkVWXzk0NjIoYWgpIHx8IEFSX1NSRVZfOTU2NShhaCkpIHsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUEhZX1NXSVRDSF9DT00sCiAJCQkJQVJfU1dJVENIX1RBQkxFX0NPTV9BUjk0NjJfQUxMLCB2YWx1ZSk7Ci0JfSBlbHNlIGlmIChBUl9TUkVWXzk1NTAoYWgpIHx8IEFSX1NSRVZfOTUzMShhaCkpIHsKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTU1MChhaCkgfHwgQVJfU1JFVl85NTMxKGFoKSB8fCBBUl9TUkVWXzk1NjEoYWgpKSB7CiAJCVJFR19STVdfRklFTEQoYWgsIEFSX1BIWV9TV0lUQ0hfQ09NLAogCQkJCUFSX1NXSVRDSF9UQUJMRV9DT01fQVI5NTUwX0FMTCwgdmFsdWUpOwogCX0gZWxzZQpAQCAtMzkyOSw5ICszOTI5LDEzIEBACiAJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QTVUyLCByZWdfcG11X3NldCk7CiAJCQlpZiAoIWlzX3BtdV9zZXQoYWgsIEFSX1BIWV9QTVUyLCByZWdfcG11X3NldCkpCiAJCQkJcmV0dXJuOwotCQl9IGVsc2UgaWYgKEFSX1NSRVZfOTQ2MihhaCkgfHwgQVJfU1JFVl85NTY1KGFoKSkgeworCQl9IGVsc2UgaWYgKEFSX1NSRVZfOTQ2MihhaCkgfHwgQVJfU1JFVl85NTY1KGFoKSB8fAorCQkJICAgQVJfU1JFVl85NTYxKGFoKSkgewogCQkJcmVnX3ZhbCA9IGxlMzJfdG9fY3B1KHBCYXNlLT5zd3JlZyk7CiAJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QTVUxLCByZWdfdmFsKTsKKworCQkJaWYgKEFSX1NSRVZfOTU2MShhaCkpCisJCQkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE1VMiwgMHgxMDIwMDAwMCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBJbnRlcm5hbCByZWd1bGF0b3IgaXMgT04uIFdyaXRlIHN3cmVnIHJlZ2lzdGVyLiAqLwogCQkJcmVnX3ZhbCA9IGxlMzJfdG9fY3B1KHBCYXNlLT5zd3JlZyk7CkBAIC00MDM0LDcgKzQwMzgsOCBAQAogCWlmICghQVJfU1JFVl85MzAwKGFoKSAmJgogCSAgICAhQVJfU1JFVl85MzQwKGFoKSAmJgogCSAgICAhQVJfU1JFVl85NTgwKGFoKSAmJgotCSAgICAhQVJfU1JFVl85NTMxKGFoKSkKKwkgICAgIUFSX1NSRVZfOTUzMShhaCkgJiYKKwkgICAgIUFSX1NSRVZfOTU2MShhaCkpCiAJCXJldHVybjsKIAogCXhwYV9jdGwgPSBhcjkwMDNfbW9kYWxfaGVhZGVyKGFoLCBpczJnaHopLT50eEZyYW1lVG9YcGFPbjsKQEAgLTQ4MTIsNyArNDgxNyw3IEBACiAJfQogCiB0ZW1wc2xvcGU6Ci0JaWYgKEFSX1NSRVZfOTU1MChhaCkgfHwgQVJfU1JFVl85NTMxKGFoKSkgeworCWlmIChBUl9TUkVWXzk1NTAoYWgpIHx8IEFSX1NSRVZfOTUzMShhaCkgfHwgQVJfU1JFVl85NTYxKGFoKSkgewogCQl1OCB0eG1hc2sgPSAoZWVwLT5iYXNlRWVwSGVhZGVyLnR4cnhNYXNrICYgMHhmMCkgPj4gNDsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19ody5jCmluZGV4IDA2YWQyMTcuLjQzMzVjY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX2h3LmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJhcjk1NjVfMXAwX2luaXR2YWxzLmgiCiAjaW5jbHVkZSAiYXI5NTY1XzFwMV9pbml0dmFscy5oIgogI2luY2x1ZGUgImFyOTUzeF9pbml0dmFscy5oIgorI2luY2x1ZGUgImFyOTU2eF9pbml0dmFscy5oIgogCiAvKiBHZW5lcmFsIGhhcmR3YXJlIGNvZGUgZm9yIHRoZSBBUjkwMDMgaGFkd2FyZSBmYW1pbHkgKi8KIApAQCAtMzU4LDYgKzM1OSw0MCBAQAogCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNGYXN0Q2xvY2ssCiAJCQkgICAgICAgcWNhOTUzeF8xcDBfbW9kZXNfZmFzdF9jbG9jayk7CisJfSBlbHNlIGlmIChBUl9TUkVWXzk1NjEoYWgpKSB7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTWFjW0FUSF9JTklfQ09SRV0sCisJCQkgICAgICAgcWNhOTU2eF8xcDBfbWFjX2NvcmUpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1hY1tBVEhfSU5JX1BPU1RdLAorCQkJICAgICAgIHFjYTk1NnhfMXAwX21hY19wb3N0YW1ibGUpOworCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pQkJbQVRIX0lOSV9DT1JFXSwKKwkJCSAgICAgICBxY2E5NTZ4XzFwMF9iYXNlYmFuZF9jb3JlKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlCQltBVEhfSU5JX1BPU1RdLAorCQkJICAgICAgIHFjYTk1NnhfMXAwX2Jhc2ViYW5kX3Bvc3RhbWJsZSk7CisKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlSYWRpb1tBVEhfSU5JX0NPUkVdLAorCQkJICAgICAgIHFjYTk1NnhfMXAwX3JhZGlvX2NvcmUpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVJhZGlvW0FUSF9JTklfUE9TVF0sCisJCQkgICAgICAgcWNhOTU2eF8xcDBfcmFkaW9fcG9zdGFtYmxlKTsKKworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaVNPQ1tBVEhfSU5JX1BSRV0sCisJCQkgICAgICAgcWNhOTU2eF8xcDBfc29jX3ByZWFtYmxlKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlTT0NbQVRIX0lOSV9QT1NUXSwKKwkJCSAgICAgICBxY2E5NTZ4XzFwMF9zb2NfcG9zdGFtYmxlKTsKKworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAorCQkJICAgICAgIHFjYTk1NnhfMXAwX2NvbW1vbl93b194bG5hX3J4X2dhaW5fdGFibGUpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaV9tb2Rlc19yeF9nYWluX2JvdW5kcywKKwkJCSAgICAgICBxY2E5NTZ4XzFwMF9jb21tb25fd29feGxuYV9yeF9nYWluX2JvdW5kcyk7CisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkgICAgICAgcWNhOTU2eF8xcDBfbW9kZXNfbm9feHBhX3R4X2dhaW5fdGFibGUpOworCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pX2RmcywKKwkJCSAgICAgICBxY2E5NTZ4XzFwMF9iYXNlYmFuZF9wb3N0YW1ibGVfZGZzX2NoYW5uZWwpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaUNja2ZpckphcGFuMjQ4NCwKKwkJCSAgICAgICBxY2E5NTZ4XzFwMF9iYXNlYmFuZF9jb3JlX3R4ZmlyX2NvZWZmX2phcGFuXzI0ODQpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzRmFzdENsb2NrLAorCQkJICAgICAgIHFjYTk1NnhfMXAwX21vZGVzX2Zhc3RfY2xvY2spOwogCX0gZWxzZSBpZiAoQVJfU1JFVl85NTgwKGFoKSkgewogCQkvKiBtYWMgKi8KIAkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNYWNbQVRIX0lOSV9DT1JFXSwKQEAgLTU0NCw2ICs1NzksOSBAQAogCWVsc2UgaWYgKEFSX1NSRVZfOTUzMV8yMChhaCkpCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQkgICAgICAgcWNhOTUzeF8ycDBfbW9kZXNfeHBhX3R4X2dhaW5fdGFibGUpOworCWVsc2UgaWYgKEFSX1NSRVZfOTU2MShhaCkpCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkgICAgICAgcWNhOTU2eF8xcDBfbW9kZXNfeHBhX3R4X2dhaW5fdGFibGUpOwogCWVsc2UgaWYgKEFSX1NSRVZfOTU4MChhaCkpCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQlhcjk1ODBfMXAwX2xvd2VzdF9vYl9kYl90eF9nYWluX3RhYmxlKTsKQEAgLTU5NCw3ICs2MzIsMTAgQEAKIAkJZWxzZQogCQkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKIAkJCQkgICAgICAgcWNhOTUzeF8xcDBfbW9kZXNfbm9feHBhX3R4X2dhaW5fdGFibGUpOwotCX0gZWxzZSBpZiAoQVJfU1JFVl85NDYyXzIxKGFoKSkKKwl9IGVsc2UgaWYgKEFSX1NSRVZfOTU2MShhaCkpCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkgICAgICAgcWNhOTU2eF8xcDBfbW9kZXNfbm9feHBhX3R4X2dhaW5fdGFibGUpOworCWVsc2UgaWYgKEFSX1NSRVZfOTQ2Ml8yMShhaCkpCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQlhcjk0NjJfMnAxX21vZGVzX2hpZ2hfb2JfZGJfdHhfZ2Fpbik7CiAJZWxzZSBpZiAoQVJfU1JFVl85NDYyXzIwKGFoKSkKQEAgLTYyOCw2ICs2NjksOSBAQAogCWVsc2UgaWYgKEFSX1NSRVZfOTU4MChhaCkpCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQlhcjk1ODBfMXAwX2xvd19vYl9kYl90eF9nYWluX3RhYmxlKTsKKwllbHNlIGlmIChBUl9TUkVWXzk1NjEoYWgpKQorCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzVHhHYWluLAorCQkJICAgICAgIHFjYTk1NnhfMXAwX21vZGVzX25vX3hwYV9sb3dfb2JfZGJfdHhfZ2Fpbl90YWJsZSk7CiAJZWxzZSBpZiAoQVJfU1JFVl85NTY1XzExKGFoKSkKIAkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlNb2Rlc1R4R2FpbiwKIAkJCSAgICAgICBhcjk1NjVfMXAxX21vZGVzX2xvd19vYl9kYl90eF9nYWluX3RhYmxlKTsKQEAgLTY5OSw2ICs3NDMsOSBAQAogCWVsc2UgaWYgKEFSX1NSRVZfOTU4MChhaCkpCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQlhcjk1ODBfMXAwX3R5cGU1X3R4X2dhaW5fdGFibGUpOworCWVsc2UgaWYgKEFSX1NSRVZfOTU2MShhaCkpCisJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCisJCQkgICAgICAgcWNhOTU2eF8xcDBfbW9kZXNfbm9feHBhX2dyZWVuX3R4X2dhaW5fdGFibGUpOwogCWVsc2UgaWYgKEFSX1NSRVZfOTMwMF8yMihhaCkpCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNUeEdhaW4sCiAJCQlhcjkzMDBNb2Rlc190eXBlNV90eF9nYWluX3RhYmxlXzJwMik7CkBAIC03NzAsNiArODE3LDEzIEBACiAJCQkgICAgICAgcWNhOTUzeF8xcDBfY29tbW9uX3J4X2dhaW5fdGFibGUpOwogCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaV9tb2Rlc19yeF9nYWluX2JvdW5kcywKIAkJCSAgICAgICBxY2E5NTN4XzFwMF9jb21tb25fcnhfZ2Fpbl9ib3VuZHMpOworCX0gZWxzZSBpZiAoQVJfU1JFVl85NTYxKGFoKSkgeworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAorCQkJICAgICAgIHFjYTk1NnhfMXAwX2NvbW1vbl9yeF9nYWluX3RhYmxlKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlfbW9kZXNfcnhfZ2Fpbl9ib3VuZHMsCisJCQkgICAgICAgcWNhOTU2eF8xcDBfY29tbW9uX3J4X2dhaW5fYm91bmRzKTsKKwkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlfbW9kZXNfcnhnYWluXzVnX3hsbmEsCisJCQkgICAgICAgcWNhOTU2eF8xcDBfeGxuYV9vbmx5KTsKIAl9IGVsc2UgaWYgKEFSX1NSRVZfOTU4MChhaCkpCiAJCUlOSVRfSU5JX0FSUkFZKCZhaC0+aW5pTW9kZXNSeEdhaW4sCiAJCQkJYXI5NTgwXzFwMF9yeF9nYWluX3RhYmxlKTsKQEAgLTgyNSw2ICs4NzksMTEgQEAKIAkJCSAgICAgICBxY2E5NTN4XzJwMF9jb21tb25fd29feGxuYV9yeF9nYWluX3RhYmxlKTsKIAkJSU5JVF9JTklfQVJSQVkoJmFoLT5pbmlfbW9kZXNfcnhfZ2Fpbl9ib3VuZHMsCiAJCQkgICAgICAgcWNhOTUzeF8ycDBfY29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl9ib3VuZHMpOworCX0gZWxzZSBpZiAoQVJfU1JFVl85NTYxKGFoKSkgeworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAorCQkJICAgICAgIHFjYTk1NnhfMXAwX2NvbW1vbl93b194bG5hX3J4X2dhaW5fdGFibGUpOworCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaV9tb2Rlc19yeF9nYWluX2JvdW5kcywKKwkJCSAgICAgICBxY2E5NTZ4XzFwMF9jb21tb25fd29feGxuYV9yeF9nYWluX2JvdW5kcyk7CiAJfSBlbHNlIGlmIChBUl9TUkVWXzk1ODAoYWgpKQogCQlJTklUX0lOSV9BUlJBWSgmYWgtPmluaU1vZGVzUnhHYWluLAogCQkJYXI5NTgwXzFwMF93b194bG5hX3J4X2dhaW5fdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmMKaW5kZXggYWU2Y2RlMi4uMWFkNjZiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5jCkBAIC0xODMsNyArMTgzLDggQEAKIAkJCX0gZWxzZSB7CiAJCQkJY2hhbm5lbFNlbCA9IENIQU5TRUxfMkcoZnJlcSkgPj4gMTsKIAkJCX0KLQkJfSBlbHNlIGlmIChBUl9TUkVWXzk1NTAoYWgpIHx8IEFSX1NSRVZfOTUzMShhaCkpIHsKKwkJfSBlbHNlIGlmIChBUl9TUkVWXzk1NTAoYWgpIHx8IEFSX1NSRVZfOTUzMShhaCkgfHwKKwkJCSAgIEFSX1NSRVZfOTU2MShhaCkpIHsKIAkJCWlmIChhaC0+aXNfY2xrXzI1bWh6KQogCQkJCWRpdiA9IDc1OwogCQkJZWxzZQpAQCAtMTk4LDcgKzE5OSw4IEBACiAJCS8qIFNldCB0byAyRyBtb2RlICovCiAJCWJNb2RlID0gMTsKIAl9IGVsc2UgewotCQlpZiAoKEFSX1NSRVZfOTM0MChhaCkgfHwgQVJfU1JFVl85NTUwKGFoKSB8fCBBUl9TUkVWXzk1MzEoYWgpKSAmJgorCQlpZiAoKEFSX1NSRVZfOTM0MChhaCkgfHwgQVJfU1JFVl85NTUwKGFoKSB8fAorCQkgICAgIEFSX1NSRVZfOTUzMShhaCkgfHwgQVJfU1JFVl85NTYxKGFoKSkgJiYKIAkJICAgIGFoLT5pc19jbGtfMjVtaHopIHsKIAkJCWNoYW5uZWxTZWwgPSBmcmVxIC8gNzU7CiAJCQljaGFuX2ZyYWMgPSAoKGZyZXEgJSA3NSkgKiAweDIwMDAwKSAvIDc1OwpAQCAtMjY1LDcgKzI2Nyw3IEBACiAJICovCiAKIAlpZiAoQVJfU1JFVl85NDg1KGFoKSB8fCBBUl9TUkVWXzkzNDAoYWgpIHx8IEFSX1NSRVZfOTMzMChhaCkgfHwKLQkgICAgQVJfU1JFVl85NTUwKGFoKSkgeworCSAgICBBUl9TUkVWXzk1NTAoYWgpIHx8IEFSX1NSRVZfOTU2MShhaCkpIHsKIAkJaWYgKHNwdXJfZmJpbl9wdHJbMF0gPT0gMCkgLyogTm8gc3B1ciAqLwogCQkJcmV0dXJuOwogCQltYXhfc3B1cl9jbnRzID0gNTsKQEAgLTI5Miw3ICsyOTQsNyBAQAogCiAJCW5lZ2F0aXZlID0gMDsKIAkJaWYgKEFSX1NSRVZfOTQ4NShhaCkgfHwgQVJfU1JFVl85MzQwKGFoKSB8fCBBUl9TUkVWXzkzMzAoYWgpIHx8Ci0JCSAgICBBUl9TUkVWXzk1NTAoYWgpKQorCQkgICAgQVJfU1JFVl85NTUwKGFoKSB8fCBBUl9TUkVWXzk1NjEoYWgpKQogCQkJY3VyX2JiX3NwdXIgPSBhdGg5a19od19mYmluMmZyZXEoc3B1cl9mYmluX3B0cltpXSwKIAkJCQkJCQkgSVNfQ0hBTl8yR0haKGNoYW4pKTsKIAkJZWxzZQpAQCAtNjQxLDggKzY0MywxMCBAQAogCQkoUkVHX1JFQUQoYWgsIEFSX1BIWV9HRU5fQ1RSTCkgJiBBUl9QSFlfR0NfRU5BQkxFX0RBQ19GSUZPKTsKIAogCS8qIEVuYWJsZSAxMW4gSFQsIDIwIE1IeiAqLwotCXBoeW1vZGUgPSBBUl9QSFlfR0NfSFRfRU4gfCBBUl9QSFlfR0NfU0lOR0xFX0hUX0xURjEgfAotCQkgIEFSX1BIWV9HQ19TSE9SVF9HSV80MCB8IGVuYWJsZURhY0ZpZm87CisJcGh5bW9kZSA9IEFSX1BIWV9HQ19IVF9FTiB8IEFSX1BIWV9HQ19TSE9SVF9HSV80MCB8IGVuYWJsZURhY0ZpZm87CisKKwlpZiAoIUFSX1NSRVZfOTU2MShhaCkpCisJCXBoeW1vZGUgfD0gQVJfUEhZX0dDX1NJTkdMRV9IVF9MVEYxOwogCiAJLyogQ29uZmlndXJlIGJhc2ViYW5kIGZvciBkeW5hbWljIDIwLzQwIG9wZXJhdGlvbiAqLwogCWlmIChJU19DSEFOX0hUNDAoY2hhbikpIHsKQEAgLTc0NSw3ICs3NDksOCBAQAogCWVsc2UKIAkJYWgtPmVuYWJsZWRfY2FscyAmPSB+VFhfQ0xfQ0FMOwogCi0JaWYgKEFSX1NSRVZfOTM0MChhaCkgfHwgQVJfU1JFVl85NTMxKGFoKSB8fCBBUl9TUkVWXzk1NTAoYWgpKSB7CisJaWYgKEFSX1NSRVZfOTM0MChhaCkgfHwgQVJfU1JFVl85NTMxKGFoKSB8fCBBUl9TUkVWXzk1NTAoYWgpIHx8CisJICAgIEFSX1NSRVZfOTU2MShhaCkpIHsKIAkJaWYgKGFoLT5pc19jbGtfMjVtaHopIHsKIAkJCVJFR19XUklURShhaCwgQVJfUlRDX0RFUklWRURfQ0xLLCAweDE3YyA8PCAxKTsKIAkJCVJFR19XUklURShhaCwgQVJfU0xQMzJfTU9ERSwgMHgwMDEwZjNkNyk7CkBAIC04MTIsNiArODE3LDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBhcjk1NjFfaHdfZ2V0X21vZGVzX3R4Z2Fpbl9pbmRleChzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkJICAgIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuKQoreworCWlmIChJU19DSEFOXzJHSFooY2hhbikpIHsKKwkJaWYgKElTX0NIQU5fSFQ0MChjaGFuKSkKKwkJCXJldHVybiAxOworCQllbHNlCisJCQlyZXR1cm4gMjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgYXI5MDAzX2RvdWJsZXJfZml4KHN0cnVjdCBhdGhfaHcgKmFoKQogewogCWlmIChBUl9TUkVWXzkzMDAoYWgpIHx8IEFSX1NSRVZfOTU4MChhaCkgfHwgQVJfU1JFVl85NTUwKGFoKSkgewpAQCAtOTExLDIxICs5MjksMjkgQEAKIAkJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaV9tb2Rlc19yeGdhaW5fNWdfeGxuYSwKIAkJCQkJbW9kZXNJbmRleCwgcmVnV3JpdGVzKTsKIAkJfQorCisJCWlmIChBUl9TUkVWXzk1NjEoYWgpICYmIChhcjkwMDNfaHdfZ2V0X3J4X2dhaW5faWR4KGFoKSA9PSAwKSkKKwkJCVJFR19XUklURV9BUlJBWSgmYWgtPmluaV9tb2Rlc19yeGdhaW5fNWdfeGxuYSwKKwkJCQkJbW9kZXNJbmRleCwgcmVnV3JpdGVzKTsKIAl9CiAKLQlpZiAoQVJfU1JFVl85NTUwKGFoKSkKKwlpZiAoQVJfU1JFVl85NTUwKGFoKSB8fCBBUl9TUkVWXzk1NjEoYWgpKQogCQlSRUdfV1JJVEVfQVJSQVkoJmFoLT5pbmlfbW9kZXNfcnhfZ2Fpbl9ib3VuZHMsIG1vZGVzSW5kZXgsCiAJCQkJcmVnV3JpdGVzKTsKIAogCS8qCiAJICogVFhHQUlOIGluaXR2YWxzLgogCSAqLwotCWlmIChBUl9TUkVWXzk1NTAoYWgpIHx8IEFSX1NSRVZfOTUzMShhaCkpIHsKKwlpZiAoQVJfU1JFVl85NTUwKGFoKSB8fCBBUl9TUkVWXzk1MzEoYWgpIHx8IEFSX1NSRVZfOTU2MShhaCkpIHsKIAkJaW50IG1vZGVzX3R4Z2Fpbl9pbmRleCA9IDE7CiAKIAkJaWYgKEFSX1NSRVZfOTU1MChhaCkpCiAJCQltb2Rlc190eGdhaW5faW5kZXggPSBhcjk1NTBfaHdfZ2V0X21vZGVzX3R4Z2Fpbl9pbmRleChhaCwgY2hhbik7CiAKKwkJaWYgKEFSX1NSRVZfOTU2MShhaCkpCisJCQltb2Rlc190eGdhaW5faW5kZXggPQorCQkJCWFyOTU2MV9od19nZXRfbW9kZXNfdHhnYWluX2luZGV4KGFoLCBjaGFuKTsKKwogCQlpZiAobW9kZXNfdHhnYWluX2luZGV4IDwgMCkKIAkJCXJldHVybiAtRUlOVkFMOwogCkBAIC0xOTg5LDcgKzIwMTUsOCBAQAogCXByaXZfb3BzLT5yZl9zZXRfZnJlcSA9IGFyOTAwM19od19zZXRfY2hhbm5lbDsKIAlwcml2X29wcy0+c3B1cl9taXRpZ2F0ZV9mcmVxID0gYXI5MDAzX2h3X3NwdXJfbWl0aWdhdGU7CiAKLQlpZiAoQVJfU1JFVl85MzQwKGFoKSB8fCBBUl9TUkVWXzk1NTAoYWgpIHx8IEFSX1NSRVZfOTUzMShhaCkpCisJaWYgKEFSX1NSRVZfOTM0MChhaCkgfHwgQVJfU1JFVl85NTUwKGFoKSB8fCBBUl9TUkVWXzk1MzEoYWgpIHx8CisJICAgIEFSX1NSRVZfOTU2MShhaCkpCiAJCXByaXZfb3BzLT5jb21wdXRlX3BsbF9jb250cm9sID0gYXI5MDAzX2h3X2NvbXB1dGVfcGxsX2NvbnRyb2xfc29jOwogCWVsc2UKIAkJcHJpdl9vcHMtPmNvbXB1dGVfcGxsX2NvbnRyb2wgPSBhcjkwMDNfaHdfY29tcHV0ZV9wbGxfY29udHJvbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3BoeS5oCmluZGV4IGZkMDkwYjEuLmMzMTFiMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM19waHkuaApAQCAtNDU0LDcgKzQ1NCw3IEBACiAjZGVmaW5lIEFSX1BIWV9HRU5fQ1RSTCAgICAgICAgICAoQVJfU01fQkFTRSArIDB4NCkKICNkZWZpbmUgQVJfUEhZX01PREUgICAgICAgICAgICAgIChBUl9TTV9CQVNFICsgMHg4KQogI2RlZmluZSBBUl9QSFlfQUNUSVZFICAgICAgICAgICAgKEFSX1NNX0JBU0UgKyAweGMpCi0jZGVmaW5lIEFSX1BIWV9TUFVSX01BU0tfQSAgICAgICAoQVJfU01fQkFTRSArIDB4MjApCisjZGVmaW5lIEFSX1BIWV9TUFVSX01BU0tfQSAgICAgICAoQVJfU01fQkFTRSArIChBUl9TUkVWXzk1NjEoYWgpID8gMHgxOCA6IDB4MjApKQogI2RlZmluZSBBUl9QSFlfU1BVUl9NQVNLX0IgICAgICAgKEFSX1NNX0JBU0UgKyAweDI0KQogI2RlZmluZSBBUl9QSFlfU1BFQ1RSQUxfU0NBTiAgICAgKEFSX1NNX0JBU0UgKyAweDI4KQogI2RlZmluZSBBUl9QSFlfUkFEQVJfQldfRklMVEVSICAgKEFSX1NNX0JBU0UgKyAweDJjKQpAQCAtNTA2LDcgKzUwNiw3IEBACiAjZGVmaW5lIEFSX1BIWV9URVNUX0NIQUlOX1NFTCAgICAgIDB4QzAwMDAwMDAKICNkZWZpbmUgQVJfUEhZX1RFU1RfQ0hBSU5fU0VMX1MgICAgMzAKIAotI2RlZmluZSBBUl9QSFlfVEVTVF9DVExfU1RBVFVTICAgKEFSX1NNX0JBU0UgKyAweDE2NCkKKyNkZWZpbmUgQVJfUEhZX1RFU1RfQ1RMX1NUQVRVUyAgIChBUl9TTV9CQVNFICsgKEFSX1NSRVZfOTU2MShhaCkgPyAweDE2MCA6IDB4MTY0KSkKICNkZWZpbmUgQVJfUEhZX1RFU1RfQ1RMX1RTVERBQ19FTiAgICAgICAgIDB4MQogI2RlZmluZSBBUl9QSFlfVEVTVF9DVExfVFNUREFDX0VOX1MgICAgICAgMAogI2RlZmluZSBBUl9QSFlfVEVTVF9DVExfVFhfT0JTX1NFTCAgICAgICAgMHgxQwpAQCAtNTI1LDcgKzUyNSw3IEBACiAKICNkZWZpbmUgQVJfUEhZX0NIQU5fU1RBVFVTICAgICAgIChBUl9TTV9CQVNFICsgMHgxNmMpCiAKLSNkZWZpbmUgQVJfUEhZX0NIQU5fSU5GT19NRU1PUlkJCQkJKEFSX1NNX0JBU0UgKyAweDE3MCkKKyNkZWZpbmUgQVJfUEhZX0NIQU5fSU5GT19NRU1PUlkgKEFSX1NNX0JBU0UgKyAoQVJfU1JFVl85NTYxKGFoKSA/IDB4MTZjIDogMHgxNzApKQogI2RlZmluZSBBUl9QSFlfQ0hBTl9JTkZPX01FTU9SWV9DSEFOSU5GT01FTV9TMl9SRUFECTB4MDAwMDAwMDgKICNkZWZpbmUgQVJfUEhZX0NIQU5fSU5GT19NRU1PUllfQ0hBTklORk9NRU1fUzJfUkVBRF9TCTMKIApAQCAtNTM2LDcgKzUzNiw3IEBACiAjZGVmaW5lIEFSX1BIWV9TQ1JBTUJMRVJfU0VFRCAgICAoQVJfU01fQkFTRSArIDB4MTkwKQogI2RlZmluZSBBUl9QSFlfQ0NLX1RYX0NUUkwgICAgICAgKEFSX1NNX0JBU0UgKyAweDE5NCkKIAotI2RlZmluZSBBUl9QSFlfSEVBVllDTElQX0NUTCAgICAgKEFSX1NNX0JBU0UgKyAweDFhNCkKKyNkZWZpbmUgQVJfUEhZX0hFQVZZQ0xJUF9DVEwgICAgIChBUl9TTV9CQVNFICsgKEFSX1NSRVZfOTU2MShhaCkgPyAweDE5OCA6IDB4MWE0KSkKICNkZWZpbmUgQVJfUEhZX0hFQVZZQ0xJUF8yMCAgICAgIChBUl9TTV9CQVNFICsgMHgxYTgpCiAjZGVmaW5lIEFSX1BIWV9IRUFWWUNMSVBfNDAgICAgICAoQVJfU01fQkFTRSArIDB4MWFjKQogI2RlZmluZSBBUl9QSFlfSUxMRUdBTF9UWFJBVEUgICAgKEFSX1NNX0JBU0UgKyAweDFiMCkKQEAgLTcyNiwyMSArNzI2LDI0IEBACiAKICNkZWZpbmUgQVJfQ0gwX1RPUDIJCShBUl9TUkVWXzkzMDAoYWgpID8gMHgxNjI4YyA6IFwKIAkJCQkJKEFSX1NSRVZfOTQ2MihhaCkgPyAweDE2MjkwIDogMHgxNjI4NCkpCi0jZGVmaW5lIEFSX0NIMF9UT1AyX1hQQUJJQVNMVkwJCTB4ZjAwMAorI2RlZmluZSBBUl9DSDBfVE9QMl9YUEFCSUFTTFZMCQkoQVJfU1JFVl85NTYxKGFoKSA/IDB4MWUwMCA6IDB4ZjAwMCkKICNkZWZpbmUgQVJfQ0gwX1RPUDJfWFBBQklBU0xWTF9TCTEyCiAKICNkZWZpbmUgQVJfQ0gwX1hUQUwJCShBUl9TUkVWXzkzMDAoYWgpID8gMHgxNjI5NCA6IFwKLQkJCQkgKChBUl9TUkVWXzk0NjIoYWgpIHx8IEFSX1NSRVZfOTU2NShhaCkpID8gMHgxNjI5OCA6IDB4MTYyOTApKQorCQkJCSAoKEFSX1NSRVZfOTQ2MihhaCkgfHwgQVJfU1JFVl85NTY1KGFoKSkgPyAweDE2Mjk4IDogXAorCQkJCSAgKEFSX1NSRVZfOTU2MShhaCkgPyAweDE2MmMwIDogMHgxNjI5MCkpKQogI2RlZmluZSBBUl9DSDBfWFRBTF9DQVBJTkRBQwkweDdmMDAwMDAwCiAjZGVmaW5lIEFSX0NIMF9YVEFMX0NBUElOREFDX1MJMjQKICNkZWZpbmUgQVJfQ0gwX1hUQUxfQ0FQT1VUREFDCTB4MDBmZTAwMDAKICNkZWZpbmUgQVJfQ0gwX1hUQUxfQ0FQT1VUREFDX1MJMTcKIAotI2RlZmluZSBBUl9QSFlfUE1VMQkJKChBUl9TUkVWXzk0NjIoYWgpIHx8IEFSX1NSRVZfOTU2NShhaCkpID8gMHgxNjM0MCA6IDB4MTZjNDApCisjZGVmaW5lIEFSX1BIWV9QTVUxCQkoKEFSX1NSRVZfOTQ2MihhaCkgfHwgQVJfU1JFVl85NTY1KGFoKSkgPyAweDE2MzQwIDogXAorCQkJCSAoQVJfU1JFVl85NTYxKGFoKSA/IDB4MTZjYzAgOiAweDE2YzQwKSkKICNkZWZpbmUgQVJfUEhZX1BNVTFfUFdECQkweDEKICNkZWZpbmUgQVJfUEhZX1BNVTFfUFdEX1MJMAogCi0jZGVmaW5lIEFSX1BIWV9QTVUyCQkoKEFSX1NSRVZfOTQ2MihhaCkgfHwgQVJfU1JFVl85NTY1KGFoKSkgPyAweDE2MzQ0IDogMHgxNmM0NCkKKyNkZWZpbmUgQVJfUEhZX1BNVTIJCSgoQVJfU1JFVl85NDYyKGFoKSB8fCBBUl9TUkVWXzk1NjUoYWgpKSA/IDB4MTYzNDQgOiBcCisJCQkJIChBUl9TUkVWXzk1NjEoYWgpID8gMHgxNmNjNCA6IDB4MTZjNDQpKQogI2RlZmluZSBBUl9QSFlfUE1VMl9QR00JCTB4MDAyMDAwMDAKICNkZWZpbmUgQVJfUEhZX1BNVTJfUEdNX1MJMjEKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM193b3cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDNfd293LmMKaW5kZXggODFjODhkZC4uODZiZmM5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwM193b3cuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAzX3dvdy5jCkBAIC0xNywyMyArMTcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgogI2luY2x1ZGUgImF0aDlrLmgiCiAjaW5jbHVkZSAicmVnLmgiCisjaW5jbHVkZSAicmVnX3dvdy5oIgogI2luY2x1ZGUgImh3LW9wcy5oIgogCi1jb25zdCBjaGFyICphdGg5a19od193b3dfZXZlbnRfdG9fc3RyaW5nKHUzMiB3b3dfZXZlbnQpCi17Ci0JaWYgKHdvd19ldmVudCAmIEFIX1dPV19NQUdJQ19QQVRURVJOX0VOKQotCQlyZXR1cm4gIk1hZ2ljIHBhdHRlcm4iOwotCWlmICh3b3dfZXZlbnQgJiBBSF9XT1dfVVNFUl9QQVRURVJOX0VOKQotCQlyZXR1cm4gIlVzZXIgcGF0dGVybiI7Ci0JaWYgKHdvd19ldmVudCAmIEFIX1dPV19MSU5LX0NIQU5HRSkKLQkJcmV0dXJuICJMaW5rIGNoYW5nZSI7Ci0JaWYgKHdvd19ldmVudCAmIEFIX1dPV19CRUFDT05fTUlTUykKLQkJcmV0dXJuICJCZWFjb24gbWlzcyI7Ci0KLQlyZXR1cm4gICJ1bmtub3duIHJlYXNvbiI7Ci19Ci1FWFBPUlRfU1lNQk9MKGF0aDlrX2h3X3dvd19ldmVudF90b19zdHJpbmcpOwotCiBzdGF0aWMgdm9pZCBhdGg5a19od19zZXRfcG93ZXJtb2RlX3dvd19zbGVlcChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKQEAgLTQ5LDYgKzM1LDE1IEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAoQVJfU1JFVl85NDYyKGFoKSB8fCBBUl9TUkVWXzk1NjUoYWgpKSB7CisJCWlmICghUkVHX1JFQUQoYWgsIEFSX01BQ19QQ1VfR0VOX1RJTUVSX1RTRl9TRUwpKQorCQkJUkVHX0NMUl9CSVQoYWgsIEFSX0RJUkVDVF9DT05ORUNULCBBUl9EQ19UU0YyX0VOQUJMRSk7CisJfSBlbHNlIGlmIChBUl9TUkVWXzk0ODUoYWgpKXsKKwkJaWYgKCEoUkVHX1JFQUQoYWgsIEFSX05EUDJfVElNRVJfTU9ERSkgJgorCQkgICAgICBBUl9HRU5fVElNRVJTMl9NT0RFX0VOQUJMRV9NQVNLKSkKKwkJCVJFR19DTFJfQklUKGFoLCBBUl9ESVJFQ1RfQ09OTkVDVCwgQVJfRENfVFNGMl9FTkFCTEUpOworCX0KKwogCVJFR19XUklURShhaCwgQVJfUlRDX0ZPUkNFX1dBS0UsIEFSX1JUQ19GT1JDRV9XQUtFX09OX0lOVCk7CiB9CiAKQEAgLTY3LDExICs2MiwxNSBAQAogCS8qIHNldCB0aGUgdHJhbnNtaXQgYnVmZmVyICovCiAJY3RsWzBdID0gKEtBTF9GUkFNRV9MRU4gfCAoTUFYX1JBVEVfUE9XRVIgPDwgMTYpKTsKIAljdGxbMV0gPSAwOwotCWN0bFszXSA9IDB4YjsJLyogT0ZETV82TSBoYXJkd2FyZSB2YWx1ZSBmb3IgdGhpcyByYXRlICovCiAJY3RsWzRdID0gMDsKIAljdGxbN10gPSAoYWgtPnR4Y2hhaW5tYXNrKSA8PCAyOwogCWN0bFsyXSA9IDB4ZiA8PCAxNjsgLyogdHhfdHJpZXMgMCAqLwogCisJaWYgKElTX0NIQU5fMkdIWihhaC0+Y3VyY2hhbikpCisJCWN0bFszXSA9IDB4MWI7CS8qIENDS18xTSAqLworCWVsc2UKKwkJY3RsWzNdID0gMHhiOwkvKiBPRkRNXzZNICovCisKIAlmb3IgKGkgPSAwOyBpIDwgS0FMX05VTV9ERVNDX1dPUkRTOyBpKyspCiAJCVJFR19XUklURShhaCwgKEFSX1dPV19LQV9ERVNDX1dPUkQyICsgaSAqIDQpLCBjdGxbaV0pOwogCkBAIC0xMDMsMjEgKzEwMiwyMiBAQAogCiB9CiAKLXZvaWQgYXRoOWtfaHdfd293X2FwcGx5X3BhdHRlcm4oc3RydWN0IGF0aF9odyAqYWgsIHU4ICp1c2VyX3BhdHRlcm4sCi0JCQkJdTggKnVzZXJfbWFzaywgaW50IHBhdHRlcm5fY291bnQsCi0JCQkJaW50IHBhdHRlcm5fbGVuKQoraW50IGF0aDlrX2h3X3dvd19hcHBseV9wYXR0ZXJuKHN0cnVjdCBhdGhfaHcgKmFoLCB1OCAqdXNlcl9wYXR0ZXJuLAorCQkJICAgICAgIHU4ICp1c2VyX21hc2ssIGludCBwYXR0ZXJuX2NvdW50LAorCQkJICAgICAgIGludCBwYXR0ZXJuX2xlbikKIHsKIAlpbnQgaTsKIAl1MzIgcGF0dGVybl92YWwsIG1hc2tfdmFsOwogCXUzMiBzZXQsIGNscjsKIAotCS8qIEZJWE1FOiBzaG91bGQgY2hlY2sgY291bnQgYnkgcXVlcnlpbmcgdGhlIGhhcmR3YXJlIGNhcGFiaWxpdHkgKi8KLQlpZiAocGF0dGVybl9jb3VudCA+PSBNQVhfTlVNX1BBVFRFUk4pCi0JCXJldHVybjsKKwlpZiAocGF0dGVybl9jb3VudCA+PSBhaC0+d293Lm1heF9wYXR0ZXJucykKKwkJcmV0dXJuIC1FTk9TUEM7CiAKLQlSRUdfU0VUX0JJVChhaCwgQVJfV09XX1BBVFRFUk4sIEJJVChwYXR0ZXJuX2NvdW50KSk7CisJaWYgKHBhdHRlcm5fY291bnQgPCBNQVhfTlVNX1BBVFRFUk5fTEVHQUNZKQorCQlSRUdfU0VUX0JJVChhaCwgQVJfV09XX1BBVFRFUk4sIEJJVChwYXR0ZXJuX2NvdW50KSk7CisJZWxzZQorCQlSRUdfU0VUX0JJVChhaCwgQVJfTUFDX1BDVV9XT1c0LCBCSVQocGF0dGVybl9jb3VudCAtIDgpKTsKIAotCS8qIHNldCB0aGUgcmVnaXN0ZXJzIGZvciBwYXR0ZXJuICovCiAJZm9yIChpID0gMDsgaSA8IE1BWF9QQVRURVJOX1NJWkU7IGkgKz0gNCkgewogCQltZW1jcHkoJnBhdHRlcm5fdmFsLCB1c2VyX3BhdHRlcm4sIDQpOwogCQlSRUdfV1JJVEUoYWgsIChBUl9XT1dfVEJfUEFUVEVSTihwYXR0ZXJuX2NvdW50KSArIGkpLApAQCAtMTI1LDQ5ICsxMjUsNDIgQEAKIAkJdXNlcl9wYXR0ZXJuICs9IDQ7CiAJfQogCi0JLyogc2V0IHRoZSByZWdpc3RlcnMgZm9yIG1hc2sgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1BBVFRFUk5fTUFTS19TSVpFOyBpICs9IDQpIHsKIAkJbWVtY3B5KCZtYXNrX3ZhbCwgdXNlcl9tYXNrLCA0KTsKIAkJUkVHX1dSSVRFKGFoLCAoQVJfV09XX1RCX01BU0socGF0dGVybl9jb3VudCkgKyBpKSwgbWFza192YWwpOwogCQl1c2VyX21hc2sgKz0gNDsKIAl9CiAKLQkvKiBzZXQgdGhlIHBhdHRlcm4gbGVuZ3RoIHRvIGJlIG1hdGNoZWQKLQkgKgotCSAqIEFSX1dPV19MRU5HVEgxX1JFRzEKLQkgKiBiaXQgMzE6MjQgcGF0dGVybiAwIGxlbmd0aAotCSAqIGJpdCAyMzoxNiBwYXR0ZXJuIDEgbGVuZ3RoCi0JICogYml0IDE1OjggcGF0dGVybiAyIGxlbmd0aAotCSAqIGJpdCA3OjAgcGF0dGVybiAzIGxlbmd0aAotCSAqCi0JICogQVJfV09XX0xFTkdUSDFfUkVHMgotCSAqIGJpdCAzMToyNCBwYXR0ZXJuIDQgbGVuZ3RoCi0JICogYml0IDIzOjE2IHBhdHRlcm4gNSBsZW5ndGgKLQkgKiBiaXQgMTU6OCBwYXR0ZXJuIDYgbGVuZ3RoCi0JICogYml0IDc6MCBwYXR0ZXJuIDcgbGVuZ3RoCi0JICoKLQkgKiB0aGUgYmVsb3cgbG9naWMgd3JpdGVzIG91dCB0aGUgbmV3Ci0JICogcGF0dGVybiBsZW5ndGggZm9yIHRoZSBjb3JyZXNwb25kaW5nCi0JICogcGF0dGVybl9jb3VudCwgd2hpbGUgbWFza2luZyBvdXQgdGhlCi0JICogb3RoZXIgZmllbGRzCi0JICovCi0KLQlhaC0+d293X2V2ZW50X21hc2sgfD0gQklUKHBhdHRlcm5fY291bnQgKyBBUl9XT1dfUEFUX0ZPVU5EX1NISUZUKTsKKwlpZiAocGF0dGVybl9jb3VudCA8IE1BWF9OVU1fUEFUVEVSTl9MRUdBQ1kpCisJCWFoLT53b3cud293X2V2ZW50X21hc2sgfD0KKwkJCUJJVChwYXR0ZXJuX2NvdW50ICsgQVJfV09XX1BBVF9GT1VORF9TSElGVCk7CisJZWxzZQorCQlhaC0+d293Lndvd19ldmVudF9tYXNrMiB8PQorCQkJQklUKChwYXR0ZXJuX2NvdW50IC0gOCkgKyBBUl9XT1dfUEFUX0ZPVU5EX1NISUZUKTsKIAogCWlmIChwYXR0ZXJuX2NvdW50IDwgNCkgewotCQkvKiBQYXR0ZXJuIDAtMyB1c2VzIEFSX1dPV19MRU5HVEgxIHJlZ2lzdGVyICovCiAJCXNldCA9IChwYXR0ZXJuX2xlbiAmIEFSX1dPV19MRU5HVEhfTUFYKSA8PAogCQkgICAgICAgQVJfV09XX0xFTjFfU0hJRlQocGF0dGVybl9jb3VudCk7CiAJCWNsciA9IEFSX1dPV19MRU5HVEgxX01BU0socGF0dGVybl9jb3VudCk7CiAJCVJFR19STVcoYWgsIEFSX1dPV19MRU5HVEgxLCBzZXQsIGNscik7Ci0JfSBlbHNlIHsKLQkJLyogUGF0dGVybiA0LTcgdXNlcyBBUl9XT1dfTEVOR1RIMiByZWdpc3RlciAqLworCX0gZWxzZSBpZiAocGF0dGVybl9jb3VudCA8IDgpIHsKIAkJc2V0ID0gKHBhdHRlcm5fbGVuICYgQVJfV09XX0xFTkdUSF9NQVgpIDw8CiAJCSAgICAgICBBUl9XT1dfTEVOMl9TSElGVChwYXR0ZXJuX2NvdW50KTsKIAkJY2xyID0gQVJfV09XX0xFTkdUSDJfTUFTSyhwYXR0ZXJuX2NvdW50KTsKIAkJUkVHX1JNVyhhaCwgQVJfV09XX0xFTkdUSDIsIHNldCwgY2xyKTsKKwl9IGVsc2UgaWYgKHBhdHRlcm5fY291bnQgPCAxMikgeworCQlzZXQgPSAocGF0dGVybl9sZW4gJiBBUl9XT1dfTEVOR1RIX01BWCkgPDwKKwkJICAgICAgIEFSX1dPV19MRU4zX1NISUZUKHBhdHRlcm5fY291bnQpOworCQljbHIgPSBBUl9XT1dfTEVOR1RIM19NQVNLKHBhdHRlcm5fY291bnQpOworCQlSRUdfUk1XKGFoLCBBUl9XT1dfTEVOR1RIMywgc2V0LCBjbHIpOworCX0gZWxzZSBpZiAocGF0dGVybl9jb3VudCA8IE1BWF9OVU1fUEFUVEVSTikgeworCQlzZXQgPSAocGF0dGVybl9sZW4gJiBBUl9XT1dfTEVOR1RIX01BWCkgPDwKKwkJICAgICAgIEFSX1dPV19MRU40X1NISUZUKHBhdHRlcm5fY291bnQpOworCQljbHIgPSBBUl9XT1dfTEVOR1RINF9NQVNLKHBhdHRlcm5fY291bnQpOworCQlSRUdfUk1XKGFoLCBBUl9XT1dfTEVOR1RINCwgc2V0LCBjbHIpOwogCX0KIAorCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChhdGg5a19od193b3dfYXBwbHlfcGF0dGVybik7CiAKQEAgLTE4OSw3ICsxODIsNyBAQAogCSAqIHJlZ2lzdGVyLiBUaGlzIG1hc2sgd2lsbCBjbGVhbiBpdCB1cC4KIAkgKi8KIAotCXZhbCAmPSBhaC0+d293X2V2ZW50X21hc2s7CisJdmFsICY9IGFoLT53b3cud293X2V2ZW50X21hc2s7CiAKIAlpZiAodmFsKSB7CiAJCWlmICh2YWwgJiBBUl9XT1dfTUFHSUNfUEFUX0ZPVU5EKQpAQCAtMjMzLDE5MCArMjI2LDE5MiBAQAogCWlmIChhaC0+aXNfcGNpZXhwcmVzcykKIAkJYXRoOWtfaHdfY29uZmlncGNpcG93ZXJzYXZlKGFoLCBmYWxzZSk7CiAKLQlhaC0+d293X2V2ZW50X21hc2sgPSAwOworCWFoLT53b3cud293X2V2ZW50X21hc2sgPSAwOwogCiAJcmV0dXJuIHdvd19zdGF0dXM7CiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X3dvd193YWtldXApOwogCitzdGF0aWMgdm9pZCBhdGg5a19od193b3dfc2V0X2Fyd3JfcmVnKHN0cnVjdCBhdGhfaHcgKmFoKQoreworCXUzMiB3YV9yZWc7CisKKwlpZiAoIWFoLT5pc19wY2lleHByZXNzKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gdW50aWUgdGhlIGludGVybmFsIFBPUiAocG93ZXItb24tcmVzZXQpCisJICogdG8gdGhlIGV4dGVybmFsIFBDSS1FIHJlc2V0LiBXZSBhbHNvIG5lZWQgdG8gdGllCisJICogdGhlIFBDSS1FIFBoeSByZXNldCB0byB0aGUgUENJLUUgcmVzZXQuCisJICovCisJd2FfcmVnID0gUkVHX1JFQUQoYWgsIEFSX1dBKTsKKwl3YV9yZWcgJj0gfkFSX1dBX1VOVElFX1JFU0VUX0VOOworCXdhX3JlZyB8PSBBUl9XQV9SRVNFVF9FTjsKKwl3YV9yZWcgfD0gQVJfV0FfUE9SX1NIT1JUOworCisJUkVHX1dSSVRFKGFoLCBBUl9XQSwgd2FfcmVnKTsKK30KKwogdm9pZCBhdGg5a19od193b3dfZW5hYmxlKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcGF0dGVybl9lbmFibGUpCiB7CiAJdTMyIHdvd19ldmVudF9tYXNrOwotCXUzMiBzZXQsIGNscjsKKwl1MzIga2VlcF9hbGl2ZSwgbWFnaWNfcGF0dGVybiwgaG9zdF9wbV9jdHJsOworCisJd293X2V2ZW50X21hc2sgPSBhaC0+d293Lndvd19ldmVudF9tYXNrOwogCiAJLyoKLQkgKiB3b3dfZXZlbnRfbWFzayBpcyBhIG1hc2sgdG8gdGhlIEFSX1dPV19QQVRURVJOIHJlZ2lzdGVyIHRvCi0JICogaW5kaWNhdGUgd2hpY2ggV29XIGV2ZW50cyB3ZSBoYXZlIGVuYWJsZWQuIFRoZSBXb1cgZXZlbnRzCi0JICogYXJlIGZyb20gdGhlICdwYXR0ZXJuX2VuYWJsZScgaW4gdGhpcyBmdW5jdGlvbiBhbmQKLQkgKiAncGF0dGVybl9jb3VudCcgb2YgYXRoOWtfaHdfd293X2FwcGx5X3BhdHRlcm4oKQotCSAqLwotCXdvd19ldmVudF9tYXNrID0gYWgtPndvd19ldmVudF9tYXNrOwotCi0JLyoKLQkgKiBVbnRpZSBQb3dlci1vbi1SZXNldCBmcm9tIHRoZSBQQ0ktRS1SZXNldC4gV2hlbiB3ZSBhcmUgaW4KLQkgKiBXT1cgc2xlZXAsIHdlIGRvIHdhbnQgdGhlIFJlc2V0IGZyb20gdGhlIFBDSS1FIHRvIGRpc3R1cmIKLQkgKiBvdXIgaHcgc3RhdGUKLQkgKi8KLQlpZiAoYWgtPmlzX3BjaWV4cHJlc3MpIHsKLQkJLyoKLQkJICogd2UgbmVlZCB0byB1bnRpZSB0aGUgaW50ZXJuYWwgUE9SIChwb3dlci1vbi1yZXNldCkKLQkJICogdG8gdGhlIGV4dGVybmFsIFBDSS1FIHJlc2V0LiBXZSBhbHNvIG5lZWQgdG8gdGllCi0JCSAqIHRoZSBQQ0ktRSBQaHkgcmVzZXQgdG8gdGhlIFBDSS1FIHJlc2V0LgotCQkgKi8KLQkJc2V0ID0gQVJfV0FfUkVTRVRfRU4gfCBBUl9XQV9QT1JfU0hPUlQ7Ci0JCWNsciA9IEFSX1dBX1VOVElFX1JFU0VUX0VOIHwgQVJfV0FfRDNfTDFfRElTQUJMRTsKLQkJUkVHX1JNVyhhaCwgQVJfV0EsIHNldCwgY2xyKTsKLQl9Ci0KLQkvKgotCSAqIHNldCB0aGUgcG93ZXIgc3RhdGVzIGFwcHJvcHJpYXRlbHkgYW5kIGVuYWJsZSBQTUUKLQkgKi8KLQlzZXQgPSBBUl9QTUNUUkxfSE9TVF9QTUVfRU4gfCBBUl9QTUNUUkxfUFdSX1BNX0NUUkxfRU5BIHwKLQkgICAgICBBUl9QTUNUUkxfQVVYX1BXUl9ERVQgfCBBUl9QTUNUUkxfV09XX1BNRV9DTFI7Ci0KLQkvKgotCSAqIHNldCBhbmQgY2xlYXIgV09XX1BNRV9DTEVBUiByZWdpc3RlcnMgZm9yIHRoZSBjaGlwCisJICogQVJfUE1DVFJMX0hPU1RfUE1FX0VOIC0gT3ZlcnJpZGUgUE1FIGVuYWJsZSBpbiBjb25maWd1cmF0aW9uCisJICogICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UgYW5kIGFsbG93IE1BQyB0byBnZW5lcmF0ZSBXb1cgYW55d2F5LgorCSAqCisJICogQVJfUE1DVFJMX1BXUl9QTV9DVFJMX0VOQSAtID8/PworCSAqCisJICogQVJfUE1DVFJMX0FVWF9QV1JfREVUIC0gUENJIGNvcmUgU1lTX0FVWF9QV1JfREVUIHNpZ25hbCwKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkcyB0byBiZSBzZXQgZm9yIFdvVyBpbiBQQ0kgbW9kZS4KKwkgKgorCSAqIEFSX1BNQ1RSTF9XT1dfUE1FX0NMUiAtIFdvVyBDbGVhciBTaWduYWwgZ29pbmcgdG8gdGhlIE1BQy4KKwkgKgorCSAqIFNldCB0aGUgcG93ZXIgc3RhdGVzIGFwcHJvcHJpYXRlbHkgYW5kIGVuYWJsZSBQTUUuCisJICoKKwkgKiBTZXQgYW5kIGNsZWFyIFdPV19QTUVfQ0xFQVIgZm9yIHRoZSBjaGlwCiAJICogdG8gZ2VuZXJhdGUgbmV4dCB3b3cgc2lnbmFsLgogCSAqLwotCVJFR19TRVRfQklUKGFoLCBBUl9QQ0lFX1BNX0NUUkwsIHNldCk7Ci0JY2xyID0gQVJfUE1DVFJMX1dPV19QTUVfQ0xSOwotCVJFR19DTFJfQklUKGFoLCBBUl9QQ0lFX1BNX0NUUkwsIGNscik7CisJUkVHX1NFVF9CSVQoYWgsIEFSX1BDSUVfUE1fQ1RSTCwgQVJfUE1DVFJMX0hPU1RfUE1FX0VOIHwKKwkJICAgIAkJCSBBUl9QTUNUUkxfUFdSX1BNX0NUUkxfRU5BIHwKKwkJICAgIAkJCSBBUl9QTUNUUkxfQVVYX1BXUl9ERVQgfAorCQkgICAgCQkJIEFSX1BNQ1RSTF9XT1dfUE1FX0NMUik7CisJUkVHX0NMUl9CSVQoYWgsIEFSX1BDSUVfUE1fQ1RSTCwgQVJfUE1DVFJMX1dPV19QTUVfQ0xSKTsKIAogCS8qCi0JICogU2V0dXAgZm9yOgotCSAqCS0gYmVhY29uIG1pc3NlcwotCSAqCS0gbWFnaWMgcGF0dGVybgotCSAqCS0ga2VlcCBhbGl2ZSB0aW1lb3V0Ci0JICoJLSBwYXR0ZXJuIG1hdGNoaW5nCisJICogUmFuZG9tIEJhY2tvZmYuCisJICoKKwkgKiAzMToyOCBpbiBBUl9XT1dfUEFUVEVSTiA6IEluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGJpdHMgdXNlZCBpbiB0aGUKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRpb24gd2luZG93LiBGb3IgdmFsdWUgTiwKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSByYW5kb20gYmFja29mZiB3aWxsIGJlIHNlbGVjdGVkIGJldHdlZW4KKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgYW5kICgyIF4gTikgLSAxLgogCSAqLworCVJFR19TRVRfQklUKGFoLCBBUl9XT1dfUEFUVEVSTiwKKwkJICAgIEFSX1dPV19CQUNLX09GRl9TSElGVChBUl9XT1dfUEFUX0JBQ0tPRkYpKTsKIAogCS8qCi0JICogUHJvZ3JhbSBkZWZhdWx0IHZhbHVlcyBmb3IgcGF0dGVybiBiYWNrb2ZmLCBhaWZzL3Nsb3QvS0FMIGNvdW50LAotCSAqIGJlYWNvbiBtaXNzIHRpbWVvdXQsIEtBTCB0aW1lb3V0LCBldGMuCisJICogQUlGUyB0aW1lLCBTbG90IHRpbWUsIEtlZXAgQWxpdmUgY291bnQuCiAJICovCi0Jc2V0ID0gQVJfV09XX0JBQ0tfT0ZGX1NISUZUKEFSX1dPV19QQVRfQkFDS09GRik7Ci0JUkVHX1NFVF9CSVQoYWgsIEFSX1dPV19QQVRURVJOLCBzZXQpOwotCi0Jc2V0ID0gQVJfV09XX0FJRlNfQ05UKEFSX1dPV19DTlRfQUlGU19DTlQpIHwKLQkgICAgICBBUl9XT1dfU0xPVF9DTlQoQVJfV09XX0NOVF9TTE9UX0NOVCkgfAotCSAgICAgIEFSX1dPV19LRUVQX0FMSVZFX0NOVChBUl9XT1dfQ05UX0tBX0NOVCk7Ci0JUkVHX1NFVF9CSVQoYWgsIEFSX1dPV19DT1VOVCwgc2V0KTsKLQorCVJFR19TRVRfQklUKGFoLCBBUl9XT1dfQ09VTlQsIEFSX1dPV19BSUZTX0NOVChBUl9XT1dfQ05UX0FJRlNfQ05UKSB8CisJCSAgICAJCSAgICAgIEFSX1dPV19TTE9UX0NOVChBUl9XT1dfQ05UX1NMT1RfQ05UKSB8CisJCSAgICAJCSAgICAgIEFSX1dPV19LRUVQX0FMSVZFX0NOVChBUl9XT1dfQ05UX0tBX0NOVCkpOworCS8qCisJICogQmVhY29uIHRpbWVvdXQuCisJICovCiAJaWYgKHBhdHRlcm5fZW5hYmxlICYgQUhfV09XX0JFQUNPTl9NSVNTKQotCQlzZXQgPSBBUl9XT1dfQkVBQ09OX1RJTU87Ci0JLyogV2UgYXJlIG5vdCB1c2luZyBiZWFjb24gbWlzcywgcHJvZ3JhbSBhIGxhcmdlIHZhbHVlICovCisJCVJFR19XUklURShhaCwgQVJfV09XX0JDTl9USU1PLCBBUl9XT1dfQkVBQ09OX1RJTU8pOwogCWVsc2UKLQkJc2V0ID0gQVJfV09XX0JFQUNPTl9USU1PX01BWDsKLQotCVJFR19XUklURShhaCwgQVJfV09XX0JDTl9USU1PLCBzZXQpOworCQlSRUdfV1JJVEUoYWgsIEFSX1dPV19CQ05fVElNTywgQVJfV09XX0JFQUNPTl9USU1PX01BWCk7CiAKIAkvKgotCSAqIEtlZXAgYWxpdmUgdGltbyBpbiBtcyBleGNlcHQgQVI5MjgwCisJICogS2VlcCBhbGl2ZSB0aW1lb3V0IGluIG1zLgogCSAqLwogCWlmICghcGF0dGVybl9lbmFibGUpCi0JCXNldCA9IEFSX1dPV19LRUVQX0FMSVZFX05FVkVSOworCQlSRUdfV1JJVEUoYWgsIEFSX1dPV19LRUVQX0FMSVZFX1RJTU8sIEFSX1dPV19LRUVQX0FMSVZFX05FVkVSKTsKIAllbHNlCi0JCXNldCA9IEtBTF9USU1FT1VUICogMzI7Ci0KLQlSRUdfV1JJVEUoYWgsIEFSX1dPV19LRUVQX0FMSVZFX1RJTU8sIHNldCk7CisJCVJFR19XUklURShhaCwgQVJfV09XX0tFRVBfQUxJVkVfVElNTywgS0FMX1RJTUVPVVQgKiAzMik7CiAKIAkvKgotCSAqIEtlZXAgYWxpdmUgZGVsYXkgaW4gdXMuIGJhc2VkIG9uICdwb3dlciBvbiBjbG9jaycsCi0JICogdGhlcmVmb3JlIGluIHVzZWMKKwkgKiBLZWVwIGFsaXZlIGRlbGF5IGluIHVzLgogCSAqLwotCXNldCA9IEtBTF9ERUxBWSAqIDEwMDA7Ci0JUkVHX1dSSVRFKGFoLCBBUl9XT1dfS0VFUF9BTElWRV9ERUxBWSwgc2V0KTsKKwlSRUdfV1JJVEUoYWgsIEFSX1dPV19LRUVQX0FMSVZFX0RFTEFZLCBLQUxfREVMQVkgKiAxMDAwKTsKIAogCS8qCi0JICogQ3JlYXRlIGtlZXAgYWxpdmUgcGF0dGVybiB0byByZXNwb25kIHRvIGJlYWNvbnMKKwkgKiBDcmVhdGUga2VlcCBhbGl2ZSBwYXR0ZXJuIHRvIHJlc3BvbmQgdG8gYmVhY29ucy4KIAkgKi8KIAlhdGg5a193b3dfY3JlYXRlX2tlZXBfYWxpdmVfcGF0dGVybihhaCk7CiAKIAkvKgotCSAqIENvbmZpZ3VyZSBNQUMgV29XIFJlZ2lzdGVycworCSAqIENvbmZpZ3VyZSBrZWVwIGFsaXZlIHJlZ2lzdGVyLgogCSAqLwotCXNldCA9IDA7CisJa2VlcF9hbGl2ZSA9IFJFR19SRUFEKGFoLCBBUl9XT1dfS0VFUF9BTElWRSk7CisKIAkvKiBTZW5kIGtlZXAgYWxpdmUgdGltZW91dHMgYW55d2F5ICovCi0JY2xyID0gQVJfV09XX0tFRVBfQUxJVkVfQVVUT19ESVM7CisJa2VlcF9hbGl2ZSAmPSB+QVJfV09XX0tFRVBfQUxJVkVfQVVUT19ESVM7CiAKLQlpZiAocGF0dGVybl9lbmFibGUgJiBBSF9XT1dfTElOS19DSEFOR0UpCisJaWYgKHBhdHRlcm5fZW5hYmxlICYgQUhfV09XX0xJTktfQ0hBTkdFKSB7CisJCWtlZXBfYWxpdmUgJj0gfkFSX1dPV19LRUVQX0FMSVZFX0ZBSUxfRElTOwogCQl3b3dfZXZlbnRfbWFzayB8PSBBUl9XT1dfS0VFUF9BTElWRV9GQUlMOwotCWVsc2UKLQkJc2V0ID0gQVJfV09XX0tFRVBfQUxJVkVfRkFJTF9ESVM7CisJfSBlbHNlIHsKKwkJa2VlcF9hbGl2ZSB8PSBBUl9XT1dfS0VFUF9BTElWRV9GQUlMX0RJUzsKKwl9CiAKLQlzZXQgPSBBUl9XT1dfS0VFUF9BTElWRV9GQUlMX0RJUzsKLQlSRUdfUk1XKGFoLCBBUl9XT1dfS0VFUF9BTElWRSwgc2V0LCBjbHIpOworCVJFR19XUklURShhaCwgQVJfV09XX0tFRVBfQUxJVkUsIGtlZXBfYWxpdmUpOwogCiAJLyoKLQkgKiB3ZSBhcmUgcmVseWluZyBvbiBhIGJtaXNzIGZhaWx1cmUuIGVuc3VyZSB3ZSBoYXZlCi0JICogZW5vdWdoIHRocmVzaG9sZCB0byBwcmV2ZW50IGZhbHNlIHBvc2l0aXZlcworCSAqIFdlIGFyZSByZWx5aW5nIG9uIGEgYm1pc3MgZmFpbHVyZSwgZW5zdXJlIHdlIGhhdmUKKwkgKiBlbm91Z2ggdGhyZXNob2xkIHRvIHByZXZlbnQgZmFsc2UgcG9zaXRpdmVzLgogCSAqLwogCVJFR19STVdfRklFTEQoYWgsIEFSX1JTU0lfVEhSLCBBUl9SU1NJX1RIUl9CTV9USFIsCiAJCSAgICAgIEFSX1dPV19CTUlTU1RIUkVTSE9MRCk7CiAKLQlzZXQgPSAwOwotCWNsciA9IDA7Ci0KIAlpZiAocGF0dGVybl9lbmFibGUgJiBBSF9XT1dfQkVBQ09OX01JU1MpIHsKLQkJc2V0ID0gQVJfV09XX0JFQUNPTl9GQUlMX0VOOwogCQl3b3dfZXZlbnRfbWFzayB8PSBBUl9XT1dfQkVBQ09OX0ZBSUw7CisJCVJFR19TRVRfQklUKGFoLCBBUl9XT1dfQkNOX0VOLCBBUl9XT1dfQkVBQ09OX0ZBSUxfRU4pOwogCX0gZWxzZSB7Ci0JCWNsciA9IEFSX1dPV19CRUFDT05fRkFJTF9FTjsKKwkJUkVHX0NMUl9CSVQoYWgsIEFSX1dPV19CQ05fRU4sIEFSX1dPV19CRUFDT05fRkFJTF9FTik7CiAJfQogCi0JUkVHX1JNVyhhaCwgQVJfV09XX0JDTl9FTiwgc2V0LCBjbHIpOwotCi0Jc2V0ID0gMDsKLQljbHIgPSAwOwogCS8qCi0JICogRW5hYmxlIHRoZSBtYWdpYyBwYWNrZXQgcmVnaXN0ZXJzCisJICogRW5hYmxlIHRoZSBtYWdpYyBwYWNrZXQgcmVnaXN0ZXJzLgogCSAqLworCW1hZ2ljX3BhdHRlcm4gPSBSRUdfUkVBRChhaCwgQVJfV09XX1BBVFRFUk4pOworCW1hZ2ljX3BhdHRlcm4gfD0gQVJfV09XX01BQ19JTlRSX0VOOworCiAJaWYgKHBhdHRlcm5fZW5hYmxlICYgQUhfV09XX01BR0lDX1BBVFRFUk5fRU4pIHsKLQkJc2V0ID0gQVJfV09XX01BR0lDX0VOOworCQltYWdpY19wYXR0ZXJuIHw9IEFSX1dPV19NQUdJQ19FTjsKIAkJd293X2V2ZW50X21hc2sgfD0gQVJfV09XX01BR0lDX1BBVF9GT1VORDsKIAl9IGVsc2UgewotCQljbHIgPSBBUl9XT1dfTUFHSUNfRU47CisJCW1hZ2ljX3BhdHRlcm4gJj0gfkFSX1dPV19NQUdJQ19FTjsKIAl9Ci0Jc2V0IHw9IEFSX1dPV19NQUNfSU5UUl9FTjsKLQlSRUdfUk1XKGFoLCBBUl9XT1dfUEFUVEVSTiwgc2V0LCBjbHIpOwogCisJUkVHX1dSSVRFKGFoLCBBUl9XT1dfUEFUVEVSTiwgbWFnaWNfcGF0dGVybik7CisKKwkvKgorCSAqIEVuYWJsZSBwYXR0ZXJuIG1hdGNoaW5nIGZvciBwYWNrZXRzIHdoaWNoIGFyZSBsZXNzCisJICogdGhhbiAyNTYgYnl0ZXMuCisJICovCiAJUkVHX1dSSVRFKGFoLCBBUl9XT1dfUEFUVEVSTl9NQVRDSF9MVF8yNTZCLAogCQkgIEFSX1dPV19QQVRURVJOX1NVUFBPUlRFRCk7CiAKIAkvKgotCSAqIFNldCB0aGUgcG93ZXIgc3RhdGVzIGFwcHJvcHJpYXRlbHkgYW5kIGVuYWJsZSBQTUUKKwkgKiBTZXQgdGhlIHBvd2VyIHN0YXRlcyBhcHByb3ByaWF0ZWx5IGFuZCBlbmFibGUgUE1FLgogCSAqLwotCWNsciA9IDA7Ci0Jc2V0ID0gQVJfUE1DVFJMX1BXUl9TVEFURV9EMUQzIHwgQVJfUE1DVFJMX0hPU1RfUE1FX0VOIHwKLQkgICAgICBBUl9QTUNUUkxfUFdSX1BNX0NUUkxfRU5BOworCWhvc3RfcG1fY3RybCA9IFJFR19SRUFEKGFoLCBBUl9QQ0lFX1BNX0NUUkwpOworCWhvc3RfcG1fY3RybCB8PSBBUl9QTUNUUkxfUFdSX1NUQVRFX0QxRDMgfAorCQkJQVJfUE1DVFJMX0hPU1RfUE1FX0VOIHwKKwkJCUFSX1BNQ1RSTF9QV1JfUE1fQ1RSTF9FTkE7CisJaG9zdF9wbV9jdHJsICY9IH5BUl9QQ0lFX1BNX0NUUkxfRU5BOwogCi0JY2xyID0gQVJfUENJRV9QTV9DVFJMX0VOQTsKLQlSRUdfUk1XKGFoLCBBUl9QQ0lFX1BNX0NUUkwsIHNldCwgY2xyKTsKKwlpZiAoQVJfU1JFVl85NDYyKGFoKSkgeworCQkvKgorCQkgKiBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IHRoZSBjaGlwIHdha2luZyB1cAorCQkgKiB0aGUgaG9zdCB3aXRoaW4gMy00IHNlY29uZHMgd2l0aCBjZXJ0YWluCisJCSAqIHBsYXRmb3JtL0JJT1MuCisJCSAqLworCQlob3N0X3BtX2N0cmwgJj0gfkFSX1BNQ1RSTF9QV1JfU1RBVEVfRDFEMzsKKwkJaG9zdF9wbV9jdHJsIHw9IEFSX1BNQ1RSTF9QV1JfU1RBVEVfRDFEM19SRUFMOworCX0KKworCVJFR19XUklURShhaCwgQVJfUENJRV9QTV9DVFJMLCBob3N0X3BtX2N0cmwpOwogCiAJLyoKLQkgKiB0aGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IHRoZSBjaGlwIHdha2luZyB1cAotCSAqIHRoZSBob3N0IHdpdGhpbiAzLTQgc2Vjb25kcyB3aXRoIGNlcnRhaW4KLQkgKiBwbGF0Zm9ybS9CSU9TLiBUaGUgZml4IGlzIHRvIGVuYWJsZQotCSAqIEQxICYgRDMgdG8gbWF0Y2ggb3JpZ2luYWwgZGVmaW5pdGlvbiBhbmQKLQkgKiBhbHNvIG1hdGNoIHRoZSBPVFAgdmFsdWUuIEFueXdheSB0aGlzCi0JICogaXMgbW9yZSByZWxhdGVkIHRvIFNXIFdPVy4KKwkgKiBFbmFibGUgc2VxdWVuY2UgbnVtYmVyIGdlbmVyYXRpb24gd2hlbiBhc2xlZXAuCiAJICovCi0JY2xyID0gQVJfUE1DVFJMX1BXUl9TVEFURV9EMUQzOwotCVJFR19DTFJfQklUKGFoLCBBUl9QQ0lFX1BNX0NUUkwsIGNscik7Ci0KLQlzZXQgPSBBUl9QTUNUUkxfUFdSX1NUQVRFX0QxRDNfUkVBTDsKLQlSRUdfU0VUX0JJVChhaCwgQVJfUENJRV9QTV9DVFJMLCBzZXQpOwotCiAJUkVHX0NMUl9CSVQoYWgsIEFSX1NUQV9JRDEsIEFSX1NUQV9JRDFfUFJFU0VSVkVfU0VRTlVNKTsKIAotCS8qIHRvIGJyaW5nIGRvd24gV09XIHBvd2VyIGxvdyBtYXJnaW4gKi8KLQlzZXQgPSBCSVQoMTMpOwotCVJFR19TRVRfQklUKGFoLCBBUl9QQ0lFX1BIWV9SRUczLCBzZXQpOworCS8qIFRvIGJyaW5nIGRvd24gV09XIHBvd2VyIGxvdyBtYXJnaW4gKi8KKwlSRUdfU0VUX0JJVChhaCwgQVJfUENJRV9QSFlfUkVHMywgQklUKDEzKSk7CisKKwlhdGg5a19od193b3dfc2V0X2Fyd3JfcmVnKGFoKTsKKwogCS8qIEhXIFdvVyAqLwotCWNsciA9IEJJVCg1KTsKLQlSRUdfQ0xSX0JJVChhaCwgQVJfUENVX01JU0NfTU9ERTMsIGNscik7CisJUkVHX0NMUl9CSVQoYWgsIEFSX1BDVV9NSVNDX01PREUzLCBCSVQoNSkpOwogCiAJYXRoOWtfaHdfc2V0X3Bvd2VybW9kZV93b3dfc2xlZXAoYWgpOwotCWFoLT53b3dfZXZlbnRfbWFzayA9IHdvd19ldmVudF9tYXNrOworCWFoLT53b3cud293X2V2ZW50X21hc2sgPSB3b3dfZXZlbnRfbWFzazsKIH0KIEVYUE9SVF9TWU1CT0woYXRoOWtfaHdfd293X2VuYWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5NTN4X2luaXR2YWxzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5NTN4X2luaXR2YWxzLmgKaW5kZXggMTU5Y2M2Zi4uNmZjMGQwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTUzeF9pbml0dmFscy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjk1M3hfaW5pdHZhbHMuaApAQCAtMzU4LDcgKzM1OCw3IEBACiAJezB4MDAwMDllMWMsIDB4MDAwMWNmOWMsIDB4MDAwMWNmOWMsIDB4MDAwMjFmOWMsIDB4MDAwMjFmOWN9LAogCXsweDAwMDA5ZTIwLCAweDAwMDAwM2I1LCAweDAwMDAwM2I1LCAweDAwMDAwM2NlLCAweDAwMDAwM2NlfSwKIAl7MHgwMDAwOWUyYywgMHgwMDAwMDAxYywgMHgwMDAwMDAxYywgMHgwMDAwMDAyMSwgMHgwMDAwMDAyMX0sCi0JezB4MDAwMDllM2MsIDB4Y2ZhMTA4MjAsIDB4Y2ZhMTA4MjAsIDB4Y2ZhMTA4MjIsIDB4Y2ZhMTA4MjJ9LAorCXsweDAwMDA5ZTNjLCAweGNmYTEwODIwLCAweGNmYTEwODIwLCAweGNmYTEwODIwLCAweGNmYTEwODIwfSwKIAl7MHgwMDAwOWU0NCwgMHhmZTMyMWUyNywgMHhmZTMyMWUyNywgMHhmZTI5MWUyNywgMHhmZTI5MWUyN30sCiAJezB4MDAwMDllNDgsIDB4NTAzMDIwMWEsIDB4NTAzMDIwMWEsIDB4NTAzMDIwMTIsIDB4NTAzMDIwMTJ9LAogCXsweDAwMDA5ZmM4LCAweDAwMDNmMDAwLCAweDAwMDNmMDAwLCAweDAwMDFhMDAwLCAweDAwMDFhMDAwfSwKQEAgLTM3OCw3ICszNzgsNyBAQAogCXsweDAwMDBhMjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwfSwKIAl7MHgwMDAwYTI4OCwgMHgwMDAwMDExMCwgMHgwMDAwMDExMCwgMHgwMDAwMDExMCwgMHgwMDAwMDExMH0sCiAJezB4MDAwMGEyOGMsIDB4MDAwMjIyMjIsIDB4MDAwMjIyMjIsIDB4MDAwMjIyMjIsIDB4MDAwMjIyMjJ9LAotCXsweDAwMDBhMmM0LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4fSwKKwl7MHgwMDAwYTJjNCwgMHgwMDE1OGQxOCwgMHgwMDE1OGQxOCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQxOH0sCiAJezB4MDAwMGEyY2MsIDB4MThjNTAwMzMsIDB4MThjNDM0MzMsIDB4MThjNDEwMzMsIDB4MThjNDRjMzN9LAogCXsweDAwMDBhMmQwLCAweDAwMDQxOTgyLCAweDAwMDQxOTgyLCAweDAwMDQxOTgyLCAweDAwMDQxOTgyfSwKIAl7MHgwMDAwYTJkOCwgMHg3OTk5YTgzYiwgMHg3OTk5YTgzYiwgMHg3OTk5YTgzYiwgMHg3OTk5YTgzYn0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5NTV4XzFwMF9pbml0dmFscy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTU1eF8xcDBfaW5pdHZhbHMuaAppbmRleCBmZDZhODRjLi4xNDg1NjJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5NTV4XzFwMF9pbml0dmFscy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjk1NXhfMXAwX2luaXR2YWxzLmgKQEAgLTYzLDcgKzYzLDcgQEAKIAl7MHgwMDAwOWUxYywgMHgwMDAxY2Y5YywgMHgwMDAxY2Y5YywgMHgwMDAyMWY5YywgMHgwMDAyMWY5Y30sCiAJezB4MDAwMDllMjAsIDB4MDAwMDAzYjUsIDB4MDAwMDAzYjUsIDB4MDAwMDAzY2UsIDB4MDAwMDAzY2V9LAogCXsweDAwMDA5ZTJjLCAweDAwMDAwMDFjLCAweDAwMDAwMDFjLCAweDAwMDAwMDIxLCAweDAwMDAwMDIxfSwKLQl7MHgwMDAwOWUzYywgMHhjZmExMDgyMCwgMHhjZmExMDgyMCwgMHhjZmExMDgyMiwgMHhjZmExMDgyMn0sCisJezB4MDAwMDllM2MsIDB4Y2ZhMTA4MjAsIDB4Y2ZhMTA4MjAsIDB4Y2ZhMTA4MjAsIDB4Y2ZhMTA4MjB9LAogCXsweDAwMDA5ZTQ0LCAweGZlMzIxZTI3LCAweGZlMzIxZTI3LCAweGZlMjkxZTI3LCAweGZlMjkxZTI3fSwKIAl7MHgwMDAwOWU0OCwgMHg1MDMwMjAxYSwgMHg1MDMwMjAxYSwgMHg1MDMwMjAxMiwgMHg1MDMwMjAxMn0sCiAJezB4MDAwMDlmYzgsIDB4MDAwM2YwMDAsIDB4MDAwM2YwMDAsIDB4MDAwMWEwMDAsIDB4MDAwMWEwMDB9LApAQCAtODMsNyArODMsNyBAQAogCXsweDAwMDBhMjg0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDEwLCAweDAwMDAwMDEwfSwKIAl7MHgwMDAwYTI4OCwgMHgwMDAwMDExMCwgMHgwMDAwMDExMCwgMHgwMDAwMDExMCwgMHgwMDAwMDExMH0sCiAJezB4MDAwMGEyOGMsIDB4MDAwMjIyMjIsIDB4MDAwMjIyMjIsIDB4MDAwMjIyMjIsIDB4MDAwMjIyMjJ9LAotCXsweDAwMDBhMmM0LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4LCAweDAwMTU4ZDE4fSwKKwl7MHgwMDAwYTJjNCwgMHgwMDE1OGQxOCwgMHgwMDE1OGQxOCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQxOH0sCiAJezB4MDAwMGEyY2MsIDB4MThjNTAwMzMsIDB4MThjNDM0MzMsIDB4MThjNDEwMzMsIDB4MThjNDRjMzN9LAogCXsweDAwMDBhMmQwLCAweDAwMDQxOTgyLCAweDAwMDQxOTgyLCAweDAwMDQxOTgyLCAweDAwMDQxOTgyfSwKIAl7MHgwMDAwYTJkOCwgMHg3OTk5YTgzYiwgMHg3OTk5YTgzYiwgMHg3OTk5YTgzYiwgMHg3OTk5YTgzYn0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5NTZ4X2luaXR2YWxzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5NTZ4X2luaXR2YWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNhNDdlYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjk1NnhfaW5pdHZhbHMuaApAQCAtMCwwICsxLDEwNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBBdGhlcm9zIENvbW11bmljYXRpb25zIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEyIFF1YWxjb21tIEF0aGVyb3MgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgSU5JVFZBTFNfOTU2WF9ICisjZGVmaW5lIElOSVRWQUxTXzk1NlhfSAorCisjZGVmaW5lIHFjYTk1NnhfMXAwX21hY19jb3JlIGFyOTU1eF8xcDBfbWFjX2NvcmUKKworI2RlZmluZSBxY2E5NTZ4XzFwMF9tYWNfcG9zdGFtYmxlIGFyOTMzMV8xcDFfbWFjX3Bvc3RhbWJsZQorCisjZGVmaW5lIHFjYTk1NnhfMXAwX3NvY19wcmVhbWJsZSBhcjk1NXhfMXAwX3NvY19wcmVhbWJsZQorCisjZGVmaW5lIHFjYTk1NnhfMXAwX3NvY19wb3N0YW1ibGUgYXI5MzAwXzJwMl9zb2NfcG9zdGFtYmxlCisKKyNkZWZpbmUgcWNhOTU2eF8xcDBfY29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl90YWJsZSBhcjkzMDBDb21tb25fd29feGxuYV9yeF9nYWluX3RhYmxlXzJwMgorCisjZGVmaW5lIHFjYTk1NnhfMXAwX2Jhc2ViYW5kX3Bvc3RhbWJsZV9kZnNfY2hhbm5lbCBhcjkzMDBfMnAyX2Jhc2ViYW5kX3Bvc3RhbWJsZV9kZnNfY2hhbm5lbAorCisjZGVmaW5lIHFjYTk1NnhfMXAwX2NvbW1vbl93b194bG5hX3J4X2dhaW5fYm91bmRzIGFyOTU1eF8xcDBfY29tbW9uX3dvX3hsbmFfcnhfZ2Fpbl9ib3VuZHMKKworI2RlZmluZSBxY2E5NTZ4XzFwMF9jb21tb25fcnhfZ2Fpbl9ib3VuZHMgYXI5NTV4XzFwMF9jb21tb25fcnhfZ2Fpbl9ib3VuZHMKKworI2RlZmluZSBxY2E5NTZ4XzFwMF9tb2Rlc19mYXN0X2Nsb2NrIGFyOTQ2Ml8ycDBfbW9kZXNfZmFzdF9jbG9jaworCitzdGF0aWMgY29uc3QgdTMyIHFjYTk1NnhfMXAwX2Jhc2ViYW5kX2NvcmVbXVsyXSA9IHsKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMDk4MDAsIDB4YWZlNjhlMzB9LAorCXsweDAwMDA5ODA0LCAweGZkMTRlMDAwfSwKKwl7MHgwMDAwOTgwOCwgMHg5YzBhOWY2Yn0sCisJezB4MDAwMDk4MGMsIDB4MDQ5MDAwMDB9LAorCXsweDAwMDA5ODE0LCAweDAyODBjMDBhfSwKKwl7MHgwMDAwOTgxOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4MWMsIDB4MDAwMjAwMjh9LAorCXsweDAwMDA5ODM0LCAweDY0MDBhMTkwfSwKKwl7MHgwMDAwOTgzOCwgMHgwMTA4ZWNmZn0sCisJezB4MDAwMDk4M2MsIDB4MTQwMDA2MDB9LAorCXsweDAwMDA5ODgwLCAweDIwMWZmZjAwfSwKKwl7MHgwMDAwOTg4NCwgMHgwMDAwMTA0Mn0sCisJezB4MDAwMDk4YTQsIDB4MDAyMDA0MDB9LAorCXsweDAwMDA5OGIwLCAweDMyODQwY2JmfSwKKwl7MHgwMDAwOThiYywgMHgwMDAwMDAwMn0sCisJezB4MDAwMDk4ZDAsIDB4MDA0YjZhOGV9LAorCXsweDAwMDA5OGQ0LCAweDAwMDAwODIwfSwKKwl7MHgwMDAwOThkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMDk4ZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5OGY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWMwNCwgMHhmZjU1ZmY1NX0sCisJezB4MDAwMDljMDgsIDB4MDMyMGZmNTV9LAorCXsweDAwMDA5YzBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwOWMxMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDljMTQsIDB4MDAwNDYzODR9LAorCXsweDAwMDA5YzE4LCAweDA1YjZiNDQwfSwKKwl7MHgwMDAwOWMxYywgMHgwMGI2YjQ0MH0sCisJezB4MDAwMDlkMDAsIDB4YzA4MGEzMzN9LAorCXsweDAwMDA5ZDA0LCAweDQwMjA2YzEwfSwKKwl7MHgwMDAwOWQwOCwgMHgwMDljNDA2MH0sCisJezB4MDAwMDlkMGMsIDB4OTg4MzgwMGF9LAorCXsweDAwMDA5ZDEwLCAweDAxODM0MDYxfSwKKwl7MHgwMDAwOWQxNCwgMHgwMGMwMDQwYn0sCisJezB4MDAwMDlkMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDA5ZTA4LCAweDAwMzgyMzBjfSwKKwl7MHgwMDAwOWUyNCwgMHg5OTBiYjUxNH0sCisJezB4MDAwMDllMjgsIDB4MGM2ZjAwMDB9LAorCXsweDAwMDA5ZTMwLCAweDA2MzM2Zjc3fSwKKwl7MHgwMDAwOWUzNCwgMHg2YWY2NTMyZn0sCisJezB4MDAwMDllMzgsIDB4MGNjODBjMDB9LAorCXsweDAwMDA5ZTQwLCAweDBkMjYxODIwfSwKKwl7MHgwMDAwOWU0YywgMHgwMDAwMTAwNH0sCisJezB4MDAwMDllNTAsIDB4MDBmZjAzZjF9LAorCXsweDAwMDA5ZmMwLCAweDgxM2U0Nzg5fSwKKwl7MHgwMDAwOWZjNCwgMHgwMDAxZWZiNX0sCisJezB4MDAwMDlmY2MsIDB4NDAwMDAwMTR9LAorCXsweDAwMDA5ZmQwLCAweDAyOTkzYjkzfSwKKwl7MHgwMDAwYTIwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyMTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTIyOCwgMHgxMDAwMjMxMH0sCisJezB4MDAwMGEyM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMjQ0LCAweDBjMDAwMDAwfSwKKwl7MHgwMDAwYTI0OCwgMHgwMDAwMDE0MH0sCisJezB4MDAwMGEyYTAsIDB4MDAwMDAwMDd9LAorCXsweDAwMDBhMmMwLCAweDAwMDAwMDA3fSwKKwl7MHgwMDAwYTJjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTJmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEyZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMmY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTM0NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzUwLCAweDAwMDBhMDAwfSwKKwl7MHgwMDAwYTM2MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzNmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzg0LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYTM4OCwgMHgwMDAwMDQ0NH0sCisJezB4MDAwMGEzOGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMzkwLCAweDIxMGQwNDAxfSwKKwl7MHgwMDAwYTM5NCwgMHhhYjlhNzE0NH0sCisJezB4MDAwMGEzOTgsIDB4MDAwMDAyMDF9LAorCXsweDAwMDBhMzljLCAweDQyNDI0ODQ4fSwKKwl7MHgwMDAwYTNhMCwgMHgzYzQ2NjQ3OH0sCisJezB4MDAwMGEzYTQsIDB4M2EzNjM2MDB9LAorCXsweDAwMDBhM2E4LCAweDAwMDAwMDNhfSwKKwl7MHgwMDAwYTNhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzYjAsIDB4MDA5MDExZmV9LAorCXsweDAwMDBhM2I0LCAweDAwMDAwMDM0fSwKKwl7MHgwMDAwYTNiOCwgMHgwMGIzZWMwYX0sCisJezB4MDAwMGEzYmMsIDB4MDAwMDAwMzZ9LAorCXsweDAwMDBhM2MwLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNjNCwgMHgyMjIyMjIyMH0sCisJezB4MDAwMGEzYzgsIDB4MjAyMDAwMjB9LAorCXsweDAwMDBhM2NjLCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNkMCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZDQsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2Q4LCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNkYywgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZTAsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2U0LCAweDIwMjAyMDIwfSwKKwl7MHgwMDAwYTNlOCwgMHgyMDIwMjAyMH0sCisJezB4MDAwMGEzZWMsIDB4MjAyMDIwMjB9LAorCXsweDAwMDBhM2YwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTNmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzZjgsIDB4MGM5YmQzODB9LAorCXsweDAwMDBhM2ZjLCAweDAwMGYwZjAxfSwKKwl7MHgwMDAwYTQwMCwgMHg4ZmE5MWYwMX0sCisJezB4MDAwMGE0MDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNDA4LCAweDBlNzllNWM2fSwKKwl7MHgwMDAwYTQwYywgMHgwMDgyMDgyMH0sCisJezB4MDAwMGE0MTQsIDB4MWNlNzM5Y2V9LAorCXsweDAwMDBhNDE4LCAweDJkMDAxOWNlfSwKKwl7MHgwMDAwYTQxYywgMHgxY2U3MzljZX0sCisJezB4MDAwMGE0MjAsIDB4MDAwMDAxY2V9LAorCXsweDAwMDBhNDI0LCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTQyOCwgMHgwMDAwMDFjZX0sCisJezB4MDAwMGE0MmMsIDB4MWNlNzM5Y2V9LAorCXsweDAwMDBhNDMwLCAweDFjZTczOWNlfSwKKwl7MHgwMDAwYTQzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE0MzgsIDB4MDAwMDE4MDF9LAorCXsweDAwMDBhNDNjLCAweDAwMTAwMDAwfSwKKwl7MHgwMDAwYTQ0NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE0NDgsIDB4MDUwMDAwODB9LAorCXsweDAwMDBhNDRjLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAwYTQ1MCwgMHgwMDAxMDAwMH0sCisJezB4MDAwMGE0NTQsIDB4MDUwMDAwMDB9LAorCXsweDAwMDBhNDU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTY0NCwgMHhiZmFkOWZlZX0sCisJezB4MDAwMGE2NDgsIDB4MDA0ODY2MGR9LAorCXsweDAwMDBhNjRjLCAweDAwMDAzYzM3fSwKKwl7MHgwMDAwYTY3MCwgMHgwMzAyMDEwMH0sCisJezB4MDAwMGE2NzQsIDB4MjEyMDA1MDR9LAorCXsweDAwMDBhNjc4LCAweDYxNjAyMzIyfSwKKwl7MHgwMDAwYTY3YywgMHg2NTY0NjM2Mn0sCisJezB4MDAwMGE2ODAsIDB4NmI2YTY5Njh9LAorCXsweDAwMDBhNjg0LCAweGUyNzA2ZDZjfSwKKwl7MHgwMDAwYTY4OCwgMHgwMDAwMDBlM30sCisJezB4MDAwMGE2OTAsIDB4MDAwMDA4Mzh9LAorCXsweDAwMDBhN2NjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTdkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE3ZDQsIDB4MDAwMDAwMDR9LAorCXsweDAwMDBhN2RjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYThkMCwgMHgwMDRiNmE4ZX0sCisJezB4MDAwMGE4ZDQsIDB4MDAwMDA4MjB9LAorCXsweDAwMDBhOGRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYThmMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE4ZjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmQwLCAweDAwMDAwMDgwfSwKKwl7MHgwMDAwYjJkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIyZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMmYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjJmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIyZjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiNDA4LCAweDBlNzllNWMwfSwKKwl7MHgwMDAwYjQwYywgMHgwMDgyMDgyMH0sCisJezB4MDAwMGI0MjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiOGQwLCAweDAwNGI2YThlfSwKKwl7MHgwMDAwYjhkNCwgMHgwMDAwMDgyMH0sCisJezB4MDAwMGI4ZGMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiOGYwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjhmNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGMyZDAsIDB4MDAwMDAwODB9LAorCXsweDAwMDBjMmQ0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYzJlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGMyZjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBjMmY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYzJmOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGM0MDgsIDB4MGU3OWU1YzB9LAorCXsweDAwMDBjNDBjLCAweDAwODIwODIwfSwKKwl7MHgwMDAwYzQyMCwgMHgwMDAwMDAwMH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIHFjYTk1NnhfMXAwX2Jhc2ViYW5kX3Bvc3RhbWJsZVtdWzVdID0geworCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KKwl7MHgwMDAwOTgxMCwgMHhkMDBhODAwNSwgMHhkMDBhODAwNSwgMHhkMDBhODAxMSwgMHhkMDBhODAxMX0sCisJezB4MDAwMDk4MjAsIDB4MjA2YTAyMmUsIDB4MjA2YTAyMmUsIDB4MjA2YTAxYWUsIDB4MjA2YTAxYWV9LAorCXsweDAwMDA5ODI0LCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzYyMWYxLCAweDVhYzYyMWYxfSwKKwl7MHgwMDAwOTgyOCwgMHgwNjkwMzA4MSwgMHgwNjkwMzA4MSwgMHgwN2Q0Mzg4MSwgMHgwN2Q0Mzg4MX0sCisJezB4MDAwMDk4MmMsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDQsIDB4MDVlZWE2ZDR9LAorCXsweDAwMDA5ODMwLCAweDAwMDAwNTljLCAweDAwMDAwNTljLCAweDAwMDAxMTljLCAweDAwMDAxMTljfSwKKwl7MHgwMDAwOWMwMCwgMHgwMDAwMDBjNCwgMHgwMDAwMDBjNCwgMHgwMDAwMDBjNCwgMHgwMDAwMDBjNH0sCisJezB4MDAwMDllMDAsIDB4MDM3MjExMWEsIDB4MDM3MjExMWEsIDB4MDM3MjE2YTAsIDB4MDM3MjE2YTB9LAorCXsweDAwMDA5ZTA0LCAweDAwMWMyMDIwLCAweDAwMWMyMDIwLCAweDAwMWMyMDIwLCAweDAwMWMyMDIwfSwKKwl7MHgwMDAwOWUwYywgMHg2YzQwMDBlMiwgMHg2ZDQwMDBlMiwgMHg2ZDQwMDBkZSwgMHg2YzQwMDBkZX0sCisJezB4MDAwMDllMTAsIDB4N2VjODhkMmUsIDB4N2VjODhkMmUsIDB4N2VjODRkMmUsIDB4N2VjODZkMmV9LAorCXsweDAwMDA5ZTE0LCAweDM3Yjk1ZDVlLCAweDM3Yjk2MDVlLCAweDMzN2Q2MDVlLCAweDMzN2Q1ZDVlfSwKKwl7MHgwMDAwOWUxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMDllMWMsIDB4MDAwMWNmOWMsIDB4MDAwMWNmOWMsIDB4MDAwMjFmOWMsIDB4MDAwMjFmOWN9LAorCXsweDAwMDA5ZTIwLCAweDAwMDAwM2I1LCAweDAwMDAwM2I1LCAweDAwMDAwM2E2LCAweDAwMDAwM2E2fSwKKwl7MHgwMDAwOWUyYywgMHgwMDAwMDAxYywgMHgwMDAwMDAxYywgMHgwMDAwMDAyMSwgMHgwMDAwMDAyMX0sCisJezB4MDAwMDllM2MsIDB4Y2ZhMTA4MjAsIDB4Y2ZhMTA4MjAsIDB4Y2Y5NDYyMjIsIDB4Y2Y5NDYyMjJ9LAorCXsweDAwMDA5ZTQ0LCAweGZlMzIxZTI3LCAweGZlMzIxZTI3LCAweGZlMjkxZTI3LCAweGZlMjkxZTI3fSwKKwl7MHgwMDAwOWU0OCwgMHg1MDMwMjAxYSwgMHg1MDMwMjAxYSwgMHg1MDMwMjAxMiwgMHg1MDMwMjAxMn0sCisJezB4MDAwMDlmYzgsIDB4MDAwM2YwMDAsIDB4MDAwM2YwMDAsIDB4MDAwMWEwMDAsIDB4MDAwMWEwMDB9LAorCXsweDAwMDBhMjA0LCAweDAwNWMwZWMwLCAweDAwNWMwZWM0LCAweDA0NWMwY2M0LCAweDA0NWMwY2MwfSwKKwl7MHgwMDAwYTIwOCwgMHgwMDAwMDEwNCwgMHgwMDAwMDEwNCwgMHgwMDAwMDAwNCwgMHgwMDAwMDAwNH0sCisJezB4MDAwMGEyMmMsIDB4MDdlMjZhMmYsIDB4MDdlMjZhMmYsIDB4MDEwMjZhMmYsIDB4MDEwMjZhMmZ9LAorCXsweDAwMDBhMjMwLCAweDAwMDA0MDBhLCAweDAwMDA0MDE0LCAweDAwMDA0MDE2LCAweDAwMDA0MDBifSwKKwl7MHgwMDAwYTIzNCwgMHgwMDAwMGZmZiwgMHgxMDAwMGZmZiwgMHgxMDAwMGZmZiwgMHgwMDAwMGZmZn0sCisJezB4MDAwMGEyMzgsIDB4ZmZiMDEwMTgsIDB4ZmZiMDEwMTgsIDB4ZmZiMDEwMTgsIDB4ZmZiMDEwMTh9LAorCXsweDAwMDBhMjUwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMjEwLCAweDAwMDAwMTA4fSwKKwl7MHgwMDAwYTI1NCwgMHgwMDAwMDdkMCwgMHgwMDAwMGZhMCwgMHgwMDAwMTEzMCwgMHgwMDAwMDg5OH0sCisJezB4MDAwMGEyNTgsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDIsIDB4MDIwMjAwMDJ9LAorCXsweDAwMDBhMjVjLCAweDAxMDAwZTBlLCAweDAxMDAwZTBlLCAweDAxMDEwZTBlLCAweDAxMDEwZTBlfSwKKwl7MHgwMDAwYTI2MCwgMHgwYTAyMTUwMSwgMHgwYTAyMTUwMSwgMHgzYTAyMTUwMSwgMHgzYTAyMTUwMX0sCisJezB4MDAwMGEyNjQsIDB4MDAwMDBlMGUsIDB4MDAwMDBlMGUsIDB4MDEwMDBlMGUsIDB4MDEwMDBlMGV9LAorCXsweDAwMDBhMjgwLCAweDAwMDAwMDA3LCAweDAwMDAwMDA3LCAweDAwMDAwMDBiLCAweDAwMDAwMDBifSwKKwl7MHgwMDAwYTI4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAxMCwgMHgwMDAwMDAxMH0sCisJezB4MDAwMGEyODgsIDB4MDAwMDAxMTAsIDB4MDAwMDAxMTAsIDB4MDAwMDAxMTAsIDB4MDAwMDAxMTB9LAorCXsweDAwMDBhMjhjLCAweDAwMDIyMjIyLCAweDAwMDIyMjIyLCAweDAwMDIyMjIyLCAweDAwMDIyMjIyfSwKKwl7MHgwMDAwYTJjNCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQxOCwgMHgwMDA1OGQxOH0sCisJezB4MDAwMGEyY2MsIDB4MThjNTAwMzMsIDB4MThjNDM0MzMsIDB4MThjNDEwMzMsIDB4MThjNDRjMzN9LAorCXsweDAwMDBhMmQwLCAweDAwMDQxOTgyLCAweDAwMDQxOTgyLCAweDAwMDQxOTgyLCAweDAwMDQxOTgyfSwKKwl7MHgwMDAwYTJkOCwgMHg3OTk5YTgzYiwgMHg3OTk5YTgzYiwgMHg3OTk5YTgzYiwgMHg3OTk5YTgzYn0sCisJezB4MDAwMGEzNTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhODMwLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljfSwKKwl7MHgwMDAwYWUwNCwgMHgwMDFjMDAwMCwgMHgwMDFjMDAwMCwgMHgwMDFjMDAwMCwgMHgwMDFjMDAwMH0sCisJezB4MDAwMGFlMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhZTFjLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljfSwKKwl7MHgwMDAwYWUyMCwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSwgMHgwMDAwMDFhNiwgMHgwMDAwMDFhNn0sCisJezB4MDAwMGIyODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTB9LAorCXsweDAwMDBiODMwLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljfSwKKwl7MHgwMDAwYmUwNCwgMHgwMDFjMDAwMCwgMHgwMDFjMDAwMCwgMHgwMDFjMDAwMCwgMHgwMDFjMDAwMH0sCisJezB4MDAwMGJlMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiZTFjLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljLCAweDAwMDAwMTljfSwKKwl7MHgwMDAwYmUyMCwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSwgMHgwMDAwMDFhNiwgMHgwMDAwMDFhNn0sCisJezB4MDAwMGMyODQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMTAsIDB4MDAwMDAwMTB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBxY2E5NTZ4XzFwMF9yYWRpb19jb3JlW11bMl0gPSB7CisJLyogQWRkciAgICAgIGFsbG1vZGVzICAqLworCXsweDAwMDE2MDAwLCAweDM2ZGI2ZGI2fSwKKwl7MHgwMDAxNjAwNCwgMHg2ZGI2ZGI0MH0sCisJezB4MDAwMTYwMDgsIDB4NzNmMDAwMDB9LAorCXsweDAwMDE2MDBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjA0MCwgMHgzZjgwZmZmOH0sCisJezB4MDAwMTYwNGMsIDB4MDAwZjAyNzh9LAorCXsweDAwMDE2MDUwLCAweDgwMzZkYjZjfSwKKwl7MHgwMDAxNjA1NCwgMHg2ZGI2MDAwMH0sCisJezB4MDAwMTYwODAsIDB4MDAwODAwMDB9LAorCXsweDAwMDE2MDg0LCAweDBlNDgwNDhjfSwKKwl7MHgwMDAxNjA4OCwgMHgxNDIxNDUxNH0sCisJezB4MDAwMTYwOGMsIDB4MTE5ZjA4MGF9LAorCXsweDAwMDE2MDkwLCAweDI0OTI2NDkwfSwKKwl7MHgwMDAxNjA5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYwYTAsIDB4YzIxMDhmZmV9LAorCXsweDAwMDE2MGE0LCAweDgxMmZjMzcwfSwKKwl7MHgwMDAxNjBhOCwgMHg0MjNjODAwMH0sCisJezB4MDAwMTYwYjQsIDB4OTI0ODAwMDB9LAorCXsweDAwMDE2MGMwLCAweDAwNmRiNmQ4fSwKKwl7MHgwMDAxNjBjNCwgMHgyNGI2ZGI2Y30sCisJezB4MDAwMTYwYzgsIDB4NmRiNmRiNmN9LAorCXsweDAwMDE2MGNjLCAweDZkYjZmYjdjfSwKKwl7MHgwMDAxNjBkMCwgMHg2ZGI2ZGE0NH0sCisJezB4MDAwMTYxMDAsIDB4MDdmZjgwMDF9LAorCXsweDAwMDE2MTA4LCAweDAwMDgwMDEwfSwKKwl7MHgwMDAxNjE0NCwgMHgwMTg4NDA4MH0sCisJezB4MDAwMTYxNDgsIDB4MDAwMDgwNTh9LAorCXsweDAwMDE2Mjg4LCAweDAwMWM2MDAwfSwKKwl7MHgwMDAxNjI4YywgMHg1MDAwMDAwMH0sCisJezB4MDAwMTYyYzAsIDB4NGI5NjIxMDB9LAorCXsweDAwMDE2MmM0LCAweDAwMDAwNDgwfSwKKwl7MHgwMDAxNjJjOCwgMHgwNDAwMDE0NH0sCisJezB4MDAwMTYzODAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2Mzg0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjM4OCwgMHgwMDgwMDcwMH0sCisJezB4MDAwMTYzOGMsIDB4MDA4MDA3MDB9LAorCXsweDAwMDE2MzkwLCAweDAwODAwNzAwfSwKKwl7MHgwMDAxNjM5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2MzljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNhMCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMTYzYTQsIDB4MDAwMDAwMDF9LAorCXsweDAwMDE2M2E4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2M2I0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjNiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2M2MwLCAweDAwMDAwMGEwfSwKKwl7MHgwMDAxNjNjNCwgMHgwMDBjMDAwMH0sCisJezB4MDAwMTYzYzgsIDB4MTQwMjE0MDJ9LAorCXsweDAwMDE2M2NjLCAweDAwMDAxNDAyfSwKKwl7MHgwMDAxNjNkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTYzZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2NDAwLCAweDM2ZGI2ZGI2fSwKKwl7MHgwMDAxNjQwNCwgMHg2ZGI2ZGI0MH0sCisJezB4MDAwMTY0MDgsIDB4NzNmMDAwMDB9LAorCXsweDAwMDE2NDBjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjQ0MCwgMHgzZjgwZmZmOH0sCisJezB4MDAwMTY0NGMsIDB4MDAwZjAyNzh9LAorCXsweDAwMDE2NDUwLCAweDgwMzZkYjZjfSwKKwl7MHgwMDAxNjQ1NCwgMHg2ZGI2MDAwMH0sCisJezB4MDAwMTY1MDAsIDB4MDdmZjgwMDF9LAorCXsweDAwMDE2NTA4LCAweDAwMDgwMDEwfSwKKwl7MHgwMDAxNjU0NCwgMHgwMTg4NDA4MH0sCisJezB4MDAwMTY1NDgsIDB4MDAwMDgwNTh9LAorCXsweDAwMDE2NzgwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjc4NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3ODgsIDB4MDA4MDA3MDB9LAorCXsweDAwMDE2NzhjLCAweDAwODAwNzAwfSwKKwl7MHgwMDAxNjc5MCwgMHgwMDgwMDcwMH0sCisJezB4MDAwMTY3OTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2Nzk4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjc5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3YTAsIDB4MDAwMDAwMDF9LAorCXsweDAwMDE2N2E0LCAweDAwMDAwMDAxfSwKKwl7MHgwMDAxNjdhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3YWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2N2IwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjdiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY3YjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2N2JjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjdjMCwgMHgwMDAwMDBhMH0sCisJezB4MDAwMTY3YzQsIDB4MDAwYzAwMDB9LAorCXsweDAwMDE2N2M4LCAweDE0MDIxNDAyfSwKKwl7MHgwMDAxNjdjYywgMHgwMDAwMTQwMn0sCisJezB4MDAwMTY3ZDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2N2Q0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjgwMCwgMHgzNmRiNmRiNn0sCisJezB4MDAwMTY4MDQsIDB4NmRiNmRiNDB9LAorCXsweDAwMDE2ODA4LCAweDczZjAwMDAwfSwKKwl7MHgwMDAxNjgwYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTY4NDAsIDB4M2Y4MGZmZjh9LAorCXsweDAwMDE2ODRjLCAweDAwMGYwMjc4fSwKKwl7MHgwMDAxNjg1MCwgMHg4MDM2ZGI2Y30sCisJezB4MDAwMTY4NTQsIDB4NmRiNjAwMDB9LAorCXsweDAwMDE2OTAwLCAweDA3ZmY4MDAxfSwKKwl7MHgwMDAxNjkwOCwgMHgwMDA4MDAxMH0sCisJezB4MDAwMTY5NDQsIDB4MDE4ODQwODB9LAorCXsweDAwMDE2OTQ4LCAweDAwMDA4MDU4fSwKKwl7MHgwMDAxNmI4MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTZiODQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2Yjg4LCAweDAwODAwNzAwfSwKKwl7MHgwMDAxNmI4YywgMHgwMDgwMDcwMH0sCisJezB4MDAwMTZiOTAsIDB4MDA4MDA3MDB9LAorCXsweDAwMDE2Yjk0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNmI5OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTZiOWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2YmEwLCAweDAwMDAwMDAxfSwKKwl7MHgwMDAxNmJhNCwgMHgwMDAwMDAwMX0sCisJezB4MDAwMTZiYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2YmFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNmJiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMTZiYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDE2YmI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNmJiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMTZiYzAsIDB4MDAwMDAwYTB9LAorCXsweDAwMDE2YmM0LCAweDAwMGMwMDAwfSwKKwl7MHgwMDAxNmJjOCwgMHgxNDAyMTQwMn0sCisJezB4MDAwMTZiY2MsIDB4MDAwMDE0MDJ9LAorCXsweDAwMDE2YmQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNmJkNCwgMHgwMDAwMDAwMH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIHFjYTk1NnhfMXAwX3JhZGlvX3Bvc3RhbWJsZVtdWzVdID0geworCS8qIEFkZHIgICAgICA1R19IVDIwICAgICA1R19IVDQwICAgICAyR19IVDQwICAgICAyR19IVDIwICAgKi8KKwl7MHgwMDAxNjA5OCwgMHhkMmRkNTU1NCwgMHhkMmRkNTU1NCwgMHhjNDEyOGY1YywgMHhjNDEyOGY1Y30sCisJezB4MDAwMTYwOWMsIDB4MGE1NjZmM2EsIDB4MGE1NjZmM2EsIDB4MGZkMDhmMjUsIDB4MGZkMDhmMjV9LAorCXsweDAwMDE2MGFjLCAweGE0NjQ3YzAwLCAweGE0NjQ3YzAwLCAweDI0NjQ2ODAwLCAweDI0NjQ2ODAwfSwKKwl7MHgwMDAxNjBiMCwgMHgwMTg4NWY1MiwgMHgwMTg4NWY1MiwgMHgwMGZlN2Y0NiwgMHgwMGZlN2Y0Nn0sCisJezB4MDAwMTYxMDQsIDB4YjdhMDAwMDAsIDB4YjdhMDAwMDAsIDB4ZmZmODAwMDEsIDB4ZmZmODAwMDF9LAorCXsweDAwMDE2MTBjLCAweGMwMDAwMDAwLCAweGMwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjE0MCwgMHgxMDgwNDAwOCwgMHgxMDgwNDAwOCwgMHg1MDgwNDAwMCwgMHg1MDgwNDAwMH0sCisJezB4MDAwMTY1MDQsIDB4YjdhMDAwMDAsIDB4YjdhMDAwMDAsIDB4ZmZmODAwMDEsIDB4ZmZmODAwMDF9LAorCXsweDAwMDE2NTBjLCAweGMwMDAwMDAwLCAweGMwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjU0MCwgMHgxMDgwNDAwOCwgMHgxMDgwNDAwOCwgMHg1MDgwNDAwMCwgMHg1MDgwNDAwMH0sCisJezB4MDAwMTY5MDQsIDB4YjdhMDAwMDAsIDB4YjdhMDAwMDAsIDB4ZmZmODAwMDEsIDB4ZmZmODAwMDF9LAorCXsweDAwMDE2OTBjLCAweGMwMDAwMDAwLCAweGMwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAxNjk0MCwgMHgxMDgwNDAwOCwgMHgxMDgwNDAwOCwgMHg1MDgwNDAwMCwgMHg1MDgwNDAwMH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIHFjYTk1NnhfMXAwX2Jhc2ViYW5kX2NvcmVfdHhmaXJfY29lZmZfamFwYW5fMjQ4NFtdWzJdID0geworCS8qIEFkZHIgICAgICBhbGxtb2RlcyAgKi8KKwl7MHgwMDAwYTM4YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEzOTAsIDB4NmY3ZjAzMDF9LAorCXsweDAwMDBhMzk0LCAweGNhOTIyOGVlfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgcWNhOTU2eF8xcDBfbW9kZXNfbm9feHBhX3R4X2dhaW5fdGFibGVbXVszXSA9IHsKKwkvKiBBZGRyICAgICAgNUcgICAgICAgICAgMkcgICAgICAgICovCisJezB4MDAwMGEyZGMsIDB4ZmZhOWFjOTQsIDB4ZmZhOWFjOTR9LAorCXsweDAwMDBhMmUwLCAweGZmMzIzMTE4LCAweGZmMzIzMTE4fSwKKwl7MHgwMDAwYTJlNCwgMHhmZjNmZmUwMCwgMHhmZjNmZmUwMH0sCisJezB4MDAwMGEyZTgsIDB4ZmZjMDAwMDAsIDB4ZmZjMDAwMDB9LAorCXsweDAwMDBhMzljLCAweDQyNDI0MjQyLCAweDQyNDI0MjQyfSwKKwl7MHgwMDAwYTNhNCwgMHgzYTNlM2UwMCwgMHgzYTNlM2UwMH0sCisJezB4MDAwMGEzYjAsIDB4MDBhMDE0MDQsIDB4MDBhMDE0MDR9LAorCXsweDAwMDBhM2I0LCAweDAwMDAwMDM0LCAweDAwMDAwMDM0fSwKKwl7MHgwMDAwYTNiOCwgMHgwMDgwMDQwOCwgMHgwMDgwMDQwOH0sCisJezB4MDAwMGEzYmMsIDB4MDAwMDAwMzYsIDB4MDAwMDAwMzZ9LAorCXsweDAwMDBhNDEwLCAweDAwMDA1MGRjLCAweDAwMDA1MGRjfSwKKwl7MHgwMDAwYTUwMCwgMHgwOTAwMDA0MCwgMHgwOTAwMDA0MH0sCisJezB4MDAwMGE1MDQsIDB4MGIwMDAwNDEsIDB4MGIwMDAwNDF9LAorCXsweDAwMDBhNTA4LCAweDBkMDAwMDQyLCAweDBkMDAwMDQyfSwKKwl7MHgwMDAwYTUwYywgMHgxMTAwMDA0NCwgMHgxMTAwMDA0NH0sCisJezB4MDAwMGE1MTAsIDB4MTUwMDAwNDYsIDB4MTUwMDAwNDZ9LAorCXsweDAwMDBhNTE0LCAweDFkMDAwNDQwLCAweDFkMDAwNDQwfSwKKwl7MHgwMDAwYTUxOCwgMHgxZjAwMDQ0MSwgMHgxZjAwMDQ0MX0sCisJezB4MDAwMGE1MWMsIDB4MjMwMDA0NDMsIDB4MjMwMDA0NDN9LAorCXsweDAwMDBhNTIwLCAweDI1MDAwNDQ0LCAweDI1MDAwNDQ0fSwKKwl7MHgwMDAwYTUyNCwgMHgyODAwMDRlMCwgMHgyODAwMDRlMH0sCisJezB4MDAwMGE1MjgsIDB4MmMwMDA0ZTIsIDB4MmMwMDA0ZTJ9LAorCXsweDAwMDBhNTJjLCAweDJlMDAwNGUzLCAweDJlMDAwNGUzfSwKKwl7MHgwMDAwYTUzMCwgMHgzMDAwMDRlNCwgMHgzMDAwMDRlNH0sCisJezB4MDAwMGE1MzQsIDB4MzQwMDA0ZTYsIDB4MzQwMDA0ZTZ9LAorCXsweDAwMDBhNTM4LCAweDM3MDAwY2UwLCAweDM3MDAwY2UwfSwKKwl7MHgwMDAwYTUzYywgMHgzYjAwMGNlMiwgMHgzYjAwMGNlMn0sCisJezB4MDAwMGE1NDAsIDB4M2QwMDBjZTMsIDB4M2QwMDBjZTN9LAorCXsweDAwMDBhNTQ0LCAweDNmMDAwY2U0LCAweDNmMDAwY2U0fSwKKwl7MHgwMDAwYTU0OCwgMHg0NTAwMWVlMCwgMHg0NTAwMWVlMH0sCisJezB4MDAwMGE1NGMsIDB4NDkwMDFlZTIsIDB4NDkwMDFlZTJ9LAorCXsweDAwMDBhNTUwLCAweDRkMDAxZWU0LCAweDRkMDAxZWU0fSwKKwl7MHgwMDAwYTU1NCwgMHg1MTAwMWVlNiwgMHg1MTAwMWVlNn0sCisJezB4MDAwMGE1NTgsIDB4NTUwMDFlZWEsIDB4NTUwMDFlZWF9LAorCXsweDAwMDBhNTVjLCAweDU5MDAxZWVjLCAweDU5MDAxZWVjfSwKKwl7MHgwMDAwYTU2MCwgMHg1ZDAwMWVmMCwgMHg1ZDAwMWVmMH0sCisJezB4MDAwMGE1NjQsIDB4NWYwMDFlZjEsIDB4NWYwMDFlZjF9LAorCXsweDAwMDBhNTY4LCAweDYwMDAxZWYyLCAweDYwMDAxZWYyfSwKKwl7MHgwMDAwYTU2YywgMHg2MTAwMWVmMywgMHg2MTAwMWVmM30sCisJezB4MDAwMGE1NzAsIDB4NjIwMDFlZjQsIDB4NjIwMDFlZjR9LAorCXsweDAwMDBhNTc0LCAweDYzMDAxZWY1LCAweDYzMDAxZWY1fSwKKwl7MHgwMDAwYTU3OCwgMHg2NDAwMWZmYywgMHg2NDAwMWZmY30sCisJezB4MDAwMGE1N2MsIDB4NjQwMDFmZmMsIDB4NjQwMDFmZmN9LAorCXsweDAwMDBhNjAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MDgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjBjLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYxMCwgMHgwMDgwNDAwMCwgMHgwMDgwNDAwMH0sCisJezB4MDAwMGE2MTQsIDB4MDA4MDQyMDEsIDB4MDA4MDQyMDF9LAorCXsweDAwMDBhNjE4LCAweDAwODA0MjAxLCAweDAwODA0MjAxfSwKKwl7MHgwMDAwYTYxYywgMHgwMDgwNDIwMSwgMHgwMDgwNDIwMX0sCisJezB4MDAwMGE2MjAsIDB4MDA4MDQyMDEsIDB4MDA4MDQyMDF9LAorCXsweDAwMDBhNjI0LCAweDAwODA0MjAxLCAweDAwODA0MjAxfSwKKwl7MHgwMDAwYTYyOCwgMHgwMDgwNDIwMSwgMHgwMDgwNDIwMX0sCisJezB4MDAwMGE2MmMsIDB4MDI4MDhhMDIsIDB4MDI4MDhhMDJ9LAorCXsweDAwMDBhNjMwLCAweDAzNDBjZDAzLCAweDAzNDBjZDAzfSwKKwl7MHgwMDAwYTYzNCwgMHgwMzQwY2QwMywgMHgwMzQwY2QwM30sCisJezB4MDAwMGE2MzgsIDB4MDM0MGNkMDMsIDB4MDM0MGNkMDN9LAorCXsweDAwMDBhNjNjLCAweDA1MDExNDA0LCAweDA1MDExNDA0fSwKKwl7MHgwMDAwYjJkYywgMHhmZmE5YWM5NCwgMHhmZmE5YWM5NH0sCisJezB4MDAwMGIyZTAsIDB4ZmYzMjMxMTgsIDB4ZmYzMjMxMTh9LAorCXsweDAwMDBiMmU0LCAweGZmM2ZmZTAwLCAweGZmM2ZmZTAwfSwKKwl7MHgwMDAwYjJlOCwgMHhmZmMwMDAwMCwgMHhmZmMwMDAwMH0sCisJezB4MDAwMGMyZGMsIDB4ZmZhOWFjOTQsIDB4ZmZhOWFjOTR9LAorCXsweDAwMDBjMmUwLCAweGZmMzIzMTE4LCAweGZmMzIzMTE4fSwKKwl7MHgwMDAwYzJlNCwgMHhmZjNmZmUwMCwgMHhmZjNmZmUwMH0sCisJezB4MDAwMGMyZTgsIDB4ZmZjMDAwMDAsIDB4ZmZjMDAwMDB9LAorCXsweDAwMDE2MDQ0LCAweDA0OTI0MmRiLCAweDA0OTI0MmRifSwKKwl7MHgwMDAxNjA0OCwgMHg2NDkyNWE3MCwgMHg2NDkyNWE3MH0sCisJezB4MDAwMTYxNDgsIDB4MDAwMDgwNTAsIDB4MDAwMDgwNTB9LAorCXsweDAwMDE2MjgwLCAweDQxMTEwMDA1LCAweDQxMTEwMDA1fSwKKwl7MHgwMDAxNjI4NCwgMHg0NTNhNjAwMCwgMHg0NTNhNjAwMH0sCisJezB4MDAwMTY0NDQsIDB4MDQ5MjQyZGIsIDB4MDQ5MjQyZGJ9LAorCXsweDAwMDE2NDQ4LCAweDZjOTI1YTcwLCAweDZjOTI1YTcwfSwKKwl7MHgwMDAxNjU0OCwgMHgwMDAwODA1MCwgMHgwMDAwODA1MH0sCisJezB4MDAwMTY4NDQsIDB4MDQ5MjQyZGIsIDB4MDQ5MjQyZGJ9LAorCXsweDAwMDE2ODQ4LCAweDZjOTI1YTcwLCAweDZjOTI1YTcwfSwKKwl7MHgwMDAxNjk0OCwgMHgwMDAwODA1MCwgMHgwMDAwODA1MH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIHFjYTk1NnhfMXAwX21vZGVzX3hwYV90eF9nYWluX3RhYmxlW11bM10gPSB7CisJLyogQWRkciAgICAgIDVHICAgICAgICAgIDJHICAgICAgICAqLworCXsweDAwMDBhMmRjLCAweGNjNjlhYzk0LCAweGNjNjlhYzk0fSwKKwl7MHgwMDAwYTJlMCwgMHhmMGIyMzExOCwgMHhmMGIyMzExOH0sCisJezB4MDAwMGEyZTQsIDB4ZmZmZmMwMDAsIDB4ZmZmZmMwMDB9LAorCXsweDAwMDBhMmU4LCAweGMwMDAwMDAwLCAweGMwMDAwMDAwfSwKKwl7MHgwMDAwYTQxMCwgMHgwMDAwNTBkMiwgMHgwMDAwNTBkMn0sCisJezB4MDAwMGE1MDAsIDB4MGEwMDAwNDAsIDB4MGEwMDAwNDB9LAorCXsweDAwMDBhNTA0LCAweDBjMDAwMDQxLCAweDBjMDAwMDQxfSwKKwl7MHgwMDAwYTUwOCwgMHgwZTAwMDA0MiwgMHgwZTAwMDA0Mn0sCisJezB4MDAwMGE1MGMsIDB4MTIwMDAwNDQsIDB4MTIwMDAwNDR9LAorCXsweDAwMDBhNTEwLCAweDE2MDAwMDQ2LCAweDE2MDAwMDQ2fSwKKwl7MHgwMDAwYTUxNCwgMHgxZDAwMDQ0MCwgMHgxZDAwMDQ0MH0sCisJezB4MDAwMGE1MTgsIDB4MWYwMDA0NDEsIDB4MWYwMDA0NDF9LAorCXsweDAwMDBhNTFjLCAweDIzMDAwNDQzLCAweDIzMDAwNDQzfSwKKwl7MHgwMDAwYTUyMCwgMHgyNTAwMDQ0NCwgMHgyNTAwMDQ0NH0sCisJezB4MDAwMGE1MjQsIDB4MjkwMDBhNDAsIDB4MjkwMDBhNDB9LAorCXsweDAwMDBhNTI4LCAweDJkMDAwYTQyLCAweDJkMDAwYTQyfSwKKwl7MHgwMDAwYTUyYywgMHgyZjAwMGE0MywgMHgyZjAwMGE0M30sCisJezB4MDAwMGE1MzAsIDB4MzEwMDBhNDQsIDB4MzEwMDBhNDR9LAorCXsweDAwMDBhNTM0LCAweDM1MDAwYTQ2LCAweDM1MDAwYTQ2fSwKKwl7MHgwMDAwYTUzOCwgMHgzODAwMGNlMCwgMHgzODAwMGNlMH0sCisJezB4MDAwMGE1M2MsIDB4M2MwMDBjZTIsIDB4M2MwMDBjZTJ9LAorCXsweDAwMDBhNTQwLCAweDNlMDAwY2UzLCAweDNlMDAwY2UzfSwKKwl7MHgwMDAwYTU0NCwgMHg0MDAwMGNlNCwgMHg0MDAwMGNlNH0sCisJezB4MDAwMGE1NDgsIDB4NDYwMDFlZTAsIDB4NDYwMDFlZTB9LAorCXsweDAwMDBhNTRjLCAweDRhMDAxZWUyLCAweDRhMDAxZWUyfSwKKwl7MHgwMDAwYTU1MCwgMHg0ZTAwMWVlNCwgMHg0ZTAwMWVlNH0sCisJezB4MDAwMGE1NTQsIDB4NTIwMDFlZTYsIDB4NTIwMDFlZTZ9LAorCXsweDAwMDBhNTU4LCAweDU2MDAxZWVhLCAweDU2MDAxZWVhfSwKKwl7MHgwMDAwYTU1YywgMHg1YTAwMWVlYywgMHg1YTAwMWVlY30sCisJezB4MDAwMGE1NjAsIDB4NWUwMDFlZjAsIDB4NWUwMDFlZjB9LAorCXsweDAwMDBhNTY0LCAweDYwMDAxZWYxLCAweDYwMDAxZWYxfSwKKwl7MHgwMDAwYTU2OCwgMHg2MTAwMWVmMiwgMHg2MTAwMWVmMn0sCisJezB4MDAwMGE1NmMsIDB4NjIwMDFlZjMsIDB4NjIwMDFlZjN9LAorCXsweDAwMDBhNTcwLCAweDYzMDAxZWY0LCAweDYzMDAxZWY0fSwKKwl7MHgwMDAwYTU3NCwgMHg2NDAwMWVmNSwgMHg2NDAwMWVmNX0sCisJezB4MDAwMGE1NzgsIDB4NjUwMDFmZmMsIDB4NjUwMDFmZmN9LAorCXsweDAwMDBhNTdjLCAweDY1MDAxZmZjLCAweDY1MDAxZmZjfSwKKwl7MHgwMDAwYTYwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MDQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjA4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYwYywgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MTAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjE0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYxOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MWMsIDB4MDA4MDQyMDEsIDB4MDA4MDQyMDF9LAorCXsweDAwMDBhNjIwLCAweDAwODA0MjAxLCAweDAwODA0MjAxfSwKKwl7MHgwMDAwYTYyNCwgMHgwMDgwNDIwMSwgMHgwMDgwNDIwMX0sCisJezB4MDAwMGE2MjgsIDB4MDA4MDQyMDEsIDB4MDA4MDQyMDF9LAorCXsweDAwMDBhNjJjLCAweDAyODA4YTAyLCAweDAyODA4YTAyfSwKKwl7MHgwMDAwYTYzMCwgMHgwMzQwY2QwMywgMHgwMzQwY2QwM30sCisJezB4MDAwMGE2MzQsIDB4MDM0MGNkMDMsIDB4MDM0MGNkMDN9LAorCXsweDAwMDBhNjM4LCAweDAzNDBjZDAzLCAweDAzNDBjZDAzfSwKKwl7MHgwMDAwYTYzYywgMHgwNTAxMTQwNCwgMHgwNTAxMTQwNH0sCisJezB4MDAwMGIyZGMsIDB4Y2M2OWFjOTQsIDB4Y2M2OWFjOTR9LAorCXsweDAwMDBiMmUwLCAweGYwYjIzMTE4LCAweGYwYjIzMTE4fSwKKwl7MHgwMDAwYjJlNCwgMHhmZmZmYzAwMCwgMHhmZmZmYzAwMH0sCisJezB4MDAwMGIyZTgsIDB4YzAwMDAwMDAsIDB4YzAwMDAwMDB9LAorCXsweDAwMDBjMmRjLCAweGNjNjlhYzk0LCAweGNjNjlhYzk0fSwKKwl7MHgwMDAwYzJlMCwgMHhmMGIyMzExOCwgMHhmMGIyMzExOH0sCisJezB4MDAwMGMyZTQsIDB4ZmZmZmMwMDAsIDB4ZmZmZmMwMDB9LAorCXsweDAwMDBjMmU4LCAweGMwMDAwMDAwLCAweGMwMDAwMDAwfSwKKwl7MHgwMDAxNjA0NCwgMHgwMTI0OTJkYiwgMHgwMTI0OTJkYn0sCisJezB4MDAwMTYwNDgsIDB4NmM5MjdhNzAsIDB4NmM5MjdhNzB9LAorCXsweDAwMDE2MDUwLCAweDgwMzZkMzZjLCAweDgwMzZkMzZjfSwKKwl7MHgwMDAxNjI4MCwgMHg0MTExMDAwNSwgMHg0MTExMDAwNX0sCisJezB4MDAwMTYyODQsIDB4NDUzYTdlMDAsIDB4NDUzYTdlMDB9LAorCXsweDAwMDE2NDQ0LCAweDAxMjQ5MmRiLCAweDAxMjQ5MmRifSwKKwl7MHgwMDAxNjQ0OCwgMHg2YzkyN2E3MCwgMHg2YzkyN2E3MH0sCisJezB4MDAwMTY0NTAsIDB4ODAzNmQzNmMsIDB4ODAzNmQzNmN9LAorCXsweDAwMDE2ODQ0LCAweDAxMjQ5MmRiLCAweDAxMjQ5MmRifSwKKwl7MHgwMDAxNjg0OCwgMHg2YzkyN2E3MCwgMHg2YzkyN2E3MH0sCisJezB4MDAwMTY4NTAsIDB4ODAzNmQzNmMsIDB4ODAzNmQzNmN9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBxY2E5NTZ4XzFwMF9tb2Rlc19ub194cGFfbG93X29iX2RiX3R4X2dhaW5fdGFibGVbXVszXSA9IHsKKwkvKiBBZGRyICAgICAgNUcgICAgICAgICAgMkcgICAgICAgICovCisJezB4MDAwMGEyZGMsIDB4ZmZhOWFjOTQsIDB4ZmZhOWFjOTR9LAorCXsweDAwMDBhMmUwLCAweGZmMzIzMTE4LCAweGZmMzIzMTE4fSwKKwl7MHgwMDAwYTJlNCwgMHhmZjNmZmUwMCwgMHhmZjNmZmUwMH0sCisJezB4MDAwMGEyZTgsIDB4ZmZjMDAwMDAsIDB4ZmZjMDAwMDB9LAorCXsweDAwMDBhMzljLCAweDQyNDI0MjQyLCAweDQyNDI0MjQyfSwKKwl7MHgwMDAwYTNhNCwgMHgzYTNlM2UwMCwgMHgzYTNlM2UwMH0sCisJezB4MDAwMGEzYjAsIDB4MDBhMDE0MDQsIDB4MDBhMDE0MDR9LAorCXsweDAwMDBhM2I0LCAweDAwMDAwMDM0LCAweDAwMDAwMDM0fSwKKwl7MHgwMDAwYTNiOCwgMHgwMDgwMDQwOCwgMHgwMDgwMDQwOH0sCisJezB4MDAwMGEzYmMsIDB4MDAwMDAwMzYsIDB4MDAwMDAwMzZ9LAorCXsweDAwMDBhNDEwLCAweDAwMDA1MGRjLCAweDAwMDA1MGRjfSwKKwl7MHgwMDAwYTQxNCwgMHgxNmI3MzljZSwgMHgxNmI3MzljZX0sCisJezB4MDAwMGE0MTgsIDB4MmQwMDE5OGIsIDB4MmQwMDE5OGJ9LAorCXsweDAwMDBhNDFjLCAweDE2YjVhZGNlLCAweDE2YjVhZGNlfSwKKwl7MHgwMDAwYTQyMCwgMHgwMDAwMDE0YSwgMHgwMDAwMDE0YX0sCisJezB4MDAwMGE0MjQsIDB4MTRhNTI1Y2MsIDB4MTRhNTI1Y2N9LAorCXsweDAwMDBhNDI4LCAweDAwMDAwMTJhLCAweDAwMDAwMTJhfSwKKwl7MHgwMDAwYTQyYywgMHgxNGE1Mjk0YSwgMHgxNGE1Mjk0YX0sCisJezB4MDAwMGE0MzAsIDB4MTI5NGE5MjksIDB4MTI5NGE5Mjl9LAorCXsweDAwMDBhNTAwLCAweDA5MDAwMDQwLCAweDA5MDAwMDQwfSwKKwl7MHgwMDAwYTUwNCwgMHgwYjAwMDA0MSwgMHgwYjAwMDA0MX0sCisJezB4MDAwMGE1MDgsIDB4MGQwMDAwNDIsIDB4MGQwMDAwNDJ9LAorCXsweDAwMDBhNTBjLCAweDExMDAwMDQ0LCAweDExMDAwMDQ0fSwKKwl7MHgwMDAwYTUxMCwgMHgxNTAwMDA0NiwgMHgxNTAwMDA0Nn0sCisJezB4MDAwMGE1MTQsIDB4MWQwMDA0NDAsIDB4MWQwMDA0NDB9LAorCXsweDAwMDBhNTE4LCAweDFmMDAwNDQxLCAweDFmMDAwNDQxfSwKKwl7MHgwMDAwYTUxYywgMHgyMzAwMDQ0MywgMHgyMzAwMDQ0M30sCisJezB4MDAwMGE1MjAsIDB4MjUwMDA0NDQsIDB4MjUwMDA0NDR9LAorCXsweDAwMDBhNTI0LCAweDI4MDAwNGUwLCAweDI4MDAwNGUwfSwKKwl7MHgwMDAwYTUyOCwgMHgyYzAwMDRlMiwgMHgyYzAwMDRlMn0sCisJezB4MDAwMGE1MmMsIDB4MmUwMDA0ZTMsIDB4MmUwMDA0ZTN9LAorCXsweDAwMDBhNTMwLCAweDMwMDAwNGU0LCAweDMwMDAwNGU0fSwKKwl7MHgwMDAwYTUzNCwgMHgzNDAwMDRlNiwgMHgzNDAwMDRlNn0sCisJezB4MDAwMGE1MzgsIDB4MzcwMDBjZTAsIDB4MzcwMDBjZTB9LAorCXsweDAwMDBhNTNjLCAweDNiMDAwY2UyLCAweDNiMDAwY2UyfSwKKwl7MHgwMDAwYTU0MCwgMHgzZDAwMGNlMywgMHgzZDAwMGNlM30sCisJezB4MDAwMGE1NDQsIDB4M2YwMDBjZTQsIDB4M2YwMDBjZTR9LAorCXsweDAwMDBhNTQ4LCAweDQ1MDAxZWUwLCAweDQ1MDAxZWUwfSwKKwl7MHgwMDAwYTU0YywgMHg0OTAwMWVlMiwgMHg0OTAwMWVlMn0sCisJezB4MDAwMGE1NTAsIDB4NGQwMDFlZTQsIDB4NGQwMDFlZTR9LAorCXsweDAwMDBhNTU0LCAweDUxMDAxZWU2LCAweDUxMDAxZWU2fSwKKwl7MHgwMDAwYTU1OCwgMHg1NTAwMWVlYSwgMHg1NTAwMWVlYX0sCisJezB4MDAwMGE1NWMsIDB4NTkwMDFlZWMsIDB4NTkwMDFlZWN9LAorCXsweDAwMDBhNTYwLCAweDVkMDAxZWYwLCAweDVkMDAxZWYwfSwKKwl7MHgwMDAwYTU2NCwgMHg1ZjAwMWVmMSwgMHg1ZjAwMWVmMX0sCisJezB4MDAwMGE1NjgsIDB4NjAwMDFlZjIsIDB4NjAwMDFlZjJ9LAorCXsweDAwMDBhNTZjLCAweDYxMDAxZWYzLCAweDYxMDAxZWYzfSwKKwl7MHgwMDAwYTU3MCwgMHg2MjAwMWVmNCwgMHg2MjAwMWVmNH0sCisJezB4MDAwMGE1NzQsIDB4NjMwMDFlZjUsIDB4NjMwMDFlZjV9LAorCXsweDAwMDBhNTc4LCAweDY0MDAxZmZjLCAweDY0MDAxZmZjfSwKKwl7MHgwMDAwYTU3YywgMHg2NDAwMWZmYywgMHg2NDAwMWZmY30sCisJezB4MDAwMGE2MDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjEwLCAweDAwODA0MDAwLCAweDAwODA0MDAwfSwKKwl7MHgwMDAwYTYxNCwgMHgwMDgwNDIwMSwgMHgwMDgwNDIwMX0sCisJezB4MDAwMGE2MTgsIDB4MDA4MDQyMDEsIDB4MDA4MDQyMDF9LAorCXsweDAwMDBhNjFjLCAweDAwODA0MjAxLCAweDAwODA0MjAxfSwKKwl7MHgwMDAwYTYyMCwgMHgwMDgwNDIwMSwgMHgwMDgwNDIwMX0sCisJezB4MDAwMGE2MjQsIDB4MDA4MDQyMDEsIDB4MDA4MDQyMDF9LAorCXsweDAwMDBhNjI4LCAweDAwODA0MjAxLCAweDAwODA0MjAxfSwKKwl7MHgwMDAwYTYyYywgMHgwMjgwOGEwMiwgMHgwMjgwOGEwMn0sCisJezB4MDAwMGE2MzAsIDB4MDM0MGNkMDMsIDB4MDM0MGNkMDN9LAorCXsweDAwMDBhNjM0LCAweDAzNDBjZDAzLCAweDAzNDBjZDAzfSwKKwl7MHgwMDAwYTYzOCwgMHgwMzQwY2QwMywgMHgwMzQwY2QwM30sCisJezB4MDAwMGE2M2MsIDB4MDUwMTE0MDQsIDB4MDUwMTE0MDR9LAorCXsweDAwMDBiMmRjLCAweGZmYTlhYzk0LCAweGZmYTlhYzk0fSwKKwl7MHgwMDAwYjJlMCwgMHhmZjMyMzExOCwgMHhmZjMyMzExOH0sCisJezB4MDAwMGIyZTQsIDB4ZmYzZmZlMDAsIDB4ZmYzZmZlMDB9LAorCXsweDAwMDBiMmU4LCAweGZmYzAwMDAwLCAweGZmYzAwMDAwfSwKKwl7MHgwMDAwYzJkYywgMHhmZmE5YWM5NCwgMHhmZmE5YWM5NH0sCisJezB4MDAwMGMyZTAsIDB4ZmYzMjMxMTgsIDB4ZmYzMjMxMTh9LAorCXsweDAwMDBjMmU0LCAweGZmM2ZmZTAwLCAweGZmM2ZmZTAwfSwKKwl7MHgwMDAwYzJlOCwgMHhmZmMwMDAwMCwgMHhmZmMwMDAwMH0sCisJezB4MDAwMTYwNDQsIDB4MDQ2ZTQyZGIsIDB4MDQ2ZTQyZGJ9LAorCXsweDAwMDE2MDQ4LCAweDY0OTI1YTcwLCAweDY0OTI1YTcwfSwKKwl7MHgwMDAxNjE0OCwgMHgwMDAwODA1MCwgMHgwMDAwODA1MH0sCisJezB4MDAwMTYyODAsIDB4NDExMTAwMDUsIDB4NDExMTAwMDV9LAorCXsweDAwMDE2Mjg0LCAweDQ1M2E2MDAwLCAweDQ1M2E2MDAwfSwKKwl7MHgwMDAxNjQ0NCwgMHgwNDZlNDJkYiwgMHgwNDZlNDJkYn0sCisJezB4MDAwMTY0NDgsIDB4NmM5MjVhNzAsIDB4NmM5MjVhNzB9LAorCXsweDAwMDE2NTQ4LCAweDAwMDA4MDUwLCAweDAwMDA4MDUwfSwKKwl7MHgwMDAxNjg0NCwgMHgwNDZlNDJkYiwgMHgwNDZlNDJkYn0sCisJezB4MDAwMTY4NDgsIDB4NmM5MjVhNzAsIDB4NmM5MjVhNzB9LAorCXsweDAwMDE2OTQ4LCAweDAwMDA4MDUwLCAweDAwMDA4MDUwfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgcWNhOTU2eF8xcDBfbW9kZXNfbm9feHBhX2dyZWVuX3R4X2dhaW5fdGFibGVbXVszXSA9IHsKKwkvKiBBZGRyICAgICAgNUcgICAgICAgICAgMkcgICAgICAgICovCisJezB4MDAwMDk4YmMsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDF9LAorCXsweDAwMDBhMmRjLCAweGQzNTU1Mjg0LCAweGQzNTU1Mjg0fSwKKwl7MHgwMDAwYTJlMCwgMHgxYzY2NjMxOCwgMHgxYzY2NjMxOH0sCisJezB4MDAwMGEyZTQsIDB4ZTA3YmJjMDAsIDB4ZTA3YmJjMDB9LAorCXsweDAwMDBhMmU4LCAweGZmODAwMDAwLCAweGZmODAwMDAwfSwKKwl7MHgwMDAwYTNhNCwgMHgzYTNlM2UwMCwgMHgzYTNlM2UwMH0sCisJezB4MDAwMGE0MTAsIDB4MDAwMDUwZGMsIDB4MDAwMDUwZGN9LAorCXsweDAwMDBhNTAwLCAweDAyMDAwMDQwLCAweDAyMDAwMDQwfSwKKwl7MHgwMDAwYTUwNCwgMHgwNDAwMDA0MSwgMHgwNDAwMDA0MX0sCisJezB4MDAwMGE1MDgsIDB4MDYwMDAwNDIsIDB4MDYwMDAwNDJ9LAorCXsweDAwMDBhNTBjLCAweDBhMDAwMDQ0LCAweDBhMDAwMDQ0fSwKKwl7MHgwMDAwYTUxMCwgMHgwYzAwMDA0NSwgMHgwYzAwMDA0NX0sCisJezB4MDAwMGE1MTQsIDB4MTMwMDA0NDAsIDB4MTMwMDA0NDB9LAorCXsweDAwMDBhNTE4LCAweDE1MDAwNDQxLCAweDE1MDAwNDQxfSwKKwl7MHgwMDAwYTUxYywgMHgxOTAwMDQ0MywgMHgxOTAwMDQ0M30sCisJezB4MDAwMGE1MjAsIDB4MWIwMDA0NDQsIDB4MWIwMDA0NDR9LAorCXsweDAwMDBhNTI0LCAweDFlMDAwNGUwLCAweDFlMDAwNGUwfSwKKwl7MHgwMDAwYTUyOCwgMHgyMjAwMDRlMiwgMHgyMjAwMDRlMn0sCisJezB4MDAwMGE1MmMsIDB4MjQwMDA0ZTMsIDB4MjQwMDA0ZTN9LAorCXsweDAwMDBhNTMwLCAweDI2MDAwNGU0LCAweDI2MDAwNGU0fSwKKwl7MHgwMDAwYTUzNCwgMHgyYTAwMDRlNiwgMHgyYTAwMDRlNn0sCisJezB4MDAwMGE1MzgsIDB4MzIwMDBjZTAsIDB4MzIwMDBjZTB9LAorCXsweDAwMDBhNTNjLCAweDM2MDAwY2UyLCAweDM2MDAwY2UyfSwKKwl7MHgwMDAwYTU0MCwgMHgzYTAwMGNlNCwgMHgzYTAwMGNlNH0sCisJezB4MDAwMGE1NDQsIDB4M2UwMDBjZTYsIDB4M2UwMDBjZTZ9LAorCXsweDAwMDBhNTQ4LCAweDQ1MDAxZWUwLCAweDQ1MDAxZWUwfSwKKwl7MHgwMDAwYTU0YywgMHg0OTAwMWVlMiwgMHg0OTAwMWVlMn0sCisJezB4MDAwMGE1NTAsIDB4NGQwMDFlZTQsIDB4NGQwMDFlZTR9LAorCXsweDAwMDBhNTU0LCAweDUxMDAxZWU2LCAweDUxMDAxZWU2fSwKKwl7MHgwMDAwYTU1OCwgMHg1NTAwMWVlYSwgMHg1NTAwMWVlYX0sCisJezB4MDAwMGE1NWMsIDB4NTkwMDFlZWMsIDB4NTkwMDFlZWN9LAorCXsweDAwMDBhNTYwLCAweDVkMDAxZWYwLCAweDVkMDAxZWYwfSwKKwl7MHgwMDAwYTU2NCwgMHg1ZjAwMWVmMSwgMHg1ZjAwMWVmMX0sCisJezB4MDAwMGE1NjgsIDB4NjAwMDFlZjIsIDB4NjAwMDFlZjJ9LAorCXsweDAwMDBhNTZjLCAweDYxMDAxZWYzLCAweDYxMDAxZWYzfSwKKwl7MHgwMDAwYTU3MCwgMHg2MjAwMWVmNCwgMHg2MjAwMWVmNH0sCisJezB4MDAwMGE1NzQsIDB4NjMwMDFmZjUsIDB4NjMwMDFmZjV9LAorCXsweDAwMDBhNTc4LCAweDY0MDAxZmZjLCAweDY0MDAxZmZjfSwKKwl7MHgwMDAwYTU3YywgMHg2NDAwMWZmYywgMHg2NDAwMWZmY30sCisJezB4MDAwMGE2MDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTYwOCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGE2MGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhNjEwLCAweDAwODA0MDAwLCAweDAwODA0MDAwfSwKKwl7MHgwMDAwYTYxNCwgMHgwMDgwNDIwMSwgMHgwMDgwNDIwMX0sCisJezB4MDAwMGE2MTgsIDB4MDA4MDQyMDEsIDB4MDA4MDQyMDF9LAorCXsweDAwMDBhNjFjLCAweDAwODA0MjAxLCAweDAwODA0MjAxfSwKKwl7MHgwMDAwYTYyMCwgMHgwMDgwNDIwMSwgMHgwMDgwNDIwMX0sCisJezB4MDAwMGE2MjQsIDB4MDA4MDQyMDEsIDB4MDA4MDQyMDF9LAorCXsweDAwMDBhNjI4LCAweDAwODA0MjAxLCAweDAwODA0MjAxfSwKKwl7MHgwMDAwYTYyYywgMHgwMjgwOGEwMiwgMHgwMjgwOGEwMn0sCisJezB4MDAwMGE2MzAsIDB4MDM0MGNkMDMsIDB4MDM0MGNkMDN9LAorCXsweDAwMDBhNjM0LCAweDAzNDBjZDAzLCAweDAzNDBjZDAzfSwKKwl7MHgwMDAwYTYzOCwgMHgwMzQwY2QwMywgMHgwMzQwY2QwM30sCisJezB4MDAwMGE2M2MsIDB4MDUwMTE0MDQsIDB4MDUwMTE0MDR9LAorCXsweDAwMDBiMmRjLCAweGQzNTU1Mjg0LCAweGQzNTU1Mjg0fSwKKwl7MHgwMDAwYjJlMCwgMHgxYzY2NjMxOCwgMHgxYzY2NjMxOH0sCisJezB4MDAwMGIyZTQsIDB4ZTA3YmJjMDAsIDB4ZTA3YmJjMDB9LAorCXsweDAwMDBiMmU4LCAweGZmODAwMDAwLCAweGZmODAwMDAwfSwKKwl7MHgwMDAwYzJkYywgMHhkMzU1NTI4NCwgMHhkMzU1NTI4NH0sCisJezB4MDAwMGMyZTAsIDB4MWM2NjYzMTgsIDB4MWM2NjYzMTh9LAorCXsweDAwMDBjMmU0LCAweGUwN2JiYzAwLCAweGUwN2JiYzAwfSwKKwl7MHgwMDAwYzJlOCwgMHhmZjgwMDAwMCwgMHhmZjgwMDAwMH0sCisJezB4MDAwMTYwNDQsIDB4ODQ5MjQyZGIsIDB4ODQ5MjQyZGJ9LAorCXsweDAwMDE2MDQ4LCAweDY0OTI1YTcwLCAweDY0OTI1YTcwfSwKKwl7MHgwMDAxNjI4MCwgMHg0MTExMDAwNSwgMHg0MTExMDAwNX0sCisJezB4MDAwMTYyODQsIDB4NDUzYTYwMDAsIDB4NDUzYTYwMDB9LAorCXsweDAwMDE2NDQ0LCAweDg0OTI0MmRiLCAweDg0OTI0MmRifSwKKwl7MHgwMDAxNjQ0OCwgMHg2YzkyNWE3MCwgMHg2YzkyNWE3MH0sCisJezB4MDAwMTY4NDQsIDB4ODQ5MjQyZGIsIDB4ODQ5MjQyZGJ9LAorCXsweDAwMDE2ODQ4LCAweDZjOTI1YTcwLCAweDZjOTI1YTcwfSwKKwl7MHgwMDAwYTdmMCwgMHg4MDAwMDJjYywgMHg4MDAwMDJjY30sCisJezB4MDAwMGE3ZjQsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTh9LAorCXsweDAwMDBhN2Y0LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwYTdmNCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOH0sCisJezB4MDAwMGE3ZjQsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTh9LAorCXsweDAwMDBhN2Y0LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwYTdmNCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOH0sCisJezB4MDAwMGE3ZjQsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTh9LAorCXsweDAwMDBhN2Y0LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwYTdmNCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOH0sCisJezB4MDAwMGE3ZjQsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTh9LAorCXsweDAwMDBhN2Y0LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwYTdmNCwgMHgwMDAwMDAxOCwgMHgwMDAwMDAxOH0sCisJezB4MDAwMGE3ZjQsIDB4MDAwMDAwMTgsIDB4MDAwMDAwMTh9LAorCXsweDAwMDBhN2Y0LCAweDAwMDAwMDE4LCAweDAwMDAwMDE4fSwKKwl7MHgwMDAwYTdmNCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOH0sCisJezB4MDAwMGE3ZjQsIDB4MDAwMDAwMjgsIDB4MDAwMDAwMjh9LAorCXsweDAwMDBhN2Y0LCAweDAwMDAwMDI4LCAweDAwMDAwMDI4fSwKKwl7MHgwMDAwYTdmNCwgMHgwMDAwMDAyOCwgMHgwMDAwMDAyOH0sCisJezB4MDAwMGE3ZjQsIDB4MDAwMDAwNDgsIDB4MDAwMDAwNDh9LAorCXsweDAwMDBhN2Y0LCAweDAwMDAwMDQ4LCAweDAwMDAwMDQ4fSwKKwl7MHgwMDAwYTdmNCwgMHgwMDAwMDA0OCwgMHgwMDAwMDA0OH0sCisJezB4MDAwMGE3ZjQsIDB4MDAwMDAwNDgsIDB4MDAwMDAwNDh9LAorCXsweDAwMDBhN2Y0LCAweDAwMDAwMDQ4LCAweDAwMDAwMDQ4fSwKKwl7MHgwMDAwYTdmNCwgMHgwMDAwMDA0OCwgMHgwMDAwMDA0OH0sCisJezB4MDAwMGE3ZjQsIDB4MDAwMDAwNDgsIDB4MDAwMDAwNDh9LAorCXsweDAwMDBhN2Y0LCAweDAwMDAwMDQ4LCAweDAwMDAwMDQ4fSwKKwl7MHgwMDAwYTdmNCwgMHgwMDAwMDA0OCwgMHgwMDAwMDA0OH0sCisJezB4MDAwMGE3ZjQsIDB4MDAwMDAwNDgsIDB4MDAwMDAwNDh9LAorCXsweDAwMDBhN2Y0LCAweDAwMDAwMDQ4LCAweDAwMDAwMDQ4fSwKKwl7MHgwMDAwYTdmNCwgMHgwMDAwMDA0OCwgMHgwMDAwMDA0OH0sCisJezB4MDAwMGE3ZjQsIDB4MDAwMDAwNDgsIDB4MDAwMDAwNDh9LAorCXsweDAwMDBhN2Y0LCAweDAwMDAwMDQ4LCAweDAwMDAwMDQ4fSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgcWNhOTU2eF8xcDBfY29tbW9uX3J4X2dhaW5fdGFibGVbXVsyXSA9IHsKKwkvKiBBZGRyICAgICAgYWxsbW9kZXMgICovCisJezB4MDAwMGEwMDAsIDB4MDAwMTAwMDB9LAorCXsweDAwMDBhMDA0LCAweDAwMDMwMDAyfSwKKwl7MHgwMDAwYTAwOCwgMHgwMDA1MDAwNH0sCisJezB4MDAwMGEwMGMsIDB4MDA4MTAwODB9LAorCXsweDAwMDBhMDEwLCAweDAwODMwMDgyfSwKKwl7MHgwMDAwYTAxNCwgMHgwMTgxMDE4MH0sCisJezB4MDAwMGEwMTgsIDB4MDE4MzAxODJ9LAorCXsweDAwMDBhMDFjLCAweDAxODUwMTg0fSwKKwl7MHgwMDAwYTAyMCwgMHgwMTg5MDE4OH0sCisJezB4MDAwMGEwMjQsIDB4MDE4YjAxOGF9LAorCXsweDAwMDBhMDI4LCAweDAxOGQwMThjfSwKKwl7MHgwMDAwYTAyYywgMHgwMTkxMDE5MH0sCisJezB4MDAwMGEwMzAsIDB4MDE5MzAxOTJ9LAorCXsweDAwMDBhMDM0LCAweDAxOTUwMTk0fSwKKwl7MHgwMDAwYTAzOCwgMHgwMzhhMDE5Nn0sCisJezB4MDAwMGEwM2MsIDB4MDM4YzAzOGJ9LAorCXsweDAwMDBhMDQwLCAweDAzOTAwMzhkfSwKKwl7MHgwMDAwYTA0NCwgMHgwMzkyMDM5MX0sCisJezB4MDAwMGEwNDgsIDB4MDM5NDAzOTN9LAorCXsweDAwMDBhMDRjLCAweDAzOTYwMzk1fSwKKwl7MHgwMDAwYTA1MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA1YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDY0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA2OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDcwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA3NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwNzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMDdjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTA4MCwgMHgyMjIyMjIyMn0sCisJezB4MDAwMGEwODQsIDB4MWQxZDFkMWR9LAorCXsweDAwMDBhMDg4LCAweDFkMWQxZDFkfSwKKwl7MHgwMDAwYTA4YywgMHgxZDFkMWQxZH0sCisJezB4MDAwMGEwOTAsIDB4MTcxNzE3MTd9LAorCXsweDAwMDBhMDk0LCAweDExMTExNzE3fSwKKwl7MHgwMDAwYTA5OCwgMHgwMDAzMDMxMX0sCisJezB4MDAwMGEwOWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGEwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBhNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMGI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTBiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGEwYzAsIDB4MDAxZjAwMDB9LAorCXsweDAwMDBhMGM0LCAweDAxMDAwMTAxfSwKKwl7MHgwMDAwYTBjOCwgMHgwMTFlMDExZn0sCisJezB4MDAwMGEwY2MsIDB4MDExYzAxMWR9LAorCXsweDAwMDBhMGQwLCAweDAyMDMwMjA0fSwKKwl7MHgwMDAwYTBkNCwgMHgwMjAxMDIwMn0sCisJezB4MDAwMGEwZDgsIDB4MDIxZjAyMDB9LAorCXsweDAwMDBhMGRjLCAweDAzMDIwMjFlfSwKKwl7MHgwMDAwYTBlMCwgMHgwMzAwMDMwMX0sCisJezB4MDAwMGEwZTQsIDB4MDMxZTAzMWZ9LAorCXsweDAwMDBhMGU4LCAweDA0MDIwMzFkfSwKKwl7MHgwMDAwYTBlYywgMHgwNDAwMDQwMX0sCisJezB4MDAwMGEwZjAsIDB4MDQxZTA0MWZ9LAorCXsweDAwMDBhMGY0LCAweDA1MDIwNDFkfSwKKwl7MHgwMDAwYTBmOCwgMHgwNTAwMDUwMX0sCisJezB4MDAwMGEwZmMsIDB4MDUxZTA1MWZ9LAorCXsweDAwMDBhMTAwLCAweDA2MDEwNjAyfSwKKwl7MHgwMDAwYTEwNCwgMHgwNjFmMDYwMH0sCisJezB4MDAwMGExMDgsIDB4MDYxZDA2MWV9LAorCXsweDAwMDBhMTBjLCAweDA3MDIwNzAzfSwKKwl7MHgwMDAwYTExMCwgMHgwNzAwMDcwMX0sCisJezB4MDAwMGExMTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTExYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEyOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTEzNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExMzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTE0MCwgMHgwMDFmMDAwMH0sCisJezB4MDAwMGExNDQsIDB4MDEwMDAxMDF9LAorCXsweDAwMDBhMTQ4LCAweDAxMWUwMTFmfSwKKwl7MHgwMDAwYTE0YywgMHgwMTFjMDExZH0sCisJezB4MDAwMGExNTAsIDB4MDIwMzAyMDR9LAorCXsweDAwMDBhMTU0LCAweDAyMDEwMjAyfSwKKwl7MHgwMDAwYTE1OCwgMHgwMjFmMDIwMH0sCisJezB4MDAwMGExNWMsIDB4MDMwMjAyMWV9LAorCXsweDAwMDBhMTYwLCAweDAzMDAwMzAxfSwKKwl7MHgwMDAwYTE2NCwgMHgwMzFlMDMxZn0sCisJezB4MDAwMGExNjgsIDB4MDQwMjAzMWR9LAorCXsweDAwMDBhMTZjLCAweDA0MDAwNDAxfSwKKwl7MHgwMDAwYTE3MCwgMHgwNDFlMDQxZn0sCisJezB4MDAwMGExNzQsIDB4MDUwMjA0MWR9LAorCXsweDAwMDBhMTc4LCAweDA1MDAwNTAxfSwKKwl7MHgwMDAwYTE3YywgMHgwNTFlMDUxZn0sCisJezB4MDAwMGExODAsIDB4MDYwMTA2MDJ9LAorCXsweDAwMDBhMTg0LCAweDA2MWYwNjAwfSwKKwl7MHgwMDAwYTE4OCwgMHgwNjFkMDYxZX0sCisJezB4MDAwMGExOGMsIDB4MDcwMjA3MDN9LAorCXsweDAwMDBhMTkwLCAweDA3MDAwNzAxfSwKKwl7MHgwMDAwYTE5NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExOTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMTljLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWE4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFhYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYjAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWI0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFiOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYmMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWMwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFjNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExYzgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWNjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZDQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWQ4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFkYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWU0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYTFlOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGExZWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBhMWYwLCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYTFmNCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGExZjgsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBhMWZjLCAweDAwMDAwMTk2fSwKKwl7MHgwMDAwYjAwMCwgMHgwMDAxMDAwMH0sCisJezB4MDAwMGIwMDQsIDB4MDAwMzAwMDJ9LAorCXsweDAwMDBiMDA4LCAweDAwMDUwMDA0fSwKKwl7MHgwMDAwYjAwYywgMHgwMDgxMDA4MH0sCisJezB4MDAwMGIwMTAsIDB4MDA4MzAwODJ9LAorCXsweDAwMDBiMDE0LCAweDAxODEwMTgwfSwKKwl7MHgwMDAwYjAxOCwgMHgwMTgzMDE4Mn0sCisJezB4MDAwMGIwMWMsIDB4MDE4NTAxODR9LAorCXsweDAwMDBiMDIwLCAweDAyODEwMjgwfSwKKwl7MHgwMDAwYjAyNCwgMHgwMjgzMDI4Mn0sCisJezB4MDAwMGIwMjgsIDB4MDI4NTAyODR9LAorCXsweDAwMDBiMDJjLCAweDAyODkwMjg4fSwKKwl7MHgwMDAwYjAzMCwgMHgwMjhiMDI4YX0sCisJezB4MDAwMGIwMzQsIDB4MDM4ODAyOGN9LAorCXsweDAwMDBiMDM4LCAweDAzOGEwMzg5fSwKKwl7MHgwMDAwYjAzYywgMHgwMzhjMDM4Yn0sCisJezB4MDAwMGIwNDAsIDB4MDM5MDAzOGR9LAorCXsweDAwMDBiMDQ0LCAweDAzOTIwMzkxfSwKKwl7MHgwMDAwYjA0OCwgMHgwMzk0MDM5M30sCisJezB4MDAwMGIwNGMsIDB4MDM5NjAzOTV9LAorCXsweDAwMDBiMDUwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA1NCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDVjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA2MCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDY4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA2YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwNzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDc0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjA3OCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwN2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMDgwLCAweDIzMjMyMzIzfSwKKwl7MHgwMDAwYjA4NCwgMHgyMTIzMjMyM30sCisJezB4MDAwMGIwODgsIDB4MTkxOTFjMWV9LAorCXsweDAwMDBiMDhjLCAweDEyMTQxNDE3fSwKKwl7MHgwMDAwYjA5MCwgMHgwNzA3MGUwZX0sCisJezB4MDAwMGIwOTQsIDB4MDMwMzAzMDV9LAorCXsweDAwMDBiMDk4LCAweDAwMDAwMDAzfSwKKwl7MHgwMDAwYjA5YywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYTAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGE0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBhOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYWMsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGIwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBiNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIwYjgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMGJjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjBjMCwgMHgwMDNmMDAyMH0sCisJezB4MDAwMGIwYzQsIDB4MDA0MDAwNDF9LAorCXsweDAwMDBiMGM4LCAweDAxNDAwMDVmfSwKKwl7MHgwMDAwYjBjYywgMHgwMTYwMDE1Zn0sCisJezB4MDAwMGIwZDAsIDB4MDE3ZTAxN2Z9LAorCXsweDAwMDBiMGQ0LCAweDAyNDEwMjQyfSwKKwl7MHgwMDAwYjBkOCwgMHgwMjVmMDI0MH0sCisJezB4MDAwMGIwZGMsIDB4MDI3ZjAyNjB9LAorCXsweDAwMDBiMGUwLCAweDAzNDEwMjdlfSwKKwl7MHgwMDAwYjBlNCwgMHgwMzVmMDM0MH0sCisJezB4MDAwMGIwZTgsIDB4MDM3ZjAzNjB9LAorCXsweDAwMDBiMGVjLCAweDA0NDAwNDQxfSwKKwl7MHgwMDAwYjBmMCwgMHgwNDYwMDQ1Zn0sCisJezB4MDAwMGIwZjQsIDB4MDU0MTA0N2Z9LAorCXsweDAwMDBiMGY4LCAweDA1NWYwNTQwfSwKKwl7MHgwMDAwYjBmYywgMHgwNTdmMDU2MH0sCisJezB4MDAwMGIxMDAsIDB4MDY0MDA2NDF9LAorCXsweDAwMDBiMTA0LCAweDA2NjAwNjVmfSwKKwl7MHgwMDAwYjEwOCwgMHgwNjdlMDY3Zn0sCisJezB4MDAwMGIxMGMsIDB4MDc0MTA3NDJ9LAorCXsweDAwMDBiMTEwLCAweDA3NWYwNzQwfSwKKwl7MHgwMDAwYjExNCwgMHgwNzdmMDc2MH0sCisJezB4MDAwMGIxMTgsIDB4MDc4MDA3ODF9LAorCXsweDAwMDBiMTFjLCAweDA3YTAwNzlmfSwKKwl7MHgwMDAwYjEyMCwgMHgwN2MxMDdiZn0sCisJezB4MDAwMGIxMjQsIDB4MDAwMDA3YzB9LAorCXsweDAwMDBiMTI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEyYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxMzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjEzOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxM2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMTQwLCAweDAwM2YwMDIwfSwKKwl7MHgwMDAwYjE0NCwgMHgwMDQwMDA0MX0sCisJezB4MDAwMGIxNDgsIDB4MDE0MDAwNWZ9LAorCXsweDAwMDBiMTRjLCAweDAxNjAwMTVmfSwKKwl7MHgwMDAwYjE1MCwgMHgwMTdlMDE3Zn0sCisJezB4MDAwMGIxNTQsIDB4MDI0MTAyNDJ9LAorCXsweDAwMDBiMTU4LCAweDAyNWYwMjQwfSwKKwl7MHgwMDAwYjE1YywgMHgwMjdmMDI2MH0sCisJezB4MDAwMGIxNjAsIDB4MDM0MTAyN2V9LAorCXsweDAwMDBiMTY0LCAweDAzNWYwMzQwfSwKKwl7MHgwMDAwYjE2OCwgMHgwMzdmMDM2MH0sCisJezB4MDAwMGIxNmMsIDB4MDQ0MDA0NDF9LAorCXsweDAwMDBiMTcwLCAweDA0NjAwNDVmfSwKKwl7MHgwMDAwYjE3NCwgMHgwNTQxMDQ3Zn0sCisJezB4MDAwMGIxNzgsIDB4MDU1ZjA1NDB9LAorCXsweDAwMDBiMTdjLCAweDA1N2YwNTYwfSwKKwl7MHgwMDAwYjE4MCwgMHgwNjQwMDY0MX0sCisJezB4MDAwMGIxODQsIDB4MDY2MDA2NWZ9LAorCXsweDAwMDBiMTg4LCAweDA2N2UwNjdmfSwKKwl7MHgwMDAwYjE4YywgMHgwNzQxMDc0Mn0sCisJezB4MDAwMGIxOTAsIDB4MDc1ZjA3NDB9LAorCXsweDAwMDBiMTk0LCAweDA3N2YwNzYwfSwKKwl7MHgwMDAwYjE5OCwgMHgwNzgwMDc4MX0sCisJezB4MDAwMGIxOWMsIDB4MDdhMDA3OWZ9LAorCXsweDAwMDBiMWEwLCAweDA3YzEwN2JmfSwKKwl7MHgwMDAwYjFhNCwgMHgwMDAwMDdjMH0sCisJezB4MDAwMGIxYTgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWFjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFiMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYjQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWI4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFiYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxYzAsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWM0LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFjOCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxY2MsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWQwLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFkNCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZDgsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWRjLCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFlMCwgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZTQsIDB4MDAwMDAwMDB9LAorCXsweDAwMDBiMWU4LCAweDAwMDAwMDAwfSwKKwl7MHgwMDAwYjFlYywgMHgwMDAwMDAwMH0sCisJezB4MDAwMGIxZjAsIDB4MDAwMDAzOTZ9LAorCXsweDAwMDBiMWY0LCAweDAwMDAwMzk2fSwKKwl7MHgwMDAwYjFmOCwgMHgwMDAwMDM5Nn0sCisJezB4MDAwMGIxZmMsIDB4MDAwMDAxOTZ9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBxY2E5NTZ4XzFwMF94bG5hX29ubHlbXVs1XSA9IHsKKwkvKiBBZGRyICAgICAgNUdfSFQyMCAgICAgNUdfSFQ0MCAgICAgMkdfSFQ0MCAgICAgMkdfSFQyMCAgICovCisJezB4MDAwMDk4MjAsIDB4MjA2YTAyMmUsIDB4MjA2YTAyMmUsIDB4MjA2YTAxYWUsIDB4MjA2YTAxYWV9LAorCXsweDAwMDA5ODI0LCAweDVhYzY0MGQwLCAweDVhYzY0MGQwLCAweDVhYzYyMWYxLCAweDVhYzYyMWYxfSwKKwl7MHgwMDAwOTgyOCwgMHgwNjkwMzA4MSwgMHgwNjkwMzA4MSwgMHgwN2Q0Mzg4MSwgMHgwN2Q0Mzg4MX0sCisJezB4MDAwMDllMDAsIDB4MDM3MjExMWEsIDB4MDM3MjExMWEsIDB4MDM3MjE2YTAsIDB4MDM3MjE3MjB9LAorCXsweDAwMDA5ZTBjLCAweDZjNDAwMGUyLCAweDZkNDAwMGUyLCAweDZkNDAwMGRlLCAweDZjNDAwMGRhfSwKKwl7MHgwMDAwOWUxMCwgMHg3ZWM4OGQyZSwgMHg3ZWM4OGQyZSwgMHg3ZWM4NmQyZSwgMHg3ZWM4YWQyZX0sCisJezB4MDAwMDllMTQsIDB4MzdiOTVkNWUsIDB4MzdiOTYwNWUsIDB4MzE3YTYwNjIsIDB4MzE3YTVhZTJ9LAorCXsweDAwMDA5ZTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAzYzAwMDAwLCAweDAzYzAwMDAwfSwKKwl7MHgwMDAwOWUyMCwgMHgwMDAwMDNiNSwgMHgwMDAwMDNiNSwgMHgwMDAwMDNiMiwgMHgwMDAwMDNiMn0sCisJezB4MDAwMDlmYzAsIDB4ODEzZTQ3ODgsIDB4ODEzZTQ3ODgsIDB4ODEzZTQ3ODksIDB4ODEzZTQ3ODl9LAorCXsweDAwMDBhZTE4LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAzYzAwMDAwLCAweDAzYzAwMDAwfSwKKwl7MHgwMDAwYWUyMCwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiNSwgMHgwMDAwMDFiMiwgMHgwMDAwMDFiMn0sCisJezB4MDAwMGJlMTgsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDNjMDAwMDAsIDB4MDNjMDAwMDB9LAorCXsweDAwMDBiZTIwLCAweDAwMDAwMWI1LCAweDAwMDAwMWI1LCAweDAwMDAwMWIyLCAweDAwMDAwMWIyfSwKK307CisKKyNlbmRpZiAvKiBJTklUVkFMU185NTZYX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKaW5kZXggMWE5ZmUwOS4uMGY4ZTk0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKQEAgLTM0LDcgKzM0LDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDlrX29wczsKIGV4dGVybiBpbnQgYXRoOWtfbW9kcGFyYW1fbm9od2NyeXB0OwotZXh0ZXJuIGludCBsZWRfYmxpbms7CitleHRlcm4gaW50IGF0aDlrX2xlZF9ibGluazsKIGV4dGVybiBib29sIGlzX2F0aDlrX3VubG9hZGVkOwogZXh0ZXJuIGludCBhdGg5a191c2VfY2hhbmN0eDsKIApAQCAtODMwLDE0ICs4MzAsOSBAQAogLyogV2FrZSBvbiBXaXJlbGVzcyBMQU4gKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0cnVjdCBhdGg5a193b3dfcGF0dGVybiB7Ci0JdTggcGF0dGVybl9ieXRlc1tNQVhfUEFUVEVSTl9TSVpFXTsKLQl1OCBtYXNrX2J5dGVzW01BWF9QQVRURVJOX1NJWkVdOwotCXUzMiBwYXR0ZXJuX2xlbjsKLX07Ci0KICNpZmRlZiBDT05GSUdfQVRIOUtfV09XCiB2b2lkIGF0aDlrX2luaXRfd293KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3ZvaWQgYXRoOWtfZGVpbml0X3dvdyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBpbnQgYXRoOWtfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICBzdHJ1Y3QgY2ZnODAyMTFfd293bGFuICp3b3dsYW4pOwogaW50IGF0aDlrX3Jlc3VtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CkBAIC04NDYsNiArODQxLDkgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19pbml0X3dvdyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdGg5a19kZWluaXRfd293KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworfQogc3RhdGljIGlubGluZSBpbnQgYXRoOWtfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQlzdHJ1Y3QgY2ZnODAyMTFfd293bGFuICp3b3dsYW4pCiB7CkBAIC0xMDM5LDkgKzEwMzcsOCBAQAogCXMxNiB0eDk5X3Bvd2VyOwogCiAjaWZkZWYgQ09ORklHX0FUSDlLX1dPVwotCWF0b21pY190IHdvd19nb3RfYm1pc3NfaW50cjsKLQlhdG9taWNfdCB3b3dfc2xlZXBfcHJvY19pbnRyOyAvKiBpbiB0aGUgbWlkZGxlIG9mIFdvVyBzbGVlcCA/ICovCiAJdTMyIHdvd19pbnRyX2JlZm9yZV9zbGVlcDsKKwlib29sIGZvcmNlX3dvdzsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2NvbW1vbi1zcGVjdHJhbC5jCmluZGV4IGVjOTNkZGYuLjVjZWUyMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9jb21tb24tc3BlY3RyYWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvY29tbW9uLXNwZWN0cmFsLmMKQEAgLTU4Miw3ICs1ODIsNyBAQAogCiB2b2lkIGF0aDlrX2Ntbl9zcGVjdHJhbF9kZWluaXRfZGVidWcoc3RydWN0IGF0aF9zcGVjX3NjYW5fcHJpdiAqc3BlY19wcml2KQogewotCWlmIChjb25maWdfZW5hYmxlZChDT05GSUdfQVRIOUtfREVCVUdGUykgJiYgc3BlY19wcml2LT5yZnNfY2hhbl9zcGVjX3NjYW4pIHsKKwlpZiAoY29uZmlnX2VuYWJsZWQoQ09ORklHX0FUSDlLX0RFQlVHRlMpKSB7CiAJCXJlbGF5X2Nsb3NlKHNwZWNfcHJpdi0+cmZzX2NoYW5fc3BlY19zY2FuKTsKIAkJc3BlY19wcml2LT5yZnNfY2hhbl9zcGVjX3NjYW4gPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMKaW5kZXggODcxZTk2OS4uNTBhMmUwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2RlYnVnLmMKQEAgLTQwMyw3ICs0MDMsOCBAQAogCiBzdGF0aWMgaW50IHJlYWRfZmlsZV9kbWEoc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IGRldl9nZXRfZHJ2ZGF0YShmaWxlLT5wcml2YXRlKTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXUzMiB2YWxbQVRIOUtfTlVNX0RNQV9ERUJVR19SRUdTXTsKIAlpbnQgaSwgcWN1T2Zmc2V0ID0gMCwgZGN1T2Zmc2V0ID0gMDsKQEAgLTQ3MCwyMCArNDcxLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvcGVuX2ZpbGVfZG1hKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmLCByZWFkX2ZpbGVfZG1hLCBpbm9kZS0+aV9wcml2YXRlKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19kbWEgPSB7Ci0JLm9wZW4gPSBvcGVuX2ZpbGVfZG1hLAotCS5yZWFkID0gc2VxX3JlYWQsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmxsc2VlayA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQotCiB2b2lkIGF0aF9kZWJ1Z19zdGF0X2ludGVycnVwdChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19pbnQgc3RhdHVzKQogewogCWlmIChzdGF0dXMpCkBAIC01MzksNyArNTI2LDggQEAKIAogc3RhdGljIGludCByZWFkX2ZpbGVfaW50ZXJydXB0KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGU7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBkZXZfZ2V0X2RydmRhdGEoZmlsZS0+cHJpdmF0ZSk7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKIAogI2RlZmluZSBQUl9JUyhhLCBzKQkJCQkJCVwKIAlkbyB7CQkJCQkJCVwKQEAgLTYwMCwyMiArNTg4LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgb3Blbl9maWxlX2ludGVycnVwdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZikKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZiwgcmVhZF9maWxlX2ludGVycnVwdCwgaW5vZGUtPmlfcHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfaW50ZXJydXB0ID0gewotCS5yZWFkID0gc2VxX3JlYWQsCi0JLm9wZW4gPSBvcGVuX2ZpbGVfaW50ZXJydXB0LAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KIHN0YXRpYyBpbnQgcmVhZF9maWxlX3htaXQoc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IGRldl9nZXRfZHJ2ZGF0YShmaWxlLT5wcml2YXRlKTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCiAJc2VxX3ByaW50ZihmaWxlLCAiJTMwcyAlMTBzJTEwcyUxMHNcblxuIiwgIkJFIiwgIkJLIiwgIlZJIiwgIlZPIik7CiAKQEAgLTY2MSw3ICs2MzcsOCBAQAogCiBzdGF0aWMgaW50IHJlYWRfZmlsZV9xdWV1ZXMoc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IGRldl9nZXRfZHJ2ZGF0YShmaWxlLT5wcml2YXRlKTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfdHhxICp0eHE7CiAJaW50IGk7CiAJc3RhdGljIGNvbnN0IGNoYXIgKnFuYW1lWzRdID0gewpAQCAtNjgyLDcgKzY1OSw4IEBACiAKIHN0YXRpYyBpbnQgcmVhZF9maWxlX21pc2Moc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IGRldl9nZXRfZHJ2ZGF0YShmaWxlLT5wcml2YXRlKTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKIAlzdHJ1Y3QgYXRoOWtfdmlmX2l0ZXJfZGF0YSBpdGVyX2RhdGE7CiAJc3RydWN0IGF0aF9jaGFuY3R4ICpjdHg7CkBAIC03NzMsNyArNzUxLDggQEAKIAogc3RhdGljIGludCByZWFkX2ZpbGVfcmVzZXQoc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IGRldl9nZXRfZHJ2ZGF0YShmaWxlLT5wcml2YXRlKTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcmVzZXRfY2F1c2VbX19SRVNFVF9UWVBFX01BWF0gPSB7CiAJCVtSRVNFVF9UWVBFX0JCX0hBTkddID0gIkJhc2ViYW5kIEhhbmciLAogCQlbUkVTRVRfVFlQRV9CQl9XQVRDSERPR10gPSAiQmFzZWJhbmQgV2F0Y2hkb2ciLApAQCAtODM3LDU4ICs4MTYsNiBAQAogCQlUWF9TVEFUX0lOQyhxbnVtLCBkZWxpbV91bmRlcnJ1bik7CiB9CiAKLXN0YXRpYyBpbnQgb3Blbl9maWxlX3htaXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGYsIHJlYWRfZmlsZV94bWl0LCBpbm9kZS0+aV9wcml2YXRlKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc194bWl0ID0gewotCS5yZWFkID0gc2VxX3JlYWQsCi0JLm9wZW4gPSBvcGVuX2ZpbGVfeG1pdCwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkubGxzZWVrID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IG9wZW5fZmlsZV9xdWV1ZXMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGYsIHJlYWRfZmlsZV9xdWV1ZXMsIGlub2RlLT5pX3ByaXZhdGUpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3F1ZXVlcyA9IHsKLQkucmVhZCA9IHNlcV9yZWFkLAotCS5vcGVuID0gb3Blbl9maWxlX3F1ZXVlcywKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkubGxzZWVrID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IG9wZW5fZmlsZV9taXNjKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmLCByZWFkX2ZpbGVfbWlzYywgaW5vZGUtPmlfcHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfbWlzYyA9IHsKLQkucmVhZCA9IHNlcV9yZWFkLAotCS5vcGVuID0gb3Blbl9maWxlX21pc2MsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmxsc2VlayA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCBvcGVuX2ZpbGVfcmVzZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGYsIHJlYWRfZmlsZV9yZXNldCwgaW5vZGUtPmlfcHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfcmVzZXQgPSB7Ci0JLnJlYWQgPSBzZXFfcmVhZCwKLQkub3BlbiA9IG9wZW5fZmlsZV9yZXNldCwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkubGxzZWVrID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCi19OwotCiB2b2lkIGF0aF9kZWJ1Z19zdGF0X3J4KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3J4X3N0YXR1cyAqcnMpCiB7CiAJYXRoOWtfY21uX2RlYnVnX3N0YXRfcngoJnNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLCBycyk7CkBAIC0xMDE4LDcgKzk0NSw4IEBACiAKIHN0YXRpYyBpbnQgcmVhZF9maWxlX2R1bXBfbmZjYWwoc3RydWN0IHNlcV9maWxlICpmaWxlLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IGRldl9nZXRfZHJ2ZGF0YShmaWxlLT5wcml2YXRlKTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXN0cnVjdCBhdGg5a19uZmNhbF9oaXN0ICpoID0gc2MtPmN1cl9jaGFuLT5jYWxkYXRhLm5mQ2FsSGlzdDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKQEAgLTExMTUsNiArMTA0MywxMzMgQEAKIH07CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BVEg5S19XT1cKKworc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3dvdyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMCwgc2l6ZSA9IDMyOworCXNzaXplX3QgcmV0dmFsOworCWNoYXIgKmJ1ZjsKKworCWJ1ZiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJbGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sICJXT1c6ICVzXG4iLAorCQkJIHNjLT5mb3JjZV93b3cgPyAiRU5BQkxFRCIgOiAiRElTQUJMRUQiKTsKKworCWlmIChsZW4gPiBzaXplKQorCQlsZW4gPSBzaXplOworCisJcmV0dmFsID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CisJa2ZyZWUoYnVmKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfd293KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwljaGFyIGJ1ZlszMl07CisJc3NpemVfdCBsZW47CisKKwlsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmW2xlbl0gPSAnXDAnOworCWlmIChrc3RydG91bChidWYsIDAsICZ2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2YWwgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIXNjLT5mb3JjZV93b3cpIHsKKwkJc2MtPmZvcmNlX3dvdyA9IHRydWU7CisJCWF0aDlrX2luaXRfd293KHNjLT5odyk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3dvdyA9IHsKKwkucmVhZCA9IHJlYWRfZmlsZV93b3csCisJLndyaXRlID0gd3JpdGVfZmlsZV93b3csCisJLm9wZW4gPSBzaW1wbGVfb3BlbiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCisjZW5kaWYKKworc3RhdGljIHNzaXplX3QgcmVhZF9maWxlX3RwYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMCwgc2l6ZSA9IDMyOworCXNzaXplX3QgcmV0dmFsOworCWNoYXIgKmJ1ZjsKKworCWJ1ZiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJbGVuICs9IHNjbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sICIlc1xuIiwKKwkJCSBhaC0+dHBjX2VuYWJsZWQgPyAiRU5BQkxFRCIgOiAiRElTQUJMRUQiKTsKKworCWlmIChsZW4gPiBzaXplKQorCQlsZW4gPSBzaXplOworCisJcmV0dmFsID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CisJa2ZyZWUoYnVmKTsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX2ZpbGVfdHBjKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwljaGFyIGJ1ZlszMl07CisJc3NpemVfdCBsZW47CisJYm9vbCB0cGNfZW5hYmxlZDsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidWZbbGVuXSA9ICdcMCc7CisJaWYgKGtzdHJ0b3VsKGJ1ZiwgMCwgJnZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbCA8IDAgfHwgdmFsID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0cGNfZW5hYmxlZCA9ICEhdmFsOworCisJaWYgKHRwY19lbmFibGVkICE9IGFoLT50cGNfZW5hYmxlZCkgeworCQlhaC0+dHBjX2VuYWJsZWQgPSB0cGNfZW5hYmxlZDsKKwkJYXRoOWtfaHdfc2V0X3R4cG93ZXJsaW1pdChhaCwgc2MtPmN1cl9jaGFuLT50eHBvd2VyLCBmYWxzZSk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3RwYyA9IHsKKwkucmVhZCA9IHJlYWRfZmlsZV90cGMsCisJLndyaXRlID0gd3JpdGVfZmlsZV90cGMsCisJLm9wZW4gPSBzaW1wbGVfb3BlbiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCit9OworCiAvKiBFdGh0b29sIHN1cHBvcnQgZm9yIGdldC1zdGF0cyAqLwogCiAjZGVmaW5lIEFNS1NUUihubSkgI25tICJfQkUiLCAjbm0gIl9CSyIsICNubSAiX1ZJIiwgI25tICJfVk8iCkBAIC0xMjYwLDE0ICsxMzE1LDE0IEBACiAJYXRoOWtfdHg5OV9pbml0X2RlYnVnKHNjKTsKIAlhdGg5a19jbW5fc3BlY3RyYWxfaW5pdF9kZWJ1Zygmc2MtPnNwZWNfcHJpdiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5KTsKIAotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImRtYSIsIFNfSVJVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsCi0JCQkgICAgJmZvcHNfZG1hKTsKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpbnRlcnJ1cHQiLCBTX0lSVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLAotCQkJICAgICZmb3BzX2ludGVycnVwdCk7Ci0JZGVidWdmc19jcmVhdGVfZmlsZSgieG1pdCIsIFNfSVJVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsCi0JCQkgICAgJmZvcHNfeG1pdCk7Ci0JZGVidWdmc19jcmVhdGVfZmlsZSgicXVldWVzIiwgU19JUlVTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywKLQkJCSAgICAmZm9wc19xdWV1ZXMpOworCWRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShzYy0+ZGV2LCAiZG1hIiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAorCQkJCSAgICByZWFkX2ZpbGVfZG1hKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoc2MtPmRldiwgImludGVycnVwdCIsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCQkgICAgcmVhZF9maWxlX2ludGVycnVwdCk7CisJZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKHNjLT5kZXYsICJ4bWl0Iiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAorCQkJCSAgICByZWFkX2ZpbGVfeG1pdCk7CisJZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKHNjLT5kZXYsICJxdWV1ZXMiLCBzYy0+ZGVidWcuZGVidWdmc19waHksCisJCQkJICAgIHJlYWRfZmlsZV9xdWV1ZXMpOwogCWRlYnVnZnNfY3JlYXRlX3UzMigicWxlbl9iayIsIFNfSVJVU1IgfCBTX0lXVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksCiAJCQkgICAmc2MtPnR4LnR4cV9tYXhfcGVuZGluZ1tJRUVFODAyMTFfQUNfQktdKTsKIAlkZWJ1Z2ZzX2NyZWF0ZV91MzIoInFsZW5fYmUiLCBTX0lSVVNSIHwgU19JV1VTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LApAQCAtMTI3NiwxMCArMTMzMSwxMCBAQAogCQkJICAgJnNjLT50eC50eHFfbWF4X3BlbmRpbmdbSUVFRTgwMjExX0FDX1ZJXSk7CiAJZGVidWdmc19jcmVhdGVfdTMyKCJxbGVuX3ZvIiwgU19JUlVTUiB8IFNfSVdVU1IsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKIAkJCSAgICZzYy0+dHgudHhxX21heF9wZW5kaW5nW0lFRUU4MDIxMV9BQ19WT10pOwotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoIm1pc2MiLCBTX0lSVVNSLCBzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLAotCQkJICAgICZmb3BzX21pc2MpOwotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJlc2V0IiwgU19JUlVTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywKLQkJCSAgICAmZm9wc19yZXNldCk7CisJZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKHNjLT5kZXYsICJtaXNjIiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAorCQkJCSAgICByZWFkX2ZpbGVfbWlzYyk7CisJZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKHNjLT5kZXYsICJyZXNldCIsIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCQkgICAgcmVhZF9maWxlX3Jlc2V0KTsKIAogCWF0aDlrX2Ntbl9kZWJ1Z19yZWN2KHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgJnNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzKTsKIAlhdGg5a19jbW5fZGVidWdfcGh5X2VycihzYy0+ZGVidWcuZGVidWdmc19waHksICZzYy0+ZGVidWcuc3RhdHMucnhzdGF0cyk7CkBAIC0xMzAxLDggKzEzNTYsOSBAQAogCQkJICAgICZhaC0+Y29uZmlnLmN3bV9pZ25vcmVfZXh0Y2NhKTsKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyZWdkdW1wIiwgU19JUlVTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywKIAkJCSAgICAmZm9wc19yZWdkdW1wKTsKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkdW1wX25mY2FsIiwgU19JUlVTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LCBzYywKLQkJCSAgICAmZm9wc19kdW1wX25mY2FsKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoc2MtPmRldiwgImR1bXBfbmZjYWwiLAorCQkJCSAgICBzYy0+ZGVidWcuZGVidWdmc19waHksCisJCQkJICAgIHJlYWRfZmlsZV9kdW1wX25mY2FsKTsKIAogCWF0aDlrX2Ntbl9kZWJ1Z19iYXNlX2VlcHJvbShzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLT5zY19haCk7CiAJYXRoOWtfY21uX2RlYnVnX21vZGFsX2VlcHJvbShzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLT5zY19haCk7CkBAIC0xMzIwLDEwICsxMzc2LDE3IEBACiAJCQkgICAgJmZvcHNfYnRjb2V4KTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FUSDlLX1dPVworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoIndvdyIsIFNfSVJVU1IgfCBTX0lXVVNSLAorCQkJICAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwgc2MsICZmb3BzX3dvdyk7CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BVEg5S19EWU5BQ0sKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJhY2tfdG8iLCBTX0lSVVNSIHwgU19JV1VTUiwgc2MtPmRlYnVnLmRlYnVnZnNfcGh5LAogCQkJICAgIHNjLCAmZm9wc19hY2t0byk7CiAjZW5kaWYKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0cGMiLCBTX0lSVVNSIHwgU19JV1VTUiwKKwkJCSAgICBzYy0+ZGVidWcuZGVidWdmc19waHksIHNjLCAmZm9wc190cGMpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzRrLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzRrLmMKaW5kZXggMDdiODA2Yy4uZTVhNzhkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV80ay5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fNGsuYwpAQCAtNzQ4LDYgKzc0OCwyMCBAQAogCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBDY2tdLCAwKSk7CiAJfQogCisJLyogVFBDIGluaXRpYWxpemF0aW9ucyAqLworCWlmIChhaC0+dHBjX2VuYWJsZWQpIHsKKwkJaW50IGh0NDBfZGVsdGE7CisKKwkJaHQ0MF9kZWx0YSA9IChJU19DSEFOX0hUNDAoY2hhbikpID8gaHQ0MFBvd2VySW5jRm9yUGRhZGMgOiAwOworCQlhcjUwMDhfaHdfaW5pdF9yYXRlX3R4cG93ZXIoYWgsIHJhdGVzQXJyYXksIGNoYW4sIGh0NDBfZGVsdGEpOworCQkvKiBFbmFibGUgVFBDICovCisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEVfTUFYLAorCQkJTUFYX1JBVEVfUE9XRVIgfCBBUl9QSFlfUE9XRVJfVFhfUkFURV9NQVhfVFBDX0VOQUJMRSk7CisJfSBlbHNlIHsKKwkJLyogRGlzYWJsZSBUUEMgKi8KKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURV9NQVgsIE1BWF9SQVRFX1BPV0VSKTsKKwl9CisKIAlSRUdXUklURV9CVUZGRVJfRkxVU0goYWgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tXzkyODcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jCmluZGV4IDViYTEzODUuLjZjYTMzZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fOTI4Ny5jCkBAIC04ODYsNiArODg2LDIxIEBACiAJCQkgIHwgQVRIOUtfUE9XX1NNKHJhdGVzQXJyYXlbcmF0ZUR1cE9mZG1dLCA4KQogCQkJICB8IEFUSDlLX1BPV19TTShyYXRlc0FycmF5W3JhdGVEdXBDY2tdLCAwKSk7CiAJfQorCisJLyogVFBDIGluaXRpYWxpemF0aW9ucyAqLworCWlmIChhaC0+dHBjX2VuYWJsZWQpIHsKKwkJaW50IGh0NDBfZGVsdGE7CisKKwkJaHQ0MF9kZWx0YSA9IChJU19DSEFOX0hUNDAoY2hhbikpID8gaHQ0MFBvd2VySW5jRm9yUGRhZGMgOiAwOworCQlhcjUwMDhfaHdfaW5pdF9yYXRlX3R4cG93ZXIoYWgsIHJhdGVzQXJyYXksIGNoYW4sIGh0NDBfZGVsdGEpOworCQkvKiBFbmFibGUgVFBDICovCisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEVfTUFYLAorCQkJTUFYX1JBVEVfUE9XRVIgfCBBUl9QSFlfUE9XRVJfVFhfUkFURV9NQVhfVFBDX0VOQUJMRSk7CisJfSBlbHNlIHsKKwkJLyogRGlzYWJsZSBUUEMgKi8KKwkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUE9XRVJfVFhfUkFURV9NQVgsIE1BWF9SQVRFX1BPV0VSKTsKKwl9CisKIAlSRUdXUklURV9CVUZGRVJfRkxVU0goYWgpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tX2RlZi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2VlcHJvbV9kZWYuYwppbmRleCAxMjJiODQ2Li4wOTgwNTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZWVwcm9tX2RlZi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9lZXByb21fZGVmLmMKQEAgLTEzMzIsNiArMTMzMiwyMCBAQAogCQkgIEFUSDlLX1BPV19TTShwTW9kYWwtPnB3ckRlY3JlYXNlRm9yM0NoYWluLCA2KQogCQkgIHwgQVRIOUtfUE9XX1NNKHBNb2RhbC0+cHdyRGVjcmVhc2VGb3IyQ2hhaW4sIDApKTsKIAorCS8qIFRQQyBpbml0aWFsaXphdGlvbnMgKi8KKwlpZiAoYWgtPnRwY19lbmFibGVkKSB7CisJCWludCBodDQwX2RlbHRhOworCisJCWh0NDBfZGVsdGEgPSAoSVNfQ0hBTl9IVDQwKGNoYW4pKSA/IGh0NDBQb3dlckluY0ZvclBkYWRjIDogMDsKKwkJYXI1MDA4X2h3X2luaXRfcmF0ZV90eHBvd2VyKGFoLCByYXRlc0FycmF5LCBjaGFuLCBodDQwX2RlbHRhKTsKKwkJLyogRW5hYmxlIFRQQyAqLworCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QT1dFUl9UWF9SQVRFX01BWCwKKwkJCU1BWF9SQVRFX1BPV0VSIHwgQVJfUEhZX1BPV0VSX1RYX1JBVEVfTUFYX1RQQ19FTkFCTEUpOworCX0gZWxzZSB7CisJCS8qIERpc2FibGUgVFBDICovCisJCVJFR19XUklURShhaCwgQVJfUEhZX1BPV0VSX1RYX1JBVEVfTUFYLCBNQVhfUkFURV9QT1dFUik7CisJfQorCiAJUkVHV1JJVEVfQlVGRkVSX0ZMVVNIKGFoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2dwaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ncGlvLmMKaW5kZXggMmZlZjdhNC4uZGEzNDRiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2dwaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZ3Bpby5jCkBAIC00OSw3ICs0OSw3IEBACiAJaWYgKEFSX1NSRVZfOTEwMChzYy0+c2NfYWgpKQogCQlyZXR1cm47CiAKLQlpZiAoIWxlZF9ibGluaykKKwlpZiAoIWF0aDlrX2xlZF9ibGluaykKIAkJc2MtPmxlZF9jZGV2LmRlZmF1bHRfdHJpZ2dlciA9CiAJCQlpZWVlODAyMTFfZ2V0X3JhZGlvX2xlZF9uYW1lKHNjLT5odyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGMuaAppbmRleCA5ZGRlMjY1Li4zMDBkMzY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Yy5oCkBAIC00NCw2ICs0NCw5IEBACiAKIGV4dGVybiBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19odGNfb3BzOwogZXh0ZXJuIGludCBodGNfbW9kcGFyYW1fbm9od2NyeXB0OworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9MRURTCitleHRlcm4gaW50IGF0aDlrX2h0Y19sZWRfYmxpbms7CisjZW5kaWYKIAogZW51bSBodGNfcGh5bW9kZSB7CiAJSFRDX01PREVfMTFOQQkJPSAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZ3Bpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfZ3Bpby5jCmluZGV4IDUwZjc0YTIuLjJhYWJjYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2dwaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9ncGlvLmMKQEAgLTI3OSw2ICsyNzksMTAgQEAKIAllbHNlCiAJCXByaXYtPmFoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fREVGOwogCisJaWYgKCFhdGg5a19odGNfbGVkX2JsaW5rKQorCQlwcml2LT5sZWRfY2Rldi5kZWZhdWx0X3RyaWdnZXIgPQorCQkJaWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShwcml2LT5odyk7CisKIAlhdGg5a19jb25maWd1cmVfbGVkcyhwcml2KTsKIAogCXNucHJpbnRmKHByaXYtPmxlZF9uYW1lLCBzaXplb2YocHJpdi0+bGVkX25hbWUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jCmluZGV4IGU4ZmE5NDQuLmZkMjI5NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMKQEAgLTM5LDYgKzM5LDEwIEBACiBNT0RVTEVfUEFSTV9ERVNDKHBzX2VuYWJsZSwgIkVuYWJsZSBXTEFOIFBvd2VyU2F2ZSIpOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0xFRFMKK2ludCBhdGg5a19odGNfbGVkX2JsaW5rID0gMTsKK21vZHVsZV9wYXJhbV9uYW1lZChibGluaywgYXRoOWtfaHRjX2xlZF9ibGluaywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYmxpbmssICJFbmFibGUgTEVEIGJsaW5rIG9uIGFjdGl2aXR5Iik7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3RwdF9ibGluayBhdGg5a19odGNfdHB0X2JsaW5rW10gPSB7CiAJeyAudGhyb3VnaHB1dCA9IDAgKiAxMDI0LCAuYmxpbmtfdGltZSA9IDMzNCB9LAogCXsgLnRocm91Z2hwdXQgPSAxICogMTAyNCwgLmJsaW5rX3RpbWUgPSAyNjAgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2hzdC5jCmluZGV4IGEwZmY1YjYuLmQyNDA4ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfaHN0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19oc3QuYwpAQCAtMzUxLDExICszNTEsNyBAQAogCiAJcmV0dXJuOwogcmV0OgotCS8qIEhUQy1nZW5lcmF0ZWQgcGFja2V0cyBhcmUgZnJlZWQgaGVyZS4gKi8KLQlpZiAoaHRjX2hkciAmJiBodGNfaGRyLT5lbmRwb2ludF9pZCAhPSBFTkRQT0lOVDApCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JZWxzZQotCQlrZnJlZV9za2Ioc2tiKTsKKwlrZnJlZV9za2Ioc2tiKTsKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfaHRjX2Z3X3BhbmljX3JlcG9ydChzdHJ1Y3QgaHRjX3RhcmdldCAqaHRjX2hhbmRsZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKaW5kZXggNmQ0YjI3My4uNjBhYThkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMKQEAgLTI0Niw2ICsyNDYsOCBAQAogCWNhc2UgQVI5MzAwX0RFVklEX0FSOTUzWDoKIAkJYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9IEFSX1NSRVZfVkVSU0lPTl85NTMxOwogCQlyZXR1cm47CisJY2FzZSBBUjkzMDBfREVWSURfUUNBOTU2WDoKKwkJYWgtPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9IEFSX1NSRVZfVkVSU0lPTl85NTYxOwogCX0KIAogCXZhbCA9IFJFR19SRUFEKGFoLCBBUl9TUkVWKSAmIEFSX1NSRVZfSUQ7CkBAIC00MjIsNiArNDI0LDggQEAKIAlhaC0+cG93ZXJfbW9kZSA9IEFUSDlLX1BNX1VOREVGSU5FRDsKIAlhaC0+aHRjX3Jlc2V0X2luaXQgPSB0cnVlOwogCisJYWgtPnRwY19lbmFibGVkID0gdHJ1ZTsKKwogCWFoLT5hbmlfZnVuY3Rpb24gPSBBVEg5S19BTklfQUxMOwogCWlmICghQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkKIAkJYWgtPmFuaV9mdW5jdGlvbiAmPSB+QVRIOUtfQU5JX01SQ19DQ0s7CkBAIC01MzYsNiArNTQwLDcgQEAKIAljYXNlIEFSX1NSRVZfVkVSU0lPTl85NTUwOgogCWNhc2UgQVJfU1JFVl9WRVJTSU9OXzk1NjU6CiAJY2FzZSBBUl9TUkVWX1ZFUlNJT05fOTUzMToKKwljYXNlIEFSX1NSRVZfVkVSU0lPTl85NTYxOgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlhdGhfZXJyKGNvbW1vbiwKQEAgLTYzNiw2ICs2NDEsNyBAQAogCWNhc2UgQVI5NDg1X0RFVklEX0FSMTExMToKIAljYXNlIEFSOTMwMF9ERVZJRF9BUjk1NjU6CiAJY2FzZSBBUjkzMDBfREVWSURfQVI5NTNYOgorCWNhc2UgQVI5MzAwX0RFVklEX1FDQTk1Nlg6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmIChjb21tb24tPmJ1c19vcHMtPmF0aF9idXNfdHlwZSA9PSBBVEhfVVNCKQpAQCAtNzc2LDcgKzc4Miw4IEBACiAJCS8qIHByb2dyYW0gQkIgUExMIHBoYXNlX3NoaWZ0ICovCiAJCVJFR19STVdfRklFTEQoYWgsIEFSX0NIMF9CQl9EUExMMywKIAkJCSAgICAgIEFSX0NIMF9CQl9EUExMM19QSEFTRV9TSElGVCwgMHgxKTsKLQl9IGVsc2UgaWYgKEFSX1NSRVZfOTM0MChhaCkgfHwgQVJfU1JFVl85NTUwKGFoKSB8fCBBUl9TUkVWXzk1MzEoYWgpKSB7CisJfSBlbHNlIGlmIChBUl9TUkVWXzkzNDAoYWgpIHx8IEFSX1NSRVZfOTU1MChhaCkgfHwgQVJfU1JFVl85NTMxKGFoKSB8fAorCQkgICBBUl9TUkVWXzk1NjEoYWgpKSB7CiAJCXUzMiByZWd2YWwsIHBsbDJfZGl2aW50LCBwbGwyX2RpdmZyYWMsIHJlZmRpdjsKIAogCQlSRUdfV1JJVEUoYWgsIEFSX1JUQ19QTExfQ09OVFJPTCwKQEAgLTc4Nyw3ICs3OTQsNyBAQAogCQl1ZGVsYXkoMTAwKTsKIAogCQlpZiAoYWgtPmlzX2Nsa18yNW1oeikgewotCQkJaWYgKEFSX1NSRVZfOTUzMShhaCkpIHsKKwkJCWlmIChBUl9TUkVWXzk1MzEoYWgpIHx8IEFSX1NSRVZfOTU2MShhaCkpIHsKIAkJCQlwbGwyX2RpdmludCA9IDB4MWM7CiAJCQkJcGxsMl9kaXZmcmFjID0gMHhhM2QyOwogCQkJCXJlZmRpdiA9IDE7CkBAIC04MDMsMTQgKzgxMCwxNSBAQAogCQkJCXJlZmRpdiA9IDU7CiAJCQl9IGVsc2UgewogCQkJCXBsbDJfZGl2aW50ID0gMHgxMTsKLQkJCQlwbGwyX2RpdmZyYWMgPQotCQkJCQlBUl9TUkVWXzk1MzEoYWgpID8gMHgyNjY2NSA6IDB4MjY2NjY7CisJCQkJcGxsMl9kaXZmcmFjID0gKEFSX1NSRVZfOTUzMShhaCkgfHwKKwkJCQkJCUFSX1NSRVZfOTU2MShhaCkpID8KKwkJCQkJCTB4MjY2NjUgOiAweDI2NjY2OwogCQkJCXJlZmRpdiA9IDE7CiAJCQl9CiAJCX0KIAogCQlyZWd2YWwgPSBSRUdfUkVBRChhaCwgQVJfUEhZX1BMTF9NT0RFKTsKLQkJaWYgKEFSX1NSRVZfOTUzMShhaCkpCisJCWlmIChBUl9TUkVWXzk1MzEoYWgpIHx8IEFSX1NSRVZfOTU2MShhaCkpCiAJCQlyZWd2YWwgfD0gKDB4MSA8PCAyMik7CiAJCWVsc2UKIAkJCXJlZ3ZhbCB8PSAoMHgxIDw8IDE2KTsKQEAgLTgyOCwxNCArODM2LDE2IEBACiAJCQkJKDB4MSA8PCAxMykgfAogCQkJCSgweDQgPDwgMjYpIHwKIAkJCQkoMHgxOCA8PCAxOSk7Ci0JCWVsc2UgaWYgKEFSX1NSRVZfOTUzMShhaCkpCisJCWVsc2UgaWYgKEFSX1NSRVZfOTUzMShhaCkgfHwgQVJfU1JFVl85NTYxKGFoKSkgewogCQkJcmVndmFsID0gKHJlZ3ZhbCAmIDB4MDFjMDBmZmYpIHwKIAkJCQkoMHgxIDw8IDMxKSB8CiAJCQkJKDB4MiA8PCAyOSkgfAogCQkJCSgweGEgPDwgMjUpIHwKLQkJCQkoMHgxIDw8IDE5KSB8Ci0JCQkJKDB4NiA8PCAxMik7Ci0JCWVsc2UKKwkJCQkoMHgxIDw8IDE5KTsKKworCQkJaWYgKEFSX1NSRVZfOTUzMShhaCkpCisJCQkJcmVndmFsIHw9ICgweDYgPDwgMTIpOworCQl9IGVsc2UKIAkJCXJlZ3ZhbCA9IChyZWd2YWwgJiAweDgwMDcxZmZmKSB8CiAJCQkJKDB4MyA8PCAzMCkgfAogCQkJCSgweDEgPDwgMTMpIHwKQEAgLTg0Myw3ICs4NTMsNyBAQAogCQkJCSgweDYwIDw8IDE5KTsKIAkJUkVHX1dSSVRFKGFoLCBBUl9QSFlfUExMX01PREUsIHJlZ3ZhbCk7CiAKLQkJaWYgKEFSX1NSRVZfOTUzMShhaCkpCisJCWlmIChBUl9TUkVWXzk1MzEoYWgpIHx8IEFSX1NSRVZfOTU2MShhaCkpCiAJCQlSRUdfV1JJVEUoYWgsIEFSX1BIWV9QTExfTU9ERSwKIAkJCQkgIFJFR19SRUFEKGFoLCBBUl9QSFlfUExMX01PREUpICYgMHhmZmJmZmZmZik7CiAJCWVsc2UKQEAgLTg4Miw3ICs4OTIsOCBAQAogCQlBUl9JTVJfUlhPUk4gfAogCQlBUl9JTVJfQkNOTUlTQzsKIAotCWlmIChBUl9TUkVWXzkzNDAoYWgpIHx8IEFSX1NSRVZfOTU1MChhaCkgfHwgQVJfU1JFVl85NTMxKGFoKSkKKwlpZiAoQVJfU1JFVl85MzQwKGFoKSB8fCBBUl9TUkVWXzk1NTAoYWgpIHx8IEFSX1NSRVZfOTUzMShhaCkgfHwKKwkgICAgQVJfU1JFVl85NTYxKGFoKSkKIAkJc3luY19kZWZhdWx0ICY9IH5BUl9JTlRSX1NZTkNfSE9TVDFfRkFUQUw7CiAKIAlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkgewpAQCAtMTY3MSw3ICsxNjgyLDggQEAKIAkJfQogI2lmZGVmIF9fQklHX0VORElBTgogCQllbHNlIGlmIChBUl9TUkVWXzkzMzAoYWgpIHx8IEFSX1NSRVZfOTM0MChhaCkgfHwKLQkJCSBBUl9TUkVWXzk1NTAoYWgpIHx8IEFSX1NSRVZfOTUzMShhaCkpCisJCQkgQVJfU1JFVl85NTUwKGFoKSB8fCBBUl9TUkVWXzk1MzEoYWgpIHx8CisJCQkgQVJfU1JFVl85NTYxKGFoKSkKIAkJCVJFR19STVcoYWgsIEFSX0NGRywgQVJfQ0ZHX1NXUkIgfCBBUl9DRkdfU1dUQiwgMCk7CiAJCWVsc2UKIAkJCVJFR19XUklURShhaCwgQVJfQ0ZHLCBBUl9DRkdfU1dURCB8IEFSX0NGR19TV1JEKTsKQEAgLTI0NTksNyArMjQ3MSw4IEBACiAKIAlpZiAoQVJfU1JFVl85MzAwXzIwX09SX0xBVEVSKGFoKSkgewogCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9FRE1BIHwgQVRIOUtfSFdfQ0FQX0ZBU1RDTE9DSzsKLQkJaWYgKCFBUl9TUkVWXzkzMzAoYWgpICYmICFBUl9TUkVWXzk0ODUoYWgpICYmICFBUl9TUkVWXzk1NjUoYWgpKQorCQlpZiAoIUFSX1NSRVZfOTMzMChhaCkgJiYgIUFSX1NSRVZfOTQ4NShhaCkgJiYKKwkJICAgICFBUl9TUkVWXzk1NjEoYWgpICYmICFBUl9TUkVWXzk1NjUoYWgpKQogCQkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfTERQQzsKIAogCQlwQ2FwLT5yeF9ocF9xZGVwdGggPSBBVEg5S19IV19SWF9IUF9RREVQVEg7CkBAIC0yNDc2LDcgKzI0ODksOSBAQAogCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQogCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX0NBUF9SQUNfU1VQUE9SVEVEOwogCi0JaWYgKEFSX1NSRVZfOTMwMF8yMF9PUl9MQVRFUihhaCkpCisJaWYgKEFSX1NSRVZfOTU2MShhaCkpCisJCWFoLT5lbnRfbW9kZSA9IDB4M0JEQTAwMDsKKwllbHNlIGlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKQogCQlhaC0+ZW50X21vZGUgPSBSRUdfUkVBRChhaCwgQVJfRU5UX09UUCk7CiAKIAlpZiAoQVJfU1JFVl85Mjg3XzExX09SX0xBVEVSKGFoKSB8fCBBUl9TUkVWXzkyNzEoYWgpKQpAQCAtMjUyOSwxMyArMjU0NCwxNyBAQAogCQkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfUlRUOwogCX0KIAotCWlmIChBUl9TUkVWXzk0NjIoYWgpKQotCQlwQ2FwLT5od19jYXBzIHw9IEFUSDlLX0hXX1dPV19ERVZJQ0VfQ0FQQUJMRTsKLQogCWlmIChBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpICYmCiAJICAgIGFoLT5lZXBfb3BzLT5nZXRfZWVwcm9tKGFoLCBFRVBfUEFQUkQpKQogCQkJcENhcC0+aHdfY2FwcyB8PSBBVEg5S19IV19DQVBfUEFQUkQ7CiAKKyNpZmRlZiBDT05GSUdfQVRIOUtfV09XCisJaWYgKEFSX1NSRVZfOTQ2Ml8yMF9PUl9MQVRFUihhaCkgfHwgQVJfU1JFVl85NTY1XzExX09SX0xBVEVSKGFoKSkKKwkJYWgtPndvdy5tYXhfcGF0dGVybnMgPSBNQVhfTlVNX1BBVFRFUk47CisJZWxzZQorCQlhaC0+d293Lm1heF9wYXR0ZXJucyA9IE1BWF9OVU1fUEFUVEVSTl9MRUdBQ1k7CisjZW5kaWYKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCmluZGV4IDFjYmQzMzUuLmU4MmU1NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCkBAIC01NCw2ICs1NCw3IEBACiAjZGVmaW5lIEFSOTQ4NV9ERVZJRF9BUjExMTEJMHgwMDM3CiAjZGVmaW5lIEFSOTMwMF9ERVZJRF9BUjk1NjUgICAgIDB4MDAzNgogI2RlZmluZSBBUjkzMDBfREVWSURfQVI5NTNYICAgICAweDAwM2QKKyNkZWZpbmUgQVI5MzAwX0RFVklEX1FDQTk1NlggICAgMHgwMDNmCiAKICNkZWZpbmUgQVI1NDE2X0FSOTEwMF9ERVZJRAkweDAwMGIKIApAQCAtMTk4LDEyICsxOTksMTMgQEAKICNkZWZpbmUgS0FMX05VTV9ERVNDX1dPUkRTCTEyCiAjZGVmaW5lIEtBTF9BTlRFTk5BX01PREUJMQogI2RlZmluZSBLQUxfVE9fRFMJCTEKLSNkZWZpbmUgS0FMX0RFTEFZCQk0CS8qZGVsYXkgb2YgNG1zIGJldHdlZW4gMiBLQUwgZnJhbWVzICovCisjZGVmaW5lIEtBTF9ERUxBWQkJNAkvKiBkZWxheSBvZiA0bXMgYmV0d2VlbiAyIEtBTCBmcmFtZXMgKi8KICNkZWZpbmUgS0FMX1RJTUVPVVQJCTkwMAogCiAjZGVmaW5lIE1BWF9QQVRURVJOX1NJWkUJCTI1NgogI2RlZmluZSBNQVhfUEFUVEVSTl9NQVNLX1NJWkUJCTMyCi0jZGVmaW5lIE1BWF9OVU1fUEFUVEVSTgkJCTgKKyNkZWZpbmUgTUFYX05VTV9QQVRURVJOCQkJMTYKKyNkZWZpbmUgTUFYX05VTV9QQVRURVJOX0xFR0FDWQkJOAogI2RlZmluZSBNQVhfTlVNX1VTRVJfUEFUVEVSTgkJNiAvKiAgZGVkdWN0aW5nIHRoZSBkaXNhc3NvY2lhdGUgYW5kCiAJCQkJCSAgICAgIGRlYXV0aGVudGljYXRlIHBhY2tldHMgKi8KIApAQCAtMjQ3LDEyICsyNDksMTAgQEAKICNpZmRlZiBDT05GSUdfQVRIOUtfUENPRU0KIAlBVEg5S19IV19DQVBfUlRUCQkJPSBCSVQoMTQpLAogCUFUSDlLX0hXX0NBUF9NQ0kJCQk9IEJJVCgxNSksCi0JQVRIOUtfSFdfV09XX0RFVklDRV9DQVBBQkxFCQk9IEJJVCgxNiksCiAJQVRIOUtfSFdfQ0FQX0JUX0FOVF9ESVYJCQk9IEJJVCgxNyksCiAjZWxzZQogCUFUSDlLX0hXX0NBUF9SVFQJCQk9IDAsCiAJQVRIOUtfSFdfQ0FQX01DSQkJCT0gMCwKLQlBVEg5S19IV19XT1dfREVWSUNFX0NBUEFCTEUJCT0gMCwKIAlBVEg5S19IV19DQVBfQlRfQU5UX0RJVgkJCT0gMCwKICNlbmRpZgogCUFUSDlLX0hXX0NBUF9ERlMJCQk9IEJJVCgxOCksCkBAIC0yNzEsNiArMjcxLDEyIEBACiAgKiBvZiB0aG9zZSB0eXBlcy4KICAqLwogCitzdHJ1Y3QgYXRoOWtfaHdfd293IHsKKwl1MzIgd293X2V2ZW50X21hc2s7CisJdTMyIHdvd19ldmVudF9tYXNrMjsKKwl1OCBtYXhfcGF0dGVybnM7Cit9OworCiBzdHJ1Y3QgYXRoOWtfaHdfY2FwYWJpbGl0aWVzIHsKIAl1MzIgaHdfY2FwczsgLyogQVRIOUtfSFdfQ0FQXyogZnJvbSBhdGg5a19od19jYXBzICovCiAJdTE2IHJ0c19hZ2dyX2xpbWl0OwpAQCAtOTI5LDcgKzkzNSw3IEBACiAJdTMyIGVudF9tb2RlOwogCiAjaWZkZWYgQ09ORklHX0FUSDlLX1dPVwotCXUzMiB3b3dfZXZlbnRfbWFzazsKKwlzdHJ1Y3QgYXRoOWtfaHdfd293IHdvdzsKICNlbmRpZgogCWJvb2wgaXNfY2xrXzI1bWh6OwogCWludCAoKmdldF9tYWNfcmV2aXNpb24pKHZvaWQpOwpAQCAtMTA4Niw2ICsxMDkyLDggQEAKIHZvaWQgYXI5MDAzX2h3X3NldF9jaGFpbl9tYXNrcyhzdHJ1Y3QgYXRoX2h3ICphaCwgdTggcngsIHU4IHR4KTsKIHZvaWQgYXI5MDAzX2h3X2luaXRfcmF0ZV90eHBvd2VyKHN0cnVjdCBhdGhfaHcgKmFoLCB1OCAqcmF0ZV9hcnJheSwKIAkJCQkgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4pOwordm9pZCBhcjUwMDhfaHdfaW5pdF9yYXRlX3R4cG93ZXIoc3RydWN0IGF0aF9odyAqYWgsIGludDE2X3QgKnJhdGVfYXJyYXksCisJCQkJIHN0cnVjdCBhdGg5a19jaGFubmVsICpjaGFuLCBpbnQgaHQ0MF9kZWx0YSk7CiAKIC8qIEhhcmR3YXJlIGZhbWlseSBvcCBhdHRhY2ggaGVscGVycyAqLwogaW50IGFyNTAwOF9od19hdHRhY2hfcGh5X29wcyhzdHJ1Y3QgYXRoX2h3ICphaCk7CkBAIC0xMTQ1LDIzICsxMTUzLDE5IEBACiAKIAogI2lmZGVmIENPTkZJR19BVEg5S19XT1cKLWNvbnN0IGNoYXIgKmF0aDlrX2h3X3dvd19ldmVudF90b19zdHJpbmcodTMyIHdvd19ldmVudCk7Ci12b2lkIGF0aDlrX2h3X3dvd19hcHBseV9wYXR0ZXJuKHN0cnVjdCBhdGhfaHcgKmFoLCB1OCAqdXNlcl9wYXR0ZXJuLAotCQkJCXU4ICp1c2VyX21hc2ssIGludCBwYXR0ZXJuX2NvdW50LAotCQkJCWludCBwYXR0ZXJuX2xlbik7CitpbnQgYXRoOWtfaHdfd293X2FwcGx5X3BhdHRlcm4oc3RydWN0IGF0aF9odyAqYWgsIHU4ICp1c2VyX3BhdHRlcm4sCisJCQkgICAgICAgdTggKnVzZXJfbWFzaywgaW50IHBhdHRlcm5fY291bnQsCisJCQkgICAgICAgaW50IHBhdHRlcm5fbGVuKTsKIHUzMiBhdGg5a19od193b3dfd2FrZXVwKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfaHdfd293X2VuYWJsZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHBhdHRlcm5fZW5hYmxlKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmF0aDlrX2h3X3dvd19ldmVudF90b19zdHJpbmcodTMyIHdvd19ldmVudCkKK3N0YXRpYyBpbmxpbmUgaW50IGF0aDlrX2h3X3dvd19hcHBseV9wYXR0ZXJuKHN0cnVjdCBhdGhfaHcgKmFoLAorCQkJCQkgICAgIHU4ICp1c2VyX3BhdHRlcm4sCisJCQkJCSAgICAgdTggKnVzZXJfbWFzaywKKwkJCQkJICAgICBpbnQgcGF0dGVybl9jb3VudCwKKwkJCQkJICAgICBpbnQgcGF0dGVybl9sZW4pCiB7Ci0JcmV0dXJuIE5VTEw7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYXRoOWtfaHdfd293X2FwcGx5X3BhdHRlcm4oc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJCSAgICAgIHU4ICp1c2VyX3BhdHRlcm4sCi0JCQkJCSAgICAgIHU4ICp1c2VyX21hc2ssCi0JCQkJCSAgICAgIGludCBwYXR0ZXJuX2NvdW50LAotCQkJCQkgICAgICBpbnQgcGF0dGVybl9sZW4pCi17CisJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW5saW5lIHUzMiBhdGg5a19od193b3dfd2FrZXVwKHN0cnVjdCBhdGhfaHcgKmFoKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMKaW5kZXggZDFjMzkzNC4uNmM2ZTg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jCkBAIC00NSw4ICs0NSw4IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBhdGg5a19tb2RwYXJhbV9ub2h3Y3J5cHQsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbiIpOwogCi1pbnQgbGVkX2JsaW5rOwotbW9kdWxlX3BhcmFtX25hbWVkKGJsaW5rLCBsZWRfYmxpbmssIGludCwgMDQ0NCk7CitpbnQgYXRoOWtfbGVkX2JsaW5rOworbW9kdWxlX3BhcmFtX25hbWVkKGJsaW5rLCBhdGg5a19sZWRfYmxpbmssIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGJsaW5rLCAiRW5hYmxlIExFRCBibGluayBvbiBhY3Rpdml0eSIpOwogCiBzdGF0aWMgaW50IGF0aDlrX2J0Y29leF9lbmFibGU7CkBAIC05OTYsNiArOTk2LDcgQEAKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAogCWF0aDlrX2RlaW5pdF9kZWJ1ZyhzYyk7CisJYXRoOWtfZGVpbml0X3dvdyhodyk7CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOwogCWF0aF9yeF9jbGVhbnVwKHNjKTsKIAlhdGg5a19kZWluaXRfc29mdGMoc2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2xpbmsuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9saW5rLmMKaW5kZXggYjgyOTI2My4uOTA2MzFkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2xpbmsuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbGluay5jCkBAIC01MTYsMTQgKzUxNiwxNCBAQAogCQlhdGhfaHdfY3ljbGVfY291bnRlcnNfdXBkYXRlKGNvbW1vbik7CiAKIAlpZiAoY2MtPmN5Y2xlcyA+IDApIHsKLQkJc3VydmV5LT5maWxsZWQgfD0gU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FIHwKLQkJCVNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRV9CVVNZIHwKLQkJCVNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRV9SWCB8Ci0JCQlTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfVFg7Ci0JCXN1cnZleS0+Y2hhbm5lbF90aW1lICs9IGNjLT5jeWNsZXMgLyBkaXY7Ci0JCXN1cnZleS0+Y2hhbm5lbF90aW1lX2J1c3kgKz0gY2MtPnJ4X2J1c3kgLyBkaXY7Ci0JCXN1cnZleS0+Y2hhbm5lbF90aW1lX3J4ICs9IGNjLT5yeF9mcmFtZSAvIGRpdjsKLQkJc3VydmV5LT5jaGFubmVsX3RpbWVfdHggKz0gY2MtPnR4X2ZyYW1lIC8gZGl2OworCQlzdXJ2ZXktPmZpbGxlZCB8PSBTVVJWRVlfSU5GT19USU1FIHwKKwkJCVNVUlZFWV9JTkZPX1RJTUVfQlVTWSB8CisJCQlTVVJWRVlfSU5GT19USU1FX1JYIHwKKwkJCVNVUlZFWV9JTkZPX1RJTUVfVFg7CisJCXN1cnZleS0+dGltZSArPSBjYy0+Y3ljbGVzIC8gZGl2OworCQlzdXJ2ZXktPnRpbWVfYnVzeSArPSBjYy0+cnhfYnVzeSAvIGRpdjsKKwkJc3VydmV5LT50aW1lX3J4ICs9IGNjLT5yeF9mcmFtZSAvIGRpdjsKKwkJc3VydmV5LT50aW1lX3R4ICs9IGNjLT50eF9mcmFtZSAvIGRpdjsKIAl9CiAKIAlpZiAoY2MtPmN5Y2xlcyA8IGRpdikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYwppbmRleCAzZTU4YmZhLi5iYmE4NWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCkBAIC04MjAsNyArODIwLDggQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChBUl9TUkVWXzkzNDAoYWgpIHx8IEFSX1NSRVZfOTU1MChhaCkgfHwgQVJfU1JFVl85NTMxKGFoKSkKKwlpZiAoQVJfU1JFVl85MzQwKGFoKSB8fCBBUl9TUkVWXzk1NTAoYWgpIHx8IEFSX1NSRVZfOTUzMShhaCkgfHwKKwkgICAgQVJfU1JFVl85NTYxKGFoKSkKIAkJc3luY19kZWZhdWx0ICY9IH5BUl9JTlRSX1NZTkNfSE9TVDFfRkFUQUw7CiAKIAlhc3luY19tYXNrID0gQVJfSU5UUl9NQUNfSVJROwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKaW5kZXggOWE3MjY0MC4uOWVkZTk5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCkBAIC0yODUsNiArMjg1LDcgQEAKIAogCV9fYXRoX2NhbmNlbF93b3JrKHNjKTsKIAorCWRpc2FibGVfaXJxKHNjLT5pcnEpOwogCXRhc2tsZXRfZGlzYWJsZSgmc2MtPmludHJfdHEpOwogCXRhc2tsZXRfZGlzYWJsZSgmc2MtPmJjb25fdGFza2xldCk7CiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcGN1X2xvY2spOwpAQCAtMzMxLDYgKzMzMiw3IEBACiAJCXIgPSAtRUlPOwogCiBvdXQ6CisJZW5hYmxlX2lycShzYy0+aXJxKTsKIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKIAl0YXNrbGV0X2VuYWJsZSgmc2MtPmJjb25fdGFza2xldCk7CiAJdGFza2xldF9lbmFibGUoJnNjLT5pbnRyX3RxKTsKQEAgLTUxMiw5ICs1MTQsNiBAQAogCWlmICghYWggfHwgdGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsICZjb21tb24tPm9wX2ZsYWdzKSkKIAkJcmV0dXJuIElSUV9OT05FOwogCi0JaWYgKCFBUl9TUkVWXzkxMDAoYWgpICYmIHRlc3RfYml0KEFUSF9PUF9IV19SRVNFVCwgJmNvbW1vbi0+b3BfZmxhZ3MpKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0KIAkvKiBzaGFyZWQgaXJxLCBub3QgZm9yIHVzICovCiAJaWYgKCFhdGg5a19od19pbnRycGVuZChhaCkpCiAJCXJldHVybiBJUlFfTk9ORTsKQEAgLTUyOSw3ICs1MjgsNyBAQAogCWF0aDlrX2RlYnVnX3N5bmNfY2F1c2Uoc2MsIHN5bmNfY2F1c2UpOwogCXN0YXR1cyAmPSBhaC0+aW1hc2s7CS8qIGRpc2NhcmQgdW5hc2tlZC1mb3IgYml0cyAqLwogCi0JaWYgKEFSX1NSRVZfOTEwMChhaCkgJiYgdGVzdF9iaXQoQVRIX09QX0hXX1JFU0VULCAmY29tbW9uLT5vcF9mbGFncykpCisJaWYgKHRlc3RfYml0KEFUSF9PUF9IV19SRVNFVCwgJmNvbW1vbi0+b3BfZmxhZ3MpKQogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKIAkvKgpAQCAtNTU2LDE1ICs1NTUsNiBAQAogCSAgICAoc3RhdHVzICYgQVRIOUtfSU5UX0JCX1dBVENIRE9HKSkKIAkJZ290byBjaGlwX3Jlc2V0OwogCi0jaWZkZWYgQ09ORklHX0FUSDlLX1dPVwotCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfQk1JU1MpIHsKLQkJaWYgKGF0b21pY19yZWFkKCZzYy0+d293X3NsZWVwX3Byb2NfaW50cikgPT0gMCkgewotCQkJYXRvbWljX2luYygmc2MtPndvd19nb3RfYm1pc3NfaW50cik7Ci0JCQlhdG9taWNfZGVjKCZzYy0+d293X3NsZWVwX3Byb2NfaW50cik7Ci0JCX0KLQl9Ci0jZW5kaWYKLQogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfU1dCQSkKIAkJdGFza2xldF9zY2hlZHVsZSgmc2MtPmJjb25fdGFza2xldCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYwppbmRleCBmMDA5YjViLi5lNmZlZjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jCkBAIC00MjcsNiArNDI3LDExIEBACiAJeyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0FUSEVST1MsCiAJCQkgMHgwMDM2LAogCQkJIDB4MTFBRCwgLyogTElURU9OICovCisJCQkgMHgxODQyKSwKKwkgIC5kcml2ZXJfZGF0YSA9IEFUSDlLX1BDSV9BUjk1NjVfMUFOVCB9LAorCXsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9BVEhFUk9TLAorCQkJIDB4MDAzNiwKKwkJCSAweDExQUQsIC8qIExJVEVPTiAqLwogCQkJIDB4NjY3MSksCiAJICAuZHJpdmVyX2RhdGEgPSBBVEg5S19QQ0lfQVI5NTY1XzFBTlQgfSwKIAl7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQVRIRVJPUywKQEAgLTQ0Niw5ICs0NTEsMTkgQEAKIAkgIC5kcml2ZXJfZGF0YSA9IEFUSDlLX1BDSV9BUjk1NjVfMUFOVCB9LAogCXsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9BVEhFUk9TLAogCQkJIDB4MDAzNiwKKwkJCSAweDFCOUEsIC8qIFhBVkkgKi8KKwkJCSAweDI4QTMpLAorCSAgLmRyaXZlcl9kYXRhID0gQVRIOUtfUENJX0FSOTU2NV8xQU5UIH0sCisJeyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0FUSEVST1MsCisJCQkgMHgwMDM2LAogCQkJIFBDSV9WRU5ET1JfSURfQVpXQVZFLAogCQkJIDB4MjE4QSksCiAJICAuZHJpdmVyX2RhdGEgPSBBVEg5S19QQ0lfQVI5NTY1XzFBTlQgfSwKKwl7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQVRIRVJPUywKKwkJCSAweDAwMzYsCisJCQkgUENJX1ZFTkRPUl9JRF9BWldBVkUsCisJCQkgMHgyRjhBKSwKKwkgIC5kcml2ZXJfZGF0YSA9IEFUSDlLX1BDSV9BUjk1NjVfMUFOVCB9LAogCiAJLyogV0IzMzUgMS1BTlQgLyBBbnRlbm5hIERpdmVyc2l0eSAqLwogCXsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9BVEhFUk9TLApAQCAtNTA4LDYgKzUyMywxMSBAQAogCSAgLmRyaXZlcl9kYXRhID0gQVRIOUtfUENJX0FSOTU2NV8xQU5UIHwgQVRIOUtfUENJX0JUX0FOVF9ESVYgfSwKIAl7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQVRIRVJPUywKIAkJCSAweDAwMzYsCisJCQkgUENJX1ZFTkRPUl9JRF9BWldBVkUsCisJCQkgMHgyMTNDKSwKKwkgIC5kcml2ZXJfZGF0YSA9IEFUSDlLX1BDSV9BUjk1NjVfMUFOVCB8IEFUSDlLX1BDSV9CVF9BTlRfRElWIH0sCisJeyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0FUSEVST1MsCisJCQkgMHgwMDM2LAogCQkJIFBDSV9WRU5ET1JfSURfSFAsCiAJCQkgMHgxOEUzKSwKIAkgIC5kcml2ZXJfZGF0YSA9IEFUSDlLX1BDSV9BUjk1NjVfMUFOVCB8IEFUSDlLX1BDSV9CVF9BTlRfRElWIH0sCkBAIC01NTUsNiArNTc1LDE2IEBACiAJICAuZHJpdmVyX2RhdGEgPSBBVEg5S19QQ0lfQVI5NTY1XzJBTlQgfCBBVEg5S19QQ0lfQlRfQU5UX0RJViB9LAogCXsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9BVEhFUk9TLAogCQkJIDB4MDAzNiwKKwkJCSBQQ0lfVkVORE9SX0lEX1NBTVNVTkcsCisJCQkgMHg0MTI5KSwKKwkgIC5kcml2ZXJfZGF0YSA9IEFUSDlLX1BDSV9BUjk1NjVfMkFOVCB8IEFUSDlLX1BDSV9CVF9BTlRfRElWIH0sCisJeyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0FUSEVST1MsCisJCQkgMHgwMDM2LAorCQkJIFBDSV9WRU5ET1JfSURfU0FNU1VORywKKwkJCSAweDQxMkEpLAorCSAgLmRyaXZlcl9kYXRhID0gQVRIOUtfUENJX0FSOTU2NV8yQU5UIHwgQVRIOUtfUENJX0JUX0FOVF9ESVYgfSwKKwl7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQVRIRVJPUywKKwkJCSAweDAwMzYsCiAJCQkgUENJX1ZFTkRPUl9JRF9BVEhFUk9TLAogCQkJIDB4MzAyNyksCiAJICAuZHJpdmVyX2RhdGEgPSBBVEg5S19QQ0lfQVI5NTY1XzJBTlQgfCBBVEg5S19QQ0lfQlRfQU5UX0RJViB9LApAQCAtNTg2LDEwICs2MTYsMjUgQEAKIAl7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQVRIRVJPUywKIAkJCSAweDAwMzYsCiAJCQkgMHgxMUFELCAvKiBMSVRFT04gKi8KKwkJCSAweDE4MzIpLAorCSAgLmRyaXZlcl9kYXRhID0gQVRIOUtfUENJX0FSOTU2NV8yQU5UIHwgQVRIOUtfUENJX0JUX0FOVF9ESVYgfSwKKwl7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQVRIRVJPUywKKwkJCSAweDAwMzYsCisJCQkgMHgxMUFELCAvKiBMSVRFT04gKi8KIAkJCSAweDA2OTIpLAogCSAgLmRyaXZlcl9kYXRhID0gQVRIOUtfUENJX0FSOTU2NV8yQU5UIHwgQVRIOUtfUENJX0JUX0FOVF9ESVYgfSwKIAl7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQVRIRVJPUywKIAkJCSAweDAwMzYsCisJCQkgMHgxMUFELCAvKiBMSVRFT04gKi8KKwkJCSAweDA4MDMpLAorCSAgLmRyaXZlcl9kYXRhID0gQVRIOUtfUENJX0FSOTU2NV8yQU5UIHwgQVRIOUtfUENJX0JUX0FOVF9ESVYgfSwKKwl7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQVRIRVJPUywKKwkJCSAweDAwMzYsCisJCQkgMHgxMUFELCAvKiBMSVRFT04gKi8KKwkJCSAweDA4MTMpLAorCSAgLmRyaXZlcl9kYXRhID0gQVRIOUtfUENJX0FSOTU2NV8yQU5UIHwgQVRIOUtfUENJX0JUX0FOVF9ESVYgfSwKKwl7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQVRIRVJPUywKKwkJCSAweDAwMzYsCiAJCQkgUENJX1ZFTkRPUl9JRF9BWldBVkUsCiAJCQkgMHgyMTMwKSwKIAkgIC5kcml2ZXJfZGF0YSA9IEFUSDlLX1BDSV9BUjk1NjVfMkFOVCB8IEFUSDlLX1BDSV9CVF9BTlRfRElWIH0sCkBAIC02MDUsNiArNjUwLDIxIEBACiAJICAuZHJpdmVyX2RhdGEgPSBBVEg5S19QQ0lfQVI5NTY1XzJBTlQgfCBBVEg5S19QQ0lfQlRfQU5UX0RJViB9LAogCXsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9BVEhFUk9TLAogCQkJIDB4MDAzNiwKKwkJCSBQQ0lfVkVORE9SX0lEX0FaV0FWRSwKKwkJCSAweDIxOEIpLAorCSAgLmRyaXZlcl9kYXRhID0gQVRIOUtfUENJX0FSOTU2NV8yQU5UIHwgQVRIOUtfUENJX0JUX0FOVF9ESVYgfSwKKwl7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQVRIRVJPUywKKwkJCSAweDAwMzYsCisJCQkgUENJX1ZFTkRPUl9JRF9BWldBVkUsCisJCQkgMHgyMThDKSwKKwkgIC5kcml2ZXJfZGF0YSA9IEFUSDlLX1BDSV9BUjk1NjVfMkFOVCB8IEFUSDlLX1BDSV9CVF9BTlRfRElWIH0sCisJeyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0FUSEVST1MsCisJCQkgMHgwMDM2LAorCQkJIFBDSV9WRU5ET1JfSURfQVpXQVZFLAorCQkJIDB4MkY4MiksCisJICAuZHJpdmVyX2RhdGEgPSBBVEg5S19QQ0lfQVI5NTY1XzJBTlQgfCBBVEg5S19QQ0lfQlRfQU5UX0RJViB9LAorCXsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9BVEhFUk9TLAorCQkJIDB4MDAzNiwKIAkJCSAweDE0NEYsIC8qIEFTS0VZICovCiAJCQkgMHg3MjAyKSwKIAkgIC5kcml2ZXJfZGF0YSA9IEFUSDlLX1BDSV9BUjk1NjVfMkFOVCB8IEFUSDlLX1BDSV9CVF9BTlRfRElWIH0sCkBAIC02MTYsMTAgKzY3NiwyMCBAQAogCXsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9BVEhFUk9TLAogCQkJIDB4MDAzNiwKIAkJCSAweDFCOUEsIC8qIFhBVkkgKi8KKwkJCSAweDI4MTMpLAorCSAgLmRyaXZlcl9kYXRhID0gQVRIOUtfUENJX0FSOTU2NV8yQU5UIHwgQVRIOUtfUENJX0JUX0FOVF9ESVYgfSwKKwl7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQVRIRVJPUywKKwkJCSAweDAwMzYsCisJCQkgMHgxQjlBLCAvKiBYQVZJICovCiAJCQkgMHgyOEEyKSwKIAkgIC5kcml2ZXJfZGF0YSA9IEFUSDlLX1BDSV9BUjk1NjVfMkFOVCB8IEFUSDlLX1BDSV9CVF9BTlRfRElWIH0sCiAJeyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0FUSEVST1MsCiAJCQkgMHgwMDM2LAorCQkJIDB4MUI5QSwgLyogWEFWSSAqLworCQkJIDB4MjhBNCksCisJICAuZHJpdmVyX2RhdGEgPSBBVEg5S19QQ0lfQVI5NTY1XzJBTlQgfCBBVEg5S19QQ0lfQlRfQU5UX0RJViB9LAorCXsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9BVEhFUk9TLAorCQkJIDB4MDAzNiwKIAkJCSAweDE4NUYsIC8qIFdOQyAqLwogCQkJIDB4MzAyNyksCiAJICAuZHJpdmVyX2RhdGEgPSBBVEg5S19QQ0lfQVI5NTY1XzJBTlQgfCBBVEg5S19QQ0lfQlRfQU5UX0RJViB9LApAQCAtNjM2LDEwICs3MDYsMjUgQEAKIAl7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQVRIRVJPUywKIAkJCSAweDAwMzYsCiAJCQkgUENJX1ZFTkRPUl9JRF9GT1hDT05OLAorCQkJIDB4RTA4RiksCisJICAuZHJpdmVyX2RhdGEgPSBBVEg5S19QQ0lfQVI5NTY1XzJBTlQgfCBBVEg5S19QQ0lfQlRfQU5UX0RJViB9LAorCXsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9BVEhFUk9TLAorCQkJIDB4MDAzNiwKKwkJCSBQQ0lfVkVORE9SX0lEX0ZPWENPTk4sCiAJCQkgMHhFMDgxKSwKIAkgIC5kcml2ZXJfZGF0YSA9IEFUSDlLX1BDSV9BUjk1NjVfMkFOVCB8IEFUSDlLX1BDSV9CVF9BTlRfRElWIH0sCiAJeyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0FUSEVST1MsCiAJCQkgMHgwMDM2LAorCQkJIFBDSV9WRU5ET1JfSURfRk9YQ09OTiwKKwkJCSAweEUwOTEpLAorCSAgLmRyaXZlcl9kYXRhID0gQVRIOUtfUENJX0FSOTU2NV8yQU5UIHwgQVRIOUtfUENJX0JUX0FOVF9ESVYgfSwKKwl7IFBDSV9ERVZJQ0VfU1VCKFBDSV9WRU5ET1JfSURfQVRIRVJPUywKKwkJCSAweDAwMzYsCisJCQkgUENJX1ZFTkRPUl9JRF9GT1hDT05OLAorCQkJIDB4RTA5OSksCisJICAuZHJpdmVyX2RhdGEgPSBBVEg5S19QQ0lfQVI5NTY1XzJBTlQgfCBBVEg5S19QQ0lfQlRfQU5UX0RJViB9LAorCXsgUENJX0RFVklDRV9TVUIoUENJX1ZFTkRPUl9JRF9BVEhFUk9TLAorCQkJIDB4MDAzNiwKIAkJCSBQQ0lfVkVORE9SX0lEX0xFTk9WTywKIAkJCSAweDMwMjYpLAogCSAgLmRyaXZlcl9kYXRhID0gQVRIOUtfUENJX0FSOTU2NV8yQU5UIHwgQVRIOUtfUENJX0JUX0FOVF9ESVYgfSwKQEAgLTkxMyw5ICs5OTgsMTIgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2aWNlKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKIAotCWlmIChzYy0+d293X2VuYWJsZWQpCisJaWYgKHRlc3RfYml0KEFUSF9PUF9XT1dfRU5BQkxFRCwgJmNvbW1vbi0+b3BfZmxhZ3MpKSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJXT1cgaXMgZW5hYmxlZCwgYnlwYXNzaW5nIFBDSSBzdXNwZW5kXG4iKTsKIAkJcmV0dXJuIDA7CisJfQogCiAJLyogVGhlIGRldmljZSBoYXMgdG8gYmUgbW92ZWQgdG8gRlVMTFNMRUVQIGZvcmNpYmx5LgogCSAqIE90aGVyd2lzZSB0aGUgY2hpcCBuZXZlciBtb3ZlZCB0byBmdWxsIHNsZWVwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMKaW5kZXggNzM5NWFmYi4uNmZiNDBlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jCkBAIC00MjUsNyArNDI1LDggQEAKIAkJcmZpbHQgfD0gQVRIOUtfUlhfRklMVEVSX01DQVNUX0JDQVNUX0FMTDsKIAl9CiAKLQlpZiAoQVJfU1JFVl85NTUwKHNjLT5zY19haCkgfHwgQVJfU1JFVl85NTMxKHNjLT5zY19haCkpCisJaWYgKEFSX1NSRVZfOTU1MChzYy0+c2NfYWgpIHx8IEFSX1NSRVZfOTUzMShzYy0+c2NfYWgpIHx8CisJICAgIEFSX1NSRVZfOTU2MShzYy0+c2NfYWgpKQogCQlyZmlsdCB8PSBBVEg5S19SWF9GSUxURVJfNEFERFJFU1M7CiAKIAlpZiAoYXRoOWtfaXNfY2hhbmN0eF9lbmFibGVkKCkgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWcuaAppbmRleCBmYjExYTkxLi45NTg3ZWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlZy5oCkBAIC04MTQsNiArODE0LDcgQEAKICNkZWZpbmUgQVJfU1JFVl9SRVZJU0lPTl85NTMxXzEwICAgICAgICAwCiAjZGVmaW5lIEFSX1NSRVZfUkVWSVNJT05fOTUzMV8xMSAgICAgICAgMQogI2RlZmluZSBBUl9TUkVWX1JFVklTSU9OXzk1MzFfMjAgICAgICAgIDIKKyNkZWZpbmUgQVJfU1JFVl9WRVJTSU9OXzk1NjEgICAgICAgICAgICAweDYwMAogCiAjZGVmaW5lIEFSX1NSRVZfNTQxNihfYWgpIFwKIAkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzU0MTZfUENJKSB8fCBcCkBAIC04OTksMTAgKzkwMCwxMyBAQAogCSgoKF9haCktPmh3X3ZlcnNpb24ubWFjVmVyc2lvbiA9PSBBUl9TUkVWX1ZFUlNJT05fOTQ4NSkpCiAjZGVmaW5lIEFSX1NSRVZfOTU2NShfYWgpIFwKIAkoKChfYWgpLT5od192ZXJzaW9uLm1hY1ZlcnNpb24gPT0gQVJfU1JFVl9WRVJTSU9OXzk1NjUpKQorI2RlZmluZSBBUl9TUkVWXzkwMDNfUENPRU0oX2FoKSBcCisJKEFSX1NSRVZfOTQ2MihfYWgpIHx8IEFSX1NSRVZfOTQ4NShfYWgpIHx8IEFSX1NSRVZfOTU2NShfYWgpKQogI2Vsc2UKICNkZWZpbmUgQVJfU1JFVl85NDYyKF9haCkgMAogI2RlZmluZSBBUl9TUkVWXzk0ODUoX2FoKSAwCiAjZGVmaW5lIEFSX1NSRVZfOTU2NShfYWgpIDAKKyNkZWZpbmUgQVJfU1JFVl85MDAzX1BDT0VNKF9haCkgMAogI2VuZGlmCiAKICNkZWZpbmUgQVJfU1JFVl85NDg1XzExX09SX0xBVEVSKF9haCkgXApAQCAtOTc0LDYgKzk3OCw5IEBACiAJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85NTMxKSAmJiBcCiAJICgoX2FoKS0+aHdfdmVyc2lvbi5tYWNSZXYgPT0gQVJfU1JFVl9SRVZJU0lPTl85NTMxXzIwKSkKIAorI2RlZmluZSBBUl9TUkVWXzk1NjEoX2FoKSBcCisJKCgoX2FoKS0+aHdfdmVyc2lvbi5tYWNWZXJzaW9uID09IEFSX1NSRVZfVkVSU0lPTl85NTYxKSkKKwogLyogTk9URTogV2hlbiBhZGRpbmcgY2hpcHMgbmV3ZXIgdGhhbiBQZWFjb2NrLCBhZGQgY2hpcCBjaGVjayBoZXJlICovCiAjZGVmaW5lIEFSX1NSRVZfOTU4MF8xMF9PUl9MQVRFUihfYWgpIFwKIAkoQVJfU1JFVl85NTgwKF9haCkpCkBAIC0xODc2LDYgKzE4ODMsNyBAQAogI2RlZmluZSBBUl9GSVJTVF9ORFBfVElNRVIgICAgICAgICAgICAgICAgICA3CiAjZGVmaW5lIEFSX05EUDJfUEVSSU9EICAgICAgICAgICAgICAgICAgICAgIDB4ODFhMAogI2RlZmluZSBBUl9ORFAyX1RJTUVSX01PREUgICAgICAgICAgICAgICAgICAweDgxYzAKKyNkZWZpbmUgQVJfR0VOX1RJTUVSUzJfTU9ERV9FTkFCTEVfTUFTSyAgICAgMHgwMDAwMDBGRgogCiAjZGVmaW5lIEFSX0dFTl9USU1FUlMoX2kpICAgICAgICAgICAgICAgICAgICgweDgyMDAgKyAoKF9pKSA8PCAyKSkKICNkZWZpbmUgQVJfTkVYVF9UQlRUX1RJTUVSICAgICAgICAgICAgICAgICAgQVJfR0VOX1RJTUVSUygwKQpAQCAtMTk3MSw2ICsxOTc5LDcgQEAKIAogI2RlZmluZSBBUl9ESVJFQ1RfQ09OTkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODNhMAogI2RlZmluZSBBUl9EQ19BUF9TVEFfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgQVJfRENfVFNGMl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCiAKICNkZWZpbmUgQVJfQUVTX01VVEVfTUFTSzAgICAgICAgMHg4MDVjCiAjZGVmaW5lIEFSX0FFU19NVVRFX01BU0swX0ZDICAgIDB4MDAwMEZGRkYKQEAgLTIwMDMsMTI2ICsyMDEyLDYgQEAKIAogI2RlZmluZSBBUl9XT1dfQkVBQ09OX1RJTU9fTUFYCQkweGZmZmZmZmZmCiAKLS8qCi0gKiBNQUMgV29XIFJlZ2lzdGVycwotICovCi0KLSNkZWZpbmUgQVJfV09XX1BBVFRFUk4JCQkweDgyNUMKLSNkZWZpbmUgQVJfV09XX0NPVU5UCQkJMHg4MjYwCi0jZGVmaW5lIEFSX1dPV19CQ05fRU4JCQkweDgyNzAKLSNkZWZpbmUgQVJfV09XX0JDTl9USU1PCQkJMHg4Mjc0Ci0jZGVmaW5lIEFSX1dPV19LRUVQX0FMSVZFX1RJTU8JCTB4ODI3OAotI2RlZmluZSBBUl9XT1dfS0VFUF9BTElWRQkJMHg4MjdjCi0jZGVmaW5lIEFSX1dPV19VU19TQ0FMQVIJCTB4ODI4NAotI2RlZmluZSBBUl9XT1dfS0VFUF9BTElWRV9ERUxBWQkJMHg4Mjg4Ci0jZGVmaW5lIEFSX1dPV19QQVRURVJOX01BVENICQkweDgyOGMKLSNkZWZpbmUgQVJfV09XX1BBVFRFUk5fT0ZGMQkJMHg4MjkwCS8qIHBhdHRlcm4gYnl0ZXMgMCAtPiAzICovCi0jZGVmaW5lIEFSX1dPV19QQVRURVJOX09GRjIJCTB4ODI5NAkvKiBwYXR0ZXJuIGJ5dGVzIDQgLT4gNyAqLwotCi0vKiBmb3IgQVI5Mjg1IG9yIGxhdGVyIHZlcnNpb24gb2YgY2hpcHMgKi8KLSNkZWZpbmUgQVJfV09XX0VYQUNUCQkJMHg4MjljCi0jZGVmaW5lIEFSX1dPV19MRU5HVEgxCQkJMHg4MzYwCi0jZGVmaW5lIEFSX1dPV19MRU5HVEgyCQkJMFg4MzY0Ci0vKiByZWdpc3RlciB0byBlbmFibGUgbWF0Y2ggZm9yIGxlc3MgdGhhbiAyNTYgYnl0ZXMgcGFja2V0cyAqLwotI2RlZmluZSBBUl9XT1dfUEFUVEVSTl9NQVRDSF9MVF8yNTZCCTB4ODM2OAotCi0jZGVmaW5lIEFSX1NXX1dPV19DT05UUk9MCQkweDIwMDE4Ci0jZGVmaW5lIEFSX1NXX1dPV19FTkFCTEUJCTB4MQotI2RlZmluZSBBUl9TV0lUQ0hfVE9fUkVGQ0xLCQkweDIKLSNkZWZpbmUgQVJfUkVTRVRfQ09OVFJPTAkJMHg0Ci0jZGVmaW5lIEFSX1JFU0VUX1ZBTFVFX01BU0sJCTB4OAotI2RlZmluZSBBUl9IV19XT1dfRElTQUJMRQkJMHgxMAotI2RlZmluZSBBUl9DTFJfTUFDX0lOVEVSUlVQVAkJMHgyMAotI2RlZmluZSBBUl9DTFJfS0FfSU5URVJSVVBUCQkweDQwCi0KLS8qIEFSX1dPV19QQVRURVJOIHJlZ2lzdGVyIHZhbHVlcyAqLwotI2RlZmluZSBBUl9XT1dfQkFDS19PRkZfU0hJRlQoeCkJKCh4ICYgMHhmKSA8PCAyOCkgLyogaW4gdXNlY3MgKi8KLSNkZWZpbmUgQVJfV09XX01BQ19JTlRSX0VOCQkweDAwMDQwMDAwCi0jZGVmaW5lIEFSX1dPV19NQUdJQ19FTgkJCTB4MDAwMTAwMDAKLSNkZWZpbmUgQVJfV09XX1BBVFRFUk5fRU4oeCkJCSh4ICYgMHhmZikKLSNkZWZpbmUgQVJfV09XX1BBVF9GT1VORF9TSElGVAk4Ci0jZGVmaW5lIEFSX1dPV19QQVRURVJOX0ZPVU5EKHgpCQkoeCAmICgweGZmIDw8IEFSX1dPV19QQVRfRk9VTkRfU0hJRlQpKQotI2RlZmluZSBBUl9XT1dfUEFUVEVSTl9GT1VORF9NQVNLCSgoMHhmZikgPDwgQVJfV09XX1BBVF9GT1VORF9TSElGVCkKLSNkZWZpbmUgQVJfV09XX01BR0lDX1BBVF9GT1VORAkJMHgwMDAyMDAwMAotI2RlZmluZSBBUl9XT1dfTUFDX0lOVFIJCQkweDAwMDgwMDAwCi0jZGVmaW5lIEFSX1dPV19LRUVQX0FMSVZFX0ZBSUwJCTB4MDAxMDAwMDAKLSNkZWZpbmUgQVJfV09XX0JFQUNPTl9GQUlMCQkweDAwMjAwMDAwCi0KLSNkZWZpbmUgQVJfV09XX1NUQVRVUyh4KQkJKHggJiAoQVJfV09XX1BBVFRFUk5fRk9VTkRfTUFTSyB8IFwKLQkJCQkJICAgICAgQVJfV09XX01BR0lDX1BBVF9GT1VORAl8IFwKLQkJCQkJICAgICAgQVJfV09XX0tFRVBfQUxJVkVfRkFJTAl8IFwKLQkJCQkJICAgICAgQVJfV09XX0JFQUNPTl9GQUlMKSkKLSNkZWZpbmUgQVJfV09XX0NMRUFSX0VWRU5UUyh4KQkJKHggJiB+KEFSX1dPV19QQVRURVJOX0VOKDB4ZmYpIHwgXAotCQkJCQkgICAgICAgQVJfV09XX01BR0lDX0VOIHwgXAotCQkJCQkgICAgICAgQVJfV09XX01BQ19JTlRSX0VOIHwgXAotCQkJCQkgICAgICAgQVJfV09XX0JFQUNPTl9GQUlMIHwgXAotCQkJCQkgICAgICAgQVJfV09XX0tFRVBfQUxJVkVfRkFJTCkpCi0KLS8qIEFSX1dPV19DT1VOVCByZWdpc3RlciB2YWx1ZXMgKi8KLSNkZWZpbmUgQVJfV09XX0FJRlNfQ05UKHgpCQkoeCAmIDB4ZmYpCi0jZGVmaW5lIEFSX1dPV19TTE9UX0NOVCh4KQkJKCh4ICYgMHhmZikgPDwgOCkKLSNkZWZpbmUgQVJfV09XX0tFRVBfQUxJVkVfQ05UKHgpCSgoeCAmIDB4ZmYpIDw8IDE2KQotCi0vKiBBUl9XT1dfQkNOX0VOIHJlZ2lzdGVyICovCi0jZGVmaW5lIEFSX1dPV19CRUFDT05fRkFJTF9FTgkJMHgwMDAwMDAwMQotCi0vKiBBUl9XT1dfQkNOX1RJTU8gcmdpc3RlciAqLwotI2RlZmluZSBBUl9XT1dfQkVBQ09OX1RJTU8JCTB4NDAwMDAwMDAgLyogdmFsaWQgaWYgQkNOX0VOIGlzIHNldCAqLwotCi0vKiBBUl9XT1dfS0VFUF9BTElWRV9USU1PIHJlZ2lzdGVyICovCi0jZGVmaW5lIEFSX1dPV19LRUVQX0FMSVZFX1RJTU9fVkFMVUUKLSNkZWZpbmUgQVJfV09XX0tFRVBfQUxJVkVfTkVWRVIJCTB4ZmZmZmZmZmYKLQotLyogQVJfV09XX0tFRVBfQUxJVkUgcmVnaXN0ZXIgICovCi0jZGVmaW5lIEFSX1dPV19LRUVQX0FMSVZFX0FVVE9fRElTCTB4MDAwMDAwMDEKLSNkZWZpbmUgQVJfV09XX0tFRVBfQUxJVkVfRkFJTF9ESVMJMHgwMDAwMDAwMgotCi0vKiBBUl9XT1dfS0VFUF9BTElWRV9ERUxBWSByZWdpc3RlciAqLwotI2RlZmluZSBBUl9XT1dfS0VFUF9BTElWRV9ERUxBWV9WQUxVRQkweDAwMDAwM2U4IC8qIDEgbXNlYyAqLwotCi0KLS8qCi0gKiBrZWVwIGl0IGxvbmcgZm9yIGJlYWNvbiB3b3JrYXJvdW5kIC0gZW5zdXJlIG5vIGZhbHNlIGFsYXJtCi0gKi8KLSNkZWZpbmUgQVJfV09XX0JNSVNTVEhSRVNIT0xECQkweDIwCi0KLS8qIEFSX1dPV19QQVRURVJOX01BVENIIHJlZ2lzdGVyICovCi0jZGVmaW5lIEFSX1dPV19QQVRfRU5EX09GX1BLVCh4KQkoeCAmIDB4ZikKLSNkZWZpbmUgQVJfV09XX1BBVF9PRkZfTUFUQ0goeCkJCSgoeCAmIDB4ZikgPDwgOCkKLQotLyoKLSAqIGRlZmF1bHQgdmFsdWVzIGZvciBXb3cgQ29uZmlndXJhdGlvbiBmb3IgYmFja29mZiwgYWlmcywgc2xvdCwga2VlcC1hbGl2ZQotICogdG8gYmUgcHJvZ3JhbW1lZCBpbnRvIHZhcmlvdXMgcmVnaXN0ZXJzLgotICovCi0jZGVmaW5lIEFSX1dPV19QQVRfQkFDS09GRgkweDAwMDAwMDA0IC8qIEFSX1dPV19QQVRURVJOX1JFRyAqLwotI2RlZmluZSBBUl9XT1dfQ05UX0FJRlNfQ05UCTB4MDAwMDAwMjIgLyogQVJfV09XX0NPVU5UX1JFRyAqLwotI2RlZmluZSBBUl9XT1dfQ05UX1NMT1RfQ05UCTB4MDAwMDAwMDkgLyogQVJfV09XX0NPVU5UX1JFRyAqLwotLyoKLSAqIEtlZXBhbGl2ZSBjb3VudCBhcHBsaWNhYmxlIGZvciBBUjkyODAgMi4wIGFuZCBhYm92ZS4KLSAqLwotI2RlZmluZSBBUl9XT1dfQ05UX0tBX0NOVCAweDAwMDAwMDA4ICAgIC8qIEFSX1dPV19DT1VOVCByZWdpc3RlciAqLwotCi0vKiBXb1cgLSBUcmFuc21pdCBidWZmZXIgZm9yIGtlZXAgYWxpdmUgZnJhbWVzICovCi0jZGVmaW5lIEFSX1dPV19UUkFOU01JVF9CVUZGRVIJMHhlMDAwIC8qIEUwMDAgLSBFRkZDICovCi0KLSNkZWZpbmUgQVJfV09XX1RYQlVGKGkpCQkoQVJfV09XX1RSQU5TTUlUX0JVRkZFUiArICgoaSkgPDwgMikpCi0KLSNkZWZpbmUgQVJfV09XX0tBX0RFU0NfV09SRDIJMHhlMDAwCi0KLSNkZWZpbmUgQVJfV09XX0tBX0RBVEFfV09SRDAJMHhlMDMwCi0KLS8qIFdvVyBUcmFuc21pdCBCdWZmZXIgZm9yIHBhdHRlcm5zICovCi0jZGVmaW5lIEFSX1dPV19UQl9QQVRURVJOKGkpCSgweGUxMDAgKyAoaSA8PCA4KSkKLSNkZWZpbmUgQVJfV09XX1RCX01BU0soaSkJKDB4ZWMwMCArIChpIDw8IDUpKQotCi0vKiBDdXJyZW50bHkgUGF0dGVybiAwLTcgYXJlIHN1cHBvcnRlZCAtIHNvIGJpdCAwLTcgYXJlIHNldCAqLwotI2RlZmluZSBBUl9XT1dfUEFUVEVSTl9TVVBQT1JURUQJMHhmZgotI2RlZmluZSBBUl9XT1dfTEVOR1RIX01BWAkJMHhmZgotI2RlZmluZSBBUl9XT1dfTEVOMV9TSElGVChfaSkJKCgweDMgLSAoKF9pKSAmIDB4MykpIDw8IDB4MykKLSNkZWZpbmUgQVJfV09XX0xFTkdUSDFfTUFTSyhfaSkJKEFSX1dPV19MRU5HVEhfTUFYIDw8IEFSX1dPV19MRU4xX1NISUZUKF9pKSkKLSNkZWZpbmUgQVJfV09XX0xFTjJfU0hJRlQoX2kpCSgoMHg3IC0gKChfaSkgJiAweDcpKSA8PCAweDMpCi0jZGVmaW5lIEFSX1dPV19MRU5HVEgyX01BU0soX2kpCShBUl9XT1dfTEVOR1RIX01BWCA8PCBBUl9XT1dfTEVOMl9TSElGVChfaSkpCi0KICNkZWZpbmUgQVI5MjcxX0NPUkVfQ0xPQ0sJMTE3ICAgLyogY2xvY2sgdG8gMTE3TWh6ICovCiAjZGVmaW5lIEFSOTI3MV9UQVJHRVRfQkFVRF9SQVRFCTE5MjAwIC8qIDExNTIwMCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnX3dvdy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlZ193b3cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWJmY2E1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlZ193b3cuaApAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBRdWFsY29tbSBBdGhlcm9zIEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIFJFR19XT1dfSAorI2RlZmluZSBSRUdfV09XX0gKKworI2RlZmluZSBBUl9XT1dfUEFUVEVSTiAgICAgICAgICAgICAgICAgIDB4ODI1QworI2RlZmluZSBBUl9XT1dfQ09VTlQgICAgICAgICAgICAgICAgICAgIDB4ODI2MAorI2RlZmluZSBBUl9XT1dfQkNOX0VOICAgICAgICAgICAgICAgICAgIDB4ODI3MAorI2RlZmluZSBBUl9XT1dfQkNOX1RJTU8gICAgICAgICAgICAgICAgIDB4ODI3NAorI2RlZmluZSBBUl9XT1dfS0VFUF9BTElWRV9USU1PICAgICAgICAgIDB4ODI3OAorI2RlZmluZSBBUl9XT1dfS0VFUF9BTElWRSAgICAgICAgICAgICAgIDB4ODI3YworI2RlZmluZSBBUl9XT1dfS0VFUF9BTElWRV9ERUxBWSAgICAgICAgIDB4ODI4OAorI2RlZmluZSBBUl9XT1dfUEFUVEVSTl9NQVRDSCAgICAgICAgICAgIDB4ODI4YworCisvKgorICogQVJfV09XX0xFTkdUSDEKKyAqIGJpdCAzMToyNCBwYXR0ZXJuIDAgbGVuZ3RoCisgKiBiaXQgMjM6MTYgcGF0dGVybiAxIGxlbmd0aAorICogYml0IDE1OjggcGF0dGVybiAyIGxlbmd0aAorICogYml0IDc6MCBwYXR0ZXJuIDMgbGVuZ3RoCisgKgorICogQVJfV09XX0xFTkdUSDIKKyAqIGJpdCAzMToyNCBwYXR0ZXJuIDQgbGVuZ3RoCisgKiBiaXQgMjM6MTYgcGF0dGVybiA1IGxlbmd0aAorICogYml0IDE1OjggcGF0dGVybiA2IGxlbmd0aAorICogYml0IDc6MCBwYXR0ZXJuIDcgbGVuZ3RoCisgKgorICogQVJfV09XX0xFTkdUSDMKKyAqIGJpdCAzMToyNCBwYXR0ZXJuIDggbGVuZ3RoCisgKiBiaXQgMjM6MTYgcGF0dGVybiA5IGxlbmd0aAorICogYml0IDE1OjggcGF0dGVybiAxMCBsZW5ndGgKKyAqIGJpdCA3OjAgcGF0dGVybiAxMSBsZW5ndGgKKyAqCisgKiBBUl9XT1dfTEVOR1RINAorICogYml0IDMxOjI0IHBhdHRlcm4gMTIgbGVuZ3RoCisgKiBiaXQgMjM6MTYgcGF0dGVybiAxMyBsZW5ndGgKKyAqIGJpdCAxNTo4IHBhdHRlcm4gMTQgbGVuZ3RoCisgKiBiaXQgNzowIHBhdHRlcm4gMTUgbGVuZ3RoCisgKi8KKyNkZWZpbmUgQVJfV09XX0xFTkdUSDEgICAgICAgICAgICAgICAgICAweDgzNjAKKyNkZWZpbmUgQVJfV09XX0xFTkdUSDIgICAgICAgICAgICAgICAgICAwWDgzNjQKKyNkZWZpbmUgQVJfV09XX0xFTkdUSDMgICAgICAgICAgICAgICAgICAwWDgzODAKKyNkZWZpbmUgQVJfV09XX0xFTkdUSDQgICAgICAgICAgICAgICAgICAwWDgzODQKKworI2RlZmluZSBBUl9XT1dfUEFUVEVSTl9NQVRDSF9MVF8yNTZCICAgIDB4ODM2OAorI2RlZmluZSBBUl9NQUNfUENVX1dPVzQgICAgICAgICAgICAgICAgIDB4ODM3MAorCisjZGVmaW5lIEFSX1NXX1dPV19DT05UUk9MICAgICAgICAgICAgICAgMHgyMDAxOAorI2RlZmluZSBBUl9TV19XT1dfRU5BQkxFICAgICAgICAgICAgICAgIDB4MQorI2RlZmluZSBBUl9TV0lUQ0hfVE9fUkVGQ0xLICAgICAgICAgICAgIDB4MgorI2RlZmluZSBBUl9SRVNFVF9DT05UUk9MICAgICAgICAgICAgICAgIDB4NAorI2RlZmluZSBBUl9SRVNFVF9WQUxVRV9NQVNLICAgICAgICAgICAgIDB4OAorI2RlZmluZSBBUl9IV19XT1dfRElTQUJMRSAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQVJfQ0xSX01BQ19JTlRFUlJVUFQgICAgICAgICAgICAweDIwCisjZGVmaW5lIEFSX0NMUl9LQV9JTlRFUlJVUFQgICAgICAgICAgICAgMHg0MAorCisjZGVmaW5lIEFSX1dPV19CQUNLX09GRl9TSElGVCh4KSAgICAgICAgKCh4ICYgMHhmKSA8PCAyNykgLyogaW4gdXNlY3MgKi8KKyNkZWZpbmUgQVJfV09XX01BQ19JTlRSX0VOICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIEFSX1dPV19NQUdJQ19FTiAgICAgICAgICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBBUl9XT1dfUEFUVEVSTl9FTih4KSAgICAgICAgICAgICh4ICYgMHhmZikKKyNkZWZpbmUgQVJfV09XX1BBVF9GT1VORF9TSElGVCAgOAorI2RlZmluZSBBUl9XT1dfUEFUVEVSTl9GT1VORCh4KSAgICAgICAgICh4ICYgKDB4ZmYgPDwgQVJfV09XX1BBVF9GT1VORF9TSElGVCkpCisjZGVmaW5lIEFSX1dPV19QQVRURVJOX0ZPVU5EX01BU0sgICAgICAgKCgweGZmKSA8PCBBUl9XT1dfUEFUX0ZPVU5EX1NISUZUKQorI2RlZmluZSBBUl9XT1dfTUFHSUNfUEFUX0ZPVU5EICAgICAgICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgQVJfV09XX01BQ19JTlRSICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIEFSX1dPV19LRUVQX0FMSVZFX0ZBSUwgICAgICAgICAgMHgwMDEwMDAwMAorI2RlZmluZSBBUl9XT1dfQkVBQ09OX0ZBSUwgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKworI2RlZmluZSBBUl9XT1dfU1RBVFVTKHgpICAgICAgICAgICAgICAgICh4ICYgKEFSX1dPV19QQVRURVJOX0ZPVU5EX01BU0sgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJfV09XX01BR0lDX1BBVF9GT1VORCAgICB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUl9XT1dfS0VFUF9BTElWRV9GQUlMICAgIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSX1dPV19CRUFDT05fRkFJTCkpCisjZGVmaW5lIEFSX1dPV19DTEVBUl9FVkVOVFMoeCkgICAgICAgICAgKHggJiB+KEFSX1dPV19QQVRURVJOX0VOKDB4ZmYpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUl9XT1dfTUFHSUNfRU4gfAlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSX1dPV19NQUNfSU5UUl9FTiB8CVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJfV09XX0JFQUNPTl9GQUlMIHwJXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUl9XT1dfS0VFUF9BTElWRV9GQUlMKSkKKworI2RlZmluZSBBUl9XT1dfQUlGU19DTlQoeCkgICAgICAgICAgICAgICh4ICYgMHhmZikKKyNkZWZpbmUgQVJfV09XX1NMT1RfQ05UKHgpICAgICAgICAgICAgICAoKHggJiAweGZmKSA8PCA4KQorI2RlZmluZSBBUl9XT1dfS0VFUF9BTElWRV9DTlQoeCkgICAgICAgICgoeCAmIDB4ZmYpIDw8IDE2KQorCisjZGVmaW5lIEFSX1dPV19CRUFDT05fRkFJTF9FTiAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUl9XT1dfQkVBQ09OX1RJTU8gICAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgQVJfV09XX0tFRVBfQUxJVkVfTkVWRVIgICAgICAgICAweGZmZmZmZmZmCisjZGVmaW5lIEFSX1dPV19LRUVQX0FMSVZFX0FVVE9fRElTICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBBUl9XT1dfS0VFUF9BTElWRV9GQUlMX0RJUyAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgQVJfV09XX0tFRVBfQUxJVkVfREVMQVlfVkFMVUUgICAweDAwMDAwM2U4IC8qIDEgbXNlYyAqLworI2RlZmluZSBBUl9XT1dfQk1JU1NUSFJFU0hPTEQgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQVJfV09XX1BBVF9FTkRfT0ZfUEtUKHgpICAgICAgICAoeCAmIDB4ZikKKyNkZWZpbmUgQVJfV09XX1BBVF9PRkZfTUFUQ0goeCkgICAgICAgICAoKHggJiAweGYpIDw8IDgpCisjZGVmaW5lIEFSX1dPV19QQVRfQkFDS09GRiAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBBUl9XT1dfQ05UX0FJRlNfQ05UICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgQVJfV09XX0NOVF9TTE9UX0NOVCAgICAgICAgICAgICAweDAwMDAwMDA5CisjZGVmaW5lIEFSX1dPV19DTlRfS0FfQ05UICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorCisjZGVmaW5lIEFSX1dPV19UUkFOU01JVF9CVUZGRVIgICAgICAgICAgMHhlMDAwCisjZGVmaW5lIEFSX1dPV19UWEJVRihpKSAgICAgICAgICAgICAgICAgKEFSX1dPV19UUkFOU01JVF9CVUZGRVIgKyAoKGkpIDw8IDIpKQorI2RlZmluZSBBUl9XT1dfS0FfREVTQ19XT1JEMiAgICAgICAgICAgIDB4ZTAwMAorI2RlZmluZSBBUl9XT1dfVEJfUEFUVEVSTihpKSAgICAgICAgICAgICgweGUxMDAgKyAoaSA8PCA4KSkKKyNkZWZpbmUgQVJfV09XX1RCX01BU0soaSkgICAgICAgICAgICAgICAoMHhlYzAwICsgKGkgPDwgNSkpCisjZGVmaW5lIEFSX1dPV19QQVRURVJOX1NVUFBPUlRFRF9MRUdBQ1kgMHhmZgorI2RlZmluZSBBUl9XT1dfUEFUVEVSTl9TVVBQT1JURUQgICAgICAgIDB4ZmZmZgorI2RlZmluZSBBUl9XT1dfTEVOR1RIX01BWCAgICAgICAgICAgICAgIDB4ZmYKKyNkZWZpbmUgQVJfV09XX0xFTjFfU0hJRlQoX2kpICAgICAgICAgICAoKDB4MyAtICgoX2kpICYgMHgzKSkgPDwgMHgzKQorI2RlZmluZSBBUl9XT1dfTEVOR1RIMV9NQVNLKF9pKSAgICAgICAgIChBUl9XT1dfTEVOR1RIX01BWCA8PCBBUl9XT1dfTEVOMV9TSElGVChfaSkpCisjZGVmaW5lIEFSX1dPV19MRU4yX1NISUZUKF9pKSAgICAgICAgICAgKCgweDcgLSAoKF9pKSAmIDB4NykpIDw8IDB4MykKKyNkZWZpbmUgQVJfV09XX0xFTkdUSDJfTUFTSyhfaSkgICAgICAgICAoQVJfV09XX0xFTkdUSF9NQVggPDwgQVJfV09XX0xFTjJfU0hJRlQoX2kpKQorI2RlZmluZSBBUl9XT1dfTEVOM19TSElGVChfaSkgICAgICAgICAgICgoMHhiIC0gKChfaSkgJiAweGIpKSA8PCAweDMpCisjZGVmaW5lIEFSX1dPV19MRU5HVEgzX01BU0soX2kpICAgICAgICAgKEFSX1dPV19MRU5HVEhfTUFYIDw8IEFSX1dPV19MRU4zX1NISUZUKF9pKSkKKyNkZWZpbmUgQVJfV09XX0xFTjRfU0hJRlQoX2kpICAgICAgICAgICAoKDB4ZiAtICgoX2kpICYgMHhmKSkgPDwgMHgzKQorI2RlZmluZSBBUl9XT1dfTEVOR1RINF9NQVNLKF9pKSAgICAgICAgIChBUl9XT1dfTEVOR1RIX01BWCA8PCBBUl9XT1dfTEVONF9TSElGVChfaSkpCisKKyNlbmRpZiAvKiBSRUdfV09XX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93b3cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay93b3cuYwppbmRleCA1ZjMwZTU4Li44ZDBiMTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvd293LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3dvdy5jCkBAIC0xNiwzNiArMTYsNDMgQEAKIAogI2luY2x1ZGUgImF0aDlrLmgiCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2lwaHlfd293bGFuX3N1cHBvcnQgYXRoOWtfd293bGFuX3N1cHBvcnQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHdpcGh5X3dvd2xhbl9zdXBwb3J0IGF0aDlrX3dvd2xhbl9zdXBwb3J0X2xlZ2FjeSA9IHsKIAkuZmxhZ3MgPSBXSVBIWV9XT1dMQU5fTUFHSUNfUEtUIHwgV0lQSFlfV09XTEFOX0RJU0NPTk5FQ1QsCiAJLm5fcGF0dGVybnMgPSBNQVhfTlVNX1VTRVJfUEFUVEVSTiwKIAkucGF0dGVybl9taW5fbGVuID0gMSwKIAkucGF0dGVybl9tYXhfbGVuID0gTUFYX1BBVFRFUk5fU0laRSwKIH07CiAKLXN0YXRpYyB2b2lkIGF0aDlrX3dvd19tYXBfdHJpZ2dlcnMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCi0JCQkJICAgc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqd293bGFuLAotCQkJCSAgIHUzMiAqd293X3RyaWdnZXJzKQorc3RhdGljIGNvbnN0IHN0cnVjdCB3aXBoeV93b3dsYW5fc3VwcG9ydCBhdGg5a193b3dsYW5fc3VwcG9ydCA9IHsKKwkuZmxhZ3MgPSBXSVBIWV9XT1dMQU5fTUFHSUNfUEtUIHwgV0lQSFlfV09XTEFOX0RJU0NPTk5FQ1QsCisJLm5fcGF0dGVybnMgPSBNQVhfTlVNX1BBVFRFUk4gLSAyLAorCS5wYXR0ZXJuX21pbl9sZW4gPSAxLAorCS5wYXR0ZXJuX21heF9sZW4gPSBNQVhfUEFUVEVSTl9TSVpFLAorfTsKKworc3RhdGljIHU4IGF0aDlrX3dvd19tYXBfdHJpZ2dlcnMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJIHN0cnVjdCBjZmc4MDIxMV93b3dsYW4gKndvd2xhbikKIHsKKwl1OCB3b3dfdHJpZ2dlcnMgPSAwOworCiAJaWYgKHdvd2xhbi0+ZGlzY29ubmVjdCkKLQkJKndvd190cmlnZ2VycyB8PSBBSF9XT1dfTElOS19DSEFOR0UgfAotCQkJCSBBSF9XT1dfQkVBQ09OX01JU1M7CisJCXdvd190cmlnZ2VycyB8PSBBSF9XT1dfTElOS19DSEFOR0UgfAorCQkJCUFIX1dPV19CRUFDT05fTUlTUzsKIAlpZiAod293bGFuLT5tYWdpY19wa3QpCi0JCSp3b3dfdHJpZ2dlcnMgfD0gQUhfV09XX01BR0lDX1BBVFRFUk5fRU47CisJCXdvd190cmlnZ2VycyB8PSBBSF9XT1dfTUFHSUNfUEFUVEVSTl9FTjsKIAogCWlmICh3b3dsYW4tPm5fcGF0dGVybnMpCi0JCSp3b3dfdHJpZ2dlcnMgfD0gQUhfV09XX1VTRVJfUEFUVEVSTl9FTjsKKwkJd293X3RyaWdnZXJzIHw9IEFIX1dPV19VU0VSX1BBVFRFUk5fRU47CiAKLQlzYy0+d293X2VuYWJsZWQgPSAqd293X3RyaWdnZXJzOwotCisJcmV0dXJuIHdvd190cmlnZ2VyczsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfd293X2FkZF9kaXNhc3NvY19kZWF1dGhfcGF0dGVybihzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3N0YXRpYyBpbnQgYXRoOWtfd293X2FkZF9kaXNhc3NvY19kZWF1dGhfcGF0dGVybihzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlpbnQgcGF0dGVybl9jb3VudCA9IDA7Ci0JaW50IGksIGJ5dGVfY250OworCWludCByZXQsIGksIGJ5dGVfY250ID0gMDsKIAl1OCBkaXNfZGVhdXRoX3BhdHRlcm5bTUFYX1BBVFRFUk5fU0laRV07CiAJdTggZGlzX2RlYXV0aF9tYXNrW01BWF9QQVRURVJOX1NJWkVdOwogCkBAIC04MCwxMiArODcsNyBAQAogCSAqCQkJICAgIHwgeDp4Ong6eDp4OnggIC0tIDIyIGJ5dGVzCiAJICovCiAKLQkvKiBDcmVhdGUgRGlzYXNzb2NpYXRlIFBhdHRlcm4gZmlyc3QgKi8KLQotCWJ5dGVfY250ID0gMDsKLQogCS8qIEZpbGwgb3V0IHRoZSBtYXNrIHdpdGggYWxsIEZGJ3MgKi8KLQogCWZvciAoaSA9IDA7IGkgPCBNQVhfUEFUVEVSTl9NQVNLX1NJWkU7IGkrKykKIAkJZGlzX2RlYXV0aF9tYXNrW2ldID0gMHhmZjsKIApAQCAtMTA4LDE5ICsxMTAsMTcgQEAKIAlieXRlX2NudCArPSA2OwogCiAJLyogY29weSB0aGUgYnNzaWQsIGl0cyBzYW1lIGFzIHRoZSBzb3VyY2UgbWFjIGFkZHJlc3MgKi8KLQogCW1lbWNweSgoZGlzX2RlYXV0aF9wYXR0ZXJuICsgYnl0ZV9jbnQpLCBjb21tb24tPmN1cmJzc2lkLCBFVEhfQUxFTik7CiAKIAkvKiBDcmVhdGUgRGlzYXNzb2NpYXRlIHBhdHRlcm4gbWFzayAqLwotCiAJZGlzX2RlYXV0aF9tYXNrWzBdID0gMHhmZTsKIAlkaXNfZGVhdXRoX21hc2tbMV0gPSAweDAzOwogCWRpc19kZWF1dGhfbWFza1syXSA9IDB4YzA7CiAKLQlhdGhfZGJnKGNvbW1vbiwgV09XLCAiQWRkaW5nIGRpc2Fzc29jL2RlYXV0aCBwYXR0ZXJucyBmb3IgV29XXG4iKTsKLQotCWF0aDlrX2h3X3dvd19hcHBseV9wYXR0ZXJuKGFoLCBkaXNfZGVhdXRoX3BhdHRlcm4sIGRpc19kZWF1dGhfbWFzaywKLQkJCQkgICBwYXR0ZXJuX2NvdW50LCBieXRlX2NudCk7CisJcmV0ID0gYXRoOWtfaHdfd293X2FwcGx5X3BhdHRlcm4oYWgsIGRpc19kZWF1dGhfcGF0dGVybiwgZGlzX2RlYXV0aF9tYXNrLAorCQkJCQkgcGF0dGVybl9jb3VudCwgYnl0ZV9jbnQpOworCWlmIChyZXQpCisJCWdvdG8gZXhpdDsKIAogCXBhdHRlcm5fY291bnQrKzsKIAkvKgpAQCAtMTI5LDU5ICsxMjksMzkgQEAKIAkgKi8KIAlkaXNfZGVhdXRoX3BhdHRlcm5bMF0gPSAweEMwOwogCi0JYXRoOWtfaHdfd293X2FwcGx5X3BhdHRlcm4oYWgsIGRpc19kZWF1dGhfcGF0dGVybiwgZGlzX2RlYXV0aF9tYXNrLAotCQkJCSAgIHBhdHRlcm5fY291bnQsIGJ5dGVfY250KTsKLQorCXJldCA9IGF0aDlrX2h3X3dvd19hcHBseV9wYXR0ZXJuKGFoLCBkaXNfZGVhdXRoX3BhdHRlcm4sIGRpc19kZWF1dGhfbWFzaywKKwkJCQkJIHBhdHRlcm5fY291bnQsIGJ5dGVfY250KTsKK2V4aXQ6CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgYXRoOWtfd293X2FkZF9wYXR0ZXJuKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCSAgc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqd293bGFuKQorc3RhdGljIGludCBhdGg5a193b3dfYWRkX3BhdHRlcm4oc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJIHN0cnVjdCBjZmc4MDIxMV93b3dsYW4gKndvd2xhbikKIHsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoOWtfd293X3BhdHRlcm4gKndvd19wYXR0ZXJuID0gTlVMTDsKIAlzdHJ1Y3QgY2ZnODAyMTFfcGt0X3BhdHRlcm4gKnBhdHRlcm5zID0gd293bGFuLT5wYXR0ZXJuczsKLQlpbnQgbWFza19sZW47CisJdTggd293X3BhdHRlcm5bTUFYX1BBVFRFUk5fU0laRV07CisJdTggd293X21hc2tbTUFYX1BBVFRFUk5fU0laRV07CisJaW50IG1hc2tfbGVuLCByZXQgPSAwOwogCXM4IGkgPSAwOwogCi0JaWYgKCF3b3dsYW4tPm5fcGF0dGVybnMpCi0JCXJldHVybjsKLQotCS8qCi0JICogQWRkIHRoZSBuZXcgdXNlciBjb25maWd1cmVkIHBhdHRlcm5zCi0JICovCiAJZm9yIChpID0gMDsgaSA8IHdvd2xhbi0+bl9wYXR0ZXJuczsgaSsrKSB7CisJCW1hc2tfbGVuID0gRElWX1JPVU5EX1VQKHBhdHRlcm5zW2ldLnBhdHRlcm5fbGVuLCA4KTsKKwkJbWVtc2V0KHdvd19wYXR0ZXJuLCAwLCBNQVhfUEFUVEVSTl9TSVpFKTsKKwkJbWVtc2V0KHdvd19tYXNrLCAwLCBNQVhfUEFUVEVSTl9TSVpFKTsKKwkJbWVtY3B5KHdvd19wYXR0ZXJuLCBwYXR0ZXJuc1tpXS5wYXR0ZXJuLCBwYXR0ZXJuc1tpXS5wYXR0ZXJuX2xlbik7CisJCW1lbWNweSh3b3dfbWFzaywgcGF0dGVybnNbaV0ubWFzaywgbWFza19sZW4pOwogCi0JCXdvd19wYXR0ZXJuID0ga3phbGxvYyhzaXplb2YoKndvd19wYXR0ZXJuKSwgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKCF3b3dfcGF0dGVybikKLQkJCXJldHVybjsKLQotCQkvKgotCQkgKiBUT0RPOiBjb252ZXJ0IHRoZSBnZW5lcmljIHVzZXIgc3BhY2UgcGF0dGVybiB0bwotCQkgKiBhcHByb3ByaWF0ZSBjaGlwIHNwZWNpZmljLzgwMi4xMSBwYXR0ZXJuLgotCQkgKi8KLQotCQltYXNrX2xlbiA9IERJVl9ST1VORF9VUCh3b3dsYW4tPnBhdHRlcm5zW2ldLnBhdHRlcm5fbGVuLCA4KTsKLQkJbWVtc2V0KHdvd19wYXR0ZXJuLT5wYXR0ZXJuX2J5dGVzLCAwLCBNQVhfUEFUVEVSTl9TSVpFKTsKLQkJbWVtc2V0KHdvd19wYXR0ZXJuLT5tYXNrX2J5dGVzLCAwLCBNQVhfUEFUVEVSTl9TSVpFKTsKLQkJbWVtY3B5KHdvd19wYXR0ZXJuLT5wYXR0ZXJuX2J5dGVzLCBwYXR0ZXJuc1tpXS5wYXR0ZXJuLAotCQkgICAgICAgcGF0dGVybnNbaV0ucGF0dGVybl9sZW4pOwotCQltZW1jcHkod293X3BhdHRlcm4tPm1hc2tfYnl0ZXMsIHBhdHRlcm5zW2ldLm1hc2ssIG1hc2tfbGVuKTsKLQkJd293X3BhdHRlcm4tPnBhdHRlcm5fbGVuID0gcGF0dGVybnNbaV0ucGF0dGVybl9sZW47Ci0KLQkJLyoKLQkJICoganVzdCBuZWVkIHRvIHRha2UgY2FyZSBvZiBkZWF1dGggYW5kIGRpc3Nzb2MgcGF0dGVybiwKLQkJICogbWFrZSBzdXJlIHdlIGRvbid0IG92ZXJ3cml0ZSB0aGVtLgotCQkgKi8KLQotCQlhdGg5a19od193b3dfYXBwbHlfcGF0dGVybihhaCwgd293X3BhdHRlcm4tPnBhdHRlcm5fYnl0ZXMsCi0JCQkJCSAgIHdvd19wYXR0ZXJuLT5tYXNrX2J5dGVzLAotCQkJCQkgICBpICsgMiwKLQkJCQkJICAgd293X3BhdHRlcm4tPnBhdHRlcm5fbGVuKTsKLQkJa2ZyZWUod293X3BhdHRlcm4pOwotCisJCXJldCA9IGF0aDlrX2h3X3dvd19hcHBseV9wYXR0ZXJuKGFoLAorCQkJCQkJIHdvd19wYXR0ZXJuLAorCQkJCQkJIHdvd19tYXNrLAorCQkJCQkJIGkgKyAyLAorCQkJCQkJIHBhdHRlcm5zW2ldLnBhdHRlcm5fbGVuKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOwogCX0KIAorCXJldHVybiByZXQ7CiB9CiAKIGludCBhdGg5a19zdXNwZW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtMTkwLDU4ICsxNzAsNTUgQEAKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCXUzMiB3b3dfdHJpZ2dlcnNfZW5hYmxlZCA9IDA7CisJdTggdHJpZ2dlcnM7CiAJaW50IHJldCA9IDA7CiAKIAlhdGg5a19kZWluaXRfY2hhbm5lbF9jb250ZXh0KHNjKTsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKLQlhdGhfY2FuY2VsX3dvcmsoc2MpOwotCWF0aF9zdG9wX2FuaShzYyk7Ci0KIAlpZiAodGVzdF9iaXQoQVRIX09QX0lOVkFMSUQsICZjb21tb24tPm9wX2ZsYWdzKSkgewotCQlhdGhfZGJnKGNvbW1vbiwgQU5ZLCAiRGV2aWNlIG5vdCBwcmVzZW50XG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKKwkJYXRoX2Vycihjb21tb24sICJEZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGZhaWxfd293OwogCX0KIAogCWlmIChXQVJOX09OKCF3b3dsYW4pKSB7Ci0JCWF0aF9kYmcoY29tbW9uLCBXT1csICJOb25lIG9mIHRoZSBXb1cgdHJpZ2dlcnMgZW5hYmxlZFxuIik7CisJCWF0aF9lcnIoY29tbW9uLCAiTm9uZSBvZiB0aGUgV29XIHRyaWdnZXJzIGVuYWJsZWRcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGZhaWxfd293OwogCX0KIAotCWlmICghZGV2aWNlX2Nhbl93YWtldXAoc2MtPmRldikpIHsKLQkJYXRoX2RiZyhjb21tb24sIFdPVywgImRldmljZV9jYW5fd2FrZXVwIGZhaWxlZCwgV29XIGlzIG5vdCBlbmFibGVkXG4iKTsKLQkJcmV0ID0gMTsKLQkJZ290byBmYWlsX3dvdzsKLQl9Ci0KLQkvKgotCSAqIG5vbmUgb2YgdGhlIHN0YSB2aWZzIGFyZSBhc3NvY2lhdGVkCi0JICogYW5kIHdlIGFyZSBub3QgY3VycmVudGx5IGhhbmRsaW5nIG11bHRpdmlmCi0JICogY2FzZXMsIGZvciBpbnN0YW5jZSB3ZSBoYXZlIHRvIHNlcGVyYXRlbHkKLQkgKiBjb25maWd1cmUgJ2tlZXAgYWxpdmUgZnJhbWUnIGZvciBlYWNoCi0JICogU1RBLgotCSAqLwotCi0JaWYgKCF0ZXN0X2JpdChBVEhfT1BfUFJJTV9TVEFfVklGLCAmY29tbW9uLT5vcF9mbGFncykpIHsKLQkJYXRoX2RiZyhjb21tb24sIFdPVywgIk5vbmUgb2YgdGhlIFNUQSB2aWZzIGFyZSBhc3NvY2lhdGVkXG4iKTsKLQkJcmV0ID0gMTsKLQkJZ290byBmYWlsX3dvdzsKLQl9Ci0KIAlpZiAoc2MtPmN1cl9jaGFuLT5udmlmcyA+IDEpIHsKIAkJYXRoX2RiZyhjb21tb24sIFdPVywgIldvVyBmb3IgbXVsdGl2aWYgaXMgbm90IHlldCBzdXBwb3J0ZWRcbiIpOwogCQlyZXQgPSAxOwogCQlnb3RvIGZhaWxfd293OwogCX0KIAotCWF0aDlrX3dvd19tYXBfdHJpZ2dlcnMoc2MsIHdvd2xhbiwgJndvd190cmlnZ2Vyc19lbmFibGVkKTsKKwlpZiAoYXRoOWtfaXNfY2hhbmN0eF9lbmFibGVkKCkpIHsKKwkJaWYgKHRlc3RfYml0KEFUSF9PUF9NVUxUSV9DSEFOTkVMLCAmY29tbW9uLT5vcF9mbGFncykpIHsKKwkJCWF0aF9kYmcoY29tbW9uLCBXT1csCisJCQkJIk11bHRpLWNoYW5uZWwgV09XIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJcmV0ID0gMTsKKwkJCWdvdG8gZmFpbF93b3c7CisJCX0KKwl9CiAKLQlhdGhfZGJnKGNvbW1vbiwgV09XLCAiV29XIHRyaWdnZXJzIGVuYWJsZWQgMHgleFxuIiwKLQkJd293X3RyaWdnZXJzX2VuYWJsZWQpOworCWlmICghdGVzdF9iaXQoQVRIX09QX1BSSU1fU1RBX1ZJRiwgJmNvbW1vbi0+b3BfZmxhZ3MpKSB7CisJCWF0aF9kYmcoY29tbW9uLCBXT1csICJOb25lIG9mIHRoZSBTVEEgdmlmcyBhcmUgYXNzb2NpYXRlZFxuIik7CisJCXJldCA9IDE7CisJCWdvdG8gZmFpbF93b3c7CisJfQorCisJdHJpZ2dlcnMgPSBhdGg5a193b3dfbWFwX3RyaWdnZXJzKHNjLCB3b3dsYW4pOworCWlmICghdHJpZ2dlcnMpIHsKKwkJYXRoX2RiZyhjb21tb24sIFdPVywgIk5vIHZhbGlkIFdvVyB0cmlnZ2Vyc1xuIik7CisJCXJldCA9IDE7CisJCWdvdG8gZmFpbF93b3c7CisJfQorCisJYXRoX2NhbmNlbF93b3JrKHNjKTsKKwlhdGhfc3RvcF9hbmkoc2MpOwogCiAJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIApAQCAtMjUxLDEwICsyMjgsMjEgQEAKIAkgKiBFbmFibGUgd2FrZSB1cCBvbiByZWNpZXZpbmcgZGlzYXNzb2MvZGVhdXRoCiAJICogZnJhbWUgYnkgZGVmYXVsdC4KIAkgKi8KLQlhdGg5a193b3dfYWRkX2Rpc2Fzc29jX2RlYXV0aF9wYXR0ZXJuKHNjKTsKKwlyZXQgPSBhdGg5a193b3dfYWRkX2Rpc2Fzc29jX2RlYXV0aF9wYXR0ZXJuKHNjKTsKKwlpZiAocmV0KSB7CisJCWF0aF9lcnIoY29tbW9uLAorCQkJIlVuYWJsZSB0byBhZGQgZGlzYXNzb2MvZGVhdXRoIHBhdHRlcm46ICVkXG4iLCByZXQpOworCQlnb3RvIGZhaWxfd293OworCX0KIAotCWlmICh3b3dfdHJpZ2dlcnNfZW5hYmxlZCAmIEFIX1dPV19VU0VSX1BBVFRFUk5fRU4pCi0JCWF0aDlrX3dvd19hZGRfcGF0dGVybihzYywgd293bGFuKTsKKwlpZiAodHJpZ2dlcnMgJiBBSF9XT1dfVVNFUl9QQVRURVJOX0VOKSB7CisJCXJldCA9IGF0aDlrX3dvd19hZGRfcGF0dGVybihzYywgd293bGFuKTsKKwkJaWYgKHJldCkgeworCQkJYXRoX2Vycihjb21tb24sCisJCQkJIlVuYWJsZSB0byBhZGQgdXNlciBwYXR0ZXJuOiAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZmFpbF93b3c7CisJCX0KKwl9CiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CiAJLyoKQEAgLTI3OCwxMiArMjY2LDEyIEBACiAJc3luY2hyb25pemVfaXJxKHNjLT5pcnEpOwogCXRhc2tsZXRfa2lsbCgmc2MtPmludHJfdHEpOwogCi0JYXRoOWtfaHdfd293X2VuYWJsZShhaCwgd293X3RyaWdnZXJzX2VuYWJsZWQpOworCWF0aDlrX2h3X3dvd19lbmFibGUoYWgsIHRyaWdnZXJzKTsKIAogCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwotCWF0aF9kYmcoY29tbW9uLCBBTlksICJXb1cgZW5hYmxlZCBpbiBhdGg5a1xuIik7Ci0JYXRvbWljX2luYygmc2MtPndvd19zbGVlcF9wcm9jX2ludHIpOworCWF0aF9kYmcoY29tbW9uLCBXT1csICJTdXNwZW5kIHdpdGggV29XIHRyaWdnZXJzOiAweCV4XG4iLCB0cmlnZ2Vycyk7CiAKKwlzZXRfYml0KEFUSF9PUF9XT1dfRU5BQkxFRCwgJmNvbW1vbi0+b3BfZmxhZ3MpOwogZmFpbF93b3c6CiAJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0yOTQsNyArMjgyLDcgQEAKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCXUzMiB3b3dfc3RhdHVzOworCXU4IHN0YXR1czsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAKQEAgLTMwOSwyOSArMjk3LDE0IEBACiAKIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKIAotCXdvd19zdGF0dXMgPSBhdGg5a19od193b3dfd2FrZXVwKGFoKTsKLQotCWlmIChhdG9taWNfcmVhZCgmc2MtPndvd19nb3RfYm1pc3NfaW50cikgPT0gMCkgewotCQkvKgotCQkgKiBzb21lIGRldmljZXMgbWF5IG5vdCBwaWNrIGJlYWNvbiBtaXNzCi0JCSAqIGFzIHRoZSByZWFzb24gdGhleSB3b2tlIHVwIHNvIHdlIGFkZAotCQkgKiB0aGF0IGhlcmUgZm9yIHRoYXQgc2hvcnRjb21pbmcuCi0JCSAqLwotCQl3b3dfc3RhdHVzIHw9IEFIX1dPV19CRUFDT05fTUlTUzsKLQkJYXRvbWljX2RlYygmc2MtPndvd19nb3RfYm1pc3NfaW50cik7Ci0JCWF0aF9kYmcoY29tbW9uLCBBTlksICJCZWFjb24gbWlzcyBpbnRlcnJ1cHQgcGlja2VkIHVwIGR1cmluZyBXb1cgc2xlZXBcbiIpOwotCX0KLQotCWF0b21pY19kZWMoJnNjLT53b3dfc2xlZXBfcHJvY19pbnRyKTsKLQotCWlmICh3b3dfc3RhdHVzKSB7Ci0JCWF0aF9kYmcoY29tbW9uLCBBTlksICJXYWtpbmcgdXAgZHVlIHRvIFdvVyB0cmlnZ2VycyAlcyB3aXRoIFdvVyBzdGF0dXMgPSAleFxuIiwKLQkJCWF0aDlrX2h3X3dvd19ldmVudF90b19zdHJpbmcod293X3N0YXR1cyksIHdvd19zdGF0dXMpOwotCX0KKwlzdGF0dXMgPSBhdGg5a19od193b3dfd2FrZXVwKGFoKTsKKwlhdGhfZGJnKGNvbW1vbiwgV09XLCAiUmVzdW1lIHdpdGggV29XIHN0YXR1czogMHgleFxuIiwgc3RhdHVzKTsKIAogCWF0aF9yZXN0YXJ0X3dvcmsoc2MpOwogCWF0aDlrX3N0YXJ0X2J0Y29leChzYyk7CiAKKwljbGVhcl9iaXQoQVRIX09QX1dPV19FTkFCTEVELCAmY29tbW9uLT5vcF9mbGFncyk7CisKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiAKQEAgLTM0MSwyMiArMzE0LDM1IEBACiB2b2lkIGF0aDlrX3NldF93YWtldXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlZCkKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7Ci0JZGV2aWNlX2luaXRfd2FrZXVwKHNjLT5kZXYsIDEpOwogCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShzYy0+ZGV2LCBlbmFibGVkKTsKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisKKwlhdGhfZGJnKGNvbW1vbiwgV09XLCAiV29XIHdha2V1cCBzb3VyY2UgaXMgJXNcbiIsCisJCShlbmFibGVkKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwogfQogCiB2b2lkIGF0aDlrX2luaXRfd293KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAKLQlpZiAoKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfV09XX0RFVklDRV9DQVBBQkxFKSAmJgotCSAgICAoc2MtPmRyaXZlcl9kYXRhICYgQVRIOUtfUENJX1dPVykgJiYKLQkgICAgZGV2aWNlX2Nhbl93YWtldXAoc2MtPmRldikpCi0JCWh3LT53aXBoeS0+d293bGFuID0gJmF0aDlrX3dvd2xhbl9zdXBwb3J0OworCWlmICgoc2MtPmRyaXZlcl9kYXRhICYgQVRIOUtfUENJX1dPVykgfHwgc2MtPmZvcmNlX3dvdykgeworCQlpZiAoQVJfU1JFVl85NDYyXzIwX09SX0xBVEVSKGFoKSB8fCBBUl9TUkVWXzk1NjVfMTFfT1JfTEFURVIoYWgpKQorCQkJaHctPndpcGh5LT53b3dsYW4gPSAmYXRoOWtfd293bGFuX3N1cHBvcnQ7CisJCWVsc2UKKwkJCWh3LT53aXBoeS0+d293bGFuID0gJmF0aDlrX3dvd2xhbl9zdXBwb3J0X2xlZ2FjeTsKIAotCWF0b21pY19zZXQoJnNjLT53b3dfc2xlZXBfcHJvY19pbnRyLCAtMSk7Ci0JYXRvbWljX3NldCgmc2MtPndvd19nb3RfYm1pc3NfaW50ciwgLTEpOworCQlkZXZpY2VfaW5pdF93YWtldXAoc2MtPmRldiwgMSk7CisJfQorfQorCit2b2lkIGF0aDlrX2RlaW5pdF93b3coc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBody0+cHJpdjsKKworCWlmICgoc2MtPmRyaXZlcl9kYXRhICYgQVRIOUtfUENJX1dPVykgfHwgc2MtPmZvcmNlX3dvdykKKwkJZGV2aWNlX2luaXRfd2FrZXVwKHNjLT5kZXYsIDApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKaW5kZXggZTliZDAyYy4uMWI4ZTc1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCkBAIC0xMDk3LDI0ICsxMDk3LDY1IEBACiB9CiAKIHN0YXRpYyB1OCBhdGhfZ2V0X3JhdGVfdHhwb3dlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9idWYgKmJmLAotCQkJICAgICAgIHU4IHJhdGVpZHgpCisJCQkgICAgICAgdTggcmF0ZWlkeCwgYm9vbCBpc180MCwgYm9vbCBpc19jY2spCiB7CiAJdTggbWF4X3Bvd2VyOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGF0aF9mcmFtZV9pbmZvICpmaTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CiAKLQlpZiAoc2MtPnR4OTlfc3RhdGUpCisJaWYgKHNjLT50eDk5X3N0YXRlIHx8ICFhaC0+dHBjX2VuYWJsZWQpCiAJCXJldHVybiBNQVhfUkFURV9QT1dFUjsKIAorCXNrYiA9IGJmLT5iZl9tcGR1OworCWZpID0gZ2V0X2ZyYW1lX2luZm8oc2tiKTsKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCiAJaWYgKCFBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKSB7Ci0JCS8qIGFyOTAwMiBpcyBub3Qgc2lwcG9ydGVkIGZvciB0aGUgbW9tZW50ICovCi0JCXJldHVybiBNQVhfUkFURV9QT1dFUjsKLQl9CisJCWludCB0eHBvd2VyID0gZmktPnR4X3Bvd2VyOwogCi0JaWYgKCFiZi0+YmZfc3RhdGUuYmZzX3BhcHJkKSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBiZi0+YmZfbXBkdTsKLQkJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwotCQlzdHJ1Y3QgYXRoX2ZyYW1lX2luZm8gKmZpID0gZ2V0X2ZyYW1lX2luZm8oc2tiKTsKKwkJaWYgKGlzXzQwKSB7CisJCQl1OCBwb3dlcl9odDQwZGVsdGE7CisJCQlzdHJ1Y3QgYXI1NDE2X2VlcHJvbV9kZWYgKmVlcCA9ICZhaC0+ZWVwcm9tLmRlZjsKIAorCQkJaWYgKEFSNTQxNl9WRVJfTUFTSyA+PSBBUjU0MTZfRUVQX01JTk9SX1ZFUl8yKSB7CisJCQkJYm9vbCBpc18yZ2h6OworCQkJCXN0cnVjdCBtb2RhbF9lZXBfaGVhZGVyICpwbW9kYWw7CisKKwkJCQlpc18yZ2h6ID0gaW5mby0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haOworCQkJCXBtb2RhbCA9ICZlZXAtPm1vZGFsSGVhZGVyW2lzXzJnaHpdOworCQkJCXBvd2VyX2h0NDBkZWx0YSA9IHBtb2RhbC0+aHQ0MFBvd2VySW5jRm9yUGRhZGM7CisJCQl9IGVsc2UgeworCQkJCXBvd2VyX2h0NDBkZWx0YSA9IDI7CisJCQl9CisJCQl0eHBvd2VyICs9IHBvd2VyX2h0NDBkZWx0YTsKKwkJfQorCisJCWlmIChBUl9TUkVWXzkyODcoYWgpIHx8IEFSX1NSRVZfOTI4NShhaCkgfHwKKwkJICAgIEFSX1NSRVZfOTI3MShhaCkpIHsKKwkJCXR4cG93ZXIgLT0gMiAqIEFSOTI4N19QV1JfVEFCTEVfT0ZGU0VUX0RCOworCQl9IGVsc2UgaWYgKEFSX1NSRVZfOTI4MF8yMF9PUl9MQVRFUihhaCkpIHsKKwkJCXM4IHBvd2VyX29mZnNldDsKKworCQkJcG93ZXJfb2Zmc2V0ID0gYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsCisJCQkJCQkJRUVQX1BXUl9UQUJMRV9PRkZTRVQpOworCQkJdHhwb3dlciAtPSAyICogcG93ZXJfb2Zmc2V0OworCQl9CisKKwkJaWYgKE9MQ19GT1JfQVI5MjgwXzIwX0xBVEVSICYmIGlzX2NjaykKKwkJCXR4cG93ZXIgLT0gMjsKKworCQl0eHBvd2VyID0gbWF4KHR4cG93ZXIsIDApOworCQltYXhfcG93ZXIgPSBtaW5fdCh1OCwgYWgtPnR4X3Bvd2VyW3JhdGVpZHhdLCB0eHBvd2VyKTsKKworCQkvKiBYWFg6IGNsYW1wIG1pbmltdW0gVFggcG93ZXIgYXQgMSBmb3IgQVI5MTYwIHNpbmNlIGlmCisJCSAqIG1heF9wb3dlciBpcyBzZXQgdG8gMCwgZnJhbWVzIGFyZSB0cmFuc21pdHRlZCBhdCBtYXgKKwkJICogVFggcG93ZXIKKwkJICovCisJCWlmICghbWF4X3Bvd2VyICYmICFBUl9TUkVWXzkyODBfMjBfT1JfTEFURVIoYWgpKQorCQkJbWF4X3Bvd2VyID0gMTsKKwl9IGVsc2UgaWYgKCFiZi0+YmZfc3RhdGUuYmZzX3BhcHJkKSB7CiAJCWlmIChyYXRlaWR4IDwgOCAmJiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NUQkMpKQogCQkJbWF4X3Bvd2VyID0gbWluKGFoLT50eF9wb3dlcl9zdGJjW3JhdGVpZHhdLAogCQkJCQlmaS0+dHhfcG93ZXIpOwpAQCAtMTE1Miw3ICsxMTkzLDcgQEAKIAlpbmZvLT5ydHNjdHNfcmF0ZSA9IGZpLT5ydHNjdHNfcmF0ZTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJmLT5yYXRlcyk7IGkrKykgewotCQlib29sIGlzXzQwLCBpc19zZ2ksIGlzX3NwOworCQlib29sIGlzXzQwLCBpc19zZ2ksIGlzX3NwLCBpc19jY2s7CiAJCWludCBwaHk7CiAKIAkJaWYgKCFyYXRlc1tpXS5jb3VudCB8fCAocmF0ZXNbaV0uaWR4IDwgMCkpCkBAIC0xMTk4LDcgKzEyMzksOCBAQAogCQkJaWYgKHJpeCA8IDggJiYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TVEJDKSkKIAkJCQlpbmZvLT5yYXRlc1tpXS5SYXRlRmxhZ3MgfD0gQVRIOUtfUkFURVNFUklFU19TVEJDOwogCi0JCQlpbmZvLT50eHBvd2VyW2ldID0gYXRoX2dldF9yYXRlX3R4cG93ZXIoc2MsIGJmLCByaXgpOworCQkJaW5mby0+dHhwb3dlcltpXSA9IGF0aF9nZXRfcmF0ZV90eHBvd2VyKHNjLCBiZiwgcml4LAorCQkJCQkJCQlpc180MCwgZmFsc2UpOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtMTIyNyw3ICsxMjY5LDkgQEAKIAkJaW5mby0+cmF0ZXNbaV0uUGt0RHVyYXRpb24gPSBhdGg5a19od19jb21wdXRldHh0aW1lKHNjLT5zY19haCwKIAkJCXBoeSwgcmF0ZS0+Yml0cmF0ZSAqIDEwMCwgbGVuLCByaXgsIGlzX3NwKTsKIAotCQlpbmZvLT50eHBvd2VyW2ldID0gYXRoX2dldF9yYXRlX3R4cG93ZXIoc2MsIGJmLCByaXgpOworCQlpc19jY2sgPSBJU19DQ0tfUkFURShpbmZvLT5yYXRlc1tpXS5SYXRlKTsKKwkJaW5mby0+dHhwb3dlcltpXSA9IGF0aF9nZXRfcmF0ZV90eHBvd2VyKHNjLCBiZiwgcml4LCBmYWxzZSwKKwkJCQkJCQlpc19jY2spOwogCX0KIAogCS8qIEZvciBBUjU0MTYgLSBSVFMgY2Fubm90IGJlIGZvbGxvd2VkIGJ5IGEgZnJhbWUgbGFyZ2VyIHRoYW4gOEsgKi8KQEAgLTIyNTksNyArMjMwMyw3IEBACiAJc3RydWN0IGF0aF90eHEgKnR4cSA9IHR4Y3RsLT50eHE7CiAJc3RydWN0IGF0aF9hdHhfdGlkICp0aWQgPSBOVUxMOwogCXN0cnVjdCBhdGhfYnVmICpiZjsKLQlib29sIHF1ZXVlLCBza2lwX3VhcHNkID0gZmFsc2U7CisJYm9vbCBxdWV1ZSwgc2tpcF91YXBzZCA9IGZhbHNlLCBwc19yZXNwOwogCWludCBxLCByZXQ7CiAKIAlpZiAodmlmKQpAQCAtMjI2OCw2ICsyMzEyLDggQEAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1RYX09GRkNIQU4pCiAJCXR4Y3RsLT5mb3JjZV9jaGFubmVsID0gdHJ1ZTsKIAorCXBzX3Jlc3AgPSAhIShpbmZvLT5jb250cm9sLmZsYWdzICYgSUVFRTgwMjExX1RYX0NUUkxfUFNfUkVTUE9OU0UpOworCiAJcmV0ID0gYXRoX3R4X3ByZXBhcmUoaHcsIHNrYiwgdHhjdGwpOwogCWlmIChyZXQpCiAJICAgIHJldHVybiByZXQ7CkBAIC0yMzEwLDcgKzIzNTYsNyBAQAogCWlmICh0eGN0bC0+YW4gJiYgcXVldWUpCiAJCXRpZCA9IGF0aF9nZXRfc2tiX3RpZChzYywgdHhjdGwtPmFuLCBza2IpOwogCi0JaWYgKCFza2lwX3VhcHNkICYmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUFNfUkVTUE9OU0UpKSB7CisJaWYgKCFza2lwX3VhcHNkICYmIHBzX3Jlc3ApIHsKIAkJYXRoX3R4cV91bmxvY2soc2MsIHR4cSk7CiAJCXR4cSA9IHNjLT50eC51YXBzZHE7CiAJCWF0aF90eHFfbG9jayhzYywgdHhxKTsKQEAgLTI0NDMsOSArMjQ4OSwxMiBAQAogCWlmIChzYy0+c2NfYWgtPmNhbGRhdGEpCiAJCXNldF9iaXQoUEFQUkRfUEFDS0VUX1NFTlQsICZzYy0+c2NfYWgtPmNhbGRhdGEtPmNhbF9mbGFncyk7CiAKLQlpZiAoISh0eF9mbGFncyAmIEFUSF9UWF9FUlJPUikpCi0JCS8qIEZyYW1lIHdhcyBBQ0tlZCAqLwotCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BQ0s7CisJaWYgKCEodHhfZmxhZ3MgJiBBVEhfVFhfRVJST1IpKSB7CisJCWlmICh0eF9pbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfTk9fQUNLKQorCQkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfTk9BQ0tfVFJBTlNNSVRURUQ7CisJCWVsc2UKKwkJCXR4X2luZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FDSzsKKwl9CiAKIAlwYWRwb3MgPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CiAJcGFkc2l6ZSA9IHBhZHBvcyAmIDM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvY21kLmMKaW5kZXggMzlhNjM4Ny4uZjJiNGY1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9jbWQuYwpAQCAtMTg4LDEyICsxODgsMTIgQEAKIAogCQlpZiAoYXItPmNoYW5uZWwpIHsKIAkJCWluZm8gPSAmYXItPnN1cnZleVthci0+Y2hhbm5lbC0+aHdfdmFsdWVdOwotCQkJaW5mby0+Y2hhbm5lbF90aW1lID0gYXItPnRhbGx5LmFjdGl2ZTsKLQkJCWluZm8tPmNoYW5uZWxfdGltZV9idXN5ID0gYXItPnRhbGx5LmNjYTsKLQkJCWluZm8tPmNoYW5uZWxfdGltZV90eCA9IGFyLT50YWxseS50eF90aW1lOwotCQkJZG9fZGl2KGluZm8tPmNoYW5uZWxfdGltZSwgMTAwMCk7Ci0JCQlkb19kaXYoaW5mby0+Y2hhbm5lbF90aW1lX2J1c3ksIDEwMDApOwotCQkJZG9fZGl2KGluZm8tPmNoYW5uZWxfdGltZV90eCwgMTAwMCk7CisJCQlpbmZvLT50aW1lID0gYXItPnRhbGx5LmFjdGl2ZTsKKwkJCWluZm8tPnRpbWVfYnVzeSA9IGFyLT50YWxseS5jY2E7CisJCQlpbmZvLT50aW1lX3R4ID0gYXItPnRhbGx5LnR4X3RpbWU7CisJCQlkb19kaXYoaW5mby0+dGltZSwgMTAwMCk7CisJCQlkb19kaXYoaW5mby0+dGltZV9idXN5LCAxMDAwKTsKKwkJCWRvX2RpdihpbmZvLT50aW1lX3R4LCAxMDAwKTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvbWFpbi5jCmluZGV4IGVmNWI2ZGMuLmYxNDU1YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL21haW4uYwpAQCAtMTY5MCw5ICsxNjkwLDkgQEAKIAkJc3VydmV5LT5maWxsZWQgfD0gU1VSVkVZX0lORk9fSU5fVVNFOwogCiAJaWYgKGFyLT5mdy5od19jb3VudGVycykgewotCQlzdXJ2ZXktPmZpbGxlZCB8PSBTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUUgfAotCQkJCSAgU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX0JVU1kgfAotCQkJCSAgU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1RYOworCQlzdXJ2ZXktPmZpbGxlZCB8PSBTVVJWRVlfSU5GT19USU1FIHwKKwkJCQkgIFNVUlZFWV9JTkZPX1RJTUVfQlVTWSB8CisJCQkJICBTVVJWRVlfSU5GT19USU1FX1RYOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Rmc19wYXR0ZXJuX2RldGVjdG9yLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvZGZzX3BhdHRlcm5fZGV0ZWN0b3IuYwppbmRleCBjZmQwNTU0Li4zZDU3Zjg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvZGZzX3BhdHRlcm5fZGV0ZWN0b3IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvZGZzX3BhdHRlcm5fZGV0ZWN0b3IuYwpAQCAtODYsNyArODYsNyBAQAogCUZDQ19QQVRURVJOKDEsIDAsIDUsIDE1MCwgMjMwLCAxLCAyMyksCiAJRkNDX1BBVFRFUk4oMiwgNiwgMTAsIDIwMCwgNTAwLCAxLCAxNiksCiAJRkNDX1BBVFRFUk4oMywgMTEsIDIwLCAyMDAsIDUwMCwgMSwgMTIpLAotCUZDQ19QQVRURVJOKDQsIDUwLCAxMDAsIDEwMDAsIDIwMDAsIDEsIDIwKSwKKwlGQ0NfUEFUVEVSTig0LCA1MCwgMTAwLCAxMDAwLCAyMDAwLCAxLCAxKSwKIAlGQ0NfUEFUVEVSTig1LCAwLCAxLCAzMzMsIDMzMywgMSwgOSksCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9keGUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L2R4ZS5jCmluZGV4IDczZjEyZjEuLjA4NjU0OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L2R4ZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L2R4ZS5jCkBAIC04NCw2ICs4NCw3IEBACiAJCWlmICghY3VyX2N0bCkKIAkJCWdvdG8gb3V0X2ZhaWw7CiAKKwkJc3Bpbl9sb2NrX2luaXQoJmN1cl9jdGwtPnNrYl9sb2NrKTsKIAkJY3VyX2N0bC0+Y3RsX2Jsa19vcmRlciA9IGk7CiAJCWlmIChpID09IDApIHsKIAkJCWNoLT5oZWFkX2Jsa19jdGwgPSBjdXJfY3RsOwpAQCAtMzU0LDYgKzM1NSw4IEBACiAJICogYW5kIHdoaWxlLWRvIHdpbGwgbm90IG1ha2UgYW55IGN5Y2xlcy4KIAkgKi8KIAlkbyB7CisJCWlmIChjdGwtPmRlc2MtPmN0cmwgJiBXQ04zNlhYX0RYRV9DVFJMX1ZBTElEX01BU0spCisJCQlicmVhazsKIAkJaWYgKGN0bC0+c2tiKSB7CiAJCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIGN0bC0+ZGVzYy0+c3JjX2FkZHJfbCwKIAkJCQkJIGN0bC0+c2tiLT5sZW4sIERNQV9UT19ERVZJQ0UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvbWFpbi5jCmluZGV4IDdkZDg4NzMuLjA3ODNkMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9tYWluLmMKQEAgLTI5OCw2ICsyOTgsOCBAQAogCXdjbjM2eHhfZGVidWdmc19pbml0KHdjbik7CiAKIAlJTklUX0xJU1RfSEVBRCgmd2NuLT52aWZfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJndjbi0+ZHhlX2xvY2spOworCiAJcmV0dXJuIDA7CiAKIG91dF9zbWRfc3RvcDoKQEAgLTc5NSw2ICs3OTcsNyBAQAogCXdjbjM2eHhfZGJnKFdDTjM2WFhfREJHX01BQywgIm1hYyBzdGEgYWRkIHZpZiAlcCBzdGEgJXBNXG4iLAogCQkgICAgdmlmLCBzdGEtPmFkZHIpOwogCisJc3Bpbl9sb2NrX2luaXQoJnN0YV9wcml2LT5hbXBkdV9sb2NrKTsKIAl2aWZfcHJpdi0+c3RhID0gc3RhX3ByaXY7CiAJc3RhX3ByaXYtPnZpZiA9IHZpZl9wcml2OwogCS8qCkBAIC04NzMsMjEgKzg3NiwzMiBAQAogCQkJZ2V0X3N0YV9pbmRleCh2aWYsIHN0YV9wcml2KSk7CiAJCXdjbjM2eHhfc21kX2FkZF9iYSh3Y24pOwogCQl3Y24zNnh4X3NtZF90cmlnZ2VyX2JhKHdjbiwgZ2V0X3N0YV9pbmRleCh2aWYsIHN0YV9wcml2KSk7Ci0JCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDoKIAkJd2NuMzZ4eF9zbWRfZGVsX2JhKHdjbiwgdGlkLCBnZXRfc3RhX2luZGV4KHZpZiwgc3RhX3ByaXYpKTsKIAkJYnJlYWs7CiAJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQ6CisJCXNwaW5fbG9ja19iaCgmc3RhX3ByaXYtPmFtcGR1X2xvY2spOworCQlzdGFfcHJpdi0+YW1wZHVfc3RhdGVbdGlkXSA9IFdDTjM2WFhfQU1QRFVfU1RBUlQ7CisJCXNwaW5fdW5sb2NrX2JoKCZzdGFfcHJpdi0+YW1wZHVfbG9jayk7CisKIAkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUodmlmLCBzdGEtPmFkZHIsIHRpZCk7CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOgorCQlzcGluX2xvY2tfYmgoJnN0YV9wcml2LT5hbXBkdV9sb2NrKTsKKwkJc3RhX3ByaXYtPmFtcGR1X3N0YXRlW3RpZF0gPSBXQ04zNlhYX0FNUERVX09QRVJBVElPTkFMOworCQlzcGluX3VubG9ja19iaCgmc3RhX3ByaXYtPmFtcGR1X2xvY2spOworCiAJCXdjbjM2eHhfc21kX2FkZF9iYV9zZXNzaW9uKHdjbiwgc3RhLCB0aWQsIHNzbiwgMSwKIAkJCWdldF9zdGFfaW5kZXgodmlmLCBzdGFfcHJpdikpOwogCQlicmVhazsKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QX0ZMVVNIOgogCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUT1BfRkxVU0hfQ09OVDoKIAljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVE9QX0NPTlQ6CisJCXNwaW5fbG9ja19iaCgmc3RhX3ByaXYtPmFtcGR1X2xvY2spOworCQlzdGFfcHJpdi0+YW1wZHVfc3RhdGVbdGlkXSA9IFdDTjM2WFhfQU1QRFVfTk9ORTsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YV9wcml2LT5hbXBkdV9sb2NrKTsKKwogCQlpZWVlODAyMTFfc3RvcF90eF9iYV9jYl9pcnFzYWZlKHZpZiwgc3RhLT5hZGRyLCB0aWQpOwogCQlicmVhazsKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvc21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9zbWQuYwppbmRleCA2Mzk4NjkzLi42OWVkMzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9zbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC9zbWQuYwpAQCAtMjEsNiArMjEsNjEgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlICJzbWQuaCIKIAorc3RydWN0IHdjbjM2eHhfY2ZnX3ZhbCB7CisJdTMyIGNmZ19pZDsKKwl1MzIgdmFsdWU7Cit9OworCisjZGVmaW5lIFdDTjM2WFhfQ0ZHX1ZBTChpZCwgdmFsKSBcCit7IFwKKwkuY2ZnX2lkID0gV0NOMzZYWF9IQUxfQ0ZHXyAjIyBpZCwgXAorCS52YWx1ZSA9IHZhbCBcCit9CisKK3N0YXRpYyBzdHJ1Y3Qgd2NuMzZ4eF9jZmdfdmFsIHdjbjM2eHhfY2ZnX3ZhbHNbXSA9IHsKKwlXQ04zNlhYX0NGR19WQUwoQ1VSUkVOVF9UWF9BTlRFTk5BLCAxKSwKKwlXQ04zNlhYX0NGR19WQUwoQ1VSUkVOVF9SWF9BTlRFTk5BLCAxKSwKKwlXQ04zNlhYX0NGR19WQUwoTE9XX0dBSU5fT1ZFUlJJREUsIDApLAorCVdDTjM2WFhfQ0ZHX1ZBTChQT1dFUl9TVEFURV9QRVJfQ0hBSU4sIDc4NSksCisJV0NOMzZYWF9DRkdfVkFMKENBTF9QRVJJT0QsIDUpLAorCVdDTjM2WFhfQ0ZHX1ZBTChDQUxfQ09OVFJPTCwgMSksCisJV0NOMzZYWF9DRkdfVkFMKFBST1hJTUlUWSwgMCksCisJV0NOMzZYWF9DRkdfVkFMKE5FVFdPUktfREVOU0lUWSwgMyksCisJV0NOMzZYWF9DRkdfVkFMKE1BWF9NRURJVU1fVElNRSwgNjAwMCksCisJV0NOMzZYWF9DRkdfVkFMKE1BWF9NUERVU19JTl9BTVBEVSwgNjQpLAorCVdDTjM2WFhfQ0ZHX1ZBTChSVFNfVEhSRVNIT0xELCAyMzQ3KSwKKwlXQ04zNlhYX0NGR19WQUwoU0hPUlRfUkVUUllfTElNSVQsIDYpLAorCVdDTjM2WFhfQ0ZHX1ZBTChMT05HX1JFVFJZX0xJTUlULCA2KSwKKwlXQ04zNlhYX0NGR19WQUwoRlJBR01FTlRBVElPTl9USFJFU0hPTEQsIDgwMDApLAorCVdDTjM2WFhfQ0ZHX1ZBTChEWU5BTUlDX1RIUkVTSE9MRF9aRVJPLCA1KSwKKwlXQ04zNlhYX0NGR19WQUwoRFlOQU1JQ19USFJFU0hPTERfT05FLCAxMCksCisJV0NOMzZYWF9DRkdfVkFMKERZTkFNSUNfVEhSRVNIT0xEX1RXTywgMTUpLAorCVdDTjM2WFhfQ0ZHX1ZBTChGSVhFRF9SQVRFLCAwKSwKKwlXQ04zNlhYX0NGR19WQUwoUkVUUllSQVRFX1BPTElDWSwgNCksCisJV0NOMzZYWF9DRkdfVkFMKFJFVFJZUkFURV9TRUNPTkRBUlksIDApLAorCVdDTjM2WFhfQ0ZHX1ZBTChSRVRSWVJBVEVfVEVSVElBUlksIDApLAorCVdDTjM2WFhfQ0ZHX1ZBTChGT1JDRV9QT0xJQ1lfUFJPVEVDVElPTiwgNSksCisJV0NOMzZYWF9DRkdfVkFMKEZJWEVEX1JBVEVfTVVMVElDQVNUXzI0R0haLCAxKSwKKwlXQ04zNlhYX0NGR19WQUwoRklYRURfUkFURV9NVUxUSUNBU1RfNUdIWiwgNSksCisJV0NOMzZYWF9DRkdfVkFMKERFRkFVTFRfUkFURV9JTkRFWF81R0haLCA1KSwKKwlXQ04zNlhYX0NGR19WQUwoTUFYX0JBX1NFU1NJT05TLCA0MCksCisJV0NOMzZYWF9DRkdfVkFMKFBTX0RBVEFfSU5BQ1RJVklUWV9USU1FT1VULCAyMDApLAorCVdDTjM2WFhfQ0ZHX1ZBTChQU19FTkFCTEVfQkNOX0ZJTFRFUiwgMSksCisJV0NOMzZYWF9DRkdfVkFMKFBTX0VOQUJMRV9SU1NJX01PTklUT1IsIDEpLAorCVdDTjM2WFhfQ0ZHX1ZBTChOVU1fQkVBQ09OX1BFUl9SU1NJX0FWRVJBR0UsIDIwKSwKKwlXQ04zNlhYX0NGR19WQUwoU1RBVFNfUEVSSU9ELCAxMCksCisJV0NOMzZYWF9DRkdfVkFMKENGUF9NQVhfRFVSQVRJT04sIDMwMDAwKSwKKwlXQ04zNlhYX0NGR19WQUwoRlJBTUVfVFJBTlNfRU5BQkxFRCwgMCksCisJV0NOMzZYWF9DRkdfVkFMKEJBX1RIUkVTSE9MRF9ISUdILCAxMjgpLAorCVdDTjM2WFhfQ0ZHX1ZBTChNQVhfQkFfQlVGRkVSUywgMjU2MCksCisJV0NOMzZYWF9DRkdfVkFMKERZTkFNSUNfUFNfUE9MTF9WQUxVRSwgMCksCisJV0NOMzZYWF9DRkdfVkFMKFRYX1BXUl9DVFJMX0VOQUJMRSwgMSksCisJV0NOMzZYWF9DRkdfVkFMKEVOQUJMRV9DTE9TRV9MT09QLCAxKSwKKwlXQ04zNlhYX0NGR19WQUwoRU5BQkxFX0xQV1JfSU1HX1RSQU5TSVRJT04sIDApLAorCVdDTjM2WFhfQ0ZHX1ZBTChNQVhfQVNTT0NfTElNSVQsIDEwKSwKKwlXQ04zNlhYX0NGR19WQUwoRU5BQkxFX01DQ19BREFQVElWRV9TQ0hFRFVMRVIsIDApLAorfTsKKwogc3RhdGljIGludCBwdXRfY2ZnX3Rsdl91MzIoc3RydWN0IHdjbjM2eHggKndjbiwgc2l6ZV90ICpsZW4sIHUzMiBpZCwgdTMyIHZhbHVlKQogewogCXN0cnVjdCB3Y24zNnh4X2hhbF9jZmcgKmVudHJ5OwpAQCAtMzU3LDggKzQxMiwxMCBAQAogCiBpbnQgd2NuMzZ4eF9zbWRfc3RhcnQoc3RydWN0IHdjbjM2eHggKndjbikKIHsKLQlzdHJ1Y3Qgd2NuMzZ4eF9oYWxfbWFjX3N0YXJ0X3JlcV9tc2cgbXNnX2JvZHk7CisJc3RydWN0IHdjbjM2eHhfaGFsX21hY19zdGFydF9yZXFfbXNnIG1zZ19ib2R5LCAqYm9keTsKIAlpbnQgcmV0ID0gMDsKKwlpbnQgaTsKKwlzaXplX3QgbGVuOwogCiAJbXV0ZXhfbG9jaygmd2NuLT5oYWxfbXV0ZXgpOwogCUlOSVRfSEFMX01TRyhtc2dfYm9keSwgV0NOMzZYWF9IQUxfU1RBUlRfUkVRKTsKQEAgLTM2OCwxMCArNDI1LDIyIEBACiAKIAlQUkVQQVJFX0hBTF9CVUYod2NuLT5oYWxfYnVmLCBtc2dfYm9keSk7CiAKKwlib2R5ID0gKHN0cnVjdCB3Y24zNnh4X2hhbF9tYWNfc3RhcnRfcmVxX21zZyAqKXdjbi0+aGFsX2J1ZjsKKwlsZW4gPSBib2R5LT5oZWFkZXIubGVuOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2NuMzZ4eF9jZmdfdmFscyk7IGkrKykgeworCQlyZXQgPSBwdXRfY2ZnX3Rsdl91MzIod2NuLCAmbGVuLCB3Y24zNnh4X2NmZ192YWxzW2ldLmNmZ19pZCwKKwkJCQkgICAgICB3Y24zNnh4X2NmZ192YWxzW2ldLnZhbHVlKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKwlib2R5LT5oZWFkZXIubGVuID0gbGVuOworCWJvZHktPnBhcmFtcy5sZW4gPSBsZW4gLSBzaXplb2YoKmJvZHkpOworCiAJd2NuMzZ4eF9kYmcoV0NOMzZYWF9EQkdfSEFMLCAiaGFsIHN0YXJ0IHR5cGUgJWRcbiIsCiAJCSAgICBtc2dfYm9keS5wYXJhbXMudHlwZSk7CiAKLQlyZXQgPSB3Y24zNnh4X3NtZF9zZW5kX2FuZF93YWl0KHdjbiwgbXNnX2JvZHkuaGVhZGVyLmxlbik7CisJcmV0ID0gd2NuMzZ4eF9zbWRfc2VuZF9hbmRfd2FpdCh3Y24sIGJvZHktPmhlYWRlci5sZW4pOwogCWlmIChyZXQpIHsKIAkJd2NuMzZ4eF9lcnIoIlNlbmRpbmcgaGFsX3N0YXJ0IGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvdHhyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvdHhyeC5jCmluZGV4IDMyYmIyNmEuLjliZWM4MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L3R4cnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC90eHJ4LmMKQEAgLTkzLDYgKzkzLDcgQEAKIAkJYmQtPnBkdS5tcGR1X2hlYWRlcl9vZmY7CiAJYmQtPnBkdS5tcGR1X2xlbiA9IGxlbjsKIAliZC0+cGR1LnRpZCA9IHRpZDsKKwliZC0+cGR1LmJkX3NzbiA9IFdDTjM2WFhfVFhCRF9TU05fRklMTF9EUFVfUU9TOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB3Y24zNnh4X3ZpZiAqZ2V0X3ZpZl9ieV9hZGRyKHN0cnVjdCB3Y24zNnh4ICp3Y24sCkBAIC0xMTAsMTUgKzExMSw1NCBAQAogCXdjbjM2eHhfd2FybigidmlmICVwTSBub3QgZm91bmRcbiIsIGFkZHIpOwogCXJldHVybiBOVUxMOwogfQorCitzdGF0aWMgdm9pZCB3Y24zNnh4X3R4X3N0YXJ0X2FtcGR1KHN0cnVjdCB3Y24zNnh4ICp3Y24sCisJCQkJICAgc3RydWN0IHdjbjM2eHhfc3RhICpzdGFfcHJpdiwKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YTsKKwl1OCAqcWMsIHRpZDsKKworCWlmICghY29uZl9pc19odCgmd2NuLT5ody0+Y29uZikpCisJCXJldHVybjsKKworCXN0YSA9IHdjbjM2eHhfcHJpdl90b19zdGEoc3RhX3ByaXYpOworCisJaWYgKFdBUk5fT04oIWllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKSkKKwkJcmV0dXJuOworCisJaWYgKHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpID09IElFRUU4MDIxMV9BQ19WTykKKwkJcmV0dXJuOworCisJcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKKwl0aWQgPSBxY1swXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOworCisJc3Bpbl9sb2NrKCZzdGFfcHJpdi0+YW1wZHVfbG9jayk7CisJaWYgKHN0YV9wcml2LT5hbXBkdV9zdGF0ZVt0aWRdICE9IFdDTjM2WFhfQU1QRFVfTk9ORSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJaWYgKHN0YV9wcml2LT5ub25fYWdnX2ZyYW1lX2N0KysgPj0gV0NOMzZYWF9BTVBEVV9TVEFSVF9USFJFU0gpIHsKKwkJc3RhX3ByaXYtPmFtcGR1X3N0YXRlW3RpZF0gPSBXQ04zNlhYX0FNUERVX1NUQVJUOworCQlzdGFfcHJpdi0+bm9uX2FnZ19mcmFtZV9jdCA9IDA7CisJCWllZWU4MDIxMV9zdGFydF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkLCAwKTsKKwl9CitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrKCZzdGFfcHJpdi0+YW1wZHVfbG9jayk7Cit9CisKIHN0YXRpYyB2b2lkIHdjbjM2eHhfc2V0X3R4X2RhdGEoc3RydWN0IHdjbjM2eHhfdHhfYmQgKmJkLAogCQkJCXN0cnVjdCB3Y24zNnh4ICp3Y24sCiAJCQkJc3RydWN0IHdjbjM2eHhfdmlmICoqdmlmX3ByaXYsCiAJCQkJc3RydWN0IHdjbjM2eHhfc3RhICpzdGFfcHJpdiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAorCQkJCXN0cnVjdCBza19idWZmICpza2IsCiAJCQkJYm9vbCBiY2FzdCkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBOVUxMOwogCXN0cnVjdCB3Y24zNnh4X3ZpZiAqX192aWZfcHJpdiA9IE5VTEw7CisJYm9vbCBpc19kYXRhX3FvczsKKwogCWJkLT5iZF9yYXRlID0gV0NOMzZYWF9CRF9SQVRFX0RBVEE7CiAKIAkvKgpAQCAtMTU3LDE0ICsxOTcsMjYgQEAKIAkJYmQtPmFja19wb2xpY3kgPSAxOwogCX0KIAkqdmlmX3ByaXYgPSBfX3ZpZl9wcml2OworCisJaXNfZGF0YV9xb3MgPSBpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKTsKKworCXdjbjM2eHhfc2V0X3R4X3BkdShiZCwKKwkJCSAgIGlzX2RhdGFfcW9zID8KKwkJCSAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3Fvc19oZHIpIDoKKwkJCSAgIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciksCisJCQkgICBza2ItPmxlbiwgc3RhX3ByaXYgPyBzdGFfcHJpdi0+dGlkIDogMCk7CisKKwlpZiAoc3RhX3ByaXYgJiYgaXNfZGF0YV9xb3MpCisJCXdjbjM2eHhfdHhfc3RhcnRfYW1wZHUod2NuLCBzdGFfcHJpdiwgc2tiKTsKIH0KIAogc3RhdGljIHZvaWQgd2NuMzZ4eF9zZXRfdHhfbWdtdChzdHJ1Y3Qgd2NuMzZ4eF90eF9iZCAqYmQsCiAJCQkJc3RydWN0IHdjbjM2eHggKndjbiwKIAkJCQlzdHJ1Y3Qgd2NuMzZ4eF92aWYgKip2aWZfcHJpdiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyLAorCQkJCXN0cnVjdCBza19idWZmICpza2IsCiAJCQkJYm9vbCBiY2FzdCkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCB3Y24zNnh4X3ZpZiAqX192aWZfcHJpdiA9CiAJCWdldF92aWZfYnlfYWRkcih3Y24sIGhkci0+YWRkcjIpOwogCWJkLT5zdGFfaW5kZXggPSBfX3ZpZl9wcml2LT5zZWxmX3N0YV9pbmRleDsKQEAgLTE5OCw2ICsyNTAsMTIgQEAKIAl9IGVsc2UKIAkJYmQtPnF1ZXVlX2lkID0gV0NOMzZYWF9UWF9VX1dRX0lEOwogCSp2aWZfcHJpdiA9IF9fdmlmX3ByaXY7CisKKwl3Y24zNnh4X3NldF90eF9wZHUoYmQsCisJCQkgICBpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSA/CisJCQkgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NfaGRyKSA6CisJCQkgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpLAorCQkJICAgc2tiLT5sZW4sIFdDTjM2WFhfVElEKTsKIH0KIAogaW50IHdjbjM2eHhfc3RhcnRfdHgoc3RydWN0IHdjbjM2eHggKndjbiwKQEAgLTIzNyw3ICsyOTUsNyBAQAogCiAJYmQtPmRwdV9yZiA9IFdDTjM2WFhfQk1VX1dRX1RYOwogCi0JYmQtPnR4X2NvbXAgPSBpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUzsKKwliZC0+dHhfY29tcCA9ICEhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTKTsKIAlpZiAoYmQtPnR4X2NvbXApIHsKIAkJd2NuMzZ4eF9kYmcoV0NOMzZYWF9EQkdfRFhFLCAiVFhfQUNLIHN0YXR1cyByZXF1ZXN0ZWRcbiIpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmd2NuLT5keGVfbG9jaywgZmxhZ3MpOwpAQCAtMjU5LDIyICszMTcsMTEgQEAKIAl9CiAKIAkvKiBEYXRhIGZyYW1lcyBzZXJ2ZWQgZmlyc3QqLwotCWlmIChpc19sb3cpIHsKLQkJd2NuMzZ4eF9zZXRfdHhfZGF0YShiZCwgd2NuLCAmdmlmX3ByaXYsIHN0YV9wcml2LCBoZHIsIGJjYXN0KTsKLQkJd2NuMzZ4eF9zZXRfdHhfcGR1KGJkLAotCQkJICAgaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkgPwotCQkJICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcW9zX2hkcikgOgotCQkJICAgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSwKLQkJCSAgIHNrYi0+bGVuLCBzdGFfcHJpdiA/IHN0YV9wcml2LT50aWQgOiAwKTsKLQl9IGVsc2UgeworCWlmIChpc19sb3cpCisJCXdjbjM2eHhfc2V0X3R4X2RhdGEoYmQsIHdjbiwgJnZpZl9wcml2LCBzdGFfcHJpdiwgc2tiLCBiY2FzdCk7CisJZWxzZQogCQkvKiBNR01UIGFuZCBDVFJMIGZyYW1lcyBhcmUgaGFuZGVsZCBoZXJlKi8KLQkJd2NuMzZ4eF9zZXRfdHhfbWdtdChiZCwgd2NuLCAmdmlmX3ByaXYsIGhkciwgYmNhc3QpOwotCQl3Y24zNnh4X3NldF90eF9wZHUoYmQsCi0JCQkgICBpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSA/Ci0JCQkgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9xb3NfaGRyKSA6Ci0JCQkgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpLAotCQkJICAgc2tiLT5sZW4sIFdDTjM2WFhfVElEKTsKLQl9CisJCXdjbjM2eHhfc2V0X3R4X21nbXQoYmQsIHdjbiwgJnZpZl9wcml2LCBza2IsIGJjYXN0KTsKIAogCWJ1ZmZfdG9fYmUoKHUzMiAqKWJkLCBzaXplb2YoKmJkKS9zaXplb2YodTMyKSk7CiAJYmQtPnR4X2JkX3NpZ24gPSAweGJkYmRiZGJkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvdHhyeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvdHhyeC5oCmluZGV4IGJiZmJjZjguLjAzMjIxNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L3R4cnguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC90eHJ4LmgKQEAgLTMyLDYgKzMyLDEyIEBACiAjZGVmaW5lIFdDTjM2WFhfQkRfUkFURV9NR01UIDIKICNkZWZpbmUgV0NOMzZYWF9CRF9SQVRFX0NUUkwgMwogCitlbnVtIHdjbjM2eHhfdHhiZF9zc25fdHlwZSB7CisJV0NOMzZYWF9UWEJEX1NTTl9GSUxMX0hPU1QgPSAwLAorCVdDTjM2WFhfVFhCRF9TU05fRklMTF9EUFVfTk9OX1FPUyA9IDEsCisJV0NOMzZYWF9UWEJEX1NTTl9GSUxMX0RQVV9RT1MgPSAyLAorfTsKKwogc3RydWN0IHdjbjM2eHhfcGR1IHsKIAl1MzIJZHB1X2ZiOjg7CiAJdTMyCWFkdV9mYjo4OwpAQCAtNTAsNyArNTYsOCBAQAogCS8qIDB4MGMqLwogCXUzMglyZXNlcnZlZDQ6ODsKIAl1MzIJdGlkOjQ7Ci0JdTMyCXJlc2VydmVkMzo0OworCXUzMgliZF9zc246MjsKKwl1MzIJcmVzZXJ2ZWQzOjI7CiAJdTMyCW1wZHVfbGVuOjE2OwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvd2NuMzZ4eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3djbjM2eHgvd2NuMzZ4eC5oCmluZGV4IGYwZmI4MWQuLjdiNDFlODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93Y24zNnh4L3djbjM2eHguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2NuMzZ4eC93Y24zNnh4LmgKQEAgLTMyLDYgKzMyLDkgQEAKICNkZWZpbmUgV0xBTl9OVl9GSUxFICAgICAgICAgICAgICAgIndsYW4vcHJpbWEvV0NOU1NfcWNvbV93bGFuX252LmJpbiIKICNkZWZpbmUgV0NOMzZYWF9BR0dSX0JVRkZFUl9TSVpFIDY0CiAKKy8qIEhvdyBtYW55IGZyYW1lcyB1bnRpbCB3ZSBzdGFydCBhLW1wZHUgVFggc2Vzc2lvbiAqLworI2RlZmluZSBXQ04zNlhYX0FNUERVX1NUQVJUX1RIUkVTSAkyMAorCiBleHRlcm4gdW5zaWduZWQgaW50IHdjbjM2eHhfZGJnX21hc2s7CiAKIGVudW0gd2NuMzZ4eF9kZWJ1Z19tYXNrIHsKQEAgLTc0LDYgKzc3LDEzIEBACiAJCQkgICAgICAgYnVmLCBsZW4sIGZhbHNlKTsJCVwKIH0gd2hpbGUgKDApCiAKK2VudW0gd2NuMzZ4eF9hbXBkdV9zdGF0ZSB7CisJV0NOMzZYWF9BTVBEVV9OT05FLAorCVdDTjM2WFhfQU1QRFVfSU5JVCwKKwlXQ04zNlhYX0FNUERVX1NUQVJULAorCVdDTjM2WFhfQU1QRFVfT1BFUkFUSU9OQUwsCit9OworCiAjZGVmaW5lIFdDTjM2WFhfSFdfQ0hBTk5FTChfX3djbikgKF9fd2NuLT5ody0+Y29uZi5jaGFuZGVmLmNoYW4tPmh3X3ZhbHVlKQogI2RlZmluZSBXQ04zNlhYX0JBTkQoX193Y24pIChfX3djbi0+aHctPmNvbmYuY2hhbmRlZi5jaGFuLT5iYW5kKQogI2RlZmluZSBXQ04zNlhYX0NFTlRFUl9GUkVRKF9fd2NuKSAoX193Y24tPmh3LT5jb25mLmNoYW5kZWYuY2hhbi0+Y2VudGVyX2ZyZXEpCkBAIC0xNjUsNiArMTc1LDEwIEBACiAJYm9vbCBpc19kYXRhX2VuY3J5cHRlZDsKIAkvKiBSYXRlcyAqLwogCXN0cnVjdCB3Y24zNnh4X2hhbF9zdXBwb3J0ZWRfcmF0ZXMgc3VwcG9ydGVkX3JhdGVzOworCisJc3BpbmxvY2tfdCBhbXBkdV9sb2NrOwkJLyogcHJvdGVjdHMgbmV4dCB0d28gZmllbGRzICovCisJZW51bSB3Y24zNnh4X2FtcGR1X3N0YXRlIGFtcGR1X3N0YXRlWzE2XTsKKwlpbnQgbm9uX2FnZ19mcmFtZV9jdDsKIH07CiBzdHJ1Y3Qgd2NuMzZ4eF9keGVfY2g7CiBzdHJ1Y3Qgd2NuMzZ4eCB7CkBAIC0yNDMsNCArMjU3LDEwIEBACiB9CiB2b2lkIHdjbjM2eHhfc2V0X2RlZmF1bHRfcmF0ZXMoc3RydWN0IHdjbjM2eHhfaGFsX3N1cHBvcnRlZF9yYXRlcyAqcmF0ZXMpOwogCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqd2NuMzZ4eF9wcml2X3RvX3N0YShzdHJ1Y3Qgd2NuMzZ4eF9zdGEgKnN0YV9wcml2KQoreworCXJldHVybiBjb250YWluZXJfb2YoKHZvaWQgKilzdGFfcHJpdiwgc3RydWN0IGllZWU4MDIxMV9zdGEsIGRydl9wcml2KTsKK30KKwogI2VuZGlmCS8qIF9XQ04zNlhYX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvS2NvbmZpZwppbmRleCA0ODE2ODBhLi5jZThjMDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL0tjb25maWcKQEAgLTM5LDEyICszOSwzIEBACiAJICBvcHRpb24gaWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIGRlYnVnZ2luZyB0aGUgZHJpdmVyLgogCiAJICBJZiB1bnN1cmUsIHNheSBZIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRlYnVnIHByb2JsZW1zLgotCi1jb25maWcgV0lMNjIxMF9QTEFURk9STV9NU00KLQlib29sICJ3aWw2MjEwIE1TTSBwbGF0Zm9ybSBzcGVjaWZpYyBzdXBwb3J0IgotCWRlcGVuZHMgb24gV0lMNjIxMAotCWRlcGVuZHMgb24gQVJDSF9NU00KLQlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB3aWw2MjEwIGRyaXZlciBzdXBwb3J0IGZvciBNU00KLQkgIHBsYXRmb3JtIHNwZWNpZmljIGZlYXR1cmVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL01ha2VmaWxlCmluZGV4IDhhZDRiNWYuLmNhYTcxN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw2IEBACiB3aWw2MjEwLXkgKz0gZncubwogd2lsNjIxMC0kKENPTkZJR19XSUw2MjEwX1RSQUNJTkcpICs9IHRyYWNlLm8KIHdpbDYyMTAteSArPSB3aWxfcGxhdGZvcm0ubwotd2lsNjIxMC0kKENPTkZJR19XSUw2MjEwX1BMQVRGT1JNX01TTSkgKz0gd2lsX3BsYXRmb3JtX21zbS5vCiB3aWw2MjEwLXkgKz0gZXRodG9vbC5vCiAKICMgZm9yIHRyYWNpbmcgZnJhbWV3b3JrIHRvIGZpbmQgdHJhY2UuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2NmZzgwMjExLmMKaW5kZXggMzgzMzJhNi4uMmQ1ZWEyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvY2ZnODAyMTEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9jZmc4MDIxMS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE0IFF1YWxjb21tIEF0aGVyb3MsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAxMi0yMDE1IFF1YWxjb21tIEF0aGVyb3MsIEluYy4KICAqCiAgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKICAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKQEAgLTE0MiwxNCArMTQyLDE0IEBACiAKIAlzaW5mby0+Z2VuZXJhdGlvbiA9IHdpbC0+c2luZm9fZ2VuOwogCi0Jc2luZm8tPmZpbGxlZCA9IFNUQVRJT05fSU5GT19SWF9CWVRFUyB8Ci0JCQlTVEFUSU9OX0lORk9fVFhfQllURVMgfAotCQkJU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFMgfAotCQkJU1RBVElPTl9JTkZPX1RYX1BBQ0tFVFMgfAotCQkJU1RBVElPTl9JTkZPX1JYX0JJVFJBVEUgfAotCQkJU1RBVElPTl9JTkZPX1RYX0JJVFJBVEUgfAotCQkJU1RBVElPTl9JTkZPX1JYX0RST1BfTUlTQyB8Ci0JCQlTVEFUSU9OX0lORk9fVFhfRkFJTEVEOworCXNpbmZvLT5maWxsZWQgPSBCSVQoTkw4MDIxMV9TVEFfSU5GT19SWF9CWVRFUykgfAorCQkJQklUKE5MODAyMTFfU1RBX0lORk9fVFhfQllURVMpIHwKKwkJCUJJVChOTDgwMjExX1NUQV9JTkZPX1JYX1BBQ0tFVFMpIHwKKwkJCUJJVChOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFMpIHwKKwkJCUJJVChOTDgwMjExX1NUQV9JTkZPX1JYX0JJVFJBVEUpIHwKKwkJCUJJVChOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUpIHwKKwkJCUJJVChOTDgwMjExX1NUQV9JTkZPX1JYX0RST1BfTUlTQykgfAorCQkJQklUKE5MODAyMTFfU1RBX0lORk9fVFhfRkFJTEVEKTsKIAogCXNpbmZvLT50eHJhdGUuZmxhZ3MgPSBSQVRFX0lORk9fRkxBR1NfTUNTIHwgUkFURV9JTkZPX0ZMQUdTXzYwRzsKIAlzaW5mby0+dHhyYXRlLm1jcyA9IGxlMTZfdG9fY3B1KHJlcGx5LmV2dC5iZl9tY3MpOwpAQCAtMTYyLDggKzE2Miw4IEBACiAJc2luZm8tPnR4X3BhY2tldHMgPSBzdGF0cy0+dHhfcGFja2V0czsKIAlzaW5mby0+dHhfZmFpbGVkID0gc3RhdHMtPnR4X2Vycm9yczsKIAotCWlmICh0ZXN0X2JpdCh3aWxfc3RhdHVzX2Z3Y29ubmVjdGVkLCAmd2lsLT5zdGF0dXMpKSB7Ci0JCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1NJR05BTDsKKwlpZiAodGVzdF9iaXQod2lsX3N0YXR1c19md2Nvbm5lY3RlZCwgd2lsLT5zdGF0dXMpKSB7CisJCXNpbmZvLT5maWxsZWQgfD0gQklUKE5MODAyMTFfU1RBX0lORk9fU0lHTkFMKTsKIAkJc2luZm8tPnNpZ25hbCA9IHJlcGx5LmV2dC5zcWk7CiAJfQogCkBAIC0yODIsNyArMjgyLDcgQEAKIAl9CiAKIAkvKiBGVyBkb24ndCBzdXBwb3J0IHNjYW4gYWZ0ZXIgY29ubmVjdGlvbiBhdHRlbXB0ICovCi0JaWYgKHRlc3RfYml0KHdpbF9zdGF0dXNfZG9udHNjYW4sICZ3aWwtPnN0YXR1cykpIHsKKwlpZiAodGVzdF9iaXQod2lsX3N0YXR1c19kb250c2Nhbiwgd2lsLT5zdGF0dXMpKSB7CiAJCXdpbF9lcnIod2lsLCAiQ2FuJ3Qgc2NhbiBub3dcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTMzNCw2ICszMzQsMzAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB2b2lkIHdpbF9wcmludF9jcnlwdG8oc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLAorCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfY3J5cHRvX3NldHRpbmdzICpjKQoreworCWludCBpLCBuOworCisJd2lsX2RiZ19taXNjKHdpbCwgIldQQSB2ZXJzaW9uczogMHglMDh4IGNpcGhlciBncm91cCAweCUwOHhcbiIsCisJCSAgICAgYy0+d3BhX3ZlcnNpb25zLCBjLT5jaXBoZXJfZ3JvdXApOworCXdpbF9kYmdfbWlzYyh3aWwsICJQYWlyd2lzZSBjaXBoZXJzIFslZF0ge1xuIiwgYy0+bl9jaXBoZXJzX3BhaXJ3aXNlKTsKKwluID0gbWluX3QoaW50LCBjLT5uX2NpcGhlcnNfcGFpcndpc2UsIEFSUkFZX1NJWkUoYy0+Y2lwaGVyc19wYWlyd2lzZSkpOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCXdpbF9kYmdfbWlzYyh3aWwsICIgIFslZF0gPSAweCUwOHhcbiIsIGksCisJCQkgICAgIGMtPmNpcGhlcnNfcGFpcndpc2VbaV0pOworCXdpbF9kYmdfbWlzYyh3aWwsICJ9XG4iKTsKKwl3aWxfZGJnX21pc2Mod2lsLCAiQUtNIHN1aXRlcyBbJWRdIHtcbiIsIGMtPm5fYWttX3N1aXRlcyk7CisJbiA9IG1pbl90KGludCwgYy0+bl9ha21fc3VpdGVzLCBBUlJBWV9TSVpFKGMtPmFrbV9zdWl0ZXMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQl3aWxfZGJnX21pc2Mod2lsLCAiICBbJWRdID0gMHglMDh4XG4iLCBpLAorCQkJICAgICBjLT5ha21fc3VpdGVzW2ldKTsKKwl3aWxfZGJnX21pc2Mod2lsLCAifVxuIik7CisJd2lsX2RiZ19taXNjKHdpbCwgIkNvbnRyb2wgcG9ydCA6ICVkLCBldGhfdHlwZSAweCUwNHggbm9fZW5jcnlwdCAlZFxuIiwKKwkJICAgICBjLT5jb250cm9sX3BvcnQsIGJlMTZfdG9fY3B1KGMtPmNvbnRyb2xfcG9ydF9ldGhlcnR5cGUpLAorCQkgICAgIGMtPmNvbnRyb2xfcG9ydF9ub19lbmNyeXB0KTsKK30KKwogc3RhdGljIHZvaWQgd2lsX3ByaW50X2Nvbm5lY3RfcGFyYW1zKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCwKIAkJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQogewpAQCAtMzQ4LDYgKzM3Miw3IEBACiAJCXByaW50X2hleF9kdW1wKEtFUk5fSU5GTywgIiAgU1NJRDogIiwgRFVNUF9QUkVGSVhfT0ZGU0VULAogCQkJICAgICAgIDE2LCAxLCBzbWUtPnNzaWQsIHNtZS0+c3NpZF9sZW4sIHRydWUpOwogCXdpbF9pbmZvKHdpbCwgIiAgUHJpdmFjeTogJXNcbiIsIHNtZS0+cHJpdmFjeSA/ICJzZWN1cmUiIDogIm9wZW4iKTsKKwl3aWxfcHJpbnRfY3J5cHRvKHdpbCwgJnNtZS0+Y3J5cHRvKTsKIH0KIAogc3RhdGljIGludCB3aWxfY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3Qgd2lwaHkgKndpcGh5LApAQCAtMzYyLDggKzM4Nyw4IEBACiAJaW50IGNoOwogCWludCByYyA9IDA7CiAKLQlpZiAodGVzdF9iaXQod2lsX3N0YXR1c19md2Nvbm5lY3RpbmcsICZ3aWwtPnN0YXR1cykgfHwKLQkgICAgdGVzdF9iaXQod2lsX3N0YXR1c19md2Nvbm5lY3RlZCwgJndpbC0+c3RhdHVzKSkKKwlpZiAodGVzdF9iaXQod2lsX3N0YXR1c19md2Nvbm5lY3RpbmcsIHdpbC0+c3RhdHVzKSB8fAorCSAgICB0ZXN0X2JpdCh3aWxfc3RhdHVzX2Z3Y29ubmVjdGVkLCB3aWwtPnN0YXR1cykpCiAJCXJldHVybiAtRUFMUkVBRFk7CiAKIAl3aWxfcHJpbnRfY29ubmVjdF9wYXJhbXMod2lsLCBzbWUpOwpAQCAtNDUwLDE1ICs0NzUsMTYgQEAKIAltZW1jcHkoY29ubi5ic3NpZCwgYnNzLT5ic3NpZCwgRVRIX0FMRU4pOwogCW1lbWNweShjb25uLmRzdF9tYWMsIGJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKIAotCXNldF9iaXQod2lsX3N0YXR1c19md2Nvbm5lY3RpbmcsICZ3aWwtPnN0YXR1cyk7CisJc2V0X2JpdCh3aWxfc3RhdHVzX2Z3Y29ubmVjdGluZywgd2lsLT5zdGF0dXMpOwogCiAJcmMgPSB3bWlfc2VuZCh3aWwsIFdNSV9DT05ORUNUX0NNRElELCAmY29ubiwgc2l6ZW9mKGNvbm4pKTsKIAlpZiAocmMgPT0gMCkgeworCQluZXRpZl9jYXJyaWVyX29uKG5kZXYpOwogCQkvKiBDb25uZWN0IGNhbiB0YWtlIGxvdHMgb2YgdGltZSAqLwogCQltb2RfdGltZXIoJndpbC0+Y29ubmVjdF90aW1lciwKIAkJCSAgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjAwMCkpOwogCX0gZWxzZSB7Ci0JCWNsZWFyX2JpdCh3aWxfc3RhdHVzX2Z3Y29ubmVjdGluZywgJndpbC0+c3RhdHVzKTsKKwkJY2xlYXJfYml0KHdpbF9zdGF0dXNfZndjb25uZWN0aW5nLCB3aWwtPnN0YXR1cyk7CiAJfQogCiAgb3V0OgpAQCAtNjE4LDE4ICs2NDQsNiBAQAogCQkJICAgICBiLT5hc3NvY3Jlc3BfaWVzLCBiLT5hc3NvY3Jlc3BfaWVzX2xlbik7CiB9CiAKLXN0YXRpYyB2b2lkIHdpbF9wcmludF9jcnlwdG8oc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLAotCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfY3J5cHRvX3NldHRpbmdzICpjKQotewotCXdpbF9kYmdfbWlzYyh3aWwsICJXUEEgdmVyc2lvbnM6IDB4JTA4eCBjaXBoZXIgZ3JvdXAgMHglMDh4XG4iLAotCQkgICAgIGMtPndwYV92ZXJzaW9ucywgYy0+Y2lwaGVyX2dyb3VwKTsKLQl3aWxfZGJnX21pc2Mod2lsLCAiUGFpcndpc2UgY2lwaGVycyBbJWRdXG4iLCBjLT5uX2NpcGhlcnNfcGFpcndpc2UpOwotCXdpbF9kYmdfbWlzYyh3aWwsICJBS00gc3VpdGVzIFslZF1cbiIsIGMtPm5fYWttX3N1aXRlcyk7Ci0Jd2lsX2RiZ19taXNjKHdpbCwgIkNvbnRyb2wgcG9ydCA6ICVkLCBldGhfdHlwZSAweCUwNHggbm9fZW5jcnlwdCAlZFxuIiwKLQkJICAgICBjLT5jb250cm9sX3BvcnQsIGJlMTZfdG9fY3B1KGMtPmNvbnRyb2xfcG9ydF9ldGhlcnR5cGUpLAotCQkgICAgIGMtPmNvbnRyb2xfcG9ydF9ub19lbmNyeXB0KTsKLX0KLQogc3RhdGljIGludCB3aWxfZml4X2Jjb24oc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLAogCQkJc3RydWN0IGNmZzgwMjExX2JlYWNvbl9kYXRhICpiY29uKQogewpAQCAtNzU3LDEyICs3NzEsMTIgQEAKIAogCXdpbC0+c2VjdXJlX3BjcCA9IGluZm8tPnByaXZhY3k7CiAKKwluZXRpZl9jYXJyaWVyX29uKG5kZXYpOworCiAJcmMgPSB3bWlfcGNwX3N0YXJ0KHdpbCwgaW5mby0+YmVhY29uX2ludGVydmFsLCB3bWlfbmV0dHlwZSwKIAkJCSAgIGNoYW5uZWwtPmh3X3ZhbHVlKTsKIAlpZiAocmMpCi0JCWdvdG8gb3V0OwotCi0JbmV0aWZfY2Fycmllcl9vbihuZGV2KTsKKwkJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiAKIG91dDoKIAltdXRleF91bmxvY2soJndpbC0+bXV0ZXgpOwpAQCAtNzcyLDIzICs3ODYsMjYgQEAKIHN0YXRpYyBpbnQgd2lsX2NmZzgwMjExX3N0b3BfYXAoc3RydWN0IHdpcGh5ICp3aXBoeSwKIAkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKLQlpbnQgcmMsIHJjMTsKIAlzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwgPSB3aXBoeV90b193aWwod2lwaHkpOwogCiAJd2lsX2RiZ19taXNjKHdpbCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAorCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwogCXdpbF9zZXRfcmVjb3Zlcnlfc3RhdGUod2lsLCBmd19yZWNvdmVyeV9pZGxlKTsKIAogCW11dGV4X2xvY2soJndpbC0+bXV0ZXgpOwogCi0JcmMgPSB3bWlfcGNwX3N0b3Aod2lsKTsKKwl3bWlfcGNwX3N0b3Aod2lsKTsKIAogCV9fd2lsX2Rvd24od2lsKTsKLQlyYzEgPSBfX3dpbF91cCh3aWwpOworCV9fd2lsX3VwKHdpbCk7CiAKIAltdXRleF91bmxvY2soJndpbC0+bXV0ZXgpOwogCi0JcmV0dXJuIG1pbihyYywgcmMxKTsKKwkvKiBzb21lIGZ1bmN0aW9ucyBhYm92ZSBtaWdodCBmYWlsIChlLmcuIF9fd2lsX3VwKS4gTmV2ZXJ0aGVsZXNzLCB3ZQorCSAqIHJldHVybiBzdWNjZXNzIGJlY2F1c2UgQVAgaGFzIHN0b3BwZWQKKwkgKi8KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB3aWxfY2ZnODAyMTFfZGVsX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwKQEAgLTgwNCw2ICs4MjEsOTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogcHJvYmVfY2xpZW50IGhhbmRsaW5nICovCitzdGF0aWMgdm9pZCB3aWxfcHJvYmVfY2xpZW50X2hhbmRsZShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsCisJCQkJICAgIHN0cnVjdCB3aWxfcHJvYmVfY2xpZW50X3JlcSAqcmVxKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gd2lsX3RvX25kZXYod2lsKTsKKwlzdHJ1Y3Qgd2lsX3N0YV9pbmZvICpzdGEgPSAmd2lsLT5zdGFbcmVxLT5jaWRdOworCS8qIGFzc3VtZSBTVEEgaXMgYWxpdmUgaWYgaXQgaXMgc3RpbGwgY29ubmVjdGVkLAorCSAqIGVsc2UgRlcgd2lsbCBkaXNjb25uZWN0IGl0CisJICovCisJYm9vbCBhbGl2ZSA9IChzdGEtPnN0YXR1cyA9PSB3aWxfc3RhX2Nvbm5lY3RlZCk7CisKKwljZmc4MDIxMV9wcm9iZV9zdGF0dXMobmRldiwgc3RhLT5hZGRyLCByZXEtPmNvb2tpZSwgYWxpdmUsIEdGUF9LRVJORUwpOworfQorCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCAqbmV4dF9wcm9iZV9jbGllbnQoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnJldCA9IE5VTEw7CisKKwltdXRleF9sb2NrKCZ3aWwtPnByb2JlX2NsaWVudF9tdXRleCk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJndpbC0+cHJvYmVfY2xpZW50X3BlbmRpbmcpKSB7CisJCXJldCA9IHdpbC0+cHJvYmVfY2xpZW50X3BlbmRpbmcubmV4dDsKKwkJbGlzdF9kZWwocmV0KTsKKwl9CisKKwltdXRleF91bmxvY2soJndpbC0+cHJvYmVfY2xpZW50X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgd2lsX3Byb2JlX2NsaWVudF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2lsNjIxMF9wcml2LAorCQkJCQkJcHJvYmVfY2xpZW50X3dvcmtlcik7CisJc3RydWN0IHdpbF9wcm9iZV9jbGllbnRfcmVxICpyZXE7CisJc3RydWN0IGxpc3RfaGVhZCAqbGg7CisKKwl3aGlsZSAoKGxoID0gbmV4dF9wcm9iZV9jbGllbnQod2lsKSkgIT0gTlVMTCkgeworCQlyZXEgPSBsaXN0X2VudHJ5KGxoLCBzdHJ1Y3Qgd2lsX3Byb2JlX2NsaWVudF9yZXEsIGxpc3QpOworCisJCXdpbF9wcm9iZV9jbGllbnRfaGFuZGxlKHdpbCwgcmVxKTsKKwkJa2ZyZWUocmVxKTsKKwl9Cit9CisKK3ZvaWQgd2lsX3Byb2JlX2NsaWVudF9mbHVzaChzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpCit7CisJc3RydWN0IHdpbF9wcm9iZV9jbGllbnRfcmVxICpyZXEsICp0OworCisJd2lsX2RiZ19taXNjKHdpbCwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCW11dGV4X2xvY2soJndpbC0+cHJvYmVfY2xpZW50X211dGV4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHQsICZ3aWwtPnByb2JlX2NsaWVudF9wZW5kaW5nLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZyZXEtPmxpc3QpOworCQlrZnJlZShyZXEpOworCX0KKworCW11dGV4X3VubG9jaygmd2lsLT5wcm9iZV9jbGllbnRfbXV0ZXgpOworfQorCitzdGF0aWMgaW50IHdpbF9jZmc4MDIxMV9wcm9iZV9jbGllbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBjb25zdCB1OCAqcGVlciwgdTY0ICpjb29raWUpCit7CisJc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsID0gd2lwaHlfdG9fd2lsKHdpcGh5KTsKKwlzdHJ1Y3Qgd2lsX3Byb2JlX2NsaWVudF9yZXEgKnJlcTsKKwlpbnQgY2lkID0gd2lsX2ZpbmRfY2lkKHdpbCwgcGVlcik7CisKKwl3aWxfZGJnX21pc2Mod2lsLCAiJXMoJXBNID0+IENJRCAlZClcbiIsIF9fZnVuY19fLCBwZWVyLCBjaWQpOworCisJaWYgKGNpZCA8IDApCisJCXJldHVybiAtRU5PTElOSzsKKworCXJlcSA9IGt6YWxsb2Moc2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXEtPmNpZCA9IGNpZDsKKwlyZXEtPmNvb2tpZSA9IGNpZDsKKworCW11dGV4X2xvY2soJndpbC0+cHJvYmVfY2xpZW50X211dGV4KTsKKwlsaXN0X2FkZF90YWlsKCZyZXEtPmxpc3QsICZ3aWwtPnByb2JlX2NsaWVudF9wZW5kaW5nKTsKKwltdXRleF91bmxvY2soJndpbC0+cHJvYmVfY2xpZW50X211dGV4KTsKKworCSpjb29raWUgPSByZXEtPmNvb2tpZTsKKwlxdWV1ZV93b3JrKHdpbC0+d3Ffc2VydmljZSwgJndpbC0+cHJvYmVfY2xpZW50X3dvcmtlcik7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY2ZnODAyMTFfb3BzIHdpbF9jZmc4MDIxMV9vcHMgPSB7CiAJLnNjYW4gPSB3aWxfY2ZnODAyMTFfc2NhbiwKIAkuY29ubmVjdCA9IHdpbF9jZmc4MDIxMV9jb25uZWN0LApAQCAtODIzLDYgKzkzMCw3IEBACiAJLnN0YXJ0X2FwID0gd2lsX2NmZzgwMjExX3N0YXJ0X2FwLAogCS5zdG9wX2FwID0gd2lsX2NmZzgwMjExX3N0b3BfYXAsCiAJLmRlbF9zdGF0aW9uID0gd2lsX2NmZzgwMjExX2RlbF9zdGF0aW9uLAorCS5wcm9iZV9jbGllbnQgPSB3aWxfY2ZnODAyMTFfcHJvYmVfY2xpZW50LAogfTsKIAogc3RhdGljIHZvaWQgd2lsX3dpcGh5X2luaXQoc3RydWN0IHdpcGh5ICp3aXBoeSkKQEAgLTg1NCw2ICs5NjIsNyBAQAogCXdpcGh5LT5jaXBoZXJfc3VpdGVzID0gd2lsX2NpcGhlcl9zdWl0ZXM7CiAJd2lwaHktPm5fY2lwaGVyX3N1aXRlcyA9IEFSUkFZX1NJWkUod2lsX2NpcGhlcl9zdWl0ZXMpOwogCXdpcGh5LT5tZ210X3N0eXBlcyA9IHdpbF9tZ210X3N0eXBlczsKKwl3aXBoeS0+ZmVhdHVyZXMgfD0gTkw4MDIxMV9GRUFUVVJFX1NLX1RYX1NUQVRVUzsKIH0KIAogc3RydWN0IHdpcmVsZXNzX2RldiAqd2lsX2NmZzgwMjExX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvZGVidWdmcy5jCmluZGV4IDRlNmUxNDUuLjQ1YzM1NThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvZGVidWdmcy5jCkBAIC01MCw2ICs1MCw3IEBACiAJCQkgICAgY2hhciBfcywgY2hhciBfaCkKIHsKIAl2b2lkIF9faW9tZW0gKnggPSB3bWlfYWRkcih3aWwsIHZyaW5nLT5od3RhaWwpOworCXUzMiB2OwogCiAJc2VxX3ByaW50ZihzLCAiVlJJTkcgJXMgPSB7XG4iLCBuYW1lKTsKIAlzZXFfcHJpbnRmKHMsICIgIHBhICAgICA9ICVwYWRcbiIsICZ2cmluZy0+cGEpOwpAQCAtNTgsMTAgKzU5LDEyIEBACiAJc2VxX3ByaW50ZihzLCAiICBzd3RhaWwgPSAlZFxuIiwgdnJpbmctPnN3dGFpbCk7CiAJc2VxX3ByaW50ZihzLCAiICBzd2hlYWQgPSAlZFxuIiwgdnJpbmctPnN3aGVhZCk7CiAJc2VxX3ByaW50ZihzLCAiICBod3RhaWwgPSBbMHglMDh4XSAtPiAiLCB2cmluZy0+aHd0YWlsKTsKLQlpZiAoeCkKLQkJc2VxX3ByaW50ZihzLCAiMHglMDh4XG4iLCBpb3JlYWQzMih4KSk7Ci0JZWxzZQorCWlmICh4KSB7CisJCXYgPSBpb3JlYWQzMih4KTsKKwkJc2VxX3ByaW50ZihzLCAiMHglMDh4ID0gJWRcbiIsIHYsIHYpOworCX0gZWxzZSB7CiAJCXNlcV9wdXRzKHMsICI/Pz9cbiIpOworCX0KIAogCWlmICh2cmluZy0+dmEgJiYgKHZyaW5nLT5zaXplIDwgMTAyNSkpIHsKIAkJdWludCBpOwpAQCAtMTAxLDggKzEwNCw4IEBACiAJCQljaGFyIG5hbWVbMTBdOwogCQkJLyogcGVyZm9ybWFuY2UgbW9uaXRvcmluZyAqLwogCQkJY3ljbGVzX3Qgbm93ID0gZ2V0X2N5Y2xlcygpOwotCQkJY3ljbGVzX3QgaWRsZSA9IHR4ZGF0YS0+aWRsZSAqIDEwMDsKLQkJCWN5Y2xlc190IHRvdGFsID0gbm93IC0gdHhkYXRhLT5iZWdpbjsKKwkJCXVpbnQ2NF90IGlkbGUgPSB0eGRhdGEtPmlkbGUgKiAxMDA7CisJCQl1aW50NjRfdCB0b3RhbCA9IG5vdyAtIHR4ZGF0YS0+YmVnaW47CiAKIAkJCWRvX2RpdihpZGxlLCB0b3RhbCk7CiAJCQl0eGRhdGEtPmJlZ2luID0gbm93OwpAQCAtMTEwLDkgKzExMywxMiBAQAogCiAJCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJ0eF8lMmQiLCBpKTsKIAotCQkJc2VxX3ByaW50ZihzLCAiXG4lcE0gQ0lEICVkIFRJRCAlZCBbJTNkfCUzZF0gaWRsZSAlM2QlJVxuIiwKLQkJCQkgICB3aWwtPnN0YVtjaWRdLmFkZHIsIGNpZCwgdGlkLCB1c2VkLCBhdmFpbCwKLQkJCQkgICAoaW50KWlkbGUpOworCQkJc2VxX3ByaW50ZihzLAorCQkJCSAgICJcbiVwTSBDSUQgJWQgVElEICVkIEJBQ0soWyVkXSAlZCBUVSBBJXMpIFslM2R8JTNkXSBpZGxlICUzZCUlXG4iLAorCQkJCSAgIHdpbC0+c3RhW2NpZF0uYWRkciwgY2lkLCB0aWQsCisJCQkJICAgdHhkYXRhLT5hZ2dfd3NpemUsIHR4ZGF0YS0+YWdnX3RpbWVvdXQsCisJCQkJICAgdHhkYXRhLT5hZ2dfYW1zZHUgPyAiKyIgOiAiLSIsCisJCQkJICAgdXNlZCwgYXZhaWwsIChpbnQpaWRsZSk7CiAKIAkJCXdpbF9wcmludF92cmluZyhzLCB3aWwsIG5hbWUsIHZyaW5nLCAnXycsICdIJyk7CiAJCX0KQEAgLTM4NCwyNCArMzkwLDY3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGJnX29mZiBpdHJfY250X29mZltdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkYmdfb2ZmIGxnY19pdHJfY250X29mZltdID0gewogCXsiVFJTSCIsIFNfSVJVR08gfCBTX0lXVVNSLCBIT1NUQUREUihSR0ZfRE1BX0lUUl9DTlRfVFJTSCksIGRvZmZfaW8zMn0sCiAJeyJEQVRBIiwgU19JUlVHTyB8IFNfSVdVU1IsIEhPU1RBRERSKFJHRl9ETUFfSVRSX0NOVF9EQVRBKSwgZG9mZl9pbzMyfSwKIAl7IkNUTCIsICBTX0lSVUdPIHwgU19JV1VTUiwgSE9TVEFERFIoUkdGX0RNQV9JVFJfQ05UX0NSTCksIGRvZmZfaW8zMn0sCiAJe30sCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGRiZ19vZmYgdHhfaXRyX2NudF9vZmZbXSA9IHsKKwl7IlRSU0giLCBTX0lSVUdPIHwgU19JV1VTUiwgSE9TVEFERFIoUkdGX0RNQV9JVFJfVFhfQ05UX1RSU0gpLAorCSBkb2ZmX2lvMzJ9LAorCXsiREFUQSIsIFNfSVJVR08gfCBTX0lXVVNSLCBIT1NUQUREUihSR0ZfRE1BX0lUUl9UWF9DTlRfREFUQSksCisJIGRvZmZfaW8zMn0sCisJeyJDVEwiLCAgU19JUlVHTyB8IFNfSVdVU1IsIEhPU1RBRERSKFJHRl9ETUFfSVRSX1RYX0NOVF9DVEwpLAorCSBkb2ZmX2lvMzJ9LAorCXsiSURMX1RSU0giLCBTX0lSVUdPIHwgU19JV1VTUiwgSE9TVEFERFIoUkdGX0RNQV9JVFJfVFhfSURMX0NOVF9UUlNIKSwKKwkgZG9mZl9pbzMyfSwKKwl7IklETF9EQVRBIiwgU19JUlVHTyB8IFNfSVdVU1IsIEhPU1RBRERSKFJHRl9ETUFfSVRSX1RYX0lETF9DTlRfREFUQSksCisJIGRvZmZfaW8zMn0sCisJeyJJRExfQ1RMIiwgIFNfSVJVR08gfCBTX0lXVVNSLCBIT1NUQUREUihSR0ZfRE1BX0lUUl9UWF9JRExfQ05UX0NUTCksCisJIGRvZmZfaW8zMn0sCisJe30sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGRiZ19vZmYgcnhfaXRyX2NudF9vZmZbXSA9IHsKKwl7IlRSU0giLCBTX0lSVUdPIHwgU19JV1VTUiwgSE9TVEFERFIoUkdGX0RNQV9JVFJfUlhfQ05UX1RSU0gpLAorCSBkb2ZmX2lvMzJ9LAorCXsiREFUQSIsIFNfSVJVR08gfCBTX0lXVVNSLCBIT1NUQUREUihSR0ZfRE1BX0lUUl9SWF9DTlRfREFUQSksCisJIGRvZmZfaW8zMn0sCisJeyJDVEwiLCAgU19JUlVHTyB8IFNfSVdVU1IsIEhPU1RBRERSKFJHRl9ETUFfSVRSX1JYX0NOVF9DVEwpLAorCSBkb2ZmX2lvMzJ9LAorCXsiSURMX1RSU0giLCBTX0lSVUdPIHwgU19JV1VTUiwgSE9TVEFERFIoUkdGX0RNQV9JVFJfUlhfSURMX0NOVF9UUlNIKSwKKwkgZG9mZl9pbzMyfSwKKwl7IklETF9EQVRBIiwgU19JUlVHTyB8IFNfSVdVU1IsIEhPU1RBRERSKFJHRl9ETUFfSVRSX1JYX0lETF9DTlRfREFUQSksCisJIGRvZmZfaW8zMn0sCisJeyJJRExfQ1RMIiwgIFNfSVJVR08gfCBTX0lXVVNSLCBIT1NUQUREUihSR0ZfRE1BX0lUUl9SWF9JRExfQ05UX0NUTCksCisJIGRvZmZfaW8zMn0sCisJe30sCit9OworCiBzdGF0aWMgaW50IHdpbDYyMTBfZGVidWdmc19jcmVhdGVfSVRSX0NOVChzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsCiAJCQkJCSAgc3RydWN0IGRlbnRyeSAqcGFyZW50KQogewotCXN0cnVjdCBkZW50cnkgKmQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIklUUl9DTlQiLCBwYXJlbnQpOworCXN0cnVjdCBkZW50cnkgKmQsICpkdHgsICpkcng7CiAKKwlkID0gZGVidWdmc19jcmVhdGVfZGlyKCJJVFJfQ05UIiwgcGFyZW50KTsKIAlpZiAoSVNfRVJSX09SX05VTEwoZCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0Jd2lsNjIxMF9kZWJ1Z2ZzX2luaXRfb2Zmc2V0KHdpbCwgZCwgKHZvaWQgKiBfX2ZvcmNlKXdpbC0+Y3NyLAotCQkJCSAgICBpdHJfY250X29mZik7CisJZHR4ID0gZGVidWdmc19jcmVhdGVfZGlyKCJUWCIsIGQpOworCWRyeCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiUlgiLCBkKTsKKwlpZiAoSVNfRVJSX09SX05VTEwoZHR4KSB8fCBJU19FUlJfT1JfTlVMTChkcngpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAorCXdpbDYyMTBfZGVidWdmc19pbml0X29mZnNldCh3aWwsIGQsICh2b2lkICogX19mb3JjZSl3aWwtPmNzciwKKwkJCQkgICAgbGdjX2l0cl9jbnRfb2ZmKTsKKworCXdpbDYyMTBfZGVidWdmc19pbml0X29mZnNldCh3aWwsIGR0eCwgKHZvaWQgKiBfX2ZvcmNlKXdpbC0+Y3NyLAorCQkJCSAgICB0eF9pdHJfY250X29mZik7CisKKwl3aWw2MjEwX2RlYnVnZnNfaW5pdF9vZmZzZXQod2lsLCBkcngsICh2b2lkICogX19mb3JjZSl3aWwtPmNzciwKKwkJCQkgICAgcnhfaXRyX2NudF9vZmYpOwogCXJldHVybiAwOwogfQogCkBAIC01NTgsNiArNjA3LDg3IEBACiAJLm9wZW4gID0gc2ltcGxlX29wZW4sCiB9OwogCisvKiBibG9jayBhY2sgY29udHJvbCwgd3JpdGU6CisgKiAtICJhZGQgPHJpbmdpZD4gPGFnZ19zaXplPiA8dGltZW91dD4iIHRvIHRyaWdnZXIgQUREQkEKKyAqIC0gImRlbF90eCA8cmluZ2lkPiA8cmVhc29uPiIgdG8gdHJpZ2dlciBERUxCQSBmb3IgVHggc2lkZQorICogLSAiZGVsX3J4IDxDSUQ+IDxUSUQ+IDxyZWFzb24+IiB0byB0cmlnZ2VyIERFTEJBIGZvciBSeCBzaWRlCisgKi8KK3N0YXRpYyBzc2l6ZV90IHdpbF93cml0ZV9iYWNrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmM7CisJY2hhciAqa2J1ZiA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJY2hhciBjbWRbOF07CisJaW50IHAxLCBwMiwgcDM7CisKKwlpZiAoIWtidWYpCisJCXJldHVybiAtRU5PTUVNOworCisJcmMgPSBzaW1wbGVfd3JpdGVfdG9fYnVmZmVyKGtidWYsIGxlbiwgcHBvcywgYnVmLCBsZW4pOworCWlmIChyYyAhPSBsZW4pIHsKKwkJa2ZyZWUoa2J1Zik7CisJCXJldHVybiByYyA+PSAwID8gLUVJTyA6IHJjOworCX0KKworCWtidWZbbGVuXSA9ICdcMCc7CisJcmMgPSBzc2NhbmYoa2J1ZiwgIiU4cyAlZCAlZCAlZCIsIGNtZCwgJnAxLCAmcDIsICZwMyk7CisJa2ZyZWUoa2J1Zik7CisKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisJaWYgKHJjIDwgMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoMCA9PSBzdHJjbXAoY21kLCAiYWRkIikpIHsKKwkJaWYgKHJjIDwgMykgeworCQkJd2lsX2Vycih3aWwsICJCQUNLOiBhZGQgcmVxdWlyZSBhdCBsZWFzdCAyIHBhcmFtc1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAocmMgPCA0KQorCQkJcDMgPSAwOworCQl3bWlfYWRkYmEod2lsLCBwMSwgcDIsIHAzKTsKKwl9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGNtZCwgImRlbF90eCIpKSB7CisJCWlmIChyYyA8IDMpCisJCQlwMiA9IFdMQU5fUkVBU09OX1FTVEFfTEVBVkVfUUJTUzsKKwkJd21pX2RlbGJhX3R4KHdpbCwgcDEsIHAyKTsKKwl9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGNtZCwgImRlbF9yeCIpKSB7CisJCWlmIChyYyA8IDMpIHsKKwkJCXdpbF9lcnIod2lsLAorCQkJCSJCQUNLOiBkZWxfcnggcmVxdWlyZSBhdCBsZWFzdCAyIHBhcmFtc1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAocmMgPCA0KQorCQkJcDMgPSBXTEFOX1JFQVNPTl9RU1RBX0xFQVZFX1FCU1M7CisJCXdtaV9kZWxiYV9yeCh3aWwsIG1rX2NpZHh0aWQocDEsIHAyKSwgcDMpOworCX0gZWxzZSB7CisJCXdpbF9lcnIod2lsLCAiQkFDSzogVW5yZWNvZ25pemVkIGNvbW1hbmQgXCIlc1wiXG4iLCBjbWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCB3aWxfcmVhZF9iYWNrKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0YXRpYyBjb25zdCBjaGFyIHRleHRbXSA9ICJibG9jayBhY2sgY29udHJvbCwgd3JpdGU6XG4iCisJIiAtIFwiYWRkIDxyaW5naWQ+IDxhZ2dfc2l6ZT4gPHRpbWVvdXQ+XCIgdG8gdHJpZ2dlciBBRERCQVxuIgorCSJJZiBtaXNzaW5nLCA8dGltZW91dD4gZGVmYXVsdHMgdG8gMFxuIgorCSIgLSBcImRlbF90eCA8cmluZ2lkPiA8cmVhc29uPlwiIHRvIHRyaWdnZXIgREVMQkEgZm9yIFR4IHNpZGVcbiIKKwkiIC0gXCJkZWxfcnggPENJRD4gPFRJRD4gPHJlYXNvbj5cIiB0byB0cmlnZ2VyIERFTEJBIGZvciBSeCBzaWRlXG4iCisJIklmIG1pc3NpbmcsIDxyZWFzb24+IHNldCB0byBcIlNUQV9MRUFWSU5HXCIgKDM2KVxuIjsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIHRleHQsCisJCQkJICAgICAgIHNpemVvZih0ZXh0KSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfYmFjayA9IHsKKwkucmVhZCA9IHdpbF9yZWFkX2JhY2ssCisJLndyaXRlID0gd2lsX3dyaXRlX2JhY2ssCisJLm9wZW4gID0gc2ltcGxlX29wZW4sCit9OworCiAvKi0tLXR4X21nbXQtLS0qLwogLyogV3JpdGUgbWdtdCBmcmFtZSB0byB0aGlzIGZpbGUgdG8gc2VuZCBpdCAqLwogc3RhdGljIHNzaXplX3Qgd2lsX3dyaXRlX2ZpbGVfdHhtZ210KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLApAQCAtMTExNiw3ICsxMjQ2LDggQEAKIAlpbnQgaTsKIAl1MTYgaW5kZXggPSAoKHItPmhlYWRfc2VxX251bSAtIHItPnNzbikgJiAweGZmZikgJSByLT5idWZfc2l6ZTsKIAotCXNlcV9wcmludGYocywgIjB4JTAzeCBbIiwgci0+aGVhZF9zZXFfbnVtKTsKKwlzZXFfcHJpbnRmKHMsICIoWyUyZF0gJTNkIFRVKSAweCUwM3ggWyIsIHItPmJ1Zl9zaXplLCByLT50aW1lb3V0LAorCQkgICByLT5oZWFkX3NlcV9udW0pOwogCWZvciAoaSA9IDA7IGkgPCByLT5idWZfc2l6ZTsgaSsrKSB7CiAJCWlmIChpID09IGluZGV4KQogCQkJc2VxX3ByaW50ZihzLCAiJWMiLCByLT5yZW9yZGVyX2J1ZltpXSA/ICdPJyA6ICd8Jyk7CkBAIC0xMTI3LDEwICsxMjU4LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQgd2lsX3N0YV9kZWJ1Z2ZzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQorX19hY3F1aXJlcygmcC0+dGlkX3J4X2xvY2spIF9fcmVsZWFzZXMoJnAtPnRpZF9yeF9sb2NrKQogewogCXN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCA9IHMtPnByaXZhdGU7CiAJaW50IGksIHRpZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2lsLT5zdGEpOyBpKyspIHsKIAkJc3RydWN0IHdpbF9zdGFfaW5mbyAqcCA9ICZ3aWwtPnN0YVtpXTsKQEAgLTExNTEsNyArMTI4Miw3IEBACiAJCQkgICAocC0+ZGF0YV9wb3J0X29wZW4gPyAiIGRhdGFfcG9ydF9vcGVuIiA6ICIiKSk7CiAKIAkJaWYgKHAtPnN0YXR1cyA9PSB3aWxfc3RhX2Nvbm5lY3RlZCkgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnRpZF9yeF9sb2NrLCBmbGFncyk7CisJCQlzcGluX2xvY2tfYmgoJnAtPnRpZF9yeF9sb2NrKTsKIAkJCWZvciAodGlkID0gMDsgdGlkIDwgV0lMX1NUQV9USURfTlVNOyB0aWQrKykgewogCQkJCXN0cnVjdCB3aWxfdGlkX2FtcGR1X3J4ICpyID0gcC0+dGlkX3J4W3RpZF07CiAKQEAgLTExNjAsNyArMTI5MSw3IEBACiAJCQkJCXdpbF9wcmludF9yeHRpZChzLCByKTsKIAkJCQl9CiAJCQl9Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT50aWRfcnhfbG9jaywgZmxhZ3MpOworCQkJc3Bpbl91bmxvY2tfYmgoJnAtPnRpZF9yeF9sb2NrKTsKIAkJfQogCX0KIApAQCAtMTIxNyw2ICsxMzQ4LDcgQEAKIAl7InJ4b24iLAkJICBTX0lXVVNSLAkmZm9wc19yeG9ufSwKIAl7InR4X21nbXQiLAkJICBTX0lXVVNSLAkmZm9wc190eG1nbXR9LAogCXsid21pX3NlbmQiLAkJICBTX0lXVVNSLAkmZm9wc193bWl9LAorCXsiYmFjayIsCVNfSVJVR08gfCBTX0lXVVNSLAkmZm9wc19iYWNrfSwKIAl7InRlbXAiLAlTX0lSVUdPLAkJJmZvcHNfdGVtcH0sCiAJeyJmcmVxIiwJU19JUlVHTywJCSZmb3BzX2ZyZXF9LAogCXsibGluayIsCVNfSVJVR08sCQkmZm9wc19saW5rfSwKQEAgLTEyNjEsNyArMTM5Myw3IEBACiAvKiBmaWVsZHMgaW4gc3RydWN0IHdpbDYyMTBfcHJpdiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBkYmdfb2ZmIGRiZ193aWxfb2ZmW10gPSB7CiAJV0lMX0ZJRUxEKHNlY3VyZV9wY3AsCVNfSVJVR08gfCBTX0lXVVNSLAlkb2ZmX3UzMiksCi0JV0lMX0ZJRUxEKHN0YXR1cywJU19JUlVHTyB8IFNfSVdVU1IsCWRvZmZfdWxvbmcpLAorCVdJTF9GSUVMRChzdGF0dXNbMF0sCVNfSVJVR08gfCBTX0lXVVNSLAlkb2ZmX3Vsb25nKSwKIAlXSUxfRklFTEQoZndfdmVyc2lvbiwJU19JUlVHTywJCWRvZmZfdTMyKSwKIAlXSUxfRklFTEQoaHdfdmVyc2lvbiwJU19JUlVHTywJCWRvZmZfeDMyKSwKIAlXSUxfRklFTEQocmVjb3ZlcnlfY291bnQsIFNfSVJVR08sCQlkb2ZmX3UzMiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9ldGh0b29sLmMKaW5kZXggZDY4NjYzOC4uNGM0NGE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2V0aHRvb2wuYwpAQCAtNDUsMTYgKzQ1LDM1IEBACiAJCQkJICAgICAgIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpjcCkKIHsKIAlzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwgPSBuZGV2X3RvX3dpbChuZGV2KTsKLQl1MzIgaXRyX2VuLCBpdHJfdmFsID0gMDsKKwl1MzIgdHhfaXRyX2VuLCB0eF9pdHJfdmFsID0gMDsKKwl1MzIgcnhfaXRyX2VuLCByeF9pdHJfdmFsID0gMDsKIAogCXdpbF9kYmdfbWlzYyh3aWwsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlpdHJfZW4gPSBpb3JlYWQzMih3aWwtPmNzciArIEhPU1RBRERSKFJHRl9ETUFfSVRSX0NOVF9DUkwpKTsKLQlpZiAoaXRyX2VuICYgQklUX0RNQV9JVFJfQ05UX0NSTF9FTikKLQkJaXRyX3ZhbCA9IGlvcmVhZDMyKHdpbC0+Y3NyICsgSE9TVEFERFIoUkdGX0RNQV9JVFJfQ05UX1RSU0gpKTsKKwlpZiAodGVzdF9iaXQoaHdfY2FwYWJpbGl0eV9hZHZhbmNlZF9pdHJfbW9kZXJhdGlvbiwKKwkJICAgICB3aWwtPmh3X2NhcGFiaWxpdGllcykpIHsKKwkJdHhfaXRyX2VuID0gaW9yZWFkMzIod2lsLT5jc3IgKworCQkJCSAgICAgSE9TVEFERFIoUkdGX0RNQV9JVFJfVFhfQ05UX0NUTCkpOworCQlpZiAodHhfaXRyX2VuICYgQklUX0RNQV9JVFJfVFhfQ05UX0NUTF9FTikKKwkJCXR4X2l0cl92YWwgPQorCQkJCWlvcmVhZDMyKHdpbC0+Y3NyICsKKwkJCQkJIEhPU1RBRERSKFJHRl9ETUFfSVRSX1RYX0NOVF9UUlNIKSk7CiAKLQljcC0+cnhfY29hbGVzY2VfdXNlY3MgPSBpdHJfdmFsOworCQlyeF9pdHJfZW4gPSBpb3JlYWQzMih3aWwtPmNzciArCisJCQkJICAgICBIT1NUQUREUihSR0ZfRE1BX0lUUl9SWF9DTlRfQ1RMKSk7CisJCWlmIChyeF9pdHJfZW4gJiBCSVRfRE1BX0lUUl9SWF9DTlRfQ1RMX0VOKQorCQkJcnhfaXRyX3ZhbCA9CisJCQkJaW9yZWFkMzIod2lsLT5jc3IgKworCQkJCQkgSE9TVEFERFIoUkdGX0RNQV9JVFJfUlhfQ05UX1RSU0gpKTsKKwl9IGVsc2UgeworCQlyeF9pdHJfZW4gPSBpb3JlYWQzMih3aWwtPmNzciArIEhPU1RBRERSKFJHRl9ETUFfSVRSX0NOVF9DUkwpKTsKKwkJaWYgKHJ4X2l0cl9lbiAmIEJJVF9ETUFfSVRSX0NOVF9DUkxfRU4pCisJCQlyeF9pdHJfdmFsID0gaW9yZWFkMzIod2lsLT5jc3IgKworCQkJCQkgICAgICBIT1NUQUREUihSR0ZfRE1BX0lUUl9DTlRfVFJTSCkpOworCX0KIAorCWNwLT50eF9jb2FsZXNjZV91c2VjcyA9IHR4X2l0cl92YWw7CisJY3AtPnJ4X2NvYWxlc2NlX3VzZWNzID0gcnhfaXRyX3ZhbDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjMsMjIgKzgyLDI1IEBACiB7CiAJc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsID0gbmRldl90b193aWwobmRldik7CiAKLQl3aWxfZGJnX21pc2Mod2lsLCAiJXMoJWQgdXNlYylcbiIsIF9fZnVuY19fLCBjcC0+cnhfY29hbGVzY2VfdXNlY3MpOworCXdpbF9kYmdfbWlzYyh3aWwsICIlcyhyeCAlZCB1c2VjLCB0eCAlZCB1c2VjKVxuIiwgX19mdW5jX18sCisJCSAgICAgY3AtPnJ4X2NvYWxlc2NlX3VzZWNzLCBjcC0+dHhfY29hbGVzY2VfdXNlY3MpOwogCiAJaWYgKHdpbC0+d2Rldi0+aWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IpIHsKIAkJd2lsX2RiZ19taXNjKHdpbCwgIk5vIElSUSBjb2FsZXNjaW5nIGluIG1vbml0b3IgbW9kZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIG9ubHkgQHJ4X2NvYWxlc2NlX3VzZWNzIHN1cHBvcnRlZCwgaWdub3JlCi0JICogb3RoZXIgcGFyYW1ldGVycworCS8qIG9ubHkgQHJ4X2NvYWxlc2NlX3VzZWNzIGFuZCBAdHhfY29hbGVzY2VfdXNlY3Mgc3VwcG9ydGVkLAorCSAqIGlnbm9yZSBvdGhlciBwYXJhbWV0ZXJzCiAJICovCiAKLQlpZiAoY3AtPnJ4X2NvYWxlc2NlX3VzZWNzID4gV0lMNjIxMF9JVFJfVFJTSF9NQVgpCisJaWYgKGNwLT5yeF9jb2FsZXNjZV91c2VjcyA+IFdJTDYyMTBfSVRSX1RSU0hfTUFYIHx8CisJICAgIGNwLT50eF9jb2FsZXNjZV91c2VjcyA+IFdJTDYyMTBfSVRSX1RSU0hfTUFYKQogCQlnb3RvIG91dF9iYWQ7CiAKLQl3aWwtPml0cl90cnNoID0gY3AtPnJ4X2NvYWxlc2NlX3VzZWNzOwotCXdpbF9zZXRfaXRyX3Ryc2god2lsKTsKKwl3aWwtPnR4X21heF9idXJzdF9kdXJhdGlvbiA9IGNwLT50eF9jb2FsZXNjZV91c2VjczsKKwl3aWwtPnJ4X21heF9idXJzdF9kdXJhdGlvbiA9IGNwLT5yeF9jb2FsZXNjZV91c2VjczsKKwl3aWxfY29uZmlndXJlX2ludGVycnVwdF9tb2RlcmF0aW9uKHdpbCk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvaW50ZXJydXB0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9pbnRlcnJ1cHQuYwppbmRleCA0YmNiZDYyLi5hNmY5MjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9pbnRlcnJ1cHQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9pbnRlcnJ1cHQuYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJaW93cml0ZTMyKFdJTDYyMTBfSVJRX0RJU0FCTEUsIHdpbC0+Y3NyICsKIAkJICBIT1NUQUREUihSR0ZfRE1BX1BTRVVET19DQVVTRV9NQVNLX1NXKSk7CiAKLQljbGVhcl9iaXQod2lsX3N0YXR1c19pcnFlbiwgJndpbC0+c3RhdHVzKTsKKwljbGVhcl9iaXQod2lsX3N0YXR1c19pcnFlbiwgd2lsLT5zdGF0dXMpOwogfQogCiB2b2lkIHdpbDYyMTBfdW5tYXNrX2lycV90eChzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpCkBAIC0xMzAsNyArMTMwLDcgQEAKIHsKIAl3aWxfZGJnX2lycSh3aWwsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKLQlzZXRfYml0KHdpbF9zdGF0dXNfaXJxZW4sICZ3aWwtPnN0YXR1cyk7CisJc2V0X2JpdCh3aWxfc3RhdHVzX2lycWVuLCB3aWwtPnN0YXR1cyk7CiAKIAlpb3dyaXRlMzIoV0lMNjIxMF9JUlFfUFNFVURPX01BU0ssIHdpbC0+Y3NyICsKIAkJICBIT1NUQUREUihSR0ZfRE1BX1BTRVVET19DQVVTRV9NQVNLX1NXKSk7CkBAIC0xNTcsMTUgKzE1Nyw5MSBAQAogCWlvd3JpdGUzMihXSUxfSUNSX0lDQ19WQUxVRSwgd2lsLT5jc3IgKyBIT1NUQUREUihSR0ZfRE1BX0VQX01JU0NfSUNSKSArCiAJCSAgb2Zmc2V0b2Yoc3RydWN0IFJHRl9JQ1IsIElDQykpOwogCi0JLyogaW50ZXJydXB0IG1vZGVyYXRpb24gcGFyYW1ldGVycyAqLwotCXdpbF9zZXRfaXRyX3Ryc2god2lsKTsKLQogCXdpbDYyMTBfdW5tYXNrX2lycV9wc2V1ZG8od2lsKTsKIAl3aWw2MjEwX3VubWFza19pcnFfdHgod2lsKTsKIAl3aWw2MjEwX3VubWFza19pcnFfcngod2lsKTsKIAl3aWw2MjEwX3VubWFza19pcnFfbWlzYyh3aWwpOwogfQogCisvKiB0YXJnZXQgd3JpdGUgb3BlcmF0aW9uICovCisjZGVmaW5lIFcoYSwgdikgZG8geyBpb3dyaXRlMzIodiwgd2lsLT5jc3IgKyBIT1NUQUREUihhKSk7IHdtYigpOyB9IHdoaWxlICgwKQorCitzdGF0aWMKK3ZvaWQgd2lsX2NvbmZpZ3VyZV9pbnRlcnJ1cHRfbW9kZXJhdGlvbl9uZXcoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKQoreworCS8qIERpc2FibGUgYW5kIGNsZWFyIHR4IGNvdW50ZXIgYmVmb3JlIChyZSljb25maWd1cmF0aW9uICovCisJVyhSR0ZfRE1BX0lUUl9UWF9DTlRfQ1RMLCBCSVRfRE1BX0lUUl9UWF9DTlRfQ1RMX0NMUik7CisJVyhSR0ZfRE1BX0lUUl9UWF9DTlRfVFJTSCwgd2lsLT50eF9tYXhfYnVyc3RfZHVyYXRpb24pOworCXdpbF9pbmZvKHdpbCwgInNldCBJVFJfVFhfQ05UX1RSU0ggPSAlZCB1c2VjXG4iLAorCQkgd2lsLT50eF9tYXhfYnVyc3RfZHVyYXRpb24pOworCS8qIENvbmZpZ3VyZSBUWCBtYXggYnVyc3QgZHVyYXRpb24gdGltZXIgdG8gdXNlIHVzZWMgdW5pdHMgKi8KKwlXKFJHRl9ETUFfSVRSX1RYX0NOVF9DVEwsCisJICBCSVRfRE1BX0lUUl9UWF9DTlRfQ1RMX0VOIHwgQklUX0RNQV9JVFJfVFhfQ05UX0NUTF9FWFRfVElDX1NFTCk7CisKKwkvKiBEaXNhYmxlIGFuZCBjbGVhciB0eCBpZGxlIGNvdW50ZXIgYmVmb3JlIChyZSljb25maWd1cmF0aW9uICovCisJVyhSR0ZfRE1BX0lUUl9UWF9JRExfQ05UX0NUTCwgQklUX0RNQV9JVFJfVFhfSURMX0NOVF9DVExfQ0xSKTsKKwlXKFJHRl9ETUFfSVRSX1RYX0lETF9DTlRfVFJTSCwgd2lsLT50eF9pbnRlcmZyYW1lX3RpbWVvdXQpOworCXdpbF9pbmZvKHdpbCwgInNldCBJVFJfVFhfSURMX0NOVF9UUlNIID0gJWQgdXNlY1xuIiwKKwkJIHdpbC0+dHhfaW50ZXJmcmFtZV90aW1lb3V0KTsKKwkvKiBDb25maWd1cmUgVFggbWF4IGJ1cnN0IGR1cmF0aW9uIHRpbWVyIHRvIHVzZSB1c2VjIHVuaXRzICovCisJVyhSR0ZfRE1BX0lUUl9UWF9JRExfQ05UX0NUTCwgQklUX0RNQV9JVFJfVFhfSURMX0NOVF9DVExfRU4gfAorCQkJCSAgICAgIEJJVF9ETUFfSVRSX1RYX0lETF9DTlRfQ1RMX0VYVF9USUNfU0VMKTsKKworCS8qIERpc2FibGUgYW5kIGNsZWFyIHJ4IGNvdW50ZXIgYmVmb3JlIChyZSljb25maWd1cmF0aW9uICovCisJVyhSR0ZfRE1BX0lUUl9SWF9DTlRfQ1RMLCBCSVRfRE1BX0lUUl9SWF9DTlRfQ1RMX0NMUik7CisJVyhSR0ZfRE1BX0lUUl9SWF9DTlRfVFJTSCwgd2lsLT5yeF9tYXhfYnVyc3RfZHVyYXRpb24pOworCXdpbF9pbmZvKHdpbCwgInNldCBJVFJfUlhfQ05UX1RSU0ggPSAlZCB1c2VjXG4iLAorCQkgd2lsLT5yeF9tYXhfYnVyc3RfZHVyYXRpb24pOworCS8qIENvbmZpZ3VyZSBUWCBtYXggYnVyc3QgZHVyYXRpb24gdGltZXIgdG8gdXNlIHVzZWMgdW5pdHMgKi8KKwlXKFJHRl9ETUFfSVRSX1JYX0NOVF9DVEwsCisJICBCSVRfRE1BX0lUUl9SWF9DTlRfQ1RMX0VOIHwgQklUX0RNQV9JVFJfUlhfQ05UX0NUTF9FWFRfVElDX1NFTCk7CisKKwkvKiBEaXNhYmxlIGFuZCBjbGVhciByeCBpZGxlIGNvdW50ZXIgYmVmb3JlIChyZSljb25maWd1cmF0aW9uICovCisJVyhSR0ZfRE1BX0lUUl9SWF9JRExfQ05UX0NUTCwgQklUX0RNQV9JVFJfUlhfSURMX0NOVF9DVExfQ0xSKTsKKwlXKFJHRl9ETUFfSVRSX1JYX0lETF9DTlRfVFJTSCwgd2lsLT5yeF9pbnRlcmZyYW1lX3RpbWVvdXQpOworCXdpbF9pbmZvKHdpbCwgInNldCBJVFJfUlhfSURMX0NOVF9UUlNIID0gJWQgdXNlY1xuIiwKKwkJIHdpbC0+cnhfaW50ZXJmcmFtZV90aW1lb3V0KTsKKwkvKiBDb25maWd1cmUgVFggbWF4IGJ1cnN0IGR1cmF0aW9uIHRpbWVyIHRvIHVzZSB1c2VjIHVuaXRzICovCisJVyhSR0ZfRE1BX0lUUl9SWF9JRExfQ05UX0NUTCwgQklUX0RNQV9JVFJfUlhfSURMX0NOVF9DVExfRU4gfAorCQkJCSAgICAgIEJJVF9ETUFfSVRSX1JYX0lETF9DTlRfQ1RMX0VYVF9USUNfU0VMKTsKK30KKworc3RhdGljCit2b2lkIHdpbF9jb25maWd1cmVfaW50ZXJydXB0X21vZGVyYXRpb25fbGdjKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCkKK3sKKwkvKiBkaXNhYmxlLCB1c2UgdXNlYyByZXNvbHV0aW9uICovCisJVyhSR0ZfRE1BX0lUUl9DTlRfQ1JMLCBCSVRfRE1BX0lUUl9DTlRfQ1JMX0NMUik7CisKKwl3aWxfaW5mbyh3aWwsICJzZXQgSVRSX1RSU0ggPSAlZCB1c2VjXG4iLCB3aWwtPnJ4X21heF9idXJzdF9kdXJhdGlvbik7CisJVyhSR0ZfRE1BX0lUUl9DTlRfVFJTSCwgd2lsLT5yeF9tYXhfYnVyc3RfZHVyYXRpb24pOworCS8qIHN0YXJ0IGl0ICovCisJVyhSR0ZfRE1BX0lUUl9DTlRfQ1JMLAorCSAgQklUX0RNQV9JVFJfQ05UX0NSTF9FTiB8IEJJVF9ETUFfSVRSX0NOVF9DUkxfRVhUX1RJQ0spOworfQorCisjdW5kZWYgVworCit2b2lkIHdpbF9jb25maWd1cmVfaW50ZXJydXB0X21vZGVyYXRpb24oc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKQoreworCXdpbF9kYmdfaXJxKHdpbCwgIiVzKClcbiIsIF9fZnVuY19fKTsKKworCS8qIGRpc2FibGUgaW50ZXJydXB0IG1vZGVyYXRpb24gZm9yIG1vbml0b3IKKwkgKiB0byBnZXQgYmV0dGVyIHRpbWVzdGFtcCBwcmVjaXNpb24KKwkgKi8KKwlpZiAod2lsLT53ZGV2LT5pZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKKwkJcmV0dXJuOworCisJaWYgKHRlc3RfYml0KGh3X2NhcGFiaWxpdHlfYWR2YW5jZWRfaXRyX21vZGVyYXRpb24sCisJCSAgICAgd2lsLT5od19jYXBhYmlsaXRpZXMpKQorCQl3aWxfY29uZmlndXJlX2ludGVycnVwdF9tb2RlcmF0aW9uX25ldyh3aWwpOworCWVsc2UgeworCQkvKiBBZHZhbmNlZCBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBpcyBub3QgYXZhaWxhYmxlIGJlZm9yZQorCQkgKiBTcGFycm93IHYyLiBXaWxsIHVzZSBsZWdhY3kgaW50ZXJydXB0IG1vZGVyYXRpb24KKwkJICovCisJCXdpbF9jb25maWd1cmVfaW50ZXJydXB0X21vZGVyYXRpb25fbGdjKHdpbCk7CisJfQorfQorCiBzdGF0aWMgaXJxcmV0dXJuX3Qgd2lsNjIxMF9pcnFfcngoaW50IGlycSwgdm9pZCAqY29va2llKQogewogCXN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCA9IGNvb2tpZTsKQEAgLTE5NCwxOCArMjcwLDE5IEBACiAJCXdpbF9kYmdfaXJxKHdpbCwgIlJYIGRvbmVcbiIpOwogCiAJCWlmIChpc3IgJiBCSVRfRE1BX0VQX1JYX0lDUl9SWF9IVFJTSCkKLQkJCXdpbF9lcnJfcmF0ZWxpbWl0ZWQod2lsLCAiUmVjZWl2ZWQgXCJSeCBidWZmZXIgaXMgaW4gcmlzayAiCi0JCQkJIm9mIG92ZXJmbG93XCIgaW50ZXJydXB0XG4iKTsKKwkJCXdpbF9lcnJfcmF0ZWxpbWl0ZWQod2lsLAorCQkJCQkgICAgIlJlY2VpdmVkIFwiUnggYnVmZmVyIGlzIGluIHJpc2sgb2Ygb3ZlcmZsb3dcIiBpbnRlcnJ1cHRcbiIpOwogCi0JCWlzciAmPSB+KEJJVF9ETUFfRVBfUlhfSUNSX1JYX0RPTkUgfCBCSVRfRE1BX0VQX1JYX0lDUl9SWF9IVFJTSCk7Ci0JCWlmICh0ZXN0X2JpdCh3aWxfc3RhdHVzX3Jlc2V0X2RvbmUsICZ3aWwtPnN0YXR1cykpIHsKLQkJCWlmICh0ZXN0X2JpdCh3aWxfc3RhdHVzX25hcGlfZW4sICZ3aWwtPnN0YXR1cykpIHsKKwkJaXNyICY9IH4oQklUX0RNQV9FUF9SWF9JQ1JfUlhfRE9ORSB8CisJCQkgQklUX0RNQV9FUF9SWF9JQ1JfUlhfSFRSU0gpOworCQlpZiAodGVzdF9iaXQod2lsX3N0YXR1c19yZXNldF9kb25lLCB3aWwtPnN0YXR1cykpIHsKKwkJCWlmICh0ZXN0X2JpdCh3aWxfc3RhdHVzX25hcGlfZW4sIHdpbC0+c3RhdHVzKSkgewogCQkJCXdpbF9kYmdfdHhyeCh3aWwsICJOQVBJKFJ4KSBzY2hlZHVsZVxuIik7CiAJCQkJbmVlZF91bm1hc2sgPSBmYWxzZTsKIAkJCQluYXBpX3NjaGVkdWxlKCZ3aWwtPm5hcGlfcngpOwogCQkJfSBlbHNlIHsKLQkJCQl3aWxfZXJyKHdpbCwgIkdvdCBSeCBpbnRlcnJ1cHQgd2hpbGUgIgotCQkJCQkic3RvcHBpbmcgaW50ZXJmYWNlXG4iKTsKKwkJCQl3aWxfZXJyKHdpbCwKKwkJCQkJIkdvdCBSeCBpbnRlcnJ1cHQgd2hpbGUgc3RvcHBpbmcgaW50ZXJmYWNlXG4iKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXdpbF9lcnIod2lsLCAiR290IFJ4IGludGVycnVwdCB3aGlsZSBpbiByZXNldFxuIik7CkBAIC0yNDgsNyArMzI1LDcgQEAKIAkJaXNyICY9IH5CSVRfRE1BX0VQX1RYX0lDUl9UWF9ET05FOwogCQkvKiBjbGVhciBhbHNvIGFsbCBWUklORyBpbnRlcnJ1cHRzICovCiAJCWlzciAmPSB+KEJJVCgyNSkgLSAxVUwpOwotCQlpZiAodGVzdF9iaXQod2lsX3N0YXR1c19yZXNldF9kb25lLCAmd2lsLT5zdGF0dXMpKSB7CisJCWlmICh0ZXN0X2JpdCh3aWxfc3RhdHVzX3Jlc2V0X2RvbmUsIHdpbC0+c3RhdHVzKSkgewogCQkJd2lsX2RiZ190eHJ4KHdpbCwgIk5BUEkoVHgpIHNjaGVkdWxlXG4iKTsKIAkJCW5lZWRfdW5tYXNrID0gZmFsc2U7CiAJCQluYXBpX3NjaGVkdWxlKCZ3aWwtPm5hcGlfdHgpOwpAQCAtMzEwLDcgKzM4Nyw3IEBACiAKIAlpZiAoaXNyICYgSVNSX01JU0NfRldfRVJST1IpIHsKIAkJd2lsX2Vycih3aWwsICJGaXJtd2FyZSBlcnJvciBkZXRlY3RlZFxuIik7Ci0JCWNsZWFyX2JpdCh3aWxfc3RhdHVzX2Z3cmVhZHksICZ3aWwtPnN0YXR1cyk7CisJCWNsZWFyX2JpdCh3aWxfc3RhdHVzX2Z3cmVhZHksIHdpbC0+c3RhdHVzKTsKIAkJLyoKIAkJICogZG8gbm90IGNsZWFyIEBpc3IgaGVyZSAtIHdlIGRvIDItbmQgcGFydCBpbiB0aHJlYWQKIAkJICogdGhlcmUsIHVzZXIgc3BhY2UgZ2V0IG5vdGlmaWVkLCBhbmQgaXQgc2hvdWxkIGJlIGRvbmUKQEAgLTMyMSw3ICszOTgsNyBAQAogCWlmIChpc3IgJiBJU1JfTUlTQ19GV19SRUFEWSkgewogCQl3aWxfZGJnX2lycSh3aWwsICJJUlE6IEZXIHJlYWR5XG4iKTsKIAkJd2lsX2NhY2hlX21ib3hfcmVncyh3aWwpOwotCQlzZXRfYml0KHdpbF9zdGF0dXNfcmVzZXRfZG9uZSwgJndpbC0+c3RhdHVzKTsKKwkJc2V0X2JpdCh3aWxfc3RhdHVzX3Jlc2V0X2RvbmUsIHdpbC0+c3RhdHVzKTsKIAkJLyoqCiAJCSAqIEFjdHVhbCBGVyByZWFkeSBpbmRpY2F0ZWQgYnkgdGhlCiAJCSAqIFdNSV9GV19SRUFEWV9FVkVOVElECkBAIC0zOTQsNyArNDcxLDcgQEAKICAqLwogc3RhdGljIGludCB3aWw2MjEwX2RlYnVnX2lycV9tYXNrKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCwgdTMyIHBzZXVkb19jYXVzZSkKIHsKLQlpZiAoIXRlc3RfYml0KHdpbF9zdGF0dXNfaXJxZW4sICZ3aWwtPnN0YXR1cykpIHsKKwlpZiAoIXRlc3RfYml0KHdpbF9zdGF0dXNfaXJxZW4sIHdpbC0+c3RhdHVzKSkgewogCQl1MzIgaWNtX3J4ID0gd2lsX2lvcmVhZDMyX2FuZF9jbGVhcih3aWwtPmNzciArCiAJCQkJSE9TVEFERFIoUkdGX0RNQV9FUF9SWF9JQ1IpICsKIAkJCQlvZmZzZXRvZihzdHJ1Y3QgUkdGX0lDUiwgSUNNKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9tYWluLmMKaW5kZXggOGZmM2ZlMy4uYjA0ZTBhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL21haW4uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNCBRdWFsY29tbSBBdGhlcm9zLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNSBRdWFsY29tbSBBdGhlcm9zLCBJbmMuCiAgKgogICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CiAgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCkBAIC0zMywxNSArMzMsMTggQEAKIG1vZHVsZV9wYXJhbShub19md19sb2FkLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKG5vX2Z3X2xvYWQsICIgZG8gbm90IGRvd25sb2FkIEZXLCB1c2Ugb25lIGluIG9uLWNhcmQgZmxhc2guIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaXRyX3Ryc2ggPSBXSUw2MjEwX0lUUl9UUlNIX0RFRkFVTFQ7Ci0KLW1vZHVsZV9wYXJhbShpdHJfdHJzaCwgdWludCwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKGl0cl90cnNoLCAiIEludGVycnVwdCBtb2RlcmF0aW9uIHRocmVzaG9sZCwgdXNlY3MuIik7CisvKiBpZiBub3Qgc2V0IHZpYSBtb2RwYXJhbSwgd2lsbCBiZSBzZXQgdG8gZGVmYXVsdCB2YWx1ZSBvZiAxLzggb2YKKyAqIHJ4IHJpbmcgc2l6ZSBkdXJpbmcgaW5pdCBmbG93CisgKi8KK3Vuc2lnbmVkIHNob3J0IHJ4X3Jpbmdfb3ZlcmZsb3dfdGhyc2ggPSBXSUw2MjEwX1JYX0hJR0hfVFJTSF9JTklUOworbW9kdWxlX3BhcmFtKHJ4X3Jpbmdfb3ZlcmZsb3dfdGhyc2gsIHVzaG9ydCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKHJ4X3Jpbmdfb3ZlcmZsb3dfdGhyc2gsCisJCSAiIFJYIHJpbmcgb3ZlcmZsb3cgdGhyZXNob2xkIGluIGRlc2NyaXB0b3JzLiIpOwogCiAvKiBXZSBhbGxvdyBhbGxvY2F0aW9uIG9mIG1vcmUgdGhhbiAxIHBhZ2UgYnVmZmVycyB0byBzdXBwb3J0IGxhcmdlIHBhY2tldHMuCiAgKiBJdCBpcyBzdWJvcHRpbWFsIGJlaGF2aW9yIHBlcmZvcm1hbmNlIHdpc2UgaW4gY2FzZSBNVFUgYWJvdmUgcGFnZSBzaXplLgogICovCi11bnNpZ25lZCBpbnQgbXR1X21heCA9IFRYUlhfQlVGX0xFTl9ERUZBVUxUIC0gRVRIX0hMRU47Cit1bnNpZ25lZCBpbnQgbXR1X21heCA9IFRYUlhfQlVGX0xFTl9ERUZBVUxUIC0gV0lMX01BWF9NUERVX09WRVJIRUFEOwogc3RhdGljIGludCBtdHVfbWF4X3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewogCWludCByZXQ7CkBAIC01Myw3ICs1Niw3IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChtdHVfbWF4IDwgNjggfHwgbXR1X21heCA+IElFRUU4MDIxMV9NQVhfREFUQV9MRU5fRE1HKQorCWlmIChtdHVfbWF4IDwgNjggfHwgbXR1X21heCA+IFdJTF9NQVhfRVRIX01UVSkKIAkJcmV0ID0gLUVJTlZBTDsKIAogCXJldHVybiByZXQ7CkBAIC0xMzUsMTIgKzEzOCwxNCBAQAogCiBzdGF0aWMgdm9pZCB3aWxfZGlzY29ubmVjdF9jaWQoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLCBpbnQgY2lkLAogCQkJICAgICAgIHUxNiByZWFzb25fY29kZSwgYm9vbCBmcm9tX2V2ZW50KQorX19hY3F1aXJlcygmc3RhLT50aWRfcnhfbG9jaykgX19yZWxlYXNlcygmc3RhLT50aWRfcnhfbG9jaykKIHsKIAl1aW50IGk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB3aWxfdG9fbmRldih3aWwpOwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSB3aWwtPndkZXY7CiAJc3RydWN0IHdpbF9zdGFfaW5mbyAqc3RhID0gJndpbC0+c3RhW2NpZF07CiAKKwltaWdodF9zbGVlcCgpOwogCXdpbF9kYmdfbWlzYyh3aWwsICIlcyhDSUQgJWQsIHN0YXR1cyAlZClcbiIsIF9fZnVuY19fLCBjaWQsCiAJCSAgICAgc3RhLT5zdGF0dXMpOwogCkBAIC0xNjMsMTUgKzE2OCwxNCBAQAogCiAJZm9yIChpID0gMDsgaSA8IFdJTF9TVEFfVElEX05VTTsgaSsrKSB7CiAJCXN0cnVjdCB3aWxfdGlkX2FtcGR1X3J4ICpyOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZzdGEtPnRpZF9yeF9sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19iaCgmc3RhLT50aWRfcnhfbG9jayk7CiAKIAkJciA9IHN0YS0+dGlkX3J4W2ldOwogCQlzdGEtPnRpZF9yeFtpXSA9IE5VTEw7CiAJCXdpbF90aWRfYW1wZHVfcnhfZnJlZSh3aWwsIHIpOwogCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN0YS0+dGlkX3J4X2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+dGlkX3J4X2xvY2spOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3aWwtPnZyaW5nX3R4KTsgaSsrKSB7CiAJCWlmICh3aWwtPnZyaW5nMmNpZF90aWRbaV1bMF0gPT0gY2lkKQpAQCAtMTg4LDM0ICsxOTIsNDcgQEAKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gd2lsLT53ZGV2OwogCiAJbWlnaHRfc2xlZXAoKTsKLQlpZiAoYnNzaWQpIHsKLQkJY2lkID0gd2lsX2ZpbmRfY2lkKHdpbCwgYnNzaWQpOwotCQl3aWxfZGJnX21pc2Mod2lsLCAiJXMoJXBNLCBDSUQgJWQpXG4iLCBfX2Z1bmNfXywgYnNzaWQsIGNpZCk7Ci0JfSBlbHNlIHsKLQkJd2lsX2RiZ19taXNjKHdpbCwgIiVzKGFsbClcbiIsIF9fZnVuY19fKTsKLQl9CisJd2lsX2RiZ19taXNjKHdpbCwgIiVzKGJzc2lkPSVwTSwgcmVhc29uPSVkLCBldiVzKVxuIiwgX19mdW5jX18sIGJzc2lkLAorCQkgICAgIHJlYXNvbl9jb2RlLCBmcm9tX2V2ZW50ID8gIisiIDogIi0iKTsKIAotCWlmIChjaWQgPj0gMCkgLyogZGlzY29ubmVjdCAxIHBlZXIgKi8KLQkJd2lsX2Rpc2Nvbm5lY3RfY2lkKHdpbCwgY2lkLCByZWFzb25fY29kZSwgZnJvbV9ldmVudCk7Ci0JZWxzZSAvKiBkaXNjb25uZWN0IGFsbCAqLworCS8qIENhc2VzIGFyZToKKwkgKiAtIGRpc2Nvbm5lY3Qgc2luZ2xlIFNUQSwgc3RpbGwgY29ubmVjdGVkCisJICogLSBkaXNjb25uZWN0IHNpbmdsZSBTVEEsIGFscmVhZHkgZGlzY29ubmVjdGVkCisJICogLSBkaXNjb25uZWN0IGFsbAorCSAqCisJICogRm9yICJkaXNjb25uZWN0IGFsbCIsIHRoZXJlIGFyZSAyIG9wdGlvbnM6CisJICogLSBic3NpZCA9PSBOVUxMCisJICogLSBic3NpZCBpcyBvdXIgTUFDIGFkZHJlc3MKKwkgKi8KKwlpZiAoYnNzaWQgJiYgbWVtY21wKG5kZXYtPmRldl9hZGRyLCBic3NpZCwgRVRIX0FMRU4pKSB7CisJCWNpZCA9IHdpbF9maW5kX2NpZCh3aWwsIGJzc2lkKTsKKwkJd2lsX2RiZ19taXNjKHdpbCwgIkRpc2Nvbm5lY3QgJXBNLCBDSUQ9JWQsIHJlYXNvbj0lZFxuIiwKKwkJCSAgICAgYnNzaWQsIGNpZCwgcmVhc29uX2NvZGUpOworCQlpZiAoY2lkID49IDApIC8qIGRpc2Nvbm5lY3QgMSBwZWVyICovCisJCQl3aWxfZGlzY29ubmVjdF9jaWQod2lsLCBjaWQsIHJlYXNvbl9jb2RlLCBmcm9tX2V2ZW50KTsKKwl9IGVsc2UgeyAvKiBhbGwgKi8KKwkJd2lsX2RiZ19taXNjKHdpbCwgIkRpc2Nvbm5lY3QgYWxsXG4iKTsKIAkJZm9yIChjaWQgPSAwOyBjaWQgPCBXSUw2MjEwX01BWF9DSUQ7IGNpZCsrKQogCQkJd2lsX2Rpc2Nvbm5lY3RfY2lkKHdpbCwgY2lkLCByZWFzb25fY29kZSwgZnJvbV9ldmVudCk7CisJfQogCiAJLyogbGluayBzdGF0ZSAqLwogCXN3aXRjaCAod2Rldi0+aWZ0eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDoKLQkJd2lsX2xpbmtfb2ZmKHdpbCk7Ci0JCWlmICh0ZXN0X2JpdCh3aWxfc3RhdHVzX2Z3Y29ubmVjdGVkLCAmd2lsLT5zdGF0dXMpKSB7Ci0JCQljbGVhcl9iaXQod2lsX3N0YXR1c19md2Nvbm5lY3RlZCwgJndpbC0+c3RhdHVzKTsKKwkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5kZXYpOworCQluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKKworCQlpZiAodGVzdF9iaXQod2lsX3N0YXR1c19md2Nvbm5lY3RlZCwgd2lsLT5zdGF0dXMpKSB7CisJCQljbGVhcl9iaXQod2lsX3N0YXR1c19md2Nvbm5lY3RlZCwgd2lsLT5zdGF0dXMpOwogCQkJY2ZnODAyMTFfZGlzY29ubmVjdGVkKG5kZXYsIHJlYXNvbl9jb2RlLAogCQkJCQkgICAgICBOVUxMLCAwLCBHRlBfS0VSTkVMKTsKLQkJfSBlbHNlIGlmICh0ZXN0X2JpdCh3aWxfc3RhdHVzX2Z3Y29ubmVjdGluZywgJndpbC0+c3RhdHVzKSkgeworCQl9IGVsc2UgaWYgKHRlc3RfYml0KHdpbF9zdGF0dXNfZndjb25uZWN0aW5nLCB3aWwtPnN0YXR1cykpIHsKIAkJCWNmZzgwMjExX2Nvbm5lY3RfcmVzdWx0KG5kZXYsIGJzc2lkLCBOVUxMLCAwLCBOVUxMLCAwLAogCQkJCQkJV0xBTl9TVEFUVVNfVU5TUEVDSUZJRURfRkFJTFVSRSwKIAkJCQkJCUdGUF9LRVJORUwpOwogCQl9Ci0JCWNsZWFyX2JpdCh3aWxfc3RhdHVzX2Z3Y29ubmVjdGluZywgJndpbC0+c3RhdHVzKTsKKwkJY2xlYXJfYml0KHdpbF9zdGF0dXNfZndjb25uZWN0aW5nLCB3aWwtPnN0YXR1cyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMjQ4LDcgKzI2NSw3IEBACiB7CiAJc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsID0gKHZvaWQgKil4OwogCi0JY2xlYXJfYml0KHdpbF9zdGF0dXNfZndyZWFkeSwgJndpbC0+c3RhdHVzKTsKKwljbGVhcl9iaXQod2lsX3N0YXR1c19md3JlYWR5LCB3aWwtPnN0YXR1cyk7CiAJd2lsX2Vycih3aWwsICJTY2FuIHRpbWVvdXQgZGV0ZWN0ZWQsIHN0YXJ0IGZ3IGVycm9yIHJlY292ZXJ5XG4iKTsKIAl3aWwtPnJlY292ZXJ5X3N0YXRlID0gZndfcmVjb3ZlcnlfcGVuZGluZzsKIAlzY2hlZHVsZV93b3JrKCZ3aWwtPmZ3X2Vycm9yX3dvcmtlcik7CkBAIC0zNTIsNiArMzY5LDggQEAKIAlpbnQgcmM7CiAJc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3aWw2MjEwX3ByaXYsCiAJCQkJCQljb25uZWN0X3dvcmtlcik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB3aWxfdG9fbmRldih3aWwpOworCiAJaW50IGNpZCA9IHdpbC0+cGVuZGluZ19jb25uZWN0X2NpZDsKIAlpbnQgcmluZ2lkID0gd2lsX2ZpbmRfZnJlZV92cmluZyh3aWwpOwogCkBAIC0zNjYsNyArMzg1LDcgQEAKIAl3aWwtPnBlbmRpbmdfY29ubmVjdF9jaWQgPSAtMTsKIAlpZiAocmMgPT0gMCkgewogCQl3aWwtPnN0YVtjaWRdLnN0YXR1cyA9IHdpbF9zdGFfY29ubmVjdGVkOwotCQl3aWxfbGlua19vbih3aWwpOworCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmRldik7CiAJfSBlbHNlIHsKIAkJd2lsLT5zdGFbY2lkXS5zdGF0dXMgPSB3aWxfc3RhX3VudXNlZDsKIAl9CkBAIC0zODQsNiArNDAzLDkgQEAKIAogCW11dGV4X2luaXQoJndpbC0+bXV0ZXgpOwogCW11dGV4X2luaXQoJndpbC0+d21pX211dGV4KTsKKwltdXRleF9pbml0KCZ3aWwtPmJhY2tfcnhfbXV0ZXgpOworCW11dGV4X2luaXQoJndpbC0+YmFja190eF9tdXRleCk7CisJbXV0ZXhfaW5pdCgmd2lsLT5wcm9iZV9jbGllbnRfbXV0ZXgpOwogCiAJaW5pdF9jb21wbGV0aW9uKCZ3aWwtPndtaV9yZWFkeSk7CiAJaW5pdF9jb21wbGV0aW9uKCZ3aWwtPndtaV9jYWxsKTsKQEAgLTM5NiwyNSArNDE4LDM5IEBACiAJSU5JVF9XT1JLKCZ3aWwtPmRpc2Nvbm5lY3Rfd29ya2VyLCB3aWxfZGlzY29ubmVjdF93b3JrZXIpOwogCUlOSVRfV09SSygmd2lsLT53bWlfZXZlbnRfd29ya2VyLCB3bWlfZXZlbnRfd29ya2VyKTsKIAlJTklUX1dPUksoJndpbC0+ZndfZXJyb3Jfd29ya2VyLCB3aWxfZndfZXJyb3Jfd29ya2VyKTsKKwlJTklUX1dPUksoJndpbC0+YmFja19yeF93b3JrZXIsIHdpbF9iYWNrX3J4X3dvcmtlcik7CisJSU5JVF9XT1JLKCZ3aWwtPmJhY2tfdHhfd29ya2VyLCB3aWxfYmFja190eF93b3JrZXIpOworCUlOSVRfV09SSygmd2lsLT5wcm9iZV9jbGllbnRfd29ya2VyLCB3aWxfcHJvYmVfY2xpZW50X3dvcmtlcik7CiAKIAlJTklUX0xJU1RfSEVBRCgmd2lsLT5wZW5kaW5nX3dtaV9ldik7CisJSU5JVF9MSVNUX0hFQUQoJndpbC0+YmFja19yeF9wZW5kaW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmd2lsLT5iYWNrX3R4X3BlbmRpbmcpOworCUlOSVRfTElTVF9IRUFEKCZ3aWwtPnByb2JlX2NsaWVudF9wZW5kaW5nKTsKIAlzcGluX2xvY2tfaW5pdCgmd2lsLT53bWlfZXZfbG9jayk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmd2lsLT53cSk7CiAKLQl3aWwtPndtaV93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFdJTF9OQU1FIl93bWkiKTsKKwl3aWwtPndtaV93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKFdJTF9OQU1FICJfd21pIik7CiAJaWYgKCF3aWwtPndtaV93cSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQl3aWwtPndtaV93cV9jb25uID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoV0lMX05BTUUiX2Nvbm5lY3QiKTsKLQlpZiAoIXdpbC0+d21pX3dxX2Nvbm4pIHsKLQkJZGVzdHJveV93b3JrcXVldWUod2lsLT53bWlfd3EpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9CisJd2lsLT53cV9zZXJ2aWNlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoV0lMX05BTUUgIl9zZXJ2aWNlIik7CisJaWYgKCF3aWwtPndxX3NlcnZpY2UpCisJCWdvdG8gb3V0X3dtaV93cTsKIAogCXdpbC0+bGFzdF9md19yZWNvdmVyeSA9IGppZmZpZXM7Ci0Jd2lsLT5pdHJfdHJzaCA9IGl0cl90cnNoOworCXdpbC0+dHhfaW50ZXJmcmFtZV90aW1lb3V0ID0gV0lMNjIxMF9JVFJfVFhfSU5URVJGUkFNRV9USU1FT1VUX0RFRkFVTFQ7CisJd2lsLT5yeF9pbnRlcmZyYW1lX3RpbWVvdXQgPSBXSUw2MjEwX0lUUl9SWF9JTlRFUkZSQU1FX1RJTUVPVVRfREVGQVVMVDsKKwl3aWwtPnR4X21heF9idXJzdF9kdXJhdGlvbiA9IFdJTDYyMTBfSVRSX1RYX01BWF9CVVJTVF9EVVJBVElPTl9ERUZBVUxUOworCXdpbC0+cnhfbWF4X2J1cnN0X2R1cmF0aW9uID0gV0lMNjIxMF9JVFJfUlhfTUFYX0JVUlNUX0RVUkFUSU9OX0RFRkFVTFQ7CiAKKwlpZiAocnhfcmluZ19vdmVyZmxvd190aHJzaCA9PSBXSUw2MjEwX1JYX0hJR0hfVFJTSF9JTklUKQorCQlyeF9yaW5nX292ZXJmbG93X3RocnNoID0gV0lMNjIxMF9SWF9ISUdIX1RSU0hfREVGQVVMVDsKIAlyZXR1cm4gMDsKKworb3V0X3dtaV93cToKKwlkZXN0cm95X3dvcmtxdWV1ZSh3aWwtPndtaV93cSk7CisKKwlyZXR1cm4gLUVBR0FJTjsKIH0KIAogLyoqCkBAIC00NDgsNyArNDg0LDEzIEBACiAJd2lsNjIxMF9kaXNjb25uZWN0KHdpbCwgTlVMTCwgV0xBTl9SRUFTT05fREVBVVRIX0xFQVZJTkcsIGZhbHNlKTsKIAltdXRleF91bmxvY2soJndpbC0+bXV0ZXgpOwogCXdtaV9ldmVudF9mbHVzaCh3aWwpOwotCWRlc3Ryb3lfd29ya3F1ZXVlKHdpbC0+d21pX3dxX2Nvbm4pOworCXdpbF9iYWNrX3J4X2ZsdXNoKHdpbCk7CisJY2FuY2VsX3dvcmtfc3luYygmd2lsLT5iYWNrX3J4X3dvcmtlcik7CisJd2lsX2JhY2tfdHhfZmx1c2god2lsKTsKKwljYW5jZWxfd29ya19zeW5jKCZ3aWwtPmJhY2tfdHhfd29ya2VyKTsKKwl3aWxfcHJvYmVfY2xpZW50X2ZsdXNoKHdpbCk7CisJY2FuY2VsX3dvcmtfc3luYygmd2lsLT5wcm9iZV9jbGllbnRfd29ya2VyKTsKKwlkZXN0cm95X3dvcmtxdWV1ZSh3aWwtPndxX3NlcnZpY2UpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKHdpbC0+d21pX3dxKTsKIH0KIApAQCAtNDc4LDEzICs1MjAsMTAgQEAKIHsKIAlpbnQgZGVsYXkgPSAwOwogCXUzMiB4OwotCXUzMiByZXZfaWQ7Ci0JYm9vbCBpc19zcGFycm93ID0gKHdpbC0+Ym9hcmQtPmJvYXJkID09IFdJTF9CT0FSRF9TUEFSUk9XKTsKKwlib29sIGlzX3Jlc2V0X3YyID0gdGVzdF9iaXQoaHdfY2FwYWJpbGl0eV9yZXNldF92MiwKKwkJCQkgICAgd2lsLT5od19jYXBhYmlsaXRpZXMpOwogCi0Jd2lsX2RiZ19taXNjKHdpbCwgIlJlc2V0dGluZyBcIiVzXCIuLi5cbiIsIHdpbC0+Ym9hcmQtPm5hbWUpOwotCi0Jd2lsLT5od192ZXJzaW9uID0gUihSR0ZfVVNFUl9GV19SRVZfSUQpOwotCXJldl9pZCA9IHdpbC0+aHdfdmVyc2lvbiAmIDB4ZmY7CisJd2lsX2RiZ19taXNjKHdpbCwgIlJlc2V0dGluZyBcIiVzXCIuLi5cbiIsIHdpbC0+aHdfbmFtZSk7CiAKIAkvKiBDbGVhciBNQUMgbGluayB1cCAqLwogCVMoUkdGX0hQX0NUUkwsIEJJVCgxNSkpOwpAQCAtNDk2LDcgKzUzNSw3IEBACiAJLyogQ2xlYXIgRncgRG93bmxvYWQgbm90aWZpY2F0aW9uICovCiAJQyhSR0ZfVVNFUl9VU0FHRV82LCBCSVQoMCkpOwogCi0JaWYgKGlzX3NwYXJyb3cpIHsKKwlpZiAoaXNfcmVzZXRfdjIpIHsKIAkJUyhSR0ZfQ0FGX09TQ19DT05UUk9MLCBCSVRfQ0FGX09TQ19YVEFMX0VOKTsKIAkJLyogWFRBTCBzdGFiaWxpemF0aW9uIHNob3VsZCB0YWtlIGFib3V0IDNtcyAqLwogCQl1c2xlZXBfcmFuZ2UoNTAwMCwgNzAwMCk7CkBAIC01MTcsMTAgKzU1NiwxMSBAQAogCiAJVyhSR0ZfVVNFUl9DTEtTX0NUTF9TV19SU1RfVkVDXzIsIDB4RkUwMDAwMDApOwogCVcoUkdGX1VTRVJfQ0xLU19DVExfU1dfUlNUX1ZFQ18xLCAweDAwMDAwMDNGKTsKLQlXKFJHRl9VU0VSX0NMS1NfQ1RMX1NXX1JTVF9WRUNfMywgaXNfc3BhcnJvdyA/IDB4MDAwMDAwZjAgOiAweDAwMDAwMTcwKTsKKwlXKFJHRl9VU0VSX0NMS1NfQ1RMX1NXX1JTVF9WRUNfMywKKwkgIGlzX3Jlc2V0X3YyID8gMHgwMDAwMDBmMCA6IDB4MDAwMDAxNzApOwogCVcoUkdGX1VTRVJfQ0xLU19DVExfU1dfUlNUX1ZFQ18wLCAweEZGRTdGRTAwKTsKIAotCWlmIChpc19zcGFycm93KSB7CisJaWYgKGlzX3Jlc2V0X3YyKSB7CiAJCVcoUkdGX1VTRVJfQ0xLU19DVExfRVhUX1NXX1JTVF9WRUNfMCwgMHgwKTsKIAkJVyhSR0ZfVVNFUl9DTEtTX0NUTF9FWFRfU1dfUlNUX1ZFQ18xLCAweDApOwogCX0KQEAgLTUzMCwxOSArNTcwLDE0IEBACiAJVyhSR0ZfVVNFUl9DTEtTX0NUTF9TV19SU1RfVkVDXzEsIDApOwogCVcoUkdGX1VTRVJfQ0xLU19DVExfU1dfUlNUX1ZFQ18wLCAwKTsKIAotCWlmIChpc19zcGFycm93KSB7CisJaWYgKGlzX3Jlc2V0X3YyKSB7CiAJCVcoUkdGX1VTRVJfQ0xLU19DVExfU1dfUlNUX1ZFQ18zLCAweDAwMDAwMDAzKTsKIAkJLyogcmVzZXQgQTIgUENJRSBBSEIgKi8KIAkJVyhSR0ZfVVNFUl9DTEtTX0NUTF9TV19SU1RfVkVDXzIsIDB4MDAwMDgwMDApOwogCX0gZWxzZSB7CiAJCVcoUkdGX1VTRVJfQ0xLU19DVExfU1dfUlNUX1ZFQ18zLCAweDAwMDAwMDAxKTsKLQkJaWYgKHJldl9pZCA9PSAxKSB7Ci0JCQkvKiByZXNldCBBMSBCT1RIIFBDSUUgQUhCICYgUENJRSBSR0YgKi8KLQkJCVcoUkdGX1VTRVJfQ0xLU19DVExfU1dfUlNUX1ZFQ18yLCAweDAwMDAwMDgwKTsKLQkJfSBlbHNlIHsKLQkJCVcoUkdGX1BDSUVfTE9TX0NPVU5URVJfQ1RMLCBCSVQoNikgfCBCSVQoOCkpOwotCQkJVyhSR0ZfVVNFUl9DTEtTX0NUTF9TV19SU1RfVkVDXzIsIDB4MDAwMDgwMDApOwotCQl9CisJCVcoUkdGX1BDSUVfTE9TX0NPVU5URVJfQ1RMLCBCSVQoNikgfCBCSVQoOCkpOworCQlXKFJHRl9VU0VSX0NMS1NfQ1RMX1NXX1JTVF9WRUNfMiwgMHgwMDAwODAwMCk7CiAJfQogCiAJLyogVE9ETzogY2hlY2sgb3JkZXIgaGVyZSEhISBFcmV6IGNvZGUgaXMgZGlmZmVyZW50ICovCkBAIC01NTksOCArNTk0LDcgQEAKIAkJfQogCX0gd2hpbGUgKHggIT0gSFdfTUFDSElORV9CT09UX0RPTkUpOwogCi0JLyogVE9ETzogRXJleiBjaGVjayByZXZfaWQgIT0gMSAqLwotCWlmICghaXNfc3BhcnJvdyAmJiAocmV2X2lkICE9IDEpKQorCWlmICghaXNfcmVzZXRfdjIpCiAJCVcoUkdGX1BDSUVfTE9TX0NPVU5URVJfQ1RMLCBCSVQoOCkpOwogCiAJQyhSR0ZfVVNFUl9DTEtTX0NUTF8wLCBCSVRfVVNFUl9DTEtTX1JTVF9QV0dEKTsKQEAgLTU2OSwyNiArNjAzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiB3aWxfc2V0X2l0cl90cnNoOiAtIGFwcGx5IGludGVycnVwdCBjb2FsZXNjaW5nIHBhcmFtcwotICovCi12b2lkIHdpbF9zZXRfaXRyX3Ryc2goc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKQotewotCS8qIGRpc2FibGUsIHVzZSB1c2VjIHJlc29sdXRpb24gKi8KLQlXKFJHRl9ETUFfSVRSX0NOVF9DUkwsIEJJVF9ETUFfSVRSX0NOVF9DUkxfRVhUX1RJQ0spOwotCi0JLyogZGlzYWJsZSBpbnRlcnJ1cHQgbW9kZXJhdGlvbiBmb3IgbW9uaXRvcgotCSAqIHRvIGdldCBiZXR0ZXIgdGltZXN0YW1wIHByZWNpc2lvbgotCSAqLwotCWlmICh3aWwtPndkZXYtPmlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQotCQlyZXR1cm47Ci0KLQl3aWxfaW5mbyh3aWwsICJzZXQgSVRSX1RSU0ggPSAlZCB1c2VjXG4iLCB3aWwtPml0cl90cnNoKTsKLQlXKFJHRl9ETUFfSVRSX0NOVF9UUlNILCB3aWwtPml0cl90cnNoKTsKLQlXKFJHRl9ETUFfSVRSX0NOVF9DUkwsIEJJVF9ETUFfSVRSX0NOVF9DUkxfRU4gfAotCSAgQklUX0RNQV9JVFJfQ05UX0NSTF9FWFRfVElDSyk7IC8qIHN0YXJ0IGl0ICovCi19Ci0KICN1bmRlZiBSCiAjdW5kZWYgVwogI3VuZGVmIFMKQEAgLTYyOSwxMyArNjQzLDE3IEBACiAKIAl3aWxfZGJnX21pc2Mod2lsLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCisJaWYgKHdpbC0+aHdfdmVyc2lvbiA9PSBIV19WRVJfVU5LTk9XTikKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJndpbC0+bXV0ZXgpKTsKLQlXQVJOX09OKHRlc3RfYml0KHdpbF9zdGF0dXNfbmFwaV9lbiwgJndpbC0+c3RhdHVzKSk7CisJV0FSTl9PTih0ZXN0X2JpdCh3aWxfc3RhdHVzX25hcGlfZW4sIHdpbC0+c3RhdHVzKSk7CiAKIAljYW5jZWxfd29ya19zeW5jKCZ3aWwtPmRpc2Nvbm5lY3Rfd29ya2VyKTsKIAl3aWw2MjEwX2Rpc2Nvbm5lY3Qod2lsLCBOVUxMLCBXTEFOX1JFQVNPTl9ERUFVVEhfTEVBVklORywgZmFsc2UpOwogCi0Jd2lsLT5zdGF0dXMgPSAwOyAvKiBwcmV2ZW50IE5BUEkgZnJvbSBiZWluZyBzY2hlZHVsZWQgKi8KKwkvKiBwcmV2ZW50IE5BUEkgZnJvbSBiZWluZyBzY2hlZHVsZWQgKi8KKwliaXRtYXBfemVybyh3aWwtPnN0YXR1cywgd2lsX3N0YXR1c19sYXN0KTsKIAogCWlmICh3aWwtPnNjYW5fcmVxdWVzdCkgewogCQl3aWxfZGJnX21pc2Mod2lsLCAiQWJvcnQgc2Nhbl9yZXF1ZXN0IDB4JXBcbiIsCkBAIC02NDksNyArNjY3LDcgQEAKIAogCXdtaV9ldmVudF9mbHVzaCh3aWwpOwogCi0JZmx1c2hfd29ya3F1ZXVlKHdpbC0+d21pX3dxX2Nvbm4pOworCWZsdXNoX3dvcmtxdWV1ZSh3aWwtPndxX3NlcnZpY2UpOwogCWZsdXNoX3dvcmtxdWV1ZSh3aWwtPndtaV93cSk7CiAKIAlyYyA9IHdpbF90YXJnZXRfcmVzZXQod2lsKTsKQEAgLTY4OCw2ICs3MDYsNyBAQAogCXJlaW5pdF9jb21wbGV0aW9uKCZ3aWwtPndtaV9yZWFkeSk7CiAJcmVpbml0X2NvbXBsZXRpb24oJndpbC0+d21pX2NhbGwpOwogCisJd2lsX2NvbmZpZ3VyZV9pbnRlcnJ1cHRfbW9kZXJhdGlvbih3aWwpOwogCXdpbF91bm1hc2tfaXJxKHdpbCk7CiAKIAkvKiB3ZSBqdXN0IHN0YXJ0ZWQgTUFDLCB3YWl0IGZvciBGVyByZWFkeSAqLwpAQCAtNzAzLDI4ICs3MjIsNiBAQAogCXNjaGVkdWxlX3dvcmsoJndpbC0+ZndfZXJyb3Jfd29ya2VyKTsKIH0KIAotdm9pZCB3aWxfbGlua19vbihzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB3aWxfdG9fbmRldih3aWwpOwotCi0Jd2lsX2RiZ19taXNjKHdpbCwgIiVzKClcbiIsIF9fZnVuY19fKTsKLQotCW5ldGlmX2NhcnJpZXJfb24obmRldik7Ci0Jd2lsX2RiZ19taXNjKHdpbCwgIm5ldGlmX3R4X3dha2UgOiBsaW5rIG9uXG4iKTsKLQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmRldik7Ci19Ci0KLXZvaWQgd2lsX2xpbmtfb2ZmKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHdpbF90b19uZGV2KHdpbCk7Ci0KLQl3aWxfZGJnX21pc2Mod2lsLCAiJXMoKVxuIiwgX19mdW5jX18pOwotCi0JbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5kZXYpOwotCXdpbF9kYmdfbWlzYyh3aWwsICJuZXRpZl90eF9zdG9wIDogbGluayBvZmZcbiIpOwotCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwotfQotCiBpbnQgX193aWxfdXAoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gd2lsX3RvX25kZXYod2lsKTsKQEAgLTc3NCw3ICs3NzEsNyBAQAogCXdpbF9kYmdfbWlzYyh3aWwsICJOQVBJIGVuYWJsZVxuIik7CiAJbmFwaV9lbmFibGUoJndpbC0+bmFwaV9yeCk7CiAJbmFwaV9lbmFibGUoJndpbC0+bmFwaV90eCk7Ci0Jc2V0X2JpdCh3aWxfc3RhdHVzX25hcGlfZW4sICZ3aWwtPnN0YXR1cyk7CisJc2V0X2JpdCh3aWxfc3RhdHVzX25hcGlfZW4sIHdpbC0+c3RhdHVzKTsKIAogCWlmICh3aWwtPnBsYXRmb3JtX29wcy5idXNfcmVxdWVzdCkKIAkJd2lsLT5wbGF0Zm9ybV9vcHMuYnVzX3JlcXVlc3Qod2lsLT5wbGF0Zm9ybV9oYW5kbGUsCkBAIC04MDcsNyArODA0LDcgQEAKIAkJd2lsLT5wbGF0Zm9ybV9vcHMuYnVzX3JlcXVlc3Qod2lsLT5wbGF0Zm9ybV9oYW5kbGUsIDApOwogCiAJd2lsX2Rpc2FibGVfaXJxKHdpbCk7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCh3aWxfc3RhdHVzX25hcGlfZW4sICZ3aWwtPnN0YXR1cykpIHsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KHdpbF9zdGF0dXNfbmFwaV9lbiwgd2lsLT5zdGF0dXMpKSB7CiAJCW5hcGlfZGlzYWJsZSgmd2lsLT5uYXBpX3J4KTsKIAkJbmFwaV9kaXNhYmxlKCZ3aWwtPm5hcGlfdHgpOwogCQl3aWxfZGJnX21pc2Mod2lsLCAiTkFQSSBkaXNhYmxlXG4iKTsKQEAgLTgyMiwxNSArODE5LDE1IEBACiAJCXdpbC0+c2Nhbl9yZXF1ZXN0ID0gTlVMTDsKIAl9CiAKLQlpZiAodGVzdF9iaXQod2lsX3N0YXR1c19md2Nvbm5lY3RlZCwgJndpbC0+c3RhdHVzKSB8fAotCSAgICB0ZXN0X2JpdCh3aWxfc3RhdHVzX2Z3Y29ubmVjdGluZywgJndpbC0+c3RhdHVzKSkKKwlpZiAodGVzdF9iaXQod2lsX3N0YXR1c19md2Nvbm5lY3RlZCwgd2lsLT5zdGF0dXMpIHx8CisJICAgIHRlc3RfYml0KHdpbF9zdGF0dXNfZndjb25uZWN0aW5nLCB3aWwtPnN0YXR1cykpCiAJCXdtaV9zZW5kKHdpbCwgV01JX0RJU0NPTk5FQ1RfQ01ESUQsIE5VTEwsIDApOwogCiAJLyogbWFrZSBzdXJlIHdpbCBpcyBpZGxlIChub3QgY29ubmVjdGVkKSAqLwogCW11dGV4X3VubG9jaygmd2lsLT5tdXRleCk7CiAJd2hpbGUgKGl0ZXItLSkgewotCQlpbnQgaWRsZSA9ICF0ZXN0X2JpdCh3aWxfc3RhdHVzX2Z3Y29ubmVjdGVkLCAmd2lsLT5zdGF0dXMpICYmCi0JCQkgICAhdGVzdF9iaXQod2lsX3N0YXR1c19md2Nvbm5lY3RpbmcsICZ3aWwtPnN0YXR1cyk7CisJCWludCBpZGxlID0gIXRlc3RfYml0KHdpbF9zdGF0dXNfZndjb25uZWN0ZWQsIHdpbC0+c3RhdHVzKSAmJgorCQkJICAgIXRlc3RfYml0KHdpbF9zdGF0dXNfZndjb25uZWN0aW5nLCB3aWwtPnN0YXR1cyk7CiAJCWlmIChpZGxlKQogCQkJYnJlYWs7CiAJCW1zbGVlcChXQUlUX0ZPUl9ESVNDT05ORUNUX0lOVEVSVkFMX01TKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL25ldGRldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvbmV0ZGV2LmMKaW5kZXggZTgxNzAzYy4uYWNlMzBjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvbmV0ZGV2LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgUXVhbGNvbW0gQXRoZXJvcywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTUgUXVhbGNvbW0gQXRoZXJvcywgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMTUsNyArMTUsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotCiAjaW5jbHVkZSAid2lsNjIxMC5oIgogI2luY2x1ZGUgInR4cnguaCIKIApAQCAtMTIyLDYgKzEyMSwxMiBAQAogCXJldHVybiBtaW4odHhfZG9uZSwgYnVkZ2V0KTsKIH0KIAorc3RhdGljIHZvaWQgd2lsX2Rldl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWV0aGVyX3NldHVwKGRldik7CisJZGV2LT50eF9xdWV1ZV9sZW4gPSBXSUxfVFhfUV9MRU5fREVGQVVMVDsKK30KKwogdm9pZCAqd2lsX2lmX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICpjc3IpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CkBAIC0xNTMsNyArMTU4LDcgQEAKIAljaCA9IHdkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF82MEdIWl0tPmNoYW5uZWxzOwogCWNmZzgwMjExX2NoYW5kZWZfY3JlYXRlKCZ3ZGV2LT5wcmVzZXRfY2hhbmRlZiwgY2gsIE5MODAyMTFfQ0hBTl9OT19IVCk7CiAKLQluZGV2ID0gYWxsb2NfbmV0ZGV2KDAsICJ3bGFuJWQiLCBORVRfTkFNRV9VTktOT1dOLCBldGhlcl9zZXR1cCk7CisJbmRldiA9IGFsbG9jX25ldGRldigwLCAid2xhbiVkIiwgTkVUX05BTUVfVU5LTk9XTiwgd2lsX2Rldl9zZXR1cCk7CiAJaWYgKCFuZGV2KSB7CiAJCWRldl9lcnIoZGV2LCAiYWxsb2NfbmV0ZGV2X21xcyBmYWlsZWRcbiIpOwogCQlyYyA9IC1FTk9NRU07CkBAIC0xNzQsNyArMTc5LDcgQEAKIAluZXRpZl9uYXBpX2FkZChuZGV2LCAmd2lsLT5uYXBpX3R4LCB3aWw2MjEwX25ldGRldl9wb2xsX3R4LAogCQkgICAgICAgV0lMNjIxMF9OQVBJX0JVREdFVCk7CiAKLQl3aWxfbGlua19vZmYod2lsKTsKKwluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmRldik7CiAKIAlyZXR1cm4gd2lsOwogCkBAIC0yMTcsOCArMjIyLDYgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAotCXdpbF9saW5rX29mZih3aWwpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL3BjaWVfYnVzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9wY2llX2J1cy5jCmluZGV4IDY2NjI2YTguLjNkZDI2NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL3BjaWVfYnVzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvcGNpZV9idXMuYwpAQCAtMzEsNiArMzEsNDYgQEAKIG1vZHVsZV9wYXJhbShkZWJ1Z19mdywgYm9vbCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnX2Z3LCAiIGxvYWQgZHJpdmVyIGlmIEZXIG5vdCByZWFkeS4gRm9yIEZXIGRlYnVnIik7CiAKK3N0YXRpYwordm9pZCB3aWxfc2V0X2NhcGFiaWxpdGllcyhzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpCit7CisJdTMyIHJldl9pZCA9IGlvcmVhZDMyKHdpbC0+Y3NyICsgSE9TVEFERFIoUkdGX1VTRVJfSlRBR19ERVZfSUQpKTsKKworCWJpdG1hcF96ZXJvKHdpbC0+aHdfY2FwYWJpbGl0aWVzLCBod19jYXBhYmlsaXR5X2xhc3QpOworCisJc3dpdGNoIChyZXZfaWQpIHsKKwljYXNlIEpUQUdfREVWX0lEX01BUkxPTl9CMDoKKwkJd2lsLT5od19uYW1lID0gIk1hcmxvbiBCMCI7CisJCXdpbC0+aHdfdmVyc2lvbiA9IEhXX1ZFUl9NQVJMT05fQjA7CisJCWJyZWFrOworCWNhc2UgSlRBR19ERVZfSURfU1BBUlJPV19BMDoKKwkJd2lsLT5od19uYW1lID0gIlNwYXJyb3cgQTAiOworCQl3aWwtPmh3X3ZlcnNpb24gPSBIV19WRVJfU1BBUlJPV19BMDsKKwkJYnJlYWs7CisJY2FzZSBKVEFHX0RFVl9JRF9TUEFSUk9XX0ExOgorCQl3aWwtPmh3X25hbWUgPSAiU3BhcnJvdyBBMSI7CisJCXdpbC0+aHdfdmVyc2lvbiA9IEhXX1ZFUl9TUEFSUk9XX0ExOworCQlicmVhazsKKwljYXNlIEpUQUdfREVWX0lEX1NQQVJST1dfQjA6CisJCXdpbC0+aHdfbmFtZSA9ICJTcGFycm93IEIwIjsKKwkJd2lsLT5od192ZXJzaW9uID0gSFdfVkVSX1NQQVJST1dfQjA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXdpbF9lcnIod2lsLCAiVW5rbm93biBib2FyZCBoYXJkd2FyZSAweCUwOHhcbiIsIHJldl9pZCk7CisJCXdpbC0+aHdfbmFtZSA9ICJVbmtub3duIjsKKwkJd2lsLT5od192ZXJzaW9uID0gSFdfVkVSX1VOS05PV047CisJfQorCisJd2lsX2luZm8od2lsLCAiQm9hcmQgaGFyZHdhcmUgaXMgJXNcbiIsIHdpbC0+aHdfbmFtZSk7CisKKwlpZiAod2lsLT5od192ZXJzaW9uID49IEhXX1ZFUl9TUEFSUk9XX0EwKQorCQlzZXRfYml0KGh3X2NhcGFiaWxpdHlfcmVzZXRfdjIsIHdpbC0+aHdfY2FwYWJpbGl0aWVzKTsKKworCWlmICh3aWwtPmh3X3ZlcnNpb24gPj0gSFdfVkVSX1NQQVJST1dfQjApCisJCXNldF9iaXQoaHdfY2FwYWJpbGl0eV9hZHZhbmNlZF9pdHJfbW9kZXJhdGlvbiwKKwkJCXdpbC0+aHdfY2FwYWJpbGl0aWVzKTsKK30KKwogdm9pZCB3aWxfZGlzYWJsZV9pcnEoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKQogewogCWludCBpcnEgPSB3aWwtPnBkZXYtPmlycTsKQEAgLTE0OSwxMiArMTg5LDExIEBACiAJc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CiAJdm9pZCBfX2lvbWVtICpjc3I7Ci0Jc3RydWN0IHdpbF9ib2FyZCAqYm9hcmQgPSAoc3RydWN0IHdpbF9ib2FyZCAqKWlkLT5kcml2ZXJfZGF0YTsKIAlpbnQgcmM7CiAKIAkvKiBjaGVjayBIVyAqLwogCWRldl9pbmZvKCZwZGV2LT5kZXYsIFdJTF9OQU1FCi0JCSAiIFwiJXNcIiBkZXZpY2UgZm91bmQgWyUwNHg6JTA0eF0gKHJldiAleClcbiIsIGJvYXJkLT5uYW1lLAorCQkgIiBkZXZpY2UgZm91bmQgWyUwNHg6JTA0eF0gKHJldiAleClcbiIsCiAJCSAoaW50KXBkZXYtPnZlbmRvciwgKGludClwZGV2LT5kZXZpY2UsIChpbnQpcGRldi0+cmV2aXNpb24pOwogCiAJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkgIT0gV0lMNjIxMF9NRU1fU0laRSkgewpAQCAtMjA0LDggKzI0Myw3IEBACiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgd2lsKTsKIAl3aWwtPnBkZXYgPSBwZGV2OwotCXdpbC0+Ym9hcmQgPSBib2FyZDsKLQorCXdpbF9zZXRfY2FwYWJpbGl0aWVzKHdpbCk7CiAJd2lsNjIxMF9jbGVhcl9pcnEod2lsKTsKIAogCXdpbC0+cGxhdGZvcm1faGFuZGxlID0KQEAgLTI2NiwyMyArMzA0LDEwIEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHdpbF9ib2FyZCB3aWxfYm9hcmRfbWFybG9uID0gewotCS5ib2FyZCA9IFdJTF9CT0FSRF9NQVJMT04sCi0JLm5hbWUgPSAibWFybG9uIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2lsX2JvYXJkIHdpbF9ib2FyZF9zcGFycm93ID0gewotCS5ib2FyZCA9IFdJTF9CT0FSRF9TUEFSUk9XLAotCS5uYW1lID0gInNwYXJyb3ciLAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHdpbDYyMTBfcGNpZV9pZHNbXSA9IHsKLQl7IFBDSV9ERVZJQ0UoMHgxYWU5LCAweDAzMDEpLAotCSAgLmRyaXZlcl9kYXRhID0gKGtlcm5lbF91bG9uZ190KSZ3aWxfYm9hcmRfbWFybG9uIH0sCi0JeyBQQ0lfREVWSUNFKDB4MWFlOSwgMHgwMzEwKSwKLQkgIC5kcml2ZXJfZGF0YSA9IChrZXJuZWxfdWxvbmdfdCkmd2lsX2JvYXJkX3NwYXJyb3cgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxYWU5LCAweDAzMDIpLCAvKiBzYW1lIGFzIGFib3ZlLCBmaXJtd2FyZSBicm9rZW4gKi8KLQkgIC5kcml2ZXJfZGF0YSA9IChrZXJuZWxfdWxvbmdfdCkmd2lsX2JvYXJkX3NwYXJyb3cgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxYWU5LCAweDAzMDEpIH0sCisJeyBQQ0lfREVWSUNFKDB4MWFlOSwgMHgwMzEwKSB9LAorCXsgUENJX0RFVklDRSgweDFhZTksIDB4MDMwMikgfSwgLyogc2FtZSBhcyBhYm92ZSwgZmlybXdhcmUgYnJva2VuICovCiAJeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8JfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgd2lsNjIxMF9wY2llX2lkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9yeF9yZW9yZGVyLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC9yeF9yZW9yZGVyLmMKaW5kZXggNDg5Y2I3My4uY2ExMGRjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvcnhfcmVvcmRlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL3J4X3Jlb3JkZXIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTQgUXVhbGNvbW0gQXRoZXJvcywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUgUXVhbGNvbW0gQXRoZXJvcywgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtODksNyArODksOSBAQAogCX0KIH0KIAorLyogY2FsbGVkIGluIE5BUEkgY29udGV4dCAqLwogdm9pZCB3aWxfcnhfcmVvcmRlcihzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsIHN0cnVjdCBza19idWZmICpza2IpCitfX2FjcXVpcmVzKCZzdGEtPnRpZF9yeF9sb2NrKSBfX3JlbGVhc2VzKCZzdGEtPnRpZF9yeF9sb2NrKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gd2lsX3RvX25kZXYod2lsKTsKIAlzdHJ1Y3QgdnJpbmdfcnhfZGVzYyAqZCA9IHdpbF9za2JfcnhkZXNjKHNrYik7CkBAIC05NywyMiArOTksMjYgQEAKIAlpbnQgY2lkID0gd2lsX3J4ZGVzY19jaWQoZCk7CiAJaW50IG1pZCA9IHdpbF9yeGRlc2NfbWlkKGQpOwogCXUxNiBzZXEgPSB3aWxfcnhkZXNjX3NlcShkKTsKKwlpbnQgbWNhc3QgPSB3aWxfcnhkZXNjX21jYXN0KGQpOwogCXN0cnVjdCB3aWxfc3RhX2luZm8gKnN0YSA9ICZ3aWwtPnN0YVtjaWRdOwogCXN0cnVjdCB3aWxfdGlkX2FtcGR1X3J4ICpyOwogCXUxNiBoc2VxOwogCWludCBpbmRleDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jd2lsX2RiZ190eHJ4KHdpbCwgIk1JRCAlZCBDSUQgJWQgVElEICVkIFNlcSAweCUwM3hcbiIsCi0JCSAgICAgbWlkLCBjaWQsIHRpZCwgc2VxKTsKKwl3aWxfZGJnX3R4cngod2lsLCAiTUlEICVkIENJRCAlZCBUSUQgJWQgU2VxIDB4JTAzeCBtY2FzdCAlMDF4XG4iLAorCQkgICAgIG1pZCwgY2lkLCB0aWQsIHNlcSwgbWNhc3QpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN0YS0+dGlkX3J4X2xvY2ssIGZsYWdzKTsKKwlpZiAodW5saWtlbHkobWNhc3QpKSB7CisJCXdpbF9uZXRpZl9yeF9hbnkoc2tiLCBuZGV2KTsKKwkJcmV0dXJuOworCX0KKworCXNwaW5fbG9jaygmc3RhLT50aWRfcnhfbG9jayk7CiAKIAlyID0gc3RhLT50aWRfcnhbdGlkXTsKIAlpZiAoIXIpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhLT50aWRfcnhfbG9jaywgZmxhZ3MpOwogCQl3aWxfbmV0aWZfcnhfYW55KHNrYiwgbmRldik7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJaHNlcSA9IHItPmhlYWRfc2VxX251bTsKQEAgLTEyMSwxMyArMTI3LDI0IEBACiAJICogcmVwb3J0ZWQsIGFuZCBkYXRhIFJ4LCBmZXcgcGFja2V0cyBtYXkgYmUgcGFzcyB1cCBiZWZvcmUgcmVvcmRlcgogCSAqIGJ1ZmZlciBnZXQgYWxsb2NhdGVkLiBDYXRjaCB1cCBieSBwcmV0ZW5kaW5nIFNTTiBpcyB3aGF0IHdlCiAJICogc2VlIGluIHRoZSAxLXN0IFJ4IHBhY2tldAorCSAqCisJICogQW5vdGhlciBzY2VuYXJpbywgUnggZ2V0IGRlbGF5ZWQgYW5kIHdlIGdvdCBwYWNrZXQgZnJvbSBiZWZvcmUKKwkgKiBCQUNLLiBQYXNzIGl0IHRvIHRoZSBzdGFjayBhbmQgd2FpdC4KIAkgKi8KIAlpZiAoci0+Zmlyc3RfdGltZSkgewogCQlyLT5maXJzdF90aW1lID0gZmFsc2U7CiAJCWlmIChzZXEgIT0gci0+aGVhZF9zZXFfbnVtKSB7Ci0JCQl3aWxfZXJyKHdpbCwgIkVycm9yOiAxLXN0IGZyYW1lIHdpdGggd3Jvbmcgc2VxdWVuY2UiCi0JCQkJIiAlZCwgc2hvdWxkIGJlICVkLiBGaXhpbmcuLi5cbiIsIHNlcSwKLQkJCQlyLT5oZWFkX3NlcV9udW0pOworCQkJaWYgKHNlcV9sZXNzKHNlcSwgci0+aGVhZF9zZXFfbnVtKSkgeworCQkJCXdpbF9lcnIod2lsLAorCQkJCQkiRXJyb3I6IGZyYW1lIHdpdGggZWFybHkgc2VxdWVuY2UgMHglMDN4LCBzaG91bGQgYmUgMHglMDN4LiBXYWl0aW5nLi4uXG4iLAorCQkJCQlzZXEsIHItPmhlYWRfc2VxX251bSk7CisJCQkJci0+Zmlyc3RfdGltZSA9IHRydWU7CisJCQkJd2lsX25ldGlmX3J4X2FueShza2IsIG5kZXYpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJd2lsX2Vycih3aWwsCisJCQkJIkVycm9yOiAxLXN0IGZyYW1lIHdpdGggd3Jvbmcgc2VxdWVuY2UgMHglMDN4LCBzaG91bGQgYmUgMHglMDN4LiBGaXhpbmcuLi5cbiIsCisJCQkJc2VxLCByLT5oZWFkX3NlcV9udW0pOwogCQkJci0+aGVhZF9zZXFfbnVtID0gc2VxOwogCQkJci0+c3NuID0gc2VxOwogCQl9CkBAIC0xNzksNyArMTk2LDcgQEAKIAl3aWxfcmVvcmRlcl9yZWxlYXNlKHdpbCwgcik7CiAKIG91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPnRpZF9yeF9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2soJnN0YS0+dGlkX3J4X2xvY2spOwogfQogCiBzdHJ1Y3Qgd2lsX3RpZF9hbXBkdV9yeCAqd2lsX3RpZF9hbXBkdV9yeF9hbGxvYyhzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsCkBAIC0yMTksMyArMjM2LDI0MSBAQAogCWtmcmVlKHItPnJlb3JkZXJfdGltZSk7CiAJa2ZyZWUocik7CiB9CisKKy8qIEFEREJBIHByb2Nlc3NpbmcgKi8KK3N0YXRpYyB1MTYgd2lsX2FnZ19zaXplKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCwgdTE2IHJlcV9hZ2dfd3NpemUpCit7CisJdTE2IG1heF9hZ2dfc2l6ZSA9IG1pbl90KHUxNiwgV0lMX01BWF9BR0dfV1NJWkUsIFdJTF9NQVhfQU1QRFVfU0laRSAvCisJCQkJIChtdHVfbWF4ICsgV0lMX01BWF9NUERVX09WRVJIRUFEKSk7CisKKwlpZiAoIXJlcV9hZ2dfd3NpemUpCisJCXJldHVybiBtYXhfYWdnX3NpemU7CisKKwlyZXR1cm4gbWluKG1heF9hZ2dfc2l6ZSwgcmVxX2FnZ193c2l6ZSk7Cit9CisKKy8qIEJsb2NrIEFjayAtIFJ4IHNpZGUgKHJlY2lwaWVudCAqLworaW50IHdpbF9hZGRiYV9yeF9yZXF1ZXN0KHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCwgdTggY2lkeHRpZCwKKwkJCSB1OCBkaWFsb2dfdG9rZW4sIF9fbGUxNiBiYV9wYXJhbV9zZXQsCisJCQkgX19sZTE2IGJhX3RpbWVvdXQsIF9fbGUxNiBiYV9zZXFfY3RybCkKK3sKKwlzdHJ1Y3Qgd2lsX2JhY2tfcnggKnJlcSA9IGt6YWxsb2Moc2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKKworCWlmICghcmVxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJlcS0+Y2lkeHRpZCA9IGNpZHh0aWQ7CisJcmVxLT5kaWFsb2dfdG9rZW4gPSBkaWFsb2dfdG9rZW47CisJcmVxLT5iYV9wYXJhbV9zZXQgPSBsZTE2X3RvX2NwdShiYV9wYXJhbV9zZXQpOworCXJlcS0+YmFfdGltZW91dCA9IGxlMTZfdG9fY3B1KGJhX3RpbWVvdXQpOworCXJlcS0+YmFfc2VxX2N0cmwgPSBsZTE2X3RvX2NwdShiYV9zZXFfY3RybCk7CisKKwltdXRleF9sb2NrKCZ3aWwtPmJhY2tfcnhfbXV0ZXgpOworCWxpc3RfYWRkX3RhaWwoJnJlcS0+bGlzdCwgJndpbC0+YmFja19yeF9wZW5kaW5nKTsKKwltdXRleF91bmxvY2soJndpbC0+YmFja19yeF9tdXRleCk7CisKKwlxdWV1ZV93b3JrKHdpbC0+d3Ffc2VydmljZSwgJndpbC0+YmFja19yeF93b3JrZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdpbF9iYWNrX3J4X2hhbmRsZShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsCisJCQkgICAgICAgc3RydWN0IHdpbF9iYWNrX3J4ICpyZXEpCitfX2FjcXVpcmVzKCZzdGEtPnRpZF9yeF9sb2NrKSBfX3JlbGVhc2VzKCZzdGEtPnRpZF9yeF9sb2NrKQoreworCXN0cnVjdCB3aWxfc3RhX2luZm8gKnN0YTsKKwl1OCBjaWQsIHRpZDsKKwl1MTYgYWdnX3dzaXplID0gMDsKKwkvKiBiaXQgMDogQS1NU0RVIHN1cHBvcnRlZAorCSAqIGJpdCAxOiBwb2xpY3kgKHNob3VsZCBiZSAwIGZvciB1cykKKwkgKiBiaXRzIDIuLjU6IFRJRAorCSAqIGJpdHMgNi4uMTU6IGJ1ZmZlciBzaXplCisJICovCisJdTE2IHJlcV9hZ2dfd3NpemUgPSBXSUxfR0VUX0JJVFMocmVxLT5iYV9wYXJhbV9zZXQsIDYsIDE1KTsKKwlib29sIGFnZ19hbXNkdSA9ICEhKHJlcS0+YmFfcGFyYW1fc2V0ICYgQklUKDApKTsKKwlpbnQgYmFfcG9saWN5ID0gcmVxLT5iYV9wYXJhbV9zZXQgJiBCSVQoMSk7CisJdTE2IGFnZ190aW1lb3V0ID0gcmVxLT5iYV90aW1lb3V0OworCXUxNiBzdGF0dXMgPSBXTEFOX1NUQVRVU19TVUNDRVNTOworCXUxNiBzc24gPSByZXEtPmJhX3NlcV9jdHJsID4+IDQ7CisJc3RydWN0IHdpbF90aWRfYW1wZHVfcnggKnI7CisJaW50IHJjOworCisJbWlnaHRfc2xlZXAoKTsKKwlwYXJzZV9jaWR4dGlkKHJlcS0+Y2lkeHRpZCwgJmNpZCwgJnRpZCk7CisKKwkvKiBzYW5pdHkgY2hlY2tzICovCisJaWYgKGNpZCA+PSBXSUw2MjEwX01BWF9DSUQpIHsKKwkJd2lsX2Vycih3aWwsICJCQUNLOiBpbnZhbGlkIENJRCAlZFxuIiwgY2lkKTsKKwkJcmV0dXJuOworCX0KKworCXN0YSA9ICZ3aWwtPnN0YVtjaWRdOworCWlmIChzdGEtPnN0YXR1cyAhPSB3aWxfc3RhX2Nvbm5lY3RlZCkgeworCQl3aWxfZXJyKHdpbCwgIkJBQ0s6IENJRCAlZCBub3QgY29ubmVjdGVkXG4iLCBjaWQpOworCQlyZXR1cm47CisJfQorCisJd2lsX2RiZ193bWkod2lsLAorCQkgICAgIkFEREJBIHJlcXVlc3QgZm9yIENJRCAlZCAlcE0gVElEICVkIHNpemUgJWQgdGltZW91dCAlZCBBTVNEVSVzIHBvbGljeSAlZCB0b2tlbiAlZCBTU04gMHglMDN4XG4iLAorCQkgICAgY2lkLCBzdGEtPmFkZHIsIHRpZCwgcmVxX2FnZ193c2l6ZSwgcmVxLT5iYV90aW1lb3V0LAorCQkgICAgYWdnX2Ftc2R1ID8gIisiIDogIi0iLCAhIWJhX3BvbGljeSwgcmVxLT5kaWFsb2dfdG9rZW4sIHNzbik7CisKKwkvKiBhcHBseSBwb2xpY2llcyAqLworCWlmIChiYV9wb2xpY3kpIHsKKwkJd2lsX2Vycih3aWwsICJCQUNLIHJlcXVlc3RlZCB1bnN1cHBvcnRlZCBiYV9wb2xpY3kgPT0gMVxuIik7CisJCXN0YXR1cyA9IFdMQU5fU1RBVFVTX0lOVkFMSURfUU9TX1BBUkFNOworCX0KKwlpZiAoc3RhdHVzID09IFdMQU5fU1RBVFVTX1NVQ0NFU1MpCisJCWFnZ193c2l6ZSA9IHdpbF9hZ2dfc2l6ZSh3aWwsIHJlcV9hZ2dfd3NpemUpOworCisJcmMgPSB3bWlfYWRkYmFfcnhfcmVzcCh3aWwsIGNpZCwgdGlkLCByZXEtPmRpYWxvZ190b2tlbiwgc3RhdHVzLAorCQkJICAgICAgIGFnZ19hbXNkdSwgYWdnX3dzaXplLCBhZ2dfdGltZW91dCk7CisJaWYgKHJjIHx8IChzdGF0dXMgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykpCisJCXJldHVybjsKKworCS8qIGFwcGx5ICovCisJciA9IHdpbF90aWRfYW1wZHVfcnhfYWxsb2Mod2lsLCBhZ2dfd3NpemUsIHNzbik7CisJc3Bpbl9sb2NrX2JoKCZzdGEtPnRpZF9yeF9sb2NrKTsKKwl3aWxfdGlkX2FtcGR1X3J4X2ZyZWUod2lsLCBzdGEtPnRpZF9yeFt0aWRdKTsKKwlzdGEtPnRpZF9yeFt0aWRdID0gcjsKKwlzcGluX3VubG9ja19iaCgmc3RhLT50aWRfcnhfbG9jayk7Cit9CisKK3ZvaWQgd2lsX2JhY2tfcnhfZmx1c2goc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKQoreworCXN0cnVjdCB3aWxfYmFja19yeCAqZXZ0LCAqdDsKKworCXdpbF9kYmdfbWlzYyh3aWwsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZ3aWwtPmJhY2tfcnhfbXV0ZXgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgJndpbC0+YmFja19yeF9wZW5kaW5nLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZldnQtPmxpc3QpOworCQlrZnJlZShldnQpOworCX0KKworCW11dGV4X3VubG9jaygmd2lsLT5iYWNrX3J4X211dGV4KTsKK30KKworLyogUmV0cmlldmUgbmV4dCBBRERCQSByZXF1ZXN0IGZyb20gdGhlIHBlbmRpbmcgbGlzdCAqLworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKm5leHRfYmFja19yeChzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcmV0ID0gTlVMTDsKKworCW11dGV4X2xvY2soJndpbC0+YmFja19yeF9tdXRleCk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJndpbC0+YmFja19yeF9wZW5kaW5nKSkgeworCQlyZXQgPSB3aWwtPmJhY2tfcnhfcGVuZGluZy5uZXh0OworCQlsaXN0X2RlbChyZXQpOworCX0KKworCW11dGV4X3VubG9jaygmd2lsLT5iYWNrX3J4X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgd2lsX2JhY2tfcnhfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdpbDYyMTBfcHJpdiwKKwkJCQkJCWJhY2tfcnhfd29ya2VyKTsKKwlzdHJ1Y3Qgd2lsX2JhY2tfcnggKmV2dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaDsKKworCXdoaWxlICgobGggPSBuZXh0X2JhY2tfcngod2lsKSkgIT0gTlVMTCkgeworCQlldnQgPSBsaXN0X2VudHJ5KGxoLCBzdHJ1Y3Qgd2lsX2JhY2tfcngsIGxpc3QpOworCisJCXdpbF9iYWNrX3J4X2hhbmRsZSh3aWwsIGV2dCk7CisJCWtmcmVlKGV2dCk7CisJfQorfQorCisvKiBCQUNLIC0gVHggKG9yaWdpbmF0b3IpIHNpZGUgKi8KK3N0YXRpYyB2b2lkIHdpbF9iYWNrX3R4X2hhbmRsZShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsCisJCQkgICAgICAgc3RydWN0IHdpbF9iYWNrX3R4ICpyZXEpCit7CisJc3RydWN0IHZyaW5nX3R4X2RhdGEgKnR4ZGF0YSA9ICZ3aWwtPnZyaW5nX3R4X2RhdGFbcmVxLT5yaW5naWRdOworCWludCByYzsKKworCWlmICh0eGRhdGEtPmFkZGJhX2luX3Byb2dyZXNzKSB7CisJCXdpbF9kYmdfbWlzYyh3aWwsICJBRERCQSBmb3IgdnJpbmdbJWRdIGFscmVhZHkgaW4gcHJvZ3Jlc3NcbiIsCisJCQkgICAgIHJlcS0+cmluZ2lkKTsKKwkJcmV0dXJuOworCX0KKwlpZiAodHhkYXRhLT5hZ2dfd3NpemUpIHsKKwkJd2lsX2RiZ19taXNjKHdpbCwKKwkJCSAgICAgIkFEREJBIGZvciB2cmluZ1slZF0gYWxyZWFkeSBlc3RhYmxpc2hlZCB3c2l6ZSAlZFxuIiwKKwkJCSAgICAgcmVxLT5yaW5naWQsIHR4ZGF0YS0+YWdnX3dzaXplKTsKKwkJcmV0dXJuOworCX0KKwl0eGRhdGEtPmFkZGJhX2luX3Byb2dyZXNzID0gdHJ1ZTsKKwlyYyA9IHdtaV9hZGRiYSh3aWwsIHJlcS0+cmluZ2lkLCByZXEtPmFnZ193c2l6ZSwgcmVxLT5hZ2dfdGltZW91dCk7CisJaWYgKHJjKQorCQl0eGRhdGEtPmFkZGJhX2luX3Byb2dyZXNzID0gZmFsc2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0X2JhY2tfdHgoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnJldCA9IE5VTEw7CisKKwltdXRleF9sb2NrKCZ3aWwtPmJhY2tfdHhfbXV0ZXgpOworCisJaWYgKCFsaXN0X2VtcHR5KCZ3aWwtPmJhY2tfdHhfcGVuZGluZykpIHsKKwkJcmV0ID0gd2lsLT5iYWNrX3R4X3BlbmRpbmcubmV4dDsKKwkJbGlzdF9kZWwocmV0KTsKKwl9CisKKwltdXRleF91bmxvY2soJndpbC0+YmFja190eF9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHdpbF9iYWNrX3R4X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3aWw2MjEwX3ByaXYsCisJCQkJCQkgYmFja190eF93b3JrZXIpOworCXN0cnVjdCB3aWxfYmFja190eCAqZXZ0OworCXN0cnVjdCBsaXN0X2hlYWQgKmxoOworCisJd2hpbGUgKChsaCA9IG5leHRfYmFja190eCh3aWwpKSAhPSBOVUxMKSB7CisJCWV2dCA9IGxpc3RfZW50cnkobGgsIHN0cnVjdCB3aWxfYmFja190eCwgbGlzdCk7CisKKwkJd2lsX2JhY2tfdHhfaGFuZGxlKHdpbCwgZXZ0KTsKKwkJa2ZyZWUoZXZ0KTsKKwl9Cit9CisKK3ZvaWQgd2lsX2JhY2tfdHhfZmx1c2goc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKQoreworCXN0cnVjdCB3aWxfYmFja190eCAqZXZ0LCAqdDsKKworCXdpbF9kYmdfbWlzYyh3aWwsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwltdXRleF9sb2NrKCZ3aWwtPmJhY2tfdHhfbXV0ZXgpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2dCwgdCwgJndpbC0+YmFja190eF9wZW5kaW5nLCBsaXN0KSB7CisJCWxpc3RfZGVsKCZldnQtPmxpc3QpOworCQlrZnJlZShldnQpOworCX0KKworCW11dGV4X3VubG9jaygmd2lsLT5iYWNrX3R4X211dGV4KTsKK30KKworaW50IHdpbF9hZGRiYV90eF9yZXF1ZXN0KHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCwgdTggcmluZ2lkLCB1MTYgd3NpemUpCit7CisJc3RydWN0IHdpbF9iYWNrX3R4ICpyZXEgPSBremFsbG9jKHNpemVvZigqcmVxKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXEtPnJpbmdpZCA9IHJpbmdpZDsKKwlyZXEtPmFnZ193c2l6ZSA9IHdpbF9hZ2dfc2l6ZSh3aWwsIHdzaXplKTsKKwlyZXEtPmFnZ190aW1lb3V0ID0gMDsKKworCW11dGV4X2xvY2soJndpbC0+YmFja190eF9tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmcmVxLT5saXN0LCAmd2lsLT5iYWNrX3R4X3BlbmRpbmcpOworCW11dGV4X3VubG9jaygmd2lsLT5iYWNrX3R4X211dGV4KTsKKworCXF1ZXVlX3dvcmsod2lsLT53cV9zZXJ2aWNlLCAmd2lsLT5iYWNrX3R4X3dvcmtlcik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL3R4cnguYwppbmRleCBlM2Y4YmRjLi44NDM5ZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC90eHJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvdHhyeC5jCkBAIC00NjMsNyArNDYzLDcgQEAKIAkgKiBhbmQgaW4gY2FzZSBvZiBlcnJvciBkcm9wIHRoZSBwYWNrZXQKIAkgKiBoaWdoZXIgc3RhY2sgbGF5ZXJzIHdpbGwgaGFuZGxlIHJldHJhbnNtaXNzaW9uIChpZiByZXF1aXJlZCkKIAkgKi8KLQlpZiAoZC0+ZG1hLnN0YXR1cyAmIFJYX0RNQV9TVEFUVVNfTDRfSURFTlQpIHsKKwlpZiAoZC0+ZG1hLnN0YXR1cyAmIFJYX0RNQV9TVEFUVVNfTDRJKSB7CiAJCS8qIEw0IHByb3RvY29sIGlkZW50aWZpZWQsIGNzdW0gY2FsY3VsYXRlZCAqLwogCQlpZiAoKGQtPmRtYS5lcnJvciAmIFJYX0RNQV9FUlJPUl9MNF9FUlIpID09IDApCiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwpAQCAtNTgxLDE0ICs1ODEsOCBAQAogCQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTsKIAkJCXdpbF9uZXRpZl9yeF9hbnkoc2tiLCBuZGV2KTsKIAkJfSBlbHNlIHsKLQkJCXN0cnVjdCBldGhoZHIgKmV0aCA9ICh2b2lkICopc2tiLT5kYXRhOwotCiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKLQotCQkJaWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihldGgtPmhfZGVzdCkpCi0JCQkJd2lsX3J4X3Jlb3JkZXIod2lsLCBza2IpOwotCQkJZWxzZQotCQkJCXdpbF9uZXRpZl9yeF9hbnkoc2tiLCBuZGV2KTsKKwkJCXdpbF9yeF9yZW9yZGVyKHdpbCwgc2tiKTsKIAkJfQogCX0KIAl3aWxfcnhfcmVmaWxsKHdpbCwgdi0+c2l6ZSk7CkBAIC02NDUsNyArNjM5LDcgQEAKIAkJLnZyaW5nX2NmZyA9IHsKIAkJCS50eF9zd19yaW5nID0gewogCQkJCS5tYXhfbXBkdV9zaXplID0KLQkJCQkJY3B1X3RvX2xlMTYobXR1X21heCArIEVUSF9ITEVOKSwKKwkJCQkJY3B1X3RvX2xlMTYod2lsX210dTJtYWNidWYobXR1X21heCkpLAogCQkJCS5yaW5nX3NpemUgPSBjcHVfdG9fbGUxNihzaXplKSwKIAkJCX0sCiAJCQkucmluZ2lkID0gaWQsCkBAIC02NTMsNyArNjQ3LDcgQEAKIAkJCS5lbmNhcF90cmFuc190eXBlID0gV01JX1ZSSU5HX0VOQ19UWVBFXzgwMl8zLAogCQkJLm1hY19jdHJsID0gMCwKIAkJCS50b19yZXNvbHV0aW9uID0gMCwKLQkJCS5hZ2dfbWF4X3dzaXplID0gMTYsCisJCQkuYWdnX21heF93c2l6ZSA9IDAsCiAJCQkuc2NoZF9wYXJhbXMgPSB7CiAJCQkJLnByaW9yaXR5ID0gY3B1X3RvX2xlMTYoMCksCiAJCQkJLnRpbWVzbG90X3VzID0gY3B1X3RvX2xlMTYoMHhmZmYpLApAQCAtNjc3LDYgKzY3MSw3IEBACiAJfQogCiAJbWVtc2V0KHR4ZGF0YSwgMCwgc2l6ZW9mKCp0eGRhdGEpKTsKKwlzcGluX2xvY2tfaW5pdCgmdHhkYXRhLT5sb2NrKTsKIAl2cmluZy0+c2l6ZSA9IHNpemU7CiAJcmMgPSB3aWxfdnJpbmdfYWxsb2Mod2lsLCB2cmluZyk7CiAJaWYgKHJjKQpAQCAtNzAxLDYgKzY5Niw4IEBACiAJdnJpbmctPmh3dGFpbCA9IGxlMzJfdG9fY3B1KHJlcGx5LmNtZC50eF92cmluZ190YWlsX3B0cik7CiAKIAl0eGRhdGEtPmVuYWJsZWQgPSAxOworCWlmICh3aWwtPnN0YVtjaWRdLmRhdGFfcG9ydF9vcGVuICYmIChhZ2dfd3NpemUgPj0gMCkpCisJCXdpbF9hZGRiYV90eF9yZXF1ZXN0KHdpbCwgaWQsIGFnZ193c2l6ZSk7CiAKIAlyZXR1cm4gMDsKICBvdXRfZnJlZToKQEAgLTcxMyw2ICs3MTAsNyBAQAogdm9pZCB3aWxfdnJpbmdfZmluaV90eChzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsIGludCBpZCkKIHsKIAlzdHJ1Y3QgdnJpbmcgKnZyaW5nID0gJndpbC0+dnJpbmdfdHhbaWRdOworCXN0cnVjdCB2cmluZ190eF9kYXRhICp0eGRhdGEgPSAmd2lsLT52cmluZ190eF9kYXRhW2lkXTsKIAogCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmd2lsLT5tdXRleCkpOwogCkBAIC03MjEsMTIgKzcxOSwxNSBAQAogCiAJd2lsX2RiZ19taXNjKHdpbCwgIiVzKCkgaWQ9JWRcbiIsIF9fZnVuY19fLCBpZCk7CiAKKwlzcGluX2xvY2tfYmgoJnR4ZGF0YS0+bG9jayk7CisJdHhkYXRhLT5lbmFibGVkID0gMDsgLyogbm8gVHggY2FuIGJlIGluIHByb2dyZXNzIG9yIHN0YXJ0IGFuZXcgKi8KKwlzcGluX3VubG9ja19iaCgmdHhkYXRhLT5sb2NrKTsKIAkvKiBtYWtlIHN1cmUgTkFQSSB3b24ndCB0b3VjaCB0aGlzIHZyaW5nICovCi0Jd2lsLT52cmluZ190eF9kYXRhW2lkXS5lbmFibGVkID0gMDsKLQlpZiAodGVzdF9iaXQod2lsX3N0YXR1c19uYXBpX2VuLCAmd2lsLT5zdGF0dXMpKQorCWlmICh0ZXN0X2JpdCh3aWxfc3RhdHVzX25hcGlfZW4sIHdpbC0+c3RhdHVzKSkKIAkJbmFwaV9zeW5jaHJvbml6ZSgmd2lsLT5uYXBpX3R4KTsKIAogCXdpbF92cmluZ19mcmVlKHdpbCwgdnJpbmcsIDEpOworCW1lbXNldCh0eGRhdGEsIDAsIHNpemVvZigqdHhkYXRhKSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdnJpbmcgKndpbF9maW5kX3R4X3ZyaW5nKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCwKQEAgLTc3Myw2ICs3NzQsMzggQEAKIAogc3RhdGljIGludCB3aWxfdHhfdnJpbmcoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLCBzdHJ1Y3QgdnJpbmcgKnZyaW5nLAogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKK3N0YXRpYyBzdHJ1Y3QgdnJpbmcgKndpbF9maW5kX3R4X3ZyaW5nX3N0YShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsCisJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHZyaW5nICp2OworCWludCBpOworCXU4IGNpZDsKKworCS8qIEluIHRoZSBTVEEgbW9kZSwgaXQgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBvbmx5IDEgVlJJTkcKKwkgKiBmb3IgdGhlIEFQIHdlIGNvbm5lY3RlZCB0by4KKwkgKiBmaW5kIDEtc3QgdnJpbmcgYW5kIHNlZSB3aGV0aGVyIGl0IGlzIGVsaWdpYmxlIGZvciBkYXRhCisJICovCisJZm9yIChpID0gMDsgaSA8IFdJTDYyMTBfTUFYX1RYX1JJTkdTOyBpKyspIHsKKwkJdiA9ICZ3aWwtPnZyaW5nX3R4W2ldOworCQlpZiAoIXYtPnZhKQorCQkJY29udGludWU7CisKKwkJY2lkID0gd2lsLT52cmluZzJjaWRfdGlkW2ldWzBdOworCQlpZiAoIXdpbC0+c3RhW2NpZF0uZGF0YV9wb3J0X29wZW4gJiYKKwkJICAgIChza2ItPnByb3RvY29sICE9IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKQorCQkJYnJlYWs7CisKKwkJd2lsX2RiZ190eHJ4KHdpbCwgIlR4IC0+IHJpbmcgJWRcbiIsIGkpOworCisJCXJldHVybiB2OworCX0KKworCXdpbF9kYmdfdHhyeCh3aWwsICJUeCB3aGlsZSBubyB2cmluZ3MgYWN0aXZlP1xuIik7CisKKwlyZXR1cm4gTlVMTDsKK30KKwogLyoKICAqIEZpbmQgMS1zdCB2cmluZyBhbmQgcmV0dXJuIGl0OyBzZXQgZGVzdCBhZGRyZXNzIGZvciB0aGlzIHZyaW5nIGluIHNrYgogICogZHVwbGljYXRlIHNrYiBhbmQgc2VuZCBpdCB0byBvdGhlciBhY3RpdmUgdnJpbmdzCkBAIC04NDMsOSArODc2LDYgQEAKIAlkLT5tYWMuZFsxXSA9IDA7CiAJZC0+bWFjLmRbMl0gPSAwOwogCWQtPm1hYy51Y29kZV9jbWQgPSAwOwotCS8qIHVzZSBkc3QgaW5kZXggMCAqLwotCWQtPm1hYy5kWzFdIHw9IEJJVChNQUNfQ0ZHX0RFU0NfVFhfMV9EU1RfSU5ERVhfRU5fUE9TKSB8Ci0JCSAgICAgICAoMCA8PCBNQUNfQ0ZHX0RFU0NfVFhfMV9EU1RfSU5ERVhfUE9TKTsKIAkvKiB0cmFuc2xhdGlvbiB0eXBlOiAgMCAtIGJ5cGFzczsgMSAtIDgwMi4zOyAyIC0gbmF0aXZlIHdpZmkgKi8KIAlkLT5tYWMuZFsyXSA9IEJJVChNQUNfQ0ZHX0RFU0NfVFhfMl9TTkFQX0hEUl9JTlNFUlRJT05fRU5fUE9TKSB8CiAJCSAgICAgICgxIDw8IE1BQ19DRkdfREVTQ19UWF8yX0wyX1RSQU5TTEFUSU9OX1RZUEVfUE9TKTsKQEAgLTkwOCw4ICs5MzgsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdpbF90eF92cmluZyhzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsIHN0cnVjdCB2cmluZyAqdnJpbmcsCi0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBfX3dpbF90eF92cmluZyhzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsIHN0cnVjdCB2cmluZyAqdnJpbmcsCisJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gd2lsX3RvX2Rldih3aWwpOwogCXN0cnVjdCB2cmluZ190eF9kZXNjIGRkLCAqZCA9ICZkZDsKQEAgLTkyNSwxOCArOTU1LDIxIEBACiAKIAl3aWxfZGJnX3R4cngod2lsLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCisJaWYgKHVubGlrZWx5KCF0eGRhdGEtPmVuYWJsZWQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChhdmFpbCA8IDEgKyBucl9mcmFncykgewogCQl3aWxfZXJyX3JhdGVsaW1pdGVkKHdpbCwKLQkJCQkgICAgIlR4IHJpbmcgZnVsbC4gTm8gc3BhY2UgZm9yICVkIGZyYWdtZW50c1xuIiwKLQkJCQkgICAgMSArIG5yX2ZyYWdzKTsKKwkJCQkgICAgIlR4IHJpbmdbJTJkXSBmdWxsLiBObyBzcGFjZSBmb3IgJWQgZnJhZ21lbnRzXG4iLAorCQkJCSAgICB2cmluZ19pbmRleCwgMSArIG5yX2ZyYWdzKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCV9kID0gJnZyaW5nLT52YVtpXS50eDsKIAogCXBhID0gZG1hX21hcF9zaW5nbGUoZGV2LCBza2ItPmRhdGEsIHNrYl9oZWFkbGVuKHNrYiksIERNQV9UT19ERVZJQ0UpOwogCi0Jd2lsX2RiZ190eHJ4KHdpbCwgIlR4IHNrYiAlZCBieXRlcyAweCVwIC0+ICVwYWRcbiIsIHNrYl9oZWFkbGVuKHNrYiksCi0JCSAgICAgc2tiLT5kYXRhLCAmcGEpOworCXdpbF9kYmdfdHhyeCh3aWwsICJUeFslMmRdIHNrYiAlZCBieXRlcyAweCVwIC0+ICVwYWRcbiIsIHZyaW5nX2luZGV4LAorCQkgICAgIHNrYl9oZWFkbGVuKHNrYiksIHNrYi0+ZGF0YSwgJnBhKTsKIAl3aWxfaGV4X2R1bXBfdHhyeCgiVHggIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwKIAkJCSAgc2tiLT5kYXRhLCBza2JfaGVhZGxlbihza2IpLCBmYWxzZSk7CiAKQEAgLTk0NywxNSArOTgwLDEzIEBACiAJd2lsX3R4X2Rlc2NfbWFwKGQsIHBhLCBza2JfaGVhZGxlbihza2IpLCB2cmluZ19pbmRleCk7CiAJLyogUHJvY2VzcyBUQ1AvVURQIGNoZWNrc3VtIG9mZmxvYWRpbmcgKi8KIAlpZiAod2lsX3R4X2Rlc2Nfb2ZmbG9hZF9ja3N1bV9zZXQod2lsLCBkLCBza2IpKSB7Ci0JCXdpbF9lcnIod2lsLCAiVlJJTkcgIyVkIEZhaWxlZCB0byBzZXQgY2tzdW0sIGRyb3AgcGFja2V0XG4iLAorCQl3aWxfZXJyKHdpbCwgIlR4WyUyZF0gRmFpbGVkIHRvIHNldCBja3N1bSwgZHJvcCBwYWNrZXRcbiIsCiAJCQl2cmluZ19pbmRleCk7CiAJCWdvdG8gZG1hX2Vycm9yOwogCX0KIAogCXZyaW5nLT5jdHhbaV0ubnJfZnJhZ3MgPSBucl9mcmFnczsKIAl3aWxfdHhfZGVzY19zZXRfbnJfZnJhZ3MoZCwgbnJfZnJhZ3MpOwotCWlmIChucl9mcmFncykKLQkJKl9kID0gKmQ7CiAKIAkvKiBtaWRkbGUgc2VnbWVudHMgKi8KIAlmb3IgKDsgZiA8IG5yX2ZyYWdzOyBmKyspIHsKQEAgLTk2Myw2ICs5OTQsMTAgQEAKIAkJCQkmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tmXTsKIAkJaW50IGxlbiA9IHNrYl9mcmFnX3NpemUoZnJhZyk7CiAKKwkJKl9kID0gKmQ7CisJCXdpbF9kYmdfdHhyeCh3aWwsICJUeFslMmRdIGRlc2NbJTRkXVxuIiwgdnJpbmdfaW5kZXgsIGkpOworCQl3aWxfaGV4X2R1bXBfdHhyeCgiVHhEICIsIERVTVBfUFJFRklYX05PTkUsIDMyLCA0LAorCQkJCSAgKGNvbnN0IHZvaWQgKilkLCBzaXplb2YoKmQpLCBmYWxzZSk7CiAJCWkgPSAoc3doZWFkICsgZiArIDEpICUgdnJpbmctPnNpemU7CiAJCV9kID0gJnZyaW5nLT52YVtpXS50eDsKIAkJcGEgPSBza2JfZnJhZ19kbWFfbWFwKGRldiwgZnJhZywgMCwgc2tiX2ZyYWdfc2l6ZShmcmFnKSwKQEAgLTk3NiwxMyArMTAxMSwxNSBAQAogCQkgKiBpdCB3aWxsIHN1Y2NlZWQgaGVyZSB0b28KIAkJICovCiAJCXdpbF90eF9kZXNjX29mZmxvYWRfY2tzdW1fc2V0KHdpbCwgZCwgc2tiKTsKLQkJKl9kID0gKmQ7CiAJfQogCS8qIGZvciB0aGUgbGFzdCBzZWcgb25seSAqLwogCWQtPmRtYS5kMCB8PSBCSVQoRE1BX0NGR19ERVNDX1RYXzBfQ01EX0VPUF9QT1MpOwogCWQtPmRtYS5kMCB8PSBCSVQoRE1BX0NGR19ERVNDX1RYXzBfQ01EX01BUktfV0JfUE9TKTsKIAlkLT5kbWEuZDAgfD0gQklUKERNQV9DRkdfREVTQ19UWF8wX0NNRF9ETUFfSVRfUE9TKTsKIAkqX2QgPSAqZDsKKwl3aWxfZGJnX3R4cngod2lsLCAiVHhbJTJkXSBkZXNjWyU0ZF1cbiIsIHZyaW5nX2luZGV4LCBpKTsKKwl3aWxfaGV4X2R1bXBfdHhyeCgiVHhEICIsIERVTVBfUFJFRklYX05PTkUsIDMyLCA0LAorCQkJICAoY29uc3Qgdm9pZCAqKWQsIHNpemVvZigqZCksIGZhbHNlKTsKIAogCS8qIGhvbGQgcmVmZXJlbmNlIHRvIHNrYgogCSAqIHRvIHByZXZlbnQgc2tiIHJlbGVhc2UgYmVmb3JlIGFjY291bnRpbmcKQEAgLTk5MCwxNSArMTAyNywxMyBAQAogCSAqLwogCXZyaW5nLT5jdHhbaV0uc2tiID0gc2tiX2dldChza2IpOwogCi0Jd2lsX2hleF9kdW1wX3R4cngoIlR4ICIsIERVTVBfUFJFRklYX05PTkUsIDMyLCA0LAotCQkJICAoY29uc3Qgdm9pZCAqKWQsIHNpemVvZigqZCksIGZhbHNlKTsKLQogCWlmICh3aWxfdnJpbmdfaXNfZW1wdHkodnJpbmcpKSAvKiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nICovCiAJCXR4ZGF0YS0+aWRsZSArPSBnZXRfY3ljbGVzKCkgLSB0eGRhdGEtPmxhc3RfaWRsZTsKIAogCS8qIGFkdmFuY2Ugc3doZWFkICovCiAJd2lsX3ZyaW5nX2FkdmFuY2VfaGVhZCh2cmluZywgbnJfZnJhZ3MgKyAxKTsKLQl3aWxfZGJnX3R4cngod2lsLCAiVHggc3doZWFkICVkIC0+ICVkXG4iLCBzd2hlYWQsIHZyaW5nLT5zd2hlYWQpOworCXdpbF9kYmdfdHhyeCh3aWwsICJUeFslMmRdIHN3aGVhZCAlZCAtPiAlZFxuIiwgdnJpbmdfaW5kZXgsIHN3aGVhZCwKKwkJICAgICB2cmluZy0+c3doZWFkKTsKIAl0cmFjZV93aWw2MjEwX3R4KHZyaW5nX2luZGV4LCBzd2hlYWQsIHNrYi0+bGVuLCBucl9mcmFncyk7CiAJaW93cml0ZTMyKHZyaW5nLT5zd2hlYWQsIHdpbC0+Y3NyICsgSE9TVEFERFIodnJpbmctPmh3dGFpbCkpOwogCkBAIC0xMDI1LDYgKzEwNjAsMTkgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGludCB3aWxfdHhfdnJpbmcoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLCBzdHJ1Y3QgdnJpbmcgKnZyaW5nLAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgdnJpbmdfaW5kZXggPSB2cmluZyAtIHdpbC0+dnJpbmdfdHg7CisJc3RydWN0IHZyaW5nX3R4X2RhdGEgKnR4ZGF0YSA9ICZ3aWwtPnZyaW5nX3R4X2RhdGFbdnJpbmdfaW5kZXhdOworCWludCByYzsKKworCXNwaW5fbG9jaygmdHhkYXRhLT5sb2NrKTsKKwlyYyA9IF9fd2lsX3R4X3ZyaW5nKHdpbCwgdnJpbmcsIHNrYik7CisJc3Bpbl91bmxvY2soJnR4ZGF0YS0+bG9jayk7CisJcmV0dXJuIHJjOworfQorCiBuZXRkZXZfdHhfdCB3aWxfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwgPSBuZGV2X3RvX3dpbChuZGV2KTsKQEAgLTEwMzQsMTQgKzEwODIsMTQgQEAKIAlpbnQgcmM7CiAKIAl3aWxfZGJnX3R4cngod2lsLCAiJXMoKVxuIiwgX19mdW5jX18pOwotCWlmICghdGVzdF9iaXQod2lsX3N0YXR1c19md3JlYWR5LCAmd2lsLT5zdGF0dXMpKSB7CisJaWYgKCF0ZXN0X2JpdCh3aWxfc3RhdHVzX2Z3cmVhZHksIHdpbC0+c3RhdHVzKSkgewogCQlpZiAoIXByX29uY2VfZncpIHsKIAkJCXdpbF9lcnIod2lsLCAiRlcgbm90IHJlYWR5XG4iKTsKIAkJCXByX29uY2VfZncgPSB0cnVlOwogCQl9CiAJCWdvdG8gZHJvcDsKIAl9Ci0JaWYgKCF0ZXN0X2JpdCh3aWxfc3RhdHVzX2Z3Y29ubmVjdGVkLCAmd2lsLT5zdGF0dXMpKSB7CisJaWYgKCF0ZXN0X2JpdCh3aWxfc3RhdHVzX2Z3Y29ubmVjdGVkLCB3aWwtPnN0YXR1cykpIHsKIAkJd2lsX2Vycih3aWwsICJGVyBub3QgY29ubmVjdGVkXG4iKTsKIAkJZ290byBkcm9wOwogCX0KQEAgLTEwNTIsMTUgKzExMDAsMTkgQEAKIAlwcl9vbmNlX2Z3ID0gZmFsc2U7CiAKIAkvKiBmaW5kIHZyaW5nICovCi0JaWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihldGgtPmhfZGVzdCkpCi0JCXZyaW5nID0gd2lsX2ZpbmRfdHhfdnJpbmcod2lsLCBza2IpOwotCWVsc2UKLQkJdnJpbmcgPSB3aWxfdHhfYmNhc3Qod2lsLCBza2IpOworCWlmICh3aWwtPndkZXYtPmlmdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCS8qIGluIFNUQSBtb2RlIChFU1MpLCBhbGwgdG8gc2FtZSBWUklORyAqLworCQl2cmluZyA9IHdpbF9maW5kX3R4X3ZyaW5nX3N0YSh3aWwsIHNrYik7CisJfSBlbHNlIHsgLyogZGlyZWN0IGNvbW11bmljYXRpb24sIGZpbmQgbWF0Y2hpbmcgVlJJTkcgKi8KKwkJaWYgKGlzX3VuaWNhc3RfZXRoZXJfYWRkcihldGgtPmhfZGVzdCkpCisJCQl2cmluZyA9IHdpbF9maW5kX3R4X3ZyaW5nKHdpbCwgc2tiKTsKKwkJZWxzZQorCQkJdnJpbmcgPSB3aWxfdHhfYmNhc3Qod2lsLCBza2IpOworCX0KIAlpZiAoIXZyaW5nKSB7CiAJCXdpbF9kYmdfdHhyeCh3aWwsICJObyBUeCBWUklORyBmb3VuZCBmb3IgJXBNXG4iLCBldGgtPmhfZGVzdCk7CiAJCWdvdG8gZHJvcDsKIAl9Ci0KIAkvKiBzZXQgdXAgdnJpbmcgZW50cnkgKi8KIAlyYyA9IHdpbF90eF92cmluZyh3aWwsIHZyaW5nLCBza2IpOwogCkBAIC0xMDg3LDYgKzExMzksMjIgQEAKIAlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKIH0KIAorc3RhdGljIGlubGluZSBib29sIHdpbF9uZWVkX3R4c3RhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBldGhoZHIgKmV0aCA9ICh2b2lkICopc2tiLT5kYXRhOworCisJcmV0dXJuIGlzX3VuaWNhc3RfZXRoZXJfYWRkcihldGgtPmhfZGVzdCkgJiYgc2tiLT5zayAmJgorCSAgICAgICAoc2tiX3NoaW5mbyhza2IpLT50eF9mbGFncyAmIFNLQlRYX1dJRklfU1RBVFVTKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdpbF9jb25zdW1lX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBib29sIGFja2VkKQoreworCWlmICh1bmxpa2VseSh3aWxfbmVlZF90eHN0YXQoc2tiKSkpCisJCXNrYl9jb21wbGV0ZV93aWZpX2Fjayhza2IsIGFja2VkKTsKKwllbHNlCisJCWFja2VkID8gZGV2X2NvbnN1bWVfc2tiX2FueShza2IpIDogZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKK30KKwogLyoqCiAgKiBDbGVhbiB1cCB0cmFuc21pdHRlZCBza2IncyBmcm9tIHRoZSBUeCBWUklORwogICoKQEAgLTExNDcsMTAgKzEyMTUsMTAgQEAKIAkJCXRyYWNlX3dpbDYyMTBfdHhfZG9uZShyaW5naWQsIHZyaW5nLT5zd3RhaWwsIGRtYWxlbiwKIAkJCQkJICAgICAgZC0+ZG1hLmVycm9yKTsKIAkJCXdpbF9kYmdfdHhyeCh3aWwsCi0JCQkJICAgICAiVHhbJTNkXSA6ICVkIGJ5dGVzLCBzdGF0dXMgMHglMDJ4IGVyciAweCUwMnhcbiIsCi0JCQkJICAgICB2cmluZy0+c3d0YWlsLCBkbWFsZW4sIGQtPmRtYS5zdGF0dXMsCi0JCQkJICAgICBkLT5kbWEuZXJyb3IpOwotCQkJd2lsX2hleF9kdW1wX3R4cngoIlR4QyAiLCBEVU1QX1BSRUZJWF9OT05FLCAzMiwgNCwKKwkJCQkgICAgICJUeENbJTJkXVslM2RdIDogJWQgYnl0ZXMsIHN0YXR1cyAweCUwMnggZXJyIDB4JTAyeFxuIiwKKwkJCQkgICAgIHJpbmdpZCwgdnJpbmctPnN3dGFpbCwgZG1hbGVuLAorCQkJCSAgICAgZC0+ZG1hLnN0YXR1cywgZC0+ZG1hLmVycm9yKTsKKwkJCXdpbF9oZXhfZHVtcF90eHJ4KCJUeENEICIsIERVTVBfUFJFRklYX05PTkUsIDMyLCA0LAogCQkJCQkgIChjb25zdCB2b2lkICopZCwgc2l6ZW9mKCpkKSwgZmFsc2UpOwogCiAJCQl3aWxfdHhkZXNjX3VubWFwKGRldiwgZCwgY3R4KTsKQEAgLTExNjUsOCArMTIzMyw3IEBACiAJCQkJCW5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJCQlzdGF0cy0+dHhfZXJyb3JzKys7CiAJCQkJfQotCi0JCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCQl3aWxfY29uc3VtZV9za2Ioc2tiLCBkLT5kbWEuZXJyb3IgPT0gMCk7CiAJCQl9CiAJCQltZW1zZXQoY3R4LCAwLCBzaXplb2YoKmN0eCkpOwogCQkJLyogVGhlcmUgaXMgbm8gbmVlZCB0byB0b3VjaCBIVyBkZXNjcmlwdG9yOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvdHhyeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvdHhyeC5oCmluZGV4IDYzMGFlYjUuLmQ5MGM4YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL3R4cnguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC90eHJ4LmgKQEAgLTIwLDE3ICsyMCwxNSBAQAogI2RlZmluZSBCVUZfU1dfT1dORUQgICAgKDEpCiAjZGVmaW5lIEJVRl9IV19PV05FRCAgICAoMCkKIAotLyogc2l6ZSBvZiBtYXguIFR4L1J4IGJ1ZmZlcnMsIGFzIHN1cHBvcnRlZCBieSBGVyAqLwotI2RlZmluZSBUWFJYX0JVRl9MRU5fREVGQVVMVCAoMjI0MikKKy8qIGRlZmF1bHQgc2l6ZSBvZiBNQUMgVHgvUnggYnVmZmVycyAqLworI2RlZmluZSBUWFJYX0JVRl9MRU5fREVGQVVMVCAoMjA0OCkKIAogLyogaG93IG1hbnkgYnl0ZXMgdG8gcmVzZXJ2ZSBmb3IgcnRhcCBoZWFkZXI/ICovCiAjZGVmaW5lIFdJTDYyMTBfUlRBUF9TSVpFICgxMjgpCiAKIC8qIFR4L1J4IHBhdGggKi8KIAotLyoKLSAqIENvbW1vbiByZXByZXNlbnRhdGlvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIGluIFZyaW5nCi0gKi8KKy8qIENvbW1vbiByZXByZXNlbnRhdGlvbiBvZiBwaHlzaWNhbCBhZGRyZXNzIGluIFZyaW5nICovCiBzdHJ1Y3QgdnJpbmdfZG1hX2FkZHIgewogCV9fbGUzMiBhZGRyX2xvdzsKIAlfX2xlMTYgYWRkcl9oaWdoOwpAQCAtNDksMTEgKzQ3LDEwIEBACiAJYWRkci0+YWRkcl9oaWdoID0gY3B1X3RvX2xlMTYoKHUxNil1cHBlcl8zMl9iaXRzKHBhKSk7CiB9CiAKLS8qCi0gKiBUeCBkZXNjcmlwdG9yIC0gTUFDIHBhcnQKKy8qIFR4IGRlc2NyaXB0b3IgLSBNQUMgcGFydAogICogW2R3b3JkIDBdCiAgKiBiaXQgIDAuLiA5IDogbGlmZXRpbWVfZXhwaXJ5X3ZhbHVlOjEwCi0gKiBiaXQgICAgIDEwIDogaW50ZXJydXBfZW46MQorICogYml0ICAgICAxMCA6IGludGVycnVwdF9lbjoxCiAgKiBiaXQgICAgIDExIDogc3RhdHVzX2VuOjEKICAqIGJpdCAxMi4uMTMgOiB0eHNzX292ZXJyaWRlOjIKICAqIGJpdCAgICAgMTQgOiB0aW1lc3RhbXBfaW5zZXJ0aW9uOjEKQEAgLTYxLDE1ICs1OCwxMiBAQAogICogYml0IDE2Li4yMSA6IHJlc2VydmVkMDo2CiAgKiBiaXQgMjIuLjI2IDogbWNzX2luZGV4OjUKICAqIGJpdCAgICAgMjcgOiBtY3NfZW46MQotICogYml0IDI4Li4yOSA6IHJlc2VydmVkMToyCi0gKiBiaXQgICAgIDMwIDogcmVzZXJ2ZWQyOjEKKyAqIGJpdCAyOC4uMzAgOiByZXNlcnZlZDE6MwogICogYml0ICAgICAzMSA6IHNuX3ByZXNlcnZlZDoxCiAgKiBbZHdvcmQgMV0KICAqIGJpdCAgMC4uIDMgOiBwa3RfbW9kZTo0CiAgKiBiaXQgICAgICA0IDogcGt0X21vZGVfZW46MQotICogYml0ICA1Li4gNyA6IHJlc2VydmVkMDozCi0gKiBiaXQgIDguLjEzIDogcmVzZXJ2ZWQxOjYKLSAqIGJpdCAgICAgMTQgOiByZXNlcnZlZDI6MQorICogYml0ICA1Li4xNCA6IHJlc2VydmVkMDoxMAogICogYml0ICAgICAxNSA6IGFja19wb2xpY3lfZW46MQogICogYml0IDE2Li4xOSA6IGRzdF9pbmRleDo0CiAgKiBiaXQgICAgIDIwIDogZHN0X2luZGV4X2VuOjEKQEAgLTgwLDcgKzc0LDcgQEAKICAqIFtkd29yZCAyXQogICogYml0ICAwLi4gNyA6IG51bV9vZl9kZXNjcmlwdG9yczo4CiAgKiBiaXQgIDguLjE3IDogcmVzZXJ2ZWQ6MTAKLSAqIGJpdCAxOC4uMTkgOiBsMl90cmFuc2xhdGlvbl90eXBlOjIKKyAqIGJpdCAxOC4uMTkgOiBsMl90cmFuc2xhdGlvbl90eXBlOjIgMDAgLSBieXBhc3MsIDAxIC0gODAyLjMsIDEwIC0gODAyLjExCiAgKiBiaXQgICAgIDIwIDogc25hcF9oZHJfaW5zZXJ0aW9uX2VuOjEKICAqIGJpdCAgICAgMjEgOiB2bGFuX3JlbW92YWxfZW46MQogICogYml0IDIyLi4zMSA6IHJlc2VydmVkMDoxMApAQCAtMjQ3LDYgKzI0MSw0NiBAQAogCiAjZGVmaW5lIFRYX0RNQV9TVEFUVVNfRFUgICAgICAgICBCSVQoMCkKIAorLyogVHggZGVzY3JpcHRvciAtIERNQSBwYXJ0CisgKiBbZHdvcmQgMF0KKyAqIGJpdCAgMC4uIDcgOiBsNF9sZW5ndGg6OCBsYXllciA0IGxlbmd0aAorICogYml0ICAgICAgOCA6IGNtZF9lb3A6MSBUaGlzIGRlc2NyaXB0b3IgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSBwYWNrZXQKKyAqIGJpdCAgICAgIDkgOiByZXNlcnZlZAorICogYml0ICAgICAxMCA6IGNtZF9kbWFfaXQ6MSBpbW1lZGlhdGUgaW50ZXJydXB0CisgKiBiaXQgMTEuLjEyIDogU0JEIC0gU2VnbWVudCBCdWZmZXIgRGV0YWlscworICoJCTAwIC0gSGVhZGVyIFNlZ21lbnQKKyAqCQkwMSAtIEZpcnN0IERhdGEgU2VnbWVudAorICoJCTEwIC0gTWVkaXVtIERhdGEgU2VnbWVudAorICoJCTExIC0gTGFzdCBEYXRhIFNlZ21lbnQKKyAqIGJpdCAgICAgMTMgOiBUU0UgLSBUQ1AgU2VnbWVudGF0aW9uIEVuYWJsZQorICogYml0ICAgICAxNCA6IElJQyAtIERpcmVjdHMgdGhlIEhXIHRvIEluc2VydCBJUHY0IENoZWNrc3VtCisgKiBiaXQgICAgIDE1IDogSVRDIC0gRGlyZWN0cyB0aGUgSFcgdG8gSW5zZXJ0IFRDUC9VRFAgQ2hlY2tzdW0KKyAqIGJpdCAxNi4uMjAgOiBRSUQgLSBUaGUgdGFyZ2V0IFFJRCB0aGF0IHRoZSBwYWNrZXQgc2hvdWxkIGJlIHN0b3JlZAorICoJCWluIHRoZSBNQUMuCisgKiBiaXQgICAgIDIxIDogUE8gLSBQc2V1ZG8gaGVhZGVyIE9mZmxvYWQ6CisgKgkJMCAtIFVzZSB0aGUgcHNldWRvIGhlYWRlciB2YWx1ZSBmcm9tIHRoZSBUQ1AgY2hlY2tzdW0gZmllbGQKKyAqCQkxLSBDYWxjdWxhdGUgUHNldWRvIGhlYWRlciBDaGVja3N1bQorICogYml0ICAgICAyMiA6IE5DIC0gTm8gVURQIENoZWNrc3VtCisgKiBiaXQgMjMuLjI5IDogcmVzZXJ2ZWQKKyAqIGJpdCAzMC4uMzEgOiBMNFQgLSBMYXllciA0IFR5cGU6IDAwIC0gVURQICwgMTAgLSBUQ1AgLCAxMCwgMTEgLSBSZXNlcnZlZAorICoJCUlmIEw0TGVuIGVxdWFsIDAsIG5vIEw0IGF0IGFsbAorICogW2R3b3JkIDFdCisgKiBiaXQgIDAuLjMxIDogYWRkcl9sb3c6MzIgVGhlIHBheWxvYWQgYnVmZmVyIGxvdyBhZGRyZXNzCisgKiBbZHdvcmQgMl0KKyAqIGJpdCAgMC4uMTUgOiBhZGRyX2hpZ2g6MTYgVGhlIHBheWxvYWQgYnVmZmVyIGhpZ2ggYWRkcmVzcworICogYml0IDE2Li4yMyA6IGlwX2xlbmd0aDo4IFRoZSBJUCBoZWFkZXIgbGVuZ3RoIGZvciB0aGUgVFggSVAgY2hlY2tzdW0KKyAqCQlvZmZsb2FkIGZlYXR1cmUKKyAqIGJpdCAyNC4uMzAgOiBtYWNfbGVuZ3RoOjcKKyAqIGJpdCAgICAgMzEgOiBpcF92ZXJzaW9uOjEgMSAtIElQdjQsIDAgLSBJUHY2CisgKiBbZHdvcmQgM10KKyAqICBbYnl0ZSAxMl0gZXJyb3IKKyAqIGJpdCAgMCAgIDIgOiBtYWNfc3RhdHVzOjMKKyAqIGJpdCAgMyAgIDcgOiByZXNlcnZlZDo1CisgKiAgW2J5dGUgMTNdIHN0YXR1cworICogYml0ICAgICAgMCA6IERVOjEgRGVzY3JpcHRvciBVc2VkCisgKiBiaXQgIDEgICA3IDogcmVzZXJ2ZWQ6NworICogIFt3b3JkIDddIGxlbmd0aAorICovCiBzdHJ1Y3QgdnJpbmdfdHhfZG1hIHsKIAl1MzIgZDA7CiAJc3RydWN0IHZyaW5nX2RtYV9hZGRyIGFkZHI7CkBAIC0yNTcsNDUgKzI5MSw0NSBAQAogCV9fbGUxNiBsZW5ndGg7CiB9IF9fcGFja2VkOwogCi0vKgotICogUnggZGVzY3JpcHRvciAtIE1BQyBwYXJ0CisvKiBSeCBkZXNjcmlwdG9yIC0gTUFDIHBhcnQKICAqIFtkd29yZCAwXQogICogYml0ICAwLi4gMyA6IHRpZDo0IFRoZSBRb1MgKGIzLTApIFRJRCBGaWVsZAotICogYml0ICA0Li4gNiA6IGNvbm5lY3Rpb25faWQ6MyA6VGhlIFNvdXJjZSBpbmRleCB0aGF0ICB3YXMgZm91bmQgZHVyaW5nCi0gKiAgUGFyc2luZyB0aGUgVEEuICBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gIGRlZmluZSB0aGUgc291cmNlIG9mIHRoZSBwYWNrZXQKKyAqIGJpdCAgNC4uIDYgOiBjaWQ6MyBUaGUgU291cmNlIGluZGV4IHRoYXQgIHdhcyBmb3VuZCBkdXJpbmcgcGFyc2luZyB0aGUgVEEuCisgKgkJVGhpcyBmaWVsZCBpcyB1c2VkIHRvIGRlZmluZSB0aGUgc291cmNlIG9mIHRoZSBwYWNrZXQKICAqIGJpdCAgICAgIDcgOiByZXNlcnZlZDoxCi0gKiBiaXQgIDguLiA5IDogbWFjX2lkOjIgOiBUaGUgTUFDIHZpcnR1YWwgIFJpbmcgbnVtYmVyIChhbHdheXMgemVybykKLSAqIGJpdCAxMC4uMTEgOiBmcmFtZV90eXBlOjIgOiBUaGUgRkMgQ29udHJvbCAgKGIzLTIpIC0gIE1QRFUgVHlwZQotICogICAgICAgICAgICAgIChtYW5hZ2VtZW50LCBkYXRhLCBjb250cm9sICBhbmQgZXh0ZW5zaW9uKQotICogYml0IDEyLi4xNSA6IGZyYW1lX3N1YnR5cGU6NCA6IFRoZSBGQyBDb250cm9sICAoYjctNCkgLSAgRnJhbWUgU3VidHlwZQorICogYml0ICA4Li4gOSA6IG1pZDoyIFRoZSBNQUMgdmlydHVhbCBudW1iZXIKKyAqIGJpdCAxMC4uMTEgOiBmcmFtZV90eXBlOjIgOiBUaGUgRkMgKGIzLTIpIC0gTVBEVSBUeXBlCisgKgkJKG1hbmFnZW1lbnQsIGRhdGEsIGNvbnRyb2wgYW5kIGV4dGVuc2lvbikKKyAqIGJpdCAxMi4uMTUgOiBmcmFtZV9zdWJ0eXBlOjQgOiBUaGUgRkMgKGI3LTQpIC0gRnJhbWUgU3VidHlwZQogICogYml0IDE2Li4yNyA6IHNlcV9udW1iZXI6MTIgVGhlIHJlY2VpdmVkIFNlcXVlbmNlIG51bWJlciBmaWVsZAogICogYml0IDI4Li4zMSA6IGV4dGVuZGVkOjQgZXh0ZW5kZWQgc3VidHlwZQogICogW2R3b3JkIDFdCiAgKiBiaXQgIDAuLiAzIDogcmVzZXJ2ZWQKICAqIGJpdCAgNC4uIDUgOiBrZXlfaWQ6MgogICogYml0ICAgICAgNiA6IGRlY3J5cHRfYnlwYXNzOjEKLSAqIGJpdCAgICAgIDcgOiBzZWN1cml0eToxCi0gKiBiaXQgIDguLiA5IDogZHNfYml0czoyCi0gKiBiaXQgICAgIDEwIDogYV9tc2R1X3ByZXNlbnQ6MSAgZnJvbSBxb3MgaGVhZGVyCi0gKiBiaXQgICAgIDExIDogYV9tc2R1X3R5cGU6MSAgZnJvbSBxb3MgaGVhZGVyCisgKiBiaXQgICAgICA3IDogc2VjdXJpdHk6MSBGQyAoYjE0KQorICogYml0ICA4Li4gOSA6IGRzX2JpdHM6MiBGQyAoYjktOCkKKyAqIGJpdCAgICAgMTAgOiBhX21zZHVfcHJlc2VudDoxICBRb1MgKGI3KQorICogYml0ICAgICAxMSA6IGFfbXNkdV90eXBlOjEgIFFvUyAoYjgpCiAgKiBiaXQgICAgIDEyIDogYV9tcGR1OjEgIHBhcnQgb2YgQU1QRFUgYWdncmVnYXRpb24KICAqIGJpdCAgICAgMTMgOiBicm9hZGNhc3Q6MQogICogYml0ICAgICAxNCA6IG11dGxpY2FzdDoxCiAgKiBiaXQgICAgIDE1IDogcmVzZXJ2ZWQ6MQotICogYml0IDE2Li4yMCA6IHJ4X21hY19xaWQ6NSAgIFRoZSBRdWV1ZSBJZGVudGlmaWVyIHRoYXQgdGhlIHBhY2tldAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHJlY2VpdmVkIGZyb20KKyAqIGJpdCAxNi4uMjAgOiByeF9tYWNfcWlkOjUgVGhlIFF1ZXVlIElkZW50aWZpZXIgdGhhdCB0aGUgcGFja2V0CisgKgkJaXMgcmVjZWl2ZWQgZnJvbQogICogYml0IDIxLi4yNCA6IG1jczo0Ci0gKiBiaXQgMjUuLjI4IDogbWljX2ljcjo0CisgKiBiaXQgMjUuLjI4IDogbWljX2ljcjo0IHRoaXMgc2lnbmFsIHRlbGxzIHRoZSBETUEgdG8gYXNzZXJ0IGFuIGludGVycnVwdAorICoJCWFmdGVyIGl0IHdyaXRlcyB0aGUgcGFja2V0CiAgKiBiaXQgMjkuLjMxIDogcmVzZXJ2ZWQ6MwogICogW2R3b3JkIDJdCiAgKiBiaXQgIDAuLiAyIDogdGltZV9zbG90OjMgVGhlIHRpbWVzbG90IHRoYXQgdGhlIE1QRFUgaXMgcmVjZWl2ZWQKLSAqIGJpdCAgICAgIDMgOiBmY19wcm90b2NvbF92ZXI6MSBUaGUgRkMgQ29udHJvbCAgKGIwKSAtIFByb3RvY29sICBWZXJzaW9uCi0gKiBiaXQgICAgICA0IDogZmNfb3JkZXI6MSBUaGUgRkMgQ29udHJvbCAoYjE1KSAtT3JkZXIKLSAqIGJpdCAgNS4uIDcgOiBxb3NfYWNrX3BvbGljeTozICBUaGUgUW9TIChiNi01KSBhY2sgcG9saWN5IEZpZWxkCisgKiBiaXQgIDMuLiA0IDogZmNfcHJvdG9jb2xfdmVyOjEgVGhlIEZDIChiMS0wKSAtIFByb3RvY29sIFZlcnNpb24KKyAqIGJpdCAgICAgIDUgOiBmY19vcmRlcjoxIFRoZSBGQyBDb250cm9sIChiMTUpIC1PcmRlcgorICogYml0ICA2Li4gNyA6IHFvc19hY2tfcG9saWN5OjIgVGhlIFFvUyAoYjYtNSkgYWNrIHBvbGljeSBGaWVsZAogICogYml0ICAgICAgOCA6IGVzb3A6MSBUaGUgUW9TIChiNCkgRVNPUCBmaWVsZAotICogYml0ICAgICAgOSA6IHFvc19yZGdfbW9yZV9wcGR1OjEgVGhlIFFvUyAoYjkpIFJERyAgZmllbGQKLSAqIGJpdCAxMC4uMTQgOiBxb3NfcmVzZXJ2ZWQ6NSBUaGUgUW9TIChiMTQtMTApIFJlc2VydmVkICBmaWVsZAotICogYml0ICAgICAxNSA6IHFvc19hY19jb25zdHJhaW50OjEKKyAqIGJpdCAgICAgIDkgOiBxb3NfcmRnX21vcmVfcHBkdToxIFRoZSBRb1MgKGI5KSBSREcgZmllbGQKKyAqIGJpdCAxMC4uMTQgOiBxb3NfcmVzZXJ2ZWQ6NSBUaGUgUW9TIChiMTQtMTApIFJlc2VydmVkIGZpZWxkCisgKiBiaXQgICAgIDE1IDogcW9zX2FjX2NvbnN0cmFpbnQ6MSBRb1MgKGIxNSkKICAqIGJpdCAxNi4uMzEgOiBwbl8xNV8wOjE2IGxvdyAyIGJ5dGVzIG9mIFBOCiAgKiBbZHdvcmQgM10KICAqIGJpdCAgMC4uMzEgOiBwbl80N18xNjozMiBoaWdoIDQgYnl0ZXMgb2YgUE4KQEAgLTMwOCwzNSArMzQyLDQ2IEBACiAJdTMyIHBuXzQ3XzE2OwogfSBfX3BhY2tlZDsKIAotLyoKLSAqIFJ4IGRlc2NyaXB0b3IgLSBETUEgcGFydAorLyogUnggZGVzY3JpcHRvciAtIERNQSBwYXJ0CiAgKiBbZHdvcmQgMF0KLSAqIGJpdCAgMC4uIDcgOiBsNF9sZW5ndGg6OCBsYXllciA0IGxlbmd0aAotICogYml0ICA4Li4gOSA6IHJlc2VydmVkOjIKLSAqIGJpdCAgICAgMTAgOiBjbWRfZG1hX2l0OjEKKyAqIGJpdCAgMC4uIDcgOiBsNF9sZW5ndGg6OCBsYXllciA0IGxlbmd0aC4gVGhlIGZpZWxkIGlzIG9ubHkgdmFsaWQgaWYKKyAqCQlMNEkgYml0IGlzIHNldAorICogYml0ICAgICAgOCA6IGNtZF9lb3A6MSBzZXQgdG8gMQorICogYml0ICAgICAgOSA6IGNtZF9ydDoxIHNldCB0byAxCisgKiBiaXQgICAgIDEwIDogY21kX2RtYV9pdDoxIGltbWVkaWF0ZSBpbnRlcnJ1cHQKICAqIGJpdCAxMS4uMTUgOiByZXNlcnZlZDo1Ci0gKiBiaXQgMTYuLjI5IDogcGh5X2luZm9fbGVuZ3RoOjE0CisgKiBiaXQgMTYuLjI5IDogcGh5X2luZm9fbGVuZ3RoOjE0IEl0IGlzIHZhbGlkIHdoZW4gdGhlIFBJSSBpcyBzZXQuCisgKgkJV2hlbiB0aGUgRkZNIGJpdCBpcyBzZXQgYml0cyAyOS0yNyBhcmUgdXNlZCBmb3IgZm9yCisgKgkJRmxleCBGaWx0ZXIgTWF0Y2guIE1hdGNoaW5nIEluZGV4IHRvIG9uZSBvZiB0aGUgTDIKKyAqCQlFdGhlclR5cGUgRmxleCBGaWx0ZXIKICAqIGJpdCAzMC4uMzEgOiBsNF90eXBlOjIgdmFsaWQgaWYgdGhlIEw0SSBiaXQgaXMgc2V0IGluIHRoZSBzdGF0dXMgZmllbGQKKyAqCQkwMCAtIFVEUCwgMDEgLSBUQ1AsIDEwLCAxMSAtIHJlc2VydmVkCiAgKiBbZHdvcmQgMV0KICAqIGJpdCAgMC4uMzEgOiBhZGRyX2xvdzozMiBUaGUgcGF5bG9hZCBidWZmZXIgbG93IGFkZHJlc3MKICAqIFtkd29yZCAyXQogICogYml0ICAwLi4xNSA6IGFkZHJfaGlnaDoxNiBUaGUgcGF5bG9hZCBidWZmZXIgaGlnaCBhZGRyZXNzCi0gKiBiaXQgMTYuLjIzIDogaXBfbGVuZ3RoOjgKKyAqIGJpdCAxNi4uMjMgOiBpcF9sZW5ndGg6OCBUaGUgZmlsZWQgaXMgdmFsaWQgb25seSBpZiB0aGUgTDNJIGJpdCBpcyBzZXQKICAqIGJpdCAyNC4uMzAgOiBtYWNfbGVuZ3RoOjcKLSAqIGJpdCAgICAgMzEgOiBpcF92ZXJzaW9uOjEKKyAqIGJpdCAgICAgMzEgOiBpcF92ZXJzaW9uOjEgMSAtIElQdjQsIDAgLSBJUHY2CiAgKiBbZHdvcmQgM10KICAqICBbYnl0ZSAxMl0gZXJyb3IKKyAqIGJpdCAgICAgIDAgOiBGQ1M6MQorICogYml0ICAgICAgMSA6IE1JQzoxCisgKiBiaXQgICAgICAyIDogS2V5IG1pc3M6MQorICogYml0ICAgICAgMyA6IFJlcGxheToxCisgKiBiaXQgICAgICA0IDogTDM6MSBJUHY0IGNoZWNrc3VtCisgKiBiaXQgICAgICA1IDogTDQ6MSBUQ1AvVURQIGNoZWNrc3VtCisgKiBiaXQgIDYgICA3IDogcmVzZXJ2ZWQ6MgogICogIFtieXRlIDEzXSBzdGF0dXMKLSAqIGJpdCAgICAgIDAgOiBkdToxCi0gKiBiaXQgICAgICAxIDogZW9wOjEKKyAqIGJpdCAgICAgIDAgOiBEVToxIERlc2NyaXB0b3IgVXNlZAorICogYml0ICAgICAgMSA6IEVPUDoxIFRoZSBkZXNjcmlwdG9yIGluZGljYXRlcyB0aGUgRW5kIG9mIFBhY2tldAogICogYml0ICAgICAgMiA6IGVycm9yOjEKLSAqIGJpdCAgICAgIDMgOiBtaToxCi0gKiBiaXQgICAgICA0IDogbDNfaWRlbnRpZmllZDoxCi0gKiBiaXQgICAgICA1IDogbDRfaWRlbnRpZmllZDoxCi0gKiBiaXQgICAgICA2IDogcGh5X2luZm9faW5jbHVkZWQ6MQotICogYml0ICAgICAgNyA6IHJlc2VydmVkOjEKKyAqIGJpdCAgICAgIDMgOiBNSToxIE1BQyBJbnRlcnJ1cHQgaXMgYXNzZXJ0ZWQgKGFjY29yZGluZyB0byBwYXJzZXIgZGVjaXNpb24pCisgKiBiaXQgICAgICA0IDogTDNJOjEgTDMgaWRlbnRpZmllZCBhbmQgY2hlY2tzdW0gY2FsY3VsYXRlZAorICogYml0ICAgICAgNSA6IEw0SToxIEw0IGlkZW50aWZpZWQgYW5kIGNoZWNrc3VtIGNhbGN1bGF0ZWQKKyAqIGJpdCAgICAgIDYgOiBQSUk6MSBQSFkgSW5mbyBJbmNsdWRlZCBpbiB0aGUgcGFja2V0CisgKiBiaXQgICAgICA3IDogRkZNOjEgRXRoZXJUeXBlIEZsZXggRmlsdGVyIE1hdGNoCiAgKiAgW3dvcmQgN10gbGVuZ3RoCi0gKgogICovCiAKICNkZWZpbmUgUlhfRE1BX0QwX0NNRF9ETUFfSVQgICAgIEJJVCgxMCkKQEAgLTM0OSw5ICszOTQsOSBAQAogI2RlZmluZSBSWF9ETUFfU1RBVFVTX0RVICAgICAgICAgQklUKDApCiAjZGVmaW5lIFJYX0RNQV9TVEFUVVNfRVJST1IgICAgICBCSVQoMikKIAotI2RlZmluZSBSWF9ETUFfU1RBVFVTX0wzX0lERU5UICAgQklUKDQpCi0jZGVmaW5lIFJYX0RNQV9TVEFUVVNfTDRfSURFTlQgICBCSVQoNSkKLSNkZWZpbmUgUlhfRE1BX1NUQVRVU19QSFlfSU5GTyAgIEJJVCg2KQorI2RlZmluZSBSWF9ETUFfU1RBVFVTX0wzSQlCSVQoNCkKKyNkZWZpbmUgUlhfRE1BX1NUQVRVU19MNEkJQklUKDUpCisjZGVmaW5lIFJYX0RNQV9TVEFUVVNfUEhZX0lORk8JQklUKDYpCiAKIHN0cnVjdCB2cmluZ19yeF9kbWEgewogCXUzMiBkMDsKQEAgLTQyMyw2ICs0NjgsMTEgQEAKIAlyZXR1cm4gV0lMX0dFVF9CSVRTKGQtPm1hYy5kMSwgMjEsIDI0KTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgd2lsX3J4ZGVzY19tY2FzdChzdHJ1Y3QgdnJpbmdfcnhfZGVzYyAqZCkKK3sKKwlyZXR1cm4gV0lMX0dFVF9CSVRTKGQtPm1hYy5kMSwgMTMsIDE0KTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgd2lsX3J4ZGVzY19waHlfbGVuZ3RoKHN0cnVjdCB2cmluZ19yeF9kZXNjICpkKQogewogCXJldHVybiBXSUxfR0VUX0JJVFMoZC0+ZG1hLmQwLCAxNiwgMjkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd2lsNjIxMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd2lsNjIxMC5oCmluZGV4IGM2ZWM1YjkuLjk0NjExNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL3dpbDYyMTAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvd2lsNjIxMC93aWw2MjEwLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTQgUXVhbGNvbW0gQXRoZXJvcywgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTUgUXVhbGNvbW0gQXRoZXJvcywgSW5jLgogICoKICAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQogICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQpAQCAtMjUsMTkgKzI1LDE0IEBACiAKIGV4dGVybiBib29sIG5vX2Z3X3JlY292ZXJ5OwogZXh0ZXJuIHVuc2lnbmVkIGludCBtdHVfbWF4OworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHJ4X3Jpbmdfb3ZlcmZsb3dfdGhyc2g7CitleHRlcm4gaW50IGFnZ193c2l6ZTsKIAogI2RlZmluZSBXSUxfTkFNRSAid2lsNjIxMCIKICNkZWZpbmUgV0lMX0ZXX05BTUUgIndpbDYyMTAuZnciCiAKICNkZWZpbmUgV0lMX01BWF9CVVNfUkVRVUVTVF9LQlBTIDgwMDAwMCAvKiB+Ni4xR2JwcyAqLwogCi1zdHJ1Y3Qgd2lsX2JvYXJkIHsKLQlpbnQgYm9hcmQ7Ci0jZGVmaW5lIFdJTF9CT0FSRF9NQVJMT04JKDEpCi0jZGVmaW5lIFdJTF9CT0FSRF9TUEFSUk9XCSgyKQotCWNvbnN0IGNoYXIgKiBjb25zdCBuYW1lOwotfTsKLQogLyoqCiAgKiBleHRyYWN0IGJpdHMgW0BiMDpAYjFdIChpbmNsdXNpdmUpIGZyb20gdGhlIHZhbHVlIEB4CiAgKiBpdCBzaG91bGQgYmUgQGIwIDw9IEBiMSwgb3IgcmVzdWx0IGlzIGluY29ycmVjdApAQCAtNDksMjEgKzQ0LDUwIEBACiAKICNkZWZpbmUgV0lMNjIxMF9NRU1fU0laRSAoMioxMDI0KjEwMjRVTCkKIAotI2RlZmluZSBXSUxfUlhfUklOR19TSVpFX09SREVSX0RFRkFVTFQJKDkpCi0jZGVmaW5lIFdJTF9UWF9SSU5HX1NJWkVfT1JERVJfREVGQVVMVAkoOSkKKyNkZWZpbmUgV0lMX1RYX1FfTEVOX0RFRkFVTFQJCSg0MDAwKQorI2RlZmluZSBXSUxfUlhfUklOR19TSVpFX09SREVSX0RFRkFVTFQJKDEwKQorI2RlZmluZSBXSUxfVFhfUklOR19TSVpFX09SREVSX0RFRkFVTFQJKDEwKQogLyogbGltaXQgcmluZyBzaXplIGluIHJhbmdlIFszMi4uMzJrXSAqLwogI2RlZmluZSBXSUxfUklOR19TSVpFX09SREVSX01JTgkoNSkKICNkZWZpbmUgV0lMX1JJTkdfU0laRV9PUkRFUl9NQVgJKDE1KQogI2RlZmluZSBXSUw2MjEwX01BWF9UWF9SSU5HUwkoMjQpIC8qIEhXIGxpbWl0ICovCiAjZGVmaW5lIFdJTDYyMTBfTUFYX0NJRAkJKDgpIC8qIEhXIGxpbWl0ICovCiAjZGVmaW5lIFdJTDYyMTBfTkFQSV9CVURHRVQJKDE2KSAvKiBhcmJpdHJhcnkgKi8KKyNkZWZpbmUgV0lMX01BWF9BTVBEVV9TSVpFCSg2NCAqIDEwMjQpIC8qIEZXL0hXIGxpbWl0ICovCisjZGVmaW5lIFdJTF9NQVhfQUdHX1dTSVpFCSgzMikgLyogRlcvSFcgbGltaXQgKi8KKy8qIEhhcmR3YXJlIG9mZmxvYWQgYmxvY2sgYWRkcyB0aGUgZm9sbG93aW5nOgorICogMjYgYnl0ZXMgLSAzLWFkZHJlc3MgUW9TIGRhdGEgaGVhZGVyCisgKiAgOCBieXRlcyAtIElWICsgRUlWIChmb3IgR0NNUCkKKyAqICA4IGJ5dGVzIC0gU05BUAorICogMTYgYnl0ZXMgLSBNSUMgKGZvciBHQ01QKQorICogIDQgYnl0ZXMgLSBDUkMKKyAqLworI2RlZmluZSBXSUxfTUFYX01QRFVfT1ZFUkhFQUQJKDYyKQorCisvKiBDYWxjdWxhdGUgTUFDIGJ1ZmZlciBzaXplIGZvciB0aGUgZmlybXdhcmUuIEl0IGluY2x1ZGVzIGFsbCBvdmVyaGVhZCwKKyAqIGFzIGl0IHdpbGwgZ28gb3ZlciB0aGUgYWlyLCBhbmQgbmVlZCB0byBiZSA4IGJ5dGUgYWxpZ25lZAorICovCitzdGF0aWMgaW5saW5lIHUzMiB3aWxfbXR1Mm1hY2J1Zih1MzIgbXR1KQoreworCXJldHVybiBBTElHTihtdHUgKyBXSUxfTUFYX01QRFVfT1ZFUkhFQUQsIDgpOworfQorCisvKiBNVFUgZm9yIEV0aGVybmV0IG5lZWQgdG8gdGFrZSBpbnRvIGFjY291bnQgOC1ieXRlIFNOQVAgaGVhZGVyCisgKiB0byBiZSBhZGRlZCB3aGVuIGVuY2Fwc3VsYXRpbmcgRXRoZXJuZXQgZnJhbWUgaW50byA4MDIuMTEKKyAqLworI2RlZmluZSBXSUxfTUFYX0VUSF9NVFUJCShJRUVFODAyMTFfTUFYX0RBVEFfTEVOX0RNRyAtIDgpCiAvKiBNYXggc3VwcG9ydGVkIGJ5IHdpbDYyMTAgdmFsdWUgZm9yIGludGVycnVwdCB0aHJlc2hvbGQgaXMgNXNlYy4gKi8KICNkZWZpbmUgV0lMNjIxMF9JVFJfVFJTSF9NQVggKDUwMDAwMDApCi0jZGVmaW5lIFdJTDYyMTBfSVRSX1RSU0hfREVGQVVMVAkoMzAwKSAvKiB1c2VjICovCisjZGVmaW5lIFdJTDYyMTBfSVRSX1RYX0lOVEVSRlJBTUVfVElNRU9VVF9ERUZBVUxUICgxMykgLyogdXNlYyAqLworI2RlZmluZSBXSUw2MjEwX0lUUl9SWF9JTlRFUkZSQU1FX1RJTUVPVVRfREVGQVVMVCAoMTMpIC8qIHVzZWMgKi8KKyNkZWZpbmUgV0lMNjIxMF9JVFJfVFhfTUFYX0JVUlNUX0RVUkFUSU9OX0RFRkFVTFQgKDUwMCkgLyogdXNlYyAqLworI2RlZmluZSBXSUw2MjEwX0lUUl9SWF9NQVhfQlVSU1RfRFVSQVRJT05fREVGQVVMVCAoNTAwKSAvKiB1c2VjICovCiAjZGVmaW5lIFdJTDYyMTBfRldfUkVDT1ZFUllfUkVUUklFUwkoNSkgLyogdHJ5IHRvIHJlY292ZXIgdGhpcyBtYW55IHRpbWVzICovCiAjZGVmaW5lIFdJTDYyMTBfRldfUkVDT1ZFUllfVE8JbXNlY3NfdG9famlmZmllcyg1MDAwKQogI2RlZmluZSBXSUw2MjEwX1NDQU5fVE8JCW1zZWNzX3RvX2ppZmZpZXMoMTAwMDApCi0KKyNkZWZpbmUgV0lMNjIxMF9SWF9ISUdIX1RSU0hfSU5JVAkJKDApCisjZGVmaW5lIFdJTDYyMTBfUlhfSElHSF9UUlNIX0RFRkFVTFQgXAorCQkJCSgxIDw8IChXSUxfUlhfUklOR19TSVpFX09SREVSX0RFRkFVTFQgLSAzKSkKIC8qIEhhcmR3YXJlIGRlZmluaXRpb25zIGJlZ2luICovCiAKIC8qCkBAIC0xMzUsNyArMTU5LDcgQEAKIAkjZGVmaW5lIEJJVF9ETUFfRVBfTUlTQ19JQ1JfVFhfTk9fQUNUCUJJVCgxKQogCSNkZWZpbmUgQklUX0RNQV9FUF9NSVNDX0lDUl9GV19JTlQobikJQklUKDI4K24pIC8qIG4gPSBbMC4uM10gKi8KIAotLyogSW50ZXJydXB0IG1vZGVyYXRpb24gY29udHJvbCAqLworLyogTGVnYWN5IGludGVycnVwdCBtb2RlcmF0aW9uIGNvbnRyb2wgKGJlZm9yZSBTcGFycm93IHYyKSovCiAjZGVmaW5lIFJHRl9ETUFfSVRSX0NOVF9UUlNICQkoMHg4ODFjNWMpCiAjZGVmaW5lIFJHRl9ETUFfSVRSX0NOVF9EQVRBCQkoMHg4ODFjNjApCiAjZGVmaW5lIFJHRl9ETUFfSVRSX0NOVF9DUkwJCSgweDg4MWM2NCkKQEAgLTE0NSw2ICsxNjksNDYgQEAKIAkjZGVmaW5lIEJJVF9ETUFfSVRSX0NOVF9DUkxfQ0xSCQlCSVQoMykKIAkjZGVmaW5lIEJJVF9ETUFfSVRSX0NOVF9DUkxfUkVBQ0hfVFJTSAlCSVQoNCkKIAorLyogTmV3IChzcGFycm93IHYyKykgaW50ZXJydXB0IG1vZGVyYXRpb24gY29udHJvbCAqLworI2RlZmluZSBSR0ZfRE1BX0lUUl9UWF9ERVNRX05PX01PRAkJKDB4ODgxZDQwKQorI2RlZmluZSBSR0ZfRE1BX0lUUl9UWF9DTlRfVFJTSAkJCSgweDg4MWQzNCkKKyNkZWZpbmUgUkdGX0RNQV9JVFJfVFhfQ05UX0RBVEEJCQkoMHg4ODFkMzgpCisjZGVmaW5lIFJHRl9ETUFfSVRSX1RYX0NOVF9DVEwJCQkoMHg4ODFkM2MpCisJI2RlZmluZSBCSVRfRE1BX0lUUl9UWF9DTlRfQ1RMX0VOCQlCSVQoMCkKKwkjZGVmaW5lIEJJVF9ETUFfSVRSX1RYX0NOVF9DVExfRVhUX1RJQ19TRUwJQklUKDEpCisJI2RlZmluZSBCSVRfRE1BX0lUUl9UWF9DTlRfQ1RMX0ZPUkVWRVIJCUJJVCgyKQorCSNkZWZpbmUgQklUX0RNQV9JVFJfVFhfQ05UX0NUTF9DTFIJCUJJVCgzKQorCSNkZWZpbmUgQklUX0RNQV9JVFJfVFhfQ05UX0NUTF9SRUFDSEVEX1RSRVNICUJJVCg0KQorCSNkZWZpbmUgQklUX0RNQV9JVFJfVFhfQ05UX0NUTF9DUk9TU19FTgkJQklUKDUpCisJI2RlZmluZSBCSVRfRE1BX0lUUl9UWF9DTlRfQ1RMX0ZSRUVfUlVOTklHCUJJVCg2KQorI2RlZmluZSBSR0ZfRE1BX0lUUl9UWF9JRExfQ05UX1RSU0gJCQkoMHg4ODFkNjApCisjZGVmaW5lIFJHRl9ETUFfSVRSX1RYX0lETF9DTlRfREFUQQkJCSgweDg4MWQ2NCkKKyNkZWZpbmUgUkdGX0RNQV9JVFJfVFhfSURMX0NOVF9DVEwJCQkoMHg4ODFkNjgpCisJI2RlZmluZSBCSVRfRE1BX0lUUl9UWF9JRExfQ05UX0NUTF9FTgkJCUJJVCgwKQorCSNkZWZpbmUgQklUX0RNQV9JVFJfVFhfSURMX0NOVF9DVExfRVhUX1RJQ19TRUwJCUJJVCgxKQorCSNkZWZpbmUgQklUX0RNQV9JVFJfVFhfSURMX0NOVF9DVExfRk9SRVZFUgkJQklUKDIpCisJI2RlZmluZSBCSVRfRE1BX0lUUl9UWF9JRExfQ05UX0NUTF9DTFIJCQlCSVQoMykKKwkjZGVmaW5lIEJJVF9ETUFfSVRSX1RYX0lETF9DTlRfQ1RMX1JFQUNIRURfVFJFU0gJQklUKDQpCisjZGVmaW5lIFJHRl9ETUFfSVRSX1JYX0RFU1FfTk9fTU9ECQkoMHg4ODFkNTApCisjZGVmaW5lIFJHRl9ETUFfSVRSX1JYX0NOVF9UUlNICQkJKDB4ODgxZDQ0KQorI2RlZmluZSBSR0ZfRE1BX0lUUl9SWF9DTlRfREFUQQkJCSgweDg4MWQ0OCkKKyNkZWZpbmUgUkdGX0RNQV9JVFJfUlhfQ05UX0NUTAkJCSgweDg4MWQ0YykKKwkjZGVmaW5lIEJJVF9ETUFfSVRSX1JYX0NOVF9DVExfRU4JCUJJVCgwKQorCSNkZWZpbmUgQklUX0RNQV9JVFJfUlhfQ05UX0NUTF9FWFRfVElDX1NFTAlCSVQoMSkKKwkjZGVmaW5lIEJJVF9ETUFfSVRSX1JYX0NOVF9DVExfRk9SRVZFUgkJQklUKDIpCisJI2RlZmluZSBCSVRfRE1BX0lUUl9SWF9DTlRfQ1RMX0NMUgkJQklUKDMpCisJI2RlZmluZSBCSVRfRE1BX0lUUl9SWF9DTlRfQ1RMX1JFQUNIRURfVFJFU0gJQklUKDQpCisJI2RlZmluZSBCSVRfRE1BX0lUUl9SWF9DTlRfQ1RMX0NST1NTX0VOCQlCSVQoNSkKKwkjZGVmaW5lIEJJVF9ETUFfSVRSX1JYX0NOVF9DVExfRlJFRV9SVU5OSUcJQklUKDYpCisjZGVmaW5lIFJHRl9ETUFfSVRSX1JYX0lETF9DTlRfVFJTSAkJCSgweDg4MWQ1NCkKKyNkZWZpbmUgUkdGX0RNQV9JVFJfUlhfSURMX0NOVF9EQVRBCQkJKDB4ODgxZDU4KQorI2RlZmluZSBSR0ZfRE1BX0lUUl9SWF9JRExfQ05UX0NUTAkJCSgweDg4MWQ1YykKKwkjZGVmaW5lIEJJVF9ETUFfSVRSX1JYX0lETF9DTlRfQ1RMX0VOCQkJQklUKDApCisJI2RlZmluZSBCSVRfRE1BX0lUUl9SWF9JRExfQ05UX0NUTF9FWFRfVElDX1NFTAkJQklUKDEpCisJI2RlZmluZSBCSVRfRE1BX0lUUl9SWF9JRExfQ05UX0NUTF9GT1JFVkVSCQlCSVQoMikKKwkjZGVmaW5lIEJJVF9ETUFfSVRSX1JYX0lETF9DTlRfQ1RMX0NMUgkJCUJJVCgzKQorCSNkZWZpbmUgQklUX0RNQV9JVFJfUlhfSURMX0NOVF9DVExfUkVBQ0hFRF9UUkVTSAlCSVQoNCkKKwogI2RlZmluZSBSR0ZfRE1BX1BTRVVET19DQVVTRQkJKDB4ODgxYzY4KQogI2RlZmluZSBSR0ZfRE1BX1BTRVVET19DQVVTRV9NQVNLX1NXCSgweDg4MWM2YykKICNkZWZpbmUgUkdGX0RNQV9QU0VVRE9fQ0FVU0VfTUFTS19GVwkoMHg4ODFjNzApCkBAIC0xNjQsNiArMjI4LDIwIEBACiAjZGVmaW5lIFJHRl9DQUZfUExMX0xPQ0tfU1RBVFVTCQkoMHg4OGFmZWMpCiAJI2RlZmluZSBCSVRfQ0FGX09TQ19ESUdfWFRBTF9TVEFCTEUJQklUKDApCiAKKyNkZWZpbmUgUkdGX1VTRVJfSlRBR19ERVZfSUQJKDB4ODgwYjM0KSAvKiBkZXZpY2UgSUQgKi8KKwkjZGVmaW5lIEpUQUdfREVWX0lEX01BUkxPTl9CMAkoMHgwNjEyMDcyZikKKwkjZGVmaW5lIEpUQUdfREVWX0lEX1NQQVJST1dfQTAJKDB4MDYzMjA3MmYpCisJI2RlZmluZSBKVEFHX0RFVl9JRF9TUEFSUk9XX0ExCSgweDE2MzIwNzJmKQorCSNkZWZpbmUgSlRBR19ERVZfSURfU1BBUlJPV19CMAkoMHgyNjMyMDcyZikKKworZW51bSB7CisJSFdfVkVSX1VOS05PV04sCisJSFdfVkVSX01BUkxPTl9CMCwgIC8qIEpUQUdfREVWX0lEX01BUkxPTl9CMCAgKi8KKwlIV19WRVJfU1BBUlJPV19BMCwgLyogSlRBR19ERVZfSURfU1BBUlJPV19BMCAqLworCUhXX1ZFUl9TUEFSUk9XX0ExLCAvKiBKVEFHX0RFVl9JRF9TUEFSUk9XX0ExICovCisJSFdfVkVSX1NQQVJST1dfQjAsIC8qIEpUQUdfREVWX0lEX1NQQVJST1dfQjAgKi8KK307CisKIC8qIHBvcHVsYXIgbG9jYXRpb25zICovCiAjZGVmaW5lIEhPU1RfTUJPWCAgIEhPU1RBRERSKFJHRl9VU0VSX1VTRVJfU0NSQVRDSF9QQUQpCiAjZGVmaW5lIEhPU1RfU1dfSU5UIChIT1NUQUREUihSR0ZfVVNFUl9VU0VSX0lDUikgKyBcCkBAIC0zMDMsNiArMzgxLDExIEBACiBzdHJ1Y3QgdnJpbmdfdHhfZGF0YSB7CiAJaW50IGVuYWJsZWQ7CiAJY3ljbGVzX3QgaWRsZSwgbGFzdF9pZGxlLCBiZWdpbjsKKwl1OCBhZ2dfd3NpemU7IC8qIGFncmVlZCBhZ2dyZWdhdGlvbiB3aW5kb3csIDAgLSBubyBhZ2cgKi8KKwl1MTYgYWdnX3RpbWVvdXQ7CisJdTggYWdnX2Ftc2R1OworCWJvb2wgYWRkYmFfaW5fcHJvZ3Jlc3M7IC8qIGlmIHNldCwgYWdnX3h4eCBpcyBmb3IgcmVxdWVzdCBpbiBwcm9ncmVzcyAqLworCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKIGVudW0geyAvKiBmb3Igd2lsNjIxMF9wcml2LnN0YXR1cyAqLwpAQCAtMzEzLDYgKzM5Niw3IEBACiAJd2lsX3N0YXR1c19yZXNldF9kb25lLAogCXdpbF9zdGF0dXNfaXJxZW4sIC8qIEZJWE1FOiBpbnRlcnJ1cHRzIGVuYWJsZWQgLSBmb3IgZGVidWcgKi8KIAl3aWxfc3RhdHVzX25hcGlfZW4sIC8qIE5BUEkgZW5hYmxlZCBwcm90ZWN0ZWQgYnkgd2lsLT5tdXRleCAqLworCXdpbF9zdGF0dXNfbGFzdCAvKiBrZWVwIGxhc3QgKi8KIH07CiAKIHN0cnVjdCBwY2lfZGV2OwpAQCAtMzk3LDE1ICs0ODEsNDYgQEAKIAlmd19yZWNvdmVyeV9ydW5uaW5nID0gMiwKIH07CiAKK2VudW0geworCWh3X2NhcGFiaWxpdHlfcmVzZXRfdjIgPSAwLAorCWh3X2NhcGFiaWxpdHlfYWR2YW5jZWRfaXRyX21vZGVyYXRpb24gPSAxLAorCWh3X2NhcGFiaWxpdHlfbGFzdAorfTsKKworc3RydWN0IHdpbF9iYWNrX3J4IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJLyogcmVxdWVzdCBwYXJhbXMsIGNvbnZlcnRlZCB0byBDUFUgYnl0ZSBvcmRlciAtIHdoYXQgd2UgYXNrZWQgZm9yICovCisJdTggY2lkeHRpZDsKKwl1OCBkaWFsb2dfdG9rZW47CisJdTE2IGJhX3BhcmFtX3NldDsKKwl1MTYgYmFfdGltZW91dDsKKwl1MTYgYmFfc2VxX2N0cmw7Cit9OworCitzdHJ1Y3Qgd2lsX2JhY2tfdHggeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwkvKiByZXF1ZXN0IHBhcmFtcywgY29udmVydGVkIHRvIENQVSBieXRlIG9yZGVyIC0gd2hhdCB3ZSBhc2tlZCBmb3IgKi8KKwl1OCByaW5naWQ7CisJdTggYWdnX3dzaXplOworCXUxNiBhZ2dfdGltZW91dDsKK307CisKK3N0cnVjdCB3aWxfcHJvYmVfY2xpZW50X3JlcSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXU2NCBjb29raWU7CisJdTggY2lkOworfTsKKwogc3RydWN0IHdpbDYyMTBfcHJpdiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJaW50IG5fbXNpOwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CiAJdm9pZCBfX2lvbWVtICpjc3I7Ci0JdWxvbmcgc3RhdHVzOworCURFQ0xBUkVfQklUTUFQKHN0YXR1cywgd2lsX3N0YXR1c19sYXN0KTsKIAl1MzIgZndfdmVyc2lvbjsKIAl1MzIgaHdfdmVyc2lvbjsKLQlzdHJ1Y3Qgd2lsX2JvYXJkICpib2FyZDsKKwljb25zdCBjaGFyICpod19uYW1lOworCURFQ0xBUkVfQklUTUFQKGh3X2NhcGFiaWxpdGllcywgaHdfY2FwYWJpbGl0eV9sYXN0KTsKIAl1OCBuX21pZHM7IC8qIG51bWJlciBvZiBhZGRpdGlvbmFsIE1JRHMgYXMgcmVwb3J0ZWQgYnkgRlcgKi8KIAl1MzIgcmVjb3ZlcnlfY291bnQ7IC8qIG51bSBvZiBGVyByZWNvdmVyeSBhdHRlbXB0cyBpbiBhIHNob3J0IHRpbWUgKi8KIAl1MzIgcmVjb3Zlcnlfc3RhdGU7IC8qIEZXIHJlY292ZXJ5IHN0YXRlIG1hY2hpbmUgKi8KQEAgLTQxNSw3ICs1MzAsMTEgQEAKIAl1MzIgbW9uaXRvcl9mbGFnczsKIAl1MzIgc2VjdXJlX3BjcDsgLyogY3JlYXRlIHNlY3VyZSBQQ1A/ICovCiAJaW50IHNpbmZvX2dlbjsKLQl1MzIgaXRyX3Ryc2g7CisJLyogaW50ZXJydXB0IG1vZGVyYXRpb24gKi8KKwl1MzIgdHhfbWF4X2J1cnN0X2R1cmF0aW9uOworCXUzMiB0eF9pbnRlcmZyYW1lX3RpbWVvdXQ7CisJdTMyIHJ4X21heF9idXJzdF9kdXJhdGlvbjsKKwl1MzIgcnhfaW50ZXJmcmFtZV90aW1lb3V0OwogCS8qIGNhY2hlZCBJU1IgcmVnaXN0ZXJzICovCiAJdTMyIGlzcl9taXNjOwogCS8qIG1haWxib3ggcmVsYXRlZCAqLwpAQCAtNDI5LDcgKzU0OCw3IEBACiAJdTE2IHJlcGx5X3NpemU7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndtaV93cTsgLyogZm9yIGRlZmVycmVkIGNhbGxzICovCiAJc3RydWN0IHdvcmtfc3RydWN0IHdtaV9ldmVudF93b3JrZXI7Ci0Jc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndtaV93cV9jb25uOyAvKiBmb3IgY29ubmVjdCB3b3JrZXIgKi8KKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3Ffc2VydmljZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29ubmVjdF93b3JrZXI7CiAJc3RydWN0IHdvcmtfc3RydWN0IGRpc2Nvbm5lY3Rfd29ya2VyOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBmd19lcnJvcl93b3JrZXI7CS8qIGZvciBGVyBlcnJvciByZWNvdmVyeSAqLwpAQCAtNDQ1LDYgKzU2NCwxNyBAQAogCXNwaW5sb2NrX3Qgd21pX2V2X2xvY2s7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGlfcng7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGlfdHg7CisJLyogQkFDSyAqLworCXN0cnVjdCBsaXN0X2hlYWQgYmFja19yeF9wZW5kaW5nOworCXN0cnVjdCBtdXRleCBiYWNrX3J4X211dGV4OyAvKiBwcm90ZWN0IEBiYWNrX3J4X3BlbmRpbmcgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmFja19yeF93b3JrZXI7CisJc3RydWN0IGxpc3RfaGVhZCBiYWNrX3R4X3BlbmRpbmc7CisJc3RydWN0IG11dGV4IGJhY2tfdHhfbXV0ZXg7IC8qIHByb3RlY3QgQGJhY2tfdHhfcGVuZGluZyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBiYWNrX3R4X3dvcmtlcjsKKwkvKiBrZWVwIGFsaXZlICovCisJc3RydWN0IGxpc3RfaGVhZCBwcm9iZV9jbGllbnRfcGVuZGluZzsKKwlzdHJ1Y3QgbXV0ZXggcHJvYmVfY2xpZW50X211dGV4OyAvKiBwcm90ZWN0IEBwcm9iZV9jbGllbnRfcGVuZGluZyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBwcm9iZV9jbGllbnRfd29ya2VyOwogCS8qIERNQSByZWxhdGVkICovCiAJc3RydWN0IHZyaW5nIHZyaW5nX3J4OwogCXN0cnVjdCB2cmluZyB2cmluZ190eFtXSUw2MjEwX01BWF9UWF9SSU5HU107CkBAIC01MjksMTEgKzY1OSw4IEBACiBpbnQgd2lsX3ByaXZfaW5pdChzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpOwogdm9pZCB3aWxfcHJpdl9kZWluaXQoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKTsKIGludCB3aWxfcmVzZXQoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKTsKLXZvaWQgd2lsX3NldF9pdHJfdHJzaChzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpOwogdm9pZCB3aWxfZndfZXJyb3JfcmVjb3Zlcnkoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKTsKIHZvaWQgd2lsX3NldF9yZWNvdmVyeV9zdGF0ZShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsIGludCBzdGF0ZSk7Ci12b2lkIHdpbF9saW5rX29uKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCk7Ci12b2lkIHdpbF9saW5rX29mZihzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpOwogaW50IHdpbF91cChzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpOwogaW50IF9fd2lsX3VwKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCk7CiBpbnQgd2lsX2Rvd24oc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKTsKQEAgLTU2NywxMiArNjk0LDI2IEBACiBpbnQgd21pX3J4b24oc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLCBib29sIG9uKTsKIGludCB3bWlfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCwgdTMyICp0X20sIHUzMiAqdF9yKTsKIGludCB3bWlfZGlzY29ubmVjdF9zdGEoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLCBjb25zdCB1OCAqbWFjLCB1MTYgcmVhc29uKTsKK2ludCB3bWlfYWRkYmEoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLCB1OCByaW5naWQsIHU4IHNpemUsIHUxNiB0aW1lb3V0KTsKK2ludCB3bWlfZGVsYmFfdHgoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLCB1OCByaW5naWQsIHUxNiByZWFzb24pOworaW50IHdtaV9kZWxiYV9yeChzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsIHU4IGNpZHh0aWQsIHUxNiByZWFzb24pOworaW50IHdtaV9hZGRiYV9yeF9yZXNwKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCwgdTggY2lkLCB1OCB0aWQsIHU4IHRva2VuLAorCQkgICAgICB1MTYgc3RhdHVzLCBib29sIGFtc2R1LCB1MTYgYWdnX3dzaXplLCB1MTYgdGltZW91dCk7CitpbnQgd2lsX2FkZGJhX3J4X3JlcXVlc3Qoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLCB1OCBjaWR4dGlkLAorCQkJIHU4IGRpYWxvZ190b2tlbiwgX19sZTE2IGJhX3BhcmFtX3NldCwKKwkJCSBfX2xlMTYgYmFfdGltZW91dCwgX19sZTE2IGJhX3NlcV9jdHJsKTsKK3ZvaWQgd2lsX2JhY2tfcnhfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIHdpbF9iYWNrX3J4X2ZsdXNoKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCk7CitpbnQgd2lsX2FkZGJhX3R4X3JlcXVlc3Qoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLCB1OCByaW5naWQsIHUxNiB3c2l6ZSk7Cit2b2lkIHdpbF9iYWNrX3R4X3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCB3aWxfYmFja190eF9mbHVzaChzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpOwogCiB2b2lkIHdpbDYyMTBfY2xlYXJfaXJxKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCk7CiBpbnQgd2lsNjIxMF9pbml0X2lycShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsIGludCBpcnEpOwogdm9pZCB3aWw2MjEwX2ZpbmlfaXJxKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCwgaW50IGlycSk7CiB2b2lkIHdpbF9tYXNrX2lycShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpOwogdm9pZCB3aWxfdW5tYXNrX2lycShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpOwordm9pZCB3aWxfY29uZmlndXJlX2ludGVycnVwdF9tb2RlcmF0aW9uKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCk7CiB2b2lkIHdpbF9kaXNhYmxlX2lycShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpOwogdm9pZCB3aWxfZW5hYmxlX2lycShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwpOwogaW50IHdpbF9jZmc4MDIxMV9tZ210X3R4KHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsCkBAIC01OTIsNiArNzMzLDggQEAKIGludCB3bWlfcGNwX3N0b3Aoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKTsKIHZvaWQgd2lsNjIxMF9kaXNjb25uZWN0KHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCwgY29uc3QgdTggKmJzc2lkLAogCQkJdTE2IHJlYXNvbl9jb2RlLCBib29sIGZyb21fZXZlbnQpOwordm9pZCB3aWxfcHJvYmVfY2xpZW50X2ZsdXNoKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCk7Cit2b2lkIHdpbF9wcm9iZV9jbGllbnRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKIGludCB3aWxfcnhfaW5pdChzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsIHUxNiBzaXplKTsKIHZvaWQgd2lsX3J4X2Zpbmkoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL3dpbF9wbGF0Zm9ybS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd2lsX3BsYXRmb3JtLmMKaW5kZXggOGYxZDc4Zi4uOTc2YTA3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd2lsX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd2lsX3BsYXRmb3JtLmMKQEAgLTE3LDEwICsxNyw2IEBACiAjaW5jbHVkZSAibGludXgvZGV2aWNlLmgiCiAjaW5jbHVkZSAid2lsX3BsYXRmb3JtLmgiCiAKLSNpZmRlZiBDT05GSUdfV0lMNjIxMF9QTEFURk9STV9NU00KLSNpbmNsdWRlICJ3aWxfcGxhdGZvcm1fbXNtLmgiCi0jZW5kaWYKLQogLyoqCiAgKiB3aWxfcGxhdGZvcm1faW5pdCgpIC0gd2lsNjIxMCBwbGF0Zm9ybSBtb2R1bGUgaW5pdAogICoKQEAgLTM3LDEzICszMyw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotI2lmZGVmIENPTkZJR19XSUw2MjEwX1BMQVRGT1JNX01TTQotCWhhbmRsZSA9IHdpbF9wbGF0Zm9ybV9tc21faW5pdChkZXYsIG9wcyk7Ci0JaWYgKGhhbmRsZSkKLQkJcmV0dXJuIGhhbmRsZTsKLSNlbmRpZgotCi0JLyogb3RoZXIgcGxhdGZvcm0gc3BlY2lmaWMgaW5pdCBmdW5jdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCBoZXJlICovCisJLyogcGxhdGZvcm0gc3BlY2lmaWMgaW5pdCBmdW5jdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCBoZXJlICovCiAKIAlyZXR1cm4gaGFuZGxlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd2lsX3BsYXRmb3JtX21zbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd2lsX3BsYXRmb3JtX21zbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMzU0YTc0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL3dpbF9wbGF0Zm9ybV9tc20uYworKysgL2Rldi9udWxsCkBAIC0xLDI1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDE0IFF1YWxjb21tIEF0aGVyb3MsIEluYy4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKLSAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCi0gKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgotICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgotICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbXNtLWJ1cy5oPgotCi0jaW5jbHVkZSAid2lsX3BsYXRmb3JtLmgiCi0jaW5jbHVkZSAid2lsX3BsYXRmb3JtX21zbS5oIgotCi0vKioKLSAqIHN0cnVjdCB3aWxfcGxhdGZvcm1fbXNtIC0gd2lsNjIxMCBtc20gcGxhdGZvcm0gbW9kdWxlIGluZm8KLSAqCi0gKiBAZGV2OiBkZXZpY2Ugb2JqZWN0Ci0gKiBAbXNtX2J1c19oYW5kbGU6IGhhbmRsZSBmb3IgdXNpbmcgbXNtX2J1cyBBUEkKLSAqIEBwZGF0YTogYnVzIHNjYWxlIGluZm8gcmV0cmlldmVkIGZyb20gRFQKLSAqLwotc3RydWN0IHdpbF9wbGF0Zm9ybV9tc20gewotCXN0cnVjdCBkZXZpY2UgKmRldjsKLQl1aW50MzJfdCBtc21fYnVzX2hhbmRsZTsKLQlzdHJ1Y3QgbXNtX2J1c19zY2FsZV9wZGF0YSAqcGRhdGE7Ci19OwotCi0jZGVmaW5lIEtCVE9CKGEpIChhICogMTAwMFVMTCkKLQotLyoqCi0gKiB3aWxfcGxhdGZvcm1fZ2V0X3BkYXRhKCkgLSBHZW5lcmF0ZSBidXMgY2xpZW50IGRhdGEgZnJvbSBkZXZpY2UgdHJlZQotICogcHJvdmlkZWQgYnkgY2xpZW50cy4KLSAqCi0gKiBkZXY6IGRldmljZSBvYmplY3QKLSAqIG9mX25vZGU6IERldmljZSB0cmVlIG5vZGUgdG8gZXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tCi0gKgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWxpZCBwb2ludGVyIHRvIHRoZSBhbGxvY2F0ZWQgYnVzLXNjYWxlLXBkYXRhCi0gKiBpZiB0aGUgdmVjdG9ycyB3ZXJlIGNvcnJlY3RseSByZWFkIGZyb20gdGhlIGNsaWVudCdzIGRldmljZSBub2RlLgotICogQW55IGVycm9yIGluIHJlYWRpbmcgb3IgcGFyc2luZyB0aGUgZGV2aWNlIG5vZGUgd2lsbCByZXR1cm4gTlVMTAotICogdG8gdGhlIGNhbGxlci4KLSAqLwotc3RhdGljIHN0cnVjdCBtc21fYnVzX3NjYWxlX3BkYXRhICp3aWxfcGxhdGZvcm1fZ2V0X3BkYXRhKAotCQlzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZSkKLXsKLQlzdHJ1Y3QgbXNtX2J1c19zY2FsZV9wZGF0YSAqcGRhdGE7Ci0Jc3RydWN0IG1zbV9idXNfcGF0aHMgKnVzZWNhc2U7Ci0JaW50IGksIGosIHJldCwgbGVuOwotCXVuc2lnbmVkIGludCBudW1fdXNlY2FzZXMsIG51bV9wYXRocywgbWVtX3NpemU7Ci0JY29uc3QgdWludDMyX3QgKnZlY19hcnI7Ci0Jc3RydWN0IG1zbV9idXNfdmVjdG9ycyAqdmVjdG9yczsKLQotCS8qIGZpcnN0IHJlYWQgbnVtX3VzZWNhc2VzIGFuZCBudW1fcGF0aHMgc28gd2UgY2FuIGNhbGN1bGF0ZQotCSAqIGFtb3VudCBvZiBtZW1vcnkgdG8gYWxsb2NhdGUKLQkgKi8KLQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihvZl9ub2RlLCAicWNvbSxtc20tYnVzLG51bS1jYXNlcyIsCi0JCQkJICAgJm51bV91c2VjYXNlcyk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGRldiwgIkVycm9yOiBudW0tdXNlY2FzZXMgbm90IGZvdW5kXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIob2Zfbm9kZSwgInFjb20sbXNtLWJ1cyxudW0tcGF0aHMiLAotCQkJCSAgICZudW1fcGF0aHMpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICJFcnJvcjogbnVtX3BhdGhzIG5vdCBmb3VuZFxuIik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCS8qIHBkYXRhIG1lbW9yeSBsYXlvdXQ6Ci0JICogICBtc21fYnVzX3NjYWxlX3BkYXRhCi0JICogICBtc21fYnVzX3BhdGhzW251bV91c2VjYXNlc10KLQkgKiAgIG1zbV9idXNfdmVjdG9yc1tudW1fdXNlY2FzZXNdW251bV9wYXRoc10KLQkgKi8KLQltZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXNtX2J1c19zY2FsZV9wZGF0YSkgKwotCQkgICBzaXplb2Yoc3RydWN0IG1zbV9idXNfcGF0aHMpICogbnVtX3VzZWNhc2VzICsKLQkJICAgc2l6ZW9mKHN0cnVjdCBtc21fYnVzX3ZlY3RvcnMpICogbnVtX3VzZWNhc2VzICogbnVtX3BhdGhzOwotCi0JcGRhdGEgPSBremFsbG9jKG1lbV9zaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBkYXRhKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG9mX25vZGUsICJxY29tLG1zbS1idXMsbmFtZSIsCi0JCQkJICAgICAgJnBkYXRhLT5uYW1lKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9lcnIoZGV2LCAiRXJyb3I6IENsaWVudCBuYW1lIG5vdCBmb3VuZFxuIik7Ci0JCWdvdG8gZXJyOwotCX0KLQotCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wob2Zfbm9kZSwgInFjb20sbXNtLWJ1cyxhY3RpdmUtb25seSIpKSB7Ci0JCXBkYXRhLT5hY3RpdmVfb25seSA9IDE7Ci0JfSBlbHNlIHsKLQkJZGV2X2luZm8oZGV2LCAiYWN0aXZlX29ubHkgZmxhZyBhYnNlbnQuXG4iKTsKLQkJZGV2X2luZm8oZGV2LCAiVXNpbmcgZHVhbCBjb250ZXh0IGJ5IGRlZmF1bHRcbiIpOwotCX0KLQotCXBkYXRhLT5udW1fdXNlY2FzZXMgPSBudW1fdXNlY2FzZXM7Ci0JcGRhdGEtPnVzZWNhc2UgPSAoc3RydWN0IG1zbV9idXNfcGF0aHMgKikocGRhdGEgKyAxKTsKLQotCXZlY19hcnIgPSBvZl9nZXRfcHJvcGVydHkob2Zfbm9kZSwgInFjb20sbXNtLWJ1cyx2ZWN0b3JzLUtCcHMiLCAmbGVuKTsKLQlpZiAodmVjX2FyciA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoZGV2LCAiRXJyb3I6IFZlY3RvciBhcnJheSBub3QgZm91bmRcbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlpZiAobGVuICE9IG51bV91c2VjYXNlcyAqIG51bV9wYXRocyAqIHNpemVvZih1aW50MzJfdCkgKiA0KSB7Ci0JCWRldl9lcnIoZGV2LCAiRXJyb3I6IExlbmd0aC1lcnJvciBvbiBnZXR0aW5nIHZlY3RvcnNcbiIpOwotCQlnb3RvIGVycjsKLQl9Ci0KLQl2ZWN0b3JzID0gKHN0cnVjdCBtc21fYnVzX3ZlY3RvcnMgKikocGRhdGEtPnVzZWNhc2UgKyBudW1fdXNlY2FzZXMpOwotCWZvciAoaSA9IDA7IGkgPCBudW1fdXNlY2FzZXM7IGkrKykgewotCQl1c2VjYXNlID0gJnBkYXRhLT51c2VjYXNlW2ldOwotCQl1c2VjYXNlLT5udW1fcGF0aHMgPSBudW1fcGF0aHM7Ci0JCXVzZWNhc2UtPnZlY3RvcnMgPSAmdmVjdG9yc1tpXTsKLQotCQlmb3IgKGogPSAwOyBqIDwgbnVtX3BhdGhzOyBqKyspIHsKLQkJCWludCBpbmRleCA9ICgoaSAqIG51bV9wYXRocykgKyBqKSAqIDQ7Ci0KLQkJCXVzZWNhc2UtPnZlY3RvcnNbal0uc3JjID0gYmUzMl90b19jcHUodmVjX2FycltpbmRleF0pOwotCQkJdXNlY2FzZS0+dmVjdG9yc1tqXS5kc3QgPQotCQkJCWJlMzJfdG9fY3B1KHZlY19hcnJbaW5kZXggKyAxXSk7Ci0JCQl1c2VjYXNlLT52ZWN0b3JzW2pdLmFiID0gKHVpbnQ2NF90KQotCQkJCUtCVE9CKGJlMzJfdG9fY3B1KHZlY19hcnJbaW5kZXggKyAyXSkpOwotCQkJdXNlY2FzZS0+dmVjdG9yc1tqXS5pYiA9ICh1aW50NjRfdCkKLQkJCQlLQlRPQihiZTMyX3RvX2NwdSh2ZWNfYXJyW2luZGV4ICsgM10pKTsKLQkJfQotCX0KLQotCXJldHVybiBwZGF0YTsKLQotZXJyOgotCWtmcmVlKHBkYXRhKTsKLQotCXJldHVybiBOVUxMOwotfQotCi0vKiB3aWxfcGxhdGZvcm0gQVBJIChjYWxsYmFja3MpICovCi0KLXN0YXRpYyBpbnQgd2lsX3BsYXRmb3JtX2J1c19yZXF1ZXN0KHZvaWQgKmhhbmRsZSwKLQkJCQkgICAgdWludDMyX3Qga2JwcyAvKiBLQnl0ZXMvU2VjICovKQotewotCWludCByYywgaTsKLQlzdHJ1Y3Qgd2lsX3BsYXRmb3JtX21zbSAqbXNtID0gKHN0cnVjdCB3aWxfcGxhdGZvcm1fbXNtICopaGFuZGxlOwotCWludCB2b3RlID0gMDsgLyogdm90ZSAwIGluIGNhc2UgcmVxdWVzdGVkIGticHMgY2Fubm90IGJlIHNhdGlzZmllZCAqLwotCXN0cnVjdCBtc21fYnVzX3BhdGhzICp1c2VjYXNlOwotCXVpbnQzMl90IHVzZWNhc2Vfa2JwczsKLQl1aW50MzJfdCBtaW5fa2JwcyA9IH4wOwotCi0JLyogZmluZCB0aGUgbG93ZXN0IHVzZWNhc2UgdGhhdCBpcyBiaWdnZXIgdGhhbiByZXF1ZXN0ZWQga2JwcyAqLwotCWZvciAoaSA9IDA7IGkgPCBtc20tPnBkYXRhLT5udW1fdXNlY2FzZXM7IGkrKykgewotCQl1c2VjYXNlID0gJm1zbS0+cGRhdGEtPnVzZWNhc2VbaV07Ci0JCS8qIGFzc3VtZSB3ZSBoYXZlIHNpbmdsZSBwYXRoICh2ZWN0b3JzWzBdKS4gSWYgd2UgZXZlcgotCQkgKiBoYXZlIG11bHRpcGxlIHBhdGhzLCBuZWVkIHRvIGRlZmluZSB0aGUgYmVoYXZpb3IgKi8KLQkJdXNlY2FzZV9rYnBzID0gZGl2NjRfdTY0KHVzZWNhc2UtPnZlY3RvcnNbMF0uaWIsIDEwMDApOwotCQlpZiAodXNlY2FzZV9rYnBzID49IGticHMgJiYgdXNlY2FzZV9rYnBzIDwgbWluX2ticHMpIHsKLQkJCW1pbl9rYnBzID0gdXNlY2FzZV9rYnBzOwotCQkJdm90ZSA9IGk7Ci0JCX0KLQl9Ci0KLQlyYyA9IG1zbV9idXNfc2NhbGVfY2xpZW50X3VwZGF0ZV9yZXF1ZXN0KG1zbS0+bXNtX2J1c19oYW5kbGUsIHZvdGUpOwotCWlmIChyYykKLQkJZGV2X2Vycihtc20tPmRldiwgIkZhaWxlZCBtc21fYnVzIHZvdGluZy4ga2Jwcz0lZCB2b3RlPSVkLCByYz0lZFxuIiwKLQkJCWticHMsIHZvdGUsIHJjKTsKLQllbHNlCi0JCS8qIFRPT0Q6IHJlbW92ZSAqLwotCQlkZXZfaW5mbyhtc20tPmRldiwgIm1zbV9idXNfc2NhbGVfY2xpZW50X3VwZGF0ZV9yZXF1ZXN0IHN1Y2NlZWRlZC4ga2Jwcz0lZCB2b3RlPSVkXG4iLAotCQkJIGticHMsIHZvdGUpOwotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCB3aWxfcGxhdGZvcm1fdW5pbml0KHZvaWQgKmhhbmRsZSkKLXsKLQlzdHJ1Y3Qgd2lsX3BsYXRmb3JtX21zbSAqbXNtID0gKHN0cnVjdCB3aWxfcGxhdGZvcm1fbXNtICopaGFuZGxlOwotCi0JZGV2X2luZm8obXNtLT5kZXYsICJ3aWxfcGxhdGZvcm1fdW5pbml0XG4iKTsKLQotCWlmIChtc20tPm1zbV9idXNfaGFuZGxlKQotCQltc21fYnVzX3NjYWxlX3VucmVnaXN0ZXJfY2xpZW50KG1zbS0+bXNtX2J1c19oYW5kbGUpOwotCi0Ja2ZyZWUobXNtLT5wZGF0YSk7Ci0Ja2ZyZWUobXNtKTsKLX0KLQotc3RhdGljIGludCB3aWxfcGxhdGZvcm1fbXNtX2J1c19yZWdpc3RlcihzdHJ1Y3Qgd2lsX3BsYXRmb3JtX21zbSAqbXNtLAotCQkJCQkgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQotewotCW1zbS0+cGRhdGEgPSB3aWxfcGxhdGZvcm1fZ2V0X3BkYXRhKG1zbS0+ZGV2LCBub2RlKTsKLQlpZiAoIW1zbS0+cGRhdGEpIHsKLQkJZGV2X2Vycihtc20tPmRldiwgIkZhaWxlZCBnZXR0aW5nIERUIGluZm9cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltc20tPm1zbV9idXNfaGFuZGxlID0gbXNtX2J1c19zY2FsZV9yZWdpc3Rlcl9jbGllbnQobXNtLT5wZGF0YSk7Ci0JaWYgKCFtc20tPm1zbV9idXNfaGFuZGxlKSB7Ci0JCWRldl9lcnIobXNtLT5kZXYsICJGYWlsZWQgbXNtX2J1cyByZWdpc3RyYXRpb25cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlkZXZfaW5mbyhtc20tPmRldiwgIm1zbV9idXMgcmVnaXN0cmF0aW9uIHN1Y2NlZWRlZCEgaGFuZGxlIDB4JXhcbiIsCi0JCSBtc20tPm1zbV9idXNfaGFuZGxlKTsKLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIHdpbF9wbGF0Zm9ybV9tc21faW5pdCgpIC0gd2lsNjIxMCBtc20gcGxhdGZvcm0gbW9kdWxlIGluaXQKLSAqCi0gKiBUaGUgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFsbCBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUuCi0gKiBJdCByZXR1cm5zIGEgaGFuZGxlIHdoaWNoIGlzIHVzZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgQVBJCi0gKgotICovCi12b2lkICp3aWxfcGxhdGZvcm1fbXNtX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgd2lsX3BsYXRmb3JtX29wcyAqb3BzKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZTsKLQlzdHJ1Y3Qgd2lsX3BsYXRmb3JtX21zbSAqbXNtOwotCWludCByYzsKLQotCW9mX25vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAicWNvbSx3aWw2MjEwIik7Ci0JaWYgKCFvZl9ub2RlKSB7Ci0JCS8qIHRoaXMgY291bGQgbWVhbiBub24tbXNtIHBsYXRmb3JtICovCi0JCWRldl9lcnIoZGV2LCAiRFQgbm9kZSBub3QgZm91bmRcbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQltc20gPSBremFsbG9jKHNpemVvZigqbXNtKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtc20pCi0JCXJldHVybiBOVUxMOwotCi0JbXNtLT5kZXYgPSBkZXY7Ci0KLQkvKiByZWdpc3RlciB3aXRoIG1zbV9idXMgbW9kdWxlIGZvciBzY2FsaW5nIHJlcXVlc3RzICovCi0JcmMgPSB3aWxfcGxhdGZvcm1fbXNtX2J1c19yZWdpc3Rlcihtc20sIG9mX25vZGUpOwotCWlmIChyYykKLQkJZ290byBjbGVhbnVwOwotCi0JbWVtc2V0KG9wcywgMCwgc2l6ZW9mKCpvcHMpKTsKLQlvcHMtPmJ1c19yZXF1ZXN0ID0gd2lsX3BsYXRmb3JtX2J1c19yZXF1ZXN0OwotCW9wcy0+dW5pbml0ID0gd2lsX3BsYXRmb3JtX3VuaW5pdDsKLQotCXJldHVybiAodm9pZCAqKW1zbTsKLQotY2xlYW51cDoKLQlrZnJlZShtc20pOwotCXJldHVybiBOVUxMOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd2lsX3BsYXRmb3JtX21zbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd2lsX3BsYXRmb3JtX21zbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjIyMjllLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL3dpbF9wbGF0Zm9ybV9tc20uaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTQgUXVhbGNvbW0gQXRoZXJvcywgSW5jLgotICoKLSAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQotICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKLSAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCi0gKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCi0gKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCi0gKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotICovCi0KLSNpZm5kZWYgX19XSUxfUExBVEZPUk1fX01TTV9IX18KLSNkZWZpbmUgX19XSUxfUExBVEZPUk1fTVNNX0hfXwotCi0jaW5jbHVkZSAid2lsX3BsYXRmb3JtLmgiCi0KLXZvaWQgKndpbF9wbGF0Zm9ybV9tc21faW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB3aWxfcGxhdGZvcm1fb3BzICpvcHMpOwotCi0jZW5kaWYgLyogX19XSUxfUExBVEZPUk1fX01TTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL3dtaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd21pLmMKaW5kZXggNjM0NzZjOC4uMGYzZTQzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd21pLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd21pLmMKQEAgLTIzLDEwICsyMywxNSBAQAogI2luY2x1ZGUgIndtaS5oIgogI2luY2x1ZGUgInRyYWNlLmgiCiAKLXN0YXRpYyB1aW50IG1heF9hc3NvY19zdGEgPSAxOworc3RhdGljIHVpbnQgbWF4X2Fzc29jX3N0YSA9IFdJTDYyMTBfTUFYX0NJRDsKIG1vZHVsZV9wYXJhbShtYXhfYXNzb2Nfc3RhLCB1aW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKG1heF9hc3NvY19zdGEsICIgTWF4IG51bWJlciBvZiBzdGF0aW9ucyBhc3NvY2lhdGVkIHRvIHRoZSBBUCIpOwogCitpbnQgYWdnX3dzaXplOyAvKiA9IDA7ICovCittb2R1bGVfcGFyYW0oYWdnX3dzaXplLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoYWdnX3dzaXplLCAiIFdpbmRvdyBzaXplIGZvciBUeCBCbG9jayBBY2sgYWZ0ZXIgY29ubmVjdDsiCisJCSAiIDAgLSB1c2UgZGVmYXVsdDsgPCAwIC0gZG9uJ3QgYXV0by1lc3RhYmxpc2giKTsKKwogLyoqCiAgKiBXTUkgZXZlbnQgcmVjZWl2aW5nIC0gdGhlb3J5IG9mIG9wZXJhdGlvbnMKICAqCkBAIC0xOTcsNyArMjAyLDcgQEAKIAogCW1pZ2h0X3NsZWVwKCk7CiAKLQlpZiAoIXRlc3RfYml0KHdpbF9zdGF0dXNfZndyZWFkeSwgJndpbC0+c3RhdHVzKSkgeworCWlmICghdGVzdF9iaXQod2lsX3N0YXR1c19md3JlYWR5LCB3aWwtPnN0YXR1cykpIHsKIAkJd2lsX2Vycih3aWwsICJXTUk6IGNhbm5vdCBzZW5kIGNvbW1hbmQgd2hpbGUgRlcgbm90IHJlYWR5XG4iKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQpAQCAtMzAwLDcgKzMwNSw3IEBACiAJd2lsX2RiZ193bWkod2lsLCAiV01JOiBnb3QgRlcgcmVhZHkgZXZlbnRcbiIpOwogCiAJd2lsX3NldF9yZWNvdmVyeV9zdGF0ZSh3aWwsIGZ3X3JlY292ZXJ5X2lkbGUpOwotCXNldF9iaXQod2lsX3N0YXR1c19md3JlYWR5LCAmd2lsLT5zdGF0dXMpOworCXNldF9iaXQod2lsX3N0YXR1c19md3JlYWR5LCB3aWwtPnN0YXR1cyk7CiAJLyogbGV0IHRoZSByZXNldCBzZXF1ZW5jZSBjb250aW51ZSAqLwogCWNvbXBsZXRlKCZ3aWwtPndtaV9yZWFkeSk7CiB9CkBAIC00MzgsNyArNDQzLDcgQEAKIAogCWlmICgod2Rldi0+aWZ0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8CiAJICAgICh3ZGV2LT5pZnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVCkpIHsKLQkJaWYgKCF0ZXN0X2JpdCh3aWxfc3RhdHVzX2Z3Y29ubmVjdGluZywgJndpbC0+c3RhdHVzKSkgeworCQlpZiAoIXRlc3RfYml0KHdpbF9zdGF0dXNfZndjb25uZWN0aW5nLCB3aWwtPnN0YXR1cykpIHsKIAkJCXdpbF9lcnIod2lsLCAiTm90IGluIGNvbm5lY3Rpbmcgc3RhdGVcbiIpOwogCQkJcmV0dXJuOwogCQl9CkBAIC00NTcsMTMgKzQ2MiwxMiBAQAogCQlpZiAoYXNzb2NfcmVxX2llKSB7CiAJCQlzaW5mby5hc3NvY19yZXFfaWVzID0gYXNzb2NfcmVxX2llOwogCQkJc2luZm8uYXNzb2NfcmVxX2llc19sZW4gPSBhc3NvY19yZXFfaWVsZW47Ci0JCQlzaW5mby5maWxsZWQgfD0gU1RBVElPTl9JTkZPX0FTU09DX1JFUV9JRVM7CiAJCX0KIAogCQljZmc4MDIxMV9uZXdfc3RhKG5kZXYsIGV2dC0+YnNzaWQsICZzaW5mbywgR0ZQX0tFUk5FTCk7CiAJfQotCWNsZWFyX2JpdCh3aWxfc3RhdHVzX2Z3Y29ubmVjdGluZywgJndpbC0+c3RhdHVzKTsKLQlzZXRfYml0KHdpbF9zdGF0dXNfZndjb25uZWN0ZWQsICZ3aWwtPnN0YXR1cyk7CisJY2xlYXJfYml0KHdpbF9zdGF0dXNfZndjb25uZWN0aW5nLCB3aWwtPnN0YXR1cyk7CisJc2V0X2JpdCh3aWxfc3RhdHVzX2Z3Y29ubmVjdGVkLCB3aWwtPnN0YXR1cyk7CiAKIAkvKiBGSVhNRSBGVyBjYW4gdHJhbnNtaXQgb25seSB1Y2FzdCBmcmFtZXMgdG8gcGVlciAqLwogCS8qIEZJWE1FIHJlYWwgcmluZ19pZCBpbnN0ZWFkIG9mIGhhcmQgY29kZWQgMCAqLwpAQCAtNDcxLDcgKzQ3NSw3IEBACiAJd2lsLT5zdGFbZXZ0LT5jaWRdLnN0YXR1cyA9IHdpbF9zdGFfY29ubl9wZW5kaW5nOwogCiAJd2lsLT5wZW5kaW5nX2Nvbm5lY3RfY2lkID0gZXZ0LT5jaWQ7Ci0JcXVldWVfd29yayh3aWwtPndtaV93cV9jb25uLCAmd2lsLT5jb25uZWN0X3dvcmtlcik7CisJcXVldWVfd29yayh3aWwtPndxX3NlcnZpY2UsICZ3aWwtPmNvbm5lY3Rfd29ya2VyKTsKIH0KIAogc3RhdGljIHZvaWQgd21pX2V2dF9kaXNjb25uZWN0KHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCwgaW50IGlkLApAQCAtNTQ0LDkgKzU0OCwyNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgd2lsX2FkZGJhX3R4X2NpZChzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsIHU4IGNpZCwgdTE2IHdzaXplKQoreworCXN0cnVjdCB2cmluZ190eF9kYXRhICp0OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFdJTDYyMTBfTUFYX1RYX1JJTkdTOyBpKyspIHsKKwkJaWYgKGNpZCAhPSB3aWwtPnZyaW5nMmNpZF90aWRbaV1bMF0pCisJCQljb250aW51ZTsKKwkJdCA9ICZ3aWwtPnZyaW5nX3R4X2RhdGFbaV07CisJCWlmICghdC0+ZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCisJCXdpbF9hZGRiYV90eF9yZXF1ZXN0KHdpbCwgaSwgd3NpemUpOworCX0KK30KKwogc3RhdGljIHZvaWQgd21pX2V2dF9saW5rdXAoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLCBpbnQgaWQsIHZvaWQgKmQsIGludCBsZW4pCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSB3aWxfdG9fbmRldih3aWwpOwogCXN0cnVjdCB3bWlfZGF0YV9wb3J0X29wZW5fZXZlbnQgKmV2dCA9IGQ7CiAJdTggY2lkID0gZXZ0LT5jaWQ7CiAKQEAgLTU1OCw3ICs1NzcsOCBAQAogCX0KIAogCXdpbC0+c3RhW2NpZF0uZGF0YV9wb3J0X29wZW4gPSB0cnVlOwotCW5ldGlmX2NhcnJpZXJfb24obmRldik7CisJaWYgKGFnZ193c2l6ZSA+PSAwKQorCQl3aWxfYWRkYmFfdHhfY2lkKHdpbCwgY2lkLCBhZ2dfd3NpemUpOwogfQogCiBzdGF0aWMgdm9pZCB3bWlfZXZ0X2xpbmtkb3duKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCwgaW50IGlkLCB2b2lkICpkLCBpbnQgbGVuKQpAQCAtNTgzLDU1ICs2MDMsODkgQEAKIAkJCSAgICAgIGludCBsZW4pCiB7CiAJc3RydWN0IHdtaV92cmluZ19iYV9zdGF0dXNfZXZlbnQgKmV2dCA9IGQ7Ci0Jc3RydWN0IHdpbF9zdGFfaW5mbyAqc3RhOwotCXVpbnQgaSwgY2lkOworCXN0cnVjdCB2cmluZ190eF9kYXRhICp0eGRhdGE7CiAKLQkvKiBUT0RPOiB1c2UgUnggQkEgc3RhdHVzLCBub3QgVHggb25lICovCi0KLQl3aWxfZGJnX3dtaSh3aWwsICJCQUNLWyVkXSAlcyB7JWR9IHRpbWVvdXQgJWRcbiIsCisJd2lsX2RiZ193bWkod2lsLCAiQkFDS1slZF0gJXMgeyVkfSB0aW1lb3V0ICVkIEFNU0RVJXNcbiIsCiAJCSAgICBldnQtPnJpbmdpZCwKIAkJICAgIGV2dC0+c3RhdHVzID09IFdNSV9CQV9BR1JFRUQgPyAiT0siIDogIk4vQSIsCi0JCSAgICBldnQtPmFnZ193c2l6ZSwgX19sZTE2X3RvX2NwdShldnQtPmJhX3RpbWVvdXQpKTsKKwkJICAgIGV2dC0+YWdnX3dzaXplLCBfX2xlMTZfdG9fY3B1KGV2dC0+YmFfdGltZW91dCksCisJCSAgICBldnQtPmFtc2R1ID8gIisiIDogIi0iKTsKIAogCWlmIChldnQtPnJpbmdpZCA+PSBXSUw2MjEwX01BWF9UWF9SSU5HUykgewogCQl3aWxfZXJyKHdpbCwgImludmFsaWQgcmluZyBpZCAlZFxuIiwgZXZ0LT5yaW5naWQpOwogCQlyZXR1cm47CiAJfQogCi0JbXV0ZXhfbG9jaygmd2lsLT5tdXRleCk7CisJaWYgKGV2dC0+c3RhdHVzICE9IFdNSV9CQV9BR1JFRUQpIHsKKwkJZXZ0LT5iYV90aW1lb3V0ID0gMDsKKwkJZXZ0LT5hZ2dfd3NpemUgPSAwOworCQlldnQtPmFtc2R1ID0gMDsKKwl9CiAKLQljaWQgPSB3aWwtPnZyaW5nMmNpZF90aWRbZXZ0LT5yaW5naWRdWzBdOwotCWlmIChjaWQgPj0gV0lMNjIxMF9NQVhfQ0lEKSB7Ci0JCXdpbF9lcnIod2lsLCAiaW52YWxpZCBDSUQgJWQgZm9yIHZyaW5nICVkXG4iLCBjaWQsIGV2dC0+cmluZ2lkKTsKLQkJZ290byBvdXQ7CisJdHhkYXRhID0gJndpbC0+dnJpbmdfdHhfZGF0YVtldnQtPnJpbmdpZF07CisKKwl0eGRhdGEtPmFnZ190aW1lb3V0ID0gbGUxNl90b19jcHUoZXZ0LT5iYV90aW1lb3V0KTsKKwl0eGRhdGEtPmFnZ193c2l6ZSA9IGV2dC0+YWdnX3dzaXplOworCXR4ZGF0YS0+YWdnX2Ftc2R1ID0gZXZ0LT5hbXNkdTsKKwl0eGRhdGEtPmFkZGJhX2luX3Byb2dyZXNzID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHdtaV9ldnRfYWRkYmFfcnhfcmVxKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCwgaW50IGlkLCB2b2lkICpkLAorCQkJCSBpbnQgbGVuKQoreworCXN0cnVjdCB3bWlfcmNwX2FkZGJhX3JlcV9ldmVudCAqZXZ0ID0gZDsKKworCXdpbF9hZGRiYV9yeF9yZXF1ZXN0KHdpbCwgZXZ0LT5jaWR4dGlkLCBldnQtPmRpYWxvZ190b2tlbiwKKwkJCSAgICAgZXZ0LT5iYV9wYXJhbV9zZXQsIGV2dC0+YmFfdGltZW91dCwKKwkJCSAgICAgZXZ0LT5iYV9zZXFfY3RybCk7Cit9CisKK3N0YXRpYyB2b2lkIHdtaV9ldnRfZGVsYmEoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLCBpbnQgaWQsIHZvaWQgKmQsIGludCBsZW4pCitfX2FjcXVpcmVzKCZzdGEtPnRpZF9yeF9sb2NrKSBfX3JlbGVhc2VzKCZzdGEtPnRpZF9yeF9sb2NrKQoreworCXN0cnVjdCB3bWlfZGVsYmFfZXZlbnQgKmV2dCA9IGQ7CisJdTggY2lkLCB0aWQ7CisJdTE2IHJlYXNvbiA9IF9fbGUxNl90b19jcHUoZXZ0LT5yZWFzb24pOworCXN0cnVjdCB3aWxfc3RhX2luZm8gKnN0YTsKKwlzdHJ1Y3Qgd2lsX3RpZF9hbXBkdV9yeCAqcjsKKworCW1pZ2h0X3NsZWVwKCk7CisJcGFyc2VfY2lkeHRpZChldnQtPmNpZHh0aWQsICZjaWQsICZ0aWQpOworCXdpbF9kYmdfd21pKHdpbCwgIkRFTEJBIENJRCAlZCBUSUQgJWQgZnJvbSAlcyByZWFzb24gJWRcbiIsCisJCSAgICBjaWQsIHRpZCwKKwkJICAgIGV2dC0+ZnJvbV9pbml0aWF0b3IgPyAib3JpZ2luYXRvciIgOiAicmVjaXBpZW50IiwKKwkJICAgIHJlYXNvbik7CisJaWYgKCFldnQtPmZyb21faW5pdGlhdG9yKSB7CisJCWludCBpOworCQkvKiBmaW5kIFR4IHZyaW5nIGl0IGJlbG9uZ3MgdG8gKi8KKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod2lsLT52cmluZzJjaWRfdGlkKTsgaSsrKSB7CisJCQlpZiAoKHdpbC0+dnJpbmcyY2lkX3RpZFtpXVswXSA9PSBjaWQpICYmCisJCQkgICAgKHdpbC0+dnJpbmcyY2lkX3RpZFtpXVsxXSA9PSB0aWQpKSB7CisJCQkJc3RydWN0IHZyaW5nX3R4X2RhdGEgKnR4ZGF0YSA9CisJCQkJCSZ3aWwtPnZyaW5nX3R4X2RhdGFbaV07CisKKwkJCQl3aWxfZGJnX3dtaSh3aWwsICJERUxCQSBUeCB2cmluZyAlZFxuIiwgaSk7CisJCQkJdHhkYXRhLT5hZ2dfdGltZW91dCA9IDA7CisJCQkJdHhkYXRhLT5hZ2dfd3NpemUgPSAwOworCQkJCXR4ZGF0YS0+YWRkYmFfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKKworCQkJCWJyZWFrOyAvKiBtYXguIDEgbWF0Y2hpbmcgcmluZyAqLworCQkJfQorCQl9CisJCWlmIChpID49IEFSUkFZX1NJWkUod2lsLT52cmluZzJjaWRfdGlkKSkKKwkJCXdpbF9lcnIod2lsLCAiREVMQkE6IHVuYWJsZSB0byBmaW5kIFR4IHZyaW5nXG4iKTsKKwkJcmV0dXJuOwogCX0KIAogCXN0YSA9ICZ3aWwtPnN0YVtjaWRdOwotCWlmIChzdGEtPnN0YXR1cyA9PSB3aWxfc3RhX3VudXNlZCkgewotCQl3aWxfZXJyKHdpbCwgIkNJRCAlZCB1bnVzZWRcbiIsIGNpZCk7Ci0JCWdvdG8gb3V0OwotCX0KIAotCXdpbF9kYmdfd21pKHdpbCwgIkJBQ0sgZm9yIENJRCAlZCAlcE1cbiIsIGNpZCwgc3RhLT5hZGRyKTsKLQlmb3IgKGkgPSAwOyBpIDwgV0lMX1NUQV9USURfTlVNOyBpKyspIHsKLQkJc3RydWN0IHdpbF90aWRfYW1wZHVfcnggKnI7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2JoKCZzdGEtPnRpZF9yeF9sb2NrKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3RhLT50aWRfcnhfbG9jaywgZmxhZ3MpOworCXIgPSBzdGEtPnRpZF9yeFt0aWRdOworCXN0YS0+dGlkX3J4W3RpZF0gPSBOVUxMOworCXdpbF90aWRfYW1wZHVfcnhfZnJlZSh3aWwsIHIpOwogCi0JCXIgPSBzdGEtPnRpZF9yeFtpXTsKLQkJc3RhLT50aWRfcnhbaV0gPSBOVUxMOwotCQl3aWxfdGlkX2FtcGR1X3J4X2ZyZWUod2lsLCByKTsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPnRpZF9yeF9sb2NrLCBmbGFncyk7Ci0KLQkJaWYgKChldnQtPnN0YXR1cyA9PSBXTUlfQkFfQUdSRUVEKSAmJiBldnQtPmFnZ193c2l6ZSkKLQkJCXN0YS0+dGlkX3J4W2ldID0gd2lsX3RpZF9hbXBkdV9yeF9hbGxvYyh3aWwsCi0JCQkJCQlldnQtPmFnZ193c2l6ZSwgMCk7Ci0JfQotCi1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ3aWwtPm11dGV4KTsKKwlzcGluX3VubG9ja19iaCgmc3RhLT50aWRfcnhfbG9jayk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewpAQCAtNjQ5LDYgKzcwMyw4IEBACiAJe1dNSV9EQVRBX1BPUlRfT1BFTl9FVkVOVElELAl3bWlfZXZ0X2xpbmt1cH0sCiAJe1dNSV9XQkVfTElOS0RPV05fRVZFTlRJRCwJd21pX2V2dF9saW5rZG93bn0sCiAJe1dNSV9CQV9TVEFUVVNfRVZFTlRJRCwJCXdtaV9ldnRfYmFfc3RhdHVzfSwKKwl7V01JX1JDUF9BRERCQV9SRVFfRVZFTlRJRCwJd21pX2V2dF9hZGRiYV9yeF9yZXF9LAorCXtXTUlfREVMQkFfRVZFTlRJRCwJCXdtaV9ldnRfZGVsYmF9LAogfTsKIAogLyoKQEAgLTY2OCw3ICs3MjQsNyBAQAogCXVsb25nIGZsYWdzOwogCXVuc2lnbmVkIG47CiAKLQlpZiAoIXRlc3RfYml0KHdpbF9zdGF0dXNfcmVzZXRfZG9uZSwgJndpbC0+c3RhdHVzKSkgeworCWlmICghdGVzdF9iaXQod2lsX3N0YXR1c19yZXNldF9kb25lLCB3aWwtPnN0YXR1cykpIHsKIAkJd2lsX2Vycih3aWwsICJSZXNldCBpbiBwcm9ncmVzcy4gQ2Fubm90IGhhbmRsZSBXTUkgZXZlbnRcbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtMTAyNSwxMyArMTA4MSwxNCBAQAogCXN0cnVjdCB3bWlfY2ZnX3J4X2NoYWluX2NtZCBjbWQgPSB7CiAJCS5hY3Rpb24gPSBXTUlfUlhfQ0hBSU5fQURELAogCQkucnhfc3dfcmluZyA9IHsKLQkJCS5tYXhfbXBkdV9zaXplID0gY3B1X3RvX2xlMTYobXR1X21heCArIEVUSF9ITEVOKSwKKwkJCS5tYXhfbXBkdV9zaXplID0gY3B1X3RvX2xlMTYod2lsX210dTJtYWNidWYobXR1X21heCkpLAogCQkJLnJpbmdfbWVtX2Jhc2UgPSBjcHVfdG9fbGU2NCh2cmluZy0+cGEpLAogCQkJLnJpbmdfc2l6ZSA9IGNwdV90b19sZTE2KHZyaW5nLT5zaXplKSwKIAkJfSwKIAkJLm1pZCA9IDAsIC8qIFRPRE8gLSB3aGF0IGlzIGl0PyAqLwogCQkuZGVjYXBfdHJhbnNfdHlwZSA9IFdNSV9ERUNBUF9UWVBFXzgwMl8zLAogCQkucmVvcmRlcl90eXBlID0gV01JX1JYX1NXX1JFT1JERVIsCisJCS5ob3N0X3RocnNoID0gY3B1X3RvX2xlMTYocnhfcmluZ19vdmVyZmxvd190aHJzaCksCiAJfTsKIAlzdHJ1Y3QgewogCQlzdHJ1Y3Qgd2lsNjIxMF9tYm94X2hkcl93bWkgd21pOwpAQCAtMTA3NCwxMiArMTEzMSwxMyBAQAogCXJldHVybiByYzsKIH0KIAotaW50IHdtaV9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLCB1MzIgKnRfbSwgdTMyICp0X3IpCitpbnQgd21pX2dldF90ZW1wZXJhdHVyZShzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsIHUzMiAqdF9iYiwgdTMyICp0X3JmKQogewogCWludCByYzsKIAlzdHJ1Y3Qgd21pX3RlbXBfc2Vuc2VfY21kIGNtZCA9IHsKLQkJLm1lYXN1cmVfbWFybG9uX21fZW4gPSBjcHVfdG9fbGUzMighIXRfbSksCi0JCS5tZWFzdXJlX21hcmxvbl9yX2VuID0gY3B1X3RvX2xlMzIoISF0X3IpLAorCQkubWVhc3VyZV9iYXNlYmFuZF9lbiA9IGNwdV90b19sZTMyKCEhdF9iYiksCisJCS5tZWFzdXJlX3JmX2VuID0gY3B1X3RvX2xlMzIoISF0X3JmKSwKKwkJLm1lYXN1cmVfbW9kZSA9IGNwdV90b19sZTMyKFRFTVBFUkFUVVJFX01FQVNVUkVfTk9XKSwKIAl9OwogCXN0cnVjdCB7CiAJCXN0cnVjdCB3aWw2MjEwX21ib3hfaGRyX3dtaSB3bWk7CkBAIC0xMDkxLDEwICsxMTQ5LDEwIEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlpZiAodF9tKQotCQkqdF9tID0gbGUzMl90b19jcHUocmVwbHkuZXZ0Lm1hcmxvbl9tX3QxMDAwKTsKLQlpZiAodF9yKQotCQkqdF9yID0gbGUzMl90b19jcHUocmVwbHkuZXZ0Lm1hcmxvbl9yX3QxMDAwKTsKKwlpZiAodF9iYikKKwkJKnRfYmIgPSBsZTMyX3RvX2NwdShyZXBseS5ldnQuYmFzZWJhbmRfdDEwMDApOworCWlmICh0X3JmKQorCQkqdF9yZiA9IGxlMzJfdG9fY3B1KHJlcGx5LmV2dC5yZl90MTAwMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMTEsNiArMTE2OSw4NyBAQAogCXJldHVybiB3bWlfc2VuZCh3aWwsIFdNSV9ESVNDT05ORUNUX1NUQV9DTURJRCwgJmNtZCwgc2l6ZW9mKGNtZCkpOwogfQogCitpbnQgd21pX2FkZGJhKHN0cnVjdCB3aWw2MjEwX3ByaXYgKndpbCwgdTggcmluZ2lkLCB1OCBzaXplLCB1MTYgdGltZW91dCkKK3sKKwlzdHJ1Y3Qgd21pX3ZyaW5nX2JhX2VuX2NtZCBjbWQgPSB7CisJCS5yaW5naWQgPSByaW5naWQsCisJCS5hZ2dfbWF4X3dzaXplID0gc2l6ZSwKKwkJLmJhX3RpbWVvdXQgPSBjcHVfdG9fbGUxNih0aW1lb3V0KSwKKwkJLmFtc2R1ID0gMCwKKwl9OworCisJd2lsX2RiZ193bWkod2lsLCAiJXMocmluZyAlZCBzaXplICVkIHRpbWVvdXQgJWQpXG4iLCBfX2Z1bmNfXywKKwkJICAgIHJpbmdpZCwgc2l6ZSwgdGltZW91dCk7CisKKwlyZXR1cm4gd21pX3NlbmQod2lsLCBXTUlfVlJJTkdfQkFfRU5fQ01ESUQsICZjbWQsIHNpemVvZihjbWQpKTsKK30KKworaW50IHdtaV9kZWxiYV90eChzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsIHU4IHJpbmdpZCwgdTE2IHJlYXNvbikKK3sKKwlzdHJ1Y3Qgd21pX3ZyaW5nX2JhX2Rpc19jbWQgY21kID0geworCQkucmluZ2lkID0gcmluZ2lkLAorCQkucmVhc29uID0gY3B1X3RvX2xlMTYocmVhc29uKSwKKwl9OworCisJd2lsX2RiZ193bWkod2lsLCAiJXMocmluZyAlZCByZWFzb24gJWQpXG4iLCBfX2Z1bmNfXywKKwkJICAgIHJpbmdpZCwgcmVhc29uKTsKKworCXJldHVybiB3bWlfc2VuZCh3aWwsIFdNSV9WUklOR19CQV9ESVNfQ01ESUQsICZjbWQsIHNpemVvZihjbWQpKTsKK30KKworaW50IHdtaV9kZWxiYV9yeChzdHJ1Y3Qgd2lsNjIxMF9wcml2ICp3aWwsIHU4IGNpZHh0aWQsIHUxNiByZWFzb24pCit7CisJc3RydWN0IHdtaV9yY3BfZGVsYmFfY21kIGNtZCA9IHsKKwkJLmNpZHh0aWQgPSBjaWR4dGlkLAorCQkucmVhc29uID0gY3B1X3RvX2xlMTYocmVhc29uKSwKKwl9OworCisJd2lsX2RiZ193bWkod2lsLCAiJXMoQ0lEICVkIFRJRCAlZCByZWFzb24gJWQpXG4iLCBfX2Z1bmNfXywKKwkJICAgIGNpZHh0aWQgJiAweGYsIChjaWR4dGlkID4+IDQpICYgMHhmLCByZWFzb24pOworCisJcmV0dXJuIHdtaV9zZW5kKHdpbCwgV01JX1JDUF9ERUxCQV9DTURJRCwgJmNtZCwgc2l6ZW9mKGNtZCkpOworfQorCitpbnQgd21pX2FkZGJhX3J4X3Jlc3Aoc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsLCB1OCBjaWQsIHU4IHRpZCwgdTggdG9rZW4sCisJCSAgICAgIHUxNiBzdGF0dXMsIGJvb2wgYW1zZHUsIHUxNiBhZ2dfd3NpemUsIHUxNiB0aW1lb3V0KQoreworCWludCByYzsKKwlzdHJ1Y3Qgd21pX3JjcF9hZGRiYV9yZXNwX2NtZCBjbWQgPSB7CisJCS5jaWR4dGlkID0gbWtfY2lkeHRpZChjaWQsIHRpZCksCisJCS5kaWFsb2dfdG9rZW4gPSB0b2tlbiwKKwkJLnN0YXR1c19jb2RlID0gY3B1X3RvX2xlMTYoc3RhdHVzKSwKKwkJLyogYml0IDA6IEEtTVNEVSBzdXBwb3J0ZWQKKwkJICogYml0IDE6IHBvbGljeSAoc2hvdWxkIGJlIDAgZm9yIHVzKQorCQkgKiBiaXRzIDIuLjU6IFRJRAorCQkgKiBiaXRzIDYuLjE1OiBidWZmZXIgc2l6ZQorCQkgKi8KKwkJLmJhX3BhcmFtX3NldCA9IGNwdV90b19sZTE2KChhbXNkdSA/IDEgOiAwKSB8ICh0aWQgPDwgMikgfAorCQkJCQkgICAgKGFnZ193c2l6ZSA8PCA2KSksCisJCS5iYV90aW1lb3V0ID0gY3B1X3RvX2xlMTYodGltZW91dCksCisJfTsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3Qgd2lsNjIxMF9tYm94X2hkcl93bWkgd21pOworCQlzdHJ1Y3Qgd21pX3JjcF9hZGRiYV9yZXNwX3NlbnRfZXZlbnQgZXZ0OworCX0gX19wYWNrZWQgcmVwbHk7CisKKwl3aWxfZGJnX3dtaSh3aWwsCisJCSAgICAiQUREQkEgcmVzcG9uc2UgZm9yIENJRCAlZCBUSUQgJWQgc2l6ZSAlZCB0aW1lb3V0ICVkIHN0YXR1cyAlZCBBTVNEVSVzXG4iLAorCQkgICAgY2lkLCB0aWQsIGFnZ193c2l6ZSwgdGltZW91dCwgc3RhdHVzLCBhbXNkdSA/ICIrIiA6ICItIik7CisKKwlyYyA9IHdtaV9jYWxsKHdpbCwgV01JX1JDUF9BRERCQV9SRVNQX0NNRElELCAmY21kLCBzaXplb2YoY21kKSwKKwkJICAgICAgV01JX0FEREJBX1JFU1BfU0VOVF9FVkVOVElELCAmcmVwbHksIHNpemVvZihyZXBseSksIDEwMCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlpZiAocmVwbHkuZXZ0LnN0YXR1cykgeworCQl3aWxfZXJyKHdpbCwgIkFEREJBIHJlc3BvbnNlIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKKwkJCWxlMTZfdG9fY3B1KHJlcGx5LmV2dC5zdGF0dXMpKTsKKwkJcmMgPSAtRUlOVkFMOworCX0KKworCXJldHVybiByYzsKK30KKwogdm9pZCB3bWlfZXZlbnRfZmx1c2goc3RydWN0IHdpbDYyMTBfcHJpdiAqd2lsKQogewogCXN0cnVjdCBwZW5kaW5nX3dtaV9ldmVudCAqZXZ0LCAqdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL3dtaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd21pLmgKaW5kZXggMjdiOTc0My4uOGE0YWY2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd21pLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3dpbDYyMTAvd21pLmgKQEAgLTI5LDggKzI5LDEwIEBACiAKIC8qIEdlbmVyYWwgKi8KICNkZWZpbmUgV0lMT0NJVFlfTUFYX0FTU09DX1NUQSAoOCkKKyNkZWZpbmUgV0lMT0NJVFlfREVGQVVMVF9BU1NPQ19TVEEgKDEpCiAjZGVmaW5lIFdNSV9NQUNfTEVOCQkoNikKICNkZWZpbmUgV01JX1BST1hfUkFOR0VfTlVNCSgzKQorI2RlZmluZSBXTUlfTUFYX0xPU1NfRE1HX0JFQUNPTlMJKDMyKQogCiAvKiBMaXN0IG9mIENvbW1hbmRzICovCiBlbnVtIHdtaV9jb21tYW5kX2lkIHsKQEAgLTQ4LDcgKzUwLDcgQEAKIAlXTUlfU0VUX1dTQ19TVEFUVVNfQ01ESUQJPSAweDAwNDEsCiAJV01JX1BYTVRfUkFOR0VfQ0ZHX0NNRElECT0gMHgwMDQyLAogCVdNSV9QWE1UX1NOUjJfUkFOR0VfQ0ZHX0NNRElECT0gMHgwMDQzLAotCVdNSV9GQVNUX01FTV9BQ0NfTU9ERV9DTURJRAk9IDB4MDMwMCwKKy8qCVdNSV9GQVNUX01FTV9BQ0NfTU9ERV9DTURJRAk9IDB4MDMwMCwgKi8KIAlXTUlfTUVNX1JFQURfQ01ESUQJCT0gMHgwODAwLAogCVdNSV9NRU1fV1JfQ01ESUQJCT0gMHgwODAxLAogCVdNSV9FQ0hPX0NNRElECQkJPSAweDA4MDMsCkBAIC0xMDIsNiArMTA0LDggQEAKIAlXTUlfTUFJTlRBSU5fUkVTVU1FX0NNRElECT0gMHgwODUxLAogCVdNSV9SU19NR01UX0NNRElECQk9IDB4MDg1MiwKIAlXTUlfUkZfTUdNVF9DTURJRAkJPSAweDA4NTMsCisJV01JX1RIRVJNQUxfVEhST1RUTElOR19DVFJMX0NNRElECT0gMHgwODU0LAorCVdNSV9USEVSTUFMX1RIUk9UVExJTkdfR0VUX1NUQVRVU19DTURJRAk9IDB4MDg1NSwKIAkvKiBQZXJmb3JtYW5jZSBtb25pdG9yaW5nIGNvbW1hbmRzICovCiAJV01JX0JGX0NUUkxfQ01ESUQJCT0gMHgwODYyLAogCVdNSV9OT1RJRllfUkVRX0NNRElECQk9IDB4MDg2MywKQEAgLTEzNiw2ICsxNDAsNyBAQAogCVdNSV9FQVBPTF9UWF9DTURJRAkJPSAweGYwNGMsCiAJV01JX01BQ19BRERSX1JFUV9DTURJRAkJPSAweGYwNGQsCiAJV01JX0ZXX1ZFUl9DTURJRAkJPSAweGYwNGUsCisJV01JX1BNQ19DTURJRAkJCT0gMHhmMDRmLAogfTsKIAogLyoKQEAgLTI4Myw4ICsyODgsOCBAQAogCVdNSV9MT05HX1NDQU4JCT0gMCwKIAlXTUlfU0hPUlRfU0NBTgkJPSAxLAogCVdNSV9QQkNfU0NBTgkJPSAyLAotCVdNSV9BQ1RJVkVfU0NBTgkJPSAzLAotCVdNSV9ESVJFQ1RfU0NBTgkJPSA0LAorCVdNSV9ESVJFQ1RfU0NBTgkJPSAzLAorCVdNSV9BQ1RJVkVfU0NBTgkJPSA0LAogfTsKIAogc3RydWN0IHdtaV9zdGFydF9zY2FuX2NtZCB7CkBAIC0zNzUsNiArMzgwLDE3IEBACiB9IF9fcGFja2VkOwogCiAvKgorICogV01JX1RIRVJNQUxfVEhST1RUTElOR19DVFJMX0NNRElECisgKi8KKyNkZWZpbmUgVEhFUk1BTF9USFJPVFRMSU5HX1VTRV9ERUZBVUxUX01BWF9UWE9QX0xFTkdUSAkoMHhGRkZGRkZGRikKKworc3RydWN0IHdtaV90aGVybWFsX3Rocm90dGxpbmdfY3RybF9jbWQgeworCV9fbGUzMiB0aW1lX29uX3VzZWM7CisJX19sZTMyIHRpbWVfb2ZmX3VzZWM7CisJX19sZTMyIG1heF90eG9wX2xlbmd0aF91c2VjOworfSBfX3BhY2tlZDsKKworLyoKICAqIFdNSV9SRl9SWF9URVNUX0NNRElECiAgKi8KIHN0cnVjdCB3bWlfcmZfcnhfdGVzdF9jbWQgewpAQCAtNTg2LDYgKzYwMiw3IEBACiAJdTggcmluZ2lkOwogCXU4IGFnZ19tYXhfd3NpemU7CiAJX19sZTE2IGJhX3RpbWVvdXQ7CisJdTggYW1zZHU7CiB9IF9fcGFja2VkOwogCiAvKgpAQCAtNjQ3LDYgKzY2NCw3IEBACiBlbnVtIHdtaV9jZmdfcnhfY2hhaW5fY21kX2RlY2FwX3RyYW5zX3R5cGUgewogCVdNSV9ERUNBUF9UWVBFXzgwMl8zCQkJPSAwLAogCVdNSV9ERUNBUF9UWVBFX05BVElWRV9XSUZJCQk9IDEsCisJV01JX0RFQ0FQX1RZUEVfTk9ORQkJCT0gMiwKIH07CiAKIGVudW0gd21pX2NmZ19yeF9jaGFpbl9jbWRfbndpZmlfZHNfdHJhbnNfdHlwZSB7CkBAIC03ODQsOSArODAyLDE3IEBACiAgKgogICogTWVhc3VyZSBNQUMgYW5kIHJhZGlvIHRlbXBlcmF0dXJlcwogICovCisKKy8qIFBvc3NpYmxlIG1vZGVzIGZvciB0ZW1wZXJhdHVyZSBtZWFzdXJlbWVudCAqLworZW51bSB3bWlfdGVtcGVyYXR1cmVfbWVhc3VyZV9tb2RlIHsKKwlURU1QRVJBVFVSRV9VU0VfT0xEX1ZBTFVFCT0gMHgxLAorCVRFTVBFUkFUVVJFX01FQVNVUkVfTk9XCQk9IDB4MiwKK307CisKIHN0cnVjdCB3bWlfdGVtcF9zZW5zZV9jbWQgewotCV9fbGUzMiBtZWFzdXJlX21hcmxvbl9tX2VuOwotCV9fbGUzMiBtZWFzdXJlX21hcmxvbl9yX2VuOworCV9fbGUzMiBtZWFzdXJlX2Jhc2ViYW5kX2VuOworCV9fbGUzMiBtZWFzdXJlX3JmX2VuOworCV9fbGUzMiBtZWFzdXJlX21vZGU7CiB9IF9fcGFja2VkOwogCiAvKgpAQCAtODQyLDYgKzg2OCw3IEBACiAJV01JX0JGX1JYU1NfTUdNVF9ET05FX0VWRU5USUQJCT0gMHgxODM5LAogCVdNSV9SU19NR01UX0RPTkVfRVZFTlRJRAkJPSAweDE4NTIsCiAJV01JX1JGX01HTVRfU1RBVFVTX0VWRU5USUQJCT0gMHgxODUzLAorCVdNSV9USEVSTUFMX1RIUk9UVExJTkdfU1RBVFVTX0VWRU5USUQJPSAweDE4NTUsCiAJV01JX0JGX1NNX01HTVRfRE9ORV9FVkVOVElECQk9IDB4MTgzOCwKIAlXTUlfUlhfTUdNVF9QQUNLRVRfRVZFTlRJRAkJPSAweDE4NDAsCiAJV01JX1RYX01HTVRfUEFDS0VUX0VWRU5USUQJCT0gMHgxODQxLApAQCAtODU4LDYgKzg4NSw3IEBACiAJV01JX0ZMQVNIX1JFQURfRE9ORV9FVkVOVElECQk9IDB4MTkwMiwKIAlXTUlfRkxBU0hfV1JJVEVfRE9ORV9FVkVOVElECQk9IDB4MTkwMywKIAkvKlAyUCovCisJV01JX1AyUF9DRkdfRE9ORV9FVkVOVElECQk9IDB4MTkxMCwKIAlXTUlfUE9SVF9BTExPQ0FURURfRVZFTlRJRAkJPSAweDE5MTEsCiAJV01JX1BPUlRfREVMRVRFRF9FVkVOVElECQk9IDB4MTkxMiwKIAlXTUlfTElTVEVOX1NUQVJURURfRVZFTlRJRAkJPSAweDE5MTQsCkBAIC04OTgsNiArOTI2LDE1IEBACiB9IF9fcGFja2VkOwogCiAvKgorICogV01JX1RIRVJNQUxfVEhST1RUTElOR19TVEFUVVNfRVZFTlRJRAorICovCitzdHJ1Y3Qgd21pX3RoZXJtYWxfdGhyb3R0bGluZ19zdGF0dXNfZXZlbnQgeworCV9fbGUzMiB0aW1lX29uX3VzZWM7CisJX19sZTMyIHRpbWVfb2ZmX3VzZWM7CisJX19sZTMyIG1heF90eG9wX2xlbmd0aF91c2VjOworfSBfX3BhY2tlZDsKKworLyoKICAqIFdNSV9HRVRfU1RBVFVTX0RPTkVfRVZFTlRJRAogICovCiBzdHJ1Y3Qgd21pX2dldF9zdGF0dXNfZG9uZV9ldmVudCB7CkBAIC0xMDUyLDE0ICsxMDg5LDIzIEBACiBlbnVtIHdtaV92cmluZ19iYV9zdGF0dXMgewogCVdNSV9CQV9BR1JFRUQJCQk9IDAsCiAJV01JX0JBX05PTl9BR1JFRUQJCT0gMSwKKwkvKiBCQV9FTiBpbiBtaWRkbGUgb2YgdGVhcmRvd24gZmxvdyAqLworCVdNSV9CQV9URF9XSVAJCQk9IDIsCisJLyogQkFfRElTIG9yIEJBX0VOIGluIG1pZGRsZSBvZiBCQSBTRVRVUCBmbG93ICovCisJV01JX0JBX1NFVFVQX1dJUAkJPSAzLAorCS8qIEJBX0VOIHdoZW4gdGhlIEJBIHNlc3Npb24gaXMgYWxyZWFkeSBhY3RpdmUgKi8KKwlXTUlfQkFfU0VTU0lPTl9BQ1RJVkUJCT0gNCwKKwkvKiBCQV9ESVMgd2hlbiB0aGUgQkEgc2Vzc2lvbiBpcyBub3QgYWN0aXZlICovCisJV01JX0JBX1NFU1NJT05fTk9UX0FDVElWRQk9IDUsCiB9OwogCiBzdHJ1Y3Qgd21pX3ZyaW5nX2JhX3N0YXR1c19ldmVudCB7Ci0JX19sZTE2IHN0YXR1czsKKwlfX2xlMTYgc3RhdHVzOyAvKiBlbnVtIHdtaV92cmluZ19iYV9zdGF0dXMgKi8KIAl1OCByZXNlcnZlZFsyXTsKIAl1OCByaW5naWQ7CiAJdTggYWdnX3dzaXplOwogCV9fbGUxNiBiYV90aW1lb3V0OworCXU4IGFtc2R1OwogfSBfX3BhY2tlZDsKIAogLyoKQEAgLTExNDUsNiArMTE5MSwxNCBAQAogfSBfX3BhY2tlZDsKIAogLyoKKyAqIFdNSV9QMlBfQ0ZHX0RPTkVfRVZFTlRJRAorICovCitzdHJ1Y3Qgd21pX3AycF9jZmdfZG9uZV9ldmVudCB7CisJdTggc3RhdHVzOwkvKiB3bWlfZndfc3RhdHVzICovCisJdTggcmVzZXJ2ZWRbM107Cit9IF9fcGFja2VkOworCisvKgogKiBXTUlfUE9SVF9BTExPQ0FURURfRVZFTlRJRAogKi8KIHN0cnVjdCB3bWlfcG9ydF9hbGxvY2F0ZWRfZXZlbnQgewpAQCAtMTI3Miw4ICsxMzI2LDggQEAKICAqIE1lYXN1cmUgTUFDIGFuZCByYWRpbyB0ZW1wZXJhdHVyZXMKICAqLwogc3RydWN0IHdtaV90ZW1wX3NlbnNlX2RvbmVfZXZlbnQgewotCV9fbGUzMiBtYXJsb25fbV90MTAwMDsKLQlfX2xlMzIgbWFybG9uX3JfdDEwMDA7CisJX19sZTMyIGJhc2ViYW5kX3QxMDAwOworCV9fbGUzMiByZl90MTAwMDsKIH0gX19wYWNrZWQ7CiAKICNlbmRpZiAvKiBfX1dJTE9DSVRZX1dNSV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCmluZGV4IDkxODNmMWMuLjU1ZGI5ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwpAQCAtNDUsNyArNDUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtMjY5OSwxNiArMjY5OCw3IEBACiAJCWRvbWFpbltSRUdET01BSU5TWl0gPSAwOwogCQlyYyA9IC1FSU5WQUw7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoYW5uZWxfdGFibGUpOyBpKyspIHsKLQkJCS8qIHN0cmNhc2VjbXAgZG9lc24ndCBleGlzdCBpbiB0aGUgbGlicmFyeSAqLwotCQkJY2hhciAqYSA9IGNoYW5uZWxfdGFibGVbaV0ubmFtZTsKLQkJCWNoYXIgKmIgPSBkb21haW47Ci0JCQl3aGlsZSAoKmEpIHsKLQkJCQljaGFyIGMxID0gKmErKzsKLQkJCQljaGFyIGMyID0gKmIrKzsKLQkJCQlpZiAodG9sb3dlcihjMSkgIT0gdG9sb3dlcihjMikpCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKCEqYSAmJiAhKmIpIHsKKwkJCWlmICghc3RyY2FzZWNtcChjaGFubmVsX3RhYmxlW2ldLm5hbWUsIGRvbWFpbikpIHsKIAkJCQlwcml2LT5jb25maWdfcmVnX2RvbWFpbiA9IGNoYW5uZWxfdGFibGVbaV0ucmVnX2RvbWFpbjsKIAkJCQlyYyA9IDA7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCmluZGV4IDY0YTViNjcuLjc1OWZiOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9LY29uZmlnCkBAIC0xNjYsNiArMTY2LDE1IEBACiAKIAkgIFNheSBOLCB0aGlzIGlzIEJST0tFTiBhbmQgY3Jhc2hlcyBkcml2ZXIuCiAKK2NvbmZpZyBCNDNfUEhZX0FDCisJYm9vbCAiU3VwcG9ydCBmb3IgQUMtUEhZICg4MDIuMTFhYykgZGV2aWNlcyAoQlJPS0VOKSIKKwlkZXBlbmRzIG9uIEI0MyAmJiBCNDNfQkNNQSAmJiBCUk9LRU4KKwktLS1oZWxwLS0tCisJICBUaGlzIFBIWSB0eXBlIGNhbiBiZSBmb3VuZCBpbiB0aGUgZm9sbG93aW5nIGNoaXBzZXRzOgorCSAgUENJOiBCQ000MzUyLCBCQ000MzYwCisKKwkgIFNheSBOLCB0aGlzIGlzIEJST0tFTiBhbmQgY3Jhc2hlcyBkcml2ZXIuCisKICMgVGhpcyBjb25maWcgb3B0aW9uIGF1dG9tYXRpY2FsbHkgZW5hYmxlcyBiNDMgTEVEUyBzdXBwb3J0LAogIyBpZiBpdCdzIHBvc3NpYmxlLgogY29uZmlnIEI0M19MRURTCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvTWFrZWZpbGUKaW5kZXggOWY3OTY1YS4uYzYyNGQ0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZQpAQCAtMTMsNiArMTMsNyBAQAogYjQzLSQoQ09ORklHX0I0M19QSFlfSFQpCSs9IHRhYmxlc19waHlfaHQubwogYjQzLSQoQ09ORklHX0I0M19QSFlfSFQpCSs9IHJhZGlvXzIwNTkubwogYjQzLSQoQ09ORklHX0I0M19QSFlfTENOKQkrPSBwaHlfbGNuLm8gdGFibGVzX3BoeV9sY24ubworYjQzLSQoQ09ORklHX0I0M19QSFlfQUMpCSs9IHBoeV9hYy5vCiBiNDMteQkJCQkrPSBzeXNmcy5vCiBiNDMteQkJCQkrPSB4bWl0Lm8KIGI0My15CQkJCSs9IGRtYS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKaW5kZXggYmIxMjU4Ni4uMDM2NTUyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaApAQCAtNTAwLDYgKzUwMCw4IEBACiAjZGVmaW5lICBCNDNfQkNNQV9JT0NUTF9QSFlfQldfMTBNSFoJMHgwMDAwMDAwMAkvKiAxMCBNSHogYmFuZHdpZHRoLCA0MCBNSHogUEhZICovCiAjZGVmaW5lICBCNDNfQkNNQV9JT0NUTF9QSFlfQldfMjBNSFoJMHgwMDAwMDA0MAkvKiAyMCBNSHogYmFuZHdpZHRoLCA4MCBNSHogUEhZICovCiAjZGVmaW5lICBCNDNfQkNNQV9JT0NUTF9QSFlfQldfNDBNSFoJMHgwMDAwMDA4MAkvKiA0MCBNSHogYmFuZHdpZHRoLCAxNjAgTUh6IFBIWSAqLworI2RlZmluZSAgQjQzX0JDTUFfSU9DVExfUEhZX0JXXzgwTUhaCTB4MDAwMDAwQzAJLyogODAgTUh6IGJhbmR3aWR0aCAqLworI2RlZmluZSBCNDNfQkNNQV9JT0NUTF9EQUMJCTB4MDAwMDAzMDAJLyogSGlnaHNwZWVkIERBQyBtb2RlIGNvbnRyb2wgZmllbGQgKi8KICNkZWZpbmUgQjQzX0JDTUFfSU9DVExfR01PREUJCTB4MDAwMDIwMDAJLyogRyBNb2RlIEVuYWJsZSAqLwogCiAvKiBCQ01BIDgwMi4xMSBjb3JlIHNwZWNpZmljIElPIHN0YXR1cyAoQkNNQV9JT1NUKSBmbGFncyAqLwpAQCAtOTQxLDYgKzk0Myw3IEBACiAJYm9vbCBiZWFjb24xX3VwbG9hZGVkOwogCWJvb2wgYmVhY29uX3RlbXBsYXRlc192aXJnaW47IC8qIE5ldmVyIHdyb3RlIHRoZSB0ZW1wbGF0ZXM/ICovCiAJc3RydWN0IHdvcmtfc3RydWN0IGJlYWNvbl91cGRhdGVfdHJpZ2dlcjsKKwlzcGlubG9ja190IGJlYWNvbl9sb2NrOwogCiAJLyogVGhlIGN1cnJlbnQgUU9TIHBhcmFtZXRlcnMgZm9yIHRoZSA0IHF1ZXVlcy4gKi8KIAlzdHJ1Y3QgYjQzX3Fvc19wYXJhbXMgcW9zX3BhcmFtc1tCNDNfUU9TX1FVRVVFX05VTV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYwppbmRleCA0NzczMWNiLi4yYzkwODg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKQEAgLTEyNjIsNiArMTI2MiwyMyBAQAogCQlmbGFncyB8PSBCNDNfQkNNQV9JT0NUTF9HTU9ERTsKIAliNDNfZGV2aWNlX2VuYWJsZShkZXYsIGZsYWdzKTsKIAorCWlmIChkZXYtPnBoeS50eXBlID09IEI0M19QSFlUWVBFX0FDKSB7CisJCXUxNiB0bXA7CisKKwkJdG1wID0gYmNtYV9hcmVhZDMyKGRldi0+ZGV2LT5iZGV2LCBCQ01BX0lPQ1RMKTsKKwkJdG1wICY9IH5CNDNfQkNNQV9JT0NUTF9EQUM7CisJCXRtcCB8PSAweDEwMDsKKwkJYmNtYV9hd3JpdGUzMihkZXYtPmRldi0+YmRldiwgQkNNQV9JT0NUTCwgdG1wKTsKKworCQl0bXAgPSBiY21hX2FyZWFkMzIoZGV2LT5kZXYtPmJkZXYsIEJDTUFfSU9DVEwpOworCQl0bXAgJj0gfkI0M19CQ01BX0lPQ1RMX1BIWV9DTEtFTjsKKwkJYmNtYV9hd3JpdGUzMihkZXYtPmRldi0+YmRldiwgQkNNQV9JT0NUTCwgdG1wKTsKKworCQl0bXAgPSBiY21hX2FyZWFkMzIoZGV2LT5kZXYtPmJkZXYsIEJDTUFfSU9DVEwpOworCQl0bXAgfD0gQjQzX0JDTUFfSU9DVExfUEhZX0NMS0VOOworCQliY21hX2F3cml0ZTMyKGRldi0+ZGV2LT5iZGV2LCBCQ01BX0lPQ1RMLCB0bXApOworCX0KKwogCWJjbWFfY29yZV9zZXRfY2xvY2ttb2RlKGRldi0+ZGV2LT5iZGV2LCBCQ01BX0NMS01PREVfRkFTVCk7CiAJYjQzX2JjbWFfcGh5X3Jlc2V0KGRldik7CiAJYmNtYV9jb3JlX3BsbF9jdGwoZGV2LT5kZXYtPmJkZXYsIHJlcSwgc3RhdHVzLCB0cnVlKTsKQEAgLTE2MDEsMTIgKzE2MTgsMjYgQEAKIAl1bnNpZ25lZCBpbnQgcmF0ZTsKIAl1MTYgY3RsOwogCWludCBhbnRlbm5hOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZGV2LT53bC0+Y3VycmVudF9iZWFjb24pOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBza19idWZmICpiZWFjb25fc2tiOwogCi0JYmNuID0gKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKShkZXYtPndsLT5jdXJyZW50X2JlYWNvbi0+ZGF0YSk7Ci0JbGVuID0gbWluX3Qoc2l6ZV90LCBkZXYtPndsLT5jdXJyZW50X2JlYWNvbi0+bGVuLAotCQkgIDB4MjAwIC0gc2l6ZW9mKHN0cnVjdCBiNDNfcGxjcF9oZHI2KSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+d2wtPmJlYWNvbl9sb2NrLCBmbGFncyk7CisJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IoZGV2LT53bC0+Y3VycmVudF9iZWFjb24pOwogCXJhdGUgPSBpZWVlODAyMTFfZ2V0X3R4X3JhdGUoZGV2LT53bC0+aHcsIGluZm8pLT5od192YWx1ZTsKKwkvKiBDbG9uZSB0aGUgYmVhY29uLCBzbyBpdCBjYW5ub3QgZ28gYXdheSwgd2hpbGUgd2Ugd3JpdGUgaXQgdG8gaHcuICovCisJYmVhY29uX3NrYiA9IHNrYl9jbG9uZShkZXYtPndsLT5jdXJyZW50X2JlYWNvbiwgR0ZQX0FUT01JQyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT53bC0+YmVhY29uX2xvY2ssIGZsYWdzKTsKKworCWlmICghYmVhY29uX3NrYikgeworCQliNDNkYmcoZGV2LT53bCwgIkNvdWxkIG5vdCB1cGxvYWQgYmVhY29uLiAiCisJCSAgICAgICAiRmFpbGVkIHRvIGNsb25lIGJlYWNvbiBza2IuIik7CisJCXJldHVybjsKKwl9CisKKwliY24gPSAoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9tZ210ICopKGJlYWNvbl9za2ItPmRhdGEpOworCWxlbiA9IG1pbl90KHNpemVfdCwgYmVhY29uX3NrYi0+bGVuLAorCQkgICAgMHgyMDAgLSBzaXplb2Yoc3RydWN0IGI0M19wbGNwX2hkcjYpKTsKIAogCWI0M193cml0ZV90ZW1wbGF0ZV9jb21tb24oZGV2LCAoY29uc3QgdTggKiliY24sCiAJCQkJICBsZW4sIHJhbV9vZmZzZXQsIHNobV9zaXplX29mZnNldCwgcmF0ZSk7CkBAIC0xNjc0LDYgKzE3MDUsOCBAQAogCQkJCUI0M19TSE1fU0hfRFRJTVBFUiwgMCk7CiAJfQogCWI0M2RiZyhkZXYtPndsLCAiVXBkYXRlZCBiZWFjb24gdGVtcGxhdGUgYXQgMHgleFxuIiwgcmFtX29mZnNldCk7CisKKwlkZXZfa2ZyZWVfc2tiX2FueShiZWFjb25fc2tiKTsKIH0KIAogc3RhdGljIHZvaWQgYjQzX3VwbG9hZF9iZWFjb24wKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKQEAgLTE3OTAsMTMgKzE4MjMsMTMgQEAKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiB9CiAKLS8qIEFzeW5jaHJvbm91c2x5IHVwZGF0ZSB0aGUgcGFja2V0IHRlbXBsYXRlcyBpbiB0ZW1wbGF0ZSBSQU0uCi0gKiBMb2NraW5nOiBSZXF1aXJlcyB3bC0+bXV0ZXggdG8gYmUgbG9ja2VkLiAqLworLyogQXN5bmNocm9ub3VzbHkgdXBkYXRlIHRoZSBwYWNrZXQgdGVtcGxhdGVzIGluIHRlbXBsYXRlIFJBTS4gKi8KIHN0YXRpYyB2b2lkIGI0M191cGRhdGVfdGVtcGxhdGVzKHN0cnVjdCBiNDNfd2wgKndsKQogewotCXN0cnVjdCBza19idWZmICpiZWFjb247CisJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbiwgKm9sZF9iZWFjb247CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIFRoaXMgaXMgdGhlIHRvcCBoYWxmIG9mIHRoZSBhbnN5bmNocm9ub3VzIGJlYWNvbiB1cGRhdGUuCisJLyogVGhpcyBpcyB0aGUgdG9wIGhhbGYgb2YgdGhlIGFzeW5jaHJvbm91cyBiZWFjb24gdXBkYXRlLgogCSAqIFRoZSBib3R0b20gaGFsZiBpcyB0aGUgYmVhY29uIElSUS4KIAkgKiBCZWFjb24gdXBkYXRlIG11c3QgYmUgYXN5bmNocm9ub3VzIHRvIGF2b2lkIHNlbmRpbmcgYW4KIAkgKiBpbnZhbGlkIGJlYWNvbi4gVGhpcyBjYW4gaGFwcGVuIGZvciBleGFtcGxlLCBpZiB0aGUgZmlybXdhcmUKQEAgLTE4MTAsMTIgKzE4NDMsMTcgQEAKIAlpZiAodW5saWtlbHkoIWJlYWNvbikpCiAJCXJldHVybjsKIAotCWlmICh3bC0+Y3VycmVudF9iZWFjb24pCi0JCWRldl9rZnJlZV9za2JfYW55KHdsLT5jdXJyZW50X2JlYWNvbik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5iZWFjb25fbG9jaywgZmxhZ3MpOworCW9sZF9iZWFjb24gPSB3bC0+Y3VycmVudF9iZWFjb247CiAJd2wtPmN1cnJlbnRfYmVhY29uID0gYmVhY29uOwogCXdsLT5iZWFjb24wX3VwbG9hZGVkID0gZmFsc2U7CiAJd2wtPmJlYWNvbjFfdXBsb2FkZWQgPSBmYWxzZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+YmVhY29uX2xvY2ssIGZsYWdzKTsKKwogCWllZWU4MDIxMV9xdWV1ZV93b3JrKHdsLT5odywgJndsLT5iZWFjb25fdXBkYXRlX3RyaWdnZXIpOworCisJaWYgKG9sZF9iZWFjb24pCisJCWRldl9rZnJlZV9za2JfYW55KG9sZF9iZWFjb24pOwogfQogCiBzdGF0aWMgdm9pZCBiNDNfc2V0X2JlYWNvbl9pbnQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgYmVhY29uX2ludCkKQEAgLTQzMTgsNiArNDM1Niw3IEBACiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2LT5wZXJpb2RpY193b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZ3bC0+dHhfd29yayk7CisJYjQzX2xlZHNfc3RvcChkZXYpOwogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OwogCWlmICghZGV2IHx8IGI0M19zdGF0dXMoZGV2KSA8IEI0M19TVEFUX1NUQVJURUQpIHsKQEAgLTQ1MDUsNiArNDU0NCwxMiBAQAogCQkJdW5zdXBwb3J0ZWQgPSAxOwogCQlicmVhazsKICNlbmRpZgorI2lmZGVmIENPTkZJR19CNDNfUEhZX0FDCisJY2FzZSBCNDNfUEhZVFlQRV9BQzoKKwkJaWYgKHBoeV9yZXYgPiAxKQorCQkJdW5zdXBwb3J0ZWQgPSAxOworCQlicmVhazsKKyNlbmRpZgogCWRlZmF1bHQ6CiAJCXVuc3VwcG9ydGVkID0gMTsKIAl9CkBAIC00NjAxLDYgKzQ2NDYsMTAgQEAKIAkJaWYgKHJhZGlvX2lkICE9IDB4MjA2NCkKIAkJCXVuc3VwcG9ydGVkID0gMTsKIAkJYnJlYWs7CisJY2FzZSBCNDNfUEhZVFlQRV9BQzoKKwkJaWYgKHJhZGlvX2lkICE9IDB4MjA2OSkKKwkJCXVuc3VwcG9ydGVkID0gMTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQjQzX1dBUk5fT04oMSk7CiAJfQpAQCAtNTA5NCw3ICs1MTQzLDYgQEAKIHsKIAlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7CiAKLQkvKiBGSVhNRTogYWRkIGxvY2tpbmcgKi8KIAliNDNfdXBkYXRlX3RlbXBsYXRlcyh3bCk7CiAKIAlyZXR1cm4gMDsKQEAgLTU1ODQsNiArNTYzMiw3IEBACiAJd2wtPmh3ID0gaHc7CiAJbXV0ZXhfaW5pdCgmd2wtPm11dGV4KTsKIAlzcGluX2xvY2tfaW5pdCgmd2wtPmhhcmRpcnFfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJndsLT5iZWFjb25fbG9jayk7CiAJSU5JVF9XT1JLKCZ3bC0+YmVhY29uX3VwZGF0ZV90cmlnZ2VyLCBiNDNfYmVhY29uX3VwZGF0ZV90cmlnZ2VyX3dvcmspOwogCUlOSVRfV09SSygmd2wtPnR4cG93ZXJfYWRqdXN0X3dvcmssIGI0M19waHlfdHhwb3dlcl9hZGp1c3Rfd29yayk7CiAJSU5JVF9XT1JLKCZ3bC0+dHhfd29yaywgYjQzX3R4X3dvcmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9hYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NTYzM2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2FjLmMKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIEJyb2FkY29tIEI0MyB3aXJlbGVzcyBkcml2ZXIKKyAqIElFRUUgODAyLjExYWMgQUMtUEhZIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgUmFmYcWCIE1pxYJlY2tpIDx6YWplYzVAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQlpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mCXRoZSBHTlUgR2VuZXJhbAkgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlICJiNDMuaCIKKyNpbmNsdWRlICJwaHlfYWMuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCYXNpYyBQSFkgb3BzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgYjQzX3BoeV9hY19vcF9hbGxvY2F0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M19waHlfYWMgKnBoeV9hYzsKKworCXBoeV9hYyA9IGt6YWxsb2Moc2l6ZW9mKCpwaHlfYWMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBoeV9hYykKKwkJcmV0dXJuIC1FTk9NRU07CisJZGV2LT5waHkuYWMgPSBwaHlfYWM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYjQzX3BoeV9hY19vcF9mcmVlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OworCXN0cnVjdCBiNDNfcGh5X2FjICpwaHlfYWMgPSBwaHktPmFjOworCisJa2ZyZWUocGh5X2FjKTsKKwlwaHktPmFjID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgYjQzX3BoeV9hY19vcF9tYXNrc2V0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IHJlZywgdTE2IG1hc2ssCisJCQkJICB1MTYgc2V0KQoreworCWI0M193cml0ZTE2ZihkZXYsIEI0M19NTUlPX1BIWV9DT05UUk9MLCByZWcpOworCWI0M193cml0ZTE2KGRldiwgQjQzX01NSU9fUEhZX0RBVEEsCisJCSAgICAoYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1BIWV9EQVRBKSAmIG1hc2spIHwgc2V0KTsKK30KKworc3RhdGljIHUxNiBiNDNfcGh5X2FjX29wX3JhZGlvX3JlYWQoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcmVnKQoreworCWI0M193cml0ZTE2ZihkZXYsIEI0M19NTUlPX1JBRElPMjRfQ09OVFJPTCwgcmVnKTsKKwlyZXR1cm4gYjQzX3JlYWQxNihkZXYsIEI0M19NTUlPX1JBRElPMjRfREFUQSk7Cit9CisKK3N0YXRpYyB2b2lkIGI0M19waHlfYWNfb3BfcmFkaW9fd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgcmVnLAorCQkJCSAgICAgIHUxNiB2YWx1ZSkKK3sKKwliNDNfd3JpdGUxNmYoZGV2LCBCNDNfTU1JT19SQURJTzI0X0NPTlRST0wsIHJlZyk7CisJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19SQURJTzI0X0RBVEEsIHZhbHVlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBiNDNfcGh5X2FjX29wX2dldF9kZWZhdWx0X2NoYW4oc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCXJldHVybiAxMTsKKwlyZXR1cm4gMzY7Cit9CisKK3N0YXRpYyBlbnVtIGI0M190eHB3cl9yZXN1bHQKK2I0M19waHlfYWNfb3BfcmVjYWxjX3R4cG93ZXIoc3RydWN0IGI0M193bGRldiAqZGV2LCBib29sIGlnbm9yZV90c3NpKQoreworCXJldHVybiBCNDNfVFhQV1JfUkVTX0RPTkU7Cit9CisKK3N0YXRpYyB2b2lkIGI0M19waHlfYWNfb3BfYWRqdXN0X3R4cG93ZXIoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFBIWSBvcHMgc3RydWN0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2NvbnN0IHN0cnVjdCBiNDNfcGh5X29wZXJhdGlvbnMgYjQzX3BoeW9wc19hYyA9IHsKKwkuYWxsb2NhdGUJCT0gYjQzX3BoeV9hY19vcF9hbGxvY2F0ZSwKKwkuZnJlZQkJCT0gYjQzX3BoeV9hY19vcF9mcmVlLAorCS5waHlfbWFza3NldAkJPSBiNDNfcGh5X2FjX29wX21hc2tzZXQsCisJLnJhZGlvX3JlYWQJCT0gYjQzX3BoeV9hY19vcF9yYWRpb19yZWFkLAorCS5yYWRpb193cml0ZQkJPSBiNDNfcGh5X2FjX29wX3JhZGlvX3dyaXRlLAorCS5nZXRfZGVmYXVsdF9jaGFuCT0gYjQzX3BoeV9hY19vcF9nZXRfZGVmYXVsdF9jaGFuLAorCS5yZWNhbGNfdHhwb3dlcgkJPSBiNDNfcGh5X2FjX29wX3JlY2FsY190eHBvd2VyLAorCS5hZGp1c3RfdHhwb3dlcgkJPSBiNDNfcGh5X2FjX29wX2FkanVzdF90eHBvd2VyLAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWNhNzllCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9hYy5oCkBAIC0wLDAgKzEsMzggQEAKKyNpZm5kZWYgQjQzX1BIWV9BQ19IXworI2RlZmluZSBCNDNfUEhZX0FDX0hfCisKKyNpbmNsdWRlICJwaHlfY29tbW9uLmgiCisKKyNkZWZpbmUgQjQzX1BIWV9BQ19CQkNGRwkJCTB4MDAxCisjZGVmaW5lICBCNDNfUEhZX0FDX0JCQ0ZHX1JTVENDQQkJMHg0MDAwCS8qIFJlc2V0IENDQSAqLworI2RlZmluZSBCNDNfUEhZX0FDX0JBTkRDVEwJCQkweDAwMwkvKiBCYW5kIGNvbnRyb2wgKi8KKyNkZWZpbmUgIEI0M19QSFlfQUNfQkFORENUTF81R0haCQkweDAwMDEKKyNkZWZpbmUgQjQzX1BIWV9BQ19UQUJMRV9JRAkJCTB4MDBkCisjZGVmaW5lIEI0M19QSFlfQUNfVEFCTEVfT0ZGU0VUCQkJMHgwMGUKKyNkZWZpbmUgQjQzX1BIWV9BQ19UQUJMRV9EQVRBMQkJCTB4MDBmCisjZGVmaW5lIEI0M19QSFlfQUNfVEFCTEVfREFUQTIJCQkweDAxMAorI2RlZmluZSBCNDNfUEhZX0FDX1RBQkxFX0RBVEEzCQkJMHgwMTEKKyNkZWZpbmUgQjQzX1BIWV9BQ19DTEFTU0NUTAkJCTB4MTQwCS8qIENsYXNzaWZpZXIgY29udHJvbCAqLworI2RlZmluZSAgQjQzX1BIWV9BQ19DTEFTU0NUTF9DQ0tFTgkJMHgwMDAxCS8qIENDSyBlbmFibGUgKi8KKyNkZWZpbmUgIEI0M19QSFlfQUNfQ0xBU1NDVExfT0ZETUVOCQkweDAwMDIJLyogT0ZETSBlbmFibGUgKi8KKyNkZWZpbmUgIEI0M19QSFlfQUNfQ0xBU1NDVExfV0FJVEVERU4JCTB4MDAwNAkvKiBXYWl0ZWQgZW5hYmxlICovCisjZGVmaW5lIEI0M19QSFlfQUNfQlcxQQkJCQkweDM3MQorI2RlZmluZSBCNDNfUEhZX0FDX0JXMgkJCQkweDM3MgorI2RlZmluZSBCNDNfUEhZX0FDX0JXMwkJCQkweDM3MworI2RlZmluZSBCNDNfUEhZX0FDX0JXNAkJCQkweDM3NAorI2RlZmluZSBCNDNfUEhZX0FDX0JXNQkJCQkweDM3NQorI2RlZmluZSBCNDNfUEhZX0FDX0JXNgkJCQkweDM3NgorI2RlZmluZSBCNDNfUEhZX0FDX1JGQ1RMX0NNRAkJCTB4NDA4CisjZGVmaW5lIEI0M19QSFlfQUNfQzFfQ0xJUAkJCTB4NmQ0CisjZGVmaW5lICBCNDNfUEhZX0FDX0MxX0NMSVBfRElTCQkJMHg0MDAwCisjZGVmaW5lIEI0M19QSFlfQUNfQzJfQ0xJUAkJCTB4OGQ0CisjZGVmaW5lICBCNDNfUEhZX0FDX0MyX0NMSVBfRElTCQkJMHg0MDAwCisjZGVmaW5lIEI0M19QSFlfQUNfQzNfQ0xJUAkJCTB4YWQ0CisjZGVmaW5lICBCNDNfUEhZX0FDX0MzX0NMSVBfRElTCQkJMHg0MDAwCisKK3N0cnVjdCBiNDNfcGh5X2FjIHsKK307CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYjQzX3BoeV9vcGVyYXRpb25zIGI0M19waHlvcHNfYWM7CisKKyNlbmRpZiAvKiBCNDNfUEhZX0FDX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uYwppbmRleCBlZTI3YjA2Li5lYzJiOWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfY29tbW9uLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJwaHlfbHAuaCIKICNpbmNsdWRlICJwaHlfaHQuaCIKICNpbmNsdWRlICJwaHlfbGNuLmgiCisjaW5jbHVkZSAicGh5X2FjLmgiCiAjaW5jbHVkZSAiYjQzLmgiCiAjaW5jbHVkZSAibWFpbi5oIgogCkBAIC03MCw2ICs3MSwxMSBAQAogCQlwaHktPm9wcyA9ICZiNDNfcGh5b3BzX2xjbjsKICNlbmRpZgogCQlicmVhazsKKwljYXNlIEI0M19QSFlUWVBFX0FDOgorI2lmZGVmIENPTkZJR19CNDNfUEhZX0FDCisJCXBoeS0+b3BzID0gJmI0M19waHlvcHNfYWM7CisjZW5kaWYKKwkJYnJlYWs7CiAJfQogCWlmIChCNDNfV0FSTl9PTighcGh5LT5vcHMpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU3Miw3ICs1NzgsOCBAQAogCXUzMiB0bXA7CiAKIAlXQVJOX09OKGRldi0+cGh5LnR5cGUgIT0gQjQzX1BIWVRZUEVfTiAmJgotCQlkZXYtPnBoeS50eXBlICE9IEI0M19QSFlUWVBFX0hUKTsKKwkJZGV2LT5waHkudHlwZSAhPSBCNDNfUEhZVFlQRV9IVCAmJgorCQlkZXYtPnBoeS50eXBlICE9IEI0M19QSFlUWVBFX0FDKTsKIAogCXN3aXRjaCAoZGV2LT5kZXYtPmJ1c190eXBlKSB7CiAjaWZkZWYgQ09ORklHX0I0M19CQ01BCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uaAppbmRleCAzOTEyMjc0Li43OGQ4NjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfY29tbW9uLmgKQEAgLTIyMiw2ICsyMjIsOCBAQAogCQlzdHJ1Y3QgYjQzX3BoeV9odCAqaHQ7CiAJCS8qIExDTi1QSFkgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KIAkJc3RydWN0IGI0M19waHlfbGNuICpsY247CisJCS8qIEFDLVBIWSBzcGVjaWZpYyBpbmZvcm1hdGlvbiAqLworCQlzdHJ1Y3QgYjQzX3BoeV9hYyAqYWM7CiAJfTsKIAogCS8qIEJhbmQgc3VwcG9ydCBmbGFncy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9yYWRpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3JhZGlvLmMKaW5kZXggODk2MTc3Ni4uOTUwMTQyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3JhZGlvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3JhZGlvLmMKQEAgLTE3NDMsMjUgKzE3NDMsNiBAQAogCXJldHVybiB2YWx1ZTsKIH0KIAotdm9pZCBiNDNsZWdhY3lfcmFkaW9fc2V0X3R4X2lxKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldikKLXsKLQlzdGF0aWMgY29uc3QgdTggZGF0YV9oaWdoWzVdID0geyAweDAwLCAweDQwLCAweDgwLCAweDkwLCAweEQwIH07Ci0Jc3RhdGljIGNvbnN0IHU4IGRhdGFfbG93WzVdICA9IHsgMHgwMCwgMHgwMSwgMHgwNSwgMHgwNiwgMHgwQSB9OwotCXUxNiB0bXAgPSBiNDNsZWdhY3lfcmFkaW9fcmVhZDE2KGRldiwgMHgwMDFFKTsKLQlpbnQgaTsKLQlpbnQgajsKLQotCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IDU7IGorKykgewotCQkJaWYgKHRtcCA9PSAoZGF0YV9oaWdoW2ldIHwgZGF0YV9sb3dbal0pKSB7Ci0JCQkJYjQzbGVnYWN5X3BoeV93cml0ZShkZXYsIDB4MDA2OSwgKGkgLSBqKSA8PCA4IHwKLQkJCQkJCSAgICAweDAwQzApOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCX0KLX0KLQogaW50IGI0M2xlZ2FjeV9yYWRpb19zZWxlY3RjaGFubmVsKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKIAkJCQkgIHU4IGNoYW5uZWwsCiAJCQkJICBpbnQgc3ludGhldGljX3B1X3dvcmthcm91bmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcmFkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9yYWRpby5oCmluZGV4IGJjY2IzZDcuLmRkMjk3NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9yYWRpby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9yYWRpby5oCkBAIC05Miw3ICs5Miw2IEBACiB2b2lkIGI0M2xlZ2FjeV9ucnNzaV9od191cGRhdGUoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LCB1MTYgdmFsKTsKIHZvaWQgYjQzbGVnYWN5X25yc3NpX21lbV91cGRhdGUoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2KTsKIAotdm9pZCBiNDNsZWdhY3lfcmFkaW9fc2V0X3R4X2lxKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldik7CiB1MTYgYjQzbGVnYWN5X3JhZGlvX2NhbGlicmF0aW9udmFsdWUoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2KTsKIAogI2VuZGlmIC8qIEI0M2xlZ2FjeV9SQURJT19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jCmluZGV4IDk4ODBkYWUuLjc5NDQyMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMKQEAgLTk3LDI1ICs5Nyw2IEBACiB7CiB9CiAKLXN0YXRpYyBib29sIGJyY21mX3NkaW9kX3BtX3Jlc3VtZV9lcnJvcihzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpCi17Ci0JYm9vbCBpc19lcnIgPSBmYWxzZTsKLSNpZmRlZiBDT05GSUdfUE1fU0xFRVAKLQlpc19lcnIgPSBhdG9taWNfcmVhZCgmc2Rpb2Rldi0+c3VzcGVuZCk7Ci0jZW5kaWYKLQlyZXR1cm4gaXNfZXJyOwotfQotCi1zdGF0aWMgdm9pZCBicmNtZl9zZGlvZF9wbV9yZXN1bWVfd2FpdChzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYsCi0JCQkJICAgICAgIHdhaXRfcXVldWVfaGVhZF90ICp3cSkKLXsKLSNpZmRlZiBDT05GSUdfUE1fU0xFRVAKLQlpbnQgcmV0cnkgPSAwOwotCXdoaWxlIChhdG9taWNfcmVhZCgmc2Rpb2Rldi0+c3VzcGVuZCkgJiYgcmV0cnkrKyAhPSAzMCkKLQkJd2FpdF9ldmVudF90aW1lb3V0KCp3cSwgZmFsc2UsIEhaLzEwMCk7Ci0jZW5kaWYKLX0KLQogaW50IGJyY21mX3NkaW9kX2ludHJfcmVnaXN0ZXIoc3RydWN0IGJyY21mX3NkaW9fZGV2ICpzZGlvZGV2KQogewogCWludCByZXQgPSAwOwpAQCAtMjQ0LDEwICsyMjUsNiBAQAogCWJyY21mX2RiZyhTRElPLCAicnc9JWQsIGZ1bmM9JWQsIGFkZHI9MHglMDV4LCBuYnl0ZXM9JWRcbiIsCiAJCSAgd3JpdGUsIGZuLCBhZGRyLCByZWdzeik7CiAKLQlicmNtZl9zZGlvZF9wbV9yZXN1bWVfd2FpdChzZGlvZGV2LCAmc2Rpb2Rldi0+cmVxdWVzdF93b3JkX3dhaXQpOwotCWlmIChicmNtZl9zZGlvZF9wbV9yZXN1bWVfZXJyb3Ioc2Rpb2RldikpCi0JCXJldHVybiAtRUlPOwotCiAJLyogb25seSBhbGxvdyBieXRlIGFjY2VzcyBvbiBGMCAqLwogCWlmIChXQVJOX09OKHJlZ3N6ID4gMSAmJiAhZm4pKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI5Miw2ICsyNjksMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBicmNtZl9zZGlvZF9ub21lZGl1bV9zdGF0ZShzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYpCit7CisJc2Rpb2Rldi0+c3RhdGUgPSBCUkNNRl9TVEFURV9OT01FRElVTTsKKwlicmNtZl9idXNfY2hhbmdlX3N0YXRlKHNkaW9kZXYtPmJ1c19pZiwgQlJDTUZfQlVTX0RPV04pOworfQorCiBzdGF0aWMgaW50IGJyY21mX3NkaW9kX3JlZ3J3X2hlbHBlcihzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYsIHUzMiBhZGRyLAogCQkJCSAgIHU4IHJlZ3N6LCB2b2lkICpkYXRhLCBib29sIHdyaXRlKQogewpAQCAtMjk5LDcgKzI4Miw3IEBACiAJczMyIHJldHJ5ID0gMDsKIAlpbnQgcmV0OwogCi0JaWYgKHNkaW9kZXYtPmJ1c19pZi0+c3RhdGUgPT0gQlJDTUZfQlVTX05PTUVESVVNKQorCWlmIChzZGlvZGV2LT5zdGF0ZSA9PSBCUkNNRl9TVEFURV9OT01FRElVTSkKIAkJcmV0dXJuIC1FTk9NRURJVU07CiAKIAkvKgpAQCAtMzI1LDcgKzMwOCw3IEBACiAJCSByZXRyeSsrIDwgU0RJT0hfQVBJX0FDQ0VTU19SRVRSWV9MSU1JVCk7CiAKIAlpZiAocmV0ID09IC1FTk9NRURJVU0pCi0JCWJyY21mX2J1c19jaGFuZ2Vfc3RhdGUoc2Rpb2Rldi0+YnVzX2lmLCBCUkNNRl9CVVNfTk9NRURJVU0pOworCQlicmNtZl9zZGlvZF9ub21lZGl1bV9zdGF0ZShzZGlvZGV2KTsKIAllbHNlIGlmIChyZXQgIT0gMCkgewogCQkvKgogCQkgKiBTbGVlcENTUiByZWdpc3RlciBhY2Nlc3MgY2FuIGZhaWwgd2hlbgpAQCAtMzQ4LDcgKzMzMSw3IEBACiAJaW50IGVyciA9IDAsIGk7CiAJdTggYWRkclszXTsKIAotCWlmIChzZGlvZGV2LT5idXNfaWYtPnN0YXRlID09IEJSQ01GX0JVU19OT01FRElVTSkKKwlpZiAoc2Rpb2Rldi0+c3RhdGUgPT0gQlJDTUZfU1RBVEVfTk9NRURJVU0pCiAJCXJldHVybiAtRU5PTUVESVVNOwogCiAJYWRkclswXSA9IChhZGRyZXNzID4+IDgpICYgU0JTRElPX1NCQUREUkxPV19NQVNLOwpAQCAtNDYyLDEwICs0NDUsNiBAQAogCXVuc2lnbmVkIGludCByZXFfc3o7CiAJaW50IGVycjsKIAotCWJyY21mX3NkaW9kX3BtX3Jlc3VtZV93YWl0KHNkaW9kZXYsICZzZGlvZGV2LT5yZXF1ZXN0X2J1ZmZlcl93YWl0KTsKLQlpZiAoYnJjbWZfc2Rpb2RfcG1fcmVzdW1lX2Vycm9yKHNkaW9kZXYpKQotCQlyZXR1cm4gLUVJTzsKLQogCS8qIFNpbmdsZSBza2IgdXNlIHRoZSBzdGFuZGFyZCBtbWMgaW50ZXJmYWNlICovCiAJcmVxX3N6ID0gcGt0LT5sZW4gKyAzOwogCXJlcV9zeiAmPSAodWludCl+MzsKQEAgLTQ4MSw3ICs0NjAsNyBAQAogCQllcnIgPSBzZGlvX3JlYWRzYihzZGlvZGV2LT5mdW5jW2ZuXSwgKCh1OCAqKShwa3QtPmRhdGEpKSwgYWRkciwKIAkJCQkgIHJlcV9zeik7CiAJaWYgKGVyciA9PSAtRU5PTUVESVVNKQotCQlicmNtZl9idXNfY2hhbmdlX3N0YXRlKHNkaW9kZXYtPmJ1c19pZiwgQlJDTUZfQlVTX05PTUVESVVNKTsKKwkJYnJjbWZfc2Rpb2Rfbm9tZWRpdW1fc3RhdGUoc2Rpb2Rldik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNTE2LDEwICs0OTUsNiBAQAogCWlmICghcGt0bGlzdC0+cWxlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlicmNtZl9zZGlvZF9wbV9yZXN1bWVfd2FpdChzZGlvZGV2LCAmc2Rpb2Rldi0+cmVxdWVzdF9idWZmZXJfd2FpdCk7Ci0JaWYgKGJyY21mX3NkaW9kX3BtX3Jlc3VtZV9lcnJvcihzZGlvZGV2KSkKLQkJcmV0dXJuIC1FSU87Ci0KIAl0YXJnZXRfbGlzdCA9IHBrdGxpc3Q7CiAJLyogZm9yIGhvc3Qgd2l0aCBicm9rZW4gc2cgc3VwcG9ydCwgcHJlcGFyZSBhIHBhZ2UgYWxpZ25lZCBsaXN0ICovCiAJX19za2JfcXVldWVfaGVhZF9pbml0KCZsb2NhbF9saXN0KTsKQEAgLTYyMCw4ICs1OTUsNyBAQAogCiAJCXJldCA9IG1tY19jbWQuZXJyb3IgPyBtbWNfY21kLmVycm9yIDogbW1jX2RhdC5lcnJvcjsKIAkJaWYgKHJldCA9PSAtRU5PTUVESVVNKSB7Ci0JCQlicmNtZl9idXNfY2hhbmdlX3N0YXRlKHNkaW9kZXYtPmJ1c19pZiwKLQkJCQkJICAgICAgIEJSQ01GX0JVU19OT01FRElVTSk7CisJCQlicmNtZl9zZGlvZF9ub21lZGl1bV9zdGF0ZShzZGlvZGV2KTsKIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKHJldCAhPSAwKSB7CiAJCQlicmNtZl9lcnIoIkNNRDUzIHNnIGJsb2NrICVzIGZhaWxlZCAlZFxuIiwKQEAgLTk5NiwxOCArOTcwLDIwIEBACiB9CiAKICNkZWZpbmUgQlJDTUZfU0RJT19ERVZJQ0UoZGV2X2lkKQlcCi0Je1NESU9fREVWSUNFKEJSQ01fU0RJT19WRU5ET1JfSURfQlJPQURDT00sIGRldl9pZCl9CisJe1NESU9fREVWSUNFKFNESU9fVkVORE9SX0lEX0JST0FEQ09NLCBkZXZfaWQpfQogCiAvKiBkZXZpY2VzIHdlIHN1cHBvcnQsIG51bGwgdGVybWluYXRlZCAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCBicmNtZl9zZG1tY19pZHNbXSA9IHsKLQlCUkNNRl9TRElPX0RFVklDRShCUkNNX1NESU9fNDMxNDNfREVWSUNFX0lEKSwKLQlCUkNNRl9TRElPX0RFVklDRShCUkNNX1NESU9fNDMyNDFfREVWSUNFX0lEKSwKLQlCUkNNRl9TRElPX0RFVklDRShCUkNNX1NESU9fNDMyOV9ERVZJQ0VfSUQpLAotCUJSQ01GX1NESU9fREVWSUNFKEJSQ01fU0RJT180MzMwX0RFVklDRV9JRCksCi0JQlJDTUZfU0RJT19ERVZJQ0UoQlJDTV9TRElPXzQzMzRfREVWSUNFX0lEKSwKLQlCUkNNRl9TRElPX0RFVklDRShCUkNNX1NESU9fNDMzNjJfREVWSUNFX0lEKSwKLQlCUkNNRl9TRElPX0RFVklDRShCUkNNX1NESU9fNDMzNV80MzM5X0RFVklDRV9JRCksCi0JQlJDTUZfU0RJT19ERVZJQ0UoQlJDTV9TRElPXzQzNTRfREVWSUNFX0lEKSwKKwlCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzE0MyksCisJQlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMyNDEpLAorCUJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMjkpLAorCUJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMzApLAorCUJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMzQpLAorCUJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMzQwKSwKKwlCUkNNRl9TRElPX0RFVklDRShTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzM0MSksCisJQlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMzNjIpLAorCUJSQ01GX1NESU9fREVWSUNFKFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMzVfNDMzOSksCisJQlJDTUZfU0RJT19ERVZJQ0UoU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDM1NCksCiAJeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoc2RpbywgYnJjbWZfc2RtbWNfaWRzKTsKQEAgLTEwNzQsOSArMTA1MCw5IEBACiAJCWJ1c19pZi0+d293bF9zdXBwb3J0ZWQgPSB0cnVlOwogI2VuZGlmCiAKKwlzZGlvZGV2LT5zbGVlcGluZyA9IGZhbHNlOwogCWF0b21pY19zZXQoJnNkaW9kZXYtPnN1c3BlbmQsIGZhbHNlKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzZGlvZGV2LT5yZXF1ZXN0X3dvcmRfd2FpdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmc2Rpb2Rldi0+cmVxdWVzdF9idWZmZXJfd2FpdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmc2Rpb2Rldi0+aWRsZV93YWl0KTsKIAogCWJyY21mX2RiZyhTRElPLCAiRjIgZm91bmQsIGNhbGxpbmcgYnJjbWZfc2Rpb2RfcHJvYmUuLi5cbiIpOwogCWVyciA9IGJyY21mX3NkaW9kX3Byb2JlKHNkaW9kZXYpOwpAQCAtMTEzOCwxMiArMTExNCwyMyBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBicmNtZl9vcHNfc2Rpb19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgYnJjbWZfc2Rpb19kZXYgKnNkaW9kZXYgPSBidXNfaWYtPmJ1c19wcml2LnNkaW87CisJc3RydWN0IGJyY21mX2J1cyAqYnVzX2lmOworCXN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2RldjsKIAltbWNfcG1fZmxhZ190IHNkaW9fZmxhZ3M7CiAKIAlicmNtZl9kYmcoU0RJTywgIkVudGVyXG4iKTsKIAorCWJ1c19pZiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXNkaW9kZXYgPSBidXNfaWYtPmJ1c19wcml2LnNkaW87CisKKwkvKiB3YWl0IGZvciB3YXRjaGRvZyB0byBnbyBpZGxlICovCisJaWYgKHdhaXRfZXZlbnRfdGltZW91dChzZGlvZGV2LT5pZGxlX3dhaXQsIHNkaW9kZXYtPnNsZWVwaW5nLAorCQkJICAgICAgIG1zZWNzX3RvX2ppZmZpZXMoMyAqIEJSQ01GX1dEX1BPTExfTVMpKSA9PSAwKSB7CisJCWJyY21mX2VycigiYnVzIHN0aWxsIGFjdGl2ZVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCS8qIGRpc2FibGUgd2F0Y2hkb2cgKi8KKwlicmNtZl9zZGlvX3dkX3RpbWVyKHNkaW9kZXYtPmJ1cywgMCk7CiAJYXRvbWljX3NldCgmc2Rpb2Rldi0+c3VzcGVuZCwgdHJ1ZSk7CiAKIAlpZiAoc2Rpb2Rldi0+d293bF9lbmFibGVkKSB7CkBAIC0xMTU1LDkgKzExNDIsNiBAQAogCQlpZiAoc2Rpb19zZXRfaG9zdF9wbV9mbGFncyhzZGlvZGV2LT5mdW5jWzFdLCBzZGlvX2ZsYWdzKSkKIAkJCWJyY21mX2VycigiRmFpbGVkIHRvIHNldCBwbV9mbGFncyAleFxuIiwgc2Rpb19mbGFncyk7CiAJfQotCi0JYnJjbWZfc2Rpb193ZF90aW1lcihzZGlvZGV2LT5idXMsIDApOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9idXMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9idXMuaAppbmRleCBlZjM0NGU0Li44OWU2YTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvYnVzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2J1cy5oCkBAIC0zMywxMSArMzMsOCBAQAogCiAvKiBUaGUgbGV2ZWwgb2YgYnVzIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZG9uZ2xlICovCiBlbnVtIGJyY21mX2J1c19zdGF0ZSB7Ci0JQlJDTUZfQlVTX1VOS05PV04sCS8qIE5vdCBkZXRlcm1pbmVkIHlldCAqLwotCUJSQ01GX0JVU19OT01FRElVTSwJLyogTm8gbWVkaXVtIGFjY2VzcyB0byBkb25nbGUgKi8KIAlCUkNNRl9CVVNfRE9XTiwJCS8qIE5vdCByZWFkeSBmb3IgZnJhbWUgdHJhbnNmZXJzICovCi0JQlJDTUZfQlVTX0xPQUQsCQkvKiBEb3dubG9hZCBhY2Nlc3Mgb25seSAoQ1BVIHJlc2V0KSAqLwotCUJSQ01GX0JVU19EQVRBCQkvKiBSZWFkeSBmb3IgZnJhbWUgdHJhbnNmZXJzICovCisJQlJDTUZfQlVTX1VQCQkvKiBSZWFkeSBmb3IgZnJhbWUgdHJhbnNmZXJzICovCiB9OwogCiAvKiBUaGUgbGV2ZWwgb2YgYnVzIGNvbW11bmljYXRpb24gd2l0aCB0aGUgZG9uZ2xlICovCkBAIC0xODgsMjIgKzE4NSw2IEBACiAJCWJ1cy0+b3BzLT53b3dsX2NvbmZpZyhidXMtPmRldiwgZW5hYmxlZCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBicmNtZl9idXNfcmVhZHkoc3RydWN0IGJyY21mX2J1cyAqYnVzKQotewotCXJldHVybiBidXMtPnN0YXRlID09IEJSQ01GX0JVU19MT0FEIHx8IGJ1cy0+c3RhdGUgPT0gQlJDTUZfQlVTX0RBVEE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBicmNtZl9idXNfY2hhbmdlX3N0YXRlKHN0cnVjdCBicmNtZl9idXMgKmJ1cywKLQkJCQkJICBlbnVtIGJyY21mX2J1c19zdGF0ZSBuZXdfc3RhdGUpCi17Ci0JLyogTk9NRURJVU0gaXMgcGVybWFuZW50ICovCi0JaWYgKGJ1cy0+c3RhdGUgPT0gQlJDTUZfQlVTX05PTUVESVVNKQotCQlyZXR1cm47Ci0KLQlicmNtZl9kYmcoVFJBQ0UsICIlZCAtPiAlZFxuIiwgYnVzLT5zdGF0ZSwgbmV3X3N0YXRlKTsKLQlidXMtPnN0YXRlID0gbmV3X3N0YXRlOwotfQotCiAvKgogICogaW50ZXJmYWNlIGZ1bmN0aW9ucyBmcm9tIGNvbW1vbiBsYXllcgogICovCkBAIC0yMjYsNiArMjA3LDkgQEAKIC8qIE5vdGlmeSB0aGUgYnVzIGhhcyB0cmFuc2ZlcnJlZCB0aGUgdHggcGFja2V0IHRvIGZpcm13YXJlICovCiB2b2lkIGJyY21mX3R4Y29tcGxldGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqdHhwLCBib29sIHN1Y2Nlc3MpOwogCisvKiBDb25maWd1cmUgdGhlICJnbG9iYWwiIGJ1cyBzdGF0ZSB1c2VkIGJ5IHVwcGVyIGxheWVycyAqLwordm9pZCBicmNtZl9idXNfY2hhbmdlX3N0YXRlKHN0cnVjdCBicmNtZl9idXMgKmJ1cywgZW51bSBicmNtZl9idXNfc3RhdGUgc3RhdGUpOworCiBpbnQgYnJjbWZfYnVzX3N0YXJ0KHN0cnVjdCBkZXZpY2UgKmRldik7CiBzMzIgYnJjbWZfaW92YXJfZGF0YV9zZXQoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpuYW1lLCB2b2lkICpkYXRhLCB1MzIgbGVuKTsKIHZvaWQgYnJjbWZfYnVzX2FkZF90eGhkcmxlbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVpbnQgbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKaW5kZXggM2FlY2M1Zi4uYjU5YjhjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJwcm90by5oIgogI2luY2x1ZGUgInZlbmRvci5oIgogI2luY2x1ZGUgImJ1cy5oIgorI2luY2x1ZGUgImNvbW1vbi5oIgogCiAjZGVmaW5lIEJSQ01GX1NDQU5fSUVfTEVOX01BWAkJMjA0OAogI2RlZmluZSBCUkNNRl9QTk9fVkVSU0lPTgkJMgpAQCAtNDUyLDE2ICs0NTMsMTYgQEAKIH0KIAogc3RhdGljIGludAotc2VuZF9rZXlfdG9fZG9uZ2xlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgYnJjbWZfd3NlY19rZXkgKmtleSkKK3NlbmRfa2V5X3RvX2RvbmdsZShzdHJ1Y3QgYnJjbWZfaWYgKmlmcCwgc3RydWN0IGJyY21mX3dzZWNfa2V5ICprZXkpCiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgYnJjbWZfd3NlY19rZXlfbGUga2V5X2xlOwogCiAJY29udmVydF9rZXlfZnJvbV9DUFUoa2V5LCAma2V5X2xlKTsKIAotCWJyY21mX25ldGRldl93YWl0X3BlbmQ4MDIxeChuZGV2KTsKKwlicmNtZl9uZXRkZXZfd2FpdF9wZW5kODAyMXgoaWZwKTsKIAotCWVyciA9IGJyY21mX2ZpbF9ic3NjZmdfZGF0YV9zZXQobmV0ZGV2X3ByaXYobmRldiksICJ3c2VjX2tleSIsICZrZXlfbGUsCisJZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19kYXRhX3NldChpZnAsICJ3c2VjX2tleSIsICZrZXlfbGUsCiAJCQkJCXNpemVvZihrZXlfbGUpKTsKIAogCWlmIChlcnIpCkBAIC0xMjI4LDcgKzEyMjksMjUgQEAKIAltZW1zZXQocHJvZiwgMCwgc2l6ZW9mKCpwcm9mKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGJyY21mX2xpbmtfZG93bihzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfdmlmICp2aWYpCitzdGF0aWMgdTE2IGJyY21mX21hcF9md19saW5rZG93bl9yZWFzb24oY29uc3Qgc3RydWN0IGJyY21mX2V2ZW50X21zZyAqZSkKK3sKKwl1MTYgcmVhc29uOworCisJc3dpdGNoIChlLT5ldmVudF9jb2RlKSB7CisJY2FzZSBCUkNNRl9FX0RFQVVUSDoKKwljYXNlIEJSQ01GX0VfREVBVVRIX0lORDoKKwljYXNlIEJSQ01GX0VfRElTQVNTT0NfSU5EOgorCQlyZWFzb24gPSBlLT5yZWFzb247CisJCWJyZWFrOworCWNhc2UgQlJDTUZfRV9MSU5LOgorCWRlZmF1bHQ6CisJCXJlYXNvbiA9IDA7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmVhc29uOworfQorCitzdGF0aWMgdm9pZCBicmNtZl9saW5rX2Rvd24oc3RydWN0IGJyY21mX2NmZzgwMjExX3ZpZiAqdmlmLCB1MTYgcmVhc29uKQogewogCXN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcgPSB3aXBoeV90b19jZmcodmlmLT53ZGV2LndpcGh5KTsKIAlzMzIgZXJyID0gMDsKQEAgLTEyNDMsNyArMTI2Miw4IEBACiAJCQlicmNtZl9lcnIoIldMQ19ESVNBU1NPQyBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKIAkJfQogCQljbGVhcl9iaXQoQlJDTUZfVklGX1NUQVRVU19DT05ORUNURUQsICZ2aWYtPnNtZV9zdGF0ZSk7Ci0JCWNmZzgwMjExX2Rpc2Nvbm5lY3RlZCh2aWYtPndkZXYubmV0ZGV2LCAwLCBOVUxMLCAwLCBHRlBfS0VSTkVMKTsKKwkJY2ZnODAyMTFfZGlzY29ubmVjdGVkKHZpZi0+d2Rldi5uZXRkZXYsIHJlYXNvbiwgTlVMTCwgMCwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKIAogCX0KIAljbGVhcl9iaXQoQlJDTUZfVklGX1NUQVRVU19DT05ORUNUSU5HLCAmdmlmLT5zbWVfc3RhdGUpOwpAQCAtMTQxMyw3ICsxNDMzLDcgQEAKIAlpZiAoIWNoZWNrX3ZpZl91cChpZnAtPnZpZikpCiAJCXJldHVybiAtRUlPOwogCi0JYnJjbWZfbGlua19kb3duKGlmcC0+dmlmKTsKKwlicmNtZl9saW5rX2Rvd24oaWZwLT52aWYsIFdMQU5fUkVBU09OX0RFQVVUSF9MRUFWSU5HKTsKIAogCWJyY21mX2RiZyhUUkFDRSwgIkV4aXRcbiIpOwogCkBAIC0xNjcwLDcgKzE2OTAsNyBAQAogCWJyY21mX2RiZyhDT05OLCAia2V5IGxlbmd0aCAoJWQpIGtleSBpbmRleCAoJWQpIGFsZ28gKCVkKVxuIiwKIAkJICBrZXkubGVuLCBrZXkuaW5kZXgsIGtleS5hbGdvKTsKIAlicmNtZl9kYmcoQ09OTiwgImtleSBcIiVzXCJcbiIsIGtleS5kYXRhKTsKLQllcnIgPSBzZW5kX2tleV90b19kb25nbGUobmRldiwgJmtleSk7CisJZXJyID0gc2VuZF9rZXlfdG9fZG9uZ2xlKG5ldGRldl9wcml2KG5kZXYpLCAma2V5KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0yMDUyLDcgKzIwNzIsNyBAQAogCS8qIGNoZWNrIGZvciBrZXkgaW5kZXggY2hhbmdlICovCiAJaWYgKGtleS5sZW4gPT0gMCkgewogCQkvKiBrZXkgZGVsZXRlICovCi0JCWVyciA9IHNlbmRfa2V5X3RvX2RvbmdsZShuZGV2LCAma2V5KTsKKwkJZXJyID0gc2VuZF9rZXlfdG9fZG9uZ2xlKGlmcCwgJmtleSk7CiAJCWlmIChlcnIpCiAJCQlicmNtZl9lcnIoImtleSBkZWxldGUgZXJyb3IgKCVkKVxuIiwgZXJyKTsKIAl9IGVsc2UgewpAQCAtMjEwOCw3ICsyMTI4LDcgQEAKIAkJCWJyY21mX2VycigiSW52YWxpZCBjaXBoZXIgKDB4JXgpXG4iLCBwYXJhbXMtPmNpcGhlcik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQllcnIgPSBzZW5kX2tleV90b19kb25nbGUobmRldiwgJmtleSk7CisJCWVyciA9IHNlbmRfa2V5X3RvX2RvbmdsZShpZnAsICZrZXkpOwogCQlpZiAoZXJyKQogCQkJYnJjbWZfZXJyKCJ3c2VjX2tleSBlcnJvciAoJWQpXG4iLCBlcnIpOwogCX0KQEAgLTIxMjEsNyArMjE0MSw3IEBACiAJCSAgICBzdHJ1Y3Qga2V5X3BhcmFtcyAqcGFyYW1zKQogewogCXN0cnVjdCBicmNtZl9pZiAqaWZwID0gbmV0ZGV2X3ByaXYobmRldik7Ci0Jc3RydWN0IGJyY21mX3dzZWNfa2V5IGtleTsKKwlzdHJ1Y3QgYnJjbWZfd3NlY19rZXkgKmtleTsKIAlzMzIgdmFsOwogCXMzMiB3c2VjOwogCXMzMiBlcnIgPSAwOwpAQCAtMjEzMiw1NCArMjE1Miw2MiBAQAogCWlmICghY2hlY2tfdmlmX3VwKGlmcC0+dmlmKSkKIAkJcmV0dXJuIC1FSU87CiAKKwlpZiAoa2V5X2lkeCA+PSBCUkNNRl9NQVhfREVGQVVMVF9LRVlTKSB7CisJCS8qIHdlIGlnbm9yZSB0aGlzIGtleSBpbmRleCBpbiB0aGlzIGNhc2UgKi8KKwkJYnJjbWZfZXJyKCJpbnZhbGlkIGtleSBpbmRleCAoJWQpXG4iLCBrZXlfaWR4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJaWYgKG1hY19hZGRyICYmCiAJCShwYXJhbXMtPmNpcGhlciAhPSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MCkgJiYKIAkJKHBhcmFtcy0+Y2lwaGVyICE9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkpIHsKIAkJYnJjbWZfZGJnKFRSQUNFLCAiRXhpdCIpOwogCQlyZXR1cm4gYnJjbWZfYWRkX2tleWV4dCh3aXBoeSwgbmRldiwga2V5X2lkeCwgbWFjX2FkZHIsIHBhcmFtcyk7CiAJfQotCW1lbXNldCgma2V5LCAwLCBzaXplb2Yoa2V5KSk7CiAKLQlrZXkubGVuID0gKHUzMikgcGFyYW1zLT5rZXlfbGVuOwotCWtleS5pbmRleCA9ICh1MzIpIGtleV9pZHg7CisJa2V5ID0gJmlmcC0+dmlmLT5wcm9maWxlLmtleVtrZXlfaWR4XTsKKwltZW1zZXQoa2V5LCAwLCBzaXplb2YoKmtleSkpOwogCi0JaWYgKGtleS5sZW4gPiBzaXplb2Yoa2V5LmRhdGEpKSB7Ci0JCWJyY21mX2VycigiVG9vIGxvbmcga2V5IGxlbmd0aCAoJXUpXG4iLCBrZXkubGVuKTsKKwlpZiAocGFyYW1zLT5rZXlfbGVuID4gc2l6ZW9mKGtleS0+ZGF0YSkpIHsKKwkJYnJjbWZfZXJyKCJUb28gbG9uZyBrZXkgbGVuZ3RoICgldSlcbiIsIHBhcmFtcy0+a2V5X2xlbik7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZG9uZTsKIAl9Ci0JbWVtY3B5KGtleS5kYXRhLCBwYXJhbXMtPmtleSwga2V5Lmxlbik7CisJa2V5LT5sZW4gPSBwYXJhbXMtPmtleV9sZW47CisJa2V5LT5pbmRleCA9IGtleV9pZHg7CiAKLQlrZXkuZmxhZ3MgPSBCUkNNRl9QUklNQVJZX0tFWTsKKwltZW1jcHkoa2V5LT5kYXRhLCBwYXJhbXMtPmtleSwga2V5LT5sZW4pOworCisJa2V5LT5mbGFncyA9IEJSQ01GX1BSSU1BUllfS0VZOwogCXN3aXRjaCAocGFyYW1zLT5jaXBoZXIpIHsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwOgotCQlrZXkuYWxnbyA9IENSWVBUT19BTEdPX1dFUDE7CisJCWtleS0+YWxnbyA9IENSWVBUT19BTEdPX1dFUDE7CiAJCXZhbCA9IFdFUF9FTkFCTEVEOwogCQlicmNtZl9kYmcoQ09OTiwgIldMQU5fQ0lQSEVSX1NVSVRFX1dFUDQwXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQ6Ci0JCWtleS5hbGdvID0gQ1JZUFRPX0FMR09fV0VQMTI4OworCQlrZXktPmFsZ28gPSBDUllQVE9fQUxHT19XRVAxMjg7CiAJCXZhbCA9IFdFUF9FTkFCTEVEOwogCQlicmNtZl9kYmcoQ09OTiwgIldMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNFxuIik7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKIAkJaWYgKCFicmNtZl9pc19hcG1vZGUoaWZwLT52aWYpKSB7CiAJCQlicmNtZl9kYmcoQ09OTiwgIlN3YXBwaW5nIFJYL1RYIE1JQyBrZXlcbiIpOwotCQkJbWVtY3B5KGtleWJ1ZiwgJmtleS5kYXRhWzI0XSwgc2l6ZW9mKGtleWJ1ZikpOwotCQkJbWVtY3B5KCZrZXkuZGF0YVsyNF0sICZrZXkuZGF0YVsxNl0sIHNpemVvZihrZXlidWYpKTsKLQkJCW1lbWNweSgma2V5LmRhdGFbMTZdLCBrZXlidWYsIHNpemVvZihrZXlidWYpKTsKKwkJCW1lbWNweShrZXlidWYsICZrZXktPmRhdGFbMjRdLCBzaXplb2Yoa2V5YnVmKSk7CisJCQltZW1jcHkoJmtleS0+ZGF0YVsyNF0sICZrZXktPmRhdGFbMTZdLCBzaXplb2Yoa2V5YnVmKSk7CisJCQltZW1jcHkoJmtleS0+ZGF0YVsxNl0sIGtleWJ1Ziwgc2l6ZW9mKGtleWJ1ZikpOwogCQl9Ci0JCWtleS5hbGdvID0gQ1JZUFRPX0FMR09fVEtJUDsKKwkJa2V5LT5hbGdvID0gQ1JZUFRPX0FMR09fVEtJUDsKIAkJdmFsID0gVEtJUF9FTkFCTEVEOwogCQlicmNtZl9kYmcoQ09OTiwgIldMQU5fQ0lQSEVSX1NVSVRFX1RLSVBcbiIpOwogCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOgotCQlrZXkuYWxnbyA9IENSWVBUT19BTEdPX0FFU19DQ007CisJCWtleS0+YWxnbyA9IENSWVBUT19BTEdPX0FFU19DQ007CiAJCXZhbCA9IEFFU19FTkFCTEVEOwogCQlicmNtZl9kYmcoQ09OTiwgIldMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgotCQlrZXkuYWxnbyA9IENSWVBUT19BTEdPX0FFU19DQ007CisJCWtleS0+YWxnbyA9IENSWVBUT19BTEdPX0FFU19DQ007CiAJCXZhbCA9IEFFU19FTkFCTEVEOwogCQlicmNtZl9kYmcoQ09OTiwgIldMQU5fQ0lQSEVSX1NVSVRFX0NDTVBcbiIpOwogCQlicmVhazsKQEAgLTIxODksNyArMjIxNyw3IEBACiAJCWdvdG8gZG9uZTsKIAl9CiAKLQllcnIgPSBzZW5kX2tleV90b19kb25nbGUobmRldiwgJmtleSk7CisJZXJyID0gc2VuZF9rZXlfdG9fZG9uZ2xlKGlmcCwga2V5KTsKIAlpZiAoZXJyKQogCQlnb3RvIGRvbmU7CiAKQEAgLTIyMjIsNyArMjI1MCw3IEBACiAJaWYgKCFjaGVja192aWZfdXAoaWZwLT52aWYpKQogCQlyZXR1cm4gLUVJTzsKIAotCWlmIChrZXlfaWR4ID49IERPVDExX01BWF9ERUZBVUxUX0tFWVMpIHsKKwlpZiAoa2V5X2lkeCA+PSBCUkNNRl9NQVhfREVGQVVMVF9LRVlTKSB7CiAJCS8qIHdlIGlnbm9yZSB0aGlzIGtleSBpbmRleCBpbiB0aGlzIGNhc2UgKi8KIAkJYnJjbWZfZXJyKCJpbnZhbGlkIGtleSBpbmRleCAoJWQpXG4iLCBrZXlfaWR4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMjM3LDcgKzIyNjUsNyBAQAogCWJyY21mX2RiZyhDT05OLCAia2V5IGluZGV4ICglZClcbiIsIGtleV9pZHgpOwogCiAJLyogU2V0IHRoZSBuZXcga2V5L2luZGV4ICovCi0JZXJyID0gc2VuZF9rZXlfdG9fZG9uZ2xlKG5kZXYsICZrZXkpOworCWVyciA9IHNlbmRfa2V5X3RvX2RvbmdsZShpZnAsICZrZXkpOwogCiAJYnJjbWZfZGJnKFRSQUNFLCAiRXhpdFxuIik7CiAJcmV0dXJuIGVycjsKQEAgLTIzMDUsNiArMjMzMywzOSBAQAogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAorc3RhdGljIHZvaWQKK2JyY21mX2NmZzgwMjExX3JlY29uZmlndXJlX3dlcChzdHJ1Y3QgYnJjbWZfaWYgKmlmcCkKK3sKKwlzMzIgZXJyOworCXU4IGtleV9pZHg7CisJc3RydWN0IGJyY21mX3dzZWNfa2V5ICprZXk7CisJczMyIHdzZWM7CisKKwlmb3IgKGtleV9pZHggPSAwOyBrZXlfaWR4IDwgQlJDTUZfTUFYX0RFRkFVTFRfS0VZUzsga2V5X2lkeCsrKSB7CisJCWtleSA9ICZpZnAtPnZpZi0+cHJvZmlsZS5rZXlba2V5X2lkeF07CisJCWlmICgoa2V5LT5hbGdvID09IENSWVBUT19BTEdPX1dFUDEpIHx8CisJCSAgICAoa2V5LT5hbGdvID09IENSWVBUT19BTEdPX1dFUDEyOCkpCisJCQlicmVhazsKKwl9CisJaWYgKGtleV9pZHggPT0gQlJDTUZfTUFYX0RFRkFVTFRfS0VZUykKKwkJcmV0dXJuOworCisJZXJyID0gc2VuZF9rZXlfdG9fZG9uZ2xlKGlmcCwga2V5KTsKKwlpZiAoZXJyKSB7CisJCWJyY21mX2VycigiU2V0dGluZyBXRVAga2V5IGZhaWxlZCAoJWQpXG4iLCBlcnIpOworCQlyZXR1cm47CisJfQorCWVyciA9IGJyY21mX2ZpbF9ic3NjZmdfaW50X2dldChpZnAsICJ3c2VjIiwgJndzZWMpOworCWlmIChlcnIpIHsKKwkJYnJjbWZfZXJyKCJnZXQgd3NlYyBlcnJvciAoJWQpXG4iLCBlcnIpOworCQlyZXR1cm47CisJfQorCXdzZWMgfD0gV0VQX0VOQUJMRUQ7CisJZXJyID0gYnJjbWZfZmlsX2Jzc2NmZ19pbnRfc2V0KGlmcCwgIndzZWMiLCB3c2VjKTsKKwlpZiAoZXJyKQorCQlicmNtZl9lcnIoInNldCB3c2VjIGVycm9yICglZClcbiIsIGVycik7Cit9CisKIHN0YXRpYyBzMzIKIGJyY21mX2NmZzgwMjExX2dldF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAogCQkJICAgY29uc3QgdTggKm1hYywgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pCkBAIC0yMzMzLDEwICsyMzk0LDEwIEBACiAJCQlicmNtZl9lcnIoIkdFVCBTVEEgSU5GTyBmYWlsZWQsICVkXG4iLCBlcnIpOwogCQkJZ290byBkb25lOwogCQl9Ci0JCXNpbmZvLT5maWxsZWQgPSBTVEFUSU9OX0lORk9fSU5BQ1RJVkVfVElNRTsKKwkJc2luZm8tPmZpbGxlZCA9IEJJVChOTDgwMjExX1NUQV9JTkZPX0lOQUNUSVZFX1RJTUUpOwogCQlzaW5mby0+aW5hY3RpdmVfdGltZSA9IGxlMzJfdG9fY3B1KHN0YV9pbmZvX2xlLmlkbGUpICogMTAwMDsKIAkJaWYgKGxlMzJfdG9fY3B1KHN0YV9pbmZvX2xlLmZsYWdzKSAmIEJSQ01GX1NUQV9BU1NPQykgewotCQkJc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fQ09OTkVDVEVEX1RJTUU7CisJCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX0NPTk5FQ1RFRF9USU1FKTsKIAkJCXNpbmZvLT5jb25uZWN0ZWRfdGltZSA9IGxlMzJfdG9fY3B1KHN0YV9pbmZvX2xlLmluKTsKIAkJfQogCQlicmNtZl9kYmcoVFJBQ0UsICJTVEEgaWRsZSB0aW1lIDogJWQgbXMsIGNvbm5lY3RlZCB0aW1lIDolZCBzZWNcbiIsCkBAIC0yMzU0LDcgKzI0MTUsNyBAQAogCQkJYnJjbWZfZXJyKCJDb3VsZCBub3QgZ2V0IHJhdGUgKCVkKVxuIiwgZXJyKTsKIAkJCWdvdG8gZG9uZTsKIAkJfSBlbHNlIHsKLQkJCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1RYX0JJVFJBVEU7CisJCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUpOwogCQkJc2luZm8tPnR4cmF0ZS5sZWdhY3kgPSByYXRlICogNTsKIAkJCWJyY21mX2RiZyhDT05OLCAiUmF0ZSAlZCBNYnBzXG4iLCByYXRlIC8gMik7CiAJCX0KQEAgLTIzNjksNyArMjQzMCw3IEBACiAJCQkJZ290byBkb25lOwogCQkJfSBlbHNlIHsKIAkJCQlyc3NpID0gbGUzMl90b19jcHUoc2NiX3ZhbC52YWwpOwotCQkJCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1NJR05BTDsKKwkJCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX1NJR05BTCk7CiAJCQkJc2luZm8tPnNpZ25hbCA9IHJzc2k7CiAJCQkJYnJjbWZfZGJnKENPTk4sICJSU1NJICVkIGRCbVxuIiwgcnNzaSk7CiAJCQl9CkBAIC0yMzk2LDcgKzI0NTcsNyBAQAogCQkJCWJyY21mX2RiZyhDT05OLCAiRFRJTSBwZXJvaWQgJWRcbiIsCiAJCQkJCSAgZHRpbV9wZXJpb2QpOwogCQkJfQotCQkJc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fQlNTX1BBUkFNOworCQkJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19CU1NfUEFSQU0pOwogCQl9CiAJfSBlbHNlCiAJCWVyciA9IC1FUEVSTTsKQEAgLTI5OTksNyArMzA2MCw3IEBACiAJCQkgKiBkaXNhc3NvY2lhdGUgZnJvbSBBUCB0byBzYXZlIHBvd2VyIHdoaWxlIHN5c3RlbSBpcwogCQkJICogaW4gc3VzcGVuZGVkIHN0YXRlCiAJCQkgKi8KLQkJCWJyY21mX2xpbmtfZG93bih2aWYpOworCQkJYnJjbWZfbGlua19kb3duKHZpZiwgV0xBTl9SRUFTT05fVU5TUEVDSUZJRUQpOwogCQkJLyogTWFrZSBzdXJlIFdQQV9TdXBwbGljYW50IHJlY2VpdmVzIGFsbCB0aGUgZXZlbnQKIAkJCSAqIGdlbmVyYXRlZCBkdWUgdG8gRElTQVNTT0MgY2FsbCB0byB0aGUgZncgdG8ga2VlcAogCQkJICogdGhlIHN0YXRlIGZ3IGFuZCBXUEFfU3VwcGxpY2FudCBzdGF0ZSBjb25zaXN0ZW50CkBAIC0zNjk1LDE3ICszNzU2LDEyIEBACiBicmNtZl92bmRyX2llKHU4ICppZWJ1ZiwgczMyIHBrdGZsYWcsIHU4ICppZV9wdHIsIHUzMiBpZV9sZW4sIHM4ICphZGRfZGVsX2NtZCkKIHsKIAotCV9fbGUzMiBpZWNvdW50X2xlOwotCV9fbGUzMiBwa3RmbGFnX2xlOwotCiAJc3RybmNweShpZWJ1ZiwgYWRkX2RlbF9jbWQsIFZORFJfSUVfQ01EX0xFTiAtIDEpOwogCWllYnVmW1ZORFJfSUVfQ01EX0xFTiAtIDFdID0gJ1wwJzsKIAotCWllY291bnRfbGUgPSBjcHVfdG9fbGUzMigxKTsKLQltZW1jcHkoJmllYnVmW1ZORFJfSUVfQ09VTlRfT0ZGU0VUXSwgJmllY291bnRfbGUsIHNpemVvZihpZWNvdW50X2xlKSk7CisJcHV0X3VuYWxpZ25lZF9sZTMyKDEsICZpZWJ1ZltWTkRSX0lFX0NPVU5UX09GRlNFVF0pOwogCi0JcGt0ZmxhZ19sZSA9IGNwdV90b19sZTMyKHBrdGZsYWcpOwotCW1lbWNweSgmaWVidWZbVk5EUl9JRV9QS1RGTEFHX09GRlNFVF0sICZwa3RmbGFnX2xlLCBzaXplb2YocGt0ZmxhZ19sZSkpOworCXB1dF91bmFsaWduZWRfbGUzMihwa3RmbGFnLCAmaWVidWZbVk5EUl9JRV9QS1RGTEFHX09GRlNFVF0pOwogCiAJbWVtY3B5KCZpZWJ1ZltWTkRSX0lFX1ZTSUVfT0ZGU0VUXSwgaWVfcHRyLCBpZV9sZW4pOwogCkBAIC0zOTI0LDYgKzM5ODAsNyBAQAogCXN0cnVjdCBicmNtZl9jZmc4MDIxMV9pbmZvICpjZmcgPSB3aXBoeV90b19jZmcod2lwaHkpOwogCXN0cnVjdCBicmNtZl9pZiAqaWZwID0gbmV0ZGV2X3ByaXYobmRldik7CiAJY29uc3Qgc3RydWN0IGJyY21mX3RsdiAqc3NpZF9pZTsKKwljb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpjb3VudHJ5X2llOwogCXN0cnVjdCBicmNtZl9zc2lkX2xlIHNzaWRfbGU7CiAJczMyIGVyciA9IC1FUEVSTTsKIAljb25zdCBzdHJ1Y3QgYnJjbWZfdGx2ICpyc25faWU7CkBAIC0zOTMzLDYgKzM5OTAsNyBAQAogCXN0cnVjdCBicmNtZl9maWxfYnNzX2VuYWJsZV9sZSBic3NfZW5hYmxlOwogCXUxNiBjaGFuc3BlYzsKIAlib29sIG1ic3M7CisJaW50IGlzXzExZDsKIAogCWJyY21mX2RiZyhUUkFDRSwgImN0cmxjaG49JWQsIGNlbnRlcj0lZCwgYnc9JWQsIGJlYWNvbl9pbnRlcnZhbD0lZCwgZHRpbV9wZXJpb2Q9JWQsXG4iLAogCQkgIHNldHRpbmdzLT5jaGFuZGVmLmNoYW4tPmh3X3ZhbHVlLApAQCAtMzk0MSwxMCArMzk5OSwxNiBAQAogCWJyY21mX2RiZyhUUkFDRSwgInNzaWQ9JXMoJXp1KSwgYXV0aF90eXBlPSVkLCBpbmFjdGl2aXR5X3RpbWVvdXQ9JWRcbiIsCiAJCSAgc2V0dGluZ3MtPnNzaWQsIHNldHRpbmdzLT5zc2lkX2xlbiwgc2V0dGluZ3MtPmF1dGhfdHlwZSwKIAkJICBzZXR0aW5ncy0+aW5hY3Rpdml0eV90aW1lb3V0KTsKLQogCWRldl9yb2xlID0gaWZwLT52aWYtPndkZXYuaWZ0eXBlOwogCW1ic3MgPSBpZnAtPnZpZi0+bWJzczsKIAorCS8qIHN0b3JlIGN1cnJlbnQgMTFkIHNldHRpbmcgKi8KKwlicmNtZl9maWxfY21kX2ludF9nZXQoaWZwLCBCUkNNRl9DX0dFVF9SRUdVTEFUT1JZLCAmaWZwLT52aWYtPmlzXzExZCk7CisJY291bnRyeV9pZSA9IGJyY21mX3BhcnNlX3RsdnMoKHU4ICopc2V0dGluZ3MtPmJlYWNvbi50YWlsLAorCQkJCSAgICAgIHNldHRpbmdzLT5iZWFjb24udGFpbF9sZW4sCisJCQkJICAgICAgV0xBTl9FSURfQ09VTlRSWSk7CisJaXNfMTFkID0gY291bnRyeV9pZSA/IDEgOiAwOworCiAJbWVtc2V0KCZzc2lkX2xlLCAwLCBzaXplb2Yoc3NpZF9sZSkpOwogCWlmIChzZXR0aW5ncy0+c3NpZCA9PSBOVUxMIHx8IHNldHRpbmdzLT5zc2lkX2xlbiA9PSAwKSB7CiAJCWllX29mZnNldCA9IERPVDExX01HTVRfSERSX0xFTiArIERPVDExX0JDTl9QUkJfRklYRURfTEVOOwpAQCAtNDAxMCw2ICs0MDc0LDE0IEBACiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAorCQlpZiAoaXNfMTFkICE9IGlmcC0+dmlmLT5pc18xMWQpIHsKKwkJCWVyciA9IGJyY21mX2ZpbF9jbWRfaW50X3NldChpZnAsIEJSQ01GX0NfU0VUX1JFR1VMQVRPUlksCisJCQkJCQkgICAgaXNfMTFkKTsKKwkJCWlmIChlcnIgPCAwKSB7CisJCQkJYnJjbWZfZXJyKCJSZWd1bGF0b3J5IFNldCBFcnJvciwgJWRcbiIsIGVycik7CisJCQkJZ290byBleGl0OworCQkJfQorCQl9CiAJCWlmIChzZXR0aW5ncy0+YmVhY29uX2ludGVydmFsKSB7CiAJCQllcnIgPSBicmNtZl9maWxfY21kX2ludF9zZXQoaWZwLCBCUkNNRl9DX1NFVF9CQ05QUkQsCiAJCQkJCQkgICAgc2V0dGluZ3MtPmJlYWNvbl9pbnRlcnZhbCk7CkBAIC00MDQyLDYgKzQxMTQsMTAgQEAKIAkJCWJyY21mX2VycigiU0VUIElORlJBIGVycm9yICVkXG4iLCBlcnIpOwogCQkJZ290byBleGl0OwogCQl9CisJfSBlbHNlIGlmIChXQVJOX09OKGlzXzExZCAhPSBpZnAtPnZpZi0+aXNfMTFkKSkgeworCQkvKiBNdWx0aXBsZS1CU1Mgc2hvdWxkIHVzZSBzYW1lIDExZCBjb25maWd1cmF0aW9uICovCisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gZXhpdDsKIAl9CiAJaWYgKGRldl9yb2xlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CiAJCWlmICgoYnJjbWZfZmVhdF9pc19lbmFibGVkKGlmcCwgQlJDTUZfRkVBVF9NQlNTKSkgJiYgKCFtYnNzKSkKQEAgLTQwNTcsNiArNDEzMywxMCBAQAogCQkJYnJjbWZfZXJyKCJCUkNNRl9DX1VQIGVycm9yICglZClcbiIsIGVycik7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KKwkJLyogT24gRE9XTiB0aGUgZmlybXdhcmUgcmVtb3ZlcyB0aGUgV0VQIGtleXMsIHJlY29uZmlndXJlCisJCSAqIHRoZW0gaWYgdGhleSB3ZXJlIHNldC4KKwkJICovCisJCWJyY21mX2NmZzgwMjExX3JlY29uZmlndXJlX3dlcChpZnApOwogCiAJCW1lbXNldCgmam9pbl9wYXJhbXMsIDAsIHNpemVvZihqb2luX3BhcmFtcykpOwogCQkvKiBqb2luIHBhcmFtZXRlcnMgc3RhcnRzIHdpdGggc3NpZCAqLwpAQCAtNDEzMyw2ICs0MjEzLDExIEBACiAJCQlicmNtZl9lcnIoInNldHRpbmcgSU5GUkEgbW9kZSBmYWlsZWQgJWRcbiIsIGVycik7CiAJCWlmIChicmNtZl9mZWF0X2lzX2VuYWJsZWQoaWZwLCBCUkNNRl9GRUFUX01CU1MpKQogCQkJYnJjbWZfZmlsX2lvdmFyX2ludF9zZXQoaWZwLCAibWJzcyIsIDApOworCQllcnIgPSBicmNtZl9maWxfY21kX2ludF9zZXQoaWZwLCBCUkNNRl9DX1NFVF9SRUdVTEFUT1JZLAorCQkJCQkgICAgaWZwLT52aWYtPmlzXzExZCk7CisJCWlmIChlcnIgPCAwKQorCQkJYnJjbWZfZXJyKCJyZXN0b3JpbmcgUkVHVUxBVE9SWSBzZXR0aW5nIGZhaWxlZCAlZFxuIiwKKwkJCQkgIGVycik7CiAJCS8qIEJyaW5nIGRldmljZSBiYWNrIHVwIHNvIGl0IGNhbiBiZSB1c2VkIGFnYWluICovCiAJCWVyciA9IGJyY21mX2ZpbF9jbWRfaW50X3NldChpZnAsIEJSQ01GX0NfVVAsIDEpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTQxOTcsNiArNDI4MiwzNCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQKK2JyY21mX2NmZzgwMjExX2NoYW5nZV9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAorCQkJICAgICAgY29uc3QgdTggKm1hYywgc3RydWN0IHN0YXRpb25fcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCBicmNtZl9pZiAqaWZwID0gbmV0ZGV2X3ByaXYobmRldik7CisJczMyIGVycjsKKworCWJyY21mX2RiZyhUUkFDRSwgIkVudGVyLCBNQUMgJXBNLCBtYXNrIDB4JTA0eCBzZXQgMHglMDR4XG4iLCBtYWMsCisJCSAgcGFyYW1zLT5zdGFfZmxhZ3NfbWFzaywgcGFyYW1zLT5zdGFfZmxhZ3Nfc2V0KTsKKworCS8qIElnbm9yZSBhbGwgMDAgTUFDICovCisJaWYgKGlzX3plcm9fZXRoZXJfYWRkcihtYWMpKQorCQlyZXR1cm4gMDsKKworCWlmICghKHBhcmFtcy0+c3RhX2ZsYWdzX21hc2sgJiBCSVQoTkw4MDIxMV9TVEFfRkxBR19BVVRIT1JJWkVEKSkpCisJCXJldHVybiAwOworCisJaWYgKHBhcmFtcy0+c3RhX2ZsYWdzX3NldCAmIEJJVChOTDgwMjExX1NUQV9GTEFHX0FVVEhPUklaRUQpKQorCQllcnIgPSBicmNtZl9maWxfY21kX2RhdGFfc2V0KGlmcCwgQlJDTUZfQ19TRVRfU0NCX0FVVEhPUklaRSwKKwkJCQkJICAgICAodm9pZCAqKW1hYywgRVRIX0FMRU4pOworCWVsc2UKKwkJZXJyID0gYnJjbWZfZmlsX2NtZF9kYXRhX3NldChpZnAsIEJSQ01GX0NfU0VUX1NDQl9ERUFVVEhPUklaRSwKKwkJCQkJICAgICAodm9pZCAqKW1hYywgRVRIX0FMRU4pOworCWlmIChlcnIgPCAwKQorCQlicmNtZl9lcnIoIlNldHRpbmcgU0NCIChkZS0pYXV0aG9yaXplIGZhaWxlZCwgJWRcbiIsIGVycik7CisKKwlyZXR1cm4gZXJyOworfQogCiBzdGF0aWMgdm9pZAogYnJjbWZfY2ZnODAyMTFfbWdtdF9mcmFtZV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LApAQCAtNDQ3MSw2ICs0NTg0LDcgQEAKIAkuc3RvcF9hcCA9IGJyY21mX2NmZzgwMjExX3N0b3BfYXAsCiAJLmNoYW5nZV9iZWFjb24gPSBicmNtZl9jZmc4MDIxMV9jaGFuZ2VfYmVhY29uLAogCS5kZWxfc3RhdGlvbiA9IGJyY21mX2NmZzgwMjExX2RlbF9zdGF0aW9uLAorCS5jaGFuZ2Vfc3RhdGlvbiA9IGJyY21mX2NmZzgwMjExX2NoYW5nZV9zdGF0aW9uLAogCS5zY2hlZF9zY2FuX3N0YXJ0ID0gYnJjbWZfY2ZnODAyMTFfc2NoZWRfc2Nhbl9zdGFydCwKIAkuc2NoZWRfc2Nhbl9zdG9wID0gYnJjbWZfY2ZnODAyMTFfc2NoZWRfc2Nhbl9zdG9wLAogCS5tZ210X2ZyYW1lX3JlZ2lzdGVyID0gYnJjbWZfY2ZnODAyMTFfbWdtdF9mcmFtZV9yZWdpc3RlciwKQEAgLTQ3NzgsNyArNDg5Miw2IEBACiAJaWYgKCgoZXZlbnQgPT0gQlJDTUZfRV9BU1NPQ19JTkQpIHx8IChldmVudCA9PSBCUkNNRl9FX1JFQVNTT0NfSU5EKSkgJiYKIAkgICAgKHJlYXNvbiA9PSBCUkNNRl9FX1NUQVRVU19TVUNDRVNTKSkgewogCQltZW1zZXQoJnNpbmZvLCAwLCBzaXplb2Yoc2luZm8pKTsKLQkJc2luZm8uZmlsbGVkID0gU1RBVElPTl9JTkZPX0FTU09DX1JFUV9JRVM7CiAJCWlmICghZGF0YSkgewogCQkJYnJjbWZfZXJyKCJObyBJRXMgcHJlc2VudCBpbiBBU1NPQy9SRUFTU09DX0lORCIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC00ODMzLDcgKzQ5NDYsNyBAQAogCQlpZiAoIWJyY21mX2lzX2lic3Ntb2RlKGlmcC0+dmlmKSkgewogCQkJYnJjbWZfYnNzX2Nvbm5lY3RfZG9uZShjZmcsIG5kZXYsIGUsIGZhbHNlKTsKIAkJfQotCQlicmNtZl9saW5rX2Rvd24oaWZwLT52aWYpOworCQlicmNtZl9saW5rX2Rvd24oaWZwLT52aWYsIGJyY21mX21hcF9md19saW5rZG93bl9yZWFzb24oZSkpOwogCQlicmNtZl9pbml0X3Byb2YobmRldl90b19wcm9mKG5kZXYpKTsKIAkJaWYgKG5kZXYgIT0gY2ZnX3RvX25kZXYoY2ZnKSkKIAkJCWNvbXBsZXRlKCZjZmctPnZpZl9kaXNhYmxlZCk7CkBAIC01Nzc0LDcgKzU4ODcsNyBAQAogCSAqIGZyb20gQVAgdG8gc2F2ZSBwb3dlcgogCSAqLwogCWlmIChjaGVja192aWZfdXAoaWZwLT52aWYpKSB7Ci0JCWJyY21mX2xpbmtfZG93bihpZnAtPnZpZik7CisJCWJyY21mX2xpbmtfZG93bihpZnAtPnZpZiwgV0xBTl9SRUFTT05fVU5TUEVDSUZJRUQpOwogCiAJCS8qIE1ha2Ugc3VyZSBXUEFfU3VwcGxpY2FudCByZWNlaXZlcyBhbGwgdGhlIGV2ZW50CiAJCSAgIGdlbmVyYXRlZCBkdWUgdG8gRElTQVNTT0MgY2FsbCB0byB0aGUgZncgdG8ga2VlcApAQCAtNTg3Niw2ICs1OTg5LDI5IEBACiAJCQkJICB2aWZfZXZlbnRfZXF1YWxzKGV2ZW50LCBhY3Rpb24pLCB0aW1lb3V0KTsKIH0KIAorc3RhdGljIHZvaWQgYnJjbWZfY2ZnODAyMTFfcmVnX25vdGlmaWVyKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfaW5mbyAqY2ZnID0gd2lwaHlfcHJpdih3aXBoeSk7CisJc3RydWN0IGJyY21mX2lmICppZnAgPSBuZXRkZXZfcHJpdihjZmdfdG9fbmRldihjZmcpKTsKKwlzdHJ1Y3QgYnJjbWZfZmlsX2NvdW50cnlfbGUgY2NyZXE7CisJaW50IGk7CisKKwlicmNtZl9kYmcoVFJBQ0UsICJlbnRlcjogaW5pdGlhdG9yPSVkLCBhbHBoYT0lYyVjXG4iLCByZXEtPmluaXRpYXRvciwKKwkJICByZXEtPmFscGhhMlswXSwgcmVxLT5hbHBoYTJbMV0pOworCisJLyogaWdub3JlIG5vbi1JU08zMTY2IGNvdW50cnkgY29kZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHJlcS0+YWxwaGEyKTsgaSsrKQorCQlpZiAocmVxLT5hbHBoYTJbaV0gPCAnQScgfHwgcmVxLT5hbHBoYTJbaV0gPiAnWicpIHsKKwkJCWJyY21mX2Vycigibm90IGEgSVNPMzE2NiBjb2RlXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCW1lbXNldCgmY2NyZXEsIDAsIHNpemVvZihjY3JlcSkpOworCWNjcmVxLnJldiA9IGNwdV90b19sZTMyKC0xKTsKKwltZW1jcHkoY2NyZXEuY2NvZGUsIHJlcS0+YWxwaGEyLCBzaXplb2YocmVxLT5hbHBoYTIpKTsKKwlicmNtZl9maWxfaW92YXJfZGF0YV9zZXQoaWZwLCAiY291bnRyeSIsICZjY3JlcSwgc2l6ZW9mKGNjcmVxKSk7Cit9CisKIHN0YXRpYyB2b2lkIGJyY21mX2ZyZWVfd2lwaHkoc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKIAlrZnJlZSh3aXBoeS0+aWZhY2VfY29tYmluYXRpb25zKTsKQEAgLTU5NTIsNiArNjA4OCw3IEBACiAJCWdvdG8gcHJpdl9vdXQ7CiAKIAlicmNtZl9kYmcoSU5GTywgIlJlZ2lzdGVyaW5nIGN1c3RvbSByZWd1bGF0b3J5XG4iKTsKKwl3aXBoeS0+cmVnX25vdGlmaWVyID0gYnJjbWZfY2ZnODAyMTFfcmVnX25vdGlmaWVyOwogCXdpcGh5LT5yZWd1bGF0b3J5X2ZsYWdzIHw9IFJFR1VMQVRPUllfQ1VTVE9NX1JFRzsKIAl3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeSh3aXBoeSwgJmJyY21mX3JlZ2RvbSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9jZmc4MDIxMS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmgKaW5kZXggOWU5OGI4ZC4uZDllNmQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2NmZzgwMjExLmgKQEAgLTc1LDYgKzc1LDggQEAKIAogI2RlZmluZSBCUkNNRl9WTkRSX0lFX1AyUEFGX1NISUZUCTEyCiAKKyNkZWZpbmUgQlJDTUZfTUFYX0RFRkFVTFRfS0VZUwkJNAorCiAKIC8qKgogICogZW51bSBicmNtZl9zY2FuX3N0YXR1cyAtIHNjYW4gZW5naW5lIHN0YXR1cwpAQCAtMTI1LDExICsxMjcsMTMgQEAKICAqIEBzc2lkOiBzc2lkIG9mIGFzc29jaWF0ZWQvYXNzb2NpYXRpbmcgYXAuCiAgKiBAYnNzaWQ6IGJzc2lkIG9mIGpvaW5lZC9qb2luaW5nIGlic3MuCiAgKiBAc2VjOiBzZWN1cml0eSBpbmZvcm1hdGlvbi4KKyAqIEBrZXk6IGtleSBpbmZvcm1hdGlvbgogICovCiBzdHJ1Y3QgYnJjbWZfY2ZnODAyMTFfcHJvZmlsZSB7CiAJc3RydWN0IGJyY21mX3NzaWQgc3NpZDsKIAl1OCBic3NpZFtFVEhfQUxFTl07CiAJc3RydWN0IGJyY21mX2NmZzgwMjExX3NlY3VyaXR5IHNlYzsKKwlzdHJ1Y3QgYnJjbWZfd3NlY19rZXkga2V5W0JSQ01GX01BWF9ERUZBVUxUX0tFWVNdOwogfTsKIAogLyoqCkBAIC0xOTYsNiArMjAwLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJdTE2IG1nbXRfcnhfcmVnOwogCWJvb2wgbWJzczsKKwlpbnQgaXNfMTFkOwogfTsKIAogLyogYXNzb2NpYXRpb24gaW5mb3JtICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvY2hpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2NoaXAuYwppbmRleCBkZGFlMGI1Li4wNGQyY2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvY2hpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9jaGlwLmMKQEAgLTEwMSwxNCArMTAxLDcgQEAKIC8qIEFSTSBDb3J0ZXggTTMgY29yZSwgSUQgMHg4MmEgKi8KICNkZWZpbmUgQkNNNDMyOV9DT1JFX0FSTV9CQVNFCQkweDE4MDAyMDAwCiAjZGVmaW5lIEJDTTQzMjlfUkFNU0laRQkJCTB4NDgwMDAKLQogLyogYmNtNDMxNDMgKi8KLS8qIFNESU8gZGV2aWNlIGNvcmUgKi8KLSNkZWZpbmUgQkNNNDMxNDNfQ09SRV9CVVNfQkFTRQkJMHgxODAwMjAwMAotLyogaW50ZXJuYWwgbWVtb3J5IGNvcmUgKi8KLSNkZWZpbmUgQkNNNDMxNDNfQ09SRV9TT0NSQU1fQkFTRQkweDE4MDA0MDAwCi0vKiBBUk0gQ29ydGV4IE0zIGNvcmUsIElEIDB4ODJhICovCi0jZGVmaW5lIEJDTTQzMTQzX0NPUkVfQVJNX0JBU0UJCTB4MTgwMDMwMDAKICNkZWZpbmUgQkNNNDMxNDNfUkFNU0laRQkJMHg3MDAwMAogCiAjZGVmaW5lIENPUkVfU0IoYmFzZSwgZmllbGQpIFwKQEAgLTE2NCwxMyArMTU3LDYgQEAKIAlzdHJ1Y3QgYnJjbWZfY2hpcF9wcml2ICpjaGlwOwogfTsKIAotLyogQVJNIENSNCBjb3JlIHNwZWNpZmljIGNvbnRyb2wgZmxhZyBiaXRzICovCi0jZGVmaW5lIEFSTUNSNF9CQ01BX0lPQ1RMX0NQVUhBTFQJMHgwMDIwCi0KLS8qIEQxMSBjb3JlIHNwZWNpZmljIGNvbnRyb2wgZmxhZyBiaXRzICovCi0jZGVmaW5lIEQxMV9CQ01BX0lPQ1RMX1BIWUNMT0NLRU4JMHgwMDA0Ci0jZGVmaW5lIEQxMV9CQ01BX0lPQ1RMX1BIWVJFU0VUCQkweDAwMDgKLQogc3RydWN0IGJyY21mX2NoaXBfcHJpdiB7CiAJc3RydWN0IGJyY21mX2NoaXAgcHViOwogCWNvbnN0IHN0cnVjdCBicmNtZl9idXNjb3JlX29wcyAqb3BzOwpAQCAtNDk1LDYgKzQ4MSw3IEBACiAJCWNpLT5wdWIucmFtc2l6ZSA9IDB4NDgwMDA7CiAJCWJyZWFrOwogCWNhc2UgQlJDTV9DQ180MzM0X0NISVBfSUQ6CisJY2FzZSBCUkNNX0NDXzQzMzQwX0NISVBfSUQ6CiAJCWNpLT5wdWIucmFtc2l6ZSA9IDB4ODAwMDA7CiAJCWJyZWFrOwogCWNhc2UgQlJDTV9DQ180MzM1X0NISVBfSUQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9uLmMKaW5kZXggMTg2MWExMy4uZmU1NDg0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uYwpAQCAtMjUsNiArMjUsOSBAQAogI2luY2x1ZGUgImZ3aWwuaCIKICNpbmNsdWRlICJmd2lsX3R5cGVzLmgiCiAjaW5jbHVkZSAidHJhY2Vwb2ludC5oIgorI2luY2x1ZGUgImNvbW1vbi5oIgorCitjb25zdCB1OCBBTExGRk1BQ1tFVEhfQUxFTl0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKIAogI2RlZmluZSBCUkNNRl9ERUZBVUxUX0JDTl9USU1FT1VUCTMKICNkZWZpbmUgQlJDTUZfREVGQVVMVF9TQ0FOX0NIQU5ORUxfVElNRQk0MApAQCAtMzgsNiArNDEsOCBAQAogCXM4IGV2ZW50bWFza1tCUkNNRl9FVkVOVElOR19NQVNLX0xFTl07CiAJdTggYnVmW0JSQ01GX0RDTURfU01MRU5dOwogCXN0cnVjdCBicmNtZl9qb2luX3ByZWZfcGFyYW1zIGpvaW5fcHJlZl9wYXJhbXNbMl07CisJc3RydWN0IGJyY21mX3Jldl9pbmZvX2xlIHJldmluZm87CisJc3RydWN0IGJyY21mX3Jldl9pbmZvICpyaTsKIAljaGFyICpwdHI7CiAJczMyIGVycjsKIApAQCAtNDUsMTIgKzUwLDM3IEBACiAJZXJyID0gYnJjbWZfZmlsX2lvdmFyX2RhdGFfZ2V0KGlmcCwgImN1cl9ldGhlcmFkZHIiLCBpZnAtPm1hY19hZGRyLAogCQkJCSAgICAgICBzaXplb2YoaWZwLT5tYWNfYWRkcikpOwogCWlmIChlcnIgPCAwKSB7Ci0JCWJyY21mX2VycigiUmV0cmVpdmluZyBjdXJfZXRoZXJhZGRyIGZhaWxlZCwgJWRcbiIsCi0JCQkgIGVycik7CisJCWJyY21mX2VycigiUmV0cmVpdmluZyBjdXJfZXRoZXJhZGRyIGZhaWxlZCwgJWRcbiIsIGVycik7CiAJCWdvdG8gZG9uZTsKIAl9CiAJbWVtY3B5KGlmcC0+ZHJ2ci0+bWFjLCBpZnAtPm1hY19hZGRyLCBzaXplb2YoaWZwLT5kcnZyLT5tYWMpKTsKIAorCWVyciA9IGJyY21mX2ZpbF9jbWRfZGF0YV9nZXQoaWZwLCBCUkNNRl9DX0dFVF9SRVZJTkZPLAorCQkJCSAgICAgJnJldmluZm8sIHNpemVvZihyZXZpbmZvKSk7CisJcmkgPSAmaWZwLT5kcnZyLT5yZXZpbmZvOworCWlmIChlcnIgPCAwKSB7CisJCWJyY21mX2VycigicmV0cmlldmluZyByZXZpc2lvbiBpbmZvIGZhaWxlZCwgJWRcbiIsIGVycik7CisJfSBlbHNlIHsKKwkJcmktPnZlbmRvcmlkID0gbGUzMl90b19jcHUocmV2aW5mby52ZW5kb3JpZCk7CisJCXJpLT5kZXZpY2VpZCA9IGxlMzJfdG9fY3B1KHJldmluZm8uZGV2aWNlaWQpOworCQlyaS0+cmFkaW9yZXYgPSBsZTMyX3RvX2NwdShyZXZpbmZvLnJhZGlvcmV2KTsKKwkJcmktPmNoaXByZXYgPSBsZTMyX3RvX2NwdShyZXZpbmZvLmNoaXByZXYpOworCQlyaS0+Y29yZXJldiA9IGxlMzJfdG9fY3B1KHJldmluZm8uY29yZXJldik7CisJCXJpLT5ib2FyZGlkID0gbGUzMl90b19jcHUocmV2aW5mby5ib2FyZGlkKTsKKwkJcmktPmJvYXJkdmVuZG9yID0gbGUzMl90b19jcHUocmV2aW5mby5ib2FyZHZlbmRvcik7CisJCXJpLT5ib2FyZHJldiA9IGxlMzJfdG9fY3B1KHJldmluZm8uYm9hcmRyZXYpOworCQlyaS0+ZHJpdmVycmV2ID0gbGUzMl90b19jcHUocmV2aW5mby5kcml2ZXJyZXYpOworCQlyaS0+dWNvZGVyZXYgPSBsZTMyX3RvX2NwdShyZXZpbmZvLnVjb2RlcmV2KTsKKwkJcmktPmJ1cyA9IGxlMzJfdG9fY3B1KHJldmluZm8uYnVzKTsKKwkJcmktPmNoaXBudW0gPSBsZTMyX3RvX2NwdShyZXZpbmZvLmNoaXBudW0pOworCQlyaS0+cGh5dHlwZSA9IGxlMzJfdG9fY3B1KHJldmluZm8ucGh5dHlwZSk7CisJCXJpLT5waHlyZXYgPSBsZTMyX3RvX2NwdShyZXZpbmZvLnBoeXJldik7CisJCXJpLT5hbmFyZXYgPSBsZTMyX3RvX2NwdShyZXZpbmZvLmFuYXJldik7CisJCXJpLT5jaGlwcGtnID0gbGUzMl90b19jcHUocmV2aW5mby5jaGlwcGtnKTsKKwkJcmktPm52cmFtcmV2ID0gbGUzMl90b19jcHUocmV2aW5mby5udnJhbXJldik7CisJfQorCXJpLT5yZXN1bHQgPSBlcnI7CisKIAkvKiBxdWVyeSBmb3IgJ3ZlcicgdG8gZ2V0IHZlcnNpb24gaW5mbyBmcm9tIGZpcm13YXJlICovCiAJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOwogCXN0cmNweShidWYsICJ2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDM5ZDgwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbi5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxNCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorICogU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OCisgKiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisjaWZuZGVmIEJSQ01GTUFDX0NPTU1PTl9ICisjZGVmaW5lIEJSQ01GTUFDX0NPTU1PTl9ICisKK2V4dGVybiBjb25zdCB1OCBBTExGRk1BQ1tFVEhfQUxFTl07CisKKyNlbmRpZiAvKiBCUkNNRk1BQ19DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbnJpbmcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9jb21tb25yaW5nLmgKaW5kZXggMDAyMzM2ZS4uM2Q0MDQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2NvbW1vbnJpbmcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvY29tbW9ucmluZy5oCkBAIC0zNyw2ICszNyw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlib29sIGluaXRlZDsKIAlib29sIHdhc19mdWxsOworCisJYXRvbWljX3Qgb3V0c3RhbmRpbmdfdHg7CiB9OwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5jCmluZGV4IGVmZmU2ZDcuLjJkNmUyY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJYnJjbWZfZGJnKERBVEEsICJFbnRlciwgaWR4PSVkXG4iLCBpZnAtPmJzc2lkeCk7CiAKIAkvKiBDYW4gdGhlIGRldmljZSBzZW5kIGRhdGE/ICovCi0JaWYgKGRydnItPmJ1c19pZi0+c3RhdGUgIT0gQlJDTUZfQlVTX0RBVEEpIHsKKwlpZiAoZHJ2ci0+YnVzX2lmLT5zdGF0ZSAhPSBCUkNNRl9CVVNfVVApIHsKIAkJYnJjbWZfZXJyKCJ4bWl0IHJlamVjdGVkIHN0YXRlPSVkXG4iLCBkcnZyLT5idXNfaWYtPnN0YXRlKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtNjAxLDkgKzYwMSwxMiBAQAogewogCXN0cnVjdCBicmNtZl9pZiAqaWZwID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGlmcC0+ZHJ2cjsKKwljaGFyIGRyZXZbQlJDTVVfRE9UUkVWX0xFTl0gPSAibi9hIjsKIAorCWlmIChkcnZyLT5yZXZpbmZvLnJlc3VsdCA9PSAwKQorCQlicmNtdV9kb3RyZXZfc3RyKGRydnItPnJldmluZm8uZHJpdmVycmV2LCBkcmV2KTsKIAlzdHJsY3B5KGluZm8tPmRyaXZlciwgS0JVSUxEX01PRE5BTUUsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKLQlzbnByaW50ZihpbmZvLT52ZXJzaW9uLCBzaXplb2YoaW5mby0+dmVyc2lvbiksICJuL2EiKTsKKwlzdHJsY3B5KGluZm8tPnZlcnNpb24sIGRyZXYsIHNpemVvZihpbmZvLT52ZXJzaW9uKSk7CiAJc3RybGNweShpbmZvLT5md192ZXJzaW9uLCBkcnZyLT5md3Zlciwgc2l6ZW9mKGluZm8tPmZ3X3ZlcnNpb24pKTsKIAlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBkZXZfbmFtZShkcnZyLT5idXNfaWYtPmRldiksCiAJCXNpemVvZihpbmZvLT5idXNfaW5mbykpOwpAQCAtNjM3LDcgKzY0MCw3IEBACiAJYnJjbWZfZGJnKFRSQUNFLCAiRW50ZXIsIGlkeD0lZFxuIiwgaWZwLT5ic3NpZHgpOwogCiAJLyogSWYgYnVzIGlzIG5vdCByZWFkeSwgY2FuJ3QgY29udGludWUgKi8KLQlpZiAoYnVzX2lmLT5zdGF0ZSAhPSBCUkNNRl9CVVNfREFUQSkgeworCWlmIChidXNfaWYtPnN0YXRlICE9IEJSQ01GX0JVU19VUCkgewogCQlicmNtZl9lcnIoImZhaWxlZCBidXMgaXMgbm90IHJlYWR5XG4iKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQpAQCAtOTY0LDEzICs5NjcsMjAgQEAKIAkJcDJwX2lmcCA9IE5VTEw7CiAKIAkvKiBzaWduYWwgYnVzIHJlYWR5ICovCi0JYnJjbWZfYnVzX2NoYW5nZV9zdGF0ZShidXNfaWYsIEJSQ01GX0JVU19EQVRBKTsKKwlicmNtZl9idXNfY2hhbmdlX3N0YXRlKGJ1c19pZiwgQlJDTUZfQlVTX1VQKTsKIAogCS8qIEJ1cyBpcyByZWFkeSwgZG8gYW55IGluaXRpYWxpemF0aW9uICovCiAJcmV0ID0gYnJjbWZfY19wcmVpbml0X2RjbWRzKGlmcCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZmFpbDsKIAorCS8qIGFzc3VyZSB3ZSBoYXZlIGNoaXBpZCBiZWZvcmUgZmVhdHVyZSBhdHRhY2ggKi8KKwlpZiAoIWJ1c19pZi0+Y2hpcCkgeworCQlidXNfaWYtPmNoaXAgPSBkcnZyLT5yZXZpbmZvLmNoaXBudW07CisJCWJ1c19pZi0+Y2hpcHJldiA9IGRydnItPnJldmluZm8uY2hpcHJldjsKKwkJYnJjbWZfZGJnKElORk8sICJmaXJtd2FyZSByZXZpbmZvOiBjaGlwICV4ICglZCkgcmV2ICVkXG4iLAorCQkJICBidXNfaWYtPmNoaXAsIGJ1c19pZi0+Y2hpcCwgYnVzX2lmLT5jaGlwcmV2KTsKKwl9CiAJYnJjbWZfZmVhdF9hdHRhY2goZHJ2cik7CiAKIAlyZXQgPSBicmNtZl9md3NfaW5pdChkcnZyKTsKQEAgLTEwOTMsOSArMTEwMyw4IEBACiAJcmV0dXJuIGF0b21pY19yZWFkKCZpZnAtPnBlbmRfODAyMXhfY250KTsKIH0KIAotaW50IGJyY21mX25ldGRldl93YWl0X3BlbmQ4MDIxeChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK2ludCBicmNtZl9uZXRkZXZfd2FpdF9wZW5kODAyMXgoc3RydWN0IGJyY21mX2lmICppZnApCiB7Ci0Jc3RydWN0IGJyY21mX2lmICppZnAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlpbnQgZXJyOwogCiAJZXJyID0gd2FpdF9ldmVudF90aW1lb3V0KGlmcC0+cGVuZF84MDIxeF93YWl0LApAQCAtMTEwNyw2ICsxMTE2LDI3IEBACiAJcmV0dXJuICFlcnI7CiB9CiAKK3ZvaWQgYnJjbWZfYnVzX2NoYW5nZV9zdGF0ZShzdHJ1Y3QgYnJjbWZfYnVzICpidXMsIGVudW0gYnJjbWZfYnVzX3N0YXRlIHN0YXRlKQoreworCXN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBidXMtPmRydnI7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CisJaW50IGlmaWR4OworCisJYnJjbWZfZGJnKFRSQUNFLCAiJWQgLT4gJWRcbiIsIGJ1cy0+c3RhdGUsIHN0YXRlKTsKKwlidXMtPnN0YXRlID0gc3RhdGU7CisKKwlpZiAoc3RhdGUgPT0gQlJDTUZfQlVTX1VQKSB7CisJCWZvciAoaWZpZHggPSAwOyBpZmlkeCA8IEJSQ01GX01BWF9JRlM7IGlmaWR4KyspIHsKKwkJCWlmICgoZHJ2ci0+aWZsaXN0W2lmaWR4XSkgJiYKKwkJCSAgICAoZHJ2ci0+aWZsaXN0W2lmaWR4XS0+bmRldikpIHsKKwkJCQluZGV2ID0gZHJ2ci0+aWZsaXN0W2lmaWR4XS0+bmRldjsKKwkJCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChuZGV2KSkKKwkJCQkJbmV0aWZfd2FrZV9xdWV1ZShuZGV2KTsKKwkJCX0KKwkJfQorCX0KK30KKwogc3RhdGljIHZvaWQgYnJjbWZfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKICNpZmRlZiBDT05GSUdfQlJDTUZNQUNfU0RJTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9jb3JlLmgKaW5kZXggMjNmNzRiMS4uZmQ3NGE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2NvcmUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvY29yZS5oCkBAIC0yOSw4ICsyOSw2IEBACiAvKiBGb3Igc3VwcG9ydGluZyBtdWx0aXBsZSBpbnRlcmZhY2VzICovCiAjZGVmaW5lIEJSQ01GX01BWF9JRlMJMTYKIAotI2RlZmluZSBET1QxMV9NQVhfREVGQVVMVF9LRVlTCTQKLQogLyogU21hbGwsIG1lZGl1bSBhbmQgbWF4aW11bSBidWZmZXIgc2l6ZSBmb3IgZGNtZAogICovCiAjZGVmaW5lIEJSQ01GX0RDTURfU01MRU4JMjU2CkBAIC03Myw2ICs3MSwzNSBAQAogc3RydWN0IGJyY21mX2NmZzgwMjExX2RldjsgLyogY2ZnODAyMTEgZGV2aWNlIGluZm8gKi8KIHN0cnVjdCBicmNtZl9md3NfaW5mbzsgLyogZmlybXdhcmUgc2lnbmFsbGluZyBpbmZvICovCiAKKy8qCisgKiBzdHJ1Y3QgYnJjbWZfcmV2X2luZm8KKyAqCisgKiBUaGUgcmVzdWx0IGZpZWxkIHN0b3JlcyB0aGUgZXJyb3IgY29kZSBvZiB0aGUKKyAqIHJldmlzaW9uIGluZm8gcmVxdWVzdCBmcm9tIGZpcm13YXJlLiBGb3IgdGhlCisgKiBvdGhlciBmaWVsZHMgc2VlIHN0cnVjdCBicmNtZl9yZXZfaW5mb19sZSBpbgorICogZndpbF90eXBlcy5oCisgKi8KK3N0cnVjdCBicmNtZl9yZXZfaW5mbyB7CisJaW50IHJlc3VsdDsKKwl1MzIgdmVuZG9yaWQ7CisJdTMyIGRldmljZWlkOworCXUzMiByYWRpb3JldjsKKwl1MzIgY2hpcHJldjsKKwl1MzIgY29yZXJldjsKKwl1MzIgYm9hcmRpZDsKKwl1MzIgYm9hcmR2ZW5kb3I7CisJdTMyIGJvYXJkcmV2OworCXUzMiBkcml2ZXJyZXY7CisJdTMyIHVjb2RlcmV2OworCXUzMiBidXM7CisJdTMyIGNoaXBudW07CisJdTMyIHBoeXR5cGU7CisJdTMyIHBoeXJldjsKKwl1MzIgYW5hcmV2OworCXUzMiBjaGlwcGtnOworCXUzMiBudnJhbXJldjsKK307CisKIC8qIENvbW1vbiBzdHJ1Y3R1cmUgZm9yIG1vZHVsZSBhbmQgaW5zdGFuY2UgbGlua2FnZSAqLwogc3RydWN0IGJyY21mX3B1YiB7CiAJLyogTGlua2FnZSBwb250ZXJzICovCkBAIC0xMDYsNiArMTMzLDcgQEAKIAl1MzIgZmVhdF9mbGFnczsKIAl1MzIgY2hpcF9xdWlya3M7CiAKKwlzdHJ1Y3QgYnJjbWZfcmV2X2luZm8gcmV2aW5mbzsKICNpZmRlZiBERUJVRwogCXN0cnVjdCBkZW50cnkgKmRiZ2ZzX2RpcjsKICNlbmRpZgpAQCAtMTY3LDcgKzE5NSw3IEBACiAJdTggKnJlb3JkZXI7CiB9OwogCi1pbnQgYnJjbWZfbmV0ZGV2X3dhaXRfcGVuZDgwMjF4KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKK2ludCBicmNtZl9uZXRkZXZfd2FpdF9wZW5kODAyMXgoc3RydWN0IGJyY21mX2lmICppZnApOwogCiAvKiBSZXR1cm4gcG9pbnRlciB0byBpbnRlcmZhY2UgbmFtZSAqLwogY2hhciAqYnJjbWZfaWZuYW1lKHN0cnVjdCBicmNtZl9wdWIgKmRydnIsIGludCBpZHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2Zpcm13YXJlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvZmlybXdhcmUuYwppbmRleCAxZmY3ODdkLi45Y2I5OTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvZmlybXdhcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvZmlybXdhcmUuYwpAQCAtMTAzLDcgKzEwMywxMSBAQAogCiAJYyA9IG52cC0+Zndudi0+ZGF0YVtudnAtPnBvc107CiAJaWYgKGMgPT0gJz0nKSB7Ci0JCXN0ID0gVkFMVUU7CisJCS8qIGlnbm9yZSBSQVcxIGJ5IHRyZWF0aW5nIGFzIGNvbW1lbnQgKi8KKwkJaWYgKHN0cm5jbXAoJm52cC0+Zndudi0+ZGF0YVtudnAtPmVudHJ5XSwgIlJBVzEiLCA0KSA9PSAwKQorCQkJc3QgPSBDT01NRU5UOworCQllbHNlCisJCQlzdCA9IFZBTFVFOwogCX0gZWxzZSBpZiAoIWlzX252cmFtX2NoYXIoYykpIHsKIAkJYnJjbWZfZGJnKElORk8sICJ3YXJuaW5nOiBsbj0lZDpjb2w9JWQ6ICc9JyBleHBlY3RlZCwgc2tpcCBpbnZhbGlkIGtleSBlbnRyeVxuIiwKIAkJCSAgbnZwLT5saW5lLCBudnAtPmNvbHVtbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvZmxvd3JpbmcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jCmluZGV4IDQ0ZjNhODQuLjkxMGZiYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9mbG93cmluZy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAicHJvdG8uaCIKICNpbmNsdWRlICJmbG93cmluZy5oIgogI2luY2x1ZGUgIm1zZ2J1Zi5oIgorI2luY2x1ZGUgImNvbW1vbi5oIgogCiAKICNkZWZpbmUgQlJDTUZfRkxPV1JJTkdfSElHSAkJMTAyNApAQCAtMzQsOSArMzUsNiBAQAogI2RlZmluZSBCUkNNRl9GTE9XUklOR19IQVNIX0FQKGRhLCBmaWZvLCBpZmlkeCkgKGRhWzVdICsgZmlmbyArIGlmaWR4ICogMTYpCiAjZGVmaW5lIEJSQ01GX0ZMT1dSSU5HX0hBU0hfU1RBKGZpZm8sIGlmaWR4KSAoZmlmbyArIGlmaWR4ICogMTYpCiAKLXN0YXRpYyBjb25zdCB1OCBBTExaRVJPTUFDW0VUSF9BTEVOXSA9IHsgMCwgMCwgMCwgMCwgMCwgMCB9Owotc3RhdGljIGNvbnN0IHU4IEFMTEZGTUFDW0VUSF9BTEVOXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwotCiBzdGF0aWMgY29uc3QgdTggYnJjbWZfZmxvd3JpbmdfcHJpbzJmaWZvW10gPSB7CiAJMSwKIAkwLApAQCAtMTM3LDcgKzEzNSw3IEBACiAJaGFzaCA9IGZsb3ctPmhhc2g7CiAJZm9yIChpID0gMDsgaSA8IEJSQ01GX0ZMT1dSSU5HX0hBU0hTSVpFOyBpKyspIHsKIAkJaWYgKChoYXNoW2hhc2hfaWR4XS5pZmlkeCA9PSBCUkNNRl9GTE9XUklOR19JTlZBTElEX0lGSURYKSAmJgotCQkgICAgKG1lbWNtcChoYXNoW2hhc2hfaWR4XS5tYWMsIEFMTFpFUk9NQUMsIEVUSF9BTEVOKSA9PSAwKSkgeworCQkgICAgKGlzX3plcm9fZXRoZXJfYWRkcihoYXNoW2hhc2hfaWR4XS5tYWMpKSkgewogCQkJZm91bmQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5jCmluZGV4IDAzZjJjNDAuLmRjZmEwYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAJc3RydWN0IGJyY21mX3B1YiAqZHJ2ciA9IGlmcC0+ZHJ2cjsKIAlzMzIgZXJyOwogCi0JaWYgKGRydnItPmJ1c19pZi0+c3RhdGUgIT0gQlJDTUZfQlVTX0RBVEEpIHsKKwlpZiAoZHJ2ci0+YnVzX2lmLT5zdGF0ZSAhPSBCUkNNRl9CVVNfVVApIHsKIAkJYnJjbWZfZXJyKCJidXMgaXMgZG93bi4gd2UgaGF2ZSBub3RoaW5nIHRvIGRvLlxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvZndpbC5oCmluZGV4IGEzMGJlNjguLjU0MzRkY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9md2lsLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2Z3aWwuaApAQCAtNDMsNiArNDMsOCBAQAogI2RlZmluZSBCUkNNRl9DX1NFVF9SQURJTwkJCTM4CiAjZGVmaW5lIEJSQ01GX0NfR0VUX1BIWVRZUEUJCQkzOQogI2RlZmluZSBCUkNNRl9DX1NFVF9LRVkJCQkJNDUKKyNkZWZpbmUgQlJDTUZfQ19HRVRfUkVHVUxBVE9SWQkJCTQ2CisjZGVmaW5lIEJSQ01GX0NfU0VUX1JFR1VMQVRPUlkJCQk0NwogI2RlZmluZSBCUkNNRl9DX1NFVF9QQVNTSVZFX1NDQU4JCTQ5CiAjZGVmaW5lIEJSQ01GX0NfU0NBTgkJCQk1MAogI2RlZmluZSBCUkNNRl9DX1NDQU5fUkVTVUxUUwkJCTUxCkBAIC01Nyw5ICs1OSwxMiBAQAogI2RlZmluZSBCUkNNRl9DX1NFVF9DT1VOVFJZCQkJODQKICNkZWZpbmUgQlJDTUZfQ19HRVRfUE0JCQkJODUKICNkZWZpbmUgQlJDTUZfQ19TRVRfUE0JCQkJODYKKyNkZWZpbmUgQlJDTUZfQ19HRVRfUkVWSU5GTwkJCTk4CiAjZGVmaW5lIEJSQ01GX0NfR0VUX0NVUlJfUkFURVNFVAkJMTE0CiAjZGVmaW5lIEJSQ01GX0NfR0VUX0FQCQkJCTExNwogI2RlZmluZSBCUkNNRl9DX1NFVF9BUAkJCQkxMTgKKyNkZWZpbmUgQlJDTUZfQ19TRVRfU0NCX0FVVEhPUklaRQkJMTIxCisjZGVmaW5lIEJSQ01GX0NfU0VUX1NDQl9ERUFVVEhPUklaRQkJMTIyCiAjZGVmaW5lIEJSQ01GX0NfR0VUX1JTU0kJCQkxMjcKICNkZWZpbmUgQlJDTUZfQ19HRVRfV1NFQwkJCTEzMwogI2RlZmluZSBCUkNNRl9DX1NFVF9XU0VDCQkJMTM0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvZndpbF90eXBlcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL2Z3aWxfdHlwZXMuaAppbmRleCA1MDg5MWMwLi4zNzQ5MjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvZndpbF90eXBlcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9md2lsX3R5cGVzLmgKQEAgLTExMiw2ICsxMTIsNyBAQAogI2RlZmluZSBCUkNNRl9XT1dMX01BWFBBVFRFUk5TCQk4CiAjZGVmaW5lIEJSQ01GX1dPV0xfTUFYUEFUVEVSTlNJWkUJMTI4CiAKKyNkZWZpbmUgQlJDTUZfQ09VTlRSWV9CVUZfU1oJCTQKIAogLyogam9pbiBwcmVmZXJlbmNlIHR5cGVzIGZvciBqb2luX3ByZWYgaW92YXIgKi8KIGVudW0gYnJjbWZfam9pbl9wcmVmX3R5cGVzIHsKQEAgLTUyNSw0ICs1MjYsNTggQEAKIAl1bnNpZ25lZCBjaGFyIFNTSURbMzJdOwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgYnJjbWZfZmlsX2NvdW50cnlfbGUgLSBjb3VudHJ5IGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlLgorICoKKyAqIEBjb3VudHJ5X2FiYnJldjogbnVsbC10ZXJtaW5hdGVkIGNvdW50cnkgY29kZSB1c2VkIGluIHRoZSBjb3VudHJ5IElFLgorICogQHJldjogcmV2aXNpb24gc3BlY2lmaWVyIGZvciBjY29kZS4gb24gc2V0LCAtMSBpbmRpY2F0ZXMgdW5zcGVjaWZpZWQuCisgKiBAY2NvZGU6IG51bGwtdGVybWluYXRlZCBidWlsdC1pbiBjb3VudHJ5IGNvZGUuCisgKi8KK3N0cnVjdCBicmNtZl9maWxfY291bnRyeV9sZSB7CisJY2hhciBjb3VudHJ5X2FiYnJldltCUkNNRl9DT1VOVFJZX0JVRl9TWl07CisJX19sZTMyIHJldjsKKwljaGFyIGNjb2RlW0JSQ01GX0NPVU5UUllfQlVGX1NaXTsKK307CisKKy8qKgorICogc3RydWN0IGJyY21mX3Jldl9pbmZvX2xlIC0gZGV2aWNlIHJldmlzaW9uIGluZm8uCisgKgorICogQHZlbmRvcmlkOiBQQ0kgdmVuZG9yIGlkLgorICogQGRldmljZWlkOiBkZXZpY2UgaWQgb2YgY2hpcC4KKyAqIEByYWRpb3JldjogcmFkaW8gcmV2aXNpb24uCisgKiBAY2hpcHJldjogY2hpcCByZXZpc2lvbi4KKyAqIEBjb3JlcmV2OiBjb3JlIHJldmlzaW9uLgorICogQGJvYXJkaWQ6IGJvYXJkIGlkZW50aWZpZXIgKHVzdS4gUENJIHN1Yi1kZXZpY2UgaWQpLgorICogQGJvYXJkdmVuZG9yOiBib2FyZCB2ZW5kb3IgKHVzdS4gUENJIHN1Yi12ZW5kb3IgaWQpLgorICogQGJvYXJkcmV2OiBib2FyZCByZXZpc2lvbi4KKyAqIEBkcml2ZXJyZXY6IGRyaXZlciB2ZXJzaW9uLgorICogQHVjb2RlcmV2OiBtaWNyb2NvZGUgdmVyc2lvbi4KKyAqIEBidXM6IGJ1cyB0eXBlLgorICogQGNoaXBudW06IGNoaXAgbnVtYmVyLgorICogQHBoeXR5cGU6IHBoeSB0eXBlLgorICogQHBoeXJldjogcGh5IHJldmlzaW9uLgorICogQGFuYXJldjogYW5hY29yZSByZXYuCisgKiBAY2hpcHBrZzogY2hpcCBwYWNrYWdlIGluZm8uCisgKiBAbnZyYW1yZXY6IG52cmFtIHJldmlzaW9uIG51bWJlci4KKyAqLworc3RydWN0IGJyY21mX3Jldl9pbmZvX2xlIHsKKwlfX2xlMzIgdmVuZG9yaWQ7CisJX19sZTMyIGRldmljZWlkOworCV9fbGUzMiByYWRpb3JldjsKKwlfX2xlMzIgY2hpcHJldjsKKwlfX2xlMzIgY29yZXJldjsKKwlfX2xlMzIgYm9hcmRpZDsKKwlfX2xlMzIgYm9hcmR2ZW5kb3I7CisJX19sZTMyIGJvYXJkcmV2OworCV9fbGUzMiBkcml2ZXJyZXY7CisJX19sZTMyIHVjb2RlcmV2OworCV9fbGUzMiBidXM7CisJX19sZTMyIGNoaXBudW07CisJX19sZTMyIHBoeXR5cGU7CisJX19sZTMyIHBoeXJldjsKKwlfX2xlMzIgYW5hcmV2OworCV9fbGUzMiBjaGlwcGtnOworCV9fbGUzMiBudnJhbXJldjsKK307CisKICNlbmRpZiAvKiBGV0lMX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvbXNnYnVmLmMKaW5kZXggNDU2OTQ0YS4uNjI2MjYxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL21zZ2J1Zi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9tc2didWYuYwpAQCAtNzMsNiArNzMsOCBAQAogI2RlZmluZSBCUkNNRl9NU0dCVUZfVFhfRkxVU0hfQ05UMQkJMzIKICNkZWZpbmUgQlJDTUZfTVNHQlVGX1RYX0ZMVVNIX0NOVDIJCTk2CiAKKyNkZWZpbmUgQlJDTUZfTVNHQlVGX0RFTEFZX1RYV09SS0VSX1RIUlMJNjQKKyNkZWZpbmUgQlJDTUZfTVNHQlVGX1RSSUNLTEVfVFhXT1JLRVJfVEhSUwkzMgogCiBzdHJ1Y3QgbXNnYnVmX2NvbW1vbl9oZHIgewogCXU4CQkJCW1zZ3R5cGU7CkBAIC01ODMsNyArNTg1LDcgQEAKIAl1MzIgZmxvd2lkOwogCXZvaWQgKmRtYV9idWY7CiAJdTMyIGRtYV9zejsKLQlsb25nIGxvbmcgYWRkcmVzczsKKwl1NjQgYWRkcmVzczsKIAlpbnQgZXJyOwogCiAJZmxvd2lkID0gd29yay0+Zmxvd2lkOwpAQCAtNjIwLDcgKzYyMiw3IEBACiAJCQkJCSAgIEJSQ01GX05ST0ZfSDJEX0NPTU1PTl9NU0dSSU5HUyk7CiAJbWVtY3B5KGNyZWF0ZS0+c2EsIHdvcmstPnNhLCBFVEhfQUxFTik7CiAJbWVtY3B5KGNyZWF0ZS0+ZGEsIHdvcmstPmRhLCBFVEhfQUxFTik7Ci0JYWRkcmVzcyA9IChsb25nIGxvbmcpKGxvbmcpbXNnYnVmLT5mbG93cmluZ19kbWFfaGFuZGxlW2Zsb3dpZF07CisJYWRkcmVzcyA9ICh1NjQpbXNnYnVmLT5mbG93cmluZ19kbWFfaGFuZGxlW2Zsb3dpZF07CiAJY3JlYXRlLT5mbG93X3JpbmdfYWRkci5oaWdoX2FkZHIgPSBjcHVfdG9fbGUzMihhZGRyZXNzID4+IDMyKTsKIAljcmVhdGUtPmZsb3dfcmluZ19hZGRyLmxvd19hZGRyID0gY3B1X3RvX2xlMzIoYWRkcmVzcyAmIDB4ZmZmZmZmZmYpOwogCWNyZWF0ZS0+bWF4X2l0ZW1zID0gY3B1X3RvX2xlMTYoQlJDTUZfSDJEX1RYRkxPV1JJTkdfTUFYX0lURU0pOwpAQCAtNjk4LDcgKzcwMCw3IEBACiAJZG1hX2FkZHJfdCBwaHlzYWRkcjsKIAl1MzIgcGt0aWQ7CiAJc3RydWN0IG1zZ2J1Zl90eF9tc2doZHIgKnR4X21zZ2hkcjsKLQlsb25nIGxvbmcgYWRkcmVzczsKKwl1NjQgYWRkcmVzczsKIAogCWNvbW1vbnJpbmcgPSBtc2didWYtPmZsb3dyaW5nc1tmbG93aWRdOwogCWlmICghYnJjbWZfY29tbW9ucmluZ193cml0ZV9hdmFpbGFibGUoY29tbW9ucmluZykpCkBAIC03NDIsMTMgKzc0NCwxNCBAQAogCQl0eF9tc2doZHItPnNlZ19jbnQgPSAxOwogCQltZW1jcHkodHhfbXNnaGRyLT50eGhkciwgc2tiLT5kYXRhLCBFVEhfSExFTik7CiAJCXR4X21zZ2hkci0+ZGF0YV9sZW4gPSBjcHVfdG9fbGUxNihza2ItPmxlbiAtIEVUSF9ITEVOKTsKLQkJYWRkcmVzcyA9IChsb25nIGxvbmcpKGxvbmcpcGh5c2FkZHI7CisJCWFkZHJlc3MgPSAodTY0KXBoeXNhZGRyOwogCQl0eF9tc2doZHItPmRhdGFfYnVmX2FkZHIuaGlnaF9hZGRyID0gY3B1X3RvX2xlMzIoYWRkcmVzcyA+PiAzMik7CiAJCXR4X21zZ2hkci0+ZGF0YV9idWZfYWRkci5sb3dfYWRkciA9CiAJCQljcHVfdG9fbGUzMihhZGRyZXNzICYgMHhmZmZmZmZmZik7CiAJCXR4X21zZ2hkci0+bWV0YWRhdGFfYnVmX2xlbiA9IDA7CiAJCXR4X21zZ2hkci0+bWV0YWRhdGFfYnVmX2FkZHIuaGlnaF9hZGRyID0gMDsKIAkJdHhfbXNnaGRyLT5tZXRhZGF0YV9idWZfYWRkci5sb3dfYWRkciA9IDA7CisJCWF0b21pY19pbmMoJmNvbW1vbnJpbmctPm91dHN0YW5kaW5nX3R4KTsKIAkJaWYgKGNvdW50ID49IEJSQ01GX01TR0JVRl9UWF9GTFVTSF9DTlQyKSB7CiAJCQlicmNtZl9jb21tb25yaW5nX3dyaXRlX2NvbXBsZXRlKGNvbW1vbnJpbmcpOwogCQkJY291bnQgPSAwOwpAQCAtNzczLDEwICs3NzYsMTYgQEAKIH0KIAogCi1zdGF0aWMgaW50IGJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGEoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB1MzIgZmxvd2lkKQorc3RhdGljIGludCBicmNtZl9tc2didWZfc2NoZWR1bGVfdHhkYXRhKHN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1ZiwgdTMyIGZsb3dpZCwKKwkJCQkJYm9vbCBmb3JjZSkKIHsKKwlzdHJ1Y3QgYnJjbWZfY29tbW9ucmluZyAqY29tbW9ucmluZzsKKwogCXNldF9iaXQoZmxvd2lkLCBtc2didWYtPmZsb3dfbWFwKTsKLQlxdWV1ZV93b3JrKG1zZ2J1Zi0+dHhmbG93X3dxLCAmbXNnYnVmLT50eGZsb3dfd29yayk7CisJY29tbW9ucmluZyA9IG1zZ2J1Zi0+Zmxvd3JpbmdzW2Zsb3dpZF07CisJaWYgKChmb3JjZSkgfHwgKGF0b21pY19yZWFkKCZjb21tb25yaW5nLT5vdXRzdGFuZGluZ190eCkgPAorCQkJQlJDTUZfTVNHQlVGX0RFTEFZX1RYV09SS0VSX1RIUlMpKQorCQlxdWV1ZV93b3JrKG1zZ2J1Zi0+dHhmbG93X3dxLCAmbXNnYnVmLT50eGZsb3dfd29yayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc5Nyw3ICs4MDYsNyBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWJyY21mX2Zsb3dyaW5nX2VucXVldWUoZmxvdywgZmxvd2lkLCBza2IpOwotCWJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGEobXNnYnVmLCBmbG93aWQpOworCWJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGEobXNnYnVmLCBmbG93aWQsIGZhbHNlKTsKIAogCXJldHVybiAwOwogfQpAQCAtODU0LDYgKzg2Myw3IEBACiBzdGF0aWMgdm9pZAogYnJjbWZfbXNnYnVmX3Byb2Nlc3NfdHhzdGF0dXMoc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmLCB2b2lkICpidWYpCiB7CisJc3RydWN0IGJyY21mX2NvbW1vbnJpbmcgKmNvbW1vbnJpbmc7CiAJc3RydWN0IG1zZ2J1Zl90eF9zdGF0dXMgKnR4X3N0YXR1czsKIAl1MzIgaWR4OwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC04NzEsNiArODgxLDggQEAKIAl9CiAKIAlzZXRfYml0KGZsb3dpZCwgbXNnYnVmLT50eHN0YXR1c19kb25lX21hcCk7CisJY29tbW9ucmluZyA9IG1zZ2J1Zi0+Zmxvd3JpbmdzW2Zsb3dpZF07CisJYXRvbWljX2RlYygmY29tbW9ucmluZy0+b3V0c3RhbmRpbmdfdHgpOwogCiAJYnJjbWZfdHhmaW5hbGl6ZShtc2didWYtPmRydnIsIHNrYiwgdHhfc3RhdHVzLT5tc2cuaWZpZHgsIHRydWUpOwogfQpAQCAtODg1LDcgKzg5Nyw3IEBACiAJdTMyIHBrdGxlbjsKIAlkbWFfYWRkcl90IHBoeXNhZGRyOwogCXN0cnVjdCBtc2didWZfcnhfYnVmcG9zdCAqcnhfYnVmcG9zdDsKLQlsb25nIGxvbmcgYWRkcmVzczsKKwl1NjQgYWRkcmVzczsKIAl1MzIgcGt0aWQ7CiAJdTMyIGk7CiAKQEAgLTg5NCw3ICs5MDYsNyBAQAogCQkJCQkJCSAgICAgIGNvdW50LAogCQkJCQkJCSAgICAgICZhbGxvY2VkKTsKIAlpZiAoIXJldF9wdHIpIHsKLQkJYnJjbWZfZXJyKCJGYWlsZWQgdG8gcmVzZXJ2ZSBzcGFjZSBpbiBjb21tb25yaW5nXG4iKTsKKwkJYnJjbWZfZGJnKE1TR0JVRiwgIkZhaWxlZCB0byByZXNlcnZlIHNwYWNlIGluIGNvbW1vbnJpbmdcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTkyMSw3ICs5MzMsNyBAQAogCQl9CiAKIAkJaWYgKG1zZ2J1Zi0+cnhfbWV0YWRhdGFfb2Zmc2V0KSB7Ci0JCQlhZGRyZXNzID0gKGxvbmcgbG9uZykobG9uZylwaHlzYWRkcjsKKwkJCWFkZHJlc3MgPSAodTY0KXBoeXNhZGRyOwogCQkJcnhfYnVmcG9zdC0+bWV0YWRhdGFfYnVmX2xlbiA9CiAJCQkJY3B1X3RvX2xlMTYobXNnYnVmLT5yeF9tZXRhZGF0YV9vZmZzZXQpOwogCQkJcnhfYnVmcG9zdC0+bWV0YWRhdGFfYnVmX2FkZHIuaGlnaF9hZGRyID0KQEAgLTkzNiw3ICs5NDgsNyBAQAogCQlyeF9idWZwb3N0LT5tc2cubXNndHlwZSA9IE1TR0JVRl9UWVBFX1JYQlVGX1BPU1Q7CiAJCXJ4X2J1ZnBvc3QtPm1zZy5yZXF1ZXN0X2lkID0gY3B1X3RvX2xlMzIocGt0aWQpOwogCi0JCWFkZHJlc3MgPSAobG9uZyBsb25nKShsb25nKXBoeXNhZGRyOworCQlhZGRyZXNzID0gKHU2NClwaHlzYWRkcjsKIAkJcnhfYnVmcG9zdC0+ZGF0YV9idWZfbGVuID0gY3B1X3RvX2xlMTYoKHUxNilwa3RsZW4pOwogCQlyeF9idWZwb3N0LT5kYXRhX2J1Zl9hZGRyLmhpZ2hfYWRkciA9CiAJCQljcHVfdG9fbGUzMihhZGRyZXNzID4+IDMyKTsKQEAgLTk5Miw3ICsxMDA0LDcgQEAKIAl1MzIgcGt0bGVuOwogCWRtYV9hZGRyX3QgcGh5c2FkZHI7CiAJc3RydWN0IG1zZ2J1Zl9yeF9pb2N0bF9yZXNwX29yX2V2ZW50ICpyeF9idWZwb3N0OwotCWxvbmcgbG9uZyBhZGRyZXNzOworCXU2NCBhZGRyZXNzOwogCXUzMiBwa3RpZDsKIAl1MzIgaTsKIApAQCAtMTAzNSw3ICsxMDQ3LDcgQEAKIAkJCQlNU0dCVUZfVFlQRV9JT0NUTFJFU1BfQlVGX1BPU1Q7CiAJCXJ4X2J1ZnBvc3QtPm1zZy5yZXF1ZXN0X2lkID0gY3B1X3RvX2xlMzIocGt0aWQpOwogCi0JCWFkZHJlc3MgPSAobG9uZyBsb25nKShsb25nKXBoeXNhZGRyOworCQlhZGRyZXNzID0gKHU2NClwaHlzYWRkcjsKIAkJcnhfYnVmcG9zdC0+aG9zdF9idWZfbGVuID0gY3B1X3RvX2xlMTYoKHUxNilwa3RsZW4pOwogCQlyeF9idWZwb3N0LT5ob3N0X2J1Zl9hZGRyLmhpZ2hfYWRkciA9CiAJCQljcHVfdG9fbGUzMihhZGRyZXNzID4+IDMyKTsKQEAgLTExODEsNyArMTE5Myw3IEBACiAKIAlicmNtZl9mbG93cmluZ19vcGVuKG1zZ2J1Zi0+ZmxvdywgZmxvd2lkKTsKIAotCWJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGEobXNnYnVmLCBmbG93aWQpOworCWJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGEobXNnYnVmLCBmbG93aWQsIHRydWUpOwogfQogCiAKQEAgLTEyODAsOCArMTI5MiwxMCBAQAogCXN0cnVjdCBicmNtZl9idXMgKmJ1c19pZiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBicmNtZl9wdWIgKmRydnIgPSBidXNfaWYtPmRydnI7CiAJc3RydWN0IGJyY21mX21zZ2J1ZiAqbXNnYnVmID0gKHN0cnVjdCBicmNtZl9tc2didWYgKilkcnZyLT5wcm90by0+cGQ7CisJc3RydWN0IGJyY21mX2NvbW1vbnJpbmcgKmNvbW1vbnJpbmc7CiAJdm9pZCAqYnVmOwogCXUzMiBmbG93aWQ7CisJaW50IHFsZW47CiAKIAlidWYgPSBtc2didWYtPmNvbW1vbnJpbmdzW0JSQ01GX0QySF9NU0dSSU5HX1JYX0NPTVBMRVRFXTsKIAlicmNtZl9tc2didWZfcHJvY2Vzc19yeChtc2didWYsIGJ1Zik7CkBAIC0xMjkzLDggKzEzMDcsMTIgQEAKIAlmb3JfZWFjaF9zZXRfYml0KGZsb3dpZCwgbXNnYnVmLT50eHN0YXR1c19kb25lX21hcCwKIAkJCSBtc2didWYtPm5yb2ZfZmxvd3JpbmdzKSB7CiAJCWNsZWFyX2JpdChmbG93aWQsIG1zZ2J1Zi0+dHhzdGF0dXNfZG9uZV9tYXApOwotCQlpZiAoYnJjbWZfZmxvd3JpbmdfcWxlbihtc2didWYtPmZsb3csIGZsb3dpZCkpCi0JCQlicmNtZl9tc2didWZfc2NoZWR1bGVfdHhkYXRhKG1zZ2J1ZiwgZmxvd2lkKTsKKwkJY29tbW9ucmluZyA9IG1zZ2J1Zi0+Zmxvd3JpbmdzW2Zsb3dpZF07CisJCXFsZW4gPSBicmNtZl9mbG93cmluZ19xbGVuKG1zZ2J1Zi0+ZmxvdywgZmxvd2lkKTsKKwkJaWYgKChxbGVuID4gQlJDTUZfTVNHQlVGX1RSSUNLTEVfVFhXT1JLRVJfVEhSUykgfHwKKwkJICAgICgocWxlbikgJiYgKGF0b21pY19yZWFkKCZjb21tb25yaW5nLT5vdXRzdGFuZGluZ190eCkgPAorCQkJCUJSQ01GX01TR0JVRl9UUklDS0xFX1RYV09SS0VSX1RIUlMpKSkKKwkJCWJyY21mX21zZ2J1Zl9zY2hlZHVsZV90eGRhdGEobXNnYnVmLCBmbG93aWQsIHRydWUpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTM0OCw3ICsxMzY2LDcgQEAKIHsKIAlzdHJ1Y3QgYnJjbWZfYnVzX21zZ2J1ZiAqaWZfbXNnYnVmOwogCXN0cnVjdCBicmNtZl9tc2didWYgKm1zZ2J1ZjsKLQlsb25nIGxvbmcgYWRkcmVzczsKKwl1NjQgYWRkcmVzczsKIAl1MzIgY291bnQ7CiAKIAlpZl9tc2didWYgPSBkcnZyLT5idXNfaWYtPm1zZ2J1ZjsKQEAgLTEzNzksNyArMTM5Nyw3IEBACiAJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtc2didWYtPmlvY3RidWYpCiAJCWdvdG8gZmFpbDsKLQlhZGRyZXNzID0gKGxvbmcgbG9uZykobG9uZyltc2didWYtPmlvY3RidWZfaGFuZGxlOworCWFkZHJlc3MgPSAodTY0KW1zZ2J1Zi0+aW9jdGJ1Zl9oYW5kbGU7CiAJbXNnYnVmLT5pb2N0YnVmX3BoeXNfaGkgPSBhZGRyZXNzID4+IDMyOwogCW1zZ2J1Zi0+aW9jdGJ1Zl9waHlzX2xvID0gYWRkcmVzcyAmIDB4ZmZmZmZmZmY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvcGNpZS5jCmluZGV4IDkwNTk5MWYuLjYxYzA1M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9wY2llLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL3BjaWUuYwpAQCAtOTU5LDE0ICs5NTksMTQgQEAKIAkJCQkgICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpCiB7CiAJdm9pZCAqcmluZzsKLQlsb25nIGxvbmcgYWRkcmVzczsKKwl1NjQgYWRkcmVzczsKIAogCXJpbmcgPSBkbWFfYWxsb2NfY29oZXJlbnQoJmRldmluZm8tPnBkZXYtPmRldiwgc2l6ZSwgZG1hX2hhbmRsZSwKIAkJCQkgIEdGUF9LRVJORUwpOwogCWlmICghcmluZykKIAkJcmV0dXJuIE5VTEw7CiAKLQlhZGRyZXNzID0gKGxvbmcgbG9uZykobG9uZykqZG1hX2hhbmRsZTsKKwlhZGRyZXNzID0gKHU2NCkqZG1hX2hhbmRsZTsKIAlicmNtZl9wY2llX3dyaXRlX3RjbTMyKGRldmluZm8sIHRjbV9kbWFfcGh5c19hZGRyLAogCQkJICAgICAgIGFkZHJlc3MgJiAweGZmZmZmZmZmKTsKIAlicmNtZl9wY2llX3dyaXRlX3RjbTMyKGRldmluZm8sIHRjbV9kbWFfcGh5c19hZGRyICsgNCwgYWRkcmVzcyA+PiAzMik7CkBAIC0xMTY2LDcgKzExNjYsNyBAQAogCiBzdGF0aWMgaW50IGJyY21mX3BjaWVfaW5pdF9zY3JhdGNoYnVmZmVycyhzdHJ1Y3QgYnJjbWZfcGNpZWRldl9pbmZvICpkZXZpbmZvKQogewotCWxvbmcgbG9uZyBhZGRyZXNzOworCXU2NCBhZGRyZXNzOwogCXUzMiBhZGRyOwogCiAJZGV2aW5mby0+c2hhcmVkLnNjcmF0Y2ggPSBkbWFfYWxsb2NfY29oZXJlbnQoJmRldmluZm8tPnBkZXYtPmRldiwKQEAgLTExODAsNyArMTE4MCw3IEBACiAKIAlhZGRyID0gZGV2aW5mby0+c2hhcmVkLnRjbV9iYXNlX2FkZHJlc3MgKwogCSAgICAgICBCUkNNRl9TSEFSRURfRE1BX1NDUkFUQ0hfQUREUl9PRkZTRVQ7Ci0JYWRkcmVzcyA9IChsb25nIGxvbmcpKGxvbmcpZGV2aW5mby0+c2hhcmVkLnNjcmF0Y2hfZG1haGFuZGxlOworCWFkZHJlc3MgPSAodTY0KWRldmluZm8tPnNoYXJlZC5zY3JhdGNoX2RtYWhhbmRsZTsKIAlicmNtZl9wY2llX3dyaXRlX3RjbTMyKGRldmluZm8sIGFkZHIsIGFkZHJlc3MgJiAweGZmZmZmZmZmKTsKIAlicmNtZl9wY2llX3dyaXRlX3RjbTMyKGRldmluZm8sIGFkZHIgKyA0LCBhZGRyZXNzID4+IDMyKTsKIAlhZGRyID0gZGV2aW5mby0+c2hhcmVkLnRjbV9iYXNlX2FkZHJlc3MgKwpAQCAtMTE5OCw3ICsxMTk4LDcgQEAKIAogCWFkZHIgPSBkZXZpbmZvLT5zaGFyZWQudGNtX2Jhc2VfYWRkcmVzcyArCiAJICAgICAgIEJSQ01GX1NIQVJFRF9ETUFfUklOR1VQRF9BRERSX09GRlNFVDsKLQlhZGRyZXNzID0gKGxvbmcgbG9uZykobG9uZylkZXZpbmZvLT5zaGFyZWQucmluZ3VwZF9kbWFoYW5kbGU7CisJYWRkcmVzcyA9ICh1NjQpZGV2aW5mby0+c2hhcmVkLnJpbmd1cGRfZG1haGFuZGxlOwogCWJyY21mX3BjaWVfd3JpdGVfdGNtMzIoZGV2aW5mbywgYWRkciwgYWRkcmVzcyAmIDB4ZmZmZmZmZmYpOwogCWJyY21mX3BjaWVfd3JpdGVfdGNtMzIoZGV2aW5mbywgYWRkciArIDQsIGFkZHJlc3MgPj4gMzIpOwogCWFkZHIgPSBkZXZpbmZvLT5zaGFyZWQudGNtX2Jhc2VfYWRkcmVzcyArCkBAIC0xODI4LDcgKzE4MjgsNyBAQAogCQkJCWdvdG8gY2xlYW51cDsKIAkJCWJyY21mX2RiZyhQQ0lFLCAiSG90IHJlc3VtZSwgY29udGludWUuLi4uXG4iKTsKIAkJCWJyY21mX3BjaWVfc2VsZWN0X2NvcmUoZGV2aW5mbywgQkNNQV9DT1JFX1BDSUUyKTsKLQkJCWJyY21mX2J1c19jaGFuZ2Vfc3RhdGUoYnVzLCBCUkNNRl9CVVNfREFUQSk7CisJCQlicmNtZl9idXNfY2hhbmdlX3N0YXRlKGJ1cywgQlJDTUZfQlVTX1VQKTsKIAkJCWJyY21mX3BjaWVfaW50cl9lbmFibGUoZGV2aW5mbyk7CiAJCQlyZXR1cm4gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmMKaW5kZXggMGIwZDUxYS4uZmFlYzM1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5jCkBAIC00NCw3ICs0NCw4IEBACiAjaW5jbHVkZSAiY2hpcC5oIgogI2luY2x1ZGUgImZpcm13YXJlLmgiCiAKLSNkZWZpbmUgRENNRF9SRVNQX1RJTUVPVVQgIDIwMDAJLyogSW4gbWlsbGkgc2Vjb25kICovCisjZGVmaW5lIERDTURfUkVTUF9USU1FT1VUCTIwMDAJLyogSW4gbWlsbGkgc2Vjb25kICovCisjZGVmaW5lIENUTF9ET05FX1RJTUVPVVQJMjAwMAkvKiBJbiBtaWxsaSBzZWNvbmQgKi8KIAogI2lmZGVmIERFQlVHCiAKQEAgLTQ5NSw5ICs0OTYsOSBAQAogCXU4ICpjdHJsX2ZyYW1lX2J1ZjsKIAl1MTYgY3RybF9mcmFtZV9sZW47CiAJYm9vbCBjdHJsX2ZyYW1lX3N0YXQ7CisJaW50IGN0cmxfZnJhbWVfZXJyOwogCiAJc3BpbmxvY2tfdCB0eHFfbG9jazsJCS8qIHByb3RlY3QgYnVzLT50eHEgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIHR4X3NlcV9sb2NrOwkvKiBwcm90ZWN0IGJ1cy0+dHhfc2VxICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgY3RybF93YWl0OwogCXdhaXRfcXVldWVfaGVhZF90IGRjbWRfcmVzcF93YWl0OwogCkBAIC01MTQsNyArNTE1LDYgQEAKIAlib29sIHR4b2ZmOwkJLyogVHJhbnNtaXQgZmxvdy1jb250cm9sbGVkICovCiAJc3RydWN0IGJyY21mX3NkaW9fY291bnQgc2RjbnQ7CiAJYm9vbCBzcl9lbmFibGVkOyAvKiBTYXZlUmVzdG9yZSBlbmFibGVkICovCi0JYm9vbCBzbGVlcGluZzsgLyogU0RJTyBidXMgc2xlZXBpbmcgKi8KIAogCXU4IHR4X2hkcmxlbjsJCS8qIHNkaW8gYnVzIGhlYWRlciBsZW5ndGggZm9yIHR4IHBhY2tldCAqLwogCWJvb2wgdHhnbG9tOwkJLyogaG9zdCB0eCBnbG9tbWluZyBlbmFibGUgZmxhZyAqLwpAQCAtNjA4LDYgKzYwOCw4IEBACiAjZGVmaW5lIEJDTTQzMzBfTlZSQU1fTkFNRQkJImJyY20vYnJjbWZtYWM0MzMwLXNkaW8udHh0IgogI2RlZmluZSBCQ000MzM0X0ZJUk1XQVJFX05BTUUJCSJicmNtL2JyY21mbWFjNDMzNC1zZGlvLmJpbiIKICNkZWZpbmUgQkNNNDMzNF9OVlJBTV9OQU1FCQkiYnJjbS9icmNtZm1hYzQzMzQtc2Rpby50eHQiCisjZGVmaW5lIEJDTTQzMzQwX0ZJUk1XQVJFX05BTUUJCSJicmNtL2JyY21mbWFjNDMzNDAtc2Rpby5iaW4iCisjZGVmaW5lIEJDTTQzMzQwX05WUkFNX05BTUUJCSJicmNtL2JyY21mbWFjNDMzNDAtc2Rpby50eHQiCiAjZGVmaW5lIEJDTTQzMzVfRklSTVdBUkVfTkFNRQkJImJyY20vYnJjbWZtYWM0MzM1LXNkaW8uYmluIgogI2RlZmluZSBCQ000MzM1X05WUkFNX05BTUUJCSJicmNtL2JyY21mbWFjNDMzNS1zZGlvLnR4dCIKICNkZWZpbmUgQkNNNDMzNjJfRklSTVdBUkVfTkFNRQkJImJyY20vYnJjbWZtYWM0MzM2Mi1zZGlvLmJpbiIKQEAgLTYyOSw2ICs2MzEsOCBAQAogTU9EVUxFX0ZJUk1XQVJFKEJDTTQzMzBfTlZSQU1fTkFNRSk7CiBNT0RVTEVfRklSTVdBUkUoQkNNNDMzNF9GSVJNV0FSRV9OQU1FKTsKIE1PRFVMRV9GSVJNV0FSRShCQ000MzM0X05WUkFNX05BTUUpOworTU9EVUxFX0ZJUk1XQVJFKEJDTTQzMzQwX0ZJUk1XQVJFX05BTUUpOworTU9EVUxFX0ZJUk1XQVJFKEJDTTQzMzQwX05WUkFNX05BTUUpOwogTU9EVUxFX0ZJUk1XQVJFKEJDTTQzMzVfRklSTVdBUkVfTkFNRSk7CiBNT0RVTEVfRklSTVdBUkUoQkNNNDMzNV9OVlJBTV9OQU1FKTsKIE1PRFVMRV9GSVJNV0FSRShCQ000MzM2Ml9GSVJNV0FSRV9OQU1FKTsKQEAgLTY2MCw2ICs2NjQsNyBAQAogCXsgQlJDTV9DQ180MzI5X0NISVBfSUQsIDB4RkZGRkZGRkYsIEJSQ01GX0ZJUk1XQVJFX05WUkFNKEJDTTQzMjkpIH0sCiAJeyBCUkNNX0NDXzQzMzBfQ0hJUF9JRCwgMHhGRkZGRkZGRiwgQlJDTUZfRklSTVdBUkVfTlZSQU0oQkNNNDMzMCkgfSwKIAl7IEJSQ01fQ0NfNDMzNF9DSElQX0lELCAweEZGRkZGRkZGLCBCUkNNRl9GSVJNV0FSRV9OVlJBTShCQ000MzM0KSB9LAorCXsgQlJDTV9DQ180MzM0MF9DSElQX0lELCAweEZGRkZGRkZGLCBCUkNNRl9GSVJNV0FSRV9OVlJBTShCQ000MzM0MCkgfSwKIAl7IEJSQ01fQ0NfNDMzNV9DSElQX0lELCAweEZGRkZGRkZGLCBCUkNNRl9GSVJNV0FSRV9OVlJBTShCQ000MzM1KSB9LAogCXsgQlJDTV9DQ180MzM2Ml9DSElQX0lELCAweEZGRkZGRkZFLCBCUkNNRl9GSVJNV0FSRV9OVlJBTShCQ000MzM2MikgfSwKIAl7IEJSQ01fQ0NfNDMzOV9DSElQX0lELCAweEZGRkZGRkZGLCBCUkNNRl9GSVJNV0FSRV9OVlJBTShCQ000MzM5KSB9LApAQCAtMTAwOCwxMiArMTAxMywxMiBAQAogCiAJYnJjbWZfZGJnKFNESU8sICJFbnRlcjogcmVxdWVzdCAlcyBjdXJyZW50bHkgJXNcbiIsCiAJCSAgKHNsZWVwID8gIlNMRUVQIiA6ICJXQUtFIiksCi0JCSAgKGJ1cy0+c2xlZXBpbmcgPyAiU0xFRVAiIDogIldBS0UiKSk7CisJCSAgKGJ1cy0+c2Rpb2Rldi0+c2xlZXBpbmcgPyAiU0xFRVAiIDogIldBS0UiKSk7CiAKIAkvKiBJZiBTUiBpcyBlbmFibGVkIGNvbnRyb2wgYnVzIHN0YXRlIHdpdGggS1NPICovCiAJaWYgKGJ1cy0+c3JfZW5hYmxlZCkgewogCQkvKiBEb25lIGlmIHdlJ3JlIGFscmVhZHkgaW4gdGhlIHJlcXVlc3RlZCBzdGF0ZSAqLwotCQlpZiAoc2xlZXAgPT0gYnVzLT5zbGVlcGluZykKKwkJaWYgKHNsZWVwID09IGJ1cy0+c2Rpb2Rldi0+c2xlZXBpbmcpCiAJCQlnb3RvIGVuZDsKIAogCQkvKiBHb2luZyB0byBzbGVlcCAqLwpAQCAtMTA0NSwxMiArMTA1MCw3IEBACiAJCQlidXMtPmlkbGVjb3VudCA9IDA7CiAJCQllcnIgPSBicmNtZl9zZGlvX2tzb19jb250cm9sKGJ1cywgdHJ1ZSk7CiAJCX0KLQkJaWYgKCFlcnIpIHsKLQkJCS8qIENoYW5nZSBzdGF0ZSAqLwotCQkJYnVzLT5zbGVlcGluZyA9IHNsZWVwOwotCQkJYnJjbWZfZGJnKFNESU8sICJuZXcgc3RhdGUgJXNcbiIsCi0JCQkJICAoc2xlZXAgPyAiU0xFRVAiIDogIldBS0UiKSk7Ci0JCX0gZWxzZSB7CisJCWlmIChlcnIpIHsKIAkJCWJyY21mX2VycigiZXJyb3Igd2hpbGUgY2hhbmdpbmcgYnVzIHNsZWVwIHN0YXRlICVkXG4iLAogCQkJCSAgZXJyKTsKIAkJCWdvdG8gZG9uZTsKQEAgLTEwNjUsNiArMTA2NSwxMSBAQAogCX0gZWxzZSB7CiAJCWJyY21mX3NkaW9fY2xrY3RsKGJ1cywgQ0xLX0FWQUlMLCBwZW5kb2spOwogCX0KKwlidXMtPnNkaW9kZXYtPnNsZWVwaW5nID0gc2xlZXA7CisJaWYgKHNsZWVwKQorCQl3YWtlX3VwKCZidXMtPnNkaW9kZXYtPmlkbGVfd2FpdCk7CisJYnJjbWZfZGJnKFNESU8sICJuZXcgc3RhdGUgJXNcbiIsCisJCSAgKHNsZWVwID8gIlNMRUVQIiA6ICJXQUtFIikpOwogZG9uZToKIAlicmNtZl9kYmcoU0RJTywgIkV4aXQ6IGVycj0lZFxuIiwgZXJyKTsKIAlyZXR1cm4gZXJyOwpAQCAtMTkwNCw3ICsxOTA5LDcgQEAKIAlidXMtPnJ4cGVuZGluZyA9IHRydWU7CiAKIAlmb3IgKHJkLT5zZXFfbnVtID0gYnVzLT5yeF9zZXEsIHJ4bGVmdCA9IG1heGZyYW1lczsKLQkgICAgICFidXMtPnJ4c2tpcCAmJiByeGxlZnQgJiYgYnJjbWZfYnVzX3JlYWR5KGJ1cy0+c2Rpb2Rldi0+YnVzX2lmKTsKKwkgICAgICFidXMtPnJ4c2tpcCAmJiByeGxlZnQgJiYgYnVzLT5zZGlvZGV2LT5zdGF0ZSA9PSBCUkNNRl9TVEFURV9EQVRBOwogCSAgICAgcmQtPnNlcV9udW0rKywgcnhsZWZ0LS0pIHsKIAogCQkvKiBIYW5kbGUgZ2xvbW1pbmcgc2VwYXJhdGVseSAqLwpAQCAtMjM3MSw4ICsyMzc2LDYgQEAKIAkvKiBTZW5kIGZyYW1lcyB1bnRpbCB0aGUgbGltaXQgb3Igc29tZSBvdGhlciBldmVudCAqLwogCWZvciAoY250ID0gMDsgKGNudCA8IG1heGZyYW1lcykgJiYgZGF0YV9vayhidXMpOykgewogCQlwa3RfbnVtID0gMTsKLQkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYnVzLT50eF9zZXFfbG9jaykpCi0JCQlyZXR1cm4gY250OwogCQlpZiAoYnVzLT50eGdsb20pCiAJCQlwa3RfbnVtID0gbWluX3QodTgsIGJ1cy0+dHhfbWF4IC0gYnVzLT50eF9zZXEsCiAJCQkJCWJ1cy0+c2Rpb2Rldi0+dHhnbG9tc3opOwpAQCAtMjM4OCwxMyArMjM5MSwxMCBAQAogCQkJX19za2JfcXVldWVfdGFpbCgmcGt0cSwgcGt0KTsKIAkJfQogCQlzcGluX3VubG9ja19iaCgmYnVzLT50eHFfbG9jayk7Ci0JCWlmIChpID09IDApIHsKLQkJCXVwKCZidXMtPnR4X3NlcV9sb2NrKTsKKwkJaWYgKGkgPT0gMCkKIAkJCWJyZWFrOwotCQl9CiAKIAkJcmV0ID0gYnJjbWZfc2Rpb190eHBrdChidXMsICZwa3RxLCBTRFBDTV9EQVRBX0NIQU5ORUwpOwotCQl1cCgmYnVzLT50eF9zZXFfbG9jayk7CiAKIAkJY250ICs9IGk7CiAKQEAgLTI0MTUsNyArMjQxNSw3IEBACiAJfQogCiAJLyogRGVmbG93LWNvbnRyb2wgc3RhY2sgaWYgbmVlZGVkICovCi0JaWYgKChidXMtPnNkaW9kZXYtPmJ1c19pZi0+c3RhdGUgPT0gQlJDTUZfQlVTX0RBVEEpICYmCisJaWYgKChidXMtPnNkaW9kZXYtPnN0YXRlID09IEJSQ01GX1NUQVRFX0RBVEEpICYmCiAJICAgIGJ1cy0+dHhvZmYgJiYgKHBrdHFfbGVuKCZidXMtPnR4cSkgPCBUWExPVykpIHsKIAkJYnVzLT50eG9mZiA9IGZhbHNlOwogCQlicmNtZl90eGZsb3dibG9jayhidXMtPnNkaW9kZXYtPmRldiwgZmFsc2UpOwpAQCAtMjUwMyw3ICsyNTAzLDcgQEAKIAkJYnVzLT53YXRjaGRvZ190c2sgPSBOVUxMOwogCX0KIAotCWlmIChidXNfaWYtPnN0YXRlID09IEJSQ01GX0JVU19ET1dOKSB7CisJaWYgKHNkaW9kZXYtPnN0YXRlICE9IEJSQ01GX1NUQVRFX05PTUVESVVNKSB7CiAJCXNkaW9fY2xhaW1faG9zdChzZGlvZGV2LT5mdW5jWzFdKTsKIAogCQkvKiBFbmFibGUgY2xvY2sgZm9yIGRldmljZSBpbnRlcnJ1cHRzICovCkBAIC0yNTM4LDggKzI1MzgsNyBAQAogCWJyY211X3BrdHFfZmx1c2goJmJ1cy0+dHhxLCB0cnVlLCBOVUxMLCBOVUxMKTsKIAogCS8qIENsZWFyIGFueSBoZWxkIGdsb21taW5nIHN0dWZmICovCi0JaWYgKGJ1cy0+Z2xvbWQpCi0JCWJyY211X3BrdF9idWZfZnJlZV9za2IoYnVzLT5nbG9tZCk7CisJYnJjbXVfcGt0X2J1Zl9mcmVlX3NrYihidXMtPmdsb21kKTsKIAlicmNtZl9zZGlvX2ZyZWVfZ2xvbShidXMpOwogCiAJLyogQ2xlYXIgcnggY29udHJvbCBhbmQgd2FrZSBhbnkgd2FpdGVycyAqLwpAQCAtMjYwNCw2ICsyNjAzLDIxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBicmNtZl9zZGlvX3BtX3Jlc3VtZV93YWl0KHN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2RldikKK3sKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKwlpbnQgcmV0cnk7CisKKwkvKiBXYWl0IGZvciBwb3NzaWJsZSByZXN1bWUgdG8gY29tcGxldGUgKi8KKwlyZXRyeSA9IDA7CisJd2hpbGUgKChhdG9taWNfcmVhZCgmc2Rpb2Rldi0+c3VzcGVuZCkpICYmIChyZXRyeSsrICE9IDUwKSkKKwkJbXNsZWVwKDIwKTsKKwlpZiAoYXRvbWljX3JlYWQoJnNkaW9kZXYtPnN1c3BlbmQpKQorCQlyZXR1cm4gLUVJTzsKKyNlbmRpZgorCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBicmNtZl9zZGlvX2RwYyhzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzKQogewogCXUzMiBuZXdzdGF0dXMgPSAwOwpAQCAtMjYxNCw2ICsyNjI4LDkgQEAKIAogCWJyY21mX2RiZyhUUkFDRSwgIkVudGVyXG4iKTsKIAorCWlmIChicmNtZl9zZGlvX3BtX3Jlc3VtZV93YWl0KGJ1cy0+c2Rpb2RldikpCisJCXJldHVybjsKKwogCXNkaW9fY2xhaW1faG9zdChidXMtPnNkaW9kZXYtPmZ1bmNbMV0pOwogCiAJLyogSWYgd2FpdGluZyBmb3IgSFRBVkFJTCwgY2hlY2sgc3RhdHVzICovCkBAIC0yNzIwLDE3ICsyNzM3LDE0IEBACiAJYnJjbWZfc2Rpb19jbHJpbnRyKGJ1cyk7CiAKIAlpZiAoYnVzLT5jdHJsX2ZyYW1lX3N0YXQgJiYgKGJ1cy0+Y2xrc3RhdGUgPT0gQ0xLX0FWQUlMKSAmJgotCSAgICAoZG93bl9pbnRlcnJ1cHRpYmxlKCZidXMtPnR4X3NlcV9sb2NrKSA9PSAwKSkgewotCQlpZiAoZGF0YV9vayhidXMpKSB7Ci0JCQlzZGlvX2NsYWltX2hvc3QoYnVzLT5zZGlvZGV2LT5mdW5jWzFdKTsKLQkJCWVyciA9IGJyY21mX3NkaW9fdHhfY3RybGZyYW1lKGJ1cywgIGJ1cy0+Y3RybF9mcmFtZV9idWYsCi0JCQkJCQkgICAgICBidXMtPmN0cmxfZnJhbWVfbGVuKTsKLQkJCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0+c2Rpb2Rldi0+ZnVuY1sxXSk7Ci0KLQkJCWJ1cy0+Y3RybF9mcmFtZV9zdGF0ID0gZmFsc2U7Ci0JCQlicmNtZl9zZGlvX3dhaXRfZXZlbnRfd2FrZXVwKGJ1cyk7Ci0JCX0KLQkJdXAoJmJ1cy0+dHhfc2VxX2xvY2spOworCSAgICBkYXRhX29rKGJ1cykpIHsKKwkJc2Rpb19jbGFpbV9ob3N0KGJ1cy0+c2Rpb2Rldi0+ZnVuY1sxXSk7CisJCWVyciA9IGJyY21mX3NkaW9fdHhfY3RybGZyYW1lKGJ1cywgIGJ1cy0+Y3RybF9mcmFtZV9idWYsCisJCQkJCSAgICAgIGJ1cy0+Y3RybF9mcmFtZV9sZW4pOworCQlzZGlvX3JlbGVhc2VfaG9zdChidXMtPnNkaW9kZXYtPmZ1bmNbMV0pOworCQlidXMtPmN0cmxfZnJhbWVfZXJyID0gZXJyOworCQlidXMtPmN0cmxfZnJhbWVfc3RhdCA9IGZhbHNlOworCQlicmNtZl9zZGlvX3dhaXRfZXZlbnRfd2FrZXVwKGJ1cyk7CiAJfQogCS8qIFNlbmQgcXVldWVkIGZyYW1lcyAobGltaXQgMSBpZiByeCBtYXkgc3RpbGwgYmUgcGVuZGluZykgKi8KIAlpZiAoKGJ1cy0+Y2xrc3RhdGUgPT0gQ0xLX0FWQUlMKSAmJiAhYXRvbWljX3JlYWQoJmJ1cy0+ZmNzdGF0ZSkgJiYKQEAgLTI3NDEsNyArMjc1NSw3IEBACiAJCWJyY21mX3NkaW9fc2VuZGZyb21xKGJ1cywgZnJhbWVjbnQpOwogCX0KIAotCWlmICghYnJjbWZfYnVzX3JlYWR5KGJ1cy0+c2Rpb2Rldi0+YnVzX2lmKSB8fCAoZXJyICE9IDApKSB7CisJaWYgKChidXMtPnNkaW9kZXYtPnN0YXRlICE9IEJSQ01GX1NUQVRFX0RBVEEpIHx8IChlcnIgIT0gMCkpIHsKIAkJYnJjbWZfZXJyKCJmYWlsZWQgYmFja3BsYW5lIGFjY2VzcyBvdmVyIFNESU8sIGhhbHRpbmcgb3BlcmF0aW9uXG4iKTsKIAkJYXRvbWljX3NldCgmYnVzLT5pbnRzdGF0dXMsIDApOwogCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJmJ1cy0+aW50c3RhdHVzKSB8fApAQCAtMjk0Miw0MyArMjk1NiwzMCBAQAogCXN0cnVjdCBicmNtZl9idXMgKmJ1c19pZiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBicmNtZl9zZGlvX2RldiAqc2Rpb2RldiA9IGJ1c19pZi0+YnVzX3ByaXYuc2RpbzsKIAlzdHJ1Y3QgYnJjbWZfc2RpbyAqYnVzID0gc2Rpb2Rldi0+YnVzOwotCWludCByZXQgPSAtMTsKKwlpbnQgcmV0OwogCiAJYnJjbWZfZGJnKFRSQUNFLCAiRW50ZXJcbiIpOwogCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYnVzLT50eF9zZXFfbG9jaykpCi0JCXJldHVybiAtRUlOVFI7Ci0KLQlpZiAoIWRhdGFfb2soYnVzKSkgewotCQlicmNtZl9kYmcoSU5GTywgIk5vIGJ1cyBjcmVkaXQgYnVzLT50eF9tYXggJWQsIGJ1cy0+dHhfc2VxICVkXG4iLAotCQkJICBidXMtPnR4X21heCwgYnVzLT50eF9zZXEpOwotCQl1cCgmYnVzLT50eF9zZXFfbG9jayk7Ci0JCS8qIFNlbmQgZnJvbSBkcGMgKi8KLQkJYnVzLT5jdHJsX2ZyYW1lX2J1ZiA9IG1zZzsKLQkJYnVzLT5jdHJsX2ZyYW1lX2xlbiA9IG1zZ2xlbjsKLQkJYnVzLT5jdHJsX2ZyYW1lX3N0YXQgPSB0cnVlOwotCi0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGJ1cy0+Y3RybF93YWl0LAotCQkJCQkJICFidXMtPmN0cmxfZnJhbWVfc3RhdCwKLQkJCQkJCSBtc2Vjc190b19qaWZmaWVzKDIwMDApKTsKLQotCQlpZiAoIWJ1cy0+Y3RybF9mcmFtZV9zdGF0KSB7Ci0JCQlicmNtZl9kYmcoU0RJTywgImN0cmxfZnJhbWVfc3RhdCA9PSBmYWxzZVxuIik7Ci0JCQlyZXQgPSAwOwotCQl9IGVsc2UgewotCQkJYnJjbWZfZGJnKFNESU8sICJjdHJsX2ZyYW1lX3N0YXQgPT0gdHJ1ZVxuIik7Ci0JCQlidXMtPmN0cmxfZnJhbWVfc3RhdCA9IGZhbHNlOwotCQkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYnVzLT50eF9zZXFfbG9jaykpCi0JCQkJcmV0dXJuIC1FSU5UUjsKLQkJCXJldCA9IC0xOwotCQl9CisJLyogU2VuZCBmcm9tIGRwYyAqLworCWJ1cy0+Y3RybF9mcmFtZV9idWYgPSBtc2c7CisJYnVzLT5jdHJsX2ZyYW1lX2xlbiA9IG1zZ2xlbjsKKwlidXMtPmN0cmxfZnJhbWVfc3RhdCA9IHRydWU7CisJaWYgKGF0b21pY19yZWFkKCZidXMtPmRwY190c2tjbnQpID09IDApIHsKKwkJYXRvbWljX2luYygmYnVzLT5kcGNfdHNrY250KTsKKwkJcXVldWVfd29yayhidXMtPmJyY21mX3dxLCAmYnVzLT5kYXRhd29yayk7CiAJfQotCWlmIChyZXQgPT0gLTEpIHsKLQkJc2Rpb19jbGFpbV9ob3N0KGJ1cy0+c2Rpb2Rldi0+ZnVuY1sxXSk7Ci0JCWJyY21mX3NkaW9fYnVzX3NsZWVwKGJ1cywgZmFsc2UsIGZhbHNlKTsKLQkJcmV0ID0gYnJjbWZfc2Rpb190eF9jdHJsZnJhbWUoYnVzLCBtc2csIG1zZ2xlbik7Ci0JCXNkaW9fcmVsZWFzZV9ob3N0KGJ1cy0+c2Rpb2Rldi0+ZnVuY1sxXSk7Ci0JCXVwKCZidXMtPnR4X3NlcV9sb2NrKTsKKworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGJ1cy0+Y3RybF93YWl0LCAhYnVzLT5jdHJsX2ZyYW1lX3N0YXQsCisJCQkJCSBtc2Vjc190b19qaWZmaWVzKENUTF9ET05FX1RJTUVPVVQpKTsKKworCWlmICghYnVzLT5jdHJsX2ZyYW1lX3N0YXQpIHsKKwkJYnJjbWZfZGJnKFNESU8sICJjdHJsX2ZyYW1lIGNvbXBsZXRlLCBlcnI9JWRcbiIsCisJCQkgIGJ1cy0+Y3RybF9mcmFtZV9lcnIpOworCQlyZXQgPSBidXMtPmN0cmxfZnJhbWVfZXJyOworCX0gZWxzZSB7CisJCWJyY21mX2RiZyhTRElPLCAiY3RybF9mcmFtZSB0aW1lb3V0XG4iKTsKKwkJYnVzLT5jdHJsX2ZyYW1lX3N0YXQgPSBmYWxzZTsKKwkJcmV0ID0gLUVUSU1FRE9VVDsKIAl9CiAKIAlpZiAocmV0KQpAQCAtMjk4Niw3ICsyOTg3LDcgQEAKIAllbHNlCiAJCWJ1cy0+c2RjbnQudHhfY3RscGt0cysrOwogCi0JcmV0dXJuIHJldCA/IC1FSU8gOiAwOworCXJldHVybiByZXQ7CiB9CiAKICNpZmRlZiBERUJVRwpAQCAtMzQwOSw4ICszNDEwLDggQEAKIAkJZ290byBlcnI7CiAJfQogCi0JLyogQWxsb3cgSFQgQ2xvY2sgbm93IHRoYXQgdGhlIEFSTSBpcyBydW5uaW5nLiAqLwotCWJyY21mX2J1c19jaGFuZ2Vfc3RhdGUoYnVzLT5zZGlvZGV2LT5idXNfaWYsIEJSQ01GX0JVU19MT0FEKTsKKwkvKiBBbGxvdyBmdWxsIGRhdGEgY29tbXVuaWNhdGlvbiB1c2luZyBEUEMgZnJvbSBub3cgb24uICovCisJYnVzLT5zZGlvZGV2LT5zdGF0ZSA9IEJSQ01GX1NUQVRFX0RBVEE7CiAJYmNtZXJyb3IgPSAwOwogCiBlcnI6CkBAIC0zNTU2LDcgKzM1NTcsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKCFicmNtZl9idXNfcmVhZHkoYnVzLT5zZGlvZGV2LT5idXNfaWYpKSB7CisJaWYgKGJ1cy0+c2Rpb2Rldi0+c3RhdGUgIT0gQlJDTUZfU1RBVEVfREFUQSkgewogCQlicmNtZl9lcnIoImJ1cyBpcyBkb3duLiB3ZSBoYXZlIG5vdGhpbmcgdG8gZG9cbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtMzU3OSwxMCArMzU4MCw2IEBACiAKIHN0YXRpYyBib29sIGJyY21mX3NkaW9fYnVzX3dhdGNoZG9nKHN0cnVjdCBicmNtZl9zZGlvICpidXMpCiB7Ci0jaWZkZWYgREVCVUcKLQlzdHJ1Y3QgYnJjbWZfYnVzICpidXNfaWYgPSBkZXZfZ2V0X2RydmRhdGEoYnVzLT5zZGlvZGV2LT5kZXYpOwotI2VuZGlmCS8qIERFQlVHICovCi0KIAlicmNtZl9kYmcoVElNRVIsICJFbnRlclxuIik7CiAKIAkvKiBQb2xsIHBlcmlvZDogY2hlY2sgZGV2aWNlIGlmIGFwcHJvcHJpYXRlLiAqLwpAQCAtMzYyNiw3ICszNjIzLDcgQEAKIAl9CiAjaWZkZWYgREVCVUcKIAkvKiBQb2xsIGZvciBjb25zb2xlIG91dHB1dCBwZXJpb2RpY2FsbHkgKi8KLQlpZiAoYnVzX2lmICYmIGJ1c19pZi0+c3RhdGUgPT0gQlJDTUZfQlVTX0RBVEEgJiYKKwlpZiAoYnVzLT5zZGlvZGV2LT5zdGF0ZSA9PSBCUkNNRl9TVEFURV9EQVRBICYmCiAJICAgIGJ1cy0+Y29uc29sZV9pbnRlcnZhbCAhPSAwKSB7CiAJCWJ1cy0+Y29uc29sZS5jb3VudCArPSBCUkNNRl9XRF9QT0xMX01TOwogCQlpZiAoYnVzLT5jb25zb2xlLmNvdW50ID49IGJ1cy0+Y29uc29sZV9pbnRlcnZhbCkgewpAQCAtMzgxMSw3ICszODA4LDcgQEAKIAl1MzIgdmFsLCByZXY7CiAKIAl2YWwgPSBicmNtZl9zZGlvZF9yZWdybChzZGlvZGV2LCBhZGRyLCBOVUxMKTsKLQlpZiAoc2Rpb2Rldi0+ZnVuY1swXS0+ZGV2aWNlID09IEJSQ01fU0RJT180MzM1XzQzMzlfREVWSUNFX0lEICYmCisJaWYgKHNkaW9kZXYtPmZ1bmNbMF0tPmRldmljZSA9PSBTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzM1XzQzMzkgJiYKIAkgICAgYWRkciA9PSBDT1JFX0NDX1JFRyhTSV9FTlVNX0JBU0UsIGNoaXBpZCkpIHsKIAkJcmV2ID0gKHZhbCAmIENJRF9SRVZfTUFTSykgPj4gQ0lEX1JFVl9TSElGVDsKIAkJaWYgKHJldiA+PSAyKSB7CkBAIC0zODY3LDExICszODY0LDYgQEAKIAkJZ290byBmYWlsOwogCX0KIAotCS8qIFNESU8gcmVnaXN0ZXIgYWNjZXNzIHdvcmtzIHNvIG1vdmluZwotCSAqIHN0YXRlIGZyb20gVU5LTk9XTiB0byBET1dOLgotCSAqLwotCWJyY21mX2J1c19jaGFuZ2Vfc3RhdGUoYnVzLT5zZGlvZGV2LT5idXNfaWYsIEJSQ01GX0JVU19ET1dOKTsKLQogCWJ1cy0+Y2kgPSBicmNtZl9jaGlwX2F0dGFjaChidXMtPnNkaW9kZXYsICZicmNtZl9zZGlvX2J1c2NvcmVfb3BzKTsKIAlpZiAoSVNfRVJSKGJ1cy0+Y2kpKSB7CiAJCWJyY21mX2VycigiYnJjbWZfY2hpcF9hdHRhY2ggZmFpbGVkIVxuIik7CkBAIC00MDA1LDE4ICszOTk3LDE2IEBACiAKIAlicmNtZl9kYmcoVFJBQ0UsICJFbnRlcjogZGV2PSVzXG4iLCBkZXZfbmFtZShkZXYpKTsKIAotCS8qIHRyeSB0byBkb3dubG9hZCBpbWFnZSBhbmQgbnZyYW0gdG8gdGhlIGRvbmdsZSAqLwotCWlmIChidXNfaWYtPnN0YXRlID09IEJSQ01GX0JVU19ET1dOKSB7Ci0JCWJ1cy0+YWxwX29ubHkgPSB0cnVlOwotCQllcnIgPSBicmNtZl9zZGlvX2Rvd25sb2FkX2Zpcm13YXJlKGJ1cywgY29kZSwgbnZyYW0sIG52cmFtX2xlbik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGZhaWw7Ci0JCWJ1cy0+YWxwX29ubHkgPSBmYWxzZTsKLQl9Ci0KIAlpZiAoIWJ1c19pZi0+ZHJ2cikKIAkJcmV0dXJuOwogCisJLyogdHJ5IHRvIGRvd25sb2FkIGltYWdlIGFuZCBudnJhbSB0byB0aGUgZG9uZ2xlICovCisJYnVzLT5hbHBfb25seSA9IHRydWU7CisJZXJyID0gYnJjbWZfc2Rpb19kb3dubG9hZF9maXJtd2FyZShidXMsIGNvZGUsIG52cmFtLCBudnJhbV9sZW4pOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDsKKwlidXMtPmFscF9vbmx5ID0gZmFsc2U7CisKIAkvKiBTdGFydCB0aGUgd2F0Y2hkb2cgdGltZXIgKi8KIAlidXMtPnNkY250LnRpY2tjbnQgPSAwOwogCWJyY21mX3NkaW9fd2RfdGltZXIoYnVzLCBCUkNNRl9XRF9QT0xMX01TKTsKQEAgLTQxNDIsNyArNDEzMiw2IEBACiAKIAlzcGluX2xvY2tfaW5pdCgmYnVzLT5yeGN0bF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYnVzLT50eHFfbG9jayk7Ci0Jc2VtYV9pbml0KCZidXMtPnR4X3NlcV9sb2NrLCAxKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZidXMtPmN0cmxfd2FpdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYnVzLT5kY21kX3Jlc3Bfd2FpdCk7CiAKQEAgLTQyMTMsNyArNDIwMiw2IEBACiAJYnVzLT5pZGxlY2xvY2sgPSBCUkNNRl9JRExFX0FDVElWRTsKIAogCS8qIFNSIHN0YXRlICovCi0JYnVzLT5zbGVlcGluZyA9IGZhbHNlOwogCWJ1cy0+c3JfZW5hYmxlZCA9IGZhbHNlOwogCiAJYnJjbWZfc2Rpb19kZWJ1Z2ZzX2NyZWF0ZShidXMpOwpAQCAtNDI1NCw3ICs0MjQyLDcgQEAKIAkJCWRlc3Ryb3lfd29ya3F1ZXVlKGJ1cy0+YnJjbWZfd3EpOwogCiAJCWlmIChidXMtPmNpKSB7Ci0JCQlpZiAoYnVzLT5zZGlvZGV2LT5idXNfaWYtPnN0YXRlID09IEJSQ01GX0JVU19ET1dOKSB7CisJCQlpZiAoYnVzLT5zZGlvZGV2LT5zdGF0ZSAhPSBCUkNNRl9TVEFURV9OT01FRElVTSkgewogCQkJCXNkaW9fY2xhaW1faG9zdChidXMtPnNkaW9kZXYtPmZ1bmNbMV0pOwogCQkJCWJyY21mX3NkaW9fY2xrY3RsKGJ1cywgQ0xLX0FWQUlMLCBmYWxzZSk7CiAJCQkJLyogTGVhdmUgdGhlIGRldmljZSBpbiBzdGF0ZSB3aGVyZSBpdCBpcwpAQCAtNDI4OSw3ICs0Mjc3LDcgQEAKIAl9CiAKIAkvKiBkb24ndCBzdGFydCB0aGUgd2QgdW50aWwgZncgaXMgbG9hZGVkICovCi0JaWYgKGJ1cy0+c2Rpb2Rldi0+YnVzX2lmLT5zdGF0ZSAhPSBCUkNNRl9CVVNfREFUQSkKKwlpZiAoYnVzLT5zZGlvZGV2LT5zdGF0ZSAhPSBCUkNNRl9TVEFURV9EQVRBKQogCQlyZXR1cm47CiAKIAlpZiAod2R0aWNrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL3NkaW8uaAppbmRleCA4ZWI0MjYyLi5lYzI1ODZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvc2Rpby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy9zZGlvLmgKQEAgLTE1NSw2ICsxNTUsMTMgQEAKIC8qIHdhdGNoZG9nIHBvbGxpbmcgaW50ZXJ2YWwgaW4gbXMgKi8KICNkZWZpbmUgQlJDTUZfV0RfUE9MTF9NUwkxMAogCisvKiBUaGUgc3RhdGUgb2YgdGhlIGJ1cyAqLworZW51bSBicmNtZl9zZGlvX3N0YXRlIHsKKwlCUkNNRl9TVEFURV9ET1dOLAkvKiBEZXZpY2UgYXZhaWxhYmxlLCBzdGlsbCBpbml0aWFsaXNpbmcgKi8KKwlCUkNNRl9TVEFURV9EQVRBLAkvKiBSZWFkeSBmb3IgZGF0YSB0cmFuc2ZlcnMsIERQQyBlbmFibGVkICovCisJQlJDTUZfU1RBVEVfTk9NRURJVU0JLyogTm8gbWVkaXVtIGFjY2VzcyB0byBkb25nbGUgcG9zc2libGUgKi8KK307CisKIHN0cnVjdCBicmNtZl9zZHJlZyB7CiAJaW50IGZ1bmM7CiAJaW50IG9mZnNldDsKQEAgLTE2OSw4ICsxNzYsOCBAQAogCXUzMiBzYndhZDsJCQkvKiBTYXZlIGJhY2twbGFuZSB3aW5kb3cgYWRkcmVzcyAqLwogCXN0cnVjdCBicmNtZl9zZGlvICpidXM7CiAJYXRvbWljX3Qgc3VzcGVuZDsJCS8qIHN1c3BlbmQgZmxhZyAqLwotCXdhaXRfcXVldWVfaGVhZF90IHJlcXVlc3Rfd29yZF93YWl0OwotCXdhaXRfcXVldWVfaGVhZF90IHJlcXVlc3RfYnVmZmVyX3dhaXQ7CisJYm9vbCBzbGVlcGluZzsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBpZGxlX3dhaXQ7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCXN0cnVjdCBicmNtZl9idXMgKmJ1c19pZjsKIAlzdHJ1Y3QgYnJjbWZtYWNfc2Rpb19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKQEAgLTE4Nyw2ICsxOTQsNyBAQAogCWNoYXIgZndfbmFtZVtCUkNNRl9GV19QQVRIX0xFTiArIEJSQ01GX0ZXX05BTUVfTEVOXTsKIAljaGFyIG52cmFtX25hbWVbQlJDTUZfRldfUEFUSF9MRU4gKyBCUkNNRl9GV19OQU1FX0xFTl07CiAJYm9vbCB3b3dsX2VuYWJsZWQ7CisJZW51bSBicmNtZl9zZGlvX3N0YXRlIHN0YXRlOwogfTsKIAogLyogc2RpbyBjb3JlIHJlZ2lzdGVycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY21mbWFjL3VzYi5jCmluZGV4IDQ1NzJkZWYuLjVkZjZhYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtZm1hYy91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbWZtYWMvdXNiLmMKQEAgLTQyMSw3ICs0MjEsNyBAQAogCWJyY21mX2VycigiZmFpbCFcbiIpOwogCXdoaWxlICghbGlzdF9lbXB0eShxKSkgewogCQlyZXEgPSBsaXN0X2VudHJ5KHEtPm5leHQsIHN0cnVjdCBicmNtZl91c2JyZXEsIGxpc3QpOwotCQlpZiAocmVxICYmIHJlcS0+dXJiKQorCQlpZiAocmVxKQogCQkJdXNiX2ZyZWVfdXJiKHJlcS0+dXJiKTsKIAkJbGlzdF9kZWwocS0+bmV4dCk7CiAJfQpAQCAtNTc2LDcgKzU3Niw3IEBACiAJCWJyY21mX2J1c19jaGFuZ2Vfc3RhdGUoYmNtZl9idXMsIEJSQ01GX0JVU19ET1dOKTsKIAl9IGVsc2UgaWYgKHN0YXRlID09IEJSQ01GTUFDX1VTQl9TVEFURV9VUCkgewogCQlicmNtZl9kYmcoVVNCLCAiREJVUyBpcyB1cFxuIik7Ci0JCWJyY21mX2J1c19jaGFuZ2Vfc3RhdGUoYmNtZl9idXMsIEJSQ01GX0JVU19EQVRBKTsKKwkJYnJjbWZfYnVzX2NoYW5nZV9zdGF0ZShiY21mX2J1cywgQlJDTUZfQlVTX1VQKTsKIAl9IGVsc2UgewogCQlicmNtZl9kYmcoVVNCLCAiREJVUyBjdXJyZW50IHN0YXRlPSVkXG4iLCBzdGF0ZSk7CiAJfQpAQCAtMTI2Myw2ICsxMjYzLDggQEAKIAkJcmV0ID0gYnJjbWZfdXNiX2J1c19zZXR1cChkZXZpbmZvKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZmFpbDsKKwkJLyogd2UgYXJlIGRvbmUgKi8KKwkJcmV0dXJuIDA7CiAJfQogCWJ1cy0+Y2hpcCA9IGJ1c19wdWItPmRldmlkOwogCWJ1cy0+Y2hpcHJldiA9IGJ1c19wdWItPmNoaXByZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvYnJjbXNtYWMvZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtc21hYy9kZWJ1Zy5jCmluZGV4IGM5YThiOTMuLjdhMWZiYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtc21hYy9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtc21hYy9kZWJ1Zy5jCkBAIC03OCw3ICs3OCw3IEBACiAJc3RydWN0IGJyY21zX2hhcmR3YXJlICpodyA9IGRydnItPndsYy0+aHc7CiAJc3RydWN0IGJjbWFfZGV2aWNlICpjb3JlID0gaHctPmQxMWNvcmU7CiAJc3RydWN0IGJjbWFfYnVzICpidXMgPSBjb3JlLT5idXM7Ci0JY2hhciBib2FyZHJldlsxMF07CisJY2hhciBib2FyZHJldltCUkNNVV9CT0FSRFJFVl9MRU5dOwogCiAJc2VxX3ByaW50ZihzLCAiY2hpcG51bSAweCV4XG4iCiAJCSAgICJjaGlwcmV2IDB4JXhcbiIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9icmNtdXRpbC91dGlscy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY211dGlsL3V0aWxzLmMKaW5kZXggOTA2ZTg5ZC4uMDU0MzYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY211dGlsL3V0aWxzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2JyY211dGlsL3V0aWxzLmMKQEAgLTI2NywxNSArMjY3LDQzIEBACiAJY2hhciBjOwogCiAJaWYgKGJyZXYgPCAweDEwMCkgewotCQlzbnByaW50ZihidWYsIDgsICIlZC4lZCIsIChicmV2ICYgMHhmMCkgPj4gNCwgYnJldiAmIDB4Zik7CisJCXNucHJpbnRmKGJ1ZiwgQlJDTVVfQk9BUkRSRVZfTEVOLCAiJWQuJWQiLAorCQkJIChicmV2ICYgMHhmMCkgPj4gNCwgYnJldiAmIDB4Zik7CiAJfSBlbHNlIHsKIAkJYyA9IChicmV2ICYgMHhmMDAwKSA9PSAweDEwMDAgPyAnUCcgOiAnQSc7Ci0JCXNucHJpbnRmKGJ1ZiwgOCwgIiVjJTAzeCIsIGMsIGJyZXYgJiAweGZmZik7CisJCXNucHJpbnRmKGJ1ZiwgQlJDTVVfQk9BUkRSRVZfTEVOLCAiJWMlMDN4IiwgYywgYnJldiAmIDB4ZmZmKTsKIAl9CiAJcmV0dXJuIGJ1ZjsKIH0KIEVYUE9SVF9TWU1CT0woYnJjbXVfYm9hcmRyZXZfc3RyKTsKIAorY2hhciAqYnJjbXVfZG90cmV2X3N0cih1MzIgZG90cmV2LCBjaGFyICpidWYpCit7CisJdTggZG90dmFsWzRdOworCisJaWYgKCFkb3RyZXYpIHsKKwkJc25wcmludGYoYnVmLCBCUkNNVV9ET1RSRVZfTEVOLCAidW5rbm93biIpOworCQlyZXR1cm4gYnVmOworCX0KKwlkb3R2YWxbMF0gPSAoZG90cmV2ID4+IDI0KSAmIDB4RkY7CisJZG90dmFsWzFdID0gKGRvdHJldiA+PiAxNikgJiAweEZGOworCWRvdHZhbFsyXSA9IChkb3RyZXYgPj4gOCkgJiAweEZGOworCWRvdHZhbFszXSA9IGRvdHJldiAmIDB4RkY7CisKKwlpZiAoZG90dmFsWzNdKQorCQlzbnByaW50ZihidWYsIEJSQ01VX0RPVFJFVl9MRU4sICIlZC4lZC4lZC4lZCIsIGRvdHZhbFswXSwKKwkJCWRvdHZhbFsxXSwgZG90dmFsWzJdLCBkb3R2YWxbM10pOworCWVsc2UgaWYgKGRvdHZhbFsyXSkKKwkJc25wcmludGYoYnVmLCBCUkNNVV9ET1RSRVZfTEVOLCAiJWQuJWQuJWQiLCBkb3R2YWxbMF0sCisJCQlkb3R2YWxbMV0sIGRvdHZhbFsyXSk7CisJZWxzZQorCQlzbnByaW50ZihidWYsIEJSQ01VX0RPVFJFVl9MRU4sICIlZC4lZCIsIGRvdHZhbFswXSwKKwkJCWRvdHZhbFsxXSk7CisKKwlyZXR1cm4gYnVmOworfQorRVhQT1JUX1NZTUJPTChicmNtdV9kb3RyZXZfc3RyKTsKKwogI2lmIGRlZmluZWQoREVCVUcpCiAvKiBwcmV0dHkgaGV4IHByaW50IGEgcGt0IGJ1ZmZlciBjaGFpbiAqLwogdm9pZCBicmNtdV9wcnBrdChjb25zdCBjaGFyICptc2csIHN0cnVjdCBza19idWZmICpwMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9pbmNsdWRlL2JyY21faHdfaWRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvaW5jbHVkZS9icmNtX2h3X2lkcy5oCmluZGV4IDY5OTZmY2MuLjIxMjRhMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9pbmNsdWRlL2JyY21faHdfaWRzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2luY2x1ZGUvYnJjbV9od19pZHMuaApAQCAtMjIsNyArMjIsNiBAQAogCiAjZGVmaW5lIEJSQ01fVVNCX1ZFTkRPUl9JRF9CUk9BRENPTQkweDBhNWMKICNkZWZpbmUgQlJDTV9QQ0lFX1ZFTkRPUl9JRF9CUk9BRENPTQlQQ0lfVkVORE9SX0lEX0JST0FEQ09NCi0jZGVmaW5lIEJSQ01fU0RJT19WRU5ET1JfSURfQlJPQURDT00JU0RJT19WRU5ET1JfSURfQlJPQURDT00KIAogLyogQ2hpcGNvbW1vbiBDb3JlIENoaXAgSURzICovCiAjZGVmaW5lIEJSQ01fQ0NfNDMxNDNfQ0hJUF9JRAkJNDMxNDMKQEAgLTM0LDYgKzMzLDcgQEAKICNkZWZpbmUgQlJDTV9DQ180MzI5X0NISVBfSUQJCTB4NDMyOQogI2RlZmluZSBCUkNNX0NDXzQzMzBfQ0hJUF9JRAkJMHg0MzMwCiAjZGVmaW5lIEJSQ01fQ0NfNDMzNF9DSElQX0lECQkweDQzMzQKKyNkZWZpbmUgQlJDTV9DQ180MzM0MF9DSElQX0lECQk0MzM0MAogI2RlZmluZSBCUkNNX0NDXzQzMzYyX0NISVBfSUQJCTQzMzYyCiAjZGVmaW5lIEJSQ01fQ0NfNDMzNV9DSElQX0lECQkweDQzMzUKICNkZWZpbmUgQlJDTV9DQ180MzM5X0NISVBfSUQJCTB4NDMzOQpAQCAtNDUsMTYgKzQ1LDYgQEAKICNkZWZpbmUgQlJDTV9DQ180MzU3MF9DSElQX0lECQk0MzU3MAogI2RlZmluZSBCUkNNX0NDXzQzNjAyX0NISVBfSUQJCTQzNjAyCiAKLS8qIFNESU8gRGV2aWNlIElEcyAqLwotI2RlZmluZSBCUkNNX1NESU9fNDMxNDNfREVWSUNFX0lECUJSQ01fQ0NfNDMxNDNfQ0hJUF9JRAotI2RlZmluZSBCUkNNX1NESU9fNDMyNDFfREVWSUNFX0lECUJSQ01fQ0NfNDMyNDFfQ0hJUF9JRAotI2RlZmluZSBCUkNNX1NESU9fNDMyOV9ERVZJQ0VfSUQJQlJDTV9DQ180MzI5X0NISVBfSUQKLSNkZWZpbmUgQlJDTV9TRElPXzQzMzBfREVWSUNFX0lECUJSQ01fQ0NfNDMzMF9DSElQX0lECi0jZGVmaW5lIEJSQ01fU0RJT180MzM0X0RFVklDRV9JRAlCUkNNX0NDXzQzMzRfQ0hJUF9JRAotI2RlZmluZSBCUkNNX1NESU9fNDMzNjJfREVWSUNFX0lECUJSQ01fQ0NfNDMzNjJfQ0hJUF9JRAotI2RlZmluZSBCUkNNX1NESU9fNDMzNV80MzM5X0RFVklDRV9JRAlCUkNNX0NDXzQzMzVfQ0hJUF9JRAotI2RlZmluZSBCUkNNX1NESU9fNDM1NF9ERVZJQ0VfSUQJQlJDTV9DQ180MzU0X0NISVBfSUQKLQogLyogVVNCIERldmljZSBJRHMgKi8KICNkZWZpbmUgQlJDTV9VU0JfNDMxNDNfREVWSUNFX0lECTB4YmQxZQogI2RlZmluZSBCUkNNX1VTQl80MzIzNl9ERVZJQ0VfSUQJMHhiZDE3CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvaW5jbHVkZS9icmNtdV91dGlscy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJjbTgwMjExL2luY2x1ZGUvYnJjbXVfdXRpbHMuaAppbmRleCBhMDQzZTI5Li40MTk2OTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9icmNtODAyMTEvaW5jbHVkZS9icmNtdV91dGlscy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JyY204MDIxMS9pbmNsdWRlL2JyY211X3V0aWxzLmgKQEAgLTIxOCw2ICsyMTgsMTAgQEAKIH0KICNlbmRpZgogCisjZGVmaW5lIEJSQ01VX0JPQVJEUkVWX0xFTgk4CisjZGVmaW5lIEJSQ01VX0RPVFJFVl9MRU4JMTYKKwogY2hhciAqYnJjbXVfYm9hcmRyZXZfc3RyKHUzMiBicmV2LCBjaGFyICpidWYpOworY2hhciAqYnJjbXVfZG90cmV2X3N0cih1MzIgZG90cmV2LCBjaGFyICpidWYpOwogCiAjZW5kaWYJCQkJLyogX0JSQ01VX1VUSUxTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9jdzEyMDAvZndpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvY3cxMjAwL2Z3aW8uYwppbmRleCA2ZjFiOWFhLi4zMGU3NjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9jdzEyMDAvZndpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2N3MTIwMC9md2lvLmMKQEAgLTY2LDI1ICs2NiwzMSBAQAogCWRvIHsgXAogCQlyZXQgPSBjdzEyMDBfYXBiX3dyaXRlXzMyKHByaXYsIENXMTIwMF9BUEIocmVnKSwgKHZhbCkpOyBcCiAJCWlmIChyZXQgPCAwKSBcCi0JCQlnb3RvIGVycm9yOyBcCisJCQlnb3RvIGV4aXQ7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBBUEJfV1JJVEUyKHJlZywgdmFsKSBcCisJZG8geyBcCisJCXJldCA9IGN3MTIwMF9hcGJfd3JpdGVfMzIocHJpdiwgQ1cxMjAwX0FQQihyZWcpLCAodmFsKSk7IFwKKwkJaWYgKHJldCA8IDApIFwKKwkJCWdvdG8gZnJlZV9idWZmZXI7IFwKIAl9IHdoaWxlICgwKQogI2RlZmluZSBBUEJfUkVBRChyZWcsIHZhbCkgXAogCWRvIHsgXAogCQlyZXQgPSBjdzEyMDBfYXBiX3JlYWRfMzIocHJpdiwgQ1cxMjAwX0FQQihyZWcpLCAmKHZhbCkpOyBcCiAJCWlmIChyZXQgPCAwKSBcCi0JCQlnb3RvIGVycm9yOyBcCisJCQlnb3RvIGZyZWVfYnVmZmVyOyBcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgUkVHX1dSSVRFKHJlZywgdmFsKSBcCiAJZG8geyBcCiAJCXJldCA9IGN3MTIwMF9yZWdfd3JpdGVfMzIocHJpdiwgKHJlZyksICh2YWwpKTsgXAogCQlpZiAocmV0IDwgMCkgXAotCQkJZ290byBlcnJvcjsgXAorCQkJZ290byBleGl0OyBcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgUkVHX1JFQUQocmVnLCB2YWwpIFwKIAlkbyB7IFwKIAkJcmV0ID0gY3cxMjAwX3JlZ19yZWFkXzMyKHByaXYsIChyZWcpLCAmKHZhbCkpOyBcCiAJCWlmIChyZXQgPCAwKSBcCi0JCQlnb3RvIGVycm9yOyBcCisJCQlnb3RvIGV4aXQ7IFwKIAl9IHdoaWxlICgwKQogCiAJc3dpdGNoIChwcml2LT5od19yZXZpc2lvbikgewpAQCAtMTQyLDE0ICsxNDgsMTQgQEAKIAlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmaXJtd2FyZSwgZndfcGF0aCwgcHJpdi0+cGRldik7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoIkNhbid0IGxvYWQgZmlybXdhcmUgZmlsZSAlcy5cbiIsIGZ3X3BhdGgpOwotCQlnb3RvIGVycm9yOworCQlnb3RvIGV4aXQ7CiAJfQogCiAJYnVmID0ga21hbGxvYyhET1dOTE9BRF9CTE9DS19TSVpFLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CiAJaWYgKCFidWYpIHsKIAkJcHJfZXJyKCJDYW4ndCBhbGxvY2F0ZSBmaXJtd2FyZSBsb2FkIGJ1ZmZlci5cbiIpOwogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOworCQlnb3RvIGZpcm13YXJlX3JlbGVhc2U7CiAJfQogCiAJLyogQ2hlY2sgaWYgdGhlIGJvb3Rsb2FkZXIgaXMgcmVhZHkgKi8KQEAgLTE2Myw3ICsxNjksNyBAQAogCWlmICh2YWwzMiAhPSBET1dOTE9BRF9JX0FNX0hFUkUpIHsKIAkJcHJfZXJyKCJCb290bG9hZGVyIGlzIG5vdCByZWFkeS5cbiIpOwogCQlyZXQgPSAtRVRJTUVET1VUOwotCQlnb3RvIGVycm9yOworCQlnb3RvIGZyZWVfYnVmZmVyOwogCX0KIAogCS8qIENhbGN1bGNhdGUgbnVtYmVyIG9mIGRvd25sb2FkIGJsb2NrcyAqLwpAQCAtMTcxLDcgKzE3Nyw3IEBACiAKIAkvKiBVcGRhdGluZyB0aGUgbGVuZ3RoIGluIERvd25sb2FkIEN0cmwgQXJlYSAqLwogCXZhbDMyID0gZmlybXdhcmUtPnNpemU7IC8qIEV4cGxpY2l0IGNhc3QgZnJvbSBzaXplX3QgdG8gdTMyICovCi0JQVBCX1dSSVRFKERPV05MT0FEX0lNQUdFX1NJWkVfUkVHLCB2YWwzMik7CisJQVBCX1dSSVRFMihET1dOTE9BRF9JTUFHRV9TSVpFX1JFRywgdmFsMzIpOwogCiAJLyogRmlybXdhcmUgZG93bmxvYWRpbmcgbG9vcCAqLwogCWZvciAoYmxvY2sgPSAwOyBibG9jayA8IG51bV9ibG9ja3M7IGJsb2NrKyspIHsKQEAgLTE4Myw3ICsxODksNyBAQAogCQlpZiAodmFsMzIgIT0gRE9XTkxPQURfUEVORElORykgewogCQkJcHJfZXJyKCJCb290bG9hZGVyIHJlcG9ydGVkIGVycm9yICVkLlxuIiwgdmFsMzIpOwogCQkJcmV0ID0gLUVJTzsKLQkJCWdvdG8gZXJyb3I7CisJCQlnb3RvIGZyZWVfYnVmZmVyOwogCQl9CiAKIAkJLyogbG9vcCB1bnRpbCBwdXQgLSBnZXQgPD0gMjRLICovCkBAIC0xOTgsNyArMjA0LDcgQEAKIAkJaWYgKChwdXQgLSBnZXQpID4gKERPV05MT0FEX0ZJRk9fU0laRSAtIERPV05MT0FEX0JMT0NLX1NJWkUpKSB7CiAJCQlwcl9lcnIoIlRpbWVvdXQgd2FpdGluZyBmb3IgRklGTy5cbiIpOwogCQkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJCWdvdG8gZXJyb3I7CisJCQlnb3RvIGZyZWVfYnVmZmVyOwogCQl9CiAKIAkJLyogY2FsY3VsYXRlIHRoZSBibG9jayBzaXplICovCkBAIC0yMjAsMTIgKzIyNiwxMiBAQAogCQlpZiAocmV0IDwgMCkgewogCQkJcHJfZXJyKCJDYW4ndCB3cml0ZSBmaXJtd2FyZSBibG9jayBAICVkIVxuIiwKIAkJCSAgICAgICBwdXQgJiAoRE9XTkxPQURfRklGT19TSVpFIC0gMSkpOwotCQkJZ290byBlcnJvcjsKKwkJCWdvdG8gZnJlZV9idWZmZXI7CiAJCX0KIAogCQkvKiB1cGRhdGUgdGhlIHB1dCByZWdpc3RlciAqLwogCQlwdXQgKz0gYmxvY2tfc2l6ZTsKLQkJQVBCX1dSSVRFKERPV05MT0FEX1BVVF9SRUcsIHB1dCk7CisJCUFQQl9XUklURTIoRE9XTkxPQURfUFVUX1JFRywgcHV0KTsKIAl9IC8qIEVuZCBvZiBmaXJtd2FyZSBkb3dubG9hZCBsb29wICovCiAKIAkvKiBXYWl0IGZvciB0aGUgZG93bmxvYWQgY29tcGxldGlvbiAqLwpAQCAtMjM4LDE5ICsyNDQsMjEgQEAKIAlpZiAodmFsMzIgIT0gRE9XTkxPQURfU1VDQ0VTUykgewogCQlwcl9lcnIoIldhaXQgZm9yIGRvd25sb2FkIGNvbXBsZXRpb24gZmFpbGVkOiAweCUuOFhcbiIsIHZhbDMyKTsKIAkJcmV0ID0gLUVUSU1FRE9VVDsKLQkJZ290byBlcnJvcjsKKwkJZ290byBmcmVlX2J1ZmZlcjsKIAl9IGVsc2UgewogCQlwcl9pbmZvKCJGaXJtd2FyZSBkb3dubG9hZCBjb21wbGV0ZWQuXG4iKTsKIAkJcmV0ID0gMDsKIAl9CiAKLWVycm9yOgorZnJlZV9idWZmZXI6CiAJa2ZyZWUoYnVmKTsKLQlpZiAoZmlybXdhcmUpCi0JCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOworZmlybXdhcmVfcmVsZWFzZToKKwlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKK2V4aXQ6CiAJcmV0dXJuIHJldDsKIAogI3VuZGVmIEFQQl9XUklURQorI3VuZGVmIEFQQl9XUklURTIKICN1bmRlZiBBUEJfUkVBRAogI3VuZGVmIFJFR19XUklURQogI3VuZGVmIFJFR19SRUFECmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9jdzEyMDAvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvY3cxMjAwL21haW4uYwppbmRleCAzZTc4Y2MzLi4zNjg5ZGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9jdzEyMDAvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2N3MTIwMC9tYWluLmMKQEAgLTI4Miw3ICsyODIsNiBAQAogCQkgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKIAkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTIHwKIAkJICAgIElFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMgfAotCQkgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1VBUFNEIHwKIAkJICAgIElFRUU4MDIxMV9IV19DT05ORUNUSU9OX01PTklUT1IgfAogCQkgICAgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKIAkJICAgIElFRUU4MDIxMV9IV19UWF9BTVBEVV9TRVRVUF9JTl9IVyB8CkBAIC0zNzQsOSArMzczLDggQEAKIAlJTklUX1dPUksoJnByaXYtPnVwZGF0ZV9maWx0ZXJpbmdfd29yaywgY3cxMjAwX3VwZGF0ZV9maWx0ZXJpbmdfd29yayk7CiAJSU5JVF9XT1JLKCZwcml2LT5zZXRfYmVhY29uX3dha2V1cF9wZXJpb2Rfd29yaywKIAkJICBjdzEyMDBfc2V0X2JlYWNvbl93YWtldXBfcGVyaW9kX3dvcmspOwotCWluaXRfdGltZXIoJnByaXYtPm1jYXN0X3RpbWVvdXQpOwotCXByaXYtPm1jYXN0X3RpbWVvdXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXByaXY7Ci0JcHJpdi0+bWNhc3RfdGltZW91dC5mdW5jdGlvbiA9IGN3MTIwMF9tY2FzdF90aW1lb3V0OworCXNldHVwX3RpbWVyKCZwcml2LT5tY2FzdF90aW1lb3V0LCBjdzEyMDBfbWNhc3RfdGltZW91dCwKKwkJICAgICh1bnNpZ25lZCBsb25nKXByaXYpOwogCiAJaWYgKGN3MTIwMF9xdWV1ZV9zdGF0c19pbml0KCZwcml2LT50eF9xdWV1ZV9zdGF0cywKIAkJCQkgICAgQ1cxMjAwX0xJTktfSURfTUFYLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvY3cxMjAwL3BtLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9jdzEyMDAvcG0uYwppbmRleCA2OTA3YzhmLi5kMjIwMmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9jdzEyMDAvcG0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9jdzEyMDAvcG0uYwpAQCAtMTAxLDkgKzEwMSw4IEBACiB7CiAJc3Bpbl9sb2NrX2luaXQoJnBtLT5sb2NrKTsKIAotCWluaXRfdGltZXIoJnBtLT5zdGF5X2F3YWtlKTsKLQlwbS0+c3RheV9hd2FrZS5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcG07Ci0JcG0tPnN0YXlfYXdha2UuZnVuY3Rpb24gPSBjdzEyMDBfcG1fc3RheV9hd2FrZV90bW87CisJc2V0dXBfdGltZXIoJnBtLT5zdGF5X2F3YWtlLCBjdzEyMDBfcG1fc3RheV9hd2FrZV90bW8sCisJCSAgICAodW5zaWduZWQgbG9uZylwbSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2N3MTIwMC9xdWV1ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvY3cxMjAwL3F1ZXVlLmMKaW5kZXggOWMzOTI1Zi4uMGJhNWVmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvY3cxMjAwL3F1ZXVlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvY3cxMjAwL3F1ZXVlLmMKQEAgLTE3OSw5ICsxNzksNyBAQAogCUlOSVRfTElTVF9IRUFEKCZxdWV1ZS0+cGVuZGluZyk7CiAJSU5JVF9MSVNUX0hFQUQoJnF1ZXVlLT5mcmVlX3Bvb2wpOwogCXNwaW5fbG9ja19pbml0KCZxdWV1ZS0+bG9jayk7Ci0JaW5pdF90aW1lcigmcXVldWUtPmdjKTsKLQlxdWV1ZS0+Z2MuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXF1ZXVlOwotCXF1ZXVlLT5nYy5mdW5jdGlvbiA9IGN3MTIwMF9xdWV1ZV9nYzsKKwlzZXR1cF90aW1lcigmcXVldWUtPmdjLCBjdzEyMDBfcXVldWVfZ2MsICh1bnNpZ25lZCBsb25nKXF1ZXVlKTsKIAogCXF1ZXVlLT5wb29sID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGN3MTIwMF9xdWV1ZV9pdGVtKSAqIGNhcGFjaXR5LAogCQkJR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9jdzEyMDAvc2Nhbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvY3cxMjAwL3NjYW4uYwppbmRleCBmMmUyNzZmLi5iZmY4MWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9jdzEyMDAvc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2N3MTIwMC9zY2FuLmMKQEAgLTM5LDkgKzM5LDkgQEAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmNsZWFyX3JlY2VudF9zY2FuX3dvcmspOwogCWF0b21pY19zZXQoJnByaXYtPnNjYW4uaW5fcHJvZ3Jlc3MsIDEpOwogCWF0b21pY19zZXQoJnByaXYtPnJlY2VudF9zY2FuLCAxKTsKLQljdzEyMDBfcG1fc3RheV9hd2FrZSgmcHJpdi0+cG1fc3RhdGUsIHRtbyAqIEhaIC8gMTAwMCk7CisJY3cxMjAwX3BtX3N0YXlfYXdha2UoJnByaXYtPnBtX3N0YXRlLCBtc2Vjc190b19qaWZmaWVzKHRtbykpOwogCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsICZwcml2LT5zY2FuLnRpbWVvdXQsCi0JCQkgICB0bW8gKiBIWiAvIDEwMDApOworCQkJICAgbXNlY3NfdG9famlmZmllcyh0bW8pKTsKIAlyZXQgPSB3c21fc2Nhbihwcml2LCBzY2FuKTsKIAlpZiAocmV0KSB7CiAJCWF0b21pY19zZXQoJnByaXYtPnNjYW4uaW5fcHJvZ3Jlc3MsIDApOwpAQCAtMzg2LDggKzM4Niw4IEBACiAJaWYgKGRvd25fdHJ5bG9jaygmcHJpdi0+c2Nhbi5sb2NrKSkgewogCQkvKiBTY2FuIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MuIFJlcXVldWUgc2VsZi4gKi8KIAkJc2NoZWR1bGUoKTsKLQkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwKLQkJCQkgICAmcHJpdi0+c2Nhbi5wcm9iZV93b3JrLCBIWiAvIDEwKTsKKwkJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNjYW4ucHJvYmVfd29yaywKKwkJCQkgICBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwogCQltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvY3cxMjAwL3N0YS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvY3cxMjAwL3N0YS5jCmluZGV4IDViODQ2NjQuLjRhNDdjN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2N3MTIwMC9zdGEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9jdzEyMDAvc3RhLmMKQEAgLTIxMyw2ICsyMTMsNyBAQAogCS8qIF9fbGUzMiBhdXRvX2NhbGlicmF0aW9uX21vZGUgPSBfX2NwdV90b19sZTMyKDEpOyAqLwogCiAJdmlmLT5kcml2ZXJfZmxhZ3MgfD0gSUVFRTgwMjExX1ZJRl9CRUFDT05fRklMVEVSIHwKKwkJCSAgICAgSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19VQVBTRCB8CiAJCQkgICAgIElFRUU4MDIxMV9WSUZfU1VQUE9SVFNfQ1FNX1JTU0k7CiAKIAltdXRleF9sb2NrKCZwcml2LT5jb25mX211dGV4KTsKQEAgLTcwOCw3ICs3MDksOCBAQAogCQlpZiAoc3RhKQogCQkJcGVlcl9hZGRyID0gc3RhLT5hZGRyOwogCi0JCWtleS0+ZmxhZ3MgfD0gSUVFRTgwMjExX0tFWV9GTEFHX1BVVF9JVl9TUEFDRTsKKwkJa2V5LT5mbGFncyB8PSBJRUVFODAyMTFfS0VZX0ZMQUdfUFVUX0lWX1NQQUNFIHwKKwkJCSAgICAgIElFRUU4MDIxMV9LRVlfRkxBR19SRVNFUlZFX1RBSUxST09NOwogCiAJCXN3aXRjaCAoa2V5LT5jaXBoZXIpIHsKIAkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfYXAuYwppbmRleCA1OTY1MjU1Li5mZDhkODNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2FwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9hcC5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlpZiAoc3RhLT5haWQgPiAwKQogCQlhcC0+c3RhX2FpZFtzdGEtPmFpZCAtIDFdID0gTlVMTDsKIAotCWlmICghc3RhLT5hcCAmJiBzdGEtPnUuc3RhLmNoYWxsZW5nZSkKKwlpZiAoIXN0YS0+YXApCiAJCWtmcmVlKHN0YS0+dS5zdGEuY2hhbGxlbmdlKTsKIAlkZWxfdGltZXJfc3luYygmc3RhLT50aW1lcik7CiAjZW5kaWYgLyogUFJJU00yX05PX0tFUk5FTF9JRUVFODAyMTFfTUdNVCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvMzk0NS1tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5LzM5NDUtbWFjLmMKaW5kZXggZGMxZDIwYy4uZTU2NjU4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvMzk0NS1tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS8zOTQ1LW1hYy5jCkBAIC0zNDI5LDkgKzM0MjksNyBAQAogCiAJaWwzOTQ1X2h3X3NldHVwX2RlZmVycmVkX3dvcmsoaWwpOwogCi0JaW5pdF90aW1lcigmaWwtPndhdGNoZG9nKTsKLQlpbC0+d2F0Y2hkb2cuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWlsOwotCWlsLT53YXRjaGRvZy5mdW5jdGlvbiA9IGlsX2JnX3dhdGNoZG9nOworCXNldHVwX3RpbWVyKCZpbC0+d2F0Y2hkb2csIGlsX2JnX3dhdGNoZG9nLCAodW5zaWduZWQgbG9uZylpbCk7CiAKIAl0YXNrbGV0X2luaXQoJmlsLT5pcnFfdGFza2xldCwKIAkJICAgICAodm9pZCAoKikodW5zaWduZWQgbG9uZykpaWwzOTQ1X2lycV90YXNrbGV0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvNDk2NS1tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5LzQ5NjUtbWFjLmMKaW5kZXggMjc0OGZkZS4uOTc2ZjY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvNDk2NS1tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS80OTY1LW1hYy5jCkBAIC02MjQ3LDEzICs2MjQ3LDEwIEBACiAKIAlJTklUX1dPUksoJmlsLT50eHBvd2VyX3dvcmssIGlsNDk2NV9iZ190eHBvd2VyX3dvcmspOwogCi0JaW5pdF90aW1lcigmaWwtPnN0YXRzX3BlcmlvZGljKTsKLQlpbC0+c3RhdHNfcGVyaW9kaWMuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWlsOwotCWlsLT5zdGF0c19wZXJpb2RpYy5mdW5jdGlvbiA9IGlsNDk2NV9iZ19zdGF0c19wZXJpb2RpYzsKKwlzZXR1cF90aW1lcigmaWwtPnN0YXRzX3BlcmlvZGljLCBpbDQ5NjVfYmdfc3RhdHNfcGVyaW9kaWMsCisJCSAgICAodW5zaWduZWQgbG9uZylpbCk7CiAKLQlpbml0X3RpbWVyKCZpbC0+d2F0Y2hkb2cpOwotCWlsLT53YXRjaGRvZy5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaWw7Ci0JaWwtPndhdGNoZG9nLmZ1bmN0aW9uID0gaWxfYmdfd2F0Y2hkb2c7CisJc2V0dXBfdGltZXIoJmlsLT53YXRjaGRvZywgaWxfYmdfd2F0Y2hkb2csICh1bnNpZ25lZCBsb25nKWlsKTsKIAogCXRhc2tsZXRfaW5pdCgmaWwtPmlycV90YXNrbGV0LAogCQkgICAgICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSlpbDQ5NjVfaXJxX3Rhc2tsZXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2R2bS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2R2bS9tYWluLmMKaW5kZXggMGI3ZjQ2Zi4uYzRkNmRkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9kdm0vbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvZHZtL21haW4uYwpAQCAtNjQsMjIgKzY0LDggQEAKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKgotICogbW9kdWxlIG5hbWUsIGNvcHlyaWdodCwgdmVyc2lvbiwgZXRjLgotICovCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkiSW50ZWwoUikgV2lyZWxlc3MgV2lGaSBMaW5rIEFHTiBkcml2ZXIgZm9yIExpbnV4IgotCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKLSNkZWZpbmUgVkQgImQiCi0jZWxzZQotI2RlZmluZSBWRAotI2VuZGlmCi0KLSNkZWZpbmUgRFJWX1ZFUlNJT04gICAgIElXTFdJRklfVkVSU0lPTiBWRAotCi0KIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwotTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogTU9EVUxFX0FVVEhPUihEUlZfQ09QWVJJR0hUICIgIiBEUlZfQVVUSE9SKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApAQCAtMTAxMSwxMyArOTk3LDExIEBACiAJaWYgKHByaXYtPmxpYi0+YnRfcGFyYW1zKQogCQlpd2xhZ25fYnRfc2V0dXBfZGVmZXJyZWRfd29yayhwcml2KTsKIAotCWluaXRfdGltZXIoJnByaXYtPnN0YXRpc3RpY3NfcGVyaW9kaWMpOwotCXByaXYtPnN0YXRpc3RpY3NfcGVyaW9kaWMuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXByaXY7Ci0JcHJpdi0+c3RhdGlzdGljc19wZXJpb2RpYy5mdW5jdGlvbiA9IGl3bF9iZ19zdGF0aXN0aWNzX3BlcmlvZGljOworCXNldHVwX3RpbWVyKCZwcml2LT5zdGF0aXN0aWNzX3BlcmlvZGljLCBpd2xfYmdfc3RhdGlzdGljc19wZXJpb2RpYywKKwkJICAgICh1bnNpZ25lZCBsb25nKXByaXYpOwogCi0JaW5pdF90aW1lcigmcHJpdi0+dWNvZGVfdHJhY2UpOwotCXByaXYtPnVjb2RlX3RyYWNlLmRhdGEgPSAodW5zaWduZWQgbG9uZylwcml2OwotCXByaXYtPnVjb2RlX3RyYWNlLmZ1bmN0aW9uID0gaXdsX2JnX3Vjb2RlX3RyYWNlOworCXNldHVwX3RpbWVyKCZwcml2LT51Y29kZV90cmFjZSwgaXdsX2JnX3Vjb2RlX3RyYWNlLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpcHJpdik7CiB9CiAKIHZvaWQgaXdsX2NhbmNlbF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKQEAgLTEyNDQsMTEgKzEyMjgsOCBAQAogCXRyYW5zX2NmZy5ub19yZWNsYWltX2NtZHMgPSBub19yZWNsYWltX2NtZHM7CiAJdHJhbnNfY2ZnLm5fbm9fcmVjbGFpbV9jbWRzID0gQVJSQVlfU0laRShub19yZWNsYWltX2NtZHMpOwogCXRyYW5zX2NmZy5yeF9idWZfc2l6ZV84ayA9IGl3bHdpZmlfbW9kX3BhcmFtcy5hbXNkdV9zaXplXzhLOwotCWlmICghaXdsd2lmaV9tb2RfcGFyYW1zLndkX2Rpc2FibGUpCi0JCXRyYW5zX2NmZy5xdWV1ZV93YXRjaGRvZ190aW1lb3V0ID0KLQkJCXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPndkX3RpbWVvdXQ7Ci0JZWxzZQotCQl0cmFuc19jZmcucXVldWVfd2F0Y2hkb2dfdGltZW91dCA9IElXTF9XQVRDSERPR19ESVNBQkxFRDsKKwl0cmFuc19jZmcuY21kX3Ffd2RnX3RpbWVvdXQgPSBJV0xfV0FUQ0hET0dfRElTQUJMRUQ7CisKIAl0cmFuc19jZmcuY29tbWFuZF9uYW1lcyA9IGl3bF9kdm1fY21kX3N0cmluZ3M7CiAJdHJhbnNfY2ZnLmNtZF9maWZvID0gSVdMQUdOX0NNRF9GSUZPX05VTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9kdm0vdHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvZHZtL3R0LmMKaW5kZXggYWNiOTgxYS4uYzQ3MzZjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9kdm0vdHQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2R2bS90dC5jCkBAIC02MTIsMTUgKzYxMiwxMCBAQAogCW1lbXNldCh0dCwgMCwgc2l6ZW9mKHN0cnVjdCBpd2xfdHRfbWdtdCkpOwogCiAJdHQtPnN0YXRlID0gSVdMX1RJXzA7Ci0JaW5pdF90aW1lcigmcHJpdi0+dGhlcm1hbF90aHJvdHRsZS5jdF9raWxsX2V4aXRfdG0pOwotCXByaXYtPnRoZXJtYWxfdGhyb3R0bGUuY3Rfa2lsbF9leGl0X3RtLmRhdGEgPSAodW5zaWduZWQgbG9uZylwcml2OwotCXByaXYtPnRoZXJtYWxfdGhyb3R0bGUuY3Rfa2lsbF9leGl0X3RtLmZ1bmN0aW9uID0KLQkJaXdsX3R0X2NoZWNrX2V4aXRfY3Rfa2lsbDsKLQlpbml0X3RpbWVyKCZwcml2LT50aGVybWFsX3Rocm90dGxlLmN0X2tpbGxfd2FpdGluZ190bSk7Ci0JcHJpdi0+dGhlcm1hbF90aHJvdHRsZS5jdF9raWxsX3dhaXRpbmdfdG0uZGF0YSA9Ci0JCSh1bnNpZ25lZCBsb25nKXByaXY7Ci0JcHJpdi0+dGhlcm1hbF90aHJvdHRsZS5jdF9raWxsX3dhaXRpbmdfdG0uZnVuY3Rpb24gPQotCQlpd2xfdHRfcmVhZHlfZm9yX2N0X2tpbGw7CisJc2V0dXBfdGltZXIoJnByaXYtPnRoZXJtYWxfdGhyb3R0bGUuY3Rfa2lsbF9leGl0X3RtLAorCQkgICAgaXdsX3R0X2NoZWNrX2V4aXRfY3Rfa2lsbCwgKHVuc2lnbmVkIGxvbmcpcHJpdik7CisJc2V0dXBfdGltZXIoJnByaXYtPnRoZXJtYWxfdGhyb3R0bGUuY3Rfa2lsbF93YWl0aW5nX3RtLAorCQkgICAgaXdsX3R0X3JlYWR5X2Zvcl9jdF9raWxsLCAodW5zaWduZWQgbG9uZylwcml2KTsKIAkvKiBzZXR1cCBkZWZlcnJlZCBjdCBraWxsIHdvcmsgKi8KIAlJTklUX1dPUksoJnByaXYtPnR0X3dvcmssIGl3bF9iZ190dF93b3JrKTsKIAlJTklUX1dPUksoJnByaXYtPmN0X2VudGVyLCBpd2xfYmdfY3RfZW50ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9kdm0vdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvZHZtL3R4LmMKaW5kZXggZDFjZTNjZS4uMWU0MGExMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9kdm0vdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2R2bS90eC5jCkBAIC03MTUsNyArNzE1LDcgQEAKIAlmaWZvID0gY3R4LT5hY190b19maWZvW3RpZF90b19hY1t0aWRdXTsKIAogCWl3bF90cmFuc190eHFfZW5hYmxlKHByaXYtPnRyYW5zLCBxLCBmaWZvLCBzdGFfcHJpdi0+c3RhX2lkLCB0aWQsCi0JCQkgICAgIGJ1Zl9zaXplLCBzc24pOworCQkJICAgICBidWZfc2l6ZSwgc3NuLCAwKTsKIAogCS8qCiAJICogSWYgdGhlIGxpbWl0IGlzIDAsIHRoZW4gaXQgd2Fzbid0IGluaXRpYWxpc2VkIHlldCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvZHZtL3Vjb2RlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2R2bS91Y29kZS5jCmluZGV4IGQ1Y2VlMTUuLjRkYmVmN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvZHZtL3Vjb2RlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9kdm0vdWNvZGUuYwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAJZm9yIChpID0gMDsgaSA8IG5fcXVldWVzOyBpKyspCiAJCWlmIChxdWV1ZV90b190eGZbaV0gIT0gSVdMX1RYX0ZJRk9fVU5VU0VEKQogCQkJaXdsX3RyYW5zX2FjX3R4cV9lbmFibGUocHJpdi0+dHJhbnMsIGksCi0JCQkJCQlxdWV1ZV90b190eGZbaV0pOworCQkJCQkJcXVldWVfdG9fdHhmW2ldLCAwKTsKIAogCXByaXYtPnBhc3NpdmVfbm9fcnggPSBmYWxzZTsKIAlwcml2LT50cmFuc3BvcnRfcXVldWVfc3RvcCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC03MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC03MDAwLmMKaW5kZXggYTVmOTE5OC4uOTdlMzhkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNzAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTcwMDAuYwpAQCAtOTIsNiArOTIsMTIgQEAKICNkZWZpbmUgSVdMNzI2NURfTlZNX1ZFUlNJT04JCTB4MGMxMQogI2RlZmluZSBJV0w3MjY1X1RYX1BPV0VSX1ZFUlNJT04JMHhmZmZmIC8qIG1lYW5pbmdsZXNzICovCiAKKy8qIERDQ00gb2Zmc2V0cyBhbmQgbGVuZ3RocyAqLworI2RlZmluZSBJV0w3MDAwX0RDQ01fT0ZGU0VUCQkweDgwMDAwMAorI2RlZmluZSBJV0w3MjYwX0RDQ01fTEVOCQkweDE0MDAwCisjZGVmaW5lIElXTDMxNjBfRENDTV9MRU4JCTB4MTAwMDAKKyNkZWZpbmUgSVdMNzI2NV9EQ0NNX0xFTgkJMHgxN0EwMAorCiAjZGVmaW5lIElXTDcyNjBfRldfUFJFICJpd2x3aWZpLTcyNjAtIgogI2RlZmluZSBJV0w3MjYwX01PRFVMRV9GSVJNV0FSRShhcGkpIElXTDcyNjBfRldfUFJFIF9fc3RyaW5naWZ5KGFwaSkgIi51Y29kZSIKIApAQCAtMTM4LDcgKzE0NCw4IEBACiAJLmxlZF9tb2RlID0gSVdMX0xFRF9SRl9TVEFURSwJCQkJXAogCS5udm1faHdfc2VjdGlvbl9udW0gPSBOVk1fSFdfU0VDVElPTl9OVU1fRkFNSUxZXzcwMDAsCVwKIAkubm9uX3NoYXJlZF9hbnQgPSBBTlRfQSwJCQkJXAotCS5tYXhfaHRfYW1wZHVfZXhwb25lbnQgPSBJRUVFODAyMTFfSFRfTUFYX0FNUERVXzY0SworCS5tYXhfaHRfYW1wZHVfZXhwb25lbnQgPSBJRUVFODAyMTFfSFRfTUFYX0FNUERVXzY0SywJXAorCS5kY2NtX29mZnNldCA9IElXTDcwMDBfRENDTV9PRkZTRVQKIAogY29uc3Qgc3RydWN0IGl3bF9jZmcgaXdsNzI2MF8yYWNfY2ZnID0gewogCS5uYW1lID0gIkludGVsKFIpIER1YWwgQmFuZCBXaXJlbGVzcyBBQyA3MjYwIiwKQEAgLTE0OSw2ICsxNTYsNyBAQAogCS5udm1fY2FsaWJfdmVyID0gSVdMNzI2MF9UWF9QT1dFUl9WRVJTSU9OLAogCS5ob3N0X2ludGVycnVwdF9vcGVyYXRpb25fbW9kZSA9IHRydWUsCiAJLmxwX3h0YWxfd29ya2Fyb3VuZCA9IHRydWUsCisJLmRjY21fbGVuID0gSVdMNzI2MF9EQ0NNX0xFTiwKIH07CiAKIGNvbnN0IHN0cnVjdCBpd2xfY2ZnIGl3bDcyNjBfMmFjX2NmZ19oaWdoX3RlbXAgPSB7CkBAIC0xNjEsNiArMTY5LDcgQEAKIAkuaGlnaF90ZW1wID0gdHJ1ZSwKIAkuaG9zdF9pbnRlcnJ1cHRfb3BlcmF0aW9uX21vZGUgPSB0cnVlLAogCS5scF94dGFsX3dvcmthcm91bmQgPSB0cnVlLAorCS5kY2NtX2xlbiA9IElXTDcyNjBfRENDTV9MRU4sCiB9OwogCiBjb25zdCBzdHJ1Y3QgaXdsX2NmZyBpd2w3MjYwXzJuX2NmZyA9IHsKQEAgLTE3Miw2ICsxODEsNyBAQAogCS5udm1fY2FsaWJfdmVyID0gSVdMNzI2MF9UWF9QT1dFUl9WRVJTSU9OLAogCS5ob3N0X2ludGVycnVwdF9vcGVyYXRpb25fbW9kZSA9IHRydWUsCiAJLmxwX3h0YWxfd29ya2Fyb3VuZCA9IHRydWUsCisJLmRjY21fbGVuID0gSVdMNzI2MF9EQ0NNX0xFTiwKIH07CiAKIGNvbnN0IHN0cnVjdCBpd2xfY2ZnIGl3bDcyNjBfbl9jZmcgPSB7CkBAIC0xODMsNiArMTkzLDcgQEAKIAkubnZtX2NhbGliX3ZlciA9IElXTDcyNjBfVFhfUE9XRVJfVkVSU0lPTiwKIAkuaG9zdF9pbnRlcnJ1cHRfb3BlcmF0aW9uX21vZGUgPSB0cnVlLAogCS5scF94dGFsX3dvcmthcm91bmQgPSB0cnVlLAorCS5kY2NtX2xlbiA9IElXTDcyNjBfRENDTV9MRU4sCiB9OwogCiBjb25zdCBzdHJ1Y3QgaXdsX2NmZyBpd2wzMTYwXzJhY19jZmcgPSB7CkBAIC0xOTMsNiArMjA0LDcgQEAKIAkubnZtX3ZlciA9IElXTDMxNjBfTlZNX1ZFUlNJT04sCiAJLm52bV9jYWxpYl92ZXIgPSBJV0wzMTYwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLmhvc3RfaW50ZXJydXB0X29wZXJhdGlvbl9tb2RlID0gdHJ1ZSwKKwkuZGNjbV9sZW4gPSBJV0wzMTYwX0RDQ01fTEVOLAogfTsKIAogY29uc3Qgc3RydWN0IGl3bF9jZmcgaXdsMzE2MF8ybl9jZmcgPSB7CkBAIC0yMDMsNiArMjE1LDcgQEAKIAkubnZtX3ZlciA9IElXTDMxNjBfTlZNX1ZFUlNJT04sCiAJLm52bV9jYWxpYl92ZXIgPSBJV0wzMTYwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLmhvc3RfaW50ZXJydXB0X29wZXJhdGlvbl9tb2RlID0gdHJ1ZSwKKwkuZGNjbV9sZW4gPSBJV0wzMTYwX0RDQ01fTEVOLAogfTsKIAogY29uc3Qgc3RydWN0IGl3bF9jZmcgaXdsMzE2MF9uX2NmZyA9IHsKQEAgLTIxMyw2ICsyMjYsNyBAQAogCS5udm1fdmVyID0gSVdMMzE2MF9OVk1fVkVSU0lPTiwKIAkubnZtX2NhbGliX3ZlciA9IElXTDMxNjBfVFhfUE9XRVJfVkVSU0lPTiwKIAkuaG9zdF9pbnRlcnJ1cHRfb3BlcmF0aW9uX21vZGUgPSB0cnVlLAorCS5kY2NtX2xlbiA9IElXTDMxNjBfRENDTV9MRU4sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9wd3JfdHhfYmFja29mZiBpd2w3MjY1X3B3cl90eF9iYWNrb2Zmc1tdID0gewpAQCAtMjQwLDYgKzI1NCw3IEBACiAJLm52bV92ZXIgPSBJV0wzMTY1X05WTV9WRVJTSU9OLAogCS5udm1fY2FsaWJfdmVyID0gSVdMMzE2NV9UWF9QT1dFUl9WRVJTSU9OLAogCS5wd3JfdHhfYmFja29mZnMgPSBpd2w3MjY1X3B3cl90eF9iYWNrb2ZmcywKKwkuZGNjbV9sZW4gPSBJV0w3MjY1X0RDQ01fTEVOLAogfTsKIAogY29uc3Qgc3RydWN0IGl3bF9jZmcgaXdsNzI2NV8yYWNfY2ZnID0gewpAQCAtMjUwLDYgKzI2NSw3IEBACiAJLm52bV92ZXIgPSBJV0w3MjY1X05WTV9WRVJTSU9OLAogCS5udm1fY2FsaWJfdmVyID0gSVdMNzI2NV9UWF9QT1dFUl9WRVJTSU9OLAogCS5wd3JfdHhfYmFja29mZnMgPSBpd2w3MjY1X3B3cl90eF9iYWNrb2ZmcywKKwkuZGNjbV9sZW4gPSBJV0w3MjY1X0RDQ01fTEVOLAogfTsKIAogY29uc3Qgc3RydWN0IGl3bF9jZmcgaXdsNzI2NV8ybl9jZmcgPSB7CkBAIC0yNjAsNiArMjc2LDcgQEAKIAkubnZtX3ZlciA9IElXTDcyNjVfTlZNX1ZFUlNJT04sCiAJLm52bV9jYWxpYl92ZXIgPSBJV0w3MjY1X1RYX1BPV0VSX1ZFUlNJT04sCiAJLnB3cl90eF9iYWNrb2ZmcyA9IGl3bDcyNjVfcHdyX3R4X2JhY2tvZmZzLAorCS5kY2NtX2xlbiA9IElXTDcyNjVfRENDTV9MRU4sCiB9OwogCiBjb25zdCBzdHJ1Y3QgaXdsX2NmZyBpd2w3MjY1X25fY2ZnID0gewpAQCAtMjcwLDYgKzI4Nyw3IEBACiAJLm52bV92ZXIgPSBJV0w3MjY1X05WTV9WRVJTSU9OLAogCS5udm1fY2FsaWJfdmVyID0gSVdMNzI2NV9UWF9QT1dFUl9WRVJTSU9OLAogCS5wd3JfdHhfYmFja29mZnMgPSBpd2w3MjY1X3B3cl90eF9iYWNrb2ZmcywKKwkuZGNjbV9sZW4gPSBJV0w3MjY1X0RDQ01fTEVOLAogfTsKIAogY29uc3Qgc3RydWN0IGl3bF9jZmcgaXdsNzI2NWRfMmFjX2NmZyA9IHsKQEAgLTI4MCw2ICsyOTgsNyBAQAogCS5udm1fdmVyID0gSVdMNzI2NURfTlZNX1ZFUlNJT04sCiAJLm52bV9jYWxpYl92ZXIgPSBJV0w3MjY1X1RYX1BPV0VSX1ZFUlNJT04sCiAJLnB3cl90eF9iYWNrb2ZmcyA9IGl3bDcyNjVfcHdyX3R4X2JhY2tvZmZzLAorCS5kY2NtX2xlbiA9IElXTDcyNjVfRENDTV9MRU4sCiB9OwogCiBjb25zdCBzdHJ1Y3QgaXdsX2NmZyBpd2w3MjY1ZF8ybl9jZmcgPSB7CkBAIC0yOTAsNiArMzA5LDcgQEAKIAkubnZtX3ZlciA9IElXTDcyNjVEX05WTV9WRVJTSU9OLAogCS5udm1fY2FsaWJfdmVyID0gSVdMNzI2NV9UWF9QT1dFUl9WRVJTSU9OLAogCS5wd3JfdHhfYmFja29mZnMgPSBpd2w3MjY1X3B3cl90eF9iYWNrb2ZmcywKKwkuZGNjbV9sZW4gPSBJV0w3MjY1X0RDQ01fTEVOLAogfTsKIAogY29uc3Qgc3RydWN0IGl3bF9jZmcgaXdsNzI2NWRfbl9jZmcgPSB7CkBAIC0zMDAsNiArMzIwLDcgQEAKIAkubnZtX3ZlciA9IElXTDcyNjVEX05WTV9WRVJTSU9OLAogCS5udm1fY2FsaWJfdmVyID0gSVdMNzI2NV9UWF9QT1dFUl9WRVJTSU9OLAogCS5wd3JfdHhfYmFja29mZnMgPSBpd2w3MjY1X3B3cl90eF9iYWNrb2ZmcywKKwkuZGNjbV9sZW4gPSBJV0w3MjY1X0RDQ01fTEVOLAogfTsKIAogTU9EVUxFX0ZJUk1XQVJFKElXTDcyNjBfTU9EVUxFX0ZJUk1XQVJFKElXTDcyNjBfVUNPREVfQVBJX09LKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC04MDAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC04MDAwLmMKaW5kZXggMzY2OGZjNS4uMmY3ZmU4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtODAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTgwMDAuYwpAQCAtODEsMTIgKzgxLDIxIEBACiAjZGVmaW5lIElXTDgwMDBfTlZNX1ZFUlNJT04JCTB4MGExZAogI2RlZmluZSBJV0w4MDAwX1RYX1BPV0VSX1ZFUlNJT04JMHhmZmZmIC8qIG1lYW5pbmdsZXNzICovCiAKKy8qIE1lbW9yeSBvZmZzZXRzIGFuZCBsZW5ndGhzICovCisjZGVmaW5lIElXTDgyNjBfRENDTV9PRkZTRVQJCTB4ODAwMDAwCisjZGVmaW5lIElXTDgyNjBfRENDTV9MRU4JCTB4MTgwMDAKKyNkZWZpbmUgSVdMODI2MF9EQ0NNMl9PRkZTRVQJCTB4ODgwMDAwCisjZGVmaW5lIElXTDgyNjBfRENDTTJfTEVOCQkweDgwMDAKKyNkZWZpbmUgSVdMODI2MF9TTUVNX09GRlNFVAkJMHg0MDAwMDAKKyNkZWZpbmUgSVdMODI2MF9TTUVNX0xFTgkJMHg2ODAwMAorCiAjZGVmaW5lIElXTDgwMDBfRldfUFJFICJpd2x3aWZpLTgwMDAiCiAjZGVmaW5lIElXTDgwMDBfTU9EVUxFX0ZJUk1XQVJFKGFwaSkgXAogCUlXTDgwMDBfRldfUFJFICItIiBfX3N0cmluZ2lmeShhcGkpICIudWNvZGUiCiAKICNkZWZpbmUgTlZNX0hXX1NFQ1RJT05fTlVNX0ZBTUlMWV84MDAwCQkxMAotI2RlZmluZSBERUZBVUxUX05WTV9GSUxFX0ZBTUlMWV84MDAwCQkiaXdsX252bV84MDAwLmJpbiIKKyNkZWZpbmUgREVGQVVMVF9OVk1fRklMRV9GQU1JTFlfODAwMEEJCSJpd2xfbnZtXzgwMDAuYmluIgorI2RlZmluZSBERUZBVUxUX05WTV9GSUxFX0ZBTUlMWV84MDAwCQkiaXdsX252bV84MDAwQi5iaW4iCiAKIC8qIE1heCBTRElPIFJYIGFnZ3JlZ2F0aW9uIHNpemUgb2YgdGhlIEFEREJBIHJlcXVlc3QvcmVzcG9uc2UgKi8KICNkZWZpbmUgTUFYX1JYX0FHR19TSVpFXzgyNjBfU0RJTwkyOApAQCAtMTI0LDcgKzEzMywxMyBAQAogCS5sZWRfbW9kZSA9IElXTF9MRURfUkZfU1RBVEUsCQkJCVwKIAkubnZtX2h3X3NlY3Rpb25fbnVtID0gTlZNX0hXX1NFQ1RJT05fTlVNX0ZBTUlMWV84MDAwLAlcCiAJLmQwaTMgPSB0cnVlLAkJCQkJCVwKLQkubm9uX3NoYXJlZF9hbnQgPSBBTlRfQQorCS5ub25fc2hhcmVkX2FudCA9IEFOVF9BLAkJCQlcCisJLmRjY21fb2Zmc2V0ID0gSVdMODI2MF9EQ0NNX09GRlNFVCwJCQlcCisJLmRjY21fbGVuID0gSVdMODI2MF9EQ0NNX0xFTiwJCQkJXAorCS5kY2NtMl9vZmZzZXQgPSBJV0w4MjYwX0RDQ00yX09GRlNFVCwJCQlcCisJLmRjY20yX2xlbiA9IElXTDgyNjBfRENDTTJfTEVOLAkJCQlcCisJLnNtZW1fb2Zmc2V0ID0gSVdMODI2MF9TTUVNX09GRlNFVCwJCQlcCisJLnNtZW1fbGVuID0gSVdMODI2MF9TTUVNX0xFTgogCiBjb25zdCBzdHJ1Y3QgaXdsX2NmZyBpd2w4MjYwXzJuX2NmZyA9IHsKIAkubmFtZSA9ICJJbnRlbChSKSBEdWFsIEJhbmQgV2lyZWxlc3MgTiA4MjYwIiwKQEAgLTE0NSw2ICsxNjAsMTYgQEAKIAkubWF4X2h0X2FtcGR1X2V4cG9uZW50ID0gSUVFRTgwMjExX0hUX01BWF9BTVBEVV82NEssCiB9OwogCitjb25zdCBzdHJ1Y3QgaXdsX2NmZyBpd2w0MTY1XzJhY19jZmcgPSB7CisJLm5hbWUgPSAiSW50ZWwoUikgRHVhbCBCYW5kIFdpcmVsZXNzIEFDIDQxNjUiLAorCS5md19uYW1lX3ByZSA9IElXTDgwMDBfRldfUFJFLAorCUlXTF9ERVZJQ0VfODAwMCwKKwkuaHRfcGFyYW1zID0gJml3bDgwMDBfaHRfcGFyYW1zLAorCS5udm1fdmVyID0gSVdMODAwMF9OVk1fVkVSU0lPTiwKKwkubnZtX2NhbGliX3ZlciA9IElXTDgwMDBfVFhfUE9XRVJfVkVSU0lPTiwKKwkubWF4X2h0X2FtcGR1X2V4cG9uZW50ID0gSUVFRTgwMjExX0hUX01BWF9BTVBEVV82NEssCit9OworCiBjb25zdCBzdHJ1Y3QgaXdsX2NmZyBpd2w4MjYwXzJhY19zZGlvX2NmZyA9IHsKIAkubmFtZSA9ICJJbnRlbChSKSBEdWFsIEJhbmQgV2lyZWxlc3MtQUMgODI2MCIsCiAJLmZ3X25hbWVfcHJlID0gSVdMODAwMF9GV19QUkUsCkBAIC0xNTMsNiArMTc4LDcgQEAKIAkubnZtX3ZlciA9IElXTDgwMDBfTlZNX1ZFUlNJT04sCiAJLm52bV9jYWxpYl92ZXIgPSBJV0w4MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLmRlZmF1bHRfbnZtX2ZpbGUgPSBERUZBVUxUX05WTV9GSUxFX0ZBTUlMWV84MDAwLAorCS5kZWZhdWx0X252bV9maWxlXzgwMDBBID0gREVGQVVMVF9OVk1fRklMRV9GQU1JTFlfODAwMEEsCiAJLm1heF9yeF9hZ2dfc2l6ZSA9IE1BWF9SWF9BR0dfU0laRV84MjYwX1NESU8sCiAJLmRpc2FibGVfZHVtbXlfbm90aWZpY2F0aW9uID0gdHJ1ZSwKIAkubWF4X2h0X2FtcGR1X2V4cG9uZW50ICA9IE1BWF9IVF9BTVBEVV9FWFBPTkVOVF84MjYwX1NESU8sCkBAIC0xNjcsNiArMTkzLDcgQEAKIAkubnZtX3ZlciA9IElXTDgwMDBfTlZNX1ZFUlNJT04sCiAJLm52bV9jYWxpYl92ZXIgPSBJV0w4MDAwX1RYX1BPV0VSX1ZFUlNJT04sCiAJLmRlZmF1bHRfbnZtX2ZpbGUgPSBERUZBVUxUX05WTV9GSUxFX0ZBTUlMWV84MDAwLAorCS5kZWZhdWx0X252bV9maWxlXzgwMDBBID0gREVGQVVMVF9OVk1fRklMRV9GQU1JTFlfODAwMEEsCiAJLm1heF9yeF9hZ2dfc2l6ZSA9IE1BWF9SWF9BR0dfU0laRV84MjYwX1NESU8sCiAJLmJ0X3NoYXJlZF9zaW5nbGVfYW50ID0gdHJ1ZSwKIAkuZGlzYWJsZV9kdW1teV9ub3RpZmljYXRpb24gPSB0cnVlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29uZmlnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb25maWcuaAppbmRleCAzYTRiOWM3Li40YjE5MGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb25maWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb25maWcuaApAQCAtMTI2LDcgKzEyNiw3IEBACiAKIC8qIFRYIHF1ZXVlIHdhdGNoZG9nIHRpbWVvdXRzIGluIG1TZWNzICovCiAjZGVmaW5lIElXTF9XQVRDSERPR19ESVNBQkxFRAkwCi0jZGVmaW5lIElXTF9ERUZfV0RfVElNRU9VVAkyMDAwCisjZGVmaW5lIElXTF9ERUZfV0RfVElNRU9VVAkyNTAwCiAjZGVmaW5lIElXTF9MT05HX1dEX1RJTUVPVVQJMTAwMDAKICNkZWZpbmUgSVdMX01BWF9XRF9USU1FT1VUCTEyMDAwMAogCkBAIC0yNjEsNiArMjYxLDEyIEBACiAgKglzdGF0aW9uIGNhbiByZWNlaXZlIGluIEhUCiAgKiBAbWF4X3ZodF9hbXBkdV9leHBvbmVudDogdGhlIGV4cG9uZW50IG9mIHRoZSBtYXggbGVuZ3RoIG9mIEEtTVBEVSB0aGF0IHRoZQogICoJc3RhdGlvbiBjYW4gcmVjZWl2ZSBpbiBWSFQKKyAqIEBkY2NtX29mZnNldDogb2Zmc2V0IGZyb20gd2hpY2ggRENDTSBiZWdpbnMKKyAqIEBkY2NtX2xlbjogbGVuZ3RoIG9mIERDQ00gKGluY2x1ZGluZyBydW50aW1lIHN0YWNrIENDTSkKKyAqIEBkY2NtMl9vZmZzZXQ6IG9mZnNldCBmcm9tIHdoaWNoIHRoZSBzZWNvbmQgRENDTSBiZWdpbnMKKyAqIEBkY2NtMl9sZW46IGxlbmd0aCBvZiB0aGUgc2Vjb25kIERDQ00KKyAqIEBzbWVtX29mZnNldDogb2Zmc2V0IGZyb20gd2hpY2ggdGhlIFNNRU0gYmVnaW5zCisgKiBAc21lbV9sZW46IHRoZSBsZW5ndGggb2YgU01FTQogICoKICAqIFdlIGVuYWJsZSB0aGUgZHJpdmVyIHRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUgd3J0LiBoYXJkd2FyZSBmZWF0dXJlcy4KICAqIEFQSSBkaWZmZXJlbmNlcyBpbiB1Q29kZSBzaG91bGRuJ3QgYmUgaGFuZGxlZCBoZXJlIGJ1dCB0aHJvdWdoIFRMVnMKQEAgLTI5OCwxMSArMzA0LDE4IEBACiAJY29uc3Qgc3RydWN0IGl3bF9wd3JfdHhfYmFja29mZiAqcHdyX3R4X2JhY2tvZmZzOwogCWJvb2wgbm9fcG93ZXJfdXBfbmljX2luX2luaXQ7CiAJY29uc3QgY2hhciAqZGVmYXVsdF9udm1fZmlsZTsKKwljb25zdCBjaGFyICpkZWZhdWx0X252bV9maWxlXzgwMDBBOwogCXVuc2lnbmVkIGludCBtYXhfcnhfYWdnX3NpemU7CiAJYm9vbCBkaXNhYmxlX2R1bW15X25vdGlmaWNhdGlvbjsKIAl1bnNpZ25lZCBpbnQgbWF4X3R4X2FnZ19zaXplOwogCXVuc2lnbmVkIGludCBtYXhfaHRfYW1wZHVfZXhwb25lbnQ7CiAJdW5zaWduZWQgaW50IG1heF92aHRfYW1wZHVfZXhwb25lbnQ7CisJY29uc3QgdTMyIGRjY21fb2Zmc2V0OworCWNvbnN0IHUzMiBkY2NtX2xlbjsKKwljb25zdCB1MzIgZGNjbTJfb2Zmc2V0OworCWNvbnN0IHUzMiBkY2NtMl9sZW47CisJY29uc3QgdTMyIHNtZW1fb2Zmc2V0OworCWNvbnN0IHUzMiBzbWVtX2xlbjsKIH07CiAKIC8qCkBAIC0zNjksOCArMzgyLDggQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaXdsX2NmZyBpd2w3MjY1ZF9uX2NmZzsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaXdsX2NmZyBpd2w4MjYwXzJuX2NmZzsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaXdsX2NmZyBpd2w4MjYwXzJhY19jZmc7CitleHRlcm4gY29uc3Qgc3RydWN0IGl3bF9jZmcgaXdsNDE2NV8yYWNfY2ZnOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2xfY2ZnIGl3bDgyNjBfMmFjX3NkaW9fY2ZnOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2xfY2ZnIGl3bDQyNjVfMmFjX3NkaW9fY2ZnOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpd2xfY2ZnIGl3bDQxNjVfMmFjX3NkaW9fY2ZnOwogI2VuZGlmIC8qIENPTkZJR19JV0xNVk0gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaAppbmRleCBhZmY2M2MzLi5mYWExN2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jc3IuaApAQCAtMTg0LDYgKzE4NCw3IEBACiAjZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9OSUNfUkVBRFkJKDB4MDA0MDAwMDApIC8qIFBDSV9PV05fU0VNICovCiAjZGVmaW5lIENTUl9IV19JRl9DT05GSUdfUkVHX0JJVF9OSUNfUFJFUEFSRV9ET05FICgweDAyMDAwMDAwKSAvKiBNRV9PV04gKi8KICNkZWZpbmUgQ1NSX0hXX0lGX0NPTkZJR19SRUdfUFJFUEFSRQkJICAoMHgwODAwMDAwMCkgLyogV0FLRV9NRSAqLworI2RlZmluZSBDU1JfSFdfSUZfQ09ORklHX1JFR19FTkFCTEVfUE1FCQkgICgweDEwMDAwMDAwKQogI2RlZmluZSBDU1JfSFdfSUZfQ09ORklHX1JFR19QRVJTSVNUX01PREUJICAoMHg0MDAwMDAwMCkgLyogUEVSU0lTVEVOQ0UgKi8KIAogI2RlZmluZSBDU1JfTUJPWF9TRVRfUkVHX09TX0FMSVZFCQlCSVQoNSkKQEAgLTMwNiw2ICszMDcsNyBAQAogZW51bSB7CiAJU0lMSUNPTl9BX1NURVAgPSAwLAogCVNJTElDT05fQl9TVEVQLAorCVNJTElDT05fQ19TVEVQLAogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kcnYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRydi5jCmluZGV4IDg1MGI4NWEuLjk5NmU3ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRydi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRydi5jCkBAIC04NCwyMSArODQsOCBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qCi0gKiBtb2R1bGUgbmFtZSwgY29weXJpZ2h0LCB2ZXJzaW9uLCBldGMuCi0gKi8KICNkZWZpbmUgRFJWX0RFU0NSSVBUSU9OCSJJbnRlbChSKSBXaXJlbGVzcyBXaUZpIGRyaXZlciBmb3IgTGludXgiCi0KLSNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwotI2RlZmluZSBWRCAiZCIKLSNlbHNlCi0jZGVmaW5lIFZECi0jZW5kaWYKLQotI2RlZmluZSBEUlZfVkVSU0lPTiAgICAgSVdMV0lGSV9WRVJTSU9OIFZECi0KIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwotTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogTU9EVUxFX0FVVEhPUihEUlZfQ09QWVJJR0hUICIgIiBEUlZfQVVUSE9SKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApAQCAtMjUwLDkgKzIzNyw2IEBACiAJLyoKIAkgKiBTdGFydGluZyA4MDAwQiAtIEZXIG5hbWUgZm9ybWF0IGhhcyBjaGFuZ2VkLiBUaGlzIG92ZXJ3cml0ZXMgdGhlCiAJICogcHJldmlvdXMgbmFtZSBhbmQgdXNlcyB0aGUgbmV3IGZvcm1hdC4KLQkgKgotCSAqIFRPRE86Ci0JICogT25jZSB0aGVyZSBpcyBvbmx5IG9uZSBzdXBwb3J0ZWQgc3RlcCBmb3IgODAwMCBmYW1pbHkgLSBkZWxldGUgdGhpcyEKIAkgKi8KIAlpZiAoZHJ2LT50cmFucy0+Y2ZnLT5kZXZpY2VfZmFtaWx5ID09IElXTF9ERVZJQ0VfRkFNSUxZXzgwMDApIHsKIAkJY2hhciByZXZfc3RlcFsyXSA9IHsKQEAgLTI2MywxMyArMjQ3LDYgQEAKIAkJaWYgKENTUl9IV19SRVZfU1RFUChkcnYtPnRyYW5zLT5od19yZXYpID09IFNJTElDT05fQV9TVEVQKQogCQkJcmV2X3N0ZXBbMF0gPSAwOwogCi0JCS8qCi0JCSAqIElmIGh3X3JldiB3YXNuJ3Qgc2V0IHlldCAtIGRlZmF1bHQgYXMgQi1zdGVwLiBJZiBpdCBJUyBBLXN0ZXAKLQkJICogd2UnbGwgcmVsb2FkIHRoYXQgRlcgbGF0ZXIgaW5zdGVhZC4KLQkJICovCi0JCWlmIChkcnYtPnRyYW5zLT5od19yZXYgPT0gMCkKLQkJCXJldl9zdGVwWzBdID0gJ0InOwotCiAJCXNucHJpbnRmKGRydi0+ZmlybXdhcmVfbmFtZSwgc2l6ZW9mKGRydi0+ZmlybXdhcmVfbmFtZSksCiAJCQkgIiVzJXMtJXMudWNvZGUiLCBuYW1lX3ByZSwgcmV2X3N0ZXAsIHRhZyk7CiAJfQpAQCAtOTI2LDYgKzkwMywxMiBAQAogCQkJCQkgICAgSVdMX1VDT0RFX1JFR1VMQVJfVVNOSUZGRVIsCiAJCQkJCSAgICB0bHZfbGVuKTsKIAkJCWJyZWFrOworCQljYXNlIElXTF9VQ09ERV9UTFZfU0RJT19BRE1BX0FERFI6CisJCQlpZiAodGx2X2xlbiAhPSBzaXplb2YodTMyKSkKKwkJCQlnb3RvIGludmFsaWRfdGx2X2xlbjsKKwkJCWRydi0+Zncuc2Rpb19hZG1hX2FkZHIgPQorCQkJCWxlMzJfdG9fY3B1cCgoX19sZTMyICopdGx2X2RhdGEpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlJV0xfREVCVUdfSU5GTyhkcnYsICJ1bmtub3duIFRMVjogJWRcbiIsIHRsdl90eXBlKTsKIAkJCWJyZWFrOwpAQCAtMTA4Miw3ICsxMDY1LDYgQEAKIAl1MzIgYXBpX3ZlcjsKIAlpbnQgaTsKIAlib29sIGxvYWRfbW9kdWxlID0gZmFsc2U7Ci0JdTMyIGh3X3JldiA9IGRydi0+dHJhbnMtPmh3X3JldjsKIAogCWZ3LT51Y29kZV9jYXBhLm1heF9wcm9iZV9sZW5ndGggPSBJV0xfREVGQVVMVF9NQVhfUFJPQkVfTEVOR1RIOwogCWZ3LT51Y29kZV9jYXBhLnN0YW5kYXJkX3BoeV9jYWxpYnJhdGlvbl9zaXplID0KQEAgLTEyNzUsNTAgKzEyNTcsNiBAQAogCQkJCW9wLT5uYW1lLCBlcnIpOwogI2VuZGlmCiAJfQotCi0JLyoKLQkgKiBXZSBtYXkgaGF2ZSBsb2FkZWQgdGhlIHdyb25nIEZXIGZpbGUgaW4gODAwMCBIVyBmYW1pbHkgaWYgaXQgaXMgYW4KLQkgKiBBLXN0ZXAgY2FyZCwgYW5kIGlmIGRydi0+dHJhbnMtPmh3X3JldiB3YXNuJ3QgcHJvcGVybHkgcmVhZCB3aGVuCi0JICogdGhlIEZXIGZpbGUgaGFkIGJlZW4gbG9hZGVkLiAoVGhpcyBtaWdodCBoYXBwZW4gaW4gU0RJTy4pIEluIHN1Y2ggYQotCSAqIGNhc2UgLSB1bmxvYWQgYW5kIHJlbG9hZCB0aGUgY29ycmVjdCBmaWxlLgotCSAqCi0JICogVE9ETzoKLQkgKiBPbmNlIHRoZXJlIGlzIG9ubHkgb25lIHN1cHBvcnRlZCBzdGVwIGZvciA4MDAwIGZhbWlseSAtIGRlbGV0ZSB0aGlzIQotCSAqLwotCWlmIChkcnYtPnRyYW5zLT5jZmctPmRldmljZV9mYW1pbHkgPT0gSVdMX0RFVklDRV9GQU1JTFlfODAwMCAmJgotCSAgICBDU1JfSFdfUkVWX1NURVAoZHJ2LT50cmFucy0+aHdfcmV2KSA9PSBTSUxJQ09OX0FfU1RFUCAmJgotCSAgICBkcnYtPnRyYW5zLT5od19yZXYgIT0gaHdfcmV2KSB7Ci0JCWNoYXIgZmlybXdhcmVfbmFtZVszMl07Ci0KLQkJLyogRnJlZSBwcmV2aW91cyBGVyByZXNvdXJjZXMgKi8KLQkJaWYgKGRydi0+b3BfbW9kZSkKLQkJCV9pd2xfb3BfbW9kZV9zdG9wKGRydik7Ci0JCWl3bF9kZWFsbG9jX3Vjb2RlKGRydik7Ci0KLQkJLyogQnVpbGQgbmFtZSBvZiBjb3JyZWN0LXN0ZXAgRlcgKi8KLQkJc25wcmludGYoZmlybXdhcmVfbmFtZSwgc2l6ZW9mKGZpcm13YXJlX25hbWUpLAotCQkJIHN0cnJjaHIoZHJ2LT5maXJtd2FyZV9uYW1lLCAnLScpKTsKLQkJc25wcmludGYoZHJ2LT5maXJtd2FyZV9uYW1lLCBzaXplb2YoZHJ2LT5maXJtd2FyZV9uYW1lKSwKLQkJCSAiJXMlcyIsIGRydi0+Y2ZnLT5md19uYW1lX3ByZSwgZmlybXdhcmVfbmFtZSk7Ci0KLQkJLyogQ2xlYXIgZGF0YSBiZWZvcmUgbG9hZGluZyBjb3JyZWN0IEZXICovCi0JCWxpc3RfZGVsKCZkcnYtPmxpc3QpOwotCi0JCS8qIFJlcXVlc3QgY29ycmVjdCBGVyBmaWxlIHRoaXMgdGltZSAqLwotCQlJV0xfREVCVUdfSU5GTyhkcnYsICJhdHRlbXB0aW5nIHRvIGxvYWQgQS1zdGVwIEZXICVzXG4iLAotCQkJICAgICAgIGRydi0+ZmlybXdhcmVfbmFtZSk7Ci0JCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJnVjb2RlX3JhdywgZHJ2LT5maXJtd2FyZV9uYW1lLAotCQkJCSAgICAgICBkcnYtPnRyYW5zLT5kZXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlJV0xfRVJSKGRydiwgIkZhaWxlZCBzd2FwcGluZyBGVyFcbiIpOwotCQkJZ290byBvdXRfdW5iaW5kOwotCQl9Ci0KLQkJLyogUmVkbyBjYWxsYmFjayBmdW5jdGlvbiAtIHRoaXMgdGltZSB3aXRoIHJpZ2h0IEZXICovCi0JCWl3bF9yZXFfZndfY2FsbGJhY2sodWNvZGVfcmF3LCBjb250ZXh0KTsKLQl9Ci0KLQlrZnJlZShwaWVjZXMpOwogCXJldHVybjsKIAogIHRyeV9hZ2FpbjoKQEAgLTE0MjksNyArMTM2Nyw3IEBACiAJLnJlc3RhcnRfZncgPSB0cnVlLAogCS5idF9jb2V4X2FjdGl2ZSA9IHRydWUsCiAJLnBvd2VyX2xldmVsID0gSVdMX1BPV0VSX0lOREVYXzEsCi0JLndkX2Rpc2FibGUgPSB0cnVlLAorCS5kMGkzX2Rpc2FibGUgPSB0cnVlLAogI2lmbmRlZiBDT05GSUdfSVdMV0lGSV9VQVBTRAogCS51YXBzZF9kaXNhYmxlID0gdHJ1ZSwKICNlbmRpZiAvKiBDT05GSUdfSVdMV0lGSV9VQVBTRCAqLwpAQCAtMTQ5Miw3ICsxNDMwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpd2x3aWZpX29wbW9kZV90YWJsZSk7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQoJml3bHdpZmlfb3Btb2RlX3RhYmxlW2ldLmRydik7CiAKLQlwcl9pbmZvKERSVl9ERVNDUklQVElPTiAiLCAiIERSVl9WRVJTSU9OICJcbiIpOworCXByX2luZm8oRFJWX0RFU0NSSVBUSU9OICJcbiIpOwogCXByX2luZm8oRFJWX0NPUFlSSUdIVCAiXG4iKTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKQEAgLTE1MzksMTUgKzE0NzcsMTUgQEAKIE1PRFVMRV9QQVJNX0RFU0MoYW50ZW5uYV9jb3VwbGluZywKIAkJICJzcGVjaWZ5IGFudGVubmEgY291cGxpbmcgaW4gZEIgKGRlZmF1bHQ6IDAgZEIpIik7CiAKLW1vZHVsZV9wYXJhbV9uYW1lZCh3ZF9kaXNhYmxlLCBpd2x3aWZpX21vZF9wYXJhbXMud2RfZGlzYWJsZSwgaW50LCBTX0lSVUdPKTsKLU1PRFVMRV9QQVJNX0RFU0Mod2RfZGlzYWJsZSwKLQkJIkRpc2FibGUgc3R1Y2sgcXVldWUgd2F0Y2hkb2cgdGltZXIgMD1zeXN0ZW0gZGVmYXVsdCwgMT1kaXNhYmxlIChkZWZhdWx0OiAxKSIpOwotCiBtb2R1bGVfcGFyYW1fbmFtZWQobnZtX2ZpbGUsIGl3bHdpZmlfbW9kX3BhcmFtcy5udm1fZmlsZSwgY2hhcnAsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhudm1fZmlsZSwgIk5WTSBmaWxlIG5hbWUiKTsKIAotbW9kdWxlX3BhcmFtX25hbWVkKHVhcHNkX2Rpc2FibGUsIGl3bHdpZmlfbW9kX3BhcmFtcy51YXBzZF9kaXNhYmxlLAorbW9kdWxlX3BhcmFtX25hbWVkKGQwaTNfZGlzYWJsZSwgaXdsd2lmaV9tb2RfcGFyYW1zLmQwaTNfZGlzYWJsZSwKIAkJICAgYm9vbCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGQwaTNfZGlzYWJsZSwgImRpc2FibGUgZDBpMyBmdW5jdGlvbmFsaXR5IChkZWZhdWx0OiBZKSIpOworCittb2R1bGVfcGFyYW1fbmFtZWQodWFwc2RfZGlzYWJsZSwgaXdsd2lmaV9tb2RfcGFyYW1zLnVhcHNkX2Rpc2FibGUsCisJCSAgIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9VQVBTRAogTU9EVUxFX1BBUk1fREVTQyh1YXBzZF9kaXNhYmxlLCAiZGlzYWJsZSBVLUFQU0QgZnVuY3Rpb25hbGl0eSAoZGVmYXVsdDogTikiKTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kcnYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRydi5oCmluZGV4IGJlNGY4OTcuLmFkZjUyMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRydi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRydi5oCkBAIC02OCw3ICs2OCw2IEBACiAKIC8qIGZvciBhbGwgbW9kdWxlcyAqLwogI2RlZmluZSBEUlZfTkFNRSAgICAgICAgIml3bHdpZmkiCi0jZGVmaW5lIElXTFdJRklfVkVSU0lPTiAiaW4tdHJlZToiCiAjZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLSAyMDE0IEludGVsIENvcnBvcmF0aW9uIgogI2RlZmluZSBEUlZfQVVUSE9SICAgICAiPGlsd0BsaW51eC5pbnRlbC5jb20+IgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1mdy1lcnJvci1kdW1wLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1mdy1lcnJvci1kdW1wLmgKaW5kZXggMjBhOGE2NC4uOTE5YTI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZnctZXJyb3ItZHVtcC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZ3LWVycm9yLWR1bXAuaApAQCAtNzEsNyArNzEsNiBAQAogCiAvKioKICAqIGVudW0gaXdsX2Z3X2Vycm9yX2R1bXBfdHlwZSAtIHR5cGVzIG9mIGRhdGEgaW4gdGhlIGR1bXAgZmlsZQotICogQElXTF9GV19FUlJPUl9EVU1QX1NSQU06CiAgKiBASVdMX0ZXX0VSUk9SX0RVTVBfQ1NSOiBDb250cm9sIFN0YXR1cyBSZWdpc3RlcnMgLSBmcm9tIG9mZnNldCAwCiAgKiBASVdMX0ZXX0VSUk9SX0RVTVBfUlhGOgogICogQElXTF9GV19FUlJPUl9EVU1QX1RYQ01EOiBsYXN0IFRYIGNvbW1hbmQgZGF0YSwgc3RydWN0dXJlZCBhcwpAQCAtODIsOSArODEsMTAgQEAKICAqIEBJV0xfRldfRVJST1JfRFVNUF9QUlBIOiByYW5nZSBvZiBwZXJpcGhlcnkgcmVnaXN0ZXJzIC0gdGhlcmUgY2FuIGJlIHNldmVyYWwKICAqCXNlY3Rpb25zIGxpa2UgdGhpcyBpbiBhIHNpbmdsZSBmaWxlLgogICogQElXTF9GV19FUlJPUl9EVU1QX0ZIX1JFR1M6IHJhbmdlIG9mIEZIIHJlZ2lzdGVycworICogQElXTF9GV19FUlJPUl9EVU1QX01FTTogY2h1bmsgb2YgbWVtb3J5CiAgKi8KIGVudW0gaXdsX2Z3X2Vycm9yX2R1bXBfdHlwZSB7Ci0JSVdMX0ZXX0VSUk9SX0RVTVBfU1JBTSA9IDAsCisJLyogMCBpcyBkZXByZWNhdGVkICovCiAJSVdMX0ZXX0VSUk9SX0RVTVBfQ1NSID0gMSwKIAlJV0xfRldfRVJST1JfRFVNUF9SWEYgPSAyLAogCUlXTF9GV19FUlJPUl9EVU1QX1RYQ01EID0gMywKQEAgLTkzLDYgKzkzLDcgQEAKIAlJV0xfRldfRVJST1JfRFVNUF9QUlBIID0gNiwKIAlJV0xfRldfRVJST1JfRFVNUF9UWEYgPSA3LAogCUlXTF9GV19FUlJPUl9EVU1QX0ZIX1JFR1MgPSA4LAorCUlXTF9GV19FUlJPUl9EVU1QX01FTSA9IDksCiAKIAlJV0xfRldfRVJST1JfRFVNUF9NQVgsCiB9OwpAQCAtMTMzLDYgKzEzNCwyNyBAQAogCXU4IGRhdGFbXTsKIH0gX19wYWNrZWQ7CiAKKy8qKgorICogc3RydWN0IGl3bF9md19lcnJvcl9kdW1wX2ZpZm8gLSBSWC9UWCBGSUZPIGRhdGEKKyAqIEBmaWZvX251bTogbnVtYmVyIG9mIEZJRk8gKHN0YXJ0aW5nIGZyb20gMCkKKyAqIEBhdmFpbGFibGVfYnl0ZXM6IG51bSBvZiBieXRlcyBhdmFpbGFibGUgaW4gRklGTyAobWF5IGJlIGxlc3MgdGhhbiBGSUZPIHNpemUpCisgKiBAd3JfcHRyOiBwb3NpdGlvbiBvZiB3cml0ZSBwb2ludGVyCisgKiBAcmRfcHRyOiBwb3NpdGlvbiBvZiByZWFkIHBvaW50ZXIKKyAqIEBmZW5jZV9wdHI6IHBvc2l0aW9uIG9mIGZlbmNlIHBvaW50ZXIKKyAqIEBmZW5jZV9tb2RlOiB0aGUgY3VycmVudCBtb2RlIG9mIHRoZSBmZW5jZSAoYmVmb3JlIGxvY2tpbmcpIC0KKyAqCTA9Zm9sbG93IFJEIHBvaW50ZXIgOyAxID0gZnJlZXplCisgKiBAZGF0YTogYWxsIG9mIHRoZSBGSUZPJ3MgZGF0YQorICovCitzdHJ1Y3QgaXdsX2Z3X2Vycm9yX2R1bXBfZmlmbyB7CisJX19sZTMyIGZpZm9fbnVtOworCV9fbGUzMiBhdmFpbGFibGVfYnl0ZXM7CisJX19sZTMyIHdyX3B0cjsKKwlfX2xlMzIgcmRfcHRyOworCV9fbGUzMiBmZW5jZV9wdHI7CisJX19sZTMyIGZlbmNlX21vZGU7CisJdTggZGF0YVtdOworfSBfX3BhY2tlZDsKKwogZW51bSBpd2xfZndfZXJyb3JfZHVtcF9mYW1pbHkgewogCUlXTF9GV19FUlJPUl9EVU1QX0ZBTUlMWV83ID0gNywKIAlJV0xfRldfRVJST1JfRFVNUF9GQU1JTFlfOCA9IDgsCkBAIC0xODAsNiArMjAyLDIzIEBACiAJX19sZTMyIGRhdGFbXTsKIH07CiAKK2VudW0gaXdsX2Z3X2Vycm9yX2R1bXBfbWVtX3R5cGUgeworCUlXTF9GV19FUlJPUl9EVU1QX01FTV9TUkFNLAorCUlXTF9GV19FUlJPUl9EVU1QX01FTV9TTUVNLAorfTsKKworLyoqCisgKiBzdHJ1Y3QgaXdsX2Z3X2Vycm9yX2R1bXBfbWVtIC0gY2h1bmsgb2YgbWVtb3J5CisgKiBAdHlwZTogJWVudW0gaXdsX2Z3X2Vycm9yX2R1bXBfbWVtX3R5cGUKKyAqIEBvZmZzZXQ6IHRoZSBvZmZzZXQgZnJvbSB3aGljaCB0aGUgbWVtb3J5IHdhcyByZWFkCisgKiBAZGF0YTogdGhlIGNvbnRlbnQgb2YgdGhlIG1lbW9yeQorICovCitzdHJ1Y3QgaXdsX2Z3X2Vycm9yX2R1bXBfbWVtIHsKKwlfX2xlMzIgdHlwZTsKKwlfX2xlMzIgb2Zmc2V0OworCXU4IGRhdGFbXTsKK307CisKIC8qKgogICogaXdsX2Z3X2Vycm9yX25leHRfZGF0YSAtIGFkdmFuY2UgZncgZXJyb3IgZHVtcCBkYXRhIHBvaW50ZXIKICAqIEBkYXRhOiBwcmV2aW91cyBkYXRhIGJsb2NrCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1mdy1maWxlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1mdy1maWxlLmgKaW5kZXggMWJiZTRmYy4uMDE2ZDkxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZnctZmlsZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZ3LWZpbGUuaApAQCAtMTMyLDYgKzEzMiw3IEBACiAJSVdMX1VDT0RFX1RMVl9FTkFCTEVEX0NBUEFCSUxJVElFUwk9IDMwLAogCUlXTF9VQ09ERV9UTFZfTl9TQ0FOX0NIQU5ORUxTCQk9IDMxLAogCUlXTF9VQ09ERV9UTFZfU0VDX1JUX1VTTklGRkVSCT0gMzQsCisJSVdMX1VDT0RFX1RMVl9TRElPX0FETUFfQUREUgk9IDM1LAogCUlXTF9VQ09ERV9UTFZfRldfREJHX0RFU1QJPSAzOCwKIAlJV0xfVUNPREVfVExWX0ZXX0RCR19DT05GCT0gMzksCiB9OwpAQCAtMjM0LDI5ICsyMzUsMzQgQEAKIAogLyoqCiAgKiBlbnVtIGl3bF91Y29kZV90bHZfYXBpIC0gdWNvZGUgYXBpCi0gKiBASVdMX1VDT0RFX1RMVl9BUElfV09XTEFOX0NPTkZJR19USUQ6IHdvd2xhbiBjb25maWcgaW5jbHVkZXMgdGlkIGZpZWxkLgotICogQElXTF9VQ09ERV9UTFZfQ0FQQV9FWFRFTkRFRF9CRUFDT046IFN1cHBvcnQgRXh0ZW5kZWQgYmVhY29uIG5vdGlmaWNhdGlvbgogICogQElXTF9VQ09ERV9UTFZfQVBJX0JUX0NPRVhfU1BMSVQ6IG5ldyBBUEkgZm9yIEJUIENvZXgKLSAqIEBJV0xfVUNPREVfVExWX0FQSV9DU0FfRkxPVzogdWNvZGUgY2FuIGRvIHVuYmluZC1iaW5kIGZsb3cgZm9yIENTQS4KICAqIEBJV0xfVUNPREVfVExWX0FQSV9ESVNBQkxFX1NUQV9UWDogdWNvZGUgc3VwcG9ydHMgdHhfZGlzYWJsZSBiaXQuCiAgKiBASVdMX1VDT0RFX1RMVl9BUElfTE1BQ19TQ0FOOiBUaGlzIHVjb2RlIHVzZXMgTE1BQyB1bmlmaWVkIHNjYW4gQVBJLgogICogQElXTF9VQ09ERV9UTFZfQVBJX1NGX05PX0RVTU1ZX05PVElGOiB1Y29kZSBzdXBwb3J0cyBkaXNhYmxpbmcgZHVtbXkgbm90aWYuCiAgKiBASVdMX1VDT0RFX1RMVl9BUElfRlJBR01FTlRFRF9TQ0FOOiBUaGlzIHVjb2RlIHN1cHBvcnRzIGFjdGl2ZSBkd2VsbCB0aW1lCiAgKglsb25nZXIgdGhhbiB0aGUgcGFzc2l2ZSBvbmUsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgZnJhZ21lbnRlZCBzY2FuLgorICogSVdMX1VDT0RFX1RMVl9BUElfSERDX1BIQVNFXzA6IHVjb2RlIHN1cHBvcnRzIGZpbmVyIGNvbmZpZ3VyYXRpb24gb2YgTFRSCiAgKiBASVdMX1VDT0RFX1RMVl9BUElfQkFTSUNfRFdFTEw6IHVzZSBvbmx5IGJhc2ljIGR3ZWxsIHRpbWUgaW4gc2NhbiBjb21tYW5kLAogICoJcmVnYXJkbGVzcyBvZiB0aGUgYmFuZCBvciB0aGUgbnVtYmVyIG9mIHRoZSBwcm9iZXMuIEZXIHdpbGwgY2FsY3VsYXRlCiAgKgl0aGUgYWN0dWFsIGR3ZWxsIHRpbWUuCisgKiBASVdMX1VDT0RFX1RMVl9BUElfU0NEX0NGRzogVGhpcyBmaXJtd2FyZSBjYW4gY29uZmlndXJlIHRoZSBzY2hlZHVsZXIKKyAqCXRocm91Z2ggdGhlIGRlZGljYXRlZCBob3N0IGNvbW1hbmQuCisgKiBASVdMX1VDT0RFX1RMVl9BUElfU0lOR0xFX1NDQU5fRUJTOiBFQlMgaXMgc3VwcG9ydGVkIGZvciBzaW5nbGUgc2NhbnMgdG9vLgorICogQElXTF9VQ09ERV9UTFZfQVBJX0FTWU5DX0RUTTogQXN5bmMgdGVtcGVyYXR1cmUgbm90aWZpY2F0aW9ucyBhcmUgc3VwcG9ydGVkLgorICogQElXTF9VQ09ERV9UTFZfQVBJX0xRX1NTX1BBUkFNUzogQ29uZmlndXJlIFNUQkMvQkZFUiB2aWEgTFEgQ01EIHNzX3BhcmFtcwogICovCiBlbnVtIGl3bF91Y29kZV90bHZfYXBpIHsKLQlJV0xfVUNPREVfVExWX0FQSV9XT1dMQU5fQ09ORklHX1RJRAk9IEJJVCgwKSwKLQlJV0xfVUNPREVfVExWX0NBUEFfRVhURU5ERURfQkVBQ09OCT0gQklUKDEpLAogCUlXTF9VQ09ERV9UTFZfQVBJX0JUX0NPRVhfU1BMSVQgICAgICAgICA9IEJJVCgzKSwKLQlJV0xfVUNPREVfVExWX0FQSV9DU0FfRkxPVwkJPSBCSVQoNCksCiAJSVdMX1VDT0RFX1RMVl9BUElfRElTQUJMRV9TVEFfVFgJPSBCSVQoNSksCiAJSVdMX1VDT0RFX1RMVl9BUElfTE1BQ19TQ0FOCQk9IEJJVCg2KSwKIAlJV0xfVUNPREVfVExWX0FQSV9TRl9OT19EVU1NWV9OT1RJRgk9IEJJVCg3KSwKIAlJV0xfVUNPREVfVExWX0FQSV9GUkFHTUVOVEVEX1NDQU4JPSBCSVQoOCksCisJSVdMX1VDT0RFX1RMVl9BUElfSERDX1BIQVNFXzAJCT0gQklUKDEwKSwKIAlJV0xfVUNPREVfVExWX0FQSV9CQVNJQ19EV0VMTAkJPSBCSVQoMTMpLAorCUlXTF9VQ09ERV9UTFZfQVBJX1NDRF9DRkcJCT0gQklUKDE1KSwKKwlJV0xfVUNPREVfVExWX0FQSV9TSU5HTEVfU0NBTl9FQlMJPSBCSVQoMTYpLAorCUlXTF9VQ09ERV9UTFZfQVBJX0FTWU5DX0RUTQkJPSBCSVQoMTcpLAorCUlXTF9VQ09ERV9UTFZfQVBJX0xRX1NTX1BBUkFNUwkJPSBCSVQoMTgpLAogfTsKIAogLyoqCkBAIC0yNjQsNiArMjcwLDcgQEAKICAqIEBJV0xfVUNPREVfVExWX0NBUEFfRDBJM19TVVBQT1JUOiBzdXBwb3J0cyBEMGkzCiAgKiBASVdMX1VDT0RFX1RMVl9DQVBBX0xBUl9TVVBQT1JUOiBzdXBwb3J0cyBMb2NhdGlvbiBBd2FyZSBSZWd1bGF0b3J5CiAgKiBASVdMX1VDT0RFX1RMVl9DQVBBX1VNQUNfU0NBTjogc3VwcG9ydHMgVU1BQyBzY2FuLgorICogQElXTF9VQ09ERV9UTFZfQ0FQQV9CRUFNRk9STUVSOiBzdXBwb3J0cyBCZWFtZm9ybWVyCiAgKiBASVdMX1VDT0RFX1RMVl9DQVBBX1RETFNfU1VQUE9SVDogc3VwcG9ydCBiYXNpYyBURExTIGZ1bmN0aW9uYWxpdHkKICAqIEBJV0xfVUNPREVfVExWX0NBUEFfVFhQT1dFUl9JTlNFUlRJT05fU1VQUE9SVDogc3VwcG9ydHMgaW5zZXJ0aW9uIG9mIGN1cnJlbnQKICAqCXR4IHBvd2VyIHZhbHVlIGludG8gVFBDIFJlcG9ydCBhY3Rpb24gZnJhbWUgYW5kIExpbmsgTWVhc3VyZW1lbnQgUmVwb3J0CkBAIC0yODIsNiArMjg5LDcgQEAKIAlJV0xfVUNPREVfVExWX0NBUEFfRDBJM19TVVBQT1JUCQkJPSBCSVQoMCksCiAJSVdMX1VDT0RFX1RMVl9DQVBBX0xBUl9TVVBQT1JUCQkJPSBCSVQoMSksCiAJSVdMX1VDT0RFX1RMVl9DQVBBX1VNQUNfU0NBTgkJCT0gQklUKDIpLAorCUlXTF9VQ09ERV9UTFZfQ0FQQV9CRUFNRk9STUVSCQkJPSBCSVQoMyksCiAJSVdMX1VDT0RFX1RMVl9DQVBBX1RETFNfU1VQUE9SVAkJCT0gQklUKDYpLAogCUlXTF9VQ09ERV9UTFZfQ0FQQV9UWFBPV0VSX0lOU0VSVElPTl9TVVBQT1JUCT0gQklUKDgpLAogCUlXTF9VQ09ERV9UTFZfQ0FQQV9EU19QQVJBTV9TRVRfSUVfU1VQUE9SVAk9IEJJVCg5KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZ3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1mdy5oCmluZGV4IGU2ZGMzYjguLmZmZDc4NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWZ3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZncuaApAQCAtMTUyLDYgKzE1Miw4IEBACiAgKiBAbXZtX2Z3OiBpbmRpY2F0ZXMgdGhpcyBpcyBNVk0gZmlybXdhcmUKICAqIEBjaXBoZXJfc2NoZW1lOiBvcHRpb25hbCBleHRlcm5hbCBjaXBoZXIgc2NoZW1lLgogICogQGh1bWFuX3JlYWRhYmxlOiBodW1hbiByZWFkYWJsZSB2ZXJzaW9uCisgKiBAc2Rpb19hZG1hX2FkZHI6IHRoZSBkZWZhdWx0IGFkZHJlc3MgdG8gc2V0IGZvciB0aGUgQURNQSBpbiBTRElPIG1vZGUgdW50aWwKKyAqCXdlIGdldCB0aGUgQUxJVkUgZnJvbSB0aGUgdUNvZGUKICAqIEBkYmdfZGVzdF90bHY6IHBvaW50cyB0byB0aGUgZGVzdGluYXRpb24gVExWIGZvciBkZWJ1ZwogICogQGRiZ19jb25mX3RsdjogYXJyYXkgb2YgcG9pbnRlcnMgdG8gY29uZmlndXJhdGlvbiBUTFZzIGZvciBkZWJ1ZwogICogQGRiZ19jb25mX3Rsdl9sZW46IGxlbmd0aHMgb2YgdGhlIEBkYmdfY29uZl90bHYgZW50cmllcwpAQCAtMTgxLDYgKzE4Myw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9jaXBoZXJfc2NoZW1lIGNzW0lXTF9VQ09ERV9NQVhfQ1NdOwogCXU4IGh1bWFuX3JlYWRhYmxlW0ZXX1ZFUl9IVU1BTl9SRUFEQUJMRV9TWl07CiAKKwl1MzIgc2Rpb19hZG1hX2FkZHI7CisKIAlzdHJ1Y3QgaXdsX2Z3X2RiZ19kZXN0X3RsdiAqZGJnX2Rlc3RfdGx2OwogCXN0cnVjdCBpd2xfZndfZGJnX2NvbmZfdGx2ICpkYmdfY29uZl90bHZbRldfREJHX01BWF07CiAJc2l6ZV90IGRiZ19jb25mX3Rsdl9sZW5bRldfREJHX01BWF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uYwppbmRleCA3YTJjYmY2Li4wMzI1MGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWlvLmMKQEAgLTE5MywxMSArMTkzLDE1IEBACiAJICogREVWSUNFX1NFVF9OTUlfODAwMEJfUkVHIC0gaXMgdXNlZC4KIAkgKi8KIAlpZiAoKHRyYW5zLT5jZmctPmRldmljZV9mYW1pbHkgIT0gSVdMX0RFVklDRV9GQU1JTFlfODAwMCkgfHwKLQkgICAgKENTUl9IV19SRVZfU1RFUCh0cmFucy0+aHdfcmV2KSA9PSBTSUxJQ09OX0FfU1RFUCkpCi0JCWl3bF93cml0ZV9wcnBoKHRyYW5zLCBERVZJQ0VfU0VUX05NSV9SRUcsIERFVklDRV9TRVRfTk1JX1ZBTCk7Ci0JZWxzZQorCSAgICAoQ1NSX0hXX1JFVl9TVEVQKHRyYW5zLT5od19yZXYpID09IFNJTElDT05fQV9TVEVQKSkgeworCQlpd2xfd3JpdGVfcHJwaCh0cmFucywgREVWSUNFX1NFVF9OTUlfUkVHLAorCQkJICAgICAgIERFVklDRV9TRVRfTk1JX1ZBTF9EUlYpOworCQlpd2xfd3JpdGVfcHJwaCh0cmFucywgREVWSUNFX1NFVF9OTUlfUkVHLAorCQkJICAgICAgIERFVklDRV9TRVRfTk1JX1ZBTF9IVyk7CisJfSBlbHNlIHsKIAkJaXdsX3dyaXRlX3BycGgodHJhbnMsIERFVklDRV9TRVRfTk1JXzgwMDBCX1JFRywKIAkJCSAgICAgICBERVZJQ0VfU0VUX05NSV84MDAwQl9WQUwpOworCX0KIH0KIElXTF9FWFBPUlRfU1lNQk9MKGl3bF9mb3JjZV9ubWkpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1tb2RwYXJhbXMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLW1vZHBhcmFtcy5oCmluZGV4IDcxNTA3Y2YuLmU4ZWFiZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLW1vZHBhcmFtcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLW1vZHBhcmFtcy5oCkBAIC05NiwxMyArOTYsMTMgQEAKICAqCXVzZSBJV0xfW0RJUyxFTl1BQkxFX0hUXyogY29uc3RhbnRzCiAgKiBAYW1zZHVfc2l6ZV84SzogZW5hYmxlIDhLIGFtc2R1IHNpemUsIGRlZmF1bHQgPSAwCiAgKiBAcmVzdGFydF9mdzogcmVzdGFydCBmaXJtd2FyZSwgZGVmYXVsdCA9IDEKLSAqIEB3ZF9kaXNhYmxlOiBkaXNhYmxlIHN0dWNrIHF1ZXVlIGNoZWNrLCBkZWZhdWx0ID0gMQogICogQGJ0X2NvZXhfYWN0aXZlOiBlbmFibGUgYnQgY29leCwgZGVmYXVsdCA9IHRydWUKICAqIEBsZWRfbW9kZTogc3lzdGVtIGRlZmF1bHQsIGRlZmF1bHQgPSAwCiAgKiBAcG93ZXJfc2F2ZTogZW5hYmxlIHBvd2VyIHNhdmUsIGRlZmF1bHQgPSBmYWxzZQogICogQHBvd2VyX2xldmVsOiBwb3dlciBsZXZlbCwgZGVmYXVsdCA9IDEKICAqIEBkZWJ1Z19sZXZlbDogbGV2ZWxzIGFyZSBJV0xfRExfKgogICogQGFudF9jb3VwbGluZzogYW50ZW5uYSBjb3VwbGluZyBpbiBkQiwgZGVmYXVsdCA9IDAKKyAqIEBkMGkzX2Rpc2FibGU6IGRpc2FibGUgZDBpMywgZGVmYXVsdCA9IDEsCiAgKiBAZndfbW9uaXRvcjogYWxsb3cgdG8gdXNlIGZpcm13YXJlIG1vbml0b3IKICAqLwogc3RydWN0IGl3bF9tb2RfcGFyYW1zIHsKQEAgLTExMCw3ICsxMTAsNiBAQAogCXVuc2lnbmVkIGludCBkaXNhYmxlXzExbjsKIAlpbnQgYW1zZHVfc2l6ZV84SzsKIAlib29sIHJlc3RhcnRfZnc7Ci0JaW50ICB3ZF9kaXNhYmxlOwogCWJvb2wgYnRfY29leF9hY3RpdmU7CiAJaW50IGxlZF9tb2RlOwogCWJvb2wgcG93ZXJfc2F2ZTsKQEAgLTEyMSw2ICsxMjAsNyBAQAogCWludCBhbnRfY291cGxpbmc7CiAJY2hhciAqbnZtX2ZpbGU7CiAJYm9vbCB1YXBzZF9kaXNhYmxlOworCWJvb2wgZDBpM19kaXNhYmxlOwogCWJvb2wgZndfbW9uaXRvcjsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLW52bS1wYXJzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbnZtLXBhcnNlLmMKaW5kZXggMDZlMDJmYy4uYzc0ZjFhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbnZtLXBhcnNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbnZtLXBhcnNlLmMKQEAgLTQ2OCw2ICs0NjgsOCBAQAogCWRhdGEtPnJhZGlvX2NmZ19zdGVwID0gTlZNX1JGX0NGR19TVEVQX01TS19GQU1JTFlfODAwMChyYWRpb19jZmcpOwogCWRhdGEtPnJhZGlvX2NmZ19kYXNoID0gTlZNX1JGX0NGR19EQVNIX01TS19GQU1JTFlfODAwMChyYWRpb19jZmcpOwogCWRhdGEtPnJhZGlvX2NmZ19wbnVtID0gTlZNX1JGX0NGR19GTEFWT1JfTVNLX0ZBTUlMWV84MDAwKHJhZGlvX2NmZyk7CisJZGF0YS0+dmFsaWRfdHhfYW50ID0gTlZNX1JGX0NGR19UWF9BTlRfTVNLX0ZBTUlMWV84MDAwKHJhZGlvX2NmZyk7CisJZGF0YS0+dmFsaWRfcnhfYW50ID0gTlZNX1JGX0NGR19SWF9BTlRfTVNLX0ZBTUlMWV84MDAwKHJhZGlvX2NmZyk7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9zZXRfaHdfYWRkcmVzcyhjb25zdCBzdHJ1Y3QgaXdsX2NmZyAqY2ZnLApAQCAtNTkyLDYgKzU5NCwxMCBAQAogCiAJcmFkaW9fY2ZnID0gaXdsX2dldF9yYWRpb19jZmcoY2ZnLCBudm1fc3cpOwogCWl3bF9zZXRfcmFkaW9fY2ZnKGNmZywgZGF0YSwgcmFkaW9fY2ZnKTsKKwlpZiAoZGF0YS0+dmFsaWRfdHhfYW50KQorCQl0eF9jaGFpbnMgJj0gZGF0YS0+dmFsaWRfdHhfYW50OworCWlmIChkYXRhLT52YWxpZF9yeF9hbnQpCisJCXJ4X2NoYWlucyAmPSBkYXRhLT52YWxpZF9yeF9hbnQ7CiAKIAlza3UgPSBpd2xfZ2V0X3NrdShjZmcsIG52bV9zdyk7CiAJZGF0YS0+c2t1X2NhcF9iYW5kXzI0R0h6X2VuYWJsZSA9IHNrdSAmIE5WTV9TS1VfQ0FQX0JBTkRfMjRHSFo7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKaW5kZXggMmRmNTFlYS4uNjIyMWU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaApAQCAtOTksNiArOTksNyBAQAogCiAjZGVmaW5lIEFQTUdfUENJREVWX1NUVF9WQUxfUEVSU0lTVF9ESVMJKDB4MDAwMDAyMDApCiAjZGVmaW5lIEFQTUdfUENJREVWX1NUVF9WQUxfTDFfQUNUX0RJUwkoMHgwMDAwMDgwMCkKKyNkZWZpbmUgQVBNR19QQ0lERVZfU1RUX1ZBTF9XQUtFX01FCSgweDAwMDA0MDAwKQogCiAjZGVmaW5lIEFQTUdfUlRDX0lOVF9TVFRfUkZLSUxMCQkoMHgxMDAwMDAwMCkKIApAQCAtMTA3LDcgKzEwOCw4IEBACiAKIC8qIERldmljZSBOTUkgcmVnaXN0ZXIgKi8KICNkZWZpbmUgREVWSUNFX1NFVF9OTUlfUkVHIDB4MDBhMDFjMzAKLSNkZWZpbmUgREVWSUNFX1NFVF9OTUlfVkFMIDB4MQorI2RlZmluZSBERVZJQ0VfU0VUX05NSV9WQUxfSFcgQklUKDApCisjZGVmaW5lIERFVklDRV9TRVRfTk1JX1ZBTF9EUlYgQklUKDcpCiAjZGVmaW5lIERFVklDRV9TRVRfTk1JXzgwMDBCX1JFRyAweDAwYTAxYzI0CiAjZGVmaW5lIERFVklDRV9TRVRfTk1JXzgwMDBCX1ZBTCAweDEwMDAwMDAKIApAQCAtMjUwLDYgKzI1Miw3IEBACiAjZGVmaW5lIFNDRF9RVUVVRV9DVFhfUkVHMl9XSU5fU0laRV9NU0sJCSgweDAwMDAwMDdGKQogI2RlZmluZSBTQ0RfUVVFVUVfQ1RYX1JFRzJfRlJBTUVfTElNSVRfUE9TCSgxNikKICNkZWZpbmUgU0NEX1FVRVVFX0NUWF9SRUcyX0ZSQU1FX0xJTUlUX01TSwkoMHgwMDdGMDAwMCkKKyNkZWZpbmUgU0NEX0dQX0NUUkxfRU5BQkxFXzMxX1FVRVVFUwkJQklUKDApCiAKIC8qIENvbnRleHQgRGF0YSAqLwogI2RlZmluZSBTQ0RfQ09OVEVYVF9NRU1fTE9XRVJfQk9VTkQJKFNDRF9NRU1fTE9XRVJfQk9VTkQgKyAweDYwMCkKQEAgLTI4MywzMiArMjg2LDkgQEAKICNkZWZpbmUgU0NEX0NIQUlORVhUX0VOCQkoU0NEX0JBU0UgKyAweDI0NCkKICNkZWZpbmUgU0NEX0FHR1JfU0VMCQkoU0NEX0JBU0UgKyAweDI0OCkKICNkZWZpbmUgU0NEX0lOVEVSUlVQVF9NQVNLCShTQ0RfQkFTRSArIDB4MTA4KQorI2RlZmluZSBTQ0RfR1BfQ1RSTAkJKFNDRF9CQVNFICsgMHgxYTgpCiAjZGVmaW5lIFNDRF9FTl9DVFJMCQkoU0NEX0JBU0UgKyAweDI1NCkKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgU0NEX1FVRVVFX1dSUFRSKHVuc2lnbmVkIGludCBjaG5sKQotewotCWlmIChjaG5sIDwgMjApCi0JCXJldHVybiBTQ0RfQkFTRSArIDB4MTggKyBjaG5sICogNDsKLQlXQVJOX09OX09OQ0UoY2hubCA+PSAzMik7Ci0JcmV0dXJuIFNDRF9CQVNFICsgMHgyODQgKyAoY2hubCAtIDIwKSAqIDQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFNDRF9RVUVVRV9SRFBUUih1bnNpZ25lZCBpbnQgY2hubCkKLXsKLQlpZiAoY2hubCA8IDIwKQotCQlyZXR1cm4gU0NEX0JBU0UgKyAweDY4ICsgY2hubCAqIDQ7Ci0JV0FSTl9PTl9PTkNFKGNobmwgPj0gMzIpOwotCXJldHVybiBTQ0RfQkFTRSArIDB4MkI0ICsgKGNobmwgLSAyMCkgKiA0OwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBTQ0RfUVVFVUVfU1RBVFVTX0JJVFModW5zaWduZWQgaW50IGNobmwpCi17Ci0JaWYgKGNobmwgPCAyMCkKLQkJcmV0dXJuIFNDRF9CQVNFICsgMHgxMGMgKyBjaG5sICogNDsKLQlXQVJOX09OX09OQ0UoY2hubCA+PSAzMik7Ci0JcmV0dXJuIFNDRF9CQVNFICsgMHgzODQgKyAoY2hubCAtIDIwKSAqIDQ7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKiBFTkQgVFggU0NIRURVTEVSICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIE9zY2lsbGF0b3IgY2xvY2sgKi8KQEAgLTM1OCwxOCArMzM4LDQwIEBACiAKIC8qIFJ4IEZJRk8gKi8KICNkZWZpbmUgUlhGX1NJWkVfQUREUgkJCSgweGEwMGM4OCkKKyNkZWZpbmUgUlhGX1JEX0RfU1BBQ0UJCQkoMHhhMDBjNDApCisjZGVmaW5lIFJYRl9SRF9XUl9QVFIJCQkoMHhhMDBjNTApCisjZGVmaW5lIFJYRl9SRF9SRF9QVFIJCQkoMHhhMDBjNTQpCisjZGVmaW5lIFJYRl9SRF9GRU5DRV9QVFIJCSgweGEwMGM0YykKKyNkZWZpbmUgUlhGX1NFVF9GRU5DRV9NT0RFCQkoMHhhMDBjMTQpCisjZGVmaW5lIFJYRl9MRF9XUjJGRU5DRQkJKDB4YTAwYzFjKQorI2RlZmluZSBSWEZfRklGT19SRF9GRU5DRV9JTkMJCSgweGEwMGM2OCkKICNkZWZpbmUgUlhGX1NJWkVfQllURV9DTkRfUE9TCQkoNykKICNkZWZpbmUgUlhGX1NJWkVfQllURV9DTlRfTVNLCQkoMHgzZmYgPDwgUlhGX1NJWkVfQllURV9DTkRfUE9TKQorI2RlZmluZSBSWEZfRElGRl9GUk9NX1BSRVYJCSgweDIwMCkKIAogI2RlZmluZSBSWEZfTERfRkVOQ0VfT0ZGU0VUX0FERFIJKDB4YTAwYzEwKQogI2RlZmluZSBSWEZfRklGT19SRF9GRU5DRV9BRERSCQkoMHhhMDBjMGMpCiAKKy8qIFR4IEZJRk8gKi8KKyNkZWZpbmUgVFhGX0ZJRk9fSVRFTV9DTlQJCSgweGEwMDQzOCkKKyNkZWZpbmUgVFhGX1dSX1BUUgkJCSgweGEwMDQxNCkKKyNkZWZpbmUgVFhGX1JEX1BUUgkJCSgweGEwMDQxMCkKKyNkZWZpbmUgVFhGX0ZFTkNFX1BUUgkJCSgweGEwMDQxOCkKKyNkZWZpbmUgVFhGX0xPQ0tfRkVOQ0UJCQkoMHhhMDA0MjQpCisjZGVmaW5lIFRYRl9MQVJDX05VTQkJCSgweGEwMDQzYykKKyNkZWZpbmUgVFhGX1JFQURfTU9ESUZZX0RBVEEJCSgweGEwMDQ0OCkKKyNkZWZpbmUgVFhGX1JFQURfTU9ESUZZX0FERFIJCSgweGEwMDQ0YykKKwogLyogRlcgbW9uaXRvciAqLworI2RlZmluZSBNT05fQlVGRl9TQU1QTEVfQ1RMCQkoMHhhMDNjMDApCiAjZGVmaW5lIE1PTl9CVUZGX0JBU0VfQUREUgkJKDB4YTAzYzNjKQogI2RlZmluZSBNT05fQlVGRl9FTkRfQUREUgkJKDB4YTAzYzQwKQogI2RlZmluZSBNT05fQlVGRl9XUlBUUgkJCSgweGEwM2M0NCkKICNkZWZpbmUgTU9OX0JVRkZfQ1lDTEVfQ05UCQkoMHhhMDNjNDgpCiAKKyNkZWZpbmUgREJHQ19JTl9TQU1QTEUJCQkoMHhhMDNjMDApCisjZGVmaW5lIERCR0NfT1VUX0NUUkwJCQkoMHhhMDNjMGMpCisKIC8qIEZXIGNoaWNrZW4gYml0cyAqLwogI2RlZmluZSBMTVBNX0NISUNLCQkJMHhBMDFGRjgKIGVudW0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2NkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2QuaAppbmRleCA2YzYyMmIyLi5mMjM1M2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2QuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2QuaApAQCAtNjksMTQgKzY5LDYgQEAKICNpbmNsdWRlICJpd2wtcHJwaC5oIgogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfc2NkX3R4cV9zZXRfaW5hY3RpdmUoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsCi0JCQkJCSAgICB1MTYgdHhxX2lkKQotewotCWl3bF93cml0ZV9wcnBoKHRyYW5zLCBTQ0RfUVVFVUVfU1RBVFVTX0JJVFModHhxX2lkKSwKLQkJICAgICAgICgwIDw8IFNDRF9RVUVVRV9TVFRTX1JFR19QT1NfQUNUSVZFKXwKLQkJICAgICAgICgxIDw8IFNDRF9RVUVVRV9TVFRTX1JFR19QT1NfU0NEX0FDVF9FTikpOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3NjZF90eHFfc2V0X2NoYWluKHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLAogCQkJCQkgdTE2IHR4cV9pZCkKIHsKQEAgLTExNSw0ICsxMDcsMzcgQEAKIHsKIAlpd2xfd3JpdGVfcHJwaCh0cmFucywgU0NEX0VOX0NUUkwsIHZhbHVlKTsKIH0KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgU0NEX1FVRVVFX1dSUFRSKHVuc2lnbmVkIGludCBjaG5sKQoreworCWlmIChjaG5sIDwgMjApCisJCXJldHVybiBTQ0RfQkFTRSArIDB4MTggKyBjaG5sICogNDsKKwlXQVJOX09OX09OQ0UoY2hubCA+PSAzMik7CisJcmV0dXJuIFNDRF9CQVNFICsgMHgyODQgKyAoY2hubCAtIDIwKSAqIDQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFNDRF9RVUVVRV9SRFBUUih1bnNpZ25lZCBpbnQgY2hubCkKK3sKKwlpZiAoY2hubCA8IDIwKQorCQlyZXR1cm4gU0NEX0JBU0UgKyAweDY4ICsgY2hubCAqIDQ7CisJV0FSTl9PTl9PTkNFKGNobmwgPj0gMzIpOworCXJldHVybiBTQ0RfQkFTRSArIDB4MkI0ICsgY2hubCAqIDQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IFNDRF9RVUVVRV9TVEFUVVNfQklUUyh1bnNpZ25lZCBpbnQgY2hubCkKK3sKKwlpZiAoY2hubCA8IDIwKQorCQlyZXR1cm4gU0NEX0JBU0UgKyAweDEwYyArIGNobmwgKiA0OworCVdBUk5fT05fT05DRShjaG5sID49IDMyKTsKKwlyZXR1cm4gU0NEX0JBU0UgKyAweDMzNCArIGNobmwgKiA0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3NjZF90eHFfc2V0X2luYWN0aXZlKHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLAorCQkJCQkgICAgdTE2IHR4cV9pZCkKK3sKKwlpd2xfd3JpdGVfcHJwaCh0cmFucywgU0NEX1FVRVVFX1NUQVRVU19CSVRTKHR4cV9pZCksCisJCSAgICAgICAoMCA8PCBTQ0RfUVVFVUVfU1RUU19SRUdfUE9TX0FDVElWRSl8CisJCSAgICAgICAoMSA8PCBTQ0RfUVVFVUVfU1RUU19SRUdfUE9TX1NDRF9BQ1RfRU4pKTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10cmFucy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHJhbnMuaAppbmRleCAwMjg0MDhhLi5hOTZiZDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10cmFucy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXRyYW5zLmgKQEAgLTM2OCw2ICszNjgsNyBAQAogICogQGNtZF9xdWV1ZTogdGhlIGluZGV4IG9mIHRoZSBjb21tYW5kIHF1ZXVlLgogICoJTXVzdCBiZSBzZXQgYmVmb3JlIHN0YXJ0X2Z3LgogICogQGNtZF9maWZvOiB0aGUgZmlmbyBmb3IgaG9zdCBjb21tYW5kcworICogQGNtZF9xX3dkZ190aW1lb3V0OiB0aGUgdGltZW91dCBvZiB0aGUgd2F0Y2hkb2cgdGltZXIgZm9yIHRoZSBjb21tYW5kIHF1ZXVlLgogICogQG5vX3JlY2xhaW1fY21kczogU29tZSBkZXZpY2VzIGVycm9uZW91c2x5IGRvbid0IHNldCB0aGUKICAqCVNFUV9SWF9GUkFNRSBiaXQgb24gc29tZSBub3RpZmljYXRpb25zLCB0aGlzIGlzIHRoZQogICoJbGlzdCBvZiBzdWNoIG5vdGlmaWNhdGlvbnMgdG8gZmlsdGVyLiBNYXggbGVuZ3RoIGlzCkBAIC0zNzgsMjQgKzM3OSwyNiBAQAogICogQGJjX3RhYmxlX2R3b3JkOiBzZXQgdG8gdHJ1ZSBpZiB0aGUgQkMgdGFibGUgZXhwZWN0cyB0aGUgYnl0ZSBjb3VudCB0byBiZQogICoJaW4gRFdPUkQgKGFzIG9wcG9zZWQgdG8gYnl0ZXMpCiAgKiBAc2NkX3NldF9hY3RpdmU6IHNob3VsZCB0aGUgdHJhbnNwb3J0IGNvbmZpZ3VyZSB0aGUgU0NEIGZvciBIQ01EIHF1ZXVlCi0gKiBAcXVldWVfd2F0Y2hkb2dfdGltZW91dDogdGltZSAoaW4gbXMpIGFmdGVyIHdoaWNoIHF1ZXVlcwotICoJYXJlIGNvbnNpZGVyZWQgc3R1Y2sgYW5kIHdpbGwgdHJpZ2dlciBkZXZpY2UgcmVzdGFydAogICogQGNvbW1hbmRfbmFtZXM6IGFycmF5IG9mIGNvbW1hbmQgbmFtZXMsIG11c3QgYmUgMjU2IGVudHJpZXMKICAqCShvbmUgZm9yIGVhY2ggY29tbWFuZCk7IGZvciBkZWJ1Z2dpbmcgb25seQorICogQHNkaW9fYWRtYV9hZGRyOiB0aGUgZGVmYXVsdCBhZGRyZXNzIHRvIHNldCBmb3IgdGhlIEFETUEgaW4gU0RJTyBtb2RlIHVudGlsCisgKgl3ZSBnZXQgdGhlIEFMSVZFIGZyb20gdGhlIHVDb2RlCiAgKi8KIHN0cnVjdCBpd2xfdHJhbnNfY29uZmlnIHsKIAlzdHJ1Y3QgaXdsX29wX21vZGUgKm9wX21vZGU7CiAKIAl1OCBjbWRfcXVldWU7CiAJdTggY21kX2ZpZm87CisJdW5zaWduZWQgaW50IGNtZF9xX3dkZ190aW1lb3V0OwogCWNvbnN0IHU4ICpub19yZWNsYWltX2NtZHM7CiAJdW5zaWduZWQgaW50IG5fbm9fcmVjbGFpbV9jbWRzOwogCiAJYm9vbCByeF9idWZfc2l6ZV84azsKIAlib29sIGJjX3RhYmxlX2R3b3JkOwogCWJvb2wgc2NkX3NldF9hY3RpdmU7Ci0JdW5zaWduZWQgaW50IHF1ZXVlX3dhdGNoZG9nX3RpbWVvdXQ7CiAJY29uc3QgY2hhciAqY29uc3QgKmNvbW1hbmRfbmFtZXM7CisKKwl1MzIgc2Rpb19hZG1hX2FkZHI7CiB9OwogCiBzdHJ1Y3QgaXdsX3RyYW5zX2R1bXBfZGF0YSB7CkBAIC01MDcsNyArNTEwLDggQEAKIAkJCXN0cnVjdCBza19idWZmX2hlYWQgKnNrYnMpOwogCiAJdm9pZCAoKnR4cV9lbmFibGUpKHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLCBpbnQgcXVldWUsIHUxNiBzc24sCi0JCQkgICBjb25zdCBzdHJ1Y3QgaXdsX3RyYW5zX3R4cV9zY2RfY2ZnICpjZmcpOworCQkJICAgY29uc3Qgc3RydWN0IGl3bF90cmFuc190eHFfc2NkX2NmZyAqY2ZnLAorCQkJICAgdW5zaWduZWQgaW50IHF1ZXVlX3dkZ190aW1lb3V0KTsKIAl2b2lkICgqdHhxX2Rpc2FibGUpKHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLCBpbnQgcXVldWUsCiAJCQkgICAgYm9vbCBjb25maWd1cmVfc2NkKTsKIApAQCAtNTUyLDYgKzU1NiwyMSBAQAogfTsKIAogLyoqCisgKiBlbnVtIGl3bF9kMGkzX21vZGUgLSBkMGkzIG1vZGUKKyAqCisgKiBASVdMX0QwSTNfTU9ERV9PRkYgLSBkMGkzIGlzIGRpc2FibGVkCisgKiBASVdMX0QwSTNfTU9ERV9PTl9JRExFIC0gZW50ZXIgZDBpMyB3aGVuIGRldmljZSBpcyBpZGxlCisgKgkoZS5nLiBubyBhY3RpdmUgcmVmZXJlbmNlcykKKyAqIEBJV0xfRDBJM19NT0RFX09OX1NVU1BFTkQgLSBlbnRlciBkMGkzIG9ubHkgb24gc3VzcGVuZAorICoJKGluIGNhc2Ugb2YgJ2FueScgdHJpZ2dlcikKKyAqLworZW51bSBpd2xfZDBpM19tb2RlIHsKKwlJV0xfRDBJM19NT0RFX09GRiA9IDAsCisJSVdMX0QwSTNfTU9ERV9PTl9JRExFLAorCUlXTF9EMEkzX01PREVfT05fU1VTUEVORCwKK307CisKKy8qKgogICogc3RydWN0IGl3bF90cmFucyAtIHRyYW5zcG9ydCBjb21tb24gZGF0YQogICoKICAqIEBvcHMgLSBwb2ludGVyIHRvIGl3bF90cmFuc19vcHMKQEAgLTYxMiw2ICs2MzEsOCBAQAogCWNvbnN0IHN0cnVjdCBpd2xfZndfZGJnX2NvbmZfdGx2ICpkYmdfY29uZl90bHZbRldfREJHX01BWF07CiAJdTggZGJnX2Rlc3RfcmVnX251bTsKIAorCWVudW0gaXdsX2QwaTNfbW9kZSBkMGkzX21vZGU7CisKIAkvKiBwb2ludGVyIHRvIHRyYW5zIHNwZWNpZmljIHN0cnVjdCAqLwogCS8qRW5zdXJlIHRoYXQgdGhpcyBwb2ludGVyIHdpbGwgYWx3YXlzIGJlIGFsaWduZWQgdG8gc2l6ZW9mIHBvaW50ZXIgKi8KIAljaGFyIHRyYW5zX3NwZWNpZmljWzBdIF9fYWxpZ25lZChzaXplb2Yodm9pZCAqKSk7CkBAIC04MDgsMTkgKzgyOSwyMSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGl3bF90cmFuc190eHFfZW5hYmxlX2NmZyhzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucywgaW50IHF1ZXVlLCB1MTYgc3NuLAotCQkJIGNvbnN0IHN0cnVjdCBpd2xfdHJhbnNfdHhxX3NjZF9jZmcgKmNmZykKKwkJCSBjb25zdCBzdHJ1Y3QgaXdsX3RyYW5zX3R4cV9zY2RfY2ZnICpjZmcsCisJCQkgdW5zaWduZWQgaW50IHF1ZXVlX3dkZ190aW1lb3V0KQogewogCW1pZ2h0X3NsZWVwKCk7CiAKIAlpZiAodW5saWtlbHkoKHRyYW5zLT5zdGF0ZSAhPSBJV0xfVFJBTlNfRldfQUxJVkUpKSkKIAkJSVdMX0VSUih0cmFucywgIiVzIGJhZCBzdGF0ZSA9ICVkXG4iLCBfX2Z1bmNfXywgdHJhbnMtPnN0YXRlKTsKIAotCXRyYW5zLT5vcHMtPnR4cV9lbmFibGUodHJhbnMsIHF1ZXVlLCBzc24sIGNmZyk7CisJdHJhbnMtPm9wcy0+dHhxX2VuYWJsZSh0cmFucywgcXVldWUsIHNzbiwgY2ZnLCBxdWV1ZV93ZGdfdGltZW91dCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfdHJhbnNfdHhxX2VuYWJsZShzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucywgaW50IHF1ZXVlLAogCQkJCQlpbnQgZmlmbywgaW50IHN0YV9pZCwgaW50IHRpZCwKLQkJCQkJaW50IGZyYW1lX2xpbWl0LCB1MTYgc3NuKQorCQkJCQlpbnQgZnJhbWVfbGltaXQsIHUxNiBzc24sCisJCQkJCXVuc2lnbmVkIGludCBxdWV1ZV93ZGdfdGltZW91dCkKIHsKIAlzdHJ1Y3QgaXdsX3RyYW5zX3R4cV9zY2RfY2ZnIGNmZyA9IHsKIAkJLmZpZm8gPSBmaWZvLApAQCAtODMwLDExICs4NTMsMTIgQEAKIAkJLmFnZ3JlZ2F0ZSA9IHN0YV9pZCA+PSAwLAogCX07CiAKLQlpd2xfdHJhbnNfdHhxX2VuYWJsZV9jZmcodHJhbnMsIHF1ZXVlLCBzc24sICZjZmcpOworCWl3bF90cmFuc190eHFfZW5hYmxlX2NmZyh0cmFucywgcXVldWUsIHNzbiwgJmNmZywgcXVldWVfd2RnX3RpbWVvdXQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaXdsX3RyYW5zX2FjX3R4cV9lbmFibGUoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsIGludCBxdWV1ZSwKLQkJCQkJICAgaW50IGZpZm8pCitzdGF0aWMgaW5saW5lCit2b2lkIGl3bF90cmFuc19hY190eHFfZW5hYmxlKHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLCBpbnQgcXVldWUsIGludCBmaWZvLAorCQkJICAgICB1bnNpZ25lZCBpbnQgcXVldWVfd2RnX3RpbWVvdXQpCiB7CiAJc3RydWN0IGl3bF90cmFuc190eHFfc2NkX2NmZyBjZmcgPSB7CiAJCS5maWZvID0gZmlmbywKQEAgLTg0NCwxNiArODY4LDE2IEBACiAJCS5hZ2dyZWdhdGUgPSBmYWxzZSwKIAl9OwogCi0JaXdsX3RyYW5zX3R4cV9lbmFibGVfY2ZnKHRyYW5zLCBxdWV1ZSwgMCwgJmNmZyk7CisJaXdsX3RyYW5zX3R4cV9lbmFibGVfY2ZnKHRyYW5zLCBxdWV1ZSwgMCwgJmNmZywgcXVldWVfd2RnX3RpbWVvdXQpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpd2xfdHJhbnNfd2FpdF90eF9xdWV1ZV9lbXB0eShzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucywKLQkJCQkJCXUzMiB0eHFfYm0pCisJCQkJCQl1MzIgdHhxcykKIHsKIAlpZiAodW5saWtlbHkodHJhbnMtPnN0YXRlICE9IElXTF9UUkFOU19GV19BTElWRSkpCiAJCUlXTF9FUlIodHJhbnMsICIlcyBiYWQgc3RhdGUgPSAlZFxuIiwgX19mdW5jX18sIHRyYW5zLT5zdGF0ZSk7CiAKLQlyZXR1cm4gdHJhbnMtPm9wcy0+d2FpdF90eF9xdWV1ZV9lbXB0eSh0cmFucywgdHhxX2JtKTsKKwlyZXR1cm4gdHJhbnMtPm9wcy0+d2FpdF90eF9xdWV1ZV9lbXB0eSh0cmFucywgdHhxcyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF90cmFuc19kYmdmc19yZWdpc3RlcihzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2NvZXguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2NvZXguYwppbmRleCBhM2JmZGE0Li4xZWM0ZDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9jb2V4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vY29leC5jCkBAIC0zNDIsNyArMzQyLDcgQEAKIAl7CiAJCS5yYW5nZSA9IDEyLAogCQkubHV0MjAgPSB7Ci0JCQljcHVfdG9fbGUzMigweDAwMDAwMDAxKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAorCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKQEAgLTM2Myw3ICszNjMsNyBAQAogCXsKIAkJLnJhbmdlID0gMjAsCiAJCS5sdXQyMCA9IHsKLQkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCisJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLApAQCAtMzg0LDcgKzM4NCw3IEBACiAJewogCQkucmFuZ2UgPSAyMSwKIAkJLmx1dDIwID0gewotCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMyksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKKwkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCkBAIC00MDUsNyArNDA1LDcgQEAKIAl7CiAJCS5yYW5nZSA9IDIzLAogCQkubHV0MjAgPSB7Ci0JCQljcHVfdG9fbGUzMigweDAwMDAwMDA0KSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAorCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKQEAgLTQyNiw3ICs0MjYsNyBAQAogCXsKIAkJLnJhbmdlID0gMjcsCiAJCS5sdXQyMCA9IHsKLQkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDUpLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCisJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLApAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJewogCQkucmFuZ2UgPSAzMCwKIAkJLmx1dDIwID0gewotCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNiksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKKwkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCkBAIC00NjgsNyArNDY4LDcgQEAKIAl7CiAJCS5yYW5nZSA9IDMyLAogCQkubHV0MjAgPSB7Ci0JCQljcHVfdG9fbGUzMigweDAwMDAwMDA3KSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAorCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKQEAgLTQ4OSw3ICs0ODksNyBAQAogCXsKIAkJLnJhbmdlID0gMzMsCiAJCS5sdXQyMCA9IHsKLQkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDgpLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCisJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLApAQCAtOTg5LDcgKzk4OSw3IEBACiBzdGF0aWMgdm9pZCBpd2xfbXZtX2J0X3Jzc2lfaXRlcmF0b3Iodm9pZCAqX2RhdGEsIHU4ICptYWMsCiAJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlzdHJ1Y3QgaXdsX212bV92aWYgKm12bXZpZiA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgaXdsX212bV92aWYgKm12bXZpZiA9IGl3bF9tdm1fdmlmX2Zyb21fbWFjODAyMTEodmlmKTsKIAlzdHJ1Y3QgaXdsX2J0X2l0ZXJhdG9yX2RhdGEgKmRhdGEgPSBfZGF0YTsKIAlzdHJ1Y3QgaXdsX212bSAqbXZtID0gZGF0YS0+bXZtOwogCkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogdm9pZCBpd2xfbXZtX2J0X3Jzc2lfZXZlbnQoc3RydWN0IGl3bF9tdm0gKm12bSwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCSAgIGVudW0gaWVlZTgwMjExX3Jzc2lfZXZlbnQgcnNzaV9ldmVudCkKIHsKLQlzdHJ1Y3QgaXdsX212bV92aWYgKm12bXZpZiA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgaXdsX212bV92aWYgKm12bXZpZiA9IGl3bF9tdm1fdmlmX2Zyb21fbWFjODAyMTEodmlmKTsKIAlzdHJ1Y3QgaXdsX2J0X2l0ZXJhdG9yX2RhdGEgZGF0YSA9IHsKIAkJLm12bSA9IG12bSwKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vY29leF9sZWdhY3kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2NvZXhfbGVnYWN5LmMKaW5kZXggYjMyMTBjZi4uZDUzMGVmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vY29leF9sZWdhY3kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9jb2V4X2xlZ2FjeS5jCkBAIC0zMzAsNyArMzMwLDcgQEAKIAl7CiAJCS5yYW5nZSA9IDEyLAogCQkubHV0MjAgPSB7Ci0JCQljcHVfdG9fbGUzMigweDAwMDAwMDAxKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAorCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKQEAgLTM1MSw3ICszNTEsNyBAQAogCXsKIAkJLnJhbmdlID0gMjAsCiAJCS5sdXQyMCA9IHsKLQkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDIpLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCisJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLApAQCAtMzcyLDcgKzM3Miw3IEBACiAJewogCQkucmFuZ2UgPSAyMSwKIAkJLmx1dDIwID0gewotCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMyksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKKwkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCkBAIC0zOTMsNyArMzkzLDcgQEAKIAl7CiAJCS5yYW5nZSA9IDIzLAogCQkubHV0MjAgPSB7Ci0JCQljcHVfdG9fbGUzMigweDAwMDAwMDA0KSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAorCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKQEAgLTQxNCw3ICs0MTQsNyBAQAogCXsKIAkJLnJhbmdlID0gMjcsCiAJCS5sdXQyMCA9IHsKLQkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDUpLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCisJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLApAQCAtNDM1LDcgKzQzNSw3IEBACiAJewogCQkucmFuZ2UgPSAzMCwKIAkJLmx1dDIwID0gewotCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwNiksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKKwkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCkBAIC00NTYsNyArNDU2LDcgQEAKIAl7CiAJCS5yYW5nZSA9IDMyLAogCQkubHV0MjAgPSB7Ci0JCQljcHVfdG9fbGUzMigweDAwMDAwMDA3KSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAorCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKQEAgLTQ3Nyw3ICs0NzcsNyBAQAogCXsKIAkJLnJhbmdlID0gMzMsCiAJCS5sdXQyMCA9IHsKLQkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDgpLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCisJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLAogCQkJY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksICBjcHVfdG9fbGUzMigweDAwMDAwMDAwKSwKIAkJCWNwdV90b19sZTMyKDB4MDAwMDAwMDApLCAgY3B1X3RvX2xlMzIoMHgwMDAwMDAwMCksCiAJCQljcHVfdG9fbGUzMigweDAwMDAwMDAwKSwgIGNwdV90b19sZTMyKDB4MDAwMDAwMDApLApAQCAtMTAzNCw3ICsxMDM0LDcgQEAKIHN0YXRpYyB2b2lkIGl3bF9tdm1fYnRfcnNzaV9pdGVyYXRvcih2b2lkICpfZGF0YSwgdTggKm1hYywKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7Ci0Jc3RydWN0IGl3bF9tdm1fdmlmICptdm12aWYgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0IGl3bF9tdm1fdmlmICptdm12aWYgPSBpd2xfbXZtX3ZpZl9mcm9tX21hYzgwMjExKHZpZik7CiAJc3RydWN0IGl3bF9idF9pdGVyYXRvcl9kYXRhICpkYXRhID0gX2RhdGE7CiAJc3RydWN0IGl3bF9tdm0gKm12bSA9IGRhdGEtPm12bTsKIApAQCAtMTA3MCw3ICsxMDcwLDcgQEAKIHZvaWQgaXdsX212bV9idF9yc3NpX2V2ZW50X29sZChzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJICAgICAgIGVudW0gaWVlZTgwMjExX3Jzc2lfZXZlbnQgcnNzaV9ldmVudCkKIHsKLQlzdHJ1Y3QgaXdsX212bV92aWYgKm12bXZpZiA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgaXdsX212bV92aWYgKm12bXZpZiA9IGl3bF9tdm1fdmlmX2Zyb21fbWFjODAyMTEodmlmKTsKIAlzdHJ1Y3QgaXdsX2J0X2l0ZXJhdG9yX2RhdGEgZGF0YSA9IHsKIAkJLm12bSA9IG12bSwKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vY29uc3RhbnRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9jb25zdGFudHMuaAppbmRleCAzYmQ5MzQ3Li5iZWJhMzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9jb25zdGFudHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9jb25zdGFudHMuaApAQCAtOTQsMTMgKzk0LDQyIEBACiAjZGVmaW5lIElXTF9NVk1fQlRfQ09FWF9NUExVVAkJCTEKICNkZWZpbmUgSVdMX01WTV9CVF9DT0VYX1JSQwkJCTEKICNkZWZpbmUgSVdMX01WTV9CVF9DT0VYX1RUQwkJCTEKLSNkZWZpbmUgSVdMX01WTV9CVF9DT0VYX01QTFVUX1JFRzAJCTB4Mjg0MTIyMDEKKyNkZWZpbmUgSVdMX01WTV9CVF9DT0VYX01QTFVUX1JFRzAJCTB4MjIwMDIyMDAKICNkZWZpbmUgSVdMX01WTV9CVF9DT0VYX01QTFVUX1JFRzEJCTB4MTExMTg0NTEKICNkZWZpbmUgSVdMX01WTV9CVF9DT0VYX0FOVEVOTkFfQ09VUExJTkdfVEhSUwkzMAogI2RlZmluZSBJV0xfTVZNX0ZXX01DQVNUX0ZJTFRFUl9QQVNTX0FMTAkwCiAjZGVmaW5lIElXTF9NVk1fRldfQkNBU1RfRklMVEVSX1BBU1NfQUxMCTAKLSNkZWZpbmUgSVdMX01WTV9RVU9UQV9USFJFU0hPTEQJCQk4CisjZGVmaW5lIElXTF9NVk1fUVVPVEFfVEhSRVNIT0xECQkJNAogI2RlZmluZSBJV0xfTVZNX1JTX1JTU0lfQkFTRURfSU5JVF9SQVRFICAgICAgICAgMAotI2RlZmluZSBJV0xfTVZNX1JTX0RJU0FCTEVfTUlNTwkJCTAKKyNkZWZpbmUgSVdMX01WTV9SU19ESVNBQkxFX1AyUF9NSU1PCQkwCisjZGVmaW5lIElXTF9NVk1fUlNfTlVNX1RSWV9CRUZPUkVfQU5UX1RPR0dMRSAgICAxCisjZGVmaW5lIElXTF9NVk1fUlNfSFRfVkhUX1JFVFJJRVNfUEVSX1JBVEUgICAgICAyCisjZGVmaW5lIElXTF9NVk1fUlNfSFRfVkhUX1JFVFJJRVNfUEVSX1JBVEVfVFcgICAxCisjZGVmaW5lIElXTF9NVk1fUlNfSU5JVElBTF9NSU1PX05VTV9SQVRFUyAgICAgICAzCisjZGVmaW5lIElXTF9NVk1fUlNfSU5JVElBTF9TSVNPX05VTV9SQVRFUyAgICAgICAzCisjZGVmaW5lIElXTF9NVk1fUlNfSU5JVElBTF9MRUdBQ1lfTlVNX1JBVEVTICAgICAyCisjZGVmaW5lIElXTF9NVk1fUlNfSU5JVElBTF9MRUdBQ1lfUkVUUklFUyAgICAgICAyCisjZGVmaW5lIElXTF9NVk1fUlNfU0VDT05EQVJZX0xFR0FDWV9SRVRSSUVTCTEKKyNkZWZpbmUgSVdMX01WTV9SU19TRUNPTkRBUllfTEVHQUNZX05VTV9SQVRFUyAgIDE2CisjZGVmaW5lIElXTF9NVk1fUlNfU0VDT05EQVJZX1NJU09fTlVNX1JBVEVTICAgICAzCisjZGVmaW5lIElXTF9NVk1fUlNfU0VDT05EQVJZX1NJU09fUkVUUklFUyAgICAgICAxCisjZGVmaW5lIElXTF9NVk1fUlNfUkFURV9NSU5fRkFJTFVSRV9USAkJMworI2RlZmluZSBJV0xfTVZNX1JTX1JBVEVfTUlOX1NVQ0NFU1NfVEgJCTgKKyNkZWZpbmUgSVdMX01WTV9SU19TVEFZX0lOX0NPTFVNTl9USU1FT1VUCTUJLyogU2Vjb25kcyAqLworI2RlZmluZSBJV0xfTVZNX1JTX0lETEVfVElNRU9VVAkJCTUJLyogU2Vjb25kcyAqLworI2RlZmluZSBJV0xfTVZNX1JTX01JU1NFRF9SQVRFX01BWAkJMTUKKyNkZWZpbmUgSVdMX01WTV9SU19MRUdBQ1lfRkFJTFVSRV9MSU1JVAkJMTYwCisjZGVmaW5lIElXTF9NVk1fUlNfTEVHQUNZX1NVQ0NFU1NfTElNSVQJCTQ4MAorI2RlZmluZSBJV0xfTVZNX1JTX0xFR0FDWV9UQUJMRV9DT1VOVAkJMTYwCisjZGVmaW5lIElXTF9NVk1fUlNfTk9OX0xFR0FDWV9GQUlMVVJFX0xJTUlUCTQwMAorI2RlZmluZSBJV0xfTVZNX1JTX05PTl9MRUdBQ1lfU1VDQ0VTU19MSU1JVAk0NTAwCisjZGVmaW5lIElXTF9NVk1fUlNfTk9OX0xFR0FDWV9UQUJMRV9DT1VOVAkxNTAwCisjZGVmaW5lIElXTF9NVk1fUlNfU1JfRk9SQ0VfREVDUkVBU0UJCTE1CS8qIHBlcmNlbnQgKi8KKyNkZWZpbmUgSVdMX01WTV9SU19TUl9OT19ERUNSRUFTRQkJODUJLyogcGVyY2VudCAqLworI2RlZmluZSBJV0xfTVZNX1JTX0FHR19USU1FX0xJTUlUCSAgICAgICAgNDAwMCAgICAvKiA0IG1zZWNzLiB2YWxpZCAxMDAtODAwMCAqLworI2RlZmluZSBJV0xfTVZNX1JTX0FHR19ESVNBQkxFX1NUQVJUCSAgICAgICAgMworI2RlZmluZSBJV0xfTVZNX1JTX1RQQ19TUl9GT1JDRV9JTkNSRUFTRQk3NQkvKiBwZXJjZW50ICovCisjZGVmaW5lIElXTF9NVk1fUlNfVFBDX1NSX05PX0lOQ1JFQVNFCQk4NQkvKiBwZXJjZW50ICovCisjZGVmaW5lIElXTF9NVk1fUlNfVFBDX1RYX1BPV0VSX1NURVAJCTMKIAogI2VuZGlmIC8qIF9fTVZNX0NPTlNUQU5UU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9kMy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZDMuYwppbmRleCA3NDRkZTI2Li4xNGU4ZmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9kMy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2QzLmMKQEAgLTc5Myw3ICs3OTMsNyBAQAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqYXBfc3RhKQogewogCWludCByZXQ7Ci0Jc3RydWN0IGl3bF9tdm1fc3RhICptdm1fYXBfc3RhID0gKHN0cnVjdCBpd2xfbXZtX3N0YSAqKWFwX3N0YS0+ZHJ2X3ByaXY7CisJc3RydWN0IGl3bF9tdm1fc3RhICptdm1fYXBfc3RhID0gaXdsX212bV9zdGFfZnJvbV9tYWM4MDIxMShhcF9zdGEpOwogCiAJLyogVE9ETzogd293bGFuX2NvbmZpZ19jbWQtPndvd2xhbl9iYV90ZWFyZG93bl90aWRzICovCiAKQEAgLTExMzcsMTIgKzExMzcsNDMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGl3bF9tdm1fZW50ZXJfZDBpM19zeW5jKHN0cnVjdCBpd2xfbXZtICptdm0pCit7CisJc3RydWN0IGl3bF9ub3RpZmljYXRpb25fd2FpdCB3YWl0X2QzOworCXN0YXRpYyBjb25zdCB1OCBkM19ub3RpZltdID0geyBEM19DT05GSUdfQ01EIH07CisJaW50IHJldDsKKworCWl3bF9pbml0X25vdGlmaWNhdGlvbl93YWl0KCZtdm0tPm5vdGlmX3dhaXQsICZ3YWl0X2QzLAorCQkJCSAgIGQzX25vdGlmLCBBUlJBWV9TSVpFKGQzX25vdGlmKSwKKwkJCQkgICBOVUxMLCBOVUxMKTsKKworCXJldCA9IGl3bF9tdm1fZW50ZXJfZDBpMyhtdm0tPmh3LT5wcml2KTsKKwlpZiAocmV0KQorCQlnb3RvIHJlbW92ZV9ub3RpZjsKKworCXJldCA9IGl3bF93YWl0X25vdGlmaWNhdGlvbigmbXZtLT5ub3RpZl93YWl0LCAmd2FpdF9kMywgSFopOworCVdBUk5fT05fT05DRShyZXQpOworCXJldHVybiByZXQ7CisKK3JlbW92ZV9ub3RpZjoKKwlpd2xfcmVtb3ZlX25vdGlmaWNhdGlvbigmbXZtLT5ub3RpZl93YWl0LCAmd2FpdF9kMyk7CisJcmV0dXJuIHJldDsKK30KKwogaW50IGl3bF9tdm1fc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqd293bGFuKQogewogCXN0cnVjdCBpd2xfbXZtICptdm0gPSBJV0xfTUFDODAyMTFfR0VUX01WTShodyk7CiAKIAlpd2xfdHJhbnNfc3VzcGVuZChtdm0tPnRyYW5zKTsKLQlpZiAoaXdsX212bV9pc19kMGkzX3N1cHBvcnRlZChtdm0pKSB7CisJaWYgKHdvd2xhbi0+YW55KSB7CisJCS8qICdhbnknIHRyaWdnZXIgbWVhbnMgZDBpMyB1c2FnZSAqLworCQlpZiAobXZtLT50cmFucy0+ZDBpM19tb2RlID09IElXTF9EMEkzX01PREVfT05fU1VTUEVORCkgeworCQkJaW50IHJldCA9IGl3bF9tdm1fZW50ZXJfZDBpM19zeW5jKG12bSk7CisKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCiAJCW11dGV4X2xvY2soJm12bS0+ZDBpM19zdXNwZW5kX211dGV4KTsKIAkJX19zZXRfYml0KEQwSTNfREVGRVJfV0FLRVVQLCAmbXZtLT5kMGkzX3N1c3BlbmRfZmxhZ3MpOwogCQltdXRleF91bmxvY2soJm12bS0+ZDBpM19zdXNwZW5kX211dGV4KTsKQEAgLTE2MjYsNyArMTY1Nyw3IEBACiAJaWYgKElTX0VSUl9PUl9OVUxMKGFwX3N0YSkpCiAJCWdvdG8gb3V0X2ZyZWU7CiAKLQltdm1fYXBfc3RhID0gKHN0cnVjdCBpd2xfbXZtX3N0YSAqKWFwX3N0YS0+ZHJ2X3ByaXY7CisJbXZtX2FwX3N0YSA9IGl3bF9tdm1fc3RhX2Zyb21fbWFjODAyMTEoYXBfc3RhKTsKIAlmb3IgKGkgPSAwOyBpIDwgSVdMX01BWF9USURfQ09VTlQ7IGkrKykgewogCQl1MTYgc2VxID0gc3RhdHVzLnFvc19zZXFfY3RyW2ldOwogCQkvKiBmaXJtd2FyZSBzdG9yZXMgbGFzdC11c2VkIHZhbHVlLCB3ZSBzdG9yZSBuZXh0IHZhbHVlICovCkBAIC0xODc2LDggKzE5MDcsMjAgQEAKIAogCWl3bF90cmFuc19yZXN1bWUobXZtLT50cmFucyk7CiAKLQlpZiAoaXdsX212bV9pc19kMGkzX3N1cHBvcnRlZChtdm0pKQorCWlmIChtdm0tPmh3LT53aXBoeS0+d293bGFuX2NvbmZpZy0+YW55KSB7CisJCS8qICdhbnknIHRyaWdnZXIgbWVhbnMgZDBpMyB1c2FnZSAqLworCQlpZiAobXZtLT50cmFucy0+ZDBpM19tb2RlID09IElXTF9EMEkzX01PREVfT05fU1VTUEVORCkgeworCQkJaW50IHJldCA9IGl3bF9tdm1fZXhpdF9kMGkzKGh3LT5wcml2KTsKKworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJLyoKKwkJCSAqIGQwaTMgZXhpdCB3aWxsIGJlIGRlZmVycmVkIHVudGlsIHJlY29uZmlnX2NvbXBsZXRlLgorCQkJICogbWFrZSBzdXJlIHRoZXJlIHdlIGFyZSBvdXQgb2YgZDBpMy4KKwkJCSAqLworCQl9CiAJCXJldHVybiAwOworCX0KIAogCXJldHVybiBfX2l3bF9tdm1fcmVzdW1lKG12bSwgZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZGVidWdmcy12aWYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2RlYnVnZnMtdmlmLmMKaW5kZXggOWFhMjMxMS4uNWZlMTQ1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZGVidWdmcy12aWYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9kZWJ1Z2ZzLXZpZi5jCkBAIC0yNjgsNyArMjY4LDcgQEAKIAkJc3RhID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChtdm0tPmZ3X2lkX3RvX21hY19pZFthcF9zdGFfaWRdLAogCQkJCQkJbG9ja2RlcF9pc19oZWxkKCZtdm0tPm11dGV4KSk7CiAJCWlmICghSVNfRVJSX09SX05VTEwoc3RhKSkgewotCQkJc3RydWN0IGl3bF9tdm1fc3RhICptdm1fc3RhID0gKHZvaWQgKilzdGEtPmRydl9wcml2OworCQkJc3RydWN0IGl3bF9tdm1fc3RhICptdm1fc3RhID0gaXdsX212bV9zdGFfZnJvbV9tYWM4MDIxMShzdGEpOwogCiAJCQlwb3MgKz0gc2NucHJpbnRmKGJ1Zitwb3MsIGJ1ZnN6LXBvcywKIAkJCQkJICJhcF9zdGFfaWQgJWQgLSByZWR1Y2VkIFR4IHBvd2VyICVkXG4iLApAQCAtNTE3LDYgKzUxNywzNCBAQAogCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogfQogCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfdWFwc2RfbWlzYmVoYXZpbmdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9tdm1fdmlmICptdm12aWYgPSBpd2xfbXZtX3ZpZl9mcm9tX21hYzgwMjExKHZpZik7CisJY2hhciBidWZbMjBdOworCWludCBsZW47CisKKwlsZW4gPSBzcHJpbnRmKGJ1ZiwgIiVwTVxuIiwgbXZtdmlmLT51YXBzZF9taXNiZWhhdmluZ19ic3NpZCk7CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBsZW4pOworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfdWFwc2RfbWlzYmVoYXZpbmdfd3JpdGUoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkJCSBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCQkJCSBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9tdm1fdmlmICptdm12aWYgPSBpd2xfbXZtX3ZpZl9mcm9tX21hYzgwMjExKHZpZik7CisJc3RydWN0IGl3bF9tdm0gKm12bSA9IG12bXZpZi0+bXZtOworCWJvb2wgcmV0OworCisJbXV0ZXhfbG9jaygmbXZtLT5tdXRleCk7CisJcmV0ID0gbWFjX3B0b24oYnVmLCBtdm12aWYtPnVhcHNkX21pc2JlaGF2aW5nX2Jzc2lkKTsKKwltdXRleF91bmxvY2soJm12bS0+bXV0ZXgpOworCisJcmV0dXJuIHJldCA/IGNvdW50IDogLUVJTlZBTDsKK30KKwogI2RlZmluZSBNVk1fREVCVUdGU19XUklURV9GSUxFX09QUyhuYW1lLCBidWZzeikgXAogCV9NVk1fREVCVUdGU19XUklURV9GSUxFX09QUyhuYW1lLCBidWZzeiwgc3RydWN0IGllZWU4MDIxMV92aWYpCiAjZGVmaW5lIE1WTV9ERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMobmFtZSwgYnVmc3opIFwKQEAgLTUzMSw2ICs1NTksNyBAQAogTVZNX0RFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhwbV9wYXJhbXMsIDMyKTsKIE1WTV9ERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMoYmZfcGFyYW1zLCAyNTYpOwogTVZNX0RFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhsb3dfbGF0ZW5jeSwgMTApOworTVZNX0RFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyh1YXBzZF9taXNiZWhhdmluZywgMjApOwogCiB2b2lkIGl3bF9tdm1fdmlmX2RiZ2ZzX3JlZ2lzdGVyKHN0cnVjdCBpd2xfbXZtICptdm0sIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CkBAIC01NjQsNiArNTkzLDggQEAKIAlNVk1fREVCVUdGU19BRERfRklMRV9WSUYobWFjX3BhcmFtcywgbXZtdmlmLT5kYmdmc19kaXIsIFNfSVJVU1IpOwogCU1WTV9ERUJVR0ZTX0FERF9GSUxFX1ZJRihsb3dfbGF0ZW5jeSwgbXZtdmlmLT5kYmdmc19kaXIsCiAJCQkJIFNfSVJVU1IgfCBTX0lXVVNSKTsKKwlNVk1fREVCVUdGU19BRERfRklMRV9WSUYodWFwc2RfbWlzYmVoYXZpbmcsIG12bXZpZi0+ZGJnZnNfZGlyLAorCQkJCSBTX0lSVVNSIHwgU19JV1VTUik7CiAKIAlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYgIXZpZi0+cDJwICYmCiAJICAgIG12bXZpZiA9PSBtdm0tPmJmX2FsbG93ZWRfdmlmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZGVidWdmcy5jCmluZGV4IDMzYmY5MTUuLjgyYzA5ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9kZWJ1Z2ZzLmMKQEAgLTY1NCwxMCArNjU0LDEwIEBACiAJcmV0dXJuIHJldCA/OiBjb3VudDsKIH0KIAotI2RlZmluZSBQUklOVF9TVEFUU19MRTMyKF9zdHIsIF92YWwpCQkJCQlcCisjZGVmaW5lIFBSSU5UX1NUQVRTX0xFMzIoX3N0cnVjdCwgX21lbWIpCQkJCVwKIAkJCSBwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCVwKLQkJCQkJICBmbXRfdGFibGUsIF9zdHIsCQlcCi0JCQkJCSAgbGUzMl90b19jcHUoX3ZhbCkpCisJCQkJCSAgZm10X3RhYmxlLCAjX21lbWIsCQlcCisJCQkJCSAgbGUzMl90b19jcHUoX3N0cnVjdC0+X21lbWIpKQogCiBzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfZndfcnhfc3RhdHNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkJICBjaGFyIF9fdXNlciAqdXNlcl9idWYsIHNpemVfdCBjb3VudCwKQEAgLTY5Miw5NyArNjkyLDg5IEBACiAKIAlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIGZtdF9oZWFkZXIsCiAJCQkgIlN0YXRpc3RpY3NfUnggLSBPRkRNIik7Ci0JUFJJTlRfU1RBVFNfTEUzMigiaW5hX2NudCIsIG9mZG0tPmluYV9jbnQpOwotCVBSSU5UX1NUQVRTX0xFMzIoImZpbmFfY250Iiwgb2ZkbS0+ZmluYV9jbnQpOwotCVBSSU5UX1NUQVRTX0xFMzIoInBsY3BfZXJyIiwgb2ZkbS0+cGxjcF9lcnIpOwotCVBSSU5UX1NUQVRTX0xFMzIoImNyYzMyX2VyciIsIG9mZG0tPmNyYzMyX2Vycik7Ci0JUFJJTlRfU1RBVFNfTEUzMigib3ZlcnJ1bl9lcnIiLCBvZmRtLT5vdmVycnVuX2Vycik7Ci0JUFJJTlRfU1RBVFNfTEUzMigiZWFybHlfb3ZlcnJ1bl9lcnIiLCBvZmRtLT5lYXJseV9vdmVycnVuX2Vycik7Ci0JUFJJTlRfU1RBVFNfTEUzMigiY3JjMzJfZ29vZCIsIG9mZG0tPmNyYzMyX2dvb2QpOwotCVBSSU5UX1NUQVRTX0xFMzIoImZhbHNlX2FsYXJtX2NudCIsIG9mZG0tPmZhbHNlX2FsYXJtX2NudCk7Ci0JUFJJTlRfU1RBVFNfTEUzMigiZmluYV9zeW5jX2Vycl9jbnQiLCBvZmRtLT5maW5hX3N5bmNfZXJyX2NudCk7Ci0JUFJJTlRfU1RBVFNfTEUzMigic2ZkX3RpbWVvdXQiLCBvZmRtLT5zZmRfdGltZW91dCk7Ci0JUFJJTlRfU1RBVFNfTEUzMigiZmluYV90aW1lb3V0Iiwgb2ZkbS0+ZmluYV90aW1lb3V0KTsKLQlQUklOVF9TVEFUU19MRTMyKCJ1bnJlc3BvbmRlZF9ydHMiLCBvZmRtLT51bnJlc3BvbmRlZF9ydHMpOwotCVBSSU5UX1NUQVRTX0xFMzIoInJ4ZV9mcmFtZV9sbXRfb3ZlcnJ1biIsCi0JCQkgb2ZkbS0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4pOwotCVBSSU5UX1NUQVRTX0xFMzIoInNlbnRfYWNrX2NudCIsIG9mZG0tPnNlbnRfYWNrX2NudCk7Ci0JUFJJTlRfU1RBVFNfTEUzMigic2VudF9jdHNfY250Iiwgb2ZkbS0+c2VudF9jdHNfY250KTsKLQlQUklOVF9TVEFUU19MRTMyKCJzZW50X2JhX3JzcF9jbnQiLCBvZmRtLT5zZW50X2JhX3JzcF9jbnQpOwotCVBSSU5UX1NUQVRTX0xFMzIoImRzcF9zZWxmX2tpbGwiLCBvZmRtLT5kc3Bfc2VsZl9raWxsKTsKLQlQUklOVF9TVEFUU19MRTMyKCJtaF9mb3JtYXRfZXJyIiwgb2ZkbS0+bWhfZm9ybWF0X2Vycik7Ci0JUFJJTlRfU1RBVFNfTEUzMigicmVfYWNxX21haW5fcnNzaV9zdW0iLCBvZmRtLT5yZV9hY3FfbWFpbl9yc3NpX3N1bSk7Ci0JUFJJTlRfU1RBVFNfTEUzMigicmVzZXJ2ZWQiLCBvZmRtLT5yZXNlcnZlZCk7CisJUFJJTlRfU1RBVFNfTEUzMihvZmRtLCBpbmFfY250KTsKKwlQUklOVF9TVEFUU19MRTMyKG9mZG0sIGZpbmFfY250KTsKKwlQUklOVF9TVEFUU19MRTMyKG9mZG0sIHBsY3BfZXJyKTsKKwlQUklOVF9TVEFUU19MRTMyKG9mZG0sIGNyYzMyX2Vycik7CisJUFJJTlRfU1RBVFNfTEUzMihvZmRtLCBvdmVycnVuX2Vycik7CisJUFJJTlRfU1RBVFNfTEUzMihvZmRtLCBlYXJseV9vdmVycnVuX2Vycik7CisJUFJJTlRfU1RBVFNfTEUzMihvZmRtLCBjcmMzMl9nb29kKTsKKwlQUklOVF9TVEFUU19MRTMyKG9mZG0sIGZhbHNlX2FsYXJtX2NudCk7CisJUFJJTlRfU1RBVFNfTEUzMihvZmRtLCBmaW5hX3N5bmNfZXJyX2NudCk7CisJUFJJTlRfU1RBVFNfTEUzMihvZmRtLCBzZmRfdGltZW91dCk7CisJUFJJTlRfU1RBVFNfTEUzMihvZmRtLCBmaW5hX3RpbWVvdXQpOworCVBSSU5UX1NUQVRTX0xFMzIob2ZkbSwgdW5yZXNwb25kZWRfcnRzKTsKKwlQUklOVF9TVEFUU19MRTMyKG9mZG0sIHJ4ZV9mcmFtZV9sbXRfb3ZlcnJ1bik7CisJUFJJTlRfU1RBVFNfTEUzMihvZmRtLCBzZW50X2Fja19jbnQpOworCVBSSU5UX1NUQVRTX0xFMzIob2ZkbSwgc2VudF9jdHNfY250KTsKKwlQUklOVF9TVEFUU19MRTMyKG9mZG0sIHNlbnRfYmFfcnNwX2NudCk7CisJUFJJTlRfU1RBVFNfTEUzMihvZmRtLCBkc3Bfc2VsZl9raWxsKTsKKwlQUklOVF9TVEFUU19MRTMyKG9mZG0sIG1oX2Zvcm1hdF9lcnIpOworCVBSSU5UX1NUQVRTX0xFMzIob2ZkbSwgcmVfYWNxX21haW5fcnNzaV9zdW0pOworCVBSSU5UX1NUQVRTX0xFMzIob2ZkbSwgcmVzZXJ2ZWQpOwogCiAJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCBmbXRfaGVhZGVyLAogCQkJICJTdGF0aXN0aWNzX1J4IC0gQ0NLIik7Ci0JUFJJTlRfU1RBVFNfTEUzMigiaW5hX2NudCIsIGNjay0+aW5hX2NudCk7Ci0JUFJJTlRfU1RBVFNfTEUzMigiZmluYV9jbnQiLCBjY2stPmZpbmFfY250KTsKLQlQUklOVF9TVEFUU19MRTMyKCJwbGNwX2VyciIsIGNjay0+cGxjcF9lcnIpOwotCVBSSU5UX1NUQVRTX0xFMzIoImNyYzMyX2VyciIsIGNjay0+Y3JjMzJfZXJyKTsKLQlQUklOVF9TVEFUU19MRTMyKCJvdmVycnVuX2VyciIsIGNjay0+b3ZlcnJ1bl9lcnIpOwotCVBSSU5UX1NUQVRTX0xFMzIoImVhcmx5X292ZXJydW5fZXJyIiwgY2NrLT5lYXJseV9vdmVycnVuX2Vycik7Ci0JUFJJTlRfU1RBVFNfTEUzMigiY3JjMzJfZ29vZCIsIGNjay0+Y3JjMzJfZ29vZCk7Ci0JUFJJTlRfU1RBVFNfTEUzMigiZmFsc2VfYWxhcm1fY250IiwgY2NrLT5mYWxzZV9hbGFybV9jbnQpOwotCVBSSU5UX1NUQVRTX0xFMzIoImZpbmFfc3luY19lcnJfY250IiwgY2NrLT5maW5hX3N5bmNfZXJyX2NudCk7Ci0JUFJJTlRfU1RBVFNfTEUzMigic2ZkX3RpbWVvdXQiLCBjY2stPnNmZF90aW1lb3V0KTsKLQlQUklOVF9TVEFUU19MRTMyKCJmaW5hX3RpbWVvdXQiLCBjY2stPmZpbmFfdGltZW91dCk7Ci0JUFJJTlRfU1RBVFNfTEUzMigidW5yZXNwb25kZWRfcnRzIiwgY2NrLT51bnJlc3BvbmRlZF9ydHMpOwotCVBSSU5UX1NUQVRTX0xFMzIoInJ4ZV9mcmFtZV9sbXRfb3ZlcnJ1biIsCi0JCQkgY2NrLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1bik7Ci0JUFJJTlRfU1RBVFNfTEUzMigic2VudF9hY2tfY250IiwgY2NrLT5zZW50X2Fja19jbnQpOwotCVBSSU5UX1NUQVRTX0xFMzIoInNlbnRfY3RzX2NudCIsIGNjay0+c2VudF9jdHNfY250KTsKLQlQUklOVF9TVEFUU19MRTMyKCJzZW50X2JhX3JzcF9jbnQiLCBjY2stPnNlbnRfYmFfcnNwX2NudCk7Ci0JUFJJTlRfU1RBVFNfTEUzMigiZHNwX3NlbGZfa2lsbCIsIGNjay0+ZHNwX3NlbGZfa2lsbCk7Ci0JUFJJTlRfU1RBVFNfTEUzMigibWhfZm9ybWF0X2VyciIsIGNjay0+bWhfZm9ybWF0X2Vycik7Ci0JUFJJTlRfU1RBVFNfTEUzMigicmVfYWNxX21haW5fcnNzaV9zdW0iLCBjY2stPnJlX2FjcV9tYWluX3Jzc2lfc3VtKTsKLQlQUklOVF9TVEFUU19MRTMyKCJyZXNlcnZlZCIsIGNjay0+cmVzZXJ2ZWQpOworCVBSSU5UX1NUQVRTX0xFMzIoY2NrLCBpbmFfY250KTsKKwlQUklOVF9TVEFUU19MRTMyKGNjaywgZmluYV9jbnQpOworCVBSSU5UX1NUQVRTX0xFMzIoY2NrLCBwbGNwX2Vycik7CisJUFJJTlRfU1RBVFNfTEUzMihjY2ssIGNyYzMyX2Vycik7CisJUFJJTlRfU1RBVFNfTEUzMihjY2ssIG92ZXJydW5fZXJyKTsKKwlQUklOVF9TVEFUU19MRTMyKGNjaywgZWFybHlfb3ZlcnJ1bl9lcnIpOworCVBSSU5UX1NUQVRTX0xFMzIoY2NrLCBjcmMzMl9nb29kKTsKKwlQUklOVF9TVEFUU19MRTMyKGNjaywgZmFsc2VfYWxhcm1fY250KTsKKwlQUklOVF9TVEFUU19MRTMyKGNjaywgZmluYV9zeW5jX2Vycl9jbnQpOworCVBSSU5UX1NUQVRTX0xFMzIoY2NrLCBzZmRfdGltZW91dCk7CisJUFJJTlRfU1RBVFNfTEUzMihjY2ssIGZpbmFfdGltZW91dCk7CisJUFJJTlRfU1RBVFNfTEUzMihjY2ssIHVucmVzcG9uZGVkX3J0cyk7CisJUFJJTlRfU1RBVFNfTEUzMihjY2ssIHJ4ZV9mcmFtZV9sbXRfb3ZlcnJ1bik7CisJUFJJTlRfU1RBVFNfTEUzMihjY2ssIHNlbnRfYWNrX2NudCk7CisJUFJJTlRfU1RBVFNfTEUzMihjY2ssIHNlbnRfY3RzX2NudCk7CisJUFJJTlRfU1RBVFNfTEUzMihjY2ssIHNlbnRfYmFfcnNwX2NudCk7CisJUFJJTlRfU1RBVFNfTEUzMihjY2ssIGRzcF9zZWxmX2tpbGwpOworCVBSSU5UX1NUQVRTX0xFMzIoY2NrLCBtaF9mb3JtYXRfZXJyKTsKKwlQUklOVF9TVEFUU19MRTMyKGNjaywgcmVfYWNxX21haW5fcnNzaV9zdW0pOworCVBSSU5UX1NUQVRTX0xFMzIoY2NrLCByZXNlcnZlZCk7CiAKIAlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIGZtdF9oZWFkZXIsCiAJCQkgIlN0YXRpc3RpY3NfUnggLSBHRU5FUkFMIik7Ci0JUFJJTlRfU1RBVFNfTEUzMigiYm9ndXNfY3RzIiwgZ2VuZXJhbC0+Ym9ndXNfY3RzKTsKLQlQUklOVF9TVEFUU19MRTMyKCJib2d1c19hY2siLCBnZW5lcmFsLT5ib2d1c19hY2spOwotCVBSSU5UX1NUQVRTX0xFMzIoIm5vbl9ic3NpZF9mcmFtZXMiLCBnZW5lcmFsLT5ub25fYnNzaWRfZnJhbWVzKTsKLQlQUklOVF9TVEFUU19MRTMyKCJmaWx0ZXJlZF9mcmFtZXMiLCBnZW5lcmFsLT5maWx0ZXJlZF9mcmFtZXMpOwotCVBSSU5UX1NUQVRTX0xFMzIoIm5vbl9jaGFubmVsX2JlYWNvbnMiLCBnZW5lcmFsLT5ub25fY2hhbm5lbF9iZWFjb25zKTsKLQlQUklOVF9TVEFUU19MRTMyKCJjaGFubmVsX2JlYWNvbnMiLCBnZW5lcmFsLT5jaGFubmVsX2JlYWNvbnMpOwotCVBSSU5UX1NUQVRTX0xFMzIoIm51bV9taXNzZWRfYmNvbiIsIGdlbmVyYWwtPm51bV9taXNzZWRfYmNvbik7Ci0JUFJJTlRfU1RBVFNfTEUzMigiYWRjX3J4X3NhdHVyYXRpb25fdGltZSIsCi0JCQkgZ2VuZXJhbC0+YWRjX3J4X3NhdHVyYXRpb25fdGltZSk7Ci0JUFJJTlRfU1RBVFNfTEUzMigiaW5hX2RldGVjdGlvbl9zZWFyY2hfdGltZSIsCi0JCQkgZ2VuZXJhbC0+aW5hX2RldGVjdGlvbl9zZWFyY2hfdGltZSk7Ci0JUFJJTlRfU1RBVFNfTEUzMigiYmVhY29uX3NpbGVuY2VfcnNzaV9hIiwKLQkJCSBnZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EpOwotCVBSSU5UX1NUQVRTX0xFMzIoImJlYWNvbl9zaWxlbmNlX3Jzc2lfYiIsCi0JCQkgZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9iKTsKLQlQUklOVF9TVEFUU19MRTMyKCJiZWFjb25fc2lsZW5jZV9yc3NpX2MiLAotCQkJIGdlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYyk7Ci0JUFJJTlRfU1RBVFNfTEUzMigiaW50ZXJmZXJlbmNlX2RhdGFfZmxhZyIsCi0JCQkgZ2VuZXJhbC0+aW50ZXJmZXJlbmNlX2RhdGFfZmxhZyk7Ci0JUFJJTlRfU1RBVFNfTEUzMigiY2hhbm5lbF9sb2FkIiwgZ2VuZXJhbC0+Y2hhbm5lbF9sb2FkKTsKLQlQUklOVF9TVEFUU19MRTMyKCJkc3BfZmFsc2VfYWxhcm1zIiwgZ2VuZXJhbC0+ZHNwX2ZhbHNlX2FsYXJtcyk7Ci0JUFJJTlRfU1RBVFNfTEUzMigiYmVhY29uX3Jzc2lfYSIsIGdlbmVyYWwtPmJlYWNvbl9yc3NpX2EpOwotCVBSSU5UX1NUQVRTX0xFMzIoImJlYWNvbl9yc3NpX2IiLCBnZW5lcmFsLT5iZWFjb25fcnNzaV9iKTsKLQlQUklOVF9TVEFUU19MRTMyKCJiZWFjb25fcnNzaV9jIiwgZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYyk7Ci0JUFJJTlRfU1RBVFNfTEUzMigiYmVhY29uX2VuZXJneV9hIiwgZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9hKTsKLQlQUklOVF9TVEFUU19MRTMyKCJiZWFjb25fZW5lcmd5X2IiLCBnZW5lcmFsLT5iZWFjb25fZW5lcmd5X2IpOwotCVBSSU5UX1NUQVRTX0xFMzIoImJlYWNvbl9lbmVyZ3lfYyIsIGdlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYyk7Ci0JUFJJTlRfU1RBVFNfTEUzMigibnVtX2J0X2tpbGxzIiwgZ2VuZXJhbC0+bnVtX2J0X2tpbGxzKTsKLQlQUklOVF9TVEFUU19MRTMyKCJtYWNfaWQiLCBnZW5lcmFsLT5tYWNfaWQpOwotCVBSSU5UX1NUQVRTX0xFMzIoImRpcmVjdGVkX2RhdGFfbXBkdSIsIGdlbmVyYWwtPmRpcmVjdGVkX2RhdGFfbXBkdSk7CisJUFJJTlRfU1RBVFNfTEUzMihnZW5lcmFsLCBib2d1c19jdHMpOworCVBSSU5UX1NUQVRTX0xFMzIoZ2VuZXJhbCwgYm9ndXNfYWNrKTsKKwlQUklOVF9TVEFUU19MRTMyKGdlbmVyYWwsIG5vbl9ic3NpZF9mcmFtZXMpOworCVBSSU5UX1NUQVRTX0xFMzIoZ2VuZXJhbCwgZmlsdGVyZWRfZnJhbWVzKTsKKwlQUklOVF9TVEFUU19MRTMyKGdlbmVyYWwsIG5vbl9jaGFubmVsX2JlYWNvbnMpOworCVBSSU5UX1NUQVRTX0xFMzIoZ2VuZXJhbCwgY2hhbm5lbF9iZWFjb25zKTsKKwlQUklOVF9TVEFUU19MRTMyKGdlbmVyYWwsIG51bV9taXNzZWRfYmNvbik7CisJUFJJTlRfU1RBVFNfTEUzMihnZW5lcmFsLCBhZGNfcnhfc2F0dXJhdGlvbl90aW1lKTsKKwlQUklOVF9TVEFUU19MRTMyKGdlbmVyYWwsIGluYV9kZXRlY3Rpb25fc2VhcmNoX3RpbWUpOworCVBSSU5UX1NUQVRTX0xFMzIoZ2VuZXJhbCwgYmVhY29uX3NpbGVuY2VfcnNzaV9hKTsKKwlQUklOVF9TVEFUU19MRTMyKGdlbmVyYWwsIGJlYWNvbl9zaWxlbmNlX3Jzc2lfYik7CisJUFJJTlRfU1RBVFNfTEUzMihnZW5lcmFsLCBiZWFjb25fc2lsZW5jZV9yc3NpX2MpOworCVBSSU5UX1NUQVRTX0xFMzIoZ2VuZXJhbCwgaW50ZXJmZXJlbmNlX2RhdGFfZmxhZyk7CisJUFJJTlRfU1RBVFNfTEUzMihnZW5lcmFsLCBjaGFubmVsX2xvYWQpOworCVBSSU5UX1NUQVRTX0xFMzIoZ2VuZXJhbCwgZHNwX2ZhbHNlX2FsYXJtcyk7CisJUFJJTlRfU1RBVFNfTEUzMihnZW5lcmFsLCBiZWFjb25fcnNzaV9hKTsKKwlQUklOVF9TVEFUU19MRTMyKGdlbmVyYWwsIGJlYWNvbl9yc3NpX2IpOworCVBSSU5UX1NUQVRTX0xFMzIoZ2VuZXJhbCwgYmVhY29uX3Jzc2lfYyk7CisJUFJJTlRfU1RBVFNfTEUzMihnZW5lcmFsLCBiZWFjb25fZW5lcmd5X2EpOworCVBSSU5UX1NUQVRTX0xFMzIoZ2VuZXJhbCwgYmVhY29uX2VuZXJneV9iKTsKKwlQUklOVF9TVEFUU19MRTMyKGdlbmVyYWwsIGJlYWNvbl9lbmVyZ3lfYyk7CisJUFJJTlRfU1RBVFNfTEUzMihnZW5lcmFsLCBudW1fYnRfa2lsbHMpOworCVBSSU5UX1NUQVRTX0xFMzIoZ2VuZXJhbCwgbWFjX2lkKTsKKwlQUklOVF9TVEFUU19MRTMyKGdlbmVyYWwsIGRpcmVjdGVkX2RhdGFfbXBkdSk7CiAKIAlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIGZtdF9oZWFkZXIsCiAJCQkgIlN0YXRpc3RpY3NfUnggLSBIVCIpOwotCVBSSU5UX1NUQVRTX0xFMzIoInBsY3BfZXJyIiwgaHQtPnBsY3BfZXJyKTsKLQlQUklOVF9TVEFUU19MRTMyKCJvdmVycnVuX2VyciIsIGh0LT5vdmVycnVuX2Vycik7Ci0JUFJJTlRfU1RBVFNfTEUzMigiZWFybHlfb3ZlcnJ1bl9lcnIiLCBodC0+ZWFybHlfb3ZlcnJ1bl9lcnIpOwotCVBSSU5UX1NUQVRTX0xFMzIoImNyYzMyX2dvb2QiLCBodC0+Y3JjMzJfZ29vZCk7Ci0JUFJJTlRfU1RBVFNfTEUzMigiY3JjMzJfZXJyIiwgaHQtPmNyYzMyX2Vycik7Ci0JUFJJTlRfU1RBVFNfTEUzMigibWhfZm9ybWF0X2VyciIsIGh0LT5taF9mb3JtYXRfZXJyKTsKLQlQUklOVF9TVEFUU19MRTMyKCJhZ2dfY3JjMzJfZ29vZCIsIGh0LT5hZ2dfY3JjMzJfZ29vZCk7Ci0JUFJJTlRfU1RBVFNfTEUzMigiYWdnX21wZHVfY250IiwgaHQtPmFnZ19tcGR1X2NudCk7Ci0JUFJJTlRfU1RBVFNfTEUzMigiYWdnX2NudCIsIGh0LT5hZ2dfY250KTsKLQlQUklOVF9TVEFUU19MRTMyKCJ1bnN1cHBvcnRfbWNzIiwgaHQtPnVuc3VwcG9ydF9tY3MpOworCVBSSU5UX1NUQVRTX0xFMzIoaHQsIHBsY3BfZXJyKTsKKwlQUklOVF9TVEFUU19MRTMyKGh0LCBvdmVycnVuX2Vycik7CisJUFJJTlRfU1RBVFNfTEUzMihodCwgZWFybHlfb3ZlcnJ1bl9lcnIpOworCVBSSU5UX1NUQVRTX0xFMzIoaHQsIGNyYzMyX2dvb2QpOworCVBSSU5UX1NUQVRTX0xFMzIoaHQsIGNyYzMyX2Vycik7CisJUFJJTlRfU1RBVFNfTEUzMihodCwgbWhfZm9ybWF0X2Vycik7CisJUFJJTlRfU1RBVFNfTEUzMihodCwgYWdnX2NyYzMyX2dvb2QpOworCVBSSU5UX1NUQVRTX0xFMzIoaHQsIGFnZ19tcGR1X2NudCk7CisJUFJJTlRfU1RBVFNfTEUzMihodCwgYWdnX2NudCk7CisJUFJJTlRfU1RBVFNfTEUzMihodCwgdW5zdXBwb3J0X21jcyk7CiAKIAltdXRleF91bmxvY2soJm12bS0+bXV0ZXgpOwogCkBAIC05MzMsNyArOTI1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHNjYW5fcnhfYW50ID4gQU5UX0FCQykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHNjYW5fcnhfYW50ICYgfm12bS0+ZnctPnZhbGlkX3J4X2FudCkKKwlpZiAoc2Nhbl9yeF9hbnQgJiB+KGl3bF9tdm1fZ2V0X3ZhbGlkX3J4X2FudChtdm0pKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobXZtLT5zY2FuX3J4X2FudCAhPSBzY2FuX3J4X2FudCkgewpAQCAtOTQ1LDYgKzkzNyw2MSBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX2Z3X2RiZ19jb25mX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSAgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfbXZtICptdm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJZW51bSBpd2xfZndfZGJnX2NvbmYgY29uZjsKKwljaGFyIGJ1Zls4XTsKKwljb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YoYnVmKTsKKwlpbnQgcG9zID0gMDsKKworCW11dGV4X2xvY2soJm12bS0+bXV0ZXgpOworCWNvbmYgPSBtdm0tPmZ3X2RiZ19jb25mOworCW11dGV4X3VubG9jaygmbXZtLT5tdXRleCk7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlZFxuIiwgY29uZik7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19md19kYmdfY29uZl93cml0ZShzdHJ1Y3QgaXdsX212bSAqbXZtLAorCQkJCQkgICBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKKwkJCQkJICAgbG9mZl90ICpwcG9zKQoreworCWludCByZXQsIGNvbmZfaWQ7CisKKwlyZXQgPSBrc3RydG9pbnQoYnVmLCAwLCAmY29uZl9pZCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChXQVJOX09OKGNvbmZfaWQgPj0gRldfREJHX01BWCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmbXZtLT5tdXRleCk7CisJcmV0ID0gaXdsX212bV9zdGFydF9md19kYmdfY29uZihtdm0sIGNvbmZfaWQpOworCW11dGV4X3VubG9jaygmbXZtLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0ID86IGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfZndfZGJnX2NvbGxlY3Rfd3JpdGUoc3RydWN0IGl3bF9tdm0gKm12bSwKKwkJCQkJICAgICAgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCisJCQkJCSAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlpbnQgcmV0ID0gaXdsX212bV9yZWZfc3luYyhtdm0sIElXTF9NVk1fUkVGX1BSUEhfV1JJVEUpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWl3bF9tdm1fZndfZGJnX2NvbGxlY3QobXZtKTsKKworCWl3bF9tdm1fdW5yZWYobXZtLCBJV0xfTVZNX1JFRl9QUlBIX1dSSVRFKTsKKworCXJldHVybiBjb3VudDsKK30KKwogI2RlZmluZSBBRERfVEVYVCguLi4pIHBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgX19WQV9BUkdTX18pCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfQkNBU1RfRklMVEVSSU5HCiBzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfYmNhc3RfZmlsdGVyc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLApAQCAtMTM0MCw2ICsxMzg3LDcgQEAKIAlQUklOVF9NVk1fUkVGKElXTF9NVk1fUkVGX1RNX0NNRCk7CiAJUFJJTlRfTVZNX1JFRihJV0xfTVZNX1JFRl9FWElUX1dPUkspOwogCVBSSU5UX01WTV9SRUYoSVdMX01WTV9SRUZfUFJPVEVDVF9DU0EpOworCVBSSU5UX01WTV9SRUYoSVdMX01WTV9SRUZfRldfREJHX0NPTExFQ1QpOwogCiAJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwogfQpAQCAtMTQzOSw2ICsxNDg3LDI2IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfZW5hYmxlX3NjYW5faXRlcmF0aW9uX25vdGlmX3dyaXRlKHN0cnVjdCBpd2xfbXZtICptdm0sCisJCQkJCQkJICAgY2hhciAqYnVmLAorCQkJCQkJCSAgIHNpemVfdCBjb3VudCwKKwkJCQkJCQkgICBsb2ZmX3QgKnBwb3MpCit7CisJaW50IHZhbDsKKworCW11dGV4X2xvY2soJm12bS0+bXV0ZXgpOworCisJaWYgKGtzdHJ0b2ludChidWYsIDEwLCAmdmFsKSkgeworCQltdXRleF91bmxvY2soJm12bS0+bXV0ZXgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdm0tPnNjYW5faXRlcl9ub3RpZl9lbmFibGVkID0gdmFsOworCW11dGV4X3VubG9jaygmbXZtLT5tdXRleCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKIE1WTV9ERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMocHJwaF9yZWcsIDY0KTsKIAogLyogRGV2aWNlIHdpZGUgZGVidWdmcyBlbnRyaWVzICovCkBAIC0xNDU5LDYgKzE1MjcsOSBAQAogTVZNX0RFQlVHRlNfV1JJVEVfRklMRV9PUFMoYnRfZm9yY2VfYW50LCAxMCk7CiBNVk1fREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKHNjYW5fYW50X3J4Y2hhaW4sIDgpOwogTVZNX0RFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhkMGkzX3JlZnMsIDgpOworTVZNX0RFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhmd19kYmdfY29uZiwgOCk7CitNVk1fREVCVUdGU19XUklURV9GSUxFX09QUyhmd19kYmdfY29sbGVjdCwgOCk7CitNVk1fREVCVUdGU19XUklURV9GSUxFX09QUyhlbmFibGVfc2Nhbl9pdGVyYXRpb25fbm90aWYsIDgpOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfQkNBU1RfRklMVEVSSU5HCiBNVk1fREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKGJjYXN0X2ZpbHRlcnMsIDI1Nik7CkBAIC0xNTAwLDYgKzE1NzEsMTAgQEAKIAkJCSAgICAgU19JV1VTUiB8IFNfSVJVU1IpOwogCU1WTV9ERUJVR0ZTX0FERF9GSUxFKHBycGhfcmVnLCBtdm0tPmRlYnVnZnNfZGlyLCBTX0lXVVNSIHwgU19JUlVTUik7CiAJTVZNX0RFQlVHRlNfQUREX0ZJTEUoZDBpM19yZWZzLCBtdm0tPmRlYnVnZnNfZGlyLCBTX0lSVVNSIHwgU19JV1VTUik7CisJTVZNX0RFQlVHRlNfQUREX0ZJTEUoZndfZGJnX2NvbmYsIG12bS0+ZGVidWdmc19kaXIsIFNfSVJVU1IgfCBTX0lXVVNSKTsKKwlNVk1fREVCVUdGU19BRERfRklMRShmd19kYmdfY29sbGVjdCwgbXZtLT5kZWJ1Z2ZzX2RpciwgU19JV1VTUik7CisJTVZNX0RFQlVHRlNfQUREX0ZJTEUoZW5hYmxlX3NjYW5faXRlcmF0aW9uX25vdGlmLCBtdm0tPmRlYnVnZnNfZGlyLAorCQkJICAgICBTX0lXVVNSKTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0JDQVNUX0ZJTFRFUklORwogCWlmIChtdm0tPmZ3LT51Y29kZV9jYXBhLmZsYWdzICYgSVdMX1VDT0RFX1RMVl9GTEFHU19CQ0FTVF9GSUxURVJJTkcpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS1wb3dlci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZnctYXBpLXBvd2VyLmgKaW5kZXggNDMwMDIwMC4uNGZjMDkzOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS1wb3dlci5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS1wb3dlci5oCkBAIC05MiwxNCArOTIsMzIgQEAKIH07CiAKIC8qKgorICogc3RydWN0IGl3bF9sdHJfY29uZmlnX2NtZF92MSAtIGNvbmZpZ3VyZXMgdGhlIExUUgorICogQGZsYWdzOiBTZWUgJWVudW0gaXdsX2x0cl9jb25maWdfZmxhZ3MKKyAqLworc3RydWN0IGl3bF9sdHJfY29uZmlnX2NtZF92MSB7CisJX19sZTMyIGZsYWdzOworCV9fbGUzMiBzdGF0aWNfbG9uZzsKKwlfX2xlMzIgc3RhdGljX3Nob3J0OworfSBfX3BhY2tlZDsgLyogTFRSX0NBUEFCTEVfQVBJX1NfVkVSXzEgKi8KKworI2RlZmluZSBMVFJfVkFMSURfU1RBVEVTX05VTSA0CisKKy8qKgogICogc3RydWN0IGl3bF9sdHJfY29uZmlnX2NtZCAtIGNvbmZpZ3VyZXMgdGhlIExUUgogICogQGZsYWdzOiBTZWUgJWVudW0gaXdsX2x0cl9jb25maWdfZmxhZ3MKKyAqIEBzdGF0aWNfbG9uZzoKKyAqIEBzdGF0aWNfc2hvcnQ6CisgKiBAbHRyX2NmZ192YWx1ZXM6CisgKiBAbHRyX3Nob3J0X2lkbGVfdGltZW91dDoKICAqLwogc3RydWN0IGl3bF9sdHJfY29uZmlnX2NtZCB7CiAJX19sZTMyIGZsYWdzOwogCV9fbGUzMiBzdGF0aWNfbG9uZzsKIAlfX2xlMzIgc3RhdGljX3Nob3J0OwotfSBfX3BhY2tlZDsKKwlfX2xlMzIgbHRyX2NmZ192YWx1ZXNbTFRSX1ZBTElEX1NUQVRFU19OVU1dOworCV9fbGUzMiBsdHJfc2hvcnRfaWRsZV90aW1lb3V0OworfSBfX3BhY2tlZDsgLyogTFRSX0NBUEFCTEVfQVBJX1NfVkVSXzIgKi8KIAogLyogUmFkaW8gTFAgUlggRW5lcmd5IFRocmVzaG9sZCBtZWFzdXJlZCBpbiBkQm0gKi8KICNkZWZpbmUgUE9XRVJfTFBSWF9SU1NJX1RIUkVTSE9MRAk3NQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZnctYXBpLXJzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9mdy1hcGktcnMuaAppbmRleCA4YmI1Yjk0Li4wZjFlYTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9mdy1hcGktcnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9mdy1hcGktcnMuaApAQCAtMzA4LDYgKzMwOCw0MiBAQAogI2RlZmluZSBMUV9GTEFHX0RZTkFNSUNfQldfUE9TICAgICAgICAgIDYKICNkZWZpbmUgTFFfRkxBR19EWU5BTUlDX0JXX01TSyAgICAgICAgICAoMSA8PCBMUV9GTEFHX0RZTkFNSUNfQldfUE9TKQogCisvKiBTaW5nbGUgU3RyZWFtIFR4IFBhcmFtZXRlcnMgKGxxX2NtZC0+c3NfcGFyYW1zKQorICogRmxhZ3MgdG8gY29udHJvbCBhIHNtYXJ0IEZXIGRlY2lzaW9uIGFib3V0IHdoZXRoZXIgQkZFUi9TVEJDL1NJU08gd2lsbCBiZQorICogdXNlZCBmb3Igc2luZ2xlIHN0cmVhbSBUeC4KKyAqLworCisvKiBCaXQgMC0xOiBNYXggU1RCQyBzdHJlYW1zIGFsbG93ZWQuIENhbiBiZSAwLTMuCisgKiAoMCkgLSBObyBTVEJDIGFsbG93ZWQKKyAqICgxKSAtIDJ4MSBTVEJDIGFsbG93ZWQgKEhUL1ZIVCkKKyAqICgyKSAtIDR4MiBTVEJDIGFsbG93ZWQgKEhUL1ZIVCkKKyAqICgzKSAtIDN4MiBTVEJDIGFsbG93ZWQgKEhUIG9ubHkpCisgKiBBbGwgb3VyIGNoaXBzIGFyZSBhdCBtb3N0IDIgYW50ZW5uYXMgc28gb25seSAoMSkgaXMgdmFsaWQgZm9yIG5vdy4KKyAqLworI2RlZmluZSBMUV9TU19TVEJDX0FMTE9XRURfUE9TICAgICAgICAgIDAKKyNkZWZpbmUgTFFfU1NfU1RCQ19BTExPV0VEX01TSwkJKDMgPDwgTFFfU1NfU1RCQ19BTExPV0VEX01TSykKKworLyogMngxIFNUQkMgaXMgYWxsb3dlZCAqLworI2RlZmluZSBMUV9TU19TVEJDXzFTU19BTExPV0VECQkoMSA8PCBMUV9TU19TVEJDX0FMTE9XRURfUE9TKQorCisvKiBCaXQgMjogQmVhbWZvcm1lciAoVkhUIG9ubHkpIGlzIGFsbG93ZWQgKi8KKyNkZWZpbmUgTFFfU1NfQkZFUl9BTExPV0VEX1BPUwkJMgorI2RlZmluZSBMUV9TU19CRkVSX0FMTE9XRUQJCSgxIDw8IExRX1NTX0JGRVJfQUxMT1dFRF9QT1MpCisKKy8qIEJpdCAzOiBGb3JjZSBCRkVSIG9yIFNUQkMgZm9yIHRlc3RpbmcKKyAqIElmIHRoaXMgaXMgc2V0OgorICogSWYgQkZFUiBpcyBhbGxvd2VkIHRoZW4gZm9yY2UgdGhlIHVjb2RlIHRvIGNob29zZSBCRkVSIGVsc2UKKyAqIElmIFNUQkMgaXMgYWxsb3dlZCB0aGVuIGZvcmNlIHRoZSB1Y29kZSB0byBjaG9vc2UgU1RCQyBvdmVyIFNJU08KKyAqLworI2RlZmluZSBMUV9TU19GT1JDRV9QT1MJCQkzCisjZGVmaW5lIExRX1NTX0ZPUkNFCQkJKDEgPDwgTFFfU1NfRk9SQ0VfUE9TKQorCisvKiBCaXQgMzE6IHNzX3BhcmFtcyBmaWVsZCBpcyB2YWxpZC4gVXNlZCBmb3IgRlcgYmFja3dhcmQgY29tcGF0aWJpbGl0eQorICogd2l0aCBvdGhlciBkcml2ZXJzIHdoaWNoIGRvbid0IHN1cHBvcnQgdGhlIHNzX3BhcmFtcyBBUEkgeWV0CisgKi8KKyNkZWZpbmUgTFFfU1NfUEFSQU1TX1ZBTElEX1BPUwkJMzEKKyNkZWZpbmUgTFFfU1NfUEFSQU1TX1ZBTElECQkoMSA8PCBMUV9TU19QQVJBTVNfVkFMSURfUE9TKQorCiAvKioKICAqIHN0cnVjdCBpd2xfbHFfY21kIC0gbGluayBxdWFsaXR5IGNvbW1hbmQKICAqIEBzdGFfaWQ6IHN0YXRpb24gdG8gdXBkYXRlCkBAIC0zMzAsNyArMzY2LDcgQEAKICAqCTIgLSAweDNmOiBtYXhpbWFsIG51bWJlciBvZiBmcmFtZXMgKHVwIHRvIDNmID09IDYzKQogICogQHJzX3RhYmxlOiBhcnJheSBvZiByYXRlcyBmb3IgZWFjaCBUWCB0cnksIGVhY2ggaXMgcmF0ZV9uX2ZsYWdzLAogICoJbWVhbmluZyBpdCBpcyBhIGNvbWJpbmF0aW9uIG9mIFJBVEVfTUNTXyogYW5kIElXTF9SQVRFXypfUExDUAotICogQGJmX3BhcmFtczogYmVhbSBmb3JtaW5nIHBhcmFtcywgY3VycmVudGx5IG5vdCB1c2VkCisgKiBAc3NfcGFyYW1zOiBzaW5nbGUgc3RyZWFtIGZlYXR1cmVzLiBkZWNsYXJlIHdoZXRoZXIgU1RCQyBvciBCRkVSIGFyZSBhbGxvd2VkLgogICovCiBzdHJ1Y3QgaXdsX2xxX2NtZCB7CiAJdTggc3RhX2lkOwpAQCAtMzQ4LDYgKzM4NCw2IEBACiAJdTggYWdnX2ZyYW1lX2NudF9saW1pdDsKIAlfX2xlMzIgcmVzZXJ2ZWQyOwogCV9fbGUzMiByc190YWJsZVtMUV9NQVhfUkVUUllfTlVNXTsKLQlfX2xlMzIgYmZfcGFyYW1zOworCV9fbGUzMiBzc19wYXJhbXM7CiB9OyAvKiBMSU5LX1FVQUxJVFlfQ01EX0FQSV9TX1ZFUl8xICovCiAjZW5kaWYgLyogX19md19hcGlfcnNfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9mdy1hcGktc2Nhbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZnctYXBpLXNjYW4uaAppbmRleCAyMDE4NDZkLi5jZmMwZTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9mdy1hcGktc2Nhbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS1zY2FuLmgKQEAgLTY1Myw4ICs2NTMsMTEgQEAKIH07CiAKIC8qIGl3bF9zY2FuX2NoYW5uZWxfb3B0IC0gQ0hBTk5FTF9PUFRJTUlaQVRJT05fQVBJX1MKLSAqIEBmbGFnczogZW51bSBpd2xfc2Nhbl9jaGFubmVsX2ZsZ3MKLSAqIEBub25fZWJzX3JhdGlvOiBob3cgbWFueSByZWd1bGFyIHNjYW4gaXRlcmF0aW9uIGJlZm9yZSBFQlMKKyAqIEBmbGFnczogZW51bSBpd2xfc2Nhbl9jaGFubmVsX2ZsYWdzCisgKiBAbm9uX2Vic19yYXRpbzogZGVmaW5lcyB0aGUgcmF0aW8gb2YgbnVtYmVyIG9mIHNjYW4gaXRlcmF0aW9ucyB3aGVyZSBFQlMgaXMKKyAqCWludm9sdmVkLgorICoJMSAtIEVCUyBpcyBkaXNhYmxlZC4KKyAqCTIgLSBldmVyeSBzZWNvbmQgc2NhbiB3aWxsIGJlIGZ1bGwgc2NhbihhbmQgc28gb24pLgogICovCiBzdHJ1Y3QgaXdsX3NjYW5fY2hhbm5lbF9vcHQgewogCV9fbGUxNiBmbGFnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS1zdGF0cy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZnctYXBpLXN0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4MTY4YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS1zdGF0cy5oCkBAIC0wLDAgKzEsMjc3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogVGhpcyBmaWxlIGlzIHByb3ZpZGVkIHVuZGVyIGEgZHVhbCBCU0QvR1BMdjIgbGljZW5zZS4gIFdoZW4gdXNpbmcgb3IKKyAqIHJlZGlzdHJpYnV0aW5nIHRoaXMgZmlsZSwgeW91IG1heSBkbyBzbyB1bmRlciBlaXRoZXIgbGljZW5zZS4KKyAqCisgKiBHUEwgTElDRU5TRSBTVU1NQVJZCisgKgorICogQ29weXJpZ2h0KGMpIDIwMTIgLSAyMDE0IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMTMgLSAyMDE1IEludGVsIE1vYmlsZSBDb21tdW5pY2F0aW9ucyBHbWJICisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwKKyAqIFVTQQorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgQ09QWUlORy4KKyAqCisgKiBDb250YWN0IEluZm9ybWF0aW9uOgorICogIEludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgorICogSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworICoKKyAqIEJTRCBMSUNFTlNFCisgKgorICogQ29weXJpZ2h0KGMpIDIwMTIgLSAyMDE0IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMTMgLSAyMDE1IEludGVsIE1vYmlsZSBDb21tdW5pY2F0aW9ucyBHbWJICisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKiAgKiBOZWl0aGVyIHRoZSBuYW1lIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX2Z3X2FwaV9zdGF0c19oX18KKyNkZWZpbmUgX19md19hcGlfc3RhdHNfaF9fCisKK3N0cnVjdCBtdm1fc3RhdGlzdGljc19kYmcgeworCV9fbGUzMiBidXJzdF9jaGVjazsKKwlfX2xlMzIgYnVyc3RfY291bnQ7CisJX19sZTMyIHdhaXRfZm9yX3NpbGVuY2VfdGltZW91dF9jbnQ7CisJX19sZTMyIHJlc2VydmVkWzNdOworfSBfX3BhY2tlZDsgLyogU1RBVElTVElDU19ERUJVR19BUElfU19WRVJfMiAqLworCitzdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfZGl2IHsKKwlfX2xlMzIgdHhfb25fYTsKKwlfX2xlMzIgdHhfb25fYjsKKwlfX2xlMzIgZXhlY190aW1lOworCV9fbGUzMiBwcm9iZV90aW1lOworCV9fbGUzMiByc3NpX2FudDsKKwlfX2xlMzIgcmVzZXJ2ZWQyOworfSBfX3BhY2tlZDsgLyogU1RBVElTVElDU19TTE9XX0RJVl9BUElfU19WRVJfMiAqLworCitzdHJ1Y3QgbXZtX3N0YXRpc3RpY3Nfcnhfbm9uX3BoeSB7CisJX19sZTMyIGJvZ3VzX2N0czsJLyogQ1RTIHJlY2VpdmVkIHdoZW4gbm90IGV4cGVjdGluZyBDVFMgKi8KKwlfX2xlMzIgYm9ndXNfYWNrOwkvKiBBQ0sgcmVjZWl2ZWQgd2hlbiBub3QgZXhwZWN0aW5nIEFDSyAqLworCV9fbGUzMiBub25fYnNzaWRfZnJhbWVzOwkvKiBudW1iZXIgb2YgZnJhbWVzIHdpdGggQlNTSUQgdGhhdAorCQkJCQkgKiBkb2Vzbid0IGJlbG9uZyB0byB0aGUgU1RBIEJTU0lEICovCisJX19sZTMyIGZpbHRlcmVkX2ZyYW1lczsJLyogY291bnQgZnJhbWVzIHRoYXQgd2VyZSBkdW1wZWQgaW4gdGhlCisJCQkJICogZmlsdGVyaW5nIHByb2Nlc3MgKi8KKwlfX2xlMzIgbm9uX2NoYW5uZWxfYmVhY29uczsJLyogYmVhY29ucyB3aXRoIG91ciBic3MgaWQgYnV0IG5vdCBvbgorCQkJCQkgKiBvdXIgc2VydmluZyBjaGFubmVsICovCisJX19sZTMyIGNoYW5uZWxfYmVhY29uczsJLyogYmVhY29ucyB3aXRoIG91ciBic3MgaWQgYW5kIGluIG91cgorCQkJCSAqIHNlcnZpbmcgY2hhbm5lbCAqLworCV9fbGUzMiBudW1fbWlzc2VkX2Jjb247CS8qIG51bWJlciBvZiBtaXNzZWQgYmVhY29ucyAqLworCV9fbGUzMiBhZGNfcnhfc2F0dXJhdGlvbl90aW1lOwkvKiBjb3VudCBpbiAwLjh1cyB1bml0cyB0aGUgdGltZSB0aGUKKwkJCQkJICogQURDIHdhcyBpbiBzYXR1cmF0aW9uICovCisJX19sZTMyIGluYV9kZXRlY3Rpb25fc2VhcmNoX3RpbWU7LyogdG90YWwgdGltZSAoaW4gMC44dXMpIHNlYXJjaGVkCisJCQkJCSAgKiBmb3IgSU5BICovCisJX19sZTMyIGJlYWNvbl9zaWxlbmNlX3Jzc2lfYTsJLyogUlNTSSBzaWxlbmNlIGFmdGVyIGJlYWNvbiBmcmFtZSAqLworCV9fbGUzMiBiZWFjb25fc2lsZW5jZV9yc3NpX2I7CS8qIFJTU0kgc2lsZW5jZSBhZnRlciBiZWFjb24gZnJhbWUgKi8KKwlfX2xlMzIgYmVhY29uX3NpbGVuY2VfcnNzaV9jOwkvKiBSU1NJIHNpbGVuY2UgYWZ0ZXIgYmVhY29uIGZyYW1lICovCisJX19sZTMyIGludGVyZmVyZW5jZV9kYXRhX2ZsYWc7CS8qIGZsYWcgZm9yIGludGVyZmVyZW5jZSBkYXRhCisJCQkJCSAqIGF2YWlsYWJpbGl0eS4gMSB3aGVuIGRhdGEgaXMKKwkJCQkJICogYXZhaWxhYmxlLiAqLworCV9fbGUzMiBjaGFubmVsX2xvYWQ7CQkvKiBjb3VudHMgUlggRW5hYmxlIHRpbWUgaW4gdVNlYyAqLworCV9fbGUzMiBkc3BfZmFsc2VfYWxhcm1zOwkvKiBEU1AgZmFsc2UgYWxhcm0gKGJvdGggT0ZETQorCQkJCQkgKiBhbmQgQ0NLKSBjb3VudGVyICovCisJX19sZTMyIGJlYWNvbl9yc3NpX2E7CisJX19sZTMyIGJlYWNvbl9yc3NpX2I7CisJX19sZTMyIGJlYWNvbl9yc3NpX2M7CisJX19sZTMyIGJlYWNvbl9lbmVyZ3lfYTsKKwlfX2xlMzIgYmVhY29uX2VuZXJneV9iOworCV9fbGUzMiBiZWFjb25fZW5lcmd5X2M7CisJX19sZTMyIG51bV9idF9raWxsczsKKwlfX2xlMzIgbWFjX2lkOworCV9fbGUzMiBkaXJlY3RlZF9kYXRhX21wZHU7Cit9IF9fcGFja2VkOyAvKiBTVEFUSVNUSUNTX1JYX05PTl9QSFlfQVBJX1NfVkVSXzMgKi8KKworc3RydWN0IG12bV9zdGF0aXN0aWNzX3J4X3BoeSB7CisJX19sZTMyIGluYV9jbnQ7CisJX19sZTMyIGZpbmFfY250OworCV9fbGUzMiBwbGNwX2VycjsKKwlfX2xlMzIgY3JjMzJfZXJyOworCV9fbGUzMiBvdmVycnVuX2VycjsKKwlfX2xlMzIgZWFybHlfb3ZlcnJ1bl9lcnI7CisJX19sZTMyIGNyYzMyX2dvb2Q7CisJX19sZTMyIGZhbHNlX2FsYXJtX2NudDsKKwlfX2xlMzIgZmluYV9zeW5jX2Vycl9jbnQ7CisJX19sZTMyIHNmZF90aW1lb3V0OworCV9fbGUzMiBmaW5hX3RpbWVvdXQ7CisJX19sZTMyIHVucmVzcG9uZGVkX3J0czsKKwlfX2xlMzIgcnhlX2ZyYW1lX2xtdF9vdmVycnVuOworCV9fbGUzMiBzZW50X2Fja19jbnQ7CisJX19sZTMyIHNlbnRfY3RzX2NudDsKKwlfX2xlMzIgc2VudF9iYV9yc3BfY250OworCV9fbGUzMiBkc3Bfc2VsZl9raWxsOworCV9fbGUzMiBtaF9mb3JtYXRfZXJyOworCV9fbGUzMiByZV9hY3FfbWFpbl9yc3NpX3N1bTsKKwlfX2xlMzIgcmVzZXJ2ZWQ7Cit9IF9fcGFja2VkOyAvKiBTVEFUSVNUSUNTX1JYX1BIWV9BUElfU19WRVJfMiAqLworCitzdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfcnhfaHRfcGh5IHsKKwlfX2xlMzIgcGxjcF9lcnI7CisJX19sZTMyIG92ZXJydW5fZXJyOworCV9fbGUzMiBlYXJseV9vdmVycnVuX2VycjsKKwlfX2xlMzIgY3JjMzJfZ29vZDsKKwlfX2xlMzIgY3JjMzJfZXJyOworCV9fbGUzMiBtaF9mb3JtYXRfZXJyOworCV9fbGUzMiBhZ2dfY3JjMzJfZ29vZDsKKwlfX2xlMzIgYWdnX21wZHVfY250OworCV9fbGUzMiBhZ2dfY250OworCV9fbGUzMiB1bnN1cHBvcnRfbWNzOworfSBfX3BhY2tlZDsgIC8qIFNUQVRJU1RJQ1NfSFRfUlhfUEhZX0FQSV9TX1ZFUl8xICovCisKK3N0cnVjdCBtdm1fc3RhdGlzdGljc190eF9ub25fcGh5IHsKKwlfX2xlMzIgcHJlYW1ibGVfY250OworCV9fbGUzMiByeF9kZXRlY3RlZF9jbnQ7CisJX19sZTMyIGJ0X3ByaW9fZGVmZXJfY250OworCV9fbGUzMiBidF9wcmlvX2tpbGxfY250OworCV9fbGUzMiBmZXdfYnl0ZXNfY250OworCV9fbGUzMiBjdHNfdGltZW91dDsKKwlfX2xlMzIgYWNrX3RpbWVvdXQ7CisJX19sZTMyIGV4cGVjdGVkX2Fja19jbnQ7CisJX19sZTMyIGFjdHVhbF9hY2tfY250OworCV9fbGUzMiBkdW1wX21zZHVfY250OworCV9fbGUzMiBidXJzdF9hYm9ydF9uZXh0X2ZyYW1lX21pc21hdGNoX2NudDsKKwlfX2xlMzIgYnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudDsKKwlfX2xlMzIgY3RzX3RpbWVvdXRfY29sbGlzaW9uOworCV9fbGUzMiBhY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb247Cit9IF9fcGFja2VkOyAvKiBTVEFUSVNUSUNTX1RYX05PTl9QSFlfQVBJX1NfVkVSXzMgKi8KKworI2RlZmluZSBNQVhfQ0hBSU5TIDMKKworc3RydWN0IG12bV9zdGF0aXN0aWNzX3R4X25vbl9waHlfYWdnIHsKKwlfX2xlMzIgYmFfdGltZW91dDsKKwlfX2xlMzIgYmFfcmVzY2hlZHVsZV9mcmFtZXM7CisJX19sZTMyIHNjZF9xdWVyeV9hZ2dfZnJhbWVfY250OworCV9fbGUzMiBzY2RfcXVlcnlfbm9fYWdnOworCV9fbGUzMiBzY2RfcXVlcnlfYWdnOworCV9fbGUzMiBzY2RfcXVlcnlfbWlzbWF0Y2g7CisJX19sZTMyIGZyYW1lX25vdF9yZWFkeTsKKwlfX2xlMzIgdW5kZXJydW47CisJX19sZTMyIGJ0X3ByaW9fa2lsbDsKKwlfX2xlMzIgcnhfYmFfcnNwX2NudDsKKwlfX3M4IHR4cG93ZXJbTUFYX0NIQUlOU107CisJX19zOCByZXNlcnZlZDsKKwlfX2xlMzIgcmVzZXJ2ZWQyOworfSBfX3BhY2tlZDsgLyogU1RBVElTVElDU19UWF9OT05fUEhZX0FHR19BUElfU19WRVJfMSAqLworCitzdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfdHhfY2hhbm5lbF93aWR0aCB7CisJX19sZTMyIGV4dF9jY2FfbmFycm93X2NoMjBbMV07CisJX19sZTMyIGV4dF9jY2FfbmFycm93X2NoNDBbMl07CisJX19sZTMyIGV4dF9jY2FfbmFycm93X2NoODBbM107CisJX19sZTMyIGV4dF9jY2FfbmFycm93X2NoMTYwWzRdOworCV9fbGUzMiBsYXN0X3R4X2NoX3dpZHRoX2luZHg7CisJX19sZTMyIHJ4X2RldGVjdGVkX3Blcl9jaF93aWR0aFs0XTsKKwlfX2xlMzIgc3VjY2Vzc19wZXJfY2hfd2lkdGhbNF07CisJX19sZTMyIGZhaWxfcGVyX2NoX3dpZHRoWzRdOworfTsgLyogU1RBVElTVElDU19UWF9DSEFOTkVMX1dJRFRIX0FQSV9TX1ZFUl8xICovCisKK3N0cnVjdCBtdm1fc3RhdGlzdGljc190eCB7CisJc3RydWN0IG12bV9zdGF0aXN0aWNzX3R4X25vbl9waHkgZ2VuZXJhbDsKKwlzdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfdHhfbm9uX3BoeV9hZ2cgYWdnOworCXN0cnVjdCBtdm1fc3RhdGlzdGljc190eF9jaGFubmVsX3dpZHRoIGNoYW5uZWxfd2lkdGg7Cit9IF9fcGFja2VkOyAvKiBTVEFUSVNUSUNTX1RYX0FQSV9TX1ZFUl80ICovCisKKworc3RydWN0IG12bV9zdGF0aXN0aWNzX2J0X2FjdGl2aXR5IHsKKwlfX2xlMzIgaGlfcHJpb3JpdHlfdHhfcmVxX2NudDsKKwlfX2xlMzIgaGlfcHJpb3JpdHlfdHhfZGVuaWVkX2NudDsKKwlfX2xlMzIgbG9fcHJpb3JpdHlfdHhfcmVxX2NudDsKKwlfX2xlMzIgbG9fcHJpb3JpdHlfdHhfZGVuaWVkX2NudDsKKwlfX2xlMzIgaGlfcHJpb3JpdHlfcnhfcmVxX2NudDsKKwlfX2xlMzIgaGlfcHJpb3JpdHlfcnhfZGVuaWVkX2NudDsKKwlfX2xlMzIgbG9fcHJpb3JpdHlfcnhfcmVxX2NudDsKKwlfX2xlMzIgbG9fcHJpb3JpdHlfcnhfZGVuaWVkX2NudDsKK30gX19wYWNrZWQ7ICAvKiBTVEFUSVNUSUNTX0JUX0FDVElWSVRZX0FQSV9TX1ZFUl8xICovCisKK3N0cnVjdCBtdm1fc3RhdGlzdGljc19nZW5lcmFsIHsKKwlfX2xlMzIgcmFkaW9fdGVtcGVyYXR1cmU7CisJX19sZTMyIHJhZGlvX3ZvbHRhZ2U7CisJc3RydWN0IG12bV9zdGF0aXN0aWNzX2RiZyBkYmc7CisJX19sZTMyIHNsZWVwX3RpbWU7CisJX19sZTMyIHNsb3RzX291dDsKKwlfX2xlMzIgc2xvdHNfaWRsZTsKKwlfX2xlMzIgdHRsX3RpbWVzdGFtcDsKKwlzdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfZGl2IHNsb3dfZGl2OworCV9fbGUzMiByeF9lbmFibGVfY291bnRlcjsKKwkvKgorCSAqIG51bV9vZl9zb3Nfc3RhdGVzOgorCSAqICBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHdlIGhhdmUgdG8gcmUtdHVuZQorCSAqICBpbiBvcmRlciB0byBnZXQgb3V0IG9mIGJhZCBQSFkgc3RhdHVzCisJICovCisJX19sZTMyIG51bV9vZl9zb3Nfc3RhdGVzOworCV9fbGUzMiBiZWFjb25fZmlsdGVyZWQ7CisJX19sZTMyIG1pc3NlZF9iZWFjb25zOworCV9fczggYmVhY29uX2ZpbHRlcl9hdmVyYWdlX2VuZXJneTsKKwlfX3M4IGJlYWNvbl9maWx0ZXJfcmVhc29uOworCV9fczggYmVhY29uX2ZpbHRlcl9jdXJyZW50X2VuZXJneTsKKwlfX3M4IGJlYWNvbl9maWx0ZXJfcmVzZXJ2ZWQ7CisJX19sZTMyIGJlYWNvbl9maWx0ZXJfZGVsdGFfdGltZTsKKwlzdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfYnRfYWN0aXZpdHkgYnRfYWN0aXZpdHk7Cit9IF9fcGFja2VkOyAvKiBTVEFUSVNUSUNTX0dFTkVSQUxfQVBJX1NfVkVSXzUgKi8KKworc3RydWN0IG12bV9zdGF0aXN0aWNzX3J4IHsKKwlzdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfcnhfcGh5IG9mZG07CisJc3RydWN0IG12bV9zdGF0aXN0aWNzX3J4X3BoeSBjY2s7CisJc3RydWN0IG12bV9zdGF0aXN0aWNzX3J4X25vbl9waHkgZ2VuZXJhbDsKKwlzdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfcnhfaHRfcGh5IG9mZG1faHQ7Cit9IF9fcGFja2VkOyAvKiBTVEFUSVNUSUNTX1JYX0FQSV9TX1ZFUl8zICovCisKKy8qCisgKiBTVEFUSVNUSUNTX05PVElGSUNBVElPTiA9IDB4OWQgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQorICoKKyAqIEJ5IGRlZmF1bHQsIHVDb2RlIGlzc3VlcyB0aGlzIG5vdGlmaWNhdGlvbiBhZnRlciByZWNlaXZpbmcgYSBiZWFjb24KKyAqIHdoaWxlIGFzc29jaWF0ZWQuICBUbyBkaXNhYmxlIHRoaXMgYmVoYXZpb3IsIHNldCBESVNBQkxFX05PVElGIGZsYWcgaW4gdGhlCisgKiBSRVBMWV9TVEFUSVNUSUNTX0NNRCAweDljLCBhYm92ZS4KKyAqCisgKiBTdGF0aXN0aWNzIGNvdW50ZXJzIGNvbnRpbnVlIHRvIGluY3JlbWVudCBiZWFjb24gYWZ0ZXIgYmVhY29uLCBidXQgYXJlCisgKiBjbGVhcmVkIHdoZW4gY2hhbmdpbmcgY2hhbm5lbHMgb3Igd2hlbiBkcml2ZXIgaXNzdWVzIFJFUExZX1NUQVRJU1RJQ1NfQ01ECisgKiAweDljIHdpdGggQ0xFQVJfU1RBVFMgYml0IHNldCAoc2VlIGFib3ZlKS4KKyAqCisgKiB1Q29kZSBhbHNvIGlzc3VlcyB0aGlzIG5vdGlmaWNhdGlvbiBkdXJpbmcgc2NhbnMuICB1Q29kZSBjbGVhcnMgc3RhdGlzdGljcworICogYXBwcm9wcmlhdGVseSBzbyB0aGF0IGVhY2ggbm90aWZpY2F0aW9uIGNvbnRhaW5zIHN0YXRpc3RpY3MgZm9yIG9ubHkgdGhlCisgKiBvbmUgY2hhbm5lbCB0aGF0IGhhcyBqdXN0IGJlZW4gc2Nhbm5lZC4KKyAqLworCitzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MgeworCV9fbGUzMiBmbGFnOworCXN0cnVjdCBtdm1fc3RhdGlzdGljc19yeCByeDsKKwlzdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfdHggdHg7CisJc3RydWN0IG12bV9zdGF0aXN0aWNzX2dlbmVyYWwgZ2VuZXJhbDsKK30gX19wYWNrZWQ7IC8qIFNUQVRJU1RJQ1NfTlRGWV9BUElfU19WRVJfOCAqLworCisjZW5kaWYgLyogX19md19hcGlfc3RhdHNfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9mdy1hcGktdHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS10eC5oCmluZGV4IDViY2ExZjguLjgxYzRlYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS10eC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS10eC5oCkBAIC01OTIsNCArNTkyLDQzIEBACiAJCQkgICAgdHhfcmVzcC0+ZnJhbWVfY291bnQpICYgMHhmZmY7CiB9CiAKKy8qKgorICogc3RydWN0IGl3bF9zY2RfdHhxX2NmZ19jbWQgLSBOZXcgdHhxIGh3IHNjaGVkdWxlciBjb25maWcgY29tbWFuZAorICogQHRva2VuOgorICogQHN0YV9pZDogc3RhdGlvbiBpZAorICogQHRpZDoKKyAqIEBzY2RfcXVldWU6IHNjaGVkdWxlciBxdWV1ZSB0byBjb25maXVnCisgKiBAZW5hYmxlOiAxIHF1ZXVlIGVuYWJsZSwgMCBxdWV1ZSBkaXNhYmxlCisgKiBAYWdncmVnYXRlOiAxIGFnZ3JlZ2F0ZWQgcXVldWUsIDAgb3RoZXJ3aXNlCisgKiBAdHhfZmlmbzogJWVudW0gaXdsX212bV90eF9maWZvCisgKiBAd2luZG93OiBCQSB3aW5kb3cgc2l6ZQorICogQHNzbjogU1NOIGZvciB0aGUgQkEgYWdyZWVtZW50CisgKi8KK3N0cnVjdCBpd2xfc2NkX3R4cV9jZmdfY21kIHsKKwl1OCB0b2tlbjsKKwl1OCBzdGFfaWQ7CisJdTggdGlkOworCXU4IHNjZF9xdWV1ZTsKKwl1OCBlbmFibGU7CisJdTggYWdncmVnYXRlOworCXU4IHR4X2ZpZm87CisJdTggd2luZG93OworCV9fbGUxNiBzc247CisJX19sZTE2IHJlc2VydmVkOworfSBfX3BhY2tlZDsgLyogU0NEX1FVRVVFX0NGR19DTURfQVBJX1NfVkVSXzEgKi8KKworLyoqCisgKiBzdHJ1Y3QgaXdsX3NjZF90eHFfY2ZnX3JzcAorICogQHRva2VuOiB0YWtlbiBmcm9tIHRoZSBjb21tYW5kCisgKiBAc3RhX2lkOiBzdGF0aW9uIGlkIGZyb20gdGhlIGNvbW1hbmQKKyAqIEB0aWQ6IHRpZCBmcm9tIHRoZSBjb21tYW5kCisgKiBAc2NkX3F1ZXVlOiBzY2RfcXVldWUgZnJvbSB0aGUgY29tbWFuZAorICovCitzdHJ1Y3QgaXdsX3NjZF90eHFfY2ZnX3JzcCB7CisJdTggdG9rZW47CisJdTggc3RhX2lkOworCXU4IHRpZDsKKwl1OCBzY2RfcXVldWU7Cit9IF9fcGFja2VkOyAvKiBTQ0RfUVVFVUVfQ0ZHX1JTUF9BUElfU19WRVJfMSAqLworCiAjZW5kaWYgLyogX19md19hcGlfdHhfaF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9mdy1hcGkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS5oCmluZGV4IDg4YWY2ZGQuLmI1NjE1NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LWFwaS5oCkBAIC03NCw2ICs3NCw3IEBACiAjaW5jbHVkZSAiZnctYXBpLWQzLmgiCiAjaW5jbHVkZSAiZnctYXBpLWNvZXguaCIKICNpbmNsdWRlICJmdy1hcGktc2Nhbi5oIgorI2luY2x1ZGUgImZ3LWFwaS1zdGF0cy5oIgogCiAvKiBUeCBxdWV1ZSBudW1iZXJzICovCiBlbnVtIHsKQEAgLTEyOCw2ICsxMjksOSBAQAogCS8qIGdsb2JhbCBrZXkgKi8KIAlXRVBfS0VZID0gMHgyMCwKIAorCS8qIE1lbW9yeSAqLworCVNIQVJFRF9NRU1fQ0ZHID0gMHgyNSwKKwogCS8qIFRETFMgKi8KIAlURExTX0NIQU5ORUxfU1dJVENIX0NNRCA9IDB4MjcsCiAJVERMU19DSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT04gPSAweGFhLApAQCAtMTM4MSwyMTQgKzEzODUsNiBAQAogCV9fbGUzMiBtZXRhZGF0YVswXTsKIH0gX19wYWNrZWQ7IC8qIE1BUktFUl9BUElfU19WRVJfMSAqLwogCi1zdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfZGJnIHsKLQlfX2xlMzIgYnVyc3RfY2hlY2s7Ci0JX19sZTMyIGJ1cnN0X2NvdW50OwotCV9fbGUzMiB3YWl0X2Zvcl9zaWxlbmNlX3RpbWVvdXRfY250OwotCV9fbGUzMiByZXNlcnZlZFszXTsKLX0gX19wYWNrZWQ7IC8qIFNUQVRJU1RJQ1NfREVCVUdfQVBJX1NfVkVSXzIgKi8KLQotc3RydWN0IG12bV9zdGF0aXN0aWNzX2RpdiB7Ci0JX19sZTMyIHR4X29uX2E7Ci0JX19sZTMyIHR4X29uX2I7Ci0JX19sZTMyIGV4ZWNfdGltZTsKLQlfX2xlMzIgcHJvYmVfdGltZTsKLQlfX2xlMzIgcnNzaV9hbnQ7Ci0JX19sZTMyIHJlc2VydmVkMjsKLX0gX19wYWNrZWQ7IC8qIFNUQVRJU1RJQ1NfU0xPV19ESVZfQVBJX1NfVkVSXzIgKi8KLQotc3RydWN0IG12bV9zdGF0aXN0aWNzX2dlbmVyYWxfY29tbW9uIHsKLQlfX2xlMzIgdGVtcGVyYXR1cmU7ICAgLyogcmFkaW8gdGVtcGVyYXR1cmUgKi8KLQlfX2xlMzIgdGVtcGVyYXR1cmVfbTsgLyogcmFkaW8gdm9sdGFnZSAqLwotCXN0cnVjdCBtdm1fc3RhdGlzdGljc19kYmcgZGJnOwotCV9fbGUzMiBzbGVlcF90aW1lOwotCV9fbGUzMiBzbG90c19vdXQ7Ci0JX19sZTMyIHNsb3RzX2lkbGU7Ci0JX19sZTMyIHR0bF90aW1lc3RhbXA7Ci0Jc3RydWN0IG12bV9zdGF0aXN0aWNzX2RpdiBkaXY7Ci0JX19sZTMyIHJ4X2VuYWJsZV9jb3VudGVyOwotCS8qCi0JICogbnVtX29mX3Nvc19zdGF0ZXM6Ci0JICogIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgd2UgaGF2ZSB0byByZS10dW5lCi0JICogIGluIG9yZGVyIHRvIGdldCBvdXQgb2YgYmFkIFBIWSBzdGF0dXMKLQkgKi8KLQlfX2xlMzIgbnVtX29mX3Nvc19zdGF0ZXM7Ci19IF9fcGFja2VkOyAvKiBTVEFUSVNUSUNTX0dFTkVSQUxfQVBJX1NfVkVSXzUgKi8KLQotc3RydWN0IG12bV9zdGF0aXN0aWNzX3J4X25vbl9waHkgewotCV9fbGUzMiBib2d1c19jdHM7CS8qIENUUyByZWNlaXZlZCB3aGVuIG5vdCBleHBlY3RpbmcgQ1RTICovCi0JX19sZTMyIGJvZ3VzX2FjazsJLyogQUNLIHJlY2VpdmVkIHdoZW4gbm90IGV4cGVjdGluZyBBQ0sgKi8KLQlfX2xlMzIgbm9uX2Jzc2lkX2ZyYW1lczsJLyogbnVtYmVyIG9mIGZyYW1lcyB3aXRoIEJTU0lEIHRoYXQKLQkJCQkJICogZG9lc24ndCBiZWxvbmcgdG8gdGhlIFNUQSBCU1NJRCAqLwotCV9fbGUzMiBmaWx0ZXJlZF9mcmFtZXM7CS8qIGNvdW50IGZyYW1lcyB0aGF0IHdlcmUgZHVtcGVkIGluIHRoZQotCQkJCSAqIGZpbHRlcmluZyBwcm9jZXNzICovCi0JX19sZTMyIG5vbl9jaGFubmVsX2JlYWNvbnM7CS8qIGJlYWNvbnMgd2l0aCBvdXIgYnNzIGlkIGJ1dCBub3Qgb24KLQkJCQkJICogb3VyIHNlcnZpbmcgY2hhbm5lbCAqLwotCV9fbGUzMiBjaGFubmVsX2JlYWNvbnM7CS8qIGJlYWNvbnMgd2l0aCBvdXIgYnNzIGlkIGFuZCBpbiBvdXIKLQkJCQkgKiBzZXJ2aW5nIGNoYW5uZWwgKi8KLQlfX2xlMzIgbnVtX21pc3NlZF9iY29uOwkvKiBudW1iZXIgb2YgbWlzc2VkIGJlYWNvbnMgKi8KLQlfX2xlMzIgYWRjX3J4X3NhdHVyYXRpb25fdGltZTsJLyogY291bnQgaW4gMC44dXMgdW5pdHMgdGhlIHRpbWUgdGhlCi0JCQkJCSAqIEFEQyB3YXMgaW4gc2F0dXJhdGlvbiAqLwotCV9fbGUzMiBpbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lOy8qIHRvdGFsIHRpbWUgKGluIDAuOHVzKSBzZWFyY2hlZAotCQkJCQkgICogZm9yIElOQSAqLwotCV9fbGUzMiBiZWFjb25fc2lsZW5jZV9yc3NpX2E7CS8qIFJTU0kgc2lsZW5jZSBhZnRlciBiZWFjb24gZnJhbWUgKi8KLQlfX2xlMzIgYmVhY29uX3NpbGVuY2VfcnNzaV9iOwkvKiBSU1NJIHNpbGVuY2UgYWZ0ZXIgYmVhY29uIGZyYW1lICovCi0JX19sZTMyIGJlYWNvbl9zaWxlbmNlX3Jzc2lfYzsJLyogUlNTSSBzaWxlbmNlIGFmdGVyIGJlYWNvbiBmcmFtZSAqLwotCV9fbGUzMiBpbnRlcmZlcmVuY2VfZGF0YV9mbGFnOwkvKiBmbGFnIGZvciBpbnRlcmZlcmVuY2UgZGF0YQotCQkJCQkgKiBhdmFpbGFiaWxpdHkuIDEgd2hlbiBkYXRhIGlzCi0JCQkJCSAqIGF2YWlsYWJsZS4gKi8KLQlfX2xlMzIgY2hhbm5lbF9sb2FkOwkJLyogY291bnRzIFJYIEVuYWJsZSB0aW1lIGluIHVTZWMgKi8KLQlfX2xlMzIgZHNwX2ZhbHNlX2FsYXJtczsJLyogRFNQIGZhbHNlIGFsYXJtIChib3RoIE9GRE0KLQkJCQkJICogYW5kIENDSykgY291bnRlciAqLwotCV9fbGUzMiBiZWFjb25fcnNzaV9hOwotCV9fbGUzMiBiZWFjb25fcnNzaV9iOwotCV9fbGUzMiBiZWFjb25fcnNzaV9jOwotCV9fbGUzMiBiZWFjb25fZW5lcmd5X2E7Ci0JX19sZTMyIGJlYWNvbl9lbmVyZ3lfYjsKLQlfX2xlMzIgYmVhY29uX2VuZXJneV9jOwotCV9fbGUzMiBudW1fYnRfa2lsbHM7Ci0JX19sZTMyIG1hY19pZDsKLQlfX2xlMzIgZGlyZWN0ZWRfZGF0YV9tcGR1OwotfSBfX3BhY2tlZDsgLyogU1RBVElTVElDU19SWF9OT05fUEhZX0FQSV9TX1ZFUl8zICovCi0KLXN0cnVjdCBtdm1fc3RhdGlzdGljc19yeF9waHkgewotCV9fbGUzMiBpbmFfY250OwotCV9fbGUzMiBmaW5hX2NudDsKLQlfX2xlMzIgcGxjcF9lcnI7Ci0JX19sZTMyIGNyYzMyX2VycjsKLQlfX2xlMzIgb3ZlcnJ1bl9lcnI7Ci0JX19sZTMyIGVhcmx5X292ZXJydW5fZXJyOwotCV9fbGUzMiBjcmMzMl9nb29kOwotCV9fbGUzMiBmYWxzZV9hbGFybV9jbnQ7Ci0JX19sZTMyIGZpbmFfc3luY19lcnJfY250OwotCV9fbGUzMiBzZmRfdGltZW91dDsKLQlfX2xlMzIgZmluYV90aW1lb3V0OwotCV9fbGUzMiB1bnJlc3BvbmRlZF9ydHM7Ci0JX19sZTMyIHJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuOwotCV9fbGUzMiBzZW50X2Fja19jbnQ7Ci0JX19sZTMyIHNlbnRfY3RzX2NudDsKLQlfX2xlMzIgc2VudF9iYV9yc3BfY250OwotCV9fbGUzMiBkc3Bfc2VsZl9raWxsOwotCV9fbGUzMiBtaF9mb3JtYXRfZXJyOwotCV9fbGUzMiByZV9hY3FfbWFpbl9yc3NpX3N1bTsKLQlfX2xlMzIgcmVzZXJ2ZWQ7Ci19IF9fcGFja2VkOyAvKiBTVEFUSVNUSUNTX1JYX1BIWV9BUElfU19WRVJfMiAqLwotCi1zdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfcnhfaHRfcGh5IHsKLQlfX2xlMzIgcGxjcF9lcnI7Ci0JX19sZTMyIG92ZXJydW5fZXJyOwotCV9fbGUzMiBlYXJseV9vdmVycnVuX2VycjsKLQlfX2xlMzIgY3JjMzJfZ29vZDsKLQlfX2xlMzIgY3JjMzJfZXJyOwotCV9fbGUzMiBtaF9mb3JtYXRfZXJyOwotCV9fbGUzMiBhZ2dfY3JjMzJfZ29vZDsKLQlfX2xlMzIgYWdnX21wZHVfY250OwotCV9fbGUzMiBhZ2dfY250OwotCV9fbGUzMiB1bnN1cHBvcnRfbWNzOwotfSBfX3BhY2tlZDsgIC8qIFNUQVRJU1RJQ1NfSFRfUlhfUEhZX0FQSV9TX1ZFUl8xICovCi0KLSNkZWZpbmUgTUFYX0NIQUlOUyAzCi0KLXN0cnVjdCBtdm1fc3RhdGlzdGljc190eF9ub25fcGh5X2FnZyB7Ci0JX19sZTMyIGJhX3RpbWVvdXQ7Ci0JX19sZTMyIGJhX3Jlc2NoZWR1bGVfZnJhbWVzOwotCV9fbGUzMiBzY2RfcXVlcnlfYWdnX2ZyYW1lX2NudDsKLQlfX2xlMzIgc2NkX3F1ZXJ5X25vX2FnZzsKLQlfX2xlMzIgc2NkX3F1ZXJ5X2FnZzsKLQlfX2xlMzIgc2NkX3F1ZXJ5X21pc21hdGNoOwotCV9fbGUzMiBmcmFtZV9ub3RfcmVhZHk7Ci0JX19sZTMyIHVuZGVycnVuOwotCV9fbGUzMiBidF9wcmlvX2tpbGw7Ci0JX19sZTMyIHJ4X2JhX3JzcF9jbnQ7Ci0JX19zOCB0eHBvd2VyW01BWF9DSEFJTlNdOwotCV9fczggcmVzZXJ2ZWQ7Ci0JX19sZTMyIHJlc2VydmVkMjsKLX0gX19wYWNrZWQ7IC8qIFNUQVRJU1RJQ1NfVFhfTk9OX1BIWV9BR0dfQVBJX1NfVkVSXzEgKi8KLQotc3RydWN0IG12bV9zdGF0aXN0aWNzX3R4X2NoYW5uZWxfd2lkdGggewotCV9fbGUzMiBleHRfY2NhX25hcnJvd19jaDIwWzFdOwotCV9fbGUzMiBleHRfY2NhX25hcnJvd19jaDQwWzJdOwotCV9fbGUzMiBleHRfY2NhX25hcnJvd19jaDgwWzNdOwotCV9fbGUzMiBleHRfY2NhX25hcnJvd19jaDE2MFs0XTsKLQlfX2xlMzIgbGFzdF90eF9jaF93aWR0aF9pbmR4OwotCV9fbGUzMiByeF9kZXRlY3RlZF9wZXJfY2hfd2lkdGhbNF07Ci0JX19sZTMyIHN1Y2Nlc3NfcGVyX2NoX3dpZHRoWzRdOwotCV9fbGUzMiBmYWlsX3Blcl9jaF93aWR0aFs0XTsKLX07IC8qIFNUQVRJU1RJQ1NfVFhfQ0hBTk5FTF9XSURUSF9BUElfU19WRVJfMSAqLwotCi1zdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfdHggewotCV9fbGUzMiBwcmVhbWJsZV9jbnQ7Ci0JX19sZTMyIHJ4X2RldGVjdGVkX2NudDsKLQlfX2xlMzIgYnRfcHJpb19kZWZlcl9jbnQ7Ci0JX19sZTMyIGJ0X3ByaW9fa2lsbF9jbnQ7Ci0JX19sZTMyIGZld19ieXRlc19jbnQ7Ci0JX19sZTMyIGN0c190aW1lb3V0OwotCV9fbGUzMiBhY2tfdGltZW91dDsKLQlfX2xlMzIgZXhwZWN0ZWRfYWNrX2NudDsKLQlfX2xlMzIgYWN0dWFsX2Fja19jbnQ7Ci0JX19sZTMyIGR1bXBfbXNkdV9jbnQ7Ci0JX19sZTMyIGJ1cnN0X2Fib3J0X25leHRfZnJhbWVfbWlzbWF0Y2hfY250OwotCV9fbGUzMiBidXJzdF9hYm9ydF9taXNzaW5nX25leHRfZnJhbWVfY250OwotCV9fbGUzMiBjdHNfdGltZW91dF9jb2xsaXNpb247Ci0JX19sZTMyIGFja19vcl9iYV90aW1lb3V0X2NvbGxpc2lvbjsKLQlzdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfdHhfbm9uX3BoeV9hZ2cgYWdnOwotCXN0cnVjdCBtdm1fc3RhdGlzdGljc190eF9jaGFubmVsX3dpZHRoIGNoYW5uZWxfd2lkdGg7Ci19IF9fcGFja2VkOyAvKiBTVEFUSVNUSUNTX1RYX0FQSV9TX1ZFUl80ICovCi0KLQotc3RydWN0IG12bV9zdGF0aXN0aWNzX2J0X2FjdGl2aXR5IHsKLQlfX2xlMzIgaGlfcHJpb3JpdHlfdHhfcmVxX2NudDsKLQlfX2xlMzIgaGlfcHJpb3JpdHlfdHhfZGVuaWVkX2NudDsKLQlfX2xlMzIgbG9fcHJpb3JpdHlfdHhfcmVxX2NudDsKLQlfX2xlMzIgbG9fcHJpb3JpdHlfdHhfZGVuaWVkX2NudDsKLQlfX2xlMzIgaGlfcHJpb3JpdHlfcnhfcmVxX2NudDsKLQlfX2xlMzIgaGlfcHJpb3JpdHlfcnhfZGVuaWVkX2NudDsKLQlfX2xlMzIgbG9fcHJpb3JpdHlfcnhfcmVxX2NudDsKLQlfX2xlMzIgbG9fcHJpb3JpdHlfcnhfZGVuaWVkX2NudDsKLX0gX19wYWNrZWQ7ICAvKiBTVEFUSVNUSUNTX0JUX0FDVElWSVRZX0FQSV9TX1ZFUl8xICovCi0KLXN0cnVjdCBtdm1fc3RhdGlzdGljc19nZW5lcmFsIHsKLQlzdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfZ2VuZXJhbF9jb21tb24gY29tbW9uOwotCV9fbGUzMiBiZWFjb25fZmlsdGVyZWQ7Ci0JX19sZTMyIG1pc3NlZF9iZWFjb25zOwotCV9fczggYmVhY29uX2ZpbHRlcl9hdmVyYWdlX2VuZXJneTsKLQlfX3M4IGJlYWNvbl9maWx0ZXJfcmVhc29uOwotCV9fczggYmVhY29uX2ZpbHRlcl9jdXJyZW50X2VuZXJneTsKLQlfX3M4IGJlYWNvbl9maWx0ZXJfcmVzZXJ2ZWQ7Ci0JX19sZTMyIGJlYWNvbl9maWx0ZXJfZGVsdGFfdGltZTsKLQlzdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfYnRfYWN0aXZpdHkgYnRfYWN0aXZpdHk7Ci19IF9fcGFja2VkOyAvKiBTVEFUSVNUSUNTX0dFTkVSQUxfQVBJX1NfVkVSXzUgKi8KLQotc3RydWN0IG12bV9zdGF0aXN0aWNzX3J4IHsKLQlzdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfcnhfcGh5IG9mZG07Ci0Jc3RydWN0IG12bV9zdGF0aXN0aWNzX3J4X3BoeSBjY2s7Ci0Jc3RydWN0IG12bV9zdGF0aXN0aWNzX3J4X25vbl9waHkgZ2VuZXJhbDsKLQlzdHJ1Y3QgbXZtX3N0YXRpc3RpY3NfcnhfaHRfcGh5IG9mZG1faHQ7Ci19IF9fcGFja2VkOyAvKiBTVEFUSVNUSUNTX1JYX0FQSV9TX1ZFUl8zICovCi0KLS8qCi0gKiBTVEFUSVNUSUNTX05PVElGSUNBVElPTiA9IDB4OWQgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQotICoKLSAqIEJ5IGRlZmF1bHQsIHVDb2RlIGlzc3VlcyB0aGlzIG5vdGlmaWNhdGlvbiBhZnRlciByZWNlaXZpbmcgYSBiZWFjb24KLSAqIHdoaWxlIGFzc29jaWF0ZWQuICBUbyBkaXNhYmxlIHRoaXMgYmVoYXZpb3IsIHNldCBESVNBQkxFX05PVElGIGZsYWcgaW4gdGhlCi0gKiBSRVBMWV9TVEFUSVNUSUNTX0NNRCAweDljLCBhYm92ZS4KLSAqCi0gKiBTdGF0aXN0aWNzIGNvdW50ZXJzIGNvbnRpbnVlIHRvIGluY3JlbWVudCBiZWFjb24gYWZ0ZXIgYmVhY29uLCBidXQgYXJlCi0gKiBjbGVhcmVkIHdoZW4gY2hhbmdpbmcgY2hhbm5lbHMgb3Igd2hlbiBkcml2ZXIgaXNzdWVzIFJFUExZX1NUQVRJU1RJQ1NfQ01ECi0gKiAweDljIHdpdGggQ0xFQVJfU1RBVFMgYml0IHNldCAoc2VlIGFib3ZlKS4KLSAqCi0gKiB1Q29kZSBhbHNvIGlzc3VlcyB0aGlzIG5vdGlmaWNhdGlvbiBkdXJpbmcgc2NhbnMuICB1Q29kZSBjbGVhcnMgc3RhdGlzdGljcwotICogYXBwcm9wcmlhdGVseSBzbyB0aGF0IGVhY2ggbm90aWZpY2F0aW9uIGNvbnRhaW5zIHN0YXRpc3RpY3MgZm9yIG9ubHkgdGhlCi0gKiBvbmUgY2hhbm5lbCB0aGF0IGhhcyBqdXN0IGJlZW4gc2Nhbm5lZC4KLSAqLwotCi1zdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MgeyAvKiBTVEFUSVNUSUNTX05URllfQVBJX1NfVkVSXzggKi8KLQlfX2xlMzIgZmxhZzsKLQlzdHJ1Y3QgbXZtX3N0YXRpc3RpY3Nfcnggcng7Ci0Jc3RydWN0IG12bV9zdGF0aXN0aWNzX3R4IHR4OwotCXN0cnVjdCBtdm1fc3RhdGlzdGljc19nZW5lcmFsIGdlbmVyYWw7Ci19IF9fcGFja2VkOwotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFNtYXJ0IEZpZm8gQVBJCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xNjgwLDYzICsxNDc2LDYgQEAKIAlfX2xlMzIgdm9sdGFnZTsKIH0gX19wYWNrZWQ7IC8qIFRFTVBFUkFUVVJFX01FQVNVUkVNRU5UX1RSSUdHRVJfTlRGWV9TICovCiAKLS8qKgotICogZW51bSBpd2xfc2NkX2NvbnRyb2wgLSBzY2hlZHVsZXIgY29uZmlnIGNvbW1hbmQgY29udHJvbCBmbGFncwotICogQElXTF9TQ0RfQ09OVFJPTF9STV9USUQ6IHJlbW92ZSBUSUQgZnJvbSB0aGlzIHF1ZXVlCi0gKiBASVdMX1NDRF9DT05UUk9MX1NFVF9TU046IHVzZSB0aGUgU1NOIGFuZCBwcm9ncmFtIGl0IGludG8gSFcKLSAqLwotZW51bSBpd2xfc2NkX2NvbnRyb2wgewotCUlXTF9TQ0RfQ09OVFJPTF9STV9USUQJPSBCSVQoNCksCi0JSVdMX1NDRF9DT05UUk9MX1NFVF9TU04JPSBCSVQoNSksCi19OwotCi0vKioKLSAqIGVudW0gaXdsX3NjZF9mbGFncyAtIHNjaGVkdWxlciBjb25maWcgY29tbWFuZCBmbGFncwotICogQElXTF9TQ0RfRkxBR1NfU0hBUkVfVElEOiBtdWx0aXBsZSBUSURzIG1hcCB0byB0aGlzIHF1ZXVlCi0gKiBASVdMX1NDRF9GTEFHU19TSEFSRV9SQTogbXVsdGlwbGUgUkFzIG1hcCB0byB0aGlzIHF1ZXVlCi0gKiBASVdMX1NDRF9GTEFHU19EUUFfRU5BQkxFRDogRFFBIGlzIGVuYWJsZWQKLSAqLwotZW51bSBpd2xfc2NkX2ZsYWdzIHsKLQlJV0xfU0NEX0ZMQUdTX1NIQVJFX1RJRAkJPSBCSVQoMCksCi0JSVdMX1NDRF9GTEFHU19TSEFSRV9SQQkJPSBCSVQoMSksCi0JSVdMX1NDRF9GTEFHU19EUUFfRU5BQkxFRAk9IEJJVCgyKSwKLX07Ci0KLSNkZWZpbmUgSVdMX1NDRFFfSU5WQUxJRF9TVEEJMHhmZgotCi0vKioKLSAqIHN0cnVjdCBpd2xfc2NkX3R4cV9jZmdfY21kIC0gTmV3IHR4cSBodyBzY2hlZHVsZXIgY29uZmlnIGNvbW1hbmQKLSAqIEB0b2tlbjoJZGlhbG9nIHRva2VuIGFkZGJhIC0gdW51c2VkIGxlZ2FjeQotICogQHN0YV9pZDoJc3RhdGlvbiBpZCA0LWJpdAotICogQHRpZDoJVElEIDAuLjcKLSAqIEBzY2RfcXVldWU6CVRGRCBxdWV1ZSBudW0gMCAuLiAzMQotICogQGVuYWJsZToJMSBxdWV1ZSBlbmFibGUsIDAgcXVldWUgZGlzYWJsZQotICogQGFnZ3JlZ2F0ZToJMSBhZ2dyZWdhdGVkIHF1ZXVlLCAwIG90aGVyd2lzZQotICogQHR4X2ZpZm86CXR4IGZpZm8gbnVtIDAuLjcKLSAqIEB3aW5kb3c6CXVwIHRvIDY0Ci0gKiBAc3NuOglzdGFydGluZyBzZXEgbnVtIDEyLWJpdAotICogQGNvbnRyb2w6CWNvbW1hbmQgY29udHJvbCBmbGFncwotICogQGZsYWdzOglmbGFncyAtIHNlZSAmZW51bSBpd2xfc2NkX2ZsYWdzCi0gKgotICogTm90ZSB0aGF0IGV2ZXJ5IHRpbWUgdGhlIGNvbW1hbmQgaXMgc2VudCwgYWxsIHBhcmFtZXRlcnMgbXVzdAotICogYmUgZmlsbGVkIHdpdGggdGhlIGV4Y2VwdGlvbiBvZgotICogIC0gdGhlIFNTTiwgd2hpY2ggaXMgb25seSB1c2VkIHdpdGggQElXTF9TQ0RfQ09OVFJPTF9TRVRfU1NOCi0gKiAgLSB0aGUgd2luZG93LCB3aGljaCBpcyBvbmx5IHJlbGV2YW50IHdoZW4gc3RhcnRpbmcgYWdncmVnYXRpb24KLSAqLwotc3RydWN0IGl3bF9zY2RfdHhxX2NmZ19jbWQgewotCXU4IHRva2VuOwotCXU4IHN0YV9pZDsKLQl1OCB0aWQ7Ci0JdTggc2NkX3F1ZXVlOwotCXU4IGVuYWJsZTsKLQl1OCBhZ2dyZWdhdGU7Ci0JdTggdHhfZmlmbzsKLQl1OCB3aW5kb3c7Ci0JX19sZTE2IHNzbjsKLQl1OCBjb250cm9sOwotCXU4IGZsYWdzOwotfSBfX3BhY2tlZDsKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBURExTIEFQSQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMTg3OCw0ICsxNjE3LDM2IEBACiAJc3RydWN0IGl3bF90ZGxzX2NvbmZpZ19zdGFfaW5mb19yZXMgc3RhX2luZm9bSVdMX01WTV9URExTX1NUQV9DT1VOVF07CiB9IF9fcGFja2VkOyAvKiBURExTX0NPTkZJR19SU1BfQVBJX1NfVkVSXzEgKi8KIAorI2RlZmluZSBUWF9GSUZPX01BWF9OVU0JCTgKKyNkZWZpbmUgUlhfRklGT19NQVhfTlVNCQkyCisKKy8qKgorICogU2hhcmVkIG1lbW9yeSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZyb20gdGhlIEZXCisgKgorICogQHNoYXJlZF9tZW1fYWRkcjogc2hhcmVkIG1lbW9yeSBhZGRyIChwcmUgODAwMCBIVyBzZXQgdG8gMHgwIGFzIE1BUkJIIGlzIG5vdAorICoJYWNjZXNzaWJsZSkKKyAqIEBzaGFyZWRfbWVtX3NpemU6IHNoYXJlZCBtZW1vcnkgc2l6ZQorICogQHNhbXBsZV9idWZmX2FkZHI6IGludGVybmFsIHNhbXBsZSAobW9uL2FkYykgYnVmZiBhZGRyIChwcmUgODAwMCBIVyBzZXQgdG8KKyAqCTB4MCBhcyBhY2Nlc3NpYmxlIG9ubHkgdmlhIERCR00gUkRBVCkKKyAqIEBzYW1wbGVfYnVmZl9zaXplOiBpbnRlcm5hbCBzYW1wbGUgYnVmZiBzaXplCisgKiBAdHhmaWZvX2FkZHI6IHN0YXJ0IGFkZHIgb2YgVFhGMCAoZXhjbHVkaW5nIHRoZSBjb250ZXh0IHRhYmxlIDAuNUtCKSwgKHByZQorICoJODAwMCBIVyBzZXQgdG8gMHgwIGFzIG5vdCBhY2Nlc3NpYmxlKQorICogQHR4Zmlmb19zaXplOiBzaXplIG9mIFRYRjAgLi4uIFRYRjcKKyAqIEByeGZpZm9fc2l6ZTogUlhGMSwgUlhGMiBzaXplcy4gSWYgdGhlcmUgaXMgbm8gUlhGMiwgaXQnbGwgaGF2ZSBhIHZhbHVlIG9mIDAKKyAqIEBwYWdlX2J1ZmZfYWRkcjogdXNlZCBieSBVTUFDIGFuZCBwZXJmb3JtYW5jZSBkZWJ1ZyAocGFnZSBtaXNzIGFuYWx5c2lzKSwKKyAqCXdoZW4gcGFnaW5nIGlzIG5vdCBzdXBwb3J0ZWQgdGhpcyBzaG91bGQgYmUgMAorICogQHBhZ2VfYnVmZl9zaXplOiBzaXplIG9mICVwYWdlX2J1ZmZfYWRkcgorICovCitzdHJ1Y3QgaXdsX3NoYXJlZF9tZW1fY2ZnIHsKKwlfX2xlMzIgc2hhcmVkX21lbV9hZGRyOworCV9fbGUzMiBzaGFyZWRfbWVtX3NpemU7CisJX19sZTMyIHNhbXBsZV9idWZmX2FkZHI7CisJX19sZTMyIHNhbXBsZV9idWZmX3NpemU7CisJX19sZTMyIHR4Zmlmb19hZGRyOworCV9fbGUzMiB0eGZpZm9fc2l6ZVtUWF9GSUZPX01BWF9OVU1dOworCV9fbGUzMiByeGZpZm9fc2l6ZVtSWF9GSUZPX01BWF9OVU1dOworCV9fbGUzMiBwYWdlX2J1ZmZfYWRkcjsKKwlfX2xlMzIgcGFnZV9idWZmX3NpemU7Cit9IF9fcGFja2VkOyAvKiBTSEFSRURfTUVNX0FMTE9DX0FQSV9TX1ZFUl8xICovCisKICNlbmRpZiAvKiBfX2Z3X2FwaV9oX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9mdy5jCmluZGV4IGQwZmE2ZTkuLmNhMzhlOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL2Z3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vZncuYwpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUgIml3bC1kZWJ1Zy5oIgogI2luY2x1ZGUgIml3bC1jc3IuaCIgLyogZm9yIGl3bF9tdm1fcnhfY2FyZF9zdGF0ZV9ub3RpZiAqLwogI2luY2x1ZGUgIml3bC1pby5oIiAvKiBmb3IgaXdsX212bV9yeF9jYXJkX3N0YXRlX25vdGlmICovCisjaW5jbHVkZSAiaXdsLXBycGguaCIKICNpbmNsdWRlICJpd2wtZWVwcm9tLXBhcnNlLmgiCiAKICNpbmNsdWRlICJtdm0uaCIKQEAgLTI2OSw3ICsyNzAsNyBAQAogCWVudW0gaXdsX3Vjb2RlX3R5cGUgdWNvZGVfdHlwZSA9IG12bS0+Y3VyX3Vjb2RlOwogCiAJLyogU2V0IHBhcmFtZXRlcnMgKi8KLQlwaHlfY2ZnX2NtZC5waHlfY2ZnID0gY3B1X3RvX2xlMzIobXZtLT5mdy0+cGh5X2NvbmZpZyk7CisJcGh5X2NmZ19jbWQucGh5X2NmZyA9IGNwdV90b19sZTMyKGl3bF9tdm1fZ2V0X3BoeV9jb25maWcobXZtKSk7CiAJcGh5X2NmZ19jbWQuY2FsaWJfY29udHJvbC5ldmVudF90cmlnZ2VyID0KIAkJbXZtLT5mdy0+ZGVmYXVsdF9jYWxpYlt1Y29kZV90eXBlXS5ldmVudF90cmlnZ2VyOwogCXBoeV9jZmdfY21kLmNhbGliX2NvbnRyb2wuZmxvd190cmlnZ2VyID0KQEAgLTM0Niw3ICszNDcsNyBAQAogCW12bS0+Y2FsaWJyYXRpbmcgPSB0cnVlOwogCiAJLyogU2VuZCBUWCB2YWxpZCBhbnRlbm5hcyBiZWZvcmUgdHJpZ2dlcmluZyBjYWxpYnJhdGlvbnMgKi8KLQlyZXQgPSBpd2xfc2VuZF90eF9hbnRfY2ZnKG12bSwgbXZtLT5mdy0+dmFsaWRfdHhfYW50KTsKKwlyZXQgPSBpd2xfc2VuZF90eF9hbnRfY2ZnKG12bSwgaXdsX212bV9nZXRfdmFsaWRfdHhfYW50KG12bSkpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3I7CiAKQEAgLTM5OSw4ICs0MDAsNzEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGl3bF9tdm1fc3RhcnRfZndfZGJnX2NvbmYoc3RydWN0IGl3bF9tdm0gKm12bSwKLQkJCQkgICAgIGVudW0gaXdsX2Z3X2RiZ19jb25mIGNvbmZfaWQpCitzdGF0aWMgdm9pZCBpd2xfbXZtX2dldF9zaGFyZWRfbWVtX2NvbmYoc3RydWN0IGl3bF9tdm0gKm12bSkKK3sKKwlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKKwkJLmlkID0gU0hBUkVEX01FTV9DRkcsCisJCS5mbGFncyA9IENNRF9XQU5UX1NLQiwKKwkJLmRhdGEgPSB7IE5VTEwsIH0sCisJCS5sZW4gPSB7IDAsIH0sCisJfTsKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0OworCXN0cnVjdCBpd2xfc2hhcmVkX21lbV9jZmcgKm1lbV9jZmc7CisJdTMyIGk7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtdm0tPm11dGV4KTsKKworCWlmIChXQVJOX09OKGl3bF9tdm1fc2VuZF9jbWQobXZtLCAmY21kKSkpCisJCXJldHVybjsKKworCXBrdCA9IGNtZC5yZXNwX3BrdDsKKwlpZiAocGt0LT5oZHIuZmxhZ3MgJiBJV0xfQ01EX0ZBSUxFRF9NU0spIHsKKwkJSVdMX0VSUihtdm0sICJCYWQgcmV0dXJuIGZyb20gU0hBUkVEX01FTV9DRkcgKDB4JTA4WClcbiIsCisJCQlwa3QtPmhkci5mbGFncyk7CisJCWdvdG8gZXhpdDsKKwl9CisKKwltZW1fY2ZnID0gKHZvaWQgKilwa3QtPmRhdGE7CisKKwltdm0tPnNoYXJlZF9tZW1fY2ZnLnNoYXJlZF9tZW1fYWRkciA9CisJCWxlMzJfdG9fY3B1KG1lbV9jZmctPnNoYXJlZF9tZW1fYWRkcik7CisJbXZtLT5zaGFyZWRfbWVtX2NmZy5zaGFyZWRfbWVtX3NpemUgPQorCQlsZTMyX3RvX2NwdShtZW1fY2ZnLT5zaGFyZWRfbWVtX3NpemUpOworCW12bS0+c2hhcmVkX21lbV9jZmcuc2FtcGxlX2J1ZmZfYWRkciA9CisJCWxlMzJfdG9fY3B1KG1lbV9jZmctPnNhbXBsZV9idWZmX2FkZHIpOworCW12bS0+c2hhcmVkX21lbV9jZmcuc2FtcGxlX2J1ZmZfc2l6ZSA9CisJCWxlMzJfdG9fY3B1KG1lbV9jZmctPnNhbXBsZV9idWZmX3NpemUpOworCW12bS0+c2hhcmVkX21lbV9jZmcudHhmaWZvX2FkZHIgPSBsZTMyX3RvX2NwdShtZW1fY2ZnLT50eGZpZm9fYWRkcik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXZtLT5zaGFyZWRfbWVtX2NmZy50eGZpZm9fc2l6ZSk7IGkrKykKKwkJbXZtLT5zaGFyZWRfbWVtX2NmZy50eGZpZm9fc2l6ZVtpXSA9CisJCQlsZTMyX3RvX2NwdShtZW1fY2ZnLT50eGZpZm9fc2l6ZVtpXSk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXZtLT5zaGFyZWRfbWVtX2NmZy5yeGZpZm9fc2l6ZSk7IGkrKykKKwkJbXZtLT5zaGFyZWRfbWVtX2NmZy5yeGZpZm9fc2l6ZVtpXSA9CisJCQlsZTMyX3RvX2NwdShtZW1fY2ZnLT5yeGZpZm9fc2l6ZVtpXSk7CisJbXZtLT5zaGFyZWRfbWVtX2NmZy5wYWdlX2J1ZmZfYWRkciA9CisJCWxlMzJfdG9fY3B1KG1lbV9jZmctPnBhZ2VfYnVmZl9hZGRyKTsKKwltdm0tPnNoYXJlZF9tZW1fY2ZnLnBhZ2VfYnVmZl9zaXplID0KKwkJbGUzMl90b19jcHUobWVtX2NmZy0+cGFnZV9idWZmX3NpemUpOworCUlXTF9ERUJVR19JTkZPKG12bSwgIlNIQVJFRCBNRU0gQ0ZHOiBnb3QgbWVtb3J5IG9mZnNldHMvc2l6ZXNcbiIpOworCitleGl0OgorCWl3bF9mcmVlX3Jlc3AoJmNtZCk7Cit9CisKK3ZvaWQgaXdsX212bV9md19kYmdfY29sbGVjdChzdHJ1Y3QgaXdsX212bSAqbXZtKQoreworCS8qIHN0b3AgcmVjb3JkaW5nICovCisJaWYgKG12bS0+Y2ZnLT5kZXZpY2VfZmFtaWx5ID09IElXTF9ERVZJQ0VfRkFNSUxZXzcwMDApIHsKKwkJaXdsX3NldF9iaXRzX3BycGgobXZtLT50cmFucywgTU9OX0JVRkZfU0FNUExFX0NUTCwgMHgxMDApOworCX0gZWxzZSB7CisJCWl3bF93cml0ZV9wcnBoKG12bS0+dHJhbnMsIERCR0NfSU5fU0FNUExFLCAwKTsKKwkJaXdsX3dyaXRlX3BycGgobXZtLT50cmFucywgREJHQ19PVVRfQ1RSTCwgMCk7CisJfQorCisJc2NoZWR1bGVfd29yaygmbXZtLT5md19lcnJvcl9kdW1wX3drKTsKK30KKworaW50IGl3bF9tdm1fc3RhcnRfZndfZGJnX2NvbmYoc3RydWN0IGl3bF9tdm0gKm12bSwgZW51bSBpd2xfZndfZGJnX2NvbmYgY29uZl9pZCkKIHsKIAl1OCAqcHRyOwogCWludCByZXQ7CkBAIC00MzUsNiArNDk5LDM1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBpd2xfbXZtX2NvbmZpZ19sdHJfdjEoc3RydWN0IGl3bF9tdm0gKm12bSkKK3sKKwlzdHJ1Y3QgaXdsX2x0cl9jb25maWdfY21kX3YxIGNtZF92MSA9IHsKKwkJLmZsYWdzID0gY3B1X3RvX2xlMzIoTFRSX0NGR19GTEFHX0ZFQVRVUkVfRU5BQkxFKSwKKwl9OworCisJaWYgKCFtdm0tPnRyYW5zLT5sdHJfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gaXdsX212bV9zZW5kX2NtZF9wZHUobXZtLCBMVFJfQ09ORklHLCAwLAorCQkJCSAgICBzaXplb2YoY21kX3YxKSwgJmNtZF92MSk7Cit9CisKK3N0YXRpYyBpbnQgaXdsX212bV9jb25maWdfbHRyKHN0cnVjdCBpd2xfbXZtICptdm0pCit7CisJc3RydWN0IGl3bF9sdHJfY29uZmlnX2NtZCBjbWQgPSB7CisJCS5mbGFncyA9IGNwdV90b19sZTMyKExUUl9DRkdfRkxBR19GRUFUVVJFX0VOQUJMRSksCisJfTsKKworCWlmICghbXZtLT50cmFucy0+bHRyX2VuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKCEobXZtLT5mdy0+dWNvZGVfY2FwYS5hcGlbMF0gJiBJV0xfVUNPREVfVExWX0FQSV9IRENfUEhBU0VfMCkpCisJCXJldHVybiBpd2xfbXZtX2NvbmZpZ19sdHJfdjEobXZtKTsKKworCXJldHVybiBpd2xfbXZtX3NlbmRfY21kX3BkdShtdm0sIExUUl9DT05GSUcsIDAsCisJCQkJICAgIHNpemVvZihjbWQpLCAmY21kKTsKK30KKwogaW50IGl3bF9tdm1fdXAoc3RydWN0IGl3bF9tdm0gKm12bSkKIHsKIAlpbnQgcmV0LCBpOwpAQCAtNDgyLDYgKzU3NSw5IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCisJaWYgKElXTF9VQ09ERV9BUEkobXZtLT5mdy0+dWNvZGVfdmVyKSA+PSAxMCkKKwkJaXdsX212bV9nZXRfc2hhcmVkX21lbV9jb25mKG12bSk7CisKIAlyZXQgPSBpd2xfbXZtX3NmX3VwZGF0ZShtdm0sIE5VTEwsIGZhbHNlKTsKIAlpZiAocmV0KQogCQlJV0xfRVJSKG12bSwgIkZhaWxlZCB0byBpbml0aWFsaXplIFNtYXJ0IEZpZm9cbiIpOwpAQCAtNDg5LDcgKzU4NSw3IEBACiAJbXZtLT5md19kYmdfY29uZiA9IEZXX0RCR19JTlZBTElEOwogCWl3bF9tdm1fc3RhcnRfZndfZGJnX2NvbmYobXZtLCBGV19EQkdfQ1VTVE9NKTsKIAotCXJldCA9IGl3bF9zZW5kX3R4X2FudF9jZmcobXZtLCBtdm0tPmZ3LT52YWxpZF90eF9hbnQpOworCXJldCA9IGl3bF9zZW5kX3R4X2FudF9jZmcobXZtLCBpd2xfbXZtX2dldF92YWxpZF90eF9hbnQobXZtKSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnJvcjsKIApAQCAtNTM4LDE0ICs2MzQsNyBAQAogCS8qIEluaXRpYWxpemUgdHggYmFja29mZnMgdG8gdGhlIG1pbmltYWwgcG9zc2libGUgKi8KIAlpd2xfbXZtX3R0X3R4X2JhY2tvZmYobXZtLCAwKTsKIAotCWlmIChtdm0tPnRyYW5zLT5sdHJfZW5hYmxlZCkgewotCQlzdHJ1Y3QgaXdsX2x0cl9jb25maWdfY21kIGNtZCA9IHsKLQkJCS5mbGFncyA9IGNwdV90b19sZTMyKExUUl9DRkdfRkxBR19GRUFUVVJFX0VOQUJMRSksCi0JCX07Ci0KLQkJV0FSTl9PTihpd2xfbXZtX3NlbmRfY21kX3BkdShtdm0sIExUUl9DT05GSUcsIDAsCi0JCQkJCSAgICAgc2l6ZW9mKGNtZCksICZjbWQpKTsKLQl9CisJV0FSTl9PTihpd2xfbXZtX2NvbmZpZ19sdHIobXZtKSk7CiAKIAlyZXQgPSBpd2xfbXZtX3Bvd2VyX3VwZGF0ZV9kZXZpY2UobXZtKTsKIAlpZiAocmV0KQpAQCAtNTg0LDcgKzY3Myw3IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JcmV0ID0gaXdsX3NlbmRfdHhfYW50X2NmZyhtdm0sIG12bS0+ZnctPnZhbGlkX3R4X2FudCk7CisJcmV0ID0gaXdsX3NlbmRfdHhfYW50X2NmZyhtdm0sIGl3bF9tdm1fZ2V0X3ZhbGlkX3R4X2FudChtdm0pKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9tYWMtY3R4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbWFjLWN0eHQuYwppbmRleCBmNmQ4NmNjLi43YmRjNjIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9tYWMtY3R4dC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL21hYy1jdHh0LmMKQEAgLTIwOCw4ICsyMDgsMTAgQEAKIAlpZiAodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1AyUF9ERVZJQ0UpCiAJCXJldHVybiBCSVQoSVdMX01WTV9PRkZDSEFOTkVMX1FVRVVFKTsKIAotCWZvciAoYWMgPSAwOyBhYyA8IElFRUU4MDIxMV9OVU1fQUNTOyBhYysrKQotCQlxbWFzayB8PSBCSVQodmlmLT5od19xdWV1ZVthY10pOworCWZvciAoYWMgPSAwOyBhYyA8IElFRUU4MDIxMV9OVU1fQUNTOyBhYysrKSB7CisJCWlmICh2aWYtPmh3X3F1ZXVlW2FjXSAhPSBJRUVFODAyMTFfSU5WQUxfSFdfUVVFVUUpCisJCQlxbWFzayB8PSBCSVQodmlmLT5od19xdWV1ZVthY10pOworCX0KIAogCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCiAJCXFtYXNrIHw9IEJJVCh2aWYtPmNhYl9xdWV1ZSk7CkBAIC00NjAsNiArNDYyLDkgQEAKIAogaW50IGl3bF9tdm1fbWFjX2N0eHRfaW5pdChzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogeworCXVuc2lnbmVkIGludCB3ZGdfdGltZW91dCA9IGl3bG12bV9tb2RfcGFyYW1zLnRmZF9xX2hhbmdfZGV0ZWN0ID8KKwkJCQkJbXZtLT5jZmctPmJhc2VfcGFyYW1zLT53ZF90aW1lb3V0IDoKKwkJCQkJSVdMX1dBVENIRE9HX0RJU0FCTEVEOwogCXUzMiBhYzsKIAlpbnQgcmV0OwogCkBAIC00NzIsMTYgKzQ3NywxNyBAQAogCXN3aXRjaCAodmlmLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfREVWSUNFOgogCQlpd2xfbXZtX2VuYWJsZV9hY190eHEobXZtLCBJV0xfTVZNX09GRkNIQU5ORUxfUVVFVUUsCi0JCQkJICAgICAgSVdMX01WTV9UWF9GSUZPX1ZPKTsKKwkJCQkgICAgICBJV0xfTVZNX1RYX0ZJRk9fVk8sIHdkZ190aW1lb3V0KTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJaXdsX212bV9lbmFibGVfYWNfdHhxKG12bSwgdmlmLT5jYWJfcXVldWUsCi0JCQkJICAgICAgSVdMX01WTV9UWF9GSUZPX01DQVNUKTsKKwkJCQkgICAgICBJV0xfTVZNX1RYX0ZJRk9fTUNBU1QsIHdkZ190aW1lb3V0KTsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKIAkJZm9yIChhYyA9IDA7IGFjIDwgSUVFRTgwMjExX05VTV9BQ1M7IGFjKyspCiAJCQlpd2xfbXZtX2VuYWJsZV9hY190eHEobXZtLCB2aWYtPmh3X3F1ZXVlW2FjXSwKLQkJCQkJICAgICAgaXdsX212bV9hY190b190eF9maWZvW2FjXSk7CisJCQkJCSAgICAgIGl3bF9tdm1fYWNfdG9fdHhfZmlmb1thY10sCisJCQkJCSAgICAgIHdkZ190aW1lb3V0KTsKIAkJYnJlYWs7CiAJfQogCkBAIC00OTYsMTQgKzUwMiwxNCBAQAogCiAJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9ERVZJQ0U6Ci0JCWl3bF9tdm1fZGlzYWJsZV90eHEobXZtLCBJV0xfTVZNX09GRkNIQU5ORUxfUVVFVUUpOworCQlpd2xfbXZtX2Rpc2FibGVfdHhxKG12bSwgSVdMX01WTV9PRkZDSEFOTkVMX1FVRVVFLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJaXdsX212bV9kaXNhYmxlX3R4cShtdm0sIHZpZi0+Y2FiX3F1ZXVlKTsKKwkJaXdsX212bV9kaXNhYmxlX3R4cShtdm0sIHZpZi0+Y2FiX3F1ZXVlLCAwKTsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJZGVmYXVsdDoKIAkJZm9yIChhYyA9IDA7IGFjIDwgSUVFRTgwMjExX05VTV9BQ1M7IGFjKyspCi0JCQlpd2xfbXZtX2Rpc2FibGVfdHhxKG12bSwgdmlmLT5od19xdWV1ZVthY10pOworCQkJaXdsX212bV9kaXNhYmxlX3R4cShtdm0sIHZpZi0+aHdfcXVldWVbYWNdLCAwKTsKIAl9CiB9CiAKQEAgLTk3NSw3ICs5ODEsNyBAQAogCWJlYWNvbl9jbWQudHgudHhfZmxhZ3MgPSBjcHVfdG9fbGUzMih0eF9mbGFncyk7CiAKIAltdm0tPm1nbXRfbGFzdF9hbnRlbm5hX2lkeCA9Ci0JCWl3bF9tdm1fbmV4dF9hbnRlbm5hKG12bSwgbXZtLT5mdy0+dmFsaWRfdHhfYW50LAorCQlpd2xfbXZtX25leHRfYW50ZW5uYShtdm0sIGl3bF9tdm1fZ2V0X3ZhbGlkX3R4X2FudChtdm0pLAogCQkJCSAgICAgbXZtLT5tZ210X2xhc3RfYW50ZW5uYV9pZHgpOwogCiAJYmVhY29uX2NtZC50eC5yYXRlX25fZmxhZ3MgPQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbWFjODAyMTEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL21hYzgwMjExLmMKaW5kZXggZTg4MGY5ZC4uMWZmN2VjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbWFjODAyMTEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9tYWM4MDIxMS5jCkBAIC04NSw2ICs4NSw3IEBACiAjaW5jbHVkZSAidGVzdG1vZGUuaCIKICNpbmNsdWRlICJpd2wtZnctZXJyb3ItZHVtcC5oIgogI2luY2x1ZGUgIml3bC1wcnBoLmgiCisjaW5jbHVkZSAiaXdsLWNzci5oIgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9saW1pdCBpd2xfbXZtX2xpbWl0c1tdID0gewogCXsKQEAgLTEwNSw3ICsxMDYsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiBpd2xfbXZtX2lmYWNlX2NvbWJpbmF0aW9uc1tdID0gewogCXsKLQkJLm51bV9kaWZmZXJlbnRfY2hhbm5lbHMgPSAxLAorCQkubnVtX2RpZmZlcmVudF9jaGFubmVscyA9IDIsCiAJCS5tYXhfaW50ZXJmYWNlcyA9IDMsCiAJCS5saW1pdHMgPSBpd2xfbXZtX2xpbWl0cywKIAkJLm5fbGltaXRzID0gQVJSQVlfU0laRShpd2xfbXZtX2xpbWl0cyksCkBAIC0zMjYsNiArMzI3LDggQEAKIAlody0+cmFkaW90YXBfdmh0X2RldGFpbHMgfD0gSUVFRTgwMjExX1JBRElPVEFQX1ZIVF9LTk9XTl9TVEJDIHwKIAkJSUVFRTgwMjExX1JBRElPVEFQX1ZIVF9LTk9XTl9CRUFNRk9STUVEOwogCWh3LT5yYXRlX2NvbnRyb2xfYWxnb3JpdGhtID0gIml3bC1tdm0tcnMiOworCWh3LT51YXBzZF9xdWV1ZXMgPSBJV0xfTVZNX1VBUFNEX1FVRVVFUzsKKwlody0+dWFwc2RfbWF4X3NwX2xlbiA9IElXTF9VQVBTRF9NQVhfU1A7CiAKIAkvKgogCSAqIEVuYWJsZSAxMXcgaWYgYWR2ZXJ0aXNlZCBieSBmaXJtd2FyZSBhbmQgc29mdHdhcmUgY3J5cHRvCkBAIC0zMzYsMTMgKzMzOSw2IEBACiAJICAgICFpd2x3aWZpX21vZF9wYXJhbXMuc3dfY3J5cHRvKQogCQlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFOwogCi0JaWYgKG12bS0+ZnctPnVjb2RlX2NhcGEuZmxhZ3MgJiBJV0xfVUNPREVfVExWX0ZMQUdTX1VBUFNEX1NVUFBPUlQgJiYKLQkgICAgIWl3bHdpZmlfbW9kX3BhcmFtcy51YXBzZF9kaXNhYmxlKSB7Ci0JCWh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfU1VQUE9SVFNfVUFQU0Q7Ci0JCWh3LT51YXBzZF9xdWV1ZXMgPSBJV0xfTVZNX1VBUFNEX1FVRVVFUzsKLQkJaHctPnVhcHNkX21heF9zcF9sZW4gPSBJV0xfVUFQU0RfTUFYX1NQOwotCX0KLQogCWlmIChtdm0tPmZ3LT51Y29kZV9jYXBhLmFwaVswXSAmIElXTF9VQ09ERV9UTFZfQVBJX0xNQUNfU0NBTiB8fAogCSAgICBtdm0tPmZ3LT51Y29kZV9jYXBhLmNhcGFbMF0gJiBJV0xfVUNPREVfVExWX0NBUEFfVU1BQ19TQ0FOKSB7CiAJCWh3LT5mbGFncyB8PSBJRUVFODAyMTFfU0lOR0xFX0hXX1NDQU5fT05fQUxMX0JBTkRTOwpAQCAtMzc3LDYgKzM3Myw4IEBACiAKIAlody0+d2lwaHktPm1heF9yZW1haW5fb25fY2hhbm5lbF9kdXJhdGlvbiA9IDEwMDAwOwogCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gSVdMX0NPTk5fTUFYX0xJU1RFTl9JTlRFUlZBTDsKKwkvKiB3ZSBjYW4gY29tcGVuc2F0ZSBhbiBvZmZzZXQgb2YgdXAgdG8gMyBjaGFubmVscyA9IDE1IE1IeiAqLworCWh3LT53aXBoeS0+bWF4X2Fkal9jaGFubmVsX3Jzc2lfY29tcCA9IDMgKiA1OwogCiAJLyogRXh0cmFjdCBNQUMgYWRkcmVzcyAqLwogCW1lbWNweShtdm0tPmFkZHJlc3Nlc1swXS5hZGRyLCBtdm0tPm52bV9kYXRhLT5od19hZGRyLCBFVEhfQUxFTik7CkBAIC00MDMsMTAgKzQwMSwxNSBAQAogCWlmIChtdm0tPm52bV9kYXRhLT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzKQogCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KIAkJCSZtdm0tPm52bV9kYXRhLT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKLQlpZiAobXZtLT5udm1fZGF0YS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscykKKwlpZiAobXZtLT5udm1fZGF0YS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscykgewogCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdID0KIAkJCSZtdm0tPm52bV9kYXRhLT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKIAorCQlpZiAobXZtLT5mdy0+dWNvZGVfY2FwYS5jYXBhWzBdICYgSVdMX1VDT0RFX1RMVl9DQVBBX0JFQU1GT1JNRVIpCisJCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLT52aHRfY2FwLmNhcCB8PQorCQkJCUlFRUU4MDIxMV9WSFRfQ0FQX1NVX0JFQU1GT1JNRVJfQ0FQQUJMRTsKKwl9CisKIAlody0+d2lwaHktPmh3X3ZlcnNpb24gPSBtdm0tPnRyYW5zLT5od19pZDsKIAogCWlmIChpd2xtdm1fbW9kX3BhcmFtcy5wb3dlcl9zY2hlbWUgIT0gSVdMX1BPV0VSX1NDSEVNRV9DQU0pCkBAIC00NTksMTUgKzQ2MiwxNyBAQAogCSAgICBkZXZpY2VfY2FuX3dha2V1cChtdm0tPnRyYW5zLT5kZXYpKSB7CiAJCW12bS0+d293bGFuLmZsYWdzID0gV0lQSFlfV09XTEFOX0FOWTsKIAkJaHctPndpcGh5LT53b3dsYW4gPSAmbXZtLT53b3dsYW47Ci0JfSBlbHNlIGlmIChtdm0tPmZ3LT5pbWdbSVdMX1VDT0RFX1dPV0xBTl0uc2VjWzBdLmxlbiAmJgorCX0KKworCWlmIChtdm0tPmZ3LT5pbWdbSVdMX1VDT0RFX1dPV0xBTl0uc2VjWzBdLmxlbiAmJgogCSAgICBtdm0tPnRyYW5zLT5vcHMtPmQzX3N1c3BlbmQgJiYKIAkgICAgbXZtLT50cmFucy0+b3BzLT5kM19yZXN1bWUgJiYKIAkgICAgZGV2aWNlX2Nhbl93YWtldXAobXZtLT50cmFucy0+ZGV2KSkgewotCQltdm0tPndvd2xhbi5mbGFncyA9IFdJUEhZX1dPV0xBTl9NQUdJQ19QS1QgfAotCQkJCSAgICBXSVBIWV9XT1dMQU5fRElTQ09OTkVDVCB8Ci0JCQkJICAgIFdJUEhZX1dPV0xBTl9FQVBfSURFTlRJVFlfUkVRIHwKLQkJCQkgICAgV0lQSFlfV09XTEFOX1JGS0lMTF9SRUxFQVNFIHwKLQkJCQkgICAgV0lQSFlfV09XTEFOX05FVF9ERVRFQ1Q7CisJCW12bS0+d293bGFuLmZsYWdzIHw9IFdJUEhZX1dPV0xBTl9NQUdJQ19QS1QgfAorCQkJCSAgICAgV0lQSFlfV09XTEFOX0RJU0NPTk5FQ1QgfAorCQkJCSAgICAgV0lQSFlfV09XTEFOX0VBUF9JREVOVElUWV9SRVEgfAorCQkJCSAgICAgV0lQSFlfV09XTEFOX1JGS0lMTF9SRUxFQVNFIHwKKwkJCQkgICAgIFdJUEhZX1dPV0xBTl9ORVRfREVURUNUOwogCQlpZiAoIWl3bHdpZmlfbW9kX3BhcmFtcy5zd19jcnlwdG8pCiAJCQltdm0tPndvd2xhbi5mbGFncyB8PSBXSVBIWV9XT1dMQU5fU1VQUE9SVFNfR1RLX1JFS0VZIHwKIAkJCQkJICAgICBXSVBIWV9XT1dMQU5fR1RLX1JFS0VZX0ZBSUxVUkUgfApAQCAtNzA3LDkgKzcxMiw2IEBACiAJbXZtdmlmLT51cGxvYWRlZCA9IGZhbHNlOwogCW12bXZpZi0+YXBfc3RhX2lkID0gSVdMX01WTV9TVEFUSU9OX0NPVU5UOwogCi0JLyogZG9lcyB0aGlzIG1ha2Ugc2Vuc2UgYXQgYWxsPyAqLwotCW12bXZpZi0+Y29sb3IrKzsKLQogCXNwaW5fbG9ja19iaCgmbXZtLT50aW1lX2V2ZW50X2xvY2spOwogCWl3bF9tdm1fdGVfY2xlYXJfZGF0YShtdm0sICZtdm12aWYtPnRpbWVfZXZlbnRfZGF0YSk7CiAJc3Bpbl91bmxvY2tfYmgoJm12bS0+dGltZV9ldmVudF9sb2NrKTsKQEAgLTc2MSw0MSArNzYzLDIxNSBAQAogCWtmcmVlKGZ3X2Vycm9yX2R1bXApOwogfQogCitzdGF0aWMgdm9pZCBpd2xfbXZtX2R1bXBfZmlmb3Moc3RydWN0IGl3bF9tdm0gKm12bSwKKwkJCSAgICAgICBzdHJ1Y3QgaXdsX2Z3X2Vycm9yX2R1bXBfZGF0YSAqKmR1bXBfZGF0YSkKK3sKKwlzdHJ1Y3QgaXdsX2Z3X2Vycm9yX2R1bXBfZmlmbyAqZmlmb19oZHI7CisJdTMyICpmaWZvX2RhdGE7CisJdTMyIGZpZm9fbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIGo7CisKKwlpZiAoIWl3bF90cmFuc19ncmFiX25pY19hY2Nlc3MobXZtLT50cmFucywgZmFsc2UsICZmbGFncykpCisJCXJldHVybjsKKworCS8qIFB1bGwgUlhGIGRhdGEgZnJvbSBhbGwgUlhGcyAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG12bS0+c2hhcmVkX21lbV9jZmcucnhmaWZvX3NpemUpOyBpKyspIHsKKwkJLyoKKwkJICogS2VlcCBhc2lkZSB0aGUgYWRkaXRpb25hbCBvZmZzZXQgdGhhdCBtaWdodCBiZSBuZWVkZWQgZm9yCisJCSAqIG5leHQgUlhGCisJCSAqLworCQl1MzIgb2Zmc2V0X2RpZmYgPSBSWEZfRElGRl9GUk9NX1BSRVYgKiBpOworCisJCWZpZm9faGRyID0gKHZvaWQgKikoKmR1bXBfZGF0YSktPmRhdGE7CisJCWZpZm9fZGF0YSA9ICh2b2lkICopZmlmb19oZHItPmRhdGE7CisJCWZpZm9fbGVuID0gbXZtLT5zaGFyZWRfbWVtX2NmZy5yeGZpZm9fc2l6ZVtpXTsKKworCQkvKiBObyBuZWVkIHRvIHRyeSB0byByZWFkIHRoZSBkYXRhIGlmIHRoZSBsZW5ndGggaXMgMCAqLworCQlpZiAoZmlmb19sZW4gPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIEFkZCBhIFRMViBmb3IgdGhlIFJYRiAqLworCQkoKmR1bXBfZGF0YSktPnR5cGUgPSBjcHVfdG9fbGUzMihJV0xfRldfRVJST1JfRFVNUF9SWEYpOworCQkoKmR1bXBfZGF0YSktPmxlbiA9IGNwdV90b19sZTMyKGZpZm9fbGVuICsgc2l6ZW9mKCpmaWZvX2hkcikpOworCisJCWZpZm9faGRyLT5maWZvX251bSA9IGNwdV90b19sZTMyKGkpOworCQlmaWZvX2hkci0+YXZhaWxhYmxlX2J5dGVzID0KKwkJCWNwdV90b19sZTMyKGl3bF90cmFuc19yZWFkX3BycGgobXZtLT50cmFucywKKwkJCQkJCQlSWEZfUkRfRF9TUEFDRSArCisJCQkJCQkJb2Zmc2V0X2RpZmYpKTsKKwkJZmlmb19oZHItPndyX3B0ciA9CisJCQljcHVfdG9fbGUzMihpd2xfdHJhbnNfcmVhZF9wcnBoKG12bS0+dHJhbnMsCisJCQkJCQkJUlhGX1JEX1dSX1BUUiArCisJCQkJCQkJb2Zmc2V0X2RpZmYpKTsKKwkJZmlmb19oZHItPnJkX3B0ciA9CisJCQljcHVfdG9fbGUzMihpd2xfdHJhbnNfcmVhZF9wcnBoKG12bS0+dHJhbnMsCisJCQkJCQkJUlhGX1JEX1JEX1BUUiArCisJCQkJCQkJb2Zmc2V0X2RpZmYpKTsKKwkJZmlmb19oZHItPmZlbmNlX3B0ciA9CisJCQljcHVfdG9fbGUzMihpd2xfdHJhbnNfcmVhZF9wcnBoKG12bS0+dHJhbnMsCisJCQkJCQkJUlhGX1JEX0ZFTkNFX1BUUiArCisJCQkJCQkJb2Zmc2V0X2RpZmYpKTsKKwkJZmlmb19oZHItPmZlbmNlX21vZGUgPQorCQkJY3B1X3RvX2xlMzIoaXdsX3RyYW5zX3JlYWRfcHJwaChtdm0tPnRyYW5zLAorCQkJCQkJCVJYRl9TRVRfRkVOQ0VfTU9ERSArCisJCQkJCQkJb2Zmc2V0X2RpZmYpKTsKKworCQkvKiBMb2NrIGZlbmNlICovCisJCWl3bF90cmFuc193cml0ZV9wcnBoKG12bS0+dHJhbnMsCisJCQkJICAgICBSWEZfU0VUX0ZFTkNFX01PREUgKyBvZmZzZXRfZGlmZiwgMHgxKTsKKwkJLyogU2V0IGZlbmNlIHBvaW50ZXIgdG8gdGhlIHNhbWUgcGxhY2UgbGlrZSBXUiBwb2ludGVyICovCisJCWl3bF90cmFuc193cml0ZV9wcnBoKG12bS0+dHJhbnMsCisJCQkJICAgICBSWEZfTERfV1IyRkVOQ0UgKyBvZmZzZXRfZGlmZiwgMHgxKTsKKwkJLyogU2V0IGZlbmNlIG9mZnNldCAqLworCQlpd2xfdHJhbnNfd3JpdGVfcHJwaChtdm0tPnRyYW5zLAorCQkJCSAgICAgUlhGX0xEX0ZFTkNFX09GRlNFVF9BRERSICsgb2Zmc2V0X2RpZmYsCisJCQkJICAgICAweDApOworCisJCS8qIFJlYWQgRklGTyAqLworCQlmaWZvX2xlbiAvPSBzaXplb2YodTMyKTsgLyogU2l6ZSBpbiBEV09SRFMgKi8KKwkJZm9yIChqID0gMDsgaiA8IGZpZm9fbGVuOyBqKyspCisJCQlmaWZvX2RhdGFbal0gPSBpd2xfdHJhbnNfcmVhZF9wcnBoKG12bS0+dHJhbnMsCisJCQkJCQkJIFJYRl9GSUZPX1JEX0ZFTkNFX0lOQyArCisJCQkJCQkJIG9mZnNldF9kaWZmKTsKKwkJKmR1bXBfZGF0YSA9IGl3bF9md19lcnJvcl9uZXh0X2RhdGEoKmR1bXBfZGF0YSk7CisJfQorCisJLyogUHVsbCBUWEYgZGF0YSBmcm9tIGFsbCBUWEZzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXZtLT5zaGFyZWRfbWVtX2NmZy50eGZpZm9fc2l6ZSk7IGkrKykgeworCQkvKiBNYXJrIHRoZSBudW1iZXIgb2YgVFhGIHdlJ3JlIHB1bGxpbmcgbm93ICovCisJCWl3bF90cmFuc193cml0ZV9wcnBoKG12bS0+dHJhbnMsIFRYRl9MQVJDX05VTSwgaSk7CisKKwkJZmlmb19oZHIgPSAodm9pZCAqKSgqZHVtcF9kYXRhKS0+ZGF0YTsKKwkJZmlmb19kYXRhID0gKHZvaWQgKilmaWZvX2hkci0+ZGF0YTsKKwkJZmlmb19sZW4gPSBtdm0tPnNoYXJlZF9tZW1fY2ZnLnR4Zmlmb19zaXplW2ldOworCisJCS8qIE5vIG5lZWQgdG8gdHJ5IHRvIHJlYWQgdGhlIGRhdGEgaWYgdGhlIGxlbmd0aCBpcyAwICovCisJCWlmIChmaWZvX2xlbiA9PSAwKQorCQkJY29udGludWU7CisKKwkJLyogQWRkIGEgVExWIGZvciB0aGUgRklGTyAqLworCQkoKmR1bXBfZGF0YSktPnR5cGUgPSBjcHVfdG9fbGUzMihJV0xfRldfRVJST1JfRFVNUF9UWEYpOworCQkoKmR1bXBfZGF0YSktPmxlbiA9IGNwdV90b19sZTMyKGZpZm9fbGVuICsgc2l6ZW9mKCpmaWZvX2hkcikpOworCisJCWZpZm9faGRyLT5maWZvX251bSA9IGNwdV90b19sZTMyKGkpOworCQlmaWZvX2hkci0+YXZhaWxhYmxlX2J5dGVzID0KKwkJCWNwdV90b19sZTMyKGl3bF90cmFuc19yZWFkX3BycGgobXZtLT50cmFucywKKwkJCQkJCQlUWEZfRklGT19JVEVNX0NOVCkpOworCQlmaWZvX2hkci0+d3JfcHRyID0KKwkJCWNwdV90b19sZTMyKGl3bF90cmFuc19yZWFkX3BycGgobXZtLT50cmFucywKKwkJCQkJCQlUWEZfV1JfUFRSKSk7CisJCWZpZm9faGRyLT5yZF9wdHIgPQorCQkJY3B1X3RvX2xlMzIoaXdsX3RyYW5zX3JlYWRfcHJwaChtdm0tPnRyYW5zLAorCQkJCQkJCVRYRl9SRF9QVFIpKTsKKwkJZmlmb19oZHItPmZlbmNlX3B0ciA9CisJCQljcHVfdG9fbGUzMihpd2xfdHJhbnNfcmVhZF9wcnBoKG12bS0+dHJhbnMsCisJCQkJCQkJVFhGX0ZFTkNFX1BUUikpOworCQlmaWZvX2hkci0+ZmVuY2VfbW9kZSA9CisJCQljcHVfdG9fbGUzMihpd2xfdHJhbnNfcmVhZF9wcnBoKG12bS0+dHJhbnMsCisJCQkJCQkJVFhGX0xPQ0tfRkVOQ0UpKTsKKworCQkvKiBTZXQgdGhlIFRYRl9SRUFEX01PRElGWV9BRERSIHRvIFRYRl9XUl9QVFIgKi8KKwkJaXdsX3RyYW5zX3dyaXRlX3BycGgobXZtLT50cmFucywgVFhGX1JFQURfTU9ESUZZX0FERFIsCisJCQkJICAgICBUWEZfV1JfUFRSKTsKKworCQkvKiBEdW1teS1yZWFkIHRvIGFkdmFuY2UgdGhlIHJlYWQgcG9pbnRlciB0byB0aGUgaGVhZCAqLworCQlpd2xfdHJhbnNfcmVhZF9wcnBoKG12bS0+dHJhbnMsIFRYRl9SRUFEX01PRElGWV9EQVRBKTsKKworCQkvKiBSZWFkIEZJRk8gKi8KKwkJZmlmb19sZW4gLz0gc2l6ZW9mKHUzMik7IC8qIFNpemUgaW4gRFdPUkRTICovCisJCWZvciAoaiA9IDA7IGogPCBmaWZvX2xlbjsgaisrKQorCQkJZmlmb19kYXRhW2pdID0gaXdsX3RyYW5zX3JlYWRfcHJwaChtdm0tPnRyYW5zLAorCQkJCQkJCSAgVFhGX1JFQURfTU9ESUZZX0RBVEEpOworCQkqZHVtcF9kYXRhID0gaXdsX2Z3X2Vycm9yX25leHRfZGF0YSgqZHVtcF9kYXRhKTsKKwl9CisKKwlpd2xfdHJhbnNfcmVsZWFzZV9uaWNfYWNjZXNzKG12bS0+dHJhbnMsICZmbGFncyk7Cit9CisKIHZvaWQgaXdsX212bV9md19lcnJvcl9kdW1wKHN0cnVjdCBpd2xfbXZtICptdm0pCiB7CiAJc3RydWN0IGl3bF9md19lcnJvcl9kdW1wX2ZpbGUgKmR1bXBfZmlsZTsKIAlzdHJ1Y3QgaXdsX2Z3X2Vycm9yX2R1bXBfZGF0YSAqZHVtcF9kYXRhOwogCXN0cnVjdCBpd2xfZndfZXJyb3JfZHVtcF9pbmZvICpkdW1wX2luZm87CisJc3RydWN0IGl3bF9md19lcnJvcl9kdW1wX21lbSAqZHVtcF9tZW07CiAJc3RydWN0IGl3bF9tdm1fZHVtcF9wdHJzICpmd19lcnJvcl9kdW1wOwotCWNvbnN0IHN0cnVjdCBmd19pbWcgKmltZzsKIAl1MzIgc3JhbV9sZW4sIHNyYW1fb2ZzOwotCXUzMiBmaWxlX2xlbiwgcnhmX2xlbjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZWdfdmFsOworCXUzMiBmaWxlX2xlbiwgZmlmb19kYXRhX2xlbiA9IDA7CisJdTMyIHNtZW1fbGVuID0gbXZtLT5jZmctPnNtZW1fbGVuOworCXUzMiBzcmFtMl9sZW4gPSBtdm0tPmNmZy0+ZGNjbTJfbGVuOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbXZtLT5tdXRleCk7CiAKKwkvKiBXL0EgZm9yIDgwMDAgSFcgZmFtaWx5IEEtc3RlcCAqLworCWlmIChtdm0tPmNmZy0+ZGV2aWNlX2ZhbWlseSA9PSBJV0xfREVWSUNFX0ZBTUlMWV84MDAwICYmCisJICAgIENTUl9IV19SRVZfU1RFUChtdm0tPnRyYW5zLT5od19yZXYpID09IFNJTElDT05fQV9TVEVQKSB7CisJCWlmIChzbWVtX2xlbikKKwkJCXNtZW1fbGVuID0gMHgzODAwMDsKKworCQlpZiAoc3JhbTJfbGVuKQorCQkJc3JhbTJfbGVuID0gMHgxMDAwMDsKKwl9CisKIAlmd19lcnJvcl9kdW1wID0ga3phbGxvYyhzaXplb2YoKmZ3X2Vycm9yX2R1bXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZ3X2Vycm9yX2R1bXApCiAJCXJldHVybjsKIAotCWltZyA9ICZtdm0tPmZ3LT5pbWdbbXZtLT5jdXJfdWNvZGVdOwotCXNyYW1fb2ZzID0gaW1nLT5zZWNbSVdMX1VDT0RFX1NFQ1RJT05fREFUQV0ub2Zmc2V0OwotCXNyYW1fbGVuID0gaW1nLT5zZWNbSVdMX1VDT0RFX1NFQ1RJT05fREFUQV0ubGVuOworCS8qIFNSQU0gLSBpbmNsdWRlIHN0YWNrIENDTSBpZiBkcml2ZXIga25vd3MgdGhlIHZhbHVlcyBmb3IgaXQgKi8KKwlpZiAoIW12bS0+Y2ZnLT5kY2NtX29mZnNldCB8fCAhbXZtLT5jZmctPmRjY21fbGVuKSB7CisJCWNvbnN0IHN0cnVjdCBmd19pbWcgKmltZzsKIAotCS8qIHJlYWRpbmcgYnVmZmVyIHNpemUgKi8KLQlyZWdfdmFsID0gaXdsX3RyYW5zX3JlYWRfcHJwaChtdm0tPnRyYW5zLCBSWEZfU0laRV9BRERSKTsKLQlyeGZfbGVuID0gKHJlZ192YWwgJiBSWEZfU0laRV9CWVRFX0NOVF9NU0spID4+IFJYRl9TSVpFX0JZVEVfQ05EX1BPUzsKKwkJaW1nID0gJm12bS0+ZnctPmltZ1ttdm0tPmN1cl91Y29kZV07CisJCXNyYW1fb2ZzID0gaW1nLT5zZWNbSVdMX1VDT0RFX1NFQ1RJT05fREFUQV0ub2Zmc2V0OworCQlzcmFtX2xlbiA9IGltZy0+c2VjW0lXTF9VQ09ERV9TRUNUSU9OX0RBVEFdLmxlbjsKKwl9IGVsc2UgeworCQlzcmFtX29mcyA9IG12bS0+Y2ZnLT5kY2NtX29mZnNldDsKKwkJc3JhbV9sZW4gPSBtdm0tPmNmZy0+ZGNjbV9sZW47CisJfQogCi0JLyogdGhlIHJlZ2lzdGVyIGhvbGRzIHRoZSB2YWx1ZSBkaXZpZGVkIGJ5IDEyOCAqLwotCXJ4Zl9sZW4gPSByeGZfbGVuIDw8IDc7CisJLyogcmVhZGluZyBSWEYvVFhGIHNpemVzICovCisJaWYgKHRlc3RfYml0KFNUQVRVU19GV19FUlJPUiwgJm12bS0+dHJhbnMtPnN0YXR1cykpIHsKKwkJc3RydWN0IGl3bF9tdm1fc2hhcmVkX21lbV9jZmcgKm1lbV9jZmcgPSAmbXZtLT5zaGFyZWRfbWVtX2NmZzsKKwkJaW50IGk7CisKKwkJZmlmb19kYXRhX2xlbiA9IDA7CisKKwkJLyogQ291bnQgUlhGIHNpemUgKi8KKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWVtX2NmZy0+cnhmaWZvX3NpemUpOyBpKyspIHsKKwkJCWlmICghbWVtX2NmZy0+cnhmaWZvX3NpemVbaV0pCisJCQkJY29udGludWU7CisKKwkJCS8qIEFkZCBoZWFkZXIgaW5mbyAqLworCQkJZmlmb19kYXRhX2xlbiArPSBtZW1fY2ZnLT5yeGZpZm9fc2l6ZVtpXSArCisJCQkJCSBzaXplb2YoKmR1bXBfZGF0YSkgKworCQkJCQkgc2l6ZW9mKHN0cnVjdCBpd2xfZndfZXJyb3JfZHVtcF9maWZvKTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1lbV9jZmctPnR4Zmlmb19zaXplKTsgaSsrKSB7CisJCQlpZiAoIW1lbV9jZmctPnR4Zmlmb19zaXplW2ldKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBBZGQgaGVhZGVyIGluZm8gKi8KKwkJCWZpZm9fZGF0YV9sZW4gKz0gbWVtX2NmZy0+dHhmaWZvX3NpemVbaV0gKworCQkJCQkgc2l6ZW9mKCpkdW1wX2RhdGEpICsKKwkJCQkJIHNpemVvZihzdHJ1Y3QgaXdsX2Z3X2Vycm9yX2R1bXBfZmlmbyk7CisJCX0KKwl9CiAKIAlmaWxlX2xlbiA9IHNpemVvZigqZHVtcF9maWxlKSArCi0JCSAgIHNpemVvZigqZHVtcF9kYXRhKSAqIDMgKwotCQkgICBzcmFtX2xlbiArCi0JCSAgIHJ4Zl9sZW4gKworCQkgICBzaXplb2YoKmR1bXBfZGF0YSkgKiAyICsKKwkJICAgc3JhbV9sZW4gKyBzaXplb2YoKmR1bXBfbWVtKSArCisJCSAgIGZpZm9fZGF0YV9sZW4gKwogCQkgICBzaXplb2YoKmR1bXBfaW5mbyk7CiAKKwkvKiBNYWtlIHJvb20gZm9yIHRoZSBTTUVNLCBpZiBpdCBleGlzdHMgKi8KKwlpZiAoc21lbV9sZW4pCisJCWZpbGVfbGVuICs9IHNpemVvZigqZHVtcF9kYXRhKSArIHNpemVvZigqZHVtcF9tZW0pICsgc21lbV9sZW47CisKKwkvKiBNYWtlIHJvb20gZm9yIHRoZSBzZWNvbmRhcnkgU1JBTSwgaWYgaXQgZXhpc3RzICovCisJaWYgKHNyYW0yX2xlbikKKwkJZmlsZV9sZW4gKz0gc2l6ZW9mKCpkdW1wX2RhdGEpICsgc2l6ZW9mKCpkdW1wX21lbSkgKyBzcmFtMl9sZW47CisKIAlkdW1wX2ZpbGUgPSB2emFsbG9jKGZpbGVfbGVuKTsKIAlpZiAoIWR1bXBfZmlsZSkgewogCQlrZnJlZShmd19lcnJvcl9kdW1wKTsKQEAgLTgxNCw2ICs5OTAsNyBAQAogCQltdm0tPmNmZy0+ZGV2aWNlX2ZhbWlseSA9PSBJV0xfREVWSUNFX0ZBTUlMWV83MDAwID8KIAkJCWNwdV90b19sZTMyKElXTF9GV19FUlJPUl9EVU1QX0ZBTUlMWV83KSA6CiAJCQljcHVfdG9fbGUzMihJV0xfRldfRVJST1JfRFVNUF9GQU1JTFlfOCk7CisJZHVtcF9pbmZvLT5od19zdGVwID0gY3B1X3RvX2xlMzIoQ1NSX0hXX1JFVl9TVEVQKG12bS0+dHJhbnMtPmh3X3JldikpOwogCW1lbWNweShkdW1wX2luZm8tPmZ3X2h1bWFuX3JlYWRhYmxlLCBtdm0tPmZ3LT5odW1hbl9yZWFkYWJsZSwKIAkgICAgICAgc2l6ZW9mKGR1bXBfaW5mby0+ZndfaHVtYW5fcmVhZGFibGUpKTsKIAlzdHJuY3B5KGR1bXBfaW5mby0+ZGV2X2h1bWFuX3JlYWRhYmxlLCBtdm0tPmNmZy0+bmFtZSwKQEAgLTgyMiwyOCArOTk5LDM5IEBACiAJCXNpemVvZihkdW1wX2luZm8tPmJ1c19odW1hbl9yZWFkYWJsZSkpOwogCiAJZHVtcF9kYXRhID0gaXdsX2Z3X2Vycm9yX25leHRfZGF0YShkdW1wX2RhdGEpOwotCWR1bXBfZGF0YS0+dHlwZSA9IGNwdV90b19sZTMyKElXTF9GV19FUlJPUl9EVU1QX1JYRik7Ci0JZHVtcF9kYXRhLT5sZW4gPSBjcHVfdG9fbGUzMihyeGZfbGVuKTsKKwkvKiBXZSBvbmx5IGR1bXAgdGhlIEZJRk9zIGlmIHRoZSBGVyBpcyBpbiBlcnJvciBzdGF0ZSAqLworCWlmICh0ZXN0X2JpdChTVEFUVVNfRldfRVJST1IsICZtdm0tPnRyYW5zLT5zdGF0dXMpKQorCQlpd2xfbXZtX2R1bXBfZmlmb3MobXZtLCAmZHVtcF9kYXRhKTsKIAotCWlmIChpd2xfdHJhbnNfZ3JhYl9uaWNfYWNjZXNzKG12bS0+dHJhbnMsIGZhbHNlLCAmZmxhZ3MpKSB7Ci0JCXUzMiAqcnhmID0gKHZvaWQgKilkdW1wX2RhdGEtPmRhdGE7Ci0JCWludCBpOworCWR1bXBfZGF0YS0+dHlwZSA9IGNwdV90b19sZTMyKElXTF9GV19FUlJPUl9EVU1QX01FTSk7CisJZHVtcF9kYXRhLT5sZW4gPSBjcHVfdG9fbGUzMihzcmFtX2xlbiArIHNpemVvZigqZHVtcF9tZW0pKTsKKwlkdW1wX21lbSA9ICh2b2lkICopZHVtcF9kYXRhLT5kYXRhOworCWR1bXBfbWVtLT50eXBlID0gY3B1X3RvX2xlMzIoSVdMX0ZXX0VSUk9SX0RVTVBfTUVNX1NSQU0pOworCWR1bXBfbWVtLT5vZmZzZXQgPSBjcHVfdG9fbGUzMihzcmFtX29mcyk7CisJaXdsX3RyYW5zX3JlYWRfbWVtX2J5dGVzKG12bS0+dHJhbnMsIHNyYW1fb2ZzLCBkdW1wX21lbS0+ZGF0YSwKKwkJCQkgc3JhbV9sZW4pOwogCi0JCWZvciAoaSA9IDA7IGkgPCAocnhmX2xlbiAvIHNpemVvZih1MzIpKTsgaSsrKSB7Ci0JCQlpd2xfdHJhbnNfd3JpdGVfcHJwaChtdm0tPnRyYW5zLAotCQkJCQkgICAgIFJYRl9MRF9GRU5DRV9PRkZTRVRfQUREUiwKLQkJCQkJICAgICBpICogc2l6ZW9mKHUzMikpOwotCQkJcnhmW2ldID0gaXdsX3RyYW5zX3JlYWRfcHJwaChtdm0tPnRyYW5zLAotCQkJCQkJICAgICBSWEZfRklGT19SRF9GRU5DRV9BRERSKTsKLQkJfQotCQlpd2xfdHJhbnNfcmVsZWFzZV9uaWNfYWNjZXNzKG12bS0+dHJhbnMsICZmbGFncyk7CisJaWYgKHNtZW1fbGVuKSB7CisJCWR1bXBfZGF0YSA9IGl3bF9md19lcnJvcl9uZXh0X2RhdGEoZHVtcF9kYXRhKTsKKwkJZHVtcF9kYXRhLT50eXBlID0gY3B1X3RvX2xlMzIoSVdMX0ZXX0VSUk9SX0RVTVBfTUVNKTsKKwkJZHVtcF9kYXRhLT5sZW4gPSBjcHVfdG9fbGUzMihzbWVtX2xlbiArIHNpemVvZigqZHVtcF9tZW0pKTsKKwkJZHVtcF9tZW0gPSAodm9pZCAqKWR1bXBfZGF0YS0+ZGF0YTsKKwkJZHVtcF9tZW0tPnR5cGUgPSBjcHVfdG9fbGUzMihJV0xfRldfRVJST1JfRFVNUF9NRU1fU01FTSk7CisJCWR1bXBfbWVtLT5vZmZzZXQgPSBjcHVfdG9fbGUzMihtdm0tPmNmZy0+c21lbV9vZmZzZXQpOworCQlpd2xfdHJhbnNfcmVhZF9tZW1fYnl0ZXMobXZtLT50cmFucywgbXZtLT5jZmctPnNtZW1fb2Zmc2V0LAorCQkJCQkgZHVtcF9tZW0tPmRhdGEsIHNtZW1fbGVuKTsKIAl9CiAKLQlkdW1wX2RhdGEgPSBpd2xfZndfZXJyb3JfbmV4dF9kYXRhKGR1bXBfZGF0YSk7Ci0JZHVtcF9kYXRhLT50eXBlID0gY3B1X3RvX2xlMzIoSVdMX0ZXX0VSUk9SX0RVTVBfU1JBTSk7Ci0JZHVtcF9kYXRhLT5sZW4gPSBjcHVfdG9fbGUzMihzcmFtX2xlbik7Ci0JaXdsX3RyYW5zX3JlYWRfbWVtX2J5dGVzKG12bS0+dHJhbnMsIHNyYW1fb2ZzLCBkdW1wX2RhdGEtPmRhdGEsCi0JCQkJIHNyYW1fbGVuKTsKKwlpZiAoc3JhbTJfbGVuKSB7CisJCWR1bXBfZGF0YSA9IGl3bF9md19lcnJvcl9uZXh0X2RhdGEoZHVtcF9kYXRhKTsKKwkJZHVtcF9kYXRhLT50eXBlID0gY3B1X3RvX2xlMzIoSVdMX0ZXX0VSUk9SX0RVTVBfTUVNKTsKKwkJZHVtcF9kYXRhLT5sZW4gPSBjcHVfdG9fbGUzMihzcmFtMl9sZW4gKyBzaXplb2YoKmR1bXBfbWVtKSk7CisJCWR1bXBfbWVtID0gKHZvaWQgKilkdW1wX2RhdGEtPmRhdGE7CisJCWR1bXBfbWVtLT50eXBlID0gY3B1X3RvX2xlMzIoSVdMX0ZXX0VSUk9SX0RVTVBfTUVNX1NSQU0pOworCQlkdW1wX21lbS0+b2Zmc2V0ID0gY3B1X3RvX2xlMzIobXZtLT5jZmctPmRjY20yX29mZnNldCk7CisJCWl3bF90cmFuc19yZWFkX21lbV9ieXRlcyhtdm0tPnRyYW5zLCBtdm0tPmNmZy0+ZGNjbTJfb2Zmc2V0LAorCQkJCQkgZHVtcF9tZW0tPmRhdGEsIHNyYW0yX2xlbik7CisJfQogCiAJZndfZXJyb3JfZHVtcC0+dHJhbnNfcHRyID0gaXdsX3RyYW5zX2R1bXBfZGF0YShtdm0tPnRyYW5zKTsKIAlmd19lcnJvcl9kdW1wLT5vcF9tb2RlX2xlbiA9IGZpbGVfbGVuOwpAQCAtODY0LDYgKzEwNTIsMTEgQEAKIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChJV0xfTVZNX1NUQVRVU19EM19SRUNPTkZJRywgJm12bS0+c3RhdHVzKSkKIAkJaXdsX212bV9md19lcnJvcl9kdW1wKG12bSk7CiAKKwkvKiBjbGVhbnVwIGFsbCBzdGFsZSByZWZlcmVuY2VzIChzY2FuLCByb2MpLCBidXQga2VlcCB0aGUKKwkgKiB1Y29kZV9kb3duIHJlZiB1bnRpbCByZWNvbmZpZyBpcyBjb21wbGV0ZQorCSAqLworCWl3bF9tdm1fdW5yZWZfYWxsX2V4Y2VwdChtdm0sIElXTF9NVk1fUkVGX1VDT0RFX0RPV04pOworCiAJaXdsX3RyYW5zX3N0b3BfZGV2aWNlKG12bS0+dHJhbnMpOwogCiAJbXZtLT5zY2FuX3N0YXR1cyA9IElXTF9NVk1fU0NBTl9OT05FOwpAQCAtODkzLDEwICsxMDg2LDYgQEAKIAogCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhtdm0tPmh3KTsKIAotCS8qIGNsZWFudXAgYWxsIHN0YWxlIHJlZmVyZW5jZXMgKHNjYW4sIHJvYyksIGJ1dCBrZWVwIHRoZQotCSAqIHVjb2RlX2Rvd24gcmVmIHVudGlsIHJlY29uZmlnIGlzIGNvbXBsZXRlICovCi0JaXdsX212bV91bnJlZl9hbGxfZXhjZXB0KG12bSwgSVdMX01WTV9SRUZfVUNPREVfRE9XTik7Ci0KIAkvKiBjbGVhciBhbnkgc3RhbGUgZDBpMyBzdGF0ZSAqLwogCWNsZWFyX2JpdChJV0xfTVZNX1NUQVRVU19JTl9EMEkzLCAmbXZtLT5zdGF0dXMpOwogCkBAIC05MzMsNiArMTEyMiwxOSBAQAogCXN0cnVjdCBpd2xfbXZtICptdm0gPSBJV0xfTUFDODAyMTFfR0VUX01WTShodyk7CiAJaW50IHJldDsKIAorCS8qIFNvbWUgaHcgcmVzdGFydCBjbGVhbnVwcyBtdXN0IG5vdCBob2xkIHRoZSBtdXRleCAqLworCWlmICh0ZXN0X2JpdChJV0xfTVZNX1NUQVRVU19JTl9IV19SRVNUQVJULCAmbXZtLT5zdGF0dXMpKSB7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB3ZSBhcmUgb3V0IG9mIGQwaTMuIFRoaXMgaXMgbmVlZGVkCisJCSAqIHRvIG1ha2Ugc3VyZSB0aGUgcmVmZXJlbmNlIGFjY291bnRpbmcgaXMgY29ycmVjdAorCQkgKiAoYW5kIHRoZXJlIGlzIG5vIHN0YWxlIGQwaTNfZXhpdF93b3JrKS4KKwkJICovCisJCXdhaXRfZXZlbnRfdGltZW91dChtdm0tPmQwaTNfZXhpdF93YWl0cSwKKwkJCQkgICAhdGVzdF9iaXQoSVdMX01WTV9TVEFUVVNfSU5fRDBJMywKKwkJCQkJICAgICAmbXZtLT5zdGF0dXMpLAorCQkJCSAgIEhaKTsKKwl9CisKIAltdXRleF9sb2NrKCZtdm0tPm11dGV4KTsKIAlyZXQgPSBfX2l3bF9tdm1fbWFjX3N0YXJ0KG12bSk7CiAJbXV0ZXhfdW5sb2NrKCZtdm0tPm11dGV4KTsKQEAgLTk4Miw2ICsxMTg0LDEzIEBACiAJCUlXTF9ERUJVR19SUE0obXZtLCAiUnVuIGRlZmVycmVkIGQwaTMgZXhpdFxuIik7CiAJCV9pd2xfbXZtX2V4aXRfZDBpMyhtdm0pOwogCX0KKworCWlmIChtdm0tPnRyYW5zLT5kMGkzX21vZGUgPT0gSVdMX0QwSTNfTU9ERV9PTl9TVVNQRU5EKQorCQlpZiAoIXdhaXRfZXZlbnRfdGltZW91dChtdm0tPmQwaTNfZXhpdF93YWl0cSwKKwkJCQkJIXRlc3RfYml0KElXTF9NVk1fU1RBVFVTX0lOX0QwSTMsCisJCQkJCQkgICZtdm0tPnN0YXR1cyksCisJCQkJCUhaKSkKKwkJCVdBUk5fT05DRSgxLCAiRDBpMyBleGl0IG9uIHJlc3VtZSB0aW1lZCBvdXRcbiIpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTE0Niw3ICsxMzU1LDcgQEAKIAogCXJldCA9IGl3bF9tdm1fcG93ZXJfdXBkYXRlX21hYyhtdm0pOwogCWlmIChyZXQpCi0JCWdvdG8gb3V0X3JlbGVhc2U7CisJCWdvdG8gb3V0X3JlbW92ZV9tYWM7CiAKIAkvKiBiZWFjb24gZmlsdGVyaW5nICovCiAJcmV0ID0gaXdsX212bV9kaXNhYmxlX2JlYWNvbl9maWx0ZXIobXZtLCB2aWYsIDApOwpAQCAtMjA4OCw3ICsyMjk3LDcgQEAKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlzdHJ1Y3QgaXdsX212bSAqbXZtID0gSVdMX01BQzgwMjExX0dFVF9NVk0oaHcpOwotCXN0cnVjdCBpd2xfbXZtX3N0YSAqbXZtX3N0YSA9ICh2b2lkICopc3RhLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgaXdsX212bV9zdGEgKm12bV9zdGEgPSBpd2xfbXZtX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7CiAKIAkvKgogCSAqIFRoaXMgaXMgY2FsbGVkIGJlZm9yZSBtYWM4MDIxMSBkb2VzIFJDVSBzeW5jaHJvbmlzYXRpb24sCkBAIC0yMTA1LDYgKzIzMTQsMjAgQEAKIAltdXRleF91bmxvY2soJm12bS0+bXV0ZXgpOwogfQogCitzdGF0aWMgdm9pZCBpd2xfbXZtX2NoZWNrX3VhcHNkKHN0cnVjdCBpd2xfbXZtICptdm0sIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJY29uc3QgdTggKmJzc2lkKQoreworCWlmICghKG12bS0+ZnctPnVjb2RlX2NhcGEuZmxhZ3MgJiBJV0xfVUNPREVfVExWX0ZMQUdTX1VBUFNEX1NVUFBPUlQpKQorCQlyZXR1cm47CisKKwlpZiAoaXdsd2lmaV9tb2RfcGFyYW1zLnVhcHNkX2Rpc2FibGUpIHsKKwkJdmlmLT5kcml2ZXJfZmxhZ3MgJj0gfklFRUU4MDIxMV9WSUZfU1VQUE9SVFNfVUFQU0Q7CisJCXJldHVybjsKKwl9CisKKwl2aWYtPmRyaXZlcl9mbGFncyB8PSBJRUVFODAyMTFfVklGX1NVUFBPUlRTX1VBUFNEOworfQorCiBzdGF0aWMgaW50IGl3bF9tdm1fbWFjX3N0YV9zdGF0ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKQEAgLTIxNjQsNiArMjM4Nyw3IEBACiAJCSAqIFJlc2V0IEVCUyBzdGF0dXMgaGVyZSBhc3N1bWluZyBlbnZpcm9ubWVudCBoYXMgYmVlbiBjaGFuZ2VkLgogCQkgKi8KIAkJbXZtLT5sYXN0X2Vic19zdWNjZXNzZnVsID0gdHJ1ZTsKKwkJaXdsX212bV9jaGVja191YXBzZChtdm0sIHZpZiwgc3RhLT5hZGRyKTsKIAkJcmV0ID0gMDsKIAl9IGVsc2UgaWYgKG9sZF9zdGF0ZSA9PSBJRUVFODAyMTFfU1RBX0FVVEggJiYKIAkJICAgbmV3X3N0YXRlID09IElFRUU4MDIxMV9TVEFfQVNTT0MpIHsKQEAgLTMxMDMsNyArMzMyNyw3IEBACiAJCQkgICBib29sIHNldCkKIHsKIAlzdHJ1Y3QgaXdsX212bSAqbXZtID0gSVdMX01BQzgwMjExX0dFVF9NVk0oaHcpOwotCXN0cnVjdCBpd2xfbXZtX3N0YSAqbXZtX3N0YSA9ICh2b2lkICopc3RhLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgaXdsX212bV9zdGEgKm12bV9zdGEgPSBpd2xfbXZtX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7CiAKIAlpZiAoIW12bV9zdGEgfHwgIW12bV9zdGEtPnZpZikgewogCQlJV0xfRVJSKG12bSwgIlN0YXRpb24gaXMgbm90IGFzc29jaWF0ZWQgdG8gYSB2aWZcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbXZtLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9tdm0uaAppbmRleCBkMjQ2NjBmYi4uNmM2OWQwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbXZtLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbXZtLmgKQEAgLTExOSwxMSArMTE5LDEzIEBACiAgKglXZSB3aWxsIHJlZ2lzdGVyIHRvIG1hYzgwMjExIHRvIGhhdmUgdGVzdG1vZGUgd29ya2luZy4gVGhlIE5JQyBtdXN0IG5vdAogICoJYmUgdXAnZWQgYWZ0ZXIgdGhlIElOSVQgZncgYXNzZXJ0ZWQuIFRoaXMgaXMgdXNlZnVsIHRvIGJlIGFibGUgdG8gdXNlCiAgKglwcm9wcmlldGFyeSB0b29scyBvdmVyIHRlc3Rtb2RlIHRvIGRlYnVnIHRoZSBJTklUIGZ3LgorICogQHRmZF9xX2hhbmdfZGV0ZWN0OiBlbmFibGVkIHRoZSBkZXRlY3Rpb24gb2YgaHVuZyB0cmFuc21pdCBxdWV1ZXMKICAqIEBwb3dlcl9zY2hlbWU6IENBTShDb250aW51b3VzIEFjdGl2ZSBNb2RlKS0xLCBCUFMoQmFsYW5jZWQgUG93ZXIKICAqCVNhdmUpLTIoZGVmYXVsdCksIExQKExvdyBQb3dlciktMwogICovCiBzdHJ1Y3QgaXdsX212bV9tb2RfcGFyYW1zIHsKIAlib29sIGluaXRfZGJnOworCWJvb2wgdGZkX3FfaGFuZ19kZXRlY3Q7CiAJaW50IHBvd2VyX3NjaGVtZTsKIH07CiBleHRlcm4gc3RydWN0IGl3bF9tdm1fbW9kX3BhcmFtcyBpd2xtdm1fbW9kX3BhcmFtczsKQEAgLTI3Niw2ICsyNzgsNyBAQAogCUlXTF9NVk1fUkVGX1RNX0NNRCwKIAlJV0xfTVZNX1JFRl9FWElUX1dPUkssCiAJSVdMX01WTV9SRUZfUFJPVEVDVF9DU0EsCisJSVdMX01WTV9SRUZfRldfREJHX0NPTExFQ1QsCiAKIAkvKiB1cGRhdGUgZGVidWdmcy5jIHdoZW4gY2hhbmdpbmcgdGhpcyAqLwogCkBAIC01MzEsMTAgKzUzNCwyMyBAQAogZW51bSBpd2xfbXZtX3RkbHNfY3Nfc3RhdGUgewogCUlXTF9NVk1fVERMU19TV19JRExFID0gMCwKIAlJV0xfTVZNX1RETFNfU1dfUkVRX1NFTlQsCisJSVdMX01WTV9URExTX1NXX1JFU1BfUkNWRCwKIAlJV0xfTVZNX1RETFNfU1dfUkVRX1JDVkQsCiAJSVdMX01WTV9URExTX1NXX0FDVElWRSwKIH07CiAKK3N0cnVjdCBpd2xfbXZtX3NoYXJlZF9tZW1fY2ZnIHsKKwl1MzIgc2hhcmVkX21lbV9hZGRyOworCXUzMiBzaGFyZWRfbWVtX3NpemU7CisJdTMyIHNhbXBsZV9idWZmX2FkZHI7CisJdTMyIHNhbXBsZV9idWZmX3NpemU7CisJdTMyIHR4Zmlmb19hZGRyOworCXUzMiB0eGZpZm9fc2l6ZVtUWF9GSUZPX01BWF9OVU1dOworCXUzMiByeGZpZm9fc2l6ZVtSWF9GSUZPX01BWF9OVU1dOworCXUzMiBwYWdlX2J1ZmZfYWRkcjsKKwl1MzIgcGFnZV9idWZmX3NpemU7Cit9OworCiBzdHJ1Y3QgaXdsX212bSB7CiAJLyogZm9yIGxvZ2dlciBhY2Nlc3MgKi8KIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CkBAIC02NDEsNiArNjU3LDggQEAKIAlib29sIGRpc2FibGVfcG93ZXJfb2ZmOwogCWJvb2wgZGlzYWJsZV9wb3dlcl9vZmZfZDM7CiAKKwlib29sIHNjYW5faXRlcl9ub3RpZl9lbmFibGVkOworCiAJc3RydWN0IGRlYnVnZnNfYmxvYl93cmFwcGVyIG52bV9od19ibG9iOwogCXN0cnVjdCBkZWJ1Z2ZzX2Jsb2Jfd3JhcHBlciBudm1fc3dfYmxvYjsKIAlzdHJ1Y3QgZGVidWdmc19ibG9iX3dyYXBwZXIgbnZtX2NhbGliX2Jsb2I7CkBAIC03ODIsOCArODAwLDEzIEBACiAJCQlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZjsKIAkJCXN0cnVjdCBza19idWZmICpza2I7IC8qIGNoIHN3IHRlbXBsYXRlICovCiAJCQl1MzIgY2hfc3dfdG1faWU7CisKKwkJCS8qIHRpbWVzdGFtcCBvZiBsYXN0IGNoLXN3IHJlcXVlc3Qgc2VudCAoR1AyIHRpbWUpICovCisJCQl1MzIgc2VudF90aW1lc3RhbXA7CiAJCX0gcGVlcjsKIAl9IHRkbHNfY3M7CisKKwlzdHJ1Y3QgaXdsX212bV9zaGFyZWRfbWVtX2NmZyBzaGFyZWRfbWVtX2NmZzsKIH07CiAKIC8qIEV4dHJhY3QgTVZNIHByaXYgZnJvbSBvcF9tb2RlIGFuZCBfaHcgKi8KQEAgLTg1MCwxMiArODczLDE0IEBACiBzdGF0aWMgaW5saW5lIGJvb2wgaXdsX212bV9pc19kMGkzX3N1cHBvcnRlZChzdHJ1Y3QgaXdsX212bSAqbXZtKQogewogCXJldHVybiBtdm0tPnRyYW5zLT5jZmctPmQwaTMgJiYKKwkgICAgICAgbXZtLT50cmFucy0+ZDBpM19tb2RlICE9IElXTF9EMEkzX01PREVfT0ZGICYmCisJICAgICAgICFpd2x3aWZpX21vZF9wYXJhbXMuZDBpM19kaXNhYmxlICYmCiAJICAgICAgIChtdm0tPmZ3LT51Y29kZV9jYXBhLmNhcGFbMF0gJiBJV0xfVUNPREVfVExWX0NBUEFfRDBJM19TVVBQT1JUKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGl3bF9tdm1faXNfZHFhX3N1cHBvcnRlZChzdHJ1Y3QgaXdsX212bSAqbXZtKQorc3RhdGljIGlubGluZSBib29sIGl3bF9tdm1faXNfc2NkX2NmZ19zdXBwb3J0ZWQoc3RydWN0IGl3bF9tdm0gKm12bSkKIHsKLQlyZXR1cm4gbXZtLT5mdy0+dWNvZGVfY2FwYS5jYXBhWzBdICYgSVdMX1VDT0RFX1RMVl9DQVBBX0RRQV9TVVBQT1JUOworCXJldHVybiBtdm0tPmZ3LT51Y29kZV9jYXBhLmFwaVswXSAmIElXTF9VQ09ERV9UTFZfQVBJX1NDRF9DRkc7CiB9CiAKIGV4dGVybiBjb25zdCB1OCBpd2xfbXZtX2FjX3RvX3R4X2ZpZm9bXTsKQEAgLTkzNyw2ICs5NjIsMzMgQEAKIGludCBpd2xfbnZtX2luaXQoc3RydWN0IGl3bF9tdm0gKm12bSwgYm9vbCByZWFkX252bV9mcm9tX25pYyk7CiBpbnQgaXdsX212bV9sb2FkX252bV90b19uaWMoc3RydWN0IGl3bF9tdm0gKm12bSk7CiAKK3N0YXRpYyBpbmxpbmUgdTggaXdsX212bV9nZXRfdmFsaWRfdHhfYW50KHN0cnVjdCBpd2xfbXZtICptdm0pCit7CisJcmV0dXJuIG12bS0+bnZtX2RhdGEgJiYgbXZtLT5udm1fZGF0YS0+dmFsaWRfdHhfYW50ID8KKwkgICAgICAgbXZtLT5mdy0+dmFsaWRfdHhfYW50ICYgbXZtLT5udm1fZGF0YS0+dmFsaWRfdHhfYW50IDoKKwkgICAgICAgbXZtLT5mdy0+dmFsaWRfdHhfYW50OworfQorCitzdGF0aWMgaW5saW5lIHU4IGl3bF9tdm1fZ2V0X3ZhbGlkX3J4X2FudChzdHJ1Y3QgaXdsX212bSAqbXZtKQoreworCXJldHVybiBtdm0tPm52bV9kYXRhICYmIG12bS0+bnZtX2RhdGEtPnZhbGlkX3J4X2FudCA/CisJICAgICAgIG12bS0+ZnctPnZhbGlkX3J4X2FudCAmIG12bS0+bnZtX2RhdGEtPnZhbGlkX3J4X2FudCA6CisJICAgICAgIG12bS0+ZnctPnZhbGlkX3J4X2FudDsKK30KKworc3RhdGljIGlubGluZSB1MzIgaXdsX212bV9nZXRfcGh5X2NvbmZpZyhzdHJ1Y3QgaXdsX212bSAqbXZtKQoreworCXUzMiBwaHlfY29uZmlnID0gfihGV19QSFlfQ0ZHX1RYX0NIQUlOIHwKKwkJCSAgIEZXX1BIWV9DRkdfUlhfQ0hBSU4pOworCXUzMiB2YWxpZF9yeF9hbnQgPSBpd2xfbXZtX2dldF92YWxpZF9yeF9hbnQobXZtKTsKKwl1MzIgdmFsaWRfdHhfYW50ID0gaXdsX212bV9nZXRfdmFsaWRfdHhfYW50KG12bSk7CisKKwlwaHlfY29uZmlnIHw9IHZhbGlkX3R4X2FudCA8PCBGV19QSFlfQ0ZHX1RYX0NIQUlOX1BPUyB8CisJCSAgICAgIHZhbGlkX3J4X2FudCA8PCBGV19QSFlfQ0ZHX1JYX0NIQUlOX1BPUzsKKworCXJldHVybiBtdm0tPmZ3LT5waHlfY29uZmlnICYgcGh5X2NvbmZpZzsKK30KKwogaW50IGl3bF9tdm1fdXAoc3RydWN0IGl3bF9tdm0gKm12bSk7CiBpbnQgaXdsX212bV9sb2FkX2QzX2Z3KHN0cnVjdCBpd2xfbXZtICptdm0pOwogCkBAIC05NzAsNiArMTAyMiw5IEBACiAJCQkgc3RydWN0IGl3bF9kZXZpY2VfY21kICpjbWQpOwogaW50IGl3bF9tdm1fcnhfbWZ1YXJ0X25vdGlmKHN0cnVjdCBpd2xfbXZtICptdm0sIHN0cnVjdCBpd2xfcnhfY21kX2J1ZmZlciAqcnhiLAogCQkJICAgIHN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kKTsKK2ludCBpd2xfbXZtX3J4X3NoYXJlZF9tZW1fY2ZnX25vdGlmKHN0cnVjdCBpd2xfbXZtICptdm0sCisJCQkJICAgIHN0cnVjdCBpd2xfcnhfY21kX2J1ZmZlciAqcnhiLAorCQkJCSAgICBzdHJ1Y3QgaXdsX2RldmljZV9jbWQgKmNtZCk7CiAKIC8qIE1WTSBQSFkgKi8KIGludCBpd2xfbXZtX3BoeV9jdHh0X2FkZChzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgaXdsX212bV9waHlfY3R4dCAqY3R4dCwKQEAgLTEwMzEsNiArMTA4Niw5IEBACiBpbnQgaXdsX212bV9yeF9zY2FuX29mZmxvYWRfY29tcGxldGVfbm90aWYoc3RydWN0IGl3bF9tdm0gKm12bSwKIAkJCQkJICAgc3RydWN0IGl3bF9yeF9jbWRfYnVmZmVyICpyeGIsCiAJCQkJCSAgIHN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kKTsKK2ludCBpd2xfbXZtX3J4X3NjYW5fb2ZmbG9hZF9pdGVyX2NvbXBsZXRlX25vdGlmKHN0cnVjdCBpd2xfbXZtICptdm0sCisJCQkJCQlzdHJ1Y3QgaXdsX3J4X2NtZF9idWZmZXIgKnJ4YiwKKwkJCQkJCXN0cnVjdCBpd2xfZGV2aWNlX2NtZCAqY21kKTsKIGludCBpd2xfbXZtX2NvbmZpZ19zY2hlZF9zY2FuKHN0cnVjdCBpd2xfbXZtICptdm0sCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJICAgICAgc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqcmVxLApAQCAtMTA5MSw5ICsxMTQ5LDcgQEAKIAogLyogcmF0ZSBzY2FsaW5nICovCiBpbnQgaXdsX212bV9zZW5kX2xxX2NtZChzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgaXdsX2xxX2NtZCAqbHEsIGJvb2wgaW5pdCk7Ci12b2lkIGl3bF9tdm1fdXBkYXRlX2ZyYW1lX3N0YXRzKHN0cnVjdCBpd2xfbXZtICptdm0sCi0JCQkJc3RydWN0IGl3bF9tdm1fZnJhbWVfc3RhdHMgKnN0YXRzLAotCQkJCXUzMiByYXRlLCBib29sIGFnZyk7Cit2b2lkIGl3bF9tdm1fdXBkYXRlX2ZyYW1lX3N0YXRzKHN0cnVjdCBpd2xfbXZtICptdm0sIHUzMiByYXRlLCBib29sIGFnZyk7CiBpbnQgcnNfcHJldHR5X3ByaW50X3JhdGUoY2hhciAqYnVmLCBjb25zdCB1MzIgcmF0ZSk7CiB2b2lkIHJzX3VwZGF0ZV9sYXN0X3Jzc2koc3RydWN0IGl3bF9tdm0gKm12bSwKIAkJCSBzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhLApAQCAtMTE1OSw2ICsxMjE1LDggQEAKIGludCBpd2xfbXZtX3JlZl9zeW5jKHN0cnVjdCBpd2xfbXZtICptdm0sIGVudW0gaXdsX212bV9yZWZfdHlwZSByZWZfdHlwZSk7CiBib29sIGl3bF9tdm1fcmVmX3Rha2VuKHN0cnVjdCBpd2xfbXZtICptdm0pOwogdm9pZCBpd2xfbXZtX2QwaTNfZW5hYmxlX3R4KHN0cnVjdCBpd2xfbXZtICptdm0sIF9fbGUxNiAqcW9zX3NlcSk7CitpbnQgaXdsX212bV9lbnRlcl9kMGkzKHN0cnVjdCBpd2xfb3BfbW9kZSAqb3BfbW9kZSk7CitpbnQgaXdsX212bV9leGl0X2QwaTMoc3RydWN0IGl3bF9vcF9tb2RlICpvcF9tb2RlKTsKIGludCBfaXdsX212bV9leGl0X2QwaTMoc3RydWN0IGl3bF9tdm0gKm12bSk7CiAKIC8qIEJUIENvZXggKi8KQEAgLTEyNjAsMTEgKzEzMTgsMTMgQEAKIAogLyogaHcgc2NoZWR1bGVyIHF1ZXVlIGNvbmZpZyAqLwogdm9pZCBpd2xfbXZtX2VuYWJsZV90eHEoc3RydWN0IGl3bF9tdm0gKm12bSwgaW50IHF1ZXVlLCB1MTYgc3NuLAotCQkJY29uc3Qgc3RydWN0IGl3bF90cmFuc190eHFfc2NkX2NmZyAqY2ZnKTsKLXZvaWQgaXdsX212bV9kaXNhYmxlX3R4cShzdHJ1Y3QgaXdsX212bSAqbXZtLCBpbnQgcXVldWUpOworCQkJY29uc3Qgc3RydWN0IGl3bF90cmFuc190eHFfc2NkX2NmZyAqY2ZnLAorCQkJdW5zaWduZWQgaW50IHdkZ190aW1lb3V0KTsKK3ZvaWQgaXdsX212bV9kaXNhYmxlX3R4cShzdHJ1Y3QgaXdsX212bSAqbXZtLCBpbnQgcXVldWUsIHU4IGZsYWdzKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGl3bF9tdm1fZW5hYmxlX2FjX3R4cShzdHJ1Y3QgaXdsX212bSAqbXZtLCBpbnQgcXVldWUsCi0JCQkJCSB1OCBmaWZvKQorc3RhdGljIGlubGluZQordm9pZCBpd2xfbXZtX2VuYWJsZV9hY190eHEoc3RydWN0IGl3bF9tdm0gKm12bSwgaW50IHF1ZXVlLAorCQkJICAgdTggZmlmbywgdW5zaWduZWQgaW50IHdkZ190aW1lb3V0KQogewogCXN0cnVjdCBpd2xfdHJhbnNfdHhxX3NjZF9jZmcgY2ZnID0gewogCQkuZmlmbyA9IGZpZm8sCkBAIC0xMjczLDEyICsxMzMzLDEzIEBACiAJCS5mcmFtZV9saW1pdCA9IElXTF9GUkFNRV9MSU1JVCwKIAl9OwogCi0JaXdsX212bV9lbmFibGVfdHhxKG12bSwgcXVldWUsIDAsICZjZmcpOworCWl3bF9tdm1fZW5hYmxlX3R4cShtdm0sIHF1ZXVlLCAwLCAmY2ZnLCB3ZGdfdGltZW91dCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd2xfbXZtX2VuYWJsZV9hZ2dfdHhxKHN0cnVjdCBpd2xfbXZtICptdm0sIGludCBxdWV1ZSwKIAkJCQkJICBpbnQgZmlmbywgaW50IHN0YV9pZCwgaW50IHRpZCwKLQkJCQkJICBpbnQgZnJhbWVfbGltaXQsIHUxNiBzc24pCisJCQkJCSAgaW50IGZyYW1lX2xpbWl0LCB1MTYgc3NuLAorCQkJCQkgIHVuc2lnbmVkIGludCB3ZGdfdGltZW91dCkKIHsKIAlzdHJ1Y3QgaXdsX3RyYW5zX3R4cV9zY2RfY2ZnIGNmZyA9IHsKIAkJLmZpZm8gPSBmaWZvLApAQCAtMTI4OCw3ICsxMzQ5LDcgQEAKIAkJLmFnZ3JlZ2F0ZSA9IHRydWUsCiAJfTsKIAotCWl3bF9tdm1fZW5hYmxlX3R4cShtdm0sIHF1ZXVlLCBzc24sICZjZmcpOworCWl3bF9tdm1fZW5hYmxlX3R4cShtdm0sIHF1ZXVlLCBzc24sICZjZmcsIHdkZ190aW1lb3V0KTsKIH0KIAogLyogQXNzb2Mgc3RhdHVzICovCkBAIC0xMzQ0LDQgKzE0MDUsNyBAQAogdm9pZCBpd2xfbXZtX25pY19yZXN0YXJ0KHN0cnVjdCBpd2xfbXZtICptdm0sIGJvb2wgZndfZXJyb3IpOwogdm9pZCBpd2xfbXZtX2Z3X2Vycm9yX2R1bXAoc3RydWN0IGl3bF9tdm0gKm12bSk7CiAKK2ludCBpd2xfbXZtX3N0YXJ0X2Z3X2RiZ19jb25mKHN0cnVjdCBpd2xfbXZtICptdm0sIGVudW0gaXdsX2Z3X2RiZ19jb25mIGlkKTsKK3ZvaWQgaXdsX212bV9md19kYmdfY29sbGVjdChzdHJ1Y3QgaXdsX212bSAqbXZtKTsKKwogI2VuZGlmIC8qIF9fSVdMX01WTV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL252bS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbnZtLmMKaW5kZXggZDU1ZmQ4ZS4uNTM4MzQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbnZtLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vbnZtLmMKQEAgLTM1Niw3ICszNTYsNyBAQAogCQltYXhfc2VjdGlvbl9zaXplID0gSVdMX01BWF9OVk1fU0VDVElPTl9TSVpFOwogCWVsc2UgaWYgKENTUl9IV19SRVZfU1RFUChtdm0tPnRyYW5zLT5od19yZXYpID09IFNJTElDT05fQV9TVEVQKQogCQltYXhfc2VjdGlvbl9zaXplID0gSVdMX01BWF9OVk1fODAwMEFfU0VDVElPTl9TSVpFOwotCWVsc2UgLyogRmFtaWx5IDgwMDAgQi1zdGVwICovCisJZWxzZSAvKiBGYW1pbHkgODAwMCBCLXN0ZXAgb3IgQy1zdGVwICovCiAJCW1heF9zZWN0aW9uX3NpemUgPSBJV0xfTUFYX05WTV84MDAwQl9TRUNUSU9OX1NJWkU7CiAKIAkvKgpAQCAtNTY1LDYgKzU2NSw4IEBACiAJbXZtLT5udm1fZGF0YSA9IGl3bF9wYXJzZV9udm1fc2VjdGlvbnMobXZtKTsKIAlpZiAoIW12bS0+bnZtX2RhdGEpCiAJCXJldHVybiAtRU5PREFUQTsKKwlJV0xfREVCVUdfRUVQUk9NKG12bS0+dHJhbnMtPmRldiwgIm52bSB2ZXJzaW9uID0gJXhcbiIsCisJCQkgbXZtLT5udm1fZGF0YS0+bnZtX3ZlcnNpb24pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9vcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL29wcy5jCmluZGV4IDk3ZGZiYTUuLjJkZmZjMzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9vcHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9vcHMuYwpAQCAtODQsMTUgKzg0LDggQEAKICNpbmNsdWRlICJ0aW1lLWV2ZW50LmgiCiAjaW5jbHVkZSAiaXdsLWZ3LWVycm9yLWR1bXAuaCIKIAotLyoKLSAqIG1vZHVsZSBuYW1lLCBjb3B5cmlnaHQsIHZlcnNpb24sIGV0Yy4KLSAqLwogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JIlRoZSBuZXcgSW50ZWwoUikgd2lyZWxlc3MgQUdOIGRyaXZlciBmb3IgTGludXgiCi0KLSNkZWZpbmUgRFJWX1ZFUlNJT04gICAgIElXTFdJRklfVkVSU0lPTgotCiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTsKLU1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKIE1PRFVMRV9BVVRIT1IoRFJWX0NPUFlSSUdIVCAiICIgRFJWX0FVVEhPUik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTEwMCw2ICs5Myw3IEBACiAKIHN0cnVjdCBpd2xfbXZtX21vZF9wYXJhbXMgaXdsbXZtX21vZF9wYXJhbXMgPSB7CiAJLnBvd2VyX3NjaGVtZSA9IElXTF9QT1dFUl9TQ0hFTUVfQlBTLAorCS50ZmRfcV9oYW5nX2RldGVjdCA9IHRydWUKIAkvKiByZXN0IG9mIGZpZWxkcyBhcmUgMCBieSBkZWZhdWx0ICovCiB9OwogCkBAIC0xMDksNiArMTAzLDEwIEBACiBtb2R1bGVfcGFyYW1fbmFtZWQocG93ZXJfc2NoZW1lLCBpd2xtdm1fbW9kX3BhcmFtcy5wb3dlcl9zY2hlbWUsIGludCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKHBvd2VyX3NjaGVtZSwKIAkJICJwb3dlciBtYW5hZ2VtZW50IHNjaGVtZTogMS1hY3RpdmUsIDItYmFsYW5jZWQsIDMtbG93IHBvd2VyLCBkZWZhdWx0OiAyIik7Cittb2R1bGVfcGFyYW1fbmFtZWQodGZkX3FfaGFuZ19kZXRlY3QsIGl3bG12bV9tb2RfcGFyYW1zLnRmZF9xX2hhbmdfZGV0ZWN0LAorCQkgICBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0ModGZkX3FfaGFuZ19kZXRlY3QsCisJCSAiVEZEIHF1ZXVlcyBoYW5nIGRldGVjdGlvbiAoZGVmYXVsdDogdHJ1ZSIpOwogCiAvKgogICogbW9kdWxlIGluaXQgYW5kIGV4aXQgZnVuY3Rpb25zCkBAIC0xNDYsMTMgKzE0NCwxNCBAQAogCXN0cnVjdCBpd2xfbXZtICptdm0gPSBJV0xfT1BfTU9ERV9HRVRfTVZNKG9wX21vZGUpOwogCXU4IHJhZGlvX2NmZ190eXBlLCByYWRpb19jZmdfc3RlcCwgcmFkaW9fY2ZnX2Rhc2g7CiAJdTMyIHJlZ192YWwgPSAwOworCXUzMiBwaHlfY29uZmlnID0gaXdsX212bV9nZXRfcGh5X2NvbmZpZyhtdm0pOwogCi0JcmFkaW9fY2ZnX3R5cGUgPSAobXZtLT5mdy0+cGh5X2NvbmZpZyAmIEZXX1BIWV9DRkdfUkFESU9fVFlQRSkgPj4KLQkJCSAgRldfUEhZX0NGR19SQURJT19UWVBFX1BPUzsKLQlyYWRpb19jZmdfc3RlcCA9IChtdm0tPmZ3LT5waHlfY29uZmlnICYgRldfUEhZX0NGR19SQURJT19TVEVQKSA+PgotCQkJICBGV19QSFlfQ0ZHX1JBRElPX1NURVBfUE9TOwotCXJhZGlvX2NmZ19kYXNoID0gKG12bS0+ZnctPnBoeV9jb25maWcgJiBGV19QSFlfQ0ZHX1JBRElPX0RBU0gpID4+Ci0JCQkgIEZXX1BIWV9DRkdfUkFESU9fREFTSF9QT1M7CisJcmFkaW9fY2ZnX3R5cGUgPSAocGh5X2NvbmZpZyAmIEZXX1BIWV9DRkdfUkFESU9fVFlQRSkgPj4KKwkJCSBGV19QSFlfQ0ZHX1JBRElPX1RZUEVfUE9TOworCXJhZGlvX2NmZ19zdGVwID0gKHBoeV9jb25maWcgJiBGV19QSFlfQ0ZHX1JBRElPX1NURVApID4+CisJCQkgRldfUEhZX0NGR19SQURJT19TVEVQX1BPUzsKKwlyYWRpb19jZmdfZGFzaCA9IChwaHlfY29uZmlnICYgRldfUEhZX0NGR19SQURJT19EQVNIKSA+PgorCQkJIEZXX1BIWV9DRkdfUkFESU9fREFTSF9QT1M7CiAKIAkvKiBTS1UgY29udHJvbCAqLwogCXJlZ192YWwgfD0gQ1NSX0hXX1JFVl9TVEVQKG12bS0+dHJhbnMtPmh3X3JldikgPDwKQEAgLTI0MCw2ICsyMzksOCBAQAogCiAJUlhfSEFORExFUihTQ0FOX1JFUVVFU1RfQ01ELCBpd2xfbXZtX3J4X3NjYW5fcmVzcG9uc2UsIGZhbHNlKSwKIAlSWF9IQU5ETEVSKFNDQU5fQ09NUExFVEVfTk9USUZJQ0FUSU9OLCBpd2xfbXZtX3J4X3NjYW5fY29tcGxldGUsIHRydWUpLAorCVJYX0hBTkRMRVIoU0NBTl9JVEVSQVRJT05fQ09NUExFVEUsCisJCSAgIGl3bF9tdm1fcnhfc2Nhbl9vZmZsb2FkX2l0ZXJfY29tcGxldGVfbm90aWYsIGZhbHNlKSwKIAlSWF9IQU5ETEVSKFNDQU5fT0ZGTE9BRF9DT01QTEVURSwKIAkJICAgaXdsX212bV9yeF9zY2FuX29mZmxvYWRfY29tcGxldGVfbm90aWYsIHRydWUpLAogCVJYX0hBTkRMRVIoTUFUQ0hfRk9VTkRfTk9USUZJQ0FUSU9OLCBpd2xfbXZtX3J4X3NjYW5fb2ZmbG9hZF9yZXN1bHRzLApAQCAtMjc0LDYgKzI3NSw3IEBACiAJQ01EKE1HTVRfTUNBU1RfS0VZKSwKIAlDTUQoVFhfQ01EKSwKIAlDTUQoVFhQQVRIX0ZMVVNIKSwKKwlDTUQoU0hBUkVEX01FTV9DRkcpLAogCUNNRChNQUNfQ09OVEVYVF9DTUQpLAogCUNNRChUSU1FX0VWRU5UX0NNRCksCiAJQ01EKFRJTUVfRVZFTlRfTk9USUZJQ0FUSU9OKSwKQEAgLTQ3NiwxNyArNDc4LDE5IEBACiAJaWYgKG12bS0+ZnctPnVjb2RlX2NhcGEuZmxhZ3MgJiBJV0xfVUNPREVfVExWX0ZMQUdTX0RXX0JDX1RBQkxFKQogCQl0cmFuc19jZmcuYmNfdGFibGVfZHdvcmQgPSB0cnVlOwogCi0JaWYgKCFpd2x3aWZpX21vZF9wYXJhbXMud2RfZGlzYWJsZSkKLQkJdHJhbnNfY2ZnLnF1ZXVlX3dhdGNoZG9nX3RpbWVvdXQgPSBjZmctPmJhc2VfcGFyYW1zLT53ZF90aW1lb3V0OwotCWVsc2UKLQkJdHJhbnNfY2ZnLnF1ZXVlX3dhdGNoZG9nX3RpbWVvdXQgPSBJV0xfV0FUQ0hET0dfRElTQUJMRUQ7Ci0KIAl0cmFuc19jZmcuY29tbWFuZF9uYW1lcyA9IGl3bF9tdm1fY21kX3N0cmluZ3M7CiAKIAl0cmFuc19jZmcuY21kX3F1ZXVlID0gSVdMX01WTV9DTURfUVVFVUU7CiAJdHJhbnNfY2ZnLmNtZF9maWZvID0gSVdMX01WTV9UWF9GSUZPX0NNRDsKIAl0cmFuc19jZmcuc2NkX3NldF9hY3RpdmUgPSB0cnVlOwogCisJdHJhbnNfY2ZnLnNkaW9fYWRtYV9hZGRyID0gZnctPnNkaW9fYWRtYV9hZGRyOworCisJLyogU2V0IGEgc2hvcnQgd2F0Y2hkb2cgZm9yIHRoZSBjb21tYW5kIHF1ZXVlICovCisJdHJhbnNfY2ZnLmNtZF9xX3dkZ190aW1lb3V0ID0KKwkJaXdsbXZtX21vZF9wYXJhbXMudGZkX3FfaGFuZ19kZXRlY3QgPyBJV0xfREVGX1dEX1RJTUVPVVQgOgorCQkJCQkJICAgICAgSVdMX1dBVENIRE9HX0RJU0FCTEVEOworCiAJc25wcmludGYobXZtLT5ody0+d2lwaHktPmZ3X3ZlcnNpb24sCiAJCSBzaXplb2YobXZtLT5ody0+d2lwaHktPmZ3X3ZlcnNpb24pLAogCQkgIiVzIiwgZnctPmZ3X3ZlcnNpb24pOwpAQCAtNTE3LDEwICs1MjEsMTUgQEAKIAltaW5fYmFja29mZiA9IGNhbGNfbWluX2JhY2tvZmYodHJhbnMsIGNmZyk7CiAJaXdsX212bV90dF9pbml0aWFsaXplKG12bSwgbWluX2JhY2tvZmYpOwogCS8qIHNldCB0aGUgbnZtX2ZpbGVfbmFtZSBhY2NvcmRpbmcgdG8gcHJpb3JpdHkgKi8KLQlpZiAoaXdsd2lmaV9tb2RfcGFyYW1zLm52bV9maWxlKQorCWlmIChpd2x3aWZpX21vZF9wYXJhbXMubnZtX2ZpbGUpIHsKIAkJbXZtLT5udm1fZmlsZV9uYW1lID0gaXdsd2lmaV9tb2RfcGFyYW1zLm52bV9maWxlOwotCWVsc2UKLQkJbXZtLT5udm1fZmlsZV9uYW1lID0gbXZtLT5jZmctPmRlZmF1bHRfbnZtX2ZpbGU7CisJfSBlbHNlIHsKKwkJaWYgKCh0cmFucy0+Y2ZnLT5kZXZpY2VfZmFtaWx5ID09IElXTF9ERVZJQ0VfRkFNSUxZXzgwMDApICYmCisJCSAgICAoQ1NSX0hXX1JFVl9TVEVQKHRyYW5zLT5od19yZXYpID09IFNJTElDT05fQV9TVEVQKSkKKwkJCW12bS0+bnZtX2ZpbGVfbmFtZSA9IG12bS0+Y2ZnLT5kZWZhdWx0X252bV9maWxlXzgwMDBBOworCQllbHNlCisJCQltdm0tPm52bV9maWxlX25hbWUgPSBtdm0tPmNmZy0+ZGVmYXVsdF9udm1fZmlsZTsKKwl9CiAKIAlpZiAoV0FSTihjZmctPm5vX3Bvd2VyX3VwX25pY19pbl9pbml0ICYmICFtdm0tPm52bV9maWxlX25hbWUsCiAJCSAibm90IGFsbG93aW5nIHBvd2VyLXVwIGFuZCBub3QgaGF2aW5nIG52bV9maWxlXG4iKSkKQEAgLTU1OSw2ICs1NjgsOSBAQAogCWlmICghbXZtLT5zY2FuX2NtZCkKIAkJZ290byBvdXRfZnJlZTsKIAorCS8qIFNldCBFQlMgYXMgc3VjY2Vzc2Z1bCBhcyBsb25nIGFzIG5vdCBzdGF0ZWQgb3RoZXJ3aXNlIGJ5IHRoZSBGVy4gKi8KKwltdm0tPmxhc3RfZWJzX3N1Y2Nlc3NmdWwgPSB0cnVlOworCiAJZXJyID0gaXdsX212bV9tYWNfc2V0dXBfcmVnaXN0ZXIobXZtKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlOwpAQCAtODE3LDkgKzgyOSwyMCBAQAogCXN0cnVjdCBpd2xfbXZtICptdm0gPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGl3bF9tdm0sIGZ3X2Vycm9yX2R1bXBfd2spOwogCisJaWYgKGl3bF9tdm1fcmVmX3N5bmMobXZtLCBJV0xfTVZNX1JFRl9GV19EQkdfQ09MTEVDVCkpCisJCXJldHVybjsKKwogCW11dGV4X2xvY2soJm12bS0+bXV0ZXgpOwogCWl3bF9tdm1fZndfZXJyb3JfZHVtcChtdm0pOworCisJLyogc3RhcnQgcmVjb3JkaW5nIGFnYWluIGlmIHRoZSBmaXJtd2FyZSBpcyBub3QgY3Jhc2hlZCAqLworCVdBUk5fT05fT05DRSgoIXRlc3RfYml0KFNUQVRVU19GV19FUlJPUiwgJm12bS0+dHJhbnMtPnN0YXR1cykpICYmCisJCSAgICAgIG12bS0+ZnctPmRiZ19kZXN0X3RsdiAmJgorCQkgICAgICBpd2xfbXZtX3N0YXJ0X2Z3X2RiZ19jb25mKG12bSwgbXZtLT5md19kYmdfY29uZikpOworCiAJbXV0ZXhfdW5sb2NrKCZtdm0tPm11dGV4KTsKKworCWl3bF9tdm1fdW5yZWYobXZtLCBJV0xfTVZNX1JFRl9GV19EQkdfQ09MTEVDVCk7CiB9CiAKIHZvaWQgaXdsX212bV9uaWNfcmVzdGFydChzdHJ1Y3QgaXdsX212bSAqbXZtLCBib29sIGZ3X2Vycm9yKQpAQCAtODU1LDcgKzg3OCwxMCBAQAogCSAqIElmIFdvV0xBTiBmdyBhc3NlcnRlZCwgZG9uJ3QgcmVzdGFydCBlaXRoZXIsIG1hYzgwMjExCiAJICogY2FuJ3QgcmVjb3ZlciB0aGlzIHNpbmNlIHdlJ3JlIGFscmVhZHkgaGFsZiBzdXNwZW5kZWQuCiAJICovCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoSVdMX01WTV9TVEFUVVNfSU5fSFdfUkVTVEFSVCwgJm12bS0+c3RhdHVzKSkgeworCWlmICghbXZtLT5yZXN0YXJ0X2Z3ICYmIGZ3X2Vycm9yKSB7CisJCXNjaGVkdWxlX3dvcmsoJm12bS0+ZndfZXJyb3JfZHVtcF93ayk7CisJfSBlbHNlIGlmICh0ZXN0X2FuZF9zZXRfYml0KElXTF9NVk1fU1RBVFVTX0lOX0hXX1JFU1RBUlQsCisJCQkJICAgICZtdm0tPnN0YXR1cykpIHsKIAkJc3RydWN0IGl3bF9tdm1fcmVwcm9iZSAqcmVwcm9iZTsKIAogCQlJV0xfRVJSKG12bSwKQEAgLTg3OSwxNiArOTA1LDEzIEBACiAJCXJlcHJvYmUtPmRldiA9IG12bS0+dHJhbnMtPmRldjsKIAkJSU5JVF9XT1JLKCZyZXByb2JlLT53b3JrLCBpd2xfbXZtX3JlcHJvYmVfd2spOwogCQlzY2hlZHVsZV93b3JrKCZyZXByb2JlLT53b3JrKTsKLQl9IGVsc2UgaWYgKG12bS0+Y3VyX3Vjb2RlID09IElXTF9VQ09ERV9SRUdVTEFSICYmCi0JCSAgICghZndfZXJyb3IgfHwgbXZtLT5yZXN0YXJ0X2Z3KSkgeworCX0gZWxzZSBpZiAobXZtLT5jdXJfdWNvZGUgPT0gSVdMX1VDT0RFX1JFR1VMQVIpIHsKIAkJLyogZG9uJ3QgbGV0IHRoZSB0cmFuc3BvcnQvRlcgcG93ZXIgZG93biAqLwogCQlpd2xfbXZtX3JlZihtdm0sIElXTF9NVk1fUkVGX1VDT0RFX0RPV04pOwogCiAJCWlmIChmd19lcnJvciAmJiBtdm0tPnJlc3RhcnRfZncgPiAwKQogCQkJbXZtLT5yZXN0YXJ0X2Z3LS07CiAJCWllZWU4MDIxMV9yZXN0YXJ0X2h3KG12bS0+aHcpOwotCX0gZWxzZSBpZiAoZndfZXJyb3IpIHsKLQkJc2NoZWR1bGVfd29yaygmbXZtLT5md19lcnJvcl9kdW1wX3drKTsKIAl9CiB9CiAKQEAgLTEwMzEsNyArMTA1NCw4IEBACiBvdXQ6CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9Ci1zdGF0aWMgaW50IGl3bF9tdm1fZW50ZXJfZDBpMyhzdHJ1Y3QgaXdsX29wX21vZGUgKm9wX21vZGUpCisKK2ludCBpd2xfbXZtX2VudGVyX2QwaTMoc3RydWN0IGl3bF9vcF9tb2RlICpvcF9tb2RlKQogewogCXN0cnVjdCBpd2xfbXZtICptdm0gPSBJV0xfT1BfTU9ERV9HRVRfTVZNKG9wX21vZGUpOwogCXUzMiBmbGFncyA9IENNRF9BU1lOQyB8IENNRF9ISUdIX1BSSU8gfCBDTURfU0VORF9JTl9JRExFOwpAQCAtMTA0Nyw2ICsxMDcxLDcgQEAKIAl9OwogCXN0cnVjdCBpd2xfZDNfbWFuYWdlcl9jb25maWcgZDNfY2ZnX2NtZCA9IHsKIAkJLm1pbl9zbGVlcF90aW1lID0gY3B1X3RvX2xlMzIoMTAwMCksCisJCS53YWtldXBfZmxhZ3MgPSBjcHVfdG9fbGUzMihJV0xfV0FLRVVQX0QzX0NPTkZJR19GV19FUlJPUiksCiAJfTsKIAogCUlXTF9ERUJVR19SUE0obXZtLCAiTVZNIGVudGVyaW5nIEQwaTNcbiIpOwpAQCAtMTE0Niw3ICsxMTcxLDcgQEAKIAogCWlmIChtdm0tPmQwaTNfb2ZmbG9hZGluZyAmJiBxb3Nfc2VxKSB7CiAJCS8qIHVwZGF0ZSBxb3Mgc2VxIG51bWJlcnMgaWYgb2ZmbG9hZGluZyB3YXMgZW5hYmxlZCAqLwotCQltdm1fYXBfc3RhID0gKHN0cnVjdCBpd2xfbXZtX3N0YSAqKXN0YS0+ZHJ2X3ByaXY7CisJCW12bV9hcF9zdGEgPSBpd2xfbXZtX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7CiAJCWZvciAoaSA9IDA7IGkgPCBJV0xfTUFYX1RJRF9DT1VOVDsgaSsrKSB7CiAJCQl1MTYgc2VxID0gbGUxNl90b19jcHUocW9zX3NlcVtpXSk7CiAJCQkvKiBmaXJtd2FyZSBzdG9yZXMgbGFzdC11c2VkIG9uZSwgd2Ugc3RvcmUgbmV4dCBvbmUgKi8KQEAgLTEyNDUsNyArMTI3MCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpd2xfbXZtX2V4aXRfZDBpMyhzdHJ1Y3QgaXdsX29wX21vZGUgKm9wX21vZGUpCitpbnQgaXdsX212bV9leGl0X2QwaTMoc3RydWN0IGl3bF9vcF9tb2RlICpvcF9tb2RlKQogewogCXN0cnVjdCBpd2xfbXZtICptdm0gPSBJV0xfT1BfTU9ERV9HRVRfTVZNKG9wX21vZGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9waHktY3R4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vcGh5LWN0eHQuYwppbmRleCAxYzBkNGE0Li41YjQzNjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9waHktY3R4dC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3BoeS1jdHh0LmMKQEAgLTE3MCwxMyArMTcwLDEzIEBACiAJCWFjdGl2ZV9jbnQgPSAyOwogCX0KIAotCWNtZC0+cnhjaGFpbl9pbmZvID0gY3B1X3RvX2xlMzIobXZtLT5mdy0+dmFsaWRfcnhfYW50IDw8CisJY21kLT5yeGNoYWluX2luZm8gPSBjcHVfdG9fbGUzMihpd2xfbXZtX2dldF92YWxpZF9yeF9hbnQobXZtKSA8PAogCQkJCQlQSFlfUlhfQ0hBSU5fVkFMSURfUE9TKTsKIAljbWQtPnJ4Y2hhaW5faW5mbyB8PSBjcHVfdG9fbGUzMihpZGxlX2NudCA8PCBQSFlfUlhfQ0hBSU5fQ05UX1BPUyk7CiAJY21kLT5yeGNoYWluX2luZm8gfD0gY3B1X3RvX2xlMzIoYWN0aXZlX2NudCA8PAogCQkJCQkgUEhZX1JYX0NIQUlOX01JTU9fQ05UX1BPUyk7CiAKLQljbWQtPnR4Y2hhaW5faW5mbyA9IGNwdV90b19sZTMyKG12bS0+ZnctPnZhbGlkX3R4X2FudCk7CisJY21kLT50eGNoYWluX2luZm8gPSBjcHVfdG9fbGUzMihpd2xfbXZtX2dldF92YWxpZF90eF9hbnQobXZtKSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vcnMuYwppbmRleCAzMGNlYjY3Li4xOTRiZDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9ycy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3JzLmMKQEAgLTM5LDI4ICszOSwxNiBAQAogI2luY2x1ZGUgInN0YS5oIgogI2luY2x1ZGUgIml3bC1vcC1tb2RlLmgiCiAjaW5jbHVkZSAibXZtLmgiCisjaW5jbHVkZSAiZGVidWdmcy5oIgogCiAjZGVmaW5lIFJTX05BTUUgIml3bC1tdm0tcnMiCiAKLSNkZWZpbmUgTlVNX1RSWV9CRUZPUkVfQU5UX1RPR0dMRSAgICAgICAxCi0jZGVmaW5lIFJTX0xFR0FDWV9SRVRSSUVTX1BFUl9SQVRFICAgICAgMQotI2RlZmluZSBSU19IVF9WSFRfUkVUUklFU19QRVJfUkFURSAgICAgIDIKLSNkZWZpbmUgUlNfSFRfVkhUX1JFVFJJRVNfUEVSX1JBVEVfVFcgICAxCi0jZGVmaW5lIFJTX0lOSVRJQUxfTUlNT19OVU1fUkFURVMgICAgICAgMwotI2RlZmluZSBSU19JTklUSUFMX1NJU09fTlVNX1JBVEVTICAgICAgIDMKLSNkZWZpbmUgUlNfSU5JVElBTF9MRUdBQ1lfTlVNX1JBVEVTICAgICBMSU5LX1FVQUxfTUFYX1JFVFJZX05VTQotI2RlZmluZSBSU19TRUNPTkRBUllfTEVHQUNZX05VTV9SQVRFUyAgIExJTktfUVVBTF9NQVhfUkVUUllfTlVNCi0jZGVmaW5lIFJTX1NFQ09OREFSWV9TSVNPX05VTV9SQVRFUyAgICAgMwotI2RlZmluZSBSU19TRUNPTkRBUllfU0lTT19SRVRSSUVTICAgICAgIDEKLQogI2RlZmluZSBJV0xfUkFURV9NQVhfV0lORE9XCQk2MgkvKiAjIHR4IGluIGhpc3Rvcnkgd2luZG93ICovCi0jZGVmaW5lIElXTF9SQVRFX01JTl9GQUlMVVJFX1RICQkzCS8qIG1pbiBmYWlsdXJlcyB0byBjYWxjIHRwdCAqLwotI2RlZmluZSBJV0xfUkFURV9NSU5fU1VDQ0VTU19USAkJOAkvKiBtaW4gc3VjY2Vzc2VzIHRvIGNhbGMgdHB0ICovCiAKLS8qIG1heCBhbGxvd2VkIHJhdGUgbWlzcyBiZWZvcmUgc3luYyBMUSBjbWQgKi8KLSNkZWZpbmUgSVdMX01JU1NFRF9SQVRFX01BWAkJMTUKLSNkZWZpbmUgUlNfU1RBWV9JTl9DT0xVTU5fVElNRU9VVCAgICAgICAoNSpIWikKLSNkZWZpbmUgUlNfSURMRV9USU1FT1VUICAgICAgICAgICAgICAgICAoNSpIWikKKy8qIENhbGN1bGF0aW9ucyBvZiBzdWNjZXNzIHJhdGlvIGFyZSBkb25lIGluIGZpeGVkIHBvaW50IHdoZXJlIDEyODAwIGlzIDEwMCUuCisgKiBVc2UgdGhpcyBtYWNybyB3aGVuIGRlYWxpbmcgd2l0aCB0aHJlc2hvbGRzIGNvbnN0cyBzZXQgYXMgYSBwZXJjZW50YWdlCisgKi8KKyNkZWZpbmUgUlNfUEVSQ0VOVCh4KSAoMTI4ICogeCkKIAogc3RhdGljIHU4IHJzX2h0X3RvX2xlZ2FjeVtdID0gewogCVtJV0xfUkFURV9NQ1NfMF9JTkRFWF0gPSBJV0xfUkFURV82TV9JTkRFWCwKQEAgLTE3Myw3ICsxNjEsNyBAQAogCWlmIChzdGEtPnNtcHNfbW9kZSA9PSBJRUVFODAyMTFfU01QU19TVEFUSUMpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChudW1fb2ZfYW50KG12bS0+ZnctPnZhbGlkX3R4X2FudCkgPCAyKQorCWlmIChudW1fb2ZfYW50KGl3bF9tdm1fZ2V0X3ZhbGlkX3R4X2FudChtdm0pKSA8IDIpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmICghaXdsX212bV9idF9jb2V4X2lzX21pbW9fYWxsb3dlZChtdm0sIHN0YSkpCkBAIC02MTMsNyArNjAxLDggQEAKICAqIGF0IHRoaXMgcmF0ZS4gIHdpbmRvdy0+ZGF0YSBjb250YWlucyB0aGUgYml0bWFzayBvZiBzdWNjZXNzZnVsCiAgKiBwYWNrZXRzLgogICovCi1zdGF0aWMgaW50IF9yc19jb2xsZWN0X3R4X2RhdGEoc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyAqdGJsLAorc3RhdGljIGludCBfcnNfY29sbGVjdF90eF9kYXRhKHN0cnVjdCBpd2xfbXZtICptdm0sCisJCQkgICAgICAgc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyAqdGJsLAogCQkJICAgICAgIGludCBzY2FsZV9pbmRleCwgaW50IGF0dGVtcHRzLCBpbnQgc3VjY2Vzc2VzLAogCQkJICAgICAgIHN0cnVjdCBpd2xfcmF0ZV9zY2FsZV9kYXRhICp3aW5kb3cpCiB7CkBAIC02NjgsOCArNjU3LDggQEAKIAlmYWlsX2NvdW50ID0gd2luZG93LT5jb3VudGVyIC0gd2luZG93LT5zdWNjZXNzX2NvdW50ZXI7CiAKIAkvKiBDYWxjdWxhdGUgYXZlcmFnZSB0aHJvdWdocHV0LCBpZiB3ZSBoYXZlIGVub3VnaCBoaXN0b3J5LiAqLwotCWlmICgoZmFpbF9jb3VudCA+PSBJV0xfUkFURV9NSU5fRkFJTFVSRV9USCkgfHwKLQkgICAgKHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyID49IElXTF9SQVRFX01JTl9TVUNDRVNTX1RIKSkKKwlpZiAoKGZhaWxfY291bnQgPj0gSVdMX01WTV9SU19SQVRFX01JTl9GQUlMVVJFX1RIKSB8fAorCSAgICAod2luZG93LT5zdWNjZXNzX2NvdW50ZXIgPj0gSVdMX01WTV9SU19SQVRFX01JTl9TVUNDRVNTX1RIKSkKIAkJd2luZG93LT5hdmVyYWdlX3RwdCA9ICh3aW5kb3ctPnN1Y2Nlc3NfcmF0aW8gKiB0cHQgKyA2NCkgLyAxMjg7CiAJZWxzZQogCQl3aW5kb3ctPmF2ZXJhZ2VfdHB0ID0gSVdMX0lOVkFMSURfVkFMVUU7CkBAIC02NzcsNyArNjY2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByc19jb2xsZWN0X3R4X2RhdGEoc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSwKK3N0YXRpYyBpbnQgcnNfY29sbGVjdF90eF9kYXRhKHN0cnVjdCBpd2xfbXZtICptdm0sCisJCQkgICAgICBzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhLAogCQkJICAgICAgc3RydWN0IGl3bF9zY2FsZV90YmxfaW5mbyAqdGJsLAogCQkJICAgICAgaW50IHNjYWxlX2luZGV4LCBpbnQgYXR0ZW1wdHMsIGludCBzdWNjZXNzZXMsCiAJCQkgICAgICB1OCByZWR1Y2VkX3R4cCkKQEAgLTY5OCw3ICs2ODgsNyBAQAogCS8qIFNlbGVjdCB3aW5kb3cgZm9yIGN1cnJlbnQgdHggYml0IHJhdGUgKi8KIAl3aW5kb3cgPSAmKHRibC0+d2luW3NjYWxlX2luZGV4XSk7CiAKLQlyZXQgPSBfcnNfY29sbGVjdF90eF9kYXRhKHRibCwgc2NhbGVfaW5kZXgsIGF0dGVtcHRzLCBzdWNjZXNzZXMsCisJcmV0ID0gX3JzX2NvbGxlY3RfdHhfZGF0YShtdm0sIHRibCwgc2NhbGVfaW5kZXgsIGF0dGVtcHRzLCBzdWNjZXNzZXMsCiAJCQkJICB3aW5kb3cpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC03MDcsNyArNjk3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl3aW5kb3cgPSAmdGJsLT50cGNfd2luW3JlZHVjZWRfdHhwXTsKLQlyZXR1cm4gX3JzX2NvbGxlY3RfdHhfZGF0YSh0YmwsIHNjYWxlX2luZGV4LCBhdHRlbXB0cywgc3VjY2Vzc2VzLAorCXJldHVybiBfcnNfY29sbGVjdF90eF9kYXRhKG12bSwgdGJsLCBzY2FsZV9pbmRleCwgYXR0ZW1wdHMsIHN1Y2Nlc3NlcywKIAkJCQkgICB3aW5kb3cpOwogfQogCkBAIC05MjgsNyArOTE4LDYgQEAKIAkJCWJyZWFrOwogCQlpZiAocmF0ZV9tYXNrICYgKDEgPDwgbG93KSkKIAkJCWJyZWFrOwotCQlJV0xfREVCVUdfUkFURShtdm0sICJTa2lwcGluZyBtYXNrZWQgbG93ZXIgcmF0ZTogJWRcbiIsIGxvdyk7CiAJfQogCiAJaGlnaCA9IGluZGV4OwpAQCAtOTM4LDcgKzkyNyw2IEBACiAJCQlicmVhazsKIAkJaWYgKHJhdGVfbWFzayAmICgxIDw8IGhpZ2gpKQogCQkJYnJlYWs7Ci0JCUlXTF9ERUJVR19SQVRFKG12bSwgIlNraXBwaW5nIG1hc2tlZCBoaWdoZXIgcmF0ZTogJWRcbiIsIGhpZ2gpOwogCX0KIAogCXJldHVybiAoaGlnaCA8PCA4KSB8IGxvdzsKQEAgLTEwMDQsNyArOTkyLDcgQEAKIAl9CiAKIAlpZiAobnVtX29mX2FudChyYXRlLT5hbnQpID4gMSkKLQkJcmF0ZS0+YW50ID0gZmlyc3RfYW50ZW5uYShtdm0tPmZ3LT52YWxpZF90eF9hbnQpOworCQlyYXRlLT5hbnQgPSBmaXJzdF9hbnRlbm5hKGl3bF9tdm1fZ2V0X3ZhbGlkX3R4X2FudChtdm0pKTsKIAogCS8qIFJlbGV2YW50IGluIGJvdGggc3dpdGNoaW5nIHRvIFNJU08gb3IgTGVnYWN5ICovCiAJcmF0ZS0+c2dpID0gZmFsc2U7CkBAIC0xMTI1LDcgKzExMTMsOCBAQAogCX0KIAogCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsCi0JCSAgICAgICAodW5zaWduZWQgbG9uZykobHFfc3RhLT5sYXN0X3R4ICsgUlNfSURMRV9USU1FT1VUKSkpIHsKKwkJICAgICAgICh1bnNpZ25lZCBsb25nKShscV9zdGEtPmxhc3RfdHggKworCQkJCSAgICAgICAoSVdMX01WTV9SU19JRExFX1RJTUVPVVQgKiBIWikpKSkgewogCQlpbnQgdDsKIAogCQlJV0xfREVCVUdfUkFURShtdm0sICJUeCBpZGxlIGZvciB0b28gbG9uZy4gcmVpbml0IHJzXG4iKTsKQEAgLTExNTgsNyArMTE0Nyw3IEBACiAJCSAqIC4uLiBkcml2ZXIuCiAJCSAqLwogCQlscV9zdGEtPm1pc3NlZF9yYXRlX2NvdW50ZXIrKzsKLQkJaWYgKGxxX3N0YS0+bWlzc2VkX3JhdGVfY291bnRlciA+IElXTF9NSVNTRURfUkFURV9NQVgpIHsKKwkJaWYgKGxxX3N0YS0+bWlzc2VkX3JhdGVfY291bnRlciA+IElXTF9NVk1fUlNfTUlTU0VEX1JBVEVfTUFYKSB7CiAJCQlscV9zdGEtPm1pc3NlZF9yYXRlX2NvdW50ZXIgPSAwOwogCQkJSVdMX0RFQlVHX1JBVEUobXZtLAogCQkJCSAgICAgICAiVG9vIG1hbnkgcmF0ZXMgbWlzbWF0Y2guIFNlbmQgc3luYyBMUS4gcnNfc3RhdGUgJWRcbiIsCkBAIC0xMjEzLDcgKzEyMDIsNyBAQAogCiAJCXVjb2RlX3JhdGUgPSBsZTMyX3RvX2NwdSh0YWJsZS0+cnNfdGFibGVbMF0pOwogCQlyc19yYXRlX2Zyb21fdWNvZGVfcmF0ZSh1Y29kZV9yYXRlLCBpbmZvLT5iYW5kLCAmcmF0ZSk7Ci0JCXJzX2NvbGxlY3RfdHhfZGF0YShscV9zdGEsIGN1cnJfdGJsLCByYXRlLmluZGV4LAorCQlyc19jb2xsZWN0X3R4X2RhdGEobXZtLCBscV9zdGEsIGN1cnJfdGJsLCByYXRlLmluZGV4LAogCQkJCSAgIGluZm8tPnN0YXR1cy5hbXBkdV9sZW4sCiAJCQkJICAgaW5mby0+c3RhdHVzLmFtcGR1X2Fja19sZW4sCiAJCQkJICAgcmVkdWNlZF90eHApOwpAQCAtMTI0OSw3ICsxMjM4LDcgQEAKIAkJCWVsc2UKIAkJCQljb250aW51ZTsKIAotCQkJcnNfY29sbGVjdF90eF9kYXRhKGxxX3N0YSwgdG1wX3RibCwgcmF0ZS5pbmRleCwgMSwKKwkJCXJzX2NvbGxlY3RfdHhfZGF0YShtdm0sIGxxX3N0YSwgdG1wX3RibCwgcmF0ZS5pbmRleCwgMSwKIAkJCQkJICAgaSA8IHJldHJpZXMgPyAwIDogbGVnYWN5X3N1Y2Nlc3MsCiAJCQkJCSAgIHJlZHVjZWRfdHhwKTsKIAkJfQpAQCAtMTMwMywxMyArMTI5MiwxMyBAQAogCUlXTF9ERUJVR19SQVRFKG12bSwgIk1vdmluZyB0byBSU19TVEFURV9TVEFZX0lOX0NPTFVNTlxuIik7CiAJbHFfc3RhLT5yc19zdGF0ZSA9IFJTX1NUQVRFX1NUQVlfSU5fQ09MVU1OOwogCWlmIChpc19sZWdhY3kpIHsKLQkJbHFfc3RhLT50YWJsZV9jb3VudF9saW1pdCA9IElXTF9MRUdBQ1lfVEFCTEVfQ09VTlQ7Ci0JCWxxX3N0YS0+bWF4X2ZhaWx1cmVfbGltaXQgPSBJV0xfTEVHQUNZX0ZBSUxVUkVfTElNSVQ7Ci0JCWxxX3N0YS0+bWF4X3N1Y2Nlc3NfbGltaXQgPSBJV0xfTEVHQUNZX1NVQ0NFU1NfTElNSVQ7CisJCWxxX3N0YS0+dGFibGVfY291bnRfbGltaXQgPSBJV0xfTVZNX1JTX0xFR0FDWV9UQUJMRV9DT1VOVDsKKwkJbHFfc3RhLT5tYXhfZmFpbHVyZV9saW1pdCA9IElXTF9NVk1fUlNfTEVHQUNZX0ZBSUxVUkVfTElNSVQ7CisJCWxxX3N0YS0+bWF4X3N1Y2Nlc3NfbGltaXQgPSBJV0xfTVZNX1JTX0xFR0FDWV9TVUNDRVNTX0xJTUlUOwogCX0gZWxzZSB7Ci0JCWxxX3N0YS0+dGFibGVfY291bnRfbGltaXQgPSBJV0xfTk9ORV9MRUdBQ1lfVEFCTEVfQ09VTlQ7Ci0JCWxxX3N0YS0+bWF4X2ZhaWx1cmVfbGltaXQgPSBJV0xfTk9ORV9MRUdBQ1lfRkFJTFVSRV9MSU1JVDsKLQkJbHFfc3RhLT5tYXhfc3VjY2Vzc19saW1pdCA9IElXTF9OT05FX0xFR0FDWV9TVUNDRVNTX0xJTUlUOworCQlscV9zdGEtPnRhYmxlX2NvdW50X2xpbWl0ID0gSVdMX01WTV9SU19OT05fTEVHQUNZX1RBQkxFX0NPVU5UOworCQlscV9zdGEtPm1heF9mYWlsdXJlX2xpbWl0ID0gSVdMX01WTV9SU19OT05fTEVHQUNZX0ZBSUxVUkVfTElNSVQ7CisJCWxxX3N0YS0+bWF4X3N1Y2Nlc3NfbGltaXQgPSBJV0xfTVZNX1JTX05PTl9MRUdBQ1lfU1VDQ0VTU19MSU1JVDsKIAl9CiAJbHFfc3RhLT50YWJsZV9jb3VudCA9IDA7CiAJbHFfc3RhLT50b3RhbF9mYWlsZWQgPSAwOwpAQCAtMTMxOCw2ICsxMzA3LDEzIEBACiAJbHFfc3RhLT52aXNpdGVkX2NvbHVtbnMgPSAwOwogfQogCitzdGF0aWMgaW5saW5lIGludCByc19nZXRfbWF4X3JhdGVfZnJvbV9tYXNrKHVuc2lnbmVkIGxvbmcgcmF0ZV9tYXNrKQoreworCWlmIChyYXRlX21hc2spCisJCXJldHVybiBmaW5kX2xhc3RfYml0KCZyYXRlX21hc2ssIEJJVFNfUEVSX0xPTkcpOworCXJldHVybiBJV0xfUkFURV9JTlZBTElEOworfQorCiBzdGF0aWMgaW50IHJzX2dldF9tYXhfYWxsb3dlZF9yYXRlKHN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEsCiAJCQkJICAgY29uc3Qgc3RydWN0IHJzX3R4X2NvbHVtbiAqY29sdW1uKQogewpAQCAtMTQyMCw3ICsxNDE2LDcgQEAKIAl1MzIgdGFyZ2V0X3RwdDsKIAlpbnQgcmF0ZV9pZHg7CiAKLQlpZiAoc3VjY2Vzc19yYXRpbyA+IFJTX1NSX05PX0RFQ1JFQVNFKSB7CisJaWYgKHN1Y2Nlc3NfcmF0aW8gPiBJV0xfTVZNX1JTX1NSX05PX0RFQ1JFQVNFKSB7CiAJCXRhcmdldF90cHQgPSAxMDAgKiBleHBlY3RlZF9jdXJyZW50X3RwdDsKIAkJSVdMX0RFQlVHX1JBVEUobXZtLAogCQkJICAgICAgICJTUiAlZCBoaWdoLiBGaW5kIHJhdGUgZXhjZWVkaW5nIEVYUEVDVEVEX0NVUlJFTlQgJWRcbiIsCkBAIC0xNDg4LDcgKzE0ODQsNyBAQAogCQkJZmx1c2hfaW50ZXJ2YWxfcGFzc2VkID0KIAkJCQl0aW1lX2FmdGVyKGppZmZpZXMsCiAJCQkJCSAgICh1bnNpZ25lZCBsb25nKShscV9zdGEtPmZsdXNoX3RpbWVyICsKLQkJCQkJCVJTX1NUQVlfSU5fQ09MVU1OX1RJTUVPVVQpKTsKKwkJCQkJCQkgICAoSVdMX01WTV9SU19TVEFZX0lOX0NPTFVNTl9USU1FT1VUICogSFopKSk7CiAKIAkJLyoKIAkJICogQ2hlY2sgaWYgd2Ugc2hvdWxkIGFsbG93IHNlYXJjaCBmb3IgbmV3IG1vZHVsYXRpb24gbW9kZS4KQEAgLTE1NjcsNyArMTU2Myw3IEBACiAJY29uc3Qgc3RydWN0IHJzX3R4X2NvbHVtbiAqY3Vycl9jb2wgPSAmcnNfdHhfY29sdW1uc1t0YmwtPmNvbHVtbl07CiAJY29uc3Qgc3RydWN0IHJzX3R4X2NvbHVtbiAqbmV4dF9jb2w7CiAJYWxsb3dfY29sdW1uX2Z1bmNfdCBhbGxvd19mdW5jOwotCXU4IHZhbGlkX2FudHMgPSBtdm0tPmZ3LT52YWxpZF90eF9hbnQ7CisJdTggdmFsaWRfYW50cyA9IGl3bF9tdm1fZ2V0X3ZhbGlkX3R4X2FudChtdm0pOwogCWNvbnN0IHUxNiAqZXhwZWN0ZWRfdHB0X3RibDsKIAl1MTYgdHB0LCBtYXhfZXhwZWN0ZWRfdHB0OwogCkBAIC0xNjEzLDggKzE2MDksMTIgQEAKIAkJCWNvbnRpbnVlOwogCiAJCW1heF9yYXRlID0gcnNfZ2V0X21heF9hbGxvd2VkX3JhdGUobHFfc3RhLCBuZXh0X2NvbCk7Ci0JCWlmIChXQVJOX09OX09OQ0UobWF4X3JhdGUgPT0gSVdMX1JBVEVfSU5WQUxJRCkpCisJCWlmIChtYXhfcmF0ZSA9PSBJV0xfUkFURV9JTlZBTElEKSB7CisJCQlJV0xfREVCVUdfUkFURShtdm0sCisJCQkJICAgICAgICJTa2lwIGNvbHVtbiAlZDogbm8gcmF0ZSBpcyBhbGxvd2VkIGluIHRoaXMgY29sdW1uXG4iLAorCQkJCSAgICAgICBuZXh0X2NvbF9pZCk7CiAJCQljb250aW51ZTsKKwkJfQogCiAJCW1heF9leHBlY3RlZF90cHQgPSBleHBlY3RlZF90cHRfdGJsW21heF9yYXRlXTsKIAkJaWYgKHRwdCA+PSBtYXhfZXhwZWN0ZWRfdHB0KSB7CkBAIC0xNzI0LDcgKzE3MjQsOCBAQAogewogCWVudW0gcnNfYWN0aW9uIGFjdGlvbiA9IFJTX0FDVElPTl9TVEFZOwogCi0JaWYgKChzciA8PSBSU19TUl9GT1JDRV9ERUNSRUFTRSkgfHwgKGN1cnJlbnRfdHB0ID09IDApKSB7CisJaWYgKChzciA8PSBSU19QRVJDRU5UKElXTF9NVk1fUlNfU1JfRk9SQ0VfREVDUkVBU0UpKSB8fAorCSAgICAoY3VycmVudF90cHQgPT0gMCkpIHsKIAkJSVdMX0RFQlVHX1JBVEUobXZtLAogCQkJICAgICAgICJEZWNyZWFzZSByYXRlIGJlY2F1c2Ugb2YgbG93IFNSXG4iKTsKIAkJcmV0dXJuIFJTX0FDVElPTl9ET1dOU0NBTEU7CkBAIC0xNzgzLDcgKzE3ODQsNyBAQAogCiBvdXQ6CiAJaWYgKChhY3Rpb24gPT0gUlNfQUNUSU9OX0RPV05TQ0FMRSkgJiYgKGxvdyAhPSBJV0xfUkFURV9JTlZBTElEKSkgewotCQlpZiAoc3IgPj0gUlNfU1JfTk9fREVDUkVBU0UpIHsKKwkJaWYgKHNyID49IFJTX1BFUkNFTlQoSVdMX01WTV9SU19TUl9OT19ERUNSRUFTRSkpIHsKIAkJCUlXTF9ERUJVR19SQVRFKG12bSwKIAkJCQkgICAgICAgIlNSIGlzIGFib3ZlIE5PIERFQ1JFQVNFLiBBdm9pZCBkb3duc2NhbGVcbiIpOwogCQkJYWN0aW9uID0gUlNfQUNUSU9OX1NUQVk7CkBAIC0xODAyLDE4ICsxODAzLDEwIEBACiBzdGF0aWMgYm9vbCByc19zdGJjX2FsbG93KHN0cnVjdCBpd2xfbXZtICptdm0sIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgIHN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEpCiB7Ci0Jc3RydWN0IGl3bF9tdm1fc3RhICptdm1zdGEgPSBpd2xfbXZtX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9IG12bXN0YS0+dmlmOwotCWJvb2wgc3RhX3BzX2Rpc2FibGVkID0gKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JCQkJIXZpZi0+YnNzX2NvbmYucHMpOwotCiAJLyogT3VyIGNoaXAgc3VwcG9ydHMgVHggU1RCQyBhbmQgdGhlIHBlZXIgaXMgYW4gSFQvVkhUIFNUQSB3aGljaAogCSAqIHN1cHBvcnRzIFNUQkMgb2YgYXQgbGVhc3QgMSpTUwogCSAqLwotCWlmICghbHFfc3RhLT5zdGJjKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoIW12bS0+cHNfZGlzYWJsZWQgJiYgIXN0YV9wc19kaXNhYmxlZCkKKwlpZiAoIWxxX3N0YS0+c3RiY19jYXBhYmxlKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoIWl3bF9tdm1fYnRfY29leF9pc19taW1vX2FsbG93ZWQobXZtLCBzdGEpKQpAQCAtMTgyNSwxMSArMTgxOCwxMSBAQAogc3RhdGljIHZvaWQgcnNfZ2V0X2FkamFjZW50X3R4cChzdHJ1Y3QgaXdsX212bSAqbXZtLCBpbnQgaW5kZXgsCiAJCQkJaW50ICp3ZWFrZXIsIGludCAqc3Ryb25nZXIpCiB7Ci0JKndlYWtlciA9IGluZGV4ICsgVFBDX1RYX1BPV0VSX1NURVA7CisJKndlYWtlciA9IGluZGV4ICsgSVdMX01WTV9SU19UUENfVFhfUE9XRVJfU1RFUDsKIAlpZiAoKndlYWtlciA+IFRQQ19NQVhfUkVEVUNUSU9OKQogCQkqd2Vha2VyID0gVFBDX0lOVkFMSUQ7CiAKLQkqc3Ryb25nZXIgPSBpbmRleCAtIFRQQ19UWF9QT1dFUl9TVEVQOworCSpzdHJvbmdlciA9IGluZGV4IC0gSVdMX01WTV9SU19UUENfVFhfUE9XRVJfU1RFUDsKIAlpZiAoKnN0cm9uZ2VyIDwgMCkKIAkJKnN0cm9uZ2VyID0gVFBDX0lOVkFMSUQ7CiB9CkBAIC0xODg1LDcgKzE4NzgsOCBAQAogCX0KIAogCS8qIFRvbyBtYW55IGZhaWx1cmVzLCBpbmNyZWFzZSB0eHAgKi8KLQlpZiAoc3IgPD0gVFBDX1NSX0ZPUkNFX0lOQ1JFQVNFIHx8IGN1cnJlbnRfdHB0ID09IDApIHsKKwlpZiAoc3IgPD0gUlNfUEVSQ0VOVChJV0xfTVZNX1JTX1RQQ19TUl9GT1JDRV9JTkNSRUFTRSkgfHwKKwkgICAgY3VycmVudF90cHQgPT0gMCkgewogCQlJV0xfREVCVUdfUkFURShtdm0sICJpbmNyZWFzZSB0eHAgYmVjYXVzZSBvZiB3ZWFrIFNSXG4iKTsKIAkJcmV0dXJuIFRQQ19BQ1RJT05fTk9fUkVTVElSQ1RJT047CiAJfQpAQCAtMTkwOCw3ICsxOTAyLDggQEAKIAl9CiAKIAkvKiBuZXh0LCBpbmNyZWFzZSBpZiBuZWVkZWQgKi8KLQlpZiAoc3IgPCBUUENfU1JfTk9fSU5DUkVBU0UgJiYgc3Ryb25nICE9IFRQQ19JTlZBTElEKSB7CisJaWYgKHNyIDwgUlNfUEVSQ0VOVChJV0xfTVZNX1JTX1RQQ19TUl9OT19JTkNSRUFTRSkgJiYKKwkgICAgc3Ryb25nICE9IFRQQ19JTlZBTElEKSB7CiAJCWlmICh3ZWFrX3RwdCA9PSBJV0xfSU5WQUxJRF9WQUxVRSAmJgogCQkgICAgc3Ryb25nX3RwdCAhPSBJV0xfSU5WQUxJRF9WQUxVRSAmJgogCQkgICAgY3VycmVudF90cHQgPCBzdHJvbmdfdHB0KSB7CkBAIC0xOTM1LDcgKzE5MzAsNyBAQAogCQkJICAgc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSwKIAkJCSAgIHN0cnVjdCBpd2xfc2NhbGVfdGJsX2luZm8gKnRibCkKIHsKLQlzdHJ1Y3QgaXdsX212bV9zdGEgKm12bV9zdGEgPSAodm9pZCAqKXN0YS0+ZHJ2X3ByaXY7CisJc3RydWN0IGl3bF9tdm1fc3RhICptdm1fc3RhID0gaXdsX212bV9zdGFfZnJvbV9tYWM4MDIxMShzdGEpOwogCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYgPSBtdm1fc3RhLT52aWY7CiAJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNoYW5jdHhfY29uZjsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CkBAIC0yMDQ0LDcgKzIwMzksNyBAQAogCXUxNiBoaWdoX2xvdzsKIAlzMzIgc3I7CiAJdTggcHJldl9hZ2cgPSBscV9zdGEtPmlzX2FnZzsKLQlzdHJ1Y3QgaXdsX212bV9zdGEgKnN0YV9wcml2ID0gKHZvaWQgKilzdGEtPmRydl9wcml2OworCXN0cnVjdCBpd2xfbXZtX3N0YSAqc3RhX3ByaXYgPSBpd2xfbXZtX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7CiAJc3RydWN0IGl3bF9tdm1fdGlkX2RhdGEgKnRpZF9kYXRhOwogCXN0cnVjdCByc19yYXRlICpyYXRlOwogCkBAIC0yMTA2LDggKzIxMDEsOCBAQAogCSAqIGluIGN1cnJlbnQgYXNzb2NpYXRpb24gKHVzZSBuZXcgcmF0ZSBmb3VuZCBhYm92ZSkuCiAJICovCiAJZmFpbF9jb3VudCA9IHdpbmRvdy0+Y291bnRlciAtIHdpbmRvdy0+c3VjY2Vzc19jb3VudGVyOwotCWlmICgoZmFpbF9jb3VudCA8IElXTF9SQVRFX01JTl9GQUlMVVJFX1RIKSAmJgotCSAgICAod2luZG93LT5zdWNjZXNzX2NvdW50ZXIgPCBJV0xfUkFURV9NSU5fU1VDQ0VTU19USCkpIHsKKwlpZiAoKGZhaWxfY291bnQgPCBJV0xfTVZNX1JTX1JBVEVfTUlOX0ZBSUxVUkVfVEgpICYmCisJICAgICh3aW5kb3ctPnN1Y2Nlc3NfY291bnRlciA8IElXTF9NVk1fUlNfUkFURV9NSU5fU1VDQ0VTU19USCkpIHsKIAkJSVdMX0RFQlVHX1JBVEUobXZtLAogCQkJICAgICAgICIoJXM6ICVkKTogVGVzdCBXaW5kb3c6IHN1Y2MgJWQgdG90YWwgJWRcbiIsCiAJCQkgICAgICAgcnNfcHJldHR5X2xxX3R5cGUocmF0ZS0+dHlwZSksCkBAIC0yMzg1LDcgKzIzODAsNyBAQAogCWludCBpLCBuZW50cmllczsKIAlzOCBiZXN0X3Jzc2kgPSBTOF9NSU47CiAJdTggYmVzdF9hbnQgPSBBTlRfTk9ORTsKLQl1OCB2YWxpZF90eF9hbnQgPSBtdm0tPmZ3LT52YWxpZF90eF9hbnQ7CisJdTggdmFsaWRfdHhfYW50ID0gaXdsX212bV9nZXRfdmFsaWRfdHhfYW50KG12bSk7CiAJY29uc3Qgc3RydWN0IHJzX2luaXRfcmF0ZV9pbmZvICppbml0aWFsX3JhdGVzOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobHFfc3RhLT5wZXJzLmNoYWluX3NpZ25hbCk7IGkrKykgewpAQCAtMjUzMCw3ICsyNTI1LDcgQEAKIHN0YXRpYyB2b2lkICpyc19hbGxvY19zdGEodm9pZCAqbXZtX3JhdGUsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgIGdmcF90IGdmcCkKIHsKLQlzdHJ1Y3QgaXdsX212bV9zdGEgKnN0YV9wcml2ID0gKHN0cnVjdCBpd2xfbXZtX3N0YSAqKXN0YS0+ZHJ2X3ByaXY7CisJc3RydWN0IGl3bF9tdm1fc3RhICpzdGFfcHJpdiA9IGl3bF9tdm1fc3RhX2Zyb21fbWFjODAyMTEoc3RhKTsKIAlzdHJ1Y3QgaXdsX29wX21vZGUgKm9wX21vZGUgPSAoc3RydWN0IGl3bF9vcF9tb2RlICopbXZtX3JhdGU7CiAJc3RydWN0IGl3bF9tdm0gKm12bSAgPSBJV0xfT1BfTU9ERV9HRVRfTVZNKG9wX21vZGUpOwogCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSAmc3RhX3ByaXYtPmxxX3N0YTsKQEAgLTI2MDYsNjggKzI2MDEsMTIxIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCByc19odF9pbml0KHN0cnVjdCBpd2xfbXZtICptdm0sCisJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkgICAgICAgc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfY2FwKQoreworCS8qIGFjdGl2ZV9zaXNvX3JhdGUgbWFzayBpbmNsdWRlcyA5IE1CaXRzIChiaXQgNSksCisJICogYW5kIENDSyAoYml0cyAwLTMpLCBzdXBwX3JhdGVzW10gZG9lcyBub3Q7CisJICogc2hpZnQgdG8gY29udmVydCBmb3JtYXQsIGZvcmNlIDkgTUJpdHMgb2ZmLgorCSAqLworCWxxX3N0YS0+YWN0aXZlX3Npc29fcmF0ZSA9IGh0X2NhcC0+bWNzLnJ4X21hc2tbMF0gPDwgMTsKKwlscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUgfD0gaHRfY2FwLT5tY3MucnhfbWFza1swXSAmIDB4MTsKKwlscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUgJj0gfigodTE2KTB4Mik7CisJbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlIDw8PSBJV0xfRklSU1RfT0ZETV9SQVRFOworCisJbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZSA9IGh0X2NhcC0+bWNzLnJ4X21hc2tbMV0gPDwgMTsKKwlscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlIHw9IGh0X2NhcC0+bWNzLnJ4X21hc2tbMV0gJiAweDE7CisJbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZSAmPSB+KCh1MTYpMHgyKTsKKwlscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlIDw8PSBJV0xfRklSU1RfT0ZETV9SQVRFOworCisJaWYgKG12bS0+Y2ZnLT5odF9wYXJhbXMtPmxkcGMgJiYKKwkgICAgKGh0X2NhcC0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF9MRFBDX0NPRElORykpCisJCWxxX3N0YS0+bGRwYyA9IHRydWU7CisKKwlpZiAobXZtLT5jZmctPmh0X3BhcmFtcy0+c3RiYyAmJgorCSAgICAobnVtX29mX2FudChpd2xfbXZtX2dldF92YWxpZF90eF9hbnQobXZtKSkgPiAxKSAmJgorCSAgICAoaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1JYX1NUQkMpKQorCQlscV9zdGEtPnN0YmNfY2FwYWJsZSA9IHRydWU7CisKKwlscV9zdGEtPmlzX3ZodCA9IGZhbHNlOworfQorCitzdGF0aWMgdm9pZCByc192aHRfaW5pdChzdHJ1Y3QgaXdsX212bSAqbXZtLAorCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEsCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YV92aHRfY2FwICp2aHRfY2FwKQoreworCXJzX3ZodF9zZXRfZW5hYmxlZF9yYXRlcyhzdGEsIHZodF9jYXAsIGxxX3N0YSk7CisKKwlpZiAobXZtLT5jZmctPmh0X3BhcmFtcy0+bGRwYyAmJgorCSAgICAodmh0X2NhcC0+Y2FwICYgSUVFRTgwMjExX1ZIVF9DQVBfUlhMRFBDKSkKKwkJbHFfc3RhLT5sZHBjID0gdHJ1ZTsKKworCWlmIChtdm0tPmNmZy0+aHRfcGFyYW1zLT5zdGJjICYmCisJICAgIChudW1fb2ZfYW50KGl3bF9tdm1fZ2V0X3ZhbGlkX3R4X2FudChtdm0pKSA+IDEpICYmCisJICAgICh2aHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfVkhUX0NBUF9SWFNUQkNfTUFTSykpCisJCWxxX3N0YS0+c3RiY19jYXBhYmxlID0gdHJ1ZTsKKworCWlmICgobXZtLT5mdy0+dWNvZGVfY2FwYS5jYXBhWzBdICYgSVdMX1VDT0RFX1RMVl9DQVBBX0JFQU1GT1JNRVIpICYmCisJICAgIChudW1fb2ZfYW50KGl3bF9tdm1fZ2V0X3ZhbGlkX3R4X2FudChtdm0pKSA+IDEpICYmCisJICAgICh2aHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfVkhUX0NBUF9TVV9CRUFNRk9STUVFX0NBUEFCTEUpKQorCQlscV9zdGEtPmJmZXJfY2FwYWJsZSA9IHRydWU7CisKKwlscV9zdGEtPmlzX3ZodCA9IHRydWU7Cit9CisKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTCi1zdGF0aWMgdm9pZCBpd2xfbXZtX3Jlc2V0X2ZyYW1lX3N0YXRzKHN0cnVjdCBpd2xfbXZtICptdm0sCi0JCQkJICAgICAgc3RydWN0IGl3bF9tdm1fZnJhbWVfc3RhdHMgKnN0YXRzKQorc3RhdGljIHZvaWQgaXdsX212bV9yZXNldF9mcmFtZV9zdGF0cyhzdHJ1Y3QgaXdsX212bSAqbXZtKQogewogCXNwaW5fbG9ja19iaCgmbXZtLT5kcnZfc3RhdHNfbG9jayk7Ci0JbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoKnN0YXRzKSk7CisJbWVtc2V0KCZtdm0tPmRydl9yeF9zdGF0cywgMCwgc2l6ZW9mKG12bS0+ZHJ2X3J4X3N0YXRzKSk7CiAJc3Bpbl91bmxvY2tfYmgoJm12bS0+ZHJ2X3N0YXRzX2xvY2spOwogfQogCi12b2lkIGl3bF9tdm1fdXBkYXRlX2ZyYW1lX3N0YXRzKHN0cnVjdCBpd2xfbXZtICptdm0sCi0JCQkJc3RydWN0IGl3bF9tdm1fZnJhbWVfc3RhdHMgKnN0YXRzLAotCQkJCXUzMiByYXRlLCBib29sIGFnZykKK3ZvaWQgaXdsX212bV91cGRhdGVfZnJhbWVfc3RhdHMoc3RydWN0IGl3bF9tdm0gKm12bSwgdTMyIHJhdGUsIGJvb2wgYWdnKQogewogCXU4IG5zcyA9IDAsIG1jcyA9IDA7CiAKIAlzcGluX2xvY2soJm12bS0+ZHJ2X3N0YXRzX2xvY2spOwogCiAJaWYgKGFnZykKLQkJc3RhdHMtPmFnZ19mcmFtZXMrKzsKKwkJbXZtLT5kcnZfcnhfc3RhdHMuYWdnX2ZyYW1lcysrOwogCi0Jc3RhdHMtPnN1Y2Nlc3NfZnJhbWVzKys7CisJbXZtLT5kcnZfcnhfc3RhdHMuc3VjY2Vzc19mcmFtZXMrKzsKIAogCXN3aXRjaCAocmF0ZSAmIFJBVEVfTUNTX0NIQU5fV0lEVEhfTVNLKSB7CiAJY2FzZSBSQVRFX01DU19DSEFOX1dJRFRIXzIwOgotCQlzdGF0cy0+YndfMjBfZnJhbWVzKys7CisJCW12bS0+ZHJ2X3J4X3N0YXRzLmJ3XzIwX2ZyYW1lcysrOwogCQlicmVhazsKIAljYXNlIFJBVEVfTUNTX0NIQU5fV0lEVEhfNDA6Ci0JCXN0YXRzLT5id180MF9mcmFtZXMrKzsKKwkJbXZtLT5kcnZfcnhfc3RhdHMuYndfNDBfZnJhbWVzKys7CiAJCWJyZWFrOwogCWNhc2UgUkFURV9NQ1NfQ0hBTl9XSURUSF84MDoKLQkJc3RhdHMtPmJ3XzgwX2ZyYW1lcysrOworCQltdm0tPmRydl9yeF9zdGF0cy5id184MF9mcmFtZXMrKzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTkNFKDEsICJiYWQgQlcuIHJhdGUgMHgleCIsIHJhdGUpOwogCX0KIAogCWlmIChyYXRlICYgUkFURV9NQ1NfSFRfTVNLKSB7Ci0JCXN0YXRzLT5odF9mcmFtZXMrKzsKKwkJbXZtLT5kcnZfcnhfc3RhdHMuaHRfZnJhbWVzKys7CiAJCW1jcyA9IHJhdGUgJiBSQVRFX0hUX01DU19SQVRFX0NPREVfTVNLOwogCQluc3MgPSAoKHJhdGUgJiBSQVRFX0hUX01DU19OU1NfTVNLKSA+PiBSQVRFX0hUX01DU19OU1NfUE9TKSArIDE7CiAJfSBlbHNlIGlmIChyYXRlICYgUkFURV9NQ1NfVkhUX01TSykgewotCQlzdGF0cy0+dmh0X2ZyYW1lcysrOworCQltdm0tPmRydl9yeF9zdGF0cy52aHRfZnJhbWVzKys7CiAJCW1jcyA9IHJhdGUgJiBSQVRFX1ZIVF9NQ1NfUkFURV9DT0RFX01TSzsKIAkJbnNzID0gKChyYXRlICYgUkFURV9WSFRfTUNTX05TU19NU0spID4+CiAJCSAgICAgICBSQVRFX1ZIVF9NQ1NfTlNTX1BPUykgKyAxOwogCX0gZWxzZSB7Ci0JCXN0YXRzLT5sZWdhY3lfZnJhbWVzKys7CisJCW12bS0+ZHJ2X3J4X3N0YXRzLmxlZ2FjeV9mcmFtZXMrKzsKIAl9CiAKIAlpZiAobnNzID09IDEpCi0JCXN0YXRzLT5zaXNvX2ZyYW1lcysrOworCQltdm0tPmRydl9yeF9zdGF0cy5zaXNvX2ZyYW1lcysrOwogCWVsc2UgaWYgKG5zcyA9PSAyKQotCQlzdGF0cy0+bWltbzJfZnJhbWVzKys7CisJCW12bS0+ZHJ2X3J4X3N0YXRzLm1pbW8yX2ZyYW1lcysrOwogCiAJaWYgKHJhdGUgJiBSQVRFX01DU19TR0lfTVNLKQotCQlzdGF0cy0+c2dpX2ZyYW1lcysrOworCQltdm0tPmRydl9yeF9zdGF0cy5zZ2lfZnJhbWVzKys7CiAJZWxzZQotCQlzdGF0cy0+bmdpX2ZyYW1lcysrOworCQltdm0tPmRydl9yeF9zdGF0cy5uZ2lfZnJhbWVzKys7CiAKLQlzdGF0cy0+bGFzdF9yYXRlc1tzdGF0cy0+bGFzdF9mcmFtZV9pZHhdID0gcmF0ZTsKLQlzdGF0cy0+bGFzdF9mcmFtZV9pZHggPSAoc3RhdHMtPmxhc3RfZnJhbWVfaWR4ICsgMSkgJQotCQlBUlJBWV9TSVpFKHN0YXRzLT5sYXN0X3JhdGVzKTsKKwltdm0tPmRydl9yeF9zdGF0cy5sYXN0X3JhdGVzW212bS0+ZHJ2X3J4X3N0YXRzLmxhc3RfZnJhbWVfaWR4XSA9IHJhdGU7CisJbXZtLT5kcnZfcnhfc3RhdHMubGFzdF9mcmFtZV9pZHggPQorCQkobXZtLT5kcnZfcnhfc3RhdHMubGFzdF9mcmFtZV9pZHggKyAxKSAlCisJCQlBUlJBWV9TSVpFKG12bS0+ZHJ2X3J4X3N0YXRzLmxhc3RfcmF0ZXMpOwogCiAJc3Bpbl91bmxvY2soJm12bS0+ZHJ2X3N0YXRzX2xvY2spOwogfQpAQCAtMjY4MywxNCArMjczMSwxMSBAQAogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gbXZtLT5odzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcCA9ICZzdGEtPmh0X2NhcDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YV92aHRfY2FwICp2aHRfY2FwID0gJnN0YS0+dmh0X2NhcDsKLQlzdHJ1Y3QgaXdsX212bV9zdGEgKnN0YV9wcml2OwotCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGE7CisJc3RydWN0IGl3bF9tdm1fc3RhICpzdGFfcHJpdiA9IGl3bF9tdm1fc3RhX2Zyb21fbWFjODAyMTEoc3RhKTsKKwlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gJnN0YV9wcml2LT5scV9zdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJdW5zaWduZWQgbG9uZyBzdXBwOyAvKiBtdXN0IGJlIHVuc2lnbmVkIGxvbmcgZm9yIGZvcl9lYWNoX3NldF9iaXQgKi8KIAotCXN0YV9wcml2ID0gKHN0cnVjdCBpd2xfbXZtX3N0YSAqKXN0YS0+ZHJ2X3ByaXY7Ci0JbHFfc3RhID0gJnN0YV9wcml2LT5scV9zdGE7Ci0KIAkvKiBjbGVhciBhbGwgbm9uLXBlcnNpc3RlbnQgbHEgZGF0YSAqLwogCW1lbXNldChscV9zdGEsIDAsIG9mZnNldG9mKHR5cGVvZigqbHFfc3RhKSwgcGVycykpOwogCkBAIC0yNzEyLDcgKzI3NTcsNyBAQAogCSAqIHByZXZpb3VzIHBhY2tldHM/IE5lZWQgdG8gaGF2ZSBJRUVFIDgwMi4xWCBhdXRoIHN1Y2NlZWQgaW1tZWRpYXRlbHkKIAkgKiBhZnRlciBhc3NvYy4uICovCiAKLQlscV9zdGEtPm1pc3NlZF9yYXRlX2NvdW50ZXIgPSBJV0xfTUlTU0VEX1JBVEVfTUFYOworCWxxX3N0YS0+bWlzc2VkX3JhdGVfY291bnRlciA9IElXTF9NVk1fUlNfTUlTU0VEX1JBVEVfTUFYOwogCWxxX3N0YS0+YmFuZCA9IHNiYW5kLT5iYW5kOwogCS8qCiAJICogYWN0aXZlIGxlZ2FjeSByYXRlcyBhcyBwZXIgc3VwcG9ydGVkIHJhdGVzIGJpdG1hcApAQCAtMjcyMyw2MSArMjc2OCwyOCBAQAogCQlscV9zdGEtPmFjdGl2ZV9sZWdhY3lfcmF0ZSB8PSBCSVQoc2JhbmQtPmJpdHJhdGVzW2ldLmh3X3ZhbHVlKTsKIAogCS8qIFRPRE86IHNob3VsZCBwcm9iYWJseSBhY2NvdW50IGZvciByeF9oaWdoZXN0IGZvciBib3RoIEhUL1ZIVCAqLwotCWlmICghdmh0X2NhcCB8fCAhdmh0X2NhcC0+dmh0X3N1cHBvcnRlZCkgewotCQkvKiBhY3RpdmVfc2lzb19yYXRlIG1hc2sgaW5jbHVkZXMgOSBNQml0cyAoYml0IDUpLAotCQkgKiBhbmQgQ0NLIChiaXRzIDAtMyksIHN1cHBfcmF0ZXNbXSBkb2VzIG5vdDsKLQkJICogc2hpZnQgdG8gY29udmVydCBmb3JtYXQsIGZvcmNlIDkgTUJpdHMgb2ZmLgotCQkgKi8KLQkJbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlID0gaHRfY2FwLT5tY3MucnhfbWFza1swXSA8PCAxOwotCQlscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUgfD0gaHRfY2FwLT5tY3MucnhfbWFza1swXSAmIDB4MTsKLQkJbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlICY9IH4oKHUxNikweDIpOwotCQlscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUgPDw9IElXTF9GSVJTVF9PRkRNX1JBVEU7CisJaWYgKCF2aHRfY2FwIHx8ICF2aHRfY2FwLT52aHRfc3VwcG9ydGVkKQorCQlyc19odF9pbml0KG12bSwgc3RhLCBscV9zdGEsIGh0X2NhcCk7CisJZWxzZQorCQlyc192aHRfaW5pdChtdm0sIHN0YSwgbHFfc3RhLCB2aHRfY2FwKTsKIAotCQkvKiBTYW1lIGhlcmUgKi8KLQkJbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZSA9IGh0X2NhcC0+bWNzLnJ4X21hc2tbMV0gPDwgMTsKLQkJbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZSB8PSBodF9jYXAtPm1jcy5yeF9tYXNrWzFdICYgMHgxOwotCQlscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlICY9IH4oKHUxNikweDIpOwotCQlscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlIDw8PSBJV0xfRklSU1RfT0ZETV9SQVRFOwotCi0JCWxxX3N0YS0+aXNfdmh0ID0gZmFsc2U7Ci0JCWlmIChtdm0tPmNmZy0+aHRfcGFyYW1zLT5sZHBjICYmCi0JCSAgICAoaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX0xEUENfQ09ESU5HKSkKLQkJCWxxX3N0YS0+bGRwYyA9IHRydWU7Ci0KLQkJaWYgKG12bS0+Y2ZnLT5odF9wYXJhbXMtPnN0YmMgJiYKLQkJICAgIChudW1fb2ZfYW50KG12bS0+ZnctPnZhbGlkX3R4X2FudCkgPiAxKSAmJgotCQkgICAgKGh0X2NhcC0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF9SWF9TVEJDKSkKLQkJCWxxX3N0YS0+c3RiYyA9IHRydWU7Ci0JfSBlbHNlIHsKLQkJcnNfdmh0X3NldF9lbmFibGVkX3JhdGVzKHN0YSwgdmh0X2NhcCwgbHFfc3RhKTsKLQkJbHFfc3RhLT5pc192aHQgPSB0cnVlOwotCi0JCWlmIChtdm0tPmNmZy0+aHRfcGFyYW1zLT5sZHBjICYmCi0JCSAgICAodmh0X2NhcC0+Y2FwICYgSUVFRTgwMjExX1ZIVF9DQVBfUlhMRFBDKSkKLQkJCWxxX3N0YS0+bGRwYyA9IHRydWU7Ci0KLQkJaWYgKG12bS0+Y2ZnLT5odF9wYXJhbXMtPnN0YmMgJiYKLQkJICAgIChudW1fb2ZfYW50KG12bS0+ZnctPnZhbGlkX3R4X2FudCkgPiAxKSAmJgotCQkgICAgKHZodF9jYXAtPmNhcCAmIElFRUU4MDIxMV9WSFRfQ0FQX1JYU1RCQ19NQVNLKSkKLQkJCWxxX3N0YS0+c3RiYyA9IHRydWU7Ci0JfQotCi0JaWYgKElXTF9NVk1fUlNfRElTQUJMRV9NSU1PKQorCWlmIChJV0xfTVZNX1JTX0RJU0FCTEVfUDJQX01JTU8gJiYgc3RhX3ByaXYtPnZpZi0+cDJwKQogCQlscV9zdGEtPmFjdGl2ZV9taW1vMl9yYXRlID0gMDsKIAotCWxxX3N0YS0+bWF4X2xlZ2FjeV9yYXRlX2lkeCA9IGZpbmRfbGFzdF9iaXQoJmxxX3N0YS0+YWN0aXZlX2xlZ2FjeV9yYXRlLAotCQkJCQkJICAgIEJJVFNfUEVSX0xPTkcpOwotCWxxX3N0YS0+bWF4X3Npc29fcmF0ZV9pZHggPSBmaW5kX2xhc3RfYml0KCZscV9zdGEtPmFjdGl2ZV9zaXNvX3JhdGUsCi0JCQkJCQkgIEJJVFNfUEVSX0xPTkcpOwotCWxxX3N0YS0+bWF4X21pbW8yX3JhdGVfaWR4ID0gZmluZF9sYXN0X2JpdCgmbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZSwKLQkJCQkJCSAgIEJJVFNfUEVSX0xPTkcpOworCWxxX3N0YS0+bWF4X2xlZ2FjeV9yYXRlX2lkeCA9CisJCXJzX2dldF9tYXhfcmF0ZV9mcm9tX21hc2sobHFfc3RhLT5hY3RpdmVfbGVnYWN5X3JhdGUpOworCWxxX3N0YS0+bWF4X3Npc29fcmF0ZV9pZHggPQorCQlyc19nZXRfbWF4X3JhdGVfZnJvbV9tYXNrKGxxX3N0YS0+YWN0aXZlX3Npc29fcmF0ZSk7CisJbHFfc3RhLT5tYXhfbWltbzJfcmF0ZV9pZHggPQorCQlyc19nZXRfbWF4X3JhdGVfZnJvbV9tYXNrKGxxX3N0YS0+YWN0aXZlX21pbW8yX3JhdGUpOwogCiAJSVdMX0RFQlVHX1JBVEUobXZtLAotCQkgICAgICAgIlJBVEUgTUFTSzogTEVHQUNZPSVsWCBTSVNPPSVsWCBNSU1PMj0lbFggVkhUPSVkIExEUEM9JWQgU1RCQyVkXG4iLAorCQkgICAgICAgIkxFR0FDWT0lbFggU0lTTz0lbFggTUlNTzI9JWxYIFZIVD0lZCBMRFBDPSVkIFNUQkM9JWQgQkZFUj0lZFxuIiwKIAkJICAgICAgIGxxX3N0YS0+YWN0aXZlX2xlZ2FjeV9yYXRlLAogCQkgICAgICAgbHFfc3RhLT5hY3RpdmVfc2lzb19yYXRlLAogCQkgICAgICAgbHFfc3RhLT5hY3RpdmVfbWltbzJfcmF0ZSwKLQkJICAgICAgIGxxX3N0YS0+aXNfdmh0LCBscV9zdGEtPmxkcGMsIGxxX3N0YS0+c3RiYyk7CisJCSAgICAgICBscV9zdGEtPmlzX3ZodCwgbHFfc3RhLT5sZHBjLCBscV9zdGEtPnN0YmNfY2FwYWJsZSwKKwkJICAgICAgIGxxX3N0YS0+YmZlcl9jYXBhYmxlKTsKIAlJV0xfREVCVUdfUkFURShtdm0sICJNQVggUkFURTogTEVHQUNZPSVkIFNJU089JWQgTUlNTzI9JWRcbiIsCiAJCSAgICAgICBscV9zdGEtPm1heF9sZWdhY3lfcmF0ZV9pZHgsCiAJCSAgICAgICBscV9zdGEtPm1heF9zaXNvX3JhdGVfaWR4LApAQCAtMjc4NSwxNCArMjc5NywxNCBAQAogCiAJLyogVGhlc2UgdmFsdWVzIHdpbGwgYmUgb3ZlcnJpZGRlbiBsYXRlciAqLwogCWxxX3N0YS0+bHEuc2luZ2xlX3N0cmVhbV9hbnRfbXNrID0KLQkJZmlyc3RfYW50ZW5uYShtdm0tPmZ3LT52YWxpZF90eF9hbnQpOworCQlmaXJzdF9hbnRlbm5hKGl3bF9tdm1fZ2V0X3ZhbGlkX3R4X2FudChtdm0pKTsKIAlscV9zdGEtPmxxLmR1YWxfc3RyZWFtX2FudF9tc2sgPSBBTlRfQUI7CiAKIAkvKiBhcyBkZWZhdWx0IGFsbG93IGFnZ3JlZ2F0aW9uIGZvciBhbGwgdGlkcyAqLwogCWxxX3N0YS0+dHhfYWdnX3RpZF9lbiA9IElXTF9BR0dfQUxMX1RJRDsKIAlscV9zdGEtPmlzX2FnZyA9IDA7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUwotCWl3bF9tdm1fcmVzZXRfZnJhbWVfc3RhdHMobXZtLCAmbXZtLT5kcnZfcnhfc3RhdHMpOworCWl3bF9tdm1fcmVzZXRfZnJhbWVfc3RhdHMobXZtKTsKICNlbmRpZgogCXJzX2luaXRpYWxpemVfbHEobXZtLCBzdGEsIGxxX3N0YSwgYmFuZCwgaW5pdCk7CiB9CkBAIC0yODYxLDEyICsyODczLDEzIEBACiAJaW50IGluZGV4ID0gKnJzX3RhYmxlX2luZGV4OwogCiAJZm9yIChpID0gMDsgaSA8IG51bV9yYXRlcyAmJiBpbmRleCA8IGVuZDsgaSsrKSB7Ci0JCXVjb2RlX3JhdGUgPSBjcHVfdG9fbGUzMih1Y29kZV9yYXRlX2Zyb21fcnNfcmF0ZShtdm0sIHJhdGUpKTsKLQkJZm9yIChqID0gMDsgaiA8IG51bV9yZXRyaWVzICYmIGluZGV4IDwgZW5kOyBqKyssIGluZGV4KyspCisJCWZvciAoaiA9IDA7IGogPCBudW1fcmV0cmllcyAmJiBpbmRleCA8IGVuZDsgaisrLCBpbmRleCsrKSB7CisJCQl1Y29kZV9yYXRlID0gY3B1X3RvX2xlMzIodWNvZGVfcmF0ZV9mcm9tX3JzX3JhdGUobXZtLAorCQkJCQkJCQkJIHJhdGUpKTsKIAkJCXJzX3RhYmxlW2luZGV4XSA9IHVjb2RlX3JhdGU7Ci0KLQkJaWYgKHRvZ2dsZV9hbnQpCi0JCQlyc190b2dnbGVfYW50ZW5uYSh2YWxpZF90eF9hbnQsIHJhdGUpOworCQkJaWYgKHRvZ2dsZV9hbnQpCisJCQkJcnNfdG9nZ2xlX2FudGVubmEodmFsaWRfdHhfYW50LCByYXRlKTsKKwkJfQogCiAJCXByZXZfcmF0ZV9pZHggPSByYXRlLT5pbmRleDsKIAkJYm90dG9tX3JlYWNoZWQgPSByc19nZXRfbG93ZXJfcmF0ZV9pbl9jb2x1bW4obHFfc3RhLCByYXRlKTsKQEAgLTI4NzQsNyArMjg4Nyw3IEBACiAJCQlicmVhazsKIAl9CiAKLQlpZiAoIWJvdHRvbV9yZWFjaGVkKQorCWlmICghYm90dG9tX3JlYWNoZWQgJiYgIWlzX2xlZ2FjeShyYXRlKSkKIAkJcmF0ZS0+aW5kZXggPSBwcmV2X3JhdGVfaWR4OwogCiAJKnJzX3RhYmxlX2luZGV4ID0gaW5kZXg7CkBAIC0yOTEzLDE4ICsyOTI2LDIyIEBACiAKIAltZW1jcHkoJnJhdGUsIGluaXRpYWxfcmF0ZSwgc2l6ZW9mKHJhdGUpKTsKIAotCXZhbGlkX3R4X2FudCA9IG12bS0+ZnctPnZhbGlkX3R4X2FudDsKLQlyYXRlLnN0YmMgPSByc19zdGJjX2FsbG93KG12bSwgc3RhLCBscV9zdGEpOworCXZhbGlkX3R4X2FudCA9IGl3bF9tdm1fZ2V0X3ZhbGlkX3R4X2FudChtdm0pOworCisJLyogVE9ETzogcmVtb3ZlIG9sZCBBUEkgd2hlbiBtaW4gRlcgQVBJIGhpdHMgMTQgKi8KKwlpZiAoIShtdm0tPmZ3LT51Y29kZV9jYXBhLmFwaVswXSAmIElXTF9VQ09ERV9UTFZfQVBJX0xRX1NTX1BBUkFNUykgJiYKKwkgICAgcnNfc3RiY19hbGxvdyhtdm0sIHN0YSwgbHFfc3RhKSkKKwkJcmF0ZS5zdGJjID0gdHJ1ZTsKIAogCWlmIChpc19zaXNvKCZyYXRlKSkgewotCQludW1fcmF0ZXMgPSBSU19JTklUSUFMX1NJU09fTlVNX1JBVEVTOwotCQludW1fcmV0cmllcyA9IFJTX0hUX1ZIVF9SRVRSSUVTX1BFUl9SQVRFOworCQludW1fcmF0ZXMgPSBJV0xfTVZNX1JTX0lOSVRJQUxfU0lTT19OVU1fUkFURVM7CisJCW51bV9yZXRyaWVzID0gSVdMX01WTV9SU19IVF9WSFRfUkVUUklFU19QRVJfUkFURTsKIAl9IGVsc2UgaWYgKGlzX21pbW8oJnJhdGUpKSB7Ci0JCW51bV9yYXRlcyA9IFJTX0lOSVRJQUxfTUlNT19OVU1fUkFURVM7Ci0JCW51bV9yZXRyaWVzID0gUlNfSFRfVkhUX1JFVFJJRVNfUEVSX1JBVEU7CisJCW51bV9yYXRlcyA9IElXTF9NVk1fUlNfSU5JVElBTF9NSU1PX05VTV9SQVRFUzsKKwkJbnVtX3JldHJpZXMgPSBJV0xfTVZNX1JTX0hUX1ZIVF9SRVRSSUVTX1BFUl9SQVRFOwogCX0gZWxzZSB7Ci0JCW51bV9yYXRlcyA9IFJTX0lOSVRJQUxfTEVHQUNZX05VTV9SQVRFUzsKLQkJbnVtX3JldHJpZXMgPSBSU19MRUdBQ1lfUkVUUklFU19QRVJfUkFURTsKKwkJbnVtX3JhdGVzID0gSVdMX01WTV9SU19JTklUSUFMX0xFR0FDWV9OVU1fUkFURVM7CisJCW51bV9yZXRyaWVzID0gSVdMX01WTV9SU19JTklUSUFMX0xFR0FDWV9SRVRSSUVTOwogCQl0b2dnbGVfYW50ID0gdHJ1ZTsKIAl9CiAKQEAgLTI5MzUsMTIgKzI5NTIsMTIgQEAKIAlyc19nZXRfbG93ZXJfcmF0ZV9kb3duX2NvbHVtbihscV9zdGEsICZyYXRlKTsKIAogCWlmIChpc19zaXNvKCZyYXRlKSkgewotCQludW1fcmF0ZXMgPSBSU19TRUNPTkRBUllfU0lTT19OVU1fUkFURVM7Ci0JCW51bV9yZXRyaWVzID0gUlNfU0VDT05EQVJZX1NJU09fUkVUUklFUzsKKwkJbnVtX3JhdGVzID0gSVdMX01WTV9SU19TRUNPTkRBUllfU0lTT19OVU1fUkFURVM7CisJCW51bV9yZXRyaWVzID0gSVdMX01WTV9SU19TRUNPTkRBUllfU0lTT19SRVRSSUVTOwogCQlscV9jbWQtPm1pbW9fZGVsaW0gPSBpbmRleDsKIAl9IGVsc2UgaWYgKGlzX2xlZ2FjeSgmcmF0ZSkpIHsKLQkJbnVtX3JhdGVzID0gUlNfU0VDT05EQVJZX0xFR0FDWV9OVU1fUkFURVM7Ci0JCW51bV9yZXRyaWVzID0gUlNfTEVHQUNZX1JFVFJJRVNfUEVSX1JBVEU7CisJCW51bV9yYXRlcyA9IElXTF9NVk1fUlNfU0VDT05EQVJZX0xFR0FDWV9OVU1fUkFURVM7CisJCW51bV9yZXRyaWVzID0gSVdMX01WTV9SU19TRUNPTkRBUllfTEVHQUNZX1JFVFJJRVM7CiAJfSBlbHNlIHsKIAkJV0FSTl9PTl9PTkNFKDEpOwogCX0KQEAgLTI5NTMsOCArMjk3MCw4IEBACiAKIAlyc19nZXRfbG93ZXJfcmF0ZV9kb3duX2NvbHVtbihscV9zdGEsICZyYXRlKTsKIAotCW51bV9yYXRlcyA9IFJTX1NFQ09OREFSWV9MRUdBQ1lfTlVNX1JBVEVTOwotCW51bV9yZXRyaWVzID0gUlNfTEVHQUNZX1JFVFJJRVNfUEVSX1JBVEU7CisJbnVtX3JhdGVzID0gSVdMX01WTV9SU19TRUNPTkRBUllfTEVHQUNZX05VTV9SQVRFUzsKKwludW1fcmV0cmllcyA9IElXTF9NVk1fUlNfU0VDT05EQVJZX0xFR0FDWV9SRVRSSUVTOwogCiAJcnNfZmlsbF9yYXRlc19mb3JfY29sdW1uKG12bSwgbHFfc3RhLCAmcmF0ZSwgbHFfY21kLT5yc190YWJsZSwgJmluZGV4LAogCQkJCSBudW1fcmF0ZXMsIG51bV9yZXRyaWVzLCB2YWxpZF90eF9hbnQsCkBAIC0yOTYyLDYgKzI5NzksMTQyIEBACiAKIH0KIAorc3RydWN0IHJzX2JmZXJfYWN0aXZlX2l0ZXJfZGF0YSB7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKmV4Y2x1ZGVfc3RhOworCXN0cnVjdCBpd2xfbXZtX3N0YSAqYmZlcl9tdm1zdGE7Cit9OworCitzdGF0aWMgdm9pZCByc19iZmVyX2FjdGl2ZV9pdGVyKHZvaWQgKl9kYXRhLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IHJzX2JmZXJfYWN0aXZlX2l0ZXJfZGF0YSAqZGF0YSA9IF9kYXRhOworCXN0cnVjdCBpd2xfbXZtX3N0YSAqbXZtc3RhID0gaXdsX212bV9zdGFfZnJvbV9tYWM4MDIxMShzdGEpOworCXN0cnVjdCBpd2xfbHFfY21kICpscV9jbWQgPSAmbXZtc3RhLT5scV9zdGEubHE7CisJdTMyIHNzX3BhcmFtcyA9IGxlMzJfdG9fY3B1KGxxX2NtZC0+c3NfcGFyYW1zKTsKKworCWlmIChzdGEgPT0gZGF0YS0+ZXhjbHVkZV9zdGEpCisJCXJldHVybjsKKworCS8qIFRoZSBjdXJyZW50IHN0YSBoYXMgQkZFUiBhbGxvd2VkICovCisJaWYgKHNzX3BhcmFtcyAmIExRX1NTX0JGRVJfQUxMT1dFRCkgeworCQlXQVJOX09OX09OQ0UoZGF0YS0+YmZlcl9tdm1zdGEgIT0gTlVMTCk7CisKKwkJZGF0YS0+YmZlcl9tdm1zdGEgPSBtdm1zdGE7CisJfQorfQorCitzdGF0aWMgaW50IHJzX2JmZXJfcHJpb3JpdHkoc3RydWN0IGl3bF9tdm1fc3RhICpzdGEpCit7CisJaW50IHByaW8gPSAtMTsKKwllbnVtIG5sODAyMTFfaWZ0eXBlIHZpZnR5cGUgPSBpZWVlODAyMTFfdmlmX3R5cGVfcDJwKHN0YS0+dmlmKTsKKworCXN3aXRjaCAodmlmdHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086CisJCXByaW8gPSAzOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6CisJCXByaW8gPSAyOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJCXByaW8gPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOX09OQ0UodHJ1ZSwgInZpZnR5cGUgJWQgc3RhX2lkICVkIiwgdmlmdHlwZSwgc3RhLT5zdGFfaWQpOworCQlwcmlvID0gLTE7CisJfQorCisJcmV0dXJuIHByaW87Cit9CisKKy8qIFJldHVybnMgPjAgaWYgc3RhMSBoYXMgYSBoaWdoZXIgQkZFUiBwcmlvcml0eSBjb21wYXJlZCB0byBzdGEyICovCitzdGF0aWMgaW50IHJzX2JmZXJfcHJpb3JpdHlfY21wKHN0cnVjdCBpd2xfbXZtX3N0YSAqc3RhMSwKKwkJCQlzdHJ1Y3QgaXdsX212bV9zdGEgKnN0YTIpCit7CisJaW50IHByaW8xID0gcnNfYmZlcl9wcmlvcml0eShzdGExKTsKKwlpbnQgcHJpbzIgPSByc19iZmVyX3ByaW9yaXR5KHN0YTIpOworCisJaWYgKHByaW8xID4gcHJpbzIpCisJCXJldHVybiAxOworCWlmIChwcmlvMSA8IHByaW8yKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJzX3NldF9scV9zc19wYXJhbXMoc3RydWN0IGl3bF9tdm0gKm12bSwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEsCisJCQkJY29uc3Qgc3RydWN0IHJzX3JhdGUgKmluaXRpYWxfcmF0ZSkKK3sKKwlzdHJ1Y3QgaXdsX2xxX2NtZCAqbHFfY21kID0gJmxxX3N0YS0+bHE7CisJc3RydWN0IGl3bF9tdm1fc3RhICptdm1zdGEgPSBpd2xfbXZtX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7CisJc3RydWN0IHJzX2JmZXJfYWN0aXZlX2l0ZXJfZGF0YSBkYXRhID0geworCQkuZXhjbHVkZV9zdGEgPSBzdGEsCisJCS5iZmVyX212bXN0YSA9IE5VTEwsCisJfTsKKwlzdHJ1Y3QgaXdsX212bV9zdGEgKmJmZXJfbXZtc3RhID0gTlVMTDsKKwl1MzIgc3NfcGFyYW1zID0gTFFfU1NfUEFSQU1TX1ZBTElEOworCisJaWYgKCFpd2xfbXZtX2J0X2NvZXhfaXNfbWltb19hbGxvd2VkKG12bSwgc3RhKSkKKwkJZ290byBvdXQ7CisKKwkvKiBDaGVjayBpZiBmb3JjaW5nIHRoZSBkZWNpc2lvbiBpcyBjb25maWd1cmVkLgorCSAqIE5vdGUgdGhhdCBTSVNPIGlzIGZvcmNlZCBieSBub3QgYWxsb3dpbmcgU1RCQyBvciBCRkVSCisJICovCisJaWYgKGxxX3N0YS0+c3NfZm9yY2UgPT0gUlNfU1NfRk9SQ0VfU1RCQykKKwkJc3NfcGFyYW1zIHw9IChMUV9TU19TVEJDXzFTU19BTExPV0VEIHwgTFFfU1NfRk9SQ0UpOworCWVsc2UgaWYgKGxxX3N0YS0+c3NfZm9yY2UgPT0gUlNfU1NfRk9SQ0VfQkZFUikKKwkJc3NfcGFyYW1zIHw9IChMUV9TU19CRkVSX0FMTE9XRUQgfCBMUV9TU19GT1JDRSk7CisKKwlpZiAobHFfc3RhLT5zc19mb3JjZSAhPSBSU19TU19GT1JDRV9OT05FKSB7CisJCUlXTF9ERUJVR19SQVRFKG12bSwgIkZvcmNpbmcgc2luZ2xlIHN0cmVhbSBUeCBkZWNpc2lvbiAlZFxuIiwKKwkJCSAgICAgICBscV9zdGEtPnNzX2ZvcmNlKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGxxX3N0YS0+c3RiY19jYXBhYmxlKQorCQlzc19wYXJhbXMgfD0gTFFfU1NfU1RCQ18xU1NfQUxMT1dFRDsKKworCWlmICghbHFfc3RhLT5iZmVyX2NhcGFibGUpCisJCWdvdG8gb3V0OworCisJaWVlZTgwMjExX2l0ZXJhdGVfc3RhdGlvbnNfYXRvbWljKG12bS0+aHcsCisJCQkJCSAgcnNfYmZlcl9hY3RpdmVfaXRlciwKKwkJCQkJICAmZGF0YSk7CisJYmZlcl9tdm1zdGEgPSBkYXRhLmJmZXJfbXZtc3RhOworCisJLyogVGhpcyBjb2RlIGlzIHNhZmUgYXMgaXQgZG9lc24ndCBydW4gY29uY3VycmVudGx5IGZvciBkaWZmZXJlbnQKKwkgKiBzdGF0aW9ucy4gVGhpcyBpcyBndWFyYW50ZWVkIGJ5IHRoZSBmYWN0IHRoYXQgY2FsbHMgdG8KKwkgKiBpZWVlODAyMTFfdHhfc3RhdHVzIHdvdWxkbid0IHJ1biBjb25jdXJyZW50bHkgZm9yIGEgc2luZ2xlIEhXLgorCSAqLworCWlmICghYmZlcl9tdm1zdGEpIHsKKwkJSVdMX0RFQlVHX1JBVEUobXZtLCAiTm8gc3RhIHdpdGggQkZFUiBhbGxvd2VkIGZvdW5kLiBBbGxvd1xuIik7CisKKwkJc3NfcGFyYW1zIHw9IExRX1NTX0JGRVJfQUxMT1dFRDsKKwkJZ290byBvdXQ7CisJfQorCisJSVdMX0RFQlVHX1JBVEUobXZtLCAiRm91bmQgZXhpc3Rpbmcgc3RhICVkIHdpdGggQkZFUiBhY3RpdmF0ZWRcbiIsCisJCSAgICAgICBiZmVyX212bXN0YS0+c3RhX2lkKTsKKworCS8qIERpc2FsbG93IEJGRVIgb24gYW5vdGhlciBTVEEgaWYgYWN0aXZlIGFuZCB3ZSdyZSBhIGhpZ2hlciBwcmlvcml0eSAqLworCWlmIChyc19iZmVyX3ByaW9yaXR5X2NtcChtdm1zdGEsIGJmZXJfbXZtc3RhKSA+IDApIHsKKwkJc3RydWN0IGl3bF9scV9jbWQgKmJmZXJzdGFfbHFfY21kID0gJmJmZXJfbXZtc3RhLT5scV9zdGEubHE7CisJCXUzMiBiZmVyc3RhX3NzX3BhcmFtcyA9IGxlMzJfdG9fY3B1KGJmZXJzdGFfbHFfY21kLT5zc19wYXJhbXMpOworCisJCWJmZXJzdGFfc3NfcGFyYW1zICY9IH5MUV9TU19CRkVSX0FMTE9XRUQ7CisJCWJmZXJzdGFfbHFfY21kLT5zc19wYXJhbXMgPSBjcHVfdG9fbGUzMihiZmVyc3RhX3NzX3BhcmFtcyk7CisJCWl3bF9tdm1fc2VuZF9scV9jbWQobXZtLCBiZmVyc3RhX2xxX2NtZCwgZmFsc2UpOworCisJCXNzX3BhcmFtcyB8PSBMUV9TU19CRkVSX0FMTE9XRUQ7CisJCUlXTF9ERUJVR19SQVRFKG12bSwKKwkJCSAgICAgICAiTG93ZXIgcHJpb3JpdHkgQkZFUiBzdGEgZm91bmQgKCVkKS4gU3dpdGNoIEJGRVJcbiIsCisJCQkgICAgICAgYmZlcl9tdm1zdGEtPnN0YV9pZCk7CisJfQorb3V0OgorCWxxX2NtZC0+c3NfcGFyYW1zID0gY3B1X3RvX2xlMzIoc3NfcGFyYW1zKTsKK30KKwogc3RhdGljIHZvaWQgcnNfZmlsbF9scV9jbWQoc3RydWN0IGl3bF9tdm0gKm12bSwKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgICBzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhLApAQCAtMjk3MSw5ICszMTI0LDkgQEAKIAlzdHJ1Y3QgaXdsX212bV9zdGEgKm12bXN0YTsKIAlzdHJ1Y3QgaXdsX212bV92aWYgKm12bXZpZjsKIAotCWxxX2NtZC0+YWdnX2Rpc2FibGVfc3RhcnRfdGggPSBMSU5LX1FVQUxfQUdHX0RJU0FCTEVfU1RBUlRfREVGOworCWxxX2NtZC0+YWdnX2Rpc2FibGVfc3RhcnRfdGggPSBJV0xfTVZNX1JTX0FHR19ESVNBQkxFX1NUQVJUOwogCWxxX2NtZC0+YWdnX3RpbWVfbGltaXQgPQotCQljcHVfdG9fbGUxNihMSU5LX1FVQUxfQUdHX1RJTUVfTElNSVRfREVGKTsKKwkJY3B1X3RvX2xlMTYoSVdMX01WTV9SU19BR0dfVElNRV9MSU1JVCk7CiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdGUwogCWlmIChscV9zdGEtPnBlcnMuZGJnX2ZpeGVkX3JhdGUpIHsKQEAgLTI5ODgsNiArMzE0MSw5IEBACiAKIAlyc19idWlsZF9yYXRlc190YWJsZShtdm0sIHN0YSwgbHFfc3RhLCBpbml0aWFsX3JhdGUpOwogCisJaWYgKG12bS0+ZnctPnVjb2RlX2NhcGEuYXBpWzBdICYgSVdMX1VDT0RFX1RMVl9BUElfTFFfU1NfUEFSQU1TKQorCQlyc19zZXRfbHFfc3NfcGFyYW1zKG12bSwgc3RhLCBscV9zdGEsIGluaXRpYWxfcmF0ZSk7CisKIAlpZiAobnVtX29mX2FudChpbml0aWFsX3JhdGUtPmFudCkgPT0gMSkKIAkJbHFfY21kLT5zaW5nbGVfc3RyZWFtX2FudF9tc2sgPSBpbml0aWFsX3JhdGUtPmFudDsKIApAQCAtMzE2Nyw5ICszMzIzLDkgQEAKIAlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAiZml4ZWQgcmF0ZSAweCVYXG4iLAogCQkJbHFfc3RhLT5wZXJzLmRiZ19maXhlZF9yYXRlKTsKIAlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAidmFsaWRfdHhfYW50ICVzJXMlc1xuIiwKLQkgICAgKG12bS0+ZnctPnZhbGlkX3R4X2FudCAmIEFOVF9BKSA/ICJBTlRfQSwiIDogIiIsCi0JICAgIChtdm0tPmZ3LT52YWxpZF90eF9hbnQgJiBBTlRfQikgPyAiQU5UX0IsIiA6ICIiLAotCSAgICAobXZtLT5mdy0+dmFsaWRfdHhfYW50ICYgQU5UX0MpID8gIkFOVF9DIiA6ICIiKTsKKwkgICAgKGl3bF9tdm1fZ2V0X3ZhbGlkX3R4X2FudChtdm0pICYgQU5UX0EpID8gIkFOVF9BLCIgOiAiIiwKKwkgICAgKGl3bF9tdm1fZ2V0X3ZhbGlkX3R4X2FudChtdm0pICYgQU5UX0IpID8gIkFOVF9CLCIgOiAiIiwKKwkgICAgKGl3bF9tdm1fZ2V0X3ZhbGlkX3R4X2FudChtdm0pICYgQU5UX0MpID8gIkFOVF9DIiA6ICIiKTsKIAlkZXNjICs9IHNwcmludGYoYnVmZitkZXNjLCAibHEgdHlwZSAlc1xuIiwKIAkJCShpc19sZWdhY3kocmF0ZSkpID8gImxlZ2FjeSIgOgogCQkJaXNfdmh0KHJhdGUpID8gIlZIVCIgOiAiSFQiKTsKQEAgLTMzNjEsOSArMzUxNyw3MyBAQAogCS5sbHNlZWsgPSBkZWZhdWx0X2xsc2VlaywKIH07CiAKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19zc19mb3JjZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgICAgICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfbHFfc3RhICpscV9zdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTJdOworCWludCBidWZzeiA9IHNpemVvZihidWYpOworCWludCBwb3MgPSAwOworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3NfZm9yY2VfbmFtZVtdID0geworCQlbUlNfU1NfRk9SQ0VfTk9ORV0gPSAibm9uZSIsCisJCVtSU19TU19GT1JDRV9TVEJDXSA9ICJzdGJjIiwKKwkJW1JTX1NTX0ZPUkNFX0JGRVJdID0gImJmZXIiLAorCQlbUlNfU1NfRk9SQ0VfU0lTT10gPSAic2lzbyIsCisJfTsKKworCXBvcyArPSBzY25wcmludGYoYnVmK3BvcywgYnVmc3otcG9zLCAiJXNcbiIsCisJCQkgc3NfZm9yY2VfbmFtZVtscV9zdGEtPnNzX2ZvcmNlXSk7CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfc3NfZm9yY2Vfd3JpdGUoc3RydWN0IGl3bF9scV9zdGEgKmxxX3N0YSwgY2hhciAqYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaXdsX212bSAqbXZtID0gbHFfc3RhLT5wZXJzLmRydjsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghc3RybmNtcCgibm9uZSIsIGJ1ZiwgNCkpIHsKKwkJbHFfc3RhLT5zc19mb3JjZSA9IFJTX1NTX0ZPUkNFX05PTkU7CisJfSBlbHNlIGlmICghc3RybmNtcCgic2lzbyIsIGJ1ZiwgNCkpIHsKKwkJbHFfc3RhLT5zc19mb3JjZSA9IFJTX1NTX0ZPUkNFX1NJU087CisJfSBlbHNlIGlmICghc3RybmNtcCgic3RiYyIsIGJ1ZiwgNCkpIHsKKwkJaWYgKGxxX3N0YS0+c3RiY19jYXBhYmxlKSB7CisJCQlscV9zdGEtPnNzX2ZvcmNlID0gUlNfU1NfRk9SQ0VfU1RCQzsKKwkJfSBlbHNlIHsKKwkJCUlXTF9FUlIobXZtLAorCQkJCSJjYW4ndCBmb3JjZSBTVEJDLiBwZWVyIGRvZXNuJ3Qgc3VwcG9ydFxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJfSBlbHNlIGlmICghc3RybmNtcCgiYmZlciIsIGJ1ZiwgNCkpIHsKKwkJaWYgKGxxX3N0YS0+YmZlcl9jYXBhYmxlKSB7CisJCQlscV9zdGEtPnNzX2ZvcmNlID0gUlNfU1NfRk9SQ0VfQkZFUjsKKwkJfSBlbHNlIHsKKwkJCUlXTF9FUlIobXZtLAorCQkJCSJjYW4ndCBmb3JjZSBCRkVSLiBwZWVyIGRvZXNuJ3Qgc3VwcG9ydFxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJSVdMX0VSUihtdm0sICJ2YWxpZCB2YWx1ZXMgbm9uZXxzaXNvfHN0YmN8YmZlclxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCXJldHVybiByZXQgPzogY291bnQ7Cit9CisKKyNkZWZpbmUgTVZNX0RFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhuYW1lLCBidWZzeikgXAorCV9NVk1fREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKG5hbWUsIGJ1ZnN6LCBzdHJ1Y3QgaXdsX2xxX3N0YSkKKyNkZWZpbmUgTVZNX0RFQlVHRlNfQUREX0ZJTEVfUlMobmFtZSwgcGFyZW50LCBtb2RlKSBkbyB7CQlcCisJCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgjbmFtZSwgbW9kZSwgcGFyZW50LCBscV9zdGEsCVwKKwkJCQkJICZpd2xfZGJnZnNfIyNuYW1lIyNfb3BzKSkJXAorCQkJZ290byBlcnI7CQkJCQlcCisJfSB3aGlsZSAoMCkKKworTVZNX0RFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhzc19mb3JjZSwgMzIpOworCiBzdGF0aWMgdm9pZCByc19hZGRfZGVidWdmcyh2b2lkICptdm0sIHZvaWQgKm12bV9zdGEsIHN0cnVjdCBkZW50cnkgKmRpcikKIHsKIAlzdHJ1Y3QgaXdsX2xxX3N0YSAqbHFfc3RhID0gbXZtX3N0YTsKKwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJhdGVfc2NhbGVfdGFibGUiLCBTX0lSVVNSIHwgU19JV1VTUiwgZGlyLAogCQkJICAgIGxxX3N0YSwgJnJzX3N0YV9kYmdmc19zY2FsZV90YWJsZV9vcHMpOwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJhdGVfc3RhdHNfdGFibGUiLCBTX0lSVVNSLCBkaXIsCkBAIC0zMzc0LDYgKzM1OTQsMTEgQEAKIAkJCSAgJmxxX3N0YS0+dHhfYWdnX3RpZF9lbik7CiAJZGVidWdmc19jcmVhdGVfdTgoInJlZHVjZWRfdHBjIiwgU19JUlVTUiB8IFNfSVdVU1IsIGRpciwKIAkJCSAgJmxxX3N0YS0+cGVycy5kYmdfZml4ZWRfdHhwX3JlZHVjdGlvbik7CisKKwlNVk1fREVCVUdGU19BRERfRklMRV9SUyhzc19mb3JjZSwgZGlyLCBTX0lSVVNSIHwgU19JV1VTUik7CisJcmV0dXJuOworZXJyOgorCUlXTF9FUlIoKHN0cnVjdCBpd2xfbXZtICopbXZtLCAiQ2FuJ3QgY3JlYXRlIGRlYnVnZnMgZW50aXR5XG4iKTsKIH0KIAogc3RhdGljIHZvaWQgcnNfcmVtb3ZlX2RlYnVnZnModm9pZCAqbXZtLCB2b2lkICptdm1fc3RhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vcnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3JzLmgKaW5kZXggZGVmZDcwYS4uZGM0ZWYzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vcnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9ycy5oCkBAIC0xMzcsNDIgKzEzNywxMCBAQAogCiAjZGVmaW5lIElXTF9JTlZBTElEX1ZBTFVFICAgIC0xCiAKLSNkZWZpbmUgSVdMX01JTl9SU1NJX1ZBTCAgICAgICAgICAgICAgICAgLTEwMAotI2RlZmluZSBJV0xfTUFYX1JTU0lfVkFMICAgICAgICAgICAgICAgICAgICAwCi0KLS8qIFRoZXNlIHZhbHVlcyBzcGVjaWZ5IGhvdyBtYW55IFR4IGZyYW1lIGF0dGVtcHRzIGJlZm9yZQotICogc2VhcmNoaW5nIGZvciBhIG5ldyBtb2R1bGF0aW9uIG1vZGUgKi8KLSNkZWZpbmUgSVdMX0xFR0FDWV9GQUlMVVJFX0xJTUlUCTE2MAotI2RlZmluZSBJV0xfTEVHQUNZX1NVQ0NFU1NfTElNSVQJNDgwCi0jZGVmaW5lIElXTF9MRUdBQ1lfVEFCTEVfQ09VTlQJCTE2MAotCi0jZGVmaW5lIElXTF9OT05FX0xFR0FDWV9GQUlMVVJFX0xJTUlUCTQwMAotI2RlZmluZSBJV0xfTk9ORV9MRUdBQ1lfU1VDQ0VTU19MSU1JVAk0NTAwCi0jZGVmaW5lIElXTF9OT05FX0xFR0FDWV9UQUJMRV9DT1VOVAkxNTAwCi0KLS8qIFN1Y2Nlc3MgcmF0aW8gKEFDS2VkIC8gYXR0ZW1wdGVkIHR4IGZyYW1lcykgdmFsdWVzIChwZXJmZWN0IGlzIDEyOCAqIDEwMCkgKi8KLSNkZWZpbmUgSVdMX1JTX0dPT0RfUkFUSU8JCTEyODAwCS8qIDEwMCUgKi8KLSNkZWZpbmUgSVdMX1JBVEVfU0NBTEVfU1dJVENICQkxMDg4MAkvKiAgODUlICovCi0jZGVmaW5lIElXTF9SQVRFX0hJR0hfVEgJCTEwODgwCS8qICA4NSUgKi8KLSNkZWZpbmUgSVdMX1JBVEVfSU5DUkVBU0VfVEgJCTY0MDAJLyogIDUwJSAqLwotI2RlZmluZSBSU19TUl9GT1JDRV9ERUNSRUFTRQkJMTkyMAkvKiAgMTUlICovCi0jZGVmaW5lIFJTX1NSX05PX0RFQ1JFQVNFCQkxMDg4MAkvKiAgODUlICovCi0KLSNkZWZpbmUgVFBDX1NSX0ZPUkNFX0lOQ1JFQVNFCQk5NjAwCS8qIDc1JSAqLwotI2RlZmluZSBUUENfU1JfTk9fSU5DUkVBU0UJCTEwODgwCS8qIDg1JSAqLwotI2RlZmluZSBUUENfVFhfUE9XRVJfU1RFUAkJMwogI2RlZmluZSBUUENfTUFYX1JFRFVDVElPTgkJMTUKICNkZWZpbmUgVFBDX05PX1JFRFVDVElPTgkJMAogI2RlZmluZSBUUENfSU5WQUxJRAkJCTB4ZmYKIAotI2RlZmluZSBMSU5LX1FVQUxfQUdHX1RJTUVfTElNSVRfREVGCSg0MDAwKSAvKiA0IG1pbGxpc2Vjb25kcyAqLwotI2RlZmluZSBMSU5LX1FVQUxfQUdHX1RJTUVfTElNSVRfTUFYCSg4MDAwKQotI2RlZmluZSBMSU5LX1FVQUxfQUdHX1RJTUVfTElNSVRfTUlOCSgxMDApCi0KLSNkZWZpbmUgTElOS19RVUFMX0FHR19ESVNBQkxFX1NUQVJUX0RFRgkoMykKLSNkZWZpbmUgTElOS19RVUFMX0FHR19ESVNBQkxFX1NUQVJUX01BWAkoMjU1KQotI2RlZmluZSBMSU5LX1FVQUxfQUdHX0RJU0FCTEVfU1RBUlRfTUlOCSgwKQotCiAjZGVmaW5lIExJTktfUVVBTF9BR0dfRlJBTUVfTElNSVRfREVGCSg2MykKICNkZWZpbmUgTElOS19RVUFMX0FHR19GUkFNRV9MSU1JVF9NQVgJKDYzKQogI2RlZmluZSBMSU5LX1FVQUxfQUdHX0ZSQU1FX0xJTUlUX01JTgkoMCkKQEAgLTE4MSwxNCArMTQ5LDcgQEAKIAogLyogbG9hZCBwZXIgdGlkIGRlZmluZXMgZm9yIEEtTVBEVSBhY3RpdmF0aW9uICovCiAjZGVmaW5lIElXTF9BR0dfVFBUX1RIUkVIT0xECTAKLSNkZWZpbmUgSVdMX0FHR19MT0FEX1RIUkVTSE9MRAkxMAogI2RlZmluZSBJV0xfQUdHX0FMTF9USUQJCTB4ZmYKLSNkZWZpbmUgVElEX1FVRVVFX0NFTExfU1BBQ0lORwk1MAkvKm1TICovCi0jZGVmaW5lIFRJRF9RVUVVRV9NQVhfU0laRQkyMAotI2RlZmluZSBUSURfUk9VTkRfVkFMVUUJCTUJLyogbVMgKi8KLQotI2RlZmluZSBUSURfTUFYX1RJTUVfRElGRiAoKFRJRF9RVUVVRV9NQVhfU0laRSAtIDEpICogVElEX1FVRVVFX0NFTExfU1BBQ0lORykKLSNkZWZpbmUgVElNRV9XUkFQX0FST1VORCh4LCB5KSAoKCh5KSA+ICh4KSkgPyAoeSkgLSAoeCkgOiAoMC0oeCkpICsgKHkpKQogCiBlbnVtIGl3bF90YWJsZV90eXBlIHsKIAlMUV9OT05FLApAQCAtMjc5LDYgKzI0MCwxMyBAQAogCVJTX0NPTFVNTl9JTlZBTElELAogfTsKIAorZW51bSByc19zc19mb3JjZV9vcHQgeworCVJTX1NTX0ZPUkNFX05PTkUgPSAwLAorCVJTX1NTX0ZPUkNFX1NUQkMsCisJUlNfU1NfRk9SQ0VfQkZFUiwKKwlSU19TU19GT1JDRV9TSVNPLAorfTsKKwogLyogUGFja2V0IHN0YXRzIHBlciByYXRlICovCiBzdHJ1Y3QgcnNfcmF0ZV9zdGF0cyB7CiAJdTY0IHN1Y2Nlc3M7CkBAIC0zMzIsNyArMzAwLDkgQEAKIAl1NjQgbGFzdF90eDsKIAlib29sIGlzX3ZodDsKIAlib29sIGxkcGM7ICAgICAgICAgICAgICAvKiBMRFBDIFJ4IGlzIHN1cHBvcnRlZCBieSB0aGUgU1RBICovCi0JYm9vbCBzdGJjOyAgICAgICAgICAgICAgLyogVHggU1RCQyBpcyBzdXBwb3J0ZWQgYnkgY2hpcCBhbmQgUnggYnkgU1RBICovCisJYm9vbCBzdGJjX2NhcGFibGU7ICAgICAgLyogVHggU1RCQyBpcyBzdXBwb3J0ZWQgYnkgY2hpcCBhbmQgUnggYnkgU1RBICovCisJYm9vbCBiZmVyX2NhcGFibGU7ICAgICAgLyogUmVtb3RlIHN1cHBvcnRzIGJlYW1mb3JtZWUgYW5kIHdlIEJGZXIgKi8KKwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAogCS8qIFRoZSBmb2xsb3dpbmcgYXJlIGJpdG1hcHMgb2YgcmF0ZXM7IElXTF9SQVRFXzZNX01BU0ssIGV0Yy4gKi8KQEAgLTM2MSw2ICszMzEsOSBAQAogCS8qIHR4IHBvd2VyIHJlZHVjZSBmb3IgdGhpcyBzdGEgKi8KIAlpbnQgdHBjX3JlZHVjZTsKIAorCS8qIGZvcmNlIFNUQkMvQkZFUi9TSVNPIGZvciB0ZXN0aW5nICovCisJZW51bSByc19zc19mb3JjZV9vcHQgc3NfZm9yY2U7CisKIAkvKiBwZXJzaXN0ZW50IGZpZWxkcyAtIGluaXRpYWxpemVkIG9ubHkgb25jZSAtIGtlZXAgbGFzdCEgKi8KIAlzdHJ1Y3QgbHFfc3RhX3BlcnMgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vcnguYwppbmRleCA5NGI2ZTcyLi5mOTIyMTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3J4LmMKQEAgLTQwNyw3ICs0MDcsNyBAQAogCX0KIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKLQlpd2xfbXZtX3VwZGF0ZV9mcmFtZV9zdGF0cyhtdm0sICZtdm0tPmRydl9yeF9zdGF0cywgcmF0ZV9uX2ZsYWdzLAorCWl3bF9tdm1fdXBkYXRlX2ZyYW1lX3N0YXRzKG12bSwgcmF0ZV9uX2ZsYWdzLAogCQkJCSAgIHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfQU1QRFVfREVUQUlMUyk7CiAjZW5kaWYKIAlpd2xfbXZtX3Bhc3NfcGFja2V0X3RvX21hYzgwMjExKG12bSwgc2tiLCBoZHIsIGxlbiwgYW1wZHVfc3RhdHVzLApAQCAtNTExLDEzICs1MTEsMTcgQEAKIHsKIAlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKIAlzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MgKnN0YXRzID0gKHZvaWQgKikmcGt0LT5kYXRhOwotCXN0cnVjdCBtdm1fc3RhdGlzdGljc19nZW5lcmFsX2NvbW1vbiAqY29tbW9uID0gJnN0YXRzLT5nZW5lcmFsLmNvbW1vbjsKIAlzdHJ1Y3QgaXdsX212bV9zdGF0X2RhdGEgZGF0YSA9IHsKIAkJLnN0YXRzID0gc3RhdHMsCiAJCS5tdm0gPSBtdm0sCiAJfTsKIAotCWl3bF9tdm1fdHRfdGVtcF9jaGFuZ2VkKG12bSwgbGUzMl90b19jcHUoY29tbW9uLT50ZW1wZXJhdHVyZSkpOworCS8qIE9ubHkgaGFuZGxlIHJ4IHN0YXRpc3RpY3MgdGVtcGVyYXR1cmUgY2hhbmdlcyBpZiBhc3luYyB0ZW1wCisJICogbm90aWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZAorCSAqLworCWlmICghKG12bS0+ZnctPnVjb2RlX2NhcGEuYXBpWzBdICYgSVdMX1VDT0RFX1RMVl9BUElfQVNZTkNfRFRNKSkKKwkJaXdsX212bV90dF90ZW1wX2NoYW5nZWQobXZtLAorCQkJCWxlMzJfdG9fY3B1KHN0YXRzLT5nZW5lcmFsLnJhZGlvX3RlbXBlcmF0dXJlKSk7CiAKIAlpd2xfbXZtX3VwZGF0ZV9yeF9zdGF0aXN0aWNzKG12bSwgc3RhdHMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS9zY2FuLmMKaW5kZXggZWM5YThlNy4uN2U5YWEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3NjYW4uYwpAQCAtNzIsNiArNzIsOCBAQAogCiAjZGVmaW5lIElXTF9QTENQX1FVSUVUX1RIUkVTSCAxCiAjZGVmaW5lIElXTF9BQ1RJVkVfUVVJRVRfVElNRSAxMAorI2RlZmluZSBJV0xfREVOU0VfRUJTX1NDQU5fUkFUSU8gNQorI2RlZmluZSBJV0xfU1BBUlNFX0VCU19TQ0FOX1JBVElPIDEKIAogc3RydWN0IGl3bF9tdm1fc2Nhbl9wYXJhbXMgewogCXUzMiBtYXhfb3V0X3RpbWU7CkBAIC05Nyw3ICs5OSw3IEBACiB7CiAJaWYgKG12bS0+c2Nhbl9yeF9hbnQgIT0gQU5UX05PTkUpCiAJCXJldHVybiBtdm0tPnNjYW5fcnhfYW50OwotCXJldHVybiBtdm0tPmZ3LT52YWxpZF9yeF9hbnQ7CisJcmV0dXJuIGl3bF9tdm1fZ2V0X3ZhbGlkX3J4X2FudChtdm0pOwogfQogCiBzdGF0aWMgaW5saW5lIF9fbGUxNiBpd2xfbXZtX3NjYW5fcnhfY2hhaW4oc3RydWN0IGl3bF9tdm0gKm12bSkKQEAgLTEyOCw3ICsxMzAsNyBAQAogCXUzMiB0eF9hbnQ7CiAKIAltdm0tPnNjYW5fbGFzdF9hbnRlbm5hX2lkeCA9Ci0JCWl3bF9tdm1fbmV4dF9hbnRlbm5hKG12bSwgbXZtLT5mdy0+dmFsaWRfdHhfYW50LAorCQlpd2xfbXZtX25leHRfYW50ZW5uYShtdm0sIGl3bF9tdm1fZ2V0X3ZhbGlkX3R4X2FudChtdm0pLAogCQkJCSAgICAgbXZtLT5zY2FuX2xhc3RfYW50ZW5uYV9pZHgpOwogCXR4X2FudCA9IEJJVChtdm0tPnNjYW5fbGFzdF9hbnRlbm5hX2lkeCkgPDwgUkFURV9NQ1NfQU5UX1BPUzsKIApAQCAtMjg4LDExICsyOTAsMTEgQEAKIAkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGl3bF9tdm1fdmlmICptdm12aWYgPSBpd2xfbXZtX3ZpZl9mcm9tX21hYzgwMjExKHZpZik7Ci0JYm9vbCAqZ2xvYmFsX2JvdW5kID0gZGF0YTsKKwlpbnQgKmdsb2JhbF9jbnQgPSBkYXRhOwogCiAJaWYgKHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfREVWSUNFICYmIG12bXZpZi0+cGh5X2N0eHQgJiYKIAkgICAgbXZtdmlmLT5waHlfY3R4dC0+aWQgPCBNQVhfUEhZUykKLQkJKmdsb2JhbF9ib3VuZCA9IHRydWU7CisJCSpnbG9iYWxfY250ICs9IDE7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9tdm1fc2Nhbl9jYWxjX3BhcmFtcyhzdHJ1Y3QgaXdsX212bSAqbXZtLApAQCAtMzAwLDI3ICszMDIsMzEgQEAKIAkJCQkgICAgIGludCBuX3NzaWRzLCB1MzIgZmxhZ3MsCiAJCQkJICAgICBzdHJ1Y3QgaXdsX212bV9zY2FuX3BhcmFtcyAqcGFyYW1zKQogewotCWJvb2wgZ2xvYmFsX2JvdW5kID0gZmFsc2U7CisJaW50IGdsb2JhbF9jbnQgPSAwOwogCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZDsKIAl1OCBmcmFnX3Bhc3NpdmVfZHdlbGwgPSAwOwogCiAJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXNfYXRvbWljKG12bS0+aHcsCiAJCQkJCSAgICBJRUVFODAyMTFfSUZBQ0VfSVRFUl9OT1JNQUwsCiAJCQkJCSAgICBpd2xfbXZtX3NjYW5fY29uZGl0aW9uX2l0ZXJhdG9yLAotCQkJCQkgICAgJmdsb2JhbF9ib3VuZCk7CisJCQkJCSAgICAmZ2xvYmFsX2NudCk7CiAKLQlpZiAoIWdsb2JhbF9ib3VuZCkKKwlpZiAoIWdsb2JhbF9jbnQpCiAJCWdvdG8gbm90X2JvdW5kOwogCiAJcGFyYW1zLT5zdXNwZW5kX3RpbWUgPSAzMDsKLQlwYXJhbXMtPm1heF9vdXRfdGltZSA9IDE3MDsKKwlwYXJhbXMtPm1heF9vdXRfdGltZSA9IDEyMDsKIAogCWlmIChpd2xfbXZtX2xvd19sYXRlbmN5KG12bSkpIHsKIAkJaWYgKG12bS0+ZnctPnVjb2RlX2NhcGEuYXBpWzBdICYKIAkJICAgIElXTF9VQ09ERV9UTFZfQVBJX0ZSQUdNRU5URURfU0NBTikgewogCQkJcGFyYW1zLT5zdXNwZW5kX3RpbWUgPSAxMDU7Ci0JCQlwYXJhbXMtPm1heF9vdXRfdGltZSA9IDcwOwotCQkJZnJhZ19wYXNzaXZlX2R3ZWxsID0gMjA7CisJCQkvKgorCQkJICogSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBhY3RpdmUgaW50ZXJmYWNlIG1ha2UKKwkJCSAqIHBhc3NpdmUgc2NhbiBtb3JlIGZyYWdtZW50ZWQuCisJCQkgKi8KKwkJCWZyYWdfcGFzc2l2ZV9kd2VsbCA9IChnbG9iYWxfY250IDwgMikgPyA0MCA6IDIwOworCQkJcGFyYW1zLT5tYXhfb3V0X3RpbWUgPSBmcmFnX3Bhc3NpdmVfZHdlbGw7CiAJCX0gZWxzZSB7CiAJCQlwYXJhbXMtPnN1c3BlbmRfdGltZSA9IDEyMDsKIAkJCXBhcmFtcy0+bWF4X291dF90aW1lID0gMTIwOwpAQCAtNTM3LDYgKzU0MywxOSBAQAogCXJldHVybiAwOwogfQogCitpbnQgaXdsX212bV9yeF9zY2FuX29mZmxvYWRfaXRlcl9jb21wbGV0ZV9ub3RpZihzdHJ1Y3QgaXdsX212bSAqbXZtLAorCQkJCQkJc3RydWN0IGl3bF9yeF9jbWRfYnVmZmVyICpyeGIsCisJCQkJCQlzdHJ1Y3QgaXdsX2RldmljZV9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKKwlzdHJ1Y3QgaXdsX3NjYW5fY29tcGxldGVfbm90aWYgKm5vdGlmID0gKHZvaWQgKilwa3QtPmRhdGE7CisKKwlJV0xfREVCVUdfU0NBTihtdm0sCisJCSAgICAgICAiU2NhbiBvZmZsb2FkIGl0ZXJhdGlvbiBjb21wbGV0ZTogc3RhdHVzPTB4JXggc2Nhbm5lZCBjaGFubmVscz0lZFxuIiwKKwkJICAgICAgIG5vdGlmLT5zdGF0dXMsIG5vdGlmLT5zY2FubmVkX2NoYW5uZWxzKTsKKwlyZXR1cm4gMDsKK30KKwogaW50IGl3bF9tdm1fcnhfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaXdsX212bSAqbXZtLCBzdHJ1Y3QgaXdsX3J4X2NtZF9idWZmZXIgKnJ4YiwKIAkJCSAgc3RydWN0IGl3bF9kZXZpY2VfY21kICpjbWQpCiB7CkBAIC02ODUsNyArNzA0LDggQEAKIAkJaXdsX212bV91bnJlZihtdm0sIElXTF9NVk1fUkVGX1NDQU4pOwogCX0KIAotCW12bS0+bGFzdF9lYnNfc3VjY2Vzc2Z1bCA9ICFlYnNfc3RhdHVzOworCWlmIChlYnNfc3RhdHVzKQorCQltdm0tPmxhc3RfZWJzX3N1Y2Nlc3NmdWwgPSBmYWxzZTsKIAogCXJldHVybiAwOwogfQpAQCAtMTEwNSw2ICsxMTI1LDEyIEBACiAJCXJldHVybiBpd2xfdW1hY19zY2FuX3N0b3AobXZtLCBJV0xfVU1BQ19TQ0FOX1VJRF9TQ0hFRF9TQ0FOLAogCQkJCQkgIG5vdGlmeSk7CiAKKwlpZiAobXZtLT5zY2FuX3N0YXR1cyA9PSBJV0xfTVZNX1NDQU5fTk9ORSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaXdsX212bV9pc19yYWRpb19raWxsZWQobXZtKSkKKwkJZ290byBvdXQ7CisKIAlpZiAobXZtLT5zY2FuX3N0YXR1cyAhPSBJV0xfTVZNX1NDQU5fU0NIRUQgJiYKIAkgICAgKCEobXZtLT5mdy0+dWNvZGVfY2FwYS5hcGlbMF0gJiBJV0xfVUNPREVfVExWX0FQSV9MTUFDX1NDQU4pIHx8CiAJICAgICBtdm0tPnNjYW5fc3RhdHVzICE9IElXTF9NVk1fU0NBTl9PUykpIHsKQEAgLTExNDEsNiArMTE2Nyw3IEBACiAJaWYgKG12bS0+c2Nhbl9zdGF0dXMgPT0gSVdMX01WTV9TQ0FOX09TKQogCQlpd2xfbXZtX3VucmVmKG12bSwgSVdMX01WTV9SRUZfU0NBTik7CiAKK291dDoKIAltdm0tPnNjYW5fc3RhdHVzID0gSVdMX01WTV9TQ0FOX05PTkU7CiAKIAlpZiAobm90aWZ5KSB7CkBAIC0xMjk3LDE4ICsxMzI0LDYgQEAKIAljbWQtPnNjYW5fcHJpbyA9IGNwdV90b19sZTMyKElXTF9TQ0FOX1BSSU9SSVRZX0hJR0gpOwogCWNtZC0+aXRlcl9udW0gPSBjcHVfdG9fbGUzMigxKTsKIAotCWlmIChtdm0tPmZ3LT51Y29kZV9jYXBhLmZsYWdzICYgSVdMX1VDT0RFX1RMVl9GTEFHU19FQlNfU1VQUE9SVCAmJgotCSAgICBtdm0tPmxhc3RfZWJzX3N1Y2Nlc3NmdWwpIHsKLQkJY21kLT5jaGFubmVsX29wdFswXS5mbGFncyA9Ci0JCQljcHVfdG9fbGUxNihJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTIHwKLQkJCQkgICAgSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCU19BQ0NVUkFURSB8Ci0JCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19DQUNIRV9BREQpOwotCQljbWQtPmNoYW5uZWxfb3B0WzFdLmZsYWdzID0KLQkJCWNwdV90b19sZTE2KElXTF9TQ0FOX0NIQU5ORUxfRkxBR19FQlMgfAotCQkJCSAgICBJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTX0FDQ1VSQVRFIHwKLQkJCQkgICAgSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0NBQ0hFX0FERCk7Ci0JfQotCiAJaWYgKGl3bF9tdm1fcnJtX3NjYW5fbmVlZGVkKG12bSkpCiAJCWNtZC0+c2Nhbl9mbGFncyB8PQogCQkJY3B1X3RvX2xlMzIoSVdMX01WTV9MTUFDX1NDQU5fRkxBR1NfUlJNX0VOQUJMRUQpOwpAQCAtMTM4Myw2ICsxMzk4LDIyIEBACiAJY21kLT5zY2hlZHVsZVsxXS5pdGVyYXRpb25zID0gMDsKIAljbWQtPnNjaGVkdWxlWzFdLmZ1bGxfc2Nhbl9tdWwgPSAwOwogCisJaWYgKG12bS0+ZnctPnVjb2RlX2NhcGEuYXBpWzBdICYgSVdMX1VDT0RFX1RMVl9BUElfU0lOR0xFX1NDQU5fRUJTICYmCisJICAgIG12bS0+bGFzdF9lYnNfc3VjY2Vzc2Z1bCkgeworCQljbWQtPmNoYW5uZWxfb3B0WzBdLmZsYWdzID0KKwkJCWNwdV90b19sZTE2KElXTF9TQ0FOX0NIQU5ORUxfRkxBR19FQlMgfAorCQkJCSAgICBJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTX0FDQ1VSQVRFIHwKKwkJCQkgICAgSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0NBQ0hFX0FERCk7CisJCWNtZC0+Y2hhbm5lbF9vcHRbMF0ubm9uX2Vic19yYXRpbyA9CisJCQljcHVfdG9fbGUxNihJV0xfREVOU0VfRUJTX1NDQU5fUkFUSU8pOworCQljbWQtPmNoYW5uZWxfb3B0WzFdLmZsYWdzID0KKwkJCWNwdV90b19sZTE2KElXTF9TQ0FOX0NIQU5ORUxfRkxBR19FQlMgfAorCQkJCSAgICBJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTX0FDQ1VSQVRFIHwKKwkJCQkgICAgSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0NBQ0hFX0FERCk7CisJCWNtZC0+Y2hhbm5lbF9vcHRbMV0ubm9uX2Vic19yYXRpbyA9CisJCQljcHVfdG9fbGUxNihJV0xfU1BBUlNFX0VCU19TQ0FOX1JBVElPKTsKKwl9CisKIAlmb3IgKGkgPSAxOyBpIDw9IHJlcS0+cmVxLm5fc3NpZHM7IGkrKykKIAkJc3NpZF9iaXRtYXAgfD0gQklUKGkpOwogCkBAIC0xNDY3LDYgKzE0OTgsMTEgQEAKIAlpZiAocmVxLT5uX3NzaWRzID09IDApCiAJCWZsYWdzIHw9IElXTF9NVk1fTE1BQ19TQ0FOX0ZMQUdfUEFTU0lWRTsKIAorI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKKwlpZiAobXZtLT5zY2FuX2l0ZXJfbm90aWZfZW5hYmxlZCkKKwkJZmxhZ3MgfD0gSVdMX01WTV9MTUFDX1NDQU5fRkxBR19JVEVSX0NPTVBMRVRFOworI2VuZGlmCisKIAljbWQtPnNjYW5fZmxhZ3MgfD0gY3B1X3RvX2xlMzIoZmxhZ3MpOwogCiAJY21kLT5mbGFncyA9IGl3bF9tdm1fc2Nhbl9yeG9uX2ZsYWdzKHJlcS0+Y2hhbm5lbHNbMF0tPmJhbmQpOwpAQCAtMTQ4Myw2ICsxNTE5LDIyIEBACiAJY21kLT5zY2hlZHVsZVsxXS5pdGVyYXRpb25zID0gMHhmZjsKIAljbWQtPnNjaGVkdWxlWzFdLmZ1bGxfc2Nhbl9tdWwgPSBJV0xfRlVMTF9TQ0FOX01VTFRJUExJRVI7CiAKKwlpZiAobXZtLT5mdy0+dWNvZGVfY2FwYS5mbGFncyAmIElXTF9VQ09ERV9UTFZfRkxBR1NfRUJTX1NVUFBPUlQgJiYKKwkgICAgbXZtLT5sYXN0X2Vic19zdWNjZXNzZnVsKSB7CisJCWNtZC0+Y2hhbm5lbF9vcHRbMF0uZmxhZ3MgPQorCQkJY3B1X3RvX2xlMTYoSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCUyB8CisJCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19FQlNfQUNDVVJBVEUgfAorCQkJCSAgICBJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfQ0FDSEVfQUREKTsKKwkJY21kLT5jaGFubmVsX29wdFswXS5ub25fZWJzX3JhdGlvID0KKwkJCWNwdV90b19sZTE2KElXTF9ERU5TRV9FQlNfU0NBTl9SQVRJTyk7CisJCWNtZC0+Y2hhbm5lbF9vcHRbMV0uZmxhZ3MgPQorCQkJY3B1X3RvX2xlMTYoSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCUyB8CisJCQkJICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19FQlNfQUNDVVJBVEUgfAorCQkJCSAgICBJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfQ0FDSEVfQUREKTsKKwkJY21kLT5jaGFubmVsX29wdFsxXS5ub25fZWJzX3JhdGlvID0KKwkJCWNwdV90b19sZTE2KElXTF9TUEFSU0VfRUJTX1NDQU5fUkFUSU8pOworCX0KKwogCWl3bF9tdm1fbG1hY19zY2FuX2NmZ19jaGFubmVscyhtdm0sIHJlcS0+Y2hhbm5lbHMsIHJlcS0+bl9jaGFubmVscywKIAkJCQkgICAgICAgc3NpZF9iaXRtYXAsIGNtZCk7CiAKQEAgLTE2MTIsNyArMTY2NCw3IEBACiAJCQkJCSBTQ0FOX0NPTkZJR19GTEFHX1NFVF9NQUNfQUREUiB8CiAJCQkJCSBTQ0FOX0NPTkZJR19GTEFHX1NFVF9DSEFOTkVMX0ZMQUdTfAogCQkJCQkgU0NBTl9DT05GSUdfTl9DSEFOTkVMUyhudW1fY2hhbm5lbHMpKTsKLQlzY2FuX2NvbmZpZy0+dHhfY2hhaW5zID0gY3B1X3RvX2xlMzIobXZtLT5mdy0+dmFsaWRfdHhfYW50KTsKKwlzY2FuX2NvbmZpZy0+dHhfY2hhaW5zID0gY3B1X3RvX2xlMzIoaXdsX212bV9nZXRfdmFsaWRfdHhfYW50KG12bSkpOwogCXNjYW5fY29uZmlnLT5yeF9jaGFpbnMgPSBjcHVfdG9fbGUzMihpd2xfbXZtX3NjYW5fcnhfYW50KG12bSkpOwogCXNjYW5fY29uZmlnLT5sZWdhY3lfcmF0ZXMgPSBpd2xfbXZtX3NjYW5fY29uZmlnX3JhdGVzKG12bSk7CiAJc2Nhbl9jb25maWctPm91dF9vZl9jaGFubmVsX3RpbWUgPSBjcHVfdG9fbGUzMigxNzApOwpAQCAtMTYzMSwxMCArMTY4MywxMCBAQAogCiAJYmFuZCA9ICZtdm0tPm52bV9kYXRhLT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKIAlmb3IgKGkgPSAwOyBpIDwgYmFuZC0+bl9jaGFubmVsczsgaSsrLCBqKyspCi0JCXNjYW5fY29uZmlnLT5jaGFubmVsX2FycmF5W2pdID0gYmFuZC0+Y2hhbm5lbHNbaV0uY2VudGVyX2ZyZXE7CisJCXNjYW5fY29uZmlnLT5jaGFubmVsX2FycmF5W2pdID0gYmFuZC0+Y2hhbm5lbHNbaV0uaHdfdmFsdWU7CiAJYmFuZCA9ICZtdm0tPm52bV9kYXRhLT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKIAlmb3IgKGkgPSAwOyBpIDwgYmFuZC0+bl9jaGFubmVsczsgaSsrLCBqKyspCi0JCXNjYW5fY29uZmlnLT5jaGFubmVsX2FycmF5W2pdID0gYmFuZC0+Y2hhbm5lbHNbaV0uY2VudGVyX2ZyZXE7CisJCXNjYW5fY29uZmlnLT5jaGFubmVsX2FycmF5W2pdID0gYmFuZC0+Y2hhbm5lbHNbaV0uaHdfdmFsdWU7CiAKIAljbWQuZGF0YVswXSA9IHNjYW5fY29uZmlnOwogCWNtZC5sZW5bMF0gPSBjbWRfc2l6ZTsKQEAgLTE4MTEsNiArMTg2MywxMyBAQAogCWZsYWdzIHw9IElXTF9VTUFDX1NDQU5fR0VOX0ZMQUdTX1BBU1NfQUxMOwogCiAJY21kLT5nZW5lcmFsX2ZsYWdzID0gY3B1X3RvX2xlMzIoZmxhZ3MpOworCisJaWYgKG12bS0+ZnctPnVjb2RlX2NhcGEuYXBpWzBdICYgSVdMX1VDT0RFX1RMVl9BUElfU0lOR0xFX1NDQU5fRUJTICYmCisJICAgIG12bS0+bGFzdF9lYnNfc3VjY2Vzc2Z1bCkKKwkJY21kLT5jaGFubmVsX2ZsYWdzID0gSVdMX1NDQU5fQ0hBTk5FTF9GTEFHX0VCUyB8CisJCQkJICAgICBJV0xfU0NBTl9DSEFOTkVMX0ZMQUdfRUJTX0FDQ1VSQVRFIHwKKwkJCQkgICAgIElXTF9TQ0FOX0NIQU5ORUxfRkxBR19DQUNIRV9BREQ7CisKIAljbWQtPm5fY2hhbm5lbHMgPSByZXEtPnJlcS5uX2NoYW5uZWxzOwogCiAJZm9yIChpID0gMDsgaSA8IHJlcS0+cmVxLm5fc3NpZHM7IGkrKykKQEAgLTE5NzQsNyArMjAzMyw5IEBACiAJCSAgICAgICBub3RpZi0+ZWJzX3N0YXR1cyA9PSBJV0xfU0NBTl9FQlNfU1VDQ0VTUyA/CiAJCQkJInN1Y2Nlc3MiIDogImZhaWxlZCIpOwogCi0JbXZtLT5sYXN0X2Vic19zdWNjZXNzZnVsID0gIW5vdGlmLT5lYnNfc3RhdHVzOworCWlmIChub3RpZi0+ZWJzX3N0YXR1cykKKwkJbXZtLT5sYXN0X2Vic19zdWNjZXNzZnVsID0gZmFsc2U7CisKIAltdm0tPnNjYW5fdWlkW3VpZF9pZHhdID0gMDsKIAogCWlmICghc2NoZWQpIHsKQEAgLTIwMDcsMTAgKzIwNjgsMTQgQEAKIAogCS8qCiAJICogQ2xlYXIgc2NhbiB1aWQgb2Ygc2NhbnMgdGhhdCB3YXMgYWJvcnRlZCBmcm9tIGFib3ZlIGFuZCBjb21wbGV0ZWQKLQkgKiBpbiBGVyBzbyB0aGUgUlggaGFuZGxlciBkb2VzIG5vdGhpbmcuCisJICogaW4gRlcgc28gdGhlIFJYIGhhbmRsZXIgZG9lcyBub3RoaW5nLiBTZXQgbGFzdF9lYnNfc3VjY2Vzc2Z1bCBoZXJlIGlmCisJICogbmVlZGVkLgogCSAqLwogCXNjYW5fZG9uZS0+bXZtLT5zY2FuX3VpZFt1aWRfaWR4XSA9IDA7CiAKKwlpZiAobm90aWYtPmVic19zdGF0dXMpCisJCXNjYW5fZG9uZS0+bXZtLT5sYXN0X2Vic19zdWNjZXNzZnVsID0gZmFsc2U7CisKIAlyZXR1cm4gIWl3bF9tdm1fZmluZF9zY2FuX3R5cGUoc2Nhbl9kb25lLT5tdm0sIHNjYW5fZG9uZS0+dHlwZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3N0YS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vc3RhLmMKaW5kZXggZDg2ZmU0My4uNWMyM2NkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vc3RhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vc3RhLmMKQEAgLTk5LDcgKzk5LDcgQEAKIGludCBpd2xfbXZtX3N0YV9zZW5kX3RvX2Z3KHN0cnVjdCBpd2xfbXZtICptdm0sIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgICBib29sIHVwZGF0ZSkKIHsKLQlzdHJ1Y3QgaXdsX212bV9zdGEgKm12bV9zdGEgPSAodm9pZCAqKXN0YS0+ZHJ2X3ByaXY7CisJc3RydWN0IGl3bF9tdm1fc3RhICptdm1fc3RhID0gaXdsX212bV9zdGFfZnJvbV9tYWM4MDIxMShzdGEpOwogCXN0cnVjdCBpd2xfbXZtX2FkZF9zdGFfY21kIGFkZF9zdGFfY21kID0gewogCQkuc3RhX2lkID0gbXZtX3N0YS0+c3RhX2lkLAogCQkubWFjX2lkX25fY29sb3IgPSBjcHVfdG9fbGUzMihtdm1fc3RhLT5tYWNfaWRfbl9jb2xvciksCkBAIC0yMDksNiArMjA5LDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHVzZWRfaHdfcXVldWVzOwogCXN0cnVjdCBpd2xfbXZtX3N0YSAqbXZtc3RhID0gaXdsX212bV9zdGFfZnJvbV9tYWM4MDIxMShzdGEpOworCXVuc2lnbmVkIGludCB3ZGdfdGltZW91dCA9IGl3bG12bV9tb2RfcGFyYW1zLnRmZF9xX2hhbmdfZGV0ZWN0ID8KKwkJCQkJbXZtLT5jZmctPmJhc2VfcGFyYW1zLT53ZF90aW1lb3V0IDoKKwkJCQkJSVdMX1dBVENIRE9HX0RJU0FCTEVEOwogCXUzMiBhYzsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm12bS0+bXV0ZXgpOwpAQCAtMjMyLDcgKzIzNSw3IEBACiAJLyogRm91bmQgYSBwbGFjZSBmb3IgYWxsIHF1ZXVlcyAtIGVuYWJsZSB0aGVtICovCiAJZm9yIChhYyA9IDA7IGFjIDwgSUVFRTgwMjExX05VTV9BQ1M7IGFjKyspIHsKIAkJaXdsX212bV9lbmFibGVfYWNfdHhxKG12bSwgbXZtc3RhLT5od19xdWV1ZVthY10sCi0JCQkJICAgICAgaXdsX212bV9hY190b190eF9maWZvW2FjXSk7CisJCQkJICAgICAgaXdsX212bV9hY190b190eF9maWZvW2FjXSwgd2RnX3RpbWVvdXQpOwogCQltdm1zdGEtPnRmZF9xdWV1ZV9tc2sgfD0gQklUKG12bXN0YS0+aHdfcXVldWVbYWNdKTsKIAl9CiAKQEAgLTI1MCw4ICsyNTMsOCBAQAogCiAJLyogZGlzYWJsZSB0aGUgVERMUyBTVEEtc3BlY2lmaWMgcXVldWVzICovCiAJc3RhX21zayA9IG12bXN0YS0+dGZkX3F1ZXVlX21zazsKLQlmb3JfZWFjaF9zZXRfYml0KGksICZzdGFfbXNrLCBzaXplb2Yoc3RhX21zaykpCi0JCWl3bF9tdm1fZGlzYWJsZV90eHEobXZtLCBpKTsKKwlmb3JfZWFjaF9zZXRfYml0KGksICZzdGFfbXNrLCBzaXplb2Yoc3RhX21zaykgKiBCSVRTX1BFUl9CWVRFKQorCQlpd2xfbXZtX2Rpc2FibGVfdHhxKG12bSwgaSwgMCk7CiB9CiAKIGludCBpd2xfbXZtX2FkZF9zdGEoc3RydWN0IGl3bF9tdm0gKm12bSwKQEAgLTI1OSw3ICsyNjIsNyBAQAogCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlzdHJ1Y3QgaXdsX212bV92aWYgKm12bXZpZiA9IGl3bF9tdm1fdmlmX2Zyb21fbWFjODAyMTEodmlmKTsKLQlzdHJ1Y3QgaXdsX212bV9zdGEgKm12bV9zdGEgPSAodm9pZCAqKXN0YS0+ZHJ2X3ByaXY7CisJc3RydWN0IGl3bF9tdm1fc3RhICptdm1fc3RhID0gaXdsX212bV9zdGFfZnJvbV9tYWM4MDIxMShzdGEpOwogCWludCBpLCByZXQsIHN0YV9pZDsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm12bS0+bXV0ZXgpOwpAQCAtNDY0LDggKzQ2Nyw4IEBACiAJCWlmIChtdm0tPnRmZF9kcmFpbmVkW3N0YV9pZF0pIHsKIAkJCXVuc2lnbmVkIGxvbmcgaSwgbXNrID0gbXZtLT50ZmRfZHJhaW5lZFtzdGFfaWRdOwogCi0JCQlmb3JfZWFjaF9zZXRfYml0KGksICZtc2ssIHNpemVvZihtc2spKQotCQkJCWl3bF9tdm1fZGlzYWJsZV90eHEobXZtLCBpKTsKKwkJCWZvcl9lYWNoX3NldF9iaXQoaSwgJm1zaywgc2l6ZW9mKG1zaykgKiBCSVRTX1BFUl9CWVRFKQorCQkJCWl3bF9tdm1fZGlzYWJsZV90eHEobXZtLCBpLCAwKTsKIAogCQkJbXZtLT50ZmRfZHJhaW5lZFtzdGFfaWRdID0gMDsKIAkJCUlXTF9ERUJVR19URExTKG12bSwgIkRyYWluZWQgc3RhICVkLCB3aXRoIHF1ZXVlcyAlbGRcbiIsCkBAIC00ODEsNyArNDg0LDcgQEAKIAkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlzdHJ1Y3QgaXdsX212bV92aWYgKm12bXZpZiA9IGl3bF9tdm1fdmlmX2Zyb21fbWFjODAyMTEodmlmKTsKLQlzdHJ1Y3QgaXdsX212bV9zdGEgKm12bV9zdGEgPSAodm9pZCAqKXN0YS0+ZHJ2X3ByaXY7CisJc3RydWN0IGl3bF9tdm1fc3RhICptdm1fc3RhID0gaXdsX212bV9zdGFfZnJvbV9tYWM4MDIxMShzdGEpOwogCWludCByZXQ7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtdm0tPm11dGV4KTsKQEAgLTYyNiwxMyArNjI5LDE2IEBACiAKIGludCBpd2xfbXZtX2FkZF9hdXhfc3RhKHN0cnVjdCBpd2xfbXZtICptdm0pCiB7CisJdW5zaWduZWQgaW50IHdkZ190aW1lb3V0ID0gaXdsbXZtX21vZF9wYXJhbXMudGZkX3FfaGFuZ19kZXRlY3QgPworCQkJCQltdm0tPmNmZy0+YmFzZV9wYXJhbXMtPndkX3RpbWVvdXQgOgorCQkJCQlJV0xfV0FUQ0hET0dfRElTQUJMRUQ7CiAJaW50IHJldDsKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm12bS0+bXV0ZXgpOwogCiAJLyogTWFwIEF1eCBxdWV1ZSB0byBmaWZvIC0gbmVlZHMgdG8gaGFwcGVuIGJlZm9yZSBhZGRpbmcgQXV4IHN0YXRpb24gKi8KIAlpd2xfbXZtX2VuYWJsZV9hY190eHEobXZtLCBtdm0tPmF1eF9xdWV1ZSwKLQkJCSAgICAgIElXTF9NVk1fVFhfRklGT19NQ0FTVCk7CisJCQkgICAgICBJV0xfTVZNX1RYX0ZJRk9fTUNBU1QsIHdkZ190aW1lb3V0KTsKIAogCS8qIEFsbG9jYXRlIGF1eCBzdGF0aW9uIGFuZCBhc3NpZ24gdG8gaXQgdGhlIGF1eCBxdWV1ZSAqLwogCXJldCA9IGl3bF9tdm1fYWxsb2NhdGVfaW50X3N0YShtdm0sICZtdm0tPmF1eF9zdGEsIEJJVChtdm0tPmF1eF9xdWV1ZSksCkBAIC03NzQsNyArNzgwLDcgQEAKIGludCBpd2xfbXZtX3N0YV9yeF9hZ2coc3RydWN0IGl3bF9tdm0gKm12bSwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgIGludCB0aWQsIHUxNiBzc24sIGJvb2wgc3RhcnQpCiB7Ci0Jc3RydWN0IGl3bF9tdm1fc3RhICptdm1fc3RhID0gKHZvaWQgKilzdGEtPmRydl9wcml2OworCXN0cnVjdCBpd2xfbXZtX3N0YSAqbXZtX3N0YSA9IGl3bF9tdm1fc3RhX2Zyb21fbWFjODAyMTEoc3RhKTsKIAlzdHJ1Y3QgaXdsX212bV9hZGRfc3RhX2NtZCBjbWQgPSB7fTsKIAlpbnQgcmV0OwogCXUzMiBzdGF0dXM7CkBAIC04MzQsNyArODQwLDcgQEAKIHN0YXRpYyBpbnQgaXdsX212bV9zdGFfdHhfYWdnKHN0cnVjdCBpd2xfbXZtICptdm0sIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCiAJCQkgICAgICBpbnQgdGlkLCB1OCBxdWV1ZSwgYm9vbCBzdGFydCkKIHsKLQlzdHJ1Y3QgaXdsX212bV9zdGEgKm12bV9zdGEgPSAodm9pZCAqKXN0YS0+ZHJ2X3ByaXY7CisJc3RydWN0IGl3bF9tdm1fc3RhICptdm1fc3RhID0gaXdsX212bV9zdGFfZnJvbV9tYWM4MDIxMShzdGEpOwogCXN0cnVjdCBpd2xfbXZtX2FkZF9zdGFfY21kIGNtZCA9IHt9OwogCWludCByZXQ7CiAJdTMyIHN0YXR1czsKQEAgLTk2NSw2ICs5NzEsOSBAQAogewogCXN0cnVjdCBpd2xfbXZtX3N0YSAqbXZtc3RhID0gaXdsX212bV9zdGFfZnJvbV9tYWM4MDIxMShzdGEpOwogCXN0cnVjdCBpd2xfbXZtX3RpZF9kYXRhICp0aWRfZGF0YSA9ICZtdm1zdGEtPnRpZF9kYXRhW3RpZF07CisJdW5zaWduZWQgaW50IHdkZ190aW1lb3V0ID0gaXdsbXZtX21vZF9wYXJhbXMudGZkX3FfaGFuZ19kZXRlY3QgPworCQkJCQltdm0tPmNmZy0+YmFzZV9wYXJhbXMtPndkX3RpbWVvdXQgOgorCQkJCQlJV0xfV0FUQ0hET0dfRElTQUJMRUQ7CiAJaW50IHF1ZXVlLCBmaWZvLCByZXQ7CiAJdTE2IHNzbjsKIApAQCAtOTg4LDcgKzk5Nyw3IEBACiAJCXJldHVybiAtRUlPOwogCiAJaXdsX212bV9lbmFibGVfYWdnX3R4cShtdm0sIHF1ZXVlLCBmaWZvLCBtdm1zdGEtPnN0YV9pZCwgdGlkLAotCQkJICAgICAgIGJ1Zl9zaXplLCBzc24pOworCQkJICAgICAgIGJ1Zl9zaXplLCBzc24sIHdkZ190aW1lb3V0KTsKIAogCS8qCiAJICogRXZlbiB0aG91Z2ggaW4gdGhlb3J5IHRoZSBwZWVyIGNvdWxkIGhhdmUgZGlmZmVyZW50CkBAIC0xMDU4LDcgKzEwNjcsNyBAQAogCiAJCWl3bF9tdm1fc3RhX3R4X2FnZyhtdm0sIHN0YSwgdGlkLCB0eHFfaWQsIGZhbHNlKTsKIAotCQlpd2xfbXZtX2Rpc2FibGVfdHhxKG12bSwgdHhxX2lkKTsKKwkJaXdsX212bV9kaXNhYmxlX3R4cShtdm0sIHR4cV9pZCwgMCk7CiAJCXJldHVybiAwOwogCWNhc2UgSVdMX0FHR19TVEFSVElORzoKIAljYXNlIElXTF9FTVBUWUlOR19IV19RVUVVRV9BRERCQToKQEAgLTExMTYsNyArMTEyNSw3IEBACiAKIAkJaXdsX212bV9zdGFfdHhfYWdnKG12bSwgc3RhLCB0aWQsIHR4cV9pZCwgZmFsc2UpOwogCi0JCWl3bF9tdm1fZGlzYWJsZV90eHEobXZtLCB0aWRfZGF0YS0+dHhxX2lkKTsKKwkJaXdsX212bV9kaXNhYmxlX3R4cShtdm0sIHRpZF9kYXRhLT50eHFfaWQsIDApOwogCX0KIAogCW12bS0+cXVldWVfdG9fbWFjODAyMTFbdGlkX2RhdGEtPnR4cV9pZF0gPQpAQCAtMTE0NCwxMCArMTE1MywxMCBAQAogc3RhdGljIHU4IGl3bF9tdm1fZ2V0X2tleV9zdGFfaWQoc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKLQlzdHJ1Y3QgaXdsX212bV92aWYgKm12bXZpZiA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgaXdsX212bV92aWYgKm12bXZpZiA9IGl3bF9tdm1fdmlmX2Zyb21fbWFjODAyMTEodmlmKTsKIAogCWlmIChzdGEpIHsKLQkJc3RydWN0IGl3bF9tdm1fc3RhICptdm1fc3RhID0gKHZvaWQgKilzdGEtPmRydl9wcml2OworCQlzdHJ1Y3QgaXdsX212bV9zdGEgKm12bV9zdGEgPSBpd2xfbXZtX3N0YV9mcm9tX21hYzgwMjExKHN0YSk7CiAKIAkJcmV0dXJuIG12bV9zdGEtPnN0YV9pZDsKIAl9CkBAIC0xMTk2LDYgKzEyMDUsNyBAQAogCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKIAkJa2V5X2ZsYWdzIHw9IGNwdV90b19sZTE2KFNUQV9LRVlfRkxHX1dFUF8xM0JZVEVTKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9XRVA0MDoKIAkJa2V5X2ZsYWdzIHw9IGNwdV90b19sZTE2KFNUQV9LRVlfRkxHX1dFUCk7CiAJCW1lbWNweShjbWQua2V5ICsgMywga2V5Y29uZi0+a2V5LCBrZXljb25mLT5rZXlsZW4pOwpAQCAtMTI4MCw3ICsxMjkwLDcgQEAKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKLQlzdHJ1Y3QgaXdsX212bV92aWYgKm12bXZpZiA9ICh2b2lkICopdmlmLT5kcnZfcHJpdjsKKwlzdHJ1Y3QgaXdsX212bV92aWYgKm12bXZpZiA9IGl3bF9tdm1fdmlmX2Zyb21fbWFjODAyMTEodmlmKTsKIAogCWlmIChzdGEpCiAJCXJldHVybiBzdGEtPmFkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS90ZGxzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS90ZGxzLmMKaW5kZXggYzBlMDBiYS4uYTg3YjUwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vdGRscy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3RkbHMuYwpAQCAtNjQsNiArNjQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSAibXZtLmgiCiAjaW5jbHVkZSAidGltZS1ldmVudC5oIgorI2luY2x1ZGUgIml3bC1pby5oIgorI2luY2x1ZGUgIml3bC1wcnBoLmgiCiAKICNkZWZpbmUgVFVfVE9fVVMoeCkgKHggKiAxMDI0KQogI2RlZmluZSBUVV9UT19NUyh4KSAoVFVfVE9fVVMoeCkgLyAxMDAwKQpAQCAtMjI4LDYgKzIzMCw4IEBACiAJCXJldHVybiAiSURMRSI7CiAJY2FzZSBJV0xfTVZNX1RETFNfU1dfUkVRX1NFTlQ6CiAJCXJldHVybiAiUkVRIFNFTlQiOworCWNhc2UgSVdMX01WTV9URExTX1NXX1JFU1BfUkNWRDoKKwkJcmV0dXJuICJSRVNQIFJFQ0VJVkVEIjsKIAljYXNlIElXTF9NVk1fVERMU19TV19SRVFfUkNWRDoKIAkJcmV0dXJuICJSRVEgUkVDRUlWRUQiOwogCWNhc2UgSVdMX01WTV9URExTX1NXX0FDVElWRToKQEAgLTI0OCw2ICsyNTIsMTEgQEAKIAkJICAgICAgIGl3bF9tdm1fdGRsc19jc19zdGF0ZV9zdHIoc3RhdGUpKTsKIAltdm0tPnRkbHNfY3Muc3RhdGUgPSBzdGF0ZTsKIAorCS8qIHdlIG9ubHkgc2VuZCByZXF1ZXN0cyB0byBvdXIgc3dpdGNoaW5nIHBlZXIgLSB1cGRhdGUgc2VudCB0aW1lICovCisJaWYgKHN0YXRlID09IElXTF9NVk1fVERMU19TV19SRVFfU0VOVCkKKwkJbXZtLT50ZGxzX2NzLnBlZXIuc2VudF90aW1lc3RhbXAgPQorCQkJaXdsX3JlYWRfcHJwaChtdm0tPnRyYW5zLCBERVZJQ0VfU1lTVEVNX1RJTUVfUkVHKTsKKwogCWlmIChzdGF0ZSA9PSBJV0xfTVZNX1RETFNfU1dfSURMRSkKIAkJbXZtLT50ZGxzX2NzLmN1cl9zdGFfaWQgPSBJV0xfTVZNX1NUQVRJT05fQ09VTlQ7CiB9CkBAIC0zMDAsNyArMzA5LDcgQEAKIHN0YXRpYyBpbnQKIGl3bF9tdm1fdGRsc19jaGVja19hY3Rpb24oc3RydWN0IGl3bF9tdm0gKm12bSwKIAkJCSAgZW51bSBpd2xfdGRsc19jaGFubmVsX3N3aXRjaF90eXBlIHR5cGUsCi0JCQkgIGNvbnN0IHU4ICpwZWVyLCBib29sIHBlZXJfaW5pdGlhdG9yKQorCQkJICBjb25zdCB1OCAqcGVlciwgYm9vbCBwZWVyX2luaXRpYXRvciwgdTMyIHRpbWVzdGFtcCkKIHsKIAlib29sIHNhbWVfcGVlciA9IGZhbHNlOwogCWludCByZXQgPSAwOwpAQCAtMzI1LDE3ICszMzQsMzAgQEAKIAkJCXJldCA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCWNhc2UgSVdMX01WTV9URExTX1NXX1JFUV9TRU5UOgorCQkvKiBvbmx5IGFsbG93IHJlcXVlc3RzIGZyb20gdGhlIHNhbWUgcGVlciAqLworCQlpZiAoIXNhbWVfcGVlcikKKwkJCXJldCA9IC1FQlVTWTsKKwkJZWxzZSBpZiAodHlwZSA9PSBURExTX1NFTkRfQ0hBTl9TV19SRVNQX0FORF9NT1ZFX0NIICYmCisJCQkgIXBlZXJfaW5pdGlhdG9yKQorCQkJLyoKKwkJCSAqIFdlIHJlY2VpdmVkIGEgY2gtc3dpdGNoIHJlcXVlc3Qgd2hpbGUgYW4gb3V0Z29pbmcKKwkJCSAqIG9uZSBpcyBwZW5kaW5nLiBBbGxvdyBpdCBpZiB0aGUgcGVlciBpcyB0aGUgbGluaworCQkJICogaW5pdGlhdG9yLgorCQkJICovCisJCQlyZXQgPSAtRUJVU1k7CisJCWVsc2UgaWYgKHR5cGUgPT0gVERMU19TRU5EX0NIQU5fU1dfUkVRKQorCQkJLyogd2FpdCBmb3IgaWRsZSBiZWZvcmUgc2VuZGluZyBhbm90aGVyIHJlcXVlc3QgKi8KKwkJCXJldCA9IC1FQlVTWTsKKwkJZWxzZSBpZiAodGltZXN0YW1wIDw9IG12bS0+dGRsc19jcy5wZWVyLnNlbnRfdGltZXN0YW1wKQorCQkJLyogd2UgZ290IGEgc3RhbGUgcmVzcG9uc2UgLSBpZ25vcmUgaXQgKi8KKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgSVdMX01WTV9URExTX1NXX1JFU1BfUkNWRDoKIAkJLyoKLQkJICogV2UgcmVjZWl2ZWQgYSBjaC1zd2l0Y2ggcmVxdWVzdCB3aGlsZSBhbiBvdXRnb2luZyBvbmUgaXMKLQkJICogcGVuZGluZy4gQWxsb3cgaXQgdG8gcHJvY2VlZCBpZiB0aGUgb3RoZXIgcGVlciBpcyB0aGUgc2FtZQotCQkgKiBvbmUgd2Ugc2VudCB0bywgYW5kIHdlIGFyZSBub3QgdGhlIGxpbmsgaW5pdGlhdG9yLgorCQkgKiB3ZSBhcmUgd2FpdGluZyBmb3IgdGhlIEZXIHRvIGdpdmUgYW4gImFjdGl2ZSIgbm90aWZpY2F0aW9uLAorCQkgKiBzbyBpZ25vcmUgcmVxdWVzdHMgaW4gdGhlIG1lYW50aW1lCiAJCSAqLwotCQlpZiAodHlwZSA9PSBURExTX1NFTkRfQ0hBTl9TV19SRVNQX0FORF9NT1ZFX0NIKSB7Ci0JCQlpZiAoIXNhbWVfcGVlcikKLQkJCQlyZXQgPSAtRUJVU1k7Ci0JCQllbHNlIGlmICghcGVlcl9pbml0aWF0b3IpIC8qIHdlIGFyZSB0aGUgaW5pdGlhdG9yICovCi0JCQkJcmV0ID0gLUVCVVNZOwotCQl9CisJCXJldCA9IC1FQlVTWTsKIAkJYnJlYWs7CiAJY2FzZSBJV0xfTVZNX1RETFNfU1dfUkVRX1JDVkQ6CiAJCS8qIGFzIGFib3ZlLCBhbGxvdyB0aGUgbGluayBpbml0aWF0b3IgdG8gcHJvY2VlZCAqLwpAQCAtMzQ5LDkgKzM3MSwxMiBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgSVdMX01WTV9URExTX1NXX0FDVElWRToKLQkJLyogd2UgZG9uJ3QgYWxsb3cgaW5pdGlhdGlvbnMgZHVyaW5nIGFjdGl2ZSBjaGFubmVsIHN3aXRjaCAqLwotCQlpZiAodHlwZSA9PSBURExTX1NFTkRfQ0hBTl9TV19SRVEpCi0JCQlyZXQgPSAtRUlOVkFMOworCQkvKgorCQkgKiB0aGUgb25seSB2YWxpZCByZXF1ZXN0IHdoZW4gYWN0aXZlIGlzIGEgcmVxdWVzdCB0byByZXR1cm4KKwkJICogdG8gdGhlIGJhc2UgY2hhbm5lbCBieSB0aGUgY3VycmVudCBvZmYtY2hhbm5lbCBwZWVyCisJCSAqLworCQlpZiAodHlwZSAhPSBURExTX01PVkVfQ0ggfHwgIXNhbWVfcGVlcikKKwkJCXJldCA9IC1FQlVTWTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zODQsNyArNDA5LDggQEAKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm12bS0+bXV0ZXgpOwogCi0JcmV0ID0gaXdsX212bV90ZGxzX2NoZWNrX2FjdGlvbihtdm0sIHR5cGUsIHBlZXIsIHBlZXJfaW5pdGlhdG9yKTsKKwlyZXQgPSBpd2xfbXZtX3RkbHNfY2hlY2tfYWN0aW9uKG12bSwgdHlwZSwgcGVlciwgcGVlcl9pbml0aWF0b3IsCisJCQkJCXRpbWVzdGFtcCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNDczLDYgKzQ5OSw4IEBACiAJCQkJCSAgICAgdHlwZSA9PSBURExTX1NFTkRfQ0hBTl9TV19SRVEgPwogCQkJCQkgICAgIElXTF9NVk1fVERMU19TV19SRVFfU0VOVCA6CiAJCQkJCSAgICAgSVdMX01WTV9URExTX1NXX1JFUV9SQ1ZEKTsKKwl9IGVsc2UgeworCQlpd2xfbXZtX3RkbHNfdXBkYXRlX2NzX3N0YXRlKG12bSwgSVdMX01WTV9URExTX1NXX1JFU1BfUkNWRCk7CiAJfQogCiBvdXQ6CkBAIC02NTcsMTIgKzY4NSwxNSBAQAogCXN0cnVjdCBpd2xfbXZtICptdm0gPSBJV0xfTUFDODAyMTFfR0VUX01WTShodyk7CiAJZW51bSBpd2xfdGRsc19jaGFubmVsX3N3aXRjaF90eXBlIHR5cGU7CiAJdW5zaWduZWQgaW50IGRlbGF5OworCWNvbnN0IGNoYXIgKmFjdGlvbl9zdHIgPQorCQlwYXJhbXMtPmFjdGlvbl9jb2RlID09IFdMQU5fVERMU19DSEFOTkVMX1NXSVRDSF9SRVFVRVNUID8KKwkJIlJFUSIgOiAiUkVTUCI7CiAKIAltdXRleF9sb2NrKCZtdm0tPm11dGV4KTsKIAogCUlXTF9ERUJVR19URExTKG12bSwKLQkJICAgICAgICJSZWNlaXZlZCBURExTIGNoIHN3aXRjaCBhY3Rpb24gJWQgZnJvbSAlcE0gc3RhdHVzICVkXG4iLAotCQkgICAgICAgcGFyYW1zLT5hY3Rpb25fY29kZSwgcGFyYW1zLT5zdGEtPmFkZHIsIHBhcmFtcy0+c3RhdHVzKTsKKwkJICAgICAgICJSZWNlaXZlZCBURExTIGNoIHN3aXRjaCBhY3Rpb24gJXMgZnJvbSAlcE0gc3RhdHVzICVkXG4iLAorCQkgICAgICAgYWN0aW9uX3N0ciwgcGFyYW1zLT5zdGEtPmFkZHIsIHBhcmFtcy0+c3RhdHVzKTsKIAogCS8qCiAJICogd2UgZ290IGEgbm9uLXplcm8gc3RhdHVzIGZyb20gYSBwZWVyIHdlIHdlcmUgc3dpdGNoaW5nIHRvIC0gbW92ZSB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vdHQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3R0LmMKaW5kZXggMmIxZTYxZi4uYmE2MTVhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vdHQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS90dC5jCkBAIC02OSw2ICs2OSw3IEBACiAKIHN0YXRpYyB2b2lkIGl3bF9tdm1fZW50ZXJfY3RraWxsKHN0cnVjdCBpd2xfbXZtICptdm0pCiB7CisJc3RydWN0IGl3bF9tdm1fdHRfbWdtdCAqdHQgPSAmbXZtLT50aGVybWFsX3Rocm90dGxlOwogCXUzMiBkdXJhdGlvbiA9IG12bS0+dGhlcm1hbF90aHJvdHRsZS5wYXJhbXMtPmN0X2tpbGxfZHVyYXRpb247CiAKIAlpZiAodGVzdF9iaXQoSVdMX01WTV9TVEFUVVNfSFdfQ1RLSUxMLCAmbXZtLT5zdGF0dXMpKQpAQCAtNzcsMTIgKzc4LDE1IEBACiAJSVdMX0VSUihtdm0sICJFbnRlciBDVCBLaWxsXG4iKTsKIAlpd2xfbXZtX3NldF9od19jdGtpbGxfc3RhdGUobXZtLCB0cnVlKTsKIAorCXR0LT50aHJvdHRsZSA9IGZhbHNlOworCXR0LT5keW5hbWljX3NtcHMgPSBmYWxzZTsKKwogCS8qIERvbid0IHNjaGVkdWxlIGFuIGV4aXQgd29yayBpZiB3ZSdyZSBpbiB0ZXN0IG1vZGUsIHNpbmNlCiAJICogdGhlIHRlbXBlcmF0dXJlIHdpbGwgbm90IGNoYW5nZSB1bmxlc3Mgd2UgbWFudWFsbHkgc2V0IGl0CiAJICogYWdhaW4gKG9yIGRpc2FibGUgdGVzdGluZykuCiAJICovCiAJaWYgKCFtdm0tPnRlbXBlcmF0dXJlX3Rlc3QpCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbXZtLT50aGVybWFsX3Rocm90dGxlLmN0X2tpbGxfZXhpdCwKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZ0dC0+Y3Rfa2lsbF9leGl0LAogCQkJCSAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoZHVyYXRpb24gKiBIWikpOwogfQogCkBAIC00NTIsNiArNDU2LDcgQEAKIAkJdHQtPnBhcmFtcyA9ICZpd2w3MDAwX3R0X3BhcmFtczsKIAogCXR0LT50aHJvdHRsZSA9IGZhbHNlOworCXR0LT5keW5hbWljX3NtcHMgPSBmYWxzZTsKIAl0dC0+bWluX2JhY2tvZmYgPSBtaW5fYmFja29mZjsKIAlJTklUX0RFTEFZRURfV09SSygmdHQtPmN0X2tpbGxfZXhpdCwgY2hlY2tfZXhpdF9jdGtpbGwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3R4LmMKaW5kZXggNDMzMzMwNi4uMDczMDRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS90eC5jCkBAIC05MCw4ICs5MCw2IEBACiAKIAlpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoZmMpKQogCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX1RTRjsKLQllbHNlIGlmIChpZWVlODAyMTFfaXNfYmFja19yZXEoZmMpKQotCQl0eF9mbGFncyB8PSBUWF9DTURfRkxHX0FDSyB8IFRYX0NNRF9GTEdfQkFSOwogCiAJaWYgKGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKSkKIAkJdHhfZmxhZ3MgfD0gVFhfQ01EX0ZMR19NT1JFX0ZSQUc7CkBAIC0xMDAsNiArOTgsMTUgQEAKIAkJdTggKnFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJCXR4X2NtZC0+dGlkX3RzcGVjID0gcWNbMF0gJiAweGY7CiAJCXR4X2ZsYWdzICY9IH5UWF9DTURfRkxHX1NFUV9DVEw7CisJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfYmFja19yZXEoZmMpKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfYmFyICpiYXIgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwkJdTE2IGNvbnRyb2wgPSBsZTE2X3RvX2NwdShiYXItPmNvbnRyb2wpOworCisJCXR4X2ZsYWdzIHw9IFRYX0NNRF9GTEdfQUNLIHwgVFhfQ01EX0ZMR19CQVI7CisJCXR4X2NtZC0+dGlkX3RzcGVjID0gKGNvbnRyb2wgJgorCQkJCSAgICAgSUVFRTgwMjExX0JBUl9DVFJMX1RJRF9JTkZPX01BU0spID4+CisJCQlJRUVFODAyMTFfQkFSX0NUUkxfVElEX0lORk9fU0hJRlQ7CisJCVdBUk5fT05fT05DRSh0eF9jbWQtPnRpZF90c3BlYyA+PSBJV0xfTUFYX1RJRF9DT1VOVCk7CiAJfSBlbHNlIHsKIAkJdHhfY21kLT50aWRfdHNwZWMgPSBJV0xfVElEX05PTl9RT1M7CiAJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQVNTSUdOX1NFUSkKQEAgLTIxMyw3ICsyMjAsNyBAQAogCXJhdGVfcGxjcCA9IGl3bF9tdm1fbWFjODAyMTFfaWR4X3RvX2h3cmF0ZShyYXRlX2lkeCk7CiAKIAltdm0tPm1nbXRfbGFzdF9hbnRlbm5hX2lkeCA9Ci0JCWl3bF9tdm1fbmV4dF9hbnRlbm5hKG12bSwgbXZtLT5mdy0+dmFsaWRfdHhfYW50LAorCQlpd2xfbXZtX25leHRfYW50ZW5uYShtdm0sIGl3bF9tdm1fZ2V0X3ZhbGlkX3R4X2FudChtdm0pLAogCQkJCSAgICAgbXZtLT5tZ210X2xhc3RfYW50ZW5uYV9pZHgpOwogCiAJaWYgKGluZm8tPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWiAmJgpAQCAtNTAwLDcgKzUwNyw3IEBACiAJCUlXTF9ERUJVR19UWF9RVUVVRVMobXZtLAogCQkJCSAgICAiQ2FuIGNvbnRpbnVlIERFTEJBIGZsb3cgc3NuID0gbmV4dF9yZWNsID0gJWRcbiIsCiAJCQkJICAgIHRpZF9kYXRhLT5uZXh0X3JlY2xhaW1lZCk7Ci0JCWl3bF9tdm1fZGlzYWJsZV90eHEobXZtLCB0aWRfZGF0YS0+dHhxX2lkKTsKKwkJaXdsX212bV9kaXNhYmxlX3R4cShtdm0sIHRpZF9kYXRhLT50eHFfaWQsIENNRF9BU1lOQyk7CiAJCXRpZF9kYXRhLT5zdGF0ZSA9IElXTF9BR0dfT0ZGOwogCQkvKgogCQkgKiB3ZSBjYW4ndCBob2xkIHRoZSBtdXRleCAtIGJ1dCBzaW5jZSB3ZSBhcmUgYWZ0ZXIgYSBzZXF1ZW5jZQpAQCAtNjYwLDcgKzY2Nyw4IEBACiAKIAkJLyogU2luZ2xlIGZyYW1lIGZhaWx1cmUgaW4gYW4gQU1QRFUgcXVldWUgPT4gc2VuZCBCQVIgKi8KIAkJaWYgKHR4cV9pZCA+PSBtdm0tPmZpcnN0X2FnZ19xdWV1ZSAmJgotCQkgICAgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FDSykpCisJCSAgICAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSAmJgorCQkgICAgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX1RYX0ZJTFRFUkVEKSkKIAkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9TVEFUX0FNUERVX05PX0JBQ0s7CiAKIAkJLyogVy9BIEZXIGJ1Zzogc2VxX2N0bCBpcyB3cm9uZyB3aGVuIHRoZSBzdGF0dXMgaXNuJ3Qgc3VjY2VzcyAqLwpAQCAtOTIzLDYgKzkzMSwxMSBAQAogCXN0YV9pZCA9IGJhX25vdGlmLT5zdGFfaWQ7CiAJdGlkID0gYmFfbm90aWYtPnRpZDsKIAorCWlmIChXQVJOX09OQ0Uoc3RhX2lkID49IElXTF9NVk1fU1RBVElPTl9DT1VOVCB8fAorCQkgICAgICB0aWQgPj0gSVdMX01BWF9USURfQ09VTlQsCisJCSAgICAgICJzdGFfaWQgJWQgdGlkICVkIiwgc3RhX2lkLCB0aWQpKQorCQlyZXR1cm4gMDsKKwogCXJjdV9yZWFkX2xvY2soKTsKIAogCXN0YSA9IHJjdV9kZXJlZmVyZW5jZShtdm0tPmZ3X2lkX3RvX21hY19pZFtzdGFfaWRdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3V0aWxzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL212bS91dGlscy5jCmluZGV4IDkxNzQzMWUuLjhkZWNmOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvbXZtL3V0aWxzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9tdm0vdXRpbHMuYwpAQCAtNDMyLDcgKzQzMiw3IEBACiAJCQltdm0tPnN0YXR1cywgdGFibGUudmFsaWQpOwogCX0KIAotCUlXTF9FUlIobXZtLCAiMHglMDhYIHwgJS0yOHNcbiIsIHRhYmxlLmVycm9yX2lkLAorCUlXTF9FUlIobXZtLCAiMHglMDhYIHwgJXNcbiIsIHRhYmxlLmVycm9yX2lkLAogCQlkZXNjX2xvb2t1cCh0YWJsZS5lcnJvcl9pZCkpOwogCUlXTF9FUlIobXZtLCAiMHglMDhYIHwgdW1hYyBicmFuY2hsaW5rMVxuIiwgdGFibGUuYmxpbmsxKTsKIAlJV0xfRVJSKG12bSwgIjB4JTA4WCB8IHVtYWMgYnJhbmNobGluazJcbiIsIHRhYmxlLmJsaW5rMik7CkBAIC01MzEsNDkgKzUzMSw1MCBAQAogfQogCiB2b2lkIGl3bF9tdm1fZW5hYmxlX3R4cShzdHJ1Y3QgaXdsX212bSAqbXZtLCBpbnQgcXVldWUsIHUxNiBzc24sCi0JCQljb25zdCBzdHJ1Y3QgaXdsX3RyYW5zX3R4cV9zY2RfY2ZnICpjZmcpCisJCQljb25zdCBzdHJ1Y3QgaXdsX3RyYW5zX3R4cV9zY2RfY2ZnICpjZmcsCisJCQl1bnNpZ25lZCBpbnQgd2RnX3RpbWVvdXQpCiB7Ci0JaWYgKGl3bF9tdm1faXNfZHFhX3N1cHBvcnRlZChtdm0pKSB7Ci0JCXN0cnVjdCBpd2xfc2NkX3R4cV9jZmdfY21kIGNtZCA9IHsKLQkJCS5zY2RfcXVldWUgPSBxdWV1ZSwKLQkJCS5lbmFibGUgPSAxLAotCQkJLndpbmRvdyA9IGNmZy0+ZnJhbWVfbGltaXQsCi0JCQkuc3RhX2lkID0gY2ZnLT5zdGFfaWQsCi0JCQkuc3NuID0gY3B1X3RvX2xlMTYoc3NuKSwKLQkJCS50eF9maWZvID0gY2ZnLT5maWZvLAotCQkJLmFnZ3JlZ2F0ZSA9IGNmZy0+YWdncmVnYXRlLAotCQkJLmZsYWdzID0gSVdMX1NDRF9GTEFHU19EUUFfRU5BQkxFRCwKLQkJCS50aWQgPSBjZmctPnRpZCwKLQkJCS5jb250cm9sID0gSVdMX1NDRF9DT05UUk9MX1NFVF9TU04sCi0JCX07Ci0JCWludCByZXQgPSBpd2xfbXZtX3NlbmRfY21kX3BkdShtdm0sIFNDRF9RVUVVRV9DRkcsIDAsCi0JCQkJCSAgICAgICBzaXplb2YoY21kKSwgJmNtZCk7Ci0JCWlmIChyZXQpCi0JCQlJV0xfRVJSKG12bSwKLQkJCQkiRmFpbGVkIHRvIGNvbmZpZ3VyZSBxdWV1ZSAlZCBvbiBGSUZPICVkXG4iLAotCQkJCXF1ZXVlLCBjZmctPmZpZm8pOworCXN0cnVjdCBpd2xfc2NkX3R4cV9jZmdfY21kIGNtZCA9IHsKKwkJLnNjZF9xdWV1ZSA9IHF1ZXVlLAorCQkuZW5hYmxlID0gMSwKKwkJLndpbmRvdyA9IGNmZy0+ZnJhbWVfbGltaXQsCisJCS5zdGFfaWQgPSBjZmctPnN0YV9pZCwKKwkJLnNzbiA9IGNwdV90b19sZTE2KHNzbiksCisJCS50eF9maWZvID0gY2ZnLT5maWZvLAorCQkuYWdncmVnYXRlID0gY2ZnLT5hZ2dyZWdhdGUsCisJCS50aWQgPSBjZmctPnRpZCwKKwl9OworCisJaWYgKCFpd2xfbXZtX2lzX3NjZF9jZmdfc3VwcG9ydGVkKG12bSkpIHsKKwkJaXdsX3RyYW5zX3R4cV9lbmFibGVfY2ZnKG12bS0+dHJhbnMsIHF1ZXVlLCBzc24sIGNmZywKKwkJCQkJIHdkZ190aW1lb3V0KTsKKwkJcmV0dXJuOwogCX0KIAotCWl3bF90cmFuc190eHFfZW5hYmxlX2NmZyhtdm0tPnRyYW5zLCBxdWV1ZSwgc3NuLAotCQkJCSBpd2xfbXZtX2lzX2RxYV9zdXBwb3J0ZWQobXZtKSA/IE5VTEwgOiBjZmcpOworCWl3bF90cmFuc190eHFfZW5hYmxlX2NmZyhtdm0tPnRyYW5zLCBxdWV1ZSwgc3NuLCBOVUxMLCB3ZGdfdGltZW91dCk7CisJV0FSTihpd2xfbXZtX3NlbmRfY21kX3BkdShtdm0sIFNDRF9RVUVVRV9DRkcsIDAsIHNpemVvZihjbWQpLCAmY21kKSwKKwkgICAgICJGYWlsZWQgdG8gY29uZmlndXJlIHF1ZXVlICVkIG9uIEZJRk8gJWRcbiIsIHF1ZXVlLCBjZmctPmZpZm8pOwogfQogCi12b2lkIGl3bF9tdm1fZGlzYWJsZV90eHEoc3RydWN0IGl3bF9tdm0gKm12bSwgaW50IHF1ZXVlKQordm9pZCBpd2xfbXZtX2Rpc2FibGVfdHhxKHN0cnVjdCBpd2xfbXZtICptdm0sIGludCBxdWV1ZSwgdTggZmxhZ3MpCiB7Ci0JaXdsX3RyYW5zX3R4cV9kaXNhYmxlKG12bS0+dHJhbnMsIHF1ZXVlLAotCQkJICAgICAgIWl3bF9tdm1faXNfZHFhX3N1cHBvcnRlZChtdm0pKTsKKwlzdHJ1Y3QgaXdsX3NjZF90eHFfY2ZnX2NtZCBjbWQgPSB7CisJCS5zY2RfcXVldWUgPSBxdWV1ZSwKKwkJLmVuYWJsZSA9IDAsCisJfTsKKwlpbnQgcmV0OwogCi0JaWYgKGl3bF9tdm1faXNfZHFhX3N1cHBvcnRlZChtdm0pKSB7Ci0JCXN0cnVjdCBpd2xfc2NkX3R4cV9jZmdfY21kIGNtZCA9IHsKLQkJCS5zY2RfcXVldWUgPSBxdWV1ZSwKLQkJCS5lbmFibGUgPSAwLAotCQl9OwotCQlpbnQgcmV0ID0gaXdsX212bV9zZW5kX2NtZF9wZHUobXZtLCBTQ0RfUVVFVUVfQ0ZHLCBDTURfQVNZTkMsCi0JCQkJCSAgICAgICBzaXplb2YoY21kKSwgJmNtZCk7Ci0JCWlmIChyZXQpCi0JCQlJV0xfRVJSKG12bSwgIkZhaWxlZCB0byBkaXNhYmxlIHF1ZXVlICVkIChyZXQ9JWQpXG4iLAotCQkJCXF1ZXVlLCByZXQpOworCWlmICghaXdsX212bV9pc19zY2RfY2ZnX3N1cHBvcnRlZChtdm0pKSB7CisJCWl3bF90cmFuc190eHFfZGlzYWJsZShtdm0tPnRyYW5zLCBxdWV1ZSwgdHJ1ZSk7CisJCXJldHVybjsKIAl9CisKKwlpd2xfdHJhbnNfdHhxX2Rpc2FibGUobXZtLT50cmFucywgcXVldWUsIGZhbHNlKTsKKwlyZXQgPSBpd2xfbXZtX3NlbmRfY21kX3BkdShtdm0sIFNDRF9RVUVVRV9DRkcsIGZsYWdzLAorCQkJCSAgIHNpemVvZihjbWQpLCAmY21kKTsKKwlpZiAocmV0KQorCQlJV0xfRVJSKG12bSwgIkZhaWxlZCB0byBkaXNhYmxlIHF1ZXVlICVkIChyZXQ9JWQpXG4iLAorCQkJcXVldWUsIHJldCk7CiB9CiAKIC8qKgpAQCAtNjIwLDcgKzYyMSw3IEBACiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbXZtLT5tdXRleCk7CiAKIAkvKiBTTVBTIGlzIGlycmVsZXZhbnQgZm9yIE5JQ3MgdGhhdCBkb24ndCBoYXZlIGF0IGxlYXN0IDIgUlggYW50ZW5uYSAqLwotCWlmIChudW1fb2ZfYW50KG12bS0+ZnctPnZhbGlkX3J4X2FudCkgPT0gMSkKKwlpZiAobnVtX29mX2FudChpd2xfbXZtX2dldF92YWxpZF9yeF9hbnQobXZtKSkgPT0gMSkKIAkJcmV0dXJuOwogCiAJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkKQEAgLTY2Miw3ICs2NjMsNyBAQAogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbXZtLT5tdXRleCk7CiAKLQlpZiAobnVtX29mX2FudChtdm0tPmZ3LT52YWxpZF9yeF9hbnQpID09IDEpCisJaWYgKG51bV9vZl9hbnQoaXdsX212bV9nZXRfdmFsaWRfcnhfYW50KG12bSkpID09IDEpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmIChtdm0tPmNmZy0+cnhfd2l0aF9zaXNvX2RpdmVyc2l0eSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS9kcnYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS9kcnYuYwppbmRleCBkNWFhZGIwLi5kYmQ2YmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL3BjaWUvZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL2Rydi5jCkBAIC00MTUsNiArNDE1LDggQEAKIAl7SVdMX1BDSV9ERVZJQ0UoMHgyNEYzLCAweDAwMTAsIGl3bDgyNjBfMmFjX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDI0RjMsIDB4MDAwNCwgaXdsODI2MF8ybl9jZmcpfSwKIAl7SVdMX1BDSV9ERVZJQ0UoMHgyNEY0LCAweDAwMzAsIGl3bDgyNjBfMmFjX2NmZyl9LAorCXtJV0xfUENJX0RFVklDRSgweDI0RjUsIDB4MDAxMCwgaXdsNDE2NV8yYWNfY2ZnKX0sCisJe0lXTF9QQ0lfREVWSUNFKDB4MjRGNiwgMHgwMDMwLCBpd2w0MTY1XzJhY19jZmcpfSwKICNlbmRpZiAvKiBDT05GSUdfSVdMTVZNICovCiAKIAl7MH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS9pbnRlcm5hbC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL2ludGVybmFsLmgKaW5kZXggMWFlYTZiNi4uY2FlMGViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL2ludGVybmFsLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL2ludGVybmFsLmgKQEAgLTIxNiw2ICsyMTYsNyBAQAogICogQG5lZWRfdXBkYXRlOiBpbmRpY2F0ZXMgbmVlZCB0byB1cGRhdGUgcmVhZC93cml0ZSBpbmRleAogICogQGFjdGl2ZTogc3RvcmVzIGlmIHF1ZXVlIGlzIGFjdGl2ZQogICogQGFtcGR1OiB0cnVlIGlmIHRoaXMgcXVldWUgaXMgYW4gYW1wZHUgcXVldWUgZm9yIGFuIHNwZWNpZmljIFJBL1RJRAorICogQHdkX3RpbWVvdXQ6IHF1ZXVlIHdhdGNoZG9nIHRpbWVvdXQgKGppZmZpZXMpIC0gcGVyIHF1ZXVlCiAgKgogICogQSBUeCBxdWV1ZSBjb25zaXN0cyBvZiBjaXJjdWxhciBidWZmZXIgb2YgQkRzIChhLmsuYS4gVEZEcywgdHJhbnNtaXQgZnJhbWUKICAqIGRlc2NyaXB0b3JzKSBhbmQgcmVxdWlyZWQgbG9ja2luZyBzdHJ1Y3R1cmVzLgpAQCAtMjMyLDYgKzIzMyw3IEBACiAJYm9vbCBuZWVkX3VwZGF0ZTsKIAl1OCBhY3RpdmU7CiAJYm9vbCBhbXBkdTsKKwl1bnNpZ25lZCBsb25nIHdkX3RpbWVvdXQ7CiB9OwogCiBzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKQEAgLTI1OSw3ICsyNjEsNiBAQAogICogQGJjX3RhYmxlX2R3b3JkOiB0cnVlIGlmIHRoZSBCQyB0YWJsZSBleHBlY3RzIERXT1JEIChhcyBvcHBvc2VkIHRvIGJ5dGVzKQogICogQHNjZF9zZXRfYWN0aXZlOiBzaG91bGQgdGhlIHRyYW5zcG9ydCBjb25maWd1cmUgdGhlIFNDRCBmb3IgSENNRCBxdWV1ZQogICogQHJ4X3BhZ2Vfb3JkZXI6IHBhZ2Ugb3JkZXIgZm9yIHJlY2VpdmUgYnVmZmVyIHNpemUKLSAqIEB3ZF90aW1lb3V0OiBxdWV1ZSB3YXRjaGRvZyB0aW1lb3V0IChqaWZmaWVzKQogICogQHJlZ19sb2NrOiBwcm90ZWN0IGh3IHJlZ2lzdGVyIGFjY2VzcwogICogQGNtZF9pbl9mbGlnaHQ6IHRydWUgd2hlbiB3ZSBoYXZlIGEgaG9zdCBjb21tYW5kIGluIGZsaWdodAogICogQGZ3X21vbl9waHlzOiBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBidWZmZXIgZm9yIHRoZSBmaXJtd2FyZSBtb25pdG9yCkBAIC0zMDIsNiArMzAzLDcgQEAKIAogCXU4IGNtZF9xdWV1ZTsKIAl1OCBjbWRfZmlmbzsKKwl1bnNpZ25lZCBpbnQgY21kX3Ffd2RnX3RpbWVvdXQ7CiAJdTggbl9ub19yZWNsYWltX2NtZHM7CiAJdTggbm9fcmVjbGFpbV9jbWRzW01BWF9OT19SRUNMQUlNX0NNRFNdOwogCkBAIC0zMTIsMTIgKzMxNCwxNCBAQAogCiAJY29uc3QgY2hhciAqY29uc3QgKmNvbW1hbmRfbmFtZXM7CiAKLQkvKiBxdWV1ZSB3YXRjaGRvZyAqLwotCXVuc2lnbmVkIGxvbmcgd2RfdGltZW91dDsKLQogCS8qcHJvdGVjdCBodyByZWdpc3RlciAqLwogCXNwaW5sb2NrX3QgcmVnX2xvY2s7CiAJYm9vbCBjbWRfaW5fZmxpZ2h0OworCWJvb2wgcmVmX2NtZF9pbl9mbGlnaHQ7CisKKwkvKiBwcm90ZWN0IHJlZiBjb3VudGVyICovCisJc3BpbmxvY2tfdCByZWZfbG9jazsKKwl1MzIgcmVmX2NvdW50OwogCiAJZG1hX2FkZHJfdCBmd19tb25fcGh5czsKIAlzdHJ1Y3QgcGFnZSAqZndfbW9uX3BhZ2U7CkBAIC0zNjgsNyArMzcyLDggQEAKIGludCBpd2xfcGNpZV90eF9zdG9wKHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zKTsKIHZvaWQgaXdsX3BjaWVfdHhfZnJlZShzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucyk7CiB2b2lkIGl3bF90cmFuc19wY2llX3R4cV9lbmFibGUoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsIGludCBxdWV1ZSwgdTE2IHNzbiwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXdsX3RyYW5zX3R4cV9zY2RfY2ZnICpjZmcpOworCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpd2xfdHJhbnNfdHhxX3NjZF9jZmcgKmNmZywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgd2RnX3RpbWVvdXQpOwogdm9pZCBpd2xfdHJhbnNfcGNpZV90eHFfZGlzYWJsZShzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucywgaW50IHF1ZXVlLAogCQkJCWJvb2wgY29uZmlndXJlX3NjZCk7CiBpbnQgaXdsX3RyYW5zX3BjaWVfdHgoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsIHN0cnVjdCBza19idWZmICpza2IsCkBAIC0zODEsNiArMzg2LDkgQEAKIAkJCSAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JzKTsKIHZvaWQgaXdsX3RyYW5zX3BjaWVfdHhfcmVzZXQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMpOwogCit2b2lkIGl3bF90cmFuc19wY2llX3JlZihzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucyk7Cit2b2lkIGl3bF90cmFuc19wY2llX3VucmVmKHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zKTsKKwogc3RhdGljIGlubGluZSB1MTYgaXdsX3BjaWVfdGZkX3RiX2dldF9sZW4oc3RydWN0IGl3bF90ZmQgKnRmZCwgdTggaWR4KQogewogCXN0cnVjdCBpd2xfdGZkX3RiICp0YiA9ICZ0ZmQtPnRic1tpZHhdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL3RyYW5zLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL3BjaWUvdHJhbnMuYwppbmRleCA1MjNmZTBjLi42OTkzNWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL3BjaWUvdHJhbnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL3BjaWUvdHJhbnMuYwpAQCAtNzUsNiArNzUsNyBAQAogI2luY2x1ZGUgIml3bC10cmFucy5oIgogI2luY2x1ZGUgIml3bC1jc3IuaCIKICNpbmNsdWRlICJpd2wtcHJwaC5oIgorI2luY2x1ZGUgIml3bC1zY2QuaCIKICNpbmNsdWRlICJpd2wtYWduLWh3LmgiCiAjaW5jbHVkZSAiaXdsLWZ3LWVycm9yLWR1bXAuaCIKICNpbmNsdWRlICJpbnRlcm5hbC5oIgpAQCAtNDQzLDEwICs0NDQsMjUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBpd2xfcGNpZV9hcG1fc3RvcChzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucykKK3N0YXRpYyB2b2lkIGl3bF9wY2llX2FwbV9zdG9wKHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLCBib29sIG9wX21vZGVfbGVhdmUpCiB7CiAJSVdMX0RFQlVHX0lORk8odHJhbnMsICJTdG9wIGNhcmQsIHB1dCBpbiBsb3cgcG93ZXIgc3RhdGVcbiIpOwogCisJaWYgKG9wX21vZGVfbGVhdmUpIHsKKwkJaWYgKCF0ZXN0X2JpdChTVEFUVVNfREVWSUNFX0VOQUJMRUQsICZ0cmFucy0+c3RhdHVzKSkKKwkJCWl3bF9wY2llX2FwbV9pbml0KHRyYW5zKTsKKworCQkvKiBpbmZvcm0gTUUgdGhhdCB3ZSBhcmUgbGVhdmluZyAqLworCQlpZiAodHJhbnMtPmNmZy0+ZGV2aWNlX2ZhbWlseSA9PSBJV0xfREVWSUNFX0ZBTUlMWV83MDAwKQorCQkJaXdsX3NldF9iaXRzX3BycGgodHJhbnMsIEFQTUdfUENJREVWX1NUVF9SRUcsCisJCQkJCSAgQVBNR19QQ0lERVZfU1RUX1ZBTF9XQUtFX01FKTsKKwkJZWxzZSBpZiAodHJhbnMtPmNmZy0+ZGV2aWNlX2ZhbWlseSA9PSBJV0xfREVWSUNFX0ZBTUlMWV84MDAwKQorCQkJaXdsX3NldF9iaXQodHJhbnMsIENTUl9IV19JRl9DT05GSUdfUkVHLAorCQkJCSAgICBDU1JfSFdfSUZfQ09ORklHX1JFR19QUkVQQVJFIHwKKwkJCQkgICAgQ1NSX0hXX0lGX0NPTkZJR19SRUdfRU5BQkxFX1BNRSk7CisJCW1kZWxheSg1KTsKKwl9CisKIAljbGVhcl9iaXQoU1RBVFVTX0RFVklDRV9FTkFCTEVELCAmdHJhbnMtPnN0YXR1cyk7CiAKIAkvKiBTdG9wIGRldmljZSdzIERNQSBhY3Rpdml0eSAqLwpAQCAtNzA3LDYgKzcyMywxMSBAQAogCiAJKmZpcnN0X3Vjb2RlX3NlY3Rpb24gPSBsYXN0X3JlYWRfaWR4OwogCisJaWYgKGNwdSA9PSAxKQorCQlpd2xfd3JpdGVfZGlyZWN0MzIodHJhbnMsIEZIX1VDT0RFX0xPQURfU1RBVFVTLCAweEZGRkYpOworCWVsc2UKKwkJaXdsX3dyaXRlX2RpcmVjdDMyKHRyYW5zLCBGSF9VQ09ERV9MT0FEX1NUQVRVUywgMHhGRkZGRkZGRik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODkzLDggKzkxNCw4IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIE5vdGlmeSBGVyBsb2FkaW5nIGlzIGRvbmUgKi8KLQlpd2xfd3JpdGVfZGlyZWN0MzIodHJhbnMsIEZIX1VDT0RFX0xPQURfU1RBVFVTLCAweEZGRkZGRkZGKTsKKwlpZiAodHJhbnMtPmRiZ19kZXN0X3RsdikKKwkJaXdsX3BjaWVfYXBwbHlfZGVzdGluYXRpb24odHJhbnMpOwogCiAJLyogd2FpdCBmb3IgaW1hZ2UgdmVyaWZpY2F0aW9uIHRvIGNvbXBsZXRlICAqLwogCXJldCA9IGl3bF9wb2xsX3BycGhfYml0KHRyYW5zLCBMTVBNX1NFQ1VSRV9CT09UX0NQVTFfU1RBVFVTX0FERFJfQjAsCkBAIC05MTYsNiArOTM3LDcgQEAKIHN0YXRpYyBpbnQgaXdsX3RyYW5zX3BjaWVfc3RhcnRfZncoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsCiAJCQkJICAgY29uc3Qgc3RydWN0IGZ3X2ltZyAqZncsIGJvb2wgcnVuX2luX3Jma2lsbCkKIHsKKwlzdHJ1Y3QgaXdsX3RyYW5zX3BjaWUgKnRyYW5zX3BjaWUgPSBJV0xfVFJBTlNfR0VUX1BDSUVfVFJBTlModHJhbnMpOwogCWludCByZXQ7CiAJYm9vbCBod19yZmtpbGw7CiAKQEAgLTk0NSw2ICs5NjcsOSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAorCS8qIGluaXQgcmVmX2NvdW50IHRvIDEgKHNob3VsZCBiZSBjbGVhcmVkIHdoZW4gdWNvZGUgaXMgbG9hZGVkKSAqLworCXRyYW5zX3BjaWUtPnJlZl9jb3VudCA9IDE7CisKIAkvKiBtYWtlIHN1cmUgcmZraWxsIGhhbmRzaGFrZSBiaXRzIGFyZSBjbGVhcmVkICovCiAJaXdsX3dyaXRlMzIodHJhbnMsIENTUl9VQ09ERV9EUlZfR1AxX0NMUiwgQ1NSX1VDT0RFX1NXX0JJVF9SRktJTEwpOwogCWl3bF93cml0ZTMyKHRyYW5zLCBDU1JfVUNPREVfRFJWX0dQMV9DTFIsCkBAIC05NjAsNyArOTg1LDcgQEAKIAogCS8qIExvYWQgdGhlIGdpdmVuIGltYWdlIHRvIHRoZSBIVyAqLwogCWlmICgodHJhbnMtPmNmZy0+ZGV2aWNlX2ZhbWlseSA9PSBJV0xfREVWSUNFX0ZBTUlMWV84MDAwKSAmJgotCSAgICAoQ1NSX0hXX1JFVl9TVEVQKHRyYW5zLT5od19yZXYpID09IFNJTElDT05fQl9TVEVQKSkKKwkgICAgKENTUl9IV19SRVZfU1RFUCh0cmFucy0+aHdfcmV2KSAhPSBTSUxJQ09OX0FfU1RFUCkpCiAJCXJldHVybiBpd2xfcGNpZV9sb2FkX2dpdmVuX3Vjb2RlXzgwMDBiKHRyYW5zLCBmdyk7CiAJZWxzZQogCQlyZXR1cm4gaXdsX3BjaWVfbG9hZF9naXZlbl91Y29kZSh0cmFucywgZncpOwpAQCAtMTAxMCw3ICsxMDM1LDcgQEAKIAkJICAgICAgQ1NSX0dQX0NOVFJMX1JFR19GTEFHX01BQ19BQ0NFU1NfUkVRKTsKIAogCS8qIFN0b3AgdGhlIGRldmljZSwgYW5kIHB1dCBpdCBpbiBsb3cgcG93ZXIgc3RhdGUgKi8KLQlpd2xfcGNpZV9hcG1fc3RvcCh0cmFucyk7CisJaXdsX3BjaWVfYXBtX3N0b3AodHJhbnMsIGZhbHNlKTsKIAogCS8qIHN0b3AgYW5kIHJlc2V0IHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IgKi8KIAlpd2xfd3JpdGUzMih0cmFucywgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfU1dfUkVTRVQpOwpAQCAtMTE5Miw3ICsxMjE3LDcgQEAKIAlpd2xfZGlzYWJsZV9pbnRlcnJ1cHRzKHRyYW5zKTsKIAlzcGluX3VubG9jaygmdHJhbnNfcGNpZS0+aXJxX2xvY2spOwogCi0JaXdsX3BjaWVfYXBtX3N0b3AodHJhbnMpOworCWl3bF9wY2llX2FwbV9zdG9wKHRyYW5zLCB0cnVlKTsKIAogCXNwaW5fbG9jaygmdHJhbnNfcGNpZS0+aXJxX2xvY2spOwogCWl3bF9kaXNhYmxlX2ludGVycnVwdHModHJhbnMpOwpAQCAtMTI0NCw2ICsxMjY5LDcgQEAKIAogCXRyYW5zX3BjaWUtPmNtZF9xdWV1ZSA9IHRyYW5zX2NmZy0+Y21kX3F1ZXVlOwogCXRyYW5zX3BjaWUtPmNtZF9maWZvID0gdHJhbnNfY2ZnLT5jbWRfZmlmbzsKKwl0cmFuc19wY2llLT5jbWRfcV93ZGdfdGltZW91dCA9IHRyYW5zX2NmZy0+Y21kX3Ffd2RnX3RpbWVvdXQ7CiAJaWYgKFdBUk5fT04odHJhbnNfY2ZnLT5uX25vX3JlY2xhaW1fY21kcyA+IE1BWF9OT19SRUNMQUlNX0NNRFMpKQogCQl0cmFuc19wY2llLT5uX25vX3JlY2xhaW1fY21kcyA9IDA7CiAJZWxzZQpAQCAtMTI1OCw5ICsxMjg0LDYgQEAKIAllbHNlCiAJCXRyYW5zX3BjaWUtPnJ4X3BhZ2Vfb3JkZXIgPSBnZXRfb3JkZXIoNCAqIDEwMjQpOwogCi0JdHJhbnNfcGNpZS0+d2RfdGltZW91dCA9Ci0JCW1zZWNzX3RvX2ppZmZpZXModHJhbnNfY2ZnLT5xdWV1ZV93YXRjaGRvZ190aW1lb3V0KTsKLQogCXRyYW5zX3BjaWUtPmNvbW1hbmRfbmFtZXMgPSB0cmFuc19jZmctPmNvbW1hbmRfbmFtZXM7CiAJdHJhbnNfcGNpZS0+YmNfdGFibGVfZHdvcmQgPSB0cmFuc19jZmctPmJjX3RhYmxlX2R3b3JkOwogCXRyYW5zX3BjaWUtPnNjZF9zZXRfYWN0aXZlID0gdHJhbnNfY2ZnLT5zY2Rfc2V0X2FjdGl2ZTsKQEAgLTE1NDAsNiArMTU2MywzOCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRyYW5zX3BjaWUtPnJlZ19sb2NrLCBmbGFncyk7CiB9CiAKK3ZvaWQgaXdsX3RyYW5zX3BjaWVfcmVmKHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zKQoreworCXN0cnVjdCBpd2xfdHJhbnNfcGNpZSAqdHJhbnNfcGNpZSA9IElXTF9UUkFOU19HRVRfUENJRV9UUkFOUyh0cmFucyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChpd2x3aWZpX21vZF9wYXJhbXMuZDBpM19kaXNhYmxlKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHJhbnNfcGNpZS0+cmVmX2xvY2ssIGZsYWdzKTsKKwlJV0xfREVCVUdfUlBNKHRyYW5zLCAicmVmX2NvdW50ZXI6ICVkXG4iLCB0cmFuc19wY2llLT5yZWZfY291bnQpOworCXRyYW5zX3BjaWUtPnJlZl9jb3VudCsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRyYW5zX3BjaWUtPnJlZl9sb2NrLCBmbGFncyk7Cit9CisKK3ZvaWQgaXdsX3RyYW5zX3BjaWVfdW5yZWYoc3RydWN0IGl3bF90cmFucyAqdHJhbnMpCit7CisJc3RydWN0IGl3bF90cmFuc19wY2llICp0cmFuc19wY2llID0gSVdMX1RSQU5TX0dFVF9QQ0lFX1RSQU5TKHRyYW5zKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGl3bHdpZmlfbW9kX3BhcmFtcy5kMGkzX2Rpc2FibGUpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ0cmFuc19wY2llLT5yZWZfbG9jaywgZmxhZ3MpOworCUlXTF9ERUJVR19SUE0odHJhbnMsICJyZWZfY291bnRlcjogJWRcbiIsIHRyYW5zX3BjaWUtPnJlZl9jb3VudCk7CisJaWYgKFdBUk5fT05fT05DRSh0cmFuc19wY2llLT5yZWZfY291bnQgPT0gMCkpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHJhbnNfcGNpZS0+cmVmX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwl0cmFuc19wY2llLT5yZWZfY291bnQtLTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cmFuc19wY2llLT5yZWZfbG9jaywgZmxhZ3MpOworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqZ2V0X2Nzcl9zdHJpbmcoaW50IGNtZCkKIHsKICNkZWZpbmUgSVdMX0NNRCh4KSBjYXNlIHg6IHJldHVybiAjeApAQCAtMjI2NCw2ICsyMzE5LDkgQEAKIAkucmVsZWFzZV9uaWNfYWNjZXNzID0gaXdsX3RyYW5zX3BjaWVfcmVsZWFzZV9uaWNfYWNjZXNzLAogCS5zZXRfYml0c19tYXNrID0gaXdsX3RyYW5zX3BjaWVfc2V0X2JpdHNfbWFzaywKIAorCS5yZWYgPSBpd2xfdHJhbnNfcGNpZV9yZWYsCisJLnVucmVmID0gaXdsX3RyYW5zX3BjaWVfdW5yZWYsCisKIAkuZHVtcF9kYXRhID0gaXdsX3RyYW5zX3BjaWVfZHVtcF9kYXRhLAogfTsKIApAQCAtMjI5MSw2ICsyMzQ5LDcgQEAKIAl0cmFuc19wY2llLT50cmFucyA9IHRyYW5zOwogCXNwaW5fbG9ja19pbml0KCZ0cmFuc19wY2llLT5pcnFfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnRyYW5zX3BjaWUtPnJlZ19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmdHJhbnNfcGNpZS0+cmVmX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnRyYW5zX3BjaWUtPnVjb2RlX3dyaXRlX3dhaXRxKTsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpAQCAtMjQwNCw2ICsyNDYzLDcgQEAKIAl9CiAKIAl0cmFuc19wY2llLT5pbnRhX21hc2sgPSBDU1JfSU5JX1NFVF9NQVNLOworCXRyYW5zLT5kMGkzX21vZGUgPSBJV0xfRDBJM19NT0RFX09OX1NVU1BFTkQ7CiAKIAlyZXR1cm4gdHJhbnM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvcGNpZS90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL3R4LmMKaW5kZXggOGE2YzdhMC4uYWYwYmNlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9wY2llL3R4LmMKQEAgLTE0Nyw3ICsxNDcsNiBAQAogc3RhdGljIHZvaWQgaXdsX3BjaWVfdHhxX3N0dWNrX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgaXdsX3R4cSAqdHhxID0gKHZvaWQgKilkYXRhOwotCXN0cnVjdCBpd2xfcXVldWUgKnEgPSAmdHhxLT5xOwogCXN0cnVjdCBpd2xfdHJhbnNfcGNpZSAqdHJhbnNfcGNpZSA9IHR4cS0+dHJhbnNfcGNpZTsKIAlzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucyA9IGl3bF90cmFuc19wY2llX2dldF90cmFucyh0cmFuc19wY2llKTsKIAl1MzIgc2NkX3NyYW1fYWRkciA9IHRyYW5zX3BjaWUtPnNjZF9iYXNlX2FkZHIgKwpAQCAtMTY0LDcgKzE2Myw3IEBACiAJc3Bpbl91bmxvY2soJnR4cS0+bG9jayk7CiAKIAlJV0xfRVJSKHRyYW5zLCAiUXVldWUgJWQgc3R1Y2sgZm9yICV1IG1zLlxuIiwgdHhxLT5xLmlkLAotCQlqaWZmaWVzX3RvX21zZWNzKHRyYW5zX3BjaWUtPndkX3RpbWVvdXQpKTsKKwkJamlmZmllc190b19tc2Vjcyh0eHEtPndkX3RpbWVvdXQpKTsKIAlJV0xfRVJSKHRyYW5zLCAiQ3VycmVudCBTVyByZWFkX3B0ciAlZCB3cml0ZV9wdHIgJWRcbiIsCiAJCXR4cS0+cS5yZWFkX3B0ciwgdHhxLT5xLndyaXRlX3B0cik7CiAKQEAgLTE5OCwxMSArMTk3LDYgQEAKIAkJCWl3bF9yZWFkX3BycGgodHJhbnMsIFNDRF9RVUVVRV9XUlBUUihpKSkpOwogCX0KIAotCWZvciAoaSA9IHEtPnJlYWRfcHRyOyBpICE9IHEtPndyaXRlX3B0cjsKLQkgICAgIGkgPSBpd2xfcXVldWVfaW5jX3dyYXAoaSkpCi0JCUlXTF9FUlIodHJhbnMsICJzY3JhdGNoICVkID0gMHglMDh4XG4iLCBpLAotCQkJbGUzMl90b19jcHUodHhxLT5zY3JhdGNoYnVmc1tpXS5zY3JhdGNoKSk7Ci0KIAlpd2xfZm9yY2Vfbm1pKHRyYW5zKTsKIH0KIApAQCAtNjgwLDcgKzY3NCw4IEBACiAJCWl3bF93cml0ZV9wcnBoKHRyYW5zLCBTQ0RfQ0hBSU5FWFRfRU4sIDApOwogCiAJaXdsX3RyYW5zX2FjX3R4cV9lbmFibGUodHJhbnMsIHRyYW5zX3BjaWUtPmNtZF9xdWV1ZSwKLQkJCQl0cmFuc19wY2llLT5jbWRfZmlmbyk7CisJCQkJdHJhbnNfcGNpZS0+Y21kX2ZpZm8sCisJCQkJdHJhbnNfcGNpZS0+Y21kX3Ffd2RnX3RpbWVvdXQpOwogCiAJLyogQWN0aXZhdGUgYWxsIFR4IERNQS9GSUZPIGNoYW5uZWxzICovCiAJaXdsX3NjZF9hY3RpdmF0ZV9maWZvcyh0cmFucyk7CkBAIC03MjIsNyArNzE3LDEyIEBACiAJaXdsX3dyaXRlX2RpcmVjdDMyKHRyYW5zLCBGSF9LV19NRU1fQUREUl9SRUcsCiAJCQkgICB0cmFuc19wY2llLT5rdy5kbWEgPj4gNCk7CiAKLQlpd2xfcGNpZV90eF9zdGFydCh0cmFucywgdHJhbnNfcGNpZS0+c2NkX2Jhc2VfYWRkcik7CisJLyoKKwkgKiBTZW5kIDAgYXMgdGhlIHNjZF9iYXNlX2FkZHIgc2luY2UgdGhlIGRldmljZSBtYXkgaGF2ZSBiZSByZXNldAorCSAqIHdoaWxlIHdlIHdlcmUgaW4gV29XTEFOIGluIHdoaWNoIGNhc2UgU0NEX1NSQU1fQkFTRV9BRERSIHdpbGwKKwkgKiBjb250YWluIGdhcmJhZ2UuCisJICovCisJaXdsX3BjaWVfdHhfc3RhcnQodHJhbnMsIDApOwogfQogCiAvKgpAQCAtODk4LDYgKzg5OCwxMCBAQAogCQl9CiAJfQogCisJaWYgKHRyYW5zLT5jZmctPmJhc2VfcGFyYW1zLT5udW1fb2ZfcXVldWVzID4gMjApCisJCWl3bF9zZXRfYml0c19wcnBoKHRyYW5zLCBTQ0RfR1BfQ1RSTCwKKwkJCQkgIFNDRF9HUF9DVFJMX0VOQUJMRV8zMV9RVUVVRVMpOworCiAJcmV0dXJuIDA7CiBlcnJvcjoKIAkvKlVwb24gZXJyb3IsIGZyZWUgb25seSBpZiB3ZSBhbGxvY2F0ZWQgc29tZXRoaW5nICovCkBAIC05MDYsMTAgKzkxMCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGl3bF9wY2llX3R4cV9wcm9ncmVzcyhzdHJ1Y3QgaXdsX3RyYW5zX3BjaWUgKnRyYW5zX3BjaWUsCi0JCQkJCSAgIHN0cnVjdCBpd2xfdHhxICp0eHEpCitzdGF0aWMgaW5saW5lIHZvaWQgaXdsX3BjaWVfdHhxX3Byb2dyZXNzKHN0cnVjdCBpd2xfdHhxICp0eHEpCiB7Ci0JaWYgKCF0cmFuc19wY2llLT53ZF90aW1lb3V0KQorCWlmICghdHhxLT53ZF90aW1lb3V0KQogCQlyZXR1cm47CiAKIAkvKgpAQCAtOTE5LDcgKzkyMiw3IEBACiAJaWYgKHR4cS0+cS5yZWFkX3B0ciA9PSB0eHEtPnEud3JpdGVfcHRyKQogCQlkZWxfdGltZXIoJnR4cS0+c3R1Y2tfdGltZXIpOwogCWVsc2UKLQkJbW9kX3RpbWVyKCZ0eHEtPnN0dWNrX3RpbWVyLCBqaWZmaWVzICsgdHJhbnNfcGNpZS0+d2RfdGltZW91dCk7CisJCW1vZF90aW1lcigmdHhxLT5zdHVja190aW1lciwgamlmZmllcyArIHR4cS0+d2RfdGltZW91dCk7CiB9CiAKIC8qIEZyZWVzIGJ1ZmZlcnMgdW50aWwgaW5kZXggX25vdF8gaW5jbHVzaXZlICovCkBAIC05ODEsMjEgKzk4NCwzNSBAQAogCQlpd2xfcGNpZV90eHFfZnJlZV90ZmQodHJhbnMsIHR4cSk7CiAJfQogCi0JaXdsX3BjaWVfdHhxX3Byb2dyZXNzKHRyYW5zX3BjaWUsIHR4cSk7CisJaXdsX3BjaWVfdHhxX3Byb2dyZXNzKHR4cSk7CiAKIAlpZiAoaXdsX3F1ZXVlX3NwYWNlKCZ0eHEtPnEpID4gdHhxLT5xLmxvd19tYXJrKQogCQlpd2xfd2FrZV9xdWV1ZSh0cmFucywgdHhxKTsKKworCWlmIChxLT5yZWFkX3B0ciA9PSBxLT53cml0ZV9wdHIpIHsKKwkJSVdMX0RFQlVHX1JQTSh0cmFucywgIlEgJWQgLSBsYXN0IHR4IHJlY2xhaW1lZFxuIiwgcS0+aWQpOworCQlpd2xfdHJhbnNfcGNpZV91bnJlZih0cmFucyk7CisJfQorCiBvdXQ6CiAJc3Bpbl91bmxvY2tfYmgoJnR4cS0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgaXdsX3BjaWVfc2V0X2NtZF9pbl9mbGlnaHQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMpCitzdGF0aWMgaW50IGl3bF9wY2llX3NldF9jbWRfaW5fZmxpZ2h0KHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpd2xfaG9zdF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgaXdsX3RyYW5zX3BjaWUgKnRyYW5zX3BjaWUgPSBJV0xfVFJBTlNfR0VUX1BDSUVfVFJBTlModHJhbnMpOwogCWludCByZXQ7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZ0cmFuc19wY2llLT5yZWdfbG9jayk7CiAKKwlpZiAoIShjbWQtPmZsYWdzICYgQ01EX1NFTkRfSU5fSURMRSkgJiYKKwkgICAgIXRyYW5zX3BjaWUtPnJlZl9jbWRfaW5fZmxpZ2h0KSB7CisJCXRyYW5zX3BjaWUtPnJlZl9jbWRfaW5fZmxpZ2h0ID0gdHJ1ZTsKKwkJSVdMX0RFQlVHX1JQTSh0cmFucywgInNldCByZWZfY21kX2luX2ZsaWdodCAtIHJlZlxuIik7CisJCWl3bF90cmFuc19wY2llX3JlZih0cmFucyk7CisJfQorCiAJaWYgKHRyYW5zX3BjaWUtPmNtZF9pbl9mbGlnaHQpCiAJCXJldHVybiAwOwogCkBAIC0xMDM2LDYgKzEwNTMsMTIgQEAKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnRyYW5zX3BjaWUtPnJlZ19sb2NrKTsKIAorCWlmICh0cmFuc19wY2llLT5yZWZfY21kX2luX2ZsaWdodCkgeworCQl0cmFuc19wY2llLT5yZWZfY21kX2luX2ZsaWdodCA9IGZhbHNlOworCQlJV0xfREVCVUdfUlBNKHRyYW5zLCAiY2xlYXIgcmVmX2NtZF9pbl9mbGlnaHQgLSB1bnJlZlxuIik7CisJCWl3bF90cmFuc19wY2llX3VucmVmKHRyYW5zKTsKKwl9CisKIAlpZiAoV0FSTl9PTighdHJhbnNfcGNpZS0+Y21kX2luX2ZsaWdodCkpCiAJCXJldHVybiAwOwogCkBAIC0xMDg5LDcgKzExMTIsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cmFuc19wY2llLT5yZWdfbG9jaywgZmxhZ3MpOwogCX0KIAotCWl3bF9wY2llX3R4cV9wcm9ncmVzcyh0cmFuc19wY2llLCB0eHEpOworCWl3bF9wY2llX3R4cV9wcm9ncmVzcyh0eHEpOwogfQogCiBzdGF0aWMgaW50IGl3bF9wY2llX3R4cV9zZXRfcmF0aWRfbWFwKHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLCB1MTYgcmFfdGlkLApAQCAtMTEyMiwxNCArMTE0NSwxOCBAQAogI2RlZmluZSBCVUlMRF9SQXhUSUQoc3RhX2lkLCB0aWQpCSgoKHN0YV9pZCkgPDwgNCkgKyAodGlkKSkKIAogdm9pZCBpd2xfdHJhbnNfcGNpZV90eHFfZW5hYmxlKHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLCBpbnQgdHhxX2lkLCB1MTYgc3NuLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpd2xfdHJhbnNfdHhxX3NjZF9jZmcgKmNmZykKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXdsX3RyYW5zX3R4cV9zY2RfY2ZnICpjZmcsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHdkZ190aW1lb3V0KQogewogCXN0cnVjdCBpd2xfdHJhbnNfcGNpZSAqdHJhbnNfcGNpZSA9IElXTF9UUkFOU19HRVRfUENJRV9UUkFOUyh0cmFucyk7CisJc3RydWN0IGl3bF90eHEgKnR4cSA9ICZ0cmFuc19wY2llLT50eHFbdHhxX2lkXTsKIAlpbnQgZmlmbyA9IC0xOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQodHhxX2lkLCB0cmFuc19wY2llLT5xdWV1ZV91c2VkKSkKIAkJV0FSTl9PTkNFKDEsICJxdWV1ZSAlZCBhbHJlYWR5IHVzZWQgLSBleHBlY3QgaXNzdWVzIiwgdHhxX2lkKTsKIAorCXR4cS0+d2RfdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMod2RnX3RpbWVvdXQpOworCiAJaWYgKGNmZykgewogCQlmaWZvID0gY2ZnLT5maWZvOwogCkBAIC0xMTUzLDcgKzExODAsNyBAQAogCiAJCQkvKiBlbmFibGUgYWdncmVnYXRpb25zIGZvciB0aGUgcXVldWUgKi8KIAkJCWl3bF9zY2RfdHhxX2VuYWJsZV9hZ2codHJhbnMsIHR4cV9pZCk7Ci0JCQl0cmFuc19wY2llLT50eHFbdHhxX2lkXS5hbXBkdSA9IHRydWU7CisJCQl0eHEtPmFtcGR1ID0gdHJ1ZTsKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBkaXNhYmxlIGFnZ3JlZ2F0aW9ucyBmb3IgdGhlIHF1ZXVlLCB0aGlzIHdpbGwgYWxzbwpAQCAtMTE2MiwyMCArMTE4OSwyMCBAQAogCQkJICovCiAJCQlpd2xfc2NkX3R4cV9kaXNhYmxlX2FnZyh0cmFucywgdHhxX2lkKTsKIAotCQkJc3NuID0gdHJhbnNfcGNpZS0+dHhxW3R4cV9pZF0ucS5yZWFkX3B0cjsKKwkJCXNzbiA9IHR4cS0+cS5yZWFkX3B0cjsKIAkJfQogCX0KIAogCS8qIFBsYWNlIGZpcnN0IFRGRCBhdCBpbmRleCBjb3JyZXNwb25kaW5nIHRvIHN0YXJ0IHNlcXVlbmNlIG51bWJlci4KIAkgKiBBc3N1bWVzIHRoYXQgc3NuX2lkeCBpcyB2YWxpZCAoIT0gMHhGRkYpICovCi0JdHJhbnNfcGNpZS0+dHhxW3R4cV9pZF0ucS5yZWFkX3B0ciA9IChzc24gJiAweGZmKTsKLQl0cmFuc19wY2llLT50eHFbdHhxX2lkXS5xLndyaXRlX3B0ciA9IChzc24gJiAweGZmKTsKKwl0eHEtPnEucmVhZF9wdHIgPSAoc3NuICYgMHhmZik7CisJdHhxLT5xLndyaXRlX3B0ciA9IChzc24gJiAweGZmKTsKKwlpd2xfd3JpdGVfZGlyZWN0MzIodHJhbnMsIEhCVVNfVEFSR19XUlBUUiwKKwkJCSAgIChzc24gJiAweGZmKSB8ICh0eHFfaWQgPDwgOCkpOwogCiAJaWYgKGNmZykgewogCQl1OCBmcmFtZV9saW1pdCA9IGNmZy0+ZnJhbWVfbGltaXQ7CiAKLQkJaXdsX3dyaXRlX2RpcmVjdDMyKHRyYW5zLCBIQlVTX1RBUkdfV1JQVFIsCi0JCQkJICAgKHNzbiAmIDB4ZmYpIHwgKHR4cV9pZCA8PCA4KSk7CiAJCWl3bF93cml0ZV9wcnBoKHRyYW5zLCBTQ0RfUVVFVUVfUkRQVFIodHhxX2lkKSwgc3NuKTsKIAogCQkvKiBTZXQgdXAgVHggd2luZG93IHNpemUgYW5kIGZyYW1lIGxpbWl0IGZvciB0aGlzIHF1ZXVlICovCkBAIC0xMjAwLDExICsxMjI3LDE3IEBACiAJCWlmICh0eHFfaWQgPT0gdHJhbnNfcGNpZS0+Y21kX3F1ZXVlICYmCiAJCSAgICB0cmFuc19wY2llLT5zY2Rfc2V0X2FjdGl2ZSkKIAkJCWl3bF9zY2RfZW5hYmxlX3NldF9hY3RpdmUodHJhbnMsIEJJVCh0eHFfaWQpKTsKKworCQlJV0xfREVCVUdfVFhfUVVFVUVTKHRyYW5zLAorCQkJCSAgICAiQWN0aXZhdGUgcXVldWUgJWQgb24gRklGTyAlZCBXclB0cjogJWRcbiIsCisJCQkJICAgIHR4cV9pZCwgZmlmbywgc3NuICYgMHhmZik7CisJfSBlbHNlIHsKKwkJSVdMX0RFQlVHX1RYX1FVRVVFUyh0cmFucywKKwkJCQkgICAgIkFjdGl2YXRlIHF1ZXVlICVkIFdyUHRyOiAlZFxuIiwKKwkJCQkgICAgdHhxX2lkLCBzc24gJiAweGZmKTsKIAl9CiAKLQl0cmFuc19wY2llLT50eHFbdHhxX2lkXS5hY3RpdmUgPSB0cnVlOwotCUlXTF9ERUJVR19UWF9RVUVVRVModHJhbnMsICJBY3RpdmF0ZSBxdWV1ZSAlZCBvbiBGSUZPICVkIFdyUHRyOiAlZFxuIiwKLQkJCSAgICB0eHFfaWQsIGZpZm8sIHNzbiAmIDB4ZmYpOworCXR4cS0+YWN0aXZlID0gdHJ1ZTsKIH0KIAogdm9pZCBpd2xfdHJhbnNfcGNpZV90eHFfZGlzYWJsZShzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucywgaW50IHR4cV9pZCwKQEAgLTE0NjksMTEgKzE1MDIsMTEgQEAKIAl0cmFjZV9pd2x3aWZpX2Rldl9oY21kKHRyYW5zLT5kZXYsIGNtZCwgY21kX3NpemUsICZvdXRfY21kLT5oZHIpOwogCiAJLyogc3RhcnQgdGltZXIgaWYgcXVldWUgY3VycmVudGx5IGVtcHR5ICovCi0JaWYgKHEtPnJlYWRfcHRyID09IHEtPndyaXRlX3B0ciAmJiB0cmFuc19wY2llLT53ZF90aW1lb3V0KQotCQltb2RfdGltZXIoJnR4cS0+c3R1Y2tfdGltZXIsIGppZmZpZXMgKyB0cmFuc19wY2llLT53ZF90aW1lb3V0KTsKKwlpZiAocS0+cmVhZF9wdHIgPT0gcS0+d3JpdGVfcHRyICYmIHR4cS0+d2RfdGltZW91dCkKKwkJbW9kX3RpbWVyKCZ0eHEtPnN0dWNrX3RpbWVyLCBqaWZmaWVzICsgdHhxLT53ZF90aW1lb3V0KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cmFuc19wY2llLT5yZWdfbG9jaywgZmxhZ3MpOwotCXJldCA9IGl3bF9wY2llX3NldF9jbWRfaW5fZmxpZ2h0KHRyYW5zKTsKKwlyZXQgPSBpd2xfcGNpZV9zZXRfY21kX2luX2ZsaWdodCh0cmFucywgY21kKTsKIAlpZiAocmV0IDwgMCkgewogCQlpZHggPSByZXQ7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRyYW5zX3BjaWUtPnJlZ19sb2NrLCBmbGFncyk7CkBAIC0xODE5LDkgKzE4NTIsMTIgQEAKIAl3YWl0X3dyaXRlX3B0ciA9IGllZWU4MDIxMV9oYXNfbW9yZWZyYWdzKGZjKTsKIAogCS8qIHN0YXJ0IHRpbWVyIGlmIHF1ZXVlIGN1cnJlbnRseSBlbXB0eSAqLwotCWlmICh0eHEtPm5lZWRfdXBkYXRlICYmIHEtPnJlYWRfcHRyID09IHEtPndyaXRlX3B0ciAmJgotCSAgICB0cmFuc19wY2llLT53ZF90aW1lb3V0KQotCQltb2RfdGltZXIoJnR4cS0+c3R1Y2tfdGltZXIsIGppZmZpZXMgKyB0cmFuc19wY2llLT53ZF90aW1lb3V0KTsKKwlpZiAocS0+cmVhZF9wdHIgPT0gcS0+d3JpdGVfcHRyKSB7CisJCWlmICh0eHEtPndkX3RpbWVvdXQpCisJCQltb2RfdGltZXIoJnR4cS0+c3R1Y2tfdGltZXIsIGppZmZpZXMgKyB0eHEtPndkX3RpbWVvdXQpOworCQlJV0xfREVCVUdfUlBNKHRyYW5zLCAiUTogJWQgZmlyc3QgdHggLSB0YWtlIHJlZlxuIiwgcS0+aWQpOworCQlpd2xfdHJhbnNfcGNpZV9yZWYodHJhbnMpOworCX0KIAogCS8qIFRlbGwgZGV2aWNlIHRoZSB3cml0ZSBpbmRleCAqanVzdCBwYXN0KiB0aGlzIGxhdGVzdCBmaWxsZWQgVEZEICovCiAJcS0+d3JpdGVfcHRyID0gaXdsX3F1ZXVlX2luY193cmFwKHEtPndyaXRlX3B0cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jZmcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NmZy5jCmluZGV4IDM0ZjA5ZWYuLmE5Mjk4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NmZy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NmZy5jCkBAIC0xNjE2LDEwICsxNjE2LDEwIEBACiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfQ0ZHODAyMTEpOwogCi0Jc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fVFhfQllURVMgfAotCQkJIFNUQVRJT05fSU5GT19UWF9QQUNLRVRTIHwKLQkJCSBTVEFUSU9OX0lORk9fUlhfQllURVMgfAotCQkJIFNUQVRJT05fSU5GT19SWF9QQUNLRVRTOworCXNpbmZvLT5maWxsZWQgfD0gQklUKE5MODAyMTFfU1RBX0lORk9fVFhfQllURVMpIHwKKwkJCSBCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9QQUNLRVRTKSB8CisJCQkgQklUKE5MODAyMTFfU1RBX0lORk9fUlhfQllURVMpIHwKKwkJCSBCSVQoTkw4MDIxMV9TVEFfSU5GT19SWF9QQUNLRVRTKTsKIAlzaW5mby0+dHhfYnl0ZXMgPSBwcml2LT5kZXYtPnN0YXRzLnR4X2J5dGVzOwogCXNpbmZvLT50eF9wYWNrZXRzID0gcHJpdi0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzOwogCXNpbmZvLT5yeF9ieXRlcyA9IHByaXYtPmRldi0+c3RhdHMucnhfYnl0ZXM7CkBAIC0xNjI5LDE0ICsxNjI5LDE0IEBACiAJcmV0ID0gbGJzX2dldF9yc3NpKHByaXYsICZzaWduYWwsICZub2lzZSk7CiAJaWYgKHJldCA9PSAwKSB7CiAJCXNpbmZvLT5zaWduYWwgPSBzaWduYWw7Ci0JCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1NJR05BTDsKKwkJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19TSUdOQUwpOwogCX0KIAogCS8qIENvbnZlcnQgcHJpdi0+Y3VyX3JhdGUgZnJvbSBod192YWx1ZSB0byBOTDgwMjExIHZhbHVlICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGJzX3JhdGVzKTsgaSsrKSB7CiAJCWlmIChwcml2LT5jdXJfcmF0ZSA9PSBsYnNfcmF0ZXNbaV0uaHdfdmFsdWUpIHsKIAkJCXNpbmZvLT50eHJhdGUubGVnYWN5ID0gbGJzX3JhdGVzW2ldLmJpdHJhdGU7Ci0JCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19UWF9CSVRSQVRFOworCQkJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKaW5kZXggZWY1OGE4OC4uNGE0YzY1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCkBAIC02MjUsMjIgKzYyNSwyMiBAQAogCW9sZF9wcyA9IGRhdGEtPnBzOwogCWRhdGEtPnBzID0gdmFsOwogCisJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWlmICh2YWwgPT0gUFNfTUFOVUFMX1BPTEwpIHsKLQkJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXMoZGF0YS0+aHcsCi0JCQkJCQkgICAgSUVFRTgwMjExX0lGQUNFX0lURVJfTk9STUFMLAotCQkJCQkJICAgIGh3c2ltX3NlbmRfcHNfcG9sbCwgZGF0YSk7CisJCWllZWU4MDIxMV9pdGVyYXRlX2FjdGl2ZV9pbnRlcmZhY2VzX2F0b21pYygKKwkJCWRhdGEtPmh3LCBJRUVFODAyMTFfSUZBQ0VfSVRFUl9OT1JNQUwsCisJCQlod3NpbV9zZW5kX3BzX3BvbGwsIGRhdGEpOwogCQlkYXRhLT5wc19wb2xsX3BlbmRpbmcgPSB0cnVlOwogCX0gZWxzZSBpZiAob2xkX3BzID09IFBTX0RJU0FCTEVEICYmIHZhbCAhPSBQU19ESVNBQkxFRCkgewotCQlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyhkYXRhLT5odywKLQkJCQkJCSAgICBJRUVFODAyMTFfSUZBQ0VfSVRFUl9OT1JNQUwsCi0JCQkJCQkgICAgaHdzaW1fc2VuZF9udWxsZnVuY19wcywKLQkJCQkJCSAgICBkYXRhKTsKKwkJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXNfYXRvbWljKAorCQkJZGF0YS0+aHcsIElFRUU4MDIxMV9JRkFDRV9JVEVSX05PUk1BTCwKKwkJCWh3c2ltX3NlbmRfbnVsbGZ1bmNfcHMsIGRhdGEpOwogCX0gZWxzZSBpZiAob2xkX3BzICE9IFBTX0RJU0FCTEVEICYmIHZhbCA9PSBQU19ESVNBQkxFRCkgewotCQlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlcyhkYXRhLT5odywKLQkJCQkJCSAgICBJRUVFODAyMTFfSUZBQ0VfSVRFUl9OT1JNQUwsCi0JCQkJCQkgICAgaHdzaW1fc2VuZF9udWxsZnVuY19ub19wcywKLQkJCQkJCSAgICBkYXRhKTsKKwkJaWVlZTgwMjExX2l0ZXJhdGVfYWN0aXZlX2ludGVyZmFjZXNfYXRvbWljKAorCQkJZGF0YS0+aHcsIElFRUU4MDIxMV9JRkFDRV9JVEVSX05PUk1BTCwKKwkJCWh3c2ltX3NlbmRfbnVsbGZ1bmNfbm9fcHMsIGRhdGEpOwogCX0KKwlsb2NhbF9iaF9lbmFibGUoKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjE0OSwxNCArMjE0OSwxNCBAQAogCWlmIChwYXJhbS0+cmVnZCkgewogCQlpbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBod3NpbV93b3JsZF9yZWdkb21fY3VzdG9tW2ldICE9IHBhcmFtLT5yZWdkICYmCi0JCSAgICAgaSA8IEFSUkFZX1NJWkUoaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbSk7IGkrKykKLQkJCTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHdzaW1fd29ybGRfcmVnZG9tX2N1c3RvbSk7IGkrKykgeworCQkJaWYgKGh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b21baV0gIT0gcGFyYW0tPnJlZ2QpCisJCQkJY29udGludWU7CiAKLQkJaWYgKGkgPCBBUlJBWV9TSVpFKGh3c2ltX3dvcmxkX3JlZ2RvbV9jdXN0b20pKSB7CiAJCQlyZXQgPSBubGFfcHV0X3UzMihza2IsIEhXU0lNX0FUVFJfUkVHX0NVU1RPTV9SRUcsIGkpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldDsKKwkJCWJyZWFrOwogCQl9CiAJfQogCkBAIC0yNTU3LDcgKzI1NTcsOCBAQAogCWlmIChyZXMgPCAwKQogCQlnb3RvIG91dF9lcnI7CiAKLQlyZXR1cm4gZ2VubG1zZ19lbmQoc2tiLCBoZHIpOworCWdlbmxtc2dfZW5kKHNrYiwgaGRyKTsKKwlyZXR1cm4gMDsKIAogb3V0X2VycjoKIAlnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExaC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMWguYwppbmRleCAyNjY4ZTgzLi4zYWI4N2E4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExaC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFoLmMKQEAgLTIxLDYgKzIxLDE2IEBACiAjaW5jbHVkZSAiZncuaCIKIAogCit2b2lkIG13aWZpZXhfaW5pdF8xMWhfcGFyYW1zKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCit7CisJcHJpdi0+c3RhdGVfMTFoLmlzXzExaF9lbmFibGVkID0gdHJ1ZTsKKwlwcml2LT5zdGF0ZV8xMWguaXNfMTFoX2FjdGl2ZSA9IGZhbHNlOworfQorCitpbmxpbmUgaW50IG13aWZpZXhfaXNfMTFoX2FjdGl2ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCXJldHVybiBwcml2LT5zdGF0ZV8xMWguaXNfMTFoX2FjdGl2ZTsKK30KIC8qIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyAxMWggaW5mbyB0byBhIGJ1ZmZlciB3aGlsZSBqb2luaW5nIGFuCiAgKiBpbmZyYXN0cnVjdHVyZSBCU1MKICAqLwpAQCAtMzksNyArNDksNyBAQAogCQlyZXR1cm47CiAKIAlyYWRpb190eXBlID0gbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoKHU4KSBic3NfZGVzYy0+YnNzX2JhbmQpOwotCXNiYW5kID0gcHJpdi0+d2Rldi0+d2lwaHktPmJhbmRzW3JhZGlvX3R5cGVdOworCXNiYW5kID0gcHJpdi0+d2Rldi53aXBoeS0+YmFuZHNbcmFkaW9fdHlwZV07CiAKIAljYXAgPSAoc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfcHdyX2NhcGFiaWxpdHkgKikqYnVmZmVyOwogCWNhcC0+aGVhZGVyLnR5cGUgPSBjcHVfdG9fbGUxNihXTEFOX0VJRF9QV1JfQ0FQQUJJTElUWSk7CkBAIC02OSwxMCArNzksMTQgQEAKIH0KIAogLyogRW5hYmxlIG9yIGRpc2FibGUgdGhlIDExaCBleHRlbnNpb25zIGluIHRoZSBmaXJtd2FyZSAqLwotc3RhdGljIGludCBtd2lmaWV4XzExaF9hY3RpdmF0ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBib29sIGZsYWcpCitpbnQgbXdpZmlleF8xMWhfYWN0aXZhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgYm9vbCBmbGFnKQogewogCXUzMiBlbmFibGUgPSBmbGFnOwogCisJLyogZW5hYmxlIG1hc3RlciBtb2RlIHJhZGFyIGRldGVjdGlvbiBvbiBBUCBpbnRlcmZhY2UgKi8KKwlpZiAoKEdFVF9CU1NfUk9MRShwcml2KSA9PSBNV0lGSUVYX0JTU19ST0xFX1VBUCkgJiYgZW5hYmxlKQorCQllbmFibGUgfD0gTVdJRklFWF9NQVNURVJfUkFEQVJfREVUX01BU0s7CisKIAlyZXR1cm4gbXdpZmlleF9zZW5kX2NtZChwcml2LCBIb3N0Q21kX0NNRF84MDJfMTFfU05NUF9NSUIsCiAJCQkJSG9zdENtZF9BQ1RfR0VOX1NFVCwgRE9UMTFIX0ksICZlbmFibGUsIHRydWUpOwogfQpAQCAtOTEsMTEgKzEwNSwxOTEgQEAKIAkJICogYml0CiAJCSAqLwogCQltd2lmaWV4XzExaF9hY3RpdmF0ZShwcml2LCB0cnVlKTsKKwkJcHJpdi0+c3RhdGVfMTFoLmlzXzExaF9hY3RpdmUgPSB0cnVlOwogCQlic3NfZGVzYy0+Y2FwX2luZm9fYml0bWFwIHw9IFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UOwogCQltd2lmaWV4XzExaF9wcm9jZXNzX2luZnJhX2pvaW4ocHJpdiwgYnVmZmVyLCBic3NfZGVzYyk7CiAJfSBlbHNlIHsKIAkJLyogRGVhY3RpdmF0ZSAxMWggZnVuY3Rpb25zIGluIHRoZSBmaXJtd2FyZSAqLwogCQltd2lmaWV4XzExaF9hY3RpdmF0ZShwcml2LCBmYWxzZSk7CisJCXByaXYtPnN0YXRlXzExaC5pc18xMWhfYWN0aXZlID0gZmFsc2U7CiAJCWJzc19kZXNjLT5jYXBfaW5mb19iaXRtYXAgJj0gfldMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UOwogCX0KIH0KKworLyogVGhpcyBpcyBERlMgQ0FDIHdvcmsgcXVldWUgZnVuY3Rpb24uCisgKiBUaGlzIGRlbGF5ZWQgd29yayBlbWl0cyBDQUMgZmluaXNoZWQgZXZlbnQgZm9yIGNmZzgwMjExIGlmCisgKiBDQUMgd2FzIHN0YXJ0ZWQgZWFybGllci4KKyAqLwordm9pZCBtd2lmaWV4X2Rmc19jYWNfd29ya19xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIGNoYW5kZWY7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXllZF93b3JrID0KKwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0KKwkJCWNvbnRhaW5lcl9vZihkZWxheWVkX3dvcmssIHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUsCisJCQkJICAgICBkZnNfY2FjX3dvcmspOworCisJaWYgKFdBUk5fT04oIXByaXYpKQorCQlyZXR1cm47CisKKwljaGFuZGVmID0gcHJpdi0+ZGZzX2NoYW5kZWY7CisJaWYgKHByaXYtPndkZXYuY2FjX3N0YXJ0ZWQpIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkiQ0FDIHRpbWVyIGZpbmlzaGVkOyBObyByYWRhciBkZXRlY3RlZFxuIik7CisJCWNmZzgwMjExX2NhY19ldmVudChwcml2LT5uZXRkZXYsICZjaGFuZGVmLAorCQkJCSAgIE5MODAyMTFfUkFEQVJfQ0FDX0ZJTklTSEVELAorCQkJCSAgIEdGUF9LRVJORUwpOworCX0KK30KKworLyogVGhpcyBmdW5jdGlvbiBwcmVwYXJlcyBjaGFubmVsIHJlcG9ydCByZXF1ZXN0IGNvbW1hbmQgdG8gRlcgZm9yCisgKiBzdGFydGluZyByYWRhciBkZXRlY3Rpb24uCisgKi8KK2ludCBtd2lmaWV4X2NtZF9pc3N1ZV9jaGFuX3JlcG9ydF9yZXF1ZXN0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkJICB2b2lkICpkYXRhX2J1ZikKK3sKKwlzdHJ1Y3QgaG9zdF9jbWRfZHNfY2hhbl9ycHRfcmVxICpjcl9yZXEgPSAmY21kLT5wYXJhbXMuY2hhbl9ycHRfcmVxOworCXN0cnVjdCBtd2lmaWV4X3JhZGFyX3BhcmFtcyAqcmFkYXJfcGFyYW1zID0gKHZvaWQgKilkYXRhX2J1ZjsKKworCWNtZC0+Y29tbWFuZCA9IGNwdV90b19sZTE2KEhvc3RDbWRfQ01EX0NIQU5fUkVQT1JUX1JFUVVFU1QpOworCWNtZC0+c2l6ZSA9IGNwdV90b19sZTE2KFNfRFNfR0VOKTsKKwlsZTE2X2FkZF9jcHUoJmNtZC0+c2l6ZSwgc2l6ZW9mKHN0cnVjdCBob3N0X2NtZF9kc19jaGFuX3JwdF9yZXEpKTsKKworCWNyX3JlcS0+Y2hhbl9kZXNjLnN0YXJ0X2ZyZXEgPSBjcHVfdG9fbGUxNihNV0lGSUVYX0FfQkFORF9TVEFSVF9GUkVRKTsKKwljcl9yZXEtPmNoYW5fZGVzYy5jaGFuX251bSA9IHJhZGFyX3BhcmFtcy0+Y2hhbmRlZi0+Y2hhbi0+aHdfdmFsdWU7CisJY3JfcmVxLT5jaGFuX2Rlc2MuY2hhbl93aWR0aCA9IHJhZGFyX3BhcmFtcy0+Y2hhbmRlZi0+d2lkdGg7CisJY3JfcmVxLT5tc2VjX2R3ZWxsX3RpbWUgPSBjcHVfdG9fbGUzMihyYWRhcl9wYXJhbXMtPmNhY190aW1lX21zKTsKKworCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkiMTFoOiBpc3N1aW5nIERGUyBSYWRhciBjaGVjayBmb3IgY2hhbm5lbD0lZFxuIiwKKwkJcmFkYXJfcGFyYW1zLT5jaGFuZGVmLT5jaGFuLT5od192YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyB0byBhYm9ydCBvbmdvaW5nIENBQyB1cG9uIHN0b3BwaW5nIEFQIG9wZXJhdGlvbnMKKyAqIG9yIGR1cmluZyB1bmxvYWQuCisgKi8KK3ZvaWQgbXdpZmlleF9hYm9ydF9jYWMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKK3sKKwlpZiAocHJpdi0+d2Rldi5jYWNfc3RhcnRlZCkgeworCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCSJBYm9ydGluZyBkZWxheWVkIHdvcmsgZm9yIENBQy5cbiIpOworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmRmc19jYWNfd29yayk7CisJCWNmZzgwMjExX2NhY19ldmVudChwcml2LT5uZXRkZXYsICZwcml2LT5kZnNfY2hhbmRlZiwKKwkJCQkgICBOTDgwMjExX1JBREFSX0NBQ19BQk9SVEVELCBHRlBfS0VSTkVMKTsKKwl9Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBjaGFubmVsIHJlcG9ydCBldmVudCBmcm9tIEZXIGR1cmluZyBDQUMgcGVyaW9kLgorICogSWYgcmFkYXIgaXMgZGV0ZWN0ZWQgZHVyaW5nIENBQywgZHJpdmVyIGluZGljYXRlcyB0aGUgc2FtZSB0byBjZmc4MDIxMQorICogYW5kIGFsc28gY2FuY2VscyBvbmdvaW5nIGRlbGF5ZWQgd29yay4KKyAqLworaW50IG13aWZpZXhfMTFoX2hhbmRsZV9jaGFucnB0X3JlYWR5KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBob3N0X2NtZF9kc19jaGFuX3JwdF9ldmVudCAqcnB0X2V2ZW50OworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fcnB0X2RhdGEgKnJwdDsKKwl1OCAqZXZ0X2J1ZjsKKwl1MTYgZXZlbnRfbGVuLCB0bHZfbGVuOworCisJcnB0X2V2ZW50ID0gKHZvaWQgKikoc2tiLT5kYXRhICsgc2l6ZW9mKHUzMikpOworCWV2ZW50X2xlbiA9IHNrYi0+bGVuIC0gKHNpemVvZihzdHJ1Y3QgaG9zdF9jbWRfZHNfY2hhbl9ycHRfZXZlbnQpKworCQkJCXNpemVvZih1MzIpKTsKKworCWlmIChsZTMyX3RvX2NwdShycHRfZXZlbnQtPnJlc3VsdCkgIT0gSG9zdENtZF9SRVNVTFRfT0spIHsKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJFcnJvciBpbiBjaGFubmVsIHJlcG9ydCBldmVudFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlldnRfYnVmID0gKHZvaWQgKikmcnB0X2V2ZW50LT50bHZidWY7CisKKwl3aGlsZSAoZXZlbnRfbGVuID49IHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZV90eXBlc19oZWFkZXIpKSB7CisJCXJwdCA9ICh2b2lkICopJnJwdF9ldmVudC0+dGx2YnVmOworCQl0bHZfbGVuID0gbGUxNl90b19jcHUocnB0LT5oZWFkZXIubGVuKTsKKworCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KHJwdC0+aGVhZGVyLnR5cGUpKSB7CisJCWNhc2UgVExWX1RZUEVfQ0hBTlJQVF8xMUhfQkFTSUM6CisJCQlpZiAocnB0LT5tYXAucmFkYXIpIHsKKwkJCQlkZXZfbm90aWNlKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCQkJICAgIlJBREFSIERldGVjdGVkIG9uIGNoYW5uZWwgJWQhXG4iLAorCQkJCQkgICAgcHJpdi0+ZGZzX2NoYW5kZWYuY2hhbi0+aHdfdmFsdWUpOworCQkJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+ZGZzX2NhY193b3JrKTsKKwkJCQljZmc4MDIxMV9jYWNfZXZlbnQocHJpdi0+bmV0ZGV2LAorCQkJCQkJICAgJnByaXYtPmRmc19jaGFuZGVmLAorCQkJCQkJICAgTkw4MDIxMV9SQURBUl9ERVRFQ1RFRCwKKwkJCQkJCSAgIEdGUF9LRVJORUwpOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWV2dF9idWYgKz0gKHRsdl9sZW4gKyBzaXplb2YocnB0LT5oZWFkZXIpKTsKKwkJZXZlbnRfbGVuIC09ICh0bHZfbGVuICsgc2l6ZW9mKHJwdC0+aGVhZGVyKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEhhbmRsZXIgZm9yIHJhZGFyIGRldGVjdGVkIGV2ZW50IGZyb20gRlcuKi8KK2ludCBtd2lmaWV4XzExaF9oYW5kbGVfcmFkYXJfZGV0ZWN0ZWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBtd2lmaWV4X3JhZGFyX2RldF9ldmVudCAqcmRyX2V2ZW50OworCisJcmRyX2V2ZW50ID0gKHZvaWQgKikoc2tiLT5kYXRhICsgc2l6ZW9mKHUzMikpOworCisJaWYgKGxlMzJfdG9fY3B1KHJkcl9ldmVudC0+cGFzc2VkKSkgeworCQlkZXZfbm90aWNlKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCSAgICJyYWRhciBkZXRlY3RlZDsgaW5kaWNhdGluZyBrZXJuZWxcbiIpOworCQljZmc4MDIxMV9yYWRhcl9ldmVudChwcml2LT5hZGFwdGVyLT53aXBoeSwgJnByaXYtPmRmc19jaGFuZGVmLAorCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAicmVnZG9tYWluOiAlZFxuIiwKKwkJCXJkcl9ldmVudC0+cmVnX2RvbWFpbik7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAicmFkYXIgZGV0ZWN0aW9uIHR5cGU6ICVkXG4iLAorCQkJcmRyX2V2ZW50LT5kZXRfdHlwZSk7CisJfSBlbHNlIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJmYWxzZSByYWRhciBkZXRlY3Rpb24gZXZlbnQhXG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBpcyB3b3JrIHF1ZXVlIGZ1bmN0aW9uIGZvciBjaGFubmVsIHN3aXRjaCBoYW5kbGluZy4KKyAqIFRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZSBvZiB1cGRhdGluZyBuZXcgY2hhbm5lbCBkZWZpbml0aW4gdG8KKyAqIGJzcyBjb25maWcgc3RydWN0dXJlLCByZXN0YXJ0IEFQIGFuZCBpbmRpY2F0ZSBjaGFubmVsIHN3aXRjaCBzdWNjZXNzCisgKiB0byBjZmc4MDIxMS4KKyAqLwordm9pZCBtd2lmaWV4X2Rmc19jaGFuX3N3X3dvcmtfcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBtd2lmaWV4X3VhcF9ic3NfcGFyYW0gKmJzc19jZmc7CisJc3RydWN0IGRlbGF5ZWRfd29yayAqZGVsYXllZF93b3JrID0KKwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZGVsYXllZF93b3JrLCB3b3JrKTsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0KKwkJCWNvbnRhaW5lcl9vZihkZWxheWVkX3dvcmssIHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUsCisJCQkJICAgICBkZnNfY2hhbl9zd193b3JrKTsKKworCWlmIChXQVJOX09OKCFwcml2KSkKKwkJcmV0dXJuOworCisJYnNzX2NmZyA9ICZwcml2LT5ic3NfY2ZnOworCWlmICghYnNzX2NmZy0+YmVhY29uX3BlcmlvZCkgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCSJjaGFubmVsIHN3aXRjaDogQVAgYWxyZWFkeSBzdG9wcGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW13aWZpZXhfdWFwX3NldF9jaGFubmVsKGJzc19jZmcsIHByaXYtPmRmc19jaGFuZGVmKTsKKworCWlmIChtd2lmaWV4X2NvbmZpZ19zdGFydF91YXAocHJpdiwgYnNzX2NmZykpIHsKKwkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkiRmFpbGVkIHRvIHN0YXJ0IEFQIGFmdGVyIGNoYW5uZWwgc3dpdGNoXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRldl9ub3RpY2UocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkgICAiaW5kaWNhdGluZyBjaGFubmVsIHN3aXRjaCBjb21wbGV0aW9uIHRvIGtlcm5lbFxuIik7CisJY2ZnODAyMTFfY2hfc3dpdGNoX25vdGlmeShwcml2LT5uZXRkZXYsICZwcml2LT5kZnNfY2hhbmRlZik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW4uYwppbmRleCA5ZDQ3ODZlLi41NDMxNDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuLmMKQEAgLTM5LDcgKzM5LDcgQEAKIHsKIAl1aW50MTZfdCBodF9leHRfY2FwID0gbGUxNl90b19jcHUoaHRfY2FwLT5leHRlbmRlZF9odF9jYXBfaW5mbyk7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQgPQotCQkJCQlwcml2LT53ZGV2LT53aXBoeS0+YmFuZHNbcmFkaW9fdHlwZV07CisJCQkJCXByaXYtPndkZXYud2lwaHktPmJhbmRzW3JhZGlvX3R5cGVdOwogCiAJaWYgKFdBUk5fT05fT05DRSghc2JhbmQpKSB7CiAJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiSW52YWxpZCByYWRpbyB0eXBlIVxuIik7CkBAIC0zMTQsNyArMzE0LDcgQEAKIAkJcmV0dXJuIHJldF9sZW47CiAKIAlyYWRpb190eXBlID0gbXdpZmlleF9iYW5kX3RvX3JhZGlvX3R5cGUoKHU4KSBic3NfZGVzYy0+YnNzX2JhbmQpOwotCXNiYW5kID0gcHJpdi0+d2Rldi0+d2lwaHktPmJhbmRzW3JhZGlvX3R5cGVdOworCXNiYW5kID0gcHJpdi0+d2Rldi53aXBoeS0+YmFuZHNbcmFkaW9fdHlwZV07CiAKIAlpZiAoYnNzX2Rlc2MtPmJjbl9odF9jYXApIHsKIAkJaHRfY2FwID0gKHN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2h0Y2FwICopICpidWZmZXI7CkBAIC01NTgsMTAgKzU1OCwxMCBAQAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKIAkJc3RhX3B0ciA9IG13aWZpZXhfZ2V0X3N0YV9lbnRyeShwcml2LCBwZWVyX21hYyk7CiAJCWlmICghc3RhX3B0cikgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKIAkJCWRldl93YXJuKHByaXYtPmFkYXB0ZXItPmRldiwKIAkJCQkgIkJBIHNldHVwIHdpdGggdW5rbm93biBURExTIHBlZXIgJXBNIVxuIiwKIAkJCQlwZWVyX21hYyk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbGlzdF9zcGlubG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWlmIChzdGFfcHRyLT5pc18xMWFjX2VuYWJsZWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW4uaAppbmRleCBmMjc1Njc1Li44ZTJlMzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuLmgKQEAgLTEzMCw3ICsxMzAsOSBAQAogewogCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7CiAJdTggaTsKLQl1MzIgYmFfc3RyZWFtX251bSA9IDA7CisJdTMyIGJhX3N0cmVhbV9udW0gPSAwLCBiYV9zdHJlYW1fbWF4OworCisJYmFfc3RyZWFtX21heCA9IE1XSUZJRVhfTUFYX1RYX0JBU1RSRUFNX1NVUFBPUlRFRDsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgaSsrKSB7CiAJCXByaXYgPSBhZGFwdGVyLT5wcml2W2ldOwpAQCAtMTM5LDggKzE0MSwxNCBAQAogCQkJCSZwcml2LT50eF9iYV9zdHJlYW1fdGJsX3B0cik7CiAJfQogCi0JcmV0dXJuICgoYmFfc3RyZWFtX251bSA8Ci0JCSBNV0lGSUVYX01BWF9UWF9CQVNUUkVBTV9TVVBQT1JURUQpID8gdHJ1ZSA6IGZhbHNlKTsKKwlpZiAoYWRhcHRlci0+ZndfYXBpX3ZlciA9PSBNV0lGSUVYX0ZXX1YxNSkgeworCQliYV9zdHJlYW1fbWF4ID0KKwkJCSAgICAgICBHRVRTVVBQX1RYQkFTVFJFQU1TKGFkYXB0ZXItPmh3X2RvdF8xMW5fZGV2X2NhcCk7CisJCWlmICghYmFfc3RyZWFtX21heCkKKwkJCWJhX3N0cmVhbV9tYXggPSBNV0lGSUVYX01BWF9UWF9CQVNUUkVBTV9TVVBQT1JURUQ7CisJfQorCisJcmV0dXJuICgoYmFfc3RyZWFtX251bSA8IGJhX3N0cmVhbV9tYXgpID8gdHJ1ZSA6IGZhbHNlKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuX2FnZ3IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuX2FnZ3IuYwppbmRleCA4NzIwYTNkLi45Yjk4M2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4LzExbl9hZ2dyLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW5fYWdnci5jCkBAIC0xMDEsNiArMTAxLDEzIEBACiB7CiAJc3RydWN0IHR4cGQgKmxvY2FsX3R4X3BkOwogCXN0cnVjdCBtd2lmaWV4X3R4aW5mbyAqdHhfaW5mbyA9IE1XSUZJRVhfU0tCX1RYQ0Ioc2tiKTsKKwl1bnNpZ25lZCBpbnQgcGFkOworCWludCBoZWFkcm9vbSA9IChwcml2LT5hZGFwdGVyLT5pZmFjZV90eXBlID09CisJCQlNV0lGSUVYX1VTQikgPyAwIDogSU5URl9IRUFERVJfTEVOOworCisJcGFkID0gKCh2b2lkICopc2tiLT5kYXRhIC0gc2l6ZW9mKCpsb2NhbF90eF9wZCkgLQorCQloZWFkcm9vbSAtIE5VTEwpICYgKE1XSUZJRVhfRE1BX0FMSUdOX1NaIC0gMSk7CisJc2tiX3B1c2goc2tiLCBwYWQpOwogCiAJc2tiX3B1c2goc2tiLCBzaXplb2YoKmxvY2FsX3R4X3BkKSk7CiAKQEAgLTExNCwxMCArMTIxLDEyIEBACiAJbG9jYWxfdHhfcGQtPmJzc19udW0gPSBwcml2LT5ic3NfbnVtOwogCWxvY2FsX3R4X3BkLT5ic3NfdHlwZSA9IHByaXYtPmJzc190eXBlOwogCS8qIEFsd2F5cyB6ZXJvIGFzIHRoZSBkYXRhIGlzIGZvbGxvd2VkIGJ5IHN0cnVjdCB0eHBkICovCi0JbG9jYWxfdHhfcGQtPnR4X3BrdF9vZmZzZXQgPSBjcHVfdG9fbGUxNihzaXplb2Yoc3RydWN0IHR4cGQpKTsKKwlsb2NhbF90eF9wZC0+dHhfcGt0X29mZnNldCA9IGNwdV90b19sZTE2KHNpemVvZihzdHJ1Y3QgdHhwZCkgKworCQkJCQkJIHBhZCk7CiAJbG9jYWxfdHhfcGQtPnR4X3BrdF90eXBlID0gY3B1X3RvX2xlMTYoUEtUX1RZUEVfQU1TRFUpOwogCWxvY2FsX3R4X3BkLT50eF9wa3RfbGVuZ3RoID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4gLQotCQkJCQkJIHNpemVvZigqbG9jYWxfdHhfcGQpKTsKKwkJCQkJCSBzaXplb2YoKmxvY2FsX3R4X3BkKSAtCisJCQkJCQkgcGFkKTsKIAogCWlmICh0eF9pbmZvLT5mbGFncyAmIE1XSUZJRVhfQlVGX0ZMQUdfVERMU19QS1QpCiAJCWxvY2FsX3R4X3BkLT5mbGFncyB8PSBNV0lGSUVYX1RYUERfRkxBR1NfVERMU19QQUNLRVQ7CkBAIC0xODIsNyArMTkxLDcgQEAKIAkJCQkgICAgICAgcmFfbGlzdF9mbGFncyk7CiAJCXJldHVybiAtMTsKIAl9Ci0Jc2tiX3Jlc2VydmUoc2tiX2FnZ3IsIGhlYWRyb29tICsgc2l6ZW9mKHN0cnVjdCB0eHBkKSk7CisJc2tiX3Jlc2VydmUoc2tiX2FnZ3IsIE1XSUZJRVhfTUlOX0RBVEFfSEVBREVSX0xFTik7CiAJdHhfaW5mb19hZ2dyID0gIE1XSUZJRVhfU0tCX1RYQ0Ioc2tiX2FnZ3IpOwogCiAJbWVtc2V0KHR4X2luZm9fYWdnciwgMCwgc2l6ZW9mKCp0eF9pbmZvX2FnZ3IpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvMTFuX3J4cmVvcmRlci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMKaW5kZXggZDczZmRhMy4uYTJlODgxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC8xMW5fcnhyZW9yZGVyLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAkJc2tiX3RyaW0oc2tiLCBsZTE2X3RvX2NwdShsb2NhbF9yeF9wZC0+cnhfcGt0X2xlbmd0aCkpOwogCiAJCWllZWU4MDIxMV9hbXNkdV90b184MDIzcyhza2IsICZsaXN0LCBwcml2LT5jdXJyX2FkZHIsCi0JCQkJCSBwcml2LT53ZGV2LT5pZnR5cGUsIDAsIGZhbHNlKTsKKwkJCQkJIHByaXYtPndkZXYuaWZ0eXBlLCAwLCBmYWxzZSk7CiAKIAkJd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJmxpc3QpKSB7CiAJCQlyeF9za2IgPSBfX3NrYl9kZXF1ZXVlKCZsaXN0KTsKQEAgLTM1Myw5ICszNTMsNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnN0YV9saXN0X3NwaW5sb2NrLCBmbGFncyk7CiAJaWYgKG13aWZpZXhfcXVldWluZ19yYV9iYXNlZChwcml2KSkgewotCQlkZXZfZGJnKHByaXYtPmFkYXB0ZXItPmRldiwKLQkJCSJpbmZvOiBBUC9BREhPQzpsYXN0X3NlcT0lZCBzdGFydF93aW49JWRcbiIsCi0JCQlsYXN0X3NlcSwgbmV3X25vZGUtPnN0YXJ0X3dpbik7CiAJCWlmIChwcml2LT5ic3Nfcm9sZSA9PSBNV0lGSUVYX0JTU19ST0xFX1VBUCkgewogCQkJbm9kZSA9IG13aWZpZXhfZ2V0X3N0YV9lbnRyeShwcml2LCB0YSk7CiAJCQlpZiAobm9kZSkKQEAgLTM3MCw2ICszNjcsOSBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbGlzdF9zcGlubG9jaywgZmxhZ3MpOwogCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICJpbmZvOiBsYXN0X3NlcT0lZCBzdGFydF93aW49JWRcbiIsCisJCWxhc3Rfc2VxLCBuZXdfbm9kZS0+c3RhcnRfd2luKTsKKwogCWlmIChsYXN0X3NlcSAhPSBNV0lGSUVYX0RFRl8xMU5fUlhfU0VRX05VTSAmJgogCSAgICBsYXN0X3NlcSA+PSBuZXdfbm9kZS0+c3RhcnRfd2luKSB7CiAJCW5ld19ub2RlLT5zdGFydF93aW4gPSBsYXN0X3NlcSArIDE7CkBAIC0zOTEsMTAgKzM5MSw4IEBACiAJbmV3X25vZGUtPnRpbWVyX2NvbnRleHQucHJpdiA9IHByaXY7CiAJbmV3X25vZGUtPnRpbWVyX2NvbnRleHQudGltZXJfaXNfc2V0ID0gZmFsc2U7CiAKLQlpbml0X3RpbWVyKCZuZXdfbm9kZS0+dGltZXJfY29udGV4dC50aW1lcik7Ci0JbmV3X25vZGUtPnRpbWVyX2NvbnRleHQudGltZXIuZnVuY3Rpb24gPSBtd2lmaWV4X2ZsdXNoX2RhdGE7Ci0JbmV3X25vZGUtPnRpbWVyX2NvbnRleHQudGltZXIuZGF0YSA9Ci0JCQkodW5zaWduZWQgbG9uZykgJm5ld19ub2RlLT50aW1lcl9jb250ZXh0OworCXNldHVwX3RpbWVyKCZuZXdfbm9kZS0+dGltZXJfY29udGV4dC50aW1lciwgbXdpZmlleF9mbHVzaF9kYXRhLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpJm5ld19ub2RlLT50aW1lcl9jb250ZXh0KTsKIAogCWZvciAoaSA9IDA7IGkgPCB3aW5fc2l6ZTsgKytpKQogCQluZXdfbm9kZS0+cnhfcmVvcmRlcl9wdHJbaV0gPSBOVUxMOwpAQCAtNDY4LDEwICs0NjYsMTAgQEAKIAkJc3RhX3B0ciA9IG13aWZpZXhfZ2V0X3N0YV9lbnRyeShwcml2LAogCQkJCQkJY21kX2FkZGJhX3JlcS0+cGVlcl9tYWNfYWRkcik7CiAJCWlmICghc3RhX3B0cikgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKIAkJCWRldl93YXJuKHByaXYtPmFkYXB0ZXItPmRldiwKIAkJCQkgIkJBIHNldHVwIHdpdGggdW5rbm93biBURExTIHBlZXIgJXBNIVxuIiwKIAkJCQkgY21kX2FkZGJhX3JlcS0+cGVlcl9tYWNfYWRkcik7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5zdGFfbGlzdF9zcGlubG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWlmIChzdGFfcHRyLT5pc18xMWFjX2VuYWJsZWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9NYWtlZmlsZQppbmRleCA5NDg3ZDcyLi5mZGZkOWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvTWFrZWZpbGUKQEAgLTUzLDMgKzUzLDUgQEAKIAogbXdpZmlleF91c2IteSArPSB1c2Iubwogb2JqLSQoQ09ORklHX01XSUZJRVhfVVNCKSArPSBtd2lmaWV4X3VzYi5vCisKK2NjZmxhZ3MteSArPSAtRF9fQ0hFQ0tfRU5ESUFOCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmZzgwMjExLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmZzgwMjExLmMKaW5kZXggNGE2NmE2NTUuLjQxYzhlMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvY2ZnODAyMTEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmZzgwMjExLmMKQEAgLTU5MCw3NyArNTkwLDYyIEBACiAJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IG13aWZpZXhfY2ZnODAyMTFfZ2V0X2FkYXB0ZXIod2lwaHkpOwogCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7CiAJc3RydWN0IG13aWZpZXhfdWFwX2Jzc19wYXJhbSAqYnNzX2NmZzsKLQlpbnQgcmV0LCBic3Nfc3RhcnRlZCwgaTsKKwlpbnQgcmV0OwogCi0JZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspIHsKLQkJcHJpdiA9IGFkYXB0ZXItPnByaXZbaV07CisJcHJpdiA9IG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9BTlkpOwogCi0JCXN3aXRjaCAocHJpdi0+YnNzX3JvbGUpIHsKLQkJY2FzZSBNV0lGSUVYX0JTU19ST0xFX1VBUDoKLQkJCWJzc19jZmcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXdpZmlleF91YXBfYnNzX3BhcmFtKSwKLQkJCQkJICBHRlBfS0VSTkVMKTsKLQkJCWlmICghYnNzX2NmZykKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQotCQkJbXdpZmlleF9zZXRfc3lzX2NvbmZpZ19pbnZhbGlkX2RhdGEoYnNzX2NmZyk7Ci0KLQkJCWlmIChjaGFuZ2VkICYgV0lQSFlfUEFSQU1fUlRTX1RIUkVTSE9MRCkKLQkJCQlic3NfY2ZnLT5ydHNfdGhyZXNob2xkID0gd2lwaHktPnJ0c190aHJlc2hvbGQ7Ci0JCQlpZiAoY2hhbmdlZCAmIFdJUEhZX1BBUkFNX0ZSQUdfVEhSRVNIT0xEKQotCQkJCWJzc19jZmctPmZyYWdfdGhyZXNob2xkID0gd2lwaHktPmZyYWdfdGhyZXNob2xkOwotCQkJaWYgKGNoYW5nZWQgJiBXSVBIWV9QQVJBTV9SRVRSWV9MT05HKQotCQkJCWJzc19jZmctPnJldHJ5X2xpbWl0ID0gd2lwaHktPnJldHJ5X2xvbmc7Ci0KLQkJCWJzc19zdGFydGVkID0gcHJpdi0+YnNzX3N0YXJ0ZWQ7Ci0KLQkJCXJldCA9IG13aWZpZXhfc2VuZF9jbWQocHJpdiwgSG9zdENtZF9DTURfVUFQX0JTU19TVE9QLAotCQkJCQkgICAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwKLQkJCQkJICAgICAgIE5VTEwsIHRydWUpOwotCQkJaWYgKHJldCkgewotCQkJCXdpcGh5X2Vycih3aXBoeSwgIkZhaWxlZCB0byBzdG9wIHRoZSBCU1NcbiIpOwotCQkJCWtmcmVlKGJzc19jZmcpOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0KLQkJCXJldCA9IG13aWZpZXhfc2VuZF9jbWQocHJpdiwgSG9zdENtZF9DTURfVUFQX1NZU19DT05GSUcsCi0JCQkJCSAgICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULAotCQkJCQkgICAgICAgVUFQX0JTU19QQVJBTVNfSSwgYnNzX2NmZywKLQkJCQkJICAgICAgIGZhbHNlKTsKLQotCQkJa2ZyZWUoYnNzX2NmZyk7Ci0KLQkJCWlmIChyZXQpIHsKLQkJCQl3aXBoeV9lcnIod2lwaHksICJGYWlsZWQgdG8gc2V0IGJzcyBjb25maWdcbiIpOwotCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0KLQkJCWlmICghYnNzX3N0YXJ0ZWQpCi0JCQkJYnJlYWs7Ci0KLQkJCXJldCA9IG13aWZpZXhfc2VuZF9jbWQocHJpdiwgSG9zdENtZF9DTURfVUFQX0JTU19TVEFSVCwKLQkJCQkJICAgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsCi0JCQkJCSAgICAgICBOVUxMLCBmYWxzZSk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJd2lwaHlfZXJyKHdpcGh5LCAiRmFpbGVkIHRvIHN0YXJ0IEJTU1xuIik7Ci0JCQkJcmV0dXJuIHJldDsKLQkJCX0KLQotCQkJYnJlYWs7Ci0JCWNhc2UgTVdJRklFWF9CU1NfUk9MRV9TVEE6Ci0JCQlpZiAoY2hhbmdlZCAmIFdJUEhZX1BBUkFNX1JUU19USFJFU0hPTEQpIHsKLQkJCQlyZXQgPSBtd2lmaWV4X3NldF9ydHMocHJpdiwKLQkJCQkJCSAgICAgIHdpcGh5LT5ydHNfdGhyZXNob2xkKTsKLQkJCQlpZiAocmV0KQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCQkJaWYgKGNoYW5nZWQgJiBXSVBIWV9QQVJBTV9GUkFHX1RIUkVTSE9MRCkgewotCQkJCXJldCA9IG13aWZpZXhfc2V0X2ZyYWcocHJpdiwKLQkJCQkJCSAgICAgICB3aXBoeS0+ZnJhZ190aHJlc2hvbGQpOwotCQkJCWlmIChyZXQpCi0JCQkJCXJldHVybiByZXQ7Ci0JCQl9Ci0JCQlicmVhazsKKwlzd2l0Y2ggKHByaXYtPmJzc19yb2xlKSB7CisJY2FzZSBNV0lGSUVYX0JTU19ST0xFX1VBUDoKKwkJaWYgKHByaXYtPmJzc19zdGFydGVkKSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwKKwkJCQkiY2Fubm90IGNoYW5nZSB3aXBoeSBwYXJhbXMgd2hlbiBic3Mgc3RhcnRlZCIpOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKworCQlic3NfY2ZnID0ga3phbGxvYyhzaXplb2YoKmJzc19jZmcpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFic3NfY2ZnKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJbXdpZmlleF9zZXRfc3lzX2NvbmZpZ19pbnZhbGlkX2RhdGEoYnNzX2NmZyk7CisKKwkJaWYgKGNoYW5nZWQgJiBXSVBIWV9QQVJBTV9SVFNfVEhSRVNIT0xEKQorCQkJYnNzX2NmZy0+cnRzX3RocmVzaG9sZCA9IHdpcGh5LT5ydHNfdGhyZXNob2xkOworCQlpZiAoY2hhbmdlZCAmIFdJUEhZX1BBUkFNX0ZSQUdfVEhSRVNIT0xEKQorCQkJYnNzX2NmZy0+ZnJhZ190aHJlc2hvbGQgPSB3aXBoeS0+ZnJhZ190aHJlc2hvbGQ7CisJCWlmIChjaGFuZ2VkICYgV0lQSFlfUEFSQU1fUkVUUllfTE9ORykKKwkJCWJzc19jZmctPnJldHJ5X2xpbWl0ID0gd2lwaHktPnJldHJ5X2xvbmc7CisKKwkJcmV0ID0gbXdpZmlleF9zZW5kX2NtZChwcml2LCBIb3N0Q21kX0NNRF9VQVBfU1lTX0NPTkZJRywKKwkJCQkgICAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwKKwkJCQkgICAgICAgVUFQX0JTU19QQVJBTVNfSSwgYnNzX2NmZywKKwkJCQkgICAgICAgZmFsc2UpOworCisJCWtmcmVlKGJzc19jZmcpOworCQlpZiAocmV0KSB7CisJCQl3aXBoeV9lcnIod2lwaHksICJGYWlsZWQgdG8gc2V0IHdpcGh5IHBoeSBwYXJhbXNcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlicmVhazsKKworCQljYXNlIE1XSUZJRVhfQlNTX1JPTEVfU1RBOgorCQlpZiAocHJpdi0+bWVkaWFfY29ubmVjdGVkKSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwKKwkJCQkiY2Fubm90IGNoYW5nZSB3aXBoeSBwYXJhbXMgd2hlbiBjb25uZWN0ZWQiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChjaGFuZ2VkICYgV0lQSFlfUEFSQU1fUlRTX1RIUkVTSE9MRCkgeworCQkJcmV0ID0gbXdpZmlleF9zZXRfcnRzKHByaXYsCisJCQkJCSAgICAgIHdpcGh5LT5ydHNfdGhyZXNob2xkKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpZiAoY2hhbmdlZCAmIFdJUEhZX1BBUkFNX0ZSQUdfVEhSRVNIT0xEKSB7CisJCQlyZXQgPSBtd2lmaWV4X3NldF9mcmFnKHByaXYsCisJCQkJCSAgICAgICB3aXBoeS0+ZnJhZ190aHJlc2hvbGQpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCWJyZWFrOwogCX0KIAogCXJldHVybiAwOwpAQCAtNjcxLDkgKzY1Niw2IEBACiB7CiAJdTE2IG1vZGUgPSBQMlBfTU9ERV9ESVNBQkxFOwogCi0JaWYgKEdFVF9CU1NfUk9MRShwcml2KSAhPSBNV0lGSUVYX0JTU19ST0xFX1NUQSkKLQkJbXdpZmlleF9zZXRfYnNzX3JvbGUocHJpdiwgTVdJRklFWF9CU1NfUk9MRV9TVEEpOwotCiAJaWYgKG13aWZpZXhfc2VuZF9jbWQocHJpdiwgSG9zdENtZF9DTURfUDJQX01PREVfQ0ZHLAogCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCAmbW9kZSwgdHJ1ZSkpCiAJCXJldHVybiAtMTsKQEAgLTczMCwxMiArNzEyLDI0OSBAQAogCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCAmbW9kZSwgdHJ1ZSkpCiAJCXJldHVybiAtMTsKIAotCWlmIChHRVRfQlNTX1JPTEUocHJpdikgIT0gTVdJRklFWF9CU1NfUk9MRV9VQVApCi0JCW13aWZpZXhfc2V0X2Jzc19yb2xlKHByaXYsIE1XSUZJRVhfQlNTX1JPTEVfVUFQKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtd2lmaWV4X2RlaW5pdF9wcml2X3BhcmFtcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCXByaXYtPm1nbXRfZnJhbWVfbWFzayA9IDA7CisJaWYgKG13aWZpZXhfc2VuZF9jbWQocHJpdiwgSG9zdENtZF9DTURfTUdNVF9GUkFNRV9SRUcsCisJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsCisJCQkgICAgICZwcml2LT5tZ210X2ZyYW1lX21hc2ssIGZhbHNlKSkgeworCQlkZXZfd2Fybihwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkgImNvdWxkIG5vdCB1bnJlZ2lzdGVyIG1nbXQgZnJhbWUgcnhcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbXdpZmlleF9kZWF1dGhlbnRpY2F0ZShwcml2LCBOVUxMKTsKKwltd2lmaWV4X2ZyZWVfcHJpdihwcml2KTsKKwlwcml2LT53ZGV2LmlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCXByaXYtPmJzc19tb2RlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CisJcHJpdi0+c2VjX2luZm8uYXV0aGVudGljYXRpb25fbW9kZSA9IE5MODAyMTFfQVVUSFRZUEVfT1BFTl9TWVNURU07CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorbXdpZmlleF9pbml0X25ld19wcml2X3BhcmFtcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUpCit7CisJbXdpZmlleF9pbml0X3ByaXYocHJpdik7CisKKwlwcml2LT5ic3NfbW9kZSA9IHR5cGU7CisJcHJpdi0+d2Rldi5pZnR5cGUgPSB0eXBlOworCisJbXdpZmlleF9pbml0X3ByaXZfcGFyYW1zKHByaXYsIHByaXYtPm5ldGRldik7CisJcHJpdi0+YnNzX3N0YXJ0ZWQgPSAwOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCXByaXYtPmJzc19yb2xlID0gIE1XSUZJRVhfQlNTX1JPTEVfU1RBOworCQlwcml2LT5ic3NfdHlwZSA9IE1XSUZJRVhfQlNTX1RZUEVfU1RBOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086CisJCXByaXYtPmJzc19yb2xlID0gIE1XSUZJRVhfQlNTX1JPTEVfU1RBOworCQlwcml2LT5ic3NfdHlwZSA9IE1XSUZJRVhfQlNTX1RZUEVfUDJQOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQlwcml2LT5ic3NfdHlwZSA9IE1XSUZJRVhfQlNTX1RZUEVfVUFQOworCQlwcml2LT5ic3Nfcm9sZSA9IE1XSUZJRVhfQlNTX1JPTEVfVUFQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCSIlczogY2hhbmdpbmcgdG8gJWQgbm90IHN1cHBvcnRlZFxuIiwKKwkJCWRldi0+bmFtZSwgdHlwZSk7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbXdpZmlleF9jaGFuZ2VfdmlmX3RvX3AycChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBlbnVtIG5sODAyMTFfaWZ0eXBlIGN1cnJfaWZ0eXBlLAorCQkJICBlbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGUsIHUzMiAqZmxhZ3MsCisJCQkgIHN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyOworCisJcHJpdiA9IG13aWZpZXhfbmV0ZGV2X2dldF9wcml2KGRldik7CisKKwlpZiAoIXByaXYpCisJCXJldHVybiAtMTsKKworCWFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCisJaWYgKGFkYXB0ZXItPmN1cnJfaWZhY2VfY29tYi5wMnBfaW50ZiA9PQorCSAgICBhZGFwdGVyLT5pZmFjZV9saW1pdC5wMnBfaW50ZikgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwKKwkJCSJjYW5ub3QgY3JlYXRlIG11bHRpcGxlIFAyUCBpZmFjZXNcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsICIlczogY2hhbmdpbmcgcm9sZSB0byBwMnBcbiIsIGRldi0+bmFtZSk7CisKKwlpZiAobXdpZmlleF9kZWluaXRfcHJpdl9wYXJhbXMocHJpdikpCisJCXJldHVybiAtMTsKKwlpZiAobXdpZmlleF9pbml0X25ld19wcml2X3BhcmFtcyhwcml2LCBkZXYsIHR5cGUpKQorCQlyZXR1cm4gLTE7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6CisJCWlmIChtd2lmaWV4X2NmZzgwMjExX2luaXRfcDJwX2NsaWVudChwcml2KSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzoKKwkJaWYgKG13aWZpZXhfY2ZnODAyMTFfaW5pdF9wMnBfZ28ocHJpdikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkiJXM6IGNoYW5naW5nIHRvICVkIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQlkZXYtPm5hbWUsIHR5cGUpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJaWYgKG13aWZpZXhfc2VuZF9jbWQocHJpdiwgSG9zdENtZF9DTURfU0VUX0JTU19NT0RFLAorCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCBOVUxMLCB0cnVlKSkKKwkJcmV0dXJuIC0xOworCisJaWYgKG13aWZpZXhfc3RhX2luaXRfY21kKHByaXYsIGZhbHNlLCBmYWxzZSkpCisJCXJldHVybiAtMTsKKworCXN3aXRjaCAoY3Vycl9pZnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJYWRhcHRlci0+Y3Vycl9pZmFjZV9jb21iLnN0YV9pbnRmLS07CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CisJCWFkYXB0ZXItPmN1cnJfaWZhY2VfY29tYi51YXBfaW50Zi0tOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlhZGFwdGVyLT5jdXJyX2lmYWNlX2NvbWIucDJwX2ludGYrKzsKKwlkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSA9IHR5cGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbXdpZmlleF9jaGFuZ2VfdmlmX3RvX3N0YV9hZGhvYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCWVudW0gbmw4MDIxMV9pZnR5cGUgY3Vycl9pZnR5cGUsCisJCQkJZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLCB1MzIgKmZsYWdzLAorCQkJCXN0cnVjdCB2aWZfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyOworCisJcHJpdiA9IG13aWZpZXhfbmV0ZGV2X2dldF9wcml2KGRldik7CisKKwlpZiAoIXByaXYpCisJCXJldHVybiAtMTsKKworCWFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOworCisJaWYgKChjdXJyX2lmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UICYmCisJICAgICBjdXJyX2lmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9QMlBfR08pICYmCisJICAgIChhZGFwdGVyLT5jdXJyX2lmYWNlX2NvbWIuc3RhX2ludGYgPT0KKwkgICAgIGFkYXB0ZXItPmlmYWNlX2xpbWl0LnN0YV9pbnRmKSkgeworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwKKwkJCSJjYW5ub3QgY3JlYXRlIG11bHRpcGxlIHN0YXRpb24vYWRob2MgaWZhY2VzXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICh0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCWRldl9ub3RpY2UoYWRhcHRlci0+ZGV2LAorCQkJICAgIiVzOiBjaGFuZ2luZyByb2xlIHRvIHN0YXRpb25cbiIsIGRldi0+bmFtZSk7CisJZWxzZQorCQlkZXZfbm90aWNlKGFkYXB0ZXItPmRldiwKKwkJCSAgICIlczogY2hhbmdpbmcgcm9sZSB0byBhZGhvY1xuIiwgZGV2LT5uYW1lKTsKKworCWlmIChtd2lmaWV4X2RlaW5pdF9wcml2X3BhcmFtcyhwcml2KSkKKwkJcmV0dXJuIC0xOworCWlmIChtd2lmaWV4X2luaXRfbmV3X3ByaXZfcGFyYW1zKHByaXYsIGRldiwgdHlwZSkpCisJCXJldHVybiAtMTsKKwlpZiAobXdpZmlleF9zZW5kX2NtZChwcml2LCBIb3N0Q21kX0NNRF9TRVRfQlNTX01PREUsCisJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIE5VTEwsIHRydWUpKQorCQlyZXR1cm4gLTE7CisJaWYgKG13aWZpZXhfc3RhX2luaXRfY21kKHByaXYsIGZhbHNlLCBmYWxzZSkpCisJCXJldHVybiAtMTsKKworCXN3aXRjaCAoY3Vycl9pZnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086CisJCWFkYXB0ZXItPmN1cnJfaWZhY2VfY29tYi5wMnBfaW50Zi0tOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQlhZGFwdGVyLT5jdXJyX2lmYWNlX2NvbWIudWFwX2ludGYtLTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJYWRhcHRlci0+Y3Vycl9pZmFjZV9jb21iLnN0YV9pbnRmKys7CisJZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgPSB0eXBlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cittd2lmaWV4X2NoYW5nZV92aWZfdG9fYXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBlbnVtIG5sODAyMTFfaWZ0eXBlIGN1cnJfaWZ0eXBlLAorCQkJIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwgdTMyICpmbGFncywKKwkJCSBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7CisJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcjsKKworCXByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdihkZXYpOworCisJaWYgKCFwcml2KQorCQlyZXR1cm4gLTE7CisKKwlhZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKKworCWlmIChhZGFwdGVyLT5jdXJyX2lmYWNlX2NvbWIudWFwX2ludGYgPT0KKwkgICAgYWRhcHRlci0+aWZhY2VfbGltaXQudWFwX2ludGYpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsCisJCQkiY2Fubm90IGNyZWF0ZSBtdWx0aXBsZSBBUCBpZmFjZXNcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGV2X25vdGljZShhZGFwdGVyLT5kZXYsICIlczogY2hhbmdpbmcgcm9sZSB0byBBUFxuIiwgZGV2LT5uYW1lKTsKKworCWlmIChtd2lmaWV4X2RlaW5pdF9wcml2X3BhcmFtcyhwcml2KSkKKwkJcmV0dXJuIC0xOworCWlmIChtd2lmaWV4X2luaXRfbmV3X3ByaXZfcGFyYW1zKHByaXYsIGRldiwgdHlwZSkpCisJCXJldHVybiAtMTsKKwlpZiAobXdpZmlleF9zZW5kX2NtZChwcml2LCBIb3N0Q21kX0NNRF9TRVRfQlNTX01PREUsCisJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIE5VTEwsIHRydWUpKQorCQlyZXR1cm4gLTE7CisJaWYgKG13aWZpZXhfc3RhX2luaXRfY21kKHByaXYsIGZhbHNlLCBmYWxzZSkpCisJCXJldHVybiAtMTsKKworCXN3aXRjaCAoY3Vycl9pZnR5cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086CisJCWFkYXB0ZXItPmN1cnJfaWZhY2VfY29tYi5wMnBfaW50Zi0tOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKKwkJYWRhcHRlci0+Y3Vycl9pZmFjZV9jb21iLnN0YV9pbnRmLS07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWFkYXB0ZXItPmN1cnJfaWZhY2VfY29tYi51YXBfaW50ZisrOworCWRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlID0gdHlwZTsKKwlyZXR1cm4gMDsKK30KIC8qCiAgKiBDRkc4MDIuMTEgb3BlcmF0aW9uIGhhbmRsZXIgdG8gY2hhbmdlIGludGVyZmFjZSB0eXBlLgogICovCkBAIC03NDUsMTkgKzk2NCwzMiBAQAogCQkJCSAgICAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLCB1MzIgKmZsYWdzLAogCQkJCSAgICAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKIHsKLQlpbnQgcmV0OwogCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdihkZXYpOworCWVudW0gbmw4MDIxMV9pZnR5cGUgY3Vycl9pZnR5cGUgPSBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZTsKIAotCXN3aXRjaCAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUpIHsKKwlzd2l0Y2ggKGN1cnJfaWZ0eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKIAkJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJCWJyZWFrOworCQkJcHJpdi0+YnNzX21vZGUgPSB0eXBlOworCQkJcHJpdi0+c2VjX2luZm8uYXV0aGVudGljYXRpb25fbW9kZSA9CisJCQkJCQkgICBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNOworCQkJZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgPSB0eXBlOworCQkJbXdpZmlleF9kZWF1dGhlbnRpY2F0ZShwcml2LCBOVUxMKTsKKwkJCXJldHVybiBtd2lmaWV4X3NlbmRfY21kKHByaXYsIEhvc3RDbWRfQ01EX1NFVF9CU1NfTU9ERSwKKwkJCQkJCUhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIE5VTEwsCisJCQkJCQl0cnVlKTsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOgorCQljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9HTzoKKwkJCXJldHVybiBtd2lmaWV4X2NoYW5nZV92aWZfdG9fcDJwKGRldiwgY3Vycl9pZnR5cGUsCisJCQkJCQkJIHR5cGUsIGZsYWdzLCBwYXJhbXMpOworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQkJcmV0dXJuIG13aWZpZXhfY2hhbmdlX3ZpZl90b19hcChkZXYsIGN1cnJfaWZ0eXBlLCB0eXBlLAorCQkJCQkJCWZsYWdzLCBwYXJhbXMpOwogCQljYXNlIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOgogCQkJd2lwaHlfd2Fybih3aXBoeSwgIiVzOiBrZXB0IHR5cGUgYXMgSUJTU1xuIiwgZGV2LT5uYW1lKTsKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoJLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuICovCiAJCQlyZXR1cm4gMDsKLQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJZGVmYXVsdDoKIAkJCXdpcGh5X2Vycih3aXBoeSwgIiVzOiBjaGFuZ2luZyB0byAlZCBub3Qgc3VwcG9ydGVkXG4iLAogCQkJCSAgZGV2LT5uYW1lLCB0eXBlKTsKQEAgLTc2NywyMiArOTk5LDI1IEBACiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQlzd2l0Y2ggKHR5cGUpIHsKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJCWJyZWFrOworCQkJcHJpdi0+YnNzX21vZGUgPSB0eXBlOworCQkJcHJpdi0+c2VjX2luZm8uYXV0aGVudGljYXRpb25fbW9kZSA9CisJCQkJCQkgICBOTDgwMjExX0FVVEhUWVBFX09QRU5fU1lTVEVNOworCQkJZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgPSB0eXBlOworCQkJbXdpZmlleF9kZWF1dGhlbnRpY2F0ZShwcml2LCBOVUxMKTsKKwkJCXJldHVybiBtd2lmaWV4X3NlbmRfY21kKHByaXYsIEhvc3RDbWRfQ01EX1NFVF9CU1NfTU9ERSwKKwkJCQkJCUhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIE5VTEwsCisJCQkJCQl0cnVlKTsKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOgotCQkJaWYgKG13aWZpZXhfY2ZnODAyMTFfaW5pdF9wMnBfY2xpZW50KHByaXYpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgPSB0eXBlOwotCQkJcmV0dXJuIDA7CiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOgotCQkJaWYgKG13aWZpZXhfY2ZnODAyMTFfaW5pdF9wMnBfZ28ocHJpdikpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSA9IHR5cGU7Ci0JCQlyZXR1cm4gMDsKKwkJCXJldHVybiBtd2lmaWV4X2NoYW5nZV92aWZfdG9fcDJwKGRldiwgY3Vycl9pZnR5cGUsCisJCQkJCQkJIHR5cGUsIGZsYWdzLCBwYXJhbXMpOworCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQkJcmV0dXJuIG13aWZpZXhfY2hhbmdlX3ZpZl90b19hcChkZXYsIGN1cnJfaWZ0eXBlLCB0eXBlLAorCQkJCQkJCWZsYWdzLCBwYXJhbXMpOwogCQljYXNlIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOgogCQkJd2lwaHlfd2Fybih3aXBoeSwgIiVzOiBrZXB0IHR5cGUgYXMgU1RBXG4iLCBkZXYtPm5hbWUpOwogCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CS8qIFRoaXMgc2hvdWxkbid0IGhhcHBlbiAqLwogCQkJcmV0dXJuIDA7Ci0JCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCWRlZmF1bHQ6CiAJCQl3aXBoeV9lcnIod2lwaHksICIlczogY2hhbmdpbmcgdG8gJWQgbm90IHN1cHBvcnRlZFxuIiwKIAkJCQkgIGRldi0+bmFtZSwgdHlwZSk7CkBAIC03OTEsMTIgKzEwMjYsMjAgQEAKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKIAkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJCXJldHVybiBtd2lmaWV4X2NoYW5nZV92aWZfdG9fc3RhX2FkaG9jKGRldiwgY3Vycl9pZnR5cGUsCisJCQkJCQkJICAgICAgIHR5cGUsIGZsYWdzLAorCQkJCQkJCSAgICAgICBwYXJhbXMpOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDoKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086CisJCQlyZXR1cm4gbXdpZmlleF9jaGFuZ2VfdmlmX3RvX3AycChkZXYsIGN1cnJfaWZ0eXBlLAorCQkJCQkJCSB0eXBlLCBmbGFncywgcGFyYW1zKTsKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDoKIAkJCXdpcGh5X3dhcm4od2lwaHksICIlczoga2VwdCB0eXBlIGFzIEFQXG4iLCBkZXYtPm5hbWUpOwogCQljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgkJLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuICovCiAJCQlyZXR1cm4gMDsKLQkJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQlkZWZhdWx0OgogCQkJd2lwaHlfZXJyKHdpcGh5LCAiJXM6IGNoYW5naW5nIHRvICVkIG5vdCBzdXBwb3J0ZWRcbiIsCiAJCQkJICBkZXYtPm5hbWUsIHR5cGUpOwpAQCAtODA3LDExICsxMDUwLDMwIEBACiAJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086CiAJCXN3aXRjaCAodHlwZSkgewogCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046Ci0JCQlpZiAobXdpZmlleF9jZmc4MDIxMV9kZWluaXRfcDJwKHByaXYpKQorCQkJaWYgKG13aWZpZXhfY2ZnODAyMTFfaW5pdF9wMnBfY2xpZW50KHByaXYpKQogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgPSB0eXBlOworCQkJYnJlYWs7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCQlpZiAobXdpZmlleF9jZmc4MDIxMV9kZWluaXRfcDJwKHByaXYpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIG13aWZpZXhfY2hhbmdlX3ZpZl90b19zdGFfYWRob2MoZGV2LCBjdXJyX2lmdHlwZSwKKwkJCQkJCQkgICAgICAgdHlwZSwgZmxhZ3MsCisJCQkJCQkJICAgICAgIHBhcmFtcyk7CisJCQlicmVhazsKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJCWlmIChtd2lmaWV4X2NmZzgwMjExX2RlaW5pdF9wMnAocHJpdikpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gbXdpZmlleF9jaGFuZ2VfdmlmX3RvX2FwKGRldiwgY3Vycl9pZnR5cGUsIHR5cGUsCisJCQkJCQkJZmxhZ3MsIHBhcmFtcyk7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ6CisJCQl3aXBoeV93YXJuKHdpcGh5LCAiJXM6IGtlcHQgdHlwZSBhcyBQMlBcbiIsIGRldi0+bmFtZSk7CisJCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDoKKwkJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfR086CiAJCQlyZXR1cm4gMDsKIAkJZGVmYXVsdDoKKwkJCXdpcGh5X2Vycih3aXBoeSwgIiVzOiBjaGFuZ2luZyB0byAlZCBub3Qgc3VwcG9ydGVkXG4iLAorCQkJCSAgZGV2LT5uYW1lLCB0eXBlKTsKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkJfQogCQlicmVhazsKQEAgLTgyMSwxNiArMTA4Myw4IEBACiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKLQlkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSA9IHR5cGU7Ci0JcHJpdi0+YnNzX21vZGUgPSB0eXBlOwotCW13aWZpZXhfZGVhdXRoZW50aWNhdGUocHJpdiwgTlVMTCk7CiAKLQlwcml2LT5zZWNfaW5mby5hdXRoZW50aWNhdGlvbl9tb2RlID0gTkw4MDIxMV9BVVRIVFlQRV9PUEVOX1NZU1RFTTsKLQotCXJldCA9IG13aWZpZXhfc2VuZF9jbWQocHJpdiwgSG9zdENtZF9DTURfU0VUX0JTU19NT0RFLAotCQkJICAgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIE5VTEwsIHRydWUpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTg1NiwxNiArMTExMCwxNiBAQAogCQkJLyogSFQgb3IgVkhUICovCiAJCQlzd2l0Y2ggKHR4X2h0aW5mbyAmIChCSVQoMykgfCBCSVQoMikpKSB7CiAJCQljYXNlIDA6Ci0JCQkJLyogVGhpcyB3aWxsIGJlIDIwTUh6ICovCisJCQkJcmF0ZS0+YncgPSBSQVRFX0lORk9fQldfMjA7CiAJCQkJYnJlYWs7CiAJCQljYXNlIChCSVQoMikpOgotCQkJCXJhdGUtPmZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU180MF9NSFpfV0lEVEg7CisJCQkJcmF0ZS0+YncgPSBSQVRFX0lORk9fQldfNDA7CiAJCQkJYnJlYWs7CiAJCQljYXNlIChCSVQoMykpOgotCQkJCXJhdGUtPmZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU184MF9NSFpfV0lEVEg7CisJCQkJcmF0ZS0+YncgPSBSQVRFX0lORk9fQldfODA7CiAJCQkJYnJlYWs7CiAJCQljYXNlIChCSVQoMykgfCBCSVQoMikpOgotCQkJCXJhdGUtPmZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU18xNjBfTUhaX1dJRFRIOworCQkJCXJhdGUtPmJ3ID0gUkFURV9JTkZPX0JXXzE2MDsKIAkJCQlicmVhazsKIAkJCX0KIApAQCAtODg1LDggKzExMzksOSBAQAogCQlpZiAoKHR4X2h0aW5mbyAmIEJJVCgwKSkgJiYgKHByaXYtPnR4X3JhdGUgPCAxNikpIHsKIAkJCXJhdGUtPm1jcyA9IHByaXYtPnR4X3JhdGU7CiAJCQlyYXRlLT5mbGFncyB8PSBSQVRFX0lORk9fRkxBR1NfTUNTOworCQkJcmF0ZS0+YncgPSBSQVRFX0lORk9fQldfMjA7CiAJCQlpZiAodHhfaHRpbmZvICYgQklUKDEpKQotCQkJCXJhdGUtPmZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU180MF9NSFpfV0lEVEg7CisJCQkJcmF0ZS0+YncgPSBSQVRFX0lORk9fQldfNDA7CiAJCQlpZiAodHhfaHRpbmZvICYgQklUKDIpKQogCQkJCXJhdGUtPmZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU19TSE9SVF9HSTsKIAkJfQpAQCAtOTEwLDEwICsxMTY1LDEwIEBACiB7CiAJdTMyIHJhdGU7CiAKLQlzaW5mby0+ZmlsbGVkID0gU1RBVElPTl9JTkZPX1JYX0JZVEVTIHwgU1RBVElPTl9JTkZPX1RYX0JZVEVTIHwKLQkJCVNUQVRJT05fSU5GT19SWF9QQUNLRVRTIHwgU1RBVElPTl9JTkZPX1RYX1BBQ0tFVFMgfAotCQkJU1RBVElPTl9JTkZPX1RYX0JJVFJBVEUgfAotCQkJU1RBVElPTl9JTkZPX1NJR05BTCB8IFNUQVRJT05fSU5GT19TSUdOQUxfQVZHOworCXNpbmZvLT5maWxsZWQgPSBCSVQoTkw4MDIxMV9TVEFfSU5GT19SWF9CWVRFUykgfCBCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9CWVRFUykgfAorCQkJQklUKE5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUykgfCBCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9QQUNLRVRTKSB8CisJCQlCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKSB8CisJCQlCSVQoTkw4MDIxMV9TVEFfSU5GT19TSUdOQUwpIHwgQklUKE5MODAyMTFfU1RBX0lORk9fU0lHTkFMX0FWRyk7CiAKIAkvKiBHZXQgc2lnbmFsIGluZm9ybWF0aW9uIGZyb20gdGhlIGZpcm13YXJlICovCiAJaWYgKG13aWZpZXhfc2VuZF9jbWQocHJpdiwgSG9zdENtZF9DTURfUlNTSV9JTkZPLApAQCAtOTQ0LDcgKzExOTksNyBAQAogCXNpbmZvLT50eHJhdGUubGVnYWN5ID0gcmF0ZSAqIDU7CiAKIAlpZiAocHJpdi0+YnNzX21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewotCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19CU1NfUEFSQU07CisJCXNpbmZvLT5maWxsZWQgfD0gQklUKE5MODAyMTFfU1RBX0lORk9fQlNTX1BBUkFNKTsKIAkJc2luZm8tPmJzc19wYXJhbS5mbGFncyA9IDA7CiAJCWlmIChwcml2LT5jdXJyX2Jzc19wYXJhbXMuYnNzX2Rlc2NyaXB0b3IuY2FwX2luZm9fYml0bWFwICYKIAkJCQkJCVdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkKQEAgLTEwMzcsMTAgKzEyOTIsMTEgQEAKIAlzdXJ2ZXktPmNoYW5uZWwgPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwod2lwaHksCiAJICAgIGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShwY2hhbl9zdGF0c1tpZHhdLmNoYW5fbnVtLCBiYW5kKSk7CiAJc3VydmV5LT5maWxsZWQgPSBTVVJWRVlfSU5GT19OT0lTRV9EQk0gfAotCQlTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUUgfCBTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfQlVTWTsKKwkJCSBTVVJWRVlfSU5GT19USU1FIHwKKwkJCSBTVVJWRVlfSU5GT19USU1FX0JVU1k7CiAJc3VydmV5LT5ub2lzZSA9IHBjaGFuX3N0YXRzW2lkeF0ubm9pc2U7Ci0Jc3VydmV5LT5jaGFubmVsX3RpbWUgPSBwY2hhbl9zdGF0c1tpZHhdLmNjYV9zY2FuX2R1cjsKLQlzdXJ2ZXktPmNoYW5uZWxfdGltZV9idXN5ID0gcGNoYW5fc3RhdHNbaWR4XS5jY2FfYnVzeV9kdXI7CisJc3VydmV5LT50aW1lID0gcGNoYW5fc3RhdHNbaWR4XS5jY2Ffc2Nhbl9kdXI7CisJc3VydmV5LT50aW1lX2J1c3kgPSBwY2hhbl9zdGF0c1tpZHhdLmNjYV9idXN5X2R1cjsKIAogCXJldHVybiAwOwogfQpAQCAtMTM5NSwxMCArMTY1MSwxMyBAQAogewogCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdihkZXYpOwogCisJbXdpZmlleF9hYm9ydF9jYWMocHJpdik7CisKIAlpZiAobXdpZmlleF9kZWxfbWdtdF9pZXMocHJpdikpCiAJCXdpcGh5X2Vycih3aXBoeSwgIkZhaWxlZCB0byBkZWxldGUgbWdtdCBJRXMhXG4iKTsKIAogCXByaXYtPmFwXzExbl9lbmFibGVkID0gMDsKKwltZW1zZXQoJnByaXYtPmJzc19jZmcsIDAsIHNpemVvZihwcml2LT5ic3NfY2ZnKSk7CiAKIAlpZiAobXdpZmlleF9zZW5kX2NtZChwcml2LCBIb3N0Q21kX0NNRF9VQVBfQlNTX1NUT1AsCiAJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIE5VTEwsIHRydWUpKSB7CkBAIC0xNDIwLDEyICsxNjc5LDkgQEAKIHsKIAlzdHJ1Y3QgbXdpZmlleF91YXBfYnNzX3BhcmFtICpic3NfY2ZnOwogCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdihkZXYpOwotCXU4IGNvbmZpZ19iYW5kcyA9IDA7CiAKIAlpZiAoR0VUX0JTU19ST0xFKHByaXYpICE9IE1XSUZJRVhfQlNTX1JPTEVfVUFQKQogCQlyZXR1cm4gLTE7Ci0JaWYgKG13aWZpZXhfc2V0X21nbXRfaWVzKHByaXYsICZwYXJhbXMtPmJlYWNvbikpCi0JCXJldHVybiAtMTsKIAogCWJzc19jZmcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXdpZmlleF91YXBfYnNzX3BhcmFtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFic3NfY2ZnKQpAQCAtMTQ0Miw2ICsxNjk4LDExIEBACiAJCW1lbWNweShic3NfY2ZnLT5zc2lkLnNzaWQsIHBhcmFtcy0+c3NpZCwgcGFyYW1zLT5zc2lkX2xlbik7CiAJCWJzc19jZmctPnNzaWQuc3NpZF9sZW4gPSBwYXJhbXMtPnNzaWRfbGVuOwogCX0KKwlpZiAocGFyYW1zLT5pbmFjdGl2aXR5X3RpbWVvdXQgPiAwKSB7CisJCS8qIHN0YV9hb190aW1lci9wc19zdGFfYW9fdGltZXIgaXMgaW4gdW5pdCBvZiAxMDBtcyAqLworCQlic3NfY2ZnLT5zdGFfYW9fdGltZXIgPSAxMCAqIHBhcmFtcy0+aW5hY3Rpdml0eV90aW1lb3V0OworCQlic3NfY2ZnLT5wc19zdGFfYW9fdGltZXIgPSAxMCAqIHBhcmFtcy0+aW5hY3Rpdml0eV90aW1lb3V0OworCX0KIAogCXN3aXRjaCAocGFyYW1zLT5oaWRkZW5fc3NpZCkgewogCWNhc2UgTkw4MDIxMV9ISURERU5fU1NJRF9OT1RfSU5fVVNFOgpAQCAtMTQ1NywzMyArMTcxOCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWJzc19jZmctPmNoYW5uZWwgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCi0JCQkJcGFyYW1zLT5jaGFuZGVmLmNoYW4tPmNlbnRlcl9mcmVxKTsKLQotCS8qIFNldCBhcHByb3ByaWF0ZSBiYW5kcyAqLwotCWlmIChwYXJhbXMtPmNoYW5kZWYuY2hhbi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7Ci0JCWJzc19jZmctPmJhbmRfY2ZnID0gQkFORF9DT05GSUdfQkc7Ci0JCWNvbmZpZ19iYW5kcyA9IEJBTkRfQiB8IEJBTkRfRzsKLQotCQlpZiAocGFyYW1zLT5jaGFuZGVmLndpZHRoID4gTkw4MDIxMV9DSEFOX1dJRFRIXzIwX05PSFQpCi0JCQljb25maWdfYmFuZHMgfD0gQkFORF9HTjsKLQl9IGVsc2UgewotCQlic3NfY2ZnLT5iYW5kX2NmZyA9IEJBTkRfQ09ORklHX0E7Ci0JCWNvbmZpZ19iYW5kcyA9IEJBTkRfQTsKLQotCQlpZiAocGFyYW1zLT5jaGFuZGVmLndpZHRoID4gTkw4MDIxMV9DSEFOX1dJRFRIXzIwX05PSFQpCi0JCQljb25maWdfYmFuZHMgfD0gQkFORF9BTjsKLQotCQlpZiAocGFyYW1zLT5jaGFuZGVmLndpZHRoID4gTkw4MDIxMV9DSEFOX1dJRFRIXzQwKQotCQkJY29uZmlnX2JhbmRzIHw9IEJBTkRfQUFDOwotCX0KLQotCWlmICghKChjb25maWdfYmFuZHMgfCBwcml2LT5hZGFwdGVyLT5md19iYW5kcykgJgotCSAgICAgIH5wcml2LT5hZGFwdGVyLT5md19iYW5kcykpCi0JCXByaXYtPmFkYXB0ZXItPmNvbmZpZ19iYW5kcyA9IGNvbmZpZ19iYW5kczsKLQorCW13aWZpZXhfdWFwX3NldF9jaGFubmVsKGJzc19jZmcsIHBhcmFtcy0+Y2hhbmRlZik7CiAJbXdpZmlleF9zZXRfdWFwX3JhdGVzKGJzc19jZmcsIHBhcmFtcyk7Ci0JbXdpZmlleF9zZW5kX2RvbWFpbl9pbmZvX2NtZF9mdyh3aXBoeSk7CiAKIAlpZiAobXdpZmlleF9zZXRfc2VjdXJlX3BhcmFtcyhwcml2LCBic3NfY2ZnLCBwYXJhbXMpKSB7CiAJCWtmcmVlKGJzc19jZmcpOwpAQCAtMTUwNiw0NSArMTc0MiwyOSBAQAogCiAJbXdpZmlleF9zZXRfd21tX3BhcmFtcyhwcml2LCBic3NfY2ZnLCBwYXJhbXMpOwogCi0JaWYgKHBhcmFtcy0+aW5hY3Rpdml0eV90aW1lb3V0ID4gMCkgewotCQkvKiBzdGFfYW9fdGltZXIvcHNfc3RhX2FvX3RpbWVyIGlzIGluIHVuaXQgb2YgMTAwbXMgKi8KLQkJYnNzX2NmZy0+c3RhX2FvX3RpbWVyID0gMTAgKiBwYXJhbXMtPmluYWN0aXZpdHlfdGltZW91dDsKLQkJYnNzX2NmZy0+cHNfc3RhX2FvX3RpbWVyID0gMTAgKiBwYXJhbXMtPmluYWN0aXZpdHlfdGltZW91dDsKKwlpZiAobXdpZmlleF9pc18xMWhfYWN0aXZlKHByaXYpICYmCisJICAgICFjZmc4MDIxMV9jaGFuZGVmX2Rmc19yZXF1aXJlZCh3aXBoeSwgJnBhcmFtcy0+Y2hhbmRlZiwKKwkJCQkJICAgcHJpdi0+YnNzX21vZGUpKSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiRGlzYWJsZSAxMWggZXh0ZW5zaW9ucyBpbiBGV1xuIik7CisJCWlmIChtd2lmaWV4XzExaF9hY3RpdmF0ZShwcml2LCBmYWxzZSkpIHsKKwkJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gZGlzYWJsZSAxMWggZXh0ZW5zaW9ucyEhIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcHJpdi0+c3RhdGVfMTFoLmlzXzExaF9hY3RpdmUgPSB0cnVlOwogCX0KIAotCWlmIChtd2lmaWV4X3NlbmRfY21kKHByaXYsIEhvc3RDbWRfQ01EX1VBUF9CU1NfU1RPUCwKLQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgTlVMTCwgdHJ1ZSkpIHsKLQkJd2lwaHlfZXJyKHdpcGh5LCAiRmFpbGVkIHRvIHN0b3AgdGhlIEJTU1xuIik7CisJaWYgKG13aWZpZXhfY29uZmlnX3N0YXJ0X3VhcChwcml2LCBic3NfY2ZnKSkgeworCQl3aXBoeV9lcnIod2lwaHksICJGYWlsZWQgdG8gc3RhcnQgQVBcbiIpOwogCQlrZnJlZShic3NfY2ZnKTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChtd2lmaWV4X3NlbmRfY21kKHByaXYsIEhvc3RDbWRfQ01EX1VBUF9TWVNfQ09ORklHLAotCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULAotCQkJICAgICBVQVBfQlNTX1BBUkFNU19JLCBic3NfY2ZnLCBmYWxzZSkpIHsKLQkJd2lwaHlfZXJyKHdpcGh5LCAiRmFpbGVkIHRvIHNldCB0aGUgU1NJRFxuIik7Ci0JCWtmcmVlKGJzc19jZmcpOworCWlmIChtd2lmaWV4X3NldF9tZ210X2llcyhwcml2LCAmcGFyYW1zLT5iZWFjb24pKQogCQlyZXR1cm4gLTE7Ci0JfQogCisJbWVtY3B5KCZwcml2LT5ic3NfY2ZnLCBic3NfY2ZnLCBzaXplb2YocHJpdi0+YnNzX2NmZykpOwogCWtmcmVlKGJzc19jZmcpOwotCi0JaWYgKG13aWZpZXhfc2VuZF9jbWQocHJpdiwgSG9zdENtZF9DTURfVUFQX0JTU19TVEFSVCwKLQkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgTlVMTCwgZmFsc2UpKSB7Ci0JCXdpcGh5X2Vycih3aXBoeSwgIkZhaWxlZCB0byBzdGFydCB0aGUgQlNTXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCWlmIChwcml2LT5zZWNfaW5mby53ZXBfZW5hYmxlZCkKLQkJcHJpdi0+Y3Vycl9wa3RfZmlsdGVyIHw9IEhvc3RDbWRfQUNUX01BQ19XRVBfRU5BQkxFOwotCWVsc2UKLQkJcHJpdi0+Y3Vycl9wa3RfZmlsdGVyICY9IH5Ib3N0Q21kX0FDVF9NQUNfV0VQX0VOQUJMRTsKLQotCWlmIChtd2lmaWV4X3NlbmRfY21kKHByaXYsIEhvc3RDbWRfQ01EX01BQ19DT05UUk9MLAotCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLAotCQkJICAgICAmcHJpdi0+Y3Vycl9wa3RfZmlsdGVyLCB0cnVlKSkKLQkJcmV0dXJuIC0xOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2MDMsMTUgKzE4MjMsMTUgQEAKIAlpZV9sZW4gPSBpZV9idWZbMV0gKyBzaXplb2Yoc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyKTsKIAogCWJhbmQgPSBtd2lmaWV4X2JhbmRfdG9fcmFkaW9fdHlwZShwcml2LT5jdXJyX2Jzc19wYXJhbXMuYmFuZCk7Ci0JY2hhbiA9IF9faWVlZTgwMjExX2dldF9jaGFubmVsKHByaXYtPndkZXYtPndpcGh5LAorCWNoYW4gPSBfX2llZWU4MDIxMV9nZXRfY2hhbm5lbChwcml2LT53ZGV2LndpcGh5LAogCQkJaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGJzc19pbmZvLmJzc19jaGFuLAogCQkJCQkJICAgICAgIGJhbmQpKTsKIAotCWJzcyA9IGNmZzgwMjExX2luZm9ybV9ic3MocHJpdi0+d2Rldi0+d2lwaHksIGNoYW4sCisJYnNzID0gY2ZnODAyMTFfaW5mb3JtX2Jzcyhwcml2LT53ZGV2LndpcGh5LCBjaGFuLAogCQkJCSAgQ0ZHODAyMTFfQlNTX0ZUWVBFX1VOS05PV04sCiAJCQkJICBic3NfaW5mby5ic3NpZCwgMCwgV0xBTl9DQVBBQklMSVRZX0lCU1MsCiAJCQkJICAwLCBpZV9idWYsIGllX2xlbiwgMCwgR0ZQX0tFUk5FTCk7Ci0JY2ZnODAyMTFfcHV0X2Jzcyhwcml2LT53ZGV2LT53aXBoeSwgYnNzKTsKKwljZmc4MDIxMV9wdXRfYnNzKHByaXYtPndkZXYud2lwaHksIGJzcyk7CiAJbWVtY3B5KHByaXYtPmNmZ19ic3NpZCwgYnNzX2luZm8uYnNzaWQsIEVUSF9BTEVOKTsKIAogCXJldHVybiAwOwpAQCAtMTczMiwxMiArMTk1MiwxMiBAQAogCiAJCS8qIEZpbmQgdGhlIEJTUyB3ZSB3YW50IHVzaW5nIGF2YWlsYWJsZSBzY2FuIHJlc3VsdHMgKi8KIAkJaWYgKG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCi0JCQlic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHByaXYtPndkZXYtPndpcGh5LCBjaGFubmVsLAorCQkJYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyhwcml2LT53ZGV2LndpcGh5LCBjaGFubmVsLAogCQkJCQkgICAgICAgYnNzaWQsIHNzaWQsIHNzaWRfbGVuLAogCQkJCQkgICAgICAgV0xBTl9DQVBBQklMSVRZX0lCU1MsCiAJCQkJCSAgICAgICBXTEFOX0NBUEFCSUxJVFlfSUJTUyk7CiAJCWVsc2UKLQkJCWJzcyA9IGNmZzgwMjExX2dldF9ic3MocHJpdi0+d2Rldi0+d2lwaHksIGNoYW5uZWwsCisJCQlic3MgPSBjZmc4MDIxMV9nZXRfYnNzKHByaXYtPndkZXYud2lwaHksIGNoYW5uZWwsCiAJCQkJCSAgICAgICBic3NpZCwgc3NpZCwgc3NpZF9sZW4sCiAJCQkJCSAgICAgICBXTEFOX0NBUEFCSUxJVFlfRVNTLAogCQkJCQkgICAgICAgV0xBTl9DQVBBQklMSVRZX0VTUyk7CkBAIC0xNzg0LDYgKzIwMDQsNyBAQAogCQkJIHN0cnVjdCBjZmc4MDIxMV9jb25uZWN0X3BhcmFtcyAqc21lKQogewogCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdihkZXYpOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOwogCWludCByZXQ7CiAKIAlpZiAoR0VUX0JTU19ST0xFKHByaXYpICE9IE1XSUZJRVhfQlNTX1JPTEVfU1RBKSB7CkBAIC0xNzkzLDExICsyMDE0LDE4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChwcml2LT53ZGV2ICYmIHByaXYtPndkZXYtPmN1cnJlbnRfYnNzKSB7CisJaWYgKHByaXYtPndkZXYuY3VycmVudF9ic3MpIHsKIAkJd2lwaHlfd2Fybih3aXBoeSwgIiVzOiBhbHJlYWR5IGNvbm5lY3RlZFxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FQUxSRUFEWTsKIAl9CiAKKwlpZiAoYWRhcHRlci0+c3VycHJpc2VfcmVtb3ZlZCB8fCBhZGFwdGVyLT5pc19jbWRfdGltZWRvdXQpIHsKKwkJd2lwaHlfZXJyKHdpcGh5LAorCQkJICAiJXM6IElnbm9yZSBjb25uZWN0aW9uLiBDYXJkIHJlbW92ZWQgb3IgRlcgaW4gYmFkIHN0YXRlXG4iLAorCQkJICBkZXYtPm5hbWUpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKIAl3aXBoeV9kYmcod2lwaHksICJpbmZvOiBUcnlpbmcgdG8gYXNzb2NpYXRlIHRvICVzIGFuZCBic3NpZCAlcE1cbiIsCiAJCSAgKGNoYXIgKikgc21lLT5zc2lkLCBzbWUtPmJzc2lkKTsKIApAQCAtMTg0NCw3ICsyMDcyLDcgQEAKIHN0YXRpYyBpbnQgbXdpZmlleF9zZXRfaWJzc19wYXJhbXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKIAkJCQkgICBzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcykKIHsKLQlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gcHJpdi0+d2Rldi0+d2lwaHk7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHByaXYtPndkZXYud2lwaHk7CiAJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CiAJaW50IGluZGV4ID0gMCwgaTsKIAl1OCBjb25maWdfYmFuZHMgPSAwOwpAQCAtMjE2OSw2ICsyMzk3LDcgQEAKIAlodF9pbmZvLT5tY3MudHhfcGFyYW1zID0gSUVFRTgwMjExX0hUX01DU19UWF9ERUZJTkVEOwogfQogCisjZGVmaW5lIE1XSUZJRVhfTUFYX1dRX0xFTiAgMzAKIC8qCiAgKiAgY3JlYXRlIGEgbmV3IHZpcnR1YWwgaW50ZXJmYWNlIHdpdGggdGhlIGdpdmVuIG5hbWUKICAqLwpAQCAtMjE4Miw3ICsyNDExLDcgQEAKIAlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdm9pZCAqbWRldl9wcml2OwotCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CisJY2hhciBkZnNfY2FjX3N0cltNV0lGSUVYX01BWF9XUV9MRU5dLCBkZnNfY2hzd19zdHJbTVdJRklFWF9NQVhfV1FfTEVOXTsKIAogCWlmICghYWRhcHRlcikKIAkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CkBAIC0yMTkxLDIwICsyNDIwLDIyIEBACiAJY2FzZSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDoKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJcHJpdiA9IGFkYXB0ZXItPnByaXZbTVdJRklFWF9CU1NfVFlQRV9TVEFdOwotCQlpZiAocHJpdi0+YnNzX21vZGUpIHsKKwkJaWYgKGFkYXB0ZXItPmN1cnJfaWZhY2VfY29tYi5zdGFfaW50ZiA9PQorCQkgICAgYWRhcHRlci0+aWZhY2VfbGltaXQuc3RhX2ludGYpIHsKIAkJCXdpcGh5X2Vycih3aXBoeSwKIAkJCQkgICJjYW5ub3QgY3JlYXRlIG11bHRpcGxlIHN0YS9hZGhvYyBpZmFjZXNcbiIpOwogCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJCX0KIAotCQl3ZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdpcmVsZXNzX2RldiksIEdGUF9LRVJORUwpOwotCQlpZiAoIXdkZXYpCi0JCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJcHJpdiA9IG13aWZpZXhfZ2V0X3VudXNlZF9wcml2KGFkYXB0ZXIpOworCQlpZiAoIXByaXYpIHsKKwkJCXdpcGh5X2Vycih3aXBoeSwKKwkJCQkgICJjb3VsZCBub3QgZ2V0IGZyZWUgcHJpdmF0ZSBzdHJ1Y3RcbiIpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CisJCX0KIAotCQl3ZGV2LT53aXBoeSA9IHdpcGh5OwotCQlwcml2LT53ZGV2ID0gd2RldjsKLQkJd2Rldi0+aWZ0eXBlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKwkJcHJpdi0+d2Rldi53aXBoeSA9IHdpcGh5OworCQlwcml2LT53ZGV2LmlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CiAKIAkJaWYgKHR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpCiAJCQlwcml2LT5ic3NfbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CkBAIC0yMjE5LDIwICsyNDUwLDIyIEBACiAKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJcHJpdiA9IGFkYXB0ZXItPnByaXZbTVdJRklFWF9CU1NfVFlQRV9VQVBdOwotCi0JCWlmIChwcml2LT5ic3NfbW9kZSkgewotCQkJd2lwaHlfZXJyKHdpcGh5LCAiQ2FuJ3QgY3JlYXRlIG11bHRpcGxlIEFQIGludGVyZmFjZXMiKTsKKwkJaWYgKGFkYXB0ZXItPmN1cnJfaWZhY2VfY29tYi51YXBfaW50ZiA9PQorCQkgICAgYWRhcHRlci0+aWZhY2VfbGltaXQudWFwX2ludGYpIHsKKwkJCXdpcGh5X2Vycih3aXBoeSwKKwkJCQkgICJjYW5ub3QgY3JlYXRlIG11bHRpcGxlIEFQIGlmYWNlc1xuIik7CiAJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAkJfQogCi0JCXdkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2lyZWxlc3NfZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghd2RldikKLQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlwcml2ID0gbXdpZmlleF9nZXRfdW51c2VkX3ByaXYoYWRhcHRlcik7CisJCWlmICghcHJpdikgeworCQkJd2lwaHlfZXJyKHdpcGh5LAorCQkJCSAgImNvdWxkIG5vdCBnZXQgZnJlZSBwcml2YXRlIHN0cnVjdFxuIik7CisJCQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKKwkJfQogCi0JCXByaXYtPndkZXYgPSB3ZGV2OwotCQl3ZGV2LT53aXBoeSA9IHdpcGh5OwotCQl3ZGV2LT5pZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9BUDsKKwkJcHJpdi0+d2Rldi53aXBoeSA9IHdpcGh5OworCQlwcml2LT53ZGV2LmlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX0FQOwogCiAJCXByaXYtPmJzc190eXBlID0gTVdJRklFWF9CU1NfVFlQRV9VQVA7CiAJCXByaXYtPmZyYW1lX3R5cGUgPSBNV0lGSUVYX0RBVEFfRlJBTUVfVFlQRV9FVEhfSUk7CkBAIC0yMjQ0LDI0ICsyNDc3LDI1IEBACiAKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOgotCQlwcml2ID0gYWRhcHRlci0+cHJpdltNV0lGSUVYX0JTU19UWVBFX1AyUF07Ci0KLQkJaWYgKHByaXYtPmJzc19tb2RlKSB7Ci0JCQl3aXBoeV9lcnIod2lwaHksICJDYW4ndCBjcmVhdGUgbXVsdGlwbGUgUDJQIGlmYWNlcyIpOworCQlpZiAoYWRhcHRlci0+Y3Vycl9pZmFjZV9jb21iLnAycF9pbnRmID09CisJCSAgICBhZGFwdGVyLT5pZmFjZV9saW1pdC5wMnBfaW50ZikgeworCQkJd2lwaHlfZXJyKHdpcGh5LAorCQkJCSAgImNhbm5vdCBjcmVhdGUgbXVsdGlwbGUgUDJQIGlmYWNlc1xuIik7CiAJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAkJfQogCi0JCXdkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2lyZWxlc3NfZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghd2RldikKLQkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlwcml2ID0gbXdpZmlleF9nZXRfdW51c2VkX3ByaXYoYWRhcHRlcik7CisJCWlmICghcHJpdikgeworCQkJd2lwaHlfZXJyKHdpcGh5LAorCQkJCSAgImNvdWxkIG5vdCBnZXQgZnJlZSBwcml2YXRlIHN0cnVjdFxuIik7CisJCQlyZXR1cm4gRVJSX1BUUigtRUZBVUxUKTsKKwkJfQogCi0JCXByaXYtPndkZXYgPSB3ZGV2OwotCQl3ZGV2LT53aXBoeSA9IHdpcGh5OwotCisJCXByaXYtPndkZXYud2lwaHkgPSB3aXBoeTsKIAkJLyogQXQgc3RhcnQtdXAsIHdwYV9zdXBwbGljYW50IHRyaWVzIHRvIGNoYW5nZSB0aGUgaW50ZXJmYWNlCiAJCSAqIHRvIE5MODAyMTFfSUZUWVBFX1NUQVRJT04gaWYgaXQgaXMgbm90IG1hbmFnZWQgbW9kZS4KIAkJICovCi0JCXdkZXYtPmlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ7CisJCXByaXYtPndkZXYuaWZ0eXBlID0gTkw4MDIxMV9JRlRZUEVfUDJQX0NMSUVOVDsKIAkJcHJpdi0+YnNzX21vZGUgPSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOwogCiAJCS8qIFNldHRpbmcgYnNzX3R5cGUgdG8gUDJQIHRlbGxzIGZpcm13YXJlIHRoYXQgdGhpcyBpbnRlcmZhY2UKQEAgLTIyNzcsOCArMjUxMSw5IEBACiAJCXByaXYtPmJzc19udW0gPSAwOwogCiAJCWlmIChtd2lmaWV4X2NmZzgwMjExX2luaXRfcDJwX2NsaWVudChwcml2KSkgewotCQkJd2RldiA9IEVSUl9QVFIoLUVGQVVMVCk7Ci0JCQlnb3RvIGRvbmU7CisJCQltZW1zZXQoJnByaXYtPndkZXYsIDAsIHNpemVvZihwcml2LT53ZGV2KSk7CisJCQlwcml2LT53ZGV2LmlmdHlwZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCQkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CiAJCX0KIAogCQlicmVhazsKQEAgLTIyOTIsOSArMjUyNywxMCBAQAogCQkJICAgICAgIElFRUU4MDIxMV9OVU1fQUNTLCAxKTsKIAlpZiAoIWRldikgewogCQl3aXBoeV9lcnIod2lwaHksICJubyBtZW1vcnkgYXZhaWxhYmxlIGZvciBuZXRkZXZpY2VcbiIpOworCQltZW1zZXQoJnByaXYtPndkZXYsIDAsIHNpemVvZihwcml2LT53ZGV2KSk7CisJCXByaXYtPndkZXYuaWZ0eXBlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CiAJCXByaXYtPmJzc19tb2RlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7Ci0JCXdkZXYgPSBFUlJfUFRSKC1FTk9NRU0pOwotCQlnb3RvIGRvbmU7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAogCW13aWZpZXhfaW5pdF9wcml2X3BhcmFtcyhwcml2LCBkZXYpOwpAQCAtMjMxNCw3ICsyNTUwLDcgQEAKIAkJCSZ3aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0tPnZodF9jYXAsIHByaXYpOwogCiAJZGV2X25ldF9zZXQoZGV2LCB3aXBoeV9uZXQod2lwaHkpKTsKLQlkZXYtPmllZWU4MDIxMV9wdHIgPSBwcml2LT53ZGV2OworCWRldi0+aWVlZTgwMjExX3B0ciA9ICZwcml2LT53ZGV2OwogCWRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlID0gcHJpdi0+YnNzX21vZGU7CiAJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHdpcGh5LT5wZXJtX2FkZHIsIEVUSF9BTEVOKTsKIAlTRVRfTkVUREVWX0RFVihkZXYsIHdpcGh5X2Rldih3aXBoeSkpOwpAQCAtMjMzNSwxMCArMjU3MSw0NyBAQAogCQlmcmVlX25ldGRldihkZXYpOwogCQlwcml2LT5ic3NfbW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOwogCQlwcml2LT5uZXRkZXYgPSBOVUxMOwotCQl3ZGV2ID0gRVJSX1BUUigtRUZBVUxUKTsKLQkJZ290byBkb25lOworCQltZW1zZXQoJnByaXYtPndkZXYsIDAsIHNpemVvZihwcml2LT53ZGV2KSk7CisJCXByaXYtPndkZXYuaWZ0eXBlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CisJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOwogCX0KIAorCXN0cmNweShkZnNfY2FjX3N0ciwgIk1XSUZJRVhfREZTX0NBQyIpOworCXN0cmNhdChkZnNfY2FjX3N0ciwgbmFtZSk7CisJcHJpdi0+ZGZzX2NhY193b3JrcXVldWUgPSBhbGxvY193b3JrcXVldWUoZGZzX2NhY19zdHIsCisJCQkJCQkgIFdRX0hJR0hQUkkgfAorCQkJCQkJICBXUV9NRU1fUkVDTEFJTSB8CisJCQkJCQkgIFdRX1VOQk9VTkQsIDEpOworCWlmICghcHJpdi0+ZGZzX2NhY193b3JrcXVldWUpIHsKKwkJd2lwaHlfZXJyKHdpcGh5LCAiY2Fubm90IHJlZ2lzdGVyIHZpcnR1YWwgbmV0d29yayBkZXZpY2VcbiIpOworCQlmcmVlX25ldGRldihkZXYpOworCQlwcml2LT5ic3NfbW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOworCQlwcml2LT5uZXRkZXYgPSBOVUxMOworCQltZW1zZXQoJnByaXYtPndkZXYsIDAsIHNpemVvZihwcml2LT53ZGV2KSk7CisJCXByaXYtPndkZXYuaWZ0eXBlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5kZnNfY2FjX3dvcmssIG13aWZpZXhfZGZzX2NhY193b3JrX3F1ZXVlKTsKKworCXN0cmNweShkZnNfY2hzd19zdHIsICJNV0lGSUVYX0RGU19DSFNXIik7CisJc3RyY2F0KGRmc19jaHN3X3N0ciwgbmFtZSk7CisJcHJpdi0+ZGZzX2NoYW5fc3dfd29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKGRmc19jaHN3X3N0ciwKKwkJCQkJCSAgICAgIFdRX0hJR0hQUkkgfCBXUV9VTkJPVU5EIHwKKwkJCQkJCSAgICAgIFdRX01FTV9SRUNMQUlNLCAxKTsKKwlpZiAoIXByaXYtPmRmc19jaGFuX3N3X3dvcmtxdWV1ZSkgeworCQl3aXBoeV9lcnIod2lwaHksICJjYW5ub3QgcmVnaXN0ZXIgdmlydHVhbCBuZXR3b3JrIGRldmljZVxuIik7CisJCWZyZWVfbmV0ZGV2KGRldik7CisJCXByaXYtPmJzc19tb2RlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CisJCXByaXYtPm5ldGRldiA9IE5VTEw7CisJCW1lbXNldCgmcHJpdi0+d2RldiwgMCwgc2l6ZW9mKHByaXYtPndkZXYpKTsKKwkJcHJpdi0+d2Rldi5pZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmRmc19jaGFuX3N3X3dvcmssCisJCQkgIG13aWZpZXhfZGZzX2NoYW5fc3dfd29ya19xdWV1ZSk7CisKIAlzZW1hX2luaXQoJnByaXYtPmFzeW5jX3NlbSwgMSk7CiAKIAlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86ICVzOiBNYXJ2ZWxsIDgwMi4xMSBBZGFwdGVyXG4iLCBkZXYtPm5hbWUpOwpAQCAtMjM0NywxMyArMjYyMCwyNCBAQAogCW13aWZpZXhfZGV2X2RlYnVnZnNfaW5pdChwcml2KTsKICNlbmRpZgogCi1kb25lOgotCWlmIChJU19FUlIod2RldikpIHsKLQkJa2ZyZWUocHJpdi0+d2Rldik7Ci0JCXByaXYtPndkZXYgPSBOVUxMOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWFkYXB0ZXItPmN1cnJfaWZhY2VfY29tYi5zdGFfaW50ZisrOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQlhZGFwdGVyLT5jdXJyX2lmYWNlX2NvbWIudWFwX2ludGYrKzsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOgorCQlhZGFwdGVyLT5jdXJyX2lmYWNlX2NvbWIucDJwX2ludGYrKzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJd2lwaHlfZXJyKHdpcGh5LCAidHlwZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCi0JcmV0dXJuIHdkZXY7CisJcmV0dXJuICZwcml2LT53ZGV2OwogfQogRVhQT1JUX1NZTUJPTF9HUEwobXdpZmlleF9hZGRfdmlydHVhbF9pbnRmKTsKIApAQCAtMjM2MywxMiArMjY0NywxMyBAQAogaW50IG13aWZpZXhfZGVsX3ZpcnR1YWxfaW50ZihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2KQogewogCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdih3ZGV2LT5uZXRkZXYpOworCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBwcml2LT5hZGFwdGVyOwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiAJbXdpZmlleF9kZXZfZGVidWdmc19yZW1vdmUocHJpdik7CiAjZW5kaWYKIAotCW13aWZpZXhfc3RvcF9uZXRfZGV2X3F1ZXVlKHByaXYtPm5ldGRldiwgcHJpdi0+YWRhcHRlcik7CisJbXdpZmlleF9zdG9wX25ldF9kZXZfcXVldWUocHJpdi0+bmV0ZGV2LCBhZGFwdGVyKTsKIAogCWlmIChuZXRpZl9jYXJyaWVyX29rKHByaXYtPm5ldGRldikpCiAJCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm5ldGRldik7CkBAIC0yMzc2LDE2ICsyNjYxLDQ4IEBACiAJaWYgKHdkZXYtPm5ldGRldi0+cmVnX3N0YXRlID09IE5FVFJFR19SRUdJU1RFUkVEKQogCQl1bnJlZ2lzdGVyX25ldGRldmljZSh3ZGV2LT5uZXRkZXYpOwogCisJaWYgKHByaXYtPmRmc19jYWNfd29ya3F1ZXVlKSB7CisJCWZsdXNoX3dvcmtxdWV1ZShwcml2LT5kZnNfY2FjX3dvcmtxdWV1ZSk7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPmRmc19jYWNfd29ya3F1ZXVlKTsKKwkJcHJpdi0+ZGZzX2NhY193b3JrcXVldWUgPSBOVUxMOworCX0KKworCWlmIChwcml2LT5kZnNfY2hhbl9zd193b3JrcXVldWUpIHsKKwkJZmx1c2hfd29ya3F1ZXVlKHByaXYtPmRmc19jaGFuX3N3X3dvcmtxdWV1ZSk7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtPmRmc19jaGFuX3N3X3dvcmtxdWV1ZSk7CisJCXByaXYtPmRmc19jaGFuX3N3X3dvcmtxdWV1ZSA9IE5VTEw7CisJfQogCS8qIENsZWFyIHRoZSBwcml2IGluIGFkYXB0ZXIgKi8KIAlwcml2LT5uZXRkZXYtPmllZWU4MDIxMV9wdHIgPSBOVUxMOwogCXByaXYtPm5ldGRldiA9IE5VTEw7Ci0Ja2ZyZWUod2Rldik7Ci0JcHJpdi0+d2RldiA9IE5VTEw7CisJcHJpdi0+d2Rldi5pZnR5cGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDsKIAogCXByaXYtPm1lZGlhX2Nvbm5lY3RlZCA9IGZhbHNlOwogCisJc3dpdGNoIChwcml2LT5ic3NfbW9kZSkgeworCWNhc2UgTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ6CisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CisJCWFkYXB0ZXItPmN1cnJfaWZhY2VfY29tYi5zdGFfaW50ZisrOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQlhZGFwdGVyLT5jdXJyX2lmYWNlX2NvbWIudWFwX2ludGYrKzsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9QMlBfQ0xJRU5UOgorCWNhc2UgTkw4MDIxMV9JRlRZUEVfUDJQX0dPOgorCQlhZGFwdGVyLT5jdXJyX2lmYWNlX2NvbWIucDJwX2ludGYrKzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJkZWxfdmlydHVhbF9pbnRmOiB0eXBlIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlicmVhazsKKwl9CisKIAlwcml2LT5ic3NfbW9kZSA9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEOwogCisJaWYgKEdFVF9CU1NfUk9MRShwcml2KSA9PSBNV0lGSUVYX0JTU19ST0xFX1NUQSB8fAorCSAgICBHRVRfQlNTX1JPTEUocHJpdikgPT0gTVdJRklFWF9CU1NfUk9MRV9VQVApCisJCWtmcmVlKHByaXYtPmhpc3RfZGF0YSk7CisKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG13aWZpZXhfZGVsX3ZpcnR1YWxfaW50Zik7CkBAIC0yNDIxLDMwICsyNzM4LDE2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgbXdpZmlleF9jZmc4MDIxMV9zdXNwZW5kKHN0cnVjdCB3aXBoeSAqd2lwaHksCi0JCQkJICAgIHN0cnVjdCBjZmc4MDIxMV93b3dsYW4gKndvd2xhbikKK3N0YXRpYyBpbnQgbXdpZmlleF9zZXRfbWVmX2ZpbHRlcihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCSAgc3RydWN0IGNmZzgwMjExX3dvd2xhbiAqd293bGFuKQogewotCXN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIgPSBtd2lmaWV4X2NmZzgwMjExX2dldF9hZGFwdGVyKHdpcGh5KTsKLQlzdHJ1Y3QgbXdpZmlleF9kc19tZWZfY2ZnIG1lZl9jZmc7Ci0Jc3RydWN0IG13aWZpZXhfbWVmX2VudHJ5ICptZWZfZW50cnk7Ci0JaW50IGksIGZpbHRfbnVtID0gMCwgcmV0OworCWludCBpLCBmaWx0X251bSA9IDAsIHJldCA9IDA7CiAJYm9vbCBmaXJzdF9wYXQgPSB0cnVlOwogCXU4IGJ5dGVfc2VxW01XSUZJRVhfTUVGX01BWF9CWVRFU0VRICsgMV07CiAJY29uc3QgdTggaXB2NF9tY19tYWNbXSA9IHsweDMzLCAweDMzfTsKIAljb25zdCB1OCBpcHY2X21jX21hY1tdID0gezB4MDEsIDB4MDAsIDB4NWV9OwotCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPQotCQkJbXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX1NUQSk7Ci0KLQlpZiAoIXdvd2xhbikgewotCQlkZXZfd2FybihhZGFwdGVyLT5kZXYsICJOb25lIG9mIHRoZSBXT1dMQU4gdHJpZ2dlcnMgZW5hYmxlZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICghcHJpdi0+bWVkaWFfY29ubmVjdGVkKSB7Ci0JCWRldl93YXJuKGFkYXB0ZXItPmRldiwKLQkJCSAiQ2FuIG5vdCBjb25maWd1cmUgV09XTEFOIGluIGRpc2Nvbm5lY3RlZCBzdGF0ZVxuIik7Ci0JCXJldHVybiAwOwotCX0KKwlzdHJ1Y3QgbXdpZmlleF9kc19tZWZfY2ZnIG1lZl9jZmc7CisJc3RydWN0IG13aWZpZXhfbWVmX2VudHJ5ICptZWZfZW50cnk7CiAKIAltZWZfZW50cnkgPSBremFsbG9jKHNpemVvZigqbWVmX2VudHJ5KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtZWZfZW50cnkpCkBAIC0yNDU5LDkgKzI3NjIsOSBAQAogCWZvciAoaSA9IDA7IGkgPCB3b3dsYW4tPm5fcGF0dGVybnM7IGkrKykgewogCQltZW1zZXQoYnl0ZV9zZXEsIDAsIHNpemVvZihieXRlX3NlcSkpOwogCQlpZiAoIW13aWZpZXhfaXNfcGF0dGVybl9zdXBwb3J0ZWQoJndvd2xhbi0+cGF0dGVybnNbaV0sCi0JCQkJCQkgIGJ5dGVfc2VxLAotCQkJCQkJICBNV0lGSUVYX01FRl9NQVhfQllURVNFUSkpIHsKLQkJCXdpcGh5X2Vycih3aXBoeSwgIlBhdHRlcm4gbm90IHN1cHBvcnRlZFxuIik7CisJCQkJCWJ5dGVfc2VxLAorCQkJCQlNV0lGSUVYX01FRl9NQVhfQllURVNFUSkpIHsKKwkJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LCAiUGF0dGVybiBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJCWtmcmVlKG1lZl9lbnRyeSk7CiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCX0KQEAgLTI0ODUsOSArMjc4OCw5IEBACiAKIAkJbWVmX2VudHJ5LT5maWx0ZXJbZmlsdF9udW1dLnJlcGVhdCA9IDE7CiAJCW1lZl9lbnRyeS0+ZmlsdGVyW2ZpbHRfbnVtXS5vZmZzZXQgPQotCQkJCQkJd293bGFuLT5wYXR0ZXJuc1tpXS5wa3Rfb2Zmc2V0OworCQkJd293bGFuLT5wYXR0ZXJuc1tpXS5wa3Rfb2Zmc2V0OwogCQltZW1jcHkobWVmX2VudHJ5LT5maWx0ZXJbZmlsdF9udW1dLmJ5dGVfc2VxLCBieXRlX3NlcSwKLQkJICAgICAgIHNpemVvZihieXRlX3NlcSkpOworCQkJCXNpemVvZihieXRlX3NlcSkpOwogCQltZWZfZW50cnktPmZpbHRlcltmaWx0X251bV0uZmlsdF90eXBlID0gVFlQRV9FUTsKIAogCQlpZiAoZmlyc3RfcGF0KQpAQCAtMjUwMiw5ICsyODA1LDkgQEAKIAkJbWVmX2NmZy5jcml0ZXJpYSB8PSBNV0lGSUVYX0NSSVRFUklBX1VOSUNBU1Q7CiAJCW1lZl9lbnRyeS0+ZmlsdGVyW2ZpbHRfbnVtXS5yZXBlYXQgPSAxNjsKIAkJbWVtY3B5KG1lZl9lbnRyeS0+ZmlsdGVyW2ZpbHRfbnVtXS5ieXRlX3NlcSwgcHJpdi0+Y3Vycl9hZGRyLAotCQkgICAgICAgRVRIX0FMRU4pOworCQkJCUVUSF9BTEVOKTsKIAkJbWVmX2VudHJ5LT5maWx0ZXJbZmlsdF9udW1dLmJ5dGVfc2VxW01XSUZJRVhfTUVGX01BWF9CWVRFU0VRXSA9Ci0JCQkJCQkJCUVUSF9BTEVOOworCQkJRVRIX0FMRU47CiAJCW1lZl9lbnRyeS0+ZmlsdGVyW2ZpbHRfbnVtXS5vZmZzZXQgPSAyODsKIAkJbWVmX2VudHJ5LT5maWx0ZXJbZmlsdF9udW1dLmZpbHRfdHlwZSA9IFRZUEVfRVE7CiAJCWlmIChmaWx0X251bSkKQEAgLTI1MTMsOSArMjgxNiw5IEBACiAJCWZpbHRfbnVtKys7CiAJCW1lZl9lbnRyeS0+ZmlsdGVyW2ZpbHRfbnVtXS5yZXBlYXQgPSAxNjsKIAkJbWVtY3B5KG1lZl9lbnRyeS0+ZmlsdGVyW2ZpbHRfbnVtXS5ieXRlX3NlcSwgcHJpdi0+Y3Vycl9hZGRyLAotCQkgICAgICAgRVRIX0FMRU4pOworCQkJCUVUSF9BTEVOKTsKIAkJbWVmX2VudHJ5LT5maWx0ZXJbZmlsdF9udW1dLmJ5dGVfc2VxW01XSUZJRVhfTUVGX01BWF9CWVRFU0VRXSA9Ci0JCQkJCQkJCUVUSF9BTEVOOworCQkJRVRIX0FMRU47CiAJCW1lZl9lbnRyeS0+ZmlsdGVyW2ZpbHRfbnVtXS5vZmZzZXQgPSA1NjsKIAkJbWVmX2VudHJ5LT5maWx0ZXJbZmlsdF9udW1dLmZpbHRfdHlwZSA9IFRZUEVfRVE7CiAJCW1lZl9lbnRyeS0+ZmlsdGVyW2ZpbHRfbnVtXS5maWx0X2FjdGlvbiA9IFRZUEVfT1I7CkBAIC0yNTIzLDE2ICsyODI2LDYxIEBACiAKIAlpZiAoIW1lZl9jZmcuY3JpdGVyaWEpCiAJCW1lZl9jZmcuY3JpdGVyaWEgPSBNV0lGSUVYX0NSSVRFUklBX0JST0FEQ0FTVCB8Ci0JCQkJICAgTVdJRklFWF9DUklURVJJQV9VTklDQVNUIHwKLQkJCQkgICBNV0lGSUVYX0NSSVRFUklBX01VTFRJQ0FTVDsKKwkJCU1XSUZJRVhfQ1JJVEVSSUFfVU5JQ0FTVCB8CisJCQlNV0lGSUVYX0NSSVRFUklBX01VTFRJQ0FTVDsKIAogCXJldCA9IG13aWZpZXhfc2VuZF9jbWQocHJpdiwgSG9zdENtZF9DTURfTUVGX0NGRywKLQkJCSAgICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCAmbWVmX2NmZywgdHJ1ZSk7CisJCQlIb3N0Q21kX0FDVF9HRU5fU0VULCAwLCAmbWVmX2NmZywgdHJ1ZSk7CiAKIAlrZnJlZShtZWZfZW50cnkpOwogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgbXdpZmlleF9jZmc4MDIxMV9zdXNwZW5kKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgIHN0cnVjdCBjZmc4MDIxMV93b3dsYW4gKndvd2xhbikKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gbXdpZmlleF9jZmc4MDIxMV9nZXRfYWRhcHRlcih3aXBoeSk7CisJc3RydWN0IG13aWZpZXhfZHNfaHNfY2ZnIGhzX2NmZzsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0KKwkJCW13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9TVEEpOworCisJaWYgKCF3b3dsYW4pIHsKKwkJZGV2X3dhcm4oYWRhcHRlci0+ZGV2LCAiTm9uZSBvZiB0aGUgV09XTEFOIHRyaWdnZXJzIGVuYWJsZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoIXByaXYtPm1lZGlhX2Nvbm5lY3RlZCkgeworCQlkZXZfd2FybihhZGFwdGVyLT5kZXYsCisJCQkgIkNhbiBub3QgY29uZmlndXJlIFdPV0xBTiBpbiBkaXNjb25uZWN0ZWQgc3RhdGVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAod293bGFuLT5uX3BhdHRlcm5zIHx8IHdvd2xhbi0+bWFnaWNfcGt0KSB7CisJCXJldCA9IG13aWZpZXhfc2V0X21lZl9maWx0ZXIocHJpdiwgd293bGFuKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJGYWlsZWQgdG8gc2V0IE1FRiBmaWx0ZXJcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWlmICh3b3dsYW4tPmRpc2Nvbm5lY3QpIHsKKwkJbWVtc2V0KCZoc19jZmcsIDAsIHNpemVvZihoc19jZmcpKTsKKwkJaHNfY2ZnLmlzX2ludm9rZV9ob3N0Y21kID0gZmFsc2U7CisJCWhzX2NmZy5jb25kaXRpb25zID0gSFNfQ0ZHX0NPTkRfTUFDX0VWRU5UOworCQloc19jZmcuZ3BpbyA9IEhTX0NGR19HUElPX0RFRjsKKwkJaHNfY2ZnLmdhcCA9IEhTX0NGR19HQVBfREVGOworCQlyZXQgPSBtd2lmaWV4X3NldF9oc19wYXJhbXMocHJpdiwgSG9zdENtZF9BQ1RfR0VOX1NFVCwKKwkJCQkJICAgIE1XSUZJRVhfU1lOQ19DTUQsICZoc19jZmcpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIkZhaWxlZCB0byBzZXQgSFMgcGFyYW1zXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG13aWZpZXhfY2ZnODAyMTFfcmVzdW1lKHN0cnVjdCB3aXBoeSAqd2lwaHkpCiB7CiAJcmV0dXJuIDA7CkBAIC0yODAzLDYgKzMxNTEsMTAyIEBACiB9CiAKIHN0YXRpYyBpbnQKK213aWZpZXhfY2ZnODAyMTFfY2hhbm5lbF9zd2l0Y2goc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgY2ZnODAyMTFfY3NhX3NldHRpbmdzICpwYXJhbXMpCit7CisJc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyICpjaHN3X2llOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqY2hhbm5lbF9zdzsKKwlpbnQgY2hzd19tc2VjOworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdihkZXYpOworCisJaWYgKHByaXYtPmFkYXB0ZXItPnNjYW5fcHJvY2Vzc2luZykgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCSJyYWRhciBkZXRlY3Rpb246IHNjYW4gaW4gcHJvY2Vzcy4uLlxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKHByaXYtPndkZXYuY2FjX3N0YXJ0ZWQpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoY2ZnODAyMTFfY2hhbmRlZl9pZGVudGljYWwoJnBhcmFtcy0+Y2hhbmRlZiwKKwkJCQkgICAgICAgJnByaXYtPmRmc19jaGFuZGVmKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljaHN3X2llID0gKHZvaWQgKiljZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0NIQU5ORUxfU1dJVENILAorCQkJCQkgICBwYXJhbXMtPmJlYWNvbl9jc2EudGFpbCwKKwkJCQkJICAgcGFyYW1zLT5iZWFjb25fY3NhLnRhaWxfbGVuKTsKKwlpZiAoIWNoc3dfaWUpIHsKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsCisJCQkiQ291bGQgbm90IHBhcnNlIGNoYW5uZWwgc3dpdGNoIGFubm91bmNlbWVudCBJRVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNoYW5uZWxfc3cgPSAodm9pZCAqKShjaHN3X2llICsgMSk7CisJaWYgKGNoYW5uZWxfc3ctPm1vZGUpIHsKKwkJaWYgKG5ldGlmX2NhcnJpZXJfb2socHJpdi0+bmV0ZGV2KSkKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKHByaXYtPm5ldGRldik7CisJCW13aWZpZXhfc3RvcF9uZXRfZGV2X3F1ZXVlKHByaXYtPm5ldGRldiwgcHJpdi0+YWRhcHRlcik7CisJfQorCisJaWYgKG13aWZpZXhfZGVsX21nbXRfaWVzKHByaXYpKQorCQl3aXBoeV9lcnIod2lwaHksICJGYWlsZWQgdG8gZGVsZXRlIG1nbXQgSUVzIVxuIik7CisKKwlpZiAobXdpZmlleF9zZXRfbWdtdF9pZXMocHJpdiwgJnBhcmFtcy0+YmVhY29uX2NzYSkpIHsKKwkJd2lwaHlfZXJyKHdpcGh5LCAiJXM6IHNldHRpbmcgbWdtdCBpZXMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCW1lbWNweSgmcHJpdi0+ZGZzX2NoYW5kZWYsICZwYXJhbXMtPmNoYW5kZWYsIHNpemVvZihwcml2LT5kZnNfY2hhbmRlZikpOworCW1lbWNweSgmcHJpdi0+YmVhY29uX2FmdGVyLCAmcGFyYW1zLT5iZWFjb25fYWZ0ZXIsCisJICAgICAgIHNpemVvZihwcml2LT5iZWFjb25fYWZ0ZXIpKTsKKworCWNoc3dfbXNlYyA9IG1heChjaGFubmVsX3N3LT5jb3VudCAqIHByaXYtPmJzc19jZmcuYmVhY29uX3BlcmlvZCwgMTAwKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+ZGZzX2NoYW5fc3dfd29ya3F1ZXVlLCAmcHJpdi0+ZGZzX2NoYW5fc3dfd29yaywKKwkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoY2hzd19tc2VjKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK213aWZpZXhfY2ZnODAyMTFfc3RhcnRfcmFkYXJfZGV0ZWN0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZiwKKwkJCQkgICAgICAgdTMyIGNhY190aW1lX21zKQoreworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYgPSBtd2lmaWV4X25ldGRldl9nZXRfcHJpdihkZXYpOworCXN0cnVjdCBtd2lmaWV4X3JhZGFyX3BhcmFtcyByYWRhcl9wYXJhbXM7CisKKwlpZiAocHJpdi0+YWRhcHRlci0+c2Nhbl9wcm9jZXNzaW5nKSB7CisJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LAorCQkJInJhZGFyIGRldGVjdGlvbjogc2NhbiBhbHJlYWR5IGluIHByb2Nlc3MuLi5cbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmICghbXdpZmlleF9pc18xMWhfYWN0aXZlKHByaXYpKSB7CisJCWRldl9kYmcocHJpdi0+YWRhcHRlci0+ZGV2LCAiRW5hYmxlIDExaCBleHRlbnNpb25zIGluIEZXXG4iKTsKKwkJaWYgKG13aWZpZXhfMTFoX2FjdGl2YXRlKHByaXYsIHRydWUpKSB7CisJCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwKKwkJCQkiRmFpbGVkIHRvIGFjdGl2YXRlIDExaCBleHRlbnNpb25zISEiKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlwcml2LT5zdGF0ZV8xMWguaXNfMTFoX2FjdGl2ZSA9IHRydWU7CisJfQorCisJbWVtc2V0KCZyYWRhcl9wYXJhbXMsIDAsIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9yYWRhcl9wYXJhbXMpKTsKKwlyYWRhcl9wYXJhbXMuY2hhbmRlZiA9IGNoYW5kZWY7CisJcmFkYXJfcGFyYW1zLmNhY190aW1lX21zID0gY2FjX3RpbWVfbXM7CisKKwltZW1jcHkoJnByaXYtPmRmc19jaGFuZGVmLCBjaGFuZGVmLCBzaXplb2YocHJpdi0+ZGZzX2NoYW5kZWYpKTsKKworCWlmIChtd2lmaWV4X3NlbmRfY21kKHByaXYsIEhvc3RDbWRfQ01EX0NIQU5fUkVQT1JUX1JFUVVFU1QsCisJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsICZyYWRhcl9wYXJhbXMsIHRydWUpKQorCQlyZXR1cm4gLTE7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+ZGZzX2NhY193b3JrcXVldWUsICZwcml2LT5kZnNfY2FjX3dvcmssCisJCQkgICBtc2Vjc190b19qaWZmaWVzKGNhY190aW1lX21zKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIG13aWZpZXhfY2ZnODAyMTFfY2hhbmdlX3N0YXRpb24oc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQljb25zdCB1OCAqbWFjLAogCQkJCXN0cnVjdCBzdGF0aW9uX3BhcmFtZXRlcnMgKnBhcmFtcykKQEAgLTI4NjYsMTEgKzMzMTAsMTMgQEAKIAkudGRsc19vcGVyID0gbXdpZmlleF9jZmc4MDIxMV90ZGxzX29wZXIsCiAJLmFkZF9zdGF0aW9uID0gbXdpZmlleF9jZmc4MDIxMV9hZGRfc3RhdGlvbiwKIAkuY2hhbmdlX3N0YXRpb24gPSBtd2lmaWV4X2NmZzgwMjExX2NoYW5nZV9zdGF0aW9uLAorCS5zdGFydF9yYWRhcl9kZXRlY3Rpb24gPSBtd2lmaWV4X2NmZzgwMjExX3N0YXJ0X3JhZGFyX2RldGVjdGlvbiwKKwkuY2hhbm5lbF9zd2l0Y2ggPSBtd2lmaWV4X2NmZzgwMjExX2NoYW5uZWxfc3dpdGNoLAogfTsKIAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGNvbnN0IHN0cnVjdCB3aXBoeV93b3dsYW5fc3VwcG9ydCBtd2lmaWV4X3dvd2xhbl9zdXBwb3J0ID0gewotCS5mbGFncyA9IFdJUEhZX1dPV0xBTl9NQUdJQ19QS1QsCisJLmZsYWdzID0gV0lQSFlfV09XTEFOX01BR0lDX1BLVCB8IFdJUEhZX1dPV0xBTl9ESVNDT05ORUNULAogCS5uX3BhdHRlcm5zID0gTVdJRklFWF9NRUZfTUFYX0ZJTFRFUlMsCiAJLnBhdHRlcm5fbWluX2xlbiA9IDEsCiAJLnBhdHRlcm5fbWF4X2xlbiA9IE1XSUZJRVhfTUFYX1BBVFRFUk5fTEVOLApAQCAtMjk2NCwxMiArMzQxMCwxMyBAQAogCXdpcGh5LT5jaXBoZXJfc3VpdGVzID0gbXdpZmlleF9jaXBoZXJfc3VpdGVzOwogCXdpcGh5LT5uX2NpcGhlcl9zdWl0ZXMgPSBBUlJBWV9TSVpFKG13aWZpZXhfY2lwaGVyX3N1aXRlcyk7CiAKLQltZW1jcHkod2lwaHktPnBlcm1fYWRkciwgcHJpdi0+Y3Vycl9hZGRyLCBFVEhfQUxFTik7CisJZXRoZXJfYWRkcl9jb3B5KHdpcGh5LT5wZXJtX2FkZHIsIGFkYXB0ZXItPnBlcm1fYWRkcik7CiAJd2lwaHktPnNpZ25hbF90eXBlID0gQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOwogCXdpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0hBVkVfQVBfU01FIHwKIAkJCVdJUEhZX0ZMQUdfQVBfUFJPQkVfUkVTUF9PRkZMT0FEIHwKIAkJCVdJUEhZX0ZMQUdfQVBfVUFQU0QgfAotCQkJV0lQSFlfRkxBR19IQVNfUkVNQUlOX09OX0NIQU5ORUw7CisJCQlXSVBIWV9GTEFHX0hBU19SRU1BSU5fT05fQ0hBTk5FTCB8CisJCQlXSVBIWV9GTEFHX0hBU19DSEFOTkVMX1NXSVRDSDsKIAogCWlmIChJU1NVUFBfVERMU19FTkFCTEVEKGFkYXB0ZXItPmZ3X2NhcF9pbmZvKSkKIAkJd2lwaHktPmZsYWdzIHw9IFdJUEhZX0ZMQUdfU1VQUE9SVFNfVERMUyB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9jZnAuYwppbmRleCBiODI0MmViLi5lOWRmODgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NmcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvY2ZwLmMKQEAgLTMyMiw5ICszMjIsOSBAQAogCQlyZXR1cm4gY2ZwOwogCiAJaWYgKG13aWZpZXhfYmFuZF90b19yYWRpb190eXBlKGJhbmQpID09IEhvc3RDbWRfU0NBTl9SQURJT19UWVBFX0JHKQotCQlzYmFuZCA9IHByaXYtPndkZXYtPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKwkJc2JhbmQgPSBwcml2LT53ZGV2LndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXTsKIAllbHNlCi0JCXNiYW5kID0gcHJpdi0+d2Rldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOworCQlzYmFuZCA9IHByaXYtPndkZXYud2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwogCiAJaWYgKCFzYmFuZCkgewogCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIiVzOiBjYW5ub3QgZmluZCBjZnAgYnkgYmFuZCAlZFxuIiwKQEAgLTUwOSwzICs1MDksMjEgQEAKIAogCXJldHVybiBrOwogfQorCit1OCBtd2lmaWV4X2FkanVzdF9kYXRhX3JhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICB1OCByeF9yYXRlLCB1OCByYXRlX2luZm8pCit7CisJdTggcmF0ZV9pbmRleCA9IDA7CisKKwkvKiBIVDQwICovCisJaWYgKChyYXRlX2luZm8gJiBCSVQoMCkpICYmIChyYXRlX2luZm8gJiBCSVQoMSkpKQorCQlyYXRlX2luZGV4ID0gTVdJRklFWF9SQVRFX0lOREVYX01DUzAgKworCQkJICAgICBNV0lGSUVYX0JXMjBfTUNTX05VTSArIHJ4X3JhdGU7CisJZWxzZSBpZiAocmF0ZV9pbmZvICYgQklUKDApKSAvKiBIVDIwICovCisJCXJhdGVfaW5kZXggPSBNV0lGSUVYX1JBVEVfSU5ERVhfTUNTMCArIHJ4X3JhdGU7CisJZWxzZQorCQlyYXRlX2luZGV4ID0gKHJ4X3JhdGUgPiBNV0lGSUVYX1JBVEVfSU5ERVhfT0ZETTApID8KKwkJCSAgICAgIHJ4X3JhdGUgLSAxIDogcnhfcmF0ZTsKKworCXJldHVybiByYXRlX2luZGV4OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9jbWRldnQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvY21kZXZ0LmMKaW5kZXggODU1OTcyMC4uYzVhMTRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9jbWRldnQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2NtZGV2dC5jCkBAIC0zMTUsMjIgKzMxNSwxOSBAQAogCQlhZGFwdGVyLT5kYmcubnVtX2NtZF9zbGVlcF9jZm1faG9zdF90b19jYXJkX2ZhaWx1cmUrKzsKIAkJcmV0dXJuIC0xOwogCX0KLQlpZiAoR0VUX0JTU19ST0xFKG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9BTlkpKQotCSAgICA9PSBNV0lGSUVYX0JTU19ST0xFX1NUQSkgewotCQlpZiAoIWxlMTZfdG9fY3B1KHNsZWVwX2NmbV9idWYtPnJlc3BfY3RybCkpCi0JCQkvKiBSZXNwb25zZSBpcyBub3QgbmVlZGVkIGZvciBzbGVlcAotCQkJICAgY29uZmlybSBjb21tYW5kICovCi0JCQlhZGFwdGVyLT5wc19zdGF0ZSA9IFBTX1NUQVRFX1NMRUVQOwotCQllbHNlCi0JCQlhZGFwdGVyLT5wc19zdGF0ZSA9IFBTX1NUQVRFX1NMRUVQX0NGTTsKIAotCQlpZiAoIWxlMTZfdG9fY3B1KHNsZWVwX2NmbV9idWYtPnJlc3BfY3RybCkgJiYKLQkJICAgIChhZGFwdGVyLT5pc19oc19jb25maWd1cmVkICYmCi0JCSAgICAgIWFkYXB0ZXItPnNsZWVwX3BlcmlvZC5wZXJpb2QpKSB7Ci0JCQlhZGFwdGVyLT5wbV93YWtldXBfY2FyZF9yZXEgPSB0cnVlOwotCQkJbXdpZmlleF9oc19hY3RpdmF0ZWRfZXZlbnQobXdpZmlleF9nZXRfcHJpdgotCQkJCQkoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9TVEEpLCB0cnVlKTsKLQkJfQorCWlmICghbGUxNl90b19jcHUoc2xlZXBfY2ZtX2J1Zi0+cmVzcF9jdHJsKSkKKwkJLyogUmVzcG9uc2UgaXMgbm90IG5lZWRlZCBmb3Igc2xlZXAgY29uZmlybSBjb21tYW5kICovCisJCWFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfU0xFRVA7CisJZWxzZQorCQlhZGFwdGVyLT5wc19zdGF0ZSA9IFBTX1NUQVRFX1NMRUVQX0NGTTsKKworCWlmICghbGUxNl90b19jcHUoc2xlZXBfY2ZtX2J1Zi0+cmVzcF9jdHJsKSAmJgorCSAgICAoYWRhcHRlci0+aXNfaHNfY29uZmlndXJlZCAmJgorCSAgICAgIWFkYXB0ZXItPnNsZWVwX3BlcmlvZC5wZXJpb2QpKSB7CisJCWFkYXB0ZXItPnBtX3dha2V1cF9jYXJkX3JlcSA9IHRydWU7CisJCW13aWZpZXhfaHNfYWN0aXZhdGVkX2V2ZW50KG13aWZpZXhfZ2V0X3ByaXYKKwkJCQkoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9BTlkpLCB0cnVlKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtNDUwLDYgKzQ0Nyw3IEBACiAJCQkJICAgICAgRVZFTlRfR0VUX0JTU19UWVBFKGV2ZW50Y2F1c2UpKTsKIAlpZiAoIXByaXYpCiAJCXByaXYgPSBtd2lmaWV4X2dldF9wcml2KGFkYXB0ZXIsIE1XSUZJRVhfQlNTX1JPTEVfQU5ZKTsKKwogCS8qIENsZWFyIEJTU19OT19CSVRTIGZyb20gZXZlbnQgKi8KIAlldmVudGNhdXNlICY9IEVWRU5UX0lEX01BU0s7CiAJYWRhcHRlci0+ZXZlbnRfY2F1c2UgPSBldmVudGNhdXNlOwpAQCAtNDYyLDEyICs0NjAsNiBAQAogCX0KIAogCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiRVZFTlQ6IGNhdXNlOiAlI3hcbiIsIGV2ZW50Y2F1c2UpOwotCWlmIChldmVudGNhdXNlID09IEVWRU5UX1BTX1NMRUVQIHx8IGV2ZW50Y2F1c2UgPT0gRVZFTlRfUFNfQVdBS0UpIHsKLQkJLyogSGFuZGxlIFBTX1NMRUVQL0FXQUtFIGV2ZW50cyBvbiBTVEEgKi8KLQkJcHJpdiA9IG13aWZpZXhfZ2V0X3ByaXYoYWRhcHRlciwgTVdJRklFWF9CU1NfUk9MRV9TVEEpOwotCQlpZiAoIXByaXYpCi0JCQlwcml2ID0gbXdpZmlleF9nZXRfcHJpdihhZGFwdGVyLCBNV0lGSUVYX0JTU19ST0xFX0FOWSk7Ci0JfQogCiAJaWYgKHByaXYtPmJzc19yb2xlID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQKQogCQlyZXQgPSBtd2lmaWV4X3Byb2Nlc3NfdWFwX2V2ZW50KHByaXYpOwpAQCAtMTAwOCwxMSArMTAwMCw5IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNtZF9ub2RlLCB0bXBfbm9kZSwKIAkJCQkgJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xLCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZjbWRfbm9kZS0+bGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKIAogCQljbWRfbm9kZS0+d2FpdF9xX2VuYWJsZWQgPSBmYWxzZTsKIAkJbXdpZmlleF9pbnNlcnRfY21kX3RvX2ZyZWVfcShhZGFwdGVyLCBjbWRfbm9kZSk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zY2FuX3BlbmRpbmdfcV9sb2NrLCBmbGFncyk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssIGZsYWdzKTsKIApAQCAtMTA3MCwxMiArMTA2MCw4IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNtZF9ub2RlLCB0bXBfbm9kZSwKIAkJCQkgJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xLCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZjbWRfbm9kZS0+bGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnNjYW5fcGVuZGluZ19xX2xvY2ssCi0JCQkJICAgICAgIHNjYW5fcGVuZGluZ19xX2ZsYWdzKTsKIAkJY21kX25vZGUtPndhaXRfcV9lbmFibGVkID0gZmFsc2U7CiAJCW13aWZpZXhfaW5zZXJ0X2NtZF90b19mcmVlX3EoYWRhcHRlciwgY21kX25vZGUpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywKLQkJCQkgIHNjYW5fcGVuZGluZ19xX2ZsYWdzKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+c2Nhbl9wZW5kaW5nX3FfbG9jaywKIAkJCSAgICAgICBzY2FuX3BlbmRpbmdfcV9mbGFncyk7CkBAIC0xNTg4LDkgKzE1NzQsNyBAQAogCQlsZTE2X3RvX2NwdShod19zcGVjLT5od19pZl92ZXJzaW9uKSwKIAkJbGUxNl90b19jcHUoaHdfc3BlYy0+dmVyc2lvbikpOwogCi0JaWYgKHByaXYtPmN1cnJfYWRkclswXSA9PSAweGZmKQotCQltZW1tb3ZlKHByaXYtPmN1cnJfYWRkciwgaHdfc3BlYy0+cGVybWFuZW50X2FkZHIsIEVUSF9BTEVOKTsKLQorCWV0aGVyX2FkZHJfY29weShwcml2LT5hZGFwdGVyLT5wZXJtX2FkZHIsIGh3X3NwZWMtPnBlcm1hbmVudF9hZGRyKTsKIAlhZGFwdGVyLT5yZWdpb25fY29kZSA9IGxlMTZfdG9fY3B1KGh3X3NwZWMtPnJlZ2lvbl9jb2RlKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNV0lGSUVYX01BWF9SRUdJT05fQ09ERTsgaSsrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2RlYnVnZnMuYwppbmRleCAyNzEzZjdhYy4uMWZiMzI5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9kZWJ1Z2ZzLmMKQEAgLTM5LDExMSArMzksNiBAQAogCSJQMlBfREVWSUNFIiwKIH07CiAKLS8qIHNpemUvYWRkciBmb3IgbXdpZmlleF9kZWJ1Z19pbmZvICovCi0jZGVmaW5lIGl0ZW1fc2l6ZShuKQkJKEZJRUxEX1NJWkVPRihzdHJ1Y3QgbXdpZmlleF9kZWJ1Z19pbmZvLCBuKSkKLSNkZWZpbmUgaXRlbV9hZGRyKG4pCQkob2Zmc2V0b2Yoc3RydWN0IG13aWZpZXhfZGVidWdfaW5mbywgbikpCi0KLS8qIHNpemUvYWRkciBmb3Igc3RydWN0IG13aWZpZXhfYWRhcHRlciAqLwotI2RlZmluZSBhZGFwdGVyX2l0ZW1fc2l6ZShuKQkoRklFTERfU0laRU9GKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIsIG4pKQotI2RlZmluZSBhZGFwdGVyX2l0ZW1fYWRkcihuKQkob2Zmc2V0b2Yoc3RydWN0IG13aWZpZXhfYWRhcHRlciwgbikpCi0KLXN0cnVjdCBtd2lmaWV4X2RlYnVnX2RhdGEgewotCWNoYXIgbmFtZVszMl07CQkvKiB2YXJpYWJsZS9hcnJheSBuYW1lICovCi0JdTMyIHNpemU7CQkvKiBzaXplIG9mIHRoZSB2YXJpYWJsZS9hcnJheSAqLwotCXNpemVfdCBhZGRyOwkJLyogYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUvYXJyYXkgKi8KLQlpbnQgbnVtOwkJLyogbnVtYmVyIG9mIHZhcmlhYmxlcyBpbiBhbiBhcnJheSAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBtd2lmaWV4X2RlYnVnX2RhdGEgaXRlbXNbXSA9IHsKLQl7ImludF9jb3VudGVyIiwgaXRlbV9zaXplKGludF9jb3VudGVyKSwKLQkgaXRlbV9hZGRyKGludF9jb3VudGVyKSwgMX0sCi0JeyJ3bW1fYWNfdm8iLCBpdGVtX3NpemUocGFja2V0c19vdXRbV01NX0FDX1ZPXSksCi0JIGl0ZW1fYWRkcihwYWNrZXRzX291dFtXTU1fQUNfVk9dKSwgMX0sCi0JeyJ3bW1fYWNfdmkiLCBpdGVtX3NpemUocGFja2V0c19vdXRbV01NX0FDX1ZJXSksCi0JIGl0ZW1fYWRkcihwYWNrZXRzX291dFtXTU1fQUNfVkldKSwgMX0sCi0JeyJ3bW1fYWNfYmUiLCBpdGVtX3NpemUocGFja2V0c19vdXRbV01NX0FDX0JFXSksCi0JIGl0ZW1fYWRkcihwYWNrZXRzX291dFtXTU1fQUNfQkVdKSwgMX0sCi0JeyJ3bW1fYWNfYmsiLCBpdGVtX3NpemUocGFja2V0c19vdXRbV01NX0FDX0JLXSksCi0JIGl0ZW1fYWRkcihwYWNrZXRzX291dFtXTU1fQUNfQktdKSwgMX0sCi0JeyJ0eF9idWZfc2l6ZSIsIGl0ZW1fc2l6ZSh0eF9idWZfc2l6ZSksCi0JIGl0ZW1fYWRkcih0eF9idWZfc2l6ZSksIDF9LAotCXsiY3Vycl90eF9idWZfc2l6ZSIsIGl0ZW1fc2l6ZShjdXJyX3R4X2J1Zl9zaXplKSwKLQkgaXRlbV9hZGRyKGN1cnJfdHhfYnVmX3NpemUpLCAxfSwKLQl7InBzX21vZGUiLCBpdGVtX3NpemUocHNfbW9kZSksCi0JIGl0ZW1fYWRkcihwc19tb2RlKSwgMX0sCi0JeyJwc19zdGF0ZSIsIGl0ZW1fc2l6ZShwc19zdGF0ZSksCi0JIGl0ZW1fYWRkcihwc19zdGF0ZSksIDF9LAotCXsiaXNfZGVlcF9zbGVlcCIsIGl0ZW1fc2l6ZShpc19kZWVwX3NsZWVwKSwKLQkgaXRlbV9hZGRyKGlzX2RlZXBfc2xlZXApLCAxfSwKLQl7Indha2V1cF9kZXZfcmVxIiwgaXRlbV9zaXplKHBtX3dha2V1cF9jYXJkX3JlcSksCi0JIGl0ZW1fYWRkcihwbV93YWtldXBfY2FyZF9yZXEpLCAxfSwKLQl7Indha2V1cF90cmllcyIsIGl0ZW1fc2l6ZShwbV93YWtldXBfZndfdHJ5KSwKLQkgaXRlbV9hZGRyKHBtX3dha2V1cF9md190cnkpLCAxfSwKLQl7ImhzX2NvbmZpZ3VyZWQiLCBpdGVtX3NpemUoaXNfaHNfY29uZmlndXJlZCksCi0JIGl0ZW1fYWRkcihpc19oc19jb25maWd1cmVkKSwgMX0sCi0JeyJoc19hY3RpdmF0ZWQiLCBpdGVtX3NpemUoaHNfYWN0aXZhdGVkKSwKLQkgaXRlbV9hZGRyKGhzX2FjdGl2YXRlZCksIDF9LAotCXsibnVtX3R4X3RpbWVvdXQiLCBpdGVtX3NpemUobnVtX3R4X3RpbWVvdXQpLAotCSBpdGVtX2FkZHIobnVtX3R4X3RpbWVvdXQpLCAxfSwKLQl7ImlzX2NtZF90aW1lZG91dCIsIGl0ZW1fc2l6ZShpc19jbWRfdGltZWRvdXQpLAotCSBpdGVtX2FkZHIoaXNfY21kX3RpbWVkb3V0KSwgMX0sCi0JeyJ0aW1lb3V0X2NtZF9pZCIsIGl0ZW1fc2l6ZSh0aW1lb3V0X2NtZF9pZCksCi0JIGl0ZW1fYWRkcih0aW1lb3V0X2NtZF9pZCksIDF9LAotCXsidGltZW91dF9jbWRfYWN0IiwgaXRlbV9zaXplKHRpbWVvdXRfY21kX2FjdCksCi0JIGl0ZW1fYWRkcih0aW1lb3V0X2NtZF9hY3QpLCAxfSwKLQl7Imxhc3RfY21kX2lkIiwgaXRlbV9zaXplKGxhc3RfY21kX2lkKSwKLQkgaXRlbV9hZGRyKGxhc3RfY21kX2lkKSwgREJHX0NNRF9OVU19LAotCXsibGFzdF9jbWRfYWN0IiwgaXRlbV9zaXplKGxhc3RfY21kX2FjdCksCi0JIGl0ZW1fYWRkcihsYXN0X2NtZF9hY3QpLCBEQkdfQ01EX05VTX0sCi0JeyJsYXN0X2NtZF9pbmRleCIsIGl0ZW1fc2l6ZShsYXN0X2NtZF9pbmRleCksCi0JIGl0ZW1fYWRkcihsYXN0X2NtZF9pbmRleCksIDF9LAotCXsibGFzdF9jbWRfcmVzcF9pZCIsIGl0ZW1fc2l6ZShsYXN0X2NtZF9yZXNwX2lkKSwKLQkgaXRlbV9hZGRyKGxhc3RfY21kX3Jlc3BfaWQpLCBEQkdfQ01EX05VTX0sCi0JeyJsYXN0X2NtZF9yZXNwX2luZGV4IiwgaXRlbV9zaXplKGxhc3RfY21kX3Jlc3BfaW5kZXgpLAotCSBpdGVtX2FkZHIobGFzdF9jbWRfcmVzcF9pbmRleCksIDF9LAotCXsibGFzdF9ldmVudCIsIGl0ZW1fc2l6ZShsYXN0X2V2ZW50KSwKLQkgaXRlbV9hZGRyKGxhc3RfZXZlbnQpLCBEQkdfQ01EX05VTX0sCi0JeyJsYXN0X2V2ZW50X2luZGV4IiwgaXRlbV9zaXplKGxhc3RfZXZlbnRfaW5kZXgpLAotCSBpdGVtX2FkZHIobGFzdF9ldmVudF9pbmRleCksIDF9LAotCXsibnVtX2NtZF9oMmNfZmFpbCIsIGl0ZW1fc2l6ZShudW1fY21kX2hvc3RfdG9fY2FyZF9mYWlsdXJlKSwKLQkgaXRlbV9hZGRyKG51bV9jbWRfaG9zdF90b19jYXJkX2ZhaWx1cmUpLCAxfSwKLQl7Im51bV9jbWRfc2xlZXBfY2ZtX2ZhaWwiLAotCSBpdGVtX3NpemUobnVtX2NtZF9zbGVlcF9jZm1faG9zdF90b19jYXJkX2ZhaWx1cmUpLAotCSBpdGVtX2FkZHIobnVtX2NtZF9zbGVlcF9jZm1faG9zdF90b19jYXJkX2ZhaWx1cmUpLCAxfSwKLQl7Im51bV90eF9oMmNfZmFpbCIsIGl0ZW1fc2l6ZShudW1fdHhfaG9zdF90b19jYXJkX2ZhaWx1cmUpLAotCSBpdGVtX2FkZHIobnVtX3R4X2hvc3RfdG9fY2FyZF9mYWlsdXJlKSwgMX0sCi0JeyJudW1fZXZ0X2RlYXV0aCIsIGl0ZW1fc2l6ZShudW1fZXZlbnRfZGVhdXRoKSwKLQkgaXRlbV9hZGRyKG51bV9ldmVudF9kZWF1dGgpLCAxfSwKLQl7Im51bV9ldnRfZGlzYXNzb2MiLCBpdGVtX3NpemUobnVtX2V2ZW50X2Rpc2Fzc29jKSwKLQkgaXRlbV9hZGRyKG51bV9ldmVudF9kaXNhc3NvYyksIDF9LAotCXsibnVtX2V2dF9saW5rX2xvc3QiLCBpdGVtX3NpemUobnVtX2V2ZW50X2xpbmtfbG9zdCksCi0JIGl0ZW1fYWRkcihudW1fZXZlbnRfbGlua19sb3N0KSwgMX0sCi0JeyJudW1fY21kX2RlYXV0aCIsIGl0ZW1fc2l6ZShudW1fY21kX2RlYXV0aCksCi0JIGl0ZW1fYWRkcihudW1fY21kX2RlYXV0aCksIDF9LAotCXsibnVtX2NtZF9hc3NvY19vayIsIGl0ZW1fc2l6ZShudW1fY21kX2Fzc29jX3N1Y2Nlc3MpLAotCSBpdGVtX2FkZHIobnVtX2NtZF9hc3NvY19zdWNjZXNzKSwgMX0sCi0JeyJudW1fY21kX2Fzc29jX2ZhaWwiLCBpdGVtX3NpemUobnVtX2NtZF9hc3NvY19mYWlsdXJlKSwKLQkgaXRlbV9hZGRyKG51bV9jbWRfYXNzb2NfZmFpbHVyZSksIDF9LAotCXsiY21kX3NlbnQiLCBpdGVtX3NpemUoY21kX3NlbnQpLAotCSBpdGVtX2FkZHIoY21kX3NlbnQpLCAxfSwKLQl7ImRhdGFfc2VudCIsIGl0ZW1fc2l6ZShkYXRhX3NlbnQpLAotCSBpdGVtX2FkZHIoZGF0YV9zZW50KSwgMX0sCi0JeyJjbWRfcmVzcF9yZWNlaXZlZCIsIGl0ZW1fc2l6ZShjbWRfcmVzcF9yZWNlaXZlZCksCi0JIGl0ZW1fYWRkcihjbWRfcmVzcF9yZWNlaXZlZCksIDF9LAotCXsiZXZlbnRfcmVjZWl2ZWQiLCBpdGVtX3NpemUoZXZlbnRfcmVjZWl2ZWQpLAotCSBpdGVtX2FkZHIoZXZlbnRfcmVjZWl2ZWQpLCAxfSwKLQotCS8qIHZhcmlhYmxlcyBkZWZpbmVkIGluIHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKi8KLQl7ImNtZF9wZW5kaW5nIiwgYWRhcHRlcl9pdGVtX3NpemUoY21kX3BlbmRpbmcpLAotCSBhZGFwdGVyX2l0ZW1fYWRkcihjbWRfcGVuZGluZyksIDF9LAotCXsidHhfcGVuZGluZyIsIGFkYXB0ZXJfaXRlbV9zaXplKHR4X3BlbmRpbmcpLAotCSBhZGFwdGVyX2l0ZW1fYWRkcih0eF9wZW5kaW5nKSwgMX0sCi0JeyJyeF9wZW5kaW5nIiwgYWRhcHRlcl9pdGVtX3NpemUocnhfcGVuZGluZyksCi0JIGFkYXB0ZXJfaXRlbV9hZGRyKHJ4X3BlbmRpbmcpLCAxfSwKLX07Ci0KLXN0YXRpYyBpbnQgbnVtX29mX2l0ZW1zID0gQVJSQVlfU0laRShpdGVtcyk7Ci0KIC8qCiAgKiBQcm9jIGluZm8gZmlsZSByZWFkIGhhbmRsZXIuCiAgKgpAQCAtMjk3LDYgKzE5Miw4IEBACiAgKiAgICAgIC0gTnVtYmVyIG9mIEZDUyBlcnJvcnMKICAqICAgICAgLSBOdW1iZXIgb2YgVHggZnJhbWVzCiAgKiAgICAgIC0gV0VQIElDViBlcnJvciBjb3VudHMKKyAqICAgICAgLSBOdW1iZXIgb2YgcmVjZWl2ZWQgYmVhY29ucworICogICAgICAtIE51bWJlciBvZiBtaXNzZWQgYmVhY29ucwogICovCiBzdGF0aWMgc3NpemVfdAogbXdpZmlleF9nZXRsb2dfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVidWYsCkBAIC0zMzMsNyArMjMwLDkgQEAKIAkJICAgICAid2VwaWN2ZXJyY250LTEgICAldVxuIgogCQkgICAgICJ3ZXBpY3ZlcnJjbnQtMiAgICV1XG4iCiAJCSAgICAgIndlcGljdmVycmNudC0zICAgJXVcbiIKLQkJICAgICAid2VwaWN2ZXJyY250LTQgICAldVxuIiwKKwkJICAgICAid2VwaWN2ZXJyY250LTQgICAldVxuIgorCQkgICAgICJiY25fcmN2X2NudCAgICV1XG4iCisJCSAgICAgImJjbl9taXNzX2NudCAgICV1XG4iLAogCQkgICAgIHN0YXRzLm1jYXN0X3R4X2ZyYW1lLAogCQkgICAgIHN0YXRzLmZhaWxlZCwKIAkJICAgICBzdGF0cy5yZXRyeSwKQEAgLTM0OSw3ICsyNDgsOSBAQAogCQkgICAgIHN0YXRzLndlcF9pY3ZfZXJyb3JbMF0sCiAJCSAgICAgc3RhdHMud2VwX2ljdl9lcnJvclsxXSwKIAkJICAgICBzdGF0cy53ZXBfaWN2X2Vycm9yWzJdLAotCQkgICAgIHN0YXRzLndlcF9pY3ZfZXJyb3JbM10pOworCQkgICAgIHN0YXRzLndlcF9pY3ZfZXJyb3JbM10sCisJCSAgICAgc3RhdHMuYmNuX3Jjdl9jbnQsCisJCSAgICAgc3RhdHMuYmNuX21pc3NfY250KTsKIAogCiAJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY291bnQsIHBwb3MsIChjaGFyICopIHBhZ2UsCkBAIC0zNjAsNiArMjYxLDEwMyBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIFN5c2ZzIGhpc3RvZ3JhbSBmaWxlIHJlYWQgaGFuZGxlci4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSAnaGlzdG9ncmFtJyBmaWxlIGlzIG9wZW5lZCBmb3IgcmVhZGluZworICogSXQgcHJpbnRzIHRoZSBmb2xsb3dpbmcgaGlzdG9ncmFtIGluZm9ybWF0aW9uIC0KKyAqICAgICAgLSBOdW1iZXIgb2YgaGlzdG9ncmFtIHNhbXBsZXMKKyAqICAgICAgLSBSZWNlaXZlIHBhY2tldCBudW1iZXIgb2YgZWFjaCByeF9yYXRlCisgKiAgICAgIC0gUmVjZWl2ZSBwYWNrZXQgbnVtYmVyIG9mIGVhY2ggc25yCisgKiAgICAgIC0gUmVjZWl2ZSBwYWNrZXQgbnVtYmVyIG9mIGVhY2ggbm9zaWVfZmxyCisgKiAgICAgIC0gUmVjZWl2ZSBwYWNrZXQgbnVtYmVyIG9mIGVhY2ggc2lnbmFsIHN0cmVhdGgKKyAqLworc3RhdGljIHNzaXplX3QKK213aWZpZXhfaGlzdG9ncmFtX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1YnVmLAorCQkgICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9CisJCShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNzaXplX3QgcmV0OworCXN0cnVjdCBtd2lmaWV4X2hpc3RvZ3JhbV9kYXRhICpwaGlzdF9kYXRhOworCWludCBpLCB2YWx1ZTsKKwl1bnNpZ25lZCBsb25nIHBhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJY2hhciAqcCA9IChjaGFyICopcGFnZTsKKworCWlmICghcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIXByaXYgfHwgIXByaXYtPmhpc3RfZGF0YSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcGhpc3RfZGF0YSA9IHByaXYtPmhpc3RfZGF0YTsKKworCXAgKz0gc3ByaW50ZihwLCAiXG4iCisJCSAgICAgInRvdGFsIHNhbXBsZXMgPSAlZFxuIiwKKwkJICAgICBhdG9taWNfcmVhZCgmcGhpc3RfZGF0YS0+bnVtX3NhbXBsZXMpKTsKKworCXAgKz0gc3ByaW50ZihwLCAicnggcmF0ZXMgKGluIE1icHMpOiAwPTFNICAgMT0yTSIpOworCXAgKz0gc3ByaW50ZihwLCAiMj01LjVNICAzPTExTSAgIDQ9Nk0gICA1PTlNICA2PTEyTVxuIik7CisJcCArPSBzcHJpbnRmKHAsICI3PTE4TSAgOD0yNE0gIDk9MzZNICAxMD00OE0gIDExPTU0TSIpOworCXAgKz0gc3ByaW50ZihwLCAiMTItMjc9TUNTMC0xNShCVzIwKSAyOC00Mz1NQ1MwLTE1KEJXNDApXG4iKTsKKworCWlmIChJU1NVUFBfMTFBQ0VOQUJMRUQocHJpdi0+YWRhcHRlci0+ZndfY2FwX2luZm8pKSB7CisJCXAgKz0gc3ByaW50ZihwLCAiNDQtNTM9TUNTMC05KFZIVDpCVzIwKSIpOworCQlwICs9IHNwcmludGYocCwgIjU0LTYzPU1DUzAtOShWSFQ6Qlc0MCkiKTsKKwkJcCArPSBzcHJpbnRmKHAsICI2NC03Mz1NQ1MwLTkoVkhUOkJXODApXG5cbiIpOworCX0gZWxzZSB7CisJCXAgKz0gc3ByaW50ZihwLCAiXG4iKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTVdJRklFWF9NQVhfUlhfUkFURVM7IGkrKykgeworCQl2YWx1ZSA9IGF0b21pY19yZWFkKCZwaGlzdF9kYXRhLT5yeF9yYXRlW2ldKTsKKwkJaWYgKHZhbHVlKQorCQkJcCArPSBzcHJpbnRmKHAsICJyeF9yYXRlWyUwMmRdID0gJWRcbiIsIGksIHZhbHVlKTsKKwl9CisKKwlpZiAoSVNTVVBQXzExQUNFTkFCTEVEKHByaXYtPmFkYXB0ZXItPmZ3X2NhcF9pbmZvKSkgeworCQlmb3IgKGkgPSBNV0lGSUVYX01BWF9SWF9SQVRFUzsgaSA8IE1XSUZJRVhfTUFYX0FDX1JYX1JBVEVTOworCQkgICAgIGkrKykgeworCQkJdmFsdWUgPSBhdG9taWNfcmVhZCgmcGhpc3RfZGF0YS0+cnhfcmF0ZVtpXSk7CisJCQlpZiAodmFsdWUpCisJCQkJcCArPSBzcHJpbnRmKHAsICJyeF9yYXRlWyUwMmRdID0gJWRcbiIsCisJCQkJCSAgIGksIHZhbHVlKTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBNV0lGSUVYX01BWF9TTlI7IGkrKykgeworCQl2YWx1ZSA9ICBhdG9taWNfcmVhZCgmcGhpc3RfZGF0YS0+c25yW2ldKTsKKwkJaWYgKHZhbHVlKQorCQkJcCArPSBzcHJpbnRmKHAsICJzbnJbJTAyZGRCXSA9ICVkXG4iLCBpLCB2YWx1ZSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBNV0lGSUVYX01BWF9OT0lTRV9GTFI7IGkrKykgeworCQl2YWx1ZSA9IGF0b21pY19yZWFkKCZwaGlzdF9kYXRhLT5ub2lzZV9mbHJbaV0pOworCQlpZiAodmFsdWUpCisJCQlwICs9IHNwcmludGYocCwgIm5vaXNlX2ZsclstJTAyZGRCbV0gPSAlZFxuIiwKKwkJCQkoaW50KShpLTEyOCksIHZhbHVlKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IE1XSUZJRVhfTUFYX1NJR19TVFJFTkdUSDsgaSsrKSB7CisJCXZhbHVlID0gYXRvbWljX3JlYWQoJnBoaXN0X2RhdGEtPnNpZ19zdHJbaV0pOworCQlpZiAodmFsdWUpCisJCQlwICs9IHNwcmludGYocCwgInNpZ19zdHJlbmd0aFstJTAyZGRCbV0gPSAlZFxuIiwKKwkJCQlpLCB2YWx1ZSk7CisJfQorCisJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodWJ1ZiwgY291bnQsIHBwb3MsIChjaGFyICopcGFnZSwKKwkJCQkgICAgICAodW5zaWduZWQgbG9uZylwIC0gcGFnZSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdAorbXdpZmlleF9oaXN0b2dyYW1fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAorCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiA9ICh2b2lkICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKHByaXYgJiYgcHJpdi0+aGlzdF9kYXRhKQorCQltd2lmaWV4X2hpc3RfZGF0YV9yZXNldChwcml2KTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBtd2lmaWV4X2RlYnVnX2luZm8gaW5mbzsKIAogLyoKQEAgLTQxNSwxMyArNDEzLDkgQEAKIHsKIAlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2ID0KIAkJKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBtd2lmaWV4X2RlYnVnX2RhdGEgKmQgPSAmaXRlbXNbMF07CiAJdW5zaWduZWQgbG9uZyBwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwogCWNoYXIgKnAgPSAoY2hhciAqKSBwYWdlOwogCXNzaXplX3QgcmV0OwotCXNpemVfdCBzaXplLCBhZGRyOwotCWxvbmcgdmFsOwotCWludCBpLCBqOwogCiAJaWYgKCFwKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTQzMCw2OCArNDI0LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGZyZWVfYW5kX2V4aXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX29mX2l0ZW1zOyBpKyspIHsKLQkJcCArPSBzcHJpbnRmKHAsICIlcz0iLCBkW2ldLm5hbWUpOwotCi0JCXNpemUgPSBkW2ldLnNpemUgLyBkW2ldLm51bTsKLQotCQlpZiAoaSA8IChudW1fb2ZfaXRlbXMgLSAzKSkKLQkJCWFkZHIgPSBkW2ldLmFkZHIgKyAoc2l6ZV90KSAmaW5mbzsKLQkJZWxzZSAvKiBUaGUgbGFzdCAzIGl0ZW1zIGFyZSBzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyIHZhcmlhYmxlcyAqLwotCQkJYWRkciA9IGRbaV0uYWRkciArIChzaXplX3QpIHByaXYtPmFkYXB0ZXI7Ci0KLQkJZm9yIChqID0gMDsgaiA8IGRbaV0ubnVtOyBqKyspIHsKLQkJCXN3aXRjaCAoc2l6ZSkgewotCQkJY2FzZSAxOgotCQkJCXZhbCA9ICooKHU4ICopIGFkZHIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAyOgotCQkJCXZhbCA9ICooKHUxNiAqKSBhZGRyKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgNDoKLQkJCQl2YWwgPSAqKCh1MzIgKikgYWRkcik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDg6Ci0JCQkJdmFsID0gKigobG9uZyBsb25nICopIGFkZHIpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQl2YWwgPSAtMTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJcCArPSBzcHJpbnRmKHAsICIlI2x4ICIsIHZhbCk7Ci0JCQlhZGRyICs9IHNpemU7Ci0JCX0KLQotCQlwICs9IHNwcmludGYocCwgIlxuIik7Ci0JfQotCi0JaWYgKGluZm8udHhfdGJsX251bSkgewotCQlwICs9IHNwcmludGYocCwgIlR4IEJBIHN0cmVhbSB0YWJsZTpcbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgaW5mby50eF90YmxfbnVtOyBpKyspCi0JCQlwICs9IHNwcmludGYocCwgInRpZCA9ICVkLCByYSA9ICVwTVxuIiwKLQkJCQkgICAgIGluZm8udHhfdGJsW2ldLnRpZCwgaW5mby50eF90YmxbaV0ucmEpOwotCX0KLQotCWlmIChpbmZvLnJ4X3RibF9udW0pIHsKLQkJcCArPSBzcHJpbnRmKHAsICJSeCByZW9yZGVyIHRhYmxlOlxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBpbmZvLnJ4X3RibF9udW07IGkrKykgewotCQkJcCArPSBzcHJpbnRmKHAsICJ0aWQgPSAlZCwgdGEgPSAlcE0sICIKLQkJCQkgICAgICJzdGFydF93aW4gPSAlZCwgIgotCQkJCSAgICAgIndpbl9zaXplID0gJWQsIGJ1ZmZlcjogIiwKLQkJCQkgICAgIGluZm8ucnhfdGJsW2ldLnRpZCwKLQkJCQkgICAgIGluZm8ucnhfdGJsW2ldLnRhLAotCQkJCSAgICAgaW5mby5yeF90YmxbaV0uc3RhcnRfd2luLAotCQkJCSAgICAgaW5mby5yeF90YmxbaV0ud2luX3NpemUpOwotCi0JCQlmb3IgKGogPSAwOyBqIDwgaW5mby5yeF90YmxbaV0ud2luX3NpemU7IGorKykKLQkJCQlwICs9IHNwcmludGYocCwgIiVjICIsCi0JCQkJCSAgICAgaW5mby5yeF90YmxbaV0uYnVmZmVyW2pdID8KLQkJCQkJICAgICAnMScgOiAnMCcpOwotCi0JCQlwICs9IHNwcmludGYocCwgIlxuIik7Ci0JCX0KLQl9CisJcCArPSBtd2lmaWV4X2RlYnVnX2luZm9fdG9fYnVmZmVyKHByaXYsIHAsICZpbmZvKTsKIAogCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVidWYsIGNvdW50LCBwcG9zLCAoY2hhciAqKSBwYWdlLAogCQkJCSAgICAgICh1bnNpZ25lZCBsb25nKSBwIC0gcGFnZSk7CkBAIC04MTcsNiArNzUwLDcgQEAKIE1XSUZJRVhfREZTX0ZJTEVfT1BTKHJlZ3Jkd3IpOwogTVdJRklFWF9ERlNfRklMRV9PUFMocmRlZXByb20pOwogTVdJRklFWF9ERlNfRklMRV9PUFMoaHNjZmcpOworTVdJRklFWF9ERlNfRklMRV9PUFMoaGlzdG9ncmFtKTsKIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgZGVidWcgRlMgZGlyZWN0b3J5IHN0cnVjdHVyZSBhbmQgdGhlIGZpbGVzLgpAQCAtODQwLDYgKzc3NCw3IEBACiAJTVdJRklFWF9ERlNfQUREX0ZJTEUocmRlZXByb20pOwogCU1XSUZJRVhfREZTX0FERF9GSUxFKGZ3X2R1bXApOwogCU1XSUZJRVhfREZTX0FERF9GSUxFKGhzY2ZnKTsKKwlNV0lGSUVYX0RGU19BRERfRklMRShoaXN0b2dyYW0pOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9kZWNsLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2RlY2wuaAppbmRleCAyMjY5YWNmLi44OGQwZWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2RlY2wuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2RlY2wuaApAQCAtMzIsMTUgKzMyLDE5IEBACiAKICNkZWZpbmUgTVdJRklFWF9NQVhfQlNTX05VTSAgICAgICAgICgzKQogCi0jZGVmaW5lIE1XSUZJRVhfTUlOX0RBVEFfSEVBREVSX0xFTiAzNgkvKiBzaXplb2YobXdpZmlleF90eHBkKQotCQkJCQkgKiAgICsgNCBieXRlIGFsaWdubWVudAotCQkJCQkgKi8KKyNkZWZpbmUgTVdJRklFWF9ETUFfQUxJR05fU1oJICAgIDY0CisjZGVmaW5lIE1BWF9UWFBEX1NaCQkgICAgMzIKKyNkZWZpbmUgSU5URl9IRFJfQUxJR04JCSAgICAgNAorCisjZGVmaW5lIE1XSUZJRVhfTUlOX0RBVEFfSEVBREVSX0xFTiAoTVdJRklFWF9ETUFfQUxJR05fU1ogKyBJTlRGX0hEUl9BTElHTiArIFwKKwkJCQkgICAgIE1BWF9UWFBEX1NaKQogI2RlZmluZSBNV0lGSUVYX01HTVRfRlJBTUVfSEVBREVSX1NJWkUJOAkvKiBzaXplb2YocGt0X3R5cGUpCiAJCQkJCQkgKiAgICsgc2l6ZW9mKHR4X2NvbnRyb2wpCiAJCQkJCQkgKi8KIAogI2RlZmluZSBNV0lGSUVYX01BWF9UWF9CQVNUUkVBTV9TVVBQT1JURUQJMgogI2RlZmluZSBNV0lGSUVYX01BWF9SWF9CQVNUUkVBTV9TVVBQT1JURUQJMTYKKyNkZWZpbmUgTVdJRklFWF9NQVhfVERMU19QRUVSX1NVUFBPUlRFRCA4CiAKICNkZWZpbmUgTVdJRklFWF9TVEFfQU1QRFVfREVGX1RYV0lOU0laRSAgICAgICAgNjQKICNkZWZpbmUgTVdJRklFWF9TVEFfQU1QRFVfREVGX1JYV0lOU0laRSAgICAgICAgNjQKQEAgLTkyLDYgKzk2LDIwIEBACiAjZGVmaW5lIE1XSUZJRVhfVERMU19NQVhfRkFJTF9DT1VOVCAgICAgIDQKICNkZWZpbmUgTVdJRklFWF9BVVRPX1RETFNfSURMRV9USU1FICAgICAxMAogCisvKiA1NE0gcmF0ZXMsIGluZGV4IGZyb20gMCB0byAxMSAqLworI2RlZmluZSBNV0lGSUVYX1JBVEVfSU5ERVhfTUNTMCAxMgorLyogMTItMjc9TUNTMC0xNShCVzIwKSAqLworI2RlZmluZSBNV0lGSUVYX0JXMjBfTUNTX05VTSAxNQorCisvKiBSYXRlIGluZGV4IGZvciBPRkRNIDAgKi8KKyNkZWZpbmUgTVdJRklFWF9SQVRFX0lOREVYX09GRE0wICAgNAorCisjZGVmaW5lIE1XSUZJRVhfTUFYX1NUQV9OVU0JCTEKKyNkZWZpbmUgTVdJRklFWF9NQVhfVUFQX05VTQkJMQorI2RlZmluZSBNV0lGSUVYX01BWF9QMlBfTlVNCQkxCisKKyNkZWZpbmUgTVdJRklFWF9BX0JBTkRfU1RBUlRfRlJFUQk1MDAwCisKIGVudW0gbXdpZmlleF9ic3NfdHlwZSB7CiAJTVdJRklFWF9CU1NfVFlQRV9TVEEgPSAwLAogCU1XSUZJRVhfQlNTX1RZUEVfVUFQID0gMSwKQEAgLTIwNCw0ICsyMjIsMzUgQEAKIAl1MTYgY2NhX3NjYW5fZHVyOwogCXUxNiBjY2FfYnVzeV9kdXI7CiB9IF9fcGFja2VkOworCisjZGVmaW5lIE1XSUZJRVhfSElTVF9NQVhfU0FNUExFUwkxMDQ4NTc2CisjZGVmaW5lIE1XSUZJRVhfTUFYX1JYX1JBVEVTCQkgICAgIDQ0CisjZGVmaW5lIE1XSUZJRVhfTUFYX0FDX1JYX1JBVEVTCQkgICAgIDc0CisjZGVmaW5lIE1XSUZJRVhfTUFYX1NOUgkJCSAgICAyNTYKKyNkZWZpbmUgTVdJRklFWF9NQVhfTk9JU0VfRkxSCQkgICAgMjU2CisjZGVmaW5lIE1XSUZJRVhfTUFYX1NJR19TVFJFTkdUSAkgICAgMjU2CisKK3N0cnVjdCBtd2lmaWV4X2hpc3RvZ3JhbV9kYXRhIHsKKwlhdG9taWNfdCByeF9yYXRlW01XSUZJRVhfTUFYX0FDX1JYX1JBVEVTXTsKKwlhdG9taWNfdCBzbnJbTVdJRklFWF9NQVhfU05SXTsKKwlhdG9taWNfdCBub2lzZV9mbHJbTVdJRklFWF9NQVhfTk9JU0VfRkxSXTsKKwlhdG9taWNfdCBzaWdfc3RyW01XSUZJRVhfTUFYX1NJR19TVFJFTkdUSF07CisJYXRvbWljX3QgbnVtX3NhbXBsZXM7Cit9OworCitzdHJ1Y3QgbXdpZmlleF9pZmFjZV9jb21iIHsKKwl1OCBzdGFfaW50ZjsKKwl1OCB1YXBfaW50ZjsKKwl1OCBwMnBfaW50ZjsKK307CisKK3N0cnVjdCBtd2lmaWV4X3JhZGFyX3BhcmFtcyB7CisJc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmOworCXUzMiBjYWNfdGltZV9tczsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4XzExaF9pbnRmX3N0YXRlIHsKKwlib29sIGlzXzExaF9lbmFibGVkOworCWJvb2wgaXNfMTFoX2FjdGl2ZTsKK30gX19wYWNrZWQ7CiAjZW5kaWYgLyogIV9NV0lGSUVYX0RFQ0xfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9ldGh0b29sLmMKaW5kZXggMDRlNTZiNS4uNjVkOGQ2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9ldGh0b29sLmMKQEAgLTc2LDcgKzc2LDkgQEAKIAogCWR1bXAtPmZsYWcgPSBhZGFwdGVyLT5jdXJyX21lbV9pZHg7CiAJZHVtcC0+dmVyc2lvbiA9IDE7Ci0JaWYgKGFkYXB0ZXItPmN1cnJfbWVtX2lkeCAhPSBNV0lGSUVYX0ZXX0RVTVBfSURYKSB7CisJaWYgKGFkYXB0ZXItPmN1cnJfbWVtX2lkeCA9PSBNV0lGSUVYX0RSVl9JTkZPX0lEWCkgeworCQlkdW1wLT5sZW4gPSBhZGFwdGVyLT5kcnZfaW5mb19zaXplOworCX0gZWxzZSBpZiAoYWRhcHRlci0+Y3Vycl9tZW1faWR4ICE9IE1XSUZJRVhfRldfRFVNUF9JRFgpIHsKIAkJZW50cnkgPSAmYWRhcHRlci0+bWVtX3R5cGVfbWFwcGluZ190YmxbYWRhcHRlci0+Y3Vycl9tZW1faWR4XTsKIAkJZHVtcC0+bGVuID0gZW50cnktPm1lbV9zaXplOwogCX0gZWxzZSB7CkBAIC05OCw2ICsxMDAsMTMgQEAKIAlpZiAoIWFkYXB0ZXItPmlmX29wcy5md19kdW1wKQogCQlyZXR1cm4gLUVOT1RTVVBQOwogCisJaWYgKGFkYXB0ZXItPmN1cnJfbWVtX2lkeCA9PSBNV0lGSUVYX0RSVl9JTkZPX0lEWCkgeworCQlpZiAoIWFkYXB0ZXItPmRydl9pbmZvX2R1bXApCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJbWVtY3B5KHAsIGFkYXB0ZXItPmRydl9pbmZvX2R1bXAsIGFkYXB0ZXItPmRydl9pbmZvX3NpemUpOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoYWRhcHRlci0+Y3Vycl9tZW1faWR4ID09IE1XSUZJRVhfRldfRFVNUF9JRFgpIHsKIAkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJmaXJtd2FyZSBkdW1wIGluIHByb2dyZXNzISFcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwpAQCAtMTI1LDYgKzEzNCwxMSBAQAogCWlmICghYWRhcHRlci0+aWZfb3BzLmZ3X2R1bXApCiAJCXJldHVybiAtRU5PVFNVUFA7CiAKKwlpZiAodmFsLT5mbGFnID09IE1XSUZJRVhfRFJWX0lORk9fSURYKSB7CisJCWFkYXB0ZXItPmN1cnJfbWVtX2lkeCA9IE1XSUZJRVhfRFJWX0lORk9fSURYOworCQlyZXR1cm4gMDsKKwl9CisKIAlpZiAoYWRhcHRlci0+Y3Vycl9tZW1faWR4ID09IE1XSUZJRVhfRldfRFVNUF9JRFgpIHsKIAkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJmaXJtd2FyZSBkdW1wIGluIHByb2dyZXNzISFcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9mdy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9mdy5oCmluZGV4IGZiNTkzNmUuLmRmNTUzZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvZncuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2Z3LmgKQEAgLTE1OCw2ICsxNTgsNyBAQAogI2RlZmluZSBUTFZfVFlQRV9QT1dFUl9HUk9VUCAgICAgICAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgODQpCiAjZGVmaW5lIFRMVl9UWVBFX0JTU19TQ0FOX1JTUCAgICAgICAoUFJPUFJJRVRBUllfVExWX0JBU0VfSUQgKyA4NikKICNkZWZpbmUgVExWX1RZUEVfQlNTX1NDQU5fSU5GTyAgICAgIChQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCArIDg3KQorI2RlZmluZSBUTFZfVFlQRV9DSEFOUlBUXzExSF9CQVNJQyAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgOTEpCiAjZGVmaW5lIFRMVl9UWVBFX1VBUF9SRVRSWV9MSU1JVCAgICAoUFJPUFJJRVRBUllfVExWX0JBU0VfSUQgKyA5MykKICNkZWZpbmUgVExWX1RZUEVfV0FQSV9JRSAgICAgICAgICAgIChQUk9QUklFVEFSWV9UTFZfQkFTRV9JRCArIDk0KQogI2RlZmluZSBUTFZfVFlQRV9VQVBfTUdNVF9GUkFNRSAgICAgKFBST1BSSUVUQVJZX1RMVl9CQVNFX0lEICsgMTA0KQpAQCAtMjMzLDYgKzIzNCw3IEBACiAjZGVmaW5lIElTU1VQUF9SWExEUEMoRG90MTFuRGV2Q2FwKSAoRG90MTFuRGV2Q2FwICYgQklUKDIyKSkKICNkZWZpbmUgSVNTVVBQX0JFQU1GT1JNSU5HKERvdDExbkRldkNhcCkgKERvdDExbkRldkNhcCAmIEJJVCgzMCkpCiAjZGVmaW5lIElTQUxMT1dFRF9DSEFOV0lEVEg0MChodF9wYXJhbSkgKGh0X3BhcmFtICYgQklUKDIpKQorI2RlZmluZSBHRVRTVVBQX1RYQkFTVFJFQU1TKERvdDExbkRldkNhcCkgKChEb3QxMW5EZXZDYXAgPj4gMTgpICYgMHhGKQogCiAvKiBodHR4Y2ZnIGJpdG1hcAogICogMAkJcmVzZXJ2ZWQKQEAgLTMzNSw2ICszMzcsNyBAQAogI2RlZmluZSBIb3N0Q21kX0NNRF8xMU5fQUREQkFfUlNQICAgICAgICAgICAgICAgICAgICAgMHgwMGNmCiAjZGVmaW5lIEhvc3RDbWRfQ01EXzExTl9ERUxCQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZDAKICNkZWZpbmUgSG9zdENtZF9DTURfUkVDT05GSUdVUkVfVFhfQlVGRiAgICAgICAgICAgICAgIDB4MDBkOQorI2RlZmluZSBIb3N0Q21kX0NNRF9DSEFOX1JFUE9SVF9SRVFVRVNUICAgICAgICAgICAgICAgMHgwMGRkCiAjZGVmaW5lIEhvc3RDbWRfQ01EX0FNU0RVX0FHR1JfQ1RSTCAgICAgICAgICAgICAgICAgICAweDAwZGYKICNkZWZpbmUgSG9zdENtZF9DTURfVFhQV1JfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDBkMQogI2RlZmluZSBIb3N0Q21kX0NNRF9UWF9SQVRFX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMGQ2CkBAIC00OTIsNiArNDk1LDggQEAKICNkZWZpbmUgRVZFTlRfSE9TVFdBS0VfU1RBSUUJCTB4MDAwMDAwNGQKICNkZWZpbmUgRVZFTlRfQ0hBTk5FTF9TV0lUQ0hfQU5OICAgICAgICAweDAwMDAwMDUwCiAjZGVmaW5lIEVWRU5UX1RETFNfR0VORVJJQ19FVkVOVCAgICAgICAgMHgwMDAwMDA1MgorI2RlZmluZSBFVkVOVF9SQURBUl9ERVRFQ1RFRAkJMHgwMDAwMDA1MworI2RlZmluZSBFVkVOVF9DSEFOTkVMX1JFUE9SVF9SRFkgICAgICAgIDB4MDAwMDAwNTQKICNkZWZpbmUgRVZFTlRfRVhUX1NDQU5fUkVQT1JUICAgICAgICAgICAweDAwMDAwMDU4CiAjZGVmaW5lIEVWRU5UX1JFTUFJTl9PTl9DSEFOX0VYUElSRUQgICAgMHgwMDAwMDA1ZgogI2RlZmluZSBFVkVOVF9UWF9TVEFUVVNfUkVQT1JUCQkweDAwMDAwMDc0CkBAIC01MjksNiArNTM0LDggQEAKIAogI2RlZmluZSBNV0lGSUVYX0ZXX1YxNQkJICAgMTUKIAorI2RlZmluZSBNV0lGSUVYX01BU1RFUl9SQURBUl9ERVRfTUFTSyBCSVQoMSkKKwogc3RydWN0IG13aWZpZXhfaWVfdHlwZXNfaGVhZGVyIHsKIAlfX2xlMTYgdHlwZTsKIAlfX2xlMTYgbGVuOwpAQCAtMTA3Niw2ICsxMDgzLDggQEAKIAlfX2xlMzIgdHhfZnJhbWU7CiAJX19sZTMyIHJlc2VydmVkOwogCV9fbGUzMiB3ZXBfaWN2X2Vycl9jbnRbNF07CisJX19sZTMyIGJjbl9yY3ZfY250OworCV9fbGUzMiBiY25fbWlzc19jbnQ7CiB9OwogCiAvKiBFbnVtZXJhdGlvbiBmb3IgcmF0ZSBmb3JtYXQgKi8KQEAgLTEyMTMsNiArMTIyMiwyNCBAQAogCXU4IHBlZXJfbWFjW0VUSF9BTEVOXTsKIH0gX19wYWNrZWQ7CiAKK3N0cnVjdCBtd2lmaWV4X2NoYW5fZGVzYyB7CisJX19sZTE2IHN0YXJ0X2ZyZXE7CisJdTggY2hhbl93aWR0aDsKKwl1OCBjaGFuX251bTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc19jaGFuX3JwdF9yZXEgeworCXN0cnVjdCBtd2lmaWV4X2NoYW5fZGVzYyBjaGFuX2Rlc2M7CisJX19sZTMyIG1zZWNfZHdlbGxfdGltZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBob3N0X2NtZF9kc19jaGFuX3JwdF9ldmVudCB7CisJX19sZTMyIHJlc3VsdDsKKwlfX2xlNjQgc3RhcnRfdHNmOworCV9fbGUzMiBkdXJhdGlvbjsKKwl1OCB0bHZidWZbMF07Cit9IF9fcGFja2VkOworCiBzdHJ1Y3QgbXdpZmlleF9maXhlZF9iY25fcGFyYW0gewogCV9fbGU2NCB0aW1lc3RhbXA7CiAJX19sZTE2IGJlYWNvbl9wZXJpb2Q7CkBAIC0xNzg5LDYgKzE4MTYsMzkgQEAKIAl1OCBldnRfZnJlcTsKIH0gX19wYWNrZWQ7CiAKKyNkZWZpbmUgTVdJRklFWF9ERlNfUkVDX0hEUl9MRU4JCTgKKyNkZWZpbmUgTVdJRklFWF9ERlNfUkVDX0hEUl9OVU0JCTEwCisjZGVmaW5lIE1XSUZJRVhfQklOX0NPVU5URVJfTEVOCQk3CisKK3N0cnVjdCBtd2lmaWV4X3JhZGFyX2RldF9ldmVudCB7CisJX19sZTMyIGRldGVjdF9jb3VudDsKKwl1OCByZWdfZG9tYWluOyAgLyoxPWZjYywgMj1ldHNpLCAzPW1pYyovCisJdTggZGV0X3R5cGU7ICAvKjA9bm9uZSwgMT1wdyhjaGlycCksIDI9cHJpKHJhZGFyKSovCisJX19sZTE2IHB3X2NoaXJwX3R5cGU7CisJdTggcHdfY2hpcnBfaWR4OworCXU4IHB3X3ZhbHVlOworCXU4IHByaV9yYWRhcl90eXBlOworCXU4IHByaV9iaW5jbnQ7CisJdTggYmluX2NvdW50ZXJbTVdJRklFWF9CSU5fQ09VTlRFUl9MRU5dOworCXU4IG51bV9kZnNfcmVjb3JkczsKKwl1OCBkZnNfcmVjb3JkX2hkcltNV0lGSUVYX0RGU19SRUNfSERSX05VTV1bTVdJRklFWF9ERlNfUkVDX0hEUl9MRU5dOworCV9fbGUzMiBwYXNzZWQ7Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbWVhc19ycHRfbWFwIHsKKwl1OCByc3NpOjM7CisJdTggdW5tZWFzdXJlZDoxOworCXU4IHJhZGFyOjE7CisJdTggdW5pZGVudGlmaWVkX3NpZzoxOworCXU4IG9mZG1fcHJlYW1ibGU6MTsKKwl1OCBic3M6MTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2NoYW5fcnB0X2RhdGEgeworCXN0cnVjdCBtd2lmaWV4X2llX3R5cGVzX2hlYWRlciBoZWFkZXI7CisJc3RydWN0IG1lYXNfcnB0X21hcCBtYXA7Cit9IF9fcGFja2VkOworCiBzdHJ1Y3QgaG9zdF9jbWRfZHNfODAyXzExX3N1YnNjX2V2dCB7CiAJX19sZTE2IGFjdGlvbjsKIAlfX2xlMTYgZXZlbnRzOwpAQCAtMTkwMSw2ICsxOTYxLDcgQEAKIAkJc3RydWN0IGhvc3RfY21kXzExYWNfdmh0X2NmZyB2aHRfY2ZnOwogCQlzdHJ1Y3QgaG9zdF9jbWRfZHNfY29hbGVzY2VfY2ZnIGNvYWxlc2NlX2NmZzsKIAkJc3RydWN0IGhvc3RfY21kX2RzX3RkbHNfb3BlciB0ZGxzX29wZXI7CisJCXN0cnVjdCBob3N0X2NtZF9kc19jaGFuX3JwdF9yZXEgY2hhbl9ycHRfcmVxOwogCX0gcGFyYW1zOwogfSBfX3BhY2tlZDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9pZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9pZS5jCmluZGV4IGI5MzM3OTQuLmYzYjZlZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvaWUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2llLmMKQEAgLTMxNywyNyArMzE3LDI3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogVGhpcyBmdW5jdGlvbiBwYXJzZXMgZGlmZmVyZW50IElFcy10YWlsIElFcywgYmVhY29uIElFcywgcHJvYmUgcmVzcG9uc2UgSUVzLAotICogYXNzb2NpYXRpb24gcmVzcG9uc2UgSUVzIGZyb20gY2ZnODAyMTFfYXBfc2V0dGluZ3MgZnVuY3Rpb24gYW5kIHNldHMgdGhlc2UgSUUKLSAqIHRvIEZXLgorLyogVGhpcyBmdW5jdGlvbiBwYXJzZXMgIGhlYWQgYW5kIHRhaWwgSUVzLCBmcm9tIGNmZzgwMjExX2JlYWNvbl9kYXRhIGFuZCBzZXRzCisgKiB0aGVzZSBJRSB0byBGVy4KICAqLwotaW50IG13aWZpZXhfc2V0X21nbXRfaWVzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCi0JCQkgc3RydWN0IGNmZzgwMjExX2JlYWNvbl9kYXRhICppbmZvKQorc3RhdGljIGludCBtd2lmaWV4X3VhcF9zZXRfaGVhZF90YWlsX2llcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAorCQkJCQkgc3RydWN0IGNmZzgwMjExX2JlYWNvbl9kYXRhICppbmZvKQogewogCXN0cnVjdCBtd2lmaWV4X2llICpnZW5faWU7Ci0Jc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyICpyc25faWUsICp3cGFfaWUgPSBOVUxMOwotCXUxNiByc25faWR4ID0gTVdJRklFWF9BVVRPX0lEWF9NQVNLLCBpZV9sZW4gPSAwOworCXN0cnVjdCBpZWVlX3R5cGVzX2hlYWRlciAqcnNuX2llID0gTlVMTCwgKndwYV9pZSA9IE5VTEw7CisJc3RydWN0IGllZWVfdHlwZXNfaGVhZGVyICpjaHN3X2llID0gTlVMTDsKKwl1MTYgZ2VuX2lkeCA9IE1XSUZJRVhfQVVUT19JRFhfTUFTSywgaWVfbGVuID0gMDsKIAljb25zdCB1OCAqdmVuZG9yX2llOwogCi0JaWYgKGluZm8tPnRhaWwgJiYgaW5mby0+dGFpbF9sZW4pIHsKLQkJZ2VuX2llID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG13aWZpZXhfaWUpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFnZW5faWUpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJZ2VuX2llLT5pZV9pbmRleCA9IGNwdV90b19sZTE2KHJzbl9pZHgpOwotCQlnZW5faWUtPm1nbXRfc3VidHlwZV9tYXNrID0gY3B1X3RvX2xlMTYoTUdNVF9NQVNLX0JFQUNPTiB8Ci0JCQkJCQkJTUdNVF9NQVNLX1BST0JFX1JFU1AgfAotCQkJCQkJCU1HTVRfTUFTS19BU1NPQ19SRVNQKTsKKwlnZW5faWUgPSBremFsbG9jKHNpemVvZigqZ2VuX2llKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFnZW5faWUpCisJCXJldHVybiAtRU5PTUVNOworCWdlbl9pZS0+aWVfaW5kZXggPSBjcHVfdG9fbGUxNihnZW5faWR4KTsKKwlnZW5faWUtPm1nbXRfc3VidHlwZV9tYXNrID0gY3B1X3RvX2xlMTYoTUdNVF9NQVNLX0JFQUNPTiB8CisJCQkJCQlNR01UX01BU0tfUFJPQkVfUkVTUCB8CisJCQkJCQlNR01UX01BU0tfQVNTT0NfUkVTUCk7CiAKKwlpZiAoaW5mby0+dGFpbCAmJiBpbmZvLT50YWlsX2xlbikgewogCQlyc25faWUgPSAodm9pZCAqKWNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfUlNOLAogCQkJCQkJICBpbmZvLT50YWlsLCBpbmZvLT50YWlsX2xlbik7CiAJCWlmIChyc25faWUpIHsKQEAgLTM1OCwxOSArMzU4LDQxIEBACiAJCQlnZW5faWUtPmllX2xlbmd0aCA9IGNwdV90b19sZTE2KGllX2xlbik7CiAJCX0KIAotCQlpZiAocnNuX2llIHx8IHdwYV9pZSkgewotCQkJaWYgKG13aWZpZXhfdXBkYXRlX3VhcF9jdXN0b21faWUocHJpdiwgZ2VuX2llLCAmcnNuX2lkeCwKLQkJCQkJCQkgTlVMTCwgTlVMTCwKLQkJCQkJCQkgTlVMTCwgTlVMTCkpIHsKLQkJCQlrZnJlZShnZW5faWUpOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQkJCXByaXYtPnJzbl9pZHggPSByc25faWR4OworCQljaHN3X2llID0gKHZvaWQgKiljZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX0NIQU5ORUxfU1dJVENILAorCQkJCQkJICAgaW5mby0+dGFpbCwgaW5mby0+dGFpbF9sZW4pOworCQlpZiAoY2hzd19pZSkgeworCQkJbWVtY3B5KGdlbl9pZS0+aWVfYnVmZmVyICsgaWVfbGVuLAorCQkJICAgICAgIGNoc3dfaWUsIGNoc3dfaWUtPmxlbiArIDIpOworCQkJaWVfbGVuICs9IGNoc3dfaWUtPmxlbiArIDI7CisJCQlnZW5faWUtPmllX2xlbmd0aCA9IGNwdV90b19sZTE2KGllX2xlbik7CiAJCX0KLQotCQlrZnJlZShnZW5faWUpOwogCX0KIAorCWlmIChyc25faWUgfHwgd3BhX2llIHx8IGNoc3dfaWUpIHsKKwkJaWYgKG13aWZpZXhfdXBkYXRlX3VhcF9jdXN0b21faWUocHJpdiwgZ2VuX2llLCAmZ2VuX2lkeCwgTlVMTCwKKwkJCQkJCSBOVUxMLCBOVUxMLCBOVUxMKSkgeworCQkJa2ZyZWUoZ2VuX2llKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlwcml2LT5nZW5faWR4ID0gZ2VuX2lkeDsKKwl9CisKKwlrZnJlZShnZW5faWUpOworCXJldHVybiAwOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBkaWZmZXJlbnQgSUVzLWhlYWQgJiB0YWlsIElFcywgYmVhY29uIElFcywKKyAqIHByb2JlIHJlc3BvbnNlIElFcywgYXNzb2NpYXRpb24gcmVzcG9uc2UgSUVzIGZyb20gY2ZnODAyMTFfYXBfc2V0dGluZ3MKKyAqIGZ1bmN0aW9uIGFuZCBzZXRzIHRoZXNlIElFIHRvIEZXLgorICovCitpbnQgbXdpZmlleF9zZXRfbWdtdF9pZXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSBzdHJ1Y3QgY2ZnODAyMTFfYmVhY29uX2RhdGEgKmluZm8pCit7CisJaW50IHJldDsKKworCXJldCA9IG13aWZpZXhfdWFwX3NldF9oZWFkX3RhaWxfaWVzKHByaXYsIGluZm8pOworCQlyZXR1cm4gcmV0OworCiAJcmV0dXJuIG13aWZpZXhfc2V0X21nbXRfYmVhY29uX2RhdGFfaWVzKHByaXYsIGluZm8pOwogfQogCkBAIC0zNzgsMjUgKzQwMCwyNSBAQAogaW50IG13aWZpZXhfZGVsX21nbXRfaWVzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpCiB7CiAJc3RydWN0IG13aWZpZXhfaWUgKmJlYWNvbl9pZSA9IE5VTEwsICpwcl9pZSA9IE5VTEw7Ci0Jc3RydWN0IG13aWZpZXhfaWUgKmFyX2llID0gTlVMTCwgKnJzbl9pZSA9IE5VTEw7CisJc3RydWN0IG13aWZpZXhfaWUgKmFyX2llID0gTlVMTCwgKmdlbl9pZSA9IE5VTEw7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAocHJpdi0+cnNuX2lkeCAhPSBNV0lGSUVYX0FVVE9fSURYX01BU0spIHsKLQkJcnNuX2llID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG13aWZpZXhfaWUpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFyc25faWUpCisJaWYgKHByaXYtPmdlbl9pZHggIT0gTVdJRklFWF9BVVRPX0lEWF9NQVNLKSB7CisJCWdlbl9pZSA9IGttYWxsb2Moc2l6ZW9mKCpnZW5faWUpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFnZW5faWUpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAotCQlyc25faWUtPmllX2luZGV4ID0gY3B1X3RvX2xlMTYocHJpdi0+cnNuX2lkeCk7Ci0JCXJzbl9pZS0+bWdtdF9zdWJ0eXBlX21hc2sgPSBjcHVfdG9fbGUxNihNV0lGSUVYX0RFTEVURV9NQVNLKTsKLQkJcnNuX2llLT5pZV9sZW5ndGggPSAwOwotCQlpZiAobXdpZmlleF91cGRhdGVfdWFwX2N1c3RvbV9pZShwcml2LCByc25faWUsICZwcml2LT5yc25faWR4LAorCQlnZW5faWUtPmllX2luZGV4ID0gY3B1X3RvX2xlMTYocHJpdi0+Z2VuX2lkeCk7CisJCWdlbl9pZS0+bWdtdF9zdWJ0eXBlX21hc2sgPSBjcHVfdG9fbGUxNihNV0lGSUVYX0RFTEVURV9NQVNLKTsKKwkJZ2VuX2llLT5pZV9sZW5ndGggPSAwOworCQlpZiAobXdpZmlleF91cGRhdGVfdWFwX2N1c3RvbV9pZShwcml2LCBnZW5faWUsICZwcml2LT5nZW5faWR4LAogCQkJCQkJIE5VTEwsICZwcml2LT5wcm9iZXJlc3BfaWR4LAogCQkJCQkJIE5VTEwsICZwcml2LT5hc3NvY3Jlc3BfaWR4KSkgewogCQkJcmV0ID0gLTE7CiAJCQlnb3RvIGRvbmU7CiAJCX0KIAotCQlwcml2LT5yc25faWR4ID0gTVdJRklFWF9BVVRPX0lEWF9NQVNLOworCQlwcml2LT5nZW5faWR4ID0gTVdJRklFWF9BVVRPX0lEWF9NQVNLOwogCX0KIAogCWlmIChwcml2LT5iZWFjb25faWR4ICE9IE1XSUZJRVhfQVVUT19JRFhfTUFTSykgewpAQCAtNDQwLDcgKzQ2Miw2IEBACiAJa2ZyZWUoYmVhY29uX2llKTsKIAlrZnJlZShwcl9pZSk7CiAJa2ZyZWUoYXJfaWUpOwotCWtmcmVlKHJzbl9pZSk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2luaXQuYwppbmRleCA1MjBhZDRhLi5iNzdiYTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2luaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2luaXQuYwpAQCAtNTIsNiArNTIsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgd2FrZXVwX3RpbWVyX2ZuKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKilkYXRhOworCisJZGV2X2VycihhZGFwdGVyLT5kZXYsICJGaXJtd2FyZSB3YWtldXAgZmFpbGVkXG4iKTsKKwlhZGFwdGVyLT5od19zdGF0dXMgPSBNV0lGSUVYX0hXX1NUQVRVU19SRVNFVDsKKwltd2lmaWV4X2NhbmNlbF9hbGxfcGVuZGluZ19jbWQoYWRhcHRlcik7CisKKwlpZiAoYWRhcHRlci0+aWZfb3BzLmNhcmRfcmVzZXQpCisJCWFkYXB0ZXItPmlmX29wcy5jYXJkX3Jlc2V0KGFkYXB0ZXIpOworfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgYW5kIHNldHMgZGVmYXVsdAogICogdmFsdWVzIHRvIHRoZSBtZW1iZXJzLgpAQCAtMTQwLDYgKzE1Miw4IEBACiAJcHJpdi0+Y2hlY2tfdGRsc190eCA9IGZhbHNlOwogCW1lbWNweShwcml2LT50b3NfdG9fdGlkX2ludiwgdG9zX3RvX3RpZF9pbnYsIE1BWF9OVU1fVElEKTsKIAorCW13aWZpZXhfaW5pdF8xMWhfcGFyYW1zKHByaXYpOworCiAJcmV0dXJuIG13aWZpZXhfYWRkX2Jzc19wcmlvX3RibChwcml2KTsKIH0KIApAQCAtMjgyLDkgKzI5NiwxNiBAQAogCW1lbXNldCgmYWRhcHRlci0+YXJwX2ZpbHRlciwgMCwgc2l6ZW9mKGFkYXB0ZXItPmFycF9maWx0ZXIpKTsKIAlhZGFwdGVyLT5hcnBfZmlsdGVyX3NpemUgPSAwOwogCWFkYXB0ZXItPm1heF9tZ210X2llX2luZGV4ID0gTUFYX01HTVRfSUVfSU5ERVg7Ci0JYWRhcHRlci0+ZXh0X3NjYW4gPSB0cnVlOworCWFkYXB0ZXItPmV4dF9zY2FuID0gZmFsc2U7CiAJYWRhcHRlci0+a2V5X2FwaV9tYWpvcl92ZXIgPSAwOwogCWFkYXB0ZXItPmtleV9hcGlfbWlub3JfdmVyID0gMDsKKwltZW1zZXQoYWRhcHRlci0+cGVybV9hZGRyLCAweGZmLCBFVEhfQUxFTik7CisJYWRhcHRlci0+aWZhY2VfbGltaXQuc3RhX2ludGYgPSBNV0lGSUVYX01BWF9TVEFfTlVNOworCWFkYXB0ZXItPmlmYWNlX2xpbWl0LnVhcF9pbnRmID0gTVdJRklFWF9NQVhfVUFQX05VTTsKKwlhZGFwdGVyLT5pZmFjZV9saW1pdC5wMnBfaW50ZiA9IE1XSUZJRVhfTUFYX1AyUF9OVU07CisKKwlzZXR1cF90aW1lcigmYWRhcHRlci0+d2FrZXVwX3RpbWVyLCB3YWtldXBfdGltZXJfZm4sCisJCSAgICAodW5zaWduZWQgbG9uZylhZGFwdGVyKTsKIH0KIAogLyoKQEAgLTM5MSw3ICs0MTIsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAorCWRlbF90aW1lcigmYWRhcHRlci0+d2FrZXVwX3RpbWVyKTsKIAltd2lmaWV4X2NhbmNlbF9hbGxfcGVuZGluZ19jbWQoYWRhcHRlcik7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZhZGFwdGVyLT5jbWRfd2FpdF9xLndhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYWRhcHRlci0+aHNfYWN0aXZhdGVfd2FpdF9xKTsKIAogCS8qIEZyZWUgbG9jayB2YXJpYWJsZXMgKi8KIAltd2lmaWV4X2ZyZWVfbG9ja19saXN0KGFkYXB0ZXIpOwpAQCAtNDExLDYgKzQzNSwxMSBAQAogCQllbnRyeS0+bWVtX3NpemUgPSAwOwogCX0KIAorCWlmIChhZGFwdGVyLT5kcnZfaW5mb19kdW1wKSB7CisJCXZmcmVlKGFkYXB0ZXItPmRydl9pbmZvX2R1bXApOworCQlhZGFwdGVyLT5kcnZfaW5mb19zaXplID0gMDsKKwl9CisKIAlpZiAoYWRhcHRlci0+c2xlZXBfY2ZtKQogCQlkZXZfa2ZyZWVfc2tiX2FueShhZGFwdGVyLT5zbGVlcF9jZm0pOwogfQpAQCAtNTI4LDcgKzU1Nyw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07IGkrKykgewogCQlpZiAoYWRhcHRlci0+cHJpdltpXSkgewotCQkJcmV0ID0gbXdpZmlleF9zdGFfaW5pdF9jbWQoYWRhcHRlci0+cHJpdltpXSwgZmlyc3Rfc3RhKTsKKwkJCXJldCA9IG13aWZpZXhfc3RhX2luaXRfY21kKGFkYXB0ZXItPnByaXZbaV0sIGZpcnN0X3N0YSwKKwkJCQkJCSAgIHRydWUpOwogCQkJaWYgKHJldCA9PSAtMSkKIAkJCQlyZXR1cm4gLTE7CiAKQEAgLTY1Myw2ICs2ODMsNyBAQAogCQkJcHJpdiA9IGFkYXB0ZXItPnByaXZbaV07CiAKIAkJCW13aWZpZXhfY2xlYW5fYXV0b190ZGxzKHByaXYpOworCQkJbXdpZmlleF9hYm9ydF9jYWMocHJpdik7CiAJCQltd2lmaWV4X2NsZWFuX3R4cngocHJpdik7CiAJCQltd2lmaWV4X2RlbGV0ZV9ic3NfcHJpb190YmwocHJpdik7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvaW9jdGwuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvaW9jdGwuaAppbmRleCAwODQ3ZjNlLi5kMmIwNWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L2lvY3RsLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9pb2N0bC5oCkBAIC0xMzcsNiArMTM3LDggQEAKIAl1MzIgZmNzX2Vycm9yOwogCXUzMiB0eF9mcmFtZTsKIAl1MzIgd2VwX2ljdl9lcnJvcls0XTsKKwl1MzIgYmNuX3Jjdl9jbnQ7CisJdTMyIGJjbl9taXNzX2NudDsKIH07CiAKICNkZWZpbmUgTVdJRklFWF9NQVhfVkVSX1NUUl9MRU4gICAgMTI4CkBAIC0xODAsNyArMTgyLDExIEBACiAJdTggYW1zZHU7CiB9OwogCi0jZGVmaW5lIERCR19DTURfTlVNCTUKKyNkZWZpbmUgREJHX0NNRF9OVU0gICAgNQorCitzdHJ1Y3QgdGRsc19wZWVyX2luZm8geworCXU4IHBlZXJfYWRkcltFVEhfQUxFTl07Cit9OwogCiBzdHJ1Y3QgbXdpZmlleF9kZWJ1Z19pbmZvIHsKIAl1MzIgaW50X2NvdW50ZXI7CkBAIC0xOTMsNiArMTk5LDkgQEAKIAl1MzIgcnhfdGJsX251bTsKIAlzdHJ1Y3QgbXdpZmlleF9kc19yeF9yZW9yZGVyX3RibCByeF90YmwKIAkJW01XSUZJRVhfTUFYX1JYX0JBU1RSRUFNX1NVUFBPUlRFRF07CisJdTMyIHRkbHNfcGVlcl9udW07CisJc3RydWN0IHRkbHNfcGVlcl9pbmZvIHRkbHNfbGlzdAorCQlbTVdJRklFWF9NQVhfVERMU19QRUVSX1NVUFBPUlRFRF07CiAJdTE2IHBzX21vZGU7CiAJdTMyIHBzX3N0YXRlOwogCXU4IGlzX2RlZXBfc2xlZXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvbWFpbi5jCmluZGV4IGQ0ZDIyMjMuLjdlNzRiNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvbWFpbi5jCkBAIC04Myw5ICs4Myw4IEBACiAJfQogCW13aWZpZXhfaW5pdF9sb2NrX2xpc3QoYWRhcHRlcik7CiAKLQlpbml0X3RpbWVyKCZhZGFwdGVyLT5jbWRfdGltZXIpOwotCWFkYXB0ZXItPmNtZF90aW1lci5mdW5jdGlvbiA9IG13aWZpZXhfY21kX3RpbWVvdXRfZnVuYzsKLQlhZGFwdGVyLT5jbWRfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhZGFwdGVyOworCXNldHVwX3RpbWVyKCZhZGFwdGVyLT5jbWRfdGltZXIsIG13aWZpZXhfY21kX3RpbWVvdXRfZnVuYywKKwkJICAgICh1bnNpZ25lZCBsb25nKWFkYXB0ZXIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTIzNyw2ICsyMzYsNyBAQAogCQkgICAgKGlzX2NvbW1hbmRfcGVuZGluZyhhZGFwdGVyKSB8fAogCQkgICAgICFtd2lmaWV4X3dtbV9saXN0c19lbXB0eShhZGFwdGVyKSkpIHsKIAkJCWFkYXB0ZXItPnBtX3dha2V1cF9md190cnkgPSB0cnVlOworCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YWtldXBfdGltZXIsIGppZmZpZXMgKyAoSFoqMykpOwogCQkJYWRhcHRlci0+aWZfb3BzLndha2V1cChhZGFwdGVyKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0yNDQsNiArMjQ0LDcgQEAKIAkJaWYgKElTX0NBUkRfUlhfUkNWRChhZGFwdGVyKSkgewogCQkJYWRhcHRlci0+ZGF0YV9yZWNlaXZlZCA9IGZhbHNlOwogCQkJYWRhcHRlci0+cG1fd2FrZXVwX2Z3X3RyeSA9IGZhbHNlOworCQkJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndha2V1cF90aW1lcik7CiAJCQlpZiAoYWRhcHRlci0+cHNfc3RhdGUgPT0gUFNfU1RBVEVfU0xFRVApCiAJCQkJYWRhcHRlci0+cHNfc3RhdGUgPSBQU19TVEFURV9BV0FLRTsKIAkJfSBlbHNlIHsKQEAgLTUxMSw4ICs1MTIsNyBAQAogCWlmIChhZGFwdGVyLT5pZl9vcHMudW5yZWdpc3Rlcl9kZXYpCiAJCWFkYXB0ZXItPmlmX29wcy51bnJlZ2lzdGVyX2RldihhZGFwdGVyKTsKIAotCWlmICgoYWRhcHRlci0+aHdfc3RhdHVzID09IE1XSUZJRVhfSFdfU1RBVFVTX0ZXX1JFQURZKSB8fAotCSAgICAoYWRhcHRlci0+aHdfc3RhdHVzID09IE1XSUZJRVhfSFdfU1RBVFVTX1JFQURZKSkgeworCWlmIChhZGFwdGVyLT5od19zdGF0dXMgPT0gTVdJRklFWF9IV19TVEFUVVNfUkVBRFkpIHsKIAkJcHJfZGVidWcoImluZm86ICVzOiBzaHV0ZG93biBtd2lmaWV4XG4iLCBfX2Z1bmNfXyk7CiAJCWFkYXB0ZXItPmluaXRfd2FpdF9xX3dva2VuID0gZmFsc2U7CiAKQEAgLTU2Miw3ICs1NjIsOCBAQAogc3RhdGljIGludAogbXdpZmlleF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpOworCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODAxLDYgKzgwMiwxMTQgQEAKIAl9CiB9CiAKK3ZvaWQgbXdpZmlleF9kdW1wX2Rydl9pbmZvKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdm9pZCAqcDsKKwljaGFyIGRydl92ZXJzaW9uWzY0XTsKKwlzdHJ1Y3QgdXNiX2NhcmRfcmVjICpjYXJkcDsKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqc2Rpb19jYXJkOworCXN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXY7CisJaW50IGksIGlkeDsKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CisJc3RydWN0IG13aWZpZXhfZGVidWdfaW5mbyAqZGVidWdfaW5mbzsKKworCWlmIChhZGFwdGVyLT5kcnZfaW5mb19kdW1wKSB7CisJCXZmcmVlKGFkYXB0ZXItPmRydl9pbmZvX2R1bXApOworCQlhZGFwdGVyLT5kcnZfaW5mb19zaXplID0gMDsKKwl9CisKKwlkZXZfaW5mbyhhZGFwdGVyLT5kZXYsICI9PT0gRFJJVkVSIElORk8gRFVNUCBTVEFSVD09PVxuIik7CisKKwlhZGFwdGVyLT5kcnZfaW5mb19kdW1wID0gdnphbGxvYyhNV0lGSUVYX0RSVl9JTkZPX1NJWkVfTUFYKTsKKworCWlmICghYWRhcHRlci0+ZHJ2X2luZm9fZHVtcCkKKwkJcmV0dXJuOworCisJcCA9IChjaGFyICopKGFkYXB0ZXItPmRydl9pbmZvX2R1bXApOworCXAgKz0gc3ByaW50ZihwLCAiZHJpdmVyX25hbWUgPSAiICJcIm13aWZpZXhcIlxuIik7CisKKwltd2lmaWV4X2Rydl9nZXRfZHJpdmVyX3ZlcnNpb24oYWRhcHRlciwgZHJ2X3ZlcnNpb24sCisJCQkJICAgICAgIHNpemVvZihkcnZfdmVyc2lvbikgLSAxKTsKKwlwICs9IHNwcmludGYocCwgImRyaXZlcl92ZXJzaW9uID0gJXNcbiIsIGRydl92ZXJzaW9uKTsKKworCWlmIChhZGFwdGVyLT5pZmFjZV90eXBlID09IE1XSUZJRVhfVVNCKSB7CisJCWNhcmRwID0gKHN0cnVjdCB1c2JfY2FyZF9yZWMgKilhZGFwdGVyLT5jYXJkOworCQlwICs9IHNwcmludGYocCwgInR4X2NtZF91cmJfcGVuZGluZyA9ICVkXG4iLAorCQkJICAgICBhdG9taWNfcmVhZCgmY2FyZHAtPnR4X2NtZF91cmJfcGVuZGluZykpOworCQlwICs9IHNwcmludGYocCwgInR4X2RhdGFfdXJiX3BlbmRpbmcgPSAlZFxuIiwKKwkJCSAgICAgYXRvbWljX3JlYWQoJmNhcmRwLT50eF9kYXRhX3VyYl9wZW5kaW5nKSk7CisJCXAgKz0gc3ByaW50ZihwLCAicnhfY21kX3VyYl9wZW5kaW5nID0gJWRcbiIsCisJCQkgICAgIGF0b21pY19yZWFkKCZjYXJkcC0+cnhfY21kX3VyYl9wZW5kaW5nKSk7CisJCXAgKz0gc3ByaW50ZihwLCAicnhfZGF0YV91cmJfcGVuZGluZyA9ICVkXG4iLAorCQkJICAgICBhdG9taWNfcmVhZCgmY2FyZHAtPnJ4X2RhdGFfdXJiX3BlbmRpbmcpKTsKKwl9CisKKwlwICs9IHNwcmludGYocCwgInR4X3BlbmRpbmcgPSAlZFxuIiwKKwkJICAgICBhdG9taWNfcmVhZCgmYWRhcHRlci0+dHhfcGVuZGluZykpOworCXAgKz0gc3ByaW50ZihwLCAicnhfcGVuZGluZyA9ICVkXG4iLAorCQkgICAgIGF0b21pY19yZWFkKCZhZGFwdGVyLT5yeF9wZW5kaW5nKSk7CisKKwlpZiAoYWRhcHRlci0+aWZhY2VfdHlwZSA9PSBNV0lGSUVYX1NESU8pIHsKKwkJc2Rpb19jYXJkID0gKHN0cnVjdCBzZGlvX21tY19jYXJkICopYWRhcHRlci0+Y2FyZDsKKwkJcCArPSBzcHJpbnRmKHAsICJcbm1wX3JkX2JpdG1hcD0weCV4IGN1cnJfcmRfcG9ydD0weCV4XG4iLAorCQkJICAgICBzZGlvX2NhcmQtPm1wX3JkX2JpdG1hcCwgc2Rpb19jYXJkLT5jdXJyX3JkX3BvcnQpOworCQlwICs9IHNwcmludGYocCwgIm1wX3dyX2JpdG1hcD0weCV4IGN1cnJfd3JfcG9ydD0weCV4XG4iLAorCQkJICAgICBzZGlvX2NhcmQtPm1wX3dyX2JpdG1hcCwgc2Rpb19jYXJkLT5jdXJyX3dyX3BvcnQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5wcml2X251bTsgaSsrKSB7CisJCWlmICghYWRhcHRlci0+cHJpdltpXSB8fCAhYWRhcHRlci0+cHJpdltpXS0+bmV0ZGV2KQorCQkJY29udGludWU7CisJCXByaXYgPSBhZGFwdGVyLT5wcml2W2ldOworCQlwICs9IHNwcmludGYocCwgIlxuW2ludGVyZmFjZSAgOiBcIiVzXCJdXG4iLAorCQkJICAgICBwcml2LT5uZXRkZXYtPm5hbWUpOworCQlwICs9IHNwcmludGYocCwgIndtbV90eF9wZW5kaW5nWzBdID0gJWRcbiIsCisJCQkgICAgIGF0b21pY19yZWFkKCZwcml2LT53bW1fdHhfcGVuZGluZ1swXSkpOworCQlwICs9IHNwcmludGYocCwgIndtbV90eF9wZW5kaW5nWzFdID0gJWRcbiIsCisJCQkgICAgIGF0b21pY19yZWFkKCZwcml2LT53bW1fdHhfcGVuZGluZ1sxXSkpOworCQlwICs9IHNwcmludGYocCwgIndtbV90eF9wZW5kaW5nWzJdID0gJWRcbiIsCisJCQkgICAgIGF0b21pY19yZWFkKCZwcml2LT53bW1fdHhfcGVuZGluZ1syXSkpOworCQlwICs9IHNwcmludGYocCwgIndtbV90eF9wZW5kaW5nWzNdID0gJWRcbiIsCisJCQkgICAgIGF0b21pY19yZWFkKCZwcml2LT53bW1fdHhfcGVuZGluZ1szXSkpOworCQlwICs9IHNwcmludGYocCwgIm1lZGlhX3N0YXRlPVwiJXNcIlxuIiwgIXByaXYtPm1lZGlhX2Nvbm5lY3RlZCA/CisJCQkgICAgICJEaXNjb25uZWN0ZWQiIDogIkNvbm5lY3RlZCIpOworCQlwICs9IHNwcmludGYocCwgImNhcnJpZXIgJXNcbiIsIChuZXRpZl9jYXJyaWVyX29rKHByaXYtPm5ldGRldikKKwkJCSAgICAgPyAib24iIDogIm9mZiIpKTsKKwkJZm9yIChpZHggPSAwOyBpZHggPCBwcml2LT5uZXRkZXYtPm51bV90eF9xdWV1ZXM7IGlkeCsrKSB7CisJCQl0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKHByaXYtPm5ldGRldiwgaWR4KTsKKwkJCXAgKz0gc3ByaW50ZihwLCAidHggcXVldWUgJWQ6JXMgICIsIGlkeCwKKwkJCQkgICAgIG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSA/CisJCQkJICAgICAic3RvcHBlZCIgOiAic3RhcnRlZCIpOworCQl9CisJCXAgKz0gc3ByaW50ZihwLCAiXG4lczogbnVtX3R4X3RpbWVvdXQgPSAlZFxuIiwKKwkJCSAgICAgcHJpdi0+bmV0ZGV2LT5uYW1lLCBwcml2LT5udW1fdHhfdGltZW91dCk7CisJfQorCisJaWYgKGFkYXB0ZXItPmlmYWNlX3R5cGUgPT0gTVdJRklFWF9TRElPKSB7CisJCXAgKz0gc3ByaW50ZihwLCAiXG49PT0gU0RJTyByZWdpc3RlciBEVU1QPT09XG4iKTsKKwkJaWYgKGFkYXB0ZXItPmlmX29wcy5yZWdfZHVtcCkKKwkJCXAgKz0gYWRhcHRlci0+aWZfb3BzLnJlZ19kdW1wKGFkYXB0ZXIsIHApOworCX0KKworCXAgKz0gc3ByaW50ZihwLCAiXG49PT0gTU9SRSBERUJVRyBJTkZPUk1BVElPTlxuIik7CisJZGVidWdfaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCpkZWJ1Z19pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRlYnVnX2luZm8pIHsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspIHsKKwkJCWlmICghYWRhcHRlci0+cHJpdltpXSB8fCAhYWRhcHRlci0+cHJpdltpXS0+bmV0ZGV2KQorCQkJCWNvbnRpbnVlOworCQkJcHJpdiA9IGFkYXB0ZXItPnByaXZbaV07CisJCQltd2lmaWV4X2dldF9kZWJ1Z19pbmZvKHByaXYsIGRlYnVnX2luZm8pOworCQkJcCArPSBtd2lmaWV4X2RlYnVnX2luZm9fdG9fYnVmZmVyKHByaXYsIHAsIGRlYnVnX2luZm8pOworCQkJYnJlYWs7CisJCX0KKwkJa2ZyZWUoZGVidWdfaW5mbyk7CisJfQorCisJYWRhcHRlci0+ZHJ2X2luZm9fc2l6ZSA9IHAgLSBhZGFwdGVyLT5kcnZfaW5mb19kdW1wOworCWRldl9pbmZvKGFkYXB0ZXItPmRldiwgIj09PSBEUklWRVIgSU5GTyBEVU1QIEVORD09PVxuIik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtd2lmaWV4X2R1bXBfZHJ2X2luZm8pOworCiAvKgogICogQ0ZHODAyLjExIG5ldHdvcmsgZGV2aWNlIGhhbmRsZXIgZm9yIHN0YXRpc3RpY3MgcmV0cmlldmFsLgogICovCkBAIC04NDcsMjYgKzk1NiwzNCBAQAogICogICAgICAtIE5pY2sgbmFtZSAgICAgICAgICAgICA6IFNldCB0byBudWxsCiAgKiAgICAgIC0gTnVtYmVyIG9mIFR4IHRpbWVvdXQgIDogU2V0IHRvIDAKICAqICAgICAgLSBEZXZpY2UgYWRkcmVzcyAgICAgICAgOiBTZXQgdG8gY3VycmVudCBhZGRyZXNzCisgKiAgICAgIC0gUnggaGlzdG9ncmFtIHN0YXRpc3RjIDogU2V0IHRvIDAKICAqCiAgKiBJbiBhZGRpdGlvbiwgdGhlIENGRzgwMjExIHdvcmsgcXVldWUgaXMgYWxzbyBjcmVhdGVkLgogICovCiB2b2lkIG13aWZpZXhfaW5pdF9wcml2X3BhcmFtcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAotCQkJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKKwkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJZGV2LT5uZXRkZXZfb3BzID0gJm13aWZpZXhfbmV0ZGV2X29wczsKIAlkZXYtPmRlc3RydWN0b3IgPSBmcmVlX25ldGRldjsKIAkvKiBJbml0aWFsaXplIHByaXZhdGUgc3RydWN0dXJlICovCiAJcHJpdi0+Y3VycmVudF9rZXlfaW5kZXggPSAwOwogCXByaXYtPm1lZGlhX2Nvbm5lY3RlZCA9IGZhbHNlOwotCW1lbXNldCgmcHJpdi0+bmlja19uYW1lLCAwLCBzaXplb2YocHJpdi0+bmlja19uYW1lKSk7CiAJbWVtc2V0KHByaXYtPm1nbXRfaWUsIDAsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgbXdpZmlleF9pZSkgKiBNQVhfTUdNVF9JRV9JTkRFWCk7CiAJcHJpdi0+YmVhY29uX2lkeCA9IE1XSUZJRVhfQVVUT19JRFhfTUFTSzsKIAlwcml2LT5wcm9iZXJlc3BfaWR4ID0gTVdJRklFWF9BVVRPX0lEWF9NQVNLOwogCXByaXYtPmFzc29jcmVzcF9pZHggPSBNV0lGSUVYX0FVVE9fSURYX01BU0s7Ci0JcHJpdi0+cnNuX2lkeCA9IE1XSUZJRVhfQVVUT19JRFhfTUFTSzsKKwlwcml2LT5nZW5faWR4ID0gTVdJRklFWF9BVVRPX0lEWF9NQVNLOwogCXByaXYtPm51bV90eF90aW1lb3V0ID0gMDsKKwlldGhlcl9hZGRyX2NvcHkocHJpdi0+Y3Vycl9hZGRyLCBwcml2LT5hZGFwdGVyLT5wZXJtX2FkZHIpOwogCW1lbWNweShkZXYtPmRldl9hZGRyLCBwcml2LT5jdXJyX2FkZHIsIEVUSF9BTEVOKTsKKworCWlmIChHRVRfQlNTX1JPTEUocHJpdikgPT0gTVdJRklFWF9CU1NfUk9MRV9TVEEgfHwKKwkgICAgR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQKSB7CisJCXByaXYtPmhpc3RfZGF0YSA9IGttYWxsb2Moc2l6ZW9mKCpwcml2LT5oaXN0X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHByaXYtPmhpc3RfZGF0YSkKKwkJCW13aWZpZXhfaGlzdF9kYXRhX3Jlc2V0KHByaXYpOworCX0KIH0KIAogLyoKQEAgLTEwMDAsOCArMTExNyw3IEBACiAJcHJfZGVidWcoImluZm86ICVzOiB1bnJlZ2lzdGVyIGRldmljZVxuIiwgX19mdW5jX18pOwogCWlmIChhZGFwdGVyLT5pZl9vcHMudW5yZWdpc3Rlcl9kZXYpCiAJCWFkYXB0ZXItPmlmX29wcy51bnJlZ2lzdGVyX2RldihhZGFwdGVyKTsKLQlpZiAoKGFkYXB0ZXItPmh3X3N0YXR1cyA9PSBNV0lGSUVYX0hXX1NUQVRVU19GV19SRUFEWSkgfHwKLQkgICAgKGFkYXB0ZXItPmh3X3N0YXR1cyA9PSBNV0lGSUVYX0hXX1NUQVRVU19SRUFEWSkpIHsKKwlpZiAoYWRhcHRlci0+aHdfc3RhdHVzID09IE1XSUZJRVhfSFdfU1RBVFVTX1JFQURZKSB7CiAJCXByX2RlYnVnKCJpbmZvOiAlczogc2h1dGRvd24gbXdpZmlleFxuIiwgX19mdW5jX18pOwogCQlhZGFwdGVyLT5pbml0X3dhaXRfcV93b2tlbiA9IGZhbHNlOwogCkBAIC0xMDUyLDYgKzExNjgsOCBAQAogCiAJYWRhcHRlci0+c3VycHJpc2VfcmVtb3ZlZCA9IHRydWU7CiAKKwltd2lmaWV4X3Rlcm1pbmF0ZV93b3JrcXVldWUoYWRhcHRlcik7CisKIAkvKiBTdG9wIGRhdGEgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+cHJpdl9udW07IGkrKykgewogCQlwcml2ID0gYWRhcHRlci0+cHJpdltpXTsKQEAgLTEwODYsMTYgKzEyMDQsMTUgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXJ0bmxfbG9jaygpOwotCQlpZiAocHJpdi0+d2RldiAmJiBwcml2LT5uZXRkZXYpCi0JCQltd2lmaWV4X2RlbF92aXJ0dWFsX2ludGYoYWRhcHRlci0+d2lwaHksIHByaXYtPndkZXYpOworCQlpZiAocHJpdi0+bmV0ZGV2ICYmCisJCSAgICBwcml2LT53ZGV2LmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkKKwkJCW13aWZpZXhfZGVsX3ZpcnR1YWxfaW50ZihhZGFwdGVyLT53aXBoeSwgJnByaXYtPndkZXYpOwogCQlydG5sX3VubG9jaygpOwogCX0KIAogCXdpcGh5X3VucmVnaXN0ZXIoYWRhcHRlci0+d2lwaHkpOwogCXdpcGh5X2ZyZWUoYWRhcHRlci0+d2lwaHkpOwogCi0JbXdpZmlleF90ZXJtaW5hdGVfd29ya3F1ZXVlKGFkYXB0ZXIpOwotCiAJLyogVW5yZWdpc3RlciBkZXZpY2UgKi8KIAlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IHVucmVnaXN0ZXIgZGV2aWNlXG4iKTsKIAlpZiAoYWRhcHRlci0+aWZfb3BzLnVucmVnaXN0ZXJfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L21haW4uaAppbmRleCBlNjY5OTNjLi5mMGE2YWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L21haW4uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L21haW4uaApAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJmdy5oIgogI2luY2x1ZGUgInBjaWUuaCIKKyNpbmNsdWRlICJ1c2IuaCIKKyNpbmNsdWRlICJzZGlvLmgiCiAKIGV4dGVybiBjb25zdCBjaGFyIGRyaXZlcl92ZXJzaW9uW107CiAKQEAgLTEzNiw2ICsxMzgsOCBAQAogLyogVGhyZXNob2xkIGZvciB0eF90aW1lb3V0X2NudCBiZWZvcmUgd2UgdHJpZ2dlciBhIGNhcmQgcmVzZXQgKi8KICNkZWZpbmUgVFhfVElNRU9VVF9USFJFU0hPTEQJNgogCisjZGVmaW5lIE1XSUZJRVhfRFJWX0lORk9fU0laRV9NQVggMHg0MDAwMAorCiBzdHJ1Y3QgbXdpZmlleF9kYmcgewogCXUzMiBudW1fY21kX2hvc3RfdG9fY2FyZF9mYWlsdXJlOwogCXUzMiBudW1fY21kX3NsZWVwX2NmbV9ob3N0X3RvX2NhcmRfZmFpbHVyZTsKQEAgLTE2MSw3ICsxNjUsNiBAQAogZW51bSBNV0lGSUVYX0hBUkRXQVJFX1NUQVRVUyB7CiAJTVdJRklFWF9IV19TVEFUVVNfUkVBRFksCiAJTVdJRklFWF9IV19TVEFUVVNfSU5JVElBTElaSU5HLAotCU1XSUZJRVhfSFdfU1RBVFVTX0ZXX1JFQURZLAogCU1XSUZJRVhfSFdfU1RBVFVTX0lOSVRfRE9ORSwKIAlNV0lGSUVYX0hXX1NUQVRVU19SRVNFVCwKIAlNV0lGSUVYX0hXX1NUQVRVU19DTE9TSU5HLApAQCAtNDEzLDYgKzQxNiw3IEBACiB9OwogCiAjZGVmaW5lIE1XSUZJRVhfRldfRFVNUF9JRFgJCTB4ZmYKKyNkZWZpbmUgTVdJRklFWF9EUlZfSU5GT19JRFgJCTIwCiAjZGVmaW5lIEZXX0RVTVBfTUFYX05BTUVfTEVOCQk4CiAjZGVmaW5lIEZXX0RVTVBfSE9TVF9SRUFEWQkJMHhFRQogI2RlZmluZSBGV19EVU1QX0RPTkUJCQkweEZGCkBAIC01NDMsMTMgKzU0NywxMiBAQAogCXUzMiBjdXJyX2Jjbl9zaXplOwogCS8qIHNwaW4gbG9jayBmb3IgYmVhY29uIGJ1ZmZlciAqLwogCXNwaW5sb2NrX3QgY3Vycl9iY25fYnVmX2xvY2s7Ci0Jc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2IHdkZXY7CiAJc3RydWN0IG13aWZpZXhfY2hhbl9mcmVxX3Bvd2VyIGNmcDsKIAljaGFyIHZlcnNpb25fc3RyWzEyOF07CiAjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCiAJc3RydWN0IGRlbnRyeSAqZGZzX2Rldl9kaXI7CiAjZW5kaWYKLQl1OCBuaWNrX25hbWVbMTZdOwogCXUxNiBjdXJyZW50X2tleV9pbmRleDsKIAlzdHJ1Y3Qgc2VtYXBob3JlIGFzeW5jX3NlbTsKIAlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcXVlc3Q7CkBAIC01NjQsNyArNTY3LDcgQEAKIAl1MTYgYmVhY29uX2lkeDsKIAl1MTYgcHJvYmVyZXNwX2lkeDsKIAl1MTYgYXNzb2NyZXNwX2lkeDsKLQl1MTYgcnNuX2lkeDsKKwl1MTYgZ2VuX2lkeDsKIAl1OCBhcF8xMW5fZW5hYmxlZDsKIAl1OCBhcF8xMWFjX2VuYWJsZWQ7CiAJdTMyIG1nbXRfZnJhbWVfbWFzazsKQEAgLTU3NCw2ICs1NzcsNyBAQAogCXVuc2lnbmVkIGxvbmcgY3NhX2V4cGlyZV90aW1lOwogCXU4IGRlbF9saXN0X2lkeDsKIAlib29sIGhzMl9lbmFibGVkOworCXN0cnVjdCBtd2lmaWV4X3VhcF9ic3NfcGFyYW0gYnNzX2NmZzsKIAlzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzICpzdGFfcGFyYW1zOwogCXN0cnVjdCBza19idWZmX2hlYWQgdGRsc190eHE7CiAJdTggY2hlY2tfdGRsc190eDsKQEAgLTU4Miw2ICs1ODYsMTYgQEAKIAlzdHJ1Y3QgaWRyIGFja19zdGF0dXNfZnJhbWVzOwogCS8qIHNwaW4gbG9jayBmb3IgYWNrIHN0YXR1cyAqLwogCXNwaW5sb2NrX3QgYWNrX3N0YXR1c19sb2NrOworCS8qKiByeCBoaXN0b2dyYW0gZGF0YSAqLworCXN0cnVjdCBtd2lmaWV4X2hpc3RvZ3JhbV9kYXRhICpoaXN0X2RhdGE7CisJc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIGRmc19jaGFuZGVmOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpkZnNfY2FjX3dvcmtxdWV1ZTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGRmc19jYWNfd29yazsKKwlzdHJ1Y3QgdGltZXJfbGlzdCBkZnNfY2hhbl9zd2l0Y2hfdGltZXI7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRmc19jaGFuX3N3X3dvcmtxdWV1ZTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGRmc19jaGFuX3N3X3dvcms7CisJc3RydWN0IGNmZzgwMjExX2JlYWNvbl9kYXRhIGJlYWNvbl9hZnRlcjsKKwlzdHJ1Y3QgbXdpZmlleF8xMWhfaW50Zl9zdGF0ZSBzdGF0ZV8xMWg7CiB9OwogCiBlbnVtIG13aWZpZXhfYmFfc3RhdHVzIHsKQEAgLTcxNyw2ICs3MzEsNyBAQAogCWludCAoKmRubGRfZncpIChzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICosIHN0cnVjdCBtd2lmaWV4X2Z3X2ltYWdlICopOwogCXZvaWQgKCpjYXJkX3Jlc2V0KSAoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqKTsKIAl2b2lkICgqZndfZHVtcCkoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqKTsKKwlpbnQgKCpyZWdfZHVtcCkoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqLCBjaGFyICopOwogCWludCAoKmNsZWFuX3BjaWVfcmluZykgKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpOwogCXZvaWQgKCppZmFjZV93b3JrKShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogCXZvaWQgKCpzdWJtaXRfcmVtX3J4X3VyYnMpKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKmFkYXB0ZXIpOwpAQCAtNzI0LDYgKzczOSw4IEBACiAKIHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgewogCXU4IGlmYWNlX3R5cGU7CisJc3RydWN0IG13aWZpZXhfaWZhY2VfY29tYiBpZmFjZV9saW1pdDsKKwlzdHJ1Y3QgbXdpZmlleF9pZmFjZV9jb21iIGN1cnJfaWZhY2VfY29tYjsKIAlzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2W01XSUZJRVhfTUFYX0JTU19OVU1dOwogCXU4IHByaXZfbnVtOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7CkBAIC03MzEsNiArNzQ4LDcgQEAKIAlpbnQgd2lubmVyOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3Qgd2lwaHkgKndpcGh5OworCXU4IHBlcm1fYWRkcltFVEhfQUxFTl07CiAJYm9vbCBzdXJwcmlzZV9yZW1vdmVkOwogCXUzMiBmd19yZWxlYXNlX251bWJlcjsKIAl1MTYgaW5pdF93YWl0X3Ffd29rZW47CkBAIC03NDQsNiArNzYyLDggQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbWFpbl93b3JrOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyeF93b3JrcXVldWU7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJ4X3dvcms7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmRmc193b3JrcXVldWU7CisJc3RydWN0IHdvcmtfc3RydWN0IGRmc193b3JrOwogCWJvb2wgcnhfd29ya19lbmFibGVkOwogCWJvb2wgcnhfcHJvY2Vzc2luZzsKIAlib29sIGRlbGF5X21haW5fd29yazsKQEAgLTgyMyw2ICs4NDMsNyBAQAogCXUxNiBnZW5fbnVsbF9wa3Q7CiAJdTE2IHBwc191YXBzZF9tb2RlOwogCXUzMiBwbV93YWtldXBfZndfdHJ5OworCXN0cnVjdCB0aW1lcl9saXN0IHdha2V1cF90aW1lcjsKIAl1OCBpc19oc19jb25maWd1cmVkOwogCXN0cnVjdCBtd2lmaWV4X2hzX2NvbmZpZ19wYXJhbSBoc19jZmc7CiAJdTggaHNfYWN0aXZhdGVkOwpAQCAtODY1LDYgKzg4Niw4IEBACiAJc3RydWN0IG1lbW9yeV90eXBlX21hcHBpbmcgKm1lbV90eXBlX21hcHBpbmdfdGJsOwogCXU4IG51bV9tZW1fdHlwZXM7CiAJdTggY3Vycl9tZW1faWR4OworCXZvaWQgKmRydl9pbmZvX2R1bXA7CisJdTMyIGRydl9pbmZvX3NpemU7CiAJYm9vbCBzY2FuX2NoYW5fZ2FwX2VuYWJsZWQ7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9kYXRhX3E7CiAJc3RydWN0IG13aWZpZXhfY2hhbl9zdGF0cyAqY2hhbl9zdGF0czsKQEAgLTk3OSw3ICsxMDAyLDcgQEAKIAkJCQkgIGNvbnN0IHU4ICpyYV9hZGRyKTsKIHZvaWQgKm13aWZpZXhfcHJvY2Vzc19zdGFfdHhwZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICosIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCAqbXdpZmlleF9wcm9jZXNzX3VhcF90eHBkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgbXdpZmlleF9zdGFfaW5pdF9jbWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqLCB1OCBmaXJzdF9zdGEpOworaW50IG13aWZpZXhfc3RhX2luaXRfY21kKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKiwgdTggZmlyc3Rfc3RhLCBib29sIGluaXQpOwogaW50IG13aWZpZXhfY21kXzgwMl8xMV9zY2FuKHN0cnVjdCBob3N0X2NtZF9kc19jb21tYW5kICpjbWQsCiAJCQkgICAgc3RydWN0IG13aWZpZXhfc2Nhbl9jbWRfY29uZmlnICpzY2FuX2NmZyk7CiB2b2lkIG13aWZpZXhfcXVldWVfc2Nhbl9jbWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKQEAgLTExNDAsNiArMTE2MywyNSBAQAogfQogCiAvKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBhdmFpbGFibGUgdW51c2VkIHByaXZhdGUgc3RydWN0dXJlIHBvaW50ZXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqCittd2lmaWV4X2dldF91bnVzZWRfcHJpdihzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPnByaXZfbnVtOyBpKyspIHsKKwkJaWYgKGFkYXB0ZXItPnByaXZbaV0pIHsKKwkJCWlmIChhZGFwdGVyLT5wcml2W2ldLT5ic3NfbW9kZSA9PQorCQkJICAgIE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQorCQkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuICgoaSA8IGFkYXB0ZXItPnByaXZfbnVtKSA/IGFkYXB0ZXItPnByaXZbaV0gOiBOVUxMKTsKK30KKworLyoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlIG9mIGEgbmV0d29yayBkZXZpY2UuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqCkBAIC0xMjMwLDggKzEyNzIsNiBAQAogCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgZHVyYXRpb24pOwogCi1pbnQgbXdpZmlleF9zZXRfYnNzX3JvbGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggYnNzX3JvbGUpOwotCiBpbnQgbXdpZmlleF9nZXRfc3RhdHNfaW5mbyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAogCQkJICAgc3RydWN0IG13aWZpZXhfZHNfZ2V0X3N0YXRzICpsb2cpOwogCkBAIC0xMjkxLDkgKzEzMzEsMTcgQEAKIAkJCSBzdHJ1Y3QgY2ZnODAyMTFfYmVhY29uX2RhdGEgKmRhdGEpOwogaW50IG13aWZpZXhfZGVsX21nbXRfaWVzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOwogdTggKm13aWZpZXhfMTFkX2NvZGVfMl9yZWdpb24odTggY29kZSk7Cit2b2lkIG13aWZpZXhfdWFwX3NldF9jaGFubmVsKHN0cnVjdCBtd2lmaWV4X3VhcF9ic3NfcGFyYW0gKmJzc19jZmcsCisJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiBjaGFuZGVmKTsKK2ludCBtd2lmaWV4X2NvbmZpZ19zdGFydF91YXAoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICAgc3RydWN0IG13aWZpZXhfdWFwX2Jzc19wYXJhbSAqYnNzX2NmZyk7CiB2b2lkIG13aWZpZXhfdWFwX2RlbF9zdGFfZGF0YShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LAogCQkJICAgICAgc3RydWN0IG13aWZpZXhfc3RhX25vZGUgKm5vZGUpOwogCit2b2lkIG13aWZpZXhfaW5pdF8xMWhfcGFyYW1zKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOworaW50IG13aWZpZXhfaXNfMTFoX2FjdGl2ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KTsKK2ludCBtd2lmaWV4XzExaF9hY3RpdmF0ZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBib29sIGZsYWcpOworCiB2b2lkIG13aWZpZXhfMTFoX3Byb2Nlc3Nfam9pbihzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqKmJ1ZmZlciwKIAkJCSAgICAgIHN0cnVjdCBtd2lmaWV4X2Jzc2Rlc2NyaXB0b3IgKmJzc19kZXNjKTsKIGludCBtd2lmaWV4XzExaF9oYW5kbGVfZXZlbnRfY2hhbnN3YW5uKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOwpAQCAtMTMyNCw2ICsxMzcyLDggQEAKIAkJCQkgICAgICAgdTggKmJ1ZiwgaW50IGxlbik7CiBpbnQgbXdpZmlleF90ZGxzX29wZXIoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgY29uc3QgdTggKnBlZXIsIHU4IGFjdGlvbik7CiBpbnQgbXdpZmlleF9nZXRfdGRsc19saW5rX3N0YXR1cyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCBjb25zdCB1OCAqbWFjKTsKK2ludCBtd2lmaWV4X2dldF90ZGxzX2xpc3Qoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgc3RydWN0IHRkbHNfcGVlcl9pbmZvICpidWYpOwogdm9pZCBtd2lmaWV4X2Rpc2FibGVfYWxsX3RkbHNfbGlua3Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdik7CiBib29sIG13aWZpZXhfaXNfYnNzX2luXzExYWNfbW9kZShzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KTsKIHU4IG13aWZpZXhfZ2V0X2NlbnRlcl9mcmVxX2luZGV4KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4IGJhbmQsCkBAIC0xMzQwLDYgKzEzOTAsMTEgQEAKIHZvaWQgbXdpZmlleF9hZGRfYXV0b190ZGxzX3BlZXIoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgY29uc3QgdTggKm1hYyk7CiB2b2lkIG13aWZpZXhfc2V0dXBfYXV0b190ZGxzX3RpbWVyKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOwogdm9pZCBtd2lmaWV4X2NsZWFuX2F1dG9fdGRscyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KTsKK2ludCBtd2lmaWV4X2NtZF9pc3N1ZV9jaGFuX3JlcG9ydF9yZXF1ZXN0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkJCSAgc3RydWN0IGhvc3RfY21kX2RzX2NvbW1hbmQgKmNtZCwKKwkJCQkJICB2b2lkICpkYXRhX2J1Zik7CitpbnQgbXdpZmlleF8xMWhfaGFuZGxlX2NoYW5ycHRfcmVhZHkoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogCiB2b2lkIG13aWZpZXhfcGFyc2VfdHhfc3RhdHVzX2V2ZW50KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCiAJCQkJICAgdm9pZCAqZXZlbnRfYm9keSk7CkBAIC0xMzQ3LDYgKzE0MDIsMjEgQEAKIHN0cnVjdCBza19idWZmICoKIG13aWZpZXhfY2xvbmVfc2tiX2Zvcl90eF9zdGF0dXMoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBmbGFnLCB1NjQgKmNvb2tpZSk7Cit2b2lkIG13aWZpZXhfZGZzX2NhY193b3JrX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Cit2b2lkIG13aWZpZXhfZGZzX2NoYW5fc3dfd29ya19xdWV1ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCBtd2lmaWV4X2Fib3J0X2NhYyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KTsKK2ludCBtd2lmaWV4XzExaF9oYW5kbGVfcmFkYXJfZGV0ZWN0ZWQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwordm9pZCBtd2lmaWV4X2hpc3RfZGF0YV9zZXQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwgdTggcnhfcmF0ZSwgczggc25yLAorCQkJICAgczggbmZscik7Cit2b2lkIG13aWZpZXhfaGlzdF9kYXRhX3Jlc2V0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYpOwordm9pZCBtd2lmaWV4X2hpc3RfZGF0YV9hZGQoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgIHU4IHJ4X3JhdGUsIHM4IHNuciwgczggbmZscik7Cit1OCBtd2lmaWV4X2FkanVzdF9kYXRhX3JhdGUoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdiwKKwkJCSAgICB1OCByeF9yYXRlLCB1OCBodF9pbmZvKTsKKwordm9pZCBtd2lmaWV4X2R1bXBfZHJ2X2luZm8oc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcik7CiAKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIHZvaWQgbXdpZmlleF9kZWJ1Z2ZzX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3BjaWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvcGNpZS5jCmluZGV4IGMzYTIwZjkuLmE1ODI4ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvcGNpZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvcGNpZS5jCkBAIC0yMDQsNiArMjA0LDcgQEAKIAkJY2FyZC0+cGNpZS5ibGtzel9md19kbCA9IGRhdGEtPmJsa3N6X2Z3X2RsOwogCQljYXJkLT5wY2llLnR4X2J1Zl9zaXplID0gZGF0YS0+dHhfYnVmX3NpemU7CiAJCWNhcmQtPnBjaWUuc3VwcG9ydHNfZndfZHVtcCA9IGRhdGEtPnN1cHBvcnRzX2Z3X2R1bXA7CisJCWNhcmQtPnBjaWUuY2FuX2V4dF9zY2FuID0gZGF0YS0+Y2FuX2V4dF9zY2FuOwogCX0KIAogCWlmIChtd2lmaWV4X2FkZF9jYXJkKGNhcmQsICZhZGRfcmVtb3ZlX2NhcmRfc2VtLCAmcGNpZV9vcHMsCkBAIC0xOTUyLDggKzE5NTMsOCBAQAogCQlvZmZzZXQgKz0gdHhsZW47CiAJfSB3aGlsZSAodHJ1ZSk7CiAKLQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86XG5GVyBkb3dubG9hZCBvdmVyLCBzaXplICVkIGJ5dGVzXG4iLAotCQlvZmZzZXQpOworCWRldl9ub3RpY2UoYWRhcHRlci0+ZGV2LAorCQkgICAiaW5mbzogRlcgZG93bmxvYWQgb3Zlciwgc2l6ZSAlZCBieXRlc1xuIiwgb2Zmc2V0KTsKIAogCXJldCA9IDA7CiAKQEAgLTIwNjQsNiArMjA2NSw3IEBACiAJCQkJICogc3RhdGUgdW50aWwgY29va2llIGlzIHNldCAqLwogCQkJCWFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfQVdBS0U7CiAJCQkJYWRhcHRlci0+cG1fd2FrZXVwX2Z3X3RyeSA9IGZhbHNlOworCQkJCWRlbF90aW1lcigmYWRhcHRlci0+d2FrZXVwX3RpbWVyKTsKIAkJfQogCX0KIH0KQEAgLTI1NjIsNiArMjU2NCw3IEBACiAJYWRhcHRlci0+bWVtX3R5cGVfbWFwcGluZ190YmwgPSBtZW1fdHlwZV9tYXBwaW5nX3RibDsKIAlhZGFwdGVyLT5udW1fbWVtX3R5cGVzID0gQVJSQVlfU0laRShtZW1fdHlwZV9tYXBwaW5nX3RibCk7CiAJc3RyY3B5KGFkYXB0ZXItPmZ3X25hbWUsIGNhcmQtPnBjaWUuZmlybXdhcmUpOworCWFkYXB0ZXItPmV4dF9zY2FuID0gY2FyZC0+cGNpZS5jYW5fZXh0X3NjYW47CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvcGNpZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9wY2llLmgKaW5kZXggMjAwZThiMC4uNjY2ZDQwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9wY2llLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9wY2llLmgKQEAgLTIwNiw2ICsyMDYsNyBAQAogCXUxNiBibGtzel9md19kbDsKIAl1MTYgdHhfYnVmX3NpemU7CiAJYm9vbCBzdXBwb3J0c19md19kdW1wOworCWJvb2wgY2FuX2V4dF9zY2FuOwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtd2lmaWV4X3BjaWVfZGV2aWNlIG13aWZpZXhfcGNpZTg3NjYgPSB7CkBAIC0yMTQsNiArMjE1LDcgQEAKIAkuYmxrc3pfZndfZGwgPSBNV0lGSUVYX1BDSUVfQkxPQ0tfU0laRV9GV19ETkxELAogCS50eF9idWZfc2l6ZSA9IE1XSUZJRVhfVFhfREFUQV9CVUZfU0laRV8ySywKIAkuc3VwcG9ydHNfZndfZHVtcCA9IGZhbHNlLAorCS5jYW5fZXh0X3NjYW4gPSB0cnVlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtd2lmaWV4X3BjaWVfZGV2aWNlIG13aWZpZXhfcGNpZTg4OTcgPSB7CkBAIC0yMjIsNiArMjI0LDcgQEAKIAkuYmxrc3pfZndfZGwgPSBNV0lGSUVYX1BDSUVfQkxPQ0tfU0laRV9GV19ETkxELAogCS50eF9idWZfc2l6ZSA9IE1XSUZJRVhfVFhfREFUQV9CVUZfU0laRV80SywKIAkuc3VwcG9ydHNfZndfZHVtcCA9IHRydWUsCisJLmNhbl9leHRfc2NhbiA9IHRydWUsCiB9OwogCiBzdHJ1Y3QgbXdpZmlleF9ldnRfYnVmX2Rlc2MgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NjYW4uYwppbmRleCA5ODRhN2E0Li4wZmZkYjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NjYW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NjYW4uYwpAQCAtNDk2LDEwICs0OTYsMTAgQEAKIAogCWZvciAoYmFuZCA9IDA7IChiYW5kIDwgSUVFRTgwMjExX05VTV9CQU5EUykgOyBiYW5kKyspIHsKIAotCQlpZiAoIXByaXYtPndkZXYtPndpcGh5LT5iYW5kc1tiYW5kXSkKKwkJaWYgKCFwcml2LT53ZGV2LndpcGh5LT5iYW5kc1tiYW5kXSkKIAkJCWNvbnRpbnVlOwogCi0JCXNiYW5kID0gcHJpdi0+d2Rldi0+d2lwaHktPmJhbmRzW2JhbmRdOworCQlzYmFuZCA9IHByaXYtPndkZXYud2lwaHktPmJhbmRzW2JhbmRdOwogCiAJCWZvciAoaSA9IDA7IChpIDwgc2JhbmQtPm5fY2hhbm5lbHMpIDsgaSsrKSB7CiAJCQljaCA9ICZzYmFuZC0+Y2hhbm5lbHNbaV07CkBAIC0xNDI5LDYgKzE0MjksMTIgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKKwlpZiAoYWRhcHRlci0+c3VycHJpc2VfcmVtb3ZlZCB8fCBhZGFwdGVyLT5pc19jbWRfdGltZWRvdXQpIHsKKwkJZGV2X2VycihhZGFwdGVyLT5kZXYsCisJCQkiSWdub3JlIHNjYW4uIENhcmQgcmVtb3ZlZCBvciBmaXJtd2FyZSBpbiBiYWQgc3RhdGVcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOwogCWFkYXB0ZXItPnNjYW5fcHJvY2Vzc2luZyA9IHRydWU7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+bXdpZmlleF9jbWRfbG9jaywgZmxhZ3MpOwpAQCAtMTcyNywxMCArMTczMywxMCBAQAogCiAJCWZyZXEgPSBjZnAgPyBjZnAtPmZyZXEgOiAwOwogCi0JCWNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwocHJpdi0+d2Rldi0+d2lwaHksIGZyZXEpOworCQljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKHByaXYtPndkZXYud2lwaHksIGZyZXEpOwogCiAJCWlmIChjaGFuICYmICEoY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkpIHsKLQkJCWJzcyA9IGNmZzgwMjExX2luZm9ybV9ic3MocHJpdi0+d2Rldi0+d2lwaHksCisJCQlic3MgPSBjZmc4MDIxMV9pbmZvcm1fYnNzKHByaXYtPndkZXYud2lwaHksCiAJCQkJCSAgICBjaGFuLCBDRkc4MDIxMV9CU1NfRlRZUEVfVU5LTk9XTiwKIAkJCQkJICAgIGJzc2lkLCB0aW1lc3RhbXAsCiAJCQkJCSAgICBjYXBfaW5mb19iaXRtYXAsIGJlYWNvbl9wZXJpb2QsCkBAIC0xNzQyLDcgKzE3NDgsNyBAQAogCQkJICAgICFtZW1jbXAoYnNzaWQsIHByaXYtPmN1cnJfYnNzX3BhcmFtcy5ic3NfZGVzY3JpcHRvcgogCQkJCSAgICAubWFjX2FkZHJlc3MsIEVUSF9BTEVOKSkKIAkJCQltd2lmaWV4X3VwZGF0ZV9jdXJyX2Jzc19wYXJhbXMocHJpdiwgYnNzKTsKLQkJCWNmZzgwMjExX3B1dF9ic3MocHJpdi0+d2Rldi0+d2lwaHksIGJzcyk7CisJCQljZmc4MDIxMV9wdXRfYnNzKHByaXYtPndkZXYud2lwaHksIGJzcyk7CiAJCX0KIAl9IGVsc2UgewogCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgIm1pc3NpbmcgQlNTIGNoYW5uZWwgSUVcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zZGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NkaW8uYwppbmRleCA5MzNkYWUxLi45MWUzNmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NkaW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NkaW8uYwpAQCAtMTA3LDYgKzEwNyw3IEBACiAJCWNhcmQtPm1wX3J4X2FnZ19idWZfc2l6ZSA9IGRhdGEtPm1wX3J4X2FnZ19idWZfc2l6ZTsKIAkJY2FyZC0+c3VwcG9ydHNfZndfZHVtcCA9IGRhdGEtPnN1cHBvcnRzX2Z3X2R1bXA7CiAJCWNhcmQtPmF1dG9fdGRscyA9IGRhdGEtPmF1dG9fdGRsczsKKwkJY2FyZC0+Y2FuX2V4dF9zY2FuID0gZGF0YS0+Y2FuX2V4dF9zY2FuOwogCX0KIAogCXNkaW9fY2xhaW1faG9zdChmdW5jKTsKQEAgLTI4Miw2ICsyODMsOSBAQAogI2RlZmluZSBTRElPX0RFVklDRV9JRF9NQVJWRUxMXzg4OTcgICAoMHg5MTJkKQogLyogRGV2aWNlIElEIGZvciBTRDg4ODcgKi8KICNkZWZpbmUgU0RJT19ERVZJQ0VfSURfTUFSVkVMTF84ODg3ICAgKDB4OTEzNSkKKy8qIERldmljZSBJRCBmb3IgU0Q4ODAxICovCisjZGVmaW5lIFNESU9fREVWSUNFX0lEX01BUlZFTExfODgwMSAgICgweDkxMzkpCisKIAogLyogV0xBTiBJRHMgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgbXdpZmlleF9pZHNbXSA9IHsKQEAgLTI5NSw2ICsyOTksOCBAQAogCQkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykgJm13aWZpZXhfc2Rpb19zZDg4OTd9LAogCXtTRElPX0RFVklDRShTRElPX1ZFTkRPUl9JRF9NQVJWRUxMLCBTRElPX0RFVklDRV9JRF9NQVJWRUxMXzg4ODcpLAogCQkuZHJpdmVyX2RhdGEgPSAodW5zaWduZWQgbG9uZykmbXdpZmlleF9zZGlvX3NkODg4N30sCisJe1NESU9fREVWSUNFKFNESU9fVkVORE9SX0lEX01BUlZFTEwsIFNESU9fREVWSUNFX0lEX01BUlZFTExfODgwMSksCisJCS5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSZtd2lmaWV4X3NkaW9fc2Q4ODAxfSwKIAl7fSwKIH07CiAKQEAgLTk4Niw4ICs5OTIsOCBAQAogCQlvZmZzZXQgKz0gdHhsZW47CiAJfSB3aGlsZSAodHJ1ZSk7CiAKLQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEZXIGRvd25sb2FkIG92ZXIsIHNpemUgJWQgYnl0ZXNcbiIsCi0JCW9mZnNldCk7CisJZGV2X25vdGljZShhZGFwdGVyLT5kZXYsCisJCSAgICJpbmZvOiBGVyBkb3dubG9hZCBvdmVyLCBzaXplICVkIGJ5dGVzXG4iLCBvZmZzZXQpOwogCiAJcmV0ID0gMDsKIGRvbmU6CkBAIC0xODgyLDYgKzE4ODgsNyBAQAogCX0KIAogCWFkYXB0ZXItPmF1dG9fdGRscyA9IGNhcmQtPmF1dG9fdGRsczsKKwlhZGFwdGVyLT5leHRfc2NhbiA9IGNhcmQtPmNhbl9leHRfc2NhbjsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTU4LDggKzE5NjUsOCBAQAogCiAJcHJfZXJyKCJSZXNldHRpbmcgY2FyZC4uLlxuIik7CiAJbW1jX3JlbW92ZV9ob3N0KHRhcmdldCk7Ci0JLyogMjBtcyBkZWxheSBpcyBiYXNlZCBvbiBleHBlcmltZW50IHdpdGggc2RoY2kgY29udHJvbGxlciAqLwotCW1kZWxheSgyMCk7CisJLyogMjAwbXMgZGVsYXkgaXMgYmFzZWQgb24gZXhwZXJpbWVudCB3aXRoIHNkaGNpIGNvbnRyb2xsZXIgKi8KKwltZGVsYXkoMjAwKTsKIAl0YXJnZXQtPnJlc2Nhbl9lbnRlcmVkID0gMDsgLyogcmVzY2FuIG5vbi1yZW1vdmFibGUgY2FyZHMgKi8KIAltbWNfYWRkX2hvc3QodGFyZ2V0KTsKIH0KQEAgLTIwMjMsNiArMjAzMCw4IEBACiAJdTMyIG1lbW9yeV9zaXplOwogCXN0YXRpYyBjaGFyICplbnZbXSA9IHsgIkRSSVZFUj1td2lmaWV4X3NkaW8iLCAiRVZFTlQ9ZndfZHVtcCIsIE5VTEwgfTsKIAorCW13aWZpZXhfZHVtcF9kcnZfaW5mbyhhZGFwdGVyKTsKKwogCWlmICghY2FyZC0+c3VwcG9ydHNfZndfZHVtcCkKIAkJcmV0dXJuOwogCkBAIC0yMTY2LDYgKzIxNzUsOTkgQEAKIAlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5pZmFjZV93b3JrKTsKIH0KIAorLyogRnVuY3Rpb24gdG8gZHVtcCBTRElPIGZ1bmN0aW9uIHJlZ2lzdGVycyBhbmQgU0RJTyBzY3JhdGNoIHJlZ2lzdGVycyBpbiBjYXNlCisgKiBvZiBGVyBjcmFzaAorICovCitzdGF0aWMgaW50Cittd2lmaWV4X3NkaW9fcmVnX2R1bXAoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciwgY2hhciAqZHJ2X2J1ZikKK3sKKwljaGFyICpwID0gZHJ2X2J1ZjsKKwlzdHJ1Y3Qgc2Rpb19tbWNfY2FyZCAqY2FyZHAgPSBhZGFwdGVyLT5jYXJkOworCWludCByZXQgPSAwOworCXU4IGNvdW50LCBmdW5jLCBkYXRhLCBpbmRleCA9IDAsIHNpemUgPSAwOworCXU4IHJlZywgcmVnX3N0YXJ0LCByZWdfZW5kOworCWNoYXIgYnVmWzI1Nl0sICpwdHI7CisKKwlpZiAoIXApCisJCXJldHVybiAwOworCisJZGV2X2luZm8oYWRhcHRlci0+ZGV2LCAiU0RJTyByZWdpc3RlciBEVU1QIFNUQVJUXG4iKTsKKworCW13aWZpZXhfcG1fd2FrZXVwX2NhcmQoYWRhcHRlcik7CisKKwlzZGlvX2NsYWltX2hvc3QoY2FyZHAtPmZ1bmMpOworCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgNTsgY291bnQrKykgeworCQltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJCXB0ciA9IGJ1ZjsKKworCQlzd2l0Y2ggKGNvdW50KSB7CisJCWNhc2UgMDoKKwkJCS8qIFJlYWQgdGhlIHJlZ2lzdGVycyBvZiBTRElPIGZ1bmN0aW9uMCAqLworCQkJZnVuYyA9IGNvdW50OworCQkJcmVnX3N0YXJ0ID0gMDsKKwkJCXJlZ19lbmQgPSA5OworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCS8qIFJlYWQgdGhlIHJlZ2lzdGVycyBvZiBTRElPIGZ1bmN0aW9uMSAqLworCQkJZnVuYyA9IGNvdW50OworCQkJcmVnX3N0YXJ0ID0gY2FyZHAtPnJlZy0+ZnVuYzFfZHVtcF9yZWdfc3RhcnQ7CisJCQlyZWdfZW5kID0gY2FyZHAtPnJlZy0+ZnVuYzFfZHVtcF9yZWdfZW5kOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWluZGV4ID0gMDsKKwkJCWZ1bmMgPSAxOworCQkJcmVnX3N0YXJ0ID0gY2FyZHAtPnJlZy0+ZnVuYzFfc3BlY19yZWdfdGFibGVbaW5kZXgrK107CisJCQlzaXplID0gY2FyZHAtPnJlZy0+ZnVuYzFfc3BlY19yZWdfbnVtOworCQkJcmVnX2VuZCA9IGNhcmRwLT5yZWctPmZ1bmMxX3NwZWNfcmVnX3RhYmxlW3NpemUtMV07CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIFJlYWQgdGhlIHNjcmF0Y2ggcmVnaXN0ZXJzIG9mIFNESU8gZnVuY3Rpb24xICovCisJCQlpZiAoY291bnQgPT0gNCkKKwkJCQltZGVsYXkoMTAwKTsKKwkJCWZ1bmMgPSAxOworCQkJcmVnX3N0YXJ0ID0gY2FyZHAtPnJlZy0+ZnVuYzFfc2NyYXRjaF9yZWc7CisJCQlyZWdfZW5kID0gcmVnX3N0YXJ0ICsgTVdJRklFWF9TRElPX1NDUkFUQ0hfU0laRTsKKwkJfQorCisJCWlmIChjb3VudCAhPSAyKQorCQkJcHRyICs9IHNwcmludGYocHRyLCAiU0RJTyBGdW5jJWQgKCUjeC0lI3gpOiAiLAorCQkJCSAgICAgICBmdW5jLCByZWdfc3RhcnQsIHJlZ19lbmQpOworCQllbHNlCisJCQlwdHIgKz0gc3ByaW50ZihwdHIsICJTRElPIEZ1bmMlZDogIiwgZnVuYyk7CisKKwkJZm9yIChyZWcgPSByZWdfc3RhcnQ7IHJlZyA8PSByZWdfZW5kOykgeworCQkJaWYgKGZ1bmMgPT0gMCkKKwkJCQlkYXRhID0gc2Rpb19mMF9yZWFkYihjYXJkcC0+ZnVuYywgcmVnLCAmcmV0KTsKKwkJCWVsc2UKKwkJCQlkYXRhID0gc2Rpb19yZWFkYihjYXJkcC0+ZnVuYywgcmVnLCAmcmV0KTsKKworCQkJaWYgKGNvdW50ID09IDIpCisJCQkJcHRyICs9IHNwcmludGYocHRyLCAiKCUjeCkgIiwgcmVnKTsKKwkJCWlmICghcmV0KSB7CisJCQkJcHRyICs9IHNwcmludGYocHRyLCAiJTAyeCAiLCBkYXRhKTsKKwkJCX0gZWxzZSB7CisJCQkJcHRyICs9IHNwcmludGYocHRyLCAiRVJSIik7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWlmIChjb3VudCA9PSAyICYmIHJlZyA8IHJlZ19lbmQpCisJCQkJcmVnID0gY2FyZHAtPnJlZy0+ZnVuYzFfc3BlY19yZWdfdGFibGVbaW5kZXgrK107CisJCQllbHNlCisJCQkJcmVnKys7CisJCX0KKworCQlkZXZfaW5mbyhhZGFwdGVyLT5kZXYsICIlc1xuIiwgYnVmKTsKKwkJcCArPSBzcHJpbnRmKHAsICIlc1xuIiwgYnVmKTsKKwl9CisKKwlzZGlvX3JlbGVhc2VfaG9zdChjYXJkcC0+ZnVuYyk7CisKKwlkZXZfaW5mbyhhZGFwdGVyLT5kZXYsICJTRElPIHJlZ2lzdGVyIERVTVAgRU5EXG4iKTsKKworCXJldHVybiBwIC0gZHJ2X2J1ZjsKK30KKwogc3RhdGljIHN0cnVjdCBtd2lmaWV4X2lmX29wcyBzZGlvX29wcyA9IHsKIAkuaW5pdF9pZiA9IG13aWZpZXhfaW5pdF9zZGlvLAogCS5jbGVhbnVwX2lmID0gbXdpZmlleF9jbGVhbnVwX3NkaW8sCkBAIC0yMTg4LDYgKzIyOTAsNyBAQAogCS5jYXJkX3Jlc2V0ID0gbXdpZmlleF9zZGlvX2NhcmRfcmVzZXQsCiAJLmlmYWNlX3dvcmsgPSBtd2lmaWV4X3NkaW9fd29yaywKIAkuZndfZHVtcCA9IG13aWZpZXhfc2Rpb19md19kdW1wLAorCS5yZWdfZHVtcCA9IG13aWZpZXhfc2Rpb19yZWdfZHVtcCwKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc2Rpby5oCmluZGV4IDU0YzA3MTUuLjk1N2NjYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc2Rpby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc2Rpby5oCkBAIC0zNCw2ICszNCw3IEBACiAjZGVmaW5lIFNEODc5N19ERUZBVUxUX0ZXX05BTUUgIm1ydmwvc2Q4Nzk3X3VhcHN0YS5iaW4iCiAjZGVmaW5lIFNEODg5N19ERUZBVUxUX0ZXX05BTUUgIm1ydmwvc2Q4ODk3X3VhcHN0YS5iaW4iCiAjZGVmaW5lIFNEODg4N19ERUZBVUxUX0ZXX05BTUUgIm1ydmwvc2Q4ODg3X3VhcHN0YS5iaW4iCisjZGVmaW5lIFNEODgwMV9ERUZBVUxUX0ZXX05BTUUgIm1ydmwvc2Q4ODAxX3VhcHN0YS5iaW4iCiAKICNkZWZpbmUgQkxPQ0tfTU9ERQkxCiAjZGVmaW5lIEJZVEVfTU9ERQkwCkBAIC00NCw2ICs0NSw5IEBACiAKICNkZWZpbmUgTVdJRklFWF9TRElPX0JZVEVfTU9ERV9NQVNLCTB4ODAwMDAwMDAKIAorI2RlZmluZSBNV0lGSUVYX01BWF9GVU5DMl9SRUdfTlVNCTEzCisjZGVmaW5lIE1XSUZJRVhfU0RJT19TQ1JBVENIX1NJWkUJMTAKKwogI2RlZmluZSBTRElPX01QQV9BRERSX0JBU0UJCTB4MTAwMAogI2RlZmluZSBDVFJMX1BPUlQJCQkwCiAjZGVmaW5lIENUUkxfUE9SVF9NQVNLCQkJMHgwMDAxCkBAIC0yMTksNiArMjIzLDExIEBACiAJdTggZndfZHVtcF9jdHJsOwogCXU4IGZ3X2R1bXBfc3RhcnQ7CiAJdTggZndfZHVtcF9lbmQ7CisJdTggZnVuYzFfZHVtcF9yZWdfc3RhcnQ7CisJdTggZnVuYzFfZHVtcF9yZWdfZW5kOworCXU4IGZ1bmMxX3NjcmF0Y2hfcmVnOworCXU4IGZ1bmMxX3NwZWNfcmVnX251bTsKKwl1OCBmdW5jMV9zcGVjX3JlZ190YWJsZVtNV0lGSUVYX01BWF9GVU5DMl9SRUdfTlVNXTsKIH07CiAKIHN0cnVjdCBzZGlvX21tY19jYXJkIHsKQEAgLTI0Nyw2ICsyNTYsNyBAQAogCiAJdTggKm1wX3JlZ3M7CiAJdTggYXV0b190ZGxzOworCWJvb2wgY2FuX2V4dF9zY2FuOwogCiAJc3RydWN0IG13aWZpZXhfc2Rpb19tcGFfdHggbXBhX3R4OwogCXN0cnVjdCBtd2lmaWV4X3NkaW9fbXBhX3J4IG1wYV9yeDsKQEAgLTI2NCw2ICsyNzQsNyBAQAogCXUzMiBtcF90eF9hZ2dfYnVmX3NpemU7CiAJdTMyIG1wX3J4X2FnZ19idWZfc2l6ZTsKIAl1OCBhdXRvX3RkbHM7CisJYm9vbCBjYW5fZXh0X3NjYW47CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG13aWZpZXhfc2Rpb19jYXJkX3JlZyBtd2lmaWV4X3JlZ19zZDg3eHggPSB7CkBAIC0yOTEsNiArMzAyLDExIEBACiAJLnJkX2xlbl9wMF9sID0gMHgwOCwKIAkucmRfbGVuX3AwX3UgPSAweDA5LAogCS5jYXJkX21pc2NfY2ZnX3JlZyA9IDB4NmMsCisJLmZ1bmMxX2R1bXBfcmVnX3N0YXJ0ID0gMHgwLAorCS5mdW5jMV9kdW1wX3JlZ19lbmQgPSAweDksCisJLmZ1bmMxX3NjcmF0Y2hfcmVnID0gMHg2MCwKKwkuZnVuYzFfc3BlY19yZWdfbnVtID0gNSwKKwkuZnVuYzFfc3BlY19yZWdfdGFibGUgPSB7MHgyOCwgMHgzMCwgMHgzNCwgMHgzOCwgMHgzY30sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG13aWZpZXhfc2Rpb19jYXJkX3JlZyBtd2lmaWV4X3JlZ19zZDg4OTcgPSB7CkBAIC0zMzUsNiArMzUxLDEyIEBACiAJLmZ3X2R1bXBfY3RybCA9IDB4ZTIsCiAJLmZ3X2R1bXBfc3RhcnQgPSAweGUzLAogCS5md19kdW1wX2VuZCA9IDB4ZWEsCisJLmZ1bmMxX2R1bXBfcmVnX3N0YXJ0ID0gMHgwLAorCS5mdW5jMV9kdW1wX3JlZ19lbmQgPSAweGIsCisJLmZ1bmMxX3NjcmF0Y2hfcmVnID0gMHhjMCwKKwkuZnVuYzFfc3BlY19yZWdfbnVtID0gOCwKKwkuZnVuYzFfc3BlY19yZWdfdGFibGUgPSB7MHg0QywgMHg1MCwgMHg1NCwgMHg1NSwgMHg1OCwKKwkJCQkgMHg1OSwgMHg1YywgMHg1ZH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG13aWZpZXhfc2Rpb19jYXJkX3JlZyBtd2lmaWV4X3JlZ19zZDg4ODcgPSB7CkBAIC0zNzYsNiArMzk4LDEzIEBACiAJLmNtZF9jZmdfMSA9IDB4YzUsCiAJLmNtZF9jZmdfMiA9IDB4YzYsCiAJLmNtZF9jZmdfMyA9IDB4YzcsCisJLmZ1bmMxX2R1bXBfcmVnX3N0YXJ0ID0gMHgxMCwKKwkuZnVuYzFfZHVtcF9yZWdfZW5kID0gMHgxNywKKwkuZnVuYzFfc2NyYXRjaF9yZWcgPSAweDkwLAorCS5mdW5jMV9zcGVjX3JlZ19udW0gPSAxMywKKwkuZnVuYzFfc3BlY19yZWdfdGFibGUgPSB7MHgwOCwgMHg1OCwgMHg1QywgMHg1RCwgMHg2MCwKKwkJCQkgMHg2MSwgMHg2MiwgMHg2NCwgMHg2NSwgMHg2NiwKKwkJCQkgMHg2OCwgMHg2OSwgMHg2YX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG13aWZpZXhfc2Rpb19kZXZpY2UgbXdpZmlleF9zZGlvX3NkODc4NiA9IHsKQEAgLTM5MCw2ICs0MTksNyBAQAogCS5tcF9yeF9hZ2dfYnVmX3NpemUgPSBNV0lGSUVYX01QX0FHR1JfQlVGX1NJWkVfMTZLLAogCS5zdXBwb3J0c19md19kdW1wID0gZmFsc2UsCiAJLmF1dG9fdGRscyA9IGZhbHNlLAorCS5jYW5fZXh0X3NjYW4gPSBmYWxzZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXdpZmlleF9zZGlvX2RldmljZSBtd2lmaWV4X3NkaW9fc2Q4Nzg3ID0gewpAQCAtNDA0LDYgKzQzNCw3IEBACiAJLm1wX3J4X2FnZ19idWZfc2l6ZSA9IE1XSUZJRVhfTVBfQUdHUl9CVUZfU0laRV8xNkssCiAJLnN1cHBvcnRzX2Z3X2R1bXAgPSBmYWxzZSwKIAkuYXV0b190ZGxzID0gZmFsc2UsCisJLmNhbl9leHRfc2NhbiA9IHRydWUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG13aWZpZXhfc2Rpb19kZXZpY2UgbXdpZmlleF9zZGlvX3NkODc5NyA9IHsKQEAgLTQxOCw2ICs0NDksNyBAQAogCS5tcF9yeF9hZ2dfYnVmX3NpemUgPSBNV0lGSUVYX01QX0FHR1JfQlVGX1NJWkVfMTZLLAogCS5zdXBwb3J0c19md19kdW1wID0gZmFsc2UsCiAJLmF1dG9fdGRscyA9IGZhbHNlLAorCS5jYW5fZXh0X3NjYW4gPSB0cnVlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtd2lmaWV4X3NkaW9fZGV2aWNlIG13aWZpZXhfc2Rpb19zZDg4OTcgPSB7CkBAIC00MzIsNiArNDY0LDcgQEAKIAkubXBfcnhfYWdnX2J1Zl9zaXplID0gTVdJRklFWF9NUF9BR0dSX0JVRl9TSVpFXzMySywKIAkuc3VwcG9ydHNfZndfZHVtcCA9IHRydWUsCiAJLmF1dG9fdGRscyA9IGZhbHNlLAorCS5jYW5fZXh0X3NjYW4gPSB0cnVlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBtd2lmaWV4X3NkaW9fZGV2aWNlIG13aWZpZXhfc2Rpb19zZDg4ODcgPSB7CkBAIC00NDYsNiArNDc5LDIyIEBACiAJLm1wX3J4X2FnZ19idWZfc2l6ZSA9IE1XSUZJRVhfTVBfQUdHUl9CVUZfU0laRV8zMkssCiAJLnN1cHBvcnRzX2Z3X2R1bXAgPSBmYWxzZSwKIAkuYXV0b190ZGxzID0gdHJ1ZSwKKwkuY2FuX2V4dF9zY2FuID0gdHJ1ZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXdpZmlleF9zZGlvX2RldmljZSBtd2lmaWV4X3NkaW9fc2Q4ODAxID0geworCS5maXJtd2FyZSA9IFNEODgwMV9ERUZBVUxUX0ZXX05BTUUsCisJLnJlZyA9ICZtd2lmaWV4X3JlZ19zZDg3eHgsCisJLm1heF9wb3J0cyA9IDE2LAorCS5tcF9hZ2dfcGt0X2xpbWl0ID0gOCwKKwkuc3VwcG9ydHNfc2Rpb19uZXdfbW9kZSA9IGZhbHNlLAorCS5oYXNfY29udHJvbF9tYXNrID0gdHJ1ZSwKKwkudHhfYnVmX3NpemUgPSBNV0lGSUVYX1RYX0RBVEFfQlVGX1NJWkVfMkssCisJLm1wX3R4X2FnZ19idWZfc2l6ZSA9IE1XSUZJRVhfTVBfQUdHUl9CVUZfU0laRV8xNkssCisJLm1wX3J4X2FnZ19idWZfc2l6ZSA9IE1XSUZJRVhfTVBfQUdHUl9CVUZfU0laRV8xNkssCisJLnN1cHBvcnRzX2Z3X2R1bXAgPSBmYWxzZSwKKwkuYXV0b190ZGxzID0gZmFsc2UsCisJLmNhbl9leHRfc2NhbiA9IHRydWUsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9jbWQuYwppbmRleCAxYzJjYTI5Li5mN2QyMDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9jbWQuYwpAQCAtMjYsNiArMjYsMTAgQEAKICNpbmNsdWRlICIxMW4uaCIKICNpbmNsdWRlICIxMWFjLmgiCiAKK3N0YXRpYyBib29sIGRpc2FibGVfYXV0b19kczsKK21vZHVsZV9wYXJhbShkaXNhYmxlX2F1dG9fZHMsIGJvb2wsIDApOworTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2F1dG9fZHMsCisJCSAiZGVlcHNsZWVwIGVuYWJsZWQ9MChkZWZhdWx0KSwgZGVlcHNsZWVwIGRpc2FibGVkPTEiKTsKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIHByZXBhcmVzIGNvbW1hbmQgdG8gc2V0L2dldCBSU1NJIGluZm9ybWF0aW9uLgogICoKQEAgLTE4OTMsNiArMTg5NywxMCBAQAogCWNhc2UgSG9zdENtZF9DTURfVERMU19PUEVSOgogCQlyZXQgPSBtd2lmaWV4X2NtZF90ZGxzX29wZXIocHJpdiwgY21kX3B0ciwgZGF0YV9idWYpOwogCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX0NIQU5fUkVQT1JUX1JFUVVFU1Q6CisJCXJldCA9IG13aWZpZXhfY21kX2lzc3VlX2NoYW5fcmVwb3J0X3JlcXVlc3QocHJpdiwgY21kX3B0ciwKKwkJCQkJCQkgICAgZGF0YV9idWYpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwKIAkJCSJQUkVQX0NNRDogdW5rbm93biBjbWQtICUjeFxuIiwgY21kX25vKTsKQEAgLTE5MDcsNiArMTkxNSw4IEBACiAgKgogICogVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgZmlybXdhcmUgZG93bmxvYWQgdG8gYnJpbmcgdGhlIGNhcmQgdG8KICAqIHdvcmtpbmcgc3RhdGUuCisgKiBGdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCBkdXJpbmcgcmVpbml0aWFsaXphdGlvbiBvZiB2aXJ0dWFsCisgKiBpbnRlcmZhY2VzLgogICoKICAqIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgYXJlIGlzc3VlZCBzZXF1ZW50aWFsbHkgLQogICogICAgICAtIFNldCBQQ0ktRXhwcmVzcyBob3N0IGJ1ZmZlciBjb25maWd1cmF0aW9uIChQQ0lFIG9ubHkpCkBAIC0xOTIxLDcgKzE5MzEsNyBAQAogICogICAgICAtIFNldCAxMWQgY29udHJvbAogICogICAgICAtIFNldCBNQUMgY29udHJvbCAodGhpcyBtdXN0IGJlIHRoZSBsYXN0IGNvbW1hbmQgdG8gaW5pdGlhbGl6ZSBmaXJtd2FyZSkKICAqLwotaW50IG13aWZpZXhfc3RhX2luaXRfY21kKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4IGZpcnN0X3N0YSkKK2ludCBtd2lmaWV4X3N0YV9pbml0X2NtZChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCBmaXJzdF9zdGEsIGJvb2wgaW5pdCkKIHsKIAlzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyID0gcHJpdi0+YWRhcHRlcjsKIAlpbnQgcmV0OwpAQCAtMjAzMSw3ICsyMDQxLDggQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gLTE7CiAKLQlpZiAoZmlyc3Rfc3RhICYmIHByaXYtPmFkYXB0ZXItPmlmYWNlX3R5cGUgIT0gTVdJRklFWF9VU0IgJiYKKwlpZiAoIWRpc2FibGVfYXV0b19kcyAmJgorCSAgICBmaXJzdF9zdGEgJiYgcHJpdi0+YWRhcHRlci0+aWZhY2VfdHlwZSAhPSBNV0lGSUVYX1VTQiAmJgogCSAgICBwcml2LT5ic3NfdHlwZSAhPSBNV0lGSUVYX0JTU19UWVBFX1VBUCkgewogCQkvKiBFbmFibGUgYXV0byBkZWVwIHNsZWVwICovCiAJCWF1dG9fZHMuYXV0b19kcyA9IERFRVBfU0xFRVBfT047CkBAIC0yMDU0LDkgKzIwNjUsNiBAQAogCQkJCSIxMUQ6IGZhaWxlZCB0byBlbmFibGUgMTFEXG4iKTsKIAl9CiAKLQkvKiBzZXQgbGFzdF9pbml0X2NtZCBiZWZvcmUgc2VuZGluZyB0aGUgY29tbWFuZCAqLwotCXByaXYtPmFkYXB0ZXItPmxhc3RfaW5pdF9jbWQgPSBIb3N0Q21kX0NNRF8xMU5fQ0ZHOwotCiAJLyogU2VuZCBjbWQgdG8gRlcgdG8gY29uZmlndXJlIDExbiBzcGVjaWZpYyBjb25maWd1cmF0aW9uCiAJICogKFNob3J0IEdJLCBDaGFubmVsIEJXLCBHcmVlbiBmaWVsZCBzdXBwb3J0IGV0Yy4pIGZvciB0cmFuc21pdAogCSAqLwpAQCAtMjA2NCw3ICsyMDcyLDExIEBACiAJcmV0ID0gbXdpZmlleF9zZW5kX2NtZChwcml2LCBIb3N0Q21kX0NNRF8xMU5fQ0ZHLAogCQkJICAgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsICZ0eF9jZmcsIHRydWUpOwogCi0JcmV0ID0gLUVJTlBST0dSRVNTOworCWlmIChpbml0KSB7CisJCS8qIHNldCBsYXN0X2luaXRfY21kIGJlZm9yZSBzZW5kaW5nIHRoZSBjb21tYW5kICovCisJCXByaXYtPmFkYXB0ZXItPmxhc3RfaW5pdF9jbWQgPSBIb3N0Q21kX0NNRF8xMU5fQ0ZHOworCQlyZXQgPSAtRUlOUFJPR1JFU1M7CisJfQogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX2NtZHJlc3AuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX2NtZHJlc3AuYwppbmRleCBiNjVlMTAxLi41ZjhkYTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9jbWRyZXNwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfY21kcmVzcC5jCkBAIC0yNDgsNiArMjQ4LDggQEAKIAkJCWxlMzJfdG9fY3B1KGdldF9sb2ctPndlcF9pY3ZfZXJyX2NudFsyXSk7CiAJCXN0YXRzLT53ZXBfaWN2X2Vycm9yWzNdID0KIAkJCWxlMzJfdG9fY3B1KGdldF9sb2ctPndlcF9pY3ZfZXJyX2NudFszXSk7CisJCXN0YXRzLT5iY25fcmN2X2NudCA9IGxlMzJfdG9fY3B1KGdldF9sb2ctPmJjbl9yY3ZfY250KTsKKwkJc3RhdHMtPmJjbl9taXNzX2NudCA9IGxlMzJfdG9fY3B1KGdldF9sb2ctPmJjbl9taXNzX2NudCk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMTAzLDYgKzExMDUsOSBAQAogCWNhc2UgSG9zdENtZF9DTURfVUFQX1NZU19DT05GSUc6CiAJCWJyZWFrOwogCWNhc2UgSG9zdENtZF9DTURfVUFQX0JTU19TVEFSVDoKKwkJYWRhcHRlci0+dHhfbG9ja19mbGFnID0gZmFsc2U7CisJCWFkYXB0ZXItPnBwc191YXBzZF9tb2RlID0gZmFsc2U7CisJCWFkYXB0ZXItPmRlbGF5X251bGxfcGt0ID0gZmFsc2U7CiAJCXByaXYtPmJzc19zdGFydGVkID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBIb3N0Q21kX0NNRF9VQVBfQlNTX1NUT1A6CkBAIC0xMTE3LDYgKzExMjIsOCBAQAogCWNhc2UgSG9zdENtZF9DTURfVERMU19PUEVSOgogCQlyZXQgPSBtd2lmaWV4X3JldF90ZGxzX29wZXIocHJpdiwgcmVzcCk7CiAJCWJyZWFrOworCWNhc2UgSG9zdENtZF9DTURfQ0hBTl9SRVBPUlRfUkVRVUVTVDoKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZGV2X2VycihhZGFwdGVyLT5kZXYsICJDTURfUkVTUDogdW5rbm93biBjbWQgcmVzcG9uc2UgJSN4XG4iLAogCQkJcmVzcC0+Y29tbWFuZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9ldmVudC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfZXZlbnQuYwppbmRleCBiOGMxNzFkLi44MGZmZTc0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfZXZlbnQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9ldmVudC5jCkBAIC05MCw2ICs5MCwxMCBAQAogCXByaXYtPmlzX2RhdGFfcmF0ZV9hdXRvID0gdHJ1ZTsKIAlwcml2LT5kYXRhX3JhdGUgPSAwOwogCisJaWYgKChHRVRfQlNTX1JPTEUocHJpdikgPT0gTVdJRklFWF9CU1NfUk9MRV9TVEEgfHwKKwkgICAgIEdFVF9CU1NfUk9MRShwcml2KSA9PSBNV0lGSUVYX0JTU19ST0xFX1VBUCkgJiYgcHJpdi0+aGlzdF9kYXRhKQorCQltd2lmaWV4X2hpc3RfZGF0YV9yZXNldChwcml2KTsKKwogCWlmIChwcml2LT5ic3NfbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgewogCQlwcml2LT5hZGhvY19zdGF0ZSA9IEFESE9DX0lETEU7CiAJCXByaXYtPmFkaG9jX2lzX2xpbmtfc2Vuc2VkID0gZmFsc2U7CkBAIC0zMDgsNiArMzEyLDcgQEAKIAkJCQkJYWRhcHRlci0+cHNfc3RhdGUgPSBQU19TVEFURV9BV0FLRTsKIAkJCQkJYWRhcHRlci0+cG1fd2FrZXVwX2NhcmRfcmVxID0gZmFsc2U7CiAJCQkJCWFkYXB0ZXItPnBtX3dha2V1cF9md190cnkgPSBmYWxzZTsKKwkJCQkJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndha2V1cF90aW1lcik7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCQlpZiAoIW13aWZpZXhfc2VuZF9udWxsX3BhY2tldApAQCAtMzIyLDYgKzMyNyw3IEBACiAJCWFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfQVdBS0U7CiAJCWFkYXB0ZXItPnBtX3dha2V1cF9jYXJkX3JlcSA9IGZhbHNlOwogCQlhZGFwdGVyLT5wbV93YWtldXBfZndfdHJ5ID0gZmFsc2U7CisJCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT53YWtldXBfdGltZXIpOwogCiAJCWJyZWFrOwogCkBAIC00ODAsNyArNDg2LDcgQEAKIAogCWNhc2UgRVZFTlRfUkVNQUlOX09OX0NIQU5fRVhQSVJFRDoKIAkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogUmVtYWluIG9uIGNoYW5uZWwgZXhwaXJlZFxuIik7Ci0JCWNmZzgwMjExX3JlbWFpbl9vbl9jaGFubmVsX2V4cGlyZWQocHJpdi0+d2RldiwKKwkJY2ZnODAyMTFfcmVtYWluX29uX2NoYW5uZWxfZXhwaXJlZCgmcHJpdi0+d2RldiwKIAkJCQkJCSAgIHByaXYtPnJvY19jZmcuY29va2llLAogCQkJCQkJICAgJnByaXYtPnJvY19jZmcuY2hhbiwKIAkJCQkJCSAgIEdGUF9BVE9NSUMpOwpAQCAtNTA5LDYgKzUxNSwxNiBAQAogCQltd2lmaWV4X3BhcnNlX3R4X3N0YXR1c19ldmVudChwcml2LCBhZGFwdGVyLT5ldmVudF9ib2R5KTsKIAkJYnJlYWs7CiAKKwljYXNlIEVWRU5UX0NIQU5ORUxfUkVQT1JUX1JEWToKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogQ2hhbm5lbCBSZXBvcnRcbiIpOworCQlyZXQgPSBtd2lmaWV4XzExaF9oYW5kbGVfY2hhbnJwdF9yZWFkeShwcml2LAorCQkJCQkJICAgICAgIGFkYXB0ZXItPmV2ZW50X3NrYik7CisJCWJyZWFrOworCWNhc2UgRVZFTlRfUkFEQVJfREVURUNURUQ6CisJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IFJhZGFyIGRldGVjdGVkXG4iKTsKKwkJcmV0ID0gbXdpZmlleF8xMWhfaGFuZGxlX3JhZGFyX2RldGVjdGVkKHByaXYsCisJCQkJCQkJYWRhcHRlci0+ZXZlbnRfc2tiKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogdW5rbm93biBldmVudCBpZDogJSN4XG4iLAogCQkJZXZlbnRjYXVzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9pb2N0bC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfaW9jdGwuYwppbmRleCAxNjI2ODY4Li4wNTk5ZTQxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfaW9jdGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9pb2N0bC5jCkBAIC0yMTksNyArMjE5LDcgQEAKIAogCWlmICghc3RybmNtcChwcml2LT5hZGFwdGVyLT5jb3VudHJ5X2NvZGUsICZjb3VudHJ5X2llWzJdLCAyKSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJd2lwaHlfZGJnKHByaXYtPndkZXYtPndpcGh5LAorCQl3aXBoeV9kYmcocHJpdi0+d2Rldi53aXBoeSwKIAkJCSAgIjExRDogc2tpcCBzZXR0aW5nIGRvbWFpbiBpbmZvIGluIEZXXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtOTAyLDkgKzkwMiwxMiBAQAogCWlmICh3ZXBfa2V5LT5rZXlfbGVuZ3RoKSB7CiAJCXZvaWQgKmVuY19rZXk7CiAKLQkJaWYgKGVuY3J5cHRfa2V5LT5rZXlfZGlzYWJsZSkKKwkJaWYgKGVuY3J5cHRfa2V5LT5rZXlfZGlzYWJsZSkgewogCQkJbWVtc2V0KCZwcml2LT53ZXBfa2V5W2luZGV4XSwgMCwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IG13aWZpZXhfd2VwX2tleSkpOworCQkJaWYgKHdlcF9rZXktPmtleV9sZW5ndGgpCisJCQkJZ290byBkb25lOworCQkJfQogCiAJCWlmIChhZGFwdGVyLT5rZXlfYXBpX21ham9yX3ZlciA9PSBLRVlfQVBJX1ZFUl9NQUpPUl9WMikKIAkJCWVuY19rZXkgPSBlbmNyeXB0X2tleTsKQEAgLTkxOCw2ICs5MjEsNyBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKK2RvbmU6CiAJaWYgKHByaXYtPnNlY19pbmZvLndlcF9lbmFibGVkKQogCQlwcml2LT5jdXJyX3BrdF9maWx0ZXIgfD0gSG9zdENtZF9BQ1RfTUFDX1dFUF9FTkFCTEU7CiAJZWxzZQpAQCAtMTEzMSwzNiArMTEzNSw2IEBACiAJcmV0dXJuIHJvY19jZmcuc3RhdHVzOwogfQogCi1pbnQKLW13aWZpZXhfc2V0X2Jzc19yb2xlKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIHU4IGJzc19yb2xlKQotewotCWlmIChHRVRfQlNTX1JPTEUocHJpdikgPT0gYnNzX3JvbGUpIHsKLQkJZGV2X2RiZyhwcml2LT5hZGFwdGVyLT5kZXYsCi0JCQkiaW5mbzogYWxyZWFkeSBpbiB0aGUgZGVzaXJlZCByb2xlLlxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCW13aWZpZXhfZnJlZV9wcml2KHByaXYpOwotCW13aWZpZXhfaW5pdF9wcml2KHByaXYpOwotCi0JcHJpdi0+YnNzX3JvbGUgPSBic3Nfcm9sZTsKLQlzd2l0Y2ggKGJzc19yb2xlKSB7Ci0JY2FzZSBNV0lGSUVYX0JTU19ST0xFX1VBUDoKLQkJcHJpdi0+YnNzX21vZGUgPSBOTDgwMjExX0lGVFlQRV9BUDsKLQkJYnJlYWs7Ci0JY2FzZSBNV0lGSUVYX0JTU19ST0xFX1NUQToKLQljYXNlIE1XSUZJRVhfQlNTX1JPTEVfQU5ZOgotCWRlZmF1bHQ6Ci0JCXByaXYtPmJzc19tb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKLQkJYnJlYWs7Ci0JfQotCi0JbXdpZmlleF9zZW5kX2NtZChwcml2LCBIb3N0Q21kX0NNRF9TRVRfQlNTX01PREUsCi0JCQkgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgTlVMTCwgdHJ1ZSk7Ci0KLQlyZXR1cm4gbXdpZmlleF9zdGFfaW5pdF9jbWQocHJpdiwgZmFsc2UpOwotfQotCiAvKgogICogU2VuZHMgSU9DVEwgcmVxdWVzdCB0byBnZXQgc3RhdGlzdGljcyBpbmZvcm1hdGlvbi4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfcnguYwppbmRleCBjMmFkM2I2Li5iODcyOWM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX3J4LmMKQEAgLTkwLDYgKzkwLDcgQEAKIAlzdHJ1Y3QgZXRoaGRyICpldGg7CiAJdTE2IHJ4X3BrdF9vZmYsIHJ4X3BrdF9sZW47CiAJdTggKm9mZnNldDsKKwl1OCBhZGpfcnhfcmF0ZSA9IDA7CiAKIAlsb2NhbF9yeF9wZCA9IChzdHJ1Y3QgcnhwZCAqKSAoc2tiLT5kYXRhKTsKIApAQCAtMTU1LDYgKzE1NiwxNCBAQAogCiAJcHJpdi0+cnhwZF9odGluZm8gPSBsb2NhbF9yeF9wZC0+aHRfaW5mbzsKIAorCWlmIChHRVRfQlNTX1JPTEUocHJpdikgPT0gTVdJRklFWF9CU1NfUk9MRV9TVEEgfHwKKwkgICAgR0VUX0JTU19ST0xFKHByaXYpID09IE1XSUZJRVhfQlNTX1JPTEVfVUFQKSB7CisJCWFkal9yeF9yYXRlID0gbXdpZmlleF9hZGp1c3RfZGF0YV9yYXRlKHByaXYsIHByaXYtPnJ4cGRfcmF0ZSwKKwkJCQkJCSAgICAgICBwcml2LT5yeHBkX2h0aW5mbyk7CisJCW13aWZpZXhfaGlzdF9kYXRhX2FkZChwcml2LCBhZGpfcnhfcmF0ZSwgbG9jYWxfcnhfcGQtPnNuciwKKwkJCQkgICAgICBsb2NhbF9yeF9wZC0+bmYpOworCX0KKwogCXJldCA9IG13aWZpZXhfcmVjdl9wYWNrZXQocHJpdiwgc2tiKTsKIAlpZiAocmV0ID09IC0xKQogCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgInJlY3YgcGFja2V0IGZhaWxlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC9zdGFfdHguYwppbmRleCBiODk2ZDczLi41Y2UyZDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3N0YV90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvc3RhX3R4LmMKQEAgLTQ3LDggKzQ3LDEwIEBACiAJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CiAJc3RydWN0IHR4cGQgKmxvY2FsX3R4X3BkOwogCXN0cnVjdCBtd2lmaWV4X3R4aW5mbyAqdHhfaW5mbyA9IE1XSUZJRVhfU0tCX1RYQ0Ioc2tiKTsKLQl1OCBwYWQ7CisJdW5zaWduZWQgaW50IHBhZDsKIAl1MTYgcGt0X3R5cGUsIHBrdF9vZmZzZXQ7CisJaW50IGhyb29tID0gKHByaXYtPmFkYXB0ZXItPmlmYWNlX3R5cGUgPT0gTVdJRklFWF9VU0IpID8gMCA6CisJCSAgICAgICBJTlRGX0hFQURFUl9MRU47CiAKIAlpZiAoIXNrYi0+bGVuKSB7CiAJCWRldl9lcnIoYWRhcHRlci0+ZGV2LCAiVHg6IGJhZCBwYWNrZXQgbGVuZ3RoOiAlZFxuIiwgc2tiLT5sZW4pOwpAQCAtNTYsMTMgKzU4LDEyIEBACiAJCXJldHVybiBza2ItPmRhdGE7CiAJfQogCisJQlVHX09OKHNrYl9oZWFkcm9vbShza2IpIDwgTVdJRklFWF9NSU5fREFUQV9IRUFERVJfTEVOKTsKKwogCXBrdF90eXBlID0gbXdpZmlleF9pc19za2JfbWdtdF9mcmFtZShza2IpID8gUEtUX1RZUEVfTUdNVCA6IDA7CiAKLQkvKiBJZiBza2ItPmRhdGEgaXMgbm90IGFsaWduZWQ7IGFkZCBwYWRkaW5nICovCi0JcGFkID0gKDQgLSAoKCh2b2lkICopc2tiLT5kYXRhIC0gTlVMTCkgJiAweDMpKSAlIDQ7Ci0KLQlCVUdfT04oc2tiX2hlYWRyb29tKHNrYikgPCAoc2l6ZW9mKCpsb2NhbF90eF9wZCkgKyBJTlRGX0hFQURFUl9MRU4KLQkJCQkgICAgKyBwYWQpKTsKKwlwYWQgPSAoKHZvaWQgKilza2ItPmRhdGEgLSAoc2l6ZW9mKCpsb2NhbF90eF9wZCkgKyBocm9vbSktCisJCQkgTlVMTCkgJiAoTVdJRklFWF9ETUFfQUxJR05fU1ogLSAxKTsKIAlza2JfcHVzaChza2IsIHNpemVvZigqbG9jYWxfdHhfcGQpICsgcGFkKTsKIAogCWxvY2FsX3R4X3BkID0gKHN0cnVjdCB0eHBkICopIHNrYi0+ZGF0YTsKQEAgLTcwLDggKzcxLDggQEAKIAlsb2NhbF90eF9wZC0+YnNzX251bSA9IHByaXYtPmJzc19udW07CiAJbG9jYWxfdHhfcGQtPmJzc190eXBlID0gcHJpdi0+YnNzX3R5cGU7CiAJbG9jYWxfdHhfcGQtPnR4X3BrdF9sZW5ndGggPSBjcHVfdG9fbGUxNigodTE2KShza2ItPmxlbiAtCi0JCQkJCQkgICAgICAgKHNpemVvZihzdHJ1Y3QgdHhwZCkKLQkJCQkJCQkrIHBhZCkpKTsKKwkJCQkJCSAgICAgICAoc2l6ZW9mKHN0cnVjdCB0eHBkKSArCisJCQkJCQkJcGFkKSkpOwogCiAJbG9jYWxfdHhfcGQtPnByaW9yaXR5ID0gKHU4KSBza2ItPnByaW9yaXR5OwogCWxvY2FsX3R4X3BkLT5wa3RfZGVsYXlfMm1zID0KQEAgLTExNSw3ICsxMTYsNyBAQAogCWxvY2FsX3R4X3BkLT50eF9wa3Rfb2Zmc2V0ID0gY3B1X3RvX2xlMTYocGt0X29mZnNldCk7CiAKIAkvKiBtYWtlIHNwYWNlIGZvciBJTlRGX0hFQURFUl9MRU4gKi8KLQlza2JfcHVzaChza2IsIElOVEZfSEVBREVSX0xFTik7CisJc2tiX3B1c2goc2tiLCBocm9vbSk7CiAKIAlpZiAoIWxvY2FsX3R4X3BkLT50eF9jb250cm9sKQogCQkvKiBUeEN0cmwgc2V0IGJ5IHVzZXIgb3IgZGVmYXVsdCAqLwpAQCAtMTgyLDkgKzE4MywxMyBAQAogCX0KIAlzd2l0Y2ggKHJldCkgewogCWNhc2UgLUVCVVNZOgotCQlhZGFwdGVyLT5kYXRhX3NlbnQgPSB0cnVlOwotCQkvKiBGYWxsIHRocm91Z2ggRkFJTFVSRSBoYW5kbGluZyAqLworCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIiVzOiBob3N0X3RvX2NhcmQgZmFpbGVkOiByZXQ9JWRcbiIsCisJCQlfX2Z1bmNfXywgcmV0KTsKKwkJYWRhcHRlci0+ZGJnLm51bV90eF9ob3N0X3RvX2NhcmRfZmFpbHVyZSsrOworCQlicmVhazsKIAljYXNlIC0xOgorCQlhZGFwdGVyLT5kYXRhX3NlbnQgPSBmYWxzZTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJZGV2X2VycihhZGFwdGVyLT5kZXYsICIlczogaG9zdF90b19jYXJkIGZhaWxlZDogcmV0PSVkXG4iLAogCQkJX19mdW5jX18sIHJldCk7CkBAIC0xOTcsNiArMjAyLDcgQEAKIAkJYWRhcHRlci0+dHhfbG9ja19mbGFnID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAtRUlOUFJPR1JFU1M6CisJCWFkYXB0ZXItPnR4X2xvY2tfZmxhZyA9IHRydWU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC90ZGxzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3RkbHMuYwppbmRleCAyMjg4NGI0Li4wODdkODQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3RkbHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3RkbHMuYwpAQCAtMTEyMyw2ICsxMTIzLDM2IEBACiAJcmV0dXJuIFRETFNfTk9UX1NFVFVQOwogfQogCitpbnQgbXdpZmlleF9nZXRfdGRsc19saXN0KHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgIHN0cnVjdCB0ZGxzX3BlZXJfaW5mbyAqYnVmKQoreworCXN0cnVjdCBtd2lmaWV4X3N0YV9ub2RlICpzdGFfcHRyOworCXN0cnVjdCB0ZGxzX3BlZXJfaW5mbyAqcGVlciA9IGJ1ZjsKKwlpbnQgY291bnQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIUlTU1VQUF9URExTX0VOQUJMRUQocHJpdi0+YWRhcHRlci0+ZndfY2FwX2luZm8pKQorCQlyZXR1cm4gMDsKKworCS8qIG1ha2Ugc3VyZSB3ZSBhcmUgaW4gc3RhdGlvbiBtb2RlIGFuZCBjb25uZWN0ZWQgKi8KKwlpZiAoIShwcml2LT5ic3NfdHlwZSA9PSBNV0lGSUVYX0JTU19UWVBFX1NUQSAmJiBwcml2LT5tZWRpYV9jb25uZWN0ZWQpKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5zdGFfbGlzdF9zcGlubG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhX3B0ciwgJnByaXYtPnN0YV9saXN0LCBsaXN0KSB7CisJCWlmIChzdGFfcHRyLT50ZGxzX3N0YXR1cyA9PSBURExTX1NFVFVQX0NPTVBMRVRFKSB7CisJCQlldGhlcl9hZGRyX2NvcHkocGVlci0+cGVlcl9hZGRyLCBzdGFfcHRyLT5tYWNfYWRkcik7CisJCQlwZWVyKys7CisJCQljb3VudCsrOworCQkJaWYgKGNvdW50ID49IE1XSUZJRVhfTUFYX1RETFNfUEVFUl9TVVBQT1JURUQpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xpc3Rfc3BpbmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBjb3VudDsKK30KKwogdm9pZCBtd2lmaWV4X2Rpc2FibGVfYWxsX3RkbHNfbGlua3Moc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKIHsKIAlzdHJ1Y3QgbXdpZmlleF9zdGFfbm9kZSAqc3RhX3B0cjsKQEAgLTEzNjcsOSArMTM5Nyw4IEBACiAKIHZvaWQgbXdpZmlleF9zZXR1cF9hdXRvX3RkbHNfdGltZXIoc3RydWN0IG13aWZpZXhfcHJpdmF0ZSAqcHJpdikKIHsKLQlpbml0X3RpbWVyKCZwcml2LT5hdXRvX3RkbHNfdGltZXIpOwotCXByaXYtPmF1dG9fdGRsc190aW1lci5mdW5jdGlvbiA9IG13aWZpZXhfY2hlY2tfYXV0b190ZGxzOwotCXByaXYtPmF1dG9fdGRsc190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcHJpdjsKKwlzZXR1cF90aW1lcigmcHJpdi0+YXV0b190ZGxzX3RpbWVyLCBtd2lmaWV4X2NoZWNrX2F1dG9fdGRscywKKwkJICAgICh1bnNpZ25lZCBsb25nKXByaXYpOwogCXByaXYtPmF1dG9fdGRsc190aW1lcl9hY3RpdmUgPSB0cnVlOwogCW1vZF90aW1lcigmcHJpdi0+YXV0b190ZGxzX3RpbWVyLAogCQkgIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKE1XSUZJRVhfVElNRVJfMTBTKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdHhyeC5jCmluZGV4IDZhZTEzMzMuLmFjOTM1NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdHhyeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdHhyeC5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIAkJCS8qIGNvbnN1bWVzIGFja19za2IgKi8KIAkJCXNrYl9jb21wbGV0ZV93aWZpX2FjayhhY2tfc2tiLCAhdHhfc3RhdHVzLT5zdGF0dXMpOwogCQl9IGVsc2UgewotCQkJY2ZnODAyMTFfbWdtdF90eF9zdGF0dXMocHJpdi0+d2RldiwgdHhfaW5mby0+Y29va2llLAorCQkJY2ZnODAyMTFfbWdtdF90eF9zdGF0dXMoJnByaXYtPndkZXYsIHR4X2luZm8tPmNvb2tpZSwKIAkJCQkJCWFja19za2ItPmRhdGEsIGFja19za2ItPmxlbiwKIAkJCQkJCSF0eF9zdGF0dXMtPnN0YXR1cywgR0ZQX0FUT01JQyk7CiAJCQlkZXZfa2ZyZWVfc2tiX2FueShhY2tfc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdWFwX2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91YXBfY21kLmMKaW5kZXggMGYzNDdmZC4uZjVjMmFmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91YXBfY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91YXBfY21kLmMKQEAgLTc2MSw2ICs3NjEsMTEgQEAKIAkJaWYgKG13aWZpZXhfY21kX3VhcF9zdGFfZGVhdXRoKHByaXYsIGNtZCwgZGF0YV9idWYpKQogCQkJcmV0dXJuIC0xOwogCQlicmVhazsKKwljYXNlIEhvc3RDbWRfQ01EX0NIQU5fUkVQT1JUX1JFUVVFU1Q6CisJCWlmIChtd2lmaWV4X2NtZF9pc3N1ZV9jaGFuX3JlcG9ydF9yZXF1ZXN0KHByaXYsIGNtZF9idWYsCisJCQkJCQkJICBkYXRhX2J1ZikpCisJCQlyZXR1cm4gLTE7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIocHJpdi0+YWRhcHRlci0+ZGV2LAogCQkJIlBSRVBfQ01EOiB1bmtub3duIGNtZCAlI3hcbiIsIGNtZF9ubyk7CkBAIC03NjksMyArNzc0LDY4IEBACiAKIAlyZXR1cm4gMDsKIH0KKwordm9pZCBtd2lmaWV4X3VhcF9zZXRfY2hhbm5lbChzdHJ1Y3QgbXdpZmlleF91YXBfYnNzX3BhcmFtICpic3NfY2ZnLAorCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgY2hhbmRlZikKK3sKKwl1OCBjb25maWdfYmFuZHMgPSAwOworCisJYnNzX2NmZy0+Y2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCgKKwkJCQkJCSAgICAgY2hhbmRlZi5jaGFuLT5jZW50ZXJfZnJlcSk7CisKKwkvKiBTZXQgYXBwcm9wcmlhdGUgYmFuZHMgKi8KKwlpZiAoY2hhbmRlZi5jaGFuLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJYnNzX2NmZy0+YmFuZF9jZmcgPSBCQU5EX0NPTkZJR19CRzsKKwkJY29uZmlnX2JhbmRzID0gQkFORF9CIHwgQkFORF9HOworCisJCWlmIChjaGFuZGVmLndpZHRoID4gTkw4MDIxMV9DSEFOX1dJRFRIXzIwX05PSFQpCisJCQljb25maWdfYmFuZHMgfD0gQkFORF9HTjsKKwl9IGVsc2UgeworCQlic3NfY2ZnLT5iYW5kX2NmZyA9IEJBTkRfQ09ORklHX0E7CisJCWNvbmZpZ19iYW5kcyA9IEJBTkRfQTsKKworCQlpZiAoY2hhbmRlZi53aWR0aCA+IE5MODAyMTFfQ0hBTl9XSURUSF8yMF9OT0hUKQorCQkJY29uZmlnX2JhbmRzIHw9IEJBTkRfQU47CisKKwkJaWYgKGNoYW5kZWYud2lkdGggPiBOTDgwMjExX0NIQU5fV0lEVEhfNDApCisJCQljb25maWdfYmFuZHMgfD0gQkFORF9BQUM7CisJfQorfQorCitpbnQgbXdpZmlleF9jb25maWdfc3RhcnRfdWFwKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICAgIHN0cnVjdCBtd2lmaWV4X3VhcF9ic3NfcGFyYW0gKmJzc19jZmcpCit7CisJaWYgKG13aWZpZXhfZGVsX21nbXRfaWVzKHByaXYpKQorCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIkZhaWxlZCB0byBkZWxldGUgbWdtdCBJRXMhXG4iKTsKKworCWlmIChtd2lmaWV4X3NlbmRfY21kKHByaXYsIEhvc3RDbWRfQ01EX1VBUF9CU1NfU1RPUCwKKwkJCSAgICAgSG9zdENtZF9BQ1RfR0VOX1NFVCwgMCwgTlVMTCwgdHJ1ZSkpIHsKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJGYWlsZWQgdG8gc3RvcCB0aGUgQlNTXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChtd2lmaWV4X3NlbmRfY21kKHByaXYsIEhvc3RDbWRfQ01EX1VBUF9TWVNfQ09ORklHLAorCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULAorCQkJICAgICBVQVBfQlNTX1BBUkFNU19JLCBic3NfY2ZnLCBmYWxzZSkpIHsKKwkJZGV2X2Vycihwcml2LT5hZGFwdGVyLT5kZXYsICJGYWlsZWQgdG8gc2V0IHRoZSBTU0lEXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChtd2lmaWV4X3NlbmRfY21kKHByaXYsIEhvc3RDbWRfQ01EX1VBUF9CU1NfU1RBUlQsCisJCQkgICAgIEhvc3RDbWRfQUNUX0dFTl9TRVQsIDAsIE5VTEwsIGZhbHNlKSkgeworCQlkZXZfZXJyKHByaXYtPmFkYXB0ZXItPmRldiwgIkZhaWxlZCB0byBzdGFydCB0aGUgQlNTXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChwcml2LT5zZWNfaW5mby53ZXBfZW5hYmxlZCkKKwkJcHJpdi0+Y3Vycl9wa3RfZmlsdGVyIHw9IEhvc3RDbWRfQUNUX01BQ19XRVBfRU5BQkxFOworCWVsc2UKKwkJcHJpdi0+Y3Vycl9wa3RfZmlsdGVyICY9IH5Ib3N0Q21kX0FDVF9NQUNfV0VQX0VOQUJMRTsKKworCWlmIChtd2lmaWV4X3NlbmRfY21kKHByaXYsIEhvc3RDbWRfQ01EX01BQ19DT05UUk9MLAorCQkJICAgICBIb3N0Q21kX0FDVF9HRU5fU0VULCAwLAorCQkJICAgICAmcHJpdi0+Y3Vycl9wa3RfZmlsdGVyLCB0cnVlKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3VhcF9ldmVudC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91YXBfZXZlbnQuYwppbmRleCBjNTRhNTM3Li5mNDc5NGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3VhcF9ldmVudC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdWFwX2V2ZW50LmMKQEAgLTY4LDcgKzY4LDYgQEAKIAkJCQlsZW4gPSBFVEhfQUxFTjsKIAogCQkJaWYgKGxlbiAhPSAtMSkgewotCQkJCXNpbmZvLmZpbGxlZCA9IFNUQVRJT05fSU5GT19BU1NPQ19SRVFfSUVTOwogCQkJCXNpbmZvLmFzc29jX3JlcV9pZXMgPSAmZXZlbnQtPmRhdGFbbGVuXTsKIAkJCQlsZW4gPSAodTggKilzaW5mby5hc3NvY19yZXFfaWVzIC0KIAkJCQkgICAgICAodTggKikmZXZlbnQtPmZyYW1lX2NvbnRyb2w7CkBAIC0xMzIsNiArMTMxLDggQEAKIAkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJBUCBFVkVOVDogZXZlbnQgaWQ6ICUjeFxuIiwgZXZlbnRjYXVzZSk7CiAJCW1lbWNweShwcml2LT5uZXRkZXYtPmRldl9hZGRyLCBhZGFwdGVyLT5ldmVudF9ib2R5ICsgMiwKIAkJICAgICAgIEVUSF9BTEVOKTsKKwkJaWYgKHByaXYtPmhpc3RfZGF0YSkKKwkJCW13aWZpZXhfaGlzdF9kYXRhX3Jlc2V0KHByaXYpOwogCQlicmVhazsKIAljYXNlIEVWRU5UX1VBUF9NSUNfQ09VTlRFUk1FQVNVUkVTOgogCQkvKiBGb3IgZnV0dXJlIGRldmVsb3BtZW50ICovCkBAIC0xNzcsNiArMTc4LDUzIEBACiAJCWRldl9kYmcoYWRhcHRlci0+ZGV2LCAiZXZlbnQ6IFRYX1NUQVRVUyBSZXBvcnRcbiIpOwogCQltd2lmaWV4X3BhcnNlX3R4X3N0YXR1c19ldmVudChwcml2LCBhZGFwdGVyLT5ldmVudF9ib2R5KTsKIAkJYnJlYWs7CisJY2FzZSBFVkVOVF9QU19TTEVFUDoKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJpbmZvOiBFVkVOVDogU0xFRVBcbiIpOworCisJCWFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfUFJFX1NMRUVQOworCisJCW13aWZpZXhfY2hlY2tfcHNfY29uZChhZGFwdGVyKTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX1BTX0FXQUtFOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImluZm86IEVWRU5UOiBBV0FLRVxuIik7CisJCWlmICghYWRhcHRlci0+cHBzX3VhcHNkX21vZGUgJiYKKwkJICAgIHByaXYtPm1lZGlhX2Nvbm5lY3RlZCAmJiBhZGFwdGVyLT5zbGVlcF9wZXJpb2QucGVyaW9kKSB7CisJCQkJYWRhcHRlci0+cHBzX3VhcHNkX21vZGUgPSB0cnVlOworCQkJCWRldl9kYmcoYWRhcHRlci0+ZGV2LAorCQkJCQkiZXZlbnQ6IFBQUy9VQVBTRCBtb2RlIGFjdGl2YXRlZFxuIik7CisJCX0KKwkJYWRhcHRlci0+dHhfbG9ja19mbGFnID0gZmFsc2U7CisJCWlmIChhZGFwdGVyLT5wcHNfdWFwc2RfbW9kZSAmJiBhZGFwdGVyLT5nZW5fbnVsbF9wa3QpIHsKKwkJCWlmIChtd2lmaWV4X2NoZWNrX2xhc3RfcGFja2V0X2luZGljYXRpb24ocHJpdikpIHsKKwkJCQlpZiAoYWRhcHRlci0+ZGF0YV9zZW50KSB7CisJCQkJCWFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfQVdBS0U7CisJCQkJCWFkYXB0ZXItPnBtX3dha2V1cF9jYXJkX3JlcSA9IGZhbHNlOworCQkJCQlhZGFwdGVyLT5wbV93YWtldXBfZndfdHJ5ID0gZmFsc2U7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoIW13aWZpZXhfc2VuZF9udWxsX3BhY2tldAorCQkJCQkocHJpdiwKKwkJCQkJIE1XSUZJRVhfVHhQRF9QT1dFUl9NR01UX05VTExfUEFDS0VUIHwKKwkJCQkJIE1XSUZJRVhfVHhQRF9QT1dFUl9NR01UX0xBU1RfUEFDS0VUKSkKKwkJCQkJCWFkYXB0ZXItPnBzX3N0YXRlID0KKwkJCQkJCQlQU19TVEFURV9TTEVFUDsKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwkJYWRhcHRlci0+cHNfc3RhdGUgPSBQU19TVEFURV9BV0FLRTsKKwkJYWRhcHRlci0+cG1fd2FrZXVwX2NhcmRfcmVxID0gZmFsc2U7CisJCWFkYXB0ZXItPnBtX3dha2V1cF9md190cnkgPSBmYWxzZTsKKwkJYnJlYWs7CisKKwljYXNlIEVWRU5UX0NIQU5ORUxfUkVQT1JUX1JEWToKKwkJZGV2X2RiZyhhZGFwdGVyLT5kZXYsICJldmVudDogQ2hhbm5lbCBSZXBvcnRcbiIpOworCQltd2lmaWV4XzExaF9oYW5kbGVfY2hhbnJwdF9yZWFkeShwcml2LCBhZGFwdGVyLT5ldmVudF9za2IpOworCQlicmVhazsKKwljYXNlIEVWRU5UX1JBREFSX0RFVEVDVEVEOgorCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiBSYWRhciBkZXRlY3RlZFxuIik7CisJCW13aWZpZXhfMTFoX2hhbmRsZV9yYWRhcl9kZXRlY3RlZChwcml2LCBhZGFwdGVyLT5ldmVudF9za2IpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgImV2ZW50OiB1bmtub3duIGV2ZW50IGlkOiAlI3hcbiIsCiAJCQlldmVudGNhdXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdWFwX3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdWFwX3R4cnguYwppbmRleCBiZTNhMjAzLi4zOGFjNGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3VhcF90eHJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91YXBfdHhyeC5jCkBAIC0zNDgsOCArMzQ4LDEwIEBACiAJc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlciA9IHByaXYtPmFkYXB0ZXI7CiAJc3RydWN0IHVhcF90eHBkICp0eHBkOwogCXN0cnVjdCBtd2lmaWV4X3R4aW5mbyAqdHhfaW5mbyA9IE1XSUZJRVhfU0tCX1RYQ0Ioc2tiKTsKLQlpbnQgcGFkLCBsZW47Ci0JdTE2IHBrdF90eXBlOworCWludCBwYWQ7CisJdTE2IHBrdF90eXBlLCBwa3Rfb2Zmc2V0OworCWludCBocm9vbSA9IChwcml2LT5hZGFwdGVyLT5pZmFjZV90eXBlID09IE1XSUZJRVhfVVNCKSA/IDAgOgorCQkgICAgICAgSU5URl9IRUFERVJfTEVOOwogCiAJaWYgKCFza2ItPmxlbikgewogCQlkZXZfZXJyKGFkYXB0ZXItPmRldiwgIlR4OiBiYWQgcGFja2V0IGxlbmd0aDogJWRcbiIsIHNrYi0+bGVuKTsKQEAgLTM1NywyMiArMzU5LDIxIEBACiAJCXJldHVybiBza2ItPmRhdGE7CiAJfQogCisJQlVHX09OKHNrYl9oZWFkcm9vbShza2IpIDwgTVdJRklFWF9NSU5fREFUQV9IRUFERVJfTEVOKTsKKwogCXBrdF90eXBlID0gbXdpZmlleF9pc19za2JfbWdtdF9mcmFtZShza2IpID8gUEtUX1RZUEVfTUdNVCA6IDA7CiAKLQkvKiBJZiBza2ItPmRhdGEgaXMgbm90IGFsaWduZWQsIGFkZCBwYWRkaW5nICovCi0JcGFkID0gKDQgLSAoKCh2b2lkICopc2tiLT5kYXRhIC0gTlVMTCkgJiAweDMpKSAlIDQ7CisJcGFkID0gKCh2b2lkICopc2tiLT5kYXRhIC0gKHNpemVvZigqdHhwZCkgKyBocm9vbSkgLSBOVUxMKSAmCisJCQkoTVdJRklFWF9ETUFfQUxJR05fU1ogLSAxKTsKIAotCWxlbiA9IHNpemVvZigqdHhwZCkgKyBwYWQ7Ci0KLQlCVUdfT04oc2tiX2hlYWRyb29tKHNrYikgPCBsZW4gKyBJTlRGX0hFQURFUl9MRU4pOwotCi0Jc2tiX3B1c2goc2tiLCBsZW4pOworCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCp0eHBkKSArIHBhZCk7CiAKIAl0eHBkID0gKHN0cnVjdCB1YXBfdHhwZCAqKXNrYi0+ZGF0YTsKIAltZW1zZXQodHhwZCwgMCwgc2l6ZW9mKCp0eHBkKSk7CiAJdHhwZC0+YnNzX251bSA9IHByaXYtPmJzc19udW07CiAJdHhwZC0+YnNzX3R5cGUgPSBwcml2LT5ic3NfdHlwZTsKLQl0eHBkLT50eF9wa3RfbGVuZ3RoID0gY3B1X3RvX2xlMTYoKHUxNikoc2tiLT5sZW4gLSBsZW4pKTsKKwl0eHBkLT50eF9wa3RfbGVuZ3RoID0gY3B1X3RvX2xlMTYoKHUxNikoc2tiLT5sZW4gLSAoc2l6ZW9mKCp0eHBkKSArCisJCQkJCQlwYWQpKSk7CiAJdHhwZC0+cHJpb3JpdHkgPSAodTgpc2tiLT5wcmlvcml0eTsKIAogCXR4cGQtPnBrdF9kZWxheV8ybXMgPSBtd2lmaWV4X3dtbV9jb21wdXRlX2Rydl9wa3RfZGVsYXkocHJpdiwgc2tiKTsKQEAgLTM5MiwxNiArMzkzLDE3IEBACiAJCSAgICBjcHVfdG9fbGUzMihwcml2LT53bW0udXNlcl9wcmlfcGt0X3R4X2N0cmxbdHhwZC0+cHJpb3JpdHldKTsKIAogCS8qIE9mZnNldCBvZiBhY3R1YWwgZGF0YSAqLworCXBrdF9vZmZzZXQgPSBzaXplb2YoKnR4cGQpICsgcGFkOwogCWlmIChwa3RfdHlwZSA9PSBQS1RfVFlQRV9NR01UKSB7CiAJCS8qIFNldCB0aGUgcGFja2V0IHR5cGUgYW5kIGFkZCBoZWFkZXIgZm9yIG1hbmFnZW1lbnQgZnJhbWUgKi8KIAkJdHhwZC0+dHhfcGt0X3R5cGUgPSBjcHVfdG9fbGUxNihwa3RfdHlwZSk7Ci0JCWxlbiArPSBNV0lGSUVYX01HTVRfRlJBTUVfSEVBREVSX1NJWkU7CisJCXBrdF9vZmZzZXQgKz0gTVdJRklFWF9NR01UX0ZSQU1FX0hFQURFUl9TSVpFOwogCX0KIAotCXR4cGQtPnR4X3BrdF9vZmZzZXQgPSBjcHVfdG9fbGUxNihsZW4pOworCXR4cGQtPnR4X3BrdF9vZmZzZXQgPSBjcHVfdG9fbGUxNihwa3Rfb2Zmc2V0KTsKIAogCS8qIG1ha2Ugc3BhY2UgZm9yIElOVEZfSEVBREVSX0xFTiAqLwotCXNrYl9wdXNoKHNrYiwgSU5URl9IRUFERVJfTEVOKTsKKwlza2JfcHVzaChza2IsIGhyb29tKTsKIAogCWlmICghdHhwZC0+dHhfY29udHJvbCkKIAkJLyogVHhDdHJsIHNldCBieSB1c2VyIG9yIGRlZmF1bHQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3VzYi5jCmluZGV4IDFiNTY0OTUuLjIyMzg3MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91c2IuYwpAQCAtMzcsNiArMzcsMTEgQEAKIAl7VVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oVVNCOFhYWF9WSUQsIFVTQjg3OTdfUElEXzIsCiAJCQkJICAgICAgIFVTQl9DTEFTU19WRU5ET1JfU1BFQywKIAkJCQkgICAgICAgVVNCX1NVQkNMQVNTX1ZFTkRPUl9TUEVDLCAweGZmKX0sCisJLyogODgwMSAqLworCXtVU0JfREVWSUNFKFVTQjhYWFhfVklELCBVU0I4ODAxX1BJRF8xKX0sCisJe1VTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFVTQjhYWFhfVklELCBVU0I4ODAxX1BJRF8yLAorCQkJCSAgICAgICBVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCisJCQkJICAgICAgIFVTQl9TVUJDTEFTU19WRU5ET1JfU1BFQywgMHhmZil9LAogCS8qIDg4OTcgKi8KIAl7VVNCX0RFVklDRShVU0I4WFhYX1ZJRCwgVVNCODg5N19QSURfMSl9LAogCXtVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhVU0I4WFhYX1ZJRCwgVVNCODg5N19QSURfMiwKQEAgLTM2MSwxMSArMzY2LDEzIEBACiAJc3dpdGNoIChpZF9wcm9kdWN0KSB7CiAJY2FzZSBVU0I4NzY2X1BJRF8xOgogCWNhc2UgVVNCODc5N19QSURfMToKKwljYXNlIFVTQjg4MDFfUElEXzE6CiAJY2FzZSBVU0I4ODk3X1BJRF8xOgogCQljYXJkLT51c2JfYm9vdF9zdGF0ZSA9IFVTQjhYWFhfRldfRE5MRDsKIAkJYnJlYWs7CiAJY2FzZSBVU0I4NzY2X1BJRF8yOgogCWNhc2UgVVNCODc5N19QSURfMjoKKwljYXNlIFVTQjg4MDFfUElEXzI6CiAJY2FzZSBVU0I4ODk3X1BJRF8yOgogCQljYXJkLT51c2JfYm9vdF9zdGF0ZSA9IFVTQjhYWFhfRldfUkVBRFk7CiAJCWJyZWFrOwpAQCAtNzkyLDExICs3OTksMTkgQEAKIAljYXNlIFVTQjg4OTdfUElEXzI6CiAJCWFkYXB0ZXItPnR4X2J1Zl9zaXplID0gTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzRLOwogCQlzdHJjcHkoYWRhcHRlci0+ZndfbmFtZSwgVVNCODg5N19ERUZBVUxUX0ZXX05BTUUpOworCQlhZGFwdGVyLT5leHRfc2NhbiA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgVVNCODc2Nl9QSURfMToKIAljYXNlIFVTQjg3NjZfUElEXzI6CiAJCWFkYXB0ZXItPnR4X2J1Zl9zaXplID0gTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzJLOwogCQlzdHJjcHkoYWRhcHRlci0+ZndfbmFtZSwgVVNCODc2Nl9ERUZBVUxUX0ZXX05BTUUpOworCQlhZGFwdGVyLT5leHRfc2NhbiA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgVVNCODgwMV9QSURfMToKKwljYXNlIFVTQjg4MDFfUElEXzI6CisJCWFkYXB0ZXItPnR4X2J1Zl9zaXplID0gTVdJRklFWF9UWF9EQVRBX0JVRl9TSVpFXzJLOworCQlzdHJjcHkoYWRhcHRlci0+ZndfbmFtZSwgVVNCODgwMV9ERUZBVUxUX0ZXX05BTUUpOworCQlhZGFwdGVyLT5leHRfc2NhbiA9IGZhbHNlOwogCQlicmVhazsKIAljYXNlIFVTQjg3OTdfUElEXzE6CiAJY2FzZSBVU0I4Nzk3X1BJRF8yOgpAQCAtOTMwLDcgKzk0NSw4IEBACiAJfSB3aGlsZSAoKGRubGRfY21kICE9IEZXX0hBU19MQVNUX0JMT0NLKSAmJiByZXRyaWVzKTsKIAogY2xlYW51cDoKLQlkZXZfZGJnKGFkYXB0ZXItPmRldiwgIiVzOiAlZCBieXRlcyBkb3dubG9hZGVkXG4iLCBfX2Z1bmNfXywgdGxlbik7CisJZGV2X25vdGljZShhZGFwdGVyLT5kZXYsCisJCSAgICJpbmZvOiBGVyBkb3dubG9hZCBvdmVyLCBzaXplICVkIGJ5dGVzXG4iLCB0bGVuKTsKIAogCWtmcmVlKHJlY3ZfYnVmZik7CiAJa2ZyZWUoZndkYXRhKTsKQEAgLTk5MCw2ICsxMDA2LDcgQEAKIHsKIAkvKiBTaW11bGF0aW9uIG9mIEhTX0FXQUtFIGV2ZW50ICovCiAJYWRhcHRlci0+cG1fd2FrZXVwX2Z3X3RyeSA9IGZhbHNlOworCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT53YWtldXBfdGltZXIpOwogCWFkYXB0ZXItPnBtX3dha2V1cF9jYXJkX3JlcSA9IGZhbHNlOwogCWFkYXB0ZXItPnBzX3N0YXRlID0gUFNfU1RBVEVfQVdBS0U7CiAKQEAgLTEwMTAsNiArMTAyNywxMyBAQAogCX0KIH0KIAorLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNhcmQgaGFzIHdva2VuIHVwLiAqLworc3RhdGljIGlubGluZSBpbnQKK213aWZpZXhfcG1fd2FrZXVwX2NhcmRfY29tcGxldGUoc3RydWN0IG13aWZpZXhfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBtd2lmaWV4X2lmX29wcyB1c2Jfb3BzID0gewogCS5yZWdpc3Rlcl9kZXYgPQkJbXdpZmlleF9yZWdpc3Rlcl9kZXYsCiAJLnVucmVnaXN0ZXJfZGV2ID0JbXdpZmlleF91bnJlZ2lzdGVyX2RldiwKQEAgLTEwNzQsNCArMTA5OCw1IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CiBNT0RVTEVfRklSTVdBUkUoVVNCODc2Nl9ERUZBVUxUX0ZXX05BTUUpOwogTU9EVUxFX0ZJUk1XQVJFKFVTQjg3OTdfREVGQVVMVF9GV19OQU1FKTsKK01PRFVMRV9GSVJNV0FSRShVU0I4ODAxX0RFRkFVTFRfRldfTkFNRSk7CiBNT0RVTEVfRklSTVdBUkUoVVNCODg5N19ERUZBVUxUX0ZXX05BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91c2IuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdXNiLmgKaW5kZXggYTdjYmJhMS4uNTdlMWE1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3VzYi5oCkBAIC0zMCw2ICszMCw5IEBACiAjZGVmaW5lIFVTQjg3OTdfUElEXzIJCTB4MjA0NAogI2RlZmluZSBVU0I4ODk3X1BJRF8xCQkweDIwNDUKICNkZWZpbmUgVVNCODg5N19QSURfMgkJMHgyMDQ2CisjZGVmaW5lIFVTQjg4MDFfUElEXzEJCTB4MjA0OQorI2RlZmluZSBVU0I4ODAxX1BJRF8yCQkweDIwNGEKKwogCiAjZGVmaW5lIFVTQjhYWFhfRldfRE5MRAkJMQogI2RlZmluZSBVU0I4WFhYX0ZXX1JFQURZCTIKQEAgLTQxLDYgKzQ0LDcgQEAKIAogI2RlZmluZSBVU0I4NzY2X0RFRkFVTFRfRldfTkFNRQkibXJ2bC91c2I4NzY2X3VhcHN0YS5iaW4iCiAjZGVmaW5lIFVTQjg3OTdfREVGQVVMVF9GV19OQU1FCSJtcnZsL3VzYjg3OTdfdWFwc3RhLmJpbiIKKyNkZWZpbmUgVVNCODgwMV9ERUZBVUxUX0ZXX05BTUUJIm1ydmwvdXNiODgwMV91YXBzdGEuYmluIgogI2RlZmluZSBVU0I4ODk3X0RFRkFVTFRfRldfTkFNRQkibXJ2bC91c2I4ODk3X3VhcHN0YS5iaW4iCiAKICNkZWZpbmUgRldfRE5MRF9UWF9CVUZfU0laRQk2MjAKQEAgLTk2LDExICsxMDAsNCBAQAogCXU4IGRhdGFbMV07CiB9OwogCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciB0aGUgY2FyZCBoYXMgd29rZW4gdXAuICovCi1zdGF0aWMgaW5saW5lIGludAotbXdpZmlleF9wbV93YWtldXBfY2FyZF9jb21wbGV0ZShzdHJ1Y3QgbXdpZmlleF9hZGFwdGVyICphZGFwdGVyKQotewotCXJldHVybiAwOwotfQotCiAjZW5kaWYgLypfTVdJRklFWF9VU0JfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91dGlsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3V0aWwuYwppbmRleCBiMTc2OGZiLi4zMDg1NTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3V0aWwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3V0aWwuYwpAQCAtMjUsNiArMjUsOTYgQEAKICNpbmNsdWRlICJ3bW0uaCIKICNpbmNsdWRlICIxMW4uaCIKIAorc3RhdGljIHN0cnVjdCBtd2lmaWV4X2RlYnVnX2RhdGEgaXRlbXNbXSA9IHsKKwl7ImludF9jb3VudGVyIiwgaXRlbV9zaXplKGludF9jb3VudGVyKSwKKwkgaXRlbV9hZGRyKGludF9jb3VudGVyKSwgMX0sCisJeyJ3bW1fYWNfdm8iLCBpdGVtX3NpemUocGFja2V0c19vdXRbV01NX0FDX1ZPXSksCisJIGl0ZW1fYWRkcihwYWNrZXRzX291dFtXTU1fQUNfVk9dKSwgMX0sCisJeyJ3bW1fYWNfdmkiLCBpdGVtX3NpemUocGFja2V0c19vdXRbV01NX0FDX1ZJXSksCisJIGl0ZW1fYWRkcihwYWNrZXRzX291dFtXTU1fQUNfVkldKSwgMX0sCisJeyJ3bW1fYWNfYmUiLCBpdGVtX3NpemUocGFja2V0c19vdXRbV01NX0FDX0JFXSksCisJIGl0ZW1fYWRkcihwYWNrZXRzX291dFtXTU1fQUNfQkVdKSwgMX0sCisJeyJ3bW1fYWNfYmsiLCBpdGVtX3NpemUocGFja2V0c19vdXRbV01NX0FDX0JLXSksCisJIGl0ZW1fYWRkcihwYWNrZXRzX291dFtXTU1fQUNfQktdKSwgMX0sCisJeyJ0eF9idWZfc2l6ZSIsIGl0ZW1fc2l6ZSh0eF9idWZfc2l6ZSksCisJIGl0ZW1fYWRkcih0eF9idWZfc2l6ZSksIDF9LAorCXsiY3Vycl90eF9idWZfc2l6ZSIsIGl0ZW1fc2l6ZShjdXJyX3R4X2J1Zl9zaXplKSwKKwkgaXRlbV9hZGRyKGN1cnJfdHhfYnVmX3NpemUpLCAxfSwKKwl7InBzX21vZGUiLCBpdGVtX3NpemUocHNfbW9kZSksCisJIGl0ZW1fYWRkcihwc19tb2RlKSwgMX0sCisJeyJwc19zdGF0ZSIsIGl0ZW1fc2l6ZShwc19zdGF0ZSksCisJIGl0ZW1fYWRkcihwc19zdGF0ZSksIDF9LAorCXsiaXNfZGVlcF9zbGVlcCIsIGl0ZW1fc2l6ZShpc19kZWVwX3NsZWVwKSwKKwkgaXRlbV9hZGRyKGlzX2RlZXBfc2xlZXApLCAxfSwKKwl7Indha2V1cF9kZXZfcmVxIiwgaXRlbV9zaXplKHBtX3dha2V1cF9jYXJkX3JlcSksCisJIGl0ZW1fYWRkcihwbV93YWtldXBfY2FyZF9yZXEpLCAxfSwKKwl7Indha2V1cF90cmllcyIsIGl0ZW1fc2l6ZShwbV93YWtldXBfZndfdHJ5KSwKKwkgaXRlbV9hZGRyKHBtX3dha2V1cF9md190cnkpLCAxfSwKKwl7ImhzX2NvbmZpZ3VyZWQiLCBpdGVtX3NpemUoaXNfaHNfY29uZmlndXJlZCksCisJIGl0ZW1fYWRkcihpc19oc19jb25maWd1cmVkKSwgMX0sCisJeyJoc19hY3RpdmF0ZWQiLCBpdGVtX3NpemUoaHNfYWN0aXZhdGVkKSwKKwkgaXRlbV9hZGRyKGhzX2FjdGl2YXRlZCksIDF9LAorCXsibnVtX3R4X3RpbWVvdXQiLCBpdGVtX3NpemUobnVtX3R4X3RpbWVvdXQpLAorCSBpdGVtX2FkZHIobnVtX3R4X3RpbWVvdXQpLCAxfSwKKwl7ImlzX2NtZF90aW1lZG91dCIsIGl0ZW1fc2l6ZShpc19jbWRfdGltZWRvdXQpLAorCSBpdGVtX2FkZHIoaXNfY21kX3RpbWVkb3V0KSwgMX0sCisJeyJ0aW1lb3V0X2NtZF9pZCIsIGl0ZW1fc2l6ZSh0aW1lb3V0X2NtZF9pZCksCisJIGl0ZW1fYWRkcih0aW1lb3V0X2NtZF9pZCksIDF9LAorCXsidGltZW91dF9jbWRfYWN0IiwgaXRlbV9zaXplKHRpbWVvdXRfY21kX2FjdCksCisJIGl0ZW1fYWRkcih0aW1lb3V0X2NtZF9hY3QpLCAxfSwKKwl7Imxhc3RfY21kX2lkIiwgaXRlbV9zaXplKGxhc3RfY21kX2lkKSwKKwkgaXRlbV9hZGRyKGxhc3RfY21kX2lkKSwgREJHX0NNRF9OVU19LAorCXsibGFzdF9jbWRfYWN0IiwgaXRlbV9zaXplKGxhc3RfY21kX2FjdCksCisJIGl0ZW1fYWRkcihsYXN0X2NtZF9hY3QpLCBEQkdfQ01EX05VTX0sCisJeyJsYXN0X2NtZF9pbmRleCIsIGl0ZW1fc2l6ZShsYXN0X2NtZF9pbmRleCksCisJIGl0ZW1fYWRkcihsYXN0X2NtZF9pbmRleCksIDF9LAorCXsibGFzdF9jbWRfcmVzcF9pZCIsIGl0ZW1fc2l6ZShsYXN0X2NtZF9yZXNwX2lkKSwKKwkgaXRlbV9hZGRyKGxhc3RfY21kX3Jlc3BfaWQpLCBEQkdfQ01EX05VTX0sCisJeyJsYXN0X2NtZF9yZXNwX2luZGV4IiwgaXRlbV9zaXplKGxhc3RfY21kX3Jlc3BfaW5kZXgpLAorCSBpdGVtX2FkZHIobGFzdF9jbWRfcmVzcF9pbmRleCksIDF9LAorCXsibGFzdF9ldmVudCIsIGl0ZW1fc2l6ZShsYXN0X2V2ZW50KSwKKwkgaXRlbV9hZGRyKGxhc3RfZXZlbnQpLCBEQkdfQ01EX05VTX0sCisJeyJsYXN0X2V2ZW50X2luZGV4IiwgaXRlbV9zaXplKGxhc3RfZXZlbnRfaW5kZXgpLAorCSBpdGVtX2FkZHIobGFzdF9ldmVudF9pbmRleCksIDF9LAorCXsibnVtX2NtZF9oMmNfZmFpbCIsIGl0ZW1fc2l6ZShudW1fY21kX2hvc3RfdG9fY2FyZF9mYWlsdXJlKSwKKwkgaXRlbV9hZGRyKG51bV9jbWRfaG9zdF90b19jYXJkX2ZhaWx1cmUpLCAxfSwKKwl7Im51bV9jbWRfc2xlZXBfY2ZtX2ZhaWwiLAorCSBpdGVtX3NpemUobnVtX2NtZF9zbGVlcF9jZm1faG9zdF90b19jYXJkX2ZhaWx1cmUpLAorCSBpdGVtX2FkZHIobnVtX2NtZF9zbGVlcF9jZm1faG9zdF90b19jYXJkX2ZhaWx1cmUpLCAxfSwKKwl7Im51bV90eF9oMmNfZmFpbCIsIGl0ZW1fc2l6ZShudW1fdHhfaG9zdF90b19jYXJkX2ZhaWx1cmUpLAorCSBpdGVtX2FkZHIobnVtX3R4X2hvc3RfdG9fY2FyZF9mYWlsdXJlKSwgMX0sCisJeyJudW1fZXZ0X2RlYXV0aCIsIGl0ZW1fc2l6ZShudW1fZXZlbnRfZGVhdXRoKSwKKwkgaXRlbV9hZGRyKG51bV9ldmVudF9kZWF1dGgpLCAxfSwKKwl7Im51bV9ldnRfZGlzYXNzb2MiLCBpdGVtX3NpemUobnVtX2V2ZW50X2Rpc2Fzc29jKSwKKwkgaXRlbV9hZGRyKG51bV9ldmVudF9kaXNhc3NvYyksIDF9LAorCXsibnVtX2V2dF9saW5rX2xvc3QiLCBpdGVtX3NpemUobnVtX2V2ZW50X2xpbmtfbG9zdCksCisJIGl0ZW1fYWRkcihudW1fZXZlbnRfbGlua19sb3N0KSwgMX0sCisJeyJudW1fY21kX2RlYXV0aCIsIGl0ZW1fc2l6ZShudW1fY21kX2RlYXV0aCksCisJIGl0ZW1fYWRkcihudW1fY21kX2RlYXV0aCksIDF9LAorCXsibnVtX2NtZF9hc3NvY19vayIsIGl0ZW1fc2l6ZShudW1fY21kX2Fzc29jX3N1Y2Nlc3MpLAorCSBpdGVtX2FkZHIobnVtX2NtZF9hc3NvY19zdWNjZXNzKSwgMX0sCisJeyJudW1fY21kX2Fzc29jX2ZhaWwiLCBpdGVtX3NpemUobnVtX2NtZF9hc3NvY19mYWlsdXJlKSwKKwkgaXRlbV9hZGRyKG51bV9jbWRfYXNzb2NfZmFpbHVyZSksIDF9LAorCXsiY21kX3NlbnQiLCBpdGVtX3NpemUoY21kX3NlbnQpLAorCSBpdGVtX2FkZHIoY21kX3NlbnQpLCAxfSwKKwl7ImRhdGFfc2VudCIsIGl0ZW1fc2l6ZShkYXRhX3NlbnQpLAorCSBpdGVtX2FkZHIoZGF0YV9zZW50KSwgMX0sCisJeyJjbWRfcmVzcF9yZWNlaXZlZCIsIGl0ZW1fc2l6ZShjbWRfcmVzcF9yZWNlaXZlZCksCisJIGl0ZW1fYWRkcihjbWRfcmVzcF9yZWNlaXZlZCksIDF9LAorCXsiZXZlbnRfcmVjZWl2ZWQiLCBpdGVtX3NpemUoZXZlbnRfcmVjZWl2ZWQpLAorCSBpdGVtX2FkZHIoZXZlbnRfcmVjZWl2ZWQpLCAxfSwKKworCS8qIHZhcmlhYmxlcyBkZWZpbmVkIGluIHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgKi8KKwl7ImNtZF9wZW5kaW5nIiwgYWRhcHRlcl9pdGVtX3NpemUoY21kX3BlbmRpbmcpLAorCSBhZGFwdGVyX2l0ZW1fYWRkcihjbWRfcGVuZGluZyksIDF9LAorCXsidHhfcGVuZGluZyIsIGFkYXB0ZXJfaXRlbV9zaXplKHR4X3BlbmRpbmcpLAorCSBhZGFwdGVyX2l0ZW1fYWRkcih0eF9wZW5kaW5nKSwgMX0sCisJeyJyeF9wZW5kaW5nIiwgYWRhcHRlcl9pdGVtX3NpemUocnhfcGVuZGluZyksCisJIGFkYXB0ZXJfaXRlbV9hZGRyKHJ4X3BlbmRpbmcpLCAxfSwKK307CisKK3N0YXRpYyBpbnQgbnVtX29mX2l0ZW1zID0gQVJSQVlfU0laRShpdGVtcyk7CisKIC8qCiAgKiBGaXJtd2FyZSBpbml0aWFsaXphdGlvbiBjb21wbGV0ZSBjYWxsYmFjayBoYW5kbGVyLgogICoKQEAgLTk3LDYgKzE4Nyw4IEBACiAJCQkJCQkJICAgICAgaW5mby0+cnhfdGJsKTsKIAkJaW5mby0+dHhfdGJsX251bSA9IG13aWZpZXhfZ2V0X3R4X2JhX3N0cmVhbV90YmwocHJpdiwKIAkJCQkJCQkJaW5mby0+dHhfdGJsKTsKKwkJaW5mby0+dGRsc19wZWVyX251bSA9IG13aWZpZXhfZ2V0X3RkbHNfbGlzdChwcml2LAorCQkJCQkJCSAgICBpbmZvLT50ZGxzX2xpc3QpOwogCQlpbmZvLT5wc19tb2RlID0gYWRhcHRlci0+cHNfbW9kZTsKIAkJaW5mby0+cHNfc3RhdGUgPSBhZGFwdGVyLT5wc19zdGF0ZTsKIAkJaW5mby0+aXNfZGVlcF9zbGVlcCA9IGFkYXB0ZXItPmlzX2RlZXBfc2xlZXA7CkBAIC0xNDEsNiArMjMzLDkzIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBtd2lmaWV4X2RlYnVnX2luZm9fdG9fYnVmZmVyKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNoYXIgKmJ1ZiwKKwkJCQkgc3RydWN0IG13aWZpZXhfZGVidWdfaW5mbyAqaW5mbykKK3sKKwljaGFyICpwID0gYnVmOworCXN0cnVjdCBtd2lmaWV4X2RlYnVnX2RhdGEgKmQgPSAmaXRlbXNbMF07CisJc2l6ZV90IHNpemUsIGFkZHI7CisJbG9uZyB2YWw7CisJaW50IGksIGo7CisKKwlpZiAoIWluZm8pCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IG51bV9vZl9pdGVtczsgaSsrKSB7CisJCXAgKz0gc3ByaW50ZihwLCAiJXM9IiwgZFtpXS5uYW1lKTsKKworCQlzaXplID0gZFtpXS5zaXplIC8gZFtpXS5udW07CisKKwkJaWYgKGkgPCAobnVtX29mX2l0ZW1zIC0gMykpCisJCQlhZGRyID0gZFtpXS5hZGRyICsgKHNpemVfdClpbmZvOworCQllbHNlIC8qIFRoZSBsYXN0IDMgaXRlbXMgYXJlIHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIgdmFyaWFibGVzICovCisJCQlhZGRyID0gZFtpXS5hZGRyICsgKHNpemVfdClwcml2LT5hZGFwdGVyOworCisJCWZvciAoaiA9IDA7IGogPCBkW2ldLm51bTsgaisrKSB7CisJCQlzd2l0Y2ggKHNpemUpIHsKKwkJCWNhc2UgMToKKwkJCQl2YWwgPSAqKCh1OCAqKWFkZHIpOworCQkJCWJyZWFrOworCQkJY2FzZSAyOgorCQkJCXZhbCA9ICooKHUxNiAqKWFkZHIpOworCQkJCWJyZWFrOworCQkJY2FzZSA0OgorCQkJCXZhbCA9ICooKHUzMiAqKWFkZHIpOworCQkJCWJyZWFrOworCQkJY2FzZSA4OgorCQkJCXZhbCA9ICooKGxvbmcgbG9uZyAqKWFkZHIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl2YWwgPSAtMTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcCArPSBzcHJpbnRmKHAsICIlI2x4ICIsIHZhbCk7CisJCQlhZGRyICs9IHNpemU7CisJCX0KKworCQlwICs9IHNwcmludGYocCwgIlxuIik7CisJfQorCisJaWYgKGluZm8tPnR4X3RibF9udW0pIHsKKwkJcCArPSBzcHJpbnRmKHAsICJUeCBCQSBzdHJlYW0gdGFibGU6XG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnR4X3RibF9udW07IGkrKykKKwkJCXAgKz0gc3ByaW50ZihwLCAidGlkID0gJWQsIHJhID0gJXBNXG4iLAorCQkJCSAgICAgaW5mby0+dHhfdGJsW2ldLnRpZCwgaW5mby0+dHhfdGJsW2ldLnJhKTsKKwl9CisKKwlpZiAoaW5mby0+cnhfdGJsX251bSkgeworCQlwICs9IHNwcmludGYocCwgIlJ4IHJlb3JkZXIgdGFibGU6XG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnJ4X3RibF9udW07IGkrKykgeworCQkJcCArPSBzcHJpbnRmKHAsICJ0aWQgPSAlZCwgdGEgPSAlcE0sICIsCisJCQkJICAgICBpbmZvLT5yeF90YmxbaV0udGlkLAorCQkJCSAgICAgaW5mby0+cnhfdGJsW2ldLnRhKTsKKwkJCXAgKz0gc3ByaW50ZihwLCAic3RhcnRfd2luID0gJWQsICIsCisJCQkJICAgICBpbmZvLT5yeF90YmxbaV0uc3RhcnRfd2luKTsKKwkJCXAgKz0gc3ByaW50ZihwLCAid2luX3NpemUgPSAlZCwgYnVmZmVyOiAiLAorCQkJCSAgICAgaW5mby0+cnhfdGJsW2ldLndpbl9zaXplKTsKKworCQkJZm9yIChqID0gMDsgaiA8IGluZm8tPnJ4X3RibFtpXS53aW5fc2l6ZTsgaisrKQorCQkJCXAgKz0gc3ByaW50ZihwLCAiJWMgIiwKKwkJCQkJICAgICBpbmZvLT5yeF90YmxbaV0uYnVmZmVyW2pdID8KKwkJCQkJICAgICAnMScgOiAnMCcpOworCisJCQlwICs9IHNwcmludGYocCwgIlxuIik7CisJCX0KKwl9CisKKwlpZiAoaW5mby0+dGRsc19wZWVyX251bSkgeworCQlwICs9IHNwcmludGYocCwgIlRETFMgcGVlciB0YWJsZTpcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+dGRsc19wZWVyX251bTsgaSsrKSB7CisJCQlwICs9IHNwcmludGYocCwgInBlZXIgPSAlcE0iLAorCQkJCSAgICAgaW5mby0+dGRsc19saXN0W2ldLnBlZXJfYWRkcik7CisJCQlwICs9IHNwcmludGYocCwgIlxuIik7CisJCX0KKwl9CisKKwlyZXR1cm4gcCAtIGJ1ZjsKK30KKwogc3RhdGljIGludAogbXdpZmlleF9wYXJzZV9tZ210X3BhY2tldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCAqcGF5bG9hZCwgdTE2IGxlbiwKIAkJCSAgc3RydWN0IHJ4cGQgKnJ4X3BkKQpAQCAtMjA4LDcgKzM4Nyw3IEBACiAJcGt0X2xlbiAtPSBFVEhfQUxFTiArIHNpemVvZihwa3RfbGVuKTsKIAlyeF9wZC0+cnhfcGt0X2xlbmd0aCA9IGNwdV90b19sZTE2KHBrdF9sZW4pOwogCi0JY2ZnODAyMTFfcnhfbWdtdChwcml2LT53ZGV2LCBwcml2LT5yb2NfY2ZnLmNoYW4uY2VudGVyX2ZyZXEsCisJY2ZnODAyMTFfcnhfbWdtdCgmcHJpdi0+d2RldiwgcHJpdi0+cm9jX2NmZy5jaGFuLmNlbnRlcl9mcmVxLAogCQkJIENBTF9SU1NJKHJ4X3BkLT5zbnIsIHJ4X3BkLT5uZiksIHNrYi0+ZGF0YSwgcGt0X2xlbiwKIAkJCSAwKTsKIApAQCAtNDA0LDMgKzU4Myw0NCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnN0YV9saXN0X3NwaW5sb2NrLCBmbGFncyk7CiAJcmV0dXJuOwogfQorCisvKiBUaGlzIGZ1bmN0aW9uIGFkZHMgaGlzdG9ncmFtIGRhdGEgdG8gaGlzdG9ncmFtIGFycmF5Ki8KK3ZvaWQgbXdpZmlleF9oaXN0X2RhdGFfYWRkKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsCisJCQkgICB1OCByeF9yYXRlLCBzOCBzbnIsIHM4IG5mbHIpCit7CisJc3RydWN0IG13aWZpZXhfaGlzdG9ncmFtX2RhdGEgKnBoaXN0X2RhdGEgPSBwcml2LT5oaXN0X2RhdGE7CisKKwlpZiAoYXRvbWljX3JlYWQoJnBoaXN0X2RhdGEtPm51bV9zYW1wbGVzKSA+IE1XSUZJRVhfSElTVF9NQVhfU0FNUExFUykKKwkJbXdpZmlleF9oaXN0X2RhdGFfcmVzZXQocHJpdik7CisJbXdpZmlleF9oaXN0X2RhdGFfc2V0KHByaXYsIHJ4X3JhdGUsIHNuciwgbmZscik7Cit9CisKKy8qIGZ1bmN0aW9uIHRvIGFkZCBoaXN0b2dyYW0gcmVjb3JkICovCit2b2lkIG13aWZpZXhfaGlzdF9kYXRhX3NldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LCB1OCByeF9yYXRlLCBzOCBzbnIsCisJCQkgICBzOCBuZmxyKQoreworCXN0cnVjdCBtd2lmaWV4X2hpc3RvZ3JhbV9kYXRhICpwaGlzdF9kYXRhID0gcHJpdi0+aGlzdF9kYXRhOworCisJYXRvbWljX2luYygmcGhpc3RfZGF0YS0+bnVtX3NhbXBsZXMpOworCWF0b21pY19pbmMoJnBoaXN0X2RhdGEtPnJ4X3JhdGVbcnhfcmF0ZV0pOworCWF0b21pY19pbmMoJnBoaXN0X2RhdGEtPnNucltzbnJdKTsKKwlhdG9taWNfaW5jKCZwaGlzdF9kYXRhLT5ub2lzZV9mbHJbMTI4ICsgbmZscl0pOworCWF0b21pY19pbmMoJnBoaXN0X2RhdGEtPnNpZ19zdHJbbmZsciAtIHNucl0pOworfQorCisvKiBmdW5jdGlvbiB0byByZXNldCBoaXN0b2dyYW0gZGF0YSBkdXJpbmcgaW5pdC9yZXNldCAqLwordm9pZCBtd2lmaWV4X2hpc3RfZGF0YV9yZXNldChzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2KQoreworCWludCBpeDsKKwlzdHJ1Y3QgbXdpZmlleF9oaXN0b2dyYW1fZGF0YSAqcGhpc3RfZGF0YSA9IHByaXYtPmhpc3RfZGF0YTsKKworCWF0b21pY19zZXQoJnBoaXN0X2RhdGEtPm51bV9zYW1wbGVzLCAwKTsKKwlmb3IgKGl4ID0gMDsgaXggPCBNV0lGSUVYX01BWF9BQ19SWF9SQVRFUzsgaXgrKykKKwkJYXRvbWljX3NldCgmcGhpc3RfZGF0YS0+cnhfcmF0ZVtpeF0sIDApOworCWZvciAoaXggPSAwOyBpeCA8IE1XSUZJRVhfTUFYX1NOUjsgaXgrKykKKwkJYXRvbWljX3NldCgmcGhpc3RfZGF0YS0+c25yW2l4XSwgMCk7CisJZm9yIChpeCA9IDA7IGl4IDwgTVdJRklFWF9NQVhfTk9JU0VfRkxSOyBpeCsrKQorCQlhdG9taWNfc2V0KCZwaGlzdF9kYXRhLT5ub2lzZV9mbHJbaXhdLCAwKTsKKwlmb3IgKGl4ID0gMDsgaXggPCBNV0lGSUVYX01BWF9TSUdfU1RSRU5HVEg7IGl4KyspCisJCWF0b21pY19zZXQoJnBoaXN0X2RhdGEtPnNpZ19zdHJbaXhdLCAwKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvdXRpbC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91dGlsLmgKaW5kZXggNDAyOTZjYi4uYjU0MWQ2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91dGlsLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC91dGlsLmgKQEAgLTIwLDYgKzIwLDggQEAKICNpZm5kZWYgX01XSUZJRVhfVVRJTF9IXwogI2RlZmluZSBfTVdJRklFWF9VVElMX0hfCiAKK3N0cnVjdCBtd2lmaWV4X3ByaXZhdGU7CisKIHN0cnVjdCBtd2lmaWV4X2RtYV9tYXBwaW5nIHsKIAlkbWFfYWRkcl90IGFkZHI7CiAJc2l6ZV90IGxlbjsKQEAgLTMzLDYgKzM1LDIxIEBACiAJfTsKIH07CiAKKy8qIHNpemUvYWRkciBmb3IgbXdpZmlleF9kZWJ1Z19pbmZvICovCisjZGVmaW5lIGl0ZW1fc2l6ZShuKQkJKEZJRUxEX1NJWkVPRihzdHJ1Y3QgbXdpZmlleF9kZWJ1Z19pbmZvLCBuKSkKKyNkZWZpbmUgaXRlbV9hZGRyKG4pCQkob2Zmc2V0b2Yoc3RydWN0IG13aWZpZXhfZGVidWdfaW5mbywgbikpCisKKy8qIHNpemUvYWRkciBmb3Igc3RydWN0IG13aWZpZXhfYWRhcHRlciAqLworI2RlZmluZSBhZGFwdGVyX2l0ZW1fc2l6ZShuKQkoRklFTERfU0laRU9GKHN0cnVjdCBtd2lmaWV4X2FkYXB0ZXIsIG4pKQorI2RlZmluZSBhZGFwdGVyX2l0ZW1fYWRkcihuKQkob2Zmc2V0b2Yoc3RydWN0IG13aWZpZXhfYWRhcHRlciwgbikpCisKK3N0cnVjdCBtd2lmaWV4X2RlYnVnX2RhdGEgeworCWNoYXIgbmFtZVszMl07CQkvKiB2YXJpYWJsZS9hcnJheSBuYW1lICovCisJdTMyIHNpemU7CQkvKiBzaXplIG9mIHRoZSB2YXJpYWJsZS9hcnJheSAqLworCXNpemVfdCBhZGRyOwkJLyogYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUvYXJyYXkgKi8KKwlpbnQgbnVtOwkJLyogbnVtYmVyIG9mIHZhcmlhYmxlcyBpbiBhbiBhcnJheSAqLworfTsKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbXdpZmlleF9yeGluZm8gKk1XSUZJRVhfU0tCX1JYQ0Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbXdpZmlleF9jYiAqY2IgPSAoc3RydWN0IG13aWZpZXhfY2IgKilza2ItPmNiOwpAQCAtNzMsNCArOTAsNyBAQAogCXJldHVybiBtYXBwaW5nLmFkZHI7CiB9CiAKK2ludCBtd2lmaWV4X2RlYnVnX2luZm9fdG9fYnVmZmVyKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsIGNoYXIgKmJ1ZiwKKwkJCQkgc3RydWN0IG13aWZpZXhfZGVidWdfaW5mbyAqaW5mbyk7CisKICNlbmRpZiAvKiAhX01XSUZJRVhfVVRJTF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC93bW0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213aWZpZXgvd21tLmMKaW5kZXggZmZmZmQyYy4uZWY3MTdhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdpZmlleC93bW0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2lmaWV4L3dtbS5jCkBAIC0xMjI4LDYgKzEyMjgsOSBAQAogCWNhc2UgLUVJTlBST0dSRVNTOgogCQlpZiAoYWRhcHRlci0+aWZhY2VfdHlwZSAhPSBNV0lGSUVYX1BDSUUpCiAJCQlhZGFwdGVyLT5kYXRhX3NlbnQgPSBmYWxzZTsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQltd2lmaWV4X3dyaXRlX2RhdGFfY29tcGxldGUoYWRhcHRlciwgc2tiLCAwLCByZXQpOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCmluZGV4IGI4ZDFlMDQuLmY5YjEyMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwpAQCAtMzA5OCwxNCArMzA5OCwxNCBAQAogCiAJY2NhX2NudCA9IGlvcmVhZDMyKHByaXYtPnJlZ3MgKyBOT0tfQ0NBX0NOVF9SRUcpOwogCWNjYV9jbnQgLz0gMTAwMDsgLyogdVNlY3MgdG8gbVNlY3MgKi8KLQlzdXJ2ZXktPmNoYW5uZWxfdGltZV9idXN5ID0gKHU2NCkgY2NhX2NudDsKKwlzdXJ2ZXktPnRpbWVfYnVzeSA9ICh1NjQpIGNjYV9jbnQ7CiAKIAlyeF9yZHkgPSBpb3JlYWQzMihwcml2LT5yZWdzICsgQkJVX1JYUkRZX0NOVF9SRUcpOwogCXJ4X3JkeSAvPSAxMDAwOyAvKiB1U2VjcyB0byBtU2VjcyAqLwotCXN1cnZleS0+Y2hhbm5lbF90aW1lX3J4ID0gKHU2NCkgcnhfcmR5OworCXN1cnZleS0+dGltZV9yeCA9ICh1NjQpIHJ4X3JkeTsKIAogCXByaXYtPmNoYW5uZWxfdGltZSA9IGppZmZpZXMgLSBwcml2LT5jaGFubmVsX3RpbWU7Ci0Jc3VydmV5LT5jaGFubmVsX3RpbWUgPSBqaWZmaWVzX3RvX21zZWNzKHByaXYtPmNoYW5uZWxfdGltZSk7CisJc3VydmV5LT50aW1lID0gamlmZmllc190b19tc2Vjcyhwcml2LT5jaGFubmVsX3RpbWUpOwogCiAJc3VydmV5LT5jaGFubmVsID0gY2hhbm5lbDsKIApAQCAtMzExNSw5ICszMTE1LDkgQEAKIAlzdXJ2ZXktPm5vaXNlID0gbmYgKiAtMTsKIAogCXN1cnZleS0+ZmlsbGVkID0gU1VSVkVZX0lORk9fTk9JU0VfREJNIHwKLQkJCSBTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUUgfAotCQkJIFNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRV9CVVNZIHwKLQkJCSBTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfUlg7CisJCQkgU1VSVkVZX0lORk9fVElNRSB8CisJCQkgU1VSVkVZX0lORk9fVElNRV9CVVNZIHwKKwkJCSBTVVJWRVlfSU5GT19USU1FX1JYOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9LY29uZmlnCmluZGV4IDYwNjk4YjAuLjZkODMxZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL0tjb25maWcKQEAgLTEsNyArMSw4IEBACiBjb25maWcgSEVSTUVTCiAJdHJpc3RhdGUgIkhlcm1lcyBjaGlwc2V0IDgwMi4xMWIgc3VwcG9ydCAoT3Jpbm9jby9QcmlzbTIvU3ltYm9sKSIKIAlkZXBlbmRzIG9uIChQUENfUE1BQyB8fCBQQ0kgfHwgUENNQ0lBKQotCWRlcGVuZHMgb24gQ0ZHODAyMTEgJiYgQ0ZHODAyMTFfV0VYVAorCWRlcGVuZHMgb24gQ0ZHODAyMTEKKwlzZWxlY3QgQ0ZHODAyMTFfV0VYVAogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgV0VYVF9TUFkKIAlzZWxlY3QgV0VYVF9QUklWCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCmluZGV4IDM4ZWM4ZDEuLmM0MTAxODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jCkBAIC0yMzQyLDcgKzIzNDIsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZCwgc2R0ZW1wLCAmcHJpdi0+c2Nhbl9saXN0LCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZzZC0+bGlzdCk7CiAKLQkJaWYgKChzZC0+bGVuID4gMCkgJiYgc2QtPmJ1ZikKKwkJaWYgKHNkLT5sZW4gPiAwKQogCQkJa2ZyZWUoc2QtPmJ1Zik7CiAJCWtmcmVlKHNkKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMKaW5kZXggYjZiZGFkNi4uNzQyMTlkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYwpAQCAtOTQsNyArOTQsNyBAQAogCW1kZWxheShIRVJNRVNfUENJX0NPUl9PRkZUKTsKIAogCS8qIFRoZSBjYXJkIGlzIHJlYWR5IHdoZW4gaXQncyBubyBsb25nZXIgYnVzeSAqLwotCXRpbWVvdXQgPSBqaWZmaWVzICsgKEhFUk1FU19QQ0lfQ09SX0JVU1lUICogSFogLyAxMDAwKTsKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSEVSTUVTX1BDSV9DT1JfQlVTWVQpOwogCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIENNRCk7CiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpICYmIChyZWcgJiBIRVJNRVNfQ01EX0JVU1kpKSB7CiAJCW1kZWxheSgxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYwppbmRleCBiOGY2ZTVjLi44YjA0NTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BseC5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAltZGVsYXkoMSk7CiAKIAkvKiBKdXN0IGluIGNhc2UsIHdhaXQgbW9yZSB1bnRpbCB0aGUgY2FyZCBpcyBubyBsb25nZXIgYnVzeSAqLwotCXRpbWVvdXQgPSBqaWZmaWVzICsgKFBMWF9SRVNFVF9USU1FICogSFogLyAxMDAwKTsKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoUExYX1JFU0VUX1RJTUUpOwogCXJlZyA9IGhlcm1lc19yZWFkX3JlZ24oaHcsIENNRCk7CiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpICYmIChyZWcgJiBIRVJNRVNfQ01EX0JVU1kpKSB7CiAJCW1kZWxheSgxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYwppbmRleCA3OWQwZTMzLi4yMGNlNTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3RtZC5jCkBAIC03MSw3ICs3MSw3IEBACiAJbWRlbGF5KDEpOwogCiAJLyogSnVzdCBpbiBjYXNlLCB3YWl0IG1vcmUgdW50aWwgdGhlIGNhcmQgaXMgbm8gbG9uZ2VyIGJ1c3kgKi8KLQl0aW1lb3V0ID0gamlmZmllcyArIChUTURfUkVTRVRfVElNRSAqIEhaIC8gMTAwMCk7CisJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFRNRF9SRVNFVF9USU1FKTsKIAlyZWcgPSBoZXJtZXNfcmVhZF9yZWduKGh3LCBDTUQpOwogCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSAmJiAocmVnICYgSEVSTUVTX0NNRF9CVVNZKSkgewogCQltZGVsYXkoMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdXNiLmMKaW5kZXggOTk1ODQ2NC4uOTFmMDU0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb191c2IuYwpAQCAtMzY0LDkgKzM2NCw3IEBACiAJYXRvbWljX3NldCgmY3R4LT5yZWZjb3VudCwgMSk7CiAJaW5pdF9jb21wbGV0aW9uKCZjdHgtPmRvbmUpOwogCi0JaW5pdF90aW1lcigmY3R4LT50aW1lcik7Ci0JY3R4LT50aW1lci5mdW5jdGlvbiA9IGV6dXNiX3JlcXVlc3RfdGltZXJmbjsKLQljdHgtPnRpbWVyLmRhdGEgPSAodV9sb25nKSBjdHg7CisJc2V0dXBfdGltZXIoJmN0eC0+dGltZXIsIGV6dXNiX3JlcXVlc3RfdGltZXJmbiwgKHVfbG9uZyljdHgpOwogCXJldHVybiBjdHg7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9lZXByb20uYwppbmRleCAwZmU2N2QyLi4yZmU3MTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2VlcHJvbS5jCkBAIC0xOTYsOSArMTk2LDkgQEAKIAkJZGVzdC0+bWF4X3Bvd2VyID0gY2hhbi0+bWF4X3Bvd2VyOwogCQlwcml2LT5zdXJ2ZXlbKmNoYW5fbnVtXS5jaGFubmVsID0gJnRtcC0+Y2hhbm5lbHNbal07CiAJCXByaXYtPnN1cnZleVsqY2hhbl9udW1dLmZpbGxlZCA9IFNVUlZFWV9JTkZPX05PSVNFX0RCTSB8Ci0JCQlTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUUgfAotCQkJU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX0JVU1kgfAotCQkJU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1RYOworCQkJU1VSVkVZX0lORk9fVElNRSB8CisJCQlTVVJWRVlfSU5GT19USU1FX0JVU1kgfAorCQkJU1VSVkVZX0lORk9fVElNRV9UWDsKIAkJZGVzdC0+aHdfdmFsdWUgPSAoKmNoYW5fbnVtKTsKIAkJaisrOwogCQkoKmNoYW5fbnVtKSsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2Z3aW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9md2lvLmMKaW5kZXggYmMwNjVlOC4uNTM2N2Q1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L2Z3aW8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvZndpby5jCkBAIC0yMjAsNiArMjIwLDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNpemVfdCBlZXByb21faGRyX3NpemU7CiAJaW50IHJldCA9IDA7CisJbG9uZyB0aW1lb3V0OwogCiAJaWYgKHByaXYtPmZ3X3ZhciA+PSAweDUwOSkKIAkJZWVwcm9tX2hkcl9zaXplID0gc2l6ZW9mKCplZXByb21faGRyKTsKQEAgLTI0OSw5ICsyNTAsMTEgQEAKIAogCXA1NF90eChwcml2LCBza2IpOwogCi0JaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKLQkgICAgICZwcml2LT5lZXByb21fY29tcCwgSFopKSB7Ci0JCXdpcGh5X2Vycihwcml2LT5ody0+d2lwaHksICJkZXZpY2UgZG9lcyBub3QgcmVzcG9uZCFcbiIpOworCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJCSZwcml2LT5lZXByb21fY29tcCwgSFopOworCWlmICh0aW1lb3V0IDw9IDApIHsKKwkJd2lwaHlfZXJyKHByaXYtPmh3LT53aXBoeSwKKwkJCSJkZXZpY2UgZG9lcyBub3QgcmVzcG9uZCBvciBzaWduYWwgcmVjZWl2ZWQhXG4iKTsKIAkJcmV0ID0gLUVCVVNZOwogCX0KIAlwcml2LT5lZXByb20gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMKaW5kZXggOTdhZWZmMC4uYjkyNTBkNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L21haW4uYwpAQCAtMzA1LDkgKzMwNSw5IEBACiAJCXN0cnVjdCBzdXJ2ZXlfaW5mbyAqaW5mbyA9ICZwcml2LT5zdXJ2ZXlbY2hhbi0+aHdfdmFsdWVdOwogCiAJCS8qIG9ubHkgcmVzZXQgY2hhbm5lbCBzdGF0aXN0aWNzLCBkb24ndCB0b3VjaCAuZmlsbGVkLCBldGMuICovCi0JCWluZm8tPmNoYW5uZWxfdGltZSA9IDA7Ci0JCWluZm8tPmNoYW5uZWxfdGltZV9idXN5ID0gMDsKLQkJaW5mby0+Y2hhbm5lbF90aW1lX3R4ID0gMDsKKwkJaW5mby0+dGltZSA9IDA7CisJCWluZm8tPnRpbWVfYnVzeSA9IDA7CisJCWluZm8tPnRpbWVfdHggPSAwOwogCX0KIAogCXByaXYtPnVwZGF0ZV9zdGF0cyA9IHRydWU7CkBAIC01NzUsNiArNTc1LDggQEAKIAkJCWtleS0+aHdfa2V5X2lkeCA9IDB4ZmY7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KKworCQlrZXktPmZsYWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19SRVNFUlZFX1RBSUxST09NOwogCX0gZWxzZSB7CiAJCXNsb3QgPSBrZXktPmh3X2tleV9pZHg7CiAKQEAgLTYzNCw3ICs2MzYsNyBAQAogCiAJCWlmIChpbl91c2UpIHsKIAkJCS8qIHRlc3QgaWYgdGhlIHJlcG9ydGVkIHN0YXRpc3RpY3MgYXJlIHZhbGlkLiAqLwotCQkJaWYgIChzdXJ2ZXktPmNoYW5uZWxfdGltZSAhPSAwKSB7CisJCQlpZiAgKHN1cnZleS0+dGltZSAhPSAwKSB7CiAJCQkJc3VydmV5LT5maWxsZWQgfD0gU1VSVkVZX0lORk9fSU5fVVNFOwogCQkJfSBlbHNlIHsKIAkJCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCmluZGV4IGQ0YWVlNjQuLjI3YTQ5MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKQEAgLTQzMSw2ICs0MzEsNyBAQAogewogCXN0cnVjdCBwNTRwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJaW50IGVycjsKKwlsb25nIHRpbWVvdXQ7CiAKIAlpbml0X2NvbXBsZXRpb24oJnByaXYtPmJvb3RfY29tcCk7CiAJZXJyID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCBwNTRwX2ludGVycnVwdCwKQEAgLTQ2OCwxMCArNDY5LDEyIEBACiAJUDU0UF9XUklURShkZXZfaW50LCBjcHVfdG9fbGUzMihJU0wzOFhYX0RFVl9JTlRfUkVTRVQpKTsKIAlQNTRQX1JFQUQoZGV2X2ludCk7CiAKLQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KCZwcml2LT5ib290X2NvbXAsIEhaKSkgeworCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJCSZwcml2LT5ib290X2NvbXAsIEhaKTsKKwlpZiAodGltZW91dCA8PSAwKSB7CiAJCXdpcGh5X2VycihkZXYtPndpcGh5LCAiQ2Fubm90IGJvb3QgZmlybXdhcmUhXG4iKTsKIAkJcDU0cF9zdG9wKGRldik7Ci0JCXJldHVybiAtRVRJTUVET1VUOworCQlyZXR1cm4gdGltZW91dCA/IC1FUkVTVEFSVFNZUyA6IC1FVElNRURPVVQ7CiAJfQogCiAJUDU0UF9XUklURShpbnRfZW5hYmxlLCBjcHVfdG9fbGUzMihJU0wzOFhYX0lOVF9JREVOVF9VUERBVEUpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvdHhyeC5jCmluZGV4IDE1M2M2MTUuLjI0ZTVmZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3R4cnguYwpAQCAtNTg3LDEzICs1ODcsMTMgQEAKIAlpZiAoY2hhbikgewogCQlzdHJ1Y3Qgc3VydmV5X2luZm8gKnN1cnZleSA9ICZwcml2LT5zdXJ2ZXlbY2hhbi0+aHdfdmFsdWVdOwogCQlzdXJ2ZXktPm5vaXNlID0gY2xhbXAocHJpdi0+bm9pc2UsIC0xMjgsIDEyNyk7Ci0JCXN1cnZleS0+Y2hhbm5lbF90aW1lID0gcHJpdi0+c3VydmV5X3Jhdy5hY3RpdmU7Ci0JCXN1cnZleS0+Y2hhbm5lbF90aW1lX3R4ID0gcHJpdi0+c3VydmV5X3Jhdy50eDsKLQkJc3VydmV5LT5jaGFubmVsX3RpbWVfYnVzeSA9IHByaXYtPnN1cnZleV9yYXcudHggKworCQlzdXJ2ZXktPnRpbWUgPSBwcml2LT5zdXJ2ZXlfcmF3LmFjdGl2ZTsKKwkJc3VydmV5LT50aW1lX3R4ID0gcHJpdi0+c3VydmV5X3Jhdy50eDsKKwkJc3VydmV5LT50aW1lX2J1c3kgPSBwcml2LT5zdXJ2ZXlfcmF3LnR4ICsKIAkJCXByaXYtPnN1cnZleV9yYXcuY2NhOwotCQlkb19kaXYoc3VydmV5LT5jaGFubmVsX3RpbWUsIDEwMjQpOwotCQlkb19kaXYoc3VydmV5LT5jaGFubmVsX3RpbWVfdHgsIDEwMjQpOwotCQlkb19kaXYoc3VydmV5LT5jaGFubmVsX3RpbWVfYnVzeSwgMTAyNCk7CisJCWRvX2RpdihzdXJ2ZXktPnRpbWUsIDEwMjQpOworCQlkb19kaXYoc3VydmV5LT50aW1lX3R4LCAxMDI0KTsKKwkJZG9fZGl2KHN1cnZleS0+dGltZV9idXN5LCAxMDI0KTsKIAl9CiAKIAl0bXAgPSBwNTRfZmluZF9hbmRfdW5saW5rX3NrYihwcml2LCBoZHItPnJlcV9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKaW5kZXggMWE0ZmFjZC4uNjBkNDRjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwpAQCAtMjQ3OCw3ICsyNDc4LDcgQEAKIAlyZXQgPSBybmRpc19xdWVyeV9vaWQodXNiZGV2LCBSTkRJU19PSURfR0VOX0xJTktfU1BFRUQsICZsaW5rc3BlZWQsICZsZW4pOwogCWlmIChyZXQgPT0gMCkgewogCQlzaW5mby0+dHhyYXRlLmxlZ2FjeSA9IGxlMzJfdG9fY3B1KGxpbmtzcGVlZCkgLyAxMDAwOwotCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19UWF9CSVRSQVRFOworCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUpOwogCX0KIAogCWxlbiA9IHNpemVvZihyc3NpKTsKQEAgLTI0ODYsNyArMjQ4Niw3IEBACiAJCQkgICAgICAmcnNzaSwgJmxlbik7CiAJaWYgKHJldCA9PSAwKSB7CiAJCXNpbmZvLT5zaWduYWwgPSBsZXZlbF90b19xdWFsKGxlMzJfdG9fY3B1KHJzc2kpKTsKLQkJc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fU0lHTkFMOworCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX1NJR05BTCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvX29wcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnNpL3JzaV85MXhfc2Rpb19vcHMuYwppbmRleCA0ODM0YTlhLi5iNmNjOWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yc2kvcnNpXzkxeF9zZGlvX29wcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JzaS9yc2lfOTF4X3NkaW9fb3BzLmMKQEAgLTE3Miw3ICsxNzIsNiBAQAogCQkoc3RydWN0IHJzaV85MXhfc2Rpb2RldiAqKWFkYXB0ZXItPnJzaV9kZXY7CiAJdTMyIGxlbjsKIAl1MzIgbnVtX2Jsb2NrczsKLQljb25zdCB1OCAqZnc7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmd19lbnRyeSA9IE5VTEw7CiAJdTMyIGJsb2NrX3NpemUgPSBkZXYtPnR4X2Jsa19zaXplOwogCWludCBzdGF0dXMgPSAwOwpAQCAtMjAxLDcgKzIwMCw2IEBACiAJCXJldHVybiBzdGF0dXM7CiAJfQogCi0JZncgPSBrbWVtZHVwKGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSwgR0ZQX0tFUk5FTCk7CiAJbGVuID0gZndfZW50cnktPnNpemU7CiAKIAlpZiAobGVuICUgNCkKQEAgLTIxMiw3ICsyMTAsNyBAQAogCXJzaV9kYmcoSU5JVF9aT05FLCAiJXM6IEluc3RydWN0aW9uIHNpemU6JWRcbiIsIF9fZnVuY19fLCBsZW4pOwogCXJzaV9kYmcoSU5JVF9aT05FLCAiJXM6IG51bSBibG9ja3M6ICVkXG4iLCBfX2Z1bmNfXywgbnVtX2Jsb2Nrcyk7CiAKLQlzdGF0dXMgPSByc2lfY29weV90b19jYXJkKGNvbW1vbiwgZncsIGxlbiwgbnVtX2Jsb2Nrcyk7CisJc3RhdHVzID0gcnNpX2NvcHlfdG9fY2FyZChjb21tb24sIGZ3X2VudHJ5LT5kYXRhLCBsZW4sIG51bV9ibG9ja3MpOwogCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwogCXJldHVybiBzdGF0dXM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMKaW5kZXggODFlZTQ4MS4uYmUyZDU0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYwpAQCAtODAyMCwxMyArODAyMCwxMyBAQAogCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ0hfQlVTWV9TVEFfU0VDLCAmYnVzeV9leHQpOwogCiAJaWYgKGlkbGUgfHwgYnVzeSkgewotCQlzdXJ2ZXktPmZpbGxlZCA9IFNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRSB8Ci0JCQkJIFNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRV9CVVNZIHwKLQkJCQkgU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX0VYVF9CVVNZOworCQlzdXJ2ZXktPmZpbGxlZCA9IFNVUlZFWV9JTkZPX1RJTUUgfAorCQkJCSBTVVJWRVlfSU5GT19USU1FX0JVU1kgfAorCQkJCSBTVVJWRVlfSU5GT19USU1FX0VYVF9CVVNZOwogCi0JCXN1cnZleS0+Y2hhbm5lbF90aW1lID0gKGlkbGUgKyBidXN5KSAvIDEwMDA7Ci0JCXN1cnZleS0+Y2hhbm5lbF90aW1lX2J1c3kgPSBidXN5IC8gMTAwMDsKLQkJc3VydmV5LT5jaGFubmVsX3RpbWVfZXh0X2J1c3kgPSBidXN5X2V4dCAvIDEwMDA7CisJCXN1cnZleS0+dGltZSA9IChpZGxlICsgYnVzeSkgLyAxMDAwOworCQlzdXJ2ZXktPnRpbWVfYnVzeSA9IGJ1c3kgLyAxMDAwOworCQlzdXJ2ZXktPnRpbWVfZXh0X2J1c3kgPSBidXN5X2V4dCAvIDEwMDA7CiAJfQogCiAJaWYgKCEoaHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9PRkZDSEFOTkVMKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBjb25maWcuYwppbmRleCAxMTIyZGM0Li40OGEyY2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwY29uZmlnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGNvbmZpZy5jCkBAIC0yNDAsNyArMjQwLDcgQEAKIAkJcnQyeDAwZGV2LT5yZl9jaGFubmVsID0gbGliY29uZi5yZi5jaGFubmVsOwogCX0KIAotCWlmICh0ZXN0X2JpdChSRVFVSVJFX1BTX0FVVE9XQUtFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpICYmCisJaWYgKHJ0MngwMF9oYXNfY2FwX2ZsYWcocnQyeDAwZGV2LCBSRVFVSVJFX1BTX0FVVE9XQUtFKSAmJgogCSAgICAoaWVlZTgwMjExX2ZsYWdzICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKSkKIAkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZydDJ4MDBkZXYtPmF1dG93YWtldXBfd29yayk7CiAKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCQlydDJ4MDBsaW5rX3Jlc2V0X3R1bmVyKHJ0MngwMGRldiwgZmFsc2UpOwogCiAJaWYgKHRlc3RfYml0KERFVklDRV9TVEFURV9QUkVTRU5ULCAmcnQyeDAwZGV2LT5mbGFncykgJiYKLQkgICAgdGVzdF9iaXQoUkVRVUlSRV9QU19BVVRPV0FLRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSAmJgorCSAgICBydDJ4MDBfaGFzX2NhcF9mbGFnKHJ0MngwMGRldiwgUkVRVUlSRV9QU19BVVRPV0FLRSkgJiYKIAkgICAgKGllZWU4MDIxMV9mbGFncyAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgJiYKIAkgICAgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpKSB7CiAJCWJlYWNvbl9kaWZmID0gKGxvbmcpamlmZmllcyAtIChsb25nKXJ0MngwMGRldi0+bGFzdF9iZWFjb247CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKaW5kZXggOTk2N2ExZC4uNTYzOWVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJLyoKIAkgKiBSZW1vdmUgTDIgcGFkZGluZyB3aGljaCB3YXMgYWRkZWQgZHVyaW5nCiAJICovCi0JaWYgKHRlc3RfYml0KFJFUVVJUkVfTDJQQUQsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCisJaWYgKHJ0MngwMF9oYXNfY2FwX2ZsYWcocnQyeDAwZGV2LCBSRVFVSVJFX0wyUEFEKSkKIAkJcnQyeDAwcXVldWVfcmVtb3ZlX2wycGFkKGVudHJ5LT5za2IsIGhlYWRlcl9sZW5ndGgpOwogCiAJLyoKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCSAqIHNlbmQgdGhlIHN0YXR1cyByZXBvcnQgYmFjay4KIAkgKi8KIAlpZiAoIShza2JkZXNjX2ZsYWdzICYgU0tCREVTQ19OT1RfTUFDODAyMTEpKSB7Ci0JCWlmICh0ZXN0X2JpdChSRVFVSVJFX1RBU0tMRVRfQ09OVEVYVCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKKwkJaWYgKHJ0MngwMF9oYXNfY2FwX2ZsYWcocnQyeDAwZGV2LCBSRVFVSVJFX1RBU0tMRVRfQ09OVEVYVCkpCiAJCQlpZWVlODAyMTFfdHhfc3RhdHVzKHJ0MngwMGRldi0+aHcsIGVudHJ5LT5za2IpOwogCQllbHNlCiAJCQlpZWVlODAyMTFfdHhfc3RhdHVzX25pKHJ0MngwMGRldi0+aHcsIGVudHJ5LT5za2IpOwpAQCAtMTA1Niw5ICsxMDU2LDkgQEAKIAkvKgogCSAqIFRha2UgVFggaGVhZHJvb20gcmVxdWlyZWQgZm9yIGFsaWdubWVudCBpbnRvIGFjY291bnQuCiAJICovCi0JaWYgKHRlc3RfYml0KFJFUVVJUkVfTDJQQUQsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCisJaWYgKHJ0MngwMF9oYXNfY2FwX2ZsYWcocnQyeDAwZGV2LCBSRVFVSVJFX0wyUEFEKSkKIAkJcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gKz0gUlQyWDAwX0wyUEFEX1NJWkU7Ci0JZWxzZSBpZiAodGVzdF9iaXQoUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCisJZWxzZSBpZiAocnQyeDAwX2hhc19jYXBfZmxhZyhydDJ4MDBkZXYsIFJFUVVJUkVfRE1BKSkKIAkJcnQyeDAwZGV2LT5ody0+ZXh0cmFfdHhfaGVhZHJvb20gKz0gUlQyWDAwX0FMSUdOX1NJWkU7CiAKIAkvKgpAQCAtMTA2OSw3ICsxMDY5LDcgQEAKIAkvKgogCSAqIEFsbG9jYXRlIHR4IHN0YXR1cyBGSUZPIGZvciBkcml2ZXIgdXNlLgogCSAqLwotCWlmICh0ZXN0X2JpdChSRVFVSVJFX1RYU1RBVFVTX0ZJRk8sICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKKwlpZiAocnQyeDAwX2hhc19jYXBfZmxhZyhydDJ4MDBkZXYsIFJFUVVJUkVfVFhTVEFUVVNfRklGTykpIHsKIAkJLyoKIAkJICogQWxsb2NhdGUgdGhlIHR4c3RhdHVzIGZpZm8uIEluIHRoZSB3b3JzdCBjYXNlIHRoZSB0eAogCQkgKiBzdGF0dXMgZmlmbyBoYXMgdG8gaG9sZCB0aGUgdHggc3RhdHVzIG9mIGFsbCBlbnRyaWVzCkBAIC0xMTMxLDcgKzExMzEsNyBAQAogCS8qCiAJICogU3RvcCByZmtpbGwgcG9sbGluZy4KIAkgKi8KLQlpZiAodGVzdF9iaXQoUkVRVUlSRV9ERUxBWUVEX1JGS0lMTCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKKwlpZiAocnQyeDAwX2hhc19jYXBfZmxhZyhydDJ4MDBkZXYsIFJFUVVJUkVfREVMQVlFRF9SRktJTEwpKQogCQlydDJ4MDByZmtpbGxfdW5yZWdpc3RlcihydDJ4MDBkZXYpOwogCiAJLyoKQEAgLTExNzMsNyArMTE3Myw3IEBACiAJLyoKIAkgKiBTdGFydCByZmtpbGwgcG9sbGluZy4KIAkgKi8KLQlpZiAodGVzdF9iaXQoUkVRVUlSRV9ERUxBWUVEX1JGS0lMTCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKKwlpZiAocnQyeDAwX2hhc19jYXBfZmxhZyhydDJ4MDBkZXYsIFJFUVVJUkVfREVMQVlFRF9SRktJTEwpKQogCQlydDJ4MDByZmtpbGxfcmVnaXN0ZXIocnQyeDAwZGV2KTsKIAogCXJldHVybiAwOwpAQCAtMTM4OSw3ICsxMzg5LDcgQEAKIAkvKgogCSAqIFN0YXJ0IHJma2lsbCBwb2xsaW5nLgogCSAqLwotCWlmICghdGVzdF9iaXQoUkVRVUlSRV9ERUxBWUVEX1JGS0lMTCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKKwlpZiAoIXJ0MngwMF9oYXNfY2FwX2ZsYWcocnQyeDAwZGV2LCBSRVFVSVJFX0RFTEFZRURfUkZLSUxMKSkKIAkJcnQyeDAwcmZraWxsX3JlZ2lzdGVyKHJ0MngwMGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTE0MDgsNyArMTQwOCw3IEBACiAJLyoKIAkgKiBTdG9wIHJma2lsbCBwb2xsaW5nLgogCSAqLwotCWlmICghdGVzdF9iaXQoUkVRVUlSRV9ERUxBWUVEX1JGS0lMTCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKKwlpZiAoIXJ0MngwMF9oYXNfY2FwX2ZsYWcocnQyeDAwZGV2LCBSRVFVSVJFX0RFTEFZRURfUkZLSUxMKSkKIAkJcnQyeDAwcmZraWxsX3VucmVnaXN0ZXIocnQyeDAwZGV2KTsKIAogCS8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZmlybXdhcmUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCmluZGV4IGZiYWUyNzkuLjU4MTMzMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBmaXJtd2FyZS5jCkBAIC05Niw3ICs5Niw3IEBACiB7CiAJaW50IHJldHZhbDsKIAotCWlmICghdGVzdF9iaXQoUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKKwlpZiAoIXJ0MngwMF9oYXNfY2FwX2ZsYWcocnQyeDAwZGV2LCBSRVFVSVJFX0ZJUk1XQVJFKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIXJ0MngwMGRldi0+ZncpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYwppbmRleCBjYjQwMjQ1Li4zMDA4NzZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAkgKiBVc2UgdGhlIEFUSU0gcXVldWUgaWYgYXBwcm9wcmlhdGUgYW5kIHByZXNlbnQuCiAJICovCiAJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0gJiYKLQkgICAgdGVzdF9iaXQoUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKQorCSAgICBydDJ4MDBfaGFzX2NhcF9mbGFnKHJ0MngwMGRldiwgUkVRVUlSRV9BVElNX1FVRVVFKSkKIAkJcWlkID0gUUlEX0FUSU07CiAKIAlxdWV1ZSA9IHJ0MngwMHF1ZXVlX2dldF90eF9xdWV1ZShydDJ4MDBkZXYsIHFpZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcXVldWUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCmluZGV4IDY2ZmYzNjQuLjY4YjYyMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jCkBAIC04NSw3ICs4NSw3IEBACiAJbWVtc2V0KHNrYmRlc2MsIDAsIHNpemVvZigqc2tiZGVzYykpOwogCXNrYmRlc2MtPmVudHJ5ID0gZW50cnk7CiAKLQlpZiAodGVzdF9iaXQoUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpIHsKKwlpZiAocnQyeDAwX2hhc19jYXBfZmxhZyhydDJ4MDBkZXYsIFJFUVVJUkVfRE1BKSkgewogCQlkbWFfYWRkcl90IHNrYl9kbWE7CiAKIAkJc2tiX2RtYSA9IGRtYV9tYXBfc2luZ2xlKHJ0MngwMGRldi0+ZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLApAQCAtMTk4LDcgKzE5OCw3IEBACiAKIAlfX3NldF9iaXQoRU5UUllfVFhEX0dFTkVSQVRFX1NFUSwgJnR4ZGVzYy0+ZmxhZ3MpOwogCi0JaWYgKCF0ZXN0X2JpdChSRVFVSVJFX1NXX1NFUU5PLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKSB7CisJaWYgKCFydDJ4MDBfaGFzX2NhcF9mbGFnKHJ0MngwMGRldiwgUkVRVUlSRV9TV19TRVFOTykpIHsKIAkJLyoKIAkJICogcnQyODAwIGhhcyBhIEgvVyAob3IgRi9XKSBidWcsIGRldmljZSBpbmNvcnJlY3RseSBpbmNyZWFzZQogCQkgKiBzZXFubyBvbiByZXRyYW5zbWl0ZWQgZGF0YSAobm9uLVFPUykgZnJhbWVzLiBUbyB3b3JrYXJvdW5kCkBAIC00ODQsNyArNDg0LDcgQEAKIAlydDJ4MDBjcnlwdG9fY3JlYXRlX3R4X2Rlc2NyaXB0b3IocnQyeDAwZGV2LCBza2IsIHR4ZGVzYyk7CiAJcnQyeDAwcXVldWVfY3JlYXRlX3R4X2Rlc2NyaXB0b3Jfc2VxKHJ0MngwMGRldiwgc2tiLCB0eGRlc2MpOwogCi0JaWYgKHRlc3RfYml0KFJFUVVJUkVfSFRfVFhfREVTQywgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKKwlpZiAocnQyeDAwX2hhc19jYXBfZmxhZyhydDJ4MDBkZXYsIFJFUVVJUkVfSFRfVFhfREVTQykpCiAJCXJ0MngwMHF1ZXVlX2NyZWF0ZV90eF9kZXNjcmlwdG9yX2h0KHJ0MngwMGRldiwgc2tiLCB0eGRlc2MsCiAJCQkJCQkgICBzdGEsIGh3cmF0ZSk7CiAJZWxzZQpAQCAtNTI2LDcgKzUyNiw3IEBACiAJLyoKIAkgKiBNYXAgdGhlIHNrYiB0byBETUEuCiAJICovCi0JaWYgKHRlc3RfYml0KFJFUVVJUkVfRE1BLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpICYmCisJaWYgKHJ0MngwMF9oYXNfY2FwX2ZsYWcocnQyeDAwZGV2LCBSRVFVSVJFX0RNQSkgJiYKIAkgICAgcnQyeDAwcXVldWVfbWFwX3R4c2tiKGVudHJ5KSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTY0Niw3ICs2NDYsNyBAQAogCSAqLwogCWlmICh0ZXN0X2JpdChFTlRSWV9UWERfRU5DUllQVCwgJnR4ZGVzYy5mbGFncykgJiYKIAkgICAgIXRlc3RfYml0KEVOVFJZX1RYRF9FTkNSWVBUX0lWLCAmdHhkZXNjLmZsYWdzKSkgewotCQlpZiAodGVzdF9iaXQoUkVRVUlSRV9DT1BZX0lWLCAmcXVldWUtPnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKKwkJaWYgKHJ0MngwMF9oYXNfY2FwX2ZsYWcocXVldWUtPnJ0MngwMGRldiwgUkVRVUlSRV9DT1BZX0lWKSkKIAkJCXJ0MngwMGNyeXB0b190eF9jb3B5X2l2KHNrYiwgJnR4ZGVzYyk7CiAJCWVsc2UKIAkJCXJ0MngwMGNyeXB0b190eF9yZW1vdmVfaXYoc2tiLCAmdHhkZXNjKTsKQEAgLTY2MCw5ICs2NjAsOSBAQAogCSAqIFBDSSBhbmQgVVNCIGRldmljZXMsIHdoaWxlIGhlYWRlciBhbGlnbm1lbnQgb25seSBpcyB2YWxpZAogCSAqIGZvciBQQ0kgZGV2aWNlcy4KIAkgKi8KLQlpZiAodGVzdF9iaXQoUkVRVUlSRV9MMlBBRCwgJnF1ZXVlLT5ydDJ4MDBkZXYtPmNhcF9mbGFncykpCisJaWYgKHJ0MngwMF9oYXNfY2FwX2ZsYWcocXVldWUtPnJ0MngwMGRldiwgUkVRVUlSRV9MMlBBRCkpCiAJCXJ0MngwMHF1ZXVlX2luc2VydF9sMnBhZChza2IsIHR4ZGVzYy5oZWFkZXJfbGVuZ3RoKTsKLQllbHNlIGlmICh0ZXN0X2JpdChSRVFVSVJFX0RNQSwgJnF1ZXVlLT5ydDJ4MDBkZXYtPmNhcF9mbGFncykpCisJZWxzZSBpZiAocnQyeDAwX2hhc19jYXBfZmxhZyhxdWV1ZS0+cnQyeDAwZGV2LCBSRVFVSVJFX0RNQSkpCiAJCXJ0MngwMHF1ZXVlX2FsaWduX2ZyYW1lKHNrYik7CiAKIAkvKgpAQCAtMTE3OCw3ICsxMTc4LDcgQEAKIAlpZiAoc3RhdHVzKQogCQlnb3RvIGV4aXQ7CiAKLQlpZiAodGVzdF9iaXQoUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpKSB7CisJaWYgKHJ0MngwMF9oYXNfY2FwX2ZsYWcocnQyeDAwZGV2LCBSRVFVSVJFX0FUSU1fUVVFVUUpKSB7CiAJCXN0YXR1cyA9IHJ0MngwMHF1ZXVlX2FsbG9jX2VudHJpZXMocnQyeDAwZGV2LT5hdGltKTsKIAkJaWYgKHN0YXR1cykKIAkJCWdvdG8gZXhpdDsKQEAgLTEyMzQsNyArMTIzNCw3IEBACiAJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlOwogCWVudW0gZGF0YV9xdWV1ZV9xaWQgcWlkOwogCXVuc2lnbmVkIGludCByZXFfYXRpbSA9Ci0JICAgICEhdGVzdF9iaXQoUkVRVUlSRV9BVElNX1FVRVVFLCAmcnQyeDAwZGV2LT5jYXBfZmxhZ3MpOworCSAgICBydDJ4MDBfaGFzX2NhcF9mbGFnKHJ0MngwMGRldiwgUkVRVUlSRV9BVElNX1FVRVVFKTsKIAogCS8qCiAJICogV2UgbmVlZCB0aGUgZm9sbG93aW5nIHF1ZXVlczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDB1c2IuYwppbmRleCA4OTIyNzBkLi43NjI3YWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHVzYi5jCkBAIC0yNzQsNyArMjc0LDcgQEAKIAkgKiBTY2hlZHVsZSB0aGUgZGVsYXllZCB3b3JrIGZvciByZWFkaW5nIHRoZSBUWCBzdGF0dXMKIAkgKiBmcm9tIHRoZSBkZXZpY2UuCiAJICovCi0JaWYgKCF0ZXN0X2JpdChSRVFVSVJFX1RYU1RBVFVTX0ZJRk8sICZydDJ4MDBkZXYtPmNhcF9mbGFncykgfHwKKwlpZiAoIXJ0MngwMF9oYXNfY2FwX2ZsYWcocnQyeDAwZGV2LCBSRVFVSVJFX1RYU1RBVFVTX0ZJRk8pIHx8CiAJICAgICFrZmlmb19pc19lbXB0eSgmcnQyeDAwZGV2LT50eHN0YXR1c19maWZvKSkKIAkJcXVldWVfd29yayhydDJ4MDBkZXYtPndvcmtxdWV1ZSwgJnJ0MngwMGRldi0+dHhkb25lX3dvcmspOwogfQpAQCAtNDU2LDcgKzQ1Niw3IEBACiAJICogS2lsbCBndWFyZGlhbiB1cmIgKGlmIHJlcXVpcmVkIGJ5IGRyaXZlcikuCiAJICovCiAJaWYgKChlbnRyeS0+cXVldWUtPnFpZCA9PSBRSURfQkVBQ09OKSAmJgotCSAgICAodGVzdF9iaXQoUkVRVUlSRV9CRUFDT05fR1VBUkQsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpKQorCSAgICAocnQyeDAwX2hhc19jYXBfZmxhZyhydDJ4MDBkZXYsIFJFUVVJUkVfQkVBQ09OX0dVQVJEKSkpCiAJCXVzYl9raWxsX3VyYihiY25fcHJpdi0+Z3VhcmRpYW5fdXJiKTsKIAogCXJldHVybiBmYWxzZTsKQEAgLTY1NSw3ICs2NTUsNyBAQAogCSAqIHRoZW4gd2UgYXJlIGRvbmUuCiAJICovCiAJaWYgKHF1ZXVlLT5xaWQgIT0gUUlEX0JFQUNPTiB8fAotCSAgICAhdGVzdF9iaXQoUkVRVUlSRV9CRUFDT05fR1VBUkQsICZydDJ4MDBkZXYtPmNhcF9mbGFncykpCisJICAgICFydDJ4MDBfaGFzX2NhcF9mbGFnKHJ0MngwMGRldiwgUkVRVUlSRV9CRUFDT05fR1VBUkQpKQogCQlyZXR1cm4gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykgewpAQCAtNjkwLDcgKzY5MCw3IEBACiAJICogdGhlbiB3ZSBhcmUgZG9uZS4KIAkgKi8KIAlpZiAocXVldWUtPnFpZCAhPSBRSURfQkVBQ09OIHx8Ci0JICAgICF0ZXN0X2JpdChSRVFVSVJFX0JFQUNPTl9HVUFSRCwgJnJ0MngwMGRldi0+Y2FwX2ZsYWdzKSkKKwkgICAgIXJ0MngwMF9oYXNfY2FwX2ZsYWcocnQyeDAwZGV2LCBSRVFVSVJFX0JFQUNPTl9HVUFSRCkpCiAJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBxdWV1ZS0+bGltaXQ7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9iYXNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2Jhc2UuYwppbmRleCA0MGI2ZDFkLi4xZDQ2Nzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2Jhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2Jhc2UuYwpAQCAtODY3LDYzICs4NjcsMTM1IEBACiAgKgogICogQi9HIHJhdGU6CiAgKiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkgPSAwLAotICogREVTQzkyX1JBVEUxTS0tPkRFU0M5Ml9SQVRFNTRNID09PiBpZHggaXMgMC0tPjExLAorICogREVTQ19SQVRFMU0tLT5ERVNDX1JBVEU1NE0gPT0+IGlkeCBpcyAwLS0+MTEsCiAgKgogICogTiByYXRlOgogICogKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpID0gMSwKLSAqIERFU0M5Ml9SQVRFTUNTMC0tPkRFU0M5Ml9SQVRFTUNTMTUgPT0+IGlkeCBpcyAwLS0+MTUKKyAqIERFU0NfUkFURU1DUzAtLT5ERVNDX1JBVEVNQ1MxNSA9PT4gaWR4IGlzIDAtLT4xNQogICoKICAqIDVHIGJhbmQ6cnhfc3RhdHVzLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFoKICAqIEEgcmF0ZToKICAqIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSA9IDAsCi0gKiBERVNDOTJfUkFURTZNLS0+REVTQzkyX1JBVEU1NE0gPT0+IGlkeCBpcyAwLS0+NywKKyAqIERFU0NfUkFURTZNLS0+REVTQ19SQVRFNTRNID09PiBpZHggaXMgMC0tPjcsCiAgKgogICogTiByYXRlOgogICogKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpID0gMSwKLSAqIERFU0M5Ml9SQVRFTUNTMC0tPkRFU0M5Ml9SQVRFTUNTMTUgPT0+IGlkeCBpcyAwLS0+MTUKKyAqIERFU0NfUkFURU1DUzAtLT5ERVNDX1JBVEVNQ1MxNSA9PT4gaWR4IGlzIDAtLT4xNQorICoKKyAqIFZIVCByYXRlczoKKyAqIERFU0NfUkFURVZIVDFTU19NQ1MwLS0+REVTQ19SQVRFVkhUMVNTX01DUzkgPT0+IGlkeCBpcyAwLS0+OQorICogREVTQ19SQVRFVkhUMlNTX01DUzAtLT5ERVNDX1JBVEVWSFQyU1NfTUNTOSA9PT4gaWR4IGlzIDAtLT45CiAgKi8KLWludCBydGx3aWZpX3JhdGVfbWFwcGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSBib29sIGlzaHQsIHU4IGRlc2NfcmF0ZSwgYm9vbCBmaXJzdF9hbXBkdSkKK2ludCBydGx3aWZpX3JhdGVfbWFwcGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBpc2h0LCBib29sIGlzdmh0LAorCQkJIHU4IGRlc2NfcmF0ZSkKIHsKIAlpbnQgcmF0ZV9pZHg7CiAKKwlpZiAoaXN2aHQpIHsKKwkJc3dpdGNoIChkZXNjX3JhdGUpIHsKKwkJY2FzZSBERVNDX1JBVEVWSFQxU1NfTUNTMDoKKwkJCXJhdGVfaWR4ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIERFU0NfUkFURVZIVDFTU19NQ1MxOgorCQkJcmF0ZV9pZHggPSAxOworCQkJYnJlYWs7CisJCWNhc2UgREVTQ19SQVRFVkhUMVNTX01DUzI6CisJCQlyYXRlX2lkeCA9IDI7CisJCQlicmVhazsKKwkJY2FzZSBERVNDX1JBVEVWSFQxU1NfTUNTMzoKKwkJCXJhdGVfaWR4ID0gMzsKKwkJCWJyZWFrOworCQljYXNlIERFU0NfUkFURVZIVDFTU19NQ1M0OgorCQkJcmF0ZV9pZHggPSA0OworCQkJYnJlYWs7CisJCWNhc2UgREVTQ19SQVRFVkhUMVNTX01DUzU6CisJCQlyYXRlX2lkeCA9IDU7CisJCQlicmVhazsKKwkJY2FzZSBERVNDX1JBVEVWSFQxU1NfTUNTNjoKKwkJCXJhdGVfaWR4ID0gNjsKKwkJCWJyZWFrOworCQljYXNlIERFU0NfUkFURVZIVDFTU19NQ1M3OgorCQkJcmF0ZV9pZHggPSA3OworCQkJYnJlYWs7CisJCWNhc2UgREVTQ19SQVRFVkhUMVNTX01DUzg6CisJCQlyYXRlX2lkeCA9IDg7CisJCQlicmVhazsKKwkJY2FzZSBERVNDX1JBVEVWSFQxU1NfTUNTOToKKwkJCXJhdGVfaWR4ID0gOTsKKwkJCWJyZWFrOworCQljYXNlIERFU0NfUkFURVZIVDJTU19NQ1MwOgorCQkJcmF0ZV9pZHggPSAwOworCQkJYnJlYWs7CisJCWNhc2UgREVTQ19SQVRFVkhUMlNTX01DUzE6CisJCQlyYXRlX2lkeCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBERVNDX1JBVEVWSFQyU1NfTUNTMjoKKwkJCXJhdGVfaWR4ID0gMjsKKwkJCWJyZWFrOworCQljYXNlIERFU0NfUkFURVZIVDJTU19NQ1MzOgorCQkJcmF0ZV9pZHggPSAzOworCQkJYnJlYWs7CisJCWNhc2UgREVTQ19SQVRFVkhUMlNTX01DUzQ6CisJCQlyYXRlX2lkeCA9IDQ7CisJCQlicmVhazsKKwkJY2FzZSBERVNDX1JBVEVWSFQyU1NfTUNTNToKKwkJCXJhdGVfaWR4ID0gNTsKKwkJCWJyZWFrOworCQljYXNlIERFU0NfUkFURVZIVDJTU19NQ1M2OgorCQkJcmF0ZV9pZHggPSA2OworCQkJYnJlYWs7CisJCWNhc2UgREVTQ19SQVRFVkhUMlNTX01DUzc6CisJCQlyYXRlX2lkeCA9IDc7CisJCQlicmVhazsKKwkJY2FzZSBERVNDX1JBVEVWSFQyU1NfTUNTODoKKwkJCXJhdGVfaWR4ID0gODsKKwkJCWJyZWFrOworCQljYXNlIERFU0NfUkFURVZIVDJTU19NQ1M5OgorCQkJcmF0ZV9pZHggPSA5OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyYXRlX2lkeCA9IDA7CisJCQlicmVhazsKKwkJfQorCQlyZXR1cm4gcmF0ZV9pZHg7CisJfQogCWlmIChmYWxzZSA9PSBpc2h0KSB7CiAJCWlmIChJRUVFODAyMTFfQkFORF8yR0haID09IGh3LT5jb25mLmNoYW5kZWYuY2hhbi0+YmFuZCkgewogCQkJc3dpdGNoIChkZXNjX3JhdGUpIHsKLQkJCWNhc2UgREVTQzkyX1JBVEUxTToKKwkJCWNhc2UgREVTQ19SQVRFMU06CiAJCQkJcmF0ZV9pZHggPSAwOwogCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJfUkFURTJNOgorCQkJY2FzZSBERVNDX1JBVEUyTToKIAkJCQlyYXRlX2lkeCA9IDE7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5Ml9SQVRFNV81TToKKwkJCWNhc2UgREVTQ19SQVRFNV81TToKIAkJCQlyYXRlX2lkeCA9IDI7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5Ml9SQVRFMTFNOgorCQkJY2FzZSBERVNDX1JBVEUxMU06CiAJCQkJcmF0ZV9pZHggPSAzOwogCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJfUkFURTZNOgorCQkJY2FzZSBERVNDX1JBVEU2TToKIAkJCQlyYXRlX2lkeCA9IDQ7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5Ml9SQVRFOU06CisJCQljYXNlIERFU0NfUkFURTlNOgogCQkJCXJhdGVfaWR4ID0gNTsKIAkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyX1JBVEUxMk06CisJCQljYXNlIERFU0NfUkFURTEyTToKIAkJCQlyYXRlX2lkeCA9IDY7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5Ml9SQVRFMThNOgorCQkJY2FzZSBERVNDX1JBVEUxOE06CiAJCQkJcmF0ZV9pZHggPSA3OwogCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJfUkFURTI0TToKKwkJCWNhc2UgREVTQ19SQVRFMjRNOgogCQkJCXJhdGVfaWR4ID0gODsKIAkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyX1JBVEUzNk06CisJCQljYXNlIERFU0NfUkFURTM2TToKIAkJCQlyYXRlX2lkeCA9IDk7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5Ml9SQVRFNDhNOgorCQkJY2FzZSBERVNDX1JBVEU0OE06CiAJCQkJcmF0ZV9pZHggPSAxMDsKIAkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyX1JBVEU1NE06CisJCQljYXNlIERFU0NfUkFURTU0TToKIAkJCQlyYXRlX2lkeCA9IDExOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKQEAgLTkzMiwyOCArMTAwNCwyOCBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJc3dpdGNoIChkZXNjX3JhdGUpIHsKLQkJCWNhc2UgREVTQzkyX1JBVEU2TToKKwkJCWNhc2UgREVTQ19SQVRFNk06CiAJCQkJcmF0ZV9pZHggPSAwOwogCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJfUkFURTlNOgorCQkJY2FzZSBERVNDX1JBVEU5TToKIAkJCQlyYXRlX2lkeCA9IDE7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5Ml9SQVRFMTJNOgorCQkJY2FzZSBERVNDX1JBVEUxMk06CiAJCQkJcmF0ZV9pZHggPSAyOwogCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJfUkFURTE4TToKKwkJCWNhc2UgREVTQ19SQVRFMThNOgogCQkJCXJhdGVfaWR4ID0gMzsKIAkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyX1JBVEUyNE06CisJCQljYXNlIERFU0NfUkFURTI0TToKIAkJCQlyYXRlX2lkeCA9IDQ7CiAJCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5Ml9SQVRFMzZNOgorCQkJY2FzZSBERVNDX1JBVEUzNk06CiAJCQkJcmF0ZV9pZHggPSA1OwogCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJfUkFURTQ4TToKKwkJCWNhc2UgREVTQ19SQVRFNDhNOgogCQkJCXJhdGVfaWR4ID0gNjsKIAkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyX1JBVEU1NE06CisJCQljYXNlIERFU0NfUkFURTU0TToKIAkJCQlyYXRlX2lkeCA9IDc7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgpAQCAtOTYzLDUyICsxMDM1LDUyIEBACiAJCX0KIAl9IGVsc2UgewogCQlzd2l0Y2ggKGRlc2NfcmF0ZSkgewotCQljYXNlIERFU0M5Ml9SQVRFTUNTMDoKKwkJY2FzZSBERVNDX1JBVEVNQ1MwOgogCQkJcmF0ZV9pZHggPSAwOwogCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyX1JBVEVNQ1MxOgorCQljYXNlIERFU0NfUkFURU1DUzE6CiAJCQlyYXRlX2lkeCA9IDE7CiAJCQlicmVhazsKLQkJY2FzZSBERVNDOTJfUkFURU1DUzI6CisJCWNhc2UgREVTQ19SQVRFTUNTMjoKIAkJCXJhdGVfaWR4ID0gMjsKIAkJCWJyZWFrOwotCQljYXNlIERFU0M5Ml9SQVRFTUNTMzoKKwkJY2FzZSBERVNDX1JBVEVNQ1MzOgogCQkJcmF0ZV9pZHggPSAzOwogCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyX1JBVEVNQ1M0OgorCQljYXNlIERFU0NfUkFURU1DUzQ6CiAJCQlyYXRlX2lkeCA9IDQ7CiAJCQlicmVhazsKLQkJY2FzZSBERVNDOTJfUkFURU1DUzU6CisJCWNhc2UgREVTQ19SQVRFTUNTNToKIAkJCXJhdGVfaWR4ID0gNTsKIAkJCWJyZWFrOwotCQljYXNlIERFU0M5Ml9SQVRFTUNTNjoKKwkJY2FzZSBERVNDX1JBVEVNQ1M2OgogCQkJcmF0ZV9pZHggPSA2OwogCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyX1JBVEVNQ1M3OgorCQljYXNlIERFU0NfUkFURU1DUzc6CiAJCQlyYXRlX2lkeCA9IDc7CiAJCQlicmVhazsKLQkJY2FzZSBERVNDOTJfUkFURU1DUzg6CisJCWNhc2UgREVTQ19SQVRFTUNTODoKIAkJCXJhdGVfaWR4ID0gODsKIAkJCWJyZWFrOwotCQljYXNlIERFU0M5Ml9SQVRFTUNTOToKKwkJY2FzZSBERVNDX1JBVEVNQ1M5OgogCQkJcmF0ZV9pZHggPSA5OwogCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyX1JBVEVNQ1MxMDoKKwkJY2FzZSBERVNDX1JBVEVNQ1MxMDoKIAkJCXJhdGVfaWR4ID0gMTA7CiAJCQlicmVhazsKLQkJY2FzZSBERVNDOTJfUkFURU1DUzExOgorCQljYXNlIERFU0NfUkFURU1DUzExOgogCQkJcmF0ZV9pZHggPSAxMTsKIAkJCWJyZWFrOwotCQljYXNlIERFU0M5Ml9SQVRFTUNTMTI6CisJCWNhc2UgREVTQ19SQVRFTUNTMTI6CiAJCQlyYXRlX2lkeCA9IDEyOwogCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyX1JBVEVNQ1MxMzoKKwkJY2FzZSBERVNDX1JBVEVNQ1MxMzoKIAkJCXJhdGVfaWR4ID0gMTM7CiAJCQlicmVhazsKLQkJY2FzZSBERVNDOTJfUkFURU1DUzE0OgorCQljYXNlIERFU0NfUkFURU1DUzE0OgogCQkJcmF0ZV9pZHggPSAxNDsKIAkJCWJyZWFrOwotCQljYXNlIERFU0M5Ml9SQVRFTUNTMTU6CisJCWNhc2UgREVTQ19SQVRFTUNTMTU6CiAJCQlyYXRlX2lkeCA9IDE1OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2Jhc2UuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvYmFzZS5oCmluZGV4IDk4MmYyNDUuLmM2Y2I0OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvYmFzZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvYmFzZS5oCkBAIC0xMjMsOCArMTIzLDggQEAKIHZvaWQgcnRsX2RlaW5pdF9kZWZlcnJlZF93b3JrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAogYm9vbCBydGxfYWN0aW9uX3Byb2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsIHU4IGlzX3R4KTsKLWludCBydGx3aWZpX3JhdGVfbWFwcGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSBib29sIGlzaHQsIHU4IGRlc2NfcmF0ZSwgYm9vbCBmaXJzdF9hbXBkdSk7CitpbnQgcnRsd2lmaV9yYXRlX21hcHBpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgaXNodCwKKwkJCSBib29sIGlzdmh0LCB1OCBkZXNjX3JhdGUpOwogYm9vbCBydGxfdHhfbWdtdF9wcm9jKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHU4IHJ0bF9pc19zcGVjaWFsX2RhdGEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IsIHU4IGlzX3R4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NvcmUuYwppbmRleCA1ZmM2ZjUyLi5hMzFhMTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NvcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2NvcmUuYwpAQCAtOTUsNyArOTUsOCBAQAogfQogRVhQT1JUX1NZTUJPTChydGxfYmJfZGVsYXkpOwogCi12b2lkIHJ0bF9md19jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KQorc3RhdGljIHZvaWQgcnRsX2Z3X2RvX3dvcmsoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dCwKKwkJCSAgIGJvb2wgaXNfd293KQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gY29udGV4dDsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CkBAIC0xMjUsMTIgKzEyNiwzMSBAQAogCQlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKIAkJcmV0dXJuOwogCX0KLQltZW1jcHkocnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSwgZmlybXdhcmUtPmRhdGEsIGZpcm13YXJlLT5zaXplKTsKKwlpZiAoIWlzX3dvdykgeworCQltZW1jcHkocnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSwgZmlybXdhcmUtPmRhdGEsCisJCSAgICAgICBmaXJtd2FyZS0+c2l6ZSk7CisJCXJ0bHByaXYtPnJ0bGhhbC5md3NpemUgPSBmaXJtd2FyZS0+c2l6ZTsKKwl9IGVsc2UgeworCQltZW1jcHkocnRscHJpdi0+cnRsaGFsLndvd2xhbl9maXJtd2FyZSwgZmlybXdhcmUtPmRhdGEsCisJCSAgICAgICBmaXJtd2FyZS0+c2l6ZSk7CisJCXJ0bHByaXYtPnJ0bGhhbC53b3dsYW5fZndzaXplID0gZmlybXdhcmUtPnNpemU7CisJfQogCXJ0bHByaXYtPnJ0bGhhbC5md3NpemUgPSBmaXJtd2FyZS0+c2l6ZTsKIAlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKIH0KKwordm9pZCBydGxfZndfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dCkKK3sKKwlydGxfZndfZG9fd29yayhmaXJtd2FyZSwgY29udGV4dCwgZmFsc2UpOworfQogRVhQT1JUX1NZTUJPTChydGxfZndfY2IpOwogCit2b2lkIHJ0bF93b3dsYW5fZndfY2IoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgdm9pZCAqY29udGV4dCkKK3sKKwlydGxfZndfZG9fd29yayhmaXJtd2FyZSwgY29udGV4dCwgdHJ1ZSk7Cit9CitFWFBPUlRfU1lNQk9MKHJ0bF93b3dsYW5fZndfY2IpOworCiAvKm11dGV4IGZvciBzdGFydCAmIHN0b3AgaXMgbXVzdCBoZXJlLiAqLwogc3RhdGljIGludCBydGxfb3Bfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CkBAIC05OTAsNiArMTAxMCwxNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzZW5kX2JlYWNvbl9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBza19idWZmICpza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKKworCWlmIChza2IpCisJCXJ0bHByaXYtPmludGZfb3BzLT5hZGFwdGVyX3R4KGh3LCBOVUxMLCBza2IsIE5VTEwpOworfQorCiBzdGF0aWMgdm9pZCBydGxfb3BfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqYnNzX2NvbmYsCkBAIC0xMDIwLDYgKzEwNTAsNyBAQAogCiAJCQkJaWYgKHJ0bHByaXYtPmNmZy0+b3BzLT5saW5rZWRfc2V0X3JlZykKIAkJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPmxpbmtlZF9zZXRfcmVnKGh3KTsKKwkJCQlzZW5kX2JlYWNvbl9mcmFtZShodywgdmlmKTsKIAkJCX0KIAkJfQogCQlpZiAoKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCAmJgpAQCAtMTg1MSwzICsxODgyLDQwIEBACiAJcmV0dXJuIGZhbHNlOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocnRsX2J0Y19zdGF0dXNfZmFsc2UpOworCit2b2lkIHJ0bF9kbV9kaWdpbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY3VyX2lndmFsdWUpCit7CisJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXN0cnVjdCBkaWdfdCAqZG1fZGlndGFibGUgPSAmcnRscHJpdi0+ZG1fZGlndGFibGU7CisKKwlkbV9kaWd0YWJsZS0+ZGlnX2VuYWJsZV9mbGFnID0gdHJ1ZTsKKwlkbV9kaWd0YWJsZS0+ZGlnX2V4dF9wb3J0X3N0YWdlID0gRElHX0VYVF9QT1JUX1NUQUdFX01BWDsKKwlkbV9kaWd0YWJsZS0+Y3VyX2lndmFsdWUgPSBjdXJfaWd2YWx1ZTsKKwlkbV9kaWd0YWJsZS0+cHJlX2lndmFsdWUgPSAwOworCWRtX2RpZ3RhYmxlLT5jdXJfc3RhX2NzdGF0ZSA9IERJR19TVEFfRElTQ09OTkVDVDsKKwlkbV9kaWd0YWJsZS0+cHJlc3RhX2NzdGF0ZSA9IERJR19TVEFfRElTQ09OTkVDVDsKKwlkbV9kaWd0YWJsZS0+Y3VybXVsdGlzdGFfY3N0YXRlID0gRElHX01VTFRJU1RBX0RJU0NPTk5FQ1Q7CisJZG1fZGlndGFibGUtPnJzc2lfbG93dGhyZXNoID0gRE1fRElHX1RIUkVTSF9MT1c7CisJZG1fZGlndGFibGUtPnJzc2lfaGlnaHRocmVzaCA9IERNX0RJR19USFJFU0hfSElHSDsKKwlkbV9kaWd0YWJsZS0+ZmFfbG93dGhyZXNoID0gRE1fRkFMU0VBTEFSTV9USFJFU0hfTE9XOworCWRtX2RpZ3RhYmxlLT5mYV9oaWdodGhyZXNoID0gRE1fRkFMU0VBTEFSTV9USFJFU0hfSElHSDsKKwlkbV9kaWd0YWJsZS0+cnhfZ2Fpbl9tYXggPSBETV9ESUdfTUFYOworCWRtX2RpZ3RhYmxlLT5yeF9nYWluX21pbiA9IERNX0RJR19NSU47CisJZG1fZGlndGFibGUtPmJhY2tfdmFsID0gRE1fRElHX0JBQ0tPRkZfREVGQVVMVDsKKwlkbV9kaWd0YWJsZS0+YmFja19yYW5nZV9tYXggPSBETV9ESUdfQkFDS09GRl9NQVg7CisJZG1fZGlndGFibGUtPmJhY2tfcmFuZ2VfbWluID0gRE1fRElHX0JBQ0tPRkZfTUlOOworCWRtX2RpZ3RhYmxlLT5wcmVfY2NrX2NjYV90aHJlcyA9IDB4ZmY7CisJZG1fZGlndGFibGUtPmN1cl9jY2tfY2NhX3RocmVzID0gMHg4MzsKKwlkbV9kaWd0YWJsZS0+Zm9yYmlkZGVuX2lnaSA9IERNX0RJR19NSU47CisJZG1fZGlndGFibGUtPmxhcmdlX2ZhX2hpdCA9IDA7CisJZG1fZGlndGFibGUtPnJlY292ZXJfY250ID0gMDsKKwlkbV9kaWd0YWJsZS0+ZGlnX21pbl8wID0gMHgyNTsKKwlkbV9kaWd0YWJsZS0+ZGlnX21pbl8xID0gMHgyNTsKKwlkbV9kaWd0YWJsZS0+bWVkaWFfY29ubmVjdF8wID0gZmFsc2U7CisJZG1fZGlndGFibGUtPm1lZGlhX2Nvbm5lY3RfMSA9IGZhbHNlOworCXJ0bHByaXYtPmRtLmRtX2luaXRpYWxnYWluX2VuYWJsZSA9IHRydWU7CisJZG1fZGlndGFibGUtPmJ0MzBfY3VyX2lnaSA9IDB4MzI7CisJZG1fZGlndGFibGUtPnByZV9jY2tfcGRfc3RhdGUgPSBDQ0tfUERfU1RBR0VfTUFYOworCWRtX2RpZ3RhYmxlLT5jdXJfY2NrX3BkX3N0YXRlID0gQ0NLX1BEX1NUQUdFX0xPV1JTU0k7Cit9CitFWFBPUlRfU1lNQk9MKHJ0bF9kbV9kaWdpbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmgKaW5kZXggNjI0ZTFkYy4uN2I2NGUzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9jb3JlLmgKQEAgLTM1LDEzICszNSw1NSBAQAogCiAjZGVmaW5lIFJUTF9TVVBQT1JURURfQ1RSTF9GSUxURVIJMHhGRgogCisjZGVmaW5lIERNX0RJR19USFJFU0hfSElHSAkJNDAKKyNkZWZpbmUgRE1fRElHX1RIUkVTSF9MT1cJCTM1CisjZGVmaW5lIERNX0ZBTFNFQUxBUk1fVEhSRVNIX0xPVwk0MDAKKyNkZWZpbmUgRE1fRkFMU0VBTEFSTV9USFJFU0hfSElHSAkxMDAwCisKKyNkZWZpbmUgRE1fRElHX01BWAkJCTB4M2UKKyNkZWZpbmUgRE1fRElHX01JTgkJCTB4MWUKKyNkZWZpbmUgRE1fRElHX01BWF9BUAkJCTB4MzIKKyNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfTUFYCQkxMgorI2RlZmluZSBETV9ESUdfQkFDS09GRl9NSU4JCS00CisjZGVmaW5lIERNX0RJR19CQUNLT0ZGX0RFRkFVTFQJCTEwCisKK2VudW0gY2NrX3BhY2tldF9kZXRlY3Rpb25fdGhyZXNob2xkIHsKKwlDQ0tfUERfU1RBR0VfTE9XUlNTSSA9IDAsCisJQ0NLX1BEX1NUQUdFX0hJR0hSU1NJID0gMSwKKwlDQ0tfRkFfU1RBR0VfTE9XID0gMiwKKwlDQ0tfRkFfU1RBR0VfSElHSCA9IDMsCisJQ0NLX1BEX1NUQUdFX01BWCA9IDQsCit9OworCitlbnVtIGRtX2RpZ19leHRfcG9ydF9hbGdfZSB7CisJRElHX0VYVF9QT1JUX1NUQUdFXzAgPSAwLAorCURJR19FWFRfUE9SVF9TVEFHRV8xID0gMSwKKwlESUdfRVhUX1BPUlRfU1RBR0VfMiA9IDIsCisJRElHX0VYVF9QT1JUX1NUQUdFXzMgPSAzLAorCURJR19FWFRfUE9SVF9TVEFHRV9NQVggPSA0LAorfTsKKworZW51bSBkbV9kaWdfY29ubmVjdF9lIHsKKwlESUdfU1RBX0RJU0NPTk5FQ1QsCisJRElHX1NUQV9DT05ORUNULAorCURJR19TVEFfQkVGT1JFX0NPTk5FQ1QsCisJRElHX01VTFRJU1RBX0RJU0NPTk5FQ1QsCisJRElHX01VTFRJU1RBX0NPTk5FQ1QsCisJRElHX0FQX0RJU0NPTk5FQ1QsCisJRElHX0FQX0NPTk5FQ1QsCisJRElHX0FQX0FERF9TVEFUSU9OLAorCURJR19DT05ORUNUX01BWAorfTsKKwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHJ0bF9vcHM7CiB2b2lkIHJ0bF9md19jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KTsKK3ZvaWQgcnRsX3dvd2xhbl9md19jYihjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlLCB2b2lkICpjb250ZXh0KTsKIHZvaWQgcnRsX2FkZHJfZGVsYXkodTMyIGFkZHIpOwogdm9pZCBydGxfcmZyZWdfZGVsYXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGVudW0gcmFkaW9fcGF0aCByZnBhdGgsIHUzMiBhZGRyLAogCQkgICAgIHUzMiBtYXNrLCB1MzIgZGF0YSk7CiB2b2lkIHJ0bF9iYl9kZWxheShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGFkZHIsIHUzMiBkYXRhKTsKIGJvb2wgcnRsX2NtZF9zZW5kX3BhY2tldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBib29sIHJ0bF9idGNfc3RhdHVzX2ZhbHNlKHZvaWQpOwordm9pZCBydGxfZG1fZGlnaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGN1cl9pZ3ZhbCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKaW5kZXggYzcwZWZiOS4uZWM0NTZmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCkBAIC01NzgsNiArNTc4LDEzIEBACiAJCWVsc2UKIAkJCWVudHJ5ID0gKHU4ICopKCZyaW5nLT5kZXNjW3JpbmctPmlkeF0pOwogCisJCWlmIChydGxwcml2LT5jZmctPm9wcy0+Z2V0X2F2YWlsYWJsZV9kZXNjICYmCisJCSAgICBydGxwcml2LT5jZmctPm9wcy0+Z2V0X2F2YWlsYWJsZV9kZXNjKGh3LCBwcmlvKSA8PSAxKSB7CisJCQlSVF9UUkFDRShydGxwcml2LCAoQ09NUF9JTlRSIHwgQ09NUF9TRU5EKSwgREJHX0RNRVNHLAorCQkJCSAibm8gYXZhaWxhYmxlIGRlc2MhXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCiAJCWlmICghcnRscHJpdi0+Y2ZnLT5vcHMtPmlzX3R4X2Rlc2NfY2xvc2VkKGh3LCBwcmlvLCByaW5nLT5pZHgpKQogCQkJcmV0dXJuOwogCQlyaW5nLT5pZHggPSAocmluZy0+aWR4ICsgMSkgJSByaW5nLT5lbnRyaWVzOwpAQCAtNjQxLDEwICs2NDgsOSBAQAogCiAJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTsKIAotCQlpZiAoKHJpbmctPmVudHJpZXMgLSBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpCi0JCQkJPT0gMikgeworCQlpZiAoKHJpbmctPmVudHJpZXMgLSBza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpIDw9IDQpIHsKIAotCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19MT1VELAorCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19ETUVTRywKIAkJCQkgIm1vcmUgZGVzYyBsZWZ0LCB3YWtlIHNrYl9xdWV1ZUAlZCwgcmluZy0+aWR4ID0gJWQsIHNrYl9xdWV1ZV9sZW4gPSAweCV4XG4iLAogCQkJCSBwcmlvLCByaW5nLT5pZHgsCiAJCQkJIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSk7CkBAIC03OTMsNyArNzk5LDcgQEAKIAkJCXJ4X3JlbWFpbmVkX2NudCA9CiAJCQkJcnRscHJpdi0+Y2ZnLT5vcHMtPnJ4X2Rlc2NfYnVmZl9yZW1haW5lZF9jbnQoaHcsCiAJCQkJCQkJCSAgICAgIGh3X3F1ZXVlKTsKLQkJCWlmIChyeF9yZW1haW5lZF9jbnQgPCAxKQorCQkJaWYgKHJ4X3JlbWFpbmVkX2NudCA9PSAwKQogCQkJCXJldHVybjsKIAogCQl9IGVsc2UgewkvKiByeCBkZXNjcmlwdG9yICovCkBAIC04NDgsMTggKzg1NCwxOCBAQAogCQkJZWxzZQogCQkJCXNrYl9yZXNlcnZlKHNrYiwgc3RhdHMucnhfZHJ2aW5mb19zaXplICsKIAkJCQkJICAgIHN0YXRzLnJ4X2J1ZnNoaWZ0KTsKLQogCQl9IGVsc2UgewogCQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAogCQkJCSAic2tiLT5lbmQgLSBza2ItPnRhaWwgPSAlZCwgbGVuIGlzICVkXG4iLAogCQkJCSBza2ItPmVuZCAtIHNrYi0+dGFpbCwgbGVuKTsKLQkJCWJyZWFrOworCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJCWdvdG8gbmV3X3RyeF9lbmQ7CiAJCX0KIAkJLyogaGFuZGxlIGNvbW1hbmQgcGFja2V0IGhlcmUgKi8KIAkJaWYgKHJ0bHByaXYtPmNmZy0+b3BzLT5yeF9jb21tYW5kX3BhY2tldCAmJgogCQkgICAgcnRscHJpdi0+Y2ZnLT5vcHMtPnJ4X2NvbW1hbmRfcGFja2V0KGh3LCBzdGF0cywgc2tiKSkgewogCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQkJZ290byBlbmQ7CisJCQkJZ290byBuZXdfdHJ4X2VuZDsKIAkJfQogCiAJCS8qCkBAIC05MDksNiArOTE1LDcgQEAKIAkJfSBlbHNlIHsKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCX0KK25ld190cnhfZW5kOgogCQlpZiAocnRscHJpdi0+dXNlX25ld190cnhfZmxvdykgewogCQkJcnRscGNpLT5yeF9yaW5nW2h3X3F1ZXVlXS5uZXh0X3J4X3JwICs9IDE7CiAJCQlydGxwY2ktPnJ4X3JpbmdbaHdfcXVldWVdLm5leHRfcnhfcnAgJT0KQEAgLTkyNCw3ICs5MzEsNiBAQAogCQkJcnRscHJpdi0+ZW50ZXJfcHMgPSBmYWxzZTsKIAkJCXNjaGVkdWxlX3dvcmsoJnJ0bHByaXYtPndvcmtzLmxwc19jaGFuZ2Vfd29yayk7CiAJCX0KLWVuZDoKIAkJc2tiID0gbmV3X3NrYjsKIG5vX25ldzoKIAkJaWYgKHJ0bHByaXYtPnVzZV9uZXdfdHJ4X2Zsb3cpIHsKQEAgLTE2ODgsNiArMTY5NCwxNSBAQAogCQl9CiAJfQogCisJaWYgKHJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfYXZhaWxhYmxlX2Rlc2MgJiYKKwkgICAgcnRscHJpdi0+Y2ZnLT5vcHMtPmdldF9hdmFpbGFibGVfZGVzYyhodywgaHdfcXVldWUpID09IDApIHsKKwkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRVJSLCBEQkdfV0FSTklORywKKwkJCQkgImdldF9hdmFpbGFibGVfZGVzYyBmYWlsXG4iKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0bHByaXYtPmxvY2tzLmlycV90aF9sb2NrLAorCQkJCQkgICAgICAgZmxhZ3MpOworCQkJcmV0dXJuIHNrYi0+bGVuOworCX0KKwogCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CiAJCXRpZCA9IHJ0bF9nZXRfdGlkKHNrYik7CiAJCWlmIChzdGEpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5oCmluZGV4IDVlODMyMzAuLmQ0NTY3ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuaApAQCAtMzI1LDQgKzMyNSwxMSBAQAogCXdyaXRlbCh2YWwsICh1OCBfX2lvbWVtICopIHJ0bHByaXYtPmlvLnBjaV9tZW1fc3RhcnQgKyBhZGRyKTsKIH0KIAorc3RhdGljIGlubGluZSB1MTYgY2FsY19maWZvX3NwYWNlKHUxNiBycCwgdTE2IHdwKQoreworCWlmIChycCA8PSB3cCkKKwkJcmV0dXJuIFJUTF9QQ0lfTUFYX1JYX0NPVU5UIC0gMSArIHJwIC0gd3A7CisJcmV0dXJuIHJwIC0gd3AgLSAxOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE4OGVlL2RtLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxODhlZS9kbS5jCmluZGV4IDJhYTM0ZDkuLmQ5MzBjMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE4OGVlL2RtLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTg4ZWUvZG0uYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIi4uL3dpZmkuaCIKICNpbmNsdWRlICIuLi9iYXNlLmgiCiAjaW5jbHVkZSAiLi4vcGNpLmgiCisjaW5jbHVkZSAiLi4vY29yZS5oIgogI2luY2x1ZGUgInJlZy5oIgogI2luY2x1ZGUgImRlZi5oIgogI2luY2x1ZGUgInBoeS5oIgpAQCAtMzQxLDM4ICszNDIsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcnRsODhlX2RtX2RpZ2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwotCXN0cnVjdCBkaWdfdCAqZG1fZGlnID0gJnJ0bHByaXYtPmRtX2RpZ3RhYmxlOwotCi0JZG1fZGlnLT5kaWdfZW5hYmxlX2ZsYWcgPSB0cnVlOwotCWRtX2RpZy0+Y3VyX2lndmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBST0ZETTBfWEFBR0NDT1JFMSwgMHg3Zik7Ci0JZG1fZGlnLT5wcmVfaWd2YWx1ZSA9IDA7Ci0JZG1fZGlnLT5jdXJfc3RhX2NzdGF0ZSA9IERJR19TVEFfRElTQ09OTkVDVDsKLQlkbV9kaWctPnByZXN0YV9jc3RhdGUgPSBESUdfU1RBX0RJU0NPTk5FQ1Q7Ci0JZG1fZGlnLT5jdXJtdWx0aXN0YV9jc3RhdGUgPSBESUdfTVVMVElTVEFfRElTQ09OTkVDVDsKLQlkbV9kaWctPnJzc2lfbG93dGhyZXNoID0gRE1fRElHX1RIUkVTSF9MT1c7Ci0JZG1fZGlnLT5yc3NpX2hpZ2h0aHJlc2ggPSBETV9ESUdfVEhSRVNIX0hJR0g7Ci0JZG1fZGlnLT5mYV9sb3d0aHJlc2ggPSBETV9GQUxTRUFMQVJNX1RIUkVTSF9MT1c7Ci0JZG1fZGlnLT5mYV9oaWdodGhyZXNoID0gRE1fRkFMU0VBTEFSTV9USFJFU0hfSElHSDsKLQlkbV9kaWctPnJ4X2dhaW5fbWF4ID0gRE1fRElHX01BWDsKLQlkbV9kaWctPnJ4X2dhaW5fbWluID0gRE1fRElHX01JTjsKLQlkbV9kaWctPmJhY2tfdmFsID0gRE1fRElHX0JBQ0tPRkZfREVGQVVMVDsKLQlkbV9kaWctPmJhY2tfcmFuZ2VfbWF4ID0gRE1fRElHX0JBQ0tPRkZfTUFYOwotCWRtX2RpZy0+YmFja19yYW5nZV9taW4gPSBETV9ESUdfQkFDS09GRl9NSU47Ci0JZG1fZGlnLT5wcmVfY2NrX2NjYV90aHJlcyA9IDB4ZmY7Ci0JZG1fZGlnLT5jdXJfY2NrX2NjYV90aHJlcyA9IDB4ODM7Ci0JZG1fZGlnLT5mb3JiaWRkZW5faWdpID0gRE1fRElHX01JTjsKLQlkbV9kaWctPmxhcmdlX2ZhX2hpdCA9IDA7Ci0JZG1fZGlnLT5yZWNvdmVyX2NudCA9IDA7Ci0JZG1fZGlnLT5kaWdfbWluXzAgPSAweDI1OwotCWRtX2RpZy0+ZGlnX21pbl8xID0gMHgyNTsKLQlkbV9kaWctPm1lZGlhX2Nvbm5lY3RfMCA9IGZhbHNlOwotCWRtX2RpZy0+bWVkaWFfY29ubmVjdF8xID0gZmFsc2U7Ci0JcnRscHJpdi0+ZG0uZG1faW5pdGlhbGdhaW5fZW5hYmxlID0gdHJ1ZTsKLX0KLQogc3RhdGljIHU4IHJ0bDg4ZV9kbV9pbml0aWFsX2dhaW5fbWluX3B3ZGIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwpAQCAtMTc5Niw5ICsxNzY1LDEwIEBACiB2b2lkIHJ0bDg4ZV9kbV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgY3VyX2lndmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBST0ZETTBfWEFBR0NDT1JFMSwgMHg3Zik7CiAKIAlydGxwcml2LT5kbS5kbV90eXBlID0gRE1fVFlQRV9CWURSSVZFUjsKLQlydGw4OGVfZG1fZGlnaW5pdChodyk7CisJcnRsX2RtX2RpZ2luaXQoaHcsIGN1cl9pZ3ZhbHVlKTsKIAlydGw4OGVfZG1faW5pdF9keW5hbWljX3R4cG93ZXIoaHcpOwogCXJ0bDg4ZV9kbV9pbml0X2VkY2FfdHVyYm8oaHcpOwogCXJ0bDg4ZV9kbV9pbml0X3JhdGVfYWRhcHRpdmVfbWFzayhodyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxODhlZS9kbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTg4ZWUvZG0uaAppbmRleCA2NGYxZjNlYS4uMDcxY2NlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTg4ZWUvZG0uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxODhlZS9kbS5oCkBAIC0xODYsMjggKzE4NiwxMiBAQAogI2RlZmluZSBCV19BVVRPX1NXSVRDSF9ISUdIX0xPVwkJCQkyNQogI2RlZmluZSBCV19BVVRPX1NXSVRDSF9MT1dfSElHSAkJCQkzMAogCi0jZGVmaW5lIERNX0RJR19USFJFU0hfSElHSAkJCQk0MAotI2RlZmluZSBETV9ESUdfVEhSRVNIX0xPVwkJCQkzNQotCi0jZGVmaW5lIERNX0ZBTFNFQUxBUk1fVEhSRVNIX0xPVwkJCTQwMAotI2RlZmluZSBETV9GQUxTRUFMQVJNX1RIUkVTSF9ISUdICQkJMTAwMAotCi0jZGVmaW5lIERNX0RJR19NQVgJCQkJCTB4M2UKLSNkZWZpbmUgRE1fRElHX01JTgkJCQkJMHgxZQotCi0jZGVmaW5lIERNX0RJR19NQVhfQVAJCQkJCTB4MzIKLSNkZWZpbmUgRE1fRElHX01JTl9BUAkJCQkJMHgyMAotCiAjZGVmaW5lIERNX0RJR19GQV9VUFBFUgkJCQkJMHgzZQogI2RlZmluZSBETV9ESUdfRkFfTE9XRVIJCQkJCTB4MWUKICNkZWZpbmUgRE1fRElHX0ZBX1RIMAkJCQkJMHgyMDAKICNkZWZpbmUgRE1fRElHX0ZBX1RIMQkJCQkJMHgzMDAKICNkZWZpbmUgRE1fRElHX0ZBX1RIMgkJCQkJMHg0MDAKIAotI2RlZmluZSBETV9ESUdfQkFDS09GRl9NQVgJCQkJMTIKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfTUlOCQkJCS00Ci0jZGVmaW5lIERNX0RJR19CQUNLT0ZGX0RFRkFVTFQJCQkJMTAKLQogI2RlZmluZSBSWFBBVEhTRUxFQ1RJT05fU1NfVEhfVwkJCQkzMAogI2RlZmluZSBSWFBBVEhTRUxFQ1RJT05fRElGRl9USAkJCQkxOAogCkBAIC0yNjIsMTQgKzI0Niw2IEBACiAJRElHX09QX1RZUEVfTUFYCiB9OwogCi1lbnVtIHRhZ19jY2tfcGFja2V0X2RldGVjdGlvbl90aHJlc2hvbGRfdHlwZV9kZWZpbml0aW9uIHsKLQlDQ0tfUERfU1RBR0VfTE9XUlNTSSA9IDAsCi0JQ0NLX1BEX1NUQUdFX0hJR0hSU1NJID0gMSwKLQlDQ0tfRkFfU1RBR0VfTE9XID0gMiwKLQlDQ0tfRkFfU1RBR0VfSElHSCA9IDMsCi0JQ0NLX1BEX1NUQUdFX01BWCA9IDQsCi19OwotCiBlbnVtIGRtXzFyX2NjYV9lIHsKIAlDQ0FfMVIgPSAwLAogCUNDQV8yUiA9IDEsCkBAIC0yODgsMjMgKzI2NCw2IEBACiAJQU5TX0FOVEVOTkFfTUFYID0gMywKIH07CiAKLWVudW0gZG1fZGlnX2V4dF9wb3J0X2FsZ19lIHsKLQlESUdfRVhUX1BPUlRfU1RBR0VfMCA9IDAsCi0JRElHX0VYVF9QT1JUX1NUQUdFXzEgPSAxLAotCURJR19FWFRfUE9SVF9TVEFHRV8yID0gMiwKLQlESUdfRVhUX1BPUlRfU1RBR0VfMyA9IDMsCi0JRElHX0VYVF9QT1JUX1NUQUdFX01BWCA9IDQsCi19OwotCi1lbnVtIGRtX2RpZ19jb25uZWN0X2UgewotCURJR19TVEFfRElTQ09OTkVDVCA9IDAsCi0JRElHX1NUQV9DT05ORUNUID0gMSwKLQlESUdfU1RBX0JFRk9SRV9DT05ORUNUID0gMiwKLQlESUdfTVVMVElTVEFfRElTQ09OTkVDVCA9IDMsCi0JRElHX01VTFRJU1RBX0NPTk5FQ1QgPSA0LAotCURJR19DT05ORUNUX01BWAotfTsKLQogZW51bSBwd3JfdHJhY2tfY29udHJvbF9tZXRob2QgewogCUJCU1dJTkcsCiAJVFhBR0MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE4OGVlL3RyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTg4ZWUvdHJ4LmMKaW5kZXggZGY1NDljOS4uNzkxZWZiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTg4ZWUvdHJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTg4ZWUvdHJ4LmMKQEAgLTQ3LDE2NCArNDcsNiBAQAogCXJldHVybiBza2ItPnByaW9yaXR5OwogfQogCi0vKiBtYWM4MDIxMSdzIHJhdGVfaWR4IGlzIGxpa2UgdGhpczoKLSAqCi0gKiAyLjRHIGJhbmQ6cnhfc3RhdHVzLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFoKLSAqCi0gKiBCL0cgcmF0ZToKLSAqIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSA9IDAsCi0gKiBERVNDOTJDX1JBVEUxTS0tPkRFU0M5MkNfUkFURTU0TSA9PT4gaWR4IGlzIDAtLT4xMSwKLSAqCi0gKiBOIHJhdGU6Ci0gKiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkgPSAxLAotICogREVTQzkyQ19SQVRFTUNTMC0tPkRFU0M5MkNfUkFURU1DUzE1ID09PiBpZHggaXMgMC0tPjE1Ci0gKgotICogNUcgYmFuZDpyeF9zdGF0dXMtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWgotICogQSByYXRlOgotICogKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpID0gMCwKLSAqIERFU0M5MkNfUkFURTZNLS0+REVTQzkyQ19SQVRFNTRNID09PiBpZHggaXMgMC0tPjcsCi0gKgotICogTiByYXRlOgotICogKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpID0gMSwKLSAqIERFU0M5MkNfUkFURU1DUzAtLT5ERVNDOTJDX1JBVEVNQ1MxNSA9PT4gaWR4IGlzIDAtLT4xNQotICovCi1zdGF0aWMgaW50IF9ydGw4OGVlX3JhdGVfbWFwcGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgYm9vbCBpc2h0LCB1OCBkZXNjX3JhdGUpCi17Ci0JaW50IHJhdGVfaWR4OwotCi0JaWYgKCFpc2h0KSB7Ci0JCWlmIChJRUVFODAyMTFfQkFORF8yR0haID09IGh3LT5jb25mLmNoYW5kZWYuY2hhbi0+YmFuZCkgewotCQkJc3dpdGNoIChkZXNjX3JhdGUpIHsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMU06Ci0JCQkJcmF0ZV9pZHggPSAwOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEUyTToKLQkJCQlyYXRlX2lkeCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTVfNU06Ci0JCQkJcmF0ZV9pZHggPSAyOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEUxMU06Ci0JCQkJcmF0ZV9pZHggPSAzOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEU2TToKLQkJCQlyYXRlX2lkeCA9IDQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTlNOgotCQkJCXJhdGVfaWR4ID0gNTsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMTJNOgotCQkJCXJhdGVfaWR4ID0gNjsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMThNOgotCQkJCXJhdGVfaWR4ID0gNzsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMjRNOgotCQkJCXJhdGVfaWR4ID0gODsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMzZNOgotCQkJCXJhdGVfaWR4ID0gOTsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFNDhNOgotCQkJCXJhdGVfaWR4ID0gMTA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTU0TToKLQkJCQlyYXRlX2lkeCA9IDExOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlyYXRlX2lkeCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzd2l0Y2ggKGRlc2NfcmF0ZSkgewotCQkJY2FzZSBERVNDOTJDX1JBVEU2TToKLQkJCQlyYXRlX2lkeCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTlNOgotCQkJCXJhdGVfaWR4ID0gMTsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMTJNOgotCQkJCXJhdGVfaWR4ID0gMjsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMThNOgotCQkJCXJhdGVfaWR4ID0gMzsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMjRNOgotCQkJCXJhdGVfaWR4ID0gNDsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMzZNOgotCQkJCXJhdGVfaWR4ID0gNTsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFNDhNOgotCQkJCXJhdGVfaWR4ID0gNjsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFNTRNOgotCQkJCXJhdGVfaWR4ID0gNzsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmF0ZV9pZHggPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChkZXNjX3JhdGUpIHsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1MwOgotCQkJcmF0ZV9pZHggPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMToKLQkJCXJhdGVfaWR4ID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzI6Ci0JCQlyYXRlX2lkeCA9IDI7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1MzOgotCQkJcmF0ZV9pZHggPSAzOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTNDoKLQkJCXJhdGVfaWR4ID0gNDsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzU6Ci0JCQlyYXRlX2lkeCA9IDU7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1M2OgotCQkJcmF0ZV9pZHggPSA2OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTNzoKLQkJCXJhdGVfaWR4ID0gNzsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzg6Ci0JCQlyYXRlX2lkeCA9IDg7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1M5OgotCQkJcmF0ZV9pZHggPSA5OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMTA6Ci0JCQlyYXRlX2lkeCA9IDEwOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMTE6Ci0JCQlyYXRlX2lkeCA9IDExOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMTI6Ci0JCQlyYXRlX2lkeCA9IDEyOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMTM6Ci0JCQlyYXRlX2lkeCA9IDEzOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMTQ6Ci0JCQlyYXRlX2lkeCA9IDE0OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMTU6Ci0JCQlyYXRlX2lkeCA9IDE1OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyYXRlX2lkeCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gcmF0ZV9pZHg7Ci19Ci0KIHN0YXRpYyB2b2lkIF9ydGw4OGVlX3F1ZXJ5X3J4cGh5c3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJc3RydWN0IHJ0bF9zdGF0cyAqcHN0YXR1cywgdTggKnBkZXNjLAogCQkJc3RydWN0IHJ4X2Z3aW5mb184OGUgKnBfZHJ2aW5mbywKQEAgLTYzMCw4ICs0NzIsOCBAQAogCSAqIGFyZSB1c2UgKFJYX0ZMQUdfSFQpCiAJICogTm90aWNlOiB0aGlzIGlzIGRpZmYgd2l0aCB3aW5kb3dzIGRlZmluZQogCSAqLwotCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSBfcnRsODhlZV9yYXRlX21hcHBpbmcoaHcsCi0JCQkJc3RhdHVzLT5pc19odCwgc3RhdHVzLT5yYXRlKTsKKwlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gcnRsd2lmaV9yYXRlX21hcHBpbmcoaHcsIHN0YXR1cy0+aXNfaHQsCisJCQkJCQkgICBmYWxzZSwgc3RhdHVzLT5yYXRlKTsKIAogCXJ4X3N0YXR1cy0+bWFjdGltZSA9IHN0YXR1cy0+dGltZXN0YW1wX2xvdzsKIAlpZiAocGh5c3RhdHVzID09IHRydWUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZG1fY29tbW9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2RtX2NvbW1vbi5jCmluZGV4IGY2Y2I1YWUuLmY1ZWU2N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZG1fY29tbW9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9kbV9jb21tb24uYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgInBoeV9jb21tb24uaCIKICNpbmNsdWRlICIuLi9wY2kuaCIKICNpbmNsdWRlICIuLi9iYXNlLmgiCisjaW5jbHVkZSAiLi4vY29yZS5oIgogCiAjZGVmaW5lIEJUX1JTU0lfU1RBVEVfTk9STUFMX1BPV0VSCUJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMCwgMSkKICNkZWZpbmUgQlRfUlNTSV9TVEFURV9BTURQVV9PRkYJCUJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMSwgMSkKQEAgLTE5NCwzNiArMTk1LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRtX3NhdmVwb3dlcmluZGV4KTsKIAotc3RhdGljIHZvaWQgcnRsOTJjX2RtX2RpZ2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwotCXN0cnVjdCBkaWdfdCAqZG1fZGlndGFibGUgPSAmcnRscHJpdi0+ZG1fZGlndGFibGU7Ci0KLQlkbV9kaWd0YWJsZS0+ZGlnX2VuYWJsZV9mbGFnID0gdHJ1ZTsKLQlkbV9kaWd0YWJsZS0+ZGlnX2V4dF9wb3J0X3N0YWdlID0gRElHX0VYVF9QT1JUX1NUQUdFX01BWDsKLQlkbV9kaWd0YWJsZS0+Y3VyX2lndmFsdWUgPSAweDIwOwotCWRtX2RpZ3RhYmxlLT5wcmVfaWd2YWx1ZSA9IDB4MDsKLQlkbV9kaWd0YWJsZS0+Y3Vyc3RhX2NzdGF0ZSA9IERJR19TVEFfRElTQ09OTkVDVDsKLQlkbV9kaWd0YWJsZS0+cHJlc3RhX2NzdGF0ZSA9IERJR19TVEFfRElTQ09OTkVDVDsKLQlkbV9kaWd0YWJsZS0+Y3VybXVsdGlzdGFfY3N0YXRlID0gRElHX01VTFRJU1RBX0RJU0NPTk5FQ1Q7Ci0JZG1fZGlndGFibGUtPnJzc2lfbG93dGhyZXNoID0gRE1fRElHX1RIUkVTSF9MT1c7Ci0JZG1fZGlndGFibGUtPnJzc2lfaGlnaHRocmVzaCA9IERNX0RJR19USFJFU0hfSElHSDsKLQlkbV9kaWd0YWJsZS0+ZmFfbG93dGhyZXNoID0gRE1fRkFMU0VBTEFSTV9USFJFU0hfTE9XOwotCWRtX2RpZ3RhYmxlLT5mYV9oaWdodGhyZXNoID0gRE1fRkFMU0VBTEFSTV9USFJFU0hfSElHSDsKLQlkbV9kaWd0YWJsZS0+cnhfZ2Fpbl9tYXggPSBETV9ESUdfTUFYOwotCWRtX2RpZ3RhYmxlLT5yeF9nYWluX21pbiA9IERNX0RJR19NSU47Ci0JZG1fZGlndGFibGUtPmJhY2tfdmFsID0gRE1fRElHX0JBQ0tPRkZfREVGQVVMVDsKLQlkbV9kaWd0YWJsZS0+YmFja19yYW5nZV9tYXggPSBETV9ESUdfQkFDS09GRl9NQVg7Ci0JZG1fZGlndGFibGUtPmJhY2tfcmFuZ2VfbWluID0gRE1fRElHX0JBQ0tPRkZfTUlOOwotCWRtX2RpZ3RhYmxlLT5wcmVfY2NrX3BkX3N0YXRlID0gQ0NLX1BEX1NUQUdFX01BWDsKLQlkbV9kaWd0YWJsZS0+Y3VyX2Nja19wZF9zdGF0ZSA9IENDS19QRF9TVEFHRV9Mb3dSc3NpOwotCi0JZG1fZGlndGFibGUtPmZvcmJpZGRlbl9pZ2kgPSBETV9ESUdfTUlOOwotCWRtX2RpZ3RhYmxlLT5sYXJnZV9mYV9oaXQgPSAwOwotCWRtX2RpZ3RhYmxlLT5yZWNvdmVyX2NudCA9IDA7Ci0JZG1fZGlndGFibGUtPmRpZ19keW5hbWljX21pbiAgPSAweDI1OwotfQotCiBzdGF0aWMgdTggcnRsOTJjX2RtX2luaXRpYWxfZ2Fpbl9taW5fcHdkYihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CkBAIC01MDcsMjcgKzQ3OCwyNyBAQAogCQlpZiAoZG1fZGlndGFibGUtPnJzc2lfdmFsX21pbiA+IDEwMCkKIAkJCWRtX2RpZ3RhYmxlLT5yc3NpX3ZhbF9taW4gPSAxMDA7CiAKLQkJaWYgKGRtX2RpZ3RhYmxlLT5wcmVfY2NrX3BkX3N0YXRlID09IENDS19QRF9TVEFHRV9Mb3dSc3NpKSB7CisJCWlmIChkbV9kaWd0YWJsZS0+cHJlX2Nja19wZF9zdGF0ZSA9PSBDQ0tfUERfU1RBR0VfTE9XUlNTSSkgewogCQkJaWYgKGRtX2RpZ3RhYmxlLT5yc3NpX3ZhbF9taW4gPD0gMjUpCiAJCQkJZG1fZGlndGFibGUtPmN1cl9jY2tfcGRfc3RhdGUgPQotCQkJCSAgICBDQ0tfUERfU1RBR0VfTG93UnNzaTsKKwkJCQkgICAgQ0NLX1BEX1NUQUdFX0xPV1JTU0k7CiAJCQllbHNlCiAJCQkJZG1fZGlndGFibGUtPmN1cl9jY2tfcGRfc3RhdGUgPQotCQkJCSAgICBDQ0tfUERfU1RBR0VfSGlnaFJzc2k7CisJCQkJICAgIENDS19QRF9TVEFHRV9ISUdIUlNTSTsKIAkJfSBlbHNlIHsKIAkJCWlmIChkbV9kaWd0YWJsZS0+cnNzaV92YWxfbWluIDw9IDIwKQogCQkJCWRtX2RpZ3RhYmxlLT5jdXJfY2NrX3BkX3N0YXRlID0KLQkJCQkgICAgQ0NLX1BEX1NUQUdFX0xvd1Jzc2k7CisJCQkJICAgIENDS19QRF9TVEFHRV9MT1dSU1NJOwogCQkJZWxzZQogCQkJCWRtX2RpZ3RhYmxlLT5jdXJfY2NrX3BkX3N0YXRlID0KLQkJCQkgICAgQ0NLX1BEX1NUQUdFX0hpZ2hSc3NpOworCQkJCSAgICBDQ0tfUERfU1RBR0VfSElHSFJTU0k7CiAJCX0KIAl9IGVsc2UgewogCQlkbV9kaWd0YWJsZS0+Y3VyX2Nja19wZF9zdGF0ZSA9IENDS19QRF9TVEFHRV9NQVg7CiAJfQogCiAJaWYgKGRtX2RpZ3RhYmxlLT5wcmVfY2NrX3BkX3N0YXRlICE9IGRtX2RpZ3RhYmxlLT5jdXJfY2NrX3BkX3N0YXRlKSB7Ci0JCWlmICgoZG1fZGlndGFibGUtPmN1cl9jY2tfcGRfc3RhdGUgPT0gQ0NLX1BEX1NUQUdFX0xvd1Jzc2kpIHx8CisJCWlmICgoZG1fZGlndGFibGUtPmN1cl9jY2tfcGRfc3RhdGUgPT0gQ0NLX1BEX1NUQUdFX0xPV1JTU0kpIHx8CiAJCSAgICAoZG1fZGlndGFibGUtPmN1cl9jY2tfcGRfc3RhdGUgPT0gQ0NLX1BEX1NUQUdFX01BWCkpCiAJCQlydGxfc2V0X2JicmVnKGh3LCBSQ0NLMF9DQ0EsIE1BU0tCWVRFMiwgMHg4Myk7CiAJCWVsc2UKQEAgLTEzNzQsNyArMTM0NSw3IEBACiAJcnRscHJpdi0+ZG0udW5kZWNfc21fcHdkYiA9IC0xOwogCXJ0bHByaXYtPmRtLnVuZGVjX3NtX2NjayA9IC0xOwogCXJ0bHByaXYtPmRtLmRtX2luaXRpYWxnYWluX2VuYWJsZSA9IHRydWU7Ci0JcnRsOTJjX2RtX2RpZ2luaXQoaHcpOworCXJ0bF9kbV9kaWdpbml0KGh3LCAweDIwKTsKIAogCXJ0bHByaXYtPmRtLmRtX2ZsYWcgfD0gSEFMX0RNX0hJUFdSX0RJU0FCTEU7CiAJcnRsOTJjX2RtX2luaXRfZHluYW1pY190eHBvd2VyKGh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZG1fY29tbW9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2RtX2NvbW1vbi5oCmluZGV4IDRmMjMyYTAuLjQ0MjJlMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZG1fY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9kbV9jb21tb24uaApAQCAtNDcsMjUgKzQ3LDEyIEBACiAjZGVmaW5lIEJXX0FVVE9fU1dJVENIX0hJR0hfTE9XCQkJMjUKICNkZWZpbmUgQldfQVVUT19TV0lUQ0hfTE9XX0hJR0gJCQkzMAogCi0jZGVmaW5lIERNX0RJR19USFJFU0hfSElHSAkJCTQwCi0jZGVmaW5lIERNX0RJR19USFJFU0hfTE9XCQkJMzUKLQotI2RlZmluZSBETV9GQUxTRUFMQVJNX1RIUkVTSF9MT1cJCTQwMAotI2RlZmluZSBETV9GQUxTRUFMQVJNX1RIUkVTSF9ISUdICQkxMDAwCi0KLSNkZWZpbmUgRE1fRElHX01BWAkJCQkweDNlCi0jZGVmaW5lIERNX0RJR19NSU4JCQkJMHgxZQotCiAjZGVmaW5lIERNX0RJR19GQV9VUFBFUgkJCQkweDMyCiAjZGVmaW5lIERNX0RJR19GQV9MT1dFUgkJCQkweDIwCiAjZGVmaW5lIERNX0RJR19GQV9USDAJCQkJMHgyMAogI2RlZmluZSBETV9ESUdfRkFfVEgxCQkJCTB4MTAwCiAjZGVmaW5lIERNX0RJR19GQV9USDIJCQkJMHgyMDAKIAotI2RlZmluZSBETV9ESUdfQkFDS09GRl9NQVgJCQkxMgotI2RlZmluZSBETV9ESUdfQkFDS09GRl9NSU4JCQktNAotI2RlZmluZSBETV9ESUdfQkFDS09GRl9ERUZBVUxUCQkJMTAKLQogI2RlZmluZSBSWFBBVEhTRUxFQ1RJT05fU1NfVEhfbE9XCQkzMAogI2RlZmluZSBSWFBBVEhTRUxFQ1RJT05fRElGRl9USAkJCTE4CiAKQEAgLTEyMywxNCArMTEwLDYgQEAKIAlESUdfT1BfVFlQRV9NQVgKIH07CiAKLWVudW0gdGFnX2Nja19wYWNrZXRfZGV0ZWN0aW9uX3RocmVzaG9sZF90eXBlX2RlZmluaXRpb24gewotCUNDS19QRF9TVEFHRV9Mb3dSc3NpID0gMCwKLQlDQ0tfUERfU1RBR0VfSGlnaFJzc2kgPSAxLAotCUNDS19GQV9TVEFHRV9Mb3cgPSAyLAotCUNDS19GQV9TVEFHRV9IaWdoID0gMywKLQlDQ0tfUERfU1RBR0VfTUFYID0gNCwKLX07Ci0KIGVudW0gZG1fMXJfY2NhX2UgewogCUNDQV8xUiA9IDAsCiAJQ0NBXzJSID0gMSwKQEAgLTE0OSwyMyArMTI4LDYgQEAKIAlBTlNfQU5URU5OQV9NQVggPSAzLAogfTsKIAotZW51bSBkbV9kaWdfZXh0X3BvcnRfYWxnX2UgewotCURJR19FWFRfUE9SVF9TVEFHRV8wID0gMCwKLQlESUdfRVhUX1BPUlRfU1RBR0VfMSA9IDEsCi0JRElHX0VYVF9QT1JUX1NUQUdFXzIgPSAyLAotCURJR19FWFRfUE9SVF9TVEFHRV8zID0gMywKLQlESUdfRVhUX1BPUlRfU1RBR0VfTUFYID0gNCwKLX07Ci0KLWVudW0gZG1fZGlnX2Nvbm5lY3RfZSB7Ci0JRElHX1NUQV9ESVNDT05ORUNUID0gMCwKLQlESUdfU1RBX0NPTk5FQ1QgPSAxLAotCURJR19TVEFfQkVGT1JFX0NPTk5FQ1QgPSAyLAotCURJR19NVUxUSVNUQV9ESVNDT05ORUNUID0gMywKLQlESUdfTVVMVElTVEFfQ09OTkVDVCA9IDQsCi0JRElHX0NPTk5FQ1RfTUFYCi19OwotCiB2b2lkIHJ0bDkyY19kbV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsOTJjX2RtX3dhdGNoZG9nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsOTJjX2RtX3dyaXRlX2RpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2Z3X2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyYy9md19jb21tb24uaAppbmRleCBiNjRhZTQ1Li5lOWY0MjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjL2Z3X2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmMvZndfY29tbW9uLmgKQEAgLTM3LDYgKzM3LDcgQEAKICNkZWZpbmUgRldfODE5MkNfUE9MTElOR19ERUxBWQkJCTUKICNkZWZpbmUgRldfODE5MkNfUE9MTElOR19USU1FT1VUX0NPVU5UCQkxMDAKICNkZWZpbmUgTk9STUFMX0NISVAJCQkJQklUKDQpCisjZGVmaW5lIEgyQ185MkNfS0VFUF9BTElWRV9DVFJMCQkJNDgKIAogI2RlZmluZSBJU19GV19IRUFERVJfRVhJU1QoX3Bmd2hkcikJXAogCSgobGUxNl90b19jcHUoX3Bmd2hkci0+c2lnbmF0dXJlKSYweEZGRjApID09IDB4OTJDMCB8fFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2RtLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9kbS5jCmluZGV4IDc0ZjljMDguLjA5ODk4Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2RtLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZG0uYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIi4uL3dpZmkuaCIKICNpbmNsdWRlICIuLi9iYXNlLmgiCiAjaW5jbHVkZSAiLi4vcGNpLmgiCisjaW5jbHVkZSAiLi4vY29yZS5oIgogI2luY2x1ZGUgInJlZy5oIgogI2luY2x1ZGUgImRlZi5oIgogI2luY2x1ZGUgInBoeS5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZG0uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2RtLmgKaW5kZXggOWM1MzExYy4uMzhiYTcwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvZG0uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9kbS5oCkBAIC00MiwyNSArNDIsMTIgQEAKICNkZWZpbmUgQldfQVVUT19TV0lUQ0hfSElHSF9MT1cJCQkyNQogI2RlZmluZSBCV19BVVRPX1NXSVRDSF9MT1dfSElHSAkJCTMwCiAKLSNkZWZpbmUgRE1fRElHX1RIUkVTSF9ISUdICQkJNDAKLSNkZWZpbmUgRE1fRElHX1RIUkVTSF9MT1cJCQkzNQotCi0jZGVmaW5lIERNX0ZBTFNFQUxBUk1fVEhSRVNIX0xPVwkJNDAwCi0jZGVmaW5lIERNX0ZBTFNFQUxBUk1fVEhSRVNIX0hJR0gJCTEwMDAKLQotI2RlZmluZSBETV9ESUdfTUFYCQkJCTB4M2UKLSNkZWZpbmUgRE1fRElHX01JTgkJCQkweDFlCi0KICNkZWZpbmUgRE1fRElHX0ZBX1VQUEVSCQkJCTB4MzIKICNkZWZpbmUgRE1fRElHX0ZBX0xPV0VSCQkJCTB4MjAKICNkZWZpbmUgRE1fRElHX0ZBX1RIMAkJCQkweDIwCiAjZGVmaW5lIERNX0RJR19GQV9USDEJCQkJMHgxMDAKICNkZWZpbmUgRE1fRElHX0ZBX1RIMgkJCQkweDIwMAogCi0jZGVmaW5lIERNX0RJR19CQUNLT0ZGX01BWAkJCTEyCi0jZGVmaW5lIERNX0RJR19CQUNLT0ZGX01JTgkJCS00Ci0jZGVmaW5lIERNX0RJR19CQUNLT0ZGX0RFRkFVTFQJCQkxMAotCiAjZGVmaW5lIFJYUEFUSFNFTEVDVElPTl9TU19USF9sT1cJCTMwCiAjZGVmaW5lIFJYUEFUSFNFTEVDVElPTl9ESUZGX1RICQkJMTgKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL2h3LmMKaW5kZXggNWM2NDZkNS4uMzAzYjI5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9ody5jCkBAIC01NDQsOCArNTQ0LDEzIEBACiAJCQkJCQkodTggKikoJmZ3X2N1cnJlbnRfaW5wcykpOwogCQkJfQogCQlicmVhazsgfQotCWNhc2UgSFdfVkFSX0tFRVBfQUxJVkU6Ci0JCWJyZWFrOworCWNhc2UgSFdfVkFSX0tFRVBfQUxJVkU6IHsKKwkJdTggYXJyYXlbMl07CisKKwkJYXJyYXlbMF0gPSAweGZmOworCQlhcnJheVsxXSA9ICooKHU4ICopdmFsKTsKKwkJcnRsOTJjX2ZpbGxfaDJjX2NtZChodywgSDJDXzkyQ19LRUVQX0FMSVZFX0NUUkwsIDIsIGFycmF5KTsKKwkJYnJlYWs7IH0KIAlkZWZhdWx0OgogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAogCQkJICJzd2l0Y2ggY2FzZSAlZCBub3QgcHJvY2Vzc2VkXG4iLCB2YXJpYWJsZSk7CkBAIC0xMTU2LDQ3ICsxMTYxLDM1IEBACiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXU4IGJ0X21zciA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgTVNSKTsKIAllbnVtIGxlZF9jdGxfbW9kZSBsZWRhY3Rpb24gPSBMRURfQ1RMX05PX0xJTks7Ci0JYnRfbXNyICY9IDB4ZmM7CisJdTggbW9kZSA9IE1TUl9OT0xJTks7CiAKLQlpZiAodHlwZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCB8fAotCSAgICB0eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJX3J0bDkyY2Vfc3RvcF90eF9iZWFjb24oaHcpOwotCQlfcnRsOTJjZV9lbmFibGVfYmNuX3N1Yl9mdW5jKGh3KTsKLQl9IGVsc2UgaWYgKHR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwgdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAotCQkgICB0eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHsKLQkJX3J0bDkyY2VfcmVzdW1lX3R4X2JlYWNvbihodyk7Ci0JCV9ydGw5MmNlX2Rpc2FibGVfYmNuX3N1Yl9mdW5jKGh3KTsKLQl9IGVsc2UgewotCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX1dBUk5JTkcsCi0JCQkgIlNldCBIV19WQVJfTUVESUFfU1RBVFVTOiBObyBzdWNoIG1lZGlhIHN0YXR1cygleClcbiIsCi0JCQkgdHlwZSk7Ci0JfQorCWJ0X21zciAmPSAweGZjOwogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDoKLQkJYnRfbXNyIHw9IE1TUl9OT0xJTks7Ci0JCWxlZGFjdGlvbiA9IExFRF9DVExfTElOSzsKKwkJbW9kZSA9IE1TUl9OT0xJTks7CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAogCQkJICJTZXQgTmV0d29yayB0eXBlIHRvIE5PIExJTkshXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoKLQkJYnRfbXNyIHw9IE1TUl9BREhPQzsKKwkJbW9kZSA9IE1TUl9BREhPQzsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfVFJBQ0UsCiAJCQkgIlNldCBOZXR3b3JrIHR5cGUgdG8gQWQgSG9jIVxuIik7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJYnRfbXNyIHw9IE1TUl9JTkZSQTsKKwkJbW9kZSA9IE1TUl9JTkZSQTsKIAkJbGVkYWN0aW9uID0gTEVEX0NUTF9MSU5LOwogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKIAkJCSAiU2V0IE5ldHdvcmsgdHlwZSB0byBTVEEhXG4iKTsKIAkJYnJlYWs7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQkJYnRfbXNyIHw9IE1TUl9BUDsKKwkJbW9kZSA9IE1TUl9BUDsKKwkJbGVkYWN0aW9uID0gTEVEX0NUTF9MSU5LOwogCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19UUkFDRSwKIAkJCSAiU2V0IE5ldHdvcmsgdHlwZSB0byBBUCFcbiIpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6Ci0JCWJ0X21zciB8PSBNU1JfQURIT0M7CisJCW1vZGUgPSBNU1JfQURIT0M7CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfSU5JVCwgREJHX1RSQUNFLAogCQkJICJTZXQgTmV0d29yayB0eXBlIHRvIE1lc2ggUG9pbnQhXG4iKTsKIAkJYnJlYWs7CkBAIC0xMjA3LDkgKzEyMDAsMzIgQEAKIAogCX0KIAotCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIChNU1IpLCBidF9tc3IpOworCS8qIE1TUl9JTkZSQSA9PSBMaW5rIGluIGluZnJhc3RydWN0dXJlIG5ldHdvcms7CisJICogTVNSX0FESE9DID09IExpbmsgaW4gYWQgaG9jIG5ldHdvcms7CisJICogVGhlcmVmb3JlLCBjaGVjayBsaW5rIHN0YXRlIGlzIG5lY2Vzc2FyeS4KKwkgKgorCSAqIE1TUl9BUCA9PSBBUCBtb2RlOyBsaW5rIHN0YXRlIGRvZXMgbm90IG1hdHRlciBoZXJlLgorCSAqLworCWlmIChtb2RlICE9IE1TUl9BUCAmJgorCSAgICBydGxwcml2LT5tYWM4MDIxMS5saW5rX3N0YXRlIDwgTUFDODAyMTFfTElOS0VEKSB7CisJCW1vZGUgPSBNU1JfTk9MSU5LOworCQlsZWRhY3Rpb24gPSBMRURfQ1RMX05PX0xJTks7CisJfQorCWlmIChtb2RlID09IE1TUl9OT0xJTksgfHwgbW9kZSA9PSBNU1JfSU5GUkEpIHsKKwkJX3J0bDkyY2Vfc3RvcF90eF9iZWFjb24oaHcpOworCQlfcnRsOTJjZV9lbmFibGVfYmNuX3N1Yl9mdW5jKGh3KTsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gTVNSX0FESE9DIHx8IG1vZGUgPT0gTVNSX0FQKSB7CisJCV9ydGw5MmNlX3Jlc3VtZV90eF9iZWFjb24oaHcpOworCQlfcnRsOTJjZV9kaXNhYmxlX2Jjbl9zdWJfZnVuYyhodyk7CisJfSBlbHNlIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19XQVJOSU5HLAorCQkJICJTZXQgSFdfVkFSX01FRElBX1NUQVRVUzogTm8gc3VjaCBtZWRpYSBzdGF0dXMoJXgpLlxuIiwKKwkJCSBtb2RlKTsKKwl9CisJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgTVNSLCBidF9tc3IgfCBtb2RlKTsKKwogCXJ0bHByaXYtPmNmZy0+b3BzLT5sZWRfY29udHJvbChodywgbGVkYWN0aW9uKTsKLQlpZiAoKGJ0X21zciAmIE1TUl9NQVNLKSA9PSBNU1JfQVApCisJaWYgKG1vZGUgPT0gTVNSX0FQKQogCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQkNOVENGRyArIDEsIDB4MDApOwogCWVsc2UKIAkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0JDTlRDRkcgKyAxLCAweDY2KTsKQEAgLTE4MzMsNyArMTg0OSw2IEBACiAJdTMyIHJhdHJfdmFsdWU7CiAJdTggcmF0cl9pbmRleCA9IDA7CiAJdTggbm1vZGUgPSBtYWMtPmh0X2VuYWJsZTsKLQl1OCBtaW1vX3BzID0gSUVFRTgwMjExX1NNUFNfT0ZGOwogCXUxNiBzaG9ydGdpX3JhdGU7CiAJdTMyIHRtcF9yYXRyX3ZhbHVlOwogCXU4IGN1cnR4YndfNDBtaHogPSBtYWMtPmJ3XzQwOwpAQCAtMTg0Miw2ICsxODU3LDcgQEAKIAl1OCBjdXJzaG9ydGdpXzIwbWh6ID0gKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU0dJXzIwKSA/CiAJCQkgICAgICAgMSA6IDA7CiAJZW51bSB3aXJlbGVzc19tb2RlIHdpcmVsZXNzbW9kZSA9IG1hYy0+bW9kZTsKKwl1MzIgcmF0cl9tYXNrOwogCiAJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzVHKQogCQlyYXRyX3ZhbHVlID0gc3RhLT5zdXBwX3JhdGVzWzFdIDw8IDQ7CkBAIC0xODY1LDE5ICsxODgxLDEzIEBACiAJY2FzZSBXSVJFTEVTU19NT0RFX05fMjRHOgogCWNhc2UgV0lSRUxFU1NfTU9ERV9OXzVHOgogCQlubW9kZSA9IDE7Ci0JCWlmIChtaW1vX3BzID09IElFRUU4MDIxMV9TTVBTX1NUQVRJQykgewotCQkJcmF0cl92YWx1ZSAmPSAweDAwMDdGMDA1OwotCQl9IGVsc2UgewotCQkJdTMyIHJhdHJfbWFzazsKKwkJaWYgKGdldF9yZl90eXBlKHJ0bHBoeSkgPT0gUkZfMVQyUiB8fAorCQkgICAgZ2V0X3JmX3R5cGUocnRscGh5KSA9PSBSRl8xVDFSKQorCQkJcmF0cl9tYXNrID0gMHgwMDBmZjAwNTsKKwkJZWxzZQorCQkJcmF0cl9tYXNrID0gMHgwZjBmZjAwNTsKIAotCQkJaWYgKGdldF9yZl90eXBlKHJ0bHBoeSkgPT0gUkZfMVQyUiB8fAotCQkJICAgIGdldF9yZl90eXBlKHJ0bHBoeSkgPT0gUkZfMVQxUikKLQkJCQlyYXRyX21hc2sgPSAweDAwMGZmMDA1OwotCQkJZWxzZQotCQkJCXJhdHJfbWFzayA9IDB4MGYwZmYwMDU7Ci0KLQkJCXJhdHJfdmFsdWUgJj0gcmF0cl9tYXNrOwotCQl9CisJCXJhdHJfdmFsdWUgJj0gcmF0cl9tYXNrOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAocnRscGh5LT5yZl90eXBlID09IFJGXzFUMlIpCkBAIC0xOTMwLDE3ICsxOTQwLDE2IEBACiAJc3RydWN0IHJ0bF9zdGFfaW5mbyAqc3RhX2VudHJ5ID0gTlVMTDsKIAl1MzIgcmF0cl9iaXRtYXA7CiAJdTggcmF0cl9pbmRleDsKLQl1OCBjdXJ0eGJ3XzQwbWh6ID0gKHN0YS0+YmFuZHdpZHRoID49IElFRUU4MDIxMV9TVEFfUlhfQldfNDApID8gMSA6IDA7Ci0JdTggY3Vyc2hvcnRnaV80MG1oeiA9IGN1cnR4YndfNDBtaHogJiYKLQkJCSAgICAgIChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCkgPwotCQkJCTEgOiAwOworCXU4IGN1cnR4YndfNDBtaHogPSAoc3RhLT5odF9jYXAuY2FwICYKKwkJCSAgICBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkgPyAxIDogMDsKKwl1OCBjdXJzaG9ydGdpXzQwbWh6ID0gKHN0YS0+aHRfY2FwLmNhcCAmCisJCQkgICAgICAgSUVFRTgwMjExX0hUX0NBUF9TR0lfNDApID8gIDEgOiAwOwogCXU4IGN1cnNob3J0Z2lfMjBtaHogPSAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApID8KIAkJCQkxIDogMDsKIAllbnVtIHdpcmVsZXNzX21vZGUgd2lyZWxlc3Ntb2RlID0gMDsKIAlib29sIHNob3J0Z2kgPSBmYWxzZTsKIAl1OCByYXRlX21hc2tbNV07CiAJdTggbWFjaWQgPSAwOwotCXU4IG1pbW9fcHMgPSBJRUVFODAyMTFfU01QU19PRkY7CiAKIAlzdGFfZW50cnkgPSAoc3RydWN0IHJ0bF9zdGFfaW5mbyAqKSBzdGEtPmRydl9wcml2OwogCXdpcmVsZXNzbW9kZSA9IHN0YV9lbnRyeS0+d2lyZWxlc3NfbW9kZTsKQEAgLTE5ODUsNDcgKzE5OTQsMzggQEAKIAljYXNlIFdJUkVMRVNTX01PREVfTl81RzoKIAkJcmF0cl9pbmRleCA9IFJBVFJfSU5YX1dJUkVMRVNTX05HQjsKIAotCQlpZiAobWltb19wcyA9PSBJRUVFODAyMTFfU01QU19TVEFUSUMpIHsKLQkJCWlmIChyc3NpX2xldmVsID09IDEpCi0JCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDA3MDAwMDsKLQkJCWVsc2UgaWYgKHJzc2lfbGV2ZWwgPT0gMikKLQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMDdmMDAwOwotCQkJZWxzZQotCQkJCXJhdHJfYml0bWFwICY9IDB4MDAwN2YwMDU7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocnRscGh5LT5yZl90eXBlID09IFJGXzFUMlIgfHwKLQkJCSAgICBydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQxUikgewotCQkJCWlmIChjdXJ0eGJ3XzQwbWh6KSB7Ci0JCQkJCWlmIChyc3NpX2xldmVsID09IDEpCi0JCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGYwMDAwOwotCQkJCQllbHNlIGlmIChyc3NpX2xldmVsID09IDIpCi0JCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGZmMDAwOwotCQkJCQllbHNlCi0JCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGZmMDE1OwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChyc3NpX2xldmVsID09IDEpCi0JCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGYwMDAwOwotCQkJCQllbHNlIGlmIChyc3NpX2xldmVsID09IDIpCi0JCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGZmMDAwOwotCQkJCQllbHNlCi0JCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGZmMDA1OwotCQkJCX0KKwkJaWYgKHJ0bHBoeS0+cmZfdHlwZSA9PSBSRl8xVDJSIHx8CisJCSAgICBydGxwaHktPnJmX3R5cGUgPT0gUkZfMVQxUikgeworCQkJaWYgKGN1cnR4YndfNDBtaHopIHsKKwkJCQlpZiAocnNzaV9sZXZlbCA9PSAxKQorCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGYwMDAwOworCQkJCWVsc2UgaWYgKHJzc2lfbGV2ZWwgPT0gMikKKwkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDBmZjAwMDsKKwkJCQllbHNlCisJCQkJCXJhdHJfYml0bWFwICY9IDB4MDAwZmYwMTU7CiAJCQl9IGVsc2UgewotCQkJCWlmIChjdXJ0eGJ3XzQwbWh6KSB7Ci0JCQkJCWlmIChyc3NpX2xldmVsID09IDEpCi0JCQkJCQlyYXRyX2JpdG1hcCAmPSAweDBmMGYwMDAwOwotCQkJCQllbHNlIGlmIChyc3NpX2xldmVsID09IDIpCi0JCQkJCQlyYXRyX2JpdG1hcCAmPSAweDBmMGZmMDAwOwotCQkJCQllbHNlCi0JCQkJCQlyYXRyX2JpdG1hcCAmPSAweDBmMGZmMDE1OwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChyc3NpX2xldmVsID09IDEpCi0JCQkJCQlyYXRyX2JpdG1hcCAmPSAweDBmMGYwMDAwOwotCQkJCQllbHNlIGlmIChyc3NpX2xldmVsID09IDIpCi0JCQkJCQlyYXRyX2JpdG1hcCAmPSAweDBmMGZmMDAwOwotCQkJCQllbHNlCi0JCQkJCQlyYXRyX2JpdG1hcCAmPSAweDBmMGZmMDA1OwotCQkJCX0KKwkJCQlpZiAocnNzaV9sZXZlbCA9PSAxKQorCQkJCQlyYXRyX2JpdG1hcCAmPSAweDAwMGYwMDAwOworCQkJCWVsc2UgaWYgKHJzc2lfbGV2ZWwgPT0gMikKKwkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwMDBmZjAwMDsKKwkJCQllbHNlCisJCQkJCXJhdHJfYml0bWFwICY9IDB4MDAwZmYwMDU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoY3VydHhid180MG1oeikgeworCQkJCWlmIChyc3NpX2xldmVsID09IDEpCisJCQkJCXJhdHJfYml0bWFwICY9IDB4MGYwZjAwMDA7CisJCQkJZWxzZSBpZiAocnNzaV9sZXZlbCA9PSAyKQorCQkJCQlyYXRyX2JpdG1hcCAmPSAweDBmMGZmMDAwOworCQkJCWVsc2UKKwkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjBmZjAxNTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKHJzc2lfbGV2ZWwgPT0gMSkKKwkJCQkJcmF0cl9iaXRtYXAgJj0gMHgwZjBmMDAwMDsKKwkJCQllbHNlIGlmIChyc3NpX2xldmVsID09IDIpCisJCQkJCXJhdHJfYml0bWFwICY9IDB4MGYwZmYwMDA7CisJCQkJZWxzZQorCQkJCQlyYXRyX2JpdG1hcCAmPSAweDBmMGZmMDA1OwogCQkJfQogCQl9CiAKQEAgLTIwNTgsOSArMjA1OCw2IEBACiAJCSAiUmF0ZV9pbmRleDoleCwgcmF0cl92YWw6JXgsICU1cGhDXG4iLAogCQkgcmF0cl9pbmRleCwgcmF0cl9iaXRtYXAsIHJhdGVfbWFzayk7CiAJcnRsOTJjX2ZpbGxfaDJjX2NtZChodywgSDJDX1JBX01BU0ssIDUsIHJhdGVfbWFzayk7Ci0KLQlpZiAobWFjaWQgIT0gMCkKLQkJc3RhX2VudHJ5LT5yYXRyX2luZGV4ID0gcmF0cl9pbmRleDsKIH0KIAogdm9pZCBydGw5MmNlX3VwZGF0ZV9oYWxfcmF0ZV90Ymwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3BoeS5jCmluZGV4IGJjNWNhOTguLjFlZTVhNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3BoeS5jCkBAIC01MTgsMTEgKzUxOCwxMiBAQAogCQl9CiAJY2FzZSBFUkZTTEVFUDp7CiAJCQlpZiAocHBzYy0+cmZwd3Jfc3RhdGUgPT0gRVJGT0ZGKQotCQkJCXJldHVybiBmYWxzZTsKKwkJCQlicmVhazsKIAkJCWZvciAocXVldWVfaWQgPSAwLCBpID0gMDsKIAkJCSAgICAgcXVldWVfaWQgPCBSVExfUENJX01BWF9UWF9RVUVVRV9DT1VOVDspIHsKIAkJCQlyaW5nID0gJnBjaXByaXYtPmRldi50eF9yaW5nW3F1ZXVlX2lkXTsKLQkJCQlpZiAoc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpID09IDApIHsKKwkJCQlpZiAocXVldWVfaWQgPT0gQkVBQ09OX1FVRVVFIHx8CisJCQkJICAgIHNrYl9xdWV1ZV9sZW4oJnJpbmctPnF1ZXVlKSA9PSAwKSB7CiAJCQkJCXF1ZXVlX2lkKys7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9zdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2Uvc3cuYwppbmRleCBkZDVhYTA4Li5kZTZjYjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjZS9zdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3N3LmMKQEAgLTMzNCwyMSArMzM0LDIxIEBACiAJLm1hcHNbUlRMX0lNUl9ST0tdID0gSU1SX1JPSywKIAkubWFwc1tSVExfSUJTU19JTlRfTUFTS1NdID0gKElNUl9CQ05JTlQgfCBJTVJfVEJET0sgfCBJTVJfVEJERVIpLAogCi0JLm1hcHNbUlRMX1JDX0NDS19SQVRFMU1dID0gREVTQzkyX1JBVEUxTSwKLQkubWFwc1tSVExfUkNfQ0NLX1JBVEUyTV0gPSBERVNDOTJfUkFURTJNLAotCS5tYXBzW1JUTF9SQ19DQ0tfUkFURTVfNU1dID0gREVTQzkyX1JBVEU1XzVNLAotCS5tYXBzW1JUTF9SQ19DQ0tfUkFURTExTV0gPSBERVNDOTJfUkFURTExTSwKLQkubWFwc1tSVExfUkNfT0ZETV9SQVRFNk1dID0gREVTQzkyX1JBVEU2TSwKLQkubWFwc1tSVExfUkNfT0ZETV9SQVRFOU1dID0gREVTQzkyX1JBVEU5TSwKLQkubWFwc1tSVExfUkNfT0ZETV9SQVRFMTJNXSA9IERFU0M5Ml9SQVRFMTJNLAotCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUxOE1dID0gREVTQzkyX1JBVEUxOE0sCi0JLm1hcHNbUlRMX1JDX09GRE1fUkFURTI0TV0gPSBERVNDOTJfUkFURTI0TSwKLQkubWFwc1tSVExfUkNfT0ZETV9SQVRFMzZNXSA9IERFU0M5Ml9SQVRFMzZNLAotCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU0OE1dID0gREVTQzkyX1JBVEU0OE0sCi0JLm1hcHNbUlRMX1JDX09GRE1fUkFURTU0TV0gPSBERVNDOTJfUkFURTU0TSwKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEUxTV0gPSBERVNDX1JBVEUxTSwKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEUyTV0gPSBERVNDX1JBVEUyTSwKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEU1XzVNXSA9IERFU0NfUkFURTVfNU0sCisJLm1hcHNbUlRMX1JDX0NDS19SQVRFMTFNXSA9IERFU0NfUkFURTExTSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFNk1dID0gREVTQ19SQVRFNk0sCisJLm1hcHNbUlRMX1JDX09GRE1fUkFURTlNXSA9IERFU0NfUkFURTlNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUxMk1dID0gREVTQ19SQVRFMTJNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUxOE1dID0gREVTQ19SQVRFMThNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUyNE1dID0gREVTQ19SQVRFMjRNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUzNk1dID0gREVTQ19SQVRFMzZNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU0OE1dID0gREVTQ19SQVRFNDhNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU1NE1dID0gREVTQ19SQVRFNTRNLAogCi0JLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1M3XSA9IERFU0M5Ml9SQVRFTUNTNywKLQkubWFwc1tSVExfUkNfSFRfUkFURU1DUzE1XSA9IERFU0M5Ml9SQVRFTUNTMTUsCisJLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1M3XSA9IERFU0NfUkFURU1DUzcsCisJLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1MxNV0gPSBERVNDX1JBVEVNQ1MxNSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydGw5MmNlX3BjaV9pZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmNlL3RyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvdHJ4LmMKaW5kZXggZTg4ZGNkMC4uODRkZGQ0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvdHJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY2UvdHJ4LmMKQEAgLTI1Nyw4ICsyNTcsOCBAQAogCQlwc3RhdHMtPnJlY3ZzaWduYWxwb3dlciA9IHJ4X3B3cl9hbGw7CiAKIAkJLyogKDMpRVZNIG9mIEhUIHJhdGUgKi8KLQkJaWYgKHBzdGF0cy0+aXNfaHQgJiYgcHN0YXRzLT5yYXRlID49IERFU0M5Ml9SQVRFTUNTOCAmJgotCQkgICAgcHN0YXRzLT5yYXRlIDw9IERFU0M5Ml9SQVRFTUNTMTUpCisJCWlmIChwc3RhdHMtPmlzX2h0ICYmIHBzdGF0cy0+cmF0ZSA+PSBERVNDX1JBVEVNQ1M4ICYmCisJCSAgICBwc3RhdHMtPnJhdGUgPD0gREVTQ19SQVRFTUNTMTUpCiAJCQltYXhfc3BhdGlhbF9zdHJlYW0gPSAyOwogCQllbHNlCiAJCQltYXhfc3BhdGlhbF9zdHJlYW0gPSAxOwpAQCAtNDAwLDkgKzQwMCw4IEBACiAJICogYXJlIHVzZSAoUlhfRkxBR19IVCkKIAkgKiBOb3RpY2U6IHRoaXMgaXMgZGlmZiB3aXRoIHdpbmRvd3MgZGVmaW5lCiAJICovCi0Jcnhfc3RhdHVzLT5yYXRlX2lkeCA9IHJ0bHdpZmlfcmF0ZV9tYXBwaW5nKGh3LAotCQkJCXN0YXRzLT5pc19odCwgc3RhdHMtPnJhdGUsCi0JCQkJc3RhdHMtPmlzZmlyc3RfYW1wZHUpOworCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSBydGx3aWZpX3JhdGVfbWFwcGluZyhodywgc3RhdHMtPmlzX2h0LAorCQkJCQkJICAgZmFsc2UsIHN0YXRzLT5yYXRlKTsKIAogCXJ4X3N0YXR1cy0+bWFjdGltZSA9IHN0YXRzLT50aW1lc3RhbXBfbG93OwogCWlmIChwaHlzdGF0dXMpIHsKQEAgLTUwMSw3ICs1MDAsNyBAQAogCQlTRVRfVFhfREVTQ19SVFNfQlcocGRlc2MsIDApOwogCQlTRVRfVFhfREVTQ19SVFNfU0MocGRlc2MsIHRjYl9kZXNjLT5ydHNfc2MpOwogCQlTRVRfVFhfREVTQ19SVFNfU0hPUlQocGRlc2MsCi0JCQkJICAgICAgKCh0Y2JfZGVzYy0+cnRzX3JhdGUgPD0gREVTQzkyX1JBVEU1NE0pID8KKwkJCQkgICAgICAoKHRjYl9kZXNjLT5ydHNfcmF0ZSA8PSBERVNDX1JBVEU1NE0pID8KIAkJCQkgICAgICAgKHRjYl9kZXNjLT5ydHNfdXNlX3Nob3J0cHJlYW1ibGUgPyAxIDogMCkKIAkJCQkgICAgICAgOiAodGNiX2Rlc2MtPnJ0c191c2Vfc2hvcnRnaSA/IDEgOiAwKSkpOwogCkBAIC02MjQsNyArNjIzLDcgQEAKIAlpZiAoZmlyc3RzZWcpCiAJCVNFVF9UWF9ERVNDX09GRlNFVChwZGVzYywgVVNCX0hXREVTQ19IRUFERVJfTEVOKTsKIAotCVNFVF9UWF9ERVNDX1RYX1JBVEUocGRlc2MsIERFU0M5Ml9SQVRFMU0pOworCVNFVF9UWF9ERVNDX1RYX1JBVEUocGRlc2MsIERFU0NfUkFURTFNKTsKIAogCVNFVF9UWF9ERVNDX1NFUShwZGVzYywgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9ody5jCmluZGV4IDU1MTMyMTcuLmZlNGI2OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3UvaHcuYwpAQCAtMTAwMCw2ICsxMDAwLDcgQEAKIAlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKKwlydGxoYWwtPmZ3X3JlYWR5ID0gZmFsc2U7CiAJcnRsaGFsLT5od190eXBlID0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyQ1U7CiAJZXJyID0gX3J0bDkyY3VfaW5pdF9tYWMoaHcpOwogCWlmIChlcnIpIHsKQEAgLTEwMTMsNiArMTAxNCw4IEBACiAJCWVyciA9IDE7CiAJCWdvdG8gZXhpdDsKIAl9CisKKwlydGxoYWwtPmZ3X3JlYWR5ID0gdHJ1ZTsKIAlydGxoYWwtPmxhc3RfaG1lYm94bnVtID0gMDsgLyogaDJjICovCiAJX3J0bDkyY3VfcGh5X3BhcmFtX3RhYl9pbml0KGh3KTsKIAlydGw5MmN1X3BoeV9tYWNfY29uZmlnKGh3KTsKQEAgLTE1MDksNiArMTUxMiw3IEBACiAJLyogVE9ETzogTW9kaWZ5IGxhdGVyIChGaW5kIHRoZSByaWdodCBwYXJhbWV0ZXJzKQogCSAqIE5PVEU6IEZpeCB0ZXN0IGNoaXAncyBidWcgKGFib3V0IGNvbnRlbnRpb24gd2luZG93cydzIHJhbmRvbW5lc3MpICovCiAJaWYgKChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgfHwKKwkgICAgKG1hYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpIHx8CiAJICAgIChtYWMtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkpIHsKIAkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1JYVFNGX09GRlNFVF9DQ0ssIDB4NTApOwogCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlhUU0ZfT0ZGU0VUX09GRE0sIDB4NTApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3UvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9tYWMuYwppbmRleCBjMmQ4ZWM2Li4xMzNlMzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9tYWMuYwpAQCAtODgwLDggKzg4MCw4IEBACiAJCXBzdGF0cy0+cnhwb3dlciA9IHJ4X3B3cl9hbGw7CiAJCXBzdGF0cy0+cmVjdnNpZ25hbHBvd2VyID0gcnhfcHdyX2FsbDsKIAkJaWYgKEdFVF9SWF9ERVNDX1JYX01DUyhwZGVzYykgJiYKLQkJICAgIEdFVF9SWF9ERVNDX1JYX01DUyhwZGVzYykgPj0gREVTQzkyX1JBVEVNQ1M4ICYmCi0JCSAgICBHRVRfUlhfREVTQ19SWF9NQ1MocGRlc2MpIDw9IERFU0M5Ml9SQVRFTUNTMTUpCisJCSAgICBHRVRfUlhfREVTQ19SWF9NQ1MocGRlc2MpID49IERFU0NfUkFURU1DUzggJiYKKwkJICAgIEdFVF9SWF9ERVNDX1JYX01DUyhwZGVzYykgPD0gREVTQ19SQVRFTUNTMTUpCiAJCQltYXhfc3BhdGlhbF9zdHJlYW0gPSAyOwogCQllbHNlCiAJCQltYXhfc3BhdGlhbF9zdHJlYW0gPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3Uvc3cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmN1L3N3LmMKaW5kZXggZTA2YmFmZS4uOTBhNzE0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3Uvc3cuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS9zdy5jCkBAIC0yNTcsMjAgKzI1NywyMCBAQAogCS5tYXBzW1JUTF9JTVJfUk9LXSA9IElNUl9ST0ssCiAJLm1hcHNbUlRMX0lCU1NfSU5UX01BU0tTXSA9IChJTVJfQkNOSU5UIHwgSU1SX1RCRE9LIHwgSU1SX1RCREVSKSwKIAotCS5tYXBzW1JUTF9SQ19DQ0tfUkFURTFNXSA9IERFU0M5Ml9SQVRFMU0sCi0JLm1hcHNbUlRMX1JDX0NDS19SQVRFMk1dID0gREVTQzkyX1JBVEUyTSwKLQkubWFwc1tSVExfUkNfQ0NLX1JBVEU1XzVNXSA9IERFU0M5Ml9SQVRFNV81TSwKLQkubWFwc1tSVExfUkNfQ0NLX1JBVEUxMU1dID0gREVTQzkyX1JBVEUxMU0sCi0JLm1hcHNbUlRMX1JDX09GRE1fUkFURTZNXSA9IERFU0M5Ml9SQVRFNk0sCi0JLm1hcHNbUlRMX1JDX09GRE1fUkFURTlNXSA9IERFU0M5Ml9SQVRFOU0sCi0JLm1hcHNbUlRMX1JDX09GRE1fUkFURTEyTV0gPSBERVNDOTJfUkFURTEyTSwKLQkubWFwc1tSVExfUkNfT0ZETV9SQVRFMThNXSA9IERFU0M5Ml9SQVRFMThNLAotCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUyNE1dID0gREVTQzkyX1JBVEUyNE0sCi0JLm1hcHNbUlRMX1JDX09GRE1fUkFURTM2TV0gPSBERVNDOTJfUkFURTM2TSwKLQkubWFwc1tSVExfUkNfT0ZETV9SQVRFNDhNXSA9IERFU0M5Ml9SQVRFNDhNLAotCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU1NE1dID0gREVTQzkyX1JBVEU1NE0sCi0JLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1M3XSA9IERFU0M5Ml9SQVRFTUNTNywKLQkubWFwc1tSVExfUkNfSFRfUkFURU1DUzE1XSA9IERFU0M5Ml9SQVRFTUNTMTUsCisJLm1hcHNbUlRMX1JDX0NDS19SQVRFMU1dID0gREVTQ19SQVRFMU0sCisJLm1hcHNbUlRMX1JDX0NDS19SQVRFMk1dID0gREVTQ19SQVRFMk0sCisJLm1hcHNbUlRMX1JDX0NDS19SQVRFNV81TV0gPSBERVNDX1JBVEU1XzVNLAorCS5tYXBzW1JUTF9SQ19DQ0tfUkFURTExTV0gPSBERVNDX1JBVEUxMU0sCisJLm1hcHNbUlRMX1JDX09GRE1fUkFURTZNXSA9IERFU0NfUkFURTZNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU5TV0gPSBERVNDX1JBVEU5TSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFMTJNXSA9IERFU0NfUkFURTEyTSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFMThNXSA9IERFU0NfUkFURTE4TSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFMjRNXSA9IERFU0NfUkFURTI0TSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFMzZNXSA9IERFU0NfUkFURTM2TSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFNDhNXSA9IERFU0NfUkFURTQ4TSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFNTRNXSA9IERFU0NfUkFURTU0TSwKKwkubWFwc1tSVExfUkNfSFRfUkFURU1DUzddID0gREVTQ19SQVRFTUNTNywKKwkubWFwc1tSVExfUkNfSFRfUkFURU1DUzE1XSA9IERFU0NfUkFURU1DUzE1LAogfTsKIAogI2RlZmluZSBVU0JfVkVOREVSX0lEX1JFQUxURUsJCTB4MGJkYQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyY3UvdHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS90cnguYwppbmRleCBmMzgzZDVmLi5jYmVhZDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS90cnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJjdS90cnguYwpAQCAtMzI1LDYgKzMyNSw3IEBACiAJCQkJICAgJiYgKEdFVF9SWF9ERVNDX0ZBR0dSKHBkZXNjKSA9PSAxKSk7CiAJc3RhdHMtPnRpbWVzdGFtcF9sb3cgPSBHRVRfUlhfREVTQ19UU0ZMKHBkZXNjKTsKIAlzdGF0cy0+cnhfaXM0ME1oenBhY2tldCA9IChib29sKSBHRVRfUlhfREVTQ19CVyhwZGVzYyk7CisJc3RhdHMtPmlzX2h0ID0gKGJvb2wpR0VUX1JYX0RFU0NfUlhfSFQocGRlc2MpOwogCXJ4X3N0YXR1cy0+ZnJlcSA9IGh3LT5jb25mLmNoYW5kZWYuY2hhbi0+Y2VudGVyX2ZyZXE7CiAJcnhfc3RhdHVzLT5iYW5kID0gaHctPmNvbmYuY2hhbmRlZi5jaGFuLT5iYW5kOwogCWlmIChHRVRfUlhfREVTQ19DUkMzMihwZGVzYykpCkBAIC0zMzgsMTAgKzMzOSw4IEBACiAJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfTUFDVElNRV9TVEFSVDsKIAlpZiAoc3RhdHMtPmRlY3J5cHRlZCkKIAkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOwotCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSBydGx3aWZpX3JhdGVfbWFwcGluZyhodywKLQkJCQkJKGJvb2wpR0VUX1JYX0RFU0NfUlhfSFQocGRlc2MpLAotCQkJCQkodTgpR0VUX1JYX0RFU0NfUlhfTUNTKHBkZXNjKSwKLQkJCQkJKGJvb2wpR0VUX1JYX0RFU0NfUEFHR1IocGRlc2MpKTsKKwlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gcnRsd2lmaV9yYXRlX21hcHBpbmcoaHcsIHN0YXRzLT5pc19odCwKKwkJCQkJCSAgIGZhbHNlLCBzdGF0cy0+cmF0ZSk7CiAJcnhfc3RhdHVzLT5tYWN0aW1lID0gR0VUX1JYX0RFU0NfVFNGTChwZGVzYyk7CiAJaWYgKHBoeXN0YXR1cykgewogCQlwX2RydmluZm8gPSAoc3RydWN0IHJ4X2Z3aW5mb185MmMgKikoc2tiLT5kYXRhICsKQEAgLTM5Myw2ICszOTIsNyBAQAogCQkJCSAgICYmIChHRVRfUlhfREVTQ19GQUdHUihyeGRlc2MpID09IDEpKTsKIAlzdGF0cy50aW1lc3RhbXBfbG93ID0gR0VUX1JYX0RFU0NfVFNGTChyeGRlc2MpOwogCXN0YXRzLnJ4X2lzNDBNaHpwYWNrZXQgPSAoYm9vbCkgR0VUX1JYX0RFU0NfQlcocnhkZXNjKTsKKwlzdGF0cy5pc19odCA9IChib29sKUdFVF9SWF9ERVNDX1JYX0hUKHJ4ZGVzYyk7CiAJLyogVE9ETzogaXMgY2VudGVyX2ZyZXEgY2hhbmdlZCB3aGVuIGRvaW5nIHNjYW4/ICovCiAJLyogVE9ETzogU2hhbGwgd2UgYWRkIHByb3RlY3Rpb24gb3IganVzdCBza2lwIHRob3NlIHR3byBzdGVwPyAqLwogCXJ4X3N0YXR1cy0+ZnJlcSA9IGh3LT5jb25mLmNoYW5kZWYuY2hhbi0+Y2VudGVyX2ZyZXE7CkBAIC00MDYsMTAgKzQwNiw4IEBACiAJaWYgKEdFVF9SWF9ERVNDX1JYX0hUKHJ4ZGVzYykpCiAJCXJ4X3N0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0hUOwogCS8qIERhdGEgcmF0ZSAqLwotCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSBydGx3aWZpX3JhdGVfbWFwcGluZyhodywKLQkJCQkJKGJvb2wpR0VUX1JYX0RFU0NfUlhfSFQocnhkZXNjKSwKLQkJCQkJKHU4KUdFVF9SWF9ERVNDX1JYX01DUyhyeGRlc2MpLAotCQkJCQkoYm9vbClHRVRfUlhfREVTQ19QQUdHUihyeGRlc2MpKTsKKwlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gcnRsd2lmaV9yYXRlX21hcHBpbmcoaHcsIHN0YXRzLmlzX2h0LAorCQkJCQkJICAgZmFsc2UsIHN0YXRzLnJhdGUpOwogCS8qICBUaGVyZSBpcyBhIHBoeSBzdGF0dXMgYWZ0ZXIgdGhpcyByeCBkZXNjcmlwdG9yLiAqLwogCWlmIChHRVRfUlhfREVTQ19QSFlfU1RBVFVTKHJ4ZGVzYykpIHsKIAkJcF9kcnZpbmZvID0gKHN0cnVjdCByeF9md2luZm9fOTJjICopKHJ4ZGVzYyArIFJUTF9SWF9ERVNDX1NJWkUpOwpAQCAtNTQ1LDcgKzU0Myw3IEBACiAJU0VUX1RYX0RFU0NfUlRTX0JXKHR4ZGVzYywgMCk7CiAJU0VUX1RYX0RFU0NfUlRTX1NDKHR4ZGVzYywgdGNiX2Rlc2MtPnJ0c19zYyk7CiAJU0VUX1RYX0RFU0NfUlRTX1NIT1JUKHR4ZGVzYywKLQkJCSAgICAgICgodGNiX2Rlc2MtPnJ0c19yYXRlIDw9IERFU0M5Ml9SQVRFNTRNKSA/CisJCQkgICAgICAoKHRjYl9kZXNjLT5ydHNfcmF0ZSA8PSBERVNDX1JBVEU1NE0pID8KIAkJCSAgICAgICAodGNiX2Rlc2MtPnJ0c191c2Vfc2hvcnRwcmVhbWJsZSA/IDEgOiAwKQogCQkJICAgICAgIDogKHRjYl9kZXNjLT5ydHNfdXNlX3Nob3J0Z2kgPyAxIDogMCkpKTsKIAlpZiAobWFjLT5id180MCkgewpAQCAtNjQ0LDcgKzY0Miw3IEBACiAJfQogCVNFVF9UWF9ERVNDX1VTRV9SQVRFKHBEZXNjLCAxKTsgLyogdXNlIGRhdGEgcmF0ZSB3aGljaCBpcyBzZXQgYnkgU3cgKi8KIAlTRVRfVFhfREVTQ19PV04ocERlc2MsIDEpOwotCVNFVF9UWF9ERVNDX1RYX1JBVEUocERlc2MsIERFU0M5Ml9SQVRFMU0pOworCVNFVF9UWF9ERVNDX1RYX1JBVEUocERlc2MsIERFU0NfUkFURTFNKTsKIAlfcnRsX3R4X2Rlc2NfY2hlY2tzdW0ocERlc2MpOwogfQogCkBAIC02NjAsNyArNjU4LDcgQEAKIAltZW1zZXQoKHZvaWQgKilwZGVzYywgMCwgUlRMX1RYX0hFQURFUl9TSVpFKTsKIAlpZiAoZmlyc3RzZWcpCiAJCVNFVF9UWF9ERVNDX09GRlNFVChwZGVzYywgUlRMX1RYX0hFQURFUl9TSVpFKTsKLQlTRVRfVFhfREVTQ19UWF9SQVRFKHBkZXNjLCBERVNDOTJfUkFURTFNKTsKKwlTRVRfVFhfREVTQ19UWF9SQVRFKHBkZXNjLCBERVNDX1JBVEUxTSk7CiAJU0VUX1RYX0RFU0NfU0VRKHBkZXNjLCAwKTsKIAlTRVRfVFhfREVTQ19MSU5JUChwZGVzYywgMCk7CiAJU0VUX1RYX0RFU0NfUVVFVUVfU0VMKHBkZXNjLCBmd19xdWV1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJkZS9kbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZGUvZG0uYwppbmRleCAzMDRjNDQzLi5hMWJlNWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJkZS9kbS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmRlL2RtLmMKQEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIi4uL3dpZmkuaCIKICNpbmNsdWRlICIuLi9iYXNlLmgiCisjaW5jbHVkZSAiLi4vY29yZS5oIgogI2luY2x1ZGUgInJlZy5oIgogI2luY2x1ZGUgImRlZi5oIgogI2luY2x1ZGUgInBoeS5oIgpAQCAtMTU1LDM0ICsxNTYsNiBAQAogCXsweDA5LCAweDA4LCAweDA3LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSAgICAgLyogMzIsIC0xNi4wZEIgKi8KIH07CiAKLXN0YXRpYyB2b2lkIHJ0bDkyZF9kbV9kaWdpbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKLQlzdHJ1Y3QgZGlnX3QgKmRlX2RpZ3RhYmxlID0gJnJ0bHByaXYtPmRtX2RpZ3RhYmxlOwotCi0JZGVfZGlndGFibGUtPmRpZ19lbmFibGVfZmxhZyA9IHRydWU7Ci0JZGVfZGlndGFibGUtPmRpZ19leHRfcG9ydF9zdGFnZSA9IERJR19FWFRfUE9SVF9TVEFHRV9NQVg7Ci0JZGVfZGlndGFibGUtPmN1cl9pZ3ZhbHVlID0gMHgyMDsKLQlkZV9kaWd0YWJsZS0+cHJlX2lndmFsdWUgPSAweDA7Ci0JZGVfZGlndGFibGUtPmN1cnN0YV9jc3RhdGUgPSBESUdfU1RBX0RJU0NPTk5FQ1Q7Ci0JZGVfZGlndGFibGUtPnByZXN0YV9jc3RhdGUgPSBESUdfU1RBX0RJU0NPTk5FQ1Q7Ci0JZGVfZGlndGFibGUtPmN1cm11bHRpc3RhX2NzdGF0ZSA9IERJR19NVUxUSVNUQV9ESVNDT05ORUNUOwotCWRlX2RpZ3RhYmxlLT5yc3NpX2xvd3RocmVzaCA9IERNX0RJR19USFJFU0hfTE9XOwotCWRlX2RpZ3RhYmxlLT5yc3NpX2hpZ2h0aHJlc2ggPSBETV9ESUdfVEhSRVNIX0hJR0g7Ci0JZGVfZGlndGFibGUtPmZhX2xvd3RocmVzaCA9IERNX0ZBTFNFQUxBUk1fVEhSRVNIX0xPVzsKLQlkZV9kaWd0YWJsZS0+ZmFfaGlnaHRocmVzaCA9IERNX0ZBTFNFQUxBUk1fVEhSRVNIX0hJR0g7Ci0JZGVfZGlndGFibGUtPnJ4X2dhaW5fbWF4ID0gRE1fRElHX0ZBX1VQUEVSOwotCWRlX2RpZ3RhYmxlLT5yeF9nYWluX21pbiA9IERNX0RJR19GQV9MT1dFUjsKLQlkZV9kaWd0YWJsZS0+YmFja192YWwgPSBETV9ESUdfQkFDS09GRl9ERUZBVUxUOwotCWRlX2RpZ3RhYmxlLT5iYWNrX3JhbmdlX21heCA9IERNX0RJR19CQUNLT0ZGX01BWDsKLQlkZV9kaWd0YWJsZS0+YmFja19yYW5nZV9taW4gPSBETV9ESUdfQkFDS09GRl9NSU47Ci0JZGVfZGlndGFibGUtPnByZV9jY2tfcGRfc3RhdGUgPSBDQ0tfUERfU1RBR0VfTE9XUlNTSTsKLQlkZV9kaWd0YWJsZS0+Y3VyX2Nja19wZF9zdGF0ZSA9IENDS19QRF9TVEFHRV9NQVg7Ci0JZGVfZGlndGFibGUtPmxhcmdlX2ZhX2hpdCA9IDA7Ci0JZGVfZGlndGFibGUtPnJlY292ZXJfY250ID0gMDsKLQlkZV9kaWd0YWJsZS0+Zm9yYmlkZGVuX2lnaSA9IERNX0RJR19GQV9MT1dFUjsKLX0KLQogc3RhdGljIHZvaWQgcnRsOTJkX2RtX2ZhbHNlX2FsYXJtX2NvdW50ZXJfc3RhdGlzdGljcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAl1MzIgcmV0X3ZhbHVlOwpAQCAtMTMwNSw3ICsxMjc4LDkgQEAKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CiAKIAlydGxwcml2LT5kbS5kbV90eXBlID0gRE1fVFlQRV9CWURSSVZFUjsKLQlydGw5MmRfZG1fZGlnaW5pdChodyk7CisJcnRsX2RtX2RpZ2luaXQoaHcsIDB4MjApOworCXJ0bHByaXYtPmRtX2RpZ3RhYmxlLnJ4X2dhaW5fbWF4ID0gRE1fRElHX0ZBX1VQUEVSOworCXJ0bHByaXYtPmRtX2RpZ3RhYmxlLnJ4X2dhaW5fbWluID0gRE1fRElHX0ZBX0xPV0VSOwogCXJ0bDkyZF9kbV9pbml0X2R5bmFtaWNfdHhwb3dlcihodyk7CiAJcnRsOTJkX2RtX2luaXRfZWRjYV90dXJibyhodyk7CiAJcnRsOTJkX2RtX2luaXRfcmF0ZV9hZGFwdGl2ZV9tYXNrKGh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmRlL2RtLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJkZS9kbS5oCmluZGV4IDNmZWEwYzEuLmYyZDMxOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmRlL2RtLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZGUvZG0uaApAQCAtNDIsMjUgKzQyLDEyIEBACiAjZGVmaW5lIEJXX0FVVE9fU1dJVENIX0hJR0hfTE9XCQkJMjUKICNkZWZpbmUgQldfQVVUT19TV0lUQ0hfTE9XX0hJR0gJCQkzMAogCi0jZGVmaW5lIERNX0RJR19USFJFU0hfSElHSAkJCTQwCi0jZGVmaW5lIERNX0RJR19USFJFU0hfTE9XCQkJMzUKLQotI2RlZmluZSBETV9GQUxTRUFMQVJNX1RIUkVTSF9MT1cJCTQwMAotI2RlZmluZSBETV9GQUxTRUFMQVJNX1RIUkVTSF9ISUdICQkxMDAwCi0KLSNkZWZpbmUgRE1fRElHX01BWAkJCQkweDNlCi0jZGVmaW5lIERNX0RJR19NSU4JCQkJMHgxYwotCiAjZGVmaW5lIERNX0RJR19GQV9VUFBFUgkJCQkweDMyCiAjZGVmaW5lIERNX0RJR19GQV9MT1dFUgkJCQkweDIwCiAjZGVmaW5lIERNX0RJR19GQV9USDAJCQkJMHgxMDAKICNkZWZpbmUgRE1fRElHX0ZBX1RIMQkJCQkweDQwMAogI2RlZmluZSBETV9ESUdfRkFfVEgyCQkJCTB4NjAwCiAKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfTUFYCQkJMTIKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfTUlOCQkJLTQKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfREVGQVVMVAkJCTEwCi0KICNkZWZpbmUgUlhQQVRIU0VMRUNUSU9OX1NTX1RIX2xPVwkJMzAKICNkZWZpbmUgUlhQQVRIU0VMRUNUSU9OX0RJRkZfVEgJCQkxOAogCkBAIC0xMDgsMTQgKzk1LDYgQEAKIAlESUdfT1BfVFlQRV9NQVgKIH07CiAKLWVudW0gdGFnX2Nja19wYWNrZXRfZGV0ZWN0aW9uX3RocmVzaG9sZF90eXBlX2RlZmluaXRpb24gewotCUNDS19QRF9TVEFHRV9MT1dSU1NJID0gMCwKLQlDQ0tfUERfU1RBR0VfSElHSFJTU0kgPSAxLAotCUNDS19GQV9TVEFHRV9MT1cgPSAyLAotCUNDS19GQV9TVEFHRV9ISUdIID0gMywKLQlDQ0tfUERfU1RBR0VfTUFYID0gNCwKLX07Ci0KIGVudW0gZG1fMXJfY2NhIHsKIAlDQ0FfMVIgPSAwLAogCUNDQV8yUiA9IDEsCkBAIC0xMzQsMjMgKzExMyw2IEBACiAJQU5TX0FOVEVOTkFfTUFYID0gMywKIH07CiAKLWVudW0gZG1fZGlnX2V4dF9wb3J0X2FsZyB7Ci0JRElHX0VYVF9QT1JUX1NUQUdFXzAgPSAwLAotCURJR19FWFRfUE9SVF9TVEFHRV8xID0gMSwKLQlESUdfRVhUX1BPUlRfU1RBR0VfMiA9IDIsCi0JRElHX0VYVF9QT1JUX1NUQUdFXzMgPSAzLAotCURJR19FWFRfUE9SVF9TVEFHRV9NQVggPSA0LAotfTsKLQotZW51bSBkbV9kaWdfY29ubmVjdCB7Ci0JRElHX1NUQV9ESVNDT05ORUNUID0gMCwKLQlESUdfU1RBX0NPTk5FQ1QgPSAxLAotCURJR19TVEFfQkVGT1JFX0NPTk5FQ1QgPSAyLAotCURJR19NVUxUSVNUQV9ESVNDT05ORUNUID0gMywKLQlESUdfTVVMVElTVEFfQ09OTkVDVCA9IDQsCi0JRElHX0NPTk5FQ1RfTUFYCi19OwotCiB2b2lkIHJ0bDkyZF9kbV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsOTJkX2RtX3dhdGNoZG9nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsOTJkX2RtX2luaXRfZWRjYV90dXJibyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJkZS9mdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZGUvZncuYwppbmRleCAyMzE3NzA3Li42MmVmODIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJkZS9mdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmRlL2Z3LmMKQEAgLTU0MCwyMyArNTQwLDYgQEAKIAlyZXR1cm47CiB9CiAKLXZvaWQgcnRsOTJkX3NldF9md19wd3Jtb2RlX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggbW9kZSkKLXsKLQlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7Ci0JdTggdTFfaDJjX3NldF9wd3Jtb2RlWzNdID0geyAwIH07Ci0Jc3RydWN0IHJ0bF9wc19jdGwgKnBwc2MgPSBydGxfcHNjKHJ0bF9wcml2KGh3KSk7Ci0KLQlSVF9UUkFDRShydGxwcml2LCBDT01QX1BPV0VSLCBEQkdfTE9VRCwgIkZXIExQUyBtb2RlID0gJWRcbiIsIG1vZGUpOwotCVNFVF9IMkNDTURfUFdSTU9ERV9QQVJNX01PREUodTFfaDJjX3NldF9wd3Jtb2RlLCBtb2RlKTsKLQlTRVRfSDJDQ01EX1BXUk1PREVfUEFSTV9TTUFSVF9QUyh1MV9oMmNfc2V0X3B3cm1vZGUsIDEpOwotCVNFVF9IMkNDTURfUFdSTU9ERV9QQVJNX0JDTl9QQVNTX1RJTUUodTFfaDJjX3NldF9wd3Jtb2RlLAotCQkJCQkgICAgICBwcHNjLT5yZWdfbWF4X2xwc19hd2FrZWludHZsKTsKLQlSVF9QUklOVF9EQVRBKHJ0bHByaXYsIENPTVBfQ01ELCBEQkdfRE1FU0csCi0JCSAgICAgICJydGw5MmRfc2V0X2Z3X3JzdmRwYWdlcGt0KCk6IHUxX2gyY19zZXRfcHdybW9kZSIsCi0JCSAgICAgIHUxX2gyY19zZXRfcHdybW9kZSwgMyk7Ci0JcnRsOTJkX2ZpbGxfaDJjX2NtZChodywgSDJDX1NFVFBXUk1PREUsIDMsIHUxX2gyY19zZXRfcHdybW9kZSk7Ci19Ci0KIHN0YXRpYyBib29sIF9ydGw5MmRfY21kX3NlbmRfcGFja2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZGUvZncuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmRlL2Z3LmgKaW5kZXggYTU1YTgwMy4uMTY0NmU3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZGUvZncuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJkZS9mdy5oCkBAIC0xMzYsNyArMTM2LDYgQEAKIHZvaWQgcnRsOTJkX2ZpbGxfaDJjX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggZWxlbWVudF9pZCwKIAkJCSB1MzIgY21kX2xlbiwgdTggKnBfY21kYnVmZmVyKTsKIHZvaWQgcnRsOTJkX2Zpcm13YXJlX3NlbGZyZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci12b2lkIHJ0bDkyZF9zZXRfZndfcHdybW9kZV9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IG1vZGUpOwogdm9pZCBydGw5MmRfc2V0X2Z3X3JzdmRwYWdlcGt0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGJfZGxfZmluaXNoZWQpOwogdm9pZCBydGw5MmRfc2V0X2Z3X2pvaW5ic3NfcmVwb3J0X2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggbXN0YXR1cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmRlL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJkZS9ody5jCmluZGV4IDI4MGMzZGEuLjAxYmNjMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmRlL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZGUvaHcuYwpAQCAtNTQ2LDcgKzU0Niw3IEBACiAJCXR4cGt0YnVmX2JuZHkgPSAyNDY7CiAJCXZhbHVlOCA9IDA7CiAJCXZhbHVlMzIgPSAweDgwYmYwZDI5OwotCX0gZWxzZSBpZiAocnRscHJpdi0+cnRsaGFsLm1hY3BoeW1vZGUgIT0gU0lOR0xFTUFDX1NJTkdMRVBIWSkgeworCX0gZWxzZSB7CiAJCW1heFBhZ2UgPSAxMjc7CiAJCXR4cGt0YnVmX2JuZHkgPSAxMjM7CiAJCXZhbHVlOCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJkZS9zdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZGUvc3cuYwppbmRleCBhMGFiYTA4Li5iMTlkMDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJkZS9zdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmRlL3N3LmMKQEAgLTMzNywyMSArMzM3LDIxIEBACiAJLm1hcHNbUlRMX0lNUl9ST0tdID0gSU1SX1JPSywKIAkubWFwc1tSVExfSUJTU19JTlRfTUFTS1NdID0gKElNUl9CQ05JTlQgfCBJTVJfVEJET0sgfCBJTVJfVEJERVIpLAogCi0JLm1hcHNbUlRMX1JDX0NDS19SQVRFMU1dID0gREVTQzkyX1JBVEUxTSwKLQkubWFwc1tSVExfUkNfQ0NLX1JBVEUyTV0gPSBERVNDOTJfUkFURTJNLAotCS5tYXBzW1JUTF9SQ19DQ0tfUkFURTVfNU1dID0gREVTQzkyX1JBVEU1XzVNLAotCS5tYXBzW1JUTF9SQ19DQ0tfUkFURTExTV0gPSBERVNDOTJfUkFURTExTSwKLQkubWFwc1tSVExfUkNfT0ZETV9SQVRFNk1dID0gREVTQzkyX1JBVEU2TSwKLQkubWFwc1tSVExfUkNfT0ZETV9SQVRFOU1dID0gREVTQzkyX1JBVEU5TSwKLQkubWFwc1tSVExfUkNfT0ZETV9SQVRFMTJNXSA9IERFU0M5Ml9SQVRFMTJNLAotCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUxOE1dID0gREVTQzkyX1JBVEUxOE0sCi0JLm1hcHNbUlRMX1JDX09GRE1fUkFURTI0TV0gPSBERVNDOTJfUkFURTI0TSwKLQkubWFwc1tSVExfUkNfT0ZETV9SQVRFMzZNXSA9IERFU0M5Ml9SQVRFMzZNLAotCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU0OE1dID0gREVTQzkyX1JBVEU0OE0sCi0JLm1hcHNbUlRMX1JDX09GRE1fUkFURTU0TV0gPSBERVNDOTJfUkFURTU0TSwKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEUxTV0gPSBERVNDX1JBVEUxTSwKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEUyTV0gPSBERVNDX1JBVEUyTSwKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEU1XzVNXSA9IERFU0NfUkFURTVfNU0sCisJLm1hcHNbUlRMX1JDX0NDS19SQVRFMTFNXSA9IERFU0NfUkFURTExTSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFNk1dID0gREVTQ19SQVRFNk0sCisJLm1hcHNbUlRMX1JDX09GRE1fUkFURTlNXSA9IERFU0NfUkFURTlNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUxMk1dID0gREVTQ19SQVRFMTJNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUxOE1dID0gREVTQ19SQVRFMThNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUyNE1dID0gREVTQ19SQVRFMjRNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUzNk1dID0gREVTQ19SQVRFMzZNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU0OE1dID0gREVTQ19SQVRFNDhNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU1NE1dID0gREVTQ19SQVRFNTRNLAogCi0JLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1M3XSA9IERFU0M5Ml9SQVRFTUNTNywKLQkubWFwc1tSVExfUkNfSFRfUkFURU1DUzE1XSA9IERFU0M5Ml9SQVRFTUNTMTUsCisJLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1M3XSA9IERFU0NfUkFURU1DUzcsCisJLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1MxNV0gPSBERVNDX1JBVEVNQ1MxNSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydGw5MmRlX3BjaV9pZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmRlL3RyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZGUvdHJ4LmMKaW5kZXggOGVmYmNjNy4uMWZlYWE2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZGUvdHJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZGUvdHJ4LmMKQEAgLTIzNSw4ICsyMzUsOCBAQAogCQlwc3RhdHMtPnJ4X3B3ZGJfYWxsID0gcHdkYl9hbGw7CiAJCXBzdGF0cy0+cnhwb3dlciA9IHJ4X3B3cl9hbGw7CiAJCXBzdGF0cy0+cmVjdnNpZ25hbHBvd2VyID0gcnhfcHdyX2FsbDsKLQkJaWYgKHBkZXNjLT5yeGh0ICYmIHBkZXNjLT5yeG1jcyA+PSBERVNDOTJfUkFURU1DUzggJiYKLQkJICAgIHBkZXNjLT5yeG1jcyA8PSBERVNDOTJfUkFURU1DUzE1KQorCQlpZiAocGRlc2MtPnJ4aHQgJiYgcGRlc2MtPnJ4bWNzID49IERFU0NfUkFURU1DUzggJiYKKwkJICAgIHBkZXNjLT5yeG1jcyA8PSBERVNDX1JBVEVNQ1MxNSkKIAkJCW1heF9zcGF0aWFsX3N0cmVhbSA9IDI7CiAJCWVsc2UKIAkJCW1heF9zcGF0aWFsX3N0cmVhbSA9IDE7CkBAIC00OTksNiArNDk5LDcgQEAKIAkJCQkJICYmIChHRVRfUlhfREVTQ19GQUdHUihwZGVzYykgPT0gMSkpOwogCXN0YXRzLT50aW1lc3RhbXBfbG93ID0gR0VUX1JYX0RFU0NfVFNGTChwZGVzYyk7CiAJc3RhdHMtPnJ4X2lzNDBNaHpwYWNrZXQgPSAoYm9vbCkgR0VUX1JYX0RFU0NfQlcocGRlc2MpOworCXN0YXRzLT5pc19odCA9IChib29sKUdFVF9SWF9ERVNDX1JYSFQocGRlc2MpOwogCXJ4X3N0YXR1cy0+ZnJlcSA9IGh3LT5jb25mLmNoYW5kZWYuY2hhbi0+Y2VudGVyX2ZyZXE7CiAJcnhfc3RhdHVzLT5iYW5kID0gaHctPmNvbmYuY2hhbmRlZi5jaGFuLT5iYW5kOwogCWlmIChHRVRfUlhfREVTQ19DUkMzMihwZGVzYykpCkBAIC01MTIsMTAgKzUxMyw4IEBACiAJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfTUFDVElNRV9TVEFSVDsKIAlpZiAoc3RhdHMtPmRlY3J5cHRlZCkKIAkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOwotCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSBydGx3aWZpX3JhdGVfbWFwcGluZyhodywKLQkJCQkJKGJvb2wpR0VUX1JYX0RFU0NfUlhIVChwZGVzYyksCi0JCQkJCSh1OClHRVRfUlhfREVTQ19SWE1DUyhwZGVzYyksCi0JCQkJCShib29sKUdFVF9SWF9ERVNDX1BBR0dSKHBkZXNjKSk7CisJcnhfc3RhdHVzLT5yYXRlX2lkeCA9IHJ0bHdpZmlfcmF0ZV9tYXBwaW5nKGh3LCBzdGF0cy0+aXNfaHQsCisJCQkJCQkgICBmYWxzZSwgc3RhdHMtPnJhdGUpOwogCXJ4X3N0YXR1cy0+bWFjdGltZSA9IEdFVF9SWF9ERVNDX1RTRkwocGRlc2MpOwogCWlmIChwaHlzdGF0dXMpIHsKIAkJcF9kcnZpbmZvID0gKHN0cnVjdCByeF9md2luZm9fOTJkICopKHNrYi0+ZGF0YSArCkBAIC02MTIsMTQgKzYxMSwxNCBAQAogCQl9CiAJCS8qIDVHIGhhdmUgbm8gQ0NLIHJhdGUgKi8KIAkJaWYgKHJ0bGhhbC0+Y3VycmVudF9iYW5kdHlwZSA9PSBCQU5EX09OXzVHKQotCQkJaWYgKHB0Y2JfZGVzYy0+aHdfcmF0ZSA8IERFU0M5Ml9SQVRFNk0pCi0JCQkJcHRjYl9kZXNjLT5od19yYXRlID0gREVTQzkyX1JBVEU2TTsKKwkJCWlmIChwdGNiX2Rlc2MtPmh3X3JhdGUgPCBERVNDX1JBVEU2TSkKKwkJCQlwdGNiX2Rlc2MtPmh3X3JhdGUgPSBERVNDX1JBVEU2TTsKIAkJU0VUX1RYX0RFU0NfVFhfUkFURShwZGVzYywgcHRjYl9kZXNjLT5od19yYXRlKTsKIAkJaWYgKHB0Y2JfZGVzYy0+dXNlX3Nob3J0Z2kgfHwgcHRjYl9kZXNjLT51c2Vfc2hvcnRwcmVhbWJsZSkKIAkJCVNFVF9UWF9ERVNDX0RBVEFfU0hPUlRHSShwZGVzYywgMSk7CiAKIAkJaWYgKHJ0bGhhbC0+bWFjcGh5bW9kZSA9PSBEVUFMTUFDX0RVQUxQSFkgJiYKLQkJCXB0Y2JfZGVzYy0+aHdfcmF0ZSA9PSBERVNDOTJfUkFURU1DUzcpCisJCQlwdGNiX2Rlc2MtPmh3X3JhdGUgPT0gREVTQ19SQVRFTUNTNykKIAkJCVNFVF9UWF9ERVNDX0RBVEFfU0hPUlRHSShwZGVzYywgMSk7CiAKIAkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkgewpAQCAtNjM1LDEzICs2MzQsMTMgQEAKIAkJU0VUX1RYX0RFU0NfUlRTX1NUQkMocGRlc2MsICgocHRjYl9kZXNjLT5ydHNfc3RiYykgPyAxIDogMCkpOwogCQkvKiA1RyBoYXZlIG5vIENDSyByYXRlICovCiAJCWlmIChydGxoYWwtPmN1cnJlbnRfYmFuZHR5cGUgPT0gQkFORF9PTl81RykKLQkJCWlmIChwdGNiX2Rlc2MtPnJ0c19yYXRlIDwgREVTQzkyX1JBVEU2TSkKLQkJCQlwdGNiX2Rlc2MtPnJ0c19yYXRlID0gREVTQzkyX1JBVEU2TTsKKwkJCWlmIChwdGNiX2Rlc2MtPnJ0c19yYXRlIDwgREVTQ19SQVRFNk0pCisJCQkJcHRjYl9kZXNjLT5ydHNfcmF0ZSA9IERFU0NfUkFURTZNOwogCQlTRVRfVFhfREVTQ19SVFNfUkFURShwZGVzYywgcHRjYl9kZXNjLT5ydHNfcmF0ZSk7CiAJCVNFVF9UWF9ERVNDX1JUU19CVyhwZGVzYywgMCk7CiAJCVNFVF9UWF9ERVNDX1JUU19TQyhwZGVzYywgcHRjYl9kZXNjLT5ydHNfc2MpOwogCQlTRVRfVFhfREVTQ19SVFNfU0hPUlQocGRlc2MsICgocHRjYl9kZXNjLT5ydHNfcmF0ZSA8PQotCQkJREVTQzkyX1JBVEU1NE0pID8KKwkJCURFU0NfUkFURTU0TSkgPwogCQkJKHB0Y2JfZGVzYy0+cnRzX3VzZV9zaG9ydHByZWFtYmxlID8gMSA6IDApIDoKIAkJCShwdGNiX2Rlc2MtPnJ0c191c2Vfc2hvcnRnaSA/IDEgOiAwKSkpOwogCQlpZiAoYndfNDApIHsKQEAgLTc1Niw5ICs3NTUsOSBAQAogCSAqIFRoZSBicmFjZXMgYXJlIG5lZWRlZCBubyBtYXR0ZXIgd2hhdCBjaGVja3BhdGNoIHNheXMKIAkgKi8KIAlpZiAocnRsaGFsLT5jdXJyZW50X2JhbmR0eXBlID09IEJBTkRfT05fNUcpIHsKLQkJU0VUX1RYX0RFU0NfVFhfUkFURShwZGVzYywgREVTQzkyX1JBVEU2TSk7CisJCVNFVF9UWF9ERVNDX1RYX1JBVEUocGRlc2MsIERFU0NfUkFURTZNKTsKIAl9IGVsc2UgewotCQlTRVRfVFhfREVTQ19UWF9SQVRFKHBkZXNjLCBERVNDOTJfUkFURTFNKTsKKwkJU0VUX1RYX0RFU0NfVFhfUkFURShwZGVzYywgREVTQ19SQVRFMU0pOwogCX0KIAlTRVRfVFhfREVTQ19TRVEocGRlc2MsIDApOwogCVNFVF9UWF9ERVNDX0xJTklQKHBkZXNjLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL2RtLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJlZS9kbS5jCmluZGV4IDc3ZGVlZGYuLjQ1OWYzZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL2RtLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZWUvZG0uYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIi4uL3dpZmkuaCIKICNpbmNsdWRlICIuLi9iYXNlLmgiCiAjaW5jbHVkZSAiLi4vcGNpLmgiCisjaW5jbHVkZSAiLi4vY29yZS5oIgogI2luY2x1ZGUgInJlZy5oIgogI2luY2x1ZGUgImRlZi5oIgogI2luY2x1ZGUgInBoeS5oIgpAQCAtMTUxLDM1ICsxNTIsNiBAQAogCXsweDA5LCAweDA4LCAweDA3LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwfSAgLyogMzIsIC0xNi4wZEIgKi8KIH07CiAKLXN0YXRpYyB2b2lkIHJ0bDkyZWVfZG1fZGlnaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7Ci0Jc3RydWN0IGRpZ190ICpkbV9kaWcgPSAmcnRscHJpdi0+ZG1fZGlndGFibGU7Ci0KLQlkbV9kaWctPmN1cl9pZ3ZhbHVlID0gcnRsX2dldF9iYnJlZyhodywgRE1fUkVHX0lHSV9BXzExTiwKLQkJCQkJICAgIERNX0JJVF9JR0lfMTFOKTsKLQlkbV9kaWctPnJzc2lfbG93dGhyZXNoID0gRE1fRElHX1RIUkVTSF9MT1c7Ci0JZG1fZGlnLT5yc3NpX2hpZ2h0aHJlc2ggPSBETV9ESUdfVEhSRVNIX0hJR0g7Ci0JZG1fZGlnLT5mYV9sb3d0aHJlc2ggPSBETV9GQUxTRUFMQVJNX1RIUkVTSF9MT1c7Ci0JZG1fZGlnLT5mYV9oaWdodGhyZXNoID0gRE1fRkFMU0VBTEFSTV9USFJFU0hfSElHSDsKLQlkbV9kaWctPnJ4X2dhaW5fbWF4ID0gRE1fRElHX01BWDsKLQlkbV9kaWctPnJ4X2dhaW5fbWluID0gRE1fRElHX01JTjsKLQlkbV9kaWctPmJhY2tfdmFsID0gRE1fRElHX0JBQ0tPRkZfREVGQVVMVDsKLQlkbV9kaWctPmJhY2tfcmFuZ2VfbWF4ID0gRE1fRElHX0JBQ0tPRkZfTUFYOwotCWRtX2RpZy0+YmFja19yYW5nZV9taW4gPSBETV9ESUdfQkFDS09GRl9NSU47Ci0JZG1fZGlnLT5wcmVfY2NrX2NjYV90aHJlcyA9IDB4ZmY7Ci0JZG1fZGlnLT5jdXJfY2NrX2NjYV90aHJlcyA9IDB4ODM7Ci0JZG1fZGlnLT5mb3JiaWRkZW5faWdpID0gRE1fRElHX01JTjsKLQlkbV9kaWctPmxhcmdlX2ZhX2hpdCA9IDA7Ci0JZG1fZGlnLT5yZWNvdmVyX2NudCA9IDA7Ci0JZG1fZGlnLT5kaWdfZHluYW1pY19taW4gPSBETV9ESUdfTUlOOwotCWRtX2RpZy0+ZGlnX2R5bmFtaWNfbWluXzEgPSBETV9ESUdfTUlOOwotCWRtX2RpZy0+bWVkaWFfY29ubmVjdF8wID0gZmFsc2U7Ci0JZG1fZGlnLT5tZWRpYV9jb25uZWN0XzEgPSBmYWxzZTsKLQlydGxwcml2LT5kbS5kbV9pbml0aWFsZ2Fpbl9lbmFibGUgPSB0cnVlOwotCWRtX2RpZy0+YnQzMF9jdXJfaWdpID0gMHgzMjsKLX0KLQogc3RhdGljIHZvaWQgcnRsOTJlZV9kbV9mYWxzZV9hbGFybV9jb3VudGVyX3N0YXRpc3RpY3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJdTMyIHJldF92YWx1ZTsKQEAgLTI5OCw3ICsyNzAsNyBAQAogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwogCXN0cnVjdCBkaWdfdCAqZG1fZGlnID0gJnJ0bHByaXYtPmRtX2RpZ3RhYmxlOwotCXU4IGRpZ19keW5hbWljX21pbiAsIGRpZ19tYXhvZm1pbjsKKwl1OCBkaWdfbWluXzAsIGRpZ19tYXhvZm1pbjsKIAlib29sIGJmaXJzdGNvbm5lY3QgLCBiZmlyc3RkaXNjb25uZWN0OwogCXU4IGRtX2RpZ19tYXgsIGRtX2RpZ19taW47CiAJdTggY3VycmVudF9pZ2kgPSBkbV9kaWctPmN1cl9pZ3ZhbHVlOwpAQCAtMzA4LDcgKzI4MCw3IEBACiAJaWYgKG1hYy0+YWN0X3NjYW5uaW5nKQogCQlyZXR1cm47CiAKLQlkaWdfZHluYW1pY19taW4gPSBkbV9kaWctPmRpZ19keW5hbWljX21pbjsKKwlkaWdfbWluXzAgPSBkbV9kaWctPmRpZ19taW5fMDsKIAliZmlyc3Rjb25uZWN0ID0gKG1hYy0+bGlua19zdGF0ZSA+PSBNQUM4MDIxMV9MSU5LRUQpICYmCiAJCQkhZG1fZGlnLT5tZWRpYV9jb25uZWN0XzA7CiAJYmZpcnN0ZGlzY29ubmVjdCA9IChtYWMtPmxpbmtfc3RhdGUgPCBNQUM4MDIxMV9MSU5LRUQpICYmCkBAIC0zMjksMTkgKzMwMSwxOSBAQAogCQlpZiAocnRscHJpdi0+ZG0ub25lX2VudHJ5X29ubHkpIHsKIAkJCW9mZnNldCA9IDA7CiAJCQlpZiAoZG1fZGlnLT5yc3NpX3ZhbF9taW4gLSBvZmZzZXQgPCBkbV9kaWdfbWluKQotCQkJCWRpZ19keW5hbWljX21pbiA9IGRtX2RpZ19taW47CisJCQkJZGlnX21pbl8wID0gZG1fZGlnX21pbjsKIAkJCWVsc2UgaWYgKGRtX2RpZy0+cnNzaV92YWxfbWluIC0gb2Zmc2V0ID4KIAkJCQkgZGlnX21heG9mbWluKQotCQkJCWRpZ19keW5hbWljX21pbiA9IGRpZ19tYXhvZm1pbjsKKwkJCQlkaWdfbWluXzAgPSBkaWdfbWF4b2ZtaW47CiAJCQllbHNlCi0JCQkJZGlnX2R5bmFtaWNfbWluID0gZG1fZGlnLT5yc3NpX3ZhbF9taW4gLSBvZmZzZXQ7CisJCQkJZGlnX21pbl8wID0gZG1fZGlnLT5yc3NpX3ZhbF9taW4gLSBvZmZzZXQ7CiAJCX0gZWxzZSB7Ci0JCQlkaWdfZHluYW1pY19taW4gPSBkbV9kaWdfbWluOworCQkJZGlnX21pbl8wID0gZG1fZGlnX21pbjsKIAkJfQogCiAJfSBlbHNlIHsKIAkJZG1fZGlnLT5yeF9nYWluX21heCA9IGRtX2RpZ19tYXg7Ci0JCWRpZ19keW5hbWljX21pbiA9IGRtX2RpZ19taW47CisJCWRpZ19taW5fMCA9IGRtX2RpZ19taW47CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRElHLCBEQkdfTE9VRCwgIm5vIGxpbmtcbiIpOwogCX0KIApAQCAtMzY4LDEwICszNDAsMTAgQEAKIAkJfSBlbHNlIHsKIAkJCWlmIChkbV9kaWctPmxhcmdlX2ZhX2hpdCA8IDMpIHsKIAkJCQlpZiAoKGRtX2RpZy0+Zm9yYmlkZGVuX2lnaSAtIDEpIDwKLQkJCQkgICAgZGlnX2R5bmFtaWNfbWluKSB7Ci0JCQkJCWRtX2RpZy0+Zm9yYmlkZGVuX2lnaSA9IGRpZ19keW5hbWljX21pbjsKKwkJCQkgICAgZGlnX21pbl8wKSB7CisJCQkJCWRtX2RpZy0+Zm9yYmlkZGVuX2lnaSA9IGRpZ19taW5fMDsKIAkJCQkJZG1fZGlnLT5yeF9nYWluX21pbiA9Ci0JCQkJCQkJCWRpZ19keW5hbWljX21pbjsKKwkJCQkJCQkJZGlnX21pbl8wOwogCQkJCX0gZWxzZSB7CiAJCQkJCWRtX2RpZy0+Zm9yYmlkZGVuX2lnaS0tOwogCQkJCQlkbV9kaWctPnJ4X2dhaW5fbWluID0KQEAgLTQzMCw3ICs0MDIsNyBAQAogCXJ0bDkyZWVfZG1fd3JpdGVfZGlnKGh3ICwgY3VycmVudF9pZ2kpOwogCWRtX2RpZy0+bWVkaWFfY29ubmVjdF8wID0gKChtYWMtPmxpbmtfc3RhdGUgPj0gTUFDODAyMTFfTElOS0VEKSA/CiAJCQkJICAgdHJ1ZSA6IGZhbHNlKTsKLQlkbV9kaWctPmRpZ19keW5hbWljX21pbiA9IGRpZ19keW5hbWljX21pbjsKKwlkbV9kaWctPmRpZ19taW5fMCA9IGRpZ19taW5fMDsKIH0KIAogdm9pZCBydGw5MmVlX2RtX3dyaXRlX2Nja19jY2FfdGhyZXMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGN1cl90aHJlcykKQEAgLTEwODgsMTAgKzEwNjAsMTEgQEAKIHZvaWQgcnRsOTJlZV9kbV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKKwl1MzIgY3VyX2lndmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBETV9SRUdfSUdJX0FfMTFOLCBETV9CSVRfSUdJXzExTik7CiAKIAlydGxwcml2LT5kbS5kbV90eXBlID0gRE1fVFlQRV9CWURSSVZFUjsKIAotCXJ0bDkyZWVfZG1fZGlnaW5pdChodyk7CisJcnRsX2RtX2RpZ2luaXQoaHcsIGN1cl9pZ3ZhbHVlKTsKIAlydGw5MmVlX2RtX2luaXRfcmF0ZV9hZGFwdGl2ZV9tYXNrKGh3KTsKIAlydGw5MmVlX2RtX2luaXRfcHJpbWFyeV9jY2FfY2hlY2soaHcpOwogCXJ0bDkyZWVfZG1faW5pdF9lZGNhX3R1cmJvKGh3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL2RtLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJlZS9kbS5oCmluZGV4IDg4MWRiN2QuLjEwN2Q1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL2RtLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZWUvZG0uaApAQCAtMTg5LDI4ICsxODksMTIgQEAKICNkZWZpbmUgQldfQVVUT19TV0lUQ0hfSElHSF9MT1cJCQkyNQogI2RlZmluZSBCV19BVVRPX1NXSVRDSF9MT1dfSElHSAkJCTMwCiAKLSNkZWZpbmUgRE1fRElHX1RIUkVTSF9ISUdICQkJNDAKLSNkZWZpbmUgRE1fRElHX1RIUkVTSF9MT1cJCQkzNQotCi0jZGVmaW5lIERNX0ZBTFNFQUxBUk1fVEhSRVNIX0xPVwkJNDAwCi0jZGVmaW5lIERNX0ZBTFNFQUxBUk1fVEhSRVNIX0hJR0gJCTEwMDAKLQotI2RlZmluZSBETV9ESUdfTUFYCQkJCTB4M2UKLSNkZWZpbmUgRE1fRElHX01JTgkJCQkweDFlCi0KLSNkZWZpbmUgRE1fRElHX01BWF9BUAkJCQkweDMyCi0jZGVmaW5lIERNX0RJR19NSU5fQVAJCQkJMHgyMAotCiAjZGVmaW5lIERNX0RJR19GQV9VUFBFUgkJCQkweDNlCiAjZGVmaW5lIERNX0RJR19GQV9MT1dFUgkJCQkweDFlCiAjZGVmaW5lIERNX0RJR19GQV9USDAJCQkJMHgyMDAKICNkZWZpbmUgRE1fRElHX0ZBX1RIMQkJCQkweDMwMAogI2RlZmluZSBETV9ESUdfRkFfVEgyCQkJCTB4NDAwCiAKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfTUFYCQkJMTIKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfTUlOCQkJLTQKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfREVGQVVMVAkJCTEwCi0KICNkZWZpbmUgUlhQQVRIU0VMRUNUSU9OX1NTX1RIX0xPVwkJMzAKICNkZWZpbmUgUlhQQVRIU0VMRUNUSU9OX0RJRkZfVEgJCQkxOAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJlZS9mdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZWUvZncuYwppbmRleCA0NWMxMjhiLi5jNWQ0YjgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJlZS9mdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL2Z3LmMKQEAgLTY2Niw3ICs2NjYsNiBAQAogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCiAJdTMyIHRvdGFscGFja2V0bGVuOwotCWJvb2wgcnRzdGF0dXM7CiAJdTggdTFyc3ZkcGFnZWxvY1s1XSA9IHsgMCB9OwogCWJvb2wgYl9kbG9rID0gZmFsc2U7CiAKQEAgLTcyOCwxMCArNzI3LDcgQEAKIAltZW1jcHkoKHU4ICopc2tiX3B1dChza2IsIHRvdGFscGFja2V0bGVuKSwKIAkgICAgICAgJnJlc2VydmVkX3BhZ2VfcGFja2V0LCB0b3RhbHBhY2tldGxlbik7CiAKLQlydHN0YXR1cyA9IHJ0bF9jbWRfc2VuZF9wYWNrZXQoaHcsIHNrYik7Ci0KLQlpZiAocnRzdGF0dXMpCi0JCWJfZGxvayA9IHRydWU7CisJYl9kbG9rID0gdHJ1ZTsKIAogCWlmIChiX2Rsb2spIHsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9QT1dFUiwgREJHX0xPVUQgLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZWUvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL2h3LmMKaW5kZXggMWE4N2VkYy4uYjQ2MWIzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZWUvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJlZS9ody5jCkBAIC04NSwyOSArODUsNiBAQAogCV9ydGw5MmVlX3NldF9iY25fY3RybF9yZWcoaHcsIDAsIEJJVCgxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9ydGw5MmVlX3JldHVybl9iZWFjb25fcXVldWVfc2tiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKLQlzdHJ1Y3QgcnRsX3BjaSAqcnRscGNpID0gcnRsX3BjaWRldihydGxfcGNpcHJpdihodykpOwotCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgKnJpbmcgPSAmcnRscGNpLT50eF9yaW5nW0JFQUNPTl9RVUVVRV07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOwotCXdoaWxlIChza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkpIHsKLQkJc3RydWN0IHJ0bF90eF9idWZmZXJfZGVzYyAqZW50cnkgPQotCQkJCQkJJnJpbmctPmJ1ZmZlcl9kZXNjW3JpbmctPmlkeF07Ci0JCXN0cnVjdCBza19idWZmICpza2IgPSBfX3NrYl9kZXF1ZXVlKCZyaW5nLT5xdWV1ZSk7Ci0KLQkJcGNpX3VubWFwX3NpbmdsZShydGxwY2ktPnBkZXYsCi0JCQkJIHJ0bHByaXYtPmNmZy0+b3BzLT5nZXRfZGVzYygKLQkJCQkgKHU4ICopZW50cnksIHRydWUsIEhXX0RFU0NfVFhCVUZGX0FERFIpLAotCQkJCSBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyaW5nLT5pZHggPSAocmluZy0+aWR4ICsgMSkgJSByaW5nLT5lbnRyaWVzOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGxwcml2LT5sb2Nrcy5pcnFfdGhfbG9jaywgZmxhZ3MpOwotfQotCiBzdGF0aWMgdm9pZCBfcnRsOTJlZV9kaXNhYmxlX2Jjbl9zdWJfZnVuYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlfcnRsOTJlZV9zZXRfYmNuX2N0cmxfcmVnKGh3LCBCSVQoMSksIDApOwpAQCAtNDAzLDkgKzM4MCw2IEBACiAJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19EV0JDTjBfQ1RSTCArIDIsCiAJCQkgICAgICAgYmNudmFsaWRfcmVnIHwgQklUKDApKTsKIAotCQkvKiBSZXR1cm4gQmVhY29uIFRDQiAqLwotCQlfcnRsOTJlZV9yZXR1cm5fYmVhY29uX3F1ZXVlX3NrYihodyk7Ci0KIAkJLyogZG93bmxvYWQgcnN2ZCBwYWdlICovCiAJCXJ0bDkyZWVfc2V0X2Z3X3JzdmRwYWdlcGt0KGh3LCBmYWxzZSk7CiAKQEAgLTExNjMsNiArMTEzNywxMzkgQEAKIAlydGxwcml2LT5jZmctPm9wcy0+c2V0X2h3X3JlZyhodywgSFdfVkFSX1dQQV9DT05GSUcsICZzZWNfcmVnX3ZhbHVlKTsKIH0KIAorc3RhdGljIGJvb2wgX3J0bDgxOTJlZV9jaGVja19wY2llX2RtYV9oYW5nKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdikKK3sKKwl1OCB0bXA7CisKKwkvKiB3cml0ZSByZWcgMHgzNTAgQml0WzI2XT0xLiBFbmFibGUgZGVidWcgcG9ydC4gKi8KKwl0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19CQUNLRE9PUl9EQklfREFUQSArIDMpOworCWlmICghKHRtcCAmIEJJVCgyKSkpIHsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX0JBQ0tET09SX0RCSV9EQVRBICsgMywKKwkJCSAgICAgICB0bXAgfCBCSVQoMikpOworCQltZGVsYXkoMTAwKTsgLyogU3VnZ2VzdGVkIGJ5IEREIEp1c3Rpbl90c2FpLiAqLworCX0KKworCS8qIHJlYWQgcmVnIDB4MzUwIEJpdFsyNV0gaWYgMSA6IFJYIGhhbmcKKwkgKiByZWFkIHJlZyAweDM1MCBCaXRbMjRdIGlmIDEgOiBUWCBoYW5nCisJICovCisJdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfQkFDS0RPT1JfREJJX0RBVEEgKyAzKTsKKwlpZiAoKHRtcCAmIEJJVCgwKSkgfHwgKHRtcCAmIEJJVCgxKSkpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwKKwkJCSAiQ2hlY2tQY2llRE1BSGFuZzgxOTJFRSgpOiB0cnVlISFcbiIpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCBfcnRsODE5MmVlX3Jlc2V0X3BjaWVfaW50ZXJmYWNlX2RtYShzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYsCisJCQkJCQlib29sIG1hY19wb3dlcl9vbikKK3sKKwl1OCB0bXA7CisJYm9vbCByZWxlYXNlX21hY19yeF9wYXVzZTsKKwl1OCBiYWNrdXBfcGNpZV9kbWFfcGF1c2U7CisKKwlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19MT1VELAorCQkgIlJlc2V0UGNpZUludGVyZmFjZURNQTgxOTJFRSgpXG4iKTsKKworCS8qIFJldmlzZSBOb3RlOiBGb2xsb3cgdGhlIGRvY3VtZW50ICJQQ0llIFJYIERNQSBIYW5nIFJlc2V0IEZsb3dfdjAzIgorCSAqIHJlbGVhc2VkIGJ5IFNEMSBBbGFuLgorCSAqLworCisJLyogMS4gZGlzYWJsZSByZWdpc3RlciB3cml0ZSBsb2NrCisJICoJd3JpdGUgMHgxQyBiaXRbMTowXSA9IDInaDAKKwkgKgl3cml0ZSAweENDIGJpdFsyXSA9IDEnYjEKKwkgKi8KKwl0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19SU1ZfQ1RSTCk7CisJdG1wICY9IH4oQklUKDEpIHwgQklUKDApKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlNWX0NUUkwsIHRtcCk7CisJdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfUE1DX0RCR19DVFJMMik7CisJdG1wIHw9IEJJVCgyKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUE1DX0RCR19DVFJMMiwgdG1wKTsKKworCS8qIDIuIENoZWNrIGFuZCBwYXVzZSBUUlggRE1BCisJICoJd3JpdGUgMHgyODQgYml0WzE4XSA9IDEnYjEKKwkgKgl3cml0ZSAweDMwMSA9IDB4RkYKKwkgKi8KKwl0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19SWERNQV9DT05UUk9MKTsKKwlpZiAodG1wICYgQklUKDIpKSB7CisJCS8qIEFscmVhZHkgcGF1c2UgYmVmb3JlIHRoZSBmdW5jdGlvbiBmb3IgYW5vdGhlciByZWFzb24uICovCisJCXJlbGVhc2VfbWFjX3J4X3BhdXNlID0gZmFsc2U7CisJfSBlbHNlIHsKKwkJcnRsX3dyaXRlX2J5dGUocnRscHJpdiwgUkVHX1JYRE1BX0NPTlRST0wsICh0bXAgfCBCSVQoMikpKTsKKwkJcmVsZWFzZV9tYWNfcnhfcGF1c2UgPSB0cnVlOworCX0KKworCWJhY2t1cF9wY2llX2RtYV9wYXVzZSA9IHJ0bF9yZWFkX2J5dGUocnRscHJpdiwgUkVHX1BDSUVfQ1RSTF9SRUcgKyAxKTsKKwlpZiAoYmFja3VwX3BjaWVfZG1hX3BhdXNlICE9IDB4RkYpCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19QQ0lFX0NUUkxfUkVHICsgMSwgMHhGRik7CisKKwlpZiAobWFjX3Bvd2VyX29uKSB7CisJCS8qIDMuIHJlc2V0IFRSWCBmdW5jdGlvbgorCQkgKgl3cml0ZSAweDEwMCA9IDB4MDAKKwkJICovCisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19DUiwgMCk7CisJfQorCisJLyogNC4gUmVzZXQgUENJZSBETUEKKwkgKgl3cml0ZSAweDAwMyBiaXRbMF0gPSAwCisJICovCisJdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4gKyAxKTsKKwl0bXAgJj0gfihCSVQoMCkpOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiArIDEsIHRtcCk7CisKKwkvKiA1LiBFbmFibGUgUENJZSBETUEKKwkgKgl3cml0ZSAweDAwMyBiaXRbMF0gPSAxCisJICovCisJdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfU1lTX0ZVTkNfRU4gKyAxKTsKKwl0bXAgfD0gQklUKDApOworCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19TWVNfRlVOQ19FTiArIDEsIHRtcCk7CisKKwlpZiAobWFjX3Bvd2VyX29uKSB7CisJCS8qIDYuIGVuYWJsZSBUUlggZnVuY3Rpb24KKwkJICoJd3JpdGUgMHgxMDAgPSAweEZGCisJCSAqLworCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfQ1IsIDB4RkYpOworCisJCS8qIFdlIHNob3VsZCBpbml0IExMVCAmIFJRUE4gYW5kCisJCSAqIHByZXBhcmUgVHgvUnggZGVzY3JwdG9yIGFkZHJlc3MgbGF0ZXIKKwkJICogYmVjYXVzZSBNQUMgZnVuY3Rpb24gaXMgcmVzZXQuCisJCSAqLworCX0KKworCS8qIDcuIFJlc3RvcmUgUENJZSBhdXRvbG9hZCBkb3duIGJpdAorCSAqCXdyaXRlIDB4RjggYml0WzE3XSA9IDEnYjEKKwkgKi8KKwl0bXAgPSBydGxfcmVhZF9ieXRlKHJ0bHByaXYsIFJFR19NQUNfUEhZX0NUUkxfTk9STUFMICsgMik7CisJdG1wIHw9IEJJVCgxKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfTUFDX1BIWV9DVFJMX05PUk1BTCArIDIsIHRtcCk7CisKKwkvKiBJbiBNQUMgcG93ZXIgb24gc3RhdGUsIEJCIGFuZCBSRiBtYXliZSBpbiBPTiBzdGF0ZSwKKwkgKiBpZiB3ZSByZWxlYXNlIFRSeCBETUEgaGVyZQorCSAqIGl0IHdpbGwgY2F1c2UgcGFja2V0cyB0byBiZSBzdGFydGVkIHRvIFR4L1J4LAorCSAqIHNvIHdlIHJlbGVhc2UgVHgvUnggRE1BIGxhdGVyLgorCSAqLworCWlmICghbWFjX3Bvd2VyX29uKSB7CisJCS8qIDguIHJlbGVhc2UgVFJYIERNQQorCQkgKgl3cml0ZSAweDI4NCBiaXRbMThdID0gMSdiMAorCQkgKgl3cml0ZSAweDMwMSA9IDB4MDAKKwkJICovCisJCWlmIChyZWxlYXNlX21hY19yeF9wYXVzZSkgeworCQkJdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfUlhETUFfQ09OVFJPTCk7CisJCQlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUlhETUFfQ09OVFJPTCwKKwkJCQkgICAgICAgKHRtcCAmICh+QklUKDIpKSkpOworCQl9CisJCXJ0bF93cml0ZV9ieXRlKHJ0bHByaXYsIFJFR19QQ0lFX0NUUkxfUkVHICsgMSwKKwkJCSAgICAgICBiYWNrdXBfcGNpZV9kbWFfcGF1c2UpOworCX0KKworCS8qIDkuIGxvY2sgc3lzdGVtIHJlZ2lzdGVyCisJICoJd3JpdGUgMHhDQyBiaXRbMl0gPSAxJ2IwCisJICovCisJdG1wID0gcnRsX3JlYWRfYnl0ZShydGxwcml2LCBSRUdfUE1DX0RCR19DVFJMMik7CisJdG1wICY9IH4oQklUKDIpKTsKKwlydGxfd3JpdGVfYnl0ZShydGxwcml2LCBSRUdfUE1DX0RCR19DVFJMMiwgdG1wKTsKK30KKwogaW50IHJ0bDkyZWVfaHdfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CkBAIC0xMTg4LDYgKzEyOTUsMTMgQEAKIAkJcnRsaGFsLT5md19wc19zdGF0ZSA9IEZXX1BTX1NUQVRFX0FMTF9PTl85MkU7CiAJfQogCisJaWYgKF9ydGw4MTkyZWVfY2hlY2tfcGNpZV9kbWFfaGFuZyhydGxwcml2KSkgeworCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0lOSVQsIERCR19ETUVTRywgIjkyZWUgZG1hIGhhbmchXG4iKTsKKwkJX3J0bDgxOTJlZV9yZXNldF9wY2llX2ludGVyZmFjZV9kbWEocnRscHJpdiwKKwkJCQkJCSAgICBydGxoYWwtPm1hY19mdW5jX2VuYWJsZSk7CisJCXJ0bGhhbC0+bWFjX2Z1bmNfZW5hYmxlID0gZmFsc2U7CisJfQorCiAJcnRzdGF0dXMgPSBfcnRsOTJlZV9pbml0X21hYyhodyk7CiAKIAlydGxfd3JpdGVfYnl0ZShydGxwcml2LCAweDU3NywgMHgwMyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJlZS9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL3JlZy5oCmluZGV4IDNmMmE5NTkuLjFlYWExZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL3JlZy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL3JlZy5oCkBAIC03Nyw5ICs3NywxMSBAQAogI2RlZmluZSBSRUdfSElNUkUJCQkJMHgwMEI4CiAjZGVmaW5lIFJFR19ISVNSRQkJCQkweDAwQkMKIAorI2RlZmluZSBSRUdfUE1DX0RCR19DVFJMMgkJCTB4MDBDQwogI2RlZmluZSBSRUdfRUZVU0VfQUNDRVNTCQkJMHgwMENGCiAjZGVmaW5lIFJFR19IUE9OX0ZTTQkJCQkweDAwRUMKICNkZWZpbmUgUkVHX1NZU19DRkcxCQkJCTB4MDBGMAorI2RlZmluZSBSRUdfTUFDX1BIWV9DVFJMX05PUk1BTAkJCTB4MDBGOAogI2RlZmluZSBSRUdfU1lTX0NGRzIJCQkJMHgwMEZDCiAKICNkZWZpbmUgUkVHX0NSCQkJCQkweDAxMDAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL3N3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJlZS9zdy5jCmluZGV4IDliNWE3ZDUuLmMzMWM2YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL3N3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZWUvc3cuYwpAQCAtMTEzLDggKzExMyw2IEBACiAJCQkJICBSQ1JfSFRDX0xPQ19DVFJMCQl8CiAJCQkJICBSQ1JfQU1GCQkJfAogCQkJCSAgUkNSX0FDRgkJCXwKLQkJCQkgIFJDUl9BREYJCQl8Ci0JCQkJICBSQ1JfQUlDVgkJCXwKIAkJCQkgIFJDUl9BQ1JDMzIJCQl8CiAJCQkJICBSQ1JfQUIJCQl8CiAJCQkJICBSQ1JfQU0JCQl8CkBAIC0yNDEsNiArMjM5LDcgQEAKIAkuc2V0X2Rlc2MgPSBydGw5MmVlX3NldF9kZXNjLAogCS5nZXRfZGVzYyA9IHJ0bDkyZWVfZ2V0X2Rlc2MsCiAJLmlzX3R4X2Rlc2NfY2xvc2VkID0gcnRsOTJlZV9pc190eF9kZXNjX2Nsb3NlZCwKKwkuZ2V0X2F2YWlsYWJsZV9kZXNjID0gcnRsOTJlZV9nZXRfYXZhaWxhYmxlX2Rlc2MsCiAJLnR4X3BvbGxpbmcgPSBydGw5MmVlX3R4X3BvbGxpbmcsCiAJLmVuYWJsZV9od19zZWMgPSBydGw5MmVlX2VuYWJsZV9od19zZWN1cml0eV9jb25maWcsCiAJLnNldF9rZXkgPSBydGw5MmVlX3NldF9rZXksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJlZS90cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL3RyeC5jCmluZGV4IDJmY2JlZjEuLmQzOWVlNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL3RyeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL3RyeC5jCkBAIC00NywxNjQgKzQ3LDYgQEAKIAlyZXR1cm4gc2tiLT5wcmlvcml0eTsKIH0KIAotLyogbWFjODAyMTEncyByYXRlX2lkeCBpcyBsaWtlIHRoaXM6Ci0gKgotICogMi40RyBiYW5kOnJ4X3N0YXR1cy0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haCi0gKgotICogQi9HIHJhdGU6Ci0gKiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkgPSAwLAotICogREVTQzkyQ19SQVRFMU0tLT5ERVNDOTJDX1JBVEU1NE0gPT0+IGlkeCBpcyAwLS0+MTEsCi0gKgotICogTiByYXRlOgotICogKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpID0gMSwKLSAqIERFU0M5MkNfUkFURU1DUzAtLT5ERVNDOTJDX1JBVEVNQ1MxNSA9PT4gaWR4IGlzIDAtLT4xNQotICoKLSAqIDVHIGJhbmQ6cnhfc3RhdHVzLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFoKLSAqIEEgcmF0ZToKLSAqIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSA9IDAsCi0gKiBERVNDOTJDX1JBVEU2TS0tPkRFU0M5MkNfUkFURTU0TSA9PT4gaWR4IGlzIDAtLT43LAotICoKLSAqIE4gcmF0ZToKLSAqIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSA9IDEsCi0gKiBERVNDOTJDX1JBVEVNQ1MwLS0+REVTQzkyQ19SQVRFTUNTMTUgPT0+IGlkeCBpcyAwLS0+MTUKLSAqLwotc3RhdGljIGludCBfcnRsOTJlZV9yYXRlX21hcHBpbmcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJIGJvb2wgaXNodCwgdTggZGVzY19yYXRlKQotewotCWludCByYXRlX2lkeDsKLQotCWlmICghaXNodCkgewotCQlpZiAoSUVFRTgwMjExX0JBTkRfMkdIWiA9PSBody0+Y29uZi5jaGFuZGVmLmNoYW4tPmJhbmQpIHsKLQkJCXN3aXRjaCAoZGVzY19yYXRlKSB7Ci0JCQljYXNlIERFU0M5MkNfUkFURTFNOgotCQkJCXJhdGVfaWR4ID0gMDsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMk06Ci0JCQkJcmF0ZV9pZHggPSAxOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEU1XzVNOgotCQkJCXJhdGVfaWR4ID0gMjsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMTFNOgotCQkJCXJhdGVfaWR4ID0gMzsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFNk06Ci0JCQkJcmF0ZV9pZHggPSA0OwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEU5TToKLQkJCQlyYXRlX2lkeCA9IDU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTEyTToKLQkJCQlyYXRlX2lkeCA9IDY7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTE4TToKLQkJCQlyYXRlX2lkeCA9IDc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTI0TToKLQkJCQlyYXRlX2lkeCA9IDg7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTM2TToKLQkJCQlyYXRlX2lkeCA9IDk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTQ4TToKLQkJCQlyYXRlX2lkeCA9IDEwOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEU1NE06Ci0JCQkJcmF0ZV9pZHggPSAxMTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmF0ZV9pZHggPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2UgewotCQkJc3dpdGNoIChkZXNjX3JhdGUpIHsKLQkJCWNhc2UgREVTQzkyQ19SQVRFNk06Ci0JCQkJcmF0ZV9pZHggPSAwOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEU5TToKLQkJCQlyYXRlX2lkeCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTEyTToKLQkJCQlyYXRlX2lkeCA9IDI7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTE4TToKLQkJCQlyYXRlX2lkeCA9IDM7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTI0TToKLQkJCQlyYXRlX2lkeCA9IDQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTM2TToKLQkJCQlyYXRlX2lkeCA9IDU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTQ4TToKLQkJCQlyYXRlX2lkeCA9IDY7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTU0TToKLQkJCQlyYXRlX2lkeCA9IDc7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXJhdGVfaWR4ID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoZGVzY19yYXRlKSB7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMDoKLQkJCXJhdGVfaWR4ID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzE6Ci0JCQlyYXRlX2lkeCA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1MyOgotCQkJcmF0ZV9pZHggPSAyOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMzoKLQkJCXJhdGVfaWR4ID0gMzsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzQ6Ci0JCQlyYXRlX2lkeCA9IDQ7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1M1OgotCQkJcmF0ZV9pZHggPSA1OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTNjoKLQkJCXJhdGVfaWR4ID0gNjsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzc6Ci0JCQlyYXRlX2lkeCA9IDc7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1M4OgotCQkJcmF0ZV9pZHggPSA4OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTOToKLQkJCXJhdGVfaWR4ID0gOTsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzEwOgotCQkJcmF0ZV9pZHggPSAxMDsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzExOgotCQkJcmF0ZV9pZHggPSAxMTsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzEyOgotCQkJcmF0ZV9pZHggPSAxMjsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzEzOgotCQkJcmF0ZV9pZHggPSAxMzsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzE0OgotCQkJcmF0ZV9pZHggPSAxNDsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzE1OgotCQkJcmF0ZV9pZHggPSAxNTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmF0ZV9pZHggPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJhdGVfaWR4OwotfQotCiBzdGF0aWMgdm9pZCBfcnRsOTJlZV9xdWVyeV9yeHBoeXN0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgICAgc3RydWN0IHJ0bF9zdGF0cyAqcHN0YXR1cywgdTggKnBkZXNjLAogCQkJCSAgICAgICBzdHJ1Y3QgcnhfZndpbmZvICpwX2RydmluZm8sCkBAIC0zNDUsOCArMTg3LDggQEAKIAkJcHN0YXR1cy0+cmVjdnNpZ25hbHBvd2VyID0gcnhfcHdyX2FsbDsKIAogCQkvKiAoMylFVk0gb2YgSFQgcmF0ZSAqLwotCQlpZiAocHN0YXR1cy0+cmF0ZSA+PSBERVNDOTJDX1JBVEVNQ1M4ICYmCi0JCSAgICBwc3RhdHVzLT5yYXRlIDw9IERFU0M5MkNfUkFURU1DUzE1KQorCQlpZiAocHN0YXR1cy0+cmF0ZSA+PSBERVNDX1JBVEVNQ1M4ICYmCisJCSAgICBwc3RhdHVzLT5yYXRlIDw9IERFU0NfUkFURU1DUzE1KQogCQkJbWF4X3NwYXRpYWxfc3RyZWFtID0gMjsKIAkJZWxzZQogCQkJbWF4X3NwYXRpYWxfc3RyZWFtID0gMTsKQEAgLTUxMiw2ICszNTQsMTAgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXUzMiBwaHlzdGF0dXMgPSBHRVRfUlhfREVTQ19QSFlTVChwZGVzYyk7CiAKKwlpZiAoR0VUX1JYX1NUQVRVU19ERVNDX1JQVF9TRUwocGRlc2MpID09IDApCisJCXN0YXR1cy0+cGFja2V0X3JlcG9ydF90eXBlID0gTk9STUFMX1JYOworCWVsc2UKKwkJc3RhdHVzLT5wYWNrZXRfcmVwb3J0X3R5cGUgPSBDMkhfUEFDS0VUOwogCXN0YXR1cy0+bGVuZ3RoID0gKHUxNilHRVRfUlhfREVTQ19QS1RfTEVOKHBkZXNjKTsKIAlzdGF0dXMtPnJ4X2RydmluZm9fc2l6ZSA9ICh1OClHRVRfUlhfREVTQ19EUlZfSU5GT19TSVpFKHBkZXNjKSAqCiAJCQkJICBSWF9EUlZfSU5GT19TSVpFX1VOSVQ7CkBAIC01NzYsOSArNDIyLDggQEAKIAkgKiBhcmUgdXNlIChSWF9GTEFHX0hUKQogCSAqIE5vdGljZTogdGhpcyBpcyBkaWZmIHdpdGggd2luZG93cyBkZWZpbmUKIAkgKi8KLQlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gX3J0bDkyZWVfcmF0ZV9tYXBwaW5nKGh3LAotCQkJCQkJICAgIHN0YXR1cy0+aXNfaHQsCi0JCQkJCQkgICAgc3RhdHVzLT5yYXRlKTsKKwlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gcnRsd2lmaV9yYXRlX21hcHBpbmcoaHcsIHN0YXR1cy0+aXNfaHQsCisJCQkJCQkgICBmYWxzZSwgc3RhdHVzLT5yYXRlKTsKIAogCXJ4X3N0YXR1cy0+bWFjdGltZSA9IHN0YXR1cy0+dGltZXN0YW1wX2xvdzsKIAlpZiAocGh5c3RhdHVzKSB7CkBAIC02NTQsMTQgKzQ5OSw3IEBACiAJaWYgKCFzdGFydF9yeCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoKGxhc3RfcmVhZF9wb2ludCA+IChSWF9ERVNDX05VTV85MkUgLyAyKSkgJiYKLQkgICAgKHJlYWRfcG9pbnQgPD0gKFJYX0RFU0NfTlVNXzkyRSAvIDIpKSkgewotCQlyZW1pbmRfY250ID0gUlhfREVTQ19OVU1fOTJFIC0gd3JpdGVfcG9pbnQ7Ci0JfSBlbHNlIHsKLQkJcmVtaW5kX2NudCA9IChyZWFkX3BvaW50ID49IHdyaXRlX3BvaW50KSA/Ci0JCQkgICAgIChyZWFkX3BvaW50IC0gd3JpdGVfcG9pbnQpIDoKLQkJCSAgICAgKFJYX0RFU0NfTlVNXzkyRSAtIHdyaXRlX3BvaW50ICsgcmVhZF9wb2ludCk7Ci0JfQorCXJlbWluZF9jbnQgPSBjYWxjX2ZpZm9fc3BhY2UocmVhZF9wb2ludCwgd3JpdGVfcG9pbnQpOwogCiAJaWYgKHJlbWluZF9jbnQgPT0gMCkKIAkJcmV0dXJuIDA7CkBAIC03MTAsNyArNTQ4LDcgQEAKIAlyZXR1cm4gZGVzY19hZGRyZXNzOwogfQogCi12b2lkIHJ0bDkyZWVfZ2V0X2F2YWlsYWJsZV9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBxX2lkeCkKK3UxNiBydGw5MmVlX2dldF9hdmFpbGFibGVfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggcV9pZHgpCiB7CiAJc3RydWN0IHJ0bF9wY2kgKnJ0bHBjaSA9IHJ0bF9wY2lkZXYocnRsX3BjaXByaXYoaHcpKTsKIAlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7CkBAIC03MjMsMTIgKzU2MSwxMSBAQAogCWN1cnJlbnRfdHhfcmVhZF9wb2ludCA9ICh1MTYpKCh0bXBfNGJ5dGUgPj4gMTYpICYgMHgwZmZmKTsKIAljdXJyZW50X3R4X3dyaXRlX3BvaW50ID0gKHUxNikoKHRtcF80Ynl0ZSkgJiAweDBmZmYpOwogCi0JcG9pbnRfZGlmZiA9ICgoY3VycmVudF90eF9yZWFkX3BvaW50ID4gY3VycmVudF90eF93cml0ZV9wb2ludCkgPwotCQkgICAgICAoY3VycmVudF90eF9yZWFkX3BvaW50IC0gY3VycmVudF90eF93cml0ZV9wb2ludCkgOgotCQkgICAgICAoVFhfREVTQ19OVU1fOTJFIC0gY3VycmVudF90eF93cml0ZV9wb2ludCArCi0JCSAgICAgICBjdXJyZW50X3R4X3JlYWRfcG9pbnQpKTsKKwlwb2ludF9kaWZmID0gY2FsY19maWZvX3NwYWNlKGN1cnJlbnRfdHhfcmVhZF9wb2ludCwKKwkJCQkgICAgIGN1cnJlbnRfdHhfd3JpdGVfcG9pbnQpOwogCiAJcnRscGNpLT50eF9yaW5nW3FfaWR4XS5hdmxfZGVzYyA9IHBvaW50X2RpZmY7CisJcmV0dXJuIHBvaW50X2RpZmY7CiB9CiAKIHZvaWQgcnRsOTJlZV9wcmVfZmlsbF90eF9iZF9kZXNjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtOTAxLDEzICs3MzgsMTMgQEAKIAkJfSBlbHNlIHsKIAkJCWlmIChydGxwcml2LT5yYS5pc19zcGVjaWFsX2RhdGEpIHsKIAkJCQlwdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA9IHRydWU7Ci0JCQkJU0VUX1RYX0RFU0NfVFhfUkFURShwZGVzYywgREVTQzkyQ19SQVRFMTFNKTsKKwkJCQlTRVRfVFhfREVTQ19UWF9SQVRFKHBkZXNjLCBERVNDX1JBVEUxMU0pOwogCQkJfSBlbHNlIHsKIAkJCQlwdGNiX2Rlc2MtPnVzZV9kcml2ZXJfcmF0ZSA9IGZhbHNlOwogCQkJfQogCQl9CiAKLQkJaWYgKHB0Y2JfZGVzYy0+aHdfcmF0ZSA+IERFU0M5MkNfUkFURU1DUzApCisJCWlmIChwdGNiX2Rlc2MtPmh3X3JhdGUgPiBERVNDX1JBVEVNQ1MwKQogCQkJc2hvcnRfZ2kgPSAocHRjYl9kZXNjLT51c2Vfc2hvcnRnaSkgPyAxIDogMDsKIAkJZWxzZQogCQkJc2hvcnRfZ2kgPSAocHRjYl9kZXNjLT51c2Vfc2hvcnRwcmVhbWJsZSkgPyAxIDogMDsKQEAgLTkyNyw3ICs3NjQsNyBAQAogCQlTRVRfVFhfREVTQ19SVFNfUkFURShwZGVzYywgcHRjYl9kZXNjLT5ydHNfcmF0ZSk7CiAJCVNFVF9UWF9ERVNDX1JUU19TQyhwZGVzYywgcHRjYl9kZXNjLT5ydHNfc2MpOwogCQlTRVRfVFhfREVTQ19SVFNfU0hPUlQocGRlc2MsCi0JCQkJKChwdGNiX2Rlc2MtPnJ0c19yYXRlIDw9IERFU0M5MkNfUkFURTU0TSkgPworCQkJCSgocHRjYl9kZXNjLT5ydHNfcmF0ZSA8PSBERVNDX1JBVEU1NE0pID8KIAkJCQkgKHB0Y2JfZGVzYy0+cnRzX3VzZV9zaG9ydHByZWFtYmxlID8gMSA6IDApIDoKIAkJCQkgKHB0Y2JfZGVzYy0+cnRzX3VzZV9zaG9ydGdpID8gMSA6IDApKSk7CiAKQEAgLTEwMzgsNyArODc1LDcgQEAKIAlpZiAoZmlyc3RzZWcpCiAJCVNFVF9UWF9ERVNDX09GRlNFVChwZGVzYywgdHhkZXNjX2xlbik7CiAKLQlTRVRfVFhfREVTQ19UWF9SQVRFKHBkZXNjLCBERVNDOTJDX1JBVEUxTSk7CisJU0VUX1RYX0RFU0NfVFhfUkFURShwZGVzYywgREVTQ19SQVRFMU0pOwogCiAJU0VUX1RYX0RFU0NfU0VRKHBkZXNjLCAwKTsKIApAQCAtMTIwNyw4ICsxMDQ0LDcgQEAKIAlzdGF0aWMgdTggc3RvcF9yZXBvcnRfY250OwogCXN0cnVjdCBydGw4MTkyX3R4X3JpbmcgKnJpbmcgPSAmcnRscGNpLT50eF9yaW5nW2h3X3F1ZXVlXTsKIAotCS8qY2hlY2tpbmcgUmVhZC9Xcml0ZSBQb2ludCBlYWNoIGludGVycnVwdCB3YXN0ZXMgQ1BVICovCi0JaWYgKHN0b3BfcmVwb3J0X2NudCA+IDE1IHx8ICFydGxwcml2LT5saW5rX2luZm8uYnVzeXRyYWZmaWMpIHsKKwl7CiAJCXUxNiBwb2ludF9kaWZmID0gMDsKIAkJdTE2IGN1cl90eF9ycCwgY3VyX3R4X3dwOwogCQl1MzIgdG1wdTMyID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MmVlL3RyeC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZWUvdHJ4LmgKaW5kZXggNmY5YmUxYy4uOGY3OGFjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZWUvdHJ4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyZWUvdHJ4LmgKQEAgLTU0Miw2ICs1NDIsOCBAQAogCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys4LCAxMiwgNCkKICNkZWZpbmUgR0VUX1JYX0RFU0NfUlhfSVNfUU9TKF9fcGRlc2MpCQkJXAogCUxFX0JJVFNfVE9fNEJZVEUoX19wZGVzYys4LCAxNiwgMSkKKyNkZWZpbmUgR0VUX1JYX1NUQVRVU19ERVNDX1JQVF9TRUwoX19wZGVzYykJCVwKKwlMRV9CSVRTX1RPXzRCWVRFKF9fcGRlc2MrOCwgMjgsIDEpCiAKICNkZWZpbmUgR0VUX1JYX0RFU0NfUlhNQ1MoX19wZGVzYykJCQlcCiAJTEVfQklUU19UT180QllURShfX3BkZXNjKzEyLCAwLCA3KQpAQCAtNTkxLDEwICs1OTMsMTAgQEAKIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUlRMOTJFRV9SWF9IQUxfSVNfQ0NLX1JBVEUocnhtY3MpXAotCShyeG1jcyA9PSBERVNDOTJDX1JBVEUxTSB8fFwKLQkgcnhtY3MgPT0gREVTQzkyQ19SQVRFMk0gfHxcCi0JIHJ4bWNzID09IERFU0M5MkNfUkFURTVfNU0gfHxcCi0JIHJ4bWNzID09IERFU0M5MkNfUkFURTExTSkKKwkocnhtY3MgPT0gREVTQ19SQVRFMU0gfHxcCisJIHJ4bWNzID09IERFU0NfUkFURTJNIHx8XAorCSByeG1jcyA9PSBERVNDX1JBVEU1XzVNIHx8XAorCSByeG1jcyA9PSBERVNDX1JBVEUxMU0pCiAKICNkZWZpbmUgSVNfTElUVExFX0VORElBTgkxCiAKQEAgLTgyOSw3ICs4MzEsNyBAQAogCQkJICAgICB1OCBxdWV1ZV9pbmRleCk7CiB1MTYJcnRsOTJlZV9yeF9kZXNjX2J1ZmZfcmVtYWluZWRfY250KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCQkgIHU4IHF1ZXVlX2luZGV4KTsKLXZvaWQgcnRsOTJlZV9nZXRfYXZhaWxhYmxlX2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IHF1ZXVlX2luZGV4KTsKK3UxNiBydGw5MmVlX2dldF9hdmFpbGFibGVfZGVzYyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggcXVldWVfaW5kZXgpOwogdm9pZCBydGw5MmVlX3ByZV9maWxsX3R4X2JkX2Rlc2Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJIHU4ICp0eF9iZF9kZXNjLCB1OCAqZGVzYywgdTggcXVldWVfaW5kZXgsCiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGRtYV9hZGRyX3QgYWRkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9kZWYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2RlZi5oCmluZGV4IDZlN2E3MGI0Li5lZjg3YzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9kZWYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9kZWYuaApAQCAtNDUwLDEwICs0NTAsMTAgQEAKIAlTSElGVF9BTkRfTUFTS19MRShfX3BkZXNjICsgMjQsIDAsIDMyKQogCiAjZGVmaW5lIFNFX1JYX0hBTF9JU19DQ0tfUkFURShfcGRlc2MpXAotCShHRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKF9wZGVzYykgPT0gREVTQzkyX1JBVEUxTSB8fAlcCi0JIEdFVF9SWF9TVEFUVVNfREVTQ19SWF9NQ1MoX3BkZXNjKSA9PSBERVNDOTJfUkFURTJNIHx8CVwKLQkgR0VUX1JYX1NUQVRVU19ERVNDX1JYX01DUyhfcGRlc2MpID09IERFU0M5Ml9SQVRFNV81TSB8fFwKLQkgR0VUX1JYX1NUQVRVU19ERVNDX1JYX01DUyhfcGRlc2MpID09IERFU0M5Ml9SQVRFMTFNKQorCShHRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKF9wZGVzYykgPT0gREVTQ19SQVRFMU0gfHwJXAorCSBHRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKF9wZGVzYykgPT0gREVTQ19SQVRFMk0gfHwJXAorCSBHRVRfUlhfU1RBVFVTX0RFU0NfUlhfTUNTKF9wZGVzYykgPT0gREVTQ19SQVRFNV81TSB8fFwKKwkgR0VUX1JYX1NUQVRVU19ERVNDX1JYX01DUyhfcGRlc2MpID09IERFU0NfUkFURTExTSkKIAogZW51bSByZl9vcHR5cGUgewogCVJGX09QX0JZX1NXXzNXSVJFID0gMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2RtLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9kbS5jCmluZGV4IGIzYTJkNWUuLjU3NTk4MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2RtLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvZG0uYwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiLi4vd2lmaS5oIgogI2luY2x1ZGUgIi4uL2Jhc2UuaCIKKyNpbmNsdWRlICIuLi9jb3JlLmgiCiAjaW5jbHVkZSAicmVnLmgiCiAjaW5jbHVkZSAiZGVmLmgiCiAjaW5jbHVkZSAicGh5LmgiCkBAIC00NjksNyArNDcwLDcgQEAKIAkJCWlmIChkaWd0YWJsZS0+YmFja29mZl9lbmFibGVfZmxhZykKIAkJCQlydGw5MnNfYmFja29mZl9lbmFibGVfZmxhZyhodyk7CiAJCQllbHNlCi0JCQkJZGlndGFibGUtPmJhY2tfdmFsID0gRE1fRElHX0JBQ0tPRkY7CisJCQkJZGlndGFibGUtPmJhY2tfdmFsID0gRE1fRElHX0JBQ0tPRkZfTUFYOwogCiAJCQlpZiAoKGRpZ3RhYmxlLT5yc3NpX3ZhbCArIDEwIC0gZGlndGFibGUtPmJhY2tfdmFsKSA+CiAJCQkJZGlndGFibGUtPnJ4X2dhaW5fbWF4KQpAQCAtNTAzLDcgKzUwNCw3IEBACiAJCWRpZ3RhYmxlLT5kaWdfZXh0X3BvcnRfc3RhZ2UgPSBESUdfRVhUX1BPUlRfU1RBR0VfTUFYOwogCQlydGw5MnNfcGh5X3NldF9md19jbWQoaHcsIEZXX0NNRF9ESUdfRU5BQkxFKTsKIAotCQlkaWd0YWJsZS0+YmFja192YWwgPSBETV9ESUdfQkFDS09GRjsKKwkJZGlndGFibGUtPmJhY2tfdmFsID0gRE1fRElHX0JBQ0tPRkZfTUFYOwogCQlkaWd0YWJsZS0+Y3VyX2lndmFsdWUgPSBydGxwcml2LT5waHkuZGVmYXVsdF9pbml0aWFsZ2FpblswXTsKIAkJZGlndGFibGUtPnByZV9pZ3ZhbHVlID0gMDsKIAkJcmV0dXJuOwpAQCAtNjkxLDcgKzY5Miw3IEBACiAKIAkvKiBmb3IgZGlnIGRlYnVnIHJzc2kgdmFsdWUgKi8KIAlkaWd0YWJsZS0+cnNzaV92YWwgPSA1MDsKLQlkaWd0YWJsZS0+YmFja192YWwgPSBETV9ESUdfQkFDS09GRjsKKwlkaWd0YWJsZS0+YmFja192YWwgPSBETV9ESUdfQkFDS09GRl9NQVg7CiAJZGlndGFibGUtPnJ4X2dhaW5fbWF4ID0gRE1fRElHX01BWDsKIAogCWRpZ3RhYmxlLT5yeF9nYWluX21pbiA9IERNX0RJR19NSU47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9kbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvZG0uaAppbmRleCAyZTkwNTJjLi5kZTZhYzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9kbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL2RtLmgKQEAgLTU0LDI0ICs1NCw2IEBACiAJRE1fU1RBX0RJR19NQVgKIH07CiAKLWVudW0gZG1fZGlnX2Nvbm5lY3QgewotCURJR19TVEFfRElTQ09OTkVDVCA9IDAsCi0JRElHX1NUQV9DT05ORUNUID0gMSwKLQlESUdfU1RBX0JFRk9SRV9DT05ORUNUID0gMiwKLQlESUdfQVBfRElTQ09OTkVDVCA9IDMsCi0JRElHX0FQX0NPTk5FQ1QgPSA0LAotCURJR19BUF9BRERfU1RBVElPTiA9IDUsCi0JRElHX0NPTk5FQ1RfTUFYCi19OwotCi1lbnVtIGRtX2RpZ19leHRfcG9ydF9hbGcgewotCURJR19FWFRfUE9SVF9TVEFHRV8wID0gMCwKLQlESUdfRVhUX1BPUlRfU1RBR0VfMSA9IDEsCi0JRElHX0VYVF9QT1JUX1NUQUdFXzIgPSAyLAotCURJR19FWFRfUE9SVF9TVEFHRV8zID0gMywKLQlESUdfRVhUX1BPUlRfU1RBR0VfTUFYID0gNCwKLX07Ci0KIGVudW0gZG1fcmF0cl9zdGEgewogCURNX1JBVFJfU1RBX0hJR0ggPSAwLAogCURNX1JBVFJfU1RBX01JRERMRUhJR0ggPSAxLApAQCAtOTksMjIgKzgxLDEyIEBACiAjZGVmaW5lCVRYX1BPV0VSX05FQVJfRklFTERfVEhSRVNIX0xWTDIJNzQKICNkZWZpbmUJVFhfUE9XRVJfTkVBUl9GSUVMRF9USFJFU0hfTFZMMQk2NwogCi0jZGVmaW5lIERNX0RJR19USFJFU0hfSElHSAkJNDAKLSNkZWZpbmUgRE1fRElHX1RIUkVTSF9MT1cJCTM1Ci0jZGVmaW5lCURNX0ZBTFNFQUxBUk1fVEhSRVNIX0xPVwk0MAotI2RlZmluZQlETV9GQUxTRUFMQVJNX1RIUkVTSF9ISUdICTEwMDAKICNkZWZpbmUJRE1fRElHX0hJR0hfUFdSX1RIUkVTSF9ISUdICTc1CiAjZGVmaW5lCURNX0RJR19ISUdIX1BXUl9USFJFU0hfTE9XCTcwCi0jZGVmaW5lCURNX0RJR19CQUNLT0ZGCQkJMTIKLSNkZWZpbmUJRE1fRElHX01BWAkJCTB4M2UKLSNkZWZpbmUJRE1fRElHX01JTgkJCTB4MWMKICNkZWZpbmUJRE1fRElHX01JTl9OZXRjb3JlCQkweDEyCi0jZGVmaW5lCURNX0RJR19CQUNLT0ZGX01BWAkJMTIKLSNkZWZpbmUJRE1fRElHX0JBQ0tPRkZfTUlOCQktNAogCiB2b2lkIHJ0bDkyc19kbV93YXRjaGRvZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiB2b2lkIHJ0bDkyc19kbV9pbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgcnRsOTJzX2RtX2luaXRfZWRjYV90dXJibyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAKICNlbmRpZgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9zdy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2Uvc3cuYwppbmRleCBmYjAwMzg2Li5lMWZkMjdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDgxOTJzZS9zdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3N3LmMKQEAgLTM4MywyMSArMzgzLDIxIEBACiAJLm1hcHNbUlRMX0lNUl9ST0tdID0gSU1SX1JPSywKIAkubWFwc1tSVExfSUJTU19JTlRfTUFTS1NdID0gKElNUl9CQ05JTlQgfCBJTVJfVEJET0sgfCBJTVJfVEJERVIpLAogCi0JLm1hcHNbUlRMX1JDX0NDS19SQVRFMU1dID0gREVTQzkyX1JBVEUxTSwKLQkubWFwc1tSVExfUkNfQ0NLX1JBVEUyTV0gPSBERVNDOTJfUkFURTJNLAotCS5tYXBzW1JUTF9SQ19DQ0tfUkFURTVfNU1dID0gREVTQzkyX1JBVEU1XzVNLAotCS5tYXBzW1JUTF9SQ19DQ0tfUkFURTExTV0gPSBERVNDOTJfUkFURTExTSwKLQkubWFwc1tSVExfUkNfT0ZETV9SQVRFNk1dID0gREVTQzkyX1JBVEU2TSwKLQkubWFwc1tSVExfUkNfT0ZETV9SQVRFOU1dID0gREVTQzkyX1JBVEU5TSwKLQkubWFwc1tSVExfUkNfT0ZETV9SQVRFMTJNXSA9IERFU0M5Ml9SQVRFMTJNLAotCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUxOE1dID0gREVTQzkyX1JBVEUxOE0sCi0JLm1hcHNbUlRMX1JDX09GRE1fUkFURTI0TV0gPSBERVNDOTJfUkFURTI0TSwKLQkubWFwc1tSVExfUkNfT0ZETV9SQVRFMzZNXSA9IERFU0M5Ml9SQVRFMzZNLAotCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU0OE1dID0gREVTQzkyX1JBVEU0OE0sCi0JLm1hcHNbUlRMX1JDX09GRE1fUkFURTU0TV0gPSBERVNDOTJfUkFURTU0TSwKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEUxTV0gPSBERVNDX1JBVEUxTSwKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEUyTV0gPSBERVNDX1JBVEUyTSwKKwkubWFwc1tSVExfUkNfQ0NLX1JBVEU1XzVNXSA9IERFU0NfUkFURTVfNU0sCisJLm1hcHNbUlRMX1JDX0NDS19SQVRFMTFNXSA9IERFU0NfUkFURTExTSwKKwkubWFwc1tSVExfUkNfT0ZETV9SQVRFNk1dID0gREVTQ19SQVRFNk0sCisJLm1hcHNbUlRMX1JDX09GRE1fUkFURTlNXSA9IERFU0NfUkFURTlNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUxMk1dID0gREVTQ19SQVRFMTJNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUxOE1dID0gREVTQ19SQVRFMThNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUyNE1dID0gREVTQ19SQVRFMjRNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEUzNk1dID0gREVTQ19SQVRFMzZNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU0OE1dID0gREVTQ19SQVRFNDhNLAorCS5tYXBzW1JUTF9SQ19PRkRNX1JBVEU1NE1dID0gREVTQ19SQVRFNTRNLAogCi0JLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1M3XSA9IERFU0M5Ml9SQVRFTUNTNywKLQkubWFwc1tSVExfUkNfSFRfUkFURU1DUzE1XSA9IERFU0M5Ml9SQVRFTUNTMTUsCisJLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1M3XSA9IERFU0NfUkFURU1DUzcsCisJLm1hcHNbUlRMX1JDX0hUX1JBVEVNQ1MxNV0gPSBERVNDX1JBVEVNQ1MxNSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydGw5MnNlX3BjaV9pZHNbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODE5MnNlL3RyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvdHJ4LmMKaW5kZXggNjcyZmQzYi4uMTI1YjI5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvdHJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4MTkyc2UvdHJ4LmMKQEAgLTE5MSw4ICsxOTEsOCBAQAogCQlwc3RhdHMtPnJ4cG93ZXIgPSByeF9wd3JfYWxsOwogCQlwc3RhdHMtPnJlY3ZzaWduYWxwb3dlciA9IHJ4X3B3cl9hbGw7CiAKLQkJaWYgKHBzdGF0cy0+aXNfaHQgJiYgcHN0YXRzLT5yYXRlID49IERFU0M5Ml9SQVRFTUNTOCAmJgotCQkgICAgcHN0YXRzLT5yYXRlIDw9IERFU0M5Ml9SQVRFTUNTMTUpCisJCWlmIChwc3RhdHMtPmlzX2h0ICYmIHBzdGF0cy0+cmF0ZSA+PSBERVNDX1JBVEVNQ1M4ICYmCisJCSAgICBwc3RhdHMtPnJhdGUgPD0gREVTQ19SQVRFTUNTMTUpCiAJCQltYXhfc3BhdGlhbF9zdHJlYW0gPSAyOwogCQllbHNlCiAJCQltYXhfc3BhdGlhbF9zdHJlYW0gPSAxOwpAQCAtMjY0LDcgKzI2NCw2IEBACiAJc3RydWN0IHJ4X2Z3aW5mbyAqcF9kcnZpbmZvOwogCXUzMiBwaHlzdGF0dXMgPSAodTMyKUdFVF9SWF9TVEFUVVNfREVTQ19QSFlfU1RBVFVTKHBkZXNjKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwotCWJvb2wgZmlyc3RfYW1wZHUgPSBmYWxzZTsKIAogCXN0YXRzLT5sZW5ndGggPSAodTE2KUdFVF9SWF9TVEFUVVNfREVTQ19QS1RfTEVOKHBkZXNjKTsKIAlzdGF0cy0+cnhfZHJ2aW5mb19zaXplID0gKHU4KUdFVF9SWF9TVEFUVVNfREVTQ19EUlZJTkZPX1NJWkUocGRlc2MpICogODsKQEAgLTMxOSw4ICszMTgsOCBAQAogCQkJcnhfc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfREVDUllQVEVEOwogCX0KIAotCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSBydGx3aWZpX3JhdGVfbWFwcGluZyhodywKLQkJCSAgICAgIHN0YXRzLT5pc19odCwgc3RhdHMtPnJhdGUsIGZpcnN0X2FtcGR1KTsKKwlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gcnRsd2lmaV9yYXRlX21hcHBpbmcoaHcsIHN0YXRzLT5pc19odCwKKwkJCQkJCSAgIGZhbHNlLCBzdGF0cy0+cmF0ZSk7CiAKIAlyeF9zdGF0dXMtPm1hY3RpbWUgPSBzdGF0cy0+dGltZXN0YW1wX2xvdzsKIAlpZiAocGh5c3RhdHVzKSB7CkBAIC0zOTQsMTQgKzM5MywxNCBAQAogCQlTRVRfVFhfREVTQ19SU1ZEX01BQ0lEKHBkZXNjLCByZXNlcnZlZF9tYWNpZCk7CiAKIAkJU0VUX1RYX0RFU0NfVFhIVChwZGVzYywgKChwdGNiX2Rlc2MtPmh3X3JhdGUgPj0KLQkJCQkgREVTQzkyX1JBVEVNQ1MwKSA/IDEgOiAwKSk7CisJCQkJIERFU0NfUkFURU1DUzApID8gMSA6IDApKTsKIAogCQlpZiAocnRsaGFsLT52ZXJzaW9uID09IFZFUlNJT05fODE5MlNfQUNVVCkgewotCQkJaWYgKHB0Y2JfZGVzYy0+aHdfcmF0ZSA9PSBERVNDOTJfUkFURTFNIHx8Ci0JCQkJcHRjYl9kZXNjLT5od19yYXRlICA9PSBERVNDOTJfUkFURTJNIHx8Ci0JCQkJcHRjYl9kZXNjLT5od19yYXRlID09IERFU0M5Ml9SQVRFNV81TSB8fAotCQkJCXB0Y2JfZGVzYy0+aHdfcmF0ZSA9PSBERVNDOTJfUkFURTExTSkgewotCQkJCXB0Y2JfZGVzYy0+aHdfcmF0ZSA9IERFU0M5Ml9SQVRFMTJNOworCQkJaWYgKHB0Y2JfZGVzYy0+aHdfcmF0ZSA9PSBERVNDX1JBVEUxTSB8fAorCQkJICAgIHB0Y2JfZGVzYy0+aHdfcmF0ZSAgPT0gREVTQ19SQVRFMk0gfHwKKwkJCSAgICBwdGNiX2Rlc2MtPmh3X3JhdGUgPT0gREVTQ19SQVRFNV81TSB8fAorCQkJICAgIHB0Y2JfZGVzYy0+aHdfcmF0ZSA9PSBERVNDX1JBVEUxMU0pIHsKKwkJCQlwdGNiX2Rlc2MtPmh3X3JhdGUgPSBERVNDX1JBVEUxMk07CiAJCQl9CiAJCX0KIApAQCAtNDMwLDcgKzQyOSw3IEBACiAJCVNFVF9UWF9ERVNDX1JUU19CQU5EV0lEVEgocGRlc2MsIDApOwogCQlTRVRfVFhfREVTQ19SVFNfU1VCX0NBUlJJRVIocGRlc2MsIHB0Y2JfZGVzYy0+cnRzX3NjKTsKIAkJU0VUX1RYX0RFU0NfUlRTX1NIT1JUKHBkZXNjLCAoKHB0Y2JfZGVzYy0+cnRzX3JhdGUgPD0KLQkJICAgICAgIERFU0M5Ml9SQVRFNTRNKSA/CisJCSAgICAgICBERVNDX1JBVEU1NE0pID8KIAkJICAgICAgIChwdGNiX2Rlc2MtPnJ0c191c2Vfc2hvcnRwcmVhbWJsZSA/IDEgOiAwKQogCQkgICAgICAgOiAocHRjYl9kZXNjLT5ydHNfdXNlX3Nob3J0Z2kgPyAxIDogMCkpKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4NzIzYWUvZG0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2FlL2RtLmMKaW5kZXggYTBlODY5Mi4uNGMxYzk2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4NzIzYWUvZG0uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg3MjNhZS9kbS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiLi4vd2lmaS5oIgogI2luY2x1ZGUgIi4uL2Jhc2UuaCIKICNpbmNsdWRlICIuLi9wY2kuaCIKKyNpbmNsdWRlICIuLi9jb3JlLmgiCiAjaW5jbHVkZSAicmVnLmgiCiAjaW5jbHVkZSAiZGVmLmgiCiAjaW5jbHVkZSAicGh5LmgiCkBAIC0xNDYsMzEgKzE0Nyw2IEBACiAJezB4MDksIDB4MDgsIDB4MDcsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9CiB9OwogCi1zdGF0aWMgdm9pZCBydGw4NzIzZV9kbV9kaWdpbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKLQlzdHJ1Y3QgZGlnX3QgKmRtX2RpZ3RhYmxlID0gJnJ0bHByaXYtPmRtX2RpZ3RhYmxlOwotCi0JZG1fZGlndGFibGUtPmRpZ19lbmFibGVfZmxhZyA9IHRydWU7Ci0JZG1fZGlndGFibGUtPmRpZ19leHRfcG9ydF9zdGFnZSA9IERJR19FWFRfUE9SVF9TVEFHRV9NQVg7Ci0JZG1fZGlndGFibGUtPmN1cl9pZ3ZhbHVlID0gMHgyMDsKLQlkbV9kaWd0YWJsZS0+cHJlX2lndmFsdWUgPSAweDA7Ci0JZG1fZGlndGFibGUtPmN1cnN0YV9jc3RhdGUgPSBESUdfU1RBX0RJU0NPTk5FQ1Q7Ci0JZG1fZGlndGFibGUtPnByZXN0YV9jc3RhdGUgPSBESUdfU1RBX0RJU0NPTk5FQ1Q7Ci0JZG1fZGlndGFibGUtPmN1cm11bHRpc3RhX2NzdGF0ZSA9IERJR19NVUxUSVNUQV9ESVNDT05ORUNUOwotCWRtX2RpZ3RhYmxlLT5yc3NpX2xvd3RocmVzaCA9IERNX0RJR19USFJFU0hfTE9XOwotCWRtX2RpZ3RhYmxlLT5yc3NpX2hpZ2h0aHJlc2ggPSBETV9ESUdfVEhSRVNIX0hJR0g7Ci0JZG1fZGlndGFibGUtPmZhX2xvd3RocmVzaCA9IERNX0ZBTFNFQUxBUk1fVEhSRVNIX0xPVzsKLQlkbV9kaWd0YWJsZS0+ZmFfaGlnaHRocmVzaCA9IERNX0ZBTFNFQUxBUk1fVEhSRVNIX0hJR0g7Ci0JZG1fZGlndGFibGUtPnJ4X2dhaW5fbWF4ID0gRE1fRElHX01BWDsKLQlkbV9kaWd0YWJsZS0+cnhfZ2Fpbl9taW4gPSBETV9ESUdfTUlOOwotCWRtX2RpZ3RhYmxlLT5iYWNrX3ZhbCA9IERNX0RJR19CQUNLT0ZGX0RFRkFVTFQ7Ci0JZG1fZGlndGFibGUtPmJhY2tfcmFuZ2VfbWF4ID0gRE1fRElHX0JBQ0tPRkZfTUFYOwotCWRtX2RpZ3RhYmxlLT5iYWNrX3JhbmdlX21pbiA9IERNX0RJR19CQUNLT0ZGX01JTjsKLQlkbV9kaWd0YWJsZS0+cHJlX2Nja19wZF9zdGF0ZSA9IENDS19QRF9TVEFHRV9NQVg7Ci0JZG1fZGlndGFibGUtPmN1cl9jY2tfcGRfc3RhdGUgPSBDQ0tfUERfU1RBR0VfTUFYOwotfQotCiBzdGF0aWMgdTggcnRsODcyM2VfZG1faW5pdGlhbF9nYWluX21pbl9wd2RiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKQEAgLTM5NSwzMCArMzcxLDMwIEBACiAJaWYgKGRtX2RpZ3RhYmxlLT5jdXJzdGFfY3N0YXRlID09IERJR19TVEFfQ09OTkVDVCkgewogCQlkbV9kaWd0YWJsZS0+cnNzaV92YWxfbWluID0gcnRsODcyM2VfZG1faW5pdGlhbF9nYWluX21pbl9wd2RiKGh3KTsKIAotCQlpZiAoZG1fZGlndGFibGUtPnByZV9jY2tfcGRfc3RhdGUgPT0gQ0NLX1BEX1NUQUdFX0xvd1Jzc2kpIHsKKwkJaWYgKGRtX2RpZ3RhYmxlLT5wcmVfY2NrX3BkX3N0YXRlID09IENDS19QRF9TVEFHRV9MT1dSU1NJKSB7CiAJCQlpZiAoZG1fZGlndGFibGUtPnJzc2lfdmFsX21pbiA8PSAyNSkKIAkJCQlkbV9kaWd0YWJsZS0+Y3VyX2Nja19wZF9zdGF0ZSA9Ci0JCQkJICAgIENDS19QRF9TVEFHRV9Mb3dSc3NpOworCQkJCSAgICBDQ0tfUERfU1RBR0VfTE9XUlNTSTsKIAkJCWVsc2UKIAkJCQlkbV9kaWd0YWJsZS0+Y3VyX2Nja19wZF9zdGF0ZSA9Ci0JCQkJICAgIENDS19QRF9TVEFHRV9IaWdoUnNzaTsKKwkJCQkgICAgQ0NLX1BEX1NUQUdFX0hJR0hSU1NJOwogCQl9IGVsc2UgewogCQkJaWYgKGRtX2RpZ3RhYmxlLT5yc3NpX3ZhbF9taW4gPD0gMjApCiAJCQkJZG1fZGlndGFibGUtPmN1cl9jY2tfcGRfc3RhdGUgPQotCQkJCSAgICBDQ0tfUERfU1RBR0VfTG93UnNzaTsKKwkJCQkgICAgQ0NLX1BEX1NUQUdFX0xPV1JTU0k7CiAJCQllbHNlCiAJCQkJZG1fZGlndGFibGUtPmN1cl9jY2tfcGRfc3RhdGUgPQotCQkJCSAgICBDQ0tfUERfU1RBR0VfSGlnaFJzc2k7CisJCQkJICAgIENDS19QRF9TVEFHRV9ISUdIUlNTSTsKIAkJfQogCX0gZWxzZSB7CiAJCWRtX2RpZ3RhYmxlLT5jdXJfY2NrX3BkX3N0YXRlID0gQ0NLX1BEX1NUQUdFX01BWDsKIAl9CiAKIAlpZiAoZG1fZGlndGFibGUtPnByZV9jY2tfcGRfc3RhdGUgIT0gZG1fZGlndGFibGUtPmN1cl9jY2tfcGRfc3RhdGUpIHsKLQkJaWYgKGRtX2RpZ3RhYmxlLT5jdXJfY2NrX3BkX3N0YXRlID09IENDS19QRF9TVEFHRV9Mb3dSc3NpKSB7CisJCWlmIChkbV9kaWd0YWJsZS0+Y3VyX2Nja19wZF9zdGF0ZSA9PSBDQ0tfUERfU1RBR0VfTE9XUlNTSSkgewogCQkJaWYgKHJ0bHByaXYtPmZhbHNlYWxtX2NudC5jbnRfY2NrX2ZhaWwgPiA4MDApCiAJCQkJZG1fZGlndGFibGUtPmN1cl9jY2tfZmFfc3RhdGUgPQotCQkJCSAgICBDQ0tfRkFfU1RBR0VfSGlnaDsKKwkJCQkgICAgQ0NLX0ZBX1NUQUdFX0hJR0g7CiAJCQllbHNlCiAJCQkJZG1fZGlndGFibGUtPmN1cl9jY2tfZmFfc3RhdGUgPQogCQkJCSAgICBDQ0tfRkFfU1RBR0VfTE9XOwpAQCAtODE4LDcgKzc5NCw3IEBACiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCiAJcnRscHJpdi0+ZG0uZG1fdHlwZSA9IERNX1RZUEVfQllEUklWRVI7Ci0JcnRsODcyM2VfZG1fZGlnaW5pdChodyk7CisJcnRsX2RtX2RpZ2luaXQoaHcsIDB4MjApOwogCXJ0bDg3MjNfZG1faW5pdF9keW5hbWljX3R4cG93ZXIoaHcpOwogCXJ0bDg3MjNfZG1faW5pdF9lZGNhX3R1cmJvKGh3KTsKIAlydGw4NzIzZV9kbV9pbml0X3JhdGVfYWRhcHRpdmVfbWFzayhodyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg3MjNhZS9kbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4NzIzYWUvZG0uaAppbmRleCA2ZmEwZmViLi41NzExMTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg3MjNhZS9kbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2FlL2RtLmgKQEAgLTQyLDI1ICs0MiwxMiBAQAogI2RlZmluZSBCV19BVVRPX1NXSVRDSF9ISUdIX0xPVwkJCTI1CiAjZGVmaW5lIEJXX0FVVE9fU1dJVENIX0xPV19ISUdICQkJMzAKIAotI2RlZmluZSBETV9ESUdfVEhSRVNIX0hJR0gJCQk0MAotI2RlZmluZSBETV9ESUdfVEhSRVNIX0xPVwkJCTM1Ci0KLSNkZWZpbmUgRE1fRkFMU0VBTEFSTV9USFJFU0hfTE9XCQk0MDAKLSNkZWZpbmUgRE1fRkFMU0VBTEFSTV9USFJFU0hfSElHSAkJMTAwMAotCi0jZGVmaW5lIERNX0RJR19NQVgJCQkJMHgzZQotI2RlZmluZSBETV9ESUdfTUlOCQkJCTB4MWUKLQogI2RlZmluZSBETV9ESUdfRkFfVVBQRVIJCQkJMHgzMgogI2RlZmluZSBETV9ESUdfRkFfTE9XRVIJCQkJMHgyMAogI2RlZmluZSBETV9ESUdfRkFfVEgwCQkJCTB4MjAKICNkZWZpbmUgRE1fRElHX0ZBX1RIMQkJCQkweDEwMAogI2RlZmluZSBETV9ESUdfRkFfVEgyCQkJCTB4MjAwCiAKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfTUFYCQkJMTIKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfTUlOCQkJLTQKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfREVGQVVMVAkJCTEwCi0KICNkZWZpbmUgUlhQQVRIU0VMRUNUSU9OX1NTX1RIX0xPVwkJMzAKICNkZWZpbmUgUlhQQVRIU0VMRUNUSU9OX0RJRkZfVEgJCQkxOAogCkBAIC0xMDgsMTQgKzk1LDYgQEAKIAlESUdfT1BfVFlQRV9NQVgKIH07CiAKLWVudW0gdGFnX2Nja19wYWNrZXRfZGV0ZWN0aW9uX3RocmVzaG9sZF90eXBlX2RlZmluaXRpb24gewotCUNDS19QRF9TVEFHRV9Mb3dSc3NpID0gMCwKLQlDQ0tfUERfU1RBR0VfSGlnaFJzc2kgPSAxLAotCUNDS19GQV9TVEFHRV9MT1cgPSAyLAotCUNDS19GQV9TVEFHRV9IaWdoID0gMywKLQlDQ0tfUERfU1RBR0VfTUFYID0gNCwKLX07Ci0KIGVudW0gZG1fMXJfY2NhX2UgewogCUNDQV8xUiA9IDAsCiAJQ0NBXzJSID0gMSwKQEAgLTEzNCwyMyArMTEzLDYgQEAKIAlBTlNfQU5URU5OQV9NQVggPSAzLAogfTsKIAotZW51bSBkbV9kaWdfZXh0X3BvcnRfYWxnX2UgewotCURJR19FWFRfUE9SVF9TVEFHRV8wID0gMCwKLQlESUdfRVhUX1BPUlRfU1RBR0VfMSA9IDEsCi0JRElHX0VYVF9QT1JUX1NUQUdFXzIgPSAyLAotCURJR19FWFRfUE9SVF9TVEFHRV8zID0gMywKLQlESUdfRVhUX1BPUlRfU1RBR0VfTUFYID0gNCwKLX07Ci0KLWVudW0gZG1fZGlnX2Nvbm5lY3RfZSB7Ci0JRElHX1NUQV9ESVNDT05ORUNUID0gMCwKLQlESUdfU1RBX0NPTk5FQ1QgPSAxLAotCURJR19TVEFfQkVGT1JFX0NPTk5FQ1QgPSAyLAotCURJR19NVUxUSVNUQV9ESVNDT05ORUNUID0gMywKLQlESUdfTVVMVElTVEFfQ09OTkVDVCA9IDQsCi0JRElHX0NPTk5FQ1RfTUFYCi19OwotCiAjZGVmaW5lIEJUX1JTU0lfU1RBVEVfTk9STUFMX1BPV0VSICAgICAgQklUX09GRlNFVF9MRU5fTUFTS18zMigwLCAxKQogI2RlZmluZSBCVF9SU1NJX1NUQVRFX0FNRFBVX09GRiAgICAgICAgIEJJVF9PRkZTRVRfTEVOX01BU0tfMzIoMSwgMSkKICNkZWZpbmUgQlRfUlNTSV9TVEFURV9TUEVDSUFMX0xPVyAgICAgICBCSVRfT0ZGU0VUX0xFTl9NQVNLXzMyKDIsIDEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg3MjNhZS90cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2FlL3RyeC5jCmluZGV4IGQzNzJjY2EuLjJmN2MxNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2FlL3RyeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2FlL3RyeC5jCkBAIC00NSwxNjQgKzQ1LDYgQEAKIAlyZXR1cm4gc2tiLT5wcmlvcml0eTsKIH0KIAotLyogbWFjODAyMTEncyByYXRlX2lkeCBpcyBsaWtlIHRoaXM6Ci0gKgotICogMi40RyBiYW5kOnJ4X3N0YXR1cy0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haCi0gKgotICogQi9HIHJhdGU6Ci0gKiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkgPSAwLAotICogREVTQzkyQ19SQVRFMU0tLT5ERVNDOTJDX1JBVEU1NE0gPT0+IGlkeCBpcyAwLS0+MTEsCi0gKgotICogTiByYXRlOgotICogKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpID0gMSwKLSAqIERFU0M5MkNfUkFURU1DUzAtLT5ERVNDOTJDX1JBVEVNQ1MxNSA9PT4gaWR4IGlzIDAtLT4xNQotICoKLSAqIDVHIGJhbmQ6cnhfc3RhdHVzLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFoKLSAqIEEgcmF0ZToKLSAqIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSA9IDAsCi0gKiBERVNDOTJDX1JBVEU2TS0tPkRFU0M5MkNfUkFURTU0TSA9PT4gaWR4IGlzIDAtLT43LAotICoKLSAqIE4gcmF0ZToKLSAqIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSA9IDEsCi0gKiBERVNDOTJDX1JBVEVNQ1MwLS0+REVTQzkyQ19SQVRFTUNTMTUgPT0+IGlkeCBpcyAwLS0+MTUKLSAqLwotc3RhdGljIGludCBfcnRsODcyM2VfcmF0ZV9tYXBwaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgYm9vbCBpc2h0LCB1OCBkZXNjX3JhdGUpCi17Ci0JaW50IHJhdGVfaWR4OwotCi0JaWYgKCFpc2h0KSB7Ci0JCWlmIChJRUVFODAyMTFfQkFORF8yR0haID09IGh3LT5jb25mLmNoYW5kZWYuY2hhbi0+YmFuZCkgewotCQkJc3dpdGNoIChkZXNjX3JhdGUpIHsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMU06Ci0JCQkJcmF0ZV9pZHggPSAwOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEUyTToKLQkJCQlyYXRlX2lkeCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTVfNU06Ci0JCQkJcmF0ZV9pZHggPSAyOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEUxMU06Ci0JCQkJcmF0ZV9pZHggPSAzOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEU2TToKLQkJCQlyYXRlX2lkeCA9IDQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTlNOgotCQkJCXJhdGVfaWR4ID0gNTsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMTJNOgotCQkJCXJhdGVfaWR4ID0gNjsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMThNOgotCQkJCXJhdGVfaWR4ID0gNzsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMjRNOgotCQkJCXJhdGVfaWR4ID0gODsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMzZNOgotCQkJCXJhdGVfaWR4ID0gOTsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFNDhNOgotCQkJCXJhdGVfaWR4ID0gMTA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTU0TToKLQkJCQlyYXRlX2lkeCA9IDExOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlyYXRlX2lkeCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlzd2l0Y2ggKGRlc2NfcmF0ZSkgewotCQkJY2FzZSBERVNDOTJDX1JBVEU2TToKLQkJCQlyYXRlX2lkeCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTlNOgotCQkJCXJhdGVfaWR4ID0gMTsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMTJNOgotCQkJCXJhdGVfaWR4ID0gMjsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMThNOgotCQkJCXJhdGVfaWR4ID0gMzsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMjRNOgotCQkJCXJhdGVfaWR4ID0gNDsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFMzZNOgotCQkJCXJhdGVfaWR4ID0gNTsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFNDhNOgotCQkJCXJhdGVfaWR4ID0gNjsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFNTRNOgotCQkJCXJhdGVfaWR4ID0gNzsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmF0ZV9pZHggPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChkZXNjX3JhdGUpIHsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1MwOgotCQkJcmF0ZV9pZHggPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMToKLQkJCXJhdGVfaWR4ID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzI6Ci0JCQlyYXRlX2lkeCA9IDI7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1MzOgotCQkJcmF0ZV9pZHggPSAzOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTNDoKLQkJCXJhdGVfaWR4ID0gNDsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzU6Ci0JCQlyYXRlX2lkeCA9IDU7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1M2OgotCQkJcmF0ZV9pZHggPSA2OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTNzoKLQkJCXJhdGVfaWR4ID0gNzsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzg6Ci0JCQlyYXRlX2lkeCA9IDg7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1M5OgotCQkJcmF0ZV9pZHggPSA5OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMTA6Ci0JCQlyYXRlX2lkeCA9IDEwOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMTE6Ci0JCQlyYXRlX2lkeCA9IDExOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMTI6Ci0JCQlyYXRlX2lkeCA9IDEyOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMTM6Ci0JCQlyYXRlX2lkeCA9IDEzOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMTQ6Ci0JCQlyYXRlX2lkeCA9IDE0OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMTU6Ci0JCQlyYXRlX2lkeCA9IDE1OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyYXRlX2lkeCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gcmF0ZV9pZHg7Ci19Ci0KIHN0YXRpYyB2b2lkIF9ydGw4NzIzZV9xdWVyeV9yeHBoeXN0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJc3RydWN0IHJ0bF9zdGF0cyAqcHN0YXR1cywgdTggKnBkZXNjLAogCQkJCQlzdHJ1Y3QgcnhfZndpbmZvXzg3MjNlICpwX2RydmluZm8sCkBAIC01MDMsOCArMzQ1LDggQEAKIAkgKiBhcmUgdXNlIChSWF9GTEFHX0hUKQogCSAqIE5vdGljZTogdGhpcyBpcyBkaWZmIHdpdGggd2luZG93cyBkZWZpbmUKIAkgKi8KLQlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gX3J0bDg3MjNlX3JhdGVfbWFwcGluZyhodywKLQkJCQlzdGF0dXMtPmlzX2h0LCBzdGF0dXMtPnJhdGUpOworCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSBydGx3aWZpX3JhdGVfbWFwcGluZyhodywgc3RhdHVzLT5pc19odCwKKwkJCQkJCSAgIGZhbHNlLCBzdGF0dXMtPnJhdGUpOwogCiAJcnhfc3RhdHVzLT5tYWN0aW1lID0gc3RhdHVzLT50aW1lc3RhbXBfbG93OwogCWlmIChwaHlzdGF0dXMgPT0gdHJ1ZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4NzIzYmUvZG0uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2JlL2RtLmMKaW5kZXggZGQ3ZWI0My4uMjM2N2U4ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2JlL2RtLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4NzIzYmUvZG0uYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIi4uL3dpZmkuaCIKICNpbmNsdWRlICIuLi9iYXNlLmgiCiAjaW5jbHVkZSAiLi4vcGNpLmgiCisjaW5jbHVkZSAiLi4vY29yZS5oIgogI2luY2x1ZGUgInJlZy5oIgogI2luY2x1ZGUgImRlZi5oIgogI2luY2x1ZGUgInBoeS5oIgpAQCAtMjExLDM1ICsyMTIsNiBAQAogCQkocHdyX3ZhbCA8PCAxNikgfCAocHdyX3ZhbCA8PCAyNCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bDg3MjNiZV9kbV9kaWdpbml0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQotewotCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKLQlzdHJ1Y3QgZGlnX3QgKmRtX2RpZ3RhYmxlID0gJnJ0bHByaXYtPmRtX2RpZ3RhYmxlOwotCi0JZG1fZGlndGFibGUtPmRpZ19lbmFibGVfZmxhZyA9IHRydWU7Ci0JZG1fZGlndGFibGUtPmN1cl9pZ3ZhbHVlID0gcnRsX2dldF9iYnJlZyhodywgUk9GRE0wX1hBQUdDQ09SRTEsIDB4N2YpOwotCWRtX2RpZ3RhYmxlLT5yc3NpX2xvd3RocmVzaCA9IERNX0RJR19USFJFU0hfTE9XOwotCWRtX2RpZ3RhYmxlLT5yc3NpX2hpZ2h0aHJlc2ggPSBETV9ESUdfVEhSRVNIX0hJR0g7Ci0JZG1fZGlndGFibGUtPmZhX2xvd3RocmVzaCA9IERNX0ZBTFNFQUxBUk1fVEhSRVNIX0xPVzsKLQlkbV9kaWd0YWJsZS0+ZmFfaGlnaHRocmVzaCA9IERNX0ZBTFNFQUxBUk1fVEhSRVNIX0hJR0g7Ci0JZG1fZGlndGFibGUtPnJ4X2dhaW5fbWF4ID0gRE1fRElHX01BWDsKLQlkbV9kaWd0YWJsZS0+cnhfZ2Fpbl9taW4gPSBETV9ESUdfTUlOOwotCWRtX2RpZ3RhYmxlLT5iYWNrX3ZhbCA9IERNX0RJR19CQUNLT0ZGX0RFRkFVTFQ7Ci0JZG1fZGlndGFibGUtPmJhY2tfcmFuZ2VfbWF4ID0gRE1fRElHX0JBQ0tPRkZfTUFYOwotCWRtX2RpZ3RhYmxlLT5iYWNrX3JhbmdlX21pbiA9IERNX0RJR19CQUNLT0ZGX01JTjsKLQlkbV9kaWd0YWJsZS0+cHJlX2Nja19jY2FfdGhyZXMgPSAweGZmOwotCWRtX2RpZ3RhYmxlLT5jdXJfY2NrX2NjYV90aHJlcyA9IDB4ODM7Ci0JZG1fZGlndGFibGUtPmZvcmJpZGRlbl9pZ2kgPSBETV9ESUdfTUlOOwotCWRtX2RpZ3RhYmxlLT5sYXJnZV9mYV9oaXQgPSAwOwotCWRtX2RpZ3RhYmxlLT5yZWNvdmVyX2NudCA9IDA7Ci0JZG1fZGlndGFibGUtPmRpZ19keW5hbWljX21pbiA9IERNX0RJR19NSU47Ci0JZG1fZGlndGFibGUtPmRpZ19keW5hbWljX21pbl8xID0gRE1fRElHX01JTjsKLQlkbV9kaWd0YWJsZS0+bWVkaWFfY29ubmVjdF8wID0gZmFsc2U7Ci0JZG1fZGlndGFibGUtPm1lZGlhX2Nvbm5lY3RfMSA9IGZhbHNlOwotCXJ0bHByaXYtPmRtLmRtX2luaXRpYWxnYWluX2VuYWJsZSA9IHRydWU7Ci0JZG1fZGlndGFibGUtPmJ0MzBfY3VyX2lnaSA9IDB4MzI7Ci19Ci0KIHZvaWQgcnRsODcyM2JlX2RtX2luaXRfcmF0ZV9hZGFwdGl2ZV9tYXNrKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKQEAgLTI5Myw5ICsyNjUsMTAgQEAKIHZvaWQgcnRsODcyM2JlX2RtX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOworCXUzMiBjdXJfaWd2YWx1ZSA9IHJ0bF9nZXRfYmJyZWcoaHcsIFJPRkRNMF9YQUFHQ0NPUkUxLCAweDdmKTsKIAogCXJ0bHByaXYtPmRtLmRtX3R5cGUgPSBETV9UWVBFX0JZRFJJVkVSOwotCXJ0bDg3MjNiZV9kbV9kaWdpbml0KGh3KTsKKwlydGxfZG1fZGlnaW5pdChodywgY3VyX2lndmFsdWUpOwogCXJ0bDg3MjNiZV9kbV9pbml0X3JhdGVfYWRhcHRpdmVfbWFzayhodyk7CiAJcnRsODcyM19kbV9pbml0X2VkY2FfdHVyYm8oaHcpOwogCXJ0bDg3MjNfZG1faW5pdF9keW5hbWljX2JiX3Bvd2Vyc2F2aW5nKGh3KTsKQEAgLTQyNCw3ICszOTcsNyBAQAogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgZGlnX3QgKmRtX2RpZ3RhYmxlID0gJnJ0bHByaXYtPmRtX2RpZ3RhYmxlOwogCXN0cnVjdCBydGxfbWFjICptYWMgPSBydGxfbWFjKHJ0bF9wcml2KGh3KSk7Ci0JdTggZGlnX2R5bmFtaWNfbWluLCBkaWdfbWF4b2ZtaW47CisJdTggZGlnX21pbl8wLCBkaWdfbWF4b2ZtaW47CiAJYm9vbCBiZmlyc3Rjb25uZWN0LCBiZmlyc3RkaXNjb25uZWN0OwogCXU4IGRtX2RpZ19tYXgsIGRtX2RpZ19taW47CiAJdTggY3VycmVudF9pZ2kgPSBkbV9kaWd0YWJsZS0+Y3VyX2lndmFsdWU7CkBAIC00MzQsNyArNDA3LDcgQEAKIAlpZiAobWFjLT5hY3Rfc2Nhbm5pbmcpCiAJCXJldHVybjsKIAotCWRpZ19keW5hbWljX21pbiA9IGRtX2RpZ3RhYmxlLT5kaWdfZHluYW1pY19taW47CisJZGlnX21pbl8wID0gZG1fZGlndGFibGUtPmRpZ19taW5fMDsKIAliZmlyc3Rjb25uZWN0ID0gKG1hYy0+bGlua19zdGF0ZSA+PSBNQUM4MDIxMV9MSU5LRUQpICYmCiAJCQkhZG1fZGlndGFibGUtPm1lZGlhX2Nvbm5lY3RfMDsKIAliZmlyc3RkaXNjb25uZWN0ID0gKG1hYy0+bGlua19zdGF0ZSA8IE1BQzgwMjExX0xJTktFRCkgJiYKQEAgLTQ1NiwyMCArNDI5LDIwIEBACiAJCWlmIChydGxwcml2LT5kbS5vbmVfZW50cnlfb25seSkgewogCQkJb2Zmc2V0ID0gMTI7CiAJCQlpZiAoZG1fZGlndGFibGUtPnJzc2lfdmFsX21pbiAtIG9mZnNldCA8IGRtX2RpZ19taW4pCi0JCQkJZGlnX2R5bmFtaWNfbWluID0gZG1fZGlnX21pbjsKKwkJCQlkaWdfbWluXzAgPSBkbV9kaWdfbWluOwogCQkJZWxzZSBpZiAoZG1fZGlndGFibGUtPnJzc2lfdmFsX21pbiAtIG9mZnNldCA+CiAJCQkJCQkJZGlnX21heG9mbWluKQotCQkJCWRpZ19keW5hbWljX21pbiA9IGRpZ19tYXhvZm1pbjsKKwkJCQlkaWdfbWluXzAgPSBkaWdfbWF4b2ZtaW47CiAJCQllbHNlCi0JCQkJZGlnX2R5bmFtaWNfbWluID0KKwkJCQlkaWdfbWluXzAgPQogCQkJCQlkbV9kaWd0YWJsZS0+cnNzaV92YWxfbWluIC0gb2Zmc2V0OwogCQl9IGVsc2UgewotCQkJZGlnX2R5bmFtaWNfbWluID0gZG1fZGlnX21pbjsKKwkJCWRpZ19taW5fMCA9IGRtX2RpZ19taW47CiAJCX0KIAogCX0gZWxzZSB7CiAJCWRtX2RpZ3RhYmxlLT5yeF9nYWluX21heCA9IGRtX2RpZ19tYXg7Ci0JCWRpZ19keW5hbWljX21pbiA9IGRtX2RpZ19taW47CisJCWRpZ19taW5fMCA9IGRtX2RpZ19taW47CiAJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRElHLCBEQkdfTE9VRCwgIm5vIGxpbmtcbiIpOwogCX0KIApAQCAtNDk3LDExICs0NzAsMTEgQEAKIAkJfSBlbHNlIHsKIAkJCWlmIChkbV9kaWd0YWJsZS0+bGFyZ2VfZmFfaGl0IDwgMykgewogCQkJCWlmICgoZG1fZGlndGFibGUtPmZvcmJpZGRlbl9pZ2kgLSAxKSA8Ci0JCQkJICAgICBkaWdfZHluYW1pY19taW4pIHsKKwkJCQkgICAgIGRpZ19taW5fMCkgewogCQkJCQlkbV9kaWd0YWJsZS0+Zm9yYmlkZGVuX2lnaSA9Ci0JCQkJCQkJZGlnX2R5bmFtaWNfbWluOworCQkJCQkJCWRpZ19taW5fMDsKIAkJCQkJZG1fZGlndGFibGUtPnJ4X2dhaW5fbWluID0KLQkJCQkJCQlkaWdfZHluYW1pY19taW47CisJCQkJCQkJZGlnX21pbl8wOwogCQkJCX0gZWxzZSB7CiAJCQkJCWRtX2RpZ3RhYmxlLT5mb3JiaWRkZW5faWdpLS07CiAJCQkJCWRtX2RpZ3RhYmxlLT5yeF9nYWluX21pbiA9CkBAIC01NTIsNyArNTI1LDcgQEAKIAlydGw4NzIzYmVfZG1fd3JpdGVfZGlnKGh3LCBjdXJyZW50X2lnaSk7CiAJZG1fZGlndGFibGUtPm1lZGlhX2Nvbm5lY3RfMCA9CiAJCSgobWFjLT5saW5rX3N0YXRlID49IE1BQzgwMjExX0xJTktFRCkgPyB0cnVlIDogZmFsc2UpOwotCWRtX2RpZ3RhYmxlLT5kaWdfZHluYW1pY19taW4gPSBkaWdfZHluYW1pY19taW47CisJZG1fZGlndGFibGUtPmRpZ19taW5fMCA9IGRpZ19taW5fMDsKIH0KIAogc3RhdGljIHZvaWQgcnRsODcyM2JlX2RtX2ZhbHNlX2FsYXJtX2NvdW50ZXJfc3RhdGlzdGljcygKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2JlL2RtLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg3MjNiZS9kbS5oCmluZGV4IGU0YzBlOGEuLmY3NTJhMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2JlL2RtLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4NzIzYmUvZG0uaApAQCAtMTgwLDI4ICsxODAsMTIgQEAKICNkZWZpbmUgQldfQVVUT19TV0lUQ0hfSElHSF9MT1cJCQkyNQogI2RlZmluZSBCV19BVVRPX1NXSVRDSF9MT1dfSElHSAkJCTMwCiAKLSNkZWZpbmUgRE1fRElHX1RIUkVTSF9ISUdICQkJNDAKLSNkZWZpbmUgRE1fRElHX1RIUkVTSF9MT1cJCQkzNQotCi0jZGVmaW5lIERNX0ZBTFNFQUxBUk1fVEhSRVNIX0xPVwkJNDAwCi0jZGVmaW5lIERNX0ZBTFNFQUxBUk1fVEhSRVNIX0hJR0gJCTEwMDAKLQotI2RlZmluZSBETV9ESUdfTUFYCQkJCTB4M2UKLSNkZWZpbmUgRE1fRElHX01JTgkJCQkweDFlCi0KLSNkZWZpbmUgRE1fRElHX01BWF9BUAkJCQkweDMyCi0jZGVmaW5lIERNX0RJR19NSU5fQVAJCQkJMHgyMAotCiAjZGVmaW5lIERNX0RJR19GQV9VUFBFUgkJCQkweDNlCiAjZGVmaW5lIERNX0RJR19GQV9MT1dFUgkJCQkweDFlCiAjZGVmaW5lIERNX0RJR19GQV9USDAJCQkJMHgyMDAKICNkZWZpbmUgRE1fRElHX0ZBX1RIMQkJCQkweDMwMAogI2RlZmluZSBETV9ESUdfRkFfVEgyCQkJCTB4NDAwCiAKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfTUFYCQkJMTIKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfTUlOCQkJLTQKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfREVGQVVMVAkJCTEwCi0KICNkZWZpbmUgUlhQQVRIU0VMRUNUSU9OX1NTX1RIX0xPVwkJMzAKICNkZWZpbmUgUlhQQVRIU0VMRUNUSU9OX0RJRkZfVEgJCQkxOAogCkBAIC0yNTIsMjMgKzIzNiw2IEBACiAJQU5TX0FOVEVOTkFfTUFYCT0gMywKIH07CiAKLWVudW0gZG1fZGlnX2V4dF9wb3J0X2FsZ19lIHsKLQlESUdfRVhUX1BPUlRfU1RBR0VfMAk9IDAsCi0JRElHX0VYVF9QT1JUX1NUQUdFXzEJPSAxLAotCURJR19FWFRfUE9SVF9TVEFHRV8yCT0gMiwKLQlESUdfRVhUX1BPUlRfU1RBR0VfMwk9IDMsCi0JRElHX0VYVF9QT1JUX1NUQUdFX01BWAk9IDQsCi19OwotCi1lbnVtIGRtX2RpZ19jb25uZWN0X2UgewotCURJR19TVEFfRElTQ09OTkVDVAk9IDAsCi0JRElHX1NUQV9DT05ORUNUCQk9IDEsCi0JRElHX1NUQV9CRUZPUkVfQ09OTkVDVAk9IDIsCi0JRElHX01VTFRJU1RBX0RJU0NPTk5FQ1QJPSAzLAotCURJR19NVUxUSVNUQV9DT05ORUNUCT0gNCwKLQlESUdfQ09OTkVDVF9NQVgKLX07Ci0KIGVudW0gcHdyX3RyYWNrX2NvbnRyb2xfbWV0aG9kIHsKIAlCQlNXSU5HLAogCVRYQUdDCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg3MjNiZS9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2JlL3BoeS5jCmluZGV4IDIwZGNjMjUuLmI3YjczY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2JlL3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2JlL3BoeS5jCkBAIC04NzQsMzEgKzg3NCw2IEBACiAJCSAgUk9GRE0wX1JYREVURUNUT1IzLCBydGxwaHktPmZyYW1lc3luYyk7CiB9CiAKLXZvaWQgcnRsODcyM2JlX3BoeV9nZXRfdHhwb3dlcl9sZXZlbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgbG9uZyAqcG93ZXJsZXZlbCkKLXsKLQlzdHJ1Y3QgcnRsX3ByaXYgKnJ0bHByaXYgPSBydGxfcHJpdihodyk7Ci0Jc3RydWN0IHJ0bF9waHkgKnJ0bHBoeSA9ICZydGxwcml2LT5waHk7Ci0JdTggdHhwd3JfbGV2ZWw7Ci0JbG9uZyB0eHB3cl9kYm07Ci0KLQl0eHB3cl9sZXZlbCA9IHJ0bHBoeS0+Y3VyX2Nja190eHB3cmlkeDsKLQl0eHB3cl9kYm0gPSBydGw4NzIzX3BoeV90eHB3cl9pZHhfdG9fZGJtKGh3LCBXSVJFTEVTU19NT0RFX0IsCi0JCQkJCQkgdHhwd3JfbGV2ZWwpOwotCXR4cHdyX2xldmVsID0gcnRscGh5LT5jdXJfb2ZkbTI0Z190eHB3cmlkeDsKLQlpZiAocnRsODcyM19waHlfdHhwd3JfaWR4X3RvX2RibShodywgV0lSRUxFU1NfTU9ERV9HLCB0eHB3cl9sZXZlbCkgPgotCSAgICB0eHB3cl9kYm0pCi0JCXR4cHdyX2RibSA9Ci0JCSAgICBydGw4NzIzX3BoeV90eHB3cl9pZHhfdG9fZGJtKGh3LCBXSVJFTEVTU19NT0RFX0csCi0JCQkJCQkgdHhwd3JfbGV2ZWwpOwotCXR4cHdyX2xldmVsID0gcnRscGh5LT5jdXJfb2ZkbTI0Z190eHB3cmlkeDsKLQlpZiAocnRsODcyM19waHlfdHhwd3JfaWR4X3RvX2RibShodywgV0lSRUxFU1NfTU9ERV9OXzI0RywKLQkJCQkJIHR4cHdyX2xldmVsKSA+IHR4cHdyX2RibSkKLQkJdHhwd3JfZGJtID0KLQkJICAgIHJ0bDg3MjNfcGh5X3R4cHdyX2lkeF90b19kYm0oaHcsIFdJUkVMRVNTX01PREVfTl8yNEcsCi0JCQkJCQkgdHhwd3JfbGV2ZWwpOwotCSpwb3dlcmxldmVsID0gdHhwd3JfZGJtOwotfQotCiBzdGF0aWMgdTggX3J0bDg3MjNiZV9waHlfZ2V0X3JhdGVzZWN0aW9uX2ludHhwb3dlcl9ieXJhdGUoZW51bSByYWRpb19wYXRoIHBhdGgsCiAJCQkJCQkJICB1OCByYXRlKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4NzIzYmUvcGh5LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg3MjNiZS9waHkuaAppbmRleCA2MzM5NzM4Li45MDIxZDQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg3MjNiZS9waHkuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg3MjNiZS9waHkuaApAQCAtMTE0LDggKzExNCw2IEBACiBib29sIHJ0bDg3MjNiZV9waHlfYmJfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIGJvb2wgcnRsODcyM2JlX3BoeV9yZl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydGw4NzIzYmVfcGh5X2dldF9od19yZWdfb3JpZ2luYWx2YWx1ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7Ci12b2lkIHJ0bDg3MjNiZV9waHlfZ2V0X3R4cG93ZXJfbGV2ZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgICBsb25nICpwb3dlcmxldmVsKTsKIHZvaWQgcnRsODcyM2JlX3BoeV9zZXRfdHhwb3dlcl9sZXZlbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgIHU4IGNoYW5uZWwpOwogdm9pZCBydGw4NzIzYmVfcGh5X3NjYW5fb3BlcmF0aW9uX2JhY2t1cChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2JlL3N3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg3MjNiZS9zdy5jCmluZGV4IDIyM2ViNDIuLjEwMTdmMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2JlL3N3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4NzIzYmUvc3cuYwpAQCAtMzg3LDEyICszODcsMTQgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChmd2xwcywgcnRsODcyM2JlX21vZF9wYXJhbXMuZndjdHJsX2xwcywgYm9vbCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGlzYWJsZV93YXRjaGRvZywgcnRsODcyM2JlX21vZF9wYXJhbXMuZGlzYWJsZV93YXRjaGRvZywKIAkJICAgYm9vbCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHN3ZW5jLCAidXNpbmcgaGFyZHdhcmUgY3J5cHRvIChkZWZhdWx0IDAgW2hhcmR3YXJlXSlcbiIpOwotTU9EVUxFX1BBUk1fREVTQyhpcHMsICJ1c2luZyBubyBsaW5rIHBvd2VyIHNhdmUgKGRlZmF1bHQgMSBpcyBvcGVuKVxuIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGZ3bHBzLCAidXNpbmcgbGlua2VkIGZ3IGNvbnRyb2wgcG93ZXIgc2F2ZSAoZGVmYXVsdCAxIGlzIG9wZW4pXG4iKTsKK01PRFVMRV9QQVJNX0RFU0Moc3dlbmMsICJTZXQgdG8gMSBmb3Igc29mdHdhcmUgY3J5cHRvIChkZWZhdWx0IDApXG4iKTsKK01PRFVMRV9QQVJNX0RFU0MoaXBzLCAiU2V0IHRvIDAgdG8gbm90IHVzZSBsaW5rIHBvd2VyIHNhdmUgKGRlZmF1bHQgMSlcbiIpOworTU9EVUxFX1BBUk1fREVTQyhzd2xwcywgIlNldCB0byAxIHRvIHVzZSBTVyBjb250cm9sIHBvd2VyIHNhdmUgKGRlZmF1bHQgMClcbiIpOworTU9EVUxFX1BBUk1fREVTQyhmd2xwcywgIlNldCB0byAxIHRvIHVzZSBGVyBjb250cm9sIHBvd2VyIHNhdmUgKGRlZmF1bHQgMSlcbiIpOwogTU9EVUxFX1BBUk1fREVTQyhtc2ksICJTZXQgdG8gMSB0byB1c2UgTVNJIGludGVycnVwdHMgbW9kZSAoZGVmYXVsdCAwKVxuIik7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiU2V0IGRlYnVnIGxldmVsICgwLTUpIChkZWZhdWx0IDApIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfd2F0Y2hkb2csICJTZXQgdG8gMSB0byBkaXNhYmxlIHRoZSB3YXRjaGRvZyAoZGVmYXVsdCAwKVxuIik7CitNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfd2F0Y2hkb2csCisJCSAiU2V0IHRvIDEgdG8gZGlzYWJsZSB0aGUgd2F0Y2hkb2cgKGRlZmF1bHQgMClcbiIpOwogCiBzdGF0aWMgU0lNUExFX0RFVl9QTV9PUFMocnRsd2lmaV9wbV9vcHMsIHJ0bF9wY2lfc3VzcGVuZCwgcnRsX3BjaV9yZXN1bWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg3MjNiZS90cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2JlL3RyeC5jCmluZGV4IGQ2YTFjNzAuLjMzOGVjOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2JlL3RyeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODcyM2JlL3RyeC5jCkBAIC00NywxNjQgKzQ3LDYgQEAKIAlyZXR1cm4gc2tiLT5wcmlvcml0eTsKIH0KIAotLyogbWFjODAyMTEncyByYXRlX2lkeCBpcyBsaWtlIHRoaXM6Ci0gKgotICogMi40RyBiYW5kOnJ4X3N0YXR1cy0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haCi0gKgotICogQi9HIHJhdGU6Ci0gKiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkgPSAwLAotICogREVTQzkyQ19SQVRFMU0tLT5ERVNDOTJDX1JBVEU1NE0gPT0+IGlkeCBpcyAwLS0+MTEsCi0gKgotICogTiByYXRlOgotICogKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpID0gMSwKLSAqIERFU0M5MkNfUkFURU1DUzAtLT5ERVNDOTJDX1JBVEVNQ1MxNSA9PT4gaWR4IGlzIDAtLT4xNQotICoKLSAqIDVHIGJhbmQ6cnhfc3RhdHVzLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFoKLSAqIEEgcmF0ZToKLSAqIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSA9IDAsCi0gKiBERVNDOTJDX1JBVEU2TS0tPkRFU0M5MkNfUkFURTU0TSA9PT4gaWR4IGlzIDAtLT43LAotICoKLSAqIE4gcmF0ZToKLSAqIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSA9IDEsCi0gKiBERVNDOTJDX1JBVEVNQ1MwLS0+REVTQzkyQ19SQVRFTUNTMTUgPT0+IGlkeCBpcyAwLS0+MTUKLSAqLwotc3RhdGljIGludCBfcnRsODcyM2JlX3JhdGVfbWFwcGluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICBib29sIGlzaHQsIHU4IGRlc2NfcmF0ZSkKLXsKLQlpbnQgcmF0ZV9pZHg7Ci0KLQlpZiAoIWlzaHQpIHsKLQkJaWYgKElFRUU4MDIxMV9CQU5EXzJHSFogPT0gaHctPmNvbmYuY2hhbmRlZi5jaGFuLT5iYW5kKSB7Ci0JCQlzd2l0Y2ggKGRlc2NfcmF0ZSkgewotCQkJY2FzZSBERVNDOTJDX1JBVEUxTToKLQkJCQlyYXRlX2lkeCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTJNOgotCQkJCXJhdGVfaWR4ID0gMTsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFNV81TToKLQkJCQlyYXRlX2lkeCA9IDI7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTExTToKLQkJCQlyYXRlX2lkeCA9IDM7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0M5MkNfUkFURTZNOgotCQkJCXJhdGVfaWR4ID0gNDsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFOU06Ci0JCQkJcmF0ZV9pZHggPSA1OwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEUxMk06Ci0JCQkJcmF0ZV9pZHggPSA2OwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEUxOE06Ci0JCQkJcmF0ZV9pZHggPSA3OwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEUyNE06Ci0JCQkJcmF0ZV9pZHggPSA4OwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEUzNk06Ci0JCQkJcmF0ZV9pZHggPSA5OwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEU0OE06Ci0JCQkJcmF0ZV9pZHggPSAxMDsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFNTRNOgotCQkJCXJhdGVfaWR4ID0gMTE7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXJhdGVfaWR4ID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXN3aXRjaCAoZGVzY19yYXRlKSB7Ci0JCQljYXNlIERFU0M5MkNfUkFURTZNOgotCQkJCXJhdGVfaWR4ID0gMDsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQzkyQ19SQVRFOU06Ci0JCQkJcmF0ZV9pZHggPSAxOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEUxMk06Ci0JCQkJcmF0ZV9pZHggPSAyOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEUxOE06Ci0JCQkJcmF0ZV9pZHggPSAzOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEUyNE06Ci0JCQkJcmF0ZV9pZHggPSA0OwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEUzNk06Ci0JCQkJcmF0ZV9pZHggPSA1OwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEU0OE06Ci0JCQkJcmF0ZV9pZHggPSA2OwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDOTJDX1JBVEU1NE06Ci0JCQkJcmF0ZV9pZHggPSA3OwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlyYXRlX2lkeCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlzd2l0Y2ggKGRlc2NfcmF0ZSkgewotCQljYXNlIERFU0M5MkNfUkFURU1DUzA6Ci0JCQlyYXRlX2lkeCA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1MxOgotCQkJcmF0ZV9pZHggPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTMjoKLQkJCXJhdGVfaWR4ID0gMjsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzM6Ci0JCQlyYXRlX2lkeCA9IDM7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1M0OgotCQkJcmF0ZV9pZHggPSA0OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTNToKLQkJCXJhdGVfaWR4ID0gNTsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzY6Ci0JCQlyYXRlX2lkeCA9IDY7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1M3OgotCQkJcmF0ZV9pZHggPSA3OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQzkyQ19SQVRFTUNTODoKLQkJCXJhdGVfaWR4ID0gODsKLQkJCWJyZWFrOwotCQljYXNlIERFU0M5MkNfUkFURU1DUzk6Ci0JCQlyYXRlX2lkeCA9IDk7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1MxMDoKLQkJCXJhdGVfaWR4ID0gMTA7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1MxMToKLQkJCXJhdGVfaWR4ID0gMTE7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1MxMjoKLQkJCXJhdGVfaWR4ID0gMTI7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1MxMzoKLQkJCXJhdGVfaWR4ID0gMTM7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1MxNDoKLQkJCXJhdGVfaWR4ID0gMTQ7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDOTJDX1JBVEVNQ1MxNToKLQkJCXJhdGVfaWR4ID0gMTU7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJhdGVfaWR4ID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiByYXRlX2lkeDsKLX0KLQogc3RhdGljIHZvaWQgX3J0bDg3MjNiZV9xdWVyeV9yeHBoeXN0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJIHN0cnVjdCBydGxfc3RhdHMgKnBzdGF0dXMsIHU4ICpwZGVzYywKIAkJCQkJIHN0cnVjdCByeF9md2luZm9fODcyM2JlICpwX2RydmluZm8sCkBAIC01NTgsOCArNDAwLDggQEAKIAkgKiBzdXBwb3J0ZWQgcmF0ZXMgb3IgTUNTIGluZGV4IGlmIEhUIHJhdGVzCiAJICogYXJlIHVzZSAoUlhfRkxBR19IVCkKIAkgKi8KLQlyeF9zdGF0dXMtPnJhdGVfaWR4ID0gX3J0bDg3MjNiZV9yYXRlX21hcHBpbmcoaHcsIHN0YXR1cy0+aXNfaHQsCi0JCQkJCQkgICAgICBzdGF0dXMtPnJhdGUpOworCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSBydGx3aWZpX3JhdGVfbWFwcGluZyhodywgc3RhdHVzLT5pc19odCwKKwkJCQkJCSAgIGZhbHNlLCBzdGF0dXMtPnJhdGUpOwogCiAJcnhfc3RhdHVzLT5tYWN0aW1lID0gc3RhdHVzLT50aW1lc3RhbXBfbG93OwogCWlmIChwaHlzdGF0dXMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODgyMWFlL2RlZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4ODIxYWUvZGVmLmgKaW5kZXggYTczMDk4NS4uZWU3YzIwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4ODIxYWUvZGVmLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4ODIxYWUvZGVmLmgKQEAgLTM3Myw2MCArMzczLDYgQEAKIAlRU0xUX0NNRCA9IDB4MTMsCiB9OwogCi1lbnVtIHJ0bF9kZXNjODgyMWFlX3JhdGUgewotCURFU0NfUkFURTFNID0gMHgwMCwKLQlERVNDX1JBVEUyTSA9IDB4MDEsCi0JREVTQ19SQVRFNV81TSA9IDB4MDIsCi0JREVTQ19SQVRFMTFNID0gMHgwMywKLQotCURFU0NfUkFURTZNID0gMHgwNCwKLQlERVNDX1JBVEU5TSA9IDB4MDUsCi0JREVTQ19SQVRFMTJNID0gMHgwNiwKLQlERVNDX1JBVEUxOE0gPSAweDA3LAotCURFU0NfUkFURTI0TSA9IDB4MDgsCi0JREVTQ19SQVRFMzZNID0gMHgwOSwKLQlERVNDX1JBVEU0OE0gPSAweDBhLAotCURFU0NfUkFURTU0TSA9IDB4MGIsCi0KLQlERVNDX1JBVEVNQ1MwID0gMHgwYywKLQlERVNDX1JBVEVNQ1MxID0gMHgwZCwKLQlERVNDX1JBVEVNQ1MyID0gMHgwZSwKLQlERVNDX1JBVEVNQ1MzID0gMHgwZiwKLQlERVNDX1JBVEVNQ1M0ID0gMHgxMCwKLQlERVNDX1JBVEVNQ1M1ID0gMHgxMSwKLQlERVNDX1JBVEVNQ1M2ID0gMHgxMiwKLQlERVNDX1JBVEVNQ1M3ID0gMHgxMywKLQlERVNDX1JBVEVNQ1M4ID0gMHgxNCwKLQlERVNDX1JBVEVNQ1M5ID0gMHgxNSwKLQlERVNDX1JBVEVNQ1MxMCA9IDB4MTYsCi0JREVTQ19SQVRFTUNTMTEgPSAweDE3LAotCURFU0NfUkFURU1DUzEyID0gMHgxOCwKLQlERVNDX1JBVEVNQ1MxMyA9IDB4MTksCi0JREVTQ19SQVRFTUNTMTQgPSAweDFhLAotCURFU0NfUkFURU1DUzE1ID0gMHgxYiwKLQotCURFU0NfUkFURVZIVDFTU19NQ1MwID0gMHgyYywKLQlERVNDX1JBVEVWSFQxU1NfTUNTMSA9IDB4MmQsCi0JREVTQ19SQVRFVkhUMVNTX01DUzIgPSAweDJlLAotCURFU0NfUkFURVZIVDFTU19NQ1MzID0gMHgyZiwKLQlERVNDX1JBVEVWSFQxU1NfTUNTNCA9IDB4MzAsCi0JREVTQ19SQVRFVkhUMVNTX01DUzUgPSAweDMxLAotCURFU0NfUkFURVZIVDFTU19NQ1M2ID0gMHgzMiwKLQlERVNDX1JBVEVWSFQxU1NfTUNTNyA9IDB4MzMsCi0JREVTQ19SQVRFVkhUMVNTX01DUzggPSAweDM0LAotCURFU0NfUkFURVZIVDFTU19NQ1M5ID0gMHgzNSwKLQlERVNDX1JBVEVWSFQyU1NfTUNTMCA9IDB4MzYsCi0JREVTQ19SQVRFVkhUMlNTX01DUzEgPSAweDM3LAotCURFU0NfUkFURVZIVDJTU19NQ1MyID0gMHgzOCwKLQlERVNDX1JBVEVWSFQyU1NfTUNTMyA9IDB4MzksCi0JREVTQ19SQVRFVkhUMlNTX01DUzQgPSAweDNhLAotCURFU0NfUkFURVZIVDJTU19NQ1M1ID0gMHgzYiwKLQlERVNDX1JBVEVWSFQyU1NfTUNTNiA9IDB4M2MsCi0JREVTQ19SQVRFVkhUMlNTX01DUzcgPSAweDNkLAotCURFU0NfUkFURVZIVDJTU19NQ1M4ID0gMHgzZSwKLQlERVNDX1JBVEVWSFQyU1NfTUNTOSA9IDB4M2YsCi19OwotCiBlbnVtIHJ4X3BhY2tldF90eXBlIHsKIAlOT1JNQUxfUlgsCiAJVFhfUkVQT1JUMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODgyMWFlL2RtLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg4MjFhZS9kbS5jCmluZGV4IGJhMzBiMGQuLjBiMjA4MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODgyMWFlL2RtLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4ODIxYWUvZG0uYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIi4uL3dpZmkuaCIKICNpbmNsdWRlICIuLi9iYXNlLmgiCiAjaW5jbHVkZSAiLi4vcGNpLmgiCisjaW5jbHVkZSAiLi4vY29yZS5oIgogI2luY2x1ZGUgInJlZy5oIgogI2luY2x1ZGUgImRlZi5oIgogI2luY2x1ZGUgInBoeS5oIgpAQCAtNTE5LDM0ICs1MjAsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcnRsODgyMWFlX2RtX2RpZ2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwotCXN0cnVjdCBkaWdfdCAqZG1fZGlndGFibGUgPSAmcnRscHJpdi0+ZG1fZGlndGFibGU7Ci0KLQlkbV9kaWd0YWJsZS0+Y3VyX2lndmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBST0ZETTBfWEFBR0NDT1JFMSwgMHg3Zik7Ci0JZG1fZGlndGFibGUtPnJzc2lfbG93dGhyZXNoID0gRE1fRElHX1RIUkVTSF9MT1c7Ci0JZG1fZGlndGFibGUtPnJzc2lfaGlnaHRocmVzaCA9IERNX0RJR19USFJFU0hfSElHSDsKLQlkbV9kaWd0YWJsZS0+ZmFfbG93dGhyZXNoID0gRE1fRkFMU0VBTEFSTV9USFJFU0hfTE9XOwotCWRtX2RpZ3RhYmxlLT5mYV9oaWdodGhyZXNoID0gRE1fRkFMU0VBTEFSTV9USFJFU0hfSElHSDsKLQlkbV9kaWd0YWJsZS0+cnhfZ2Fpbl9tYXggPSBETV9ESUdfTUFYOwotCWRtX2RpZ3RhYmxlLT5yeF9nYWluX21pbiA9IERNX0RJR19NSU47Ci0JZG1fZGlndGFibGUtPmJhY2tfdmFsID0gRE1fRElHX0JBQ0tPRkZfREVGQVVMVDsKLQlkbV9kaWd0YWJsZS0+YmFja19yYW5nZV9tYXggPSBETV9ESUdfQkFDS09GRl9NQVg7Ci0JZG1fZGlndGFibGUtPmJhY2tfcmFuZ2VfbWluID0gRE1fRElHX0JBQ0tPRkZfTUlOOwotCWRtX2RpZ3RhYmxlLT5wcmVfY2NrX2NjYV90aHJlcyA9IDB4ZmY7Ci0JZG1fZGlndGFibGUtPmN1cl9jY2tfY2NhX3RocmVzID0gMHg4MzsKLQlkbV9kaWd0YWJsZS0+Zm9yYmlkZGVuX2lnaSA9IERNX0RJR19NSU47Ci0JZG1fZGlndGFibGUtPmxhcmdlX2ZhX2hpdCA9IDA7Ci0JZG1fZGlndGFibGUtPnJlY292ZXJfY250ID0gMDsKLQlkbV9kaWd0YWJsZS0+ZGlnX2R5bmFtaWNfbWluID0gRE1fRElHX01JTjsKLQlkbV9kaWd0YWJsZS0+ZGlnX2R5bmFtaWNfbWluXzEgPSBETV9ESUdfTUlOOwotCWRtX2RpZ3RhYmxlLT5tZWRpYV9jb25uZWN0XzAgPSBmYWxzZTsKLQlkbV9kaWd0YWJsZS0+bWVkaWFfY29ubmVjdF8xID0gZmFsc2U7Ci0JcnRscHJpdi0+ZG0uZG1faW5pdGlhbGdhaW5fZW5hYmxlID0gdHJ1ZTsKLQlkbV9kaWd0YWJsZS0+YnQzMF9jdXJfaWdpID0gMHgzMjsKLX0KLQogdm9pZCBydGw4ODIxYWVfZG1faW5pdF9lZGNhX3R1cmJvKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKQEAgLTYwNiw2ICs1NzksNyBAQAogewogCXN0cnVjdCBydGxfcHJpdiAqcnRscHJpdiA9IHJ0bF9wcml2KGh3KTsKIAlzdHJ1Y3QgcnRsX3BoeSAqcnRscGh5ID0gJnJ0bHByaXYtPnBoeTsKKwl1MzIgY3VyX2lndmFsdWUgPSBydGxfZ2V0X2JicmVnKGh3LCBST0ZETTBfWEFBR0NDT1JFMSwgMHg3Zik7CiAKIAlzcGluX2xvY2soJnJ0bHByaXYtPmxvY2tzLmlxa19sb2NrKTsKIAlydGxwaHktPmxja19pbnByb2dyZXNzID0gZmFsc2U7CkBAIC02MTMsNyArNTg3LDcgQEAKIAogCXJ0bHByaXYtPmRtLmRtX3R5cGUgPSBETV9UWVBFX0JZRFJJVkVSOwogCXJ0bDg4MjFhZV9kbV9jb21tb25faW5mb19zZWxmX2luaXQoaHcpOwotCXJ0bDg4MjFhZV9kbV9kaWdpbml0KGh3KTsKKwlydGxfZG1fZGlnaW5pdChodywgY3VyX2lndmFsdWUpOwogCXJ0bDg4MjFhZV9kbV9pbml0X3JhdGVfYWRhcHRpdmVfbWFzayhodyk7CiAJcnRsODgyMWFlX2RtX2luaXRfZWRjYV90dXJibyhodyk7CiAJcnRsODgyMWFlX2RtX2luaXRpYWxpemVfdHhwb3dlcl90cmFja2luZ190aGVybWFsbWV0ZXIoaHcpOwpAQCAtODIyLDcgKzc5Niw3IEBACiAJc3RydWN0IGRpZ190ICpkbV9kaWd0YWJsZSA9ICZydGxwcml2LT5kbV9kaWd0YWJsZTsKIAlzdHJ1Y3QgcnRsX21hYyAqbWFjID0gcnRsX21hYyhydGxfcHJpdihodykpOwogCXN0cnVjdCBydGxfaGFsICpydGxoYWwgPSBydGxfaGFsKHJ0bF9wcml2KGh3KSk7Ci0JdTggZGlnX2R5bmFtaWNfbWluOworCXU4IGRpZ19taW5fMDsKIAl1OCBkaWdfbWF4X29mX21pbjsKIAlib29sIGZpcnN0X2Nvbm5lY3QsIGZpcnN0X2Rpc2Nvbm5lY3Q7CiAJdTggZG1fZGlnX21heCwgZG1fZGlnX21pbiwgb2Zmc2V0OwpAQCAtODM3LDcgKzgxMSw3IEBACiAJfQogCiAJLyphZGQgYnkgTmVpbCBDaGVuIHRvIGF2b2lkIFBTRCBpcyBwcm9jZXNzaW5nKi8KLQlkaWdfZHluYW1pY19taW4gPSBkbV9kaWd0YWJsZS0+ZGlnX2R5bmFtaWNfbWluOworCWRpZ19taW5fMCA9IGRtX2RpZ3RhYmxlLT5kaWdfbWluXzA7CiAJZmlyc3RfY29ubmVjdCA9IChtYWMtPmxpbmtfc3RhdGUgPj0gTUFDODAyMTFfTElOS0VEKSAmJgogCQkJKCFkbV9kaWd0YWJsZS0+bWVkaWFfY29ubmVjdF8wKTsKIAlmaXJzdF9kaXNjb25uZWN0ID0gKG1hYy0+bGlua19zdGF0ZSA8IE1BQzgwMjExX0xJTktFRCkgJiYKQEAgLTg3NiwyMyArODUwLDIzIEBACiAJCQlvZmZzZXQgPSAwOwogCiAJCQlpZiAoZG1fZGlndGFibGUtPnJzc2lfdmFsX21pbiAtIG9mZnNldCA8IGRtX2RpZ19taW4pCi0JCQkJZGlnX2R5bmFtaWNfbWluID0gZG1fZGlnX21pbjsKKwkJCQlkaWdfbWluXzAgPSBkbV9kaWdfbWluOwogCQkJZWxzZSBpZiAoZG1fZGlndGFibGUtPnJzc2lfdmFsX21pbiAtCiAJCQkJb2Zmc2V0ID4gZGlnX21heF9vZl9taW4pCi0JCQkJZGlnX2R5bmFtaWNfbWluID0gZGlnX21heF9vZl9taW47CisJCQkJZGlnX21pbl8wID0gZGlnX21heF9vZl9taW47CiAJCQllbHNlCi0JCQkJZGlnX2R5bmFtaWNfbWluID0KKwkJCQlkaWdfbWluXzAgPQogCQkJCQlkbV9kaWd0YWJsZS0+cnNzaV92YWxfbWluIC0gb2Zmc2V0OwogCiAJCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0RJRywgREJHX0xPVUQsCi0JCQkJICJiT25lRW50cnlPbmx5PVRSVUUsIGRpZ19keW5hbWljX21pbj0weCV4XG4iLAotCQkJCSBkaWdfZHluYW1pY19taW4pOworCQkJCSAiYk9uZUVudHJ5T25seT1UUlVFLCBkaWdfbWluXzA9MHgleFxuIiwKKwkJCQkgZGlnX21pbl8wKTsKIAkJfSBlbHNlIHsKLQkJCWRpZ19keW5hbWljX21pbiA9IGRtX2RpZ19taW47CisJCQlkaWdfbWluXzAgPSBkbV9kaWdfbWluOwogCQl9CiAJfSBlbHNlIHsKIAkJZG1fZGlndGFibGUtPnJ4X2dhaW5fbWF4ID0gZG1fZGlnX21heDsKLQkJZGlnX2R5bmFtaWNfbWluID0gZG1fZGlnX21pbjsKKwkJZGlnX21pbl8wID0gZG1fZGlnX21pbjsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9ESUcsIERCR19MT1VELAogCQkJICJObyBMaW5rXG4iKTsKIAl9CkBAIC05MjUsMTEgKzg5OSwxMSBAQAogCQl9IGVsc2UgewogCQkJaWYgKGRtX2RpZ3RhYmxlLT5sYXJnZV9mYV9oaXQgPCAzKSB7CiAJCQkJaWYgKChkbV9kaWd0YWJsZS0+Zm9yYmlkZGVuX2lnaSAtIDEpIDwKLQkJCQkgICAgZGlnX2R5bmFtaWNfbWluKSB7CisJCQkJICAgIGRpZ19taW5fMCkgewogCQkJCQlkbV9kaWd0YWJsZS0+Zm9yYmlkZGVuX2lnaSA9Ci0JCQkJCQlkaWdfZHluYW1pY19taW47CisJCQkJCQlkaWdfbWluXzA7CiAJCQkJCWRtX2RpZ3RhYmxlLT5yeF9nYWluX21pbiA9Ci0JCQkJCQlkaWdfZHluYW1pY19taW47CisJCQkJCQlkaWdfbWluXzA7CiAJCQkJCVJUX1RSQUNFKHJ0bHByaXYsIENPTVBfRElHLCBEQkdfTE9VRCwKIAkJCQkJCSAiTm9ybWFsIENhc2U6IEF0IExvd2VyIEJvdW5kXG4iKTsKIAkJCQl9IGVsc2UgewpAQCAtMTAyNCw3ICs5OTgsNyBAQAogCXJ0bDg4MjFhZV9kbV93cml0ZV9kaWcoaHcsIGN1cnJlbnRfaWdpKTsKIAlkbV9kaWd0YWJsZS0+bWVkaWFfY29ubmVjdF8wID0KIAkJKChtYWMtPmxpbmtfc3RhdGUgPj0gTUFDODAyMTFfTElOS0VEKSA/IHRydWUgOiBmYWxzZSk7Ci0JZG1fZGlndGFibGUtPmRpZ19keW5hbWljX21pbiA9IGRpZ19keW5hbWljX21pbjsKKwlkbV9kaWd0YWJsZS0+ZGlnX21pbl8wID0gZGlnX21pbl8wOwogfQogCiBzdGF0aWMgdm9pZCBydGw4ODIxYWVfZG1fY29tbW9uX2luZm9fc2VsZl91cGRhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg4MjFhZS9kbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4ODIxYWUvZG0uaAppbmRleCA5ZGQ0MGRkLi42MjVhNmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg4MjFhZS9kbS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODgyMWFlL2RtLmgKQEAgLTE4NywyOCArMTg3LDEyIEBACiAjZGVmaW5lIEJXX0FVVE9fU1dJVENIX0hJR0hfTE9XCQkyNQogI2RlZmluZSBCV19BVVRPX1NXSVRDSF9MT1dfSElHSAkJMzAKIAotI2RlZmluZSBETV9ESUdfVEhSRVNIX0hJR0gJCQk0MAotI2RlZmluZSBETV9ESUdfVEhSRVNIX0xPVwkJCTM1Ci0KLSNkZWZpbmUgRE1fRkFMU0VBTEFSTV9USFJFU0hfTE9XCTQwMAotI2RlZmluZSBETV9GQUxTRUFMQVJNX1RIUkVTSF9ISUdICTEwMDAKLQotI2RlZmluZSBETV9ESUdfTUFYCQkJCQkweDNlCi0jZGVmaW5lIERNX0RJR19NSU4JCQkJCTB4MWUKLQotI2RlZmluZSBETV9ESUdfTUFYX0FQCQkJCTB4MzIKLSNkZWZpbmUgRE1fRElHX01JTl9BUAkJCQkweDIwCi0KICNkZWZpbmUgRE1fRElHX0ZBX1VQUEVSCQkJCTB4M2UKICNkZWZpbmUgRE1fRElHX0ZBX0xPV0VSCQkJCTB4MWUKICNkZWZpbmUgRE1fRElHX0ZBX1RIMAkJCQkyMDAKICNkZWZpbmUgRE1fRElHX0ZBX1RIMQkJCQkweDMwMAogI2RlZmluZSBETV9ESUdfRkFfVEgyCQkJCTB4NDAwCiAKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfTUFYCQkJMTIKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfTUlOCQkJLTQKLSNkZWZpbmUgRE1fRElHX0JBQ0tPRkZfREVGQVVMVAkJMTAKLQogI2RlZmluZSBSWFBBVEhTRUxFQ1RJT05fU1NfVEhfTE9XCTMwCiAjZGVmaW5lIFJYUEFUSFNFTEVDVElPTl9ESUZGX1RICQkxOAogCkBAIC0yNjIsMTQgKzI0Niw2IEBACiAJRElHX09QX1RZUEVfTUFYCiB9OwogCi1lbnVtIHRhZ19jY2tfcGFja2V0X2RldGVjdGlvbl90aHJlc2hvbGRfdHlwZV9kZWZpbml0aW9uIHsKLQlDQ0tfUERfU1RBR0VfTE9XUlNTSSA9IDAsCi0JQ0NLX1BEX1NUQUdFX0hJR0hSU1NJID0gMSwKLQlDQ0tfRkFfU1RBR0VfTE9XID0gMiwKLQlDQ0tfRkFfU1RBR0VfSElHSCA9IDMsCi0JQ0NLX1BEX1NUQUdFX01BWCA9IDQsCi19OwotCiBlbnVtIGRtXzFyX2NjYV9lIHsKIAlDQ0FfMVIgPSAwLAogCUNDQV8yUiA9IDEsCkBAIC0yODgsMjMgKzI2NCw2IEBACiAJQU5TX0FOVEVOTkFfTUFYID0gMywKIH07CiAKLWVudW0gZG1fZGlnX2V4dF9wb3J0X2FsZ19lIHsKLQlESUdfRVhUX1BPUlRfU1RBR0VfMCA9IDAsCi0JRElHX0VYVF9QT1JUX1NUQUdFXzEgPSAxLAotCURJR19FWFRfUE9SVF9TVEFHRV8yID0gMiwKLQlESUdfRVhUX1BPUlRfU1RBR0VfMyA9IDMsCi0JRElHX0VYVF9QT1JUX1NUQUdFX01BWCA9IDQsCi19OwotCi1lbnVtIGRtX2RpZ19jb25uZWN0X2UgewotCURJR19TVEFfRElTQ09OTkVDVCA9IDAsCi0JRElHX1NUQV9DT05ORUNUID0gMSwKLQlESUdfU1RBX0JFRk9SRV9DT05ORUNUID0gMiwKLQlESUdfTVVMVElTVEFfRElTQ09OTkVDVCA9IDMsCi0JRElHX01VTFRJU1RBX0NPTk5FQ1QgPSA0LAotCURJR19DT05ORUNUX01BWAotfTsKLQogZW51bSBwd3JfdHJhY2tfY29udHJvbF9tZXRob2QgewogCUJCU1dJTkcsCiAJVFhBR0MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3J0bDg4MjFhZS9wd3JzZXEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODgyMWFlL3B3cnNlcS5oCmluZGV4IGJmMGIwY2UuLjM2YjNlOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODgyMWFlL3B3cnNlcS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODgyMWFlL3B3cnNlcS5oCkBAIC05Myw5ICs5Myw5IEBACiAKICNkZWZpbmUgUlRMODgxMl9UUkFOU19DQVJERU1VX1RPX1NVUwkJCQkJXAogCXsweDAwNDIsIFBXUl9DVVRfQUxMX01TSywgUFdSX0ZBQl9BTExfTVNLLCBQV1JfSU5URl9VU0JfTVNLLFwKLQlQV1JfQkFTRUFERFJfTUFDLCBQV1JfQ01EX1dSSVRFLCAweEYwLCAweGNjfSwgXAorCVBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIDB4RjAsIDB4YzB9LCBcCiAJezB4MDA0MiwgUFdSX0NVVF9BTExfTVNLLCBQV1JfRkFCX0FMTF9NU0ssIFBXUl9JTlRGX1BDSV9NU0ssXAotCVBXUl9CQVNFQUREUl9NQUMsIFBXUl9DTURfV1JJVEUsIDB4RjAsIDB4RUN9LCBcCisJUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgMHhGMCwgMHhFMH0sIFwKIAl7MHgwMDQzLCBQV1JfQ1VUX0FMTF9NU0ssIFBXUl9GQUJfQUxMX01TSywgUFdSX0lOVEZfQUxMX01TSyxcCiAJUFdSX0JBU0VBRERSX01BQywgUFdSX0NNRF9XUklURSwgMHhGRiwgMHgwNyBcCiAJLyogZ3BpbzExIGlucHV0IG1vZGUsIGdwaW8xMH44IG91dHB1dCBtb2RlICovfSwJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4ODIxYWUvc3cuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODgyMWFlL3N3LmMKaW5kZXggZmM5MmRkNi4uYTQ5ODgxMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODgyMWFlL3N3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4ODIxYWUvc3cuYwpAQCAtODUsNTIgKzg1LDYgQEAKIAlydGxwY2ktPmNvbnN0X3N1cHBvcnRfcGNpYXNwbSA9IDE7CiB9CiAKLXN0YXRpYyB2b2lkIGxvYWRfd293bGFuX2Z3KHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdikKLXsKLQkvKiBjYWxsYmFjayByb3V0aW5lIHRvIGxvYWQgd293bGFuIGZpcm13YXJlIGFmdGVyIG1haW4gZncgaGFzCi0JICogYmVlbiBsb2FkZWQKLQkgKi8KLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKndvd2xhbl9maXJtd2FyZTsKLQljaGFyICpmd19uYW1lID0gTlVMTDsKLQlpbnQgZXJyOwotCi0JLyogZm9yIHdvd2xhbiBmaXJtd2FyZSBidWYgKi8KLQlydGxwcml2LT5ydGxoYWwud293bGFuX2Zpcm13YXJlID0gdnphbGxvYygweDgwMDApOwotCWlmICghcnRscHJpdi0+cnRsaGFsLndvd2xhbl9maXJtd2FyZSkgewotCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAotCQkJICJDYW4ndCBhbGxvYyBidWZmZXIgZm9yIHdvd2xhbiBmdy5cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHJ0bHByaXYtPnJ0bGhhbC5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODgyMUFFKQotCQlmd19uYW1lID0gInJ0bHdpZmkvcnRsODgyMWFlZndfd293bGFuLmJpbiI7Ci0JZWxzZQotCQlmd19uYW1lID0gInJ0bHdpZmkvcnRsODgxMmFlZndfd293bGFuLmJpbiI7Ci0JZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmd293bGFuX2Zpcm13YXJlLCBmd19uYW1lLCBydGxwcml2LT5pby5kZXYpOwotCWlmIChlcnIpIHsKLQkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKLQkJCSAiRmFpbGVkIHRvIHJlcXVlc3Qgd293bGFuIGZpcm13YXJlIVxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JaWYgKHdvd2xhbl9maXJtd2FyZS0+c2l6ZSA+IDB4ODAwMCkgewotCQlSVF9UUkFDRShydGxwcml2LCBDT01QX0VSUiwgREJHX0VNRVJHLAotCQkJICJXb3dsYW4gRmlybXdhcmUgaXMgdG9vIGJpZyFcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQotCW1lbWNweShydGxwcml2LT5ydGxoYWwud293bGFuX2Zpcm13YXJlLCB3b3dsYW5fZmlybXdhcmUtPmRhdGEsCi0JICAgICAgIHdvd2xhbl9maXJtd2FyZS0+c2l6ZSk7Ci0JcnRscHJpdi0+cnRsaGFsLndvd2xhbl9md3NpemUgPSB3b3dsYW5fZmlybXdhcmUtPnNpemU7Ci0JcmVsZWFzZV9maXJtd2FyZSh3b3dsYW5fZmlybXdhcmUpOwotCi0JUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9JTklULCBEQkdfTE9VRCwgIldPV0xBTiBGaXJtd2FyZURvd25sb2FkIE9LXG4iKTsKLQlyZXR1cm47Ci1lcnJvcjoKLQlyZWxlYXNlX2Zpcm13YXJlKHdvd2xhbl9maXJtd2FyZSk7Ci0JdmZyZWUocnRscHJpdi0+cnRsaGFsLndvd2xhbl9maXJtd2FyZSk7Ci19Ci0KIC8qSW5pdGlhbGl6ZVZhcmlhYmxlczg4MTJFKi8KIGludCBydGw4ODIxYWVfaW5pdF9zd192YXJzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewpAQCAtMjMxLDcgKzE4NSw2IEBACiAJZWxzZSBpZiAocnRscHJpdi0+cHNjLnJlZ19md2N0cmxfbHBzID09IDMpCiAJCXJ0bHByaXYtPnBzYy5md2N0cmxfcHNtb2RlID0gRldfUFNfRFRJTV9NT0RFOwogCi0JcnRscHJpdi0+cnRsX2Z3X3NlY29uZF9jYiA9IGxvYWRfd293bGFuX2Z3OwogCS8qIGZvciBmaXJtd2FyZSBidWYgKi8KIAlydGxwcml2LT5ydGxoYWwucGZpcm13YXJlID0gdnphbGxvYygweDgwMDApOwogCWlmICghcnRscHJpdi0+cnRsaGFsLnBmaXJtd2FyZSkgewpAQCAtMjM5LDIwICsxOTIsNDEgQEAKIAkJCSAiQ2FuJ3QgYWxsb2MgYnVmZmVyIGZvciBmdy5cbiIpOwogCQlyZXR1cm4gMTsKIAl9CisJcnRscHJpdi0+cnRsaGFsLndvd2xhbl9maXJtd2FyZSA9IHZ6YWxsb2MoMHg4MDAwKTsKKwlpZiAoIXJ0bHByaXYtPnJ0bGhhbC53b3dsYW5fZmlybXdhcmUpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAiQ2FuJ3QgYWxsb2MgYnVmZmVyIGZvciB3b3dsYW4gZncuXG4iKTsKKwkJcmV0dXJuIDE7CisJfQogCi0JaWYgKHJ0bGhhbC0+aHdfdHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDg4MTJBRSkKKwlpZiAocnRsaGFsLT5od190eXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODgxMkFFKSB7CiAJCXJ0bHByaXYtPmNmZy0+ZndfbmFtZSA9ICJydGx3aWZpL3J0bDg4MTJhZWZ3LmJpbiI7Ci0JZWxzZQorCQlydGxwcml2LT5jZmctPndvd2xhbl9md19uYW1lID0gInJ0bHdpZmkvcnRsODgxMmFlZndfd293bGFuLmJpbiI7CisJfSBlbHNlIHsKIAkJcnRscHJpdi0+Y2ZnLT5md19uYW1lID0gInJ0bHdpZmkvcnRsODgyMWFlZncuYmluIjsKKwkJcnRscHJpdi0+Y2ZnLT53b3dsYW5fZndfbmFtZSA9ICJydGx3aWZpL3J0bDg4MjFhZWZ3X3dvd2xhbi5iaW4iOworCX0KIAogCXJ0bHByaXYtPm1heF9md19zaXplID0gMHg4MDAwOworCS8qbG9hZCBub3JtYWwgZmlybXdhcmUqLwogCXByX2luZm8oIlVzaW5nIGZpcm13YXJlICVzXG4iLCBydGxwcml2LT5jZmctPmZ3X25hbWUpOwogCWVyciA9IHJlcXVlc3RfZmlybXdhcmVfbm93YWl0KFRISVNfTU9EVUxFLCAxLCBydGxwcml2LT5jZmctPmZ3X25hbWUsCiAJCQkJICAgICAgcnRscHJpdi0+aW8uZGV2LCBHRlBfS0VSTkVMLCBodywKIAkJCQkgICAgICBydGxfZndfY2IpOwogCWlmIChlcnIpIHsKIAkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKLQkJCSAiRmFpbGVkIHRvIHJlcXVlc3QgZmlybXdhcmUhXG4iKTsKKwkJCSAiRmFpbGVkIHRvIHJlcXVlc3Qgbm9ybWFsIGZpcm13YXJlIVxuIik7CisJCXJldHVybiAxOworCX0KKwkvKmxvYWQgd293bGFuIGZpcm13YXJlKi8KKwlwcl9pbmZvKCJVc2luZyBmaXJtd2FyZSAlc1xuIiwgcnRscHJpdi0+Y2ZnLT53b3dsYW5fZndfbmFtZSk7CisJZXJyID0gcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQoVEhJU19NT0RVTEUsIDEsCisJCQkJICAgICAgcnRscHJpdi0+Y2ZnLT53b3dsYW5fZndfbmFtZSwKKwkJCQkgICAgICBydGxwcml2LT5pby5kZXYsIEdGUF9LRVJORUwsIGh3LAorCQkJCSAgICAgIHJ0bF93b3dsYW5fZndfY2IpOworCWlmIChlcnIpIHsKKwkJUlRfVFJBQ0UocnRscHJpdiwgQ09NUF9FUlIsIERCR19FTUVSRywKKwkJCSAiRmFpbGVkIHRvIHJlcXVlc3Qgd293bGFuIGZpcm13YXJlIVxuIik7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcnRsODgyMWFlL3RyeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4ODIxYWUvdHJ4LmMKaW5kZXggMzgzYjg2Yi4uNzJhZjRiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4ODIxYWUvdHJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9ydGw4ODIxYWUvdHJ4LmMKQEAgLTQ4LDIzMiArNDgsNiBAQAogCXJldHVybiBza2ItPnByaW9yaXR5OwogfQogCi0vKiBtYWM4MDIxMSdzIHJhdGVfaWR4IGlzIGxpa2UgdGhpczoKLSAqCi0gKiAyLjRHIGJhbmQ6cnhfc3RhdHVzLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFoKLSAqCi0gKiBCL0cgcmF0ZToKLSAqIChyeF9zdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSA9IDAsCi0gKiBERVNDX1JBVEUxTS0tPkRFU0NfUkFURTU0TSA9PT4gaWR4IGlzIDAtLT4xMSwKLSAqCi0gKiBOIHJhdGU6Ci0gKiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkgPSAxLAotICogREVTQ19SQVRFTUNTMC0tPkRFU0NfUkFURU1DUzE1ID09PiBpZHggaXMgMC0tPjE1Ci0gKgotICogNUcgYmFuZDpyeF9zdGF0dXMtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWgotICogQSByYXRlOgotICogKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpID0gMCwKLSAqIERFU0NfUkFURTZNLS0+REVTQ19SQVRFNTRNID09PiBpZHggaXMgMC0tPjcsCi0gKgotICogTiByYXRlOgotICogKHJ4X3N0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfSFQpID0gMSwKLSAqIERFU0NfUkFURU1DUzAtLT5ERVNDX1JBVEVNQ1MxNSA9PT4gaWR4IGlzIDAtLT4xNQotICovCi1zdGF0aWMgaW50IF9ydGw4ODIxYWVfcmF0ZV9tYXBwaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgIGJvb2wgaXNodCwgYm9vbCBpc3ZodCwgdTggZGVzY19yYXRlKQotewotCWludCByYXRlX2lkeDsKLQotCWlmICghaXNodCkgewotCQlpZiAoSUVFRTgwMjExX0JBTkRfMkdIWiA9PSBody0+Y29uZi5jaGFuZGVmLmNoYW4tPmJhbmQpIHsKLQkJCXN3aXRjaCAoZGVzY19yYXRlKSB7Ci0JCQljYXNlIERFU0NfUkFURTFNOgotCQkJCXJhdGVfaWR4ID0gMDsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQ19SQVRFMk06Ci0JCQkJcmF0ZV9pZHggPSAxOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDX1JBVEU1XzVNOgotCQkJCXJhdGVfaWR4ID0gMjsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQ19SQVRFMTFNOgotCQkJCXJhdGVfaWR4ID0gMzsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVTQ19SQVRFNk06Ci0JCQkJcmF0ZV9pZHggPSA0OwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDX1JBVEU5TToKLQkJCQlyYXRlX2lkeCA9IDU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0NfUkFURTEyTToKLQkJCQlyYXRlX2lkeCA9IDY7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0NfUkFURTE4TToKLQkJCQlyYXRlX2lkeCA9IDc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0NfUkFURTI0TToKLQkJCQlyYXRlX2lkeCA9IDg7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0NfUkFURTM2TToKLQkJCQlyYXRlX2lkeCA9IDk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0NfUkFURTQ4TToKLQkJCQlyYXRlX2lkeCA9IDEwOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDX1JBVEU1NE06Ci0JCQkJcmF0ZV9pZHggPSAxMTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmF0ZV9pZHggPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2UgewotCQkJc3dpdGNoIChkZXNjX3JhdGUpIHsKLQkJCWNhc2UgREVTQ19SQVRFNk06Ci0JCQkJcmF0ZV9pZHggPSAwOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVNDX1JBVEU5TToKLQkJCQlyYXRlX2lkeCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0NfUkFURTEyTToKLQkJCQlyYXRlX2lkeCA9IDI7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0NfUkFURTE4TToKLQkJCQlyYXRlX2lkeCA9IDM7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0NfUkFURTI0TToKLQkJCQlyYXRlX2lkeCA9IDQ7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0NfUkFURTM2TToKLQkJCQlyYXRlX2lkeCA9IDU7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0NfUkFURTQ4TToKLQkJCQlyYXRlX2lkeCA9IDY7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFU0NfUkFURTU0TToKLQkJCQlyYXRlX2lkeCA9IDc7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXJhdGVfaWR4ID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoZGVzY19yYXRlKSB7Ci0JCWNhc2UgREVTQ19SQVRFTUNTMDoKLQkJCXJhdGVfaWR4ID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURU1DUzE6Ci0JCQlyYXRlX2lkeCA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDX1JBVEVNQ1MyOgotCQkJcmF0ZV9pZHggPSAyOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQ19SQVRFTUNTMzoKLQkJCXJhdGVfaWR4ID0gMzsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURU1DUzQ6Ci0JCQlyYXRlX2lkeCA9IDQ7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDX1JBVEVNQ1M1OgotCQkJcmF0ZV9pZHggPSA1OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQ19SQVRFTUNTNjoKLQkJCXJhdGVfaWR4ID0gNjsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURU1DUzc6Ci0JCQlyYXRlX2lkeCA9IDc7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDX1JBVEVNQ1M4OgotCQkJcmF0ZV9pZHggPSA4OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQ19SQVRFTUNTOToKLQkJCXJhdGVfaWR4ID0gOTsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURU1DUzEwOgotCQkJcmF0ZV9pZHggPSAxMDsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURU1DUzExOgotCQkJcmF0ZV9pZHggPSAxMTsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURU1DUzEyOgotCQkJcmF0ZV9pZHggPSAxMjsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURU1DUzEzOgotCQkJcmF0ZV9pZHggPSAxMzsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURU1DUzE0OgotCQkJcmF0ZV9pZHggPSAxNDsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURU1DUzE1OgotCQkJcmF0ZV9pZHggPSAxNTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmF0ZV9pZHggPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoaXN2aHQpIHsKLQkJc3dpdGNoIChkZXNjX3JhdGUpIHsKLQkJY2FzZSBERVNDX1JBVEVWSFQxU1NfTUNTMDoKLQkJCXJhdGVfaWR4ID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURVZIVDFTU19NQ1MxOgotCQkJcmF0ZV9pZHggPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQ19SQVRFVkhUMVNTX01DUzI6Ci0JCQlyYXRlX2lkeCA9IDI7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDX1JBVEVWSFQxU1NfTUNTMzoKLQkJCXJhdGVfaWR4ID0gMzsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURVZIVDFTU19NQ1M0OgotCQkJcmF0ZV9pZHggPSA0OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQ19SQVRFVkhUMVNTX01DUzU6Ci0JCQlyYXRlX2lkeCA9IDU7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDX1JBVEVWSFQxU1NfTUNTNjoKLQkJCXJhdGVfaWR4ID0gNjsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURVZIVDFTU19NQ1M3OgotCQkJcmF0ZV9pZHggPSA3OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQ19SQVRFVkhUMVNTX01DUzg6Ci0JCQlyYXRlX2lkeCA9IDg7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDX1JBVEVWSFQxU1NfTUNTOToKLQkJCXJhdGVfaWR4ID0gOTsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURVZIVDJTU19NQ1MwOgotCQkJcmF0ZV9pZHggPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQ19SQVRFVkhUMlNTX01DUzE6Ci0JCQlyYXRlX2lkeCA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDX1JBVEVWSFQyU1NfTUNTMjoKLQkJCXJhdGVfaWR4ID0gMjsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURVZIVDJTU19NQ1MzOgotCQkJcmF0ZV9pZHggPSAzOwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQ19SQVRFVkhUMlNTX01DUzQ6Ci0JCQlyYXRlX2lkeCA9IDQ7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDX1JBVEVWSFQyU1NfTUNTNToKLQkJCXJhdGVfaWR4ID0gNTsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURVZIVDJTU19NQ1M2OgotCQkJcmF0ZV9pZHggPSA2OwotCQkJYnJlYWs7Ci0JCWNhc2UgREVTQ19SQVRFVkhUMlNTX01DUzc6Ci0JCQlyYXRlX2lkeCA9IDc7Ci0JCQlicmVhazsKLQkJY2FzZSBERVNDX1JBVEVWSFQyU1NfTUNTODoKLQkJCXJhdGVfaWR4ID0gODsKLQkJCWJyZWFrOwotCQljYXNlIERFU0NfUkFURVZIVDJTU19NQ1M5OgotCQkJcmF0ZV9pZHggPSA5OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyYXRlX2lkeCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gcmF0ZV9pZHg7Ci19Ci0KIHN0YXRpYyB1MTYgb2RtX2NmbyhjaGFyIHZhbHVlKQogewogCWludCByZXRfdmFsOwpAQCAtNzY2LDkgKzU0MCw5IEBACiAJICogc3VwcG9ydGVkIHJhdGVzIG9yIE1DUyBpbmRleCBpZiBIVCByYXRlcwogCSAqIGFyZSB1c2UgKFJYX0ZMQUdfSFQpCiAJICovCi0Jcnhfc3RhdHVzLT5yYXRlX2lkeCA9Ci0JICBfcnRsODgyMWFlX3JhdGVfbWFwcGluZyhodywgc3RhdHVzLT5pc19odCwKLQkJCQkgIHN0YXR1cy0+aXNfdmh0LCBzdGF0dXMtPnJhdGUpOworCXJ4X3N0YXR1cy0+cmF0ZV9pZHggPSBydGx3aWZpX3JhdGVfbWFwcGluZyhodywgc3RhdHVzLT5pc19odCwKKwkJCQkJCSAgIHN0YXR1cy0+aXNfdmh0LAorCQkJCQkJICAgc3RhdHVzLT5yYXRlKTsKIAogCXJ4X3N0YXR1cy0+bWFjdGltZSA9IHN0YXR1cy0+dGltZXN0YW1wX2xvdzsKIAlpZiAocGh5c3RhdHVzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3dpZmkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvd2lmaS5oCmluZGV4IDY4NjZkY2YuLjUxNTcyOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvd2lmaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvd2lmaS5oCkBAIC0zMzEsMTAgKzMzMSwxMCBAQAogKElTX0hBUkRXQVJFX1RZUEVfODcyM0UocnRsaGFsKSB8fCBJU19IQVJEV0FSRV9UWVBFXzg3MjNVKHJ0bGhhbCkpCiAKICNkZWZpbmUgUlhfSEFMX0lTX0NDS19SQVRFKHJ4bWNzKQkJCVwKLQkoKHJ4bWNzKSA9PSBERVNDOTJfUkFURTFNIHx8CQkJXAotCSAocnhtY3MpID09IERFU0M5Ml9SQVRFMk0gfHwJCQlcCi0JIChyeG1jcykgPT0gREVTQzkyX1JBVEU1XzVNIHx8CQkJXAotCSAocnhtY3MpID09IERFU0M5Ml9SQVRFMTFNKQorCSgocnhtY3MpID09IERFU0NfUkFURTFNIHx8CQkJXAorCSAocnhtY3MpID09IERFU0NfUkFURTJNIHx8CQkJXAorCSAocnhtY3MpID09IERFU0NfUkFURTVfNU0gfHwJCQlcCisJIChyeG1jcykgPT0gREVTQ19SQVRFMTFNKQogCiBlbnVtIHNjYW5fb3BlcmF0aW9uX2JhY2t1cF9vcHQgewogCVNDQU5fT1BUX0JBQ0tVUCA9IDAsCkBAIC01NzksMzggKzU3OSw1OSBAQAogfTsKIAogZW51bSBydGxfZGVzYzkyX3JhdGUgewotCURFU0M5Ml9SQVRFMU0gPSAweDAwLAotCURFU0M5Ml9SQVRFMk0gPSAweDAxLAotCURFU0M5Ml9SQVRFNV81TSA9IDB4MDIsCi0JREVTQzkyX1JBVEUxMU0gPSAweDAzLAorCURFU0NfUkFURTFNID0gMHgwMCwKKwlERVNDX1JBVEUyTSA9IDB4MDEsCisJREVTQ19SQVRFNV81TSA9IDB4MDIsCisJREVTQ19SQVRFMTFNID0gMHgwMywKIAotCURFU0M5Ml9SQVRFNk0gPSAweDA0LAotCURFU0M5Ml9SQVRFOU0gPSAweDA1LAotCURFU0M5Ml9SQVRFMTJNID0gMHgwNiwKLQlERVNDOTJfUkFURTE4TSA9IDB4MDcsCi0JREVTQzkyX1JBVEUyNE0gPSAweDA4LAotCURFU0M5Ml9SQVRFMzZNID0gMHgwOSwKLQlERVNDOTJfUkFURTQ4TSA9IDB4MGEsCi0JREVTQzkyX1JBVEU1NE0gPSAweDBiLAorCURFU0NfUkFURTZNID0gMHgwNCwKKwlERVNDX1JBVEU5TSA9IDB4MDUsCisJREVTQ19SQVRFMTJNID0gMHgwNiwKKwlERVNDX1JBVEUxOE0gPSAweDA3LAorCURFU0NfUkFURTI0TSA9IDB4MDgsCisJREVTQ19SQVRFMzZNID0gMHgwOSwKKwlERVNDX1JBVEU0OE0gPSAweDBhLAorCURFU0NfUkFURTU0TSA9IDB4MGIsCiAKLQlERVNDOTJfUkFURU1DUzAgPSAweDBjLAotCURFU0M5Ml9SQVRFTUNTMSA9IDB4MGQsCi0JREVTQzkyX1JBVEVNQ1MyID0gMHgwZSwKLQlERVNDOTJfUkFURU1DUzMgPSAweDBmLAotCURFU0M5Ml9SQVRFTUNTNCA9IDB4MTAsCi0JREVTQzkyX1JBVEVNQ1M1ID0gMHgxMSwKLQlERVNDOTJfUkFURU1DUzYgPSAweDEyLAotCURFU0M5Ml9SQVRFTUNTNyA9IDB4MTMsCi0JREVTQzkyX1JBVEVNQ1M4ID0gMHgxNCwKLQlERVNDOTJfUkFURU1DUzkgPSAweDE1LAotCURFU0M5Ml9SQVRFTUNTMTAgPSAweDE2LAotCURFU0M5Ml9SQVRFTUNTMTEgPSAweDE3LAotCURFU0M5Ml9SQVRFTUNTMTIgPSAweDE4LAotCURFU0M5Ml9SQVRFTUNTMTMgPSAweDE5LAotCURFU0M5Ml9SQVRFTUNTMTQgPSAweDFhLAotCURFU0M5Ml9SQVRFTUNTMTUgPSAweDFiLAotCURFU0M5Ml9SQVRFTUNTMTVfU0cgPSAweDFjLAotCURFU0M5Ml9SQVRFTUNTMzIgPSAweDIwLAorCURFU0NfUkFURU1DUzAgPSAweDBjLAorCURFU0NfUkFURU1DUzEgPSAweDBkLAorCURFU0NfUkFURU1DUzIgPSAweDBlLAorCURFU0NfUkFURU1DUzMgPSAweDBmLAorCURFU0NfUkFURU1DUzQgPSAweDEwLAorCURFU0NfUkFURU1DUzUgPSAweDExLAorCURFU0NfUkFURU1DUzYgPSAweDEyLAorCURFU0NfUkFURU1DUzcgPSAweDEzLAorCURFU0NfUkFURU1DUzggPSAweDE0LAorCURFU0NfUkFURU1DUzkgPSAweDE1LAorCURFU0NfUkFURU1DUzEwID0gMHgxNiwKKwlERVNDX1JBVEVNQ1MxMSA9IDB4MTcsCisJREVTQ19SQVRFTUNTMTIgPSAweDE4LAorCURFU0NfUkFURU1DUzEzID0gMHgxOSwKKwlERVNDX1JBVEVNQ1MxNCA9IDB4MWEsCisJREVTQ19SQVRFTUNTMTUgPSAweDFiLAorCURFU0NfUkFURU1DUzE1X1NHID0gMHgxYywKKwlERVNDX1JBVEVNQ1MzMiA9IDB4MjAsCisKKwlERVNDX1JBVEVWSFQxU1NfTUNTMCA9IDB4MmMsCisJREVTQ19SQVRFVkhUMVNTX01DUzEgPSAweDJkLAorCURFU0NfUkFURVZIVDFTU19NQ1MyID0gMHgyZSwKKwlERVNDX1JBVEVWSFQxU1NfTUNTMyA9IDB4MmYsCisJREVTQ19SQVRFVkhUMVNTX01DUzQgPSAweDMwLAorCURFU0NfUkFURVZIVDFTU19NQ1M1ID0gMHgzMSwKKwlERVNDX1JBVEVWSFQxU1NfTUNTNiA9IDB4MzIsCisJREVTQ19SQVRFVkhUMVNTX01DUzcgPSAweDMzLAorCURFU0NfUkFURVZIVDFTU19NQ1M4ID0gMHgzNCwKKwlERVNDX1JBVEVWSFQxU1NfTUNTOSA9IDB4MzUsCisJREVTQ19SQVRFVkhUMlNTX01DUzAgPSAweDM2LAorCURFU0NfUkFURVZIVDJTU19NQ1MxID0gMHgzNywKKwlERVNDX1JBVEVWSFQyU1NfTUNTMiA9IDB4MzgsCisJREVTQ19SQVRFVkhUMlNTX01DUzMgPSAweDM5LAorCURFU0NfUkFURVZIVDJTU19NQ1M0ID0gMHgzYSwKKwlERVNDX1JBVEVWSFQyU1NfTUNTNSA9IDB4M2IsCisJREVTQ19SQVRFVkhUMlNTX01DUzYgPSAweDNjLAorCURFU0NfUkFURVZIVDJTU19NQ1M3ID0gMHgzZCwKKwlERVNDX1JBVEVWSFQyU1NfTUNTOCA9IDB4M2UsCisJREVTQ19SQVRFVkhUMlNTX01DUzkgPSAweDNmLAogfTsKIAogZW51bSBydGxfdmFyX21hcCB7CkBAIC0yMTYxLDYgKzIxODIsNyBAQAogCXZvaWQgKCphZGRfd293bGFuX3BhdHRlcm4pKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgIHN0cnVjdCBydGxfd293X3BhdHRlcm4gKnJ0bF9wYXR0ZXJuLAogCQkJCSAgIHU4IGluZGV4KTsKKwl1MTYgKCpnZXRfYXZhaWxhYmxlX2Rlc2MpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCBxX2lkeCk7CiB9OwogCiBzdHJ1Y3QgcnRsX2ludGZfb3BzIHsKQEAgLTIyNDIsNiArMjI2NCw3IEBACiAJY2hhciAqbmFtZTsKIAljaGFyICpmd19uYW1lOwogCWNoYXIgKmFsdF9md19uYW1lOworCWNoYXIgKndvd2xhbl9md19uYW1lOwogCXN0cnVjdCBydGxfaGFsX29wcyAqb3BzOwogCXN0cnVjdCBydGxfbW9kX3BhcmFtcyAqbW9kX3BhcmFtczsKIAlzdHJ1Y3QgcnRsX2hhbF91c2JpbnRfY2ZnICp1c2JfaW50ZXJmYWNlX2NmZzsKQEAgLTIzOTAsOCArMjQxMyw2IEBACiAJdTggcHJlX2NjYXN0YXRlOwogCXU4IGN1cl9jY2FzYXRlOwogCXU4IGxhcmdlX2ZhX2hpdDsKLQl1OCBkaWdfZHluYW1pY19taW47Ci0JdTggZGlnX2R5bmFtaWNfbWluXzE7CiAJdTggZm9yYmlkZGVuX2lnaTsKIAl1OCBkaWdfc3RhdGU7CiAJdTggZGlnX2hpZ2hwd3JzdGF0ZTsKQEAgLTI1MTgsOCArMjUzOSw2IEBACiAKIHN0cnVjdCBydGxfcHJpdiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0JLyogVXNlZCB0byBsb2FkIGEgc2Vjb25kIGZpcm13YXJlICovCi0Jdm9pZCAoKnJ0bF9md19zZWNvbmRfY2IpKHN0cnVjdCBydGxfcHJpdiAqcnRscHJpdik7CiAJc3RydWN0IGNvbXBsZXRpb24gZmlybXdhcmVfbG9hZGluZ19jb21wbGV0ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IHJ0bF9wcml2ICpidWRkeV9wcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxMjUxL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTI1MS9tYWluLmMKaW5kZXggMGIzMGE3Yi4uZDRiYTAwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxMjUxL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDEyNTEvbWFpbi5jCkBAIC01MDAsNiArNTAwLDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogCXZpZi0+ZHJpdmVyX2ZsYWdzIHw9IElFRUU4MDIxMV9WSUZfQkVBQ09OX0ZJTFRFUiB8CisJCQkgICAgIElFRUU4MDIxMV9WSUZfU1VQUE9SVFNfVUFQU0QgfAogCQkJICAgICBJRUVFODAyMTFfVklGX1NVUFBPUlRTX0NRTV9SU1NJOwogCiAJd2wxMjUxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgYWRkIGludGVyZmFjZSB0eXBlICVkIG1hYyAlcE0iLApAQCAtMTQ4MCw5ICsxNDgxLDcgQEAKIAkvKiB1bml0IHVzICovCiAJLyogRklYTUU6IGZpbmQgYSBwcm9wZXIgdmFsdWUgKi8KIAotCXdsLT5ody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8Ci0JCUlFRUU4MDIxMV9IV19TVVBQT1JUU19QUyB8Ci0JCUlFRUU4MDIxMV9IV19TVVBQT1JUU19VQVBTRDsKKwl3bC0+aHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfCBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFM7CiAKIAl3bC0+aHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAogCQkJCQkgQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTJ4eC9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDEyeHgvbWFpbi5jCmluZGV4IGQ2ZDBkNmQuLjE0NGQxZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTJ4eC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxMnh4L21haW4uYwpAQCAtMjUwLDYgKzI1MCw3IEBACiAJCS5rZWVwX2FsaXZlX2ludGVydmFsICAgICAgICAgPSA1NTAwMCwKIAkJLm1heF9saXN0ZW5faW50ZXJ2YWwgICAgICAgICA9IDIwLAogCQkuc3RhX3NsZWVwX2F1dGggICAgICAgICAgICAgID0gV0wxMjcxX1BTTV9JTExFR0FMLAorCQkuc3VzcGVuZF9yeF9iYV9hY3Rpdml0eSAgICAgID0gMCwKIAl9LAogCS5pdHJpbSA9IHsKIAkJLmVuYWJsZSA9IGZhbHNlLApAQCAtMTcyOCw2ICsxNzI5LDkgQEAKIAkuY29udmVydF9od2FkZHIJCT0gd2wxMnh4X2NvbnZlcnRfaHdhZGRyLAogCS5sbmtfaGlnaF9wcmlvCQk9IHdsMTJ4eF9sbmtfaGlnaF9wcmlvLAogCS5sbmtfbG93X3ByaW8JCT0gd2wxMnh4X2xua19sb3dfcHJpbywKKwkuaW50ZXJydXB0X25vdGlmeQk9IE5VTEwsCisJLnJ4X2JhX2ZpbHRlcgkJPSBOVUxMLAorCS5hcF9zbGVlcAkJPSBOVUxMLAogfTsKIAogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCB3bDEyeHhfaHRfY2FwID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxOHh4L2FjeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxOHh4L2FjeC5jCmluZGV4IGExNjliYjUuLjY3ZjJhMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTh4eC9hY3guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDE4eHgvYWN4LmMKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICIuLi93bGNvcmUvYWN4LmgiCiAKICNpbmNsdWRlICJhY3guaCIKKyNpbmNsdWRlICJ3bDE4eHguaCIKIAogaW50IHdsMTh4eF9hY3hfaG9zdF9pZl9jZmdfYml0bWFwKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgaG9zdF9jZmdfYml0bWFwLAogCQkJCSAgdTMyIHNkaW9fYmxrX3NpemUsIHUzMiBleHRyYV9tZW1fYmxrcywKQEAgLTE5NCwzICsxOTUsOTAgQEAKIAlrZnJlZShhY3gpOwogCXJldHVybiByZXQ7CiB9CisKKy8qCisgKiBXaGVuIHRoZSBob3N0IGlzIHN1c3BlbmRlZCwgd2UgZG9uJ3Qgd2FudCB0byBnZXQgYW55IGZhc3QtbGluay9QU00KKyAqIG5vdGlmaWNhdGlvbnMKKyAqLworaW50IHdsMTh4eF9hY3hfaW50ZXJydXB0X25vdGlmeV9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkJICAgICAgIGJvb2wgYWN0aW9uKQoreworCXN0cnVjdCB3bDE4eHhfYWN4X2ludGVycnVwdF9ub3RpZnkgKmFjeDsKKwlpbnQgcmV0ID0gMDsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPmVuYWJsZSA9IGFjdGlvbjsKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX0lOVEVSUlVQVF9OT1RJRlksIGFjeCwgc2l6ZW9mKCphY3gpKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiYWN4IGludGVycnVwdCBub3RpZnkgc2V0dGluZyBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogV2hlbiB0aGUgaG9zdCBpcyBzdXNwZW5kZWQsIHdlIGNhbiBjb25maWd1cmUgdGhlIEZXIHRvIGRpc2FibGUgUlggQkEKKyAqIG5vdGlmaWNhdGlvbnMuCisgKi8KK2ludCB3bDE4eHhfYWN4X3J4X2JhX2ZpbHRlcihzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBhY3Rpb24pCit7CisJc3RydWN0IHdsMTh4eF9hY3hfcnhfYmFfZmlsdGVyICphY3g7CisJaW50IHJldCA9IDA7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5lbmFibGUgPSAodTMyKWFjdGlvbjsKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1JYX0JBX0ZJTFRFUiwgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJhY3ggcnggYmEgYWN0aXZpdHkgZmlsdGVyIHNldHRpbmcgZmFpbGVkOiAlZCIsCisJCQkgICAgICAgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxOHh4X2FjeF9hcF9zbGVlcChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlzdHJ1Y3Qgd2wxOHh4X3ByaXYgKnByaXYgPSB3bC0+cHJpdjsKKwlzdHJ1Y3QgYWN4X2FwX3NsZWVwX2NmZyAqYWN4OworCXN0cnVjdCBjb25mX2FwX3NsZWVwX3NldHRpbmdzICpjb25mID0gJnByaXYtPmNvbmYuYXBfc2xlZXA7CisJaW50IHJldDsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggY29uZmlnIGFwIHNsZWVwIik7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhY3gpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJYWN4LT5pZGxlX2R1dHlfY3ljbGUgPSBjb25mLT5pZGxlX2R1dHlfY3ljbGU7CisJYWN4LT5jb25uZWN0ZWRfZHV0eV9jeWNsZSA9IGNvbmYtPmNvbm5lY3RlZF9kdXR5X2N5Y2xlOworCWFjeC0+bWF4X3N0YXRpb25zX3RocmVzaCA9IGNvbmYtPm1heF9zdGF0aW9uc190aHJlc2g7CisJYWN4LT5pZGxlX2Nvbm5fdGhyZXNoID0gY29uZi0+aWRsZV9jb25uX3RocmVzaDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQVBfU0xFRVBfQ0ZHLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImFjeCBjb25maWcgYXAtc2xlZXAgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTh4eC9hY3guaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTh4eC9hY3guaAppbmRleCAwZTYzNmRlLi40YWZjY2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDE4eHgvYWN4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxOHh4L2FjeC5oCkBAIC0zMiw3ICszMiwxMCBAQAogCUFDWF9TSU1fQ09ORklHCQkJID0gMHgwMDUzLAogCUFDWF9DTEVBUl9TVEFUSVNUSUNTCQkgPSAweDAwNTQsCiAJQUNYX0FVVE9fUlhfU1RSRUFNSU5HCQkgPSAweDAwNTUsCi0JQUNYX1BFRVJfQ0FQCQkJID0gMHgwMDU2CisJQUNYX1BFRVJfQ0FQCQkJID0gMHgwMDU2LAorCUFDWF9JTlRFUlJVUFRfTk9USUZZCQkgPSAweDAwNTcsCisJQUNYX1JYX0JBX0ZJTFRFUgkJID0gMHgwMDU4LAorCUFDWF9BUF9TTEVFUF9DRkcgICAgICAgICAgICAgICAgID0gMHgwMDU5CiB9OwogCiAvKiBudW1iZXJzIG9mIGJpdHMgdGhlIGxlbmd0aCBmaWVsZCB0YWtlcyAoYWRkIDEgZm9yIHRoZSBhY3R1YWwgbnVtYmVyKSAqLwpAQCAtMzI2LDYgKzMyOSw0NCBAQAogCXU4IHBhZGRpbmc7CiB9IF9fcGFja2VkOwogCisvKgorICogQUNYX0lOVEVSUlVQVF9OT1RJRlkKKyAqIGVuYWJsZS9kaXNhYmxlIGZhc3QtbGluay9QU00gbm90aWZpY2F0aW9uIGZyb20gRlcKKyAqLworc3RydWN0IHdsMTh4eF9hY3hfaW50ZXJydXB0X25vdGlmeSB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCXUzMiBlbmFibGU7Cit9OworCisvKgorICogQUNYX1JYX0JBX0ZJTFRFUgorICogZW5hYmxlL2Rpc2FibGUgUlggQkEgZmlsdGVyaW5nIGluIEZXCisgKi8KK3N0cnVjdCB3bDE4eHhfYWN4X3J4X2JhX2ZpbHRlciB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCXUzMiBlbmFibGU7Cit9OworCitzdHJ1Y3QgYWN4X2FwX3NsZWVwX2NmZyB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCS8qIER1dHkgQ3ljbGUgKDIwLTgwJSBvZiBzdGF5aW5nIEF3YWtlKSBmb3IgSURMRSBBUAorCSAqICgwOiBkaXNhYmxlKQorCSAqLworCXU4IGlkbGVfZHV0eV9jeWNsZTsKKwkvKiBEdXR5IEN5Y2xlICgyMC04MCUgb2Ygc3RheWluZyBBd2FrZSkgZm9yIENvbm5lY3RlZCBBUAorCSAqICgwOiBkaXNhYmxlKQorCSAqLworCXU4IGNvbm5lY3RlZF9kdXR5X2N5Y2xlOworCS8qIE1heGltdW0gc3RhdGlvbnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBjb25uZWN0ZWQgdG8gQVAKKwkgKiAgKDI1NTogbm8gbGltaXQpCisJICovCisJdTggbWF4X3N0YXRpb25zX3RocmVzaDsKKwkvKiBUaW1lb3V0IHRpbGwgZW5hYmxpbmcgdGhlIFNsZWVwIE1lY2hhbmlzbSBhZnRlciBkYXRhIHN0b3BzCisJICogW3VuaXQ6IDEwMCBtc2VjXQorCSAqLworCXU4IGlkbGVfY29ubl90aHJlc2g7Cit9IF9fcGFja2VkOworCiBpbnQgd2wxOHh4X2FjeF9ob3N0X2lmX2NmZ19iaXRtYXAoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBob3N0X2NmZ19iaXRtYXAsCiAJCQkJICB1MzIgc2Rpb19ibGtfc2l6ZSwgdTMyIGV4dHJhX21lbV9ibGtzLAogCQkJCSAgdTMyIGxlbl9maWVsZF9zaXplKTsKQEAgLTMzNiw1ICszNzcsOCBAQAogCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfY2FwLAogCQkJICAgIGJvb2wgYWxsb3dfaHRfb3BlcmF0aW9uLAogCQkJICAgIHUzMiByYXRlX3NldCwgdTggaGxpZCk7CitpbnQgd2wxOHh4X2FjeF9pbnRlcnJ1cHRfbm90aWZ5X2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgYm9vbCBhY3Rpb24pOworaW50IHdsMTh4eF9hY3hfcnhfYmFfZmlsdGVyKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGFjdGlvbik7CitpbnQgd2wxOHh4X2FjeF9hcF9zbGVlcChzdHJ1Y3Qgd2wxMjcxICp3bCk7CiAKICNlbmRpZiAvKiBfX1dMMThYWF9BQ1hfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDE4eHgvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDE4eHgvY21kLmMKaW5kZXggNDRmMGIyMC4uYThkMTc2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxOHh4L2NtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTh4eC9jbWQuYwpAQCAtMzMsNyArMzMsOCBAQAogCXUzMiBzdXBwb3J0ZWRfcmF0ZXM7CiAJaW50IHJldDsKIAotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJjbWQgY2hhbm5lbCBzd2l0Y2giKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiY21kIGNoYW5uZWwgc3dpdGNoIChjb3VudD0lZCkiLAorCQkgICAgIGNoX3N3aXRjaC0+Y291bnQpOwogCiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwogCWlmICghY21kKSB7CkBAIC02MCw4ICs2MSwxMiBAQAogCQlnb3RvIG91dF9mcmVlOwogCX0KIAotCXN1cHBvcnRlZF9yYXRlcyA9IENPTkZfVFhfRU5BQkxFRF9SQVRFUyB8IENPTkZfVFhfTUNTX1JBVEVTIHwKLQkJCSAgd2xjb3JlX2h3X3N0YV9nZXRfYXBfcmF0ZV9tYXNrKHdsLCB3bHZpZik7CisJc3VwcG9ydGVkX3JhdGVzID0gQ09ORl9UWF9FTkFCTEVEX1JBVEVTIHwgQ09ORl9UWF9NQ1NfUkFURVM7CisJaWYgKHdsdmlmLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9TVEFfQlNTKQorCQlzdXBwb3J0ZWRfcmF0ZXMgfD0gd2xjb3JlX2h3X3N0YV9nZXRfYXBfcmF0ZV9tYXNrKHdsLCB3bHZpZik7CisJZWxzZQorCQlzdXBwb3J0ZWRfcmF0ZXMgfD0KKwkJCXdsY29yZV9od19hcF9nZXRfbWltb193aWRlX3JhdGVfbWFzayh3bCwgd2x2aWYpOwogCWlmICh3bHZpZi0+cDJwKQogCQlzdXBwb3J0ZWRfcmF0ZXMgJj0gfkNPTkZfVFhfQ0NLX1JBVEVTOwogCWNtZC0+bG9jYWxfc3VwcG9ydGVkX3JhdGVzID0gY3B1X3RvX2xlMzIoc3VwcG9ydGVkX3JhdGVzKTsKQEAgLTE2NywzICsxNzIsODUgQEAKIG91dDoKIAlyZXR1cm4gcmV0OwogfQorCitpbnQgd2wxOHh4X2NtZF9zZXRfY2FjKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgd2wxMnh4X3ZpZiAqd2x2aWYsIGJvb2wgc3RhcnQpCit7CisJc3RydWN0IHdsY29yZV9jbWRfY2FjX3N0YXJ0ICpjbWQ7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQ01ELCAiY21kIGNhYyAoY2hhbm5lbCAlZCkgJXMiLAorCQkgICAgIHdsdmlmLT5jaGFubmVsLCBzdGFydCA/ICJzdGFydCIgOiAic3RvcCIpOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+cm9sZV9pZCA9IHdsdmlmLT5yb2xlX2lkOworCWNtZC0+Y2hhbm5lbCA9IHdsdmlmLT5jaGFubmVsOworCWlmICh3bHZpZi0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQljbWQtPmJhbmQgPSBXTENPUkVfQkFORF81R0haOworCWNtZC0+YmFuZHdpZHRoID0gd2xjb3JlX2dldF9uYXRpdmVfY2hhbm5lbF90eXBlKHdsdmlmLT5jaGFubmVsX3R5cGUpOworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLAorCQkJICAgICAgc3RhcnQgPyBDTURfQ0FDX1NUQVJUIDogQ01EX0NBQ19TVE9QLAorCQkJICAgICAgY21kLCBzaXplb2YoKmNtZCksIDApOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV9lcnJvcigiZmFpbGVkIHRvIHNlbmQgY2FjIGNvbW1hbmQiKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKK291dF9mcmVlOgorCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTh4eF9jbWRfcmFkYXJfZGV0ZWN0aW9uX2RlYnVnKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBjaGFubmVsKQoreworCXN0cnVjdCB3bDE4eHhfY21kX2Rmc19yYWRhcl9kZWJ1ZyAqY21kOworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCByYWRhciBkZXRlY3Rpb24gZGVidWcgKGNoYW4gJWQpIiwKKwkJICAgICBjaGFubmVsKTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmNoYW5uZWwgPSBjaGFubmVsOworCisJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBDTURfREZTX1JBREFSX0RFVEVDVElPTl9ERUJVRywKKwkJCSAgICAgIGNtZCwgc2l6ZW9mKCpjbWQpLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfZXJyb3IoImZhaWxlZCB0byBzZW5kIHJhZGFyIGRldGVjdGlvbiBkZWJ1ZyBjb21tYW5kIik7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCitvdXRfZnJlZToKKwlrZnJlZShjbWQpOworCXJldHVybiByZXQ7Cit9CisKK2ludCB3bDE4eHhfY21kX2Rmc19tYXN0ZXJfcmVzdGFydChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHdsMTJ4eF92aWYgKndsdmlmKQoreworCXN0cnVjdCB3bDE4eHhfY21kX2Rmc19tYXN0ZXJfcmVzdGFydCAqY21kOworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwgImNtZCBkZnMgbWFzdGVyIHJlc3RhcnQgKHJvbGUgJWQpIiwKKwkJICAgICB3bHZpZi0+cm9sZV9pZCk7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5yb2xlX2lkID0gd2x2aWYtPnJvbGVfaWQ7CisKKwlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9ERlNfTUFTVEVSX1JFU1RBUlQsCisJCQkgICAgICBjbWQsIHNpemVvZigqY21kKSwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJmYWlsZWQgdG8gc2VuZCBkZnMgbWFzdGVyIHJlc3RhcnQgY29tbWFuZCIpOworCQlnb3RvIG91dF9mcmVlOworCX0KK291dF9mcmVlOgorCWtmcmVlKGNtZCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTh4eC9jbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTh4eC9jbWQuaAppbmRleCA5MjQ5OWUyLi43Zjk0NDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDE4eHgvY21kLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxOHh4L2NtZC5oCkBAIC01OSw2ICs1OSwzMCBAQAogCXU4IGtleVsxNl07CiB9IF9fcGFja2VkOwogCitzdHJ1Y3Qgd2wxOHh4X2NtZF9kZnNfcmFkYXJfZGVidWcgeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwl1OCBjaGFubmVsOworCXU4IHBhZGRpbmdbM107Cit9IF9fcGFja2VkOworCitzdHJ1Y3Qgd2wxOHh4X2NtZF9kZnNfbWFzdGVyX3Jlc3RhcnQgeworCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CisKKwl1OCByb2xlX2lkOworCXU4IHBhZGRpbmdbM107Cit9IF9fcGFja2VkOworCisvKiBjYWNfc3RhcnQgYW5kIGNhY19zdG9wIHNoYXJlIHRoZSBzYW1lIHBhcmFtcyAqLworc3RydWN0IHdsY29yZV9jbWRfY2FjX3N0YXJ0IHsKKwlzdHJ1Y3Qgd2wxMjcxX2NtZF9oZWFkZXIgaGVhZGVyOworCisJdTggcm9sZV9pZDsKKwl1OCBjaGFubmVsOworCXU4IGJhbmQ7CisJdTggYmFuZHdpZHRoOworfSBfX3BhY2tlZDsKKwogaW50IHdsMTh4eF9jbWRfY2hhbm5lbF9zd2l0Y2goc3RydWN0IHdsMTI3MSAqd2wsCiAJCQkgICAgICBzdHJ1Y3Qgd2wxMnh4X3ZpZiAqd2x2aWYsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoICpjaF9zd2l0Y2gpOwpAQCAtNjYsNCArOTAsNyBAQAogaW50IHdsMTh4eF9jbWRfc21hcnRfY29uZmlnX3N0b3Aoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTh4eF9jbWRfc21hcnRfY29uZmlnX3NldF9ncm91cF9rZXkoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBncm91cF9pZCwKIAkJCQkJICB1OCBrZXlfbGVuLCB1OCAqa2V5KTsKK2ludCB3bDE4eHhfY21kX3NldF9jYWMoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCB3bDEyeHhfdmlmICp3bHZpZiwgYm9vbCBzdGFydCk7CitpbnQgd2wxOHh4X2NtZF9yYWRhcl9kZXRlY3Rpb25fZGVidWcoc3RydWN0IHdsMTI3MSAqd2wsIHU4IGNoYW5uZWwpOworaW50IHdsMTh4eF9jbWRfZGZzX21hc3Rlcl9yZXN0YXJ0KHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgd2wxMnh4X3ZpZiAqd2x2aWYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDE4eHgvY29uZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxOHh4L2NvbmYuaAppbmRleCBlMzQzMDJlLi43MWYxZWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDE4eHgvY29uZi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTh4eC9jb25mLmgKQEAgLTIzLDcgKzIzLDcgQEAKICNkZWZpbmUgX19XTDE4WFhfQ09ORl9IX18KIAogI2RlZmluZSBXTDE4WFhfQ09ORl9NQUdJQwkweDEwZTEwMGNhCi0jZGVmaW5lIFdMMThYWF9DT05GX1ZFUlNJT04JKFdMQ09SRV9DT05GX1ZFUlNJT04gfCAweDAwMDYpCisjZGVmaW5lIFdMMThYWF9DT05GX1ZFUlNJT04JKFdMQ09SRV9DT05GX1ZFUlNJT04gfCAweDAwMDcpCiAjZGVmaW5lIFdMMThYWF9DT05GX01BU0sJMHgwMDAwZmZmZgogI2RlZmluZSBXTDE4WFhfQ09ORl9TSVpFCShXTENPUkVfQ09ORl9TSVpFICsgXAogCQkJCSBzaXplb2Yoc3RydWN0IHdsMTh4eF9wcml2X2NvbmYpKQpAQCAtMTEwLDEyICsxMTAsMzMgQEAKIAl1OCBtb2RlOwogfSBfX3BhY2tlZDsKIAorc3RydWN0IGNvbmZfYXBfc2xlZXBfc2V0dGluZ3MgeworCS8qIER1dHkgQ3ljbGUgKDIwLTgwJSBvZiBzdGF5aW5nIEF3YWtlKSBmb3IgSURMRSBBUAorCSAqICgwOiBkaXNhYmxlKQorCSAqLworCXU4IGlkbGVfZHV0eV9jeWNsZTsKKwkvKiBEdXR5IEN5Y2xlICgyMC04MCUgb2Ygc3RheWluZyBBd2FrZSkgZm9yIENvbm5lY3RlZCBBUAorCSAqICgwOiBkaXNhYmxlKQorCSAqLworCXU4IGNvbm5lY3RlZF9kdXR5X2N5Y2xlOworCS8qIE1heGltdW0gc3RhdGlvbnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBjb25uZWN0ZWQgdG8gQVAKKwkgKiAgKDI1NTogbm8gbGltaXQpCisJICovCisJdTggbWF4X3N0YXRpb25zX3RocmVzaDsKKwkvKiBUaW1lb3V0IHRpbGwgZW5hYmxpbmcgdGhlIFNsZWVwIE1lY2hhbmlzbSBhZnRlciBkYXRhIHN0b3BzCisJICogW3VuaXQ6IDEwMCBtc2VjXQorCSAqLworCXU4IGlkbGVfY29ubl90aHJlc2g7Cit9IF9fcGFja2VkOworCiBzdHJ1Y3Qgd2wxOHh4X3ByaXZfY29uZiB7CiAJLyogTW9kdWxlIHBhcmFtcyBzdHJ1Y3R1cmVzICovCiAJc3RydWN0IHdsMTh4eF9odF9zZXR0aW5ncyBodDsKIAogCS8qIHRoaXMgc3RydWN0dXJlIGlzIGNvcGllZCB3aG9sZXNhbGUgdG8gRlcgKi8KIAlzdHJ1Y3Qgd2wxOHh4X21hY19hbmRfcGh5X3BhcmFtcyBwaHk7CisKKwlzdHJ1Y3QgY29uZl9hcF9zbGVlcF9zZXR0aW5ncyBhcF9zbGVlcDsKIH0gX19wYWNrZWQ7CiAKICNlbmRpZiAvKiBfX1dMMThYWF9DT05GX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxOHh4L2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTh4eC9kZWJ1Z2ZzLmMKaW5kZXggN2YxNjY5Yy4uYzkzZmFlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxOHh4L2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDE4eHgvZGVidWdmcy5jCkBAIC0yMiw5ICsyMiwxMiBAQAogCiAjaW5jbHVkZSAiLi4vd2xjb3JlL2RlYnVnZnMuaCIKICNpbmNsdWRlICIuLi93bGNvcmUvd2xjb3JlLmgiCisjaW5jbHVkZSAiLi4vd2xjb3JlL2RlYnVnLmgiCisjaW5jbHVkZSAiLi4vd2xjb3JlL3BzLmgiCiAKICNpbmNsdWRlICJ3bDE4eHguaCIKICNpbmNsdWRlICJhY3guaCIKKyNpbmNsdWRlICJjbWQuaCIKICNpbmNsdWRlICJkZWJ1Z2ZzLmgiCiAKICNkZWZpbmUgV0wxOFhYX0RFQlVHRlNfRldTVEFUU19GSUxFKGEsIGIsIGMpIFwKQEAgLTIzOSw2ICsyNDIsNDUgQEAKIAkubGxzZWVrID0gZGVmYXVsdF9sbHNlZWssCiB9OwogCitzdGF0aWMgc3NpemVfdCByYWRhcl9kZXRlY3Rpb25fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcmV0OworCXU4IGNoYW5uZWw7CisKKwlyZXQgPSBrc3RydG91OF9mcm9tX3VzZXIodXNlcl9idWYsIGNvdW50LCAxMCwgJmNoYW5uZWwpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJpbGxlZ2FsIGNoYW5uZWwiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgIT0gV0xDT1JFX1NUQVRFX09OKSkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxOHh4X2NtZF9yYWRhcl9kZXRlY3Rpb25fZGVidWcod2wsIGNoYW5uZWwpOworCWlmIChyZXQgPCAwKQorCQljb3VudCA9IHJldDsKKworCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJhZGFyX2RldGVjdGlvbl9vcHMgPSB7CisJLndyaXRlID0gcmFkYXJfZGV0ZWN0aW9uX3dyaXRlLAorCS5vcGVuID0gc2ltcGxlX29wZW4sCisJLmxsc2VlayA9IGRlZmF1bHRfbGxzZWVrLAorfTsKKwogaW50IHdsMTh4eF9kZWJ1Z2ZzX2FkZF9maWxlcyhzdHJ1Y3Qgd2wxMjcxICp3bCwKIAkJCSAgICAgc3RydWN0IGRlbnRyeSAqcm9vdGRpcikKIHsKQEAgLTM5MCw2ICs0MzIsNyBAQAogCURFQlVHRlNfRldTVEFUU19BREQobWVtLCBmd19nZW5fZnJlZV9tZW1fYmxrcyk7CiAKIAlERUJVR0ZTX0FERChjb25mLCBtb2RkaXIpOworCURFQlVHRlNfQUREKHJhZGFyX2RldGVjdGlvbiwgbW9kZGlyKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDE4eHgvZXZlbnQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTh4eC9ldmVudC5jCmluZGV4IGViMTg0OGUuLmMyOGYwNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTh4eC9ldmVudC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTh4eC9ldmVudC5jCkBAIC00Nyw2ICs0NywxOSBAQAogCXJldHVybiB3bGNvcmVfY21kX3dhaXRfZm9yX2V2ZW50X29yX3RpbWVvdXQod2wsIGxvY2FsX2V2ZW50LCB0aW1lb3V0KTsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIgKndsMTh4eF9yYWRhcl90eXBlX2RlY29kZSh1OCByYWRhcl90eXBlKQoreworCXN3aXRjaCAocmFkYXJfdHlwZSkgeworCWNhc2UgUkFEQVJfVFlQRV9SRUdVTEFSOgorCQlyZXR1cm4gIlJFR1VMQVIiOworCWNhc2UgUkFEQVJfVFlQRV9DSElSUDoKKwkJcmV0dXJuICJDSElSUCI7CisJY2FzZSBSQURBUl9UWVBFX05PTkU6CisJZGVmYXVsdDoKKwkJcmV0dXJuICJOL0EiOworCX0KK30KKwogc3RhdGljIGludCB3bGNvcmVfc21hcnRfY29uZmlnX3N5bmNfZXZlbnQoc3RydWN0IHdsMTI3MSAqd2wsIHU4IHN5bmNfY2hhbm5lbCwKIAkJCQkJICB1OCBzeW5jX2JhbmQpCiB7CkBAIC0xMTUsNiArMTI4LDE0IEBACiAJCQl3bDE4eHhfc2Nhbl9jb21wbGV0ZWQod2wsIHdsLT5zY2FuX3dsdmlmKTsKIAl9CiAKKwlpZiAodmVjdG9yICYgUkFEQVJfREVURUNURURfRVZFTlRfSUQpIHsKKwkJd2wxMjcxX2luZm8oInJhZGFyIGV2ZW50OiBjaGFubmVsICVkIHR5cGUgJXMiLAorCQkJICAgIG1ib3gtPnJhZGFyX2NoYW5uZWwsCisJCQkgICAgd2wxOHh4X3JhZGFyX3R5cGVfZGVjb2RlKG1ib3gtPnJhZGFyX3R5cGUpKTsKKworCQlpZWVlODAyMTFfcmFkYXJfZGV0ZWN0ZWQod2wtPmh3KTsKKwl9CisKIAlpZiAodmVjdG9yICYgUEVSSU9ESUNfU0NBTl9SRVBPUlRfRVZFTlRfSUQpIHsKIAkJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULAogCQkJICAgICAiUEVSSU9ESUNfU0NBTl9SRVBPUlRfRVZFTlQgKHJlc3VsdHMgJWQpIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTh4eC9ldmVudC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxOHh4L2V2ZW50LmgKaW5kZXggMDY4MDMxMi4uMjY2ZWU4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxOHh4L2V2ZW50LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxOHh4L2V2ZW50LmgKQEAgLTQyLDYgKzQyLDEyIEBACiAJU01BUlRfQ09ORklHX0RFQ09ERV9FVkVOVF9JRAkJID0gQklUKDIzKSwKIH07CiAKK2VudW0gd2wxOHh4X3JhZGFyX3R5cGVzIHsKKwlSQURBUl9UWVBFX05PTkUsCisJUkFEQVJfVFlQRV9SRUdVTEFSLAorCVJBREFSX1RZUEVfQ0hJUlAKK307CisKIHN0cnVjdCB3bDE4eHhfZXZlbnRfbWFpbGJveCB7CiAJX19sZTMyIGV2ZW50c192ZWN0b3I7CiAKQEAgLTgzLDEzICs4OSwxOSBAQAogCXU4IHNjX3Rva2VuX2xlbjsKIAl1OCBwYWRkaW5nMTsKIAl1OCBzY19zc2lkWzMyXTsKLQl1OCBzY19wd2RbMzJdOworCXU4IHNjX3B3ZFs2NF07CiAJdTggc2NfdG9rZW5bMzJdOwogCiAJLyogc21hcnQgY29uZmlnIHN5bmMgY2hhbm5lbCAqLwogCXU4IHNjX3N5bmNfY2hhbm5lbDsKIAl1OCBzY19zeW5jX2JhbmQ7CiAJdTggcGFkZGluZzJbMl07CisKKwkvKiByYWRhciBkZXRlY3QgKi8KKwl1OCByYWRhcl9jaGFubmVsOworCXU4IHJhZGFyX3R5cGU7CisKKwl1OCBwYWRkaW5nM1syXTsKIH0gX19wYWNrZWQ7CiAKIGludCB3bDE4eHhfd2FpdF9mb3JfZXZlbnQoc3RydWN0IHdsMTI3MSAqd2wsIGVudW0gd2xjb3JlX3dhaXRfZXZlbnQgZXZlbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDE4eHgvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxOHh4L21haW4uYwppbmRleCA4ZTU2MjYxLi43MTdjNGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDE4eHgvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTh4eC9tYWluLmMKQEAgLTM3OCw2ICszNzgsNyBAQAogCQkua2VlcF9hbGl2ZV9pbnRlcnZhbCAgICAgICAgID0gNTUwMDAsCiAJCS5tYXhfbGlzdGVuX2ludGVydmFsICAgICAgICAgPSAyMCwKIAkJLnN0YV9zbGVlcF9hdXRoICAgICAgICAgICAgICA9IFdMMTI3MV9QU01fSUxMRUdBTCwKKwkJLnN1c3BlbmRfcnhfYmFfYWN0aXZpdHkgICAgICA9IDAsCiAJfSwKIAkuaXRyaW0gPSB7CiAJCS5lbmFibGUgPSBmYWxzZSwKQEAgLTU2Nyw2ICs1NjgsMTIgQEAKIAkJLmhpZ2hfcG93ZXJfdmFsXzJuZAkJPSAweGZmLAogCQkudHhfcmZfbWFyZ2luCQkJPSAxLAogCX0sCisJLmFwX3NsZWVwID0geyAgICAgICAgICAgICAgIC8qIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KKwkJLmlkbGVfZHV0eV9jeWNsZSAgICAgICAgPSAwLAorCQkuY29ubmVjdGVkX2R1dHlfY3ljbGUgICA9IDAsCisJCS5tYXhfc3RhdGlvbnNfdGhyZXNoICAgID0gMCwKKwkJLmlkbGVfY29ubl90aHJlc2ggICAgICAgPSAwLAorCX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHdsY29yZV9wYXJ0aXRpb25fc2V0IHdsMTh4eF9wdGFibGVbUEFSVF9UQUJMRV9MRU5dID0gewpAQCAtNjQ4LDcgKzY1NSw3IEBACiB9OwogCiAvKiBUT0RPOiBtYXliZSBtb3ZlIHRvIGEgbmV3IGhlYWRlciBmaWxlPyAqLwotI2RlZmluZSBXTDE4WFhfRldfTkFNRSAidGktY29ubmVjdGl2aXR5L3dsMTh4eC1mdy0zLmJpbiIKKyNkZWZpbmUgV0wxOFhYX0ZXX05BTUUgInRpLWNvbm5lY3Rpdml0eS93bDE4eHgtZnctNC5iaW4iCiAKIHN0YXRpYyBpbnQgd2wxOHh4X2lkZW50aWZ5X2NoaXAoc3RydWN0IHdsMTI3MSAqd2wpCiB7CkBAIC05ODMsNiArOTkwLDcgQEAKIAogCXdsLT5ldmVudF9tYXNrID0gQlNTX0xPU1NfRVZFTlRfSUQgfAogCQlTQ0FOX0NPTVBMRVRFX0VWRU5UX0lEIHwKKwkJUkFEQVJfREVURUNURURfRVZFTlRfSUQgfAogCQlSU1NJX1NOUl9UUklHR0VSXzBfRVZFTlRfSUQgfAogCQlQRVJJT0RJQ19TQ0FOX0NPTVBMRVRFX0VWRU5UX0lEIHwKIAkJUEVSSU9ESUNfU0NBTl9SRVBPUlRfRVZFTlRfSUQgfApAQCAtMTU1OSwyNiArMTU2NywxOSBAQAogfQogCiBzdGF0aWMgdm9pZCB3bDE4eHhfc3RhX3JjX3VwZGF0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwKLQkJCQkgc3RydWN0IHdsMTJ4eF92aWYgKndsdmlmLAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkJCSB1MzIgY2hhbmdlZCkKKwkJCQkgc3RydWN0IHdsMTJ4eF92aWYgKndsdmlmKQogewotCWJvb2wgd2lkZSA9IHN0YS0+YmFuZHdpZHRoID49IElFRUU4MDIxMV9TVEFfUlhfQldfNDA7CisJYm9vbCB3aWRlID0gd2x2aWYtPnJjX3VwZGF0ZV9idyA+PSBJRUVFODAyMTFfU1RBX1JYX0JXXzQwOwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgc3RhX3JjX3VwZGF0ZSB3aWRlICVkIiwgd2lkZSk7CiAKLQlpZiAoIShjaGFuZ2VkICYgSUVFRTgwMjExX1JDX0JXX0NIQU5HRUQpKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCiAJLyogc2FuaXR5ICovCiAJaWYgKFdBUk5fT04od2x2aWYtPmJzc190eXBlICE9IEJTU19UWVBFX1NUQV9CU1MpKQotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCiAJLyogaWdub3JlIHRoZSBjaGFuZ2UgYmVmb3JlIGFzc29jaWF0aW9uICovCiAJaWYgKCF0ZXN0X2JpdChXTFZJRl9GTEFHX1NUQV9BU1NPQ0lBVEVELCAmd2x2aWYtPmZsYWdzKSkKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAogCS8qCiAJICogSWYgd2Ugc3RhcnRlZCBvdXQgYXMgd2lkZSwgd2UgY2FuIGNoYW5nZSB0aGUgb3BlcmF0aW9uIG1vZGUuIElmIHdlCkBAIC0xNTg5LDkgKzE1OTAsNiBAQAogCQl3bDE4eHhfYWN4X3BlZXJfaHRfb3BlcmF0aW9uX21vZGUod2wsIHdsdmlmLT5zdGEuaGxpZCwgd2lkZSk7CiAJZWxzZQogCQlpZWVlODAyMTFfY29ubmVjdGlvbl9sb3NzKHdsMTJ4eF93bHZpZl90b192aWYod2x2aWYpKTsKLQotb3V0OgotCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIH0KIAogc3RhdGljIGludCB3bDE4eHhfc2V0X3BlZXJfY2FwKHN0cnVjdCB3bDEyNzEgKndsLApAQCAtMTcwMyw2ICsxNzAxLDExIEBACiAJLnNtYXJ0X2NvbmZpZ19zdGFydCA9IHdsMTh4eF9jbWRfc21hcnRfY29uZmlnX3N0YXJ0LAogCS5zbWFydF9jb25maWdfc3RvcCAgPSB3bDE4eHhfY21kX3NtYXJ0X2NvbmZpZ19zdG9wLAogCS5zbWFydF9jb25maWdfc2V0X2dyb3VwX2tleSA9IHdsMTh4eF9jbWRfc21hcnRfY29uZmlnX3NldF9ncm91cF9rZXksCisJLmludGVycnVwdF9ub3RpZnkgPSB3bDE4eHhfYWN4X2ludGVycnVwdF9ub3RpZnlfY29uZmlnLAorCS5yeF9iYV9maWx0ZXIJPSB3bDE4eHhfYWN4X3J4X2JhX2ZpbHRlciwKKwkuYXBfc2xlZXAJPSB3bDE4eHhfYWN4X2FwX3NsZWVwLAorCS5zZXRfY2FjCT0gd2wxOHh4X2NtZF9zZXRfY2FjLAorCS5kZnNfbWFzdGVyX3Jlc3RhcnQJPSB3bDE4eHhfY21kX2Rmc19tYXN0ZXJfcmVzdGFydCwKIH07CiAKIC8qIEhUIGNhcCBhcHByb3ByaWF0ZSBmb3Igd2lkZSBjaGFubmVscyBpbiAyR2h6ICovCkBAIC0xNzk2LDYgKzE3OTksMTAgQEAKIAkJLmxpbWl0cyA9IHdsMTh4eF9pZmFjZV9hcF9saW1pdHMsCiAJCS5uX2xpbWl0cyA9IEFSUkFZX1NJWkUod2wxOHh4X2lmYWNlX2FwX2xpbWl0cyksCiAJCS5udW1fZGlmZmVyZW50X2NoYW5uZWxzID0gMSwKKwkJLnJhZGFyX2RldGVjdF93aWR0aHMgPQlCSVQoTkw4MDIxMV9DSEFOX05PX0hUKSB8CisJCQkJCUJJVChOTDgwMjExX0NIQU5fSFQyMCkgfAorCQkJCQlCSVQoTkw4MDIxMV9DSEFOX0hUNDBNSU5VUykgfAorCQkJCQlCSVQoTkw4MDIxMV9DSEFOX0hUNDBQTFVTKSwKIAl9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDE4eHgvd2wxOHh4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bDE4eHgvd2wxOHh4LmgKaW5kZXggNmEyYjg4MC4uNzFlOWUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2wxOHh4L3dsMTh4eC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsMTh4eC93bDE4eHguaApAQCAtMjYsMTAgKzI2LDEwIEBACiAKIC8qIG1pbmltdW0gRlcgcmVxdWlyZWQgZm9yIGRyaXZlciAqLwogI2RlZmluZSBXTDE4WFhfQ0hJUF9WRVIJCTgKLSNkZWZpbmUgV0wxOFhYX0lGVFlQRV9WRVIJOAorI2RlZmluZSBXTDE4WFhfSUZUWVBFX1ZFUgk5CiAjZGVmaW5lIFdMMThYWF9NQUpPUl9WRVIJV0xDT1JFX0ZXX1ZFUl9JR05PUkUKICNkZWZpbmUgV0wxOFhYX1NVQlRZUEVfVkVSCVdMQ09SRV9GV19WRVJfSUdOT1JFCi0jZGVmaW5lIFdMMThYWF9NSU5PUl9WRVIJMTMKKyNkZWZpbmUgV0wxOFhYX01JTk9SX1ZFUgkxMQogCiAjZGVmaW5lIFdMMThYWF9DTURfTUFYX1NJWkUgICAgICAgICAgNzQwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9hY3guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9hY3guYwppbmRleCBiOTI0Y2VhLi5mMjhmYTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvYWN4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL2FjeC5jCkBAIC0xNzI1LDcgKzE3MjUsNyBAQAogCWFjeC0+ZGVjcmVhc2VfZGVsdGEgPSBjb25mLT5kZWNyZWFzZV9kZWx0YTsKIAlhY3gtPnF1aWV0X3RpbWUgPSBjb25mLT5xdWlldF90aW1lOwogCWFjeC0+aW5jcmVhc2VfdGltZSA9IGNvbmYtPmluY3JlYXNlX3RpbWU7Ci0JYWN4LT53aW5kb3dfc2l6ZSA9IGFjeC0+d2luZG93X3NpemU7CisJYWN4LT53aW5kb3dfc2l6ZSA9IGNvbmYtPndpbmRvd19zaXplOwogCiAJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9DT05GSUdfSEFOR09WRVIsIGFjeCwKIAkJCQkgICBzaXplb2YoKmFjeCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL2NtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL2NtZC5jCmluZGV4IGI4MjY2MTkuLmMyNmZjMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvY21kLmMKQEAgLTQwMyw3ICs0MDMsNyBAQAogCVdBUk5fT05fT05DRSh3bC0+YWN0aXZlX2xpbmtfY291bnQgPCAwKTsKIH0KIAotc3RhdGljIHU4IHdsY29yZV9nZXRfbmF0aXZlX2NoYW5uZWxfdHlwZSh1OCBubF9jaGFubmVsX3R5cGUpCit1OCB3bGNvcmVfZ2V0X25hdGl2ZV9jaGFubmVsX3R5cGUodTggbmxfY2hhbm5lbF90eXBlKQogewogCXN3aXRjaCAobmxfY2hhbm5lbF90eXBlKSB7CiAJY2FzZSBOTDgwMjExX0NIQU5fTk9fSFQ6CkBAIC00MTksNiArNDE5LDcgQEAKIAkJcmV0dXJuIFdMQ09SRV9DSEFOX05PX0hUOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHdsY29yZV9nZXRfbmF0aXZlX2NoYW5uZWxfdHlwZSk7CiAKIHN0YXRpYyBpbnQgd2wxMnh4X2NtZF9yb2xlX3N0YXJ0X2RldihzdHJ1Y3Qgd2wxMjcxICp3bCwKIAkJCQkgICAgIHN0cnVjdCB3bDEyeHhfdmlmICp3bHZpZiwKQEAgLTE2ODYsOSArMTY4Nyw3IEBACiB7CiAJc3RydWN0IHdsMTJ4eF9jbWRfcmVnZG9tYWluX2Rmc19jb25maWcgKmNtZCA9IE5VTEw7CiAJaW50IHJldCA9IDAsIGksIGIsIGNoX2JpdF9pZHg7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsOwogCXUzMiB0bXBfY2hfYml0bWFwWzJdOwotCXUxNiBjaDsKIAlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gd2wtPmh3LT53aXBoeTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kOwogCWJvb2wgdGltZW91dCA9IGZhbHNlOwpAQCAtMTcwMywxMiArMTcwMiwxNiBAQAogCWZvciAoYiA9IElFRUU4MDIxMV9CQU5EXzJHSFo7IGIgPD0gSUVFRTgwMjExX0JBTkRfNUdIWjsgYisrKSB7CiAJCWJhbmQgPSB3aXBoeS0+YmFuZHNbYl07CiAJCWZvciAoaSA9IDA7IGkgPCBiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKLQkJCWNoYW5uZWwgPSAmYmFuZC0+Y2hhbm5lbHNbaV07Ci0JCQljaCA9IGNoYW5uZWwtPmh3X3ZhbHVlOworCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gJmJhbmQtPmNoYW5uZWxzW2ldOworCQkJdTE2IGNoID0gY2hhbm5lbC0+aHdfdmFsdWU7CisJCQl1MzIgZmxhZ3MgPSBjaGFubmVsLT5mbGFnczsKIAotCQkJaWYgKGNoYW5uZWwtPmZsYWdzICYgKElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEIHwKLQkJCQkJICAgICAgSUVFRTgwMjExX0NIQU5fUkFEQVIgfAotCQkJCQkgICAgICBJRUVFODAyMTFfQ0hBTl9OT19JUikpCisJCQlpZiAoZmxhZ3MgJiAoSUVFRTgwMjExX0NIQU5fRElTQUJMRUQgfAorCQkJCSAgICAgSUVFRTgwMjExX0NIQU5fTk9fSVIpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fUkFEQVIpICYmCisJCQkgICAgY2hhbm5lbC0+ZGZzX3N0YXRlICE9IE5MODAyMTFfREZTX0FWQUlMQUJMRSkKIAkJCQljb250aW51ZTsKIAogCQkJY2hfYml0X2lkeCA9IHdsY29yZV9nZXRfcmVnX2NvbmZfY2hfaWR4KGIsIGNoKTsKQEAgLTE3MzMsNiArMTczNiw3IEBACiAKIAljbWQtPmNoX2JpdF9tYXAxID0gY3B1X3RvX2xlMzIodG1wX2NoX2JpdG1hcFswXSk7CiAJY21kLT5jaF9iaXRfbWFwMiA9IGNwdV90b19sZTMyKHRtcF9jaF9iaXRtYXBbMV0pOworCWNtZC0+ZGZzX3JlZ2lvbiA9IHdsLT5kZnNfcmVnaW9uOwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX0NNRCwKIAkJICAgICAiY21kIHJlZyBkb21haW4gYml0bWFwMTogMHglMDh4LCBiaXRtYXAyOiAweCUwOHgiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL2NtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL2NtZC5oCmluZGV4IDQ1MzY4NGEuLmUxNGNkNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9jbWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvY21kLmgKQEAgLTEwNSw2ICsxMDUsNyBAQAogdm9pZCB3bDEyeHhfZnJlZV9saW5rKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgd2wxMnh4X3ZpZiAqd2x2aWYsIHU4ICpobGlkKTsKIGludCB3bGNvcmVfY21kX3dhaXRfZm9yX2V2ZW50X29yX3RpbWVvdXQoc3RydWN0IHdsMTI3MSAqd2wsCiAJCQkJCSB1MzIgbWFzaywgYm9vbCAqdGltZW91dCk7Cit1OCB3bGNvcmVfZ2V0X25hdGl2ZV9jaGFubmVsX3R5cGUodTggbmxfY2hhbm5lbF90eXBlKTsKIAogZW51bSB3bDEyNzFfY29tbWFuZHMgewogCUNNRF9JTlRFUlJPR0FURQk9IDEsIC8qIHVzZSB0aGlzIHRvIHJlYWQgaW5mb3JtYXRpb24gZWxlbWVudHMgKi8KQEAgLTE3Miw2ICsxNzMsMTEgQEAKIAlDTURfU01BUlRfQ09ORklHX1NUT1AJCT0gNjIsCiAJQ01EX1NNQVJUX0NPTkZJR19TRVRfR1JPVVBfS0VZCT0gNjMsCiAKKwlDTURfQ0FDX1NUQVJUCQkJPSA2NCwKKwlDTURfQ0FDX1NUT1AJCQk9IDY1LAorCUNNRF9ERlNfTUFTVEVSX1JFU1RBUlQJCT0gNjYsCisJQ01EX0RGU19SQURBUl9ERVRFQ1RJT05fREVCVUcJPSA2NywKKwogCU1BWF9DT01NQU5EX0lEID0gMHhGRkZGLAogfTsKIApAQCAtNjQyLDYgKzY0OCw4IEBACiAKIAlfX2xlMzIgY2hfYml0X21hcDE7CiAJX19sZTMyIGNoX2JpdF9tYXAyOworCXU4IGRmc19yZWdpb247CisJdTggcGFkZGluZ1szXTsKIH0gX19wYWNrZWQ7CiAKIHN0cnVjdCB3bDEyeHhfY21kX2NvbmZpZ19md2xvZyB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvY29uZi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL2NvbmYuaAppbmRleCA0MDk5NWM0Li4xNjZhZGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvY29uZi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9jb25mLmgKQEAgLTk5Nyw2ICs5OTcsMTEgQEAKIAkgKiB3aGV0aGVyIHdlIGNhbiBnbyB0byBFTFAuCiAJICovCiAJdTggc3RhX3NsZWVwX2F1dGg7CisKKwkvKgorCSAqIERlZmF1bHQgUlggQkEgQWN0aXZpdHkgZmlsdGVyIGNvbmZpZ3VyYXRpb24KKwkgKi8KKwl1OCBzdXNwZW5kX3J4X2JhX2FjdGl2aXR5OwogfSBfX3BhY2tlZDsKIAogZW51bSB7CkBAIC0xMzQ3LDcgKzEzNTIsNyBAQAogICogdmVyc2lvbiwgdGhlIHR3byBMU0IgYXJlIHRoZSBsb3dlciBkcml2ZXIncyBwcml2YXRlIGNvbmYKICAqIHZlcnNpb24uCiAgKi8KLSNkZWZpbmUgV0xDT1JFX0NPTkZfVkVSU0lPTgkoMHgwMDA1IDw8IDE2KQorI2RlZmluZSBXTENPUkVfQ09ORl9WRVJTSU9OCSgweDAwMDYgPDwgMTYpCiAjZGVmaW5lIFdMQ09SRV9DT05GX01BU0sJMHhmZmZmMDAwMAogI2RlZmluZSBXTENPUkVfQ09ORl9TSVpFCShzaXplb2Yoc3RydWN0IHdsY29yZV9jb25mX2hlYWRlcikgKwlcCiAJCQkJIHNpemVvZihzdHJ1Y3Qgd2xjb3JlX2NvbmYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9kZWJ1Z2ZzLmMKaW5kZXggMGJlMjFmNi4uNjhmM2JmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvZGVidWdmcy5jCkBAIC05MjksMTcgKzkyOSwxMCBAQAogewogCXN0cnVjdCB3bDEyNzEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB3bDEyeHhfdmlmICp3bHZpZjsKLQljaGFyIGJ1ZlsxMF07Ci0Jc2l6ZV90IGxlbjsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCWludCByZXQ7CiAKLQlsZW4gPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gMSk7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCWJ1ZltsZW5dID0gJ1wwJzsKLQotCXJldCA9IGtzdHJ0b3VsKGJ1ZiwgMCwgJnZhbHVlKTsKKwlyZXQgPSBrc3RydG91bF9mcm9tX3VzZXIodXNlcl9idWYsIGNvdW50LCAwLCAmdmFsdWUpOwogCWlmIChyZXQgPCAwKSB7CiAJCXdsMTI3MV93YXJuaW5nKCJpbGxlZ2FsIHZhbHVlIGZvciBiZWFjb25fZmlsdGVyaW5nISIpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9ldmVudC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL2V2ZW50LmMKaW5kZXggNTE1MzY0MC4uYzQyZTc4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL2V2ZW50LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL2V2ZW50LmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgIiVzOiByb2xlcz0weCVseCBzdWNjZXNzPSVkIiwKIAkJICAgICBfX2Z1bmNfXywgcm9sZXNfYml0bWFwLCBzdWNjZXNzKTsKIAotCXdsMTJ4eF9mb3JfZWFjaF93bHZpZl9zdGEod2wsIHdsdmlmKSB7CisJd2wxMnh4X2Zvcl9lYWNoX3dsdmlmKHdsLCB3bHZpZikgewogCQlpZiAod2x2aWYtPnJvbGVfaWQgPT0gV0wxMlhYX0lOVkFMSURfUk9MRV9JRCB8fAogCQkgICAgIXRlc3RfYml0KHdsdmlmLT5yb2xlX2lkICwgJnJvbGVzX2JpdG1hcCkpCiAJCQljb250aW51ZTsKQEAgLTE1MCw4ICsxNTAsMTMgQEAKIAogCQl2aWYgPSB3bDEyeHhfd2x2aWZfdG9fdmlmKHdsdmlmKTsKIAotCQlpZWVlODAyMTFfY2hzd2l0Y2hfZG9uZSh2aWYsIHN1Y2Nlc3MpOwotCQljYW5jZWxfZGVsYXllZF93b3JrKCZ3bHZpZi0+Y2hhbm5lbF9zd2l0Y2hfd29yayk7CisJCWlmICh3bHZpZi0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfU1RBX0JTUykgeworCQkJaWVlZTgwMjExX2Noc3dpdGNoX2RvbmUodmlmLCBzdWNjZXNzKTsKKwkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJndsdmlmLT5jaGFubmVsX3N3aXRjaF93b3JrKTsKKwkJfSBlbHNlIHsKKwkJCXNldF9iaXQoV0xWSUZfRkxBR19CRUFDT05fRElTQUJMRUQsICZ3bHZpZi0+ZmxhZ3MpOworCQkJaWVlZTgwMjExX2NzYV9maW5pc2godmlmKTsKKwkJfQogCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHdsY29yZV9ldmVudF9jaGFubmVsX3N3aXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvaHdfb3BzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvaHdfb3BzLmgKaW5kZXggYWE5ZjgyYy4uZWVjNTY5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL2h3X29wcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9od19vcHMuaApAQCAtMjExLDExICsyMTEsMzUgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi13bGNvcmVfaHdfc3RhX3JjX3VwZGF0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHdsMTJ4eF92aWYgKndsdmlmLAotCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTMyIGNoYW5nZWQpCit3bGNvcmVfaHdfc3RhX3JjX3VwZGF0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHdsMTJ4eF92aWYgKndsdmlmKQogewogCWlmICh3bC0+b3BzLT5zdGFfcmNfdXBkYXRlKQotCQl3bC0+b3BzLT5zdGFfcmNfdXBkYXRlKHdsLCB3bHZpZiwgc3RhLCBjaGFuZ2VkKTsKKwkJd2wtPm9wcy0+c3RhX3JjX3VwZGF0ZSh3bCwgd2x2aWYpOworfQorCitzdGF0aWMgaW5saW5lIGludAord2xjb3JlX2h3X2ludGVycnVwdF9ub3RpZnkoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgYWN0aW9uKQoreworCWlmICh3bC0+b3BzLT5pbnRlcnJ1cHRfbm90aWZ5KQorCQlyZXR1cm4gd2wtPm9wcy0+aW50ZXJydXB0X25vdGlmeSh3bCwgYWN0aW9uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQKK3dsY29yZV9od19yeF9iYV9maWx0ZXIoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgYWN0aW9uKQoreworCWlmICh3bC0+b3BzLT5yeF9iYV9maWx0ZXIpCisJCXJldHVybiB3bC0+b3BzLT5yeF9iYV9maWx0ZXIod2wsIGFjdGlvbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit3bGNvcmVfaHdfYXBfc2xlZXAoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJaWYgKHdsLT5vcHMtPmFwX3NsZWVwKQorCQlyZXR1cm4gd2wtPm9wcy0+YXBfc2xlZXAod2wpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CkBAIC0yODcsNCArMzExLDIyIEBACiAKIAlyZXR1cm4gd2wtPm9wcy0+c21hcnRfY29uZmlnX3NldF9ncm91cF9rZXkod2wsIGdyb3VwX2lkLCBrZXlfbGVuLCBrZXkpOwogfQorCitzdGF0aWMgaW5saW5lIGludAord2xjb3JlX2h3X3NldF9jYWMoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCB3bDEyeHhfdmlmICp3bHZpZiwgYm9vbCBzdGFydCkKK3sKKwlpZiAoIXdsLT5vcHMtPnNldF9jYWMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHdsLT5vcHMtPnNldF9jYWMod2wsIHdsdmlmLCBzdGFydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50Cit3bGNvcmVfaHdfZGZzX21hc3Rlcl9yZXN0YXJ0KHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgd2wxMnh4X3ZpZiAqd2x2aWYpCit7CisJaWYgKCF3bC0+b3BzLT5kZnNfbWFzdGVyX3Jlc3RhcnQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHdsLT5vcHMtPmRmc19tYXN0ZXJfcmVzdGFydCh3bCwgd2x2aWYpOworfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL2luaXQuYwppbmRleCAxOTllOTQxLi41Y2ExZmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9pbml0LmMKQEAgLTM5Miw2ICszOTIsMTEgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAorCS8qIGNvbmZpZ3VyZSBBUCBzbGVlcCwgaWYgZW5hYmxlZCAqLworCXJldCA9IHdsY29yZV9od19hcF9zbGVlcCh3bCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTY3LDggKzU3Miw3IEBACiAJLyogY29uc2lkZXIgYWxsIGV4aXN0aW5nIHJvbGVzIGJlZm9yZSBjb25maWd1cmluZyBwc20uICovCiAKIAlpZiAod2wtPmFwX2NvdW50ID09IDAgJiYgaXNfYXApIHsgLyogZmlyc3QgQVAgKi8KLQkJLyogQ29uZmlndXJlIGZvciBwb3dlciBhbHdheXMgb24gKi8KLQkJcmV0ID0gd2wxMjcxX2FjeF9zbGVlcF9hdXRoKHdsLCBXTDEyNzFfUFNNX0NBTSk7CisJCXJldCA9IHdsMTI3MV9hY3hfc2xlZXBfYXV0aCh3bCwgV0wxMjcxX1BTTV9FTFApOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvbWFpbi5jCmluZGV4IDZhZDNmY2UuLjFlMTM2OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL21haW4uYwpAQCAtNzksMjIgKzc5LDEyIEBACiBzdGF0aWMgdm9pZCB3bDEyNzFfcmVnX25vdGlmeShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAogCQkJICAgICAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kOwotCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2g7Ci0JaW50IGk7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3aXBoeV90b19pZWVlODAyMTFfaHcod2lwaHkpOwogCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CiAKLQliYW5kID0gd2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdOwotCWZvciAoaSA9IDA7IGkgPCBiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKLQkJY2ggPSAmYmFuZC0+Y2hhbm5lbHNbaV07Ci0JCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChjaC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9SQURBUikKLQkJCWNoLT5mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9OT19JUjsKLQotCX0KKwkvKiBjb3B5IHRoZSBjdXJyZW50IGRmcyByZWdpb24gKi8KKwlpZiAocmVxdWVzdCkKKwkJd2wtPmRmc19yZWdpb24gPSByZXF1ZXN0LT5kZnNfcmVnaW9uOwogCiAJd2xjb3JlX3JlZ2RvbWFpbl9jb25maWcod2wpOwogfQpAQCAtMjI2LDYgKzIxNiwyOSBAQAogCQltc2Vjc190b19qaWZmaWVzKHdsLT5jb25mLnR4LnR4X3dhdGNoZG9nX3RpbWVvdXQpKTsKIH0KIAorc3RhdGljIHZvaWQgd2xjb3JlX3JjX3VwZGF0ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB3bDEyeHhfdmlmICp3bHZpZiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2wxMnh4X3ZpZiwKKwkJCQkJCXJjX3VwZGF0ZV93b3JrKTsKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IHdsdmlmLT53bDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlpZiAodW5saWtlbHkod2wtPnN0YXRlICE9IFdMQ09SRV9TVEFURV9PTikpCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXdsY29yZV9od19zdGFfcmNfdXBkYXRlKHdsLCB3bHZpZik7CisKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7Cit9CisKIHN0YXRpYyB2b2lkIHdsMTJ4eF90eF93YXRjaGRvZ193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yazsKQEAgLTE2NjIsMTkgKzE2NzUsMTUgQEAKIAlpZiAoIXRlc3RfYml0KFdMVklGX0ZMQUdfU1RBX0FTU09DSUFURUQsICZ3bHZpZi0+ZmxhZ3MpKQogCQlnb3RvIG91dDsKIAotCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KIAlyZXQgPSB3bDEyNzFfY29uZmlndXJlX3dvd2xhbih3bCwgd293KTsKIAlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfc2xlZXA7CisJCWdvdG8gb3V0OwogCiAJaWYgKCh3bC0+Y29uZi5jb25uLnN1c3BlbmRfd2FrZV91cF9ldmVudCA9PQogCSAgICAgd2wtPmNvbmYuY29ubi53YWtlX3VwX2V2ZW50KSAmJgogCSAgICAod2wtPmNvbmYuY29ubi5zdXNwZW5kX2xpc3Rlbl9pbnRlcnZhbCA9PQogCSAgICAgd2wtPmNvbmYuY29ubi5saXN0ZW5faW50ZXJ2YWwpKQotCQlnb3RvIG91dF9zbGVlcDsKKwkJZ290byBvdXQ7CiAKIAlyZXQgPSB3bDEyNzFfYWN4X3dha2VfdXBfY29uZGl0aW9ucyh3bCwgd2x2aWYsCiAJCQkJICAgIHdsLT5jb25mLmNvbm4uc3VzcGVuZF93YWtlX3VwX2V2ZW50LApAQCAtMTY4MiwyOSArMTY5MSwyOCBAQAogCiAJaWYgKHJldCA8IDApCiAJCXdsMTI3MV9lcnJvcigic3VzcGVuZDogc2V0IHdha2UgdXAgY29uZGl0aW9ucyBmYWlsZWQ6ICVkIiwgcmV0KTsKLQotb3V0X3NsZWVwOgotCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOwogb3V0OgogCXJldHVybiByZXQ7CiAKIH0KIAogc3RhdGljIGludCB3bDEyNzFfY29uZmlndXJlX3N1c3BlbmRfYXAoc3RydWN0IHdsMTI3MSAqd2wsCi0JCQkJICAgICAgIHN0cnVjdCB3bDEyeHhfdmlmICp3bHZpZikKKwkJCQkJc3RydWN0IHdsMTJ4eF92aWYgKndsdmlmLAorCQkJCQlzdHJ1Y3QgY2ZnODAyMTFfd293bGFuICp3b3cpCiB7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIXRlc3RfYml0KFdMVklGX0ZMQUdfQVBfU1RBUlRFRCwgJndsdmlmLT5mbGFncykpCiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wpOworCXJldCA9IHdsMTI3MV9hY3hfYmVhY29uX2ZpbHRlcl9vcHQod2wsIHdsdmlmLCB0cnVlKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfb3B0KHdsLCB3bHZpZiwgdHJ1ZSk7CisJcmV0ID0gd2wxMjcxX2NvbmZpZ3VyZV93b3dsYW4od2wsIHdvdyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCi0Jd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIApAQCAtMTcxNyw3ICsxNzI1LDcgQEAKIAlpZiAod2x2aWYtPmJzc190eXBlID09IEJTU19UWVBFX1NUQV9CU1MpCiAJCXJldHVybiB3bDEyNzFfY29uZmlndXJlX3N1c3BlbmRfc3RhKHdsLCB3bHZpZiwgd293KTsKIAlpZiAod2x2aWYtPmJzc190eXBlID09IEJTU19UWVBFX0FQX0JTUykKLQkJcmV0dXJuIHdsMTI3MV9jb25maWd1cmVfc3VzcGVuZF9hcCh3bCwgd2x2aWYpOworCQlyZXR1cm4gd2wxMjcxX2NvbmZpZ3VyZV9zdXNwZW5kX2FwKHdsLCB3bHZpZiwgd293KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTczMCwyMSArMTczOCwxOCBAQAogCWlmICgoIWlzX2FwKSAmJiAoIWlzX3N0YSkpCiAJCXJldHVybjsKIAotCWlmIChpc19zdGEgJiYgIXRlc3RfYml0KFdMVklGX0ZMQUdfU1RBX0FTU09DSUFURUQsICZ3bHZpZi0+ZmxhZ3MpKQorCWlmICgoaXNfc3RhICYmICF0ZXN0X2JpdChXTFZJRl9GTEFHX1NUQV9BU1NPQ0lBVEVELCAmd2x2aWYtPmZsYWdzKSkgfHwKKwkgICAgKGlzX2FwICYmICF0ZXN0X2JpdChXTFZJRl9GTEFHX0FQX1NUQVJURUQsICZ3bHZpZi0+ZmxhZ3MpKSkKIAkJcmV0dXJuOwogCi0JcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm47CisJd2wxMjcxX2NvbmZpZ3VyZV93b3dsYW4od2wsIE5VTEwpOwogCiAJaWYgKGlzX3N0YSkgewotCQl3bDEyNzFfY29uZmlndXJlX3dvd2xhbih3bCwgTlVMTCk7Ci0KIAkJaWYgKCh3bC0+Y29uZi5jb25uLnN1c3BlbmRfd2FrZV91cF9ldmVudCA9PQogCQkgICAgIHdsLT5jb25mLmNvbm4ud2FrZV91cF9ldmVudCkgJiYKIAkJICAgICh3bC0+Y29uZi5jb25uLnN1c3BlbmRfbGlzdGVuX2ludGVydmFsID09CiAJCSAgICAgd2wtPmNvbmYuY29ubi5saXN0ZW5faW50ZXJ2YWwpKQotCQkJZ290byBvdXRfc2xlZXA7CisJCQlyZXR1cm47CiAKIAkJcmV0ID0gd2wxMjcxX2FjeF93YWtlX3VwX2NvbmRpdGlvbnMod2wsIHdsdmlmLAogCQkJCSAgICB3bC0+Y29uZi5jb25uLndha2VfdXBfZXZlbnQsCkBAIC0xNzU3LDkgKzE3NjIsNiBAQAogCX0gZWxzZSBpZiAoaXNfYXApIHsKIAkJcmV0ID0gd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX29wdCh3bCwgd2x2aWYsIGZhbHNlKTsKIAl9Ci0KLW91dF9zbGVlcDoKLQl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKIH0KIAogc3RhdGljIGludCB3bDEyNzFfb3Bfc3VzcGVuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTE3ODEsNiArMTc4MywxMyBAQAogCXdsMTI3MV90eF9mbHVzaCh3bCk7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKSB7CisJCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAl3bC0+d293X2VuYWJsZWQgPSB0cnVlOwogCXdsMTJ4eF9mb3JfZWFjaF93bHZpZih3bCwgd2x2aWYpIHsKIAkJcmV0ID0gd2wxMjcxX2NvbmZpZ3VyZV9zdXNwZW5kKHdsLCB3bHZpZiwgd293KTsKQEAgLTE3OTAsNyArMTc5OSwyNyBAQAogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KKworCS8qIGRpc2FibGUgZmFzdCBsaW5rIGZsb3cgY29udHJvbCBub3RpZmljYXRpb25zIGZyb20gRlcgKi8KKwlyZXQgPSB3bGNvcmVfaHdfaW50ZXJydXB0X25vdGlmeSh3bCwgZmFsc2UpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9zbGVlcDsKKworCS8qIGlmIGZpbHRlcmluZyBpcyBlbmFibGVkLCBjb25maWd1cmUgdGhlIEZXIHRvIGRyb3AgYWxsIFJYIEJBIGZyYW1lcyAqLworCXJldCA9IHdsY29yZV9od19yeF9iYV9maWx0ZXIod2wsCisJCQkJICAgICAhIXdsLT5jb25mLmNvbm4uc3VzcGVuZF9yeF9iYV9hY3Rpdml0eSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCitvdXRfc2xlZXA6CisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworCisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImNvdWxkbid0IHByZXBhcmUgZGV2aWNlIHRvIHN1c3BlbmQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKIAkvKiBmbHVzaCBhbnkgcmVtYWluaW5nIHdvcmsgKi8KIAl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJmbHVzaGluZyByZW1haW5pbmcgd29ya3MiKTsKIApAQCAtMTg2NCwxMyArMTg5MywyOSBAQAogCWlmIChwZW5kaW5nX3JlY292ZXJ5KSB7CiAJCXdsMTI3MV93YXJuaW5nKCJxdWV1aW5nIGZvcmdvdHRlbiByZWNvdmVyeSBvbiByZXN1bWUiKTsKIAkJaWVlZTgwMjExX3F1ZXVlX3dvcmsod2wtPmh3LCAmd2wtPnJlY292ZXJ5X3dvcmspOwotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfc2xlZXA7CiAJfQogCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwogCXdsMTJ4eF9mb3JfZWFjaF93bHZpZih3bCwgd2x2aWYpIHsKIAkJd2wxMjcxX2NvbmZpZ3VyZV9yZXN1bWUod2wsIHdsdmlmKTsKIAl9CiAKKwlyZXQgPSB3bGNvcmVfaHdfaW50ZXJydXB0X25vdGlmeSh3bCwgdHJ1ZSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCisJLyogaWYgZmlsdGVyaW5nIGlzIGVuYWJsZWQsIGNvbmZpZ3VyZSB0aGUgRlcgdG8gZHJvcCBhbGwgUlggQkEgZnJhbWVzICovCisJcmV0ID0gd2xjb3JlX2h3X3J4X2JhX2ZpbHRlcih3bCwgZmFsc2UpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9zbGVlcDsKKworb3V0X3NsZWVwOgorCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworCiBvdXQ6CiAJd2wtPndvd19lbmFibGVkID0gZmFsc2U7CiAKQEAgLTIyNzksNiArMjMyNCw3IEBACiAJCSAgd2wxMjcxX3J4X3N0cmVhbWluZ19lbmFibGVfd29yayk7CiAJSU5JVF9XT1JLKCZ3bHZpZi0+cnhfc3RyZWFtaW5nX2Rpc2FibGVfd29yaywKIAkJICB3bDEyNzFfcnhfc3RyZWFtaW5nX2Rpc2FibGVfd29yayk7CisJSU5JVF9XT1JLKCZ3bHZpZi0+cmNfdXBkYXRlX3dvcmssIHdsY29yZV9yY191cGRhdGVfd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJndsdmlmLT5jaGFubmVsX3N3aXRjaF93b3JrLAogCQkJICB3bGNvcmVfY2hhbm5lbF9zd2l0Y2hfd29yayk7CiAJSU5JVF9ERUxBWUVEX1dPUksoJndsdmlmLT5jb25uZWN0aW9uX2xvc3Nfd29yaywKQEAgLTI1MDgsNiArMjU1NCw3IEBACiAJfQogCiAJdmlmLT5kcml2ZXJfZmxhZ3MgfD0gSUVFRTgwMjExX1ZJRl9CRUFDT05fRklMVEVSIHwKKwkJCSAgICAgSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19VQVBTRCB8CiAJCQkgICAgIElFRUU4MDIxMV9WSUZfU1VQUE9SVFNfQ1FNX1JTU0k7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBhZGQgaW50ZXJmYWNlIHR5cGUgJWQgbWFjICVwTSIsCkBAIC0yNzIzLDYgKzI3NzAsNyBAQAogCWRlbF90aW1lcl9zeW5jKCZ3bHZpZi0+cnhfc3RyZWFtaW5nX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZ3bHZpZi0+cnhfc3RyZWFtaW5nX2VuYWJsZV93b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZ3bHZpZi0+cnhfc3RyZWFtaW5nX2Rpc2FibGVfd29yayk7CisJY2FuY2VsX3dvcmtfc3luYygmd2x2aWYtPnJjX3VwZGF0ZV93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJndsdmlmLT5jb25uZWN0aW9uX2xvc3Nfd29yayk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3bHZpZi0+Y2hhbm5lbF9zd2l0Y2hfd29yayk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3bHZpZi0+cGVuZGluZ19hdXRoX2NvbXBsZXRlX3dvcmspOwpAQCAtNDA3Miw4ICs0MTIwLDE0IEBACiAJCXJldCA9IHdsY29yZV9zZXRfYmVhY29uX3RlbXBsYXRlKHdsLCB2aWYsIGlzX2FwKTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dDsKLQl9CiAKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXTFZJRl9GTEFHX0JFQUNPTl9ESVNBQkxFRCwKKwkJCQkgICAgICAgJndsdmlmLT5mbGFncykpIHsKKwkJCXJldCA9IHdsY29yZV9od19kZnNfbWFzdGVyX3Jlc3RhcnQod2wsIHdsdmlmKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CisJfQogb3V0OgogCWlmIChyZXQgIT0gMCkKIAkJd2wxMjcxX2Vycm9yKCJiZWFjb24gaW5mbyBjaGFuZ2UgZmFpbGVkOiAlZCIsIHJldCk7CkBAIC00NTc0LDEwICs0NjI4LDQ2IEBACiAJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY3R4LAogCQkJCSAgICAgdTMyIGNoYW5nZWQpCiB7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgd2wxMnh4X3ZpZiAqd2x2aWY7CisJaW50IHJldDsKKwlpbnQgY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCgKKwkJY3R4LT5kZWYuY2hhbi0+Y2VudGVyX2ZyZXEpOworCiAJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLAogCQkgICAgICJtYWM4MDIxMSBjaGFuZ2UgY2hhbmN0eCAlZCAodHlwZSAlZCkgY2hhbmdlZCAweCV4IiwKLQkJICAgICBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoY3R4LT5kZWYuY2hhbi0+Y2VudGVyX2ZyZXEpLAotCQkgICAgIGNmZzgwMjExX2dldF9jaGFuZGVmX3R5cGUoJmN0eC0+ZGVmKSwgY2hhbmdlZCk7CisJCSAgICAgY2hhbm5lbCwgY2ZnODAyMTFfZ2V0X2NoYW5kZWZfdHlwZSgmY3R4LT5kZWYpLCBjaGFuZ2VkKTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJd2wxMnh4X2Zvcl9lYWNoX3dsdmlmKHdsLCB3bHZpZikgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmID0gd2wxMnh4X3dsdmlmX3RvX3ZpZih3bHZpZik7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQlpZiAocmN1X2FjY2Vzc19wb2ludGVyKHZpZi0+Y2hhbmN0eF9jb25mKSAhPSBjdHgpIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJY29udGludWU7CisJCX0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwkJLyogc3RhcnQgcmFkYXIgaWYgbmVlZGVkICovCisJCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NIQU5DVFhfQ0hBTkdFX1JBREFSICYmCisJCSAgICB3bHZpZi0+YnNzX3R5cGUgPT0gQlNTX1RZUEVfQVBfQlNTICYmCisJCSAgICBjdHgtPnJhZGFyX2VuYWJsZWQgJiYgIXdsdmlmLT5yYWRhcl9lbmFibGVkICYmCisJCSAgICBjdHgtPmRlZi5jaGFuLT5kZnNfc3RhdGUgPT0gTkw4MDIxMV9ERlNfVVNBQkxFKSB7CisJCQl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJTdGFydCByYWRhciBkZXRlY3Rpb24iKTsKKwkJCXdsY29yZV9od19zZXRfY2FjKHdsLCB3bHZpZiwgdHJ1ZSk7CisJCQl3bHZpZi0+cmFkYXJfZW5hYmxlZCA9IHRydWU7CisJCX0KKwl9CisKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiB9CiAKIHN0YXRpYyBpbnQgd2xjb3JlX29wX2Fzc2lnbl92aWZfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKQEAgLTQ1ODgsMTMgKzQ2NzgsMjYgQEAKIAlzdHJ1Y3Qgd2wxMnh4X3ZpZiAqd2x2aWYgPSB3bDEyeHhfdmlmX3RvX2RhdGEodmlmKTsKIAlpbnQgY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCgKIAkJY3R4LT5kZWYuY2hhbi0+Y2VudGVyX2ZyZXEpOworCWludCByZXQgPSAtRUlOVkFMOwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLAotCQkgICAgICJtYWM4MDIxMSBhc3NpZ24gY2hhbmN0eCAocm9sZSAlZCkgJWQgKHR5cGUgJWQpIiwKLQkJICAgICB3bHZpZi0+cm9sZV9pZCwgY2hhbm5lbCwgY2ZnODAyMTFfZ2V0X2NoYW5kZWZfdHlwZSgmY3R4LT5kZWYpKTsKKwkJICAgICAibWFjODAyMTEgYXNzaWduIGNoYW5jdHggKHJvbGUgJWQpICVkICh0eXBlICVkKSAocmFkYXIgJWQgZGZzX3N0YXRlICVkKSIsCisJCSAgICAgd2x2aWYtPnJvbGVfaWQsIGNoYW5uZWwsCisJCSAgICAgY2ZnODAyMTFfZ2V0X2NoYW5kZWZfdHlwZSgmY3R4LT5kZWYpLAorCQkgICAgIGN0eC0+cmFkYXJfZW5hYmxlZCwgY3R4LT5kZWYuY2hhbi0+ZGZzX3N0YXRlKTsKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAKKwlpZiAodW5saWtlbHkod2wtPnN0YXRlICE9IFdMQ09SRV9TVEFURV9PTikpCisJCWdvdG8gb3V0OworCisJaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChXTFZJRl9GTEFHX0lOSVRJQUxJWkVELCAmd2x2aWYtPmZsYWdzKSkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwogCXdsdmlmLT5iYW5kID0gY3R4LT5kZWYuY2hhbi0+YmFuZDsKIAl3bHZpZi0+Y2hhbm5lbCA9IGNoYW5uZWw7CiAJd2x2aWYtPmNoYW5uZWxfdHlwZSA9IGNmZzgwMjExX2dldF9jaGFuZGVmX3R5cGUoJmN0eC0+ZGVmKTsKQEAgLTQ2MDIsNiArNDcwNSwxNSBAQAogCS8qIHVwZGF0ZSBkZWZhdWx0IHJhdGVzIGFjY29yZGluZyB0byB0aGUgYmFuZCAqLwogCXdsMTI3MV9zZXRfYmFuZF9yYXRlKHdsLCB3bHZpZik7CiAKKwlpZiAoY3R4LT5yYWRhcl9lbmFibGVkICYmCisJICAgIGN0eC0+ZGVmLmNoYW4tPmRmc19zdGF0ZSA9PSBOTDgwMjExX0RGU19VU0FCTEUpIHsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAiU3RhcnQgcmFkYXIgZGV0ZWN0aW9uIik7CisJCXdsY29yZV9od19zZXRfY2FjKHdsLCB3bHZpZiwgdHJ1ZSk7CisJCXdsdmlmLT5yYWRhcl9lbmFibGVkID0gdHJ1ZTsKKwl9CisKKwl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKK291dDoKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKQEAgLTQ2MTMsNiArNDcyNSw3IEBACiB7CiAJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKIAlzdHJ1Y3Qgd2wxMnh4X3ZpZiAqd2x2aWYgPSB3bDEyeHhfdmlmX3RvX2RhdGEodmlmKTsKKwlpbnQgcmV0OwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLAogCQkgICAgICJtYWM4MDIxMSB1bmFzc2lnbiBjaGFuY3R4IChyb2xlICVkKSAlZCAodHlwZSAlZCkiLApAQCAtNDYyMSw2ICs0NzM0LDk5IEBACiAJCSAgICAgY2ZnODAyMTFfZ2V0X2NoYW5kZWZfdHlwZSgmY3R4LT5kZWYpKTsKIAogCXdsMTI3MV90eF9mbHVzaCh3bCk7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJaWYgKHVubGlrZWx5KHdsLT5zdGF0ZSAhPSBXTENPUkVfU1RBVEVfT04pKQorCQlnb3RvIG91dDsKKworCWlmICh1bmxpa2VseSghdGVzdF9iaXQoV0xWSUZfRkxBR19JTklUSUFMSVpFRCwgJndsdmlmLT5mbGFncykpKQorCQlnb3RvIG91dDsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlpZiAod2x2aWYtPnJhZGFyX2VuYWJsZWQpIHsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAiU3RvcCByYWRhciBkZXRlY3Rpb24iKTsKKwkJd2xjb3JlX2h3X3NldF9jYWMod2wsIHdsdmlmLCBmYWxzZSk7CisJCXdsdmlmLT5yYWRhcl9lbmFibGVkID0gZmFsc2U7CisJfQorCisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOworfQorCitzdGF0aWMgaW50IF9fd2xjb3JlX3N3aXRjaF92aWZfY2hhbihzdHJ1Y3Qgd2wxMjcxICp3bCwKKwkJCQkgICAgc3RydWN0IHdsMTJ4eF92aWYgKndsdmlmLAorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqbmV3X2N0eCkKK3sKKwlpbnQgY2hhbm5lbCA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCgKKwkJbmV3X2N0eC0+ZGVmLmNoYW4tPmNlbnRlcl9mcmVxKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwKKwkJICAgICAic3dpdGNoIHZpZiAocm9sZSAlZCkgJWQgLT4gJWQgY2hhbl90eXBlOiAlZCIsCisJCSAgICAgd2x2aWYtPnJvbGVfaWQsIHdsdmlmLT5jaGFubmVsLCBjaGFubmVsLAorCQkgICAgIGNmZzgwMjExX2dldF9jaGFuZGVmX3R5cGUoJm5ld19jdHgtPmRlZikpOworCisJaWYgKFdBUk5fT05fT05DRSh3bHZpZi0+YnNzX3R5cGUgIT0gQlNTX1RZUEVfQVBfQlNTKSkKKwkJcmV0dXJuIDA7CisKKwlXQVJOX09OKCF0ZXN0X2JpdChXTFZJRl9GTEFHX0JFQUNPTl9ESVNBQkxFRCwgJndsdmlmLT5mbGFncykpOworCisJaWYgKHdsdmlmLT5yYWRhcl9lbmFibGVkKSB7CisJCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIlN0b3AgcmFkYXIgZGV0ZWN0aW9uIik7CisJCXdsY29yZV9od19zZXRfY2FjKHdsLCB3bHZpZiwgZmFsc2UpOworCQl3bHZpZi0+cmFkYXJfZW5hYmxlZCA9IGZhbHNlOworCX0KKworCXdsdmlmLT5iYW5kID0gbmV3X2N0eC0+ZGVmLmNoYW4tPmJhbmQ7CisJd2x2aWYtPmNoYW5uZWwgPSBjaGFubmVsOworCXdsdmlmLT5jaGFubmVsX3R5cGUgPSBjZmc4MDIxMV9nZXRfY2hhbmRlZl90eXBlKCZuZXdfY3R4LT5kZWYpOworCisJLyogc3RhcnQgcmFkYXIgaWYgbmVlZGVkICovCisJaWYgKG5ld19jdHgtPnJhZGFyX2VuYWJsZWQpIHsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAiU3RhcnQgcmFkYXIgZGV0ZWN0aW9uIik7CisJCXdsY29yZV9od19zZXRfY2FjKHdsLCB3bHZpZiwgdHJ1ZSk7CisJCXdsdmlmLT5yYWRhcl9lbmFibGVkID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAord2xjb3JlX29wX3N3aXRjaF92aWZfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWZfY2hhbmN0eF9zd2l0Y2ggKnZpZnMsCisJCQkgICAgIGludCBuX3ZpZnMsCisJCQkgICAgIGVudW0gaWVlZTgwMjExX2NoYW5jdHhfc3dpdGNoX21vZGUgbW9kZSkKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCWludCBpLCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsCisJCSAgICAgIm1hYzgwMjExIHN3aXRjaCBjaGFuY3R4IG5fdmlmcyAlZCBtb2RlICVkIiwKKwkJICAgICBuX3ZpZnMsIG1vZGUpOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgbl92aWZzOyBpKyspIHsKKwkJc3RydWN0IHdsMTJ4eF92aWYgKndsdmlmID0gd2wxMnh4X3ZpZl90b19kYXRhKHZpZnNbaV0udmlmKTsKKworCQlyZXQgPSBfX3dsY29yZV9zd2l0Y2hfdmlmX2NoYW4od2wsIHdsdmlmLCB2aWZzW2ldLm5ld19jdHgpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfc2xlZXA7CisJfQorb3V0X3NsZWVwOgorCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHdsMTI3MV9vcF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LApAQCAtNTIyOCw2ICs1NDM0LDgzIEBACiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogfQogCitzdGF0aWMgY29uc3Qgdm9pZCAqd2xjb3JlX2dldF9iZWFjb25faWUoc3RydWN0IHdsMTI3MSAqd2wsCisJCQkJCXN0cnVjdCB3bDEyeHhfdmlmICp3bHZpZiwKKwkJCQkJdTggZWlkKQoreworCWludCBpZW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpOworCXN0cnVjdCBza19idWZmICpiZWFjb24gPQorCQlpZWVlODAyMTFfYmVhY29uX2dldCh3bC0+aHcsIHdsMTJ4eF93bHZpZl90b192aWYod2x2aWYpKTsKKworCWlmICghYmVhY29uKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBjZmc4MDIxMV9maW5kX2llKGVpZCwKKwkJCQliZWFjb24tPmRhdGEgKyBpZW9mZnNldCwKKwkJCQliZWFjb24tPmxlbiAtIGllb2Zmc2V0KTsKK30KKworc3RhdGljIGludCB3bGNvcmVfZ2V0X2NzYV9jb3VudChzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IHdsMTJ4eF92aWYgKndsdmlmLAorCQkJCXU4ICpjc2FfY291bnQpCit7CisJY29uc3QgdTggKmllOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd19pZSAqaWVfY3NhOworCisJaWUgPSB3bGNvcmVfZ2V0X2JlYWNvbl9pZSh3bCwgd2x2aWYsIFdMQU5fRUlEX0NIQU5ORUxfU1dJVENIKTsKKwlpZiAoIWllKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWllX2NzYSA9IChzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dfaWUgKikmaWVbMl07CisJKmNzYV9jb3VudCA9IGllX2NzYS0+Y291bnQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2xjb3JlX29wX2NoYW5uZWxfc3dpdGNoX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgd2wxMnh4X3ZpZiAqd2x2aWYgPSB3bDEyeHhfdmlmX3RvX2RhdGEodmlmKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dpdGNoIGNoX3N3aXRjaCA9IHsKKwkJLmJsb2NrX3R4ID0gdHJ1ZSwKKwkJLmNoYW5kZWYgPSAqY2hhbmRlZiwKKwl9OworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsCisJCSAgICAgIm1hYzgwMjExIGNoYW5uZWwgc3dpdGNoIGJlYWNvbiAocm9sZSAlZCkiLAorCQkgICAgIHdsdmlmLT5yb2xlX2lkKTsKKworCXJldCA9IHdsY29yZV9nZXRfY3NhX2NvdW50KHdsLCB3bHZpZiwgJmNoX3N3aXRjaC5jb3VudCk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX2Vycm9yKCJlcnJvciBnZXR0aW5nIGJlYWNvbiAoZm9yIENTQSBjb3VudGVyKSIpOworCQlyZXR1cm47CisJfQorCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWlmICh1bmxpa2VseSh3bC0+c3RhdGUgIT0gV0xDT1JFX1NUQVRFX09OKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHdsMTI3MV9wc19lbHBfd2FrZXVwKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bC0+b3BzLT5jaGFubmVsX3N3aXRjaCh3bCwgd2x2aWYsICZjaF9zd2l0Y2gpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3NsZWVwOworCisJc2V0X2JpdChXTFZJRl9GTEFHX0NTX1BST0dSRVNTLCAmd2x2aWYtPmZsYWdzKTsKKworb3V0X3NsZWVwOgorCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKK30KKwogc3RhdGljIHZvaWQgd2xjb3JlX29wX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJICAgIHUzMiBxdWV1ZXMsIGJvb2wgZHJvcCkKIHsKQEAgLTUzNzAsMTkgKzU2NTMsMjYgQEAKIAkJCQkgICAgdTMyIGNoYW5nZWQpCiB7CiAJc3RydWN0IHdsMTJ4eF92aWYgKndsdmlmID0gd2wxMnh4X3ZpZl90b19kYXRhKHZpZik7Ci0Jc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKIAotCXdsY29yZV9od19zdGFfcmNfdXBkYXRlKHdsLCB3bHZpZiwgc3RhLCBjaGFuZ2VkKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBzdGFfcmNfdXBkYXRlIik7CisKKwlpZiAoIShjaGFuZ2VkICYgSUVFRTgwMjExX1JDX0JXX0NIQU5HRUQpKQorCQlyZXR1cm47CisKKwkvKiB0aGlzIGNhbGxiYWNrIGlzIGF0b21pYywgc28gc2NoZWR1bGUgYSBuZXcgd29yayAqLworCXdsdmlmLT5yY191cGRhdGVfYncgPSBzdGEtPmJhbmR3aWR0aDsKKwlpZWVlODAyMTFfcXVldWVfd29yayhodywgJndsdmlmLT5yY191cGRhdGVfd29yayk7CiB9CiAKLXN0YXRpYyBpbnQgd2xjb3JlX29wX2dldF9yc3NpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCi0JCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKLQkJCSAgICAgICBzOCAqcnNzaV9kYm0pCitzdGF0aWMgdm9pZCB3bGNvcmVfb3Bfc3RhX3N0YXRpc3RpY3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCQkgICAgIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQogewogCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CiAJc3RydWN0IHdsMTJ4eF92aWYgKndsdmlmID0gd2wxMnh4X3ZpZl90b19kYXRhKHZpZik7Ci0JaW50IHJldCA9IDA7CisJczggcnNzaV9kYm07CisJaW50IHJldDsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGdldF9yc3NpIik7CiAKQEAgLTUzOTUsMTcgKzU2ODUsMTggQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfc2xlZXA7CiAKLQlyZXQgPSB3bGNvcmVfYWN4X2F2ZXJhZ2VfcnNzaSh3bCwgd2x2aWYsIHJzc2lfZGJtKTsKKwlyZXQgPSB3bGNvcmVfYWN4X2F2ZXJhZ2VfcnNzaSh3bCwgd2x2aWYsICZyc3NpX2RibSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X3NsZWVwOwogCisJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19TSUdOQUwpOworCXNpbmZvLT5zaWduYWwgPSByc3NpX2RibTsKKwogb3V0X3NsZWVwOgogCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOwogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGJvb2wgd2wxMjcxX3R4X2ZyYW1lc19wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQpAQCAtNTU5Niw2ICs1ODg3LDcgQEAKIAkuc2V0X2JpdHJhdGVfbWFzayA9IHdsMTJ4eF9zZXRfYml0cmF0ZV9tYXNrLAogCS5zZXRfZGVmYXVsdF91bmljYXN0X2tleSA9IHdsMTI3MV9vcF9zZXRfZGVmYXVsdF9rZXlfaWR4LAogCS5jaGFubmVsX3N3aXRjaCA9IHdsMTJ4eF9vcF9jaGFubmVsX3N3aXRjaCwKKwkuY2hhbm5lbF9zd2l0Y2hfYmVhY29uID0gd2xjb3JlX29wX2NoYW5uZWxfc3dpdGNoX2JlYWNvbiwKIAkuZmx1c2ggPSB3bGNvcmVfb3BfZmx1c2gsCiAJLnJlbWFpbl9vbl9jaGFubmVsID0gd2xjb3JlX29wX3JlbWFpbl9vbl9jaGFubmVsLAogCS5jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwgPSB3bGNvcmVfb3BfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsLApAQCAtNTYwNCw4ICs1ODk2LDkgQEAKIAkuY2hhbmdlX2NoYW5jdHggPSB3bGNvcmVfb3BfY2hhbmdlX2NoYW5jdHgsCiAJLmFzc2lnbl92aWZfY2hhbmN0eCA9IHdsY29yZV9vcF9hc3NpZ25fdmlmX2NoYW5jdHgsCiAJLnVuYXNzaWduX3ZpZl9jaGFuY3R4ID0gd2xjb3JlX29wX3VuYXNzaWduX3ZpZl9jaGFuY3R4LAorCS5zd2l0Y2hfdmlmX2NoYW5jdHggPSB3bGNvcmVfb3Bfc3dpdGNoX3ZpZl9jaGFuY3R4LAogCS5zdGFfcmNfdXBkYXRlID0gd2xjb3JlX29wX3N0YV9yY191cGRhdGUsCi0JLmdldF9yc3NpID0gd2xjb3JlX29wX2dldF9yc3NpLAorCS5zdGFfc3RhdGlzdGljcyA9IHdsY29yZV9vcF9zdGFfc3RhdGlzdGljcywKIAlDRkc4MDIxMV9URVNUTU9ERV9DTUQod2wxMjcxX3RtX2NtZCkKIH07CiAKQEAgLTU3NzYsNyArNjA2OSw2IEBACiAJd2wtPmh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKIAkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKIAkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMgfAotCQlJRUVFODAyMTFfSFdfU1VQUE9SVFNfVUFQU0QgfAogCQlJRUVFODAyMTFfSFdfSEFTX1JBVEVfQ09OVFJPTCB8CiAJCUlFRUU4MDIxMV9IV19DT05ORUNUSU9OX01PTklUT1IgfAogCQlJRUVFODAyMTFfSFdfUkVQT1JUU19UWF9BQ0tfU1RBVFVTIHwKQEAgLTU4MTEsNyArNjEwMyw4IEBACiAKIAl3bC0+aHctPndpcGh5LT5mbGFncyB8PSBXSVBIWV9GTEFHX0FQX1VBUFNEIHwKIAkJCQlXSVBIWV9GTEFHX0hBU19SRU1BSU5fT05fQ0hBTk5FTCB8Ci0JCQkJV0lQSFlfRkxBR19TVVBQT1JUU19TQ0hFRF9TQ0FOOworCQkJCVdJUEhZX0ZMQUdfU1VQUE9SVFNfU0NIRURfU0NBTiB8CisJCQkJV0lQSFlfRkxBR19IQVNfQ0hBTk5FTF9TV0lUQ0g7CiAKIAkvKiBtYWtlIHN1cmUgYWxsIG91ciBjaGFubmVscyBmaXQgaW4gdGhlIHNjYW5uZWRfY2ggYml0bWFzayAqLwogCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKHdsMTI3MV9jaGFubmVscykgKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL3BzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvcHMuYwppbmRleCBiNTI1MTZlLi40Y2QzMTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvcHMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvcHMuYwpAQCAtNTYsOSArNTYsNiBAQAogCQlnb3RvIG91dDsKIAogCXdsMTJ4eF9mb3JfZWFjaF93bHZpZih3bCwgd2x2aWYpIHsKLQkJaWYgKHdsdmlmLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9BUF9CU1MpCi0JCQlnb3RvIG91dDsKLQogCQlpZiAoIXRlc3RfYml0KFdMVklGX0ZMQUdfSU5fUFMsICZ3bHZpZi0+ZmxhZ3MpICYmCiAJCSAgICB0ZXN0X2JpdChXTFZJRl9GTEFHX0lOX1VTRSwgJndsdmlmLT5mbGFncykpCiAJCQlnb3RvIG91dDsKQEAgLTk1LDkgKzkyLDYgQEAKIAkJcmV0dXJuOwogCiAJd2wxMnh4X2Zvcl9lYWNoX3dsdmlmKHdsLCB3bHZpZikgewotCQlpZiAod2x2aWYtPmJzc190eXBlID09IEJTU19UWVBFX0FQX0JTUykKLQkJCXJldHVybjsKLQogCQlpZiAoIXRlc3RfYml0KFdMVklGX0ZMQUdfSU5fUFMsICZ3bHZpZi0+ZmxhZ3MpICYmCiAJCSAgICB0ZXN0X2JpdChXTFZJRl9GTEFHX0lOX1VTRSwgJndsdmlmLT5mbGFncykpCiAJCQlyZXR1cm47CkBAIC0xMDgsNiArMTAyLDcgQEAKIAlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHdsLT5odywgJndsLT5lbHBfd29yaywKIAkJCQkgICAgIG1zZWNzX3RvX2ppZmZpZXModGltZW91dCkpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwod2wxMjcxX3BzX2VscF9zbGVlcCk7CiAKIGludCB3bDEyNzFfcHNfZWxwX3dha2V1cChzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKQEAgLTE3NSw2ICsxNzAsNyBAQAogb3V0OgogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwod2wxMjcxX3BzX2VscF93YWtldXApOwogCiBpbnQgd2wxMjcxX3BzX3NldF9tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgd2wxMnh4X3ZpZiAqd2x2aWYsCiAJCSAgICAgICBlbnVtIHdsMTI3MV9jbWRfcHNfbW9kZSBtb2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL3ZlbmRvcl9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS92ZW5kb3JfY21kLmMKaW5kZXggYWQ4NmE0OC4uZmQ0ZTliYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL3ZlbmRvcl9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvdmVuZG9yX2NtZC5jCkBAIC0yMSw3ICsyMSw3IEBACiBzdHJ1Y3QgbmxhX3BvbGljeSB3bGNvcmVfdmVuZG9yX2F0dHJfcG9saWN5W05VTV9XTENPUkVfVkVORE9SX0FUVFJdID0gewogCVtXTENPUkVfVkVORE9SX0FUVFJfRlJFUV0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbV0xDT1JFX1ZFTkRPUl9BVFRSX0dST1VQX0lEXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAotCVtXTENPUkVfVkVORE9SX0FUVFJfR1JPVVBfS0VZXQkJPSB7IC50eXBlID0gTkxBX1UzMiwKKwlbV0xDT1JFX1ZFTkRPUl9BVFRSX0dST1VQX0tFWV0JCT0geyAudHlwZSA9IE5MQV9CSU5BUlksCiAJCQkJCQkgICAgLmxlbiA9IFdMQU5fTUFYX0tFWV9MRU4gfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS93bGNvcmUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS93bGNvcmUuaAppbmRleCBkZjc4Y2YxLi5kNTk5Yzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvd2xjb3JlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvdGkvd2xjb3JlL3dsY29yZS5oCkBAIC0xMDYsOCArMTA2LDcgQEAKIAkJCSAgICAgIHN0cnVjdCB3bDEyeHhfdmlmICp3bHZpZiwKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbF9zd2l0Y2ggKmNoX3N3aXRjaCk7CiAJdTMyICgqcHJlX3BrdF9zZW5kKShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTMyIGJ1Zl9vZmZzZXQsIHUzMiBsYXN0X2xlbik7Ci0Jdm9pZCAoKnN0YV9yY191cGRhdGUpKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgd2wxMnh4X3ZpZiAqd2x2aWYsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MzIgY2hhbmdlZCk7CisJdm9pZCAoKnN0YV9yY191cGRhdGUpKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgd2wxMnh4X3ZpZiAqd2x2aWYpOwogCWludCAoKnNldF9wZWVyX2NhcCkoc3RydWN0IHdsMTI3MSAqd2wsCiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9jYXAsCiAJCQkgICAgYm9vbCBhbGxvd19odF9vcGVyYXRpb24sCkBAIC0xMTcsMTAgKzExNiwxNiBAQAogCQkJICAgICAgc3RydWN0IHdsMTI3MV9saW5rICpsbmspOwogCWJvb2wgKCpsbmtfbG93X3ByaW8pKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBobGlkLAogCQkJICAgICBzdHJ1Y3Qgd2wxMjcxX2xpbmsgKmxuayk7CisJaW50ICgqaW50ZXJydXB0X25vdGlmeSkoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgYWN0aW9uKTsKKwlpbnQgKCpyeF9iYV9maWx0ZXIpKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGFjdGlvbik7CisJaW50ICgqYXBfc2xlZXApKHN0cnVjdCB3bDEyNzEgKndsKTsKIAlpbnQgKCpzbWFydF9jb25maWdfc3RhcnQpKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgZ3JvdXBfYml0bWFwKTsKIAlpbnQgKCpzbWFydF9jb25maWdfc3RvcCkoc3RydWN0IHdsMTI3MSAqd2wpOwogCWludCAoKnNtYXJ0X2NvbmZpZ19zZXRfZ3JvdXBfa2V5KShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGdyb3VwX2lkLAogCQkJCQkgIHU4IGtleV9sZW4sIHU4ICprZXkpOworCWludCAoKnNldF9jYWMpKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgd2wxMnh4X3ZpZiAqd2x2aWYsCisJCSAgICAgICBib29sIHN0YXJ0KTsKKwlpbnQgKCpkZnNfbWFzdGVyX3Jlc3RhcnQpKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgd2wxMnh4X3ZpZiAqd2x2aWYpOwogfTsKIAogZW51bSB3bGNvcmVfcGFydGl0aW9ucyB7CkBAIC00NjAsNiArNDY1LDkgQEAKIAkvKiBIVyBIVCAoMTFuKSBjYXBhYmlsaXRpZXMgKi8KIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgaHRfY2FwW1dMQ09SRV9OVU1fQkFORFNdOwogCisJLyogdGhlIGN1cnJlbnQgZGZzIHJlZ2lvbiAqLworCWVudW0gbmw4MDIxMV9kZnNfcmVnaW9ucyBkZnNfcmVnaW9uOworCiAJLyogc2l6ZSBvZiB0aGUgcHJpdmF0ZSBGVyBzdGF0dXMgZGF0YSAqLwogCXNpemVfdCBmd19zdGF0dXNfbGVuOwogCXNpemVfdCBmd19zdGF0dXNfcHJpdl9sZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy90aS93bGNvcmUvd2xjb3JlX2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS93bGNvcmVfaS5oCmluZGV4IDBlNTI1NTYuLjMzOTZjZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS93bGNvcmVfaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3RpL3dsY29yZS93bGNvcmVfaS5oCkBAIC0yNTEsNiArMjUxLDcgQEAKIAlXTFZJRl9GTEFHX0FQX1BST0JFX1JFU1BfU0VULAogCVdMVklGX0ZMQUdfSU5fVVNFLAogCVdMVklGX0ZMQUdfQUNUSVZFLAorCVdMVklGX0ZMQUdfQkVBQ09OX0RJU0FCTEVELAogfTsKIAogc3RydWN0IHdsMTJ4eF92aWY7CkBAIC00MzQsNiArNDM1LDggQEAKIAogCWJvb2wgd21tX2VuYWJsZWQ7CiAKKwlib29sIHJhZGFyX2VuYWJsZWQ7CisKIAkvKiBSeCBTdHJlYW1pbmcgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgcnhfc3RyZWFtaW5nX2VuYWJsZV93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCByeF9zdHJlYW1pbmdfZGlzYWJsZV93b3JrOwpAQCAtNDYzLDYgKzQ2NiwxMCBAQAogCS8qIHdvcmsgZm9yIGNhbmNlbGluZyBST0MgYWZ0ZXIgcGVuZGluZyBhdXRoIHJlcGx5ICovCiAJc3RydWN0IGRlbGF5ZWRfd29yayBwZW5kaW5nX2F1dGhfY29tcGxldGVfd29yazsKIAorCS8qIHVwZGF0ZSByYXRlIGNvbnJvbCAqLworCWVudW0gaWVlZTgwMjExX3N0YV9yeF9iYW5kd2lkdGggcmNfdXBkYXRlX2J3OworCXN0cnVjdCB3b3JrX3N0cnVjdCByY191cGRhdGVfd29yazsKKwogCS8qCiAJICogdG90YWwgZnJlZWQgRlcgcGFja2V0cyBvbiB0aGUgbGluay4KIAkgKiBGb3IgU1RBIHRoaXMgaG9sZHMgdGhlIFBOIG9mIHRoZSBsaW5rIHRvIHRoZSBBUC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgKaW5kZXggNWYxZmRhNC4uNTg5ZmEyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2svY29tbW9uLmgKQEAgLTI1MSw3ICsyNTEsNiBAQAogc3RydWN0IHhlbnZpZl9yeF9jYiB7CiAJdW5zaWduZWQgbG9uZyBleHBpcmVzOwogCWludCBtZXRhX3Nsb3RzX3VzZWQ7Ci0JYm9vbCBmdWxsX2NvYWxlc2NlOwogfTsKIAogI2RlZmluZSBYRU5WSUZfUlhfQ0Ioc2tiKSAoKHN0cnVjdCB4ZW52aWZfcnhfY2IgKikoc2tiKS0+Y2IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL2ludGVyZmFjZS5jCmluZGV4IDkyNTlhNzMuLmYzODIyN2FmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9pbnRlcmZhY2UuYwpAQCAtODAsNyArODAsNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotaW50IHhlbnZpZl9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3N0YXRpYyBpbnQgeGVudmlmX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlID0KIAkJY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCB4ZW52aWZfcXVldWUsIG5hcGkpOwpAQCAtNDgzLDkgKzQ4Myw4IEBACiAJICogYmV0dGVyIGVuYWJsZSBpdC4gVGhlIGxvbmcgdGVybSBzb2x1dGlvbiB3b3VsZCBiZSB0byB1c2UganVzdCBhCiAJICogYnVuY2ggb2YgdmFsaWQgcGFnZSBkZXNjcmlwdG9ycywgd2l0aG91dCBkZXBlbmRlbmN5IG9uIGJhbGxvb25pbmcKIAkgKi8KLQllcnIgPSBhbGxvY194ZW5iYWxsb29uZWRfcGFnZXMoTUFYX1BFTkRJTkdfUkVRUywKLQkJCQkgICAgICAgcXVldWUtPm1tYXBfcGFnZXMsCi0JCQkJICAgICAgIGZhbHNlKTsKKwllcnIgPSBnbnR0YWJfYWxsb2NfcGFnZXMoTUFYX1BFTkRJTkdfUkVRUywKKwkJCQkgcXVldWUtPm1tYXBfcGFnZXMpOwogCWlmIChlcnIpIHsKIAkJbmV0ZGV2X2VycihxdWV1ZS0+dmlmLT5kZXYsICJDb3VsZCBub3QgcmVzZXJ2ZSBtbWFwX3BhZ2VzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC01NzgsNiArNTc3LDcgQEAKIAkJZ290byBlcnJfcnhfdW5iaW5kOwogCX0KIAlxdWV1ZS0+dGFzayA9IHRhc2s7CisJZ2V0X3Rhc2tfc3RydWN0KHRhc2spOwogCiAJdGFzayA9IGt0aHJlYWRfY3JlYXRlKHhlbnZpZl9kZWFsbG9jX2t0aHJlYWQsCiAJCQkgICAgICAodm9pZCAqKXF1ZXVlLCAiJXMtZGVhbGxvYyIsIHF1ZXVlLT5uYW1lKTsKQEAgLTYzNCw2ICs2MzQsNyBAQAogCiAJCWlmIChxdWV1ZS0+dGFzaykgewogCQkJa3RocmVhZF9zdG9wKHF1ZXVlLT50YXNrKTsKKwkJCXB1dF90YXNrX3N0cnVjdChxdWV1ZS0+dGFzayk7CiAJCQlxdWV1ZS0+dGFzayA9IE5VTEw7CiAJCX0KIApAQCAtNjYyLDcgKzY2Myw3IEBACiAgKi8KIHZvaWQgeGVudmlmX2RlaW5pdF9xdWV1ZShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSkKIHsKLQlmcmVlX3hlbmJhbGxvb25lZF9wYWdlcyhNQVhfUEVORElOR19SRVFTLCBxdWV1ZS0+bW1hcF9wYWdlcyk7CisJZ250dGFiX2ZyZWVfcGFnZXMoTUFYX1BFTkRJTkdfUkVRUywgcXVldWUtPm1tYXBfcGFnZXMpOwogfQogCiB2b2lkIHhlbnZpZl9mcmVlKHN0cnVjdCB4ZW52aWYgKnZpZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRiYWNrL25ldGJhY2suYwppbmRleCA5MDhlNjVlLi5mN2EzMWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay9uZXRiYWNrLmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2svbmV0YmFjay5jCkBAIC0yMzMsNTEgKzIzMyw2IEBACiAJfQogfQogCi0vKgotICogUmV0dXJucyB0cnVlIGlmIHdlIHNob3VsZCBzdGFydCBhIG5ldyByZWNlaXZlIGJ1ZmZlciBpbnN0ZWFkIG9mCi0gKiBhZGRpbmcgJ3NpemUnIGJ5dGVzIHRvIGEgYnVmZmVyIHdoaWNoIGN1cnJlbnRseSBjb250YWlucyAnb2Zmc2V0JwotICogYnl0ZXMuCi0gKi8KLXN0YXRpYyBib29sIHN0YXJ0X25ld19yeF9idWZmZXIoaW50IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgaGVhZCwKLQkJCQlib29sIGZ1bGxfY29hbGVzY2UpCi17Ci0JLyogc2ltcGxlIGNhc2U6IHdlIGhhdmUgY29tcGxldGVseSBmaWxsZWQgdGhlIGN1cnJlbnQgYnVmZmVyLiAqLwotCWlmIChvZmZzZXQgPT0gTUFYX0JVRkZFUl9PRkZTRVQpCi0JCXJldHVybiB0cnVlOwotCi0JLyoKLQkgKiBjb21wbGV4IGNhc2U6IHN0YXJ0IGEgZnJlc2ggYnVmZmVyIGlmIHRoZSBjdXJyZW50IGZyYWcKLQkgKiB3b3VsZCBvdmVyZmxvdyB0aGUgY3VycmVudCBidWZmZXIgYnV0IG9ubHkgaWY6Ci0JICogICAgIChpKSAgIHRoaXMgZnJhZyB3b3VsZCBmaXQgY29tcGxldGVseSBpbiB0aGUgbmV4dCBidWZmZXIKLQkgKiBhbmQgKGlpKSAgdGhlcmUgaXMgYWxyZWFkeSBzb21lIGRhdGEgaW4gdGhlIGN1cnJlbnQgYnVmZmVyCi0JICogYW5kIChpaWkpIHRoaXMgaXMgbm90IHRoZSBoZWFkIGJ1ZmZlci4KLQkgKiBhbmQgKGl2KSAgdGhlcmUgaXMgbm8gbmVlZCB0byBmdWxseSB1dGlsaXplIHRoZSBidWZmZXJzCi0JICoKLQkgKiBXaGVyZToKLQkgKiAtIChpKSBzdG9wcyB1cyBzcGxpdHRpbmcgYSBmcmFnIGludG8gdHdvIGNvcGllcwotCSAqICAgdW5sZXNzIHRoZSBmcmFnIGlzIHRvbyBsYXJnZSBmb3IgYSBzaW5nbGUgYnVmZmVyLgotCSAqIC0gKGlpKSBzdG9wcyB1cyBmcm9tIGxlYXZpbmcgYSBidWZmZXIgcG9pbnRsZXNzbHkgZW1wdHkuCi0JICogLSAoaWlpKSBzdG9wcyB1cyBsZWF2aW5nIHRoZSBmaXJzdCBidWZmZXIKLQkgKiAgIGVtcHR5LiBTdHJpY3RseSBzcGVha2luZyB0aGlzIGlzIGFscmVhZHkgY292ZXJlZAotCSAqICAgYnkgKGlpKSBidXQgaXMgZXhwbGljaXRseSBjaGVja2VkIGJlY2F1c2UKLQkgKiAgIG5ldGZyb250IHJlbGllcyBvbiB0aGUgZmlyc3QgYnVmZmVyIGJlaW5nCi0JICogICBub24tZW1wdHkgYW5kIGNhbiBjcmFzaCBvdGhlcndpc2UuCi0JICogLSAoaXYpIGlzIG5lZWRlZCBmb3Igc2ticyB3aGljaCBjYW4gdXNlIHVwIG1vcmUgdGhhbiBNQVhfU0tCX0ZSQUdTCi0JICogICBzbG90Ci0JICoKLQkgKiBUaGlzIG1lYW5zIHdlIHdpbGwgZWZmZWN0aXZlbHkgbGluZWFyaXNlIHNtYWxsCi0JICogZnJhZ3MgYnV0IGRvIG5vdCBuZWVkbGVzc2x5IHNwbGl0IGxhcmdlIGJ1ZmZlcnMKLQkgKiBpbnRvIG11bHRpcGxlIGNvcGllcyB0ZW5kIHRvIGdpdmUgbGFyZ2UgZnJhZ3MgdGhlaXIKLQkgKiBvd24gYnVmZmVycyBhcyBiZWZvcmUuCi0JICovCi0JQlVHX09OKHNpemUgPiBNQVhfQlVGRkVSX09GRlNFVCk7Ci0JaWYgKChvZmZzZXQgKyBzaXplID4gTUFYX0JVRkZFUl9PRkZTRVQpICYmIG9mZnNldCAmJiAhaGVhZCAmJgotCSAgICAhZnVsbF9jb2FsZXNjZSkKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHN0cnVjdCBuZXRyeF9wZW5kaW5nX29wZXJhdGlvbnMgewogCXVuc2lnbmVkIGNvcHlfcHJvZCwgY29weV9jb25zOwogCXVuc2lnbmVkIG1ldGFfcHJvZCwgbWV0YV9jb25zOwpAQCAtMzE0LDkgKzI2OSw3IEBACiBzdGF0aWMgdm9pZCB4ZW52aWZfZ29wX2ZyYWdfY29weShzdHJ1Y3QgeGVudmlmX3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgc3RydWN0IG5ldHJ4X3BlbmRpbmdfb3BlcmF0aW9ucyAqbnBvLAogCQkJCSBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgaW50ICpoZWFkLAotCQkJCSBzdHJ1Y3QgeGVudmlmX3F1ZXVlICpmb3JlaWduX3F1ZXVlLAotCQkJCSBncmFudF9yZWZfdCBmb3JlaWduX2dyZWYpCisJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbnQgKmhlYWQpCiB7CiAJc3RydWN0IGdudHRhYl9jb3B5ICpjb3B5X2dvcDsKIAlzdHJ1Y3QgeGVudmlmX3J4X21ldGEgKm1ldGE7CkBAIC0zMzMsMjcgKzI4NiwxOCBAQAogCW9mZnNldCAmPSB+UEFHRV9NQVNLOwogCiAJd2hpbGUgKHNpemUgPiAwKSB7CisJCXN0cnVjdCB4ZW5fcGFnZV9mb3JlaWduICpmb3JlaWduOworCiAJCUJVR19PTihvZmZzZXQgPj0gUEFHRV9TSVpFKTsKIAkJQlVHX09OKG5wby0+Y29weV9vZmYgPiBNQVhfQlVGRkVSX09GRlNFVCk7CiAKLQkJYnl0ZXMgPSBQQUdFX1NJWkUgLSBvZmZzZXQ7CisJCWlmIChucG8tPmNvcHlfb2ZmID09IE1BWF9CVUZGRVJfT0ZGU0VUKQorCQkJbWV0YSA9IGdldF9uZXh0X3J4X2J1ZmZlcihxdWV1ZSwgbnBvKTsKIAorCQlieXRlcyA9IFBBR0VfU0laRSAtIG9mZnNldDsKIAkJaWYgKGJ5dGVzID4gc2l6ZSkKIAkJCWJ5dGVzID0gc2l6ZTsKIAotCQlpZiAoc3RhcnRfbmV3X3J4X2J1ZmZlcihucG8tPmNvcHlfb2ZmLAotCQkJCQlieXRlcywKLQkJCQkJKmhlYWQsCi0JCQkJCVhFTlZJRl9SWF9DQihza2IpLT5mdWxsX2NvYWxlc2NlKSkgewotCQkJLyoKLQkJCSAqIE5ldGZyb250IHJlcXVpcmVzIHRoZXJlIHRvIGJlIHNvbWUgZGF0YSBpbiB0aGUgaGVhZAotCQkJICogYnVmZmVyLgotCQkJICovCi0JCQlCVUdfT04oKmhlYWQpOwotCi0JCQltZXRhID0gZ2V0X25leHRfcnhfYnVmZmVyKHF1ZXVlLCBucG8pOwotCQl9Ci0KIAkJaWYgKG5wby0+Y29weV9vZmYgKyBieXRlcyA+IE1BWF9CVUZGRVJfT0ZGU0VUKQogCQkJYnl0ZXMgPSBNQVhfQlVGRkVSX09GRlNFVCAtIG5wby0+Y29weV9vZmY7CiAKQEAgLTM2MSw5ICszMDUsMTAgQEAKIAkJY29weV9nb3AtPmZsYWdzID0gR05UQ09QWV9kZXN0X2dyZWY7CiAJCWNvcHlfZ29wLT5sZW4gPSBieXRlczsKIAotCQlpZiAoZm9yZWlnbl9xdWV1ZSkgewotCQkJY29weV9nb3AtPnNvdXJjZS5kb21pZCA9IGZvcmVpZ25fcXVldWUtPnZpZi0+ZG9taWQ7Ci0JCQljb3B5X2dvcC0+c291cmNlLnUucmVmID0gZm9yZWlnbl9ncmVmOworCQlmb3JlaWduID0geGVuX3BhZ2VfZm9yZWlnbihwYWdlKTsKKwkJaWYgKGZvcmVpZ24pIHsKKwkJCWNvcHlfZ29wLT5zb3VyY2UuZG9taWQgPSBmb3JlaWduLT5kb21pZDsKKwkJCWNvcHlfZ29wLT5zb3VyY2UudS5yZWYgPSBmb3JlaWduLT5ncmVmOwogCQkJY29weV9nb3AtPmZsYWdzIHw9IEdOVENPUFlfc291cmNlX2dyZWY7CiAJCX0gZWxzZSB7CiAJCQljb3B5X2dvcC0+c291cmNlLmRvbWlkID0gRE9NSURfU0VMRjsKQEAgLTQwNiwzNSArMzUxLDYgQEAKIH0KIAogLyoKLSAqIEZpbmQgdGhlIGdyYW50IHJlZiBmb3IgYSBnaXZlbiBmcmFnIGluIGEgY2hhaW4gb2Ygc3RydWN0IHVidWZfaW5mbydzCi0gKiBza2I6IHRoZSBza2IgaXRzZWxmCi0gKiBpOiB0aGUgZnJhZydzIG51bWJlcgotICogdWJ1ZjogYSBwb2ludGVyIHRvIGFuIGVsZW1lbnQgaW4gdGhlIGNoYWluLiBJdCBzaG91bGQgbm90IGJlIE5VTEwKLSAqCi0gKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZWxlbWVudCBpbiB0aGUgY2hhaW4gd2hlcmUgdGhlIHBhZ2Ugd2VyZSBmb3VuZC4gSWYKLSAqIG5vdCBmb3VuZCwgcmV0dXJucyBOVUxMLgotICogU2VlIHRoZSBkZWZpbml0aW9uIG9mIGNhbGxiYWNrX3N0cnVjdCBpbiBjb21tb24uaCBmb3IgbW9yZSBkZXRhaWxzIGFib3V0Ci0gKiB0aGUgY2hhaW4uCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdWJ1Zl9pbmZvICp4ZW52aWZfZmluZF9ncmVmKGNvbnN0IHN0cnVjdCBza19idWZmICpjb25zdCBza2IsCi0JCQkJCQljb25zdCBpbnQgaSwKLQkJCQkJCWNvbnN0IHN0cnVjdCB1YnVmX2luZm8gKnVidWYpCi17Ci0Jc3RydWN0IHhlbnZpZl9xdWV1ZSAqZm9yZWlnbl9xdWV1ZSA9IHVidWZfdG9fcXVldWUodWJ1Zik7Ci0KLQlkbyB7Ci0JCXUxNiBwZW5kaW5nX2lkeCA9IHVidWYtPmRlc2M7Ci0KLQkJaWYgKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZS5wID09Ci0JCSAgICBmb3JlaWduX3F1ZXVlLT5tbWFwX3BhZ2VzW3BlbmRpbmdfaWR4XSkKLQkJCWJyZWFrOwotCQl1YnVmID0gKHN0cnVjdCB1YnVmX2luZm8gKikgdWJ1Zi0+Y3R4OwotCX0gd2hpbGUgKHVidWYpOwotCi0JcmV0dXJuIHVidWY7Ci19Ci0KLS8qCiAgKiBQcmVwYXJlIGFuIFNLQiB0byBiZSB0cmFuc21pdHRlZCB0byB0aGUgZnJvbnRlbmQuCiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBncmFudCBvcGVyYXRpb25zLCBtZXRhCkBAIC00NTksOCArMzc1LDYgQEAKIAlpbnQgaGVhZCA9IDE7CiAJaW50IG9sZF9tZXRhX3Byb2Q7CiAJaW50IGdzb190eXBlOwotCWNvbnN0IHN0cnVjdCB1YnVmX2luZm8gKnVidWYgPSBza2Jfc2hpbmZvKHNrYiktPmRlc3RydWN0b3JfYXJnOwotCWNvbnN0IHN0cnVjdCB1YnVmX2luZm8gKmNvbnN0IGhlYWRfdWJ1ZiA9IHVidWY7CiAKIAlvbGRfbWV0YV9wcm9kID0gbnBvLT5tZXRhX3Byb2Q7CiAKQEAgLTUwNyw2OCArNDIxLDE2IEBACiAJCQlsZW4gPSBza2JfdGFpbF9wb2ludGVyKHNrYikgLSBkYXRhOwogCiAJCXhlbnZpZl9nb3BfZnJhZ19jb3B5KHF1ZXVlLCBza2IsIG5wbywKLQkJCQkgICAgIHZpcnRfdG9fcGFnZShkYXRhKSwgbGVuLCBvZmZzZXQsICZoZWFkLAotCQkJCSAgICAgTlVMTCwKLQkJCQkgICAgIDApOworCQkJCSAgICAgdmlydF90b19wYWdlKGRhdGEpLCBsZW4sIG9mZnNldCwgJmhlYWQpOwogCQlkYXRhICs9IGxlbjsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnJfZnJhZ3M7IGkrKykgewotCQkvKiBUaGlzIHZhcmlhYmxlIGFsc28gc2lnbmFscyB3aGV0aGVyIGZvcmVpZ25fZ3JlZiBoYXMgYSByZWFsCi0JCSAqIHZhbHVlIG9yIG5vdC4KLQkJICovCi0JCXN0cnVjdCB4ZW52aWZfcXVldWUgKmZvcmVpZ25fcXVldWUgPSBOVUxMOwotCQlncmFudF9yZWZfdCBmb3JlaWduX2dyZWY7Ci0KLQkJaWYgKChza2Jfc2hpbmZvKHNrYiktPnR4X2ZsYWdzICYgU0tCVFhfREVWX1pFUk9DT1BZKSAmJgotCQkJKHVidWYtPmNhbGxiYWNrID09ICZ4ZW52aWZfemVyb2NvcHlfY2FsbGJhY2spKSB7Ci0JCQljb25zdCBzdHJ1Y3QgdWJ1Zl9pbmZvICpjb25zdCBzdGFydHBvaW50ID0gdWJ1ZjsKLQotCQkJLyogSWRlYWxseSB1YnVmIHBvaW50cyB0byB0aGUgY2hhaW4gZWxlbWVudCB3aGljaAotCQkJICogYmVsb25ncyB0byB0aGlzIGZyYWcuIE9yIGlmIGZyYWdzIHdlcmUgcmVtb3ZlZCBmcm9tCi0JCQkgKiB0aGUgYmVnaW5uaW5nLCB0aGVuIHNob3J0bHkgYmVmb3JlIGl0LgotCQkJICovCi0JCQl1YnVmID0geGVudmlmX2ZpbmRfZ3JlZihza2IsIGksIHVidWYpOwotCi0JCQkvKiBUcnkgYWdhaW4gZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0LCBpZiB3ZQotCQkJICogaGF2ZW4ndCB0cmllZCBmcm9tIHRoZXJlLiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaW4KLQkJCSAqIHRoZSB1bmxpa2VseSBldmVudCBvZiByZW9yZGVyaW5nIHRoZSBvcmlnaW5hbCBmcmFncy4KLQkJCSAqIEZvciBpbmplY3RlZCBsb2NhbCBwYWdlcyBpdCdzIGFuIHVubmVjZXNzYXJ5IHNlY29uZAotCQkJICogcnVuLgotCQkJICovCi0JCQlpZiAodW5saWtlbHkoIXVidWYpICYmIHN0YXJ0cG9pbnQgIT0gaGVhZF91YnVmKQotCQkJCXVidWYgPSB4ZW52aWZfZmluZF9ncmVmKHNrYiwgaSwgaGVhZF91YnVmKTsKLQotCQkJaWYgKGxpa2VseSh1YnVmKSkgewotCQkJCXUxNiBwZW5kaW5nX2lkeCA9IHVidWYtPmRlc2M7Ci0KLQkJCQlmb3JlaWduX3F1ZXVlID0gdWJ1Zl90b19xdWV1ZSh1YnVmKTsKLQkJCQlmb3JlaWduX2dyZWYgPQotCQkJCQlmb3JlaWduX3F1ZXVlLT5wZW5kaW5nX3R4X2luZm9bcGVuZGluZ19pZHhdLnJlcS5ncmVmOwotCQkJCS8qIEp1c3QgYSBzYWZldHkgbWVhc3VyZS4gSWYgdGhpcyB3YXMgdGhlIGxhc3QKLQkJCQkgKiBlbGVtZW50IG9uIHRoZSBsaXN0LCB0aGUgZm9yIGxvb3Agd2lsbAotCQkJCSAqIGl0ZXJhdGUgYWdhaW4gaWYgYSBsb2NhbCBwYWdlIHdlcmUgYWRkZWQgdG8KLQkJCQkgKiB0aGUgZW5kLiBVc2luZyBoZWFkX3VidWYgaGVyZSBwcmV2ZW50cyB0aGUKLQkJCQkgKiBzZWNvbmQgc2VhcmNoIG9uIHRoZSBjaGFpbi4gT3IgdGhlIG9yaWdpbmFsCi0JCQkJICogZnJhZ3MgY2hhbmdlZCBvcmRlciwgYnV0IHRoYXQncyBsZXNzIGxpa2VseS4KLQkJCQkgKiBJbiBhbnkgd2F5LCB1YnVmIHNob3VsZG4ndCBiZSBOVUxMLgotCQkJCSAqLwotCQkJCXVidWYgPSB1YnVmLT5jdHggPwotCQkJCQkoc3RydWN0IHVidWZfaW5mbyAqKSB1YnVmLT5jdHggOgotCQkJCQloZWFkX3VidWY7Ci0JCQl9IGVsc2UKLQkJCQkvKiBUaGlzIGZyYWcgd2FzIGEgbG9jYWwgcGFnZSwgYWRkZWQgdG8gdGhlCi0JCQkJICogYXJyYXkgYWZ0ZXIgdGhlIHNrYiBsZWZ0IG5ldGJhY2suCi0JCQkJICovCi0JCQkJdWJ1ZiA9IGhlYWRfdWJ1ZjsKLQkJfQogCQl4ZW52aWZfZ29wX2ZyYWdfY29weShxdWV1ZSwgc2tiLCBucG8sCiAJCQkJICAgICBza2JfZnJhZ19wYWdlKCZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldKSwKIAkJCQkgICAgIHNrYl9mcmFnX3NpemUoJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0pLAogCQkJCSAgICAgc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlX29mZnNldCwKLQkJCQkgICAgICZoZWFkLAotCQkJCSAgICAgZm9yZWlnbl9xdWV1ZSwKLQkJCQkgICAgIGZvcmVpZ25fcXVldWUgPyBmb3JlaWduX2dyZWYgOiBVSU5UX01BWCk7CisJCQkJICAgICAmaGVhZCk7CiAJfQogCiAJcmV0dXJuIG5wby0+bWV0YV9wcm9kIC0gb2xkX21ldGFfcHJvZDsKQEAgLTY1Miw2MCArNTE0LDE1IEBACiAKIAl3aGlsZSAoeGVudmlmX3J4X3Jpbmdfc2xvdHNfYXZhaWxhYmxlKHF1ZXVlLCBYRU5fTkVUQktfUlhfU0xPVFNfTUFYKQogCSAgICAgICAmJiAoc2tiID0geGVudmlmX3J4X2RlcXVldWUocXVldWUpKSAhPSBOVUxMKSB7Ci0JCVJJTkdfSURYIG1heF9zbG90c19uZWVkZWQ7CiAJCVJJTkdfSURYIG9sZF9yZXFfY29uczsKIAkJUklOR19JRFggcmluZ19zbG90c191c2VkOwotCQlpbnQgaTsKIAogCQlxdWV1ZS0+bGFzdF9yeF90aW1lID0gamlmZmllczsKIAotCQkvKiBXZSBuZWVkIGEgY2hlYXAgd29yc2UgY2FzZSBlc3RpbWF0ZSBmb3IgdGhlIG51bWJlciBvZgotCQkgKiBzbG90cyB3ZSdsbCB1c2UuCi0JCSAqLwotCi0JCW1heF9zbG90c19uZWVkZWQgPSBESVZfUk9VTkRfVVAob2Zmc2V0X2luX3BhZ2Uoc2tiLT5kYXRhKSArCi0JCQkJCQlza2JfaGVhZGxlbihza2IpLAotCQkJCQkJUEFHRV9TSVpFKTsKLQkJZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykgewotCQkJdW5zaWduZWQgaW50IHNpemU7Ci0JCQl1bnNpZ25lZCBpbnQgb2Zmc2V0OwotCi0JCQlzaXplID0gc2tiX2ZyYWdfc2l6ZSgmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXSk7Ci0JCQlvZmZzZXQgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0OwotCi0JCQkvKiBGb3IgYSB3b3JzZS1jYXNlIGVzdGltYXRlIHdlIG5lZWQgdG8gZmFjdG9yIGluCi0JCQkgKiB0aGUgZnJhZ21lbnQgcGFnZSBvZmZzZXQgYXMgdGhpcyB3aWxsIGFmZmVjdCB0aGUKLQkJCSAqIG51bWJlciBvZiB0aW1lcyB4ZW52aWZfZ29wX2ZyYWdfY29weSgpIHdpbGwKLQkJCSAqIGNhbGwgc3RhcnRfbmV3X3J4X2J1ZmZlcigpLgotCQkJICovCi0JCQltYXhfc2xvdHNfbmVlZGVkICs9IERJVl9ST1VORF9VUChvZmZzZXQgKyBzaXplLAotCQkJCQkJCSBQQUdFX1NJWkUpOwotCQl9Ci0KLQkJLyogVG8gYXZvaWQgdGhlIGVzdGltYXRlIGJlY29taW5nIHRvbyBwZXNzaW1hbCBmb3Igc29tZQotCQkgKiBmcm9udGVuZHMgdGhhdCBsaW1pdCBwb3N0ZWQgcnggcmVxdWVzdHMsIGNhcCB0aGUgZXN0aW1hdGUKLQkJICogYXQgTUFYX1NLQl9GUkFHUy4gSW4gdGhpcyBjYXNlIG5ldGJhY2sgd2lsbCBmdWxseSBjb2FsZXNjZQotCQkgKiB0aGUgc2tiIGludG8gdGhlIHByb3ZpZGVkIHNsb3RzLgotCQkgKi8KLQkJaWYgKG1heF9zbG90c19uZWVkZWQgPiBNQVhfU0tCX0ZSQUdTKSB7Ci0JCQltYXhfc2xvdHNfbmVlZGVkID0gTUFYX1NLQl9GUkFHUzsKLQkJCVhFTlZJRl9SWF9DQihza2IpLT5mdWxsX2NvYWxlc2NlID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCVhFTlZJRl9SWF9DQihza2IpLT5mdWxsX2NvYWxlc2NlID0gZmFsc2U7Ci0JCX0KLQotCQkvKiBXZSBtYXkgbmVlZCBvbmUgbW9yZSBzbG90IGZvciBHU08gbWV0YWRhdGEgKi8KLQkJaWYgKHNrYl9pc19nc28oc2tiKSAmJgotCQkgICAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSAmIFNLQl9HU09fVENQVjQgfHwKLQkJICAgIHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgJiBTS0JfR1NPX1RDUFY2KSkKLQkJCW1heF9zbG90c19uZWVkZWQrKzsKLQogCQlvbGRfcmVxX2NvbnMgPSBxdWV1ZS0+cngucmVxX2NvbnM7CiAJCVhFTlZJRl9SWF9DQihza2IpLT5tZXRhX3Nsb3RzX3VzZWQgPSB4ZW52aWZfZ29wX3NrYihza2IsICZucG8sIHF1ZXVlKTsKIAkJcmluZ19zbG90c191c2VkID0gcXVldWUtPnJ4LnJlcV9jb25zIC0gb2xkX3JlcV9jb25zOwogCi0JCUJVR19PTihyaW5nX3Nsb3RzX3VzZWQgPiBtYXhfc2xvdHNfbmVlZGVkKTsKLQogCQlfX3NrYl9xdWV1ZV90YWlsKCZyeHEsIHNrYik7CiAJfQogCkBAIC0xMjQxLDEyICsxMDU4LDYgQEAKIAkJLyogVGFrZSBhbiBleHRyYSByZWZlcmVuY2UgdG8gb2Zmc2V0IG5ldHdvcmsgc3RhY2sncyBwdXRfcGFnZSAqLwogCQlnZXRfcGFnZShxdWV1ZS0+bW1hcF9wYWdlc1twZW5kaW5nX2lkeF0pOwogCX0KLQkvKiBGSVhNRTogX19za2JfZmlsbF9wYWdlX2Rlc2Mgc2V0IHRoaXMgdG8gdHJ1ZSBiZWNhdXNlIHBhZ2UtPnBmbWVtYWxsb2MKLQkgKiBvdmVybGFwcyB3aXRoICJpbmRleCIsIGFuZCAibWFwcGluZyIgaXMgbm90IHNldC4gSSB0aGluayBtYXBwaW5nCi0JICogc2hvdWxkIGJlIHNldC4gSWYgZGVsaXZlcmVkIHRvIGxvY2FsIHN0YWNrLCBpdCB3b3VsZCBkcm9wIHRoaXMKLQkgKiBza2IgaW4gc2tfZmlsdGVyIHVubGVzcyB0aGUgc29ja2V0IGhhcyB0aGUgcmlnaHQgdG8gdXNlIGl0LgotCSAqLwotCXNrYi0+cGZtZW1hbGxvYwk9IGZhbHNlOwogfQogCiBzdGF0aWMgaW50IHhlbnZpZl9nZXRfZXh0cmFzKHN0cnVjdCB4ZW52aWZfcXVldWUgKnF1ZXVlLApAQCAtMjEwOSw4ICsxOTIwLDcgQEAKIAkJICovCiAJCWlmICh1bmxpa2VseSh2aWYtPmRpc2FibGVkICYmIHF1ZXVlLT5pZCA9PSAwKSkgewogCQkJeGVudmlmX2NhcnJpZXJfb2ZmKHZpZik7Ci0JCQl4ZW52aWZfcnhfcXVldWVfcHVyZ2UocXVldWUpOwotCQkJY29udGludWU7CisJCQlicmVhazsKIAkJfQogCiAJCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZxdWV1ZS0+cnhfcXVldWUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwppbmRleCBkOGMxMDc2Li5lOWI5NjBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwpAQCAtMTQyLDEwICsxNDIsNiBAQAogCXN0cnVjdCBza19idWZmICpyeF9za2JzW05FVF9SWF9SSU5HX1NJWkVdOwogCWdyYW50X3JlZl90IGdyZWZfcnhfaGVhZDsKIAlncmFudF9yZWZfdCBncmFudF9yeF9yZWZbTkVUX1JYX1JJTkdfU0laRV07Ci0KLQl1bnNpZ25lZCBsb25nIHJ4X3Bmbl9hcnJheVtORVRfUlhfUklOR19TSVpFXTsKLQlzdHJ1Y3QgbXVsdGljYWxsX2VudHJ5IHJ4X21jbFtORVRfUlhfUklOR19TSVpFKzFdOwotCXN0cnVjdCBtbXVfdXBkYXRlIHJ4X21tdVtORVRfUlhfUklOR19TSVpFXTsKIH07CiAKIHN0cnVjdCBuZXRmcm9udF9pbmZvIHsKQEAgLTIyMywxMSArMjE5LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19TWVNGUwotc3RhdGljIGludCB4ZW5uZXRfc3lzZnNfYWRkaWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7Ci1zdGF0aWMgdm9pZCB4ZW5uZXRfc3lzZnNfZGVsaWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7Ci0jZWxzZSAvKiAhQ09ORklHX1NZU0ZTICovCi0jZGVmaW5lIHhlbm5ldF9zeXNmc19hZGRpZihkZXYpICgwKQotI2RlZmluZSB4ZW5uZXRfc3lzZnNfZGVsaWYoZGV2KSBkbyB7IH0gd2hpbGUgKDApCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB4ZW5uZXRfZGV2X2dyb3VwOwogI2VuZGlmCiAKIHN0YXRpYyBib29sIHhlbm5ldF9jYW5fc2coc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTQyNCwxMDkgKzQxNiw2OCBAQAogCXhlbm5ldF9tYXliZV93YWtlX3R4KHF1ZXVlKTsKIH0KIAotc3RhdGljIHZvaWQgeGVubmV0X21ha2VfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGZyb250X3F1ZXVlICpxdWV1ZSwKLQkJCSAgICAgIHN0cnVjdCB4ZW5fbmV0aWZfdHhfcmVxdWVzdCAqdHgpCitzdGF0aWMgc3RydWN0IHhlbl9uZXRpZl90eF9yZXF1ZXN0ICp4ZW5uZXRfbWFrZV9vbmVfdHhyZXEoCisJc3RydWN0IG5ldGZyb250X3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGxlbikKIHsKLQljaGFyICpkYXRhID0gc2tiLT5kYXRhOwotCXVuc2lnbmVkIGxvbmcgbWZuOwotCVJJTkdfSURYIHByb2QgPSBxdWV1ZS0+dHgucmVxX3Byb2RfcHZ0OwotCWludCBmcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0JdW5zaWduZWQgaW50IG9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGRhdGEpOwotCXVuc2lnbmVkIGludCBsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCXVuc2lnbmVkIGludCBpZDsKKwlzdHJ1Y3QgeGVuX25ldGlmX3R4X3JlcXVlc3QgKnR4OwogCWdyYW50X3JlZl90IHJlZjsKLQlpbnQgaTsKIAotCS8qIFdoaWxlIHRoZSBoZWFkZXIgb3ZlcmxhcHMgYSBwYWdlIGJvdW5kYXJ5IChpbmNsdWRpbmcgYmVpbmcKLQkgICBsYXJnZXIgdGhhbiBhIHBhZ2UpLCBzcGxpdCBpdCBpdCBpbnRvIHBhZ2Utc2l6ZWQgY2h1bmtzLiAqLwotCXdoaWxlIChsZW4gPiBQQUdFX1NJWkUgLSBvZmZzZXQpIHsKLQkJdHgtPnNpemUgPSBQQUdFX1NJWkUgLSBvZmZzZXQ7CisJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBQQUdFX1NJWkUgLSBvZmZzZXQsIGxlbik7CisKKwlpZCA9IGdldF9pZF9mcm9tX2ZyZWVsaXN0KCZxdWV1ZS0+dHhfc2tiX2ZyZWVsaXN0LCBxdWV1ZS0+dHhfc2ticyk7CisJdHggPSBSSU5HX0dFVF9SRVFVRVNUKCZxdWV1ZS0+dHgsIHF1ZXVlLT50eC5yZXFfcHJvZF9wdnQrKyk7CisJcmVmID0gZ250dGFiX2NsYWltX2dyYW50X3JlZmVyZW5jZSgmcXVldWUtPmdyZWZfdHhfaGVhZCk7CisJQlVHX09OKChzaWduZWQgc2hvcnQpcmVmIDwgMCk7CisKKwlnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3NfcmVmKHJlZiwgcXVldWUtPmluZm8tPnhiZGV2LT5vdGhlcmVuZF9pZCwKKwkJCQkJcGFnZV90b19tZm4ocGFnZSksIEdOVE1BUF9yZWFkb25seSk7CisKKwlxdWV1ZS0+dHhfc2tic1tpZF0uc2tiID0gc2tiOworCXF1ZXVlLT5ncmFudF90eF9wYWdlW2lkXSA9IHBhZ2U7CisJcXVldWUtPmdyYW50X3R4X3JlZltpZF0gPSByZWY7CisKKwl0eC0+aWQgPSBpZDsKKwl0eC0+Z3JlZiA9IHJlZjsKKwl0eC0+b2Zmc2V0ID0gb2Zmc2V0OworCXR4LT5zaXplID0gbGVuOworCXR4LT5mbGFncyA9IDA7CisKKwlyZXR1cm4gdHg7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgeGVuX25ldGlmX3R4X3JlcXVlc3QgKnhlbm5ldF9tYWtlX3R4cmVxcygKKwlzdHJ1Y3QgbmV0ZnJvbnRfcXVldWUgKnF1ZXVlLCBzdHJ1Y3QgeGVuX25ldGlmX3R4X3JlcXVlc3QgKnR4LAorCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwYWdlICpwYWdlLAorCXVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBsZW4pCit7CisJLyogU2tpcCB1bnVzZWQgZnJhbWVzIGZyb20gc3RhcnQgb2YgcGFnZSAqLworCXBhZ2UgKz0gb2Zmc2V0ID4+IFBBR0VfU0hJRlQ7CisJb2Zmc2V0ICY9IH5QQUdFX01BU0s7CisKKwl3aGlsZSAobGVuKSB7CiAJCXR4LT5mbGFncyB8PSBYRU5fTkVUVFhGX21vcmVfZGF0YTsKLQkJbGVuIC09IHR4LT5zaXplOwotCQlkYXRhICs9IHR4LT5zaXplOworCQl0eCA9IHhlbm5ldF9tYWtlX29uZV90eHJlcShxdWV1ZSwgc2tiX2dldChza2IpLAorCQkJCQkgICBwYWdlLCBvZmZzZXQsIGxlbik7CisJCXBhZ2UrKzsKIAkJb2Zmc2V0ID0gMDsKLQotCQlpZCA9IGdldF9pZF9mcm9tX2ZyZWVsaXN0KCZxdWV1ZS0+dHhfc2tiX2ZyZWVsaXN0LCBxdWV1ZS0+dHhfc2ticyk7Ci0JCXF1ZXVlLT50eF9za2JzW2lkXS5za2IgPSBza2JfZ2V0KHNrYik7Ci0JCXR4ID0gUklOR19HRVRfUkVRVUVTVCgmcXVldWUtPnR4LCBwcm9kKyspOwotCQl0eC0+aWQgPSBpZDsKLQkJcmVmID0gZ250dGFiX2NsYWltX2dyYW50X3JlZmVyZW5jZSgmcXVldWUtPmdyZWZfdHhfaGVhZCk7Ci0JCUJVR19PTigoc2lnbmVkIHNob3J0KXJlZiA8IDApOwotCi0JCW1mbiA9IHZpcnRfdG9fbWZuKGRhdGEpOwotCQlnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3NfcmVmKHJlZiwgcXVldWUtPmluZm8tPnhiZGV2LT5vdGhlcmVuZF9pZCwKLQkJCQkJCW1mbiwgR05UTUFQX3JlYWRvbmx5KTsKLQotCQlxdWV1ZS0+Z3JhbnRfdHhfcGFnZVtpZF0gPSB2aXJ0X3RvX3BhZ2UoZGF0YSk7Ci0JCXR4LT5ncmVmID0gcXVldWUtPmdyYW50X3R4X3JlZltpZF0gPSByZWY7Ci0JCXR4LT5vZmZzZXQgPSBvZmZzZXQ7Ci0JCXR4LT5zaXplID0gbGVuOwotCQl0eC0+ZmxhZ3MgPSAwOworCQlsZW4gLT0gdHgtPnNpemU7CiAJfQogCi0JLyogR3JhbnQgYmFja2VuZCBhY2Nlc3MgdG8gZWFjaCBza2IgZnJhZ21lbnQgcGFnZS4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgZnJhZ3M7IGkrKykgewotCQlza2JfZnJhZ190ICpmcmFnID0gc2tiX3NoaW5mbyhza2IpLT5mcmFncyArIGk7Ci0JCXN0cnVjdCBwYWdlICpwYWdlID0gc2tiX2ZyYWdfcGFnZShmcmFnKTsKLQotCQlsZW4gPSBza2JfZnJhZ19zaXplKGZyYWcpOwotCQlvZmZzZXQgPSBmcmFnLT5wYWdlX29mZnNldDsKLQotCQkvKiBTa2lwIHVudXNlZCBmcmFtZXMgZnJvbSBzdGFydCBvZiBwYWdlICovCi0JCXBhZ2UgKz0gb2Zmc2V0ID4+IFBBR0VfU0hJRlQ7Ci0JCW9mZnNldCAmPSB+UEFHRV9NQVNLOwotCi0JCXdoaWxlIChsZW4gPiAwKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGJ5dGVzOwotCi0JCQlieXRlcyA9IFBBR0VfU0laRSAtIG9mZnNldDsKLQkJCWlmIChieXRlcyA+IGxlbikKLQkJCQlieXRlcyA9IGxlbjsKLQotCQkJdHgtPmZsYWdzIHw9IFhFTl9ORVRUWEZfbW9yZV9kYXRhOwotCi0JCQlpZCA9IGdldF9pZF9mcm9tX2ZyZWVsaXN0KCZxdWV1ZS0+dHhfc2tiX2ZyZWVsaXN0LAotCQkJCQkJICBxdWV1ZS0+dHhfc2ticyk7Ci0JCQlxdWV1ZS0+dHhfc2tic1tpZF0uc2tiID0gc2tiX2dldChza2IpOwotCQkJdHggPSBSSU5HX0dFVF9SRVFVRVNUKCZxdWV1ZS0+dHgsIHByb2QrKyk7Ci0JCQl0eC0+aWQgPSBpZDsKLQkJCXJlZiA9IGdudHRhYl9jbGFpbV9ncmFudF9yZWZlcmVuY2UoJnF1ZXVlLT5ncmVmX3R4X2hlYWQpOwotCQkJQlVHX09OKChzaWduZWQgc2hvcnQpcmVmIDwgMCk7Ci0KLQkJCW1mbiA9IHBmbl90b19tZm4ocGFnZV90b19wZm4ocGFnZSkpOwotCQkJZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzX3JlZihyZWYsCi0JCQkJCQkJcXVldWUtPmluZm8tPnhiZGV2LT5vdGhlcmVuZF9pZCwKLQkJCQkJCQltZm4sIEdOVE1BUF9yZWFkb25seSk7Ci0KLQkJCXF1ZXVlLT5ncmFudF90eF9wYWdlW2lkXSA9IHBhZ2U7Ci0JCQl0eC0+Z3JlZiA9IHF1ZXVlLT5ncmFudF90eF9yZWZbaWRdID0gcmVmOwotCQkJdHgtPm9mZnNldCA9IG9mZnNldDsKLQkJCXR4LT5zaXplID0gYnl0ZXM7Ci0JCQl0eC0+ZmxhZ3MgPSAwOwotCi0JCQlvZmZzZXQgKz0gYnl0ZXM7Ci0JCQlsZW4gLT0gYnl0ZXM7Ci0KLQkJCS8qIE5leHQgZnJhbWUgKi8KLQkJCWlmIChvZmZzZXQgPT0gUEFHRV9TSVpFICYmIGxlbikgewotCQkJCUJVR19PTighUGFnZUNvbXBvdW5kKHBhZ2UpKTsKLQkJCQlwYWdlKys7Ci0JCQkJb2Zmc2V0ID0gMDsKLQkJCX0KLQkJfQotCX0KLQotCXF1ZXVlLT50eC5yZXFfcHJvZF9wdnQgPSBwcm9kOworCXJldHVybiB0eDsKIH0KIAogLyoKLSAqIENvdW50IGhvdyBtYW55IHJpbmcgc2xvdHMgYXJlIHJlcXVpcmVkIHRvIHNlbmQgdGhlIGZyYWdzIG9mIHRoaXMKLSAqIHNrYi4gRWFjaCBmcmFnIG1pZ2h0IGJlIGEgY29tcG91bmQgcGFnZS4KKyAqIENvdW50IGhvdyBtYW55IHJpbmcgc2xvdHMgYXJlIHJlcXVpcmVkIHRvIHNlbmQgdGhpcyBza2IuIEVhY2ggZnJhZworICogbWlnaHQgYmUgYSBjb21wb3VuZCBwYWdlLgogICovCi1zdGF0aWMgaW50IHhlbm5ldF9jb3VudF9za2JfZnJhZ19zbG90cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCB4ZW5uZXRfY291bnRfc2tiX3Nsb3RzKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IGksIGZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKLQlpbnQgcGFnZXMgPSAwOworCWludCBwYWdlczsKKworCXBhZ2VzID0gUEZOX1VQKG9mZnNldF9pbl9wYWdlKHNrYi0+ZGF0YSkgKyBza2JfaGVhZGxlbihza2IpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBmcmFnczsgaSsrKSB7CiAJCXNrYl9mcmFnX3QgKmZyYWcgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzICsgaTsKQEAgLTU2MiwxOCArNTEzLDE1IEBACiAKIHN0YXRpYyBpbnQgeGVubmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1bnNpZ25lZCBzaG9ydCBpZDsKIAlzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBuZXRmcm9udF9zdGF0cyAqdHhfc3RhdHMgPSB0aGlzX2NwdV9wdHIobnAtPnR4X3N0YXRzKTsKLQlzdHJ1Y3QgeGVuX25ldGlmX3R4X3JlcXVlc3QgKnR4OwotCWNoYXIgKmRhdGEgPSBza2ItPmRhdGE7Ci0JUklOR19JRFggaTsKLQlncmFudF9yZWZfdCByZWY7Ci0JdW5zaWduZWQgbG9uZyBtZm47CisJc3RydWN0IHhlbl9uZXRpZl90eF9yZXF1ZXN0ICp0eCwgKmZpcnN0X3R4OworCXVuc2lnbmVkIGludCBpOwogCWludCBub3RpZnk7CiAJaW50IHNsb3RzOwotCXVuc2lnbmVkIGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShkYXRhKTsKLQl1bnNpZ25lZCBpbnQgbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBsZW47CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgbmV0ZnJvbnRfcXVldWUgKnF1ZXVlID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgbnVtX3F1ZXVlcyA9IGRldi0+cmVhbF9udW1fdHhfcXVldWVzOwpAQCAtNTk2LDE4ICs1NDQsMTggQEAKIAkJZ290byBkcm9wOwogCX0KIAotCXNsb3RzID0gRElWX1JPVU5EX1VQKG9mZnNldCArIGxlbiwgUEFHRV9TSVpFKSArCi0JCXhlbm5ldF9jb3VudF9za2JfZnJhZ19zbG90cyhza2IpOworCXNsb3RzID0geGVubmV0X2NvdW50X3NrYl9zbG90cyhza2IpOwogCWlmICh1bmxpa2VseShzbG90cyA+IE1BWF9TS0JfRlJBR1MgKyAxKSkgewogCQluZXRfZGJnX3JhdGVsaW1pdGVkKCJ4ZW5uZXQ6IHNrYiByaWRlcyB0aGUgcm9ja2V0OiAlZCBzbG90cywgJWQgYnl0ZXNcbiIsCiAJCQkJICAgIHNsb3RzLCBza2ItPmxlbik7CiAJCWlmIChza2JfbGluZWFyaXplKHNrYikpCiAJCQlnb3RvIGRyb3A7Ci0JCWRhdGEgPSBza2ItPmRhdGE7Ci0JCW9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGRhdGEpOwotCQlsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCX0KIAorCXBhZ2UgPSB2aXJ0X3RvX3BhZ2Uoc2tiLT5kYXRhKTsKKwlvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShza2ItPmRhdGEpOworCWxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcXVldWUtPnR4X2xvY2ssIGZsYWdzKTsKIAogCWlmICh1bmxpa2VseSghbmV0aWZfY2Fycmllcl9vayhkZXYpIHx8CkBAIC02MTcsMjUgKzU2NSwxMyBAQAogCQlnb3RvIGRyb3A7CiAJfQogCi0JaSA9IHF1ZXVlLT50eC5yZXFfcHJvZF9wdnQ7CisJLyogRmlyc3QgcmVxdWVzdCBmb3IgdGhlIGxpbmVhciBhcmVhLiAqLworCWZpcnN0X3R4ID0gdHggPSB4ZW5uZXRfbWFrZV9vbmVfdHhyZXEocXVldWUsIHNrYiwKKwkJCQkJICAgICAgcGFnZSwgb2Zmc2V0LCBsZW4pOworCXBhZ2UrKzsKKwlvZmZzZXQgPSAwOworCWxlbiAtPSB0eC0+c2l6ZTsKIAotCWlkID0gZ2V0X2lkX2Zyb21fZnJlZWxpc3QoJnF1ZXVlLT50eF9za2JfZnJlZWxpc3QsIHF1ZXVlLT50eF9za2JzKTsKLQlxdWV1ZS0+dHhfc2tic1tpZF0uc2tiID0gc2tiOwotCi0JdHggPSBSSU5HX0dFVF9SRVFVRVNUKCZxdWV1ZS0+dHgsIGkpOwotCi0JdHgtPmlkICAgPSBpZDsKLQlyZWYgPSBnbnR0YWJfY2xhaW1fZ3JhbnRfcmVmZXJlbmNlKCZxdWV1ZS0+Z3JlZl90eF9oZWFkKTsKLQlCVUdfT04oKHNpZ25lZCBzaG9ydClyZWYgPCAwKTsKLQltZm4gPSB2aXJ0X3RvX21mbihkYXRhKTsKLQlnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3NfcmVmKAotCQlyZWYsIHF1ZXVlLT5pbmZvLT54YmRldi0+b3RoZXJlbmRfaWQsIG1mbiwgR05UTUFQX3JlYWRvbmx5KTsKLQlxdWV1ZS0+Z3JhbnRfdHhfcGFnZVtpZF0gPSB2aXJ0X3RvX3BhZ2UoZGF0YSk7Ci0JdHgtPmdyZWYgPSBxdWV1ZS0+Z3JhbnRfdHhfcmVmW2lkXSA9IHJlZjsKLQl0eC0+b2Zmc2V0ID0gb2Zmc2V0OwotCXR4LT5zaXplID0gbGVuOwotCi0JdHgtPmZsYWdzID0gMDsKIAlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkKIAkJLyogbG9jYWwgcGFja2V0PyAqLwogCQl0eC0+ZmxhZ3MgfD0gWEVOX05FVFRYRl9jc3VtX2JsYW5rIHwgWEVOX05FVFRYRl9kYXRhX3ZhbGlkYXRlZDsKQEAgLTY0MywxMSArNTc5LDEyIEBACiAJCS8qIHJlbW90ZSBidXQgY2hlY2tzdW1tZWQuICovCiAJCXR4LT5mbGFncyB8PSBYRU5fTkVUVFhGX2RhdGFfdmFsaWRhdGVkOwogCisJLyogT3B0aW9uYWwgZXh0cmEgaW5mbyBhZnRlciB0aGUgZmlyc3QgcmVxdWVzdC4gKi8KIAlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSkgewogCQlzdHJ1Y3QgeGVuX25ldGlmX2V4dHJhX2luZm8gKmdzbzsKIAogCQlnc28gPSAoc3RydWN0IHhlbl9uZXRpZl9leHRyYV9pbmZvICopCi0JCQlSSU5HX0dFVF9SRVFVRVNUKCZxdWV1ZS0+dHgsICsraSk7CisJCQlSSU5HX0dFVF9SRVFVRVNUKCZxdWV1ZS0+dHgsIHF1ZXVlLT50eC5yZXFfcHJvZF9wdnQrKyk7CiAKIAkJdHgtPmZsYWdzIHw9IFhFTl9ORVRUWEZfZXh0cmFfaW5mbzsKIApAQCAtNjYyLDEwICs1OTksMTkgQEAKIAkJZ3NvLT5mbGFncyA9IDA7CiAJfQogCi0JcXVldWUtPnR4LnJlcV9wcm9kX3B2dCA9IGkgKyAxOworCS8qIFJlcXVlc3RzIGZvciB0aGUgcmVzdCBvZiB0aGUgbGluZWFyIGFyZWEuICovCisJdHggPSB4ZW5uZXRfbWFrZV90eHJlcXMocXVldWUsIHR4LCBza2IsIHBhZ2UsIG9mZnNldCwgbGVuKTsKIAotCXhlbm5ldF9tYWtlX2ZyYWdzKHNrYiwgcXVldWUsIHR4KTsKLQl0eC0+c2l6ZSA9IHNrYi0+bGVuOworCS8qIFJlcXVlc3RzIGZvciBhbGwgdGhlIGZyYWdzLiAqLworCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKKwkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCQl0eCA9IHhlbm5ldF9tYWtlX3R4cmVxcyhxdWV1ZSwgdHgsIHNrYiwKKwkJCQkJc2tiX2ZyYWdfcGFnZShmcmFnKSwgZnJhZy0+cGFnZV9vZmZzZXQsCisJCQkJCXNrYl9mcmFnX3NpemUoZnJhZykpOworCX0KKworCS8qIEZpcnN0IHJlcXVlc3QgaGFzIHRoZSBwYWNrZXQgbGVuZ3RoLiAqLworCWZpcnN0X3R4LT5zaXplID0gc2tiLT5sZW47CiAKIAlSSU5HX1BVU0hfUkVRVUVTVFNfQU5EX0NIRUNLX05PVElGWSgmcXVldWUtPnR4LCBub3RpZnkpOwogCWlmIChub3RpZnkpCkBAIC0xMzY3LDIwICsxMzEzLDE1IEBACiAKIAlpbmZvID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBpbmZvKTsKLQorI2lmZGVmIENPTkZJR19TWVNGUworCWluZm8tPm5ldGRldi0+c3lzZnNfZ3JvdXBzWzBdID0gJnhlbm5ldF9kZXZfZ3JvdXA7CisjZW5kaWYKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoaW5mby0+bmV0ZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByX3dhcm4oIiVzOiByZWdpc3Rlcl9uZXRkZXYgZXJyPSVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKIAkJZ290byBmYWlsOwogCX0KIAotCWVyciA9IHhlbm5ldF9zeXNmc19hZGRpZihpbmZvLT5uZXRkZXYpOwotCWlmIChlcnIpIHsKLQkJdW5yZWdpc3Rlcl9uZXRkZXYoaW5mby0+bmV0ZGV2KTsKLQkJcHJfd2FybigiJXM6IGFkZCBzeXNmcyBmYWlsZWQgZXJyPSVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKLQkJZ290byBmYWlsOwotCX0KLQogCXJldHVybiAwOwogCiAgZmFpbDoKQEAgLTIxNDQsMzkgKzIwODUsMjAgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgeGVubmV0X2F0dHJzW10gPSB7Ci0JX19BVFRSKHJ4YnVmX21pbiwgU19JUlVHT3xTX0lXVVNSLCBzaG93X3J4YnVmLCBzdG9yZV9yeGJ1ZiksCi0JX19BVFRSKHJ4YnVmX21heCwgU19JUlVHT3xTX0lXVVNSLCBzaG93X3J4YnVmLCBzdG9yZV9yeGJ1ZiksCi0JX19BVFRSKHJ4YnVmX2N1ciwgU19JUlVHTywgc2hvd19yeGJ1ZiwgTlVMTCksCitzdGF0aWMgREVWSUNFX0FUVFIocnhidWZfbWluLCBTX0lSVUdPfFNfSVdVU1IsIHNob3dfcnhidWYsIHN0b3JlX3J4YnVmKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihyeGJ1Zl9tYXgsIFNfSVJVR098U19JV1VTUiwgc2hvd19yeGJ1Ziwgc3RvcmVfcnhidWYpOworc3RhdGljIERFVklDRV9BVFRSKHJ4YnVmX2N1ciwgU19JUlVHTywgc2hvd19yeGJ1ZiwgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp4ZW5uZXRfZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3J4YnVmX21pbi5hdHRyLAorCSZkZXZfYXR0cl9yeGJ1Zl9tYXguYXR0ciwKKwkmZGV2X2F0dHJfcnhidWZfY3VyLmF0dHIsCisJTlVMTAogfTsKIAotc3RhdGljIGludCB4ZW5uZXRfc3lzZnNfYWRkaWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlpbnQgaTsKLQlpbnQgZXJyOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoeGVubmV0X2F0dHJzKTsgaSsrKSB7Ci0JCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV0ZGV2LT5kZXYsCi0JCQkJCSAgICZ4ZW5uZXRfYXR0cnNbaV0pOwotCQlpZiAoZXJyKQotCQkJZ290byBmYWlsOwotCX0KLQlyZXR1cm4gMDsKLQotIGZhaWw6Ci0Jd2hpbGUgKC0taSA+PSAwKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm5ldGRldi0+ZGV2LCAmeGVubmV0X2F0dHJzW2ldKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgdm9pZCB4ZW5uZXRfc3lzZnNfZGVsaWYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHhlbm5ldF9hdHRycyk7IGkrKykKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZuZXRkZXYtPmRldiwgJnhlbm5ldF9hdHRyc1tpXSk7Ci19Ci0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHhlbm5ldF9kZXZfZ3JvdXAgPSB7CisJLmF0dHJzID0geGVubmV0X2Rldl9hdHRycworfTsKICNlbmRpZiAvKiBDT05GSUdfU1lTRlMgKi8KIAogc3RhdGljIGludCB4ZW5uZXRfcmVtb3ZlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYpCkBAIC0yMTkwLDggKzIxMTIsNiBAQAogCiAJeGVubmV0X2Rpc2Nvbm5lY3RfYmFja2VuZChpbmZvKTsKIAotCXhlbm5ldF9zeXNmc19kZWxpZihpbmZvLT5uZXRkZXYpOwotCiAJdW5yZWdpc3Rlcl9uZXRkZXYoaW5mby0+bmV0ZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fcXVldWVzOyArK2kpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYyBiL2RyaXZlcnMvbmZjL21pY3JvcmVhZC9taWNyb3JlYWQuYwppbmRleCA5NjNhNGE1Li5mNDU0ZGM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9taWNyb3JlYWQvbWljcm9yZWFkLmMKKysrIGIvZHJpdmVycy9uZmMvbWljcm9yZWFkL21pY3JvcmVhZC5jCkBAIC01NTcsMTAgKzU1NywxMSBAQAogCQlwcl9lcnIoIkZhaWxlZCB0byBoYW5kbGUgZGlzY292ZXJlZCB0YXJnZXQgZXJyPSVkXG4iLCByKTsKIH0KIAotc3RhdGljIGludCBtaWNyb3JlYWRfZXZlbnRfcmVjZWl2ZWQoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBnYXRlLAorc3RhdGljIGludCBtaWNyb3JlYWRfZXZlbnRfcmVjZWl2ZWQoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlLAogCQkJCSAgICAgdTggZXZlbnQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaW50IHI7CisJdTggZ2F0ZSA9IGhkZXYtPnBpcGVzW3BpcGVdLmdhdGU7CiAJdTggbW9kZTsKIAogCXByX2luZm8oIk1pY3JvcmVhZCByZWNlaXZlZCBldmVudCAweCV4IHRvIGdhdGUgMHgleFxuIiwgZXZlbnQsIGdhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvcG41NDQvaTJjLmMgYi9kcml2ZXJzL25mYy9wbjU0NC9pMmMuYwppbmRleCBmYzAyZThkLi5jZGRlNzQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9wbjU0NC9pMmMuYworKysgYi9kcml2ZXJzL25mYy9wbjU0NC9pMmMuYwpAQCAtMjQsMTEgKzI0LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbmZjLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9wbjU0NC5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIApAQCAtNDEsNiArNDMsMTEgQEAKICNkZWZpbmUgUE41NDRfSTJDX0ZSQU1FX0hFQURST09NIDEKICNkZWZpbmUgUE41NDRfSTJDX0ZSQU1FX1RBSUxST09NIDIKIAorLyogR1BJTyBuYW1lcyAqLworI2RlZmluZSBQTjU0NF9HUElPX05BTUVfSVJRICJwbjU0NF9pcnEiCisjZGVmaW5lIFBONTQ0X0dQSU9fTkFNRV9GVyAgInBuNTQ0X2Z3IgorI2RlZmluZSBQTjU0NF9HUElPX05BTUVfRU4gICJwbjU0NF9lbiIKKwogLyogZnJhbWluZyBpbiBIQ0kgbW9kZSAqLwogI2RlZmluZSBQTjU0NF9IQ0lfSTJDX0xMQ19MRU4JCTEKICNkZWZpbmUgUE41NDRfSENJX0kyQ19MTENfQ1JDCQkyCkBAIC01OCw2ICs2NSwxMyBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgcG41NDRfaGNpX2kyY19pZF90YWJsZSk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgcG41NDRfaGNpX2kyY19hY3BpX21hdGNoW10gPSB7CisJeyJOWFA1NDQwIiwgMH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgcG41NDRfaGNpX2kyY19hY3BpX21hdGNoKTsKKwogI2RlZmluZSBQTjU0NF9IQ0lfSTJDX0RSSVZFUl9OQU1FICJwbjU0NF9oY2lfaTJjIgogCiAvKgpAQCAtMTk1LDE4ICsyMDksMTkgQEAKIAluZmNfaW5mbygmcGh5LT5pMmNfZGV2LT5kZXYsICJEZXRlY3RpbmcgbmZjX2VuIHBvbGFyaXR5XG4iKTsKIAogCS8qIERpc2FibGUgZncgZG93bmxvYWQgKi8KLQlncGlvX3NldF92YWx1ZShwaHktPmdwaW9fZncsIDApOworCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKHBoeS0+Z3Bpb19mdywgMCk7CiAKIAlmb3IgKHBvbGFyaXR5ID0gMDsgcG9sYXJpdHkgPCAyOyBwb2xhcml0eSsrKSB7CiAJCXBoeS0+ZW5fcG9sYXJpdHkgPSBwb2xhcml0eTsKIAkJcmV0cnkgPSAzOwogCQl3aGlsZSAocmV0cnktLSkgewogCQkJLyogcG93ZXIgb2ZmICovCi0JCQlncGlvX3NldF92YWx1ZShwaHktPmdwaW9fZW4sICFwaHktPmVuX3BvbGFyaXR5KTsKKwkJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKHBoeS0+Z3Bpb19lbiwKKwkJCQkJCSFwaHktPmVuX3BvbGFyaXR5KTsKIAkJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTUwMDApOwogCiAJCQkvKiBwb3dlciBvbiAqLwotCQkJZ3Bpb19zZXRfdmFsdWUocGh5LT5ncGlvX2VuLCBwaHktPmVuX3BvbGFyaXR5KTsKKwkJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKHBoeS0+Z3Bpb19lbiwgcGh5LT5lbl9wb2xhcml0eSk7CiAJCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAwKTsKIAogCQkJLyogc2VuZCByZXNldCAqLwpAQCAtMjI1LDEzICsyNDAsMTQgQEAKIAkJIkNvdWxkIG5vdCBkZXRlY3QgbmZjX2VuIHBvbGFyaXR5LCBmYWxsYmFjayB0byBhY3RpdmUgaGlnaFxuIik7CiAKIG91dDoKLQlncGlvX3NldF92YWx1ZShwaHktPmdwaW9fZW4sICFwaHktPmVuX3BvbGFyaXR5KTsKKwlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChwaHktPmdwaW9fZW4sICFwaHktPmVuX3BvbGFyaXR5KTsKIH0KIAogc3RhdGljIHZvaWQgcG41NDRfaGNpX2kyY19lbmFibGVfbW9kZShzdHJ1Y3QgcG41NDRfaTJjX3BoeSAqcGh5LCBpbnQgcnVuX21vZGUpCiB7Ci0JZ3Bpb19zZXRfdmFsdWUocGh5LT5ncGlvX2Z3LCBydW5fbW9kZSA9PSBQTjU0NF9GV19NT0RFID8gMSA6IDApOwotCWdwaW9fc2V0X3ZhbHVlKHBoeS0+Z3Bpb19lbiwgcGh5LT5lbl9wb2xhcml0eSk7CisJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAocGh5LT5ncGlvX2Z3LAorCQkJCXJ1bl9tb2RlID09IFBONTQ0X0ZXX01PREUgPyAxIDogMCk7CisJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAocGh5LT5ncGlvX2VuLCBwaHktPmVuX3BvbGFyaXR5KTsKIAl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAwKTsKIAogCXBoeS0+cnVuX21vZGUgPSBydW5fbW9kZTsKQEAgLTI1NCwxNCArMjcwLDE0IEBACiB7CiAJc3RydWN0IHBuNTQ0X2kyY19waHkgKnBoeSA9IHBoeV9pZDsKIAotCWdwaW9fc2V0X3ZhbHVlKHBoeS0+Z3Bpb19mdywgMCk7Ci0JZ3Bpb19zZXRfdmFsdWUocGh5LT5ncGlvX2VuLCAhcGh5LT5lbl9wb2xhcml0eSk7CisJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAocGh5LT5ncGlvX2Z3LCAwKTsKKwlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChwaHktPmdwaW9fZW4sICFwaHktPmVuX3BvbGFyaXR5KTsKIAl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAwKTsKIAotCWdwaW9fc2V0X3ZhbHVlKHBoeS0+Z3Bpb19lbiwgcGh5LT5lbl9wb2xhcml0eSk7CisJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAocGh5LT5ncGlvX2VuLCBwaHktPmVuX3BvbGFyaXR5KTsKIAl1c2xlZXBfcmFuZ2UoMTAwMDAsIDE1MDAwKTsKIAotCWdwaW9fc2V0X3ZhbHVlKHBoeS0+Z3Bpb19lbiwgIXBoeS0+ZW5fcG9sYXJpdHkpOworCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKHBoeS0+Z3Bpb19lbiwgIXBoeS0+ZW5fcG9sYXJpdHkpOwogCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTUwMDApOwogCiAJcGh5LT5wb3dlcmVkID0gMDsKQEAgLTg1OSw2ICs4NzUsOTAgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgcG41NDRfaGNpX2kyY19hY3BpX3JlcXVlc3RfcmVzb3VyY2VzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHBuNTQ0X2kyY19waHkgKnBoeSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCAqaWQ7CisJc3RydWN0IGdwaW9fZGVzYyAqZ3Bpb2RfZW4sICpncGlvZF9pcnEsICpncGlvZF9mdzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJaW50IHJldDsKKworCWlmICghY2xpZW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRldiA9ICZjbGllbnQtPmRldjsKKworCS8qIE1hdGNoIHRoZSBzdHJ1Y3QgZGV2aWNlIGFnYWluc3QgYSBnaXZlbiBsaXN0IG9mIEFDUEkgSURzICovCisJaWQgPSBhY3BpX21hdGNoX2RldmljZShkZXYtPmRyaXZlci0+YWNwaV9tYXRjaF90YWJsZSwgZGV2KTsKKworCWlmICghaWQpCisJCXJldHVybiAtRU5PREVWOworCisJLyogR2V0IEVOIEdQSU8gZnJvbSBBQ1BJICovCisJZ3Bpb2RfZW4gPSBkZXZtX2dwaW9kX2dldF9pbmRleChkZXYsIFBONTQ0X0dQSU9fTkFNRV9FTiwgMSk7CisJaWYgKElTX0VSUihncGlvZF9lbikpIHsKKwkJbmZjX2VycihkZXYsCisJCQkiVW5hYmxlIHRvIGdldCBFTiBHUElPXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGh5LT5ncGlvX2VuICA9IGRlc2NfdG9fZ3BpbyhncGlvZF9lbik7CisKKwkvKiBDb25maWd1cmF0aW9uIEVOIEdQSU8gKi8KKwlyZXQgPSBncGlvZF9kaXJlY3Rpb25fb3V0cHV0KGdwaW9kX2VuLCAwKTsKKwlpZiAocmV0KSB7CisJCW5mY19lcnIoZGV2LCAiRmFpbCBFTiBwaW4gZGlyZWN0aW9uXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKiBHZXQgRlcgR1BJTyBmcm9tIEFDUEkgKi8KKwlncGlvZF9mdyA9IGRldm1fZ3Bpb2RfZ2V0X2luZGV4KGRldiwgUE41NDRfR1BJT19OQU1FX0ZXLCAyKTsKKwlpZiAoSVNfRVJSKGdwaW9kX2Z3KSkgeworCQluZmNfZXJyKGRldiwKKwkJCSJVbmFibGUgdG8gZ2V0IEZXIEdQSU9cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwaHktPmdwaW9fZncgID0gZGVzY190b19ncGlvKGdwaW9kX2Z3KTsKKworCS8qIENvbmZpZ3VyYXRpb24gRlcgR1BJTyAqLworCXJldCA9IGdwaW9kX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb2RfZncsIDApOworCWlmIChyZXQpIHsKKwkJbmZjX2VycihkZXYsICJGYWlsIEZXIHBpbiBkaXJlY3Rpb25cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIEdldCBJUlEgR1BJTyAqLworCWdwaW9kX2lycSA9IGRldm1fZ3Bpb2RfZ2V0X2luZGV4KGRldiwgUE41NDRfR1BJT19OQU1FX0lSUSwgMCk7CisJaWYgKElTX0VSUihncGlvZF9pcnEpKSB7CisJCW5mY19lcnIoZGV2LAorCQkJIlVuYWJsZSB0byBnZXQgSVJRIEdQSU9cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwaHktPmdwaW9faXJxID0gZGVzY190b19ncGlvKGdwaW9kX2lycSk7CisKKwkvKiBDb25maWd1cmUgSVJRIEdQSU8gKi8KKwlyZXQgPSBncGlvZF9kaXJlY3Rpb25faW5wdXQoZ3Bpb2RfaXJxKTsKKwlpZiAocmV0KSB7CisJCW5mY19lcnIoZGV2LCAiRmFpbCBJUlEgcGluIGRpcmVjdGlvblxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogTWFwIHRoZSBwaW4gdG8gYW4gSVJRICovCisJcmV0ID0gZ3Bpb2RfdG9faXJxKGdwaW9kX2lycSk7CisJaWYgKHJldCA8IDApIHsKKwkJbmZjX2VycihkZXYsICJGYWlsIHBpbiBJUlEgbWFwcGluZ1xuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJbmZjX2luZm8oZGV2LCAiR1BJTyByZXNvdXJjZSwgbm86JWQgaXJxOiVkXG4iLAorCQkJZGVzY190b19ncGlvKGdwaW9kX2lycSksIHJldCk7CisJY2xpZW50LT5pcnEgPSByZXQ7CisKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19PRgogCiBzdGF0aWMgaW50IHBuNTQ0X2hjaV9pMmNfb2ZfcmVxdWVzdF9yZXNvdXJjZXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKQEAgLTg4NCw3ICs5ODQsNyBAQAogCXBoeS0+Z3Bpb19lbiA9IHJldDsKIAogCS8qIENvbmZpZ3VyYXRpb24gb2YgRU4gR1BJTyAqLwotCXJldCA9IGdwaW9fcmVxdWVzdChwaHktPmdwaW9fZW4sICJwbjU0NF9lbiIpOworCXJldCA9IGdwaW9fcmVxdWVzdChwaHktPmdwaW9fZW4sIFBONTQ0X0dQSU9fTkFNRV9FTik7CiAJaWYgKHJldCkgewogCQluZmNfZXJyKCZjbGllbnQtPmRldiwgIkZhaWwgRU4gcGluXG4iKTsKIAkJZ290byBlcnJfZHQ7CkBAIC05MDYsNyArMTAwNiw3IEBACiAJcGh5LT5ncGlvX2Z3ID0gcmV0OwogCiAJLyogQ29uZmlndXJhdGlvbiBvZiBGVyBHUElPICovCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KHBoeS0+Z3Bpb19mdywgInBuNTQ0X2Z3Iik7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBoeS0+Z3Bpb19mdywgUE41NDRfR1BJT19OQU1FX0ZXKTsKIAlpZiAocmV0KSB7CiAJCW5mY19lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbCBGVyBwaW5cbiIpOwogCQlnb3RvIGVycl9ncGlvX2VuOwpAQCAtMTAwMSw2ICsxMTAxLDE0IEBACiAJCXBoeS0+Z3Bpb19lbiA9IHBkYXRhLT5nZXRfZ3BpbyhORkNfR1BJT19FTkFCTEUpOwogCQlwaHktPmdwaW9fZncgPSBwZGF0YS0+Z2V0X2dwaW8oTkZDX0dQSU9fRldfUkVTRVQpOwogCQlwaHktPmdwaW9faXJxID0gcGRhdGEtPmdldF9ncGlvKE5GQ19HUElPX0lSUSk7CisJLyogVXNpbmcgQUNQSSAqLworCX0gZWxzZSBpZiAoQUNQSV9IQU5ETEUoJmNsaWVudC0+ZGV2KSkgeworCQlyID0gcG41NDRfaGNpX2kyY19hY3BpX3JlcXVlc3RfcmVzb3VyY2VzKGNsaWVudCk7CisJCWlmIChyKSB7CisJCQluZmNfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkiQ2Fubm90IGdldCBBQ1BJIGRhdGFcbiIpOworCQkJcmV0dXJuIHI7CisJCX0KIAl9IGVsc2UgewogCQluZmNfZXJyKCZjbGllbnQtPmRldiwgIk5vIHBsYXRmb3JtIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwODAsNiArMTE4OCw3IEBACiAJCSAgIC5uYW1lID0gUE41NDRfSENJX0kyQ19EUklWRVJfTkFNRSwKIAkJICAgLm93bmVyICA9IFRISVNfTU9EVUxFLAogCQkgICAub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIob2ZfcG41NDRfaTJjX21hdGNoKSwKKwkJICAgLmFjcGlfbWF0Y2hfdGFibGUgPSBBQ1BJX1BUUihwbjU0NF9oY2lfaTJjX2FjcGlfbWF0Y2gpLAogCQkgIH0sCiAJLnByb2JlID0gcG41NDRfaGNpX2kyY19wcm9iZSwKIAkuaWRfdGFibGUgPSBwbjU0NF9oY2lfaTJjX2lkX3RhYmxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYyBiL2RyaXZlcnMvbmZjL3BuNTQ0L3BuNTQ0LmMKaW5kZXggOWM4MDUxZC4uMTJlODE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvcG41NDQvcG41NDQuYworKysgYi9kcml2ZXJzL25mYy9wbjU0NC9wbjU0NC5jCkBAIC03MjQsMTAgKzcyNCwxMSBAQAogICogPD0gMDogZHJpdmVyIGhhbmRsZWQgdGhlIGV2ZW50LCBza2IgY29uc3VtZWQKICAqICAgIDE6IGRyaXZlciBkb2VzIG5vdCBoYW5kbGUgdGhlIGV2ZW50LCBwbGVhc2UgZG8gc3RhbmRhcmQgcHJvY2Vzc2luZwogICovCi1zdGF0aWMgaW50IHBuNTQ0X2hjaV9ldmVudF9yZWNlaXZlZChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGUsIHU4IGV2ZW50LAorc3RhdGljIGludCBwbjU0NF9oY2lfZXZlbnRfcmVjZWl2ZWQoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlLCB1OCBldmVudCwKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmdiX3NrYiA9IE5VTEw7CisJdTggZ2F0ZSA9IGhkZXYtPnBpcGVzW3BpcGVdLmdhdGU7CiAJaW50IHI7CiAKIAlwcl9kZWJ1ZygiaGNpIGV2ZW50ICVkXG4iLCBldmVudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zdDIxbmZjYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmZjL3N0MjFuZmNhL01ha2VmaWxlCmluZGV4IDdkNjg4ZjkuLjk3ZWRhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3N0MjFuZmNhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmZjL3N0MjFuZmNhL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgU1QyMU5GQ0EgSENJIGJhc2VkIE5GQyBkcml2ZXIKICMKIAotc3QyMW5mY2FfaGNpLW9ianMgPSBzdDIxbmZjYS5vIHN0MjFuZmNhX2RlcC5vCitzdDIxbmZjYV9oY2ktb2JqcyA9IHN0MjFuZmNhLm8gc3QyMW5mY2FfZGVwLm8gc3QyMW5mY2Ffc2Uubwogb2JqLSQoQ09ORklHX05GQ19TVDIxTkZDQSkgICAgICs9IHN0MjFuZmNhX2hjaS5vCiAKIHN0MjFuZmNhX2kyYy1vYmpzICA9IGkyYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zdDIxbmZjYS9pMmMuYyBiL2RyaXZlcnMvbmZjL3N0MjFuZmNhL2kyYy5jCmluZGV4IDA1NzIyMDguLmEzMjE0MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3N0MjFuZmNhL2kyYy5jCisrKyBiL2RyaXZlcnMvbmZjL3N0MjFuZmNhL2kyYy5jCkBAIC03NCw2ICs3NCw4IEBACiAJdW5zaWduZWQgaW50IGdwaW9fZW5hOwogCXVuc2lnbmVkIGludCBpcnFfcG9sYXJpdHk7CiAKKwlzdHJ1Y3Qgc3QyMW5mY2Ffc2Vfc3RhdHVzIHNlX3N0YXR1czsKKwogCXN0cnVjdCBza19idWZmICpwZW5kaW5nX3NrYjsKIAlpbnQgY3VycmVudF9yZWFkX2xlbjsKIAkvKgpAQCAtNTM3LDYgKzUzOSwxMSBAQAogCiAJcGh5LT5pcnFfcG9sYXJpdHkgPSBpcnFfZ2V0X3RyaWdnZXJfdHlwZShjbGllbnQtPmlycSk7CiAKKwlwaHktPnNlX3N0YXR1cy5pc19lc2VfcHJlc2VudCA9CisJCQkJb2ZfcHJvcGVydHlfcmVhZF9ib29sKHBwLCAiZXNlLXByZXNlbnQiKTsKKwlwaHktPnNlX3N0YXR1cy5pc191aWNjX3ByZXNlbnQgPQorCQkJCW9mX3Byb3BlcnR5X3JlYWRfYm9vbChwcCwgInVpY2MtcHJlc2VudCIpOworCiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpAQCAtNTcxLDYgKzU3OCw5IEBACiAJCX0KIAl9CiAKKwlwaHktPnNlX3N0YXR1cy5pc19lc2VfcHJlc2VudCA9IHBkYXRhLT5pc19lc2VfcHJlc2VudDsKKwlwaHktPnNlX3N0YXR1cy5pc191aWNjX3ByZXNlbnQgPSBwZGF0YS0+aXNfdWljY19wcmVzZW50OworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU5MSwxMSArNjAxLDggQEAKIAogCXBoeSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZihzdHJ1Y3Qgc3QyMW5mY2FfaTJjX3BoeSksCiAJCQkgICBHRlBfS0VSTkVMKTsKLQlpZiAoIXBoeSkgewotCQluZmNfZXJyKCZjbGllbnQtPmRldiwKLQkJCSJDYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBzdDIxbmZjYSBpMmMgcGh5LlxuIik7CisJaWYgKCFwaHkpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCXBoeS0+aTJjX2RldiA9IGNsaWVudDsKIAlwaHktPnBlbmRpbmdfc2tiID0gYWxsb2Nfc2tiKFNUMjFORkNBX0hDSV9MTENfTUFYX1NJWkUgKiAyLCBHRlBfS0VSTkVMKTsKQEAgLTY0MSw4ICs2NDgsMTEgQEAKIAl9CiAKIAlyZXR1cm4gc3QyMW5mY2FfaGNpX3Byb2JlKHBoeSwgJmkyY19waHlfb3BzLCBMTENfU0hETENfTkFNRSwKLQkJCSAgICAgICBTVDIxTkZDQV9GUkFNRV9IRUFEUk9PTSwgU1QyMU5GQ0FfRlJBTUVfVEFJTFJPT00sCi0JCQkgICAgICAgU1QyMU5GQ0FfSENJX0xMQ19NQVhfUEFZTE9BRCwgJnBoeS0+aGRldik7CisJCQkJCVNUMjFORkNBX0ZSQU1FX0hFQURST09NLAorCQkJCQlTVDIxTkZDQV9GUkFNRV9UQUlMUk9PTSwKKwkJCQkJU1QyMU5GQ0FfSENJX0xMQ19NQVhfUEFZTE9BRCwKKwkJCQkJJnBoeS0+aGRldiwKKwkJCQkJJnBoeS0+c2Vfc3RhdHVzKTsKIH0KIAogc3RhdGljIGludCBzdDIxbmZjYV9oY2lfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQpAQCAtNjYxLDYgKzY3MSw3IEBACiAKICNpZmRlZiBDT05GSUdfT0YKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3N0MjFuZmNhX2kyY19tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAic3Qsc3QyMW5mY2EtaTJjIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInN0LHN0MjFuZmNhX2kyYyIsIH0sCiAJe30KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zdDIxbmZjYS9zdDIxbmZjYS5jIGIvZHJpdmVycy9uZmMvc3QyMW5mY2Evc3QyMW5mY2EuYwppbmRleCBmMjU5NmM4Li4yNGQzZDI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zdDIxbmZjYS9zdDIxbmZjYS5jCisrKyBiL2RyaXZlcnMvbmZjL3N0MjFuZmNhL3N0MjFuZmNhLmMKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgInN0MjFuZmNhLmgiCiAjaW5jbHVkZSAic3QyMW5mY2FfZGVwLmgiCisjaW5jbHVkZSAic3QyMW5mY2Ffc2UuaCIKIAogI2RlZmluZSBEUklWRVJfREVTQyAiSENJIE5GQyBkcml2ZXIgZm9yIFNUMjFORkNBIgogCkBAIC02Miw3ICs2Myw2IEBACiAjZGVmaW5lIFNUMjFORkNBX1JGX0NBUkRfRl9EQVRBUkFURQkJMHgwOAogI2RlZmluZSBTVDIxTkZDQV9SRl9DQVJEX0ZfREFUQVJBVEVfMjEyXzQyNAkweDAxCiAKLSNkZWZpbmUgU1QyMU5GQ0FfREVWSUNFX01HTlRfR0FURQkJMHgwMQogI2RlZmluZSBTVDIxTkZDQV9ERVZJQ0VfTUdOVF9QSVBFCQkweDAyCiAKICNkZWZpbmUgU1QyMU5GQ0FfRE1fR0VUSU5GTwkJCTB4MTMKQEAgLTc4LDYgKzc4LDExIEBACiAKICNkZWZpbmUgU1QyMU5GQ0FfTkZDX01PREUJCQkweDAzCS8qIE5GQ19NT0RFIHBhcmFtZXRlciovCiAKKyNkZWZpbmUgU1QyMU5GQ0FfRVZUX0hPVF9QTFVHCQkJMHgwMworI2RlZmluZSBTVDIxTkZDQV9FVlRfSE9UX1BMVUdfSVNfSU5ISUJJVEVEKHgpICh4LT5kYXRhWzBdICYgMHg4MCkKKworI2RlZmluZSBTVDIxTkZDQV9TRV9UT19QSVBFUwkJCTIwMDAKKwogc3RhdGljIERFQ0xBUkVfQklUTUFQKGRldl9tYXNrLCBTVDIxTkZDQV9OVU1fREVWSUNFUyk7CiAKIHN0YXRpYyBzdHJ1Y3QgbmZjX2hjaV9nYXRlIHN0MjFuZmNhX2dhdGVzW10gPSB7CkBAIC05Miw2ICs5NywxMCBAQAogCXtTVDIxTkZDQV9SRl9SRUFERVJfMTQ0NDNfM19BX0dBVEUsIE5GQ19IQ0lfSU5WQUxJRF9QSVBFfSwKIAl7U1QyMU5GQ0FfUkZfUkVBREVSX0lTTzE1NjkzX0dBVEUsIE5GQ19IQ0lfSU5WQUxJRF9QSVBFfSwKIAl7U1QyMU5GQ0FfUkZfQ0FSRF9GX0dBVEUsIE5GQ19IQ0lfSU5WQUxJRF9QSVBFfSwKKworCS8qIFNlY3VyZSBlbGVtZW50IHBpcGVzIGFyZSBjcmVhdGVkIGJ5IHNlY3VyZSBlbGVtZW50IGhvc3QgKi8KKwl7U1QyMU5GQ0FfQ09OTkVDVElWSVRZX0dBVEUsIE5GQ19IQ0lfRE9fTk9UX0NSRUFURV9QSVBFfSwKKwl7U1QyMU5GQ0FfQVBEVV9SRUFERVJfR0FURSwgTkZDX0hDSV9ET19OT1RfQ1JFQVRFX1BJUEV9LAogfTsKIAogc3RydWN0IHN0MjFuZmNhX3BpcGVfaW5mbyB7CkBAIC0xMTgsMTggKzEyNyw2IEBACiAJCU5GQ19IQ0lfVEVSTUlOQUxfSE9TVF9JRCwgMAogCX07CiAKLQlza2JfcGlwZV9saXN0ID0gYWxsb2Nfc2tiKFNUMjFORkNBX0hDSV9MTENfTUFYX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghc2tiX3BpcGVfbGlzdCkgewotCQlyID0gLUVOT01FTTsKLQkJZ290byBmcmVlX2xpc3Q7Ci0JfQotCi0Jc2tiX3BpcGVfaW5mbyA9IGFsbG9jX3NrYihTVDIxTkZDQV9IQ0lfTExDX01BWF9TSVpFLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNrYl9waXBlX2luZm8pIHsKLQkJciA9IC1FTk9NRU07Ci0JCWdvdG8gZnJlZV9pbmZvOwotCX0KLQogCS8qIE9uIFNUMjFORkNBIGRldmljZSBwaXBlcyBudW1iZXIgYXJlIGR5bmFtaWNzCiAJICogQSBtYXhpbXVtIG9mIDE2IHBpcGVzIGNhbiBiZSBjcmVhdGVkIGF0IHRoZSBzYW1lIHRpbWUKIAkgKiBJZiBwaXBlcyBhcmUgYWxyZWFkeSBjcmVhdGVkLCBoY2lfZGV2X3VwIHdpbGwgZmFpbC4KQEAgLTE0OCw3ICsxNDUsOCBAQAogCSAqIFBpcGUgY2FuIGJlIGNsb3NlZCBhbmQgbmVlZCB0byBiZSBvcGVuLgogCSAqLwogCXIgPSBuZmNfaGNpX2Nvbm5lY3RfZ2F0ZShoZGV2LCBORkNfSENJX0hPU1RfQ09OVFJPTExFUl9JRCwKLQkJU1QyMU5GQ0FfREVWSUNFX01HTlRfR0FURSwgU1QyMU5GQ0FfREVWSUNFX01HTlRfUElQRSk7CisJCQkJU1QyMU5GQ0FfREVWSUNFX01HTlRfR0FURSwKKwkJCQlTVDIxTkZDQV9ERVZJQ0VfTUdOVF9QSVBFKTsKIAlpZiAociA8IDApCiAJCWdvdG8gZnJlZV9pbmZvOwogCkBAIC0xNzksMTcgKzE3NywyOCBAQAogCQkgKiAtIGRlc3RpbmF0aW9uIGdpZCAoMWJ5dGUpCiAJCSAqLwogCQlpbmZvID0gKHN0cnVjdCBzdDIxbmZjYV9waXBlX2luZm8gKikgc2tiX3BpcGVfaW5mby0+ZGF0YTsKKwkJaWYgKGluZm8tPmRzdF9nYXRlX2lkID09IFNUMjFORkNBX0FQRFVfUkVBREVSX0dBVEUgJiYKKwkJCWluZm8tPnNyY19ob3N0X2lkICE9IFNUMjFORkNBX0VTRV9IT1NUX0lEKSB7CisJCQlwcl9lcnIoIlVuZXhwZWN0ZWQgYXBkdV9yZWFkZXIgcGlwZSBvbiBob3N0ICV4XG4iLAorCQkJCWluZm8tPnNyY19ob3N0X2lkKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJZm9yIChqID0gMDsgKGogPCBBUlJBWV9TSVpFKHN0MjFuZmNhX2dhdGVzKSkgJiYKLQkJCShzdDIxbmZjYV9nYXRlc1tqXS5nYXRlICE9IGluZm8tPmRzdF9nYXRlX2lkKTsKLQkJCWorKykKKwkJCShzdDIxbmZjYV9nYXRlc1tqXS5nYXRlICE9IGluZm8tPmRzdF9nYXRlX2lkKSA7IGorKykKIAkJCTsKIAogCQlpZiAoaiA8IEFSUkFZX1NJWkUoc3QyMW5mY2FfZ2F0ZXMpICYmCiAJCQlzdDIxbmZjYV9nYXRlc1tqXS5nYXRlID09IGluZm8tPmRzdF9nYXRlX2lkICYmCiAJCQlTVDIxTkZDQV9ETV9JU19QSVBFX09QRU4oaW5mby0+cGlwZV9zdGF0ZSkpIHsKIAkJCXN0MjFuZmNhX2dhdGVzW2pdLnBpcGUgPSBwaXBlX2luZm9bMl07CisKIAkJCWhkZXYtPmdhdGUycGlwZVtzdDIxbmZjYV9nYXRlc1tqXS5nYXRlXSA9Ci0JCQkJc3QyMW5mY2FfZ2F0ZXNbal0ucGlwZTsKKwkJCQkJCQlzdDIxbmZjYV9nYXRlc1tqXS5waXBlOworCQkJaGRldi0+cGlwZXNbc3QyMW5mY2FfZ2F0ZXNbal0ucGlwZV0uZ2F0ZSA9CisJCQkJCQkJc3QyMW5mY2FfZ2F0ZXNbal0uZ2F0ZTsKKwkJCWhkZXYtPnBpcGVzW3N0MjFuZmNhX2dhdGVzW2pdLnBpcGVdLmRlc3RfaG9zdCA9CisJCQkJCQkJaW5mby0+c3JjX2hvc3RfaWQ7CiAJCX0KIAl9CiAKQEAgLTE5OSw3ICsyMDgsNyBAQAogCSAqLwogCWlmIChza2JfcGlwZV9saXN0LT5sZW4gKyAzIDwgQVJSQVlfU0laRShzdDIxbmZjYV9nYXRlcykpIHsKIAkJZm9yIChpID0gc2tiX3BpcGVfbGlzdC0+bGVuICsgMzsKLQkJCQlpIDwgQVJSQVlfU0laRShzdDIxbmZjYV9nYXRlcyk7IGkrKykgeworCQkJCWkgPCBBUlJBWV9TSVpFKHN0MjFuZmNhX2dhdGVzKSAtIDI7IGkrKykgewogCQkJciA9IG5mY19oY2lfY29ubmVjdF9nYXRlKGhkZXYsCiAJCQkJCU5GQ19IQ0lfSE9TVF9DT05UUk9MTEVSX0lELAogCQkJCQlzdDIxbmZjYV9nYXRlc1tpXS5nYXRlLApAQCAtMjEyLDcgKzIyMSw2IEBACiAJbWVtY3B5KGhkZXYtPmluaXRfZGF0YS5nYXRlcywgc3QyMW5mY2FfZ2F0ZXMsIHNpemVvZihzdDIxbmZjYV9nYXRlcykpOwogZnJlZV9pbmZvOgogCWtmcmVlX3NrYihza2JfcGlwZV9pbmZvKTsKLWZyZWVfbGlzdDoKIAlrZnJlZV9za2Ioc2tiX3BpcGVfbGlzdCk7CiAJcmV0dXJuIHI7CiB9CkBAIC0yNTcsMTYgKzI2NSwzMyBAQAogCiBzdGF0aWMgaW50IHN0MjFuZmNhX2hjaV9yZWFkeShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYpCiB7CisJc3RydWN0IHN0MjFuZmNhX2hjaV9pbmZvICppbmZvID0gbmZjX2hjaV9nZXRfY2xpZW50ZGF0YShoZGV2KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJdTggcGFyYW07CisJdTggd2hpdGVfbGlzdFsyXTsKKwlpbnQgd2xfc2l6ZSA9IDA7CiAJaW50IHI7CiAKLQlwYXJhbSA9IE5GQ19IQ0lfVUlDQ19IT1NUX0lEOwotCXIgPSBuZmNfaGNpX3NldF9wYXJhbShoZGV2LCBORkNfSENJX0FETUlOX0dBVEUsCi0JCQkgICAgICBORkNfSENJX0FETUlOX1dISVRFTElTVCwgJnBhcmFtLCAxKTsKLQlpZiAociA8IDApCi0JCXJldHVybiByOworCWlmIChpbmZvLT5zZV9zdGF0dXMtPmlzX2VzZV9wcmVzZW50ICYmCisJCWluZm8tPnNlX3N0YXR1cy0+aXNfdWljY19wcmVzZW50KSB7CisJCXdoaXRlX2xpc3Rbd2xfc2l6ZSsrXSA9IE5GQ19IQ0lfVUlDQ19IT1NUX0lEOworCQl3aGl0ZV9saXN0W3dsX3NpemUrK10gPSBTVDIxTkZDQV9FU0VfSE9TVF9JRDsKKwl9IGVsc2UgaWYgKCFpbmZvLT5zZV9zdGF0dXMtPmlzX2VzZV9wcmVzZW50ICYmCisJCQkgaW5mby0+c2Vfc3RhdHVzLT5pc191aWNjX3ByZXNlbnQpIHsKKwkJd2hpdGVfbGlzdFt3bF9zaXplKytdID0gTkZDX0hDSV9VSUNDX0hPU1RfSUQ7CisJfSBlbHNlIGlmIChpbmZvLT5zZV9zdGF0dXMtPmlzX2VzZV9wcmVzZW50ICYmCisJCQkhaW5mby0+c2Vfc3RhdHVzLT5pc191aWNjX3ByZXNlbnQpIHsKKwkJd2hpdGVfbGlzdFt3bF9zaXplKytdID0gU1QyMU5GQ0FfRVNFX0hPU1RfSUQ7CisJfQorCisJaWYgKHdsX3NpemUpIHsKKwkJciA9IG5mY19oY2lfc2V0X3BhcmFtKGhkZXYsIE5GQ19IQ0lfQURNSU5fR0FURSwKKwkJCQkJTkZDX0hDSV9BRE1JTl9XSElURUxJU1QsCisJCQkJCSh1OCAqKSAmd2hpdGVfbGlzdCwgd2xfc2l6ZSk7CisJCWlmIChyIDwgMCkKKwkJCXJldHVybiByOworCX0KIAogCS8qIFNldCBORkNfTU9ERSBpbiBkZXZpY2UgbWFuYWdlbWVudCBnYXRlIHRvIGVuYWJsZSAqLwogCXIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBTVDIxTkZDQV9ERVZJQ0VfTUdOVF9HQVRFLApAQCAtMjc0LDggKzI5OSw5IEBACiAJaWYgKHIgPCAwKQogCQlyZXR1cm4gcjsKIAotCWlmIChza2ItPmRhdGFbMF0gPT0gMCkgewotCQlrZnJlZV9za2Ioc2tiKTsKKwlwYXJhbSA9IHNrYi0+ZGF0YVswXTsKKwlrZnJlZV9za2Ioc2tiKTsKKwlpZiAocGFyYW0gPT0gMCkgewogCQlwYXJhbSA9IDE7CiAKIAkJciA9IG5mY19oY2lfc2V0X3BhcmFtKGhkZXYsIFNUMjFORkNBX0RFVklDRV9NR05UX0dBVEUsCkBAIC00MTcsOSArNDQzLDEyIEBACiAJCQlyID0gbmZjX2hjaV9zZXRfcGFyYW0oaGRldiwgU1QyMU5GQ0FfUkZfQ0FSRF9GX0dBVEUsCiAJCQkJCSAgICAgIFNUMjFORkNBX1JGX0NBUkRfRl9EQVRBUkFURSwKIAkJCQkJICAgICAgcGFyYW0sIDEpOwotCQkJaWYgKHIgPCAwKQorCQkJaWYgKHIgPCAwKSB7CisJCQkJa2ZyZWVfc2tiKGRhdGFyYXRlX3NrYik7CiAJCQkJcmV0dXJuIHI7CisJCQl9CiAJCX0KKwkJa2ZyZWVfc2tiKGRhdGFyYXRlX3NrYik7CiAKIAkJLyoKIAkJICogQ29uZmlndXJlIHNlbnNfcmVzCkBAIC02NzMsMTUgKzcwMiwxNSBAQAogCQkJCQkJc3RydWN0IG5mY190YXJnZXQgKnRhcmdldCkKIHsKIAlpbnQgcjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbmZjaWQyX3NrYiA9IE5VTEwsICpuZmNpZDFfc2tiOworCXN0cnVjdCBza19idWZmICpuZmNpZF9za2IgPSBOVUxMOwogCiAJaWYgKGdhdGUgPT0gU1QyMU5GQ0FfUkZfUkVBREVSX0ZfR0FURSkgewogCQlyID0gbmZjX2hjaV9nZXRfcGFyYW0oaGRldiwgU1QyMU5GQ0FfUkZfUkVBREVSX0ZfR0FURSwKLQkJCQlTVDIxTkZDQV9SRl9SRUFERVJfRl9ORkNJRDIsICZuZmNpZDJfc2tiKTsKKwkJCQlTVDIxTkZDQV9SRl9SRUFERVJfRl9ORkNJRDIsICZuZmNpZF9za2IpOwogCQlpZiAociA8IDApCiAJCQlnb3RvIGV4aXQ7CiAKLQkJaWYgKG5mY2lkMl9za2ItPmxlbiA+IE5GQ19TRU5TRl9SRVNfTUFYU0laRSkgeworCQlpZiAobmZjaWRfc2tiLT5sZW4gPiBORkNfU0VOU0ZfUkVTX01BWFNJWkUpIHsKIAkJCXIgPSAtRVBST1RPOwogCQkJZ290byBleGl0OwogCQl9CkBAIC02OTMsMTEgKzcyMiwxMSBAQAogCQkgKiAtIEFmdGVyIHRoZSByZWNlcHRpb24gb2YgU0VMX1JFUyB3aXRoIE5GQ0lQLTEgY29tcGxpYW50IGJpdAogCQkgKiBzZXQgZm9yIHR5cGUgQSBmcmFtZSBORkNJRDEgd2lsbCBiZSB1cGRhdGVkCiAJCSAqLwotCQlpZiAobmZjaWQyX3NrYi0+bGVuID4gMCkgeworCQlpZiAobmZjaWRfc2tiLT5sZW4gPiAwKSB7CiAJCQkvKiBQMlAgaW4gdHlwZSBGICovCi0JCQltZW1jcHkodGFyZ2V0LT5zZW5zZl9yZXMsIG5mY2lkMl9za2ItPmRhdGEsCi0JCQkJbmZjaWQyX3NrYi0+bGVuKTsKLQkJCXRhcmdldC0+c2Vuc2ZfcmVzX2xlbiA9IG5mY2lkMl9za2ItPmxlbjsKKwkJCW1lbWNweSh0YXJnZXQtPnNlbnNmX3JlcywgbmZjaWRfc2tiLT5kYXRhLAorCQkJCW5mY2lkX3NrYi0+bGVuKTsKKwkJCXRhcmdldC0+c2Vuc2ZfcmVzX2xlbiA9IG5mY2lkX3NrYi0+bGVuOwogCQkJLyogTkZDIEZvcnVtIERpZ2l0YWwgUHJvdG9jb2wgVGFibGUgNDQgKi8KIAkJCWlmICh0YXJnZXQtPnNlbnNmX3Jlc1swXSA9PSAweDAxICYmCiAJCQkgICAgdGFyZ2V0LT5zZW5zZl9yZXNbMV0gPT0gMHhmZSkKQEAgLTcwNywyNyArNzM2LDI4IEBACiAJCQkJdGFyZ2V0LT5zdXBwb3J0ZWRfcHJvdG9jb2xzID0KIAkJCQkJCQlORkNfUFJPVE9fRkVMSUNBX01BU0s7CiAJCX0gZWxzZSB7CisJCQlrZnJlZV9za2IobmZjaWRfc2tiKTsKIAkJCS8qIFAyUCBpbiB0eXBlIEEgKi8KIAkJCXIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBTVDIxTkZDQV9SRl9SRUFERVJfRl9HQVRFLAogCQkJCQlTVDIxTkZDQV9SRl9SRUFERVJfRl9ORkNJRDEsCi0JCQkJCSZuZmNpZDFfc2tiKTsKKwkJCQkJJm5mY2lkX3NrYik7CiAJCQlpZiAociA8IDApCiAJCQkJZ290byBleGl0OwogCi0JCQlpZiAobmZjaWQxX3NrYi0+bGVuID4gTkZDX05GQ0lEMV9NQVhTSVpFKSB7CisJCQlpZiAobmZjaWRfc2tiLT5sZW4gPiBORkNfTkZDSUQxX01BWFNJWkUpIHsKIAkJCQlyID0gLUVQUk9UTzsKIAkJCQlnb3RvIGV4aXQ7CiAJCQl9Ci0JCQltZW1jcHkodGFyZ2V0LT5zZW5zZl9yZXMsIG5mY2lkMV9za2ItPmRhdGEsCi0JCQkJbmZjaWQxX3NrYi0+bGVuKTsKLQkJCXRhcmdldC0+c2Vuc2ZfcmVzX2xlbiA9IG5mY2lkMV9za2ItPmxlbjsKKwkJCW1lbWNweSh0YXJnZXQtPnNlbnNmX3JlcywgbmZjaWRfc2tiLT5kYXRhLAorCQkJCW5mY2lkX3NrYi0+bGVuKTsKKwkJCXRhcmdldC0+c2Vuc2ZfcmVzX2xlbiA9IG5mY2lkX3NrYi0+bGVuOwogCQkJdGFyZ2V0LT5zdXBwb3J0ZWRfcHJvdG9jb2xzID0gTkZDX1BST1RPX05GQ19ERVBfTUFTSzsKIAkJfQogCQl0YXJnZXQtPmhjaV9yZWFkZXJfZ2F0ZSA9IFNUMjFORkNBX1JGX1JFQURFUl9GX0dBVEU7CiAJfQogCXIgPSAxOwogZXhpdDoKLQlrZnJlZV9za2IobmZjaWQyX3NrYik7CisJa2ZyZWVfc2tiKG5mY2lkX3NrYik7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTgyOSwyNCArODU5LDgyIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBzdDIxbmZjYV9oY2lfY21kX3JlY2VpdmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSwgdTggY21kLAorCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHN0MjFuZmNhX2hjaV9pbmZvICppbmZvID0gbmZjX2hjaV9nZXRfY2xpZW50ZGF0YShoZGV2KTsKKwl1OCBnYXRlID0gaGRldi0+cGlwZXNbcGlwZV0uZ2F0ZTsKKworCXByX2RlYnVnKCJjbWQ6ICV4XG4iLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE5GQ19IQ0lfQU5ZX09QRU5fUElQRToKKwkJaWYgKGdhdGUgIT0gU1QyMU5GQ0FfQVBEVV9SRUFERVJfR0FURSAmJgorCQkJaGRldi0+cGlwZXNbcGlwZV0uZGVzdF9ob3N0ICE9IE5GQ19IQ0lfVUlDQ19IT1NUX0lEKQorCQkJaW5mby0+c2VfaW5mby5jb3VudF9waXBlcysrOworCisJCWlmIChpbmZvLT5zZV9pbmZvLmNvdW50X3BpcGVzID09IGluZm8tPnNlX2luZm8uZXhwZWN0ZWRfcGlwZXMpIHsKKwkJCWRlbF90aW1lcl9zeW5jKCZpbmZvLT5zZV9pbmZvLnNlX2FjdGl2ZV90aW1lcik7CisJCQlpbmZvLT5zZV9pbmZvLnNlX2FjdGl2ZSA9IGZhbHNlOworCQkJaW5mby0+c2VfaW5mby5jb3VudF9waXBlcyA9IDA7CisJCQljb21wbGV0ZSgmaW5mby0+c2VfaW5mby5yZXFfY29tcGxldGlvbik7CisJCX0KKwlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3QyMW5mY2FfYWRtaW5fZXZlbnRfcmVjZWl2ZWQoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBldmVudCwKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc3QyMW5mY2FfaGNpX2luZm8gKmluZm8gPSBuZmNfaGNpX2dldF9jbGllbnRkYXRhKGhkZXYpOworCisJcHJfZGVidWcoImFkbWluIGV2ZW50OiAleFxuIiwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU1QyMU5GQ0FfRVZUX0hPVF9QTFVHOgorCQlpZiAoaW5mby0+c2VfaW5mby5zZV9hY3RpdmUpIHsKKwkJCWlmICghU1QyMU5GQ0FfRVZUX0hPVF9QTFVHX0lTX0lOSElCSVRFRChza2IpKSB7CisJCQkJZGVsX3RpbWVyX3N5bmMoJmluZm8tPnNlX2luZm8uc2VfYWN0aXZlX3RpbWVyKTsKKwkJCQlpbmZvLT5zZV9pbmZvLnNlX2FjdGl2ZSA9IGZhbHNlOworCQkJCWNvbXBsZXRlKCZpbmZvLT5zZV9pbmZvLnJlcV9jb21wbGV0aW9uKTsKKwkJCX0gZWxzZSB7CisJCQkJbW9kX3RpbWVyKCZpbmZvLT5zZV9pbmZvLnNlX2FjdGl2ZV90aW1lciwKKwkJCQkJamlmZmllcyArCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoU1QyMU5GQ0FfU0VfVE9fUElQRVMpKTsKKwkJCX0KKwkJfQorCWJyZWFrOworCX0KKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFJldHVybnM6CiAgKiA8PSAwOiBkcml2ZXIgaGFuZGxlZCB0aGUgZXZlbnQsIHNrYiBjb25zdW1lZAogICogICAgMTogZHJpdmVyIGRvZXMgbm90IGhhbmRsZSB0aGUgZXZlbnQsIHBsZWFzZSBkbyBzdGFuZGFyZCBwcm9jZXNzaW5nCiAgKi8KLXN0YXRpYyBpbnQgc3QyMW5mY2FfaGNpX2V2ZW50X3JlY2VpdmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSwKK3N0YXRpYyBpbnQgc3QyMW5mY2FfaGNpX2V2ZW50X3JlY2VpdmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSwKIAkJCQkgICAgICAgdTggZXZlbnQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJdTggZ2F0ZSA9IGhkZXYtPnBpcGVzW3BpcGVdLmdhdGU7CisJdTggaG9zdCA9IGhkZXYtPnBpcGVzW3BpcGVdLmRlc3RfaG9zdDsKKwogCXByX2RlYnVnKCJoY2kgZXZlbnQ6ICVkIGdhdGU6ICV4XG4iLCBldmVudCwgZ2F0ZSk7CiAKIAlzd2l0Y2ggKGdhdGUpIHsKKwljYXNlIE5GQ19IQ0lfQURNSU5fR0FURToKKwkJcmV0dXJuIHN0MjFuZmNhX2FkbWluX2V2ZW50X3JlY2VpdmVkKGhkZXYsIGV2ZW50LCBza2IpOwogCWNhc2UgU1QyMU5GQ0FfUkZfQ0FSRF9GX0dBVEU6CiAJCXJldHVybiBzdDIxbmZjYV9kZXBfZXZlbnRfcmVjZWl2ZWQoaGRldiwgZXZlbnQsIHNrYik7CisJY2FzZSBTVDIxTkZDQV9DT05ORUNUSVZJVFlfR0FURToKKwkJcmV0dXJuIHN0MjFuZmNhX2Nvbm5lY3Rpdml0eV9ldmVudF9yZWNlaXZlZChoZGV2LCBob3N0LAorCQkJCQkJCWV2ZW50LCBza2IpOworCWNhc2UgU1QyMU5GQ0FfQVBEVV9SRUFERVJfR0FURToKKwkJcmV0dXJuIHN0MjFuZmNhX2FwZHVfcmVhZGVyX2V2ZW50X3JlY2VpdmVkKGhkZXYsIGV2ZW50LCBza2IpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAxOwogCX0KLQlrZnJlZV9za2Ioc2tiKTsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBuZmNfaGNpX29wcyBzdDIxbmZjYV9oY2lfb3BzID0gewpAQCAtODY1LDExICs5NTMsMTcgQEAKIAkudG1fc2VuZCA9IHN0MjFuZmNhX2hjaV90bV9zZW5kLAogCS5jaGVja19wcmVzZW5jZSA9IHN0MjFuZmNhX2hjaV9jaGVja19wcmVzZW5jZSwKIAkuZXZlbnRfcmVjZWl2ZWQgPSBzdDIxbmZjYV9oY2lfZXZlbnRfcmVjZWl2ZWQsCisJLmNtZF9yZWNlaXZlZCA9IHN0MjFuZmNhX2hjaV9jbWRfcmVjZWl2ZWQsCisJLmRpc2NvdmVyX3NlID0gc3QyMW5mY2FfaGNpX2Rpc2NvdmVyX3NlLAorCS5lbmFibGVfc2UgPSBzdDIxbmZjYV9oY2lfZW5hYmxlX3NlLAorCS5kaXNhYmxlX3NlID0gc3QyMW5mY2FfaGNpX2Rpc2FibGVfc2UsCisJLnNlX2lvID0gc3QyMW5mY2FfaGNpX3NlX2lvLAogfTsKIAogaW50IHN0MjFuZmNhX2hjaV9wcm9iZSh2b2lkICpwaHlfaWQsIHN0cnVjdCBuZmNfcGh5X29wcyAqcGh5X29wcywKIAkJICAgICAgIGNoYXIgKmxsY19uYW1lLCBpbnQgcGh5X2hlYWRyb29tLCBpbnQgcGh5X3RhaWxyb29tLAotCQkgICAgICAgaW50IHBoeV9wYXlsb2FkLCBzdHJ1Y3QgbmZjX2hjaV9kZXYgKipoZGV2KQorCQkgICAgICAgaW50IHBoeV9wYXlsb2FkLCBzdHJ1Y3QgbmZjX2hjaV9kZXYgKipoZGV2LAorCQkJICAgc3RydWN0IHN0MjFuZmNhX3NlX3N0YXR1cyAqc2Vfc3RhdHVzKQogewogCXN0cnVjdCBzdDIxbmZjYV9oY2lfaW5mbyAqaW5mbzsKIAlpbnQgciA9IDA7CkBAIC05MjksNiArMTAyMyw4IEBACiAJCWdvdG8gZXJyX2FsbG9jX2hkZXY7CiAJfQogCisJaW5mby0+c2Vfc3RhdHVzID0gc2Vfc3RhdHVzOworCiAJbmZjX2hjaV9zZXRfY2xpZW50ZGF0YShpbmZvLT5oZGV2LCBpbmZvKTsKIAogCXIgPSBuZmNfaGNpX3JlZ2lzdGVyX2RldmljZShpbmZvLT5oZGV2KTsKQEAgLTkzNyw2ICsxMDMzLDcgQEAKIAogCSpoZGV2ID0gaW5mby0+aGRldjsKIAlzdDIxbmZjYV9kZXBfaW5pdChpbmZvLT5oZGV2KTsKKwlzdDIxbmZjYV9zZV9pbml0KGluZm8tPmhkZXYpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTk1NSw2ICsxMDUyLDcgQEAKIAlzdHJ1Y3Qgc3QyMW5mY2FfaGNpX2luZm8gKmluZm8gPSBuZmNfaGNpX2dldF9jbGllbnRkYXRhKGhkZXYpOwogCiAJc3QyMW5mY2FfZGVwX2RlaW5pdChoZGV2KTsKKwlzdDIxbmZjYV9zZV9kZWluaXQoaGRldik7CiAJbmZjX2hjaV91bnJlZ2lzdGVyX2RldmljZShoZGV2KTsKIAluZmNfaGNpX2ZyZWVfZGV2aWNlKGhkZXYpOwogCWtmcmVlKGluZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvc3QyMW5mY2Evc3QyMW5mY2EuaCBiL2RyaXZlcnMvbmZjL3N0MjFuZmNhL3N0MjFuZmNhLmgKaW5kZXggN2MyYTg1Mi4uMTVhNzhkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvc3QyMW5mY2Evc3QyMW5mY2EuaAorKysgYi9kcml2ZXJzL25mYy9zdDIxbmZjYS9zdDIxbmZjYS5oCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bmV0L25mYy9oY2kuaD4KIAogI2luY2x1ZGUgInN0MjFuZmNhX2RlcC5oIgorI2luY2x1ZGUgInN0MjFuZmNhX3NlLmgiCiAKICNkZWZpbmUgSENJX01PREUgMAogCkBAIC01MSw5ICs1MiwxNSBAQAogCiAjZGVmaW5lIFNUMjFORkNBX05VTV9ERVZJQ0VTIDI1NgogCitzdHJ1Y3Qgc3QyMW5mY2Ffc2Vfc3RhdHVzIHsKKwlib29sIGlzX2VzZV9wcmVzZW50OworCWJvb2wgaXNfdWljY19wcmVzZW50OworfTsKKwogaW50IHN0MjFuZmNhX2hjaV9wcm9iZSh2b2lkICpwaHlfaWQsIHN0cnVjdCBuZmNfcGh5X29wcyAqcGh5X29wcywKIAkJICAgICAgIGNoYXIgKmxsY19uYW1lLCBpbnQgcGh5X2hlYWRyb29tLCBpbnQgcGh5X3RhaWxyb29tLAotCQkgICAgICAgaW50IHBoeV9wYXlsb2FkLCBzdHJ1Y3QgbmZjX2hjaV9kZXYgKipoZGV2KTsKKwkJICAgICAgIGludCBwaHlfcGF5bG9hZCwgc3RydWN0IG5mY19oY2lfZGV2ICoqaGRldiwKKwkJCSAgIHN0cnVjdCBzdDIxbmZjYV9zZV9zdGF0dXMgKnNlX3N0YXR1cyk7CiB2b2lkIHN0MjFuZmNhX2hjaV9yZW1vdmUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KTsKIAogZW51bSBzdDIxbmZjYV9zdGF0ZSB7CkBAIC02Niw2ICs3Myw3IEBACiAJdm9pZCAqcGh5X2lkOwogCiAJc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2OworCXN0cnVjdCBzdDIxbmZjYV9zZV9zdGF0dXMgKnNlX3N0YXR1czsKIAogCWVudW0gc3QyMW5mY2Ffc3RhdGUgc3RhdGU7CiAKQEAgLTc2LDEzICs4NCwxNiBAQAogCXZvaWQgKmFzeW5jX2NiX2NvbnRleHQ7CiAKIAlzdHJ1Y3Qgc3QyMW5mY2FfZGVwX2luZm8gZGVwX2luZm87CisJc3RydWN0IHN0MjFuZmNhX3NlX2luZm8gc2VfaW5mbzsKIH07CiAKIC8qIFJlYWRlciBSRiBjb21tYW5kcyAqLwotI2RlZmluZSBTVDIxTkZDQV9XUl9YQ0hHX0RBVEEgICAgICAgICAgICAweDEwCisjZGVmaW5lIFNUMjFORkNBX1dSX1hDSEdfREFUQSAgICAgICAgICAgMHgxMAogCi0jZGVmaW5lIFNUMjFORkNBX1JGX1JFQURFUl9GX0dBVEUgICAgICAgICAgICAgICAweDE0Ci0KLSNkZWZpbmUgU1QyMU5GQ0FfUkZfQ0FSRF9GX0dBVEUgMHgyNAorI2RlZmluZSBTVDIxTkZDQV9ERVZJQ0VfTUdOVF9HQVRFICAgICAgIDB4MDEKKyNkZWZpbmUgU1QyMU5GQ0FfUkZfUkVBREVSX0ZfR0FURSAgICAgICAweDE0CisjZGVmaW5lIFNUMjFORkNBX1JGX0NBUkRfRl9HQVRFCQkJMHgyNAorI2RlZmluZSBTVDIxTkZDQV9BUERVX1JFQURFUl9HQVRFCQkweGYwCisjZGVmaW5lIFNUMjFORkNBX0NPTk5FQ1RJVklUWV9HQVRFCQkweDQxCiAKICNlbmRpZiAvKiBfX0xPQ0FMX1NUMjFORkNBX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zdDIxbmZjYS9zdDIxbmZjYV9zZS5jIGIvZHJpdmVycy9uZmMvc3QyMW5mY2Evc3QyMW5mY2Ffc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDEzY2FjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZmMvc3QyMW5mY2Evc3QyMW5mY2Ffc2UuYwpAQCAtMCwwICsxLDQxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCAgU1RNaWNyb2VsZWN0cm9uaWNzIFNBUy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxuZXQvbmZjL2hjaS5oPgorCisjaW5jbHVkZSAic3QyMW5mY2EuaCIKKyNpbmNsdWRlICJzdDIxbmZjYV9zZS5oIgorCisjZGVmaW5lIFNUMjFORkNBX0VWVF9VSUNDX0FDVElWQVRFCQkweDEwCisjZGVmaW5lIFNUMjFORkNBX0VWVF9VSUNDX0RFQUNUSVZBVEUJMHgxMworI2RlZmluZSBTVDIxTkZDQV9FVlRfU0VfSEFSRF9SRVNFVAkJMHgyMAorI2RlZmluZSBTVDIxTkZDQV9FVlRfU0VfU09GVF9SRVNFVAkJMHgxMQorI2RlZmluZSBTVDIxTkZDQV9FVlRfU0VfRU5EX09GX0FQRFVfVFJBTlNGRVIJMHgyMQorI2RlZmluZSBTVDIxTkZDQV9FVlRfU0VfQUNUSVZBVEUJCTB4MjIKKyNkZWZpbmUgU1QyMU5GQ0FfRVZUX1NFX0RFQUNUSVZBVEUJCTB4MjMKKworI2RlZmluZSBTVDIxTkZDQV9FVlRfVFJBTlNNSVRfREFUQQkJMHgxMAorI2RlZmluZSBTVDIxTkZDQV9FVlRfV1RYX1JFUVVFU1QJCTB4MTEKKworI2RlZmluZSBTVDIxTkZDQV9FVlRfQ09OTkVDVElWSVRZCQkweDEwCisjZGVmaW5lIFNUMjFORkNBX0VWVF9UUkFOU0FDVElPTgkJMHgxMgorCisjZGVmaW5lIFNUMjFORkNBX0VTRV9IT1NUX0lECQkJMHhjMAorCisjZGVmaW5lIFNUMjFORkNBX1NFX1RPX0hPVF9QTFVHCQkJMTAwMAorLyogQ29ubmVjdGl2aXR5IHBpcGUgb25seSAqLworI2RlZmluZSBTVDIxTkZDQV9TRV9DT1VOVF9QSVBFX1VJQ0MJCTB4MDEKKy8qIENvbm5lY3Rpdml0eSArIEFQRFUgUmVhZGVyIHBpcGUgKi8KKyNkZWZpbmUgU1QyMU5GQ0FfU0VfQ09VTlRfUElQRV9FTUJFRERFRAkweDAyCisKKyNkZWZpbmUgU1QyMU5GQ0FfU0VfTU9ERV9PRkYJCQkweDAwCisjZGVmaW5lIFNUMjFORkNBX1NFX01PREVfT04JCQkJMHgwMQorCisjZGVmaW5lIFNUMjFORkNBX1BBUkFNX0FUUgkJCQkweDAxCisjZGVmaW5lIFNUMjFORkNBX0FUUl9ERUZBVUxUX0JXSQkJMHgwNAorCisvKgorICogV1QgPSAyXkJXSS8xMFtzXSwgY29udmVydCBpbnRvIG1zZWNzIGFuZCBhZGQgYSBzZWN1cmUKKyAqIHJvb20gYnkgaW5jcmVhc2luZyBieSAyIHRoaXMgdGltZW91dAorICovCisjZGVmaW5lIFNUMjFORkNBX0JXSV9UT19USU1FT1VUKHgpCQkoKDEgPDwgeCkgKiAyMDApCisjZGVmaW5lIFNUMjFORkNBX0FUUl9HRVRfWV9GUk9NX1REKHgpCSh4ID4+IDQpCisKKy8qIElmIFRBIGlzIHByZXNlbnQgYml0IDAgaXMgc2V0ICovCisjZGVmaW5lIFNUMjFORkNBX0FUUl9UQV9QUkVTRU5UKHgpICh4ICYgMHgwMSkKKy8qIElmIFRCIGlzIHByZXNlbnQgYml0IDEgaXMgc2V0ICovCisjZGVmaW5lIFNUMjFORkNBX0FUUl9UQl9QUkVTRU5UKHgpICh4ICYgMHgwMikKKworc3RhdGljIHU4IHN0MjFuZmNhX3NlX2dldF9id2koc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KQoreworCWludCBpOworCXU4IHRkOworCXN0cnVjdCBzdDIxbmZjYV9oY2lfaW5mbyAqaW5mbyA9IG5mY19oY2lfZ2V0X2NsaWVudGRhdGEoaGRldik7CisKKwkvKiBCaXRzIDggdG8gNSBvZiB0aGUgZmlyc3QgVEIgZm9yIFQ9MSBlbmNvZGUgQldJIGZyb20gemVybyB0byBuaW5lICovCisJZm9yIChpID0gMTsgaSA8IFNUMjFORkNBX0VTRV9NQVhfTEVOR1RIOyBpKyspIHsKKwkJdGQgPSBTVDIxTkZDQV9BVFJfR0VUX1lfRlJPTV9URChpbmZvLT5zZV9pbmZvLmF0cltpXSk7CisJCWlmIChTVDIxTkZDQV9BVFJfVEFfUFJFU0VOVCh0ZCkpCisJCQlpKys7CisJCWlmIChTVDIxTkZDQV9BVFJfVEJfUFJFU0VOVCh0ZCkpIHsKKwkJCWkrKzsKKwkJCXJldHVybiBpbmZvLT5zZV9pbmZvLmF0cltpXSA+PiA0OworCQl9CisJfQorCXJldHVybiBTVDIxTkZDQV9BVFJfREVGQVVMVF9CV0k7Cit9CisKK3N0YXRpYyB2b2lkIHN0MjFuZmNhX3NlX2dldF9hdHIoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KQoreworCWludCByOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHN0MjFuZmNhX2hjaV9pbmZvICppbmZvID0gbmZjX2hjaV9nZXRfY2xpZW50ZGF0YShoZGV2KTsKKworCXIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBTVDIxTkZDQV9BUERVX1JFQURFUl9HQVRFLAorCQkJU1QyMU5GQ0FfUEFSQU1fQVRSLCAmc2tiKTsKKwlpZiAociA8IDApCisJCXJldHVybjsKKworCWlmIChza2ItPmxlbiA8PSBTVDIxTkZDQV9FU0VfTUFYX0xFTkdUSCkgeworCQltZW1jcHkoaW5mby0+c2VfaW5mby5hdHIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQlpbmZvLT5zZV9pbmZvLnd0X3RpbWVvdXQgPQorCQkJU1QyMU5GQ0FfQldJX1RPX1RJTUVPVVQoc3QyMW5mY2Ffc2VfZ2V0X2J3aShoZGV2KSk7CisJfQorCWtmcmVlX3NrYihza2IpOworfQorCitzdGF0aWMgaW50IHN0MjFuZmNhX2hjaV9jb250cm9sX3NlKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTMyIHNlX2lkeCwKKwkJCQl1OCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3QyMW5mY2FfaGNpX2luZm8gKmluZm8gPSBuZmNfaGNpX2dldF9jbGllbnRkYXRhKGhkZXYpOworCWludCByOworCXN0cnVjdCBza19idWZmICpza19ob3N0X2xpc3Q7CisJdTggc2VfZXZlbnQsIGhvc3RfaWQ7CisKKwlzd2l0Y2ggKHNlX2lkeCkgeworCWNhc2UgTkZDX0hDSV9VSUNDX0hPU1RfSUQ6CisJCXNlX2V2ZW50ID0gKHN0YXRlID09IFNUMjFORkNBX1NFX01PREVfT04gPworCQkJCQlTVDIxTkZDQV9FVlRfVUlDQ19BQ1RJVkFURSA6CisJCQkJCVNUMjFORkNBX0VWVF9VSUNDX0RFQUNUSVZBVEUpOworCisJCWluZm8tPnNlX2luZm8uY291bnRfcGlwZXMgPSAwOworCQlpbmZvLT5zZV9pbmZvLmV4cGVjdGVkX3BpcGVzID0gU1QyMU5GQ0FfU0VfQ09VTlRfUElQRV9VSUNDOworCQlicmVhazsKKwljYXNlIFNUMjFORkNBX0VTRV9IT1NUX0lEOgorCQlzZV9ldmVudCA9IChzdGF0ZSA9PSBTVDIxTkZDQV9TRV9NT0RFX09OID8KKwkJCQkJU1QyMU5GQ0FfRVZUX1NFX0FDVElWQVRFIDoKKwkJCQkJU1QyMU5GQ0FfRVZUX1NFX0RFQUNUSVZBVEUpOworCisJCWluZm8tPnNlX2luZm8uY291bnRfcGlwZXMgPSAwOworCQlpbmZvLT5zZV9pbmZvLmV4cGVjdGVkX3BpcGVzID0gU1QyMU5GQ0FfU0VfQ09VTlRfUElQRV9FTUJFRERFRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkgKiBXYWl0IGZvciBhbiBFVlRfSE9UX1BMVUcgaW4gb3JkZXIgdG8KKwkgKiByZXRyaWV2ZSBhIHJlbGV2YW50IGhvc3QgbGlzdC4KKwkgKi8KKwlyZWluaXRfY29tcGxldGlvbigmaW5mby0+c2VfaW5mby5yZXFfY29tcGxldGlvbik7CisJciA9IG5mY19oY2lfc2VuZF9ldmVudChoZGV2LCBTVDIxTkZDQV9ERVZJQ0VfTUdOVF9HQVRFLCBzZV9ldmVudCwKKwkJCSAgICAgICBOVUxMLCAwKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCisJbW9kX3RpbWVyKCZpbmZvLT5zZV9pbmZvLnNlX2FjdGl2ZV90aW1lciwgamlmZmllcyArCisJCW1zZWNzX3RvX2ppZmZpZXMoU1QyMU5GQ0FfU0VfVE9fSE9UX1BMVUcpKTsKKwlpbmZvLT5zZV9pbmZvLnNlX2FjdGl2ZSA9IHRydWU7CisKKwkvKiBJZ25vcmUgcmV0dXJuIHZhbHVlIGFuZCBjaGVjayBpbiBhbnkgY2FzZSB0aGUgaG9zdF9saXN0ICovCisJd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5zZV9pbmZvLnJlcV9jb21wbGV0aW9uKTsKKworCXIgPSBuZmNfaGNpX2dldF9wYXJhbShoZGV2LCBORkNfSENJX0FETUlOX0dBVEUsCisJCQlORkNfSENJX0FETUlOX0hPU1RfTElTVCwKKwkJCSZza19ob3N0X2xpc3QpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlob3N0X2lkID0gc2tfaG9zdF9saXN0LT5kYXRhW3NrX2hvc3RfbGlzdC0+bGVuIC0gMV07CisJa2ZyZWVfc2tiKHNrX2hvc3RfbGlzdCk7CisKKwlpZiAoc3RhdGUgPT0gU1QyMU5GQ0FfU0VfTU9ERV9PTiAmJiBob3N0X2lkID09IHNlX2lkeCkKKwkJcmV0dXJuIHNlX2lkeDsKKwllbHNlIGlmIChzdGF0ZSA9PSBTVDIxTkZDQV9TRV9NT0RFX09GRiAmJiBob3N0X2lkICE9IHNlX2lkeCkKKwkJcmV0dXJuIHNlX2lkeDsKKworCXJldHVybiAtMTsKK30KKworaW50IHN0MjFuZmNhX2hjaV9kaXNjb3Zlcl9zZShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYpCit7CisJc3RydWN0IHN0MjFuZmNhX2hjaV9pbmZvICppbmZvID0gbmZjX2hjaV9nZXRfY2xpZW50ZGF0YShoZGV2KTsKKwlpbnQgc2VfY291bnQgPSAwOworCisJaWYgKGluZm8tPnNlX3N0YXR1cy0+aXNfdWljY19wcmVzZW50KSB7CisJCW5mY19hZGRfc2UoaGRldi0+bmRldiwgTkZDX0hDSV9VSUNDX0hPU1RfSUQsIE5GQ19TRV9VSUNDKTsKKwkJc2VfY291bnQrKzsKKwl9CisKKwlpZiAoaW5mby0+c2Vfc3RhdHVzLT5pc19lc2VfcHJlc2VudCkgeworCQluZmNfYWRkX3NlKGhkZXYtPm5kZXYsIFNUMjFORkNBX0VTRV9IT1NUX0lELCBORkNfU0VfRU1CRURERUQpOworCQlzZV9jb3VudCsrOworCX0KKworCXJldHVybiAhc2VfY291bnQ7Cit9CitFWFBPUlRfU1lNQk9MKHN0MjFuZmNhX2hjaV9kaXNjb3Zlcl9zZSk7CisKK2ludCBzdDIxbmZjYV9oY2lfZW5hYmxlX3NlKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTMyIHNlX2lkeCkKK3sKKwlpbnQgcjsKKworCS8qCisJICogQWNjb3JkaW5nIHRvIHVwcGVyIGxheWVyLCBzZV9pZHggPT0gTkZDX1NFX1VJQ0Mgd2hlbgorCSAqIGluZm8tPnNlX3N0YXR1cy0+aXNfdWljY19lbmFibGUgaXMgdHJ1ZSBzaG91bGQgbmV2ZXIgaGFwcGVuLgorCSAqIFNhbWUgZm9yIGVTRS4KKwkgKi8KKwlyID0gc3QyMW5mY2FfaGNpX2NvbnRyb2xfc2UoaGRldiwgc2VfaWR4LCBTVDIxTkZDQV9TRV9NT0RFX09OKTsKKworCWlmIChyID09IFNUMjFORkNBX0VTRV9IT1NUX0lEKSB7CisJCXN0MjFuZmNhX3NlX2dldF9hdHIoaGRldik7CisJCXIgPSBuZmNfaGNpX3NlbmRfZXZlbnQoaGRldiwgU1QyMU5GQ0FfQVBEVV9SRUFERVJfR0FURSwKKwkJCQlTVDIxTkZDQV9FVlRfU0VfU09GVF9SRVNFVCwgTlVMTCwgMCk7CisJCWlmIChyIDwgMCkKKwkJCXJldHVybiByOworCX0gZWxzZSBpZiAociA8IDApIHsKKwkJLyoKKwkJICogVGhlIGFjdGl2YXRpb24gdGVudGF0aXZlIGZhaWxlZCwgdGhlIHNlY3VyZSBlbGVtZW50CisJCSAqIGlzIG5vdCBjb25uZWN0ZWQuIFJlbW92ZSBmcm9tIHRoZSBsaXN0LgorCQkgKi8KKwkJbmZjX3JlbW92ZV9zZShoZGV2LT5uZGV2LCBzZV9pZHgpOworCQlyZXR1cm4gcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc3QyMW5mY2FfaGNpX2VuYWJsZV9zZSk7CisKK2ludCBzdDIxbmZjYV9oY2lfZGlzYWJsZV9zZShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHUzMiBzZV9pZHgpCit7CisJaW50IHI7CisKKwkvKgorCSAqIEFjY29yZGluZyB0byB1cHBlciBsYXllciwgc2VfaWR4ID09IE5GQ19TRV9VSUNDIHdoZW4KKwkgKiBpbmZvLT5zZV9zdGF0dXMtPmlzX3VpY2NfZW5hYmxlIGlzIHRydWUgc2hvdWxkIG5ldmVyIGhhcHBlbgorCSAqIFNhbWUgZm9yIGVTRS4KKwkgKi8KKwlyID0gc3QyMW5mY2FfaGNpX2NvbnRyb2xfc2UoaGRldiwgc2VfaWR4LCBTVDIxTkZDQV9TRV9NT0RFX09GRik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzdDIxbmZjYV9oY2lfZGlzYWJsZV9zZSk7CisKK2ludCBzdDIxbmZjYV9oY2lfc2VfaW8oc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1MzIgc2VfaWR4LAorCQkJdTggKmFwZHUsIHNpemVfdCBhcGR1X2xlbmd0aCwKKwkJCXNlX2lvX2NiX3QgY2IsIHZvaWQgKmNiX2NvbnRleHQpCit7CisJc3RydWN0IHN0MjFuZmNhX2hjaV9pbmZvICppbmZvID0gbmZjX2hjaV9nZXRfY2xpZW50ZGF0YShoZGV2KTsKKworCXByX2RlYnVnKCJzZV9pbyAleFxuIiwgc2VfaWR4KTsKKworCXN3aXRjaCAoc2VfaWR4KSB7CisJY2FzZSBTVDIxTkZDQV9FU0VfSE9TVF9JRDoKKwkJaW5mby0+c2VfaW5mby5jYiA9IGNiOworCQlpbmZvLT5zZV9pbmZvLmNiX2NvbnRleHQgPSBjYl9jb250ZXh0OworCQltb2RfdGltZXIoJmluZm8tPnNlX2luZm8uYndpX3RpbWVyLCBqaWZmaWVzICsKKwkJCSAgbXNlY3NfdG9famlmZmllcyhpbmZvLT5zZV9pbmZvLnd0X3RpbWVvdXQpKTsKKwkJaW5mby0+c2VfaW5mby5id2lfYWN0aXZlID0gdHJ1ZTsKKwkJcmV0dXJuIG5mY19oY2lfc2VuZF9ldmVudChoZGV2LCBTVDIxTkZDQV9BUERVX1JFQURFUl9HQVRFLAorCQkJCQlTVDIxTkZDQV9FVlRfVFJBTlNNSVRfREFUQSwKKwkJCQkJYXBkdSwgYXBkdV9sZW5ndGgpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KK30KK0VYUE9SVF9TWU1CT0woc3QyMW5mY2FfaGNpX3NlX2lvKTsKKworc3RhdGljIHZvaWQgc3QyMW5mY2Ffc2Vfd3RfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJLyoKKwkgKiBObyBhbnN3ZXIgZnJvbSB0aGUgc2VjdXJlIGVsZW1lbnQKKwkgKiB3aXRoaW4gdGhlIGRlZmluZWQgdGltZW91dC4KKwkgKiBMZXQncyBzZW5kIGEgcmVzZXQgcmVxdWVzdCBhcyByZWNvdmVyeSBwcm9jZWR1cmUuCisJICogQWNjb3JkaW5nIHRvIHRoZSBzaXR1YXRpb24sIHdlIGZpcnN0IHRyeSB0byBzZW5kIGEgc29mdHdhcmUgcmVzZXQKKwkgKiB0byB0aGUgc2VjdXJlIGVsZW1lbnQuIElmIHRoZSBuZXh0IGNvbW1hbmQgaXMgc3RpbGwgbm90CisJICogYW5zd2VyaW5nIGluIHRpbWUsIHdlIHNlbmQgdG8gdGhlIENMRiBhIHNlY3VyZSBlbGVtZW50IGhhcmR3YXJlCisJICogcmVzZXQgcmVxdWVzdC4KKwkgKi8KKwkvKiBoYXJkd2FyZSByZXNldCBtYW5hZ2VkIHRocm91Z2ggVkNDX1VJQ0NfT1VUIHBvd2VyIHN1cHBseSAqLworCXU4IHBhcmFtID0gMHgwMTsKKwlzdHJ1Y3Qgc3QyMW5mY2FfaGNpX2luZm8gKmluZm8gPSAoc3RydWN0IHN0MjFuZmNhX2hjaV9pbmZvICopIGRhdGE7CisKKwlwcl9kZWJ1ZygiXG4iKTsKKworCWluZm8tPnNlX2luZm8uYndpX2FjdGl2ZSA9IGZhbHNlOworCisJaWYgKCFpbmZvLT5zZV9pbmZvLnhjaF9lcnJvcikgeworCQlpbmZvLT5zZV9pbmZvLnhjaF9lcnJvciA9IHRydWU7CisJCW5mY19oY2lfc2VuZF9ldmVudChpbmZvLT5oZGV2LCBTVDIxTkZDQV9BUERVX1JFQURFUl9HQVRFLAorCQkJCVNUMjFORkNBX0VWVF9TRV9TT0ZUX1JFU0VULCBOVUxMLCAwKTsKKwl9IGVsc2UgeworCQlpbmZvLT5zZV9pbmZvLnhjaF9lcnJvciA9IGZhbHNlOworCQluZmNfaGNpX3NlbmRfZXZlbnQoaW5mby0+aGRldiwgU1QyMU5GQ0FfREVWSUNFX01HTlRfR0FURSwKKwkJCQlTVDIxTkZDQV9FVlRfU0VfSEFSRF9SRVNFVCwgJnBhcmFtLCAxKTsKKwl9CisJaW5mby0+c2VfaW5mby5jYihpbmZvLT5zZV9pbmZvLmNiX2NvbnRleHQsIE5VTEwsIDAsIC1FVElNRSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0MjFuZmNhX3NlX2FjdGl2YXRpb25fdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHN0MjFuZmNhX2hjaV9pbmZvICppbmZvID0gKHN0cnVjdCBzdDIxbmZjYV9oY2lfaW5mbyAqKSBkYXRhOworCisJcHJfZGVidWcoIlxuIik7CisKKwlpbmZvLT5zZV9pbmZvLnNlX2FjdGl2ZSA9IGZhbHNlOworCisJY29tcGxldGUoJmluZm8tPnNlX2luZm8ucmVxX2NvbXBsZXRpb24pOworfQorCisvKgorICogUmV0dXJuczoKKyAqIDw9IDA6IGRyaXZlciBoYW5kbGVkIHRoZSBldmVudCwgc2tiIGNvbnN1bWVkCisgKiAgICAxOiBkcml2ZXIgZG9lcyBub3QgaGFuZGxlIHRoZSBldmVudCwgcGxlYXNlIGRvIHN0YW5kYXJkIHByb2Nlc3NpbmcKKyAqLworaW50IHN0MjFuZmNhX2Nvbm5lY3Rpdml0eV9ldmVudF9yZWNlaXZlZChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGhvc3QsCisJCQkJdTggZXZlbnQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IHIgPSAwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZoZGV2LT5uZGV2LT5kZXY7CisJc3RydWN0IG5mY19ldnRfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uOworCisJcHJfZGVidWcoImNvbm5lY3Rpdml0eSBnYXRlIGV2ZW50OiAleFxuIiwgZXZlbnQpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU1QyMU5GQ0FfRVZUX0NPTk5FQ1RJVklUWToKKwkJYnJlYWs7CisJY2FzZSBTVDIxTkZDQV9FVlRfVFJBTlNBQ1RJT046CisJCWlmIChza2ItPmxlbiA8IE5GQ19NSU5fQUlEX0xFTkdUSCArIDIgJiYKKwkJICAgIHNrYi0+ZGF0YVswXSAhPSBORkNfRVZUX1RSQU5TQUNUSU9OX0FJRF9UQUcpCisJCQlyZXR1cm4gLUVQUk9UTzsKKworCQl0cmFuc2FjdGlvbiA9IChzdHJ1Y3QgbmZjX2V2dF90cmFuc2FjdGlvbiAqKWRldm1fa3phbGxvYyhkZXYsCisJCQkJCQkgICBza2ItPmxlbiAtIDIsIEdGUF9LRVJORUwpOworCisJCXRyYW5zYWN0aW9uLT5haWRfbGVuID0gc2tiLT5kYXRhWzFdOworCQltZW1jcHkodHJhbnNhY3Rpb24tPmFpZCwgJnNrYi0+ZGF0YVsyXSwgc2tiLT5kYXRhWzFdKTsKKworCQlpZiAoc2tiLT5kYXRhW3RyYW5zYWN0aW9uLT5haWRfbGVuICsgMl0gIT0KKwkJICAgIE5GQ19FVlRfVFJBTlNBQ1RJT05fUEFSQU1TX1RBRykKKwkJCXJldHVybiAtRVBST1RPOworCisJCXRyYW5zYWN0aW9uLT5wYXJhbXNfbGVuID0gc2tiLT5kYXRhW3RyYW5zYWN0aW9uLT5haWRfbGVuICsgM107CisJCW1lbWNweSh0cmFuc2FjdGlvbi0+cGFyYW1zLCBza2ItPmRhdGEgKworCQkgICAgICAgdHJhbnNhY3Rpb24tPmFpZF9sZW4gKyA0LCB0cmFuc2FjdGlvbi0+cGFyYW1zX2xlbik7CisKKwkJciA9IG5mY19zZV90cmFuc2FjdGlvbihoZGV2LT5uZGV2LCBob3N0LCB0cmFuc2FjdGlvbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gcjsKK30KK0VYUE9SVF9TWU1CT0woc3QyMW5mY2FfY29ubmVjdGl2aXR5X2V2ZW50X3JlY2VpdmVkKTsKKworaW50IHN0MjFuZmNhX2FwZHVfcmVhZGVyX2V2ZW50X3JlY2VpdmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwKKwkJCQkJdTggZXZlbnQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IHIgPSAwOworCXN0cnVjdCBzdDIxbmZjYV9oY2lfaW5mbyAqaW5mbyA9IG5mY19oY2lfZ2V0X2NsaWVudGRhdGEoaGRldik7CisKKwlwcl9kZWJ1ZygiYXBkdSByZWFkZXIgZ2F0ZSBldmVudDogJXhcbiIsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNUMjFORkNBX0VWVF9UUkFOU01JVF9EQVRBOgorCQlkZWxfdGltZXJfc3luYygmaW5mby0+c2VfaW5mby5id2lfdGltZXIpOworCQlpbmZvLT5zZV9pbmZvLmJ3aV9hY3RpdmUgPSBmYWxzZTsKKwkJciA9IG5mY19oY2lfc2VuZF9ldmVudChoZGV2LCBTVDIxTkZDQV9ERVZJQ0VfTUdOVF9HQVRFLAorCQkJCVNUMjFORkNBX0VWVF9TRV9FTkRfT0ZfQVBEVV9UUkFOU0ZFUiwgTlVMTCwgMCk7CisJCWlmIChyIDwgMCkKKwkJCWdvdG8gZXhpdDsKKworCQlpbmZvLT5zZV9pbmZvLmNiKGluZm8tPnNlX2luZm8uY2JfY29udGV4dCwKKwkJCXNrYi0+ZGF0YSwgc2tiLT5sZW4sIDApOworCQlicmVhazsKKwljYXNlIFNUMjFORkNBX0VWVF9XVFhfUkVRVUVTVDoKKwkJbW9kX3RpbWVyKCZpbmZvLT5zZV9pbmZvLmJ3aV90aW1lciwgamlmZmllcyArCisJCQkJbXNlY3NfdG9famlmZmllcyhpbmZvLT5zZV9pbmZvLnd0X3RpbWVvdXQpKTsKKwkJYnJlYWs7CisJfQorCitleGl0OgorCWtmcmVlX3NrYihza2IpOworCXJldHVybiByOworfQorRVhQT1JUX1NZTUJPTChzdDIxbmZjYV9hcGR1X3JlYWRlcl9ldmVudF9yZWNlaXZlZCk7CisKK3ZvaWQgc3QyMW5mY2Ffc2VfaW5pdChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYpCit7CisJc3RydWN0IHN0MjFuZmNhX2hjaV9pbmZvICppbmZvID0gbmZjX2hjaV9nZXRfY2xpZW50ZGF0YShoZGV2KTsKKworCWluaXRfY29tcGxldGlvbigmaW5mby0+c2VfaW5mby5yZXFfY29tcGxldGlvbik7CisJLyogaW5pdGlhbGl6ZSB0aW1lcnMgKi8KKwlpbml0X3RpbWVyKCZpbmZvLT5zZV9pbmZvLmJ3aV90aW1lcik7CisJaW5mby0+c2VfaW5mby5id2lfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWluZm87CisJaW5mby0+c2VfaW5mby5id2lfdGltZXIuZnVuY3Rpb24gPSBzdDIxbmZjYV9zZV93dF90aW1lb3V0OworCWluZm8tPnNlX2luZm8uYndpX2FjdGl2ZSA9IGZhbHNlOworCisJaW5pdF90aW1lcigmaW5mby0+c2VfaW5mby5zZV9hY3RpdmVfdGltZXIpOworCWluZm8tPnNlX2luZm8uc2VfYWN0aXZlX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylpbmZvOworCWluZm8tPnNlX2luZm8uc2VfYWN0aXZlX3RpbWVyLmZ1bmN0aW9uID0gc3QyMW5mY2Ffc2VfYWN0aXZhdGlvbl90aW1lb3V0OworCWluZm8tPnNlX2luZm8uc2VfYWN0aXZlID0gZmFsc2U7CisKKwlpbmZvLT5zZV9pbmZvLmNvdW50X3BpcGVzID0gMDsKKwlpbmZvLT5zZV9pbmZvLmV4cGVjdGVkX3BpcGVzID0gMDsKKworCWluZm8tPnNlX2luZm8ueGNoX2Vycm9yID0gZmFsc2U7CisKKwlpbmZvLT5zZV9pbmZvLnd0X3RpbWVvdXQgPQorCQkJU1QyMU5GQ0FfQldJX1RPX1RJTUVPVVQoU1QyMU5GQ0FfQVRSX0RFRkFVTFRfQldJKTsKK30KK0VYUE9SVF9TWU1CT0woc3QyMW5mY2Ffc2VfaW5pdCk7CisKK3ZvaWQgc3QyMW5mY2Ffc2VfZGVpbml0KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldikKK3sKKwlzdHJ1Y3Qgc3QyMW5mY2FfaGNpX2luZm8gKmluZm8gPSBuZmNfaGNpX2dldF9jbGllbnRkYXRhKGhkZXYpOworCisJaWYgKGluZm8tPnNlX2luZm8uYndpX2FjdGl2ZSkKKwkJZGVsX3RpbWVyX3N5bmMoJmluZm8tPnNlX2luZm8uYndpX3RpbWVyKTsKKwlpZiAoaW5mby0+c2VfaW5mby5zZV9hY3RpdmUpCisJCWRlbF90aW1lcl9zeW5jKCZpbmZvLT5zZV9pbmZvLnNlX2FjdGl2ZV90aW1lcik7CisKKwlpbmZvLT5zZV9pbmZvLmJ3aV9hY3RpdmUgPSBmYWxzZTsKKwlpbmZvLT5zZV9pbmZvLnNlX2FjdGl2ZSA9IGZhbHNlOworfQorRVhQT1JUX1NZTUJPTChzdDIxbmZjYV9zZV9kZWluaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvc3QyMW5mY2Evc3QyMW5mY2Ffc2UuaCBiL2RyaXZlcnMvbmZjL3N0MjFuZmNhL3N0MjFuZmNhX3NlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3MmNmYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmZjL3N0MjFuZmNhL3N0MjFuZmNhX3NlLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCAgU1RNaWNyb2VsZWN0cm9uaWNzIFNBUy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgX19TVDIxTkZDQV9TRV9ICisjZGVmaW5lIF9fU1QyMU5GQ0FfU0VfSAorCisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisKKy8qCisgKiByZWYgSVNPNzgxNi0zIGNoYXAgOC4xLiB0aGUgaW5pdGlhbCBjaGFyYWN0ZXIgVFMgaXMgZm9sbG93ZWQgYnkgYQorICogc2VxdWVuY2Ugb2YgYXQgbW9zdCAzMiBjaGFyYWN0ZXJzLgorICovCisjZGVmaW5lIFNUMjFORkNBX0VTRV9NQVhfTEVOR1RICQkJMzMKKyNkZWZpbmUgU1QyMU5GQ0FfRVNFX0hPU1RfSUQJCQkweGMwCisKK3N0cnVjdCBzdDIxbmZjYV9zZV9pbmZvIHsKKwl1OCBhdHJbU1QyMU5GQ0FfRVNFX01BWF9MRU5HVEhdOworCXN0cnVjdCBjb21wbGV0aW9uIHJlcV9jb21wbGV0aW9uOworCisJc3RydWN0IHRpbWVyX2xpc3QgYndpX3RpbWVyOworCWludCB3dF90aW1lb3V0OyAvKiBpbiBtc2VjcyAqLworCWJvb2wgYndpX2FjdGl2ZTsKKworCXN0cnVjdCB0aW1lcl9saXN0IHNlX2FjdGl2ZV90aW1lcjsKKwlib29sIHNlX2FjdGl2ZTsKKwlpbnQgZXhwZWN0ZWRfcGlwZXM7CisJaW50IGNvdW50X3BpcGVzOworCisJYm9vbCB4Y2hfZXJyb3I7CisKKwlzZV9pb19jYl90IGNiOworCXZvaWQgKmNiX2NvbnRleHQ7Cit9OworCitpbnQgc3QyMW5mY2FfY29ubmVjdGl2aXR5X2V2ZW50X3JlY2VpdmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggaG9zdCwKKwkJCQkJdTggZXZlbnQsIHN0cnVjdCBza19idWZmICpza2IpOworaW50IHN0MjFuZmNhX2FwZHVfcmVhZGVyX2V2ZW50X3JlY2VpdmVkKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwKKwkJCQkJdTggZXZlbnQsIHN0cnVjdCBza19idWZmICpza2IpOworCitpbnQgc3QyMW5mY2FfaGNpX2Rpc2NvdmVyX3NlKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldik7CitpbnQgc3QyMW5mY2FfaGNpX2VuYWJsZV9zZShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHUzMiBzZV9pZHgpOworaW50IHN0MjFuZmNhX2hjaV9kaXNhYmxlX3NlKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTMyIHNlX2lkeCk7CitpbnQgc3QyMW5mY2FfaGNpX3NlX2lvKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTMyIHNlX2lkeCwKKwkJdTggKmFwZHUsIHNpemVfdCBhcGR1X2xlbmd0aCwKKwkJc2VfaW9fY2JfdCBjYiwgdm9pZCAqY2JfY29udGV4dCk7CisKK3ZvaWQgc3QyMW5mY2Ffc2VfaW5pdChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYpOwordm9pZCBzdDIxbmZjYV9zZV9kZWluaXQoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2KTsKKyNlbmRpZiAvKiBfX1NUMjFORkNBX1NFX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3N0MjFuZmNiL01ha2VmaWxlIGIvZHJpdmVycy9uZmMvc3QyMW5mY2IvTWFrZWZpbGUKaW5kZXggZjRkODM1ZC4uY2U2NTlhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvc3QyMW5mY2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZmMvc3QyMW5mY2IvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciBTVDIxTkZDQiBOQ0kgYmFzZWQgTkZDIGRyaXZlcgogIwogCi1zdDIxbmZjYl9uY2ktb2JqcyA9IG5kbGMubyBzdDIxbmZjYi5vCitzdDIxbmZjYl9uY2ktb2JqcyA9IG5kbGMubyBzdDIxbmZjYi5vIHN0MjFuZmNiX3NlLm8KIG9iai0kKENPTkZJR19ORkNfU1QyMU5GQ0IpICAgICArPSBzdDIxbmZjYl9uY2kubwogCiBzdDIxbmZjYl9pMmMtb2JqcyA9IGkyYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zdDIxbmZjYi9pMmMuYyBiL2RyaXZlcnMvbmZjL3N0MjFuZmNiL2kyYy5jCmluZGV4IDAxYmE4NjUuLmViODg2OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3N0MjFuZmNiL2kyYy5jCisrKyBiL2RyaXZlcnMvbmZjL3N0MjFuZmNiL2kyYy5jCkBAIC0xOTksNyArMTk5LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAlpbnQgcjsKIAotCWlmICghcGh5IHx8IGlycSAhPSBwaHktPmkyY19kZXYtPmlycSkgeworCWlmICghcGh5IHx8ICFwaHktPm5kbGMgfHwgaXJxICE9IHBoeS0+aTJjX2Rldi0+aXJxKSB7CiAJCVdBUk5fT05fT05DRSgxKTsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KQEAgLTM0MywxOCArMzQzLDIyIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCXIgPSBuZGxjX3Byb2JlKHBoeSwgJmkyY19waHlfb3BzLCAmY2xpZW50LT5kZXYsCisJCQlTVDIxTkZDQl9GUkFNRV9IRUFEUk9PTSwgU1QyMU5GQ0JfRlJBTUVfVEFJTFJPT00sCisJCQkmcGh5LT5uZGxjKTsKKwlpZiAociA8IDApIHsKKwkJbmZjX2VycigmY2xpZW50LT5kZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgbmRsYyBsYXllclxuIik7CisJCXJldHVybiByOworCX0KKwogCXIgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZjbGllbnQtPmRldiwgY2xpZW50LT5pcnEsIE5VTEwsCiAJCQkJc3QyMW5mY2JfbmNpX2lycV90aHJlYWRfZm4sCiAJCQkJcGh5LT5pcnFfcG9sYXJpdHkgfCBJUlFGX09ORVNIT1QsCiAJCQkJU1QyMU5GQ0JfTkNJX0RSSVZFUl9OQU1FLCBwaHkpOwotCWlmIChyIDwgMCkgeworCWlmIChyIDwgMCkKIAkJbmZjX2VycigmY2xpZW50LT5kZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgSVJRIGhhbmRsZXJcbiIpOwotCQlyZXR1cm4gcjsKLQl9CiAKLQlyZXR1cm4gbmRsY19wcm9iZShwaHksICZpMmNfcGh5X29wcywgJmNsaWVudC0+ZGV2LAotCQkJU1QyMU5GQ0JfRlJBTUVfSEVBRFJPT00sIFNUMjFORkNCX0ZSQU1FX1RBSUxST09NLAotCQkJJnBoeS0+bmRsYyk7CisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgc3QyMW5mY2JfbmNpX2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKQEAgLTM3Myw2ICszNzcsNyBAQAogCiAjaWZkZWYgQ09ORklHX09GCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9zdDIxbmZjYl9pMmNfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInN0LHN0MjFuZmNiLWkyYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzdCxzdDIxbmZjYl9pMmMiLCB9LAogCXt9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvc3QyMW5mY2IvbmRsYy5jIGIvZHJpdmVycy9uZmMvc3QyMW5mY2IvbmRsYy5jCmluZGV4IGJhYzUwZTguLjVmYmY1OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL3N0MjFuZmNiL25kbGMuYworKysgYi9kcml2ZXJzL25mYy9zdDIxbmZjYi9uZGxjLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCQlkZWZhdWx0OgogCQkJcHJfZXJyKCJVTktOT1dOIFBhY2tldCBDb250cm9sIEJ5dGU9JWRcbiIsIHBjYik7CiAJCQlrZnJlZV9za2Ioc2tiKTsKLQkJCWJyZWFrOworCQkJY29udGludWU7CiAJCX0KIAkJc2tiX3F1ZXVlX2hlYWQoJm5kbGMtPnNlbmRfcSwgc2tiKTsKIAl9CkBAIC0yOTcsNiArMjk3LDUgQEAKIAlza2JfcXVldWVfcHVyZ2UoJm5kbGMtPnNlbmRfcSk7CiAKIAlzdDIxbmZjYl9uY2lfcmVtb3ZlKG5kbGMtPm5kZXYpOwotCWtmcmVlKG5kbGMpOwogfQogRVhQT1JUX1NZTUJPTChuZGxjX3JlbW92ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9zdDIxbmZjYi9zdDIxbmZjYi5jIGIvZHJpdmVycy9uZmMvc3QyMW5mY2Ivc3QyMW5mY2IuYwppbmRleCBlYTYzZDU4Li5jYTk4NzFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9zdDIxbmZjYi9zdDIxbmZjYi5jCisrKyBiL2RyaXZlcnMvbmZjL3N0MjFuZmNiL3N0MjFuZmNiLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxuZXQvbmZjL25jaV9jb3JlLmg+CiAKICNpbmNsdWRlICJzdDIxbmZjYi5oIgorI2luY2x1ZGUgInN0MjFuZmNiX3NlLmgiCiAKICNkZWZpbmUgRFJJVkVSX0RFU0MgIk5DSSBORkMgZHJpdmVyIGZvciBTVDIxTkZDQiIKIApAQCAtNzgsNiArNzksMTMgQEAKIAkuY2xvc2UgPSBzdDIxbmZjYl9uY2lfY2xvc2UsCiAJLnNlbmQgPSBzdDIxbmZjYl9uY2lfc2VuZCwKIAkuZ2V0X3JmcHJvdG9jb2wgPSBzdDIxbmZjYl9uY2lfZ2V0X3JmcHJvdG9jb2wsCisJLmRpc2NvdmVyX3NlID0gc3QyMW5mY2JfbmNpX2Rpc2NvdmVyX3NlLAorCS5lbmFibGVfc2UgPSBzdDIxbmZjYl9uY2lfZW5hYmxlX3NlLAorCS5kaXNhYmxlX3NlID0gc3QyMW5mY2JfbmNpX2Rpc2FibGVfc2UsCisJLnNlX2lvID0gc3QyMW5mY2JfbmNpX3NlX2lvLAorCS5oY2lfbG9hZF9zZXNzaW9uID0gc3QyMW5mY2JfaGNpX2xvYWRfc2Vzc2lvbiwKKwkuaGNpX2V2ZW50X3JlY2VpdmVkID0gc3QyMW5mY2JfaGNpX2V2ZW50X3JlY2VpdmVkLAorCS5oY2lfY21kX3JlY2VpdmVkID0gc3QyMW5mY2JfaGNpX2NtZF9yZWNlaXZlZCwKIH07CiAKIGludCBzdDIxbmZjYl9uY2lfcHJvYmUoc3RydWN0IGxsdF9uZGxjICpuZGxjLCBpbnQgcGh5X2hlYWRyb29tLApAQCAtMTE0LDkgKzEyMiwxMCBAQAogCWlmIChyKSB7CiAJCXByX2VycigiQ2Fubm90IHJlZ2lzdGVyIG5mYyBkZXZpY2UgdG8gbmNpIGNvcmVcbiIpOwogCQluY2lfZnJlZV9kZXZpY2UobmRsYy0+bmRldik7CisJCXJldHVybiByOwogCX0KIAotCXJldHVybiByOworCXJldHVybiBzdDIxbmZjYl9zZV9pbml0KG5kbGMtPm5kZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3QyMW5mY2JfbmNpX3Byb2JlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvc3QyMW5mY2Ivc3QyMW5mY2IuaCBiL2RyaXZlcnMvbmZjL3N0MjFuZmNiL3N0MjFuZmNiLmgKaW5kZXggZWE1OGE1Ni4uNWVmOGE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZmMvc3QyMW5mY2Ivc3QyMW5mY2IuaAorKysgYi9kcml2ZXJzL25mYy9zdDIxbmZjYi9zdDIxbmZjYi5oCkBAIC0xOSw2ICsxOSw3IEBACiAjaWZuZGVmIF9fTE9DQUxfU1QyMU5GQ0JfSF8KICNkZWZpbmUgX19MT0NBTF9TVDIxTkZDQl9IXwogCisjaW5jbHVkZSAic3QyMW5mY2Jfc2UuaCIKICNpbmNsdWRlICJuZGxjLmgiCiAKIC8qIERlZmluZSBwcml2YXRlIGZsYWdzOiAqLwpAQCAtMjcsNiArMjgsNyBAQAogc3RydWN0IHN0MjFuZmNiX25jaV9pbmZvIHsKIAlzdHJ1Y3QgbGx0X25kbGMgKm5kbGM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3Qgc3QyMW5mY2Jfc2VfaW5mbyBzZV9pbmZvOwogfTsKIAogdm9pZCBzdDIxbmZjYl9uY2lfcmVtb3ZlKHN0cnVjdCBuY2lfZGV2ICpuZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL3N0MjFuZmNiL3N0MjFuZmNiX3NlLmMgYi9kcml2ZXJzL25mYy9zdDIxbmZjYi9zdDIxbmZjYl9zZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjODJlOWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25mYy9zdDIxbmZjYi9zdDIxbmZjYl9zZS5jCkBAIC0wLDAgKzEsNzA3IEBACisvKgorICogTkNJIGJhc2VkIERyaXZlciBmb3IgU1RNaWNyb2VsZWN0cm9uaWNzIE5GQyBDaGlwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0ICBTVE1pY3JvZWxlY3Ryb25pY3MgU0FTLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25mYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bmV0L25mYy9uY2kuaD4KKyNpbmNsdWRlIDxuZXQvbmZjL25jaV9jb3JlLmg+CisKKyNpbmNsdWRlICJzdDIxbmZjYi5oIgorI2luY2x1ZGUgInN0MjFuZmNiX3NlLmgiCisKK3N0cnVjdCBzdDIxbmZjYl9waXBlX2luZm8geworCXU4IHBpcGVfc3RhdGU7CisJdTggc3JjX2hvc3RfaWQ7CisJdTggc3JjX2dhdGVfaWQ7CisJdTggZHN0X2hvc3RfaWQ7CisJdTggZHN0X2dhdGVfaWQ7Cit9IF9fcGFja2VkOworCisvKiBIb3N0cyAqLworI2RlZmluZSBTVDIxTkZDQl9IT1NUX0NPTlRST0xMRVJfSUQgICAgIDB4MDAKKyNkZWZpbmUgU1QyMU5GQ0JfVEVSTUlOQUxfSE9TVF9JRCAgICAgICAweDAxCisjZGVmaW5lIFNUMjFORkNCX1VJQ0NfSE9TVF9JRCAgICAgICAgICAgMHgwMgorI2RlZmluZSBTVDIxTkZDQl9FU0VfSE9TVF9JRCAgICAgICAgICAgIDB4YzAKKworLyogR2F0ZXMgKi8KKyNkZWZpbmUgU1QyMU5GQ0JfREVWSUNFX01HTlRfR0FURSAgICAgICAweDAxCisjZGVmaW5lIFNUMjFORkNCX0FQRFVfUkVBREVSX0dBVEUgICAgICAgMHhmMAorI2RlZmluZSBTVDIxTkZDQl9DT05ORUNUSVZJVFlfR0FURSAgICAgIDB4NDEKKworLyogUGlwZXMgKi8KKyNkZWZpbmUgU1QyMU5GQ0JfREVWSUNFX01HTlRfUElQRSAgICAgICAgICAgICAgIDB4MDIKKworLyogQ29ubmVjdGl2aXR5IHBpcGUgb25seSAqLworI2RlZmluZSBTVDIxTkZDQl9TRV9DT1VOVF9QSVBFX1VJQ0MgICAgICAgICAgICAgMHgwMQorLyogQ29ubmVjdGl2aXR5ICsgQVBEVSBSZWFkZXIgcGlwZSAqLworI2RlZmluZSBTVDIxTkZDQl9TRV9DT1VOVF9QSVBFX0VNQkVEREVEICAgICAgICAgMHgwMgorCisjZGVmaW5lIFNUMjFORkNCX1NFX1RPX0hPVF9QTFVHCQkJMTAwMCAvKiBtc2VjcyAqLworI2RlZmluZSBTVDIxTkZDQl9TRV9UT19QSVBFUwkJCTIwMDAKKworI2RlZmluZSBTVDIxTkZDQl9FVlRfSE9UX1BMVUdfSVNfSU5ISUJJVEVEKHgpICAgKHgtPmRhdGFbMF0gJiAweDgwKQorCisjZGVmaW5lIE5DSV9IQ0lfQVBEVV9QQVJBTV9BVFIgICAgICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIE5DSV9IQ0lfQURNSU5fUEFSQU1fU0VTU0lPTl9JREVOVElUWSAgICAgICAweDAxCisjZGVmaW5lIE5DSV9IQ0lfQURNSU5fUEFSQU1fV0hJVEVMSVNUICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIE5DSV9IQ0lfQURNSU5fUEFSQU1fSE9TVF9MSVNUICAgICAgICAgICAgICAweDA0CisKKyNkZWZpbmUgU1QyMU5GQ0JfRVZUX1NFX0hBUkRfUkVTRVQJCTB4MjAKKyNkZWZpbmUgU1QyMU5GQ0JfRVZUX1RSQU5TTUlUX0RBVEEJCTB4MTAKKyNkZWZpbmUgU1QyMU5GQ0JfRVZUX1dUWF9SRVFVRVNUCQkweDExCisjZGVmaW5lIFNUMjFORkNCX0VWVF9TRV9TT0ZUX1JFU0VUCQkweDExCisjZGVmaW5lIFNUMjFORkNCX0VWVF9TRV9FTkRfT0ZfQVBEVV9UUkFOU0ZFUgkweDIxCisjZGVmaW5lIFNUMjFORkNCX0VWVF9IT1RfUExVRwkJCTB4MDMKKworI2RlZmluZSBTVDIxTkZDQl9TRV9NT0RFX09GRiAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBTVDIxTkZDQl9TRV9NT0RFX09OICAgICAgICAgICAgICAgICAgICAgMHgwMQorCisjZGVmaW5lIFNUMjFORkNCX0VWVF9DT05ORUNUSVZJVFkgICAgICAgMHgxMAorI2RlZmluZSBTVDIxTkZDQl9FVlRfVFJBTlNBQ1RJT04gICAgICAgIDB4MTIKKworI2RlZmluZSBTVDIxTkZDQl9ETV9HRVRJTkZPICAgICAgICAgICAgIDB4MTMKKyNkZWZpbmUgU1QyMU5GQ0JfRE1fR0VUSU5GT19QSVBFX0xJU1QgICAweDAyCisjZGVmaW5lIFNUMjFORkNCX0RNX0dFVElORk9fUElQRV9JTkZPICAgMHgwMQorI2RlZmluZSBTVDIxTkZDQl9ETV9QSVBFX0NSRUFURUQgICAgICAgIDB4MDIKKyNkZWZpbmUgU1QyMU5GQ0JfRE1fUElQRV9PUEVOICAgICAgICAgICAweDA0CisjZGVmaW5lIFNUMjFORkNCX0RNX1JGX0FDVElWRSAgICAgICAgICAgMHg4MAorI2RlZmluZSBTVDIxTkZDQl9ETV9ESVNDT05ORUNUICAgICAgICAgIDB4MzAKKworI2RlZmluZSBTVDIxTkZDQl9ETV9JU19QSVBFX09QRU4ocCkgXAorCSgocCAmIDB4MGYpID09IChTVDIxTkZDQl9ETV9QSVBFX0NSRUFURUQgfCBTVDIxTkZDQl9ETV9QSVBFX09QRU4pKQorCisjZGVmaW5lIFNUMjFORkNCX0FUUl9ERUZBVUxUX0JXSSAgICAgICAgMHgwNAorCisvKgorICogV1QgPSAyXkJXSS8xMFtzXSwgY29udmVydCBpbnRvIG1zZWNzIGFuZCBhZGQgYSBzZWN1cmUKKyAqIHJvb20gYnkgaW5jcmVhc2luZyBieSAyIHRoaXMgdGltZW91dAorICovCisjZGVmaW5lIFNUMjFORkNCX0JXSV9UT19USU1FT1VUKHgpICAgICAgKCgxIDw8IHgpICogMjAwKQorI2RlZmluZSBTVDIxTkZDQl9BVFJfR0VUX1lfRlJPTV9URCh4KSAgICh4ID4+IDQpCisKKy8qIElmIFRBIGlzIHByZXNlbnQgYml0IDAgaXMgc2V0ICovCisjZGVmaW5lIFNUMjFORkNCX0FUUl9UQV9QUkVTRU5UKHgpICh4ICYgMHgwMSkKKy8qIElmIFRCIGlzIHByZXNlbnQgYml0IDEgaXMgc2V0ICovCisjZGVmaW5lIFNUMjFORkNCX0FUUl9UQl9QUkVTRU5UKHgpICh4ICYgMHgwMikKKworI2RlZmluZSBTVDIxTkZDQl9OVU1fREVWSUNFUyAgICAgICAgICAgMjU2CisKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChkZXZfbWFzaywgU1QyMU5GQ0JfTlVNX0RFVklDRVMpOworCisvKiBIZXJlIGFyZSB0aGUgbWFuZGF0b3J5IHBpcGUgZm9yIHN0MjFuZmNiICovCitzdGF0aWMgc3RydWN0IG5jaV9oY2lfZ2F0ZSBzdDIxbmZjYl9nYXRlc1tdID0geworCXtOQ0lfSENJX0FETUlOX0dBVEUsIE5DSV9IQ0lfQURNSU5fUElQRSwKKwkJCQkJU1QyMU5GQ0JfSE9TVF9DT05UUk9MTEVSX0lEfSwKKwl7TkNJX0hDSV9MSU5LX01HTVRfR0FURSwgTkNJX0hDSV9MSU5LX01HTVRfUElQRSwKKwkJCQkJU1QyMU5GQ0JfSE9TVF9DT05UUk9MTEVSX0lEfSwKKwl7U1QyMU5GQ0JfREVWSUNFX01HTlRfR0FURSwgU1QyMU5GQ0JfREVWSUNFX01HTlRfUElQRSwKKwkJCQkJU1QyMU5GQ0JfSE9TVF9DT05UUk9MTEVSX0lEfSwKKworCS8qIFNlY3VyZSBlbGVtZW50IHBpcGVzIGFyZSBjcmVhdGVkIGJ5IHNlY3VyZSBlbGVtZW50IGhvc3QgKi8KKwl7U1QyMU5GQ0JfQ09OTkVDVElWSVRZX0dBVEUsIE5DSV9IQ0lfRE9fTk9UX09QRU5fUElQRSwKKwkJCQkJU1QyMU5GQ0JfSE9TVF9DT05UUk9MTEVSX0lEfSwKKwl7U1QyMU5GQ0JfQVBEVV9SRUFERVJfR0FURSwgTkNJX0hDSV9ET19OT1RfT1BFTl9QSVBFLAorCQkJCQlTVDIxTkZDQl9IT1NUX0NPTlRST0xMRVJfSUR9LAorfTsKKworc3RhdGljIHU4IHN0MjFuZmNiX3NlX2dldF9id2koc3RydWN0IG5jaV9kZXYgKm5kZXYpCit7CisJaW50IGk7CisJdTggdGQ7CisJc3RydWN0IHN0MjFuZmNiX25jaV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpOworCisJLyogQml0cyA4IHRvIDUgb2YgdGhlIGZpcnN0IFRCIGZvciBUPTEgZW5jb2RlIEJXSSBmcm9tIHplcm8gdG8gbmluZSAqLworCWZvciAoaSA9IDE7IGkgPCBTVDIxTkZDQl9FU0VfTUFYX0xFTkdUSDsgaSsrKSB7CisJCXRkID0gU1QyMU5GQ0JfQVRSX0dFVF9ZX0ZST01fVEQoaW5mby0+c2VfaW5mby5hdHJbaV0pOworCQlpZiAoU1QyMU5GQ0JfQVRSX1RBX1BSRVNFTlQodGQpKQorCQkJaSsrOworCQlpZiAoU1QyMU5GQ0JfQVRSX1RCX1BSRVNFTlQodGQpKSB7CisJCQlpKys7CisJCQlyZXR1cm4gaW5mby0+c2VfaW5mby5hdHJbaV0gPj4gNDsKKwkJfQorCX0KKwlyZXR1cm4gU1QyMU5GQ0JfQVRSX0RFRkFVTFRfQldJOworfQorCitzdGF0aWMgdm9pZCBzdDIxbmZjYl9zZV9nZXRfYXRyKHN0cnVjdCBuY2lfZGV2ICpuZGV2KQoreworCXN0cnVjdCBzdDIxbmZjYl9uY2lfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTsKKwlpbnQgcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJciA9IG5jaV9oY2lfZ2V0X3BhcmFtKG5kZXYsIFNUMjFORkNCX0FQRFVfUkVBREVSX0dBVEUsCisJCQkJTkNJX0hDSV9BUERVX1BBUkFNX0FUUiwgJnNrYik7CisJaWYgKHIgPCAwKQorCQlyZXR1cm47CisKKwlpZiAoc2tiLT5sZW4gPD0gU1QyMU5GQ0JfRVNFX01BWF9MRU5HVEgpIHsKKwkJbWVtY3B5KGluZm8tPnNlX2luZm8uYXRyLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCQlpbmZvLT5zZV9pbmZvLnd0X3RpbWVvdXQgPQorCQkJU1QyMU5GQ0JfQldJX1RPX1RJTUVPVVQoc3QyMW5mY2Jfc2VfZ2V0X2J3aShuZGV2KSk7CisJfQorCWtmcmVlX3NrYihza2IpOworfQorCitpbnQgc3QyMW5mY2JfaGNpX2xvYWRfc2Vzc2lvbihzdHJ1Y3QgbmNpX2RldiAqbmRldikKK3sKKwlpbnQgaSwgaiwgcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3BpcGVfbGlzdCwgKnNrYl9waXBlX2luZm87CisJc3RydWN0IHN0MjFuZmNiX3BpcGVfaW5mbyAqZG1fcGlwZV9pbmZvOworCXU4IHBpcGVfbGlzdFtdID0geyBTVDIxTkZDQl9ETV9HRVRJTkZPX1BJUEVfTElTVCwKKwkJCVNUMjFORkNCX1RFUk1JTkFMX0hPU1RfSUR9OworCXU4IHBpcGVfaW5mb1tdID0geyBTVDIxTkZDQl9ETV9HRVRJTkZPX1BJUEVfSU5GTywKKwkJCVNUMjFORkNCX1RFUk1JTkFMX0hPU1RfSUQsIDB9OworCisJLyogT24gU1QyMU5GQ0IgZGV2aWNlIHBpcGVzIG51bWJlciBhcmUgZHluYW1pY3MKKwkgKiBJZiBwaXBlcyBhcmUgYWxyZWFkeSBjcmVhdGVkLCBoY2lfZGV2X3VwIHdpbGwgZmFpbC4KKwkgKiBEb2luZyBhIGNsZWFyIGFsbCBwaXBlIGlzIGEgYmFkIGlkZWEgYmVjYXVzZToKKwkgKiAtIEl0IGRvZXMgdXNlbGVzcyBFRVBST00gY3ljbGluZworCSAqIC0gSXQgbWlnaHQgY2F1c2UgaXNzdWUgZm9yIHNlY3VyZSBlbGVtZW50cyBzdXBwb3J0CisJICogKHN1Y2ggYXMgcmVtb3ZpbmcgY29ubmVjdGl2aXR5IG9yIEFQRFUgcmVhZGVyIHBpcGUpCisJICogQSBiZXR0ZXIgYXBwcm9hY2ggb24gU1QyMU5GQ0IgaXMgdG86CisJICogLSBnZXQgYSBwaXBlIGxpc3QgZm9yIGVhY2ggaG9zdC4KKwkgKiAoZWc6IFNUMjFORkNCX0hPU1RfQ09OVFJPTExFUl9JRCBmb3Igbm93KS4KKwkgKiAoVE9ETyBMYXRlciBvbiBVSUNDIEhPU1QgYW5kIGVTRSBIT1NUKQorCSAqIC0gZ2V0IHBpcGUgaW5mb3JtYXRpb24KKwkgKiAtIG1hdGNoIHJldHJpZXZlZCBwaXBlIGxpc3QgaW4gc3QyMW5mY2JfZ2F0ZXMKKwkgKiBTVDIxTkZDQl9ERVZJQ0VfTUdOVF9HQVRFIGlzIGEgcHJvcHJpZXRhcnkgZ2F0ZQorCSAqIHdpdGggU1QyMU5GQ0JfREVWSUNFX01HTlRfUElQRS4KKwkgKiBQaXBlIGNhbiBiZSBjbG9zZWQgYW5kIG5lZWQgdG8gYmUgb3Blbi4KKwkgKi8KKwlyID0gbmNpX2hjaV9jb25uZWN0X2dhdGUobmRldiwgU1QyMU5GQ0JfSE9TVF9DT05UUk9MTEVSX0lELAorCQkJCVNUMjFORkNCX0RFVklDRV9NR05UX0dBVEUsCisJCQkJU1QyMU5GQ0JfREVWSUNFX01HTlRfUElQRSk7CisJaWYgKHIgPCAwKQorCQlnb3RvIGZyZWVfaW5mbzsKKworCS8qIEdldCBwaXBlIGxpc3QgKi8KKwlyID0gbmNpX2hjaV9zZW5kX2NtZChuZGV2LCBTVDIxTkZDQl9ERVZJQ0VfTUdOVF9HQVRFLAorCQkJU1QyMU5GQ0JfRE1fR0VUSU5GTywgcGlwZV9saXN0LCBzaXplb2YocGlwZV9saXN0KSwKKwkJCSZza2JfcGlwZV9saXN0KTsKKwlpZiAociA8IDApCisJCWdvdG8gZnJlZV9pbmZvOworCisJLyogQ29tcGxldGUgdGhlIGV4aXN0aW5nIGdhdGVfcGlwZSB0YWJsZSAqLworCWZvciAoaSA9IDA7IGkgPCBza2JfcGlwZV9saXN0LT5sZW47IGkrKykgeworCQlwaXBlX2luZm9bMl0gPSBza2JfcGlwZV9saXN0LT5kYXRhW2ldOworCQlyID0gbmNpX2hjaV9zZW5kX2NtZChuZGV2LCBTVDIxTkZDQl9ERVZJQ0VfTUdOVF9HQVRFLAorCQkJCQlTVDIxTkZDQl9ETV9HRVRJTkZPLCBwaXBlX2luZm8sCisJCQkJCXNpemVvZihwaXBlX2luZm8pLCAmc2tiX3BpcGVfaW5mbyk7CisKKwkJaWYgKHIpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBNYXRjaCBwaXBlIElEIGFuZCBnYXRlIElECisJCSAqIE91dHB1dCBmb3JtYXQgZnJvbSBTVDIxTkZDX0RNX0dFVElORk8gaXM6CisJCSAqIC0gcGlwZSBzdGF0ZSAoMWJ5dGUpCisJCSAqIC0gc291cmNlIGhpZCAoMWJ5dGUpCisJCSAqIC0gc291cmNlIGdpZCAoMWJ5dGUpCisJCSAqIC0gZGVzdGluYXRpb24gaGlkICgxYnl0ZSkKKwkJICogLSBkZXN0aW5hdGlvbiBnaWQgKDFieXRlKQorCQkgKi8KKwkJZG1fcGlwZV9pbmZvID0gKHN0cnVjdCBzdDIxbmZjYl9waXBlX2luZm8gKilza2JfcGlwZV9pbmZvLT5kYXRhOworCQlpZiAoZG1fcGlwZV9pbmZvLT5kc3RfZ2F0ZV9pZCA9PSBTVDIxTkZDQl9BUERVX1JFQURFUl9HQVRFICYmCisJCSAgICBkbV9waXBlX2luZm8tPnNyY19ob3N0X2lkICE9IFNUMjFORkNCX0VTRV9IT1NUX0lEKSB7CisJCQlwcl9lcnIoIlVuZXhwZWN0ZWQgYXBkdV9yZWFkZXIgcGlwZSBvbiBob3N0ICV4XG4iLAorCQkJICAgICAgIGRtX3BpcGVfaW5mby0+c3JjX2hvc3RfaWQpOworCQkJY29udGludWU7CisJCX0KKworCQlmb3IgKGogPSAwOyAoaiA8IEFSUkFZX1NJWkUoc3QyMW5mY2JfZ2F0ZXMpKSAmJgorCQkgICAgIChzdDIxbmZjYl9nYXRlc1tqXS5nYXRlICE9IGRtX3BpcGVfaW5mby0+ZHN0X2dhdGVfaWQpOyBqKyspCisJCQk7CisKKwkJaWYgKGogPCBBUlJBWV9TSVpFKHN0MjFuZmNiX2dhdGVzKSAmJgorCQkgICAgc3QyMW5mY2JfZ2F0ZXNbal0uZ2F0ZSA9PSBkbV9waXBlX2luZm8tPmRzdF9nYXRlX2lkICYmCisJCSAgICBTVDIxTkZDQl9ETV9JU19QSVBFX09QRU4oZG1fcGlwZV9pbmZvLT5waXBlX3N0YXRlKSkgeworCQkJc3QyMW5mY2JfZ2F0ZXNbal0ucGlwZSA9IHBpcGVfaW5mb1syXTsKKworCQkJbmRldi0+aGNpX2Rldi0+Z2F0ZTJwaXBlW3N0MjFuZmNiX2dhdGVzW2pdLmdhdGVdID0KKwkJCQkJCXN0MjFuZmNiX2dhdGVzW2pdLnBpcGU7CisJCQluZGV2LT5oY2lfZGV2LT5waXBlc1tzdDIxbmZjYl9nYXRlc1tqXS5waXBlXS5nYXRlID0KKwkJCQkJCXN0MjFuZmNiX2dhdGVzW2pdLmdhdGU7CisJCQluZGV2LT5oY2lfZGV2LT5waXBlc1tzdDIxbmZjYl9nYXRlc1tqXS5waXBlXS5ob3N0ID0KKwkJCQkJCWRtX3BpcGVfaW5mby0+c3JjX2hvc3RfaWQ7CisJCX0KKwl9CisKKwltZW1jcHkobmRldi0+aGNpX2Rldi0+aW5pdF9kYXRhLmdhdGVzLCBzdDIxbmZjYl9nYXRlcywKKwkgICAgICAgc2l6ZW9mKHN0MjFuZmNiX2dhdGVzKSk7CisKK2ZyZWVfaW5mbzoKKwlrZnJlZV9za2Ioc2tiX3BpcGVfaW5mbyk7CisJa2ZyZWVfc2tiKHNrYl9waXBlX2xpc3QpOworCXJldHVybiByOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3QyMW5mY2JfaGNpX2xvYWRfc2Vzc2lvbik7CisKK3N0YXRpYyB2b2lkIHN0MjFuZmNiX2hjaV9hZG1pbl9ldmVudF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKKwkJCQkJICAgICAgdTggZXZlbnQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHN0MjFuZmNiX25jaV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgU1QyMU5GQ0JfRVZUX0hPVF9QTFVHOgorCQlpZiAoaW5mby0+c2VfaW5mby5zZV9hY3RpdmUpIHsKKwkJCWlmICghU1QyMU5GQ0JfRVZUX0hPVF9QTFVHX0lTX0lOSElCSVRFRChza2IpKSB7CisJCQkJZGVsX3RpbWVyX3N5bmMoJmluZm8tPnNlX2luZm8uc2VfYWN0aXZlX3RpbWVyKTsKKwkJCQlpbmZvLT5zZV9pbmZvLnNlX2FjdGl2ZSA9IGZhbHNlOworCQkJCWNvbXBsZXRlKCZpbmZvLT5zZV9pbmZvLnJlcV9jb21wbGV0aW9uKTsKKwkJCX0gZWxzZSB7CisJCQkJbW9kX3RpbWVyKCZpbmZvLT5zZV9pbmZvLnNlX2FjdGl2ZV90aW1lciwKKwkJCQkgICAgICBqaWZmaWVzICsKKwkJCQkgICAgICBtc2Vjc190b19qaWZmaWVzKFNUMjFORkNCX1NFX1RPX1BJUEVTKSk7CisJCQl9CisJCX0KKwlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3QyMW5mY2JfaGNpX2FwZHVfcmVhZGVyX2V2ZW50X3JlY2VpdmVkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAorCQkJCQkJICAgdTggZXZlbnQsCisJCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCByID0gMDsKKwlzdHJ1Y3Qgc3QyMW5mY2JfbmNpX2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7CisKKwlwcl9kZWJ1ZygiYXBkdSByZWFkZXIgZ2F0ZSBldmVudDogJXhcbiIsIGV2ZW50KTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNUMjFORkNCX0VWVF9UUkFOU01JVF9EQVRBOgorCQlkZWxfdGltZXJfc3luYygmaW5mby0+c2VfaW5mby5id2lfdGltZXIpOworCQlpbmZvLT5zZV9pbmZvLmJ3aV9hY3RpdmUgPSBmYWxzZTsKKwkJaW5mby0+c2VfaW5mby5jYihpbmZvLT5zZV9pbmZvLmNiX2NvbnRleHQsCisJCQkJIHNrYi0+ZGF0YSwgc2tiLT5sZW4sIDApOworCWJyZWFrOworCWNhc2UgU1QyMU5GQ0JfRVZUX1dUWF9SRVFVRVNUOgorCQltb2RfdGltZXIoJmluZm8tPnNlX2luZm8uYndpX3RpbWVyLCBqaWZmaWVzICsKKwkJCSAgbXNlY3NfdG9famlmZmllcyhpbmZvLT5zZV9pbmZvLnd0X3RpbWVvdXQpKTsKKwlicmVhazsKKwl9CisKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gcjsKK30KKworLyoKKyAqIFJldHVybnM6CisgKiA8PSAwOiBkcml2ZXIgaGFuZGxlZCB0aGUgZXZlbnQsIHNrYiBjb25zdW1lZAorICogICAgMTogZHJpdmVyIGRvZXMgbm90IGhhbmRsZSB0aGUgZXZlbnQsIHBsZWFzZSBkbyBzdGFuZGFyZCBwcm9jZXNzaW5nCisgKi8KK3N0YXRpYyBpbnQgc3QyMW5mY2JfaGNpX2Nvbm5lY3Rpdml0eV9ldmVudF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKKwkJCQkJCXU4IGhvc3QsIHU4IGV2ZW50LAorCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgciA9IDA7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJm5kZXYtPm5mY19kZXYtPmRldjsKKwlzdHJ1Y3QgbmZjX2V2dF90cmFuc2FjdGlvbiAqdHJhbnNhY3Rpb247CisKKwlwcl9kZWJ1ZygiY29ubmVjdGl2aXR5IGdhdGUgZXZlbnQ6ICV4XG4iLCBldmVudCk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTVDIxTkZDQl9FVlRfQ09OTkVDVElWSVRZOgorCisJYnJlYWs7CisJY2FzZSBTVDIxTkZDQl9FVlRfVFJBTlNBQ1RJT046CisJCWlmIChza2ItPmxlbiA8IE5GQ19NSU5fQUlEX0xFTkdUSCArIDIgJiYKKwkJICAgIHNrYi0+ZGF0YVswXSAhPSBORkNfRVZUX1RSQU5TQUNUSU9OX0FJRF9UQUcpCisJCQlyZXR1cm4gLUVQUk9UTzsKKworCQl0cmFuc2FjdGlvbiA9IChzdHJ1Y3QgbmZjX2V2dF90cmFuc2FjdGlvbiAqKWRldm1fa3phbGxvYyhkZXYsCisJCQkJCSAgICBza2ItPmxlbiAtIDIsIEdGUF9LRVJORUwpOworCisJCXRyYW5zYWN0aW9uLT5haWRfbGVuID0gc2tiLT5kYXRhWzFdOworCQltZW1jcHkodHJhbnNhY3Rpb24tPmFpZCwgJnNrYi0+ZGF0YVsyXSwgc2tiLT5kYXRhWzFdKTsKKworCQlpZiAoc2tiLT5kYXRhW3RyYW5zYWN0aW9uLT5haWRfbGVuICsgMl0gIT0KKwkJICAgIE5GQ19FVlRfVFJBTlNBQ1RJT05fUEFSQU1TX1RBRykKKwkJCXJldHVybiAtRVBST1RPOworCisJCXRyYW5zYWN0aW9uLT5wYXJhbXNfbGVuID0gc2tiLT5kYXRhW3RyYW5zYWN0aW9uLT5haWRfbGVuICsgM107CisJCW1lbWNweSh0cmFuc2FjdGlvbi0+cGFyYW1zLCBza2ItPmRhdGEgKworCQkgICAgICAgdHJhbnNhY3Rpb24tPmFpZF9sZW4gKyA0LCB0cmFuc2FjdGlvbi0+cGFyYW1zX2xlbik7CisKKwkJciA9IG5mY19zZV90cmFuc2FjdGlvbihuZGV2LT5uZmNfZGV2LCBob3N0LCB0cmFuc2FjdGlvbik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorCWtmcmVlX3NrYihza2IpOworCXJldHVybiByOworfQorCit2b2lkIHN0MjFuZmNiX2hjaV9ldmVudF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSwKKwkJCQkgdTggZXZlbnQsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJdTggZ2F0ZSA9IG5kZXYtPmhjaV9kZXYtPnBpcGVzW3BpcGVdLmdhdGU7CisJdTggaG9zdCA9IG5kZXYtPmhjaV9kZXYtPnBpcGVzW3BpcGVdLmhvc3Q7CisKKwlzd2l0Y2ggKGdhdGUpIHsKKwljYXNlIE5DSV9IQ0lfQURNSU5fR0FURToKKwkJc3QyMW5mY2JfaGNpX2FkbWluX2V2ZW50X3JlY2VpdmVkKG5kZXYsIGV2ZW50LCBza2IpOworCWJyZWFrOworCWNhc2UgU1QyMU5GQ0JfQVBEVV9SRUFERVJfR0FURToKKwkJc3QyMW5mY2JfaGNpX2FwZHVfcmVhZGVyX2V2ZW50X3JlY2VpdmVkKG5kZXYsIGV2ZW50LCBza2IpOworCWJyZWFrOworCWNhc2UgU1QyMU5GQ0JfQ09OTkVDVElWSVRZX0dBVEU6CisJCXN0MjFuZmNiX2hjaV9jb25uZWN0aXZpdHlfZXZlbnRfcmVjZWl2ZWQobmRldiwgaG9zdCwgZXZlbnQsCisJCQkJCQkJIHNrYik7CisJYnJlYWs7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoc3QyMW5mY2JfaGNpX2V2ZW50X3JlY2VpdmVkKTsKKworCit2b2lkIHN0MjFuZmNiX2hjaV9jbWRfcmVjZWl2ZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsIHU4IGNtZCwKKwkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBzdDIxbmZjYl9uY2lfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTsKKwl1OCBnYXRlID0gbmRldi0+aGNpX2Rldi0+cGlwZXNbcGlwZV0uZ2F0ZTsKKworCXByX2RlYnVnKCJjbWQ6ICV4XG4iLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE5DSV9IQ0lfQU5ZX09QRU5fUElQRToKKwkJaWYgKGdhdGUgIT0gU1QyMU5GQ0JfQVBEVV9SRUFERVJfR0FURSAmJgorCQkgICAgbmRldi0+aGNpX2Rldi0+cGlwZXNbcGlwZV0uaG9zdCAhPSBTVDIxTkZDQl9VSUNDX0hPU1RfSUQpCisJCQluZGV2LT5oY2lfZGV2LT5jb3VudF9waXBlcysrOworCisJCWlmIChuZGV2LT5oY2lfZGV2LT5jb3VudF9waXBlcyA9PQorCQkgICAgbmRldi0+aGNpX2Rldi0+ZXhwZWN0ZWRfcGlwZXMpIHsKKwkJCWRlbF90aW1lcl9zeW5jKCZpbmZvLT5zZV9pbmZvLnNlX2FjdGl2ZV90aW1lcik7CisJCQlpbmZvLT5zZV9pbmZvLnNlX2FjdGl2ZSA9IGZhbHNlOworCQkJbmRldi0+aGNpX2Rldi0+Y291bnRfcGlwZXMgPSAwOworCQkJY29tcGxldGUoJmluZm8tPnNlX2luZm8ucmVxX2NvbXBsZXRpb24pOworCQl9CisJYnJlYWs7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoc3QyMW5mY2JfaGNpX2NtZF9yZWNlaXZlZCk7CisKKy8qCisgKiBSZW1hcmtzOiBPbiBzb21lIGVhcmx5IHN0MjFuZmNiIGZpcm13YXJlLCBuY2lfbmZjZWVfbW9kZV9zZXQoMCkKKyAqIGlzIHJlamVjdGVkCisgKi8KK3N0YXRpYyBpbnQgc3QyMW5mY2JfbmNpX2NvbnRyb2xfc2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHNlX2lkeCwKKwkJCQkgICB1OCBzdGF0ZSkKK3sKKwlzdHJ1Y3Qgc3QyMW5mY2JfbmNpX2luZm8gKmluZm8gPSBuY2lfZ2V0X2RydmRhdGEobmRldik7CisJaW50IHI7CisJc3RydWN0IHNrX2J1ZmYgKnNrX2hvc3RfbGlzdDsKKwl1OCBob3N0X2lkOworCisJc3dpdGNoIChzZV9pZHgpIHsKKwljYXNlIFNUMjFORkNCX1VJQ0NfSE9TVF9JRDoKKwkJbmRldi0+aGNpX2Rldi0+Y291bnRfcGlwZXMgPSAwOworCQluZGV2LT5oY2lfZGV2LT5leHBlY3RlZF9waXBlcyA9IFNUMjFORkNCX1NFX0NPVU5UX1BJUEVfVUlDQzsKKwkJYnJlYWs7CisJY2FzZSBTVDIxTkZDQl9FU0VfSE9TVF9JRDoKKwkJbmRldi0+aGNpX2Rldi0+Y291bnRfcGlwZXMgPSAwOworCQluZGV2LT5oY2lfZGV2LT5leHBlY3RlZF9waXBlcyA9IFNUMjFORkNCX1NFX0NPVU5UX1BJUEVfRU1CRURERUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogV2FpdCBmb3IgYW4gRVZUX0hPVF9QTFVHIGluIG9yZGVyIHRvCisJICogcmV0cmlldmUgYSByZWxldmFudCBob3N0IGxpc3QuCisJICovCisJcmVpbml0X2NvbXBsZXRpb24oJmluZm8tPnNlX2luZm8ucmVxX2NvbXBsZXRpb24pOworCXIgPSBuY2lfbmZjZWVfbW9kZV9zZXQobmRldiwgc2VfaWR4LCBOQ0lfTkZDRUVfRU5BQkxFKTsKKwlpZiAociAhPSBOQ0lfU1RBVFVTX09LKQorCQlyZXR1cm4gcjsKKworCW1vZF90aW1lcigmaW5mby0+c2VfaW5mby5zZV9hY3RpdmVfdGltZXIsIGppZmZpZXMgKworCQltc2Vjc190b19qaWZmaWVzKFNUMjFORkNCX1NFX1RPX0hPVF9QTFVHKSk7CisJaW5mby0+c2VfaW5mby5zZV9hY3RpdmUgPSB0cnVlOworCisJLyogSWdub3JlIHJldHVybiB2YWx1ZSBhbmQgY2hlY2sgaW4gYW55IGNhc2UgdGhlIGhvc3RfbGlzdCAqLworCXdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmaW5mby0+c2VfaW5mby5yZXFfY29tcGxldGlvbik7CisKKwkvKiBUaGVyZSBtaWdodCBiZSBzb21lICJjb2xsaXNpb24iIGFmdGVyIHJlY2VpdmluZyBhIEhPVF9QTFVHIGV2ZW50CisJICogVGhpcyBtYXkgY2F1c2UgdGhlIENMRiB0byBub3QgYW5zd2VyIHRvIHRoZSBuZXh0IGhjaSBjb21tYW5kLgorCSAqIFRoZXJlIGlzIG5vIHBvc3NpYmxlIHN5bmNocm9uaXphdGlvbiB0byBwcmV2ZW50IHRoaXMuCisJICogQWRkaW5nIGEgc21hbGwgZGVsYXkgaXMgdGhlIG9ubHkgd2F5IHRvIHNvbHZlIHRoZSBpc3N1ZS4KKwkgKi8KKwl1c2xlZXBfcmFuZ2UoMzAwMCwgNTAwMCk7CisKKwlyID0gbmNpX2hjaV9nZXRfcGFyYW0obmRldiwgTkNJX0hDSV9BRE1JTl9HQVRFLAorCQkJTkNJX0hDSV9BRE1JTl9QQVJBTV9IT1NUX0xJU1QsICZza19ob3N0X2xpc3QpOworCWlmIChyICE9IE5DSV9IQ0lfQU5ZX09LKQorCQlyZXR1cm4gcjsKKworCWhvc3RfaWQgPSBza19ob3N0X2xpc3QtPmRhdGFbc2tfaG9zdF9saXN0LT5sZW4gLSAxXTsKKwlrZnJlZV9za2Ioc2tfaG9zdF9saXN0KTsKKwlpZiAoc3RhdGUgPT0gU1QyMU5GQ0JfU0VfTU9ERV9PTiAmJiBob3N0X2lkID09IHNlX2lkeCkKKwkJcmV0dXJuIHNlX2lkeDsKKwllbHNlIGlmIChzdGF0ZSA9PSBTVDIxTkZDQl9TRV9NT0RFX09GRiAmJiBob3N0X2lkICE9IHNlX2lkeCkKKwkJcmV0dXJuIHNlX2lkeDsKKworCXJldHVybiAtMTsKK30KKworaW50IHN0MjFuZmNiX25jaV9kaXNhYmxlX3NlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1MzIgc2VfaWR4KQoreworCWludCByOworCisJcHJfZGVidWcoInN0MjFuZmNiX25jaV9kaXNhYmxlX3NlXG4iKTsKKworCWlmIChzZV9pZHggPT0gTkZDX1NFX0VNQkVEREVEKSB7CisJCXIgPSBuY2lfaGNpX3NlbmRfZXZlbnQobmRldiwgU1QyMU5GQ0JfQVBEVV9SRUFERVJfR0FURSwKKwkJCQlTVDIxTkZDQl9FVlRfU0VfRU5EX09GX0FQRFVfVFJBTlNGRVIsIE5VTEwsIDApOworCQlpZiAociA8IDApCisJCQlyZXR1cm4gcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN0MjFuZmNiX25jaV9kaXNhYmxlX3NlKTsKKworaW50IHN0MjFuZmNiX25jaV9lbmFibGVfc2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHUzMiBzZV9pZHgpCit7CisJaW50IHI7CisKKwlwcl9kZWJ1Zygic3QyMW5mY2JfbmNpX2VuYWJsZV9zZVxuIik7CisKKwlpZiAoc2VfaWR4ID09IFNUMjFORkNCX0hDSV9IT1NUX0lEX0VTRSkgeworCQlyID0gbmNpX2hjaV9zZW5kX2V2ZW50KG5kZXYsIFNUMjFORkNCX0FQRFVfUkVBREVSX0dBVEUsCisJCQkJU1QyMU5GQ0JfRVZUX1NFX1NPRlRfUkVTRVQsIE5VTEwsIDApOworCQlpZiAociA8IDApCisJCQlyZXR1cm4gcjsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN0MjFuZmNiX25jaV9lbmFibGVfc2UpOworCitzdGF0aWMgaW50IHN0MjFuZmNiX2hjaV9uZXR3b3JrX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpCit7CisJc3RydWN0IGNvcmVfY29ubl9jcmVhdGVfZGVzdF9zcGVjX3BhcmFtcyAqZGVzdF9wYXJhbXM7CisJc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMgc3BlY19wYXJhbXM7CisJc3RydWN0IG5jaV9jb25uX2luZm8gICAgKmNvbm5faW5mbzsKKwlpbnQgciwgZGV2X251bTsKKworCWRlc3RfcGFyYW1zID0KKwkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGNvcmVfY29ubl9jcmVhdGVfZGVzdF9zcGVjX3BhcmFtcykgKworCQkJc2l6ZW9mKHN0cnVjdCBkZXN0X3NwZWNfcGFyYW1zKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRlc3RfcGFyYW1zID09IE5VTEwpIHsKKwkJciA9IC1FTk9NRU07CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXN0X3BhcmFtcy0+dHlwZSA9IE5DSV9ERVNUSU5BVElPTl9TUEVDSUZJQ19QQVJBTV9ORkNFRV9UWVBFOworCWRlc3RfcGFyYW1zLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMpOworCXNwZWNfcGFyYW1zLmlkID0gbmRldi0+aGNpX2Rldi0+bmZjZWVfaWQ7CisJc3BlY19wYXJhbXMucHJvdG9jb2wgPSBOQ0lfTkZDRUVfSU5URVJGQUNFX0hDSV9BQ0NFU1M7CisJbWVtY3B5KGRlc3RfcGFyYW1zLT52YWx1ZSwgJnNwZWNfcGFyYW1zLCBzaXplb2Yoc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMpKTsKKwlyID0gbmNpX2NvcmVfY29ubl9jcmVhdGUobmRldiwgTkNJX0RFU1RJTkFUSU9OX05GQ0VFLCAxLAorCQkJCSBzaXplb2Yoc3RydWN0IGNvcmVfY29ubl9jcmVhdGVfZGVzdF9zcGVjX3BhcmFtcykgKworCQkJCSBzaXplb2Yoc3RydWN0IGRlc3Rfc3BlY19wYXJhbXMpLAorCQkJCSBkZXN0X3BhcmFtcyk7CisJaWYgKHIgIT0gTkNJX1NUQVRVU19PSykKKwkJZ290byBmcmVlX2Rlc3RfcGFyYW1zOworCisJY29ubl9pbmZvID0gbmRldi0+aGNpX2Rldi0+Y29ubl9pbmZvOworCWlmICghY29ubl9pbmZvKQorCQlnb3RvIGZyZWVfZGVzdF9wYXJhbXM7CisKKwltZW1jcHkobmRldi0+aGNpX2Rldi0+aW5pdF9kYXRhLmdhdGVzLCBzdDIxbmZjYl9nYXRlcywKKwkgICAgICAgc2l6ZW9mKHN0MjFuZmNiX2dhdGVzKSk7CisKKwkvKgorCSAqIFNlc3Npb24gaWQgbXVzdCBpbmNsdWRlIHRoZSBkcml2ZXIgbmFtZSArIGkyYyBidXMgYWRkcgorCSAqIHBlcnNpc3RlbnQgaW5mbyB0byBkaXNjcmltaW5hdGUgMiBpZGVudGljYWwgY2hpcHMKKwkgKi8KKwlkZXZfbnVtID0gZmluZF9maXJzdF96ZXJvX2JpdChkZXZfbWFzaywgU1QyMU5GQ0JfTlVNX0RFVklDRVMpOworCWlmIChkZXZfbnVtID49IFNUMjFORkNCX05VTV9ERVZJQ0VTKSB7CisJCXIgPSAtRU5PREVWOworCQlnb3RvIGZyZWVfZGVzdF9wYXJhbXM7CisJfQorCisJc2NucHJpbnRmKG5kZXYtPmhjaV9kZXYtPmluaXRfZGF0YS5zZXNzaW9uX2lkLAorCQkgIHNpemVvZihuZGV2LT5oY2lfZGV2LT5pbml0X2RhdGEuc2Vzc2lvbl9pZCksCisJCSAgIiVzJTJ4IiwgIlNUMjFCSCIsIGRldl9udW0pOworCisJciA9IG5jaV9oY2lfZGV2X3Nlc3Npb25faW5pdChuZGV2KTsKKwlpZiAociAhPSBOQ0lfSENJX0FOWV9PSykKKwkJZ290byBleGl0OworCisJciA9IG5jaV9uZmNlZV9tb2RlX3NldChuZGV2LCBuZGV2LT5oY2lfZGV2LT5jb25uX2luZm8tPmlkLAorCQkJICAgICAgIE5DSV9ORkNFRV9FTkFCTEUpOworCWlmIChyICE9IE5DSV9TVEFUVVNfT0spCisJCWdvdG8gZXhpdDsKKworCXJldHVybiAwOworCitmcmVlX2Rlc3RfcGFyYW1zOgorCWtmcmVlKGRlc3RfcGFyYW1zKTsKKworZXhpdDoKKwlyZXR1cm4gcjsKK30KKworaW50IHN0MjFuZmNiX25jaV9kaXNjb3Zlcl9zZShzdHJ1Y3QgbmNpX2RldiAqbmRldikKK3sKKwl1OCBwYXJhbVsyXTsKKwlpbnQgcjsKKwlpbnQgc2VfY291bnQgPSAwOworCisJcHJfZGVidWcoInN0MjFuZmNiX25jaV9kaXNjb3Zlcl9zZVxuIik7CisKKwlyID0gc3QyMW5mY2JfaGNpX25ldHdvcmtfaW5pdChuZGV2KTsKKwlpZiAociAhPSAwKQorCQlyZXR1cm4gcjsKKworCXBhcmFtWzBdID0gU1QyMU5GQ0JfVUlDQ19IT1NUX0lEOworCXBhcmFtWzFdID0gU1QyMU5GQ0JfSENJX0hPU1RfSURfRVNFOworCXIgPSBuY2lfaGNpX3NldF9wYXJhbShuZGV2LCBOQ0lfSENJX0FETUlOX0dBVEUsCisJCQkJTkNJX0hDSV9BRE1JTl9QQVJBTV9XSElURUxJU1QsCisJCQkJcGFyYW0sIHNpemVvZihwYXJhbSkpOworCWlmIChyICE9IE5DSV9IQ0lfQU5ZX09LKQorCQlyZXR1cm4gcjsKKworCXIgPSBzdDIxbmZjYl9uY2lfY29udHJvbF9zZShuZGV2LCBTVDIxTkZDQl9VSUNDX0hPU1RfSUQsCisJCQkJU1QyMU5GQ0JfU0VfTU9ERV9PTik7CisJaWYgKHIgPT0gU1QyMU5GQ0JfVUlDQ19IT1NUX0lEKSB7CisJCW5mY19hZGRfc2UobmRldi0+bmZjX2RldiwgU1QyMU5GQ0JfVUlDQ19IT1NUX0lELCBORkNfU0VfVUlDQyk7CisJCXNlX2NvdW50Kys7CisJfQorCisJLyogVHJ5IHRvIGVuYWJsZSBlU0UgaW4gb3JkZXIgdG8gY2hlY2sgYXZhaWxhYmlsaXR5ICovCisJciA9IHN0MjFuZmNiX25jaV9jb250cm9sX3NlKG5kZXYsIFNUMjFORkNCX0hDSV9IT1NUX0lEX0VTRSwKKwkJCQlTVDIxTkZDQl9TRV9NT0RFX09OKTsKKwlpZiAociA9PSBTVDIxTkZDQl9IQ0lfSE9TVF9JRF9FU0UpIHsKKwkJbmZjX2FkZF9zZShuZGV2LT5uZmNfZGV2LCBTVDIxTkZDQl9IQ0lfSE9TVF9JRF9FU0UsCisJCQkgICBORkNfU0VfRU1CRURERUQpOworCQlzZV9jb3VudCsrOworCQlzdDIxbmZjYl9zZV9nZXRfYXRyKG5kZXYpOworCX0KKworCXJldHVybiAhc2VfY291bnQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzdDIxbmZjYl9uY2lfZGlzY292ZXJfc2UpOworCitpbnQgc3QyMW5mY2JfbmNpX3NlX2lvKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1MzIgc2VfaWR4LAorCQkgICAgICAgdTggKmFwZHUsIHNpemVfdCBhcGR1X2xlbmd0aCwKKwkJICAgICAgIHNlX2lvX2NiX3QgY2IsIHZvaWQgKmNiX2NvbnRleHQpCit7CisJc3RydWN0IHN0MjFuZmNiX25jaV9pbmZvICppbmZvID0gbmNpX2dldF9kcnZkYXRhKG5kZXYpOworCisJcHJfZGVidWcoIlxuIik7CisKKwlzd2l0Y2ggKHNlX2lkeCkgeworCWNhc2UgU1QyMU5GQ0JfSENJX0hPU1RfSURfRVNFOgorCQlpbmZvLT5zZV9pbmZvLmNiID0gY2I7CisJCWluZm8tPnNlX2luZm8uY2JfY29udGV4dCA9IGNiX2NvbnRleHQ7CisJCW1vZF90aW1lcigmaW5mby0+c2VfaW5mby5id2lfdGltZXIsIGppZmZpZXMgKworCQkJICBtc2Vjc190b19qaWZmaWVzKGluZm8tPnNlX2luZm8ud3RfdGltZW91dCkpOworCQlpbmZvLT5zZV9pbmZvLmJ3aV9hY3RpdmUgPSB0cnVlOworCQlyZXR1cm4gbmNpX2hjaV9zZW5kX2V2ZW50KG5kZXYsIFNUMjFORkNCX0FQRFVfUkVBREVSX0dBVEUsCisJCQkJCVNUMjFORkNCX0VWVF9UUkFOU01JVF9EQVRBLCBhcGR1LAorCQkJCQlhcGR1X2xlbmd0aCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorfQorRVhQT1JUX1NZTUJPTChzdDIxbmZjYl9uY2lfc2VfaW8pOworCitzdGF0aWMgdm9pZCBzdDIxbmZjYl9zZV93dF90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwkvKgorCSAqIE5vIGFuc3dlciBmcm9tIHRoZSBzZWN1cmUgZWxlbWVudAorCSAqIHdpdGhpbiB0aGUgZGVmaW5lZCB0aW1lb3V0LgorCSAqIExldCdzIHNlbmQgYSByZXNldCByZXF1ZXN0IGFzIHJlY292ZXJ5IHByb2NlZHVyZS4KKwkgKiBBY2NvcmRpbmcgdG8gdGhlIHNpdHVhdGlvbiwgd2UgZmlyc3QgdHJ5IHRvIHNlbmQgYSBzb2Z0d2FyZSByZXNldAorCSAqIHRvIHRoZSBzZWN1cmUgZWxlbWVudC4gSWYgdGhlIG5leHQgY29tbWFuZCBpcyBzdGlsbCBub3QKKwkgKiBhbnN3ZXJpbmcgaW4gdGltZSwgd2Ugc2VuZCB0byB0aGUgQ0xGIGEgc2VjdXJlIGVsZW1lbnQgaGFyZHdhcmUKKwkgKiByZXNldCByZXF1ZXN0LgorCSAqLworCS8qIGhhcmR3YXJlIHJlc2V0IG1hbmFnZWQgdGhyb3VnaCBWQ0NfVUlDQ19PVVQgcG93ZXIgc3VwcGx5ICovCisJdTggcGFyYW0gPSAweDAxOworCXN0cnVjdCBzdDIxbmZjYl9uY2lfaW5mbyAqaW5mbyA9IChzdHJ1Y3Qgc3QyMW5mY2JfbmNpX2luZm8gKikgZGF0YTsKKworCXByX2RlYnVnKCJcbiIpOworCisJaW5mby0+c2VfaW5mby5id2lfYWN0aXZlID0gZmFsc2U7CisKKwlpZiAoIWluZm8tPnNlX2luZm8ueGNoX2Vycm9yKSB7CisJCWluZm8tPnNlX2luZm8ueGNoX2Vycm9yID0gdHJ1ZTsKKwkJbmNpX2hjaV9zZW5kX2V2ZW50KGluZm8tPm5kbGMtPm5kZXYsIFNUMjFORkNCX0FQRFVfUkVBREVSX0dBVEUsCisJCQkJU1QyMU5GQ0JfRVZUX1NFX1NPRlRfUkVTRVQsIE5VTEwsIDApOworCX0gZWxzZSB7CisJCWluZm8tPnNlX2luZm8ueGNoX2Vycm9yID0gZmFsc2U7CisJCW5jaV9oY2lfc2VuZF9ldmVudChpbmZvLT5uZGxjLT5uZGV2LCBTVDIxTkZDQl9ERVZJQ0VfTUdOVF9HQVRFLAorCQkJCVNUMjFORkNCX0VWVF9TRV9IQVJEX1JFU0VULCAmcGFyYW0sIDEpOworCX0KKwlpbmZvLT5zZV9pbmZvLmNiKGluZm8tPnNlX2luZm8uY2JfY29udGV4dCwgTlVMTCwgMCwgLUVUSU1FKTsKK30KKworc3RhdGljIHZvaWQgc3QyMW5mY2Jfc2VfYWN0aXZhdGlvbl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3Qgc3QyMW5mY2JfbmNpX2luZm8gKmluZm8gPSAoc3RydWN0IHN0MjFuZmNiX25jaV9pbmZvICopIGRhdGE7CisKKwlwcl9kZWJ1ZygiXG4iKTsKKworCWluZm8tPnNlX2luZm8uc2VfYWN0aXZlID0gZmFsc2U7CisKKwljb21wbGV0ZSgmaW5mby0+c2VfaW5mby5yZXFfY29tcGxldGlvbik7Cit9CisKK2ludCBzdDIxbmZjYl9zZV9pbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KQoreworCXN0cnVjdCBzdDIxbmZjYl9uY2lfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTsKKworCWluaXRfY29tcGxldGlvbigmaW5mby0+c2VfaW5mby5yZXFfY29tcGxldGlvbik7CisJLyogaW5pdGlhbGl6ZSB0aW1lcnMgKi8KKwlpbml0X3RpbWVyKCZpbmZvLT5zZV9pbmZvLmJ3aV90aW1lcik7CisJaW5mby0+c2VfaW5mby5id2lfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWluZm87CisJaW5mby0+c2VfaW5mby5id2lfdGltZXIuZnVuY3Rpb24gPSBzdDIxbmZjYl9zZV93dF90aW1lb3V0OworCWluZm8tPnNlX2luZm8uYndpX2FjdGl2ZSA9IGZhbHNlOworCisJaW5pdF90aW1lcigmaW5mby0+c2VfaW5mby5zZV9hY3RpdmVfdGltZXIpOworCWluZm8tPnNlX2luZm8uc2VfYWN0aXZlX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylpbmZvOworCWluZm8tPnNlX2luZm8uc2VfYWN0aXZlX3RpbWVyLmZ1bmN0aW9uID0KKwkJCXN0MjFuZmNiX3NlX2FjdGl2YXRpb25fdGltZW91dDsKKwlpbmZvLT5zZV9pbmZvLnNlX2FjdGl2ZSA9IGZhbHNlOworCisJaW5mby0+c2VfaW5mby54Y2hfZXJyb3IgPSBmYWxzZTsKKworCWluZm8tPnNlX2luZm8ud3RfdGltZW91dCA9CisJCVNUMjFORkNCX0JXSV9UT19USU1FT1VUKFNUMjFORkNCX0FUUl9ERUZBVUxUX0JXSSk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woc3QyMW5mY2Jfc2VfaW5pdCk7CisKK3ZvaWQgc3QyMW5mY2Jfc2VfZGVpbml0KHN0cnVjdCBuY2lfZGV2ICpuZGV2KQoreworCXN0cnVjdCBzdDIxbmZjYl9uY2lfaW5mbyAqaW5mbyA9IG5jaV9nZXRfZHJ2ZGF0YShuZGV2KTsKKworCWlmIChpbmZvLT5zZV9pbmZvLmJ3aV9hY3RpdmUpCisJCWRlbF90aW1lcl9zeW5jKCZpbmZvLT5zZV9pbmZvLmJ3aV90aW1lcik7CisJaWYgKGluZm8tPnNlX2luZm8uc2VfYWN0aXZlKQorCQlkZWxfdGltZXJfc3luYygmaW5mby0+c2VfaW5mby5zZV9hY3RpdmVfdGltZXIpOworCisJaW5mby0+c2VfaW5mby5zZV9hY3RpdmUgPSBmYWxzZTsKKwlpbmZvLT5zZV9pbmZvLmJ3aV9hY3RpdmUgPSBmYWxzZTsKK30KK0VYUE9SVF9TWU1CT0woc3QyMW5mY2Jfc2VfZGVpbml0KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZmMvc3QyMW5mY2Ivc3QyMW5mY2Jfc2UuaCBiL2RyaXZlcnMvbmZjL3N0MjFuZmNiL3N0MjFuZmNiX3NlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJhMzIzOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmZjL3N0MjFuZmNiL3N0MjFuZmNiX3NlLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIE5DSSBiYXNlZCBEcml2ZXIgZm9yIFNUTWljcm9lbGVjdHJvbmljcyBORkMgQ2hpcAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCAgU1RNaWNyb2VsZWN0cm9uaWNzIFNBUy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisjaWZuZGVmIF9fTE9DQUxfU1QyMU5GQ0JfU0VfSF8KKyNkZWZpbmUgX19MT0NBTF9TVDIxTkZDQl9TRV9IXworCisvKgorICogcmVmIElTTzc4MTYtMyBjaGFwIDguMS4gdGhlIGluaXRpYWwgY2hhcmFjdGVyIFRTIGlzIGZvbGxvd2VkIGJ5IGEKKyAqIHNlcXVlbmNlIG9mIGF0IG1vc3QgMzIgY2hhcmFjdGVycy4KKyAqLworI2RlZmluZSBTVDIxTkZDQl9FU0VfTUFYX0xFTkdUSAkJMzMKKyNkZWZpbmUgU1QyMU5GQ0JfSENJX0hPU1RfSURfRVNFCTB4YzAKKworc3RydWN0IHN0MjFuZmNiX3NlX2luZm8geworCXU4IGF0cltTVDIxTkZDQl9FU0VfTUFYX0xFTkdUSF07CisJc3RydWN0IGNvbXBsZXRpb24gcmVxX2NvbXBsZXRpb247CisKKwlzdHJ1Y3QgdGltZXJfbGlzdCBid2lfdGltZXI7CisJaW50IHd0X3RpbWVvdXQ7IC8qIGluIG1zZWNzICovCisJYm9vbCBid2lfYWN0aXZlOworCisJc3RydWN0IHRpbWVyX2xpc3Qgc2VfYWN0aXZlX3RpbWVyOworCWJvb2wgc2VfYWN0aXZlOworCisJYm9vbCB4Y2hfZXJyb3I7CisKKwlzZV9pb19jYl90IGNiOworCXZvaWQgKmNiX2NvbnRleHQ7Cit9OworCitpbnQgc3QyMW5mY2Jfc2VfaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldik7Cit2b2lkIHN0MjFuZmNiX3NlX2RlaW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldik7CisKK2ludCBzdDIxbmZjYl9uY2lfZGlzY292ZXJfc2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpOworaW50IHN0MjFuZmNiX25jaV9lbmFibGVfc2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHUzMiBzZV9pZHgpOworaW50IHN0MjFuZmNiX25jaV9kaXNhYmxlX3NlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1MzIgc2VfaWR4KTsKK2ludCBzdDIxbmZjYl9uY2lfc2VfaW8oc3RydWN0IG5jaV9kZXYgKm5kZXYsIHUzMiBzZV9pZHgsCisJCQkJCXU4ICphcGR1LCBzaXplX3QgYXBkdV9sZW5ndGgsCisJCQkJCXNlX2lvX2NiX3QgY2IsIHZvaWQgKmNiX2NvbnRleHQpOworaW50IHN0MjFuZmNiX2hjaV9sb2FkX3Nlc3Npb24oc3RydWN0IG5jaV9kZXYgKm5kZXYpOwordm9pZCBzdDIxbmZjYl9oY2lfZXZlbnRfcmVjZWl2ZWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsCisJCQkJIHU4IGV2ZW50LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgc3QyMW5mY2JfaGNpX2NtZF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSwgdTggY21kLAorCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOworCisKKyNlbmRpZiAvKiBfX0xPQ0FMX1NUMjFORkNCX05DSV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9wY2kuYyBiL2RyaXZlcnMvb2Yvb2ZfcGNpLmMKaW5kZXggODg0NzFkMy4uMTEwZmVjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9wY2kuYworKysgYi9kcml2ZXJzL29mL29mX3BjaS5jCkBAIC0xNDAsNiArMTQwLDcgQEAKIAkJCXVuc2lnbmVkIGNoYXIgYnVzbm8sIHVuc2lnbmVkIGNoYXIgYnVzX21heCwKIAkJCXN0cnVjdCBsaXN0X2hlYWQgKnJlc291cmNlcywgcmVzb3VyY2Vfc2l6ZV90ICppb19iYXNlKQogeworCXN0cnVjdCByZXNvdXJjZV9lbnRyeSAqd2luZG93OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCByZXNvdXJjZSAqYnVzX3JhbmdlOwogCXN0cnVjdCBvZl9wY2lfcmFuZ2UgcmFuZ2U7CkBAIC0yMjUsNyArMjI2LDEwIEBACiBjb252ZXJzaW9uX2ZhaWxlZDoKIAlrZnJlZShyZXMpOwogcGFyc2VfZmFpbGVkOgorCXJlc291cmNlX2xpc3RfZm9yX2VhY2hfZW50cnkod2luZG93LCByZXNvdXJjZXMpCisJCWtmcmVlKHdpbmRvdy0+cmVzKTsKIAlwY2lfZnJlZV9yZXNvdXJjZV9saXN0KHJlc291cmNlcyk7CisJa2ZyZWUoYnVzX3JhbmdlKTsKIAlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwob2ZfcGNpX2dldF9ob3N0X2JyaWRnZV9yZXNvdXJjZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfYXRhcmkuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X2F0YXJpLmMKaW5kZXggN2FkNTlhYy4uYTgxY2QyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfYXRhcmkuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9hdGFyaS5jCkBAIC0xOTIsOCArMTkyLDggQEAKIAkJCQkJICAmcGFycG9ydF9hdGFyaV9vcHMpOwogCQlpZiAoIXApCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJaWYgKHJlcXVlc3RfaXJxKElSUV9NRlBfQlVTWSwgcGFycG9ydF9pcnFfaGFuZGxlciwKLQkJCQlJUlFfVFlQRV9TTE9XLCBwLT5uYW1lLCBwKSkgeworCQlpZiAocmVxdWVzdF9pcnEoSVJRX01GUF9CVVNZLCBwYXJwb3J0X2lycV9oYW5kbGVyLCAwLCBwLT5uYW1lLAorCQkJCXApKSB7CiAJCQlwYXJwb3J0X3B1dF9wb3J0IChwKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9hY2Nlc3MuYyBiL2RyaXZlcnMvcGNpL2FjY2Vzcy5jCmluZGV4IDQ5ZGQ3NjYuLmQ5YjY0YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2FjY2Vzcy5jCisrKyBiL2RyaXZlcnMvcGNpL2FjY2Vzcy5jCkBAIC02Nyw2ICs2Nyw5MyBAQAogRVhQT1JUX1NZTUJPTChwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKTsKIEVYUE9SVF9TWU1CT0wocGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQpOwogCitpbnQgcGNpX2dlbmVyaWNfY29uZmlnX3JlYWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKQoreworCXZvaWQgX19pb21lbSAqYWRkcjsKKworCWFkZHIgPSBidXMtPm9wcy0+bWFwX2J1cyhidXMsIGRldmZuLCB3aGVyZSk7CisJaWYgKCFhZGRyKSB7CisJCSp2YWwgPSB+MDsKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKwl9CisKKwlpZiAoc2l6ZSA9PSAxKQorCQkqdmFsID0gcmVhZGIoYWRkcik7CisJZWxzZSBpZiAoc2l6ZSA9PSAyKQorCQkqdmFsID0gcmVhZHcoYWRkcik7CisJZWxzZQorCQkqdmFsID0gcmVhZGwoYWRkcik7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2dlbmVyaWNfY29uZmlnX3JlYWQpOworCitpbnQgcGNpX2dlbmVyaWNfY29uZmlnX3dyaXRlKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisKKwlhZGRyID0gYnVzLT5vcHMtPm1hcF9idXMoYnVzLCBkZXZmbiwgd2hlcmUpOworCWlmICghYWRkcikKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCWlmIChzaXplID09IDEpCisJCXdyaXRlYih2YWwsIGFkZHIpOworCWVsc2UgaWYgKHNpemUgPT0gMikKKwkJd3JpdGV3KHZhbCwgYWRkcik7CisJZWxzZQorCQl3cml0ZWwodmFsLCBhZGRyKTsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZ2VuZXJpY19jb25maWdfd3JpdGUpOworCitpbnQgcGNpX2dlbmVyaWNfY29uZmlnX3JlYWQzMihzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkgICAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHI7CisKKwlhZGRyID0gYnVzLT5vcHMtPm1hcF9idXMoYnVzLCBkZXZmbiwgd2hlcmUgJiB+MHgzKTsKKwlpZiAoIWFkZHIpIHsKKwkJKnZhbCA9IH4wOworCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCX0KKworCSp2YWwgPSByZWFkbChhZGRyKTsKKworCWlmIChzaXplIDw9IDIpCisJCSp2YWwgPSAoKnZhbCA+PiAoOCAqICh3aGVyZSAmIDMpKSkgJiAoKDEgPDwgKHNpemUgKiA4KSkgLSAxKTsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZ2VuZXJpY19jb25maWdfcmVhZDMyKTsKKworaW50IHBjaV9nZW5lcmljX2NvbmZpZ193cml0ZTMyKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgICAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKQoreworCXZvaWQgX19pb21lbSAqYWRkcjsKKwl1MzIgbWFzaywgdG1wOworCisJYWRkciA9IGJ1cy0+b3BzLT5tYXBfYnVzKGJ1cywgZGV2Zm4sIHdoZXJlICYgfjB4Myk7CisJaWYgKCFhZGRyKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJaWYgKHNpemUgPT0gNCkgeworCQl3cml0ZWwodmFsLCBhZGRyKTsKKwkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKwl9IGVsc2UgeworCQltYXNrID0gfigoKDEgPDwgKHNpemUgKiA4KSkgLSAxKSA8PCAoKHdoZXJlICYgMHgzKSAqIDgpKTsKKwl9CisKKwl0bXAgPSByZWFkbChhZGRyKSAmIG1hc2s7CisJdG1wIHw9IHZhbCA8PCAoKHdoZXJlICYgMHgzKSAqIDgpOworCXdyaXRlbCh0bXAsIGFkZHIpOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9nZW5lcmljX2NvbmZpZ193cml0ZTMyKTsKKwogLyoqCiAgKiBwY2lfYnVzX3NldF9vcHMgLSBTZXQgcmF3IG9wZXJhdGlvbnMgb2YgcGNpIGJ1cwogICogQGJ1czoJcGNpIGJ1cyBzdHJ1Y3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2J1cy5jIGIvZHJpdmVycy9wY2kvYnVzLmMKaW5kZXggOGZiMTYxOC4uOTBmYTNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvYnVzLmMKQEAgLTIwLDE3ICsyMCwxNiBAQAogdm9pZCBwY2lfYWRkX3Jlc291cmNlX29mZnNldChzdHJ1Y3QgbGlzdF9oZWFkICpyZXNvdXJjZXMsIHN0cnVjdCByZXNvdXJjZSAqcmVzLAogCQkJICAgICByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0KQogewotCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2Vfd2luZG93ICp3aW5kb3c7CisJc3RydWN0IHJlc291cmNlX2VudHJ5ICplbnRyeTsKIAotCXdpbmRvdyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwY2lfaG9zdF9icmlkZ2Vfd2luZG93KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3aW5kb3cpIHsKKwllbnRyeSA9IHJlc291cmNlX2xpc3RfY3JlYXRlX2VudHJ5KHJlcywgMCk7CisJaWYgKCFlbnRyeSkgewogCQlwcmludGsoS0VSTl9FUlIgIlBDSTogY2FuJ3QgYWRkIGhvc3QgYnJpZGdlIHdpbmRvdyAlcFJcbiIsIHJlcyk7CiAJCXJldHVybjsKIAl9CiAKLQl3aW5kb3ctPnJlcyA9IHJlczsKLQl3aW5kb3ctPm9mZnNldCA9IG9mZnNldDsKLQlsaXN0X2FkZF90YWlsKCZ3aW5kb3ctPmxpc3QsIHJlc291cmNlcyk7CisJZW50cnktPm9mZnNldCA9IG9mZnNldDsKKwlyZXNvdXJjZV9saXN0X2FkZF90YWlsKGVudHJ5LCByZXNvdXJjZXMpOwogfQogRVhQT1JUX1NZTUJPTChwY2lfYWRkX3Jlc291cmNlX29mZnNldCk7CiAKQEAgLTQyLDEyICs0MSw3IEBACiAKIHZvaWQgcGNpX2ZyZWVfcmVzb3VyY2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpyZXNvdXJjZXMpCiB7Ci0Jc3RydWN0IHBjaV9ob3N0X2JyaWRnZV93aW5kb3cgKndpbmRvdywgKnRtcDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3aW5kb3csIHRtcCwgcmVzb3VyY2VzLCBsaXN0KSB7Ci0JCWxpc3RfZGVsKCZ3aW5kb3ctPmxpc3QpOwotCQlrZnJlZSh3aW5kb3cpOwotCX0KKwlyZXNvdXJjZV9saXN0X2ZyZWUocmVzb3VyY2VzKTsKIH0KIEVYUE9SVF9TWU1CT0wocGNpX2ZyZWVfcmVzb3VyY2VfbGlzdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QtYnJpZGdlLmMgYi9kcml2ZXJzL3BjaS9ob3N0LWJyaWRnZS5jCmluZGV4IDBlNWYzYzkuLjM5YjJkYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QtYnJpZGdlLmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC1icmlkZ2UuYwpAQCAtMzUsMTAgKzM1LDEwIEBACiAJCQkgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQogewogCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmJyaWRnZSA9IGZpbmRfcGNpX2hvc3RfYnJpZGdlKGJ1cyk7Ci0Jc3RydWN0IHBjaV9ob3N0X2JyaWRnZV93aW5kb3cgKndpbmRvdzsKKwlzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKndpbmRvdzsKIAlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0ID0gMDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkod2luZG93LCAmYnJpZGdlLT53aW5kb3dzLCBsaXN0KSB7CisJcmVzb3VyY2VfbGlzdF9mb3JfZWFjaF9lbnRyeSh3aW5kb3csICZicmlkZ2UtPndpbmRvd3MpIHsKIAkJaWYgKHJlc291cmNlX2NvbnRhaW5zKHdpbmRvdy0+cmVzLCByZXMpKSB7CiAJCQlvZmZzZXQgPSB3aW5kb3ctPm9mZnNldDsKIAkJCWJyZWFrOwpAQCAtNjAsMTAgKzYwLDEwIEBACiAJCQkgICAgIHN0cnVjdCBwY2lfYnVzX3JlZ2lvbiAqcmVnaW9uKQogewogCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmJyaWRnZSA9IGZpbmRfcGNpX2hvc3RfYnJpZGdlKGJ1cyk7Ci0Jc3RydWN0IHBjaV9ob3N0X2JyaWRnZV93aW5kb3cgKndpbmRvdzsKKwlzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKndpbmRvdzsKIAlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0ID0gMDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkod2luZG93LCAmYnJpZGdlLT53aW5kb3dzLCBsaXN0KSB7CisJcmVzb3VyY2VfbGlzdF9mb3JfZWFjaF9lbnRyeSh3aW5kb3csICZicmlkZ2UtPndpbmRvd3MpIHsKIAkJc3RydWN0IHBjaV9idXNfcmVnaW9uIGJ1c19yZWdpb247CiAKIAkJaWYgKHJlc291cmNlX3R5cGUocmVzKSAhPSByZXNvdXJjZV90eXBlKHdpbmRvdy0+cmVzKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL2hvc3QvS2NvbmZpZwppbmRleCBjNGI2NTY4Li43Yjg5MmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9LY29uZmlnCkBAIC0xMDIsNCArMTAyLDggQEAKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IFBDSWUgY29udHJvbGxlciBzdXBwb3J0IG9uIExheWVyc2NhcGUgU29Dcy4KIAorY29uZmlnIFBDSV9WRVJTQVRJTEUKKwlib29sICJBUk0gVmVyc2F0aWxlIFBCIFBDSSBjb250cm9sbGVyIgorCWRlcGVuZHMgb24gQVJDSF9WRVJTQVRJTEUKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL2hvc3QvTWFrZWZpbGUKaW5kZXggNDRjMjY5OS4uZTYxZDkxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9ob3N0L01ha2VmaWxlCkBAIC0xMiwzICsxMiw0IEBACiBvYmotJChDT05GSUdfUENJRV9YSUxJTlgpICs9IHBjaWUteGlsaW54Lm8KIG9iai0kKENPTkZJR19QQ0lfWEdFTkUpICs9IHBjaS14Z2VuZS5vCiBvYmotJChDT05GSUdfUENJX0xBWUVSU0NBUEUpICs9IHBjaS1sYXllcnNjYXBlLm8KK29iai0kKENPTkZJR19QQ0lfVkVSU0FUSUxFKSArPSBwY2ktdmVyc2F0aWxlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWhvc3QtZ2VuZXJpYy5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktaG9zdC1nZW5lcmljLmMKaW5kZXggNmViMWFhNy4uYmE0NmU1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktaG9zdC1nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktaG9zdC1nZW5lcmljLmMKQEAgLTc2LDU1ICs3Niw5IEBACiAJLm1hcF9idXMJPSBnZW5fcGNpX21hcF9jZmdfYnVzX2VjYW0sCiB9OwogCi1zdGF0aWMgaW50IGdlbl9wY2lfY29uZmlnX3JlYWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAotCQkJCWludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKQotewotCXZvaWQgX19pb21lbSAqYWRkcjsKLQlzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMgPSBidXMtPnN5c2RhdGE7Ci0Jc3RydWN0IGdlbl9wY2kgKnBjaSA9IHN5cy0+cHJpdmF0ZV9kYXRhOwotCi0JYWRkciA9IHBjaS0+Y2ZnLm9wcy0+bWFwX2J1cyhidXMsIGRldmZuLCB3aGVyZSk7Ci0KLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCSp2YWwgPSByZWFkYihhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqdmFsID0gcmVhZHcoYWRkcik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCSp2YWwgPSByZWFkbChhZGRyKTsKLQl9Ci0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IGdlbl9wY2lfY29uZmlnX3dyaXRlKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKLQkJCQkgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHI7Ci0Jc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzID0gYnVzLT5zeXNkYXRhOwotCXN0cnVjdCBnZW5fcGNpICpwY2kgPSBzeXMtPnByaXZhdGVfZGF0YTsKLQotCWFkZHIgPSBwY2ktPmNmZy5vcHMtPm1hcF9idXMoYnVzLCBkZXZmbiwgd2hlcmUpOwotCi0Jc3dpdGNoIChzaXplKSB7Ci0JY2FzZSAxOgotCQl3cml0ZWIodmFsLCBhZGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQl3cml0ZXcodmFsLCBhZGRyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJd3JpdGVsKHZhbCwgYWRkcik7Ci0JfQotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQogc3RhdGljIHN0cnVjdCBwY2lfb3BzIGdlbl9wY2lfb3BzID0gewotCS5yZWFkCT0gZ2VuX3BjaV9jb25maWdfcmVhZCwKLQkud3JpdGUJPSBnZW5fcGNpX2NvbmZpZ193cml0ZSwKKwkucmVhZAk9IHBjaV9nZW5lcmljX2NvbmZpZ19yZWFkLAorCS53cml0ZQk9IHBjaV9nZW5lcmljX2NvbmZpZ193cml0ZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGdlbl9wY2lfb2ZfbWF0Y2hbXSA9IHsKQEAgLTE0OSwxNCArMTAzLDE0IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gcGNpLT5ob3N0LmRldi5wYXJlbnQ7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsKIAlyZXNvdXJjZV9zaXplX3QgaW9iYXNlOwotCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2Vfd2luZG93ICp3aW47CisJc3RydWN0IHJlc291cmNlX2VudHJ5ICp3aW47CiAKIAllcnIgPSBvZl9wY2lfZ2V0X2hvc3RfYnJpZGdlX3Jlc291cmNlcyhucCwgMCwgMHhmZiwgJnBjaS0+cmVzb3VyY2VzLAogCQkJCQkgICAgICAgJmlvYmFzZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkod2luLCAmcGNpLT5yZXNvdXJjZXMsIGxpc3QpIHsKKwlyZXNvdXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5KHdpbiwgJnBjaS0+cmVzb3VyY2VzKSB7CiAJCXN0cnVjdCByZXNvdXJjZSAqcGFyZW50LCAqcmVzID0gd2luLT5yZXM7CiAKIAkJc3dpdGNoIChyZXNvdXJjZV90eXBlKHJlcykpIHsKQEAgLTI4Nyw2ICsyNDEsNyBAQAogCiAJb2ZfaWQgPSBvZl9tYXRjaF9ub2RlKGdlbl9wY2lfb2ZfbWF0Y2gsIG5wKTsKIAlwY2ktPmNmZy5vcHMgPSBvZl9pZC0+ZGF0YTsKKwlnZW5fcGNpX29wcy5tYXBfYnVzID0gcGNpLT5jZmcub3BzLT5tYXBfYnVzOwogCXBjaS0+aG9zdC5kZXYucGFyZW50ID0gZGV2OwogCUlOSVRfTElTVF9IRUFEKCZwY2ktPmhvc3Qud2luZG93cyk7CiAJSU5JVF9MSVNUX0hFQUQoJnBjaS0+cmVzb3VyY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWtleXN0b25lLmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1rZXlzdG9uZS5jCmluZGV4IDc4Zjc5ZTMuLjc1MzMzYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWtleXN0b25lLmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2kta2V5c3RvbmUuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAJc3RydWN0IHBjaWVfcG9ydCAqcHAgPSAma3NfcGNpZS0+cHA7CiAJc3RydWN0IGlycV9jaGlwICpjaGlwID0gaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyk7CiAKLQlkZXZfZGJnKHBwLT5kZXYsICJrc19wY2lfbXNpX2lycV9oYW5kbGVyLCBpcnEgJWRcbiIsIGlycSk7CisJZGV2X2RiZyhwcC0+ZGV2LCAiJXMsIGlycSAlZFxuIiwgX19mdW5jX18sIGlycSk7CiAKIAkvKgogCSAqIFRoZSBjaGFpbmVkIGlycSBoYW5kbGVyIGluc3RhbGxhdGlvbiB3b3VsZCBoYXZlIHJlcGxhY2VkIG5vcm1hbApAQCAtMTk3LDcgKzE5Nyw3IEBACiAJICovCiAJZm9yICh0ZW1wID0gMDsgdGVtcCA8IG1heF9ob3N0X2lycXM7IHRlbXArKykgewogCQlob3N0X2lycXNbdGVtcF0gPSBpcnFfb2ZfcGFyc2VfYW5kX21hcCgqbnBfdGVtcCwgdGVtcCk7Ci0JCWlmIChob3N0X2lycXNbdGVtcF0gPCAwKQorCQlpZiAoIWhvc3RfaXJxc1t0ZW1wXSkKIAkJCWJyZWFrOwogCX0KIAlpZiAodGVtcCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktbGF5ZXJzY2FwZS5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktbGF5ZXJzY2FwZS5jCmluZGV4IDY2OTdiMWEuLjY4YzllNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLWxheWVyc2NhcGUuYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1sYXllcnNjYXBlLmMKQEAgLTE2Nyw3ICsxNjcsNiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbHNfcGNpZV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAibGF5ZXJzY2FwZS1wY2llIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJCS5vZl9tYXRjaF90YWJsZSA9IGxzX3BjaWVfb2ZfbWF0Y2gsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1tdmVidS5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktbXZlYnUuYwppbmRleCAxZGQ3NTk1Li4xMzA5Y2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1tdmVidS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLW12ZWJ1LmMKQEAgLTEwMSw5ICsxMDEsNyBAQAogCXN0cnVjdCBtdmVidV9wY2llX3BvcnQgKnBvcnRzOwogCXN0cnVjdCBtc2lfY29udHJvbGxlciAqbXNpOwogCXN0cnVjdCByZXNvdXJjZSBpbzsKLQljaGFyIGlvX25hbWVbMzBdOwogCXN0cnVjdCByZXNvdXJjZSByZWFsaW87Ci0JY2hhciBtZW1fbmFtZVszMF07CiAJc3RydWN0IHJlc291cmNlIG1lbTsKIAlzdHJ1Y3QgcmVzb3VyY2UgYnVzbjsKIAlpbnQgbnBvcnRzOwpAQCAtNzIzLDE4ICs3MjEsOSBAQAogewogCXN0cnVjdCBtdmVidV9wY2llICpwY2llID0gc3lzX3RvX3BjaWUoc3lzKTsKIAlpbnQgaTsKLQlpbnQgZG9tYWluID0gMDsKIAotI2lmZGVmIENPTkZJR19QQ0lfRE9NQUlOUwotCWRvbWFpbiA9IHN5cy0+ZG9tYWluOwotI2VuZGlmCi0KLQlzbnByaW50ZihwY2llLT5tZW1fbmFtZSwgc2l6ZW9mKHBjaWUtPm1lbV9uYW1lKSwgIlBDSSBNRU0gJTA0eCIsCi0JCSBkb21haW4pOwotCXBjaWUtPm1lbS5uYW1lID0gcGNpZS0+bWVtX25hbWU7Ci0KLQlzbnByaW50ZihwY2llLT5pb19uYW1lLCBzaXplb2YocGNpZS0+aW9fbmFtZSksICJQQ0kgSS9PICUwNHgiLCBkb21haW4pOwotCXBjaWUtPnJlYWxpby5uYW1lID0gcGNpZS0+aW9fbmFtZTsKKwlwY2llLT5tZW0ubmFtZSA9ICJQQ0kgTUVNIjsKKwlwY2llLT5yZWFsaW8ubmFtZSA9ICJQQ0kgSS9PIjsKIAogCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnBjaWUtPm1lbSkpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2ktcmNhci1nZW4yLmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1yY2FyLWdlbjIuYwppbmRleCBkOWMwNDJmLi5kZDZiODRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS1yY2FyLWdlbjIuYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS1yY2FyLWdlbjIuYwpAQCAtMTMxLDUyICsxMzEsNiBAQAogCXJldHVybiBwcml2LT5yZWcgKyAoc2xvdCA+PiAxKSAqIDB4MTAwICsgd2hlcmU7CiB9CiAKLXN0YXRpYyBpbnQgcmNhcl9wY2lfcmVhZF9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAotCQkJCWludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKQotewotCXZvaWQgX19pb21lbSAqcmVnID0gcmNhcl9wY2lfY2ZnX2Jhc2UoYnVzLCBkZXZmbiwgd2hlcmUpOwotCi0JaWYgKCFyZWcpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCSp2YWwgPSBpb3JlYWQ4KHJlZyk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJKnZhbCA9IGlvcmVhZDE2KHJlZyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCSp2YWwgPSBpb3JlYWQzMihyZWcpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IHJjYXJfcGNpX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkJIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpCi17Ci0Jdm9pZCBfX2lvbWVtICpyZWcgPSByY2FyX3BjaV9jZmdfYmFzZShidXMsIGRldmZuLCB3aGVyZSk7Ci0KLQlpZiAoIXJlZykKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJaW93cml0ZTgodmFsLCByZWcpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWlvd3JpdGUxNih2YWwsIHJlZyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWlvd3JpdGUzMih2YWwsIHJlZyk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KIC8qIFBDSSBpbnRlcnJ1cHQgbWFwcGluZyAqLwogc3RhdGljIGludCByY2FyX3BjaV9tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKQEAgLTMyNSw4ICsyNzksOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9vcHMgcmNhcl9wY2lfb3BzID0gewotCS5yZWFkCT0gcmNhcl9wY2lfcmVhZF9jb25maWcsCi0JLndyaXRlCT0gcmNhcl9wY2lfd3JpdGVfY29uZmlnLAorCS5tYXBfYnVzID0gcmNhcl9wY2lfY2ZnX2Jhc2UsCisJLnJlYWQJPSBwY2lfZ2VuZXJpY19jb25maWdfcmVhZCwKKwkud3JpdGUJPSBwY2lfZ2VuZXJpY19jb25maWdfd3JpdGUsCiB9OwogCiBzdGF0aWMgaW50IHJjYXJfcGNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS10ZWdyYS5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktdGVncmEuYwppbmRleCBhODAwYWU5Li4wMGU5MjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaS10ZWdyYS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLXRlZ3JhLmMKQEAgLTQ4MCw1OSArNDgwLDEwIEBACiAJcmV0dXJuIGFkZHI7CiB9CiAKLXN0YXRpYyBpbnQgdGVncmFfcGNpZV9yZWFkX2NvbmYoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAotCQkJCWludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsdWUpCi17Ci0Jdm9pZCBfX2lvbWVtICphZGRyOwotCi0JYWRkciA9IHRlZ3JhX3BjaWVfY29uZl9hZGRyZXNzKGJ1cywgZGV2Zm4sIHdoZXJlKTsKLQlpZiAoIWFkZHIpIHsKLQkJKnZhbHVlID0gMHhmZmZmZmZmZjsKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQl9Ci0KLQkqdmFsdWUgPSByZWFkbChhZGRyKTsKLQotCWlmIChzaXplID09IDEpCi0JCSp2YWx1ZSA9ICgqdmFsdWUgPj4gKDggKiAod2hlcmUgJiAzKSkpICYgMHhmZjsKLQllbHNlIGlmIChzaXplID09IDIpCi0JCSp2YWx1ZSA9ICgqdmFsdWUgPj4gKDggKiAod2hlcmUgJiAzKSkpICYgMHhmZmZmOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCB0ZWdyYV9wY2llX3dyaXRlX2NvbmYoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAotCQkJCSBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsdWUpCi17Ci0Jdm9pZCBfX2lvbWVtICphZGRyOwotCXUzMiBtYXNrLCB0bXA7Ci0KLQlhZGRyID0gdGVncmFfcGNpZV9jb25mX2FkZHJlc3MoYnVzLCBkZXZmbiwgd2hlcmUpOwotCWlmICghYWRkcikKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCWlmIChzaXplID09IDQpIHsKLQkJd3JpdGVsKHZhbHVlLCBhZGRyKTsKLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQl9Ci0KLQlpZiAoc2l6ZSA9PSAyKQotCQltYXNrID0gfigweGZmZmYgPDwgKCh3aGVyZSAmIDB4MykgKiA4KSk7Ci0JZWxzZSBpZiAoc2l6ZSA9PSAxKQotCQltYXNrID0gfigweGZmIDw8ICgod2hlcmUgJiAweDMpICogOCkpOwotCWVsc2UKLQkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKLQotCXRtcCA9IHJlYWRsKGFkZHIpICYgbWFzazsKLQl0bXAgfD0gdmFsdWUgPDwgKCh3aGVyZSAmIDB4MykgKiA4KTsKLQl3cml0ZWwodG1wLCBhZGRyKTsKLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGNpX29wcyB0ZWdyYV9wY2llX29wcyA9IHsKLQkucmVhZCA9IHRlZ3JhX3BjaWVfcmVhZF9jb25mLAotCS53cml0ZSA9IHRlZ3JhX3BjaWVfd3JpdGVfY29uZiwKKwkubWFwX2J1cyA9IHRlZ3JhX3BjaWVfY29uZl9hZGRyZXNzLAorCS5yZWFkID0gcGNpX2dlbmVyaWNfY29uZmlnX3JlYWQzMiwKKwkud3JpdGUgPSBwY2lfZ2VuZXJpY19jb25maWdfd3JpdGUzMiwKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRlZ3JhX3BjaWVfcG9ydF9nZXRfcGV4X2N0cmwoc3RydWN0IHRlZ3JhX3BjaWVfcG9ydCAqcG9ydCkKQEAgLTYyNSwxOSArNTc2LDYgQEAKIAlkZXZtX2tmcmVlKHBjaWUtPmRldiwgcG9ydCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRlZ3JhX3BjaWVfZml4dXBfYnJpZGdlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JdTE2IHJlZzsKLQotCWlmICgoZGV2LT5jbGFzcyA+PiAxNikgPT0gUENJX0JBU0VfQ0xBU1NfQlJJREdFKSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZyZWcpOwotCQlyZWcgfD0gKFBDSV9DT01NQU5EX0lPIHwgUENJX0NPTU1BTkRfTUVNT1JZIHwKLQkJCVBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX1NFUlIpOwotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgcmVnKTsKLQl9Ci19Ci1ERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB0ZWdyYV9wY2llX2ZpeHVwX2JyaWRnZSk7Ci0KIC8qIFRlZ3JhIFBDSUUgcm9vdCBjb21wbGV4IHdyb25nbHkgcmVwb3J0cyBkZXZpY2UgY2xhc3MgKi8KIHN0YXRpYyB2b2lkIHRlZ3JhX3BjaWVfZml4dXBfY2xhc3Moc3RydWN0IHBjaV9kZXYgKmRldikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLXZlcnNhdGlsZS5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2ktdmVyc2F0aWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVjNjk0YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpLXZlcnNhdGlsZS5jCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IDIwMDQgS29uaW5rbGlqa2UgUGhpbGlwcyBFbGVjdHJvbmljcyBOVgorICoKKyAqIENvbnZlcnNpb24gdG8gcGxhdGZvcm0gZHJpdmVyIGFuZCBEVDoKKyAqIENvcHlyaWdodCAyMDE0IExpbmFybyBMdGQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAxNC8wNC8yMDA1IEluaXRpYWwgdmVyc2lvbiwgY29saW4ua2luZ0BwaGlsaXBzLmNvbQorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnZlcnNhdGlsZV9wY2lfYmFzZTsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnZlcnNhdGlsZV9jZmdfYmFzZVsyXTsKKworI2RlZmluZSBQQ0lfSU1BUChtKQkJKHZlcnNhdGlsZV9wY2lfYmFzZSArICgobSkgKiA0KSkKKyNkZWZpbmUgUENJX1NNQVAobSkJCSh2ZXJzYXRpbGVfcGNpX2Jhc2UgKyAweDE0ICsgKChtKSAqIDQpKQorI2RlZmluZSBQQ0lfU0VMRklECQkodmVyc2F0aWxlX3BjaV9iYXNlICsgMHhjKQorCisjZGVmaW5lIFZQX1BDSV9ERVZJQ0VfSUQJCTB4MDMwMDEwZWUKKyNkZWZpbmUgVlBfUENJX0NMQVNTX0lECQkJMHgwYjQwMDAwMAorCitzdGF0aWMgdTMyIHBjaV9zbG90X2lnbm9yZTsKKworc3RhdGljIGludCBfX2luaXQgdmVyc2F0aWxlX3BjaV9zbG90X2lnbm9yZShjaGFyICpzdHIpCit7CisJaW50IHJldHZhbDsKKwlpbnQgc2xvdDsKKworCXdoaWxlICgocmV0dmFsID0gZ2V0X29wdGlvbigmc3RyLCAmc2xvdCkpKSB7CisJCWlmICgoc2xvdCA8IDApIHx8IChzbG90ID4gMzEpKQorCQkJcHJfZXJyKCJJbGxlZ2FsIHNsb3QgdmFsdWU6ICVkXG4iLCBzbG90KTsKKwkJZWxzZQorCQkJcGNpX3Nsb3RfaWdub3JlIHw9ICgxIDw8IHNsb3QpOworCX0KKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInBjaV9zbG90X2lnbm9yZT0iLCB2ZXJzYXRpbGVfcGNpX3Nsb3RfaWdub3JlKTsKKworCitzdGF0aWMgdm9pZCBfX2lvbWVtICp2ZXJzYXRpbGVfbWFwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCBvZmZzZXQpCit7CisJdW5zaWduZWQgaW50IGJ1c25yID0gYnVzLT5udW1iZXI7CisKKwlpZiAocGNpX3Nsb3RfaWdub3JlICYgKDEgPDwgUENJX1NMT1QoZGV2Zm4pKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gdmVyc2F0aWxlX2NmZ19iYXNlWzFdICsgKChidXNuciA8PCAxNikgfCAoZGV2Zm4gPDwgOCkgfCBvZmZzZXQpOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9vcHMgcGNpX3ZlcnNhdGlsZV9vcHMgPSB7CisJLm1hcF9idXMgPSB2ZXJzYXRpbGVfbWFwX2J1cywKKwkucmVhZAk9IHBjaV9nZW5lcmljX2NvbmZpZ19yZWFkMzIsCisJLndyaXRlCT0gcGNpX2dlbmVyaWNfY29uZmlnX3dyaXRlLAorfTsKKworc3RhdGljIGludCB2ZXJzYXRpbGVfcGNpX3BhcnNlX3JlcXVlc3Rfb2ZfcGNpX3JhbmdlcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJlcykKK3sKKwlpbnQgZXJyLCBtZW0gPSAxLCByZXNfdmFsaWQgPSAwOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CisJcmVzb3VyY2Vfc2l6ZV90IGlvYmFzZTsKKwlzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKndpbjsKKworCWVyciA9IG9mX3BjaV9nZXRfaG9zdF9icmlkZ2VfcmVzb3VyY2VzKG5wLCAwLCAweGZmLCByZXMsICZpb2Jhc2UpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXNvdXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5KHdpbiwgcmVzLCBsaXN0KSB7CisJCXN0cnVjdCByZXNvdXJjZSAqcGFyZW50LCAqcmVzID0gd2luLT5yZXM7CisKKwkJc3dpdGNoIChyZXNvdXJjZV90eXBlKHJlcykpIHsKKwkJY2FzZSBJT1JFU09VUkNFX0lPOgorCQkJcGFyZW50ID0gJmlvcG9ydF9yZXNvdXJjZTsKKwkJCWVyciA9IHBjaV9yZW1hcF9pb3NwYWNlKHJlcywgaW9iYXNlKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlkZXZfd2FybihkZXYsICJlcnJvciAlZDogZmFpbGVkIHRvIG1hcCByZXNvdXJjZSAlcFJcbiIsCisJCQkJCSBlcnIsIHJlcyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBJT1JFU09VUkNFX01FTToKKwkJCXBhcmVudCA9ICZpb21lbV9yZXNvdXJjZTsKKwkJCXJlc192YWxpZCB8PSAhKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX1BSRUZFVENIKTsKKworCQkJd3JpdGVsKHJlcy0+c3RhcnQgPj4gMjgsIFBDSV9JTUFQKG1lbSkpOworCQkJd3JpdGVsKFBIWVNfT0ZGU0VUID4+IDI4LCBQQ0lfU01BUChtZW0pKTsKKwkJCW1lbSsrOworCisJCQlicmVhazsKKwkJY2FzZSBJT1JFU09VUkNFX0JVUzoKKwkJZGVmYXVsdDoKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZXJyID0gZGV2bV9yZXF1ZXN0X3Jlc291cmNlKGRldiwgcGFyZW50LCByZXMpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfcmVsZWFzZV9yZXM7CisJfQorCisJaWYgKCFyZXNfdmFsaWQpIHsKKwkJZGV2X2VycihkZXYsICJub24tcHJlZmV0Y2hhYmxlIG1lbW9yeSByZXNvdXJjZSByZXF1aXJlZFxuIik7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3JlbGVhc2VfcmVzOworCX0KKworCXJldHVybiAwOworCitvdXRfcmVsZWFzZV9yZXM6CisJcGNpX2ZyZWVfcmVzb3VyY2VfbGlzdChyZXMpOworCXJldHVybiBlcnI7Cit9CisKKy8qIFVudXNlZCwgdGVtcG9yYXJ5IHRvIHNhdGlzZnkgQVJNIGFyY2ggY29kZSAqLworc3RydWN0IHBjaV9zeXNfZGF0YSBzeXM7CisKK3N0YXRpYyBpbnQgdmVyc2F0aWxlX3BjaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQsIGksIG15c2xvdCA9IC0xOworCXUzMiB2YWw7CisJdm9pZCBfX2lvbWVtICpsb2NhbF9wY2lfY2ZnX2Jhc2U7CisJc3RydWN0IHBjaV9idXMgKmJ1czsKKwlMSVNUX0hFQUQocGNpX3Jlcyk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKwl2ZXJzYXRpbGVfcGNpX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaWYgKCFyZXMpCisJCXJldHVybiAtRU5PREVWOworCXZlcnNhdGlsZV9jZmdfYmFzZVswXSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAyKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisJdmVyc2F0aWxlX2NmZ19iYXNlWzFdID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisKKwlyZXQgPSB2ZXJzYXRpbGVfcGNpX3BhcnNlX3JlcXVlc3Rfb2ZfcGNpX3JhbmdlcygmcGRldi0+ZGV2LCAmcGNpX3Jlcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICogV2UgbmVlZCB0byBkaXNjb3ZlciB0aGUgUENJIGNvcmUgZmlyc3QgdG8gY29uZmlndXJlIGl0c2VsZgorCSAqIGJlZm9yZSB0aGUgbWFpbiBQQ0kgcHJvYmluZyBpcyBwZXJmb3JtZWQKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpZiAoKHJlYWRsKHZlcnNhdGlsZV9jZmdfYmFzZVswXSArIChpIDw8IDExKSArIFBDSV9WRU5ET1JfSUQpID09IFZQX1BDSV9ERVZJQ0VfSUQpICYmCisJCSAgICAocmVhZGwodmVyc2F0aWxlX2NmZ19iYXNlWzBdICsgKGkgPDwgMTEpICsgUENJX0NMQVNTX1JFVklTSU9OKSA9PSBWUF9QQ0lfQ0xBU1NfSUQpKSB7CisJCQlteXNsb3QgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKG15c2xvdCA9PSAtMSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZmluZCBQQ0kgY29yZSFcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJLyoKKwkgKiBEbyBub3QgdG8gbWFwIFZlcnNhdGlsZSBGUEdBIFBDSSBkZXZpY2UgaW50byBtZW1vcnkgc3BhY2UKKwkgKi8KKwlwY2lfc2xvdF9pZ25vcmUgfD0gKDEgPDwgbXlzbG90KTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJQQ0kgY29yZSBmb3VuZCAoc2xvdCAlZClcbiIsIG15c2xvdCk7CisKKwl3cml0ZWwobXlzbG90LCBQQ0lfU0VMRklEKTsKKwlsb2NhbF9wY2lfY2ZnX2Jhc2UgPSB2ZXJzYXRpbGVfY2ZnX2Jhc2VbMV0gKyAobXlzbG90IDw8IDExKTsKKworCXZhbCA9IHJlYWRsKGxvY2FsX3BjaV9jZmdfYmFzZSArIFBDSV9DT01NQU5EKTsKKwl2YWwgfD0gUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfSU5WQUxJREFURTsKKwl3cml0ZWwodmFsLCBsb2NhbF9wY2lfY2ZnX2Jhc2UgKyBQQ0lfQ09NTUFORCk7CisKKwkvKgorCSAqIENvbmZpZ3VyZSB0aGUgUENJIGluYm91bmQgbWVtb3J5IHdpbmRvd3MgdG8gYmUgMToxIG1hcHBlZCB0byBTRFJBTQorCSAqLworCXdyaXRlbChQSFlTX09GRlNFVCwgbG9jYWxfcGNpX2NmZ19iYXNlICsgUENJX0JBU0VfQUREUkVTU18wKTsKKwl3cml0ZWwoUEhZU19PRkZTRVQsIGxvY2FsX3BjaV9jZmdfYmFzZSArIFBDSV9CQVNFX0FERFJFU1NfMSk7CisJd3JpdGVsKFBIWVNfT0ZGU0VULCBsb2NhbF9wY2lfY2ZnX2Jhc2UgKyBQQ0lfQkFTRV9BRERSRVNTXzIpOworCisJLyoKKwkgKiBGb3IgbWFueSB5ZWFycyB0aGUga2VybmVsIGFuZCBRRU1VIHdlcmUgc3ltYmlvdGljYWxseSBidWdneQorCSAqIGluIHRoYXQgdGhleSBib3RoIGFzc3VtZWQgdGhlIHNhbWUgYnJva2VuIElSUSBtYXBwaW5nLgorCSAqIFFFTVUgdGhlcmVmb3JlIGF0dGVtcHRzIHRvIGF1dG8tZGV0ZWN0IG9sZCBicm9rZW4ga2VybmVscworCSAqIHNvIHRoYXQgdGhleSBzdGlsbCB3b3JrIG9uIG5ld2VyIFFFTVUgYXMgdGhleSBkaWQgb24gb2xkCisJICogUUVNVS4gU2luY2Ugd2Ugbm93IHVzZSB0aGUgY29ycmVjdCAoaWUgbWF0Y2hpbmctaGFyZHdhcmUpCisJICogSVJRIG1hcHBpbmcgd2Ugd3JpdGUgYSBkZWZpbml0ZWx5IGRpZmZlcmVudCB2YWx1ZSB0byBhCisJICogUENJX0lOVEVSUlVQVF9MSU5FIHJlZ2lzdGVyIHRvIHRlbGwgUUVNVSB0aGF0IHdlIGV4cGVjdAorCSAqIHJlYWwgaGFyZHdhcmUgYmVoYXZpb3VyIGFuZCBpdCBuZWVkIG5vdCBiZSBiYWNrd2FyZHMKKwkgKiBjb21wYXRpYmxlIGZvciB1cy4gVGhpcyB3cml0ZSBpcyBoYXJtbGVzcyBvbiByZWFsIGhhcmR3YXJlLgorCSAqLworCXdyaXRlbCgwLCB2ZXJzYXRpbGVfY2ZnX2Jhc2VbMF0gKyBQQ0lfSU5URVJSVVBUX0xJTkUpOworCisJcGNpX2FkZF9mbGFncyhQQ0lfRU5BQkxFX1BST0NfRE9NQUlOUyk7CisJcGNpX2FkZF9mbGFncyhQQ0lfUkVBU1NJR05fQUxMX0JVUyB8IFBDSV9SRUFTU0lHTl9BTExfUlNSQyk7CisKKwlidXMgPSBwY2lfc2Nhbl9yb290X2J1cygmcGRldi0+ZGV2LCAwLCAmcGNpX3ZlcnNhdGlsZV9vcHMsICZzeXMsICZwY2lfcmVzKTsKKwlpZiAoIWJ1cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwY2lfZml4dXBfaXJxcyhwY2lfY29tbW9uX3N3aXp6bGUsIG9mX2lycV9wYXJzZV9hbmRfbWFwX3BjaSk7CisJcGNpX2Fzc2lnbl91bmFzc2lnbmVkX2J1c19yZXNvdXJjZXMoYnVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB2ZXJzYXRpbGVfcGNpX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhcm0sdmVyc2F0aWxlLXBjaSIsIH0sCisJeyB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHZlcnNhdGlsZV9wY2lfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB2ZXJzYXRpbGVfcGNpX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJ2ZXJzYXRpbGUtcGNpIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gdmVyc2F0aWxlX3BjaV9vZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IHZlcnNhdGlsZV9wY2lfcHJvYmUsCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih2ZXJzYXRpbGVfcGNpX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiVmVyc2F0aWxlIFBDSSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLXhnZW5lLmMgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaS14Z2VuZS5jCmluZGV4IGIxZDA1OTYuLmFhYjU1NDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpLXhnZW5lLmMKKysrIGIvZHJpdmVycy9wY2kvaG9zdC9wY2kteGdlbmUuYwpAQCAtMTYsNyArMTYsNyBAQAogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jbGstcHJpdmF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CkBAIC03NCw5MiArNzQsNiBAQAogCXJldHVybiAoYWRkciAmIFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0spIHwgZmxhZ3M7CiB9CiAKLS8qIFBDSWUgQ29uZmlndXJhdGlvbiBPdXQvSW4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB4Z2VuZV9wY2llX2NmZ19vdXQzMih2b2lkIF9faW9tZW0gKmFkZHIsIGludCBvZmZzZXQsIHUzMiB2YWwpCi17Ci0Jd3JpdGVsKHZhbCwgYWRkciArIG9mZnNldCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB4Z2VuZV9wY2llX2NmZ19vdXQxNih2b2lkIF9faW9tZW0gKmFkZHIsIGludCBvZmZzZXQsIHUxNiB2YWwpCi17Ci0JdTMyIHZhbDMyID0gcmVhZGwoYWRkciArIChvZmZzZXQgJiB+MHgzKSk7Ci0KLQlzd2l0Y2ggKG9mZnNldCAmIDB4MykgewotCWNhc2UgMjoKLQkJdmFsMzIgJj0gfjB4RkZGRjAwMDA7Ci0JCXZhbDMyIHw9ICh1MzIpdmFsIDw8IDE2OwotCQlicmVhazsKLQljYXNlIDA6Ci0JZGVmYXVsdDoKLQkJdmFsMzIgJj0gfjB4RkZGRjsKLQkJdmFsMzIgfD0gdmFsOwotCQlicmVhazsKLQl9Ci0Jd3JpdGVsKHZhbDMyLCBhZGRyICsgKG9mZnNldCAmIH4weDMpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHhnZW5lX3BjaWVfY2ZnX291dDgodm9pZCBfX2lvbWVtICphZGRyLCBpbnQgb2Zmc2V0LCB1OCB2YWwpCi17Ci0JdTMyIHZhbDMyID0gcmVhZGwoYWRkciArIChvZmZzZXQgJiB+MHgzKSk7Ci0KLQlzd2l0Y2ggKG9mZnNldCAmIDB4MykgewotCWNhc2UgMDoKLQkJdmFsMzIgJj0gfjB4RkY7Ci0JCXZhbDMyIHw9IHZhbDsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQl2YWwzMiAmPSB+MHhGRjAwOwotCQl2YWwzMiB8PSAodTMyKXZhbCA8PCA4OwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXZhbDMyICY9IH4weEZGMDAwMDsKLQkJdmFsMzIgfD0gKHUzMil2YWwgPDwgMTY7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQlkZWZhdWx0OgotCQl2YWwzMiAmPSB+MHhGRjAwMDAwMDsKLQkJdmFsMzIgfD0gKHUzMil2YWwgPDwgMjQ7Ci0JCWJyZWFrOwotCX0KLQl3cml0ZWwodmFsMzIsIGFkZHIgKyAob2Zmc2V0ICYgfjB4MykpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgeGdlbmVfcGNpZV9jZmdfaW4zMih2b2lkIF9faW9tZW0gKmFkZHIsIGludCBvZmZzZXQsIHUzMiAqdmFsKQotewotCSp2YWwgPSByZWFkbChhZGRyICsgb2Zmc2V0KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHhnZW5lX3BjaWVfY2ZnX2luMTYodm9pZCBfX2lvbWVtICphZGRyLCBpbnQgb2Zmc2V0LCB1MzIgKnZhbCkKLXsKLQkqdmFsID0gcmVhZGwoYWRkciArIChvZmZzZXQgJiB+MHgzKSk7Ci0KLQlzd2l0Y2ggKG9mZnNldCAmIDB4MykgewotCWNhc2UgMjoKLQkJKnZhbCA+Pj0gMTY7Ci0JCWJyZWFrOwotCX0KLQotCSp2YWwgJj0gMHhGRkZGOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgeGdlbmVfcGNpZV9jZmdfaW44KHZvaWQgX19pb21lbSAqYWRkciwgaW50IG9mZnNldCwgdTMyICp2YWwpCi17Ci0JKnZhbCA9IHJlYWRsKGFkZHIgKyAob2Zmc2V0ICYgfjB4MykpOwotCi0Jc3dpdGNoIChvZmZzZXQgJiAweDMpIHsKLQljYXNlIDM6Ci0JCSp2YWwgPSAqdmFsID4+IDI0OwotCQlicmVhazsKLQljYXNlIDI6Ci0JCSp2YWwgPSAqdmFsID4+IDE2OwotCQlicmVhazsKLQljYXNlIDE6Ci0JCSp2YWwgPSAqdmFsID4+IDg7Ci0JCWJyZWFrOwotCX0KLQkqdmFsICY9IDB4RkY7Ci19Ci0KIC8qCiAgKiBXaGVuIHRoZSBhZGRyZXNzIGJpdCBbMTc6MTZdIGlzIDInYjAxLCB0aGUgQ29uZmlndXJhdGlvbiBhY2Nlc3Mgd2lsbCBiZQogICogdHJlYXRlZCBhcyBUeXBlIDEgYW5kIGl0IHdpbGwgYmUgZm9yd2FyZGVkIHRvIGV4dGVybmFsIFBDSWUgZGV2aWNlLgpAQCAtMjEzLDY5ICsxMjcsMjMgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyBpbnQgeGdlbmVfcGNpZV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkJICBpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1MzIgKnZhbCkKK3N0YXRpYyBpbnQgeGdlbmVfcGNpZV9tYXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgICAgIGludCBvZmZzZXQpCiB7CiAJc3RydWN0IHhnZW5lX3BjaWVfcG9ydCAqcG9ydCA9IGJ1cy0+c3lzZGF0YTsKLQl2b2lkIF9faW9tZW0gKmFkZHI7CiAKLQlpZiAoKHBjaV9pc19yb290X2J1cyhidXMpICYmIGRldmZuICE9IDApIHx8ICFwb3J0LT5saW5rX3VwKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0JaWYgKHhnZW5lX3BjaWVfaGlkZV9yY19iYXJzKGJ1cywgb2Zmc2V0KSkgewotCQkqdmFsID0gMDsKLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQl9CisJaWYgKChwY2lfaXNfcm9vdF9idXMoYnVzKSAmJiBkZXZmbiAhPSAwKSB8fCAhcG9ydC0+bGlua191cCB8fAorCSAgICB4Z2VuZV9wY2llX2hpZGVfcmNfYmFycyhidXMsIG9mZnNldCkpCisJCXJldHVybiBOVUxMOwogCiAJeGdlbmVfcGNpZV9zZXRfcnRkaWRfcmVnKGJ1cywgZGV2Zm4pOwotCWFkZHIgPSB4Z2VuZV9wY2llX2dldF9jZmdfYmFzZShidXMpOwotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSAxOgotCQl4Z2VuZV9wY2llX2NmZ19pbjgoYWRkciwgb2Zmc2V0LCB2YWwpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXhnZW5lX3BjaWVfY2ZnX2luMTYoYWRkciwgb2Zmc2V0LCB2YWwpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl4Z2VuZV9wY2llX2NmZ19pbjMyKGFkZHIsIG9mZnNldCwgdmFsKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCB4Z2VuZV9wY2llX3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkJICAgaW50IG9mZnNldCwgaW50IGxlbiwgdTMyIHZhbCkKLXsKLQlzdHJ1Y3QgeGdlbmVfcGNpZV9wb3J0ICpwb3J0ID0gYnVzLT5zeXNkYXRhOwotCXZvaWQgX19pb21lbSAqYWRkcjsKLQotCWlmICgocGNpX2lzX3Jvb3RfYnVzKGJ1cykgJiYgZGV2Zm4gIT0gMCkgfHwgIXBvcnQtPmxpbmtfdXApCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQlpZiAoeGdlbmVfcGNpZV9oaWRlX3JjX2JhcnMoYnVzLCBvZmZzZXQpKQotCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCi0JeGdlbmVfcGNpZV9zZXRfcnRkaWRfcmVnKGJ1cywgZGV2Zm4pOwotCWFkZHIgPSB4Z2VuZV9wY2llX2dldF9jZmdfYmFzZShidXMpOwotCXN3aXRjaCAobGVuKSB7Ci0JY2FzZSAxOgotCQl4Z2VuZV9wY2llX2NmZ19vdXQ4KGFkZHIsIG9mZnNldCwgKHU4KXZhbCk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJeGdlbmVfcGNpZV9jZmdfb3V0MTYoYWRkciwgb2Zmc2V0LCAodTE2KXZhbCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXhnZW5lX3BjaWVfY2ZnX291dDMyKGFkZHIsIG9mZnNldCwgdmFsKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKKwlyZXR1cm4geGdlbmVfcGNpZV9nZXRfY2ZnX2Jhc2UoYnVzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfb3BzIHhnZW5lX3BjaWVfb3BzID0gewotCS5yZWFkID0geGdlbmVfcGNpZV9yZWFkX2NvbmZpZywKLQkud3JpdGUgPSB4Z2VuZV9wY2llX3dyaXRlX2NvbmZpZworCS5tYXBfYnVzID0geGdlbmVfcGNpZV9tYXBfYnVzLAorCS5yZWFkID0gcGNpX2dlbmVyaWNfY29uZmlnX3JlYWQzMiwKKwkud3JpdGUgPSBwY2lfZ2VuZXJpY19jb25maWdfd3JpdGUzMiwKIH07CiAKIHN0YXRpYyB1NjQgeGdlbmVfcGNpZV9zZXRfaWJfbWFzayh2b2lkIF9faW9tZW0gKmNzcl9iYXNlLCB1MzIgYWRkciwKQEAgLTQwMSwxMSArMjY5LDExIEBACiAJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKnJlcywKIAkJCQkgcmVzb3VyY2Vfc2l6ZV90IGlvX2Jhc2UpCiB7Ci0Jc3RydWN0IHBjaV9ob3N0X2JyaWRnZV93aW5kb3cgKndpbmRvdzsKKwlzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKndpbmRvdzsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwb3J0LT5kZXY7CiAJaW50IHJldDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkod2luZG93LCByZXMsIGxpc3QpIHsKKwlyZXNvdXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5KHdpbmRvdywgcmVzKSB7CiAJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gd2luZG93LT5yZXM7CiAJCXU2NCByZXN0eXBlID0gcmVzb3VyY2VfdHlwZShyZXMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLWRlc2lnbndhcmUuYwppbmRleCBkZjc4MWNkLi4xZjRlYTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtZGVzaWdud2FyZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1kZXNpZ253YXJlLmMKQEAgLTI4Myw2ICsyODMsOSBAQAogCXN0cnVjdCBtc2lfbXNnIG1zZzsKIAlzdHJ1Y3QgcGNpZV9wb3J0ICpwcCA9IHN5c190b19wY2llKHBkZXYtPmJ1cy0+c3lzZGF0YSk7CiAKKwlpZiAoZGVzYy0+bXNpX2F0dHJpYi5pc19tc2l4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlycSA9IGFzc2lnbl9pcnEoMSwgZGVzYywgJnBvcyk7CiAJaWYgKGlycSA8IDApCiAJCXJldHVybiBpcnE7CkBAIC01MDgsOSArNTExLDYgQEAKIAlkd19wY2kucHJpdmF0ZV9kYXRhID0gKHZvaWQgKiopJnBwOwogCiAJcGNpX2NvbW1vbl9pbml0X2RldihwcC0+ZGV2LCAmZHdfcGNpKTsKLSNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlMKLQlkd19wY2kuZG9tYWluKys7Ci0jZW5kaWYKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2llLXJjYXIuYyBiL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS1yY2FyLmMKaW5kZXggNzQ4Nzg2Yy4uYzU3YmQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG9zdC9wY2llLXJjYXIuYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaWUtcmNhci5jCkBAIC0zOTcsOSArMzk3LDYgQEAKICNlbmRpZgogCiAJcGNpX2NvbW1vbl9pbml0X2RldigmcGRldi0+ZGV2LCAmcmNhcl9wY2kpOwotI2lmZGVmIENPTkZJR19QQ0lfRE9NQUlOUwotCXJjYXJfcGNpLmRvbWFpbisrOwotI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQgcGh5X3dhaXRfZm9yX2FjayhzdHJ1Y3QgcmNhcl9wY2llICpwY2llKQpAQCAtNzU3LDcgKzc1NCw3IEBACiAJCWdvdG8gZXJyX21hcF9yZWc7CiAKIAlpID0gaXJxX29mX3BhcnNlX2FuZF9tYXAocGRldi0+ZGV2Lm9mX25vZGUsIDApOwotCWlmIChpIDwgMCkgeworCWlmICghaSkgewogCQlkZXZfZXJyKHBjaWUtPmRldiwgImNhbm5vdCBnZXQgcGxhdGZvcm0gcmVzb3VyY2VzIGZvciBtc2kgaW50ZXJydXB0XG4iKTsKIAkJZXJyID0gLUVOT0VOVDsKIAkJZ290byBlcnJfbWFwX3JlZzsKQEAgLTc2NSw3ICs3NjIsNyBAQAogCXBjaWUtPm1zaS5pcnExID0gaTsKIAogCWkgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChwZGV2LT5kZXYub2Zfbm9kZSwgMSk7Ci0JaWYgKGkgPCAwKSB7CisJaWYgKCFpKSB7CiAJCWRldl9lcnIocGNpZS0+ZGV2LCAiY2Fubm90IGdldCBwbGF0Zm9ybSByZXNvdXJjZXMgZm9yIG1zaSBpbnRlcnJ1cHRcbiIpOwogCQllcnIgPSAtRU5PRU5UOwogCQlnb3RvIGVycl9tYXBfcmVnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG9zdC9wY2llLXhpbGlueC5jIGIvZHJpdmVycy9wY2kvaG9zdC9wY2llLXhpbGlueC5jCmluZGV4IGVmM2ViYWYuLmYxYTA2YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvc3QvcGNpZS14aWxpbnguYworKysgYi9kcml2ZXJzL3BjaS9ob3N0L3BjaWUteGlsaW54LmMKQEAgLTE0OCwxMCArMTQ4LDEwIEBACiAgKi8KIHN0YXRpYyB2b2lkIHhpbGlueF9wY2llX2NsZWFyX2Vycl9pbnRlcnJ1cHRzKHN0cnVjdCB4aWxpbnhfcGNpZV9wb3J0ICpwb3J0KQogewotCXUzMiB2YWwgPSBwY2llX3JlYWQocG9ydCwgWElMSU5YX1BDSUVfUkVHX1JQRUZSKTsKKwl1bnNpZ25lZCBsb25nIHZhbCA9IHBjaWVfcmVhZChwb3J0LCBYSUxJTlhfUENJRV9SRUdfUlBFRlIpOwogCiAJaWYgKHZhbCAmIFhJTElOWF9QQ0lFX1JQRUZSX0VSUl9WQUxJRCkgewotCQlkZXZfZGJnKHBvcnQtPmRldiwgIlJlcXVlc3RlciBJRCAlZFxuIiwKKwkJZGV2X2RiZyhwb3J0LT5kZXYsICJSZXF1ZXN0ZXIgSUQgJWx1XG4iLAogCQkJdmFsICYgWElMSU5YX1BDSUVfUlBFRlJfUkVRX0lEKTsKIAkJcGNpZV93cml0ZShwb3J0LCBYSUxJTlhfUENJRV9SUEVGUl9BTExfTUFTSywKIAkJCSAgIFhJTElOWF9QQ0lFX1JFR19SUEVGUik7CkBAIC0xODksNyArMTg5LDcgQEAKIH0KIAogLyoqCi0gKiB4aWxpbnhfcGNpZV9jb25maWdfYmFzZSAtIEdldCBjb25maWd1cmF0aW9uIGJhc2UKKyAqIHhpbGlueF9wY2llX21hcF9idXMgLSBHZXQgY29uZmlndXJhdGlvbiBiYXNlCiAgKiBAYnVzOiBQQ0kgQnVzIHN0cnVjdHVyZQogICogQGRldmZuOiBEZXZpY2UvZnVuY3Rpb24KICAqIEB3aGVyZTogT2Zmc2V0IGZyb20gYmFzZQpAQCAtMTk3LDk2ICsxOTcsMjYgQEAKICAqIFJldHVybjogQmFzZSBhZGRyZXNzIG9mIHRoZSBjb25maWd1cmF0aW9uIHNwYWNlIG5lZWRlZCB0byBiZQogICoJICAgYWNjZXNzZWQuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW9tZW0gKnhpbGlueF9wY2llX2NvbmZpZ19iYXNlKHN0cnVjdCBwY2lfYnVzICpidXMsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUpCitzdGF0aWMgdm9pZCBfX2lvbWVtICp4aWxpbnhfcGNpZV9tYXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMsCisJCQkJCSB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSkKIHsKIAlzdHJ1Y3QgeGlsaW54X3BjaWVfcG9ydCAqcG9ydCA9IHN5c190b19wY2llKGJ1cy0+c3lzZGF0YSk7CiAJaW50IHJlbGJ1czsKIAorCWlmICgheGlsaW54X3BjaWVfdmFsaWRfZGV2aWNlKGJ1cywgZGV2Zm4pKQorCQlyZXR1cm4gTlVMTDsKKwogCXJlbGJ1cyA9IChidXMtPm51bWJlciA8PCBFQ0FNX0JVU19OVU1fU0hJRlQpIHwKIAkJIChkZXZmbiA8PCBFQ0FNX0RFVl9OVU1fU0hJRlQpOwogCiAJcmV0dXJuIHBvcnQtPnJlZ19iYXNlICsgcmVsYnVzICsgd2hlcmU7CiB9CiAKLS8qKgotICogeGlsaW54X3BjaWVfcmVhZF9jb25maWcgLSBSZWFkIGNvbmZpZ3VyYXRpb24gc3BhY2UKLSAqIEBidXM6IFBDSSBCdXMgc3RydWN0dXJlCi0gKiBAZGV2Zm46IERldmljZS9mdW5jdGlvbgotICogQHdoZXJlOiBPZmZzZXQgZnJvbSBiYXNlCi0gKiBAc2l6ZTogQnl0ZS93b3JkL2R3b3JkCi0gKiBAdmFsOiBWYWx1ZSB0byBiZSByZWFkCi0gKgotICogUmV0dXJuOiBQQ0lCSU9TX1NVQ0NFU1NGVUwgb24gc3VjY2VzcwotICoJICAgUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EIG9uIGZhaWx1cmUKLSAqLwotc3RhdGljIGludCB4aWxpbnhfcGNpZV9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkJICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpCi17Ci0Jdm9pZCBfX2lvbWVtICphZGRyOwotCi0JaWYgKCF4aWxpbnhfcGNpZV92YWxpZF9kZXZpY2UoYnVzLCBkZXZmbikpIHsKLQkJKnZhbCA9IDB4RkZGRkZGRkY7Ci0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0JfQotCi0JYWRkciA9IHhpbGlueF9wY2llX2NvbmZpZ19iYXNlKGJ1cywgZGV2Zm4sIHdoZXJlKTsKLQotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJKnZhbCA9IHJlYWRiKGFkZHIpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCSp2YWwgPSByZWFkdyhhZGRyKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKnZhbCA9IHJlYWRsKGFkZHIpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi0vKioKLSAqIHhpbGlueF9wY2llX3dyaXRlX2NvbmZpZyAtIFdyaXRlIGNvbmZpZ3VyYXRpb24gc3BhY2UKLSAqIEBidXM6IFBDSSBCdXMgc3RydWN0dXJlCi0gKiBAZGV2Zm46IERldmljZS9mdW5jdGlvbgotICogQHdoZXJlOiBPZmZzZXQgZnJvbSBiYXNlCi0gKiBAc2l6ZTogQnl0ZS93b3JkL2R3b3JkCi0gKiBAdmFsOiBWYWx1ZSB0byBiZSB3cml0dGVuIHRvIGRldmljZQotICoKLSAqIFJldHVybjogUENJQklPU19TVUNDRVNTRlVMIG9uIHN1Y2Nlc3MKLSAqCSAgIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORCBvbiBmYWlsdXJlCi0gKi8KLXN0YXRpYyBpbnQgeGlsaW54X3BjaWVfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKLQkJCQkgICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHI7Ci0KLQlpZiAoIXhpbGlueF9wY2llX3ZhbGlkX2RldmljZShidXMsIGRldmZuKSkKLQkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKLQotCWFkZHIgPSB4aWxpbnhfcGNpZV9jb25maWdfYmFzZShidXMsIGRldmZuLCB3aGVyZSk7Ci0KLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCXdyaXRlYih2YWwsIGFkZHIpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXdyaXRldyh2YWwsIGFkZHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl3cml0ZWwodmFsLCBhZGRyKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQogLyogUENJZSBvcGVyYXRpb25zICovCiBzdGF0aWMgc3RydWN0IHBjaV9vcHMgeGlsaW54X3BjaWVfb3BzID0gewotCS5yZWFkICA9IHhpbGlueF9wY2llX3JlYWRfY29uZmlnLAotCS53cml0ZSA9IHhpbGlueF9wY2llX3dyaXRlX2NvbmZpZywKKwkubWFwX2J1cyA9IHhpbGlueF9wY2llX21hcF9idXMsCisJLnJlYWQJPSBwY2lfZ2VuZXJpY19jb25maWdfcmVhZCwKKwkud3JpdGUJPSBwY2lfZ2VuZXJpY19jb25maWdfd3JpdGUsCiB9OwogCiAvKiBNU0kgZnVuY3Rpb25zICovCkBAIC03MzcsNyArNjY3LDcgQEAKIAlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0OwogCXN0cnVjdCBvZl9wY2lfcmFuZ2VfcGFyc2VyIHBhcnNlcjsKIAlzdHJ1Y3Qgb2ZfcGNpX3JhbmdlIHJhbmdlOwotCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2Vfd2luZG93ICp3aW47CisJc3RydWN0IHJlc291cmNlX2VudHJ5ICp3aW47CiAJaW50IGVyciA9IDAsIG1lbV9yZXNubyA9IDA7CiAKIAkvKiBHZXQgdGhlIHJhbmdlcyAqLwpAQCAtODA3LDcgKzczNyw3IEBACiAKIGZyZWVfcmVzb3VyY2VzOgogCXJlbGVhc2VfY2hpbGRfcmVzb3VyY2VzKCZpb21lbV9yZXNvdXJjZSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh3aW4sICZwb3J0LT5yZXNvdXJjZXMsIGxpc3QpCisJcmVzb3VyY2VfbGlzdF9mb3JfZWFjaF9lbnRyeSh3aW4sICZwb3J0LT5yZXNvdXJjZXMpCiAJCWRldm1fa2ZyZWUoZGV2LCB3aW4tPnJlcyk7CiAJcGNpX2ZyZWVfcmVzb3VyY2VfbGlzdCgmcG9ydC0+cmVzb3VyY2VzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpX2hvdHBsdWdfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpX2hvdHBsdWdfY29yZS5jCmluZGV4IGE1YTdmZDguLjQ2ZGIyOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BjaV9ob3RwbHVnX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19jb3JlLmMKQEAgLTIxNCw4ICsyMTQsNyBAQAogCiAJa2ZyZWUoc2xvdC0+aG90cGx1Z19zbG90LT5pbmZvKTsKIAlrZnJlZShzbG90LT5ob3RwbHVnX3Nsb3QpOwotCWlmIChzbG90LT5kZXYpCi0JCXBjaV9kZXZfcHV0KHNsb3QtPmRldik7CisJcGNpX2Rldl9wdXQoc2xvdC0+ZGV2KTsKIAlrZnJlZShzbG90KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCmluZGV4IGZmMzJlODUuLmYwNTJlOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKQEAgLTUzMiw4ICs1MzIsNiBAQAogCQlwY2llaHBfZ3JlZW5fbGVkX29mZihwX3Nsb3QpOwogCQlicmVhazsKIAljYXNlIElOVF9QUkVTRU5DRV9PTjoKLQkJaWYgKCFIUF9TVVBSX1JNKGN0cmwpKQotCQkJYnJlYWs7CiAJCWN0cmxfZGJnKGN0cmwsICJTdXJwcmlzZSBJbnNlcnRpb25cbiIpOwogCQloYW5kbGVfc3VycHJpc2VfZXZlbnQocF9zbG90KTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3NnaV9ob3RwbHVnLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NnaV9ob3RwbHVnLmMKaW5kZXggYmFkYTIwOTkuLmMzMmZiNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2dpX2hvdHBsdWcuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NnaV9ob3RwbHVnLmMKQEAgLTQ3NSw3ICs0NzUsNyBAQAogCXN0cnVjdCBzbG90ICpzbG90ID0gYnNzX2hvdHBsdWdfc2xvdC0+cHJpdmF0ZTsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2LCAqdGVtcDsKIAlpbnQgcmM7Ci0JYWNwaV9vd25lcl9pZCBzc2R0X2lkID0gMDsKKwlhY3BpX2hhbmRsZSBzc2R0X2hkbCA9IE5VTEw7CiAKIAkvKiBBY3F1aXJlIHVwZGF0ZSBhY2Nlc3MgdG8gdGhlIGJ1cyAqLwogCW11dGV4X2xvY2soJnNuX2hvdHBsdWdfbXV0ZXgpOwpAQCAtNTIyLDcgKzUyMiw3IEBACiAJCQlpZiAoQUNQSV9TVUNDRVNTKHJldCkgJiYKIAkJCSAgICAoYWRyPj4xNikgPT0gKHNsb3QtPmRldmljZV9udW0gKyAxKSkgewogCQkJCS8qIHJldGFpbiB0aGUgb3duZXIgaWQgKi8KLQkJCQlhY3BpX2dldF9pZChjaGFuZGxlLCAmc3NkdF9pZCk7CisJCQkJc3NkdF9oZGwgPSBjaGFuZGxlOwogCiAJCQkJcmV0ID0gYWNwaV9idXNfZ2V0X2RldmljZShjaGFuZGxlLAogCQkJCQkJCSAgJmRldmljZSk7CkBAIC01NDcsMTIgKzU0NywxMyBAQAogCXBjaV91bmxvY2tfcmVzY2FuX3JlbW92ZSgpOwogCiAJLyogUmVtb3ZlIHRoZSBTU0RUIGZvciB0aGUgc2xvdCBmcm9tIHRoZSBBQ1BJIG5hbWVzcGFjZSAqLwotCWlmIChTTl9BQ1BJX0JBU0VfU1VQUE9SVCgpICYmIHNzZHRfaWQpIHsKKwlpZiAoU05fQUNQSV9CQVNFX1NVUFBPUlQoKSAmJiBzc2R0X2hkbCkgewogCQlhY3BpX3N0YXR1cyByZXQ7Ci0JCXJldCA9IGFjcGlfdW5sb2FkX3RhYmxlX2lkKHNzZHRfaWQpOworCQlyZXQgPSBhY3BpX3VubG9hZF9wYXJlbnRfdGFibGUoc3NkdF9oZGwpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHJldCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGFjcGlfdW5sb2FkX3RhYmxlX2lkIGZhaWxlZCAoMHgleCkgZm9yIGlkICVkXG4iLAotCQkJICAgICAgIF9fZnVuY19fLCByZXQsIHNzZHRfaWQpOworCQkJYWNwaV9oYW5kbGVfZXJyKHNzZHRfaGRsLAorCQkJCQkiJXM6IGFjcGlfdW5sb2FkX3BhcmVudF90YWJsZSBmYWlsZWQgKDB4JXgpXG4iLAorCQkJCQlfX2Z1bmNfXywgcmV0KTsKIAkJCS8qIHRyeSB0byBjb250aW51ZSBvbiAqLwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbXNpLmMgYi9kcml2ZXJzL3BjaS9tc2kuYwppbmRleCBmZDYwODA2Li5jM2U3ZGZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9tc2kuYworKysgYi9kcml2ZXJzL3BjaS9tc2kuYwpAQCAtNjk0LDExICs2OTQsMTYgQEAKIHsKIAlyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyOwogCXUzMiB0YWJsZV9vZmZzZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBiaXI7CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBkZXYtPm1zaXhfY2FwICsgUENJX01TSVhfVEFCTEUsCiAJCQkgICAgICAmdGFibGVfb2Zmc2V0KTsKIAliaXIgPSAodTgpKHRhYmxlX29mZnNldCAmIFBDSV9NU0lYX1RBQkxFX0JJUik7CisJZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MoZGV2LCBiaXIpOworCWlmICghZmxhZ3MgfHwgKGZsYWdzICYgSU9SRVNPVVJDRV9VTlNFVCkpCisJCXJldHVybiBOVUxMOworCiAJdGFibGVfb2Zmc2V0ICY9IFBDSV9NU0lYX1RBQkxFX09GRlNFVDsKIAlwaHlzX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBiaXIpICsgdGFibGVfb2Zmc2V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jIGIvZHJpdmVycy9wY2kvcGNpLWFjcGkuYwppbmRleCAzNTQyMTUwLi40ODkwNjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktYWNwaS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1hY3BpLmMKQEAgLTUwMSwxMiArNTAxLDI5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBib29sIGFjcGlfcGNpX25lZWRfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IGFjcGlfZGV2aWNlICphZGV2ID0gQUNQSV9DT01QQU5JT04oJmRldi0+ZGV2KTsKKworCWlmICghYWRldiB8fCAhYWNwaV9kZXZpY2VfcG93ZXJfbWFuYWdlYWJsZShhZGV2KSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZkZXYtPmRldikgIT0gISFhZGV2LT53YWtldXAucHJlcGFyZV9jb3VudCkKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoYWNwaV90YXJnZXRfc3lzdGVtX3N0YXRlKCkgPT0gQUNQSV9TVEFURV9TMCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuICEhYWRldi0+cG93ZXIuZmxhZ3MuZHN3X3ByZXNlbnQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX3BsYXRmb3JtX3BtX29wcyBhY3BpX3BjaV9wbGF0Zm9ybV9wbSA9IHsKIAkuaXNfbWFuYWdlYWJsZSA9IGFjcGlfcGNpX3Bvd2VyX21hbmFnZWFibGUsCiAJLnNldF9zdGF0ZSA9IGFjcGlfcGNpX3NldF9wb3dlcl9zdGF0ZSwKIAkuY2hvb3NlX3N0YXRlID0gYWNwaV9wY2lfY2hvb3NlX3N0YXRlLAogCS5zbGVlcF93YWtlID0gYWNwaV9wY2lfc2xlZXBfd2FrZSwKIAkucnVuX3dha2UgPSBhY3BpX3BjaV9ydW5fd2FrZSwKKwkubmVlZF9yZXN1bWUgPSBhY3BpX3BjaV9uZWVkX3Jlc3VtZSwKIH07CiAKIHZvaWQgYWNwaV9wY2lfYWRkX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IDg4N2U2YmQuLjNjYjIyMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTY1Myw3ICs2NTMsNiBAQAogc3RhdGljIGludCBwY2lfcG1fcHJlcGFyZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwotCWludCBlcnJvciA9IDA7CiAKIAkvKgogCSAqIERldmljZXMgaGF2aW5nIHBvd2VyLmlnbm9yZV9jaGlsZHJlbiBzZXQgbWF5IHN0aWxsIGJlIG5lY2Vzc2FyeSBmb3IKQEAgLTY2MiwxMCArNjYxLDEyIEBACiAJaWYgKGRldi0+cG93ZXIuaWdub3JlX2NoaWxkcmVuKQogCQlwbV9ydW50aW1lX3Jlc3VtZShkZXYpOwogCi0JaWYgKGRydiAmJiBkcnYtPnBtICYmIGRydi0+cG0tPnByZXBhcmUpCi0JCWVycm9yID0gZHJ2LT5wbS0+cHJlcGFyZShkZXYpOwotCi0JcmV0dXJuIGVycm9yOworCWlmIChkcnYgJiYgZHJ2LT5wbSAmJiBkcnYtPnBtLT5wcmVwYXJlKSB7CisJCWludCBlcnJvciA9IGRydi0+cG0tPnByZXBhcmUoZGV2KTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCX0KKwlyZXR1cm4gcGNpX2Rldl9rZWVwX3N1c3BlbmRlZCh0b19wY2lfZGV2KGRldikpOwogfQogCiAKQEAgLTEzODMsNyArMTM4NCw3IEBACiAJaWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgIlBDSV9TTE9UX05BTUU9JXMiLCBwY2lfbmFtZShwZGV2KSkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKGFkZF91ZXZlbnRfdmFyKGVudiwgIk1PREFMSUFTPXBjaTp2JTA4WGQlMDhYc3YlMDhYc2QlMDhYYmMlMDJYc2MlMDJYaSUwMngiLAorCWlmIChhZGRfdWV2ZW50X3ZhcihlbnYsICJNT0RBTElBUz1wY2k6diUwOFhkJTA4WHN2JTA4WHNkJTA4WGJjJTAyWHNjJTAyWGklMDJYIiwKIAkJCSAgIHBkZXYtPnZlbmRvciwgcGRldi0+ZGV2aWNlLAogCQkJICAgcGRldi0+c3Vic3lzdGVtX3ZlbmRvciwgcGRldi0+c3Vic3lzdGVtX2RldmljZSwKIAkJCSAgICh1OCkocGRldi0+Y2xhc3MgPj4gMTYpLCAodTgpKHBkZXYtPmNsYXNzID4+IDgpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCBlOWQ0ZmQ4Li44MWYwNmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMTAsNiArMTAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC01MjEsNiArNTIzLDExIEBACiAJCQlwY2lfcGxhdGZvcm1fcG0tPnJ1bl93YWtlKGRldiwgZW5hYmxlKSA6IC1FTk9ERVY7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBwbGF0Zm9ybV9wY2lfbmVlZF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gcGNpX3BsYXRmb3JtX3BtID8gcGNpX3BsYXRmb3JtX3BtLT5uZWVkX3Jlc3VtZShkZXYpIDogZmFsc2U7Cit9CisKIC8qKgogICogcGNpX3Jhd19zZXRfcG93ZXJfc3RhdGUgLSBVc2UgUENJIFBNIHJlZ2lzdGVycyB0byBzZXQgdGhlIHBvd2VyIHN0YXRlIG9mCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIFBDSSBkZXZpY2UKQEAgLTE5OTksNiArMjAwNiwyNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNpX2Rldl9ydW5fd2FrZSk7CiAKKy8qKgorICogcGNpX2Rldl9rZWVwX3N1c3BlbmRlZCAtIENoZWNrIGlmIHRoZSBkZXZpY2UgY2FuIHN0YXkgaW4gdGhlIHN1c3BlbmRlZCBzdGF0ZS4KKyAqIEBwY2lfZGV2OiBEZXZpY2UgdG8gY2hlY2suCisgKgorICogUmV0dXJuICd0cnVlJyBpZiB0aGUgZGV2aWNlIGlzIHJ1bnRpbWUtc3VzcGVuZGVkLCBpdCBkb2Vzbid0IGhhdmUgdG8gYmUKKyAqIHJlY29uZmlndXJlZCBkdWUgdG8gd2FrZXVwIHNldHRpbmdzIGRpZmZlcmVuY2UgYmV0d2VlbiBzeXN0ZW0gYW5kIHJ1bnRpbWUKKyAqIHN1c3BlbmQgYW5kIHRoZSBjdXJyZW50IHBvd2VyIHN0YXRlIG9mIGl0IGlzIHN1aXRhYmxlIGZvciB0aGUgdXBjb21pbmcKKyAqIChzeXN0ZW0pIHRyYW5zaXRpb24uCisgKi8KK2Jvb2wgcGNpX2Rldl9rZWVwX3N1c3BlbmRlZChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGNpX2Rldi0+ZGV2OworCisJaWYgKCFwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYpCisJICAgIHx8IChkZXZpY2VfY2FuX3dha2V1cChkZXYpICYmICFkZXZpY2VfbWF5X3dha2V1cChkZXYpKQorCSAgICB8fCBwbGF0Zm9ybV9wY2lfbmVlZF9yZXN1bWUocGNpX2RldikpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBwY2lfdGFyZ2V0X3N0YXRlKHBjaV9kZXYpID09IHBjaV9kZXYtPmN1cnJlbnRfc3RhdGU7Cit9CisKIHZvaWQgcGNpX2NvbmZpZ19wbV9ydW50aW1lX2dldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwpAQCAtMzE5Nyw3ICszMjI1LDcgQEAKIHsKIAl1MTYgY3NyOwogCi0JaWYgKCFkZXYtPnBtX2NhcCkKKwlpZiAoIWRldi0+cG1fY2FwIHx8IGRldi0+ZGV2X2ZsYWdzICYgUENJX0RFVl9GTEFHU19OT19QTV9SRVNFVCkKIAkJcmV0dXJuIC1FTk9UVFk7CiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIGRldi0+cG1fY2FwICsgUENJX1BNX0NUUkwsICZjc3IpOwpAQCAtNDQ3MSw2ICs0NDk5LDUzIEBACiB7CiAJcmV0dXJuIGF0b21pY19pbmNfcmV0dXJuKCZfX2RvbWFpbl9ucik7CiB9CisKKyNpZmRlZiBDT05GSUdfUENJX0RPTUFJTlNfR0VORVJJQwordm9pZCBwY2lfYnVzX2Fzc2lnbl9kb21haW5fbnIoc3RydWN0IHBjaV9idXMgKmJ1cywgc3RydWN0IGRldmljZSAqcGFyZW50KQoreworCXN0YXRpYyBpbnQgdXNlX2R0X2RvbWFpbnMgPSAtMTsKKwlpbnQgZG9tYWluID0gb2ZfZ2V0X3BjaV9kb21haW5fbnIocGFyZW50LT5vZl9ub2RlKTsKKworCS8qCisJICogQ2hlY2sgRFQgZG9tYWluIGFuZCB1c2VfZHRfZG9tYWlucyB2YWx1ZXMuCisJICoKKwkgKiBJZiBEVCBkb21haW4gcHJvcGVydHkgaXMgdmFsaWQgKGRvbWFpbiA+PSAwKSBhbmQKKwkgKiB1c2VfZHRfZG9tYWlucyAhPSAwLCB0aGUgRFQgYXNzaWdubWVudCBpcyB2YWxpZCBzaW5jZSB0aGlzIG1lYW5zCisJICogd2UgaGF2ZSBub3QgcHJldmlvdXNseSBhbGxvY2F0ZWQgYSBkb21haW4gbnVtYmVyIGJ5IHVzaW5nCisJICogcGNpX2dldF9uZXdfZG9tYWluX25yKCk7IHdlIHNob3VsZCBhbHNvIHVwZGF0ZSB1c2VfZHRfZG9tYWlucyB0bworCSAqIDEsIHRvIGluZGljYXRlIHRoYXQgd2UgaGF2ZSBqdXN0IGFzc2lnbmVkIGEgZG9tYWluIG51bWJlciBmcm9tCisJICogRFQuCisJICoKKwkgKiBJZiBEVCBkb21haW4gcHJvcGVydHkgdmFsdWUgaXMgbm90IHZhbGlkIChpZSBkb21haW4gPCAwKSwgYW5kIHdlCisJICogaGF2ZSBub3QgcHJldmlvdXNseSBhc3NpZ25lZCBhIGRvbWFpbiBudW1iZXIgZnJvbSBEVAorCSAqICh1c2VfZHRfZG9tYWlucyAhPSAxKSB3ZSBzaG91bGQgYXNzaWduIGEgZG9tYWluIG51bWJlciBieQorCSAqIHVzaW5nIHRoZToKKwkgKgorCSAqIHBjaV9nZXRfbmV3X2RvbWFpbl9ucigpCisJICoKKwkgKiBBUEkgYW5kIHVwZGF0ZSB0aGUgdXNlX2R0X2RvbWFpbnMgdmFsdWUgdG8ga2VlcCB0cmFjayBvZiBtZXRob2Qgd2UKKwkgKiBhcmUgdXNpbmcgdG8gYXNzaWduIGRvbWFpbiBudW1iZXJzICh1c2VfZHRfZG9tYWlucyA9IDApLgorCSAqCisJICogQWxsIG90aGVyIGNvbWJpbmF0aW9ucyBpbXBseSB3ZSBoYXZlIGEgcGxhdGZvcm0gdGhhdCBpcyB0cnlpbmcKKwkgKiB0byBtaXggZG9tYWluIG51bWJlcnMgb2J0YWluZWQgZnJvbSBEVCBhbmQgcGNpX2dldF9uZXdfZG9tYWluX25yKCksCisJICogd2hpY2ggaXMgYSByZWNpcGUgZm9yIGRvbWFpbiBtaXNoYW5kbGluZyBhbmQgaXQgaXMgcHJldmVudGVkIGJ5CisJICogaW52YWxpZGF0aW5nIHRoZSBkb21haW4gdmFsdWUgKGRvbWFpbiA9IC0xKSBhbmQgcHJpbnRpbmcgYQorCSAqIGNvcnJlc3BvbmRpbmcgZXJyb3IuCisJICovCisJaWYgKGRvbWFpbiA+PSAwICYmIHVzZV9kdF9kb21haW5zKSB7CisJCXVzZV9kdF9kb21haW5zID0gMTsKKwl9IGVsc2UgaWYgKGRvbWFpbiA8IDAgJiYgdXNlX2R0X2RvbWFpbnMgIT0gMSkgeworCQl1c2VfZHRfZG9tYWlucyA9IDA7CisJCWRvbWFpbiA9IHBjaV9nZXRfbmV3X2RvbWFpbl9ucigpOworCX0gZWxzZSB7CisJCWRldl9lcnIocGFyZW50LCAiTm9kZSAlcyBoYXMgaW5jb25zaXN0ZW50IFwibGludXgscGNpLWRvbWFpblwiIHByb3BlcnR5IGluIERUXG4iLAorCQkJcGFyZW50LT5vZl9ub2RlLT5mdWxsX25hbWUpOworCQlkb21haW4gPSAtMTsKKwl9CisKKwlidXMtPmRvbWFpbl9uciA9IGRvbWFpbjsKK30KKyNlbmRpZgogI2VuZGlmCiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaAppbmRleCBkNTQ2MzJhLi40MDkxZjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtNTAsNiArNTAsMTAgQEAKICAqCQlmb3IgZ2l2ZW4gZGV2aWNlICh0aGUgZGV2aWNlJ3Mgd2FrZS11cCBjYXBhYmlsaXR5IGhhcyB0byBiZQogICoJCWVuYWJsZWQgYnkgQHNsZWVwX3dha2UgZm9yIHRoaXMgZmVhdHVyZSB0byB3b3JrKQogICoKKyAqIEBuZWVkX3Jlc3VtZTogcmV0dXJucyAndHJ1ZScgaWYgdGhlIGdpdmVuIGRldmljZSAod2hpY2ggaXMgY3VycmVudGx5CisgKgkJc3VzcGVuZGVkKSBuZWVkcyB0byBiZSByZXN1bWVkIHRvIGJlIGNvbmZpZ3VyZWQgZm9yIHN5c3RlbQorICoJCXdha2V1cC4KKyAqCiAgKiBJZiBnaXZlbiBwbGF0Zm9ybSBpcyBnZW5lcmFsbHkgY2FwYWJsZSBvZiBwb3dlciBtYW5hZ2luZyBQQ0kgZGV2aWNlcywgYWxsIG9mCiAgKiB0aGVzZSBjYWxsYmFja3MgYXJlIG1hbmRhdG9yeS4KICAqLwpAQCAtNTksNiArNjMsNyBAQAogCXBjaV9wb3dlcl90ICgqY2hvb3NlX3N0YXRlKShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIAlpbnQgKCpzbGVlcF93YWtlKShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBib29sIGVuYWJsZSk7CiAJaW50ICgqcnVuX3dha2UpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGJvb2wgZW5hYmxlKTsKKwlib29sICgqbmVlZF9yZXN1bWUpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogfTsKIAogaW50IHBjaV9zZXRfcGxhdGZvcm1fcG0oc3RydWN0IHBjaV9wbGF0Zm9ybV9wbV9vcHMgKm9wcyk7CkBAIC02Nyw2ICs3Miw3IEBACiB2b2lkIHBjaV9kaXNhYmxlX2VuYWJsZWRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaV9maW5pc2hfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IF9fcGNpX3BtZV93YWtldXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqaWduKTsKK2Jvb2wgcGNpX2Rldl9rZWVwX3N1c3BlbmRlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgcGNpX2NvbmZpZ19wbV9ydW50aW1lX2dldChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgcGNpX2NvbmZpZ19wbV9ydW50aW1lX3B1dChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIHZvaWQgcGNpX3BtX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2FzcG0uYyBiL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCmluZGV4IGUxZTcwMjYuLjgyMDc0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCkBAIC04NTksNyArODU5LDEwIEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHBjaWVfbGlua19zdGF0ZSAqbGluaywgKnJvb3QgPSBwZGV2LT5saW5rX3N0YXRlLT5yb290OwotCXUzMiB2YWwgPSBidWZbMF0gLSAnMCcsIHN0YXRlID0gMDsKKwl1MzIgdmFsLCBzdGF0ZSA9IDA7CisKKwlpZiAoa3N0cnRvdWludChidWYsIDEwLCAmdmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYXNwbV9kaXNhYmxlZCkKIAkJcmV0dXJuIC1FUEVSTTsKQEAgLTkwMCwxNSArOTAzLDE0IEBACiAJCXNpemVfdCBuKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCWludCBzdGF0ZTsKKwlib29sIHN0YXRlOwogCi0JaWYgKG4gPCAxKQorCWlmIChzdHJ0b2Jvb2woYnVmLCAmc3RhdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlzdGF0ZSA9IGJ1ZlswXS0nMCc7CiAKIAlkb3duX3JlYWQoJnBjaV9idXNfc2VtKTsKIAltdXRleF9sb2NrKCZhc3BtX2xvY2spOwotCXBjaWVfc2V0X2Nsa3BtX25vY2hlY2socGRldi0+bGlua19zdGF0ZSwgISFzdGF0ZSk7CisJcGNpZV9zZXRfY2xrcG1fbm9jaGVjayhwZGV2LT5saW5rX3N0YXRlLCBzdGF0ZSk7CiAJbXV0ZXhfdW5sb2NrKCZhc3BtX2xvY2spOwogCXVwX3JlYWQoJnBjaV9idXNfc2VtKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKaW5kZXggMjMyMTJmOC4uOGQyZjQwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcHJvYmUuYworKysgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCkBAIC0xODk1LDcgKzE4OTUsNyBAQAogCWludCBlcnJvcjsKIAlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpicmlkZ2U7CiAJc3RydWN0IHBjaV9idXMgKmIsICpiMjsKLQlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlX3dpbmRvdyAqd2luZG93LCAqbjsKKwlzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKndpbmRvdywgKm47CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldDsKIAljaGFyIGJ1c19hZGRyWzY0XTsKQEAgLTE5NTksOCArMTk1OSw4IEBACiAJCXByaW50ayhLRVJOX0lORk8gIlBDSSBob3N0IGJyaWRnZSB0byBidXMgJXNcbiIsIGRldl9uYW1lKCZiLT5kZXYpKTsKIAogCS8qIEFkZCBpbml0aWFsIHJlc291cmNlcyB0byB0aGUgYnVzICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdpbmRvdywgbiwgcmVzb3VyY2VzLCBsaXN0KSB7Ci0JCWxpc3RfbW92ZV90YWlsKCZ3aW5kb3ctPmxpc3QsICZicmlkZ2UtPndpbmRvd3MpOworCXJlc291cmNlX2xpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3aW5kb3csIG4sIHJlc291cmNlcykgeworCQlsaXN0X21vdmVfdGFpbCgmd2luZG93LT5ub2RlLCAmYnJpZGdlLT53aW5kb3dzKTsKIAkJcmVzID0gd2luZG93LT5yZXM7CiAJCW9mZnNldCA9IHdpbmRvdy0+b2Zmc2V0OwogCQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfQlVTKQpAQCAtMjA2MCwxMiArMjA2MCwxMiBAQAogc3RydWN0IHBjaV9idXMgKnBjaV9zY2FuX3Jvb3RfYnVzKHN0cnVjdCBkZXZpY2UgKnBhcmVudCwgaW50IGJ1cywKIAkJc3RydWN0IHBjaV9vcHMgKm9wcywgdm9pZCAqc3lzZGF0YSwgc3RydWN0IGxpc3RfaGVhZCAqcmVzb3VyY2VzKQogewotCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2Vfd2luZG93ICp3aW5kb3c7CisJc3RydWN0IHJlc291cmNlX2VudHJ5ICp3aW5kb3c7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwogCXN0cnVjdCBwY2lfYnVzICpiOwogCWludCBtYXg7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdpbmRvdywgcmVzb3VyY2VzLCBsaXN0KQorCXJlc291cmNlX2xpc3RfZm9yX2VhY2hfZW50cnkod2luZG93LCByZXNvdXJjZXMpCiAJCWlmICh3aW5kb3ctPnJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0JVUykgewogCQkJZm91bmQgPSB0cnVlOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IGU1MjM1NmEuLjg1ZjI0N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0zMjQsMTggKzMyNCw1MiBAQAogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfUzMsCVBDSV9ERVZJQ0VfSURfUzNfODY4LAkJcXVpcmtfczNfNjRNKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1MzLAlQQ0lfREVWSUNFX0lEX1MzXzk2OCwJCXF1aXJrX3MzXzY0TSk7CiAKK3N0YXRpYyB2b2lkIHF1aXJrX2lvKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwb3MsIHVuc2lnbmVkIHNpemUsCisJCSAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKwl1MzIgcmVnaW9uOworCXN0cnVjdCBwY2lfYnVzX3JlZ2lvbiBidXNfcmVnaW9uOworCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gZGV2LT5yZXNvdXJjZSArIHBvczsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCArIChwb3MgPDwgMiksICZyZWdpb24pOworCisJaWYgKCFyZWdpb24pCisJCXJldHVybjsKKworCXJlcy0+bmFtZSA9IHBjaV9uYW1lKGRldik7CisJcmVzLT5mbGFncyA9IHJlZ2lvbiAmIH5QQ0lfQkFTRV9BRERSRVNTX0lPX01BU0s7CisJcmVzLT5mbGFncyB8PQorCQkoSU9SRVNPVVJDRV9JTyB8IElPUkVTT1VSQ0VfUENJX0ZJWEVEIHwgSU9SRVNPVVJDRV9TSVpFQUxJR04pOworCXJlZ2lvbiAmPSB+KHNpemUgLSAxKTsKKworCS8qIENvbnZlcnQgZnJvbSBQQ0kgYnVzIHRvIHJlc291cmNlIHNwYWNlICovCisJYnVzX3JlZ2lvbi5zdGFydCA9IHJlZ2lvbjsKKwlidXNfcmVnaW9uLmVuZCA9IHJlZ2lvbiArIHNpemUgLSAxOworCXBjaWJpb3NfYnVzX3RvX3Jlc291cmNlKGRldi0+YnVzLCByZXMsICZidXNfcmVnaW9uKTsKKworCWRldl9pbmZvKCZkZXYtPmRldiwgRldfQlVHICIlcyBxdWlyazogcmVnIDB4JXg6ICVwUlxuIiwKKwkJIG5hbWUsIFBDSV9CQVNFX0FERFJFU1NfMCArIChwb3MgPDwgMiksIHJlcyk7Cit9CisKIC8qCiAgKiBTb21lIENTNTUzNiBCSU9TZXMgKGZvciBleGFtcGxlLCB0aGUgU29la3JpcyBORVQ1NTAxIGJvYXJkIHcvIGNvbUJJT1MKICAqIHZlci4gMS4zMyAgMjAwNzAxMDMpIGRvbid0IHNldCB0aGUgY29ycmVjdCBJU0EgUENJIHJlZ2lvbiBoZWFkZXIgaW5mby4KICAqIEJBUjAgc2hvdWxkIGJlIDggYnl0ZXM7IGluc3RlYWQsIGl0IG1heSBiZSBzZXQgdG8gc29tZXRoaW5nIGxpa2UgOGsKICAqICh3aGljaCBjb25mbGljdHMgdy8gQkFSMSdzIG1lbW9yeSByYW5nZSkuCisgKgorICogQ1M1NTN4J3MgSVNBIFBDSSBCQVJzIG1heSBhbHNvIGJlIHJlYWQtb25seSAocmVmOgorICogaHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnL3Nob3dfYnVnLmNnaT9pZD04NTk5MSAtIENvbW1lbnQgIzQgZm9yd2FyZCkuCiAgKi8KIHN0YXRpYyB2b2lkIHF1aXJrX2NzNTUzNl92c2Eoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKKwlzdGF0aWMgY2hhciAqbmFtZSA9ICJDUzU1MzYgSVNBIGJyaWRnZSI7CisKIAlpZiAocGNpX3Jlc291cmNlX2xlbihkZXYsIDApICE9IDgpIHsKLQkJc3RydWN0IHJlc291cmNlICpyZXMgPSAmZGV2LT5yZXNvdXJjZVswXTsKLQkJcmVzLT5lbmQgPSByZXMtPnN0YXJ0ICsgOCAtIDE7Ci0JCWRldl9pbmZvKCZkZXYtPmRldiwgIkNTNTUzNiBJU0EgYnJpZGdlIGJ1ZyBkZXRlY3RlZCAoaW5jb3JyZWN0IGhlYWRlcik7IHdvcmthcm91bmQgYXBwbGllZFxuIik7CisJCXF1aXJrX2lvKGRldiwgMCwgICA4LCBuYW1lKTsJLyogU01CICovCisJCXF1aXJrX2lvKGRldiwgMSwgMjU2LCBuYW1lKTsJLyogR1BJTyAqLworCQlxdWlya19pbyhkZXYsIDIsICA2NCwgbmFtZSk7CS8qIE1GR1BUICovCisJCWRldl9pbmZvKCZkZXYtPmRldiwgIiVzIGJ1ZyBkZXRlY3RlZCAoaW5jb3JyZWN0IGhlYWRlcik7IHdvcmthcm91bmQgYXBwbGllZFxuIiwKKwkJCSBuYW1lKTsKIAl9CiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9JU0EsIHF1aXJrX2NzNTUzNl92c2EpOwpAQCAtMzA0Miw2ICszMDc2LDI3IEBACiAgKi8KIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FUSEVST1MsIDB4MDAzMCwgcXVpcmtfbm9fYnVzX3Jlc2V0KTsKIAorc3RhdGljIHZvaWQgcXVpcmtfbm9fcG1fcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwkvKgorCSAqIFdlIGNhbid0IGRvIGEgYnVzIHJlc2V0IG9uIHJvb3QgYnVzIGRldmljZXMsIGJ1dCBhbiBpbmVmZmVjdGl2ZQorCSAqIFBNIHJlc2V0IG1heSBiZSBiZXR0ZXIgdGhhbiBub3RoaW5nLgorCSAqLworCWlmICghcGNpX2lzX3Jvb3RfYnVzKGRldi0+YnVzKSkKKwkJZGV2LT5kZXZfZmxhZ3MgfD0gUENJX0RFVl9GTEFHU19OT19QTV9SRVNFVDsKK30KKworLyoKKyAqIFNvbWUgQU1EL0FUSSBHUFVTIChIRDg1NzAgLSBPbGFuZCkgcmVwb3J0IHRoYXQgYSBEM2hvdC0+RDAgdHJhbnNpdGlvbgorICogY2F1c2VzIGEgcmVzZXQgKGkuZS4sIHRoZXkgYWR2ZXJ0aXNlIE5vU29mdFJzdC0pLiAgVGhpcyB0cmFuc2l0aW9uIHNlZW1zCisgKiB0byBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgZGV2aWNlOiBpdCByZXRhaW5zIHRoZSBmcmFtZWJ1ZmZlciBjb250ZW50cyBhbmQKKyAqIG1vbml0b3Igc3luYy4gIEFkdmVydGlzaW5nIHRoaXMgc3VwcG9ydCBtYWtlcyBvdGhlciBsYXllcnMsIGxpa2UgVkZJTywKKyAqIGFzc3VtZSBwY2lfcmVzZXRfZnVuY3Rpb24oKSBpcyB2aWFibGUgZm9yIHRoaXMgZGV2aWNlLiAgTWFyayBpdCBhcworICogdW5hdmFpbGFibGUgdG8gc2tpcCBpdCB3aGVuIHRlc3RpbmcgcmVzZXQgbWV0aG9kcy4KKyAqLworREVDTEFSRV9QQ0lfRklYVVBfQ0xBU1NfSEVBREVSKFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfQU5ZX0lELAorCQkJICAgICAgIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSwgOCwgcXVpcmtfbm9fcG1fcmVzZXQpOworCiAjaWZkZWYgQ09ORklHX0FDUEkKIC8qCiAgKiBBcHBsZTogU2h1dGRvd24gQ2FjdHVzIFJpZGdlIFRodW5kZXJib2x0IGNvbnRyb2xsZXIuCkBAIC0zNTQyLDYgKzM1OTcsNDQgQEAKIAkJCSBxdWlya19kbWFfZnVuYzFfYWxpYXMpOwogCiAvKgorICogU29tZSBkZXZpY2VzIERNQSB3aXRoIHRoZSB3cm9uZyBkZXZmbiwgbm90IGp1c3QgdGhlIHdyb25nIGZ1bmN0aW9uLgorICogcXVpcmtfZml4ZWRfZG1hX2FsaWFzKCkgdXNlcyB0aGlzIHRhYmxlIHRvIGNyZWF0ZSBmaXhlZCBhbGlhc2VzLCB3aGVyZQorICogdGhlIGFsaWFzIGlzICJmaXhlZCIgYW5kIGluZGVwZW5kZW50IG9mIHRoZSBkZXZpY2UgZGV2Zm4uCisgKgorICogRm9yIGV4YW1wbGUsIHRoZSBBZGFwdGVjIDM0MDUgaXMgYSBQQ0llIGNhcmQgd2l0aCBhbiBJbnRlbCA4MDMzMyBJL08KKyAqIHByb2Nlc3Nvci4gIFRvIHNvZnR3YXJlLCB0aGlzIGFwcGVhcnMgYXMgYSBQQ0llLXRvLVBDSS9YIGJyaWRnZSB3aXRoIGEKKyAqIHNpbmdsZSBkZXZpY2Ugb24gdGhlIHNlY29uZGFyeSBidXMuICBJbiByZWFsaXR5LCB0aGUgc2luZ2xlIGV4cG9zZWQKKyAqIGRldmljZSBhdCAwZS4wIGlzIHRoZSBBZGRyZXNzIFRyYW5zbGF0aW9uIFVuaXQgKEFUVSkgb2YgdGhlIGNvbnRyb2xsZXIKKyAqIHRoYXQgcHJvdmlkZXMgYSBicmlkZ2UgdG8gdGhlIGludGVybmFsIGJ1cyBvZiB0aGUgSS9PIHByb2Nlc3Nvci4gIFRoZQorICogY29udHJvbGxlciBzdXBwb3J0cyBwcml2YXRlIGRldmljZXMsIHdoaWNoIGNhbiBiZSBoaWRkZW4gZnJvbSBQQ0kgY29uZmlnCisgKiBzcGFjZS4gIEluIHRoZSBjYXNlIG9mIHRoZSBBZGFwdGVjIDM0MDUsIGEgcHJpdmF0ZSBkZXZpY2UgYXQgMDEuMAorICogYXBwZWFycyB0byBiZSB0aGUgRE1BIGVuZ2luZSwgd2hpY2ggdGhlcmVmb3JlIG5lZWRzIHRvIGJlY29tZSBhIERNQQorICogYWxpYXMgZm9yIHRoZSBkZXZpY2UuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmaXhlZF9kbWFfYWxpYXNfdGJsW10gPSB7CisJeyBQQ0lfREVWSUNFX1NVQihQQ0lfVkVORE9SX0lEX0FEQVBURUMyLCAweDAyODUsCisJCQkgUENJX1ZFTkRPUl9JRF9BREFQVEVDMiwgMHgwMmJiKSwgLyogQWRhcHRlYyAzNDA1ICovCisJICAuZHJpdmVyX2RhdGEgPSBQQ0lfREVWRk4oMSwgMCkgfSwKKwl7IDAgfQorfTsKKworc3RhdGljIHZvaWQgcXVpcmtfZml4ZWRfZG1hX2FsaWFzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkOworCisJaWQgPSBwY2lfbWF0Y2hfaWQoZml4ZWRfZG1hX2FsaWFzX3RibCwgZGV2KTsKKwlpZiAoaWQpIHsKKwkJZGV2LT5kbWFfYWxpYXNfZGV2Zm4gPSBpZC0+ZHJpdmVyX2RhdGE7CisJCWRldi0+ZGV2X2ZsYWdzIHw9IFBDSV9ERVZfRkxBR1NfRE1BX0FMSUFTX0RFVkZOOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJFbmFibGluZyBmaXhlZCBETUEgYWxpYXMgdG8gJTAyeC4lZFxuIiwKKwkJCSBQQ0lfU0xPVChkZXYtPmRtYV9hbGlhc19kZXZmbiksCisJCQkgUENJX0ZVTkMoZGV2LT5kbWFfYWxpYXNfZGV2Zm4pKTsKKwl9Cit9CisKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FEQVBURUMyLCAweDAyODUsIHF1aXJrX2ZpeGVkX2RtYV9hbGlhcyk7CisKKy8qCiAgKiBBIGZldyBQQ0llLXRvLVBDSSBicmlkZ2VzIGZhaWwgdG8gZXhwb3NlIGEgUENJZSBjYXBhYmlsaXR5LCByZXN1bHRpbmcgaW4KICAqIHVzaW5nIHRoZSB3cm9uZyBETUEgYWxpYXMgZm9yIHRoZSBkZXZpY2UuICBTb21lIG9mIHRoZXNlIGRldmljZXMgY2FuIGJlCiAgKiB1c2VkIGFzIGVpdGhlciBmb3J3YXJkIG9yIHJldmVyc2UgYnJpZGdlcywgc28gd2UgbmVlZCB0byB0ZXN0IHdoZXRoZXIgdGhlCkBAIC0zNjQ0LDYgKzM3MzcsOSBAQAogCTB4OWM5OCwgMHg5Yzk5LCAweDljOWEsIDB4OWM5YiwKIAkvKiBQYXRzYnVyZyAoWDc5KSBQQ0ggKi8KIAkweDFkMTAsIDB4MWQxMiwgMHgxZDE0LCAweDFkMTYsIDB4MWQxOCwgMHgxZDFhLCAweDFkMWMsIDB4MWQxZSwKKwkvKiBXZWxsc2J1cmcgKFg5OSkgUENIICovCisJMHg4ZDEwLCAweDhkMTEsIDB4OGQxMiwgMHg4ZDEzLCAweDhkMTQsIDB4OGQxNSwgMHg4ZDE2LCAweDhkMTcsCisJMHg4ZDE4LCAweDhkMTksIDB4OGQxYSwgMHg4ZDFiLCAweDhkMWMsIDB4OGQxZCwgMHg4ZDFlLAogfTsKIAogc3RhdGljIGJvb2wgcGNpX3F1aXJrX2ludGVsX3BjaF9hY3NfbWF0Y2goc3RydWN0IHBjaV9kZXYgKmRldikKQEAgLTM3MjcsNiArMzgyMyw4IEBACiAJeyBQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDE1NTEsIHBjaV9xdWlya19tZl9lbmRwb2ludF9hY3MgfSwKIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTU1OCwgcGNpX3F1aXJrX21mX2VuZHBvaW50X2FjcyB9LAogCXsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0FOWV9JRCwgcGNpX3F1aXJrX2ludGVsX3BjaF9hY3MgfSwKKwl7IDB4MTlhMiwgMHg3MTAsIHBjaV9xdWlya19tZl9lbmRwb2ludF9hY3MgfSwgLyogRW11bGV4IEJFMy1SICovCisJeyAweDEwZGYsIDB4NzIwLCBwY2lfcXVpcmtfbWZfZW5kcG9pbnRfYWNzIH0sIC8qIEVtdWxleCBTa3loYXdrLVIgKi8KIAl7IDAgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcm9tLmMgYi9kcml2ZXJzL3BjaS9yb20uYwppbmRleCBmOTU1ZWRiLi5lYjBhZDUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9yb20uYworKysgYi9kcml2ZXJzL3BjaS9yb20uYwpAQCAtNzEsNiArNzEsNyBAQAogewogCXZvaWQgX19pb21lbSAqaW1hZ2U7CiAJaW50IGxhc3RfaW1hZ2U7CisJdW5zaWduZWQgbGVuZ3RoOwogCiAJaW1hZ2UgPSByb207CiAJZG8gewpAQCAtOTMsOSArOTQsOSBAQAogCQlpZiAocmVhZGIocGRzICsgMykgIT0gJ1InKQogCQkJYnJlYWs7CiAJCWxhc3RfaW1hZ2UgPSByZWFkYihwZHMgKyAyMSkgJiAweDgwOwotCQkvKiB0aGlzIGxlbmd0aCBpcyByZWxpYWJsZSAqLwotCQlpbWFnZSArPSByZWFkdyhwZHMgKyAxNikgKiA1MTI7Ci0JfSB3aGlsZSAoIWxhc3RfaW1hZ2UpOworCQlsZW5ndGggPSByZWFkdyhwZHMgKyAxNik7CisJCWltYWdlICs9IGxlbmd0aCAqIDUxMjsKKwl9IHdoaWxlIChsZW5ndGggJiYgIWxhc3RfaW1hZ2UpOwogCiAJLyogbmV2ZXIgcmV0dXJuIGEgc2l6ZSBsYXJnZXIgdGhhbiB0aGUgUENJIHJlc291cmNlIHdpbmRvdyAqLwogCS8qIHRoZXJlIGFyZSBrbm93biBST01zIHRoYXQgZ2V0IHRoZSBzaXplIHdyb25nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9LY29uZmlnIGIvZHJpdmVycy9waHkvS2NvbmZpZwppbmRleCBjY2FkODgwLi4yNmE3NjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGh5L0tjb25maWcKQEAgLTI3Nyw0ICsyNzcsMTEgQEAKIAkgIEVuYWJsZSB0aGlzIHRvIHN1cHBvcnQgdGhlIFVTQiB0cmFuc2NlaXZlciB0aGF0IGlzIHBhcnQgb2YKIAkgIFNUTWljcm9lbGVjdHJvbmljcyBTVGlINDF4IFNvQyBzZXJpZXMuCiAKK2NvbmZpZyBQSFlfUUNPTV9VRlMKKwl0cmlzdGF0ZSAiUXVhbGNvbW0gVUZTIFBIWSBkcml2ZXIiCisJZGVwZW5kcyBvbiBPRiAmJiBBUkNIX01TTQorCXNlbGVjdCBHRU5FUklDX1BIWQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIFVGUyBQSFkgb24gUUNPTSBjaGlwc2V0cy4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvTWFrZWZpbGUgYi9kcml2ZXJzL3BoeS9NYWtlZmlsZQppbmRleCBhYTc0Zjk2Li5jZmJiNzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BoeS9NYWtlZmlsZQpAQCAtMzQsMyArMzQsNiBAQAogb2JqLSQoQ09ORklHX1BIWV9YR0VORSkJCQkrPSBwaHkteGdlbmUubwogb2JqLSQoQ09ORklHX1BIWV9TVElINDA3X1VTQikJCSs9IHBoeS1zdGloNDA3LXVzYi5vCiBvYmotJChDT05GSUdfUEhZX1NUSUg0MVhfVVNCKQkJKz0gcGh5LXN0aWg0MXgtdXNiLm8KK29iai0kKENPTkZJR19QSFlfUUNPTV9VRlMpIAkrPSBwaHktcWNvbS11ZnMubworb2JqLSQoQ09ORklHX1BIWV9RQ09NX1VGUykgCSs9IHBoeS1xY29tLXVmcy1xbXAtMjBubS5vCitvYmotJChDT05GSUdfUEhZX1FDT01fVUZTKSAJKz0gcGh5LXFjb20tdWZzLXFtcC0xNG5tLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3BoeS1taXBoeTM2NXguYyBiL2RyaXZlcnMvcGh5L3BoeS1taXBoeTM2NXguYwppbmRleCA2YWI0M2E4Li42YzgwMTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BoeS9waHktbWlwaHkzNjV4LmMKKysrIGIvZHJpdmVycy9waHkvcGh5LW1pcGh5MzY1eC5jCkBAIC0xNDEsNyArMTQxLDcgQEAKIAlib29sIHBjaWVfdHhfcG9sX2ludjsKIAlib29sIHNhdGFfdHhfcG9sX2ludjsKIAl1MzIgc2F0YV9nZW47Ci0JdTY0IGN0cmxyZWc7CisJdTMyIGN0cmxyZWc7CiAJdTggdHlwZTsKIH07CiAKQEAgLTE3OSw3ICsxNzksNyBAQAogCWJvb2wgc2F0YSA9IChtaXBoeV9waHktPnR5cGUgPT0gTUlQSFlfVFlQRV9TQVRBKTsKIAogCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMobWlwaHlfZGV2LT5yZWdtYXAsCi0JCQkJICAodW5zaWduZWQgaW50KW1pcGh5X3BoeS0+Y3RybHJlZywKKwkJCQkgIG1pcGh5X3BoeS0+Y3RybHJlZywKIAkJCQkgIFNZU0NGR19TRUxFQ1RfU0FUQV9NQVNLLAogCQkJCSAgc2F0YSA8PCBTWVNDRkdfU0VMRUNUX1NBVEFfUE9TKTsKIH0KQEAgLTQ0NSw3ICs0NDUsNiBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5bm9kZSA9IG1pcGh5X3BoeS0+cGh5LT5kZXYub2Zfbm9kZTsKIAljb25zdCBjaGFyICpuYW1lOwotCWNvbnN0IF9fYmUzMiAqdGFkZHI7CiAJaW50IHR5cGUgPSBtaXBoeV9waHktPnR5cGU7CiAJaW50IHJldDsKIApAQCAtNDU1LDIyICs0NTQsNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmICghc3RybmNtcChuYW1lLCAic3lzY2ZnIiwgNikpIHsKLQkJdGFkZHIgPSBvZl9nZXRfYWRkcmVzcyhwaHlub2RlLCBpbmRleCwgTlVMTCwgTlVMTCk7Ci0JCWlmICghdGFkZHIpIHsKLQkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGZldGNoIHN5c2NmZyBhZGRyZXNzXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbWlwaHlfcGh5LT5jdHJscmVnID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3MocGh5bm9kZSwgdGFkZHIpOwotCQlpZiAobWlwaHlfcGh5LT5jdHJscmVnID09IE9GX0JBRF9BRERSKSB7Ci0JCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byB0cmFuc2xhdGUgc3lzY2ZnIGFkZHJlc3NcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlyZXR1cm4gMDsKLQl9Ci0KIAlpZiAoISgoIXN0cm5jbXAobmFtZSwgInNhdGEiLCA0KSAmJiB0eXBlID09IE1JUEhZX1RZUEVfU0FUQSkgfHwKIAkgICAgICAoIXN0cm5jbXAobmFtZSwgInBjaWUiLCA0KSAmJiB0eXBlID09IE1JUEhZX1RZUEVfUENJRSkpKQogCQlyZXR1cm4gMDsKQEAgLTYwNiw3ICs1ODksMTUgQEAKIAkJCXJldHVybiByZXQ7CiAKIAkJcGh5X3NldF9kcnZkYXRhKHBoeSwgbWlwaHlfZGV2LT5waHlzW3BvcnRdKTsKKwogCQlwb3J0Kys7CisJCS8qIHN5c2NvbmZpZyBvZmZzZXRzIGFyZSBpbmRleGVkIGZyb20gMSAqLworCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMl9pbmRleChucCwgInN0LHN5c2NmZyIsIHBvcnQsCisJCQkJCSZtaXBoeV9waHktPmN0cmxyZWcpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBzeXNjb25maWcgb2Zmc2V0IGZvdW5kXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KIAl9CiAKIAlwcm92aWRlciA9IGRldm1fb2ZfcGh5X3Byb3ZpZGVyX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIG1pcGh5MzY1eF94bGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9waHktcWNvbS11ZnMtaS5oIGIvZHJpdmVycy9waHkvcGh5LXFjb20tdWZzLWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTFhMzkxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9waHkvcGh5LXFjb20tdWZzLWkuaApAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE1LCBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgVUZTX1FDT01fUEhZX0lfSF8KKyNkZWZpbmUgVUZTX1FDT01fUEhZX0lfSF8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5LXFjb20tdWZzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjZGVmaW5lIHJlYWRsX3BvbGxfdGltZW91dChhZGRyLCB2YWwsIGNvbmQsIHNsZWVwX3VzLCB0aW1lb3V0X3VzKSBcCisoeyBcCisJa3RpbWVfdCB0aW1lb3V0ID0ga3RpbWVfYWRkX3VzKGt0aW1lX2dldCgpLCB0aW1lb3V0X3VzKTsgXAorCW1pZ2h0X3NsZWVwX2lmKHRpbWVvdXRfdXMpOyBcCisJZm9yICg7OykgeyBcCisJCSh2YWwpID0gcmVhZGwoYWRkcik7IFwKKwkJaWYgKGNvbmQpIFwKKwkJCWJyZWFrOyBcCisJCWlmICh0aW1lb3V0X3VzICYmIGt0aW1lX2NvbXBhcmUoa3RpbWVfZ2V0KCksIHRpbWVvdXQpID4gMCkgeyBcCisJCQkodmFsKSA9IHJlYWRsKGFkZHIpOyBcCisJCQlicmVhazsgXAorCQl9IFwKKwkJaWYgKHNsZWVwX3VzKSBcCisJCQl1c2xlZXBfcmFuZ2UoRElWX1JPVU5EX1VQKHNsZWVwX3VzLCA0KSwgc2xlZXBfdXMpOyBcCisJfSBcCisJKGNvbmQpID8gMCA6IC1FVElNRURPVVQ7IFwKK30pCisKKyNkZWZpbmUgVUZTX1FDT01fUEhZX0NBTF9FTlRSWShyZWcsIHZhbCkJXAorCXsJCQkJXAorCQkucmVnX29mZnNldCA9IHJlZywJXAorCQkuY2ZnX3ZhbHVlID0gdmFsLAlcCisJfQorCisjZGVmaW5lIFVGU19RQ09NX1BIWV9OQU1FX0xFTgkzMAorCitlbnVtIHsKKwlNQVNLX1NFUkRFU19TVEFSVCAgICAgICA9IDB4MSwKKwlNQVNLX1BDU19SRUFEWSAgICAgICAgICA9IDB4MSwKK307CisKK2VudW0geworCU9GRlNFVF9TRVJERVNfU1RBUlQgICAgID0gMHgwLAorfTsKKworc3RydWN0IHVmc19xY29tX3BoeV9zdG9yZWRfYXR0cmlidXRlcyB7CisJdTMyIGF0dDsKKwl1MzIgdmFsdWU7Cit9OworCisKK3N0cnVjdCB1ZnNfcWNvbV9waHlfY2FsaWJyYXRpb24geworCXUzMiByZWdfb2Zmc2V0OworCXUzMiBjZmdfdmFsdWU7Cit9OworCitzdHJ1Y3QgdWZzX3Fjb21fcGh5X3ZyZWcgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHJlZ3VsYXRvciAqcmVnOworCWludCBtYXhfdUE7CisJaW50IG1pbl91VjsKKwlpbnQgbWF4X3VWOworCWJvb2wgZW5hYmxlZDsKKwlib29sIGlzX2Fsd2F5c19vbjsKK307CisKK3N0cnVjdCB1ZnNfcWNvbV9waHkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJdm9pZCBfX2lvbWVtICptbWlvOworCXZvaWQgX19pb21lbSAqZGV2X3JlZl9jbGtfY3RybF9tbWlvOworCXN0cnVjdCBjbGsgKnR4X2lmYWNlX2NsazsKKwlzdHJ1Y3QgY2xrICpyeF9pZmFjZV9jbGs7CisJYm9vbCBpc19pZmFjZV9jbGtfZW5hYmxlZDsKKwlzdHJ1Y3QgY2xrICpyZWZfY2xrX3NyYzsKKwlzdHJ1Y3QgY2xrICpyZWZfY2xrX3BhcmVudDsKKwlzdHJ1Y3QgY2xrICpyZWZfY2xrOworCWJvb2wgaXNfcmVmX2Nsa19lbmFibGVkOworCWJvb2wgaXNfZGV2X3JlZl9jbGtfZW5hYmxlZDsKKwlzdHJ1Y3QgdWZzX3Fjb21fcGh5X3ZyZWcgdmRkYV9wbGw7CisJc3RydWN0IHVmc19xY29tX3BoeV92cmVnIHZkZGFfcGh5OworCXN0cnVjdCB1ZnNfcWNvbV9waHlfdnJlZyB2ZGRwX3JlZl9jbGs7CisJdW5zaWduZWQgaW50IHF1aXJrczsKKworCS8qCisJKiBJZiBVRlMgbGluayBpcyBwdXQgaW50byBIaWJlcm44IGFuZCBpZiBVRlMgUEhZIGFuYWxvZyBoYXJkd2FyZSBpcworCSogcG93ZXIgY29sbGFwc2VkIChieSBjbGVhcmluZyBVRlNfUEhZX1BPV0VSX0RPV05fQ09OVFJPTCksIEhpYmVybjgKKwkqIGV4aXQgbWlnaHQgZmFpbCBldmVuIGFmdGVyIHBvd2VyaW5nIG9uIFVGUyBQSFkgYW5hbG9nIGhhcmR3YXJlLgorCSogRW5hYmxpbmcgdGhpcyBxdWlyayB3aWxsIGhlbHAgdG8gc29sdmUgYWJvdmUgaXNzdWUgYnkgZG9pbmcKKwkqIGN1c3RvbSBQSFkgc2V0dGluZ3MganVzdCBiZWZvcmUgUEhZIGFuYWxvZyBwb3dlciBjb2xsYXBzZS4KKwkqLworCSNkZWZpbmUgVUZTX1FDT01fUEhZX1FVSVJLX0hJQkVSTjhfRVhJVF9BRlRFUl9QSFlfUFdSX0NPTExBUFNFCUJJVCgwKQorCisJdTggaG9zdF9jdHJsX3Jldl9tYWpvcjsKKwl1MTYgaG9zdF9jdHJsX3Jldl9taW5vcjsKKwl1MTYgaG9zdF9jdHJsX3Jldl9zdGVwOworCisJY2hhciBuYW1lW1VGU19RQ09NX1BIWV9OQU1FX0xFTl07CisJc3RydWN0IHVmc19xY29tX3BoeV9jYWxpYnJhdGlvbiAqY2FjaGVkX3JlZ3M7CisJaW50IGNhY2hlZF9yZWdzX3RhYmxlX3NpemU7CisJYm9vbCBpc19wb3dlcmVkX29uOworCXN0cnVjdCB1ZnNfcWNvbV9waHlfc3BlY2lmaWNfb3BzICpwaHlfc3BlY19vcHM7Cit9OworCisvKioKKyAqIHN0cnVjdCB1ZnNfcWNvbV9waHlfc3BlY2lmaWNfb3BzIC0gc2V0IG9mIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucyB3aGljaCBoYXZlIGEKKyAqIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIHBlciBwaHkuIEVhY2ggVUZTIHBoeSwgc2hvdWxkIGltcGxlbWVudAorICogdGhvc2UgZnVuY3Rpb25zIGFjY29yZGluZyB0byBpdHMgc3BlYyBhbmQgcmVxdWlyZW1lbnRzCisgKiBAY2FsaWJyYXRlX3BoeTogcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgY2FsaWJyYXRlIHRoZSBwaHkKKyAqIEBzdGFydF9zZXJkZXM6IHBvaW50ZXIgdG8gYSBmdW5jdGlvbiB0aGF0IHN0YXJ0cyB0aGUgc2VyZGVzCisgKiBAaXNfcGh5c2ljYWxfY29kaW5nX3N1YmxheWVyX3JlYWR5OiBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdAorICogY2hlY2tzIHBjcyByZWFkaW5lc3MuIHJldHVybnMgMCBmb3Igc3VjY2VzcyBhbmQgbm9uLXplcm8gZm9yIGVycm9yLgorICogQHNldF90eF9sYW5lX2VuYWJsZTogcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgZW5hYmxlIHR4IGxhbmVzCisgKiBAcG93ZXJfY29udHJvbDogcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRoYXQgY29udHJvbHMgYW5hbG9nIHJhaWwgb2YgcGh5CisgKiBhbmQgd3JpdGVzIHRvIFFTRVJERVNfUlhfU0lHREVUX0NOVFJMIGF0dHJpYnV0ZQorICovCitzdHJ1Y3QgdWZzX3Fjb21fcGh5X3NwZWNpZmljX29wcyB7CisJaW50ICgqY2FsaWJyYXRlX3BoeSkoc3RydWN0IHVmc19xY29tX3BoeSAqcGh5LCBib29sIGlzX3JhdGVfQik7CisJdm9pZCAoKnN0YXJ0X3NlcmRlcykoc3RydWN0IHVmc19xY29tX3BoeSAqcGh5KTsKKwlpbnQgKCppc19waHlzaWNhbF9jb2Rpbmdfc3VibGF5ZXJfcmVhZHkpKHN0cnVjdCB1ZnNfcWNvbV9waHkgKnBoeSk7CisJdm9pZCAoKnNldF90eF9sYW5lX2VuYWJsZSkoc3RydWN0IHVmc19xY29tX3BoeSAqcGh5LCB1MzIgdmFsKTsKKwl2b2lkICgqcG93ZXJfY29udHJvbCkoc3RydWN0IHVmc19xY29tX3BoeSAqcGh5LCBib29sIHZhbCk7Cit9OworCitzdHJ1Y3QgdWZzX3Fjb21fcGh5ICpnZXRfdWZzX3Fjb21fcGh5KHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5KTsKK2ludCB1ZnNfcWNvbV9waHlfcG93ZXJfb24oc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpOworaW50IHVmc19xY29tX3BoeV9wb3dlcl9vZmYoc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpOworaW50IHVmc19xY29tX3BoeV9leGl0KHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5KTsKK2ludCB1ZnNfcWNvbV9waHlfaW5pdF9jbGtzKHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5LAorCQkJc3RydWN0IHVmc19xY29tX3BoeSAqcGh5X2NvbW1vbik7CitpbnQgdWZzX3Fjb21fcGh5X2luaXRfdnJlZ3VsYXRvcnMoc3RydWN0IHBoeSAqZ2VuZXJpY19waHksCisJCQlzdHJ1Y3QgdWZzX3Fjb21fcGh5ICpwaHlfY29tbW9uKTsKK2ludCB1ZnNfcWNvbV9waHlfcmVtb3ZlKHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5LAorCQkgICAgICAgc3RydWN0IHVmc19xY29tX3BoeSAqdWZzX3Fjb21fcGh5KTsKK3N0cnVjdCBwaHkgKnVmc19xY29tX3BoeV9nZW5lcmljX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQlzdHJ1Y3QgdWZzX3Fjb21fcGh5ICpjb21tb25fY2ZnLAorCQkJc3RydWN0IHBoeV9vcHMgKnVmc19xY29tX3BoeV9nZW5fb3BzLAorCQkJc3RydWN0IHVmc19xY29tX3BoeV9zcGVjaWZpY19vcHMgKnBoeV9zcGVjX29wcyk7CitpbnQgdWZzX3Fjb21fcGh5X2NhbGlicmF0ZShzdHJ1Y3QgdWZzX3Fjb21fcGh5ICp1ZnNfcWNvbV9waHksCisJCQlzdHJ1Y3QgdWZzX3Fjb21fcGh5X2NhbGlicmF0aW9uICp0YmxfQSwgaW50IHRibF9zaXplX0EsCisJCQlzdHJ1Y3QgdWZzX3Fjb21fcGh5X2NhbGlicmF0aW9uICp0YmxfQiwgaW50IHRibF9zaXplX0IsCisJCQlib29sIGlzX3JhdGVfQik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3BoeS1xY29tLXVmcy1xbXAtMTRubS5jIGIvZHJpdmVycy9waHkvcGh5LXFjb20tdWZzLXFtcC0xNG5tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjVmYzUwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGh5L3BoeS1xY29tLXVmcy1xbXAtMTRubS5jCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTUsIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgInBoeS1xY29tLXVmcy1xbXAtMTRubS5oIgorCisjZGVmaW5lIFVGU19QSFlfTkFNRSAidWZzX3BoeV9xbXBfMTRubSIKKyNkZWZpbmUgVUZTX1BIWV9WRERBX1BIWV9VVgkoOTI1MDAwKQorCitzdGF0aWMKK2ludCB1ZnNfcWNvbV9waHlfcW1wXzE0bm1fcGh5X2NhbGlicmF0ZShzdHJ1Y3QgdWZzX3Fjb21fcGh5ICp1ZnNfcWNvbV9waHksCisJCQkJCWJvb2wgaXNfcmF0ZV9CKQoreworCWludCB0Ymxfc2l6ZV9BID0gQVJSQVlfU0laRShwaHlfY2FsX3RhYmxlX3JhdGVfQSk7CisJaW50IHRibF9zaXplX0IgPSBBUlJBWV9TSVpFKHBoeV9jYWxfdGFibGVfcmF0ZV9CKTsKKwlpbnQgZXJyOworCisJZXJyID0gdWZzX3Fjb21fcGh5X2NhbGlicmF0ZSh1ZnNfcWNvbV9waHksIHBoeV9jYWxfdGFibGVfcmF0ZV9BLAorCQl0Ymxfc2l6ZV9BLCBwaHlfY2FsX3RhYmxlX3JhdGVfQiwgdGJsX3NpemVfQiwgaXNfcmF0ZV9CKTsKKworCWlmIChlcnIpCisJCWRldl9lcnIodWZzX3Fjb21fcGh5LT5kZXYsCisJCQkiJXM6IHVmc19xY29tX3BoeV9jYWxpYnJhdGUoKSBmYWlsZWQgJWRcbiIsCisJCQlfX2Z1bmNfXywgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMKK3ZvaWQgdWZzX3Fjb21fcGh5X3FtcF8xNG5tX2FkdmVydGlzZV9xdWlya3Moc3RydWN0IHVmc19xY29tX3BoeSAqcGh5X2NvbW1vbikKK3sKKwlwaHlfY29tbW9uLT5xdWlya3MgPQorCQlVRlNfUUNPTV9QSFlfUVVJUktfSElCRVJOOF9FWElUX0FGVEVSX1BIWV9QV1JfQ09MTEFQU0U7Cit9CisKK3N0YXRpYyBpbnQgdWZzX3Fjb21fcGh5X3FtcF8xNG5tX2luaXQoc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpCit7CisJc3RydWN0IHVmc19xY29tX3BoeV9xbXBfMTRubSAqcGh5ID0gcGh5X2dldF9kcnZkYXRhKGdlbmVyaWNfcGh5KTsKKwlzdHJ1Y3QgdWZzX3Fjb21fcGh5ICpwaHlfY29tbW9uID0gJnBoeS0+Y29tbW9uX2NmZzsKKwlpbnQgZXJyOworCisJZXJyID0gdWZzX3Fjb21fcGh5X2luaXRfY2xrcyhnZW5lcmljX3BoeSwgcGh5X2NvbW1vbik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKHBoeV9jb21tb24tPmRldiwgIiVzOiB1ZnNfcWNvbV9waHlfaW5pdF9jbGtzKCkgZmFpbGVkICVkXG4iLAorCQkJX19mdW5jX18sIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IHVmc19xY29tX3BoeV9pbml0X3ZyZWd1bGF0b3JzKGdlbmVyaWNfcGh5LCBwaHlfY29tbW9uKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIocGh5X2NvbW1vbi0+ZGV2LCAiJXM6IHVmc19xY29tX3BoeV9pbml0X3ZyZWd1bGF0b3JzKCkgZmFpbGVkICVkXG4iLAorCQkJX19mdW5jX18sIGVycik7CisJCWdvdG8gb3V0OworCX0KKwlwaHlfY29tbW9uLT52ZGRhX3BoeS5tYXhfdVYgPSBVRlNfUEhZX1ZEREFfUEhZX1VWOworCXBoeV9jb21tb24tPnZkZGFfcGh5Lm1pbl91ViA9IFVGU19QSFlfVkREQV9QSFlfVVY7CisKKwl1ZnNfcWNvbV9waHlfcW1wXzE0bm1fYWR2ZXJ0aXNlX3F1aXJrcyhwaHlfY29tbW9uKTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYwordm9pZCB1ZnNfcWNvbV9waHlfcW1wXzE0bm1fcG93ZXJfY29udHJvbChzdHJ1Y3QgdWZzX3Fjb21fcGh5ICpwaHksIGJvb2wgdmFsKQoreworCXdyaXRlbF9yZWxheGVkKHZhbCA/IDB4MSA6IDB4MCwgcGh5LT5tbWlvICsgVUZTX1BIWV9QT1dFUl9ET1dOX0NPTlRST0wpOworCS8qCisJICogQmVmb3JlIGFueSB0cmFuc2FjdGlvbnMgaW52b2x2aW5nIFBIWSwgZW5zdXJlIFBIWSBrbm93cworCSAqIHRoYXQgaXQncyBhbmFsb2cgcmFpbCBpcyBwb3dlcmVkIE9OIChvciBPRkYpLgorCSAqLworCW1iKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgdWZzX3Fjb21fcGh5X3FtcF8xNG5tX3NldF90eF9sYW5lX2VuYWJsZShzdHJ1Y3QgdWZzX3Fjb21fcGh5ICpwaHksIHUzMiB2YWwpCit7CisJLyoKKwkgKiAxNG5tIFBIWSBkb2VzIG5vdCBoYXZlIFRYX0xBTkVfRU5BQkxFIHJlZ2lzdGVyLgorCSAqIEltcGxlbWVudCB0aGlzIGZ1bmN0aW9uIHNvIGFzIG5vdCB0byBwcm9wYWdhdGUgZXJyb3IgdG8gY2FsbGVyLgorCSAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWZzX3Fjb21fcGh5X3FtcF8xNG5tX3N0YXJ0X3NlcmRlcyhzdHJ1Y3QgdWZzX3Fjb21fcGh5ICpwaHkpCit7CisJdTMyIHRtcDsKKworCXRtcCA9IHJlYWRsX3JlbGF4ZWQocGh5LT5tbWlvICsgVUZTX1BIWV9QSFlfU1RBUlQpOworCXRtcCAmPSB+TUFTS19TRVJERVNfU1RBUlQ7CisJdG1wIHw9ICgxIDw8IE9GRlNFVF9TRVJERVNfU1RBUlQpOworCXdyaXRlbF9yZWxheGVkKHRtcCwgcGh5LT5tbWlvICsgVUZTX1BIWV9QSFlfU1RBUlQpOworCS8qIEVuc3VyZSByZWdpc3RlciB2YWx1ZSBpcyBjb21taXR0ZWQgKi8KKwltYigpOworfQorCitzdGF0aWMgaW50IHVmc19xY29tX3BoeV9xbXBfMTRubV9pc19wY3NfcmVhZHkoc3RydWN0IHVmc19xY29tX3BoeSAqcGh5X2NvbW1vbikKK3sKKwlpbnQgZXJyID0gMDsKKwl1MzIgdmFsOworCisJZXJyID0gcmVhZGxfcG9sbF90aW1lb3V0KHBoeV9jb21tb24tPm1taW8gKyBVRlNfUEhZX1BDU19SRUFEWV9TVEFUVVMsCisJCXZhbCwgKHZhbCAmIE1BU0tfUENTX1JFQURZKSwgMTAsIDEwMDAwMDApOworCWlmIChlcnIpCisJCWRldl9lcnIocGh5X2NvbW1vbi0+ZGV2LCAiJXM6IHBvbGwgZm9yIHBjcyBmYWlsZWQgZXJyID0gJWRcbiIsCisJCQlfX2Z1bmNfXywgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IHBoeV9vcHMgdWZzX3Fjb21fcGh5X3FtcF8xNG5tX3BoeV9vcHMgPSB7CisJLmluaXQJCT0gdWZzX3Fjb21fcGh5X3FtcF8xNG5tX2luaXQsCisJLmV4aXQJCT0gdWZzX3Fjb21fcGh5X2V4aXQsCisJLnBvd2VyX29uCT0gdWZzX3Fjb21fcGh5X3Bvd2VyX29uLAorCS5wb3dlcl9vZmYJPSB1ZnNfcWNvbV9waHlfcG93ZXJfb2ZmLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWZzX3Fjb21fcGh5X3NwZWNpZmljX29wcyBwaHlfMTRubV9vcHMgPSB7CisJLmNhbGlicmF0ZV9waHkJCT0gdWZzX3Fjb21fcGh5X3FtcF8xNG5tX3BoeV9jYWxpYnJhdGUsCisJLnN0YXJ0X3NlcmRlcwkJPSB1ZnNfcWNvbV9waHlfcW1wXzE0bm1fc3RhcnRfc2VyZGVzLAorCS5pc19waHlzaWNhbF9jb2Rpbmdfc3VibGF5ZXJfcmVhZHkgPSB1ZnNfcWNvbV9waHlfcW1wXzE0bm1faXNfcGNzX3JlYWR5LAorCS5zZXRfdHhfbGFuZV9lbmFibGUJPSB1ZnNfcWNvbV9waHlfcW1wXzE0bm1fc2V0X3R4X2xhbmVfZW5hYmxlLAorCS5wb3dlcl9jb250cm9sCQk9IHVmc19xY29tX3BoeV9xbXBfMTRubV9wb3dlcl9jb250cm9sLAorfTsKKworc3RhdGljIGludCB1ZnNfcWNvbV9waHlfcW1wXzE0bm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5OworCXN0cnVjdCB1ZnNfcWNvbV9waHlfcW1wXzE0bm0gKnBoeTsKKwlpbnQgZXJyID0gMDsKKworCXBoeSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcGh5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaHkpIHsKKwkJZGV2X2VycihkZXYsICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHBoeVxuIiwgX19mdW5jX18pOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlnZW5lcmljX3BoeSA9IHVmc19xY29tX3BoeV9nZW5lcmljX3Byb2JlKHBkZXYsICZwaHktPmNvbW1vbl9jZmcsCisJCQkJJnVmc19xY29tX3BoeV9xbXBfMTRubV9waHlfb3BzLCAmcGh5XzE0bm1fb3BzKTsKKworCWlmICghZ2VuZXJpY19waHkpIHsKKwkJZGV2X2VycihkZXYsICIlczogdWZzX3Fjb21fcGh5X2dlbmVyaWNfcHJvYmUoKSBmYWlsZWRcbiIsCisJCQlfX2Z1bmNfXyk7CisJCWVyciA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCXBoeV9zZXRfZHJ2ZGF0YShnZW5lcmljX3BoeSwgcGh5KTsKKworCXN0cmxjcHkocGh5LT5jb21tb25fY2ZnLm5hbWUsIFVGU19QSFlfTkFNRSwKKwkJc2l6ZW9mKHBoeS0+Y29tbW9uX2NmZy5uYW1lKSk7CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHVmc19xY29tX3BoeV9xbXBfMTRubV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5ID0gdG9fcGh5KGRldik7CisJc3RydWN0IHVmc19xY29tX3BoeSAqdWZzX3Fjb21fcGh5ID0gZ2V0X3Vmc19xY29tX3BoeShnZW5lcmljX3BoeSk7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSB1ZnNfcWNvbV9waHlfcmVtb3ZlKGdlbmVyaWNfcGh5LCB1ZnNfcWNvbV9waHkpOworCWlmIChlcnIpCisJCWRldl9lcnIoZGV2LCAiJXM6IHVmc19xY29tX3BoeV9yZW1vdmUgZmFpbGVkID0gJWRcbiIsCisJCQlfX2Z1bmNfXywgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHVmc19xY29tX3BoeV9xbXBfMTRubV9vZl9tYXRjaFtdID0geworCXsuY29tcGF0aWJsZSA9ICJxY29tLHVmcy1waHktcW1wLTE0bm0ifSwKKwl7fSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB1ZnNfcWNvbV9waHlfcW1wXzE0bm1fb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1ZnNfcWNvbV9waHlfcW1wXzE0bm1fZHJpdmVyID0geworCS5wcm9iZSA9IHVmc19xY29tX3BoeV9xbXBfMTRubV9wcm9iZSwKKwkucmVtb3ZlID0gdWZzX3Fjb21fcGh5X3FtcF8xNG5tX3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkub2ZfbWF0Y2hfdGFibGUgPSB1ZnNfcWNvbV9waHlfcW1wXzE0bm1fb2ZfbWF0Y2gsCisJCS5uYW1lID0gInVmc19xY29tX3BoeV9xbXBfMTRubSIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHVmc19xY29tX3BoeV9xbXBfMTRubV9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlVuaXZlcnNhbCBGbGFzaCBTdG9yYWdlIChVRlMpIFFDT00gUEhZIFFNUCAxNG5tIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9waHktcWNvbS11ZnMtcW1wLTE0bm0uaCBiL2RyaXZlcnMvcGh5L3BoeS1xY29tLXVmcy1xbXAtMTRubS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZWZkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BoeS9waHktcWNvbS11ZnMtcW1wLTE0bm0uaApAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE1LCBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgVUZTX1FDT01fUEhZX1FNUF8xNE5NX0hfCisjZGVmaW5lIFVGU19RQ09NX1BIWV9RTVBfMTROTV9IXworCisjaW5jbHVkZSAicGh5LXFjb20tdWZzLWkuaCIKKworLyogUUNPTSBVRlMgUEhZIGNvbnRyb2wgcmVnaXN0ZXJzICovCisjZGVmaW5lIENPTV9PRkYoeCkJKDB4MDAwICsgeCkKKyNkZWZpbmUgUEhZX09GRih4KQkoMHhDMDAgKyB4KQorI2RlZmluZSBUWF9PRkYobiwgeCkJKDB4NDAwICsgKDB4NDAwICogbikgKyB4KQorI2RlZmluZSBSWF9PRkYobiwgeCkJKDB4NjAwICsgKDB4NDAwICogbikgKyB4KQorCisvKiBVRlMgUEhZIFFTRVJERVMgQ09NIHJlZ2lzdGVycyAqLworI2RlZmluZSBRU0VSREVTX0NPTV9CR19USU1FUgkJCUNPTV9PRkYoMHgwQykKKyNkZWZpbmUgUVNFUkRFU19DT01fQklBU19FTl9DTEtCVUZMUl9FTgkJQ09NX09GRigweDM0KQorI2RlZmluZSBRU0VSREVTX0NPTV9TWVNfQ0xLX0NUUkwJCUNPTV9PRkYoMHgzQykKKyNkZWZpbmUgUVNFUkRFU19DT01fTE9DS19DTVAxX01PREUwCQlDT01fT0ZGKDB4NEMpCisjZGVmaW5lIFFTRVJERVNfQ09NX0xPQ0tfQ01QMl9NT0RFMAkJQ09NX09GRigweDUwKQorI2RlZmluZSBRU0VSREVTX0NPTV9MT0NLX0NNUDNfTU9ERTAJCUNPTV9PRkYoMHg1NCkKKyNkZWZpbmUgUVNFUkRFU19DT01fTE9DS19DTVAxX01PREUxCQlDT01fT0ZGKDB4NTgpCisjZGVmaW5lIFFTRVJERVNfQ09NX0xPQ0tfQ01QMl9NT0RFMQkJQ09NX09GRigweDVDKQorI2RlZmluZSBRU0VSREVTX0NPTV9MT0NLX0NNUDNfTU9ERTEJCUNPTV9PRkYoMHg2MCkKKyNkZWZpbmUgUVNFUkRFU19DT01fQ1BfQ1RSTF9NT0RFMAkJQ09NX09GRigweDc4KQorI2RlZmluZSBRU0VSREVTX0NPTV9DUF9DVFJMX01PREUxCQlDT01fT0ZGKDB4N0MpCisjZGVmaW5lIFFTRVJERVNfQ09NX1BMTF9SQ1RSTF9NT0RFMAkJQ09NX09GRigweDg0KQorI2RlZmluZSBRU0VSREVTX0NPTV9QTExfUkNUUkxfTU9ERTEJCUNPTV9PRkYoMHg4OCkKKyNkZWZpbmUgUVNFUkRFU19DT01fUExMX0NDVFJMX01PREUwCQlDT01fT0ZGKDB4OTApCisjZGVmaW5lIFFTRVJERVNfQ09NX1BMTF9DQ1RSTF9NT0RFMQkJQ09NX09GRigweDk0KQorI2RlZmluZSBRU0VSREVTX0NPTV9TWVNDTEtfRU5fU0VMCQlDT01fT0ZGKDB4QUMpCisjZGVmaW5lIFFTRVJERVNfQ09NX1JFU0VUU01fQ05UUkwJCUNPTV9PRkYoMHhCNCkKKyNkZWZpbmUgUVNFUkRFU19DT01fTE9DS19DTVBfRU4JCQlDT01fT0ZGKDB4QzgpCisjZGVmaW5lIFFTRVJERVNfQ09NX0xPQ0tfQ01QX0NGRwkJQ09NX09GRigweENDKQorI2RlZmluZSBRU0VSREVTX0NPTV9ERUNfU1RBUlRfTU9ERTAJCUNPTV9PRkYoMHhEMCkKKyNkZWZpbmUgUVNFUkRFU19DT01fREVDX1NUQVJUX01PREUxCQlDT01fT0ZGKDB4RDQpCisjZGVmaW5lIFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUMV9NT0RFMAlDT01fT0ZGKDB4REMpCisjZGVmaW5lIFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUMl9NT0RFMAlDT01fT0ZGKDB4RTApCisjZGVmaW5lIFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUM19NT0RFMAlDT01fT0ZGKDB4RTQpCisjZGVmaW5lIFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUMV9NT0RFMQlDT01fT0ZGKDB4RTgpCisjZGVmaW5lIFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUMl9NT0RFMQlDT01fT0ZGKDB4RUMpCisjZGVmaW5lIFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUM19NT0RFMQlDT01fT0ZGKDB4RjApCisjZGVmaW5lIFFTRVJERVNfQ09NX0lOVEVHTE9PUF9HQUlOMF9NT0RFMAlDT01fT0ZGKDB4MTA4KQorI2RlZmluZSBRU0VSREVTX0NPTV9JTlRFR0xPT1BfR0FJTjFfTU9ERTAJQ09NX09GRigweDEwQykKKyNkZWZpbmUgUVNFUkRFU19DT01fSU5URUdMT09QX0dBSU4wX01PREUxCUNPTV9PRkYoMHgxMTApCisjZGVmaW5lIFFTRVJERVNfQ09NX0lOVEVHTE9PUF9HQUlOMV9NT0RFMQlDT01fT0ZGKDB4MTE0KQorI2RlZmluZSBRU0VSREVTX0NPTV9WQ09fVFVORV9DVFJMCQlDT01fT0ZGKDB4MTI0KQorI2RlZmluZSBRU0VSREVTX0NPTV9WQ09fVFVORV9NQVAJCUNPTV9PRkYoMHgxMjgpCisjZGVmaW5lIFFTRVJERVNfQ09NX1ZDT19UVU5FMV9NT0RFMAkJQ09NX09GRigweDEyQykKKyNkZWZpbmUgUVNFUkRFU19DT01fVkNPX1RVTkUyX01PREUwCQlDT01fT0ZGKDB4MTMwKQorI2RlZmluZSBRU0VSREVTX0NPTV9WQ09fVFVORTFfTU9ERTEJCUNPTV9PRkYoMHgxMzQpCisjZGVmaW5lIFFTRVJERVNfQ09NX1ZDT19UVU5FMl9NT0RFMQkJQ09NX09GRigweDEzOCkKKyNkZWZpbmUgUVNFUkRFU19DT01fVkNPX1RVTkVfVElNRVIxCQlDT01fT0ZGKDB4MTQ0KQorI2RlZmluZSBRU0VSREVTX0NPTV9WQ09fVFVORV9USU1FUjIJCUNPTV9PRkYoMHgxNDgpCisjZGVmaW5lIFFTRVJERVNfQ09NX0NMS19TRUxFQ1QJCQlDT01fT0ZGKDB4MTc0KQorI2RlZmluZSBRU0VSREVTX0NPTV9IU0NMS19TRUwJCQlDT01fT0ZGKDB4MTc4KQorI2RlZmluZSBRU0VSREVTX0NPTV9DT1JFQ0xLX0RJVgkJCUNPTV9PRkYoMHgxODQpCisjZGVmaW5lIFFTRVJERVNfQ09NX0NPUkVfQ0xLX0VOCQkJQ09NX09GRigweDE4QykKKyNkZWZpbmUgUVNFUkRFU19DT01fQ01OX0NPTkZJRwkJCUNPTV9PRkYoMHgxOTQpCisjZGVmaW5lIFFTRVJERVNfQ09NX1NWU19NT0RFX0NMS19TRUwJCUNPTV9PRkYoMHgxOUMpCisjZGVmaW5lIFFTRVJERVNfQ09NX0NPUkVDTEtfRElWX01PREUxCQlDT01fT0ZGKDB4MUJDKQorCisvKiBVRlMgUEhZIHJlZ2lzdGVycyAqLworI2RlZmluZSBVRlNfUEhZX1BIWV9TVEFSVAkJCVBIWV9PRkYoMHgwMCkKKyNkZWZpbmUgVUZTX1BIWV9QT1dFUl9ET1dOX0NPTlRST0wJCVBIWV9PRkYoMHgwNCkKKyNkZWZpbmUgVUZTX1BIWV9QQ1NfUkVBRFlfU1RBVFVTCQlQSFlfT0ZGKDB4MTY4KQorCisvKiBVRlMgUEhZIFRYIHJlZ2lzdGVycyAqLworI2RlZmluZSBRU0VSREVTX1RYX0hJR0haX1RSQU5TQ0VJVkVSX0JJQVNfRFJWUl9FTglUWF9PRkYoMCwgMHg2OCkKKyNkZWZpbmUgUVNFUkRFU19UWF9MQU5FX01PREUJCQkJVFhfT0ZGKDAsIDB4OTQpCisKKy8qIFVGUyBQSFkgUlggcmVnaXN0ZXJzICovCisjZGVmaW5lIFFTRVJERVNfUlhfVUNEUl9GQVNUTE9DS19GT19HQUlOCVJYX09GRigwLCAweDQwKQorI2RlZmluZSBRU0VSREVTX1JYX1JYX1RFUk1fQlcJCQlSWF9PRkYoMCwgMHg5MCkKKyNkZWZpbmUgUVNFUkRFU19SWF9SWF9FUV9HQUlOMV9MU0IJCVJYX09GRigwLCAweEM0KQorI2RlZmluZSBRU0VSREVTX1JYX1JYX0VRX0dBSU4xX01TQgkJUlhfT0ZGKDAsIDB4QzgpCisjZGVmaW5lIFFTRVJERVNfUlhfUlhfRVFfR0FJTjJfTFNCCQlSWF9PRkYoMCwgMHhDQykKKyNkZWZpbmUgUVNFUkRFU19SWF9SWF9FUV9HQUlOMl9NU0IJCVJYX09GRigwLCAweEQwKQorI2RlZmluZSBRU0VSREVTX1JYX1JYX0VRVV9BREFQVE9SX0NOVFJMMglSWF9PRkYoMCwgMHhEOCkKKyNkZWZpbmUgUVNFUkRFU19SWF9TSUdERVRfQ05UUkwJCQlSWF9PRkYoMCwgMHgxMTQpCisjZGVmaW5lIFFTRVJERVNfUlhfU0lHREVUX0xWTAkJCVJYX09GRigwLCAweDExOCkKKyNkZWZpbmUgUVNFUkRFU19SWF9TSUdERVRfREVHTElUQ0hfQ05UUkwJUlhfT0ZGKDAsIDB4MTFDKQorI2RlZmluZSBRU0VSREVTX1JYX1JYX0lOVEVSRkFDRV9NT0RFCQlSWF9PRkYoMCwgMHgxMkMpCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSByZXByZXNlbnRzIHRoZSAxNG5tIHNwZWNpZmljIHBoeS4KKyAqIGNvbW1vbl9jZmcgTVVTVCByZW1haW4gdGhlIGZpcnN0IGZpZWxkIGluIHRoaXMgc3RydWN0dXJlCisgKiBpbiBjYXNlIGV4dHJhIGZpZWxkcyBhcmUgYWRkZWQuIFRoaXMgd2F5LCB3aGVuIGNhbGxpbmcKKyAqIGdldF91ZnNfcWNvbV9waHkoKSBvZiBnZW5lcmljIHBoeSwgd2UgY2FuIGV4dHJhY3QgdGhlCisgKiBjb21tb24gcGh5IHN0cnVjdHVyZSAoc3RydWN0IHVmc19xY29tX3BoeSkgb3V0IG9mIGl0CisgKiByZWdhcmRsZXNzIG9mIHRoZSByZWxldmFudCBzcGVjaWZpYyBwaHkuCisgKi8KK3N0cnVjdCB1ZnNfcWNvbV9waHlfcW1wXzE0bm0geworCXN0cnVjdCB1ZnNfcWNvbV9waHkgY29tbW9uX2NmZzsKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWZzX3Fjb21fcGh5X2NhbGlicmF0aW9uIHBoeV9jYWxfdGFibGVfcmF0ZV9BW10gPSB7CisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShVRlNfUEhZX1BPV0VSX0RPV05fQ09OVFJPTCwgMHgwMSksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9DTU5fQ09ORklHLCAweDBlKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX1NZU0NMS19FTl9TRUwsIDB4ZDcpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fQ0xLX1NFTEVDVCwgMHgzMCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9TWVNfQ0xLX0NUUkwsIDB4MDYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fQklBU19FTl9DTEtCVUZMUl9FTiwgMHgwOCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9CR19USU1FUiwgMHgwYSksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9IU0NMS19TRUwsIDB4MDUpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fQ09SRUNMS19ESVYsIDB4MGEpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fQ09SRUNMS19ESVZfTU9ERTEsIDB4MGEpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fTE9DS19DTVBfRU4sIDB4MDEpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fVkNPX1RVTkVfQ1RSTCwgMHgxMCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9SRVNFVFNNX0NOVFJMLCAweDIwKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0NPUkVfQ0xLX0VOLCAweDAwKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0xPQ0tfQ01QX0NGRywgMHgwMCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9WQ09fVFVORV9USU1FUjEsIDB4ZmYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fVkNPX1RVTkVfVElNRVIyLCAweDNmKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX1ZDT19UVU5FX01BUCwgMHgxNCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9TVlNfTU9ERV9DTEtfU0VMLCAweDA1KSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0RFQ19TVEFSVF9NT0RFMCwgMHg4MiksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDFfTU9ERTAsIDB4MDApLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fRElWX0ZSQUNfU1RBUlQyX01PREUwLCAweDAwKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUM19NT0RFMCwgMHgwMCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9DUF9DVFJMX01PREUwLCAweDBiKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX1BMTF9SQ1RSTF9NT0RFMCwgMHgxNiksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9QTExfQ0NUUkxfTU9ERTAsIDB4MjgpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fSU5URUdMT09QX0dBSU4wX01PREUwLCAweDgwKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0lOVEVHTE9PUF9HQUlOMV9NT0RFMCwgMHgwMCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9WQ09fVFVORTFfTU9ERTAsIDB4MjgpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fVkNPX1RVTkUyX01PREUwLCAweDAyKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0xPQ0tfQ01QMV9NT0RFMCwgMHhmZiksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9MT0NLX0NNUDJfTU9ERTAsIDB4MGMpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fTE9DS19DTVAzX01PREUwLCAweDAwKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0RFQ19TVEFSVF9NT0RFMSwgMHg5OCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDFfTU9ERTEsIDB4MDApLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fRElWX0ZSQUNfU1RBUlQyX01PREUxLCAweDAwKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUM19NT0RFMSwgMHgwMCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9DUF9DVFJMX01PREUxLCAweDBiKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX1BMTF9SQ1RSTF9NT0RFMSwgMHgxNiksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9QTExfQ0NUUkxfTU9ERTEsIDB4MjgpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fSU5URUdMT09QX0dBSU4wX01PREUxLCAweDgwKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0lOVEVHTE9PUF9HQUlOMV9NT0RFMSwgMHgwMCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9WQ09fVFVORTFfTU9ERTEsIDB4ZDYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fVkNPX1RVTkUyX01PREUxLCAweDAwKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0xPQ0tfQ01QMV9NT0RFMSwgMHgzMiksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9MT0NLX0NNUDJfTU9ERTEsIDB4MGYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fTE9DS19DTVAzX01PREUxLCAweDAwKSwKKworCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19UWF9ISUdIWl9UUkFOU0NFSVZFUl9CSUFTX0RSVlJfRU4sIDB4NDUpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19UWF9MQU5FX01PREUsIDB4MDIpLAorCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX1JYX1NJR0RFVF9MVkwsIDB4MjQpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9TSUdERVRfQ05UUkwsIDB4MDIpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9JTlRFUkZBQ0VfTU9ERSwgMHgwMCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX1JYX1NJR0RFVF9ERUdMSVRDSF9DTlRSTCwgMHgxOCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX1JYX1VDRFJfRkFTVExPQ0tfRk9fR0FJTiwgMHgwQiksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX1JYX1JYX1RFUk1fQlcsIDB4NUIpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMV9MU0IsIDB4RkYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMV9NU0IsIDB4M0YpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMl9MU0IsIDB4RkYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMl9NU0IsIDB4MEYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUVVfQURBUFRPUl9DTlRSTDIsIDB4MEUpLAorfTsKKworc3RhdGljIHN0cnVjdCB1ZnNfcWNvbV9waHlfY2FsaWJyYXRpb24gcGh5X2NhbF90YWJsZV9yYXRlX0JbXSA9IHsKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX1ZDT19UVU5FX01BUCwgMHg1NCksCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3BoeS1xY29tLXVmcy1xbXAtMjBubS5jIGIvZHJpdmVycy9waHkvcGh5LXFjb20tdWZzLXFtcC0yMG5tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzMmY5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGh5L3BoeS1xY29tLXVmcy1xbXAtMjBubS5jCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTUsIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgInBoeS1xY29tLXVmcy1xbXAtMjBubS5oIgorCisjZGVmaW5lIFVGU19QSFlfTkFNRSAidWZzX3BoeV9xbXBfMjBubSIKKworc3RhdGljCitpbnQgdWZzX3Fjb21fcGh5X3FtcF8yMG5tX3BoeV9jYWxpYnJhdGUoc3RydWN0IHVmc19xY29tX3BoeSAqdWZzX3Fjb21fcGh5LAorCQkJCQlib29sIGlzX3JhdGVfQikKK3sKKwlzdHJ1Y3QgdWZzX3Fjb21fcGh5X2NhbGlicmF0aW9uICp0YmxfQSwgKnRibF9COworCWludCB0Ymxfc2l6ZV9BLCB0Ymxfc2l6ZV9COworCXU4IG1ham9yID0gdWZzX3Fjb21fcGh5LT5ob3N0X2N0cmxfcmV2X21ham9yOworCXUxNiBtaW5vciA9IHVmc19xY29tX3BoeS0+aG9zdF9jdHJsX3Jldl9taW5vcjsKKwl1MTYgc3RlcCA9IHVmc19xY29tX3BoeS0+aG9zdF9jdHJsX3Jldl9zdGVwOworCWludCBlcnI7CisKKwlpZiAoKG1ham9yID09IDB4MSkgJiYgKG1pbm9yID09IDB4MDAyKSAmJiAoc3RlcCA9PSAweDAwMDApKSB7CisJCXRibF9zaXplX0EgPSBBUlJBWV9TSVpFKHBoeV9jYWxfdGFibGVfcmF0ZV9BXzFfMl8wKTsKKwkJdGJsX0EgPSBwaHlfY2FsX3RhYmxlX3JhdGVfQV8xXzJfMDsKKwl9IGVsc2UgaWYgKChtYWpvciA9PSAweDEpICYmIChtaW5vciA9PSAweDAwMykgJiYgKHN0ZXAgPT0gMHgwMDAwKSkgeworCQl0Ymxfc2l6ZV9BID0gQVJSQVlfU0laRShwaHlfY2FsX3RhYmxlX3JhdGVfQV8xXzNfMCk7CisJCXRibF9BID0gcGh5X2NhbF90YWJsZV9yYXRlX0FfMV8zXzA7CisJfSBlbHNlIHsKKwkJZGV2X2Vycih1ZnNfcWNvbV9waHktPmRldiwgIiVzOiBVbmtub3duIFVGUy1QSFkgdmVyc2lvbiwgbm8gY2FsaWJyYXRpb24gdmFsdWVzXG4iLAorCQkJX19mdW5jX18pOworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwl0Ymxfc2l6ZV9CID0gQVJSQVlfU0laRShwaHlfY2FsX3RhYmxlX3JhdGVfQik7CisJdGJsX0IgPSBwaHlfY2FsX3RhYmxlX3JhdGVfQjsKKworCWVyciA9IHVmc19xY29tX3BoeV9jYWxpYnJhdGUodWZzX3Fjb21fcGh5LCB0YmxfQSwgdGJsX3NpemVfQSwKKwkJCQkJCXRibF9CLCB0Ymxfc2l6ZV9CLCBpc19yYXRlX0IpOworCisJaWYgKGVycikKKwkJZGV2X2Vycih1ZnNfcWNvbV9waHktPmRldiwgIiVzOiB1ZnNfcWNvbV9waHlfY2FsaWJyYXRlKCkgZmFpbGVkICVkXG4iLAorCQkJX19mdW5jX18sIGVycik7CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMKK3ZvaWQgdWZzX3Fjb21fcGh5X3FtcF8yMG5tX2FkdmVydGlzZV9xdWlya3Moc3RydWN0IHVmc19xY29tX3BoeSAqcGh5X2NvbW1vbikKK3sKKwlwaHlfY29tbW9uLT5xdWlya3MgPQorCQlVRlNfUUNPTV9QSFlfUVVJUktfSElCRVJOOF9FWElUX0FGVEVSX1BIWV9QV1JfQ09MTEFQU0U7Cit9CisKK3N0YXRpYyBpbnQgdWZzX3Fjb21fcGh5X3FtcF8yMG5tX2luaXQoc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpCit7CisJc3RydWN0IHVmc19xY29tX3BoeV9xbXBfMjBubSAqcGh5ID0gcGh5X2dldF9kcnZkYXRhKGdlbmVyaWNfcGh5KTsKKwlzdHJ1Y3QgdWZzX3Fjb21fcGh5ICpwaHlfY29tbW9uID0gJnBoeS0+Y29tbW9uX2NmZzsKKwlpbnQgZXJyID0gMDsKKworCWVyciA9IHVmc19xY29tX3BoeV9pbml0X2Nsa3MoZ2VuZXJpY19waHksIHBoeV9jb21tb24pOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihwaHlfY29tbW9uLT5kZXYsICIlczogdWZzX3Fjb21fcGh5X2luaXRfY2xrcygpIGZhaWxlZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSB1ZnNfcWNvbV9waHlfaW5pdF92cmVndWxhdG9ycyhnZW5lcmljX3BoeSwgcGh5X2NvbW1vbik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKHBoeV9jb21tb24tPmRldiwgIiVzOiB1ZnNfcWNvbV9waHlfaW5pdF92cmVndWxhdG9ycygpIGZhaWxlZCAlZFxuIiwKKwkJCV9fZnVuY19fLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwl1ZnNfcWNvbV9waHlfcW1wXzIwbm1fYWR2ZXJ0aXNlX3F1aXJrcyhwaHlfY29tbW9uKTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYwordm9pZCB1ZnNfcWNvbV9waHlfcW1wXzIwbm1fcG93ZXJfY29udHJvbChzdHJ1Y3QgdWZzX3Fjb21fcGh5ICpwaHksIGJvb2wgdmFsKQoreworCWJvb2wgaGliZXJuOF9leGl0X2FmdGVyX3B3cl9jb2xsYXBzZSA9IHBoeS0+cXVpcmtzICYKKwkJVUZTX1FDT01fUEhZX1FVSVJLX0hJQkVSTjhfRVhJVF9BRlRFUl9QSFlfUFdSX0NPTExBUFNFOworCisJaWYgKHZhbCkgeworCQl3cml0ZWxfcmVsYXhlZCgweDEsIHBoeS0+bW1pbyArIFVGU19QSFlfUE9XRVJfRE9XTl9DT05UUk9MKTsKKwkJLyoKKwkJICogQmVmb3JlIGFueSB0cmFuc2FjdGlvbnMgaW52b2x2aW5nIFBIWSwgZW5zdXJlIFBIWSBrbm93cworCQkgKiB0aGF0IGl0J3MgYW5hbG9nIHJhaWwgaXMgcG93ZXJlZCBPTi4KKwkJICovCisJCW1iKCk7CisKKwkJaWYgKGhpYmVybjhfZXhpdF9hZnRlcl9wd3JfY29sbGFwc2UpIHsKKwkJCS8qCisJCQkgKiBHaXZlIGF0bGVhc3QgMXVzIGRlbGF5IGFmdGVyIHJlc3RvcmluZyBQSFkgYW5hbG9nCisJCQkgKiBwb3dlci4KKwkJCSAqLworCQkJdXNsZWVwX3JhbmdlKDEsIDIpOworCQkJd3JpdGVsX3JlbGF4ZWQoMHgwQSwgcGh5LT5tbWlvICsKKwkJCQkgICAgICAgUVNFUkRFU19DT01fU1lTQ0xLX0VOX1NFTF9UWEJBTkQpOworCQkJd3JpdGVsX3JlbGF4ZWQoMHgwOCwgcGh5LT5tbWlvICsKKwkJCQkgICAgICAgUVNFUkRFU19DT01fU1lTQ0xLX0VOX1NFTF9UWEJBTkQpOworCQkJLyoKKwkJCSAqIE1ha2Ugc3VyZSB3b3JrYXJvdW5kIGlzIGRlYWN0aXZhdGVkIGJlZm9yZSBwcm9jZWVkaW5nCisJCQkgKiB3aXRoIG5vcm1hbCBQSFkgb3BlcmF0aW9ucy4KKwkJCSAqLworCQkJbWIoKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChoaWJlcm44X2V4aXRfYWZ0ZXJfcHdyX2NvbGxhcHNlKSB7CisJCQl3cml0ZWxfcmVsYXhlZCgweDBBLCBwaHktPm1taW8gKworCQkJCSAgICAgICBRU0VSREVTX0NPTV9TWVNDTEtfRU5fU0VMX1RYQkFORCk7CisJCQl3cml0ZWxfcmVsYXhlZCgweDAyLCBwaHktPm1taW8gKworCQkJCSAgICAgICBRU0VSREVTX0NPTV9TWVNDTEtfRU5fU0VMX1RYQkFORCk7CisJCQkvKgorCQkJICogTWFrZSBzdXJlIHRoYXQgYWJvdmUgd29ya2Fyb3VuZCBpcyBhY3RpdmF0ZWQgYmVmb3JlCisJCQkgKiBQSFkgYW5hbG9nIHBvd2VyIGNvbGxhcHNlLgorCQkJICovCisJCQltYigpOworCQl9CisKKwkJd3JpdGVsX3JlbGF4ZWQoMHgwLCBwaHktPm1taW8gKyBVRlNfUEhZX1BPV0VSX0RPV05fQ09OVFJPTCk7CisJCS8qCisJCSAqIGVuc3VyZSB0aGF0IFBIWSBrbm93cyBpdHMgUEhZIGFuYWxvZyByYWlsIGlzIGdvaW5nCisJCSAqIHRvIGJlIHBvd2VyZWQgZG93bgorCQkgKi8KKwkJbWIoKTsKKwl9Cit9CisKK3N0YXRpYwordm9pZCB1ZnNfcWNvbV9waHlfcW1wXzIwbm1fc2V0X3R4X2xhbmVfZW5hYmxlKHN0cnVjdCB1ZnNfcWNvbV9waHkgKnBoeSwgdTMyIHZhbCkKK3sKKwl3cml0ZWxfcmVsYXhlZCh2YWwgJiBVRlNfUEhZX1RYX0xBTkVfRU5BQkxFX01BU0ssCisJCQlwaHktPm1taW8gKyBVRlNfUEhZX1RYX0xBTkVfRU5BQkxFKTsKKwltYigpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdWZzX3Fjb21fcGh5X3FtcF8yMG5tX3N0YXJ0X3NlcmRlcyhzdHJ1Y3QgdWZzX3Fjb21fcGh5ICpwaHkpCit7CisJdTMyIHRtcDsKKworCXRtcCA9IHJlYWRsX3JlbGF4ZWQocGh5LT5tbWlvICsgVUZTX1BIWV9QSFlfU1RBUlQpOworCXRtcCAmPSB+TUFTS19TRVJERVNfU1RBUlQ7CisJdG1wIHw9ICgxIDw8IE9GRlNFVF9TRVJERVNfU1RBUlQpOworCXdyaXRlbF9yZWxheGVkKHRtcCwgcGh5LT5tbWlvICsgVUZTX1BIWV9QSFlfU1RBUlQpOworCW1iKCk7Cit9CisKK3N0YXRpYyBpbnQgdWZzX3Fjb21fcGh5X3FtcF8yMG5tX2lzX3Bjc19yZWFkeShzdHJ1Y3QgdWZzX3Fjb21fcGh5ICpwaHlfY29tbW9uKQoreworCWludCBlcnIgPSAwOworCXUzMiB2YWw7CisKKwllcnIgPSByZWFkbF9wb2xsX3RpbWVvdXQocGh5X2NvbW1vbi0+bW1pbyArIFVGU19QSFlfUENTX1JFQURZX1NUQVRVUywKKwkJCXZhbCwgKHZhbCAmIE1BU0tfUENTX1JFQURZKSwgMTAsIDEwMDAwMDApOworCWlmIChlcnIpCisJCWRldl9lcnIocGh5X2NvbW1vbi0+ZGV2LCAiJXM6IHBvbGwgZm9yIHBjcyBmYWlsZWQgZXJyID0gJWRcbiIsCisJCQlfX2Z1bmNfXywgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IHBoeV9vcHMgdWZzX3Fjb21fcGh5X3FtcF8yMG5tX3BoeV9vcHMgPSB7CisJLmluaXQJCT0gdWZzX3Fjb21fcGh5X3FtcF8yMG5tX2luaXQsCisJLmV4aXQJCT0gdWZzX3Fjb21fcGh5X2V4aXQsCisJLnBvd2VyX29uCT0gdWZzX3Fjb21fcGh5X3Bvd2VyX29uLAorCS5wb3dlcl9vZmYJPSB1ZnNfcWNvbV9waHlfcG93ZXJfb2ZmLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWZzX3Fjb21fcGh5X3NwZWNpZmljX29wcyBwaHlfMjBubV9vcHMgPSB7CisJLmNhbGlicmF0ZV9waHkJCT0gdWZzX3Fjb21fcGh5X3FtcF8yMG5tX3BoeV9jYWxpYnJhdGUsCisJLnN0YXJ0X3NlcmRlcwkJPSB1ZnNfcWNvbV9waHlfcW1wXzIwbm1fc3RhcnRfc2VyZGVzLAorCS5pc19waHlzaWNhbF9jb2Rpbmdfc3VibGF5ZXJfcmVhZHkgPSB1ZnNfcWNvbV9waHlfcW1wXzIwbm1faXNfcGNzX3JlYWR5LAorCS5zZXRfdHhfbGFuZV9lbmFibGUJPSB1ZnNfcWNvbV9waHlfcW1wXzIwbm1fc2V0X3R4X2xhbmVfZW5hYmxlLAorCS5wb3dlcl9jb250cm9sCQk9IHVmc19xY29tX3BoeV9xbXBfMjBubV9wb3dlcl9jb250cm9sLAorfTsKKworc3RhdGljIGludCB1ZnNfcWNvbV9waHlfcW1wXzIwbm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5OworCXN0cnVjdCB1ZnNfcWNvbV9waHlfcW1wXzIwbm0gKnBoeTsKKwlpbnQgZXJyID0gMDsKKworCXBoeSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcGh5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwaHkpIHsKKwkJZGV2X2VycihkZXYsICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIHBoeVxuIiwgX19mdW5jX18pOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlnZW5lcmljX3BoeSA9IHVmc19xY29tX3BoeV9nZW5lcmljX3Byb2JlKHBkZXYsICZwaHktPmNvbW1vbl9jZmcsCisJCQkJJnVmc19xY29tX3BoeV9xbXBfMjBubV9waHlfb3BzLCAmcGh5XzIwbm1fb3BzKTsKKworCWlmICghZ2VuZXJpY19waHkpIHsKKwkJZGV2X2VycihkZXYsICIlczogdWZzX3Fjb21fcGh5X2dlbmVyaWNfcHJvYmUoKSBmYWlsZWRcbiIsCisJCQlfX2Z1bmNfXyk7CisJCWVyciA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCXBoeV9zZXRfZHJ2ZGF0YShnZW5lcmljX3BoeSwgcGh5KTsKKworCXN0cmxjcHkocGh5LT5jb21tb25fY2ZnLm5hbWUsIFVGU19QSFlfTkFNRSwKKwkJCXNpemVvZihwaHktPmNvbW1vbl9jZmcubmFtZSkpOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB1ZnNfcWNvbV9waHlfcW1wXzIwbm1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgcGh5ICpnZW5lcmljX3BoeSA9IHRvX3BoeShkZXYpOworCXN0cnVjdCB1ZnNfcWNvbV9waHkgKnVmc19xY29tX3BoeSA9IGdldF91ZnNfcWNvbV9waHkoZ2VuZXJpY19waHkpOworCWludCBlcnIgPSAwOworCisJZXJyID0gdWZzX3Fjb21fcGh5X3JlbW92ZShnZW5lcmljX3BoeSwgdWZzX3Fjb21fcGh5KTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKGRldiwgIiVzOiB1ZnNfcWNvbV9waHlfcmVtb3ZlIGZhaWxlZCA9ICVkXG4iLAorCQkJX19mdW5jX18sIGVycik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB1ZnNfcWNvbV9waHlfcW1wXzIwbm1fb2ZfbWF0Y2hbXSA9IHsKKwl7LmNvbXBhdGlibGUgPSAicWNvbSx1ZnMtcGh5LXFtcC0yMG5tIn0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdWZzX3Fjb21fcGh5X3FtcF8yMG5tX29mX21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdWZzX3Fjb21fcGh5X3FtcF8yMG5tX2RyaXZlciA9IHsKKwkucHJvYmUgPSB1ZnNfcWNvbV9waHlfcW1wXzIwbm1fcHJvYmUsCisJLnJlbW92ZSA9IHVmc19xY29tX3BoeV9xbXBfMjBubV9yZW1vdmUsCisJLmRyaXZlciA9IHsKKwkJLm9mX21hdGNoX3RhYmxlID0gdWZzX3Fjb21fcGh5X3FtcF8yMG5tX29mX21hdGNoLAorCQkubmFtZSA9ICJ1ZnNfcWNvbV9waHlfcW1wXzIwbm0iLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih1ZnNfcWNvbV9waHlfcW1wXzIwbm1fZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJVbml2ZXJzYWwgRmxhc2ggU3RvcmFnZSAoVUZTKSBRQ09NIFBIWSBRTVAgMjBubSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvcGh5LXFjb20tdWZzLXFtcC0yMG5tLmggYi9kcml2ZXJzL3BoeS9waHktcWNvbS11ZnMtcW1wLTIwbm0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjMwNzZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9waHkvcGh5LXFjb20tdWZzLXFtcC0yMG5tLmgKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNSwgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIFVGU19RQ09NX1BIWV9RTVBfMjBOTV9IXworI2RlZmluZSBVRlNfUUNPTV9QSFlfUU1QXzIwTk1fSF8KKworI2luY2x1ZGUgInBoeS1xY29tLXVmcy1pLmgiCisKKy8qIFFDT00gVUZTIFBIWSBjb250cm9sIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIENPTV9PRkYoeCkgICAgICgweDAwMCArIHgpCisjZGVmaW5lIFBIWV9PRkYoeCkgICAgICgweEMwMCArIHgpCisjZGVmaW5lIFRYX09GRihuLCB4KSAgICgweDQwMCArICgweDQwMCAqIG4pICsgeCkKKyNkZWZpbmUgUlhfT0ZGKG4sIHgpICAgKDB4NjAwICsgKDB4NDAwICogbikgKyB4KQorCisvKiBVRlMgUEhZIFBMTCBibG9jayByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUVNFUkRFU19DT01fU1lTX0NMS19DVFJMCQlDT01fT0ZGKDB4MCkKKyNkZWZpbmUgUVNFUkRFU19DT01fUExMX1ZDT1RBSUxfRU4JCUNPTV9PRkYoMHgwNCkKKyNkZWZpbmUgUVNFUkRFU19DT01fUExMX0NOVFJMCQkJQ09NX09GRigweDE0KQorI2RlZmluZSBRU0VSREVTX0NPTV9QTExfSVBfU0VUSQkJCUNPTV9PRkYoMHgyNCkKKyNkZWZpbmUgUVNFUkRFU19DT01fQ09SRV9DTEtfSU5fU1lOQ19TRUwJQ09NX09GRigweDI4KQorI2RlZmluZSBRU0VSREVTX0NPTV9CSUFTX0VOX0NMS0JVRkxSX0VOCQlDT01fT0ZGKDB4MzApCisjZGVmaW5lIFFTRVJERVNfQ09NX1BMTF9DUF9TRVRJCQkJQ09NX09GRigweDM0KQorI2RlZmluZSBRU0VSREVTX0NPTV9QTExfSVBfU0VUUAkJCUNPTV9PRkYoMHgzOCkKKyNkZWZpbmUgUVNFUkRFU19DT01fUExMX0NQX1NFVFAJCQlDT01fT0ZGKDB4M0MpCisjZGVmaW5lIFFTRVJERVNfQ09NX1NZU0NMS19FTl9TRUxfVFhCQU5ECUNPTV9PRkYoMHg0OCkKKyNkZWZpbmUgUVNFUkRFU19DT01fUkVTRVRTTV9DTlRSTAkJQ09NX09GRigweDRDKQorI2RlZmluZSBRU0VSREVTX0NPTV9SRVNFVFNNX0NOVFJMMgkJQ09NX09GRigweDUwKQorI2RlZmluZSBRU0VSREVTX0NPTV9QTExMT0NLX0NNUDEJCUNPTV9PRkYoMHg5MCkKKyNkZWZpbmUgUVNFUkRFU19DT01fUExMTE9DS19DTVAyCQlDT01fT0ZGKDB4OTQpCisjZGVmaW5lIFFTRVJERVNfQ09NX1BMTExPQ0tfQ01QMwkJQ09NX09GRigweDk4KQorI2RlZmluZSBRU0VSREVTX0NPTV9QTExMT0NLX0NNUF9FTgkJQ09NX09GRigweDlDKQorI2RlZmluZSBRU0VSREVTX0NPTV9CR1RDCQkJQ09NX09GRigweEEwKQorI2RlZmluZSBRU0VSREVTX0NPTV9ERUNfU1RBUlQxCQkJQ09NX09GRigweEFDKQorI2RlZmluZSBRU0VSREVTX0NPTV9QTExfQU1QX09TCQkJQ09NX09GRigweEIwKQorI2RlZmluZSBRU0VSREVTX0NPTV9SRVNfQ09ERV9VUF9PRkZTRVQJCUNPTV9PRkYoMHhEOCkKKyNkZWZpbmUgUVNFUkRFU19DT01fUkVTX0NPREVfRE5fT0ZGU0VUCQlDT01fT0ZGKDB4REMpCisjZGVmaW5lIFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUMQkJQ09NX09GRigweDEwMCkKKyNkZWZpbmUgUVNFUkRFU19DT01fRElWX0ZSQUNfU1RBUlQyCQlDT01fT0ZGKDB4MTA0KQorI2RlZmluZSBRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDMJCUNPTV9PRkYoMHgxMDgpCisjZGVmaW5lIFFTRVJERVNfQ09NX0RFQ19TVEFSVDIJCQlDT01fT0ZGKDB4MTBDKQorI2RlZmluZSBRU0VSREVTX0NPTV9QTExfUlhUWEVQQ0xLX0VOCQlDT01fT0ZGKDB4MTEwKQorI2RlZmluZSBRU0VSREVTX0NPTV9QTExfQ1JDVFJMCQkJQ09NX09GRigweDExNCkKKyNkZWZpbmUgUVNFUkRFU19DT01fUExMX0NMS0VQRElWCQlDT01fT0ZGKDB4MTE4KQorCisvKiBUWCBMQU5FIG4gKDAsIDEpIHJlZ2lzdGVycyAqLworI2RlZmluZSBRU0VSREVTX1RYX0VNUF9QT1NUMV9MVkwobikJCVRYX09GRihuLCAweDA4KQorI2RlZmluZSBRU0VSREVTX1RYX0RSVl9MVkwobikJCQlUWF9PRkYobiwgMHgwQykKKyNkZWZpbmUgUVNFUkRFU19UWF9MQU5FX01PREUobikJCQlUWF9PRkYobiwgMHg1NCkKKworLyogUlggTEFORSBuICgwLCAxKSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUVNFUkRFU19SWF9DRFJfQ09OVFJPTDEobikJCVJYX09GRihuLCAweDApCisjZGVmaW5lIFFTRVJERVNfUlhfQ0RSX0NPTlRST0xfSEFMRihuKQkJUlhfT0ZGKG4sIDB4OCkKKyNkZWZpbmUgUVNFUkRFU19SWF9SWF9FUV9HQUlOMV9MU0IobikJCVJYX09GRihuLCAweEE4KQorI2RlZmluZSBRU0VSREVTX1JYX1JYX0VRX0dBSU4xX01TQihuKQkJUlhfT0ZGKG4sIDB4QUMpCisjZGVmaW5lIFFTRVJERVNfUlhfUlhfRVFfR0FJTjJfTFNCKG4pCQlSWF9PRkYobiwgMHhCMCkKKyNkZWZpbmUgUVNFUkRFU19SWF9SWF9FUV9HQUlOMl9NU0IobikJCVJYX09GRihuLCAweEI0KQorI2RlZmluZSBRU0VSREVTX1JYX1JYX0VRVV9BREFQVE9SX0NOVFJMMihuKQlSWF9PRkYobiwgMHhCQykKKyNkZWZpbmUgUVNFUkRFU19SWF9DRFJfQ09OVFJPTF9RVUFSVEVSKG4pCVJYX09GRihuLCAweEMpCisjZGVmaW5lIFFTRVJERVNfUlhfU0lHREVUX0NOVFJMKG4pCQlSWF9PRkYobiwgMHgxMDApCisKKy8qIFVGUyBQSFkgcmVnaXN0ZXJzICovCisjZGVmaW5lIFVGU19QSFlfUEhZX1NUQVJUCQkJUEhZX09GRigweDAwKQorI2RlZmluZSBVRlNfUEhZX1BPV0VSX0RPV05fQ09OVFJPTAkJUEhZX09GRigweDQpCisjZGVmaW5lIFVGU19QSFlfVFhfTEFORV9FTkFCTEUJCQlQSFlfT0ZGKDB4NDQpCisjZGVmaW5lIFVGU19QSFlfUFdNX0cxX0NMS19ESVZJREVSCQlQSFlfT0ZGKDB4MDgpCisjZGVmaW5lIFVGU19QSFlfUFdNX0cyX0NMS19ESVZJREVSCQlQSFlfT0ZGKDB4MEMpCisjZGVmaW5lIFVGU19QSFlfUFdNX0czX0NMS19ESVZJREVSCQlQSFlfT0ZGKDB4MTApCisjZGVmaW5lIFVGU19QSFlfUFdNX0c0X0NMS19ESVZJREVSCQlQSFlfT0ZGKDB4MTQpCisjZGVmaW5lIFVGU19QSFlfQ09SRUNMS19QV01fRzFfQ0xLX0RJVklERVIJUEhZX09GRigweDM0KQorI2RlZmluZSBVRlNfUEhZX0NPUkVDTEtfUFdNX0cyX0NMS19ESVZJREVSCVBIWV9PRkYoMHgzOCkKKyNkZWZpbmUgVUZTX1BIWV9DT1JFQ0xLX1BXTV9HM19DTEtfRElWSURFUglQSFlfT0ZGKDB4M0MpCisjZGVmaW5lIFVGU19QSFlfQ09SRUNMS19QV01fRzRfQ0xLX0RJVklERVIJUEhZX09GRigweDQwKQorI2RlZmluZSBVRlNfUEhZX09NQ19TVEFUVVNfUkRWQUwJCVBIWV9PRkYoMHg2OCkKKyNkZWZpbmUgVUZTX1BIWV9MSU5FX1JFU0VUX1RJTUUJCQlQSFlfT0ZGKDB4MjgpCisjZGVmaW5lIFVGU19QSFlfTElORV9SRVNFVF9HUkFOVUxBUklUWQkJUEhZX09GRigweDJDKQorI2RlZmluZSBVRlNfUEhZX1RTWU5DX1JTWU5DX0NOVEwJCVBIWV9PRkYoMHg0OCkKKyNkZWZpbmUgVUZTX1BIWV9QTExfQ05UTAkJCVBIWV9PRkYoMHg1MCkKKyNkZWZpbmUgVUZTX1BIWV9UWF9MQVJHRV9BTVBfRFJWX0xWTAkJUEhZX09GRigweDU0KQorI2RlZmluZSBVRlNfUEhZX1RYX1NNQUxMX0FNUF9EUlZfTFZMCQlQSFlfT0ZGKDB4NUMpCisjZGVmaW5lIFVGU19QSFlfVFhfTEFSR0VfQU1QX1BPU1RfRU1QX0xWTAlQSFlfT0ZGKDB4NTgpCisjZGVmaW5lIFVGU19QSFlfVFhfU01BTExfQU1QX1BPU1RfRU1QX0xWTAlQSFlfT0ZGKDB4NjApCisjZGVmaW5lIFVGU19QSFlfQ0ZHX0NIQU5HRV9DTlRfVkFMCQlQSFlfT0ZGKDB4NjQpCisjZGVmaW5lIFVGU19QSFlfUlhfU1lOQ19XQUlUX1RJTUUJCVBIWV9PRkYoMHg2QykKKyNkZWZpbmUgVUZTX1BIWV9UWF9NSU5fU0xFRVBfTk9DT05GSUdfVElNRV9DQVBBQklMSVRZCVBIWV9PRkYoMHhCNCkKKyNkZWZpbmUgVUZTX1BIWV9SWF9NSU5fU0xFRVBfTk9DT05GSUdfVElNRV9DQVBBQklMSVRZCVBIWV9PRkYoMHhFMCkKKyNkZWZpbmUgVUZTX1BIWV9UWF9NSU5fU1RBTExfTk9DT05GSUdfVElNRV9DQVBBQklMSVRZCVBIWV9PRkYoMHhCOCkKKyNkZWZpbmUgVUZTX1BIWV9SWF9NSU5fU1RBTExfTk9DT05GSUdfVElNRV9DQVBBQklMSVRZCVBIWV9PRkYoMHhFNCkKKyNkZWZpbmUgVUZTX1BIWV9UWF9NSU5fU0FWRV9DT05GSUdfVElNRV9DQVBBQklMSVRZCVBIWV9PRkYoMHhCQykKKyNkZWZpbmUgVUZTX1BIWV9SWF9NSU5fU0FWRV9DT05GSUdfVElNRV9DQVBBQklMSVRZCVBIWV9PRkYoMHhFOCkKKyNkZWZpbmUgVUZTX1BIWV9SWF9QV01fQlVSU1RfQ0xPU1VSRV9MRU5HVEhfQ0FQQUJJTElUWQlQSFlfT0ZGKDB4RkMpCisjZGVmaW5lIFVGU19QSFlfUlhfTUlOX0FDVElWQVRFVElNRV9DQVBBQklMSVRZCQlQSFlfT0ZGKDB4MTAwKQorI2RlZmluZSBVRlNfUEhZX1JYX1NJR0RFVF9DVFJMMwkJCQlQSFlfT0ZGKDB4MTRjKQorI2RlZmluZSBVRlNfUEhZX1JNTUlfQVRUUl9DVFJMCQkJUEhZX09GRigweDE2MCkKKyNkZWZpbmUgVUZTX1BIWV9STU1JX1JYX0NGR1VQRFRfTDEJKDEgPDwgNykKKyNkZWZpbmUgVUZTX1BIWV9STU1JX1RYX0NGR1VQRFRfTDEJKDEgPDwgNikKKyNkZWZpbmUgVUZTX1BIWV9STU1JX0NGR1dSX0wxCQkoMSA8PCA1KQorI2RlZmluZSBVRlNfUEhZX1JNTUlfQ0ZHUkRfTDEJCSgxIDw8IDQpCisjZGVmaW5lIFVGU19QSFlfUk1NSV9SWF9DRkdVUERUX0wwCSgxIDw8IDMpCisjZGVmaW5lIFVGU19QSFlfUk1NSV9UWF9DRkdVUERUX0wwCSgxIDw8IDIpCisjZGVmaW5lIFVGU19QSFlfUk1NSV9DRkdXUl9MMAkJKDEgPDwgMSkKKyNkZWZpbmUgVUZTX1BIWV9STU1JX0NGR1JEX0wwCQkoMSA8PCAwKQorI2RlZmluZSBVRlNfUEhZX1JNTUlfQVRUUklECQkJUEhZX09GRigweDE2NCkKKyNkZWZpbmUgVUZTX1BIWV9STU1JX0FUVFJXUlZBTAkJCVBIWV9PRkYoMHgxNjgpCisjZGVmaW5lIFVGU19QSFlfUk1NSV9BVFRSUkRWQUxfTDBfU1RBVFVTCVBIWV9PRkYoMHgxNkMpCisjZGVmaW5lIFVGU19QSFlfUk1NSV9BVFRSUkRWQUxfTDFfU1RBVFVTCVBIWV9PRkYoMHgxNzApCisjZGVmaW5lIFVGU19QSFlfUENTX1JFQURZX1NUQVRVUwkJUEhZX09GRigweDE3NCkKKworI2RlZmluZSBVRlNfUEhZX1RYX0xBTkVfRU5BQkxFX01BU0sJCTB4MworCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgMjBubSBzcGVjaWZpYyBwaHkuCisgKiBjb21tb25fY2ZnIE1VU1QgcmVtYWluIHRoZSBmaXJzdCBmaWVsZCBpbiB0aGlzIHN0cnVjdHVyZQorICogaW4gY2FzZSBleHRyYSBmaWVsZHMgYXJlIGFkZGVkLiBUaGlzIHdheSwgd2hlbiBjYWxsaW5nCisgKiBnZXRfdWZzX3Fjb21fcGh5KCkgb2YgZ2VuZXJpYyBwaHksIHdlIGNhbiBleHRyYWN0IHRoZQorICogY29tbW9uIHBoeSBzdHJ1Y3R1cmUgKHN0cnVjdCB1ZnNfcWNvbV9waHkpIG91dCBvZiBpdAorICogcmVnYXJkbGVzcyBvZiB0aGUgcmVsZXZhbnQgc3BlY2lmaWMgcGh5LgorICovCitzdHJ1Y3QgdWZzX3Fjb21fcGh5X3FtcF8yMG5tIHsKKwlzdHJ1Y3QgdWZzX3Fjb21fcGh5IGNvbW1vbl9jZmc7Cit9OworCitzdGF0aWMgc3RydWN0IHVmc19xY29tX3BoeV9jYWxpYnJhdGlvbiBwaHlfY2FsX3RhYmxlX3JhdGVfQV8xXzJfMFtdID0geworCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoVUZTX1BIWV9QT1dFUl9ET1dOX0NPTlRST0wsIDB4MDEpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoVUZTX1BIWV9SWF9TSUdERVRfQ1RSTDMsIDB4MEQpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMX1ZDT1RBSUxfRU4sIDB4ZTEpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMX0NSQ1RSTCwgMHhjYyksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9TWVNDTEtfRU5fU0VMX1RYQkFORCwgMHgwOCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9QTExfQ0xLRVBESVYsIDB4MDMpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMX1JYVFhFUENMS19FTiwgMHgxMCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9ERUNfU1RBUlQxLCAweDgyKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0RFQ19TVEFSVDIsIDB4MDMpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fRElWX0ZSQUNfU1RBUlQxLCAweDgwKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUMiwgMHg4MCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDMsIDB4NDApLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMTE9DS19DTVAxLCAweGZmKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX1BMTExPQ0tfQ01QMiwgMHgxOSksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9QTExMT0NLX0NNUDMsIDB4MDApLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMTE9DS19DTVBfRU4sIDB4MDMpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUkVTRVRTTV9DTlRSTCwgMHg5MCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9SRVNFVFNNX0NOVFJMMiwgMHgwMyksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX1JYX0NEUl9DT05UUk9MMSgwKSwgMHhmMiksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX1JYX0NEUl9DT05UUk9MX0hBTEYoMCksIDB4MGMpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9DRFJfQ09OVFJPTF9RVUFSVEVSKDApLCAweDEyKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfUlhfQ0RSX0NPTlRST0wxKDEpLCAweGYyKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfUlhfQ0RSX0NPTlRST0xfSEFMRigxKSwgMHgwYyksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX1JYX0NEUl9DT05UUk9MX1FVQVJURVIoMSksIDB4MTIpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMV9MU0IoMCksIDB4ZmYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMV9NU0IoMCksIDB4ZmYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMl9MU0IoMCksIDB4ZmYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMl9NU0IoMCksIDB4MDApLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMV9MU0IoMSksIDB4ZmYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMV9NU0IoMSksIDB4ZmYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMl9MU0IoMSksIDB4ZmYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMl9NU0IoMSksIDB4MDApLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMX0NQX1NFVEksIDB4M2YpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMX0lQX1NFVFAsIDB4MWIpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMX0NQX1NFVFAsIDB4MGYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMX0lQX1NFVEksIDB4MDEpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19UWF9FTVBfUE9TVDFfTFZMKDApLCAweDJGKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfVFhfRFJWX0xWTCgwKSwgMHgyMCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX1RYX0VNUF9QT1NUMV9MVkwoMSksIDB4MkYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19UWF9EUlZfTFZMKDEpLCAweDIwKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfVFhfTEFORV9NT0RFKDApLCAweDY4KSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfVFhfTEFORV9NT0RFKDEpLCAweDY4KSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfUlhfUlhfRVFVX0FEQVBUT1JfQ05UUkwyKDEpLCAweGRjKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfUlhfUlhfRVFVX0FEQVBUT1JfQ05UUkwyKDApLCAweGRjKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0JJQVNfRU5fQ0xLQlVGTFJfRU4sIDB4MyksCit9OworCitzdGF0aWMgc3RydWN0IHVmc19xY29tX3BoeV9jYWxpYnJhdGlvbiBwaHlfY2FsX3RhYmxlX3JhdGVfQV8xXzNfMFtdID0geworCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoVUZTX1BIWV9QT1dFUl9ET1dOX0NPTlRST0wsIDB4MDEpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoVUZTX1BIWV9SWF9TSUdERVRfQ1RSTDMsIDB4MEQpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMX1ZDT1RBSUxfRU4sIDB4ZTEpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMX0NSQ1RSTCwgMHhjYyksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9TWVNDTEtfRU5fU0VMX1RYQkFORCwgMHgwOCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9QTExfQ0xLRVBESVYsIDB4MDMpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMX1JYVFhFUENMS19FTiwgMHgxMCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9ERUNfU1RBUlQxLCAweDgyKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0RFQ19TVEFSVDIsIDB4MDMpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fRElWX0ZSQUNfU1RBUlQxLCAweDgwKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX0RJVl9GUkFDX1NUQVJUMiwgMHg4MCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9ESVZfRlJBQ19TVEFSVDMsIDB4NDApLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMTE9DS19DTVAxLCAweGZmKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX1BMTExPQ0tfQ01QMiwgMHgxOSksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9QTExMT0NLX0NNUDMsIDB4MDApLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMTE9DS19DTVBfRU4sIDB4MDMpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUkVTRVRTTV9DTlRSTCwgMHg5MCksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9SRVNFVFNNX0NOVFJMMiwgMHgwMyksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX1JYX0NEUl9DT05UUk9MMSgwKSwgMHhmMiksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX1JYX0NEUl9DT05UUk9MX0hBTEYoMCksIDB4MGMpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9DRFJfQ09OVFJPTF9RVUFSVEVSKDApLCAweDEyKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfUlhfQ0RSX0NPTlRST0wxKDEpLCAweGYyKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfUlhfQ0RSX0NPTlRST0xfSEFMRigxKSwgMHgwYyksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX1JYX0NEUl9DT05UUk9MX1FVQVJURVIoMSksIDB4MTIpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMV9MU0IoMCksIDB4ZmYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMV9NU0IoMCksIDB4ZmYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMl9MU0IoMCksIDB4ZmYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMl9NU0IoMCksIDB4MDApLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMV9MU0IoMSksIDB4ZmYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMV9NU0IoMSksIDB4ZmYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMl9MU0IoMSksIDB4ZmYpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUV9HQUlOMl9NU0IoMSksIDB4MDApLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMX0NQX1NFVEksIDB4MmIpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMX0lQX1NFVFAsIDB4MzgpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUExMX0NQX1NFVFAsIDB4M2MpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fUkVTX0NPREVfVVBfT0ZGU0VULCAweDAyKSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX1JFU19DT0RFX0ROX09GRlNFVCwgMHgwMiksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9QTExfSVBfU0VUSSwgMHgwMSksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9QTExfQ05UUkwsIDB4NDApLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19UWF9MQU5FX01PREUoMCksIDB4NjgpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19UWF9MQU5FX01PREUoMSksIDB4NjgpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUVVfQURBUFRPUl9DTlRSTDIoMSksIDB4ZGMpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19SWF9SWF9FUVVfQURBUFRPUl9DTlRSTDIoMCksIDB4ZGMpLAorCVVGU19RQ09NX1BIWV9DQUxfRU5UUlkoUVNFUkRFU19DT01fQklBU19FTl9DTEtCVUZMUl9FTiwgMHgzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWZzX3Fjb21fcGh5X2NhbGlicmF0aW9uIHBoeV9jYWxfdGFibGVfcmF0ZV9CW10gPSB7CisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9ERUNfU1RBUlQxLCAweDk4KSwKKwlVRlNfUUNPTV9QSFlfQ0FMX0VOVFJZKFFTRVJERVNfQ09NX1BMTExPQ0tfQ01QMSwgMHg2NSksCisJVUZTX1FDT01fUEhZX0NBTF9FTlRSWShRU0VSREVTX0NPTV9QTExMT0NLX0NNUDIsIDB4MWUpLAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9waHktcWNvbS11ZnMuYyBiL2RyaXZlcnMvcGh5L3BoeS1xY29tLXVmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZWU5ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BoeS9waHktcWNvbS11ZnMuYwpAQCAtMCwwICsxLDc0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMy0yMDE1LCBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlICJwaHktcWNvbS11ZnMtaS5oIgorCisjZGVmaW5lIE1BWF9QUk9QX05BTUUgICAgICAgICAgICAgIDMyCisjZGVmaW5lIFZEREFfUEhZX01JTl9VViAgICAgICAgICAgIDEwMDAwMDAKKyNkZWZpbmUgVkREQV9QSFlfTUFYX1VWICAgICAgICAgICAgMTAwMDAwMAorI2RlZmluZSBWRERBX1BMTF9NSU5fVVYgICAgICAgICAgICAxODAwMDAwCisjZGVmaW5lIFZEREFfUExMX01BWF9VViAgICAgICAgICAgIDE4MDAwMDAKKyNkZWZpbmUgVkREUF9SRUZfQ0xLX01JTl9VViAgICAgICAgMTIwMDAwMAorI2RlZmluZSBWRERQX1JFRl9DTEtfTUFYX1VWICAgICAgICAxMjAwMDAwCisKK3N0YXRpYyBpbnQgX191ZnNfcWNvbV9waHlfaW5pdF92cmVnKHN0cnVjdCBwaHkgKiwgc3RydWN0IHVmc19xY29tX3BoeV92cmVnICosCisJCQkJICAgIGNvbnN0IGNoYXIgKiwgYm9vbCk7CitzdGF0aWMgaW50IHVmc19xY29tX3BoeV9pbml0X3ZyZWcoc3RydWN0IHBoeSAqLCBzdHJ1Y3QgdWZzX3Fjb21fcGh5X3ZyZWcgKiwKKwkJCQkgIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgaW50IHVmc19xY29tX3BoeV9iYXNlX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCQkgIHN0cnVjdCB1ZnNfcWNvbV9waHkgKnBoeV9jb21tb24pOworCitpbnQgdWZzX3Fjb21fcGh5X2NhbGlicmF0ZShzdHJ1Y3QgdWZzX3Fjb21fcGh5ICp1ZnNfcWNvbV9waHksCisJCQkgICBzdHJ1Y3QgdWZzX3Fjb21fcGh5X2NhbGlicmF0aW9uICp0YmxfQSwKKwkJCSAgIGludCB0Ymxfc2l6ZV9BLAorCQkJICAgc3RydWN0IHVmc19xY29tX3BoeV9jYWxpYnJhdGlvbiAqdGJsX0IsCisJCQkgICBpbnQgdGJsX3NpemVfQiwgYm9vbCBpc19yYXRlX0IpCit7CisJaW50IGk7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXRibF9BKSB7CisJCWRldl9lcnIodWZzX3Fjb21fcGh5LT5kZXYsICIlczogdGJsX0EgaXMgTlVMTCIsIF9fZnVuY19fKTsKKwkJcmV0ID0gRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdGJsX3NpemVfQTsgaSsrKQorCQl3cml0ZWxfcmVsYXhlZCh0YmxfQVtpXS5jZmdfdmFsdWUsCisJCQkgICAgICAgdWZzX3Fjb21fcGh5LT5tbWlvICsgdGJsX0FbaV0ucmVnX29mZnNldCk7CisKKwkvKgorCSAqIEluIGNhc2Ugd2Ugd291bGQgbGlrZSB0byB3b3JrIGluIHJhdGUgQiwgd2UgbmVlZAorCSAqIHRvIG92ZXJyaWRlIGEgcmVnaXN0ZXJzIHRoYXQgd2VyZSBjb25maWd1cmVkIGluIHJhdGUgQSB0YWJsZQorCSAqIHdpdGggcmVnaXN0ZXJzIG9mIHJhdGUgQiB0YWJsZS4KKwkgKiB0YWJsZS4KKwkgKi8KKwlpZiAoaXNfcmF0ZV9CKSB7CisJCWlmICghdGJsX0IpIHsKKwkJCWRldl9lcnIodWZzX3Fjb21fcGh5LT5kZXYsICIlczogdGJsX0IgaXMgTlVMTCIsCisJCQkJX19mdW5jX18pOworCQkJcmV0ID0gRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgdGJsX3NpemVfQjsgaSsrKQorCQkJd3JpdGVsX3JlbGF4ZWQodGJsX0JbaV0uY2ZnX3ZhbHVlLAorCQkJCXVmc19xY29tX3BoeS0+bW1pbyArIHRibF9CW2ldLnJlZ19vZmZzZXQpOworCX0KKworCS8qIGZsdXNoIGJ1ZmZlcmVkIHdyaXRlcyAqLworCW1iKCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgcGh5ICp1ZnNfcWNvbV9waHlfZ2VuZXJpY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCXN0cnVjdCB1ZnNfcWNvbV9waHkgKmNvbW1vbl9jZmcsCisJCQkJc3RydWN0IHBoeV9vcHMgKnVmc19xY29tX3BoeV9nZW5fb3BzLAorCQkJCXN0cnVjdCB1ZnNfcWNvbV9waHlfc3BlY2lmaWNfb3BzICpwaHlfc3BlY19vcHMpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5ID0gTlVMTDsKKwlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwaHlfcHJvdmlkZXI7CisKKwllcnIgPSB1ZnNfcWNvbV9waHlfYmFzZV9pbml0KHBkZXYsIGNvbW1vbl9jZmcpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICIlczogcGh5IGJhc2UgaW5pdCBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwlwaHlfcHJvdmlkZXIgPSBkZXZtX29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxhdGUpOworCWlmIChJU19FUlIocGh5X3Byb3ZpZGVyKSkgeworCQllcnIgPSBQVFJfRVJSKHBoeV9wcm92aWRlcik7CisJCWRldl9lcnIoZGV2LCAiJXM6IGZhaWxlZCB0byByZWdpc3RlciBwaHkgJWRcbiIsIF9fZnVuY19fLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwlnZW5lcmljX3BoeSA9IGRldm1fcGh5X2NyZWF0ZShkZXYsIE5VTEwsIHVmc19xY29tX3BoeV9nZW5fb3BzKTsKKwlpZiAoSVNfRVJSKGdlbmVyaWNfcGh5KSkgeworCQllcnIgPSAgUFRSX0VSUihnZW5lcmljX3BoeSk7CisJCWRldl9lcnIoZGV2LCAiJXM6IGZhaWxlZCB0byBjcmVhdGUgcGh5ICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJY29tbW9uX2NmZy0+cGh5X3NwZWNfb3BzID0gcGh5X3NwZWNfb3BzOworCWNvbW1vbl9jZmctPmRldiA9IGRldjsKKworb3V0OgorCXJldHVybiBnZW5lcmljX3BoeTsKK30KKworLyoKKyAqIFRoaXMgYXNzdW1lcyB0aGUgZW1iZWRkZWQgcGh5IHN0cnVjdHVyZSBpbnNpZGUgZ2VuZXJpY19waHkgaXMgb2YgdHlwZQorICogc3RydWN0IHVmc19xY29tX3BoeS4gSW4gb3JkZXIgdG8gZnVuY3Rpb24gcHJvcGVybHkgaXQncyBjcnVjaWFsCisgKiB0byBrZWVwIHRoZSBlbWJlZGRlZCBzdHJ1Y3QgInN0cnVjdCB1ZnNfcWNvbV9waHkgY29tbW9uX2NmZyIKKyAqIGFzIHRoZSBmaXJzdCBpbnNpZGUgZ2VuZXJpY19waHkuCisgKi8KK3N0cnVjdCB1ZnNfcWNvbV9waHkgKmdldF91ZnNfcWNvbV9waHkoc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpCit7CisJcmV0dXJuIChzdHJ1Y3QgdWZzX3Fjb21fcGh5ICopcGh5X2dldF9kcnZkYXRhKGdlbmVyaWNfcGh5KTsKK30KKworc3RhdGljCitpbnQgdWZzX3Fjb21fcGh5X2Jhc2VfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJICAgc3RydWN0IHVmc19xY29tX3BoeSAqcGh5X2NvbW1vbikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBlcnIgPSAwOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBoeV9tZW0iKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKGRldiwgIiVzOiBwaHlfbWVtIHJlc291cmNlIG5vdCBmb3VuZFxuIiwgX19mdW5jX18pOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlwaHlfY29tbW9uLT5tbWlvID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKCh2b2lkIGNvbnN0ICopcGh5X2NvbW1vbi0+bW1pbykpIHsKKwkJZXJyID0gUFRSX0VSUigodm9pZCBjb25zdCAqKXBoeV9jb21tb24tPm1taW8pOworCQlwaHlfY29tbW9uLT5tbWlvID0gTlVMTDsKKwkJZGV2X2VycihkZXYsICIlczogaW9yZW1hcCBmb3IgcGh5X21lbSByZXNvdXJjZSBmYWlsZWQgJWRcbiIsCisJCQlfX2Z1bmNfXywgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogImRldl9yZWZfY2xrX2N0cmxfbWVtIiBpcyBvcHRpb25hbCByZXNvdXJjZSAqLworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sCisJCQkJCSAgICJkZXZfcmVmX2Nsa19jdHJsX21lbSIpOworCWlmICghcmVzKSB7CisJCWRldl9kYmcoZGV2LCAiJXM6IGRldl9yZWZfY2xrX2N0cmxfbWVtIHJlc291cmNlIG5vdCBmb3VuZFxuIiwKKwkJCV9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCisJcGh5X2NvbW1vbi0+ZGV2X3JlZl9jbGtfY3RybF9tbWlvID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKCh2b2lkIGNvbnN0ICopcGh5X2NvbW1vbi0+ZGV2X3JlZl9jbGtfY3RybF9tbWlvKSkgeworCQllcnIgPSBQVFJfRVJSKCh2b2lkIGNvbnN0ICopcGh5X2NvbW1vbi0+ZGV2X3JlZl9jbGtfY3RybF9tbWlvKTsKKwkJcGh5X2NvbW1vbi0+ZGV2X3JlZl9jbGtfY3RybF9tbWlvID0gTlVMTDsKKwkJZGV2X2VycihkZXYsICIlczogaW9yZW1hcCBmb3IgZGV2X3JlZl9jbGtfY3RybF9tZW0gcmVzb3VyY2UgZmFpbGVkICVkXG4iLAorCQkJX19mdW5jX18sIGVycik7CisJfQorCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX3Vmc19xY29tX3BoeV9jbGtfZ2V0KHN0cnVjdCBwaHkgKnBoeSwKKwkJCSBjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgY2xrICoqY2xrX291dCwgYm9vbCBlcnJfcHJpbnQpCit7CisJc3RydWN0IGNsayAqY2xrOworCWludCBlcnIgPSAwOworCXN0cnVjdCB1ZnNfcWNvbV9waHkgKnVmc19xY29tX3BoeSA9IGdldF91ZnNfcWNvbV9waHkocGh5KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB1ZnNfcWNvbV9waHktPmRldjsKKworCWNsayA9IGRldm1fY2xrX2dldChkZXYsIG5hbWUpOworCWlmIChJU19FUlIoY2xrKSkgeworCQllcnIgPSBQVFJfRVJSKGNsayk7CisJCWlmIChlcnJfcHJpbnQpCisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgJXMgZXJyICVkIiwgbmFtZSwgZXJyKTsKKwl9IGVsc2UgeworCQkqY2xrX291dCA9IGNsazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMKK2ludCB1ZnNfcWNvbV9waHlfY2xrX2dldChzdHJ1Y3QgcGh5ICpwaHksCisJCQkgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGNsayAqKmNsa19vdXQpCit7CisJcmV0dXJuIF9fdWZzX3Fjb21fcGh5X2Nsa19nZXQocGh5LCBuYW1lLCBjbGtfb3V0LCB0cnVlKTsKK30KKworaW50Cit1ZnNfcWNvbV9waHlfaW5pdF9jbGtzKHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5LAorCQkgICAgICAgc3RydWN0IHVmc19xY29tX3BoeSAqcGh5X2NvbW1vbikKK3sKKwlpbnQgZXJyOworCisJZXJyID0gdWZzX3Fjb21fcGh5X2Nsa19nZXQoZ2VuZXJpY19waHksICJ0eF9pZmFjZV9jbGsiLAorCQkJCSAgICZwaHlfY29tbW9uLT50eF9pZmFjZV9jbGspOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gdWZzX3Fjb21fcGh5X2Nsa19nZXQoZ2VuZXJpY19waHksICJyeF9pZmFjZV9jbGsiLAorCQkJCSAgICZwaHlfY29tbW9uLT5yeF9pZmFjZV9jbGspOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gdWZzX3Fjb21fcGh5X2Nsa19nZXQoZ2VuZXJpY19waHksICJyZWZfY2xrX3NyYyIsCisJCQkJICAgJnBoeV9jb21tb24tPnJlZl9jbGtfc3JjKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCS8qCisJICogInJlZl9jbGtfcGFyZW50IiBpcyBvcHRpb25hbCBoZW5jZSBkb24ndCBhYm9ydCBpbml0IGlmIGl0J3Mgbm90CisJICogZm91bmQuCisJICovCisJX191ZnNfcWNvbV9waHlfY2xrX2dldChnZW5lcmljX3BoeSwgInJlZl9jbGtfcGFyZW50IiwKKwkJCQkgICAmcGh5X2NvbW1vbi0+cmVmX2Nsa19wYXJlbnQsIGZhbHNlKTsKKworCWVyciA9IHVmc19xY29tX3BoeV9jbGtfZ2V0KGdlbmVyaWNfcGh5LCAicmVmX2NsayIsCisJCQkJICAgJnBoeV9jb21tb24tPnJlZl9jbGspOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworaW50Cit1ZnNfcWNvbV9waHlfaW5pdF92cmVndWxhdG9ycyhzdHJ1Y3QgcGh5ICpnZW5lcmljX3BoeSwKKwkJCSAgICAgIHN0cnVjdCB1ZnNfcWNvbV9waHkgKnBoeV9jb21tb24pCit7CisJaW50IGVycjsKKworCWVyciA9IHVmc19xY29tX3BoeV9pbml0X3ZyZWcoZ2VuZXJpY19waHksICZwaHlfY29tbW9uLT52ZGRhX3BsbCwKKwkJInZkZGEtcGxsIik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSB1ZnNfcWNvbV9waHlfaW5pdF92cmVnKGdlbmVyaWNfcGh5LCAmcGh5X2NvbW1vbi0+dmRkYV9waHksCisJCSJ2ZGRhLXBoeSIpOworCisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiB2ZGRwLXJlZi1jbGstKiBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbCAqLworCV9fdWZzX3Fjb21fcGh5X2luaXRfdnJlZyhnZW5lcmljX3BoeSwgJnBoeV9jb21tb24tPnZkZHBfcmVmX2NsaywKKwkJCQkgInZkZHAtcmVmLWNsayIsIHRydWUpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX191ZnNfcWNvbV9waHlfaW5pdF92cmVnKHN0cnVjdCBwaHkgKnBoeSwKKwkJc3RydWN0IHVmc19xY29tX3BoeV92cmVnICp2cmVnLCBjb25zdCBjaGFyICpuYW1lLCBib29sIG9wdGlvbmFsKQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCB1ZnNfcWNvbV9waHkgKnVmc19xY29tX3BoeSA9IGdldF91ZnNfcWNvbV9waHkocGh5KTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSB1ZnNfcWNvbV9waHktPmRldjsKKworCWNoYXIgcHJvcF9uYW1lW01BWF9QUk9QX05BTUVdOworCisJdnJlZy0+bmFtZSA9IGtzdHJkdXAobmFtZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2cmVnLT5uYW1lKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXZyZWctPnJlZyA9IGRldm1fcmVndWxhdG9yX2dldChkZXYsIG5hbWUpOworCWlmIChJU19FUlIodnJlZy0+cmVnKSkgeworCQllcnIgPSBQVFJfRVJSKHZyZWctPnJlZyk7CisJCXZyZWctPnJlZyA9IE5VTEw7CisJCWlmICghb3B0aW9uYWwpCisJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgJXMsICVkXG4iLCBuYW1lLCBlcnIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGV2LT5vZl9ub2RlKSB7CisJCXNucHJpbnRmKHByb3BfbmFtZSwgTUFYX1BST1BfTkFNRSwgIiVzLW1heC1taWNyb2FtcCIsIG5hbWUpOworCQllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPm9mX25vZGUsCisJCQkJCXByb3BfbmFtZSwgJnZyZWctPm1heF91QSk7CisJCWlmIChlcnIgJiYgZXJyICE9IC1FSU5WQUwpIHsKKwkJCWRldl9lcnIoZGV2LCAiJXM6IGZhaWxlZCB0byByZWFkICVzXG4iLAorCQkJCQlfX2Z1bmNfXywgcHJvcF9uYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgaWYgKGVyciA9PSAtRUlOVkFMIHx8ICF2cmVnLT5tYXhfdUEpIHsKKwkJCWlmIChyZWd1bGF0b3JfY291bnRfdm9sdGFnZXModnJlZy0+cmVnKSA+IDApIHsKKwkJCQlkZXZfZXJyKGRldiwgIiVzOiAlcyBpcyBtYW5kYXRvcnlcbiIsCisJCQkJCQlfX2Z1bmNfXywgcHJvcF9uYW1lKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWVyciA9IDA7CisJCX0KKwkJc25wcmludGYocHJvcF9uYW1lLCBNQVhfUFJPUF9OQU1FLCAiJXMtYWx3YXlzLW9uIiwgbmFtZSk7CisJCWlmIChvZl9nZXRfcHJvcGVydHkoZGV2LT5vZl9ub2RlLCBwcm9wX25hbWUsIE5VTEwpKQorCQkJdnJlZy0+aXNfYWx3YXlzX29uID0gdHJ1ZTsKKwkJZWxzZQorCQkJdnJlZy0+aXNfYWx3YXlzX29uID0gZmFsc2U7CisJfQorCisJaWYgKCFzdHJjbXAobmFtZSwgInZkZGEtcGxsIikpIHsKKwkJdnJlZy0+bWF4X3VWID0gVkREQV9QTExfTUFYX1VWOworCQl2cmVnLT5taW5fdVYgPSBWRERBX1BMTF9NSU5fVVY7CisJfSBlbHNlIGlmICghc3RyY21wKG5hbWUsICJ2ZGRhLXBoeSIpKSB7CisJCXZyZWctPm1heF91ViA9IFZEREFfUEhZX01BWF9VVjsKKwkJdnJlZy0+bWluX3VWID0gVkREQV9QSFlfTUlOX1VWOworCX0gZWxzZSBpZiAoIXN0cmNtcChuYW1lLCAidmRkcC1yZWYtY2xrIikpIHsKKwkJdnJlZy0+bWF4X3VWID0gVkREUF9SRUZfQ0xLX01BWF9VVjsKKwkJdnJlZy0+bWluX3VWID0gVkREUF9SRUZfQ0xLX01JTl9VVjsKKwl9CisKK291dDoKKwlpZiAoZXJyKQorCQlrZnJlZSh2cmVnLT5uYW1lKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHVmc19xY29tX3BoeV9pbml0X3ZyZWcoc3RydWN0IHBoeSAqcGh5LAorCQkJc3RydWN0IHVmc19xY29tX3BoeV92cmVnICp2cmVnLCBjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiBfX3Vmc19xY29tX3BoeV9pbml0X3ZyZWcocGh5LCB2cmVnLCBuYW1lLCBmYWxzZSk7Cit9CisKK3N0YXRpYworaW50IHVmc19xY29tX3BoeV9jZmdfdnJlZyhzdHJ1Y3QgcGh5ICpwaHksCisJCQkgIHN0cnVjdCB1ZnNfcWNvbV9waHlfdnJlZyAqdnJlZywgYm9vbCBvbikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcmVndWxhdG9yICpyZWcgPSB2cmVnLT5yZWc7CisJY29uc3QgY2hhciAqbmFtZSA9IHZyZWctPm5hbWU7CisJaW50IG1pbl91VjsKKwlpbnQgdUFfbG9hZDsKKwlzdHJ1Y3QgdWZzX3Fjb21fcGh5ICp1ZnNfcWNvbV9waHkgPSBnZXRfdWZzX3Fjb21fcGh5KHBoeSk7CisJc3RydWN0IGRldmljZSAqZGV2ID0gdWZzX3Fjb21fcGh5LT5kZXY7CisKKwlCVUdfT04oIXZyZWcpOworCisJaWYgKHJlZ3VsYXRvcl9jb3VudF92b2x0YWdlcyhyZWcpID4gMCkgeworCQltaW5fdVYgPSBvbiA/IHZyZWctPm1pbl91ViA6IDA7CisJCXJldCA9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZShyZWcsIG1pbl91ViwgdnJlZy0+bWF4X3VWKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsICIlczogJXMgc2V0IHZvbHRhZ2UgZmFpbGVkLCBlcnI9JWRcbiIsCisJCQkJCV9fZnVuY19fLCBuYW1lLCByZXQpOworCQkJZ290byBvdXQ7CisJCX0KKwkJdUFfbG9hZCA9IG9uID8gdnJlZy0+bWF4X3VBIDogMDsKKwkJcmV0ID0gcmVndWxhdG9yX3NldF9vcHRpbXVtX21vZGUocmVnLCB1QV9sb2FkKTsKKwkJaWYgKHJldCA+PSAwKSB7CisJCQkvKgorCQkJICogcmVndWxhdG9yX3NldF9vcHRpbXVtX21vZGUoKSByZXR1cm5zIG5ldyByZWd1bGF0b3IKKwkJCSAqIG1vZGUgdXBvbiBzdWNjZXNzLgorCQkJICovCisJCQlyZXQgPSAwOworCQl9IGVsc2UgeworCQkJZGV2X2VycihkZXYsICIlczogJXMgc2V0IG9wdGltdW0gbW9kZSh1QV9sb2FkPSVkKSBmYWlsZWQsIGVycj0lZFxuIiwKKwkJCQkJX19mdW5jX18sIG5hbWUsIHVBX2xvYWQsIHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMKK2ludCB1ZnNfcWNvbV9waHlfZW5hYmxlX3ZyZWcoc3RydWN0IHBoeSAqcGh5LAorCQkJICAgICBzdHJ1Y3QgdWZzX3Fjb21fcGh5X3ZyZWcgKnZyZWcpCit7CisJc3RydWN0IHVmc19xY29tX3BoeSAqdWZzX3Fjb21fcGh5ID0gZ2V0X3Vmc19xY29tX3BoeShwaHkpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVmc19xY29tX3BoeS0+ZGV2OworCWludCByZXQgPSAwOworCisJaWYgKCF2cmVnIHx8IHZyZWctPmVuYWJsZWQpCisJCWdvdG8gb3V0OworCisJcmV0ID0gdWZzX3Fjb21fcGh5X2NmZ192cmVnKHBoeSwgdnJlZywgdHJ1ZSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIiVzOiB1ZnNfcWNvbV9waHlfY2ZnX3ZyZWcoKSBmYWlsZWQsIGVycj0lZFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKHZyZWctPnJlZyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgIiVzOiBlbmFibGUgZmFpbGVkLCBlcnI9JWRcbiIsCisJCQkJX19mdW5jX18sIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXZyZWctPmVuYWJsZWQgPSB0cnVlOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK2ludCB1ZnNfcWNvbV9waHlfZW5hYmxlX3JlZl9jbGsoc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHVmc19xY29tX3BoeSAqcGh5ID0gZ2V0X3Vmc19xY29tX3BoeShnZW5lcmljX3BoeSk7CisKKwlpZiAocGh5LT5pc19yZWZfY2xrX2VuYWJsZWQpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiByZWZlcmVuY2UgY2xvY2sgaXMgcHJvcGFnYXRlZCBpbiBhIGRhaXN5LWNoYWluZWQgbWFubmVyIGZyb20KKwkgKiBzb3VyY2UgdG8gcGh5LCBzbyB1bmdhdGUgdGhlbSBhdCBlYWNoIHN0YWdlLgorCSAqLworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwaHktPnJlZl9jbGtfc3JjKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIocGh5LT5kZXYsICIlczogcmVmX2Nsa19zcmMgZW5hYmxlIGZhaWxlZCAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiAicmVmX2Nsa19wYXJlbnQiIGlzIG9wdGlvbmFsIGNsb2NrIGhlbmNlIG1ha2Ugc3VyZSB0aGF0IGNsayByZWZlcmVuY2UKKwkgKiBpcyBhdmFpbGFibGUgYmVmb3JlIHRyeWluZyB0byBlbmFibGUgdGhlIGNsb2NrLgorCSAqLworCWlmIChwaHktPnJlZl9jbGtfcGFyZW50KSB7CisJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwaHktPnJlZl9jbGtfcGFyZW50KTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihwaHktPmRldiwgIiVzOiByZWZfY2xrX3BhcmVudCBlbmFibGUgZmFpbGVkICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgcmV0KTsKKwkJCWdvdG8gb3V0X2Rpc2FibGVfc3JjOworCQl9CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHBoeS0+cmVmX2Nsayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHBoeS0+ZGV2LCAiJXM6IHJlZl9jbGsgZW5hYmxlIGZhaWxlZCAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBvdXRfZGlzYWJsZV9wYXJlbnQ7CisJfQorCisJcGh5LT5pc19yZWZfY2xrX2VuYWJsZWQgPSB0cnVlOworCWdvdG8gb3V0OworCitvdXRfZGlzYWJsZV9wYXJlbnQ6CisJaWYgKHBoeS0+cmVmX2Nsa19wYXJlbnQpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShwaHktPnJlZl9jbGtfcGFyZW50KTsKK291dF9kaXNhYmxlX3NyYzoKKwljbGtfZGlzYWJsZV91bnByZXBhcmUocGh5LT5yZWZfY2xrX3NyYyk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljCitpbnQgdWZzX3Fjb21fcGh5X2Rpc2FibGVfdnJlZyhzdHJ1Y3QgcGh5ICpwaHksCisJCQkgICAgICBzdHJ1Y3QgdWZzX3Fjb21fcGh5X3ZyZWcgKnZyZWcpCit7CisJc3RydWN0IHVmc19xY29tX3BoeSAqdWZzX3Fjb21fcGh5ID0gZ2V0X3Vmc19xY29tX3BoeShwaHkpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHVmc19xY29tX3BoeS0+ZGV2OworCWludCByZXQgPSAwOworCisJaWYgKCF2cmVnIHx8ICF2cmVnLT5lbmFibGVkIHx8IHZyZWctPmlzX2Fsd2F5c19vbikKKwkJZ290byBvdXQ7CisKKwlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZSh2cmVnLT5yZWcpOworCisJaWYgKCFyZXQpIHsKKwkJLyogaWdub3JlIGVycm9ycyBvbiBhcHBseWluZyBkaXNhYmxlIGNvbmZpZyAqLworCQl1ZnNfcWNvbV9waHlfY2ZnX3ZyZWcocGh5LCB2cmVnLCBmYWxzZSk7CisJCXZyZWctPmVuYWJsZWQgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlkZXZfZXJyKGRldiwgIiVzOiAlcyBkaXNhYmxlIGZhaWxlZCwgZXJyPSVkXG4iLAorCQkJCV9fZnVuY19fLCB2cmVnLT5uYW1lLCByZXQpOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIHVmc19xY29tX3BoeV9kaXNhYmxlX3JlZl9jbGsoc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpCit7CisJc3RydWN0IHVmc19xY29tX3BoeSAqcGh5ID0gZ2V0X3Vmc19xY29tX3BoeShnZW5lcmljX3BoeSk7CisKKwlpZiAocGh5LT5pc19yZWZfY2xrX2VuYWJsZWQpIHsKKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBoeS0+cmVmX2Nsayk7CisJCS8qCisJCSAqICJyZWZfY2xrX3BhcmVudCIgaXMgb3B0aW9uYWwgY2xvY2sgaGVuY2UgbWFrZSBzdXJlIHRoYXQgY2xrCisJCSAqIHJlZmVyZW5jZSBpcyBhdmFpbGFibGUgYmVmb3JlIHRyeWluZyB0byBkaXNhYmxlIHRoZSBjbG9jay4KKwkJICovCisJCWlmIChwaHktPnJlZl9jbGtfcGFyZW50KQorCQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBoeS0+cmVmX2Nsa19wYXJlbnQpOworCQljbGtfZGlzYWJsZV91bnByZXBhcmUocGh5LT5yZWZfY2xrX3NyYyk7CisJCXBoeS0+aXNfcmVmX2Nsa19lbmFibGVkID0gZmFsc2U7CisJfQorfQorCisjZGVmaW5lIFVGU19SRUZfQ0xLX0VOCSgxIDw8IDUpCisKK3N0YXRpYyB2b2lkIHVmc19xY29tX3BoeV9kZXZfcmVmX2Nsa19jdHJsKHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5LCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgdWZzX3Fjb21fcGh5ICpwaHkgPSBnZXRfdWZzX3Fjb21fcGh5KGdlbmVyaWNfcGh5KTsKKworCWlmIChwaHktPmRldl9yZWZfY2xrX2N0cmxfbW1pbyAmJgorCSAgICAoZW5hYmxlIF4gcGh5LT5pc19kZXZfcmVmX2Nsa19lbmFibGVkKSkgeworCQl1MzIgdGVtcCA9IHJlYWRsX3JlbGF4ZWQocGh5LT5kZXZfcmVmX2Nsa19jdHJsX21taW8pOworCisJCWlmIChlbmFibGUpCisJCQl0ZW1wIHw9IFVGU19SRUZfQ0xLX0VOOworCQllbHNlCisJCQl0ZW1wICY9IH5VRlNfUkVGX0NMS19FTjsKKworCQkvKgorCQkgKiBJZiB3ZSBhcmUgaGVyZSB0byBkaXNhYmxlIHRoaXMgY2xvY2sgaW1tZWRpYXRlbHkgYWZ0ZXIKKwkJICogZW50ZXJpbmcgaW50byBoaWJlcm44LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGRldmljZQorCQkgKiByZWZfY2xrIGlzIGFjdGl2ZSBhdGxlYXN0IDF1cyBhZnRlciB0aGUgaGliZXJuOCBlbnRlci4KKwkJICovCisJCWlmICghZW5hYmxlKQorCQkJdWRlbGF5KDEpOworCisJCXdyaXRlbF9yZWxheGVkKHRlbXAsIHBoeS0+ZGV2X3JlZl9jbGtfY3RybF9tbWlvKTsKKwkJLyogZW5zdXJlIHRoYXQgcmVmX2NsayBpcyBlbmFibGVkL2Rpc2FibGVkIGJlZm9yZSB3ZSByZXR1cm4gKi8KKwkJd21iKCk7CisJCS8qCisJCSAqIElmIHdlIGNhbGwgaGliZXJuOCBleGl0IGFmdGVyIHRoaXMsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQKKwkJICogZGV2aWNlIHJlZl9jbGsgaXMgc3RhYmxlIGZvciBhdGxlYXN0IDF1cyBiZWZvcmUgdGhlIGhpYmVybjgKKwkJICogZXhpdCBjb21tYW5kLgorCQkgKi8KKwkJaWYgKGVuYWJsZSkKKwkJCXVkZWxheSgxKTsKKworCQlwaHktPmlzX2Rldl9yZWZfY2xrX2VuYWJsZWQgPSBlbmFibGU7CisJfQorfQorCit2b2lkIHVmc19xY29tX3BoeV9lbmFibGVfZGV2X3JlZl9jbGsoc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpCit7CisJdWZzX3Fjb21fcGh5X2Rldl9yZWZfY2xrX2N0cmwoZ2VuZXJpY19waHksIHRydWUpOworfQorCit2b2lkIHVmc19xY29tX3BoeV9kaXNhYmxlX2Rldl9yZWZfY2xrKHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5KQoreworCXVmc19xY29tX3BoeV9kZXZfcmVmX2Nsa19jdHJsKGdlbmVyaWNfcGh5LCBmYWxzZSk7Cit9CisKKy8qIFR1cm4gT04gTS1QSFkgUk1NSSBpbnRlcmZhY2UgY2xvY2tzICovCitpbnQgdWZzX3Fjb21fcGh5X2VuYWJsZV9pZmFjZV9jbGsoc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpCit7CisJc3RydWN0IHVmc19xY29tX3BoeSAqcGh5ID0gZ2V0X3Vmc19xY29tX3BoeShnZW5lcmljX3BoeSk7CisJaW50IHJldCA9IDA7CisKKwlpZiAocGh5LT5pc19pZmFjZV9jbGtfZW5hYmxlZCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocGh5LT50eF9pZmFjZV9jbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihwaHktPmRldiwgIiVzOiB0eF9pZmFjZV9jbGsgZW5hYmxlIGZhaWxlZCAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwaHktPnJ4X2lmYWNlX2Nsayk7CisJaWYgKHJldCkgeworCQljbGtfZGlzYWJsZV91bnByZXBhcmUocGh5LT50eF9pZmFjZV9jbGspOworCQlkZXZfZXJyKHBoeS0+ZGV2LCAiJXM6IHJ4X2lmYWNlX2NsayBlbmFibGUgZmFpbGVkICVkLiBkaXNhYmxpbmcgYWxzbyB0eF9pZmFjZV9jbGtcbiIsCisJCQkJX19mdW5jX18sIHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlwaHktPmlzX2lmYWNlX2Nsa19lbmFibGVkID0gdHJ1ZTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qIFR1cm4gT0ZGIE0tUEhZIFJNTUkgaW50ZXJmYWNlIGNsb2NrcyAqLwordm9pZCB1ZnNfcWNvbV9waHlfZGlzYWJsZV9pZmFjZV9jbGsoc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpCit7CisJc3RydWN0IHVmc19xY29tX3BoeSAqcGh5ID0gZ2V0X3Vmc19xY29tX3BoeShnZW5lcmljX3BoeSk7CisKKwlpZiAocGh5LT5pc19pZmFjZV9jbGtfZW5hYmxlZCkgeworCQljbGtfZGlzYWJsZV91bnByZXBhcmUocGh5LT50eF9pZmFjZV9jbGspOworCQljbGtfZGlzYWJsZV91bnByZXBhcmUocGh5LT5yeF9pZmFjZV9jbGspOworCQlwaHktPmlzX2lmYWNlX2Nsa19lbmFibGVkID0gZmFsc2U7CisJfQorfQorCitpbnQgdWZzX3Fjb21fcGh5X3N0YXJ0X3NlcmRlcyhzdHJ1Y3QgcGh5ICpnZW5lcmljX3BoeSkKK3sKKwlzdHJ1Y3QgdWZzX3Fjb21fcGh5ICp1ZnNfcWNvbV9waHkgPSBnZXRfdWZzX3Fjb21fcGh5KGdlbmVyaWNfcGh5KTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghdWZzX3Fjb21fcGh5LT5waHlfc3BlY19vcHMtPnN0YXJ0X3NlcmRlcykgeworCQlkZXZfZXJyKHVmc19xY29tX3BoeS0+ZGV2LCAiJXM6IHN0YXJ0X3NlcmRlcygpIGNhbGxiYWNrIGlzIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9UU1VQUDsKKwl9IGVsc2UgeworCQl1ZnNfcWNvbV9waHktPnBoeV9zcGVjX29wcy0+c3RhcnRfc2VyZGVzKHVmc19xY29tX3BoeSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworaW50IHVmc19xY29tX3BoeV9zZXRfdHhfbGFuZV9lbmFibGUoc3RydWN0IHBoeSAqZ2VuZXJpY19waHksIHUzMiB0eF9sYW5lcykKK3sKKwlzdHJ1Y3QgdWZzX3Fjb21fcGh5ICp1ZnNfcWNvbV9waHkgPSBnZXRfdWZzX3Fjb21fcGh5KGdlbmVyaWNfcGh5KTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghdWZzX3Fjb21fcGh5LT5waHlfc3BlY19vcHMtPnNldF90eF9sYW5lX2VuYWJsZSkgeworCQlkZXZfZXJyKHVmc19xY29tX3BoeS0+ZGV2LCAiJXM6IHNldF90eF9sYW5lX2VuYWJsZSgpIGNhbGxiYWNrIGlzIG5vdCBzdXBwb3J0ZWRcbiIsCisJCQlfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9UU1VQUDsKKwl9IGVsc2UgeworCQl1ZnNfcWNvbV9waHktPnBoeV9zcGVjX29wcy0+c2V0X3R4X2xhbmVfZW5hYmxlKHVmc19xY29tX3BoeSwKKwkJCQkJCQkgICAgICAgdHhfbGFuZXMpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgdWZzX3Fjb21fcGh5X3NhdmVfY29udHJvbGxlcl92ZXJzaW9uKHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5LAorCQkJCQkgIHU4IG1ham9yLCB1MTYgbWlub3IsIHUxNiBzdGVwKQoreworCXN0cnVjdCB1ZnNfcWNvbV9waHkgKnVmc19xY29tX3BoeSA9IGdldF91ZnNfcWNvbV9waHkoZ2VuZXJpY19waHkpOworCisJdWZzX3Fjb21fcGh5LT5ob3N0X2N0cmxfcmV2X21ham9yID0gbWFqb3I7CisJdWZzX3Fjb21fcGh5LT5ob3N0X2N0cmxfcmV2X21pbm9yID0gbWlub3I7CisJdWZzX3Fjb21fcGh5LT5ob3N0X2N0cmxfcmV2X3N0ZXAgPSBzdGVwOworfQorCitpbnQgdWZzX3Fjb21fcGh5X2NhbGlicmF0ZV9waHkoc3RydWN0IHBoeSAqZ2VuZXJpY19waHksIGJvb2wgaXNfcmF0ZV9CKQoreworCXN0cnVjdCB1ZnNfcWNvbV9waHkgKnVmc19xY29tX3BoeSA9IGdldF91ZnNfcWNvbV9waHkoZ2VuZXJpY19waHkpOworCWludCByZXQgPSAwOworCisJaWYgKCF1ZnNfcWNvbV9waHktPnBoeV9zcGVjX29wcy0+Y2FsaWJyYXRlX3BoeSkgeworCQlkZXZfZXJyKHVmc19xY29tX3BoeS0+ZGV2LCAiJXM6IGNhbGlicmF0ZV9waHkoKSBjYWxsYmFjayBpcyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJX19mdW5jX18pOworCQlyZXQgPSAtRU5PVFNVUFA7CisJfSBlbHNlIHsKKwkJcmV0ID0gdWZzX3Fjb21fcGh5LT5waHlfc3BlY19vcHMtPgorCQkJCWNhbGlicmF0ZV9waHkodWZzX3Fjb21fcGh5LCBpc19yYXRlX0IpOworCQlpZiAocmV0KQorCQkJZGV2X2Vycih1ZnNfcWNvbV9waHktPmRldiwgIiVzOiBjYWxpYnJhdGVfcGh5KCkgZmFpbGVkICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXQpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCB1ZnNfcWNvbV9waHlfcmVtb3ZlKHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5LAorCQkJc3RydWN0IHVmc19xY29tX3BoeSAqdWZzX3Fjb21fcGh5KQoreworCXBoeV9wb3dlcl9vZmYoZ2VuZXJpY19waHkpOworCisJa2ZyZWUodWZzX3Fjb21fcGh5LT52ZGRhX3BsbC5uYW1lKTsKKwlrZnJlZSh1ZnNfcWNvbV9waHktPnZkZGFfcGh5Lm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB1ZnNfcWNvbV9waHlfZXhpdChzdHJ1Y3QgcGh5ICpnZW5lcmljX3BoeSkKK3sKKwlzdHJ1Y3QgdWZzX3Fjb21fcGh5ICp1ZnNfcWNvbV9waHkgPSBnZXRfdWZzX3Fjb21fcGh5KGdlbmVyaWNfcGh5KTsKKworCWlmICh1ZnNfcWNvbV9waHktPmlzX3Bvd2VyZWRfb24pCisJCXBoeV9wb3dlcl9vZmYoZ2VuZXJpY19waHkpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB1ZnNfcWNvbV9waHlfaXNfcGNzX3JlYWR5KHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5KQoreworCXN0cnVjdCB1ZnNfcWNvbV9waHkgKnVmc19xY29tX3BoeSA9IGdldF91ZnNfcWNvbV9waHkoZ2VuZXJpY19waHkpOworCisJaWYgKCF1ZnNfcWNvbV9waHktPnBoeV9zcGVjX29wcy0+aXNfcGh5c2ljYWxfY29kaW5nX3N1YmxheWVyX3JlYWR5KSB7CisJCWRldl9lcnIodWZzX3Fjb21fcGh5LT5kZXYsICIlczogaXNfcGh5c2ljYWxfY29kaW5nX3N1YmxheWVyX3JlYWR5KCkgY2FsbGJhY2sgaXMgbm90IHN1cHBvcnRlZFxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisKKwlyZXR1cm4gdWZzX3Fjb21fcGh5LT5waHlfc3BlY19vcHMtPgorCQkJaXNfcGh5c2ljYWxfY29kaW5nX3N1YmxheWVyX3JlYWR5KHVmc19xY29tX3BoeSk7Cit9CisKK2ludCB1ZnNfcWNvbV9waHlfcG93ZXJfb24oc3RydWN0IHBoeSAqZ2VuZXJpY19waHkpCit7CisJc3RydWN0IHVmc19xY29tX3BoeSAqcGh5X2NvbW1vbiA9IGdldF91ZnNfcWNvbV9waHkoZ2VuZXJpY19waHkpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHBoeV9jb21tb24tPmRldjsKKwlpbnQgZXJyOworCisJZXJyID0gdWZzX3Fjb21fcGh5X2VuYWJsZV92cmVnKGdlbmVyaWNfcGh5LCAmcGh5X2NvbW1vbi0+dmRkYV9waHkpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycihkZXYsICIlcyBlbmFibGUgdmRkYV9waHkgZmFpbGVkLCBlcnI9JWRcbiIsCisJCQlfX2Z1bmNfXywgZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJcGh5X2NvbW1vbi0+cGh5X3NwZWNfb3BzLT5wb3dlcl9jb250cm9sKHBoeV9jb21tb24sIHRydWUpOworCisJLyogdmRkYV9wbGwgYWxzbyBlbmFibGVzIHJlZiBjbG9jayBMRE9zIHNvIGVuYWJsZSBpdCBmaXJzdCAqLworCWVyciA9IHVmc19xY29tX3BoeV9lbmFibGVfdnJlZyhnZW5lcmljX3BoeSwgJnBoeV9jb21tb24tPnZkZGFfcGxsKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LCAiJXMgZW5hYmxlIHZkZGFfcGxsIGZhaWxlZCwgZXJyPSVkXG4iLAorCQkJX19mdW5jX18sIGVycik7CisJCWdvdG8gb3V0X2Rpc2FibGVfcGh5OworCX0KKworCWVyciA9IHVmc19xY29tX3BoeV9lbmFibGVfcmVmX2NsayhnZW5lcmljX3BoeSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgIiVzIGVuYWJsZSBwaHkgcmVmIGNsb2NrIGZhaWxlZCwgZXJyPSVkXG4iLAorCQkJX19mdW5jX18sIGVycik7CisJCWdvdG8gb3V0X2Rpc2FibGVfcGxsOworCX0KKworCS8qIGVuYWJsZSBkZXZpY2UgUEhZIHJlZl9jbGsgcGFkIHJhaWwgKi8KKwlpZiAocGh5X2NvbW1vbi0+dmRkcF9yZWZfY2xrLnJlZykgeworCQllcnIgPSB1ZnNfcWNvbV9waHlfZW5hYmxlX3ZyZWcoZ2VuZXJpY19waHksCisJCQkJCSAgICAgICAmcGh5X2NvbW1vbi0+dmRkcF9yZWZfY2xrKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycihkZXYsICIlcyBlbmFibGUgdmRkcF9yZWZfY2xrIGZhaWxlZCwgZXJyPSVkXG4iLAorCQkJCV9fZnVuY19fLCBlcnIpOworCQkJZ290byBvdXRfZGlzYWJsZV9yZWZfY2xrOworCQl9CisJfQorCisJcGh5X2NvbW1vbi0+aXNfcG93ZXJlZF9vbiA9IHRydWU7CisJZ290byBvdXQ7CisKK291dF9kaXNhYmxlX3JlZl9jbGs6CisJdWZzX3Fjb21fcGh5X2Rpc2FibGVfcmVmX2NsayhnZW5lcmljX3BoeSk7CitvdXRfZGlzYWJsZV9wbGw6CisJdWZzX3Fjb21fcGh5X2Rpc2FibGVfdnJlZyhnZW5lcmljX3BoeSwgJnBoeV9jb21tb24tPnZkZGFfcGxsKTsKK291dF9kaXNhYmxlX3BoeToKKwl1ZnNfcWNvbV9waHlfZGlzYWJsZV92cmVnKGdlbmVyaWNfcGh5LCAmcGh5X2NvbW1vbi0+dmRkYV9waHkpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK2ludCB1ZnNfcWNvbV9waHlfcG93ZXJfb2ZmKHN0cnVjdCBwaHkgKmdlbmVyaWNfcGh5KQoreworCXN0cnVjdCB1ZnNfcWNvbV9waHkgKnBoeV9jb21tb24gPSBnZXRfdWZzX3Fjb21fcGh5KGdlbmVyaWNfcGh5KTsKKworCXBoeV9jb21tb24tPnBoeV9zcGVjX29wcy0+cG93ZXJfY29udHJvbChwaHlfY29tbW9uLCBmYWxzZSk7CisKKwlpZiAocGh5X2NvbW1vbi0+dmRkcF9yZWZfY2xrLnJlZykKKwkJdWZzX3Fjb21fcGh5X2Rpc2FibGVfdnJlZyhnZW5lcmljX3BoeSwKKwkJCQkJICAmcGh5X2NvbW1vbi0+dmRkcF9yZWZfY2xrKTsKKwl1ZnNfcWNvbV9waHlfZGlzYWJsZV9yZWZfY2xrKGdlbmVyaWNfcGh5KTsKKworCXVmc19xY29tX3BoeV9kaXNhYmxlX3ZyZWcoZ2VuZXJpY19waHksICZwaHlfY29tbW9uLT52ZGRhX3BsbCk7CisJdWZzX3Fjb21fcGh5X2Rpc2FibGVfdnJlZyhnZW5lcmljX3BoeSwgJnBoeV9jb21tb24tPnZkZGFfcGh5KTsKKwlwaHlfY29tbW9uLT5pc19wb3dlcmVkX29uID0gZmFsc2U7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3BoeS1zdGloNDA3LXVzYi5jIGIvZHJpdmVycy9waHkvcGh5LXN0aWg0MDctdXNiLmMKaW5kZXggNzRmMGZhYi4uMWQ1YWU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvcGh5LXN0aWg0MDctdXNiLmMKKysrIGIvZHJpdmVycy9waHkvcGh5LXN0aWg0MDctdXNiLmMKQEAgLTIyLDYgKzIyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgogCisjZGVmaW5lIFBIWVBBUkFNX1JFRwkxCisjZGVmaW5lIFBIWUNUUkxfUkVHCTIKKwogLyogRGVmYXVsdCBQSFlfU0VMIGFuZCBSRUZDTEtTRUwgY29uZmlndXJhdGlvbiAqLwogI2RlZmluZSBTVElINDA3X1VTQl9QSUNPUEhZX0NUUkxfUE9SVF9DT05GCTB4NgogI2RlZmluZSBTVElINDA3X1VTQl9QSUNPUEhZX0NUUkxfUE9SVF9NQVNLCTB4MWYKQEAgLTkzLDcgKzk2LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOwogCXN0cnVjdCBwaHlfcHJvdmlkZXIgKnBoeV9wcm92aWRlcjsKIAlzdHJ1Y3QgcGh5ICpwaHk7Ci0Jc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldDsKIAogCXBoeV9kZXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBoeV9kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBoeV9kZXYpCkBAIC0xMjMsMTkgKzEyNiwxOSBAQAogCQlyZXR1cm4gUFRSX0VSUihwaHlfZGV2LT5yZWdtYXApOwogCX0KIAotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sICJjdHJsIik7Ci0JaWYgKCFyZXMpIHsKLQkJZGV2X2VycihkZXYsICJObyBjdHJsIHJlZyBmb3VuZFxuIik7Ci0JCXJldHVybiAtRU5YSU87CisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobnAsICJzdCxzeXNjZmciLCBQSFlQQVJBTV9SRUcsCisJCQkJCSZwaHlfZGV2LT5wYXJhbSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRldiwgImNhbid0IGdldCBwaHlwYXJhbSBvZmZzZXQgKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKIAl9Ci0JcGh5X2Rldi0+Y3RybCA9IHJlcy0+c3RhcnQ7CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicGFyYW0iKTsKLQlpZiAoIXJlcykgewotCQlkZXZfZXJyKGRldiwgIk5vIHBhcmFtIHJlZyBmb3VuZFxuIik7Ci0JCXJldHVybiAtRU5YSU87CisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzJfaW5kZXgobnAsICJzdCxzeXNjZmciLCBQSFlDVFJMX1JFRywKKwkJCQkJJnBoeV9kZXYtPmN0cmwpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJjYW4ndCBnZXQgcGh5Y3RybCBvZmZzZXQgKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKIAl9Ci0JcGh5X2Rldi0+cGFyYW0gPSByZXMtPnN0YXJ0OwogCiAJcGh5ID0gZGV2bV9waHlfY3JlYXRlKGRldiwgTlVMTCwgJnN0aWg0MDdfdXNiMl9waWNvcGh5X2RhdGEpOwogCWlmIChJU19FUlIocGh5KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL0tjb25maWcgYi9kcml2ZXJzL3BpbmN0cmwvS2NvbmZpZwppbmRleCBkMDE0ZjIyLi5lZTlmNDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvS2NvbmZpZworKysgYi9kcml2ZXJzL3BpbmN0cmwvS2NvbmZpZwpAQCAtOTYsNiArOTYsMTQgQEAKIAlkZXBlbmRzIG9uIFNPQ19GQUxDT04KIAlkZXBlbmRzIG9uIFBJTkNUUkxfTEFOVElRCiAKK2NvbmZpZyBQSU5DVFJMX01FU09OCisJYm9vbAorCXNlbGVjdCBQSU5NVVgKKwlzZWxlY3QgUElOQ09ORgorCXNlbGVjdCBHRU5FUklDX1BJTkNPTkYKKwlzZWxlY3QgT0ZfR1BJTworCXNlbGVjdCBSRUdNQVBfTU1JTworCiBjb25maWcgUElOQ1RSTF9ST0NLQ0hJUAogCWJvb2wKIAlzZWxlY3QgUElOTVVYCkBAIC0xMTMsNyArMTIxLDcgQEAKIAkgIFRoaXMgc2VsZWN0cyB0aGUgZGV2aWNlIHRyZWUgYmFzZWQgZ2VuZXJpYyBwaW5jdHJsIGRyaXZlci4KIAogY29uZmlnIFBJTkNUUkxfU0lSRgotCWJvb2wgIkNTUiBTaVJGcHJpbWFJSS9TaVJGbWFyY28gcGluIGNvbnRyb2xsZXIgZHJpdmVyIgorCWJvb2wgIkNTUiBTaVJGcHJpbWFJSSBwaW4gY29udHJvbGxlciBkcml2ZXIiCiAJZGVwZW5kcyBvbiBBUkNIX1NJUkYKIAlzZWxlY3QgUElOTVVYCiAJc2VsZWN0IEdQSU9MSUJfSVJRQ0hJUApAQCAtMTkxLDYgKzE5OSwxNCBAQAogCSAgb3BlbiBkcmFpbiBjb25maWd1cmF0aW9uIGZvciB0aGUgUGFsbWFzIHNlcmllcyBkZXZpY2VzIGxpa2UKIAkgIFRQUzY1OTEzLCBUUFM4MDAzNiBldGMuCiAKK2NvbmZpZyBQSU5DVFJMX1pZTlEKKwlib29sICJQaW5jdHJsIGRyaXZlciBmb3IgWGlsaW54IFp5bnEiCisJZGVwZW5kcyBvbiBBUkNIX1pZTlEKKwlzZWxlY3QgUElOTVVYCisJc2VsZWN0IEdFTkVSSUNfUElOQ09ORgorCWhlbHAKKwkgIFRoaXMgc2VsZWN0ZXMgdGhlIHBpbmN0cmwgZHJpdmVyIGZvciBYaWxpbnggWnlucS4KKwogc291cmNlICJkcml2ZXJzL3BpbmN0cmwvYmVybGluL0tjb25maWciCiBzb3VyY2UgImRyaXZlcnMvcGluY3RybC9mcmVlc2NhbGUvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9waW5jdHJsL2ludGVsL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvTWFrZWZpbGUgYi9kcml2ZXJzL3BpbmN0cmwvTWFrZWZpbGUKaW5kZXggYzAzMGIzZC4uMDQ3NTIwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGluY3RybC9NYWtlZmlsZQpAQCAtMSw2ICsxLDYgQEAKICMgZ2VuZXJpYyBwaW5tdXggc3VwcG9ydAogCi1jY2ZsYWdzLSQoQ09ORklHX0RFQlVHX1BJTkNUUkwpCSs9IC1EREVCVUcKK3N1YmRpci1jY2ZsYWdzLSQoQ09ORklHX0RFQlVHX1BJTkNUUkwpCSs9IC1EREVCVUcKIAogb2JqLSQoQ09ORklHX1BJTkNUUkwpCQkrPSBjb3JlLm8gcGluY3RybC11dGlscy5vCiBvYmotJChDT05GSUdfUElOTVVYKQkJKz0gcGlubXV4Lm8KQEAgLTE3LDYgKzE3LDcgQEAKIG9iai0kKENPTkZJR19QSU5DVFJMX0JDTTI4MzUpCSs9IHBpbmN0cmwtYmNtMjgzNS5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9CQ00yODFYWCkJKz0gcGluY3RybC1iY20yODF4eC5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9GQUxDT04pCSs9IHBpbmN0cmwtZmFsY29uLm8KK29iai0kKENPTkZJR19QSU5DVFJMX01FU09OKQkrPSBtZXNvbi8KIG9iai0kKENPTkZJR19QSU5DVFJMX1BBTE1BUykJKz0gcGluY3RybC1wYWxtYXMubwogb2JqLSQoQ09ORklHX1BJTkNUUkxfUk9DS0NISVApCSs9IHBpbmN0cmwtcm9ja2NoaXAubwogb2JqLSQoQ09ORklHX1BJTkNUUkxfU0lOR0xFKQkrPSBwaW5jdHJsLXNpbmdsZS5vCkBAIC0zNSw2ICszNiw3IEBACiBvYmotJChDT05GSUdfUElOQ1RSTF9MQU5USVEpCSs9IHBpbmN0cmwtbGFudGlxLm8KIG9iai0kKENPTkZJR19QSU5DVFJMX1RCMTBYKQkrPSBwaW5jdHJsLXRiMTB4Lm8KIG9iai0kKENPTkZJR19QSU5DVFJMX1NUKSAJKz0gcGluY3RybC1zdC5vCitvYmotJChDT05GSUdfUElOQ1RSTF9aWU5RKQkrPSBwaW5jdHJsLXp5bnEubwogCiBvYmotJChDT05GSUdfQVJDSF9CRVJMSU4pCSs9IGJlcmxpbi8KIG9iai15CQkJCSs9IGZyZWVzY2FsZS8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9mcmVlc2NhbGUvcGluY3RybC1pbXguYyBiL2RyaXZlcnMvcGluY3RybC9mcmVlc2NhbGUvcGluY3RybC1pbXguYwppbmRleCA1MmYyYjk0Li40NDhmMTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvZnJlZXNjYWxlL3BpbmN0cmwtaW14LmMKKysrIGIvZHJpdmVycy9waW5jdHJsL2ZyZWVzY2FsZS9waW5jdHJsLWlteC5jCkBAIC00MzcsNyArNDM3LDcgQEAKIAljb25zdCBzdHJ1Y3QgaW14X3Bpbl9yZWcgKnBpbl9yZWcgPSAmaW5mby0+cGluX3JlZ3NbcGluX2lkXTsKIAl1bnNpZ25lZCBsb25nIGNvbmZpZzsKIAotCWlmICghcGluX3JlZyB8fCAhcGluX3JlZy0+Y29uZl9yZWcpIHsKKwlpZiAoIXBpbl9yZWcgfHwgcGluX3JlZy0+Y29uZl9yZWcgPT0gLTEpIHsKIAkJc2VxX3ByaW50ZihzLCAiTi9BIik7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvZnJlZXNjYWxlL3BpbmN0cmwtaW14MjUuYyBiL2RyaXZlcnMvcGluY3RybC9mcmVlc2NhbGUvcGluY3RybC1pbXgyNS5jCmluZGV4IDhkMTAxM2EuLmZhZjYzNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9mcmVlc2NhbGUvcGluY3RybC1pbXgyNS5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9mcmVlc2NhbGUvcGluY3RybC1pbXgyNS5jCkBAIC0yNywxNTAgKzI3LDE0OCBAQAogCiBlbnVtIGlteDI1X3BhZHMgewogCU1YMjVfUEFEX1JFU0VSVkUwID0gMSwKLQlNWDI1X1BBRF9SRVNFUlZFMSA9IDIsCi0JTVgyNV9QQURfQTEwID0gMywKLQlNWDI1X1BBRF9BMTMgPSA0LAotCU1YMjVfUEFEX0ExNCA9IDUsCi0JTVgyNV9QQURfQTE1ID0gNiwKLQlNWDI1X1BBRF9BMTYgPSA3LAotCU1YMjVfUEFEX0ExNyA9IDgsCi0JTVgyNV9QQURfQTE4ID0gOSwKLQlNWDI1X1BBRF9BMTkgPSAxMCwKLQlNWDI1X1BBRF9BMjAgPSAxMSwKLQlNWDI1X1BBRF9BMjEgPSAxMiwKLQlNWDI1X1BBRF9BMjIgPSAxMywKLQlNWDI1X1BBRF9BMjMgPSAxNCwKLQlNWDI1X1BBRF9BMjQgPSAxNSwKLQlNWDI1X1BBRF9BMjUgPSAxNiwKLQlNWDI1X1BBRF9FQjAgPSAxNywKLQlNWDI1X1BBRF9FQjEgPSAxOCwKLQlNWDI1X1BBRF9PRSA9IDE5LAotCU1YMjVfUEFEX0NTMCA9IDIwLAotCU1YMjVfUEFEX0NTMSA9IDIxLAotCU1YMjVfUEFEX0NTNCA9IDIyLAotCU1YMjVfUEFEX0NTNSA9IDIzLAotCU1YMjVfUEFEX05GX0NFMCA9IDI0LAotCU1YMjVfUEFEX0VDQiA9IDI1LAotCU1YMjVfUEFEX0xCQSA9IDI2LAotCU1YMjVfUEFEX0JDTEsgPSAyNywKLQlNWDI1X1BBRF9SVyA9IDI4LAotCU1YMjVfUEFEX05GV0VfQiA9IDI5LAotCU1YMjVfUEFEX05GUkVfQiA9IDMwLAotCU1YMjVfUEFEX05GQUxFID0gMzEsCi0JTVgyNV9QQURfTkZDTEUgPSAzMiwKLQlNWDI1X1BBRF9ORldQX0IgPSAzMywKLQlNWDI1X1BBRF9ORlJCID0gMzQsCi0JTVgyNV9QQURfRDE1ID0gMzUsCi0JTVgyNV9QQURfRDE0ID0gMzYsCi0JTVgyNV9QQURfRDEzID0gMzcsCi0JTVgyNV9QQURfRDEyID0gMzgsCi0JTVgyNV9QQURfRDExID0gMzksCi0JTVgyNV9QQURfRDEwID0gNDAsCi0JTVgyNV9QQURfRDkgPSA0MSwKLQlNWDI1X1BBRF9EOCA9IDQyLAotCU1YMjVfUEFEX0Q3ID0gNDMsCi0JTVgyNV9QQURfRDYgPSA0NCwKLQlNWDI1X1BBRF9ENSA9IDQ1LAotCU1YMjVfUEFEX0Q0ID0gNDYsCi0JTVgyNV9QQURfRDMgPSA0NywKLQlNWDI1X1BBRF9EMiA9IDQ4LAotCU1YMjVfUEFEX0QxID0gNDksCi0JTVgyNV9QQURfRDAgPSA1MCwKLQlNWDI1X1BBRF9MRDAgPSA1MSwKLQlNWDI1X1BBRF9MRDEgPSA1MiwKLQlNWDI1X1BBRF9MRDIgPSA1MywKLQlNWDI1X1BBRF9MRDMgPSA1NCwKLQlNWDI1X1BBRF9MRDQgPSA1NSwKLQlNWDI1X1BBRF9MRDUgPSA1NiwKLQlNWDI1X1BBRF9MRDYgPSA1NywKLQlNWDI1X1BBRF9MRDcgPSA1OCwKLQlNWDI1X1BBRF9MRDggPSA1OSwKLQlNWDI1X1BBRF9MRDkgPSA2MCwKLQlNWDI1X1BBRF9MRDEwID0gNjEsCi0JTVgyNV9QQURfTEQxMSA9IDYyLAotCU1YMjVfUEFEX0xEMTIgPSA2MywKLQlNWDI1X1BBRF9MRDEzID0gNjQsCi0JTVgyNV9QQURfTEQxNCA9IDY1LAotCU1YMjVfUEFEX0xEMTUgPSA2NiwKLQlNWDI1X1BBRF9IU1lOQyA9IDY3LAotCU1YMjVfUEFEX1ZTWU5DID0gNjgsCi0JTVgyNV9QQURfTFNDTEsgPSA2OSwKLQlNWDI1X1BBRF9PRV9BQ0QgPSA3MCwKLQlNWDI1X1BBRF9DT05UUkFTVCA9IDcxLAotCU1YMjVfUEFEX1BXTSA9IDcyLAotCU1YMjVfUEFEX0NTSV9EMiA9IDczLAotCU1YMjVfUEFEX0NTSV9EMyA9IDc0LAotCU1YMjVfUEFEX0NTSV9ENCA9IDc1LAotCU1YMjVfUEFEX0NTSV9ENSA9IDc2LAotCU1YMjVfUEFEX0NTSV9ENiA9IDc3LAotCU1YMjVfUEFEX0NTSV9ENyA9IDc4LAotCU1YMjVfUEFEX0NTSV9EOCA9IDc5LAotCU1YMjVfUEFEX0NTSV9EOSA9IDgwLAotCU1YMjVfUEFEX0NTSV9NQ0xLID0gODEsCi0JTVgyNV9QQURfQ1NJX1ZTWU5DID0gODIsCi0JTVgyNV9QQURfQ1NJX0hTWU5DID0gODMsCi0JTVgyNV9QQURfQ1NJX1BJWENMSyA9IDg0LAotCU1YMjVfUEFEX0kyQzFfQ0xLID0gODUsCi0JTVgyNV9QQURfSTJDMV9EQVQgPSA4NiwKLQlNWDI1X1BBRF9DU1BJMV9NT1NJID0gODcsCi0JTVgyNV9QQURfQ1NQSTFfTUlTTyA9IDg4LAotCU1YMjVfUEFEX0NTUEkxX1NTMCA9IDg5LAotCU1YMjVfUEFEX0NTUEkxX1NTMSA9IDkwLAotCU1YMjVfUEFEX0NTUEkxX1NDTEsgPSA5MSwKLQlNWDI1X1BBRF9DU1BJMV9SRFkgPSA5MiwKLQlNWDI1X1BBRF9VQVJUMV9SWEQgPSA5MywKLQlNWDI1X1BBRF9VQVJUMV9UWEQgPSA5NCwKLQlNWDI1X1BBRF9VQVJUMV9SVFMgPSA5NSwKLQlNWDI1X1BBRF9VQVJUMV9DVFMgPSA5NiwKLQlNWDI1X1BBRF9VQVJUMl9SWEQgPSA5NywKLQlNWDI1X1BBRF9VQVJUMl9UWEQgPSA5OCwKLQlNWDI1X1BBRF9VQVJUMl9SVFMgPSA5OSwKLQlNWDI1X1BBRF9VQVJUMl9DVFMgPSAxMDAsCi0JTVgyNV9QQURfU0QxX0NNRCA9IDEwMSwKLQlNWDI1X1BBRF9TRDFfQ0xLID0gMTAyLAotCU1YMjVfUEFEX1NEMV9EQVRBMCA9IDEwMywKLQlNWDI1X1BBRF9TRDFfREFUQTEgPSAxMDQsCi0JTVgyNV9QQURfU0QxX0RBVEEyID0gMTA1LAotCU1YMjVfUEFEX1NEMV9EQVRBMyA9IDEwNiwKLQlNWDI1X1BBRF9LUFBfUk9XMCA9IDEwNywKLQlNWDI1X1BBRF9LUFBfUk9XMSA9IDEwOCwKLQlNWDI1X1BBRF9LUFBfUk9XMiA9IDEwOSwKLQlNWDI1X1BBRF9LUFBfUk9XMyA9IDExMCwKLQlNWDI1X1BBRF9LUFBfQ09MMCA9IDExMSwKLQlNWDI1X1BBRF9LUFBfQ09MMSA9IDExMiwKLQlNWDI1X1BBRF9LUFBfQ09MMiA9IDExMywKLQlNWDI1X1BBRF9LUFBfQ09MMyA9IDExNCwKLQlNWDI1X1BBRF9GRUNfTURDID0gMTE1LAotCU1YMjVfUEFEX0ZFQ19NRElPID0gMTE2LAotCU1YMjVfUEFEX0ZFQ19UREFUQTAgPSAxMTcsCi0JTVgyNV9QQURfRkVDX1REQVRBMSA9IDExOCwKLQlNWDI1X1BBRF9GRUNfVFhfRU4gPSAxMTksCi0JTVgyNV9QQURfRkVDX1JEQVRBMCA9IDEyMCwKLQlNWDI1X1BBRF9GRUNfUkRBVEExID0gMTIxLAotCU1YMjVfUEFEX0ZFQ19SWF9EViA9IDEyMiwKLQlNWDI1X1BBRF9GRUNfVFhfQ0xLID0gMTIzLAotCU1YMjVfUEFEX1JUQ0sgPSAxMjQsCi0JTVgyNV9QQURfREVfQiA9IDEyNSwKLQlNWDI1X1BBRF9HUElPX0EgPSAxMjYsCi0JTVgyNV9QQURfR1BJT19CID0gMTI3LAotCU1YMjVfUEFEX0dQSU9fQyA9IDEyOCwKLQlNWDI1X1BBRF9HUElPX0QgPSAxMjksCi0JTVgyNV9QQURfR1BJT19FID0gMTMwLAotCU1YMjVfUEFEX0dQSU9fRiA9IDEzMSwKLQlNWDI1X1BBRF9FWFRfQVJNQ0xLID0gMTMyLAotCU1YMjVfUEFEX1VQTExfQllQQ0xLID0gMTMzLAotCU1YMjVfUEFEX1ZTVEJZX1JFUSA9IDEzNCwKLQlNWDI1X1BBRF9WU1RCWV9BQ0sgPSAxMzUsCi0JTVgyNV9QQURfUE9XRVJfRkFJTCAgPSAxMzYsCi0JTVgyNV9QQURfQ0xLTyA9IDEzNywKLQlNWDI1X1BBRF9CT09UX01PREUwID0gMTM4LAotCU1YMjVfUEFEX0JPT1RfTU9ERTEgPSAxMzksCisJTVgyNV9QQURfQTEwID0gMiwKKwlNWDI1X1BBRF9BMTMgPSAzLAorCU1YMjVfUEFEX0ExNCA9IDQsCisJTVgyNV9QQURfQTE1ID0gNSwKKwlNWDI1X1BBRF9BMTYgPSA2LAorCU1YMjVfUEFEX0ExNyA9IDcsCisJTVgyNV9QQURfQTE4ID0gOCwKKwlNWDI1X1BBRF9BMTkgPSA5LAorCU1YMjVfUEFEX0EyMCA9IDEwLAorCU1YMjVfUEFEX0EyMSA9IDExLAorCU1YMjVfUEFEX0EyMiA9IDEyLAorCU1YMjVfUEFEX0EyMyA9IDEzLAorCU1YMjVfUEFEX0EyNCA9IDE0LAorCU1YMjVfUEFEX0EyNSA9IDE1LAorCU1YMjVfUEFEX0VCMCA9IDE2LAorCU1YMjVfUEFEX0VCMSA9IDE3LAorCU1YMjVfUEFEX09FID0gMTgsCisJTVgyNV9QQURfQ1MwID0gMTksCisJTVgyNV9QQURfQ1MxID0gMjAsCisJTVgyNV9QQURfQ1M0ID0gMjEsCisJTVgyNV9QQURfQ1M1ID0gMjIsCisJTVgyNV9QQURfTkZfQ0UwID0gMjMsCisJTVgyNV9QQURfRUNCID0gMjQsCisJTVgyNV9QQURfTEJBID0gMjUsCisJTVgyNV9QQURfQkNMSyA9IDI2LAorCU1YMjVfUEFEX1JXID0gMjcsCisJTVgyNV9QQURfTkZXRV9CID0gMjgsCisJTVgyNV9QQURfTkZSRV9CID0gMjksCisJTVgyNV9QQURfTkZBTEUgPSAzMCwKKwlNWDI1X1BBRF9ORkNMRSA9IDMxLAorCU1YMjVfUEFEX05GV1BfQiA9IDMyLAorCU1YMjVfUEFEX05GUkIgPSAzMywKKwlNWDI1X1BBRF9EMTUgPSAzNCwKKwlNWDI1X1BBRF9EMTQgPSAzNSwKKwlNWDI1X1BBRF9EMTMgPSAzNiwKKwlNWDI1X1BBRF9EMTIgPSAzNywKKwlNWDI1X1BBRF9EMTEgPSAzOCwKKwlNWDI1X1BBRF9EMTAgPSAzOSwKKwlNWDI1X1BBRF9EOSA9IDQwLAorCU1YMjVfUEFEX0Q4ID0gNDEsCisJTVgyNV9QQURfRDcgPSA0MiwKKwlNWDI1X1BBRF9ENiA9IDQzLAorCU1YMjVfUEFEX0Q1ID0gNDQsCisJTVgyNV9QQURfRDQgPSA0NSwKKwlNWDI1X1BBRF9EMyA9IDQ2LAorCU1YMjVfUEFEX0QyID0gNDcsCisJTVgyNV9QQURfRDEgPSA0OCwKKwlNWDI1X1BBRF9EMCA9IDQ5LAorCU1YMjVfUEFEX0xEMCA9IDUwLAorCU1YMjVfUEFEX0xEMSA9IDUxLAorCU1YMjVfUEFEX0xEMiA9IDUyLAorCU1YMjVfUEFEX0xEMyA9IDUzLAorCU1YMjVfUEFEX0xENCA9IDU0LAorCU1YMjVfUEFEX0xENSA9IDU1LAorCU1YMjVfUEFEX0xENiA9IDU2LAorCU1YMjVfUEFEX0xENyA9IDU3LAorCU1YMjVfUEFEX0xEOCA9IDU4LAorCU1YMjVfUEFEX0xEOSA9IDU5LAorCU1YMjVfUEFEX0xEMTAgPSA2MCwKKwlNWDI1X1BBRF9MRDExID0gNjEsCisJTVgyNV9QQURfTEQxMiA9IDYyLAorCU1YMjVfUEFEX0xEMTMgPSA2MywKKwlNWDI1X1BBRF9MRDE0ID0gNjQsCisJTVgyNV9QQURfTEQxNSA9IDY1LAorCU1YMjVfUEFEX0hTWU5DID0gNjYsCisJTVgyNV9QQURfVlNZTkMgPSA2NywKKwlNWDI1X1BBRF9MU0NMSyA9IDY4LAorCU1YMjVfUEFEX09FX0FDRCA9IDY5LAorCU1YMjVfUEFEX0NPTlRSQVNUID0gNzAsCisJTVgyNV9QQURfUFdNID0gNzEsCisJTVgyNV9QQURfQ1NJX0QyID0gNzIsCisJTVgyNV9QQURfQ1NJX0QzID0gNzMsCisJTVgyNV9QQURfQ1NJX0Q0ID0gNzQsCisJTVgyNV9QQURfQ1NJX0Q1ID0gNzUsCisJTVgyNV9QQURfQ1NJX0Q2ID0gNzYsCisJTVgyNV9QQURfQ1NJX0Q3ID0gNzcsCisJTVgyNV9QQURfQ1NJX0Q4ID0gNzgsCisJTVgyNV9QQURfQ1NJX0Q5ID0gNzksCisJTVgyNV9QQURfQ1NJX01DTEsgPSA4MCwKKwlNWDI1X1BBRF9DU0lfVlNZTkMgPSA4MSwKKwlNWDI1X1BBRF9DU0lfSFNZTkMgPSA4MiwKKwlNWDI1X1BBRF9DU0lfUElYQ0xLID0gODMsCisJTVgyNV9QQURfSTJDMV9DTEsgPSA4NCwKKwlNWDI1X1BBRF9JMkMxX0RBVCA9IDg1LAorCU1YMjVfUEFEX0NTUEkxX01PU0kgPSA4NiwKKwlNWDI1X1BBRF9DU1BJMV9NSVNPID0gODcsCisJTVgyNV9QQURfQ1NQSTFfU1MwID0gODgsCisJTVgyNV9QQURfQ1NQSTFfU1MxID0gODksCisJTVgyNV9QQURfQ1NQSTFfU0NMSyA9IDkwLAorCU1YMjVfUEFEX0NTUEkxX1JEWSA9IDkxLAorCU1YMjVfUEFEX1VBUlQxX1JYRCA9IDkyLAorCU1YMjVfUEFEX1VBUlQxX1RYRCA9IDkzLAorCU1YMjVfUEFEX1VBUlQxX1JUUyA9IDk0LAorCU1YMjVfUEFEX1VBUlQxX0NUUyA9IDk1LAorCU1YMjVfUEFEX1VBUlQyX1JYRCA9IDk2LAorCU1YMjVfUEFEX1VBUlQyX1RYRCA9IDk3LAorCU1YMjVfUEFEX1VBUlQyX1JUUyA9IDk4LAorCU1YMjVfUEFEX1VBUlQyX0NUUyA9IDk5LAorCU1YMjVfUEFEX1NEMV9DTUQgPSAxMDAsCisJTVgyNV9QQURfU0QxX0NMSyA9IDEwMSwKKwlNWDI1X1BBRF9TRDFfREFUQTAgPSAxMDIsCisJTVgyNV9QQURfU0QxX0RBVEExID0gMTAzLAorCU1YMjVfUEFEX1NEMV9EQVRBMiA9IDEwNCwKKwlNWDI1X1BBRF9TRDFfREFUQTMgPSAxMDUsCisJTVgyNV9QQURfS1BQX1JPVzAgPSAxMDYsCisJTVgyNV9QQURfS1BQX1JPVzEgPSAxMDcsCisJTVgyNV9QQURfS1BQX1JPVzIgPSAxMDgsCisJTVgyNV9QQURfS1BQX1JPVzMgPSAxMDksCisJTVgyNV9QQURfS1BQX0NPTDAgPSAxMTAsCisJTVgyNV9QQURfS1BQX0NPTDEgPSAxMTEsCisJTVgyNV9QQURfS1BQX0NPTDIgPSAxMTIsCisJTVgyNV9QQURfS1BQX0NPTDMgPSAxMTMsCisJTVgyNV9QQURfRkVDX01EQyA9IDExNCwKKwlNWDI1X1BBRF9GRUNfTURJTyA9IDExNSwKKwlNWDI1X1BBRF9GRUNfVERBVEEwID0gMTE2LAorCU1YMjVfUEFEX0ZFQ19UREFUQTEgPSAxMTcsCisJTVgyNV9QQURfRkVDX1RYX0VOID0gMTE4LAorCU1YMjVfUEFEX0ZFQ19SREFUQTAgPSAxMTksCisJTVgyNV9QQURfRkVDX1JEQVRBMSA9IDEyMCwKKwlNWDI1X1BBRF9GRUNfUlhfRFYgPSAxMjEsCisJTVgyNV9QQURfRkVDX1RYX0NMSyA9IDEyMiwKKwlNWDI1X1BBRF9SVENLID0gMTIzLAorCU1YMjVfUEFEX0RFX0IgPSAxMjQsCisJTVgyNV9QQURfR1BJT19BID0gMTI1LAorCU1YMjVfUEFEX0dQSU9fQiA9IDEyNiwKKwlNWDI1X1BBRF9HUElPX0MgPSAxMjcsCisJTVgyNV9QQURfR1BJT19EID0gMTI4LAorCU1YMjVfUEFEX0dQSU9fRSA9IDEyOSwKKwlNWDI1X1BBRF9HUElPX0YgPSAxMzAsCisJTVgyNV9QQURfRVhUX0FSTUNMSyA9IDEzMSwKKwlNWDI1X1BBRF9VUExMX0JZUENMSyA9IDEzMiwKKwlNWDI1X1BBRF9WU1RCWV9SRVEgPSAxMzMsCisJTVgyNV9QQURfVlNUQllfQUNLID0gMTM0LAorCU1YMjVfUEFEX1BPV0VSX0ZBSUwgID0gMTM1LAorCU1YMjVfUEFEX0NMS08gPSAxMzYsCisJTVgyNV9QQURfQk9PVF9NT0RFMCA9IDEzNywKKwlNWDI1X1BBRF9CT09UX01PREUxID0gMTM4LAogfTsKIAogLyogUGFkIG5hbWVzIGZvciB0aGUgcGlubXV4IHN1YnN5c3RlbSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5jdHJsX3Bpbl9kZXNjIGlteDI1X3BpbmN0cmxfcGFkc1tdID0gewogCUlNWF9QSU5DVFJMX1BJTihNWDI1X1BBRF9SRVNFUlZFMCksCi0JSU1YX1BJTkNUUkxfUElOKE1YMjVfUEFEX1JFU0VSVkUxKSwKIAlJTVhfUElOQ1RSTF9QSU4oTVgyNV9QQURfQTEwKSwKIAlJTVhfUElOQ1RSTF9QSU4oTVgyNV9QQURfQTEzKSwKIAlJTVhfUElOQ1RSTF9QSU4oTVgyNV9QQURfQTE0KSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9pbnRlbC9waW5jdHJsLWNoZXJyeXZpZXcuYyBiL2RyaXZlcnMvcGluY3RybC9pbnRlbC9waW5jdHJsLWNoZXJyeXZpZXcuYwppbmRleCBlOWY4YjM5Li4zMDM0ZmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvaW50ZWwvcGluY3RybC1jaGVycnl2aWV3LmMKKysrIGIvZHJpdmVycy9waW5jdHJsL2ludGVsL3BpbmN0cmwtY2hlcnJ5dmlldy5jCkBAIC0xNDgsNiArMTQ4LDExIEBACiAJc2l6ZV90IG5ncGlvczsKIH07CiAKK3N0cnVjdCBjaHZfcGluX2NvbnRleHQgeworCXUzMiBwYWRjdHJsMDsKKwl1MzIgcGFkY3RybDE7Cit9OworCiAvKioKICAqIHN0cnVjdCBjaHZfcGluY3RybCAtIENIViBwaW5jdHJsIHByaXZhdGUgc3RydWN0dXJlCiAgKiBAZGV2OiBQb2ludGVyIHRvIHRoZSBwYXJlbnQgZGV2aWNlCkBAIC0xNzIsNiArMTc3LDggQEAKIAlzcGlubG9ja190IGxvY2s7CiAJdW5zaWduZWQgaW50cl9saW5lc1sxNl07CiAJY29uc3Qgc3RydWN0IGNodl9jb21tdW5pdHkgKmNvbW11bml0eTsKKwl1MzIgc2F2ZWRfaW50bWFzazsKKwlzdHJ1Y3QgY2h2X3Bpbl9jb250ZXh0ICpzYXZlZF9waW5fY29udGV4dDsKIH07CiAKICNkZWZpbmUgZ3Bpb2NoaXBfdG9fcGluY3RybChjKSBjb250YWluZXJfb2YoYywgc3RydWN0IGNodl9waW5jdHJsLCBjaGlwKQpAQCAtODczLDkgKzg4MCwyMiBAQAogCQl2YWx1ZSAmPSB+Q0hWX1BBRENUUkwxX0lOVlJYVFhfTUFTSzsKIAkJY2h2X3dyaXRlbCh2YWx1ZSwgcmVnKTsKIAotCQkvKiBTd2l0Y2ggdG8gYSBHUElPIG1vZGUgKi8KIAkJcmVnID0gY2h2X3BhZHJlZyhwY3RybCwgb2Zmc2V0LCBDSFZfUEFEQ1RSTDApOwotCQl2YWx1ZSA9IHJlYWRsKHJlZykgfCBDSFZfUEFEQ1RSTDBfR1BJT0VOOworCQl2YWx1ZSA9IHJlYWRsKHJlZyk7CisKKwkJLyoKKwkJICogSWYgdGhlIHBpbiBpcyBpbiBIaVogbW9kZSAoYm90aCBUWCBhbmQgUlggYnVmZmVycyBhcmUKKwkJICogZGlzYWJsZWQpIHdlIHR1cm4gaXQgdG8gYmUgaW5wdXQgbm93LgorCQkgKi8KKwkJaWYgKCh2YWx1ZSAmIENIVl9QQURDVFJMMF9HUElPQ0ZHX01BU0spID09CisJCSAgICAgKENIVl9QQURDVFJMMF9HUElPQ0ZHX0hJWiA8PCBDSFZfUEFEQ1RSTDBfR1BJT0NGR19TSElGVCkpIHsKKwkJCXZhbHVlICY9IH5DSFZfUEFEQ1RSTDBfR1BJT0NGR19NQVNLOworCQkJdmFsdWUgfD0gQ0hWX1BBRENUUkwwX0dQSU9DRkdfR1BJIDw8CisJCQkJQ0hWX1BBRENUUkwwX0dQSU9DRkdfU0hJRlQ7CisJCX0KKworCQkvKiBTd2l0Y2ggdG8gYSBHUElPIG1vZGUgKi8KKwkJdmFsdWUgfD0gQ0hWX1BBRENUUkwwX0dQSU9FTjsKIAkJY2h2X3dyaXRlbCh2YWx1ZSwgcmVnKTsKIAl9CiAKQEAgLTE0NDMsNiArMTQ2MywxNCBAQAogCXNwaW5fbG9ja19pbml0KCZwY3RybC0+bG9jayk7CiAJcGN0cmwtPmRldiA9ICZwZGV2LT5kZXY7CiAKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKwlwY3RybC0+c2F2ZWRfcGluX2NvbnRleHQgPSBkZXZtX2tjYWxsb2MocGN0cmwtPmRldiwKKwkJcGN0cmwtPmNvbW11bml0eS0+bnBpbnMsIHNpemVvZigqcGN0cmwtPnNhdmVkX3Bpbl9jb250ZXh0KSwKKwkJR0ZQX0tFUk5FTCk7CisJaWYgKCFwY3RybC0+c2F2ZWRfcGluX2NvbnRleHQpCisJCXJldHVybiAtRU5PTUVNOworI2VuZGlmCisKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCXBjdHJsLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CiAJaWYgKElTX0VSUihwY3RybC0+cmVncykpCkBAIC0xNDg2LDYgKzE1MTQsOTQgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCBjaHZfcGluY3RybF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGNodl9waW5jdHJsICpwY3RybCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBpOworCisJcGN0cmwtPnNhdmVkX2ludG1hc2sgPSByZWFkbChwY3RybC0+cmVncyArIENIVl9JTlRNQVNLKTsKKworCWZvciAoaSA9IDA7IGkgPCBwY3RybC0+Y29tbXVuaXR5LT5ucGluczsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBwaW5jdHJsX3Bpbl9kZXNjICpkZXNjOworCQlzdHJ1Y3QgY2h2X3Bpbl9jb250ZXh0ICpjdHg7CisJCXZvaWQgX19pb21lbSAqcmVnOworCisJCWRlc2MgPSAmcGN0cmwtPmNvbW11bml0eS0+cGluc1tpXTsKKwkJaWYgKGNodl9wYWRfbG9ja2VkKHBjdHJsLCBkZXNjLT5udW1iZXIpKQorCQkJY29udGludWU7CisKKwkJY3R4ID0gJnBjdHJsLT5zYXZlZF9waW5fY29udGV4dFtpXTsKKworCQlyZWcgPSBjaHZfcGFkcmVnKHBjdHJsLCBkZXNjLT5udW1iZXIsIENIVl9QQURDVFJMMCk7CisJCWN0eC0+cGFkY3RybDAgPSByZWFkbChyZWcpICYgfkNIVl9QQURDVFJMMF9HUElPUlhTVEFURTsKKworCQlyZWcgPSBjaHZfcGFkcmVnKHBjdHJsLCBkZXNjLT5udW1iZXIsIENIVl9QQURDVFJMMSk7CisJCWN0eC0+cGFkY3RybDEgPSByZWFkbChyZWcpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNodl9waW5jdHJsX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCXN0cnVjdCBjaHZfcGluY3RybCAqcGN0cmwgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgaTsKKworCS8qCisJICogTWFzayBhbGwgaW50ZXJydXB0cyBiZWZvcmUgcmVzdG9yaW5nIHBlci1waW4gY29uZmlndXJhdGlvbgorCSAqIHJlZ2lzdGVycyBiZWNhdXNlIHdlIGRvbid0IGtub3cgaW4gd2hpY2ggc3RhdGUgQklPUyBsZWZ0IHRoZW0KKwkgKiB1cG9uIGV4aXRpbmcgc3VzcGVuZC4KKwkgKi8KKwljaHZfd3JpdGVsKDAsIHBjdHJsLT5yZWdzICsgQ0hWX0lOVE1BU0spOworCisJZm9yIChpID0gMDsgaSA8IHBjdHJsLT5jb21tdW5pdHktPm5waW5zOyBpKyspIHsKKwkJY29uc3Qgc3RydWN0IHBpbmN0cmxfcGluX2Rlc2MgKmRlc2M7CisJCWNvbnN0IHN0cnVjdCBjaHZfcGluX2NvbnRleHQgKmN0eDsKKwkJdm9pZCBfX2lvbWVtICpyZWc7CisJCXUzMiB2YWw7CisKKwkJZGVzYyA9ICZwY3RybC0+Y29tbXVuaXR5LT5waW5zW2ldOworCQlpZiAoY2h2X3BhZF9sb2NrZWQocGN0cmwsIGRlc2MtPm51bWJlcikpCisJCQljb250aW51ZTsKKworCQljdHggPSAmcGN0cmwtPnNhdmVkX3Bpbl9jb250ZXh0W2ldOworCisJCS8qIE9ubHkgcmVzdG9yZSBpZiBvdXIgc2F2ZWQgc3RhdGUgZGlmZmVycyBmcm9tIHRoZSBjdXJyZW50ICovCisJCXJlZyA9IGNodl9wYWRyZWcocGN0cmwsIGRlc2MtPm51bWJlciwgQ0hWX1BBRENUUkwwKTsKKwkJdmFsID0gcmVhZGwocmVnKSAmIH5DSFZfUEFEQ1RSTDBfR1BJT1JYU1RBVEU7CisJCWlmIChjdHgtPnBhZGN0cmwwICE9IHZhbCkgeworCQkJY2h2X3dyaXRlbChjdHgtPnBhZGN0cmwwLCByZWcpOworCQkJZGV2X2RiZyhwY3RybC0+ZGV2LCAicmVzdG9yZWQgcGluICUydSBjdHJsMCAweCUwOHhcbiIsCisJCQkJZGVzYy0+bnVtYmVyLCByZWFkbChyZWcpKTsKKwkJfQorCisJCXJlZyA9IGNodl9wYWRyZWcocGN0cmwsIGRlc2MtPm51bWJlciwgQ0hWX1BBRENUUkwxKTsKKwkJdmFsID0gcmVhZGwocmVnKTsKKwkJaWYgKGN0eC0+cGFkY3RybDEgIT0gdmFsKSB7CisJCQljaHZfd3JpdGVsKGN0eC0+cGFkY3RybDEsIHJlZyk7CisJCQlkZXZfZGJnKHBjdHJsLT5kZXYsICJyZXN0b3JlZCBwaW4gJTJ1IGN0cmwxIDB4JTA4eFxuIiwKKwkJCQlkZXNjLT5udW1iZXIsIHJlYWRsKHJlZykpOworCQl9CisJfQorCisJLyoKKwkgKiBOb3cgdGhhdCBhbGwgcGlucyBhcmUgcmVzdG9yZWQgdG8ga25vd24gc3RhdGUsIHdlIGNhbiByZXN0b3JlCisJICogdGhlIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyIGFzIHdlbGwuCisJICovCisJY2h2X3dyaXRlbCgweGZmZmYsIHBjdHJsLT5yZWdzICsgQ0hWX0lOVFNUQVQpOworCWNodl93cml0ZWwocGN0cmwtPnNhdmVkX2ludG1hc2ssIHBjdHJsLT5yZWdzICsgQ0hWX0lOVE1BU0spOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGNodl9waW5jdHJsX3BtX29wcyA9IHsKKwlTRVRfTEFURV9TWVNURU1fU0xFRVBfUE1fT1BTKGNodl9waW5jdHJsX3N1c3BlbmQsIGNodl9waW5jdHJsX3Jlc3VtZSkKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgY2h2X3BpbmN0cmxfYWNwaV9tYXRjaFtdID0gewogCXsgIklOVDMzRkYiIH0sCiAJeyB9CkBAIC0xNDk3LDcgKzE2MTMsNyBAQAogCS5yZW1vdmUgPSBjaHZfcGluY3RybF9yZW1vdmUsCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAiY2hlcnJ5dmlldy1waW5jdHJsIiwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wbSA9ICZjaHZfcGluY3RybF9wbV9vcHMsCiAJCS5hY3BpX21hdGNoX3RhYmxlID0gY2h2X3BpbmN0cmxfYWNwaV9tYXRjaCwKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9tZXNvbi9NYWtlZmlsZSBiL2RyaXZlcnMvcGluY3RybC9tZXNvbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWZjMjE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9waW5jdHJsL21lc29uL01ha2VmaWxlCkBAIC0wLDAgKzEsMiBAQAorb2JqLXkJKz0gcGluY3RybC1tZXNvbjgubworb2JqLXkJKz0gcGluY3RybC1tZXNvbi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvbWVzb24vcGluY3RybC1tZXNvbi5jIGIvZHJpdmVycy9waW5jdHJsL21lc29uL3BpbmN0cmwtbWVzb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmJmNDljCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9waW5jdHJsL21lc29uL3BpbmN0cmwtbWVzb24uYwpAQCAtMCwwICsxLDc2MSBAQAorLyoKKyAqIFBpbiBjb250cm9sbGVyIGFuZCBHUElPIGRyaXZlciBmb3IgQW1sb2dpYyBNZXNvbiBTb0NzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEJlbmlhbWlubyBHYWx2YW5pIDxiLmdhbHZhbmlAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworLyoKKyAqIFRoZSBhdmFpbGFibGUgcGlucyBhcmUgb3JnYW5pemVkIGluIGJhbmtzIChBLEIsQyxELEUsWCxZLFosQU8sCisgKiBCT09ULENBUkQgZm9yIG1lc29uNiBhbmQgWCxZLERWLEgsWixBTyxCT09ULENBUkQgZm9yIG1lc29uOCkgYW5kCisgKiBlYWNoIGJhbmsgaGFzIGEgdmFyaWFibGUgbnVtYmVyIG9mIHBpbnMuCisgKgorICogVGhlIEFPIGJhbmsgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGJlbG9uZ3MgdG8gdGhlIEFsd2F5cy1PbiBwb3dlcgorICogZG9tYWluIHdoaWNoIGNhbid0IGJlIHBvd2VyZWQgb2ZmOyB0aGUgYmFuayBhbHNvIHVzZXMgYSBzZXQgb2YKKyAqIHJlZ2lzdGVycyBkaWZmZXJlbnQgZnJvbSB0aGUgb3RoZXIgYmFua3MuCisgKgorICogRm9yIGVhY2ggb2YgdGhlIHR3byBwb3dlciBkb21haW5zIChyZWd1bGFyIGFuZCBhbHdheXMtb24pIHRoZXJlIGFyZQorICogNCBkaWZmZXJlbnQgcmVnaXN0ZXIgcmFuZ2VzIHRoYXQgY29udHJvbCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMKKyAqIG9mIHRoZSBwaW5zOgorICogIDEpIHBpbiBtdXhpbmcKKyAqICAyKSBwdWxsIGVuYWJsZS9kaXNhYmxlCisgKiAgMykgcHVsbCB1cC9kb3duCisgKiAgNCkgR1BJTyBkaXJlY3Rpb24sIG91dHB1dCB2YWx1ZSwgaW5wdXQgdmFsdWUKKyAqCisgKiBJbiBzb21lIGNhc2VzIHRoZSByZWdpc3RlciByYW5nZXMgZm9yIHB1bGwgZW5hYmxlIGFuZCBwdWxsCisgKiBkaXJlY3Rpb24gYXJlIHRoZSBzYW1lIGFuZCB0aHVzIHRoZXJlIGFyZSBvbmx5IDMgcmVnaXN0ZXIgcmFuZ2VzLgorICoKKyAqIEV2ZXJ5IHBpbm11eCBncm91cCBjYW4gYmUgZW5hYmxlZCBieSBhIHNwZWNpZmljIGJpdCBpbiB0aGUgZmlyc3QKKyAqIHJlZ2lzdGVyIHJhbmdlIG9mIHRoZSBkb21haW47IHdoZW4gYWxsIGdyb3VwcyBmb3IgYSBnaXZlbiBwaW4gYXJlCisgKiBkaXNhYmxlZCB0aGUgcGluIGFjdHMgYXMgYSBHUElPLgorICoKKyAqIEZvciB0aGUgcHVsbCBhbmQgR1BJTyBjb25maWd1cmF0aW9uIGV2ZXJ5IGJhbmsgdXNlcyBhIGNvbnRpZ3VvdXMKKyAqIHNldCBvZiBiaXRzIGluIHRoZSByZWdpc3RlciBzZXRzIGRlc2NyaWJlZCBhYm92ZTsgdGhlIHNhbWUgcmVnaXN0ZXIKKyAqIGNhbiBiZSBzaGFyZWQgYnkgbW9yZSBiYW5rcyB3aXRoIGRpZmZlcmVudCBvZmZzZXRzLgorICoKKyAqIEluIGFkZGl0aW9uIHRvIHRoaXMgdGhlcmUgYXJlIHNvbWUgcmVnaXN0ZXJzIHNoYXJlZCBiZXR3ZWVuIGFsbAorICogYmFua3MgdGhhdCBjb250cm9sIHRoZSBJUlEgZnVuY3Rpb25hbGl0eS4gVGhpcyBmZWF0dXJlIGlzIG5vdAorICogc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQgYnkgdGhlIGRyaXZlci4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvcGluY29uZi1nZW5lcmljLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jb25mLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5tdXguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSAiLi4vY29yZS5oIgorI2luY2x1ZGUgIi4uL3BpbmN0cmwtdXRpbHMuaCIKKyNpbmNsdWRlICJwaW5jdHJsLW1lc29uLmgiCisKKy8qKgorICogbWVzb25fZ2V0X2JhbmsoKSAtIGZpbmQgdGhlIGJhbmsgY29udGFpbmluZyBhIGdpdmVuIHBpbgorICoKKyAqIEBkb21haW46CXRoZSBkb21haW4gY29udGFpbmluZyB0aGUgcGluCisgKiBAcGluOgl0aGUgcGluIG51bWJlcgorICogQGJhbms6CXRoZSBmb3VuZCBiYW5rCisgKgorICogUmV0dXJuOgkwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IKKyAqLworc3RhdGljIGludCBtZXNvbl9nZXRfYmFuayhzdHJ1Y3QgbWVzb25fZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCBwaW4sCisJCQkgIHN0cnVjdCBtZXNvbl9iYW5rICoqYmFuaykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBkb21haW4tPmRhdGEtPm51bV9iYW5rczsgaSsrKSB7CisJCWlmIChwaW4gPj0gZG9tYWluLT5kYXRhLT5iYW5rc1tpXS5maXJzdCAmJgorCQkgICAgcGluIDw9IGRvbWFpbi0+ZGF0YS0+YmFua3NbaV0ubGFzdCkgeworCQkJKmJhbmsgPSAmZG9tYWluLT5kYXRhLT5iYW5rc1tpXTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qKgorICogbWVzb25fZ2V0X2RvbWFpbl9hbmRfYmFuaygpIC0gZmluZCBkb21haW4gYW5kIGJhbmsgY29udGFpbmluZyBhIGdpdmVuIHBpbgorICoKKyAqIEBwYzoJCU1lc29uIHBpbiBjb250cm9sbGVyIGRldmljZQorICogQHBpbjoJdGhlIHBpbiBudW1iZXIKKyAqIEBkb21haW46CXRoZSBmb3VuZCBkb21haW4KKyAqIEBiYW5rOgl0aGUgZm91bmQgYmFuaworICoKKyAqIFJldHVybjoJMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgbWVzb25fZ2V0X2RvbWFpbl9hbmRfYmFuayhzdHJ1Y3QgbWVzb25fcGluY3RybCAqcGMsIHVuc2lnbmVkIGludCBwaW4sCisJCQkJICAgICBzdHJ1Y3QgbWVzb25fZG9tYWluICoqZG9tYWluLAorCQkJCSAgICAgc3RydWN0IG1lc29uX2JhbmsgKipiYW5rKQoreworCXN0cnVjdCBtZXNvbl9kb21haW4gKmQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGMtPmRhdGEtPm51bV9kb21haW5zOyBpKyspIHsKKwkJZCA9ICZwYy0+ZG9tYWluc1tpXTsKKwkJaWYgKHBpbiA+PSBkLT5kYXRhLT5waW5fYmFzZSAmJgorCQkgICAgcGluIDwgZC0+ZGF0YS0+cGluX2Jhc2UgKyBkLT5kYXRhLT5udW1fcGlucykgeworCQkJKmRvbWFpbiA9IGQ7CisJCQlyZXR1cm4gbWVzb25fZ2V0X2JhbmsoZCwgcGluLCBiYW5rKTsKKwkJfQorCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIG1lc29uX2NhbGNfcmVnX2FuZF9iaXQoKSAtIGNhbGN1bGF0ZSByZWdpc3RlciBhbmQgYml0IGZvciBhIHBpbgorICoKKyAqIEBiYW5rOgl0aGUgYmFuayBjb250YWluaW5nIHRoZSBwaW4KKyAqIEBwaW46CXRoZSBwaW4gbnVtYmVyCisgKiBAcmVnX3R5cGU6CXRoZSB0eXBlIG9mIHJlZ2lzdGVyIG5lZWRlZCAocHVsbC1lbmFibGUsIHB1bGwsIGV0Yy4uLikKKyAqIEByZWc6CXRoZSBjb21wdXRlZCByZWdpc3RlciBvZmZzZXQKKyAqIEBiaXQ6CXRoZSBjb21wdXRlZCBiaXQKKyAqLworc3RhdGljIHZvaWQgbWVzb25fY2FsY19yZWdfYW5kX2JpdChzdHJ1Y3QgbWVzb25fYmFuayAqYmFuaywgdW5zaWduZWQgaW50IHBpbiwKKwkJCQkgICBlbnVtIG1lc29uX3JlZ190eXBlIHJlZ190eXBlLAorCQkJCSAgIHVuc2lnbmVkIGludCAqcmVnLCB1bnNpZ25lZCBpbnQgKmJpdCkKK3sKKwlzdHJ1Y3QgbWVzb25fcmVnX2Rlc2MgKmRlc2MgPSAmYmFuay0+cmVnc1tyZWdfdHlwZV07CisKKwkqcmVnID0gZGVzYy0+cmVnICogNDsKKwkqYml0ID0gZGVzYy0+Yml0ICsgcGluIC0gYmFuay0+Zmlyc3Q7Cit9CisKK3N0YXRpYyBpbnQgbWVzb25fZ2V0X2dyb3Vwc19jb3VudChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjZGV2KQoreworCXN0cnVjdCBtZXNvbl9waW5jdHJsICpwYyA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjZGV2KTsKKworCXJldHVybiBwYy0+ZGF0YS0+bnVtX2dyb3VwczsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKm1lc29uX2dldF9ncm91cF9uYW1lKHN0cnVjdCBwaW5jdHJsX2RldiAqcGNkZXYsCisJCQkJCXVuc2lnbmVkIHNlbGVjdG9yKQoreworCXN0cnVjdCBtZXNvbl9waW5jdHJsICpwYyA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjZGV2KTsKKworCXJldHVybiBwYy0+ZGF0YS0+Z3JvdXBzW3NlbGVjdG9yXS5uYW1lOworfQorCitzdGF0aWMgaW50IG1lc29uX2dldF9ncm91cF9waW5zKHN0cnVjdCBwaW5jdHJsX2RldiAqcGNkZXYsIHVuc2lnbmVkIHNlbGVjdG9yLAorCQkJCWNvbnN0IHVuc2lnbmVkICoqcGlucywgdW5zaWduZWQgKm51bV9waW5zKQoreworCXN0cnVjdCBtZXNvbl9waW5jdHJsICpwYyA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjZGV2KTsKKworCSpwaW5zID0gcGMtPmRhdGEtPmdyb3Vwc1tzZWxlY3Rvcl0ucGluczsKKwkqbnVtX3BpbnMgPSBwYy0+ZGF0YS0+Z3JvdXBzW3NlbGVjdG9yXS5udW1fcGluczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtZXNvbl9waW5fZGJnX3Nob3coc3RydWN0IHBpbmN0cmxfZGV2ICpwY2Rldiwgc3RydWN0IHNlcV9maWxlICpzLAorCQkJICAgICAgIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzZXFfcHJpbnRmKHMsICIgJXMiLCBkZXZfbmFtZShwY2Rldi0+ZGV2KSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGluY3RybF9vcHMgbWVzb25fcGN0cmxfb3BzID0geworCS5nZXRfZ3JvdXBzX2NvdW50CT0gbWVzb25fZ2V0X2dyb3Vwc19jb3VudCwKKwkuZ2V0X2dyb3VwX25hbWUJCT0gbWVzb25fZ2V0X2dyb3VwX25hbWUsCisJLmdldF9ncm91cF9waW5zCQk9IG1lc29uX2dldF9ncm91cF9waW5zLAorCS5kdF9ub2RlX3RvX21hcAkJPSBwaW5jb25mX2dlbmVyaWNfZHRfbm9kZV90b19tYXBfYWxsLAorCS5kdF9mcmVlX21hcAkJPSBwaW5jdHJsX3V0aWxzX2R0X2ZyZWVfbWFwLAorCS5waW5fZGJnX3Nob3cJCT0gbWVzb25fcGluX2RiZ19zaG93LAorfTsKKworLyoqCisgKiBtZXNvbl9wbXhfZGlzYWJsZV9vdGhlcl9ncm91cHMoKSAtIGRpc2FibGUgb3RoZXIgZ3JvdXBzIHVzaW5nIGEgZ2l2ZW4gcGluCisgKgorICogQHBjOgkJbWVzb24gcGluIGNvbnRyb2xsZXIgZGV2aWNlCisgKiBAcGluOgludW1iZXIgb2YgdGhlIHBpbgorICogQHNlbF9ncm91cDoJaW5kZXggb2YgdGhlIHNlbGVjdGVkIGdyb3VwLCBvciAtMSBpZiBub25lCisgKgorICogVGhlIGZ1bmN0aW9uIGRpc2FibGVzIGFsbCBwaW5tdXggZ3JvdXBzIHVzaW5nIGEgcGluIGV4Y2VwdCB0aGUKKyAqIHNlbGVjdGVkIG9uZS4gSWYgQHNlbF9ncm91cCBpcyAtMSBhbGwgZ3JvdXBzIGFyZSBkaXNhYmxlZCwgbGVhdmluZworICogdGhlIHBpbiBpbiBHUElPIG1vZGUuCisgKi8KK3N0YXRpYyB2b2lkIG1lc29uX3BteF9kaXNhYmxlX290aGVyX2dyb3VwcyhzdHJ1Y3QgbWVzb25fcGluY3RybCAqcGMsCisJCQkJCSAgIHVuc2lnbmVkIGludCBwaW4sIGludCBzZWxfZ3JvdXApCit7CisJc3RydWN0IG1lc29uX3BteF9ncm91cCAqZ3JvdXA7CisJc3RydWN0IG1lc29uX2RvbWFpbiAqZG9tYWluOworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IHBjLT5kYXRhLT5udW1fZ3JvdXBzOyBpKyspIHsKKwkJZ3JvdXAgPSAmcGMtPmRhdGEtPmdyb3Vwc1tpXTsKKwkJaWYgKGdyb3VwLT5pc19ncGlvIHx8IGkgPT0gc2VsX2dyb3VwKQorCQkJY29udGludWU7CisKKwkJZm9yIChqID0gMDsgaiA8IGdyb3VwLT5udW1fcGluczsgaisrKSB7CisJCQlpZiAoZ3JvdXAtPnBpbnNbal0gPT0gcGluKSB7CisJCQkJLyogV2UgaGF2ZSBmb3VuZCBhIGdyb3VwIHVzaW5nIHRoZSBwaW4gKi8KKwkJCQlkb21haW4gPSAmcGMtPmRvbWFpbnNbZ3JvdXAtPmRvbWFpbl07CisJCQkJcmVnbWFwX3VwZGF0ZV9iaXRzKGRvbWFpbi0+cmVnX211eCwKKwkJCQkJCSAgIGdyb3VwLT5yZWcgKiA0LAorCQkJCQkJICAgQklUKGdyb3VwLT5iaXQpLCAwKTsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIGludCBtZXNvbl9wbXhfc2V0X211eChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjZGV2LCB1bnNpZ25lZCBmdW5jX251bSwKKwkJCSAgICAgdW5zaWduZWQgZ3JvdXBfbnVtKQoreworCXN0cnVjdCBtZXNvbl9waW5jdHJsICpwYyA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjZGV2KTsKKwlzdHJ1Y3QgbWVzb25fcG14X2Z1bmMgKmZ1bmMgPSAmcGMtPmRhdGEtPmZ1bmNzW2Z1bmNfbnVtXTsKKwlzdHJ1Y3QgbWVzb25fcG14X2dyb3VwICpncm91cCA9ICZwYy0+ZGF0YS0+Z3JvdXBzW2dyb3VwX251bV07CisJc3RydWN0IG1lc29uX2RvbWFpbiAqZG9tYWluID0gJnBjLT5kb21haW5zW2dyb3VwLT5kb21haW5dOworCWludCBpLCByZXQgPSAwOworCisJZGV2X2RiZyhwYy0+ZGV2LCAiZW5hYmxlIGZ1bmN0aW9uICVzLCBncm91cCAlc1xuIiwgZnVuYy0+bmFtZSwKKwkJZ3JvdXAtPm5hbWUpOworCisJLyoKKwkgKiBEaXNhYmxlIGdyb3VwcyB1c2luZyB0aGUgc2FtZSBwaW4uCisJICogVGhlIHNlbGVjdGVkIGdyb3VwIGlzIG5vdCBkaXNhYmxlZCB0byBhdm9pZCBnbGl0Y2hlcy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZ3JvdXAtPm51bV9waW5zOyBpKyspCisJCW1lc29uX3BteF9kaXNhYmxlX290aGVyX2dyb3VwcyhwYywgZ3JvdXAtPnBpbnNbaV0sIGdyb3VwX251bSk7CisKKwkvKiBGdW5jdGlvbiAwIChHUElPKSBkb2Vzbid0IG5lZWQgYW55IGFkZGl0aW9uYWwgc2V0dGluZyAqLworCWlmIChmdW5jX251bSkKKwkJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGRvbWFpbi0+cmVnX211eCwgZ3JvdXAtPnJlZyAqIDQsCisJCQkJCSBCSVQoZ3JvdXAtPmJpdCksIEJJVChncm91cC0+Yml0KSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1lc29uX3BteF9yZXF1ZXN0X2dwaW8oc3RydWN0IHBpbmN0cmxfZGV2ICpwY2RldiwKKwkJCQkgIHN0cnVjdCBwaW5jdHJsX2dwaW9fcmFuZ2UgKnJhbmdlLAorCQkJCSAgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBtZXNvbl9waW5jdHJsICpwYyA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjZGV2KTsKKworCW1lc29uX3BteF9kaXNhYmxlX290aGVyX2dyb3VwcyhwYywgcmFuZ2UtPnBpbl9iYXNlICsgb2Zmc2V0LCAtMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZXNvbl9wbXhfZ2V0X2Z1bmNzX2NvdW50KHN0cnVjdCBwaW5jdHJsX2RldiAqcGNkZXYpCit7CisJc3RydWN0IG1lc29uX3BpbmN0cmwgKnBjID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGNkZXYpOworCisJcmV0dXJuIHBjLT5kYXRhLT5udW1fZnVuY3M7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICptZXNvbl9wbXhfZ2V0X2Z1bmNfbmFtZShzdHJ1Y3QgcGluY3RybF9kZXYgKnBjZGV2LAorCQkJCQkgICB1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwlzdHJ1Y3QgbWVzb25fcGluY3RybCAqcGMgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY2Rldik7CisKKwlyZXR1cm4gcGMtPmRhdGEtPmZ1bmNzW3NlbGVjdG9yXS5uYW1lOworfQorCitzdGF0aWMgaW50IG1lc29uX3BteF9nZXRfZ3JvdXBzKHN0cnVjdCBwaW5jdHJsX2RldiAqcGNkZXYsIHVuc2lnbmVkIHNlbGVjdG9yLAorCQkJCWNvbnN0IGNoYXIgKiBjb25zdCAqKmdyb3VwcywKKwkJCQl1bnNpZ25lZCAqIGNvbnN0IG51bV9ncm91cHMpCit7CisJc3RydWN0IG1lc29uX3BpbmN0cmwgKnBjID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGNkZXYpOworCisJKmdyb3VwcyA9IHBjLT5kYXRhLT5mdW5jc1tzZWxlY3Rvcl0uZ3JvdXBzOworCSpudW1fZ3JvdXBzID0gcGMtPmRhdGEtPmZ1bmNzW3NlbGVjdG9yXS5udW1fZ3JvdXBzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGlubXV4X29wcyBtZXNvbl9wbXhfb3BzID0geworCS5zZXRfbXV4ID0gbWVzb25fcG14X3NldF9tdXgsCisJLmdldF9mdW5jdGlvbnNfY291bnQgPSBtZXNvbl9wbXhfZ2V0X2Z1bmNzX2NvdW50LAorCS5nZXRfZnVuY3Rpb25fbmFtZSA9IG1lc29uX3BteF9nZXRfZnVuY19uYW1lLAorCS5nZXRfZnVuY3Rpb25fZ3JvdXBzID0gbWVzb25fcG14X2dldF9ncm91cHMsCisJLmdwaW9fcmVxdWVzdF9lbmFibGUgPSBtZXNvbl9wbXhfcmVxdWVzdF9ncGlvLAorfTsKKworc3RhdGljIGludCBtZXNvbl9waW5jb25mX3NldChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjZGV2LCB1bnNpZ25lZCBpbnQgcGluLAorCQkJICAgICB1bnNpZ25lZCBsb25nICpjb25maWdzLCB1bnNpZ25lZCBudW1fY29uZmlncykKK3sKKwlzdHJ1Y3QgbWVzb25fcGluY3RybCAqcGMgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY2Rldik7CisJc3RydWN0IG1lc29uX2RvbWFpbiAqZG9tYWluOworCXN0cnVjdCBtZXNvbl9iYW5rICpiYW5rOworCWVudW0gcGluX2NvbmZpZ19wYXJhbSBwYXJhbTsKKwl1bnNpZ25lZCBpbnQgcmVnLCBiaXQ7CisJaW50IGksIHJldDsKKwl1MTYgYXJnOworCisJcmV0ID0gbWVzb25fZ2V0X2RvbWFpbl9hbmRfYmFuayhwYywgcGluLCAmZG9tYWluLCAmYmFuayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY29uZmlnczsgaSsrKSB7CisJCXBhcmFtID0gcGluY29uZl90b19jb25maWdfcGFyYW0oY29uZmlnc1tpXSk7CisJCWFyZyA9IHBpbmNvbmZfdG9fY29uZmlnX2FyZ3VtZW50KGNvbmZpZ3NbaV0pOworCisJCXN3aXRjaCAocGFyYW0pIHsKKwkJY2FzZSBQSU5fQ09ORklHX0JJQVNfRElTQUJMRToKKwkJCWRldl9kYmcocGMtPmRldiwgInBpbiAldTogZGlzYWJsZSBiaWFzXG4iLCBwaW4pOworCisJCQltZXNvbl9jYWxjX3JlZ19hbmRfYml0KGJhbmssIHBpbiwgUkVHX1BVTEwsICZyZWcsICZiaXQpOworCQkJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGRvbWFpbi0+cmVnX3B1bGwsIHJlZywKKwkJCQkJCSBCSVQoYml0KSwgMCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCQlicmVhazsKKwkJY2FzZSBQSU5fQ09ORklHX0JJQVNfUFVMTF9VUDoKKwkJCWRldl9kYmcocGMtPmRldiwgInBpbiAldTogZW5hYmxlIHB1bGwtdXBcbiIsIHBpbik7CisKKwkJCW1lc29uX2NhbGNfcmVnX2FuZF9iaXQoYmFuaywgcGluLCBSRUdfUFVMTEVOLAorCQkJCQkgICAgICAgJnJlZywgJmJpdCk7CisJCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoZG9tYWluLT5yZWdfcHVsbGVuLCByZWcsCisJCQkJCQkgQklUKGJpdCksIEJJVChiaXQpKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKworCQkJbWVzb25fY2FsY19yZWdfYW5kX2JpdChiYW5rLCBwaW4sIFJFR19QVUxMLCAmcmVnLCAmYml0KTsKKwkJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhkb21haW4tPnJlZ19wdWxsLCByZWcsCisJCQkJCQkgQklUKGJpdCksIEJJVChiaXQpKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCWJyZWFrOworCQljYXNlIFBJTl9DT05GSUdfQklBU19QVUxMX0RPV046CisJCQlkZXZfZGJnKHBjLT5kZXYsICJwaW4gJXU6IGVuYWJsZSBwdWxsLWRvd25cbiIsIHBpbik7CisKKwkJCW1lc29uX2NhbGNfcmVnX2FuZF9iaXQoYmFuaywgcGluLCBSRUdfUFVMTEVOLAorCQkJCQkgICAgICAgJnJlZywgJmJpdCk7CisJCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoZG9tYWluLT5yZWdfcHVsbGVuLCByZWcsCisJCQkJCQkgQklUKGJpdCksIEJJVChiaXQpKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKworCQkJbWVzb25fY2FsY19yZWdfYW5kX2JpdChiYW5rLCBwaW4sIFJFR19QVUxMLCAmcmVnLCAmYml0KTsKKwkJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhkb21haW4tPnJlZ19wdWxsLCByZWcsCisJCQkJCQkgQklUKGJpdCksIDApOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVOT1RTVVBQOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWVzb25fcGluY29uZl9nZXRfcHVsbChzdHJ1Y3QgbWVzb25fcGluY3RybCAqcGMsIHVuc2lnbmVkIGludCBwaW4pCit7CisJc3RydWN0IG1lc29uX2RvbWFpbiAqZG9tYWluOworCXN0cnVjdCBtZXNvbl9iYW5rICpiYW5rOworCXVuc2lnbmVkIGludCByZWcsIGJpdCwgdmFsOworCWludCByZXQsIGNvbmY7CisKKwlyZXQgPSBtZXNvbl9nZXRfZG9tYWluX2FuZF9iYW5rKHBjLCBwaW4sICZkb21haW4sICZiYW5rKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbWVzb25fY2FsY19yZWdfYW5kX2JpdChiYW5rLCBwaW4sIFJFR19QVUxMRU4sICZyZWcsICZiaXQpOworCisJcmV0ID0gcmVnbWFwX3JlYWQoZG9tYWluLT5yZWdfcHVsbGVuLCByZWcsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoISh2YWwgJiBCSVQoYml0KSkpIHsKKwkJY29uZiA9IFBJTl9DT05GSUdfQklBU19ESVNBQkxFOworCX0gZWxzZSB7CisJCW1lc29uX2NhbGNfcmVnX2FuZF9iaXQoYmFuaywgcGluLCBSRUdfUFVMTCwgJnJlZywgJmJpdCk7CisKKwkJcmV0ID0gcmVnbWFwX3JlYWQoZG9tYWluLT5yZWdfcHVsbCwgcmVnLCAmdmFsKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKHZhbCAmIEJJVChiaXQpKQorCQkJY29uZiA9IFBJTl9DT05GSUdfQklBU19QVUxMX1VQOworCQllbHNlCisJCQljb25mID0gUElOX0NPTkZJR19CSUFTX1BVTExfRE9XTjsKKwl9CisKKwlyZXR1cm4gY29uZjsKK30KKworc3RhdGljIGludCBtZXNvbl9waW5jb25mX2dldChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjZGV2LCB1bnNpZ25lZCBpbnQgcGluLAorCQkJICAgICB1bnNpZ25lZCBsb25nICpjb25maWcpCit7CisJc3RydWN0IG1lc29uX3BpbmN0cmwgKnBjID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGNkZXYpOworCWVudW0gcGluX2NvbmZpZ19wYXJhbSBwYXJhbSA9IHBpbmNvbmZfdG9fY29uZmlnX3BhcmFtKCpjb25maWcpOworCXUxNiBhcmc7CisKKwlzd2l0Y2ggKHBhcmFtKSB7CisJY2FzZSBQSU5fQ09ORklHX0JJQVNfRElTQUJMRToKKwljYXNlIFBJTl9DT05GSUdfQklBU19QVUxMX0RPV046CisJY2FzZSBQSU5fQ09ORklHX0JJQVNfUFVMTF9VUDoKKwkJaWYgKG1lc29uX3BpbmNvbmZfZ2V0X3B1bGwocGMsIHBpbikgPT0gcGFyYW0pCisJCQlhcmcgPSAxOworCQllbHNlCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisKKwkqY29uZmlnID0gcGluY29uZl90b19jb25maWdfcGFja2VkKHBhcmFtLCBhcmcpOworCWRldl9kYmcocGMtPmRldiwgInBpbmNvbmYgZm9yIHBpbiAldSBpcyAlbHVcbiIsIHBpbiwgKmNvbmZpZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZXNvbl9waW5jb25mX2dyb3VwX3NldChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjZGV2LAorCQkJCSAgIHVuc2lnbmVkIGludCBudW1fZ3JvdXAsCisJCQkJICAgdW5zaWduZWQgbG9uZyAqY29uZmlncywgdW5zaWduZWQgbnVtX2NvbmZpZ3MpCit7CisJc3RydWN0IG1lc29uX3BpbmN0cmwgKnBjID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGNkZXYpOworCXN0cnVjdCBtZXNvbl9wbXhfZ3JvdXAgKmdyb3VwID0gJnBjLT5kYXRhLT5ncm91cHNbbnVtX2dyb3VwXTsKKwlpbnQgaTsKKworCWRldl9kYmcocGMtPmRldiwgInNldCBwaW5jb25mIGZvciBncm91cCAlc1xuIiwgZ3JvdXAtPm5hbWUpOworCisJZm9yIChpID0gMDsgaSA8IGdyb3VwLT5udW1fcGluczsgaSsrKSB7CisJCW1lc29uX3BpbmNvbmZfc2V0KHBjZGV2LCBncm91cC0+cGluc1tpXSwgY29uZmlncywKKwkJCQkgIG51bV9jb25maWdzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtZXNvbl9waW5jb25mX2dyb3VwX2dldChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjZGV2LAorCQkJCSAgIHVuc2lnbmVkIGludCBncm91cCwgdW5zaWduZWQgbG9uZyAqY29uZmlnKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBpbmNvbmZfb3BzIG1lc29uX3BpbmNvbmZfb3BzID0geworCS5waW5fY29uZmlnX2dldAkJPSBtZXNvbl9waW5jb25mX2dldCwKKwkucGluX2NvbmZpZ19zZXQJCT0gbWVzb25fcGluY29uZl9zZXQsCisJLnBpbl9jb25maWdfZ3JvdXBfZ2V0CT0gbWVzb25fcGluY29uZl9ncm91cF9nZXQsCisJLnBpbl9jb25maWdfZ3JvdXBfc2V0CT0gbWVzb25fcGluY29uZl9ncm91cF9zZXQsCisJLmlzX2dlbmVyaWMJCT0gdHJ1ZSwKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lc29uX2RvbWFpbiAqdG9fbWVzb25fZG9tYWluKHN0cnVjdCBncGlvX2NoaXAgKmNoaXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbWVzb25fZG9tYWluLCBjaGlwKTsKK30KKworc3RhdGljIGludCBtZXNvbl9ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gcGluY3RybF9yZXF1ZXN0X2dwaW8oY2hpcC0+YmFzZSArIGdwaW8pOworfQorCitzdGF0aWMgdm9pZCBtZXNvbl9ncGlvX2ZyZWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgbWVzb25fZG9tYWluICpkb21haW4gPSB0b19tZXNvbl9kb21haW4oY2hpcCk7CisKKwlwaW5jdHJsX2ZyZWVfZ3Bpbyhkb21haW4tPmRhdGEtPnBpbl9iYXNlICsgZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbnQgbWVzb25fZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgZ3BpbykKK3sKKwlzdHJ1Y3QgbWVzb25fZG9tYWluICpkb21haW4gPSB0b19tZXNvbl9kb21haW4oY2hpcCk7CisJdW5zaWduZWQgaW50IHJlZywgYml0LCBwaW47CisJc3RydWN0IG1lc29uX2JhbmsgKmJhbms7CisJaW50IHJldDsKKworCXBpbiA9IGRvbWFpbi0+ZGF0YS0+cGluX2Jhc2UgKyBncGlvOworCXJldCA9IG1lc29uX2dldF9iYW5rKGRvbWFpbiwgcGluLCAmYmFuayk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1lc29uX2NhbGNfcmVnX2FuZF9iaXQoYmFuaywgcGluLCBSRUdfRElSLCAmcmVnLCAmYml0KTsKKworCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMoZG9tYWluLT5yZWdfZ3BpbywgcmVnLCBCSVQoYml0KSwgQklUKGJpdCkpOworfQorCitzdGF0aWMgaW50IG1lc29uX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBncGlvLAorCQkJCSAgICAgICBpbnQgdmFsdWUpCit7CisJc3RydWN0IG1lc29uX2RvbWFpbiAqZG9tYWluID0gdG9fbWVzb25fZG9tYWluKGNoaXApOworCXVuc2lnbmVkIGludCByZWcsIGJpdCwgcGluOworCXN0cnVjdCBtZXNvbl9iYW5rICpiYW5rOworCWludCByZXQ7CisKKwlwaW4gPSBkb21haW4tPmRhdGEtPnBpbl9iYXNlICsgZ3BpbzsKKwlyZXQgPSBtZXNvbl9nZXRfYmFuayhkb21haW4sIHBpbiwgJmJhbmspOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltZXNvbl9jYWxjX3JlZ19hbmRfYml0KGJhbmssIHBpbiwgUkVHX0RJUiwgJnJlZywgJmJpdCk7CisJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKGRvbWFpbi0+cmVnX2dwaW8sIHJlZywgQklUKGJpdCksIDApOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltZXNvbl9jYWxjX3JlZ19hbmRfYml0KGJhbmssIHBpbiwgUkVHX09VVCwgJnJlZywgJmJpdCk7CisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhkb21haW4tPnJlZ19ncGlvLCByZWcsIEJJVChiaXQpLAorCQkJCSAgdmFsdWUgPyBCSVQoYml0KSA6IDApOworfQorCitzdGF0aWMgdm9pZCBtZXNvbl9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCit7CisJc3RydWN0IG1lc29uX2RvbWFpbiAqZG9tYWluID0gdG9fbWVzb25fZG9tYWluKGNoaXApOworCXVuc2lnbmVkIGludCByZWcsIGJpdCwgcGluOworCXN0cnVjdCBtZXNvbl9iYW5rICpiYW5rOworCWludCByZXQ7CisKKwlwaW4gPSBkb21haW4tPmRhdGEtPnBpbl9iYXNlICsgZ3BpbzsKKwlyZXQgPSBtZXNvbl9nZXRfYmFuayhkb21haW4sIHBpbiwgJmJhbmspOworCWlmIChyZXQpCisJCXJldHVybjsKKworCW1lc29uX2NhbGNfcmVnX2FuZF9iaXQoYmFuaywgcGluLCBSRUdfT1VULCAmcmVnLCAmYml0KTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZG9tYWluLT5yZWdfZ3BpbywgcmVnLCBCSVQoYml0KSwKKwkJCSAgIHZhbHVlID8gQklUKGJpdCkgOiAwKTsKK30KKworc3RhdGljIGludCBtZXNvbl9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBncGlvKQoreworCXN0cnVjdCBtZXNvbl9kb21haW4gKmRvbWFpbiA9IHRvX21lc29uX2RvbWFpbihjaGlwKTsKKwl1bnNpZ25lZCBpbnQgcmVnLCBiaXQsIHZhbCwgcGluOworCXN0cnVjdCBtZXNvbl9iYW5rICpiYW5rOworCWludCByZXQ7CisKKwlwaW4gPSBkb21haW4tPmRhdGEtPnBpbl9iYXNlICsgZ3BpbzsKKwlyZXQgPSBtZXNvbl9nZXRfYmFuayhkb21haW4sIHBpbiwgJmJhbmspOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltZXNvbl9jYWxjX3JlZ19hbmRfYml0KGJhbmssIHBpbiwgUkVHX0lOLCAmcmVnLCAmYml0KTsKKwlyZWdtYXBfcmVhZChkb21haW4tPnJlZ19ncGlvLCByZWcsICZ2YWwpOworCisJcmV0dXJuICEhKHZhbCAmIEJJVChiaXQpKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWVzb25fcGluY3RybF9kdF9tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAiYW1sb2dpYyxtZXNvbjgtcGluY3RybCIsCisJCS5kYXRhID0gJm1lc29uOF9waW5jdHJsX2RhdGEsCisJfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbWVzb25fcGluY3RybF9kdF9tYXRjaCk7CisKK3N0YXRpYyBpbnQgbWVzb25fZ3Bpb2xpYl9yZWdpc3RlcihzdHJ1Y3QgbWVzb25fcGluY3RybCAqcGMpCit7CisJc3RydWN0IG1lc29uX2RvbWFpbiAqZG9tYWluOworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGMtPmRhdGEtPm51bV9kb21haW5zOyBpKyspIHsKKwkJZG9tYWluID0gJnBjLT5kb21haW5zW2ldOworCisJCWRvbWFpbi0+Y2hpcC5sYWJlbCA9IGRvbWFpbi0+ZGF0YS0+bmFtZTsKKwkJZG9tYWluLT5jaGlwLmRldiA9IHBjLT5kZXY7CisJCWRvbWFpbi0+Y2hpcC5yZXF1ZXN0ID0gbWVzb25fZ3Bpb19yZXF1ZXN0OworCQlkb21haW4tPmNoaXAuZnJlZSA9IG1lc29uX2dwaW9fZnJlZTsKKwkJZG9tYWluLT5jaGlwLmRpcmVjdGlvbl9pbnB1dCA9IG1lc29uX2dwaW9fZGlyZWN0aW9uX2lucHV0OworCQlkb21haW4tPmNoaXAuZGlyZWN0aW9uX291dHB1dCA9IG1lc29uX2dwaW9fZGlyZWN0aW9uX291dHB1dDsKKwkJZG9tYWluLT5jaGlwLmdldCA9IG1lc29uX2dwaW9fZ2V0OworCQlkb21haW4tPmNoaXAuc2V0ID0gbWVzb25fZ3Bpb19zZXQ7CisJCWRvbWFpbi0+Y2hpcC5iYXNlID0gLTE7CisJCWRvbWFpbi0+Y2hpcC5uZ3BpbyA9IGRvbWFpbi0+ZGF0YS0+bnVtX3BpbnM7CisJCWRvbWFpbi0+Y2hpcC5jYW5fc2xlZXAgPSBmYWxzZTsKKwkJZG9tYWluLT5jaGlwLm9mX25vZGUgPSBkb21haW4tPm9mX25vZGU7CisJCWRvbWFpbi0+Y2hpcC5vZl9ncGlvX25fY2VsbHMgPSAyOworCisJCXJldCA9IGdwaW9jaGlwX2FkZCgmZG9tYWluLT5jaGlwKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihwYy0+ZGV2LCAiY2FuJ3QgYWRkIGdwaW8gY2hpcCAlc1xuIiwKKwkJCQlkb21haW4tPmRhdGEtPm5hbWUpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJcmV0ID0gZ3Bpb2NoaXBfYWRkX3Bpbl9yYW5nZSgmZG9tYWluLT5jaGlwLCBkZXZfbmFtZShwYy0+ZGV2KSwKKwkJCQkJICAgICAwLCBkb21haW4tPmRhdGEtPnBpbl9iYXNlLAorCQkJCQkgICAgIGRvbWFpbi0+Y2hpcC5uZ3Bpbyk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIocGMtPmRldiwgImNhbid0IGFkZCBwaW4gcmFuZ2VcbiIpOworCQkJZ290byBmYWlsOworCQl9CisJfQorCisJcmV0dXJuIDA7CitmYWlsOgorCWZvciAoaS0tOyBpID49IDA7IGktLSkKKwkJZ3Bpb2NoaXBfcmVtb3ZlKCZwYy0+ZG9tYWluc1tpXS5jaGlwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWVzb25fZG9tYWluX2RhdGEgKm1lc29uX2dldF9kb21haW5fZGF0YShzdHJ1Y3QgbWVzb25fcGluY3RybCAqcGMsCisJCQkJCQkgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwYy0+ZGF0YS0+bnVtX2RvbWFpbnM7IGkrKykgeworCQlpZiAoIXN0cmNtcChucC0+bmFtZSwgcGMtPmRhdGEtPmRvbWFpbl9kYXRhW2ldLm5hbWUpKQorCQkJcmV0dXJuICZwYy0+ZGF0YS0+ZG9tYWluX2RhdGFbaV07CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBtZXNvbl9yZWdtYXBfY29uZmlnID0geworCS5yZWdfYml0cyA9IDMyLAorCS52YWxfYml0cyA9IDMyLAorCS5yZWdfc3RyaWRlID0gNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVnbWFwICptZXNvbl9tYXBfcmVzb3VyY2Uoc3RydWN0IG1lc29uX3BpbmN0cmwgKnBjLAorCQkJCQkgc3RydWN0IGRldmljZV9ub2RlICpub2RlLCBjaGFyICpuYW1lKQoreworCXN0cnVjdCByZXNvdXJjZSByZXM7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCBpOworCisJaSA9IG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhub2RlLCAicmVnLW5hbWVzIiwgbmFtZSk7CisJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2Uobm9kZSwgaSwgJnJlcykpCisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCisJYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShwYy0+ZGV2LCAmcmVzKTsKKwlpZiAoSVNfRVJSKGJhc2UpKQorCQlyZXR1cm4gRVJSX0NBU1QoYmFzZSk7CisKKwltZXNvbl9yZWdtYXBfY29uZmlnLm1heF9yZWdpc3RlciA9IHJlc291cmNlX3NpemUoJnJlcykgLSA0OworCW1lc29uX3JlZ21hcF9jb25maWcubmFtZSA9IGRldm1fa2FzcHJpbnRmKHBjLT5kZXYsIEdGUF9LRVJORUwsCisJCQkJCQkgICIlcy0lcyIsIG5vZGUtPm5hbWUsCisJCQkJCQkgIG5hbWUpOworCWlmICghbWVzb25fcmVnbWFwX2NvbmZpZy5uYW1lKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXJldHVybiBkZXZtX3JlZ21hcF9pbml0X21taW8ocGMtPmRldiwgYmFzZSwgJm1lc29uX3JlZ21hcF9jb25maWcpOworfQorCitzdGF0aWMgaW50IG1lc29uX3BpbmN0cmxfcGFyc2VfZHQoc3RydWN0IG1lc29uX3BpbmN0cmwgKnBjLAorCQkJCSAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IG1lc29uX2RvbWFpbiAqZG9tYWluOworCWludCBpID0gMCwgbnVtX2RvbWFpbnMgPSAwOworCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShub2RlLCBucCkgeworCQlpZiAoIW9mX2ZpbmRfcHJvcGVydHkobnAsICJncGlvLWNvbnRyb2xsZXIiLCBOVUxMKSkKKwkJCWNvbnRpbnVlOworCQludW1fZG9tYWlucysrOworCX0KKworCWlmIChudW1fZG9tYWlucyAhPSBwYy0+ZGF0YS0+bnVtX2RvbWFpbnMpIHsKKwkJZGV2X2VycihwYy0+ZGV2LCAid3JvbmcgbnVtYmVyIG9mIHN1Ym5vZGVzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGMtPmRvbWFpbnMgPSBkZXZtX2t6YWxsb2MocGMtPmRldiwgbnVtX2RvbWFpbnMgKgorCQkJCSAgIHNpemVvZihzdHJ1Y3QgbWVzb25fZG9tYWluKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYy0+ZG9tYWlucykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5vZGUsIG5wKSB7CisJCWlmICghb2ZfZmluZF9wcm9wZXJ0eShucCwgImdwaW8tY29udHJvbGxlciIsIE5VTEwpKQorCQkJY29udGludWU7CisKKwkJZG9tYWluID0gJnBjLT5kb21haW5zW2ldOworCisJCWRvbWFpbi0+ZGF0YSA9IG1lc29uX2dldF9kb21haW5fZGF0YShwYywgbnApOworCQlpZiAoIWRvbWFpbi0+ZGF0YSkgeworCQkJZGV2X2VycihwYy0+ZGV2LCAiZG9tYWluIGRhdGEgbm90IGZvdW5kIGZvciBub2RlICVzXG4iLAorCQkJCW5wLT5uYW1lKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisKKwkJZG9tYWluLT5vZl9ub2RlID0gbnA7CisKKwkJZG9tYWluLT5yZWdfbXV4ID0gbWVzb25fbWFwX3Jlc291cmNlKHBjLCBucCwgIm11eCIpOworCQlpZiAoSVNfRVJSKGRvbWFpbi0+cmVnX211eCkpIHsKKwkJCWRldl9lcnIocGMtPmRldiwgIm11eCByZWdpc3RlcnMgbm90IGZvdW5kXG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKGRvbWFpbi0+cmVnX211eCk7CisJCX0KKworCQlkb21haW4tPnJlZ19wdWxsID0gbWVzb25fbWFwX3Jlc291cmNlKHBjLCBucCwgInB1bGwiKTsKKwkJaWYgKElTX0VSUihkb21haW4tPnJlZ19wdWxsKSkgeworCQkJZGV2X2VycihwYy0+ZGV2LCAicHVsbCByZWdpc3RlcnMgbm90IGZvdW5kXG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKGRvbWFpbi0+cmVnX3B1bGwpOworCQl9CisKKwkJZG9tYWluLT5yZWdfcHVsbGVuID0gbWVzb25fbWFwX3Jlc291cmNlKHBjLCBucCwgInB1bGwtZW5hYmxlIik7CisJCS8qIFVzZSBwdWxsIHJlZ2lvbiBpZiBwdWxsLWVuYWJsZSBvbmUgaXMgbm90IHByZXNlbnQgKi8KKwkJaWYgKElTX0VSUihkb21haW4tPnJlZ19wdWxsZW4pKQorCQkJZG9tYWluLT5yZWdfcHVsbGVuID0gZG9tYWluLT5yZWdfcHVsbDsKKworCQlkb21haW4tPnJlZ19ncGlvID0gbWVzb25fbWFwX3Jlc291cmNlKHBjLCBucCwgImdwaW8iKTsKKwkJaWYgKElTX0VSUihkb21haW4tPnJlZ19ncGlvKSkgeworCQkJZGV2X2VycihwYy0+ZGV2LCAiZ3BpbyByZWdpc3RlcnMgbm90IGZvdW5kXG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKGRvbWFpbi0+cmVnX2dwaW8pOworCQl9CisKKwkJaSsrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lc29uX3BpbmN0cmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBtZXNvbl9waW5jdHJsICpwYzsKKwlpbnQgcmV0OworCisJcGMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IG1lc29uX3BpbmN0cmwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBjLT5kZXYgPSBkZXY7CisJbWF0Y2ggPSBvZl9tYXRjaF9ub2RlKG1lc29uX3BpbmN0cmxfZHRfbWF0Y2gsIHBkZXYtPmRldi5vZl9ub2RlKTsKKwlwYy0+ZGF0YSA9IChzdHJ1Y3QgbWVzb25fcGluY3RybF9kYXRhICopbWF0Y2gtPmRhdGE7CisKKwlyZXQgPSBtZXNvbl9waW5jdHJsX3BhcnNlX2R0KHBjLCBwZGV2LT5kZXYub2Zfbm9kZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBjLT5kZXNjLm5hbWUJCT0gInBpbmN0cmwtbWVzb24iOworCXBjLT5kZXNjLm93bmVyCQk9IFRISVNfTU9EVUxFOworCXBjLT5kZXNjLnBjdGxvcHMJPSAmbWVzb25fcGN0cmxfb3BzOworCXBjLT5kZXNjLnBteG9wcwkJPSAmbWVzb25fcG14X29wczsKKwlwYy0+ZGVzYy5jb25mb3BzCT0gJm1lc29uX3BpbmNvbmZfb3BzOworCXBjLT5kZXNjLnBpbnMJCT0gcGMtPmRhdGEtPnBpbnM7CisJcGMtPmRlc2MubnBpbnMJCT0gcGMtPmRhdGEtPm51bV9waW5zOworCisJcGMtPnBjZGV2ID0gcGluY3RybF9yZWdpc3RlcigmcGMtPmRlc2MsIHBjLT5kZXYsIHBjKTsKKwlpZiAoIXBjLT5wY2RldikgeworCQlkZXZfZXJyKHBjLT5kZXYsICJjYW4ndCByZWdpc3RlciBwaW5jdHJsIGRldmljZSIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBtZXNvbl9ncGlvbGliX3JlZ2lzdGVyKHBjKTsKKwlpZiAocmV0KSB7CisJCXBpbmN0cmxfdW5yZWdpc3RlcihwYy0+cGNkZXYpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZXNvbl9waW5jdHJsX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbWVzb25fcGluY3RybF9wcm9iZSwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJtZXNvbi1waW5jdHJsIiwKKwkJLm9mX21hdGNoX3RhYmxlID0gbWVzb25fcGluY3RybF9kdF9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobWVzb25fcGluY3RybF9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJCZW5pYW1pbm8gR2FsdmFuaSA8Yi5nYWx2YW5pQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQW1sb2dpYyBNZXNvbiBwaW5jdHJsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL21lc29uL3BpbmN0cmwtbWVzb24uaCBiL2RyaXZlcnMvcGluY3RybC9tZXNvbi9waW5jdHJsLW1lc29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlYThhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGluY3RybC9tZXNvbi9waW5jdHJsLW1lc29uLmgKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBQaW4gY29udHJvbGxlciBhbmQgR1BJTyBkcml2ZXIgZm9yIEFtbG9naWMgTWVzb24gU29DcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBCZW5pYW1pbm8gR2FsdmFuaSA8Yi5nYWx2YW5pQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+CisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyoqCisgKiBzdHJ1Y3QgbWVzb25fcG14X2dyb3VwIC0gYSBwaW5tdXggZ3JvdXAKKyAqCisgKiBAbmFtZToJZ3JvdXAgbmFtZQorICogQHBpbnM6CXBpbnMgaW4gdGhlIGdyb3VwCisgKiBAbnVtX3BpbnM6CW51bWJlciBvZiBwaW5zIGluIHRoZSBncm91cAorICogQGlzX2dwaW86CXdoZXRoZXIgdGhlIGdyb3VwIGlzIGEgc2luZ2xlIEdQSU8gZ3JvdXAKKyAqIEByZWc6CXJlZ2lzdGVyIG9mZnNldCBmb3IgdGhlIGdyb3VwIGluIHRoZSBkb21haW4gbXV4IHJlZ2lzdGVycworICogQGJpdAkJYml0IGluZGV4IGVuYWJsaW5nIHRoZSBncm91cAorICogQGRvbWFpbjoJaW5kZXggb2YgdGhlIGRvbWFpbiB0aGlzIGdyb3VwIGJlbG9uZ3MgdG8KKyAqLworc3RydWN0IG1lc29uX3BteF9ncm91cCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnBpbnM7CisJdW5zaWduZWQgaW50IG51bV9waW5zOworCWJvb2wgaXNfZ3BpbzsKKwl1bnNpZ25lZCBpbnQgcmVnOworCXVuc2lnbmVkIGludCBiaXQ7CisJdW5zaWduZWQgaW50IGRvbWFpbjsKK307CisKKy8qKgorICogc3RydWN0IG1lc29uX3BteF9mdW5jIC0gYSBwaW5tdXggZnVuY3Rpb24KKyAqCisgKiBAbmFtZToJZnVuY3Rpb24gbmFtZQorICogQGdyb3VwczoJZ3JvdXBzIGluIHRoZSBmdW5jdGlvbgorICogQG51bV9ncm91cHM6CW51bWJlciBvZiBncm91cHMgaW4gdGhlIGZ1bmN0aW9uCisgKi8KK3N0cnVjdCBtZXNvbl9wbXhfZnVuYyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICogY29uc3QgKmdyb3VwczsKKwl1bnNpZ25lZCBpbnQgbnVtX2dyb3VwczsKK307CisKKy8qKgorICogc3RydWN0IG1lc29uX3JlZ19kZXNjIC0gYSByZWdpc3RlciBkZXNjcmlwdG9yCisgKgorICogQHJlZzoJcmVnaXN0ZXIgb2Zmc2V0IGluIHRoZSByZWdtYXAKKyAqIEBiaXQ6CWJpdCBpbmRleCBpbiByZWdpc3RlcgorICoKKyAqIFRoZSBzdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gY29udHJvbCBwdWxsLAorICogcHVsbC1lbmFibGUsIGRpcmVjdGlvbiwgZXRjLiBmb3IgYSBzaW5nbGUgcGluCisgKi8KK3N0cnVjdCBtZXNvbl9yZWdfZGVzYyB7CisJdW5zaWduZWQgaW50IHJlZzsKKwl1bnNpZ25lZCBpbnQgYml0OworfTsKKworLyoqCisgKiBlbnVtIG1lc29uX3JlZ190eXBlIC0gdHlwZSBvZiByZWdpc3RlcnMgZW5jb2RlZCBpbiBAbWVzb25fcmVnX2Rlc2MKKyAqLworZW51bSBtZXNvbl9yZWdfdHlwZSB7CisJUkVHX1BVTExFTiwKKwlSRUdfUFVMTCwKKwlSRUdfRElSLAorCVJFR19PVVQsCisJUkVHX0lOLAorCU5VTV9SRUcsCit9OworCisvKioKKyAqIHN0cnVjdCBtZXNvbiBiYW5rCisgKgorICogQG5hbWU6CWJhbmsgbmFtZQorICogQGZpcnN0OglmaXJzdCBwaW4gb2YgdGhlIGJhbmsKKyAqIEBsYXN0OglsYXN0IHBpbiBvZiB0aGUgYmFuaworICogQHJlZ3M6CWFycmF5IG9mIHJlZ2lzdGVyIGRlc2NyaXB0b3JzCisgKgorICogQSBiYW5rIHJlcHJlc2VudHMgYSBzZXQgb2YgcGlucyBjb250cm9sbGVkIGJ5IGEgY29udGlndW91cyBzZXQgb2YKKyAqIGJpdHMgaW4gdGhlIGRvbWFpbiByZWdpc3RlcnMuIFRoZSBzdHJ1Y3R1cmUgc3BlY2lmaWVzIHdoaWNoIGJpdHMgaW4KKyAqIHRoZSByZWdtYXAgY29udHJvbCB0aGUgZGlmZmVyZW50IGZ1bmN0aW9uYWxpdGllcy4gRWFjaCBtZW1iZXIgb2YKKyAqIHRoZSBAcmVncyBhcnJheSByZWZlcnMgdG8gdGhlIGZpcnN0IHBpbiBvZiB0aGUgYmFuay4KKyAqLworc3RydWN0IG1lc29uX2JhbmsgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgaW50IGZpcnN0OworCXVuc2lnbmVkIGludCBsYXN0OworCXN0cnVjdCBtZXNvbl9yZWdfZGVzYyByZWdzW05VTV9SRUddOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbWVzb25fZG9tYWluX2RhdGEgLSBkb21haW4gcGxhdGZvcm0gZGF0YQorICoKKyAqIEBuYW1lOgluYW1lIG9mIHRoZSBkb21haW4KKyAqIEBiYW5rczoJc2V0IG9mIGJhbmtzIGJlbG9uZ2luZyB0byB0aGUgZG9tYWluCisgKiBAbnVtX2JhbmtzOgludW1iZXIgb2YgYmFua3MgaW4gdGhlIGRvbWFpbgorICovCitzdHJ1Y3QgbWVzb25fZG9tYWluX2RhdGEgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IG1lc29uX2JhbmsgKmJhbmtzOworCXVuc2lnbmVkIGludCBudW1fYmFua3M7CisJdW5zaWduZWQgaW50IHBpbl9iYXNlOworCXVuc2lnbmVkIGludCBudW1fcGluczsKK307CisKKy8qKgorICogc3RydWN0IG1lc29uX2RvbWFpbgorICoKKyAqIEByZWdfbXV4OglyZWdpc3RlcnMgZm9yIG11eCBzZXR0aW5ncworICogQHJlZ19wdWxsZW46CXJlZ2lzdGVycyBmb3IgcHVsbC1lbmFibGUgc2V0dGluZ3MKKyAqIEByZWdfcHVsbDoJcmVnaXN0ZXJzIGZvciBwdWxsIHNldHRpbmdzCisgKiBAcmVnX2dwaW86CXJlZ2lzdGVycyBmb3IgZ3BpbyBzZXR0aW5ncworICogQGNoaXA6CWdwaW8gY2hpcCBhc3NvY2lhdGVkIHdpdGggdGhlIGRvbWFpbgorICogQGRhdGE7CXBsYXRmb3JtIGRhdGEgZm9yIHRoZSBkb21haW4KKyAqIEBub2RlOglkZXZpY2UgdHJlZSBub2RlIGZvciB0aGUgZG9tYWluCisgKgorICogQSBkb21haW4gcmVwcmVzZW50cyBhIHNldCBvZiBiYW5rcyBjb250cm9sbGVkIGJ5IHRoZSBzYW1lIHNldCBvZgorICogcmVnaXN0ZXJzLgorICovCitzdHJ1Y3QgbWVzb25fZG9tYWluIHsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdfbXV4OworCXN0cnVjdCByZWdtYXAgKnJlZ19wdWxsZW47CisJc3RydWN0IHJlZ21hcCAqcmVnX3B1bGw7CisJc3RydWN0IHJlZ21hcCAqcmVnX2dwaW87CisKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CisJc3RydWN0IG1lc29uX2RvbWFpbl9kYXRhICpkYXRhOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZTsKK307CisKK3N0cnVjdCBtZXNvbl9waW5jdHJsX2RhdGEgeworCWNvbnN0IHN0cnVjdCBwaW5jdHJsX3Bpbl9kZXNjICpwaW5zOworCXN0cnVjdCBtZXNvbl9wbXhfZ3JvdXAgKmdyb3VwczsKKwlzdHJ1Y3QgbWVzb25fcG14X2Z1bmMgKmZ1bmNzOworCXN0cnVjdCBtZXNvbl9kb21haW5fZGF0YSAqZG9tYWluX2RhdGE7CisJdW5zaWduZWQgaW50IG51bV9waW5zOworCXVuc2lnbmVkIGludCBudW1fZ3JvdXBzOworCXVuc2lnbmVkIGludCBudW1fZnVuY3M7CisJdW5zaWduZWQgaW50IG51bV9kb21haW5zOworfTsKKworc3RydWN0IG1lc29uX3BpbmN0cmwgeworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgcGluY3RybF9kZXYgKnBjZGV2OworCXN0cnVjdCBwaW5jdHJsX2Rlc2MgZGVzYzsKKwlzdHJ1Y3QgbWVzb25fcGluY3RybF9kYXRhICpkYXRhOworCXN0cnVjdCBtZXNvbl9kb21haW4gKmRvbWFpbnM7Cit9OworCisjZGVmaW5lIEdST1VQKGdycCwgciwgYikJCQkJCQlcCisJewkJCQkJCQkJXAorCQkubmFtZSA9ICNncnAsCQkJCQkJXAorCQkucGlucyA9IGdycCAjIyBfcGlucywJCQkJCVwKKwkJLm51bV9waW5zID0gQVJSQVlfU0laRShncnAgIyMgX3BpbnMpLAkJCVwKKwkJLnJlZyA9IHIsCQkJCQkJXAorCQkuYml0ID0gYiwJCQkJCQlcCisJCS5kb21haW4gPSAwLAkJCQkJCVwKKwkgfQorCisjZGVmaW5lIEdQSU9fR1JPVVAoZ3BpbykJCQkJCQlcCisJewkJCQkJCQkJXAorCQkubmFtZSA9ICNncGlvLAkJCQkJCVwKKwkJLnBpbnMgPSAoY29uc3QgdW5zaWduZWQgaW50W10peyBQSU5fICMjIGdwaW99LAkJXAorCQkubnVtX3BpbnMgPSAxLAkJCQkJCVwKKwkJLmlzX2dwaW8gPSB0cnVlLAkJCQkJXAorCSB9CisKKyNkZWZpbmUgR1JPVVBfQU8oZ3JwLCByLCBiKQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5uYW1lID0gI2dycCwJCQkJCQlcCisJCS5waW5zID0gZ3JwICMjIF9waW5zLAkJCQkJXAorCQkubnVtX3BpbnMgPSBBUlJBWV9TSVpFKGdycCAjIyBfcGlucyksCQkJXAorCQkucmVnID0gciwJCQkJCQlcCisJCS5iaXQgPSBiLAkJCQkJCVwKKwkJLmRvbWFpbiA9IDEsCQkJCQkJXAorCSB9CisKKyNkZWZpbmUgRlVOQ1RJT04oZm4pCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5uYW1lID0gI2ZuLAkJCQkJCVwKKwkJLmdyb3VwcyA9IGZuICMjIF9ncm91cHMsCQkJCVwKKwkJLm51bV9ncm91cHMgPSBBUlJBWV9TSVpFKGZuICMjIF9ncm91cHMpLAkJXAorCX0KKworI2RlZmluZSBCQU5LKG4sIGYsIGwsIHBlciwgcGViLCBwciwgcGIsIGRyLCBkYiwgb3IsIG9iLCBpciwgaWIpCQlcCisJewkJCQkJCQkJXAorCQkubmFtZQk9IG4sCQkJCQkJXAorCQkuZmlyc3QJPSBmLAkJCQkJCVwKKwkJLmxhc3QJPSBsLAkJCQkJCVwKKwkJLnJlZ3MJPSB7CQkJCQkJXAorCQkJW1JFR19QVUxMRU5dCT0geyBwZXIsIHBlYiB9LAkJCVwKKwkJCVtSRUdfUFVMTF0JPSB7IHByLCBwYiB9LAkJCVwKKwkJCVtSRUdfRElSXQk9IHsgZHIsIGRiIH0sCQkJXAorCQkJW1JFR19PVVRdCT0geyBvciwgb2IgfSwJCQlcCisJCQlbUkVHX0lOXQk9IHsgaXIsIGliIH0sCQkJXAorCQl9LAkJCQkJCQlcCisJIH0KKworI2RlZmluZSBNRVNPTl9QSU4oeCkgUElOQ1RSTF9QSU4oUElOXyAjIyB4LCAjeCkKKworZXh0ZXJuIHN0cnVjdCBtZXNvbl9waW5jdHJsX2RhdGEgbWVzb244X3BpbmN0cmxfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9tZXNvbi9waW5jdHJsLW1lc29uOC5jIGIvZHJpdmVycy9waW5jdHJsL21lc29uL3BpbmN0cmwtbWVzb244LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhhYTNhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGluY3RybC9tZXNvbi9waW5jdHJsLW1lc29uOC5jCkBAIC0wLDAgKzEsMTA4OSBAQAorLyoKKyAqIFBpbiBjb250cm9sbGVyIGFuZCBHUElPIGRyaXZlciBmb3IgQW1sb2dpYyBNZXNvbjguCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEJlbmlhbWlubyBHYWx2YW5pIDxiLmdhbHZhbmlAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGR0LWJpbmRpbmdzL2dwaW8vbWVzb244LWdwaW8uaD4KKyNpbmNsdWRlICJwaW5jdHJsLW1lc29uLmgiCisKKyNkZWZpbmUgQU9fT0ZGU0VUCTEyMAorCisjZGVmaW5lIFBJTl9HUElPWF8wCUdQSU9YXzAKKyNkZWZpbmUgUElOX0dQSU9YXzEJR1BJT1hfMQorI2RlZmluZSBQSU5fR1BJT1hfMglHUElPWF8yCisjZGVmaW5lIFBJTl9HUElPWF8zCUdQSU9YXzMKKyNkZWZpbmUgUElOX0dQSU9YXzQJR1BJT1hfNAorI2RlZmluZSBQSU5fR1BJT1hfNQlHUElPWF81CisjZGVmaW5lIFBJTl9HUElPWF82CUdQSU9YXzYKKyNkZWZpbmUgUElOX0dQSU9YXzcJR1BJT1hfNworI2RlZmluZSBQSU5fR1BJT1hfOAlHUElPWF84CisjZGVmaW5lIFBJTl9HUElPWF85CUdQSU9YXzkKKyNkZWZpbmUgUElOX0dQSU9YXzEwCUdQSU9YXzEwCisjZGVmaW5lIFBJTl9HUElPWF8xMQlHUElPWF8xMQorI2RlZmluZSBQSU5fR1BJT1hfMTIJR1BJT1hfMTIKKyNkZWZpbmUgUElOX0dQSU9YXzEzCUdQSU9YXzEzCisjZGVmaW5lIFBJTl9HUElPWF8xNAlHUElPWF8xNAorI2RlZmluZSBQSU5fR1BJT1hfMTUJR1BJT1hfMTUKKyNkZWZpbmUgUElOX0dQSU9YXzE2CUdQSU9YXzE2CisjZGVmaW5lIFBJTl9HUElPWF8xNwlHUElPWF8xNworI2RlZmluZSBQSU5fR1BJT1hfMTgJR1BJT1hfMTgKKyNkZWZpbmUgUElOX0dQSU9YXzE5CUdQSU9YXzE5CisjZGVmaW5lIFBJTl9HUElPWF8yMAlHUElPWF8yMAorI2RlZmluZSBQSU5fR1BJT1hfMjEJR1BJT1hfMjEKKyNkZWZpbmUgUElOX0dQSU9ZXzAJR1BJT1lfMAorI2RlZmluZSBQSU5fR1BJT1lfMQlHUElPWV8xCisjZGVmaW5lIFBJTl9HUElPWV8yCUdQSU9ZXzIKKyNkZWZpbmUgUElOX0dQSU9ZXzMJR1BJT1lfMworI2RlZmluZSBQSU5fR1BJT1lfNAlHUElPWV80CisjZGVmaW5lIFBJTl9HUElPWV81CUdQSU9ZXzUKKyNkZWZpbmUgUElOX0dQSU9ZXzYJR1BJT1lfNgorI2RlZmluZSBQSU5fR1BJT1lfNwlHUElPWV83CisjZGVmaW5lIFBJTl9HUElPWV84CUdQSU9ZXzgKKyNkZWZpbmUgUElOX0dQSU9ZXzkJR1BJT1lfOQorI2RlZmluZSBQSU5fR1BJT1lfMTAJR1BJT1lfMTAKKyNkZWZpbmUgUElOX0dQSU9ZXzExCUdQSU9ZXzExCisjZGVmaW5lIFBJTl9HUElPWV8xMglHUElPWV8xMgorI2RlZmluZSBQSU5fR1BJT1lfMTMJR1BJT1lfMTMKKyNkZWZpbmUgUElOX0dQSU9ZXzE0CUdQSU9ZXzE0CisjZGVmaW5lIFBJTl9HUElPWV8xNQlHUElPWV8xNQorI2RlZmluZSBQSU5fR1BJT1lfMTYJR1BJT1lfMTYKKyNkZWZpbmUgUElOX0dQSU9EVl8wCUdQSU9EVl8wCisjZGVmaW5lIFBJTl9HUElPRFZfMQlHUElPRFZfMQorI2RlZmluZSBQSU5fR1BJT0RWXzIJR1BJT0RWXzIKKyNkZWZpbmUgUElOX0dQSU9EVl8zCUdQSU9EVl8zCisjZGVmaW5lIFBJTl9HUElPRFZfNAlHUElPRFZfNAorI2RlZmluZSBQSU5fR1BJT0RWXzUJR1BJT0RWXzUKKyNkZWZpbmUgUElOX0dQSU9EVl82CUdQSU9EVl82CisjZGVmaW5lIFBJTl9HUElPRFZfNwlHUElPRFZfNworI2RlZmluZSBQSU5fR1BJT0RWXzgJR1BJT0RWXzgKKyNkZWZpbmUgUElOX0dQSU9EVl85CUdQSU9EVl85CisjZGVmaW5lIFBJTl9HUElPRFZfMTAJR1BJT0RWXzEwCisjZGVmaW5lIFBJTl9HUElPRFZfMTEJR1BJT0RWXzExCisjZGVmaW5lIFBJTl9HUElPRFZfMTIJR1BJT0RWXzEyCisjZGVmaW5lIFBJTl9HUElPRFZfMTMJR1BJT0RWXzEzCisjZGVmaW5lIFBJTl9HUElPRFZfMTQJR1BJT0RWXzE0CisjZGVmaW5lIFBJTl9HUElPRFZfMTUJR1BJT0RWXzE1CisjZGVmaW5lIFBJTl9HUElPRFZfMTYJR1BJT0RWXzE2CisjZGVmaW5lIFBJTl9HUElPRFZfMTcJR1BJT0RWXzE3CisjZGVmaW5lIFBJTl9HUElPRFZfMTgJR1BJT0RWXzE4CisjZGVmaW5lIFBJTl9HUElPRFZfMTkJR1BJT0RWXzE5CisjZGVmaW5lIFBJTl9HUElPRFZfMjAJR1BJT0RWXzIwCisjZGVmaW5lIFBJTl9HUElPRFZfMjEJR1BJT0RWXzIxCisjZGVmaW5lIFBJTl9HUElPRFZfMjIJR1BJT0RWXzIyCisjZGVmaW5lIFBJTl9HUElPRFZfMjMJR1BJT0RWXzIzCisjZGVmaW5lIFBJTl9HUElPRFZfMjQJR1BJT0RWXzI0CisjZGVmaW5lIFBJTl9HUElPRFZfMjUJR1BJT0RWXzI1CisjZGVmaW5lIFBJTl9HUElPRFZfMjYJR1BJT0RWXzI2CisjZGVmaW5lIFBJTl9HUElPRFZfMjcJR1BJT0RWXzI3CisjZGVmaW5lIFBJTl9HUElPRFZfMjgJR1BJT0RWXzI4CisjZGVmaW5lIFBJTl9HUElPRFZfMjkJR1BJT0RWXzI5CisjZGVmaW5lIFBJTl9HUElPSF8wCUdQSU9IXzAKKyNkZWZpbmUgUElOX0dQSU9IXzEJR1BJT0hfMQorI2RlZmluZSBQSU5fR1BJT0hfMglHUElPSF8yCisjZGVmaW5lIFBJTl9HUElPSF8zCUdQSU9IXzMKKyNkZWZpbmUgUElOX0dQSU9IXzQJR1BJT0hfNAorI2RlZmluZSBQSU5fR1BJT0hfNQlHUElPSF81CisjZGVmaW5lIFBJTl9HUElPSF82CUdQSU9IXzYKKyNkZWZpbmUgUElOX0dQSU9IXzcJR1BJT0hfNworI2RlZmluZSBQSU5fR1BJT0hfOAlHUElPSF84CisjZGVmaW5lIFBJTl9HUElPSF85CUdQSU9IXzkKKyNkZWZpbmUgUElOX0dQSU9aXzAJR1BJT1pfMAorI2RlZmluZSBQSU5fR1BJT1pfMQlHUElPWl8xCisjZGVmaW5lIFBJTl9HUElPWl8yCUdQSU9aXzIKKyNkZWZpbmUgUElOX0dQSU9aXzMJR1BJT1pfMworI2RlZmluZSBQSU5fR1BJT1pfNAlHUElPWl80CisjZGVmaW5lIFBJTl9HUElPWl81CUdQSU9aXzUKKyNkZWZpbmUgUElOX0dQSU9aXzYJR1BJT1pfNgorI2RlZmluZSBQSU5fR1BJT1pfNwlHUElPWl83CisjZGVmaW5lIFBJTl9HUElPWl84CUdQSU9aXzgKKyNkZWZpbmUgUElOX0dQSU9aXzkJR1BJT1pfOQorI2RlZmluZSBQSU5fR1BJT1pfMTAJR1BJT1pfMTAKKyNkZWZpbmUgUElOX0dQSU9aXzExCUdQSU9aXzExCisjZGVmaW5lIFBJTl9HUElPWl8xMglHUElPWl8xMgorI2RlZmluZSBQSU5fR1BJT1pfMTMJR1BJT1pfMTMKKyNkZWZpbmUgUElOX0dQSU9aXzE0CUdQSU9aXzE0CisjZGVmaW5lIFBJTl9DQVJEXzAJQ0FSRF8wCisjZGVmaW5lIFBJTl9DQVJEXzEJQ0FSRF8xCisjZGVmaW5lIFBJTl9DQVJEXzIJQ0FSRF8yCisjZGVmaW5lIFBJTl9DQVJEXzMJQ0FSRF8zCisjZGVmaW5lIFBJTl9DQVJEXzQJQ0FSRF80CisjZGVmaW5lIFBJTl9DQVJEXzUJQ0FSRF81CisjZGVmaW5lIFBJTl9DQVJEXzYJQ0FSRF82CisjZGVmaW5lIFBJTl9CT09UXzAJQk9PVF8wCisjZGVmaW5lIFBJTl9CT09UXzEJQk9PVF8xCisjZGVmaW5lIFBJTl9CT09UXzIJQk9PVF8yCisjZGVmaW5lIFBJTl9CT09UXzMJQk9PVF8zCisjZGVmaW5lIFBJTl9CT09UXzQJQk9PVF80CisjZGVmaW5lIFBJTl9CT09UXzUJQk9PVF81CisjZGVmaW5lIFBJTl9CT09UXzYJQk9PVF82CisjZGVmaW5lIFBJTl9CT09UXzcJQk9PVF83CisjZGVmaW5lIFBJTl9CT09UXzgJQk9PVF84CisjZGVmaW5lIFBJTl9CT09UXzkJQk9PVF85CisjZGVmaW5lIFBJTl9CT09UXzEwCUJPT1RfMTAKKyNkZWZpbmUgUElOX0JPT1RfMTEJQk9PVF8xMQorI2RlZmluZSBQSU5fQk9PVF8xMglCT09UXzEyCisjZGVmaW5lIFBJTl9CT09UXzEzCUJPT1RfMTMKKyNkZWZpbmUgUElOX0JPT1RfMTQJQk9PVF8xNAorI2RlZmluZSBQSU5fQk9PVF8xNQlCT09UXzE1CisjZGVmaW5lIFBJTl9CT09UXzE2CUJPT1RfMTYKKyNkZWZpbmUgUElOX0JPT1RfMTcJQk9PVF8xNworI2RlZmluZSBQSU5fQk9PVF8xOAlCT09UXzE4CisKKyNkZWZpbmUgUElOX0dQSU9BT18wCShBT19PRkZTRVQgKyBHUElPQU9fMCkKKyNkZWZpbmUgUElOX0dQSU9BT18xCShBT19PRkZTRVQgKyBHUElPQU9fMSkKKyNkZWZpbmUgUElOX0dQSU9BT18yCShBT19PRkZTRVQgKyBHUElPQU9fMikKKyNkZWZpbmUgUElOX0dQSU9BT18zCShBT19PRkZTRVQgKyBHUElPQU9fMykKKyNkZWZpbmUgUElOX0dQSU9BT180CShBT19PRkZTRVQgKyBHUElPQU9fNCkKKyNkZWZpbmUgUElOX0dQSU9BT181CShBT19PRkZTRVQgKyBHUElPQU9fNSkKKyNkZWZpbmUgUElOX0dQSU9BT182CShBT19PRkZTRVQgKyBHUElPQU9fNikKKyNkZWZpbmUgUElOX0dQSU9BT183CShBT19PRkZTRVQgKyBHUElPQU9fNykKKyNkZWZpbmUgUElOX0dQSU9BT184CShBT19PRkZTRVQgKyBHUElPQU9fOCkKKyNkZWZpbmUgUElOX0dQSU9BT185CShBT19PRkZTRVQgKyBHUElPQU9fOSkKKyNkZWZpbmUgUElOX0dQSU9BT18xMAkoQU9fT0ZGU0VUICsgR1BJT0FPXzEwKQorI2RlZmluZSBQSU5fR1BJT0FPXzExCShBT19PRkZTRVQgKyBHUElPQU9fMTEpCisjZGVmaW5lIFBJTl9HUElPQU9fMTIJKEFPX09GRlNFVCArIEdQSU9BT18xMikKKyNkZWZpbmUgUElOX0dQSU9BT18xMwkoQU9fT0ZGU0VUICsgR1BJT0FPXzEzKQorI2RlZmluZSBQSU5fR1BJT19CU0RfRU4JKEFPX09GRlNFVCArIEdQSU9fQlNEX0VOKQorI2RlZmluZSBQSU5fR1BJT19URVNUX04JKEFPX09GRlNFVCArIEdQSU9fVEVTVF9OKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBpbmN0cmxfcGluX2Rlc2MgbWVzb244X3BpbnNbXSA9IHsKKwlNRVNPTl9QSU4oR1BJT1hfMCksCisJTUVTT05fUElOKEdQSU9YXzEpLAorCU1FU09OX1BJTihHUElPWF8yKSwKKwlNRVNPTl9QSU4oR1BJT1hfMyksCisJTUVTT05fUElOKEdQSU9YXzQpLAorCU1FU09OX1BJTihHUElPWF81KSwKKwlNRVNPTl9QSU4oR1BJT1hfNiksCisJTUVTT05fUElOKEdQSU9YXzcpLAorCU1FU09OX1BJTihHUElPWF84KSwKKwlNRVNPTl9QSU4oR1BJT1hfOSksCisJTUVTT05fUElOKEdQSU9YXzEwKSwKKwlNRVNPTl9QSU4oR1BJT1hfMTEpLAorCU1FU09OX1BJTihHUElPWF8xMiksCisJTUVTT05fUElOKEdQSU9YXzEzKSwKKwlNRVNPTl9QSU4oR1BJT1hfMTQpLAorCU1FU09OX1BJTihHUElPWF8xNSksCisJTUVTT05fUElOKEdQSU9YXzE2KSwKKwlNRVNPTl9QSU4oR1BJT1hfMTcpLAorCU1FU09OX1BJTihHUElPWF8xOCksCisJTUVTT05fUElOKEdQSU9YXzE5KSwKKwlNRVNPTl9QSU4oR1BJT1hfMjApLAorCU1FU09OX1BJTihHUElPWF8yMSksCisJTUVTT05fUElOKEdQSU9ZXzApLAorCU1FU09OX1BJTihHUElPWV8xKSwKKwlNRVNPTl9QSU4oR1BJT1lfMiksCisJTUVTT05fUElOKEdQSU9ZXzMpLAorCU1FU09OX1BJTihHUElPWV80KSwKKwlNRVNPTl9QSU4oR1BJT1lfNSksCisJTUVTT05fUElOKEdQSU9ZXzYpLAorCU1FU09OX1BJTihHUElPWV83KSwKKwlNRVNPTl9QSU4oR1BJT1lfOCksCisJTUVTT05fUElOKEdQSU9ZXzkpLAorCU1FU09OX1BJTihHUElPWV8xMCksCisJTUVTT05fUElOKEdQSU9ZXzExKSwKKwlNRVNPTl9QSU4oR1BJT1lfMTIpLAorCU1FU09OX1BJTihHUElPWV8xMyksCisJTUVTT05fUElOKEdQSU9ZXzE0KSwKKwlNRVNPTl9QSU4oR1BJT1lfMTUpLAorCU1FU09OX1BJTihHUElPWV8xNiksCisJTUVTT05fUElOKEdQSU9EVl8wKSwKKwlNRVNPTl9QSU4oR1BJT0RWXzEpLAorCU1FU09OX1BJTihHUElPRFZfMiksCisJTUVTT05fUElOKEdQSU9EVl8zKSwKKwlNRVNPTl9QSU4oR1BJT0RWXzQpLAorCU1FU09OX1BJTihHUElPRFZfNSksCisJTUVTT05fUElOKEdQSU9EVl82KSwKKwlNRVNPTl9QSU4oR1BJT0RWXzcpLAorCU1FU09OX1BJTihHUElPRFZfOCksCisJTUVTT05fUElOKEdQSU9EVl85KSwKKwlNRVNPTl9QSU4oR1BJT0RWXzEwKSwKKwlNRVNPTl9QSU4oR1BJT0RWXzExKSwKKwlNRVNPTl9QSU4oR1BJT0RWXzEyKSwKKwlNRVNPTl9QSU4oR1BJT0RWXzEzKSwKKwlNRVNPTl9QSU4oR1BJT0RWXzE0KSwKKwlNRVNPTl9QSU4oR1BJT0RWXzE1KSwKKwlNRVNPTl9QSU4oR1BJT0RWXzE2KSwKKwlNRVNPTl9QSU4oR1BJT0RWXzE3KSwKKwlNRVNPTl9QSU4oR1BJT0RWXzE4KSwKKwlNRVNPTl9QSU4oR1BJT0RWXzE5KSwKKwlNRVNPTl9QSU4oR1BJT0RWXzIwKSwKKwlNRVNPTl9QSU4oR1BJT0RWXzIxKSwKKwlNRVNPTl9QSU4oR1BJT0RWXzIyKSwKKwlNRVNPTl9QSU4oR1BJT0RWXzIzKSwKKwlNRVNPTl9QSU4oR1BJT0RWXzI0KSwKKwlNRVNPTl9QSU4oR1BJT0RWXzI1KSwKKwlNRVNPTl9QSU4oR1BJT0RWXzI2KSwKKwlNRVNPTl9QSU4oR1BJT0RWXzI3KSwKKwlNRVNPTl9QSU4oR1BJT0RWXzI4KSwKKwlNRVNPTl9QSU4oR1BJT0RWXzI5KSwKKwlNRVNPTl9QSU4oR1BJT0hfMCksCisJTUVTT05fUElOKEdQSU9IXzEpLAorCU1FU09OX1BJTihHUElPSF8yKSwKKwlNRVNPTl9QSU4oR1BJT0hfMyksCisJTUVTT05fUElOKEdQSU9IXzQpLAorCU1FU09OX1BJTihHUElPSF81KSwKKwlNRVNPTl9QSU4oR1BJT0hfNiksCisJTUVTT05fUElOKEdQSU9IXzcpLAorCU1FU09OX1BJTihHUElPSF84KSwKKwlNRVNPTl9QSU4oR1BJT0hfOSksCisJTUVTT05fUElOKEdQSU9aXzApLAorCU1FU09OX1BJTihHUElPWl8xKSwKKwlNRVNPTl9QSU4oR1BJT1pfMiksCisJTUVTT05fUElOKEdQSU9aXzMpLAorCU1FU09OX1BJTihHUElPWl80KSwKKwlNRVNPTl9QSU4oR1BJT1pfNSksCisJTUVTT05fUElOKEdQSU9aXzYpLAorCU1FU09OX1BJTihHUElPWl83KSwKKwlNRVNPTl9QSU4oR1BJT1pfOCksCisJTUVTT05fUElOKEdQSU9aXzkpLAorCU1FU09OX1BJTihHUElPWl8xMCksCisJTUVTT05fUElOKEdQSU9aXzExKSwKKwlNRVNPTl9QSU4oR1BJT1pfMTIpLAorCU1FU09OX1BJTihHUElPWl8xMyksCisJTUVTT05fUElOKEdQSU9aXzE0KSwKKwlNRVNPTl9QSU4oQ0FSRF8wKSwKKwlNRVNPTl9QSU4oQ0FSRF8xKSwKKwlNRVNPTl9QSU4oQ0FSRF8yKSwKKwlNRVNPTl9QSU4oQ0FSRF8zKSwKKwlNRVNPTl9QSU4oQ0FSRF80KSwKKwlNRVNPTl9QSU4oQ0FSRF81KSwKKwlNRVNPTl9QSU4oQ0FSRF82KSwKKwlNRVNPTl9QSU4oQk9PVF8wKSwKKwlNRVNPTl9QSU4oQk9PVF8xKSwKKwlNRVNPTl9QSU4oQk9PVF8yKSwKKwlNRVNPTl9QSU4oQk9PVF8zKSwKKwlNRVNPTl9QSU4oQk9PVF80KSwKKwlNRVNPTl9QSU4oQk9PVF81KSwKKwlNRVNPTl9QSU4oQk9PVF82KSwKKwlNRVNPTl9QSU4oQk9PVF83KSwKKwlNRVNPTl9QSU4oQk9PVF84KSwKKwlNRVNPTl9QSU4oQk9PVF85KSwKKwlNRVNPTl9QSU4oQk9PVF8xMCksCisJTUVTT05fUElOKEJPT1RfMTEpLAorCU1FU09OX1BJTihCT09UXzEyKSwKKwlNRVNPTl9QSU4oQk9PVF8xMyksCisJTUVTT05fUElOKEJPT1RfMTQpLAorCU1FU09OX1BJTihCT09UXzE1KSwKKwlNRVNPTl9QSU4oQk9PVF8xNiksCisJTUVTT05fUElOKEJPT1RfMTcpLAorCU1FU09OX1BJTihCT09UXzE4KSwKKwlNRVNPTl9QSU4oR1BJT0FPXzApLAorCU1FU09OX1BJTihHUElPQU9fMSksCisJTUVTT05fUElOKEdQSU9BT18yKSwKKwlNRVNPTl9QSU4oR1BJT0FPXzMpLAorCU1FU09OX1BJTihHUElPQU9fNCksCisJTUVTT05fUElOKEdQSU9BT181KSwKKwlNRVNPTl9QSU4oR1BJT0FPXzYpLAorCU1FU09OX1BJTihHUElPQU9fNyksCisJTUVTT05fUElOKEdQSU9BT184KSwKKwlNRVNPTl9QSU4oR1BJT0FPXzkpLAorCU1FU09OX1BJTihHUElPQU9fMTApLAorCU1FU09OX1BJTihHUElPQU9fMTEpLAorCU1FU09OX1BJTihHUElPQU9fMTIpLAorCU1FU09OX1BJTihHUElPQU9fMTMpLAorCU1FU09OX1BJTihHUElPX0JTRF9FTiksCisJTUVTT05fUElOKEdQSU9fVEVTVF9OKSwKK307CisKKy8qIGJhbmsgWCAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZF9kMF9hX3BpbnNbXSA9IHsgUElOX0dQSU9YXzAgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RfZDFfYV9waW5zW10gPSB7IFBJTl9HUElPWF8xIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkX2QyX2FfcGluc1tdID0geyBQSU5fR1BJT1hfMiB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZF9kM19hX3BpbnNbXSA9IHsgUElOX0dQSU9YXzMgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RfY2xrX2FfcGluc1tdID0geyBQSU5fR1BJT1hfOCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZF9jbWRfYV9waW5zW10gPSB7IFBJTl9HUElPWF85IH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2R4Y19kMF9hX3BpbnNbXSA9IHsgUElOX0dQSU9YXzAgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2R4Y19kMTNfYV9waW5zW10gPSB7IFBJTl9HUElPWF8xLCBQSU5fR1BJT1hfMiwKKwkJCQkJCVBJTl9HUElPWF8zIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkeGNfZDQ3X2FfcGluc1tdID0geyBQSU5fR1BJT1hfNCwgUElOX0dQSU9YXzUsCisJCQkJCQlQSU5fR1BJT1hfNiwgUElOX0dQSU9YXzcgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2R4Y19jbGtfYV9waW5zW10gPSB7IFBJTl9HUElPWF84IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkeGNfY21kX2FfcGluc1tdID0geyBQSU5fR1BJT1hfOSB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBjbV9vdXRfYV9waW5zW10gPSB7IFBJTl9HUElPWF80IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBjbV9pbl9hX3BpbnNbXSA9IHsgUElOX0dQSU9YXzUgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcGNtX2ZzX2FfcGluc1tdID0geyBQSU5fR1BJT1hfNiB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBwY21fY2xrX2FfcGluc1tdID0geyBQSU5fR1BJT1hfNyB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnRfdHhfYTBfcGluc1tdID0geyBQSU5fR1BJT1hfNCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0X3J4X2EwX3BpbnNbXSA9IHsgUElOX0dQSU9YXzUgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydF9jdHNfYTBfcGluc1tdID0geyBQSU5fR1BJT1hfNiB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0X3J0c19hMF9waW5zW10gPSB7IFBJTl9HUElPWF83IH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydF90eF9hMV9waW5zW10gPSB7IFBJTl9HUElPWF8xMiB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0X3J4X2ExX3BpbnNbXSA9IHsgUElOX0dQSU9YXzEzIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnRfY3RzX2ExX3BpbnNbXSA9IHsgUElOX0dQSU9YXzE0IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnRfcnRzX2ExX3BpbnNbXSA9IHsgUElOX0dQSU9YXzE1IH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydF90eF9iMF9waW5zW10gPSB7IFBJTl9HUElPWF8xNiB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0X3J4X2IwX3BpbnNbXSA9IHsgUElOX0dQSU9YXzE3IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnRfY3RzX2IwX3BpbnNbXSA9IHsgUElOX0dQSU9YXzE4IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnRfcnRzX2IwX3BpbnNbXSA9IHsgUElOX0dQSU9YXzE5IH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaXNvNzgxNl9kZXRfcGluc1tdID0geyBQSU5fR1BJT1hfMTYgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaXNvNzgxNl9yZXNldF9waW5zW10gPSB7IFBJTl9HUElPWF8xNyB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpc283ODE2X2Nsa19waW5zW10gPSB7IFBJTl9HUElPWF8xOCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpc283ODE2X2RhdGFfcGluc1tdID0geyBQSU5fR1BJT1hfMTkgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmNfc2RhX2QwX3BpbnNbXSA9IHsgUElOX0dQSU9YXzE2IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyY19zY2tfZDBfcGluc1tdID0geyBQSU5fR1BJT1hfMTcgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB4dGFsXzMya19vdXRfcGluc1tdID0geyBQSU5fR1BJT1hfMTAgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgeHRhbF8yNG1fb3V0X3BpbnNbXSA9IHsgUElOX0dQSU9YXzExIH07CisKKy8qIGJhbmsgWSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0X3R4X2NfcGluc1tdID0geyBQSU5fR1BJT1lfMCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0X3J4X2NfcGluc1tdID0geyBQSU5fR1BJT1lfMSB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0X2N0c19jX3BpbnNbXSA9IHsgUElOX0dQSU9ZXzIgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydF9ydHNfY19waW5zW10gPSB7IFBJTl9HUElPWV8zIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcGNtX291dF9iX3BpbnNbXSA9IHsgUElOX0dQSU9ZXzQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcGNtX2luX2JfcGluc1tdID0geyBQSU5fR1BJT1lfNSB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBwY21fZnNfYl9waW5zW10gPSB7IFBJTl9HUElPWV82IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHBjbV9jbGtfYl9waW5zW10gPSB7IFBJTl9HUElPWV83IH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaTJjX3NkYV9jMF9waW5zW10gPSB7IFBJTl9HUElPWV8wIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyY19zY2tfYzBfcGluc1tdID0geyBQSU5fR1BJT1lfMSB9OworCisvKiBiYW5rIERWICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGR2aW5fcmdiX3BpbnNbXSA9IHsgUElOX0dQSU9EVl8wLCBQSU5fR1BJT0RWXzEsCisJCQkJCSAgICAgIFBJTl9HUElPRFZfMiwgUElOX0dQSU9EVl8zLAorCQkJCQkgICAgICBQSU5fR1BJT0RWXzQsIFBJTl9HUElPRFZfNSwKKwkJCQkJICAgICAgUElOX0dQSU9EVl82LCBQSU5fR1BJT0RWXzcsCisJCQkJCSAgICAgIFBJTl9HUElPRFZfOCwgUElOX0dQSU9EVl85LAorCQkJCQkgICAgICBQSU5fR1BJT0RWXzEwLCBQSU5fR1BJT0RWXzExLAorCQkJCQkgICAgICBQSU5fR1BJT0RWXzEyLCBQSU5fR1BJT0RWXzEzLAorCQkJCQkgICAgICBQSU5fR1BJT0RWXzE0LCBQSU5fR1BJT0RWXzE1LAorCQkJCQkgICAgICBQSU5fR1BJT0RWXzE2LCBQSU5fR1BJT0RWXzE3LAorCQkJCQkgICAgICBQSU5fR1BJT0RWXzE4LCBQSU5fR1BJT0RWXzE5LAorCQkJCQkgICAgICBQSU5fR1BJT0RWXzIwLCBQSU5fR1BJT0RWXzIxLAorCQkJCQkgICAgICBQSU5fR1BJT0RWXzIyLCBQSU5fR1BJT0RWXzIzIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGR2aW5fdnNfcGluc1tdID0geyBQSU5fR1BJT0RWXzI0IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGR2aW5faHNfcGluc1tdID0geyBQSU5fR1BJT0RWXzI1IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGR2aW5fY2xrX3BpbnNbXSA9IHsgUElOX0dQSU9EVl8yNiB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkdmluX2RlX3BpbnNbXSA9IHsgUElOX0dQSU9EVl8yNyB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuY18wX3BpbnNbXSA9IHsgUElOX0dQSU9EVl8wIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuY18xX3BpbnNbXSA9IHsgUElOX0dQSU9EVl8xIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuY18yX3BpbnNbXSA9IHsgUElOX0dQSU9EVl8yIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuY18zX3BpbnNbXSA9IHsgUElOX0dQSU9EVl8zIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuY180X3BpbnNbXSA9IHsgUElOX0dQSU9EVl80IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuY181X3BpbnNbXSA9IHsgUElOX0dQSU9EVl81IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuY182X3BpbnNbXSA9IHsgUElOX0dQSU9EVl82IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuY183X3BpbnNbXSA9IHsgUElOX0dQSU9EVl83IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuY184X3BpbnNbXSA9IHsgUElOX0dQSU9EVl84IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuY185X3BpbnNbXSA9IHsgUElOX0dQSU9EVl85IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuY18xMF9waW5zW10gPSB7IFBJTl9HUElPRFZfMTAgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZW5jXzExX3BpbnNbXSA9IHsgUElOX0dQSU9EVl8xMSB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBlbmNfMTJfcGluc1tdID0geyBQSU5fR1BJT0RWXzEyIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuY18xM19waW5zW10gPSB7IFBJTl9HUElPRFZfMTMgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZW5jXzE0X3BpbnNbXSA9IHsgUElOX0dQSU9EVl8xNCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBlbmNfMTVfcGluc1tdID0geyBQSU5fR1BJT0RWXzE1IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGVuY18xNl9waW5zW10gPSB7IFBJTl9HUElPRFZfMTYgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZW5jXzE3X3BpbnNbXSA9IHsgUElOX0dQSU9EVl8xNyB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnRfdHhfYjFfcGluc1tdID0geyBQSU5fR1BJT0RWXzI0IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnRfcnhfYjFfcGluc1tdID0geyBQSU5fR1BJT0RWXzI1IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnRfY3RzX2IxX3BpbnNbXSA9IHsgUElOX0dQSU9EVl8yNiB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0X3J0c19iMV9waW5zW10gPSB7IFBJTl9HUElPRFZfMjcgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB2Z2FfdnNfcGluc1tdID0geyBQSU5fR1BJT0RWXzI0IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHZnYV9oc19waW5zW10gPSB7IFBJTl9HUElPRFZfMjUgfTsKKworLyogYmFuayBIICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGhkbWlfaHBkX3BpbnNbXSA9IHsgUElOX0dQSU9IXzAgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaGRtaV9zZGFfcGluc1tdID0geyBQSU5fR1BJT0hfMSB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBoZG1pX3NjbF9waW5zW10gPSB7IFBJTl9HUElPSF8yIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGhkbWlfY2VjX3BpbnNbXSA9IHsgUElOX0dQSU9IXzMgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzcGlfc3MwXzBfcGluc1tdID0geyBQSU5fR1BJT0hfMyB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzcGlfbWlzb18wX3BpbnNbXSA9IHsgUElOX0dQSU9IXzQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3BpX21vc2lfMF9waW5zW10gPSB7IFBJTl9HUElPSF81IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNwaV9zY2xrXzBfcGluc1tdID0geyBQSU5fR1BJT0hfNiB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyY19zZGFfZDFfcGluc1tdID0geyBQSU5fR1BJT0hfNyB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmNfc2NrX2QxX3BpbnNbXSA9IHsgUElOX0dQSU9IXzggfTsKKworLyogYmFuayBaICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNwaV9zczBfMV9waW5zW10gPSB7IFBJTl9HUElPWl85IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNwaV9zczFfMV9waW5zW10gPSB7IFBJTl9HUElPWl8xMCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzcGlfc2Nsa18xX3BpbnNbXSA9IHsgUElOX0dQSU9aXzExIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNwaV9tb3NpXzFfcGluc1tdID0geyBQSU5fR1BJT1pfMTIgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3BpX21pc29fMV9waW5zW10gPSB7IFBJTl9HUElPWl8xMyB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzcGlfc3MyXzFfcGluc1tdID0geyBQSU5fR1BJT1pfMTQgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBldGhfdHhfY2xrXzUwbV9waW5zW10gPSB7IFBJTl9HUElPWl80IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGV0aF90eF9lbl9waW5zW10gPSB7IFBJTl9HUElPWl81IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGV0aF90eGQxX3BpbnNbXSA9IHsgUElOX0dQSU9aXzYgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZXRoX3R4ZDBfcGluc1tdID0geyBQSU5fR1BJT1pfNyB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBldGhfcnhfY2xrX2luX3BpbnNbXSA9IHsgUElOX0dQSU9aXzggfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZXRoX3J4X2R2X3BpbnNbXSA9IHsgUElOX0dQSU9aXzkgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZXRoX3J4ZDFfcGluc1tdID0geyBQSU5fR1BJT1pfMTAgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZXRoX3J4ZDBfcGluc1tdID0geyBQSU5fR1BJT1pfMTEgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZXRoX21kaW9fcGluc1tdID0geyBQSU5fR1BJT1pfMTIgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZXRoX21kY19waW5zW10gPSB7IFBJTl9HUElPWl8xMyB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyY19zZGFfYTBfcGluc1tdID0geyBQSU5fR1BJT1pfMCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmNfc2NrX2EwX3BpbnNbXSA9IHsgUElOX0dQSU9aXzEgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmNfc2RhX2JfcGluc1tdID0geyBQSU5fR1BJT1pfMiB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmNfc2NrX2JfcGluc1tdID0geyBQSU5fR1BJT1pfMyB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyY19zZGFfYzFfcGluc1tdID0geyBQSU5fR1BJT1pfNCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmNfc2NrX2MxX3BpbnNbXSA9IHsgUElOX0dQSU9aXzUgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmNfc2RhX2ExX3BpbnNbXSA9IHsgUElOX0dQSU9aXzAgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaTJjX3Nja19hMV9waW5zW10gPSB7IFBJTl9HUElPWl8xIH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaTJjX3NkYV9hMl9waW5zW10gPSB7IFBJTl9HUElPWl8wIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyY19zY2tfYTJfcGluc1tdID0geyBQSU5fR1BJT1pfMSB9OworCisvKiBiYW5rIEJPT1QgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RfZDBfY19waW5zW10gPSB7IFBJTl9CT09UXzAgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RfZDFfY19waW5zW10gPSB7IFBJTl9CT09UXzEgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RfZDJfY19waW5zW10gPSB7IFBJTl9CT09UXzIgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RfZDNfY19waW5zW10gPSB7IFBJTl9CT09UXzMgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RfY21kX2NfcGluc1tdID0geyBQSU5fQk9PVF8xNiB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZF9jbGtfY19waW5zW10gPSB7IFBJTl9CT09UXzE3IH07CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2R4Y19kMF9jX3BpbnNbXSA9IHsgUElOX0JPT1RfMH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkeGNfZDEzX2NfcGluc1tdID0geyBQSU5fQk9PVF8xLCBQSU5fQk9PVF8yLAorCQkJCQkJUElOX0JPT1RfMyB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZHhjX2Q0N19jX3BpbnNbXSA9IHsgUElOX0JPT1RfNCwgUElOX0JPT1RfNSwKKwkJCQkJCVBJTl9CT09UXzYsIFBJTl9CT09UXzcgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2R4Y19jbWRfY19waW5zW10gPSB7IFBJTl9CT09UXzE2IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkeGNfY2xrX2NfcGluc1tdID0geyBQSU5fQk9PVF8xNyB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbmRfaW9fcGluc1tdID0geyBQSU5fQk9PVF8wLCBQSU5fQk9PVF8xLAorCQkJCQkgICAgIFBJTl9CT09UXzIsIFBJTl9CT09UXzMsCisJCQkJCSAgICAgUElOX0JPT1RfNCwgUElOX0JPT1RfNSwKKwkJCQkJICAgICBQSU5fQk9PVF82LCBQSU5fQk9PVF83IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbmRfaW9fY2UwX3BpbnNbXSA9IHsgUElOX0JPT1RfOCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW5kX2lvX2NlMV9waW5zW10gPSB7IFBJTl9CT09UXzkgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmFuZF9pb19yYjBfcGluc1tdID0geyBQSU5fQk9PVF8xMCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW5kX2FsZV9waW5zW10gPSB7IFBJTl9CT09UXzExIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbmRfY2xlX3BpbnNbXSA9IHsgUElOX0JPT1RfMTIgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmFuZF93ZW5fY2xrX3BpbnNbXSA9IHsgUElOX0JPT1RfMTMgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmFuZF9yZW5fY2xrX3BpbnNbXSA9IHsgUElOX0JPT1RfMTQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmFuZF9kcXNfcGluc1tdID0geyBQSU5fQk9PVF8xNSB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuYW5kX2NlMl9waW5zW10gPSB7IFBJTl9CT09UXzE2IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbmRfY2UzX3BpbnNbXSA9IHsgUElOX0JPT1RfMTcgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBub3JfZF9waW5zW10gPSB7IFBJTl9CT09UXzExIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5vcl9xX3BpbnNbXSA9IHsgUElOX0JPT1RfMTIgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbm9yX2NfcGluc1tdID0geyBQSU5fQk9PVF8xMyB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBub3JfY3NfcGluc1tdID0geyBQSU5fQk9PVF8xOCB9OworCisvKiBiYW5rIENBUkQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RfZDFfYl9waW5zW10gPSB7IFBJTl9DQVJEXzAgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RfZDBfYl9waW5zW10gPSB7IFBJTl9DQVJEXzEgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RfY2xrX2JfcGluc1tdID0geyBQSU5fQ0FSRF8yIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkX2NtZF9iX3BpbnNbXSA9IHsgUElOX0NBUkRfMyB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZF9kM19iX3BpbnNbXSA9IHsgUElOX0NBUkRfNCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZF9kMl9iX3BpbnNbXSA9IHsgUElOX0NBUkRfNSB9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkeGNfZDEzX2JfcGluc1tdID0geyBQSU5fQ0FSRF8wLCBQSU5fQ0FSRF80LAorCQkJCQkJUElOX0NBUkRfNSB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZHhjX2QwX2JfcGluc1tdID0geyBQSU5fQ0FSRF8xIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkeGNfY2xrX2JfcGluc1tdID0geyBQSU5fQ0FSRF8yIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkeGNfY21kX2JfcGluc1tdID0geyBQSU5fQ0FSRF8zIH07CisKKy8qIGJhbmsgQU8gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydF90eF9hb19hX3BpbnNbXSA9IHsgUElOX0dQSU9BT18wIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnRfcnhfYW9fYV9waW5zW10gPSB7IFBJTl9HUElPQU9fMSB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0X2N0c19hb19hX3BpbnNbXSA9IHsgUElOX0dQSU9BT18yIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnRfcnRzX2FvX2FfcGluc1tdID0geyBQSU5fR1BJT0FPXzMgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCByZW1vdGVfaW5wdXRfcGluc1tdID0geyBQSU5fR1BJT0FPXzcgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmNfc2xhdmVfc2NrX2FvX3BpbnNbXSA9IHsgUElOX0dQSU9BT180IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyY19zbGF2ZV9zZGFfYW9fcGluc1tdID0geyBQSU5fR1BJT0FPXzUgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0X3R4X2FvX2IwX3BpbnNbXSA9IHsgUElOX0dQSU9BT18wIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnRfcnhfYW9fYjBfcGluc1tdID0geyBQSU5fR1BJT0FPXzEgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0X3R4X2FvX2IxX3BpbnNbXSA9IHsgUElOX0dQSU9BT180IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnRfcnhfYW9fYjFfcGluc1tdID0geyBQSU5fR1BJT0FPXzUgfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmNfbXN0X3Nja19hb19waW5zW10gPSB7IFBJTl9HUElPQU9fNCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmNfbXN0X3NkYV9hb19waW5zW10gPSB7IFBJTl9HUElPQU9fNSB9OworCitzdGF0aWMgc3RydWN0IG1lc29uX3BteF9ncm91cCBtZXNvbjhfZ3JvdXBzW10gPSB7CisJR1BJT19HUk9VUChHUElPWF8wKSwKKwlHUElPX0dST1VQKEdQSU9YXzEpLAorCUdQSU9fR1JPVVAoR1BJT1hfMiksCisJR1BJT19HUk9VUChHUElPWF8zKSwKKwlHUElPX0dST1VQKEdQSU9YXzQpLAorCUdQSU9fR1JPVVAoR1BJT1hfNSksCisJR1BJT19HUk9VUChHUElPWF82KSwKKwlHUElPX0dST1VQKEdQSU9YXzcpLAorCUdQSU9fR1JPVVAoR1BJT1hfOCksCisJR1BJT19HUk9VUChHUElPWF85KSwKKwlHUElPX0dST1VQKEdQSU9YXzEwKSwKKwlHUElPX0dST1VQKEdQSU9YXzExKSwKKwlHUElPX0dST1VQKEdQSU9YXzEyKSwKKwlHUElPX0dST1VQKEdQSU9YXzEzKSwKKwlHUElPX0dST1VQKEdQSU9YXzE0KSwKKwlHUElPX0dST1VQKEdQSU9YXzE1KSwKKwlHUElPX0dST1VQKEdQSU9YXzE2KSwKKwlHUElPX0dST1VQKEdQSU9YXzE3KSwKKwlHUElPX0dST1VQKEdQSU9YXzE4KSwKKwlHUElPX0dST1VQKEdQSU9YXzE5KSwKKwlHUElPX0dST1VQKEdQSU9YXzIwKSwKKwlHUElPX0dST1VQKEdQSU9YXzIxKSwKKwlHUElPX0dST1VQKEdQSU9ZXzApLAorCUdQSU9fR1JPVVAoR1BJT1lfMSksCisJR1BJT19HUk9VUChHUElPWV8yKSwKKwlHUElPX0dST1VQKEdQSU9ZXzMpLAorCUdQSU9fR1JPVVAoR1BJT1lfNCksCisJR1BJT19HUk9VUChHUElPWV81KSwKKwlHUElPX0dST1VQKEdQSU9ZXzYpLAorCUdQSU9fR1JPVVAoR1BJT1lfNyksCisJR1BJT19HUk9VUChHUElPWV84KSwKKwlHUElPX0dST1VQKEdQSU9ZXzkpLAorCUdQSU9fR1JPVVAoR1BJT1lfMTApLAorCUdQSU9fR1JPVVAoR1BJT1lfMTEpLAorCUdQSU9fR1JPVVAoR1BJT1lfMTIpLAorCUdQSU9fR1JPVVAoR1BJT1lfMTMpLAorCUdQSU9fR1JPVVAoR1BJT1lfMTQpLAorCUdQSU9fR1JPVVAoR1BJT1lfMTUpLAorCUdQSU9fR1JPVVAoR1BJT1lfMTYpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzApLAorCUdQSU9fR1JPVVAoR1BJT0RWXzEpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzIpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzMpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzQpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzUpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzYpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzcpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzgpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzkpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzEwKSwKKwlHUElPX0dST1VQKEdQSU9EVl8xMSksCisJR1BJT19HUk9VUChHUElPRFZfMTIpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzEzKSwKKwlHUElPX0dST1VQKEdQSU9EVl8xNCksCisJR1BJT19HUk9VUChHUElPRFZfMTUpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzE2KSwKKwlHUElPX0dST1VQKEdQSU9EVl8xNyksCisJR1BJT19HUk9VUChHUElPRFZfMTgpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzE5KSwKKwlHUElPX0dST1VQKEdQSU9EVl8yMCksCisJR1BJT19HUk9VUChHUElPRFZfMjEpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzIyKSwKKwlHUElPX0dST1VQKEdQSU9EVl8yMyksCisJR1BJT19HUk9VUChHUElPRFZfMjQpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzI1KSwKKwlHUElPX0dST1VQKEdQSU9EVl8yNiksCisJR1BJT19HUk9VUChHUElPRFZfMjcpLAorCUdQSU9fR1JPVVAoR1BJT0RWXzI4KSwKKwlHUElPX0dST1VQKEdQSU9EVl8yOSksCisJR1BJT19HUk9VUChHUElPSF8wKSwKKwlHUElPX0dST1VQKEdQSU9IXzEpLAorCUdQSU9fR1JPVVAoR1BJT0hfMiksCisJR1BJT19HUk9VUChHUElPSF8zKSwKKwlHUElPX0dST1VQKEdQSU9IXzQpLAorCUdQSU9fR1JPVVAoR1BJT0hfNSksCisJR1BJT19HUk9VUChHUElPSF82KSwKKwlHUElPX0dST1VQKEdQSU9IXzcpLAorCUdQSU9fR1JPVVAoR1BJT0hfOCksCisJR1BJT19HUk9VUChHUElPSF85KSwKKwlHUElPX0dST1VQKEdQSU9aXzApLAorCUdQSU9fR1JPVVAoR1BJT1pfMSksCisJR1BJT19HUk9VUChHUElPWl8yKSwKKwlHUElPX0dST1VQKEdQSU9aXzMpLAorCUdQSU9fR1JPVVAoR1BJT1pfNCksCisJR1BJT19HUk9VUChHUElPWl81KSwKKwlHUElPX0dST1VQKEdQSU9aXzYpLAorCUdQSU9fR1JPVVAoR1BJT1pfNyksCisJR1BJT19HUk9VUChHUElPWl84KSwKKwlHUElPX0dST1VQKEdQSU9aXzkpLAorCUdQSU9fR1JPVVAoR1BJT1pfMTApLAorCUdQSU9fR1JPVVAoR1BJT1pfMTEpLAorCUdQSU9fR1JPVVAoR1BJT1pfMTIpLAorCUdQSU9fR1JPVVAoR1BJT1pfMTMpLAorCUdQSU9fR1JPVVAoR1BJT1pfMTQpLAorCUdQSU9fR1JPVVAoR1BJT0FPXzApLAorCUdQSU9fR1JPVVAoR1BJT0FPXzEpLAorCUdQSU9fR1JPVVAoR1BJT0FPXzIpLAorCUdQSU9fR1JPVVAoR1BJT0FPXzMpLAorCUdQSU9fR1JPVVAoR1BJT0FPXzQpLAorCUdQSU9fR1JPVVAoR1BJT0FPXzUpLAorCUdQSU9fR1JPVVAoR1BJT0FPXzYpLAorCUdQSU9fR1JPVVAoR1BJT0FPXzcpLAorCUdQSU9fR1JPVVAoR1BJT0FPXzgpLAorCUdQSU9fR1JPVVAoR1BJT0FPXzkpLAorCUdQSU9fR1JPVVAoR1BJT0FPXzEwKSwKKwlHUElPX0dST1VQKEdQSU9BT18xMSksCisJR1BJT19HUk9VUChHUElPQU9fMTIpLAorCUdQSU9fR1JPVVAoR1BJT0FPXzEzKSwKKwlHUElPX0dST1VQKEdQSU9fQlNEX0VOKSwKKwlHUElPX0dST1VQKEdQSU9fVEVTVF9OKSwKKworCS8qIGJhbmsgWCAqLworCUdST1VQKHNkX2QwX2EsCQk4LAk1KSwKKwlHUk9VUChzZF9kMV9hLAkJOCwJNCksCisJR1JPVVAoc2RfZDJfYSwJCTgsCTMpLAorCUdST1VQKHNkX2QzX2EsCQk4LAkyKSwKKwlHUk9VUChzZF9jbGtfYSwJCTgsCTEpLAorCUdST1VQKHNkX2NtZF9hLAkJOCwJMCksCisKKwlHUk9VUChzZHhjX2QwX2EsCTUsCTE0KSwKKwlHUk9VUChzZHhjX2QxM19hLAk1LAkxMyksCisJR1JPVVAoc2R4Y19kNDdfYSwJNSwJMTIpLAorCUdST1VQKHNkeGNfY2xrX2EsCTUsCTExKSwKKwlHUk9VUChzZHhjX2NtZF9hLAk1LAkxMCksCisKKwlHUk9VUChwY21fb3V0X2EsCTMsCTMwKSwKKwlHUk9VUChwY21faW5fYSwJCTMsCTI5KSwKKwlHUk9VUChwY21fZnNfYSwJCTMsCTI4KSwKKwlHUk9VUChwY21fY2xrX2EsCTMsCTI3KSwKKworCUdST1VQKHVhcnRfdHhfYTAsCTQsCTE3KSwKKwlHUk9VUCh1YXJ0X3J4X2EwLAk0LAkxNiksCisJR1JPVVAodWFydF9jdHNfYTAsCTQsCTE1KSwKKwlHUk9VUCh1YXJ0X3J0c19hMCwJNCwJMTQpLAorCisJR1JPVVAodWFydF90eF9hMSwJNCwJMTMpLAorCUdST1VQKHVhcnRfcnhfYTEsCTQsCTEyKSwKKwlHUk9VUCh1YXJ0X2N0c19hMSwJNCwJMTEpLAorCUdST1VQKHVhcnRfcnRzX2ExLAk0LAkxMCksCisKKwlHUk9VUCh1YXJ0X3R4X2IwLAk0LAk5KSwKKwlHUk9VUCh1YXJ0X3J4X2IwLAk0LAk4KSwKKwlHUk9VUCh1YXJ0X2N0c19iMCwJNCwJNyksCisJR1JPVVAodWFydF9ydHNfYjAsCTQsCTYpLAorCisJR1JPVVAoaXNvNzgxNl9kZXQsCTQsCTIxKSwKKwlHUk9VUChpc283ODE2X3Jlc2V0LAk0LAkyMCksCisJR1JPVVAoaXNvNzgxNl9jbGssCTQsCTE5KSwKKwlHUk9VUChpc283ODE2X2RhdGEsCTQsCTE4KSwKKworCUdST1VQKGkyY19zZGFfZDAsCTQsCTUpLAorCUdST1VQKGkyY19zY2tfZDAsCTQsCTQpLAorCisJR1JPVVAoeHRhbF8zMmtfb3V0LAkzLAkyMiksCisJR1JPVVAoeHRhbF8yNG1fb3V0LAkzLAkyMyksCisKKwkvKiBiYW5rIFkgKi8KKwlHUk9VUCh1YXJ0X3R4X2MsCTEsCTE5KSwKKwlHUk9VUCh1YXJ0X3J4X2MsCTEsCTE4KSwKKwlHUk9VUCh1YXJ0X2N0c19jLAkxLAkxNyksCisJR1JPVVAodWFydF9ydHNfYywJMSwJMTYpLAorCisJR1JPVVAocGNtX291dF9iLAk0LAkyNSksCisJR1JPVVAocGNtX2luX2IsCQk0LAkyNCksCisJR1JPVVAocGNtX2ZzX2IsCQk0LAkyMyksCisJR1JPVVAocGNtX2Nsa19iLAk0LAkyMiksCisKKwlHUk9VUChpMmNfc2RhX2MwLAkxLAkxNSksCisJR1JPVVAoaTJjX3Nja19jMCwJMSwJMTQpLAorCisJLyogYmFuayBEViAqLworCUdST1VQKGR2aW5fcmdiLAkJMCwJNiksCisJR1JPVVAoZHZpbl92cywJCTAsCTkpLAorCUdST1VQKGR2aW5faHMsCQkwLAk4KSwKKwlHUk9VUChkdmluX2NsaywJCTAsCTcpLAorCUdST1VQKGR2aW5fZGUsCQkwLAkxMCksCisKKwlHUk9VUChlbmNfMCwJCTcsCTApLAorCUdST1VQKGVuY18xLAkJNywJMSksCisJR1JPVVAoZW5jXzIsCQk3LAkyKSwKKwlHUk9VUChlbmNfMywJCTcsCTMpLAorCUdST1VQKGVuY180LAkJNywJNCksCisJR1JPVVAoZW5jXzUsCQk3LAk1KSwKKwlHUk9VUChlbmNfNiwJCTcsCTYpLAorCUdST1VQKGVuY183LAkJNywJNyksCisJR1JPVVAoZW5jXzgsCQk3LAk4KSwKKwlHUk9VUChlbmNfOSwJCTcsCTkpLAorCUdST1VQKGVuY18xMCwJCTcsCTEwKSwKKwlHUk9VUChlbmNfMTEsCQk3LAkxMSksCisJR1JPVVAoZW5jXzEyLAkJNywJMTIpLAorCUdST1VQKGVuY18xMywJCTcsCTEzKSwKKwlHUk9VUChlbmNfMTQsCQk3LAkxNCksCisJR1JPVVAoZW5jXzE1LAkJNywJMTUpLAorCUdST1VQKGVuY18xNiwJCTcsCTE2KSwKKwlHUk9VUChlbmNfMTcsCQk3LAkxNyksCisKKwlHUk9VUCh1YXJ0X3R4X2IxLAk2LAkyMyksCisJR1JPVVAodWFydF9yeF9iMSwJNiwJMjIpLAorCUdST1VQKHVhcnRfY3RzX2IxLAk2LAkyMSksCisJR1JPVVAodWFydF9ydHNfYjEsCTYsCTIwKSwKKworCUdST1VQKHZnYV92cywJCTAsCTIxKSwKKwlHUk9VUCh2Z2FfaHMsCQkwLAkyMCksCisKKwkvKiBiYW5rIEggKi8KKwlHUk9VUChoZG1pX2hwZCwJCTEsCTI2KSwKKwlHUk9VUChoZG1pX3NkYSwJCTEsCTI1KSwKKwlHUk9VUChoZG1pX3NjbCwJCTEsCTI0KSwKKwlHUk9VUChoZG1pX2NlYywJCTEsCTIzKSwKKworCUdST1VQKHNwaV9zczBfMCwJOSwJMTMpLAorCUdST1VQKHNwaV9taXNvXzAsCTksCTEyKSwKKwlHUk9VUChzcGlfbW9zaV8wLAk5LAkxMSksCisJR1JPVVAoc3BpX3NjbGtfMCwJOSwJMTApLAorCisJR1JPVVAoaTJjX3NkYV9kMSwJNCwJMyksCisJR1JPVVAoaTJjX3Nja19kMSwJNCwJMiksCisKKwkvKiBiYW5rIFogKi8KKwlHUk9VUChzcGlfc3MwXzEsCTgsCTE2KSwKKwlHUk9VUChzcGlfc3MxXzEsCTgsCTEyKSwKKwlHUk9VUChzcGlfc2Nsa18xLAk4LAkxNSksCisJR1JPVVAoc3BpX21vc2lfMSwJOCwJMTQpLAorCUdST1VQKHNwaV9taXNvXzEsCTgsCTEzKSwKKwlHUk9VUChzcGlfc3MyXzEsCTgsCTE3KSwKKworCUdST1VQKGV0aF90eF9jbGtfNTBtLAk2LAkxNSksCisJR1JPVVAoZXRoX3R4X2VuLAk2LAkxNCksCisJR1JPVVAoZXRoX3R4ZDEsCQk2LAkxMyksCisJR1JPVVAoZXRoX3R4ZDAsCQk2LAkxMiksCisJR1JPVVAoZXRoX3J4X2Nsa19pbiwJNiwJMTApLAorCUdST1VQKGV0aF9yeF9kdiwJNiwJMTEpLAorCUdST1VQKGV0aF9yeGQxLAkJNiwJOCksCisJR1JPVVAoZXRoX3J4ZDAsCQk2LAk3KSwKKwlHUk9VUChldGhfbWRpbywJCTYsCTYpLAorCUdST1VQKGV0aF9tZGMsCQk2LAk1KSwKKworCUdST1VQKGkyY19zZGFfYTAsCTUsCTMxKSwKKwlHUk9VUChpMmNfc2NrX2EwLAk1LAkzMCksCisKKwlHUk9VUChpMmNfc2RhX2IsCTUsCTI3KSwKKwlHUk9VUChpMmNfc2NrX2IsCTUsCTI2KSwKKworCUdST1VQKGkyY19zZGFfYzEsCTUsCTI1KSwKKwlHUk9VUChpMmNfc2NrX2MxLAk1LAkyNCksCisKKwlHUk9VUChpMmNfc2RhX2ExLAk1LAk5KSwKKwlHUk9VUChpMmNfc2NrX2ExLAk1LAk4KSwKKworCUdST1VQKGkyY19zZGFfYTIsCTUsCTcpLAorCUdST1VQKGkyY19zY2tfYTIsCTUsCTYpLAorCisJLyogYmFuayBCT09UICovCisJR1JPVVAoc2RfZDBfYywJCTYsCTI5KSwKKwlHUk9VUChzZF9kMV9jLAkJNiwJMjgpLAorCUdST1VQKHNkX2QyX2MsCQk2LAkyNyksCisJR1JPVVAoc2RfZDNfYywJCTYsCTI2KSwKKwlHUk9VUChzZF9jbWRfYywJCTYsCTI1KSwKKwlHUk9VUChzZF9jbGtfYywJCTYsCTI0KSwKKworCUdST1VQKHNkeGNfZDBfYywJNCwJMzApLAorCUdST1VQKHNkeGNfZDEzX2MsCTQsCTI5KSwKKwlHUk9VUChzZHhjX2Q0N19jLAk0LAkyOCksCisJR1JPVVAoc2R4Y19jbWRfYywJNCwJMjcpLAorCUdST1VQKHNkeGNfY2xrX2MsCTQsCTI2KSwKKworCUdST1VQKG5hbmRfaW8sCQkyLAkyNiksCisJR1JPVVAobmFuZF9pb19jZTAsCTIsCTI1KSwKKwlHUk9VUChuYW5kX2lvX2NlMSwJMiwJMjQpLAorCUdST1VQKG5hbmRfaW9fcmIwLAkyLAkxNyksCisJR1JPVVAobmFuZF9hbGUsCQkyLAkyMSksCisJR1JPVVAobmFuZF9jbGUsCQkyLAkyMCksCisJR1JPVVAobmFuZF93ZW5fY2xrLAkyLAkxOSksCisJR1JPVVAobmFuZF9yZW5fY2xrLAkyLAkxOCksCisJR1JPVVAobmFuZF9kcXMsCQkyLAkyNyksCisJR1JPVVAobmFuZF9jZTIsCQkyLAkyMyksCisJR1JPVVAobmFuZF9jZTMsCQkyLAkyMiksCisKKwlHUk9VUChub3JfZCwJCTUsCTEpLAorCUdST1VQKG5vcl9xLAkJNSwJMyksCisJR1JPVVAobm9yX2MsCQk1LAkyKSwKKwlHUk9VUChub3JfY3MsCQk1LAkwKSwKKworCS8qIGJhbmsgQ0FSRCAqLworCUdST1VQKHNkX2QxX2IsCQkyLAkxNCksCisJR1JPVVAoc2RfZDBfYiwJCTIsCTE1KSwKKwlHUk9VUChzZF9jbGtfYiwJCTIsCTExKSwKKwlHUk9VUChzZF9jbWRfYiwJCTIsCTEwKSwKKwlHUk9VUChzZF9kM19iLAkJMiwJMTIpLAorCUdST1VQKHNkX2QyX2IsCQkyLAkxMyksCisKKwlHUk9VUChzZHhjX2QxM19iLAkyLAk2KSwKKwlHUk9VUChzZHhjX2QwX2IsCTIsCTcpLAorCUdST1VQKHNkeGNfY2xrX2IsCTIsCTUpLAorCUdST1VQKHNkeGNfY21kX2IsCTIsCTQpLAorCisJLyogYmFuayBBTyAqLworCUdST1VQX0FPKHVhcnRfdHhfYW9fYSwJCTAsCTEyKSwKKwlHUk9VUF9BTyh1YXJ0X3J4X2FvX2EsCQkwLAkxMSksCisJR1JPVVBfQU8odWFydF9jdHNfYW9fYSwJCTAsCTEwKSwKKwlHUk9VUF9BTyh1YXJ0X3J0c19hb19hLAkJMCwJOSksCisKKwlHUk9VUF9BTyhyZW1vdGVfaW5wdXQsCQkwLAkwKSwKKworCUdST1VQX0FPKGkyY19zbGF2ZV9zY2tfYW8sCTAsCTIpLAorCUdST1VQX0FPKGkyY19zbGF2ZV9zZGFfYW8sCTAsCTEpLAorCisJR1JPVVBfQU8odWFydF90eF9hb19iMCwJCTAsCTI2KSwKKwlHUk9VUF9BTyh1YXJ0X3J4X2FvX2IwLAkJMCwJMjUpLAorCisJR1JPVVBfQU8odWFydF90eF9hb19iMSwJCTAsCTI0KSwKKwlHUk9VUF9BTyh1YXJ0X3J4X2FvX2IxLAkJMCwJMjMpLAorCisJR1JPVVBfQU8oaTJjX21zdF9zY2tfYW8sCTAsCTYpLAorCUdST1VQX0FPKGkyY19tc3Rfc2RhX2FvLAkwLAk1KSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3Bpb19ncm91cHNbXSA9IHsKKwkiR1BJT1hfMCIsICJHUElPWF8xIiwgIkdQSU9YXzIiLCAiR1BJT1hfMyIsICJHUElPWF80IiwKKwkiR1BJT1hfNSIsICJHUElPWF82IiwgIkdQSU9YXzciLCAiR1BJT1hfOCIsICJHUElPWF85IiwKKwkiR1BJT1hfMTAiLCAiR1BJT1hfMTEiLCAiR1BJT1hfMTIiLCAiR1BJT1hfMTMiLCAiR1BJT1hfMTQiLAorCSJHUElPWF8xNSIsICJHUElPWF8xNiIsICJHUElPWF8xNyIsICJHUElPWF8xOCIsICJHUElPWF8xOSIsCisJIkdQSU9YXzIwIiwgIkdQSU9YXzIxIiwKKworCSJHUElPWV8wIiwgIkdQSU9ZXzEiLCAiR1BJT1lfMiIsICJHUElPWV8zIiwgIkdQSU9ZXzQiLAorCSJHUElPWV81IiwgIkdQSU9ZXzYiLCAiR1BJT1lfNyIsICJHUElPWV84IiwgIkdQSU9ZXzkiLAorCSJHUElPWV8xMCIsICJHUElPWV8xMSIsICJHUElPWV8xMiIsICJHUElPWV8xMyIsICJHUElPWV8xNCIsCisJIkdQSU9ZXzE1IiwgIkdQSU9ZXzE2IiwKKworCSJHUElPRFZfMCIsICJHUElPRFZfMSIsICJHUElPRFZfMiIsICJHUElPRFZfMyIsICJHUElPRFZfNCIsCisJIkdQSU9EVl81IiwgIkdQSU9EVl82IiwgIkdQSU9EVl83IiwgIkdQSU9EVl84IiwgIkdQSU9EVl85IiwKKwkiR1BJT0RWXzEwIiwgIkdQSU9EVl8xMSIsICJHUElPRFZfMTIiLCAiR1BJT0RWXzEzIiwgIkdQSU9EVl8xNCIsCisJIkdQSU9EVl8xNSIsICJHUElPRFZfMTYiLCAiR1BJT0RWXzE3IiwgIkdQSU9EVl8xOCIsICJHUElPRFZfMTkiLAorCSJHUElPRFZfMjAiLCAiR1BJT0RWXzIxIiwgIkdQSU9EVl8yMiIsICJHUElPRFZfMjMiLCAiR1BJT0RWXzI0IiwKKwkiR1BJT0RWXzI1IiwgIkdQSU9EVl8yNiIsICJHUElPRFZfMjciLCAiR1BJT0RWXzI4IiwgIkdQSU9EVl8yOSIsCisKKwkiR1BJT0hfMCIsICJHUElPSF8xIiwgIkdQSU9IXzIiLCAiR1BJT0hfMyIsICJHUElPSF80IiwKKwkiR1BJT0hfNSIsICJHUElPSF82IiwgIkdQSU9IXzciLCAiR1BJT0hfOCIsICJHUElPSF85IiwKKworCSJHUElPWl8wIiwgIkdQSU9aXzEiLCAiR1BJT1pfMiIsICJHUElPWl8zIiwgIkdQSU9aXzQiLAorCSJHUElPWl81IiwgIkdQSU9aXzYiLCAiR1BJT1pfNyIsICJHUElPWl84IiwgIkdQSU9aXzkiLAorCSJHUElPWl8xMCIsICJHUElPWl8xMSIsICJHUElPWl8xMiIsICJHUElPWl8xMyIsICJHUElPWl8xNCIsCisKKwkiQ0FSRF8wIiwgIkNBUkRfMSIsICJDQVJEXzIiLCAiQ0FSRF8zIiwgIkNBUkRfNCIsCisJIkNBUkRfNSIsICJDQVJEXzYiLAorCisJIkJPT1RfMCIsICJCT09UXzEiLCAiQk9PVF8yIiwgIkJPT1RfMyIsICJCT09UXzQiLAorCSJCT09UXzUiLCAiQk9PVF82IiwgIkJPT1RfNyIsICJCT09UXzgiLCAiQk9PVF85IiwKKwkiQk9PVF8xMCIsICJCT09UXzExIiwgIkJPT1RfMTIiLCAiQk9PVF8xMyIsICJCT09UXzE0IiwKKwkiQk9PVF8xNSIsICJCT09UXzE2IiwgIkJPT1RfMTciLCAiQk9PVF8xOCIsCisKKwkiR1BJT0FPXzAiLCAiR1BJT0FPXzEiLCAiR1BJT0FPXzIiLCAiR1BJT0FPXzMiLAorCSJHUElPQU9fNCIsICJHUElPQU9fNSIsICJHUElPQU9fNiIsICJHUElPQU9fNyIsCisJIkdQSU9BT184IiwgIkdQSU9BT185IiwgIkdQSU9BT18xMCIsICJHUElPQU9fMTEiLAorCSJHUElPQU9fMTIiLCAiR1BJT0FPXzEzIiwgIkdQSU9fQlNEX0VOIiwgIkdQSU9fVEVTVF9OIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZF9hX2dyb3Vwc1tdID0geworCSJzZF9kMF9hIiwgInNkX2QxX2EiLCAic2RfZDJfYSIsICJzZF9kM19hIiwgInNkX2Nsa19hIiwgInNkX2NtZF9hIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZHhjX2FfZ3JvdXBzW10gPSB7CisJInNkeGNfZDBfYSIsICJzZHhjX2QxM19hIiwgInNkeGNfZDQ3X2EiLCAic2R4Y19jbGtfYSIsICJzZHhjX2NtZF9hIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY21fYV9ncm91cHNbXSA9IHsKKwkicGNtX291dF9hIiwgInBjbV9pbl9hIiwgInBjbV9mc19hIiwgInBjbV9jbGtfYSIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdWFydF9hX2dyb3Vwc1tdID0geworCSJ1YXJ0X3R4X2EwIiwgInVhcnRfcnhfYTAiLCAidWFydF9jdHNfYTAiLCAidWFydF9ydHNfYTAiLAorCSJ1YXJ0X3R4X2ExIiwgInVhcnRfcnhfYTEiLCAidWFydF9jdHNfYTEiLCAidWFydF9ydHNfYTEiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVhcnRfYl9ncm91cHNbXSA9IHsKKwkidWFydF90eF9iMCIsICJ1YXJ0X3J4X2IwIiwgInVhcnRfY3RzX2IwIiwgInVhcnRfcnRzX2IwIiwKKwkidWFydF90eF9iMSIsICJ1YXJ0X3J4X2IxIiwgInVhcnRfY3RzX2IxIiwgInVhcnRfcnRzX2IxIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpc283ODE2X2dyb3Vwc1tdID0geworCSJpc283ODE2X2RldCIsICJpc283ODE2X3Jlc2V0IiwgImlzbzc4MTZfY2xrIiwgImlzbzc4MTZfZGF0YSIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaTJjX2RfZ3JvdXBzW10gPSB7CisJImkyY19zZGFfZDAiLCAiaTJjX3Nja19kMCIsICJpMmNfc2RhX2QxIiwgImkyY19zY2tfZDEiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHh0YWxfZ3JvdXBzW10gPSB7CisJInh0YWxfMzJrX291dCIsICJ4dGFsXzI0bV9vdXQiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVhcnRfY19ncm91cHNbXSA9IHsKKwkidWFydF90eF9jIiwgInVhcnRfcnhfYyIsICJ1YXJ0X2N0c19jIiwgInVhcnRfcnRzX2MiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBjbV9iX2dyb3Vwc1tdID0geworCSJwY21fb3V0X2IiLCAicGNtX2luX2IiLCAicGNtX2ZzX2IiLCAicGNtX2Nsa19iIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpMmNfY19ncm91cHNbXSA9IHsKKwkiaTJjX3NkYV9jMCIsICJpMmNfc2NrX2MwIiwgImkyY19zZGFfYzEiLCAiaTJjX3Nja19jMSIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZHZpbl9ncm91cHNbXSA9IHsKKwkiZHZpbl9yZ2IiLCAiZHZpbl92cyIsICJkdmluX2hzIiwgImR2aW5fY2xrIiwgImR2aW5fZGUiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVuY19ncm91cHNbXSA9IHsKKwkiZW5jXzAiLCAiZW5jXzEiLCAiZW5jXzIiLCAiZW5jXzMiLCAiZW5jXzQiLCAiZW5jXzUiLAorCSJlbmNfNiIsICJlbmNfNyIsICJlbmNfOCIsICJlbmNfOSIsICJlbmNfMTAiLCAiZW5jXzExIiwKKwkiZW5jXzEyIiwgImVuY18xMyIsICJlbmNfMTQiLCAiZW5jXzE1IiwgImVuY18xNiIsICJlbmNfMTciCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHZnYV9ncm91cHNbXSA9IHsKKwkidmdhX3ZzIiwgInZnYV9ocyIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaGRtaV9ncm91cHNbXSA9IHsKKwkiaGRtaV9ocGQiLCAiaGRtaV9zZGEiLCAiaGRtaV9zY2wiLCAiaGRtaV9jZWMiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNwaV9ncm91cHNbXSA9IHsKKwkic3BpX3NzMF8wIiwgInNwaV9taXNvXzAiLCAic3BpX21vc2lfMCIsICJzcGlfc2Nsa18wIiwKKwkic3BpX3NzMF8xIiwgInNwaV9zczFfMSIsICJzcGlfc2Nsa18xIiwgInNwaV9tb3NpXzEiLAorCSJzcGlfbWlzb18xIiwgInNwaV9zczJfMSIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZXRoZXJuZXRfZ3JvdXBzW10gPSB7CisJImV0aF90eF9jbGtfNTBtIiwgImV0aF90eF9lbiIsICJldGhfdHhkMSIsCisJImV0aF90eGQwIiwgImV0aF9yeF9jbGtfaW4iLCAiZXRoX3J4X2R2IiwKKwkiZXRoX3J4ZDEiLCAiZXRoX3J4ZDAiLCAiZXRoX21kaW8iLCAiZXRoX21kYyIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaTJjX2FfZ3JvdXBzW10gPSB7CisJImkyY19zZGFfYTAiLCAiaTJjX3Nja19hMCIsICJpMmNfc2RhX2ExIiwgImkyY19zY2tfYTEiLAorCSJpMmNfc2RhX2EyIiwgImkyY19zY2tfYTIiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGkyY19iX2dyb3Vwc1tdID0geworCSJpMmNfc2RhX2IiLCAiaTJjX3Nja19iIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZF9jX2dyb3Vwc1tdID0geworCSJzZF9kMF9jIiwgInNkX2QxX2MiLCAic2RfZDJfYyIsICJzZF9kM19jIiwKKwkic2RfY21kX2MiLCAic2RfY2xrX2MiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNkeGNfY19ncm91cHNbXSA9IHsKKwkic2R4Y19kMF9jIiwgInNkeGNfZDEzX2MiLCAic2R4Y19kNDdfYyIsICJzZHhjX2NtZF9jIiwKKwkic2R4Y19jbGtfYyIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbmFuZF9ncm91cHNbXSA9IHsKKwkibmFuZF9pbyIsICJuYW5kX2lvX2NlMCIsICJuYW5kX2lvX2NlMSIsCisJIm5hbmRfaW9fcmIwIiwgIm5hbmRfYWxlIiwgIm5hbmRfY2xlIiwKKwkibmFuZF93ZW5fY2xrIiwgIm5hbmRfcmVuX2NsayIsICJuYW5kX2RxcyIsCisJIm5hbmRfY2UyIiwgIm5hbmRfY2UzIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBub3JfZ3JvdXBzW10gPSB7CisJIm5vcl9kIiwgIm5vcl9xIiwgIm5vcl9jIiwgIm5vcl9jcyIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2RfYl9ncm91cHNbXSA9IHsKKwkic2RfZDFfYiIsICJzZF9kMF9iIiwgInNkX2Nsa19iIiwgInNkX2NtZF9iIiwKKwkic2RfZDNfYiIsICJzZF9kMl9iIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZHhjX2JfZ3JvdXBzW10gPSB7CisJInNkeGNfZDEzX2IiLCAic2R4Y19kMF9iIiwgInNkeGNfY2xrX2IiLCAic2R4Y19jbWRfYiIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdWFydF9hb19ncm91cHNbXSA9IHsKKwkidWFydF90eF9hb19hIiwgInVhcnRfcnhfYW9fYSIsICJ1YXJ0X2N0c19hb19hIiwgInVhcnRfcnRzX2FvX2EiCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHJlbW90ZV9ncm91cHNbXSA9IHsKKwkicmVtb3RlX2lucHV0IgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpMmNfc2xhdmVfYW9fZ3JvdXBzW10gPSB7CisJImkyY19zbGF2ZV9zY2tfYW8iLCAiaTJjX3NsYXZlX3NkYV9hbyIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdWFydF9hb19iX2dyb3Vwc1tdID0geworCSJ1YXJ0X3R4X2FvX2IwIiwgInVhcnRfcnhfYW9fYjAiLCAidWFydF90eF9hb19iMSIsICJ1YXJ0X3J4X2FvX2IxIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpMmNfbXN0X2FvX2dyb3Vwc1tdID0geworCSJpMmNfbXN0X3Nja19hbyIsICJpMmNfbXN0X3NkYV9hbyIKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWVzb25fcG14X2Z1bmMgbWVzb244X2Z1bmN0aW9uc1tdID0geworCUZVTkNUSU9OKGdwaW8pLAorCUZVTkNUSU9OKHNkX2EpLAorCUZVTkNUSU9OKHNkeGNfYSksCisJRlVOQ1RJT04ocGNtX2EpLAorCUZVTkNUSU9OKHVhcnRfYSksCisJRlVOQ1RJT04odWFydF9iKSwKKwlGVU5DVElPTihpc283ODE2KSwKKwlGVU5DVElPTihpMmNfZCksCisJRlVOQ1RJT04oeHRhbCksCisJRlVOQ1RJT04odWFydF9jKSwKKwlGVU5DVElPTihwY21fYiksCisJRlVOQ1RJT04oaTJjX2MpLAorCUZVTkNUSU9OKGR2aW4pLAorCUZVTkNUSU9OKGVuYyksCisJRlVOQ1RJT04odmdhKSwKKwlGVU5DVElPTihoZG1pKSwKKwlGVU5DVElPTihzcGkpLAorCUZVTkNUSU9OKGV0aGVybmV0KSwKKwlGVU5DVElPTihpMmNfYSksCisJRlVOQ1RJT04oaTJjX2IpLAorCUZVTkNUSU9OKHNkX2MpLAorCUZVTkNUSU9OKHNkeGNfYyksCisJRlVOQ1RJT04obmFuZCksCisJRlVOQ1RJT04obm9yKSwKKwlGVU5DVElPTihzZF9iKSwKKwlGVU5DVElPTihzZHhjX2IpLAorCUZVTkNUSU9OKHVhcnRfYW8pLAorCUZVTkNUSU9OKHJlbW90ZSksCisJRlVOQ1RJT04oaTJjX3NsYXZlX2FvKSwKKwlGVU5DVElPTih1YXJ0X2FvX2IpLAorCUZVTkNUSU9OKGkyY19tc3RfYW8pLAorfTsKKworc3RhdGljIHN0cnVjdCBtZXNvbl9iYW5rIG1lc29uOF9iYW5rc1tdID0geworCS8qICAgbmFtZSAgICBmaXJzdCAgICAgICAgIGxhc3QgICAgICAgICAgICAgcHVsbGVuICBwdWxsICAgICBkaXIgICAgIG91dCAgICAgaW4gICovCisJQkFOSygiWCIsICAgIFBJTl9HUElPWF8wLCAgUElOX0dQSU9YXzIxLCAgICA0LCAgMCwgIDQsICAwLCAgMCwgIDAsICAxLCAgMCwgIDIsICAwKSwKKwlCQU5LKCJZIiwgICAgUElOX0dQSU9ZXzAsICBQSU5fR1BJT1lfMTYsICAgIDMsICAwLCAgMywgIDAsICAzLCAgMCwgIDQsICAwLCAgNSwgIDApLAorCUJBTksoIkRWIiwgICBQSU5fR1BJT0RWXzAsIFBJTl9HUElPRFZfMjksICAgMCwgIDAsICAwLCAgMCwgIDcsICAwLCAgOCwgIDAsICA5LCAgMCksCisJQkFOSygiSCIsICAgIFBJTl9HUElPSF8wLCAgUElOX0dQSU9IXzksICAgICAxLCAxNiwgIDEsIDE2LCAgOSwgMTksIDEwLCAxOSwgMTEsIDE5KSwKKwlCQU5LKCJaIiwgICAgUElOX0dQSU9aXzAsICBQSU5fR1BJT1pfMTQsICAgIDEsICAwLCAgMSwgIDAsICAzLCAxNywgIDQsIDE3LCAgNSwgMTcpLAorCUJBTksoIkNBUkQiLCBQSU5fQ0FSRF8wLCAgIFBJTl9DQVJEXzYsICAgICAgMiwgMjAsICAyLCAyMCwgIDAsIDIyLCAgMSwgMjIsICAyLCAyMiksCisJQkFOSygiQk9PVCIsIFBJTl9CT09UXzAsICAgUElOX0JPT1RfMTgsICAgICAyLCAgMCwgIDIsICAwLCAgOSwgIDAsIDEwLCAgMCwgMTEsICAwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWVzb25fYmFuayBtZXNvbjhfYW9fYmFua3NbXSA9IHsKKwkvKiAgIG5hbWUgICAgZmlyc3QgICAgICAgICBsYXN0ICAgICAgICAgICAgIHB1bGxlbiAgcHVsbCAgICAgZGlyICAgICBvdXQgICAgIGluICAqLworCUJBTksoIkFPIiwgICBQSU5fR1BJT0FPXzAsIFBJTl9HUElPX1RFU1RfTiwgMCwgIDAsICAwLCAxNiwgIDAsICAwLCAgMCwgMTYsICAxLCAgMCksCit9OworCitzdGF0aWMgc3RydWN0IG1lc29uX2RvbWFpbl9kYXRhIG1lc29uOF9kb21haW5fZGF0YVtdID0geworCXsKKwkJLm5hbWUJCT0gImJhbmtzIiwKKwkJLmJhbmtzCQk9IG1lc29uOF9iYW5rcywKKwkJLm51bV9iYW5rcwk9IEFSUkFZX1NJWkUobWVzb244X2JhbmtzKSwKKwkJLnBpbl9iYXNlCT0gMCwKKwkJLm51bV9waW5zCT0gMTIwLAorCX0sCisJeworCQkubmFtZQkJPSAiYW8tYmFuayIsCisJCS5iYW5rcwkJPSBtZXNvbjhfYW9fYmFua3MsCisJCS5udW1fYmFua3MJPSBBUlJBWV9TSVpFKG1lc29uOF9hb19iYW5rcyksCisJCS5waW5fYmFzZQk9IDEyMCwKKwkJLm51bV9waW5zCT0gMTYsCisJfSwKK307CisKK3N0cnVjdCBtZXNvbl9waW5jdHJsX2RhdGEgbWVzb244X3BpbmN0cmxfZGF0YSA9IHsKKwkucGlucwkJPSBtZXNvbjhfcGlucywKKwkuZ3JvdXBzCQk9IG1lc29uOF9ncm91cHMsCisJLmZ1bmNzCQk9IG1lc29uOF9mdW5jdGlvbnMsCisJLmRvbWFpbl9kYXRhCT0gbWVzb244X2RvbWFpbl9kYXRhLAorCS5udW1fcGlucwk9IEFSUkFZX1NJWkUobWVzb244X3BpbnMpLAorCS5udW1fZ3JvdXBzCT0gQVJSQVlfU0laRShtZXNvbjhfZ3JvdXBzKSwKKwkubnVtX2Z1bmNzCT0gQVJSQVlfU0laRShtZXNvbjhfZnVuY3Rpb25zKSwKKwkubnVtX2RvbWFpbnMJPSBBUlJBWV9TSVpFKG1lc29uOF9kb21haW5fZGF0YSksCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL212ZWJ1L3BpbmN0cmwtYXJtYWRhLTM4eC5jIGIvZHJpdmVycy9waW5jdHJsL212ZWJ1L3BpbmN0cmwtYXJtYWRhLTM4eC5jCmluZGV4IDIyNGM2Y2YuLjczMDJmNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9tdmVidS9waW5jdHJsLWFybWFkYS0zOHguYworKysgYi9kcml2ZXJzL3BpbmN0cmwvbXZlYnUvcGluY3RybC1hcm1hZGEtMzh4LmMKQEAgLTE0NSwxNCArMTQ1LDE2IEBACiAJCSBNUFBfVkFSX0ZVTkNUSU9OKDIsICJwdHAiLCAgICJldmVudF9yZXEiLCAgVl84OEY2ODEwX1BMVVMpLAogCQkgTVBQX1ZBUl9GVU5DVElPTigzLCAicGNpZTAiLCAiY2xrcmVxIiwgICAgIFZfODhGNjgxMF9QTFVTKSwKIAkJIE1QUF9WQVJfRlVOQ1RJT04oNCwgInNhdGExIiwgInByc250IiwgICAgICBWXzg4RjY4MTBfUExVUyksCi0JCSBNUFBfVkFSX0ZVTkNUSU9OKDUsICJ1YTAiLCAgICJjdHMiLCAgICAgICAgVl84OEY2ODEwX1BMVVMpKSwKKwkJIE1QUF9WQVJfRlVOQ1RJT04oNSwgInVhMCIsICAgImN0cyIsICAgICAgICBWXzg4RjY4MTBfUExVUyksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDYsICJ1YTEiLCAgICJyeGQiLCAgICAgICAgVl84OEY2ODEwX1BMVVMpKSwKIAlNUFBfTU9ERSgyMCwKIAkJIE1QUF9WQVJfRlVOQ1RJT04oMCwgImdwaW8iLCAgTlVMTCwgICAgICAgICBWXzg4RjY4MTBfUExVUyksCiAJCSBNUFBfVkFSX0ZVTkNUSU9OKDEsICJnZTAiLCAgICJ0eGNsayIsICAgICAgVl84OEY2ODEwX1BMVVMpLAogCQkgTVBQX1ZBUl9GVU5DVElPTigyLCAicHRwIiwgICAiY2xrIiwgICAgICAgIFZfODhGNjgxMF9QTFVTKSwKIAkJIE1QUF9WQVJfRlVOQ1RJT04oMywgInBjaWUxIiwgInJzdG91dCIsICAgICBWXzg4RjY4MjBfUExVUyksCiAJCSBNUFBfVkFSX0ZVTkNUSU9OKDQsICJzYXRhMCIsICJwcnNudCIsICAgICAgVl84OEY2ODEwX1BMVVMpLAotCQkgTVBQX1ZBUl9GVU5DVElPTig1LCAidWEwIiwgICAicnRzIiwgICAgICAgIFZfODhGNjgxMF9QTFVTKSksCisJCSBNUFBfVkFSX0ZVTkNUSU9OKDUsICJ1YTAiLCAgICJydHMiLCAgICAgICAgVl84OEY2ODEwX1BMVVMpLAorCQkgTVBQX1ZBUl9GVU5DVElPTig2LCAidWExIiwgICAidHhkIiwgICAgICAgIFZfODhGNjgxMF9QTFVTKSksCiAJTVBQX01PREUoMjEsCiAJCSBNUFBfVkFSX0ZVTkNUSU9OKDAsICJncGlvIiwgIE5VTEwsICAgICAgICAgVl84OEY2ODEwX1BMVVMpLAogCQkgTVBQX1ZBUl9GVU5DVElPTigxLCAic3BpMCIsICAiY3MxIiwgICAgICAgIFZfODhGNjgxMF9QTFVTKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9tdmVidS9waW5jdHJsLWRvdmUuYyBiL2RyaXZlcnMvcGluY3RybC9tdmVidS9waW5jdHJsLWRvdmUuYwppbmRleCA4OWE1MmUxNS4uOTViZmQwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL212ZWJ1L3BpbmN0cmwtZG92ZS5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9tdmVidS9waW5jdHJsLWRvdmUuYwpAQCAtNzUxLDEyICs3NTEsMTIgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgKmNsazsKIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZG92ZV9waW5jdHJsX29mX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBkb3ZlX3BpbmN0cmxfb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gIm1hcnZlbGwsZG92ZS1waW5jdHJsIiwgLmRhdGEgPSAmZG92ZV9waW5jdHJsX2luZm8gfSwKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBnY19yZWdtYXBfY29uZmlnID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGdjX3JlZ21hcF9jb25maWcgPSB7CiAJLnJlZ19iaXRzID0gMzIsCiAJLnZhbF9iaXRzID0gMzIsCiAJLnJlZ19zdHJpZGUgPSA0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL25vbWFkaWsvcGluY3RybC1hYng1MDAuYyBiL2RyaXZlcnMvcGluY3RybC9ub21hZGlrL3BpbmN0cmwtYWJ4NTAwLmMKaW5kZXggM2Q2ZDk3Mi4uMTgwNmIyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL25vbWFkaWsvcGluY3RybC1hYng1MDAuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvbm9tYWRpay9waW5jdHJsLWFieDUwMC5jCkBAIC05MTQsNyArOTE0LDcgQEAKIAkJfQogCX0KIAotCXJldCA9IHBpbmNvbmZfZ2VuZXJpY19wYXJzZV9kdF9jb25maWcobnAsICZjb25maWdzLCAmbmNvbmZpZ3MpOworCXJldCA9IHBpbmNvbmZfZ2VuZXJpY19wYXJzZV9kdF9jb25maWcobnAsIHBjdGxkZXYsICZjb25maWdzLCAmbmNvbmZpZ3MpOwogCWlmIChuY29uZmlncykgewogCQljb25zdCBjaGFyICpncGlvX25hbWU7CiAJCWNvbnN0IGNoYXIgKnBpbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jb25mLWdlbmVyaWMuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jb25mLWdlbmVyaWMuYwppbmRleCBmNzhiNDE2Li40ZGI5MmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY29uZi1nZW5lcmljLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmNvbmYtZ2VuZXJpYy5jCkBAIC0yNywxNyArMjcsNiBAQAogI2luY2x1ZGUgInBpbmN0cmwtdXRpbHMuaCIKIAogI2lmZGVmIENPTkZJR19ERUJVR19GUwotCi1zdHJ1Y3QgcGluX2NvbmZpZ19pdGVtIHsKLQljb25zdCBlbnVtIHBpbl9jb25maWdfcGFyYW0gcGFyYW07Ci0JY29uc3QgY2hhciAqIGNvbnN0IGRpc3BsYXk7Ci0JY29uc3QgY2hhciAqIGNvbnN0IGZvcm1hdDsKLQlib29sIGhhc19hcmc7Ci19OwotCi0jZGVmaW5lIFBDT05GRFVNUChhLCBiLCBjLCBkKSB7IC5wYXJhbSA9IGEsIC5kaXNwbGF5ID0gYiwgLmZvcm1hdCA9IGMsIFwKLQkJCQkuaGFzX2FyZyA9IGQgfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBpbl9jb25maWdfaXRlbSBjb25mX2l0ZW1zW10gPSB7CiAJUENPTkZEVU1QKFBJTl9DT05GSUdfQklBU19ESVNBQkxFLCAiaW5wdXQgYmlhcyBkaXNhYmxlZCIsIE5VTEwsIGZhbHNlKSwKIAlQQ09ORkRVTVAoUElOX0NPTkZJR19CSUFTX0hJR0hfSU1QRURBTkNFLCAiaW5wdXQgYmlhcyBoaWdoIGltcGVkYW5jZSIsIE5VTEwsIGZhbHNlKSwKQEAgLTYwLDIyICs0OSwyNSBAQAogCVBDT05GRFVNUChQSU5fQ09ORklHX09VVFBVVCwgInBpbiBvdXRwdXQiLCAibGV2ZWwiLCB0cnVlKSwKIH07CiAKLXZvaWQgcGluY29uZl9nZW5lcmljX2R1bXBfcGluKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKLQkJCSAgICAgIHN0cnVjdCBzZXFfZmlsZSAqcywgdW5zaWduZWQgcGluKQorc3RhdGljIHZvaWQgcGluY29uZl9nZW5lcmljX2R1bXBfb25lKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKKwkJCQkgICAgIHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3QgY2hhciAqZ25hbWUsCisJCQkJICAgICB1bnNpZ25lZCBwaW4sCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgcGluX2NvbmZpZ19pdGVtICppdGVtcywKKwkJCQkgICAgIGludCBuaXRlbXMpCiB7Ci0JY29uc3Qgc3RydWN0IHBpbmNvbmZfb3BzICpvcHMgPSBwY3RsZGV2LT5kZXNjLT5jb25mb3BzOwogCWludCBpOwogCi0JaWYgKCFvcHMtPmlzX2dlbmVyaWMpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbmZfaXRlbXMpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbml0ZW1zOyBpKyspIHsKIAkJdW5zaWduZWQgbG9uZyBjb25maWc7CiAJCWludCByZXQ7CiAKIAkJLyogV2Ugd2FudCB0byBjaGVjayBvdXQgdGhpcyBwYXJhbWV0ZXIgKi8KLQkJY29uZmlnID0gcGluY29uZl90b19jb25maWdfcGFja2VkKGNvbmZfaXRlbXNbaV0ucGFyYW0sIDApOwotCQlyZXQgPSBwaW5fY29uZmlnX2dldF9mb3JfcGluKHBjdGxkZXYsIHBpbiwgJmNvbmZpZyk7CisJCWNvbmZpZyA9IHBpbmNvbmZfdG9fY29uZmlnX3BhY2tlZChpdGVtc1tpXS5wYXJhbSwgMCk7CisJCWlmIChnbmFtZSkKKwkJCXJldCA9IHBpbl9jb25maWdfZ3JvdXBfZ2V0KGRldl9uYW1lKHBjdGxkZXYtPmRldiksCisJCQkJCQkgICBnbmFtZSwgJmNvbmZpZyk7CisJCWVsc2UKKwkJCXJldCA9IHBpbl9jb25maWdfZ2V0X2Zvcl9waW4ocGN0bGRldiwgcGluLCAmY29uZmlnKTsKIAkJLyogVGhlc2UgYXJlIGxlZ2FsIGVycm9ycyAqLwogCQlpZiAocmV0ID09IC1FSU5WQUwgfHwgcmV0ID09IC1FTk9UU1VQUCkKIAkJCWNvbnRpbnVlOwpAQCAtODUsNTYgKzc3LDQ3IEBACiAJCX0KIAkJLyogU3BhY2UgYmV0d2VlbiBtdWx0aXBsZSBjb25maWdzICovCiAJCXNlcV9wdXRzKHMsICIgIik7Ci0JCXNlcV9wdXRzKHMsIGNvbmZfaXRlbXNbaV0uZGlzcGxheSk7CisJCXNlcV9wdXRzKHMsIGl0ZW1zW2ldLmRpc3BsYXkpOwogCQkvKiBQcmludCB1bml0IGlmIGF2YWlsYWJsZSAqLwotCQlpZiAoY29uZl9pdGVtc1tpXS5oYXNfYXJnKSB7CisJCWlmIChpdGVtc1tpXS5oYXNfYXJnKSB7CiAJCQlzZXFfcHJpbnRmKHMsICIgKCV1IiwKIAkJCQkgICBwaW5jb25mX3RvX2NvbmZpZ19hcmd1bWVudChjb25maWcpKTsKLQkJCWlmIChjb25mX2l0ZW1zW2ldLmZvcm1hdCkKLQkJCQlzZXFfcHJpbnRmKHMsICIgJXMpIiwgY29uZl9pdGVtc1tpXS5mb3JtYXQpOworCQkJaWYgKGl0ZW1zW2ldLmZvcm1hdCkKKwkJCQlzZXFfcHJpbnRmKHMsICIgJXMpIiwgaXRlbXNbaV0uZm9ybWF0KTsKIAkJCWVsc2UKIAkJCQlzZXFfcHV0cyhzLCAiKSIpOwogCQl9CiAJfQogfQogCi12b2lkIHBpbmNvbmZfZ2VuZXJpY19kdW1wX2dyb3VwKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKLQkJCSAgICAgIHN0cnVjdCBzZXFfZmlsZSAqcywgY29uc3QgY2hhciAqZ25hbWUpCisvKioKKyAqIHBpbmNvbmZfZ2VuZXJpY19kdW1wX3BpbnMgLSBQcmludCBpbmZvcm1hdGlvbiBhYm91dCBwaW4gb3IgZ3JvdXAgb2YgcGlucworICogQHBjdGxkZXY6CVBpbmNvbnRyb2wgZGV2aWNlCisgKiBAczoJCUZpbGUgdG8gcHJpbnQgdG8KKyAqIEBnbmFtZToJR3JvdXAgbmFtZSBzcGVjaWZ5aW5nIHBpbnMKKyAqIEBwaW46CVBpbiBudW1iZXIgc3BlY3lmeWluZyBwaW4KKyAqCisgKiBQcmludCB0aGUgcGluY29uZiBjb25maWd1cmF0aW9uIGZvciB0aGUgcmVxdWVzdGVkIHBpbihzKSB0byBAcy4gUGlucyBjYW4gYmUKKyAqIHNwZWNpZmllZCBlaXRoZXIgYnkgcGluIHVzaW5nIEBwaW4gb3IgYnkgZ3JvdXAgdXNpbmcgQGduYW1lLiBPbmx5IG9uZSBuZWVkcworICogdG8gYmUgc3BlY2lmaWVkIHRoZSBvdGhlciBjYW4gYmUgTlVMTC8wLgorICovCit2b2lkIHBpbmNvbmZfZ2VuZXJpY19kdW1wX3BpbnMoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJCQkgICAgICAgY29uc3QgY2hhciAqZ25hbWUsIHVuc2lnbmVkIHBpbikKIHsKIAljb25zdCBzdHJ1Y3QgcGluY29uZl9vcHMgKm9wcyA9IHBjdGxkZXYtPmRlc2MtPmNvbmZvcHM7Ci0JaW50IGk7CiAKIAlpZiAoIW9wcy0+aXNfZ2VuZXJpYykKIAkJcmV0dXJuOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29uZl9pdGVtcyk7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGNvbmZpZzsKLQkJaW50IHJldDsKLQotCQkvKiBXZSB3YW50IHRvIGNoZWNrIG91dCB0aGlzIHBhcmFtZXRlciAqLwotCQljb25maWcgPSBwaW5jb25mX3RvX2NvbmZpZ19wYWNrZWQoY29uZl9pdGVtc1tpXS5wYXJhbSwgMCk7Ci0JCXJldCA9IHBpbl9jb25maWdfZ3JvdXBfZ2V0KGRldl9uYW1lKHBjdGxkZXYtPmRldiksIGduYW1lLAotCQkJCQkgICAmY29uZmlnKTsKLQkJLyogVGhlc2UgYXJlIGxlZ2FsIGVycm9ycyAqLwotCQlpZiAocmV0ID09IC1FSU5WQUwgfHwgcmV0ID09IC1FTk9UU1VQUCkKLQkJCWNvbnRpbnVlOwotCQlpZiAocmV0KSB7Ci0JCQlzZXFfcHJpbnRmKHMsICJFUlJPUiBSRUFESU5HIENPTkZJRyBTRVRUSU5HICVkICIsIGkpOwotCQkJY29udGludWU7Ci0JCX0KLQkJLyogU3BhY2UgYmV0d2VlbiBtdWx0aXBsZSBjb25maWdzICovCi0JCXNlcV9wdXRzKHMsICIgIik7Ci0JCXNlcV9wdXRzKHMsIGNvbmZfaXRlbXNbaV0uZGlzcGxheSk7Ci0JCS8qIFByaW50IHVuaXQgaWYgYXZhaWxhYmxlICovCi0JCWlmIChjb25mX2l0ZW1zW2ldLmhhc19hcmcpIHsKLQkJCXNlcV9wcmludGYocywgIiAoJXUiLAotCQkJCSAgIHBpbmNvbmZfdG9fY29uZmlnX2FyZ3VtZW50KGNvbmZpZykpOwotCQkJaWYgKGNvbmZfaXRlbXNbaV0uZm9ybWF0KQotCQkJCXNlcV9wcmludGYocywgIiAlcykiLCBjb25mX2l0ZW1zW2ldLmZvcm1hdCk7Ci0JCQllbHNlCi0JCQkJc2VxX3B1dHMocywgIikiKTsKLQkJfQotCX0KKwkvKiBnZW5lcmljIHBhcmFtZXRlcnMgKi8KKwlwaW5jb25mX2dlbmVyaWNfZHVtcF9vbmUocGN0bGRldiwgcywgZ25hbWUsIHBpbiwgY29uZl9pdGVtcywKKwkJCQkgQVJSQVlfU0laRShjb25mX2l0ZW1zKSk7CisJLyogZHJpdmVyLXNwZWNpZmljIHBhcmFtZXRlcnMgKi8KKwlpZiAocGN0bGRldi0+ZGVzYy0+bnVtX2N1c3RvbV9wYXJhbXMgJiYKKwkgICAgcGN0bGRldi0+ZGVzYy0+Y3VzdG9tX2NvbmZfaXRlbXMpCisJCXBpbmNvbmZfZ2VuZXJpY19kdW1wX29uZShwY3RsZGV2LCBzLCBnbmFtZSwgcGluLAorCQkJCQkgcGN0bGRldi0+ZGVzYy0+Y3VzdG9tX2NvbmZfaXRlbXMsCisJCQkJCSBwY3RsZGV2LT5kZXNjLT5udW1fY3VzdG9tX3BhcmFtcyk7CiB9CiAKIHZvaWQgcGluY29uZl9nZW5lcmljX2R1bXBfY29uZmlnKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKQEAgLTE0OCwxOCArMTMxLDI1IEBACiAJCXNlcV9wcmludGYocywgIiVzOiAweCV4IiwgY29uZl9pdGVtc1tpXS5kaXNwbGF5LAogCQkJICAgcGluY29uZl90b19jb25maWdfYXJndW1lbnQoY29uZmlnKSk7CiAJfQorCisJaWYgKCFwY3RsZGV2LT5kZXNjLT5udW1fY3VzdG9tX3BhcmFtcyB8fAorCSAgICAhcGN0bGRldi0+ZGVzYy0+Y3VzdG9tX2NvbmZfaXRlbXMpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBwY3RsZGV2LT5kZXNjLT5udW1fY3VzdG9tX3BhcmFtczsgaSsrKSB7CisJCWlmIChwaW5jb25mX3RvX2NvbmZpZ19wYXJhbShjb25maWcpICE9CisJCSAgICBwY3RsZGV2LT5kZXNjLT5jdXN0b21fY29uZl9pdGVtc1tpXS5wYXJhbSkKKwkJCWNvbnRpbnVlOworCQlzZXFfcHJpbnRmKHMsICIlczogMHgleCIsCisJCQkJcGN0bGRldi0+ZGVzYy0+Y3VzdG9tX2NvbmZfaXRlbXNbaV0uZGlzcGxheSwKKwkJCQlwaW5jb25mX3RvX2NvbmZpZ19hcmd1bWVudChjb25maWcpKTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwaW5jb25mX2dlbmVyaWNfZHVtcF9jb25maWcpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfT0YKLXN0cnVjdCBwaW5jb25mX2dlbmVyaWNfZHRfcGFyYW1zIHsKLQljb25zdCBjaGFyICogY29uc3QgcHJvcGVydHk7Ci0JZW51bSBwaW5fY29uZmlnX3BhcmFtIHBhcmFtOwotCXUzMiBkZWZhdWx0X3ZhbHVlOwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5jb25mX2dlbmVyaWNfZHRfcGFyYW1zIGR0X3BhcmFtc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5jb25mX2dlbmVyaWNfcGFyYW1zIGR0X3BhcmFtc1tdID0gewogCXsgImJpYXMtZGlzYWJsZSIsIFBJTl9DT05GSUdfQklBU19ESVNBQkxFLCAwIH0sCiAJeyAiYmlhcy1oaWdoLWltcGVkYW5jZSIsIFBJTl9DT05GSUdfQklBU19ISUdIX0lNUEVEQU5DRSwgMCB9LAogCXsgImJpYXMtYnVzLWhvbGQiLCBQSU5fQ09ORklHX0JJQVNfQlVTX0hPTEQsIDAgfSwKQEAgLTE4NCwzMiArMTc0LDMwIEBACiB9OwogCiAvKioKLSAqIHBpbmNvbmZfZ2VuZXJpY19wYXJzZV9kdF9jb25maWcoKQotICogcGFyc2UgdGhlIGNvbmZpZyBwcm9wZXJ0aWVzIGludG8gZ2VuZXJpYyBwaW5jb25maWcgdmFsdWVzLgotICogQG5wOiBub2RlIGNvbnRhaW5pbmcgdGhlIHBpbmNvbmZpZyBwcm9wZXJ0aWVzCi0gKiBAY29uZmlnczogYXJyYXkgd2l0aCBuY29uZmlncyBlbnRyaWVzIGNvbnRhaW5pbmcgdGhlIGdlbmVyaWMgcGluY29uZiB2YWx1ZXMKLSAqIEBuY29uZmlnczogdW1iZXIgb2YgY29uZmlndXJhdGlvbnMKKyAqIHBhcnNlX2R0X2NmZygpIC0gUGFyc2UgRFQgcGluY29uZiBwYXJhbWV0ZXJzCisgKiBAbnA6CURUIG5vZGUKKyAqIEBwYXJhbXM6CUFycmF5IG9mIGRlc2NyaWJpbmcgZ2VuZXJpYyBwYXJhbWV0ZXJzCisgKiBAY291bnQ6CU51bWJlciBvZiBlbnRyaWVzIGluIEBwYXJhbXMKKyAqIEBjZmc6CUFycmF5IG9mIHBhcnNlZCBjb25maWcgb3B0aW9ucworICogQG5jZmc6CU51bWJlciBvZiBlbnRyaWVzIGluIEBjZmcKKyAqCisgKiBQYXJzZSB0aGUgY29uZmlnIG9wdGlvbnMgZGVzY3JpYmVkIGluIEBwYXJhbXMgZnJvbSBAbnAgYW5kIHB1dHMgdGhlIHJlc3VsdAorICogaW4gQGNmZy4gQGNmZyBkb2VzIG5vdCBuZWVkIHRvIGJlIGVtcHR5LCBlbnRyaWVzIGFyZSBhZGRlZCBiZWdnaW5pbmcgYXQKKyAqIEBuY2ZnLiBAbmNmZyBpcyB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIG51bWJlciBvZiBlbnRyaWVzIGFmdGVyIHBhcnNpbmcuIEBjZmcKKyAqIG5lZWRzIHRvIGhhdmUgZW5vdWdoIG1lbW9yeSBhbGxvY2F0ZWQgdG8gaG9sZCBhbGwgcG9zc2libGUgZW50cmllcy4KICAqLwotaW50IHBpbmNvbmZfZ2VuZXJpY19wYXJzZV9kdF9jb25maWcoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyAqKmNvbmZpZ3MsCi0JCQkJICAgIHVuc2lnbmVkIGludCAqbmNvbmZpZ3MpCitzdGF0aWMgdm9pZCBwYXJzZV9kdF9jZmcoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCSBjb25zdCBzdHJ1Y3QgcGluY29uZl9nZW5lcmljX3BhcmFtcyAqcGFyYW1zLAorCQkJIHVuc2lnbmVkIGludCBjb3VudCwgdW5zaWduZWQgbG9uZyAqY2ZnLAorCQkJIHVuc2lnbmVkIGludCAqbmNmZykKIHsKLQl1bnNpZ25lZCBsb25nICpjZmc7Ci0JdW5zaWduZWQgaW50IG5jZmcgPSAwOwotCWludCByZXQ7CiAJaW50IGk7Ci0JdTMyIHZhbDsKIAotCWlmICghbnApCi0JCXJldHVybiAtRUlOVkFMOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXUzMiB2YWw7CisJCWludCByZXQ7CisJCWNvbnN0IHN0cnVjdCBwaW5jb25mX2dlbmVyaWNfcGFyYW1zICpwYXIgPSAmcGFyYW1zW2ldOwogCi0JLyogYWxsb2NhdGUgYSB0ZW1wb3JhcnkgYXJyYXkgYmlnIGVub3VnaCB0byBob2xkIG9uZSBvZiBlYWNoIG9wdGlvbiAqLwotCWNmZyA9IGt6YWxsb2Moc2l6ZW9mKCpjZmcpICogQVJSQVlfU0laRShkdF9wYXJhbXMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNmZykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkdF9wYXJhbXMpOyBpKyspIHsKLQkJY29uc3Qgc3RydWN0IHBpbmNvbmZfZ2VuZXJpY19kdF9wYXJhbXMgKnBhciA9ICZkdF9wYXJhbXNbaV07CiAJCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCBwYXItPnByb3BlcnR5LCAmdmFsKTsKIAogCQkvKiBwcm9wZXJ0eSBub3QgZm91bmQgKi8KQEAgLTIyMSw5ICsyMDksNDMgQEAKIAkJCXZhbCA9IHBhci0+ZGVmYXVsdF92YWx1ZTsKIAogCQlwcl9kZWJ1ZygiZm91bmQgJXMgd2l0aCB2YWx1ZSAldVxuIiwgcGFyLT5wcm9wZXJ0eSwgdmFsKTsKLQkJY2ZnW25jZmddID0gcGluY29uZl90b19jb25maWdfcGFja2VkKHBhci0+cGFyYW0sIHZhbCk7Ci0JCW5jZmcrKzsKKwkJY2ZnWypuY2ZnXSA9IHBpbmNvbmZfdG9fY29uZmlnX3BhY2tlZChwYXItPnBhcmFtLCB2YWwpOworCQkoKm5jZmcpKys7CiAJfQorfQorCisvKioKKyAqIHBpbmNvbmZfZ2VuZXJpY19wYXJzZV9kdF9jb25maWcoKQorICogcGFyc2UgdGhlIGNvbmZpZyBwcm9wZXJ0aWVzIGludG8gZ2VuZXJpYyBwaW5jb25maWcgdmFsdWVzLgorICogQG5wOiBub2RlIGNvbnRhaW5pbmcgdGhlIHBpbmNvbmZpZyBwcm9wZXJ0aWVzCisgKiBAY29uZmlnczogYXJyYXkgd2l0aCBuY29uZmlncyBlbnRyaWVzIGNvbnRhaW5pbmcgdGhlIGdlbmVyaWMgcGluY29uZiB2YWx1ZXMKKyAqIEBuY29uZmlnczogdW1iZXIgb2YgY29uZmlndXJhdGlvbnMKKyAqLworaW50IHBpbmNvbmZfZ2VuZXJpY19wYXJzZV9kdF9jb25maWcoc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJCQkgICAgc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAorCQkJCSAgICB1bnNpZ25lZCBsb25nICoqY29uZmlncywKKwkJCQkgICAgdW5zaWduZWQgaW50ICpuY29uZmlncykKK3sKKwl1bnNpZ25lZCBsb25nICpjZmc7CisJdW5zaWduZWQgaW50IG1heF9jZmcsIG5jZmcgPSAwOworCWludCByZXQ7CisKKwlpZiAoIW5wKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGFsbG9jYXRlIGEgdGVtcG9yYXJ5IGFycmF5IGJpZyBlbm91Z2ggdG8gaG9sZCBvbmUgb2YgZWFjaCBvcHRpb24gKi8KKwltYXhfY2ZnID0gQVJSQVlfU0laRShkdF9wYXJhbXMpOworCWlmIChwY3RsZGV2KQorCQltYXhfY2ZnICs9IHBjdGxkZXYtPmRlc2MtPm51bV9jdXN0b21fcGFyYW1zOworCWNmZyA9IGtjYWxsb2MobWF4X2NmZywgc2l6ZW9mKCpjZmcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNmZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwYXJzZV9kdF9jZmcobnAsIGR0X3BhcmFtcywgQVJSQVlfU0laRShkdF9wYXJhbXMpLCBjZmcsICZuY2ZnKTsKKwlpZiAocGN0bGRldiAmJiBwY3RsZGV2LT5kZXNjLT5udW1fY3VzdG9tX3BhcmFtcyAmJgorCQlwY3RsZGV2LT5kZXNjLT5jdXN0b21fcGFyYW1zKQorCQlwYXJzZV9kdF9jZmcobnAsIHBjdGxkZXYtPmRlc2MtPmN1c3RvbV9wYXJhbXMsCisJCQkgICAgIHBjdGxkZXYtPmRlc2MtPm51bV9jdXN0b21fcGFyYW1zLCBjZmcsICZuY2ZnKTsKIAogCXJldCA9IDA7CiAKQEAgLTI2NCw2ICsyODYsNyBAQAogCXVuc2lnbmVkIHJlc2VydmU7CiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwogCWNvbnN0IGNoYXIgKmdyb3VwOworCWNvbnN0IGNoYXIgKnN1Ym5vZGVfdGFyZ2V0X3R5cGUgPSAicGlucyI7CiAKIAlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgImZ1bmN0aW9uIiwgJmZ1bmN0aW9uKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMjczLDcgKzI5Niw4IEBACiAJCWZ1bmN0aW9uID0gTlVMTDsKIAl9CiAKLQlyZXQgPSBwaW5jb25mX2dlbmVyaWNfcGFyc2VfZHRfY29uZmlnKG5wLCAmY29uZmlncywgJm51bV9jb25maWdzKTsKKwlyZXQgPSBwaW5jb25mX2dlbmVyaWNfcGFyc2VfZHRfY29uZmlnKG5wLCBwY3RsZGV2LCAmY29uZmlncywKKwkJCQkJICAgICAgJm51bV9jb25maWdzKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBwYXJzZSBub2RlIHByb3BlcnR5XG4iKTsKIAkJcmV0dXJuIHJldDsKQEAgLTI4NCwxMCArMzA4LDIwIEBACiAJCXJlc2VydmUrKzsKIAlpZiAobnVtX2NvbmZpZ3MpCiAJCXJlc2VydmUrKzsKKwogCXJldCA9IG9mX3Byb3BlcnR5X2NvdW50X3N0cmluZ3MobnAsICJwaW5zIik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsICJjb3VsZCBub3QgcGFyc2UgcHJvcGVydHkgcGluc1xuIik7Ci0JCWdvdG8gZXhpdDsKKwkJcmV0ID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhucCwgImdyb3VwcyIpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihkZXYsICJjb3VsZCBub3QgcGFyc2UgcHJvcGVydHkgcGlucy9ncm91cHNcbiIpOworCQkJZ290byBleGl0OworCQl9CisJCWlmICh0eXBlID09IFBJTl9NQVBfVFlQRV9JTlZBTElEKQorCQkJdHlwZSA9IFBJTl9NQVBfVFlQRV9DT05GSUdTX0dST1VQOworCQlzdWJub2RlX3RhcmdldF90eXBlID0gImdyb3VwcyI7CisJfSBlbHNlIHsKKwkJaWYgKHR5cGUgPT0gUElOX01BUF9UWVBFX0lOVkFMSUQpCisJCQl0eXBlID0gUElOX01BUF9UWVBFX0NPTkZJR1NfUElOOwogCX0KIAlyZXNlcnZlICo9IHJldDsKIApAQCAtMjk2LDcgKzMzMCw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXhpdDsKIAotCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3N0cmluZyhucCwgInBpbnMiLCBwcm9wLCBncm91cCkgeworCW9mX3Byb3BlcnR5X2Zvcl9lYWNoX3N0cmluZyhucCwgc3Vibm9kZV90YXJnZXRfdHlwZSwgcHJvcCwgZ3JvdXApIHsKIAkJaWYgKGZ1bmN0aW9uKSB7CiAJCQlyZXQgPSBwaW5jdHJsX3V0aWxzX2FkZF9tYXBfbXV4KHBjdGxkZXYsIG1hcCwKIAkJCQkJcmVzZXJ2ZWRfbWFwcywgbnVtX21hcHMsIGdyb3VwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmNvbmYuYyBiL2RyaXZlcnMvcGluY3RybC9waW5jb25mLmMKaW5kZXggOGJmYTA2NC4uMWZjMDlkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3BpbmNvbmYuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY29uZi5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAljb25zdCBzdHJ1Y3QgcGluY29uZl9vcHMgKm9wcyA9IHBjdGxkZXYtPmRlc2MtPmNvbmZvcHM7CiAKIAkvKiBuby1vcCB3aGVuIG5vdCB1c2luZyBnZW5lcmljIHBpbiBjb25maWcgKi8KLQlwaW5jb25mX2dlbmVyaWNfZHVtcF9waW4ocGN0bGRldiwgcywgcGluKTsKKwlwaW5jb25mX2dlbmVyaWNfZHVtcF9waW5zKHBjdGxkZXYsIHMsIE5VTEwsIHBpbik7CiAJaWYgKG9wcyAmJiBvcHMtPnBpbl9jb25maWdfZGJnX3Nob3cpCiAJCW9wcy0+cGluX2NvbmZpZ19kYmdfc2hvdyhwY3RsZGV2LCBzLCBwaW4pOwogfQpAQCAtMzMzLDcgKzMzMyw3IEBACiAJY29uc3Qgc3RydWN0IHBpbmNvbmZfb3BzICpvcHMgPSBwY3RsZGV2LT5kZXNjLT5jb25mb3BzOwogCiAJLyogbm8tb3Agd2hlbiBub3QgdXNpbmcgZ2VuZXJpYyBwaW4gY29uZmlnICovCi0JcGluY29uZl9nZW5lcmljX2R1bXBfZ3JvdXAocGN0bGRldiwgcywgZ25hbWUpOworCXBpbmNvbmZfZ2VuZXJpY19kdW1wX3BpbnMocGN0bGRldiwgcywgZ25hbWUsIDApOwogCWlmIChvcHMgJiYgb3BzLT5waW5fY29uZmlnX2dyb3VwX2RiZ19zaG93KQogCQlvcHMtPnBpbl9jb25maWdfZ3JvdXBfZGJnX3Nob3cocGN0bGRldiwgcywgc2VsZWN0b3IpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmNvbmYuaCBiL2RyaXZlcnMvcGluY3RybC9waW5jb25mLmgKaW5kZXggYTRhNTQxNy4uNTVjNzU3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3BpbmNvbmYuaAorKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY29uZi5oCkBAIC05MiwyNiArOTIsMTcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfUElOQ09ORikgJiYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiAKLXZvaWQgcGluY29uZl9nZW5lcmljX2R1bXBfcGluKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKLQkJCSAgICAgIHN0cnVjdCBzZXFfZmlsZSAqcywgdW5zaWduZWQgcGluKTsKLQotdm9pZCBwaW5jb25mX2dlbmVyaWNfZHVtcF9ncm91cChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsCi0JCQkgICAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGNvbnN0IGNoYXIgKmduYW1lKTsKK3ZvaWQgcGluY29uZl9nZW5lcmljX2R1bXBfcGlucyhzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsCisJCQkgICAgICAgc3RydWN0IHNlcV9maWxlICpzLCBjb25zdCBjaGFyICpnbmFtZSwKKwkJCSAgICAgICB1bnNpZ25lZCBwaW4pOwogCiB2b2lkIHBpbmNvbmZfZ2VuZXJpY19kdW1wX2NvbmZpZyhzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsCiAJCQkJIHN0cnVjdCBzZXFfZmlsZSAqcywgdW5zaWduZWQgbG9uZyBjb25maWcpOwogI2Vsc2UKIAotc3RhdGljIGlubGluZSB2b2lkIHBpbmNvbmZfZ2VuZXJpY19kdW1wX3BpbihzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsCi0JCQkJCSAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCi0JCQkJCSAgICB1bnNpZ25lZCBwaW4pCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcGluY29uZl9nZW5lcmljX2R1bXBfZ3JvdXAoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAotCQkJCQkgICAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCi0JCQkJCSAgICAgIGNvbnN0IGNoYXIgKmduYW1lKQorc3RhdGljIGlubGluZSB2b2lkIHBpbmNvbmZfZ2VuZXJpY19kdW1wX3BpbnMoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAorCQkJCQkgICAgIHN0cnVjdCBzZXFfZmlsZSAqcywKKwkJCQkJICAgICBjb25zdCBjaGFyICpnbmFtZSwgdW5zaWduZWQgcGluKQogewogCXJldHVybjsKIH0KQEAgLTEyNiw2ICsxMTcsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfR0VORVJJQ19QSU5DT05GKSAmJiBkZWZpbmVkKENPTkZJR19PRikKIGludCBwaW5jb25mX2dlbmVyaWNfcGFyc2VfZHRfY29uZmlnKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCisJCQkJICAgIHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyAqKmNvbmZpZ3MsCiAJCQkJICAgIHVuc2lnbmVkIGludCAqbmNvbmZpZ3MpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1hdDkxLmMgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1hdDkxLmMKaW5kZXggZGZkMDIxZS4uZjRjZDBiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtYXQ5MS5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWF0OTEuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJc3RydWN0IGRldmljZQkJKmRldjsKIAlzdHJ1Y3QgcGluY3RybF9kZXYJKnBjdGw7CiAKLQlpbnQJCQluYmFua3M7CisJaW50CQkJbmFjdGl2ZV9iYW5rczsKIAogCXVpbnQzMl90CQkqbXV4X21hc2s7CiAJaW50CQkJbm11eDsKQEAgLTY1MywxMiArNjUzLDE4IEBACiAJaW50IG11eDsKIAogCS8qIGNoZWNrIGlmIGl0J3MgYSB2YWxpZCBjb25maWcgKi8KLQlpZiAocGluLT5iYW5rID49IGluZm8tPm5iYW5rcykgeworCWlmIChwaW4tPmJhbmsgPj0gZ3Bpb19iYW5rcykgewogCQlkZXZfZXJyKGluZm8tPmRldiwgIiVzOiBwaW4gY29uZiAlZCBiYW5rX2lkICVkID49IG5iYW5rcyAlZFxuIiwKLQkJCW5hbWUsIGluZGV4LCBwaW4tPmJhbmssIGluZm8tPm5iYW5rcyk7CisJCQluYW1lLCBpbmRleCwgcGluLT5iYW5rLCBncGlvX2JhbmtzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKCFncGlvX2NoaXBzW3Bpbi0+YmFua10pIHsKKwkJZGV2X2VycihpbmZvLT5kZXYsICIlczogcGluIGNvbmYgJWQgYmFua19pZCAlZCBub3QgZW5hYmxlZFxuIiwKKwkJCW5hbWUsIGluZGV4LCBwaW4tPmJhbmspOworCQlyZXR1cm4gLUVOWElPOworCX0KKwogCWlmIChwaW4tPnBpbiA+PSBNQVhfTkJfR1BJT19QRVJfQkFOSykgewogCQlkZXZfZXJyKGluZm8tPmRldiwgIiVzOiBwaW4gY29uZiAlZCBwaW5fYmFua19pZCAlZCA+PSAlZFxuIiwKIAkJCW5hbWUsIGluZGV4LCBwaW4tPnBpbiwgTUFYX05CX0dQSU9fUEVSX0JBTkspOwpAQCAtOTgxLDcgKzk4Nyw4IEBACiAKIAlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKG5wLCBjaGlsZCkgewogCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoY2hpbGQsIGdwaW9fY29tcGF0KSkgewotCQkJaW5mby0+bmJhbmtzKys7CisJCQlpZiAob2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShjaGlsZCkpCisJCQkJaW5mby0+bmFjdGl2ZV9iYW5rcysrOwogCQl9IGVsc2UgewogCQkJaW5mby0+bmZ1bmN0aW9ucysrOwogCQkJaW5mby0+bmdyb3VwcyArPSBvZl9nZXRfY2hpbGRfY291bnQoY2hpbGQpOwpAQCAtMTAwMywxMSArMTAxMCwxMSBAQAogCX0KIAogCXNpemUgLz0gc2l6ZW9mKCpsaXN0KTsKLQlpZiAoIXNpemUgfHwgc2l6ZSAlIGluZm8tPm5iYW5rcykgewotCQlkZXZfZXJyKGluZm8tPmRldiwgIndyb25nIG11eCBtYXNrIGFycmF5IHNob3VsZCBiZSBieSAlZFxuIiwgaW5mby0+bmJhbmtzKTsKKwlpZiAoIXNpemUgfHwgc2l6ZSAlIGdwaW9fYmFua3MpIHsKKwkJZGV2X2VycihpbmZvLT5kZXYsICJ3cm9uZyBtdXggbWFzayBhcnJheSBzaG91bGQgYmUgYnkgJWRcbiIsIGdwaW9fYmFua3MpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaW5mby0+bm11eCA9IHNpemUgLyBpbmZvLT5uYmFua3M7CisJaW5mby0+bm11eCA9IHNpemUgLyBncGlvX2JhbmtzOwogCiAJaW5mby0+bXV4X21hc2sgPSBkZXZtX2t6YWxsb2MoaW5mby0+ZGV2LCBzaXplb2YodTMyKSAqIHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghaW5mby0+bXV4X21hc2spIHsKQEAgLTExMzEsNyArMTEzOCw3IEBACiAJCW9mX21hdGNoX2RldmljZShhdDkxX3BpbmN0cmxfb2ZfbWF0Y2gsICZwZGV2LT5kZXYpLT5kYXRhOwogCWF0OTFfcGluY3RybF9jaGlsZF9jb3VudChpbmZvLCBucCk7CiAKLQlpZiAoaW5mby0+bmJhbmtzIDwgMSkgeworCWlmIChncGlvX2JhbmtzIDwgMSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ5b3UgbmVlZCB0byBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBncGlvLWNvbnRyb2xsZXJcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMTQ0LDcgKzExNTEsNyBAQAogCiAJZGV2X2RiZygmcGRldi0+ZGV2LCAibXV4LW1hc2tcbiIpOwogCXRtcCA9IGluZm8tPm11eF9tYXNrOwotCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5uYmFua3M7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBncGlvX2JhbmtzOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IGluZm8tPm5tdXg7IGorKywgdG1wKyspIHsKIAkJCWRldl9kYmcoJnBkZXYtPmRldiwgIiVkOiVkXHQweCV4XG4iLCBpLCBqLCB0bXBbMF0pOwogCQl9CkBAIC0xMTYyLDcgKzExNjksNyBAQAogCWlmICghaW5mby0+Z3JvdXBzKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRldl9kYmcoJnBkZXYtPmRldiwgIm5iYW5rcyA9ICVkXG4iLCBpbmZvLT5uYmFua3MpOworCWRldl9kYmcoJnBkZXYtPmRldiwgIm5iYW5rcyA9ICVkXG4iLCBncGlvX2JhbmtzKTsKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJuZnVuY3Rpb25zID0gJWRcbiIsIGluZm8tPm5mdW5jdGlvbnMpOwogCWRldl9kYmcoJnBkZXYtPmRldiwgIm5ncm91cHMgPSAlZFxuIiwgaW5mby0+bmdyb3Vwcyk7CiAKQEAgLTExODUsNyArMTE5Miw3IEBACiB7CiAJc3RydWN0IGF0OTFfcGluY3RybCAqaW5mbzsKIAlzdHJ1Y3QgcGluY3RybF9waW5fZGVzYyAqcGRlc2M7Ci0JaW50IHJldCwgaSwgaiwgazsKKwlpbnQgcmV0LCBpLCBqLCBrLCBuZ3Bpb19jaGlwc19lbmFibGVkID0gMDsKIAogCWluZm8gPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKQpAQCAtMTIwMCwyMyArMTIwNywyNyBAQAogCSAqIHRvIG9idGFpbiByZWZlcmVuY2VzIHRvIHRoZSBzdHJ1Y3QgZ3Bpb19jaGlwICogZm9yIHRoZW0sIGFuZCB3ZQogCSAqIG5lZWQgdGhpcyB0byBwcm9jZWVkLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5uYmFua3M7IGkrKykgewotCQlpZiAoIWdwaW9fY2hpcHNbaV0pIHsKLQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJHUElPIGNoaXAgJWQgbm90IHJlZ2lzdGVyZWQgeWV0XG4iLCBpKTsKLQkJCWRldm1fa2ZyZWUoJnBkZXYtPmRldiwgaW5mbyk7Ci0JCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKLQkJfQorCWZvciAoaSA9IDA7IGkgPCBncGlvX2JhbmtzOyBpKyspCisJCWlmIChncGlvX2NoaXBzW2ldKQorCQkJbmdwaW9fY2hpcHNfZW5hYmxlZCsrOworCisJaWYgKG5ncGlvX2NoaXBzX2VuYWJsZWQgPCBpbmZvLT5uYWN0aXZlX2JhbmtzKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsCisJCQkgIkFsbCBHUElPIGNoaXBzIGFyZSBub3QgcmVnaXN0ZXJlZCB5ZXQgKCVkLyVkKVxuIiwKKwkJCSBuZ3Bpb19jaGlwc19lbmFibGVkLCBpbmZvLT5uYWN0aXZlX2JhbmtzKTsKKwkJZGV2bV9rZnJlZSgmcGRldi0+ZGV2LCBpbmZvKTsKKwkJcmV0dXJuIC1FUFJPQkVfREVGRVI7CiAJfQogCiAJYXQ5MV9waW5jdHJsX2Rlc2MubmFtZSA9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwotCWF0OTFfcGluY3RybF9kZXNjLm5waW5zID0gaW5mby0+bmJhbmtzICogTUFYX05CX0dQSU9fUEVSX0JBTks7CisJYXQ5MV9waW5jdHJsX2Rlc2MubnBpbnMgPSBncGlvX2JhbmtzICogTUFYX05CX0dQSU9fUEVSX0JBTks7CiAJYXQ5MV9waW5jdHJsX2Rlc2MucGlucyA9IHBkZXNjID0KIAkJZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcGRlc2MpICogYXQ5MV9waW5jdHJsX2Rlc2MubnBpbnMsIEdGUF9LRVJORUwpOwogCiAJaWYgKCFhdDkxX3BpbmN0cmxfZGVzYy5waW5zKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvciAoaSA9IDAgLCBrID0gMDsgaSA8IGluZm8tPm5iYW5rczsgaSsrKSB7CisJZm9yIChpID0gMCwgayA9IDA7IGkgPCBncGlvX2JhbmtzOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IE1BWF9OQl9HUElPX1BFUl9CQU5LOyBqKyssIGsrKykgewogCQkJcGRlc2MtPm51bWJlciA9IGs7CiAJCQlwZGVzYy0+bmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAicGlvJWMlZCIsIGkgKyAnQScsIGopOwpAQCAtMTIzNCw4ICsxMjQ1LDkgQEAKIAl9CiAKIAkvKiBXZSB3aWxsIGhhbmRsZSBhIHJhbmdlIG9mIEdQSU8gcGlucyAqLwotCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5uYmFua3M7IGkrKykKLQkJcGluY3RybF9hZGRfZ3Bpb19yYW5nZShpbmZvLT5wY3RsLCAmZ3Bpb19jaGlwc1tpXS0+cmFuZ2UpOworCWZvciAoaSA9IDA7IGkgPCBncGlvX2JhbmtzOyBpKyspCisJCWlmIChncGlvX2NoaXBzW2ldKQorCQkJcGluY3RybF9hZGRfZ3Bpb19yYW5nZShpbmZvLT5wY3RsLCAmZ3Bpb19jaGlwc1tpXS0+cmFuZ2UpOwogCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgImluaXRpYWxpemVkIEFUOTEgcGluY3RybCBkcml2ZXJcbiIpOwogCkBAIC0xNjEzLDkgKzE2MjUsMTAgQEAKIHN0YXRpYyBpbnQgYXQ5MV9ncGlvX29mX2lycV9zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogCQkJCSAgc3RydWN0IGF0OTFfZ3Bpb19jaGlwICphdDkxX2dwaW8pCiB7CisJc3RydWN0IGdwaW9fY2hpcAkqZ3Bpb2NoaXBfcHJldiA9IE5VTEw7CiAJc3RydWN0IGF0OTFfZ3Bpb19jaGlwICAgKnByZXYgPSBOVUxMOwogCXN0cnVjdCBpcnFfZGF0YQkJKmQgPSBpcnFfZ2V0X2lycV9kYXRhKGF0OTFfZ3Bpby0+cGlvY192aXJxKTsKLQlpbnQgcmV0OworCWludCByZXQsIGk7CiAKIAlhdDkxX2dwaW8tPnBpb2NfaHdpcnEgPSBpcnFkX3RvX2h3aXJxKGQpOwogCkBAIC0xNjQxLDI0ICsxNjU0LDMzIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JLyogU2V0dXAgY2hhaW5lZCBoYW5kbGVyICovCi0JaWYgKGF0OTFfZ3Bpby0+cGlvY19pZHgpCi0JCXByZXYgPSBncGlvX2NoaXBzW2F0OTFfZ3Bpby0+cGlvY19pZHggLSAxXTsKLQogCS8qIFRoZSB0b3AgbGV2ZWwgaGFuZGxlciBoYW5kbGVzIG9uZSBiYW5rIG9mIEdQSU9zLCBleGNlcHQKIAkgKiBvbiBzb21lIFNvQyBpdCBjYW4gaGFuZGxlIHVwIHRvIHRocmVlLi4uCiAJICogV2Ugb25seSBzZXQgdXAgdGhlIGhhbmRsZXIgZm9yIHRoZSBmaXJzdCBvZiB0aGUgbGlzdC4KIAkgKi8KLQlpZiAocHJldiAmJiBwcmV2LT5uZXh0ID09IGF0OTFfZ3BpbykKKwlncGlvY2hpcF9wcmV2ID0gaXJxX2dldF9oYW5kbGVyX2RhdGEoYXQ5MV9ncGlvLT5waW9jX3ZpcnEpOworCWlmICghZ3Bpb2NoaXBfcHJldikgeworCQkvKiBUaGVuIHJlZ2lzdGVyIHRoZSBjaGFpbiBvbiB0aGUgcGFyZW50IElSUSAqLworCQlncGlvY2hpcF9zZXRfY2hhaW5lZF9pcnFjaGlwKCZhdDkxX2dwaW8tPmNoaXAsCisJCQkJCSAgICAgJmdwaW9faXJxY2hpcCwKKwkJCQkJICAgICBhdDkxX2dwaW8tPnBpb2NfdmlycSwKKwkJCQkJICAgICBncGlvX2lycV9oYW5kbGVyKTsKIAkJcmV0dXJuIDA7CisJfQogCi0JLyogVGhlbiByZWdpc3RlciB0aGUgY2hhaW4gb24gdGhlIHBhcmVudCBJUlEgKi8KLQlncGlvY2hpcF9zZXRfY2hhaW5lZF9pcnFjaGlwKCZhdDkxX2dwaW8tPmNoaXAsCi0JCQkJICAgICAmZ3Bpb19pcnFjaGlwLAotCQkJCSAgICAgYXQ5MV9ncGlvLT5waW9jX3ZpcnEsCi0JCQkJICAgICBncGlvX2lycV9oYW5kbGVyKTsKKwlwcmV2ID0gY29udGFpbmVyX29mKGdwaW9jaGlwX3ByZXYsIHN0cnVjdCBhdDkxX2dwaW9fY2hpcCwgY2hpcCk7CiAKLQlyZXR1cm4gMDsKKwkvKiB3ZSBjYW4gb25seSBoYXZlIDIgYmFua3MgYmVmb3JlICovCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlpZiAocHJldi0+bmV4dCkgeworCQkJcHJldiA9IHByZXYtPm5leHQ7CisJCX0gZWxzZSB7CisJCQlwcmV2LT5uZXh0ID0gYXQ5MV9ncGlvOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogLyogVGhpcyBzdHJ1Y3R1cmUgaXMgcmVwbGljYXRlZCBmb3IgZWFjaCBHUElPIGJsb2NrIGFsbG9jYXRlZCBhdCBwcm9iZSB0aW1lICovCkBAIC0xNjc1LDI0ICsxNjk3LDYgQEAKIAkubmdwaW8JCQk9IE1BWF9OQl9HUElPX1BFUl9CQU5LLAogfTsKIAotc3RhdGljIHZvaWQgYXQ5MV9ncGlvX3Byb2JlX2ZpeHVwKHZvaWQpCi17Ci0JdW5zaWduZWQgaTsKLQlzdHJ1Y3QgYXQ5MV9ncGlvX2NoaXAgKmF0OTFfZ3BpbywgKmxhc3QgPSBOVUxMOwotCi0JZm9yIChpID0gMDsgaSA8IGdwaW9fYmFua3M7IGkrKykgewotCQlhdDkxX2dwaW8gPSBncGlvX2NoaXBzW2ldOwotCi0JCS8qCi0JCSAqIEdQSU8gY29udHJvbGxlciBhcmUgZ3JvdXBlZCBvbiBzb21lIFNvQzoKLQkJICogUElPQywgUElPRCBhbmQgUElPRSBjYW4gc2hhcmUgdGhlIHNhbWUgSVJRIGxpbmUKLQkJICovCi0JCWlmIChsYXN0ICYmIGxhc3QtPnBpb2NfdmlycSA9PSBhdDkxX2dwaW8tPnBpb2NfdmlycSkKLQkJCWxhc3QtPm5leHQgPSBhdDkxX2dwaW87Ci0JCWxhc3QgPSBhdDkxX2dwaW87Ci0JfQotfQotCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBhdDkxX2dwaW9fb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05eDUtZ3BpbyIsIC5kYXRhID0gJmF0OTFzYW05eDVfb3BzLCB9LAogCXsgLmNvbXBhdGlibGUgPSAiYXRtZWwsYXQ5MXJtOTIwMC1ncGlvIiwgLmRhdGEgPSAmYXQ5MXJtOTIwMF9vcHMgfSwKQEAgLTE4MDUsOCArMTgwOSw2IEBACiAJZ3Bpb19jaGlwc1thbGlhc19pZHhdID0gYXQ5MV9jaGlwOwogCWdwaW9fYmFua3MgPSBtYXgoZ3Bpb19iYW5rcywgYWxpYXNfaWR4ICsgMSk7CiAKLQlhdDkxX2dwaW9fcHJvYmVfZml4dXAoKTsKLQogCXJldCA9IGF0OTFfZ3Bpb19vZl9pcnFfc2V0dXAocGRldiwgYXQ5MV9jaGlwKTsKIAlpZiAocmV0KQogCQlnb3RvIGlycV9zZXR1cF9lcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1iY20yODF4eC5jIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtYmNtMjgxeHguYwppbmRleCBmYTJhMDBmLi5iODhjZmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1iY20yODF4eC5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWJjbTI4MXh4LmMKQEAgLTk3Niw3ICs5NzYsNyBAQAogCSpyZWdfbWFzayB8PSBwYXJhbV9tYXNrOwogfQogCi1zdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgYmNtMjgxeHhfcGluY3RybF9yZWdtYXBfY29uZmlnID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGJjbTI4MXh4X3BpbmN0cmxfcmVnbWFwX2NvbmZpZyA9IHsKIAkucmVnX2JpdHMgPSAzMiwKIAkucmVnX3N0cmlkZSA9IDQsCiAJLnZhbF9iaXRzID0gMzIsCkBAIC0xNDM1LDcgKzE0MzUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBiY20yODF4eF9waW5jdHJsX29mX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBiY20yODF4eF9waW5jdHJsX29mX21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJicmNtLGJjbTExMzUxLXBpbmN0cmwiLCB9LAogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1mYWxjb24uYyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWZhbGNvbi5jCmluZGV4IDFkMjFkYzIuLjBiMGZjMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWZhbGNvbi5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLWZhbGNvbi5jCkBAIC0xMDEsNiArMTAxLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJLyogc3RybGVuKCJpb1hZWiIpICsgMSA9IDYgKi8KIAkJY2hhciAqbmFtZSA9IGt6YWxsb2MoNiwgR0ZQX0tFUk5FTCk7CisKIAkJc25wcmludGYobmFtZSwgNiwgImlvJWQiLCBiYXNlICsgaSk7CiAJCWRbaV0ubnVtYmVyID0gYmFzZSArIGk7CiAJCWRbaV0ubmFtZSA9IG5hbWU7CkBAIC00NjMsNyArNDY0LDcgQEAKIAkJCQkJCQkJICAgJnJlcyk7CiAJCWlmIChJU19FUlIoZmFsY29uX2luZm8ubWVtYmFzZVsqYmFua10pKQogCQkJcmV0dXJuIFBUUl9FUlIoZmFsY29uX2luZm8ubWVtYmFzZVsqYmFua10pOwotCQkKKwogCQlhdmFpbCA9IHBhZF9yMzIoZmFsY29uX2luZm8ubWVtYmFzZVsqYmFua10sCiAJCQkJCUxUUV9QQURDX0FWQUlMKTsKIAkJcGlucyA9IGZscyhhdmFpbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1yb2NrY2hpcC5jIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtcm9ja2NoaXAuYwppbmRleCA0M2VhY2M5Li5kZWU3ZDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC1yb2NrY2hpcC5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXJvY2tjaGlwLmMKQEAgLTg5LDcgKzg5LDcgQEAKICAqIEByZWdfcHVsbDogb3B0aW9uYWwgc2VwYXJhdGUgcmVnaXN0ZXIgZm9yIGFkZGl0aW9uYWwgcHVsbCBzZXR0aW5ncwogICogQGNsazogY2xvY2sgb2YgdGhlIGdwaW8gYmFuawogICogQGlycTogaW50ZXJydXB0IG9mIHRoZSBncGlvIGJhbmsKLSAqIEBzYXZlZF9lbmFibGVzOiBTYXZlZCBjb250ZW50IG9mIEdQSU9fSU5URU4gYXQgc3VzcGVuZCB0aW1lLgorICogQHNhdmVkX21hc2tzOiBTYXZlZCBjb250ZW50IG9mIEdQSU9fSU5URU4gYXQgc3VzcGVuZCB0aW1lLgogICogQHBpbl9iYXNlOiBmaXJzdCBwaW4gbnVtYmVyCiAgKiBAbnJfcGluczogbnVtYmVyIG9mIHBpbnMgaW4gdGhpcyBiYW5rCiAgKiBAbmFtZTogbmFtZSBvZiB0aGUgYmFuawpAQCAtMTA4LDcgKzEwOCw3IEBACiAJc3RydWN0IHJlZ21hcAkJCSpyZWdtYXBfcHVsbDsKIAlzdHJ1Y3QgY2xrCQkJKmNsazsKIAlpbnQJCQkJaXJxOwotCXUzMgkJCQlzYXZlZF9lbmFibGVzOworCXUzMgkJCQlzYXZlZF9tYXNrczsKIAl1MzIJCQkJcGluX2Jhc2U7CiAJdTgJCQkJbnJfcGluczsKIAljaGFyCQkJCSpuYW1lOwpAQCAtMTE0Miw3ICsxMTQyLDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCW5wX2NvbmZpZyA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKGJlMzJfdG9fY3B1cChwaGFuZGxlKSk7Ci0JCXJldCA9IHBpbmNvbmZfZ2VuZXJpY19wYXJzZV9kdF9jb25maWcobnBfY29uZmlnLAorCQlyZXQgPSBwaW5jb25mX2dlbmVyaWNfcGFyc2VfZHRfY29uZmlnKG5wX2NvbmZpZywgTlVMTCwKIAkJCQkmZ3JwLT5kYXRhW2pdLmNvbmZpZ3MsICZncnAtPmRhdGFbal0ubmNvbmZpZ3MpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKQEAgLTE1NDUsOCArMTU0NSw4IEBACiAJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CiAJc3RydWN0IHJvY2tjaGlwX3Bpbl9iYW5rICpiYW5rID0gZ2MtPnByaXZhdGU7CiAKLQliYW5rLT5zYXZlZF9lbmFibGVzID0gaXJxX3JlZ19yZWFkbChnYywgR1BJT19JTlRFTik7Ci0JaXJxX3JlZ193cml0ZWwoZ2MsIGdjLT53YWtlX2FjdGl2ZSwgR1BJT19JTlRFTik7CisJYmFuay0+c2F2ZWRfbWFza3MgPSBpcnFfcmVnX3JlYWRsKGdjLCBHUElPX0lOVE1BU0spOworCWlycV9yZWdfd3JpdGVsKGdjLCB+Z2MtPndha2VfYWN0aXZlLCBHUElPX0lOVE1BU0spOwogfQogCiBzdGF0aWMgdm9pZCByb2NrY2hpcF9pcnFfcmVzdW1lKHN0cnVjdCBpcnFfZGF0YSAqZCkKQEAgLTE1NTQsMzUgKzE1NTQsNyBAQAogCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOwogCXN0cnVjdCByb2NrY2hpcF9waW5fYmFuayAqYmFuayA9IGdjLT5wcml2YXRlOwogCi0JaXJxX3JlZ193cml0ZWwoZ2MsIGJhbmstPnNhdmVkX2VuYWJsZXMsIEdQSU9fSU5URU4pOwotfQotCi1zdGF0aWMgdm9pZCByb2NrY2hpcF9pcnFfZGlzYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCi17Ci0Jc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7Ci0JdTMyIHZhbDsKLQotCWlycV9nY19sb2NrKGdjKTsKLQotCXZhbCA9IGlycV9yZWdfcmVhZGwoZ2MsIEdQSU9fSU5URU4pOwotCXZhbCAmPSB+ZC0+bWFzazsKLQlpcnFfcmVnX3dyaXRlbChnYywgdmFsLCBHUElPX0lOVEVOKTsKLQotCWlycV9nY191bmxvY2soZ2MpOwotfQotCi1zdGF0aWMgdm9pZCByb2NrY2hpcF9pcnFfZW5hYmxlKHN0cnVjdCBpcnFfZGF0YSAqZCkKLXsKLQlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKLQl1MzIgdmFsOwotCi0JaXJxX2djX2xvY2soZ2MpOwotCi0JdmFsID0gaXJxX3JlZ19yZWFkbChnYywgR1BJT19JTlRFTik7Ci0JdmFsIHw9IGQtPm1hc2s7Ci0JaXJxX3JlZ193cml0ZWwoZ2MsIHZhbCwgR1BJT19JTlRFTik7Ci0KLQlpcnFfZ2NfdW5sb2NrKGdjKTsKKwlpcnFfcmVnX3dyaXRlbChnYywgYmFuay0+c2F2ZWRfbWFza3MsIEdQSU9fSU5UTUFTSyk7CiB9CiAKIHN0YXRpYyBpbnQgcm9ja2NoaXBfaW50ZXJydXB0c19yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LApAQCAtMTYyMCw2ICsxNTkyLDE0IEBACiAJCQljb250aW51ZTsKIAkJfQogCisJCS8qCisJCSAqIExpbnV4IGFzc3VtZXMgdGhhdCBhbGwgaW50ZXJydXB0cyBzdGFydCBvdXQgZGlzYWJsZWQvbWFza2VkLgorCQkgKiBPdXIgZHJpdmVyIG9ubHkgdXNlcyB0aGUgY29uY2VwdCBvZiBtYXNrZWQgYW5kIGFsd2F5cyBrZWVwcworCQkgKiB0aGluZ3MgZW5hYmxlZCwgc28gZm9yIHVzIHRoYXQncyBhbGwgbWFza2VkIGFuZCBhbGwgZW5hYmxlZC4KKwkJICovCisJCXdyaXRlbF9yZWxheGVkKDB4ZmZmZmZmZmYsIGJhbmstPnJlZ19iYXNlICsgR1BJT19JTlRNQVNLKTsKKwkJd3JpdGVsX3JlbGF4ZWQoMHhmZmZmZmZmZiwgYmFuay0+cmVnX2Jhc2UgKyBHUElPX0lOVEVOKTsKKwogCQlnYyA9IGlycV9nZXRfZG9tYWluX2dlbmVyaWNfY2hpcChiYW5rLT5kb21haW4sIDApOwogCQlnYy0+cmVnX2Jhc2UgPSBiYW5rLT5yZWdfYmFzZTsKIAkJZ2MtPnByaXZhdGUgPSBiYW5rOwpAQCAtMTYyOCw4ICsxNjA4LDYgQEAKIAkJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfYWNrID0gaXJxX2djX2Fja19zZXRfYml0OwogCQlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV9tYXNrID0gaXJxX2djX21hc2tfc2V0X2JpdDsKIAkJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfdW5tYXNrID0gaXJxX2djX21hc2tfY2xyX2JpdDsKLQkJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfZW5hYmxlID0gcm9ja2NoaXBfaXJxX2VuYWJsZTsKLQkJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfZGlzYWJsZSA9IHJvY2tjaGlwX2lycV9kaXNhYmxlOwogCQlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV9zZXRfd2FrZSA9IGlycV9nY19zZXRfd2FrZTsKIAkJZ2MtPmNoaXBfdHlwZXNbMF0uY2hpcC5pcnFfc3VzcGVuZCA9IHJvY2tjaGlwX2lycV9zdXNwZW5kOwogCQlnYy0+Y2hpcF90eXBlc1swXS5jaGlwLmlycV9yZXN1bWUgPSByb2NrY2hpcF9pcnFfcmVzdW1lOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtdHoxMDkwLXBkYy5jIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtdHoxMDkwLXBkYy5jCmluZGV4IDE0NmU0OGE5Li5mYWI2YWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC10ejEwOTAtcGRjLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtdHoxMDkwLXBkYy5jCkBAIC00MTUsNyArNDE1LDcgQEAKIAkJZnVuY3Rpb24gPSBOVUxMOwogCX0KIAotCXJldCA9IHBpbmNvbmZfZ2VuZXJpY19wYXJzZV9kdF9jb25maWcobnAsICZjb25maWdzLCAmbnVtX2NvbmZpZ3MpOworCXJldCA9IHBpbmNvbmZfZ2VuZXJpY19wYXJzZV9kdF9jb25maWcobnAsIE5VTEwsICZjb25maWdzLCAmbnVtX2NvbmZpZ3MpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXR6MTA5MC5jIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtdHoxMDkwLmMKaW5kZXggZGY4Y2IxZS4uOGJkNzMwNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXR6MTA5MC5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9waW5jdHJsLXR6MTA5MC5jCkBAIC0xMTMxLDcgKzExMzEsNyBAQAogCQlmdW5jdGlvbiA9IE5VTEw7CiAJfQogCi0JcmV0ID0gcGluY29uZl9nZW5lcmljX3BhcnNlX2R0X2NvbmZpZyhucCwgJmNvbmZpZ3MsICZudW1fY29uZmlncyk7CisJcmV0ID0gcGluY29uZl9nZW5lcmljX3BhcnNlX2R0X2NvbmZpZyhucCwgTlVMTCwgJmNvbmZpZ3MsICZudW1fY29uZmlncyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtenlucS5jIGIvZHJpdmVycy9waW5jdHJsL3BpbmN0cmwtenlucS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMjgwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BpbmN0cmwvcGluY3RybC16eW5xLmMKQEAgLTAsMCArMSwxMTgwIEBACisvKgorICogWnlucSBwaW4gY29udHJvbGxlcgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgWGlsaW54CisgKgorICogIFPDg8K2cmVuIEJyaW5rbWFubiA8c29yZW4uYnJpbmttYW5uQHhpbGlueC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5tdXguaD4KKyNpbmNsdWRlIDxsaW51eC9waW5jdHJsL3BpbmNvbmYuaD4KKyNpbmNsdWRlIDxsaW51eC9waW5jdHJsL3BpbmNvbmYtZ2VuZXJpYy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgInBpbmN0cmwtdXRpbHMuaCIKKyNpbmNsdWRlICJjb3JlLmgiCisKKyNkZWZpbmUgWllOUV9OVU1fTUlPUwk1NAorCisjZGVmaW5lIFpZTlFfUENUUkxfTUlPX01TVF9UUkkwCTB4MTBjCisjZGVmaW5lIFpZTlFfUENUUkxfTUlPX01TVF9UUkkxCTB4MTEwCisKKyNkZWZpbmUgWllOUV9QSU5NVVhfTVVYX1NISUZUCTEKKyNkZWZpbmUgWllOUV9QSU5NVVhfTVVYX01BU0sJKDB4N2YgPDwgWllOUV9QSU5NVVhfTVVYX1NISUZUKQorCisvKioKKyAqIHN0cnVjdCB6eW5xX3BpbmN0cmwgLSBkcml2ZXIgZGF0YQorICogQHBjdHJsOgkJUGluY3RybCBkZXZpY2UKKyAqIEBzeXNjb246CQlTeXNjb24gcmVnbWFwCisgKiBAcGN0cmxfb2Zmc2V0OglPZmZzZXQgZm9yIHBpbmN0cmwgaW50byB0aGUgQHN5c2NvbiBzcGFjZQorICogQGdyb3VwczoJCVBpbmdyb3VwcworICogQG5ncm91cG9zOgkJTnVtYmVyIG9mIEBncm91cHMKKyAqIEBmdW5jczoJCVBpbm11eCBmdW5jdGlvbnMKKyAqIEBuZnVuY3M6CQlOdW1iZXIgb2YgQGZ1bmNzCisgKi8KK3N0cnVjdCB6eW5xX3BpbmN0cmwgeworCXN0cnVjdCBwaW5jdHJsX2RldiAqcGN0cmw7CisJc3RydWN0IHJlZ21hcCAqc3lzY29uOworCXUzMiBwY3RybF9vZmZzZXQ7CisJY29uc3Qgc3RydWN0IHp5bnFfcGN0cmxfZ3JvdXAgKmdyb3VwczsKKwl1bnNpZ25lZCBpbnQgbmdyb3VwczsKKwljb25zdCBzdHJ1Y3QgenlucV9waW5tdXhfZnVuY3Rpb24gKmZ1bmNzOworCXVuc2lnbmVkIGludCBuZnVuY3M7Cit9OworCitzdHJ1Y3QgenlucV9wY3RybF9ncm91cCB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnBpbnM7CisJY29uc3QgdW5zaWduZWQgbnBpbnM7Cit9OworCisvKioKKyAqIHN0cnVjdCB6eW5xX3Bpbm11eF9mdW5jdGlvbiAtIGEgcGlubXV4IGZ1bmN0aW9uCisgKiBAbmFtZToJTmFtZSBvZiB0aGUgcGlubXV4IGZ1bmN0aW9uLgorICogQGdyb3VwczoJTGlzdCBvZiBwaW5ncm91cHMgZm9yIHRoaXMgZnVuY3Rpb24uCisgKiBAbmdyb3VwczoJTnVtYmVyIG9mIGVudHJpZXMgaW4gQGdyb3Vwcy4KKyAqIEBtdXhfdmFsOglTZWxlY3RvciBmb3IgdGhpcyBmdW5jdGlvbgorICogQG11eDoJT2Zmc2V0IG9mIGZ1bmN0aW9uIHNwZWNpZmljIG11eAorICogQG11eF9tYXNrOglNYXNrIGZvciBmdW5jdGlvbiBzcGVjaWZpYyBzZWxlY3RvcgorICogQG11eF9zaGlmdDoJU2hpZnQgZm9yIGZ1bmN0aW9uIHNwZWNpZmljIHNlbGVjdG9yCisgKi8KK3N0cnVjdCB6eW5xX3Bpbm11eF9mdW5jdGlvbiB7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICogY29uc3QgKmdyb3VwczsKKwl1bnNpZ25lZCBpbnQgbmdyb3VwczsKKwl1bnNpZ25lZCBpbnQgbXV4X3ZhbDsKKwl1MzIgbXV4OworCXUzMiBtdXhfbWFzazsKKwl1OCBtdXhfc2hpZnQ7Cit9OworCitlbnVtIHp5bnFfcGlubXV4X2Z1bmN0aW9ucyB7CisJWllOUV9QTVVYX2NhbjAsCisJWllOUV9QTVVYX2NhbjEsCisJWllOUV9QTVVYX2V0aGVybmV0MCwKKwlaWU5RX1BNVVhfZXRoZXJuZXQxLAorCVpZTlFfUE1VWF9ncGlvMCwKKwlaWU5RX1BNVVhfaTJjMCwKKwlaWU5RX1BNVVhfaTJjMSwKKwlaWU5RX1BNVVhfbWRpbzAsCisJWllOUV9QTVVYX21kaW8xLAorCVpZTlFfUE1VWF9xc3BpMCwKKwlaWU5RX1BNVVhfcXNwaTEsCisJWllOUV9QTVVYX3FzcGlfZmJjbGssCisJWllOUV9QTVVYX3FzcGlfY3MxLAorCVpZTlFfUE1VWF9zcGkwLAorCVpZTlFfUE1VWF9zcGkxLAorCVpZTlFfUE1VWF9zZGlvMCwKKwlaWU5RX1BNVVhfc2RpbzBfcGMsCisJWllOUV9QTVVYX3NkaW8wX2NkLAorCVpZTlFfUE1VWF9zZGlvMF93cCwKKwlaWU5RX1BNVVhfc2RpbzEsCisJWllOUV9QTVVYX3NkaW8xX3BjLAorCVpZTlFfUE1VWF9zZGlvMV9jZCwKKwlaWU5RX1BNVVhfc2RpbzFfd3AsCisJWllOUV9QTVVYX3NtYzBfbm9yLAorCVpZTlFfUE1VWF9zbWMwX25vcl9jczEsCisJWllOUV9QTVVYX3NtYzBfbm9yX2FkZHIyNSwKKwlaWU5RX1BNVVhfc21jMF9uYW5kLAorCVpZTlFfUE1VWF90dGMwLAorCVpZTlFfUE1VWF90dGMxLAorCVpZTlFfUE1VWF91YXJ0MCwKKwlaWU5RX1BNVVhfdWFydDEsCisJWllOUV9QTVVYX3VzYjAsCisJWllOUV9QTVVYX3VzYjEsCisJWllOUV9QTVVYX3N3ZHQwLAorCVpZTlFfUE1VWF9NQVhfRlVOQworfTsKKworY29uc3Qgc3RydWN0IHBpbmN0cmxfcGluX2Rlc2MgenlucV9waW5zW10gPSB7CisJUElOQ1RSTF9QSU4oMCwgICJNSU8wIiksCisJUElOQ1RSTF9QSU4oMSwgICJNSU8xIiksCisJUElOQ1RSTF9QSU4oMiwgICJNSU8yIiksCisJUElOQ1RSTF9QSU4oMywgICJNSU8zIiksCisJUElOQ1RSTF9QSU4oNCwgICJNSU80IiksCisJUElOQ1RSTF9QSU4oNSwgICJNSU81IiksCisJUElOQ1RSTF9QSU4oNiwgICJNSU82IiksCisJUElOQ1RSTF9QSU4oNywgICJNSU83IiksCisJUElOQ1RSTF9QSU4oOCwgICJNSU84IiksCisJUElOQ1RSTF9QSU4oOSwgICJNSU85IiksCisJUElOQ1RSTF9QSU4oMTAsICJNSU8xMCIpLAorCVBJTkNUUkxfUElOKDExLCAiTUlPMTEiKSwKKwlQSU5DVFJMX1BJTigxMiwgIk1JTzEyIiksCisJUElOQ1RSTF9QSU4oMTMsICJNSU8xMyIpLAorCVBJTkNUUkxfUElOKDE0LCAiTUlPMTQiKSwKKwlQSU5DVFJMX1BJTigxNSwgIk1JTzE1IiksCisJUElOQ1RSTF9QSU4oMTYsICJNSU8xNiIpLAorCVBJTkNUUkxfUElOKDE3LCAiTUlPMTciKSwKKwlQSU5DVFJMX1BJTigxOCwgIk1JTzE4IiksCisJUElOQ1RSTF9QSU4oMTksICJNSU8xOSIpLAorCVBJTkNUUkxfUElOKDIwLCAiTUlPMjAiKSwKKwlQSU5DVFJMX1BJTigyMSwgIk1JTzIxIiksCisJUElOQ1RSTF9QSU4oMjIsICJNSU8yMiIpLAorCVBJTkNUUkxfUElOKDIzLCAiTUlPMjMiKSwKKwlQSU5DVFJMX1BJTigyNCwgIk1JTzI0IiksCisJUElOQ1RSTF9QSU4oMjUsICJNSU8yNSIpLAorCVBJTkNUUkxfUElOKDI2LCAiTUlPMjYiKSwKKwlQSU5DVFJMX1BJTigyNywgIk1JTzI3IiksCisJUElOQ1RSTF9QSU4oMjgsICJNSU8yOCIpLAorCVBJTkNUUkxfUElOKDI5LCAiTUlPMjkiKSwKKwlQSU5DVFJMX1BJTigzMCwgIk1JTzMwIiksCisJUElOQ1RSTF9QSU4oMzEsICJNSU8zMSIpLAorCVBJTkNUUkxfUElOKDMyLCAiTUlPMzIiKSwKKwlQSU5DVFJMX1BJTigzMywgIk1JTzMzIiksCisJUElOQ1RSTF9QSU4oMzQsICJNSU8zNCIpLAorCVBJTkNUUkxfUElOKDM1LCAiTUlPMzUiKSwKKwlQSU5DVFJMX1BJTigzNiwgIk1JTzM2IiksCisJUElOQ1RSTF9QSU4oMzcsICJNSU8zNyIpLAorCVBJTkNUUkxfUElOKDM4LCAiTUlPMzgiKSwKKwlQSU5DVFJMX1BJTigzOSwgIk1JTzM5IiksCisJUElOQ1RSTF9QSU4oNDAsICJNSU80MCIpLAorCVBJTkNUUkxfUElOKDQxLCAiTUlPNDEiKSwKKwlQSU5DVFJMX1BJTig0MiwgIk1JTzQyIiksCisJUElOQ1RSTF9QSU4oNDMsICJNSU80MyIpLAorCVBJTkNUUkxfUElOKDQ0LCAiTUlPNDQiKSwKKwlQSU5DVFJMX1BJTig0NSwgIk1JTzQ1IiksCisJUElOQ1RSTF9QSU4oNDYsICJNSU80NiIpLAorCVBJTkNUUkxfUElOKDQ3LCAiTUlPNDciKSwKKwlQSU5DVFJMX1BJTig0OCwgIk1JTzQ4IiksCisJUElOQ1RSTF9QSU4oNDksICJNSU80OSIpLAorCVBJTkNUUkxfUElOKDUwLCAiTUlPNTAiKSwKKwlQSU5DVFJMX1BJTig1MSwgIk1JTzUxIiksCisJUElOQ1RSTF9QSU4oNTIsICJNSU81MiIpLAorCVBJTkNUUkxfUElOKDUzLCAiTUlPNTMiKSwKKwlQSU5DVFJMX1BJTig1NCwgIkVNSU9fU0QwX1dQIiksCisJUElOQ1RSTF9QSU4oNTUsICJFTUlPX1NEMF9DRCIpLAorCVBJTkNUUkxfUElOKDU2LCAiRU1JT19TRDFfV1AiKSwKKwlQSU5DVFJMX1BJTig1NywgIkVNSU9fU0QxX0NEIiksCit9OworCisvKiBwaW4gZ3JvdXBzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGV0aGVybmV0MF8wX3BpbnNbXSA9IHsxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsCisJCQkJCQkyNCwgMjUsIDI2LCAyN307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGV0aGVybmV0MV8wX3BpbnNbXSA9IHsyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsCisJCQkJCQkzNiwgMzcsIDM4LCAzOX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1kaW8wXzBfcGluc1tdID0gezUyLCA1M307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1kaW8xXzBfcGluc1tdID0gezUyLCA1M307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHFzcGkwXzBfcGluc1tdID0gezEsIDIsIDMsIDQsIDUsIDZ9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHFzcGkxXzBfcGluc1tdID0gezksIDEwLCAxMSwgMTIsIDEzfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcXNwaV9jczFfcGluc1tdID0gezB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBxc3BpX2ZiY2xrX3BpbnNbXSA9IHs4fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3BpMF8wX3BpbnNbXSA9IHsxNiwgMTcsIDE4LCAxOSwgMjAsIDIxfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3BpMF8xX3BpbnNbXSA9IHsyOCwgMjksIDMwLCAzMSwgMzIsIDMzfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3BpMF8yX3BpbnNbXSA9IHs0MCwgNDEsIDQyLCA0MywgNDQsIDQ1fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3BpMV8wX3BpbnNbXSA9IHsxMCwgMTEsIDEyLCAxMywgMTQsIDE1fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3BpMV8xX3BpbnNbXSA9IHsyMiwgMjMsIDI0LCAyNSwgMjYsIDI3fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3BpMV8yX3BpbnNbXSA9IHszNCwgMzUsIDM2LCAzNywgMzgsIDM5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3BpMV8zX3BpbnNbXSA9IHs0NiwgNDcsIDQ4LCA0OSwgNDAsIDUxfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RpbzBfMF9waW5zW10gPSB7MTYsIDE3LCAxOCwgMTksIDIwLCAyMX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaW8wXzFfcGluc1tdID0gezI4LCAyOSwgMzAsIDMxLCAzMiwgMzN9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGlvMF8yX3BpbnNbXSA9IHs0MCwgNDEsIDQyLCA0MywgNDQsIDQ1fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RpbzFfMF9waW5zW10gPSB7MTAsIDExLCAxMiwgMTMsIDE0LCAxNX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaW8xXzFfcGluc1tdID0gezIyLCAyMywgMjQsIDI1LCAyNiwgMjd9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGlvMV8yX3BpbnNbXSA9IHszNCwgMzUsIDM2LCAzNywgMzgsIDM5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RpbzFfM19waW5zW10gPSB7NDYsIDQ3LCA0OCwgNDksIDQwLCA1MX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaW8wX2VtaW9fd3BfcGluc1tdID0gezU0fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RpbzBfZW1pb19jZF9waW5zW10gPSB7NTV9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGlvMV9lbWlvX3dwX3BpbnNbXSA9IHs1Nn07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaW8xX2VtaW9fY2RfcGluc1tdID0gezU3fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc21jMF9ub3JfcGluc1tdID0gezAsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTMsCisJCQkJCSAgICAgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywKKwkJCQkJICAgICAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLAorCQkJCQkgICAgIDMzLCAzNCwgMzUsIDM2LCAzNywgMzgsIDM5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc21jMF9ub3JfY3MxX3BpbnNbXSA9IHsxfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc21jMF9ub3JfYWRkcjI1X3BpbnNbXSA9IHsxfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc21jMF9uYW5kX3BpbnNbXSA9IHswLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsCisJCQkJCSAgICAgIDEyLCAxMywgMTQsIDE2LCAxNywgMTgsIDE5LCAyMCwKKwkJCQkJICAgICAgMjEsIDIyLCAyM307CisvKiBOb3RlOiBDQU4gTUlPIGNsb2NrIGlucHV0cyBhcmUgbW9kZWxlZCBpbiB0aGUgY2xvY2sgZnJhbWV3b3JrICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNhbjBfMF9waW5zW10gPSB7MTAsIDExfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2FuMF8xX3BpbnNbXSA9IHsxNCwgMTV9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjYW4wXzJfcGluc1tdID0gezE4LCAxOX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNhbjBfM19waW5zW10gPSB7MjIsIDIzfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2FuMF80X3BpbnNbXSA9IHsyNiwgMjd9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjYW4wXzVfcGluc1tdID0gezMwLCAzMX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNhbjBfNl9waW5zW10gPSB7MzQsIDM1fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2FuMF83X3BpbnNbXSA9IHszOCwgMzl9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjYW4wXzhfcGluc1tdID0gezQyLCA0M307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNhbjBfOV9waW5zW10gPSB7NDYsIDQ3fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2FuMF8xMF9waW5zW10gPSB7NTAsIDUxfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2FuMV8wX3BpbnNbXSA9IHs4LCA5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2FuMV8xX3BpbnNbXSA9IHsxMiwgMTN9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjYW4xXzJfcGluc1tdID0gezE2LCAxN307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNhbjFfM19waW5zW10gPSB7MjAsIDIxfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2FuMV80X3BpbnNbXSA9IHsyNCwgMjV9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjYW4xXzVfcGluc1tdID0gezI4LCAyOX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNhbjFfNl9waW5zW10gPSB7MzIsIDMzfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2FuMV83X3BpbnNbXSA9IHszNiwgMzd9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjYW4xXzhfcGluc1tdID0gezQwLCA0MX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNhbjFfOV9waW5zW10gPSB7NDQsIDQ1fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2FuMV8xMF9waW5zW10gPSB7NDgsIDQ5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2FuMV8xMV9waW5zW10gPSB7NTIsIDUzfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydDBfMF9waW5zW10gPSB7MTAsIDExfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydDBfMV9waW5zW10gPSB7MTQsIDE1fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydDBfMl9waW5zW10gPSB7MTgsIDE5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydDBfM19waW5zW10gPSB7MjIsIDIzfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydDBfNF9waW5zW10gPSB7MjYsIDI3fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydDBfNV9waW5zW10gPSB7MzAsIDMxfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydDBfNl9waW5zW10gPSB7MzQsIDM1fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydDBfN19waW5zW10gPSB7MzgsIDM5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydDBfOF9waW5zW10gPSB7NDIsIDQzfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydDBfOV9waW5zW10gPSB7NDYsIDQ3fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydDBfMTBfcGluc1tdID0gezUwLCA1MX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnQxXzBfcGluc1tdID0gezgsIDl9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0MV8xX3BpbnNbXSA9IHsxMiwgMTN9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0MV8yX3BpbnNbXSA9IHsxNiwgMTd9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0MV8zX3BpbnNbXSA9IHsyMCwgMjF9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0MV80X3BpbnNbXSA9IHsyNCwgMjV9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0MV81X3BpbnNbXSA9IHsyOCwgMjl9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0MV82X3BpbnNbXSA9IHszMiwgMzN9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0MV83X3BpbnNbXSA9IHszNiwgMzd9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0MV84X3BpbnNbXSA9IHs0MCwgNDF9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0MV85X3BpbnNbXSA9IHs0NCwgNDV9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0MV8xMF9waW5zW10gPSB7NDgsIDQ5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydDFfMTFfcGluc1tdID0gezUyLCA1M307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyYzBfMF9waW5zW10gPSB7MTAsIDExfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaTJjMF8xX3BpbnNbXSA9IHsxNCwgMTV9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmMwXzJfcGluc1tdID0gezE4LCAxOX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyYzBfM19waW5zW10gPSB7MjIsIDIzfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaTJjMF80X3BpbnNbXSA9IHsyNiwgMjd9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmMwXzVfcGluc1tdID0gezMwLCAzMX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyYzBfNl9waW5zW10gPSB7MzQsIDM1fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaTJjMF83X3BpbnNbXSA9IHszOCwgMzl9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmMwXzhfcGluc1tdID0gezQyLCA0M307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyYzBfOV9waW5zW10gPSB7NDYsIDQ3fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaTJjMF8xMF9waW5zW10gPSB7NTAsIDUxfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaTJjMV8wX3BpbnNbXSA9IHsxMiwgMTN9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmMxXzFfcGluc1tdID0gezE2LCAxN307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyYzFfMl9waW5zW10gPSB7MjAsIDIxfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaTJjMV8zX3BpbnNbXSA9IHsyNCwgMjV9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmMxXzRfcGluc1tdID0gezI4LCAyOX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyYzFfNV9waW5zW10gPSB7MzIsIDMzfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaTJjMV82X3BpbnNbXSA9IHszNiwgMzd9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmMxXzdfcGluc1tdID0gezQwLCA0MX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGkyYzFfOF9waW5zW10gPSB7NDQsIDQ1fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaTJjMV85X3BpbnNbXSA9IHs0OCwgNDl9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpMmMxXzEwX3BpbnNbXSA9IHs1MiwgNTN9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB0dGMwXzBfcGluc1tdID0gezE4LCAxOX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHR0YzBfMV9waW5zW10gPSB7MzAsIDMxfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdHRjMF8yX3BpbnNbXSA9IHs0MiwgNDN9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB0dGMxXzBfcGluc1tdID0gezE2LCAxN307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHR0YzFfMV9waW5zW10gPSB7MjgsIDI5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdHRjMV8yX3BpbnNbXSA9IHs0MCwgNDF9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzd2R0MF8wX3BpbnNbXSA9IHsxNCwgMTV9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzd2R0MF8xX3BpbnNbXSA9IHsyNiwgMjd9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzd2R0MF8yX3BpbnNbXSA9IHszOCwgMzl9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzd2R0MF8zX3BpbnNbXSA9IHs1MCwgNTF9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzd2R0MF80X3BpbnNbXSA9IHs1MiwgNTN9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBncGlvMF8wX3BpbnNbXSA9IHswfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMV9waW5zW10gPSB7MX07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGdwaW8wXzJfcGluc1tdID0gezJ9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBncGlvMF8zX3BpbnNbXSA9IHszfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNF9waW5zW10gPSB7NH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGdwaW8wXzVfcGluc1tdID0gezV9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBncGlvMF82X3BpbnNbXSA9IHs2fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfN19waW5zW10gPSB7N307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGdwaW8wXzhfcGluc1tdID0gezh9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBncGlvMF85X3BpbnNbXSA9IHs5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMTBfcGluc1tdID0gezEwfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMTFfcGluc1tdID0gezExfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMTJfcGluc1tdID0gezEyfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMTNfcGluc1tdID0gezEzfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMTRfcGluc1tdID0gezE0fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMTVfcGluc1tdID0gezE1fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMTZfcGluc1tdID0gezE2fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMTdfcGluc1tdID0gezE3fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMThfcGluc1tdID0gezE4fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMTlfcGluc1tdID0gezE5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMjBfcGluc1tdID0gezIwfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMjFfcGluc1tdID0gezIxfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMjJfcGluc1tdID0gezIyfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMjNfcGluc1tdID0gezIzfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMjRfcGluc1tdID0gezI0fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMjVfcGluc1tdID0gezI1fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMjZfcGluc1tdID0gezI2fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMjdfcGluc1tdID0gezI3fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMjhfcGluc1tdID0gezI4fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMjlfcGluc1tdID0gezI5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMzBfcGluc1tdID0gezMwfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMzFfcGluc1tdID0gezMxfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMzJfcGluc1tdID0gezMyfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMzNfcGluc1tdID0gezMzfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMzRfcGluc1tdID0gezM0fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMzVfcGluc1tdID0gezM1fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMzZfcGluc1tdID0gezM2fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMzdfcGluc1tdID0gezM3fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMzhfcGluc1tdID0gezM4fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfMzlfcGluc1tdID0gezM5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNDBfcGluc1tdID0gezQwfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNDFfcGluc1tdID0gezQxfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNDJfcGluc1tdID0gezQyfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNDNfcGluc1tdID0gezQzfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNDRfcGluc1tdID0gezQ0fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNDVfcGluc1tdID0gezQ1fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNDZfcGluc1tdID0gezQ2fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNDdfcGluc1tdID0gezQ3fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNDhfcGluc1tdID0gezQ4fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNDlfcGluc1tdID0gezQ5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNTBfcGluc1tdID0gezUwfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNTFfcGluc1tdID0gezUxfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNTJfcGluc1tdID0gezUyfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbzBfNTNfcGluc1tdID0gezUzfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXNiMF8wX3BpbnNbXSA9IHsyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIDM2LAorCQkJCQkgICAzNywgMzgsIDM5fTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXNiMV8wX3BpbnNbXSA9IHs0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LAorCQkJCQkgICA0OSwgNTAsIDUxfTsKKworI2RlZmluZSBERUZJTkVfWllOUV9QSU5DVFJMX0dSUChubSkgXAorCXsgXAorCQkubmFtZSA9ICNubSAiX2dycCIsIFwKKwkJLnBpbnMgPSBubSAjIyBfcGlucywgXAorCQkubnBpbnMgPSBBUlJBWV9TSVpFKG5tICMjIF9waW5zKSwgXAorCX0KKworc3RydWN0IHp5bnFfcGN0cmxfZ3JvdXAgenlucV9wY3RybF9ncm91cHNbXSA9IHsKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChldGhlcm5ldDBfMCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZXRoZXJuZXQxXzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKG1kaW8wXzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKG1kaW8xXzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHFzcGkwXzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHFzcGkxXzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHFzcGlfZmJjbGspLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHFzcGlfY3MxKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChzcGkwXzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNwaTBfMSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoc3BpMF8yKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChzcGkxXzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNwaTFfMSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoc3BpMV8yKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChzcGkxXzMpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNkaW8wXzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNkaW8wXzEpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNkaW8wXzIpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNkaW8xXzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNkaW8xXzEpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNkaW8xXzIpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNkaW8xXzMpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNkaW8wX2VtaW9fd3ApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNkaW8wX2VtaW9fY2QpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNkaW8xX2VtaW9fd3ApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNkaW8xX2VtaW9fY2QpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNtYzBfbm9yKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChzbWMwX25vcl9jczEpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHNtYzBfbm9yX2FkZHIyNSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoc21jMF9uYW5kKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChjYW4wXzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGNhbjBfMSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoY2FuMF8yKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChjYW4wXzMpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGNhbjBfNCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoY2FuMF81KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChjYW4wXzYpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGNhbjBfNyksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoY2FuMF84KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChjYW4wXzkpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGNhbjBfMTApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGNhbjFfMCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoY2FuMV8xKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChjYW4xXzIpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGNhbjFfMyksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoY2FuMV80KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChjYW4xXzUpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGNhbjFfNiksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoY2FuMV83KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChjYW4xXzgpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGNhbjFfOSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoY2FuMV8xMCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoY2FuMV8xMSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAodWFydDBfMCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAodWFydDBfMSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAodWFydDBfMiksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAodWFydDBfMyksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAodWFydDBfNCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAodWFydDBfNSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAodWFydDBfNiksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAodWFydDBfNyksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAodWFydDBfOCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAodWFydDBfOSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAodWFydDBfMTApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHVhcnQxXzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHVhcnQxXzEpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHVhcnQxXzIpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHVhcnQxXzMpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHVhcnQxXzQpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHVhcnQxXzUpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHVhcnQxXzYpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHVhcnQxXzcpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHVhcnQxXzgpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHVhcnQxXzkpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHVhcnQxXzEwKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUCh1YXJ0MV8xMSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoaTJjMF8wKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChpMmMwXzEpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGkyYzBfMiksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoaTJjMF8zKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChpMmMwXzQpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGkyYzBfNSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoaTJjMF82KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChpMmMwXzcpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGkyYzBfOCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoaTJjMF85KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChpMmMwXzEwKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChpMmMxXzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGkyYzFfMSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoaTJjMV8yKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChpMmMxXzMpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGkyYzFfNCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoaTJjMV81KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChpMmMxXzYpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGkyYzFfNyksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoaTJjMV84KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChpMmMxXzkpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGkyYzFfMTApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHR0YzBfMCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAodHRjMF8xKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUCh0dGMwXzIpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHR0YzFfMCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAodHRjMV8xKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUCh0dGMxXzIpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHN3ZHQwXzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHN3ZHQwXzEpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHN3ZHQwXzIpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHN3ZHQwXzMpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKHN3ZHQwXzQpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzEpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzIpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzMpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzQpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzUpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzYpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzcpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzgpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzkpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzEwKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF8xMSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZ3BpbzBfMTIpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzEzKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF8xNCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZ3BpbzBfMTUpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzE2KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF8xNyksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZ3BpbzBfMTgpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzE5KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF8yMCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZ3BpbzBfMjEpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzIyKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF8yMyksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZ3BpbzBfMjQpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzI1KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF8yNiksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZ3BpbzBfMjcpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzI4KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF8yOSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZ3BpbzBfMzApLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzMxKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF8zMiksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZ3BpbzBfMzMpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzM0KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF8zNSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZ3BpbzBfMzYpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzM3KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF8zOCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZ3BpbzBfMzkpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzQwKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF80MSksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZ3BpbzBfNDIpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzQzKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF80NCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZ3BpbzBfNDUpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzQ2KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF80NyksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZ3BpbzBfNDgpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzQ5KSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF81MCksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAoZ3BpbzBfNTEpLAorCURFRklORV9aWU5RX1BJTkNUUkxfR1JQKGdwaW8wXzUyKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUChncGlvMF81MyksCisJREVGSU5FX1pZTlFfUElOQ1RSTF9HUlAodXNiMF8wKSwKKwlERUZJTkVfWllOUV9QSU5DVFJMX0dSUCh1c2IxXzApLAorfTsKKworLyogZnVuY3Rpb24gZ3JvdXBzICovCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGV0aGVybmV0MF9ncm91cHNbXSA9IHsiZXRoZXJuZXQwXzBfZ3JwIn07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGV0aGVybmV0MV9ncm91cHNbXSA9IHsiZXRoZXJuZXQxXzBfZ3JwIn07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVzYjBfZ3JvdXBzW10gPSB7InVzYjBfMF9ncnAifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdXNiMV9ncm91cHNbXSA9IHsidXNiMV8wX2dycCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtZGlvMF9ncm91cHNbXSA9IHsibWRpbzBfMF9ncnAifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWRpbzFfZ3JvdXBzW10gPSB7Im1kaW8xXzBfZ3JwIn07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHFzcGkwX2dyb3Vwc1tdID0geyJxc3BpMF8wX2dycCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBxc3BpMV9ncm91cHNbXSA9IHsicXNwaTBfMV9ncnAifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcXNwaV9mYmNsa19ncm91cHNbXSA9IHsicXNwaV9mYmNsa19ncnAifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcXNwaV9jczFfZ3JvdXBzW10gPSB7InFzcGlfY3MxX2dycCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzcGkwX2dyb3Vwc1tdID0geyJzcGkwXzBfZ3JwIiwgInNwaTBfMV9ncnAiLAorCQkJCQkgICAic3BpMF8yX2dycCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzcGkxX2dyb3Vwc1tdID0geyJzcGkxXzBfZ3JwIiwgInNwaTFfMV9ncnAiLAorCQkJCQkgICAic3BpMV8yX2dycCIsICJzcGkxXzNfZ3JwIn07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNkaW8wX2dyb3Vwc1tdID0geyJzZGlvMF8wX2dycCIsICJzZGlvMF8xX2dycCIsCisJCQkJCSAgICAic2RpbzBfMl9ncnAifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2RpbzFfZ3JvdXBzW10gPSB7InNkaW8xXzBfZ3JwIiwgInNkaW8xXzFfZ3JwIiwKKwkJCQkJICAgICJzZGlvMV8yX2dycCIsICJzZGlvMV8zX2dycCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZGlvMF9wY19ncm91cHNbXSA9IHsiZ3BpbzBfMF9ncnAiLAorCQkiZ3BpbzBfMl9ncnAiLCAiZ3BpbzBfNF9ncnAiLCAiZ3BpbzBfNl9ncnAiLAorCQkiZ3BpbzBfOF9ncnAiLCAiZ3BpbzBfMTBfZ3JwIiwgImdwaW8wXzEyX2dycCIsCisJCSJncGlvMF8xNF9ncnAiLCAiZ3BpbzBfMTZfZ3JwIiwgImdwaW8wXzE4X2dycCIsCisJCSJncGlvMF8yMF9ncnAiLCAiZ3BpbzBfMjJfZ3JwIiwgImdwaW8wXzI0X2dycCIsCisJCSJncGlvMF8yNl9ncnAiLCAiZ3BpbzBfMjhfZ3JwIiwgImdwaW8wXzMwX2dycCIsCisJCSJncGlvMF8zMl9ncnAiLCAiZ3BpbzBfMzRfZ3JwIiwgImdwaW8wXzM2X2dycCIsCisJCSJncGlvMF8zOF9ncnAiLCAiZ3BpbzBfNDBfZ3JwIiwgImdwaW8wXzQyX2dycCIsCisJCSJncGlvMF80NF9ncnAiLCAiZ3BpbzBfNDZfZ3JwIiwgImdwaW8wXzQ4X2dycCIsCisJCSJncGlvMF81MF9ncnAiLCAiZ3BpbzBfNTJfZ3JwIn07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNkaW8xX3BjX2dyb3Vwc1tdID0geyJncGlvMF8xX2dycCIsCisJCSJncGlvMF8zX2dycCIsICJncGlvMF81X2dycCIsICJncGlvMF83X2dycCIsCisJCSJncGlvMF85X2dycCIsICJncGlvMF8xMV9ncnAiLCAiZ3BpbzBfMTNfZ3JwIiwKKwkJImdwaW8wXzE1X2dycCIsICJncGlvMF8xN19ncnAiLCAiZ3BpbzBfMTlfZ3JwIiwKKwkJImdwaW8wXzIxX2dycCIsICJncGlvMF8yM19ncnAiLCAiZ3BpbzBfMjVfZ3JwIiwKKwkJImdwaW8wXzI3X2dycCIsICJncGlvMF8yOV9ncnAiLCAiZ3BpbzBfMzFfZ3JwIiwKKwkJImdwaW8wXzMzX2dycCIsICJncGlvMF8zNV9ncnAiLCAiZ3BpbzBfMzdfZ3JwIiwKKwkJImdwaW8wXzM5X2dycCIsICJncGlvMF80MV9ncnAiLCAiZ3BpbzBfNDNfZ3JwIiwKKwkJImdwaW8wXzQ1X2dycCIsICJncGlvMF80N19ncnAiLCAiZ3BpbzBfNDlfZ3JwIiwKKwkJImdwaW8wXzUxX2dycCIsICJncGlvMF81M19ncnAifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2RpbzBfY2RfZ3JvdXBzW10gPSB7ImdwaW8wXzBfZ3JwIiwKKwkJImdwaW8wXzJfZ3JwIiwgImdwaW8wXzRfZ3JwIiwgImdwaW8wXzZfZ3JwIiwKKwkJImdwaW8wXzEwX2dycCIsICJncGlvMF8xMl9ncnAiLAorCQkiZ3BpbzBfMTRfZ3JwIiwgImdwaW8wXzE2X2dycCIsICJncGlvMF8xOF9ncnAiLAorCQkiZ3BpbzBfMjBfZ3JwIiwgImdwaW8wXzIyX2dycCIsICJncGlvMF8yNF9ncnAiLAorCQkiZ3BpbzBfMjZfZ3JwIiwgImdwaW8wXzI4X2dycCIsICJncGlvMF8zMF9ncnAiLAorCQkiZ3BpbzBfMzJfZ3JwIiwgImdwaW8wXzM0X2dycCIsICJncGlvMF8zNl9ncnAiLAorCQkiZ3BpbzBfMzhfZ3JwIiwgImdwaW8wXzQwX2dycCIsICJncGlvMF80Ml9ncnAiLAorCQkiZ3BpbzBfNDRfZ3JwIiwgImdwaW8wXzQ2X2dycCIsICJncGlvMF80OF9ncnAiLAorCQkiZ3BpbzBfNTBfZ3JwIiwgImdwaW8wXzUyX2dycCIsICJncGlvMF8xX2dycCIsCisJCSJncGlvMF8zX2dycCIsICJncGlvMF81X2dycCIsCisJCSJncGlvMF85X2dycCIsICJncGlvMF8xMV9ncnAiLCAiZ3BpbzBfMTNfZ3JwIiwKKwkJImdwaW8wXzE1X2dycCIsICJncGlvMF8xN19ncnAiLCAiZ3BpbzBfMTlfZ3JwIiwKKwkJImdwaW8wXzIxX2dycCIsICJncGlvMF8yM19ncnAiLCAiZ3BpbzBfMjVfZ3JwIiwKKwkJImdwaW8wXzI3X2dycCIsICJncGlvMF8yOV9ncnAiLCAiZ3BpbzBfMzFfZ3JwIiwKKwkJImdwaW8wXzMzX2dycCIsICJncGlvMF8zNV9ncnAiLCAiZ3BpbzBfMzdfZ3JwIiwKKwkJImdwaW8wXzM5X2dycCIsICJncGlvMF80MV9ncnAiLCAiZ3BpbzBfNDNfZ3JwIiwKKwkJImdwaW8wXzQ1X2dycCIsICJncGlvMF80N19ncnAiLCAiZ3BpbzBfNDlfZ3JwIiwKKwkJImdwaW8wXzUxX2dycCIsICJncGlvMF81M19ncnAiLCAic2RpbzBfZW1pb19jZF9ncnAifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2RpbzBfd3BfZ3JvdXBzW10gPSB7ImdwaW8wXzBfZ3JwIiwKKwkJImdwaW8wXzJfZ3JwIiwgImdwaW8wXzRfZ3JwIiwgImdwaW8wXzZfZ3JwIiwKKwkJImdwaW8wXzEwX2dycCIsICJncGlvMF8xMl9ncnAiLAorCQkiZ3BpbzBfMTRfZ3JwIiwgImdwaW8wXzE2X2dycCIsICJncGlvMF8xOF9ncnAiLAorCQkiZ3BpbzBfMjBfZ3JwIiwgImdwaW8wXzIyX2dycCIsICJncGlvMF8yNF9ncnAiLAorCQkiZ3BpbzBfMjZfZ3JwIiwgImdwaW8wXzI4X2dycCIsICJncGlvMF8zMF9ncnAiLAorCQkiZ3BpbzBfMzJfZ3JwIiwgImdwaW8wXzM0X2dycCIsICJncGlvMF8zNl9ncnAiLAorCQkiZ3BpbzBfMzhfZ3JwIiwgImdwaW8wXzQwX2dycCIsICJncGlvMF80Ml9ncnAiLAorCQkiZ3BpbzBfNDRfZ3JwIiwgImdwaW8wXzQ2X2dycCIsICJncGlvMF80OF9ncnAiLAorCQkiZ3BpbzBfNTBfZ3JwIiwgImdwaW8wXzUyX2dycCIsICJncGlvMF8xX2dycCIsCisJCSJncGlvMF8zX2dycCIsICJncGlvMF81X2dycCIsCisJCSJncGlvMF85X2dycCIsICJncGlvMF8xMV9ncnAiLCAiZ3BpbzBfMTNfZ3JwIiwKKwkJImdwaW8wXzE1X2dycCIsICJncGlvMF8xN19ncnAiLCAiZ3BpbzBfMTlfZ3JwIiwKKwkJImdwaW8wXzIxX2dycCIsICJncGlvMF8yM19ncnAiLCAiZ3BpbzBfMjVfZ3JwIiwKKwkJImdwaW8wXzI3X2dycCIsICJncGlvMF8yOV9ncnAiLCAiZ3BpbzBfMzFfZ3JwIiwKKwkJImdwaW8wXzMzX2dycCIsICJncGlvMF8zNV9ncnAiLCAiZ3BpbzBfMzdfZ3JwIiwKKwkJImdwaW8wXzM5X2dycCIsICJncGlvMF80MV9ncnAiLCAiZ3BpbzBfNDNfZ3JwIiwKKwkJImdwaW8wXzQ1X2dycCIsICJncGlvMF80N19ncnAiLCAiZ3BpbzBfNDlfZ3JwIiwKKwkJImdwaW8wXzUxX2dycCIsICJncGlvMF81M19ncnAiLCAic2RpbzBfZW1pb193cF9ncnAifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2RpbzFfY2RfZ3JvdXBzW10gPSB7ImdwaW8wXzBfZ3JwIiwKKwkJImdwaW8wXzJfZ3JwIiwgImdwaW8wXzRfZ3JwIiwgImdwaW8wXzZfZ3JwIiwKKwkJImdwaW8wXzEwX2dycCIsICJncGlvMF8xMl9ncnAiLAorCQkiZ3BpbzBfMTRfZ3JwIiwgImdwaW8wXzE2X2dycCIsICJncGlvMF8xOF9ncnAiLAorCQkiZ3BpbzBfMjBfZ3JwIiwgImdwaW8wXzIyX2dycCIsICJncGlvMF8yNF9ncnAiLAorCQkiZ3BpbzBfMjZfZ3JwIiwgImdwaW8wXzI4X2dycCIsICJncGlvMF8zMF9ncnAiLAorCQkiZ3BpbzBfMzJfZ3JwIiwgImdwaW8wXzM0X2dycCIsICJncGlvMF8zNl9ncnAiLAorCQkiZ3BpbzBfMzhfZ3JwIiwgImdwaW8wXzQwX2dycCIsICJncGlvMF80Ml9ncnAiLAorCQkiZ3BpbzBfNDRfZ3JwIiwgImdwaW8wXzQ2X2dycCIsICJncGlvMF80OF9ncnAiLAorCQkiZ3BpbzBfNTBfZ3JwIiwgImdwaW8wXzUyX2dycCIsICJncGlvMF8xX2dycCIsCisJCSJncGlvMF8zX2dycCIsICJncGlvMF81X2dycCIsCisJCSJncGlvMF85X2dycCIsICJncGlvMF8xMV9ncnAiLCAiZ3BpbzBfMTNfZ3JwIiwKKwkJImdwaW8wXzE1X2dycCIsICJncGlvMF8xN19ncnAiLCAiZ3BpbzBfMTlfZ3JwIiwKKwkJImdwaW8wXzIxX2dycCIsICJncGlvMF8yM19ncnAiLCAiZ3BpbzBfMjVfZ3JwIiwKKwkJImdwaW8wXzI3X2dycCIsICJncGlvMF8yOV9ncnAiLCAiZ3BpbzBfMzFfZ3JwIiwKKwkJImdwaW8wXzMzX2dycCIsICJncGlvMF8zNV9ncnAiLCAiZ3BpbzBfMzdfZ3JwIiwKKwkJImdwaW8wXzM5X2dycCIsICJncGlvMF80MV9ncnAiLCAiZ3BpbzBfNDNfZ3JwIiwKKwkJImdwaW8wXzQ1X2dycCIsICJncGlvMF80N19ncnAiLCAiZ3BpbzBfNDlfZ3JwIiwKKwkJImdwaW8wXzUxX2dycCIsICJncGlvMF81M19ncnAiLCAic2RpbzFfZW1pb19jZF9ncnAifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2RpbzFfd3BfZ3JvdXBzW10gPSB7ImdwaW8wXzBfZ3JwIiwKKwkJImdwaW8wXzJfZ3JwIiwgImdwaW8wXzRfZ3JwIiwgImdwaW8wXzZfZ3JwIiwKKwkJImdwaW8wXzEwX2dycCIsICJncGlvMF8xMl9ncnAiLAorCQkiZ3BpbzBfMTRfZ3JwIiwgImdwaW8wXzE2X2dycCIsICJncGlvMF8xOF9ncnAiLAorCQkiZ3BpbzBfMjBfZ3JwIiwgImdwaW8wXzIyX2dycCIsICJncGlvMF8yNF9ncnAiLAorCQkiZ3BpbzBfMjZfZ3JwIiwgImdwaW8wXzI4X2dycCIsICJncGlvMF8zMF9ncnAiLAorCQkiZ3BpbzBfMzJfZ3JwIiwgImdwaW8wXzM0X2dycCIsICJncGlvMF8zNl9ncnAiLAorCQkiZ3BpbzBfMzhfZ3JwIiwgImdwaW8wXzQwX2dycCIsICJncGlvMF80Ml9ncnAiLAorCQkiZ3BpbzBfNDRfZ3JwIiwgImdwaW8wXzQ2X2dycCIsICJncGlvMF80OF9ncnAiLAorCQkiZ3BpbzBfNTBfZ3JwIiwgImdwaW8wXzUyX2dycCIsICJncGlvMF8xX2dycCIsCisJCSJncGlvMF8zX2dycCIsICJncGlvMF81X2dycCIsCisJCSJncGlvMF85X2dycCIsICJncGlvMF8xMV9ncnAiLCAiZ3BpbzBfMTNfZ3JwIiwKKwkJImdwaW8wXzE1X2dycCIsICJncGlvMF8xN19ncnAiLCAiZ3BpbzBfMTlfZ3JwIiwKKwkJImdwaW8wXzIxX2dycCIsICJncGlvMF8yM19ncnAiLCAiZ3BpbzBfMjVfZ3JwIiwKKwkJImdwaW8wXzI3X2dycCIsICJncGlvMF8yOV9ncnAiLCAiZ3BpbzBfMzFfZ3JwIiwKKwkJImdwaW8wXzMzX2dycCIsICJncGlvMF8zNV9ncnAiLCAiZ3BpbzBfMzdfZ3JwIiwKKwkJImdwaW8wXzM5X2dycCIsICJncGlvMF80MV9ncnAiLCAiZ3BpbzBfNDNfZ3JwIiwKKwkJImdwaW8wXzQ1X2dycCIsICJncGlvMF80N19ncnAiLCAiZ3BpbzBfNDlfZ3JwIiwKKwkJImdwaW8wXzUxX2dycCIsICJncGlvMF81M19ncnAiLCAic2RpbzFfZW1pb193cF9ncnAifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc21jMF9ub3JfZ3JvdXBzW10gPSB7InNtYzBfbm9yIn07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNtYzBfbm9yX2NzMV9ncm91cHNbXSA9IHsic21jMF9ub3JfY3MxX2dycCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzbWMwX25vcl9hZGRyMjVfZ3JvdXBzW10gPSB7InNtYzBfbm9yX2FkZHIyNV9ncnAifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc21jMF9uYW5kX2dyb3Vwc1tdID0geyJzbWMwX25hbmQifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2FuMF9ncm91cHNbXSA9IHsiY2FuMF8wX2dycCIsICJjYW4wXzFfZ3JwIiwKKwkJImNhbjBfMl9ncnAiLCAiY2FuMF8zX2dycCIsICJjYW4wXzRfZ3JwIiwgImNhbjBfNV9ncnAiLAorCQkiY2FuMF82X2dycCIsICJjYW4wXzdfZ3JwIiwgImNhbjBfOF9ncnAiLCAiY2FuMF85X2dycCIsCisJCSJjYW4wXzEwX2dycCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjYW4xX2dyb3Vwc1tdID0geyJjYW4xXzBfZ3JwIiwgImNhbjFfMV9ncnAiLAorCQkiY2FuMV8yX2dycCIsICJjYW4xXzNfZ3JwIiwgImNhbjFfNF9ncnAiLCAiY2FuMV81X2dycCIsCisJCSJjYW4xXzZfZ3JwIiwgImNhbjFfN19ncnAiLCAiY2FuMV84X2dycCIsICJjYW4xXzlfZ3JwIiwKKwkJImNhbjFfMTBfZ3JwIiwgImNhbjFfMTFfZ3JwIn07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVhcnQwX2dyb3Vwc1tdID0geyJ1YXJ0MF8wX2dycCIsICJ1YXJ0MF8xX2dycCIsCisJCSJ1YXJ0MF8yX2dycCIsICJ1YXJ0MF8zX2dycCIsICJ1YXJ0MF80X2dycCIsICJ1YXJ0MF81X2dycCIsCisJCSJ1YXJ0MF82X2dycCIsICJ1YXJ0MF83X2dycCIsICJ1YXJ0MF84X2dycCIsICJ1YXJ0MF85X2dycCIsCisJCSJ1YXJ0MF8xMF9ncnAifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdWFydDFfZ3JvdXBzW10gPSB7InVhcnQxXzBfZ3JwIiwgInVhcnQxXzFfZ3JwIiwKKwkJInVhcnQxXzJfZ3JwIiwgInVhcnQxXzNfZ3JwIiwgInVhcnQxXzRfZ3JwIiwgInVhcnQxXzVfZ3JwIiwKKwkJInVhcnQxXzZfZ3JwIiwgInVhcnQxXzdfZ3JwIiwgInVhcnQxXzhfZ3JwIiwgInVhcnQxXzlfZ3JwIiwKKwkJInVhcnQxXzEwX2dycCIsICJ1YXJ0MV8xMV9ncnAifTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaTJjMF9ncm91cHNbXSA9IHsiaTJjMF8wX2dycCIsICJpMmMwXzFfZ3JwIiwKKwkJImkyYzBfMl9ncnAiLCAiaTJjMF8zX2dycCIsICJpMmMwXzRfZ3JwIiwgImkyYzBfNV9ncnAiLAorCQkiaTJjMF82X2dycCIsICJpMmMwXzdfZ3JwIiwgImkyYzBfOF9ncnAiLCAiaTJjMF85X2dycCIsCisJCSJpMmMwXzEwX2dycCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpMmMxX2dyb3Vwc1tdID0geyJpMmMxXzBfZ3JwIiwgImkyYzFfMV9ncnAiLAorCQkiaTJjMV8yX2dycCIsICJpMmMxXzNfZ3JwIiwgImkyYzFfNF9ncnAiLCAiaTJjMV81X2dycCIsCisJCSJpMmMxXzZfZ3JwIiwgImkyYzFfN19ncnAiLCAiaTJjMV84X2dycCIsICJpMmMxXzlfZ3JwIiwKKwkJImkyYzFfMTBfZ3JwIn07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHR0YzBfZ3JvdXBzW10gPSB7InR0YzBfMF9ncnAiLCAidHRjMF8xX2dycCIsCisJCQkJCSAgICJ0dGMwXzJfZ3JwIn07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHR0YzFfZ3JvdXBzW10gPSB7InR0YzFfMF9ncnAiLCAidHRjMV8xX2dycCIsCisJCQkJCSAgICJ0dGMxXzJfZ3JwIn07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHN3ZHQwX2dyb3Vwc1tdID0geyJzd2R0MF8wX2dycCIsICJzd2R0MF8xX2dycCIsCisJCSJzd2R0MF8yX2dycCIsICJzd2R0MF8zX2dycCIsICJzd2R0MF80X2dycCJ9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBncGlvMF9ncm91cHNbXSA9IHsiZ3BpbzBfMF9ncnAiLAorCQkiZ3BpbzBfMl9ncnAiLCAiZ3BpbzBfNF9ncnAiLCAiZ3BpbzBfNl9ncnAiLAorCQkiZ3BpbzBfOF9ncnAiLCAiZ3BpbzBfMTBfZ3JwIiwgImdwaW8wXzEyX2dycCIsCisJCSJncGlvMF8xNF9ncnAiLCAiZ3BpbzBfMTZfZ3JwIiwgImdwaW8wXzE4X2dycCIsCisJCSJncGlvMF8yMF9ncnAiLCAiZ3BpbzBfMjJfZ3JwIiwgImdwaW8wXzI0X2dycCIsCisJCSJncGlvMF8yNl9ncnAiLCAiZ3BpbzBfMjhfZ3JwIiwgImdwaW8wXzMwX2dycCIsCisJCSJncGlvMF8zMl9ncnAiLCAiZ3BpbzBfMzRfZ3JwIiwgImdwaW8wXzM2X2dycCIsCisJCSJncGlvMF8zOF9ncnAiLCAiZ3BpbzBfNDBfZ3JwIiwgImdwaW8wXzQyX2dycCIsCisJCSJncGlvMF80NF9ncnAiLCAiZ3BpbzBfNDZfZ3JwIiwgImdwaW8wXzQ4X2dycCIsCisJCSJncGlvMF81MF9ncnAiLCAiZ3BpbzBfNTJfZ3JwIiwgImdwaW8wXzFfZ3JwIiwKKwkJImdwaW8wXzNfZ3JwIiwgImdwaW8wXzVfZ3JwIiwgImdwaW8wXzdfZ3JwIiwKKwkJImdwaW8wXzlfZ3JwIiwgImdwaW8wXzExX2dycCIsICJncGlvMF8xM19ncnAiLAorCQkiZ3BpbzBfMTVfZ3JwIiwgImdwaW8wXzE3X2dycCIsICJncGlvMF8xOV9ncnAiLAorCQkiZ3BpbzBfMjFfZ3JwIiwgImdwaW8wXzIzX2dycCIsICJncGlvMF8yNV9ncnAiLAorCQkiZ3BpbzBfMjdfZ3JwIiwgImdwaW8wXzI5X2dycCIsICJncGlvMF8zMV9ncnAiLAorCQkiZ3BpbzBfMzNfZ3JwIiwgImdwaW8wXzM1X2dycCIsICJncGlvMF8zN19ncnAiLAorCQkiZ3BpbzBfMzlfZ3JwIiwgImdwaW8wXzQxX2dycCIsICJncGlvMF80M19ncnAiLAorCQkiZ3BpbzBfNDVfZ3JwIiwgImdwaW8wXzQ3X2dycCIsICJncGlvMF80OV9ncnAiLAorCQkiZ3BpbzBfNTFfZ3JwIiwgImdwaW8wXzUzX2dycCJ9OworCisjZGVmaW5lIERFRklORV9aWU5RX1BJTk1VWF9GVU5DVElPTihmbmFtZSwgbXZhbCkJXAorCVtaWU5RX1BNVVhfIyNmbmFtZV0gPSB7CQkJCVwKKwkJLm5hbWUgPSAjZm5hbWUsCQkJCVwKKwkJLmdyb3VwcyA9IGZuYW1lIyNfZ3JvdXBzLAkJXAorCQkubmdyb3VwcyA9IEFSUkFZX1NJWkUoZm5hbWUjI19ncm91cHMpLAlcCisJCS5tdXhfdmFsID0gbXZhbCwJCQlcCisJfQorCisjZGVmaW5lIERFRklORV9aWU5RX1BJTk1VWF9GVU5DVElPTl9NVVgoZm5hbWUsIG12YWwsIG11eCwgbWFzaywgc2hpZnQpCVwKKwlbWllOUV9QTVVYXyMjZm5hbWVdID0gewkJCQlcCisJCS5uYW1lID0gI2ZuYW1lLAkJCQlcCisJCS5ncm91cHMgPSBmbmFtZSMjX2dyb3VwcywJCVwKKwkJLm5ncm91cHMgPSBBUlJBWV9TSVpFKGZuYW1lIyNfZ3JvdXBzKSwJXAorCQkubXV4X3ZhbCA9IG12YWwsCQkJXAorCQkubXV4X21hc2sgPSBtYXNrLAkJCVwKKwkJLm11eF9zaGlmdCA9IHNoaWZ0LAkJCVwKKwl9CisKKyNkZWZpbmUgWllOUV9TRElPX1dQX1NISUZUCTAKKyNkZWZpbmUgWllOUV9TRElPX1dQX01BU0sJKDB4M2YgPDwgWllOUV9TRElPX1dQX1NISUZUKQorI2RlZmluZSBaWU5RX1NESU9fQ0RfU0hJRlQJMTYKKyNkZWZpbmUgWllOUV9TRElPX0NEX01BU0sJKDB4M2YgPDwgWllOUV9TRElPX0NEX1NISUZUKQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHp5bnFfcGlubXV4X2Z1bmN0aW9uIHp5bnFfcG11eF9mdW5jdGlvbnNbXSA9IHsKKwlERUZJTkVfWllOUV9QSU5NVVhfRlVOQ1RJT04oZXRoZXJuZXQwLCAxKSwKKwlERUZJTkVfWllOUV9QSU5NVVhfRlVOQ1RJT04oZXRoZXJuZXQxLCAxKSwKKwlERUZJTkVfWllOUV9QSU5NVVhfRlVOQ1RJT04odXNiMCwgMiksCisJREVGSU5FX1pZTlFfUElOTVVYX0ZVTkNUSU9OKHVzYjEsIDIpLAorCURFRklORV9aWU5RX1BJTk1VWF9GVU5DVElPTihtZGlvMCwgMHg0MCksCisJREVGSU5FX1pZTlFfUElOTVVYX0ZVTkNUSU9OKG1kaW8xLCAweDUwKSwKKwlERUZJTkVfWllOUV9QSU5NVVhfRlVOQ1RJT04ocXNwaTAsIDEpLAorCURFRklORV9aWU5RX1BJTk1VWF9GVU5DVElPTihxc3BpMSwgMSksCisJREVGSU5FX1pZTlFfUElOTVVYX0ZVTkNUSU9OKHFzcGlfZmJjbGssIDEpLAorCURFRklORV9aWU5RX1BJTk1VWF9GVU5DVElPTihxc3BpX2NzMSwgMSksCisJREVGSU5FX1pZTlFfUElOTVVYX0ZVTkNUSU9OKHNwaTAsIDB4NTApLAorCURFRklORV9aWU5RX1BJTk1VWF9GVU5DVElPTihzcGkxLCAweDUwKSwKKwlERUZJTkVfWllOUV9QSU5NVVhfRlVOQ1RJT04oc2RpbzAsIDB4NDApLAorCURFRklORV9aWU5RX1BJTk1VWF9GVU5DVElPTihzZGlvMF9wYywgMHhjKSwKKwlERUZJTkVfWllOUV9QSU5NVVhfRlVOQ1RJT05fTVVYKHNkaW8wX3dwLCAwLCAxMzAsIFpZTlFfU0RJT19XUF9NQVNLLAorCQkJCQlaWU5RX1NESU9fV1BfU0hJRlQpLAorCURFRklORV9aWU5RX1BJTk1VWF9GVU5DVElPTl9NVVgoc2RpbzBfY2QsIDAsIDEzMCwgWllOUV9TRElPX0NEX01BU0ssCisJCQkJCVpZTlFfU0RJT19DRF9TSElGVCksCisJREVGSU5FX1pZTlFfUElOTVVYX0ZVTkNUSU9OKHNkaW8xLCAweDQwKSwKKwlERUZJTkVfWllOUV9QSU5NVVhfRlVOQ1RJT04oc2RpbzFfcGMsIDB4YyksCisJREVGSU5FX1pZTlFfUElOTVVYX0ZVTkNUSU9OX01VWChzZGlvMV93cCwgMCwgMTM0LCBaWU5RX1NESU9fV1BfTUFTSywKKwkJCQkJWllOUV9TRElPX1dQX1NISUZUKSwKKwlERUZJTkVfWllOUV9QSU5NVVhfRlVOQ1RJT05fTVVYKHNkaW8xX2NkLCAwLCAxMzQsIFpZTlFfU0RJT19DRF9NQVNLLAorCQkJCQlaWU5RX1NESU9fQ0RfU0hJRlQpLAorCURFRklORV9aWU5RX1BJTk1VWF9GVU5DVElPTihzbWMwX25vciwgNCksCisJREVGSU5FX1pZTlFfUElOTVVYX0ZVTkNUSU9OKHNtYzBfbm9yX2NzMSwgOCksCisJREVGSU5FX1pZTlFfUElOTVVYX0ZVTkNUSU9OKHNtYzBfbm9yX2FkZHIyNSwgNCksCisJREVGSU5FX1pZTlFfUElOTVVYX0ZVTkNUSU9OKHNtYzBfbmFuZCwgOCksCisJREVGSU5FX1pZTlFfUElOTVVYX0ZVTkNUSU9OKGNhbjAsIDB4MTApLAorCURFRklORV9aWU5RX1BJTk1VWF9GVU5DVElPTihjYW4xLCAweDEwKSwKKwlERUZJTkVfWllOUV9QSU5NVVhfRlVOQ1RJT04odWFydDAsIDB4NzApLAorCURFRklORV9aWU5RX1BJTk1VWF9GVU5DVElPTih1YXJ0MSwgMHg3MCksCisJREVGSU5FX1pZTlFfUElOTVVYX0ZVTkNUSU9OKGkyYzAsIDB4MjApLAorCURFRklORV9aWU5RX1BJTk1VWF9GVU5DVElPTihpMmMxLCAweDIwKSwKKwlERUZJTkVfWllOUV9QSU5NVVhfRlVOQ1RJT04odHRjMCwgMHg2MCksCisJREVGSU5FX1pZTlFfUElOTVVYX0ZVTkNUSU9OKHR0YzEsIDB4NjApLAorCURFRklORV9aWU5RX1BJTk1VWF9GVU5DVElPTihzd2R0MCwgMHgzMCksCisJREVGSU5FX1pZTlFfUElOTVVYX0ZVTkNUSU9OKGdwaW8wLCAwKSwKK307CisKKworLyogcGluY3RybCAqLworc3RhdGljIGludCB6eW5xX3BjdHJsX2dldF9ncm91cHNfY291bnQoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2KQoreworCXN0cnVjdCB6eW5xX3BpbmN0cmwgKnBjdHJsID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7CisKKwlyZXR1cm4gcGN0cmwtPm5ncm91cHM7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp6eW5xX3BjdHJsX2dldF9ncm91cF9uYW1lKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKKwkJCQkJICAgICB1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwlzdHJ1Y3QgenlucV9waW5jdHJsICpwY3RybCA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjdGxkZXYpOworCisJcmV0dXJuIHBjdHJsLT5ncm91cHNbc2VsZWN0b3JdLm5hbWU7Cit9CisKK3N0YXRpYyBpbnQgenlucV9wY3RybF9nZXRfZ3JvdXBfcGlucyhzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsCisJCQkJICAgICB1bnNpZ25lZCBzZWxlY3RvciwKKwkJCQkgICAgIGNvbnN0IHVuc2lnbmVkICoqcGlucywKKwkJCQkgICAgIHVuc2lnbmVkICpudW1fcGlucykKK3sKKwlzdHJ1Y3QgenlucV9waW5jdHJsICpwY3RybCA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjdGxkZXYpOworCisJKnBpbnMgPSBwY3RybC0+Z3JvdXBzW3NlbGVjdG9yXS5waW5zOworCSpudW1fcGlucyA9IHBjdHJsLT5ncm91cHNbc2VsZWN0b3JdLm5waW5zOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGluY3RybF9vcHMgenlucV9wY3RybF9vcHMgPSB7CisJLmdldF9ncm91cHNfY291bnQgPSB6eW5xX3BjdHJsX2dldF9ncm91cHNfY291bnQsCisJLmdldF9ncm91cF9uYW1lID0genlucV9wY3RybF9nZXRfZ3JvdXBfbmFtZSwKKwkuZ2V0X2dyb3VwX3BpbnMgPSB6eW5xX3BjdHJsX2dldF9ncm91cF9waW5zLAorCS5kdF9ub2RlX3RvX21hcCA9IHBpbmNvbmZfZ2VuZXJpY19kdF9ub2RlX3RvX21hcF9hbGwsCisJLmR0X2ZyZWVfbWFwID0gcGluY3RybF91dGlsc19kdF9mcmVlX21hcCwKK307CisKKy8qIHBpbm11eCAqLworc3RhdGljIGludCB6eW5xX3BtdXhfZ2V0X2Z1bmN0aW9uc19jb3VudChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYpCit7CisJc3RydWN0IHp5bnFfcGluY3RybCAqcGN0cmwgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3RsZGV2KTsKKworCXJldHVybiBwY3RybC0+bmZ1bmNzOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqenlucV9wbXV4X2dldF9mdW5jdGlvbl9uYW1lKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKKwkJCQkJICAgICAgIHVuc2lnbmVkIHNlbGVjdG9yKQoreworCXN0cnVjdCB6eW5xX3BpbmN0cmwgKnBjdHJsID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7CisKKwlyZXR1cm4gcGN0cmwtPmZ1bmNzW3NlbGVjdG9yXS5uYW1lOworfQorCitzdGF0aWMgaW50IHp5bnFfcG11eF9nZXRfZnVuY3Rpb25fZ3JvdXBzKHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKKwkJCQkJIHVuc2lnbmVkIHNlbGVjdG9yLAorCQkJCQkgY29uc3QgY2hhciAqIGNvbnN0ICoqZ3JvdXBzLAorCQkJCQkgdW5zaWduZWQgKiBjb25zdCBudW1fZ3JvdXBzKQoreworCXN0cnVjdCB6eW5xX3BpbmN0cmwgKnBjdHJsID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7CisKKwkqZ3JvdXBzID0gcGN0cmwtPmZ1bmNzW3NlbGVjdG9yXS5ncm91cHM7CisJKm51bV9ncm91cHMgPSBwY3RybC0+ZnVuY3Nbc2VsZWN0b3JdLm5ncm91cHM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgenlucV9waW5tdXhfc2V0X211eChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsCisJCQkgICAgICAgdW5zaWduZWQgZnVuY3Rpb24sCisJCQkgICAgICAgdW5zaWduZWQgZ3JvdXApCit7CisJaW50IGksIHJldDsKKwlzdHJ1Y3QgenlucV9waW5jdHJsICpwY3RybCA9IHBpbmN0cmxfZGV2X2dldF9kcnZkYXRhKHBjdGxkZXYpOworCWNvbnN0IHN0cnVjdCB6eW5xX3BjdHJsX2dyb3VwICpwZ3JwID0gJnBjdHJsLT5ncm91cHNbZ3JvdXBdOworCWNvbnN0IHN0cnVjdCB6eW5xX3Bpbm11eF9mdW5jdGlvbiAqZnVuYyA9ICZwY3RybC0+ZnVuY3NbZnVuY3Rpb25dOworCisJLyoKKwkgKiBTRCBXUCAmIENEIGFyZSBzcGVjaWFsLiBUaGV5IGhhdmUgZGVkaWNhdGVkIHJlZ2lzdGVycworCSAqIHRvIG11eCB0aGVtIGluCisJICovCisJaWYgKGZ1bmN0aW9uID09IFpZTlFfUE1VWF9zZGlvMF9jZCB8fCBmdW5jdGlvbiA9PSBaWU5RX1BNVVhfc2RpbzBfd3AgfHwKKwkJCWZ1bmN0aW9uID09IFpZTlFfUE1VWF9zZGlvMV9jZCB8fAorCQkJZnVuY3Rpb24gPT0gWllOUV9QTVVYX3NkaW8xX3dwKSB7CisJCXUzMiByZWc7CisKKwkJcmV0ID0gcmVnbWFwX3JlYWQocGN0cmwtPnN5c2NvbiwKKwkJCQkgIHBjdHJsLT5wY3RybF9vZmZzZXQgKyBmdW5jLT5tdXgsICZyZWcpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQlyZWcgJj0gfmZ1bmMtPm11eF9tYXNrOworCQlyZWcgfD0gcGdycC0+cGluc1swXSA8PCBmdW5jLT5tdXhfc2hpZnQ7CisJCXJldCA9IHJlZ21hcF93cml0ZShwY3RybC0+c3lzY29uLAorCQkJCSAgIHBjdHJsLT5wY3RybF9vZmZzZXQgKyBmdW5jLT5tdXgsIHJlZyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBwZ3JwLT5ucGluczsgaSsrKSB7CisJCQl1bnNpZ25lZCBpbnQgcGluID0gcGdycC0+cGluc1tpXTsKKwkJCXUzMiByZWcsIGFkZHIgPSBwY3RybC0+cGN0cmxfb2Zmc2V0ICsgKDQgKiBwaW4pOworCisJCQlyZXQgPSByZWdtYXBfcmVhZChwY3RybC0+c3lzY29uLCBhZGRyLCAmcmVnKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKworCQkJcmVnICY9IH5aWU5RX1BJTk1VWF9NVVhfTUFTSzsKKwkJCXJlZyB8PSBmdW5jLT5tdXhfdmFsIDw8IFpZTlFfUElOTVVYX01VWF9TSElGVDsKKwkJCXJldCA9IHJlZ21hcF93cml0ZShwY3RybC0+c3lzY29uLCBhZGRyLCByZWcpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGlubXV4X29wcyB6eW5xX3Bpbm11eF9vcHMgPSB7CisJLmdldF9mdW5jdGlvbnNfY291bnQgPSB6eW5xX3BtdXhfZ2V0X2Z1bmN0aW9uc19jb3VudCwKKwkuZ2V0X2Z1bmN0aW9uX25hbWUgPSB6eW5xX3BtdXhfZ2V0X2Z1bmN0aW9uX25hbWUsCisJLmdldF9mdW5jdGlvbl9ncm91cHMgPSB6eW5xX3BtdXhfZ2V0X2Z1bmN0aW9uX2dyb3VwcywKKwkuc2V0X211eCA9IHp5bnFfcGlubXV4X3NldF9tdXgsCit9OworCisvKiBwaW5jb25maWcgKi8KKyNkZWZpbmUgWllOUV9QSU5DT05GX1RSSVNUQVRFCQlCSVQoMCkKKyNkZWZpbmUgWllOUV9QSU5DT05GX1NQRUVECQlCSVQoOCkKKyNkZWZpbmUgWllOUV9QSU5DT05GX1BVTExVUAkJQklUKDEyKQorI2RlZmluZSBaWU5RX1BJTkNPTkZfRElTQUJMRV9SRUNWUglCSVQoMTMpCisKKyNkZWZpbmUgWllOUV9QSU5DT05GX0lPVFlQRV9TSElGVAk5CisjZGVmaW5lIFpZTlFfUElOQ09ORl9JT1RZUEVfTUFTSwkoNyA8PCBaWU5RX1BJTkNPTkZfSU9UWVBFX1NISUZUKQorCitlbnVtIHp5bnFfaW9fc3RhbmRhcmRzIHsKKwl6eW5xX2lvc3RkX21pbiwKKwl6eW5xX2lvc3RkX2x2Y21vczE4LAorCXp5bnFfaW9zdGRfbHZjbW9zMjUsCisJenlucV9pb3N0ZF9sdmNtb3MzMywKKwl6eW5xX2lvc3RkX2hzdGwsCisJenlucV9pb3N0ZF9tYXgKK307CisKKy8qKgorICogZW51bSB6eW5xX3Bpbl9jb25maWdfcGFyYW0gLSBwb3NzaWJsZSBwaW4gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCisgKiBAUElOX0NPTkZJR19JT1NUQU5EQVJEOiBpZiB0aGUgcGluIGNhbiBzZWxlY3QgYW4gSU8gc3RhbmRhcmQsIHRoZSBhcmd1bWVudCB0bworICoJdGhpcyBwYXJhbWV0ZXIgKG9uIGEgY3VzdG9tIGZvcm1hdCkgdGVsbHMgdGhlIGRyaXZlciB3aGljaCBhbHRlcm5hdGl2ZQorICoJSU8gc3RhbmRhcmQgdG8gdXNlLgorICovCitlbnVtIHp5bnFfcGluX2NvbmZpZ19wYXJhbSB7CisJUElOX0NPTkZJR19JT1NUQU5EQVJEID0gUElOX0NPTkZJR19FTkQgKyAxLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5jb25mX2dlbmVyaWNfcGFyYW1zIHp5bnFfZHRfcGFyYW1zW10gPSB7CisJeyJpby1zdGFuZGFyZCIsIFBJTl9DT05GSUdfSU9TVEFOREFSRCwgenlucV9pb3N0ZF9sdmNtb3MxOH0sCit9OworCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitzdGF0aWMgY29uc3Qgc3RydWN0IHBpbl9jb25maWdfaXRlbSB6eW5xX2NvbmZfaXRlbXNbQVJSQVlfU0laRSh6eW5xX2R0X3BhcmFtcyldID0geworCVBDT05GRFVNUChQSU5fQ09ORklHX0lPU1RBTkRBUkQsICJJTy1zdGFuZGFyZCIsIE5VTEwsIHRydWUpLAorfTsKKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgaW50IHp5bnFfcGluY29uZl9pb3N0ZF9nZXQodTMyIHJlZykKK3sKKwlyZXR1cm4gKHJlZyAmIFpZTlFfUElOQ09ORl9JT1RZUEVfTUFTSykgPj4gWllOUV9QSU5DT05GX0lPVFlQRV9TSElGVDsKK30KKworc3RhdGljIGludCB6eW5xX3BpbmNvbmZfY2ZnX2dldChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsCisJCQkJdW5zaWduZWQgcGluLAorCQkJCXVuc2lnbmVkIGxvbmcgKmNvbmZpZykKK3sKKwl1MzIgcmVnOworCWludCByZXQ7CisJdW5zaWduZWQgaW50IGFyZyA9IDA7CisJdW5zaWduZWQgaW50IHBhcmFtID0gcGluY29uZl90b19jb25maWdfcGFyYW0oKmNvbmZpZyk7CisJc3RydWN0IHp5bnFfcGluY3RybCAqcGN0cmwgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3RsZGV2KTsKKworCWlmIChwaW4gPj0gWllOUV9OVU1fTUlPUykKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKworCXJldCA9IHJlZ21hcF9yZWFkKHBjdHJsLT5zeXNjb24sIHBjdHJsLT5wY3RybF9vZmZzZXQgKyAoNCAqIHBpbiksICZyZWcpOworCWlmIChyZXQpCisJCXJldHVybiAtRUlPOworCisJc3dpdGNoIChwYXJhbSkgeworCWNhc2UgUElOX0NPTkZJR19CSUFTX1BVTExfVVA6CisJCWlmICghKHJlZyAmIFpZTlFfUElOQ09ORl9QVUxMVVApKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWFyZyA9IDE7CisJCWJyZWFrOworCWNhc2UgUElOX0NPTkZJR19CSUFTX0hJR0hfSU1QRURBTkNFOgorCQlpZiAoIShyZWcgJiBaWU5RX1BJTkNPTkZfVFJJU1RBVEUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWFyZyA9IDE7CisJCWJyZWFrOworCWNhc2UgUElOX0NPTkZJR19CSUFTX0RJU0FCTEU6CisJCWlmIChyZWcgJiBaWU5RX1BJTkNPTkZfUFVMTFVQIHx8IHJlZyAmIFpZTlFfUElOQ09ORl9UUklTVEFURSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIFBJTl9DT05GSUdfU0xFV19SQVRFOgorCQlhcmcgPSAhIShyZWcgJiBaWU5RX1BJTkNPTkZfU1BFRUQpOworCQlicmVhazsKKwljYXNlIFBJTl9DT05GSUdfTE9XX1BPV0VSX01PREU6CisJeworCQllbnVtIHp5bnFfaW9fc3RhbmRhcmRzIGlvc3RkID0genlucV9waW5jb25mX2lvc3RkX2dldChyZWcpOworCisJCWlmIChpb3N0ZCAhPSB6eW5xX2lvc3RkX2hzdGwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCEocmVnICYgWllOUV9QSU5DT05GX0RJU0FCTEVfUkVDVlIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWFyZyA9ICEhKHJlZyAmIFpZTlFfUElOQ09ORl9ESVNBQkxFX1JFQ1ZSKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgUElOX0NPTkZJR19JT1NUQU5EQVJEOgorCQlhcmcgPSB6eW5xX3BpbmNvbmZfaW9zdGRfZ2V0KHJlZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorCisJKmNvbmZpZyA9IHBpbmNvbmZfdG9fY29uZmlnX3BhY2tlZChwYXJhbSwgYXJnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6eW5xX3BpbmNvbmZfY2ZnX3NldChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsCisJCQkJdW5zaWduZWQgcGluLAorCQkJCXVuc2lnbmVkIGxvbmcgKmNvbmZpZ3MsCisJCQkJdW5zaWduZWQgbnVtX2NvbmZpZ3MpCit7CisJaW50IGksIHJldDsKKwl1MzIgcmVnOworCXUzMiBwdWxsdXAgPSAwOworCXUzMiB0cmlzdGF0ZSA9IDA7CisJc3RydWN0IHp5bnFfcGluY3RybCAqcGN0cmwgPSBwaW5jdHJsX2Rldl9nZXRfZHJ2ZGF0YShwY3RsZGV2KTsKKworCWlmIChwaW4gPj0gWllOUV9OVU1fTUlPUykKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKworCXJldCA9IHJlZ21hcF9yZWFkKHBjdHJsLT5zeXNjb24sIHBjdHJsLT5wY3RybF9vZmZzZXQgKyAoNCAqIHBpbiksICZyZWcpOworCWlmIChyZXQpCisJCXJldHVybiAtRUlPOworCisJZm9yIChpID0gMDsgaSA8IG51bV9jb25maWdzOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHBhcmFtID0gcGluY29uZl90b19jb25maWdfcGFyYW0oY29uZmlnc1tpXSk7CisJCXVuc2lnbmVkIGludCBhcmcgPSBwaW5jb25mX3RvX2NvbmZpZ19hcmd1bWVudChjb25maWdzW2ldKTsKKworCQlzd2l0Y2ggKHBhcmFtKSB7CisJCWNhc2UgUElOX0NPTkZJR19CSUFTX1BVTExfVVA6CisJCQlwdWxsdXAgPSBaWU5RX1BJTkNPTkZfUFVMTFVQOworCQkJYnJlYWs7CisJCWNhc2UgUElOX0NPTkZJR19CSUFTX0hJR0hfSU1QRURBTkNFOgorCQkJdHJpc3RhdGUgPSBaWU5RX1BJTkNPTkZfVFJJU1RBVEU7CisJCQlicmVhazsKKwkJY2FzZSBQSU5fQ09ORklHX0JJQVNfRElTQUJMRToKKwkJCXJlZyAmPSB+KFpZTlFfUElOQ09ORl9QVUxMVVAgfCBaWU5RX1BJTkNPTkZfVFJJU1RBVEUpOworCQkJYnJlYWs7CisJCWNhc2UgUElOX0NPTkZJR19TTEVXX1JBVEU6CisJCQlpZiAoYXJnKQorCQkJCXJlZyB8PSBaWU5RX1BJTkNPTkZfU1BFRUQ7CisJCQllbHNlCisJCQkJcmVnICY9IH5aWU5RX1BJTkNPTkZfU1BFRUQ7CisKKwkJCWJyZWFrOworCQljYXNlIFBJTl9DT05GSUdfSU9TVEFOREFSRDoKKwkJCWlmIChhcmcgPD0genlucV9pb3N0ZF9taW4gfHwgYXJnID49IHp5bnFfaW9zdGRfbWF4KSB7CisJCQkJZGV2X3dhcm4ocGN0bGRldi0+ZGV2LAorCQkJCQkgInVuc3VwcG9ydGVkIElPIHN0YW5kYXJkICcldSdcbiIsCisJCQkJCSBwYXJhbSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlyZWcgJj0gflpZTlFfUElOQ09ORl9JT1RZUEVfTUFTSzsKKwkJCXJlZyB8PSBhcmcgPDwgWllOUV9QSU5DT05GX0lPVFlQRV9TSElGVDsKKwkJCWJyZWFrOworCQljYXNlIFBJTl9DT05GSUdfTE9XX1BPV0VSX01PREU6CisJCQlpZiAoYXJnKQorCQkJCXJlZyB8PSBaWU5RX1BJTkNPTkZfRElTQUJMRV9SRUNWUjsKKwkJCWVsc2UKKwkJCQlyZWcgJj0gflpZTlFfUElOQ09ORl9ESVNBQkxFX1JFQ1ZSOworCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl93YXJuKHBjdGxkZXYtPmRldiwKKwkJCQkgInVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyICcldSdcbiIsCisJCQkJIHBhcmFtKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisJaWYgKHRyaXN0YXRlIHx8IHB1bGx1cCkgeworCQlyZWcgJj0gfihaWU5RX1BJTkNPTkZfUFVMTFVQIHwgWllOUV9QSU5DT05GX1RSSVNUQVRFKTsKKwkJcmVnIHw9IHRyaXN0YXRlIHwgcHVsbHVwOworCX0KKworCXJldCA9IHJlZ21hcF93cml0ZShwY3RybC0+c3lzY29uLCBwY3RybC0+cGN0cmxfb2Zmc2V0ICsgKDQgKiBwaW4pLCByZWcpOworCWlmIChyZXQpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgenlucV9waW5jb25mX2dyb3VwX3NldChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsCisJCQkJICB1bnNpZ25lZCBzZWxlY3RvciwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgKmNvbmZpZ3MsCisJCQkJICB1bnNpZ25lZCBudW1fY29uZmlncykKK3sKKwlpbnQgaSwgcmV0OworCXN0cnVjdCB6eW5xX3BpbmN0cmwgKnBjdHJsID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocGN0bGRldik7CisJY29uc3Qgc3RydWN0IHp5bnFfcGN0cmxfZ3JvdXAgKnBncnAgPSAmcGN0cmwtPmdyb3Vwc1tzZWxlY3Rvcl07CisKKwlmb3IgKGkgPSAwOyBpIDwgcGdycC0+bnBpbnM7IGkrKykgeworCQlyZXQgPSB6eW5xX3BpbmNvbmZfY2ZnX3NldChwY3RsZGV2LCBwZ3JwLT5waW5zW2ldLCBjb25maWdzLAorCQkJCQkgICBudW1fY29uZmlncyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBpbmNvbmZfb3BzIHp5bnFfcGluY29uZl9vcHMgPSB7CisJLmlzX2dlbmVyaWMgPSB0cnVlLAorCS5waW5fY29uZmlnX2dldCA9IHp5bnFfcGluY29uZl9jZmdfZ2V0LAorCS5waW5fY29uZmlnX3NldCA9IHp5bnFfcGluY29uZl9jZmdfc2V0LAorCS5waW5fY29uZmlnX2dyb3VwX3NldCA9IHp5bnFfcGluY29uZl9ncm91cF9zZXQsCit9OworCitzdGF0aWMgc3RydWN0IHBpbmN0cmxfZGVzYyB6eW5xX2Rlc2MgPSB7CisJLm5hbWUgPSAienlucV9waW5jdHJsIiwKKwkucGlucyA9IHp5bnFfcGlucywKKwkubnBpbnMgPSBBUlJBWV9TSVpFKHp5bnFfcGlucyksCisJLnBjdGxvcHMgPSAmenlucV9wY3RybF9vcHMsCisJLnBteG9wcyA9ICZ6eW5xX3Bpbm11eF9vcHMsCisJLmNvbmZvcHMgPSAmenlucV9waW5jb25mX29wcywKKwkubnVtX2N1c3RvbV9wYXJhbXMgPSBBUlJBWV9TSVpFKHp5bnFfZHRfcGFyYW1zKSwKKwkuY3VzdG9tX3BhcmFtcyA9IHp5bnFfZHRfcGFyYW1zLAorI2lmZGVmIENPTkZJR19ERUJVR19GUworCS5jdXN0b21fY29uZl9pdGVtcyA9IHp5bnFfY29uZl9pdGVtcywKKyNlbmRpZgorCS5vd25lciA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCB6eW5xX3BpbmN0cmxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKKworeworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCB6eW5xX3BpbmN0cmwgKnBjdHJsOworCisJcGN0cmwgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpwY3RybCksIEdGUF9LRVJORUwpOworCWlmICghcGN0cmwpCisJCXJldHVybiAtRU5PTUVNOworCisJcGN0cmwtPnN5c2NvbiA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUocGRldi0+ZGV2Lm9mX25vZGUsCisJCQkJCQkJInN5c2NvbiIpOworCWlmIChJU19FUlIocGN0cmwtPnN5c2NvbikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBzeXNjb25cbiIpOworCQlyZXR1cm4gUFRSX0VSUihwY3RybC0+c3lzY29uKTsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm1pc3NpbmcgSU8gcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcGN0cmwtPnBjdHJsX29mZnNldCA9IHJlcy0+c3RhcnQ7CisKKwlwY3RybC0+Z3JvdXBzID0genlucV9wY3RybF9ncm91cHM7CisJcGN0cmwtPm5ncm91cHMgPSBBUlJBWV9TSVpFKHp5bnFfcGN0cmxfZ3JvdXBzKTsKKwlwY3RybC0+ZnVuY3MgPSB6eW5xX3BtdXhfZnVuY3Rpb25zOworCXBjdHJsLT5uZnVuY3MgPSBBUlJBWV9TSVpFKHp5bnFfcG11eF9mdW5jdGlvbnMpOworCisJcGN0cmwtPnBjdHJsID0gcGluY3RybF9yZWdpc3RlcigmenlucV9kZXNjLCAmcGRldi0+ZGV2LCBwY3RybCk7CisJaWYgKCFwY3RybC0+cGN0cmwpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGN0cmwpOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgInp5bnEgcGluY3RybCBpbml0aWFsaXplZFxuIik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHp5bnFfcGluY3RybF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgenlucV9waW5jdHJsICpwY3RybCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJcGluY3RybF91bnJlZ2lzdGVyKHBjdHJsLT5wY3RybCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgenlucV9waW5jdHJsX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHBpbmN0cmwtenlucSIgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB6eW5xX3BpbmN0cmxfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB6eW5xX3BpbmN0cmxfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInp5bnEtcGluY3RybCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IHp5bnFfcGluY3RybF9vZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IHp5bnFfcGluY3RybF9wcm9iZSwKKwkucmVtb3ZlID0genlucV9waW5jdHJsX3JlbW92ZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoenlucV9waW5jdHJsX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIlPDg8K2cmVuIEJyaW5rbWFubiA8c29yZW4uYnJpbmttYW5uQHhpbGlueC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlhpbGlueCBaeW5xIHBpbmN0cmwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcWNvbS9LY29uZmlnIGIvZHJpdmVycy9waW5jdHJsL3Fjb20vS2NvbmZpZwppbmRleCAzY2QyNDNjLi5lYTU3NWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcWNvbS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGluY3RybC9xY29tL0tjb25maWcKQEAgLTQ3LDYgKzQ3LDE0IEBACiAJICBUaGlzIGlzIHRoZSBwaW5jdHJsLCBwaW5tdXgsIHBpbmNvbmYgYW5kIGdwaW9saWIgZHJpdmVyIGZvciB0aGUKIAkgIFF1YWxjb21tIFRMTU0gYmxvY2sgZm91bmQgaW4gdGhlIFF1YWxjb21tIDg5NzQgcGxhdGZvcm0uCiAKK2NvbmZpZyBQSU5DVFJMX01TTTg5MTYKKwl0cmlzdGF0ZSAiUXVhbGNvbW0gODkxNiBwaW4gY29udHJvbGxlciBkcml2ZXIiCisJZGVwZW5kcyBvbiBHUElPTElCICYmIE9GCisJc2VsZWN0IFBJTkNUUkxfTVNNCisJaGVscAorCSAgVGhpcyBpcyB0aGUgcGluY3RybCwgcGlubXV4LCBwaW5jb25mIGFuZCBncGlvbGliIGRyaXZlciBmb3IgdGhlCisJICBRdWFsY29tbSBUTE1NIGJsb2NrIGZvdW5kIG9uIHRoZSBRdWFsY29tbSA4OTE2IHBsYXRmb3JtLgorCiBjb25maWcgUElOQ1RSTF9RQ09NX1NQTUlfUE1JQwogICAgICAgIHRyaXN0YXRlICJRdWFsY29tbSBTUE1JIFBNSUMgcGluIGNvbnRyb2xsZXIgZHJpdmVyIgogICAgICAgIGRlcGVuZHMgb24gR1BJT0xJQiAmJiBPRiAmJiBTUE1JCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcWNvbS9NYWtlZmlsZSBiL2RyaXZlcnMvcGluY3RybC9xY29tL01ha2VmaWxlCmluZGV4IGJmZDc5YWYuLjY4OTU4NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9xY29tL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGluY3RybC9xY29tL01ha2VmaWxlCkBAIC01LDUgKzUsNiBAQAogb2JqLSQoQ09ORklHX1BJTkNUUkxfSVBRODA2NCkJKz0gcGluY3RybC1pcHE4MDY0Lm8KIG9iai0kKENPTkZJR19QSU5DVFJMX01TTTg5NjApCSs9IHBpbmN0cmwtbXNtODk2MC5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9NU004WDc0KQkrPSBwaW5jdHJsLW1zbTh4NzQubworb2JqLSQoQ09ORklHX1BJTkNUUkxfTVNNODkxNikJKz0gcGluY3RybC1tc204OTE2Lm8KIG9iai0kKENPTkZJR19QSU5DVFJMX1FDT01fU1BNSV9QTUlDKSArPSBwaW5jdHJsLXNwbWktZ3Bpby5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9RQ09NX1NQTUlfUE1JQykgKz0gcGluY3RybC1zcG1pLW1wcC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1zbS5jIGIvZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tc20uYwppbmRleCBlZDcwMTdkLi5hNTM1ZjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1zbS5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtbXNtLmMKQEAgLTIwNCwyMSArMjA0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtc21fY29uZmlnX2dldChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsCi0JCQkgIHVuc2lnbmVkIGludCBwaW4sCi0JCQkgIHVuc2lnbmVkIGxvbmcgKmNvbmZpZykKLXsKLQlkZXZfZXJyKHBjdGxkZXYtPmRldiwgInBpbl9jb25maWdfc2V0IG9wIG5vdCBzdXBwb3J0ZWRcbiIpOwotCXJldHVybiAtRU5PVFNVUFA7Ci19Ci0KLXN0YXRpYyBpbnQgbXNtX2NvbmZpZ19zZXQoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LCB1bnNpZ25lZCBpbnQgcGluLAotCQkJCXVuc2lnbmVkIGxvbmcgKmNvbmZpZ3MsIHVuc2lnbmVkIG51bV9jb25maWdzKQotewotCWRldl9lcnIocGN0bGRldi0+ZGV2LCAicGluX2NvbmZpZ19zZXQgb3Agbm90IHN1cHBvcnRlZFxuIik7Ci0JcmV0dXJuIC1FTk9UU1VQUDsKLX0KLQogI2RlZmluZSBNU01fTk9fUFVMTAkwCiAjZGVmaW5lIE1TTV9QVUxMX0RPV04JMQogI2RlZmluZSBNU01fS0VFUEVSCTIKQEAgLTM3Miw4ICszNTcsNiBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBpbmNvbmZfb3BzIG1zbV9waW5jb25mX29wcyA9IHsKLQkucGluX2NvbmZpZ19nZXQJCT0gbXNtX2NvbmZpZ19nZXQsCi0JLnBpbl9jb25maWdfc2V0CQk9IG1zbV9jb25maWdfc2V0LAogCS5waW5fY29uZmlnX2dyb3VwX2dldAk9IG1zbV9jb25maWdfZ3JvdXBfZ2V0LAogCS5waW5fY29uZmlnX2dyb3VwX3NldAk9IG1zbV9jb25maWdfZ3JvdXBfc2V0LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtbXNtLmggYi9kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1zbS5oCmluZGV4IGI5NTJjNGIuLjU0ZmRkMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtbXNtLmgKKysrIGIvZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tc20uaApAQCAtNzAsMTEgKzcwLDExIEBACiAJdW5zaWduZWQgKmZ1bmNzOwogCXVuc2lnbmVkIG5mdW5jczsKIAotCXMxNiBjdGxfcmVnOwotCXMxNiBpb19yZWc7Ci0JczE2IGludHJfY2ZnX3JlZzsKLQlzMTYgaW50cl9zdGF0dXNfcmVnOwotCXMxNiBpbnRyX3RhcmdldF9yZWc7CisJdTMyIGN0bF9yZWc7CisJdTMyIGlvX3JlZzsKKwl1MzIgaW50cl9jZmdfcmVnOworCXUzMiBpbnRyX3N0YXR1c19yZWc7CisJdTMyIGludHJfdGFyZ2V0X3JlZzsKIAogCXVuc2lnbmVkIG11eF9iaXQ6NTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tc204OTE2LmMgYi9kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLW1zbTg5MTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGViZjI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1tc204OTE2LmMKQEAgLTAsMCArMSwxMDA1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1LCBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvcGluY3RybC5oPgorCisjaW5jbHVkZSAicGluY3RybC1tc20uaCIKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5jdHJsX3Bpbl9kZXNjIG1zbTg5MTZfcGluc1tdID0geworCVBJTkNUUkxfUElOKDAsICJHUElPXzAiKSwKKwlQSU5DVFJMX1BJTigxLCAiR1BJT18xIiksCisJUElOQ1RSTF9QSU4oMiwgIkdQSU9fMiIpLAorCVBJTkNUUkxfUElOKDMsICJHUElPXzMiKSwKKwlQSU5DVFJMX1BJTig0LCAiR1BJT180IiksCisJUElOQ1RSTF9QSU4oNSwgIkdQSU9fNSIpLAorCVBJTkNUUkxfUElOKDYsICJHUElPXzYiKSwKKwlQSU5DVFJMX1BJTig3LCAiR1BJT183IiksCisJUElOQ1RSTF9QSU4oOCwgIkdQSU9fOCIpLAorCVBJTkNUUkxfUElOKDksICJHUElPXzkiKSwKKwlQSU5DVFJMX1BJTigxMCwgIkdQSU9fMTAiKSwKKwlQSU5DVFJMX1BJTigxMSwgIkdQSU9fMTEiKSwKKwlQSU5DVFJMX1BJTigxMiwgIkdQSU9fMTIiKSwKKwlQSU5DVFJMX1BJTigxMywgIkdQSU9fMTMiKSwKKwlQSU5DVFJMX1BJTigxNCwgIkdQSU9fMTQiKSwKKwlQSU5DVFJMX1BJTigxNSwgIkdQSU9fMTUiKSwKKwlQSU5DVFJMX1BJTigxNiwgIkdQSU9fMTYiKSwKKwlQSU5DVFJMX1BJTigxNywgIkdQSU9fMTciKSwKKwlQSU5DVFJMX1BJTigxOCwgIkdQSU9fMTgiKSwKKwlQSU5DVFJMX1BJTigxOSwgIkdQSU9fMTkiKSwKKwlQSU5DVFJMX1BJTigyMCwgIkdQSU9fMjAiKSwKKwlQSU5DVFJMX1BJTigyMSwgIkdQSU9fMjEiKSwKKwlQSU5DVFJMX1BJTigyMiwgIkdQSU9fMjIiKSwKKwlQSU5DVFJMX1BJTigyMywgIkdQSU9fMjMiKSwKKwlQSU5DVFJMX1BJTigyNCwgIkdQSU9fMjQiKSwKKwlQSU5DVFJMX1BJTigyNSwgIkdQSU9fMjUiKSwKKwlQSU5DVFJMX1BJTigyNiwgIkdQSU9fMjYiKSwKKwlQSU5DVFJMX1BJTigyNywgIkdQSU9fMjciKSwKKwlQSU5DVFJMX1BJTigyOCwgIkdQSU9fMjgiKSwKKwlQSU5DVFJMX1BJTigyOSwgIkdQSU9fMjkiKSwKKwlQSU5DVFJMX1BJTigzMCwgIkdQSU9fMzAiKSwKKwlQSU5DVFJMX1BJTigzMSwgIkdQSU9fMzEiKSwKKwlQSU5DVFJMX1BJTigzMiwgIkdQSU9fMzIiKSwKKwlQSU5DVFJMX1BJTigzMywgIkdQSU9fMzMiKSwKKwlQSU5DVFJMX1BJTigzNCwgIkdQSU9fMzQiKSwKKwlQSU5DVFJMX1BJTigzNSwgIkdQSU9fMzUiKSwKKwlQSU5DVFJMX1BJTigzNiwgIkdQSU9fMzYiKSwKKwlQSU5DVFJMX1BJTigzNywgIkdQSU9fMzciKSwKKwlQSU5DVFJMX1BJTigzOCwgIkdQSU9fMzgiKSwKKwlQSU5DVFJMX1BJTigzOSwgIkdQSU9fMzkiKSwKKwlQSU5DVFJMX1BJTig0MCwgIkdQSU9fNDAiKSwKKwlQSU5DVFJMX1BJTig0MSwgIkdQSU9fNDEiKSwKKwlQSU5DVFJMX1BJTig0MiwgIkdQSU9fNDIiKSwKKwlQSU5DVFJMX1BJTig0MywgIkdQSU9fNDMiKSwKKwlQSU5DVFJMX1BJTig0NCwgIkdQSU9fNDQiKSwKKwlQSU5DVFJMX1BJTig0NSwgIkdQSU9fNDUiKSwKKwlQSU5DVFJMX1BJTig0NiwgIkdQSU9fNDYiKSwKKwlQSU5DVFJMX1BJTig0NywgIkdQSU9fNDciKSwKKwlQSU5DVFJMX1BJTig0OCwgIkdQSU9fNDgiKSwKKwlQSU5DVFJMX1BJTig0OSwgIkdQSU9fNDkiKSwKKwlQSU5DVFJMX1BJTig1MCwgIkdQSU9fNTAiKSwKKwlQSU5DVFJMX1BJTig1MSwgIkdQSU9fNTEiKSwKKwlQSU5DVFJMX1BJTig1MiwgIkdQSU9fNTIiKSwKKwlQSU5DVFJMX1BJTig1MywgIkdQSU9fNTMiKSwKKwlQSU5DVFJMX1BJTig1NCwgIkdQSU9fNTQiKSwKKwlQSU5DVFJMX1BJTig1NSwgIkdQSU9fNTUiKSwKKwlQSU5DVFJMX1BJTig1NiwgIkdQSU9fNTYiKSwKKwlQSU5DVFJMX1BJTig1NywgIkdQSU9fNTciKSwKKwlQSU5DVFJMX1BJTig1OCwgIkdQSU9fNTgiKSwKKwlQSU5DVFJMX1BJTig1OSwgIkdQSU9fNTkiKSwKKwlQSU5DVFJMX1BJTig2MCwgIkdQSU9fNjAiKSwKKwlQSU5DVFJMX1BJTig2MSwgIkdQSU9fNjEiKSwKKwlQSU5DVFJMX1BJTig2MiwgIkdQSU9fNjIiKSwKKwlQSU5DVFJMX1BJTig2MywgIkdQSU9fNjMiKSwKKwlQSU5DVFJMX1BJTig2NCwgIkdQSU9fNjQiKSwKKwlQSU5DVFJMX1BJTig2NSwgIkdQSU9fNjUiKSwKKwlQSU5DVFJMX1BJTig2NiwgIkdQSU9fNjYiKSwKKwlQSU5DVFJMX1BJTig2NywgIkdQSU9fNjciKSwKKwlQSU5DVFJMX1BJTig2OCwgIkdQSU9fNjgiKSwKKwlQSU5DVFJMX1BJTig2OSwgIkdQSU9fNjkiKSwKKwlQSU5DVFJMX1BJTig3MCwgIkdQSU9fNzAiKSwKKwlQSU5DVFJMX1BJTig3MSwgIkdQSU9fNzEiKSwKKwlQSU5DVFJMX1BJTig3MiwgIkdQSU9fNzIiKSwKKwlQSU5DVFJMX1BJTig3MywgIkdQSU9fNzMiKSwKKwlQSU5DVFJMX1BJTig3NCwgIkdQSU9fNzQiKSwKKwlQSU5DVFJMX1BJTig3NSwgIkdQSU9fNzUiKSwKKwlQSU5DVFJMX1BJTig3NiwgIkdQSU9fNzYiKSwKKwlQSU5DVFJMX1BJTig3NywgIkdQSU9fNzciKSwKKwlQSU5DVFJMX1BJTig3OCwgIkdQSU9fNzgiKSwKKwlQSU5DVFJMX1BJTig3OSwgIkdQSU9fNzkiKSwKKwlQSU5DVFJMX1BJTig4MCwgIkdQSU9fODAiKSwKKwlQSU5DVFJMX1BJTig4MSwgIkdQSU9fODEiKSwKKwlQSU5DVFJMX1BJTig4MiwgIkdQSU9fODIiKSwKKwlQSU5DVFJMX1BJTig4MywgIkdQSU9fODMiKSwKKwlQSU5DVFJMX1BJTig4NCwgIkdQSU9fODQiKSwKKwlQSU5DVFJMX1BJTig4NSwgIkdQSU9fODUiKSwKKwlQSU5DVFJMX1BJTig4NiwgIkdQSU9fODYiKSwKKwlQSU5DVFJMX1BJTig4NywgIkdQSU9fODciKSwKKwlQSU5DVFJMX1BJTig4OCwgIkdQSU9fODgiKSwKKwlQSU5DVFJMX1BJTig4OSwgIkdQSU9fODkiKSwKKwlQSU5DVFJMX1BJTig5MCwgIkdQSU9fOTAiKSwKKwlQSU5DVFJMX1BJTig5MSwgIkdQSU9fOTEiKSwKKwlQSU5DVFJMX1BJTig5MiwgIkdQSU9fOTIiKSwKKwlQSU5DVFJMX1BJTig5MywgIkdQSU9fOTMiKSwKKwlQSU5DVFJMX1BJTig5NCwgIkdQSU9fOTQiKSwKKwlQSU5DVFJMX1BJTig5NSwgIkdQSU9fOTUiKSwKKwlQSU5DVFJMX1BJTig5NiwgIkdQSU9fOTYiKSwKKwlQSU5DVFJMX1BJTig5NywgIkdQSU9fOTciKSwKKwlQSU5DVFJMX1BJTig5OCwgIkdQSU9fOTgiKSwKKwlQSU5DVFJMX1BJTig5OSwgIkdQSU9fOTkiKSwKKwlQSU5DVFJMX1BJTigxMDAsICJHUElPXzEwMCIpLAorCVBJTkNUUkxfUElOKDEwMSwgIkdQSU9fMTAxIiksCisJUElOQ1RSTF9QSU4oMTAyLCAiR1BJT18xMDIiKSwKKwlQSU5DVFJMX1BJTigxMDMsICJHUElPXzEwMyIpLAorCVBJTkNUUkxfUElOKDEwNCwgIkdQSU9fMTA0IiksCisJUElOQ1RSTF9QSU4oMTA1LCAiR1BJT18xMDUiKSwKKwlQSU5DVFJMX1BJTigxMDYsICJHUElPXzEwNiIpLAorCVBJTkNUUkxfUElOKDEwNywgIkdQSU9fMTA3IiksCisJUElOQ1RSTF9QSU4oMTA4LCAiR1BJT18xMDgiKSwKKwlQSU5DVFJMX1BJTigxMDksICJHUElPXzEwOSIpLAorCVBJTkNUUkxfUElOKDExMCwgIkdQSU9fMTEwIiksCisJUElOQ1RSTF9QSU4oMTExLCAiR1BJT18xMTEiKSwKKwlQSU5DVFJMX1BJTigxMTIsICJHUElPXzExMiIpLAorCVBJTkNUUkxfUElOKDExMywgIkdQSU9fMTEzIiksCisJUElOQ1RSTF9QSU4oMTE0LCAiR1BJT18xMTQiKSwKKwlQSU5DVFJMX1BJTigxMTUsICJHUElPXzExNSIpLAorCVBJTkNUUkxfUElOKDExNiwgIkdQSU9fMTE2IiksCisJUElOQ1RSTF9QSU4oMTE3LCAiR1BJT18xMTciKSwKKwlQSU5DVFJMX1BJTigxMTgsICJHUElPXzExOCIpLAorCVBJTkNUUkxfUElOKDExOSwgIkdQSU9fMTE5IiksCisJUElOQ1RSTF9QSU4oMTIwLCAiR1BJT18xMjAiKSwKKwlQSU5DVFJMX1BJTigxMjEsICJHUElPXzEyMSIpLAorCVBJTkNUUkxfUElOKDEyMiwgIlNEQzFfQ0xLIiksCisJUElOQ1RSTF9QSU4oMTIzLCAiU0RDMV9DTUQiKSwKKwlQSU5DVFJMX1BJTigxMjQsICJTREMxX0RBVEEiKSwKKwlQSU5DVFJMX1BJTigxMjUsICJTREMyX0NMSyIpLAorCVBJTkNUUkxfUElOKDEyNiwgIlNEQzJfQ01EIiksCisJUElOQ1RSTF9QSU4oMTI3LCAiU0RDMl9EQVRBIiksCisJUElOQ1RSTF9QSU4oMTI4LCAiUURTRF9DTEsiKSwKKwlQSU5DVFJMX1BJTigxMjksICJRRFNEX0NNRCIpLAorCVBJTkNUUkxfUElOKDEzMCwgIlFEU0RfREFUQTAiKSwKKwlQSU5DVFJMX1BJTigxMzEsICJRRFNEX0RBVEExIiksCisJUElOQ1RSTF9QSU4oMTMyLCAiUURTRF9EQVRBMiIpLAorCVBJTkNUUkxfUElOKDEzMywgIlFEU0RfREFUQTMiKSwKK307CisKKyNkZWZpbmUgREVDTEFSRV9NU01fR1BJT19QSU5TKHBpbikJXAorCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ3BpbyMjcGluIyNfcGluc1tdID0geyBwaW4gfQorCitERUNMQVJFX01TTV9HUElPX1BJTlMoMCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMSk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMik7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMyk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNSk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNik7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNyk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoOCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoOSk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMTApOworREVDTEFSRV9NU01fR1BJT19QSU5TKDExKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygxMik7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMTMpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDE0KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygxNSk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMTYpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDE3KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygxOCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMTkpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDIwKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygyMSk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMjIpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDIzKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygyNCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMjUpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDI2KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygyNyk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMjgpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDI5KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygzMCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMzEpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDMyKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygzMyk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMzQpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDM1KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygzNik7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMzcpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDM4KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygzOSk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNDApOworREVDTEFSRV9NU01fR1BJT19QSU5TKDQxKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg0Mik7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNDMpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDQ0KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg0NSk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNDYpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDQ3KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg0OCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNDkpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDUwKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg1MSk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNTIpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDUzKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg1NCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNTUpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDU2KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg1Nyk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNTgpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDU5KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg2MCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNjEpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDYyKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg2Myk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNjQpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDY1KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg2Nik7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNjcpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDY4KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg2OSk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNzApOworREVDTEFSRV9NU01fR1BJT19QSU5TKDcxKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg3Mik7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNzMpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDc0KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg3NSk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNzYpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDc3KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg3OCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoNzkpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDgwKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg4MSk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoODIpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDgzKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg4NCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoODUpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDg2KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg4Nyk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoODgpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDg5KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg5MCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoOTEpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDkyKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg5Myk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoOTQpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDk1KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg5Nik7CitERUNMQVJFX01TTV9HUElPX1BJTlMoOTcpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDk4KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUyg5OSk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMTAwKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygxMDEpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDEwMik7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMTAzKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygxMDQpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDEwNSk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMTA2KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygxMDcpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDEwOCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMTA5KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygxMTApOworREVDTEFSRV9NU01fR1BJT19QSU5TKDExMSk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMTEyKTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygxMTMpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDExNCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMTE1KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygxMTYpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDExNyk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMTE4KTsKK0RFQ0xBUkVfTVNNX0dQSU9fUElOUygxMTkpOworREVDTEFSRV9NU01fR1BJT19QSU5TKDEyMCk7CitERUNMQVJFX01TTV9HUElPX1BJTlMoMTIxKTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGMxX2Nsa19waW5zW10gPSB7IDEyMiB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGMxX2NtZF9waW5zW10gPSB7IDEyMyB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGMxX2RhdGFfcGluc1tdID0geyAxMjQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RjMl9jbGtfcGluc1tdID0geyAxMjUgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RjMl9jbWRfcGluc1tdID0geyAxMjYgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RjMl9kYXRhX3BpbnNbXSA9IHsgMTI3IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHFkc2RfY2xrX3BpbnNbXSA9IHsgMTI4IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHFkc2RfY21kX3BpbnNbXSA9IHsgMTI5IH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHFkc2RfZGF0YTBfcGluc1tdID0geyAxMzAgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcWRzZF9kYXRhMV9waW5zW10gPSB7IDEzMSB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBxZHNkX2RhdGEyX3BpbnNbXSA9IHsgMTMyIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHFkc2RfZGF0YTNfcGluc1tdID0geyAxMzMgfTsKKworI2RlZmluZSBGVU5DVElPTihmbmFtZSkJCQkgICAgICAgICAgICAgICAgXAorCVtNU01fTVVYXyMjZm5hbWVdID0gewkJICAgICAgICAgICAgICAgIFwKKwkJLm5hbWUgPSAjZm5hbWUsCQkJCVwKKwkJLmdyb3VwcyA9IGZuYW1lIyNfZ3JvdXBzLCAgICAgICAgICAgICAgIFwKKwkJLm5ncm91cHMgPSBBUlJBWV9TSVpFKGZuYW1lIyNfZ3JvdXBzKSwJXAorCX0KKworI2RlZmluZSBQSU5HUk9VUChpZCwgZjEsIGYyLCBmMywgZjQsIGY1LCBmNiwgZjcsIGY4LCBmOSkJXAorCXsJCQkJCQkJXAorCQkubmFtZSA9ICJncGlvIiAjaWQsCQkJCVwKKwkJLnBpbnMgPSBncGlvIyNpZCMjX3BpbnMsCQkJXAorCQkubnBpbnMgPSBBUlJBWV9TSVpFKGdwaW8jI2lkIyNfcGlucyksCQlcCisJCS5mdW5jcyA9IChpbnRbXSl7CQkJCVwKKwkJCU1TTV9NVVhfZ3BpbywJCQkJXAorCQkJTVNNX01VWF8jI2YxLAkJCQlcCisJCQlNU01fTVVYXyMjZjIsCQkJCVwKKwkJCU1TTV9NVVhfIyNmMywJCQkJXAorCQkJTVNNX01VWF8jI2Y0LAkJCQlcCisJCQlNU01fTVVYXyMjZjUsCQkJCVwKKwkJCU1TTV9NVVhfIyNmNiwJCQkJXAorCQkJTVNNX01VWF8jI2Y3LAkJCQlcCisJCQlNU01fTVVYXyMjZjgsCQkJCVwKKwkJCU1TTV9NVVhfIyNmOQkJCQlcCisJCX0sCQkJCSAgICAgICAgCVwKKwkJLm5mdW5jcyA9IDEwLAkJCQkJXAorCQkuY3RsX3JlZyA9IDB4MTAwMCAqIGlkLAkgICAgICAgIAkJXAorCQkuaW9fcmVnID0gMHg0ICsgMHgxMDAwICogaWQsCQkJXAorCQkuaW50cl9jZmdfcmVnID0gMHg4ICsgMHgxMDAwICogaWQsCQlcCisJCS5pbnRyX3N0YXR1c19yZWcgPSAweGMgKyAweDEwMDAgKiBpZCwJCVwKKwkJLmludHJfdGFyZ2V0X3JlZyA9IDB4OCArIDB4MTAwMCAqIGlkLAkJXAorCQkubXV4X2JpdCA9IDIsCQkJCQlcCisJCS5wdWxsX2JpdCA9IDAsCQkJCQlcCisJCS5kcnZfYml0ID0gNiwJCQkJCVwKKwkJLm9lX2JpdCA9IDksCQkJCQlcCisJCS5pbl9iaXQgPSAwLAkJCQkJXAorCQkub3V0X2JpdCA9IDEsCQkJCQlcCisJCS5pbnRyX2VuYWJsZV9iaXQgPSAwLAkJCQlcCisJCS5pbnRyX3N0YXR1c19iaXQgPSAwLAkJCQlcCisJCS5pbnRyX3RhcmdldF9iaXQgPSA1LAkJCQlcCisJCS5pbnRyX3RhcmdldF9rcHNzX3ZhbCA9IDQsCQkJXAorCQkuaW50cl9yYXdfc3RhdHVzX2JpdCA9IDQsCQkJXAorCQkuaW50cl9wb2xhcml0eV9iaXQgPSAxLAkJCQlcCisJCS5pbnRyX2RldGVjdGlvbl9iaXQgPSAyLAkJCVwKKwkJLmludHJfZGV0ZWN0aW9uX3dpZHRoID0gMiwJCQlcCisJfQorCisjZGVmaW5lIFNEQ19QSU5HUk9VUChwZ19uYW1lLCBjdGwsIHB1bGwsIGRydikJXAorCXsJCQkJCSAgICAgICAgXAorCQkubmFtZSA9ICNwZ19uYW1lLAkJCVwKKwkJLnBpbnMgPSBwZ19uYW1lIyNfcGlucywJCQlcCisJCS5ucGlucyA9IEFSUkFZX1NJWkUocGdfbmFtZSMjX3BpbnMpLAlcCisJCS5jdGxfcmVnID0gY3RsLAkJCQlcCisJCS5pb19yZWcgPSAwLAkJCQlcCisJCS5pbnRyX2NmZ19yZWcgPSAwLAkJCVwKKwkJLmludHJfc3RhdHVzX3JlZyA9IDAsCQkJXAorCQkuaW50cl90YXJnZXRfcmVnID0gMCwJCQlcCisJCS5tdXhfYml0ID0gLTEsCQkJCVwKKwkJLnB1bGxfYml0ID0gcHVsbCwJCQlcCisJCS5kcnZfYml0ID0gZHJ2LAkJCQlcCisJCS5vZV9iaXQgPSAtMSwJCQkJXAorCQkuaW5fYml0ID0gLTEsCQkJCVwKKwkJLm91dF9iaXQgPSAtMSwJCQkJXAorCQkuaW50cl9lbmFibGVfYml0ID0gLTEsCQkJXAorCQkuaW50cl9zdGF0dXNfYml0ID0gLTEsCQkJXAorCQkuaW50cl90YXJnZXRfYml0ID0gLTEsCQkJXAorCQkuaW50cl90YXJnZXRfa3Bzc192YWwgPSAtMSwJCVwKKwkJLmludHJfcmF3X3N0YXR1c19iaXQgPSAtMSwJCVwKKwkJLmludHJfcG9sYXJpdHlfYml0ID0gLTEsCQlcCisJCS5pbnRyX2RldGVjdGlvbl9iaXQgPSAtMSwJCVwKKwkJLmludHJfZGV0ZWN0aW9uX3dpZHRoID0gLTEsCQlcCisJfQorCitlbnVtIG1zbTg5MTZfZnVuY3Rpb25zIHsKKwlNU01fTVVYX2Fkc3BfZXh0LAorCU1TTV9NVVhfYWxzcF9pbnQsCisJTVNNX01VWF9hdGVzdF9iYnJ4MCwKKwlNU01fTVVYX2F0ZXN0X2JicngxLAorCU1TTV9NVVhfYXRlc3RfY2hhciwKKwlNU01fTVVYX2F0ZXN0X2NoYXIwLAorCU1TTV9NVVhfYXRlc3RfY2hhcjEsCisJTVNNX01VWF9hdGVzdF9jaGFyMiwKKwlNU01fTVVYX2F0ZXN0X2NoYXIzLAorCU1TTV9NVVhfYXRlc3RfY29tYm9kYWMsCisJTVNNX01VWF9hdGVzdF9ncHNhZGMwLAorCU1TTV9NVVhfYXRlc3RfZ3BzYWRjMSwKKwlNU01fTVVYX2F0ZXN0X3RzZW5zLAorCU1TTV9NVVhfYXRlc3Rfd2xhbjAsCisJTVNNX01VWF9hdGVzdF93bGFuMSwKKwlNU01fTVVYX2JhY2tsaWdodF9lbiwKKwlNU01fTVVYX2JpbWNfZHRlMCwKKwlNU01fTVVYX2JpbWNfZHRlMSwKKwlNU01fTVVYX2Jsc3BfaTJjMSwKKwlNU01fTVVYX2Jsc3BfaTJjMiwKKwlNU01fTVVYX2Jsc3BfaTJjMywKKwlNU01fTVVYX2Jsc3BfaTJjNCwKKwlNU01fTVVYX2Jsc3BfaTJjNSwKKwlNU01fTVVYX2Jsc3BfaTJjNiwKKwlNU01fTVVYX2Jsc3Bfc3BpMSwKKwlNU01fTVVYX2Jsc3Bfc3BpMV9jczEsCisJTVNNX01VWF9ibHNwX3NwaTFfY3MyLAorCU1TTV9NVVhfYmxzcF9zcGkxX2NzMywKKwlNU01fTVVYX2Jsc3Bfc3BpMiwKKwlNU01fTVVYX2Jsc3Bfc3BpMl9jczEsCisJTVNNX01VWF9ibHNwX3NwaTJfY3MyLAorCU1TTV9NVVhfYmxzcF9zcGkyX2NzMywKKwlNU01fTVVYX2Jsc3Bfc3BpMywKKwlNU01fTVVYX2Jsc3Bfc3BpM19jczEsCisJTVNNX01VWF9ibHNwX3NwaTNfY3MyLAorCU1TTV9NVVhfYmxzcF9zcGkzX2NzMywKKwlNU01fTVVYX2Jsc3Bfc3BpNCwKKwlNU01fTVVYX2Jsc3Bfc3BpNSwKKwlNU01fTVVYX2Jsc3Bfc3BpNiwKKwlNU01fTVVYX2Jsc3BfdWFydDEsCisJTVNNX01VWF9ibHNwX3VhcnQyLAorCU1TTV9NVVhfYmxzcF91aW0xLAorCU1TTV9NVVhfYmxzcF91aW0yLAorCU1TTV9NVVhfY2FtMV9yc3QsCisJTVNNX01VWF9jYW0xX3N0YW5kYnksCisJTVNNX01VWF9jYW1fbWNsazAsCisJTVNNX01VWF9jYW1fbWNsazEsCisJTVNNX01VWF9jY2lfYXN5bmMsCisJTVNNX01VWF9jY2lfaTJjLAorCU1TTV9NVVhfY2NpX3RpbWVyMCwKKwlNU01fTVVYX2NjaV90aW1lcjEsCisJTVNNX01VWF9jY2lfdGltZXIyLAorCU1TTV9NVVhfY2RjX3BkbTAsCisJTVNNX01VWF9jb2RlY19tYWQsCisJTVNNX01VWF9kYmdfb3V0LAorCU1TTV9NVVhfZGlzcGxheV81diwKKwlNU01fTVVYX2RtaWMwX2NsaywKKwlNU01fTVVYX2RtaWMwX2RhdGEsCisJTVNNX01VWF9kc2lfcnN0LAorCU1TTV9NVVhfZWJpMF93cmNkYywKKwlNU01fTVVYX2V1cm9fdXMsCisJTVNNX01VWF9leHRfbHBhc3MsCisJTVNNX01VWF9mbGFzaF9zdHJvYmUsCisJTVNNX01VWF9nY2NfZ3AxX2Nsa19hLAorCU1TTV9NVVhfZ2NjX2dwMV9jbGtfYiwKKwlNU01fTVVYX2djY19ncDJfY2xrX2EsCisJTVNNX01VWF9nY2NfZ3AyX2Nsa19iLAorCU1TTV9NVVhfZ2NjX2dwM19jbGtfYSwKKwlNU01fTVVYX2djY19ncDNfY2xrX2IsCisJTVNNX01VWF9ncGlvLAorCU1TTV9NVVhfZ3NtMF90eDAsCisJTVNNX01VWF9nc20wX3R4MSwKKwlNU01fTVVYX2dzbTFfdHgwLAorCU1TTV9NVVhfZ3NtMV90eDEsCisJTVNNX01VWF9neXJvX2FjY2wsCisJTVNNX01VWF9rcHNuczAsCisJTVNNX01VWF9rcHNuczEsCisJTVNNX01VWF9rcHNuczIsCisJTVNNX01VWF9sZG9fZW4sCisJTVNNX01VWF9sZG9fdXBkYXRlLAorCU1TTV9NVVhfbWFnX2ludCwKKwlNU01fTVVYX21kcF92c3luYywKKwlNU01fTVVYX21vZGVtX3RzeW5jLAorCU1TTV9NVVhfbV92b2MsCisJTVNNX01VWF9uYXZfcHBzLAorCU1TTV9NVVhfbmF2X3RzeW5jLAorCU1TTV9NVVhfcGFfaW5kaWNhdG9yLAorCU1TTV9NVVhfcGJzMCwKKwlNU01fTVVYX3BiczEsCisJTVNNX01VWF9wYnMyLAorCU1TTV9NVVhfcHJpX21pMnMsCisJTVNNX01VWF9wcmlfbWkyc193cywKKwlNU01fTVVYX3Bybmdfcm9zYywKKwlNU01fTVVYX3B3cl9jcnlwdG9fZW5hYmxlZF9hLAorCU1TTV9NVVhfcHdyX2NyeXB0b19lbmFibGVkX2IsCisJTVNNX01VWF9wd3JfbW9kZW1fZW5hYmxlZF9hLAorCU1TTV9NVVhfcHdyX21vZGVtX2VuYWJsZWRfYiwKKwlNU01fTVVYX3B3cl9uYXZfZW5hYmxlZF9hLAorCU1TTV9NVVhfcHdyX25hdl9lbmFibGVkX2IsCisJTVNNX01VWF9xZHNzX2N0aXRyaWdfaW5fYTAsCisJTVNNX01VWF9xZHNzX2N0aXRyaWdfaW5fYTEsCisJTVNNX01VWF9xZHNzX2N0aXRyaWdfaW5fYjAsCisJTVNNX01VWF9xZHNzX2N0aXRyaWdfaW5fYjEsCisJTVNNX01VWF9xZHNzX2N0aXRyaWdfb3V0X2EwLAorCU1TTV9NVVhfcWRzc19jdGl0cmlnX291dF9hMSwKKwlNU01fTVVYX3Fkc3NfY3RpdHJpZ19vdXRfYjAsCisJTVNNX01VWF9xZHNzX2N0aXRyaWdfb3V0X2IxLAorCU1TTV9NVVhfcWRzc190cmFjZWNsa19hLAorCU1TTV9NVVhfcWRzc190cmFjZWNsa19iLAorCU1TTV9NVVhfcWRzc190cmFjZWN0bF9hLAorCU1TTV9NVVhfcWRzc190cmFjZWN0bF9iLAorCU1TTV9NVVhfcWRzc190cmFjZWRhdGFfYSwKKwlNU01fTVVYX3Fkc3NfdHJhY2VkYXRhX2IsCisJTVNNX01VWF9yZXNldF9uLAorCU1TTV9NVVhfc2RfY2FyZCwKKwlNU01fTVVYX3NkX3dyaXRlLAorCU1TTV9NVVhfc2VjX21pMnMsCisJTVNNX01VWF9zbWJfaW50LAorCU1TTV9NVVhfc3NiaV93dHIwLAorCU1TTV9NVVhfc3NiaV93dHIxLAorCU1TTV9NVVhfdWltMSwKKwlNU01fTVVYX3VpbTIsCisJTVNNX01VWF91aW0zLAorCU1TTV9NVVhfdWltX2JhdHQsCisJTVNNX01VWF93Y3NzX2J0LAorCU1TTV9NVVhfd2Nzc19mbSwKKwlNU01fTVVYX3djc3Nfd2xhbiwKKwlNU01fTVVYX3dlYmNhbTFfcnN0LAorCU1TTV9NVVhfTkEsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdwaW9fZ3JvdXBzW10gPSB7CisJImdwaW8wIiwgImdwaW8xIiwgImdwaW8yIiwgImdwaW8zIiwgImdwaW80IiwgImdwaW81IiwgImdwaW82IiwgImdwaW83IiwKKwkiZ3BpbzgiLCAiZ3BpbzkiLCAiZ3BpbzEwIiwgImdwaW8xMSIsICJncGlvMTIiLCAiZ3BpbzEzIiwgImdwaW8xNCIsCisJImdwaW8xNSIsICJncGlvMTYiLCAiZ3BpbzE3IiwgImdwaW8xOCIsICJncGlvMTkiLCAiZ3BpbzIwIiwgImdwaW8yMSIsCisJImdwaW8yMiIsICJncGlvMjMiLCAiZ3BpbzI0IiwgImdwaW8yNSIsICJncGlvMjYiLCAiZ3BpbzI3IiwgImdwaW8yOCIsCisJImdwaW8yOSIsICJncGlvMzAiLCAiZ3BpbzMxIiwgImdwaW8zMiIsICJncGlvMzMiLCAiZ3BpbzM0IiwgImdwaW8zNSIsCisJImdwaW8zNiIsICJncGlvMzciLCAiZ3BpbzM4IiwgImdwaW8zOSIsICJncGlvNDAiLCAiZ3BpbzQxIiwgImdwaW80MiIsCisJImdwaW80MyIsICJncGlvNDQiLCAiZ3BpbzQ1IiwgImdwaW80NiIsICJncGlvNDciLCAiZ3BpbzQ4IiwgImdwaW80OSIsCisJImdwaW81MCIsICJncGlvNTEiLCAiZ3BpbzUyIiwgImdwaW81MyIsICJncGlvNTQiLCAiZ3BpbzU1IiwgImdwaW81NiIsCisJImdwaW81NyIsICJncGlvNTgiLCAiZ3BpbzU5IiwgImdwaW82MCIsICJncGlvNjEiLCAiZ3BpbzYyIiwgImdwaW82MyIsCisJImdwaW82NCIsICJncGlvNjUiLCAiZ3BpbzY2IiwgImdwaW82NyIsICJncGlvNjgiLCAiZ3BpbzY5IiwgImdwaW83MCIsCisJImdwaW83MSIsICJncGlvNzIiLCAiZ3BpbzczIiwgImdwaW83NCIsICJncGlvNzUiLCAiZ3Bpbzc2IiwgImdwaW83NyIsCisJImdwaW83OCIsICJncGlvNzkiLCAiZ3BpbzgwIiwgImdwaW84MSIsICJncGlvODIiLCAiZ3BpbzgzIiwgImdwaW84NCIsCisJImdwaW84NSIsICJncGlvODYiLCAiZ3Bpbzg3IiwgImdwaW84OCIsICJncGlvODkiLCAiZ3BpbzkwIiwgImdwaW85MSIsCisJImdwaW85MiIsICJncGlvOTMiLCAiZ3Bpbzk0IiwgImdwaW85NSIsICJncGlvOTYiLCAiZ3Bpbzk3IiwgImdwaW85OCIsCisJImdwaW85OSIsICJncGlvMTAwIiwgImdwaW8xMDEiLCAiZ3BpbzEwMiIsICJncGlvMTAzIiwgImdwaW8xMDQiLAorCSJncGlvMTA1IiwgImdwaW8xMDYiLCAiZ3BpbzEwNyIsICJncGlvMTA4IiwgImdwaW8xMDkiLCAiZ3BpbzExMCIsCisJImdwaW8xMTEiLCAiZ3BpbzExMiIsICJncGlvMTEzIiwgImdwaW8xMTQiLCAiZ3BpbzExNSIsICJncGlvMTE2IiwKKwkiZ3BpbzExNyIsICJncGlvMTE4IiwgImdwaW8xMTkiLCAiZ3BpbzEyMCIsICJncGlvMTIxIgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYWRzcF9leHRfZ3JvdXBzW10gPSB7ICJncGlvMzgiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFsc3BfaW50X2dyb3Vwc1tdID0geyAiZ3BpbzExMyIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXRlc3RfYmJyeDBfZ3JvdXBzW10gPSB7ICJncGlvMTciIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGF0ZXN0X2JicngxX2dyb3Vwc1tdID0geyAiZ3BpbzE2IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdGVzdF9jaGFyX2dyb3Vwc1tdID0geyAiZ3BpbzYyIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdGVzdF9jaGFyMF9ncm91cHNbXSA9IHsgImdwaW82MCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXRlc3RfY2hhcjFfZ3JvdXBzW10gPSB7ICJncGlvNTkiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGF0ZXN0X2NoYXIyX2dyb3Vwc1tdID0geyAiZ3BpbzU4IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdGVzdF9jaGFyM19ncm91cHNbXSA9IHsgImdwaW81NyIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXRlc3RfY29tYm9kYWNfZ3JvdXBzW10gPSB7CisJImdwaW80IiwgImdwaW8xMiIsICJncGlvMTMiLCAiZ3BpbzIwIiwgImdwaW8yMSIsICJncGlvMjgiLCAiZ3BpbzI5IiwKKwkiZ3BpbzMwIiwgImdwaW8zOSIsICJncGlvNDAiLCAiZ3BpbzQxIiwgImdwaW80MiIsICJncGlvNDMiLCAiZ3BpbzQ0IiwKKwkiZ3BpbzQ1IiwgImdwaW80NiIsICJncGlvNDciLCAiZ3BpbzQ4IiwgImdwaW82OSIsICJncGlvMTA3IgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXRlc3RfZ3BzYWRjMF9ncm91cHNbXSA9IHsgImdwaW83IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdGVzdF9ncHNhZGMxX2dyb3Vwc1tdID0geyAiZ3BpbzE4IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdGVzdF90c2Vuc19ncm91cHNbXSA9IHsgImdwaW8xMTIiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGF0ZXN0X3dsYW4wX2dyb3Vwc1tdID0geyAiZ3BpbzIyIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdGVzdF93bGFuMV9ncm91cHNbXSA9IHsgImdwaW8yMyIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmFja2xpZ2h0X2VuX2dyb3Vwc1tdID0geyAiZ3Bpbzk4IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBiaW1jX2R0ZTBfZ3JvdXBzW10gPSB7ICJncGlvNjMiLCAiZ3BpbzY1IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBiaW1jX2R0ZTFfZ3JvdXBzW10gPSB7ICJncGlvNjQiLCAiZ3BpbzY2IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX2kyYzFfZ3JvdXBzW10gPSB7ICJncGlvMiIsICJncGlvMyIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9pMmMyX2dyb3Vwc1tdID0geyAiZ3BpbzYiLCAiZ3BpbzciIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfaTJjM19ncm91cHNbXSA9IHsgImdwaW8xMCIsICJncGlvMTEiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfaTJjNF9ncm91cHNbXSA9IHsgImdwaW8xNCIsICJncGlvMTUiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfaTJjNV9ncm91cHNbXSA9IHsgImdwaW8xOCIsICJncGlvMTkiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfaTJjNl9ncm91cHNbXSA9IHsgImdwaW8yMiIsICJncGlvMjMiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpMV9ncm91cHNbXSA9IHsKKwkiZ3BpbzAiLCAiZ3BpbzEiLCAiZ3BpbzIiLCAiZ3BpbzMiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3NwaTFfY3MxX2dyb3Vwc1tdID0geyAiZ3BpbzExMCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9zcGkxX2NzMl9ncm91cHNbXSA9IHsgImdwaW8xNiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9zcGkxX2NzM19ncm91cHNbXSA9IHsgImdwaW80IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3NwaTJfZ3JvdXBzW10gPSB7CisJImdwaW80IiwgImdwaW81IiwgImdwaW82IiwgImdwaW83IgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9zcGkyX2NzMV9ncm91cHNbXSA9IHsgImdwaW8xMjEiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpMl9jczJfZ3JvdXBzW10gPSB7ICJncGlvMTciIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpMl9jczNfZ3JvdXBzW10gPSB7ICJncGlvNSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9zcGkzX2dyb3Vwc1tdID0geworCSJncGlvOCIsICJncGlvOSIsICJncGlvMTAiLCAiZ3BpbzExIgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9zcGkzX2NzMV9ncm91cHNbXSA9IHsgImdwaW8xMjAiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpM19jczJfZ3JvdXBzW10gPSB7ICJncGlvMzciIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpM19jczNfZ3JvdXBzW10gPSB7ICJncGlvNjkiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3Bfc3BpNF9ncm91cHNbXSA9IHsKKwkiZ3BpbzEyIiwgImdwaW8xMyIsICJncGlvMTQiLCAiZ3BpbzE1IgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF9zcGk1X2dyb3Vwc1tdID0geworCSJncGlvMTYiLCAiZ3BpbzE3IiwgImdwaW8xOCIsICJncGlvMTkiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3NwaTZfZ3JvdXBzW10gPSB7CisJImdwaW8yMCIsICJncGlvMjEiLCAiZ3BpbzIyIiwgImdwaW8yMyIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJsc3BfdWFydDFfZ3JvdXBzW10gPSB7CisJImdwaW8wIiwgImdwaW8xIiwgImdwaW8yIiwgImdwaW8zIgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF91YXJ0Ml9ncm91cHNbXSA9IHsKKwkiZ3BpbzQiLCAiZ3BpbzUiLCAiZ3BpbzYiLCAiZ3BpbzciCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBibHNwX3VpbTFfZ3JvdXBzW10gPSB7ICJncGlvMCIsICJncGlvMSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYmxzcF91aW0yX2dyb3Vwc1tdID0geyAiZ3BpbzQiLCAiZ3BpbzUiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNhbTFfcnN0X2dyb3Vwc1tdID0geyAiZ3BpbzM1IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjYW0xX3N0YW5kYnlfZ3JvdXBzW10gPSB7ICJncGlvMzQiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNhbV9tY2xrMF9ncm91cHNbXSA9IHsgImdwaW8yNiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2FtX21jbGsxX2dyb3Vwc1tdID0geyAiZ3BpbzI3IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY2lfYXN5bmNfZ3JvdXBzW10gPSB7ICJncGlvMzMiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNjaV9pMmNfZ3JvdXBzW10gPSB7ICJncGlvMjkiLCAiZ3BpbzMwIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY2lfdGltZXIwX2dyb3Vwc1tdID0geyAiZ3BpbzMxIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY2lfdGltZXIxX2dyb3Vwc1tdID0geyAiZ3BpbzMyIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjY2lfdGltZXIyX2dyb3Vwc1tdID0geyAiZ3BpbzM4IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjZGNfcGRtMF9ncm91cHNbXSA9IHsKKwkiZ3BpbzYzIiwgImdwaW82NCIsICJncGlvNjUiLCAiZ3BpbzY2IiwgImdwaW82NyIsICJncGlvNjgiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjb2RlY19tYWRfZ3JvdXBzW10gPSB7ICJncGlvMTYiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRiZ19vdXRfZ3JvdXBzW10gPSB7ICJncGlvNDciIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRpc3BsYXlfNXZfZ3JvdXBzW10gPSB7ICJncGlvOTciIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRtaWMwX2Nsa19ncm91cHNbXSA9IHsgImdwaW8wIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkbWljMF9kYXRhX2dyb3Vwc1tdID0geyAiZ3BpbzEiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRzaV9yc3RfZ3JvdXBzW10gPSB7ICJncGlvMjUiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGViaTBfd3JjZGNfZ3JvdXBzW10gPSB7ICJncGlvNjciIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGV1cm9fdXNfZ3JvdXBzW10gPSB7ICJncGlvMTIwIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBleHRfbHBhc3NfZ3JvdXBzW10gPSB7ICJncGlvNDUiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGZsYXNoX3N0cm9iZV9ncm91cHNbXSA9IHsgImdwaW8zMSIsICJncGlvMzIiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdjY19ncDFfY2xrX2FfZ3JvdXBzW10gPSB7ICJncGlvNDkiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdjY19ncDFfY2xrX2JfZ3JvdXBzW10gPSB7ICJncGlvOTciIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdjY19ncDJfY2xrX2FfZ3JvdXBzW10gPSB7ICJncGlvNTAiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdjY19ncDJfY2xrX2JfZ3JvdXBzW10gPSB7ICJncGlvMTIiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdjY19ncDNfY2xrX2FfZ3JvdXBzW10gPSB7ICJncGlvNTEiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdjY19ncDNfY2xrX2JfZ3JvdXBzW10gPSB7ICJncGlvMTMiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdzbTBfdHgwX2dyb3Vwc1tdID0geyAiZ3Bpbzk5IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBnc20wX3R4MV9ncm91cHNbXSA9IHsgImdwaW8xMDAiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGdzbTFfdHgwX2dyb3Vwc1tdID0geyAiZ3BpbzEwMSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZ3NtMV90eDFfZ3JvdXBzW10gPSB7ICJncGlvMTAyIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBneXJvX2FjY2xfZ3JvdXBzW10gPSB7ImdwaW8xMTUiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtwc25zMF9ncm91cHNbXSA9IHsgImdwaW8xMDciIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtwc25zMV9ncm91cHNbXSA9IHsgImdwaW8xMDgiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtwc25zMl9ncm91cHNbXSA9IHsgImdwaW8xMDkiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxkb19lbl9ncm91cHNbXSA9IHsgImdwaW8xMjEiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxkb191cGRhdGVfZ3JvdXBzW10gPSB7ICJncGlvMTIwIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtYWdfaW50X2dyb3Vwc1tdID0geyAiZ3BpbzY5IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtZHBfdnN5bmNfZ3JvdXBzW10gPSB7ICJncGlvMjQiLCAiZ3BpbzI1IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtb2RlbV90c3luY19ncm91cHNbXSA9IHsgImdwaW85NSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbV92b2NfZ3JvdXBzW10gPSB7ICJncGlvOCIsICJncGlvMTE5IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYXZfcHBzX2dyb3Vwc1tdID0geyAiZ3Bpbzk1IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBuYXZfdHN5bmNfZ3JvdXBzW10gPSB7ICJncGlvOTUiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBhX2luZGljYXRvcl9ncm91cHNbXSA9IHsgImdwaW84NiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGJzMF9ncm91cHNbXSA9IHsgImdwaW8xMDciIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBiczFfZ3JvdXBzW10gPSB7ICJncGlvMTA4IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwYnMyX2dyb3Vwc1tdID0geyAiZ3BpbzEwOSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHJpX21pMnNfZ3JvdXBzW10gPSB7CisJImdwaW8xMTMiLCAiZ3BpbzExNCIsICJncGlvMTE1IiwgImdwaW8xMTYiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwcmlfbWkyc193c19ncm91cHNbXSA9IHsgImdwaW8xMTAiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHBybmdfcm9zY19ncm91cHNbXSA9IHsgImdwaW80MyIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHdyX2NyeXB0b19lbmFibGVkX2FfZ3JvdXBzW10gPSB7ICJncGlvMzUiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHB3cl9jcnlwdG9fZW5hYmxlZF9iX2dyb3Vwc1tdID0geyAiZ3BpbzExNSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHdyX21vZGVtX2VuYWJsZWRfYV9ncm91cHNbXSA9IHsgImdwaW8yOCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcHdyX21vZGVtX2VuYWJsZWRfYl9ncm91cHNbXSA9IHsgImdwaW8xMTMiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHB3cl9uYXZfZW5hYmxlZF9hX2dyb3Vwc1tdID0geyAiZ3BpbzM0IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwd3JfbmF2X2VuYWJsZWRfYl9ncm91cHNbXSA9IHsgImdwaW8xMTQiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHFkc3NfY3RpdHJpZ19pbl9hMF9ncm91cHNbXSA9IHsgImdwaW8yMCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcWRzc19jdGl0cmlnX2luX2ExX2dyb3Vwc1tdID0geyAiZ3BpbzQ5IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBxZHNzX2N0aXRyaWdfaW5fYjBfZ3JvdXBzW10gPSB7ICJncGlvMjEiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHFkc3NfY3RpdHJpZ19pbl9iMV9ncm91cHNbXSA9IHsgImdwaW81MCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcWRzc19jdGl0cmlnX291dF9hMF9ncm91cHNbXSA9IHsgImdwaW8yMyIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcWRzc19jdGl0cmlnX291dF9hMV9ncm91cHNbXSA9IHsgImdwaW81MiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcWRzc19jdGl0cmlnX291dF9iMF9ncm91cHNbXSA9IHsgImdwaW8yMiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcWRzc19jdGl0cmlnX291dF9iMV9ncm91cHNbXSA9IHsgImdwaW81MSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcWRzc190cmFjZWNsa19hX2dyb3Vwc1tdID0geyAiZ3BpbzQ2IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBxZHNzX3RyYWNlY2xrX2JfZ3JvdXBzW10gPSB7ICJncGlvNSIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcWRzc190cmFjZWN0bF9hX2dyb3Vwc1tdID0geyAiZ3BpbzQ1IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBxZHNzX3RyYWNlY3RsX2JfZ3JvdXBzW10gPSB7ICJncGlvNCIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcWRzc190cmFjZWRhdGFfYV9ncm91cHNbXSA9IHsKKwkiZ3BpbzgiLCAiZ3BpbzkiLCAiZ3BpbzEwIiwgImdwaW8zOSIsICJncGlvNDAiLCAiZ3BpbzQxIiwgImdwaW80MiIsCisJImdwaW80MyIsICJncGlvNDciLCAiZ3BpbzQ4IiwgImdwaW82MiIsICJncGlvNjkiLCAiZ3BpbzExMiIsICJncGlvMTEzIiwKKwkiZ3BpbzExNCIsICJncGlvMTE1IgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcWRzc190cmFjZWRhdGFfYl9ncm91cHNbXSA9IHsKKwkiZ3BpbzI2IiwgImdwaW8yNyIsICJncGlvMjgiLCAiZ3BpbzI5IiwgImdwaW8zMCIsICJncGlvMzEiLCAiZ3BpbzMyIiwKKwkiZ3BpbzMzIiwgImdwaW8zNCIsICJncGlvMzUiLCAiZ3BpbzM2IiwgImdwaW8zNyIsICJncGlvMTEwIiwgImdwaW8xMTEiLAorCSJncGlvMTIwIiwgImdwaW8xMjEiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByZXNldF9uX2dyb3Vwc1tdID0geyAiZ3BpbzM2IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZF9jYXJkX2dyb3Vwc1tdID0geyAiZ3BpbzM4IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZF93cml0ZV9ncm91cHNbXSA9IHsgImdwaW8xMjEiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNlY19taTJzX2dyb3Vwc1tdID0geworCSJncGlvMTEyIiwgImdwaW8xMTciLCAiZ3BpbzExOCIsICJncGlvMTE5IgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc21iX2ludF9ncm91cHNbXSA9IHsgImdwaW82MiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc3NiaV93dHIwX2dyb3Vwc1tdID0geyAiZ3BpbzEwMyIsICJncGlvMTA0IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzc2JpX3d0cjFfZ3JvdXBzW10gPSB7ICJncGlvMTA1IiwgImdwaW8xMDYiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVpbTFfZ3JvdXBzW10gPSB7CisJImdwaW81NyIsICJncGlvNTgiLCAiZ3BpbzU5IiwgImdwaW82MCIKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdWltMl9ncm91cHNbXSA9IHsKKwkiZ3BpbzUzIiwgImdwaW81NCIsICJncGlvNTUiLCAiZ3BpbzU2IgorfTsKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdWltM19ncm91cHNbXSA9IHsKKwkiZ3BpbzQ5IiwgICJncGlvNTAiLCAiZ3BpbzUxIiwgImdwaW81MiIKK307CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVpbV9iYXR0X2dyb3Vwc1tdID0geyAiZ3BpbzYxIiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB3Y3NzX2J0X2dyb3Vwc1tdID0geyAiZ3BpbzM5IiwgImdwaW80NyIsICJncGlvNDgiIH07CitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHdjc3NfZm1fZ3JvdXBzW10gPSB7ICJncGlvNDUiLCAiZ3BpbzQ2IiB9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB3Y3NzX3dsYW5fZ3JvdXBzW10gPSB7CisJImdwaW80MCIsICJncGlvNDEiLCAiZ3BpbzQyIiwgImdwaW80MyIsICJncGlvNDQiCit9Oworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB3ZWJjYW0xX3JzdF9ncm91cHNbXSA9IHsgImdwaW8yOCIgfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtc21fZnVuY3Rpb24gbXNtODkxNl9mdW5jdGlvbnNbXSA9IHsKKwlGVU5DVElPTihhZHNwX2V4dCksCisJRlVOQ1RJT04oYWxzcF9pbnQpLAorCUZVTkNUSU9OKGF0ZXN0X2JicngwKSwKKwlGVU5DVElPTihhdGVzdF9iYnJ4MSksCisJRlVOQ1RJT04oYXRlc3RfY2hhciksCisJRlVOQ1RJT04oYXRlc3RfY2hhcjApLAorCUZVTkNUSU9OKGF0ZXN0X2NoYXIxKSwKKwlGVU5DVElPTihhdGVzdF9jaGFyMiksCisJRlVOQ1RJT04oYXRlc3RfY2hhcjMpLAorCUZVTkNUSU9OKGF0ZXN0X2NvbWJvZGFjKSwKKwlGVU5DVElPTihhdGVzdF9ncHNhZGMwKSwKKwlGVU5DVElPTihhdGVzdF9ncHNhZGMxKSwKKwlGVU5DVElPTihhdGVzdF90c2VucyksCisJRlVOQ1RJT04oYXRlc3Rfd2xhbjApLAorCUZVTkNUSU9OKGF0ZXN0X3dsYW4xKSwKKwlGVU5DVElPTihiYWNrbGlnaHRfZW4pLAorCUZVTkNUSU9OKGJpbWNfZHRlMCksCisJRlVOQ1RJT04oYmltY19kdGUxKSwKKwlGVU5DVElPTihibHNwX2kyYzEpLAorCUZVTkNUSU9OKGJsc3BfaTJjMiksCisJRlVOQ1RJT04oYmxzcF9pMmMzKSwKKwlGVU5DVElPTihibHNwX2kyYzQpLAorCUZVTkNUSU9OKGJsc3BfaTJjNSksCisJRlVOQ1RJT04oYmxzcF9pMmM2KSwKKwlGVU5DVElPTihibHNwX3NwaTEpLAorCUZVTkNUSU9OKGJsc3Bfc3BpMV9jczEpLAorCUZVTkNUSU9OKGJsc3Bfc3BpMV9jczIpLAorCUZVTkNUSU9OKGJsc3Bfc3BpMV9jczMpLAorCUZVTkNUSU9OKGJsc3Bfc3BpMiksCisJRlVOQ1RJT04oYmxzcF9zcGkyX2NzMSksCisJRlVOQ1RJT04oYmxzcF9zcGkyX2NzMiksCisJRlVOQ1RJT04oYmxzcF9zcGkyX2NzMyksCisJRlVOQ1RJT04oYmxzcF9zcGkzKSwKKwlGVU5DVElPTihibHNwX3NwaTNfY3MxKSwKKwlGVU5DVElPTihibHNwX3NwaTNfY3MyKSwKKwlGVU5DVElPTihibHNwX3NwaTNfY3MzKSwKKwlGVU5DVElPTihibHNwX3NwaTQpLAorCUZVTkNUSU9OKGJsc3Bfc3BpNSksCisJRlVOQ1RJT04oYmxzcF9zcGk2KSwKKwlGVU5DVElPTihibHNwX3VhcnQxKSwKKwlGVU5DVElPTihibHNwX3VhcnQyKSwKKwlGVU5DVElPTihibHNwX3VpbTEpLAorCUZVTkNUSU9OKGJsc3BfdWltMiksCisJRlVOQ1RJT04oY2FtMV9yc3QpLAorCUZVTkNUSU9OKGNhbTFfc3RhbmRieSksCisJRlVOQ1RJT04oY2FtX21jbGswKSwKKwlGVU5DVElPTihjYW1fbWNsazEpLAorCUZVTkNUSU9OKGNjaV9hc3luYyksCisJRlVOQ1RJT04oY2NpX2kyYyksCisJRlVOQ1RJT04oY2NpX3RpbWVyMCksCisJRlVOQ1RJT04oY2NpX3RpbWVyMSksCisJRlVOQ1RJT04oY2NpX3RpbWVyMiksCisJRlVOQ1RJT04oY2RjX3BkbTApLAorCUZVTkNUSU9OKGNvZGVjX21hZCksCisJRlVOQ1RJT04oZGJnX291dCksCisJRlVOQ1RJT04oZGlzcGxheV81diksCisJRlVOQ1RJT04oZG1pYzBfY2xrKSwKKwlGVU5DVElPTihkbWljMF9kYXRhKSwKKwlGVU5DVElPTihkc2lfcnN0KSwKKwlGVU5DVElPTihlYmkwX3dyY2RjKSwKKwlGVU5DVElPTihldXJvX3VzKSwKKwlGVU5DVElPTihleHRfbHBhc3MpLAorCUZVTkNUSU9OKGZsYXNoX3N0cm9iZSksCisJRlVOQ1RJT04oZ2NjX2dwMV9jbGtfYSksCisJRlVOQ1RJT04oZ2NjX2dwMV9jbGtfYiksCisJRlVOQ1RJT04oZ2NjX2dwMl9jbGtfYSksCisJRlVOQ1RJT04oZ2NjX2dwMl9jbGtfYiksCisJRlVOQ1RJT04oZ2NjX2dwM19jbGtfYSksCisJRlVOQ1RJT04oZ2NjX2dwM19jbGtfYiksCisJRlVOQ1RJT04oZ3BpbyksCisJRlVOQ1RJT04oZ3NtMF90eDApLAorCUZVTkNUSU9OKGdzbTBfdHgxKSwKKwlGVU5DVElPTihnc20xX3R4MCksCisJRlVOQ1RJT04oZ3NtMV90eDEpLAorCUZVTkNUSU9OKGd5cm9fYWNjbCksCisJRlVOQ1RJT04oa3BzbnMwKSwKKwlGVU5DVElPTihrcHNuczEpLAorCUZVTkNUSU9OKGtwc25zMiksCisJRlVOQ1RJT04obGRvX2VuKSwKKwlGVU5DVElPTihsZG9fdXBkYXRlKSwKKwlGVU5DVElPTihtYWdfaW50KSwKKwlGVU5DVElPTihtZHBfdnN5bmMpLAorCUZVTkNUSU9OKG1vZGVtX3RzeW5jKSwKKwlGVU5DVElPTihtX3ZvYyksCisJRlVOQ1RJT04obmF2X3BwcyksCisJRlVOQ1RJT04obmF2X3RzeW5jKSwKKwlGVU5DVElPTihwYV9pbmRpY2F0b3IpLAorCUZVTkNUSU9OKHBiczApLAorCUZVTkNUSU9OKHBiczEpLAorCUZVTkNUSU9OKHBiczIpLAorCUZVTkNUSU9OKHByaV9taTJzKSwKKwlGVU5DVElPTihwcmlfbWkyc193cyksCisJRlVOQ1RJT04ocHJuZ19yb3NjKSwKKwlGVU5DVElPTihwd3JfY3J5cHRvX2VuYWJsZWRfYSksCisJRlVOQ1RJT04ocHdyX2NyeXB0b19lbmFibGVkX2IpLAorCUZVTkNUSU9OKHB3cl9tb2RlbV9lbmFibGVkX2EpLAorCUZVTkNUSU9OKHB3cl9tb2RlbV9lbmFibGVkX2IpLAorCUZVTkNUSU9OKHB3cl9uYXZfZW5hYmxlZF9hKSwKKwlGVU5DVElPTihwd3JfbmF2X2VuYWJsZWRfYiksCisJRlVOQ1RJT04ocWRzc19jdGl0cmlnX2luX2EwKSwKKwlGVU5DVElPTihxZHNzX2N0aXRyaWdfaW5fYTEpLAorCUZVTkNUSU9OKHFkc3NfY3RpdHJpZ19pbl9iMCksCisJRlVOQ1RJT04ocWRzc19jdGl0cmlnX2luX2IxKSwKKwlGVU5DVElPTihxZHNzX2N0aXRyaWdfb3V0X2EwKSwKKwlGVU5DVElPTihxZHNzX2N0aXRyaWdfb3V0X2ExKSwKKwlGVU5DVElPTihxZHNzX2N0aXRyaWdfb3V0X2IwKSwKKwlGVU5DVElPTihxZHNzX2N0aXRyaWdfb3V0X2IxKSwKKwlGVU5DVElPTihxZHNzX3RyYWNlY2xrX2EpLAorCUZVTkNUSU9OKHFkc3NfdHJhY2VjbGtfYiksCisJRlVOQ1RJT04ocWRzc190cmFjZWN0bF9hKSwKKwlGVU5DVElPTihxZHNzX3RyYWNlY3RsX2IpLAorCUZVTkNUSU9OKHFkc3NfdHJhY2VkYXRhX2EpLAorCUZVTkNUSU9OKHFkc3NfdHJhY2VkYXRhX2IpLAorCUZVTkNUSU9OKHJlc2V0X24pLAorCUZVTkNUSU9OKHNkX2NhcmQpLAorCUZVTkNUSU9OKHNkX3dyaXRlKSwKKwlGVU5DVElPTihzZWNfbWkycyksCisJRlVOQ1RJT04oc21iX2ludCksCisJRlVOQ1RJT04oc3NiaV93dHIwKSwKKwlGVU5DVElPTihzc2JpX3d0cjEpLAorCUZVTkNUSU9OKHVpbTEpLAorCUZVTkNUSU9OKHVpbTIpLAorCUZVTkNUSU9OKHVpbTMpLAorCUZVTkNUSU9OKHVpbV9iYXR0KSwKKwlGVU5DVElPTih3Y3NzX2J0KSwKKwlGVU5DVElPTih3Y3NzX2ZtKSwKKwlGVU5DVElPTih3Y3NzX3dsYW4pLAorCUZVTkNUSU9OKHdlYmNhbTFfcnN0KQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtc21fcGluZ3JvdXAgbXNtODkxNl9ncm91cHNbXSA9IHsKKwlQSU5HUk9VUCgwLCBibHNwX3NwaTEsIGJsc3BfdWFydDEsIGJsc3BfdWltMSwgZG1pYzBfY2xrLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDEsIGJsc3Bfc3BpMSwgYmxzcF91YXJ0MSwgYmxzcF91aW0xLCBkbWljMF9kYXRhLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDIsIGJsc3Bfc3BpMSwgYmxzcF91YXJ0MSwgYmxzcF9pMmMxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgzLCBibHNwX3NwaTEsIGJsc3BfdWFydDEsIGJsc3BfaTJjMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNCwgYmxzcF9zcGkyLCBibHNwX3VhcnQyLCBibHNwX3VpbTIsIGJsc3Bfc3BpMV9jczMsIHFkc3NfdHJhY2VjdGxfYiwgTkEsIGF0ZXN0X2NvbWJvZGFjLCBOQSwgTkEpLAorCVBJTkdST1VQKDUsIGJsc3Bfc3BpMiwgYmxzcF91YXJ0MiwgYmxzcF91aW0yLCBibHNwX3NwaTJfY3MzLCBxZHNzX3RyYWNlY2xrX2IsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2LCBibHNwX3NwaTIsIGJsc3BfdWFydDIsIGJsc3BfaTJjMiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNywgYmxzcF9zcGkyLCBibHNwX3VhcnQyLCBibHNwX2kyYzIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDgsIGJsc3Bfc3BpMywgbV92b2MsIHFkc3NfdHJhY2VkYXRhX2EsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDksIGJsc3Bfc3BpMywgcWRzc190cmFjZWRhdGFfYSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDEwLCBibHNwX3NwaTMsIGJsc3BfaTJjMywgcWRzc190cmFjZWRhdGFfYSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTEsIGJsc3Bfc3BpMywgYmxzcF9pMmMzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTIsIGJsc3Bfc3BpNCwgZ2NjX2dwMl9jbGtfYiwgTkEsIGF0ZXN0X2NvbWJvZGFjLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDEzLCBibHNwX3NwaTQsIGdjY19ncDNfY2xrX2IsIE5BLCBhdGVzdF9jb21ib2RhYywgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxNCwgYmxzcF9zcGk0LCBibHNwX2kyYzQsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxNSwgYmxzcF9zcGk0LCBibHNwX2kyYzQsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxNiwgYmxzcF9zcGk1LCBibHNwX3NwaTFfY3MyLCBOQSwgYXRlc3RfYmJyeDEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTcsIGJsc3Bfc3BpNSwgYmxzcF9zcGkyX2NzMiwgTkEsIGF0ZXN0X2JicngwLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDE4LCBibHNwX3NwaTUsIGJsc3BfaTJjNSwgTkEsIGF0ZXN0X2dwc2FkYzEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTksIGJsc3Bfc3BpNSwgYmxzcF9pMmM1LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjAsIGJsc3Bfc3BpNiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgcWRzc19jdGl0cmlnX2luX2EwLCBOQSksCisJUElOR1JPVVAoMjEsIGJsc3Bfc3BpNiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgcWRzc19jdGl0cmlnX2luX2IwLCBOQSksCisJUElOR1JPVVAoMjIsIGJsc3Bfc3BpNiwgYmxzcF9pMmM2LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjMsIGJsc3Bfc3BpNiwgYmxzcF9pMmM2LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMjQsIG1kcF92c3luYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgyNSwgbWRwX3ZzeW5jLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDI2LCBjYW1fbWNsazAsIE5BLCBOQSwgTkEsIE5BLCBOQSwgcWRzc190cmFjZWRhdGFfYiwgTkEsIE5BKSwKKwlQSU5HUk9VUCgyNywgY2FtX21jbGsxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgcWRzc190cmFjZWRhdGFfYiksCisJUElOR1JPVVAoMjgsIHB3cl9tb2RlbV9lbmFibGVkX2EsIE5BLCBOQSwgTkEsIE5BLCBOQSwgcWRzc190cmFjZWRhdGFfYiwgTkEsIGF0ZXN0X2NvbWJvZGFjKSwKKwlQSU5HUk9VUCgyOSwgY2NpX2kyYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBxZHNzX3RyYWNlZGF0YV9iLCBOQSwgYXRlc3RfY29tYm9kYWMpLAorCVBJTkdST1VQKDMwLCBjY2lfaTJjLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgcWRzc190cmFjZWRhdGFfYiksCisJUElOR1JPVVAoMzEsIGNjaV90aW1lcjAsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMzIsIGNjaV90aW1lcjEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMzMsIGNjaV9hc3luYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIHFkc3NfdHJhY2VkYXRhX2IpLAorCVBJTkdST1VQKDM0LCBwd3JfbmF2X2VuYWJsZWRfYSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIHFkc3NfdHJhY2VkYXRhX2IpLAorCVBJTkdST1VQKDM1LCBwd3JfY3J5cHRvX2VuYWJsZWRfYSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIHFkc3NfdHJhY2VkYXRhX2IpLAorCVBJTkdST1VQKDM2LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgcWRzc190cmFjZWRhdGFfYiwgTkEpLAorCVBJTkdST1VQKDM3LCBibHNwX3NwaTNfY3MyLCBOQSwgTkEsIE5BLCBOQSwgTkEsIHFkc3NfdHJhY2VkYXRhX2IsIE5BLCBOQSksCisJUElOR1JPVVAoMzgsIGNjaV90aW1lcjIsIGFkc3BfZXh0LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMzksIHdjc3NfYnQsIHFkc3NfdHJhY2VkYXRhX2EsIE5BLCBhdGVzdF9jb21ib2RhYywgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg0MCwgd2Nzc193bGFuLCBxZHNzX3RyYWNlZGF0YV9hLCBOQSwgYXRlc3RfY29tYm9kYWMsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNDEsIHdjc3Nfd2xhbiwgcWRzc190cmFjZWRhdGFfYSwgTkEsIGF0ZXN0X2NvbWJvZGFjLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQyLCB3Y3NzX3dsYW4sIHFkc3NfdHJhY2VkYXRhX2EsIE5BLCBhdGVzdF9jb21ib2RhYywgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg0Mywgd2Nzc193bGFuLCBwcm5nX3Jvc2MsIHFkc3NfdHJhY2VkYXRhX2EsIE5BLCBhdGVzdF9jb21ib2RhYywgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQ0LCB3Y3NzX3dsYW4sIE5BLCBhdGVzdF9jb21ib2RhYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNDUsIHdjc3NfZm0sIGV4dF9scGFzcywgcWRzc190cmFjZWN0bF9hLCBOQSwgYXRlc3RfY29tYm9kYWMsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg0Niwgd2Nzc19mbSwgcWRzc190cmFjZWNsa19hLCBOQSwgYXRlc3RfY29tYm9kYWMsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNDcsIHdjc3NfYnQsIGRiZ19vdXQsIHFkc3NfdHJhY2VkYXRhX2EsIE5BLCBhdGVzdF9jb21ib2RhYywgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDQ4LCB3Y3NzX2J0LCBxZHNzX3RyYWNlZGF0YV9hLCBOQSwgYXRlc3RfY29tYm9kYWMsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNDksIHVpbTMsIGdjY19ncDFfY2xrX2EsIHFkc3NfY3RpdHJpZ19pbl9hMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNTAsIHVpbTMsIGdjY19ncDJfY2xrX2EsIHFkc3NfY3RpdHJpZ19pbl9iMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNTEsIHVpbTMsIGdjY19ncDNfY2xrX2EsIHFkc3NfY3RpdHJpZ19vdXRfYjEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDUyLCB1aW0zLCBOQSwgcWRzc19jdGl0cmlnX291dF9hMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNTMsIHVpbTIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNTQsIHVpbTIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNTUsIHVpbTIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNTYsIHVpbTIsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNTcsIHVpbTEsIGF0ZXN0X2NoYXIzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNTgsIHVpbTEsIGF0ZXN0X2NoYXIyLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNTksIHVpbTEsIGF0ZXN0X2NoYXIxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNjAsIHVpbTEsIGF0ZXN0X2NoYXIwLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNjEsIHVpbV9iYXR0LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDYyLCBhdGVzdF9jaGFyLCBxZHNzX3RyYWNlZGF0YV9hLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNjMsIGNkY19wZG0wLCBiaW1jX2R0ZTAsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2NCwgY2RjX3BkbTAsIGJpbWNfZHRlMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDY1LCBjZGNfcGRtMCwgYmltY19kdGUwLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNjYsIGNkY19wZG0wLCBiaW1jX2R0ZTEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2NywgY2RjX3BkbTAsIGViaTBfd3JjZGMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg2OCwgY2RjX3BkbTAsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNjksIGJsc3Bfc3BpM19jczMsIHFkc3NfdHJhY2VkYXRhX2EsIE5BLCBhdGVzdF9jb21ib2RhYywgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg3MCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDcyLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg3MywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzQsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDc1LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg3NiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoNzcsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDc4LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg3OSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoODAsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDgxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg4MiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoODMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDg0LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg4NSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoODYsIE5BLCBwYV9pbmRpY2F0b3IsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg4NywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoODgsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDg5LCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg5MCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoOTEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDkyLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg5MywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoOTQsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDk1LCBOQSwgbW9kZW1fdHN5bmMsIG5hdl90c3luYywgbmF2X3BwcywgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCg5NiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoOTcsIGdjY19ncDFfY2xrX2IsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoOTgsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDk5LCBnc20wX3R4MCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMDAsIGdzbTBfdHgxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDEwMSwgZ3NtMV90eDAsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTAyLCBnc20xX3R4MSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMDMsIHNzYmlfd3RyMCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMDQsIHNzYmlfd3RyMCwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMDUsIHNzYmlfd3RyMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMDYsIHNzYmlfd3RyMSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMDcsIHBiczAsIE5BLCBhdGVzdF9jb21ib2RhYywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTA4LCBwYnMxLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDEwOSwgcGJzMiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMTAsIGJsc3Bfc3BpMV9jczEsIHByaV9taTJzX3dzLCBOQSwgcWRzc190cmFjZWRhdGFfYiwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMTEsIHFkc3NfdHJhY2VkYXRhX2IsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTEyLCBzZWNfbWkycywgTkEsIE5BLCBOQSwgcWRzc190cmFjZWRhdGFfYSwgTkEsIGF0ZXN0X3RzZW5zLCBOQSwgTkEpLAorCVBJTkdST1VQKDExMywgcHJpX21pMnMsIE5BLCBwd3JfbW9kZW1fZW5hYmxlZF9iLCBOQSwgTkEsIE5BLCBOQSwgTkEsIHFkc3NfdHJhY2VkYXRhX2EpLAorCVBJTkdST1VQKDExNCwgcHJpX21pMnMsIHB3cl9uYXZfZW5hYmxlZF9iLCBOQSwgTkEsIE5BLCBOQSwgTkEsIHFkc3NfdHJhY2VkYXRhX2EsIE5BKSwKKwlQSU5HUk9VUCgxMTUsIHByaV9taTJzLCBwd3JfY3J5cHRvX2VuYWJsZWRfYiwgTkEsIE5BLCBOQSwgTkEsIE5BLCBxZHNzX3RyYWNlZGF0YV9hLCBOQSksCisJUElOR1JPVVAoMTE2LCBwcmlfbWkycywgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMTcsIHNlY19taTJzLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVBJTkdST1VQKDExOCwgc2VjX21pMnMsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BLCBOQSksCisJUElOR1JPVVAoMTE5LCBzZWNfbWkycywgbV92b2MsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMjAsIGJsc3Bfc3BpM19jczEsIGxkb191cGRhdGUsIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEsIE5BKSwKKwlQSU5HUk9VUCgxMjEsIHNkX3dyaXRlLCBibHNwX3NwaTJfY3MxLCBsZG9fZW4sIE5BLCBOQSwgTkEsIE5BLCBOQSwgTkEpLAorCVNEQ19QSU5HUk9VUChzZGMxX2NsaywgMHgxMGEwMDAsIDEzLCA2KSwKKwlTRENfUElOR1JPVVAoc2RjMV9jbWQsIDB4MTBhMDAwLCAxMSwgMyksCisJU0RDX1BJTkdST1VQKHNkYzFfZGF0YSwgMHgxMGEwMDAsIDksIDApLAorCVNEQ19QSU5HUk9VUChzZGMyX2NsaywgMHgxMDkwMDAsIDE0LCA2KSwKKwlTRENfUElOR1JPVVAoc2RjMl9jbWQsIDB4MTA5MDAwLCAxMSwgMyksCisJU0RDX1BJTkdST1VQKHNkYzJfZGF0YSwgMHgxMDkwMDAsIDksIDApLAorCVNEQ19QSU5HUk9VUChxZHNkX2NsaywgMHgxOWMwMDAsIDMsIDApLAorCVNEQ19QSU5HUk9VUChxZHNkX2NtZCwgMHgxOWMwMDAsIDgsIDUpLAorCVNEQ19QSU5HUk9VUChxZHNkX2RhdGEwLCAweDE5YzAwMCwgMTMsIDEwKSwKKwlTRENfUElOR1JPVVAocWRzZF9kYXRhMSwgMHgxOWMwMDAsIDE4LCAxNSksCisJU0RDX1BJTkdST1VQKHFkc2RfZGF0YTIsIDB4MTljMDAwLCAyMywgMjApLAorCVNEQ19QSU5HUk9VUChxZHNkX2RhdGEzLCAweDE5YzAwMCwgMjgsIDI1KSwKK307CisKKyNkZWZpbmUgTlVNX0dQSU9fUElOR1JPVVBTCTEyMgorCitzdGF0aWMgY29uc3Qgc3RydWN0IG1zbV9waW5jdHJsX3NvY19kYXRhIG1zbTg5MTZfcGluY3RybCA9IHsKKwkucGlucyA9IG1zbTg5MTZfcGlucywKKwkubnBpbnMgPSBBUlJBWV9TSVpFKG1zbTg5MTZfcGlucyksCisJLmZ1bmN0aW9ucyA9IG1zbTg5MTZfZnVuY3Rpb25zLAorCS5uZnVuY3Rpb25zID0gQVJSQVlfU0laRShtc204OTE2X2Z1bmN0aW9ucyksCisJLmdyb3VwcyA9IG1zbTg5MTZfZ3JvdXBzLAorCS5uZ3JvdXBzID0gQVJSQVlfU0laRShtc204OTE2X2dyb3VwcyksCisJLm5ncGlvcyA9IE5VTV9HUElPX1BJTkdST1VQUywKK307CisKK3N0YXRpYyBpbnQgbXNtODkxNl9waW5jdHJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIG1zbV9waW5jdHJsX3Byb2JlKHBkZXYsICZtc204OTE2X3BpbmN0cmwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtc204OTE2X3BpbmN0cmxfb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInFjb20sbXNtODkxNi1waW5jdHJsIiwgfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtc204OTE2X3BpbmN0cmxfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1zbTg5MTYtcGluY3RybCIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG1zbTg5MTZfcGluY3RybF9vZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IG1zbTg5MTZfcGluY3RybF9wcm9iZSwKKwkucmVtb3ZlID0gbXNtX3BpbmN0cmxfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbXNtODkxNl9waW5jdHJsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtc204OTE2X3BpbmN0cmxfZHJpdmVyKTsKK30KK2FyY2hfaW5pdGNhbGwobXNtODkxNl9waW5jdHJsX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbXNtODkxNl9waW5jdHJsX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbXNtODkxNl9waW5jdHJsX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtc204OTE2X3BpbmN0cmxfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiUXVhbGNvbW0gbXNtODkxNiBwaW5jdHJsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXNtODkxNl9waW5jdHJsX29mX21hdGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtc3BtaS1ncGlvLmMgYi9kcml2ZXJzL3BpbmN0cmwvcWNvbS9waW5jdHJsLXNwbWktZ3Bpby5jCmluZGV4IGI4NjNiNTAuLjBmMTFhMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9xY29tL3BpbmN0cmwtc3BtaS1ncGlvLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3Fjb20vcGluY3RybC1zcG1pLWdwaW8uYwpAQCAtMTMxLDE1ICsxMzEsMTcgQEAKIAlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7CiB9OwogCi1zdHJ1Y3QgcG1pY19ncGlvX2JpbmRpbmdzIHsKLQljb25zdCBjaGFyCSpwcm9wZXJ0eTsKLQl1bnNpZ25lZAlwYXJhbTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGluY29uZl9nZW5lcmljX3BhcmFtcyBwbWljX2dwaW9fYmluZGluZ3NbXSA9IHsKKwl7InFjb20scHVsbC11cC1zdHJlbmd0aCIsCVBNSUNfR1BJT19DT05GX1BVTExfVVAsCQkwfSwKKwl7InFjb20sZHJpdmUtc3RyZW5ndGgiLAkJUE1JQ19HUElPX0NPTkZfU1RSRU5HVEgsCTB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwbWljX2dwaW9fYmluZGluZ3MgcG1pY19ncGlvX2JpbmRpbmdzW10gPSB7Ci0JeyJxY29tLHB1bGwtdXAtc3RyZW5ndGgiLAlQTUlDX0dQSU9fQ09ORl9QVUxMX1VQfSwKLQl7InFjb20sZHJpdmUtc3RyZW5ndGgiLAkJUE1JQ19HUElPX0NPTkZfU1RSRU5HVEh9LAorI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5fY29uZmlnX2l0ZW0gcG1pY19jb25mX2l0ZW1zW0FSUkFZX1NJWkUocG1pY19ncGlvX2JpbmRpbmdzKV0gPSB7CisJUENPTkZEVU1QKFBNSUNfR1BJT19DT05GX1BVTExfVVAsICAicHVsbCB1cCBzdHJlbmd0aCIsIE5VTEwsIHRydWUpLAorCVBDT05GRFVNUChQTUlDX0dQSU9fQ09ORl9TVFJFTkdUSCwgImRyaXZlLXN0cmVuZ3RoIiwgTlVMTCwgdHJ1ZSksCiB9OworI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBwbWljX2dwaW9fZ3JvdXBzW10gPSB7CiAJImdwaW8xIiwgImdwaW8yIiwgImdwaW8zIiwgImdwaW80IiwgImdwaW81IiwgImdwaW82IiwgImdwaW83IiwgImdwaW84IiwKQEAgLTIwOSwxMTggKzIxMSwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBtaWNfZ3Bpb19wYXJzZV9kdF9jb25maWcoc3RydWN0IGRldmljZV9ub2RlICpucCwKLQkJCQkgICAgIHN0cnVjdCBwaW5jdHJsX2RldiAqcGN0bGRldiwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKipjb25maWdzLAotCQkJCSAgICAgdW5zaWduZWQgaW50ICpuY29uZnMpCi17Ci0Jc3RydWN0IHBtaWNfZ3Bpb19iaW5kaW5ncyAqcGFyOwotCXVuc2lnbmVkIGxvbmcgY2ZnOwotCWludCByZXQsIGk7Ci0JdTMyIHZhbDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtaWNfZ3Bpb19iaW5kaW5ncyk7IGkrKykgewotCQlwYXIgPSAmcG1pY19ncGlvX2JpbmRpbmdzW2ldOwotCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgcGFyLT5wcm9wZXJ0eSwgJnZhbCk7Ci0KLQkJLyogcHJvcGVydHkgbm90IGZvdW5kICovCi0JCWlmIChyZXQgPT0gLUVJTlZBTCkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIHVzZSB6ZXJvIGFzIGRlZmF1bHQgdmFsdWUgKi8KLQkJaWYgKHJldCkKLQkJCXZhbCA9IDA7Ci0KLQkJZGV2X2RiZyhwY3RsZGV2LT5kZXYsICJmb3VuZCAlcyB3aXRoIHZhbHVlICV1XG4iLAotCQkJcGFyLT5wcm9wZXJ0eSwgdmFsKTsKLQotCQljZmcgPSBwaW5jb25mX3RvX2NvbmZpZ19wYWNrZWQocGFyLT5wYXJhbSwgdmFsKTsKLQotCQlyZXQgPSBwaW5jdHJsX3V0aWxzX2FkZF9jb25maWcocGN0bGRldiwgY29uZmlncywgbmNvbmZzLCBjZmcpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwbWljX2dwaW9fZHRfc3Vibm9kZV90b19tYXAoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAotCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAotCQkJCSAgICAgICBzdHJ1Y3QgcGluY3RybF9tYXAgKiptYXAsCi0JCQkJICAgICAgIHVuc2lnbmVkICpyZXNlcnYsIHVuc2lnbmVkICpubWFwcywKLQkJCQkgICAgICAgZW51bSBwaW5jdHJsX21hcF90eXBlIHR5cGUpCi17Ci0JdW5zaWduZWQgbG9uZyAqY29uZmlncyA9IE5VTEw7Ci0JdW5zaWduZWQgbmNvbmZzID0gMDsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0JY29uc3QgY2hhciAqZ3JvdXA7Ci0JaW50IHJldDsKLQotCXJldCA9IHBtaWNfZ3Bpb19wYXJzZV9kdF9jb25maWcobnAsIHBjdGxkZXYsICZjb25maWdzLCAmbmNvbmZzKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCWlmICghbmNvbmZzKQotCQlyZXR1cm4gMDsKLQotCXJldCA9IG9mX3Byb3BlcnR5X2NvdW50X3N0cmluZ3MobnAsICJwaW5zIik7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXhpdDsKLQotCXJldCA9IHBpbmN0cmxfdXRpbHNfcmVzZXJ2ZV9tYXAocGN0bGRldiwgbWFwLCByZXNlcnYsIG5tYXBzLCByZXQpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGV4aXQ7Ci0KLQlvZl9wcm9wZXJ0eV9mb3JfZWFjaF9zdHJpbmcobnAsICJwaW5zIiwgcHJvcCwgZ3JvdXApIHsKLQkJcmV0ID0gcGluY3RybF91dGlsc19hZGRfbWFwX2NvbmZpZ3MocGN0bGRldiwgbWFwLAotCQkJCQkJICAgIHJlc2Vydiwgbm1hcHMsIGdyb3VwLAotCQkJCQkJICAgIGNvbmZpZ3MsIG5jb25mcywgdHlwZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJYnJlYWs7Ci0JfQotZXhpdDoKLQlrZnJlZShjb25maWdzKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHBtaWNfZ3Bpb19kdF9ub2RlX3RvX21hcChzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsCi0JCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnBfY29uZmlnLAotCQkJCSAgICBzdHJ1Y3QgcGluY3RybF9tYXAgKiptYXAsIHVuc2lnbmVkICpubWFwcykKLXsKLQllbnVtIHBpbmN0cmxfbWFwX3R5cGUgdHlwZTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCXVuc2lnbmVkIHJlc2VydjsKLQlpbnQgcmV0OwotCi0JcmV0ID0gMDsKLQkqbWFwID0gTlVMTDsKLQkqbm1hcHMgPSAwOwotCXJlc2VydiA9IDA7Ci0JdHlwZSA9IFBJTl9NQVBfVFlQRV9DT05GSUdTX0dST1VQOwotCi0JZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShucF9jb25maWcsIG5wKSB7Ci0JCXJldCA9IHBpbmNvbmZfZ2VuZXJpY19kdF9zdWJub2RlX3RvX21hcChwY3RsZGV2LCBucCwgbWFwLAotCQkJCQkJCSZyZXNlcnYsIG5tYXBzLCB0eXBlKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCi0JCXJldCA9IHBtaWNfZ3Bpb19kdF9zdWJub2RlX3RvX21hcChwY3RsZGV2LCBucCwgbWFwLCAmcmVzZXJ2LAotCQkJCQkJICBubWFwcywgdHlwZSk7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAocmV0IDwgMCkKLQkJcGluY3RybF91dGlsc19kdF9mcmVlX21hcChwY3RsZGV2LCAqbWFwLCAqbm1hcHMpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5jdHJsX29wcyBwbWljX2dwaW9fcGluY3RybF9vcHMgPSB7CiAJLmdldF9ncm91cHNfY291bnQJPSBwbWljX2dwaW9fZ2V0X2dyb3Vwc19jb3VudCwKIAkuZ2V0X2dyb3VwX25hbWUJCT0gcG1pY19ncGlvX2dldF9ncm91cF9uYW1lLAogCS5nZXRfZ3JvdXBfcGlucwkJPSBwbWljX2dwaW9fZ2V0X2dyb3VwX3BpbnMsCi0JLmR0X25vZGVfdG9fbWFwCQk9IHBtaWNfZ3Bpb19kdF9ub2RlX3RvX21hcCwKKwkuZHRfbm9kZV90b19tYXAJCT0gcGluY29uZl9nZW5lcmljX2R0X25vZGVfdG9fbWFwX2dyb3VwLAogCS5kdF9mcmVlX21hcAkJPSBwaW5jdHJsX3V0aWxzX2R0X2ZyZWVfbWFwLAogfTsKIApAQCAtNTkwLDYgKzQ4NSw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGluY29uZl9vcHMgcG1pY19ncGlvX3BpbmNvbmZfb3BzID0geworCS5pc19nZW5lcmljCQkJPSB0cnVlLAogCS5waW5fY29uZmlnX2dyb3VwX2dldAkJPSBwbWljX2dwaW9fY29uZmlnX2dldCwKIAkucGluX2NvbmZpZ19ncm91cF9zZXQJCT0gcG1pY19ncGlvX2NvbmZpZ19zZXQsCiAJLnBpbl9jb25maWdfZ3JvdXBfZGJnX3Nob3cJPSBwbWljX2dwaW9fY29uZmlnX2RiZ19zaG93LApAQCAtODQ4LDYgKzc0NCwxMSBAQAogCXBjdHJsZGVzYy0+bmFtZSA9IGRldl9uYW1lKGRldik7CiAJcGN0cmxkZXNjLT5waW5zID0gcGluZGVzYzsKIAlwY3RybGRlc2MtPm5waW5zID0gbnBpbnM7CisJcGN0cmxkZXNjLT5udW1fY3VzdG9tX3BhcmFtcyA9IEFSUkFZX1NJWkUocG1pY19ncGlvX2JpbmRpbmdzKTsKKwlwY3RybGRlc2MtPmN1c3RvbV9wYXJhbXMgPSBwbWljX2dwaW9fYmluZGluZ3M7CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJcGN0cmxkZXNjLT5jdXN0b21fY29uZl9pdGVtcyA9IHBtaWNfY29uZl9pdGVtczsKKyNlbmRpZgogCiAJZm9yIChpID0gMDsgaSA8IG5waW5zOyBpKyssIHBpbmRlc2MrKykgewogCQlwYWQgPSAmcGFkc1tpXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9zYW1zdW5nL3BpbmN0cmwtZXh5bm9zLmMgYi9kcml2ZXJzL3BpbmN0cmwvc2Ftc3VuZy9waW5jdHJsLWV4eW5vcy5jCmluZGV4IGJlY2IzNzkuLmM4ZjgzZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9zYW1zdW5nL3BpbmN0cmwtZXh5bm9zLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3NhbXN1bmcvcGluY3RybC1leHlub3MuYwpAQCAtMTMwMCw2ICsxMzAwLDI1IEBACiAJRVhZTk9TX1BJTl9CQU5LX0VJTlRHKDgsIDB4MDYwLCAiZ3ByMyIsIDB4MGMpLAogfTsKIAorLyogcGluIGJhbmtzIG9mIGV4eW5vczcgcGluLWNvbnRyb2xsZXIgLSBCVVMxICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNhbXN1bmdfcGluX2JhbmtfZGF0YSBleHlub3M3X3Bpbl9iYW5rczhbXSBfX2luaXRjb25zdCA9IHsKKwlFWFlOT1NfUElOX0JBTktfRUlOVEcoOCwgMHgwMjAsICJncGYwIiwgMHgwMCksCisJRVhZTk9TX1BJTl9CQU5LX0VJTlRHKDgsIDB4MDQwLCAiZ3BmMSIsIDB4MDQpLAorCUVYWU5PU19QSU5fQkFOS19FSU5URyg0LCAweDA2MCwgImdwZjIiLCAweDA4KSwKKwlFWFlOT1NfUElOX0JBTktfRUlOVEcoNSwgMHgwODAsICJncGYzIiwgMHgwYyksCisJRVhZTk9TX1BJTl9CQU5LX0VJTlRHKDgsIDB4MGEwLCAiZ3BmNCIsIDB4MTApLAorCUVYWU5PU19QSU5fQkFOS19FSU5URyg4LCAweDBjMCwgImdwZjUiLCAweDE0KSwKKwlFWFlOT1NfUElOX0JBTktfRUlOVEcoNSwgMHgwZTAsICJncGcxIiwgMHgxOCksCisJRVhZTk9TX1BJTl9CQU5LX0VJTlRHKDUsIDB4MTAwLCAiZ3BnMiIsIDB4MWMpLAorCUVYWU5PU19QSU5fQkFOS19FSU5URyg2LCAweDEyMCwgImdwaDEiLCAweDIwKSwKKwlFWFlOT1NfUElOX0JBTktfRUlOVEcoMywgMHgxNDAsICJncHY2IiwgMHgyNCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNhbXN1bmdfcGluX2JhbmtfZGF0YSBleHlub3M3X3Bpbl9iYW5rczlbXSBfX2luaXRjb25zdCA9IHsKKwlFWFlOT1NfUElOX0JBTktfRUlOVEcoNywgMHgwMDAsICJncHowIiwgMHgwMCksCisJRVhZTk9TX1BJTl9CQU5LX0VJTlRHKDQsIDB4MDIwLCAiZ3B6MSIsIDB4MDQpLAorfTsKKwogY29uc3Qgc3RydWN0IHNhbXN1bmdfcGluX2N0cmwgZXh5bm9zN19waW5fY3RybFtdIF9faW5pdGNvbnN0ID0gewogCXsKIAkJLyogcGluLWNvbnRyb2xsZXIgaW5zdGFuY2UgMCBBbGl2ZSBkYXRhICovCkBAIC0xMzQyLDUgKzEzNjEsMTUgQEAKIAkJLnBpbl9iYW5rcwk9IGV4eW5vczdfcGluX2JhbmtzNywKIAkJLm5yX2JhbmtzCT0gQVJSQVlfU0laRShleHlub3M3X3Bpbl9iYW5rczcpLAogCQkuZWludF9ncGlvX2luaXQgPSBleHlub3NfZWludF9ncGlvX2luaXQsCisJfSwgeworCQkvKiBwaW4tY29udHJvbGxlciBpbnN0YW5jZSA4IEJVUzEgZGF0YSAqLworCQkucGluX2JhbmtzCT0gZXh5bm9zN19waW5fYmFua3M4LAorCQkubnJfYmFua3MJPSBBUlJBWV9TSVpFKGV4eW5vczdfcGluX2JhbmtzOCksCisJCS5laW50X2dwaW9faW5pdCA9IGV4eW5vc19laW50X2dwaW9faW5pdCwKKwl9LCB7CisJCS8qIHBpbi1jb250cm9sbGVyIGluc3RhbmNlIDkgQVVEIGRhdGEgKi8KKwkJLnBpbl9iYW5rcwk9IGV4eW5vczdfcGluX2JhbmtzOSwKKwkJLm5yX2JhbmtzCT0gQVJSQVlfU0laRShleHlub3M3X3Bpbl9iYW5rczkpLAorCQkuZWludF9ncGlvX2luaXQgPSBleHlub3NfZWludF9ncGlvX2luaXQsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL0tjb25maWcgYi9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL0tjb25maWcKaW5kZXggMjYxODdhYS4uOGM0YjNkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvS2NvbmZpZwpAQCAtMjAsNiArMjAsMTEgQEAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBHUElPcyB3aXRoaW4gdGhlIFNvQydzIHBpbiBmdW5jdGlvbgogCSAgY29udHJvbGxlci4KIAorY29uZmlnIFBJTkNUUkxfUEZDX0VNRVYyCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gQVJDSF9FTUVWMgorCXNlbGVjdCBQSU5DVFJMX1NIX1BGQworCiBjb25maWcgUElOQ1RSTF9QRkNfUjhBNzNBNAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIEFSQ0hfUjhBNzNBNApAQCAtNjgsMTEgKzczLDYgQEAKIAlkZXBlbmRzIG9uIEdQSU9MSUIKIAlzZWxlY3QgUElOQ1RSTF9TSF9QRkMKIAotY29uZmlnIFBJTkNUUkxfUEZDX1NINzM3MgotCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIEFSQ0hfU0g3MzcyCi0Jc2VsZWN0IFBJTkNUUkxfU0hfUEZDCi0KIGNvbmZpZyBQSU5DVFJMX1BGQ19TSDczQTAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBBUkNIX1NINzNBMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9NYWtlZmlsZSBiL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvTWFrZWZpbGUKaW5kZXggYWQ4ZjRjZi4uZjQwNzRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL01ha2VmaWxlCkBAIC0zLDYgKzMsNyBAQAogc2gtcGZjLW9ianMJCQkrPSBncGlvLm8KIGVuZGlmCiBvYmotJChDT05GSUdfUElOQ1RSTF9TSF9QRkMpCSs9IHNoLXBmYy5vCitvYmotJChDT05GSUdfUElOQ1RSTF9QRkNfRU1FVjIpCSs9IHBmYy1lbWV2Mi5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9QRkNfUjhBNzNBNCkJKz0gcGZjLXI4YTczYTQubwogb2JqLSQoQ09ORklHX1BJTkNUUkxfUEZDX1I4QTc3NDApCSs9IHBmYy1yOGE3NzQwLm8KIG9iai0kKENPTkZJR19QSU5DVFJMX1BGQ19SOEE3Nzc4KQkrPSBwZmMtcjhhNzc3OC5vCkBAIC0xMiw3ICsxMyw2IEBACiBvYmotJChDT05GSUdfUElOQ1RSTF9QRkNfU0g3MjAzKQkrPSBwZmMtc2g3MjAzLm8KIG9iai0kKENPTkZJR19QSU5DVFJMX1BGQ19TSDcyNjQpCSs9IHBmYy1zaDcyNjQubwogb2JqLSQoQ09ORklHX1BJTkNUUkxfUEZDX1NINzI2OSkJKz0gcGZjLXNoNzI2OS5vCi1vYmotJChDT05GSUdfUElOQ1RSTF9QRkNfU0g3MzcyKQkrPSBwZmMtc2g3MzcyLm8KIG9iai0kKENPTkZJR19QSU5DVFJMX1BGQ19TSDczQTApCSs9IHBmYy1zaDczYTAubwogb2JqLSQoQ09ORklHX1BJTkNUUkxfUEZDX1NINzcyMCkJKz0gcGZjLXNoNzcyMC5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9QRkNfU0g3NzIyKQkrPSBwZmMtc2g3NzIyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvY29yZS5jIGIvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9jb3JlLmMKaW5kZXggNjZkYzYyZC4uYTU2MjgwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9jb3JlLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9jb3JlLmMKQEAgLTQzOSw2ICs0MzksMTIgQEAKIAogI2lmZGVmIENPTkZJR19PRgogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2hfcGZjX29mX3RhYmxlW10gPSB7CisjaWZkZWYgQ09ORklHX1BJTkNUUkxfUEZDX0VNRVYyCisJeworCQkuY29tcGF0aWJsZSA9ICJyZW5lc2FzLHBmYy1lbWV2MiIsCisJCS5kYXRhID0gJmVtZXYyX3Bpbm11eF9pbmZvLAorCX0sCisjZW5kaWYKICNpZmRlZiBDT05GSUdfUElOQ1RSTF9QRkNfUjhBNzNBNAogCXsKIAkJLmNvbXBhdGlibGUgPSAicmVuZXNhcyxwZmMtcjhhNzNhNCIsCkBAIC00NzUsMTIgKzQ4MSw2IEBACiAJCS5kYXRhID0gJnI4YTc3OTFfcGlubXV4X2luZm8sCiAJfSwKICNlbmRpZgotI2lmZGVmIENPTkZJR19QSU5DVFJMX1BGQ19TSDczNzIKLQl7Ci0JCS5jb21wYXRpYmxlID0gInJlbmVzYXMscGZjLXNoNzM3MiIsCi0JCS5kYXRhID0gJnNoNzM3Ml9waW5tdXhfaW5mbywKLQl9LAotI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BJTkNUUkxfUEZDX1NINzNBMAogCXsKIAkJLmNvbXBhdGlibGUgPSAicmVuZXNhcyxwZmMtc2g3M2EwIiwKQEAgLTU3OSw2ICs1NzksOSBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBzaF9wZmNfaWRfdGFibGVbXSA9IHsKKyNpZmRlZiBDT05GSUdfUElOQ1RSTF9QRkNfRU1FVjIKKwl7ICJwZmMtZW1ldjIiLCAoa2VybmVsX3Vsb25nX3QpJmVtZXYyX3Bpbm11eF9pbmZvIH0sCisjZW5kaWYKICNpZmRlZiBDT05GSUdfUElOQ1RSTF9QRkNfUjhBNzNBNAogCXsgInBmYy1yOGE3M2E0IiwgKGtlcm5lbF91bG9uZ190KSZyOGE3M2E0X3Bpbm11eF9pbmZvIH0sCiAjZW5kaWYKQEAgLTYwNiw5ICs2MDksNiBAQAogI2lmZGVmIENPTkZJR19QSU5DVFJMX1BGQ19TSDcyNjkKIAl7ICJwZmMtc2g3MjY5IiwgKGtlcm5lbF91bG9uZ190KSZzaDcyNjlfcGlubXV4X2luZm8gfSwKICNlbmRpZgotI2lmZGVmIENPTkZJR19QSU5DVFJMX1BGQ19TSDczNzIKLQl7ICJwZmMtc2g3MzcyIiwgKGtlcm5lbF91bG9uZ190KSZzaDczNzJfcGlubXV4X2luZm8gfSwKLSNlbmRpZgogI2lmZGVmIENPTkZJR19QSU5DVFJMX1BGQ19TSDczQTAKIAl7ICJwZmMtc2g3M2EwIiwgKGtlcm5lbF91bG9uZ190KSZzaDczYTBfcGlubXV4X2luZm8gfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9jb3JlLmggYi9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL2NvcmUuaAppbmRleCAzZGFhYTUyLi42YjU5ZDYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL2NvcmUuaAorKysgYi9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL2NvcmUuaApAQCAtNjUsNiArNjUsNyBAQAogaW50IHNoX3BmY19nZXRfcGluX2luZGV4KHN0cnVjdCBzaF9wZmMgKnBmYywgdW5zaWduZWQgaW50IHBpbik7CiBpbnQgc2hfcGZjX2NvbmZpZ19tdXgoc3RydWN0IHNoX3BmYyAqcGZjLCB1bnNpZ25lZCBtYXJrLCBpbnQgcGlubXV4X3R5cGUpOwogCitleHRlcm4gY29uc3Qgc3RydWN0IHNoX3BmY19zb2NfaW5mbyBlbWV2Ml9waW5tdXhfaW5mbzsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2hfcGZjX3NvY19pbmZvIHI4YTczYTRfcGlubXV4X2luZm87CiBleHRlcm4gY29uc3Qgc3RydWN0IHNoX3BmY19zb2NfaW5mbyByOGE3NzQwX3Bpbm11eF9pbmZvOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzaF9wZmNfc29jX2luZm8gcjhhNzc3OF9waW5tdXhfaW5mbzsKQEAgLTc0LDcgKzc1LDYgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2hfcGZjX3NvY19pbmZvIHNoNzIwM19waW5tdXhfaW5mbzsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2hfcGZjX3NvY19pbmZvIHNoNzI2NF9waW5tdXhfaW5mbzsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2hfcGZjX3NvY19pbmZvIHNoNzI2OV9waW5tdXhfaW5mbzsKLWV4dGVybiBjb25zdCBzdHJ1Y3Qgc2hfcGZjX3NvY19pbmZvIHNoNzM3Ml9waW5tdXhfaW5mbzsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2hfcGZjX3NvY19pbmZvIHNoNzNhMF9waW5tdXhfaW5mbzsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2hfcGZjX3NvY19pbmZvIHNoNzcyMF9waW5tdXhfaW5mbzsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2hfcGZjX3NvY19pbmZvIHNoNzcyMl9waW5tdXhfaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvcGZjLWVtZXYyLmMgYi9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1lbWV2Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OWM2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1lbWV2Mi5jCkBAIC0wLDAgKzEsMTcxMSBAQAorLyoKKyAqIFBpbiBGdW5jdGlvbiBDb250cm9sbGVyIFN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgTmlrbGFzIFPDtmRlcmx1bmQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKworI2luY2x1ZGUgInNoX3BmYy5oIgorCisjZGVmaW5lIENQVV9BTExfUE9SVChmbiwgcGZ4LCBzZngpCQkJCQlcCisJUE9SVF8xMCgwLCAgZm4sIHBmeCwgc2Z4KSwJUE9SVF85MCgwLCAgZm4sIHBmeCwgc2Z4KSwJXAorCVBPUlRfMTAoMTAwLCBmbiwgcGZ4IyMxMCwgc2Z4KSwJUE9SVF8xMCgxMTAsIGZuLCBwZngjIzExLCBzZngpLAlcCisJUE9SVF8xMCgxMjAsIGZuLCBwZngjIzEyLCBzZngpLAlQT1JUXzEwKDEzMCwgZm4sIHBmeCMjMTMsIHNmeCksCVwKKwlQT1JUXzEwKDE0MCwgZm4sIHBmeCMjMTQsIHNmeCksIFBPUlRfMSgxNTAsIGZuLCBwZngjIzE1MCwgc2Z4KSwgXAorCVBPUlRfMSgxNTEsIGZuLCBwZngjIzE1MSwgc2Z4KSwgUE9SVF8xKDE1MiwgZm4sIHBmeCMjMTUyLCBzZngpLCBcCisJUE9SVF8xKDE1MywgZm4sIHBmeCMjMTUzLCBzZngpLCBQT1JUXzEoMTU0LCBmbiwgcGZ4IyMxNTQsIHNmeCksIFwKKwlQT1JUXzEoMTU1LCBmbiwgcGZ4IyMxNTUsIHNmeCksIFBPUlRfMSgxNTYsIGZuLCBwZngjIzE1Niwgc2Z4KSwgXAorCVBPUlRfMSgxNTcsIGZuLCBwZngjIzE1Nywgc2Z4KSwgUE9SVF8xKDE1OCwgZm4sIHBmeCMjMTU4LCBzZngpCisKK2VudW0geworCVBJTk1VWF9SRVNFUlZFRCA9IDAsCisKKwlQSU5NVVhfREFUQV9CRUdJTiwKKwlQT1JUX0FMTChEQVRBKSwKKwlQSU5NVVhfREFUQV9FTkQsCisKKwlQSU5NVVhfRlVOQ1RJT05fQkVHSU4sCisJUE9SVF9BTEwoRk4pLAorCisJLyogR1BTUjAgKi8KKwlGTl9MQ0QzXzFfMF9QT1JUMTgsIEZOX0xDRDNfMV8wX1BPUlQyMCwgRk5fTENEM18xXzBfUE9SVDIxLAorCUZOX0xDRDNfMV8wX1BPUlQyMiwgRk5fTENEM18xXzBfUE9SVDIzLAorCUZOX0pUX1NFTCwgRk5fRVJSX1JTVF9SRVFCLCBGTl9SRUZfQ0xLTywgRk5fRVhUX0NMS0ksIEZOX0xDRDNfUFhDTEtCLAorCisJLyogR1BTUjEgKi8KKwlGTl9MQ0QzXzlfOF9QT1JUMzgsIEZOX0xDRDNfOV84X1BPUlQzOSwgRk5fTENEM18xMV8xMF9QT1JUNDAsCisJRk5fTENEM18xMV8xMF9QT1JUNDEsIEZOX0xDRDNfMTFfMTBfUE9SVDQyLCBGTl9MQ0QzXzExXzEwX1BPUlQ0MywKKwlGTl9JSUNfMV8wX1BPUlQ0NiwgRk5fSUlDXzFfMF9QT1JUNDcsCisJRk5fTENEM19SMCwgRk5fTENEM19SMSwgRk5fTENEM19SMiwgRk5fTENEM19SMywgRk5fTENEM19SNCwgRk5fTENEM19SNSwKKwlGTl9JSUMwX1NDTCwgRk5fSUlDMF9TREEsIEZOX1NEX0NLSSwgRk5fU0RJMF9DS08sIEZOX1NESTBfQ0tJLAorCUZOX1NESTBfQ01ELCBGTl9TREkwX0RBVEEwLCBGTl9TREkwX0RBVEExLCBGTl9TREkwX0RBVEEyLAorCUZOX1NESTBfREFUQTMsIEZOX1NESTBfREFUQTQsIEZOX1NESTBfREFUQTUsIEZOX1NESTBfREFUQTYsCisJRk5fU0RJMF9EQVRBNywgRk5fU0RJMV9DS08sIEZOX1NESTFfQ0tJLCBGTl9TREkxX0NNRCwKKworCS8qIEdQU1IyICovCisJRk5fQUJfMV8wX1BPUlQ3MSwgRk5fQUJfMV8wX1BPUlQ3MiwgRk5fQUJfMV8wX1BPUlQ3MywKKwlGTl9BQl8xXzBfUE9SVDc0LCBGTl9BQl8xXzBfUE9SVDc1LCBGTl9BQl8xXzBfUE9SVDc2LAorCUZOX0FCXzFfMF9QT1JUNzcsIEZOX0FCXzFfMF9QT1JUNzgsIEZOX0FCXzFfMF9QT1JUNzksCisJRk5fQUJfMV8wX1BPUlQ4MCwgRk5fQUJfMV8wX1BPUlQ4MSwgRk5fQUJfMV8wX1BPUlQ4MiwKKwlGTl9BQl8xXzBfUE9SVDgzLCBGTl9BQl8xXzBfUE9SVDg0LCBGTl9BQl8zXzJfUE9SVDg1LAorCUZOX0FCXzNfMl9QT1JUODYsIEZOX0FCXzNfMl9QT1JUODcsIEZOX0FCXzNfMl9QT1JUODgsCisJRk5fQUJfNV80X1BPUlQ4OSwgRk5fQUJfNV80X1BPUlQ5MCwgRk5fQUJfN182X1BPUlQ5MSwKKwlGTl9BQl83XzZfUE9SVDkyLCBGTl9BQl8xXzBfUE9SVDkzLCBGTl9BQl8xXzBfUE9SVDk0LAorCUZOX0FCXzFfMF9QT1JUOTUsCisJRk5fU0RJMV9EQVRBMCwgRk5fU0RJMV9EQVRBMSwgRk5fU0RJMV9EQVRBMiwgRk5fU0RJMV9EQVRBMywKKwlGTl9BQl9DTEssIEZOX0FCX0NTQjAsIEZOX0FCX0NTQjEsCisKKwkvKiBHUFNSMyAqLworCUZOX0FCXzEzXzEyX1BPUlQxMDQsIEZOX0FCXzEzXzEyX1BPUlQxMDMsIEZOX0FCXzExXzEwX1BPUlQxMDIsCisJRk5fQUJfMTFfMTBfUE9SVDEwMSwgRk5fQUJfMTFfMTBfUE9SVDEwMCwgRk5fQUJfOV84X1BPUlQ5OSwKKwlGTl9BQl85XzhfUE9SVDk4LCBGTl9BQl85XzhfUE9SVDk3LAorCUZOX1VTSV8xXzBfUE9SVDEwOSwgRk5fVVNJXzFfMF9QT1JUMTEwLCBGTl9VU0lfMV8wX1BPUlQxMTEsCisJRk5fVVNJXzFfMF9QT1JUMTEyLCBGTl9VU0lfM18yX1BPUlQxMTMsIEZOX1VTSV8zXzJfUE9SVDExNCwKKwlGTl9VU0lfNV80X1BPUlQxMTUsIEZOX1VTSV81XzRfUE9SVDExNiwgRk5fVVNJXzVfNF9QT1JUMTE3LAorCUZOX1VTSV81XzRfUE9SVDExOCwgRk5fVVNJXzdfNl9QT1JUMTE5LCBGTl9VU0lfOV84X1BPUlQxMjAsCisJRk5fVVNJXzlfOF9QT1JUMTIxLAorCUZOX0FCX0EyMCwgRk5fVVNJMF9DUzEsIEZOX1VTSTBfQ1MyLCBGTl9VU0kxX0RJLAorCUZOX1VTSTFfRE8sCisJRk5fTlRTQ19DTEssIEZOX05UU0NfREFUQTAsIEZOX05UU0NfREFUQTEsIEZOX05UU0NfREFUQTIsCisJRk5fTlRTQ19EQVRBMywgRk5fTlRTQ19EQVRBNCwKKworCS8qIEdQUlM0ICovCisJRk5fSFNJXzFfMF9QT1JUMTQzLCBGTl9IU0lfMV8wX1BPUlQxNDQsIEZOX0hTSV8xXzBfUE9SVDE0NSwKKwlGTl9IU0lfMV8wX1BPUlQxNDYsIEZOX0hTSV8xXzBfUE9SVDE0NywgRk5fSFNJXzFfMF9QT1JUMTQ4LAorCUZOX0hTSV8xXzBfUE9SVDE0OSwgRk5fSFNJXzFfMF9QT1JUMTUwLAorCUZOX1VBUlRfMV8wX1BPUlQxNTcsIEZOX1VBUlRfMV8wX1BPUlQxNTgsCisJRk5fTlRTQ19EQVRBNSwgRk5fTlRTQ19EQVRBNiwgRk5fTlRTQ19EQVRBNywgRk5fQ0FNX0NMS08sCisJRk5fQ0FNX0NMS0ksIEZOX0NBTV9WUywgRk5fQ0FNX0hTLCBGTl9DQU1fWVVWMCwKKwlGTl9DQU1fWVVWMSwgRk5fQ0FNX1lVVjIsIEZOX0NBTV9ZVVYzLCBGTl9DQU1fWVVWNCwKKwlGTl9DQU1fWVVWNSwgRk5fQ0FNX1lVVjYsIEZOX0NBTV9ZVVY3LAorCUZOX0pUX1RETywgRk5fSlRfVERPRU4sIEZOX0xPV1BXUiwgRk5fVVNCX1ZCVVMsIEZOX1VBUlQxX1JYLAorCUZOX1VBUlQxX1RYLAorCisJLyogQ0hHX1BJTlNFTF9MQ0QzICovCisJRk5fU0VMX0xDRDNfMV8wXzAwLCBGTl9TRUxfTENEM18xXzBfMDEsCisJRk5fU0VMX0xDRDNfOV84XzAwLCBGTl9TRUxfTENEM185XzhfMTAsCisJRk5fU0VMX0xDRDNfMTFfMTBfMDAsIEZOX1NFTF9MQ0QzXzExXzEwXzAxLCBGTl9TRUxfTENEM18xMV8xMF8xMCwKKworCS8qIENIR19QSU5TRUxfSUlDICovCisJRk5fU0VMX0lJQ18xXzBfMDAsIEZOX1NFTF9JSUNfMV8wXzAxLAorCisJLyogQ0hHX1BJTlNFTF9BQiAqLworCUZOX1NFTF9BQl8xXzBfMDAsIEZOX1NFTF9BQl8xXzBfMTAsIEZOX1NFTF9BQl8zXzJfMDAsCisJRk5fU0VMX0FCXzNfMl8wMSwgRk5fU0VMX0FCXzNfMl8xMCwgRk5fU0VMX0FCXzNfMl8xMSwKKwlGTl9TRUxfQUJfNV80XzAwLCBGTl9TRUxfQUJfNV80XzAxLCBGTl9TRUxfQUJfNV80XzEwLAorCUZOX1NFTF9BQl81XzRfMTEsIEZOX1NFTF9BQl83XzZfMDAsIEZOX1NFTF9BQl83XzZfMDEsCisJRk5fU0VMX0FCXzdfNl8xMCwKKwlGTl9TRUxfQUJfOV84XzAwLCBGTl9TRUxfQUJfOV84XzAxLCBGTl9TRUxfQUJfOV84XzEwLAorCUZOX1NFTF9BQl8xMV8xMF8wMCwgRk5fU0VMX0FCXzExXzEwXzEwLAorCUZOX1NFTF9BQl8xM18xMl8wMCwgRk5fU0VMX0FCXzEzXzEyXzEwLAorCisJLyogQ0hHX1BJTlNFTF9VU0kgKi8KKwlGTl9TRUxfVVNJXzFfMF8wMCwgRk5fU0VMX1VTSV8xXzBfMDEsCisJRk5fU0VMX1VTSV8zXzJfMDAsIEZOX1NFTF9VU0lfM18yXzAxLAorCUZOX1NFTF9VU0lfNV80XzAwLCBGTl9TRUxfVVNJXzVfNF8wMSwKKwlGTl9TRUxfVVNJXzdfNl8wMCwgRk5fU0VMX1VTSV83XzZfMDEsCisJRk5fU0VMX1VTSV85XzhfMDAsIEZOX1NFTF9VU0lfOV84XzAxLAorCisJLyogQ0hHX1BJTlNFTF9IU0kgKi8KKwlGTl9TRUxfSFNJXzFfMF8wMCwgRk5fU0VMX0hTSV8xXzBfMDEsCisKKwkvKiBDSEdfUElOU0VMX1VBUlQgKi8KKwlGTl9TRUxfVUFSVF8xXzBfMDAsIEZOX1NFTF9VQVJUXzFfMF8wMSwKKworCVBJTk1VWF9GVU5DVElPTl9FTkQsCisKKwlQSU5NVVhfTUFSS19CRUdJTiwKKworCS8qIEdQU1IwICovCisJSlRfU0VMX01BUkssIEVSUl9SU1RfUkVRQl9NQVJLLCBSRUZfQ0xLT19NQVJLLCBFWFRfQ0xLSV9NQVJLLAorCUxDRDNfUFhDTEtCX01BUkssIFNEX0NLSV9NQVJLLAorCisJLyogR1BTUjEgKi8KKwlMQ0QzX1IwX01BUkssIExDRDNfUjFfTUFSSywgTENEM19SMl9NQVJLLCBMQ0QzX1IzX01BUkssIExDRDNfUjRfTUFSSywKKwlMQ0QzX1I1X01BUkssIElJQzBfU0NMX01BUkssIElJQzBfU0RBX01BUkssIFNESTBfQ0tPX01BUkssCisJU0RJMF9DS0lfTUFSSywgU0RJMF9DTURfTUFSSywgU0RJMF9EQVRBMF9NQVJLLCBTREkwX0RBVEExX01BUkssCisJU0RJMF9EQVRBMl9NQVJLLCBTREkwX0RBVEEzX01BUkssIFNESTBfREFUQTRfTUFSSywgU0RJMF9EQVRBNV9NQVJLLAorCVNESTBfREFUQTZfTUFSSywgU0RJMF9EQVRBN19NQVJLLCBTREkxX0NLT19NQVJLLCBTREkxX0NLSV9NQVJLLAorCVNESTFfQ01EX01BUkssCisKKwkvKiBHUFNSMiAqLworCVNESTFfREFUQTBfTUFSSywgU0RJMV9EQVRBMV9NQVJLLCBTREkxX0RBVEEyX01BUkssIFNESTFfREFUQTNfTUFSSywKKwlBQl9DTEtfTUFSSywgQUJfQ1NCMF9NQVJLLCBBQl9DU0IxX01BUkssCisKKwkvKiBHUFNSMyAqLworCUFCX0EyMF9NQVJLLCBVU0kwX0NTMV9NQVJLLCBVU0kwX0NTMl9NQVJLLCBVU0kxX0RJX01BUkssCisJVVNJMV9ET19NQVJLLAorCU5UU0NfQ0xLX01BUkssIE5UU0NfREFUQTBfTUFSSywgTlRTQ19EQVRBMV9NQVJLLCBOVFNDX0RBVEEyX01BUkssCisJTlRTQ19EQVRBM19NQVJLLCBOVFNDX0RBVEE0X01BUkssCisKKwkvKiBHUFNSMyAqLworCU5UU0NfREFUQTVfTUFSSywgTlRTQ19EQVRBNl9NQVJLLCBOVFNDX0RBVEE3X01BUkssIENBTV9DTEtPX01BUkssCisJQ0FNX0NMS0lfTUFSSywgQ0FNX1ZTX01BUkssIENBTV9IU19NQVJLLCBDQU1fWVVWMF9NQVJLLAorCUNBTV9ZVVYxX01BUkssIENBTV9ZVVYyX01BUkssIENBTV9ZVVYzX01BUkssIENBTV9ZVVY0X01BUkssCisJQ0FNX1lVVjVfTUFSSywgQ0FNX1lVVjZfTUFSSywgQ0FNX1lVVjdfTUFSSywKKwlKVF9URE9fTUFSSywgSlRfVERPRU5fTUFSSywgVVNCX1ZCVVNfTUFSSywgTE9XUFdSX01BUkssCisJVUFSVDFfUlhfTUFSSywgVUFSVDFfVFhfTUFSSywKKworCS8qIENIR19QSU5TRUxfTENEMyAqLworCUxDRDNfUFhDTEtfTUFSSywgTENEM19DTEtfSV9NQVJLLCBMQ0QzX0hTX01BUkssIExDRDNfVlNfTUFSSywKKwlMQ0QzX0RFX01BUkssIExDRDNfUjZfTUFSSywgTENEM19SN19NQVJLLCBMQ0QzX0cwX01BUkssIExDRDNfRzFfTUFSSywKKwlMQ0QzX0cyX01BUkssIExDRDNfRzNfTUFSSywgTENEM19HNF9NQVJLLCBMQ0QzX0c1X01BUkssIExDRDNfRzZfTUFSSywKKwlMQ0QzX0c3X01BUkssIExDRDNfQjBfTUFSSywgTENEM19CMV9NQVJLLCBMQ0QzX0IyX01BUkssIExDRDNfQjNfTUFSSywKKwlMQ0QzX0I0X01BUkssIExDRDNfQjVfTUFSSywgTENEM19CNl9NQVJLLCBMQ0QzX0I3X01BUkssCisJWVVWM19DTEtfT19NQVJLLCBZVVYzX0NMS19JX01BUkssIFlVVjNfSFNfTUFSSywgWVVWM19WU19NQVJLLAorCVlVVjNfREVfTUFSSywgWVVWM19EMF9NQVJLLCBZVVYzX0QxX01BUkssIFlVVjNfRDJfTUFSSywgWVVWM19EM19NQVJLLAorCVlVVjNfRDRfTUFSSywgWVVWM19ENV9NQVJLLCBZVVYzX0Q2X01BUkssIFlVVjNfRDdfTUFSSywgWVVWM19EOF9NQVJLLAorCVlVVjNfRDlfTUFSSywgWVVWM19EMTBfTUFSSywgWVVWM19EMTFfTUFSSywgWVVWM19EMTJfTUFSSywKKwlZVVYzX0QxM19NQVJLLCBZVVYzX0QxNF9NQVJLLCBZVVYzX0QxNV9NQVJLLAorCVRQMzNfQ0xLX01BUkssIFRQMzNfQ1RSTF9NQVJLLCBUUDMzX0RBVEEwX01BUkssIFRQMzNfREFUQTFfTUFSSywKKwlUUDMzX0RBVEEyX01BUkssIFRQMzNfREFUQTNfTUFSSywgVFAzM19EQVRBNF9NQVJLLCBUUDMzX0RBVEE1X01BUkssCisJVFAzM19EQVRBNl9NQVJLLCBUUDMzX0RBVEE3X01BUkssIFRQMzNfREFUQThfTUFSSywgVFAzM19EQVRBOV9NQVJLLAorCVRQMzNfREFUQTEwX01BUkssIFRQMzNfREFUQTExX01BUkssIFRQMzNfREFUQTEyX01BUkssIFRQMzNfREFUQTEzX01BUkssCisJVFAzM19EQVRBMTRfTUFSSywgVFAzM19EQVRBMTVfTUFSSywKKworCS8qIENIR19QSU5TRUxfSUlDICovCisJSUlDMV9TQ0xfTUFSSywgSUlDMV9TREFfTUFSSywgVUFSVDNfUlhfTUFSSywgVUFSVDNfVFhfTUFSSywKKworCS8qIENIR19QSU5TRUxfQUIgKi8KKwlBQl9DU0IyX01BUkssIEFCX0NTQjNfTUFSSywgQUJfUkRCX01BUkssIEFCX1dSQl9NQVJLLAorCUFCX1dBSVRfTUFSSywgQUJfQURWX01BUkssIEFCX0FEMF9NQVJLLCBBQl9BRDFfTUFSSywKKwlBQl9BRDJfTUFSSywgQUJfQUQzX01BUkssIEFCX0FENF9NQVJLLCBBQl9BRDVfTUFSSywKKwlBQl9BRDZfTUFSSywgQUJfQUQ3X01BUkssIEFCX0FEOF9NQVJLLCBBQl9BRDlfTUFSSywKKwlBQl9BRDEwX01BUkssIEFCX0FEMTFfTUFSSywgQUJfQUQxMl9NQVJLLCBBQl9BRDEzX01BUkssCisJQUJfQUQxNF9NQVJLLCBBQl9BRDE1X01BUkssIEFCX0ExN19NQVJLLCBBQl9BMThfTUFSSywKKwlBQl9BMTlfTUFSSywgQUJfQTIxX01BUkssIEFCX0EyMl9NQVJLLCBBQl9BMjNfTUFSSywKKwlBQl9BMjRfTUFSSywgQUJfQTI1X01BUkssIEFCX0EyNl9NQVJLLCBBQl9BMjdfTUFSSywKKwlBQl9BMjhfTUFSSywgQUJfQkVOMF9NQVJLLCBBQl9CRU4xX01BUkssCisJRFRWX0JDTEtfQV9NQVJLLCBEVFZfUFNZTkNfQV9NQVJLLCBEVFZfVkFMSURfQV9NQVJLLAorCURUVl9EQVRBX0FfTUFSSywKKwlTREkyX0NLT19NQVJLLCBTREkyX0NLSV9NQVJLLCBTREkyX0NNRF9NQVJLLAorCVNESTJfREFUQTBfTUFSSywgU0RJMl9EQVRBMV9NQVJLLCBTREkyX0RBVEEyX01BUkssCisJU0RJMl9EQVRBM19NQVJLLAorCUNGX0NTQjBfTUFSSywgQ0ZfQ1NCMV9NQVJLLCBDRl9JT1JEQl9NQVJLLAorCUNGX0lPV1JCX01BUkssIENGX0lPUkRZX01BUkssIENGX1JFU0VUX01BUkssCisJQ0ZfRDAwX01BUkssIENGX0QwMV9NQVJLLCBDRl9EMDJfTUFSSywgQ0ZfRDAzX01BUkssCisJQ0ZfRDA0X01BUkssIENGX0QwNV9NQVJLLCBDRl9EMDZfTUFSSywgQ0ZfRDA3X01BUkssCisJQ0ZfRDA4X01BUkssIENGX0QwOV9NQVJLLCBDRl9EMTBfTUFSSywgQ0ZfRDExX01BUkssCisJQ0ZfRDEyX01BUkssIENGX0QxM19NQVJLLCBDRl9EMTRfTUFSSywgQ0ZfRDE1X01BUkssCisJQ0ZfQTAwX01BUkssIENGX0EwMV9NQVJLLCBDRl9BMDJfTUFSSywKKwlDRl9JTlRSUV9NQVJLLCBDRl9JTlBBQ0tCX01BUkssIENGX0NEQjFfTUFSSywgQ0ZfQ0RCMl9NQVJLLAorCVVTSTVfQ0xLX0FfTUFSSywgVVNJNV9ESV9BX01BUkssIFVTSTVfRE9fQV9NQVJLLAorCVVTSTVfQ1MwX0FfTUFSSywgVVNJNV9DUzFfQV9NQVJLLCBVU0k1X0NTMl9BX01BUkssCisKKwkvKiBDSEdfUElOU0VMX1VTSSAqLworCVVTSTBfQ1MzX01BUkssIFVTSTBfQ1M0X01BUkssIFVTSTBfQ1M1X01BUkssCisJVVNJMF9DUzZfTUFSSywKKwlVU0kyX0NMS19NQVJLLCBVU0kyX0RJX01BUkssIFVTSTJfRE9fTUFSSywKKwlVU0kyX0NTMF9NQVJLLCBVU0kyX0NTMV9NQVJLLCBVU0kyX0NTMl9NQVJLLAorCVVTSTNfQ0xLX01BUkssIFVTSTNfRElfTUFSSywgVVNJM19ET19NQVJLLAorCVVTSTNfQ1MwX01BUkssCisJVVNJNF9DTEtfTUFSSywgVVNJNF9ESV9NQVJLLCBVU0k0X0RPX01BUkssCisJVVNJNF9DUzBfTUFSSywgVVNJNF9DUzFfTUFSSywKKwlQV00wX01BUkssIFBXTTFfTUFSSywKKwlEVFZfQkNMS19CX01BUkssIERUVl9QU1lOQ19CX01BUkssIERUVl9WQUxJRF9CX01BUkssCisJRFRWX0RBVEFfQl9NQVJLLAorCisJLyogQ0hHX1BJTlNFTF9IU0kgKi8KKwlVU0k1X0NMS19CX01BUkssIFVTSTVfRE9fQl9NQVJLLCBVU0k1X0NTMF9CX01BUkssIFVTSTVfQ1MxX0JfTUFSSywKKwlVU0k1X0NTMl9CX01BUkssIFVTSTVfQ1MzX0JfTUFSSywgVVNJNV9DUzRfQl9NQVJLLCBVU0k1X0RJX0JfTUFSSywKKworCS8qIENIR19QSU5TRUxfVUFSVCAqLworCVVBUlQxX0NUU0JfTUFSSywgVUFSVDFfUlRTQl9NQVJLLAorCVVBUlQyX1JYX01BUkssIFVBUlQyX1RYX01BUkssCisKKwlQSU5NVVhfTUFSS19FTkQsCit9OworCisvKiBQaW4gbnVtYmVycyBmb3IgcGlucyB3aXRob3V0IGEgY29ycmVzcG9uZGluZyBHUElPIHBvcnQgbnVtYmVyIGFyZSBjb21wdXRlZAorICogZnJvbSB0aGUgcm93IGFuZCBjb2x1bW4gbnVtYmVycyB3aXRoIGEgMTAwMCBvZmZzZXQgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoCisgKiBHUElPIHBvcnQgbnVtYmVycy4gKi8KKyNkZWZpbmUgUElOX05VTUJFUihyb3csIGNvbCkgICAgICAgICAgICAoMTAwMCsoKHJvdyktMSkqMjMrKGNvbCktMSkKKworLyogRXhwYW5kIHRvIGEgbGlzdCBvZiBzaF9wZmNfcGluIGVudHJpZXMgKG5hbWVkIFBPUlQjKS4KKyAqIE5PVEU6IE5vIGNvbmZpZyBhcmUgcmVjb3JkZWQgc2luY2UgdGhlIGRyaXZlciBkbyBub3QgaGFuZGxlIHBpbmNvbmYuICovCisjZGVmaW5lIF9fUElOX0NGRyhwbiwgcGZ4LCBzZngpICBTSF9QRkNfUElOX0NGRyhwZngsIDApCisjZGVmaW5lIFBJTk1VWF9FTUVWX0dQSU9fQUxMKCkJICBDUFVfQUxMX1BPUlQoX19QSU5fQ0ZHLCAsIHVudXNlZCkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaF9wZmNfcGluIHBpbm11eF9waW5zW10gPSB7CisJUElOTVVYX0VNRVZfR1BJT19BTEwoKSwKKworCS8qIFBpbnMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIEdQSU8gcG9ydCAqLworCVNIX1BGQ19QSU5fTkFNRUQoMiwgMTQsIEIxNCksCisJU0hfUEZDX1BJTl9OQU1FRCgyLCAxNSwgQjE1KSwKKwlTSF9QRkNfUElOX05BTUVEKDIsIDE2LCBCMTYpLAorCVNIX1BGQ19QSU5fTkFNRUQoMiwgMTcsIEIxNyksCisJU0hfUEZDX1BJTl9OQU1FRCgzLCAxNCwgQzE0KSwKKwlTSF9QRkNfUElOX05BTUVEKDMsIDE1LCBDMTUpLAorCVNIX1BGQ19QSU5fTkFNRUQoMywgMTYsIEMxNiksCisJU0hfUEZDX1BJTl9OQU1FRCgzLCAxNywgQzE3KSwKKwlTSF9QRkNfUElOX05BTUVEKDQsIDE0LCBEMTQpLAorCVNIX1BGQ19QSU5fTkFNRUQoNCwgMTUsIEQxNSksCisJU0hfUEZDX1BJTl9OQU1FRCg0LCAxNiwgRDE2KSwKKwlTSF9QRkNfUElOX05BTUVEKDQsIDE3LCBEMTcpLAorfTsKKworLyogRXhwYW5kIHRvIGEgbGlzdCBvZiBuYW1lX0RBVEEsIG5hbWVfRk4gbWFya3MgKi8KKyNkZWZpbmUgX19QT1JUX0RBVEEocG4sIHBmeCwgc2Z4KSAgUElOTVVYX0RBVEEoUE9SVCMjcGZ4IyNfREFUQSwgUE9SVCMjcGZ4IyNfRk4pCisjZGVmaW5lIFBJTk1VWF9FTUVWX0RBVEFfQUxMKCkJICBDUFVfQUxMX1BPUlQoX19QT1JUX0RBVEEsICwgdW51c2VkKQorCitzdGF0aWMgY29uc3QgdTE2IHBpbm11eF9kYXRhW10gPSB7CisJUElOTVVYX0VNRVZfREFUQV9BTEwoKSwgLyogUElOTVVYX0RBVEEoUE9SVE5fREFUQSwgUE9SVE5fRk4pLCAqLworCisJLyogR1BTUjAgKi8KKwkvKiBWOSAqLworCVBJTk1VWF9EQVRBKEpUX1NFTF9NQVJLLCBGTl9KVF9TRUwpLAorCS8qIFU5ICovCisJUElOTVVYX0RBVEEoRVJSX1JTVF9SRVFCX01BUkssIEZOX0VSUl9SU1RfUkVRQiksCisJLyogVjggKi8KKwlQSU5NVVhfREFUQShSRUZfQ0xLT19NQVJLLCBGTl9SRUZfQ0xLTyksCisJLyogVTggKi8KKwlQSU5NVVhfREFUQShFWFRfQ0xLSV9NQVJLLCBGTl9FWFRfQ0xLSSksCisJLyogQjIyKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKExDRDNfMV8wX1BPUlQxOCwgTENEM19QWENMSywgU0VMX0xDRDNfMV8wXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKExDRDNfMV8wX1BPUlQxOCwgWVVWM19DTEtfTywgU0VMX0xDRDNfMV8wXzAxKSwKKwkvKiBDMjEgKi8KKwlQSU5NVVhfREFUQShMQ0QzX1BYQ0xLQl9NQVJLLCBGTl9MQ0QzX1BYQ0xLQiksCisJLyogQTIxICovCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzFfMF9QT1JUMjAsIExDRDNfQ0xLX0ksIFNFTF9MQ0QzXzFfMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzFfMF9QT1JUMjAsIFlVVjNfQ0xLX0ksIFNFTF9MQ0QzXzFfMF8wMSksCisJLyogQjIxICovCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzFfMF9QT1JUMjEsIExDRDNfSFMsIFNFTF9MQ0QzXzFfMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzFfMF9QT1JUMjEsIFlVVjNfSFMsIFNFTF9MQ0QzXzFfMF8wMSksCisJLyogQzIwICovCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzFfMF9QT1JUMjIsIExDRDNfVlMsIFNFTF9MQ0QzXzFfMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzFfMF9QT1JUMjIsIFlVVjNfVlMsIFNFTF9MQ0QzXzFfMF8wMSksCisJLyogRDE5ICovCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzFfMF9QT1JUMjMsIExDRDNfREUsIFNFTF9MQ0QzXzFfMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzFfMF9QT1JUMjMsIFlVVjNfREUsIFNFTF9MQ0QzXzFfMF8wMSksCisKKwkvKiBHUFNSMSAqLworCS8qIEEyMCAqLworCVBJTk1VWF9EQVRBKExDRDNfUjBfTUFSSywgRk5fTENEM19SMCksCisJLyogQjIwICovCisJUElOTVVYX0RBVEEoTENEM19SMV9NQVJLLCBGTl9MQ0QzX1IxKSwKKwkvKiBBMTkgKi8KKwlQSU5NVVhfREFUQShMQ0QzX1IyX01BUkssIEZOX0xDRDNfUjIpLAorCS8qIEIxOSAqLworCVBJTk1VWF9EQVRBKExDRDNfUjNfTUFSSywgRk5fTENEM19SMyksCisJLyogQzE5ICovCisJUElOTVVYX0RBVEEoTENEM19SNF9NQVJLLCBGTl9MQ0QzX1I0KSwKKwkvKiBCMTggKi8KKwlQSU5NVVhfREFUQShMQ0QzX1I1X01BUkssIEZOX0xDRDNfUjUpLAorCS8qIEMxOCAqLworCVBJTk1VWF9JUFNSX05PRk4oTENEM185XzhfUE9SVDM4LCBMQ0QzX1I2LCBTRUxfTENEM185XzhfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oTENEM185XzhfUE9SVDM4LCBUUDMzX0NMSywgU0VMX0xDRDNfOV84XzEwKSwKKwkvKiBEMTggKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKExDRDNfOV84X1BPUlQzOSwgTENEM19SNywgU0VMX0xDRDNfOV84XzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKExDRDNfOV84X1BPUlQzOSwgVFAzM19DVFJMLCBTRUxfTENEM185XzhfMTApLAorCS8qIEExOCAqLworCVBJTk1VWF9JUFNSX05PRk4oTENEM18xMV8xMF9QT1JUNDAsIExDRDNfRzAsIFNFTF9MQ0QzXzExXzEwXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKExDRDNfMTFfMTBfUE9SVDQwLCBZVVYzX0QwLCBTRUxfTENEM18xMV8xMF8wMSksCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzExXzEwX1BPUlQ0MCwgVFAzM19EQVRBMCwgU0VMX0xDRDNfMTFfMTBfMTApLAorCS8qIEExNyAqLworCVBJTk1VWF9JUFNSX05PRk4oTENEM18xMV8xMF9QT1JUNDEsIExDRDNfRzEsIFNFTF9MQ0QzXzExXzEwXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKExDRDNfMTFfMTBfUE9SVDQxLCBZVVYzX0QxLCBTRUxfTENEM18xMV8xMF8wMSksCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzExXzEwX1BPUlQ0MSwgVFAzM19EQVRBMSwgU0VMX0xDRDNfMTFfMTBfMTApLAorCS8qIEIxNyAqLworCVBJTk1VWF9EQVRBKExDRDNfRzJfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMDApLAorCVBJTk1VWF9EQVRBKFlVVjNfRDJfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMDEpLAorCVBJTk1VWF9EQVRBKFRQMzNfREFUQTJfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMTApLAorCS8qIEMxNyAqLworCVBJTk1VWF9EQVRBKExDRDNfRzNfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMDApLAorCVBJTk1VWF9EQVRBKFlVVjNfRDNfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMDEpLAorCVBJTk1VWF9EQVRBKFRQMzNfREFUQTNfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMTApLAorCS8qIEQxNyAqLworCVBJTk1VWF9EQVRBKExDRDNfRzRfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMDApLAorCVBJTk1VWF9EQVRBKFlVVjNfRDRfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMDEpLAorCVBJTk1VWF9EQVRBKFRQMzNfREFUQTRfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMTApLAorCS8qIEIxNiAqLworCVBJTk1VWF9EQVRBKExDRDNfRzVfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMDApLAorCVBJTk1VWF9EQVRBKFlVVjNfRDVfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMDEpLAorCVBJTk1VWF9EQVRBKFRQMzNfREFUQTVfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMTApLAorCS8qIEMxNiAqLworCVBJTk1VWF9EQVRBKExDRDNfRzZfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMDApLAorCVBJTk1VWF9EQVRBKFlVVjNfRDZfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMDEpLAorCVBJTk1VWF9EQVRBKFRQMzNfREFUQTZfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMTApLAorCS8qIEQxNiAqLworCVBJTk1VWF9EQVRBKExDRDNfRzdfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMDApLAorCVBJTk1VWF9EQVRBKFlVVjNfRDdfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMDEpLAorCVBJTk1VWF9EQVRBKFRQMzNfREFUQTdfTUFSSywgRk5fU0VMX0xDRDNfMTFfMTBfMTApLAorCS8qIEExNiAqLworCVBJTk1VWF9JUFNSX05PRk4oTENEM18xMV8xMF9QT1JUNDIsIExDRDNfQjAsIFNFTF9MQ0QzXzExXzEwXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKExDRDNfMTFfMTBfUE9SVDQyLCBZVVYzX0Q4LCBTRUxfTENEM18xMV8xMF8wMSksCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzExXzEwX1BPUlQ0MiwgVFAzM19EQVRBOCwgU0VMX0xDRDNfMTFfMTBfMTApLAorCS8qIEExNSAqLworCVBJTk1VWF9JUFNSX05PRk4oTENEM18xMV8xMF9QT1JUNDMsIExDRDNfQjEsIFNFTF9MQ0QzXzExXzEwXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKExDRDNfMTFfMTBfUE9SVDQzLCBZVVYzX0Q5LCBTRUxfTENEM18xMV8xMF8wMSksCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzExXzEwX1BPUlQ0MywgVFAzM19EQVRBOSwgU0VMX0xDRDNfMTFfMTBfMTApLAorCS8qIEIxNSAqLworCVBJTk1VWF9JUFNSX05PRk4oTENEM18xMV8xMF9QT1JUNDMsIExDRDNfQjIsIFNFTF9MQ0QzXzExXzEwXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKExDRDNfMTFfMTBfUE9SVDQzLCBZVVYzX0QxMCwgU0VMX0xDRDNfMTFfMTBfMDEpLAorCVBJTk1VWF9JUFNSX05PRk4oTENEM18xMV8xMF9QT1JUNDMsIFRQMzNfREFUQTEwLCBTRUxfTENEM18xMV8xMF8xMCksCisJLyogQzE1ICovCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzExXzEwX1BPUlQ0MywgTENEM19CMywgU0VMX0xDRDNfMTFfMTBfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oTENEM18xMV8xMF9QT1JUNDMsIFlVVjNfRDExLCBTRUxfTENEM18xMV8xMF8wMSksCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzExXzEwX1BPUlQ0MywgVFAzM19EQVRBMTEsIFNFTF9MQ0QzXzExXzEwXzEwKSwKKwkvKiBEMTUgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKExDRDNfMTFfMTBfUE9SVDQzLCBMQ0QzX0I0LCBTRUxfTENEM18xMV8xMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzExXzEwX1BPUlQ0MywgWVVWM19EMTIsIFNFTF9MQ0QzXzExXzEwXzAxKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKExDRDNfMTFfMTBfUE9SVDQzLCBUUDMzX0RBVEExMiwgU0VMX0xDRDNfMTFfMTBfMTApLAorCS8qIEIxNCAqLworCVBJTk1VWF9JUFNSX05PRk4oTENEM18xMV8xMF9QT1JUNDMsIExDRDNfQjUsIFNFTF9MQ0QzXzExXzEwXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKExDRDNfMTFfMTBfUE9SVDQzLCBZVVYzX0QxMywgU0VMX0xDRDNfMTFfMTBfMDEpLAorCVBJTk1VWF9JUFNSX05PRk4oTENEM18xMV8xMF9QT1JUNDMsIFRQMzNfREFUQTEzLCBTRUxfTENEM18xMV8xMF8xMCksCisJLyogQzE0ICovCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzExXzEwX1BPUlQ0MywgTENEM19CNiwgU0VMX0xDRDNfMTFfMTBfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oTENEM18xMV8xMF9QT1JUNDMsIFlVVjNfRDE0LCBTRUxfTENEM18xMV8xMF8wMSksCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzExXzEwX1BPUlQ0MywgVFAzM19EQVRBMTQsIFNFTF9MQ0QzXzExXzEwXzEwKSwKKwkvKiBEMTQgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKExDRDNfMTFfMTBfUE9SVDQzLCBMQ0QzX0I3LCBTRUxfTENEM18xMV8xMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihMQ0QzXzExXzEwX1BPUlQ0MywgWVVWM19EMTUsIFNFTF9MQ0QzXzExXzEwXzAxKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKExDRDNfMTFfMTBfUE9SVDQzLCBUUDMzX0RBVEExNSwgU0VMX0xDRDNfMTFfMTBfMTApLAorCS8qIEFBOSAqLworCVBJTk1VWF9EQVRBKElJQzBfU0NMX01BUkssIEZOX0lJQzBfU0NMKSwKKwkvKiBBQTggKi8KKwlQSU5NVVhfREFUQShJSUMwX1NEQV9NQVJLLCBGTl9JSUMwX1NEQSksCisJLyogWTkgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKElJQ18xXzBfUE9SVDQ2LCBJSUMxX1NDTCwgU0VMX0lJQ18xXzBfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oSUlDXzFfMF9QT1JUNDYsIFVBUlQzX1JYLCBTRUxfSUlDXzFfMF8wMSksCisJLyogWTggKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKElJQ18xXzBfUE9SVDQ3LCBJSUMxX1NEQSwgU0VMX0lJQ18xXzBfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oSUlDXzFfMF9QT1JUNDcsIFVBUlQzX1RYLCBTRUxfSUlDXzFfMF8wMSksCisJLyogQUMxOSAqLworCVBJTk1VWF9EQVRBKFNEX0NLSV9NQVJLLCBGTl9TRF9DS0kpLAorCS8qIEFCMTggKi8KKwlQSU5NVVhfREFUQShTREkwX0NLT19NQVJLLCBGTl9TREkwX0NLTyksCisJLyogQUMxOCAqLworCVBJTk1VWF9EQVRBKFNESTBfQ0tJX01BUkssIEZOX1NESTBfQ0tJKSwKKwkvKiBZMTIgKi8KKwlQSU5NVVhfREFUQShTREkwX0NNRF9NQVJLLCBGTl9TREkwX0NNRCksCisJLyogQUExMyAqLworCVBJTk1VWF9EQVRBKFNESTBfREFUQTBfTUFSSywgRk5fU0RJMF9EQVRBMCksCisJLyogWTEzICovCisJUElOTVVYX0RBVEEoU0RJMF9EQVRBMV9NQVJLLCBGTl9TREkwX0RBVEExKSwKKwkvKiBBQTE0ICovCisJUElOTVVYX0RBVEEoU0RJMF9EQVRBMl9NQVJLLCBGTl9TREkwX0RBVEEyKSwKKwkvKiBZMTQgKi8KKwlQSU5NVVhfREFUQShTREkwX0RBVEEzX01BUkssIEZOX1NESTBfREFUQTMpLAorCS8qIEFBMTUgKi8KKwlQSU5NVVhfREFUQShTREkwX0RBVEE0X01BUkssIEZOX1NESTBfREFUQTQpLAorCS8qIFkxNSAqLworCVBJTk1VWF9EQVRBKFNESTBfREFUQTVfTUFSSywgRk5fU0RJMF9EQVRBNSksCisJLyogQUExNiAqLworCVBJTk1VWF9EQVRBKFNESTBfREFUQTZfTUFSSywgRk5fU0RJMF9EQVRBNiksCisJLyogWTE2ICovCisJUElOTVVYX0RBVEEoU0RJMF9EQVRBN19NQVJLLCBGTl9TREkwX0RBVEE3KSwKKwkvKiBBQjIyICovCisJUElOTVVYX0RBVEEoU0RJMV9DS09fTUFSSywgRk5fU0RJMV9DS08pLAorCS8qIEFBMjMgKi8KKwlQSU5NVVhfREFUQShTREkxX0NLSV9NQVJLLCBGTl9TREkxX0NLSSksCisJLyogQUMyMSAqLworCVBJTk1VWF9EQVRBKFNESTFfQ01EX01BUkssIEZOX1NESTFfQ01EKSwKKworCS8qIEdQU1IyICovCisJLyogQUIyMSAqLworCVBJTk1VWF9EQVRBKFNESTFfREFUQTBfTUFSSywgRk5fU0RJMV9EQVRBMCksCisJLyogQUIyMCAqLworCVBJTk1VWF9EQVRBKFNESTFfREFUQTFfTUFSSywgRk5fU0RJMV9EQVRBMSksCisJLyogQUIxOSAqLworCVBJTk1VWF9EQVRBKFNESTFfREFUQTJfTUFSSywgRk5fU0RJMV9EQVRBMiksCisJLyogQUExOSAqLworCVBJTk1VWF9EQVRBKFNESTFfREFUQTNfTUFSSywgRk5fU0RJMV9EQVRBMyksCisJLyogSjIzICovCisJUElOTVVYX0RBVEEoQUJfQ0xLX01BUkssIEZOX0FCX0NMSyksCisJLyogRDIxICovCisJUElOTVVYX0RBVEEoQUJfQ1NCMF9NQVJLLCBGTl9BQl9DU0IwKSwKKwkvKiBFMjEgKi8KKwlQSU5NVVhfREFUQShBQl9DU0IxX01BUkssIEZOX0FCX0NTQjEpLAorCS8qIEYyMCAqLworCVBJTk1VWF9JUFNSX05PRk4oQUJfMV8wX1BPUlQ3MSwgQUJfQ1NCMiwgU0VMX0FCXzFfMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihBQl8xXzBfUE9SVDcxLCBDRl9DU0IwLCBTRUxfQUJfMV8wXzEwKSwKKwkvKiBHMjAgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzFfMF9QT1JUNzIsIEFCX0NTQjMsIFNFTF9BQl8xXzBfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfMV8wX1BPUlQ3MiwgQ0ZfQ1NCMSwgU0VMX0FCXzFfMF8xMCksCisJLyogSjIwICovCisJUElOTVVYX0lQU1JfTk9GTihBQl8xXzBfUE9SVDczLCBBQl9SREIsIFNFTF9BQl8xXzBfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfMV8wX1BPUlQ3MywgQ0ZfSU9SREIsIFNFTF9BQl8xXzBfMTApLAorCS8qIEgyMCAqLworCVBJTk1VWF9JUFNSX05PRk4oQUJfMV8wX1BPUlQ3NCwgQUJfV1JCLCBTRUxfQUJfMV8wXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzFfMF9QT1JUNzQsIENGX0lPV1JCLCBTRUxfQUJfMV8wXzEwKSwKKwkvKiBMMjAgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzFfMF9QT1JUNzUsIEFCX1dBSVQsIFNFTF9BQl8xXzBfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfMV8wX1BPUlQ3NSwgQ0ZfSU9SRFksIFNFTF9BQl8xXzBfMTApLAorCS8qIEsyMCAqLworCVBJTk1VWF9JUFNSX05PRk4oQUJfMV8wX1BPUlQ3NiwgQUJfQURWLCBTRUxfQUJfMV8wXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzFfMF9QT1JUNzYsIENGX1JFU0VULCBTRUxfQUJfMV8wXzEwKSwKKwkvKiBDMjMgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzFfMF9QT1JUNzcsIEFCX0FEMCwgU0VMX0FCXzFfMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihBQl8xXzBfUE9SVDc3LCBDRl9EMDAsIFNFTF9BQl8xXzBfMTApLAorCS8qIEMyMiAqLworCVBJTk1VWF9JUFNSX05PRk4oQUJfMV8wX1BPUlQ3OCwgQUJfQUQxLCBTRUxfQUJfMV8wXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzFfMF9QT1JUNzgsIENGX0QwMSwgU0VMX0FCXzFfMF8xMCksCisJLyogRDIzICovCisJUElOTVVYX0lQU1JfTk9GTihBQl8xXzBfUE9SVDc5LCBBQl9BRDIsIFNFTF9BQl8xXzBfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfMV8wX1BPUlQ3OSwgQ0ZfRDAyLCBTRUxfQUJfMV8wXzEwKSwKKwkvKiBEMjIgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzFfMF9QT1JUODAsIEFCX0FEMywgU0VMX0FCXzFfMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihBQl8xXzBfUE9SVDgwLCBDRl9EMDMsIFNFTF9BQl8xXzBfMTApLAorCS8qIEUyMyAqLworCVBJTk1VWF9JUFNSX05PRk4oQUJfMV8wX1BPUlQ4MSwgQUJfQUQ0LCBTRUxfQUJfMV8wXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzFfMF9QT1JUODEsIENGX0QwNCwgU0VMX0FCXzFfMF8xMCksCisJLyogRTIyICovCisJUElOTVVYX0lQU1JfTk9GTihBQl8xXzBfUE9SVDgyLCBBQl9BRDUsIFNFTF9BQl8xXzBfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfMV8wX1BPUlQ4MiwgQ0ZfRDA1LCBTRUxfQUJfMV8wXzEwKSwKKwkvKiBGMjMgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzFfMF9QT1JUODMsIEFCX0FENiwgU0VMX0FCXzFfMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihBQl8xXzBfUE9SVDgzLCBDRl9EMDYsIFNFTF9BQl8xXzBfMTApLAorCS8qIEYyMiAqLworCVBJTk1VWF9JUFNSX05PRk4oQUJfMV8wX1BPUlQ4NCwgQUJfQUQ3LCBTRUxfQUJfMV8wXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzFfMF9QT1JUODQsIENGX0QwNywgU0VMX0FCXzFfMF8xMCksCisJLyogRjIxICovCisJUElOTVVYX0lQU1JfTk9GTihBQl8zXzJfUE9SVDg1LCBBQl9BRDgsIFNFTF9BQl8zXzJfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfM18yX1BPUlQ4NSwgRFRWX0JDTEtfQSwgU0VMX0FCXzNfMl8wMSksCisJUElOTVVYX0lQU1JfTk9GTihBQl8zXzJfUE9SVDg1LCBDRl9EMDgsIFNFTF9BQl8zXzJfMTApLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfM18yX1BPUlQ4NSwgVVNJNV9DTEtfQSwgU0VMX0FCXzNfMl8xMSksCisJLyogRzIzICovCisJUElOTVVYX0lQU1JfTk9GTihBQl8zXzJfUE9SVDg2LCBBQl9BRDksIFNFTF9BQl8zXzJfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfM18yX1BPUlQ4NiwgRFRWX1BTWU5DX0EsIFNFTF9BQl8zXzJfMDEpLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfM18yX1BPUlQ4NiwgQ0ZfRDA5LCBTRUxfQUJfM18yXzEwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzNfMl9QT1JUODYsIFVTSTVfRElfQSwgU0VMX0FCXzNfMl8xMSksCisJLyogRzIyICovCisJUElOTVVYX0lQU1JfTk9GTihBQl8zXzJfUE9SVDg3LCBBQl9BRDEwLCBTRUxfQUJfM18yXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzNfMl9QT1JUODcsIERUVl9WQUxJRF9BLCBTRUxfQUJfM18yXzAxKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzNfMl9QT1JUODcsIENGX0QxMCwgU0VMX0FCXzNfMl8xMCksCisJUElOTVVYX0lQU1JfTk9GTihBQl8zXzJfUE9SVDg3LCBVU0k1X0RPX0EsIFNFTF9BQl8zXzJfMTEpLAorCS8qIEcyMSAqLworCVBJTk1VWF9JUFNSX05PRk4oQUJfM18yX1BPUlQ4OCwgQUJfQUQxMSwgU0VMX0FCXzNfMl8wMCksCisJUElOTVVYX0lQU1JfTk9GTihBQl8zXzJfUE9SVDg4LCBEVFZfREFUQV9BLCBTRUxfQUJfM18yXzAxKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzNfMl9QT1JUODgsIENGX0QxMSwgU0VMX0FCXzNfMl8xMCksCisJUElOTVVYX0lQU1JfTk9GTihBQl8zXzJfUE9SVDg4LCBVU0k1X0NTMF9BLCBTRUxfQUJfM18yXzExKSwKKwkvKiBIMjMgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzVfNF9QT1JUODksIEFCX0FEMTIsIFNFTF9BQl81XzRfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfNV80X1BPUlQ4OSwgU0RJMl9EQVRBMCwgU0VMX0FCXzVfNF8wMSksCisJUElOTVVYX0lQU1JfTk9GTihBQl81XzRfUE9SVDg5LCBDRl9EMTIsIFNFTF9BQl81XzRfMTApLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfNV80X1BPUlQ4OSwgVVNJNV9DUzFfQSwgU0VMX0FCXzVfNF8xMSksCisJLyogSDIyICovCisJUElOTVVYX0lQU1JfTk9GTihBQl81XzRfUE9SVDkwLCBBQl9BRDEzLCBTRUxfQUJfNV80XzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzVfNF9QT1JUOTAsIFNESTJfREFUQTEsIFNFTF9BQl81XzRfMDEpLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfNV80X1BPUlQ5MCwgQ0ZfRDEzLCBTRUxfQUJfNV80XzEwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzVfNF9QT1JUOTAsIFVTSTVfQ1MyX0EsIFNFTF9BQl81XzRfMTEpLAorCS8qIEgyMSAqLworCVBJTk1VWF9JUFNSX05PRk4oQUJfN182X1BPUlQ5MSwgQUJfQUQxNCwgU0VMX0FCXzdfNl8wMCksCisJUElOTVVYX0lQU1JfTk9GTihBQl83XzZfUE9SVDkxLCBTREkyX0RBVEEyLCBTRUxfQUJfN182XzAxKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzdfNl9QT1JUOTEsIENGX0QxNCwgU0VMX0FCXzdfNl8xMCksCisJLyogSjIyICovCisJUElOTVVYX0lQU1JfTk9GTihBQl83XzZfUE9SVDkyLCBBQl9BRDE1LCBTRUxfQUJfN182XzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzdfNl9QT1JUOTIsIFNESTJfREFUQTMsIFNFTF9BQl83XzZfMDEpLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfN182X1BPUlQ5MiwgQ0ZfRDE1LCBTRUxfQUJfN182XzEwKSwKKwkvKiBKMjEgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzFfMF9QT1JUOTMsIEFCX0ExNywgU0VMX0FCXzFfMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihBQl8xXzBfUE9SVDkzLCBDRl9BMDAsIFNFTF9BQl8xXzBfMTApLAorCS8qIEsyMSAqLworCVBJTk1VWF9JUFNSX05PRk4oQUJfMV8wX1BPUlQ5NCwgQUJfQTE4LCBTRUxfQUJfMV8wXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzFfMF9QT1JUOTQsIENGX0EwMSwgU0VMX0FCXzFfMF8xMCksCisJLyogTDIxICovCisJUElOTVVYX0lQU1JfTk9GTihBQl8xXzBfUE9SVDk1LCBBQl9BMTksIFNFTF9BQl8xXzBfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfMV8wX1BPUlQ5NSwgQ0ZfQTAyLCBTRUxfQUJfMV8wXzEwKSwKKworCS8qIEdQU1IzICovCisJLyogTTIxICovCisJUElOTVVYX0RBVEEoQUJfQTIwX01BUkssIEZOX0FCX0EyMCksCisJLyogTjIxICovCisJUElOTVVYX0lQU1JfTk9GTihBQl85XzhfUE9SVDk3LCBBQl9BMjEsIFNFTF9BQl85XzhfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfOV84X1BPUlQ5NywgU0RJMl9DS08sIFNFTF9BQl85XzhfMDEpLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfOV84X1BPUlQ5NywgQ0ZfSU5UUlEsIFNFTF9BQl85XzhfMTApLAorCS8qIE0yMCAqLworCVBJTk1VWF9JUFNSX05PRk4oQUJfOV84X1BPUlQ5OCwgQUJfQTIyLCBTRUxfQUJfOV84XzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzlfOF9QT1JUOTgsIFNESTJfQ0tJLCBTRUxfQUJfOV84XzAxKSwKKwkvKiBOMjAgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzlfOF9QT1JUOTksIEFCX0EyMywgU0VMX0FCXzlfOF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihBQl85XzhfUE9SVDk5LCBTREkyX0NNRCwgU0VMX0FCXzlfOF8wMSksCisJLyogTDE4ICovCisJUElOTVVYX0lQU1JfTk9GTihBQl8xMV8xMF9QT1JUMTAwLCBBQl9BMjQsIFNFTF9BQl8xMV8xMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihBQl8xMV8xMF9QT1JUMTAwLCBDRl9JTlBBQ0tCLCBTRUxfQUJfMTFfMTBfMTApLAorCS8qIE0xOCAqLworCVBJTk1VWF9JUFNSX05PRk4oQUJfMTFfMTBfUE9SVDEwMSwgQUJfQTI1LCBTRUxfQUJfMTFfMTBfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfMTFfMTBfUE9SVDEwMSwgQ0ZfQ0RCMSwgU0VMX0FCXzExXzEwXzEwKSwKKwkvKiBOMTggKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzExXzEwX1BPUlQxMDIsIEFCX0EyNiwgU0VMX0FCXzExXzEwXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKEFCXzExXzEwX1BPUlQxMDIsIENGX0NEQjIsIFNFTF9BQl8xMV8xMF8xMCksCisJLyogTDE3ICovCisJUElOTVVYX0lQU1JfTk9GTihBQl8xM18xMl9QT1JUMTAzLCBBQl9BMjcsIFNFTF9BQl8xM18xMl8wMCksCisJUElOTVVYX0lQU1JfTk9GTihBQl8xM18xMl9QT1JUMTAzLCBBQl9CRU4wLCBTRUxfQUJfMTNfMTJfMTApLAorCS8qIE0xNyAqLworCVBJTk1VWF9JUFNSX05PRk4oQUJfMTNfMTJfUE9SVDEwNCwgQUJfQTI4LCBTRUxfQUJfMTNfMTJfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oQUJfMTNfMTJfUE9SVDEwNCwgQUJfQkVOMSwgU0VMX0FCXzEzXzEyXzEwKSwKKwkvKiBCOCAqLworCVBJTk1VWF9EQVRBKFVTSTBfQ1MxX01BUkssIEZOX1VTSTBfQ1MxKSwKKwkvKiBCOSAqLworCVBJTk1VWF9EQVRBKFVTSTBfQ1MyX01BUkssIEZOX1VTSTBfQ1MyKSwKKwkvKiBDMTAgKi8KKwlQSU5NVVhfREFUQShVU0kxX0RJX01BUkssIEZOX1VTSTFfREkpLAorCS8qIEQxMCAqLworCVBJTk1VWF9EQVRBKFVTSTFfRE9fTUFSSywgRk5fVVNJMV9ETyksCisJLyogQUI1ICovCisJUElOTVVYX0lQU1JfTk9GTihVU0lfMV8wX1BPUlQxMDksIFVTSTJfQ0xLLCBTRUxfVVNJXzFfMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihVU0lfMV8wX1BPUlQxMDksIERUVl9CQ0xLX0IsIFNFTF9VU0lfMV8wXzAxKSwKKwkvKiBBQTYgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKFVTSV8xXzBfUE9SVDExMCwgVVNJMl9ESSwgU0VMX1VTSV8xXzBfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oVVNJXzFfMF9QT1JUMTEwLCBEVFZfUFNZTkNfQiwgU0VMX1VTSV8xXzBfMDEpLAorCS8qIEFBNSAqLworCVBJTk1VWF9JUFNSX05PRk4oVVNJXzFfMF9QT1JUMTExLCBVU0kyX0RPLCBTRUxfVVNJXzFfMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihVU0lfMV8wX1BPUlQxMTEsIERUVl9WQUxJRF9CLCBTRUxfVVNJXzFfMF8wMSksCisJLyogWTcgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKFVTSV8xXzBfUE9SVDExMiwgVVNJMl9DUzAsIFNFTF9VU0lfMV8wXzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKFVTSV8xXzBfUE9SVDExMiwgRFRWX0RBVEFfQiwgU0VMX1VTSV8xXzBfMDEpLAorCS8qIEFBNyAqLworCVBJTk1VWF9JUFNSX05PRk4oVVNJXzNfMl9QT1JUMTEzLCBVU0kyX0NTMSwgU0VMX1VTSV8zXzJfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oVVNJXzNfMl9QT1JUMTEzLCBVU0k0X0NTMCwgU0VMX1VTSV8zXzJfMDEpLAorCS8qIFk2ICovCisJUElOTVVYX0lQU1JfTk9GTihVU0lfM18yX1BPUlQxMTQsIFVTSTJfQ1MyLCBTRUxfVVNJXzNfMl8wMCksCisJUElOTVVYX0lQU1JfTk9GTihVU0lfM18yX1BPUlQxMTQsIFVTSTRfQ1MxLCBTRUxfVVNJXzNfMl8wMSksCisJLyogQUM1ICovCisJUElOTVVYX0lQU1JfTk9GTihVU0lfNV80X1BPUlQxMTUsIFVTSTNfQ0xLLCBTRUxfVVNJXzVfNF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihVU0lfNV80X1BPUlQxMTUsIFVTSTBfQ1MzLCBTRUxfVVNJXzVfNF8wMSksCisJLyogQUM0ICovCisJUElOTVVYX0lQU1JfTk9GTihVU0lfNV80X1BPUlQxMTYsIFVTSTNfREksIFNFTF9VU0lfNV80XzAwKSwKKwlQSU5NVVhfSVBTUl9OT0ZOKFVTSV81XzRfUE9SVDExNiwgVVNJMF9DUzQsIFNFTF9VU0lfNV80XzAxKSwKKwkvKiBBQzMgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKFVTSV81XzRfUE9SVDExNywgVVNJM19ETywgU0VMX1VTSV81XzRfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oVVNJXzVfNF9QT1JUMTE3LCBVU0kwX0NTNSwgU0VMX1VTSV81XzRfMDEpLAorCS8qIEFCNCAqLworCVBJTk1VWF9JUFNSX05PRk4oVVNJXzVfNF9QT1JUMTE4LCBVU0kzX0NTMCwgU0VMX1VTSV81XzRfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oVVNJXzVfNF9QT1JUMTE4LCBVU0kwX0NTNiwgU0VMX1VTSV81XzRfMDEpLAorCS8qIEFCMyAqLworCVBJTk1VWF9JUFNSX05PRk4oVVNJXzdfNl9QT1JUMTE5LCBVU0k0X0NMSywgU0VMX1VTSV83XzZfMDEpLAorCS8qIEFBNCAqLworCVBJTk1VWF9JUFNSX05PRk4oVVNJXzlfOF9QT1JUMTIwLCBQV00wLCBTRUxfVVNJXzlfOF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihVU0lfOV84X1BPUlQxMjAsIFVTSTRfREksIFNFTF9VU0lfOV84XzAxKSwKKwkvKiBZNSAqLworCVBJTk1VWF9JUFNSX05PRk4oVVNJXzlfOF9QT1JUMTIxLCBQV00xLCBTRUxfVVNJXzlfOF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihVU0lfOV84X1BPUlQxMjEsIFVTSTRfRE8sIFNFTF9VU0lfOV84XzAxKSwKKwkvKiBWMjAgKi8KKwlQSU5NVVhfREFUQShOVFNDX0NMS19NQVJLLCBGTl9OVFNDX0NMSyksCisJLyogUDIwICovCisJUElOTVVYX0RBVEEoTlRTQ19EQVRBMF9NQVJLLCBGTl9OVFNDX0RBVEEwKSwKKwkvKiBQMTggKi8KKwlQSU5NVVhfREFUQShOVFNDX0RBVEExX01BUkssIEZOX05UU0NfREFUQTEpLAorCS8qIFIyMCAqLworCVBJTk1VWF9EQVRBKE5UU0NfREFUQTJfTUFSSywgRk5fTlRTQ19EQVRBMiksCisJLyogUjE4ICovCisJUElOTVVYX0RBVEEoTlRTQ19EQVRBM19NQVJLLCBGTl9OVFNDX0RBVEEzKSwKKwkvKiBUMjAgKi8KKwlQSU5NVVhfREFUQShOVFNDX0RBVEE0X01BUkssIEZOX05UU0NfREFUQTQpLAorCisJLyogR1BSUzMgKi8KKwkvKiBUMTggKi8KKwlQSU5NVVhfREFUQShOVFNDX0RBVEE1X01BUkssIEZOX05UU0NfREFUQTUpLAorCS8qIFUyMCAqLworCVBJTk1VWF9EQVRBKE5UU0NfREFUQTZfTUFSSywgRk5fTlRTQ19EQVRBNiksCisJLyogVTE4ICovCisJUElOTVVYX0RBVEEoTlRTQ19EQVRBN19NQVJLLCBGTl9OVFNDX0RBVEE3KSwKKwkvKiBXMjMgKi8KKwlQSU5NVVhfREFUQShDQU1fQ0xLT19NQVJLLCBGTl9DQU1fQ0xLTyksCisJLyogWTIzICovCisJUElOTVVYX0RBVEEoQ0FNX0NMS0lfTUFSSywgRk5fQ0FNX0NMS0kpLAorCS8qIFcyMiAqLworCVBJTk1VWF9EQVRBKENBTV9WU19NQVJLLCBGTl9DQU1fVlMpLAorCS8qIFYyMSAqLworCVBJTk1VWF9EQVRBKENBTV9IU19NQVJLLCBGTl9DQU1fSFMpLAorCS8qIFQyMSAqLworCVBJTk1VWF9EQVRBKENBTV9ZVVYwX01BUkssIEZOX0NBTV9ZVVYwKSwKKwkvKiBUMjIgKi8KKwlQSU5NVVhfREFUQShDQU1fWVVWMV9NQVJLLCBGTl9DQU1fWVVWMSksCisJLyogVDIzICovCisJUElOTVVYX0RBVEEoQ0FNX1lVVjJfTUFSSywgRk5fQ0FNX1lVVjIpLAorCS8qIFUyMSAqLworCVBJTk1VWF9EQVRBKENBTV9ZVVYzX01BUkssIEZOX0NBTV9ZVVYzKSwKKwkvKiBVMjIgKi8KKwlQSU5NVVhfREFUQShDQU1fWVVWNF9NQVJLLCBGTl9DQU1fWVVWNCksCisJLyogVTIzICovCisJUElOTVVYX0RBVEEoQ0FNX1lVVjVfTUFSSywgRk5fQ0FNX1lVVjUpLAorCS8qIFYyMiAqLworCVBJTk1VWF9EQVRBKENBTV9ZVVY2X01BUkssIEZOX0NBTV9ZVVY2KSwKKwkvKiBWMjMgKi8KKwlQSU5NVVhfREFUQShDQU1fWVVWN19NQVJLLCBGTl9DQU1fWVVWNyksCisJLyogSzIyICovCisJUElOTVVYX0lQU1JfTk9GTihIU0lfMV8wX1BPUlQxNDMsIFVTSTVfQ0xLX0IsIFNFTF9IU0lfMV8wXzAxKSwKKwkvKiBLMjMgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKEhTSV8xXzBfUE9SVDE0NCwgVVNJNV9ET19CLCBTRUxfSFNJXzFfMF8wMSksCisJLyogTDIzICovCisJUElOTVVYX0lQU1JfTk9GTihIU0lfMV8wX1BPUlQxNDUsIFVTSTVfQ1MwX0IsIFNFTF9IU0lfMV8wXzAxKSwKKwkvKiBMMjIgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKEhTSV8xXzBfUE9SVDE0NiwgVVNJNV9DUzFfQiwgU0VMX0hTSV8xXzBfMDEpLAorCS8qIE4yMiAqLworCVBJTk1VWF9JUFNSX05PRk4oSFNJXzFfMF9QT1JUMTQ3LCBVU0k1X0NTMl9CLCBTRUxfSFNJXzFfMF8wMSksCisJLyogTjIzICovCisJUElOTVVYX0lQU1JfTk9GTihIU0lfMV8wX1BPUlQxNDgsIFVTSTVfQ1MzX0IsIFNFTF9IU0lfMV8wXzAxKSwKKwkvKiBNMjMgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKEhTSV8xXzBfUE9SVDE0OSwgVVNJNV9DUzRfQiwgU0VMX0hTSV8xXzBfMDEpLAorCS8qIE0yMiAqLworCVBJTk1VWF9JUFNSX05PRk4oSFNJXzFfMF9QT1JUMTUwLCBVU0k1X0RJX0IsIFNFTF9IU0lfMV8wXzAxKSwKKwkvKiBEMTMgKi8KKwlQSU5NVVhfREFUQShKVF9URE9fTUFSSywgRk5fSlRfVERPKSwKKwkvKiBGMTMgKi8KKwlQSU5NVVhfREFUQShKVF9URE9FTl9NQVJLLCBGTl9KVF9URE9FTiksCisJLyogQUExMiAqLworCVBJTk1VWF9EQVRBKFVTQl9WQlVTX01BUkssIEZOX1VTQl9WQlVTKSwKKwkvKiBBMTIgKi8KKwlQSU5NVVhfREFUQShMT1dQV1JfTUFSSywgRk5fTE9XUFdSKSwKKwkvKiBZMTEgKi8KKwlQSU5NVVhfREFUQShVQVJUMV9SWF9NQVJLLCBGTl9VQVJUMV9SWCksCisJLyogWTEwICovCisJUElOTVVYX0RBVEEoVUFSVDFfVFhfTUFSSywgRk5fVUFSVDFfVFgpLAorCS8qIEFBMTAgKi8KKwlQSU5NVVhfSVBTUl9OT0ZOKFVBUlRfMV8wX1BPUlQxNTcsIFVBUlQxX0NUU0IsIFNFTF9VQVJUXzFfMF8wMCksCisJUElOTVVYX0lQU1JfTk9GTihVQVJUXzFfMF9QT1JUMTU3LCBVQVJUMl9SWCwgU0VMX1VBUlRfMV8wXzAxKSwKKwkvKiBBQjEwICovCisJUElOTVVYX0lQU1JfTk9GTihVQVJUXzFfMF9QT1JUMTU4LCBVQVJUMV9SVFNCLCBTRUxfVUFSVF8xXzBfMDApLAorCVBJTk1VWF9JUFNSX05PRk4oVUFSVF8xXzBfUE9SVDE1OCwgVUFSVDJfVFgsIFNFTF9VQVJUXzFfMF8wMSksCit9OworCisKKyNkZWZpbmUgRU1FVl9NVVhfUElOKG5hbWUsIHBpbiwgbWFyaykgXAorCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmFtZSMjX3BpbnNbXSA9IHsgcGluIH07IFwKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbWUjI19tdXhbXSA9IHsgbWFyayMjX01BUksgfQorCisvKiA9IFsgU3lzdGVtIF0gPT09PT09PT09PT0gKi8KK0VNRVZfTVVYX1BJTihlcnJfcnN0X3JlcWIsIDMsIEVSUl9SU1RfUkVRQik7CitFTUVWX01VWF9QSU4ocmVmX2Nsa28sIDQsIFJFRl9DTEtPKTsKK0VNRVZfTVVYX1BJTihleHRfY2xraSwgNSwgRVhUX0NMS0kpOworRU1FVl9NVVhfUElOKGxvd3B3ciwgMTU0LCBMT1dQV1IpOworCisvKiA9IFsgRXh0ZXJuYWwgTWVtb3J5XSA9PT0gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWJfbWFpbl9waW5zW10gPSB7CisJLyogQUJfUkRCLCBBQl9XUkIgKi8KKwk3MywgNzQsCisJLyogQUJfQURbMDoxNV0gKi8KKwk3NywgNzgsIDc5LCA4MCwKKwk4MSwgODIsIDgzLCA4NCwKKwk4NSwgODYsIDg3LCA4OCwKKwk4OSwgOTAsIDkxLCA5MiwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGFiX21haW5fbXV4W10gPSB7CisJQUJfUkRCX01BUkssIEFCX1dSQl9NQVJLLAorCUFCX0FEMF9NQVJLLCBBQl9BRDFfTUFSSywgQUJfQUQyX01BUkssIEFCX0FEM19NQVJLLAorCUFCX0FENF9NQVJLLCBBQl9BRDVfTUFSSywgQUJfQUQ2X01BUkssIEFCX0FEN19NQVJLLAorCUFCX0FEOF9NQVJLLCBBQl9BRDlfTUFSSywgQUJfQUQxMF9NQVJLLCBBQl9BRDExX01BUkssCisJQUJfQUQxMl9NQVJLLCBBQl9BRDEzX01BUkssIEFCX0FEMTRfTUFSSywgQUJfQUQxNV9NQVJLLAorfTsKKworRU1FVl9NVVhfUElOKGFiX2NsaywgNjgsIEFCX0NMSyk7CitFTUVWX01VWF9QSU4oYWJfY3NiMCwgNjksIEFCX0NTQjApOworRU1FVl9NVVhfUElOKGFiX2NzYjEsIDcwLCBBQl9DU0IxKTsKK0VNRVZfTVVYX1BJTihhYl9jc2IyLCA3MSwgQUJfQ1NCMik7CitFTUVWX01VWF9QSU4oYWJfY3NiMywgNzIsIEFCX0NTQjMpOworRU1FVl9NVVhfUElOKGFiX3dhaXQsIDc1LCBBQl9XQUlUKTsKK0VNRVZfTVVYX1BJTihhYl9hZHYsIDc2LCBBQl9BRFYpOworRU1FVl9NVVhfUElOKGFiX2ExNywgOTMsIEFCX0ExNyk7CitFTUVWX01VWF9QSU4oYWJfYTE4LCA5NCwgQUJfQTE4KTsKK0VNRVZfTVVYX1BJTihhYl9hMTksIDk1LCBBQl9BMTkpOworRU1FVl9NVVhfUElOKGFiX2EyMCwgOTYsIEFCX0EyMCk7CitFTUVWX01VWF9QSU4oYWJfYTIxLCA5NywgQUJfQTIxKTsKK0VNRVZfTVVYX1BJTihhYl9hMjIsIDk4LCBBQl9BMjIpOworRU1FVl9NVVhfUElOKGFiX2EyMywgOTksIEFCX0EyMyk7CitFTUVWX01VWF9QSU4oYWJfYTI0LCAxMDAsIEFCX0EyNCk7CitFTUVWX01VWF9QSU4oYWJfYTI1LCAxMDEsIEFCX0EyNSk7CitFTUVWX01VWF9QSU4oYWJfYTI2LCAxMDIsIEFCX0EyNik7CitFTUVWX01VWF9QSU4oYWJfYTI3LCAxMDMsIEFCX0EyNyk7CitFTUVWX01VWF9QSU4oYWJfYTI4LCAxMDQsIEFCX0EyOCk7CitFTUVWX01VWF9QSU4oYWJfYmVuMCwgMTAzLCBBQl9CRU4wKTsKK0VNRVZfTVVYX1BJTihhYl9iZW4xLCAxMDQsIEFCX0JFTjEpOworCisvKiA9IFsgQ0FNIF0gPT09PT09PT09PT09PT0gKi8KK0VNRVZfTVVYX1BJTihjYW1fY2xrbywgMTMxLCBDQU1fQ0xLTyk7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNhbV9waW5zW10gPSB7CisJLyogQ0xLSSwgVlMsIEhTICovCisJMTMyLCAxMzMsIDEzNCwKKwkvKiBDQU1fWVVWWzA6N10gKi8KKwkxMzUsIDEzNiwgMTM3LCAxMzgsCisJMTM5LCAxNDAsIDE0MSwgMTQyLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2FtX211eFtdID0geworCUNBTV9DTEtJX01BUkssIENBTV9WU19NQVJLLCBDQU1fSFNfTUFSSywKKwlDQU1fWVVWMF9NQVJLLCBDQU1fWVVWMV9NQVJLLCBDQU1fWVVWMl9NQVJLLCBDQU1fWVVWM19NQVJLLAorCUNBTV9ZVVY0X01BUkssIENBTV9ZVVY1X01BUkssIENBTV9ZVVY2X01BUkssIENBTV9ZVVY3X01BUkssCit9OworCisvKiA9IFsgQ0YgXSAtPT09PT09PT09PT09PT0gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2ZfY3RybF9waW5zW10gPSB7CisJLyogQ1NCMCwgQ1NCMSwgSU9SREIsIElPV1JCLCBJT1JEWSwgUkVTRVQsCisJICogQTAwLCBBMDEsIEEwMiwgSU5UUlEsIElOUEFDS0IsIENEQjEsIENEQjIgKi8KKwk3MSwgNzIsIDczLCA3NCwKKwk3NSwgNzYsIDkzLCA5NCwKKwk5NSwgOTcsIDEwMCwgMTAxLAorCTEwMiwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNmX2N0cmxfbXV4W10gPSB7CisJQ0ZfQ1NCMF9NQVJLLCBDRl9DU0IxX01BUkssIENGX0lPUkRCX01BUkssIENGX0lPV1JCX01BUkssCisJQ0ZfSU9SRFlfTUFSSywgQ0ZfUkVTRVRfTUFSSywgQ0ZfQTAwX01BUkssIENGX0EwMV9NQVJLLAorCUNGX0EwMl9NQVJLLCBDRl9JTlRSUV9NQVJLLCBDRl9JTlBBQ0tCX01BUkssIENGX0NEQjFfTUFSSywKKwlDRl9DREIyX01BUkssCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNmX2RhdGE4X3BpbnNbXSA9IHsKKwkvKiBDRl9EWzA6OF0gKi8KKwk3NywgNzgsIDc5LCA4MCwKKwk4MSwgODIsIDgzLCA4NCwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNmX2RhdGE4X211eFtdID0geworCUNGX0QwMF9NQVJLLCBDRl9EMDFfTUFSSywgQ0ZfRDAyX01BUkssIENGX0QwM19NQVJLLAorCUNGX0QwNF9NQVJLLCBDRl9EMDVfTUFSSywgQ0ZfRDA2X01BUkssIENGX0QwN19NQVJLLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2ZfZGF0YTE2X3BpbnNbXSA9IHsKKwkvKiBDRl9EWzA6MTVdICovCisJNzcsIDc4LCA3OSwgODAsCisJODEsIDgyLCA4MywgODQsCisJODUsIDg2LCA4NywgODgsCisJODksIDkwLCA5MSwgOTIsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjZl9kYXRhMTZfbXV4W10gPSB7CisJQ0ZfRDAwX01BUkssIENGX0QwMV9NQVJLLCBDRl9EMDJfTUFSSywgQ0ZfRDAzX01BUkssCisJQ0ZfRDA0X01BUkssIENGX0QwNV9NQVJLLCBDRl9EMDZfTUFSSywgQ0ZfRDA3X01BUkssCisJQ0ZfRDA4X01BUkssIENGX0QwOV9NQVJLLCBDRl9EMTBfTUFSSywgQ0ZfRDExX01BUkssCisJQ0ZfRDEyX01BUkssIENGX0QxM19NQVJLLCBDRl9EMTRfTUFSSywgQ0ZfRDE1X01BUkssCit9OworCisvKiA9IFsgRFRWIF0gPT09PT09PT09PT09PT0gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZHR2X2FfcGluc1tdID0geworCS8qIEJDTEssIFBTWU5DLCBWQUxJRCwgREFUQSAqLworCTg1LCA4NiwgODcsIDg4LAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZHR2X2FfbXV4W10gPSB7CisJRFRWX0JDTEtfQV9NQVJLLCBEVFZfUFNZTkNfQV9NQVJLLCBEVFZfVkFMSURfQV9NQVJLLCBEVFZfREFUQV9BX01BUkssCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGR0dl9iX3BpbnNbXSA9IHsKKwkvKiBCQ0xLLCBQU1lOQywgVkFMSUQsIERBVEEgKi8KKwkxMDksIDExMCwgMTExLCAxMTIsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBkdHZfYl9tdXhbXSA9IHsKKwlEVFZfQkNMS19CX01BUkssIERUVl9QU1lOQ19CX01BUkssIERUVl9WQUxJRF9CX01BUkssIERUVl9EQVRBX0JfTUFSSywKK307CisKKy8qID0gWyBJSUMwIF0gPT09PT09PT09PT09PSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpaWMwX3BpbnNbXSA9IHsKKwkvKiBTQ0wsIFNEQSAqLworCTQ0LCA0NSwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlpYzBfbXV4W10gPSB7CisJSUlDMF9TQ0xfTUFSSywgSUlDMF9TREFfTUFSSywKK307CisKKy8qID0gWyBJSUMxIF0gPT09PT09PT09PT09PSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpaWMxX3BpbnNbXSA9IHsKKwkvKiBTQ0wsIFNEQSAqLworCTQ2LCA0NywKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGlpYzFfbXV4W10gPSB7CisJSUlDMV9TQ0xfTUFSSywgSUlDMV9TREFfTUFSSywKK307CisKKy8qID0gWyBKVEFHIF0gPT09PT09PT09PT09PSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBqdGFnX3BpbnNbXSA9IHsKKwkvKiBTRUwsIFRETywgVERPRU4gKi8KKwkyLCAxNTEsIDE1MiwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGp0YWdfbXV4W10gPSB7CisJSlRfU0VMX01BUkssIEpUX1RET19NQVJLLCBKVF9URE9FTl9NQVJLLAorfTsKKworLyogPSBbIExDRC9ZVVYgXSA9PT09PT09PT09ICovCitFTUVWX01VWF9QSU4obGNkM19weGNsaywgMTgsIExDRDNfUFhDTEspOworRU1FVl9NVVhfUElOKGxjZDNfcHhjbGtiLCAxOSwgTENEM19QWENMS0IpOworRU1FVl9NVVhfUElOKGxjZDNfY2xrX2ksIDIwLCBMQ0QzX0NMS19JKTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsY2QzX3N5bmNfcGluc1tdID0geworCS8qIEhTLCBWUywgREUgKi8KKwkyMSwgMjIsIDIzLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGNkM19zeW5jX211eFtdID0geworCUxDRDNfSFNfTUFSSywgTENEM19WU19NQVJLLCBMQ0QzX0RFX01BUkssCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxjZDNfcmdiODg4X3BpbnNbXSA9IHsKKwkvKiBSWzA6N10sIEdbMDo3XSwgQlswOjddICovCisJMzIsIDMzLCAzNCwgMzUsCisJMzYsIDM3LCAzOCwgMzksCisJNDAsIDQxLCBQSU5fTlVNQkVSKDIsIDE3KSwgUElOX05VTUJFUigzLCAxNyksCisJUElOX05VTUJFUig0LCAxNyksIFBJTl9OVU1CRVIoMiwgMTYpLCBQSU5fTlVNQkVSKDMsIDE2KSwKKwlQSU5fTlVNQkVSKDQsIDE2KSwKKwk0MiwgNDMsIFBJTl9OVU1CRVIoMiwgMTUpLCBQSU5fTlVNQkVSKDMsIDE1KSwKKwlQSU5fTlVNQkVSKDQsIDE1KSwgUElOX05VTUJFUigyLCAxNCksIFBJTl9OVU1CRVIoMywgMTQpLAorCVBJTl9OVU1CRVIoNCwgMTQpCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsY2QzX3JnYjg4OF9tdXhbXSA9IHsKKwlMQ0QzX1IwX01BUkssIExDRDNfUjFfTUFSSywgTENEM19SMl9NQVJLLCBMQ0QzX1IzX01BUkssCisJTENEM19SNF9NQVJLLCBMQ0QzX1I1X01BUkssIExDRDNfUjZfTUFSSywgTENEM19SN19NQVJLLAorCUxDRDNfRzBfTUFSSywgTENEM19HMV9NQVJLLCBMQ0QzX0cyX01BUkssIExDRDNfRzNfTUFSSywKKwlMQ0QzX0c0X01BUkssIExDRDNfRzVfTUFSSywgTENEM19HNl9NQVJLLCBMQ0QzX0c3X01BUkssCisJTENEM19CMF9NQVJLLCBMQ0QzX0IxX01BUkssIExDRDNfQjJfTUFSSywgTENEM19CM19NQVJLLAorCUxDRDNfQjRfTUFSSywgTENEM19CNV9NQVJLLCBMQ0QzX0I2X01BUkssIExDRDNfQjdfTUFSSywKK307CisKK0VNRVZfTVVYX1BJTih5dXYzX2Nsa19pLCAyMCwgWVVWM19DTEtfSSk7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHl1djNfcGluc1tdID0geworCS8qIENMS19PLCBIUywgVlMsIERFICovCisJMTgsIDIxLCAyMiwgMjMsCisJLyogWVVWM19EWzA6MTVdICovCisJNDAsIDQxLCBQSU5fTlVNQkVSKDIsIDE3KSwgUElOX05VTUJFUigzLCAxNyksCisJUElOX05VTUJFUig0LCAxNyksIFBJTl9OVU1CRVIoMiwgMTYpLCBQSU5fTlVNQkVSKDMsIDE2KSwKKwlQSU5fTlVNQkVSKDQsIDE2KSwKKwk0MiwgNDMsIFBJTl9OVU1CRVIoMiwgMTUpLCBQSU5fTlVNQkVSKDMsIDE1KSwKKwlQSU5fTlVNQkVSKDQsIDE1KSwgUElOX05VTUJFUigyLCAxNCksIFBJTl9OVU1CRVIoMywgMTQpLAorCVBJTl9OVU1CRVIoNCwgMTQpLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgeXV2M19tdXhbXSA9IHsKKwlZVVYzX0NMS19PX01BUkssIFlVVjNfSFNfTUFSSywgWVVWM19WU19NQVJLLCBZVVYzX0RFX01BUkssCisJWVVWM19EMF9NQVJLLCBZVVYzX0QxX01BUkssIFlVVjNfRDJfTUFSSywgWVVWM19EM19NQVJLLAorCVlVVjNfRDRfTUFSSywgWVVWM19ENV9NQVJLLCBZVVYzX0Q2X01BUkssIFlVVjNfRDdfTUFSSywKKwlZVVYzX0Q4X01BUkssIFlVVjNfRDlfTUFSSywgWVVWM19EMTBfTUFSSywgWVVWM19EMTFfTUFSSywKKwlZVVYzX0QxMl9NQVJLLCBZVVYzX0QxM19NQVJLLCBZVVYzX0QxNF9NQVJLLCBZVVYzX0QxNV9NQVJLLAorfTsKKworLyogPSBbIE5UU0MgXSA9PT09PT09PT09PT09ICovCitFTUVWX01VWF9QSU4obnRzY19jbGssIDEyMiwgTlRTQ19DTEspOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBudHNjX2RhdGFfcGluc1tdID0geworCS8qIE5UU0NfREFUQVswOjddICovCisJMTIzLCAxMjQsIDEyNSwgMTI2LAorCTEyNywgMTI4LCAxMjksIDEzMCwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG50c2NfZGF0YV9tdXhbXSA9IHsKKwlOVFNDX0RBVEEwX01BUkssIE5UU0NfREFUQTFfTUFSSywgTlRTQ19EQVRBMl9NQVJLLCBOVFNDX0RBVEEzX01BUkssCisJTlRTQ19EQVRBNF9NQVJLLCBOVFNDX0RBVEE1X01BUkssIE5UU0NfREFUQTZfTUFSSywgTlRTQ19EQVRBN19NQVJLLAorfTsKKworLyogPSBbIFBXTTAgXSA9PT09PT09PT09PT09ICovCitFTUVWX01VWF9QSU4ocHdtMCwgMTIwLCBQV00wKTsKKworLyogPSBbIFBXTTEgXSA9PT09PT09PT09PT09ICovCitFTUVWX01VWF9QSU4ocHdtMSwgMTIxLCBQV00xKTsKKworLyogPSBbIFNEIF0gPT09PT09PT09PT09PT09ICovCitFTUVWX01VWF9QSU4oc2RfY2tpLCA0OCwgU0RfQ0tJKTsKKworLyogPSBbIFNESU8wIF0gPT09PT09PT09PT09ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaTBfY3RybF9waW5zW10gPSB7CisJLyogQ0tPLCBDS0ksIENNRCAqLworCTUwLCA1MSwgNTIsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGkwX2N0cmxfbXV4W10gPSB7CisJU0RJMF9DS09fTUFSSywgU0RJMF9DS0lfTUFSSywgU0RJMF9DTURfTUFSSywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RpMF9kYXRhMV9waW5zW10gPSB7CisJLyogU0RJMF9EQVRBWzBdICovCisJNTMsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGkwX2RhdGExX211eFtdID0geworCVNESTBfREFUQTBfTUFSSywKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaTBfZGF0YTRfcGluc1tdID0geworCS8qIFNESTBfREFUQVswOjNdICovCisJNTMsIDU0LCA1NSwgNTYsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGkwX2RhdGE0X211eFtdID0geworCVNESTBfREFUQTBfTUFSSywgU0RJMF9EQVRBMV9NQVJLLCBTREkwX0RBVEEyX01BUkssIFNESTBfREFUQTNfTUFSSywKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaTBfZGF0YThfcGluc1tdID0geworCS8qIFNESTBfREFUQVswOjddICovCisJNTMsIDU0LCA1NSwgNTYsCisJNTcsIDU4LCA1OSwgNjAKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaTBfZGF0YThfbXV4W10gPSB7CisJU0RJMF9EQVRBMF9NQVJLLCBTREkwX0RBVEExX01BUkssIFNESTBfREFUQTJfTUFSSywgU0RJMF9EQVRBM19NQVJLLAorCVNESTBfREFUQTRfTUFSSywgU0RJMF9EQVRBNV9NQVJLLCBTREkwX0RBVEE2X01BUkssIFNESTBfREFUQTdfTUFSSywKK307CisKKy8qID0gWyBTRElPMSBdID09PT09PT09PT09PSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGkxX2N0cmxfcGluc1tdID0geworCS8qIENLTywgQ0tJLCBDTUQgKi8KKwk2MSwgNjIsIDYzLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RpMV9jdHJsX211eFtdID0geworCVNESTFfQ0tPX01BUkssIFNESTFfQ0tJX01BUkssIFNESTFfQ01EX01BUkssCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaTFfZGF0YTFfcGluc1tdID0geworCS8qIFNESTFfREFUQVswXSAqLworCTY0LAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RpMV9kYXRhMV9tdXhbXSA9IHsKKwlTREkxX0RBVEEwX01BUkssCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGkxX2RhdGE0X3BpbnNbXSA9IHsKKwkvKiBTREkxX0RBVEFbMDozXSAqLworCTY0LCA2NSwgNjYsIDY3LAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RpMV9kYXRhNF9tdXhbXSA9IHsKKwlTREkxX0RBVEEwX01BUkssIFNESTFfREFUQTFfTUFSSywgU0RJMV9EQVRBMl9NQVJLLCBTREkxX0RBVEEzX01BUkssCit9OworCisvKiA9IFsgU0RJTzIgXSA9PT09PT09PT09PT0gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RpMl9jdHJsX3BpbnNbXSA9IHsKKwkvKiBDS08sIENLSSwgQ01EICovCisJOTcsIDk4LCA5OSwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaTJfY3RybF9tdXhbXSA9IHsKKwlTREkyX0NLT19NQVJLLCBTREkyX0NLSV9NQVJLLCBTREkyX0NNRF9NQVJLLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGkyX2RhdGExX3BpbnNbXSA9IHsKKwkvKiBTREkyX0RBVEFbMF0gKi8KKwk4OSwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaTJfZGF0YTFfbXV4W10gPSB7CisJU0RJMl9EQVRBMF9NQVJLLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RpMl9kYXRhNF9waW5zW10gPSB7CisJLyogU0RJMl9EQVRBWzA6M10gKi8KKwk4OSwgOTAsIDkxLCA5MiwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaTJfZGF0YTRfbXV4W10gPSB7CisJU0RJMl9EQVRBMF9NQVJLLCBTREkyX0RBVEExX01BUkssIFNESTJfREFUQTJfTUFSSywgU0RJMl9EQVRBM19NQVJLLAorfTsKKworLyogPSBbIFRQMzMgXSA9PT09PT09PT09PT09ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHRwMzNfcGluc1tdID0geworCS8qIENMSywgQ1RSTCAqLworCTM4LCAzOSwKKwkvKiBUUDMzX0RBVEFbMDoxNV0gKi8KKwk0MCwgNDEsIFBJTl9OVU1CRVIoMiwgMTcpLCBQSU5fTlVNQkVSKDMsIDE3KSwKKwlQSU5fTlVNQkVSKDQsIDE3KSwgUElOX05VTUJFUigyLCAxNiksIFBJTl9OVU1CRVIoMywgMTYpLAorCVBJTl9OVU1CRVIoNCwgMTYpLAorCTQyLCA0MywgUElOX05VTUJFUigyLCAxNSksIFBJTl9OVU1CRVIoMywgMTUpLAorCVBJTl9OVU1CRVIoNCwgMTUpLCBQSU5fTlVNQkVSKDIsIDE0KSwgUElOX05VTUJFUigzLCAxNCksCisJUElOX05VTUJFUig0LCAxNCksCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB0cDMzX211eFtdID0geworCVRQMzNfQ0xLX01BUkssIFRQMzNfQ1RSTF9NQVJLLAorCVRQMzNfREFUQTBfTUFSSywgVFAzM19EQVRBMV9NQVJLLCBUUDMzX0RBVEEyX01BUkssIFRQMzNfREFUQTNfTUFSSywKKwlUUDMzX0RBVEE0X01BUkssIFRQMzNfREFUQTVfTUFSSywgVFAzM19EQVRBNl9NQVJLLCBUUDMzX0RBVEE3X01BUkssCisJVFAzM19EQVRBOF9NQVJLLCBUUDMzX0RBVEE5X01BUkssIFRQMzNfREFUQTEwX01BUkssIFRQMzNfREFUQTExX01BUkssCisJVFAzM19EQVRBMTJfTUFSSywgVFAzM19EQVRBMTNfTUFSSywgVFAzM19EQVRBMTRfTUFSSywgVFAzM19EQVRBMTVfTUFSSywKK307CisKKy8qID0gWyBVQVJUMSBdID09PT09PT09PT09PSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0MV9kYXRhX3BpbnNbXSA9IHsKKwkvKiBSWCwgVFggKi8KKwkxNTUsIDE1NiwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnQxX2RhdGFfbXV4W10gPSB7CisJVUFSVDFfUlhfTUFSSywgVUFSVDFfVFhfTUFSSywKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydDFfY3RybF9waW5zW10gPSB7CisJLyogQ1RTQiwgUlRTQiAqLworCTE1NywgMTU4LAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdWFydDFfY3RybF9tdXhbXSA9IHsKKwlVQVJUMV9DVFNCX01BUkssIFVBUlQxX1JUU0JfTUFSSywKK307CisKKy8qID0gWyBVQVJUMiBdID09PT09PT09PT09PSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0Ml9kYXRhX3BpbnNbXSA9IHsKKwkvKiBSWCwgVFggKi8KKwkxNTcsIDE1OCwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVhcnQyX2RhdGFfbXV4W10gPSB7CisJVUFSVDJfUlhfTUFSSywgVUFSVDJfVFhfTUFSSywKK307CisKKy8qID0gWyBVQVJUMyBdID09PT09PT09PT09PSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0M19kYXRhX3BpbnNbXSA9IHsKKwkvKiBSWCwgVFggKi8KKwk0NiwgNDcsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1YXJ0M19kYXRhX211eFtdID0geworCVVBUlQzX1JYX01BUkssIFVBUlQzX1RYX01BUkssCit9OworCisvKiA9IFsgVVNCIF0gPT09PT09PT09PT09PT0gKi8KK0VNRVZfTVVYX1BJTih1c2JfdmJ1cywgMTUzLCBVU0JfVkJVUyk7CisKKy8qID0gWyBVU0kwIF0gPT09PT09PT09PT09PT0gKi8KK0VNRVZfTVVYX1BJTih1c2kwX2NzMSwgMTA1LCBVU0kwX0NTMSk7CitFTUVWX01VWF9QSU4odXNpMF9jczIsIDEwNiwgVVNJMF9DUzIpOworRU1FVl9NVVhfUElOKHVzaTBfY3MzLCAxMTUsIFVTSTBfQ1MzKTsKK0VNRVZfTVVYX1BJTih1c2kwX2NzNCwgMTE2LCBVU0kwX0NTNCk7CitFTUVWX01VWF9QSU4odXNpMF9jczUsIDExNywgVVNJMF9DUzUpOworRU1FVl9NVVhfUElOKHVzaTBfY3M2LCAxMTgsIFVTSTBfQ1M2KTsKKworLyogPSBbIFVTSTEgXSA9PT09PT09PT09PT09PSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1c2kxX3BpbnNbXSA9IHsKKwkvKiBESSwgRE8qLworCTEwNywgMTA4LAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXNpMV9tdXhbXSA9IHsKKwlVU0kxX0RJX01BUkssIFVTSTFfRE9fTUFSSywKK307CisKKy8qID0gWyBVU0kyIF0gPT09PT09PT09PT09PT0gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXNpMl9waW5zW10gPSB7CisJLyogQ0xLLCBESSwgRE8qLworCTEwOSwgMTEwLCAxMTEsCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1c2kyX211eFtdID0geworCVVTSTJfQ0xLX01BUkssIFVTSTJfRElfTUFSSywgVVNJMl9ET19NQVJLLAorfTsKK0VNRVZfTVVYX1BJTih1c2kyX2NzMCwgMTEyLCBVU0kyX0NTMCk7CitFTUVWX01VWF9QSU4odXNpMl9jczEsIDExMywgVVNJMl9DUzEpOworRU1FVl9NVVhfUElOKHVzaTJfY3MyLCAxMTQsIFVTSTJfQ1MyKTsKKworLyogPSBbIFVTSTMgXSA9PT09PT09PT09PT09PSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1c2kzX3BpbnNbXSA9IHsKKwkvKiBDTEssIERJLCBETyovCisJMTE1LCAxMTYsIDExNywKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVzaTNfbXV4W10gPSB7CisJVVNJM19DTEtfTUFSSywgVVNJM19ESV9NQVJLLCBVU0kzX0RPX01BUkssCit9OworRU1FVl9NVVhfUElOKHVzaTNfY3MwLCAxMTgsIFVTSTNfQ1MwKTsKKworLyogPSBbIFVTSTQgXSA9PT09PT09PT09PT09PSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1c2k0X3BpbnNbXSA9IHsKKwkvKiBDTEssIERJLCBETyovCisJMTE5LCAxMjAsIDEyMSwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVzaTRfbXV4W10gPSB7CisJVVNJNF9DTEtfTUFSSywgVVNJNF9ESV9NQVJLLCBVU0k0X0RPX01BUkssCit9OworRU1FVl9NVVhfUElOKHVzaTRfY3MwLCAxMTMsIFVTSTRfQ1MwKTsKK0VNRVZfTVVYX1BJTih1c2k0X2NzMSwgMTE0LCBVU0k0X0NTMSk7CisKKy8qID0gWyBVU0k1IF0gPT09PT09PT09PT09PT0gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXNpNV9hX3BpbnNbXSA9IHsKKwkvKiBDTEssIERJLCBETyovCisJODUsIDg2LCA4NywKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVzaTVfYV9tdXhbXSA9IHsKKwlVU0k1X0NMS19BX01BUkssIFVTSTVfRElfQV9NQVJLLCBVU0k1X0RPX0FfTUFSSywKK307CitFTUVWX01VWF9QSU4odXNpNV9jczBfYSwgODgsIFVTSTVfQ1MwX0EpOworRU1FVl9NVVhfUElOKHVzaTVfY3MxX2EsIDg5LCBVU0k1X0NTMV9BKTsKK0VNRVZfTVVYX1BJTih1c2k1X2NzMl9hLCA5MCwgVVNJNV9DUzJfQSk7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXNpNV9iX3BpbnNbXSA9IHsKKwkvKiBDTEssIERJLCBETyovCisJMTQzLCAxNDQsIDE1MCwKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVzaTVfYl9tdXhbXSA9IHsKKwlVU0k1X0NMS19CX01BUkssIFVTSTVfRElfQl9NQVJLLCBVU0k1X0RPX0JfTUFSSywKK307CitFTUVWX01VWF9QSU4odXNpNV9jczBfYiwgMTQ1LCBVU0k1X0NTMF9CKTsKK0VNRVZfTVVYX1BJTih1c2k1X2NzMV9iLCAxNDYsIFVTSTVfQ1MxX0IpOworRU1FVl9NVVhfUElOKHVzaTVfY3MyX2IsIDE0NywgVVNJNV9DUzJfQik7CitFTUVWX01VWF9QSU4odXNpNV9jczNfYiwgMTQ4LCBVU0k1X0NTM19CKTsKK0VNRVZfTVVYX1BJTih1c2k1X2NzNF9iLCAxNDksIFVTSTVfQ1M0X0IpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNoX3BmY19waW5fZ3JvdXAgcGlubXV4X2dyb3Vwc1tdID0geworCVNIX1BGQ19QSU5fR1JPVVAoZXJyX3JzdF9yZXFiKSwKKwlTSF9QRkNfUElOX0dST1VQKHJlZl9jbGtvKSwKKwlTSF9QRkNfUElOX0dST1VQKGV4dF9jbGtpKSwKKwlTSF9QRkNfUElOX0dST1VQKGxvd3B3ciksCisKKwlTSF9QRkNfUElOX0dST1VQKGFiX21haW4pLAorCVNIX1BGQ19QSU5fR1JPVVAoYWJfY2xrKSwKKwlTSF9QRkNfUElOX0dST1VQKGFiX2NzYjApLAorCVNIX1BGQ19QSU5fR1JPVVAoYWJfY3NiMSksCisJU0hfUEZDX1BJTl9HUk9VUChhYl9jc2IyKSwKKwlTSF9QRkNfUElOX0dST1VQKGFiX2NzYjMpLAorCVNIX1BGQ19QSU5fR1JPVVAoYWJfd2FpdCksCisJU0hfUEZDX1BJTl9HUk9VUChhYl9hZHYpLAorCVNIX1BGQ19QSU5fR1JPVVAoYWJfYTE3KSwKKwlTSF9QRkNfUElOX0dST1VQKGFiX2ExOCksCisJU0hfUEZDX1BJTl9HUk9VUChhYl9hMTkpLAorCVNIX1BGQ19QSU5fR1JPVVAoYWJfYTIwKSwKKwlTSF9QRkNfUElOX0dST1VQKGFiX2EyMSksCisJU0hfUEZDX1BJTl9HUk9VUChhYl9hMjIpLAorCVNIX1BGQ19QSU5fR1JPVVAoYWJfYTIzKSwKKwlTSF9QRkNfUElOX0dST1VQKGFiX2EyNCksCisJU0hfUEZDX1BJTl9HUk9VUChhYl9hMjUpLAorCVNIX1BGQ19QSU5fR1JPVVAoYWJfYTI2KSwKKwlTSF9QRkNfUElOX0dST1VQKGFiX2EyNyksCisJU0hfUEZDX1BJTl9HUk9VUChhYl9hMjgpLAorCVNIX1BGQ19QSU5fR1JPVVAoYWJfYmVuMCksCisJU0hfUEZDX1BJTl9HUk9VUChhYl9iZW4xKSwKKworCVNIX1BGQ19QSU5fR1JPVVAoY2FtX2Nsa28pLAorCVNIX1BGQ19QSU5fR1JPVVAoY2FtKSwKKworCVNIX1BGQ19QSU5fR1JPVVAoY2ZfY3RybCksCisJU0hfUEZDX1BJTl9HUk9VUChjZl9kYXRhOCksCisJU0hfUEZDX1BJTl9HUk9VUChjZl9kYXRhMTYpLAorCisJU0hfUEZDX1BJTl9HUk9VUChkdHZfYSksCisJU0hfUEZDX1BJTl9HUk9VUChkdHZfYiksCisKKwlTSF9QRkNfUElOX0dST1VQKGlpYzApLAorCisJU0hfUEZDX1BJTl9HUk9VUChpaWMxKSwKKworCVNIX1BGQ19QSU5fR1JPVVAoanRhZyksCisKKwlTSF9QRkNfUElOX0dST1VQKGxjZDNfcHhjbGspLAorCVNIX1BGQ19QSU5fR1JPVVAobGNkM19weGNsa2IpLAorCVNIX1BGQ19QSU5fR1JPVVAobGNkM19jbGtfaSksCisJU0hfUEZDX1BJTl9HUk9VUChsY2QzX3N5bmMpLAorCVNIX1BGQ19QSU5fR1JPVVAobGNkM19yZ2I4ODgpLAorCVNIX1BGQ19QSU5fR1JPVVAoeXV2M19jbGtfaSksCisJU0hfUEZDX1BJTl9HUk9VUCh5dXYzKSwKKworCVNIX1BGQ19QSU5fR1JPVVAobnRzY19jbGspLAorCVNIX1BGQ19QSU5fR1JPVVAobnRzY19kYXRhKSwKKworCVNIX1BGQ19QSU5fR1JPVVAocHdtMCksCisKKwlTSF9QRkNfUElOX0dST1VQKHB3bTEpLAorCisJU0hfUEZDX1BJTl9HUk9VUChzZF9ja2kpLAorCisJU0hfUEZDX1BJTl9HUk9VUChzZGkwX2N0cmwpLAorCVNIX1BGQ19QSU5fR1JPVVAoc2RpMF9kYXRhMSksCisJU0hfUEZDX1BJTl9HUk9VUChzZGkwX2RhdGE0KSwKKwlTSF9QRkNfUElOX0dST1VQKHNkaTBfZGF0YTgpLAorCisJU0hfUEZDX1BJTl9HUk9VUChzZGkxX2N0cmwpLAorCVNIX1BGQ19QSU5fR1JPVVAoc2RpMV9kYXRhMSksCisJU0hfUEZDX1BJTl9HUk9VUChzZGkxX2RhdGE0KSwKKworCVNIX1BGQ19QSU5fR1JPVVAoc2RpMl9jdHJsKSwKKwlTSF9QRkNfUElOX0dST1VQKHNkaTJfZGF0YTEpLAorCVNIX1BGQ19QSU5fR1JPVVAoc2RpMl9kYXRhNCksCisKKwlTSF9QRkNfUElOX0dST1VQKHRwMzMpLAorCisJU0hfUEZDX1BJTl9HUk9VUCh1YXJ0MV9kYXRhKSwKKwlTSF9QRkNfUElOX0dST1VQKHVhcnQxX2N0cmwpLAorCisJU0hfUEZDX1BJTl9HUk9VUCh1YXJ0Ml9kYXRhKSwKKworCVNIX1BGQ19QSU5fR1JPVVAodWFydDNfZGF0YSksCisKKwlTSF9QRkNfUElOX0dST1VQKHVzYl92YnVzKSwKKworCVNIX1BGQ19QSU5fR1JPVVAodXNpMF9jczEpLAorCVNIX1BGQ19QSU5fR1JPVVAodXNpMF9jczIpLAorCVNIX1BGQ19QSU5fR1JPVVAodXNpMF9jczMpLAorCVNIX1BGQ19QSU5fR1JPVVAodXNpMF9jczQpLAorCVNIX1BGQ19QSU5fR1JPVVAodXNpMF9jczUpLAorCVNIX1BGQ19QSU5fR1JPVVAodXNpMF9jczYpLAorCisJU0hfUEZDX1BJTl9HUk9VUCh1c2kxKSwKKworCVNIX1BGQ19QSU5fR1JPVVAodXNpMiksCisJU0hfUEZDX1BJTl9HUk9VUCh1c2kyX2NzMCksCisJU0hfUEZDX1BJTl9HUk9VUCh1c2kyX2NzMSksCisJU0hfUEZDX1BJTl9HUk9VUCh1c2kyX2NzMiksCisKKwlTSF9QRkNfUElOX0dST1VQKHVzaTMpLAorCVNIX1BGQ19QSU5fR1JPVVAodXNpM19jczApLAorCisJU0hfUEZDX1BJTl9HUk9VUCh1c2k0KSwKKwlTSF9QRkNfUElOX0dST1VQKHVzaTRfY3MwKSwKKwlTSF9QRkNfUElOX0dST1VQKHVzaTRfY3MxKSwKKworCVNIX1BGQ19QSU5fR1JPVVAodXNpNV9hKSwKKwlTSF9QRkNfUElOX0dST1VQKHVzaTVfY3MwX2EpLAorCVNIX1BGQ19QSU5fR1JPVVAodXNpNV9jczFfYSksCisJU0hfUEZDX1BJTl9HUk9VUCh1c2k1X2NzMl9hKSwKKwlTSF9QRkNfUElOX0dST1VQKHVzaTVfYiksCisJU0hfUEZDX1BJTl9HUk9VUCh1c2k1X2NzMF9iKSwKKwlTSF9QRkNfUElOX0dST1VQKHVzaTVfY3MxX2IpLAorCVNIX1BGQ19QSU5fR1JPVVAodXNpNV9jczJfYiksCisJU0hfUEZDX1BJTl9HUk9VUCh1c2k1X2NzM19iKSwKKwlTSF9QRkNfUElOX0dST1VQKHVzaTVfY3M0X2IpLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhYl9ncm91cHNbXSA9IHsKKwkiYWJfbWFpbiIsCisJImFiX2NsayIsCisJImFiX2NzYjAiLAorCSJhYl9jc2IxIiwKKwkiYWJfY3NiMiIsCisJImFiX2NzYjMiLAorCSJhYl93YWl0IiwKKwkiYWJfYWR2IiwKKwkiYWJfYTE3IiwKKwkiYWJfYTE4IiwKKwkiYWJfYTE5IiwKKwkiYWJfYTIwIiwKKwkiYWJfYTIxIiwKKwkiYWJfYTIyIiwKKwkiYWJfYTIzIiwKKwkiYWJfYTI0IiwKKwkiYWJfYTI1IiwKKwkiYWJfYTI2IiwKKwkiYWJfYTI3IiwKKwkiYWJfYTI4IiwKKwkiYWJfYmVuMCIsCisJImFiX2JlbjEiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBjYW1fZ3JvdXBzW10gPSB7CisJImNhbV9jbGtvIiwKKwkiY2FtIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2ZfZ3JvdXBzW10gPSB7CisJImNmX2N0cmwiLAorCSJjZl9kYXRhOCIsCisJImNmX2RhdGExNiIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGR0dl9ncm91cHNbXSA9IHsKKwkiZHR2X2EiLAorCSJkdHZfYiIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGlpYzBfZ3JvdXBzW10gPSB7CisJImlpYzAiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBpaWMxX2dyb3Vwc1tdID0geworCSJpaWMxIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QganRhZ19ncm91cHNbXSA9IHsKKwkianRhZyIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGxjZF9ncm91cHNbXSA9IHsKKwkibGNkM19weGNsayIsCisJImxjZDNfcHhjbGtiIiwKKwkibGNkM19jbGtfaSIsCisJImxjZDNfc3luYyIsCisJImxjZDNfcmdiODg4IiwKKwkieXV2M19jbGtfaSIsCisJInl1djMiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBudHNjX2dyb3Vwc1tdID0geworCSJudHNjX2NsayIsCisJIm50c2NfZGF0YSIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHB3bTBfZ3JvdXBzW10gPSB7CisJInB3bTAiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwd20xX2dyb3Vwc1tdID0geworCSJwd20xIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2RfZ3JvdXBzW10gPSB7CisJInNkX2NraSIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNkaTBfZ3JvdXBzW10gPSB7CisJInNkaTBfY3RybCIsCisJInNkaTBfZGF0YTEiLAorCSJzZGkwX2RhdGE0IiwKKwkic2RpMF9kYXRhOCIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNkaTFfZ3JvdXBzW10gPSB7CisJInNkaTFfY3RybCIsCisJInNkaTFfZGF0YTEiLAorCSJzZGkxX2RhdGE0IiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2RpMl9ncm91cHNbXSA9IHsKKwkic2RpMl9jdHJsIiwKKwkic2RpMl9kYXRhMSIsCisJInNkaTJfZGF0YTQiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0cDMzX2dyb3Vwc1tdID0geworCSJ0cDMzIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdWFydDFfZ3JvdXBzW10gPSB7CisJInVhcnQxX2RhdGEiLAorCSJ1YXJ0MV9jdHJsIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdWFydDJfZ3JvdXBzW10gPSB7CisJInVhcnQyX2RhdGEiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1YXJ0M19ncm91cHNbXSA9IHsKKwkidWFydDNfZGF0YSIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVzYl9ncm91cHNbXSA9IHsKKwkidXNiX3ZidXMiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1c2kwX2dyb3Vwc1tdID0geworCSJ1c2kwX2NzMSIsCisJInVzaTBfY3MyIiwKKwkidXNpMF9jczMiLAorCSJ1c2kwX2NzNCIsCisJInVzaTBfY3M1IiwKKwkidXNpMF9jczYiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB1c2kxX2dyb3Vwc1tdID0geworCSJ1c2kxIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdXNpMl9ncm91cHNbXSA9IHsKKwkidXNpMiIsCisJInVzaTJfY3MwIiwKKwkidXNpMl9jczEiLAorCSJ1c2kyX2NzMiIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVzaTNfZ3JvdXBzW10gPSB7CisJInVzaTMiLAorCSJ1c2kzX2NzMCIsCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHVzaTRfZ3JvdXBzW10gPSB7CisJInVzaTQiLAorCSJ1c2k0X2NzMCIsCisJInVzaTRfY3MxIiwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdXNpNV9ncm91cHNbXSA9IHsKKwkidXNpNV9hIiwKKwkidXNpNV9jczBfYSIsCisJInVzaTVfY3MxX2EiLAorCSJ1c2k1X2NzMl9hIiwKKwkidXNpNV9iIiwKKwkidXNpNV9jczBfYiIsCisJInVzaTVfY3MxX2IiLAorCSJ1c2k1X2NzMl9iIiwKKwkidXNpNV9jczNfYiIsCisJInVzaTVfY3M0X2IiLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzaF9wZmNfZnVuY3Rpb24gcGlubXV4X2Z1bmN0aW9uc1tdID0geworCVNIX1BGQ19GVU5DVElPTihhYiksCisJU0hfUEZDX0ZVTkNUSU9OKGNhbSksCisJU0hfUEZDX0ZVTkNUSU9OKGNmKSwKKwlTSF9QRkNfRlVOQ1RJT04oZHR2KSwKKwlTSF9QRkNfRlVOQ1RJT04oaWljMCksCisJU0hfUEZDX0ZVTkNUSU9OKGlpYzEpLAorCVNIX1BGQ19GVU5DVElPTihqdGFnKSwKKwlTSF9QRkNfRlVOQ1RJT04obGNkKSwKKwlTSF9QRkNfRlVOQ1RJT04obnRzYyksCisJU0hfUEZDX0ZVTkNUSU9OKHB3bTApLAorCVNIX1BGQ19GVU5DVElPTihwd20xKSwKKwlTSF9QRkNfRlVOQ1RJT04oc2QpLAorCVNIX1BGQ19GVU5DVElPTihzZGkwKSwKKwlTSF9QRkNfRlVOQ1RJT04oc2RpMSksCisJU0hfUEZDX0ZVTkNUSU9OKHNkaTIpLAorCVNIX1BGQ19GVU5DVElPTih0cDMzKSwKKwlTSF9QRkNfRlVOQ1RJT04odWFydDEpLAorCVNIX1BGQ19GVU5DVElPTih1YXJ0MiksCisJU0hfUEZDX0ZVTkNUSU9OKHVhcnQzKSwKKwlTSF9QRkNfRlVOQ1RJT04odXNiKSwKKwlTSF9QRkNfRlVOQ1RJT04odXNpMCksCisJU0hfUEZDX0ZVTkNUSU9OKHVzaTEpLAorCVNIX1BGQ19GVU5DVElPTih1c2kyKSwKKwlTSF9QRkNfRlVOQ1RJT04odXNpMyksCisJU0hfUEZDX0ZVTkNUSU9OKHVzaTQpLAorCVNIX1BGQ19GVU5DVElPTih1c2k1KSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgcGlubXV4X2NvbmZpZ19yZWdzW10gPSB7CisJeyBQSU5NVVhfQ0ZHX1JFRygiR1BTUjAiLCAweGUwMTQwMjAwLCAzMiwgMSkgeworCQkwLCBQT1JUMzFfRk4sCQkJCS8qIFBJTjogSjE4ICAqLworCQkwLCBQT1JUMzBfRk4sCQkJCS8qIFBJTjogSDE4ICAqLworCQkwLCBQT1JUMjlfRk4sCQkJCS8qIFBJTjogRzE4ICAqLworCQkwLCBQT1JUMjhfRk4sCQkJCS8qIFBJTjogRjE4ICAqLworCQkwLCBQT1JUMjdfRk4sCQkJCS8qIFBJTjogRjE3ICAqLworCQkwLCBQT1JUMjZfRk4sCQkJCS8qIFBJTjogRjE2ICAqLworCQkwLCBQT1JUMjVfRk4sCQkJCS8qIFBJTjogRTIwICAqLworCQkwLCBQT1JUMjRfRk4sCQkJCS8qIFBJTjogRDIwICAqLworCQlGTl9MQ0QzXzFfMF9QT1JUMjMsIFBPUlQyM19GTiwJCS8qIFBJTjogRDE5ICAqLworCQlGTl9MQ0QzXzFfMF9QT1JUMjIsIFBPUlQyMl9GTiwJCS8qIFBJTjogQzIwICAqLworCQlGTl9MQ0QzXzFfMF9QT1JUMjEsIFBPUlQyMV9GTiwJCS8qIFBJTjogQjIxICAqLworCQlGTl9MQ0QzXzFfMF9QT1JUMjAsIFBPUlQyMF9GTiwJCS8qIFBJTjogQTIxICAqLworCQlGTl9MQ0QzX1BYQ0xLQiwgUE9SVDE5X0ZOLAkJLyogUElOOiBDMjEgICovCisJCUZOX0xDRDNfMV8wX1BPUlQxOCwgUE9SVDE4X0ZOLAkJLyogUElOOiBCMjIgICovCisJCTAsIFBPUlQxN19GTiwJCQkJLyogUElOOiBXMjAgICovCisJCTAsIFBPUlQxNl9GTiwJCQkJLyogUElOOiBXMjEgICovCisJCTAsIFBPUlQxNV9GTiwJCQkJLyogUElOOiBZMTkgICovCisJCTAsIFBPUlQxNF9GTiwJCQkJLyogUElOOiBZMjAgICovCisJCTAsIFBPUlQxM19GTiwJCQkJLyogUElOOiBZMjEgICovCisJCTAsIFBPUlQxMl9GTiwJCQkJLyogUElOOiBBQTIwICovCisJCTAsIFBPUlQxMV9GTiwJCQkJLyogUElOOiBBQTIxICovCisJCTAsIFBPUlQxMF9GTiwJCQkJLyogUElOOiBBQTIyICovCisJCTAsIFBPUlQ5X0ZOLAkJCQkvKiBQSU46IFYxNSAgKi8KKwkJMCwgUE9SVDhfRk4sCQkJCS8qIFBJTjogVjE2ICAqLworCQkwLCBQT1JUN19GTiwJCQkJLyogUElOOiBWMTcgICovCisJCTAsIFBPUlQ2X0ZOLAkJCQkvKiBQSU46IFYxOCAgKi8KKwkJRk5fRVhUX0NMS0ksIFBPUlQ1X0ZOLAkJCS8qIFBJTjogVTggICAqLworCQlGTl9SRUZfQ0xLTywgUE9SVDRfRk4sCQkJLyogUElOOiBWOCAgICovCisJCUZOX0VSUl9SU1RfUkVRQiwgUE9SVDNfRk4sCQkvKiBQSU46IFU5ICAgKi8KKwkJRk5fSlRfU0VMLCBQT1JUMl9GTiwJCQkvKiBQSU46IFY5ICAgKi8KKwkJMCwgUE9SVDFfRk4sCQkJCS8qIFBJTjogVTEwICAqLworCQkwLCBQT1JUMF9GTiwJCQkJLyogUElOOiBWMTAgICovCisJCX0KKwl9LAorCXsgUElOTVVYX0NGR19SRUcoIkdQU1IxIiwgMHhlMDE0MDIwNCwgMzIsIDEpIHsKKwkJRk5fU0RJMV9DTUQsIFBPUlQ2M19GTiwJCQkvKiBQSU46IEFDMjEgKi8KKwkJRk5fU0RJMV9DS0ksIFBPUlQ2Ml9GTiwJCQkvKiBQSU46IEFBMjMgKi8KKwkJRk5fU0RJMV9DS08sIFBPUlQ2MV9GTiwJCQkvKiBQSU46IEFCMjIgKi8KKwkJRk5fU0RJMF9EQVRBNywgUE9SVDYwX0ZOLAkJLyogUElOOiBZMTYgICovCisJCUZOX1NESTBfREFUQTYsIFBPUlQ1OV9GTiwJCS8qIFBJTjogQUExNiAqLworCQlGTl9TREkwX0RBVEE1LCBQT1JUNThfRk4sCQkvKiBQSU46IFkxNSAgKi8KKwkJRk5fU0RJMF9EQVRBNCwgUE9SVDU3X0ZOLAkJLyogUElOOiBBQTE1ICovCisJCUZOX1NESTBfREFUQTMsIFBPUlQ1Nl9GTiwJCS8qIFBJTjogWTE0ICAqLworCQlGTl9TREkwX0RBVEEyLCBQT1JUNTVfRk4sCQkvKiBQSU46IEFBMTQgKi8KKwkJRk5fU0RJMF9EQVRBMSwgUE9SVDU0X0ZOLAkJLyogUElOOiBZMTMgICovCisJCUZOX1NESTBfREFUQTAsIFBPUlQ1M19GTiwJCS8qIFBJTjogQUExMyAqLworCQlGTl9TREkwX0NNRCwgUE9SVDUyX0ZOLAkJCS8qIFBJTjogWTEyICAqLworCQlGTl9TREkwX0NLSSwgUE9SVDUxX0ZOLAkJCS8qIFBJTjogQUMxOCAqLworCQlGTl9TREkwX0NLTywgUE9SVDUwX0ZOLAkJCS8qIFBJTjogQUIxOCAqLworCQkwLCBQT1JUNDlfRk4sCQkJCS8qIFBJTjogQUIxNiAqLworCQlGTl9TRF9DS0ksIFBPUlQ0OF9GTiwJCQkvKiBQSU46IEFDMTkgKi8KKwkJRk5fSUlDXzFfMF9QT1JUNDcsIFBPUlQ0N19GTiwJCS8qIFBJTjogWTggICAqLworCQlGTl9JSUNfMV8wX1BPUlQ0NiwgUE9SVDQ2X0ZOLAkJLyogUElOOiBZOSAgICovCisJCUZOX0lJQzBfU0RBLCBQT1JUNDVfRk4sCQkJLyogUElOOiBBQTggICovCisJCUZOX0lJQzBfU0NMLCBQT1JUNDRfRk4sCQkJLyogUElOOiBBQTkgICovCisJCUZOX0xDRDNfMTFfMTBfUE9SVDQzLCBQT1JUNDNfRk4sCS8qIFBJTjogQTE1ICAqLworCQlGTl9MQ0QzXzExXzEwX1BPUlQ0MiwgUE9SVDQyX0ZOLAkvKiBQSU46IEExNiAgKi8KKwkJRk5fTENEM18xMV8xMF9QT1JUNDEsIFBPUlQ0MV9GTiwJLyogUElOOiBBMTcgICovCisJCUZOX0xDRDNfMTFfMTBfUE9SVDQwLCBQT1JUNDBfRk4sCS8qIFBJTjogQTE4ICAqLworCQlGTl9MQ0QzXzlfOF9QT1JUMzksIFBPUlQzOV9GTiwJCS8qIFBJTjogRDE4ICAqLworCQlGTl9MQ0QzXzlfOF9QT1JUMzgsIFBPUlQzOF9GTiwJCS8qIFBJTjogQzE4ICAqLworCQlGTl9MQ0QzX1I1LCBQT1JUMzdfRk4sCQkJLyogUElOOiBCMTggICovCisJCUZOX0xDRDNfUjQsIFBPUlQzNl9GTiwJCQkvKiBQSU46IEMxOSAgKi8KKwkJRk5fTENEM19SMywgUE9SVDM1X0ZOLAkJCS8qIFBJTjogQjE5ICAqLworCQlGTl9MQ0QzX1IyLCBQT1JUMzRfRk4sCQkJLyogUElOOiBBMTkgICovCisJCUZOX0xDRDNfUjEsIFBPUlQzM19GTiwJCQkvKiBQSU46IEIyMCAgKi8KKwkJRk5fTENEM19SMCwgUE9SVDMyX0ZOLAkJCS8qIFBJTjogQTIwICAqLworCQl9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJHUFNSMiIsIDB4ZTAxNDAyMDgsIDMyLCAxKSB7CisJCUZOX0FCXzFfMF9QT1JUOTUsIFBPUlQ5NV9GTiwJCS8qIFBJTjogTDIxICAqLworCQlGTl9BQl8xXzBfUE9SVDk0LCBQT1JUOTRfRk4sCQkvKiBQSU46IEsyMSAgKi8KKwkJRk5fQUJfMV8wX1BPUlQ5MywgUE9SVDkzX0ZOLAkJLyogUElOOiBKMjEgICovCisJCUZOX0FCXzdfNl9QT1JUOTIsIFBPUlQ5Ml9GTiwJCS8qIFBJTjogSjIyICAqLworCQlGTl9BQl83XzZfUE9SVDkxLCBQT1JUOTFfRk4sCQkvKiBQSU46IEgyMSAgKi8KKwkJRk5fQUJfNV80X1BPUlQ5MCwgUE9SVDkwX0ZOLAkJLyogUElOOiBIMjIgICovCisJCUZOX0FCXzVfNF9QT1JUODksIFBPUlQ4OV9GTiwJCS8qIFBJTjogSDIzICAqLworCQlGTl9BQl8zXzJfUE9SVDg4LCBQT1JUODhfRk4sCQkvKiBQSU46IEcyMSAgKi8KKwkJRk5fQUJfM18yX1BPUlQ4NywgUE9SVDg3X0ZOLAkJLyogUElOOiBHMjIgICovCisJCUZOX0FCXzNfMl9QT1JUODYsIFBPUlQ4Nl9GTiwJCS8qIFBJTjogRzIzICAqLworCQlGTl9BQl8zXzJfUE9SVDg1LCBQT1JUODVfRk4sCQkvKiBQSU46IEYyMSAgKi8KKwkJRk5fQUJfMV8wX1BPUlQ4NCwgUE9SVDg0X0ZOLAkJLyogUElOOiBGMjIgICovCisJCUZOX0FCXzFfMF9QT1JUODMsIFBPUlQ4M19GTiwJCS8qIFBJTjogRjIzICAqLworCQlGTl9BQl8xXzBfUE9SVDgyLCBQT1JUODJfRk4sCQkvKiBQSU46IEUyMiAgKi8KKwkJRk5fQUJfMV8wX1BPUlQ4MSwgUE9SVDgxX0ZOLAkJLyogUElOOiBFMjMgICovCisJCUZOX0FCXzFfMF9QT1JUODAsIFBPUlQ4MF9GTiwJCS8qIFBJTjogRDIyICAqLworCQlGTl9BQl8xXzBfUE9SVDc5LCBQT1JUNzlfRk4sCQkvKiBQSU46IEQyMyAgKi8KKwkJRk5fQUJfMV8wX1BPUlQ3OCwgUE9SVDc4X0ZOLAkJLyogUElOOiBDMjIgICovCisJCUZOX0FCXzFfMF9QT1JUNzcsIFBPUlQ3N19GTiwJCS8qIFBJTjogQzIzICAqLworCQlGTl9BQl8xXzBfUE9SVDc2LCBQT1JUNzZfRk4sCQkvKiBQSU46IEsyMCAgKi8KKwkJRk5fQUJfMV8wX1BPUlQ3NSwgUE9SVDc1X0ZOLAkJLyogUElOOiBMMjAgICovCisJCUZOX0FCXzFfMF9QT1JUNzQsIFBPUlQ3NF9GTiwJCS8qIFBJTjogSDIwICAqLworCQlGTl9BQl8xXzBfUE9SVDczLCBQT1JUNzNfRk4sCQkvKiBQSU46IEoyMCAgKi8KKwkJRk5fQUJfMV8wX1BPUlQ3MiwgUE9SVDcyX0ZOLAkJLyogUElOOiBHMjAgICovCisJCUZOX0FCXzFfMF9QT1JUNzEsIFBPUlQ3MV9GTiwJCS8qIFBJTjogRjIwICAqLworCQlGTl9BQl9DU0IxLCBQT1JUNzBfRk4sCQkJLyogUElOOiBFMjEgICovCisJCUZOX0FCX0NTQjAsIFBPUlQ2OV9GTiwJCQkvKiBQSU46IEQyMSAgKi8KKwkJRk5fQUJfQ0xLLCBQT1JUNjhfRk4sCQkJLyogUElOOiBKMjMgICovCisJCUZOX1NESTFfREFUQTMsIFBPUlQ2N19GTiwJCS8qIFBJTjogQUExOSAqLworCQlGTl9TREkxX0RBVEEyLCBQT1JUNjZfRk4sCQkvKiBQSU46IEFCMTkgKi8KKwkJRk5fU0RJMV9EQVRBMSwgUE9SVDY1X0ZOLAkJLyogUElOOiBBQjIwICovCisJCUZOX1NESTFfREFUQTAsIFBPUlQ2NF9GTiwJCS8qIFBJTjogQUIyMSAqLworCQl9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJHUFNSMyIsIDB4ZTAxNDAyMGMsIDMyLCAxKSB7CisJCUZOX05UU0NfREFUQTQsIFBPUlQxMjdfRk4sCQkvKiBQSU46IFQyMCAgKi8KKwkJRk5fTlRTQ19EQVRBMywgUE9SVDEyNl9GTiwJCS8qIFBJTjogUjE4ICAqLworCQlGTl9OVFNDX0RBVEEyLCBQT1JUMTI1X0ZOLAkJLyogUElOOiBSMjAgICovCisJCUZOX05UU0NfREFUQTEsIFBPUlQxMjRfRk4sCQkvKiBQSU46IFAxOCAgKi8KKwkJRk5fTlRTQ19EQVRBMCwgUE9SVDEyM19GTiwJCS8qIFBJTjogUDIwICAqLworCQlGTl9OVFNDX0NMSywgUE9SVDEyMl9GTiwJCS8qIFBJTjogVjIwICAqLworCQlGTl9VU0lfOV84X1BPUlQxMjEsIFBPUlQxMjFfRk4sCQkvKiBQSU46IFk1ICAgKi8KKwkJRk5fVVNJXzlfOF9QT1JUMTIwLCBQT1JUMTIwX0ZOLAkJLyogUElOOiBBQTQgICovCisJCUZOX1VTSV83XzZfUE9SVDExOSwgUE9SVDExOV9GTiwJCS8qIFBJTjogQUIzICAqLworCQlGTl9VU0lfNV80X1BPUlQxMTgsIFBPUlQxMThfRk4sCQkvKiBQSU46IEFCNCAgKi8KKwkJRk5fVVNJXzVfNF9QT1JUMTE3LCBQT1JUMTE3X0ZOLAkJLyogUElOOiBBQzMgICovCisJCUZOX1VTSV81XzRfUE9SVDExNiwgUE9SVDExNl9GTiwJCS8qIFBJTjogQUM0ICAqLworCQlGTl9VU0lfNV80X1BPUlQxMTUsIFBPUlQxMTVfRk4sCQkvKiBQSU46IEFDNSAgKi8KKwkJRk5fVVNJXzNfMl9QT1JUMTE0LCBQT1JUMTE0X0ZOLAkJLyogUElOOiBZNiAgICovCisJCUZOX1VTSV8zXzJfUE9SVDExMywgUE9SVDExM19GTiwJCS8qIFBJTjogQUE3ICAqLworCQlGTl9VU0lfMV8wX1BPUlQxMTIsIFBPUlQxMTJfRk4sCQkvKiBQSU46IFk3ICAgKi8KKwkJRk5fVVNJXzFfMF9QT1JUMTExLCBQT1JUMTExX0ZOLAkJLyogUElOOiBBQTUgICovCisJCUZOX1VTSV8xXzBfUE9SVDExMCwgUE9SVDExMF9GTiwJCS8qIFBJTjogQUE2ICAqLworCQlGTl9VU0lfMV8wX1BPUlQxMDksIFBPUlQxMDlfRk4sCQkvKiBQSU46IEFCNSAgKi8KKwkJRk5fVVNJMV9ETywgUE9SVDEwOF9GTiwJCQkvKiBQSU46IEQxMCAgKi8KKwkJRk5fVVNJMV9ESSwgUE9SVDEwN19GTiwJCQkvKiBQSU46IEMxMCAgKi8KKwkJRk5fVVNJMF9DUzIsIFBPUlQxMDZfRk4sCQkvKiBQSU46IEI5ICAgKi8KKwkJRk5fVVNJMF9DUzEsIFBPUlQxMDVfRk4sCQkvKiBQSU46IEI4ICAgKi8KKwkJRk5fQUJfMTNfMTJfUE9SVDEwNCwgUE9SVDEwNF9GTiwJLyogUElOOiBNMTcgICovCisJCUZOX0FCXzEzXzEyX1BPUlQxMDMsIFBPUlQxMDNfRk4sCS8qIFBJTjogTDE3ICAqLworCQlGTl9BQl8xMV8xMF9QT1JUMTAyLCBQT1JUMTAyX0ZOLAkvKiBQSU46IE4xOCAgKi8KKwkJRk5fQUJfMTFfMTBfUE9SVDEwMSwgUE9SVDEwMV9GTiwJLyogUElOOiBNMTggICovCisJCUZOX0FCXzExXzEwX1BPUlQxMDAsIFBPUlQxMDBfRk4sCS8qIFBJTjogTDE4ICAqLworCQlGTl9BQl85XzhfUE9SVDk5LCBQT1JUOTlfRk4sCQkvKiBQSU46IE4yMCAgKi8KKwkJRk5fQUJfOV84X1BPUlQ5OCwgUE9SVDk4X0ZOLAkJLyogUElOOiBNMjAgICovCisJCUZOX0FCXzlfOF9QT1JUOTcsIFBPUlQ5N19GTiwJCS8qIFBJTjogTjIxICAqLworCQlGTl9BQl9BMjAsIFBPUlQ5Nl9GTiwJCQkvKiBQSU46IE0yMSAgKi8KKwkJfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiR1BTUjQiLCAweGUwMTQwMjEwLCAzMiwgMSkgeworCQkwLCAwLAorCQlGTl9VQVJUXzFfMF9QT1JUMTU4LCBQT1JUMTU4X0ZOLAkvKiBQSU46IEFCMTAgKi8KKwkJRk5fVUFSVF8xXzBfUE9SVDE1NywgUE9SVDE1N19GTiwJLyogUElOOiBBQTEwICovCisJCUZOX1VBUlQxX1RYLCBQT1JUMTU2X0ZOLAkJLyogUElOOiBZMTAgICovCisJCUZOX1VBUlQxX1JYLCBQT1JUMTU1X0ZOLAkJLyogUElOOiBZMTEgICovCisJCUZOX0xPV1BXUiwgUE9SVDE1NF9GTiwJCQkvKiBQSU46IEExMiAgKi8KKwkJRk5fVVNCX1ZCVVMsIFBPUlQxNTNfRk4sCQkvKiBQSU46IEFBMTIgKi8KKwkJRk5fSlRfVERPRU4sIFBPUlQxNTJfRk4sCQkvKiBQSU46IEYxMyAgKi8KKwkJRk5fSlRfVERPLCBQT1JUMTUxX0ZOLAkJCS8qIFBJTjogRDEzICAqLworCQlGTl9IU0lfMV8wX1BPUlQxNTAsIFBPUlQxNTBfRk4sCQkvKiBQSU46IE0yMiAgKi8KKwkJRk5fSFNJXzFfMF9QT1JUMTQ5LCBQT1JUMTQ5X0ZOLAkJLyogUElOOiBNMjMgICovCisJCUZOX0hTSV8xXzBfUE9SVDE0OCwgUE9SVDE0OF9GTiwJCS8qIFBJTjogTjIzICAqLworCQlGTl9IU0lfMV8wX1BPUlQxNDcsIFBPUlQxNDdfRk4sCQkvKiBQSU46IE4yMiAgKi8KKwkJRk5fSFNJXzFfMF9QT1JUMTQ2LCBQT1JUMTQ2X0ZOLAkJLyogUElOOiBMMjIgICovCisJCUZOX0hTSV8xXzBfUE9SVDE0NSwgUE9SVDE0NV9GTiwJCS8qIFBJTjogTDIzICAqLworCQlGTl9IU0lfMV8wX1BPUlQxNDQsIFBPUlQxNDRfRk4sCQkvKiBQSU46IEsyMyAgKi8KKwkJRk5fSFNJXzFfMF9QT1JUMTQzLCBQT1JUMTQzX0ZOLAkJLyogUElOOiBLMjIgICovCisJCUZOX0NBTV9ZVVY3LCBQT1JUMTQyX0ZOLAkJLyogUElOOiBWMjMgICovCisJCUZOX0NBTV9ZVVY2LCBQT1JUMTQxX0ZOLAkJLyogUElOOiBWMjIgICovCisJCUZOX0NBTV9ZVVY1LCBQT1JUMTQwX0ZOLAkJLyogUElOOiBVMjMgICovCisJCUZOX0NBTV9ZVVY0LCBQT1JUMTM5X0ZOLAkJLyogUElOOiBVMjIgICovCisJCUZOX0NBTV9ZVVYzLCBQT1JUMTM4X0ZOLAkJLyogUElOOiBVMjEgICovCisJCUZOX0NBTV9ZVVYyLCBQT1JUMTM3X0ZOLAkJLyogUElOOiBUMjMgICovCisJCUZOX0NBTV9ZVVYxLCBQT1JUMTM2X0ZOLAkJLyogUElOOiBUMjIgICovCisJCUZOX0NBTV9ZVVYwLCBQT1JUMTM1X0ZOLAkJLyogUElOOiBUMjEgICovCisJCUZOX0NBTV9IUywgUE9SVDEzNF9GTiwJCQkvKiBQSU46IFYyMSAgKi8KKwkJRk5fQ0FNX1ZTLCBQT1JUMTMzX0ZOLAkJCS8qIFBJTjogVzIyICAqLworCQlGTl9DQU1fQ0xLSSwgUE9SVDEzMl9GTiwJCS8qIFBJTjogWTIzICAqLworCQlGTl9DQU1fQ0xLTywgUE9SVDEzMV9GTiwJCS8qIFBJTjogVzIzICAqLworCQlGTl9OVFNDX0RBVEE3LCBQT1JUMTMwX0ZOLAkJLyogUElOOiBVMTggICovCisJCUZOX05UU0NfREFUQTYsIFBPUlQxMjlfRk4sCQkvKiBQSU46IFUyMCAgKi8KKwkJRk5fTlRTQ19EQVRBNSwgUE9SVDEyOF9GTiwJCS8qIFBJTjogVDE4ICAqLworCQl9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHX1ZBUigiQ0hHX1BJTlNFTF9MQ0QzIiwgMHhlMDE0MDI4NCwgMzIsCisJCQkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorCQkJMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMiwgMikgeworCQkvKiAzMSAtIDEyICovCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCS8qIDExIC0gMTAgKi8KKwkJRk5fU0VMX0xDRDNfMTFfMTBfMDAsIEZOX1NFTF9MQ0QzXzExXzEwXzAxLAorCQlGTl9TRUxfTENEM18xMV8xMF8xMCwgMCwKKwkJLyogOSAtIDggKi8KKwkJRk5fU0VMX0xDRDNfOV84XzAwLCAwLCBGTl9TRUxfTENEM185XzhfMTAsIDAsCisJCS8qIDcgLSAyICovCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCS8qIDEgLSAwICovCisJCUZOX1NFTF9MQ0QzXzFfMF8wMCwgRk5fU0VMX0xDRDNfMV8wXzAxLCAwLCAwLAorCQl9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHX1ZBUigiQ0hHX1BJTlNFTF9VQVJUIiwgMHhlMDE0MDI4OCwgMzIsCisJCQkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorCQkJMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMikgeworCQkvKiAzMSAtIDIgKi8KKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJLyogMSAtIDAgKi8KKwkJRk5fU0VMX1VBUlRfMV8wXzAwLCBGTl9TRUxfVUFSVF8xXzBfMDEsIDAsIDAsCisJCX0KKwl9LAorCXsgUElOTVVYX0NGR19SRUdfVkFSKCJDSEdfUElOU0VMX0lJQyIsIDB4ZTAxNDAyOGMsIDMyLAorCQkJMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKwkJCTEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDIpIHsKKwkJLyogMzEgLSAyICovCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCS8qIDEgLSAwICovCisJCUZOX1NFTF9JSUNfMV8wXzAwLCBGTl9TRUxfSUlDXzFfMF8wMSwgMCwgMCwKKwkJfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFR19WQVIoIkNIR19QSU5TRUxfQUIiLCAweGUwMTQwMjk0LCAzMiwKKwkJCTEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCisJCQkyLCAyLCAyLCAyLCAyLCAyLCAyLCAyKSB7CisJCS8qIDMxIC0gMTQgKi8KKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJMCwgMCwgMCwgMCwKKwkJLyogMTMgLSAxMiAqLworCQlGTl9TRUxfQUJfMTNfMTJfMDAsIDAsIEZOX1NFTF9BQl8xM18xMl8xMCwgMCwKKwkJLyogMTEgLSAxMCAqLworCQlGTl9TRUxfQUJfMTFfMTBfMDAsIDAsIEZOX1NFTF9BQl8xMV8xMF8xMCwgMCwKKwkJLyogOSAtIDggKi8KKwkJRk5fU0VMX0FCXzlfOF8wMCwgRk5fU0VMX0FCXzlfOF8wMSwgRk5fU0VMX0FCXzlfOF8xMCwgMCwKKwkJLyogNyAtIDYgKi8KKwkJRk5fU0VMX0FCXzdfNl8wMCwgRk5fU0VMX0FCXzdfNl8wMSwgRk5fU0VMX0FCXzdfNl8xMCwgMCwKKwkJLyogNSAtIDQgKi8KKwkJRk5fU0VMX0FCXzVfNF8wMCwgRk5fU0VMX0FCXzVfNF8wMSwKKwkJRk5fU0VMX0FCXzVfNF8xMCwgRk5fU0VMX0FCXzVfNF8xMSwKKwkJLyogMyAtIDIgKi8KKwkJRk5fU0VMX0FCXzNfMl8wMCwgRk5fU0VMX0FCXzNfMl8wMSwKKwkJRk5fU0VMX0FCXzNfMl8xMCwgRk5fU0VMX0FCXzNfMl8xMSwKKwkJLyogMSAtIDAgKi8KKwkJRk5fU0VMX0FCXzFfMF8wMCwgMCwgRk5fU0VMX0FCXzFfMF8xMCwgMCwKKwkJfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFR19WQVIoIkNIR19QSU5TRUxfVVNJIiwgMHhlMDE0MDI5OCwgMzIsCisJCQkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLAorCQkJMSwgMSwgMSwgMSwgMSwgMSwgMiwgMiwgMiwgMiwgMikgeworCQkvKiAzMSAtIDEwICovCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCS8qIDkgLSA4ICovCisJCUZOX1NFTF9VU0lfOV84XzAwLCBGTl9TRUxfVVNJXzlfOF8wMSwgMCwgMCwKKwkJLyogNyAtIDYgKi8KKwkJRk5fU0VMX1VTSV83XzZfMDAsIEZOX1NFTF9VU0lfN182XzAxLCAwLCAwLAorCQkvKiA1IC0gNCAqLworCQlGTl9TRUxfVVNJXzVfNF8wMCwgRk5fU0VMX1VTSV81XzRfMDEsIDAsIDAsCisJCS8qIDMgLSAyICovCisJCUZOX1NFTF9VU0lfM18yXzAwLCBGTl9TRUxfVVNJXzNfMl8wMSwgMCwgMCwKKwkJLyogMSAtIDAgKi8KKwkJRk5fU0VMX1VTSV8xXzBfMDAsIEZOX1NFTF9VU0lfMV8wXzAxLCAwLCAwLAorCQl9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHX1ZBUigiQ0hHX1BJTlNFTF9IU0kiLCAweGUwMTQwMmE4LCAzMiwKKwkJCTEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsCisJCQkxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAyKSB7CisJCS8qIDMxIC0gMiAqLworCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkvKiAxIC0gMCAqLworCQlGTl9TRUxfSFNJXzFfMF8wMCwgRk5fU0VMX0hTSV8xXzBfMDEsIDAsIDAsCisJCX0KKwl9LAorCXsgfSwKK307CisKK2NvbnN0IHN0cnVjdCBzaF9wZmNfc29jX2luZm8gZW1ldjJfcGlubXV4X2luZm8gPSB7CisJLm5hbWUJCT0gImVtZXYyX3BmYyIsCisKKwkuZnVuY3Rpb24JPSB7IFBJTk1VWF9GVU5DVElPTl9CRUdJTiwgUElOTVVYX0ZVTkNUSU9OX0VORCB9LAorCisJLnBpbnMJCT0gcGlubXV4X3BpbnMsCisJLm5yX3BpbnMJPSBBUlJBWV9TSVpFKHBpbm11eF9waW5zKSwKKwkuZ3JvdXBzCQk9IHBpbm11eF9ncm91cHMsCisJLm5yX2dyb3Vwcwk9IEFSUkFZX1NJWkUocGlubXV4X2dyb3VwcyksCisJLmZ1bmN0aW9ucwk9IHBpbm11eF9mdW5jdGlvbnMsCisJLm5yX2Z1bmN0aW9ucwk9IEFSUkFZX1NJWkUocGlubXV4X2Z1bmN0aW9ucyksCisKKwkuY2ZnX3JlZ3MJPSBwaW5tdXhfY29uZmlnX3JlZ3MsCisKKwkuZ3Bpb19kYXRhCT0gcGlubXV4X2RhdGEsCisJLmdwaW9fZGF0YV9zaXplCT0gQVJSQVlfU0laRShwaW5tdXhfZGF0YSksCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9wZmMtcjhhNzc5MC5jIGIvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9wZmMtcjhhNzc5MC5jCmluZGV4IDlhMTc5YzkuLjgwYzE4NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvcGZjLXI4YTc3OTAuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1yOGE3NzkwLmMKQEAgLTIyNDEsNiArMjI0MSwxMyBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpbnRjX2lycTNfbXV4W10gPSB7CiAJSVJRM19NQVJLLAogfTsKKy8qIC0gTUxCKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1sYl8zcGluX3BpbnNbXSA9IHsKKwlSQ0FSX0dQX1BJTig0LCAwKSwgUkNBUl9HUF9QSU4oNCwgMSksIFJDQVJfR1BfUElOKDQsIDIpLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWxiXzNwaW5fbXV4W10gPSB7CisJTUxCX0NMS19NQVJLLCBNTEJfU0lHX01BUkssIE1MQl9EQVRfTUFSSywKK307CiAvKiAtIE1NQ0lGMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtbWMwX2RhdGExX3BpbnNbXSA9IHsKIAkvKiBEWzBdICovCkBAIC0zODczLDYgKzM4ODAsNyBAQAogCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnExKSwKIAlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMiksCiAJU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTMpLAorCVNIX1BGQ19QSU5fR1JPVVAobWxiXzNwaW4pLAogCVNIX1BGQ19QSU5fR1JPVVAobW1jMF9kYXRhMSksCiAJU0hfUEZDX1BJTl9HUk9VUChtbWMwX2RhdGE0KSwKIAlTSF9QRkNfUElOX0dST1VQKG1tYzBfZGF0YTgpLApAQCAtNDE5OCw2ICs0MjA2LDEwIEBACiAJImludGNfaXJxMyIsCiB9OwogCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1sYl9ncm91cHNbXSA9IHsKKwkibWxiXzNwaW4iLAorfTsKKwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBtbWMwX2dyb3Vwc1tdID0gewogCSJtbWMwX2RhdGExIiwKIAkibW1jMF9kYXRhNCIsCkBAIC00NTExLDYgKzQ1MjMsNyBAQAogCVNIX1BGQ19GVU5DVElPTihpaWMyKSwKIAlTSF9QRkNfRlVOQ1RJT04oaWljMyksCiAJU0hfUEZDX0ZVTkNUSU9OKGludGMpLAorCVNIX1BGQ19GVU5DVElPTihtbGIpLAogCVNIX1BGQ19GVU5DVElPTihtbWMwKSwKIAlTSF9QRkNfRlVOQ1RJT04obW1jMSksCiAJU0hfUEZDX0ZVTkNUSU9OKG1zaW9mMCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1yOGE3NzkxLmMgYi9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1yOGE3NzkxLmMKaW5kZXggYzZlNWRlYi4uZmRkMmM4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9wZmMtcjhhNzc5MS5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvcGZjLXI4YTc3OTEuYwpAQCAtMzc4LDcgKzM3OCw3IEBACiAJLyogSVBTUjE2ICovCiAJRk5fSFJYMSwgRk5fU0NJRkIxX1JYRCwgRk5fVkkxX1IwX0IsIEZOX0dMT19TREFUQV9DLCBGTl9WSTFfREFUQTZfQywKIAlGTl9IVFgxLCBGTl9TQ0lGQjFfVFhELCBGTl9WSTFfUjFfQiwgRk5fR0xPX1NTX0MsIEZOX1ZJMV9EQVRBN19DLAotCUZOX0hTQ0sxLCBGTl9TQ0lGQjFfU0NLLCBGTl9NTEJfQ0ssIEZOX0dMT19SRk9OX0MsCisJRk5fSFNDSzEsIEZOX1NDSUZCMV9TQ0ssIEZOX01MQl9DTEssIEZOX0dMT19SRk9OX0MsCiAJRk5fSENUUzFfTiwgRk5fU0NJRkIxX0NUU19OLCBGTl9NTEJfU0lHLCBGTl9DQU4xX1RYX0IsCiAJRk5fSFJUUzFfTiwgRk5fU0NJRkIxX1JUU19OLCBGTl9NTEJfREFULCBGTl9DQU4xX1JYX0IsCiAKQEAgLTc2NCw3ICs3NjQsNyBAQAogCUdMT19TREFUQV9DX01BUkssIFZJMV9EQVRBNl9DX01BUkssCiAJSFRYMV9NQVJLLCBTQ0lGQjFfVFhEX01BUkssIFZJMV9SMV9CX01BUkssCiAJR0xPX1NTX0NfTUFSSywgVkkxX0RBVEE3X0NfTUFSSywKLQlIU0NLMV9NQVJLLCBTQ0lGQjFfU0NLX01BUkssIE1MQl9DS19NQVJLLCBHTE9fUkZPTl9DX01BUkssCisJSFNDSzFfTUFSSywgU0NJRkIxX1NDS19NQVJLLCBNTEJfQ0xLX01BUkssIEdMT19SRk9OX0NfTUFSSywKIAlIQ1RTMV9OX01BUkssIFNDSUZCMV9DVFNfTl9NQVJLLCBNTEJfU0lHX01BUkssIENBTjFfVFhfQl9NQVJLLAogCUhSVFMxX05fTUFSSywgU0NJRkIxX1JUU19OX01BUkssIE1MQl9EQVRfTUFSSywgQ0FOMV9SWF9CX01BUkssCiAJUElOTVVYX01BUktfRU5ELApAQCAtMTY2NCw3ICsxNjY0LDcgQEAKIAlQSU5NVVhfSVBTUl9NT0RTRUxfREFUQShJUDE2XzVfMywgVkkxX0RBVEE3X0MsIFNFTF9WSTFfMiksCiAJUElOTVVYX0lQU1JfTU9EU0VMX0RBVEEoSVAxNl83XzYsIEhTQ0sxLCBTRUxfSFNDSUYxXzApLAogCVBJTk1VWF9JUFNSX01PRFNFTF9EQVRBKElQMTZfN182LCBTQ0lGQjFfU0NLLCBTRUxfU0NJRkIxXzApLAotCVBJTk1VWF9JUFNSX0RBVEEoSVAxNl83XzYsIE1MQl9DSyksCisJUElOTVVYX0lQU1JfREFUQShJUDE2XzdfNiwgTUxCX0NMSyksCiAJUElOTVVYX0lQU1JfTU9EU0VMX0RBVEEoSVAxNl83XzYsIEdMT19SRk9OX0MsIFNFTF9HUFNfMiksCiAJUElOTVVYX0lQU1JfTU9EU0VMX0RBVEEoSVAxNl85XzgsIEhDVFMxX04sIFNFTF9IU0NJRjFfMCksCiAJUElOTVVYX0lQU1JfREFUQShJUDE2XzlfOCwgU0NJRkIxX0NUU19OKSwKQEAgLTIzOTEsNiArMjM5MSwxMyBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBpbnRjX2lycTNfbXV4W10gPSB7CiAJSVJRM19NQVJLLAogfTsKKy8qIC0gTUxCKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1sYl8zcGluX3BpbnNbXSA9IHsKKwlSQ0FSX0dQX1BJTig3LCA3KSwgUkNBUl9HUF9QSU4oNywgOCksIFJDQVJfR1BfUElOKDcsIDkpLAorfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWxiXzNwaW5fbXV4W10gPSB7CisJTUxCX0NMS19NQVJLLCBNTEJfU0lHX01BUkssIE1MQl9EQVRfTUFSSywKK307CiAvKiAtIE1NQ0lGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtbWNfZGF0YTFfcGluc1tdID0gewogCS8qIERbMF0gKi8KQEAgLTQyNjcsNiArNDI3NCw3IEBACiAJU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTEpLAogCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnEyKSwKIAlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMyksCisJU0hfUEZDX1BJTl9HUk9VUChtbGJfM3BpbiksCiAJU0hfUEZDX1BJTl9HUk9VUChtbWNfZGF0YTEpLAogCVNIX1BGQ19QSU5fR1JPVVAobW1jX2RhdGE0KSwKIAlTSF9QRkNfUElOX0dST1VQKG1tY19kYXRhOCksCkBAIC00NjQ4LDYgKzQ2NTYsMTAgQEAKIAkiaW50Y19pcnEzIiwKIH07CiAKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWxiX2dyb3Vwc1tdID0geworCSJtbGJfM3BpbiIsCit9OworCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1tY19ncm91cHNbXSA9IHsKIAkibW1jX2RhdGExIiwKIAkibW1jX2RhdGE0IiwKQEAgLTQ5NzIsNiArNDk4NCw3IEBACiAJU0hfUEZDX0ZVTkNUSU9OKGkyYzcpLAogCVNIX1BGQ19GVU5DVElPTihpMmM4KSwKIAlTSF9QRkNfRlVOQ1RJT04oaW50YyksCisJU0hfUEZDX0ZVTkNUSU9OKG1sYiksCiAJU0hfUEZDX0ZVTkNUSU9OKG1tYyksCiAJU0hfUEZDX0ZVTkNUSU9OKG1zaW9mMCksCiAJU0hfUEZDX0ZVTkNUSU9OKG1zaW9mMSksCkBAIC01OTc0LDcgKzU5ODcsNyBAQAogCQkvKiBJUDE2XzlfOCBbMl0gKi8KIAkJRk5fSENUUzFfTiwgRk5fU0NJRkIxX0NUU19OLCBGTl9NTEJfU0lHLCBGTl9DQU4xX1RYX0IsCiAJCS8qIElQMTZfN182IFsyXSAqLwotCQlGTl9IU0NLMSwgRk5fU0NJRkIxX1NDSywgRk5fTUxCX0NLLCBGTl9HTE9fUkZPTl9DLAorCQlGTl9IU0NLMSwgRk5fU0NJRkIxX1NDSywgRk5fTUxCX0NMSywgRk5fR0xPX1JGT05fQywKIAkJLyogSVAxNl81XzMgWzNdICovCiAJCUZOX0hUWDEsIEZOX1NDSUZCMV9UWEQsIEZOX1ZJMV9SMV9CLAogCQlGTl9HTE9fU1NfQywgRk5fVkkxX0RBVEE3X0MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3BmYy1zaDczNzIuYyBiL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvcGZjLXNoNzM3Mi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjExZjY2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvcGZjLXNoNzM3Mi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjY0NSArMCwwIEBACi0vKgotICogc2g3MzcyIHByb2Nlc3NvciBzdXBwb3J0IC0gUEZDIGhhcmR3YXJlIGJsb2NrCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEwICBLdW5pbm9yaSBNb3JpbW90byA8bW9yaW1vdG8ua3VuaW5vcmlAcmVuZXNhcy5jb20+Ci0gKgotICogQmFzZWQgb24KLSAqIHNoNzM2NyBwcm9jZXNzb3Igc3VwcG9ydCAtIFBGQyBoYXJkd2FyZSBibG9jawotICogQ29weXJpZ2h0IChDKSAyMDEwICBNYWdudXMgRGFtbQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9waW5jdHJsL3BpbmNvbmYtZ2VuZXJpYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NoX2ludGMuaD4KLQotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJzaF9wZmMuaCIKLQotI2RlZmluZSBDUFVfQUxMX1BPUlQoZm4sIHBmeCwgc2Z4KQkJCQkJXAotCVBPUlRfMTAoMCwgIGZuLCBwZngsIHNmeCksCVBPUlRfOTAoMCwgIGZuLCBwZngsIHNmeCksCVwKLQlQT1JUXzEwKDEwMCwgZm4sIHBmeCMjMTAsIHNmeCksCVBPUlRfMTAoMTEwLCBmbiwgcGZ4IyMxMSwgc2Z4KSwJXAotCVBPUlRfMTAoMTIwLCBmbiwgcGZ4IyMxMiwgc2Z4KSwJUE9SVF8xMCgxMzAsIGZuLCBwZngjIzEzLCBzZngpLAlcCi0JUE9SVF8xMCgxNDAsIGZuLCBwZngjIzE0LCBzZngpLAlQT1JUXzEwKDE1MCwgZm4sIHBmeCMjMTUsIHNmeCksCVwKLQlQT1JUXzEwKDE2MCwgZm4sIHBmeCMjMTYsIHNmeCksCVBPUlRfMTAoMTcwLCBmbiwgcGZ4IyMxNywgc2Z4KSwJXAotCVBPUlRfMTAoMTgwLCBmbiwgcGZ4IyMxOCwgc2Z4KSwJUE9SVF8xKDE5MCwgZm4sIHBmeCMjMTkwLCBzZngpCi0KLSNkZWZpbmUgSVJRQ19QSU5fTVVYKGlycSwgcGluKQkJCQkJCVwKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW50Y19pcnEjI2lycSMjX3BpbnNbXSA9IHsJCQlcCi0JcGluLAkJCQkJCQkJXAotfTsJCQkJCQkJCQlcCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGludGNfaXJxIyNpcnEjI19tdXhbXSA9IHsJCQlcCi0JSVJRIyNpcnEjI19NQVJLLAkJCQkJCVwKLX0KLQotI2RlZmluZSBJUlFDX1BJTlNfTVVYKGlycSwgcGluMCwgcGluMSkJCQkJCVwKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW50Y19pcnEjI2lycSMjXzBfcGluc1tdID0gewkJCVwKLQlwaW4wLAkJCQkJCQkJXAotfTsJCQkJCQkJCQlcCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGludGNfaXJxIyNpcnEjI18wX211eFtdID0gewkJCVwKLQlJUlEjI2lycSMjXyMjcGluMCMjX01BUkssCQkJCQlcCi19OwkJCQkJCQkJCVwKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaW50Y19pcnEjI2lycSMjXzFfcGluc1tdID0gewkJCVwKLQlwaW4xLAkJCQkJCQkJXAotfTsJCQkJCQkJCQlcCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGludGNfaXJxIyNpcnEjI18xX211eFtdID0gewkJCVwKLQlJUlEjI2lycSMjXyMjcGluMSMjX01BUkssCQkJCQlcCi19Ci0KLWVudW0gewotCVBJTk1VWF9SRVNFUlZFRCA9IDAsCi0KLQkvKiBQT1JUMF9EQVRBIC0+IFBPUlQxOTBfREFUQSAqLwotCVBJTk1VWF9EQVRBX0JFR0lOLAotCVBPUlRfQUxMKERBVEEpLAotCVBJTk1VWF9EQVRBX0VORCwKLQotCS8qIFBPUlQwX0lOIC0+IFBPUlQxOTBfSU4gKi8KLQlQSU5NVVhfSU5QVVRfQkVHSU4sCi0JUE9SVF9BTEwoSU4pLAotCVBJTk1VWF9JTlBVVF9FTkQsCi0KLQkvKiBQT1JUMF9PVVQgLT4gUE9SVDE5MF9PVVQgKi8KLQlQSU5NVVhfT1VUUFVUX0JFR0lOLAotCVBPUlRfQUxMKE9VVCksCi0JUElOTVVYX09VVFBVVF9FTkQsCi0KLQlQSU5NVVhfRlVOQ1RJT05fQkVHSU4sCi0JUE9SVF9BTEwoRk5fSU4pLAkvKiBQT1JUMF9GTl9JTgktPiBQT1JUMTkwX0ZOX0lOICovCi0JUE9SVF9BTEwoRk5fT1VUKSwJLyogUE9SVDBfRk5fT1VUCS0+IFBPUlQxOTBfRk5fT1VUICovCi0JUE9SVF9BTEwoRk4wKSwJCS8qIFBPUlQwX0ZOMAktPiBQT1JUMTkwX0ZOMCAqLwotCVBPUlRfQUxMKEZOMSksCQkvKiBQT1JUMF9GTjEJLT4gUE9SVDE5MF9GTjEgKi8KLQlQT1JUX0FMTChGTjIpLAkJLyogUE9SVDBfRk4yCS0+IFBPUlQxOTBfRk4yICovCi0JUE9SVF9BTEwoRk4zKSwJCS8qIFBPUlQwX0ZOMwktPiBQT1JUMTkwX0ZOMyAqLwotCVBPUlRfQUxMKEZONCksCQkvKiBQT1JUMF9GTjQJLT4gUE9SVDE5MF9GTjQgKi8KLQlQT1JUX0FMTChGTjUpLAkJLyogUE9SVDBfRk41CS0+IFBPUlQxOTBfRk41ICovCi0JUE9SVF9BTEwoRk42KSwJCS8qIFBPUlQwX0ZONgktPiBQT1JUMTkwX0ZONiAqLwotCVBPUlRfQUxMKEZONyksCQkvKiBQT1JUMF9GTjcJLT4gUE9SVDE5MF9GTjcgKi8KLQotCU1TRUwxQ1JfMzFfMCwJTVNFTDFDUl8zMV8xLAotCU1TRUwxQ1JfMzBfMCwJTVNFTDFDUl8zMF8xLAotCU1TRUwxQ1JfMjlfMCwJTVNFTDFDUl8yOV8xLAotCU1TRUwxQ1JfMjhfMCwJTVNFTDFDUl8yOF8xLAotCU1TRUwxQ1JfMjdfMCwJTVNFTDFDUl8yN18xLAotCU1TRUwxQ1JfMjZfMCwJTVNFTDFDUl8yNl8xLAotCU1TRUwxQ1JfMTZfMCwJTVNFTDFDUl8xNl8xLAotCU1TRUwxQ1JfMTVfMCwJTVNFTDFDUl8xNV8xLAotCU1TRUwxQ1JfMTRfMCwJTVNFTDFDUl8xNF8xLAotCU1TRUwxQ1JfMTNfMCwJTVNFTDFDUl8xM18xLAotCU1TRUwxQ1JfMTJfMCwJTVNFTDFDUl8xMl8xLAotCU1TRUwxQ1JfOV8wLAlNU0VMMUNSXzlfMSwKLQlNU0VMMUNSXzhfMCwJTVNFTDFDUl84XzEsCi0JTVNFTDFDUl83XzAsCU1TRUwxQ1JfN18xLAotCU1TRUwxQ1JfNl8wLAlNU0VMMUNSXzZfMSwKLQlNU0VMMUNSXzRfMCwJTVNFTDFDUl80XzEsCi0JTVNFTDFDUl8zXzAsCU1TRUwxQ1JfM18xLAotCU1TRUwxQ1JfMl8wLAlNU0VMMUNSXzJfMSwKLQlNU0VMMUNSXzBfMCwJTVNFTDFDUl8wXzEsCi0KLQlNU0VMM0NSXzI3XzAsCU1TRUwzQ1JfMjdfMSwKLQlNU0VMM0NSXzI2XzAsCU1TRUwzQ1JfMjZfMSwKLQlNU0VMM0NSXzIxXzAsCU1TRUwzQ1JfMjFfMSwKLQlNU0VMM0NSXzIwXzAsCU1TRUwzQ1JfMjBfMSwKLQlNU0VMM0NSXzE1XzAsCU1TRUwzQ1JfMTVfMSwKLQlNU0VMM0NSXzlfMCwJTVNFTDNDUl85XzEsCi0JTVNFTDNDUl82XzAsCU1TRUwzQ1JfNl8xLAotCi0JTVNFTDRDUl8xOV8wLAlNU0VMNENSXzE5XzEsCi0JTVNFTDRDUl8xOF8wLAlNU0VMNENSXzE4XzEsCi0JTVNFTDRDUl8xN18wLAlNU0VMNENSXzE3XzEsCi0JTVNFTDRDUl8xNl8wLAlNU0VMNENSXzE2XzEsCi0JTVNFTDRDUl8xNV8wLAlNU0VMNENSXzE1XzEsCi0JTVNFTDRDUl8xNF8wLAlNU0VMNENSXzE0XzEsCi0JTVNFTDRDUl8xMF8wLAlNU0VMNENSXzEwXzEsCi0JTVNFTDRDUl82XzAsCU1TRUw0Q1JfNl8xLAotCU1TRUw0Q1JfNF8wLAlNU0VMNENSXzRfMSwKLQlNU0VMNENSXzFfMCwJTVNFTDRDUl8xXzEsCi0JUElOTVVYX0ZVTkNUSU9OX0VORCwKLQotCVBJTk1VWF9NQVJLX0JFR0lOLAotCi0JLyogSVJRICovCi0JSVJRMF82X01BUkssCUlSUTBfMTYyX01BUkssCUlSUTFfTUFSSywJSVJRMl80X01BUkssCi0JSVJRMl81X01BUkssCUlSUTNfOF9NQVJLLAlJUlEzXzE2X01BUkssCUlSUTRfMTdfTUFSSywKLQlJUlE0XzE2M19NQVJLLAlJUlE1X01BUkssCUlSUTZfMzlfTUFSSywJSVJRNl8xNjRfTUFSSywKLQlJUlE3XzQwX01BUkssCUlSUTdfMTY3X01BUkssCUlSUThfNDFfTUFSSywJSVJROF8xNjhfTUFSSywKLQlJUlE5XzQyX01BUkssCUlSUTlfMTY5X01BUkssCUlSUTEwX01BUkssCUlSUTExX01BUkssCi0JSVJRMTJfODBfTUFSSywJSVJRMTJfMTM3X01BUkssCUlSUTEzXzgxX01BUkssCUlSUTEzXzE0NV9NQVJLLAotCUlSUTE0XzgyX01BUkssCUlSUTE0XzE0Nl9NQVJLLAlJUlExNV84M19NQVJLLAlJUlExNV8xNDdfTUFSSywKLQlJUlExNl84NF9NQVJLLAlJUlExNl8xNzBfTUFSSywJSVJRMTdfTUFSSywJSVJRMThfTUFSSywKLQlJUlExOV9NQVJLLAlJUlEyMF9NQVJLLAlJUlEyMV9NQVJLLAlJUlEyMl9NQVJLLAotCUlSUTIzX01BUkssCUlSUTI0X01BUkssCUlSUTI1X01BUkssCUlSUTI2XzEyMV9NQVJLLAotCUlSUTI2XzE3Ml9NQVJLLAlJUlEyN18xMjJfTUFSSywJSVJRMjdfMTgwX01BUkssCUlSUTI4XzEyM19NQVJLLAotCUlSUTI4XzE4MV9NQVJLLAlJUlEyOV8xMjlfTUFSSywJSVJRMjlfMTgyX01BUkssCUlSUTMwXzEzMF9NQVJLLAotCUlSUTMwXzE4M19NQVJLLAlJUlEzMV8xMzhfTUFSSywJSVJRMzFfMTg0X01BUkssCi0KLQkvKiBNU0lPRjAgKi8KLQlNU0lPRjBfVFNZTkNfTUFSSywJTVNJT0YwX1RTQ0tfTUFSSywJTVNJT0YwX1JYRF9NQVJLLAotCU1TSU9GMF9SU0NLX01BUkssCU1TSU9GMF9SU1lOQ19NQVJLLAlNU0lPRjBfTUNLMF9NQVJLLAotCU1TSU9GMF9NQ0sxX01BUkssCU1TSU9GMF9TUzFfTUFSSywJTVNJT0YwX1NTMl9NQVJLLAotCU1TSU9GMF9UWERfTUFSSywKLQotCS8qIE1TSU9GMSAqLwotCU1TSU9GMV9UU0NLXzM5X01BUkssCU1TSU9GMV9UU1lOQ180MF9NQVJLLAotCU1TSU9GMV9UU0NLXzg4X01BUkssCU1TSU9GMV9UU1lOQ184OV9NQVJLLAotCU1TSU9GMV9UWERfNDFfTUFSSywJTVNJT0YxX1JYRF80Ml9NQVJLLAotCU1TSU9GMV9UWERfOTBfTUFSSywJTVNJT0YxX1JYRF85MV9NQVJLLAotCU1TSU9GMV9TUzFfNDNfTUFSSywJTVNJT0YxX1NTMl80NF9NQVJLLAotCU1TSU9GMV9TUzFfOTJfTUFSSywJTVNJT0YxX1NTMl85M19NQVJLLAotCU1TSU9GMV9SU0NLX01BUkssCU1TSU9GMV9SU1lOQ19NQVJLLAotCU1TSU9GMV9NQ0swX01BUkssCU1TSU9GMV9NQ0sxX01BUkssCi0KLQkvKiBNU0lPRjIgKi8KLQlNU0lPRjJfUlNDS19NQVJLLAlNU0lPRjJfUlNZTkNfTUFSSywJTVNJT0YyX01DSzBfTUFSSywKLQlNU0lPRjJfTUNLMV9NQVJLLAlNU0lPRjJfU1MxX01BUkssCU1TSU9GMl9TUzJfTUFSSywKLQlNU0lPRjJfVFNZTkNfTUFSSywJTVNJT0YyX1RTQ0tfTUFSSywJTVNJT0YyX1JYRF9NQVJLLAotCU1TSU9GMl9UWERfTUFSSywKLQotCS8qIEJCSUYxICovCi0JQkJJRjFfUlhEX01BUkssCQlCQklGMV9UU1lOQ19NQVJLLAlCQklGMV9UU0NLX01BUkssCi0JQkJJRjFfVFhEX01BUkssCQlCQklGMV9SU0NLX01BUkssCUJCSUYxX1JTWU5DX01BUkssCi0JQkJJRjFfRkxPV19NQVJLLAlCQl9SWF9GTE9XX05fTUFSSywKLQotCS8qIEJCSUYyICovCi0JQkJJRjJfVFNDSzFfTUFSSywJQkJJRjJfVFNZTkMxX01BUkssCi0JQkJJRjJfVFhEMV9NQVJLLAlCQklGMl9SWERfTUFSSywKLQotCS8qIEZTSSAqLwotCUZTSUFDS19NQVJLLAlGU0lCQ0tfTUFSSywJCUZTSUFJTFJfTUFSSywJRlNJQUlCVF9NQVJLLAotCUZTSUFJU0xEX01BUkssCUZTSUFPTUNfTUFSSywJCUZTSUFPTFJfTUFSSywJRlNJQU9CVF9NQVJLLAotCUZTSUFPU0xEX01BUkssCUZTSUFTUERJRl8xMV9NQVJLLAlGU0lBU1BESUZfMTVfTUFSSywKLQotCS8qIEZNU0kgKi8KLQlGTVNPQ0tfTUFSSywJRk1TT09MUl9NQVJLLAlGTVNJT0xSX01BUkssCUZNU09PQlRfTUFSSywKLQlGTVNJT0JUX01BUkssCUZNU09TTERfTUFSSywJRk1TT0lMUl9NQVJLLAlGTVNJSUxSX01BUkssCi0JRk1TT0lCVF9NQVJLLAlGTVNJSUJUX01BUkssCUZNU0lTTERfTUFSSywJRk1TSUNLX01BUkssCi0KLQkvKiBTQ0lGQTAgKi8KLQlTQ0lGQTBfVFhEX01BUkssCVNDSUZBMF9SWERfTUFSSywJU0NJRkEwX1NDS19NQVJLLAotCVNDSUZBMF9SVFNfTUFSSywJU0NJRkEwX0NUU19NQVJLLAotCi0JLyogU0NJRkExICovCi0JU0NJRkExX1RYRF9NQVJLLAlTQ0lGQTFfUlhEX01BUkssCVNDSUZBMV9TQ0tfTUFSSywKLQlTQ0lGQTFfUlRTX01BUkssCVNDSUZBMV9DVFNfTUFSSywKLQotCS8qIFNDSUZBMiAqLwotCVNDSUZBMl9DVFMxX01BUkssCVNDSUZBMl9SVFMxX01BUkssCVNDSUZBMl9UWEQxX01BUkssCi0JU0NJRkEyX1JYRDFfTUFSSywJU0NJRkEyX1NDSzFfTUFSSywKLQotCS8qIFNDSUZBMyAqLwotCVNDSUZBM19DVFNfNDNfTUFSSywJU0NJRkEzX0NUU18xNDBfTUFSSywJU0NJRkEzX1JUU180NF9NQVJLLAotCVNDSUZBM19SVFNfMTQxX01BUkssCVNDSUZBM19TQ0tfTUFSSywJU0NJRkEzX1RYRF9NQVJLLAotCVNDSUZBM19SWERfTUFSSywKLQotCS8qIFNDSUZBNCAqLwotCVNDSUZBNF9SWERfTUFSSywJU0NJRkE0X1RYRF9NQVJLLAotCi0JLyogU0NJRkE1ICovCi0JU0NJRkE1X1JYRF9NQVJLLAlTQ0lGQTVfVFhEX01BUkssCi0KLQkvKiBTQ0lGQiAqLwotCVNDSUZCX1NDS19NQVJLLAlTQ0lGQl9SVFNfTUFSSywJU0NJRkJfQ1RTX01BUkssCi0JU0NJRkJfVFhEX01BUkssCVNDSUZCX1JYRF9NQVJLLAotCi0JLyogQ0VVICovCi0JVklPX0hEX01BUkssCVZJT19DS08xX01BUkssCVZJT19DS08yX01BUkssCVZJT19WRF9NQVJLLAotCVZJT19DTEtfTUFSSywJVklPX0ZJRUxEX01BUkssCVZJT19DS09fTUFSSywKLQlWSU9fRDBfTUFSSywJVklPX0QxX01BUkssCVZJT19EMl9NQVJLLAlWSU9fRDNfTUFSSywKLQlWSU9fRDRfTUFSSywJVklPX0Q1X01BUkssCVZJT19ENl9NQVJLLAlWSU9fRDdfTUFSSywKLQlWSU9fRDhfTUFSSywJVklPX0Q5X01BUkssCVZJT19EMTBfTUFSSywJVklPX0QxMV9NQVJLLAotCVZJT19EMTJfTUFSSywJVklPX0QxM19NQVJLLAlWSU9fRDE0X01BUkssCVZJT19EMTVfTUFSSywKLQotCS8qIFVTQjAgKi8KLQlJRElOXzBfTUFSSywJRVhUTFBfMF9NQVJLLAlPVkNOMl8wX01BUkssCVBXRU5fMF9NQVJLLAotCU9WQ05fMF9NQVJLLAlWQlVTMF8wX01BUkssCi0KLQkvKiBVU0IxICovCi0JSURJTl8xXzE4X01BUkssCQlJRElOXzFfMTEzX01BUkssCi0JUFdFTl8xXzExNV9NQVJLLAlQV0VOXzFfMTM4X01BUkssCi0JT1ZDTl8xXzExNF9NQVJLLAlPVkNOXzFfMTYyX01BUkssCi0JRVhUTFBfMV9NQVJLLAkJT1ZDTjJfMV9NQVJLLAotCVZCVVMwXzFfTUFSSywKLQotCS8qIEdQSU8gKi8KLQlHUEkwX01BUkssCUdQSTFfTUFSSywJR1BPMF9NQVJLLAlHUE8xX01BUkssCi0KLQkvKiBCU0MgKi8KLQlCU19NQVJLLAlXRTFfTUFSSywKLQlDS09fTUFSSywJV0FJVF9NQVJLLAlSRFdSX01BUkssCi0KLQlBMF9NQVJLLAlBMV9NQVJLLAlBMl9NQVJLLAlBM19NQVJLLAotCUE2X01BUkssCUE3X01BUkssCUE4X01BUkssCUE5X01BUkssCi0JQTEwX01BUkssCUExMV9NQVJLLAlBMTJfTUFSSywJQTEzX01BUkssCi0JQTE0X01BUkssCUExNV9NQVJLLAlBMTZfTUFSSywJQTE3X01BUkssCi0JQTE4X01BUkssCUExOV9NQVJLLAlBMjBfTUFSSywJQTIxX01BUkssCi0JQTIyX01BUkssCUEyM19NQVJLLAlBMjRfTUFSSywJQTI1X01BUkssCi0JQTI2X01BUkssCi0KLQlDUzBfTUFSSywJQ1MyX01BUkssCUNTNF9NQVJLLAotCUNTNUFfTUFSSywJQ1M1Ql9NQVJLLAlDUzZBX01BUkssCi0KLQkvKiBCU0MvRkxDVEwgKi8KLQlSRF9GU0NfTUFSSywJV0UwX0ZXRV9NQVJLLAlBNF9GT0VfTUFSSywJQTVfRkNERV9NQVJLLAotCUQwX05BRjBfTUFSSywJRDFfTkFGMV9NQVJLLAlEMl9OQUYyX01BUkssCUQzX05BRjNfTUFSSywKLQlENF9OQUY0X01BUkssCUQ1X05BRjVfTUFSSywJRDZfTkFGNl9NQVJLLAlEN19OQUY3X01BUkssCi0JRDhfTkFGOF9NQVJLLAlEOV9OQUY5X01BUkssCUQxMF9OQUYxMF9NQVJLLAlEMTFfTkFGMTFfTUFSSywKLQlEMTJfTkFGMTJfTUFSSywJRDEzX05BRjEzX01BUkssCUQxNF9OQUYxNF9NQVJLLAlEMTVfTkFGMTVfTUFSSywKLQotCS8qIE1NQ0lGKDEpICovCi0JTU1DRDBfMF9NQVJLLAlNTUNEMF8xX01BUkssCU1NQ0QwXzJfTUFSSywJTU1DRDBfM19NQVJLLAotCU1NQ0QwXzRfTUFSSywJTU1DRDBfNV9NQVJLLAlNTUNEMF82X01BUkssCU1NQ0QwXzdfTUFSSywKLQlNTUNDTUQwX01BUkssCU1NQ0NMSzBfTUFSSywKLQotCS8qIE1NQ0lGKDIpICovCi0JTU1DRDFfMF9NQVJLLAlNTUNEMV8xX01BUkssCU1NQ0QxXzJfTUFSSywJTU1DRDFfM19NQVJLLAotCU1NQ0QxXzRfTUFSSywJTU1DRDFfNV9NQVJLLAlNTUNEMV82X01BUkssCU1NQ0QxXzdfTUFSSywKLQlNTUNDTEsxX01BUkssCU1NQ0NNRDFfTUFSSywKLQotCS8qIFNQVTIgKi8KLQlWSU5UX0lfTUFSSywKLQotCS8qIEZMQ1RMICovCi0JRkNFMV9NQVJLLAlGQ0UwX01BUkssCUZSQl9NQVJLLAotCi0JLyogSFNJICovCi0JR1BfUlhfRkxBR19NQVJLLAlHUF9SWF9EQVRBX01BUkssCUdQX1RYX1JFQURZX01BUkssCi0JR1BfUlhfV0FLRV9NQVJLLAlNUF9UWF9GTEFHX01BUkssCU1QX1RYX0RBVEFfTUFSSywKLQlNUF9SWF9SRUFEWV9NQVJLLAlNUF9UWF9XQUtFX01BUkssCi0KLQkvKiBNRkkgKi8KLQlNRkl2Nl9NQVJLLAotCU1GSXY0X01BUkssCi0KLQlNRU1DX0NTMF9NQVJLLAkJCU1FTUNfQlVTQ0xLX01FTUNfQTBfTUFSSywKLQlNRU1DX0NTMV9NRU1DX0ExX01BUkssCQlNRU1DX0FEVl9NRU1DX0RSRVEwX01BUkssCi0JTUVNQ19XQUlUX01FTUNfRFJFUTFfTUFSSywJTUVNQ19OT0VfTUFSSywKLQlNRU1DX05XRV9NQVJLLAkJCU1FTUNfSU5UX01BUkssCi0KLQlNRU1DX0FEMF9NQVJLLAlNRU1DX0FEMV9NQVJLLAlNRU1DX0FEMl9NQVJLLAotCU1FTUNfQUQzX01BUkssCU1FTUNfQUQ0X01BUkssCU1FTUNfQUQ1X01BUkssCi0JTUVNQ19BRDZfTUFSSywJTUVNQ19BRDdfTUFSSywJTUVNQ19BRDhfTUFSSywKLQlNRU1DX0FEOV9NQVJLLAlNRU1DX0FEMTBfTUFSSywJTUVNQ19BRDExX01BUkssCi0JTUVNQ19BRDEyX01BUkssCU1FTUNfQUQxM19NQVJLLAlNRU1DX0FEMTRfTUFSSywKLQlNRU1DX0FEMTVfTUFSSywKLQotCS8qIFNJTSAqLwotCVNJTV9SU1RfTUFSSywJU0lNX0NMS19NQVJLLAlTSU1fRF9NQVJLLAotCi0JLyogVFBVICovCi0JVFBVMFRPMF9NQVJLLAkJVFBVMFRPMV9NQVJLLAotCVRQVTBUTzJfOTNfTUFSSywJVFBVMFRPMl85OV9NQVJLLAotCVRQVTBUTzNfTUFSSywKLQotCS8qIEkyQzIgKi8KLQlJMkNfU0NMMl9NQVJLLAlJMkNfU0RBMl9NQVJLLAotCi0JLyogSTJDMygxKSAqLwotCUkyQ19TQ0wzX01BUkssCUkyQ19TREEzX01BUkssCi0KLQkvKiBJMkMzKDIpICovCi0JSTJDX1NDTDNTX01BUkssCUkyQ19TREEzU19NQVJLLAotCi0JLyogSTJDNCgyKSAqLwotCUkyQ19TQ0w0X01BUkssCUkyQ19TREE0X01BUkssCi0KLQkvKiBJMkM0KDIpICovCi0JSTJDX1NDTDRTX01BUkssCUkyQ19TREE0U19NQVJLLAotCi0JLyogS0VZU0MgKi8KLQlLRVlPVVQwX01BUkssCUtFWUlOMF8xMjFfTUFSSywJS0VZSU4wXzEzNl9NQVJLLAotCUtFWU9VVDFfTUFSSywJS0VZSU4xXzEyMl9NQVJLLAlLRVlJTjFfMTM1X01BUkssCi0JS0VZT1VUMl9NQVJLLAlLRVlJTjJfMTIzX01BUkssCUtFWUlOMl8xMzRfTUFSSywKLQlLRVlPVVQzX01BUkssCUtFWUlOM18xMjRfTUFSSywJS0VZSU4zXzEzM19NQVJLLAotCUtFWU9VVDRfTUFSSywJS0VZSU40X01BUkssCi0JS0VZT1VUNV9NQVJLLAlLRVlJTjVfTUFSSywKLQlLRVlPVVQ2X01BUkssCUtFWUlONl9NQVJLLAotCUtFWU9VVDdfTUFSSywJS0VZSU43X01BUkssCi0KLQkvKiBMQ0RDICovCi0JTENEQzBfU0VMRUNUX01BUkssCi0JTENEQzFfU0VMRUNUX01BUkssCi0JTENESFNZTl9NQVJLLAlMQ0RDU19NQVJLLAlMQ0RWU1lOX01BUkssCUxDRERDS19NQVJLLAotCUxDRFdSX01BUkssCUxDRFJEX01BUkssCUxDRERJU1BfTUFSSywJTENEUlNfTUFSSywKLQlMQ0RMQ0xLX01BUkssCUxDRERPTl9NQVJLLAotCi0JTENERDBfTUFSSywJTENERDFfTUFSSywJTENERDJfTUFSSywJTENERDNfTUFSSywKLQlMQ0RENF9NQVJLLAlMQ0RENV9NQVJLLAlMQ0RENl9NQVJLLAlMQ0REN19NQVJLLAotCUxDREQ4X01BUkssCUxDREQ5X01BUkssCUxDREQxMF9NQVJLLAlMQ0REMTFfTUFSSywKLQlMQ0REMTJfTUFSSywJTENERDEzX01BUkssCUxDREQxNF9NQVJLLAlMQ0REMTVfTUFSSywKLQlMQ0REMTZfTUFSSywJTENERDE3X01BUkssCUxDREQxOF9NQVJLLAlMQ0REMTlfTUFSSywKLQlMQ0REMjBfTUFSSywJTENERDIxX01BUkssCUxDREQyMl9NQVJLLAlMQ0REMjNfTUFSSywKLQotCS8qIElSREEgKi8KLQlJUkRBX09VVF9NQVJLLAlJUkRBX0lOX01BUkssCUlSREFfRklSU0VMX01BUkssCi0JSVJPVVRfMTM5X01BUkssCUlST1VUXzE0MF9NQVJLLAotCi0JLyogVFNJRjEgKi8KLQlUUzBfMVNFTEVDVF9NQVJLLAotCVRTMF8yU0VMRUNUX01BUkssCi0JVFMxXzFTRUxFQ1RfTUFSSywKLQlUUzFfMlNFTEVDVF9NQVJLLAotCi0JVFNfU1BTWU5DMV9NQVJLLAlUU19TREFUMV9NQVJLLAotCVRTX1NERU4xX01BUkssCQlUU19TQ0sxX01BUkssCi0KLQkvKiBUU0lGMiAqLwotCVRTX1NQU1lOQzJfTUFSSywJVFNfU0RBVDJfTUFSSywKLQlUU19TREVOMl9NQVJLLAkJVFNfU0NLMl9NQVJLLAotCi0JLyogSERNSSAqLwotCUhETUlfSFBEX01BUkssCUhETUlfQ0VDX01BUkssCi0KLQkvKiBTREhJMCAqLwotCVNESElDTEswX01BUkssCVNESElDRDBfTUFSSywKLQlTREhJQ01EMF9NQVJLLAlTREhJV1AwX01BUkssCi0JU0RISUQwXzBfTUFSSywJU0RISUQwXzFfTUFSSywKLQlTREhJRDBfMl9NQVJLLAlTREhJRDBfM19NQVJLLAotCi0JLyogU0RISTEgKi8KLQlTREhJQ0xLMV9NQVJLLAlTREhJQ01EMV9NQVJLLAlTREhJRDFfMF9NQVJLLAotCVNESElEMV8xX01BUkssCVNESElEMV8yX01BUkssCVNESElEMV8zX01BUkssCi0KLQkvKiBTREhJMiAqLwotCVNESElDTEsyX01BUkssCVNESElDTUQyX01BUkssCVNESElEMl8wX01BUkssCi0JU0RISUQyXzFfTUFSSywJU0RISUQyXzJfTUFSSywJU0RISUQyXzNfTUFSSywKLQotCS8qIFNERU5DICovCi0JU0RFTkNfQ1BHX01BUkssCi0JU0RFTkNfRFZfQ0xLSV9NQVJLLAotCi0JUElOTVVYX01BUktfRU5ELAotfTsKLQotc3RhdGljIGNvbnN0IHUxNiBwaW5tdXhfZGF0YVtdID0gewotCVBJTk1VWF9EQVRBX0FMTCgpLAotCi0JLyogSVJRICovCi0JUElOTVVYX0RBVEEoSVJRMF82X01BUkssCVBPUlQ2X0ZOMCwgCU1TRUwxQ1JfMF8wKSwKLQlQSU5NVVhfREFUQShJUlEwXzE2Ml9NQVJLLAlQT1JUMTYyX0ZOMCwJTVNFTDFDUl8wXzEpLAotCVBJTk1VWF9EQVRBKElSUTFfTUFSSywJCVBPUlQxMl9GTjApLAotCVBJTk1VWF9EQVRBKElSUTJfNF9NQVJLLAlQT1JUNF9GTjAsCU1TRUwxQ1JfMl8wKSwKLQlQSU5NVVhfREFUQShJUlEyXzVfTUFSSywJUE9SVDVfRk4wLAlNU0VMMUNSXzJfMSksCi0JUElOTVVYX0RBVEEoSVJRM184X01BUkssCVBPUlQ4X0ZOMCwJTVNFTDFDUl8zXzApLAotCVBJTk1VWF9EQVRBKElSUTNfMTZfTUFSSywJUE9SVDE2X0ZOMCwJTVNFTDFDUl8zXzEpLAotCVBJTk1VWF9EQVRBKElSUTRfMTdfTUFSSywJUE9SVDE3X0ZOMCwJTVNFTDFDUl80XzApLAotCVBJTk1VWF9EQVRBKElSUTRfMTYzX01BUkssCVBPUlQxNjNfRk4wLAlNU0VMMUNSXzRfMSksCi0JUElOTVVYX0RBVEEoSVJRNV9NQVJLLAkJUE9SVDE4X0ZOMCksCi0JUElOTVVYX0RBVEEoSVJRNl8zOV9NQVJLLAlQT1JUMzlfRk4wLAlNU0VMMUNSXzZfMCksCi0JUElOTVVYX0RBVEEoSVJRNl8xNjRfTUFSSywJUE9SVDE2NF9GTjAsCU1TRUwxQ1JfNl8xKSwKLQlQSU5NVVhfREFUQShJUlE3XzQwX01BUkssCVBPUlQ0MF9GTjAsCU1TRUwxQ1JfN18xKSwKLQlQSU5NVVhfREFUQShJUlE3XzE2N19NQVJLLAlQT1JUMTY3X0ZOMCwJTVNFTDFDUl83XzApLAotCVBJTk1VWF9EQVRBKElSUThfNDFfTUFSSywJUE9SVDQxX0ZOMCwJTVNFTDFDUl84XzEpLAotCVBJTk1VWF9EQVRBKElSUThfMTY4X01BUkssCVBPUlQxNjhfRk4wLAlNU0VMMUNSXzhfMCksCi0JUElOTVVYX0RBVEEoSVJROV80Ml9NQVJLLAlQT1JUNDJfRk4wLAlNU0VMMUNSXzlfMCksCi0JUElOTVVYX0RBVEEoSVJROV8xNjlfTUFSSywJUE9SVDE2OV9GTjAsCU1TRUwxQ1JfOV8xKSwKLQlQSU5NVVhfREFUQShJUlExMF9NQVJLLAkJUE9SVDY1X0ZOMCwJTVNFTDFDUl85XzEpLAotCVBJTk1VWF9EQVRBKElSUTExX01BUkssCQlQT1JUNjdfRk4wKSwKLQlQSU5NVVhfREFUQShJUlExMl84MF9NQVJLLAlQT1JUODBfRk4wLAlNU0VMMUNSXzEyXzApLAotCVBJTk1VWF9EQVRBKElSUTEyXzEzN19NQVJLLAlQT1JUMTM3X0ZOMCwJTVNFTDFDUl8xMl8xKSwKLQlQSU5NVVhfREFUQShJUlExM184MV9NQVJLLAlQT1JUODFfRk4wLAlNU0VMMUNSXzEzXzApLAotCVBJTk1VWF9EQVRBKElSUTEzXzE0NV9NQVJLLAlQT1JUMTQ1X0ZOMCwJTVNFTDFDUl8xM18xKSwKLQlQSU5NVVhfREFUQShJUlExNF84Ml9NQVJLLAlQT1JUODJfRk4wLAlNU0VMMUNSXzE0XzApLAotCVBJTk1VWF9EQVRBKElSUTE0XzE0Nl9NQVJLLAlQT1JUMTQ2X0ZOMCwJTVNFTDFDUl8xNF8xKSwKLQlQSU5NVVhfREFUQShJUlExNV84M19NQVJLLAlQT1JUODNfRk4wLAlNU0VMMUNSXzE1XzApLAotCVBJTk1VWF9EQVRBKElSUTE1XzE0N19NQVJLLAlQT1JUMTQ3X0ZOMCwJTVNFTDFDUl8xNV8xKSwKLQlQSU5NVVhfREFUQShJUlExNl84NF9NQVJLLAlQT1JUODRfRk4wLAlNU0VMMUNSXzE2XzApLAotCVBJTk1VWF9EQVRBKElSUTE2XzE3MF9NQVJLLAlQT1JUMTcwX0ZOMCwJTVNFTDFDUl8xNl8xKSwKLQlQSU5NVVhfREFUQShJUlExN19NQVJLLAkJUE9SVDg1X0ZOMCksCi0JUElOTVVYX0RBVEEoSVJRMThfTUFSSywJCVBPUlQ4Nl9GTjApLAotCVBJTk1VWF9EQVRBKElSUTE5X01BUkssCQlQT1JUODdfRk4wKSwKLQlQSU5NVVhfREFUQShJUlEyMF9NQVJLLAkJUE9SVDkyX0ZOMCksCi0JUElOTVVYX0RBVEEoSVJRMjFfTUFSSywJCVBPUlQ5M19GTjApLAotCVBJTk1VWF9EQVRBKElSUTIyX01BUkssCQlQT1JUOTRfRk4wKSwKLQlQSU5NVVhfREFUQShJUlEyM19NQVJLLAkJUE9SVDk1X0ZOMCksCi0JUElOTVVYX0RBVEEoSVJRMjRfTUFSSywJCVBPUlQxMTJfRk4wKSwKLQlQSU5NVVhfREFUQShJUlEyNV9NQVJLLAkJUE9SVDExOV9GTjApLAotCVBJTk1VWF9EQVRBKElSUTI2XzEyMV9NQVJLLAlQT1JUMTIxX0ZOMCwJTVNFTDFDUl8yNl8xKSwKLQlQSU5NVVhfREFUQShJUlEyNl8xNzJfTUFSSywJUE9SVDE3Ml9GTjAsCU1TRUwxQ1JfMjZfMCksCi0JUElOTVVYX0RBVEEoSVJRMjdfMTIyX01BUkssCVBPUlQxMjJfRk4wLAlNU0VMMUNSXzI3XzEpLAotCVBJTk1VWF9EQVRBKElSUTI3XzE4MF9NQVJLLAlQT1JUMTgwX0ZOMCwJTVNFTDFDUl8yN18wKSwKLQlQSU5NVVhfREFUQShJUlEyOF8xMjNfTUFSSywJUE9SVDEyM19GTjAsCU1TRUwxQ1JfMjhfMSksCi0JUElOTVVYX0RBVEEoSVJRMjhfMTgxX01BUkssCVBPUlQxODFfRk4wLAlNU0VMMUNSXzI4XzApLAotCVBJTk1VWF9EQVRBKElSUTI5XzEyOV9NQVJLLAlQT1JUMTI5X0ZOMCwJTVNFTDFDUl8yOV8xKSwKLQlQSU5NVVhfREFUQShJUlEyOV8xODJfTUFSSywJUE9SVDE4Ml9GTjAsCU1TRUwxQ1JfMjlfMCksCi0JUElOTVVYX0RBVEEoSVJRMzBfMTMwX01BUkssCVBPUlQxMzBfRk4wLAlNU0VMMUNSXzMwXzEpLAotCVBJTk1VWF9EQVRBKElSUTMwXzE4M19NQVJLLAlQT1JUMTgzX0ZOMCwJTVNFTDFDUl8zMF8wKSwKLQlQSU5NVVhfREFUQShJUlEzMV8xMzhfTUFSSywJUE9SVDEzOF9GTjAsCU1TRUwxQ1JfMzFfMSksCi0JUElOTVVYX0RBVEEoSVJRMzFfMTg0X01BUkssCVBPUlQxODRfRk4wLAlNU0VMMUNSXzMxXzApLAotCi0JLyogRnVuY3Rpb24gMSAqLwotCVBJTk1VWF9EQVRBKEJCSUYyX1RTQ0sxX01BUkssCQlQT1JUMF9GTjEpLAotCVBJTk1VWF9EQVRBKEJCSUYyX1RTWU5DMV9NQVJLLAkJUE9SVDFfRk4xKSwKLQlQSU5NVVhfREFUQShCQklGMl9UWEQxX01BUkssCQlQT1JUMl9GTjEpLAotCVBJTk1VWF9EQVRBKEJCSUYyX1JYRF9NQVJLLAkJUE9SVDNfRk4xKSwKLQlQSU5NVVhfREFUQShGU0lBQ0tfTUFSSywJCVBPUlQ0X0ZOMSksCi0JUElOTVVYX0RBVEEoRlNJQUlMUl9NQVJLLAkJUE9SVDVfRk4xKSwKLQlQSU5NVVhfREFUQShGU0lBSUJUX01BUkssCQlQT1JUNl9GTjEpLAotCVBJTk1VWF9EQVRBKEZTSUFJU0xEX01BUkssCQlQT1JUN19GTjEpLAotCVBJTk1VWF9EQVRBKEZTSUFPTUNfTUFSSywJCVBPUlQ4X0ZOMSksCi0JUElOTVVYX0RBVEEoRlNJQU9MUl9NQVJLLAkJUE9SVDlfRk4xKSwKLQlQSU5NVVhfREFUQShGU0lBT0JUX01BUkssCQlQT1JUMTBfRk4xKSwKLQlQSU5NVVhfREFUQShGU0lBT1NMRF9NQVJLLAkJUE9SVDExX0ZOMSksCi0JUElOTVVYX0RBVEEoRk1TT0NLX01BUkssCQlQT1JUMTJfRk4xKSwKLQlQSU5NVVhfREFUQShGTVNPT0xSX01BUkssCQlQT1JUMTNfRk4xKSwKLQlQSU5NVVhfREFUQShGTVNPT0JUX01BUkssCQlQT1JUMTRfRk4xKSwKLQlQSU5NVVhfREFUQShGTVNPU0xEX01BUkssCQlQT1JUMTVfRk4xKSwKLQlQSU5NVVhfREFUQShGTVNPSUxSX01BUkssCQlQT1JUMTZfRk4xKSwKLQlQSU5NVVhfREFUQShGTVNPSUJUX01BUkssCQlQT1JUMTdfRk4xKSwKLQlQSU5NVVhfREFUQShGTVNJU0xEX01BUkssCQlQT1JUMThfRk4xKSwKLQlQSU5NVVhfREFUQShBMF9NQVJLLAkJCVBPUlQxOV9GTjEpLAotCVBJTk1VWF9EQVRBKEExX01BUkssCQkJUE9SVDIwX0ZOMSksCi0JUElOTVVYX0RBVEEoQTJfTUFSSywJCQlQT1JUMjFfRk4xKSwKLQlQSU5NVVhfREFUQShBM19NQVJLLAkJCVBPUlQyMl9GTjEpLAotCVBJTk1VWF9EQVRBKEE0X0ZPRV9NQVJLLAkJUE9SVDIzX0ZOMSksCi0JUElOTVVYX0RBVEEoQTVfRkNERV9NQVJLLAkJUE9SVDI0X0ZOMSksCi0JUElOTVVYX0RBVEEoQTZfTUFSSywJCQlQT1JUMjVfRk4xKSwKLQlQSU5NVVhfREFUQShBN19NQVJLLAkJCVBPUlQyNl9GTjEpLAotCVBJTk1VWF9EQVRBKEE4X01BUkssCQkJUE9SVDI3X0ZOMSksCi0JUElOTVVYX0RBVEEoQTlfTUFSSywJCQlQT1JUMjhfRk4xKSwKLQlQSU5NVVhfREFUQShBMTBfTUFSSywJCQlQT1JUMjlfRk4xKSwKLQlQSU5NVVhfREFUQShBMTFfTUFSSywJCQlQT1JUMzBfRk4xKSwKLQlQSU5NVVhfREFUQShBMTJfTUFSSywJCQlQT1JUMzFfRk4xKSwKLQlQSU5NVVhfREFUQShBMTNfTUFSSywJCQlQT1JUMzJfRk4xKSwKLQlQSU5NVVhfREFUQShBMTRfTUFSSywJCQlQT1JUMzNfRk4xKSwKLQlQSU5NVVhfREFUQShBMTVfTUFSSywJCQlQT1JUMzRfRk4xKSwKLQlQSU5NVVhfREFUQShBMTZfTUFSSywJCQlQT1JUMzVfRk4xKSwKLQlQSU5NVVhfREFUQShBMTdfTUFSSywJCQlQT1JUMzZfRk4xKSwKLQlQSU5NVVhfREFUQShBMThfTUFSSywJCQlQT1JUMzdfRk4xKSwKLQlQSU5NVVhfREFUQShBMTlfTUFSSywJCQlQT1JUMzhfRk4xKSwKLQlQSU5NVVhfREFUQShBMjBfTUFSSywJCQlQT1JUMzlfRk4xKSwKLQlQSU5NVVhfREFUQShBMjFfTUFSSywJCQlQT1JUNDBfRk4xKSwKLQlQSU5NVVhfREFUQShBMjJfTUFSSywJCQlQT1JUNDFfRk4xKSwKLQlQSU5NVVhfREFUQShBMjNfTUFSSywJCQlQT1JUNDJfRk4xKSwKLQlQSU5NVVhfREFUQShBMjRfTUFSSywJCQlQT1JUNDNfRk4xKSwKLQlQSU5NVVhfREFUQShBMjVfTUFSSywJCQlQT1JUNDRfRk4xKSwKLQlQSU5NVVhfREFUQShBMjZfTUFSSywJCQlQT1JUNDVfRk4xKSwKLQlQSU5NVVhfREFUQShEMF9OQUYwX01BUkssCQlQT1JUNDZfRk4xKSwKLQlQSU5NVVhfREFUQShEMV9OQUYxX01BUkssCQlQT1JUNDdfRk4xKSwKLQlQSU5NVVhfREFUQShEMl9OQUYyX01BUkssCQlQT1JUNDhfRk4xKSwKLQlQSU5NVVhfREFUQShEM19OQUYzX01BUkssCQlQT1JUNDlfRk4xKSwKLQlQSU5NVVhfREFUQShENF9OQUY0X01BUkssCQlQT1JUNTBfRk4xKSwKLQlQSU5NVVhfREFUQShENV9OQUY1X01BUkssCQlQT1JUNTFfRk4xKSwKLQlQSU5NVVhfREFUQShENl9OQUY2X01BUkssCQlQT1JUNTJfRk4xKSwKLQlQSU5NVVhfREFUQShEN19OQUY3X01BUkssCQlQT1JUNTNfRk4xKSwKLQlQSU5NVVhfREFUQShEOF9OQUY4X01BUkssCQlQT1JUNTRfRk4xKSwKLQlQSU5NVVhfREFUQShEOV9OQUY5X01BUkssCQlQT1JUNTVfRk4xKSwKLQlQSU5NVVhfREFUQShEMTBfTkFGMTBfTUFSSywJCVBPUlQ1Nl9GTjEpLAotCVBJTk1VWF9EQVRBKEQxMV9OQUYxMV9NQVJLLAkJUE9SVDU3X0ZOMSksCi0JUElOTVVYX0RBVEEoRDEyX05BRjEyX01BUkssCQlQT1JUNThfRk4xKSwKLQlQSU5NVVhfREFUQShEMTNfTkFGMTNfTUFSSywJCVBPUlQ1OV9GTjEpLAotCVBJTk1VWF9EQVRBKEQxNF9OQUYxNF9NQVJLLAkJUE9SVDYwX0ZOMSksCi0JUElOTVVYX0RBVEEoRDE1X05BRjE1X01BUkssCQlQT1JUNjFfRk4xKSwKLQlQSU5NVVhfREFUQShDUzBfTUFSSywJCQlQT1JUNjJfRk4xKSwKLQlQSU5NVVhfREFUQShDUzJfTUFSSywJCQlQT1JUNjNfRk4xKSwKLQlQSU5NVVhfREFUQShDUzRfTUFSSywJCQlQT1JUNjRfRk4xKSwKLQlQSU5NVVhfREFUQShDUzVBX01BUkssCQkJUE9SVDY1X0ZOMSksCi0JUElOTVVYX0RBVEEoQ1M1Ql9NQVJLLAkJCVBPUlQ2Nl9GTjEpLAotCVBJTk1VWF9EQVRBKENTNkFfTUFSSywJCQlQT1JUNjdfRk4xKSwKLQlQSU5NVVhfREFUQShGQ0UwX01BUkssCQkJUE9SVDY4X0ZOMSksCi0JUElOTVVYX0RBVEEoUkRfRlNDX01BUkssCQlQT1JUNjlfRk4xKSwKLQlQSU5NVVhfREFUQShXRTBfRldFX01BUkssCQlQT1JUNzBfRk4xKSwKLQlQSU5NVVhfREFUQShXRTFfTUFSSywJCQlQT1JUNzFfRk4xKSwKLQlQSU5NVVhfREFUQShDS09fTUFSSywJCQlQT1JUNzJfRk4xKSwKLQlQSU5NVVhfREFUQShGUkJfTUFSSywJCQlQT1JUNzNfRk4xKSwKLQlQSU5NVVhfREFUQShXQUlUX01BUkssCQkJUE9SVDc0X0ZOMSksCi0JUElOTVVYX0RBVEEoUkRXUl9NQVJLLAkJCVBPUlQ3NV9GTjEpLAotCVBJTk1VWF9EQVRBKE1FTUNfQUQwX01BUkssCQlQT1JUNzZfRk4xKSwKLQlQSU5NVVhfREFUQShNRU1DX0FEMV9NQVJLLAkJUE9SVDc3X0ZOMSksCi0JUElOTVVYX0RBVEEoTUVNQ19BRDJfTUFSSywJCVBPUlQ3OF9GTjEpLAotCVBJTk1VWF9EQVRBKE1FTUNfQUQzX01BUkssCQlQT1JUNzlfRk4xKSwKLQlQSU5NVVhfREFUQShNRU1DX0FENF9NQVJLLAkJUE9SVDgwX0ZOMSksCi0JUElOTVVYX0RBVEEoTUVNQ19BRDVfTUFSSywJCVBPUlQ4MV9GTjEpLAotCVBJTk1VWF9EQVRBKE1FTUNfQUQ2X01BUkssCQlQT1JUODJfRk4xKSwKLQlQSU5NVVhfREFUQShNRU1DX0FEN19NQVJLLAkJUE9SVDgzX0ZOMSksCi0JUElOTVVYX0RBVEEoTUVNQ19BRDhfTUFSSywJCVBPUlQ4NF9GTjEpLAotCVBJTk1VWF9EQVRBKE1FTUNfQUQ5X01BUkssCQlQT1JUODVfRk4xKSwKLQlQSU5NVVhfREFUQShNRU1DX0FEMTBfTUFSSywJCVBPUlQ4Nl9GTjEpLAotCVBJTk1VWF9EQVRBKE1FTUNfQUQxMV9NQVJLLAkJUE9SVDg3X0ZOMSksCi0JUElOTVVYX0RBVEEoTUVNQ19BRDEyX01BUkssCQlQT1JUODhfRk4xKSwKLQlQSU5NVVhfREFUQShNRU1DX0FEMTNfTUFSSywJCVBPUlQ4OV9GTjEpLAotCVBJTk1VWF9EQVRBKE1FTUNfQUQxNF9NQVJLLAkJUE9SVDkwX0ZOMSksCi0JUElOTVVYX0RBVEEoTUVNQ19BRDE1X01BUkssCQlQT1JUOTFfRk4xKSwKLQlQSU5NVVhfREFUQShNRU1DX0NTMF9NQVJLLAkJUE9SVDkyX0ZOMSksCi0JUElOTVVYX0RBVEEoTUVNQ19CVVNDTEtfTUVNQ19BMF9NQVJLLAlQT1JUOTNfRk4xKSwKLQlQSU5NVVhfREFUQShNRU1DX0NTMV9NRU1DX0ExX01BUkssCVBPUlQ5NF9GTjEpLAotCVBJTk1VWF9EQVRBKE1FTUNfQURWX01FTUNfRFJFUTBfTUFSSywJUE9SVDk1X0ZOMSksCi0JUElOTVVYX0RBVEEoTUVNQ19XQUlUX01FTUNfRFJFUTFfTUFSSywJUE9SVDk2X0ZOMSksCi0JUElOTVVYX0RBVEEoTUVNQ19OT0VfTUFSSywJCVBPUlQ5N19GTjEpLAotCVBJTk1VWF9EQVRBKE1FTUNfTldFX01BUkssCQlQT1JUOThfRk4xKSwKLQlQSU5NVVhfREFUQShNRU1DX0lOVF9NQVJLLAkJUE9SVDk5X0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX1ZEX01BUkssCQlQT1JUMTAwX0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX0hEX01BUkssCQlQT1JUMTAxX0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX0QwX01BUkssCQlQT1JUMTAyX0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX0QxX01BUkssCQlQT1JUMTAzX0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX0QyX01BUkssCQlQT1JUMTA0X0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX0QzX01BUkssCQlQT1JUMTA1X0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX0Q0X01BUkssCQlQT1JUMTA2X0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX0Q1X01BUkssCQlQT1JUMTA3X0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX0Q2X01BUkssCQlQT1JUMTA4X0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX0Q3X01BUkssCQlQT1JUMTA5X0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX0Q4X01BUkssCQlQT1JUMTEwX0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX0Q5X01BUkssCQlQT1JUMTExX0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX0QxMF9NQVJLLAkJUE9SVDExMl9GTjEpLAotCVBJTk1VWF9EQVRBKFZJT19EMTFfTUFSSywJCVBPUlQxMTNfRk4xKSwKLQlQSU5NVVhfREFUQShWSU9fRDEyX01BUkssCQlQT1JUMTE0X0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX0QxM19NQVJLLAkJUE9SVDExNV9GTjEpLAotCVBJTk1VWF9EQVRBKFZJT19EMTRfTUFSSywJCVBPUlQxMTZfRk4xKSwKLQlQSU5NVVhfREFUQShWSU9fRDE1X01BUkssCQlQT1JUMTE3X0ZOMSksCi0JUElOTVVYX0RBVEEoVklPX0NMS19NQVJLLAkJUE9SVDExOF9GTjEpLAotCVBJTk1VWF9EQVRBKFZJT19GSUVMRF9NQVJLLAkJUE9SVDExOV9GTjEpLAotCVBJTk1VWF9EQVRBKFZJT19DS09fTUFSSywJCVBPUlQxMjBfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMF9NQVJLLAkJCVBPUlQxMjFfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMV9NQVJLLAkJCVBPUlQxMjJfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMl9NQVJLLAkJCVBPUlQxMjNfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REM19NQVJLLAkJCVBPUlQxMjRfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0RENF9NQVJLLAkJCVBPUlQxMjVfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0RENV9NQVJLLAkJCVBPUlQxMjZfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0RENl9NQVJLLAkJCVBPUlQxMjdfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REN19NQVJLLAkJCVBPUlQxMjhfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REOF9NQVJLLAkJCVBPUlQxMjlfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REOV9NQVJLLAkJCVBPUlQxMzBfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMTBfTUFSSywJCVBPUlQxMzFfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMTFfTUFSSywJCVBPUlQxMzJfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMTJfTUFSSywJCVBPUlQxMzNfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMTNfTUFSSywJCVBPUlQxMzRfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMTRfTUFSSywJCVBPUlQxMzVfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMTVfTUFSSywJCVBPUlQxMzZfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMTZfTUFSSywJCVBPUlQxMzdfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMTdfTUFSSywJCVBPUlQxMzhfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMThfTUFSSywJCVBPUlQxMzlfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMTlfTUFSSywJCVBPUlQxNDBfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMjBfTUFSSywJCVBPUlQxNDFfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMjFfTUFSSywJCVBPUlQxNDJfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMjJfTUFSSywJCVBPUlQxNDNfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0REMjNfTUFSSywJCVBPUlQxNDRfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0RIU1lOX01BUkssCQlQT1JUMTQ1X0ZOMSksCi0JUElOTVVYX0RBVEEoTENEVlNZTl9NQVJLLAkJUE9SVDE0Nl9GTjEpLAotCVBJTk1VWF9EQVRBKExDRERDS19NQVJLLAkJUE9SVDE0N19GTjEpLAotCVBJTk1VWF9EQVRBKExDRFJEX01BUkssCQkJUE9SVDE0OF9GTjEpLAotCVBJTk1VWF9EQVRBKExDRERJU1BfTUFSSywJCVBPUlQxNDlfRk4xKSwKLQlQSU5NVVhfREFUQShMQ0RMQ0xLX01BUkssCQlQT1JUMTUwX0ZOMSksCi0JUElOTVVYX0RBVEEoTENERE9OX01BUkssCQlQT1JUMTUxX0ZOMSksCi0JUElOTVVYX0RBVEEoU0NJRkEwX1RYRF9NQVJLLAkJUE9SVDE1Ml9GTjEpLAotCVBJTk1VWF9EQVRBKFNDSUZBMF9SWERfTUFSSywJCVBPUlQxNTNfRk4xKSwKLQlQSU5NVVhfREFUQShTQ0lGQTFfVFhEX01BUkssCQlQT1JUMTU0X0ZOMSksCi0JUElOTVVYX0RBVEEoU0NJRkExX1JYRF9NQVJLLAkJUE9SVDE1NV9GTjEpLAotCVBJTk1VWF9EQVRBKFRTX1NQU1lOQzFfTUFSSywJCVBPUlQxNTZfRk4xKSwKLQlQSU5NVVhfREFUQShUU19TREFUMV9NQVJLLAkJUE9SVDE1N19GTjEpLAotCVBJTk1VWF9EQVRBKFRTX1NERU4xX01BUkssCQlQT1JUMTU4X0ZOMSksCi0JUElOTVVYX0RBVEEoVFNfU0NLMV9NQVJLLAkJUE9SVDE1OV9GTjEpLAotCVBJTk1VWF9EQVRBKFRQVTBUTzBfTUFSSywJCVBPUlQxNjBfRk4xKSwKLQlQSU5NVVhfREFUQShUUFUwVE8xX01BUkssCQlQT1JUMTYxX0ZOMSksCi0JUElOTVVYX0RBVEEoU0NJRkJfU0NLX01BUkssCQlQT1JUMTYyX0ZOMSksCi0JUElOTVVYX0RBVEEoU0NJRkJfUlRTX01BUkssCQlQT1JUMTYzX0ZOMSksCi0JUElOTVVYX0RBVEEoU0NJRkJfQ1RTX01BUkssCQlQT1JUMTY0X0ZOMSksCi0JUElOTVVYX0RBVEEoU0NJRkJfVFhEX01BUkssCQlQT1JUMTY1X0ZOMSksCi0JUElOTVVYX0RBVEEoU0NJRkJfUlhEX01BUkssCQlQT1JUMTY2X0ZOMSksCi0JUElOTVVYX0RBVEEoVkJVUzBfMF9NQVJLLAkJUE9SVDE2N19GTjEpLAotCVBJTk1VWF9EQVRBKFZCVVMwXzFfTUFSSywJCVBPUlQxNjhfRk4xKSwKLQlQSU5NVVhfREFUQShIRE1JX0hQRF9NQVJLLAkJUE9SVDE2OV9GTjEpLAotCVBJTk1VWF9EQVRBKEhETUlfQ0VDX01BUkssCQlQT1JUMTcwX0ZOMSksCi0JUElOTVVYX0RBVEEoU0RISUNMSzBfTUFSSywJCVBPUlQxNzFfRk4xKSwKLQlQSU5NVVhfREFUQShTREhJQ0QwX01BUkssCQlQT1JUMTcyX0ZOMSksCi0JUElOTVVYX0RBVEEoU0RISUQwXzBfTUFSSywJCVBPUlQxNzNfRk4xKSwKLQlQSU5NVVhfREFUQShTREhJRDBfMV9NQVJLLAkJUE9SVDE3NF9GTjEpLAotCVBJTk1VWF9EQVRBKFNESElEMF8yX01BUkssCQlQT1JUMTc1X0ZOMSksCi0JUElOTVVYX0RBVEEoU0RISUQwXzNfTUFSSywJCVBPUlQxNzZfRk4xKSwKLQlQSU5NVVhfREFUQShTREhJQ01EMF9NQVJLLAkJUE9SVDE3N19GTjEpLAotCVBJTk1VWF9EQVRBKFNESElXUDBfTUFSSywJCVBPUlQxNzhfRk4xKSwKLQlQSU5NVVhfREFUQShTREhJQ0xLMV9NQVJLLAkJUE9SVDE3OV9GTjEpLAotCVBJTk1VWF9EQVRBKFNESElEMV8wX01BUkssCQlQT1JUMTgwX0ZOMSksCi0JUElOTVVYX0RBVEEoU0RISUQxXzFfTUFSSywJCVBPUlQxODFfRk4xKSwKLQlQSU5NVVhfREFUQShTREhJRDFfMl9NQVJLLAkJUE9SVDE4Ml9GTjEpLAotCVBJTk1VWF9EQVRBKFNESElEMV8zX01BUkssCQlQT1JUMTgzX0ZOMSksCi0JUElOTVVYX0RBVEEoU0RISUNNRDFfTUFSSywJCVBPUlQxODRfRk4xKSwKLQlQSU5NVVhfREFUQShTREhJQ0xLMl9NQVJLLAkJUE9SVDE4NV9GTjEpLAotCVBJTk1VWF9EQVRBKFNESElEMl8wX01BUkssCQlQT1JUMTg2X0ZOMSksCi0JUElOTVVYX0RBVEEoU0RISUQyXzFfTUFSSywJCVBPUlQxODdfRk4xKSwKLQlQSU5NVVhfREFUQShTREhJRDJfMl9NQVJLLAkJUE9SVDE4OF9GTjEpLAotCVBJTk1VWF9EQVRBKFNESElEMl8zX01BUkssCQlQT1JUMTg5X0ZOMSksCi0JUElOTVVYX0RBVEEoU0RISUNNRDJfTUFSSywJCVBPUlQxOTBfRk4xKSwKLQotCS8qIEZ1bmN0aW9uIDIgKi8KLQlQSU5NVVhfREFUQShGU0lCQ0tfTUFSSywJCVBPUlQ0X0ZOMiksCi0JUElOTVVYX0RBVEEoU0NJRkE0X1JYRF9NQVJLLAkJUE9SVDVfRk4yKSwKLQlQSU5NVVhfREFUQShTQ0lGQTRfVFhEX01BUkssCQlQT1JUNl9GTjIpLAotCVBJTk1VWF9EQVRBKFNDSUZBNV9SWERfTUFSSywJCVBPUlQ4X0ZOMiksCi0JUElOTVVYX0RBVEEoRlNJQVNQRElGXzExX01BUkssCQlQT1JUMTFfRk4yKSwKLQlQSU5NVVhfREFUQShTQ0lGQTVfVFhEX01BUkssCQlQT1JUMTJfRk4yKSwKLQlQSU5NVVhfREFUQShGTVNJT0xSX01BUkssCQlQT1JUMTNfRk4yKSwKLQlQSU5NVVhfREFUQShGTVNJT0JUX01BUkssCQlQT1JUMTRfRk4yKSwKLQlQSU5NVVhfREFUQShGU0lBU1BESUZfMTVfTUFSSywJCVBPUlQxNV9GTjIpLAotCVBJTk1VWF9EQVRBKEZNU0lJTFJfTUFSSywJCVBPUlQxNl9GTjIpLAotCVBJTk1VWF9EQVRBKEZNU0lJQlRfTUFSSywJCVBPUlQxN19GTjIpLAotCVBJTk1VWF9EQVRBKEJTX01BUkssCQkJUE9SVDE5X0ZOMiksCi0JUElOTVVYX0RBVEEoTVNJT0YwX1RTWU5DX01BUkssCQlQT1JUMzZfRk4yKSwKLQlQSU5NVVhfREFUQShNU0lPRjBfVFNDS19NQVJLLAkJUE9SVDM3X0ZOMiksCi0JUElOTVVYX0RBVEEoTVNJT0YwX1JYRF9NQVJLLAkJUE9SVDM4X0ZOMiksCi0JUElOTVVYX0RBVEEoTVNJT0YwX1JTQ0tfTUFSSywJCVBPUlQzOV9GTjIpLAotCVBJTk1VWF9EQVRBKE1TSU9GMF9SU1lOQ19NQVJLLAkJUE9SVDQwX0ZOMiksCi0JUElOTVVYX0RBVEEoTVNJT0YwX01DSzBfTUFSSywJCVBPUlQ0MV9GTjIpLAotCVBJTk1VWF9EQVRBKE1TSU9GMF9NQ0sxX01BUkssCQlQT1JUNDJfRk4yKSwKLQlQSU5NVVhfREFUQShNU0lPRjBfU1MxX01BUkssCQlQT1JUNDNfRk4yKSwKLQlQSU5NVVhfREFUQShNU0lPRjBfU1MyX01BUkssCQlQT1JUNDRfRk4yKSwKLQlQSU5NVVhfREFUQShNU0lPRjBfVFhEX01BUkssCQlQT1JUNDVfRk4yKSwKLQlQSU5NVVhfREFUQShGTVNJQ0tfTUFSSywJCVBPUlQ2NV9GTjIpLAotCVBJTk1VWF9EQVRBKEZDRTFfTUFSSywJCQlQT1JUNjZfRk4yKSwKLQlQSU5NVVhfREFUQShCQklGMV9SWERfTUFSSywJCVBPUlQ3Nl9GTjIpLAotCVBJTk1VWF9EQVRBKEJCSUYxX1RTWU5DX01BUkssCQlQT1JUNzdfRk4yKSwKLQlQSU5NVVhfREFUQShCQklGMV9UU0NLX01BUkssCQlQT1JUNzhfRk4yKSwKLQlQSU5NVVhfREFUQShCQklGMV9UWERfTUFSSywJCVBPUlQ3OV9GTjIpLAotCVBJTk1VWF9EQVRBKEJCSUYxX1JTQ0tfTUFSSywJCVBPUlQ4MF9GTjIpLAotCVBJTk1VWF9EQVRBKEJCSUYxX1JTWU5DX01BUkssCQlQT1JUODFfRk4yKSwKLQlQSU5NVVhfREFUQShCQklGMV9GTE9XX01BUkssCQlQT1JUODJfRk4yKSwKLQlQSU5NVVhfREFUQShCQl9SWF9GTE9XX05fTUFSSywJCVBPUlQ4M19GTjIpLAotCVBJTk1VWF9EQVRBKE1TSU9GMV9SU0NLX01BUkssCQlQT1JUODRfRk4yKSwKLQlQSU5NVVhfREFUQShNU0lPRjFfUlNZTkNfTUFSSywJCVBPUlQ4NV9GTjIpLAotCVBJTk1VWF9EQVRBKE1TSU9GMV9NQ0swX01BUkssCQlQT1JUODZfRk4yKSwKLQlQSU5NVVhfREFUQShNU0lPRjFfTUNLMV9NQVJLLAkJUE9SVDg3X0ZOMiksCi0JUElOTVVYX0RBVEEoTVNJT0YxX1RTQ0tfODhfTUFSSywJUE9SVDg4X0ZOMiwgTVNFTDRDUl8xMF8xKSwKLQlQSU5NVVhfREFUQShNU0lPRjFfVFNZTkNfODlfTUFSSywJUE9SVDg5X0ZOMiwgTVNFTDRDUl8xMF8xKSwKLQlQSU5NVVhfREFUQShNU0lPRjFfVFhEXzkwX01BUkssCQlQT1JUOTBfRk4yLCBNU0VMNENSXzEwXzEpLAotCVBJTk1VWF9EQVRBKE1TSU9GMV9SWERfOTFfTUFSSywJCVBPUlQ5MV9GTjIsIE1TRUw0Q1JfMTBfMSksCi0JUElOTVVYX0RBVEEoTVNJT0YxX1NTMV85Ml9NQVJLLAkJUE9SVDkyX0ZOMiwgTVNFTDRDUl8xMF8xKSwKLQlQSU5NVVhfREFUQShNU0lPRjFfU1MyXzkzX01BUkssCQlQT1JUOTNfRk4yLCBNU0VMNENSXzEwXzEpLAotCVBJTk1VWF9EQVRBKFNDSUZBMl9DVFMxX01BUkssCQlQT1JUOTRfRk4yKSwKLQlQSU5NVVhfREFUQShTQ0lGQTJfUlRTMV9NQVJLLAkJUE9SVDk1X0ZOMiksCi0JUElOTVVYX0RBVEEoU0NJRkEyX1RYRDFfTUFSSywJCVBPUlQ5Nl9GTjIpLAotCVBJTk1VWF9EQVRBKFNDSUZBMl9SWEQxX01BUkssCQlQT1JUOTdfRk4yKSwKLQlQSU5NVVhfREFUQShTQ0lGQTJfU0NLMV9NQVJLLAkJUE9SVDk4X0ZOMiksCi0JUElOTVVYX0RBVEEoSTJDX1NDTDJfTUFSSywJCVBPUlQxMTBfRk4yKSwKLQlQSU5NVVhfREFUQShJMkNfU0RBMl9NQVJLLAkJUE9SVDExMV9GTjIpLAotCVBJTk1VWF9EQVRBKEkyQ19TQ0wzX01BUkssCQlQT1JUMTE0X0ZOMiwgTVNFTDRDUl8xNl8xKSwKLQlQSU5NVVhfREFUQShJMkNfU0RBM19NQVJLLAkJUE9SVDExNV9GTjIsIE1TRUw0Q1JfMTZfMSksCi0JUElOTVVYX0RBVEEoSTJDX1NDTDRfTUFSSywJCVBPUlQxMTZfRk4yLCBNU0VMNENSXzE3XzEpLAotCVBJTk1VWF9EQVRBKEkyQ19TREE0X01BUkssCQlQT1JUMTE3X0ZOMiwgTVNFTDRDUl8xN18xKSwKLQlQSU5NVVhfREFUQShNU0lPRjJfUlNDS19NQVJLLAkJUE9SVDEzNF9GTjIpLAotCVBJTk1VWF9EQVRBKE1TSU9GMl9SU1lOQ19NQVJLLAkJUE9SVDEzNV9GTjIpLAotCVBJTk1VWF9EQVRBKE1TSU9GMl9NQ0swX01BUkssCQlQT1JUMTM2X0ZOMiksCi0JUElOTVVYX0RBVEEoTVNJT0YyX01DSzFfTUFSSywJCVBPUlQxMzdfRk4yKSwKLQlQSU5NVVhfREFUQShNU0lPRjJfU1MxX01BUkssCQlQT1JUMTM4X0ZOMiksCi0JUElOTVVYX0RBVEEoTVNJT0YyX1NTMl9NQVJLLAkJUE9SVDEzOV9GTjIpLAotCVBJTk1VWF9EQVRBKFNDSUZBM19DVFNfMTQwX01BUkssCVBPUlQxNDBfRk4yLCBNU0VMM0NSXzlfMSksCi0JUElOTVVYX0RBVEEoU0NJRkEzX1JUU18xNDFfTUFSSywJUE9SVDE0MV9GTjIpLAotCVBJTk1VWF9EQVRBKFNDSUZBM19TQ0tfTUFSSywJCVBPUlQxNDJfRk4yKSwKLQlQSU5NVVhfREFUQShTQ0lGQTNfVFhEX01BUkssCQlQT1JUMTQzX0ZOMiksCi0JUElOTVVYX0RBVEEoU0NJRkEzX1JYRF9NQVJLLAkJUE9SVDE0NF9GTjIpLAotCVBJTk1VWF9EQVRBKE1TSU9GMl9UU1lOQ19NQVJLLAkJUE9SVDE0OF9GTjIpLAotCVBJTk1VWF9EQVRBKE1TSU9GMl9UU0NLX01BUkssCQlQT1JUMTQ5X0ZOMiksCi0JUElOTVVYX0RBVEEoTVNJT0YyX1JYRF9NQVJLLAkJUE9SVDE1MF9GTjIpLAotCVBJTk1VWF9EQVRBKE1TSU9GMl9UWERfTUFSSywJCVBPUlQxNTFfRk4yKSwKLQlQSU5NVVhfREFUQShTQ0lGQTBfU0NLX01BUkssCQlQT1JUMTU2X0ZOMiksCi0JUElOTVVYX0RBVEEoU0NJRkEwX1JUU19NQVJLLAkJUE9SVDE1N19GTjIpLAotCVBJTk1VWF9EQVRBKFNDSUZBMF9DVFNfTUFSSywJCVBPUlQxNThfRk4yKSwKLQlQSU5NVVhfREFUQShTQ0lGQTFfU0NLX01BUkssCQlQT1JUMTU5X0ZOMiksCi0JUElOTVVYX0RBVEEoU0NJRkExX1JUU19NQVJLLAkJUE9SVDE2MF9GTjIpLAotCVBJTk1VWF9EQVRBKFNDSUZBMV9DVFNfTUFSSywJCVBPUlQxNjFfRk4yKSwKLQotCS8qIEZ1bmN0aW9uIDMgKi8KLQlQSU5NVVhfREFUQShWSU9fQ0tPMV9NQVJLLAkJUE9SVDE2X0ZOMyksCi0JUElOTVVYX0RBVEEoVklPX0NLTzJfTUFSSywJCVBPUlQxN19GTjMpLAotCVBJTk1VWF9EQVRBKElESU5fMV8xOF9NQVJLLAkJUE9SVDE4X0ZOMywgTVNFTDRDUl8xNF8xKSwKLQlQSU5NVVhfREFUQShNU0lPRjFfVFNDS18zOV9NQVJLLAlQT1JUMzlfRk4zLCBNU0VMNENSXzEwXzApLAotCVBJTk1VWF9EQVRBKE1TSU9GMV9UU1lOQ180MF9NQVJLLAlQT1JUNDBfRk4zLCBNU0VMNENSXzEwXzApLAotCVBJTk1VWF9EQVRBKE1TSU9GMV9UWERfNDFfTUFSSywJCVBPUlQ0MV9GTjMsIE1TRUw0Q1JfMTBfMCksCi0JUElOTVVYX0RBVEEoTVNJT0YxX1JYRF80Ml9NQVJLLAkJUE9SVDQyX0ZOMywgTVNFTDRDUl8xMF8wKSwKLQlQSU5NVVhfREFUQShNU0lPRjFfU1MxXzQzX01BUkssCQlQT1JUNDNfRk4zLCBNU0VMNENSXzEwXzApLAotCVBJTk1VWF9EQVRBKE1TSU9GMV9TUzJfNDRfTUFSSywJCVBPUlQ0NF9GTjMsIE1TRUw0Q1JfMTBfMCksCi0JUElOTVVYX0RBVEEoTU1DRDFfMF9NQVJLLAkJUE9SVDU0X0ZOMywgTVNFTDRDUl8xNV8xKSwKLQlQSU5NVVhfREFUQShNTUNEMV8xX01BUkssCQlQT1JUNTVfRk4zLCBNU0VMNENSXzE1XzEpLAotCVBJTk1VWF9EQVRBKE1NQ0QxXzJfTUFSSywJCVBPUlQ1Nl9GTjMsIE1TRUw0Q1JfMTVfMSksCi0JUElOTVVYX0RBVEEoTU1DRDFfM19NQVJLLAkJUE9SVDU3X0ZOMywgTVNFTDRDUl8xNV8xKSwKLQlQSU5NVVhfREFUQShNTUNEMV80X01BUkssCQlQT1JUNThfRk4zLCBNU0VMNENSXzE1XzEpLAotCVBJTk1VWF9EQVRBKE1NQ0QxXzVfTUFSSywJCVBPUlQ1OV9GTjMsIE1TRUw0Q1JfMTVfMSksCi0JUElOTVVYX0RBVEEoTU1DRDFfNl9NQVJLLAkJUE9SVDYwX0ZOMywgTVNFTDRDUl8xNV8xKSwKLQlQSU5NVVhfREFUQShNTUNEMV83X01BUkssCQlQT1JUNjFfRk4zLCBNU0VMNENSXzE1XzEpLAotCVBJTk1VWF9EQVRBKFZJTlRfSV9NQVJLLAkJUE9SVDY1X0ZOMyksCi0JUElOTVVYX0RBVEEoTU1DQ0xLMV9NQVJLLAkJUE9SVDY2X0ZOMywgTVNFTDRDUl8xNV8xKSwKLQlQSU5NVVhfREFUQShNTUNDTUQxX01BUkssCQlQT1JUNjdfRk4zLCBNU0VMNENSXzE1XzEpLAotCVBJTk1VWF9EQVRBKFRQVTBUTzJfOTNfTUFSSywJCVBPUlQ5M19GTjMpLAotCVBJTk1VWF9EQVRBKFRQVTBUTzJfOTlfTUFSSywJCVBPUlQ5OV9GTjMpLAotCVBJTk1VWF9EQVRBKFRQVTBUTzNfTUFSSywJCVBPUlQxMTJfRk4zKSwKLQlQSU5NVVhfREFUQShJRElOXzBfTUFSSywJCVBPUlQxMTNfRk4zKSwKLQlQSU5NVVhfREFUQShFWFRMUF8wX01BUkssCQlQT1JUMTE0X0ZOMyksCi0JUElOTVVYX0RBVEEoT1ZDTjJfMF9NQVJLLAkJUE9SVDExNV9GTjMpLAotCVBJTk1VWF9EQVRBKFBXRU5fMF9NQVJLLAkJUE9SVDExNl9GTjMpLAotCVBJTk1VWF9EQVRBKE9WQ05fMF9NQVJLLAkJUE9SVDExN19GTjMpLAotCVBJTk1VWF9EQVRBKEtFWU9VVDdfTUFSSywJCVBPUlQxMjFfRk4zKSwKLQlQSU5NVVhfREFUQShLRVlPVVQ2X01BUkssCQlQT1JUMTIyX0ZOMyksCi0JUElOTVVYX0RBVEEoS0VZT1VUNV9NQVJLLAkJUE9SVDEyM19GTjMpLAotCVBJTk1VWF9EQVRBKEtFWU9VVDRfTUFSSywJCVBPUlQxMjRfRk4zKSwKLQlQSU5NVVhfREFUQShLRVlPVVQzX01BUkssCQlQT1JUMTI1X0ZOMyksCi0JUElOTVVYX0RBVEEoS0VZT1VUMl9NQVJLLAkJUE9SVDEyNl9GTjMpLAotCVBJTk1VWF9EQVRBKEtFWU9VVDFfTUFSSywJCVBPUlQxMjdfRk4zKSwKLQlQSU5NVVhfREFUQShLRVlPVVQwX01BUkssCQlQT1JUMTI4X0ZOMyksCi0JUElOTVVYX0RBVEEoS0VZSU43X01BUkssCQlQT1JUMTI5X0ZOMyksCi0JUElOTVVYX0RBVEEoS0VZSU42X01BUkssCQlQT1JUMTMwX0ZOMyksCi0JUElOTVVYX0RBVEEoS0VZSU41X01BUkssCQlQT1JUMTMxX0ZOMyksCi0JUElOTVVYX0RBVEEoS0VZSU40X01BUkssCQlQT1JUMTMyX0ZOMyksCi0JUElOTVVYX0RBVEEoS0VZSU4zXzEzM19NQVJLLAkJUE9SVDEzM19GTjMsIE1TRUw0Q1JfMThfMCksCi0JUElOTVVYX0RBVEEoS0VZSU4yXzEzNF9NQVJLLAkJUE9SVDEzNF9GTjMsIE1TRUw0Q1JfMThfMCksCi0JUElOTVVYX0RBVEEoS0VZSU4xXzEzNV9NQVJLLAkJUE9SVDEzNV9GTjMsIE1TRUw0Q1JfMThfMCksCi0JUElOTVVYX0RBVEEoS0VZSU4wXzEzNl9NQVJLLAkJUE9SVDEzNl9GTjMsIE1TRUw0Q1JfMThfMCksCi0JUElOTVVYX0RBVEEoVFNfU1BTWU5DMl9NQVJLLAkJUE9SVDEzN19GTjMpLAotCVBJTk1VWF9EQVRBKElST1VUXzEzOV9NQVJLLAkJUE9SVDEzOV9GTjMpLAotCVBJTk1VWF9EQVRBKElSREFfT1VUX01BUkssCQlQT1JUMTQwX0ZOMyksCi0JUElOTVVYX0RBVEEoSVJEQV9JTl9NQVJLLAkJUE9SVDE0MV9GTjMpLAotCVBJTk1VWF9EQVRBKElSREFfRklSU0VMX01BUkssCQlQT1JUMTQyX0ZOMyksCi0JUElOTVVYX0RBVEEoVFNfU0RBVDJfTUFSSywJCVBPUlQxNDVfRk4zKSwKLQlQSU5NVVhfREFUQShUU19TREVOMl9NQVJLLAkJUE9SVDE0Nl9GTjMpLAotCVBJTk1VWF9EQVRBKFRTX1NDSzJfTUFSSywJCVBPUlQxNDdfRk4zKSwKLQotCS8qIEZ1bmN0aW9uIDQgKi8KLQlQSU5NVVhfREFUQShTQ0lGQTNfQ1RTXzQzX01BUkssCVBPUlQ0M19GTjQsIE1TRUwzQ1JfOV8wKSwKLQlQSU5NVVhfREFUQShTQ0lGQTNfUlRTXzQ0X01BUkssCVBPUlQ0NF9GTjQpLAotCVBJTk1VWF9EQVRBKEdQX1JYX0ZMQUdfTUFSSywJUE9SVDc2X0ZONCksCi0JUElOTVVYX0RBVEEoR1BfUlhfREFUQV9NQVJLLAlQT1JUNzdfRk40KSwKLQlQSU5NVVhfREFUQShHUF9UWF9SRUFEWV9NQVJLLAlQT1JUNzhfRk40KSwKLQlQSU5NVVhfREFUQShHUF9SWF9XQUtFX01BUkssCVBPUlQ3OV9GTjQpLAotCVBJTk1VWF9EQVRBKE1QX1RYX0ZMQUdfTUFSSywJUE9SVDgwX0ZONCksCi0JUElOTVVYX0RBVEEoTVBfVFhfREFUQV9NQVJLLAlQT1JUODFfRk40KSwKLQlQSU5NVVhfREFUQShNUF9SWF9SRUFEWV9NQVJLLAlQT1JUODJfRk40KSwKLQlQSU5NVVhfREFUQShNUF9UWF9XQUtFX01BUkssCVBPUlQ4M19GTjQpLAotCVBJTk1VWF9EQVRBKE1NQ0QwXzBfTUFSSywJUE9SVDg0X0ZONCwgTVNFTDRDUl8xNV8wKSwKLQlQSU5NVVhfREFUQShNTUNEMF8xX01BUkssCVBPUlQ4NV9GTjQsIE1TRUw0Q1JfMTVfMCksCi0JUElOTVVYX0RBVEEoTU1DRDBfMl9NQVJLLAlQT1JUODZfRk40LCBNU0VMNENSXzE1XzApLAotCVBJTk1VWF9EQVRBKE1NQ0QwXzNfTUFSSywJUE9SVDg3X0ZONCwgTVNFTDRDUl8xNV8wKSwKLQlQSU5NVVhfREFUQShNTUNEMF80X01BUkssCVBPUlQ4OF9GTjQsIE1TRUw0Q1JfMTVfMCksCi0JUElOTVVYX0RBVEEoTU1DRDBfNV9NQVJLLAlQT1JUODlfRk40LCBNU0VMNENSXzE1XzApLAotCVBJTk1VWF9EQVRBKE1NQ0QwXzZfTUFSSywJUE9SVDkwX0ZONCwgTVNFTDRDUl8xNV8wKSwKLQlQSU5NVVhfREFUQShNTUNEMF83X01BUkssCVBPUlQ5MV9GTjQsIE1TRUw0Q1JfMTVfMCksCi0JUElOTVVYX0RBVEEoTU1DQ01EMF9NQVJLLAlQT1JUOTJfRk40LCBNU0VMNENSXzE1XzApLAotCVBJTk1VWF9EQVRBKFNJTV9SU1RfTUFSSywJUE9SVDk0X0ZONCksCi0JUElOTVVYX0RBVEEoU0lNX0NMS19NQVJLLAlQT1JUOTVfRk40KSwKLQlQSU5NVVhfREFUQShTSU1fRF9NQVJLLAkJUE9SVDk4X0ZONCksCi0JUElOTVVYX0RBVEEoTU1DQ0xLMF9NQVJLLAlQT1JUOTlfRk40LCBNU0VMNENSXzE1XzApLAotCVBJTk1VWF9EQVRBKElESU5fMV8xMTNfTUFSSywJUE9SVDExM19GTjQsIE1TRUw0Q1JfMTRfMCksCi0JUElOTVVYX0RBVEEoT1ZDTl8xXzExNF9NQVJLLAlQT1JUMTE0X0ZONCwgTVNFTDRDUl8xNF8wKSwKLQlQSU5NVVhfREFUQShQV0VOXzFfMTE1X01BUkssCVBPUlQxMTVfRk40KSwKLQlQSU5NVVhfREFUQShFWFRMUF8xX01BUkssCVBPUlQxMTZfRk40KSwKLQlQSU5NVVhfREFUQShPVkNOMl8xX01BUkssCVBPUlQxMTdfRk40KSwKLQlQSU5NVVhfREFUQShLRVlJTjBfMTIxX01BUkssCVBPUlQxMjFfRk40LCBNU0VMNENSXzE4XzEpLAotCVBJTk1VWF9EQVRBKEtFWUlOMV8xMjJfTUFSSywJUE9SVDEyMl9GTjQsIE1TRUw0Q1JfMThfMSksCi0JUElOTVVYX0RBVEEoS0VZSU4yXzEyM19NQVJLLAlQT1JUMTIzX0ZONCwgTVNFTDRDUl8xOF8xKSwKLQlQSU5NVVhfREFUQShLRVlJTjNfMTI0X01BUkssCVBPUlQxMjRfRk40LCBNU0VMNENSXzE4XzEpLAotCVBJTk1VWF9EQVRBKFBXRU5fMV8xMzhfTUFSSywJUE9SVDEzOF9GTjQpLAotCVBJTk1VWF9EQVRBKElST1VUXzE0MF9NQVJLLAlQT1JUMTQwX0ZONCksCi0JUElOTVVYX0RBVEEoTENEQ1NfTUFSSywJCVBPUlQxNDVfRk40KSwKLQlQSU5NVVhfREFUQShMQ0RXUl9NQVJLLAkJUE9SVDE0N19GTjQpLAotCVBJTk1VWF9EQVRBKExDRFJTX01BUkssCQlQT1JUMTQ5X0ZONCksCi0JUElOTVVYX0RBVEEoT1ZDTl8xXzE2Ml9NQVJLLAlQT1JUMTYyX0ZONCwgTVNFTDRDUl8xNF8xKSwKLQotCS8qIEZ1bmN0aW9uIDUgKi8KLQlQSU5NVVhfREFUQShHUEkwX01BUkssCQlQT1JUNDFfRk41KSwKLQlQSU5NVVhfREFUQShHUEkxX01BUkssCQlQT1JUNDJfRk41KSwKLQlQSU5NVVhfREFUQShHUE8wX01BUkssCQlQT1JUNDNfRk41KSwKLQlQSU5NVVhfREFUQShHUE8xX01BUkssCQlQT1JUNDRfRk41KSwKLQlQSU5NVVhfREFUQShJMkNfU0NMM1NfTUFSSywJUE9SVDEzN19GTjUsIE1TRUw0Q1JfMTZfMCksCi0JUElOTVVYX0RBVEEoSTJDX1NEQTNTX01BUkssCVBPUlQxNDVfRk41LCBNU0VMNENSXzE2XzApLAotCVBJTk1VWF9EQVRBKEkyQ19TQ0w0U19NQVJLLAlQT1JUMTQ2X0ZONSwgTVNFTDRDUl8xN18wKSwKLQlQSU5NVVhfREFUQShJMkNfU0RBNFNfTUFSSywJUE9SVDE0N19GTjUsIE1TRUw0Q1JfMTdfMCksCi0KLQkvKiBGdW5jdGlvbiBzZWxlY3QgKi8KLQlQSU5NVVhfREFUQShMQ0RDMF9TRUxFQ1RfTUFSSywJTVNFTDNDUl82XzApLAotCVBJTk1VWF9EQVRBKExDREMxX1NFTEVDVF9NQVJLLAlNU0VMM0NSXzZfMSksCi0KLQlQSU5NVVhfREFUQShUUzBfMVNFTEVDVF9NQVJLLAlNU0VMM0NSXzIxXzAsIE1TRUwzQ1JfMjBfMCksCi0JUElOTVVYX0RBVEEoVFMwXzJTRUxFQ1RfTUFSSywJTVNFTDNDUl8yMV8wLCBNU0VMM0NSXzIwXzEpLAotCVBJTk1VWF9EQVRBKFRTMV8xU0VMRUNUX01BUkssCU1TRUwzQ1JfMjdfMCwgTVNFTDNDUl8yNl8wKSwKLQlQSU5NVVhfREFUQShUUzFfMlNFTEVDVF9NQVJLLAlNU0VMM0NSXzI3XzAsIE1TRUwzQ1JfMjZfMSksCi0KLQlQSU5NVVhfREFUQShTREVOQ19DUEdfTUFSSywJTVNFTDRDUl8xOV8wKSwKLQlQSU5NVVhfREFUQShTREVOQ19EVl9DTEtJX01BUkssCU1TRUw0Q1JfMTlfMSksCi0KLQlQSU5NVVhfREFUQShNRkl2Nl9NQVJLLAkJTVNFTDRDUl82XzApLAotCVBJTk1VWF9EQVRBKE1GSXY0X01BUkssCQlNU0VMNENSXzZfMSksCi19OwotCi0jZGVmaW5lIF9fSQkJKFNIX1BGQ19QSU5fQ0ZHX0lOUFVUKQotI2RlZmluZSBfX08JCShTSF9QRkNfUElOX0NGR19PVVRQVVQpCi0jZGVmaW5lIF9fSU8JCShTSF9QRkNfUElOX0NGR19JTlBVVCB8IFNIX1BGQ19QSU5fQ0ZHX09VVFBVVCkKLSNkZWZpbmUgX19QRAkJKFNIX1BGQ19QSU5fQ0ZHX1BVTExfRE9XTikKLSNkZWZpbmUgX19QVQkJKFNIX1BGQ19QSU5fQ0ZHX1BVTExfVVApCi0jZGVmaW5lIF9fUFVECQkoU0hfUEZDX1BJTl9DRkdfUFVMTF9ET1dOIHwgU0hfUEZDX1BJTl9DRkdfUFVMTF9VUCkKLQotI2RlZmluZSBTSDczNzJfUElOX0lfUEQocGluKQkJU0hfUEZDX1BJTl9DRkcocGluLCBfX0kgfCBfX1BEKQotI2RlZmluZSBTSDczNzJfUElOX0lfUFUocGluKQkJU0hfUEZDX1BJTl9DRkcocGluLCBfX0kgfCBfX1BVKQotI2RlZmluZSBTSDczNzJfUElOX0lfUFVfUEQocGluKQkJU0hfUEZDX1BJTl9DRkcocGluLCBfX0kgfCBfX1BVRCkKLSNkZWZpbmUgU0g3MzcyX1BJTl9JTyhwaW4pCQlTSF9QRkNfUElOX0NGRyhwaW4sIF9fSU8pCi0jZGVmaW5lIFNINzM3Ml9QSU5fSU9fUEQocGluKQkJU0hfUEZDX1BJTl9DRkcocGluLCBfX0lPIHwgX19QRCkKLSNkZWZpbmUgU0g3MzcyX1BJTl9JT19QVShwaW4pCQlTSF9QRkNfUElOX0NGRyhwaW4sIF9fSU8gfCBfX1BVKQotI2RlZmluZSBTSDczNzJfUElOX0lPX1BVX1BEKHBpbikJU0hfUEZDX1BJTl9DRkcocGluLCBfX0lPIHwgX19QVUQpCi0jZGVmaW5lIFNINzM3Ml9QSU5fTyhwaW4pCQlTSF9QRkNfUElOX0NGRyhwaW4sIF9fTykKLSNkZWZpbmUgU0g3MzcyX1BJTl9PX1BVX1BEKHBpbikJCVNIX1BGQ19QSU5fQ0ZHKHBpbiwgX19PIHwgX19QVUQpCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2hfcGZjX3BpbiBwaW5tdXhfcGluc1tdID0gewotCS8qIFRhYmxlIDU3LTEgKEkvTyBhbmQgUHVsbCBVL0QpICovCi0JU0g3MzcyX1BJTl9JT19QRCgwKSwJCVNINzM3Ml9QSU5fSU9fUEQoMSksCi0JU0g3MzcyX1BJTl9PKDIpLAkJU0g3MzcyX1BJTl9JX1BEKDMpLAotCVNINzM3Ml9QSU5fSV9QRCg0KSwJCVNINzM3Ml9QSU5fSV9QRCg1KSwKLQlTSDczNzJfUElOX0lPX1BVX1BEKDYpLAkJU0g3MzcyX1BJTl9JX1BEKDcpLAotCVNINzM3Ml9QSU5fSU9fUEQoOCksCQlTSDczNzJfUElOX08oOSksCi0JU0g3MzcyX1BJTl9PKDEwKSwJCVNINzM3Ml9QSU5fTygxMSksCi0JU0g3MzcyX1BJTl9JT19QVV9QRCgxMiksCVNINzM3Ml9QSU5fSU9fUEQoMTMpLAotCVNINzM3Ml9QSU5fSU9fUEQoMTQpLAkJU0g3MzcyX1BJTl9PKDE1KSwKLQlTSDczNzJfUElOX0lPX1BEKDE2KSwJCVNINzM3Ml9QSU5fSU9fUEQoMTcpLAotCVNINzM3Ml9QSU5fSV9QRCgxOCksCQlTSDczNzJfUElOX0lPKDE5KSwKLQlTSDczNzJfUElOX0lPKDIwKSwJCVNINzM3Ml9QSU5fSU8oMjEpLAotCVNINzM3Ml9QSU5fSU8oMjIpLAkJU0g3MzcyX1BJTl9JTygyMyksCi0JU0g3MzcyX1BJTl9JTygyNCksCQlTSDczNzJfUElOX0lPKDI1KSwKLQlTSDczNzJfUElOX0lPKDI2KSwJCVNINzM3Ml9QSU5fSU8oMjcpLAotCVNINzM3Ml9QSU5fSU8oMjgpLAkJU0g3MzcyX1BJTl9JTygyOSksCi0JU0g3MzcyX1BJTl9JTygzMCksCQlTSDczNzJfUElOX0lPKDMxKSwKLQlTSDczNzJfUElOX0lPKDMyKSwJCVNINzM3Ml9QSU5fSU8oMzMpLAotCVNINzM3Ml9QSU5fSU8oMzQpLAkJU0g3MzcyX1BJTl9JTygzNSksCi0JU0g3MzcyX1BJTl9JTygzNiksCQlTSDczNzJfUElOX0lPKDM3KSwKLQlTSDczNzJfUElOX0lPKDM4KSwJCVNINzM3Ml9QSU5fSU8oMzkpLAotCVNINzM3Ml9QSU5fSU8oNDApLAkJU0g3MzcyX1BJTl9JTyg0MSksCi0JU0g3MzcyX1BJTl9JTyg0MiksCQlTSDczNzJfUElOX0lPKDQzKSwKLQlTSDczNzJfUElOX0lPKDQ0KSwJCVNINzM3Ml9QSU5fSU8oNDUpLAotCVNINzM3Ml9QSU5fSU9fUFUoNDYpLAkJU0g3MzcyX1BJTl9JT19QVSg0NyksCi0JU0g3MzcyX1BJTl9JT19QVSg0OCksCQlTSDczNzJfUElOX0lPX1BVKDQ5KSwKLQlTSDczNzJfUElOX0lPX1BVKDUwKSwJCVNINzM3Ml9QSU5fSU9fUFUoNTEpLAotCVNINzM3Ml9QSU5fSU9fUFUoNTIpLAkJU0g3MzcyX1BJTl9JT19QVSg1MyksCi0JU0g3MzcyX1BJTl9JT19QVSg1NCksCQlTSDczNzJfUElOX0lPX1BVKDU1KSwKLQlTSDczNzJfUElOX0lPX1BVKDU2KSwJCVNINzM3Ml9QSU5fSU9fUFUoNTcpLAotCVNINzM3Ml9QSU5fSU9fUFUoNTgpLAkJU0g3MzcyX1BJTl9JT19QVSg1OSksCi0JU0g3MzcyX1BJTl9JT19QVSg2MCksCQlTSDczNzJfUElOX0lPX1BVKDYxKSwKLQlTSDczNzJfUElOX0lPKDYyKSwJCVNINzM3Ml9QSU5fTyg2MyksCi0JU0g3MzcyX1BJTl9PKDY0KSwJCVNINzM3Ml9QSU5fSU9fUFUoNjUpLAotCVNINzM3Ml9QSU5fT19QVV9QRCg2NiksCQlTSDczNzJfUElOX0lPX1BVKDY3KSwKLQlTSDczNzJfUElOX08oNjgpLAkJU0g3MzcyX1BJTl9JTyg2OSksCi0JU0g3MzcyX1BJTl9JTyg3MCksCQlTSDczNzJfUElOX0lPKDcxKSwKLQlTSDczNzJfUElOX08oNzIpLAkJU0g3MzcyX1BJTl9JX1BVKDczKSwKLQlTSDczNzJfUElOX0lfUFVfUEQoNzQpLAkJU0g3MzcyX1BJTl9JT19QVV9QRCg3NSksCi0JU0g3MzcyX1BJTl9JT19QVV9QRCg3NiksCVNINzM3Ml9QSU5fSU9fUFVfUEQoNzcpLAotCVNINzM3Ml9QSU5fSU9fUFVfUEQoNzgpLAlTSDczNzJfUElOX0lPX1BVX1BEKDc5KSwKLQlTSDczNzJfUElOX0lPX1BVX1BEKDgwKSwJU0g3MzcyX1BJTl9JT19QVV9QRCg4MSksCi0JU0g3MzcyX1BJTl9JT19QVV9QRCg4MiksCVNINzM3Ml9QSU5fSU9fUFVfUEQoODMpLAotCVNINzM3Ml9QSU5fSU9fUFVfUEQoODQpLAlTSDczNzJfUElOX0lPX1BVX1BEKDg1KSwKLQlTSDczNzJfUElOX0lPX1BVX1BEKDg2KSwJU0g3MzcyX1BJTl9JT19QVV9QRCg4NyksCi0JU0g3MzcyX1BJTl9JT19QVV9QRCg4OCksCVNINzM3Ml9QSU5fSU9fUFVfUEQoODkpLAotCVNINzM3Ml9QSU5fSU9fUFVfUEQoOTApLAlTSDczNzJfUElOX0lPX1BVX1BEKDkxKSwKLQlTSDczNzJfUElOX0lPX1BVX1BEKDkyKSwJU0g3MzcyX1BJTl9JT19QVV9QRCg5MyksCi0JU0g3MzcyX1BJTl9JT19QVV9QRCg5NCksCVNINzM3Ml9QSU5fSU9fUFVfUEQoOTUpLAotCVNINzM3Ml9QSU5fSU9fUFUoOTYpLAkJU0g3MzcyX1BJTl9JT19QVV9QRCg5NyksCi0JU0g3MzcyX1BJTl9JT19QVV9QRCg5OCksCVNINzM3Ml9QSU5fT19QVV9QRCg5OSksCi0JU0g3MzcyX1BJTl9JT19QRCgxMDApLAkJU0g3MzcyX1BJTl9JT19QRCgxMDEpLAotCVNINzM3Ml9QSU5fSU9fUEQoMTAyKSwJCVNINzM3Ml9QSU5fSU9fUEQoMTAzKSwKLQlTSDczNzJfUElOX0lPX1BEKDEwNCksCQlTSDczNzJfUElOX0lPX1BEKDEwNSksCi0JU0g3MzcyX1BJTl9JT19QVSgxMDYpLAkJU0g3MzcyX1BJTl9JT19QVSgxMDcpLAotCVNINzM3Ml9QSU5fSU9fUFUoMTA4KSwJCVNINzM3Ml9QSU5fSU9fUFUoMTA5KSwKLQlTSDczNzJfUElOX0lPX1BVKDExMCksCQlTSDczNzJfUElOX0lPX1BVKDExMSksCi0JU0g3MzcyX1BJTl9JT19QRCgxMTIpLAkJU0g3MzcyX1BJTl9JT19QRCgxMTMpLAotCVNINzM3Ml9QSU5fSU9fUFUoMTE0KSwJCVNINzM3Ml9QSU5fSU9fUFUoMTE1KSwKLQlTSDczNzJfUElOX0lPX1BVKDExNiksCQlTSDczNzJfUElOX0lPX1BVKDExNyksCi0JU0g3MzcyX1BJTl9JT19QVSgxMTgpLAkJU0g3MzcyX1BJTl9JT19QVSgxMTkpLAotCVNINzM3Ml9QSU5fSU9fUFUoMTIwKSwJCVNINzM3Ml9QSU5fSU9fUEQoMTIxKSwKLQlTSDczNzJfUElOX0lPX1BEKDEyMiksCQlTSDczNzJfUElOX0lPX1BEKDEyMyksCi0JU0g3MzcyX1BJTl9JT19QRCgxMjQpLAkJU0g3MzcyX1BJTl9JT19QRCgxMjUpLAotCVNINzM3Ml9QSU5fSU9fUEQoMTI2KSwJCVNINzM3Ml9QSU5fSU9fUEQoMTI3KSwKLQlTSDczNzJfUElOX0lPX1BEKDEyOCksCQlTSDczNzJfUElOX0lPX1BVX1BEKDEyOSksCi0JU0g3MzcyX1BJTl9JT19QVV9QRCgxMzApLAlTSDczNzJfUElOX0lPX1BVX1BEKDEzMSksCi0JU0g3MzcyX1BJTl9JT19QVV9QRCgxMzIpLAlTSDczNzJfUElOX0lPX1BVX1BEKDEzMyksCi0JU0g3MzcyX1BJTl9JT19QVV9QRCgxMzQpLAlTSDczNzJfUElOX0lPX1BVX1BEKDEzNSksCi0JU0g3MzcyX1BJTl9JT19QRCgxMzYpLAkJU0g3MzcyX1BJTl9JT19QRCgxMzcpLAotCVNINzM3Ml9QSU5fSU9fUEQoMTM4KSwJCVNINzM3Ml9QSU5fSU9fUEQoMTM5KSwKLQlTSDczNzJfUElOX0lPX1BEKDE0MCksCQlTSDczNzJfUElOX0lPX1BEKDE0MSksCi0JU0g3MzcyX1BJTl9JT19QRCgxNDIpLAkJU0g3MzcyX1BJTl9JT19QVV9QRCgxNDMpLAotCVNINzM3Ml9QSU5fSU9fUEQoMTQ0KSwJCVNINzM3Ml9QSU5fSU9fUEQoMTQ1KSwKLQlTSDczNzJfUElOX0lPX1BEKDE0NiksCQlTSDczNzJfUElOX0lPX1BEKDE0NyksCi0JU0g3MzcyX1BJTl9JT19QRCgxNDgpLAkJU0g3MzcyX1BJTl9JT19QRCgxNDkpLAotCVNINzM3Ml9QSU5fSU9fUEQoMTUwKSwJCVNINzM3Ml9QSU5fSU9fUEQoMTUxKSwKLQlTSDczNzJfUElOX0lPX1BVX1BEKDE1MiksCVNINzM3Ml9QSU5fSV9QRCgxNTMpLAotCVNINzM3Ml9QSU5fSU9fUFVfUEQoMTU0KSwJU0g3MzcyX1BJTl9JX1BEKDE1NSksCi0JU0g3MzcyX1BJTl9JT19QRCgxNTYpLAkJU0g3MzcyX1BJTl9JT19QRCgxNTcpLAotCVNINzM3Ml9QSU5fSV9QRCgxNTgpLAkJU0g3MzcyX1BJTl9JT19QRCgxNTkpLAotCVNINzM3Ml9QSU5fTygxNjApLAkJU0g3MzcyX1BJTl9JT19QRCgxNjEpLAotCVNINzM3Ml9QSU5fSU9fUEQoMTYyKSwJCVNINzM3Ml9QSU5fSU9fUEQoMTYzKSwKLQlTSDczNzJfUElOX0lfUEQoMTY0KSwJCVNINzM3Ml9QSU5fSU9fUEQoMTY1KSwKLQlTSDczNzJfUElOX0lfUEQoMTY2KSwJCVNINzM3Ml9QSU5fSV9QRCgxNjcpLAotCVNINzM3Ml9QSU5fSV9QRCgxNjgpLAkJU0g3MzcyX1BJTl9JX1BEKDE2OSksCi0JU0g3MzcyX1BJTl9JX1BEKDE3MCksCQlTSDczNzJfUElOX08oMTcxKSwKLQlTSDczNzJfUElOX0lPX1BVX1BEKDE3MiksCVNINzM3Ml9QSU5fSU9fUFVfUEQoMTczKSwKLQlTSDczNzJfUElOX0lPX1BVX1BEKDE3NCksCVNINzM3Ml9QSU5fSU9fUFVfUEQoMTc1KSwKLQlTSDczNzJfUElOX0lPX1BVX1BEKDE3NiksCVNINzM3Ml9QSU5fSU9fUFVfUEQoMTc3KSwKLQlTSDczNzJfUElOX0lPX1BVX1BEKDE3OCksCVNINzM3Ml9QSU5fTygxNzkpLAotCVNINzM3Ml9QSU5fSU9fUFVfUEQoMTgwKSwJU0g3MzcyX1BJTl9JT19QVV9QRCgxODEpLAotCVNINzM3Ml9QSU5fSU9fUFVfUEQoMTgyKSwJU0g3MzcyX1BJTl9JT19QVV9QRCgxODMpLAotCVNINzM3Ml9QSU5fSU9fUFVfUEQoMTg0KSwJU0g3MzcyX1BJTl9PKDE4NSksCi0JU0g3MzcyX1BJTl9JT19QVV9QRCgxODYpLAlTSDczNzJfUElOX0lPX1BVX1BEKDE4NyksCi0JU0g3MzcyX1BJTl9JT19QVV9QRCgxODgpLAlTSDczNzJfUElOX0lPX1BVX1BEKDE4OSksCi0JU0g3MzcyX1BJTl9JT19QVV9QRCgxOTApLAotfTsKLQotLyogLSBCU0MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnNjX2RhdGE4X3BpbnNbXSA9IHsKLQkvKiBEWzA6N10gKi8KLQk0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBic2NfZGF0YThfbXV4W10gPSB7Ci0JRDBfTkFGMF9NQVJLLCBEMV9OQUYxX01BUkssIEQyX05BRjJfTUFSSywgRDNfTkFGM19NQVJLLAotCUQ0X05BRjRfTUFSSywgRDVfTkFGNV9NQVJLLCBENl9OQUY2X01BUkssIEQ3X05BRjdfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJzY19kYXRhMTZfcGluc1tdID0gewotCS8qIERbMDoxNV0gKi8KLQk0NiwgNDcsIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJzY19kYXRhMTZfbXV4W10gPSB7Ci0JRDBfTkFGMF9NQVJLLCBEMV9OQUYxX01BUkssIEQyX05BRjJfTUFSSywgRDNfTkFGM19NQVJLLAotCUQ0X05BRjRfTUFSSywgRDVfTkFGNV9NQVJLLCBENl9OQUY2X01BUkssIEQ3X05BRjdfTUFSSywKLQlEOF9OQUY4X01BUkssIEQ5X05BRjlfTUFSSywgRDEwX05BRjEwX01BUkssIEQxMV9OQUYxMV9NQVJLLAotCUQxMl9OQUYxMl9NQVJLLCBEMTNfTkFGMTNfTUFSSywgRDE0X05BRjE0X01BUkssIEQxNV9OQUYxNV9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnNjX2NzMF9waW5zW10gPSB7Ci0JLyogQ1MgKi8KLQk2MiwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJzY19jczBfbXV4W10gPSB7Ci0JQ1MwX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBic2NfY3MyX3BpbnNbXSA9IHsKLQkvKiBDUyAqLwotCTYzLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnNjX2NzMl9tdXhbXSA9IHsKLQlDUzJfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJzY19jczRfcGluc1tdID0gewotCS8qIENTICovCi0JNjQsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBic2NfY3M0X211eFtdID0gewotCUNTNF9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnNjX2NzNWFfcGluc1tdID0gewotCS8qIENTICovCi0JNjUsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBic2NfY3M1YV9tdXhbXSA9IHsKLQlDUzVBX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBic2NfY3M1Yl9waW5zW10gPSB7Ci0JLyogQ1MgKi8KLQk2NiwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJzY19jczViX211eFtdID0gewotCUNTNUJfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJzY19jczZhX3BpbnNbXSA9IHsKLQkvKiBDUyAqLwotCTY3LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnNjX2NzNmFfbXV4W10gPSB7Ci0JQ1M2QV9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnNjX3JkX3dlOF9waW5zW10gPSB7Ci0JLyogUkQsIFdFWzBdICovCi0JNjksIDcwLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnNjX3JkX3dlOF9tdXhbXSA9IHsKLQlSRF9GU0NfTUFSSywgV0UwX0ZXRV9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnNjX3JkX3dlMTZfcGluc1tdID0gewotCS8qIFJELCBXRVswOjFdICovCi0JNjksIDcwLCA3MSwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJzY19yZF93ZTE2X211eFtdID0gewotCVJEX0ZTQ19NQVJLLCBXRTBfRldFX01BUkssIFdFMV9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnNjX2JzX3BpbnNbXSA9IHsKLQkvKiBCUyAqLwotCTE5LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnNjX2JzX211eFtdID0gewotCUJTX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBic2NfcmR3cl9waW5zW10gPSB7Ci0JLyogUkRXUiAqLwotCTc1LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnNjX3Jkd3JfbXV4W10gPSB7Ci0JUkRXUl9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnNjX3dhaXRfcGluc1tdID0gewotCS8qIFdBSVQgKi8KLQk3NCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGJzY193YWl0X211eFtdID0gewotCVdBSVRfTUFSSywKLX07Ci0vKiAtIENFVSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjZXVfZGF0YV8wXzdfcGluc1tdID0gewotCS8qIERbMDo3XSAqLwotCTEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2V1X2RhdGFfMF83X211eFtdID0gewotCVZJT19EMF9NQVJLLCBWSU9fRDFfTUFSSywgVklPX0QyX01BUkssIFZJT19EM19NQVJLLAotCVZJT19ENF9NQVJLLCBWSU9fRDVfTUFSSywgVklPX0Q2X01BUkssIFZJT19EN19NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2V1X2RhdGFfOF8xNV9waW5zW10gPSB7Ci0JLyogRFs4OjE1XSAqLwotCTExMCwgMTExLCAxMTIsIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2V1X2RhdGFfOF8xNV9tdXhbXSA9IHsKLQlWSU9fRDhfTUFSSywgVklPX0Q5X01BUkssIFZJT19EMTBfTUFSSywgVklPX0QxMV9NQVJLLAotCVZJT19EMTJfTUFSSywgVklPX0QxM19NQVJLLCBWSU9fRDE0X01BUkssIFZJT19EMTVfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNldV9jbGtfMF9waW5zW10gPSB7Ci0JLyogQ0tPICovCi0JMTIwLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2V1X2Nsa18wX211eFtdID0gewotCVZJT19DS09fTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNldV9jbGtfMV9waW5zW10gPSB7Ci0JLyogQ0tPICovCi0JMTYsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjZXVfY2xrXzFfbXV4W10gPSB7Ci0JVklPX0NLTzFfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNldV9jbGtfMl9waW5zW10gPSB7Ci0JLyogQ0tPICovCi0JMTcsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjZXVfY2xrXzJfbXV4W10gPSB7Ci0JVklPX0NLTzJfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNldV9zeW5jX3BpbnNbXSA9IHsKLQkvKiBDTEssIFZELCBIRCAqLwotCTExOCwgMTAwLCAxMDEsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjZXVfc3luY19tdXhbXSA9IHsKLQlWSU9fQ0xLX01BUkssIFZJT19WRF9NQVJLLCBWSU9fSERfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNldV9maWVsZF9waW5zW10gPSB7Ci0JLyogRklFTEQgKi8KLQkxMTksCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjZXVfZmllbGRfbXV4W10gPSB7Ci0JVklPX0ZJRUxEX01BUkssCi19OwotLyogLSBGTENUTCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZmxjdGxfZGF0YV9waW5zW10gPSB7Ci0JLyogTkFGWzA6MTVdICovCi0JNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmbGN0bF9kYXRhX211eFtdID0gewotCUQwX05BRjBfTUFSSywgRDFfTkFGMV9NQVJLLCBEMl9OQUYyX01BUkssIEQzX05BRjNfTUFSSywKLQlENF9OQUY0X01BUkssIEQ1X05BRjVfTUFSSywgRDZfTkFGNl9NQVJLLCBEN19OQUY3X01BUkssCi0JRDhfTkFGOF9NQVJLLCBEOV9OQUY5X01BUkssIEQxMF9OQUYxMF9NQVJLLCBEMTFfTkFGMTFfTUFSSywKLQlEMTJfTkFGMTJfTUFSSywgRDEzX05BRjEzX01BUkssIEQxNF9OQUYxNF9NQVJLLCBEMTVfTkFGMTVfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZsY3RsX2NlMF9waW5zW10gPSB7Ci0JLyogQ0UgKi8KLQk2OCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZsY3RsX2NlMF9tdXhbXSA9IHsKLQlGQ0UwX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmbGN0bF9jZTFfcGluc1tdID0gewotCS8qIENFICovCi0JNjYsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmbGN0bF9jZTFfbXV4W10gPSB7Ci0JRkNFMV9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZmxjdGxfY3RybF9waW5zW10gPSB7Ci0JLyogRkNERSwgRk9FLCBGU0MsIEZXRSwgRlJCICovCi0JMjQsIDIzLCA2OSwgNzAsIDczLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZmxjdGxfY3RybF9tdXhbXSA9IHsKLQlBNV9GQ0RFX01BUkssIEE0X0ZPRV9NQVJLLCBSRF9GU0NfTUFSSywgV0UwX0ZXRV9NQVJLLCBGUkJfTUFSSywKLX07Ci0vKiAtIEZTSUEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmc2lhX21jbGtfaW5fcGluc1tdID0gewotCS8qIENLICovCi0JNCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZzaWFfbWNsa19pbl9tdXhbXSA9IHsKLQlGU0lBQ0tfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZzaWFfbWNsa19vdXRfcGluc1tdID0gewotCS8qIE9NQyAqLwotCTgsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmc2lhX21jbGtfb3V0X211eFtdID0gewotCUZTSUFPTUNfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZzaWFfc2Nsa19pbl9waW5zW10gPSB7Ci0JLyogSUxSLCBJQlQgKi8KLQk1LCA2LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZnNpYV9zY2xrX2luX211eFtdID0gewotCUZTSUFJTFJfTUFSSywgRlNJQUlCVF9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZnNpYV9zY2xrX291dF9waW5zW10gPSB7Ci0JLyogT0xSLCBPQlQgKi8KLQk5LCAxMCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZzaWFfc2Nsa19vdXRfbXV4W10gPSB7Ci0JRlNJQU9MUl9NQVJLLCBGU0lBT0JUX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmc2lhX2RhdGFfaW5fcGluc1tdID0gewotCS8qIElTTEQgKi8KLQk3LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZnNpYV9kYXRhX2luX211eFtdID0gewotCUZTSUFJU0xEX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmc2lhX2RhdGFfb3V0X3BpbnNbXSA9IHsKLQkvKiBPU0xEICovCi0JMTEsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmc2lhX2RhdGFfb3V0X211eFtdID0gewotCUZTSUFPU0xEX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmc2lhX3NwZGlmXzBfcGluc1tdID0gewotCS8qIFNQRElGICovCi0JMTEsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmc2lhX3NwZGlmXzBfbXV4W10gPSB7Ci0JRlNJQVNQRElGXzExX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmc2lhX3NwZGlmXzFfcGluc1tdID0gewotCS8qIFNQRElGICovCi0JMTUsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmc2lhX3NwZGlmXzFfbXV4W10gPSB7Ci0JRlNJQVNQRElGXzE1X01BUkssCi19OwotLyogLSBGU0lCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZnNpYl9tY2xrX2luX3BpbnNbXSA9IHsKLQkvKiBDSyAqLwotCTQsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmc2liX21jbGtfaW5fbXV4W10gPSB7Ci0JRlNJQkNLX01BUkssCi19OwotLyogLSBIRE1JIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaGRtaV9waW5zW10gPSB7Ci0JLyogSFBELCBDRUMgKi8KLQkxNjksIDE3MCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGhkbWlfbXV4W10gPSB7Ci0JSERNSV9IUERfTUFSSywgSERNSV9DRUNfTUFSSywKLX07Ci0vKiAtIElOVEMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotSVJRQ19QSU5TX01VWCgwLCA2LCAxNjIpOwotSVJRQ19QSU5fTVVYKDEsIDEyKTsKLUlSUUNfUElOU19NVVgoMiwgNCwgNSk7Ci1JUlFDX1BJTlNfTVVYKDMsIDgsIDE2KTsKLUlSUUNfUElOU19NVVgoNCwgMTcsIDE2Myk7Ci1JUlFDX1BJTl9NVVgoNSwgMTgpOwotSVJRQ19QSU5TX01VWCg2LCAzOSwgMTY0KTsKLUlSUUNfUElOU19NVVgoNywgNDAsIDE2Nyk7Ci1JUlFDX1BJTlNfTVVYKDgsIDQxLCAxNjgpOwotSVJRQ19QSU5TX01VWCg5LCA0MiwgMTY5KTsKLUlSUUNfUElOX01VWCgxMCwgNjUpOwotSVJRQ19QSU5fTVVYKDExLCA2Nyk7Ci1JUlFDX1BJTlNfTVVYKDEyLCA4MCwgMTM3KTsKLUlSUUNfUElOU19NVVgoMTMsIDgxLCAxNDUpOwotSVJRQ19QSU5TX01VWCgxNCwgODIsIDE0Nik7Ci1JUlFDX1BJTlNfTVVYKDE1LCA4MywgMTQ3KTsKLUlSUUNfUElOU19NVVgoMTYsIDg0LCAxNzApOwotSVJRQ19QSU5fTVVYKDE3LCA4NSk7Ci1JUlFDX1BJTl9NVVgoMTgsIDg2KTsKLUlSUUNfUElOX01VWCgxOSwgODcpOwotSVJRQ19QSU5fTVVYKDIwLCA5Mik7Ci1JUlFDX1BJTl9NVVgoMjEsIDkzKTsKLUlSUUNfUElOX01VWCgyMiwgOTQpOwotSVJRQ19QSU5fTVVYKDIzLCA5NSk7Ci1JUlFDX1BJTl9NVVgoMjQsIDExMik7Ci1JUlFDX1BJTl9NVVgoMjUsIDExOSk7Ci1JUlFDX1BJTlNfTVVYKDI2LCAxMjEsIDE3Mik7Ci1JUlFDX1BJTlNfTVVYKDI3LCAxMjIsIDE4MCk7Ci1JUlFDX1BJTlNfTVVYKDI4LCAxMjMsIDE4MSk7Ci1JUlFDX1BJTlNfTVVYKDI5LCAxMjksIDE4Mik7Ci1JUlFDX1BJTlNfTVVYKDMwLCAxMzAsIDE4Myk7Ci1JUlFDX1BJTlNfTVVYKDMxLCAxMzgsIDE4NCk7Ci0vKiAtIEtFWVNDIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBrZXlzY19pbjA0XzBfcGluc1tdID0gewotCS8qIEtFWUlOWzA6NF0gKi8KLQkxMzYsIDEzNSwgMTM0LCAxMzMsIDEzMiwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtleXNjX2luMDRfMF9tdXhbXSA9IHsKLQlLRVlJTjBfMTM2X01BUkssIEtFWUlOMV8xMzVfTUFSSywgS0VZSU4yXzEzNF9NQVJLLCBLRVlJTjNfMTMzX01BUkssCi0JS0VZSU40X01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBrZXlzY19pbjA0XzFfcGluc1tdID0gewotCS8qIEtFWUlOWzA6NF0gKi8KLQkxMjEsIDEyMiwgMTIzLCAxMjQsIDEzMiwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtleXNjX2luMDRfMV9tdXhbXSA9IHsKLQlLRVlJTjBfMTIxX01BUkssIEtFWUlOMV8xMjJfTUFSSywgS0VZSU4yXzEyM19NQVJLLCBLRVlJTjNfMTI0X01BUkssCi0JS0VZSU40X01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBrZXlzY19pbjVfcGluc1tdID0gewotCS8qIEtFWUlONSAqLwotCTEzMSwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtleXNjX2luNV9tdXhbXSA9IHsKLQlLRVlJTjVfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtleXNjX2luNl9waW5zW10gPSB7Ci0JLyogS0VZSU42ICovCi0JMTMwLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga2V5c2NfaW42X211eFtdID0gewotCUtFWUlONl9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga2V5c2NfaW43X3BpbnNbXSA9IHsKLQkvKiBLRVlJTjcgKi8KLQkxMjksCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBrZXlzY19pbjdfbXV4W10gPSB7Ci0JS0VZSU43X01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBrZXlzY19vdXQ0X3BpbnNbXSA9IHsKLQkvKiBLRVlPVVRbMDozXSAqLwotCTEyOCwgMTI3LCAxMjYsIDEyNSwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtleXNjX291dDRfbXV4W10gPSB7Ci0JS0VZT1VUMF9NQVJLLCBLRVlPVVQxX01BUkssIEtFWU9VVDJfTUFSSywgS0VZT1VUM19NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga2V5c2Nfb3V0NV9waW5zW10gPSB7Ci0JLyogS0VZT1VUWzA6NF0gKi8KLQkxMjgsIDEyNywgMTI2LCAxMjUsIDEyNCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtleXNjX291dDVfbXV4W10gPSB7Ci0JS0VZT1VUMF9NQVJLLCBLRVlPVVQxX01BUkssIEtFWU9VVDJfTUFSSywgS0VZT1VUM19NQVJLLAotCUtFWU9VVDRfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtleXNjX291dDZfcGluc1tdID0gewotCS8qIEtFWU9VVFswOjVdICovCi0JMTI4LCAxMjcsIDEyNiwgMTI1LCAxMjQsIDEyMywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtleXNjX291dDZfbXV4W10gPSB7Ci0JS0VZT1VUMF9NQVJLLCBLRVlPVVQxX01BUkssIEtFWU9VVDJfTUFSSywgS0VZT1VUM19NQVJLLAotCUtFWU9VVDRfTUFSSywgS0VZT1VUNV9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQga2V5c2Nfb3V0OF9waW5zW10gPSB7Ci0JLyogS0VZT1VUWzA6N10gKi8KLQkxMjgsIDEyNywgMTI2LCAxMjUsIDEyNCwgMTIzLCAxMjIsIDEyMSwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGtleXNjX291dDhfbXV4W10gPSB7Ci0JS0VZT1VUMF9NQVJLLCBLRVlPVVQxX01BUkssIEtFWU9VVDJfTUFSSywgS0VZT1VUM19NQVJLLAotCUtFWU9VVDRfTUFSSywgS0VZT1VUNV9NQVJLLCBLRVlPVVQ2X01BUkssIEtFWU9VVDdfTUFSSywKLX07Ci0vKiAtIExDRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsY2RfZGF0YThfcGluc1tdID0gewotCS8qIERbMDo3XSAqLwotCTEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywgMTI4LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGNkX2RhdGE4X211eFtdID0gewotCS8qIExDREMgKi8KLQlMQ0REMF9NQVJLLCBMQ0REMV9NQVJLLCBMQ0REMl9NQVJLLCBMQ0REM19NQVJLLAotCUxDREQ0X01BUkssIExDREQ1X01BUkssIExDREQ2X01BUkssIExDREQ3X01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsY2RfZGF0YTlfcGluc1tdID0gewotCS8qIERbMDo4XSAqLwotCTEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywgMTI4LAotCTEyOSwKLQkxMzcsIDEzOCwgMTM5LCAxNDAsIDE0MSwgMTQyLCAxNDMsIDE0NCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxjZF9kYXRhOV9tdXhbXSA9IHsKLQlMQ0REMF9NQVJLLCBMQ0REMV9NQVJLLCBMQ0REMl9NQVJLLCBMQ0REM19NQVJLLAotCUxDREQ0X01BUkssIExDREQ1X01BUkssIExDREQ2X01BUkssIExDREQ3X01BUkssCi0JTENERDhfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxjZF9kYXRhMTJfcGluc1tdID0gewotCS8qIERbMDoxMV0gKi8KLQkxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOCwKLQkxMjksIDEzMCwgMTMxLCAxMzIsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsY2RfZGF0YTEyX211eFtdID0gewotCUxDREQwX01BUkssIExDREQxX01BUkssIExDREQyX01BUkssIExDREQzX01BUkssCi0JTENERDRfTUFSSywgTENERDVfTUFSSywgTENERDZfTUFSSywgTENERDdfTUFSSywKLQlMQ0REOF9NQVJLLCBMQ0REOV9NQVJLLAlMQ0REMTBfTUFSSywgTENERDExX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsY2RfZGF0YTE2X3BpbnNbXSA9IHsKLQkvKiBEWzA6MTVdICovCi0JMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LCAxMjgsCi0JMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsY2RfZGF0YTE2X211eFtdID0gewotCUxDREQwX01BUkssIExDREQxX01BUkssIExDREQyX01BUkssIExDREQzX01BUkssCi0JTENERDRfTUFSSywgTENERDVfTUFSSywgTENERDZfTUFSSywgTENERDdfTUFSSywKLQlMQ0REOF9NQVJLLCBMQ0REOV9NQVJLLAlMQ0REMTBfTUFSSywgTENERDExX01BUkssCi0JTENERDEyX01BUkssIExDREQxM19NQVJLLCBMQ0REMTRfTUFSSywgTENERDE1X01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsY2RfZGF0YTE4X3BpbnNbXSA9IHsKLQkvKiBEWzA6MTddICovCi0JMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LCAxMjgsCi0JMTI5LCAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsCi0JMTM3LCAxMzgsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsY2RfZGF0YTE4X211eFtdID0gewotCUxDREQwX01BUkssIExDREQxX01BUkssIExDREQyX01BUkssIExDREQzX01BUkssCi0JTENERDRfTUFSSywgTENERDVfTUFSSywgTENERDZfTUFSSywgTENERDdfTUFSSywKLQlMQ0REOF9NQVJLLCBMQ0REOV9NQVJLLAlMQ0REMTBfTUFSSywgTENERDExX01BUkssCi0JTENERDEyX01BUkssIExDREQxM19NQVJLLCBMQ0REMTRfTUFSSywgTENERDE1X01BUkssCi0JTENERDE2X01BUkssIExDREQxN19NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGNkX2RhdGEyNF9waW5zW10gPSB7Ci0JLyogRFswOjIzXSAqLwotCTEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDEyNywgMTI4LAotCTEyOSwgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2LAotCTEzNywgMTM4LCAxMzksIDE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGNkX2RhdGEyNF9tdXhbXSA9IHsKLQlMQ0REMF9NQVJLLCBMQ0REMV9NQVJLLCBMQ0REMl9NQVJLLCBMQ0REM19NQVJLLAotCUxDREQ0X01BUkssIExDREQ1X01BUkssIExDREQ2X01BUkssIExDREQ3X01BUkssCi0JTENERDhfTUFSSywgTENERDlfTUFSSywJTENERDEwX01BUkssIExDREQxMV9NQVJLLAotCUxDREQxMl9NQVJLLCBMQ0REMTNfTUFSSywgTENERDE0X01BUkssIExDREQxNV9NQVJLLAotCUxDREQxNl9NQVJLLCBMQ0REMTdfTUFSSywgTENERDE4X01BUkssIExDREQxOV9NQVJLLAotCUxDREQyMF9NQVJLLCBMQ0REMjFfTUFSSywgTENERDIyX01BUkssIExDREQyM19NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGNkX2Rpc3BsYXlfcGluc1tdID0gewotCS8qIERPTiAqLwotCTE1MSwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxjZF9kaXNwbGF5X211eFtdID0gewotCUxDRERPTl9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGNkX2xjbGtfcGluc1tdID0gewotCS8qIExDTEsgKi8KLQkxNTAsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsY2RfbGNsa19tdXhbXSA9IHsKLQlMQ0RMQ0xLX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsY2Rfc3luY19waW5zW10gPSB7Ci0JLyogVlNZTiwgSFNZTiwgRENLLCBESVNQICovCi0JMTQ2LCAxNDUsIDE0NywgMTQ5LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGNkX3N5bmNfbXV4W10gPSB7Ci0JTENEVlNZTl9NQVJLLCBMQ0RIU1lOX01BUkssIExDRERDS19NQVJLLCBMQ0RESVNQX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsY2Rfc3lzX3BpbnNbXSA9IHsKLQkvKiBDUywgV1IsIFJELCBSUyAqLwotCTE0NSwgMTQ3LCAxNDgsIDE0OSwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxjZF9zeXNfbXV4W10gPSB7Ci0JTENEQ1NfTUFSSywgTENEV1JfTUFSSywgTENEUkRfTUFSSywgTENEUlNfTUFSSywKLX07Ci0vKiAtIE1NQ0lGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtbWMwX2RhdGExXzBfcGluc1tdID0gewotCS8qIERbMF0gKi8KLQk4NCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1tYzBfZGF0YTFfMF9tdXhbXSA9IHsKLQlNTUNEMF8wX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtbWMwX2RhdGE0XzBfcGluc1tdID0gewotCS8qIERbMDozXSAqLwotCTg0LCA4NSwgODYsIDg3LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbW1jMF9kYXRhNF8wX211eFtdID0gewotCU1NQ0QwXzBfTUFSSywgTU1DRDBfMV9NQVJLLCBNTUNEMF8yX01BUkssIE1NQ0QwXzNfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1tYzBfZGF0YThfMF9waW5zW10gPSB7Ci0JLyogRFswOjddICovCi0JODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbW1jMF9kYXRhOF8wX211eFtdID0gewotCU1NQ0QwXzBfTUFSSywgTU1DRDBfMV9NQVJLLCBNTUNEMF8yX01BUkssIE1NQ0QwXzNfTUFSSywKLQlNTUNEMF80X01BUkssIE1NQ0QwXzVfTUFSSywgTU1DRDBfNl9NQVJLLCBNTUNEMF83X01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtbWMwX2N0cmxfMF9waW5zW10gPSB7Ci0JLyogQ01ELCBDTEsgKi8KLQk5MiwgOTksCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtbWMwX2N0cmxfMF9tdXhbXSA9IHsKLQlNTUNDTUQwX01BUkssIE1NQ0NMSzBfTUFSSywKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbW1jMF9kYXRhMV8xX3BpbnNbXSA9IHsKLQkvKiBEWzBdICovCi0JNTQsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtbWMwX2RhdGExXzFfbXV4W10gPSB7Ci0JTU1DRDFfMF9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbW1jMF9kYXRhNF8xX3BpbnNbXSA9IHsKLQkvKiBEWzA6M10gKi8KLQk1NCwgNTUsIDU2LCA1NywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1tYzBfZGF0YTRfMV9tdXhbXSA9IHsKLQlNTUNEMV8wX01BUkssIE1NQ0QxXzFfTUFSSywgTU1DRDFfMl9NQVJLLCBNTUNEMV8zX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtbWMwX2RhdGE4XzFfcGluc1tdID0gewotCS8qIERbMDo3XSAqLwotCTU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1tYzBfZGF0YThfMV9tdXhbXSA9IHsKLQlNTUNEMV8wX01BUkssIE1NQ0QxXzFfTUFSSywgTU1DRDFfMl9NQVJLLCBNTUNEMV8zX01BUkssCi0JTU1DRDFfNF9NQVJLLCBNTUNEMV81X01BUkssIE1NQ0QxXzZfTUFSSywgTU1DRDFfN19NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbW1jMF9jdHJsXzFfcGluc1tdID0gewotCS8qIENNRCwgQ0xLICovCi0JNjcsIDY2LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbW1jMF9jdHJsXzFfbXV4W10gPSB7Ci0JTU1DQ01EMV9NQVJLLCBNTUNDTEsxX01BUkssCi19OwotLyogLSBTQ0lGQTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2NpZmEwX2RhdGFfcGluc1tdID0gewotCS8qIFJYRCwgVFhEICovCi0JMTUzLCAxNTIsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzY2lmYTBfZGF0YV9tdXhbXSA9IHsKLQlTQ0lGQTBfUlhEX01BUkssIFNDSUZBMF9UWERfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNjaWZhMF9jbGtfcGluc1tdID0gewotCS8qIFNDSyAqLwotCTE1NiwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNjaWZhMF9jbGtfbXV4W10gPSB7Ci0JU0NJRkEwX1NDS19NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2NpZmEwX2N0cmxfcGluc1tdID0gewotCS8qIFJUUywgQ1RTICovCi0JMTU3LCAxNTgsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzY2lmYTBfY3RybF9tdXhbXSA9IHsKLQlTQ0lGQTBfUlRTX01BUkssIFNDSUZBMF9DVFNfTUFSSywKLX07Ci0vKiAtIFNDSUZBMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzY2lmYTFfZGF0YV9waW5zW10gPSB7Ci0JLyogUlhELCBUWEQgKi8KLQkxNTUsIDE1NCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNjaWZhMV9kYXRhX211eFtdID0gewotCVNDSUZBMV9SWERfTUFSSywgU0NJRkExX1RYRF9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2NpZmExX2Nsa19waW5zW10gPSB7Ci0JLyogU0NLICovCi0JMTU5LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2NpZmExX2Nsa19tdXhbXSA9IHsKLQlTQ0lGQTFfU0NLX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzY2lmYTFfY3RybF9waW5zW10gPSB7Ci0JLyogUlRTLCBDVFMgKi8KLQkxNjAsIDE2MSwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNjaWZhMV9jdHJsX211eFtdID0gewotCVNDSUZBMV9SVFNfTUFSSywgU0NJRkExX0NUU19NQVJLLAotfTsKLS8qIC0gU0NJRkEyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNjaWZhMl9kYXRhX3BpbnNbXSA9IHsKLQkvKiBSWEQsIFRYRCAqLwotCTk3LCA5NiwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNjaWZhMl9kYXRhX211eFtdID0gewotCVNDSUZBMl9SWEQxX01BUkssIFNDSUZBMl9UWEQxX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzY2lmYTJfY2xrX3BpbnNbXSA9IHsKLQkvKiBTQ0sgKi8KLQk5OCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNjaWZhMl9jbGtfbXV4W10gPSB7Ci0JU0NJRkEyX1NDSzFfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNjaWZhMl9jdHJsX3BpbnNbXSA9IHsKLQkvKiBSVFMsIENUUyAqLwotCTk1LCA5NCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNjaWZhMl9jdHJsX211eFtdID0gewotCVNDSUZBMl9SVFMxX01BUkssIFNDSUZBMl9DVFMxX01BUkssCi19OwotLyogLSBTQ0lGQTMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2NpZmEzX2RhdGFfcGluc1tdID0gewotCS8qIFJYRCwgVFhEICovCi0JMTQ0LCAxNDMsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzY2lmYTNfZGF0YV9tdXhbXSA9IHsKLQlTQ0lGQTNfUlhEX01BUkssIFNDSUZBM19UWERfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNjaWZhM19jbGtfcGluc1tdID0gewotCS8qIFNDSyAqLwotCTE0MiwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNjaWZhM19jbGtfbXV4W10gPSB7Ci0JU0NJRkEzX1NDS19NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2NpZmEzX2N0cmxfMF9waW5zW10gPSB7Ci0JLyogUlRTLCBDVFMgKi8KLQk0NCwgNDMsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzY2lmYTNfY3RybF8wX211eFtdID0gewotCVNDSUZBM19SVFNfNDRfTUFSSywgU0NJRkEzX0NUU180M19NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2NpZmEzX2N0cmxfMV9waW5zW10gPSB7Ci0JLyogUlRTLCBDVFMgKi8KLQkxNDEsIDE0MCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNjaWZhM19jdHJsXzFfbXV4W10gPSB7Ci0JU0NJRkEzX1JUU18xNDFfTUFSSywgU0NJRkEzX0NUU18xNDBfTUFSSywKLX07Ci0vKiAtIFNDSUZBNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzY2lmYTRfZGF0YV9waW5zW10gPSB7Ci0JLyogUlhELCBUWEQgKi8KLQk1LCA2LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2NpZmE0X2RhdGFfbXV4W10gPSB7Ci0JU0NJRkE0X1JYRF9NQVJLLCBTQ0lGQTRfVFhEX01BUkssCi19OwotLyogLSBTQ0lGQTUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2NpZmE1X2RhdGFfcGluc1tdID0gewotCS8qIFJYRCwgVFhEICovCi0JOCwgMTIsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzY2lmYTVfZGF0YV9tdXhbXSA9IHsKLQlTQ0lGQTVfUlhEX01BUkssIFNDSUZBNV9UWERfTUFSSywKLX07Ci0vKiAtIFNDSUZCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzY2lmYl9kYXRhX3BpbnNbXSA9IHsKLQkvKiBSWEQsIFRYRCAqLwotCTE2NiwgMTY1LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2NpZmJfZGF0YV9tdXhbXSA9IHsKLQlTQ0lGQl9SWERfTUFSSywgU0NJRkJfVFhEX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzY2lmYl9jbGtfcGluc1tdID0gewotCS8qIFNDSyAqLwotCTE2MiwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNjaWZiX2Nsa19tdXhbXSA9IHsKLQlTQ0lGQl9TQ0tfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNjaWZiX2N0cmxfcGluc1tdID0gewotCS8qIFJUUywgQ1RTICovCi0JMTYzLCAxNjQsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzY2lmYl9jdHJsX211eFtdID0gewotCVNDSUZCX1JUU19NQVJLLCBTQ0lGQl9DVFNfTUFSSywKLX07Ci0vKiAtIFNESEkwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGhpMF9kYXRhMV9waW5zW10gPSB7Ci0JLyogRDAgKi8KLQkxNzMsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGhpMF9kYXRhMV9tdXhbXSA9IHsKLQlTREhJRDBfMF9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RoaTBfZGF0YTRfcGluc1tdID0gewotCS8qIERbMDozXSAqLwotCTE3MywgMTc0LCAxNzUsIDE3NiwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaGkwX2RhdGE0X211eFtdID0gewotCVNESElEMF8wX01BUkssIFNESElEMF8xX01BUkssIFNESElEMF8yX01BUkssIFNESElEMF8zX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGhpMF9jdHJsX3BpbnNbXSA9IHsKLQkvKiBDTUQsIENMSyAqLwotCTE3NywgMTcxLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RoaTBfY3RybF9tdXhbXSA9IHsKLQlTREhJQ01EMF9NQVJLLCBTREhJQ0xLMF9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RoaTBfY2RfcGluc1tdID0gewotCS8qIENEICovCi0JMTcyLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RoaTBfY2RfbXV4W10gPSB7Ci0JU0RISUNEMF9NQVJLLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RoaTBfd3BfcGluc1tdID0gewotCS8qIFdQICovCi0JMTc4LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RoaTBfd3BfbXV4W10gPSB7Ci0JU0RISVdQMF9NQVJLLAotfTsKLS8qIC0gU0RISTEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaGkxX2RhdGExX3BpbnNbXSA9IHsKLQkvKiBEMCAqLwotCTE4MCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaGkxX2RhdGExX211eFtdID0gewotCVNESElEMV8wX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGhpMV9kYXRhNF9waW5zW10gPSB7Ci0JLyogRFswOjNdICovCi0JMTgwLCAxODEsIDE4MiwgMTgzLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RoaTFfZGF0YTRfbXV4W10gPSB7Ci0JU0RISUQxXzBfTUFSSywgU0RISUQxXzFfTUFSSywgU0RISUQxXzJfTUFSSywgU0RISUQxXzNfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaGkxX2N0cmxfcGluc1tdID0gewotCS8qIENNRCwgQ0xLICovCi0JMTg0LCAxNzksCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGhpMV9jdHJsX211eFtdID0gewotCVNESElDTUQxX01BUkssIFNESElDTEsxX01BUkssCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaGkyX2RhdGExX3BpbnNbXSA9IHsKLQkvKiBEMCAqLwotCTE4NiwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaGkyX2RhdGExX211eFtdID0gewotCVNESElEMl8wX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGhpMl9kYXRhNF9waW5zW10gPSB7Ci0JLyogRFswOjNdICovCi0JMTg2LCAxODcsIDE4OCwgMTg5LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2RoaTJfZGF0YTRfbXV4W10gPSB7Ci0JU0RISUQyXzBfTUFSSywgU0RISUQyXzFfTUFSSywgU0RISUQyXzJfTUFSSywgU0RISUQyXzNfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNkaGkyX2N0cmxfcGluc1tdID0gewotCS8qIENNRCwgQ0xLICovCi0JMTkwLCAxODUsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzZGhpMl9jdHJsX211eFtdID0gewotCVNESElDTUQyX01BUkssIFNESElDTEsyX01BUkssCi19OwotLyogLSBVU0IwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXNiMF92YnVzX3BpbnNbXSA9IHsKLQkvKiBWQlVTICovCi0JMTY3LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXNiMF92YnVzX211eFtdID0gewotCVZCVVMwXzBfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVzYjBfb3RnX2lkX3BpbnNbXSA9IHsKLQkvKiBJRElOICovCi0JMTEzLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXNiMF9vdGdfaWRfbXV4W10gPSB7Ci0JSURJTl8wX01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1c2IwX290Z19jdHJsX3BpbnNbXSA9IHsKLQkvKiBQV0VOLCBFWFRMUCwgT1ZDTiwgT1ZDTjIgKi8KLQkxMTYsIDExNCwgMTE3LCAxMTUsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1c2IwX290Z19jdHJsX211eFtdID0gewotCVBXRU5fMF9NQVJLLCBFWFRMUF8wX01BUkssIE9WQ05fMF9NQVJLLCBPVkNOMl8wX01BUkssCi19OwotLyogLSBVU0IxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXNiMV92YnVzX3BpbnNbXSA9IHsKLQkvKiBWQlVTICovCi0JMTY4LAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXNiMV92YnVzX211eFtdID0gewotCVZCVVMwXzFfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVzYjFfb3RnX2lkXzBfcGluc1tdID0gewotCS8qIElESU4gKi8KLQkxMTMsCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1c2IxX290Z19pZF8wX211eFtdID0gewotCUlESU5fMV8xMTNfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVzYjFfb3RnX2lkXzFfcGluc1tdID0gewotCS8qIElESU4gKi8KLQkxOCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVzYjFfb3RnX2lkXzFfbXV4W10gPSB7Ci0JSURJTl8xXzE4X01BUkssCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB1c2IxX290Z19jdHJsXzBfcGluc1tdID0gewotCS8qIFBXRU4sIEVYVExQLCBPVkNOLCBPVkNOMiAqLwotCTExNSwgMTE2LCAxMTQsIDExNywgMTEzLAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdXNiMV9vdGdfY3RybF8wX211eFtdID0gewotCVBXRU5fMV8xMTVfTUFSSywgRVhUTFBfMV9NQVJLLCBPVkNOXzFfMTE0X01BUkssIE9WQ04yXzFfTUFSSywKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVzYjFfb3RnX2N0cmxfMV9waW5zW10gPSB7Ci0JLyogUFdFTiwgRVhUTFAsIE9WQ04sIE9WQ04yICovCi0JMTM4LCAxMTYsIDE2MiwgMTE3LCAxOCwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHVzYjFfb3RnX2N0cmxfMV9tdXhbXSA9IHsKLQlQV0VOXzFfMTM4X01BUkssIEVYVExQXzFfTUFSSywgT1ZDTl8xXzE2Ml9NQVJLLCBPVkNOMl8xX01BUkssCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNoX3BmY19waW5fZ3JvdXAgcGlubXV4X2dyb3Vwc1tdID0gewotCVNIX1BGQ19QSU5fR1JPVVAoYnNjX2RhdGE4KSwKLQlTSF9QRkNfUElOX0dST1VQKGJzY19kYXRhMTYpLAotCVNIX1BGQ19QSU5fR1JPVVAoYnNjX2NzMCksCi0JU0hfUEZDX1BJTl9HUk9VUChic2NfY3MyKSwKLQlTSF9QRkNfUElOX0dST1VQKGJzY19jczQpLAotCVNIX1BGQ19QSU5fR1JPVVAoYnNjX2NzNWEpLAotCVNIX1BGQ19QSU5fR1JPVVAoYnNjX2NzNWIpLAotCVNIX1BGQ19QSU5fR1JPVVAoYnNjX2NzNmEpLAotCVNIX1BGQ19QSU5fR1JPVVAoYnNjX3JkX3dlOCksCi0JU0hfUEZDX1BJTl9HUk9VUChic2NfcmRfd2UxNiksCi0JU0hfUEZDX1BJTl9HUk9VUChic2NfYnMpLAotCVNIX1BGQ19QSU5fR1JPVVAoYnNjX3Jkd3IpLAotCVNIX1BGQ19QSU5fR1JPVVAoY2V1X2RhdGFfMF83KSwKLQlTSF9QRkNfUElOX0dST1VQKGNldV9kYXRhXzhfMTUpLAotCVNIX1BGQ19QSU5fR1JPVVAoY2V1X2Nsa18wKSwKLQlTSF9QRkNfUElOX0dST1VQKGNldV9jbGtfMSksCi0JU0hfUEZDX1BJTl9HUk9VUChjZXVfY2xrXzIpLAotCVNIX1BGQ19QSU5fR1JPVVAoY2V1X3N5bmMpLAotCVNIX1BGQ19QSU5fR1JPVVAoY2V1X2ZpZWxkKSwKLQlTSF9QRkNfUElOX0dST1VQKGZsY3RsX2RhdGEpLAotCVNIX1BGQ19QSU5fR1JPVVAoZmxjdGxfY2UwKSwKLQlTSF9QRkNfUElOX0dST1VQKGZsY3RsX2NlMSksCi0JU0hfUEZDX1BJTl9HUk9VUChmbGN0bF9jdHJsKSwKLQlTSF9QRkNfUElOX0dST1VQKGZzaWFfbWNsa19pbiksCi0JU0hfUEZDX1BJTl9HUk9VUChmc2lhX21jbGtfb3V0KSwKLQlTSF9QRkNfUElOX0dST1VQKGZzaWFfc2Nsa19pbiksCi0JU0hfUEZDX1BJTl9HUk9VUChmc2lhX3NjbGtfb3V0KSwKLQlTSF9QRkNfUElOX0dST1VQKGZzaWFfZGF0YV9pbiksCi0JU0hfUEZDX1BJTl9HUk9VUChmc2lhX2RhdGFfb3V0KSwKLQlTSF9QRkNfUElOX0dST1VQKGZzaWFfc3BkaWZfMCksCi0JU0hfUEZDX1BJTl9HUk9VUChmc2lhX3NwZGlmXzEpLAotCVNIX1BGQ19QSU5fR1JPVVAoZnNpYl9tY2xrX2luKSwKLQlTSF9QRkNfUElOX0dST1VQKGhkbWkpLAotCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnEwXzApLAotCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnEwXzEpLAotCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnExKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMl8wKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMl8xKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxM18wKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxM18xKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxNF8wKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxNF8xKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxNSksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTZfMCksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTZfMSksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTdfMCksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTdfMSksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycThfMCksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycThfMSksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTlfMCksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTlfMSksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTEwKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMTEpLAotCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnExMl8wKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMTJfMSksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTEzXzApLAotCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnExM18xKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMTRfMCksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTE0XzEpLAotCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnExNV8wKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMTVfMSksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTE2XzApLAotCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnExNl8xKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMTcpLAotCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnExOCksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTE5KSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMjApLAotCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnEyMSksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTIyKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMjMpLAotCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnEyNCksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTI1KSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMjZfMCksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTI2XzEpLAotCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnEyN18wKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMjdfMSksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTI4XzApLAotCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnEyOF8xKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMjlfMCksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTI5XzEpLAotCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnEzMF8wKSwKLQlTSF9QRkNfUElOX0dST1VQKGludGNfaXJxMzBfMSksCi0JU0hfUEZDX1BJTl9HUk9VUChpbnRjX2lycTMxXzApLAotCVNIX1BGQ19QSU5fR1JPVVAoaW50Y19pcnEzMV8xKSwKLQlTSF9QRkNfUElOX0dST1VQKGtleXNjX2luMDRfMCksCi0JU0hfUEZDX1BJTl9HUk9VUChrZXlzY19pbjA0XzEpLAotCVNIX1BGQ19QSU5fR1JPVVAoa2V5c2NfaW41KSwKLQlTSF9QRkNfUElOX0dST1VQKGtleXNjX2luNiksCi0JU0hfUEZDX1BJTl9HUk9VUChrZXlzY19pbjcpLAotCVNIX1BGQ19QSU5fR1JPVVAoa2V5c2Nfb3V0NCksCi0JU0hfUEZDX1BJTl9HUk9VUChrZXlzY19vdXQ1KSwKLQlTSF9QRkNfUElOX0dST1VQKGtleXNjX291dDYpLAotCVNIX1BGQ19QSU5fR1JPVVAoa2V5c2Nfb3V0OCksCi0JU0hfUEZDX1BJTl9HUk9VUChsY2RfZGF0YTgpLAotCVNIX1BGQ19QSU5fR1JPVVAobGNkX2RhdGE5KSwKLQlTSF9QRkNfUElOX0dST1VQKGxjZF9kYXRhMTIpLAotCVNIX1BGQ19QSU5fR1JPVVAobGNkX2RhdGExNiksCi0JU0hfUEZDX1BJTl9HUk9VUChsY2RfZGF0YTE4KSwKLQlTSF9QRkNfUElOX0dST1VQKGxjZF9kYXRhMjQpLAotCVNIX1BGQ19QSU5fR1JPVVAobGNkX2Rpc3BsYXkpLAotCVNIX1BGQ19QSU5fR1JPVVAobGNkX2xjbGspLAotCVNIX1BGQ19QSU5fR1JPVVAobGNkX3N5bmMpLAotCVNIX1BGQ19QSU5fR1JPVVAobGNkX3N5cyksCi0JU0hfUEZDX1BJTl9HUk9VUChtbWMwX2RhdGExXzApLAotCVNIX1BGQ19QSU5fR1JPVVAobW1jMF9kYXRhNF8wKSwKLQlTSF9QRkNfUElOX0dST1VQKG1tYzBfZGF0YThfMCksCi0JU0hfUEZDX1BJTl9HUk9VUChtbWMwX2N0cmxfMCksCi0JU0hfUEZDX1BJTl9HUk9VUChtbWMwX2RhdGExXzEpLAotCVNIX1BGQ19QSU5fR1JPVVAobW1jMF9kYXRhNF8xKSwKLQlTSF9QRkNfUElOX0dST1VQKG1tYzBfZGF0YThfMSksCi0JU0hfUEZDX1BJTl9HUk9VUChtbWMwX2N0cmxfMSksCi0JU0hfUEZDX1BJTl9HUk9VUChzY2lmYTBfZGF0YSksCi0JU0hfUEZDX1BJTl9HUk9VUChzY2lmYTBfY2xrKSwKLQlTSF9QRkNfUElOX0dST1VQKHNjaWZhMF9jdHJsKSwKLQlTSF9QRkNfUElOX0dST1VQKHNjaWZhMV9kYXRhKSwKLQlTSF9QRkNfUElOX0dST1VQKHNjaWZhMV9jbGspLAotCVNIX1BGQ19QSU5fR1JPVVAoc2NpZmExX2N0cmwpLAotCVNIX1BGQ19QSU5fR1JPVVAoc2NpZmEyX2RhdGEpLAotCVNIX1BGQ19QSU5fR1JPVVAoc2NpZmEyX2NsayksCi0JU0hfUEZDX1BJTl9HUk9VUChzY2lmYTJfY3RybCksCi0JU0hfUEZDX1BJTl9HUk9VUChzY2lmYTNfZGF0YSksCi0JU0hfUEZDX1BJTl9HUk9VUChzY2lmYTNfY2xrKSwKLQlTSF9QRkNfUElOX0dST1VQKHNjaWZhM19jdHJsXzApLAotCVNIX1BGQ19QSU5fR1JPVVAoc2NpZmEzX2N0cmxfMSksCi0JU0hfUEZDX1BJTl9HUk9VUChzY2lmYTRfZGF0YSksCi0JU0hfUEZDX1BJTl9HUk9VUChzY2lmYTVfZGF0YSksCi0JU0hfUEZDX1BJTl9HUk9VUChzY2lmYl9kYXRhKSwKLQlTSF9QRkNfUElOX0dST1VQKHNjaWZiX2NsayksCi0JU0hfUEZDX1BJTl9HUk9VUChzY2lmYl9jdHJsKSwKLQlTSF9QRkNfUElOX0dST1VQKHNkaGkwX2RhdGExKSwKLQlTSF9QRkNfUElOX0dST1VQKHNkaGkwX2RhdGE0KSwKLQlTSF9QRkNfUElOX0dST1VQKHNkaGkwX2N0cmwpLAotCVNIX1BGQ19QSU5fR1JPVVAoc2RoaTBfY2QpLAotCVNIX1BGQ19QSU5fR1JPVVAoc2RoaTBfd3ApLAotCVNIX1BGQ19QSU5fR1JPVVAoc2RoaTFfZGF0YTEpLAotCVNIX1BGQ19QSU5fR1JPVVAoc2RoaTFfZGF0YTQpLAotCVNIX1BGQ19QSU5fR1JPVVAoc2RoaTFfY3RybCksCi0JU0hfUEZDX1BJTl9HUk9VUChzZGhpMl9kYXRhMSksCi0JU0hfUEZDX1BJTl9HUk9VUChzZGhpMl9kYXRhNCksCi0JU0hfUEZDX1BJTl9HUk9VUChzZGhpMl9jdHJsKSwKLQlTSF9QRkNfUElOX0dST1VQKHVzYjBfdmJ1cyksCi0JU0hfUEZDX1BJTl9HUk9VUCh1c2IwX290Z19pZCksCi0JU0hfUEZDX1BJTl9HUk9VUCh1c2IwX290Z19jdHJsKSwKLQlTSF9QRkNfUElOX0dST1VQKHVzYjFfdmJ1cyksCi0JU0hfUEZDX1BJTl9HUk9VUCh1c2IxX290Z19pZF8wKSwKLQlTSF9QRkNfUElOX0dST1VQKHVzYjFfb3RnX2lkXzEpLAotCVNIX1BGQ19QSU5fR1JPVVAodXNiMV9vdGdfY3RybF8wKSwKLQlTSF9QRkNfUElOX0dST1VQKHVzYjFfb3RnX2N0cmxfMSksCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGJzY19ncm91cHNbXSA9IHsKLQkiYnNjX2RhdGE4IiwKLQkiYnNjX2RhdGExNiIsCi0JImJzY19jczAiLAotCSJic2NfY3MyIiwKLQkiYnNjX2NzNCIsCi0JImJzY19jczVhIiwKLQkiYnNjX2NzNWIiLAotCSJic2NfY3M2YSIsCi0JImJzY19yZF93ZTgiLAotCSJic2NfcmRfd2UxNiIsCi0JImJzY19icyIsCi0JImJzY19yZHdyIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgY2V1X2dyb3Vwc1tdID0gewotCSJjZXVfZGF0YV8wXzciLAotCSJjZXVfZGF0YV84XzE1IiwKLQkiY2V1X2Nsa18wIiwKLQkiY2V1X2Nsa18xIiwKLQkiY2V1X2Nsa18yIiwKLQkiY2V1X3N5bmMiLAotCSJjZXVfZmllbGQiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmbGN0bF9ncm91cHNbXSA9IHsKLQkiZmxjdGxfZGF0YSIsCi0JImZsY3RsX2NlMCIsCi0JImZsY3RsX2NlMSIsCi0JImZsY3RsX2N0cmwiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmc2lhX2dyb3Vwc1tdID0gewotCSJmc2lhX21jbGtfaW4iLAotCSJmc2lhX21jbGtfb3V0IiwKLQkiZnNpYV9zY2xrX2luIiwKLQkiZnNpYV9zY2xrX291dCIsCi0JImZzaWFfZGF0YV9pbiIsCi0JImZzaWFfZGF0YV9vdXQiLAotCSJmc2lhX3NwZGlmXzAiLAotCSJmc2lhX3NwZGlmXzEiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBmc2liX2dyb3Vwc1tdID0gewotCSJmc2liX21jbGtfaW4iLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBoZG1pX2dyb3Vwc1tdID0gewotCSJoZG1pIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaW50Y19ncm91cHNbXSA9IHsKLQkiaW50Y19pcnEwXzAiLAotCSJpbnRjX2lycTBfMSIsCi0JImludGNfaXJxMSIsCi0JImludGNfaXJxMl8wIiwKLQkiaW50Y19pcnEyXzEiLAotCSJpbnRjX2lycTNfMCIsCi0JImludGNfaXJxM18xIiwKLQkiaW50Y19pcnE0XzAiLAotCSJpbnRjX2lycTRfMSIsCi0JImludGNfaXJxNSIsCi0JImludGNfaXJxNl8wIiwKLQkiaW50Y19pcnE2XzEiLAotCSJpbnRjX2lycTdfMCIsCi0JImludGNfaXJxN18xIiwKLQkiaW50Y19pcnE4XzAiLAotCSJpbnRjX2lycThfMSIsCi0JImludGNfaXJxOV8wIiwKLQkiaW50Y19pcnE5XzEiLAotCSJpbnRjX2lycTEwIiwKLQkiaW50Y19pcnExMSIsCi0JImludGNfaXJxMTJfMCIsCi0JImludGNfaXJxMTJfMSIsCi0JImludGNfaXJxMTNfMCIsCi0JImludGNfaXJxMTNfMSIsCi0JImludGNfaXJxMTRfMCIsCi0JImludGNfaXJxMTRfMSIsCi0JImludGNfaXJxMTVfMCIsCi0JImludGNfaXJxMTVfMSIsCi0JImludGNfaXJxMTZfMCIsCi0JImludGNfaXJxMTZfMSIsCi0JImludGNfaXJxMTciLAotCSJpbnRjX2lycTE4IiwKLQkiaW50Y19pcnExOSIsCi0JImludGNfaXJxMjAiLAotCSJpbnRjX2lycTIxIiwKLQkiaW50Y19pcnEyMiIsCi0JImludGNfaXJxMjMiLAotCSJpbnRjX2lycTI0IiwKLQkiaW50Y19pcnEyNSIsCi0JImludGNfaXJxMjZfMCIsCi0JImludGNfaXJxMjZfMSIsCi0JImludGNfaXJxMjdfMCIsCi0JImludGNfaXJxMjdfMSIsCi0JImludGNfaXJxMjhfMCIsCi0JImludGNfaXJxMjhfMSIsCi0JImludGNfaXJxMjlfMCIsCi0JImludGNfaXJxMjlfMSIsCi0JImludGNfaXJxMzBfMCIsCi0JImludGNfaXJxMzBfMSIsCi0JImludGNfaXJxMzFfMCIsCi0JImludGNfaXJxMzFfMSIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGtleXNjX2dyb3Vwc1tdID0gewotCSJrZXlzY19pbjA0XzAiLAotCSJrZXlzY19pbjA0XzEiLAotCSJrZXlzY19pbjUiLAotCSJrZXlzY19pbjYiLAotCSJrZXlzY19pbjciLAotCSJrZXlzY19vdXQ0IiwKLQkia2V5c2Nfb3V0NSIsCi0JImtleXNjX291dDYiLAotCSJrZXlzY19vdXQ4IiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbGNkX2dyb3Vwc1tdID0gewotCSJsY2RfZGF0YTgiLAotCSJsY2RfZGF0YTkiLAotCSJsY2RfZGF0YTEyIiwKLQkibGNkX2RhdGExNiIsCi0JImxjZF9kYXRhMTgiLAotCSJsY2RfZGF0YTI0IiwKLQkibGNkX2Rpc3BsYXkiLAotCSJsY2RfbGNsayIsCi0JImxjZF9zeW5jIiwKLQkibGNkX3N5cyIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IG1tYzBfZ3JvdXBzW10gPSB7Ci0JIm1tYzBfZGF0YTFfMCIsCi0JIm1tYzBfZGF0YTRfMCIsCi0JIm1tYzBfZGF0YThfMCIsCi0JIm1tYzBfY3RybF8wIiwKLQkibW1jMF9kYXRhMV8xIiwKLQkibW1jMF9kYXRhNF8xIiwKLQkibW1jMF9kYXRhOF8xIiwKLQkibW1jMF9jdHJsXzEiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzY2lmYTBfZ3JvdXBzW10gPSB7Ci0JInNjaWZhMF9kYXRhIiwKLQkic2NpZmEwX2NsayIsCi0JInNjaWZhMF9jdHJsIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2NpZmExX2dyb3Vwc1tdID0gewotCSJzY2lmYTFfZGF0YSIsCi0JInNjaWZhMV9jbGsiLAotCSJzY2lmYTFfY3RybCIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNjaWZhMl9ncm91cHNbXSA9IHsKLQkic2NpZmEyX2RhdGEiLAotCSJzY2lmYTJfY2xrIiwKLQkic2NpZmEyX2N0cmwiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzY2lmYTNfZ3JvdXBzW10gPSB7Ci0JInNjaWZhM19kYXRhIiwKLQkic2NpZmEzX2NsayIsCi0JInNjaWZhM19jdHJsXzAiLAotCSJzY2lmYTNfY3RybF8xIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2NpZmE0X2dyb3Vwc1tdID0gewotCSJzY2lmYTRfZGF0YSIsCi19OwotCi1zdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNjaWZhNV9ncm91cHNbXSA9IHsKLQkic2NpZmE1X2RhdGEiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzY2lmYl9ncm91cHNbXSA9IHsKLQkic2NpZmJfZGF0YSIsCi0JInNjaWZiX2NsayIsCi0JInNjaWZiX2N0cmwiLAotfTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzZGhpMF9ncm91cHNbXSA9IHsKLQkic2RoaTBfZGF0YTEiLAotCSJzZGhpMF9kYXRhNCIsCi0JInNkaGkwX2N0cmwiLAotCSJzZGhpMF9jZCIsCi0JInNkaGkwX3dwIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2RoaTFfZ3JvdXBzW10gPSB7Ci0JInNkaGkxX2RhdGExIiwKLQkic2RoaTFfZGF0YTQiLAotCSJzZGhpMV9jdHJsIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3Qgc2RoaTJfZ3JvdXBzW10gPSB7Ci0JInNkaGkyX2RhdGExIiwKLQkic2RoaTJfZGF0YTQiLAotCSJzZGhpMl9jdHJsIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdXNiMF9ncm91cHNbXSA9IHsKLQkidXNiMF92YnVzIiwKLQkidXNiMF9vdGdfaWQiLAotCSJ1c2IwX290Z19jdHJsIiwKLX07Ci0KLXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgdXNiMV9ncm91cHNbXSA9IHsKLQkidXNiMV92YnVzIiwKLQkidXNiMV9vdGdfaWRfMCIsCi0JInVzYjFfb3RnX2lkXzEiLAotCSJ1c2IxX290Z19jdHJsXzAiLAotCSJ1c2IxX290Z19jdHJsXzEiLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzaF9wZmNfZnVuY3Rpb24gcGlubXV4X2Z1bmN0aW9uc1tdID0gewotCVNIX1BGQ19GVU5DVElPTihic2MpLAotCVNIX1BGQ19GVU5DVElPTihjZXUpLAotCVNIX1BGQ19GVU5DVElPTihmbGN0bCksCi0JU0hfUEZDX0ZVTkNUSU9OKGZzaWEpLAotCVNIX1BGQ19GVU5DVElPTihmc2liKSwKLQlTSF9QRkNfRlVOQ1RJT04oaGRtaSksCi0JU0hfUEZDX0ZVTkNUSU9OKGludGMpLAotCVNIX1BGQ19GVU5DVElPTihrZXlzYyksCi0JU0hfUEZDX0ZVTkNUSU9OKGxjZCksCi0JU0hfUEZDX0ZVTkNUSU9OKG1tYzApLAotCVNIX1BGQ19GVU5DVElPTihzY2lmYTApLAotCVNIX1BGQ19GVU5DVElPTihzY2lmYTEpLAotCVNIX1BGQ19GVU5DVElPTihzY2lmYTIpLAotCVNIX1BGQ19GVU5DVElPTihzY2lmYTMpLAotCVNIX1BGQ19GVU5DVElPTihzY2lmYTQpLAotCVNIX1BGQ19GVU5DVElPTihzY2lmYTUpLAotCVNIX1BGQ19GVU5DVElPTihzY2lmYiksCi0JU0hfUEZDX0ZVTkNUSU9OKHNkaGkwKSwKLQlTSF9QRkNfRlVOQ1RJT04oc2RoaTEpLAotCVNIX1BGQ19GVU5DVElPTihzZGhpMiksCi0JU0hfUEZDX0ZVTkNUSU9OKHVzYjApLAotCVNIX1BGQ19GVU5DVElPTih1c2IxKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgcGlubXV4X2NvbmZpZ19yZWdzW10gPSB7Ci0JUE9SVENSKDAsCTB4RTYwNTEwMDApLCAvKiBQT1JUMENSICovCi0JUE9SVENSKDEsCTB4RTYwNTEwMDEpLCAvKiBQT1JUMUNSICovCi0JUE9SVENSKDIsCTB4RTYwNTEwMDIpLCAvKiBQT1JUMkNSICovCi0JUE9SVENSKDMsCTB4RTYwNTEwMDMpLCAvKiBQT1JUM0NSICovCi0JUE9SVENSKDQsCTB4RTYwNTEwMDQpLCAvKiBQT1JUNENSICovCi0JUE9SVENSKDUsCTB4RTYwNTEwMDUpLCAvKiBQT1JUNUNSICovCi0JUE9SVENSKDYsCTB4RTYwNTEwMDYpLCAvKiBQT1JUNkNSICovCi0JUE9SVENSKDcsCTB4RTYwNTEwMDcpLCAvKiBQT1JUN0NSICovCi0JUE9SVENSKDgsCTB4RTYwNTEwMDgpLCAvKiBQT1JUOENSICovCi0JUE9SVENSKDksCTB4RTYwNTEwMDkpLCAvKiBQT1JUOUNSICovCi0JUE9SVENSKDEwLAkweEU2MDUxMDBBKSwgLyogUE9SVDEwQ1IgKi8KLQlQT1JUQ1IoMTEsCTB4RTYwNTEwMEIpLCAvKiBQT1JUMTFDUiAqLwotCVBPUlRDUigxMiwJMHhFNjA1MTAwQyksIC8qIFBPUlQxMkNSICovCi0JUE9SVENSKDEzLAkweEU2MDUxMDBEKSwgLyogUE9SVDEzQ1IgKi8KLQlQT1JUQ1IoMTQsCTB4RTYwNTEwMEUpLCAvKiBQT1JUMTRDUiAqLwotCVBPUlRDUigxNSwJMHhFNjA1MTAwRiksIC8qIFBPUlQxNUNSICovCi0JUE9SVENSKDE2LAkweEU2MDUxMDEwKSwgLyogUE9SVDE2Q1IgKi8KLQlQT1JUQ1IoMTcsCTB4RTYwNTEwMTEpLCAvKiBQT1JUMTdDUiAqLwotCVBPUlRDUigxOCwJMHhFNjA1MTAxMiksIC8qIFBPUlQxOENSICovCi0JUE9SVENSKDE5LAkweEU2MDUxMDEzKSwgLyogUE9SVDE5Q1IgKi8KLQlQT1JUQ1IoMjAsCTB4RTYwNTEwMTQpLCAvKiBQT1JUMjBDUiAqLwotCVBPUlRDUigyMSwJMHhFNjA1MTAxNSksIC8qIFBPUlQyMUNSICovCi0JUE9SVENSKDIyLAkweEU2MDUxMDE2KSwgLyogUE9SVDIyQ1IgKi8KLQlQT1JUQ1IoMjMsCTB4RTYwNTEwMTcpLCAvKiBQT1JUMjNDUiAqLwotCVBPUlRDUigyNCwJMHhFNjA1MTAxOCksIC8qIFBPUlQyNENSICovCi0JUE9SVENSKDI1LAkweEU2MDUxMDE5KSwgLyogUE9SVDI1Q1IgKi8KLQlQT1JUQ1IoMjYsCTB4RTYwNTEwMUEpLCAvKiBQT1JUMjZDUiAqLwotCVBPUlRDUigyNywJMHhFNjA1MTAxQiksIC8qIFBPUlQyN0NSICovCi0JUE9SVENSKDI4LAkweEU2MDUxMDFDKSwgLyogUE9SVDI4Q1IgKi8KLQlQT1JUQ1IoMjksCTB4RTYwNTEwMUQpLCAvKiBQT1JUMjlDUiAqLwotCVBPUlRDUigzMCwJMHhFNjA1MTAxRSksIC8qIFBPUlQzMENSICovCi0JUE9SVENSKDMxLAkweEU2MDUxMDFGKSwgLyogUE9SVDMxQ1IgKi8KLQlQT1JUQ1IoMzIsCTB4RTYwNTEwMjApLCAvKiBQT1JUMzJDUiAqLwotCVBPUlRDUigzMywJMHhFNjA1MTAyMSksIC8qIFBPUlQzM0NSICovCi0JUE9SVENSKDM0LAkweEU2MDUxMDIyKSwgLyogUE9SVDM0Q1IgKi8KLQlQT1JUQ1IoMzUsCTB4RTYwNTEwMjMpLCAvKiBQT1JUMzVDUiAqLwotCVBPUlRDUigzNiwJMHhFNjA1MTAyNCksIC8qIFBPUlQzNkNSICovCi0JUE9SVENSKDM3LAkweEU2MDUxMDI1KSwgLyogUE9SVDM3Q1IgKi8KLQlQT1JUQ1IoMzgsCTB4RTYwNTEwMjYpLCAvKiBQT1JUMzhDUiAqLwotCVBPUlRDUigzOSwJMHhFNjA1MTAyNyksIC8qIFBPUlQzOUNSICovCi0JUE9SVENSKDQwLAkweEU2MDUxMDI4KSwgLyogUE9SVDQwQ1IgKi8KLQlQT1JUQ1IoNDEsCTB4RTYwNTEwMjkpLCAvKiBQT1JUNDFDUiAqLwotCVBPUlRDUig0MiwJMHhFNjA1MTAyQSksIC8qIFBPUlQ0MkNSICovCi0JUE9SVENSKDQzLAkweEU2MDUxMDJCKSwgLyogUE9SVDQzQ1IgKi8KLQlQT1JUQ1IoNDQsCTB4RTYwNTEwMkMpLCAvKiBQT1JUNDRDUiAqLwotCVBPUlRDUig0NSwJMHhFNjA1MTAyRCksIC8qIFBPUlQ0NUNSICovCi0JUE9SVENSKDQ2LAkweEU2MDUyMDJFKSwgLyogUE9SVDQ2Q1IgKi8KLQlQT1JUQ1IoNDcsCTB4RTYwNTIwMkYpLCAvKiBQT1JUNDdDUiAqLwotCVBPUlRDUig0OCwJMHhFNjA1MjAzMCksIC8qIFBPUlQ0OENSICovCi0JUE9SVENSKDQ5LAkweEU2MDUyMDMxKSwgLyogUE9SVDQ5Q1IgKi8KLQlQT1JUQ1IoNTAsCTB4RTYwNTIwMzIpLCAvKiBQT1JUNTBDUiAqLwotCVBPUlRDUig1MSwJMHhFNjA1MjAzMyksIC8qIFBPUlQ1MUNSICovCi0JUE9SVENSKDUyLAkweEU2MDUyMDM0KSwgLyogUE9SVDUyQ1IgKi8KLQlQT1JUQ1IoNTMsCTB4RTYwNTIwMzUpLCAvKiBQT1JUNTNDUiAqLwotCVBPUlRDUig1NCwJMHhFNjA1MjAzNiksIC8qIFBPUlQ1NENSICovCi0JUE9SVENSKDU1LAkweEU2MDUyMDM3KSwgLyogUE9SVDU1Q1IgKi8KLQlQT1JUQ1IoNTYsCTB4RTYwNTIwMzgpLCAvKiBQT1JUNTZDUiAqLwotCVBPUlRDUig1NywJMHhFNjA1MjAzOSksIC8qIFBPUlQ1N0NSICovCi0JUE9SVENSKDU4LAkweEU2MDUyMDNBKSwgLyogUE9SVDU4Q1IgKi8KLQlQT1JUQ1IoNTksCTB4RTYwNTIwM0IpLCAvKiBQT1JUNTlDUiAqLwotCVBPUlRDUig2MCwJMHhFNjA1MjAzQyksIC8qIFBPUlQ2MENSICovCi0JUE9SVENSKDYxLAkweEU2MDUyMDNEKSwgLyogUE9SVDYxQ1IgKi8KLQlQT1JUQ1IoNjIsCTB4RTYwNTIwM0UpLCAvKiBQT1JUNjJDUiAqLwotCVBPUlRDUig2MywJMHhFNjA1MjAzRiksIC8qIFBPUlQ2M0NSICovCi0JUE9SVENSKDY0LAkweEU2MDUyMDQwKSwgLyogUE9SVDY0Q1IgKi8KLQlQT1JUQ1IoNjUsCTB4RTYwNTIwNDEpLCAvKiBQT1JUNjVDUiAqLwotCVBPUlRDUig2NiwJMHhFNjA1MjA0MiksIC8qIFBPUlQ2NkNSICovCi0JUE9SVENSKDY3LAkweEU2MDUyMDQzKSwgLyogUE9SVDY3Q1IgKi8KLQlQT1JUQ1IoNjgsCTB4RTYwNTIwNDQpLCAvKiBQT1JUNjhDUiAqLwotCVBPUlRDUig2OSwJMHhFNjA1MjA0NSksIC8qIFBPUlQ2OUNSICovCi0JUE9SVENSKDcwLAkweEU2MDUyMDQ2KSwgLyogUE9SVDcwQ1IgKi8KLQlQT1JUQ1IoNzEsCTB4RTYwNTIwNDcpLCAvKiBQT1JUNzFDUiAqLwotCVBPUlRDUig3MiwJMHhFNjA1MjA0OCksIC8qIFBPUlQ3MkNSICovCi0JUE9SVENSKDczLAkweEU2MDUyMDQ5KSwgLyogUE9SVDczQ1IgKi8KLQlQT1JUQ1IoNzQsCTB4RTYwNTIwNEEpLCAvKiBQT1JUNzRDUiAqLwotCVBPUlRDUig3NSwJMHhFNjA1MjA0QiksIC8qIFBPUlQ3NUNSICovCi0JUE9SVENSKDc2LAkweEU2MDUwMDRDKSwgLyogUE9SVDc2Q1IgKi8KLQlQT1JUQ1IoNzcsCTB4RTYwNTAwNEQpLCAvKiBQT1JUNzdDUiAqLwotCVBPUlRDUig3OCwJMHhFNjA1MDA0RSksIC8qIFBPUlQ3OENSICovCi0JUE9SVENSKDc5LAkweEU2MDUwMDRGKSwgLyogUE9SVDc5Q1IgKi8KLQlQT1JUQ1IoODAsCTB4RTYwNTAwNTApLCAvKiBQT1JUODBDUiAqLwotCVBPUlRDUig4MSwJMHhFNjA1MDA1MSksIC8qIFBPUlQ4MUNSICovCi0JUE9SVENSKDgyLAkweEU2MDUwMDUyKSwgLyogUE9SVDgyQ1IgKi8KLQlQT1JUQ1IoODMsCTB4RTYwNTAwNTMpLCAvKiBQT1JUODNDUiAqLwotCVBPUlRDUig4NCwJMHhFNjA1MDA1NCksIC8qIFBPUlQ4NENSICovCi0JUE9SVENSKDg1LAkweEU2MDUwMDU1KSwgLyogUE9SVDg1Q1IgKi8KLQlQT1JUQ1IoODYsCTB4RTYwNTAwNTYpLCAvKiBQT1JUODZDUiAqLwotCVBPUlRDUig4NywJMHhFNjA1MDA1NyksIC8qIFBPUlQ4N0NSICovCi0JUE9SVENSKDg4LAkweEU2MDUwMDU4KSwgLyogUE9SVDg4Q1IgKi8KLQlQT1JUQ1IoODksCTB4RTYwNTAwNTkpLCAvKiBQT1JUODlDUiAqLwotCVBPUlRDUig5MCwJMHhFNjA1MDA1QSksIC8qIFBPUlQ5MENSICovCi0JUE9SVENSKDkxLAkweEU2MDUwMDVCKSwgLyogUE9SVDkxQ1IgKi8KLQlQT1JUQ1IoOTIsCTB4RTYwNTAwNUMpLCAvKiBQT1JUOTJDUiAqLwotCVBPUlRDUig5MywJMHhFNjA1MDA1RCksIC8qIFBPUlQ5M0NSICovCi0JUE9SVENSKDk0LAkweEU2MDUwMDVFKSwgLyogUE9SVDk0Q1IgKi8KLQlQT1JUQ1IoOTUsCTB4RTYwNTAwNUYpLCAvKiBQT1JUOTVDUiAqLwotCVBPUlRDUig5NiwJMHhFNjA1MDA2MCksIC8qIFBPUlQ5NkNSICovCi0JUE9SVENSKDk3LAkweEU2MDUwMDYxKSwgLyogUE9SVDk3Q1IgKi8KLQlQT1JUQ1IoOTgsCTB4RTYwNTAwNjIpLCAvKiBQT1JUOThDUiAqLwotCVBPUlRDUig5OSwJMHhFNjA1MDA2MyksIC8qIFBPUlQ5OUNSICovCi0JUE9SVENSKDEwMCwJMHhFNjA1MzA2NCksIC8qIFBPUlQxMDBDUiAqLwotCVBPUlRDUigxMDEsCTB4RTYwNTMwNjUpLCAvKiBQT1JUMTAxQ1IgKi8KLQlQT1JUQ1IoMTAyLAkweEU2MDUzMDY2KSwgLyogUE9SVDEwMkNSICovCi0JUE9SVENSKDEwMywJMHhFNjA1MzA2NyksIC8qIFBPUlQxMDNDUiAqLwotCVBPUlRDUigxMDQsCTB4RTYwNTMwNjgpLCAvKiBQT1JUMTA0Q1IgKi8KLQlQT1JUQ1IoMTA1LAkweEU2MDUzMDY5KSwgLyogUE9SVDEwNUNSICovCi0JUE9SVENSKDEwNiwJMHhFNjA1MzA2QSksIC8qIFBPUlQxMDZDUiAqLwotCVBPUlRDUigxMDcsCTB4RTYwNTMwNkIpLCAvKiBQT1JUMTA3Q1IgKi8KLQlQT1JUQ1IoMTA4LAkweEU2MDUzMDZDKSwgLyogUE9SVDEwOENSICovCi0JUE9SVENSKDEwOSwJMHhFNjA1MzA2RCksIC8qIFBPUlQxMDlDUiAqLwotCVBPUlRDUigxMTAsCTB4RTYwNTMwNkUpLCAvKiBQT1JUMTEwQ1IgKi8KLQlQT1JUQ1IoMTExLAkweEU2MDUzMDZGKSwgLyogUE9SVDExMUNSICovCi0JUE9SVENSKDExMiwJMHhFNjA1MzA3MCksIC8qIFBPUlQxMTJDUiAqLwotCVBPUlRDUigxMTMsCTB4RTYwNTMwNzEpLCAvKiBQT1JUMTEzQ1IgKi8KLQlQT1JUQ1IoMTE0LAkweEU2MDUzMDcyKSwgLyogUE9SVDExNENSICovCi0JUE9SVENSKDExNSwJMHhFNjA1MzA3MyksIC8qIFBPUlQxMTVDUiAqLwotCVBPUlRDUigxMTYsCTB4RTYwNTMwNzQpLCAvKiBQT1JUMTE2Q1IgKi8KLQlQT1JUQ1IoMTE3LAkweEU2MDUzMDc1KSwgLyogUE9SVDExN0NSICovCi0JUE9SVENSKDExOCwJMHhFNjA1MzA3NiksIC8qIFBPUlQxMThDUiAqLwotCVBPUlRDUigxMTksCTB4RTYwNTMwNzcpLCAvKiBQT1JUMTE5Q1IgKi8KLQlQT1JUQ1IoMTIwLAkweEU2MDUzMDc4KSwgLyogUE9SVDEyMENSICovCi0JUE9SVENSKDEyMSwJMHhFNjA1MDA3OSksIC8qIFBPUlQxMjFDUiAqLwotCVBPUlRDUigxMjIsCTB4RTYwNTAwN0EpLCAvKiBQT1JUMTIyQ1IgKi8KLQlQT1JUQ1IoMTIzLAkweEU2MDUwMDdCKSwgLyogUE9SVDEyM0NSICovCi0JUE9SVENSKDEyNCwJMHhFNjA1MDA3QyksIC8qIFBPUlQxMjRDUiAqLwotCVBPUlRDUigxMjUsCTB4RTYwNTAwN0QpLCAvKiBQT1JUMTI1Q1IgKi8KLQlQT1JUQ1IoMTI2LAkweEU2MDUwMDdFKSwgLyogUE9SVDEyNkNSICovCi0JUE9SVENSKDEyNywJMHhFNjA1MDA3RiksIC8qIFBPUlQxMjdDUiAqLwotCVBPUlRDUigxMjgsCTB4RTYwNTAwODApLCAvKiBQT1JUMTI4Q1IgKi8KLQlQT1JUQ1IoMTI5LAkweEU2MDUwMDgxKSwgLyogUE9SVDEyOUNSICovCi0JUE9SVENSKDEzMCwJMHhFNjA1MDA4MiksIC8qIFBPUlQxMzBDUiAqLwotCVBPUlRDUigxMzEsCTB4RTYwNTAwODMpLCAvKiBQT1JUMTMxQ1IgKi8KLQlQT1JUQ1IoMTMyLAkweEU2MDUwMDg0KSwgLyogUE9SVDEzMkNSICovCi0JUE9SVENSKDEzMywJMHhFNjA1MDA4NSksIC8qIFBPUlQxMzNDUiAqLwotCVBPUlRDUigxMzQsCTB4RTYwNTAwODYpLCAvKiBQT1JUMTM0Q1IgKi8KLQlQT1JUQ1IoMTM1LAkweEU2MDUwMDg3KSwgLyogUE9SVDEzNUNSICovCi0JUE9SVENSKDEzNiwJMHhFNjA1MDA4OCksIC8qIFBPUlQxMzZDUiAqLwotCVBPUlRDUigxMzcsCTB4RTYwNTAwODkpLCAvKiBQT1JUMTM3Q1IgKi8KLQlQT1JUQ1IoMTM4LAkweEU2MDUwMDhBKSwgLyogUE9SVDEzOENSICovCi0JUE9SVENSKDEzOSwJMHhFNjA1MDA4QiksIC8qIFBPUlQxMzlDUiAqLwotCVBPUlRDUigxNDAsCTB4RTYwNTAwOEMpLCAvKiBQT1JUMTQwQ1IgKi8KLQlQT1JUQ1IoMTQxLAkweEU2MDUwMDhEKSwgLyogUE9SVDE0MUNSICovCi0JUE9SVENSKDE0MiwJMHhFNjA1MDA4RSksIC8qIFBPUlQxNDJDUiAqLwotCVBPUlRDUigxNDMsCTB4RTYwNTAwOEYpLCAvKiBQT1JUMTQzQ1IgKi8KLQlQT1JUQ1IoMTQ0LAkweEU2MDUwMDkwKSwgLyogUE9SVDE0NENSICovCi0JUE9SVENSKDE0NSwJMHhFNjA1MDA5MSksIC8qIFBPUlQxNDVDUiAqLwotCVBPUlRDUigxNDYsCTB4RTYwNTAwOTIpLCAvKiBQT1JUMTQ2Q1IgKi8KLQlQT1JUQ1IoMTQ3LAkweEU2MDUwMDkzKSwgLyogUE9SVDE0N0NSICovCi0JUE9SVENSKDE0OCwJMHhFNjA1MDA5NCksIC8qIFBPUlQxNDhDUiAqLwotCVBPUlRDUigxNDksCTB4RTYwNTAwOTUpLCAvKiBQT1JUMTQ5Q1IgKi8KLQlQT1JUQ1IoMTUwLAkweEU2MDUwMDk2KSwgLyogUE9SVDE1MENSICovCi0JUE9SVENSKDE1MSwJMHhFNjA1MDA5NyksIC8qIFBPUlQxNTFDUiAqLwotCVBPUlRDUigxNTIsCTB4RTYwNTMwOTgpLCAvKiBQT1JUMTUyQ1IgKi8KLQlQT1JUQ1IoMTUzLAkweEU2MDUzMDk5KSwgLyogUE9SVDE1M0NSICovCi0JUE9SVENSKDE1NCwJMHhFNjA1MzA5QSksIC8qIFBPUlQxNTRDUiAqLwotCVBPUlRDUigxNTUsCTB4RTYwNTMwOUIpLCAvKiBQT1JUMTU1Q1IgKi8KLQlQT1JUQ1IoMTU2LAkweEU2MDUwMDlDKSwgLyogUE9SVDE1NkNSICovCi0JUE9SVENSKDE1NywJMHhFNjA1MDA5RCksIC8qIFBPUlQxNTdDUiAqLwotCVBPUlRDUigxNTgsCTB4RTYwNTAwOUUpLCAvKiBQT1JUMTU4Q1IgKi8KLQlQT1JUQ1IoMTU5LAkweEU2MDUwMDlGKSwgLyogUE9SVDE1OUNSICovCi0JUE9SVENSKDE2MCwJMHhFNjA1MDBBMCksIC8qIFBPUlQxNjBDUiAqLwotCVBPUlRDUigxNjEsCTB4RTYwNTAwQTEpLCAvKiBQT1JUMTYxQ1IgKi8KLQlQT1JUQ1IoMTYyLAkweEU2MDUwMEEyKSwgLyogUE9SVDE2MkNSICovCi0JUE9SVENSKDE2MywJMHhFNjA1MDBBMyksIC8qIFBPUlQxNjNDUiAqLwotCVBPUlRDUigxNjQsCTB4RTYwNTAwQTQpLCAvKiBQT1JUMTY0Q1IgKi8KLQlQT1JUQ1IoMTY1LAkweEU2MDUwMEE1KSwgLyogUE9SVDE2NUNSICovCi0JUE9SVENSKDE2NiwJMHhFNjA1MDBBNiksIC8qIFBPUlQxNjZDUiAqLwotCVBPUlRDUigxNjcsCTB4RTYwNTIwQTcpLCAvKiBQT1JUMTY3Q1IgKi8KLQlQT1JUQ1IoMTY4LAkweEU2MDUyMEE4KSwgLyogUE9SVDE2OENSICovCi0JUE9SVENSKDE2OSwJMHhFNjA1MjBBOSksIC8qIFBPUlQxNjlDUiAqLwotCVBPUlRDUigxNzAsCTB4RTYwNTIwQUEpLCAvKiBQT1JUMTcwQ1IgKi8KLQlQT1JUQ1IoMTcxLAkweEU2MDUyMEFCKSwgLyogUE9SVDE3MUNSICovCi0JUE9SVENSKDE3MiwJMHhFNjA1MjBBQyksIC8qIFBPUlQxNzJDUiAqLwotCVBPUlRDUigxNzMsCTB4RTYwNTIwQUQpLCAvKiBQT1JUMTczQ1IgKi8KLQlQT1JUQ1IoMTc0LAkweEU2MDUyMEFFKSwgLyogUE9SVDE3NENSICovCi0JUE9SVENSKDE3NSwJMHhFNjA1MjBBRiksIC8qIFBPUlQxNzVDUiAqLwotCVBPUlRDUigxNzYsCTB4RTYwNTIwQjApLCAvKiBQT1JUMTc2Q1IgKi8KLQlQT1JUQ1IoMTc3LAkweEU2MDUyMEIxKSwgLyogUE9SVDE3N0NSICovCi0JUE9SVENSKDE3OCwJMHhFNjA1MjBCMiksIC8qIFBPUlQxNzhDUiAqLwotCVBPUlRDUigxNzksCTB4RTYwNTIwQjMpLCAvKiBQT1JUMTc5Q1IgKi8KLQlQT1JUQ1IoMTgwLAkweEU2MDUyMEI0KSwgLyogUE9SVDE4MENSICovCi0JUE9SVENSKDE4MSwJMHhFNjA1MjBCNSksIC8qIFBPUlQxODFDUiAqLwotCVBPUlRDUigxODIsCTB4RTYwNTIwQjYpLCAvKiBQT1JUMTgyQ1IgKi8KLQlQT1JUQ1IoMTgzLAkweEU2MDUyMEI3KSwgLyogUE9SVDE4M0NSICovCi0JUE9SVENSKDE4NCwJMHhFNjA1MjBCOCksIC8qIFBPUlQxODRDUiAqLwotCVBPUlRDUigxODUsCTB4RTYwNTIwQjkpLCAvKiBQT1JUMTg1Q1IgKi8KLQlQT1JUQ1IoMTg2LAkweEU2MDUyMEJBKSwgLyogUE9SVDE4NkNSICovCi0JUE9SVENSKDE4NywJMHhFNjA1MjBCQiksIC8qIFBPUlQxODdDUiAqLwotCVBPUlRDUigxODgsCTB4RTYwNTIwQkMpLCAvKiBQT1JUMTg4Q1IgKi8KLQlQT1JUQ1IoMTg5LAkweEU2MDUyMEJEKSwgLyogUE9SVDE4OUNSICovCi0JUE9SVENSKDE5MCwJMHhFNjA1MjBCRSksIC8qIFBPUlQxOTBDUiAqLwotCi0JeyBQSU5NVVhfQ0ZHX1JFRygiTVNFTDFDUiIsIDB4RTYwNTgwMEMsIDMyLCAxKSB7Ci0JCQlNU0VMMUNSXzMxXzAsCU1TRUwxQ1JfMzFfMSwKLQkJCU1TRUwxQ1JfMzBfMCwJTVNFTDFDUl8zMF8xLAotCQkJTVNFTDFDUl8yOV8wLAlNU0VMMUNSXzI5XzEsCi0JCQlNU0VMMUNSXzI4XzAsCU1TRUwxQ1JfMjhfMSwKLQkJCU1TRUwxQ1JfMjdfMCwJTVNFTDFDUl8yN18xLAotCQkJTVNFTDFDUl8yNl8wLAlNU0VMMUNSXzI2XzEsCi0JCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkJCU1TRUwxQ1JfMTZfMCwJTVNFTDFDUl8xNl8xLAotCQkJTVNFTDFDUl8xNV8wLAlNU0VMMUNSXzE1XzEsCi0JCQlNU0VMMUNSXzE0XzAsCU1TRUwxQ1JfMTRfMSwKLQkJCU1TRUwxQ1JfMTNfMCwJTVNFTDFDUl8xM18xLAotCQkJTVNFTDFDUl8xMl8wLAlNU0VMMUNSXzEyXzEsCi0JCQkwLCAwLCAwLCAwLAotCQkJTVNFTDFDUl85XzAsCU1TRUwxQ1JfOV8xLAotCQkJTVNFTDFDUl84XzAsCU1TRUwxQ1JfOF8xLAotCQkJTVNFTDFDUl83XzAsCU1TRUwxQ1JfN18xLAotCQkJTVNFTDFDUl82XzAsCU1TRUwxQ1JfNl8xLAotCQkJMCwgMCwKLQkJCU1TRUwxQ1JfNF8wLAlNU0VMMUNSXzRfMSwKLQkJCU1TRUwxQ1JfM18wLAlNU0VMMUNSXzNfMSwKLQkJCU1TRUwxQ1JfMl8wLAlNU0VMMUNSXzJfMSwKLQkJCTAsIDAsCi0JCQlNU0VMMUNSXzBfMCwJTVNFTDFDUl8wXzEsCi0JCX0KLQl9LAotCXsgUElOTVVYX0NGR19SRUcoIk1TRUwzQ1IiLCAweEU2MDU4MDIwLCAzMiwgMSkgewotCQkJMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIDAsCi0JCQlNU0VMM0NSXzI3XzAsCU1TRUwzQ1JfMjdfMSwKLQkJCU1TRUwzQ1JfMjZfMCwJTVNFTDNDUl8yNl8xLAotCQkJMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIDAsCi0JCQlNU0VMM0NSXzIxXzAsCU1TRUwzQ1JfMjFfMSwKLQkJCU1TRUwzQ1JfMjBfMCwJTVNFTDNDUl8yMF8xLAotCQkJMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIDAsCi0JCQlNU0VMM0NSXzE1XzAsCU1TRUwzQ1JfMTVfMSwKLQkJCTAsIDAsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLAotCQkJMCwgMCwKLQkJCU1TRUwzQ1JfOV8wLAlNU0VMM0NSXzlfMSwKLQkJCTAsIDAsIDAsIDAsCi0JCQlNU0VMM0NSXzZfMCwJTVNFTDNDUl82XzEsCi0JCQkwLCAwLCAwLCAwLAotCQkJMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIDAsCi0JCQl9Ci0JfSwKLQl7IFBJTk1VWF9DRkdfUkVHKCJNU0VMNENSIiwgMHhFNjA1ODAyNCwgMzIsIDEpIHsKLQkJCTAsIDAsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLAotCQkJMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLAotCQkJMCwgMCwgMCwgMCwKLQkJCU1TRUw0Q1JfMTlfMCwJTVNFTDRDUl8xOV8xLAotCQkJTVNFTDRDUl8xOF8wLAlNU0VMNENSXzE4XzEsCi0JCQlNU0VMNENSXzE3XzAsCU1TRUw0Q1JfMTdfMSwKLQkJCU1TRUw0Q1JfMTZfMCwJTVNFTDRDUl8xNl8xLAotCQkJTVNFTDRDUl8xNV8wLAlNU0VMNENSXzE1XzEsCi0JCQlNU0VMNENSXzE0XzAsCU1TRUw0Q1JfMTRfMSwKLQkJCTAsIDAsIDAsIDAsCi0JCQkwLCAwLAotCQkJTVNFTDRDUl8xMF8wLAlNU0VMNENSXzEwXzEsCi0JCQkwLCAwLCAwLCAwLAotCQkJMCwgMCwKLQkJCU1TRUw0Q1JfNl8wLAlNU0VMNENSXzZfMSwKLQkJCTAsIDAsCi0JCQlNU0VMNENSXzRfMCwJTVNFTDRDUl80XzEsCi0JCQkwLCAwLCAwLCAwLAotCQkJTVNFTDRDUl8xXzAsCU1TRUw0Q1JfMV8xLAotCQkJMCwgMCwKLQkJfQotCX0sCi0JeyB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwaW5tdXhfZGF0YV9yZWcgcGlubXV4X2RhdGFfcmVnc1tdID0gewotCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JUTDA5NV8wNjREUiIsIDB4RTYwNTQwMDgsIDMyKSB7Ci0JCQlQT1JUOTVfREFUQSwgUE9SVDk0X0RBVEEsIFBPUlQ5M19EQVRBLCBQT1JUOTJfREFUQSwKLQkJCVBPUlQ5MV9EQVRBLCBQT1JUOTBfREFUQSwgUE9SVDg5X0RBVEEsIFBPUlQ4OF9EQVRBLAotCQkJUE9SVDg3X0RBVEEsIFBPUlQ4Nl9EQVRBLCBQT1JUODVfREFUQSwgUE9SVDg0X0RBVEEsCi0JCQlQT1JUODNfREFUQSwgUE9SVDgyX0RBVEEsIFBPUlQ4MV9EQVRBLCBQT1JUODBfREFUQSwKLQkJCVBPUlQ3OV9EQVRBLCBQT1JUNzhfREFUQSwgUE9SVDc3X0RBVEEsIFBPUlQ3Nl9EQVRBLAotCQkJMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLAotCQl9Ci0JfSwKLQl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVEwxMjdfMDk2RFIiLCAweEU2MDU0MDBDLCAzMikgewotCQkJUE9SVDEyN19EQVRBLCBQT1JUMTI2X0RBVEEsIFBPUlQxMjVfREFUQSwgUE9SVDEyNF9EQVRBLAotCQkJUE9SVDEyM19EQVRBLCBQT1JUMTIyX0RBVEEsIFBPUlQxMjFfREFUQSwgMCwKLQkJCTAsIDAsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLAotCQkJMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLAotCQkJUE9SVDk5X0RBVEEsICBQT1JUOThfREFUQSwgIFBPUlQ5N19EQVRBLCAgUE9SVDk2X0RBVEEsCi0JCX0KLQl9LAotCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JUTDE1OV8xMjhEUiIsIDB4RTYwNTQwMTAsIDMyKSB7Ci0JCQlQT1JUMTU5X0RBVEEsIFBPUlQxNThfREFUQSwgUE9SVDE1N19EQVRBLCBQT1JUMTU2X0RBVEEsCi0JCQkwLCAwLCAwLCAwLAotCQkJUE9SVDE1MV9EQVRBLCBQT1JUMTUwX0RBVEEsIFBPUlQxNDlfREFUQSwgUE9SVDE0OF9EQVRBLAotCQkJUE9SVDE0N19EQVRBLCBQT1JUMTQ2X0RBVEEsIFBPUlQxNDVfREFUQSwgUE9SVDE0NF9EQVRBLAotCQkJUE9SVDE0M19EQVRBLCBQT1JUMTQyX0RBVEEsIFBPUlQxNDFfREFUQSwgUE9SVDE0MF9EQVRBLAotCQkJUE9SVDEzOV9EQVRBLCBQT1JUMTM4X0RBVEEsIFBPUlQxMzdfREFUQSwgUE9SVDEzNl9EQVRBLAotCQkJUE9SVDEzNV9EQVRBLCBQT1JUMTM0X0RBVEEsIFBPUlQxMzNfREFUQSwgUE9SVDEzMl9EQVRBLAotCQkJUE9SVDEzMV9EQVRBLCBQT1JUMTMwX0RBVEEsIFBPUlQxMjlfREFUQSwgUE9SVDEyOF9EQVRBLAotCQl9Ci0JfSwKLQl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVEwxOTFfMTYwRFIiLCAweEU2MDU0MDE0LCAzMikgewotCQkJMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLAotCQkJMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLAotCQkJMCwJICAgICAgUE9SVDE2Nl9EQVRBLCBQT1JUMTY1X0RBVEEsIFBPUlQxNjRfREFUQSwKLQkJCVBPUlQxNjNfREFUQSwgUE9SVDE2Ml9EQVRBLCBQT1JUMTYxX0RBVEEsIFBPUlQxNjBfREFUQSwKLQkJfQotCX0sCi0JeyBQSU5NVVhfREFUQV9SRUcoIlBPUlREMDMxXzAwMERSIiwgMHhFNjA1NTAwMCwgMzIpIHsKLQkJCVBPUlQzMV9EQVRBLCBQT1JUMzBfREFUQSwgUE9SVDI5X0RBVEEsIFBPUlQyOF9EQVRBLAotCQkJUE9SVDI3X0RBVEEsIFBPUlQyNl9EQVRBLCBQT1JUMjVfREFUQSwgUE9SVDI0X0RBVEEsCi0JCQlQT1JUMjNfREFUQSwgUE9SVDIyX0RBVEEsIFBPUlQyMV9EQVRBLCBQT1JUMjBfREFUQSwKLQkJCVBPUlQxOV9EQVRBLCBQT1JUMThfREFUQSwgUE9SVDE3X0RBVEEsIFBPUlQxNl9EQVRBLAotCQkJUE9SVDE1X0RBVEEsIFBPUlQxNF9EQVRBLCBQT1JUMTNfREFUQSwgUE9SVDEyX0RBVEEsCi0JCQlQT1JUMTFfREFUQSwgUE9SVDEwX0RBVEEsIFBPUlQ5X0RBVEEsICBQT1JUOF9EQVRBLAotCQkJUE9SVDdfREFUQSwgIFBPUlQ2X0RBVEEsICBQT1JUNV9EQVRBLCAgUE9SVDRfREFUQSwKLQkJCVBPUlQzX0RBVEEsICBQT1JUMl9EQVRBLCAgUE9SVDFfREFUQSwgIFBPUlQwX0RBVEEsCi0JCX0KLQl9LAotCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JURDA2M18wMzJEUiIsIDB4RTYwNTUwMDQsIDMyKSB7Ci0JCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAotCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQkJCTAsICAgICAgICAgICAwLCAgICAgICAgICAgUE9SVDQ1X0RBVEEsIFBPUlQ0NF9EQVRBLAotCQkJUE9SVDQzX0RBVEEsIFBPUlQ0Ml9EQVRBLCBQT1JUNDFfREFUQSwgUE9SVDQwX0RBVEEsCi0JCQlQT1JUMzlfREFUQSwgUE9SVDM4X0RBVEEsIFBPUlQzN19EQVRBLCBQT1JUMzZfREFUQSwKLQkJCVBPUlQzNV9EQVRBLCBQT1JUMzRfREFUQSwgUE9SVDMzX0RBVEEsIFBPUlQzMl9EQVRBLAotCQl9Ci0JfSwKLQl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVFIwNjNfMDMyRFIiLCAweEU2MDU2MDA0LCAzMikgewotCQkJUE9SVDYzX0RBVEEsIFBPUlQ2Ml9EQVRBLCBQT1JUNjFfREFUQSwgUE9SVDYwX0RBVEEsCi0JCQlQT1JUNTlfREFUQSwgUE9SVDU4X0RBVEEsIFBPUlQ1N19EQVRBLCBQT1JUNTZfREFUQSwKLQkJCVBPUlQ1NV9EQVRBLCBQT1JUNTRfREFUQSwgUE9SVDUzX0RBVEEsIFBPUlQ1Ml9EQVRBLAotCQkJUE9SVDUxX0RBVEEsIFBPUlQ1MF9EQVRBLCBQT1JUNDlfREFUQSwgUE9SVDQ4X0RBVEEsCi0JCQlQT1JUNDdfREFUQSwgUE9SVDQ2X0RBVEEsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLAotCQkJMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIDAsCi0JCX0KLQl9LAotCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JUUjA5NV8wNjREUiIsIDB4RTYwNTYwMDgsIDMyKSB7Ci0JCQkwLCAwLCAwLCAwLAotCQkJMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLAotCQkJMCwgMCwgMCwgMCwKLQkJCVBPUlQ3NV9EQVRBLCBQT1JUNzRfREFUQSwgUE9SVDczX0RBVEEsIFBPUlQ3Ml9EQVRBLAotCQkJUE9SVDcxX0RBVEEsIFBPUlQ3MF9EQVRBLCBQT1JUNjlfREFUQSwgUE9SVDY4X0RBVEEsCi0JCQlQT1JUNjdfREFUQSwgUE9SVDY2X0RBVEEsIFBPUlQ2NV9EQVRBLCBQT1JUNjRfREFUQSwKLQkJfQotCX0sCi0JeyBQSU5NVVhfREFUQV9SRUcoIlBPUlRSMTkxXzE2MERSIiwgMHhFNjA1NjAxNCwgMzIpIHsKLQkJCTAsCSAgICAgIFBPUlQxOTBfREFUQSwgUE9SVDE4OV9EQVRBLCBQT1JUMTg4X0RBVEEsCi0JCQlQT1JUMTg3X0RBVEEsIFBPUlQxODZfREFUQSwgUE9SVDE4NV9EQVRBLCBQT1JUMTg0X0RBVEEsCi0JCQlQT1JUMTgzX0RBVEEsIFBPUlQxODJfREFUQSwgUE9SVDE4MV9EQVRBLCBQT1JUMTgwX0RBVEEsCi0JCQlQT1JUMTc5X0RBVEEsIFBPUlQxNzhfREFUQSwgUE9SVDE3N19EQVRBLCBQT1JUMTc2X0RBVEEsCi0JCQlQT1JUMTc1X0RBVEEsIFBPUlQxNzRfREFUQSwgUE9SVDE3M19EQVRBLCBQT1JUMTcyX0RBVEEsCi0JCQlQT1JUMTcxX0RBVEEsIFBPUlQxNzBfREFUQSwgUE9SVDE2OV9EQVRBLCBQT1JUMTY4X0RBVEEsCi0JCQlQT1JUMTY3X0RBVEEsIDAsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLAotCQl9Ci0JfSwKLQl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVFUxMjdfMDk2RFIiLCAweEU2MDU3MDBDLCAzMikgewotCQkJMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIFBPUlQxMjBfREFUQSwKLQkJCVBPUlQxMTlfREFUQSwgUE9SVDExOF9EQVRBLCBQT1JUMTE3X0RBVEEsIFBPUlQxMTZfREFUQSwKLQkJCVBPUlQxMTVfREFUQSwgUE9SVDExNF9EQVRBLCBQT1JUMTEzX0RBVEEsIFBPUlQxMTJfREFUQSwKLQkJCVBPUlQxMTFfREFUQSwgUE9SVDExMF9EQVRBLCBQT1JUMTA5X0RBVEEsIFBPUlQxMDhfREFUQSwKLQkJCVBPUlQxMDdfREFUQSwgUE9SVDEwNl9EQVRBLCBQT1JUMTA1X0RBVEEsIFBPUlQxMDRfREFUQSwKLQkJCVBPUlQxMDNfREFUQSwgUE9SVDEwMl9EQVRBLCBQT1JUMTAxX0RBVEEsIFBPUlQxMDBfREFUQSwKLQkJCTAsIDAsIDAsIDAsCi0JCX0KLQl9LAotCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JUVTE1OV8xMjhEUiIsIDB4RTYwNTcwMTAsIDMyKSB7Ci0JCQkwLCAwLCAwLCAwLAotCQkJUE9SVDE1NV9EQVRBLCBQT1JUMTU0X0RBVEEsIFBPUlQxNTNfREFUQSwgUE9SVDE1Ml9EQVRBLAotCQkJMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLAotCQkJMCwgMCwgMCwgMCwKLQkJCTAsIDAsIDAsIDAsCi0JCQkwLCAwLCAwLCAwLAotCQl9Ci0JfSwKLQl7IH0sCi19OwotCi0jZGVmaW5lIEVYVF9JUlExNkwobikgZXZ0MmlycSgweDIwMCArICgobikgPDwgNSkpCi0jZGVmaW5lIEVYVF9JUlExNkgobikgZXZ0MmlycSgweDMyMDAgKyAoKChuKSAtIDE2KSA8PCA1KSkKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlubXV4X2lycSBwaW5tdXhfaXJxc1tdID0gewotCVBJTk1VWF9JUlEoRVhUX0lSUTE2TCgwKSwgNiwgMTYyKSwKLQlQSU5NVVhfSVJRKEVYVF9JUlExNkwoMSksIDEyKSwKLQlQSU5NVVhfSVJRKEVYVF9JUlExNkwoMiksIDQsIDUpLAotCVBJTk1VWF9JUlEoRVhUX0lSUTE2TCgzKSwgOCwgMTYpLAotCVBJTk1VWF9JUlEoRVhUX0lSUTE2TCg0KSwgMTcsIDE2MyksCi0JUElOTVVYX0lSUShFWFRfSVJRMTZMKDUpLCAxOCksCi0JUElOTVVYX0lSUShFWFRfSVJRMTZMKDYpLCAzOSwgMTY0KSwKLQlQSU5NVVhfSVJRKEVYVF9JUlExNkwoNyksIDQwLCAxNjcpLAotCVBJTk1VWF9JUlEoRVhUX0lSUTE2TCg4KSwgNDEsIDE2OCksCi0JUElOTVVYX0lSUShFWFRfSVJRMTZMKDkpLCA0MiwgMTY5KSwKLQlQSU5NVVhfSVJRKEVYVF9JUlExNkwoMTApLCA2NSksCi0JUElOTVVYX0lSUShFWFRfSVJRMTZMKDExKSwgNjcpLAotCVBJTk1VWF9JUlEoRVhUX0lSUTE2TCgxMiksIDgwLCAxMzcpLAotCVBJTk1VWF9JUlEoRVhUX0lSUTE2TCgxMyksIDgxLCAxNDUpLAotCVBJTk1VWF9JUlEoRVhUX0lSUTE2TCgxNCksIDgyLCAxNDYpLAotCVBJTk1VWF9JUlEoRVhUX0lSUTE2TCgxNSksIDgzLCAxNDcpLAotCVBJTk1VWF9JUlEoRVhUX0lSUTE2SCgxNiksIDg0LCAxNzApLAotCVBJTk1VWF9JUlEoRVhUX0lSUTE2SCgxNyksIDg1KSwKLQlQSU5NVVhfSVJRKEVYVF9JUlExNkgoMTgpLCA4NiksCi0JUElOTVVYX0lSUShFWFRfSVJRMTZIKDE5KSwgODcpLAotCVBJTk1VWF9JUlEoRVhUX0lSUTE2SCgyMCksIDkyKSwKLQlQSU5NVVhfSVJRKEVYVF9JUlExNkgoMjEpLCA5MyksCi0JUElOTVVYX0lSUShFWFRfSVJRMTZIKDIyKSwgOTQpLAotCVBJTk1VWF9JUlEoRVhUX0lSUTE2SCgyMyksIDk1KSwKLQlQSU5NVVhfSVJRKEVYVF9JUlExNkgoMjQpLCAxMTIpLAotCVBJTk1VWF9JUlEoRVhUX0lSUTE2SCgyNSksIDExOSksCi0JUElOTVVYX0lSUShFWFRfSVJRMTZIKDI2KSwgMTIxLCAxNzIpLAotCVBJTk1VWF9JUlEoRVhUX0lSUTE2SCgyNyksIDEyMiwgMTgwKSwKLQlQSU5NVVhfSVJRKEVYVF9JUlExNkgoMjgpLCAxMjMsIDE4MSksCi0JUElOTVVYX0lSUShFWFRfSVJRMTZIKDI5KSwgMTI5LCAxODIpLAotCVBJTk1VWF9JUlEoRVhUX0lSUTE2SCgzMCksIDEzMCwgMTgzKSwKLQlQSU5NVVhfSVJRKEVYVF9JUlExNkgoMzEpLCAxMzgsIDE4NCksCi19OwotCi0jZGVmaW5lIFBPUlRuQ1JfUFVMTURfT0ZGCSgwIDw8IDYpCi0jZGVmaW5lIFBPUlRuQ1JfUFVMTURfRE9XTgkoMiA8PCA2KQotI2RlZmluZSBQT1JUbkNSX1BVTE1EX1VQCSgzIDw8IDYpCi0jZGVmaW5lIFBPUlRuQ1JfUFVMTURfTUFTSwkoMyA8PCA2KQotCi1zdHJ1Y3Qgc2g3MzcyX3BvcnRjcl9ncm91cCB7Ci0JdW5zaWduZWQgaW50IGVuZF9waW47Ci0JdW5zaWduZWQgaW50IG9mZnNldDsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2g3MzcyX3BvcnRjcl9ncm91cCBzaDczNzJfcG9ydGNyX29mZnNldHNbXSA9IHsKLQl7IDQ1LCAgMHgxMDAwIH0sIHsgNzUsICAweDIwMDAgfSwgeyA5OSwgIDB4MDAwMCB9LCB7IDEyMCwgMHgzMDAwIH0sCi0JeyAxNTEsIDB4MDAwMCB9LCB7IDE1NSwgMHgzMDAwIH0sIHsgMTY2LCAweDAwMDAgfSwgeyAxOTAsIDB4MjAwMCB9LAotfTsKLQotc3RhdGljIHZvaWQgX19pb21lbSAqc2g3MzcyX3Bpbm11eF9wb3J0Y3Ioc3RydWN0IHNoX3BmYyAqcGZjLCB1bnNpZ25lZCBpbnQgcGluKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2g3MzcyX3BvcnRjcl9vZmZzZXRzKTsgKytpKSB7Ci0JCWNvbnN0IHN0cnVjdCBzaDczNzJfcG9ydGNyX2dyb3VwICpncm91cCA9Ci0JCQkmc2g3MzcyX3BvcnRjcl9vZmZzZXRzW2ldOwotCi0JCWlmIChwaW4gPD0gZ3JvdXAtPmVuZF9waW4pCi0JCQlyZXR1cm4gcGZjLT53aW5kb3dzLT52aXJ0ICsgZ3JvdXAtPm9mZnNldCArIHBpbjsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBzaDczNzJfcGlubXV4X2dldF9iaWFzKHN0cnVjdCBzaF9wZmMgKnBmYywgdW5zaWduZWQgaW50IHBpbikKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBzaDczNzJfcGlubXV4X3BvcnRjcihwZmMsIHBpbik7Ci0JdTMyIHZhbHVlID0gaW9yZWFkOChhZGRyKSAmIFBPUlRuQ1JfUFVMTURfTUFTSzsKLQotCXN3aXRjaCAodmFsdWUpIHsKLQljYXNlIFBPUlRuQ1JfUFVMTURfVVA6Ci0JCXJldHVybiBQSU5fQ09ORklHX0JJQVNfUFVMTF9VUDsKLQljYXNlIFBPUlRuQ1JfUFVMTURfRE9XTjoKLQkJcmV0dXJuIFBJTl9DT05GSUdfQklBU19QVUxMX0RPV047Ci0JY2FzZSBQT1JUbkNSX1BVTE1EX09GRjoKLQlkZWZhdWx0OgotCQlyZXR1cm4gUElOX0NPTkZJR19CSUFTX0RJU0FCTEU7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzaDczNzJfcGlubXV4X3NldF9iaWFzKHN0cnVjdCBzaF9wZmMgKnBmYywgdW5zaWduZWQgaW50IHBpbiwKLQkJCQkgICB1bnNpZ25lZCBpbnQgYmlhcykKLXsKLQl2b2lkIF9faW9tZW0gKmFkZHIgPSBzaDczNzJfcGlubXV4X3BvcnRjcihwZmMsIHBpbik7Ci0JdTMyIHZhbHVlID0gaW9yZWFkOChhZGRyKSAmIH5QT1JUbkNSX1BVTE1EX01BU0s7Ci0KLQlzd2l0Y2ggKGJpYXMpIHsKLQljYXNlIFBJTl9DT05GSUdfQklBU19QVUxMX1VQOgotCQl2YWx1ZSB8PSBQT1JUbkNSX1BVTE1EX1VQOwotCQlicmVhazsKLQljYXNlIFBJTl9DT05GSUdfQklBU19QVUxMX0RPV046Ci0JCXZhbHVlIHw9IFBPUlRuQ1JfUFVMTURfRE9XTjsKLQkJYnJlYWs7Ci0JfQotCi0JaW93cml0ZTgodmFsdWUsIGFkZHIpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNoX3BmY19zb2Nfb3BlcmF0aW9ucyBzaDczNzJfcGZjX29wcyA9IHsKLQkuZ2V0X2JpYXMgPSBzaDczNzJfcGlubXV4X2dldF9iaWFzLAotCS5zZXRfYmlhcyA9IHNoNzM3Ml9waW5tdXhfc2V0X2JpYXMsCi19OwotCi1jb25zdCBzdHJ1Y3Qgc2hfcGZjX3NvY19pbmZvIHNoNzM3Ml9waW5tdXhfaW5mbyA9IHsKLQkubmFtZSA9ICJzaDczNzJfcGZjIiwKLQkub3BzID0gJnNoNzM3Ml9wZmNfb3BzLAotCi0JLmlucHV0ID0geyBQSU5NVVhfSU5QVVRfQkVHSU4sIFBJTk1VWF9JTlBVVF9FTkQgfSwKLQkub3V0cHV0ID0geyBQSU5NVVhfT1VUUFVUX0JFR0lOLCBQSU5NVVhfT1VUUFVUX0VORCB9LAotCS5mdW5jdGlvbiA9IHsgUElOTVVYX0ZVTkNUSU9OX0JFR0lOLCBQSU5NVVhfRlVOQ1RJT05fRU5EIH0sCi0KLQkucGlucyA9IHBpbm11eF9waW5zLAotCS5ucl9waW5zID0gQVJSQVlfU0laRShwaW5tdXhfcGlucyksCi0JLmdyb3VwcyA9IHBpbm11eF9ncm91cHMsCi0JLm5yX2dyb3VwcyA9IEFSUkFZX1NJWkUocGlubXV4X2dyb3VwcyksCi0JLmZ1bmN0aW9ucyA9IHBpbm11eF9mdW5jdGlvbnMsCi0JLm5yX2Z1bmN0aW9ucyA9IEFSUkFZX1NJWkUocGlubXV4X2Z1bmN0aW9ucyksCi0KLQkuY2ZnX3JlZ3MgPSBwaW5tdXhfY29uZmlnX3JlZ3MsCi0JLmRhdGFfcmVncyA9IHBpbm11eF9kYXRhX3JlZ3MsCi0KLQkuZ3Bpb19kYXRhID0gcGlubXV4X2RhdGEsCi0JLmdwaW9fZGF0YV9zaXplID0gQVJSQVlfU0laRShwaW5tdXhfZGF0YSksCi0KLQkuZ3Bpb19pcnEgPSBwaW5tdXhfaXJxcywKLQkuZ3Bpb19pcnFfc2l6ZSA9IEFSUkFZX1NJWkUocGlubXV4X2lycXMpLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvcGluY3RybC5jIGIvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9waW5jdHJsLmMKaW5kZXggOTEwZGVhZS4uMDcyZTdjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9waW5jdHJsLmMKKysrIGIvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9waW5jdHJsLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IHBpbmNvbmZfZ2VuZXJpY19wYXJzZV9kdF9jb25maWcobnAsICZjb25maWdzLCAmbnVtX2NvbmZpZ3MpOworCXJldCA9IHBpbmNvbmZfZ2VuZXJpY19wYXJzZV9kdF9jb25maWcobnAsIE5VTEwsICZjb25maWdzLCAmbnVtX2NvbmZpZ3MpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3NoX3BmYy5oIGIvZHJpdmVycy9waW5jdHJsL3NoLXBmYy9zaF9wZmMuaAppbmRleCA1YjcyODMxLi5jODM3Mjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvc2gtcGZjL3NoX3BmYy5oCisrKyBiL2RyaXZlcnMvcGluY3RybC9zaC1wZmMvc2hfcGZjLmgKQEAgLTE2Nyw2ICsxNjcsOCBAQAogCVBJTk1VWF9EQVRBKGZuIyNfTUFSSywgRk5fIyNmbiwgRk5fIyNpcHNyKQogI2RlZmluZSBQSU5NVVhfSVBTUl9OT0dNKGlzcHIsIGZuLCBtcykJCQkJCVwKIAlQSU5NVVhfREFUQShmbiMjX01BUkssIEZOXyMjZm4sIEZOXyMjbXMpCisjZGVmaW5lIFBJTk1VWF9JUFNSX05PRk4oaXBzciwgZm4sIG1zKQkJCQkJXAorCVBJTk1VWF9EQVRBKGZuIyNfTUFSSywgRk5fIyNpcHNyLCBGTl8jI21zKQogI2RlZmluZSBQSU5NVVhfSVBTUl9NU0VMKGlwc3IsIGZuLCBtcykJCQkJCVwKIAlQSU5NVVhfREFUQShmbiMjX01BUkssIEZOXyMjZm4sIEZOXyMjaXBzciwgRk5fIyNtcykKICNkZWZpbmUgUElOTVVYX0lQU1JfTU9EU0VMX0RBVEEoaXBzciwgZm4sIG1zKQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc2lyZi9waW5jdHJsLXNpcmYuYyBiL2RyaXZlcnMvcGluY3RybC9zaXJmL3BpbmN0cmwtc2lyZi5jCmluZGV4IDQ4NzE2NDcuLjJhMWYwNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGluY3RybC9zaXJmL3BpbmN0cmwtc2lyZi5jCisrKyBiL2RyaXZlcnMvcGluY3RybC9zaXJmL3BpbmN0cmwtc2lyZi5jCkBAIC0zOCw3ICszOCw2IEBACiAKIHN0cnVjdCBzaXJmc29jX2dwaW9fY2hpcCB7CiAJc3RydWN0IG9mX21tX2dwaW9fY2hpcCBjaGlwOwotCWJvb2wgaXNfbWFyY287IC8qIGZvciBtYXJjbywgc29tZSByZWdpc3RlcnMgYXJlIGRpZmZlcmVudCB3aXRoIHByaW1hMiAqLwogCXN0cnVjdCBzaXJmc29jX2dwaW9fYmFuayBzZ3Bpb19iYW5rW1NJUkZTT0NfR1BJT19OT19PRl9CQU5LU107CiB9OwogCkBAIC0xNDksMjMgKzE0OCwxNCBAQAogCiAJZm9yIChpID0gMDsgaSA8IG11eC0+bXV4bWFza19jb3VudHM7IGkrKykgewogCQl1MzIgbXV4dmFsOwotCQlpZiAoIXNwbXgtPmlzX21hcmNvKSB7Ci0JCQltdXh2YWwgPSByZWFkbChzcG14LT5ncGlvX3ZpcnRiYXNlICsKLQkJCQlTSVJGU09DX0dQSU9fUEFEX0VOKG1hc2tbaV0uZ3JvdXApKTsKLQkJCWlmIChlbmFibGUpCi0JCQkJbXV4dmFsID0gbXV4dmFsICYgfm1hc2tbaV0ubWFzazsKLQkJCWVsc2UKLQkJCQltdXh2YWwgPSBtdXh2YWwgfCBtYXNrW2ldLm1hc2s7Ci0JCQl3cml0ZWwobXV4dmFsLCBzcG14LT5ncGlvX3ZpcnRiYXNlICsKLQkJCQlTSVJGU09DX0dQSU9fUEFEX0VOKG1hc2tbaV0uZ3JvdXApKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChlbmFibGUpCi0JCQkJd3JpdGVsKG1hc2tbaV0ubWFzaywgc3BteC0+Z3Bpb192aXJ0YmFzZSArCi0JCQkJCVNJUkZTT0NfR1BJT19QQURfRU5fQ0xSKG1hc2tbaV0uZ3JvdXApKTsKLQkJCWVsc2UKLQkJCQl3cml0ZWwobWFza1tpXS5tYXNrLCBzcG14LT5ncGlvX3ZpcnRiYXNlICsKLQkJCQkJU0lSRlNPQ19HUElPX1BBRF9FTihtYXNrW2ldLmdyb3VwKSk7Ci0JCX0KKwkJbXV4dmFsID0gcmVhZGwoc3BteC0+Z3Bpb192aXJ0YmFzZSArCisJCQlTSVJGU09DX0dQSU9fUEFEX0VOKG1hc2tbaV0uZ3JvdXApKTsKKwkJaWYgKGVuYWJsZSkKKwkJCW11eHZhbCA9IG11eHZhbCAmIH5tYXNrW2ldLm1hc2s7CisJCWVsc2UKKwkJCW11eHZhbCA9IG11eHZhbCB8IG1hc2tbaV0ubWFzazsKKwkJd3JpdGVsKG11eHZhbCwgc3BteC0+Z3Bpb192aXJ0YmFzZSArCisJCQlTSVJGU09DX0dQSU9fUEFEX0VOKG1hc2tbaV0uZ3JvdXApKTsKIAl9CiAKIAlpZiAobXV4LT5mdW5jbWFzayAmJiBlbmFibGUpIHsKQEAgLTIyMywxNiArMjEzLDExIEBACiAKIAlzcG14ID0gcGluY3RybF9kZXZfZ2V0X2RydmRhdGEocG14ZGV2KTsKIAotCWlmICghc3BteC0+aXNfbWFyY28pIHsKLQkJbXV4dmFsID0gcmVhZGwoc3BteC0+Z3Bpb192aXJ0YmFzZSArCi0JCQlTSVJGU09DX0dQSU9fUEFEX0VOKGdyb3VwKSk7Ci0JCW11eHZhbCA9IG11eHZhbCB8ICgxIDw8IChvZmZzZXQgLSByYW5nZS0+cGluX2Jhc2UpKTsKLQkJd3JpdGVsKG11eHZhbCwgc3BteC0+Z3Bpb192aXJ0YmFzZSArCi0JCQlTSVJGU09DX0dQSU9fUEFEX0VOKGdyb3VwKSk7Ci0JfSBlbHNlIHsKLQkJd3JpdGVsKDEgPDwgKG9mZnNldCAtIHJhbmdlLT5waW5fYmFzZSksIHNwbXgtPmdwaW9fdmlydGJhc2UgKwotCQkJU0lSRlNPQ19HUElPX1BBRF9FTihncm91cCkpOwotCX0KKwltdXh2YWwgPSByZWFkbChzcG14LT5ncGlvX3ZpcnRiYXNlICsKKwkJU0lSRlNPQ19HUElPX1BBRF9FTihncm91cCkpOworCW11eHZhbCA9IG11eHZhbCB8ICgxIDw8IChvZmZzZXQgLSByYW5nZS0+cGluX2Jhc2UpKTsKKwl3cml0ZWwobXV4dmFsLCBzcG14LT5ncGlvX3ZpcnRiYXNlICsKKwkJU0lSRlNPQ19HUElPX1BBRF9FTihncm91cCkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTYsNyArMjQxLDYgQEAKIHsKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJzY19pZHNbXSAgPSB7CiAJCXsgLmNvbXBhdGlibGUgPSAic2lyZixwcmltYTItcnNjIiB9LAotCQl7IC5jb21wYXRpYmxlID0gInNpcmYsbWFyY28tcnNjIiB9LAogCQl7fQogCX07CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKQEAgLTI4NCw3ICsyNjgsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcGlubXV4X2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAic2lyZixwcmltYTItcGluY3RybCIsIC5kYXRhID0gJnByaW1hMl9waW5jdHJsX2RhdGEsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaXJmLGF0bGFzNi1waW5jdHJsIiwgLmRhdGEgPSAmYXRsYXM2X3BpbmN0cmxfZGF0YSwgfSwKLQl7IC5jb21wYXRpYmxlID0gInNpcmYsbWFyY28tcGluY3RybCIsIC5kYXRhID0gJnByaW1hMl9waW5jdHJsX2RhdGEsIH0sCiAJe30KIH07CiAKQEAgLTMxNyw5ICszMDAsNiBAQAogCQlnb3RvIG91dF9ub19yc2NfcmVtYXA7CiAJfQogCi0JaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAic2lyZixtYXJjby1waW5jdHJsIikpCi0JCXNwbXgtPmlzX21hcmNvID0gMTsKLQogCXBkYXRhID0gb2ZfbWF0Y2hfbm9kZShwaW5tdXhfaWRzLCBucCktPmRhdGE7CiAJc2lyZnNvY19waW5fZ3JvdXBzID0gcGRhdGEtPmdycHM7CiAJc2lyZnNvY19waW5ncnBfY250ID0gcGRhdGEtPmdycHNfY250OwpAQCAtODAzLDcgKzc4Myw2IEBACiAJc3RydWN0IHNpcmZzb2NfZ3Bpb19iYW5rICpiYW5rOwogCXZvaWQgX19pb21lbSAqcmVnczsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCWJvb2wgaXNfbWFyY28gPSBmYWxzZTsKIAogCXUzMiBwdWxsdXBzW1NJUkZTT0NfR1BJT19OT19PRl9CQU5LU10sIHB1bGxkb3duc1tTSVJGU09DX0dQSU9fTk9fT0ZfQkFOS1NdOwogCkBAIC04MTksOSArNzk4LDYgQEAKIAlpZiAoIXJlZ3MpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAic2lyZixtYXJjby1waW5jdHJsIikpCi0JCWlzX21hcmNvID0gMTsKLQogCXNncGlvLT5jaGlwLmdjLnJlcXVlc3QgPSBzaXJmc29jX2dwaW9fcmVxdWVzdDsKIAlzZ3Bpby0+Y2hpcC5nYy5mcmVlID0gc2lyZnNvY19ncGlvX2ZyZWU7CiAJc2dwaW8tPmNoaXAuZ2MuZGlyZWN0aW9uX2lucHV0ID0gc2lyZnNvY19ncGlvX2RpcmVjdGlvbl9pbnB1dDsKQEAgLTgzNiw3ICs4MTIsNiBAQAogCXNncGlvLT5jaGlwLmdjLm9mX2dwaW9fbl9jZWxscyA9IDI7CiAJc2dwaW8tPmNoaXAuZ2MuZGV2ID0gJnBkZXYtPmRldjsKIAlzZ3Bpby0+Y2hpcC5yZWdzID0gcmVnczsKLQlzZ3Bpby0+aXNfbWFyY28gPSBpc19tYXJjbzsKIAogCWVyciA9IGdwaW9jaGlwX2FkZCgmc2dwaW8tPmNoaXAuZ2MpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9zaXJmL3BpbmN0cmwtc2lyZi5oIGIvZHJpdmVycy9waW5jdHJsL3NpcmYvcGluY3RybC1zaXJmLmgKaW5kZXggZDdmMTZiNC4uOTU1MDMzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3NpcmYvcGluY3RybC1zaXJmLmgKKysrIGIvZHJpdmVycy9waW5jdHJsL3NpcmYvcGluY3RybC1zaXJmLmgKQEAgLTQ5LDcgKzQ5LDYgQEAKIAl1MzIgcGFkZW5fcmVnc1tTSVJGU09DX0dQSU9fTk9fT0ZfQkFOS1NdOwogCXUzMiBkc3Blbl9yZWdzOwogCXUzMiByc2NfcmVnc1szXTsKLQlib29sIGlzX21hcmNvOwogfTsKIAogLyogU0lSRlNPQ19HUElPX1BBRF9FTiBzZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9zdW54aS9LY29uZmlnIGIvZHJpdmVycy9waW5jdHJsL3N1bnhpL0tjb25maWcKaW5kZXggMjMwYTk1Mi4uMmViODkzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9waW5jdHJsL3N1bnhpL0tjb25maWcKKysrIGIvZHJpdmVycy9waW5jdHJsL3N1bnhpL0tjb25maWcKQEAgLTIxLDYgKzIxLDEwIEBACiAJZGVmX2Jvb2wgTUFDSF9TVU42SQogCXNlbGVjdCBQSU5DVFJMX1NVTlhJX0NPTU1PTgogCitjb25maWcgUElOQ1RSTF9TVU42SV9BMzFTCisJZGVmX2Jvb2wgTUFDSF9TVU42SQorCXNlbGVjdCBQSU5DVFJMX1NVTlhJX0NPTU1PTgorCiBjb25maWcgUElOQ1RSTF9TVU42SV9BMzFfUgogCWRlZl9ib29sIE1BQ0hfU1VONkkKIAlkZXBlbmRzIG9uIFJFU0VUX0NPTlRST0xMRVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGluY3RybC9zdW54aS9NYWtlZmlsZSBiL2RyaXZlcnMvcGluY3RybC9zdW54aS9NYWtlZmlsZQppbmRleCBjN2Q5MmU0Li5iNzk2ZDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvc3VueGkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9waW5jdHJsL3N1bnhpL01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogb2JqLSQoQ09ORklHX1BJTkNUUkxfU1VONUlfQTEwUykJKz0gcGluY3RybC1zdW41aS1hMTBzLm8KIG9iai0kKENPTkZJR19QSU5DVFJMX1NVTjVJX0ExMykJCSs9IHBpbmN0cmwtc3VuNWktYTEzLm8KIG9iai0kKENPTkZJR19QSU5DVFJMX1NVTjZJX0EzMSkJCSs9IHBpbmN0cmwtc3VuNmktYTMxLm8KK29iai0kKENPTkZJR19QSU5DVFJMX1NVTjZJX0EzMVMpCSs9IHBpbmN0cmwtc3VuNmktYTMxcy5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9TVU42SV9BMzFfUikJKz0gcGluY3RybC1zdW42aS1hMzEtci5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9TVU43SV9BMjApCQkrPSBwaW5jdHJsLXN1bjdpLWEyMC5vCiBvYmotJChDT05GSUdfUElOQ1RSTF9TVU44SV9BMjMpCQkrPSBwaW5jdHJsLXN1bjhpLWEyMy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc3VueGkvcGluY3RybC1zdW42aS1hMzEuYyBiL2RyaXZlcnMvcGluY3RybC9zdW54aS9waW5jdHJsLXN1bjZpLWEzMS5jCmluZGV4IGY0Mjg1OGVhLi4xODAzOGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BpbmN0cmwvc3VueGkvcGluY3RybC1zdW42aS1hMzEuYworKysgYi9kcml2ZXJzL3BpbmN0cmwvc3VueGkvcGluY3RybC1zdW42aS1hMzEuYwpAQCAtMTM0LDI0ICsxMzQsMjggQEAKIAkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAogCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFJYRDQgKi8KIAkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIiksCQkvKiBEMTUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJjbGtfb3V0X2EiKSwKIAkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDAsIDE1KSksCS8qIFBBX0VJTlQxNSAqLwogCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxNiksCiAJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAogCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCiAJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogUlhENSAqLwogCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImxjZDEiKSwJCS8qIEQxNiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImRtaWMiKSwJCS8qIENMSyAqLwogCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMCwgMTYpKSwJLyogUEFfRUlOVDE2ICovCiAJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDE3KSwKIAkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCiAJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKIAkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBSWEQ2ICovCiAJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibGNkMSIpLAkJLyogRDE3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAiZG1pYyIpLAkJLyogRElOICovCiAJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCAxNykpLAkvKiBQQV9FSU5UMTcgKi8KIAlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTgpLAogCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKIAkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAogCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFJYRDcgKi8KIAkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIiksCQkvKiBEMTggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJjbGtfb3V0X2IiKSwKIAkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDAsIDE4KSksCS8qIFBBX0VJTlQxOCAqLwogCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxOSksCiAJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLApAQCAtMjA3LDYgKzIxMSw3IEBACiAJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKIAkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBNREMgKi8KIAkJICBTVU5YSV9GVU5DVElPTigweDMsICJsY2QxIiksCQkvKiBIU1lOQyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImNsa19vdXRfYyIpLAogCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMCwgMjYpKSwJLyogUEFfRUlOVDI2ICovCiAJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDI3KSwKIAkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BpbmN0cmwvc3VueGkvcGluY3RybC1zdW42aS1hMzFzLmMgYi9kcml2ZXJzL3BpbmN0cmwvc3VueGkvcGluY3RybC1zdW42aS1hMzFzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1YTkxZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGluY3RybC9zdW54aS9waW5jdHJsLXN1bjZpLWEzMXMuYwpAQCAtMCwwICsxLDgxNSBAQAorLyoKKyAqIEFsbHdpbm5lciBBMzFzIFNvQ3MgcGluY3RybCBkcml2ZXIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisgKgorICogQmFzZWQgb24gcGluY3RybC1zdW42aS1hMzEuYywgd2hpY2ggaXM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgTWF4aW1lIFJpcGFyZCA8bWF4aW1lLnJpcGFyZEBmcmVlLWVsZWN0cm9ucy5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGluY3RybC9waW5jdHJsLmg+CisKKyNpbmNsdWRlICJwaW5jdHJsLXN1bnhpLmgiCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VueGlfZGVzY19waW4gc3VuNmlfYTMxc19waW5zW10gPSB7CisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFRYRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogRFRSICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCAwKSksCS8qIFBBX0VJTlQwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFRYRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogRFNSICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCAxKSksCS8qIFBBX0VJTlQxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFRYRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogRENEICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCAyKSksCS8qIFBBX0VJTlQyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFRYRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogUklORyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMCwgMykpLAkvKiBQQV9FSU5UMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBUWEQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAidWFydDEiKSwJCS8qIFRYICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCA0KSksCS8qIFBBX0VJTlQ0ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFRYRDUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MSIpLAkJLyogUlggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDAsIDUpKSwJLyogUEFfRUlOVDUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhENiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBSVFMgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDAsIDYpKSwJLyogUEFfRUlOVDYgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhENyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQxIiksCQkvKiBDVFMgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDAsIDcpKSwJLyogUEFfRUlOVDcgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDAsIDgpKSwJLyogUEFfRUlOVDggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhFTiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzMiKSwJCS8qIENNRCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1tYzIiKSwJCS8qIENNRCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMCwgOSkpLAkvKiBQQV9FSU5UOSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogR1RYQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg1LCAibW1jMiIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCAxMCkpLAkvKiBQQV9FSU5UMTAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFJYRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIiksCQkvKiBEMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1tYzIiKSwJCS8qIEQwICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCAxMSkpLAkvKiBQQV9FSU5UMTEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFJYRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIiksCQkvKiBEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1tYzIiKSwJCS8qIEQxICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCAxMikpLAkvKiBQQV9FSU5UMTIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFJYRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIiksCQkvKiBEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1tYzIiKSwJCS8qIEQyICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCAxMykpLAkvKiBQQV9FSU5UMTMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFJYRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIiksCQkvKiBEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NSwgIm1tYzIiKSwJCS8qIEQzICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCAxNCkpLAkvKiBQQV9FSU5UMTQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFJYRDQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJjbGtfb3V0X2EiKSwKKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDAsIDE1KSksCS8qIFBBX0VJTlQxNSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogUlhENSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImRtaWMiKSwJCS8qIENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMCwgMTYpKSwJLyogUEFfRUlOVDE2ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDE3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBSWEQ2ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAiZG1pYyIpLAkJLyogRElOICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCAxNykpLAkvKiBQQV9FSU5UMTcgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMTgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFJYRDcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJjbGtfb3V0X2IiKSwKKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDAsIDE4KSksCS8qIFBBX0VJTlQxOCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAxOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogUlhEViAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInB3bTMiKSwJCS8qIFBvc2l0aXZlICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCAxOSkpLAkvKiBQQV9FSU5UMTkgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMjApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIFJYQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAicHdtMyIpLAkJLyogTmVnYXRpdmUgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDAsIDIwKSksCS8qIFBBX0VJTlQyMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAyMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogVFhFUlIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGkzIiksCQkvKiBDUzAgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDAsIDIxKSksCS8qIFBBX0VJTlQyMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAyMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogUlhFUlIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGkzIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDAsIDIyKSksCS8qIFBBX0VJTlQyMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihBLCAyMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiZ21hYyIpLAkJLyogQ09MICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BpMyIpLAkJLyogTU9TSSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMCwgMjMpKSwJLyogUEFfRUlOVDIzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDI0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBDUlMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJzcGkzIiksCQkvKiBNSVNPICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCAyNCkpLAkvKiBQQV9FSU5UMjQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMjUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIENMS0lOICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAic3BpMyIpLAkJLyogQ1MxICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCAyNSkpLAkvKiBQQV9FSU5UMjUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQSwgMjYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImdtYWMiKSwJCS8qIE1EQyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImNsa19vdXRfYyIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMCwgMjYpKSwJLyogUEFfRUlOVDI2ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEEsIDI3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJnbWFjIiksCQkvKiBNRElPICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAwLCAyNykpLAkvKiBQQV9FSU5UMjcgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSwJCS8qIE1DTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MyIpLAkJLyogQ1RTICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAxLCAwKSksCS8qIFBCX0VJTlQwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyczAiKSwJCS8qIEJDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDEsIDEpKSwJLyogUEJfRUlOVDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzMCIpLAkJLyogTFJDSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMSwgMikpLAkvKiBQQl9FSU5UMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMwIiksCQkvKiBETzAgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDEsIDMpKSwJLyogUEJfRUlOVDMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzMCIpLAkJLyogRE8xICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDMiKSwJCS8qIFJUUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMSwgNCkpLAkvKiBQQl9FSU5UNCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihCLCA1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMnMwIiksCQkvKiBETzIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0MyIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJpMmMzIiksCQkvKiBTQ0sgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDEsIDUpKSwJLyogUEJfRUlOVDUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQiwgNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJzMCIpLAkJLyogRE8zICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDMiKSwJCS8qIFJYICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAiaTJjMyIpLAkJLyogU0RBICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAxLCA2KSksCS8qIFBCX0VJTlQ2ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEIsIDcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImkyczAiKSwJCS8qIERJICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAxLCA3KSksCS8qIFBCX0VJTlQ3ICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogV0UgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogTU9TSSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogQUxFICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAic3BpMCIpKSwJCS8qIE1JU08gKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIENMRSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInNwaTAiKSksCQkvKiBDTEsgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSksCS8qIENFMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogQ0UwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIikpLAkvKiBSRSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogUkIwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogQ01EICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpKSwJCS8qIENNRCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogUkIxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpKSwJCS8qIENMSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCA4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFEwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogRDAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSwJCS8qIEQxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpKSwJCS8qIEQxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDEwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFEyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogRDIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBEUTMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIiksCQkvKiBEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzMiKSksCQkvKiBEMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRNCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSwJCS8qIEQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpKSwJCS8qIEQ0ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDEzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpLAkJLyogRFE1ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibW1jMiIpLAkJLyogRDUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogRDUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMTQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBEUTYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIiksCQkvKiBENiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgIm1tYzMiKSksCQkvKiBENiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihDLCAxNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibmFuZDAiKSwJCS8qIERRNyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgIm1tYzIiKSwJCS8qIEQ3ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAibW1jMyIpKSwJCS8qIEQ3ICovCisJLyogSG9sZSBpbiBwaW4gbnVtYmVyaW5nICEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oQywgMjQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm5hbmQwIiksCQkvKiBEUVMgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJtbWMyIiksCQkvKiBSU1QgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJtbWMzIikpLAkJLyogUlNUICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDI1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogQ0UyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDI2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJuYW5kMCIpKSwJLyogQ0UzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEMsIDI3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJzcGkwIikpLAkJLyogQ1MwICovCisJLyogSG9sZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAwKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWUDAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVk4wICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZQMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWTjEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDQgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVlAyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ1ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZOMiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBENiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWUEMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpLAkJLyogRDcgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJsdmRzMCIpKSwJLyogVk5DICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSwJCS8qIEQ4ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAibHZkczAiKSksCS8qIFZQMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCA5KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIiksCQkvKiBEOSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImx2ZHMwIikpLAkvKiBWTjMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTYgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTcgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMTkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMTkgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMjAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMjEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMjIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBEMjMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBDTEsgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRCwgMjUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImxjZDAiKSksCQkvKiBERSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihELCAyNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibGNkMCIpKSwJCS8qIEhTWU5DICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEQsIDI3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJsY2QwIikpLAkJLyogVlNZTkMgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogUENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDIsIDApKSwJLyogUEVfRUlOVDAgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBNQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMiKSwJCS8qIEVSUiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMiwgMSkpLAkvKiBQRV9FSU5UMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIEhTWU5DICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMiKSwJCS8qIFNZTkMgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDIsIDIpKSwJLyogUEVfRUlOVDIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBWU1lOQyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzIiksCQkvKiBEVkxEICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAyLCAzKSksCS8qIFBFX0VJTlQzICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ1YXJ0NSIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDIsIDQpKSwJLyogUEVfRUlOVDQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBEMSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInVhcnQ1IiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMiwgNSkpLAkvKiBQRV9FSU5UNSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCA2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIEQyICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDUiKSwJCS8qIFJUUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMiwgNikpLAkvKiBQRV9FSU5UNiAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCA3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIEQzICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidWFydDUiKSwJCS8qIENUUyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMiwgNykpLAkvKiBQRV9FSU5UNyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCA4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIEQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMiKSwJCS8qIEQwICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAyLCA4KSksCS8qIFBFX0VJTlQ4ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogRDUgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0cyIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDIsIDkpKSwJLyogUEVfRUlOVDkgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMTApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogRDYgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0cyIpLAkJLyogRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDIsIDEwKSksCS8qIFBFX0VJTlQxMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAxMSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBENyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgInRzIiksCQkvKiBEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMiwgMTEpKSwJLyogUEVfRUlOVDExICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEUsIDEyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJjc2kiKSwJCS8qIEQ4ICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAidHMiKSwJCS8qIEQ0ICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAyLCAxMikpLAkvKiBQRV9FSU5UMTIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRSwgMTMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImNzaSIpLAkJLyogRDkgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0cyIpLAkJLyogRDUgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDIsIDEzKSksCS8qIFBFX0VJTlQxMyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAxNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBEMTAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0cyIpLAkJLyogRDYgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDIsIDE0KSksCS8qIFBFX0VJTlQxNCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihFLCAxNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiY3NpIiksCQkvKiBEMTEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJ0cyIpLAkJLyogRDcgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDIsIDE1KSksCS8qIFBFX0VJTlQxNSAqLworCS8qIEhvbGUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRiwgMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJqdGFnIikpLAkJLyogTVMxICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEYsIDEpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzAiKSwJCS8qIEQwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIERJMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihGLCAyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBDTEsgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDQsICJ1YXJ0MCIpKSwJLyogVFggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRiwgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMCIpLAkJLyogQ01EICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAianRhZyIpKSwJCS8qIERPMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihGLCA0KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBEMyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInVhcnQwIikpLAkvKiBSWCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihGLCA1KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMwIiksCQkvKiBEMiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgImp0YWciKSksCQkvKiBDSzEgKi8KKwkvKiBIb2xlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgIm1tYzEiKSwJCS8qIENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMywgMCkpLAkvKiBQR19FSU5UMCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJtbWMxIiksCQkvKiBDTUQgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDMsIDEpKSwJLyogUEdfRUlOVDEgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMSIpLAkJLyogRDAgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDMsIDIpKSwJLyogUEdfRUlOVDIgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMSIpLAkJLyogRDEgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDMsIDMpKSwJLyogUEdfRUlOVDMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMSIpLAkJLyogRDIgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDMsIDQpKSwJLyogUEdfRUlOVDQgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAibW1jMSIpLAkJLyogRDMgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDMsIDUpKSwJLyogUEdfRUlOVDUgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidWFydDIiKSwJCS8qIFRYICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAzLCA2KSksCS8qIFBHX0VJTlQ2ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInVhcnQyIiksCQkvKiBSWCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMywgNykpLAkvKiBQR19FSU5UNyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCA4KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ1YXJ0MiIpLAkJLyogUlRTICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAzLCA4KSksCS8qIFBHX0VJTlQ4ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInVhcnQyIiksCQkvKiBDVFMgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDMsIDkpKSwJLyogUEdfRUlOVDkgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMTApLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgImkyYzMiKSwJCS8qIFNDSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMywgMTApKSwJLyogUEdfRUlOVDEwICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDExKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJpMmMzIiksCQkvKiBTREEgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDMsIDExKSksCS8qIFBHX0VJTlQxMSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAxMiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogQ1MxICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiaTJzMSIpLAkJLyogTUNMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMywgMTIpKSwJLyogUEdfRUlOVDEyICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDEzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkxIiksCQkvKiBDUzAgKi8KKwkJICBTVU5YSV9GVU5DVElPTigweDMsICJpMnMxIiksCQkvKiBCQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAzLCAxMykpLAkvKiBQR19FSU5UMTMgKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oRywgMTQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTEiKSwJCS8qIENMSyAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImkyczEiKSwJCS8qIExSQ0sgKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDMsIDE0KSksCS8qIFBHX0VJTlQxNCAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAxNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMSIpLAkJLyogTU9TSSAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImkyczEiKSwJCS8qIERJTiAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMywgMTUpKSwJLyogUEdfRUlOVDE1ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDE2KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkxIiksCQkvKiBNSVNPICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAiaTJzMSIpLAkJLyogRE9VVCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OX0lSUV9CQU5LKDB4NiwgMywgMTYpKSwJLyogUEdfRUlOVDE2ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEcsIDE3KSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ1YXJ0NCIpLAkJLyogVFggKi8KKwkJICBTVU5YSV9GVU5DVElPTl9JUlFfQkFOSygweDYsIDMsIDE3KSksCS8qIFBHX0VJTlQxNyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihHLCAxOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidWFydDQiKSwJCS8qIFJYICovCisJCSAgU1VOWElfRlVOQ1RJT05fSVJRX0JBTksoMHg2LCAzLCAxOCkpLAkvKiBQR19FSU5UMTggKi8KKwkvKiBIb2xlLCBub3RlIEggc3RhcnRzIGF0IHBpbiA5ICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDkpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MiwgInNwaTIiKSwJCS8qIENTMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MywgImp0YWciKSwJCS8qIE1TMCAqLworCQkgIFNVTlhJX0ZVTkNUSU9OKDB4NCwgInB3bTEiKSksCQkvKiBQb3NpdGl2ZSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAxMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAic3BpMiIpLAkJLyogQ0xLICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAianRhZyIpLAkJLyogQ0swICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAicHdtMSIpKSwJCS8qIE5lZ2F0aXZlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDExKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBNT1NJICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAianRhZyIpLAkJLyogRE8wICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAicHdtMiIpKSwJCS8qIFBvc2l0aXZlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDEyKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJzcGkyIiksCQkvKiBNSVNPICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHgzLCAianRhZyIpLAkJLyogREkwICovCisJCSAgU1VOWElfRlVOQ1RJT04oMHg0LCAicHdtMiIpKSwJCS8qIE5lZ2F0aXZlICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDEzKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJwd20wIikpLAorCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAxNCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMCIpKSwJCS8qIFNDSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAxNSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMCIpKSwJCS8qIFNEQSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAxNiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMSIpKSwJCS8qIFNDSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAxNyksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMSIpKSwJCS8qIFNEQSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAxOCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMiIpKSwJCS8qIFNDSyAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAxOSksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAiaTJjMiIpKSwJCS8qIFNEQSAqLworCVNVTlhJX1BJTihTVU5YSV9QSU5DVFJMX1BJTihILCAyMCksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgwLCAiZ3Bpb19pbiIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MSwgImdwaW9fb3V0IiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgyLCAidWFydDAiKSksCS8qIFRYICovCisJU1VOWElfUElOKFNVTlhJX1BJTkNUUkxfUElOKEgsIDIxKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDAsICJncGlvX2luIiksCisJCSAgU1VOWElfRlVOQ1RJT04oMHgxLCAiZ3Bpb19vdXQiKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDIsICJ1YXJ0MCIpKSwJLyogUlggKi8KKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMjIpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpKSwKKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMjMpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpKSwKKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMjQpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpKSwKKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMjUpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpKSwKKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMjYpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpKSwKKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMjcpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpKSwKKwlTVU5YSV9QSU4oU1VOWElfUElOQ1RSTF9QSU4oSCwgMjgpLAorCQkgIFNVTlhJX0ZVTkNUSU9OKDB4MCwgImdwaW9faW4iKSwKKwkJICBTVU5YSV9GVU5DVElPTigweDEsICJncGlvX291dCIpKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VueGlfcGluY3RybF9kZXNjIHN1bjZpX2EzMXNfcGluY3RybF9kYXRhID0geworCS5waW5zID0gc3VuNmlfYTMxc19waW5zLAorCS5ucGlucyA9IEFSUkFZX1NJWkUoc3VuNmlfYTMxc19waW5zKSwKKwkuaXJxX2JhbmtzID0gNCwKK307CisKK3N0YXRpYyBpbnQgc3VuNmlfYTMxc19waW5jdHJsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIHN1bnhpX3BpbmN0cmxfaW5pdChwZGV2LAorCQkJCSAgJnN1bjZpX2EzMXNfcGluY3RybF9kYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgc3VuNmlfYTMxc19waW5jdHJsX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJhbGx3aW5uZXIsc3VuNmktYTMxcy1waW5jdHJsIiwgfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHN1bjZpX2EzMXNfcGluY3RybF9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN1bjZpX2EzMXNfcGluY3RybF9kcml2ZXIgPSB7CisJLnByb2JlCT0gc3VuNmlfYTMxc19waW5jdHJsX3Byb2JlLAorCS5kcml2ZXIJPSB7CisJCS5uYW1lCQk9ICJzdW42aS1hMzFzLXBpbmN0cmwiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZQk9IHN1bjZpX2EzMXNfcGluY3RybF9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3VuNmlfYTMxc19waW5jdHJsX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFsbHdpbm5lciBBMzFzIHBpbmN0cmwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMgYi9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMKaW5kZXggNjY5NzdlYi4uZmYwMzU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcG5wYWNwaS9yc3BhcnNlci5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvcnNwYXJzZXIuYwpAQCAtMTgwLDIwICsxODAsMjEgQEAKIAlzdHJ1Y3QgcG5wX2RldiAqZGV2ID0gZGF0YTsKIAlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9kbWEgKmRtYTsKIAlzdHJ1Y3QgYWNwaV9yZXNvdXJjZV92ZW5kb3JfdHlwZWQgKnZlbmRvcl90eXBlZDsKLQlzdHJ1Y3QgcmVzb3VyY2UgciA9IHswfTsKKwlzdHJ1Y3QgcmVzb3VyY2Vfd2luIHdpbiA9IHt7MH0sIDB9OworCXN0cnVjdCByZXNvdXJjZSAqciA9ICZ3aW4ucmVzOwogCWludCBpLCBmbGFnczsKIAotCWlmIChhY3BpX2Rldl9yZXNvdXJjZV9hZGRyZXNzX3NwYWNlKHJlcywgJnIpCi0JICAgIHx8IGFjcGlfZGV2X3Jlc291cmNlX2V4dF9hZGRyZXNzX3NwYWNlKHJlcywgJnIpKSB7Ci0JCXBucF9hZGRfcmVzb3VyY2UoZGV2LCAmcik7CisJaWYgKGFjcGlfZGV2X3Jlc291cmNlX2FkZHJlc3Nfc3BhY2UocmVzLCAmd2luKQorCSAgICB8fCBhY3BpX2Rldl9yZXNvdXJjZV9leHRfYWRkcmVzc19zcGFjZShyZXMsICZ3aW4pKSB7CisJCXBucF9hZGRfcmVzb3VyY2UoZGV2LCAmd2luLnJlcyk7CiAJCXJldHVybiBBRV9PSzsKIAl9CiAKLQlyLmZsYWdzID0gMDsKLQlpZiAoYWNwaV9kZXZfcmVzb3VyY2VfaW50ZXJydXB0KHJlcywgMCwgJnIpKSB7Ci0JCXBucGFjcGlfYWRkX2lycXJlc291cmNlKGRldiwgJnIpOwotCQlmb3IgKGkgPSAxOyBhY3BpX2Rldl9yZXNvdXJjZV9pbnRlcnJ1cHQocmVzLCBpLCAmcik7IGkrKykKLQkJCXBucGFjcGlfYWRkX2lycXJlc291cmNlKGRldiwgJnIpOworCXItPmZsYWdzID0gMDsKKwlpZiAoYWNwaV9kZXZfcmVzb3VyY2VfaW50ZXJydXB0KHJlcywgMCwgcikpIHsKKwkJcG5wYWNwaV9hZGRfaXJxcmVzb3VyY2UoZGV2LCByKTsKKwkJZm9yIChpID0gMTsgYWNwaV9kZXZfcmVzb3VyY2VfaW50ZXJydXB0KHJlcywgaSwgcik7IGkrKykKKwkJCXBucGFjcGlfYWRkX2lycXJlc291cmNlKGRldiwgcik7CiAKIAkJaWYgKGkgPiAxKSB7CiAJCQkvKgpAQCAtMjA5LDcgKzIxMCw3IEBACiAJCQl9CiAJCX0KIAkJcmV0dXJuIEFFX09LOwotCX0gZWxzZSBpZiAoci5mbGFncyAmIElPUkVTT1VSQ0VfRElTQUJMRUQpIHsKKwl9IGVsc2UgaWYgKHItPmZsYWdzICYgSU9SRVNPVVJDRV9ESVNBQkxFRCkgewogCQlwbnBfYWRkX2lycV9yZXNvdXJjZShkZXYsIDAsIElPUkVTT1VSQ0VfRElTQUJMRUQpOwogCQlyZXR1cm4gQUVfT0s7CiAJfQpAQCAtMjE4LDEzICsyMTksMTMgQEAKIAljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9NRU1PUlkyNDoKIAljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9NRU1PUlkzMjoKIAljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9GSVhFRF9NRU1PUlkzMjoKLQkJaWYgKGFjcGlfZGV2X3Jlc291cmNlX21lbW9yeShyZXMsICZyKSkKLQkJCXBucF9hZGRfcmVzb3VyY2UoZGV2LCAmcik7CisJCWlmIChhY3BpX2Rldl9yZXNvdXJjZV9tZW1vcnkocmVzLCByKSkKKwkJCXBucF9hZGRfcmVzb3VyY2UoZGV2LCByKTsKIAkJYnJlYWs7CiAJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfSU86CiAJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRklYRURfSU86Ci0JCWlmIChhY3BpX2Rldl9yZXNvdXJjZV9pbyhyZXMsICZyKSkKLQkJCXBucF9hZGRfcmVzb3VyY2UoZGV2LCAmcik7CisJCWlmIChhY3BpX2Rldl9yZXNvdXJjZV9pbyhyZXMsIHIpKQorCQkJcG5wX2FkZF9yZXNvdXJjZShkZXYsIHIpOwogCQlicmVhazsKIAljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9ETUE6CiAJCWRtYSA9ICZyZXMtPmRhdGEuZG1hOwpAQCAtNDEwLDEyICs0MTEsMTIgQEAKIAlpZiAocC0+cmVzb3VyY2VfdHlwZSA9PSBBQ1BJX01FTU9SWV9SQU5HRSkgewogCQlpZiAocC0+aW5mby5tZW0ud3JpdGVfcHJvdGVjdCA9PSBBQ1BJX1JFQURfV1JJVEVfTUVNT1JZKQogCQkJZmxhZ3MgPSBJT1JFU09VUkNFX01FTV9XUklURUFCTEU7Ci0JCXBucF9yZWdpc3Rlcl9tZW1fcmVzb3VyY2UoZGV2LCBvcHRpb25fZmxhZ3MsIHAtPm1pbmltdW0sCi0JCQkJCSAgcC0+bWluaW11bSwgMCwgcC0+YWRkcmVzc19sZW5ndGgsCisJCXBucF9yZWdpc3Rlcl9tZW1fcmVzb3VyY2UoZGV2LCBvcHRpb25fZmxhZ3MsIHAtPmFkZHJlc3MubWluaW11bSwKKwkJCQkJICBwLT5hZGRyZXNzLm1pbmltdW0sIDAsIHAtPmFkZHJlc3MuYWRkcmVzc19sZW5ndGgsCiAJCQkJCSAgZmxhZ3MpOwogCX0gZWxzZSBpZiAocC0+cmVzb3VyY2VfdHlwZSA9PSBBQ1BJX0lPX1JBTkdFKQotCQlwbnBfcmVnaXN0ZXJfcG9ydF9yZXNvdXJjZShkZXYsIG9wdGlvbl9mbGFncywgcC0+bWluaW11bSwKLQkJCQkJICAgcC0+bWluaW11bSwgMCwgcC0+YWRkcmVzc19sZW5ndGgsCisJCXBucF9yZWdpc3Rlcl9wb3J0X3Jlc291cmNlKGRldiwgb3B0aW9uX2ZsYWdzLCBwLT5hZGRyZXNzLm1pbmltdW0sCisJCQkJCSAgIHAtPmFkZHJlc3MubWluaW11bSwgMCwgcC0+YWRkcmVzcy5hZGRyZXNzX2xlbmd0aCwKIAkJCQkJICAgSU9SRVNPVVJDRV9JT19GSVhFRCk7CiB9CiAKQEAgLTQyOSwxMiArNDMwLDEyIEBACiAJaWYgKHAtPnJlc291cmNlX3R5cGUgPT0gQUNQSV9NRU1PUllfUkFOR0UpIHsKIAkJaWYgKHAtPmluZm8ubWVtLndyaXRlX3Byb3RlY3QgPT0gQUNQSV9SRUFEX1dSSVRFX01FTU9SWSkKIAkJCWZsYWdzID0gSU9SRVNPVVJDRV9NRU1fV1JJVEVBQkxFOwotCQlwbnBfcmVnaXN0ZXJfbWVtX3Jlc291cmNlKGRldiwgb3B0aW9uX2ZsYWdzLCBwLT5taW5pbXVtLAotCQkJCQkgIHAtPm1pbmltdW0sIDAsIHAtPmFkZHJlc3NfbGVuZ3RoLAorCQlwbnBfcmVnaXN0ZXJfbWVtX3Jlc291cmNlKGRldiwgb3B0aW9uX2ZsYWdzLCBwLT5hZGRyZXNzLm1pbmltdW0sCisJCQkJCSAgcC0+YWRkcmVzcy5taW5pbXVtLCAwLCBwLT5hZGRyZXNzLmFkZHJlc3NfbGVuZ3RoLAogCQkJCQkgIGZsYWdzKTsKIAl9IGVsc2UgaWYgKHAtPnJlc291cmNlX3R5cGUgPT0gQUNQSV9JT19SQU5HRSkKLQkJcG5wX3JlZ2lzdGVyX3BvcnRfcmVzb3VyY2UoZGV2LCBvcHRpb25fZmxhZ3MsIHAtPm1pbmltdW0sCi0JCQkJCSAgIHAtPm1pbmltdW0sIDAsIHAtPmFkZHJlc3NfbGVuZ3RoLAorCQlwbnBfcmVnaXN0ZXJfcG9ydF9yZXNvdXJjZShkZXYsIG9wdGlvbl9mbGFncywgcC0+YWRkcmVzcy5taW5pbXVtLAorCQkJCQkgICBwLT5hZGRyZXNzLm1pbmltdW0sIDAsIHAtPmFkZHJlc3MuYWRkcmVzc19sZW5ndGgsCiAJCQkJCSAgIElPUkVTT1VSQ0VfSU9fRklYRUQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyLzg4cG04NjB4X2NoYXJnZXIuYyBiL2RyaXZlcnMvcG93ZXIvODhwbTg2MHhfY2hhcmdlci5jCmluZGV4IDY1MDkzMGUuLjczNGVjNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvODhwbTg2MHhfY2hhcmdlci5jCisrKyBiL2RyaXZlcnMvcG93ZXIvODhwbTg2MHhfY2hhcmdlci5jCkBAIC03MTEsNiArNzExLDcgQEAKIAlyZXR1cm4gMDsKIAogb3V0X2lycToKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmaW5mby0+dXNiKTsKIAl3aGlsZSAoLS1pID49IDApCiAJCWZyZWVfaXJxKGluZm8tPmlycVtpXSwgaW5mbyk7CiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL0tjb25maWcgYi9kcml2ZXJzL3Bvd2VyL0tjb25maWcKaW5kZXggMDEwOGMyYS4uMjdiNzUxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcG93ZXIvS2NvbmZpZwpAQCAtMzE1LDcgKzMxNSw3IEBACiAKIGNvbmZpZyBDSEFSR0VSX01BTkFHRVIKIAlib29sICJCYXR0ZXJ5IGNoYXJnZXIgbWFuYWdlciBmb3IgbXVsdGlwbGUgY2hhcmdlcnMiCi0JZGVwZW5kcyBvbiBSRUdVTEFUT1IgJiYgUlRDX0NMQVNTCisJZGVwZW5kcyBvbiBSRUdVTEFUT1IKIAlzZWxlY3QgRVhUQ09OCiAJaGVscAogICAgICAgICAgIFNheSBZIHRvIGVuYWJsZSBjaGFyZ2VyLW1hbmFnZXIgc3VwcG9ydCwgd2hpY2ggYWxsb3dzIG11bHRpcGxlCkBAIC0zMjcsMTEgKzMyNywxNiBAQAogY29uZmlnIENIQVJHRVJfTUFYMTQ1NzcKIAl0cmlzdGF0ZSAiTWF4aW0gTUFYMTQ1NzcvNzc4MzYgYmF0dGVyeSBjaGFyZ2VyIGRyaXZlciIKIAlkZXBlbmRzIG9uIE1GRF9NQVgxNDU3NwotCWRlcGVuZHMgb24gU1lTRlMKIAloZWxwCiAJICBTYXkgWSB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIGJhdHRlcnkgY2hhcmdlciBjb250cm9sIHN5c2ZzIGFuZAogCSAgcGxhdGZvcm0gZGF0YSBvZiBNQVgxNDU3Ny83NzgzNiBNVUlDcy4KIAorY29uZmlnIENIQVJHRVJfTUFYNzc2OTMKKwl0cmlzdGF0ZSAiTWF4aW0gTUFYNzc2OTMgYmF0dGVyeSBjaGFyZ2VyIGRyaXZlciIKKwlkZXBlbmRzIG9uIE1GRF9NQVg3NzY5MworCWhlbHAKKwkgIFNheSBZIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgTWF4aW0gTUFYNzc2OTMgYmF0dGVyeSBjaGFyZ2VyLgorCiBjb25maWcgQ0hBUkdFUl9NQVg4OTk3CiAJdHJpc3RhdGUgIk1heGltIE1BWDg5OTcvTUFYODk2NiBQTUlDIGJhdHRlcnkgY2hhcmdlciBkcml2ZXIiCiAJZGVwZW5kcyBvbiBNRkRfTUFYODk5NyAmJiBSRUdVTEFUT1JfTUFYODk5NwpAQCAtMzgzLDYgKzM4OCwxNCBAQAogCSBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBiYXR0ZXJ5IGNoYXJnaW5nIHdpdGggVFBTNjUwOTAKIAkgUE1JQyBjaGlwcy4KIAorY29uZmlnIEJBVFRFUllfR0FVR0VfTFRDMjk0MQorCXRyaXN0YXRlICJMVEMyOTQxL0xUQzI5NDMgQmF0dGVyeSBHYXVnZSBEcml2ZXIiCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgTFRDMjk0MSBhbmQgTFRDMjk0MyBCYXR0ZXJ5CisJICBHYXVnZSBJQy4gVGhlIGRyaXZlciByZXBvcnRzIHRoZSBjaGFyZ2UgY291bnQgY29udGludW91c2x5LCBhbmQKKwkgIG1lYXN1cmVzIHRoZSB2b2x0YWdlIGFuZCB0ZW1wZXJhdHVyZSBldmVyeSAxMCBzZWNvbmRzLgorCiBjb25maWcgQUI4NTAwX0JNCiAJYm9vbCAiQUI4NTAwIEJhdHRlcnkgTWFuYWdlbWVudCBEcml2ZXIiCiAJZGVwZW5kcyBvbiBBQjg1MDBfQ09SRSAmJiBBQjg1MDBfR1BBREMKQEAgLTM5Nyw2ICs0MTAsMTQgQEAKIAkgIFNheSBZIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgYmF0dGVyeSBhbmQgQUMgcG93ZXIgaW4gdGhlCiAJICBHb2xkZmlzaCBlbXVsYXRvci4KIAorY29uZmlnIEJBVFRFUllfUlQ1MDMzCisJdHJpc3RhdGUgIlJUNTAzMyBmdWVsIGdhdWdlIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNRkRfUlQ1MDMzCisJaGVscAorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIGJhdHRlcnkgZnVlbCBnYXVnZSBpbiBSaWNodGVrIFJUNTAzMyBQTUlDLgorCSAgVGhlIGZ1ZWxnYXVnZSBjYWxjdWxhdGVzIGFuZCBkZXRlcm1pbmVzIHRoZSBiYXR0ZXJ5IHN0YXRlIG9mIGNoYXJnZQorCSAgYWNjb3JkaW5nIHRvIGJhdHRlcnkgb3BlbiBjaXJjdWl0IHZvbHRhZ2UuCisKIHNvdXJjZSAiZHJpdmVycy9wb3dlci9yZXNldC9LY29uZmlnIgogCiBlbmRpZiAjIFBPV0VSX1NVUFBMWQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9NYWtlZmlsZSBiL2RyaXZlcnMvcG93ZXIvTWFrZWZpbGUKaW5kZXggZGZhODk0Mi4uMzZmOWUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlCkBAIC0yMCw2ICsyMCw3IEBACiBvYmotJChDT05GSUdfQkFUVEVSWV9EUzI3ODApCSs9IGRzMjc4MF9iYXR0ZXJ5Lm8KIG9iai0kKENPTkZJR19CQVRURVJZX0RTMjc4MSkJKz0gZHMyNzgxX2JhdHRlcnkubwogb2JqLSQoQ09ORklHX0JBVFRFUllfRFMyNzgyKQkrPSBkczI3ODJfYmF0dGVyeS5vCitvYmotJChDT05GSUdfQkFUVEVSWV9HQVVHRV9MVEMyOTQxKQkrPSBsdGMyOTQxLWJhdHRlcnktZ2F1Z2Uubwogb2JqLSQoQ09ORklHX0JBVFRFUllfR09MREZJU0gpCSs9IGdvbGRmaXNoX2JhdHRlcnkubwogb2JqLSQoQ09ORklHX0JBVFRFUllfUE1VKQkrPSBwbXVfYmF0dGVyeS5vCiBvYmotJChDT05GSUdfQkFUVEVSWV9PTFBDKQkrPSBvbHBjX2JhdHRlcnkubwpAQCAtMzQsNiArMzUsNyBAQAogb2JqLSQoQ09ORklHX0JBVFRFUllfTUFYMTcwNDApCSs9IG1heDE3MDQwX2JhdHRlcnkubwogb2JqLSQoQ09ORklHX0JBVFRFUllfTUFYMTcwNDIpCSs9IG1heDE3MDQyX2JhdHRlcnkubwogb2JqLSQoQ09ORklHX0JBVFRFUllfWjIpCSs9IHoyX2JhdHRlcnkubworb2JqLSQoQ09ORklHX0JBVFRFUllfUlQ1MDMzKQkrPSBydDUwMzNfYmF0dGVyeS5vCiBvYmotJChDT05GSUdfQkFUVEVSWV9TM0NfQURDKQkrPSBzM2NfYWRjX2JhdHRlcnkubwogb2JqLSQoQ09ORklHX0JBVFRFUllfVFdMNDAzMF9NQURDKQkrPSB0d2w0MDMwX21hZGNfYmF0dGVyeS5vCiBvYmotJChDT05GSUdfQ0hBUkdFUl84OFBNODYwWCkJKz0gODhwbTg2MHhfY2hhcmdlci5vCkBAIC01MCw2ICs1Miw3IEBACiBvYmotJChDT05GSUdfQ0hBUkdFUl9HUElPKQkrPSBncGlvLWNoYXJnZXIubwogb2JqLSQoQ09ORklHX0NIQVJHRVJfTUFOQUdFUikJKz0gY2hhcmdlci1tYW5hZ2VyLm8KIG9iai0kKENPTkZJR19DSEFSR0VSX01BWDE0NTc3KQkrPSBtYXgxNDU3N19jaGFyZ2VyLm8KK29iai0kKENPTkZJR19DSEFSR0VSX01BWDc3NjkzKQkrPSBtYXg3NzY5M19jaGFyZ2VyLm8KIG9iai0kKENPTkZJR19DSEFSR0VSX01BWDg5OTcpCSs9IG1heDg5OTdfY2hhcmdlci5vCiBvYmotJChDT05GSUdfQ0hBUkdFUl9NQVg4OTk4KQkrPSBtYXg4OTk4X2NoYXJnZXIubwogb2JqLSQoQ09ORklHX0NIQVJHRVJfQlEyNDE1WCkJKz0gYnEyNDE1eF9jaGFyZ2VyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvYWI4NTAwX2ZnLmMgYi9kcml2ZXJzL3Bvd2VyL2FiODUwMF9mZy5jCmluZGV4IDY5YjgwYmMuLmM5MDg2NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvYWI4NTAwX2ZnLmMKKysrIGIvZHJpdmVycy9wb3dlci9hYjg1MDBfZmcuYwpAQCAtMjQzNSwyMCArMjQzNSw2IEBACiAJfQogfQogCi0vKioKLSAqIGFiODUwMF9mZ19yZWluaXQoKSAtIGZvcmNlcyBGRyBhbGdvcml0aG0gdG8gcmVpbml0aWFsaXplIHdpdGggY3VycmVudCB2YWx1ZXMKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGZvcmNlIHRoZSBGRyBhbGdvcml0aG0gdG8gcmVjYWxjdWxhdGUgYSBuZXcKLSAqIHZvbHRhZ2UgYmFzZWQgYmF0dGVyeSBjYXBhY2l0eS4KLSAqLwotdm9pZCBhYjg1MDBfZmdfcmVpbml0KHZvaWQpCi17Ci0Jc3RydWN0IGFiODUwMF9mZyAqZGkgPSBhYjg1MDBfZmdfZ2V0KCk7Ci0JLyogVXNlciB3b24ndCBiZSBub3RpZmllZCBpZiBhIG51bGwgcG9pbnRlciByZXR1cm5lZC4gKi8KLQlpZiAoZGkgIT0gTlVMTCkKLQkJcXVldWVfZGVsYXllZF93b3JrKGRpLT5mZ193cSwgJmRpLT5mZ19yZWluaXRfd29yaywgMCk7Ci19Ci0KIC8qIEV4cG9zdXJlIHRvIHRoZSBzeXNmcyBpbnRlcmZhY2UgKi8KIAogc3RydWN0IGFiODUwMF9mZ19zeXNmc19lbnRyeSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL2JxMjQxOTBfY2hhcmdlci5jIGIvZHJpdmVycy9wb3dlci9icTI0MTkwX2NoYXJnZXIuYwppbmRleCBhZDNmZjhmLi5kMGU4MjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL2JxMjQxOTBfY2hhcmdlci5jCisrKyBiL2RyaXZlcnMvcG93ZXIvYnEyNDE5MF9jaGFyZ2VyLmMKQEAgLTkyOSw3ICs5MjksNyBAQAogCWNoYXJnZXItPnByb3BlcnRpZXMgPSBicTI0MTkwX2NoYXJnZXJfcHJvcGVydGllczsKIAljaGFyZ2VyLT5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUoYnEyNDE5MF9jaGFyZ2VyX3Byb3BlcnRpZXMpOwogCWNoYXJnZXItPnN1cHBsaWVkX3RvID0gYnEyNDE5MF9jaGFyZ2VyX3N1cHBsaWVkX3RvOwotCWNoYXJnZXItPm51bV9zdXBwbGllcyA9IEFSUkFZX1NJWkUoYnEyNDE5MF9jaGFyZ2VyX3N1cHBsaWVkX3RvKTsKKwljaGFyZ2VyLT5udW1fc3VwcGxpY2FudHMgPSBBUlJBWV9TSVpFKGJxMjQxOTBfY2hhcmdlcl9zdXBwbGllZF90byk7CiAJY2hhcmdlci0+Z2V0X3Byb3BlcnR5ID0gYnEyNDE5MF9jaGFyZ2VyX2dldF9wcm9wZXJ0eTsKIAljaGFyZ2VyLT5zZXRfcHJvcGVydHkgPSBicTI0MTkwX2NoYXJnZXJfc2V0X3Byb3BlcnR5OwogCWNoYXJnZXItPnByb3BlcnR5X2lzX3dyaXRlYWJsZSA9IGJxMjQxOTBfY2hhcmdlcl9wcm9wZXJ0eV9pc193cml0ZWFibGU7CkBAIC0xMjA4LDcgKzEyMDgsNyBAQAogewogCXN0cnVjdCBicTI0MTkwX2Rldl9pbmZvICpiZGkgPSBkYXRhOwogCWJvb2wgYWxlcnRfdXNlcnNwYWNlID0gZmFsc2U7Ci0JdTggc3NfcmVnLCBmX3JlZzsKKwl1OCBzc19yZWcgPSAwLCBmX3JlZyA9IDA7CiAJaW50IHJldDsKIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoYmRpLT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9icTI3eDAwX2JhdHRlcnkuYyBiL2RyaXZlcnMvcG93ZXIvYnEyN3gwMF9iYXR0ZXJ5LmMKaW5kZXggYTc4YWMyMC4uYjcyYmE3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9icTI3eDAwX2JhdHRlcnkuYworKysgYi9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jCkBAIC03Niw3ICs3Niw4IEBACiAKIC8qIGJxMjc0MjUgcmVnaXN0ZXIgYWRkcmVzc2VzIGFyZSBzYW1lIGFzIGJxMjd4MDAgYWRkcmVzc2VzIG1pbnVzIDQgKi8KICNkZWZpbmUgQlEyNzQyNV9SRUdfT0ZGU0VUCQkweDA0Ci0jZGVmaW5lIEJRMjc0MjVfUkVHX1NPQwkJCTB4MTggLyogUmVnaXN0ZXIgYWRkcmVzcyBwbHVzIG9mZnNldCAqLworI2RlZmluZSBCUTI3NDI1X1JFR19TT0MJCSgweDFDICsgQlEyNzQyNV9SRUdfT0ZGU0VUKQorI2RlZmluZSBCUTI3NDI1X1JFR19EQ0FQCQkoMHgzQyArIEJRMjc0MjVfUkVHX09GRlNFVCkKIAogI2RlZmluZSBCUTI3MDAwX1JTCQkJMjAgLyogUmVzaXN0b3Igc2Vuc2UgKi8KICNkZWZpbmUgQlEyN3gwMF9QT1dFUl9DT05TVEFOVAkJKDI1NiAqIDI5MjAwIC8gMTAwMCkKQEAgLTI4Miw5ICsyODMsMTIgQEAKIHsKIAlpbnQgaWxtZDsKIAotCWlmIChicTI3eHh4X2lzX2NoaXBfdmVyc2lvbl9oaWdoZXIoZGkpKQotCQlpbG1kID0gYnEyN3gwMF9yZWFkKGRpLCBCUTI3NTAwX1JFR19EQ0FQLCBmYWxzZSk7Ci0JZWxzZQorCWlmIChicTI3eHh4X2lzX2NoaXBfdmVyc2lvbl9oaWdoZXIoZGkpKSB7CisJCWlmIChkaS0+Y2hpcCA9PSBCUTI3NDI1KQorCQkJaWxtZCA9IGJxMjd4MDBfcmVhZChkaSwgQlEyNzQyNV9SRUdfRENBUCwgZmFsc2UpOworCQllbHNlCisJCQlpbG1kID0gYnEyN3gwMF9yZWFkKGRpLCBCUTI3NTAwX1JFR19EQ0FQLCBmYWxzZSk7CisJfSBlbHNlCiAJCWlsbWQgPSBicTI3eDAwX3JlYWQoZGksIEJRMjcwMDBfUkVHX0lMTUQsIHRydWUpOwogCiAJaWYgKGlsbWQgPCAwKSB7CkBAIC00OTMsMTAgKzQ5NywxMSBAQAogCQkJZGktPmNoYXJnZV9kZXNpZ25fZnVsbCA9IGJxMjd4MDBfYmF0dGVyeV9yZWFkX2lsbWQoZGkpOwogCX0KIAotCWlmIChtZW1jbXAoJmRpLT5jYWNoZSwgJmNhY2hlLCBzaXplb2YoY2FjaGUpKSAhPSAwKSB7Ci0JCWRpLT5jYWNoZSA9IGNhY2hlOworCWlmIChkaS0+Y2FjaGUuY2FwYWNpdHkgIT0gY2FjaGUuY2FwYWNpdHkpCiAJCXBvd2VyX3N1cHBseV9jaGFuZ2VkKCZkaS0+YmF0KTsKLQl9CisKKwlpZiAobWVtY21wKCZkaS0+Y2FjaGUsICZjYWNoZSwgc2l6ZW9mKGNhY2hlKSkgIT0gMCkKKwkJZGktPmNhY2hlID0gY2FjaGU7CiAKIAlkaS0+bGFzdF91cGRhdGUgPSBqaWZmaWVzOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9jaGFyZ2VyLW1hbmFnZXIuYyBiL2RyaXZlcnMvcG93ZXIvY2hhcmdlci1tYW5hZ2VyLmMKaW5kZXggNjQ5MDUyZS4uMTRiMGQ4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9jaGFyZ2VyLW1hbmFnZXIuYworKysgYi9kcml2ZXJzL3Bvd2VyL2NoYXJnZXItbWFuYWdlci5jCkBAIC02OSwxNiArNjksMTAgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgoY21fbGlzdF9tdHgpOwogCiAvKiBBYm91dCBpbi1zdXNwZW5kIChzdXNwZW5kLWFnYWluKSBtb25pdG9yaW5nICovCi1zdGF0aWMgc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Y19kZXY7Ci0vKgotICogQmFja3VwIFJUQyBhbGFybQotICogU2F2ZSB0aGUgd2FrZXVwIGFsYXJtIGJlZm9yZSBlbnRlcmluZyBzdXNwZW5kLXRvLVJBTQotICovCi1zdGF0aWMgc3RydWN0IHJ0Y193a2Fscm0gcnRjX3drYWxhcm1fc2F2ZTsKLS8qIEJhY2t1cCBSVEMgYWxhcm0gdGltZSBpbiB0ZXJtcyBvZiBzZWNvbmRzIHNpbmNlIDAxLTAxLTE5NzAgMDA6MDA6MDAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHJ0Y193a2FsYXJtX3NhdmVfdGltZTsKK3N0YXRpYyBzdHJ1Y3QgYWxhcm0gKmNtX3RpbWVyOworCiBzdGF0aWMgYm9vbCBjbV9zdXNwZW5kZWQ7Ci1zdGF0aWMgYm9vbCBjbV9ydGNfc2V0Oworc3RhdGljIGJvb2wgY21fdGltZXJfc2V0Owogc3RhdGljIHVuc2lnbmVkIGxvbmcgY21fc3VzcGVuZF9kdXJhdGlvbl9tczsKIAogLyogQWJvdXQgbm9ybWFsIChub3Qgc3VzcGVuZGVkKSBtb25pdG9yaW5nICovCkBAIC04Nyw5ICs4MSw2IEBACiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmNtX3dxOyAvKiBpbml0IGF0IGRyaXZlciBhZGQgKi8KIHN0YXRpYyBzdHJ1Y3QgZGVsYXllZF93b3JrIGNtX21vbml0b3Jfd29yazsgLyogaW5pdCBhdCBkcml2ZXIgYWRkICovCiAKLS8qIEdsb2JhbCBjaGFyZ2VyLW1hbmFnZXIgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBzdHJ1Y3QgY2hhcmdlcl9nbG9iYWxfZGVzYyAqZ19kZXNjOyAvKiBpbml0IHdpdGggc2V0dXBfY2hhcmdlcl9tYW5hZ2VyICovCi0KIC8qKgogICogaXNfYmF0dF9wcmVzZW50IC0gU2VlIGlmIHRoZSBiYXR0ZXJ5IHByZXNlbnRzIGluIHBsYWNlLgogICogQGNtOiB0aGUgQ2hhcmdlciBNYW5hZ2VyIHJlcHJlc2VudGluZyB0aGUgYmF0dGVyeS4KQEAgLTEwNDcsMTAgKzEwMzgsMTMgQEAKIHsKIAlzdHJ1Y3QgY2hhcmdlcl9tYW5hZ2VyICpjbTsKIAl1bnNpZ25lZCBpbnQgd2FrZXVwX21zID0gVUlOVF9NQVg7Ci0JYm9vbCByZXQgPSBmYWxzZTsKKwlpbnQgdGltZXJfcmVxID0gMDsKKworCWlmICh0aW1lX2FmdGVyKG5leHRfcG9sbGluZywgamlmZmllcykpCisJCUNNX01JTl9WQUxJRCh3YWtldXBfbXMsCisJCQlqaWZmaWVzX3RvX21zZWNzKG5leHRfcG9sbGluZyAtIGppZmZpZXMpKTsKIAogCW11dGV4X2xvY2soJmNtX2xpc3RfbXR4KTsKLQogCWxpc3RfZm9yX2VhY2hfZW50cnkoY20sICZjbV9saXN0LCBlbnRyeSkgewogCQl1bnNpZ25lZCBpbnQgZmJjaGtfbXMgPSAwOwogCkBAIC0xMDcwLDE2MiArMTA2NCwzOCBAQAogCQkvKiBTa2lwIGlmIHBvbGxpbmcgaXMgbm90IHJlcXVpcmVkIGZvciB0aGlzIENNICovCiAJCWlmICghaXNfcG9sbGluZ19yZXF1aXJlZChjbSkgJiYgIWNtLT5lbWVyZ2VuY3lfc3RvcCkKIAkJCWNvbnRpbnVlOworCQl0aW1lcl9yZXErKzsKIAkJaWYgKGNtLT5kZXNjLT5wb2xsaW5nX2ludGVydmFsX21zID09IDApCiAJCQljb250aW51ZTsKIAkJQ01fTUlOX1ZBTElEKHdha2V1cF9tcywgY20tPmRlc2MtPnBvbGxpbmdfaW50ZXJ2YWxfbXMpOwogCX0KLQogCW11dGV4X3VubG9jaygmY21fbGlzdF9tdHgpOwogCi0JaWYgKHdha2V1cF9tcyA8IFVJTlRfTUFYICYmIHdha2V1cF9tcyA+IDApIHsKKwlpZiAodGltZXJfcmVxICYmIGNtX3RpbWVyKSB7CisJCWt0aW1lX3Qgbm93LCBhZGQ7CisKKwkJLyoKKwkJICogU2V0IGFsYXJtIHdpdGggdGhlIHBvbGxpbmcgaW50ZXJ2YWwgKHdha2V1cF9tcykKKwkJICogVGhlIGFsYXJtIHRpbWUgc2hvdWxkIGJlIE5PVyArIENNX1JUQ19TTUFMTCBvciBsYXRlci4KKwkJICovCisJCWlmICh3YWtldXBfbXMgPT0gVUlOVF9NQVggfHwKKwkJCXdha2V1cF9tcyA8IENNX1JUQ19TTUFMTCAqIE1TRUNfUEVSX1NFQykKKwkJCXdha2V1cF9tcyA9IDIgKiBDTV9SVENfU01BTEwgKiBNU0VDX1BFUl9TRUM7CisKIAkJcHJfaW5mbygiQ2hhcmdlciBNYW5hZ2VyIHdha2V1cCB0aW1lcjogJXUgbXNcbiIsIHdha2V1cF9tcyk7Ci0JCWlmIChydGNfZGV2KSB7Ci0JCQlzdHJ1Y3QgcnRjX3drYWxybSB0bXA7Ci0JCQl1bnNpZ25lZCBsb25nIHRpbWUsIG5vdzsKLQkJCXVuc2lnbmVkIGxvbmcgYWRkID0gRElWX1JPVU5EX1VQKHdha2V1cF9tcywgMTAwMCk7CiAKLQkJCS8qCi0JCQkgKiBTZXQgYWxhcm0gd2l0aCB0aGUgcG9sbGluZyBpbnRlcnZhbCAod2FrZXVwX21zKQotCQkJICogZXhjZXB0IHdoZW4gcnRjX3drYWxhcm1fc2F2ZSBjb21lcyBmaXJzdC4KLQkJCSAqIEhvd2V2ZXIsIHRoZSBhbGFybSB0aW1lIHNob3VsZCBiZSBOT1cgKwotCQkJICogQ01fUlRDX1NNQUxMIG9yIGxhdGVyLgotCQkJICovCi0JCQl0bXAuZW5hYmxlZCA9IDE7Ci0JCQlydGNfcmVhZF90aW1lKHJ0Y19kZXYsICZ0bXAudGltZSk7Ci0JCQlydGNfdG1fdG9fdGltZSgmdG1wLnRpbWUsICZub3cpOwotCQkJaWYgKGFkZCA8IENNX1JUQ19TTUFMTCkKLQkJCQlhZGQgPSBDTV9SVENfU01BTEw7Ci0JCQl0aW1lID0gbm93ICsgYWRkOworCQlub3cgPSBrdGltZV9nZXRfYm9vdHRpbWUoKTsKKwkJYWRkID0ga3RpbWVfc2V0KHdha2V1cF9tcyAvIE1TRUNfUEVSX1NFQywKKwkJCQkod2FrZXVwX21zICUgTVNFQ19QRVJfU0VDKSAqIE5TRUNfUEVSX01TRUMpOworCQlhbGFybV9zdGFydChjbV90aW1lciwga3RpbWVfYWRkKG5vdywgYWRkKSk7CiAKLQkJCXJldCA9IHRydWU7CisJCWNtX3N1c3BlbmRfZHVyYXRpb25fbXMgPSB3YWtldXBfbXM7CiAKLQkJCWlmIChydGNfd2thbGFybV9zYXZlLmVuYWJsZWQgJiYKLQkJCSAgICBydGNfd2thbGFybV9zYXZlX3RpbWUgJiYKLQkJCSAgICBydGNfd2thbGFybV9zYXZlX3RpbWUgPCB0aW1lKSB7Ci0JCQkJaWYgKHJ0Y193a2FsYXJtX3NhdmVfdGltZSA8IG5vdyArIENNX1JUQ19TTUFMTCkKLQkJCQkJdGltZSA9IG5vdyArIENNX1JUQ19TTUFMTDsKLQkJCQllbHNlCi0JCQkJCXRpbWUgPSBydGNfd2thbGFybV9zYXZlX3RpbWU7Ci0KLQkJCQkvKiBUaGUgdGltZXIgaXMgbm90IGFwcG9pbnRlZCBieSBDTSAqLwotCQkJCXJldCA9IGZhbHNlOwotCQkJfQotCi0JCQlwcl9pbmZvKCJXYWtpbmcgdXAgYWZ0ZXIgJWx1IHNlY3NcbiIsIHRpbWUgLSBub3cpOwotCi0JCQlydGNfdGltZV90b190bSh0aW1lLCAmdG1wLnRpbWUpOwotCQkJcnRjX3NldF9hbGFybShydGNfZGV2LCAmdG1wKTsKLQkJCWNtX3N1c3BlbmRfZHVyYXRpb25fbXMgKz0gd2FrZXVwX21zOwotCQkJcmV0dXJuIHJldDsKLQkJfQorCQlyZXR1cm4gdHJ1ZTsKIAl9Ci0KLQlpZiAocnRjX2RldikKLQkJcnRjX3NldF9hbGFybShydGNfZGV2LCAmcnRjX3drYWxhcm1fc2F2ZSk7CiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCBfY21fZmJjaGtfaW5fc3VzcGVuZChzdHJ1Y3QgY2hhcmdlcl9tYW5hZ2VyICpjbSkKLXsKLQl1bnNpZ25lZCBsb25nIGppZmZ5X25vdyA9IGppZmZpZXM7Ci0KLQlpZiAoIWNtLT5mdWxsYmF0dF92Y2hrX2ppZmZpZXNfYXQpCi0JCXJldHVybjsKLQotCWlmIChnX2Rlc2MgJiYgZ19kZXNjLT5hc3N1bWVfdGltZXJfc3RvcHNfaW5fc3VzcGVuZCkKLQkJamlmZnlfbm93ICs9IG1zZWNzX3RvX2ppZmZpZXMoY21fc3VzcGVuZF9kdXJhdGlvbl9tcyk7Ci0KLQkvKiBFeGVjdXRlIG5vdyBpZiBpdCdzIGdvaW5nIHRvIGJlIGV4ZWN1dGVkIG5vdCB0b28gbG9uZyBhZnRlciAqLwotCWppZmZ5X25vdyArPSBDTV9KSUZGSUVTX1NNQUxMOwotCi0JaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZnlfbm93LCBjbS0+ZnVsbGJhdHRfdmNoa19qaWZmaWVzX2F0KSkKLQkJZnVsbGJhdHRfdmNoaygmY20tPmZ1bGxiYXR0X3ZjaGtfd29yay53b3JrKTsKLX0KLQotLyoqCi0gKiBjbV9zdXNwZW5kX2FnYWluIC0gRGV0ZXJtaW5lIHdoZXRoZXIgc3VzcGVuZCBhZ2FpbiBvciBub3QKLSAqCi0gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHN5c3RlbSBzaG91bGQgYmUgc3VzcGVuZGVkIGFnYWluCi0gKiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBzeXN0ZW0gc2hvdWxkIGJlIHdva2VuIHVwCi0gKi8KLWJvb2wgY21fc3VzcGVuZF9hZ2Fpbih2b2lkKQotewotCXN0cnVjdCBjaGFyZ2VyX21hbmFnZXIgKmNtOwotCWJvb2wgcmV0ID0gZmFsc2U7Ci0KLQlpZiAoIWdfZGVzYyB8fCAhZ19kZXNjLT5ydGNfb25seV93YWtldXAgfHwgIWdfZGVzYy0+cnRjX29ubHlfd2FrZXVwKCkgfHwKLQkgICAgIWNtX3J0Y19zZXQpCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChjbV9tb25pdG9yKCkpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gdHJ1ZTsKLQltdXRleF9sb2NrKCZjbV9saXN0X210eCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjbSwgJmNtX2xpc3QsIGVudHJ5KSB7Ci0JCV9jbV9mYmNoa19pbl9zdXNwZW5kKGNtKTsKLQotCQlpZiAoY20tPnN0YXR1c19zYXZlX2V4dF9wd3JfaW5zZXJ0ZWQgIT0gaXNfZXh0X3B3cl9vbmxpbmUoY20pIHx8Ci0JCSAgICBjbS0+c3RhdHVzX3NhdmVfYmF0dCAhPSBpc19iYXR0X3ByZXNlbnQoY20pKSB7Ci0JCQlyZXQgPSBmYWxzZTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmY21fbGlzdF9tdHgpOwotCi0JY21fcnRjX3NldCA9IGNtX3NldHVwX3RpbWVyKCk7Ci1vdXQ6Ci0JLyogSXQncyBhYm91dCB0aGUgdGltZSB3aGVuIHRoZSBub24tQ00gYXBwb2ludGVkIHRpbWVyIGdvZXMgb2ZmICovCi0JaWYgKHJ0Y193a2FsYXJtX3NhdmUuZW5hYmxlZCkgewotCQl1bnNpZ25lZCBsb25nIG5vdzsKLQkJc3RydWN0IHJ0Y190aW1lIHRtcDsKLQotCQlydGNfcmVhZF90aW1lKHJ0Y19kZXYsICZ0bXApOwotCQlydGNfdG1fdG9fdGltZSgmdG1wLCAmbm93KTsKLQotCQlpZiAocnRjX3drYWxhcm1fc2F2ZV90aW1lICYmCi0JCSAgICBub3cgKyBDTV9SVENfU01BTEwgPj0gcnRjX3drYWxhcm1fc2F2ZV90aW1lKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoY21fc3VzcGVuZF9hZ2Fpbik7Ci0KLS8qKgotICogc2V0dXBfY2hhcmdlcl9tYW5hZ2VyIC0gaW5pdGlhbGl6ZSBjaGFyZ2VyX2dsb2JhbF9kZXNjIGRhdGEKLSAqIEBnZDogcG9pbnRlciB0byBpbnN0YW5jZSBvZiBjaGFyZ2VyX2dsb2JhbF9kZXNjCi0gKi8KLWludCBzZXR1cF9jaGFyZ2VyX21hbmFnZXIoc3RydWN0IGNoYXJnZXJfZ2xvYmFsX2Rlc2MgKmdkKQotewotCWlmICghZ2QpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHJ0Y19kZXYpCi0JCXJ0Y19jbGFzc19jbG9zZShydGNfZGV2KTsKLQlydGNfZGV2ID0gTlVMTDsKLQlnX2Rlc2MgPSBOVUxMOwotCi0JaWYgKCFnZC0+cnRjX29ubHlfd2FrZXVwKSB7Ci0JCXByX2VycigiVGhlIGNhbGxiYWNrIHJ0Y19vbmx5X3dha2V1cCBpcyBub3QgZ2l2ZW5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZ2QtPnJ0Y19uYW1lKSB7Ci0JCXJ0Y19kZXYgPSBydGNfY2xhc3Nfb3BlbihnZC0+cnRjX25hbWUpOwotCQlpZiAoSVNfRVJSX09SX05VTEwocnRjX2RldikpIHsKLQkJCXJ0Y19kZXYgPSBOVUxMOwotCQkJLyogUmV0cnkgYXQgcHJvYmUuIFJUQyBtYXkgYmUgbm90IHJlZ2lzdGVyZWQgeWV0ICovCi0JCX0KLQl9IGVsc2UgewotCQlwcl93YXJuKCJObyB3YWtldXAgdGltZXIgaXMgZ2l2ZW4gZm9yIGNoYXJnZXIgbWFuYWdlci4gICIKLQkJCSJJbi1zdXNwZW5kIG1vbml0b3Jpbmcgd29uJ3Qgd29yay5cbiIpOwotCX0KLQotCWdfZGVzYyA9IGdkOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoc2V0dXBfY2hhcmdlcl9tYW5hZ2VyKTsKLQogLyoqCiAgKiBjaGFyZ2VyX2V4dGNvbl93b3JrIC0gZW5hYmxlL2RpYWJsZSBjaGFyZ2VyIGFjY29yZGluZyB0byB0aGUgc3RhdGUKICAqCQkJb2YgY2hhcmdlciBjYWJsZQpAQCAtMTcxOSw2ICsxNTg5LDEyIEBACiAJcmV0dXJuIGRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRldik7CiB9CiAKK3N0YXRpYyBlbnVtIGFsYXJtdGltZXJfcmVzdGFydCBjbV90aW1lcl9mdW5jKHN0cnVjdCBhbGFybSAqYWxhcm0sIGt0aW1lX3Qgbm93KQoreworCWNtX3RpbWVyX3NldCA9IGZhbHNlOworCXJldHVybiBBTEFSTVRJTUVSX05PUkVTVEFSVDsKK30KKwogc3RhdGljIGludCBjaGFyZ2VyX21hbmFnZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgY2hhcmdlcl9kZXNjICpkZXNjID0gY21fZ2V0X2Rydl9kYXRhKHBkZXYpOwpAQCAtMTcyOCwxNiArMTYwNCw2IEBACiAJdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgdmFsOwogCXN0cnVjdCBwb3dlcl9zdXBwbHkgKmZ1ZWxfZ2F1Z2U7CiAKLQlpZiAoZ19kZXNjICYmICFydGNfZGV2ICYmIGdfZGVzYy0+cnRjX25hbWUpIHsKLQkJcnRjX2RldiA9IHJ0Y19jbGFzc19vcGVuKGdfZGVzYy0+cnRjX25hbWUpOwotCQlpZiAoSVNfRVJSX09SX05VTEwocnRjX2RldikpIHsKLQkJCXJ0Y19kZXYgPSBOVUxMOwotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGdldCBSVEMgJXNcbiIsCi0JCQkJZ19kZXNjLT5ydGNfbmFtZSk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQotCX0KLQogCWlmIChJU19FUlIoZGVzYykpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gcGxhdGZvcm0gZGF0YSAoZGVzYykgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTE3NTIsNiArMTYxOCwxMiBAQAogCWNtLT5kZXYgPSAmcGRldi0+ZGV2OwogCWNtLT5kZXNjID0gZGVzYzsKIAorCS8qIEluaXRpYWxpemUgYWxhcm0gdGltZXIgKi8KKwlpZiAoYWxhcm10aW1lcl9nZXRfcnRjZGV2KCkpIHsKKwkJY21fdGltZXIgPSBkZXZtX2t6YWxsb2MoY20tPmRldiwgc2l6ZW9mKCpjbV90aW1lciksIEdGUF9LRVJORUwpOworCQlhbGFybV9pbml0KGNtX3RpbWVyLCBBTEFSTV9CT09UVElNRSwgY21fdGltZXJfZnVuYyk7CisJfQorCiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIHR3byBkbyBub3QgbmVlZCB0byBiZSBlcnJvcnMuCiAJICogVXNlcnMgbWF5IGludGVudGlvbmFsbHkgaWdub3JlIHRob3NlIHR3byBmZWF0dXJlcy4KQEAgLTE5OTMsMzggKzE4NjUsNDEgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgYm9vbCBjbV9uZWVkX3RvX2F3YWtlKHZvaWQpCit7CisJc3RydWN0IGNoYXJnZXJfbWFuYWdlciAqY207CisKKwlpZiAoY21fdGltZXIpCisJCXJldHVybiBmYWxzZTsKKworCW11dGV4X2xvY2soJmNtX2xpc3RfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNtLCAmY21fbGlzdCwgZW50cnkpIHsKKwkJaWYgKGlzX2NoYXJnaW5nKGNtKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZjbV9saXN0X210eCk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmNtX2xpc3RfbXR4KTsKKworCXJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIGludCBjbV9zdXNwZW5kX3ByZXBhcmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBjaGFyZ2VyX21hbmFnZXIgKmNtID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAoIWNtX3N1c3BlbmRlZCkgewotCQlpZiAocnRjX2RldikgewotCQkJc3RydWN0IHJ0Y190aW1lIHRtcDsKLQkJCXVuc2lnbmVkIGxvbmcgbm93OworCWlmIChjbV9uZWVkX3RvX2F3YWtlKCkpCisJCXJldHVybiAtRUJVU1k7CiAKLQkJCXJ0Y19yZWFkX2FsYXJtKHJ0Y19kZXYsICZydGNfd2thbGFybV9zYXZlKTsKLQkJCXJ0Y19yZWFkX3RpbWUocnRjX2RldiwgJnRtcCk7Ci0KLQkJCWlmIChydGNfd2thbGFybV9zYXZlLmVuYWJsZWQpIHsKLQkJCQlydGNfdG1fdG9fdGltZSgmcnRjX3drYWxhcm1fc2F2ZS50aW1lLAotCQkJCQkgICAgICAgJnJ0Y193a2FsYXJtX3NhdmVfdGltZSk7Ci0JCQkJcnRjX3RtX3RvX3RpbWUoJnRtcCwgJm5vdyk7Ci0JCQkJaWYgKG5vdyA+IHJ0Y193a2FsYXJtX3NhdmVfdGltZSkKLQkJCQkJcnRjX3drYWxhcm1fc2F2ZV90aW1lID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJcnRjX3drYWxhcm1fc2F2ZV90aW1lID0gMDsKLQkJCX0KLQkJfQorCWlmICghY21fc3VzcGVuZGVkKQogCQljbV9zdXNwZW5kZWQgPSB0cnVlOwotCX0KIAotCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNtLT5mdWxsYmF0dF92Y2hrX3dvcmspOwotCWNtLT5zdGF0dXNfc2F2ZV9leHRfcHdyX2luc2VydGVkID0gaXNfZXh0X3B3cl9vbmxpbmUoY20pOwotCWNtLT5zdGF0dXNfc2F2ZV9iYXR0ID0gaXNfYmF0dF9wcmVzZW50KGNtKTsKKwljbV90aW1lcl9zZXQgPSBjbV9zZXR1cF90aW1lcigpOwogCi0JaWYgKCFjbV9ydGNfc2V0KSB7Ci0JCWNtX3N1c3BlbmRfZHVyYXRpb25fbXMgPSAwOwotCQljbV9ydGNfc2V0ID0gY21fc2V0dXBfdGltZXIoKTsKKwlpZiAoY21fdGltZXJfc2V0KSB7CisJCWNhbmNlbF93b3JrX3N5bmMoJnNldHVwX3BvbGxpbmcpOworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmNtX21vbml0b3Jfd29yayk7CisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmNtLT5mdWxsYmF0dF92Y2hrX3dvcmspOwogCX0KIAogCXJldHVybiAwOwpAQCAtMjAzNCwxOCArMTkwOSwyMSBAQAogewogCXN0cnVjdCBjaGFyZ2VyX21hbmFnZXIgKmNtID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlpZiAoY21fc3VzcGVuZGVkKSB7Ci0JCWlmIChydGNfZGV2KSB7Ci0JCQlzdHJ1Y3QgcnRjX3drYWxybSB0bXA7Ci0KLQkJCXJ0Y19yZWFkX2FsYXJtKHJ0Y19kZXYsICZ0bXApOwotCQkJcnRjX3drYWxhcm1fc2F2ZS5wZW5kaW5nID0gdG1wLnBlbmRpbmc7Ci0JCQlydGNfc2V0X2FsYXJtKHJ0Y19kZXYsICZydGNfd2thbGFybV9zYXZlKTsKLQkJfQorCWlmIChjbV9zdXNwZW5kZWQpCiAJCWNtX3N1c3BlbmRlZCA9IGZhbHNlOwotCQljbV9ydGNfc2V0ID0gZmFsc2U7CisKKwlpZiAoY21fdGltZXJfc2V0KSB7CisJCWt0aW1lX3QgcmVtYWluOworCisJCWFsYXJtX2NhbmNlbChjbV90aW1lcik7CisJCWNtX3RpbWVyX3NldCA9IGZhbHNlOworCQlyZW1haW4gPSBhbGFybV9leHBpcmVzX3JlbWFpbmluZyhjbV90aW1lcik7CisJCWNtX3N1c3BlbmRfZHVyYXRpb25fbXMgLT0ga3RpbWVfdG9fbXMocmVtYWluKTsKKwkJc2NoZWR1bGVfd29yaygmc2V0dXBfcG9sbGluZyk7CiAJfQogCisJX2NtX21vbml0b3IoY20pOworCiAJLyogUmUtZW5xdWV1ZSBkZWxheWVkIHdvcmsgKGZ1bGxiYXR0X3ZjaGtfd29yaykgKi8KIAlpZiAoY20tPmZ1bGxiYXR0X3ZjaGtfamlmZmllc19hdCkgewogCQl1bnNpZ25lZCBsb25nIGRlbGF5ID0gMDsKQEAgLTIwNjAsMjEgKzE5MzgsMTggQEAKIAkJfQogCiAJCS8qCi0JCSAqIEFjY291bnQgZm9yIGNtX3N1c3BlbmRfZHVyYXRpb25fbXMgaWYKLQkJICogYXNzdW1lX3RpbWVyX3N0b3BzX2luX3N1c3BlbmQgaXMgYWN0aXZlCisJCSAqIEFjY291bnQgZm9yIGNtX3N1c3BlbmRfZHVyYXRpb25fbXMgd2l0aCBhc3N1bWluZyB0aGF0CisJCSAqIHRpbWVyIHN0b3BzIGluIHN1c3BlbmQuCiAJCSAqLwotCQlpZiAoZ19kZXNjICYmIGdfZGVzYy0+YXNzdW1lX3RpbWVyX3N0b3BzX2luX3N1c3BlbmQpIHsKLQkJCWlmIChkZWxheSA+IGNtX3N1c3BlbmRfZHVyYXRpb25fbXMpCi0JCQkJZGVsYXkgLT0gY21fc3VzcGVuZF9kdXJhdGlvbl9tczsKLQkJCWVsc2UKLQkJCQlkZWxheSA9IDA7Ci0JCX0KKwkJaWYgKGRlbGF5ID4gY21fc3VzcGVuZF9kdXJhdGlvbl9tcykKKwkJCWRlbGF5IC09IGNtX3N1c3BlbmRfZHVyYXRpb25fbXM7CisJCWVsc2UKKwkJCWRlbGF5ID0gMDsKIAogCQlxdWV1ZV9kZWxheWVkX3dvcmsoY21fd3EsICZjbS0+ZnVsbGJhdHRfdmNoa193b3JrLAogCQkJCSAgIG1zZWNzX3RvX2ppZmZpZXMoZGVsYXkpKTsKIAl9CiAJZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZShjbS0+ZGV2LCBmYWxzZSk7Ci0JdWV2ZW50X25vdGlmeShjbSwgTlVMTCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBjaGFyZ2VyX21hbmFnZXJfcG0gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL2NvbGxpZV9iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL2NvbGxpZV9iYXR0ZXJ5LmMKaW5kZXggZDAyYWUwMi4uNTk0ZTRkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9jb2xsaWVfYmF0dGVyeS5jCisrKyBiL2RyaXZlcnMvcG93ZXIvY29sbGllX2JhdHRlcnkuYwpAQCAtMjYsNiArMjYsNyBAQAogc3RhdGljIERFRklORV9NVVRFWChiYXRfbG9jayk7IC8qIHByb3RlY3RzIGdwaW8gcGlucyAqLwogc3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCBiYXRfd29yazsKIHN0YXRpYyBzdHJ1Y3QgdWNiMXgwMCAqdWNiOworc3RhdGljIGludCB3YWtldXBfZW5hYmxlZDsKIAogc3RydWN0IGNvbGxpZV9iYXQgewogCWludCBzdGF0dXM7CkBAIC0yOTEsMTEgKzI5MiwyMSBAQAogewogCS8qIGZsdXNoIGFsbCBwZW5kaW5nIHN0YXR1cyB1cGRhdGVzICovCiAJZmx1c2hfd29yaygmYmF0X3dvcmspOworCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZkZXYtPnVjYi0+ZGV2KSAmJgorCSAgICBjb2xsaWVfYmF0X21haW4uc3RhdHVzID09IFBPV0VSX1NVUFBMWV9TVEFUVVNfQ0hBUkdJTkcpCisJCXdha2V1cF9lbmFibGVkID0gIWVuYWJsZV9pcnFfd2FrZShncGlvX3RvX2lycShDT0xMSUVfR1BJT19DTykpOworCWVsc2UKKwkJd2FrZXVwX2VuYWJsZWQgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY29sbGllX2JhdF9yZXN1bWUoc3RydWN0IHVjYjF4MDBfZGV2ICpkZXYpCiB7CisJaWYgKHdha2V1cF9lbmFibGVkKQorCQlkaXNhYmxlX2lycV93YWtlKGdwaW9fdG9faXJxKENPTExJRV9HUElPX0NPKSk7CisKIAkvKiB0aGluZ3MgbWF5IGhhdmUgY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIGF3YXkgKi8KIAlzY2hlZHVsZV93b3JrKCZiYXRfd29yayk7CiAJcmV0dXJuIDA7CkBAIC0zMzQsMTAgKzM0NSwxNSBAQAogCQkJCWNvbGxpZV9iYXRfZ3Bpb19pc3IsCiAJCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAogCQkJCSJtYWluIGZ1bGwiLCAmY29sbGllX2JhdF9tYWluKTsKLQlpZiAoIXJldCkgewotCQlzY2hlZHVsZV93b3JrKCZiYXRfd29yayk7Ci0JCXJldHVybiAwOwotCX0KKwlpZiAocmV0KQorCQlnb3RvIGVycl9pcnE7CisKKwlkZXZpY2VfaW5pdF93YWtldXAoJnVjYi0+ZGV2LCAxKTsKKwlzY2hlZHVsZV93b3JrKCZiYXRfd29yayk7CisKKwlyZXR1cm4gMDsKKworZXJyX2lycToKIAlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmY29sbGllX2JhdF9idS5wc3kpOwogZXJyX3BzeV9yZWdfYnU6CiAJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJmNvbGxpZV9iYXRfbWFpbi5wc3kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9ncGlvLWNoYXJnZXIuYyBiL2RyaXZlcnMvcG93ZXIvZ3Bpby1jaGFyZ2VyLmMKaW5kZXggYWVmNzRiZC4uYjc0MjRjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9ncGlvLWNoYXJnZXIuYworKysgYi9kcml2ZXJzL3Bvd2VyL2dwaW8tY2hhcmdlci5jCkBAIC0yMjksNyArMjI5LDcgQEAKIAogCWlmIChkZXZpY2VfbWF5X3dha2V1cChkZXYpKQogCQlncGlvX2NoYXJnZXItPndha2V1cF9lbmFibGVkID0KLQkJCWVuYWJsZV9pcnFfd2FrZShncGlvX2NoYXJnZXItPmlycSk7CisJCQkhZW5hYmxlX2lycV93YWtlKGdwaW9fY2hhcmdlci0+aXJxKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjM5LDcgKzIzOSw3IEBACiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwogCXN0cnVjdCBncGlvX2NoYXJnZXIgKmdwaW9fY2hhcmdlciA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0JaWYgKGdwaW9fY2hhcmdlci0+d2FrZXVwX2VuYWJsZWQpCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikgJiYgZ3Bpb19jaGFyZ2VyLT53YWtldXBfZW5hYmxlZCkKIAkJZGlzYWJsZV9pcnFfd2FrZShncGlvX2NoYXJnZXItPmlycSk7CiAJcG93ZXJfc3VwcGx5X2NoYW5nZWQoJmdwaW9fY2hhcmdlci0+Y2hhcmdlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvbHRjMjk0MS1iYXR0ZXJ5LWdhdWdlLmMgYi9kcml2ZXJzL3Bvd2VyL2x0YzI5NDEtYmF0dGVyeS1nYXVnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMWM5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bvd2VyL2x0YzI5NDEtYmF0dGVyeS1nYXVnZS5jCkBAIC0wLDAgKzEsNTQ3IEBACisvKgorICogSTJDIGNsaWVudC9kcml2ZXIgZm9yIHRoZSBMaW5lYXIgVGVjaG5vbG9neSBMVEMyOTQxIGFuZCBMVEMyOTQzCisgKiBCYXR0ZXJ5IEdhcyBHYXVnZSBJQworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBUb3BpYyBFbWJlZGRlZCBTeXN0ZW1zCisgKgorICogQXV0aG9yOiBBdXJ5biBWZXJ3ZWdlbgorICogQXV0aG9yOiBNaWtlIExvb2lqbWFucworICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2RlZmluZSBJMTZfTVNCKHgpCQkJKCh4ID4+IDgpICYgMHhGRikKKyNkZWZpbmUgSTE2X0xTQih4KQkJCSh4ICYgMHhGRikKKworI2RlZmluZSBMVEMyOTRYX1dPUktfREVMQVkJCTEwCS8qIFVwZGF0ZSBkZWxheSBpbiBzZWNvbmRzICovCisKKyNkZWZpbmUgTFRDMjk0WF9NQVhfVkFMVUUJCTB4RkZGRgorI2RlZmluZSBMVEMyOTRYX01JRF9TVVBQTFkJCTB4N0ZGRgorCisjZGVmaW5lIExUQzI5NDFfTUFYX1BSRVNDQUxFUl9FWFAJNworI2RlZmluZSBMVEMyOTQzX01BWF9QUkVTQ0FMRVJfRVhQCTYKKworZW51bSBsdGMyOTR4X3JlZyB7CisJTFRDMjk0WF9SRUdfU1RBVFVTCQk9IDB4MDAsCisJTFRDMjk0WF9SRUdfQ09OVFJPTAkJPSAweDAxLAorCUxUQzI5NFhfUkVHX0FDQ19DSEFSR0VfTVNCCT0gMHgwMiwKKwlMVEMyOTRYX1JFR19BQ0NfQ0hBUkdFX0xTQgk9IDB4MDMsCisJTFRDMjk0WF9SRUdfVEhSRVNIX0hJR0hfTVNCCT0gMHgwNCwKKwlMVEMyOTRYX1JFR19USFJFU0hfSElHSF9MU0IJPSAweDA1LAorCUxUQzI5NFhfUkVHX1RIUkVTSF9MT1dfTVNCCT0gMHgwNiwKKwlMVEMyOTRYX1JFR19USFJFU0hfTE9XX0xTQgk9IDB4MDcsCisJTFRDMjk0WF9SRUdfVk9MVEFHRV9NU0IJPSAweDA4LAorCUxUQzI5NFhfUkVHX1ZPTFRBR0VfTFNCCT0gMHgwOSwKKwlMVEMyOTRYX1JFR19DVVJSRU5UX01TQgk9IDB4MEUsCisJTFRDMjk0WF9SRUdfQ1VSUkVOVF9MU0IJPSAweDBGLAorCUxUQzI5NFhfUkVHX1RFTVBFUkFUVVJFX01TQgk9IDB4MTQsCisJTFRDMjk0WF9SRUdfVEVNUEVSQVRVUkVfTFNCCT0gMHgxNSwKK307CisKKyNkZWZpbmUgTFRDMjk0M19SRUdfQ09OVFJPTF9NT0RFX01BU0sgKEJJVCg3KSB8IEJJVCg2KSkKKyNkZWZpbmUgTFRDMjk0M19SRUdfQ09OVFJPTF9NT0RFX1NDQU4gQklUKDcpCisjZGVmaW5lIExUQzI5NFhfUkVHX0NPTlRST0xfUFJFU0NBTEVSX01BU0sJKEJJVCg1KSB8IEJJVCg0KSB8IEJJVCgzKSkKKyNkZWZpbmUgTFRDMjk0WF9SRUdfQ09OVFJPTF9TSFVURE9XTl9NQVNLCShCSVQoMCkpCisjZGVmaW5lIExUQzI5NFhfUkVHX0NPTlRST0xfUFJFU0NBTEVSX1NFVCh4KSBcCisJKCh4IDw8IDMpICYgTFRDMjk0WF9SRUdfQ09OVFJPTF9QUkVTQ0FMRVJfTUFTSykKKyNkZWZpbmUgTFRDMjk0WF9SRUdfQ09OVFJPTF9BTENDX0NPTkZJR19ESVNBQkxFRAkwCisKKyNkZWZpbmUgTFRDMjk0MV9OVU1fUkVHUwkweDA4CisjZGVmaW5lIExUQzI5NDNfTlVNX1JFR1MJMHgxOAorCitzdHJ1Y3QgbHRjMjk0eF9pbmZvIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwkvKiBJMkMgQ2xpZW50IHBvaW50ZXIgKi8KKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5IHN1cHBseTsJLyogU3VwcGx5IHBvaW50ZXIgKi8KKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CS8qIFdvcmsgc2NoZWR1bGVyICovCisJaW50IG51bV9yZWdzOwkvKiBOdW1iZXIgb2YgcmVnaXN0ZXJzIChjaGlwIHR5cGUpICovCisJaW50IGlkOwkJLyogSWRlbnRpZmllciBvZiBsdGMyOTR4IGNoaXAgKi8KKwlpbnQgY2hhcmdlOwkvKiBMYXN0IGNoYXJnZSByZWdpc3RlciBjb250ZW50ICovCisJaW50IHJfc2Vuc2U7CS8qIG1PaG0gKi8KKwlpbnQgUWxzYjsJLyogbkFoICovCit9OworCitzdGF0aWMgREVGSU5FX0lEUihsdGMyOTR4X2lkKTsKK3N0YXRpYyBERUZJTkVfTVVURVgobHRjMjk0eF9sb2NrKTsKKworc3RhdGljIGlubGluZSBpbnQgY29udmVydF9iaW5fdG9fdUFoKAorCWNvbnN0IHN0cnVjdCBsdGMyOTR4X2luZm8gKmluZm8sIGludCBRKQoreworCXJldHVybiAoKFEgKiAoaW5mby0+UWxzYiAvIDEwKSkpIC8gMTAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBjb252ZXJ0X3VBaF90b19iaW4oCisJY29uc3Qgc3RydWN0IGx0YzI5NHhfaW5mbyAqaW5mbywgaW50IHVBaCkKK3sKKwlpbnQgUTsKKworCVEgPSAodUFoICogMTAwKSAvIChpbmZvLT5RbHNiLzEwKTsKKwlyZXR1cm4gKFEgPCBMVEMyOTRYX01BWF9WQUxVRSkgPyBRIDogTFRDMjk0WF9NQVhfVkFMVUU7Cit9CisKK3N0YXRpYyBpbnQgbHRjMjk0eF9yZWFkX3JlZ3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwllbnVtIGx0YzI5NHhfcmVnIHJlZywgdTggKmJ1ZiwgaW50IG51bV9yZWdzKQoreworCWludCByZXQ7CisJc3RydWN0IGkyY19tc2cgbXNnc1syXSA9IHsgfTsKKwl1OCByZWdfc3RhcnQgPSByZWc7CisKKwltc2dzWzBdLmFkZHIJPSBjbGllbnQtPmFkZHI7CisJbXNnc1swXS5sZW4JPSAxOworCW1zZ3NbMF0uYnVmCT0gJnJlZ19zdGFydDsKKworCW1zZ3NbMV0uYWRkcgk9IGNsaWVudC0+YWRkcjsKKwltc2dzWzFdLmxlbgk9IG51bV9yZWdzOworCW1zZ3NbMV0uYnVmCT0gYnVmOworCW1zZ3NbMV0uZmxhZ3MJPSBJMkNfTV9SRDsKKworCXJldCA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsICZtc2dzWzBdLCAyKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImx0YzI5NDEgcmVhZF9yZWcgZmFpbGVkIVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X2RiZygmY2xpZW50LT5kZXYsICIlcyAoJSN4LCAlZCkgLT4gJSN4XG4iLAorCQlfX2Z1bmNfXywgcmVnLCBudW1fcmVncywgKmJ1Zik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsdGMyOTR4X3dyaXRlX3JlZ3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwllbnVtIGx0YzI5NHhfcmVnIHJlZywgY29uc3QgdTggKmJ1ZiwgaW50IG51bV9yZWdzKQoreworCWludCByZXQ7CisJdTggcmVnX3N0YXJ0ID0gcmVnOworCisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKGNsaWVudCwgcmVnX3N0YXJ0LCBudW1fcmVncywgYnVmKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImx0YzI5NDEgd3JpdGVfcmVnIGZhaWxlZCFcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiJXMgKCUjeCwgJWQpIC0+ICUjeFxuIiwKKwkJX19mdW5jX18sIHJlZywgbnVtX3JlZ3MsICpidWYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbHRjMjk0eF9yZXNldChjb25zdCBzdHJ1Y3QgbHRjMjk0eF9pbmZvICppbmZvLCBpbnQgcHJlc2NhbGVyX2V4cCkKK3sKKwlpbnQgcmV0OworCXU4IHZhbHVlOworCXU4IGNvbnRyb2w7CisKKwkvKiBSZWFkIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3RlcnMgKi8KKwlyZXQgPSBsdGMyOTR4X3JlYWRfcmVncyhpbmZvLT5jbGllbnQsIExUQzI5NFhfUkVHX0NPTlRST0wsICZ2YWx1ZSwgMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmaW5mby0+Y2xpZW50LT5kZXYsCisJCQkiQ291bGQgbm90IHJlYWQgcmVnaXN0ZXJzIGZyb20gZGV2aWNlXG4iKTsKKwkJZ290byBlcnJvcl9leGl0OworCX0KKworCWNvbnRyb2wgPSBMVEMyOTRYX1JFR19DT05UUk9MX1BSRVNDQUxFUl9TRVQocHJlc2NhbGVyX2V4cCkgfAorCQkJCUxUQzI5NFhfUkVHX0NPTlRST0xfQUxDQ19DT05GSUdfRElTQUJMRUQ7CisJLyogUHV0IHRoZSAyOTQzIGludG8gIm1vbml0b3IiIG1vZGUsIHNvIGl0IG1lYXN1cmVzIGV2ZXJ5IDEwIHNlYyAqLworCWlmIChpbmZvLT5udW1fcmVncyA9PSBMVEMyOTQzX05VTV9SRUdTKQorCQljb250cm9sIHw9IExUQzI5NDNfUkVHX0NPTlRST0xfTU9ERV9TQ0FOOworCisJaWYgKHZhbHVlICE9IGNvbnRyb2wpIHsKKwkJcmV0ID0gbHRjMjk0eF93cml0ZV9yZWdzKGluZm8tPmNsaWVudCwKKwkJCUxUQzI5NFhfUkVHX0NPTlRST0wsICZjb250cm9sLCAxKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoJmluZm8tPmNsaWVudC0+ZGV2LAorCQkJCSJDb3VsZCBub3Qgd3JpdGUgcmVnaXN0ZXJcbiIpOworCQkJZ290byBlcnJvcl9leGl0OworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2Vycm9yX2V4aXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsdGMyOTR4X3JlYWRfY2hhcmdlX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBsdGMyOTR4X2luZm8gKmluZm8pCit7CisJaW50IHJldDsKKwl1OCBkYXRhclsyXTsKKworCXJldCA9IGx0YzI5NHhfcmVhZF9yZWdzKGluZm8tPmNsaWVudCwKKwkJTFRDMjk0WF9SRUdfQUNDX0NIQVJHRV9NU0IsICZkYXRhclswXSwgMik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIChkYXRhclswXSA8PCA4KSArIGRhdGFyWzFdOworfQorCitzdGF0aWMgaW50IGx0YzI5NHhfZ2V0X2NoYXJnZV9ub3coY29uc3Qgc3RydWN0IGx0YzI5NHhfaW5mbyAqaW5mbywgaW50ICp2YWwpCit7CisJaW50IHZhbHVlID0gbHRjMjk0eF9yZWFkX2NoYXJnZV9yZWdpc3RlcihpbmZvKTsKKworCWlmICh2YWx1ZSA8IDApCisJCXJldHVybiB2YWx1ZTsKKwkvKiBXaGVuIHJfc2Vuc2UgPCAwLCB0aGlzIGNvdW50cyB1cCB3aGVuIHRoZSBiYXR0ZXJ5IGRpc2NoYXJnZXMgKi8KKwlpZiAoaW5mby0+UWxzYiA8IDApCisJCXZhbHVlIC09IDB4RkZGRjsKKwkqdmFsID0gY29udmVydF9iaW5fdG9fdUFoKGluZm8sIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsdGMyOTR4X3NldF9jaGFyZ2Vfbm93KGNvbnN0IHN0cnVjdCBsdGMyOTR4X2luZm8gKmluZm8sIGludCB2YWwpCit7CisJaW50IHJldDsKKwl1OCBkYXRhd1syXTsKKwl1OCBjdHJsX3JlZzsKKwlzMzIgdmFsdWU7CisKKwl2YWx1ZSA9IGNvbnZlcnRfdUFoX3RvX2JpbihpbmZvLCB2YWwpOworCS8qIERpcmVjdGlvbiBkZXBlbmRzIG9uIGhvdyBzZW5zZSsvLSB3ZXJlIGNvbm5lY3RlZCAqLworCWlmIChpbmZvLT5RbHNiIDwgMCkKKwkJdmFsdWUgKz0gMHhGRkZGOworCWlmICgodmFsdWUgPCAwKSB8fCAodmFsdWUgPiAweEZGRkYpKSAvKiBpbnB1dCB2YWxpZGF0aW9uICovCisJCXJldHVybiAtRUlOVkFMOworCisJLyogUmVhZCBjb250cm9sIHJlZ2lzdGVyICovCisJcmV0ID0gbHRjMjk0eF9yZWFkX3JlZ3MoaW5mby0+Y2xpZW50LAorCQlMVEMyOTRYX1JFR19DT05UUk9MLCAmY3RybF9yZWcsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCS8qIERpc2FibGUgYW5hbG9nIHNlY3Rpb24gKi8KKwljdHJsX3JlZyB8PSBMVEMyOTRYX1JFR19DT05UUk9MX1NIVVRET1dOX01BU0s7CisJcmV0ID0gbHRjMjk0eF93cml0ZV9yZWdzKGluZm8tPmNsaWVudCwKKwkJTFRDMjk0WF9SRUdfQ09OVFJPTCwgJmN0cmxfcmVnLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwkvKiBTZXQgbmV3IGNoYXJnZSB2YWx1ZSAqLworCWRhdGF3WzBdID0gSTE2X01TQih2YWx1ZSk7CisJZGF0YXdbMV0gPSBJMTZfTFNCKHZhbHVlKTsKKwlyZXQgPSBsdGMyOTR4X3dyaXRlX3JlZ3MoaW5mby0+Y2xpZW50LAorCQlMVEMyOTRYX1JFR19BQ0NfQ0hBUkdFX01TQiwgJmRhdGF3WzBdLCAyKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcl9leGl0OworCS8qIEVuYWJsZSBhbmFsb2cgc2VjdGlvbiAqLworZXJyb3JfZXhpdDoKKwljdHJsX3JlZyAmPSB+TFRDMjk0WF9SRUdfQ09OVFJPTF9TSFVURE9XTl9NQVNLOworCXJldCA9IGx0YzI5NHhfd3JpdGVfcmVncyhpbmZvLT5jbGllbnQsCisJCUxUQzI5NFhfUkVHX0NPTlRST0wsICZjdHJsX3JlZywgMSk7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbHRjMjk0eF9nZXRfY2hhcmdlX2NvdW50ZXIoCisJY29uc3Qgc3RydWN0IGx0YzI5NHhfaW5mbyAqaW5mbywgaW50ICp2YWwpCit7CisJaW50IHZhbHVlID0gbHRjMjk0eF9yZWFkX2NoYXJnZV9yZWdpc3RlcihpbmZvKTsKKworCWlmICh2YWx1ZSA8IDApCisJCXJldHVybiB2YWx1ZTsKKwl2YWx1ZSAtPSBMVEMyOTRYX01JRF9TVVBQTFk7CisJKnZhbCA9IGNvbnZlcnRfYmluX3RvX3VBaChpbmZvLCB2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbHRjMjk0eF9nZXRfdm9sdGFnZShjb25zdCBzdHJ1Y3QgbHRjMjk0eF9pbmZvICppbmZvLCBpbnQgKnZhbCkKK3sKKwlpbnQgcmV0OworCXU4IGRhdGFyWzJdOworCXUzMiB2YWx1ZTsKKworCXJldCA9IGx0YzI5NHhfcmVhZF9yZWdzKGluZm8tPmNsaWVudCwKKwkJTFRDMjk0WF9SRUdfVk9MVEFHRV9NU0IsICZkYXRhclswXSwgMik7CisJdmFsdWUgPSAoZGF0YXJbMF0gPDwgOCkgfCBkYXRhclsxXTsKKwkqdmFsID0gKCh2YWx1ZSAqIDIzNjAwKSAvIDB4RkZGRikgKiAxMDAwOyAvKiBpbiB1ViAqLworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbHRjMjk0eF9nZXRfY3VycmVudChjb25zdCBzdHJ1Y3QgbHRjMjk0eF9pbmZvICppbmZvLCBpbnQgKnZhbCkKK3sKKwlpbnQgcmV0OworCXU4IGRhdGFyWzJdOworCXMzMiB2YWx1ZTsKKworCXJldCA9IGx0YzI5NHhfcmVhZF9yZWdzKGluZm8tPmNsaWVudCwKKwkJTFRDMjk0WF9SRUdfQ1VSUkVOVF9NU0IsICZkYXRhclswXSwgMik7CisJdmFsdWUgPSAoZGF0YXJbMF0gPDwgOCkgfCBkYXRhclsxXTsKKwl2YWx1ZSAtPSAweDdGRkY7CisJLyogVmFsdWUgaXMgaW4gcmFuZ2UgLTMyay4uKzMyaywgcl9zZW5zZSBpcyB1c3VhbGx5IDEwLi41MCBtT2htLAorCSAqIHRoZSBmb3JtdWxhIGJlbG93IGtlZXBzIGV2ZXJ5dGhpbmcgaW4gczMyIHJhbmdlIHdoaWxlIHByZXNlcnZpbmcKKwkgKiBlbm91Z2ggZGlnaXRzICovCisJKnZhbCA9IDEwMDAgKiAoKDYwMDAwICogdmFsdWUpIC8gKGluZm8tPnJfc2Vuc2UgKiAweDdGRkYpKTsgLyogaW4gdUEgKi8KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGx0YzI5NHhfZ2V0X3RlbXBlcmF0dXJlKGNvbnN0IHN0cnVjdCBsdGMyOTR4X2luZm8gKmluZm8sIGludCAqdmFsKQoreworCWludCByZXQ7CisJdTggZGF0YXJbMl07CisJdTMyIHZhbHVlOworCisJcmV0ID0gbHRjMjk0eF9yZWFkX3JlZ3MoaW5mby0+Y2xpZW50LAorCQlMVEMyOTRYX1JFR19URU1QRVJBVFVSRV9NU0IsICZkYXRhclswXSwgMik7CisJdmFsdWUgPSAoZGF0YXJbMF0gPDwgOCkgfCBkYXRhclsxXTsKKwkvKiBGdWxsLXNjYWxlIGlzIDUxMCBLZWx2aW4sIGNvbnZlcnQgdG8gY2VudGlkZWdyZWVzICAqLworCSp2YWwgPSAoKCg1MTAwMCAqIHZhbHVlKSAvIDB4RkZGRikgLSAyNzIxNSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsdGMyOTR4X2dldF9wcm9wZXJ0eShzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCisJCQkJZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHJvcCwKKwkJCQl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCBsdGMyOTR4X2luZm8gKmluZm8gPQorCQljb250YWluZXJfb2YocHN5LCBzdHJ1Y3QgbHRjMjk0eF9pbmZvLCBzdXBwbHkpOworCisJc3dpdGNoIChwcm9wKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfTk9XOgorCQlyZXR1cm4gbHRjMjk0eF9nZXRfY2hhcmdlX25vdyhpbmZvLCAmdmFsLT5pbnR2YWwpOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX0NPVU5URVI6CisJCXJldHVybiBsdGMyOTR4X2dldF9jaGFyZ2VfY291bnRlcihpbmZvLCAmdmFsLT5pbnR2YWwpOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1c6CisJCXJldHVybiBsdGMyOTR4X2dldF92b2x0YWdlKGluZm8sICZ2YWwtPmludHZhbCk7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVzoKKwkJcmV0dXJuIGx0YzI5NHhfZ2V0X2N1cnJlbnQoaW5mbywgJnZhbC0+aW50dmFsKTsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RFTVA6CisJCXJldHVybiBsdGMyOTR4X2dldF90ZW1wZXJhdHVyZShpbmZvLCAmdmFsLT5pbnR2YWwpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGludCBsdGMyOTR4X3NldF9wcm9wZXJ0eShzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCisJZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAorCWNvbnN0IHVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCit7CisJc3RydWN0IGx0YzI5NHhfaW5mbyAqaW5mbyA9CisJCWNvbnRhaW5lcl9vZihwc3ksIHN0cnVjdCBsdGMyOTR4X2luZm8sIHN1cHBseSk7CisKKwlzd2l0Y2ggKHBzcCkgeworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX05PVzoKKwkJcmV0dXJuIGx0YzI5NHhfc2V0X2NoYXJnZV9ub3coaW5mbywgdmFsLT5pbnR2YWwpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRVBFUk07CisJfQorfQorCitzdGF0aWMgaW50IGx0YzI5NHhfcHJvcGVydHlfaXNfd3JpdGVhYmxlKAorCXN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwKQoreworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfTk9XOgorCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGx0YzI5NHhfdXBkYXRlKHN0cnVjdCBsdGMyOTR4X2luZm8gKmluZm8pCit7CisJaW50IGNoYXJnZSA9IGx0YzI5NHhfcmVhZF9jaGFyZ2VfcmVnaXN0ZXIoaW5mbyk7CisKKwlpZiAoY2hhcmdlICE9IGluZm8tPmNoYXJnZSkgeworCQlpbmZvLT5jaGFyZ2UgPSBjaGFyZ2U7CisJCXBvd2VyX3N1cHBseV9jaGFuZ2VkKCZpbmZvLT5zdXBwbHkpOworCX0KK30KKworc3RhdGljIHZvaWQgbHRjMjk0eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbHRjMjk0eF9pbmZvICppbmZvOworCisJaW5mbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbHRjMjk0eF9pbmZvLCB3b3JrLndvcmspOworCWx0YzI5NHhfdXBkYXRlKGluZm8pOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaW5mby0+d29yaywgTFRDMjk0WF9XT1JLX0RFTEFZICogSFopOworfQorCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgbHRjMjk0eF9wcm9wZXJ0aWVzW10gPSB7CisJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX0NPVU5URVIsCisJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9URU1QLAorfTsKKworc3RhdGljIGludCBsdGMyOTR4X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgbHRjMjk0eF9pbmZvICppbmZvID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwljYW5jZWxfZGVsYXllZF93b3JrKCZpbmZvLT53b3JrKTsKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmaW5mby0+c3VwcGx5KTsKKwlrZnJlZShpbmZvLT5zdXBwbHkubmFtZSk7CisJbXV0ZXhfbG9jaygmbHRjMjk0eF9sb2NrKTsKKwlpZHJfcmVtb3ZlKCZsdGMyOTR4X2lkLCBpbmZvLT5pZCk7CisJbXV0ZXhfdW5sb2NrKCZsdGMyOTR4X2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGx0YzI5NHhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBsdGMyOTR4X2luZm8gKmluZm87CisJaW50IHJldDsKKwlpbnQgbnVtOworCXUzMiBwcmVzY2FsZXJfZXhwOworCXMzMiByX3NlbnNlOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwltdXRleF9sb2NrKCZsdGMyOTR4X2xvY2spOworCXJldCA9IGlkcl9hbGxvYygmbHRjMjk0eF9pZCwgY2xpZW50LCAwLCAwLCBHRlBfS0VSTkVMKTsKKwltdXRleF91bmxvY2soJmx0YzI5NHhfbG9jayk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbF9pZDsKKworCW51bSA9IHJldDsKKworCWluZm8gPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKmluZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoaW5mbyA9PSBOVUxMKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9pbmZvOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGluZm8pOworCisJaW5mby0+bnVtX3JlZ3MgPSBpZC0+ZHJpdmVyX2RhdGE7CisJaW5mby0+c3VwcGx5Lm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgIiVzLSVkIiwgY2xpZW50LT5uYW1lLCBudW0pOworCWlmICghaW5mby0+c3VwcGx5Lm5hbWUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmYWlsX25hbWU7CisJfQorCisJbnAgPSBvZl9ub2RlX2dldChjbGllbnQtPmRldi5vZl9ub2RlKTsKKworCS8qIHJfc2Vuc2UgY2FuIGJlIG5lZ2F0aXZlLCB3aGVuIHNlbnNlKyBpcyBjb25uZWN0ZWQgdG8gdGhlIGJhdHRlcnkKKwkgKiBpbnN0ZWFkIG9mIHRoZSBzZW5zZS0uIFRoaXMgcmVzdWx0cyBpbiByZXZlcnNlZCBtZWFzdXJlbWVudHMuICovCisJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJsbHRjLHJlc2lzdG9yLXNlbnNlIiwgJnJfc2Vuc2UpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LAorCQkJIkNvdWxkIG5vdCBmaW5kIGxsdGMscmVzaXN0b3Itc2Vuc2UgaW4gZGV2aWNldHJlZVxuIik7CisJCWdvdG8gZmFpbF9uYW1lOworCX0KKwlpbmZvLT5yX3NlbnNlID0gcl9zZW5zZTsKKworCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAibGx0YyxwcmVzY2FsZXItZXhwb25lbnQiLAorCQkmcHJlc2NhbGVyX2V4cCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LAorCQkJImxsdGMscHJlc2NhbGVyLWV4cG9uZW50IG5vdCBpbiBkZXZpY2V0cmVlXG4iKTsKKwkJcHJlc2NhbGVyX2V4cCA9IExUQzI5NDFfTUFYX1BSRVNDQUxFUl9FWFA7CisJfQorCisJaWYgKGluZm8tPm51bV9yZWdzID09IExUQzI5NDNfTlVNX1JFR1MpIHsKKwkJaWYgKHByZXNjYWxlcl9leHAgPiBMVEMyOTQzX01BWF9QUkVTQ0FMRVJfRVhQKQorCQkJcHJlc2NhbGVyX2V4cCA9IExUQzI5NDNfTUFYX1BSRVNDQUxFUl9FWFA7CisJCWluZm8tPlFsc2IgPSAoKDM0MCAqIDUwMDAwKSAvIHJfc2Vuc2UpIC8KKwkJCQkoNDA5NiAvICgxIDw8ICgyKnByZXNjYWxlcl9leHApKSk7CisJfSBlbHNlIHsKKwkJaWYgKHByZXNjYWxlcl9leHAgPiBMVEMyOTQxX01BWF9QUkVTQ0FMRVJfRVhQKQorCQkJcHJlc2NhbGVyX2V4cCA9IExUQzI5NDFfTUFYX1BSRVNDQUxFUl9FWFA7CisJCWluZm8tPlFsc2IgPSAoKDU4ICogNTAwMDApIC8gcl9zZW5zZSkgLworCQkJCSgxMjggLyAoMSA8PCBwcmVzY2FsZXJfZXhwKSk7CisJfQorCisJaW5mby0+Y2xpZW50ID0gY2xpZW50OworCWluZm8tPmlkID0gbnVtOworCWluZm8tPnN1cHBseS50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfQkFUVEVSWTsKKwlpbmZvLT5zdXBwbHkucHJvcGVydGllcyA9IGx0YzI5NHhfcHJvcGVydGllczsKKwlpZiAoaW5mby0+bnVtX3JlZ3MgPj0gTFRDMjk0WF9SRUdfVEVNUEVSQVRVUkVfTFNCKQorCQlpbmZvLT5zdXBwbHkubnVtX3Byb3BlcnRpZXMgPQorCQkJQVJSQVlfU0laRShsdGMyOTR4X3Byb3BlcnRpZXMpOworCWVsc2UgaWYgKGluZm8tPm51bV9yZWdzID49IExUQzI5NFhfUkVHX0NVUlJFTlRfTFNCKQorCQlpbmZvLT5zdXBwbHkubnVtX3Byb3BlcnRpZXMgPQorCQkJQVJSQVlfU0laRShsdGMyOTR4X3Byb3BlcnRpZXMpIC0gMTsKKwllbHNlIGlmIChpbmZvLT5udW1fcmVncyA+PSBMVEMyOTRYX1JFR19WT0xUQUdFX0xTQikKKwkJaW5mby0+c3VwcGx5Lm51bV9wcm9wZXJ0aWVzID0KKwkJCUFSUkFZX1NJWkUobHRjMjk0eF9wcm9wZXJ0aWVzKSAtIDI7CisJZWxzZQorCQlpbmZvLT5zdXBwbHkubnVtX3Byb3BlcnRpZXMgPQorCQkJQVJSQVlfU0laRShsdGMyOTR4X3Byb3BlcnRpZXMpIC0gMzsKKwlpbmZvLT5zdXBwbHkuZ2V0X3Byb3BlcnR5ID0gbHRjMjk0eF9nZXRfcHJvcGVydHk7CisJaW5mby0+c3VwcGx5LnNldF9wcm9wZXJ0eSA9IGx0YzI5NHhfc2V0X3Byb3BlcnR5OworCWluZm8tPnN1cHBseS5wcm9wZXJ0eV9pc193cml0ZWFibGUgPSBsdGMyOTR4X3Byb3BlcnR5X2lzX3dyaXRlYWJsZTsKKwlpbmZvLT5zdXBwbHkuZXh0ZXJuYWxfcG93ZXJfY2hhbmdlZAk9IE5VTEw7CisKKwlJTklUX0RFTEFZRURfV09SSygmaW5mby0+d29yaywgbHRjMjk0eF93b3JrKTsKKworCXJldCA9IGx0YzI5NHhfcmVzZXQoaW5mbywgcHJlc2NhbGVyX2V4cCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJDb21tdW5pY2F0aW9uIHdpdGggY2hpcCBmYWlsZWRcbiIpOworCQlnb3RvIGZhaWxfY29tbTsKKwl9CisKKwlyZXQgPSBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2LCAmaW5mby0+c3VwcGx5KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGx0YzI5NDFcbiIpOworCQlnb3RvIGZhaWxfcmVnaXN0ZXI7CisJfSBlbHNlIHsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpbmZvLT53b3JrLCBMVEMyOTRYX1dPUktfREVMQVkgKiBIWik7CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWxfcmVnaXN0ZXI6CisJa2ZyZWUoaW5mby0+c3VwcGx5Lm5hbWUpOworZmFpbF9jb21tOgorZmFpbF9uYW1lOgorZmFpbF9pbmZvOgorCW11dGV4X2xvY2soJmx0YzI5NHhfbG9jayk7CisJaWRyX3JlbW92ZSgmbHRjMjk0eF9pZCwgbnVtKTsKKwltdXRleF91bmxvY2soJmx0YzI5NHhfbG9jayk7CitmYWlsX2lkOgorCXJldHVybiByZXQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKworc3RhdGljIGludCBsdGMyOTR4X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGx0YzI5NHhfaW5mbyAqaW5mbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJY2FuY2VsX2RlbGF5ZWRfd29yaygmaW5mby0+d29yayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbHRjMjk0eF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGx0YzI5NHhfaW5mbyAqaW5mbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpbmZvLT53b3JrLCBMVEMyOTRYX1dPUktfREVMQVkgKiBIWik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBTSU1QTEVfREVWX1BNX09QUyhsdGMyOTR4X3BtX29wcywgbHRjMjk0eF9zdXNwZW5kLCBsdGMyOTR4X3Jlc3VtZSk7CisjZGVmaW5lIExUQzI5NFhfUE1fT1BTICgmbHRjMjk0eF9wbV9vcHMpCisKKyNlbHNlCisjZGVmaW5lIExUQzI5NFhfUE1fT1BTIE5VTEwKKyNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbHRjMjk0eF9pMmNfaWRbXSA9IHsKKwl7Imx0YzI5NDEiLCBMVEMyOTQxX05VTV9SRUdTfSwKKwl7Imx0YzI5NDMiLCBMVEMyOTQzX05VTV9SRUdTfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGx0YzI5NHhfaTJjX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGx0YzI5NHhfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gIkxUQzI5NDEiLAorCQkucG0JPSBMVEMyOTRYX1BNX09QUywKKwl9LAorCS5wcm9iZQkJPSBsdGMyOTR4X2kyY19wcm9iZSwKKwkucmVtb3ZlCQk9IGx0YzI5NHhfaTJjX3JlbW92ZSwKKwkuaWRfdGFibGUJPSBsdGMyOTR4X2kyY19pZCwKK307Cittb2R1bGVfaTJjX2RyaXZlcihsdGMyOTR4X2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIkF1cnluIFZlcndlZ2VuLCBUb3BpYyBFbWJlZGRlZCBTeXN0ZW1zIik7CitNT0RVTEVfQVVUSE9SKCJNaWtlIExvb2lqbWFucywgVG9waWMgRW1iZWRkZWQgUHJvZHVjdHMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTFRDMjk0MS9MVEMyOTQzIEJhdHRlcnkgR2FzIEdhdWdlIElDIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9tYXgxNzA0Ml9iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL21heDE3MDQyX2JhdHRlcnkuYwppbmRleCA2NmRhNjkxLi4xZGE2YzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL21heDE3MDQyX2JhdHRlcnkuYworKysgYi9kcml2ZXJzL3Bvd2VyL21heDE3MDQyX2JhdHRlcnkuYwpAQCAtNjU4LDcgKzY1OCw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCByZWdtYXBfY29uZmlnIG1heDE3MDQyX3JlZ21hcF9jb25maWcgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbWF4MTcwNDJfcmVnbWFwX2NvbmZpZyA9IHsKIAkucmVnX2JpdHMgPSA4LAogCS52YWxfYml0cyA9IDE2LAogCS52YWxfZm9ybWF0X2VuZGlhbiA9IFJFR01BUF9FTkRJQU5fTkFUSVZFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9tYXg3NzY5M19jaGFyZ2VyLmMgYi9kcml2ZXJzL3Bvd2VyL21heDc3NjkzX2NoYXJnZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDQyOTcwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9tYXg3NzY5M19jaGFyZ2VyLmMKQEAgLTAsMCArMSw3NTMgQEAKKy8qCisgKiBtYXg3NzY5M19jaGFyZ2VyLmMgLSBCYXR0ZXJ5IGNoYXJnZXIgZHJpdmVyIGZvciB0aGUgTWF4aW0gNzc2OTMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2Ftc3VuZyBFbGVjdHJvbmljcworICogS3J6eXN6dG9mIEtvemxvd3NraSA8ay5rb3psb3dza2lAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWF4Nzc2OTMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWF4Nzc2OTMtcHJpdmF0ZS5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqbWF4Nzc2OTNfY2hhcmdlcl9uYW1lCQk9ICJtYXg3NzY5My1jaGFyZ2VyIjsKK3N0YXRpYyBjb25zdCBjaGFyICptYXg3NzY5M19jaGFyZ2VyX21vZGVsCQk9ICJNQVg3NzY5MyI7CitzdGF0aWMgY29uc3QgY2hhciAqbWF4Nzc2OTNfY2hhcmdlcl9tYW51ZmFjdHVyZXIJPSAiTWF4aW0gSW50ZWdyYXRlZCI7CisKK3N0cnVjdCBtYXg3NzY5M19jaGFyZ2VyIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCBtYXg3NzY5M19kZXYJKm1heDc3NjkzOworCXN0cnVjdCBwb3dlcl9zdXBwbHkJY2hhcmdlcjsKKworCXUzMiBjb25zdGFudF92b2x0OworCXUzMiBtaW5fc3lzdGVtX3ZvbHQ7CisJdTMyIHRoZXJtYWxfcmVndWxhdGlvbl90ZW1wOworCXUzMiBiYXR0dGVyeV9vdmVyY3VycmVudDsKKwl1MzIgY2hhcmdlX2lucHV0X3RocmVzaG9sZF92b2x0OworfTsKKworc3RhdGljIGludCBtYXg3NzY5M19nZXRfY2hhcmdlcl9zdGF0ZShzdHJ1Y3QgcmVnbWFwICpyZWdtYXApCit7CisJaW50IHN0YXRlOworCXVuc2lnbmVkIGludCBkYXRhOworCisJaWYgKHJlZ21hcF9yZWFkKHJlZ21hcCwgTUFYNzc2OTNfQ0hHX1JFR19DSEdfREVUQUlMU18wMSwgJmRhdGEpIDwgMCkKKwkJcmV0dXJuIFBPV0VSX1NVUFBMWV9TVEFUVVNfVU5LTk9XTjsKKworCWRhdGEgJj0gQ0hHX0RFVEFJTFNfMDFfQ0hHX01BU0s7CisJZGF0YSA+Pj0gQ0hHX0RFVEFJTFNfMDFfQ0hHX1NISUZUOworCisJc3dpdGNoIChkYXRhKSB7CisJY2FzZSBNQVg3NzY5M19DSEFSR0lOR19QUkVRVUFMSUZJQ0FUSU9OOgorCWNhc2UgTUFYNzc2OTNfQ0hBUkdJTkdfRkFTVF9DT05TVF9DVVJSRU5UOgorCWNhc2UgTUFYNzc2OTNfQ0hBUkdJTkdfRkFTVF9DT05TVF9WT0xUQUdFOgorCWNhc2UgTUFYNzc2OTNfQ0hBUkdJTkdfVE9QX09GRjoKKwkvKiBJbiBoaWdoIHRlbXAgdGhlIGNoYXJnaW5nIGN1cnJlbnQgaXMgcmVkdWNlZCwgYnV0IHN0aWxsIGNoYXJnaW5nICovCisJY2FzZSBNQVg3NzY5M19DSEFSR0lOR19ISUdIX1RFTVA6CisJCXN0YXRlID0gUE9XRVJfU1VQUExZX1NUQVRVU19DSEFSR0lORzsKKwkJYnJlYWs7CisJY2FzZSBNQVg3NzY5M19DSEFSR0lOR19ET05FOgorCQlzdGF0ZSA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfRlVMTDsKKwkJYnJlYWs7CisJY2FzZSBNQVg3NzY5M19DSEFSR0lOR19USU1FUl9FWFBJUkVEOgorCWNhc2UgTUFYNzc2OTNfQ0hBUkdJTkdfVEhFUk1JU1RPUl9TVVNQRU5EOgorCQlzdGF0ZSA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfTk9UX0NIQVJHSU5HOworCQlicmVhazsKKwljYXNlIE1BWDc3NjkzX0NIQVJHSU5HX09GRjoKKwljYXNlIE1BWDc3NjkzX0NIQVJHSU5HX09WRVJfVEVNUDoKKwljYXNlIE1BWDc3NjkzX0NIQVJHSU5HX1dBVENIRE9HX0VYUElSRUQ6CisJCXN0YXRlID0gUE9XRVJfU1VQUExZX1NUQVRVU19ESVNDSEFSR0lORzsKKwkJYnJlYWs7CisJY2FzZSBNQVg3NzY5M19DSEFSR0lOR19SRVNFUlZFRDoKKwlkZWZhdWx0OgorCQlzdGF0ZSA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfVU5LTk9XTjsKKwl9CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKK3N0YXRpYyBpbnQgbWF4Nzc2OTNfZ2V0X2NoYXJnZV90eXBlKHN0cnVjdCByZWdtYXAgKnJlZ21hcCkKK3sKKwlpbnQgc3RhdGU7CisJdW5zaWduZWQgaW50IGRhdGE7CisKKwlpZiAocmVnbWFwX3JlYWQocmVnbWFwLCBNQVg3NzY5M19DSEdfUkVHX0NIR19ERVRBSUxTXzAxLCAmZGF0YSkgPCAwKQorCQlyZXR1cm4gUE9XRVJfU1VQUExZX0NIQVJHRV9UWVBFX1VOS05PV047CisKKwlkYXRhICY9IENIR19ERVRBSUxTXzAxX0NIR19NQVNLOworCWRhdGEgPj49IENIR19ERVRBSUxTXzAxX0NIR19TSElGVDsKKworCXN3aXRjaCAoZGF0YSkgeworCWNhc2UgTUFYNzc2OTNfQ0hBUkdJTkdfUFJFUVVBTElGSUNBVElPTjoKKwkvKgorCSAqIFRvcC1vZmY6IHRyaWNrbGUgb3IgZmFzdD8gSW4gdG9wLW9mZiB0aGUgY3VycmVudCB2YXJpZXMgYmV0d2VlbgorCSAqIDEwMCBhbmQgMjUwIG1BLiBJdCBpcyBoaWdoZXIgdGhhbiBwcmVxdWFsaWZpY2F0aW9uIGN1cnJlbnQuCisJICovCisJY2FzZSBNQVg3NzY5M19DSEFSR0lOR19UT1BfT0ZGOgorCQlzdGF0ZSA9IFBPV0VSX1NVUFBMWV9DSEFSR0VfVFlQRV9UUklDS0xFOworCQlicmVhazsKKwljYXNlIE1BWDc3NjkzX0NIQVJHSU5HX0ZBU1RfQ09OU1RfQ1VSUkVOVDoKKwljYXNlIE1BWDc3NjkzX0NIQVJHSU5HX0ZBU1RfQ09OU1RfVk9MVEFHRToKKwkvKiBJbiBoaWdoIHRlbXAgdGhlIGNoYXJnaW5nIGN1cnJlbnQgaXMgcmVkdWNlZCwgYnV0IHN0aWxsIGNoYXJnaW5nICovCisJY2FzZSBNQVg3NzY5M19DSEFSR0lOR19ISUdIX1RFTVA6CisJCXN0YXRlID0gUE9XRVJfU1VQUExZX0NIQVJHRV9UWVBFX0ZBU1Q7CisJCWJyZWFrOworCWNhc2UgTUFYNzc2OTNfQ0hBUkdJTkdfRE9ORToKKwljYXNlIE1BWDc3NjkzX0NIQVJHSU5HX1RJTUVSX0VYUElSRUQ6CisJY2FzZSBNQVg3NzY5M19DSEFSR0lOR19USEVSTUlTVE9SX1NVU1BFTkQ6CisJY2FzZSBNQVg3NzY5M19DSEFSR0lOR19PRkY6CisJY2FzZSBNQVg3NzY5M19DSEFSR0lOR19PVkVSX1RFTVA6CisJY2FzZSBNQVg3NzY5M19DSEFSR0lOR19XQVRDSERPR19FWFBJUkVEOgorCQlzdGF0ZSA9IFBPV0VSX1NVUFBMWV9DSEFSR0VfVFlQRV9OT05FOworCQlicmVhazsKKwljYXNlIE1BWDc3NjkzX0NIQVJHSU5HX1JFU0VSVkVEOgorCWRlZmF1bHQ6CisJCXN0YXRlID0gUE9XRVJfU1VQUExZX0NIQVJHRV9UWVBFX1VOS05PV047CisJfQorCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogU3VwcG9ydGVkIGhlYWx0aCBzdGF0dXNlczoKKyAqICAtIFBPV0VSX1NVUFBMWV9IRUFMVEhfREVBRAorICogIC0gUE9XRVJfU1VQUExZX0hFQUxUSF9HT09ECisgKiAgLSBQT1dFUl9TVVBQTFlfSEVBTFRIX09WRVJWT0xUQUdFCisgKiAgLSBQT1dFUl9TVVBQTFlfSEVBTFRIX1NBRkVUWV9USU1FUl9FWFBJUkUKKyAqICAtIFBPV0VSX1NVUFBMWV9IRUFMVEhfVU5LTk9XTgorICogIC0gUE9XRVJfU1VQUExZX0hFQUxUSF9VTlNQRUNfRkFJTFVSRQorICovCitzdGF0aWMgaW50IG1heDc3NjkzX2dldF9iYXR0ZXJ5X2hlYWx0aChzdHJ1Y3QgcmVnbWFwICpyZWdtYXApCit7CisJaW50IHN0YXRlOworCXVuc2lnbmVkIGludCBkYXRhOworCisJaWYgKHJlZ21hcF9yZWFkKHJlZ21hcCwgTUFYNzc2OTNfQ0hHX1JFR19DSEdfREVUQUlMU18wMSwgJmRhdGEpIDwgMCkKKwkJcmV0dXJuIFBPV0VSX1NVUFBMWV9IRUFMVEhfVU5LTk9XTjsKKworCWRhdGEgJj0gQ0hHX0RFVEFJTFNfMDFfQkFUX01BU0s7CisJZGF0YSA+Pj0gQ0hHX0RFVEFJTFNfMDFfQkFUX1NISUZUOworCisJc3dpdGNoIChkYXRhKSB7CisJY2FzZSBNQVg3NzY5M19CQVRURVJZX05PQkFUOgorCQlzdGF0ZSA9IFBPV0VSX1NVUFBMWV9IRUFMVEhfREVBRDsKKwkJYnJlYWs7CisJY2FzZSBNQVg3NzY5M19CQVRURVJZX1BSRVFVQUxJRklDQVRJT046CisJY2FzZSBNQVg3NzY5M19CQVRURVJZX0dPT0Q6CisJY2FzZSBNQVg3NzY5M19CQVRURVJZX0xPV1ZPTFRBR0U6CisJCXN0YXRlID0gUE9XRVJfU1VQUExZX0hFQUxUSF9HT09EOworCQlicmVhazsKKwljYXNlIE1BWDc3NjkzX0JBVFRFUllfVElNRVJfRVhQSVJFRDoKKwkJLyoKKwkJICogVG9vayBsb25nZXIgdG8gY2hhcmdlIHRoYW4gZXhwZWN0ZWQsIGNoYXJnaW5nIHN1c3BlbmRlZC4KKwkJICogRGFtYWdlZCBiYXR0ZXJ5PworCQkgKi8KKwkJc3RhdGUgPSBQT1dFUl9TVVBQTFlfSEVBTFRIX1NBRkVUWV9USU1FUl9FWFBJUkU7CisJCWJyZWFrOworCWNhc2UgTUFYNzc2OTNfQkFUVEVSWV9PVkVSVk9MVEFHRToKKwkJc3RhdGUgPSBQT1dFUl9TVVBQTFlfSEVBTFRIX09WRVJWT0xUQUdFOworCQlicmVhazsKKwljYXNlIE1BWDc3NjkzX0JBVFRFUllfT1ZFUkNVUlJFTlQ6CisJCXN0YXRlID0gUE9XRVJfU1VQUExZX0hFQUxUSF9VTlNQRUNfRkFJTFVSRTsKKwkJYnJlYWs7CisJY2FzZSBNQVg3NzY5M19CQVRURVJZX1JFU0VSVkVEOgorCWRlZmF1bHQ6CisJCXN0YXRlID0gUE9XRVJfU1VQUExZX0hFQUxUSF9VTktOT1dOOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKK3N0YXRpYyBpbnQgbWF4Nzc2OTNfZ2V0X3ByZXNlbnQoc3RydWN0IHJlZ21hcCAqcmVnbWFwKQoreworCXVuc2lnbmVkIGludCBkYXRhOworCisJLyoKKwkgKiBSZWFkIENIR19JTlRfT0sgcmVnaXN0ZXIuIEhpZ2ggREVUQkFUIGJpdCBoZXJlIHNob3VsZCBiZQorCSAqIGVxdWFsIHRvIHZhbHVlIDB4MCBpbiBDSEdfREVUQUlMU18wMS9CQVQgZmllbGQuCisJICovCisJcmVnbWFwX3JlYWQocmVnbWFwLCBNQVg3NzY5M19DSEdfUkVHX0NIR19JTlRfT0ssICZkYXRhKTsKKwlpZiAoZGF0YSAmIENIR19JTlRfT0tfREVUQkFUX01BU0spCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IG1heDc3NjkzX2dldF9vbmxpbmUoc3RydWN0IHJlZ21hcCAqcmVnbWFwKQoreworCXVuc2lnbmVkIGludCBkYXRhOworCisJcmVnbWFwX3JlYWQocmVnbWFwLCBNQVg3NzY5M19DSEdfUkVHX0NIR19JTlRfT0ssICZkYXRhKTsKKwlpZiAoZGF0YSAmIENIR19JTlRfT0tfQ0hHSU5fTUFTSykKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBtYXg3NzY5M19jaGFyZ2VyX3Byb3BzW10gPSB7CisJUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTLAorCVBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9UWVBFLAorCVBPV0VSX1NVUFBMWV9QUk9QX0hFQUxUSCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5ULAorCVBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9NT0RFTF9OQU1FLAorCVBPV0VSX1NVUFBMWV9QUk9QX01BTlVGQUNUVVJFUiwKK307CisKK3N0YXRpYyBpbnQgbWF4Nzc2OTNfY2hhcmdlcl9nZXRfcHJvcGVydHkoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJICAgIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKKwkJCSAgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCBtYXg3NzY5M19jaGFyZ2VyICpjaGcgPSBjb250YWluZXJfb2YocHN5LAorCQkJCQkJICBzdHJ1Y3QgbWF4Nzc2OTNfY2hhcmdlciwKKwkJCQkJCSAgY2hhcmdlcik7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gY2hnLT5tYXg3NzY5My0+cmVnbWFwOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChwc3ApIHsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUzoKKwkJdmFsLT5pbnR2YWwgPSBtYXg3NzY5M19nZXRfY2hhcmdlcl9zdGF0ZShyZWdtYXApOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9UWVBFOgorCQl2YWwtPmludHZhbCA9IG1heDc3NjkzX2dldF9jaGFyZ2VfdHlwZShyZWdtYXApOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0hFQUxUSDoKKwkJdmFsLT5pbnR2YWwgPSBtYXg3NzY5M19nZXRfYmF0dGVyeV9oZWFsdGgocmVnbWFwKTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5UOgorCQl2YWwtPmludHZhbCA9IG1heDc3NjkzX2dldF9wcmVzZW50KHJlZ21hcCk7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfT05MSU5FOgorCQl2YWwtPmludHZhbCA9IG1heDc3NjkzX2dldF9vbmxpbmUocmVnbWFwKTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9NT0RFTF9OQU1FOgorCQl2YWwtPnN0cnZhbCA9IG1heDc3NjkzX2NoYXJnZXJfbW9kZWw7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfTUFOVUZBQ1RVUkVSOgorCQl2YWwtPnN0cnZhbCA9IG1heDc3NjkzX2NoYXJnZXJfbWFudWZhY3R1cmVyOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBkZXZpY2VfYXR0cl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCwKKwkJaW50ICgqZm4pKHN0cnVjdCBtYXg3NzY5M19jaGFyZ2VyICosIHVuc2lnbmVkIGxvbmcpKQoreworCXN0cnVjdCBtYXg3NzY5M19jaGFyZ2VyICpjaGcgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0ga3N0cnRvdWwoYnVmLCAxMCwgJnZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGZuKGNoZywgdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBmYXN0X2NoYXJnZV90aW1lcl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbWF4Nzc2OTNfY2hhcmdlciAqY2hnID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IGRhdGEsIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnbWFwX3JlYWQoY2hnLT5tYXg3NzY5My0+cmVnbWFwLCBNQVg3NzY5M19DSEdfUkVHX0NIR19DTkZHXzAxLAorCQkJJmRhdGEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGF0YSAmPSBDSEdfQ05GR18wMV9GQ0hHVElNRV9NQVNLOworCWRhdGEgPj49IENIR19DTkZHXzAxX0ZDSEdUSU1FX1NISUZUOworCXN3aXRjaCAoZGF0YSkgeworCWNhc2UgMHgxIC4uLiAweDc6CisJCS8qIFN0YXJ0aW5nIGZyb20gNCBob3Vycywgc3RlcCBieSAyIGhvdXJzICovCisJCXZhbCA9IDQgKyAoZGF0YSAtIDEpICogMjsKKwkJYnJlYWs7CisJY2FzZSAweDA6CisJZGVmYXVsdDoKKwkJdmFsID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCB2YWwpOworfQorCitzdGF0aWMgaW50IG1heDc3NjkzX3NldF9mYXN0X2NoYXJnZV90aW1lcihzdHJ1Y3QgbWF4Nzc2OTNfY2hhcmdlciAqY2hnLAorCQl1bnNpZ25lZCBsb25nIGhvdXJzKQoreworCXVuc2lnbmVkIGludCBkYXRhOworCisJLyoKKwkgKiAweDAwIC0gZGlzYWJsZQorCSAqIDB4MDEgLSA0aAorCSAqIDB4MDIgLSA2aAorCSAqIC4uLgorCSAqIDB4MDcgLSAxNmgKKwkgKiBSb3VuZCBkb3duIG9kZCB2YWx1ZXMuCisJICovCisJc3dpdGNoIChob3VycykgeworCWNhc2UgNCAuLi4gMTY6CisJCWRhdGEgPSAoaG91cnMgLSA0KSAvIDIgKyAxOworCQlicmVhazsKKwljYXNlIDA6CisJCS8qIERpc2FibGUgKi8KKwkJZGF0YSA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkYXRhIDw8PSBDSEdfQ05GR18wMV9GQ0hHVElNRV9TSElGVDsKKworCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMoY2hnLT5tYXg3NzY5My0+cmVnbWFwLAorCQkJTUFYNzc2OTNfQ0hHX1JFR19DSEdfQ05GR18wMSwKKwkJCUNIR19DTkZHXzAxX0ZDSEdUSU1FX01BU0ssIGRhdGEpOworfQorCitzdGF0aWMgc3NpemVfdCBmYXN0X2NoYXJnZV90aW1lcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gZGV2aWNlX2F0dHJfc3RvcmUoZGV2LCBhdHRyLCBidWYsIGNvdW50LAorCQkJbWF4Nzc2OTNfc2V0X2Zhc3RfY2hhcmdlX3RpbWVyKTsKK30KKworc3RhdGljIHNzaXplX3QgdG9wX29mZl90aHJlc2hvbGRfY3VycmVudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbWF4Nzc2OTNfY2hhcmdlciAqY2hnID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IGRhdGEsIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVnbWFwX3JlYWQoY2hnLT5tYXg3NzY5My0+cmVnbWFwLCBNQVg3NzY5M19DSEdfUkVHX0NIR19DTkZHXzAzLAorCQkJJmRhdGEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZGF0YSAmPSBDSEdfQ05GR18wM19UT0lUSF9NQVNLOworCWRhdGEgPj49IENIR19DTkZHXzAzX1RPSVRIX1NISUZUOworCisJaWYgKGRhdGEgPD0gMHgwNCkKKwkJdmFsID0gMTAwMDAwICsgZGF0YSAqIDI1MDAwOworCWVsc2UKKwkJdmFsID0gZGF0YSAqIDUwMDAwOworCisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCB2YWwpOworfQorCitzdGF0aWMgaW50IG1heDc3NjkzX3NldF90b3Bfb2ZmX3RocmVzaG9sZF9jdXJyZW50KHN0cnVjdCBtYXg3NzY5M19jaGFyZ2VyICpjaGcsCisJCXVuc2lnbmVkIGxvbmcgdWFtcCkKK3sKKwl1bnNpZ25lZCBpbnQgZGF0YTsKKworCWlmICh1YW1wIDwgMTAwMDAwIHx8IHVhbXAgPiAzNTAwMDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHVhbXAgPD0gMjAwMDAwKQorCQlkYXRhID0gKHVhbXAgLSAxMDAwMDApIC8gMjUwMDA7CisJZWxzZQorCQkvKiAoMjAwMDAwLCAzNTAwMDA+ICovCisJCWRhdGEgPSB1YW1wIC8gNTAwMDA7CisKKwlkYXRhIDw8PSBDSEdfQ05GR18wM19UT0lUSF9TSElGVDsKKworCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMoY2hnLT5tYXg3NzY5My0+cmVnbWFwLAorCQkJTUFYNzc2OTNfQ0hHX1JFR19DSEdfQ05GR18wMywKKwkJCUNIR19DTkZHXzAzX1RPSVRIX01BU0ssIGRhdGEpOworfQorCitzdGF0aWMgc3NpemVfdCB0b3Bfb2ZmX3RocmVzaG9sZF9jdXJyZW50X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXJldHVybiBkZXZpY2VfYXR0cl9zdG9yZShkZXYsIGF0dHIsIGJ1ZiwgY291bnQsCisJCQltYXg3NzY5M19zZXRfdG9wX29mZl90aHJlc2hvbGRfY3VycmVudCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRvcF9vZmZfdGltZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IG1heDc3NjkzX2NoYXJnZXIgKmNoZyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCBkYXRhLCB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHJlZ21hcF9yZWFkKGNoZy0+bWF4Nzc2OTMtPnJlZ21hcCwgTUFYNzc2OTNfQ0hHX1JFR19DSEdfQ05GR18wMywKKwkJCSZkYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWRhdGEgJj0gQ0hHX0NORkdfMDNfVE9USU1FX01BU0s7CisJZGF0YSA+Pj0gQ0hHX0NORkdfMDNfVE9USU1FX1NISUZUOworCisJdmFsID0gZGF0YSAqIDEwOworCisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCB2YWwpOworfQorCitzdGF0aWMgaW50IG1heDc3NjkzX3NldF90b3Bfb2ZmX3RpbWVyKHN0cnVjdCBtYXg3NzY5M19jaGFyZ2VyICpjaGcsCisJCXVuc2lnbmVkIGxvbmcgbWludXRlcykKK3sKKwl1bnNpZ25lZCBpbnQgZGF0YTsKKworCWlmIChtaW51dGVzID4gNzApCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YSA9IG1pbnV0ZXMgLyAxMDsKKwlkYXRhIDw8PSBDSEdfQ05GR18wM19UT1RJTUVfU0hJRlQ7CisKKwlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKGNoZy0+bWF4Nzc2OTMtPnJlZ21hcCwKKwkJCU1BWDc3NjkzX0NIR19SRUdfQ0hHX0NORkdfMDMsCisJCQlDSEdfQ05GR18wM19UT1RJTUVfTUFTSywgZGF0YSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRvcF9vZmZfdGltZXJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIGRldmljZV9hdHRyX3N0b3JlKGRldiwgYXR0ciwgYnVmLCBjb3VudCwKKwkJCW1heDc3NjkzX3NldF90b3Bfb2ZmX3RpbWVyKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSX1JXKGZhc3RfY2hhcmdlX3RpbWVyKTsKK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyh0b3Bfb2ZmX3RocmVzaG9sZF9jdXJyZW50KTsKK3N0YXRpYyBERVZJQ0VfQVRUUl9SVyh0b3Bfb2ZmX3RpbWVyKTsKKworc3RhdGljIGludCBtYXg3NzY5M19zZXRfY29uc3RhbnRfdm9sdChzdHJ1Y3QgbWF4Nzc2OTNfY2hhcmdlciAqY2hnLAorCQl1bnNpZ25lZCBpbnQgdXZvbHQpCit7CisJdW5zaWduZWQgaW50IGRhdGE7CisKKwkvKgorCSAqIDB4MDAgLSAzLjY1MCBWCisJICogMHgwMSAtIDMuNjc1IFYKKwkgKiAuLi4KKwkgKiAweDFiIC0gNC4zMjUgVgorCSAqIDB4MWMgLSA0LjM0MCBWCisJICogMHgxZCAtIDQuMzUwIFYKKwkgKiAweDFlIC0gNC4zNzUgVgorCSAqIDB4MWYgLSA0LjQwMCBWCisJICovCisJaWYgKHV2b2x0ID49IDM2NTAwMDAgJiYgdXZvbHQgPCA0MzQwMDAwKQorCQlkYXRhID0gKHV2b2x0IC0gMzY1MDAwMCkgLyAyNTAwMDsKKwllbHNlIGlmICh1dm9sdCA+PSA0MzQwMDAwICYmIHV2b2x0IDwgNDM1MDAwMCkKKwkJZGF0YSA9IDB4MWM7CisJZWxzZSBpZiAodXZvbHQgPj0gNDM1MDAwMCAmJiB1dm9sdCA8PSA0NDAwMDAwKQorCQlkYXRhID0gMHgxZCArICh1dm9sdCAtIDQzNTAwMDApIC8gMjUwMDA7CisJZWxzZSB7CisJCWRldl9lcnIoY2hnLT5kZXYsICJXcm9uZyB2YWx1ZSBmb3IgY2hhcmdpbmcgY29uc3RhbnQgdm9sdGFnZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRhdGEgPDw9IENIR19DTkZHXzA0X0NIR0NWUFJNX1NISUZUOworCisJZGV2X2RiZyhjaGctPmRldiwgIkNoYXJnaW5nIGNvbnN0YW50IHZvbHRhZ2U6ICV1ICgweCV4KVxuIiwgdXZvbHQsCisJCQlkYXRhKTsKKworCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMoY2hnLT5tYXg3NzY5My0+cmVnbWFwLAorCQkJTUFYNzc2OTNfQ0hHX1JFR19DSEdfQ05GR18wNCwKKwkJCUNIR19DTkZHXzA0X0NIR0NWUFJNX01BU0ssIGRhdGEpOworfQorCitzdGF0aWMgaW50IG1heDc3NjkzX3NldF9taW5fc3lzdGVtX3ZvbHQoc3RydWN0IG1heDc3NjkzX2NoYXJnZXIgKmNoZywKKwkJdW5zaWduZWQgaW50IHV2b2x0KQoreworCXVuc2lnbmVkIGludCBkYXRhOworCisJaWYgKHV2b2x0IDwgMzAwMDAwMCB8fCB1dm9sdCA+IDM3MDAwMDApIHsKKwkJZGV2X2VycihjaGctPmRldiwgIldyb25nIHZhbHVlIGZvciBtaW5pbXVtIHN5c3RlbSByZWd1bGF0aW9uIHZvbHRhZ2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkYXRhID0gKHV2b2x0IC0gMzAwMDAwMCkgLyAxMDAwMDA7CisKKwlkYXRhIDw8PSBDSEdfQ05GR18wNF9NSU5WU1lTX1NISUZUOworCisJZGV2X2RiZyhjaGctPmRldiwgIk1pbmltdW0gc3lzdGVtIHJlZ3VsYXRpb24gdm9sdGFnZTogJXUgKDB4JXgpXG4iLAorCQkJdXZvbHQsIGRhdGEpOworCisJcmV0dXJuIHJlZ21hcF91cGRhdGVfYml0cyhjaGctPm1heDc3NjkzLT5yZWdtYXAsCisJCQlNQVg3NzY5M19DSEdfUkVHX0NIR19DTkZHXzA0LAorCQkJQ0hHX0NORkdfMDRfTUlOVlNZU19NQVNLLCBkYXRhKTsKK30KKworc3RhdGljIGludCBtYXg3NzY5M19zZXRfdGhlcm1hbF9yZWd1bGF0aW9uX3RlbXAoc3RydWN0IG1heDc3NjkzX2NoYXJnZXIgKmNoZywKKwkJdW5zaWduZWQgaW50IGNlbHMpCit7CisJdW5zaWduZWQgaW50IGRhdGE7CisKKwlzd2l0Y2ggKGNlbHMpIHsKKwljYXNlIDcwOgorCWNhc2UgODU6CisJY2FzZSAxMDA6CisJY2FzZSAxMTU6CisJCWRhdGEgPSAoY2VscyAtIDcwKSAvIDE1OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGNoZy0+ZGV2LCAiV3JvbmcgdmFsdWUgZm9yIHRoZXJtYWwgcmVndWxhdGlvbiBsb29wIHRlbXBlcmF0dXJlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGF0YSA8PD0gQ0hHX0NORkdfMDdfUkVHVEVNUF9TSElGVDsKKworCWRldl9kYmcoY2hnLT5kZXYsICJUaGVybWFsIHJlZ3VsYXRpb24gbG9vcCB0ZW1wZXJhdHVyZTogJXUgKDB4JXgpXG4iLAorCQkJY2VscywgZGF0YSk7CisKKwlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKGNoZy0+bWF4Nzc2OTMtPnJlZ21hcCwKKwkJCU1BWDc3NjkzX0NIR19SRUdfQ0hHX0NORkdfMDcsCisJCQlDSEdfQ05GR18wN19SRUdURU1QX01BU0ssIGRhdGEpOworfQorCitzdGF0aWMgaW50IG1heDc3NjkzX3NldF9iYXR0dGVyeV9vdmVyY3VycmVudChzdHJ1Y3QgbWF4Nzc2OTNfY2hhcmdlciAqY2hnLAorCQl1bnNpZ25lZCBpbnQgdWFtcCkKK3sKKwl1bnNpZ25lZCBpbnQgZGF0YTsKKworCWlmICh1YW1wICYmICh1YW1wIDwgMjAwMDAwMCB8fCB1YW1wID4gMzUwMDAwMCkpIHsKKwkJZGV2X2VycihjaGctPmRldiwgIldyb25nIHZhbHVlIGZvciBiYXR0ZXJ5IG92ZXJjdXJyZW50XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVhbXApCisJCWRhdGEgPSAoKHVhbXAgLSAyMDAwMDAwKSAvIDI1MDAwMCkgKyAxOworCWVsc2UKKwkJZGF0YSA9IDA7IC8qIGRpc2FibGUgKi8KKworCWRhdGEgPDw9IENIR19DTkZHXzEyX0IyU09WUkNfU0hJRlQ7CisKKwlkZXZfZGJnKGNoZy0+ZGV2LCAiQmF0dGVyeSBvdmVyY3VycmVudDogJXUgKDB4JXgpXG4iLCB1YW1wLCBkYXRhKTsKKworCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMoY2hnLT5tYXg3NzY5My0+cmVnbWFwLAorCQkJTUFYNzc2OTNfQ0hHX1JFR19DSEdfQ05GR18xMiwKKwkJCUNIR19DTkZHXzEyX0IyU09WUkNfTUFTSywgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgbWF4Nzc2OTNfc2V0X2NoYXJnZV9pbnB1dF90aHJlc2hvbGRfdm9sdChzdHJ1Y3QgbWF4Nzc2OTNfY2hhcmdlciAqY2hnLAorCQl1bnNpZ25lZCBpbnQgdXZvbHQpCit7CisJdW5zaWduZWQgaW50IGRhdGE7CisKKwlzd2l0Y2ggKHV2b2x0KSB7CisJY2FzZSA0MzAwMDAwOgorCQlkYXRhID0gMHgwOworCQlicmVhazsKKwljYXNlIDQ3MDAwMDA6CisJY2FzZSA0ODAwMDAwOgorCWNhc2UgNDkwMDAwMDoKKwkJZGF0YSA9ICh1dm9sdCAtIDQ3MDAwMDApIC8gMTAwMDAwOworCWRlZmF1bHQ6CisJCWRldl9lcnIoY2hnLT5kZXYsICJXcm9uZyB2YWx1ZSBmb3IgY2hhcmdlIGlucHV0IHZvbHRhZ2UgcmVndWxhdGlvbiB0aHJlc2hvbGRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkYXRhIDw8PSBDSEdfQ05GR18xMl9WQ0hHSU5SRUdfU0hJRlQ7CisKKwlkZXZfZGJnKGNoZy0+ZGV2LCAiQ2hhcmdlIGlucHV0IHZvbHRhZ2UgcmVndWxhdGlvbiB0aHJlc2hvbGQ6ICV1ICgweCV4KVxuIiwKKwkJCXV2b2x0LCBkYXRhKTsKKworCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMoY2hnLT5tYXg3NzY5My0+cmVnbWFwLAorCQkJTUFYNzc2OTNfQ0hHX1JFR19DSEdfQ05GR18xMiwKKwkJCUNIR19DTkZHXzEyX1ZDSEdJTlJFR19NQVNLLCBkYXRhKTsKK30KKworLyoKKyAqIFNldHMgY2hhcmdlciByZWdpc3RlcnMgdG8gcHJvcGVyIGFuZCBzYWZlIGRlZmF1bHQgdmFsdWVzLgorICovCitzdGF0aWMgaW50IG1heDc3NjkzX3JlZ19pbml0KHN0cnVjdCBtYXg3NzY5M19jaGFyZ2VyICpjaGcpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgZGF0YTsKKworCS8qIFVubG9jayBjaGFyZ2VyIHJlZ2lzdGVyIHByb3RlY3Rpb24gKi8KKwlkYXRhID0gKDB4MyA8PCBDSEdfQ05GR18wNl9DSEdQUk9UX1NISUZUKTsKKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoY2hnLT5tYXg3NzY5My0+cmVnbWFwLAorCQkJCU1BWDc3NjkzX0NIR19SRUdfQ0hHX0NORkdfMDYsCisJCQkJQ0hHX0NORkdfMDZfQ0hHUFJPVF9NQVNLLCBkYXRhKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoY2hnLT5kZXYsICJFcnJvciB1bmxvY2tpbmcgcmVnaXN0ZXJzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBtYXg3NzY5M19zZXRfZmFzdF9jaGFyZ2VfdGltZXIoY2hnLCBERUZBVUxUX0ZBU1RfQ0hBUkdFX1RJTUVSKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbWF4Nzc2OTNfc2V0X3RvcF9vZmZfdGhyZXNob2xkX2N1cnJlbnQoY2hnLAorCQkJREVGQVVMVF9UT1BfT0ZGX1RIUkVTSE9MRF9DVVJSRU5UKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbWF4Nzc2OTNfc2V0X3RvcF9vZmZfdGltZXIoY2hnLCBERUZBVUxUX1RPUF9PRkZfVElNRVIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBtYXg3NzY5M19zZXRfY29uc3RhbnRfdm9sdChjaGcsIGNoZy0+Y29uc3RhbnRfdm9sdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG1heDc3NjkzX3NldF9taW5fc3lzdGVtX3ZvbHQoY2hnLCBjaGctPm1pbl9zeXN0ZW1fdm9sdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG1heDc3NjkzX3NldF90aGVybWFsX3JlZ3VsYXRpb25fdGVtcChjaGcsCisJCQljaGctPnRoZXJtYWxfcmVndWxhdGlvbl90ZW1wKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbWF4Nzc2OTNfc2V0X2JhdHR0ZXJ5X292ZXJjdXJyZW50KGNoZywgY2hnLT5iYXR0dGVyeV9vdmVyY3VycmVudCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBtYXg3NzY5M19zZXRfY2hhcmdlX2lucHV0X3RocmVzaG9sZF92b2x0KGNoZywKKwkJCWNoZy0+Y2hhcmdlX2lucHV0X3RocmVzaG9sZF92b2x0KTsKK30KKworI2lmZGVmIENPTkZJR19PRgorc3RhdGljIGludCBtYXg3NzY5M19kdF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG1heDc3NjkzX2NoYXJnZXIgKmNoZykKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCisJaWYgKCFucCkgeworCQlkZXZfZXJyKGRldiwgIm5vIGNoYXJnZXIgT0Ygbm9kZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgIm1heGltLGNvbnN0YW50LW1pY3Jvdm9sdCIsCisJCQkmY2hnLT5jb25zdGFudF92b2x0KSkKKwkJY2hnLT5jb25zdGFudF92b2x0ID0gREVGQVVMVF9DT05TVEFOVF9WT0xUOworCisJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAibWF4aW0sbWluLXN5c3RlbS1taWNyb3ZvbHQiLAorCQkJJmNoZy0+bWluX3N5c3RlbV92b2x0KSkKKwkJY2hnLT5taW5fc3lzdGVtX3ZvbHQgPSBERUZBVUxUX01JTl9TWVNURU1fVk9MVDsKKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgIm1heGltLHRoZXJtYWwtcmVndWxhdGlvbi1jZWxzaXVzIiwKKwkJCSZjaGctPnRoZXJtYWxfcmVndWxhdGlvbl90ZW1wKSkKKwkJY2hnLT50aGVybWFsX3JlZ3VsYXRpb25fdGVtcCA9IERFRkFVTFRfVEhFUk1BTF9SRUdVTEFUSU9OX1RFTVA7CisKKwlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJtYXhpbSxiYXR0ZXJ5LW92ZXJjdXJyZW50LW1pY3JvYW1wIiwKKwkJCSZjaGctPmJhdHR0ZXJ5X292ZXJjdXJyZW50KSkKKwkJY2hnLT5iYXR0dGVyeV9vdmVyY3VycmVudCA9IERFRkFVTFRfQkFUVEVSWV9PVkVSQ1VSUkVOVDsKKworCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgIm1heGltLGNoYXJnZS1pbnB1dC10aHJlc2hvbGQtbWljcm92b2x0IiwKKwkJCSZjaGctPmNoYXJnZV9pbnB1dF90aHJlc2hvbGRfdm9sdCkpCisJCWNoZy0+Y2hhcmdlX2lucHV0X3RocmVzaG9sZF92b2x0ID0KKwkJCURFRkFVTFRfQ0hBUkdFUl9JTlBVVF9USFJFU0hPTERfVk9MVDsKKworCXJldHVybiAwOworfQorI2Vsc2UgLyogQ09ORklHX09GICovCitzdGF0aWMgaW50IG1heDc3NjkzX2R0X2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgbWF4Nzc2OTNfY2hhcmdlciAqY2hnKQoreworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19PRiAqLworCitzdGF0aWMgaW50IG1heDc3NjkzX2NoYXJnZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbWF4Nzc2OTNfY2hhcmdlciAqY2hnOworCXN0cnVjdCBtYXg3NzY5M19kZXYgKm1heDc3NjkzID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCWludCByZXQ7CisKKwljaGcgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpjaGcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNoZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjaGcpOworCWNoZy0+ZGV2ID0gJnBkZXYtPmRldjsKKwljaGctPm1heDc3NjkzID0gbWF4Nzc2OTM7CisKKwlyZXQgPSBtYXg3NzY5M19kdF9pbml0KCZwZGV2LT5kZXYsIGNoZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IG1heDc3NjkzX3JlZ19pbml0KGNoZyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWNoZy0+Y2hhcmdlci5uYW1lID0gbWF4Nzc2OTNfY2hhcmdlcl9uYW1lOworCWNoZy0+Y2hhcmdlci50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfQkFUVEVSWTsKKwljaGctPmNoYXJnZXIucHJvcGVydGllcyA9IG1heDc3NjkzX2NoYXJnZXJfcHJvcHM7CisJY2hnLT5jaGFyZ2VyLm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRShtYXg3NzY5M19jaGFyZ2VyX3Byb3BzKTsKKwljaGctPmNoYXJnZXIuZ2V0X3Byb3BlcnR5ID0gbWF4Nzc2OTNfY2hhcmdlcl9nZXRfcHJvcGVydHk7CisKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2Zhc3RfY2hhcmdlX3RpbWVyKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZDogY3JlYXRlIGZhc3QgY2hhcmdlIHRpbWVyIHN5c2ZzIGVudHJ5XG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsCisJCQkmZGV2X2F0dHJfdG9wX29mZl90aHJlc2hvbGRfY3VycmVudCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQ6IGNyZWF0ZSB0b3Agb2ZmIGN1cnJlbnQgc3lzZnMgZW50cnlcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX3RvcF9vZmZfdGltZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkOiBjcmVhdGUgdG9wIG9mZiB0aW1lciBzeXNmcyBlbnRyeVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmcGRldi0+ZGV2LCAmY2hnLT5jaGFyZ2VyKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZDogcG93ZXIgc3VwcGx5IHJlZ2lzdGVyXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX3RvcF9vZmZfdGltZXIpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfdG9wX29mZl90aHJlc2hvbGRfY3VycmVudCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9mYXN0X2NoYXJnZV90aW1lcik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1heDc3NjkzX2NoYXJnZXJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1heDc3NjkzX2NoYXJnZXIgKmNoZyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl90b3Bfb2ZmX3RpbWVyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX3RvcF9vZmZfdGhyZXNob2xkX2N1cnJlbnQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZmFzdF9jaGFyZ2VfdGltZXIpOworCisJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJmNoZy0+Y2hhcmdlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgbWF4Nzc2OTNfY2hhcmdlcl9pZFtdID0geworCXsgIm1heDc3NjkzLWNoYXJnZXIiLCAwLCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGxhdGZvcm0sIG1heDc3NjkzX2NoYXJnZXJfaWQpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYXg3NzY5M19jaGFyZ2VyX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJtYXg3NzY5My1jaGFyZ2VyIiwKKwl9LAorCS5wcm9iZQkJPSBtYXg3NzY5M19jaGFyZ2VyX3Byb2JlLAorCS5yZW1vdmUJCT0gbWF4Nzc2OTNfY2hhcmdlcl9yZW1vdmUsCisJLmlkX3RhYmxlCT0gbWF4Nzc2OTNfY2hhcmdlcl9pZCwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG1heDc3NjkzX2NoYXJnZXJfZHJpdmVyKTsKKworTU9EVUxFX0FVVEhPUigiS3J6eXN6dG9mIEtvemxvd3NraSA8ay5rb3psb3dza2lAc2Ftc3VuZy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk1heGltIDc3NjkzIGNoYXJnZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L0tjb25maWcgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L0tjb25maWcKaW5kZXggMDI4ZTc2NS4uMjdmNjY0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9yZXNldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvS2NvbmZpZwpAQCAtMzksMTQgKzM5LDEzIEBACiAJICBTYXkgWSBpZiB5b3UgaGF2ZSBhbiBBeHhpYSBmYW1pbHkgU29DLgogCiBjb25maWcgUE9XRVJfUkVTRVRfQlJDTVNUQgotCWJvb2wgIkJyb2FkY29tIFNUQiByZXNldCBkcml2ZXIiIGlmIENPTVBJTEVfVEVTVAotCWRlcGVuZHMgb24gQVJNCisJYm9vbCAiQnJvYWRjb20gU1RCIHJlc2V0IGRyaXZlciIKKwlkZXBlbmRzIG9uIEFSTSB8fCBNSVBTIHx8IENPTVBJTEVfVEVTVAogCWRlZmF1bHQgQVJDSF9CUkNNU1RCCiAJaGVscAotCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgcmVzdGFydCBzdXBwb3J0IGZvciBBUk0tYmFzZWQgQnJvYWRjb20gU1RCCi0JICBib2FyZHMuCisJICBUaGlzIGRyaXZlciBwcm92aWRlcyByZXN0YXJ0IHN1cHBvcnQgZm9yIEJyb2FkY29tIFNUQiBib2FyZHMuCiAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gQVJNLWJhc2VkIEJyb2FkY29tIFNUQiBib2FyZCBhbmQgeW91IHdpc2gKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBCcm9hZGNvbSBTVEIgYm9hcmQgYW5kIHlvdSB3aXNoCiAJICB0byBoYXZlIHJlc3RhcnQgc3VwcG9ydC4KIAogY29uZmlnIFBPV0VSX1JFU0VUX0dQSU8KQEAgLTEwNCwyMyArMTAzLDE2IEBACiAKIGNvbmZpZyBQT1dFUl9SRVNFVF9SRVNUQVJUCiAJYm9vbCAiUmVzdGFydCBwb3dlci1vZmYgZHJpdmVyIgotCWRlcGVuZHMgb24gQVJNCiAJaGVscAogCSAgU29tZSBib2FyZHMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSB0aGUgYWJpbGl0eSB0byBwb3dlciBvZmYuCiAJICBJbnN0ZWFkIHRoZXkgcmVzdGFydCwgYW5kIHUtYm9vdCBob2xkcyB0aGUgU29DIHVudGlsIHRoZQogCSAgdXNlciBwcmVzc2VzIGEga2V5LiB1LWJvb3QgdGhlbiBib290cyBpbnRvIExpbnV4LgogCi1jb25maWcgUE9XRVJfUkVTRVRfU1VONkkKLQlib29sICJBbGx3aW5uZXIgQTMxIFNvQyByZXNldCBkcml2ZXIiCi0JZGVwZW5kcyBvbiBBUkNIX1NVTlhJCi0JaGVscAotCSAgUmVib290IHN1cHBvcnQgZm9yIHRoZSBBbGx3aW5uZXIgQTMxIFNvQ3MuCi0KIGNvbmZpZyBQT1dFUl9SRVNFVF9TVAotCWJvb2wgIlNUIHJlc3RhcnQgcG93ZXItb2ZmIGRyaXZlciIKKwlib29sICJTVCByZXN0YXJ0IGRyaXZlciIKIAlkZXBlbmRzIG9uIEFSQ0hfU1RJCiAJaGVscAotCSAgUG93ZXIgb2ZmIGFuZCByZXNldCBzdXBwb3J0IGZvciBTVE1pY3JvZWxlY3Ryb25pY3MgYm9hcmRzLgorCSAgUmVzZXQgc3VwcG9ydCBmb3IgU1RNaWNyb2VsZWN0cm9uaWNzIGJvYXJkcy4KIAogY29uZmlnIFBPV0VSX1JFU0VUX1ZFUlNBVElMRQogCWJvb2wgIkFSTSBWZXJzYXRpbGUgZmFtaWx5IHJlYm9vdCBkcml2ZXIiCkBAIC0xNTksNSArMTUxLDExIEBACiAJaGVscAogCSAgUmVib290IHN1cHBvcnQgZm9yIGdlbmVyaWMgU1lTQ09OIG1hcHBlZCByZWdpc3RlciByZXNldC4KIAorY29uZmlnIFBPV0VSX1JFU0VUX1JNT0JJTEUKKwl0cmlzdGF0ZSAiUmVuZXNhcyBSLU1vYmlsZSByZXNldCBkcml2ZXIiCisJZGVwZW5kcyBvbiBBUkNIX1JNT0JJTEUgfHwgQ09NUElMRV9URVNUCisJaGVscAorCSAgUmVib290IHN1cHBvcnQgZm9yIFJlbmVzYXMgUi1Nb2JpbGUgYW5kIFNILU1vYmlsZSBTb0NzLgorCiBlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L01ha2VmaWxlIGIvZHJpdmVycy9wb3dlci9yZXNldC9NYWtlZmlsZQppbmRleCAxZDQ4MDRkLi4xMWRlMTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvTWFrZWZpbGUKQEAgLTExLDEwICsxMSwxMCBAQAogb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX0xUQzI5NTIpICs9IGx0YzI5NTItcG93ZXJvZmYubwogb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX1FOQVApICs9IHFuYXAtcG93ZXJvZmYubwogb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX1JFU1RBUlQpICs9IHJlc3RhcnQtcG93ZXJvZmYubwotb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX1NVTjZJKSArPSBzdW42aS1yZWJvb3Qubwogb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX1NUKSArPSBzdC1wb3dlcm9mZi5vCiBvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfVkVSU0FUSUxFKSArPSBhcm0tdmVyc2F0aWxlLXJlYm9vdC5vCiBvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfVkVYUFJFU1MpICs9IHZleHByZXNzLXBvd2Vyb2ZmLm8KIG9iai0kKENPTkZJR19QT1dFUl9SRVNFVF9YR0VORSkgKz0geGdlbmUtcmVib290Lm8KIG9iai0kKENPTkZJR19QT1dFUl9SRVNFVF9LRVlTVE9ORSkgKz0ga2V5c3RvbmUtcmVzZXQubwogb2JqLSQoQ09ORklHX1BPV0VSX1JFU0VUX1NZU0NPTikgKz0gc3lzY29uLXJlYm9vdC5vCitvYmotJChDT05GSUdfUE9XRVJfUkVTRVRfUk1PQklMRSkgKz0gcm1vYmlsZS1yZXNldC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2FybS12ZXJzYXRpbGUtcmVib290LmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2FybS12ZXJzYXRpbGUtcmVib290LmMKaW5kZXggNWIwOGJmZi4uYjIwODA3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9yZXNldC9hcm0tdmVyc2F0aWxlLXJlYm9vdC5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXJtLXZlcnNhdGlsZS1yZWJvb3QuYwpAQCAtMTMsMTYgKzEzLDIyIEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KKworI2RlZmluZSBJTlRFR1JBVE9SX0hEUl9DVFJMX09GRlNFVAkweDBDCisjZGVmaW5lIElOVEVHUkFUT1JfSERSX0xPQ0tfT0ZGU0VUCTB4MTQKKyNkZWZpbmUgSU5URUdSQVRPUl9DTV9DVFJMX1JFU0VUCSgxIDw8IDMpCiAKICNkZWZpbmUgUkVBTFZJRVdfU1lTX0xPQ0tfT0ZGU0VUCTB4MjAKLSNkZWZpbmUgUkVBTFZJRVdfU1lTX0xPQ0tfVkFMCQkweEEwNUYKICNkZWZpbmUgUkVBTFZJRVdfU1lTX1JFU0VUQ1RMX09GRlNFVAkweDQwCiAKKy8qIE1hZ2ljIHVubG9ja2luZyB0b2tlbiB1c2VkIG9uIGFsbCBWZXJzYXRpbGUgYm9hcmRzICovCisjZGVmaW5lIFZFUlNBVElMRV9MT0NLX1ZBTAkJMHhBMDVGCisKIC8qCiAgKiBXZSBkZXRlY3QgdGhlIGRpZmZlcmVudCBzeXNjb24gdHlwZXMgZnJvbSB0aGUgY29tcGF0aWJsZSBzdHJpbmdzLgogICovCiBlbnVtIHZlcnNhdGlsZV9yZWJvb3QgeworCUlOVEVHUkFUT1JfUkVCT09UX0NNLAogCVJFQUxWSUVXX1JFQk9PVF9FQiwKIAlSRUFMVklFV19SRUJPT1RfUEIxMTc2LAogCVJFQUxWSUVXX1JFQk9PVF9QQjExTVAsCkBAIC0zNiw2ICs0MiwxMCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB2ZXJzYXRpbGVfcmVib290X29mX21hdGNoW10gPSB7CiAJeworCQkuY29tcGF0aWJsZSA9ICJhcm0sY29yZS1tb2R1bGUtaW50ZWdyYXRvciIsCisJCS5kYXRhID0gKHZvaWQgKilJTlRFR1JBVE9SX1JFQk9PVF9DTQorCX0sCisJewogCQkuY29tcGF0aWJsZSA9ICJhcm0scmVhbHZpZXctZWItc3lzY29uIiwKIAkJLmRhdGEgPSAodm9pZCAqKVJFQUxWSUVXX1JFQk9PVF9FQiwKIAl9LApAQCAtNTUsMzEgKzY1LDQ3IEBACiAJCS5jb21wYXRpYmxlID0gImFybSxyZWFsdmlldy1wYngtc3lzY29uIiwKIAkJLmRhdGEgPSAodm9pZCAqKVJFQUxWSUVXX1JFQk9PVF9QQlgsCiAJfSwKKwl7fSwKIH07CiAKLXN0YXRpYyB2b2lkIHZlcnNhdGlsZV9yZWJvb3QoZW51bSByZWJvb3RfbW9kZSBtb2RlLCBjb25zdCBjaGFyICpjbWQpCitzdGF0aWMgaW50IHZlcnNhdGlsZV9yZWJvb3Qoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIG1vZGUsCisJCQkgICAgdm9pZCAqY21kKQogewogCS8qIFVubG9jayB0aGUgcmVzZXQgcmVnaXN0ZXIgKi8KLQlyZWdtYXBfd3JpdGUoc3lzY29uX3JlZ21hcCwgUkVBTFZJRVdfU1lTX0xPQ0tfT0ZGU0VULAotCQkgICAgIFJFQUxWSUVXX1NZU19MT0NLX1ZBTCk7CiAJLyogVGhlbiBoaXQgcmVzZXQgb24gdGhlIGRpZmZlcmVudCBtYWNoaW5lcyAqLwogCXN3aXRjaCAodmVyc2F0aWxlX3JlYm9vdF90eXBlKSB7CisJY2FzZSBJTlRFR1JBVE9SX1JFQk9PVF9DTToKKwkJcmVnbWFwX3dyaXRlKHN5c2Nvbl9yZWdtYXAsIElOVEVHUkFUT1JfSERSX0xPQ0tfT0ZGU0VULAorCQkJICAgICBWRVJTQVRJTEVfTE9DS19WQUwpOworCQlyZWdtYXBfdXBkYXRlX2JpdHMoc3lzY29uX3JlZ21hcCwKKwkJCQkgICBJTlRFR1JBVE9SX0hEUl9DVFJMX09GRlNFVCwKKwkJCQkgICBJTlRFR1JBVE9SX0NNX0NUUkxfUkVTRVQsCisJCQkJICAgSU5URUdSQVRPUl9DTV9DVFJMX1JFU0VUKTsKKwkJYnJlYWs7CiAJY2FzZSBSRUFMVklFV19SRUJPT1RfRUI6CisJCXJlZ21hcF93cml0ZShzeXNjb25fcmVnbWFwLCBSRUFMVklFV19TWVNfTE9DS19PRkZTRVQsCisJCQkgICAgIFZFUlNBVElMRV9MT0NLX1ZBTCk7CiAJCXJlZ21hcF93cml0ZShzeXNjb25fcmVnbWFwLAogCQkJICAgICBSRUFMVklFV19TWVNfUkVTRVRDVExfT0ZGU0VULCAweDAwMDgpOwogCQlicmVhazsKIAljYXNlIFJFQUxWSUVXX1JFQk9PVF9QQjExNzY6CisJCXJlZ21hcF93cml0ZShzeXNjb25fcmVnbWFwLCBSRUFMVklFV19TWVNfTE9DS19PRkZTRVQsCisJCQkgICAgIFZFUlNBVElMRV9MT0NLX1ZBTCk7CiAJCXJlZ21hcF93cml0ZShzeXNjb25fcmVnbWFwLAogCQkJICAgICBSRUFMVklFV19TWVNfUkVTRVRDVExfT0ZGU0VULCAweDAxMDApOwogCQlicmVhazsKIAljYXNlIFJFQUxWSUVXX1JFQk9PVF9QQjExTVA6CiAJY2FzZSBSRUFMVklFV19SRUJPT1RfUEJBODoKKwkJcmVnbWFwX3dyaXRlKHN5c2Nvbl9yZWdtYXAsIFJFQUxWSUVXX1NZU19MT0NLX09GRlNFVCwKKwkJCSAgICAgVkVSU0FUSUxFX0xPQ0tfVkFMKTsKIAkJcmVnbWFwX3dyaXRlKHN5c2Nvbl9yZWdtYXAsIFJFQUxWSUVXX1NZU19SRVNFVENUTF9PRkZTRVQsCiAJCQkgICAgIDB4MDAwMCk7CiAJCXJlZ21hcF93cml0ZShzeXNjb25fcmVnbWFwLCBSRUFMVklFV19TWVNfUkVTRVRDVExfT0ZGU0VULAogCQkJICAgICAweDAwMDQpOwogCQlicmVhazsKIAljYXNlIFJFQUxWSUVXX1JFQk9PVF9QQlg6CisJCXJlZ21hcF93cml0ZShzeXNjb25fcmVnbWFwLCBSRUFMVklFV19TWVNfTE9DS19PRkZTRVQsCisJCQkgICAgIFZFUlNBVElMRV9MT0NLX1ZBTCk7CiAJCXJlZ21hcF93cml0ZShzeXNjb25fcmVnbWFwLCBSRUFMVklFV19TWVNfUkVTRVRDVExfT0ZGU0VULAogCQkJICAgICAweDAwZjApOwogCQlyZWdtYXBfd3JpdGUoc3lzY29uX3JlZ21hcCwgUkVBTFZJRVdfU1lTX1JFU0VUQ1RMX09GRlNFVCwKQEAgLTg3LDEyICsxMTMsMjAgQEAKIAkJYnJlYWs7CiAJfQogCWRzYigpOworCisJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHZlcnNhdGlsZV9yZWJvb3RfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSB2ZXJzYXRpbGVfcmVib290LAorCS5wcmlvcml0eSA9IDE5MiwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHZlcnNhdGlsZV9yZWJvb3RfcHJvYmUodm9pZCkKIHsKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICpyZWJvb3RfaWQ7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlpbnQgZXJyOwogCiAJbnAgPSBvZl9maW5kX21hdGNoaW5nX25vZGVfYW5kX21hdGNoKE5VTEwsIHZlcnNhdGlsZV9yZWJvb3Rfb2ZfbWF0Y2gsCiAJCQkJCQkgJnJlYm9vdF9pZCk7CkBAIC0xMDQsNyArMTM4LDEwIEBACiAJaWYgKElTX0VSUihzeXNjb25fcmVnbWFwKSkKIAkJcmV0dXJuIFBUUl9FUlIoc3lzY29uX3JlZ21hcCk7CiAKLQlhcm1fcG1fcmVzdGFydCA9IHZlcnNhdGlsZV9yZWJvb3Q7CisJZXJyID0gcmVnaXN0ZXJfcmVzdGFydF9oYW5kbGVyKCZ2ZXJzYXRpbGVfcmVib290X25iKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJcHJfaW5mbygidmVyc2F0aWxlIHJlYm9vdCBkcml2ZXIgcmVnaXN0ZXJlZFxuIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2F0OTEtcG93ZXJvZmYuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXQ5MS1wb3dlcm9mZi5jCmluZGV4IGM2MTAwMDMuLjRiNzJlYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXQ5MS1wb3dlcm9mZi5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvYXQ5MS1wb3dlcm9mZi5jCkBAIC03MSwxMCArNzEsMTEgQEAKIAl3cml0ZWwoQVQ5MV9TSERXX0tFWSB8IEFUOTFfU0hEV19TSERXLCBhdDkxX3NoZHdjX2Jhc2UgKyBBVDkxX1NIRFdfQ1IpOwogfQogCi1jb25zdCBlbnVtIHdha2V1cF90eXBlIGF0OTFfcG93ZXJvZmZfZ2V0X3dha2V1cF9tb2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCitzdGF0aWMgaW50IGF0OTFfcG93ZXJvZmZfZ2V0X3dha2V1cF9tb2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CiAJY29uc3QgY2hhciAqcG07Ci0JaW50IGVyciwgaTsKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgZXJyOwogCiAJZXJyID0gb2ZfcHJvcGVydHlfcmVhZF9zdHJpbmcobnAsICJhdG1lbCx3YWtldXAtbW9kZSIsICZwbSk7CiAJaWYgKGVyciA8IDApCkBAIC05MCw3ICs5MSw3IEBACiBzdGF0aWMgdm9pZCBhdDkxX3Bvd2Vyb2ZmX2R0X3NldF93YWtldXBfbW9kZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKLQllbnVtIHdha2V1cF90eXBlIHdha2V1cF9tb2RlOworCWludCB3YWtldXBfbW9kZTsKIAl1MzIgbW9kZSA9IDAsIHRtcDsKIAogCXdha2V1cF9tb2RlID0gYXQ5MV9wb3dlcm9mZl9nZXRfd2FrZXVwX21vZGUobnApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9hdDkxLXJlc2V0LmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2F0OTEtcmVzZXQuYwppbmRleCA2OWE3NWQ5OS4uMTM1ODRlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9yZXNldC9hdDkxLXJlc2V0LmMKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9hdDkxLXJlc2V0LmMKQEAgLTE3LDggKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KIAotI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgotCiAjaW5jbHVkZSA8c29jL2F0OTEvYXQ5MXNhbTlfZGRyc2RyLmg+CiAjaW5jbHVkZSA8c29jL2F0OTEvYXQ5MXNhbTlfc2RyYW1jLmg+CiAKQEAgLTU0LDcgKzUyLDggQEAKICogcmVzZXQgcmVnaXN0ZXIgaXQgY2FuIGJlIGxlZnQgZHJpdmluZyB0aGUgZGF0YSBidXMgYW5kCiAqIGtpbGxpbmcgdGhlIGNoYW5jZSBvZiBhIHN1YnNlcXVlbnQgYm9vdCBmcm9tIE5BTkQKICovCi1zdGF0aWMgdm9pZCBhdDkxc2FtOTI2MF9yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9kZSwgY29uc3QgY2hhciAqY21kKQorc3RhdGljIGludCBhdDkxc2FtOTI2MF9yZXN0YXJ0KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBtb2RlLAorCQkJICAgICAgIHZvaWQgKmNtZCkKIHsKIAlhc20gdm9sYXRpbGUoCiAJCS8qIEFsaWduIHRvIGNhY2hlIGxpbmVzICovCkBAIC03Niw5ICs3NSwxMiBAQAogCQkgICJyIiAoMSksCiAJCSAgInIiIChBVDkxX1NEUkFNQ19MUENCX1BPV0VSX0RPV04pLAogCQkgICJyIiAoQVQ5MV9SU1RDX0tFWSB8IEFUOTFfUlNUQ19QRVJSU1QgfCBBVDkxX1JTVENfUFJPQ1JTVCkpOworCisJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCi1zdGF0aWMgdm9pZCBhdDkxc2FtOWc0NV9yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9kZSwgY29uc3QgY2hhciAqY21kKQorc3RhdGljIGludCBhdDkxc2FtOWc0NV9yZXN0YXJ0KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBtb2RlLAorCQkJICAgICAgIHZvaWQgKmNtZCkKIHsKIAlhc20gdm9sYXRpbGUoCiAJCS8qCkBAIC0xMTcsNiArMTE5LDggQEAKIAkJICAiciIgKEFUOTFfRERSU0RSQ19MUENCX1BPV0VSX0RPV04pLAogCQkgICJyIiAoQVQ5MV9SU1RDX0tFWSB8IEFUOTFfUlNUQ19QRVJSU1QgfCBBVDkxX1JTVENfUFJPQ1JTVCkKIAkJOiAicjAiKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGF0OTFfcmVzZXRfc3RhdHVzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0xNjEsNiArMTY1LDEwIEBACiAJeyAvKiBzZW50aW5lbCAqLyB9CiB9OwogCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGF0OTFfcmVzdGFydF9uYiA9IHsKKwkucHJpb3JpdHkgPSAxOTIsCit9OworCiBzdGF0aWMgaW50IGF0OTFfcmVzZXRfb2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKQEAgLTE4Myw5ICsxOTEsOCBAQAogCX0KIAogCW1hdGNoID0gb2ZfbWF0Y2hfbm9kZShhdDkxX3Jlc2V0X29mX21hdGNoLCBwZGV2LT5kZXYub2Zfbm9kZSk7Ci0JYXJtX3BtX3Jlc3RhcnQgPSBtYXRjaC0+ZGF0YTsKLQotCXJldHVybiAwOworCWF0OTFfcmVzdGFydF9uYi5ub3RpZmllcl9jYWxsID0gbWF0Y2gtPmRhdGE7CisJcmV0dXJuIHJlZ2lzdGVyX3Jlc3RhcnRfaGFuZGxlcigmYXQ5MV9yZXN0YXJ0X25iKTsKIH0KIAogc3RhdGljIGludCBhdDkxX3Jlc2V0X3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0yMTIsMTAgKzIxOSwxMSBAQAogCX0KIAogCW1hdGNoID0gcGxhdGZvcm1fZ2V0X2RldmljZV9pZChwZGV2KTsKLQlhcm1fcG1fcmVzdGFydCA9ICh2b2lkICgqKShlbnVtIHJlYm9vdF9tb2RlLCBjb25zdCBjaGFyKikpCi0JCW1hdGNoLT5kcml2ZXJfZGF0YTsKKwlhdDkxX3Jlc3RhcnRfbmIubm90aWZpZXJfY2FsbCA9CisJCShpbnQgKCopKHN0cnVjdCBub3RpZmllcl9ibG9jayAqLAorCQkJIHVuc2lnbmVkIGxvbmcsIHZvaWQgKikpIG1hdGNoLT5kcml2ZXJfZGF0YTsKIAotCXJldHVybiAwOworCXJldHVybiByZWdpc3Rlcl9yZXN0YXJ0X2hhbmRsZXIoJmF0OTFfcmVzdGFydF9uYik7CiB9CiAKIHN0YXRpYyBpbnQgYXQ5MV9yZXNldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9icmNtc3RiLXJlYm9vdC5jIGIvZHJpdmVycy9wb3dlci9yZXNldC9icmNtc3RiLXJlYm9vdC5jCmluZGV4IDEwMDYwNmYuLjg4NGI1M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvYnJjbXN0Yi1yZWJvb3QuYworKysgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L2JyY21zdGItcmVib290LmMKQEAgLTExLDYgKzExLDcgQEAKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMzQsMTMgKzM1LDIwIEBACiBzdGF0aWMgdTMyIHJzdF9zcmNfZW47CiBzdGF0aWMgdTMyIHN3X21zdHJfcnN0OwogCitzdHJ1Y3QgcmVzZXRfcmVnX21hc2sgeworCXUzMiByc3Rfc3JjX2VuX21hc2s7CisJdTMyIHN3X21zdHJfcnN0X21hc2s7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlc2V0X3JlZ19tYXNrICpyZXNldF9tYXNrczsKKwogc3RhdGljIGludCBicmNtc3RiX3Jlc3RhcnRfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBtb2RlLCB2b2lkICpjbWQpCiB7CiAJaW50IHJjOwogCXUzMiB0bXA7CiAKLQlyYyA9IHJlZ21hcF93cml0ZShyZWdtYXAsIHJzdF9zcmNfZW4sIDEpOworCXJjID0gcmVnbWFwX3dyaXRlKHJlZ21hcCwgcnN0X3NyY19lbiwgcmVzZXRfbWFza3MtPnJzdF9zcmNfZW5fbWFzayk7CiAJaWYgKHJjKSB7CiAJCXByX2VycigiZmFpbGVkIHRvIHdyaXRlIHJzdF9zcmNfZW4gKCVkKVxuIiwgcmMpOwogCQlyZXR1cm4gTk9USUZZX0RPTkU7CkBAIC01Miw3ICs2MCw3IEBACiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAl9CiAKLQlyYyA9IHJlZ21hcF93cml0ZShyZWdtYXAsIHN3X21zdHJfcnN0LCAxKTsKKwlyYyA9IHJlZ21hcF93cml0ZShyZWdtYXAsIHN3X21zdHJfcnN0LCByZXNldF9tYXNrcy0+c3dfbXN0cl9yc3RfbWFzayk7CiAJaWYgKHJjKSB7CiAJCXByX2VycigiZmFpbGVkIHRvIHdyaXRlIHN3X21zdHJfcnN0ICglZClcbiIsIHJjKTsKIAkJcmV0dXJuIE5PVElGWV9ET05FOwpAQCAtNzUsMTAgKzgzLDM0IEBACiAJLnByaW9yaXR5ID0gMTI4LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCByZXNldF9yZWdfbWFzayByZXNldF9iaXRzXzQwbm0gPSB7CisJLnJzdF9zcmNfZW5fbWFzayA9IEJJVCgwKSwKKwkuc3dfbXN0cl9yc3RfbWFzayA9IEJJVCgwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVzZXRfcmVnX21hc2sgcmVzZXRfYml0c182NW5tID0geworCS5yc3Rfc3JjX2VuX21hc2sgPSBCSVQoMyksCisJLnN3X21zdHJfcnN0X21hc2sgPSBCSVQoMzEpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImJyY20sYnJjbXN0Yi1yZWJvb3QiLCAuZGF0YSA9ICZyZXNldF9iaXRzXzQwbm0gfSwKKwl7IC5jb21wYXRpYmxlID0gImJyY20sYmNtNzAzOC1yZWJvb3QiLCAuZGF0YSA9ICZyZXNldF9iaXRzXzY1bm0gfSwKKwl7fSwKK307CisKIHN0YXRpYyBpbnQgYnJjbXN0Yl9yZWJvb3RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmM7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX2lkOworCisJb2ZfaWQgPSBvZl9tYXRjaF9ub2RlKG9mX21hdGNoLCBucCk7CisJaWYgKCFvZl9pZCkgeworCQlwcl9lcnIoImZhaWxlZCB0byBsb29rIHVwIGNvbXBhdGlibGUgc3RyaW5nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJlc2V0X21hc2tzID0gb2ZfaWQtPmRhdGE7CiAKIAlyZWdtYXAgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAic3lzY29uIik7CiAJaWYgKElTX0VSUihyZWdtYXApKSB7CkBAIC0xMDgsMTEgKzE0MCw2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAiYnJjbSxicmNtc3RiLXJlYm9vdCIsIH0sCi0Je30sCi19OwotCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBicmNtc3RiX3JlYm9vdF9kcml2ZXIgPSB7CiAJLnByb2JlID0gYnJjbXN0Yl9yZWJvb3RfcHJvYmUsCiAJLmRyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvbHRjMjk1Mi1wb3dlcm9mZi5jIGIvZHJpdmVycy9wb3dlci9yZXNldC9sdGMyOTUyLXBvd2Vyb2ZmLmMKaW5kZXggMzRmMzhhMy4uN2VmMTkzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9yZXNldC9sdGMyOTUyLXBvd2Vyb2ZmLmMKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9sdGMyOTUyLXBvd2Vyb2ZmLmMKQEAgLTMyLDcgKzMyLDkgQEAKICAqIC0gdHJpZ2dlciAoaW5wdXQpCiAgKiAgICAgQSBsZXZlbCBjaGFuZ2UgaW5kaWNhdGVzIHRoZSBzaHV0LWRvd24gdHJpZ2dlci4gSWYgaXQncyBzdGF0ZSByZXZlcnRzCiAgKiAgICAgd2l0aGluIHRoZSB0aW1lLW91dCBkZWZpbmVkIGJ5IHRyaWdnZXJfZGVsYXksIHRoZSBzaHV0IGRvd24gaXMgbm90Ci0gKiAgICAgZXhlY3V0ZWQuCisgKiAgICAgZXhlY3V0ZWQuIElmIG5vIHBpbiBpcyBhc3NpZ25lZCB0byB0aGlzIGlucHV0LCB0aGUgZHJpdmVyIHdpbGwgc3RhcnQgdGhlCisgKiAgICAgd2F0Y2hkb2cgdG9nZ2xlIGltbWVkaWF0ZWx5LiBUaGUgY2hpcCB3aWxsIG9ubHkgcG93ZXIgb2ZmIHRoZSBzeXN0ZW0gaWYKKyAqICAgICBpdCBpcyByZXF1ZXN0ZWQgdG8gZG8gc28gdGhyb3VnaCB0aGUga2lsbCBsaW5lLgogICoKICAqIC0gd2F0Y2hkb2cgKG91dHB1dCkKICAqICAgICBPbmNlIGEgc2h1dCBkb3duIGlzIHRyaWdnZXJlZCwgdGhlIGRyaXZlciB3aWxsIHRvZ2dsZSB0aGlzIHNpZ25hbCwKQEAgLTYzLDcgKzY1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAKLXN0cnVjdCBsdGMyOTUyX3Bvd2Vyb2ZmX2RhdGEgeworc3RydWN0IGx0YzI5NTJfcG93ZXJvZmYgewogCXN0cnVjdCBocnRpbWVyIHRpbWVyX3RyaWdnZXI7CiAJc3RydWN0IGhydGltZXIgdGltZXJfd2RlOwogCkBAIC03MiwyMiArNzQsMjEgQEAKIAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAotCXVuc2lnbmVkIGludCB2aXJxOworCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9fdHJpZ2dlcjsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvX3dhdGNoZG9nOworCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW9fa2lsbDsKIAotCS8qKgotCSAqIDA6IHRyaWdnZXIKLQkgKiAxOiB3YXRjaGRvZwotCSAqIDI6IGtpbGwKLQkgKi8KLQlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvWzNdOworCWJvb2wga2VybmVsX3BhbmljOworCXN0cnVjdCBub3RpZmllcl9ibG9jayBwYW5pY19ub3RpZmllcjsKIH07CiAKLXN0YXRpYyBpbnQgbHRjMjk1Ml9wb3dlcm9mZl9wYW5pYzsKLXN0YXRpYyBzdHJ1Y3QgbHRjMjk1Ml9wb3dlcm9mZl9kYXRhICpsdGMyOTUyX2RhdGE7CisjZGVmaW5lIHRvX2x0YzI5NTIocCwgbSkgY29udGFpbmVyX29mKHAsIHN0cnVjdCBsdGMyOTUyX3Bvd2Vyb2ZmLCBtKQogCi0jZGVmaW5lIFBPV0VSUEFUSF9JT19UUklHR0VSCTAKLSNkZWZpbmUgUE9XRVJQQVRIX0lPX1dBVENIRE9HCTEKLSNkZWZpbmUgUE9XRVJQQVRIX0lPX0tJTEwJMgorLyoKKyAqIFRoaXMgZ2xvYmFsIHZhcmlhYmxlIGlzIG9ubHkgbmVlZGVkIGZvciBwbV9wb3dlcl9vZmYuIFdlIHNob3VsZAorICogcmVtb3ZlIGl0IGVudGlyZWx5IG9uY2Ugd2UgZG9uJ3QgbmVlZCB0aGUgZ2xvYmFsIHN0YXRlIGFueW1vcmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbHRjMjk1Ml9wb3dlcm9mZiAqbHRjMjk1Ml9kYXRhOwogCiAvKioKICAqIGx0YzI5NTJfcG93ZXJvZmZfdGltZXJfd2RlIC0gVGltZXIgY2FsbGJhY2sKQEAgLTEwMywyOSArMTA0LDI0IEBACiAJa3RpbWVfdCBub3c7CiAJaW50IHN0YXRlOwogCXVuc2lnbmVkIGxvbmcgb3ZlcnJ1bnM7CisJc3RydWN0IGx0YzI5NTJfcG93ZXJvZmYgKmRhdGEgPSB0b19sdGMyOTUyKHRpbWVyLCB0aW1lcl93ZGUpOwogCi0JaWYgKGx0YzI5NTJfcG93ZXJvZmZfcGFuaWMpCisJaWYgKGRhdGEtPmtlcm5lbF9wYW5pYykKIAkJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwogCi0Jc3RhdGUgPSBncGlvZF9nZXRfdmFsdWUobHRjMjk1Ml9kYXRhLT5ncGlvW1BPV0VSUEFUSF9JT19XQVRDSERPR10pOwotCWdwaW9kX3NldF92YWx1ZShsdGMyOTUyX2RhdGEtPmdwaW9bUE9XRVJQQVRIX0lPX1dBVENIRE9HXSwgIXN0YXRlKTsKKwlzdGF0ZSA9IGdwaW9kX2dldF92YWx1ZShkYXRhLT5ncGlvX3dhdGNoZG9nKTsKKwlncGlvZF9zZXRfdmFsdWUoZGF0YS0+Z3Bpb193YXRjaGRvZywgIXN0YXRlKTsKIAogCW5vdyA9IGhydGltZXJfY2JfZ2V0X3RpbWUodGltZXIpOwotCW92ZXJydW5zID0gaHJ0aW1lcl9mb3J3YXJkKHRpbWVyLCBub3csIGx0YzI5NTJfZGF0YS0+d2RlX2ludGVydmFsKTsKKwlvdmVycnVucyA9IGhydGltZXJfZm9yd2FyZCh0aW1lciwgbm93LCBkYXRhLT53ZGVfaW50ZXJ2YWwpOwogCiAJcmV0dXJuIEhSVElNRVJfUkVTVEFSVDsKIH0KIAotc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGx0YzI5NTJfcG93ZXJvZmZfdGltZXJfdHJpZ2dlcigKLQlzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpCitzdGF0aWMgdm9pZCBsdGMyOTUyX3Bvd2Vyb2ZmX3N0YXJ0X3dkZShzdHJ1Y3QgbHRjMjk1Ml9wb3dlcm9mZiAqZGF0YSkKIHsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaHJ0aW1lcl9zdGFydCgmbHRjMjk1Ml9kYXRhLT50aW1lcl93ZGUsCi0JCWx0YzI5NTJfZGF0YS0+d2RlX2ludGVydmFsLCBIUlRJTUVSX01PREVfUkVMKTsKLQotCWlmIChyZXQpIHsKLQkJZGV2X2VycihsdGMyOTUyX2RhdGEtPmRldiwgInVuYWJsZSB0byBzdGFydCB0aGUgdGltZXJcbiIpOworCWlmIChocnRpbWVyX3N0YXJ0KCZkYXRhLT50aW1lcl93ZGUsIGRhdGEtPndkZV9pbnRlcnZhbCwKKwkJCSAgSFJUSU1FUl9NT0RFX1JFTCkpIHsKIAkJLyoKIAkJICogVGhlIGRldmljZSB3aWxsIG5vdCB0b2dnbGUgdGhlIHdhdGNoZG9nIHJlc2V0LAogCQkgKiB0aHVzIHNodXQgZG93biBpcyBvbmx5IHNhZmUgaWYgdGhlIFBvd2VyUGF0aCBjb250cm9sbGVyCkBAIC0xMzQsMTAgKzEzMCwxNyBAQAogCQkgKgogCQkgKiBPbmx5IHNlbmRpbmcgYSB3YXJuaW5nIGFzIHRoZSBzeXN0ZW0gd2lsbCBwb3dlci1vZmYgYW55d2F5CiAJCSAqLworCQlkZXZfZXJyKGRhdGEtPmRldiwgInVuYWJsZSB0byBzdGFydCB0aGUgdGltZXJcbiIpOwogCX0KK30KIAotCWRldl9pbmZvKGx0YzI5NTJfZGF0YS0+ZGV2LCAiZXhlY3V0aW5nIHNodXRkb3duXG4iKTsKK3N0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydAorbHRjMjk1Ml9wb3dlcm9mZl90aW1lcl90cmlnZ2VyKHN0cnVjdCBocnRpbWVyICp0aW1lcikKK3sKKwlzdHJ1Y3QgbHRjMjk1Ml9wb3dlcm9mZiAqZGF0YSA9IHRvX2x0YzI5NTIodGltZXIsIHRpbWVyX3RyaWdnZXIpOwogCisJbHRjMjk1Ml9wb3dlcm9mZl9zdGFydF93ZGUoZGF0YSk7CisJZGV2X2luZm8oZGF0YS0+ZGV2LCAiZXhlY3V0aW5nIHNodXRkb3duXG4iKTsKIAlvcmRlcmx5X3Bvd2Vyb2ZmKHRydWUpOwogCiAJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwpAQCAtMTU0LDE4MCArMTU3LDE2MSBAQAogICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgbHRjMjk1Ml9wb3dlcm9mZl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKLQlpbnQgcmV0OwotCXN0cnVjdCBsdGMyOTUyX3Bvd2Vyb2ZmX2RhdGEgKmRhdGEgPSBkZXZfaWQ7CisJc3RydWN0IGx0YzI5NTJfcG93ZXJvZmYgKmRhdGEgPSBkZXZfaWQ7CiAKLQlpZiAobHRjMjk1Ml9wb3dlcm9mZl9wYW5pYykKLQkJZ290byBpcnFfb2s7Ci0KLQlpZiAoaHJ0aW1lcl9hY3RpdmUoJmRhdGEtPnRpbWVyX3dkZSkpIHsKKwlpZiAoZGF0YS0+a2VybmVsX3BhbmljIHx8IGhydGltZXJfYWN0aXZlKCZkYXRhLT50aW1lcl93ZGUpKSB7CiAJCS8qIHNodXRkb3duIGlzIGFscmVhZHkgdHJpZ2dlcmVkLCBub3RoaW5nIHRvIGRvIGFueSBtb3JlICovCi0JCWdvdG8gaXJxX29rOworCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCi0JaWYgKCFocnRpbWVyX2FjdGl2ZSgmZGF0YS0+dGltZXJfdHJpZ2dlcikpIHsKLQkJcmV0ID0gaHJ0aW1lcl9zdGFydCgmZGF0YS0+dGltZXJfdHJpZ2dlciwgZGF0YS0+dHJpZ2dlcl9kZWxheSwKLQkJCUhSVElNRVJfTU9ERV9SRUwpOwotCi0JCWlmIChyZXQpCisJaWYgKGdwaW9kX2dldF92YWx1ZShkYXRhLT5ncGlvX3RyaWdnZXIpKSB7CisJCWlmIChocnRpbWVyX3N0YXJ0KCZkYXRhLT50aW1lcl90cmlnZ2VyLCBkYXRhLT50cmlnZ2VyX2RlbGF5LAorCQkJCSAgSFJUSU1FUl9NT0RFX1JFTCkpCiAJCQlkZXZfZXJyKGRhdGEtPmRldiwgInVuYWJsZSB0byBzdGFydCB0aGUgd2FpdCB0aW1lclxuIik7CiAJfSBlbHNlIHsKLQkJcmV0ID0gaHJ0aW1lcl9jYW5jZWwoJmRhdGEtPnRpbWVyX3RyaWdnZXIpOworCQlocnRpbWVyX2NhbmNlbCgmZGF0YS0+dGltZXJfdHJpZ2dlcik7CiAJCS8qIG9taXR0aW5nIHJldHVybiB2YWx1ZSBjaGVjaywgdGltZXIgc2hvdWxkIGhhdmUgYmVlbiB2YWxpZCAqLwogCX0KLQotaXJxX29rOgogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIHZvaWQgbHRjMjk1Ml9wb3dlcm9mZl9raWxsKHZvaWQpCiB7Ci0JZ3Bpb2Rfc2V0X3ZhbHVlKGx0YzI5NTJfZGF0YS0+Z3Bpb1tQT1dFUlBBVEhfSU9fS0lMTF0sIDEpOworCWdwaW9kX3NldF92YWx1ZShsdGMyOTUyX2RhdGEtPmdwaW9fa2lsbCwgMSk7CiB9CiAKLXN0YXRpYyBpbnQgbHRjMjk1Ml9wb3dlcm9mZl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIHZvaWQgbHRjMjk1Ml9wb3dlcm9mZl9kZWZhdWx0KHN0cnVjdCBsdGMyOTUyX3Bvd2Vyb2ZmICpkYXRhKQogewotCXJldHVybiAtRU5PU1lTOwotfQotCi1zdGF0aWMgaW50IGx0YzI5NTJfcG93ZXJvZmZfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLXN0YXRpYyB2b2lkIGx0YzI5NTJfcG93ZXJvZmZfZGVmYXVsdChzdHJ1Y3QgbHRjMjk1Ml9wb3dlcm9mZl9kYXRhICpkYXRhKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZGF0YS0+Z3Bpbyk7IGkrKykKLQkJZGF0YS0+Z3Bpb1tpXSA9IE5VTEw7Ci0KIAlkYXRhLT53ZGVfaW50ZXJ2YWwgPSBrdGltZV9zZXQoMCwgMzAwTCoxRTZMKTsKIAlkYXRhLT50cmlnZ2VyX2RlbGF5ID0ga3RpbWVfc2V0KDIsIDUwMEwqMUU2TCk7CiAKIAlocnRpbWVyX2luaXQoJmRhdGEtPnRpbWVyX3RyaWdnZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7Ci0JZGF0YS0+dGltZXJfdHJpZ2dlci5mdW5jdGlvbiA9ICZsdGMyOTUyX3Bvd2Vyb2ZmX3RpbWVyX3RyaWdnZXI7CisJZGF0YS0+dGltZXJfdHJpZ2dlci5mdW5jdGlvbiA9IGx0YzI5NTJfcG93ZXJvZmZfdGltZXJfdHJpZ2dlcjsKIAogCWhydGltZXJfaW5pdCgmZGF0YS0+dGltZXJfd2RlLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCWRhdGEtPnRpbWVyX3dkZS5mdW5jdGlvbiA9ICZsdGMyOTUyX3Bvd2Vyb2ZmX3RpbWVyX3dkZTsKKwlkYXRhLT50aW1lcl93ZGUuZnVuY3Rpb24gPSBsdGMyOTUyX3Bvd2Vyb2ZmX3RpbWVyX3dkZTsKIH0KIAogc3RhdGljIGludCBsdGMyOTUyX3Bvd2Vyb2ZmX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlpbnQgcmV0LCB2aXJxOwotCXVuc2lnbmVkIGludCBpOwotCXN0cnVjdCBsdGMyOTUyX3Bvd2Vyb2ZmX2RhdGEgKmRhdGE7CisJaW50IHJldDsKKwlzdHJ1Y3QgbHRjMjk1Ml9wb3dlcm9mZiAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCi0Jc3RhdGljIGNoYXIgKm5hbWVbXSA9IHsKLQkJInRyaWdnZXIiLAotCQkid2F0Y2hkb2ciLAotCQkia2lsbCIsCi0JCU5VTEwKLQl9OworCWx0YzI5NTJfcG93ZXJvZmZfZGVmYXVsdChkYXRhKTsKIAotCWRhdGEgPSBsdGMyOTUyX2RhdGE7Ci0JbHRjMjk1Ml9wb3dlcm9mZl9kZWZhdWx0KGx0YzI5NTJfZGF0YSk7CisJZGF0YS0+Z3Bpb193YXRjaGRvZyA9IGRldm1fZ3Bpb2RfZ2V0KCZwZGV2LT5kZXYsICJ3YXRjaGRvZyIsCisJCQkJCSAgICAgR1BJT0RfT1VUX0xPVyk7CisJaWYgKElTX0VSUihkYXRhLT5ncGlvX3dhdGNoZG9nKSkgeworCQlyZXQgPSBQVFJfRVJSKGRhdGEtPmdwaW9fd2F0Y2hkb2cpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gY2xhaW0gZ3BpbyBcIndhdGNoZG9nXCJcbiIpOworCQlyZXR1cm4gcmV0OworCX0KIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGx0YzI5NTJfZGF0YS0+Z3Bpbyk7IGkrKykgewotCQlsdGMyOTUyX2RhdGEtPmdwaW9baV0gPSBncGlvZF9nZXQoJnBkZXYtPmRldiwgbmFtZVtpXSk7CisJZGF0YS0+Z3Bpb19raWxsID0gZGV2bV9ncGlvZF9nZXQoJnBkZXYtPmRldiwgImtpbGwiLCBHUElPRF9PVVRfTE9XKTsKKwlpZiAoSVNfRVJSKGRhdGEtPmdwaW9fa2lsbCkpIHsKKwkJcmV0ID0gUFRSX0VSUihkYXRhLT5ncGlvX2tpbGwpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gY2xhaW0gZ3BpbyBcImtpbGxcIlxuIik7CisJCXJldHVybiByZXQ7CisJfQogCi0JCWlmIChJU19FUlIobHRjMjk1Ml9kYXRhLT5ncGlvW2ldKSkgewotCQkJcmV0ID0gUFRSX0VSUihsdGMyOTUyX2RhdGEtPmdwaW9baV0pOworCWRhdGEtPmdwaW9fdHJpZ2dlciA9IGRldm1fZ3Bpb2RfZ2V0KCZwZGV2LT5kZXYsICJ0cmlnZ2VyIiwgR1BJT0RfSU4pOworCWlmIChJU19FUlIoZGF0YS0+Z3Bpb190cmlnZ2VyKSkgeworCQkvKgorCQkgKiBJdCdzIG5vdCBhIHByb2JsZW0gaWYgdGhlIHRyaWdnZXIgZ3BpbyBpc24ndCBhdmFpbGFibGUsIGJ1dAorCQkgKiBpdCBpcyB3b3J0aCBhIHdhcm5pbmcgaWYgaXRzIHVzZSB3YXMgZGVmaW5lZCBpbiB0aGUgZGV2aWNlCisJCSAqIHRyZWUuCisJCSAqLworCQlpZiAoUFRSX0VSUihkYXRhLT5ncGlvX3RyaWdnZXIpICE9IC1FTk9FTlQpCiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkJInVuYWJsZSB0byBjbGFpbSB0aGUgZm9sbG93aW5nIGdwaW86ICVzXG4iLAotCQkJCW5hbWVbaV0pOwotCQkJZ290byBlcnJfaW87CisJCQkJInVuYWJsZSB0byBjbGFpbSBncGlvIFwidHJpZ2dlclwiXG4iKTsKKwkJZGF0YS0+Z3Bpb190cmlnZ2VyID0gTlVMTDsKKwl9CisKKwlpZiAoZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBncGlvZF90b19pcnEoZGF0YS0+Z3Bpb190cmlnZ2VyKSwKKwkJCSAgICAgbHRjMjk1Ml9wb3dlcm9mZl9oYW5kbGVyLAorCQkJICAgICAoSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HKSwKKwkJCSAgICAgImx0YzI5NTItcG93ZXJvZmYiLAorCQkJICAgICBkYXRhKSkgeworCQkvKgorCQkgKiBTb21lIHRoaW5ncyBtYXkgaGF2ZSBoYXBwZW5lZDoKKwkJICogLSBObyB0cmlnZ2VyIGlucHV0IHdhcyBkZWZpbmVkCisJCSAqIC0gQ2xhaW1pbmcgdGhlIEdQSU8gZmFpbGVkCisJCSAqIC0gV2UgY291bGQgbm90IG1hcCB0byBhbiBJUlEKKwkJICogLSBXZSBjb3VsZG4ndCByZWdpc3RlciBhbiBpbnRlcnJ1cHQgaGFuZGxlcgorCQkgKgorCQkgKiBOb25lIG9mIHRoZXNlIHJlYWxseSBhcmUgcHJvYmxlbXMsIGJ1dCBhbGwgb2YgdGhlbQorCQkgKiBkaXNxdWFsaWZ5IHRoZSBwdXNoIGJ1dHRvbiBmcm9tIGNvbnRyb2xsaW5nIHRoZSBwb3dlci4KKwkJICoKKwkJICogSXQgaXMgdGhlcmVmb3JlIGltcG9ydGFudCB0byBub3RlIHRoYXQgaWYgdGhlIGx0YzI5NTIKKwkJICogZGV0ZWN0cyBhIGJ1dHRvbiBwcmVzcyBmb3IgbG9uZyBlbm91Z2gsIGl0IHdpbGwgc3RpbGwgc3RhcnQKKwkJICogaXRzIG93biBwb3dlcmRvd24gd2luZG93IGFuZCBjdXQgdGhlIHBvd2VyIG9uIHVzIGlmIHdlIGRvbid0CisJCSAqIHN0YXJ0IHRoZSB3YXRjaGRvZyB0cmlnZ2VyLgorCQkgKi8KKwkJaWYgKGRhdGEtPmdwaW9fdHJpZ2dlcikgeworCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwKKwkJCQkgInVuYWJsZSB0byBjb25maWd1cmUgdGhlIHRyaWdnZXIgaW50ZXJydXB0XG4iKTsKKwkJCWRldm1fZ3Bpb2RfcHV0KCZwZGV2LT5kZXYsIGRhdGEtPmdwaW9fdHJpZ2dlcik7CisJCQlkYXRhLT5ncGlvX3RyaWdnZXIgPSBOVUxMOwogCQl9Ci0JfQotCi0JcmV0ID0gZ3Bpb2RfZGlyZWN0aW9uX291dHB1dCgKLQkJbHRjMjk1Ml9kYXRhLT5ncGlvW1BPV0VSUEFUSF9JT19XQVRDSERPR10sIDApOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHVzZSB3YXRjaGRvZy1ncGlvIGFzIG91dHB1dFxuIik7Ci0JCWdvdG8gZXJyX2lvOwotCX0KLQotCXJldCA9IGdwaW9kX2RpcmVjdGlvbl9vdXRwdXQobHRjMjk1Ml9kYXRhLT5ncGlvW1BPV0VSUEFUSF9JT19LSUxMXSwgMCk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gdXNlIGtpbGwtZ3BpbyBhcyBvdXRwdXRcbiIpOwotCQlnb3RvIGVycl9pbzsKLQl9Ci0KLQl2aXJxID0gZ3Bpb2RfdG9faXJxKGx0YzI5NTJfZGF0YS0+Z3Bpb1tQT1dFUlBBVEhfSU9fVFJJR0dFUl0pOwotCWlmICh2aXJxIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgbWFwIEdQSU8gYXMgaW50ZXJydXB0Iik7Ci0JCWdvdG8gZXJyX2lvOwotCX0KLQotCWx0YzI5NTJfZGF0YS0+dmlycSA9IHZpcnE7Ci0JcmV0ID0gcmVxdWVzdF9pcnEodmlycSwKLQkJbHRjMjk1Ml9wb3dlcm9mZl9oYW5kbGVyLAotCQkoSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX1RSSUdHRVJfUklTSU5HKSwKLQkJImx0YzI5NTItcG93ZXJvZmYiLAotCQlsdGMyOTUyX2RhdGEKLQkpOwotCi0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgY29uZmlndXJlIGFuIGludGVycnVwdCBoYW5kbGVyXG4iKTsKLQkJZ290byBlcnJfaW87CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsCisJCQkgInBvd2VyIGRvd24gdHJpZ2dlciBpbnB1dCB3aWxsIG5vdCBiZSB1c2VkXG4iKTsKKwkJbHRjMjk1Ml9wb3dlcm9mZl9zdGFydF93ZGUoZGF0YSk7CiAJfQogCiAJcmV0dXJuIDA7Cit9CiAKLWVycl9pbzoKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsdGMyOTUyX2RhdGEtPmdwaW8pOyBpKyspCi0JCWlmIChsdGMyOTUyX2RhdGEtPmdwaW9baV0pCi0JCQlncGlvZF9wdXQobHRjMjk1Ml9kYXRhLT5ncGlvW2ldKTsKK3N0YXRpYyBpbnQgbHRjMjk1Ml9wb3dlcm9mZl9ub3RpZnlfcGFuaWMoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBsdGMyOTUyX3Bvd2Vyb2ZmICpkYXRhID0gdG9fbHRjMjk1MihuYiwgcGFuaWNfbm90aWZpZXIpOwogCi0JcmV0dXJuIHJldDsKKwlkYXRhLT5rZXJuZWxfcGFuaWMgPSB0cnVlOworCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAogc3RhdGljIGludCBsdGMyOTUyX3Bvd2Vyb2ZmX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJldDsKKwlzdHJ1Y3QgbHRjMjk1Ml9wb3dlcm9mZiAqZGF0YTsKIAogCWlmIChwbV9wb3dlcl9vZmYpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAicG1fcG93ZXJfb2ZmIGFscmVhZHkgcmVnaXN0ZXJlZCIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWx0YzI5NTJfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpsdGMyOTUyX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWx0YzI5NTJfZGF0YSkKKwlkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlsdGMyOTUyX2RhdGEtPmRldiA9ICZwZGV2LT5kZXY7CisJZGF0YS0+ZGV2ID0gJnBkZXYtPmRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKIAogCXJldCA9IGx0YzI5NTJfcG93ZXJvZmZfaW5pdChwZGV2KTsKIAlpZiAocmV0KQotCQlnb3RvIGVycjsKKwkJcmV0dXJuIHJldDsKIAotCXBtX3Bvd2VyX29mZiA9ICZsdGMyOTUyX3Bvd2Vyb2ZmX2tpbGw7CisJLyogVE9ETzogcmVtb3ZlIGx0YzI5NTJfZGF0YSAqLworCWx0YzI5NTJfZGF0YSA9IGRhdGE7CisJcG1fcG93ZXJfb2ZmID0gbHRjMjk1Ml9wb3dlcm9mZl9raWxsOwogCisJZGF0YS0+cGFuaWNfbm90aWZpZXIubm90aWZpZXJfY2FsbCA9IGx0YzI5NTJfcG93ZXJvZmZfbm90aWZ5X3BhbmljOworCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKKwkJCQkgICAgICAgJmRhdGEtPnBhbmljX25vdGlmaWVyKTsKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAicHJvYmUgc3VjY2Vzc2Z1bFxuIik7CiAKIAlyZXR1cm4gMDsKLQotZXJyOgotCWtmcmVlKGx0YzI5NTJfZGF0YSk7Ci0JcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBsdGMyOTUyX3Bvd2Vyb2ZmX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBsdGMyOTUyX3Bvd2Vyb2ZmICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlwbV9wb3dlcl9vZmYgPSBOVUxMOwotCi0JaWYgKGx0YzI5NTJfZGF0YSkgewotCQlmcmVlX2lycShsdGMyOTUyX2RhdGEtPnZpcnEsIGx0YzI5NTJfZGF0YSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobHRjMjk1Ml9kYXRhLT5ncGlvKTsgaSsrKQotCQkJZ3Bpb2RfcHV0KGx0YzI5NTJfZGF0YS0+Z3Bpb1tpXSk7Ci0KLQkJa2ZyZWUobHRjMjk1Ml9kYXRhKTsKLQl9Ci0KKwlocnRpbWVyX2NhbmNlbCgmZGF0YS0+dGltZXJfdHJpZ2dlcik7CisJaHJ0aW1lcl9jYW5jZWwoJmRhdGEtPnRpbWVyX3dkZSk7CisJYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCisJCQkJCSAmZGF0YS0+cGFuaWNfbm90aWZpZXIpOwogCXJldHVybiAwOwogfQogCkBAIC0zNDQsNDEgKzMyOCw5IEBACiAJCS5uYW1lID0gImx0YzI5NTItcG93ZXJvZmYiLAogCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9sdGMyOTUyX3Bvd2Vyb2ZmX21hdGNoLAogCX0sCi0JLnN1c3BlbmQgPSBsdGMyOTUyX3Bvd2Vyb2ZmX3N1c3BlbmQsCi0JLnJlc3VtZSA9IGx0YzI5NTJfcG93ZXJvZmZfcmVzdW1lLAogfTsKIAotc3RhdGljIGludCBsdGMyOTUyX3Bvd2Vyb2ZmX25vdGlmeV9wYW5pYyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAotCXVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQotewotCWx0YzI5NTJfcG93ZXJvZmZfcGFuaWMgPSAxOwotCXJldHVybiBOT1RJRllfRE9ORTsKLX0KLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBsdGMyOTUyX3Bvd2Vyb2ZmX3BhbmljX25iID0gewotCS5ub3RpZmllcl9jYWxsID0gbHRjMjk1Ml9wb3dlcm9mZl9ub3RpZnlfcGFuaWMsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBsdGMyOTUyX3Bvd2Vyb2ZmX3BsYXRmb3JtX2luaXQodm9pZCkKLXsKLQlsdGMyOTUyX3Bvd2Vyb2ZmX3BhbmljID0gMDsKLQotCWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcGFuaWNfbm90aWZpZXJfbGlzdCwKLQkJJmx0YzI5NTJfcG93ZXJvZmZfcGFuaWNfbmIpOwotCi0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbHRjMjk1Ml9wb3dlcm9mZl9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgbHRjMjk1Ml9wb3dlcm9mZl9wbGF0Zm9ybV9leGl0KHZvaWQpCi17Ci0JYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCi0JCSZsdGMyOTUyX3Bvd2Vyb2ZmX3BhbmljX25iKTsKLQotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZsdGMyOTUyX3Bvd2Vyb2ZmX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGx0YzI5NTJfcG93ZXJvZmZfcGxhdGZvcm1faW5pdCk7Ci1tb2R1bGVfZXhpdChsdGMyOTUyX3Bvd2Vyb2ZmX3BsYXRmb3JtX2V4aXQpOworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihsdGMyOTUyX3Bvd2Vyb2ZmX2RyaXZlcik7CiAKIE1PRFVMRV9BVVRIT1IoIlJlbukgTW9sbCA8cmVuZS5tb2xsQHhzZW5zLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTFRDIFBvd2VyUGF0aCBwb3dlci1vZmYgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3Jlc3RhcnQtcG93ZXJvZmYuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvcmVzdGFydC1wb3dlcm9mZi5jCmluZGV4IGY0NmYyYzIuLjQxYjIyYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvcmVzZXQvcmVzdGFydC1wb3dlcm9mZi5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvcmVzdGFydC1wb3dlcm9mZi5jCkBAIC0xNiw3ICsxNiw2IEBACiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtX21pc2MuaD4KIAogc3RhdGljIHZvaWQgcmVzdGFydF9wb3dlcm9mZl9kb19wb3dlcm9mZih2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9ybW9iaWxlLXJlc2V0LmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3Jtb2JpbGUtcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjU2OWRmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9yZXNldC9ybW9iaWxlLXJlc2V0LmMKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIFJlbmVzYXMgUi1Nb2JpbGUgUmVzZXQgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEdsaWRlciBidmJhCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisKKy8qIFNZU0MgUmVnaXN0ZXIgQmFuayAyICovCisjZGVmaW5lIFJFU0NOVDIJCTB4MjAJCS8qIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgMiAqLworCisvKiBSZXNldCBDb250cm9sIFJlZ2lzdGVyIDIgKi8KKyNkZWZpbmUgUkVTQ05UMl9QUkVTCTB4ODAwMDAwMDAJLyogU29mdCBwb3dlci1vbiByZXNldCAqLworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpzeXNjX2Jhc2UyOworCitzdGF0aWMgaW50IHJtb2JpbGVfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkJIHVuc2lnbmVkIGxvbmcgbW9kZSwgdm9pZCAqY21kKQoreworCXByX2RlYnVnKCIlcyAlbHVcbiIsIF9fZnVuY19fLCBtb2RlKTsKKworCS8qIExldCdzIGFzc3VtZSB3ZSBoYXZlIGFjcXVpcmVkIHRoZSBIUEIgc2VtYXBob3JlICovCisJd3JpdGVsKFJFU0NOVDJfUFJFUywgc3lzY19iYXNlMiArIFJFU0NOVDIpOworCisJcmV0dXJuIE5PVElGWV9ET05FOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHJtb2JpbGVfcmVzZXRfbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBybW9iaWxlX3Jlc2V0X2hhbmRsZXIsCisJLnByaW9yaXR5ID0gMTkyLAorfTsKKworc3RhdGljIGludCBybW9iaWxlX3Jlc2V0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IGVycm9yOworCisJc3lzY19iYXNlMiA9IG9mX2lvbWFwKHBkZXYtPmRldi5vZl9ub2RlLCAxKTsKKwlpZiAoIXN5c2NfYmFzZTIpCisJCXJldHVybiAtRU5PREVWOworCisJZXJyb3IgPSByZWdpc3Rlcl9yZXN0YXJ0X2hhbmRsZXIoJnJtb2JpbGVfcmVzZXRfbmIpOworCWlmIChlcnJvcikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiY2Fubm90IHJlZ2lzdGVyIHJlc3RhcnQgaGFuZGxlciAoZXJyPSVkKVxuIiwgZXJyb3IpOworCQlnb3RvIGZhaWxfdW5tYXA7CisJfQorCisJcmV0dXJuIDA7CisKK2ZhaWxfdW5tYXA6CisJaW91bm1hcChzeXNjX2Jhc2UyKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgcm1vYmlsZV9yZXNldF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwl1bnJlZ2lzdGVyX3Jlc3RhcnRfaGFuZGxlcigmcm1vYmlsZV9yZXNldF9uYik7CisJaW91bm1hcChzeXNjX2Jhc2UyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcm1vYmlsZV9yZXNldF9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAicmVuZXNhcyxzeXNjLXJtb2JpbGUiLCB9LAorCXsgLyogc2VudGluZWwgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHJtb2JpbGVfcmVzZXRfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBybW9iaWxlX3Jlc2V0X2RyaXZlciA9IHsKKwkucHJvYmUgPSBybW9iaWxlX3Jlc2V0X3Byb2JlLAorCS5yZW1vdmUgPSBybW9iaWxlX3Jlc2V0X3JlbW92ZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJybW9iaWxlX3Jlc2V0IiwKKwkJLm9mX21hdGNoX3RhYmxlID0gcm1vYmlsZV9yZXNldF9vZl9tYXRjaCwKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihybW9iaWxlX3Jlc2V0X2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiUmVuZXNhcyBSLU1vYmlsZSBSZXNldCBEcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnQrcmVuZXNhc0BnbGlkZXIuYmU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3N0LXBvd2Vyb2ZmLmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3N0LXBvd2Vyb2ZmLmMKaW5kZXggYTBhY2YyNS4uMjczODNkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9yZXNldC9zdC1wb3dlcm9mZi5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvc3QtcG93ZXJvZmYuYwpAQCAtMTUsMTAgKzE1LDkgQEAKICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KIAotI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgotCiBzdHJ1Y3QgcmVzZXRfc3lzY2ZnIHsKIAlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CiAJLyogc3lzY2ZnIHVzZWQgZm9yIHJlc2V0ICovCkBAIC03NSw3ICs3NCw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzZXRfc3lzY2ZnICpzdF9yZXN0YXJ0X3N5c2NmZzsKIAotc3RhdGljIHZvaWQgc3RfcmVzdGFydChlbnVtIHJlYm9vdF9tb2RlIHJlYm9vdF9tb2RlLCBjb25zdCBjaGFyICpjbWQpCitzdGF0aWMgaW50IHN0X3Jlc3RhcnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIG1vZGUsCisJCSAgICAgIHZvaWQgKmNtZCkKIHsKIAkvKiByZXNldCBzeXNjZmcgdXBkYXRlZCAqLwogCXJlZ21hcF91cGRhdGVfYml0cyhzdF9yZXN0YXJ0X3N5c2NmZy0+cmVnbWFwLApAQCAtODgsOCArODgsMTUgQEAKIAkJCSAgIHN0X3Jlc3RhcnRfc3lzY2ZnLT5vZmZzZXRfcnN0X21zaywKIAkJCSAgIHN0X3Jlc3RhcnRfc3lzY2ZnLT5tYXNrX3JzdF9tc2ssCiAJCQkgICAwKTsKKworCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAorc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBzdF9yZXN0YXJ0X25iID0geworCS5ub3RpZmllcl9jYWxsID0gc3RfcmVzdGFydCwKKwkucHJpb3JpdHkgPSAxOTIsCit9OworCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBzdF9yZXNldF9vZl9tYXRjaFtdID0gewogCXsKIAkJLmNvbXBhdGlibGUgPSAic3Qsc3RpaDQxNS1yZXN0YXJ0IiwKQEAgLTEyNiw5ICsxMzMsNyBAQAogCQlyZXR1cm4gUFRSX0VSUihzdF9yZXN0YXJ0X3N5c2NmZy0+cmVnbWFwKTsKIAl9CiAKLQlhcm1fcG1fcmVzdGFydCA9IHN0X3Jlc3RhcnQ7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmVnaXN0ZXJfcmVzdGFydF9oYW5kbGVyKCZzdF9yZXN0YXJ0X25iKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3RfcmVzZXRfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9yZXNldC9zdW42aS1yZWJvb3QuYyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvc3VuNmktcmVib290LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMmNkN2YuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9wb3dlci9yZXNldC9zdW42aS1yZWJvb3QuYworKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBBbGx3aW5uZXIgQTMxIFNvQ3MgcmVzZXQgY29kZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IE1heGltZSBSaXBhcmQKLSAqCi0gKiBNYXhpbWUgUmlwYXJkIDxtYXhpbWUucmlwYXJkQGZyZWUtZWxlY3Ryb25zLmNvbT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKLSAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KLQotI2luY2x1ZGUgPGFzbS9zeXN0ZW1fbWlzYy5oPgotCi0jZGVmaW5lIFNVTjZJX1dBVENIRE9HMV9JUlFfUkVHCQkweDAwCi0jZGVmaW5lIFNVTjZJX1dBVENIRE9HMV9DVFJMX1JFRwkweDEwCi0jZGVmaW5lIFNVTjZJX1dBVENIRE9HMV9DVFJMX1JFU1RBUlQJCUJJVCgwKQotI2RlZmluZSBTVU42SV9XQVRDSERPRzFfQ09ORklHX1JFRwkweDE0Ci0jZGVmaW5lIFNVTjZJX1dBVENIRE9HMV9DT05GSUdfUkVTVEFSVAkJQklUKDApCi0jZGVmaW5lIFNVTjZJX1dBVENIRE9HMV9DT05GSUdfSVJRCQlCSVQoMSkKLSNkZWZpbmUgU1VONklfV0FUQ0hET0cxX01PREVfUkVHCTB4MTgKLSNkZWZpbmUgU1VONklfV0FUQ0hET0cxX01PREVfRU5BQkxFCQlCSVQoMCkKLQotc3RhdGljIHZvaWQgX19pb21lbSAqd2R0X2Jhc2U7Ci0KLXN0YXRpYyB2b2lkIHN1bjZpX3dkdF9yZXN0YXJ0KGVudW0gcmVib290X21vZGUgbW9kZSwgY29uc3QgY2hhciAqY21kKQotewotCWlmICghd2R0X2Jhc2UpCi0JCXJldHVybjsKLQotCS8qIERpc2FibGUgaW50ZXJydXB0cyAqLwotCXdyaXRlbCgwLCB3ZHRfYmFzZSArIFNVTjZJX1dBVENIRE9HMV9JUlFfUkVHKTsKLQotCS8qIFdlIHdhbnQgdG8gZGlzYWJsZSB0aGUgSVJRIGFuZCBqdXN0IHJlc2V0IHRoZSB3aG9sZSBzeXN0ZW0gKi8KLQl3cml0ZWwoU1VONklfV0FUQ0hET0cxX0NPTkZJR19SRVNUQVJULAotCQl3ZHRfYmFzZSArIFNVTjZJX1dBVENIRE9HMV9DT05GSUdfUkVHKTsKLQotCS8qIEVuYWJsZSB0aW1lci4gVGhlIGRlZmF1bHQgYW5kIGxvd2VzdCBpbnRlcnZhbCB2YWx1ZSBpcyAwLjVzICovCi0Jd3JpdGVsKFNVTjZJX1dBVENIRE9HMV9NT0RFX0VOQUJMRSwKLQkJd2R0X2Jhc2UgKyBTVU42SV9XQVRDSERPRzFfTU9ERV9SRUcpOwotCi0JLyogUmVzdGFydCB0aGUgd2F0Y2hkb2cuICovCi0Jd3JpdGVsKFNVTjZJX1dBVENIRE9HMV9DVFJMX1JFU1RBUlQsCi0JCXdkdF9iYXNlICsgU1VONklfV0FUQ0hET0cxX0NUUkxfUkVHKTsKLQotCXdoaWxlICgxKSB7Ci0JCW1kZWxheSg1KTsKLQkJd3JpdGVsKFNVTjZJX1dBVENIRE9HMV9NT0RFX0VOQUJMRSwKLQkJCXdkdF9iYXNlICsgU1VONklfV0FUQ0hET0cxX01PREVfUkVHKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc3VuNmlfcmVib290X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0Jd2R0X2Jhc2UgPSBvZl9pb21hcChwZGV2LT5kZXYub2Zfbm9kZSwgMCk7Ci0JaWYgKCF3ZHRfYmFzZSkgewotCQlXQVJOKDEsICJmYWlsZWQgdG8gbWFwIHdhdGNoZG9nIGJhc2UgYWRkcmVzcyIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlhcm1fcG1fcmVzdGFydCA9IHN1bjZpX3dkdF9yZXN0YXJ0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN1bjZpX3JlYm9vdF9vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAiYWxsd2lubmVyLHN1bjZpLWEzMS13ZHQiIH0sCi0Je30KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHN1bjZpX3JlYm9vdF9kcml2ZXIgPSB7Ci0JLnByb2JlID0gc3VuNmlfcmVib290X3Byb2JlLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInN1bjZpLXJlYm9vdCIsCi0JCS5vZl9tYXRjaF90YWJsZSA9IHN1bjZpX3JlYm9vdF9vZl9tYXRjaCwKLQl9LAotfTsKLW1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3VuNmlfcmVib290X2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3ZleHByZXNzLXBvd2Vyb2ZmLmMgYi9kcml2ZXJzL3Bvd2VyL3Jlc2V0L3ZleHByZXNzLXBvd2Vyb2ZmLmMKaW5kZXggOWRmYzljZS4uYmUxMmQ5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9yZXNldC92ZXhwcmVzcy1wb3dlcm9mZi5jCisrKyBiL2RyaXZlcnMvcG93ZXIvcmVzZXQvdmV4cHJlc3MtcG93ZXJvZmYuYwpAQCAtMTExLDIzICsxMTEsMjAgQEAKIAogc3RhdGljIGludCB2ZXhwcmVzc19yZXNldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWVudW0gdmV4cHJlc3NfcmVzZXRfZnVuYyBmdW5jOwogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoID0KIAkJCW9mX21hdGNoX2RldmljZSh2ZXhwcmVzc19yZXNldF9vZl9tYXRjaCwgJnBkZXYtPmRldik7CiAJc3RydWN0IHJlZ21hcCAqcmVnbWFwOwogCWludCByZXQgPSAwOwogCi0JaWYgKG1hdGNoKQotCQlmdW5jID0gKGVudW0gdmV4cHJlc3NfcmVzZXRfZnVuYyltYXRjaC0+ZGF0YTsKLQllbHNlCi0JCWZ1bmMgPSBwZGV2LT5pZF9lbnRyeS0+ZHJpdmVyX2RhdGE7CisJaWYgKCFtYXRjaCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X3ZleHByZXNzX2NvbmZpZygmcGRldi0+ZGV2KTsKIAlpZiAoSVNfRVJSKHJlZ21hcCkpCiAJCXJldHVybiBQVFJfRVJSKHJlZ21hcCk7CiAJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIHJlZ21hcCk7CiAKLQlzd2l0Y2ggKGZ1bmMpIHsKKwlzd2l0Y2ggKChlbnVtIHZleHByZXNzX3Jlc2V0X2Z1bmMpbWF0Y2gtPmRhdGEpIHsKIAljYXNlIEZVTkNfU0hVVERPV046CiAJCXZleHByZXNzX3Bvd2VyX29mZl9kZXZpY2UgPSAmcGRldi0+ZGV2OwogCQlwbV9wb3dlcl9vZmYgPSB2ZXhwcmVzc19wb3dlcl9vZmY7CkBAIC0xNDQsMjAgKzE0MSwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHZleHByZXNzX3Jlc2V0X2lkX3RhYmxlW10gPSB7Ci0JeyAubmFtZSA9ICJ2ZXhwcmVzcy1yZXNldCIsIC5kcml2ZXJfZGF0YSA9IEZVTkNfUkVTRVQsIH0sCi0JeyAubmFtZSA9ICJ2ZXhwcmVzcy1zaHV0ZG93biIsIC5kcml2ZXJfZGF0YSA9IEZVTkNfU0hVVERPV04sIH0sCi0JeyAubmFtZSA9ICJ2ZXhwcmVzcy1yZWJvb3QiLCAuZHJpdmVyX2RhdGEgPSBGVU5DX1JFQk9PVCwgfSwKLQl7fQotfTsKLQogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdmV4cHJlc3NfcmVzZXRfZHJpdmVyID0gewogCS5wcm9iZSA9IHZleHByZXNzX3Jlc2V0X3Byb2JlLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gInZleHByZXNzLXJlc2V0IiwKIAkJLm9mX21hdGNoX3RhYmxlID0gdmV4cHJlc3NfcmVzZXRfb2ZfbWF0Y2gsCiAJfSwKLQkuaWRfdGFibGUgPSB2ZXhwcmVzc19yZXNldF9pZF90YWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHZleHByZXNzX3Jlc2V0X2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvcnQ1MDMzX2JhdHRlcnkuYyBiL2RyaXZlcnMvcG93ZXIvcnQ1MDMzX2JhdHRlcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjg5OGY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wb3dlci9ydDUwMzNfYmF0dGVyeS5jCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogRnVlbCBnYXVnZSBkcml2ZXIgZm9yIFJpY2h0ZWsgUlQ1MDMzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNhbXN1bmcgRWxlY3Ryb25pY3MsIENvLiwgTHRkLgorICogQXV0aG9yOiBCZW9taG8gU2VvIDxiZW9taG8uc2VvQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3J0NTAzMy1wcml2YXRlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3J0NTAzMy5oPgorCitzdGF0aWMgaW50IHJ0NTAzM19iYXR0ZXJ5X2dldF9jYXBhY2l0eShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBydDUwMzNfYmF0dGVyeSAqYmF0dGVyeSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXUzMiBtc2I7CisKKwlyZWdtYXBfcmVhZChiYXR0ZXJ5LT5yZWdtYXAsIFJUNTAzM19GVUVMX1JFR19TT0NfSCwgJm1zYik7CisKKwlyZXR1cm4gbXNiOworfQorCitzdGF0aWMgaW50IHJ0NTAzM19iYXR0ZXJ5X2dldF9wcmVzZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHJ0NTAzM19iYXR0ZXJ5ICpiYXR0ZXJ5ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdTMyIHZhbDsKKworCXJlZ21hcF9yZWFkKGJhdHRlcnktPnJlZ21hcCwgUlQ1MDMzX0ZVRUxfUkVHX0NPTkZJR19MLCAmdmFsKTsKKworCXJldHVybiAodmFsICYgUlQ1MDMzX0ZVRUxfQkFUX1BSRVNFTlQpID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMgaW50IHJ0NTAzM19iYXR0ZXJ5X2dldF93YXR0X3Byb3Aoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwKQoreworCXN0cnVjdCBydDUwMzNfYmF0dGVyeSAqYmF0dGVyeSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXVuc2lnbmVkIGludCByZWdoLCByZWdsOworCWludCByZXQ7CisJdTMyIG1zYiwgbHNiOworCisJc3dpdGNoIChwc3ApIHsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XOgorCQlyZWdoID0gUlQ1MDMzX0ZVRUxfUkVHX1ZCQVRfSDsKKwkJcmVnbCA9IFJUNTAzM19GVUVMX1JFR19WQkFUX0w7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9BVkc6CisJCXJlZ2ggPSBSVDUwMzNfRlVFTF9SRUdfQVZHX1ZPTFRfSDsKKwkJcmVnbCA9IFJUNTAzM19GVUVMX1JFR19BVkdfVk9MVF9MOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfT0NWOgorCQlyZWdoID0gUlQ1MDMzX0ZVRUxfUkVHX09DVl9IOworCQlyZWdsID0gUlQ1MDMzX0ZVRUxfUkVHX09DVl9MOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZWdtYXBfcmVhZChiYXR0ZXJ5LT5yZWdtYXAsIHJlZ2gsICZtc2IpOworCXJlZ21hcF9yZWFkKGJhdHRlcnktPnJlZ21hcCwgcmVnbCwgJmxzYik7CisKKwlyZXQgPSAoKG1zYiA8PCA0KSArIChsc2IgPj4gNCkpICogMTI1MCAvIDEwMDA7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJ0NTAzM19iYXR0ZXJ5X2dldF9wcm9wZXJ0eShzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCisJCWVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKKwkJdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgcnQ1MDMzX2JhdHRlcnkgKmJhdHRlcnkgPSBjb250YWluZXJfb2YocHN5LAorCQkJCXN0cnVjdCBydDUwMzNfYmF0dGVyeSwgcHN5KTsKKworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfQVZHOgorCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9PQ1Y6CisJCXZhbC0+aW50dmFsID0gcnQ1MDMzX2JhdHRlcnlfZ2V0X3dhdHRfcHJvcChiYXR0ZXJ5LT5jbGllbnQsCisJCQkJCQkJCQlwc3ApOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQ6CisJCXZhbC0+aW50dmFsID0gcnQ1MDMzX2JhdHRlcnlfZ2V0X3ByZXNlbnQoYmF0dGVyeS0+Y2xpZW50KTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWToKKwkJdmFsLT5pbnR2YWwgPSBydDUwMzNfYmF0dGVyeV9nZXRfY2FwYWNpdHkoYmF0dGVyeS0+Y2xpZW50KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcnQ1MDMzX2JhdHRlcnlfcHJvcHNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX0FWRywKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX09DViwKKwlQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5ULAorCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZLAorfTsKKworc3RhdGljIHN0cnVjdCByZWdtYXBfY29uZmlnIHJ0NTAzM19iYXR0ZXJ5X3JlZ21hcF9jb25maWcgPSB7CisJLnJlZ19iaXRzCT0gOCwKKwkudmFsX2JpdHMJPSA4LAorCS5tYXhfcmVnaXN0ZXIJPSBSVDUwMzNfRlVFTF9SRUdfRU5ELAorfTsKKworc3RhdGljIGludCBydDUwMzNfYmF0dGVyeV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyID0gdG9faTJjX2FkYXB0ZXIoY2xpZW50LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgcnQ1MDMzX2JhdHRlcnkgKmJhdHRlcnk7CisJdTMyIHJldDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURSkpCisJCXJldHVybiAtRUlPOworCisJYmF0dGVyeSA9IGRldm1fa3phbGxvYygmY2xpZW50LT5kZXYsIHNpemVvZigqYmF0dGVyeSksIEdGUF9LRVJORUwpOworCWlmICghYmF0dGVyeSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwliYXR0ZXJ5LT5jbGllbnQgPSBjbGllbnQ7CisJYmF0dGVyeS0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoY2xpZW50LAorCQkJJnJ0NTAzM19iYXR0ZXJ5X3JlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIoYmF0dGVyeS0+cmVnbWFwKSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkZhaWxlZCB0byBpbml0aWFsaXplIHJlZ21hcFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGJhdHRlcnkpOworCisJYmF0dGVyeS0+cHN5Lm5hbWUJCT0gInJ0NTAzMy1iYXR0ZXJ5IjsKKwliYXR0ZXJ5LT5wc3kudHlwZQkJPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRURVJZOworCWJhdHRlcnktPnBzeS5nZXRfcHJvcGVydHkJPSBydDUwMzNfYmF0dGVyeV9nZXRfcHJvcGVydHk7CisJYmF0dGVyeS0+cHN5LnByb3BlcnRpZXMJCT0gcnQ1MDMzX2JhdHRlcnlfcHJvcHM7CisJYmF0dGVyeS0+cHN5Lm51bV9wcm9wZXJ0aWVzCT0gQVJSQVlfU0laRShydDUwMzNfYmF0dGVyeV9wcm9wcyk7CisKKwlyZXQgPSBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoJmNsaWVudC0+ZGV2LCAmYmF0dGVyeS0+cHN5KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHBvd2VyIHN1cHBseVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcnQ1MDMzX2JhdHRlcnlfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHJ0NTAzM19iYXR0ZXJ5ICpiYXR0ZXJ5ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmYmF0dGVyeS0+cHN5KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcnQ1MDMzX2JhdHRlcnlfaWRbXSA9IHsKKwl7ICJydDUwMzMtYmF0dGVyeSIsIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwbGF0Zm9ybSwgcnQ1MDMzX2JhdHRlcnlfaWQpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcnQ1MDMzX2JhdHRlcnlfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInJ0NTAzMy1iYXR0ZXJ5IiwKKwl9LAorCS5wcm9iZSA9IHJ0NTAzM19iYXR0ZXJ5X3Byb2JlLAorCS5yZW1vdmUgPSBydDUwMzNfYmF0dGVyeV9yZW1vdmUsCisJLmlkX3RhYmxlID0gcnQ1MDMzX2JhdHRlcnlfaWQsCit9OworbW9kdWxlX2kyY19kcml2ZXIocnQ1MDMzX2JhdHRlcnlfZHJpdmVyKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJSaWNodGVrIFJUNTAzMyBmdWVsIGdhdWdlIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQmVvbWhvIFNlbyA8YmVvbWhvLnNlb0BzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvdGVzdF9wb3dlci5jIGIvZHJpdmVycy9wb3dlci90ZXN0X3Bvd2VyLmMKaW5kZXggMDE1MmYzNWQuLmYyNmIxZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvdGVzdF9wb3dlci5jCisrKyBiL2RyaXZlcnMvcG93ZXIvdGVzdF9wb3dlci5jCkBAIC0yMSw2ICsyMSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdmVybWFnaWMuaD4KIAorZW51bSB0ZXN0X3Bvd2VyX2lkIHsKKwlURVNUX0FDLAorCVRFU1RfQkFUVEVSWSwKKwlURVNUX1VTQiwKKwlURVNUX1BPV0VSX05VTSwKK307CisKIHN0YXRpYyBpbnQgYWNfb25saW5lCQkJPSAxOwogc3RhdGljIGludCB1c2Jfb25saW5lCQkJPSAxOwogc3RhdGljIGludCBiYXR0ZXJ5X3N0YXR1cwkJPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0RJU0NIQVJHSU5HOwpAQCAtMTQ3LDcgKzE1NCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBvd2VyX3N1cHBseSB0ZXN0X3Bvd2VyX3N1cHBsaWVzW10gPSB7Ci0JeworCVtURVNUX0FDXSA9IHsKIAkJLm5hbWUgPSAidGVzdF9hYyIsCiAJCS50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfTUFJTlMsCiAJCS5zdXBwbGllZF90byA9IHRlc3RfcG93ZXJfYWNfc3VwcGxpZWRfdG8sCkBAIC0xNTUsMTMgKzE2MiwxNSBAQAogCQkucHJvcGVydGllcyA9IHRlc3RfcG93ZXJfYWNfcHJvcHMsCiAJCS5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUodGVzdF9wb3dlcl9hY19wcm9wcyksCiAJCS5nZXRfcHJvcGVydHkgPSB0ZXN0X3Bvd2VyX2dldF9hY19wcm9wZXJ0eSwKLQl9LCB7CisJfSwKKwlbVEVTVF9CQVRURVJZXSA9IHsKIAkJLm5hbWUgPSAidGVzdF9iYXR0ZXJ5IiwKIAkJLnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRURVJZLAogCQkucHJvcGVydGllcyA9IHRlc3RfcG93ZXJfYmF0dGVyeV9wcm9wcywKIAkJLm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRSh0ZXN0X3Bvd2VyX2JhdHRlcnlfcHJvcHMpLAogCQkuZ2V0X3Byb3BlcnR5ID0gdGVzdF9wb3dlcl9nZXRfYmF0dGVyeV9wcm9wZXJ0eSwKLQl9LCB7CisJfSwKKwlbVEVTVF9VU0JdID0gewogCQkubmFtZSA9ICJ0ZXN0X3VzYiIsCiAJCS50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfVVNCLAogCQkuc3VwcGxpZWRfdG8gPSB0ZXN0X3Bvd2VyX2FjX3N1cHBsaWVkX3RvLApAQCAtMTc4LDYgKzE4Nyw4IEBACiAJaW50IGk7CiAJaW50IHJldDsKIAorCUJVSUxEX0JVR19PTihURVNUX1BPV0VSX05VTSAhPSBBUlJBWV9TSVpFKHRlc3RfcG93ZXJfc3VwcGxpZXMpKTsKKwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRlc3RfcG93ZXJfc3VwcGxpZXMpOyBpKyspIHsKIAkJcmV0ID0gcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKE5VTEwsICZ0ZXN0X3Bvd2VyX3N1cHBsaWVzW2ldKTsKIAkJaWYgKHJldCkgewpAQCAtMzA5LDcgKzMyMCw3IEBACiBzdGF0aWMgaW50IHBhcmFtX3NldF9hY19vbmxpbmUoY29uc3QgY2hhciAqa2V5LCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKIHsKIAlhY19vbmxpbmUgPSBtYXBfZ2V0X3ZhbHVlKG1hcF9hY19vbmxpbmUsIGtleSwgYWNfb25saW5lKTsKLQlzaWduYWxfcG93ZXJfc3VwcGx5X2NoYW5nZWQoJnRlc3RfcG93ZXJfc3VwcGxpZXNbMF0pOworCXNpZ25hbF9wb3dlcl9zdXBwbHlfY2hhbmdlZCgmdGVzdF9wb3dlcl9zdXBwbGllc1tURVNUX0FDXSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyMiw3ICszMzMsNyBAQAogc3RhdGljIGludCBwYXJhbV9zZXRfdXNiX29ubGluZShjb25zdCBjaGFyICprZXksIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewogCXVzYl9vbmxpbmUgPSBtYXBfZ2V0X3ZhbHVlKG1hcF9hY19vbmxpbmUsIGtleSwgdXNiX29ubGluZSk7Ci0Jc2lnbmFsX3Bvd2VyX3N1cHBseV9jaGFuZ2VkKCZ0ZXN0X3Bvd2VyX3N1cHBsaWVzWzJdKTsKKwlzaWduYWxfcG93ZXJfc3VwcGx5X2NoYW5nZWQoJnRlc3RfcG93ZXJfc3VwcGxpZXNbVEVTVF9VU0JdKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzM2LDcgKzM0Nyw3IEBACiAJCQkJCWNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewogCWJhdHRlcnlfc3RhdHVzID0gbWFwX2dldF92YWx1ZShtYXBfc3RhdHVzLCBrZXksIGJhdHRlcnlfc3RhdHVzKTsKLQlzaWduYWxfcG93ZXJfc3VwcGx5X2NoYW5nZWQoJnRlc3RfcG93ZXJfc3VwcGxpZXNbMV0pOworCXNpZ25hbF9wb3dlcl9zdXBwbHlfY2hhbmdlZCgmdGVzdF9wb3dlcl9zdXBwbGllc1tURVNUX0JBVFRFUlldKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzUwLDcgKzM2MSw3IEBACiAJCQkJCWNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewogCWJhdHRlcnlfaGVhbHRoID0gbWFwX2dldF92YWx1ZShtYXBfaGVhbHRoLCBrZXksIGJhdHRlcnlfaGVhbHRoKTsKLQlzaWduYWxfcG93ZXJfc3VwcGx5X2NoYW5nZWQoJnRlc3RfcG93ZXJfc3VwcGxpZXNbMV0pOworCXNpZ25hbF9wb3dlcl9zdXBwbHlfY2hhbmdlZCgmdGVzdF9wb3dlcl9zdXBwbGllc1tURVNUX0JBVFRFUlldKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzY0LDcgKzM3NSw3IEBACiAJCQkJCWNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQogewogCWJhdHRlcnlfcHJlc2VudCA9IG1hcF9nZXRfdmFsdWUobWFwX3ByZXNlbnQsIGtleSwgYmF0dGVyeV9wcmVzZW50KTsKLQlzaWduYWxfcG93ZXJfc3VwcGx5X2NoYW5nZWQoJnRlc3RfcG93ZXJfc3VwcGxpZXNbMF0pOworCXNpZ25hbF9wb3dlcl9zdXBwbHlfY2hhbmdlZCgmdGVzdF9wb3dlcl9zdXBwbGllc1tURVNUX0FDXSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM4MCw3ICszOTEsNyBAQAogewogCWJhdHRlcnlfdGVjaG5vbG9neSA9IG1hcF9nZXRfdmFsdWUobWFwX3RlY2hub2xvZ3ksIGtleSwKIAkJCQkJCWJhdHRlcnlfdGVjaG5vbG9neSk7Ci0Jc2lnbmFsX3Bvd2VyX3N1cHBseV9jaGFuZ2VkKCZ0ZXN0X3Bvd2VyX3N1cHBsaWVzWzFdKTsKKwlzaWduYWxfcG93ZXJfc3VwcGx5X2NoYW5nZWQoJnRlc3RfcG93ZXJfc3VwcGxpZXNbVEVTVF9CQVRURVJZXSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQwMSw3ICs0MTIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWJhdHRlcnlfY2FwYWNpdHkgPSB0bXA7Ci0Jc2lnbmFsX3Bvd2VyX3N1cHBseV9jaGFuZ2VkKCZ0ZXN0X3Bvd2VyX3N1cHBsaWVzWzFdKTsKKwlzaWduYWxfcG93ZXJfc3VwcGx5X2NoYW5nZWQoJnRlc3RfcG93ZXJfc3VwcGxpZXNbVEVTVF9CQVRURVJZXSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQxNiw3ICs0MjcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWJhdHRlcnlfdm9sdGFnZSA9IHRtcDsKLQlzaWduYWxfcG93ZXJfc3VwcGx5X2NoYW5nZWQoJnRlc3RfcG93ZXJfc3VwcGxpZXNbMV0pOworCXNpZ25hbF9wb3dlcl9zdXBwbHlfY2hhbmdlZCgmdGVzdF9wb3dlcl9zdXBwbGllc1tURVNUX0JBVFRFUlldKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczMvcHMzLXZ1YXJ0LmMgYi9kcml2ZXJzL3BzMy9wczMtdnVhcnQuYwppbmRleCBiYzFlNTEzLi5kNmRiODIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BzMy9wczMtdnVhcnQuYworKysgYi9kcml2ZXJzL3BzMy9wczMtdnVhcnQuYwpAQCAtMTUxLDExICsxNTEsNiBAQAogI2VuZGlmCiB9CiAKLXN0cnVjdCB2dWFydF90cmlnZ2VycyB7Ci0JdW5zaWduZWQgbG9uZyByeDsKLQl1bnNpZ25lZCBsb25nIHR4OwotfTsKLQogaW50IHBzM192dWFydF9nZXRfdHJpZ2dlcnMoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2LAogCXN0cnVjdCB2dWFydF90cmlnZ2VycyAqdHJpZykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHMzL3N5cy1tYW5hZ2VyLWNvcmUuYyBiL2RyaXZlcnMvcHMzL3N5cy1tYW5hZ2VyLWNvcmUuYwppbmRleCAwZTQxNzM3Li5jNDI5ZmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BzMy9zeXMtbWFuYWdlci1jb3JlLmMKKysrIGIvZHJpdmVycy9wczMvc3lzLW1hbmFnZXItY29yZS5jCkBAIC00Nyw3ICs0Nyw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwczNfc3lzX21hbmFnZXJfcmVnaXN0ZXJfb3BzKTsKIAotdm9pZCBwczNfc3lzX21hbmFnZXJfcG93ZXJfb2ZmKHZvaWQpCit2b2lkIF9fbm9yZXR1cm4gcHMzX3N5c19tYW5hZ2VyX3Bvd2VyX29mZih2b2lkKQogewogCWlmIChwczNfc3lzX21hbmFnZXJfb3BzLnBvd2VyX29mZikKIAkJcHMzX3N5c19tYW5hZ2VyX29wcy5wb3dlcl9vZmYocHMzX3N5c19tYW5hZ2VyX29wcy5kZXYpOwpAQCAtNTUsNyArNTUsNyBAQAogCXBzM19zeXNfbWFuYWdlcl9oYWx0KCk7CiB9CiAKLXZvaWQgcHMzX3N5c19tYW5hZ2VyX3Jlc3RhcnQodm9pZCkKK3ZvaWQgX19ub3JldHVybiBwczNfc3lzX21hbmFnZXJfcmVzdGFydCh2b2lkKQogewogCWlmIChwczNfc3lzX21hbmFnZXJfb3BzLnJlc3RhcnQpCiAJCXBzM19zeXNfbWFuYWdlcl9vcHMucmVzdGFydChwczNfc3lzX21hbmFnZXJfb3BzLmRldik7CkBAIC02Myw3ICs2Myw3IEBACiAJcHMzX3N5c19tYW5hZ2VyX2hhbHQoKTsKIH0KIAotdm9pZCBwczNfc3lzX21hbmFnZXJfaGFsdCh2b2lkKQordm9pZCBfX25vcmV0dXJuIHBzM19zeXNfbWFuYWdlcl9oYWx0KHZvaWQpCiB7CiAJcHJfZW1lcmcoIlN5c3RlbSBIYWx0ZWQsIE9LIHRvIHR1cm4gb2ZmIHBvd2VyXG4iKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wczMvdnVhcnQuaCBiL2RyaXZlcnMvcHMzL3Z1YXJ0LmgKaW5kZXggZWI3ZjZkOS4uMjMzNThiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wczMvdnVhcnQuaAorKysgYi9kcml2ZXJzL3BzMy92dWFydC5oCkBAIC04Miw0ICs4MiwyMCBAQAogdm9pZCBwczNfdnVhcnRfY2xlYXJfcnhfYnl0ZXMoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2LAogCXVuc2lnbmVkIGludCBieXRlcyk7CiAKK3N0cnVjdCB2dWFydF90cmlnZ2VycyB7CisJdW5zaWduZWQgbG9uZyByeDsKKwl1bnNpZ25lZCBsb25nIHR4OworfTsKKworaW50IHBzM192dWFydF9nZXRfdHJpZ2dlcnMoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2LAorCXN0cnVjdCB2dWFydF90cmlnZ2VycyAqdHJpZyk7CitpbnQgcHMzX3Z1YXJ0X3NldF90cmlnZ2VycyhzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB0eCwKKwl1bnNpZ25lZCBpbnQgcngpOworaW50IHBzM192dWFydF9lbmFibGVfaW50ZXJydXB0X3R4KHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldik7CitpbnQgcHMzX3Z1YXJ0X2Rpc2FibGVfaW50ZXJydXB0X3R4KHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldik7CitpbnQgcHMzX3Z1YXJ0X2VuYWJsZV9pbnRlcnJ1cHRfcngoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KTsKK2ludCBwczNfdnVhcnRfZGlzYWJsZV9pbnRlcnJ1cHRfcngoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KTsKK2ludCBwczNfdnVhcnRfZW5hYmxlX2ludGVycnVwdF9kaXNjb25uZWN0KHN0cnVjdCBwczNfc3lzdGVtX2J1c19kZXZpY2UgKmRldik7CitpbnQgcHMzX3Z1YXJ0X2Rpc2FibGVfaW50ZXJydXB0X2Rpc2Nvbm5lY3Qoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vZGV2aWNlcy90c2k3MjEuYyBiL2RyaXZlcnMvcmFwaWRpby9kZXZpY2VzL3RzaTcyMS5jCmluZGV4IDhiY2ZlY2QuLmVlY2E3MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9kZXZpY2VzL3RzaTcyMS5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9kZXZpY2VzL3RzaTcyMS5jCkBAIC0yNDMwLDcgKzI0MzAsNyBAQAogCXBjaWVfY2FwYWJpbGl0eV9jbGVhcl9hbmRfc2V0X3dvcmQocGRldiwgUENJX0VYUF9ERVZDVEwsCiAJCVBDSV9FWFBfREVWQ1RMX1JFQURSUSB8IFBDSV9FWFBfREVWQ1RMX1JFTEFYX0VOIHwKIAkJUENJX0VYUF9ERVZDVExfTk9TTk9PUF9FTiwKLQkJMHgyIDw8IE1BWF9SRUFEX1JFUVVFU1RfU1pfU0hJRlQpOworCQlQQ0lfRVhQX0RFVkNUTF9SRUFEUlFfNTEyQik7CiAKIAkvKiBBZGp1c3QgUENJZSBjb21wbGV0aW9uIHRpbWVvdXQuICovCiAJcGNpZV9jYXBhYmlsaXR5X2NsZWFyX2FuZF9zZXRfd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNUTDIsIDB4ZiwgMHgyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmFwaWRpby9kZXZpY2VzL3RzaTcyMS5oIGIvZHJpdmVycy9yYXBpZGlvL2RldmljZXMvdHNpNzIxLmgKaW5kZXggYTdiNDI2OC4uOWQyNTAyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL2RldmljZXMvdHNpNzIxLmgKKysrIGIvZHJpdmVycy9yYXBpZGlvL2RldmljZXMvdHNpNzIxLmgKQEAgLTcyLDggKzcyLDYgQEAKICNkZWZpbmUgVFNJNzIxX01TSVhQQkFfT0ZGU0VUCTB4MmEwMDAKICNkZWZpbmUgVFNJNzIxX1BDSUVDRkdfRVBDVEwJMHg0MDAKIAotI2RlZmluZSBNQVhfUkVBRF9SRVFVRVNUX1NaX1NISUZUCTEyCi0KIC8qCiAgKiBFdmVudCBNYW5hZ2VtZW50IFJlZ2lzdGVycwogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnIGIvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZwppbmRleCBjM2E2MGI1Li5hNmYxMTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKQEAgLTQxNCw2ICs0MTQsMTQgQEAKIAkgIEV4eW5vczU0MjAvRXh5bm9zNTgwMCBTb0NzIHRvIGNvbnRyb2wgdmFyaW91cyB2b2x0YWdlcy4KIAkgIEl0IGluY2x1ZGVzIHN1cHBvcnQgZm9yIGNvbnRyb2wgb2Ygdm9sdGFnZSBhbmQgcmFtcCBzcGVlZC4KIAorY29uZmlnIFJFR1VMQVRPUl9NQVg3Nzg0MworCXRyaXN0YXRlICJNYXhpbSA3Nzg0MyByZWd1bGF0b3IiCisJZGVwZW5kcyBvbiBNRkRfTUFYNzc4NDMKKwloZWxwCisJICBUaGlzIGRyaXZlciBjb250cm9scyBhIE1heGltIDc3ODQzIHJlZ3VsYXRvci4KKwkgIFRoZSByZWd1bGF0b3IgaW5jbHVkZSB0d28gJ1NBRkVPVVQnIGZvciBVU0IoVW5pdmVyc2FsIFNlcmlhbCBCdXMpCisJICBUaGlzIGlzIHN1aXRhYmxlIGZvciBFeHlub3M1NDMzIFNvQyBjaGlwcy4KKwogY29uZmlnIFJFR1VMQVRPUl9NQzEzWFhYX0NPUkUKIAl0cmlzdGF0ZQogCkBAIC00MzMsNiArNDQxLDE1IEBACiAJICBTYXkgeSBoZXJlIHRvIHN1cHBvcnQgdGhlIHJlZ3VsYXRvcnMgZm91bmQgb24gdGhlIEZyZWVzY2FsZSBNQzEzODkyCiAJICBQTUlDLgogCitjb25maWcgUkVHVUxBVE9SX01UNjM5NworCXRyaXN0YXRlICJNZWRpYVRlayBNVDYzOTcgUE1JQyIKKwlkZXBlbmRzIG9uIE1GRF9NVDYzOTcKKwloZWxwCisJICBTYXkgeSBoZXJlIHRvIHNlbGVjdCB0aGlzIG9wdGlvbiB0byBlbmFibGUgdGhlIHBvd2VyIHJlZ3VsYXRvciBvZgorCSAgTWVkaWFUZWsgTVQ2Mzk3IFBNSUMuCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgY29udHJvbCBvZiBkaWZmZXJlbnQgcG93ZXIgcmFpbHMgb2YgZGV2aWNlCisJICB0aHJvdWdoIHJlZ3VsYXRvciBpbnRlcmZhY2UuCisKIGNvbmZpZyBSRUdVTEFUT1JfUEFMTUFTCiAJdHJpc3RhdGUgIlRJIFBhbG1hcyBQTUlDIFJlZ3VsYXRvcnMiCiAJZGVwZW5kcyBvbiBNRkRfUEFMTUFTCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9NYWtlZmlsZSBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCmluZGV4IDFmMjhlYmYuLjJjNGRhMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCkBAIC01NSw5ICs1NSwxMSBAQAogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9NQVg3NzY4NikgKz0gbWF4Nzc2ODYubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9NQVg3NzY5MykgKz0gbWF4Nzc2OTMubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9NQVg3NzgwMikgKz0gbWF4Nzc4MDIubworb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9NQVg3Nzg0MykgKz0gbWF4Nzc4NDMubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9NQzEzNzgzKSArPSBtYzEzNzgzLXJlZ3VsYXRvci5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX01DMTM4OTIpICs9IG1jMTM4OTItcmVndWxhdG9yLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfTUMxM1hYWF9DT1JFKSArPSAgbWMxM3h4eC1yZWd1bGF0b3ItY29yZS5vCitvYmotJChDT05GSUdfUkVHVUxBVE9SX01UNjM5NykJKz0gbXQ2Mzk3LXJlZ3VsYXRvci5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX1FDT01fUlBNKSArPSBxY29tX3JwbS1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9QQUxNQVMpICs9IHBhbG1hcy1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9QRlVaRTEwMCkgKz0gcGZ1emUxMDAtcmVndWxhdG9yLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2F4cDIweC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2F4cDIweC1yZWd1bGF0b3IuYwppbmRleCBmMjNkN2UxLi5lNDMzMWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9heHAyMHgtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvYXhwMjB4LXJlZ3VsYXRvci5jCkBAIC0zMiwxMSArMzIsMTMgQEAKIAogI2RlZmluZSBBWFAyMFhfRlJFUV9EQ0RDX01BU0sJCTB4MGYKIAotI2RlZmluZSBBWFAyMFhfREVTQ19JTyhfaWQsIF9zdXBwbHksIF9taW4sIF9tYXgsIF9zdGVwLCBfdnJlZywgX3ZtYXNrLCBfZXJlZywgICBcCi0JCSAgICAgICBfZW1hc2ssIF9lbmFibGVfdmFsLCBfZGlzYWJsZV92YWwpCQkJXAorI2RlZmluZSBBWFAyMFhfREVTQ19JTyhfaWQsIF9tYXRjaCwgX3N1cHBseSwgX21pbiwgX21heCwgX3N0ZXAsIF92cmVnLCBfdm1hc2ssCVwKKwkJICAgICAgIF9lcmVnLCBfZW1hc2ssIF9lbmFibGVfdmFsLCBfZGlzYWJsZV92YWwpCQlcCiAJW0FYUDIwWF8jI19pZF0gPSB7CQkJCQkJCVwKIAkJLm5hbWUJCT0gI19pZCwJCQkJCQlcCiAJCS5zdXBwbHlfbmFtZQk9IChfc3VwcGx5KSwJCQkJCVwKKwkJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKF9tYXRjaCksCQkJCVwKKwkJLnJlZ3VsYXRvcnNfbm9kZSA9IG9mX21hdGNoX3B0cigicmVndWxhdG9ycyIpLAkJCVwKIAkJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKIAkJLmlkCQk9IEFYUDIwWF8jI19pZCwJCQkJCVwKIAkJLm5fdm9sdGFnZXMJPSAoKChfbWF4KSAtIChfbWluKSkgLyAoX3N0ZXApICsgMSksCQlcCkBAIC01MiwxMSArNTQsMTMgQEAKIAkJLm9wcwkJPSAmYXhwMjB4X29wcywJCQkJCVwKIAl9CiAKLSNkZWZpbmUgQVhQMjBYX0RFU0MoX2lkLCBfc3VwcGx5LCBfbWluLCBfbWF4LCBfc3RlcCwgX3ZyZWcsIF92bWFzaywgX2VyZWcsCVwKLQkJICAgIF9lbWFzaykgCQkJCQkJCVwKKyNkZWZpbmUgQVhQMjBYX0RFU0MoX2lkLCBfbWF0Y2gsIF9zdXBwbHksIF9taW4sIF9tYXgsIF9zdGVwLCBfdnJlZywgX3ZtYXNrLAlcCisJCSAgICBfZXJlZywgX2VtYXNrKQkJCQkJCVwKIAlbQVhQMjBYXyMjX2lkXSA9IHsJCQkJCQkJXAogCQkubmFtZQkJPSAjX2lkLAkJCQkJCVwKIAkJLnN1cHBseV9uYW1lCT0gKF9zdXBwbHkpLAkJCQkJXAorCQkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoX21hdGNoKSwJCQkJXAorCQkucmVndWxhdG9yc19ub2RlID0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCQkJXAogCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQkJXAogCQkuaWQJCT0gQVhQMjBYXyMjX2lkLAkJCQkJXAogCQkubl92b2x0YWdlcwk9ICgoKF9tYXgpIC0gKF9taW4pKSAvIChfc3RlcCkgKyAxKSwJCVwKQEAgLTcwLDEwICs3NCwxMiBAQAogCQkub3BzCQk9ICZheHAyMHhfb3BzLAkJCQkJXAogCX0KIAotI2RlZmluZSBBWFAyMFhfREVTQ19GSVhFRChfaWQsIF9zdXBwbHksIF92b2x0KQkJCQkJXAorI2RlZmluZSBBWFAyMFhfREVTQ19GSVhFRChfaWQsIF9tYXRjaCwgX3N1cHBseSwgX3ZvbHQpCQkJCVwKIAlbQVhQMjBYXyMjX2lkXSA9IHsJCQkJCQkJXAogCQkubmFtZQkJPSAjX2lkLAkJCQkJCVwKIAkJLnN1cHBseV9uYW1lCT0gKF9zdXBwbHkpLAkJCQkJXAorCQkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoX21hdGNoKSwJCQkJXAorCQkucmVndWxhdG9yc19ub2RlID0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCQkJXAogCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQkJXAogCQkuaWQJCT0gQVhQMjBYXyMjX2lkLAkJCQkJXAogCQkubl92b2x0YWdlcwk9IDEsCQkJCQkJXApAQCAtODIsMTAgKzg4LDEzIEBACiAJCS5vcHMJCT0gJmF4cDIweF9vcHNfZml4ZWQJCQkJXAogCX0KIAotI2RlZmluZSBBWFAyMFhfREVTQ19UQUJMRShfaWQsIF9zdXBwbHksIF90YWJsZSwgX3ZyZWcsIF92bWFzaywgX2VyZWcsIF9lbWFzaykJXAorI2RlZmluZSBBWFAyMFhfREVTQ19UQUJMRShfaWQsIF9tYXRjaCwgX3N1cHBseSwgX3RhYmxlLCBfdnJlZywgX3ZtYXNrLCBfZXJlZywJXAorCQkJICBfZW1hc2spCQkJCQkJXAogCVtBWFAyMFhfIyNfaWRdID0gewkJCQkJCQlcCiAJCS5uYW1lCQk9ICNfaWQsCQkJCQkJXAogCQkuc3VwcGx5X25hbWUJPSAoX3N1cHBseSksCQkJCQlcCisJCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cihfbWF0Y2gpLAkJCQlcCisJCS5yZWd1bGF0b3JzX25vZGUgPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwJCQlcCiAJCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCiAJCS5pZAkJPSBBWFAyMFhfIyNfaWQsCQkJCQlcCiAJCS5uX3ZvbHRhZ2VzCT0gQVJSQVlfU0laRShfdGFibGUpLAkJCQlcCkBAIC0xMjcsMzYgKzEzNiwyMCBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyBheHAyMHhfcmVndWxhdG9yc1tdID0gewotCUFYUDIwWF9ERVNDKERDREMyLCAidmluMiIsIDcwMCwgMjI3NSwgMjUsIEFYUDIwWF9EQ0RDMl9WX09VVCwgMHgzZiwKLQkJICAgIEFYUDIwWF9QV1JfT1VUX0NUUkwsIDB4MTApLAotCUFYUDIwWF9ERVNDKERDREMzLCAidmluMyIsIDcwMCwgMzUwMCwgMjUsIEFYUDIwWF9EQ0RDM19WX09VVCwgMHg3ZiwKLQkJICAgIEFYUDIwWF9QV1JfT1VUX0NUUkwsIDB4MDIpLAotCUFYUDIwWF9ERVNDX0ZJWEVEKExETzEsICJhY2luIiwgMTMwMCksCi0JQVhQMjBYX0RFU0MoTERPMiwgImxkbzI0aW4iLCAxODAwLCAzMzAwLCAxMDAsIEFYUDIwWF9MRE8yNF9WX09VVCwgMHhmMCwKLQkJICAgIEFYUDIwWF9QV1JfT1VUX0NUUkwsIDB4MDQpLAotCUFYUDIwWF9ERVNDKExETzMsICJsZG8zaW4iLCA3MDAsIDM1MDAsIDI1LCBBWFAyMFhfTERPM19WX09VVCwgMHg3ZiwKLQkJICAgIEFYUDIwWF9QV1JfT1VUX0NUUkwsIDB4NDApLAotCUFYUDIwWF9ERVNDX1RBQkxFKExETzQsICJsZG8yNGluIiwgYXhwMjB4X2xkbzRfZGF0YSwgQVhQMjBYX0xETzI0X1ZfT1VULCAweDBmLAotCQkJICBBWFAyMFhfUFdSX09VVF9DVFJMLCAweDA4KSwKLQlBWFAyMFhfREVTQ19JTyhMRE81LCAibGRvNWluIiwgMTgwMCwgMzMwMCwgMTAwLCBBWFAyMFhfTERPNV9WX09VVCwgMHhmMCwKLQkJICAgICAgIEFYUDIwWF9HUElPMF9DVFJMLCAweDA3LCBBWFAyMFhfSU9fRU5BQkxFRCwKLQkJICAgICAgIEFYUDIwWF9JT19ESVNBQkxFRCksCi19OwotCi0jZGVmaW5lIEFYUF9NQVRDSChfbmFtZSwgX2lkKSBcCi0JW0FYUDIwWF8jI19pZF0gPSB7IFwKLQkJLm5hbWUJCT0gI19uYW1lLCBcCi0JCS5kcml2ZXJfZGF0YQk9ICh2b2lkICopICZheHAyMHhfcmVndWxhdG9yc1tBWFAyMFhfIyNfaWRdLCBcCi0JfQotCi1zdGF0aWMgc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCBheHAyMHhfbWF0Y2hlc1tdID0gewotCUFYUF9NQVRDSChkY2RjMiwgRENEQzIpLAotCUFYUF9NQVRDSChkY2RjMywgRENEQzMpLAotCUFYUF9NQVRDSChsZG8xLCBMRE8xKSwKLQlBWFBfTUFUQ0gobGRvMiwgTERPMiksCi0JQVhQX01BVENIKGxkbzMsIExETzMpLAotCUFYUF9NQVRDSChsZG80LCBMRE80KSwKLQlBWFBfTUFUQ0gobGRvNSwgTERPNSksCisJQVhQMjBYX0RFU0MoRENEQzIsICJkY2RjMiIsICJ2aW4yIiwgNzAwLCAyMjc1LCAyNSwgQVhQMjBYX0RDREMyX1ZfT1VULAorCQkgICAgMHgzZiwgQVhQMjBYX1BXUl9PVVRfQ1RSTCwgMHgxMCksCisJQVhQMjBYX0RFU0MoRENEQzMsICJkY2RjMyIsICJ2aW4zIiwgNzAwLCAzNTAwLCAyNSwgQVhQMjBYX0RDREMzX1ZfT1VULAorCQkgICAgMHg3ZiwgQVhQMjBYX1BXUl9PVVRfQ1RSTCwgMHgwMiksCisJQVhQMjBYX0RFU0NfRklYRUQoTERPMSwgImxkbzEiLCAiYWNpbiIsIDEzMDApLAorCUFYUDIwWF9ERVNDKExETzIsICJsZG8yIiwgImxkbzI0aW4iLCAxODAwLCAzMzAwLCAxMDAsCisJCSAgICBBWFAyMFhfTERPMjRfVl9PVVQsIDB4ZjAsIEFYUDIwWF9QV1JfT1VUX0NUUkwsIDB4MDQpLAorCUFYUDIwWF9ERVNDKExETzMsICJsZG8zIiwgImxkbzNpbiIsIDcwMCwgMzUwMCwgMjUsIEFYUDIwWF9MRE8zX1ZfT1VULAorCQkgICAgMHg3ZiwgQVhQMjBYX1BXUl9PVVRfQ1RSTCwgMHg0MCksCisJQVhQMjBYX0RFU0NfVEFCTEUoTERPNCwgImxkbzQiLCAibGRvMjRpbiIsIGF4cDIweF9sZG80X2RhdGEsCisJCQkgIEFYUDIwWF9MRE8yNF9WX09VVCwgMHgwZiwgQVhQMjBYX1BXUl9PVVRfQ1RSTCwgMHgwOCksCisJQVhQMjBYX0RFU0NfSU8oTERPNSwgImxkbzUiLCAibGRvNWluIiwgMTgwMCwgMzMwMCwgMTAwLAorCQkgICAgICAgQVhQMjBYX0xETzVfVl9PVVQsIDB4ZjAsIEFYUDIwWF9HUElPMF9DVFJMLCAweDA3LAorCQkgICAgICAgQVhQMjBYX0lPX0VOQUJMRUQsIEFYUDIwWF9JT19ESVNBQkxFRCksCiB9OwogCiBzdGF0aWMgaW50IGF4cDIweF9zZXRfZGNkY19mcmVxKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUzMiBkY2RjZnJlcSkKQEAgLTE5MywxMyArMTg2LDYgQEAKIAlpZiAoIXJlZ3VsYXRvcnMpIHsKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgInJlZ3VsYXRvcnMgbm9kZSBub3QgZm91bmRcbiIpOwogCX0gZWxzZSB7Ci0JCXJldCA9IG9mX3JlZ3VsYXRvcl9tYXRjaCgmcGRldi0+ZGV2LCByZWd1bGF0b3JzLCBheHAyMHhfbWF0Y2hlcywKLQkJCQkJIEFSUkFZX1NJWkUoYXhwMjB4X21hdGNoZXMpKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIHBhcnNpbmcgcmVndWxhdG9yIGluaXQgZGF0YTogJWRcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KIAkJZGNkY2ZyZXEgPSAxNTAwOwogCQlvZl9wcm9wZXJ0eV9yZWFkX3UzMihyZWd1bGF0b3JzLCAieC1wb3dlcnMsZGNkYy1mcmVxIiwgJmRjZGNmcmVxKTsKIAkJcmV0ID0gYXhwMjB4X3NldF9kY2RjX2ZyZXEocGRldiwgZGNkY2ZyZXEpOwpAQCAtMjMzLDIzICsyMTksMTcgQEAKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKIAlzdHJ1Y3QgYXhwMjB4X2RldiAqYXhwMjB4ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwotCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsgfTsKLQlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOworCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHsKKwkJLmRldiA9IHBkZXYtPmRldi5wYXJlbnQsCisJCS5yZWdtYXAgPSBheHAyMHgtPnJlZ21hcCwKKwl9OwogCWludCByZXQsIGk7CiAJdTMyIHdvcmttb2RlOwogCi0JcmV0ID0gYXhwMjB4X3JlZ3VsYXRvcl9wYXJzZV9kdChwZGV2KTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCS8qIFRoaXMgb25seSBzZXRzIHRoZSBkY2RjIGZyZXEuIElnbm9yZSBhbnkgZXJyb3JzICovCisJYXhwMjB4X3JlZ3VsYXRvcl9wYXJzZV9kdChwZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBBWFAyMFhfUkVHX0lEX01BWDsgaSsrKSB7Ci0JCWluaXRfZGF0YSA9IGF4cDIweF9tYXRjaGVzW2ldLmluaXRfZGF0YTsKLQotCQljb25maWcuZGV2ID0gcGRldi0+ZGV2LnBhcmVudDsKLQkJY29uZmlnLmluaXRfZGF0YSA9IGluaXRfZGF0YTsKLQkJY29uZmlnLnJlZ21hcCA9IGF4cDIweC0+cmVnbWFwOwotCQljb25maWcub2Zfbm9kZSA9IGF4cDIweF9tYXRjaGVzW2ldLm9mX25vZGU7Ci0KIAkJcmRldiA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZheHAyMHhfcmVndWxhdG9yc1tpXSwKIAkJCQkJICAgICAgICZjb25maWcpOwogCQlpZiAoSVNfRVJSKHJkZXYpKSB7CkBAIC0yNTksNyArMjM5LDggQEAKIAkJCXJldHVybiBQVFJfRVJSKHJkZXYpOwogCQl9CiAKLQkJcmV0ID0gb2ZfcHJvcGVydHlfcmVhZF91MzIoYXhwMjB4X21hdGNoZXNbaV0ub2Zfbm9kZSwgIngtcG93ZXJzLGRjZGMtd29ya21vZGUiLAorCQlyZXQgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihyZGV2LT5kZXYub2Zfbm9kZSwKKwkJCQkJICAgIngtcG93ZXJzLGRjZGMtd29ya21vZGUiLAogCQkJCQkgICAmd29ya21vZGUpOwogCQlpZiAoIXJldCkgewogCQkJaWYgKGF4cDIweF9zZXRfZGNkY193b3JrbW9kZShyZGV2LCBpLCB3b3JrbW9kZSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKaW5kZXggZTIyNTcxMS4uYjg5OTk0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYwpAQCAtNjMyLDQ5ICs2MzIsMzQgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihieXBhc3MsIDA0NDQsCiAJCSAgIHJlZ3VsYXRvcl9ieXBhc3Nfc2hvdywgTlVMTCk7CiAKLS8qCi0gKiBUaGVzZSBhcmUgdGhlIG9ubHkgYXR0cmlidXRlcyBhcmUgcHJlc2VudCBmb3IgYWxsIHJlZ3VsYXRvcnMuCi0gKiBPdGhlciBhdHRyaWJ1dGVzIGFyZSBhIGZ1bmN0aW9uIG9mIHJlZ3VsYXRvciBmdW5jdGlvbmFsaXR5LgotICovCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcmVndWxhdG9yX2Rldl9hdHRyc1tdID0gewotCSZkZXZfYXR0cl9uYW1lLmF0dHIsCi0JJmRldl9hdHRyX251bV91c2Vycy5hdHRyLAotCSZkZXZfYXR0cl90eXBlLmF0dHIsCi0JTlVMTCwKLX07Ci1BVFRSSUJVVEVfR1JPVVBTKHJlZ3VsYXRvcl9kZXYpOwotCi1zdGF0aWMgdm9pZCByZWd1bGF0b3JfZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0Ja2ZyZWUocmRldik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xhc3MgcmVndWxhdG9yX2NsYXNzID0gewotCS5uYW1lID0gInJlZ3VsYXRvciIsCi0JLmRldl9yZWxlYXNlID0gcmVndWxhdG9yX2Rldl9yZWxlYXNlLAotCS5kZXZfZ3JvdXBzID0gcmVndWxhdG9yX2Rldl9ncm91cHMsCi19OwotCiAvKiBDYWxjdWxhdGUgdGhlIG5ldyBvcHRpbXVtIHJlZ3VsYXRvciBvcGVyYXRpbmcgbW9kZSBiYXNlZCBvbiB0aGUgbmV3IHRvdGFsCiAgKiBjb25zdW1lciBsb2FkLiBBbGwgbG9ja3MgaGVsZCBieSBjYWxsZXIgKi8KLXN0YXRpYyB2b2lkIGRybXNfdUFfdXBkYXRlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQorc3RhdGljIGludCBkcm1zX3VBX3VwZGF0ZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yICpzaWJsaW5nOwogCWludCBjdXJyZW50X3VBID0gMCwgb3V0cHV0X3VWLCBpbnB1dF91ViwgZXJyOwogCXVuc2lnbmVkIGludCBtb2RlOwogCisJLyoKKwkgKiBmaXJzdCBjaGVjayB0byBzZWUgaWYgd2UgY2FuIHNldCBtb2RlcyBhdCBhbGwsIG90aGVyd2lzZSBqdXN0CisJICogdGVsbCB0aGUgY29uc3VtZXIgZXZlcnl0aGluZyBpcyBPSy4KKwkgKi8KIAllcnIgPSByZWd1bGF0b3JfY2hlY2tfZHJtcyhyZGV2KTsKLQlpZiAoZXJyIDwgMCB8fCAhcmRldi0+ZGVzYy0+b3BzLT5nZXRfb3B0aW11bV9tb2RlIHx8Ci0JICAgICghcmRldi0+ZGVzYy0+b3BzLT5nZXRfdm9sdGFnZSAmJgotCSAgICAgIXJkZXYtPmRlc2MtPm9wcy0+Z2V0X3ZvbHRhZ2Vfc2VsKSB8fAotCSAgICAhcmRldi0+ZGVzYy0+b3BzLT5zZXRfbW9kZSkKLQkJcmV0dXJuOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gMDsKKworCWlmICghcmRldi0+ZGVzYy0+b3BzLT5nZXRfb3B0aW11bV9tb2RlKQorCQlyZXR1cm4gMDsKKworCWlmICghcmRldi0+ZGVzYy0+b3BzLT5zZXRfbW9kZSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBnZXQgb3V0cHV0IHZvbHRhZ2UgKi8KIAlvdXRwdXRfdVYgPSBfcmVndWxhdG9yX2dldF92b2x0YWdlKHJkZXYpOwotCWlmIChvdXRwdXRfdVYgPD0gMCkKLQkJcmV0dXJuOworCWlmIChvdXRwdXRfdVYgPD0gMCkgeworCQlyZGV2X2VycihyZGV2LCAiaW52YWxpZCBvdXRwdXQgdm9sdGFnZSBmb3VuZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCS8qIGdldCBpbnB1dCB2b2x0YWdlICovCiAJaW5wdXRfdVYgPSAwOwpAQCAtNjgyLDggKzY2NywxMCBAQAogCQlpbnB1dF91ViA9IHJlZ3VsYXRvcl9nZXRfdm9sdGFnZShyZGV2LT5zdXBwbHkpOwogCWlmIChpbnB1dF91ViA8PSAwKQogCQlpbnB1dF91ViA9IHJkZXYtPmNvbnN0cmFpbnRzLT5pbnB1dF91VjsKLQlpZiAoaW5wdXRfdVYgPD0gMCkKLQkJcmV0dXJuOworCWlmIChpbnB1dF91ViA8PSAwKSB7CisJCXJkZXZfZXJyKHJkZXYsICJpbnZhbGlkIGlucHV0IHZvbHRhZ2UgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAkvKiBjYWxjIHRvdGFsIHJlcXVlc3RlZCBsb2FkICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzaWJsaW5nLCAmcmRldi0+Y29uc3VtZXJfbGlzdCwgbGlzdCkKQEAgLTY5NSw4ICs2ODIsMTcgQEAKIAogCS8qIGNoZWNrIHRoZSBuZXcgbW9kZSBpcyBhbGxvd2VkICovCiAJZXJyID0gcmVndWxhdG9yX21vZGVfY29uc3RyYWluKHJkZXYsICZtb2RlKTsKLQlpZiAoZXJyID09IDApCi0JCXJkZXYtPmRlc2MtPm9wcy0+c2V0X21vZGUocmRldiwgbW9kZSk7CisJaWYgKGVyciA8IDApIHsKKwkJcmRldl9lcnIocmRldiwgImZhaWxlZCB0byBnZXQgb3B0aW11bSBtb2RlIEAgJWQgdUEgJWQgLT4gJWQgdVZcbiIsCisJCQkgY3VycmVudF91QSwgaW5wdXRfdVYsIG91dHB1dF91Vik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gcmRldi0+ZGVzYy0+b3BzLT5zZXRfbW9kZShyZGV2LCBtb2RlKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmRldl9lcnIocmRldiwgImZhaWxlZCB0byBzZXQgb3B0aW11bSBtb2RlICV4XG4iLCBtb2RlKTsKKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQgc3VzcGVuZF9zZXRfc3RhdGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCkBAIC0xNDg4LDcgKzE0ODQsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX2dldF9vcHRpb25hbCk7CiAKLS8qIExvY2tzIGhlbGQgYnkgcmVndWxhdG9yX3B1dCgpICovCisvKiByZWd1bGF0b3JfbGlzdF9tdXRleCBsb2NrIGhlbGQgYnkgcmVndWxhdG9yX3B1dCgpICovCiBzdGF0aWMgdm9pZCBfcmVndWxhdG9yX3B1dChzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IpCiB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CkBAIC0xNTAzLDEyICsxNDk5LDE0IEBACiAJLyogcmVtb3ZlIGFueSBzeXNmcyBlbnRyaWVzICovCiAJaWYgKHJlZ3VsYXRvci0+ZGV2KQogCQlzeXNmc19yZW1vdmVfbGluaygmcmRldi0+ZGV2LmtvYmosIHJlZ3VsYXRvci0+c3VwcGx5X25hbWUpOworCW11dGV4X2xvY2soJnJkZXYtPm11dGV4KTsKIAlrZnJlZShyZWd1bGF0b3ItPnN1cHBseV9uYW1lKTsKIAlsaXN0X2RlbCgmcmVndWxhdG9yLT5saXN0KTsKIAlrZnJlZShyZWd1bGF0b3IpOwogCiAJcmRldi0+b3Blbl9jb3VudC0tOwogCXJkZXYtPmV4Y2x1c2l2ZSA9IDA7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5tdXRleCk7CiAKIAltb2R1bGVfcHV0KHJkZXYtPm93bmVyKTsKIH0KQEAgLTMwMjQsNzUgKzMwMjIsMTMgQEAKIGludCByZWd1bGF0b3Jfc2V0X29wdGltdW1fbW9kZShzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3IsIGludCB1QV9sb2FkKQogewogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gcmVndWxhdG9yLT5yZGV2OwotCXN0cnVjdCByZWd1bGF0b3IgKmNvbnN1bWVyOwotCWludCByZXQsIG91dHB1dF91ViwgaW5wdXRfdVYgPSAwLCB0b3RhbF91QV9sb2FkID0gMDsKLQl1bnNpZ25lZCBpbnQgbW9kZTsKLQotCWlmIChyZGV2LT5zdXBwbHkpCi0JCWlucHV0X3VWID0gcmVndWxhdG9yX2dldF92b2x0YWdlKHJkZXYtPnN1cHBseSk7CisJaW50IHJldDsKIAogCW11dGV4X2xvY2soJnJkZXYtPm11dGV4KTsKLQotCS8qCi0JICogZmlyc3QgY2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBzZXQgbW9kZXMgYXQgYWxsLCBvdGhlcndpc2UganVzdAotCSAqIHRlbGwgdGhlIGNvbnN1bWVyIGV2ZXJ5dGhpbmcgaXMgT0suCi0JICovCiAJcmVndWxhdG9yLT51QV9sb2FkID0gdUFfbG9hZDsKLQlyZXQgPSByZWd1bGF0b3JfY2hlY2tfZHJtcyhyZGV2KTsKLQlpZiAocmV0IDwgMCkgewotCQlyZXQgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoIXJkZXYtPmRlc2MtPm9wcy0+Z2V0X29wdGltdW1fbW9kZSkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIHdlIGNhbiBhY3R1YWxseSBkbyB0aGlzIHNvIGFueSBlcnJvcnMgYXJlIGluZGljYXRvcnMgb2YKLQkgKiBwb3RlbnRpYWwgcmVhbCBmYWlsdXJlLgotCSAqLwotCXJldCA9IC1FSU5WQUw7Ci0KLQlpZiAoIXJkZXYtPmRlc2MtPm9wcy0+c2V0X21vZGUpCi0JCWdvdG8gb3V0OwotCi0JLyogZ2V0IG91dHB1dCB2b2x0YWdlICovCi0Jb3V0cHV0X3VWID0gX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZShyZGV2KTsKLQlpZiAob3V0cHV0X3VWIDw9IDApIHsKLQkJcmRldl9lcnIocmRldiwgImludmFsaWQgb3V0cHV0IHZvbHRhZ2UgZm91bmRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBObyBzdXBwbHk/IFVzZSBjb25zdHJhaW50IHZvbHRhZ2UgKi8KLQlpZiAoaW5wdXRfdVYgPD0gMCkKLQkJaW5wdXRfdVYgPSByZGV2LT5jb25zdHJhaW50cy0+aW5wdXRfdVY7Ci0JaWYgKGlucHV0X3VWIDw9IDApIHsKLQkJcmRldl9lcnIocmRldiwgImludmFsaWQgaW5wdXQgdm9sdGFnZSBmb3VuZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGNhbGMgdG90YWwgcmVxdWVzdGVkIGxvYWQgZm9yIHRoaXMgcmVndWxhdG9yICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjb25zdW1lciwgJnJkZXYtPmNvbnN1bWVyX2xpc3QsIGxpc3QpCi0JCXRvdGFsX3VBX2xvYWQgKz0gY29uc3VtZXItPnVBX2xvYWQ7Ci0KLQltb2RlID0gcmRldi0+ZGVzYy0+b3BzLT5nZXRfb3B0aW11bV9tb2RlKHJkZXYsCi0JCQkJCQkgaW5wdXRfdVYsIG91dHB1dF91ViwKLQkJCQkJCSB0b3RhbF91QV9sb2FkKTsKLQlyZXQgPSByZWd1bGF0b3JfbW9kZV9jb25zdHJhaW4ocmRldiwgJm1vZGUpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXJkZXZfZXJyKHJkZXYsICJmYWlsZWQgdG8gZ2V0IG9wdGltdW0gbW9kZSBAICVkIHVBICVkIC0+ICVkIHVWXG4iLAotCQkJIHRvdGFsX3VBX2xvYWQsIGlucHV0X3VWLCBvdXRwdXRfdVYpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSByZGV2LT5kZXNjLT5vcHMtPnNldF9tb2RlKHJkZXYsIG1vZGUpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXJkZXZfZXJyKHJkZXYsICJmYWlsZWQgdG8gc2V0IG9wdGltdW0gbW9kZSAleFxuIiwgbW9kZSk7Ci0JCWdvdG8gb3V0OwotCX0KLQlyZXQgPSBtb2RlOwotb3V0OgorCXJldCA9IGRybXNfdUFfdXBkYXRlKHJkZXYpOwogCW11dGV4X3VubG9jaygmcmRldi0+bXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlZ3VsYXRvcl9zZXRfb3B0aW11bV9tb2RlKTsKQEAgLTM0MzQsMTI2ICszMzcwLDEzNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVndWxhdG9yX21vZGVfdG9fc3RhdHVzKTsKIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnJlZ3VsYXRvcl9kZXZfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfbmFtZS5hdHRyLAorCSZkZXZfYXR0cl9udW1fdXNlcnMuYXR0ciwKKwkmZGV2X2F0dHJfdHlwZS5hdHRyLAorCSZkZXZfYXR0cl9taWNyb3ZvbHRzLmF0dHIsCisJJmRldl9hdHRyX21pY3JvYW1wcy5hdHRyLAorCSZkZXZfYXR0cl9vcG1vZGUuYXR0ciwKKwkmZGV2X2F0dHJfc3RhdGUuYXR0ciwKKwkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCisJJmRldl9hdHRyX2J5cGFzcy5hdHRyLAorCSZkZXZfYXR0cl9yZXF1ZXN0ZWRfbWljcm9hbXBzLmF0dHIsCisJJmRldl9hdHRyX21pbl9taWNyb3ZvbHRzLmF0dHIsCisJJmRldl9hdHRyX21heF9taWNyb3ZvbHRzLmF0dHIsCisJJmRldl9hdHRyX21pbl9taWNyb2FtcHMuYXR0ciwKKwkmZGV2X2F0dHJfbWF4X21pY3JvYW1wcy5hdHRyLAorCSZkZXZfYXR0cl9zdXNwZW5kX3N0YW5kYnlfc3RhdGUuYXR0ciwKKwkmZGV2X2F0dHJfc3VzcGVuZF9tZW1fc3RhdGUuYXR0ciwKKwkmZGV2X2F0dHJfc3VzcGVuZF9kaXNrX3N0YXRlLmF0dHIsCisJJmRldl9hdHRyX3N1c3BlbmRfc3RhbmRieV9taWNyb3ZvbHRzLmF0dHIsCisJJmRldl9hdHRyX3N1c3BlbmRfbWVtX21pY3Jvdm9sdHMuYXR0ciwKKwkmZGV2X2F0dHJfc3VzcGVuZF9kaXNrX21pY3Jvdm9sdHMuYXR0ciwKKwkmZGV2X2F0dHJfc3VzcGVuZF9zdGFuZGJ5X21vZGUuYXR0ciwKKwkmZGV2X2F0dHJfc3VzcGVuZF9tZW1fbW9kZS5hdHRyLAorCSZkZXZfYXR0cl9zdXNwZW5kX2Rpc2tfbW9kZS5hdHRyLAorCU5VTEwKK307CisKIC8qCiAgKiBUbyBhdm9pZCBjbHV0dGVyaW5nIHN5c2ZzIChhbmQgbWVtb3J5KSB3aXRoIHVzZWxlc3Mgc3RhdGUsIG9ubHkKICAqIGNyZWF0ZSBhdHRyaWJ1dGVzIHRoYXQgY2FuIGJlIG1lYW5pbmdmdWxseSBkaXNwbGF5ZWQuCiAgKi8KLXN0YXRpYyBpbnQgYWRkX3JlZ3VsYXRvcl9hdHRyaWJ1dGVzKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQorc3RhdGljIHVtb2RlX3QgcmVndWxhdG9yX2F0dHJfaXNfdmlzaWJsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkJIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsIGludCBpZHgpCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJnJkZXYtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBrb2JqX3RvX2Rldihrb2JqKTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCByZWd1bGF0b3JfZGV2LCBkZXYpOwogCWNvbnN0IHN0cnVjdCByZWd1bGF0b3Jfb3BzICpvcHMgPSByZGV2LT5kZXNjLT5vcHM7Ci0JaW50IHN0YXR1cyA9IDA7CisJdW1vZGVfdCBtb2RlID0gYXR0ci0+bW9kZTsKKworCS8qIHRoZXNlIHRocmVlIGFyZSBhbHdheXMgcHJlc2VudCAqLworCWlmIChhdHRyID09ICZkZXZfYXR0cl9uYW1lLmF0dHIgfHwKKwkgICAgYXR0ciA9PSAmZGV2X2F0dHJfbnVtX3VzZXJzLmF0dHIgfHwKKwkgICAgYXR0ciA9PSAmZGV2X2F0dHJfdHlwZS5hdHRyKQorCQlyZXR1cm4gbW9kZTsKIAogCS8qIHNvbWUgYXR0cmlidXRlcyBuZWVkIHNwZWNpZmljIG1ldGhvZHMgdG8gYmUgZGlzcGxheWVkICovCi0JaWYgKChvcHMtPmdldF92b2x0YWdlICYmIG9wcy0+Z2V0X3ZvbHRhZ2UocmRldikgPj0gMCkgfHwKLQkgICAgKG9wcy0+Z2V0X3ZvbHRhZ2Vfc2VsICYmIG9wcy0+Z2V0X3ZvbHRhZ2Vfc2VsKHJkZXYpID49IDApIHx8Ci0JICAgIChvcHMtPmxpc3Rfdm9sdGFnZSAmJiBvcHMtPmxpc3Rfdm9sdGFnZShyZGV2LCAwKSA+PSAwKSB8fAotCQkocmRldi0+ZGVzYy0+Zml4ZWRfdVYgJiYgKHJkZXYtPmRlc2MtPm5fdm9sdGFnZXMgPT0gMSkpKSB7Ci0JCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9taWNyb3ZvbHRzKTsKLQkJaWYgKHN0YXR1cyA8IDApCi0JCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlpZiAob3BzLT5nZXRfY3VycmVudF9saW1pdCkgewotCQlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWljcm9hbXBzKTsKLQkJaWYgKHN0YXR1cyA8IDApCi0JCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlpZiAob3BzLT5nZXRfbW9kZSkgewotCQlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfb3Btb2RlKTsKLQkJaWYgKHN0YXR1cyA8IDApCi0JCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlpZiAocmRldi0+ZW5hX3BpbiB8fCBvcHMtPmlzX2VuYWJsZWQpIHsKLQkJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N0YXRlKTsKLQkJaWYgKHN0YXR1cyA8IDApCi0JCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlpZiAob3BzLT5nZXRfc3RhdHVzKSB7Ci0JCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdGF0dXMpOwotCQlpZiAoc3RhdHVzIDwgMCkKLQkJCXJldHVybiBzdGF0dXM7Ci0JfQotCWlmIChvcHMtPmdldF9ieXBhc3MpIHsKLQkJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2J5cGFzcyk7Ci0JCWlmIChzdGF0dXMgPCAwKQotCQkJcmV0dXJuIHN0YXR1czsKKwlpZiAoYXR0ciA9PSAmZGV2X2F0dHJfbWljcm92b2x0cy5hdHRyKSB7CisJCWlmICgob3BzLT5nZXRfdm9sdGFnZSAmJiBvcHMtPmdldF92b2x0YWdlKHJkZXYpID49IDApIHx8CisJCSAgICAob3BzLT5nZXRfdm9sdGFnZV9zZWwgJiYgb3BzLT5nZXRfdm9sdGFnZV9zZWwocmRldikgPj0gMCkgfHwKKwkJICAgIChvcHMtPmxpc3Rfdm9sdGFnZSAmJiBvcHMtPmxpc3Rfdm9sdGFnZShyZGV2LCAwKSA+PSAwKSB8fAorCQkgICAgKHJkZXYtPmRlc2MtPmZpeGVkX3VWICYmIHJkZXYtPmRlc2MtPm5fdm9sdGFnZXMgPT0gMSkpCisJCQlyZXR1cm4gbW9kZTsKKwkJcmV0dXJuIDA7CiAJfQogCisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX21pY3JvYW1wcy5hdHRyKQorCQlyZXR1cm4gb3BzLT5nZXRfY3VycmVudF9saW1pdCA/IG1vZGUgOiAwOworCisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX29wbW9kZS5hdHRyKQorCQlyZXR1cm4gb3BzLT5nZXRfbW9kZSA/IG1vZGUgOiAwOworCisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX3N0YXRlLmF0dHIpCisJCXJldHVybiAocmRldi0+ZW5hX3BpbiB8fCBvcHMtPmlzX2VuYWJsZWQpID8gbW9kZSA6IDA7CisKKwlpZiAoYXR0ciA9PSAmZGV2X2F0dHJfc3RhdHVzLmF0dHIpCisJCXJldHVybiBvcHMtPmdldF9zdGF0dXMgPyBtb2RlIDogMDsKKworCWlmIChhdHRyID09ICZkZXZfYXR0cl9ieXBhc3MuYXR0cikKKwkJcmV0dXJuIG9wcy0+Z2V0X2J5cGFzcyA/IG1vZGUgOiAwOworCiAJLyogc29tZSBhdHRyaWJ1dGVzIGFyZSB0eXBlLXNwZWNpZmljICovCi0JaWYgKHJkZXYtPmRlc2MtPnR5cGUgPT0gUkVHVUxBVE9SX0NVUlJFTlQpIHsKLQkJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3JlcXVlc3RlZF9taWNyb2FtcHMpOwotCQlpZiAoc3RhdHVzIDwgMCkKLQkJCXJldHVybiBzdGF0dXM7Ci0JfQorCWlmIChhdHRyID09ICZkZXZfYXR0cl9yZXF1ZXN0ZWRfbWljcm9hbXBzLmF0dHIpCisJCXJldHVybiByZGV2LT5kZXNjLT50eXBlID09IFJFR1VMQVRPUl9DVVJSRU5UID8gbW9kZSA6IDA7CiAKIAkvKiBhbGwgdGhlIG90aGVyIGF0dHJpYnV0ZXMgZXhpc3QgdG8gc3VwcG9ydCBjb25zdHJhaW50czsKIAkgKiBkb24ndCBzaG93IHRoZW0gaWYgdGhlcmUgYXJlIG5vIGNvbnN0cmFpbnRzLCBvciBpZiB0aGUKIAkgKiByZWxldmFudCBzdXBwb3J0aW5nIG1ldGhvZHMgYXJlIG1pc3NpbmcuCiAJICovCiAJaWYgKCFyZGV2LT5jb25zdHJhaW50cykKLQkJcmV0dXJuIHN0YXR1czsKKwkJcmV0dXJuIDA7CiAKIAkvKiBjb25zdHJhaW50cyBuZWVkIHNwZWNpZmljIHN1cHBvcnRpbmcgbWV0aG9kcyAqLwotCWlmIChvcHMtPnNldF92b2x0YWdlIHx8IG9wcy0+c2V0X3ZvbHRhZ2Vfc2VsKSB7Ci0JCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9taW5fbWljcm92b2x0cyk7Ci0JCWlmIChzdGF0dXMgPCAwKQotCQkJcmV0dXJuIHN0YXR1czsKLQkJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21heF9taWNyb3ZvbHRzKTsKLQkJaWYgKHN0YXR1cyA8IDApCi0JCQlyZXR1cm4gc3RhdHVzOwotCX0KLQlpZiAob3BzLT5zZXRfY3VycmVudF9saW1pdCkgewotCQlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWluX21pY3JvYW1wcyk7Ci0JCWlmIChzdGF0dXMgPCAwKQotCQkJcmV0dXJuIHN0YXR1czsKLQkJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX21heF9taWNyb2FtcHMpOwotCQlpZiAoc3RhdHVzIDwgMCkKLQkJCXJldHVybiBzdGF0dXM7Ci0JfQorCWlmIChhdHRyID09ICZkZXZfYXR0cl9taW5fbWljcm92b2x0cy5hdHRyIHx8CisJICAgIGF0dHIgPT0gJmRldl9hdHRyX21heF9taWNyb3ZvbHRzLmF0dHIpCisJCXJldHVybiAob3BzLT5zZXRfdm9sdGFnZSB8fCBvcHMtPnNldF92b2x0YWdlX3NlbCkgPyBtb2RlIDogMDsKIAotCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdXNwZW5kX3N0YW5kYnlfc3RhdGUpOwotCWlmIChzdGF0dXMgPCAwKQotCQlyZXR1cm4gc3RhdHVzOwotCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9zdXNwZW5kX21lbV9zdGF0ZSk7Ci0JaWYgKHN0YXR1cyA8IDApCi0JCXJldHVybiBzdGF0dXM7Ci0Jc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3N1c3BlbmRfZGlza19zdGF0ZSk7Ci0JaWYgKHN0YXR1cyA8IDApCi0JCXJldHVybiBzdGF0dXM7CisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX21pbl9taWNyb2FtcHMuYXR0ciB8fAorCSAgICBhdHRyID09ICZkZXZfYXR0cl9tYXhfbWljcm9hbXBzLmF0dHIpCisJCXJldHVybiBvcHMtPnNldF9jdXJyZW50X2xpbWl0ID8gbW9kZSA6IDA7CiAKLQlpZiAob3BzLT5zZXRfc3VzcGVuZF92b2x0YWdlKSB7Ci0JCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkJJmRldl9hdHRyX3N1c3BlbmRfc3RhbmRieV9taWNyb3ZvbHRzKTsKLQkJaWYgKHN0YXR1cyA8IDApCi0JCQlyZXR1cm4gc3RhdHVzOwotCQlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJCSZkZXZfYXR0cl9zdXNwZW5kX21lbV9taWNyb3ZvbHRzKTsKLQkJaWYgKHN0YXR1cyA8IDApCi0JCQlyZXR1cm4gc3RhdHVzOwotCQlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJCSZkZXZfYXR0cl9zdXNwZW5kX2Rpc2tfbWljcm92b2x0cyk7Ci0JCWlmIChzdGF0dXMgPCAwKQotCQkJcmV0dXJuIHN0YXR1czsKLQl9CisJaWYgKGF0dHIgPT0gJmRldl9hdHRyX3N1c3BlbmRfc3RhbmRieV9zdGF0ZS5hdHRyIHx8CisJICAgIGF0dHIgPT0gJmRldl9hdHRyX3N1c3BlbmRfbWVtX3N0YXRlLmF0dHIgfHwKKwkgICAgYXR0ciA9PSAmZGV2X2F0dHJfc3VzcGVuZF9kaXNrX3N0YXRlLmF0dHIpCisJCXJldHVybiBtb2RlOwogCi0JaWYgKG9wcy0+c2V0X3N1c3BlbmRfbW9kZSkgewotCQlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJCSZkZXZfYXR0cl9zdXNwZW5kX3N0YW5kYnlfbW9kZSk7Ci0JCWlmIChzdGF0dXMgPCAwKQotCQkJcmV0dXJuIHN0YXR1czsKLQkJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCQkmZGV2X2F0dHJfc3VzcGVuZF9tZW1fbW9kZSk7Ci0JCWlmIChzdGF0dXMgPCAwKQotCQkJcmV0dXJuIHN0YXR1czsKLQkJc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCQkmZGV2X2F0dHJfc3VzcGVuZF9kaXNrX21vZGUpOwotCQlpZiAoc3RhdHVzIDwgMCkKLQkJCXJldHVybiBzdGF0dXM7Ci0JfQorCWlmIChhdHRyID09ICZkZXZfYXR0cl9zdXNwZW5kX3N0YW5kYnlfbWljcm92b2x0cy5hdHRyIHx8CisJICAgIGF0dHIgPT0gJmRldl9hdHRyX3N1c3BlbmRfbWVtX21pY3Jvdm9sdHMuYXR0ciB8fAorCSAgICBhdHRyID09ICZkZXZfYXR0cl9zdXNwZW5kX2Rpc2tfbWljcm92b2x0cy5hdHRyKQorCQlyZXR1cm4gb3BzLT5zZXRfc3VzcGVuZF92b2x0YWdlID8gbW9kZSA6IDA7CiAKLQlyZXR1cm4gc3RhdHVzOworCWlmIChhdHRyID09ICZkZXZfYXR0cl9zdXNwZW5kX3N0YW5kYnlfbW9kZS5hdHRyIHx8CisJICAgIGF0dHIgPT0gJmRldl9hdHRyX3N1c3BlbmRfbWVtX21vZGUuYXR0ciB8fAorCSAgICBhdHRyID09ICZkZXZfYXR0cl9zdXNwZW5kX2Rpc2tfbW9kZS5hdHRyKQorCQlyZXR1cm4gb3BzLT5zZXRfc3VzcGVuZF9tb2RlID8gbW9kZSA6IDA7CisKKwlyZXR1cm4gbW9kZTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcmVndWxhdG9yX2Rldl9ncm91cCA9IHsKKwkuYXR0cnMgPSByZWd1bGF0b3JfZGV2X2F0dHJzLAorCS5pc192aXNpYmxlID0gcmVndWxhdG9yX2F0dHJfaXNfdmlzaWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpyZWd1bGF0b3JfZGV2X2dyb3Vwc1tdID0geworCSZyZWd1bGF0b3JfZGV2X2dyb3VwLAorCU5VTEwKK307CisKK3N0YXRpYyB2b2lkIHJlZ3VsYXRvcl9kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlrZnJlZShyZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBjbGFzcyByZWd1bGF0b3JfY2xhc3MgPSB7CisJLm5hbWUgPSAicmVndWxhdG9yIiwKKwkuZGV2X3JlbGVhc2UgPSByZWd1bGF0b3JfZGV2X3JlbGVhc2UsCisJLmRldl9ncm91cHMgPSByZWd1bGF0b3JfZGV2X2dyb3VwcywKK307CisKIHN0YXRpYyB2b2lkIHJkZXZfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewogCXJkZXYtPmRlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIocmRldl9nZXRfbmFtZShyZGV2KSwgZGVidWdmc19yb290KTsKQEAgLTM1NzMsNyArMzUxOSw3IEBACiAvKioKICAqIHJlZ3VsYXRvcl9yZWdpc3RlciAtIHJlZ2lzdGVyIHJlZ3VsYXRvcgogICogQHJlZ3VsYXRvcl9kZXNjOiByZWd1bGF0b3IgdG8gcmVnaXN0ZXIKLSAqIEBjb25maWc6IHJ1bnRpbWUgY29uZmlndXJhdGlvbiBmb3IgcmVndWxhdG9yCisgKiBAY2ZnOiBydW50aW1lIGNvbmZpZ3VyYXRpb24gZm9yIHJlZ3VsYXRvcgogICoKICAqIENhbGxlZCBieSByZWd1bGF0b3IgZHJpdmVycyB0byByZWdpc3RlciBhIHJlZ3VsYXRvci4KICAqIFJldHVybnMgYSB2YWxpZCBwb2ludGVyIHRvIHN0cnVjdCByZWd1bGF0b3JfZGV2IG9uIHN1Y2Nlc3MKQEAgLTM1ODEsMjAgKzM1MjcsMjEgQEAKICAqLwogc3RydWN0IHJlZ3VsYXRvcl9kZXYgKgogcmVndWxhdG9yX3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqcmVndWxhdG9yX2Rlc2MsCi0JCSAgIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfY29uZmlnICpjb25maWcpCisJCSAgIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfY29uZmlnICpjZmcpCiB7CiAJY29uc3Qgc3RydWN0IHJlZ3VsYXRpb25fY29uc3RyYWludHMgKmNvbnN0cmFpbnRzID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhOwotCXN0YXRpYyBhdG9taWNfdCByZWd1bGF0b3Jfbm8gPSBBVE9NSUNfSU5JVCgwKTsKKwlzdHJ1Y3QgcmVndWxhdG9yX2NvbmZpZyAqY29uZmlnID0gTlVMTDsKKwlzdGF0aWMgYXRvbWljX3QgcmVndWxhdG9yX25vID0gQVRPTUlDX0lOSVQoLTEpOwogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlpbnQgcmV0LCBpOwogCWNvbnN0IGNoYXIgKnN1cHBseSA9IE5VTEw7CiAKLQlpZiAocmVndWxhdG9yX2Rlc2MgPT0gTlVMTCB8fCBjb25maWcgPT0gTlVMTCkKKwlpZiAocmVndWxhdG9yX2Rlc2MgPT0gTlVMTCB8fCBjZmcgPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKLQlkZXYgPSBjb25maWctPmRldjsKKwlkZXYgPSBjZmctPmRldjsKIAlXQVJOX09OKCFkZXYpOwogCiAJaWYgKHJlZ3VsYXRvcl9kZXNjLT5uYW1lID09IE5VTEwgfHwgcmVndWxhdG9yX2Rlc2MtPm9wcyA9PSBOVUxMKQpAQCAtMzYyNCw3ICszNTcxLDE3IEBACiAJaWYgKHJkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlpbml0X2RhdGEgPSByZWd1bGF0b3Jfb2ZfZ2V0X2luaXRfZGF0YShkZXYsIHJlZ3VsYXRvcl9kZXNjLAorCS8qCisJICogRHVwbGljYXRlIHRoZSBjb25maWcgc28gdGhlIGRyaXZlciBjb3VsZCBvdmVycmlkZSBpdCBhZnRlcgorCSAqIHBhcnNpbmcgaW5pdCBkYXRhLgorCSAqLworCWNvbmZpZyA9IGttZW1kdXAoY2ZnLCBzaXplb2YoKmNmZyksIEdGUF9LRVJORUwpOworCWlmIChjb25maWcgPT0gTlVMTCkgeworCQlrZnJlZShyZGV2KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJaW5pdF9kYXRhID0gcmVndWxhdG9yX29mX2dldF9pbml0X2RhdGEoZGV2LCByZWd1bGF0b3JfZGVzYywgY29uZmlnLAogCQkJCQkgICAgICAgJnJkZXYtPmRldi5vZl9ub2RlKTsKIAlpZiAoIWluaXRfZGF0YSkgewogCQlpbml0X2RhdGEgPSBjb25maWctPmluaXRfZGF0YTsKQEAgLTM2NTgsOCArMzYxNSw4IEBACiAJLyogcmVnaXN0ZXIgd2l0aCBzeXNmcyAqLwogCXJkZXYtPmRldi5jbGFzcyA9ICZyZWd1bGF0b3JfY2xhc3M7CiAJcmRldi0+ZGV2LnBhcmVudCA9IGRldjsKLQlkZXZfc2V0X25hbWUoJnJkZXYtPmRldiwgInJlZ3VsYXRvci4lZCIsCi0JCSAgICAgYXRvbWljX2luY19yZXR1cm4oJnJlZ3VsYXRvcl9ubykgLSAxKTsKKwlkZXZfc2V0X25hbWUoJnJkZXYtPmRldiwgInJlZ3VsYXRvci4lbHUiLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpIGF0b21pY19pbmNfcmV0dXJuKCZyZWd1bGF0b3Jfbm8pKTsKIAlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJnJkZXYtPmRldik7CiAJaWYgKHJldCAhPSAwKSB7CiAJCXB1dF9kZXZpY2UoJnJkZXYtPmRldik7CkBAIC0zNjkyLDExICszNjQ5LDYgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBzY3J1YjsKIAotCS8qIGFkZCBhdHRyaWJ1dGVzIHN1cHBvcnRlZCBieSB0aGlzIHJlZ3VsYXRvciAqLwotCXJldCA9IGFkZF9yZWd1bGF0b3JfYXR0cmlidXRlcyhyZGV2KTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBzY3J1YjsKLQogCWlmIChpbml0X2RhdGEgJiYgaW5pdF9kYXRhLT5zdXBwbHlfcmVndWxhdG9yKQogCQlzdXBwbHkgPSBpbml0X2RhdGEtPnN1cHBseV9yZWd1bGF0b3I7CiAJZWxzZSBpZiAocmVndWxhdG9yX2Rlc2MtPnN1cHBseV9uYW1lKQpAQCAtMzc1Miw2ICszNzA0LDcgQEAKIAlyZGV2X2luaXRfZGVidWdmcyhyZGV2KTsKIG91dDoKIAltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKKwlrZnJlZShjb25maWcpOwogCXJldHVybiByZGV2OwogCiB1bnNldF9zdXBwbGllczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2RhOTIxMS1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2RhOTIxMS1yZWd1bGF0b3IuYwppbmRleCBjNzhkMjEwLi4wMTM0MzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9kYTkyMTEtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvZGE5MjExLXJlZ3VsYXRvci5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZGE5MjExLmg+CiAjaW5jbHVkZSAiZGE5MjExLXJlZ3VsYXRvci5oIgpAQCAtMjc2LDcgKzI3NywxMCBAQAogCQkJY29udGludWU7CiAKIAkJcGRhdGEtPmluaXRfZGF0YVtuXSA9IGRhOTIxMV9tYXRjaGVzW2ldLmluaXRfZGF0YTsKLQorCQlwZGF0YS0+cmVnX25vZGVbbl0gPSBkYTkyMTFfbWF0Y2hlc1tpXS5vZl9ub2RlOworCQlwZGF0YS0+Z3Bpb19yZW5bbl0gPQorCQkJb2ZfZ2V0X25hbWVkX2dwaW8oZGE5MjExX21hdGNoZXNbaV0ub2Zfbm9kZSwKKwkJCQkiZW5hYmxlLWdwaW9zIiwgMCk7CiAJCW4rKzsKIAl9CiAKQEAgLTM2NCw3ICszNjgsMTUgQEAKIAkJY29uZmlnLmRldiA9IGNoaXAtPmRldjsKIAkJY29uZmlnLmRyaXZlcl9kYXRhID0gY2hpcDsKIAkJY29uZmlnLnJlZ21hcCA9IGNoaXAtPnJlZ21hcDsKLQkJY29uZmlnLm9mX25vZGUgPSBjaGlwLT5kZXYtPm9mX25vZGU7CisJCWNvbmZpZy5vZl9ub2RlID0gY2hpcC0+cGRhdGEtPnJlZ19ub2RlW2ldOworCisJCWlmIChncGlvX2lzX3ZhbGlkKGNoaXAtPnBkYXRhLT5ncGlvX3JlbltpXSkpIHsKKwkJCWNvbmZpZy5lbmFfZ3BpbyA9IGNoaXAtPnBkYXRhLT5ncGlvX3JlbltpXTsKKwkJCWNvbmZpZy5lbmFfZ3Bpb19pbml0aWFsaXplZCA9IHRydWU7CisJCX0gZWxzZSB7CisJCQljb25maWcuZW5hX2dwaW8gPSAtRUlOVkFMOworCQkJY29uZmlnLmVuYV9ncGlvX2luaXRpYWxpemVkID0gZmFsc2U7CisJCX0KIAogCQljaGlwLT5yZGV2W2ldID0gZGV2bV9yZWd1bGF0b3JfcmVnaXN0ZXIoY2hpcC0+ZGV2LAogCQkJJmRhOTIxMV9yZWd1bGF0b3JzW2ldLCAmY29uZmlnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2ZhbjUzNTU1LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9mYW41MzU1NS5jCmluZGV4IDZjNDNhYjIuLjNjMjVkYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2ZhbjUzNTU1LmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvZmFuNTM1NTUuYwpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJCXJldHVybiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7CiB9CiAKLXN0YXRpYyBpbnQgc2xld19yYXRlc1tdID0geworc3RhdGljIGNvbnN0IGludCBzbGV3X3JhdGVzW10gPSB7CiAJNjQwMDAsCiAJMzIwMDAsCiAJMTYwMDAsCkBAIC0yOTYsNyArMjk2LDcgQEAKIAlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKGRpLT5yZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCByZWdtYXBfY29uZmlnIGZhbjUzNTU1X3JlZ21hcF9jb25maWcgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgZmFuNTM1NTVfcmVnbWFwX2NvbmZpZyA9IHsKIAkucmVnX2JpdHMgPSA4LAogCS52YWxfYml0cyA9IDgsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvaW50ZXJuYWwuaCBiL2RyaXZlcnMvcmVndWxhdG9yL2ludGVybmFsLmgKaW5kZXggODBiYTJhMy4uYzc0YWM4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9pbnRlcm5hbC5oCkBAIC0zOCwxMSArMzgsMTMgQEAKICNpZmRlZiBDT05GSUdfT0YKIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpyZWd1bGF0b3Jfb2ZfZ2V0X2luaXRfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICAgICAgICBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKmRlc2MsCisJCQkJIHN0cnVjdCByZWd1bGF0b3JfY29uZmlnICpjb25maWcsCiAJCQkJIHN0cnVjdCBkZXZpY2Vfbm9kZSAqKm5vZGUpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKgogcmVndWxhdG9yX29mX2dldF9pbml0X2RhdGEoc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjLAorCQkJICAgc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgKmNvbmZpZywKIAkJCSAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqKm5vZGUpCiB7CiAJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9pc2w5MzA1LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9pc2w5MzA1LmMKaW5kZXggOTJmZWZkOS4uNmUzYTE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvaXNsOTMwNS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2lzbDkzMDUuYwpAQCAtMTc3LDggKzE3NywxMCBAQAogCiAjaWZkZWYgQ09ORklHX09GCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBpc2w5MzA1X2R0X2lkc1tdID0gewotCXsgLmNvbXBhdGlibGUgPSAiaXNsLGlzbDkzMDUiIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJpc2wsaXNsOTMwNWgiIH0sCisJeyAuY29tcGF0aWJsZSA9ICJpc2wsaXNsOTMwNSIgfSwgLyogZm9yIGJhY2t3YXJkIGNvbXBhdC4sIGRvbid0IHVzZSAqLworCXsgLmNvbXBhdGlibGUgPSAiaXNpbCxpc2w5MzA1IiB9LAorCXsgLmNvbXBhdGlibGUgPSAiaXNsLGlzbDkzMDVoIiB9LCAvKiBmb3IgYmFja3dhcmQgY29tcGF0LiwgZG9uJ3QgdXNlICovCisJeyAuY29tcGF0aWJsZSA9ICJpc2lsLGlzbDkzMDVoIiB9LAogCXt9LAogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbHA4NzJ4LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9scDg3MnguYwppbmRleCAwMjFkNjRkLi4zZGUzMjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9scDg3MnguYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9scDg3MnguYwpAQCAtMTA2LDcgKzEwNiw2IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwogCWVudW0gbHA4NzJ4X2lkIGNoaXBpZDsKIAlzdHJ1Y3QgbHA4NzJ4X3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCXN0cnVjdCByZWd1bGF0b3JfZGV2ICoqcmVndWxhdG9yczsKIAlpbnQgbnVtX3JlZ3VsYXRvcnM7CiAJZW51bSBscDg3MnhfZHZzX3N0YXRlIGR2c19waW47CiAJaW50IGR2c19ncGlvOwpAQCAtODAxLDggKzgwMCw2IEBACiAJCQlkZXZfZXJyKGxwLT5kZXYsICJyZWd1bGF0b3IgcmVnaXN0ZXIgZXJyIik7CiAJCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKIAkJfQotCi0JCSoobHAtPnJlZ3VsYXRvcnMgKyBpKSA9IHJkZXY7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05MDYsNyArOTAzLDcgQEAKIHN0YXRpYyBpbnQgbHA4NzJ4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBscDg3MnggKmxwOwotCWludCByZXQsIHNpemUsIG51bV9yZWd1bGF0b3JzOworCWludCByZXQ7CiAJY29uc3QgaW50IGxwODcyeF9udW1fcmVndWxhdG9yc1tdID0gewogCQlbTFA4NzIwXSA9IExQODcyMF9OVU1fUkVHVUxBVE9SUywKIAkJW0xQODcyNV0gPSBMUDg3MjVfTlVNX1JFR1VMQVRPUlMsCkBAIC05MTgsMzggKzkxNSwyNyBAQAogCiAJbHAgPSBkZXZtX2t6YWxsb2MoJmNsLT5kZXYsIHNpemVvZihzdHJ1Y3QgbHA4NzJ4KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFscCkKLQkJZ290byBlcnJfbWVtOworCQlyZXR1cm4gLUVOT01FTTsKIAotCW51bV9yZWd1bGF0b3JzID0gbHA4NzJ4X251bV9yZWd1bGF0b3JzW2lkLT5kcml2ZXJfZGF0YV07Ci0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKSAqIG51bV9yZWd1bGF0b3JzOwotCi0JbHAtPnJlZ3VsYXRvcnMgPSBkZXZtX2t6YWxsb2MoJmNsLT5kZXYsIHNpemUsIEdGUF9LRVJORUwpOwotCWlmICghbHAtPnJlZ3VsYXRvcnMpCi0JCWdvdG8gZXJyX21lbTsKKwlscC0+bnVtX3JlZ3VsYXRvcnMgPSBscDg3MnhfbnVtX3JlZ3VsYXRvcnNbaWQtPmRyaXZlcl9kYXRhXTsKIAogCWxwLT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhjbCwgJmxwODcyeF9yZWdtYXBfY29uZmlnKTsKIAlpZiAoSVNfRVJSKGxwLT5yZWdtYXApKSB7CiAJCXJldCA9IFBUUl9FUlIobHAtPnJlZ21hcCk7CiAJCWRldl9lcnIoJmNsLT5kZXYsICJyZWdtYXAgaW5pdCBpMmMgZXJyOiAlZFxuIiwgcmV0KTsKLQkJZ290byBlcnJfZGV2OworCQlyZXR1cm4gcmV0OwogCX0KIAogCWxwLT5kZXYgPSAmY2wtPmRldjsKIAlscC0+cGRhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZjbC0+ZGV2KTsKIAlscC0+Y2hpcGlkID0gaWQtPmRyaXZlcl9kYXRhOwotCWxwLT5udW1fcmVndWxhdG9ycyA9IG51bV9yZWd1bGF0b3JzOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbCwgbHApOwogCiAJcmV0ID0gbHA4NzJ4X2NvbmZpZyhscCk7CiAJaWYgKHJldCkKLQkJZ290byBlcnJfZGV2OworCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIGxwODcyeF9yZWd1bGF0b3JfcmVnaXN0ZXIobHApOwotCi1lcnJfbWVtOgotCXJldHVybiAtRU5PTUVNOwotZXJyX2RldjoKLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBscDg3MnhfZHRfaWRzW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXgxNDU3Ny5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4MTQ1NzcuYwppbmRleCBiZjlhNDRjLi5iMzY3OGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXgxNDU3Ny5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDE0NTc3LmMKQEAgLTEwMyw2ICsxMDMsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyBtYXgxNDU3N19zdXBwb3J0ZWRfcmVndWxhdG9yc1tdID0gewogCVtNQVgxNDU3N19TQUZFT1VUXSA9IHsKIAkJLm5hbWUJCT0gIlNBRkVPVVQiLAorCQkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIlNBRkVPVVQiKSwKKwkJLnJlZ3VsYXRvcnNfbm9kZSA9IG9mX21hdGNoX3B0cigicmVndWxhdG9ycyIpLAogCQkuaWQJCT0gTUFYMTQ1NzdfU0FGRU9VVCwKIAkJLm9wcwkJPSAmbWF4MTQ1Nzdfc2FmZW91dF9vcHMsCiAJCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLApAQCAtMTE0LDYgKzExNiw4IEBACiAJfSwKIAlbTUFYMTQ1NzdfQ0hBUkdFUl0gPSB7CiAJCS5uYW1lCQk9ICJDSEFSR0VSIiwKKwkJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJDSEFSR0VSIiksCisJCS5yZWd1bGF0b3JzX25vZGUgPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwKIAkJLmlkCQk9IE1BWDE0NTc3X0NIQVJHRVIsCiAJCS5vcHMJCT0gJm1heDE0NTc3X2NoYXJnZXJfb3BzLAogCQkudHlwZQkJPSBSRUdVTEFUT1JfQ1VSUkVOVCwKQEAgLTEzNyw2ICsxNDEsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyBtYXg3NzgzNl9zdXBwb3J0ZWRfcmVndWxhdG9yc1tdID0gewogCVtNQVgxNDU3N19TQUZFT1VUXSA9IHsKIAkJLm5hbWUJCT0gIlNBRkVPVVQiLAorCQkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIlNBRkVPVVQiKSwKKwkJLnJlZ3VsYXRvcnNfbm9kZSA9IG9mX21hdGNoX3B0cigicmVndWxhdG9ycyIpLAogCQkuaWQJCT0gTUFYMTQ1NzdfU0FGRU9VVCwKIAkJLm9wcwkJPSAmbWF4MTQ1Nzdfc2FmZW91dF9vcHMsCiAJCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLApAQCAtMTQ4LDYgKzE1NCw4IEBACiAJfSwKIAlbTUFYMTQ1NzdfQ0hBUkdFUl0gPSB7CiAJCS5uYW1lCQk9ICJDSEFSR0VSIiwKKwkJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJDSEFSR0VSIiksCisJCS5yZWd1bGF0b3JzX25vZGUgPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwKIAkJLmlkCQk9IE1BWDE0NTc3X0NIQVJHRVIsCiAJCS5vcHMJCT0gJm1heDE0NTc3X2NoYXJnZXJfb3BzLAogCQkudHlwZQkJPSBSRUdVTEFUT1JfQ1VSUkVOVCwKQEAgLTE1Nyw2ICsxNjUsOCBAQAogCX0sCiAJW01BWDc3ODM2X0xETzFdID0gewogCQkubmFtZQkJPSAiTERPMSIsCisJCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiTERPMSIpLAorCQkucmVndWxhdG9yc19ub2RlID0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCiAJCS5pZAkJPSBNQVg3NzgzNl9MRE8xLAogCQkub3BzCQk9ICZtYXg3NzgzNl9sZG9fb3BzLAogCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwKQEAgLTE3MSw2ICsxODEsOCBAQAogCX0sCiAJW01BWDc3ODM2X0xETzJdID0gewogCQkubmFtZQkJPSAiTERPMiIsCisJCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiTERPMiIpLAorCQkucmVndWxhdG9yc19ub2RlID0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCiAJCS5pZAkJPSBNQVg3NzgzNl9MRE8yLAogCQkub3BzCQk9ICZtYXg3NzgzNl9sZG9fb3BzLAogCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwKQEAgLTE5OCw0MyArMjEwLDYgQEAKIAl7IC5uYW1lID0gIkxETzIiLCB9LAogfTsKIAotc3RhdGljIGludCBtYXgxNDU3N19yZWd1bGF0b3JfZHRfcGFyc2VfcGRhdGEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJZW51bSBtYXhpbV9kZXZpY2VfdHlwZSBkZXZfdHlwZSkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0Jc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCAqcmVndWxhdG9yX21hdGNoZXM7Ci0JdW5zaWduZWQgaW50IHJlZ3VsYXRvcl9tYXRjaGVzX3NpemU7Ci0KLQlucCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKHBkZXYtPmRldi5wYXJlbnQtPm9mX25vZGUsICJyZWd1bGF0b3JzIik7Ci0JaWYgKCFucCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGNoaWxkIE9GIG5vZGUgZm9yIHJlZ3VsYXRvcnNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzd2l0Y2ggKGRldl90eXBlKSB7Ci0JY2FzZSBNQVhJTV9ERVZJQ0VfVFlQRV9NQVg3NzgzNjoKLQkJcmVndWxhdG9yX21hdGNoZXMgPSBtYXg3NzgzNl9yZWd1bGF0b3JfbWF0Y2hlczsKLQkJcmVndWxhdG9yX21hdGNoZXNfc2l6ZSA9IEFSUkFZX1NJWkUobWF4Nzc4MzZfcmVndWxhdG9yX21hdGNoZXMpOwotCQlicmVhazsKLQljYXNlIE1BWElNX0RFVklDRV9UWVBFX01BWDE0NTc3OgotCWRlZmF1bHQ6Ci0JCXJlZ3VsYXRvcl9tYXRjaGVzID0gbWF4MTQ1NzdfcmVndWxhdG9yX21hdGNoZXM7Ci0JCXJlZ3VsYXRvcl9tYXRjaGVzX3NpemUgPSBBUlJBWV9TSVpFKG1heDE0NTc3X3JlZ3VsYXRvcl9tYXRjaGVzKTsKLQl9Ci0KLQlyZXQgPSBvZl9yZWd1bGF0b3JfbWF0Y2goJnBkZXYtPmRldiwgbnAsIHJlZ3VsYXRvcl9tYXRjaGVzLAotCQkJcmVndWxhdG9yX21hdGNoZXNfc2l6ZSk7Ci0JaWYgKHJldCA8IDApCi0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIHBhcnNpbmcgcmVndWxhdG9yIGluaXQgZGF0YTogJWRcbiIsIHJldCk7Ci0JZWxzZQotCQlyZXQgPSAwOwotCi0Jb2Zfbm9kZV9wdXQobnApOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqbWF0Y2hfaW5pdF9kYXRhKGludCBpbmRleCwKIAkJZW51bSBtYXhpbV9kZXZpY2VfdHlwZSBkZXZfdHlwZSkKIHsKQEAgLTI2MSwxMSArMjM2LDYgQEAKIAl9CiB9CiAjZWxzZSAvKiBDT05GSUdfT0YgKi8KLXN0YXRpYyBpbnQgbWF4MTQ1NzdfcmVndWxhdG9yX2R0X3BhcnNlX3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCWVudW0gbWF4aW1fZGV2aWNlX3R5cGUgZGV2X3R5cGUpCi17Ci0JcmV0dXJuIDA7Ci19CiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICptYXRjaF9pbml0X2RhdGEoaW50IGluZGV4LAogCQllbnVtIG1heGltX2RldmljZV90eXBlIGRldl90eXBlKQogewpAQCAtMzA4LDE2ICsyNzgsMTIgQEAKIHsKIAlzdHJ1Y3QgbWF4MTQ1NzcgKm1heDE0NTc3ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBtYXgxNDU3N19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEobWF4MTQ1NzctPmRldik7Ci0JaW50IGksIHJldDsKKwlpbnQgaSwgcmV0ID0gMDsKIAlzdHJ1Y3QgcmVndWxhdG9yX2NvbmZpZyBjb25maWcgPSB7fTsKIAljb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgKnN1cHBvcnRlZF9yZWd1bGF0b3JzOwogCXVuc2lnbmVkIGludCBzdXBwb3J0ZWRfcmVndWxhdG9yc19zaXplOwogCWVudW0gbWF4aW1fZGV2aWNlX3R5cGUgZGV2X3R5cGUgPSBtYXgxNDU3Ny0+ZGV2X3R5cGU7CiAKLQlyZXQgPSBtYXgxNDU3N19yZWd1bGF0b3JfZHRfcGFyc2VfcGRhdGEocGRldiwgZGV2X3R5cGUpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KIAlzd2l0Y2ggKGRldl90eXBlKSB7CiAJY2FzZSBNQVhJTV9ERVZJQ0VfVFlQRV9NQVg3NzgzNjoKIAkJc3VwcG9ydGVkX3JlZ3VsYXRvcnMgPSBtYXg3NzgzNl9zdXBwb3J0ZWRfcmVndWxhdG9yczsKQEAgLTMyOSw3ICsyOTUsNyBAQAogCQlzdXBwb3J0ZWRfcmVndWxhdG9yc19zaXplID0gQVJSQVlfU0laRShtYXgxNDU3N19zdXBwb3J0ZWRfcmVndWxhdG9ycyk7CiAJfQogCi0JY29uZmlnLmRldiA9ICZwZGV2LT5kZXY7CisJY29uZmlnLmRldiA9IG1heDE0NTc3LT5kZXY7CiAJY29uZmlnLmRyaXZlcl9kYXRhID0gbWF4MTQ1Nzc7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3VwcG9ydGVkX3JlZ3VsYXRvcnNfc2l6ZTsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzY4Ni5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4Nzc2ODYuYwppbmRleCAxMGQyMDYyLi4xNWZiMTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg3NzY4Ni5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDc3Njg2LmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CkBAIC00Niw2ICs0NywxMSBAQAogI2RlZmluZSBNQVg3NzY4Nl9EVlNfVVZTVEVQCTEyNTAwCiAKIC8qCisgKiBWYWx1ZSBmb3IgY29uZmlndXJpbmcgYnVja1s4OV0gYW5kIExET3syMCwyMSwyMn0gYXMgR1BJTyBjb250cm9sLgorICogSXQgaXMgdGhlIHNhbWUgYXMgJ29mZicgZm9yIG90aGVyIHJlZ3VsYXRvcnMuCisgKi8KKyNkZWZpbmUgTUFYNzc2ODZfR1BJT19DT05UUk9MCQkweDAKKy8qCiAgKiBWYWx1ZXMgdXNlZCBmb3IgY29uZmlndXJpbmcgTERPcyBhbmQgYnVja3MuCiAgKiBGb3JjaW5nIGxvdyBwb3dlciBtb2RlOiBMRE8xLCAzLTUsIDksIDEzLCAxNy0yNgogICovCkBAIC04Miw2ICs4OCw4IEBACiB9OwogCiBzdHJ1Y3QgbWF4Nzc2ODZfZGF0YSB7CisJdTY0IGdwaW9fZW5hYmxlZDpNQVg3NzY4Nl9SRUdVTEFUT1JTOworCiAJLyogQXJyYXkgaW5kZXhlZCBieSByZWd1bGF0b3IgaWQgKi8KIAl1bnNpZ25lZCBpbnQgb3Btb2RlW01BWDc3Njg2X1JFR1VMQVRPUlNdOwogfTsKQEAgLTEwMCw2ICsxMDgsMjYgQEAKIAl9CiB9CiAKKy8qCisgKiBXaGVuIHJlZ3VsYXRvciBpcyBjb25maWd1cmVkIGZvciBHUElPIGNvbnRyb2wgdGhlbiBpdAorICogcmVwbGFjZXMgIm5vcm1hbCIgbW9kZS4gQW55IGNoYW5nZSBmcm9tIGxvdyBwb3dlciBtb2RlIHRvIG5vcm1hbAorICogc2hvdWxkIGFjdHVhbGx5IGNoYW5nZSB0byBHUElPIGNvbnRyb2wuCisgKiBNYXAgbm9ybWFsIG1vZGUgdG8gcHJvcGVyIHZhbHVlIGZvciBzdWNoIHJlZ3VsYXRvcnMuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWF4Nzc2ODZfbWFwX25vcm1hbF9tb2RlKHN0cnVjdCBtYXg3NzY4Nl9kYXRhICptYXg3NzY4NiwKKwkJCQkJICAgICBpbnQgaWQpCit7CisJc3dpdGNoIChpZCkgeworCWNhc2UgTUFYNzc2ODZfQlVDSzg6CisJY2FzZSBNQVg3NzY4Nl9CVUNLOToKKwljYXNlIE1BWDc3Njg2X0xETzIwIC4uLiBNQVg3NzY4Nl9MRE8yMjoKKwkJaWYgKG1heDc3Njg2LT5ncGlvX2VuYWJsZWQgJiAoMSA8PCBpZCkpCisJCQlyZXR1cm4gTUFYNzc2ODZfR1BJT19DT05UUk9MOworCX0KKworCXJldHVybiBNQVg3NzY4Nl9OT1JNQUw7Cit9CisKIC8qIFNvbWUgQlVDS3MgYW5kIExET3Mgc3VwcG9ydHMgTm9ybWFsW09OL09GRl0gbW9kZSBkdXJpbmcgc3VzcGVuZCAqLwogc3RhdGljIGludCBtYXg3NzY4Nl9zZXRfc3VzcGVuZF9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewpAQCAtMTM2LDcgKzE2NCw3IEBACiAJCXZhbCA9IE1BWDc3Njg2X0xET19MT1dQT1dFUl9QV1JSRVE7CiAJCWJyZWFrOwogCWNhc2UgUkVHVUxBVE9SX01PREVfTk9STUFMOgkJCS8qIE9OIGluIE5vcm1hbCBNb2RlICovCi0JCXZhbCA9IE1BWDc3Njg2X05PUk1BTDsKKwkJdmFsID0gbWF4Nzc2ODZfbWFwX25vcm1hbF9tb2RlKG1heDc3Njg2LCBpZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX3dhcm4oIiVzOiByZWd1bGF0b3Jfc3VzcGVuZF9tb2RlIDogMHgleCBub3Qgc3VwcG9ydGVkXG4iLApAQCAtMTYwLDcgKzE4OCw3IEBACiB7CiAJdW5zaWduZWQgaW50IHZhbDsKIAlzdHJ1Y3QgbWF4Nzc2ODZfZGF0YSAqbWF4Nzc2ODYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCWludCByZXQ7CisJaW50IHJldCwgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgUkVHVUxBVE9SX01PREVfU1RBTkRCWToJCQkvKiBzd2l0Y2ggb2ZmICovCkBAIC0xNzAsNyArMTk4LDcgQEAKIAkJdmFsID0gTUFYNzc2ODZfTERPX0xPV1BPV0VSX1BXUlJFUTsKIAkJYnJlYWs7CiAJY2FzZSBSRUdVTEFUT1JfTU9ERV9OT1JNQUw6CQkJLyogT04gaW4gTm9ybWFsIE1vZGUgKi8KLQkJdmFsID0gTUFYNzc2ODZfTk9STUFMOworCQl2YWwgPSBtYXg3NzY4Nl9tYXBfbm9ybWFsX21vZGUobWF4Nzc2ODYsIGlkKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfd2FybigiJXM6IHJlZ3VsYXRvcl9zdXNwZW5kX21vZGUgOiAweCV4IG5vdCBzdXBwb3J0ZWRcbiIsCkBAIC0xODQsNyArMjEyLDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbWF4Nzc2ODYtPm9wbW9kZVtyZGV2X2dldF9pZChyZGV2KV0gPSB2YWw7CisJbWF4Nzc2ODYtPm9wbW9kZVtpZF0gPSB2YWw7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5Nyw3ICsyMjUsNyBAQAogCXNoaWZ0ID0gbWF4Nzc2ODZfZ2V0X29wbW9kZV9zaGlmdChpZCk7CiAKIAlpZiAobWF4Nzc2ODYtPm9wbW9kZVtpZF0gPT0gTUFYNzc2ODZfT0ZGX1BXUlJFUSkKLQkJbWF4Nzc2ODYtPm9wbW9kZVtpZF0gPSBNQVg3NzY4Nl9OT1JNQUw7CisJCW1heDc3Njg2LT5vcG1vZGVbaWRdID0gbWF4Nzc2ODZfbWFwX25vcm1hbF9tb2RlKG1heDc3Njg2LCBpZCk7CiAKIAlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKHJkZXYtPnJlZ21hcCwgcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZywKIAkJCQkgIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrLApAQCAtMjI5LDYgKzI1NywzNiBAQAogCQkJCSAgTUFYNzc2ODZfUkFNUF9SQVRFX01BU0ssIHJhbXBfdmFsdWUgPDwgNik7CiB9CiAKK3N0YXRpYyBpbnQgbWF4Nzc2ODZfb2ZfcGFyc2VfY2Ioc3RydWN0IGRldmljZV9ub2RlICpucCwKKwkJY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICpkZXNjLAorCQlzdHJ1Y3QgcmVndWxhdG9yX2NvbmZpZyAqY29uZmlnKQoreworCXN0cnVjdCBtYXg3NzY4Nl9kYXRhICptYXg3NzY4NiA9IGNvbmZpZy0+ZHJpdmVyX2RhdGE7CisKKwlzd2l0Y2ggKGRlc2MtPmlkKSB7CisJY2FzZSBNQVg3NzY4Nl9CVUNLODoKKwljYXNlIE1BWDc3Njg2X0JVQ0s5OgorCWNhc2UgTUFYNzc2ODZfTERPMjAgLi4uIE1BWDc3Njg2X0xETzIyOgorCQljb25maWctPmVuYV9ncGlvID0gb2ZfZ2V0X25hbWVkX2dwaW8obnAsCisJCQkJCSJtYXhpbSxlbmEtZ3Bpb3MiLCAwKTsKKwkJY29uZmlnLT5lbmFfZ3Bpb19mbGFncyA9IEdQSU9GX09VVF9JTklUX0hJR0g7CisJCWNvbmZpZy0+ZW5hX2dwaW9faW5pdGlhbGl6ZWQgPSB0cnVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZ3Bpb19pc192YWxpZChjb25maWctPmVuYV9ncGlvKSkgeworCQltYXg3NzY4Ni0+Z3Bpb19lbmFibGVkIHw9ICgxIDw8IGRlc2MtPmlkKTsKKworCQlyZXR1cm4gcmVnbWFwX3VwZGF0ZV9iaXRzKGNvbmZpZy0+cmVnbWFwLCBkZXNjLT5lbmFibGVfcmVnLAorCQkJCQkgIGRlc2MtPmVuYWJsZV9tYXNrLAorCQkJCQkgIE1BWDc3Njg2X0dQSU9fQ09OVFJPTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYXg3NzY4Nl9vcHMgPSB7CiAJLmxpc3Rfdm9sdGFnZQkJPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX2xpbmVhciwKIAkubWFwX3ZvbHRhZ2UJCT0gcmVndWxhdG9yX21hcF92b2x0YWdlX2xpbmVhciwKQEAgLTI4Myw2ICszNDEsNyBAQAogCS5uYW1lCQk9ICJMRE8iI251bSwJCQkJCVwKIAkub2ZfbWF0Y2gJPSBvZl9tYXRjaF9wdHIoIkxETyIjbnVtKSwJCQlcCiAJLnJlZ3VsYXRvcnNfbm9kZQk9IG9mX21hdGNoX3B0cigidm9sdGFnZS1yZWd1bGF0b3JzIiksCVwKKwkub2ZfcGFyc2VfY2IJPSBtYXg3NzY4Nl9vZl9wYXJzZV9jYiwJCQkJXAogCS5pZAkJPSBNQVg3NzY4Nl9MRE8jI251bSwJCQkJXAogCS5vcHMJCT0gJm1heDc3Njg2X29wcywJCQkJXAogCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCQlcCkBAIC0zNTUsNiArNDE0LDcgQEAKIAkubmFtZQkJPSAiQlVDSyIjbnVtLAkJCQkJXAogCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiQlVDSyIjbnVtKSwJCQlcCiAJLnJlZ3VsYXRvcnNfbm9kZQk9IG9mX21hdGNoX3B0cigidm9sdGFnZS1yZWd1bGF0b3JzIiksCVwKKwkub2ZfcGFyc2VfY2IJPSBtYXg3NzY4Nl9vZl9wYXJzZV9jYiwJCQkJXAogCS5pZAkJPSBNQVg3NzY4Nl9CVUNLIyNudW0sCQkJCVwKIAkub3BzCQk9ICZtYXg3NzY4Nl9vcHMsCQkJCVwKIAkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4Nzc4NDMuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDc3ODQzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzMmVmNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDc3ODQzLmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKiBtYXg3Nzg0My5jIC0gUmVndWxhdG9yIGRyaXZlciBmb3IgdGhlIE1heGltIE1BWDc3ODQzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIEF1dGhvcjogSmFld29uIEtpbSA8amFld29uMDIua2ltQHNhbXN1bmcuY29tPgorICogQXV0aG9yOiBCZW9taG8gU2VvIDxiZW9taG8uc2VvQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9tYXg3Nzg0My1wcml2YXRlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5oPgorCitlbnVtIG1heDc3ODQzX3JlZ3VsYXRvcl90eXBlIHsKKwlNQVg3Nzg0M19TQUZFT1VUMSA9IDAsCisJTUFYNzc4NDNfU0FGRU9VVDIsCisJTUFYNzc4NDNfQ0hBUkdFUiwKKworCU1BWDc3ODQzX05VTSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWF4Nzc4NDNfc2FmZW91dF92b2x0YWdlX3RhYmxlW10gPSB7CisJNDg1MDAwMCwKKwk0OTAwMDAwLAorCTQ5NTAwMDAsCisJMzMwMDAwMCwKK307CisKK3N0YXRpYyBpbnQgbWF4Nzc4NDNfcmVnX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gcmRldi0+cmVnbWFwOworCWludCByZXQ7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJldCA9IHJlZ21hcF9yZWFkKHJlZ21hcCwgcmRldi0+ZGVzYy0+ZW5hYmxlX3JlZywgJnJlZyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZyZGV2LT5kZXYsICJGaWFsZWQgdG8gcmVhZCBjaGFyZ2VyIHJlZ2lzdGVyXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gKHJlZyAmIHJkZXYtPmRlc2MtPmVuYWJsZV9tYXNrKSA9PSByZGV2LT5kZXNjLT5lbmFibGVfbWFzazsKK30KKworc3RhdGljIGludCBtYXg3Nzg0M19yZWdfZ2V0X2N1cnJlbnRfbGltaXQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gcmRldi0+cmVnbWFwOworCXVuc2lnbmVkIGludCBjaGdfbWluX3VBID0gcmRldi0+Y29uc3RyYWludHMtPm1pbl91QTsKKwl1bnNpZ25lZCBpbnQgY2hnX21heF91QSA9IHJkZXYtPmNvbnN0cmFpbnRzLT5tYXhfdUE7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCByZWcsIHNlbDsKKworCXJldCA9IHJlZ21hcF9yZWFkKHJlZ21hcCwgTUFYNzc4NDNfQ0hHX1JFR19DSEdfQ05GR18wMiwgJnJlZyk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZyZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBjaGFyZ2VyIHJlZ2lzdGVyXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzZWwgPSByZWcgJiBNQVg3Nzg0M19DSEdfRkFTVF9DSEdfQ1VSUkVOVF9NQVNLOworCisJaWYgKHNlbCA8IDB4MDMpCisJCXNlbCA9IDA7CisJZWxzZQorCQlzZWwgLT0gMjsKKworCXZhbCA9IGNoZ19taW5fdUEgKyBNQVg3Nzg0M19DSEdfRkFTVF9DSEdfQ1VSUkVOVF9TVEVQICogc2VsOworCWlmICh2YWwgPiBjaGdfbWF4X3VBKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbnQgbWF4Nzc4NDNfcmVnX3NldF9jdXJyZW50X2xpbWl0KHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQlpbnQgbWluX3VBLCBpbnQgbWF4X3VBKQoreworCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IHJkZXYtPnJlZ21hcDsKKwl1bnNpZ25lZCBpbnQgY2hnX21pbl91QSA9IHJkZXYtPmNvbnN0cmFpbnRzLT5taW5fdUE7CisJaW50IHNlbCA9IDA7CisKKwl3aGlsZSAoY2hnX21pbl91QSArIE1BWDc3ODQzX0NIR19GQVNUX0NIR19DVVJSRU5UX1NURVAgKiBzZWwgPCBtaW5fdUEpCisJCXNlbCsrOworCisJaWYgKGNoZ19taW5fdUEgKyBNQVg3Nzg0M19DSEdfRkFTVF9DSEdfQ1VSUkVOVF9TVEVQICogc2VsID4gbWF4X3VBKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNlbCArPSAyOworCisJcmV0dXJuIHJlZ21hcF93cml0ZShyZWdtYXAsIE1BWDc3ODQzX0NIR19SRUdfQ0hHX0NORkdfMDIsIHNlbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYXg3Nzg0M19jaGFyZ2VyX29wcyA9IHsKKwkuaXNfZW5hYmxlZAkJPSBtYXg3Nzg0M19yZWdfaXNfZW5hYmxlZCwKKwkuZW5hYmxlCQkJPSByZWd1bGF0b3JfZW5hYmxlX3JlZ21hcCwKKwkuZGlzYWJsZQkJPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCisJLmdldF9jdXJyZW50X2xpbWl0CT0gbWF4Nzc4NDNfcmVnX2dldF9jdXJyZW50X2xpbWl0LAorCS5zZXRfY3VycmVudF9saW1pdAk9IG1heDc3ODQzX3JlZ19zZXRfY3VycmVudF9saW1pdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYXg3Nzg0M19yZWd1bGF0b3Jfb3BzID0geworCS5pc19lbmFibGVkICAgICAgICAgICAgID0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAorCS5lbmFibGUgICAgICAgICAgICAgICAgID0gcmVndWxhdG9yX2VuYWJsZV9yZWdtYXAsCisJLmRpc2FibGUgICAgICAgICAgICAgICAgPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCisJLmxpc3Rfdm9sdGFnZQkJPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX3RhYmxlLAorCS5nZXRfdm9sdGFnZV9zZWwgICAgICAgID0gcmVndWxhdG9yX2dldF92b2x0YWdlX3NlbF9yZWdtYXAsCisJLnNldF92b2x0YWdlX3NlbCAgICAgICAgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgbWF4Nzc4NDNfc3VwcG9ydGVkX3JlZ3VsYXRvcnNbXSA9IHsKKwlbTUFYNzc4NDNfU0FGRU9VVDFdID0geworCQkubmFtZQkJPSAiU0FGRU9VVDEiLAorCQkuaWQJCT0gTUFYNzc4NDNfU0FGRU9VVDEsCisJCS5vcHMJCT0gJm1heDc3ODQzX3JlZ3VsYXRvcl9vcHMsCisJCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiU0FGRU9VVDEiKSwKKwkJLnJlZ3VsYXRvcnNfbm9kZSA9IG9mX21hdGNoX3B0cigicmVndWxhdG9ycyIpLAorCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkubl92b2x0YWdlcwk9IEFSUkFZX1NJWkUobWF4Nzc4NDNfc2FmZW91dF92b2x0YWdlX3RhYmxlKSwKKwkJLnZvbHRfdGFibGUJPSBtYXg3Nzg0M19zYWZlb3V0X3ZvbHRhZ2VfdGFibGUsCisJCS5lbmFibGVfcmVnCT0gTUFYNzc4NDNfU1lTX1JFR19TQUZFT1VUQ1RSTCwKKwkJLmVuYWJsZV9tYXNrCT0gTUFYNzc4NDNfUkVHX1NBRkVPVVRDVFJMX0VOU0FGRU9VVDEsCisJCS52c2VsX3JlZwk9IE1BWDc3ODQzX1NZU19SRUdfU0FGRU9VVENUUkwsCisJCS52c2VsX21hc2sJPSBNQVg3Nzg0M19SRUdfU0FGRU9VVENUUkxfU0FGRU9VVDFfTUFTSywKKwl9LAorCVtNQVg3Nzg0M19TQUZFT1VUMl0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJTQUZFT1VUMiIsCisJCS5pZCAgICAgICAgICAgICA9IE1BWDc3ODQzX1NBRkVPVVQyLAorCQkub3BzICAgICAgICAgICAgPSAmbWF4Nzc4NDNfcmVndWxhdG9yX29wcywKKwkJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJTQUZFT1VUMiIpLAorCQkucmVndWxhdG9yc19ub2RlID0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCisJCS50eXBlICAgICAgICAgICA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKKwkJLm5fdm9sdGFnZXMJPSBBUlJBWV9TSVpFKG1heDc3ODQzX3NhZmVvdXRfdm9sdGFnZV90YWJsZSksCisJCS52b2x0X3RhYmxlCT0gbWF4Nzc4NDNfc2FmZW91dF92b2x0YWdlX3RhYmxlLAorCQkuZW5hYmxlX3JlZyAgICAgPSBNQVg3Nzg0M19TWVNfUkVHX1NBRkVPVVRDVFJMLAorCQkuZW5hYmxlX21hc2sgICAgPSBNQVg3Nzg0M19SRUdfU0FGRU9VVENUUkxfRU5TQUZFT1VUMiwKKwkJLnZzZWxfcmVnCT0gTUFYNzc4NDNfU1lTX1JFR19TQUZFT1VUQ1RSTCwKKwkJLnZzZWxfbWFzawk9IE1BWDc3ODQzX1JFR19TQUZFT1VUQ1RSTF9TQUZFT1VUMl9NQVNLLAorCX0sCisJW01BWDc3ODQzX0NIQVJHRVJdID0geworCQkubmFtZQkJPSAiQ0hBUkdFUiIsCisJCS5pZAkJPSBNQVg3Nzg0M19DSEFSR0VSLAorCQkub3BzCQk9ICZtYXg3Nzg0M19jaGFyZ2VyX29wcywKKwkJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJDSEFSR0VSIiksCisJCS5yZWd1bGF0b3JzX25vZGUgPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwKKwkJLnR5cGUJCT0gUkVHVUxBVE9SX0NVUlJFTlQsCisJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkJLmVuYWJsZV9yZWcJPSBNQVg3Nzg0M19DSEdfUkVHX0NIR19DTkZHXzAwLAorCQkuZW5hYmxlX21hc2sJPSBNQVg3Nzg0M19DSEdfTUFTSywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWdtYXAgKm1heDc3ODQzX2dldF9yZWdtYXAoc3RydWN0IG1heDc3ODQzICptYXg3Nzg0MywgaW50IHJlZ19pZCkKK3sKKwlzd2l0Y2ggKHJlZ19pZCkgeworCWNhc2UgTUFYNzc4NDNfU0FGRU9VVDE6CisJY2FzZSBNQVg3Nzg0M19TQUZFT1VUMjoKKwkJcmV0dXJuIG1heDc3ODQzLT5yZWdtYXA7CisJY2FzZSBNQVg3Nzg0M19DSEFSR0VSOgorCQlyZXR1cm4gbWF4Nzc4NDMtPnJlZ21hcF9jaGc7CisJZGVmYXVsdDoKKwkJcmV0dXJuIG1heDc3ODQzLT5yZWdtYXA7CisJfQorfQorCitzdGF0aWMgaW50IG1heDc3ODQzX3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtYXg3Nzg0MyAqbWF4Nzc4NDMgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgY29uZmlnID0ge307CisJaW50IGk7CisKKwljb25maWcuZGV2ID0gbWF4Nzc4NDMtPmRldjsKKwljb25maWcuZHJpdmVyX2RhdGEgPSBtYXg3Nzg0MzsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1heDc3ODQzX3N1cHBvcnRlZF9yZWd1bGF0b3JzKTsgaSsrKSB7CisJCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZWd1bGF0b3I7CisKKwkJY29uZmlnLnJlZ21hcCA9IG1heDc3ODQzX2dldF9yZWdtYXAobWF4Nzc4NDMsCisJCQkJbWF4Nzc4NDNfc3VwcG9ydGVkX3JlZ3VsYXRvcnNbaV0uaWQpOworCisJCXJlZ3VsYXRvciA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKCZwZGV2LT5kZXYsCisJCQkJJm1heDc3ODQzX3N1cHBvcnRlZF9yZWd1bGF0b3JzW2ldLCAmY29uZmlnKTsKKwkJaWYgKElTX0VSUihyZWd1bGF0b3IpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJCSJGYWlsZWQgdG8gcmVnaXNlciByZWd1bGF0b3ItJWRcbiIsIGkpOworCQkJcmV0dXJuIFBUUl9FUlIocmVndWxhdG9yKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCBtYXg3Nzg0M19yZWd1bGF0b3JfaWRbXSA9IHsKKwl7ICJtYXg3Nzg0My1yZWd1bGF0b3IiLCB9LAorCXsgLyogc2VudGluZWwgKi8gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1heDc3ODQzX3JlZ3VsYXRvcl9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUgPSAibWF4Nzc4NDMtcmVndWxhdG9yIiwKKwl9LAorCS5wcm9iZQkJPSBtYXg3Nzg0M19yZWd1bGF0b3JfcHJvYmUsCisJLmlkX3RhYmxlCT0gbWF4Nzc4NDNfcmVndWxhdG9yX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWF4Nzc4NDNfcmVndWxhdG9yX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYXg3Nzg0M19yZWd1bGF0b3JfZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbChtYXg3Nzg0M19yZWd1bGF0b3JfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtYXg3Nzg0M19yZWd1bGF0b3JfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYXg3Nzg0M19yZWd1bGF0b3JfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1heDc3ODQzX3JlZ3VsYXRvcl9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSmFld29uIEtpbSA8amFld29uMDIua2ltQHNhbXN1bmcuY29tPiIpOworTU9EVUxFX0FVVEhPUigiQmVvbWhvIFNlbyA8YmVvbWhvLnNlb0BzYW1zdW5nLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWF4aW0gTUFYNzc4NDMgcmVndWxhdG9yIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODY0OS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODY0OS5jCmluZGV4IGM4YmRkY2MuLjgxMjI5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NDkuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4NjQ5LmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCXJldHVybiBSRUdVTEFUT1JfTU9ERV9OT1JNQUw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYXg4NjQ5X2RjZGNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1heDg2NDlfZGNkY19vcHMgPSB7CiAJLnNldF92b2x0YWdlX3NlbCA9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAogCS5nZXRfdm9sdGFnZV9zZWwgPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKIAkubGlzdF92b2x0YWdlCT0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZV9saW5lYXIsCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkuZW5hYmxlX2lzX2ludmVydGVkID0gdHJ1ZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBtYXg4NjQ5X3JlZ21hcF9jb25maWcgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbWF4ODY0OV9yZWdtYXBfY29uZmlnID0gewogCS5yZWdfYml0cyA9IDgsCiAJLnZhbF9iaXRzID0gOCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tdDYzOTctcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tdDYzOTctcmVndWxhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTViMmY0NzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tdDYzOTctcmVndWxhdG9yLmMKQEAgLTAsMCArMSwzMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBGbG9yYSBGdSA8ZmxvcmEuZnVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbXQ2Mzk3L2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbXQ2Mzk3L3JlZ2lzdGVycy5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tdDYzOTctcmVndWxhdG9yLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5oPgorCisvKgorICogTVQ2Mzk3IHJlZ3VsYXRvcnMnIGluZm9ybWF0aW9uCisgKgorICogQGRlc2M6IHN0YW5kYXJkIGZpZWxkcyBvZiByZWd1bGF0b3IgZGVzY3JpcHRpb24uCisgKiBAcWk6IE1hc2sgZm9yIHF1ZXJ5IGVuYWJsZSBzaWduYWwgc3RhdHVzIG9mIHJlZ3VsYXRvcnMKKyAqIEB2c2Vsb25fcmVnOiBSZWdpc3RlciBzZWN0aW9ucyBmb3IgaGFyZHdhcmUgY29udHJvbCBtb2RlIG9mIGJ1Y2tzCisgKiBAdnNlbGN0cmxfcmVnOiBSZWdpc3RlciBmb3IgY29udHJvbGxpbmcgdGhlIGJ1Y2sgY29udHJvbCBtb2RlLgorICogQHZzZWxjdHJsX21hc2s6IE1hc2sgZm9yIHF1ZXJ5IGJ1Y2sncyB2b2x0YWdlIGNvbnRyb2wgbW9kZS4KKyAqLworc3RydWN0IG10NjM5N19yZWd1bGF0b3JfaW5mbyB7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2M7CisJdTMyIHFpOworCXUzMiB2c2Vsb25fcmVnOworCXUzMiB2c2VsY3RybF9yZWc7CisJdTMyIHZzZWxjdHJsX21hc2s7Cit9OworCisjZGVmaW5lIE1UNjM5N19CVUNLKG1hdGNoLCB2cmVnLCBtaW4sIG1heCwgc3RlcCwgdm9sdF9yYW5nZXMsIGVucmVnLAlcCisJCXZvc2VsLCB2b3NlbF9tYXNrLCB2b3NlbG9uLCB2b3NlbF9jdHJsKQkJCVwKK1tNVDYzOTdfSURfIyN2cmVnXSA9IHsJCQkJCQkJXAorCS5kZXNjID0gewkJCQkJCQlcCisJCS5uYW1lID0gI3ZyZWcsCQkJCQkJXAorCQkub2ZfbWF0Y2ggPSBvZl9tYXRjaF9wdHIobWF0Y2gpLAkJCVwKKwkJLm9wcyA9ICZtdDYzOTdfdm9sdF9yYW5nZV9vcHMsCQkJCVwKKwkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQkJXAorCQkuaWQgPSBNVDYzOTdfSURfIyN2cmVnLAkJCQkJXAorCQkub3duZXIgPSBUSElTX01PRFVMRSwJCQkJCVwKKwkJLm5fdm9sdGFnZXMgPSAobWF4IC0gbWluKS9zdGVwICsgMSwJCQlcCisJCS5saW5lYXJfcmFuZ2VzID0gdm9sdF9yYW5nZXMsCQkJCVwKKwkJLm5fbGluZWFyX3JhbmdlcyA9IEFSUkFZX1NJWkUodm9sdF9yYW5nZXMpLAkJXAorCQkudnNlbF9yZWcgPSB2b3NlbCwJCQkJCVwKKwkJLnZzZWxfbWFzayA9IHZvc2VsX21hc2ssCQkJCVwKKwkJLmVuYWJsZV9yZWcgPSBlbnJlZywJCQkJCVwKKwkJLmVuYWJsZV9tYXNrID0gQklUKDApLAkJCQkJXAorCX0sCQkJCQkJCQlcCisJLnFpID0gQklUKDEzKSwJCQkJCQkJXAorCS52c2Vsb25fcmVnID0gdm9zZWxvbiwJCQkJCQlcCisJLnZzZWxjdHJsX3JlZyA9IHZvc2VsX2N0cmwsCQkJCQlcCisJLnZzZWxjdHJsX21hc2sgPSBCSVQoMSksCQkJCQlcCit9CisKKyNkZWZpbmUgTVQ2Mzk3X0xETyhtYXRjaCwgdnJlZywgbGRvX3ZvbHRfdGFibGUsIGVucmVnLCBlbmJpdCwgdm9zZWwsCVwKKwkJdm9zZWxfbWFzaykJCQkJCQlcCitbTVQ2Mzk3X0lEXyMjdnJlZ10gPSB7CQkJCQkJCVwKKwkuZGVzYyA9IHsJCQkJCQkJXAorCQkubmFtZSA9ICN2cmVnLAkJCQkJCVwKKwkJLm9mX21hdGNoID0gb2ZfbWF0Y2hfcHRyKG1hdGNoKSwJCQlcCisJCS5vcHMgPSAmbXQ2Mzk3X3ZvbHRfdGFibGVfb3BzLAkJCQlcCisJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKKwkJLmlkID0gTVQ2Mzk3X0lEXyMjdnJlZywJCQkJCVwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCQkJCQlcCisJCS5uX3ZvbHRhZ2VzID0gQVJSQVlfU0laRShsZG9fdm9sdF90YWJsZSksCQlcCisJCS52b2x0X3RhYmxlID0gbGRvX3ZvbHRfdGFibGUsCQkJCVwKKwkJLnZzZWxfcmVnID0gdm9zZWwsCQkJCQlcCisJCS52c2VsX21hc2sgPSB2b3NlbF9tYXNrLAkJCQlcCisJCS5lbmFibGVfcmVnID0gZW5yZWcsCQkJCQlcCisJCS5lbmFibGVfbWFzayA9IEJJVChlbmJpdCksCQkJCVwKKwl9LAkJCQkJCQkJXAorCS5xaSA9IEJJVCgxNSksCQkJCQkJCVwKK30KKworI2RlZmluZSBNVDYzOTdfUkVHX0ZJWEVEKG1hdGNoLCB2cmVnLCBlbnJlZywgZW5iaXQsIHZvbHQpCQlcCitbTVQ2Mzk3X0lEXyMjdnJlZ10gPSB7CQkJCQkJCVwKKwkuZGVzYyA9IHsJCQkJCQkJXAorCQkubmFtZSA9ICN2cmVnLAkJCQkJCVwKKwkJLm9mX21hdGNoID0gb2ZfbWF0Y2hfcHRyKG1hdGNoKSwJCQlcCisJCS5vcHMgPSAmbXQ2Mzk3X3ZvbHRfZml4ZWRfb3BzLAkJCQlcCisJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJCVwKKwkJLmlkID0gTVQ2Mzk3X0lEXyMjdnJlZywJCQkJCVwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCQkJCQlcCisJCS5uX3ZvbHRhZ2VzID0gMSwJCQkJCVwKKwkJLmVuYWJsZV9yZWcgPSBlbnJlZywJCQkJCVwKKwkJLmVuYWJsZV9tYXNrID0gQklUKGVuYml0KSwJCQkJXAorCQkubWluX3VWID0gdm9sdCwJCQkJCQlcCisJfSwJCQkJCQkJCVwKKwkucWkgPSBCSVQoMTUpLAkJCQkJCQlcCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX2xpbmVhcl9yYW5nZSBidWNrX3ZvbHRfcmFuZ2UxW10gPSB7CisJUkVHVUxBVE9SX0xJTkVBUl9SQU5HRSg3MDAwMDAsIDAsIDB4N2YsIDYyNTApLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfbGluZWFyX3JhbmdlIGJ1Y2tfdm9sdF9yYW5nZTJbXSA9IHsKKwlSRUdVTEFUT1JfTElORUFSX1JBTkdFKDgwMDAwMCwgMCwgMHg3ZiwgNjI1MCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9saW5lYXJfcmFuZ2UgYnVja192b2x0X3JhbmdlM1tdID0geworCVJFR1VMQVRPUl9MSU5FQVJfUkFOR0UoMTUwMDAwMCwgMCwgMHgxZiwgMjAwMDApLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBsZG9fdm9sdF90YWJsZTFbXSA9IHsKKwkxNTAwMDAwLCAxODAwMDAwLCAyNTAwMDAwLCAyODAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBsZG9fdm9sdF90YWJsZTJbXSA9IHsKKwkxODAwMDAwLCAzMzAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBsZG9fdm9sdF90YWJsZTNbXSA9IHsKKwkzMDAwMDAwLCAzMzAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBsZG9fdm9sdF90YWJsZTRbXSA9IHsKKwkxMjIwMDAwLCAxMzAwMDAwLCAxNTAwMDAwLCAxODAwMDAwLCAyNTAwMDAwLCAyODAwMDAwLCAzMDAwMDAwLCAzMzAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBsZG9fdm9sdF90YWJsZTVbXSA9IHsKKwkxMjAwMDAwLCAxMzAwMDAwLCAxNTAwMDAwLCAxODAwMDAwLCAyNTAwMDAwLCAyODAwMDAwLCAzMDAwMDAwLCAzMzAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBsZG9fdm9sdF90YWJsZTVfdjJbXSA9IHsKKwkxMjAwMDAwLCAxMDAwMDAwLCAxNTAwMDAwLCAxODAwMDAwLCAyNTAwMDAwLCAyODAwMDAwLCAzMDAwMDAwLCAzMzAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBsZG9fdm9sdF90YWJsZTZbXSA9IHsKKwkxMjAwMDAwLCAxMzAwMDAwLCAxNTAwMDAwLCAxODAwMDAwLCAyNTAwMDAwLCAyODAwMDAwLCAzMDAwMDAwLCAyMDAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBsZG9fdm9sdF90YWJsZTdbXSA9IHsKKwkxMzAwMDAwLCAxNTAwMDAwLCAxODAwMDAwLCAyMDAwMDAwLCAyNTAwMDAwLCAyODAwMDAwLCAzMDAwMDAwLCAzMzAwMDAwLAorfTsKKworc3RhdGljIGludCBtdDYzOTdfZ2V0X3N0YXR1cyhzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlpbnQgcmV0OworCXUzMiByZWd2YWw7CisJc3RydWN0IG10NjM5N19yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisKKwlyZXQgPSByZWdtYXBfcmVhZChyZGV2LT5yZWdtYXAsIGluZm8tPmRlc2MuZW5hYmxlX3JlZywgJnJlZ3ZhbCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoJnJkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgZW5hYmxlIHJlZzogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIChyZWd2YWwgJiBpbmZvLT5xaSkgPyBSRUdVTEFUT1JfU1RBVFVTX09OIDogUkVHVUxBVE9SX1NUQVRVU19PRkY7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtdDYzOTdfdm9sdF9yYW5nZV9vcHMgPSB7CisJLmxpc3Rfdm9sdGFnZSA9IHJlZ3VsYXRvcl9saXN0X3ZvbHRhZ2VfbGluZWFyX3JhbmdlLAorCS5tYXBfdm9sdGFnZSA9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9saW5lYXJfcmFuZ2UsCisJLnNldF92b2x0YWdlX3NlbCA9IHJlZ3VsYXRvcl9zZXRfdm9sdGFnZV9zZWxfcmVnbWFwLAorCS5nZXRfdm9sdGFnZV9zZWwgPSByZWd1bGF0b3JfZ2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKKwkuc2V0X3ZvbHRhZ2VfdGltZV9zZWwgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2VfdGltZV9zZWwsCisJLmVuYWJsZSA9IHJlZ3VsYXRvcl9lbmFibGVfcmVnbWFwLAorCS5kaXNhYmxlID0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLAorCS5pc19lbmFibGVkID0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAorCS5nZXRfc3RhdHVzID0gbXQ2Mzk3X2dldF9zdGF0dXMsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbXQ2Mzk3X3ZvbHRfdGFibGVfb3BzID0geworCS5saXN0X3ZvbHRhZ2UgPSByZWd1bGF0b3JfbGlzdF92b2x0YWdlX3RhYmxlLAorCS5tYXBfdm9sdGFnZSA9IHJlZ3VsYXRvcl9tYXBfdm9sdGFnZV9pdGVyYXRlLAorCS5zZXRfdm9sdGFnZV9zZWwgPSByZWd1bGF0b3Jfc2V0X3ZvbHRhZ2Vfc2VsX3JlZ21hcCwKKwkuZ2V0X3ZvbHRhZ2Vfc2VsID0gcmVndWxhdG9yX2dldF92b2x0YWdlX3NlbF9yZWdtYXAsCisJLnNldF92b2x0YWdlX3RpbWVfc2VsID0gcmVndWxhdG9yX3NldF92b2x0YWdlX3RpbWVfc2VsLAorCS5lbmFibGUgPSByZWd1bGF0b3JfZW5hYmxlX3JlZ21hcCwKKwkuZGlzYWJsZSA9IHJlZ3VsYXRvcl9kaXNhYmxlX3JlZ21hcCwKKwkuaXNfZW5hYmxlZCA9IHJlZ3VsYXRvcl9pc19lbmFibGVkX3JlZ21hcCwKKwkuZ2V0X3N0YXR1cyA9IG10NjM5N19nZXRfc3RhdHVzLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG10NjM5N192b2x0X2ZpeGVkX29wcyA9IHsKKwkubGlzdF92b2x0YWdlID0gcmVndWxhdG9yX2xpc3Rfdm9sdGFnZV9saW5lYXIsCisJLmVuYWJsZSA9IHJlZ3VsYXRvcl9lbmFibGVfcmVnbWFwLAorCS5kaXNhYmxlID0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLAorCS5pc19lbmFibGVkID0gcmVndWxhdG9yX2lzX2VuYWJsZWRfcmVnbWFwLAorCS5nZXRfc3RhdHVzID0gbXQ2Mzk3X2dldF9zdGF0dXMsCit9OworCisvKiBUaGUgYXJyYXkgaXMgaW5kZXhlZCBieSBpZChNVDYzOTdfSURfWFhYKSAqLworc3RhdGljIHN0cnVjdCBtdDYzOTdfcmVndWxhdG9yX2luZm8gbXQ2Mzk3X3JlZ3VsYXRvcnNbXSA9IHsKKwlNVDYzOTdfQlVDSygiYnVja192cGNhMTUiLCBWUENBMTUsIDcwMDAwMCwgMTQ5Mzc1MCwgNjI1MCwKKwkJYnVja192b2x0X3JhbmdlMSwgTVQ2Mzk3X1ZDQTE1X0NPTjcsIE1UNjM5N19WQ0ExNV9DT045LCAweDdmLAorCQlNVDYzOTdfVkNBMTVfQ09OMTAsIE1UNjM5N19WQ0ExNV9DT041KSwKKwlNVDYzOTdfQlVDSygiYnVja192cGNhNyIsIFZQQ0E3LCA3MDAwMDAsIDE0OTM3NTAsIDYyNTAsCisJCWJ1Y2tfdm9sdF9yYW5nZTEsIE1UNjM5N19WUENBN19DT043LCBNVDYzOTdfVlBDQTdfQ09OOSwgMHg3ZiwKKwkJTVQ2Mzk3X1ZQQ0E3X0NPTjEwLCBNVDYzOTdfVlBDQTdfQ09ONSksCisJTVQ2Mzk3X0JVQ0soImJ1Y2tfdnNyYW1jYTE1IiwgVlNSQU1DQTE1LCA3MDAwMDAsIDE0OTM3NTAsIDYyNTAsCisJCWJ1Y2tfdm9sdF9yYW5nZTEsIE1UNjM5N19WU1JNQ0ExNV9DT043LCBNVDYzOTdfVlNSTUNBMTVfQ09OOSwKKwkJMHg3ZiwgTVQ2Mzk3X1ZTUk1DQTE1X0NPTjEwLCBNVDYzOTdfVlNSTUNBMTVfQ09ONSksCisJTVQ2Mzk3X0JVQ0soImJ1Y2tfdnNyYW1jYTciLCBWU1JBTUNBNywgNzAwMDAwLCAxNDkzNzUwLCA2MjUwLAorCQlidWNrX3ZvbHRfcmFuZ2UxLCBNVDYzOTdfVlNSTUNBN19DT043LCBNVDYzOTdfVlNSTUNBN19DT045LAorCQkweDdmLCBNVDYzOTdfVlNSTUNBN19DT04xMCwgTVQ2Mzk3X1ZTUk1DQTdfQ09ONSksCisJTVQ2Mzk3X0JVQ0soImJ1Y2tfdmNvcmUiLCBWQ09SRSwgNzAwMDAwLCAxNDkzNzUwLCA2MjUwLAorCQlidWNrX3ZvbHRfcmFuZ2UxLCBNVDYzOTdfVkNPUkVfQ09ONywgTVQ2Mzk3X1ZDT1JFX0NPTjksIDB4N2YsCisJCU1UNjM5N19WQ09SRV9DT04xMCwgTVQ2Mzk3X1ZDT1JFX0NPTjUpLAorCU1UNjM5N19CVUNLKCJidWNrX3ZncHUiLCBWR1BVLCA3MDAwMDAsIDE0OTM3NTAsIDYyNTAsIGJ1Y2tfdm9sdF9yYW5nZTEsCisJCU1UNjM5N19WR1BVX0NPTjcsIE1UNjM5N19WR1BVX0NPTjksIDB4N2YsCisJCU1UNjM5N19WR1BVX0NPTjEwLCBNVDYzOTdfVkdQVV9DT041KSwKKwlNVDYzOTdfQlVDSygiYnVja192ZHJtIiwgVkRSTSwgODAwMDAwLCAxNTkzNzUwLCA2MjUwLCBidWNrX3ZvbHRfcmFuZ2UyLAorCQlNVDYzOTdfVkRSTV9DT043LCBNVDYzOTdfVkRSTV9DT045LCAweDdmLAorCQlNVDYzOTdfVkRSTV9DT04xMCwgTVQ2Mzk3X1ZEUk1fQ09ONSksCisJTVQ2Mzk3X0JVQ0soImJ1Y2tfdmlvMTgiLCBWSU8xOCwgMTUwMDAwMCwgMjEyMDAwMCwgMjAwMDAsCisJCWJ1Y2tfdm9sdF9yYW5nZTMsIE1UNjM5N19WSU8xOF9DT043LCBNVDYzOTdfVklPMThfQ09OOSwgMHgxZiwKKwkJTVQ2Mzk3X1ZJTzE4X0NPTjEwLCBNVDYzOTdfVklPMThfQ09ONSksCisJTVQ2Mzk3X1JFR19GSVhFRCgibGRvX3Z0Y3hvIiwgVlRDWE8sIE1UNjM5N19BTkFMRE9fQ09OMCwgMTAsIDI4MDAwMDApLAorCU1UNjM5N19SRUdfRklYRUQoImxkb192YTI4IiwgVkEyOCwgTVQ2Mzk3X0FOQUxET19DT04xLCAxNCwgMjgwMDAwMCksCisJTVQ2Mzk3X0xETygibGRvX3ZjYW1hIiwgVkNBTUEsIGxkb192b2x0X3RhYmxlMSwKKwkJTVQ2Mzk3X0FOQUxET19DT04yLCAxNSwgTVQ2Mzk3X0FOQUxET19DT042LCAweEMwKSwKKwlNVDYzOTdfUkVHX0ZJWEVEKCJsZG9fdmlvMjgiLCBWSU8yOCwgTVQ2Mzk3X0RJR0xET19DT04wLCAxNCwgMjgwMDAwMCksCisJTVQ2Mzk3X1JFR19GSVhFRCgibGRvX3Z1c2IiLCBWVVNCLCBNVDYzOTdfRElHTERPX0NPTjEsIDE0LCAzMzAwMDAwKSwKKwlNVDYzOTdfTERPKCJsZG9fdm1jIiwgVk1DLCBsZG9fdm9sdF90YWJsZTIsCisJCU1UNjM5N19ESUdMRE9fQ09OMiwgMTIsIE1UNjM5N19ESUdMRE9fQ09OMjksIDB4MTApLAorCU1UNjM5N19MRE8oImxkb192bWNoIiwgVk1DSCwgbGRvX3ZvbHRfdGFibGUzLAorCQlNVDYzOTdfRElHTERPX0NPTjMsIDE0LCBNVDYzOTdfRElHTERPX0NPTjE3LCAweDgwKSwKKwlNVDYzOTdfTERPKCJsZG9fdmVtYzN2MyIsIFZFTUMzVjMsIGxkb192b2x0X3RhYmxlMywKKwkJTVQ2Mzk3X0RJR0xET19DT040LCAxNCwgTVQ2Mzk3X0RJR0xET19DT04xOCwgMHgxMCksCisJTVQ2Mzk3X0xETygibGRvX3ZncDEiLCBWR1AxLCBsZG9fdm9sdF90YWJsZTQsCisJCU1UNjM5N19ESUdMRE9fQ09ONSwgMTUsIE1UNjM5N19ESUdMRE9fQ09OMTksIDB4RTApLAorCU1UNjM5N19MRE8oImxkb192Z3AyIiwgVkdQMiwgbGRvX3ZvbHRfdGFibGU1LAorCQlNVDYzOTdfRElHTERPX0NPTjYsIDE1LCBNVDYzOTdfRElHTERPX0NPTjIwLCAweEUwKSwKKwlNVDYzOTdfTERPKCJsZG9fdmdwMyIsIFZHUDMsIGxkb192b2x0X3RhYmxlNSwKKwkJTVQ2Mzk3X0RJR0xET19DT043LCAxNSwgTVQ2Mzk3X0RJR0xET19DT04yMSwgMHhFMCksCisJTVQ2Mzk3X0xETygibGRvX3ZncDQiLCBWR1A0LCBsZG9fdm9sdF90YWJsZTUsCisJCU1UNjM5N19ESUdMRE9fQ09OOCwgMTUsIE1UNjM5N19ESUdMRE9fQ09OMjIsIDB4RTApLAorCU1UNjM5N19MRE8oImxkb192Z3A1IiwgVkdQNSwgbGRvX3ZvbHRfdGFibGU2LAorCQlNVDYzOTdfRElHTERPX0NPTjksIDE1LCBNVDYzOTdfRElHTERPX0NPTjIzLCAweEUwKSwKKwlNVDYzOTdfTERPKCJsZG9fdmdwNiIsIFZHUDYsIGxkb192b2x0X3RhYmxlNSwKKwkJTVQ2Mzk3X0RJR0xET19DT04xMCwgMTUsIE1UNjM5N19ESUdMRE9fQ09OMzMsIDB4RTApLAorCU1UNjM5N19MRE8oImxkb192aWJyIiwgVklCUiwgbGRvX3ZvbHRfdGFibGU3LAorCQlNVDYzOTdfRElHTERPX0NPTjI0LCAxNSwgTVQ2Mzk3X0RJR0xET19DT04yNSwgMHhFMDApLAorfTsKKworc3RhdGljIGludCBtdDYzOTdfc2V0X2J1Y2tfdm9zZWxfcmVnKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG10NjM5N19jaGlwICptdDYzOTcgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJaW50IGk7CisJdTMyIHJlZ3ZhbDsKKworCWZvciAoaSA9IDA7IGkgPCBNVDYzOTdfTUFYX1JFR1VMQVRPUjsgaSsrKSB7CisJCWlmIChtdDYzOTdfcmVndWxhdG9yc1tpXS52c2VsY3RybF9yZWcpIHsKKwkJCWlmIChyZWdtYXBfcmVhZChtdDYzOTctPnJlZ21hcCwKKwkJCQltdDYzOTdfcmVndWxhdG9yc1tpXS52c2VsY3RybF9yZWcsCisJCQkJJnJlZ3ZhbCkgPCAwKSB7CisJCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCQkiRmFpbGVkIHRvIHJlYWQgYnVjayBjdHJsXG4iKTsKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCX0KKworCQkJaWYgKHJlZ3ZhbCAmIG10NjM5N19yZWd1bGF0b3JzW2ldLnZzZWxjdHJsX21hc2spIHsKKwkJCQltdDYzOTdfcmVndWxhdG9yc1tpXS5kZXNjLnZzZWxfcmVnID0KKwkJCQltdDYzOTdfcmVndWxhdG9yc1tpXS52c2Vsb25fcmVnOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQ2Mzk3X3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtdDYzOTdfY2hpcCAqbXQ2Mzk3ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCByZWd1bGF0b3JfY29uZmlnIGNvbmZpZyA9IHt9OworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OworCWludCBpOworCXUzMiByZWdfdmFsdWUsIHZlcnNpb247CisKKwkvKiBRdWVyeSBidWNrIGNvbnRyb2xsZXIgdG8gc2VsZWN0IGFjdGl2YXRlZCB2b2x0YWdlIHJlZ2lzdGVyIHBhcnQgKi8KKwlpZiAobXQ2Mzk3X3NldF9idWNrX3Zvc2VsX3JlZyhwZGV2KSkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBSZWFkIFBNSUMgY2hpcCByZXZpc2lvbiB0byB1cGRhdGUgY29uc3RyYWludHMgYW5kIHZvbHRhZ2UgdGFibGUgKi8KKwlpZiAocmVnbWFwX3JlYWQobXQ2Mzk3LT5yZWdtYXAsIE1UNjM5N19DSUQsICZyZWdfdmFsdWUpIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBDaGlwIElEXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWRldl9pbmZvKCZwZGV2LT5kZXYsICJDaGlwIElEID0gMHgleFxuIiwgcmVnX3ZhbHVlKTsKKworCXZlcnNpb24gPSAocmVnX3ZhbHVlICYgMHhGRik7CisJc3dpdGNoICh2ZXJzaW9uKSB7CisJY2FzZSBNVDYzOTdfUkVHVUxBVE9SX0lEOTE6CisJCW10NjM5N19yZWd1bGF0b3JzW01UNjM5N19JRF9WR1AyXS5kZXNjLnZvbHRfdGFibGUgPQorCQlsZG9fdm9sdF90YWJsZTVfdjI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBNVDYzOTdfTUFYX1JFR1VMQVRPUjsgaSsrKSB7CisJCWNvbmZpZy5kZXYgPSAmcGRldi0+ZGV2OworCQljb25maWcuZHJpdmVyX2RhdGEgPSAmbXQ2Mzk3X3JlZ3VsYXRvcnNbaV07CisJCWNvbmZpZy5yZWdtYXAgPSBtdDYzOTctPnJlZ21hcDsKKwkJcmRldiA9IGRldm1fcmVndWxhdG9yX3JlZ2lzdGVyKCZwZGV2LT5kZXYsCisJCQkJJm10NjM5N19yZWd1bGF0b3JzW2ldLmRlc2MsICZjb25maWcpOworCQlpZiAoSVNfRVJSKHJkZXYpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgJXNcbiIsCisJCQkJbXQ2Mzk3X3JlZ3VsYXRvcnNbaV0uZGVzYy5uYW1lKTsKKwkJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10NjM5N19yZWd1bGF0b3JfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm10NjM5Ny1yZWd1bGF0b3IiLAorCX0sCisJLnByb2JlID0gbXQ2Mzk3X3JlZ3VsYXRvcl9wcm9iZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobXQ2Mzk3X3JlZ3VsYXRvcl9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJGbG9yYSBGdSA8ZmxvcmEuZnVAbWVkaWF0ZWsuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJSZWd1bGF0b3IgRHJpdmVyIGZvciBNZWRpYVRlayBNVDYzOTcgUE1JQyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTptdDYzOTctcmVndWxhdG9yIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9vZl9yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5jCmluZGV4IDkxZWFhZjAuLjI0ZTgxMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL29mX3JlZ3VsYXRvci5jCkBAIC0yNzAsNiArMjcwLDcgQEAKIAogc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKnJlZ3VsYXRvcl9vZl9nZXRfaW5pdF9kYXRhKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyAqZGVzYywKKwkJCQkJICAgIHN0cnVjdCByZWd1bGF0b3JfY29uZmlnICpjb25maWcsCiAJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKipub2RlKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc2VhcmNoLCAqY2hpbGQ7CkBAIC0zMDcsNiArMzA4LDE2IEBACiAJCQlicmVhazsKIAkJfQogCisJCWlmIChkZXNjLT5vZl9wYXJzZV9jYikgeworCQkJaWYgKGRlc2MtPm9mX3BhcnNlX2NiKGNoaWxkLCBkZXNjLCBjb25maWcpKSB7CisJCQkJZGV2X2VycihkZXYsCisJCQkJCSJkcml2ZXIgY2FsbGJhY2sgZmFpbGVkIHRvIHBhcnNlIERUIGZvciByZWd1bGF0b3IgJXNcbiIsCisJCQkJCWNoaWxkLT5uYW1lKTsKKwkJCQlpbml0X2RhdGEgPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKIAkJb2Zfbm9kZV9nZXQoY2hpbGQpOwogCQkqbm9kZSA9IGNoaWxkOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3BmdXplMTAwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvcGZ1emUxMDAtcmVndWxhdG9yLmMKaW5kZXggYzg3OWRmZi4uOGNjOGQxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvcGZ1emUxMDAtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvcGZ1emUxMDAtcmVndWxhdG9yLmMKQEAgLTU2LDcgKzU2LDcgQEAKICNkZWZpbmUgUEZVWkUxMDBfVkdFTjVWT0wJMHg3MAogI2RlZmluZSBQRlVaRTEwMF9WR0VONlZPTAkweDcxCiAKLWVudW0gY2hpcHMgeyBQRlVaRTEwMCwgUEZVWkUyMDAgfTsKK2VudW0gY2hpcHMgeyBQRlVaRTEwMCwgUEZVWkUyMDAsIFBGVVpFMzAwMCA9IDMgfTsKIAogc3RydWN0IHBmdXplX3JlZ3VsYXRvciB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2M7CkBAIC04MCw5ICs4MCwxOCBAQAogCTEwMDAwMDAsIDExMDAwMDAsIDEyMDAwMDAsIDEzMDAwMDAsIDE1MDAwMDAsIDE4MDAwMDAsIDMwMDAwMDAsCiB9OwogCitzdGF0aWMgY29uc3QgaW50IHBmdXplMzAwMF9zdzJsb1tdID0geworCTE1MDAwMDAsIDE1NTAwMDAsIDE2MDAwMDAsIDE2NTAwMDAsIDE3MDAwMDAsIDE3NTAwMDAsIDE4MDAwMDAsIDE4NTAwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IHBmdXplMzAwMF9zdzJoaVtdID0geworCTI1MDAwMDAsIDI4MDAwMDAsIDI4NTAwMDAsIDMwMDAwMDAsIDMxMDAwMDAsIDMxNTAwMDAsIDMyMDAwMDAsIDMzMDAwMDAsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcGZ1emVfZGV2aWNlX2lkW10gPSB7CiAJey5uYW1lID0gInBmdXplMTAwIiwgLmRyaXZlcl9kYXRhID0gUEZVWkUxMDB9LAogCXsubmFtZSA9ICJwZnV6ZTIwMCIsIC5kcml2ZXJfZGF0YSA9IFBGVVpFMjAwfSwKKwl7Lm5hbWUgPSAicGZ1emUzMDAwIiwgLmRyaXZlcl9kYXRhID0gUEZVWkUzMDAwfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgcGZ1emVfZGV2aWNlX2lkKTsKQEAgLTkwLDYgKzk5LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBmdXplX2R0X2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLHBmdXplMTAwIiwgLmRhdGEgPSAodm9pZCAqKVBGVVpFMTAwfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxwZnV6ZTIwMCIsIC5kYXRhID0gKHZvaWQgKilQRlVaRTIwMH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wscGZ1emUzMDAwIiwgLmRhdGEgPSAodm9pZCAqKVBGVVpFMzAwMH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcGZ1emVfZHRfaWRzKTsKQEAgLTIxOSw2ICsyMjksNjAgQEAKIAkJLnN0YnlfbWFzayA9IDB4MjAsCVwKIAl9CiAKKyNkZWZpbmUgUEZVWkUzMDAwX1ZDQ19SRUcoX2NoaXAsIF9uYW1lLCBiYXNlLCBtaW4sIG1heCwgc3RlcCkJewlcCisJLmRlc2MgPSB7CVwKKwkJLm5hbWUgPSAjX25hbWUsCVwKKwkJLm5fdm9sdGFnZXMgPSAoKG1heCkgLSAobWluKSkgLyAoc3RlcCkgKyAxLAlcCisJCS5vcHMgPSAmcGZ1emUxMDBfbGRvX3JlZ3VsYXRvcl9vcHMsCVwKKwkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwJXAorCQkuaWQgPSBfY2hpcCAjIyBfICMjIF9uYW1lLAlcCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAlcCisJCS5taW5fdVYgPSAobWluKSwJXAorCQkudVZfc3RlcCA9IChzdGVwKSwJXAorCQkudnNlbF9yZWcgPSAoYmFzZSksCVwKKwkJLnZzZWxfbWFzayA9IDB4MywJXAorCQkuZW5hYmxlX3JlZyA9IChiYXNlKSwJXAorCQkuZW5hYmxlX21hc2sgPSAweDEwLAlcCisJfSwJXAorCS5zdGJ5X3JlZyA9IChiYXNlKSwJXAorCS5zdGJ5X21hc2sgPSAweDIwLAlcCit9CisKKworI2RlZmluZSBQRlVaRTMwMDBfU1cyX1JFRyhfY2hpcCwgX25hbWUsIGJhc2UsIG1pbiwgbWF4LCBzdGVwKQl7CVwKKwkuZGVzYyA9IHsJXAorCQkubmFtZSA9ICNfbmFtZSxcCisJCS5uX3ZvbHRhZ2VzID0gKChtYXgpIC0gKG1pbikpIC8gKHN0ZXApICsgMSwJXAorCQkub3BzID0gJnBmdXplMTAwX3N3X3JlZ3VsYXRvcl9vcHMsCVwKKwkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwJXAorCQkuaWQgPSBfY2hpcCAjIyBfICMjIF9uYW1lLAlcCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAlcCisJCS5taW5fdVYgPSAobWluKSwJXAorCQkudVZfc3RlcCA9IChzdGVwKSwJXAorCQkudnNlbF9yZWcgPSAoYmFzZSkgKyBQRlVaRTEwMF9WT0xfT0ZGU0VULAlcCisJCS52c2VsX21hc2sgPSAweDcsCVwKKwl9LAlcCisJLnN0YnlfcmVnID0gKGJhc2UpICsgUEZVWkUxMDBfU1RBTkRCWV9PRkZTRVQsCVwKKwkuc3RieV9tYXNrID0gMHg3LAlcCit9CisKKyNkZWZpbmUgUEZVWkUzMDAwX1NXM19SRUcoX2NoaXAsIF9uYW1lLCBiYXNlLCBtaW4sIG1heCwgc3RlcCkJewlcCisJLmRlc2MgPSB7CVwKKwkJLm5hbWUgPSAjX25hbWUsXAorCQkubl92b2x0YWdlcyA9ICgobWF4KSAtIChtaW4pKSAvIChzdGVwKSArIDEsCVwKKwkJLm9wcyA9ICZwZnV6ZTEwMF9zd19yZWd1bGF0b3Jfb3BzLAlcCisJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCVwKKwkJLmlkID0gX2NoaXAgIyMgXyAjIyBfbmFtZSwJXAorCQkub3duZXIgPSBUSElTX01PRFVMRSwJXAorCQkubWluX3VWID0gKG1pbiksCVwKKwkJLnVWX3N0ZXAgPSAoc3RlcCksCVwKKwkJLnZzZWxfcmVnID0gKGJhc2UpICsgUEZVWkUxMDBfVk9MX09GRlNFVCwJXAorCQkudnNlbF9tYXNrID0gMHhmLAlcCisJfSwJXAorCS5zdGJ5X3JlZyA9IChiYXNlKSArIFBGVVpFMTAwX1NUQU5EQllfT0ZGU0VULAlcCisJLnN0YnlfbWFzayA9IDB4ZiwJXAorfQorCiAvKiBQRlVaRTEwMCAqLwogc3RhdGljIHN0cnVjdCBwZnV6ZV9yZWd1bGF0b3IgcGZ1emUxMDBfcmVndWxhdG9yc1tdID0gewogCVBGVVpFMTAwX1NXX1JFRyhQRlVaRTEwMCwgU1cxQUIsIFBGVVpFMTAwX1NXMUFCVk9MLCAzMDAwMDAsIDE4NzUwMDAsIDI1MDAwKSwKQEAgLTI1NCw2ICszMTgsMjIgQEAKIAlQRlVaRTEwMF9WR0VOX1JFRyhQRlVaRTIwMCwgVkdFTjYsIFBGVVpFMTAwX1ZHRU42Vk9MLCAxODAwMDAwLCAzMzAwMDAwLCAxMDAwMDApLAogfTsKIAorc3RhdGljIHN0cnVjdCBwZnV6ZV9yZWd1bGF0b3IgcGZ1emUzMDAwX3JlZ3VsYXRvcnNbXSA9IHsKKwlQRlVaRTEwMF9TV19SRUcoUEZVWkUzMDAwLCBTVzFBLCBQRlVaRTEwMF9TVzFBQlZPTCwgNzAwMDAwLCAxNDc1MDAwLCAyNTAwMCksCisJUEZVWkUxMDBfU1dfUkVHKFBGVVpFMzAwMCwgU1cxQiwgUEZVWkUxMDBfU1cxQ1ZPTCwgNzAwMDAwLCAxNDc1MDAwLCAyNTAwMCksCisJUEZVWkUxMDBfU1dCX1JFRyhQRlVaRTMwMDAsIFNXMiwgUEZVWkUxMDBfU1cyVk9MLCAweDcsIHBmdXplMzAwMF9zdzJsbyksCisJUEZVWkUzMDAwX1NXM19SRUcoUEZVWkUzMDAwLCBTVzMsIFBGVVpFMTAwX1NXM0FWT0wsIDkwMDAwMCwgMTY1MDAwMCwgNTAwMDApLAorCVBGVVpFMTAwX1NXQl9SRUcoUEZVWkUzMDAwLCBTV0JTVCwgUEZVWkUxMDBfU1dCU1RDT04xLCAweDMsIHBmdXplMTAwX3N3YnN0KSwKKwlQRlVaRTEwMF9TV0JfUkVHKFBGVVpFMzAwMCwgVlNOVlMsIFBGVVpFMTAwX1ZTTlZTVk9MLCAweDcsIHBmdXplMTAwX3ZzbnZzKSwKKwlQRlVaRTEwMF9GSVhFRF9SRUcoUEZVWkUzMDAwLCBWUkVGRERSLCBQRlVaRTEwMF9WUkVGRERSQ09OLCA3NTAwMDApLAorCVBGVVpFMTAwX1ZHRU5fUkVHKFBGVVpFMzAwMCwgVkxETzEsIFBGVVpFMTAwX1ZHRU4xVk9MLCAxODAwMDAwLCAzMzAwMDAwLCAxMDAwMDApLAorCVBGVVpFMTAwX1ZHRU5fUkVHKFBGVVpFMzAwMCwgVkxETzIsIFBGVVpFMTAwX1ZHRU4yVk9MLCA4MDAwMDAsIDE1NTAwMDAsIDUwMDAwKSwKKwlQRlVaRTMwMDBfVkNDX1JFRyhQRlVaRTMwMDAsIFZDQ1NELCBQRlVaRTEwMF9WR0VOM1ZPTCwgMjg1MDAwMCwgMzMwMDAwMCwgMTUwMDAwKSwKKwlQRlVaRTMwMDBfVkNDX1JFRyhQRlVaRTMwMDAsIFYzMywgUEZVWkUxMDBfVkdFTjRWT0wsIDI4NTAwMDAsIDMzMDAwMDAsIDE1MDAwMCksCisJUEZVWkUxMDBfVkdFTl9SRUcoUEZVWkUzMDAwLCBWTERPMywgUEZVWkUxMDBfVkdFTjVWT0wsIDE4MDAwMDAsIDMzMDAwMDAsIDEwMDAwMCksCisJUEZVWkUxMDBfVkdFTl9SRUcoUEZVWkUzMDAwLCBWTERPNCwgUEZVWkUxMDBfVkdFTjZWT0wsIDE4MDAwMDAsIDMzMDAwMDAsIDEwMDAwMCksCit9OworCiBzdGF0aWMgc3RydWN0IHBmdXplX3JlZ3VsYXRvciAqcGZ1emVfcmVndWxhdG9yczsKIAogI2lmZGVmIENPTkZJR19PRgpAQCAtMjk0LDYgKzM3NCwyNCBAQAogCXsgLm5hbWUgPSAidmdlbjYiLAl9LAogfTsKIAorLyogUEZVWkUzMDAwICovCitzdGF0aWMgc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCBwZnV6ZTMwMDBfbWF0Y2hlc1tdID0geworCisJeyAubmFtZSA9ICJzdzFhIiwJfSwKKwl7IC5uYW1lID0gInN3MWIiLAl9LAorCXsgLm5hbWUgPSAic3cyIiwJfSwKKwl7IC5uYW1lID0gInN3MyIsCX0sCisJeyAubmFtZSA9ICJzd2JzdCIsCX0sCisJeyAubmFtZSA9ICJ2c252cyIsCX0sCisJeyAubmFtZSA9ICJ2cmVmZGRyIiwJfSwKKwl7IC5uYW1lID0gInZsZG8xIiwJfSwKKwl7IC5uYW1lID0gInZsZG8yIiwJfSwKKwl7IC5uYW1lID0gInZjY3NkIiwJfSwKKwl7IC5uYW1lID0gInYzMyIsCX0sCisJeyAubmFtZSA9ICJ2bGRvMyIsCX0sCisJeyAubmFtZSA9ICJ2bGRvNCIsCX0sCit9OworCiBzdGF0aWMgc3RydWN0IG9mX3JlZ3VsYXRvcl9tYXRjaCAqcGZ1emVfbWF0Y2hlczsKIAogc3RhdGljIGludCBwZnV6ZV9wYXJzZV9yZWd1bGF0b3JzX2R0KHN0cnVjdCBwZnV6ZV9jaGlwICpjaGlwKQpAQCAtMzEzLDYgKzQxMSwxMSBAQAogCX0KIAogCXN3aXRjaCAoY2hpcC0+Y2hpcF9pZCkgeworCWNhc2UgUEZVWkUzMDAwOgorCQlwZnV6ZV9tYXRjaGVzID0gcGZ1emUzMDAwX21hdGNoZXM7CisJCXJldCA9IG9mX3JlZ3VsYXRvcl9tYXRjaChkZXYsIHBhcmVudCwgcGZ1emUzMDAwX21hdGNoZXMsCisJCQkJCSBBUlJBWV9TSVpFKHBmdXplMzAwMF9tYXRjaGVzKSk7CisJCWJyZWFrOwogCWNhc2UgUEZVWkUyMDA6CiAJCXBmdXplX21hdGNoZXMgPSBwZnV6ZTIwMF9tYXRjaGVzOwogCQlyZXQgPSBvZl9yZWd1bGF0b3JfbWF0Y2goZGV2LCBwYXJlbnQsIHBmdXplMjAwX21hdGNoZXMsCkBAIC0zNzgsNyArNDgxLDggQEAKIAkJICogYXMgSUQ9OCBpbiBQRlVaRTEwMAogCQkgKi8KIAkJZGV2X2luZm8ocGZ1emVfY2hpcC0+ZGV2LCAiQXNzdW1pbmcgbWlzcHJvZ3JhbW1lZCBJRD0weDgiKTsKLQl9IGVsc2UgaWYgKCh2YWx1ZSAmIDB4MGYpICE9IHBmdXplX2NoaXAtPmNoaXBfaWQpIHsKKwl9IGVsc2UgaWYgKCh2YWx1ZSAmIDB4MGYpICE9IHBmdXplX2NoaXAtPmNoaXBfaWQgJiYKKwkJICAgKHZhbHVlICYgMHhmMCkgPj4gNCAhPSBwZnV6ZV9jaGlwLT5jaGlwX2lkKSB7CiAJCS8qIGRldmljZSBpZCBOT1QgbWF0Y2ggd2l0aCB5b3VyIHNldHRpbmcgKi8KIAkJZGV2X3dhcm4ocGZ1emVfY2hpcC0+ZGV2LCAiSWxsZWdhbCBJRDogJXhcbiIsIHZhbHVlKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC00MTcsNyArNTIxLDcgQEAKIAlpbnQgaSwgcmV0OwogCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXUzMiByZWd1bGF0b3JfbnVtOwotCXUzMiBzd19jaGVja19zdGFydCwgc3dfY2hlY2tfZW5kOworCXUzMiBzd19jaGVja19zdGFydCwgc3dfY2hlY2tfZW5kLCBzd19oaSA9IDB4NDA7CiAKIAlwZnV6ZV9jaGlwID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6ZW9mKCpwZnV6ZV9jaGlwKSwKIAkJCUdGUF9LRVJORUwpOwpAQCAtNDU4LDEzICs1NjIsMTkgQEAKIAogCS8qIHVzZSB0aGUgcmlnaHQgcmVndWxhdG9ycyBhZnRlciBpZGVudGlmeSB0aGUgcmlnaHQgZGV2aWNlICovCiAJc3dpdGNoIChwZnV6ZV9jaGlwLT5jaGlwX2lkKSB7CisJY2FzZSBQRlVaRTMwMDA6CisJCXBmdXplX3JlZ3VsYXRvcnMgPSBwZnV6ZTMwMDBfcmVndWxhdG9yczsKKwkJcmVndWxhdG9yX251bSA9IEFSUkFZX1NJWkUocGZ1emUzMDAwX3JlZ3VsYXRvcnMpOworCQlzd19jaGVja19zdGFydCA9IFBGVVpFMzAwMF9TVzI7CisJCXN3X2NoZWNrX2VuZCA9IFBGVVpFMzAwMF9TVzI7CisJCXN3X2hpID0gMSA8PCAzOworCQlicmVhazsKIAljYXNlIFBGVVpFMjAwOgogCQlwZnV6ZV9yZWd1bGF0b3JzID0gcGZ1emUyMDBfcmVndWxhdG9yczsKIAkJcmVndWxhdG9yX251bSA9IEFSUkFZX1NJWkUocGZ1emUyMDBfcmVndWxhdG9ycyk7CiAJCXN3X2NoZWNrX3N0YXJ0ID0gUEZVWkUyMDBfU1cyOwogCQlzd19jaGVja19lbmQgPSBQRlVaRTIwMF9TVzNCOwogCQlicmVhazsKLQogCWNhc2UgUEZVWkUxMDA6CiAJZGVmYXVsdDoKIAkJcGZ1emVfcmVndWxhdG9ycyA9IHBmdXplMTAwX3JlZ3VsYXRvcnM7CkBAIC00NzQsNyArNTg0LDggQEAKIAkJYnJlYWs7CiAJfQogCWRldl9pbmZvKCZjbGllbnQtPmRldiwgInBmdXplJXMgZm91bmQuXG4iLAotCQkocGZ1emVfY2hpcC0+Y2hpcF9pZCA9PSBQRlVaRTEwMCkgPyAiMTAwIiA6ICIyMDAiKTsKKwkJKHBmdXplX2NoaXAtPmNoaXBfaWQgPT0gUEZVWkUxMDApID8gIjEwMCIgOgorCQkoKHBmdXplX2NoaXAtPmNoaXBfaWQgPT0gUEZVWkUyMDApID8gIjIwMCIgOiAiMzAwMCIpKTsKIAogCW1lbWNweShwZnV6ZV9jaGlwLT5yZWd1bGF0b3JfZGVzY3MsIHBmdXplX3JlZ3VsYXRvcnMsCiAJCXNpemVvZihwZnV6ZV9jaGlwLT5yZWd1bGF0b3JfZGVzY3MpKTsKQEAgLTQ5OCwxMCArNjA5LDE1IEBACiAJCS8qIFNXMn5TVzQgaGlnaCBiaXQgY2hlY2sgYW5kIG1vZGlmeSB0aGUgdm9sdGFnZSB2YWx1ZSB0YWJsZSAqLwogCQlpZiAoaSA+PSBzd19jaGVja19zdGFydCAmJiBpIDw9IHN3X2NoZWNrX2VuZCkgewogCQkJcmVnbWFwX3JlYWQocGZ1emVfY2hpcC0+cmVnbWFwLCBkZXNjLT52c2VsX3JlZywgJnZhbCk7Ci0JCQlpZiAodmFsICYgMHg0MCkgewotCQkJCWRlc2MtPm1pbl91ViA9IDgwMDAwMDsKLQkJCQlkZXNjLT51Vl9zdGVwID0gNTAwMDA7Ci0JCQkJZGVzYy0+bl92b2x0YWdlcyA9IDUxOworCQkJaWYgKHZhbCAmIHN3X2hpKSB7CisJCQkJaWYgKHBmdXplX2NoaXAtPmNoaXBfaWQgPT0gUEZVWkUzMDAwKSB7CisJCQkJCWRlc2MtPnZvbHRfdGFibGUgPSBwZnV6ZTMwMDBfc3cyaGk7CisJCQkJCWRlc2MtPm5fdm9sdGFnZXMgPSBBUlJBWV9TSVpFKHBmdXplMzAwMF9zdzJoaSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJZGVzYy0+bWluX3VWID0gODAwMDAwOworCQkJCQlkZXNjLT51Vl9zdGVwID0gNTAwMDA7CisJCQkJCWRlc2MtPm5fdm9sdGFnZXMgPSA1MTsKKwkJCQl9CiAJCQl9CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvcWNvbV9ycG0tcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9xY29tX3JwbS1yZWd1bGF0b3IuYwppbmRleCA4MzY0ZmYzLi5lODY0N2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9xY29tX3JwbS1yZWd1bGF0b3IuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9xY29tX3JwbS1yZWd1bGF0b3IuYwpAQCAtMjI3LDkgKzIyNywxMSBAQAogCQlyZXR1cm4gdVY7CiAKIAltdXRleF9sb2NrKCZ2cmVnLT5sb2NrKTsKLQl2cmVnLT51ViA9IHVWOwogCWlmICh2cmVnLT5pc19lbmFibGVkKQotCQlyZXQgPSBycG1fcmVnX3dyaXRlKHZyZWcsIHJlcSwgdnJlZy0+dVYgLyAxMDAwKTsKKwkJcmV0ID0gcnBtX3JlZ193cml0ZSh2cmVnLCByZXEsIHVWIC8gMTAwMCk7CisKKwlpZiAoIXJldCkKKwkJdnJlZy0+dVYgPSB1VjsKIAltdXRleF91bmxvY2soJnZyZWctPmxvY2spOwogCiAJcmV0dXJuIHJldDsKQEAgLTI1Miw5ICsyNTQsMTEgQEAKIAkJcmV0dXJuIHVWOwogCiAJbXV0ZXhfbG9jaygmdnJlZy0+bG9jayk7Ci0JdnJlZy0+dVYgPSB1VjsKIAlpZiAodnJlZy0+aXNfZW5hYmxlZCkKLQkJcmV0ID0gcnBtX3JlZ193cml0ZSh2cmVnLCByZXEsIHZyZWctPnVWKTsKKwkJcmV0ID0gcnBtX3JlZ193cml0ZSh2cmVnLCByZXEsIHVWKTsKKworCWlmICghcmV0KQorCQl2cmVnLT51ViA9IHVWOwogCW11dGV4X3VubG9jaygmdnJlZy0+bG9jayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNjc0LDYgKzY3OCw3IEBACiAJdnJlZy0+ZGVzYy5vd25lciA9IFRISVNfTU9EVUxFOwogCXZyZWctPmRlc2MudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFOwogCXZyZWctPmRlc2MubmFtZSA9IHBkZXYtPmRldi5vZl9ub2RlLT5uYW1lOworCXZyZWctPmRlc2Muc3VwcGx5X25hbWUgPSAidmluIjsKIAogCXZyZWctPnJwbSA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKIAlpZiAoIXZyZWctPnJwbSkgewpAQCAtNzY4LDcgKzc3Myw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWlmIChmb3JjZV9tb2RlIDwgMCkgeworCQlpZiAoZm9yY2VfbW9kZSA9PSAtMSkgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCBmb3JjZSBtb2RlXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9yazgwOC1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3JrODA4LXJlZ3VsYXRvci5jCmluZGV4IGM5NGEzZTAuLjFmOTNiNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3JrODA4LXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3JrODA4LXJlZ3VsYXRvci5jCkBAIC05Nyw3ICs5Nyw3IEBACiAJCQkJICBSSzgwOF9SQU1QX1JBVEVfTUFTSywgcmFtcF92YWx1ZSk7CiB9CiAKLWludCByazgwOF9zZXRfc3VzcGVuZF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCBpbnQgdXYpCitzdGF0aWMgaW50IHJrODA4X3NldF9zdXNwZW5kX3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsIGludCB1dikKIHsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCWludCBzZWwgPSByZWd1bGF0b3JfbWFwX3ZvbHRhZ2VfbGluZWFyX3JhbmdlKHJkZXYsIHV2LCB1dik7CkBAIC0xMTIsNyArMTEyLDcgQEAKIAkJCQkgIHNlbCk7CiB9CiAKLWludCByazgwOF9zZXRfc3VzcGVuZF9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCitzdGF0aWMgaW50IHJrODA4X3NldF9zdXNwZW5kX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCkBAIC0xMjMsNyArMTIzLDcgQEAKIAkJCQkgIDApOwogfQogCi1pbnQgcms4MDhfc2V0X3N1c3BlbmRfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3N0YXRpYyBpbnQgcms4MDhfc2V0X3N1c3BlbmRfZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9ydDUwMzMtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9ydDUwMzMtcmVndWxhdG9yLmMKaW5kZXggODcwY2M0OS4uOTZkMmMxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvcnQ1MDMzLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3J0NTAzMy1yZWd1bGF0b3IuYwpAQCAtMzYsNiArMzYsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3JfZGVzYyBydDUwMzNfc3VwcG9ydGVkX3JlZ3VsYXRvcnNbXSA9IHsKIAlbUlQ1MDMzX0JVQ0tdID0gewogCQkubmFtZQkJPSAiQlVDSyIsCisJCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiQlVDSyIpLAorCQkucmVndWxhdG9yc19ub2RlID0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCiAJCS5pZAkJPSBSVDUwMzNfQlVDSywKIAkJLm9wcwkJPSAmcnQ1MDMzX2J1Y2tfb3BzLAogCQkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwKQEAgLTUwLDYgKzUyLDggQEAKIAl9LAogCVtSVDUwMzNfTERPXSA9IHsKIAkJLm5hbWUJCT0gIkxETyIsCisJCS5vZl9tYXRjaAk9IG9mX21hdGNoX3B0cigiTERPIiksCisJCS5yZWd1bGF0b3JzX25vZGUgPSBvZl9tYXRjaF9wdHIoInJlZ3VsYXRvcnMiKSwKIAkJLmlkCQk9IFJUNTAzM19MRE8sCiAJCS5vcHMJCT0gJnJ0NTAzM19idWNrX29wcywKIAkJLnR5cGUJCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCkBAIC02NCw2ICs2OCw4IEBACiAJfSwKIAlbUlQ1MDMzX1NBRkVfTERPXSA9IHsKIAkJLm5hbWUJCT0gIlNBRkVfTERPIiwKKwkJLm9mX21hdGNoCT0gb2ZfbWF0Y2hfcHRyKCJTQUZFX0xETyIpLAorCQkucmVndWxhdG9yc19ub2RlID0gb2ZfbWF0Y2hfcHRyKCJyZWd1bGF0b3JzIiksCiAJCS5pZAkJPSBSVDUwMzNfU0FGRV9MRE8sCiAJCS5vcHMJCT0gJnJ0NTAzM19zYWZlX2xkb19vcHMsCiAJCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLApAQCAtODEsNyArODcsNyBAQAogCWludCByZXQsIGk7CiAJc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgY29uZmlnID0ge307CiAKLQljb25maWcuZGV2ID0gJnBkZXYtPmRldjsKKwljb25maWcuZGV2ID0gcnQ1MDMzLT5kZXY7CiAJY29uZmlnLmRyaXZlcl9kYXRhID0gcnQ1MDMzOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnQ1MDMzX3N1cHBvcnRlZF9yZWd1bGF0b3JzKTsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wczExLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9zMm1wczExLmMKaW5kZXggMjgwOWFlMC4uZmY4MjgxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvczJtcHMxMS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3MybXBzMTEuYwpAQCAtNDA1LDYgKzQwNSw0MCBAQAogCS5lbmFibGVfbWFzawk9IFMyTVBTMTRfRU5BQkxFX01BU0sJCQlcCiB9CiAKKyNkZWZpbmUgcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrNyhudW0sIG1pbiwgc3RlcCwgbWluX3NlbCkgewlcCisJLm5hbWUJCT0gIkJVQ0siI251bSwJCQkJXAorCS5pZAkJPSBTMk1QUzEzX0JVQ0sjI251bSwJCQlcCisJLm9wcwkJPSAmczJtcHMxNF9yZWdfb3BzLAkJCVwKKwkudHlwZQkJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAkJCQlcCisJLm1pbl91VgkJPSBtaW4sCQkJCQlcCisJLnVWX3N0ZXAJPSBzdGVwLAkJCQkJXAorCS5saW5lYXJfbWluX3NlbAk9IG1pbl9zZWwsCQkJCVwKKwkubl92b2x0YWdlcwk9IFMyTVBTMTRfQlVDS19OX1ZPTFRBR0VTLAkJXAorCS5yYW1wX2RlbGF5CT0gUzJNUFMxM19CVUNLX1JBTVBfREVMQVksCQlcCisJLnZzZWxfcmVnCT0gUzJNUFMxM19SRUdfQjFPVVQgKyAobnVtKSAqIDIgLSAxLAlcCisJLnZzZWxfbWFzawk9IFMyTVBTMTRfQlVDS19WU0VMX01BU0ssCQlcCisJLmVuYWJsZV9yZWcJPSBTMk1QUzEzX1JFR19CMUNUUkwgKyAobnVtIC0gMSkgKiAyLAlcCisJLmVuYWJsZV9tYXNrCT0gUzJNUFMxNF9FTkFCTEVfTUFTSwkJCVwKK30KKworI2RlZmluZSByZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2s4XzEwKG51bSwgbWluLCBzdGVwLCBtaW5fc2VsKSB7CVwKKwkubmFtZQkJPSAiQlVDSyIjbnVtLAkJCQlcCisJLmlkCQk9IFMyTVBTMTNfQlVDSyMjbnVtLAkJCVwKKwkub3BzCQk9ICZzMm1wczE0X3JlZ19vcHMsCQkJXAorCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCVwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCQkJCVwKKwkubWluX3VWCQk9IG1pbiwJCQkJCVwKKwkudVZfc3RlcAk9IHN0ZXAsCQkJCQlcCisJLmxpbmVhcl9taW5fc2VsCT0gbWluX3NlbCwJCQkJXAorCS5uX3ZvbHRhZ2VzCT0gUzJNUFMxNF9CVUNLX05fVk9MVEFHRVMsCQlcCisJLnJhbXBfZGVsYXkJPSBTMk1QUzEzX0JVQ0tfUkFNUF9ERUxBWSwJCVwKKwkudnNlbF9yZWcJPSBTMk1QUzEzX1JFR19CMU9VVCArIChudW0pICogMiAtIDEsCVwKKwkudnNlbF9tYXNrCT0gUzJNUFMxNF9CVUNLX1ZTRUxfTUFTSywJCVwKKwkuZW5hYmxlX3JlZwk9IFMyTVBTMTNfUkVHX0IxQ1RSTCArIChudW0pICogMiAtIDEsCVwKKwkuZW5hYmxlX21hc2sJPSBTMk1QUzE0X0VOQUJMRV9NQVNLCQkJXAorfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIHMybXBzMTNfcmVndWxhdG9yc1tdID0gewogCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfbGRvKDEsICBNSU5fODAwX01WLCAgU1RFUF8xMl81X01WLCAweDAwKSwKIAlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2xkbygyLCAgTUlOXzE0MDBfTVYsIFNURVBfNTBfTVYsICAgMHgwQyksCkBAIC00NTIsMTAgKzQ4NiwxMCBAQAogCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjayg0LCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCiAJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDUsICBNSU5fNTAwX01WLCAgU1RFUF82XzI1X01WLCAweDEwKSwKIAlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soNiwgIE1JTl81MDBfTVYsICBTVEVQXzZfMjVfTVYsIDB4MTApLAotCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjayg3LCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCi0JcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrKDgsICBNSU5fMTAwMF9NViwgU1RFUF8xMl81X01WLCAweDIwKSwKLQlyZWd1bGF0b3JfZGVzY19zMm1wczEzX2J1Y2soOSwgIE1JTl8xMDAwX01WLCBTVEVQXzEyXzVfTVYsIDB4MjApLAotCXJlZ3VsYXRvcl9kZXNjX3MybXBzMTNfYnVjaygxMCwgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrNyg3LCAgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrOF8xMCg4LCAgTUlOXzEwMDBfTVYsIFNURVBfMTJfNV9NViwgMHgyMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrOF8xMCg5LCAgTUlOXzEwMDBfTVYsIFNURVBfMTJfNV9NViwgMHgyMCksCisJcmVndWxhdG9yX2Rlc2NfczJtcHMxM19idWNrOF8xMCgxMCwgTUlOXzUwMF9NViwgIFNURVBfNl8yNV9NViwgMHgxMCksCiB9OwogCiBzdGF0aWMgaW50IHMybXBzMTRfcmVndWxhdG9yX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDIzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwMjMtcmVndWxhdG9yLmMKaW5kZXggNzM4MGFmOC4uYjk0MWU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwMjMtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwMjMtcmVndWxhdG9yLmMKQEAgLTE3Myw3ICsxNzMsNyBAQAogfQogCiAvKiBPcGVyYXRpb25zIHBlcm1pdHRlZCBvbiBWRENEQ3ggKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0cHM2NTAyM19kY2RjX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0cHM2NTAyM19kY2RjX29wcyA9IHsKIAkuaXNfZW5hYmxlZCA9IHJlZ3VsYXRvcl9pc19lbmFibGVkX3JlZ21hcCwKIAkuZW5hYmxlID0gcmVndWxhdG9yX2VuYWJsZV9yZWdtYXAsCiAJLmRpc2FibGUgPSByZWd1bGF0b3JfZGlzYWJsZV9yZWdtYXAsCkBAIC0xODQsNyArMTg0LDcgQEAKIH07CiAKIC8qIE9wZXJhdGlvbnMgcGVybWl0dGVkIG9uIExET3ggKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB0cHM2NTAyM19sZG9fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZWd1bGF0b3Jfb3BzIHRwczY1MDIzX2xkb19vcHMgPSB7CiAJLmlzX2VuYWJsZWQgPSByZWd1bGF0b3JfaXNfZW5hYmxlZF9yZWdtYXAsCiAJLmVuYWJsZSA9IHJlZ3VsYXRvcl9lbmFibGVfcmVnbWFwLAogCS5kaXNhYmxlID0gcmVndWxhdG9yX2Rpc2FibGVfcmVnbWFwLApAQCAtMTk0LDcgKzE5NCw3IEBACiAJLm1hcF92b2x0YWdlID0gcmVndWxhdG9yX21hcF92b2x0YWdlX2FzY2VuZCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyB0cHM2NTAyM19yZWdtYXBfY29uZmlnID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIHRwczY1MDIzX3JlZ21hcF9jb25maWcgPSB7CiAJLnJlZ19iaXRzID0gOCwKIAkudmFsX2JpdHMgPSA4LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL2hjdG9zeXMuYyBiL2RyaXZlcnMvcnRjL2hjdG9zeXMuYwppbmRleCA0YWE2MGQ3Li42YzcxOWYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9oY3Rvc3lzLmMKKysrIGIvZHJpdmVycy9ydGMvaGN0b3N5cy5jCkBAIC0yNiw3ICsyNiw3IEBACiB7CiAJaW50IGVyciA9IC1FTk9ERVY7CiAJc3RydWN0IHJ0Y190aW1lIHRtOwotCXN0cnVjdCB0aW1lc3BlYyB0diA9IHsKKwlzdHJ1Y3QgdGltZXNwZWM2NCB0djY0ID0gewogCQkudHZfbnNlYyA9IE5TRUNfUEVSX1NFQyA+PiAxLAogCX07CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHJ0Y19jbGFzc19vcGVuKENPTkZJR19SVENfSENUT1NZU19ERVZJQ0UpOwpAQCAtNDUsMjUgKzQ1LDE3IEBACiAKIAl9CiAKLQllcnIgPSBydGNfdmFsaWRfdG0oJnRtKTsKLQlpZiAoZXJyKSB7Ci0JCWRldl9lcnIocnRjLT5kZXYucGFyZW50LAotCQkJImhjdG9zeXM6IGludmFsaWQgZGF0ZS90aW1lXG4iKTsKLQkJZ290byBlcnJfaW52YWxpZDsKLQl9CisJdHY2NC50dl9zZWMgPSBydGNfdG1fdG9fdGltZTY0KCZ0bSk7CiAKLQlydGNfdG1fdG9fdGltZSgmdG0sICZ0di50dl9zZWMpOwotCi0JZXJyID0gZG9fc2V0dGltZW9mZGF5KCZ0dik7CisJZXJyID0gZG9fc2V0dGltZW9mZGF5NjQoJnR2NjQpOwogCiAJZGV2X2luZm8ocnRjLT5kZXYucGFyZW50LAogCQkic2V0dGluZyBzeXN0ZW0gY2xvY2sgdG8gIgotCQkiJWQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkIFVUQyAoJXUpXG4iLAorCQkiJWQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkIFVUQyAoJWxsZClcbiIsCiAJCXRtLnRtX3llYXIgKyAxOTAwLCB0bS50bV9tb24gKyAxLCB0bS50bV9tZGF5LAogCQl0bS50bV9ob3VyLCB0bS50bV9taW4sIHRtLnRtX3NlYywKLQkJKHVuc2lnbmVkIGludCkgdHYudHZfc2VjKTsKKwkJKGxvbmcgbG9uZykgdHY2NC50dl9zZWMpOwogCi1lcnJfaW52YWxpZDoKIGVycl9yZWFkOgogCXJ0Y19jbGFzc19jbG9zZShydGMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYyBiL2RyaXZlcnMvcnRjL2ludGVyZmFjZS5jCmluZGV4IDQ1YmZjMjhlZS4uMzcyMTVjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMKQEAgLTczLDEwICs3Myw4IEBACiAJZWxzZSBpZiAocnRjLT5vcHMtPnNldF90aW1lKQogCQllcnIgPSBydGMtPm9wcy0+c2V0X3RpbWUocnRjLT5kZXYucGFyZW50LCB0bSk7CiAJZWxzZSBpZiAocnRjLT5vcHMtPnNldF9tbXNzKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc2VjczsKLQkJZXJyID0gcnRjX3RtX3RvX3RpbWUodG0sICZzZWNzKTsKLQkJaWYgKGVyciA9PSAwKQotCQkJZXJyID0gcnRjLT5vcHMtPnNldF9tbXNzKHJ0Yy0+ZGV2LnBhcmVudCwgc2Vjcyk7CisJCXRpbWU2NF90IHNlY3M2NCA9IHJ0Y190bV90b190aW1lNjQodG0pOworCQllcnIgPSBydGMtPm9wcy0+c2V0X21tc3MocnRjLT5kZXYucGFyZW50LCBzZWNzNjQpOwogCX0gZWxzZQogCQllcnIgPSAtRUlOVkFMOwogCkBAIC0xMDUsNyArMTAzLDcgQEAKIAogCQllcnIgPSBydGMtPm9wcy0+cmVhZF90aW1lKHJ0Yy0+ZGV2LnBhcmVudCwgJm9sZCk7CiAJCWlmIChlcnIgPT0gMCkgewotCQkJcnRjX3RpbWVfdG9fdG0oc2VjcywgJm5ldyk7CisJCQlydGNfdGltZTY0X3RvX3RtKHNlY3MsICZuZXcpOwogCiAJCQkvKgogCQkJICogYXZvaWQgd3JpdGluZyB3aGVuIHdlJ3JlIGdvaW5nIHRvIGNoYW5nZSB0aGUgZGF5IG9mCkBAIC0xNTcsNyArMTU1LDcgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBydGNfdGltZSBiZWZvcmUsIG5vdzsKIAlpbnQgZmlyc3RfdGltZSA9IDE7Ci0JdW5zaWduZWQgbG9uZyB0X25vdywgdF9hbG07CisJdGltZTY0X3QgdF9ub3csIHRfYWxtOwogCWVudW0geyBub25lLCBkYXksIG1vbnRoLCB5ZWFyIH0gbWlzc2luZyA9IG5vbmU7CiAJdW5zaWduZWQgZGF5czsKIApAQCAtMjU4LDggKzI1Niw4IEBACiAJfQogCiAJLyogd2l0aCBsdWNrLCBubyByb2xsb3ZlciBpcyBuZWVkZWQgKi8KLQlydGNfdG1fdG9fdGltZSgmbm93LCAmdF9ub3cpOwotCXJ0Y190bV90b190aW1lKCZhbGFybS0+dGltZSwgJnRfYWxtKTsKKwl0X25vdyA9IHJ0Y190bV90b190aW1lNjQoJm5vdyk7CisJdF9hbG0gPSBydGNfdG1fdG9fdGltZTY0KCZhbGFybS0+dGltZSk7CiAJaWYgKHRfbm93IDwgdF9hbG0pCiAJCWdvdG8gZG9uZTsKIApAQCAtMjczLDcgKzI3MSw3IEBACiAJY2FzZSBkYXk6CiAJCWRldl9kYmcoJnJ0Yy0+ZGV2LCAiYWxhcm0gcm9sbG92ZXI6ICVzXG4iLCAiZGF5Iik7CiAJCXRfYWxtICs9IDI0ICogNjAgKiA2MDsKLQkJcnRjX3RpbWVfdG9fdG0odF9hbG0sICZhbGFybS0+dGltZSk7CisJCXJ0Y190aW1lNjRfdG9fdG0odF9hbG0sICZhbGFybS0+dGltZSk7CiAJCWJyZWFrOwogCiAJLyogTW9udGggcm9sbG92ZXIgLi4uIGlmIGl0J3MgdGhlIDMxdGgsIGFuIGFsYXJtIG9uIHRoZSAzcmQgd2lsbApAQCAtMzQ2LDE5ICszNDQsMTkgQEAKIHN0YXRpYyBpbnQgX19ydGNfc2V0X2FsYXJtKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfd2thbHJtICphbGFybSkKIHsKIAlzdHJ1Y3QgcnRjX3RpbWUgdG07Ci0JbG9uZyBub3csIHNjaGVkdWxlZDsKKwl0aW1lNjRfdCBub3csIHNjaGVkdWxlZDsKIAlpbnQgZXJyOwogCiAJZXJyID0gcnRjX3ZhbGlkX3RtKCZhbGFybS0+dGltZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQlydGNfdG1fdG9fdGltZSgmYWxhcm0tPnRpbWUsICZzY2hlZHVsZWQpOworCXNjaGVkdWxlZCA9IHJ0Y190bV90b190aW1lNjQoJmFsYXJtLT50aW1lKTsKIAogCS8qIE1ha2Ugc3VyZSB3ZSdyZSBub3Qgc2V0dGluZyBhbGFybXMgaW4gdGhlIHBhc3QgKi8KIAllcnIgPSBfX3J0Y19yZWFkX3RpbWUocnRjLCAmdG0pOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JcnRjX3RtX3RvX3RpbWUoJnRtLCAmbm93KTsKKwlub3cgPSBydGNfdG1fdG9fdGltZTY0KCZ0bSk7CiAJaWYgKHNjaGVkdWxlZCA8PSBub3cpCiAJCXJldHVybiAtRVRJTUU7CiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwppbmRleCBkMDQ5MzkzLi43OTljMzRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCkBAIC0zMDQsMTIgKzMwNCwxMiBAQAogCQkgKiBOb3Qgc3VwcG9ydGVkIGhlcmUuCiAJCSAqLwogCQl7Ci0JCQl1bnNpZ25lZCBsb25nIG5vdywgdGhlbjsKKwkJCXRpbWU2NF90IG5vdywgdGhlbjsKIAogCQkJZXJyID0gcnRjX3JlYWRfdGltZShydGMsICZ0bSk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gZXJyOwotCQkJcnRjX3RtX3RvX3RpbWUoJnRtLCAmbm93KTsKKwkJCW5vdyA9IHJ0Y190bV90b190aW1lNjQoJnRtKTsKIAogCQkJYWxhcm0udGltZS50bV9tZGF5ID0gdG0udG1fbWRheTsKIAkJCWFsYXJtLnRpbWUudG1fbW9uID0gdG0udG1fbW9uOwpAQCAtMzE3LDExICszMTcsMTEgQEAKIAkJCWVyciAgPSBydGNfdmFsaWRfdG0oJmFsYXJtLnRpbWUpOwogCQkJaWYgKGVyciA8IDApCiAJCQkJcmV0dXJuIGVycjsKLQkJCXJ0Y190bV90b190aW1lKCZhbGFybS50aW1lLCAmdGhlbik7CisJCQl0aGVuID0gcnRjX3RtX3RvX3RpbWU2NCgmYWxhcm0udGltZSk7CiAKIAkJCS8qIGFsYXJtIG1heSBuZWVkIHRvIHdyYXAgaW50byB0b21vcnJvdyAqLwogCQkJaWYgKHRoZW4gPCBub3cpIHsKLQkJCQlydGNfdGltZV90b190bShub3cgKyAyNCAqIDYwICogNjAsICZ0bSk7CisJCQkJcnRjX3RpbWU2NF90b190bShub3cgKyAyNCAqIDYwICogNjAsICZ0bSk7CiAJCQkJYWxhcm0udGltZS50bV9tZGF5ID0gdG0udG1fbWRheTsKIAkJCQlhbGFybS50aW1lLnRtX21vbiA9IHRtLnRtX21vbjsKIAkJCQlhbGFybS50aW1lLnRtX3llYXIgPSB0bS50bV95ZWFyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWVmaS5jIGIvZHJpdmVycy9ydGMvcnRjLWVmaS5jCmluZGV4IGIzN2IwYzguLmNiOTg5Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1lZmkuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZWZpLmMKQEAgLTIxOCw2ICsyMTgsNyBAQAogCWlmIChJU19FUlIocnRjKSkKIAkJcmV0dXJuIFBUUl9FUlIocnRjKTsKIAorCXJ0Yy0+dWllX3Vuc3VwcG9ydGVkID0gMTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHJ0Yyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zNW0uYyBiL2RyaXZlcnMvcnRjL3J0Yy1zNW0uYwppbmRleCBiNWU3YzQ2Li44OWFjMWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtczVtLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXM1bS5jCkBAIC04MzIsNiArODMyLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkIHM1bV9ydGNfaWRbXSA9IHsKIAl7ICJzNW0tcnRjIiwJCVM1TTg3NjdYIH0sCiAJeyAiczJtcHMxNC1ydGMiLAlTMk1QUzE0WCB9LAorCXsgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHM1bV9ydGNfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvc3lzdG9oYy5jIGIvZHJpdmVycy9ydGMvc3lzdG9oYy5jCmluZGV4IGJmM2UyNDIuLmViNzE4NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3N5c3RvaGMuYworKysgYi9kcml2ZXJzL3J0Yy9zeXN0b2hjLmMKQEAgLTIwLDE2ICsyMCwxNiBAQAogICoKICAqIElmIHRlbXBvcmFyeSBmYWlsdXJlIGlzIGluZGljYXRlZCB0aGUgY2FsbGVyIHNob3VsZCB0cnkgYWdhaW4gJ3Nvb24nCiAgKi8KLWludCBydGNfc2V0X250cF90aW1lKHN0cnVjdCB0aW1lc3BlYyBub3cpCitpbnQgcnRjX3NldF9udHBfdGltZShzdHJ1Y3QgdGltZXNwZWM2NCBub3cpCiB7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YzsKIAlzdHJ1Y3QgcnRjX3RpbWUgdG07CiAJaW50IGVyciA9IC1FTk9ERVY7CiAKIAlpZiAobm93LnR2X25zZWMgPCAoTlNFQ19QRVJfU0VDID4+IDEpKQotCQlydGNfdGltZV90b190bShub3cudHZfc2VjLCAmdG0pOworCQlydGNfdGltZTY0X3RvX3RtKG5vdy50dl9zZWMsICZ0bSk7CiAJZWxzZQotCQlydGNfdGltZV90b190bShub3cudHZfc2VjICsgMSwgJnRtKTsKKwkJcnRjX3RpbWU2NF90b190bShub3cudHZfc2VjICsgMSwgJnRtKTsKIAogCXJ0YyA9IHJ0Y19jbGFzc19vcGVuKENPTkZJR19SVENfSENUT1NZU19ERVZJQ0UpOwogCWlmIChydGMpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCmluZGV4IDRhYmYxMTk2Li5iZTM0ZWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTY3NCw4ICs2NzQsOSBAQAogdW5zaWduZWQgaW50IGRhc2RfZ2xvYmFsX3Byb2ZpbGVfbGV2ZWwgPSBEQVNEX1BST0ZJTEVfT0ZGOwogCiAjaWZkZWYgQ09ORklHX0RBU0RfUFJPRklMRQotc3RydWN0IGRhc2RfcHJvZmlsZV9pbmZvIGRhc2RfZ2xvYmFsX3Byb2ZpbGVfZGF0YTsKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkYXNkX2dsb2JhbF9wcm9maWxlX2RlbnRyeTsKK3N0cnVjdCBkYXNkX3Byb2ZpbGUgZGFzZF9nbG9iYWxfcHJvZmlsZSA9IHsKKwkubG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGRhc2RfZ2xvYmFsX3Byb2ZpbGUubG9jayksCit9Owogc3RhdGljIHN0cnVjdCBkZW50cnkgKmRhc2RfZGVidWdmc19nbG9iYWxfZW50cnk7CiAKIC8qCkBAIC02OTYsMTEgKzY5NywxMyBAQAogCQkJaWYgKCsrY291bnRlciA+PSAzMSkKIAkJCQlicmVhazsKIAotCWlmIChkYXNkX2dsb2JhbF9wcm9maWxlX2xldmVsKSB7Ci0JCWRhc2RfZ2xvYmFsX3Byb2ZpbGVfZGF0YS5kYXNkX2lvX25yX3JlcVtjb3VudGVyXSsrOworCXNwaW5fbG9jaygmZGFzZF9nbG9iYWxfcHJvZmlsZS5sb2NrKTsKKwlpZiAoZGFzZF9nbG9iYWxfcHJvZmlsZS5kYXRhKSB7CisJCWRhc2RfZ2xvYmFsX3Byb2ZpbGUuZGF0YS0+ZGFzZF9pb19ucl9yZXFbY291bnRlcl0rKzsKIAkJaWYgKHJxX2RhdGFfZGlyKHJlcSkgPT0gUkVBRCkKLQkJCWRhc2RfZ2xvYmFsX3Byb2ZpbGVfZGF0YS5kYXNkX3JlYWRfbnJfcmVxW2NvdW50ZXJdKys7CisJCQlkYXNkX2dsb2JhbF9wcm9maWxlLmRhdGEtPmRhc2RfcmVhZF9ucl9yZXFbY291bnRlcl0rKzsKIAl9CisJc3Bpbl91bmxvY2soJmRhc2RfZ2xvYmFsX3Byb2ZpbGUubG9jayk7CiAKIAlzcGluX2xvY2soJmJsb2NrLT5wcm9maWxlLmxvY2spOwogCWlmIChibG9jay0+cHJvZmlsZS5kYXRhKSB7CkBAIC04MjUsOCArODI4LDkgQEAKIAlkYXNkX3Byb2ZpbGVfY291bnRlcihpcnF0aW1lIC8gc2VjdG9ycywgaXJxdGltZXBzX2luZCk7CiAJZGFzZF9wcm9maWxlX2NvdW50ZXIoZW5kdGltZSwgZW5kdGltZV9pbmQpOwogCi0JaWYgKGRhc2RfZ2xvYmFsX3Byb2ZpbGVfbGV2ZWwpIHsKLQkJZGFzZF9wcm9maWxlX2VuZF9hZGRfZGF0YSgmZGFzZF9nbG9iYWxfcHJvZmlsZV9kYXRhLAorCXNwaW5fbG9jaygmZGFzZF9nbG9iYWxfcHJvZmlsZS5sb2NrKTsKKwlpZiAoZGFzZF9nbG9iYWxfcHJvZmlsZS5kYXRhKSB7CisJCWRhc2RfcHJvZmlsZV9lbmRfYWRkX2RhdGEoZGFzZF9nbG9iYWxfcHJvZmlsZS5kYXRhLAogCQkJCQkgIGNxci0+c3RhcnRkZXYgIT0gYmxvY2stPmJhc2UsCiAJCQkJCSAgY3FyLT5jcG1vZGUgPT0gMSwKIAkJCQkJICBycV9kYXRhX2RpcihyZXEpID09IFJFQUQsCkBAIC04MzUsNiArODM5LDcgQEAKIAkJCQkJICBpcnF0aW1lX2luZCwgaXJxdGltZXBzX2luZCwKIAkJCQkJICBlbmR0aW1lX2luZCk7CiAJfQorCXNwaW5fdW5sb2NrKCZkYXNkX2dsb2JhbF9wcm9maWxlLmxvY2spOwogCiAJc3Bpbl9sb2NrKCZibG9jay0+cHJvZmlsZS5sb2NrKTsKIAlpZiAoYmxvY2stPnByb2ZpbGUuZGF0YSkKQEAgLTg3NiwxMiArODgxLDYgQEAKIAlzcGluX3VubG9ja19iaCgmcHJvZmlsZS0+bG9jayk7CiB9CiAKLXZvaWQgZGFzZF9nbG9iYWxfcHJvZmlsZV9yZXNldCh2b2lkKQotewotCW1lbXNldCgmZGFzZF9nbG9iYWxfcHJvZmlsZV9kYXRhLCAwLCBzaXplb2YoZGFzZF9nbG9iYWxfcHJvZmlsZV9kYXRhKSk7Ci0JZ2V0bnN0aW1lb2ZkYXkoJmRhc2RfZ2xvYmFsX3Byb2ZpbGVfZGF0YS5zdGFydHRvZCk7Ci19Ci0KIGludCBkYXNkX3Byb2ZpbGVfb24oc3RydWN0IGRhc2RfcHJvZmlsZSAqcHJvZmlsZSkKIHsKIAlzdHJ1Y3QgZGFzZF9wcm9maWxlX2luZm8gKmRhdGE7CkBAIC05NDksMTIgKzk0OCwyMCBAQAogCQlkYXNkX3Byb2ZpbGVfcmVzZXQocHJvZik7CiAJfSBlbHNlIGlmIChzdHJuY21wKHN0ciwgIm9uIiwgMikgPT0gMCkgewogCQlyYyA9IGRhc2RfcHJvZmlsZV9vbihwcm9mKTsKLQkJaWYgKCFyYykKLQkJCXJjID0gdXNlcl9sZW47CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCQlyYyA9IHVzZXJfbGVuOworCQlpZiAocHJvZiA9PSAmZGFzZF9nbG9iYWxfcHJvZmlsZSkgeworCQkJZGFzZF9wcm9maWxlX3Jlc2V0KHByb2YpOworCQkJZGFzZF9nbG9iYWxfcHJvZmlsZV9sZXZlbCA9IERBU0RfUFJPRklMRV9HTE9CQUxfT05MWTsKKwkJfQogCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICJvZmYiLCAzKSA9PSAwKSB7CisJCWlmIChwcm9mID09ICZkYXNkX2dsb2JhbF9wcm9maWxlKQorCQkJZGFzZF9nbG9iYWxfcHJvZmlsZV9sZXZlbCA9IERBU0RfUFJPRklMRV9PRkY7CiAJCWRhc2RfcHJvZmlsZV9vZmYocHJvZik7CiAJfSBlbHNlCiAJCXJjID0gLUVJTlZBTDsKK291dDoKIAl2ZnJlZShidWZmZXIpOwogCXJldHVybiByYzsKIH0KQEAgLTEwNDQsNTcgKzEwNTEsNiBAQAogCS53cml0ZQkJPSBkYXNkX3N0YXRzX3dyaXRlLAogfTsKIAotc3RhdGljIHNzaXplX3QgZGFzZF9zdGF0c19nbG9iYWxfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJICAgICAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkgICAgICAgc2l6ZV90IHVzZXJfbGVuLCBsb2ZmX3QgKnBvcykKLXsKLQljaGFyICpidWZmZXIsICpzdHI7Ci0Jc3NpemVfdCByYzsKLQotCWlmICh1c2VyX2xlbiA+IDY1NTM2KQotCQl1c2VyX2xlbiA9IDY1NTM2OwotCWJ1ZmZlciA9IGRhc2RfZ2V0X3VzZXJfc3RyaW5nKHVzZXJfYnVmLCB1c2VyX2xlbik7Ci0JaWYgKElTX0VSUihidWZmZXIpKQotCQlyZXR1cm4gUFRSX0VSUihidWZmZXIpOwotCXN0ciA9IHNraXBfc3BhY2VzKGJ1ZmZlcik7Ci0JcmMgPSB1c2VyX2xlbjsKLQlpZiAoc3RybmNtcChzdHIsICJyZXNldCIsIDUpID09IDApIHsKLQkJZGFzZF9nbG9iYWxfcHJvZmlsZV9yZXNldCgpOwotCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICJvbiIsIDIpID09IDApIHsKLQkJZGFzZF9nbG9iYWxfcHJvZmlsZV9yZXNldCgpOwotCQlkYXNkX2dsb2JhbF9wcm9maWxlX2xldmVsID0gREFTRF9QUk9GSUxFX0dMT0JBTF9PTkxZOwotCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICJvZmYiLCAzKSA9PSAwKSB7Ci0JCWRhc2RfZ2xvYmFsX3Byb2ZpbGVfbGV2ZWwgPSBEQVNEX1BST0ZJTEVfT0ZGOwotCX0gZWxzZQotCQlyYyA9IC1FSU5WQUw7Ci0JdmZyZWUoYnVmZmVyKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgZGFzZF9zdGF0c19nbG9iYWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCi17Ci0JaWYgKCFkYXNkX2dsb2JhbF9wcm9maWxlX2xldmVsKSB7Ci0JCXNlcV9wdXRzKG0sICJkaXNhYmxlZFxuIik7Ci0JCXJldHVybiAwOwotCX0KLQlkYXNkX3N0YXRzX3NlcV9wcmludChtLCAmZGFzZF9nbG9iYWxfcHJvZmlsZV9kYXRhKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkYXNkX3N0YXRzX2dsb2JhbF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkYXNkX3N0YXRzX2dsb2JhbF9zaG93LCBOVUxMKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGFzZF9zdGF0c19nbG9iYWxfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gZGFzZF9zdGF0c19nbG9iYWxfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotCS53cml0ZQkJPSBkYXNkX3N0YXRzX2dsb2JhbF93cml0ZSwKLX07Ci0KIHN0YXRpYyB2b2lkIGRhc2RfcHJvZmlsZV9pbml0KHN0cnVjdCBkYXNkX3Byb2ZpbGUgKnByb2ZpbGUsCiAJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpiYXNlX2RlbnRyeSkKIHsKQEAgLTExMjMsMjAgKzEwNzksMTYgQEAKIHN0YXRpYyB2b2lkIGRhc2Rfc3RhdGlzdGljc19yZW1vdmVyb290KHZvaWQpCiB7CiAJZGFzZF9nbG9iYWxfcHJvZmlsZV9sZXZlbCA9IERBU0RfUFJPRklMRV9PRkY7Ci0JZGVidWdmc19yZW1vdmUoZGFzZF9nbG9iYWxfcHJvZmlsZV9kZW50cnkpOwotCWRhc2RfZ2xvYmFsX3Byb2ZpbGVfZGVudHJ5ID0gTlVMTDsKKwlkYXNkX3Byb2ZpbGVfZXhpdCgmZGFzZF9nbG9iYWxfcHJvZmlsZSk7CiAJZGVidWdmc19yZW1vdmUoZGFzZF9kZWJ1Z2ZzX2dsb2JhbF9lbnRyeSk7CiAJZGVidWdmc19yZW1vdmUoZGFzZF9kZWJ1Z2ZzX3Jvb3RfZW50cnkpOwogfQogCiBzdGF0aWMgdm9pZCBkYXNkX3N0YXRpc3RpY3NfY3JlYXRlcm9vdCh2b2lkKQogewotCXVtb2RlX3QgbW9kZTsKIAlzdHJ1Y3QgZGVudHJ5ICpwZGU7CiAKIAlkYXNkX2RlYnVnZnNfcm9vdF9lbnRyeSA9IE5VTEw7Ci0JZGFzZF9kZWJ1Z2ZzX2dsb2JhbF9lbnRyeSA9IE5VTEw7Ci0JZGFzZF9nbG9iYWxfcHJvZmlsZV9kZW50cnkgPSBOVUxMOwogCXBkZSA9IGRlYnVnZnNfY3JlYXRlX2RpcigiZGFzZCIsIE5VTEwpOwogCWlmICghcGRlIHx8IElTX0VSUihwZGUpKQogCQlnb3RvIGVycm9yOwpAQCAtMTE0NSwxMyArMTA5Nyw3IEBACiAJaWYgKCFwZGUgfHwgSVNfRVJSKHBkZSkpCiAJCWdvdG8gZXJyb3I7CiAJZGFzZF9kZWJ1Z2ZzX2dsb2JhbF9lbnRyeSA9IHBkZTsKLQotCW1vZGUgPSAoU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lGUkVHKTsKLQlwZGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdGF0aXN0aWNzIiwgbW9kZSwgZGFzZF9kZWJ1Z2ZzX2dsb2JhbF9lbnRyeSwKLQkJCQkgIE5VTEwsICZkYXNkX3N0YXRzX2dsb2JhbF9mb3BzKTsKLQlpZiAoIXBkZSB8fCBJU19FUlIocGRlKSkKLQkJZ290byBlcnJvcjsKLQlkYXNkX2dsb2JhbF9wcm9maWxlX2RlbnRyeSA9IHBkZTsKKwlkYXNkX3Byb2ZpbGVfaW5pdCgmZGFzZF9nbG9iYWxfcHJvZmlsZSwgZGFzZF9kZWJ1Z2ZzX2dsb2JhbF9lbnRyeSk7CiAJcmV0dXJuOwogCiBlcnJvcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKaW5kZXggOGI1ZDQxMC4uMjI3ZTNkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKQEAgLTY1MSw3ICs2NTEsNyBAQAogI2RlZmluZSBEQVNEX1BST0ZJTEVfR0xPQkFMX09OTFkgMgogCiBleHRlcm4gZGVidWdfaW5mb190ICpkYXNkX2RlYnVnX2FyZWE7Ci1leHRlcm4gc3RydWN0IGRhc2RfcHJvZmlsZV9pbmZvIGRhc2RfZ2xvYmFsX3Byb2ZpbGVfZGF0YTsKK2V4dGVybiBzdHJ1Y3QgZGFzZF9wcm9maWxlIGRhc2RfZ2xvYmFsX3Byb2ZpbGU7CiBleHRlcm4gdW5zaWduZWQgaW50IGRhc2RfZ2xvYmFsX3Byb2ZpbGVfbGV2ZWw7CiBleHRlcm4gY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25zIGRhc2RfZGV2aWNlX29wZXJhdGlvbnM7CiAKQEAgLTcyOCw3ICs3MjgsNiBAQAogdm9pZCBkYXNkX3Byb2ZpbGVfcmVzZXQoc3RydWN0IGRhc2RfcHJvZmlsZSAqKTsKIGludCBkYXNkX3Byb2ZpbGVfb24oc3RydWN0IGRhc2RfcHJvZmlsZSAqKTsKIHZvaWQgZGFzZF9wcm9maWxlX29mZihzdHJ1Y3QgZGFzZF9wcm9maWxlICopOwotdm9pZCBkYXNkX2dsb2JhbF9wcm9maWxlX3Jlc2V0KHZvaWQpOwogY2hhciAqZGFzZF9nZXRfdXNlcl9zdHJpbmcoY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90KTsKIAogLyogZXh0ZXJuYWxzIGluIGRhc2RfZGV2bWFwLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYwppbmRleCA3OGFjOTA1YS4uYWE3YmIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYwpAQCAtMjEyLDE0ICsyMTIsMTUgQEAKIAlzdHJ1Y3QgZGFzZF9wcm9maWxlX2luZm8gKnByb2Y7CiAJaW50IGZhY3RvcjsKIAotCS8qIGNoZWNrIGZvciBhY3RpdmUgcHJvZmlsaW5nICovCi0JaWYgKCFkYXNkX2dsb2JhbF9wcm9maWxlX2xldmVsKSB7CisJc3Bpbl9sb2NrX2JoKCZkYXNkX2dsb2JhbF9wcm9maWxlLmxvY2spOworCXByb2YgPSBkYXNkX2dsb2JhbF9wcm9maWxlLmRhdGE7CisJaWYgKCFwcm9mKSB7CisJCXNwaW5fdW5sb2NrX2JoKCZkYXNkX2dsb2JhbF9wcm9maWxlLmxvY2spOwogCQlzZXFfcHJpbnRmKG0sICJTdGF0aXN0aWNzIGFyZSBvZmYgLSB0aGV5IG1pZ2h0IGJlICIKIAkJCQkgICAgInN3aXRjaGVkIG9uIHVzaW5nICdlY2hvIHNldCBvbiA+ICIKIAkJCQkgICAgIi9wcm9jL2Rhc2Qvc3RhdGlzdGljcydcbiIpOwogCQlyZXR1cm4gMDsKIAl9Ci0JcHJvZiA9ICZkYXNkX2dsb2JhbF9wcm9maWxlX2RhdGE7CiAKIAkvKiBwcmV2ZW50IGNvdW50ZXIgJ292ZXJmbG93JyBvbiBvdXRwdXQgKi8KIAlmb3IgKGZhY3RvciA9IDE7IChwcm9mLT5kYXNkX2lvX3JlcXMgLyBmYWN0b3IpID4gOTk5OTk5OTsKQEAgLTI1NSw2ICsyNTYsNyBAQAogCWRhc2Rfc3RhdGlzdGljc19hcnJheShtLCBwcm9mLT5kYXNkX2lvX3RpbWUzLCBmYWN0b3IpOwogCXNlcV9wcmludGYobSwgIiMgb2YgcmVxIGluIGNoYW5xIGF0IGVucXVldWluZyAoMS4uMzIpIFxuIik7CiAJZGFzZF9zdGF0aXN0aWNzX2FycmF5KG0sIHByb2YtPmRhc2RfaW9fbnJfcmVxLCBmYWN0b3IpOworCXNwaW5fdW5sb2NrX2JoKCZkYXNkX2dsb2JhbF9wcm9maWxlLmxvY2spOwogI2Vsc2UKIAlzZXFfcHJpbnRmKG0sICJTdGF0aXN0aWNzIGFyZSBub3QgYWN0aXZhdGVkIGluIHRoaXMga2VybmVsXG4iKTsKICNlbmRpZgpAQCAtMjkxLDE0ICsyOTMsMTkgQEAKIAkJCQlkYXNkX3N0YXRzX2FsbF9ibG9ja19vZmYoKTsKIAkJCQlnb3RvIG91dF9lcnJvcjsKIAkJCX0KLQkJCWRhc2RfZ2xvYmFsX3Byb2ZpbGVfcmVzZXQoKTsKKwkJCXJjID0gZGFzZF9wcm9maWxlX29uKCZkYXNkX2dsb2JhbF9wcm9maWxlKTsKKwkJCWlmIChyYykgeworCQkJCWRhc2Rfc3RhdHNfYWxsX2Jsb2NrX29mZigpOworCQkJCWdvdG8gb3V0X2Vycm9yOworCQkJfQorCQkJZGFzZF9wcm9maWxlX3Jlc2V0KCZkYXNkX2dsb2JhbF9wcm9maWxlKTsKIAkJCWRhc2RfZ2xvYmFsX3Byb2ZpbGVfbGV2ZWwgPSBEQVNEX1BST0ZJTEVfT047CiAJCQlwcl9pbmZvKCJUaGUgc3RhdGlzdGljcyBmZWF0dXJlIGhhcyBiZWVuIHN3aXRjaGVkICIKIAkJCQkib25cbiIpOwogCQl9IGVsc2UgaWYgKHN0cmNtcChzdHIsICJvZmYiKSA9PSAwKSB7Ci0JCQkvKiBzd2l0Y2ggb2ZmIGFuZCByZXNldCBzdGF0aXN0aWNzIHByb2ZpbGluZyAqLworCQkJLyogc3dpdGNoIG9mZiBzdGF0aXN0aWNzIHByb2ZpbGluZyAqLwogCQkJZGFzZF9nbG9iYWxfcHJvZmlsZV9sZXZlbCA9IERBU0RfUFJPRklMRV9PRkY7Ci0JCQlkYXNkX2dsb2JhbF9wcm9maWxlX3Jlc2V0KCk7CisJCQlkYXNkX3Byb2ZpbGVfb2ZmKCZkYXNkX2dsb2JhbF9wcm9maWxlKTsKIAkJCWRhc2Rfc3RhdHNfYWxsX2Jsb2NrX29mZigpOwogCQkJcHJfaW5mbygiVGhlIHN0YXRpc3RpY3MgZmVhdHVyZSBoYXMgYmVlbiBzd2l0Y2hlZCAiCiAJCQkJIm9mZlxuIik7CkBAIC0zMDYsNyArMzEzLDcgQEAKIAkJCWdvdG8gb3V0X3BhcnNlX2Vycm9yOwogCX0gZWxzZSBpZiAoc3RybmNtcChzdHIsICJyZXNldCIsIDUpID09IDApIHsKIAkJLyogcmVzZXQgdGhlIHN0YXRpc3RpY3MgKi8KLQkJZGFzZF9nbG9iYWxfcHJvZmlsZV9yZXNldCgpOworCQlkYXNkX3Byb2ZpbGVfcmVzZXQoJmRhc2RfZ2xvYmFsX3Byb2ZpbGUpOwogCQlkYXNkX3N0YXRzX2FsbF9ibG9ja19yZXNldCgpOwogCQlwcl9pbmZvKCJUaGUgc3RhdGlzdGljcyBoYXZlIGJlZW4gcmVzZXRcbiIpOwogCX0gZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kY3NzYmxrLmMKaW5kZXggYjU1MGM4Yy4uN2Y5MDAyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rjc3NibGsuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGNzc2Jsay5jCkBAIC00MzgsNyArNDM4LDEzIEBACiAJCQlwcl9pbmZvKCJBbGwgRENTU3MgdGhhdCBtYXAgdG8gZGV2aWNlICVzIGFyZSAiCiAJCQkJInNhdmVkXG4iLCBkZXZfaW5mby0+c2VnbWVudF9uYW1lKTsKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXZfaW5mby0+c2VnX2xpc3QsIGxoKSB7Ci0JCQkJc2VnbWVudF9zYXZlKGVudHJ5LT5zZWdtZW50X25hbWUpOworCQkJCWlmIChlbnRyeS0+c2VnbWVudF90eXBlID09IFNFR19UWVBFX0VOIHx8CisJCQkJICAgIGVudHJ5LT5zZWdtZW50X3R5cGUgPT0gU0VHX1RZUEVfU04pCisJCQkJCXByX3dhcm4oIkRDU1MgJXMgaXMgb2YgdHlwZSBTTiBvciBFTiIKKwkJCQkJCSIgYW5kIGNhbm5vdCBiZSBzYXZlZFxuIiwKKwkJCQkJCWVudHJ5LT5zZWdtZW50X25hbWUpOworCQkJCWVsc2UKKwkJCQkJc2VnbWVudF9zYXZlKGVudHJ5LT5zZWdtZW50X25hbWUpOwogCQkJfQogCQl9ICBlbHNlIHsKIAkJCS8vIGRldmljZSBpcyBidXN5ID0+IHdlIHNhdmUgaXQgd2hlbiBpdCBiZWNvbWVzCkBAIC03OTcsNyArODAzLDEyIEBACiAJCXByX2luZm8oIkRldmljZSAlcyBoYXMgYmVjb21lIGlkbGUgYW5kIGlzIGJlaW5nIHNhdmVkICIKIAkJCSJub3dcbiIsIGRldl9pbmZvLT5zZWdtZW50X25hbWUpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2X2luZm8tPnNlZ19saXN0LCBsaCkgewotCQkJc2VnbWVudF9zYXZlKGVudHJ5LT5zZWdtZW50X25hbWUpOworCQkJaWYgKGVudHJ5LT5zZWdtZW50X3R5cGUgPT0gU0VHX1RZUEVfRU4gfHwKKwkJCSAgICBlbnRyeS0+c2VnbWVudF90eXBlID09IFNFR19UWVBFX1NOKQorCQkJCXByX3dhcm4oIkRDU1MgJXMgaXMgb2YgdHlwZSBTTiBvciBFTiBhbmQgY2Fubm90IgorCQkJCQkiIGJlIHNhdmVkXG4iLCBlbnRyeS0+c2VnbWVudF9uYW1lKTsKKwkJCWVsc2UKKwkJCQlzZWdtZW50X3NhdmUoZW50cnktPnNlZ21lbnRfbmFtZSk7CiAJCX0KIAkJZGV2X2luZm8tPnNhdmVfcGVuZGluZyA9IDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X2Z0cC5jCmluZGV4IDRiZDYzMzIuLmQ0YjYxZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9mdHAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfZnRwLmMKQEAgLTIwMCwxMCArMjAwLDkgQEAKIAlyYyA9IGhtY2Rydl9mdHBfc3RhcnR1cCgpOwogCiAJaWYgKHJjKQotCQlyZXR1cm4gcmM7CisJCWdvdG8gb3V0OwogCiAJcmMgPSBobWNkcnZfZnRwX2RvKCZmdHApOwotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgZnRwLmJ1Zik7CiAJaG1jZHJ2X2Z0cF9zaHV0ZG93bigpOwogCiAJc3dpdGNoIChyYykgewpAQCAtMjE2LDcgKzIxNSw4IEBACiAJCQlyYyA9IDA7IC8qIGNsZWFyIGxlbmd0aCAoc3VjY2VzcykgKi8KIAkJYnJlYWs7CiAJfSAvKiBzd2l0Y2ggKi8KLQorb3V0OgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgZnRwLmJ1Zik7CiAJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTChobWNkcnZfZnRwX3Byb2JlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9tb2QuYyBiL2RyaXZlcnMvczM5MC9jaGFyL2htY2Rydl9tb2QuYwppbmRleCA1MDVjNmE3Li4yNTFhMzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9obWNkcnZfbW9kLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvaG1jZHJ2X21vZC5jCkBAIC0xMSw3ICsxMSw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogCiAjaW5jbHVkZSAiaG1jZHJ2X2Z0cC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9lYXJseS5jCmluZGV4IDViZDZjYjEuLmRhZjZjZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfZWFybHkuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2Vhcmx5LmMKQEAgLTIwLDI2ICsyMCwzMSBAQAogCXN0cnVjdAlzY2NiX2hlYWRlciBoZWFkZXI7CS8qIDAtNyAqLwogCXUxNglybm1heDsJCQkvKiA4LTkgKi8KIAl1OAlybnNpemU7CQkJLyogMTAgKi8KLQl1OAlfcmVzZXJ2ZWQwWzE2IC0gMTFdOwkvKiAxMS0xNSAqLworCXU4CV9wYWRfMTFbMTYgLSAxMV07CS8qIDExLTE1ICovCiAJdTE2CW5jcHVybDsJCQkvKiAxNi0xNyAqLwogCXUxNgljcHVvZmY7CQkJLyogMTgtMTkgKi8KLQl1OAlfcmVzZXJ2ZWQ3WzI0IC0gMjBdOwkvKiAyMC0yMyAqLworCXU4CV9wYWRfMjBbMjQgLSAyMF07CS8qIDIwLTIzICovCiAJdTgJbG9hZHBhcm1bOF07CQkvKiAyNC0zMSAqLwotCXU4CV9yZXNlcnZlZDFbNDggLSAzMl07CS8qIDMyLTQ3ICovCisJdTgJX3BhZF8zMls0MiAtIDMyXTsJLyogMzItNDEgKi8KKwl1OAlmYWM0MjsJCQkvKiA0MiAqLworCXU4CWZhYzQzOwkJCS8qIDQzICovCisJdTgJX3BhZF80NFs0OCAtIDQ0XTsJLyogNDQtNDcgKi8KIAl1NjQJZmFjaWxpdGllczsJCS8qIDQ4LTU1ICovCi0JdTgJX3Jlc2VydmVkMmFbNzYgLSA1Nl07CS8qIDU2LTc1ICovCisJdTgJX3BhZF81Nls2NiAtIDU2XTsJLyogNTYtNjUgKi8KKwl1OAlmYWM2NjsJCQkvKiA2NiAqLworCXU4CV9wYWRfNjdbNzYgLSA2N107CS8qIDY3LTgzICovCiAJdTMyCWliYzsJCQkvKiA3Ni03OSAqLwotCXU4CV9yZXNlcnZlZDJiWzg0IC0gODBdOwkvKiA4MC04MyAqLworCXU4CV9wYWQ4MFs4NCAtIDgwXTsJLyogODAtODMgKi8KIAl1OAlmYWM4NDsJCQkvKiA4NCAqLwogCXU4CWZhYzg1OwkJCS8qIDg1ICovCi0JdTgJX3Jlc2VydmVkM1s5MSAtIDg2XTsJLyogODYtOTAgKi8KKwl1OAlfcGFkXzg2WzkxIC0gODZdOwkvKiA4Ni05MCAqLwogCXU4CWZsYWdzOwkJCS8qIDkxICovCi0JdTgJX3Jlc2VydmVkNFsxMDAgLSA5Ml07CS8qIDkyLTk5ICovCisJdTgJX3BhZF85MlsxMDAgLSA5Ml07CS8qIDkyLTk5ICovCiAJdTMyCXJuc2l6ZTI7CQkvKiAxMDAtMTAzICovCiAJdTY0CXJubWF4MjsJCQkvKiAxMDQtMTExICovCi0JdTgJX3Jlc2VydmVkNVsxMjAgLSAxMTJdOwkvKiAxMTItMTE5ICovCisJdTgJX3BhZF8xMTJbMTIwIC0gMTEyXTsJLyogMTEyLTExOSAqLwogCXUxNgloY3B1YTsJCQkvKiAxMjAtMTIxICovCi0JdTgJX3Jlc2VydmVkNls0MDk2IC0gMTIyXTsJLyogMTIyLTQwOTUgKi8KKwl1OAlfcGFkXzEyMls0MDk2IC0gMTIyXTsJLyogMTIyLTQwOTUgKi8KIH0gX19wYWNrZWQgX19hbGlnbmVkKFBBR0VfU0laRSk7CiAKIHN0YXRpYyBjaGFyIHNjY2JfZWFybHlbUEFHRV9TSVpFXSBfX2FsaWduZWQoUEFHRV9TSVpFKSBfX2luaXRkYXRhOwpAQCAtNTAsNiArNTUsMTAgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2NscF9pcGxfaW5mbyBzY2xwX2lwbF9pbmZvOwogc3RhdGljIHVuc2lnbmVkIGNoYXIgc2NscF9zaWlmOwogc3RhdGljIHUzMiBzY2xwX2liYzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2NscF9tdGlkOworc3RhdGljIHVuc2lnbmVkIGludCBzY2xwX210aWRfY3A7CitzdGF0aWMgdW5zaWduZWQgaW50IHNjbHBfbXRpZF9tYXg7CitzdGF0aWMgdW5zaWduZWQgaW50IHNjbHBfbXRpZF9wcmV2OwogCiB1NjQgc2NscF9mYWNpbGl0aWVzOwogdTggc2NscF9mYWM4NDsKQEAgLTEyOCw3ICsxMzcsNyBAQAogCWJvb3RfY3B1X2FkZHJlc3MgPSBzdGFwKCk7CiAJY3B1ZSA9ICh2b2lkICopc2NjYiArIHNjY2ItPmNwdW9mZjsKIAlmb3IgKGNwdSA9IDA7IGNwdSA8IHNjY2ItPm5jcHVybDsgY3B1ZSsrLCBjcHUrKykgewotCQlpZiAoYm9vdF9jcHVfYWRkcmVzcyAhPSBjcHVlLT5hZGRyZXNzKQorCQlpZiAoYm9vdF9jcHVfYWRkcmVzcyAhPSBjcHVlLT5jb3JlX2lkKQogCQkJY29udGludWU7CiAJCXNjbHBfc2lpZiA9IGNwdWUtPnNpaWY7CiAJCWJyZWFrOwpAQCAtMTM5LDYgKzE0OCwxMSBAQAogCWlmIChzY2NiLT5mbGFncyAmIDB4MikKIAkJc2NscF9pcGxfaW5mby5oYXNfZHVtcCA9IDE7CiAJbWVtY3B5KCZzY2xwX2lwbF9pbmZvLmxvYWRwYXJtLCAmc2NjYi0+bG9hZHBhcm0sIExPQURQQVJNX0xFTik7CisKKwlzY2xwX210aWQgPSAoc2NjYi0+ZmFjNDIgJiAweDgwKSA/IChzY2NiLT5mYWM0MiAmIDMxKSA6IDA7CisJc2NscF9tdGlkX2NwID0gKHNjY2ItPmZhYzQyICYgMHg4MCkgPyAoc2NjYi0+ZmFjNDMgJiAzMSkgOiAwOworCXNjbHBfbXRpZF9tYXggPSBtYXgoc2NscF9tdGlkLCBzY2xwX210aWRfY3ApOworCXNjbHBfbXRpZF9wcmV2ID0gKHNjY2ItPmZhYzQyICYgMHg4MCkgPyAoc2NjYi0+ZmFjNjYgJiAzMSkgOiAwOwogfQogCiBib29sIF9faW5pdCBzY2xwX2hhc19saW5lbW9kZSh2b2lkKQpAQCAtMTc4LDYgKzE5MiwyMSBAQAogfQogRVhQT1JUX1NZTUJPTChzY2xwX2dldF9pYmMpOwogCit1bnNpZ25lZCBpbnQgc2NscF9nZXRfbXRpZCh1OCBjcHVfdHlwZSkKK3sKKwlyZXR1cm4gY3B1X3R5cGUgPyBzY2xwX210aWQgOiBzY2xwX210aWRfY3A7Cit9CisKK3Vuc2lnbmVkIGludCBzY2xwX2dldF9tdGlkX21heCh2b2lkKQoreworCXJldHVybiBzY2xwX210aWRfbWF4OworfQorCit1bnNpZ25lZCBpbnQgc2NscF9nZXRfbXRpZF9wcmV2KHZvaWQpCit7CisJcmV0dXJuIHNjbHBfbXRpZF9wcmV2OworfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciBzY2xwX2ZhY2lsaXRpZXNfZGV0ZWN0KCksIHdoaWNoIGdldHMKICAqIGNhbGxlZCBmcm9tIGVhcmx5LmMgY29kZS4gVGhlIHNjbHBfZmFjaWxpdGllc19kZXRlY3QoKSBmdW5jdGlvbiByZXRyaWV2ZXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKaW5kZXggOWFhNzk3MC4uZGU2OWYwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNHh4LmMKQEAgLTc3MywxMyArNzczLDExIEBACiAJCQkib2NjdXJyZWRcbiIpOwogCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9mYWlsZWQocmVxdWVzdCwgLUVJTyk7CiAJY2FzZSAweDU3OgotCQlpZiAoZGV2aWNlLT5jZGV2LT5pZC5kcml2ZXJfaW5mbyA9PSB0YXBlXzM0ODApIHsKLQkJCS8qIEF0dGVudGlvbiBpbnRlcmNlcHQuICovCi0JCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKLQkJfSBlbHNlIHsKLQkJCS8qIEdsb2JhbCBzdGF0dXMgaW50ZXJjZXB0LiAqLwotCQkJcmV0dXJuIHRhcGVfMzR4eF9lcnBfcmV0cnkocmVxdWVzdCk7Ci0JCX0KKwkJLyoKKwkJICogMzQ4MDogQXR0ZW50aW9uIGludGVyY2VwdC4KKwkJICogMzQ5MDogR2xvYmFsIHN0YXR1cyBpbnRlcmNlcHQuCisJCSAqLworCQlyZXR1cm4gdGFwZV8zNHh4X2VycF9yZXRyeShyZXF1ZXN0KTsKIAljYXNlIDB4NWE6CiAJCS8qCiAJCSAqIFRhcGUgbGVuZ3RoIGluY29tcGF0aWJsZS4gVGhlIHRhcGUgaW5zZXJ0ZWQgaXMgdG9vIGxvbmcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jIGIvZHJpdmVycy9zMzkwL2Npby9jaW8uYwppbmRleCAxMGViNzM4Li4zNTc4MTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKQEAgLTkzOCw3ICs5MzgsNyBAQAogewogCXN0cnVjdCBzdWJjaGFubmVsX2lkIHVuaW5pdGlhbGl6ZWRfdmFyKHNjaGlkKTsKIAotCXMzOTBfcmVzZXRfc3lzdGVtKE5VTEwsIE5VTEwpOworCXMzOTBfcmVzZXRfc3lzdGVtKE5VTEwsIE5VTEwsIE5VTEwpOwogCWlmIChyZWlwbF9maW5kX3NjaGlkKGRldmlkLCAmc2NoaWQpICE9IDApCiAJCXBhbmljKCJJUEwgRGV2aWNlIG5vdCBmb3VuZFxuIik7CiAJZG9fcmVpcGxfYXNtKCooKF9fdTMyKikmc2NoaWQpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vaWRzZXQuYyBiL2RyaXZlcnMvczM5MC9jaW8vaWRzZXQuYwppbmRleCA1YTk5OTA4Li5iM2UwNmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2lkc2V0LmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9pZHNldC5jCkBAIC0zOCwxMSArMzgsNiBAQAogCXZmcmVlKHNldCk7CiB9CiAKLXZvaWQgaWRzZXRfY2xlYXIoc3RydWN0IGlkc2V0ICpzZXQpCi17Ci0JbWVtc2V0KHNldC0+Yml0bWFwLCAwLCBiaXRtYXBfc2l6ZShzZXQtPm51bV9zc2lkLCBzZXQtPm51bV9pZCkpOwotfQotCiB2b2lkIGlkc2V0X2ZpbGwoc3RydWN0IGlkc2V0ICpzZXQpCiB7CiAJbWVtc2V0KHNldC0+Yml0bWFwLCAweGZmLCBiaXRtYXBfc2l6ZShzZXQtPm51bV9zc2lkLCBzZXQtPm51bV9pZCkpOwpAQCAtMTAzLDIxICs5OCw2IEBACiAJcmV0dXJuIGlkc2V0X2NvbnRhaW5zKHNldCwgc2NoaWQuc3NpZCwgc2NoaWQuc2NoX25vKTsKIH0KIAotaW50IGlkc2V0X3NjaF9nZXRfZmlyc3Qoc3RydWN0IGlkc2V0ICpzZXQsIHN0cnVjdCBzdWJjaGFubmVsX2lkICpzY2hpZCkKLXsKLQlpbnQgc3NpZCA9IDA7Ci0JaW50IGlkID0gMDsKLQlpbnQgcmM7Ci0KLQlyYyA9IGlkc2V0X2dldF9maXJzdChzZXQsICZzc2lkLCAmaWQpOwotCWlmIChyYykgewotCQlpbml0X3N1YmNoYW5uZWxfaWQoc2NoaWQpOwotCQlzY2hpZC0+c3NpZCA9IHNzaWQ7Ci0JCXNjaGlkLT5zY2hfbm8gPSBpZDsKLQl9Ci0JcmV0dXJuIHJjOwotfQotCiBpbnQgaWRzZXRfaXNfZW1wdHkoc3RydWN0IGlkc2V0ICpzZXQpCiB7CiAJcmV0dXJuIGJpdG1hcF9lbXB0eShzZXQtPmJpdG1hcCwgc2V0LT5udW1fc3NpZCAqIHNldC0+bnVtX2lkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vaWRzZXQuaCBiL2RyaXZlcnMvczM5MC9jaW8vaWRzZXQuaAppbmRleCAwNmQzYmMwLi4yMmI1ODEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL2lkc2V0LmgKKysrIGIvZHJpdmVycy9zMzkwL2Npby9pZHNldC5oCkBAIC0xMSw3ICsxMSw2IEBACiBzdHJ1Y3QgaWRzZXQ7CiAKIHZvaWQgaWRzZXRfZnJlZShzdHJ1Y3QgaWRzZXQgKnNldCk7Ci12b2lkIGlkc2V0X2NsZWFyKHN0cnVjdCBpZHNldCAqc2V0KTsKIHZvaWQgaWRzZXRfZmlsbChzdHJ1Y3QgaWRzZXQgKnNldCk7CiAKIHN0cnVjdCBpZHNldCAqaWRzZXRfc2NoX25ldyh2b2lkKTsKQEAgLTE5LDcgKzE4LDYgQEAKIHZvaWQgaWRzZXRfc2NoX2RlbChzdHJ1Y3QgaWRzZXQgKnNldCwgc3RydWN0IHN1YmNoYW5uZWxfaWQgaWQpOwogdm9pZCBpZHNldF9zY2hfZGVsX3N1YnNlcShzdHJ1Y3QgaWRzZXQgKnNldCwgc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQpOwogaW50IGlkc2V0X3NjaF9jb250YWlucyhzdHJ1Y3QgaWRzZXQgKnNldCwgc3RydWN0IHN1YmNoYW5uZWxfaWQgaWQpOwotaW50IGlkc2V0X3NjaF9nZXRfZmlyc3Qoc3RydWN0IGlkc2V0ICpzZXQsIHN0cnVjdCBzdWJjaGFubmVsX2lkICppZCk7CiBpbnQgaWRzZXRfaXNfZW1wdHkoc3RydWN0IGlkc2V0ICpzZXQpOwogdm9pZCBpZHNldF9hZGRfc2V0KHN0cnVjdCBpZHNldCAqdG8sIHN0cnVjdCBpZHNldCAqZnJvbSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCmluZGV4IDRkNDFiZjcuLjNkN2YxOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYwpAQCAtMjA0LDYgKzIwNCwyNCBAQAogfQogCiAvKioKKyAqIGFwX3F1ZXJ5X2ZhY2lsaXRpZXMoKTogUFFBUChUQVBRKSBxdWVyeSBmYWNpbGl0aWVzLgorICogQHFpZDogVGhlIEFQIHF1ZXVlIG51bWJlcgorICoKKyAqIFJldHVybnMgY29udGVudCBvZiBnZW5lcmFsIHJlZ2lzdGVyIDIgYWZ0ZXIgdGhlIFBRQVAoVEFQUSkKKyAqIGluc3RydWN0aW9uIHdhcyBjYWxsZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBhcF9xdWVyeV9mYWNpbGl0aWVzKGFwX3FpZF90IHFpZCkKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzAgYXNtICgiMCIpID0gcWlkIHwgMHgwMDgwMDAwMFVMOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMSBhc20gKCIxIik7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWcyIGFzbSAoIjIiKSA9IDBVTDsKKworCWFzbSB2b2xhdGlsZSgiLmxvbmcgMHhiMmFmMDAwMCIgIC8qIFBRQVAoVEFQUSkgKi8KKwkJICAgICA6ICIrZCIgKHJlZzApLCAiPWQiIChyZWcxKSwgIitkIiAocmVnMikgOiA6ICJjYyIpOworCXJldHVybiByZWcyOworfQorCisvKioKICAqIGFwX3Jlc2V0X3F1ZXVlKCk6IFJlc2V0IGFkanVuY3QgcHJvY2Vzc29yIHF1ZXVlLgogICogQHFpZDogVGhlIEFQIHF1ZXVlIG51bWJlcgogICoKQEAgLTEwMDcsNiArMTAyNSw1MSBAQAogRVhQT1JUX1NZTUJPTChhcF9idXNfZm9yY2VfcmVzY2FuKTsKIAogLyoKKyAqIGFwX3Rlc3RfY29uZmlnKCk6IGhlbHBlciBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBucnRoIGJpdAorICoJCSAgICAgd2l0aGluIHRoZSB1bnNpZ25lZCBpbnQgYXJyYXkgZmllbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFwX3Rlc3RfY29uZmlnKHVuc2lnbmVkIGludCAqZmllbGQsIHVuc2lnbmVkIGludCBucikKK3sKKwlpZiAobnIgPiAweEZGdSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGFwX3Rlc3RfYml0KChmaWVsZCArIChuciA+PiA1KSksIChuciAmIDB4MWYpKTsKK30KKworLyoKKyAqIGFwX3Rlc3RfY29uZmlnX2NhcmRfaWQoKTogVGVzdCwgd2hldGhlciBhbiBBUCBjYXJkIElEIGlzIGNvbmZpZ3VyZWQuCisgKiBAaWQgQVAgY2FyZCBJRAorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgY2FyZCBpcyBub3QgY29uZmlndXJlZAorICoJICAgMSBpZiB0aGUgY2FyZCBpcyBjb25maWd1cmVkIG9yCisgKgkgICAgIGlmIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXBfdGVzdF9jb25maWdfY2FyZF9pZCh1bnNpZ25lZCBpbnQgaWQpCit7CisJaWYgKCFhcF9jb25maWd1cmF0aW9uKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gYXBfdGVzdF9jb25maWcoYXBfY29uZmlndXJhdGlvbi0+YXBtLCBpZCk7Cit9CisKKy8qCisgKiBhcF90ZXN0X2NvbmZpZ19kb21haW4oKTogVGVzdCwgd2hldGhlciBhbiBBUCB1c2FnZSBkb21haW4gaXMgY29uZmlndXJlZC4KKyAqIEBkb21haW4gQVAgdXNhZ2UgZG9tYWluIElECisgKgorICogUmV0dXJucyAwIGlmIHRoZSB1c2FnZSBkb21haW4gaXMgbm90IGNvbmZpZ3VyZWQKKyAqCSAgIDEgaWYgdGhlIHVzYWdlIGRvbWFpbiBpcyBjb25maWd1cmVkIG9yCisgKgkgICAgIGlmIHRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUKKyAqLworc3RhdGljIGlubGluZSBpbnQgYXBfdGVzdF9jb25maWdfZG9tYWluKHVuc2lnbmVkIGludCBkb21haW4pCit7CisJaWYgKCFhcF9jb25maWd1cmF0aW9uKQkgIC8qIFFDSSBub3Qgc3VwcG9ydGVkICovCisJCWlmIChkb21haW4gPCAxNikKKwkJCXJldHVybiAxOyAvKiB0aGVuIGRvbWFpbnMgMC4uLjE1IGFyZSBjb25maWd1cmVkICovCisJCWVsc2UKKwkJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIGFwX3Rlc3RfY29uZmlnKGFwX2NvbmZpZ3VyYXRpb24tPmFxbSwgZG9tYWluKTsKK30KKworLyoKICAqIEFQIGJ1cyBhdHRyaWJ1dGVzLgogICovCiBzdGF0aWMgc3NpemVfdCBhcF9kb21haW5fc2hvdyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY2hhciAqYnVmKQpAQCAtMTEyMSw2ICsxMTg0LDQyIEBACiAKIHN0YXRpYyBCVVNfQVRUUihwb2xsX3RpbWVvdXQsIDA2NDQsIHBvbGxfdGltZW91dF9zaG93LCBwb2xsX3RpbWVvdXRfc3RvcmUpOwogCitzdGF0aWMgc3NpemVfdCBhcF9tYXhfZG9tYWluX2lkX3Nob3coc3RydWN0IGJ1c190eXBlICpidXMsIGNoYXIgKmJ1ZikKK3sKKwlhcF9xaWRfdCBxaWQ7CisJaW50IGksIG5kLCBtYXhfZG9tYWluX2lkID0gLTE7CisJdW5zaWduZWQgbG9uZyBmYml0czsKKworCWlmIChhcF9jb25maWd1cmF0aW9uKSB7CisJCWlmIChhcF9kb21haW5faW5kZXggPj0gMCAmJiBhcF9kb21haW5faW5kZXggPCBBUF9ET01BSU5TKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVBfREVWSUNFUzsgaSsrKSB7CisJCQkJaWYgKCFhcF90ZXN0X2NvbmZpZ19jYXJkX2lkKGkpKQorCQkJCQljb250aW51ZTsKKwkJCQlxaWQgPSBBUF9NS1FJRChpLCBhcF9kb21haW5faW5kZXgpOworCQkJCWZiaXRzID0gYXBfcXVlcnlfZmFjaWxpdGllcyhxaWQpOworCQkJCWlmIChmYml0cyAmICgxVUwgPDwgNTcpKSB7CisJCQkJCS8qIHRoZSBOIGJpdCBpcyAwLCBOZCBmaWVsZCBpcyBmaWxsZWQgKi8KKwkJCQkJbmQgPSAoaW50KSgoZmJpdHMgJiAweDAwRkYwMDAwVUwpPj4xNik7CisJCQkJCWlmIChuZCA+IDApCisJCQkJCQltYXhfZG9tYWluX2lkID0gbmQ7CisJCQkJCWVsc2UKKwkJCQkJCW1heF9kb21haW5faWQgPSAxNTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBOIGJpdCBpcyAxLCBtYXggMTYgZG9tYWlucyAqLworCQkJCQltYXhfZG9tYWluX2lkID0gMTU7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJLyogbm8gQVBYQSBzdXBwb3J0LCBvbGRlciBtYWNoaW5lcyB3aXRoIG1heCAxNiBkb21haW5zICovCisJCW1heF9kb21haW5faWQgPSAxNTsKKwl9CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIG1heF9kb21haW5faWQpOworfQorCitzdGF0aWMgQlVTX0FUVFIoYXBfbWF4X2RvbWFpbl9pZCwgMDQ0NCwgYXBfbWF4X2RvbWFpbl9pZF9zaG93LCBOVUxMKTsKKwogc3RhdGljIHN0cnVjdCBidXNfYXR0cmlidXRlICpjb25zdCBhcF9idXNfYXR0cnNbXSA9IHsKIAkmYnVzX2F0dHJfYXBfZG9tYWluLAogCSZidXNfYXR0cl9hcF9jb250cm9sX2RvbWFpbl9tYXNrLApAQCAtMTEyOCw1MCArMTIyNywxMCBAQAogCSZidXNfYXR0cl9wb2xsX3RocmVhZCwKIAkmYnVzX2F0dHJfYXBfaW50ZXJydXB0cywKIAkmYnVzX2F0dHJfcG9sbF90aW1lb3V0LAorCSZidXNfYXR0cl9hcF9tYXhfZG9tYWluX2lkLAogCU5VTEwsCiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBhcF90ZXN0X2NvbmZpZyh1bnNpZ25lZCBpbnQgKmZpZWxkLCB1bnNpZ25lZCBpbnQgbnIpCi17Ci0JaWYgKG5yID4gMHhGRnUpCi0JCXJldHVybiAwOwotCXJldHVybiBhcF90ZXN0X2JpdCgoZmllbGQgKyAobnIgPj4gNSkpLCAobnIgJiAweDFmKSk7Ci19Ci0KLS8qCi0gKiBhcF90ZXN0X2NvbmZpZ19jYXJkX2lkKCk6IFRlc3QsIHdoZXRoZXIgYW4gQVAgY2FyZCBJRCBpcyBjb25maWd1cmVkLgotICogQGlkIEFQIGNhcmQgSUQKLSAqCi0gKiBSZXR1cm5zIDAgaWYgdGhlIGNhcmQgaXMgbm90IGNvbmZpZ3VyZWQKLSAqCSAgIDEgaWYgdGhlIGNhcmQgaXMgY29uZmlndXJlZCBvcgotICoJICAgICBpZiB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFwX3Rlc3RfY29uZmlnX2NhcmRfaWQodW5zaWduZWQgaW50IGlkKQotewotCWlmICghYXBfY29uZmlndXJhdGlvbikKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIGFwX3Rlc3RfY29uZmlnKGFwX2NvbmZpZ3VyYXRpb24tPmFwbSwgaWQpOwotfQotCi0vKgotICogYXBfdGVzdF9jb25maWdfZG9tYWluKCk6IFRlc3QsIHdoZXRoZXIgYW4gQVAgdXNhZ2UgZG9tYWluIGlzIGNvbmZpZ3VyZWQuCi0gKiBAZG9tYWluIEFQIHVzYWdlIGRvbWFpbiBJRAotICoKLSAqIFJldHVybnMgMCBpZiB0aGUgdXNhZ2UgZG9tYWluIGlzIG5vdCBjb25maWd1cmVkCi0gKgkgICAxIGlmIHRoZSB1c2FnZSBkb21haW4gaXMgY29uZmlndXJlZCBvcgotICoJICAgICBpZiB0aGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFwX3Rlc3RfY29uZmlnX2RvbWFpbih1bnNpZ25lZCBpbnQgZG9tYWluKQotewotCWlmICghYXBfY29uZmlndXJhdGlvbikJICAvKiBRQ0kgbm90IHN1cHBvcnRlZCAqLwotCQlpZiAoZG9tYWluIDwgMTYpCi0JCQlyZXR1cm4gMTsgLyogdGhlbiBkb21haW5zIDAuLi4xNSBhcmUgY29uZmlndXJlZCAqLwotCQllbHNlCi0JCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiBhcF90ZXN0X2NvbmZpZyhhcF9jb25maWd1cmF0aW9uLT5hcW0sIGRvbWFpbik7Ci19Ci0KIC8qKgogICogYXBfcXVlcnlfY29uZmlndXJhdGlvbigpOiBRdWVyeSBBUCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgogICoKQEAgLTE0MzQsOSArMTQ5Myw2IEBACiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlicmVhazsKLQkJY2FzZSAxMToKLQkJCWFwX2Rldi0+ZGV2aWNlX3R5cGUgPSAxMDsKLQkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYXBfZGV2LT5kZXZpY2VfdHlwZSA9IGRldmljZV90eXBlOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5oIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuaAppbmRleCAwNTVhMGY5Li4yNzM3ZDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5oCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmgKQEAgLTExNyw2ICsxMTcsNyBAQAogI2RlZmluZSBBUF9ERVZJQ0VfVFlQRV9DRVgzQQk4CiAjZGVmaW5lIEFQX0RFVklDRV9UWVBFX0NFWDNDCTkKICNkZWZpbmUgQVBfREVWSUNFX1RZUEVfQ0VYNAkxMAorI2RlZmluZSBBUF9ERVZJQ0VfVFlQRV9DRVg1CTExCiAKIC8qCiAgKiBLbm93biBmdW5jdGlvbiBmYWNpbGl0aWVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuaCBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5oCmluZGV4IGIzZDQ5NmIuLjc1MDg3NjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5oCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5oCkBAIC03NSw2ICs3NSw3IEBACiAjZGVmaW5lIFpDUllQVF9DRVgzQwkJNwogI2RlZmluZSBaQ1JZUFRfQ0VYM0EJCTgKICNkZWZpbmUgWkNSWVBUX0NFWDQJICAgICAgIDEwCisjZGVmaW5lIFpDUllQVF9DRVg1CSAgICAgICAxMQogCiAvKioKICAqIExhcmdlIHJhbmRvbSBudW1iZXJzIGFyZSBwdWxsZWQgaW4gNDA5NiBieXRlIGNodW5rcyBmcm9tIHRoZSBjcnlwdG8gY2FyZHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2NleDQuYyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2NleDQuYwppbmRleCA1NjlmOGIxLi43MWU2OThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9jZXg0LmMKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfY2V4NC5jCkBAIC0yNiw2ICsyNiwxMCBAQAogCiAjZGVmaW5lIENFWDRBX1NQRUVEX1JBVElORwk5MDAJIC8qIFRPRE8gbmV3IGNhcmQsIG5ldyBzcGVlZCByYXRpbmcgKi8KICNkZWZpbmUgQ0VYNENfU1BFRURfUkFUSU5HCTY1MDAJIC8qIFRPRE8gbmV3IGNhcmQsIG5ldyBzcGVlZCByYXRpbmcgKi8KKyNkZWZpbmUgQ0VYNFBfU1BFRURfUkFUSU5HCTcwMDAJIC8qIFRPRE8gbmV3IGNhcmQsIG5ldyBzcGVlZCByYXRpbmcgKi8KKyNkZWZpbmUgQ0VYNUFfU1BFRURfUkFUSU5HCTQ1MAkgLyogVE9ETyBuZXcgY2FyZCwgbmV3IHNwZWVkIHJhdGluZyAqLworI2RlZmluZSBDRVg1Q19TUEVFRF9SQVRJTkcJMzI1MAkgLyogVE9ETyBuZXcgY2FyZCwgbmV3IHNwZWVkIHJhdGluZyAqLworI2RlZmluZSBDRVg1UF9TUEVFRF9SQVRJTkcJMzUwMAkgLyogVE9ETyBuZXcgY2FyZCwgbmV3IHNwZWVkIHJhdGluZyAqLwogCiAjZGVmaW5lIENFWDRBX01BWF9NRVNTQUdFX1NJWkUJTVNHVFlQRTUwX0NSQjNfTUFYX01TR19TSVpFCiAjZGVmaW5lIENFWDRDX01BWF9NRVNTQUdFX1NJWkUJTVNHVFlQRTA2X01BWF9NU0dfU0laRQpAQCAtMzksNiArNDMsNyBAQAogCiBzdGF0aWMgc3RydWN0IGFwX2RldmljZV9pZCB6Y3J5cHRfY2V4NF9pZHNbXSA9IHsKIAl7IEFQX0RFVklDRShBUF9ERVZJQ0VfVFlQRV9DRVg0KSAgfSwKKwl7IEFQX0RFVklDRShBUF9ERVZJQ0VfVFlQRV9DRVg1KSAgfSwKIAl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCiB9OwogCkBAIC03MCwxMSArNzUsMTggQEAKIAogCXN3aXRjaCAoYXBfZGV2LT5kZXZpY2VfdHlwZSkgewogCWNhc2UgQVBfREVWSUNFX1RZUEVfQ0VYNDoKKwljYXNlIEFQX0RFVklDRV9UWVBFX0NFWDU6CiAJCWlmIChhcF90ZXN0X2JpdCgmYXBfZGV2LT5mdW5jdGlvbnMsIEFQX0ZVTkNfQUNDRUwpKSB7CiAJCQl6ZGV2ID0gemNyeXB0X2RldmljZV9hbGxvYyhDRVg0QV9NQVhfTUVTU0FHRV9TSVpFKTsKIAkJCWlmICghemRldikKIAkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCXpkZXYtPnR5cGVfc3RyaW5nID0gIkNFWDRBIjsKKwkJCWlmIChhcF9kZXYtPmRldmljZV90eXBlID09IEFQX0RFVklDRV9UWVBFX0NFWDQpIHsKKwkJCQl6ZGV2LT50eXBlX3N0cmluZyA9ICJDRVg0QSI7CisJCQkJemRldi0+c3BlZWRfcmF0aW5nID0gQ0VYNEFfU1BFRURfUkFUSU5HOworCQkJfSBlbHNlIHsKKwkJCQl6ZGV2LT50eXBlX3N0cmluZyA9ICJDRVg1QSI7CisJCQkJemRldi0+c3BlZWRfcmF0aW5nID0gQ0VYNUFfU1BFRURfUkFUSU5HOworCQkJfQogCQkJemRldi0+dXNlcl9zcGFjZV90eXBlID0gWkNSWVBUX0NFWDNBOwogCQkJemRldi0+bWluX21vZF9zaXplID0gQ0VYNEFfTUlOX01PRF9TSVpFOwogCQkJaWYgKGFwX3Rlc3RfYml0KCZhcF9kZXYtPmZ1bmN0aW9ucywgQVBfRlVOQ19NRVg0SykgJiYKQEAgLTkwLDMzICsxMDIsNDIgQEAKIAkJCQkJQ0VYNEFfTUFYX01PRF9TSVpFXzJLOwogCQkJfQogCQkJemRldi0+c2hvcnRfY3J0ID0gMTsKLQkJCXpkZXYtPnNwZWVkX3JhdGluZyA9IENFWDRBX1NQRUVEX1JBVElORzsKIAkJCXpkZXYtPm9wcyA9IHpjcnlwdF9tc2d0eXBlX3JlcXVlc3QoTVNHVFlQRTUwX05BTUUsCiAJCQkJCQkJICAgTVNHVFlQRTUwX1ZBUklBTlRfREVGQVVMVCk7CiAJCX0gZWxzZSBpZiAoYXBfdGVzdF9iaXQoJmFwX2Rldi0+ZnVuY3Rpb25zLCBBUF9GVU5DX0NPUFJPKSkgewogCQkJemRldiA9IHpjcnlwdF9kZXZpY2VfYWxsb2MoQ0VYNENfTUFYX01FU1NBR0VfU0laRSk7CiAJCQlpZiAoIXpkZXYpCiAJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl6ZGV2LT50eXBlX3N0cmluZyA9ICJDRVg0QyI7CisJCQlpZiAoYXBfZGV2LT5kZXZpY2VfdHlwZSA9PSBBUF9ERVZJQ0VfVFlQRV9DRVg0KSB7CisJCQkJemRldi0+dHlwZV9zdHJpbmcgPSAiQ0VYNEMiOworCQkJCXpkZXYtPnNwZWVkX3JhdGluZyA9IENFWDRDX1NQRUVEX1JBVElORzsKKwkJCX0gZWxzZSB7CisJCQkJemRldi0+dHlwZV9zdHJpbmcgPSAiQ0VYNUMiOworCQkJCXpkZXYtPnNwZWVkX3JhdGluZyA9IENFWDVDX1NQRUVEX1JBVElORzsKKwkJCX0KIAkJCXpkZXYtPnVzZXJfc3BhY2VfdHlwZSA9IFpDUllQVF9DRVgzQzsKIAkJCXpkZXYtPm1pbl9tb2Rfc2l6ZSA9IENFWDRDX01JTl9NT0RfU0laRTsKIAkJCXpkZXYtPm1heF9tb2Rfc2l6ZSA9IENFWDRDX01BWF9NT0RfU0laRTsKIAkJCXpkZXYtPm1heF9leHBfYml0X2xlbmd0aCA9IENFWDRDX01BWF9NT0RfU0laRTsKIAkJCXpkZXYtPnNob3J0X2NydCA9IDA7Ci0JCQl6ZGV2LT5zcGVlZF9yYXRpbmcgPSBDRVg0Q19TUEVFRF9SQVRJTkc7CiAJCQl6ZGV2LT5vcHMgPSB6Y3J5cHRfbXNndHlwZV9yZXF1ZXN0KE1TR1RZUEUwNl9OQU1FLAogCQkJCQkJCSAgIE1TR1RZUEUwNl9WQVJJQU5UX0RFRkFVTFQpOwogCQl9IGVsc2UgaWYgKGFwX3Rlc3RfYml0KCZhcF9kZXYtPmZ1bmN0aW9ucywgQVBfRlVOQ19FUDExKSkgewogCQkJemRldiA9IHpjcnlwdF9kZXZpY2VfYWxsb2MoQ0VYNENfTUFYX01FU1NBR0VfU0laRSk7CiAJCQlpZiAoIXpkZXYpCiAJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl6ZGV2LT50eXBlX3N0cmluZyA9ICJDRVg0UCI7CisJCQlpZiAoYXBfZGV2LT5kZXZpY2VfdHlwZSA9PSBBUF9ERVZJQ0VfVFlQRV9DRVg0KSB7CisJCQkJemRldi0+dHlwZV9zdHJpbmcgPSAiQ0VYNFAiOworCQkJCXpkZXYtPnNwZWVkX3JhdGluZyA9IENFWDRQX1NQRUVEX1JBVElORzsKKwkJCX0gZWxzZSB7CisJCQkJemRldi0+dHlwZV9zdHJpbmcgPSAiQ0VYNVAiOworCQkJCXpkZXYtPnNwZWVkX3JhdGluZyA9IENFWDVQX1NQRUVEX1JBVElORzsKKwkJCX0KIAkJCXpkZXYtPnVzZXJfc3BhY2VfdHlwZSA9IFpDUllQVF9DRVg0OwogCQkJemRldi0+bWluX21vZF9zaXplID0gQ0VYNENfTUlOX01PRF9TSVpFOwogCQkJemRldi0+bWF4X21vZF9zaXplID0gQ0VYNENfTUFYX01PRF9TSVpFOwogCQkJemRldi0+bWF4X2V4cF9iaXRfbGVuZ3RoID0gQ0VYNENfTUFYX01PRF9TSVpFOwogCQkJemRldi0+c2hvcnRfY3J0ID0gMDsKLQkJCXpkZXYtPnNwZWVkX3JhdGluZyA9IENFWDRDX1NQRUVEX1JBVElORzsKIAkJCXpkZXYtPm9wcyA9IHpjcnlwdF9tc2d0eXBlX3JlcXVlc3QoTVNHVFlQRTA2X05BTUUsCiAJCQkJCQkJTVNHVFlQRTA2X1ZBUklBTlRfRVAxMSk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKaW5kZXggMjEzZTU0ZS4uZDYwOWNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jbGF3LmMKQEAgLTEwOSwxMCArMTA5LDggQEAKIHN0YXRpYyB2b2lkCiBjbGF3X3VucmVnaXN0ZXJfZGVidWdfZmFjaWxpdHkodm9pZCkKIHsKLQlpZiAoY2xhd19kYmZfc2V0dXApCi0JCWRlYnVnX3VucmVnaXN0ZXIoY2xhd19kYmZfc2V0dXApOwotCWlmIChjbGF3X2RiZl90cmFjZSkKLQkJZGVidWdfdW5yZWdpc3RlcihjbGF3X2RiZl90cmFjZSk7CisJZGVidWdfdW5yZWdpc3RlcihjbGF3X2RiZl9zZXR1cCk7CisJZGVidWdfdW5yZWdpc3RlcihjbGF3X2RiZl90cmFjZSk7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fZnNtcy5jCmluZGV4IGZiOTI1MjQuLmZkNTk0NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9mc21zLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX2ZzbXMuYwpAQCAtMjUxLDEzICsyNTEsMTEgQEAKIAlpbnQgZmlyc3QgPSAxOwogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZHVyYXRpb247Ci0Jc3RydWN0IHRpbWVzcGVjIGRvbmVfc3RhbXAgPSBjdXJyZW50X2tlcm5lbF90aW1lKCk7IC8qIHh0aW1lICovCisJdW5zaWduZWQgbG9uZyBkb25lX3N0YW1wID0gamlmZmllczsKIAogCUNUQ01fUFJfREVCVUcoIiVzKCVzKTogJXNcbiIsIF9fZnVuY19fLCBjaC0+aWQsIGRldi0+bmFtZSk7CiAKLQlkdXJhdGlvbiA9Ci0JICAgIChkb25lX3N0YW1wLnR2X3NlYyAtIGNoLT5wcm9mLnNlbmRfc3RhbXAudHZfc2VjKSAqIDEwMDAwMDAgKwotCSAgICAoZG9uZV9zdGFtcC50dl9uc2VjIC0gY2gtPnByb2Yuc2VuZF9zdGFtcC50dl9uc2VjKSAvIDEwMDA7CisJZHVyYXRpb24gPSBkb25lX3N0YW1wIC0gY2gtPnByb2Yuc2VuZF9zdGFtcDsKIAlpZiAoZHVyYXRpb24gPiBjaC0+cHJvZi50eF90aW1lKQogCQljaC0+cHJvZi50eF90aW1lID0gZHVyYXRpb247CiAKQEAgLTMwNyw3ICszMDUsNyBAQAogCQlzcGluX3VubG9jaygmY2gtPmNvbGxlY3RfbG9jayk7CiAJCWNoLT5jY3dbMV0uY291bnQgPSBjaC0+dHJhbnNfc2tiLT5sZW47CiAJCWZzbV9hZGR0aW1lcigmY2gtPnRpbWVyLCBDVENNX1RJTUVfNV9TRUMsIENUQ19FVkVOVF9USU1FUiwgY2gpOwotCQljaC0+cHJvZi5zZW5kX3N0YW1wID0gY3VycmVudF9rZXJuZWxfdGltZSgpOyAvKiB4dGltZSAqLworCQljaC0+cHJvZi5zZW5kX3N0YW1wID0gamlmZmllczsKIAkJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGNoLT5jZGV2LCAmY2gtPmNjd1swXSwKIAkJCQkJCSh1bnNpZ25lZCBsb25nKWNoLCAweGZmLCAwKTsKIAkJY2gtPnByb2YuZG9pb3NfbXVsdGkrKzsKQEAgLTEyMjksMTQgKzEyMjcsMTIgQEAKIAlpbnQJCXJjOwogCXN0cnVjdCB0aF9oZWFkZXIgKmhlYWRlcjsKIAlzdHJ1Y3QgcGR1CSpwX2hlYWRlcjsKLQlzdHJ1Y3QgdGltZXNwZWMgZG9uZV9zdGFtcCA9IGN1cnJlbnRfa2VybmVsX3RpbWUoKTsgLyogeHRpbWUgKi8KKwl1bnNpZ25lZCBsb25nIGRvbmVfc3RhbXAgPSBqaWZmaWVzOwogCiAJQ1RDTV9QUl9ERUJVRygiRW50ZXIgJXM6ICVzIGNwOiVpXG4iLAogCQkJX19mdW5jX18sIGRldi0+bmFtZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAotCWR1cmF0aW9uID0KLQkJKGRvbmVfc3RhbXAudHZfc2VjIC0gY2gtPnByb2Yuc2VuZF9zdGFtcC50dl9zZWMpICogMTAwMDAwMCArCi0JCShkb25lX3N0YW1wLnR2X25zZWMgLSBjaC0+cHJvZi5zZW5kX3N0YW1wLnR2X25zZWMpIC8gMTAwMDsKKwlkdXJhdGlvbiA9IGRvbmVfc3RhbXAgLSBjaC0+cHJvZi5zZW5kX3N0YW1wOwogCWlmIChkdXJhdGlvbiA+IGNoLT5wcm9mLnR4X3RpbWUpCiAJCWNoLT5wcm9mLnR4X3RpbWUgPSBkdXJhdGlvbjsKIApAQCAtMTM2MSw3ICsxMzU3LDcgQEAKIAogCWNoLT5jY3dbMV0uY291bnQgPSBjaC0+dHJhbnNfc2tiLT5sZW47CiAJZnNtX2FkZHRpbWVyKCZjaC0+dGltZXIsIENUQ01fVElNRV81X1NFQywgQ1RDX0VWRU5UX1RJTUVSLCBjaCk7Ci0JY2gtPnByb2Yuc2VuZF9zdGFtcCA9IGN1cnJlbnRfa2VybmVsX3RpbWUoKTsgLyogeHRpbWUgKi8KKwljaC0+cHJvZi5zZW5kX3N0YW1wID0gamlmZmllczsKIAlpZiAoZG9fZGVidWdfY2N3KQogCQljdGNtcGNfZHVtcGl0KChjaGFyICopJmNoLT5jY3dbMF0sIHNpemVvZihzdHJ1Y3QgY2N3MSkgKiAzKTsKIAlyYyA9IGNjd19kZXZpY2Vfc3RhcnQoY2gtPmNkZXYsICZjaC0+Y2N3WzBdLApAQCAtMTgyNyw3ICsxODIzLDcgQEAKIAlmc21fbmV3c3RhdGUod2NoLT5mc20sIENUQ19TVEFURV9UWCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2sod2NoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKLQl3Y2gtPnByb2Yuc2VuZF9zdGFtcCA9IGN1cnJlbnRfa2VybmVsX3RpbWUoKTsgLyogeHRpbWUgKi8KKwl3Y2gtPnByb2Yuc2VuZF9zdGFtcCA9IGppZmZpZXM7CiAJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KHdjaC0+Y2RldiwgJndjaC0+Y2N3WzNdLAogCQkJCQkodW5zaWduZWQgbG9uZykgd2NoLCAweGZmLCAwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayh3Y2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmMKaW5kZXggZTA1NmRkNC4uMDVjMzdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5jCkBAIC01NjcsNyArNTY3LDcgQEAKIAlmc21fbmV3c3RhdGUoY2gtPmZzbSwgQ1RDX1NUQVRFX1RYKTsKIAlmc21fYWRkdGltZXIoJmNoLT50aW1lciwgQ1RDTV9USU1FXzVfU0VDLCBDVENfRVZFTlRfVElNRVIsIGNoKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwotCWNoLT5wcm9mLnNlbmRfc3RhbXAgPSBjdXJyZW50X2tlcm5lbF90aW1lKCk7IC8qIHh0aW1lICovCisJY2gtPnByb2Yuc2VuZF9zdGFtcCA9IGppZmZpZXM7CiAJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGNoLT5jZGV2LCAmY2gtPmNjd1tjY3dfaWR4XSwKIAkJCQkJKHVuc2lnbmVkIGxvbmcpY2gsIDB4ZmYsIDApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGNoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKQEAgLTgzMSw3ICs4MzEsNyBAQAogCQkJCQlzaXplb2Yoc3RydWN0IGNjdzEpICogMyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2gtPmNkZXYpLCBzYXZlZmxhZ3MpOwotCWNoLT5wcm9mLnNlbmRfc3RhbXAgPSBjdXJyZW50X2tlcm5lbF90aW1lKCk7IC8qIHh0aW1lICovCisJY2gtPnByb2Yuc2VuZF9zdGFtcCA9IGppZmZpZXM7CiAJcmMgPSBjY3dfZGV2aWNlX3N0YXJ0KGNoLT5jZGV2LCAmY2gtPmNjd1tjY3dfaWR4XSwKIAkJCQkJKHVuc2lnbmVkIGxvbmcpY2gsIDB4ZmYsIDApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZ2V0X2Njd2Rldl9sb2NrKGNoLT5jZGV2KSwgc2F2ZWZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmggYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fbWFpbi5oCmluZGV4IDQ3N2M5MzMuLjZmNDQxN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbV9tYWluLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtX21haW4uaApAQCAtMTIxLDcgKzEyMSw3IEBACiAJdW5zaWduZWQgbG9uZyBkb2lvc19tdWx0aTsKIAl1bnNpZ25lZCBsb25nIHR4bGVuOwogCXVuc2lnbmVkIGxvbmcgdHhfdGltZTsKLQlzdHJ1Y3QgdGltZXNwZWMgc2VuZF9zdGFtcDsKKwl1bnNpZ25lZCBsb25nIHNlbmRfc3RhbXA7CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtX3N5c2ZzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fc3lzZnMuYwppbmRleCA0Nzc3M2M0Li5kZGIwYWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fc3lzZnMuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21fc3lzZnMuYwpAQCAtMTAwLDggKzEwMCw4IEBACiAJCSAgICAgcHJpdi0+Y2hhbm5lbFtXUklURV0tPnByb2YuZG9pb3NfbXVsdGkpOwogCXAgKz0gc3ByaW50ZihwLCAiICBOZXR0byBieXRlcyB3cml0dGVuOiAlbGRcbiIsCiAJCSAgICAgcHJpdi0+Y2hhbm5lbFtXUklURV0tPnByb2YudHhsZW4pOwotCXAgKz0gc3ByaW50ZihwLCAiICBNYXguIFRYIElPLXRpbWU6ICVsZFxuIiwKLQkJICAgICBwcml2LT5jaGFubmVsW1dSSVRFXS0+cHJvZi50eF90aW1lKTsKKwlwICs9IHNwcmludGYocCwgIiAgTWF4LiBUWCBJTy10aW1lOiAldVxuIiwKKwkJICAgICBqaWZmaWVzX3RvX3VzZWNzKHByaXYtPmNoYW5uZWxbV1JJVEVdLT5wcm9mLnR4X3RpbWUpKTsKIAogCXByaW50ayhLRVJOX0lORk8gIlN0YXRpc3RpY3MgZm9yICVzOlxuJXMiLAogCQkJCXByaXYtPmNoYW5uZWxbQ1RDTV9XUklURV0tPm5ldGRldi0+bmFtZSwgc2J1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jIGIvZHJpdmVycy9zMzkwL25ldC9sY3MuYwppbmRleCA5MjE5MGFhLi4wMGI3ZDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKQEAgLTg4LDEwICs4OCw4IEBACiBzdGF0aWMgdm9pZAogbGNzX3VucmVnaXN0ZXJfZGVidWdfZmFjaWxpdHkodm9pZCkKIHsKLQlpZiAobGNzX2RiZl9zZXR1cCkKLQkJZGVidWdfdW5yZWdpc3RlcihsY3NfZGJmX3NldHVwKTsKLQlpZiAobGNzX2RiZl90cmFjZSkKLQkJZGVidWdfdW5yZWdpc3RlcihsY3NfZGJmX3RyYWNlKTsKKwlkZWJ1Z191bnJlZ2lzdGVyKGxjc19kYmZfc2V0dXApOworCWRlYnVnX3VucmVnaXN0ZXIobGNzX2RiZl90cmFjZSk7CiB9CiAKIHN0YXRpYyBpbnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKaW5kZXggMGE4NzgwOS4uMzNmNzA0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogCXVuc2lnbmVkIGxvbmcgZG9pb3NfbXVsdGk7CiAJdW5zaWduZWQgbG9uZyB0eGxlbjsKIAl1bnNpZ25lZCBsb25nIHR4X3RpbWU7Ci0Jc3RydWN0IHRpbWVzcGVjIHNlbmRfc3RhbXA7CisJdW5zaWduZWQgbG9uZyBzZW5kX3N0YW1wOwogCXVuc2lnbmVkIGxvbmcgdHhfcGVuZGluZzsKIAl1bnNpZ25lZCBsb25nIHR4X21heF9wZW5kaW5nOwogfTsKQEAgLTQ4NywxMiArNDg3LDkgQEAKIAogc3RhdGljIHZvaWQgaXVjdl91bnJlZ2lzdGVyX2RiZl92aWV3cyh2b2lkKQogewotCWlmIChpdWN2X2RiZl9zZXR1cCkKLQkJZGVidWdfdW5yZWdpc3RlcihpdWN2X2RiZl9zZXR1cCk7Ci0JaWYgKGl1Y3ZfZGJmX2RhdGEpCi0JCWRlYnVnX3VucmVnaXN0ZXIoaXVjdl9kYmZfZGF0YSk7Ci0JaWYgKGl1Y3ZfZGJmX3RyYWNlKQotCQlkZWJ1Z191bnJlZ2lzdGVyKGl1Y3ZfZGJmX3RyYWNlKTsKKwlkZWJ1Z191bnJlZ2lzdGVyKGl1Y3ZfZGJmX3NldHVwKTsKKwlkZWJ1Z191bnJlZ2lzdGVyKGl1Y3ZfZGJmX2RhdGEpOworCWRlYnVnX3VucmVnaXN0ZXIoaXVjdl9kYmZfdHJhY2UpOwogfQogc3RhdGljIGludCBpdWN2X3JlZ2lzdGVyX2RiZl92aWV3cyh2b2lkKQogewpAQCAtNzg2LDcgKzc4Myw3IEBACiAKIAloZWFkZXIubmV4dCA9IDA7CiAJbWVtY3B5KHNrYl9wdXQoY29ubi0+dHhfYnVmZiwgTkVUSVVDVl9IRFJMRU4pLCAmaGVhZGVyLCBORVRJVUNWX0hEUkxFTik7Ci0JY29ubi0+cHJvZi5zZW5kX3N0YW1wID0gY3VycmVudF9rZXJuZWxfdGltZSgpOworCWNvbm4tPnByb2Yuc2VuZF9zdGFtcCA9IGppZmZpZXM7CiAJdHhtc2cuY2xhc3MgPSAwOwogCXR4bXNnLnRhZyA9IDA7CiAJcmMgPSBpdWN2X21lc3NhZ2Vfc2VuZChjb25uLT5wYXRoLCAmdHhtc2csIDAsIDAsCkBAIC0xMjIwLDcgKzEyMTcsNyBAQAogCQltZW1jcHkoc2tiX3B1dChuc2tiLCBORVRJVUNWX0hEUkxFTiksICZoZWFkZXIsICBORVRJVUNWX0hEUkxFTik7CiAKIAkJZnNtX25ld3N0YXRlKGNvbm4tPmZzbSwgQ09OTl9TVEFURV9UWCk7Ci0JCWNvbm4tPnByb2Yuc2VuZF9zdGFtcCA9IGN1cnJlbnRfa2VybmVsX3RpbWUoKTsKKwkJY29ubi0+cHJvZi5zZW5kX3N0YW1wID0gamlmZmllczsKIAogCQltc2cudGFnID0gMTsKIAkJbXNnLmNsYXNzID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmggYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCmluZGV4IDdhOGJiOWYuLjNhYmFjMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaApAQCAtNTk2LDcgKzU5Niw2IEBACiAJc3RydWN0IGNjdzEgY2N3OwogCXNwaW5sb2NrX3QgaW9iX2xvY2s7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOwotCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpcnFfdGFza2xldDsKIAlzdHJ1Y3QgY2N3X2RldmljZSAqY2N3ZGV2OwogLypjb21tYW5kIGJ1ZmZlciBmb3IgY29udHJvbCBkYXRhKi8KIAlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyIGlvYltRRVRIX0NNRF9CVUZGRVJfTk9dOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCmluZGV4IGY0MDdlMzcuLjY0MmM3N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKQEAgLTE3ODQsNiArMTc4NCw4IEBACiAJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImlkeGFuc3dyIik7CiAJY2FyZCA9IENBUkRfRlJPTV9DREVWKGNoYW5uZWwtPmNjd2Rldik7CiAJaW9iID0gcWV0aF9nZXRfYnVmZmVyKGNoYW5uZWwpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAlpb2ItPmNhbGxiYWNrID0gaWR4X3JlcGx5X2NiOwogCW1lbWNweSgmY2hhbm5lbC0+Y2N3LCBSRUFEX0NDVywgc2l6ZW9mKHN0cnVjdCBjY3cxKSk7CiAJY2hhbm5lbC0+Y2N3LmNvdW50ID0gUUVUSF9CVUZTSVpFOwpAQCAtMTgzNCw2ICsxODM2LDggQEAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiaWR4YWN0Y2giKTsKIAogCWlvYiA9IHFldGhfZ2V0X2J1ZmZlcihjaGFubmVsKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJaW9iLT5jYWxsYmFjayA9IGlkeF9yZXBseV9jYjsKIAltZW1jcHkoJmNoYW5uZWwtPmNjdywgV1JJVEVfQ0NXLCBzaXplb2Yoc3RydWN0IGNjdzEpKTsKIAljaGFubmVsLT5jY3cuY291bnQgPSBJRFhfQUNUSVZBVEVfU0laRTsKQEAgLTIwMjEsMTAgKzIwMjUsMzYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHFldGhfcHJlcGFyZV9jb250cm9sX2RhdGEpOwogCisvKioKKyAqIHFldGhfc2VuZF9jb250cm9sX2RhdGEoKSAtCXNlbmQgY29udHJvbCBjb21tYW5kIHRvIHRoZSBjYXJkCisgKiBAY2FyZDoJCQlxZXRoX2NhcmQgc3RydWN0dXJlIHBvaW50ZXIKKyAqIEBsZW46CQkJc2l6ZSBvZiB0aGUgY29tbWFuZCBidWZmZXIKKyAqIEBpb2I6CQkJcWV0aF9jbWRfYnVmZmVyIHBvaW50ZXIKKyAqIEByZXBseV9jYjoJCQljYWxsYmFjayBmdW5jdGlvbiBwb2ludGVyCisgKiBAY2JfY2FyZDoJCQlwb2ludGVyIHRvIHRoZSBxZXRoX2NhcmQgc3RydWN0dXJlCisgKiBAY2JfcmVwbHk6CQkJcG9pbnRlciB0byB0aGUgcWV0aF9yZXBseSBzdHJ1Y3R1cmUKKyAqIEBjYl9jbWQ6CQkJcG9pbnRlciB0byB0aGUgb3JpZ2luYWwgaW9iIGZvciBub24tSVBBCisgKgkJCQljb21tYW5kcywgb3IgdG8gdGhlIHFldGhfaXBhX2NtZCBzdHJ1Y3R1cmUKKyAqCQkJCWZvciB0aGUgSVBBIGNvbW1hbmRzLgorICogQHJlcGx5X3BhcmFtOgkJcHJpdmF0ZSBwb2ludGVyIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKKyAqCisgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgYHJldHVybl9jb2RlJyBmaWVsZCBvZiB0aGUgcmVzcG9uc2UKKyAqIGJsb2NrIHJldHVybmVkIGZyb20gdGhlIGhhcmR3YXJlLCBvciBvdGhlciBlcnJvciBpbmRpY2F0aW9uLgorICogVmFsdWUgb2YgemVybyBpbmRpY2F0ZXMgc3VjY2Vzc2Z1bCBleGVjdXRpb24gb2YgdGhlIGNvbW1hbmQuCisgKgorICogQ2FsbGJhY2sgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgb25lIG9yIG1vcmUgdGltZXMsIHdpdGggY2JfY21kCisgKiBwb2ludGluZyB0byB0aGUgcmVzcG9uc2UgcmV0dXJuZWQgYnkgdGhlIGhhcmR3YXJlLiBDYWxsYmFjaworICogZnVuY3Rpb24gbXVzdCByZXR1cm4gbm9uLXplcm8gaWYgbW9yZSByZXBseSBibG9ja3MgYXJlIGV4cGVjdGVkLAorICogYW5kIHplcm8gaWYgdGhlIGxhc3Qgb3Igb25seSByZXBseSBibG9jayBpcyByZWNlaXZlZC4gQ2FsbGJhY2sKKyAqIGZ1bmN0aW9uIGNhbiBnZXQgdGhlIHZhbHVlIG9mIHRoZSByZXBseV9wYXJhbSBwb2ludGVyIGZyb20gdGhlCisgKiBmaWVsZCAncGFyYW0nIG9mIHRoZSBzdHJ1Y3R1cmUgcWV0aF9yZXBseS4KKyAqLworCiBpbnQgcWV0aF9zZW5kX2NvbnRyb2xfZGF0YShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBpbnQgbGVuLAogCQlzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICppb2IsCi0JCWludCAoKnJlcGx5X2NiKShzdHJ1Y3QgcWV0aF9jYXJkICosIHN0cnVjdCBxZXRoX3JlcGx5ICosCi0JCQl1bnNpZ25lZCBsb25nKSwKKwkJaW50ICgqcmVwbHlfY2IpKHN0cnVjdCBxZXRoX2NhcmQgKmNiX2NhcmQsCisJCQkJc3RydWN0IHFldGhfcmVwbHkgKmNiX3JlcGx5LAorCQkJCXVuc2lnbmVkIGxvbmcgY2JfY21kKSwKIAkJdm9pZCAqcmVwbHlfcGFyYW0pCiB7CiAJaW50IHJjOwpAQCAtMjkxNCw5ICsyOTQ0LDE2IEBACiAJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwogCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKIAotCWlvYiA9IHFldGhfd2FpdF9mb3JfYnVmZmVyKCZjYXJkLT53cml0ZSk7Ci0JY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwotCXFldGhfZmlsbF9pcGFjbWRfaGVhZGVyKGNhcmQsIGNtZCwgaXBhY21kLCBwcm90KTsKKwlpb2IgPSBxZXRoX2dldF9idWZmZXIoJmNhcmQtPndyaXRlKTsKKwlpZiAoaW9iKSB7CisJCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKKwkJcWV0aF9maWxsX2lwYWNtZF9oZWFkZXIoY2FyZCwgY21kLCBpcGFjbWQsIHByb3QpOworCX0gZWxzZSB7CisJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCisJCQkgIlRoZSBxZXRoIGRyaXZlciByYW4gb3V0IG9mIGNoYW5uZWwgY29tbWFuZCBidWZmZXJzXG4iKTsKKwkJUUVUSF9EQkZfTUVTU0FHRSgxLCAiJXMgVGhlIHFldGggZHJpdmVyIHJhbiBvdXQgb2YgY2hhbm5lbCBjb21tYW5kIGJ1ZmZlcnMiLAorCQkJCSBkZXZfbmFtZSgmY2FyZC0+Z2Rldi0+ZGV2KSk7CisJfQogCiAJcmV0dXJuIGlvYjsKIH0KQEAgLTI5MzIsNiArMjk2OSwxMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9wcmVwYXJlX2lwYV9jbWQpOwogCisvKioKKyAqIHFldGhfc2VuZF9pcGFfY21kKCkgLSBzZW5kIGFuIElQQSBjb21tYW5kCisgKgorICogU2VlIHFldGhfc2VuZF9jb250cm9sX2RhdGEoKSBmb3IgZXhwbGFuYXRpb24gb2YgdGhlIGFyZ3VtZW50cy4KKyAqLworCiBpbnQgcWV0aF9zZW5kX2lwYV9jbWQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iLAogCQlpbnQgKCpyZXBseV9jYikoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWV0aF9yZXBseSosCiAJCQl1bnNpZ25lZCBsb25nKSwKQEAgLTI5NjgsNiArMzAxMSw4IEBACiAJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgInN0cnRsYW4iKTsKIAogCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9TVEFSVExBTiwgMCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCXJjID0gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBOVUxMLCBOVUxMKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0zMDEzLDExICszMDU4LDEzIEBACiAKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUQURBUFRFUlBBUk1TLAogCQkJCSAgICAgUUVUSF9QUk9UX0lQVjQpOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKLQljbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmhkci5jbWRsZW5ndGggPSBjbWRsZW47Ci0JY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5oZHIuY29tbWFuZF9jb2RlID0gY29tbWFuZDsKLQljbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmhkci51c2VkX3RvdGFsID0gMTsKLQljbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmhkci5zZXFfbm8gPSAxOworCWlmIChpb2IpIHsKKwkJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOworCQljbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmhkci5jbWRsZW5ndGggPSBjbWRsZW47CisJCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLmNvbW1hbmRfY29kZSA9IGNvbW1hbmQ7CisJCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuaGRyLnVzZWRfdG90YWwgPSAxOworCQljbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmhkci5zZXFfbm8gPSAxOworCX0KIAogCXJldHVybiBpb2I7CiB9CkBAIC0zMDMwLDYgKzMwNzcsOCBAQAogCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDMsICJxdWVyeWFkcCIpOwogCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfUVVFUllfQ09NTUFORFNfU1VQUE9SVEVELAogCQkJCSAgIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXMpKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfcXVlcnlfc2V0YWRhcHRlcnBhcm1zX2NiLCBOVUxMKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0zMDgwLDYgKzMxMjksOCBAQAogCiAJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICJxaXBhc3NpJWkiLCBwcm90KTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfUUlQQVNTSVNULCBwcm90KTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJcmMgPSBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsIHFldGhfcXVlcnlfaXBhc3Npc3RzX2NiLCBOVUxMKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC0zMTE5LDYgKzMxNzAsOCBAQAogCQlyZXR1cm4gLUVOT01FRElVTTsKIAlpb2IgPSBxZXRoX2dldF9hZGFwdGVyX2NtZChjYXJkLCBJUEFfU0VUQURQX1FVRVJZX1NXSVRDSF9BVFRSSUJVVEVTLAogCQkJCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXNfaGRyKSk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCXJldHVybiBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsCiAJCQkJcWV0aF9xdWVyeV9zd2l0Y2hfYXR0cmlidXRlc19jYiwgc3dfaW5mbyk7CiB9CkBAIC0zMTQ2LDYgKzMxOTksOCBAQAogCiAJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgInFkaWFnYXNzIik7CiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NFVF9ESUFHX0FTUywgMCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuZGlhZ2Fzcy5zdWJjbWRfbGVuID0gMTY7CiAJY21kLT5kYXRhLmRpYWdhc3Muc3ViY21kID0gUUVUSF9ESUFHU19DTURfUVVFUlk7CkBAIC0zMTk3LDYgKzMyNTIsOCBAQAogCiAJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImRpYWd0cmFwIik7CiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NFVF9ESUFHX0FTUywgMCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuZGlhZ2Fzcy5zdWJjbWRfbGVuID0gODA7CiAJY21kLT5kYXRhLmRpYWdhc3Muc3ViY21kID0gUUVUSF9ESUFHU19DTURfVFJBUDsKQEAgLTQxNjIsNiArNDIxOSw4IEBACiAKIAlpb2IgPSBxZXRoX2dldF9hZGFwdGVyX2NtZChjYXJkLCBJUEFfU0VUQURQX1NFVF9QUk9NSVNDX01PREUsCiAJCQlzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zKSk7CisJaWYgKCFpb2IpCisJCXJldHVybjsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGEgKyBJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuc2V0YWRhcHRlcnBhcm1zLmRhdGEubW9kZSA9IG1vZGU7CiAJcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBxZXRoX3NldGFkcF9wcm9taXNjX21vZGVfY2IsIE5VTEwpOwpAQCAtNDIzMiw2ICs0MjkxLDggQEAKIAogCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfQUxURVJfTUFDX0FERFJFU1MsCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBxZXRoX2lwYWNtZF9zZXRhZHBwYXJtcykpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLmNoYW5nZV9hZGRyLmNtZCA9IENIQU5HRV9BRERSX1JFQURfTUFDOwogCWNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5jaGFuZ2VfYWRkci5hZGRyX3NpemUgPSBPU0FfQUREUl9MRU47CkBAIC00MzQ1LDYgKzQ0MDYsOCBAQAogCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfU0VUX0FDQ0VTU19DT05UUk9MLAogCQkJCSAgIHNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXNfaGRyKSArCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBxZXRoX3NldF9hY2Nlc3NfY3RybCkpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJYWNjZXNzX2N0cmxfcmVxID0gJmNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5zZXRfYWNjZXNzX2N0cmw7CiAJYWNjZXNzX2N0cmxfcmVxLT5zdWJjbWRfY29kZSA9IGlzb2xhdGlvbjsKQEAgLTQ1ODgsNiArNDY1MSwxMCBAQAogCiAJaW9iID0gcWV0aF9nZXRfYWRhcHRlcl9jbWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfU05NUF9DT05UUk9MLAogCQkJCSAgIFFFVEhfU05NUF9TRVRBRFBfQ01ETEVOR1RIICsgcmVxX2xlbik7CisJaWYgKCFpb2IpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCW1lbWNweSgmY21kLT5kYXRhLnNldGFkYXB0ZXJwYXJtcy5kYXRhLnNubXAsICZ1cmVxLT5jbWQsIHJlcV9sZW4pOwogCXJjID0gcWV0aF9zZW5kX2lwYV9zbm1wX2NtZChjYXJkLCBpb2IsIFFFVEhfU0VUQURQX0JBU0VfTEVOICsgcmVxX2xlbiwKQEAgLTQ1OTksNyArNDY2Niw3IEBACiAJCWlmIChjb3B5X3RvX3VzZXIodWRhdGEsIHFpbmZvLnVkYXRhLCBxaW5mby51ZGF0YV9sZW4pKQogCQkJcmMgPSAtRUZBVUxUOwogCX0KLQorb3V0OgogCWtmcmVlKHVyZXEpOwogCWtmcmVlKHFpbmZvLnVkYXRhKTsKIAlyZXR1cm4gcmM7CkBAIC00NjcwLDYgKzQ3MzcsMTAgQEAKIAlpb2IgPSBxZXRoX2dldF9hZGFwdGVyX2NtZChjYXJkLCBJUEFfU0VUQURQX1FVRVJZX09BVCwKIAkJCQkgICBzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zX2hkcikgKwogCQkJCSAgIHNpemVvZihzdHJ1Y3QgcWV0aF9xdWVyeV9vYXQpKTsKKwlpZiAoIWlvYikgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0X2ZyZWU7CisJfQogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAlvYXRfcmVxID0gJmNtZC0+ZGF0YS5zZXRhZGFwdGVycGFybXMuZGF0YS5xdWVyeV9vYXQ7CiAJb2F0X3JlcS0+c3ViY21kX2NvZGUgPSBvYXRfZGF0YS5jb21tYW5kOwpAQCAtNDczNSw2ICs0ODA2LDggQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlvYiA9IHFldGhfZ2V0X2FkYXB0ZXJfY21kKGNhcmQsIElQQV9TRVRBRFBfUVVFUllfQ0FSRF9JTkZPLAogCQlzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NldGFkcHBhcm1zX2hkcikpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAlyZXR1cm4gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCBxZXRoX3F1ZXJ5X2NhcmRfaW5mb19jYiwKIAkJCQkJKHZvaWQgKiljYXJyaWVyX2luZm8pOwogfQpAQCAtNTA2MCwxMSArNTEzMywyMyBAQAogCWNhcmQtPm9wdGlvbnMuYWRwLnN1cHBvcnRlZF9mdW5jcyA9IDA7CiAJY2FyZC0+b3B0aW9ucy5zYnAuc3VwcG9ydGVkX2Z1bmNzID0gMDsKIAljYXJkLT5pbmZvLmRpYWdhc3Nfc3VwcG9ydCA9IDA7Ci0JcWV0aF9xdWVyeV9pcGFzc2lzdHMoY2FyZCwgUUVUSF9QUk9UX0lQVjQpOwotCWlmIChxZXRoX2lzX3N1cHBvcnRlZChjYXJkLCBJUEFfU0VUQURBUFRFUlBBUk1TKSkKLQkJcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXMoY2FyZCk7Ci0JaWYgKHFldGhfYWRwX3N1cHBvcnRlZChjYXJkLCBJUEFfU0VUQURQX1NFVF9ESUFHX0FTU0lTVCkpCi0JCXFldGhfcXVlcnlfc2V0ZGlhZ2FzcyhjYXJkKTsKKwlyYyA9IHFldGhfcXVlcnlfaXBhc3Npc3RzKGNhcmQsIFFFVEhfUFJPVF9JUFY0KTsKKwlpZiAocmMgPT0gLUVOT01FTSkKKwkJZ290byBvdXQ7CisJaWYgKHFldGhfaXNfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBREFQVEVSUEFSTVMpKSB7CisJCXJjID0gcWV0aF9xdWVyeV9zZXRhZGFwdGVycGFybXMoY2FyZCk7CisJCWlmIChyYyA8IDApIHsKKwkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNmVyciVkIiwgcmMpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJaWYgKHFldGhfYWRwX3N1cHBvcnRlZChjYXJkLCBJUEFfU0VUQURQX1NFVF9ESUFHX0FTU0lTVCkpIHsKKwkJcmMgPSBxZXRoX3F1ZXJ5X3NldGRpYWdhc3MoY2FyZCk7CisJCWlmIChyYyA8IDApIHsKKwkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiN2VyciVkIiwgcmMpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CiAJcmV0dXJuIDA7CiBvdXQ6CiAJZGV2X3dhcm4oJmNhcmQtPmdkZXYtPmRldiwgIlRoZSBxZXRoIGRldmljZSBkcml2ZXIgZmFpbGVkIHRvIHJlY292ZXIgIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfc3lzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYwppbmRleCAxNTUyM2YwZTQuLjQyM2JlYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCkBAIC0yMzEsNyArMjMxLDYgQEAKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQljaGFyICp0bXA7CiAJaW50IHJjID0gMDsKIAogCWlmICghY2FyZCkKQEAgLTI1MywzNiArMjUyLDM1IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXRtcCA9IHN0cnNlcCgoY2hhciAqKikgJmJ1ZiwgIlxuIik7Ci0JaWYgKCFzdHJjbXAodG1wLCAicHJpb19xdWV1ZWluZ19wcmVjIikpIHsKKwlpZiAoc3lzZnNfc3RyZXEoYnVmLCAicHJpb19xdWV1ZWluZ19wcmVjIikpIHsKIAkJY2FyZC0+cWRpby5kb19wcmlvX3F1ZXVlaW5nID0gUUVUSF9QUklPX1FfSU5HX1BSRUM7CiAJCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSBRRVRIX0RFRkFVTFRfUVVFVUU7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgInByaW9fcXVldWVpbmdfc2tiIikpIHsKKwl9IGVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgInByaW9fcXVldWVpbmdfc2tiIikpIHsKIAkJY2FyZC0+cWRpby5kb19wcmlvX3F1ZXVlaW5nID0gUUVUSF9QUklPX1FfSU5HX1NLQjsKIAkJY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSA9IFFFVEhfREVGQVVMVF9RVUVVRTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAicHJpb19xdWV1ZWluZ190b3MiKSkgeworCX0gZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCAicHJpb19xdWV1ZWluZ190b3MiKSkgewogCQljYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgPSBRRVRIX1BSSU9fUV9JTkdfVE9TOwogCQljYXJkLT5xZGlvLmRlZmF1bHRfb3V0X3F1ZXVlID0gUUVUSF9ERUZBVUxUX1FVRVVFOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJwcmlvX3F1ZXVlaW5nX3ZsYW4iKSkgeworCX0gZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCAicHJpb19xdWV1ZWluZ192bGFuIikpIHsKIAkJaWYgKCFjYXJkLT5vcHRpb25zLmxheWVyMikgewogCQkJcmMgPSAtRU5PVFNVUFA7CiAJCQlnb3RvIG91dDsKIAkJfQogCQljYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgPSBRRVRIX1BSSU9fUV9JTkdfVkxBTjsKIAkJY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSA9IFFFVEhfREVGQVVMVF9RVUVVRTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAibm9fcHJpb19xdWV1ZWluZzowIikpIHsKKwl9IGVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgIm5vX3ByaW9fcXVldWVpbmc6MCIpKSB7CiAJCWNhcmQtPnFkaW8uZG9fcHJpb19xdWV1ZWluZyA9IFFFVEhfTk9fUFJJT19RVUVVRUlORzsKIAkJY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSA9IDA7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIm5vX3ByaW9fcXVldWVpbmc6MSIpKSB7CisJfSBlbHNlIGlmIChzeXNmc19zdHJlcShidWYsICJub19wcmlvX3F1ZXVlaW5nOjEiKSkgewogCQljYXJkLT5xZGlvLmRvX3ByaW9fcXVldWVpbmcgPSBRRVRIX05PX1BSSU9fUVVFVUVJTkc7CiAJCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAxOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJub19wcmlvX3F1ZXVlaW5nOjIiKSkgeworCX0gZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCAibm9fcHJpb19xdWV1ZWluZzoyIikpIHsKIAkJY2FyZC0+cWRpby5kb19wcmlvX3F1ZXVlaW5nID0gUUVUSF9OT19QUklPX1FVRVVFSU5HOwogCQljYXJkLT5xZGlvLmRlZmF1bHRfb3V0X3F1ZXVlID0gMjsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAibm9fcHJpb19xdWV1ZWluZzozIikpIHsKKwl9IGVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgIm5vX3ByaW9fcXVldWVpbmc6MyIpKSB7CiAJCWNhcmQtPnFkaW8uZG9fcHJpb19xdWV1ZWluZyA9IFFFVEhfTk9fUFJJT19RVUVVRUlORzsKIAkJY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSA9IDM7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIm5vX3ByaW9fcXVldWVpbmciKSkgeworCX0gZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCAibm9fcHJpb19xdWV1ZWluZyIpKSB7CiAJCWNhcmQtPnFkaW8uZG9fcHJpb19xdWV1ZWluZyA9IFFFVEhfTk9fUFJJT19RVUVVRUlORzsKIAkJY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSA9IFFFVEhfREVGQVVMVF9RVUVVRTsKIAl9IGVsc2UKQEAgLTQ5Nyw4ICs0OTUsNiBAQAogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAllbnVtIHFldGhfaXBhX2lzb2xhdGlvbl9tb2RlcyBpc29sYXRpb247CiAJaW50IHJjID0gMDsKLQljaGFyICp0bXAsICpjdXJ0b2tlbjsKLQljdXJ0b2tlbiA9IChjaGFyICopIGJ1ZjsKIAogCWlmICghY2FyZCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01MTUsMTIgKzUxMSwxMSBAQAogCX0KIAogCS8qIHBhcnNlIGlucHV0IGludG8gaXNvbGF0aW9uIG1vZGUgKi8KLQl0bXAgPSBzdHJzZXAoJmN1cnRva2VuLCAiXG4iKTsKLQlpZiAoIXN0cmNtcCh0bXAsIEFUVFJfUUVUSF9JU09MQVRJT05fTk9ORSkpIHsKKwlpZiAoc3lzZnNfc3RyZXEoYnVmLCBBVFRSX1FFVEhfSVNPTEFUSU9OX05PTkUpKSB7CiAJCWlzb2xhdGlvbiA9IElTT0xBVElPTl9NT0RFX05PTkU7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgQVRUUl9RRVRIX0lTT0xBVElPTl9GV0QpKSB7CisJfSBlbHNlIGlmIChzeXNmc19zdHJlcShidWYsIEFUVFJfUUVUSF9JU09MQVRJT05fRldEKSkgewogCQlpc29sYXRpb24gPSBJU09MQVRJT05fTU9ERV9GV0Q7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgQVRUUl9RRVRIX0lTT0xBVElPTl9EUk9QKSkgeworCX0gZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCBBVFRSX1FFVEhfSVNPTEFUSU9OX0RST1ApKSB7CiAJCWlzb2xhdGlvbiA9IElTT0xBVElPTl9NT0RFX0RST1A7CiAJfSBlbHNlIHsKIAkJcmMgPSAtRUlOVkFMOwpAQCAtNTMxLDggKzUyNiw3IEBACiAJLyogZGVmZXIgSVAgYXNzaXN0IGlmIGRldmljZSBpcyBvZmZsaW5lICh1bnRpbCBkaXNjaXBsaW5lLT5zZXRfb25saW5lKSovCiAJY2FyZC0+b3B0aW9ucy5wcmV2X2lzb2xhdGlvbiA9IGNhcmQtPm9wdGlvbnMuaXNvbGF0aW9uOwogCWNhcmQtPm9wdGlvbnMuaXNvbGF0aW9uID0gaXNvbGF0aW9uOwotCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1NPRlRTRVRVUCB8fAotCSAgICBjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKSB7CisJaWYgKHFldGhfY2FyZF9od19pc19yZWFjaGFibGUoY2FyZCkpIHsKIAkJaW50IGlwYV9yYyA9IHFldGhfc2V0X2FjY2Vzc19jdHJsX29ubGluZShjYXJkLCAxKTsKIAkJaWYgKGlwYV9yYyAhPSAwKQogCQkJcmMgPSBpcGFfcmM7CkBAIC01NTUsNyArNTQ5LDcgQEAKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfU09GVFNFVFVQICYmIGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfVVApCisJaWYgKCFxZXRoX2NhcmRfaHdfaXNfcmVhY2hhYmxlKGNhcmQpKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICJuL2FcbiIpOwogCiAJcmMgPSBxZXRoX3F1ZXJ5X3N3aXRjaF9hdHRyaWJ1dGVzKGNhcmQsICZzd19pbmZvKTsKQEAgLTU5OCwxOSArNTkyLDE2IEBACiB7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCByYyA9IDA7Ci0JY2hhciAqdG1wLCAqY3VydG9rZW47CiAJaW50IHN0YXRlID0gMDsKLQljdXJ0b2tlbiA9IChjaGFyICopYnVmOwogCiAJaWYgKCFjYXJkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmNhcmQtPmNvbmZfbXV0ZXgpOwotCWlmIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1NPRlRTRVRVUCB8fCBjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKQorCWlmIChxZXRoX2NhcmRfaHdfaXNfcmVhY2hhYmxlKGNhcmQpKQogCQlzdGF0ZSA9IDE7Ci0JdG1wID0gc3Ryc2VwKCZjdXJ0b2tlbiwgIlxuIik7CiAKLQlpZiAoIXN0cmNtcCh0bXAsICJhcm0iKSAmJiAhY2FyZC0+aW5mby5od3RyYXApIHsKKwlpZiAoc3lzZnNfc3RyZXEoYnVmLCAiYXJtIikgJiYgIWNhcmQtPmluZm8uaHd0cmFwKSB7CiAJCWlmIChzdGF0ZSkgewogCQkJaWYgKHFldGhfaXNfZGlhZ2Fzc19zdXBwb3J0ZWQoY2FyZCwKIAkJCSAgICBRRVRIX0RJQUdTX0NNRF9UUkFQKSkgewpAQCAtNjIxLDE0ICs2MTIsMTQgQEAKIAkJCQlyYyA9IC1FSU5WQUw7CiAJCX0gZWxzZQogCQkJY2FyZC0+aW5mby5od3RyYXAgPSAxOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJkaXNhcm0iKSAmJiBjYXJkLT5pbmZvLmh3dHJhcCkgeworCX0gZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCAiZGlzYXJtIikgJiYgY2FyZC0+aW5mby5od3RyYXApIHsKIAkJaWYgKHN0YXRlKSB7CiAJCQlyYyA9IHFldGhfaHdfdHJhcChjYXJkLCBRRVRIX0RJQUdTX1RSQVBfRElTQVJNKTsKIAkJCWlmICghcmMpCiAJCQkJY2FyZC0+aW5mby5od3RyYXAgPSAwOwogCQl9IGVsc2UKIAkJCWNhcmQtPmluZm8uaHd0cmFwID0gMDsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAidHJhcCIpICYmIHN0YXRlICYmIGNhcmQtPmluZm8uaHd0cmFwKQorCX0gZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCAidHJhcCIpICYmIHN0YXRlICYmIGNhcmQtPmluZm8uaHd0cmFwKQogCQlyYyA9IHFldGhfaHdfdHJhcChjYXJkLCBRRVRIX0RJQUdTX1RSQVBfQ0FQVFVSRSk7CiAJZWxzZQogCQlyYyA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwppbmRleCBkMDJjZDFhLi4wZWEwODY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTI3LDEwICsyNyw3IEBACiBzdGF0aWMgaW50IHFldGhfbDJfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX2RlbG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICosIF9fdTggKik7CiBzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoc3RydWN0IHFldGhfY2FyZCAqLCBfX3U4ICosCi0JCQkgICBlbnVtIHFldGhfaXBhX2NtZHMsCi0JCQkgICBpbnQgKCpyZXBseV9jYikgKHN0cnVjdCBxZXRoX2NhcmQgKiwKLQkJCQkJICAgIHN0cnVjdCBxZXRoX3JlcGx5KiwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcpKTsKKwkJCSAgIGVudW0gcWV0aF9pcGFfY21kcyk7CiBzdGF0aWMgdm9pZCBxZXRoX2wyX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyBpbnQgcWV0aF9sMl9yZWNvdmVyKHZvaWQgKik7CiBzdGF0aWMgdm9pZCBxZXRoX2JyaWRnZXBvcnRfcXVlcnlfc3VwcG9ydChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKTsKQEAgLTQ4LDggKzQ1LDcgQEAKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1VQKSAmJgotCQkoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9TT0ZUU0VUVVApKQorCWlmICghcWV0aF9jYXJkX2h3X2lzX3JlYWNoYWJsZShjYXJkKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKQEAgLTEzMCw1NiArMTI2LDcxIEBACiAJcmV0dXJuIG5kZXY7CiB9CiAKLXN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldGdyb3VwbWFjX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsCi0JCQkJc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkJCXVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyBpbnQgcWV0aF9zZXRkZWxfbWFrZXJjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCByZXRjb2RlKQogewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQlfX3U4ICptYWM7CisJaW50IHJjOwogCi0JUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyU2dtYWNiIik7Ci0JY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikgZGF0YTsKLQltYWMgPSAmY21kLT5kYXRhLnNldGRlbG1hYy5tYWNbMF07Ci0JLyogTUFDIGFscmVhZHkgcmVnaXN0ZXJlZCwgbmVlZGVkIGluIGNvdXBsZS91bmNvdXBsZSBjYXNlICovCi0JaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlID09ICBJUEFfUkNfTDJfRFVQX01BQykgewotCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJHcm91cCBNQUMgJXBNIGFscmVhZHkgZXhpc3Rpbmcgb24gJXMgXG4iLAotCQkJICBtYWMsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOwotCQljbWQtPmhkci5yZXR1cm5fY29kZSA9IDA7CisJaWYgKHJldGNvZGUpCisJCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiZXJyJTA0eCIsIHJldGNvZGUpOworCXN3aXRjaCAocmV0Y29kZSkgeworCWNhc2UgSVBBX1JDX1NVQ0NFU1M6CisJCXJjID0gMDsKKwkJYnJlYWs7CisJY2FzZSBJUEFfUkNfTDJfVU5TVVBQT1JURURfQ01EOgorCQlyYyA9IC1FTk9TWVM7CisJCWJyZWFrOworCWNhc2UgSVBBX1JDX0wyX0FERFJfVEFCTEVfRlVMTDoKKwkJcmMgPSAtRU5PU1BDOworCQlicmVhazsKKwljYXNlIElQQV9SQ19MMl9EVVBfTUFDOgorCWNhc2UgSVBBX1JDX0wyX0RVUF9MQVlFUjNfTUFDOgorCQlyYyA9IC1FRVhJU1Q7CisJCWJyZWFrOworCWNhc2UgSVBBX1JDX0wyX01BQ19OT1RfQVVUSF9CWV9IWVA6CisJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0FEUDoKKwkJcmMgPSAtRVBFUk07CisJCWJyZWFrOworCWNhc2UgSVBBX1JDX0wyX01BQ19OT1RfRk9VTkQ6CisJCXJjID0gLUVOT0VOVDsKKwkJYnJlYWs7CisJY2FzZSAtRU5PTUVNOgorCQlyYyA9IC1FTk9NRU07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJjID0gLUVJTzsKKwkJYnJlYWs7CiAJfQotCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkKLQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiQ291bGQgbm90IHNldCBncm91cCBNQUMgJXBNIG9uICVzOiAleFxuIiwKLQkJCSAgbWFjLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9zZXRncm91cG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMpCiB7CisJaW50IHJjOworCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyU2dtYWMiKTsKLQlyZXR1cm4gcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfU0VUR01BQywKLQkJCQkJICBxZXRoX2wyX3NlbmRfc2V0Z3JvdXBtYWNfY2IpOwotfQotCi1zdGF0aWMgaW50IHFldGhfbDJfc2VuZF9kZWxncm91cG1hY19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJCXN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKLQkJCQl1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IHFldGhfaXBhX2NtZCAqY21kOwotCV9fdTggKm1hYzsKLQotCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJMMkRnbWFjYiIpOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0JbWFjID0gJmNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjWzBdOwotCWlmIChjbWQtPmhkci5yZXR1cm5fY29kZSkKLQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiQ291bGQgbm90IGRlbGV0ZSBncm91cCBNQUMgJXBNIG9uICVzOiAleFxuIiwKLQkJCSAgbWFjLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7Ci0JcmV0dXJuIDA7CisJcmMgPSBxZXRoX3NldGRlbF9tYWtlcmMoY2FyZCwgcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsCisJCQkJCUlQQV9DTURfU0VUR01BQykpOworCWlmIChyYyA9PSAtRUVYSVNUKQorCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJHcm91cCBNQUMgJXBNIGFscmVhZHkgZXhpc3Rpbmcgb24gJXNcbiIsCisJCQltYWMsIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCkpOworCWVsc2UgaWYgKHJjKQorCQlRRVRIX0RCRl9NRVNTQUdFKDIsICJDb3VsZCBub3Qgc2V0IGdyb3VwIE1BQyAlcE0gb24gJXM6ICVkXG4iLAorCQkJbWFjLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYyk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9kZWxncm91cG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMpCiB7CisJaW50IHJjOworCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyRGdtYWMiKTsKLQlyZXR1cm4gcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfREVMR01BQywKLQkJCQkJICBxZXRoX2wyX3NlbmRfZGVsZ3JvdXBtYWNfY2IpOworCXJjID0gcWV0aF9zZXRkZWxfbWFrZXJjKGNhcmQsIHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLAorCQkJCQlJUEFfQ01EX0RFTEdNQUMpKTsKKwlpZiAocmMpCisJCVFFVEhfREJGX01FU1NBR0UoMiwKKwkJCSJDb3VsZCBub3QgZGVsZXRlIGdyb3VwIE1BQyAlcE0gb24gJXM6ICVkXG4iLAorCQkJbWFjLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpLCByYyk7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgdm9pZCBxZXRoX2wyX2FkZF9tYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMsIGludCB2bWFjKQpAQCAtMTk3LDEwICsyMDgsMTEgQEAKIAltYy0+aXNfdm1hYyA9IHZtYWM7CiAKIAlpZiAodm1hYykgewotCQlyYyA9IHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLCBJUEFfQ01EX1NFVFZNQUMsCi0JCQkJCU5VTEwpOworCQlyYyA9IHFldGhfc2V0ZGVsX21ha2VyYyhjYXJkLAorCQkJcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYWMsIElQQV9DTURfU0VUVk1BQykpOwogCX0gZWxzZSB7Ci0JCXJjID0gcWV0aF9sMl9zZW5kX3NldGdyb3VwbWFjKGNhcmQsIG1hYyk7CisJCXJjID0gcWV0aF9zZXRkZWxfbWFrZXJjKGNhcmQsCisJCQlxZXRoX2wyX3NlbmRfc2V0Z3JvdXBtYWMoY2FyZCwgbWFjKSk7CiAJfQogCiAJaWYgKCFyYykKQEAgLTIxOCw3ICsyMzAsNyBAQAogCQlpZiAoZGVsKSB7CiAJCQlpZiAobWMtPmlzX3ZtYWMpCiAJCQkJcWV0aF9sMl9zZW5kX3NldGRlbG1hYyhjYXJkLCBtYy0+bWNfYWRkciwKLQkJCQkJSVBBX0NNRF9ERUxWTUFDLCBOVUxMKTsKKwkJCQkJSVBBX0NNRF9ERUxWTUFDKTsKIAkJCWVsc2UKIAkJCQlxZXRoX2wyX3NlbmRfZGVsZ3JvdXBtYWMoY2FyZCwgbWMtPm1jX2FkZHIpOwogCQl9CkBAIC0yOTEsNiArMzAzLDggQEAKIAogCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCA0LCAiTDJzZHYleCIsIGlwYWNtZCk7CiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBpcGFjbWQsIFFFVEhfUFJPVF9JUFY0KTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5zZXRkZWx2bGFuLnZsYW5faWQgPSBpOwogCXJldHVybiBxZXRoX3NlbmRfaXBhX2NtZChjYXJkLCBpb2IsCkBAIC0zMTMsNiArMzI3LDcgQEAKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwogCXN0cnVjdCBxZXRoX3ZsYW5fdmlkICppZDsKKwlpbnQgcmM7CiAKIAlRRVRIX0NBUkRfVEVYVF8oY2FyZCwgNCwgImFpZDolZCIsIHZpZCk7CiAJaWYgKCF2aWQpCkBAIC0zMjgsNyArMzQzLDExIEBACiAJaWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF92bGFuX3ZpZCksIEdGUF9BVE9NSUMpOwogCWlmIChpZCkgewogCQlpZC0+dmlkID0gdmlkOwotCQlxZXRoX2wyX3NlbmRfc2V0ZGVsdmxhbihjYXJkLCB2aWQsIElQQV9DTURfU0VUVkxBTik7CisJCXJjID0gcWV0aF9sMl9zZW5kX3NldGRlbHZsYW4oY2FyZCwgdmlkLCBJUEFfQ01EX1NFVFZMQU4pOworCQlpZiAocmMpIHsKKwkJCWtmcmVlKGlkKTsKKwkJCXJldHVybiByYzsKKwkJfQogCQlzcGluX2xvY2tfYmgoJmNhcmQtPnZsYW5sb2NrKTsKIAkJbGlzdF9hZGRfdGFpbCgmaWQtPmxpc3QsICZjYXJkLT52aWRfbGlzdCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZjYXJkLT52bGFubG9jayk7CkBAIC0zNDMsNiArMzYyLDcgQEAKIHsKIAlzdHJ1Y3QgcWV0aF92bGFuX3ZpZCAqaWQsICp0bXBpZCA9IE5VTEw7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+bWxfcHJpdjsKKwlpbnQgcmMgPSAwOwogCiAJUUVUSF9DQVJEX1RFWFRfKGNhcmQsIDQsICJraWQ6JWQiLCB2aWQpOwogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NNKSB7CkBAIC0zNjMsMTEgKzM4MywxMSBAQAogCX0KIAlzcGluX3VubG9ja19iaCgmY2FyZC0+dmxhbmxvY2spOwogCWlmICh0bXBpZCkgewotCQlxZXRoX2wyX3NlbmRfc2V0ZGVsdmxhbihjYXJkLCB2aWQsIElQQV9DTURfREVMVkxBTik7CisJCXJjID0gcWV0aF9sMl9zZW5kX3NldGRlbHZsYW4oY2FyZCwgdmlkLCBJUEFfQ01EX0RFTFZMQU4pOwogCQlrZnJlZSh0bXBpZCk7CiAJfQogCXFldGhfbDJfc2V0X211bHRpY2FzdF9saXN0KGNhcmQtPmRldik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfc3RvcF9jYXJkKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGludCByZWNvdmVyeV9tb2RlKQpAQCAtNTM5LDkxICs1NTksNjIgQEAKIH0KIAogc3RhdGljIGludCBxZXRoX2wyX3NlbmRfc2V0ZGVsbWFjKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIF9fdTggKm1hYywKLQkJCSAgIGVudW0gcWV0aF9pcGFfY21kcyBpcGFjbWQsCi0JCQkgICBpbnQgKCpyZXBseV9jYikgKHN0cnVjdCBxZXRoX2NhcmQgKiwKLQkJCQkJICAgIHN0cnVjdCBxZXRoX3JlcGx5KiwKLQkJCQkJICAgIHVuc2lnbmVkIGxvbmcpKQorCQkJICAgZW51bSBxZXRoX2lwYV9jbWRzIGlwYWNtZCkKIHsKIAlzdHJ1Y3QgcWV0aF9pcGFfY21kICpjbWQ7CiAJc3RydWN0IHFldGhfY21kX2J1ZmZlciAqaW9iOwogCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyc2RtYWMiKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgUUVUSF9QUk9UX0lQVjQpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJY21kLT5kYXRhLnNldGRlbG1hYy5tYWNfbGVuZ3RoID0gT1NBX0FERFJfTEVOOwogCW1lbWNweSgmY21kLT5kYXRhLnNldGRlbG1hYy5tYWMsIG1hYywgT1NBX0FERFJfTEVOKTsKLQlyZXR1cm4gcWV0aF9zZW5kX2lwYV9jbWQoY2FyZCwgaW9iLCByZXBseV9jYiwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldG1hY19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJICAgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkJICAgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQotCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJMMlNtYWNjYiIpOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0JaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7Ci0JCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiTDJlciV4IiwgY21kLT5oZHIucmV0dXJuX2NvZGUpOwotCQljYXJkLT5pbmZvLm1hY19iaXRzICY9IH5RRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRDsKLQkJc3dpdGNoIChjbWQtPmhkci5yZXR1cm5fY29kZSkgewotCQljYXNlIElQQV9SQ19MMl9EVVBfTUFDOgotCQljYXNlIElQQV9SQ19MMl9EVVBfTEFZRVIzX01BQzoKLQkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkJIk1BQyBhZGRyZXNzICVwTSBhbHJlYWR5IGV4aXN0c1xuIiwKLQkJCQljbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYyk7Ci0JCQlicmVhazsKLQkJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0hZUDoKLQkJY2FzZSBJUEFfUkNfTDJfTUFDX05PVF9BVVRIX0JZX0FEUDoKLQkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkJIk1BQyBhZGRyZXNzICVwTSBpcyBub3QgYXV0aG9yaXplZFxuIiwKLQkJCQljbWQtPmRhdGEuc2V0ZGVsbWFjLm1hYyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJY2FyZC0+aW5mby5tYWNfYml0cyB8PSBRRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRDsKLQkJbWVtY3B5KGNhcmQtPmRldi0+ZGV2X2FkZHIsIGNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjLAotCQkgICAgICAgT1NBX0FERFJfTEVOKTsKLQkJZGV2X2luZm8oJmNhcmQtPmdkZXYtPmRldiwKLQkJCSJNQUMgYWRkcmVzcyAlcE0gc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgb24gZGV2aWNlICVzXG4iLAotCQkJY2FyZC0+ZGV2LT5kZXZfYWRkciwgY2FyZC0+ZGV2LT5uYW1lKTsKLQl9Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgTlVMTCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX3NldG1hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLCBfX3U4ICptYWMpCiB7CisJaW50IHJjOworCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgIkwyU2V0bWFjIik7Ci0JcmV0dXJuIHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLCBJUEFfQ01EX1NFVFZNQUMsCi0JCQkJCSAgcWV0aF9sMl9zZW5kX3NldG1hY19jYik7Ci19Ci0KLXN0YXRpYyBpbnQgcWV0aF9sMl9zZW5kX2RlbG1hY19jYihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkLAotCQkJICAgc3RydWN0IHFldGhfcmVwbHkgKnJlcGx5LAotCQkJICAgdW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBxZXRoX2lwYV9jbWQgKmNtZDsKLQotCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJMMkRtYWNjYiIpOwotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopIGRhdGE7Ci0JaWYgKGNtZC0+aGRyLnJldHVybl9jb2RlKSB7Ci0JCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCAyLCAiZXJyJWQiLCBjbWQtPmhkci5yZXR1cm5fY29kZSk7Ci0JCXJldHVybiAwOworCXJjID0gcWV0aF9zZXRkZWxfbWFrZXJjKGNhcmQsIHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLAorCQkJCQlJUEFfQ01EX1NFVFZNQUMpKTsKKwlpZiAocmMgPT0gMCkgeworCQljYXJkLT5pbmZvLm1hY19iaXRzIHw9IFFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEOworCQltZW1jcHkoY2FyZC0+ZGV2LT5kZXZfYWRkciwgbWFjLCBPU0FfQUREUl9MRU4pOworCQlkZXZfaW5mbygmY2FyZC0+Z2Rldi0+ZGV2LAorCQkJIk1BQyBhZGRyZXNzICVwTSBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCBvbiBkZXZpY2UgJXNcbiIsCisJCQljYXJkLT5kZXYtPmRldl9hZGRyLCBjYXJkLT5kZXYtPm5hbWUpOworCX0gZWxzZSB7CisJCWNhcmQtPmluZm8ubWFjX2JpdHMgJj0gflFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEOworCQlzd2l0Y2ggKHJjKSB7CisJCWNhc2UgLUVFWElTVDoKKwkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCisJCQkJIk1BQyBhZGRyZXNzICVwTSBhbHJlYWR5IGV4aXN0c1xuIiwgbWFjKTsKKwkJCWJyZWFrOworCQljYXNlIC1FUEVSTToKKwkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCisJCQkJIk1BQyBhZGRyZXNzICVwTSBpcyBub3QgYXV0aG9yaXplZFxuIiwgbWFjKTsKKwkJCWJyZWFrOworCQl9CiAJfQotCWNhcmQtPmluZm8ubWFjX2JpdHMgJj0gflFFVEhfTEFZRVIyX01BQ19SRUdJU1RFUkVEOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfc2VuZF9kZWxtYWMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgX191OCAqbWFjKQogeworCWludCByYzsKKwogCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDIsICJMMkRlbG1hYyIpOwogCWlmICghKGNhcmQtPmluZm8ubWFjX2JpdHMgJiBRRVRIX0xBWUVSMl9NQUNfUkVHSVNURVJFRCkpCiAJCXJldHVybiAwOwotCXJldHVybiBxZXRoX2wyX3NlbmRfc2V0ZGVsbWFjKGNhcmQsIG1hYywgSVBBX0NNRF9ERUxWTUFDLAotCQkJCQkgIHFldGhfbDJfc2VuZF9kZWxtYWNfY2IpOworCXJjID0gcWV0aF9zZXRkZWxfbWFrZXJjKGNhcmQsIHFldGhfbDJfc2VuZF9zZXRkZWxtYWMoY2FyZCwgbWFjLAorCQkJCQlJUEFfQ01EX0RFTFZNQUMpKTsKKwlpZiAocmMgPT0gMCkKKwkJY2FyZC0+aW5mby5tYWNfYml0cyAmPSB+UUVUSF9MQVlFUjJfTUFDX1JFR0lTVEVSRUQ7CisJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IHFldGhfbDJfcmVxdWVzdF9pbml0aWFsX21hYyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQpAQCAtNjUxLDcgKzY0Miw3IEBACiAJCWlmIChyYykgewogCQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiY291bGRuJ3QgZ2V0IE1BQyBhZGRyZXNzIG9uICIKIAkJCQkiZGV2aWNlICVzOiB4JXhcbiIsIENBUkRfQlVTX0lEKGNhcmQpLCByYyk7Ci0JCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjFlcnIlZCIsIHJjKTsKKwkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMWVyciUwNHgiLCByYyk7CiAJCQlyZXR1cm4gcmM7CiAJCX0KIAkJUUVUSF9EQkZfSEVYKFNFVFVQLCAyLCBjYXJkLT5kZXYtPmRldl9hZGRyLCBPU0FfQUREUl9MRU4pOwpAQCAtNjg3LDcgKzY3OCw3IEBACiAJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJfQogCXJjID0gcWV0aF9sMl9zZW5kX2RlbG1hYyhjYXJkLCAmY2FyZC0+ZGV2LT5kZXZfYWRkclswXSk7Ci0JaWYgKCFyYyB8fCAocmMgPT0gSVBBX1JDX0wyX01BQ19OT1RfRk9VTkQpKQorCWlmICghcmMgfHwgKHJjID09IC1FTk9FTlQpKQogCQlyYyA9IHFldGhfbDJfc2VuZF9zZXRtYWMoY2FyZCwgYWRkci0+c2FfZGF0YSk7CiAJcmV0dXJuIHJjID8gLUVJTlZBTCA6IDA7CiB9CkBAIC05OTYsNyArOTg3LDcgQEAKIAlyZWNvdmVyX2ZsYWcgPSBjYXJkLT5zdGF0ZTsKIAlyYyA9IHFldGhfY29yZV9oYXJkc2V0dXBfY2FyZChjYXJkKTsKIAlpZiAocmMpIHsKLQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIyZXJyJWQiLCByYyk7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciUwNHgiLCByYyk7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byBvdXRfcmVtb3ZlOwogCX0KQEAgLTEzNDQsOCArMTMzNSw3IEBACiAJaWYgKCFjYXJkKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAib3Nuc2RtYyIpOwotCWlmICgoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkgJiYKLQkgICAgKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfU09GVFNFVFVQKSkKKwlpZiAoIXFldGhfY2FyZF9od19pc19yZWFjaGFibGUoY2FyZCkpCiAJCXJldHVybiAtRU5PREVWOwogCWlvYiA9IHFldGhfd2FpdF9mb3JfYnVmZmVyKCZjYXJkLT53cml0ZSk7CiAJbWVtY3B5KGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFLCBkYXRhLCBkYXRhX2xlbik7CkBAIC0xNzMwLDYgKzE3MjAsOCBAQAogCiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgMiwgImJycXN1cHBvIik7CiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NFVEJSSURHRVBPUlQsIDApOworCWlmICghaW9iKQorCQlyZXR1cm47CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5zYnAuaGRyLmNtZGxlbmd0aCA9CiAJCXNpemVvZihzdHJ1Y3QgcWV0aF9pcGFjbWRfc2JwX2hkcikgKwpAQCAtMTgwNSw2ICsxNzk3LDggQEAKIAlpZiAoIShjYXJkLT5vcHRpb25zLnNicC5zdXBwb3J0ZWRfZnVuY3MgJiBJUEFfU0JQX1FVRVJZX0JSSURHRV9QT1JUUykpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUQlJJREdFUE9SVCwgMCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuc2JwLmhkci5jbWRsZW5ndGggPQogCQlzaXplb2Yoc3RydWN0IHFldGhfaXBhY21kX3NicF9oZHIpOwpAQCAtMTgxNyw5ICsxODExLDcgQEAKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAlyYyA9IHFldGhfYnJpZGdlcG9ydF9tYWtlcmMoY2FyZCwgJmNiY3RsLCBJUEFfU0JQX1FVRVJZX0JSSURHRV9QT1JUUyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJjOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9icmlkZ2Vwb3J0X3F1ZXJ5X3BvcnRzKTsKIApAQCAtMTg3Myw2ICsxODY1LDggQEAKIAlpZiAoIShjYXJkLT5vcHRpb25zLnNicC5zdXBwb3J0ZWRfZnVuY3MgJiBzZXRjbWQpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NFVEJSSURHRVBPUlQsIDApOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJY21kLT5kYXRhLnNicC5oZHIuY21kbGVuZ3RoID0gY21kbGVuZ3RoOwogCWNtZC0+ZGF0YS5zYnAuaGRyLmNvbW1hbmRfY29kZSA9IHNldGNtZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCmluZGV4IDYyNTIyN2FkLi4wNGU0MmM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKQEAgLTQzMiwxMCArNDMyLDggQEAKIAlRRVRIX0NBUkRfVEVYVChjYXJkLCAyLCAic2RpcGxpc3QiKTsKIAlRRVRIX0NBUkRfSEVYKGNhcmQsIDIsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7CiAKLQlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfVVAgJiYKLQkgICAgIGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfU09GVFNFVFVQKSB8fCBjYXJkLT5vcHRpb25zLnNuaWZmZXIpIHsKKwlpZiAoIXFldGhfY2FyZF9od19pc19yZWFjaGFibGUoY2FyZCkgfHwgY2FyZC0+b3B0aW9ucy5zbmlmZmVyKQogCQlyZXR1cm47Ci0JfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmlwX2xvY2ssIGZsYWdzKTsKIAl0YmRfbGlzdCA9IGNhcmQtPmlwX3RiZF9saXN0OwpAQCAtNTQ5LDYgKzU0Nyw4IEBACiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgInNldGRlbG1jIik7CiAKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIGlwYWNtZCwgYWRkci0+cHJvdG8pOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJbWVtY3B5KCZjbWQtPmRhdGEuc2V0ZGVsaXBtLm1hYywgYWRkci0+bWFjLCBPU0FfQUREUl9MRU4pOwogCWlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNikKQEAgLTU4OCw2ICs1ODgsOCBAQAogCVFFVEhfQ0FSRF9URVhUXyhjYXJkLCA0LCAiZmxhZ3MlMDJYIiwgZmxhZ3MpOwogCiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBpcGFjbWQsIGFkZHItPnByb3RvKTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWlmIChhZGRyLT5wcm90byA9PSBRRVRIX1BST1RfSVBWNikgewogCQltZW1jcHkoY21kLT5kYXRhLnNldGRlbGlwNi5pcF9hZGRyLCAmYWRkci0+dS5hNi5hZGRyLApAQCAtNjE2LDYgKzYxOCw4IEBACiAKIAlRRVRIX0NBUkRfVEVYVChjYXJkLCA0LCAic2V0cm91dGciKTsKIAlpb2IgPSBxZXRoX2dldF9pcGFjbWRfYnVmZmVyKGNhcmQsIElQQV9DTURfU0VUUlRHLCBwcm90KTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJY21kID0gKHN0cnVjdCBxZXRoX2lwYV9jbWQgKikoaW9iLT5kYXRhK0lQQV9QRFVfSEVBREVSX1NJWkUpOwogCWNtZC0+ZGF0YS5zZXRydGcudHlwZSA9ICh0eXBlKTsKIAlyYyA9IHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgTlVMTCwgTlVMTCk7CkBAIC0xMDQ5LDEyICsxMDUzLDE0IEBACiAJUUVUSF9DQVJEX1RFWFQoY2FyZCwgNCwgImdldGFzc2NtIik7CiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NFVEFTU1BBUk1TLCBwcm90KTsKIAotCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKLQljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmFzc2lzdF9ubyA9IGlwYV9mdW5jOwotCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIubGVuZ3RoID0gOCArIGxlbjsKLQljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmNvbW1hbmRfY29kZSA9IGNtZF9jb2RlOwotCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIucmV0dXJuX2NvZGUgPSAwOwotCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5oZHIuc2VxX25vID0gMDsKKwlpZiAoaW9iKSB7CisJCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKKwkJY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5hc3Npc3Rfbm8gPSBpcGFfZnVuYzsKKwkJY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5sZW5ndGggPSA4ICsgbGVuOworCQljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLmNvbW1hbmRfY29kZSA9IGNtZF9jb2RlOworCQljbWQtPmRhdGEuc2V0YXNzcGFybXMuaGRyLnJldHVybl9jb2RlID0gMDsKKwkJY21kLT5kYXRhLnNldGFzc3Bhcm1zLmhkci5zZXFfbm8gPSAwOworCX0KIAogCXJldHVybiBpb2I7CiB9CkBAIC0xMDkwLDYgKzEwOTYsOCBAQAogCVFFVEhfQ0FSRF9URVhUKGNhcmQsIDQsICJzaW1hc3NwNiIpOwogCWlvYiA9IHFldGhfbDNfZ2V0X3NldGFzc3Bhcm1zX2NtZChjYXJkLCBpcGFfZnVuYywgY21kX2NvZGUsCiAJCQkJICAgICAgIDAsIFFFVEhfUFJPVF9JUFY2KTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJcmMgPSBxZXRoX2wzX3NlbmRfc2V0YXNzcGFybXMoY2FyZCwgaW9iLCAwLCAwLAogCQkJCSAgIHFldGhfbDNfZGVmYXVsdF9zZXRhc3NwYXJtc19jYiwgTlVMTCk7CiAJcmV0dXJuIHJjOwpAQCAtMTEwOCw2ICsxMTE2LDggQEAKIAkJbGVuZ3RoID0gc2l6ZW9mKF9fdTMyKTsKIAlpb2IgPSBxZXRoX2wzX2dldF9zZXRhc3NwYXJtc19jbWQoY2FyZCwgaXBhX2Z1bmMsIGNtZF9jb2RlLAogCQkJCSAgICAgICBsZW5ndGgsIFFFVEhfUFJPVF9JUFY0KTsKKwlpZiAoIWlvYikKKwkJcmV0dXJuIC1FTk9NRU07CiAJcmMgPSBxZXRoX2wzX3NlbmRfc2V0YXNzcGFybXMoY2FyZCwgaW9iLCBsZW5ndGgsIGRhdGEsCiAJCQkJICAgcWV0aF9sM19kZWZhdWx0X3NldGFzc3Bhcm1zX2NiLCBOVUxMKTsKIAlyZXR1cm4gcmM7CkBAIC0xNDk0LDYgKzE1MDQsOCBAQAogCiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX0NSRUFURV9BRERSLAogCQkJCSAgICAgUUVUSF9QUk9UX0lQVjYpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJKigoX191MTYgKikgJmNtZC0+ZGF0YS5jcmVhdGVfZGVzdHJveV9hZGRyLnVuaXF1ZV9pZFs2XSkgPQogCQkJY2FyZC0+aW5mby51bmlxdWVfaWQ7CkBAIC0xNTM3LDYgKzE1NDksOCBAQAogCiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX0NSRUFURV9BRERSLAogCQkJCSAgICAgUUVUSF9QUk9UX0lQVjYpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKShpb2ItPmRhdGErSVBBX1BEVV9IRUFERVJfU0laRSk7CiAJKigoX191MTYgKikgJmNtZC0+ZGF0YS5jcmVhdGVfZGVzdHJveV9hZGRyLnVuaXF1ZV9pZFs2XSkgPQogCQkJY2FyZC0+aW5mby51bmlxdWVfaWQ7CkBAIC0xNjExLDYgKzE2MjUsOCBAQAogCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJkaWFndHJhYyIpOwogCiAJaW9iID0gcWV0aF9nZXRfaXBhY21kX2J1ZmZlcihjYXJkLCBJUEFfQ01EX1NFVF9ESUFHX0FTUywgMCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuZGlhZ2Fzcy5zdWJjbWRfbGVuID0gMTY7CiAJY21kLT5kYXRhLmRpYWdhc3Muc3ViY21kID0gUUVUSF9ESUFHU19DTURfVFJBQ0U7CkBAIC0yNDQyLDYgKzI0NTgsOCBAQAogCQkJSVBBX0NNRF9BU1NfQVJQX1FVRVJZX0lORk8sCiAJCQlzaXplb2Yoc3RydWN0IHFldGhfYXJwX3F1ZXJ5X2RhdGEpIC0gc2l6ZW9mKGNoYXIpLAogCQkJcHJvdCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKIAljbWQtPmRhdGEuc2V0YXNzcGFybXMuZGF0YS5xdWVyeV9hcnAucmVxdWVzdF9iaXRzID0gMHgwMDBGOwogCWNtZC0+ZGF0YS5zZXRhc3NwYXJtcy5kYXRhLnF1ZXJ5X2FycC5yZXBseV9iaXRzID0gMDsKQEAgLTI1MzUsNiArMjU1Myw4IEBACiAJCQkJICAgICAgIElQQV9DTURfQVNTX0FSUF9BRERfRU5UUlksCiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcWV0aF9hcnBfY2FjaGVfZW50cnkpLAogCQkJCSAgICAgICBRRVRIX1BST1RfSVBWNCk7CisJaWYgKCFpb2IpCisJCXJldHVybiAtRU5PTUVNOwogCXJjID0gcWV0aF9sM19zZW5kX3NldGFzc3Bhcm1zKGNhcmQsIGlvYiwKIAkJCQkgICBzaXplb2Yoc3RydWN0IHFldGhfYXJwX2NhY2hlX2VudHJ5KSwKIAkJCQkgICAodW5zaWduZWQgbG9uZykgZW50cnksCkBAIC0yNTc0LDYgKzI1OTQsOCBAQAogCQkJCSAgICAgICBJUEFfQ01EX0FTU19BUlBfUkVNT1ZFX0VOVFJZLAogCQkJCSAgICAgICAxMiwKIAkJCQkgICAgICAgUUVUSF9QUk9UX0lQVjQpOworCWlmICghaW9iKQorCQlyZXR1cm4gLUVOT01FTTsKIAlyYyA9IHFldGhfbDNfc2VuZF9zZXRhc3NwYXJtcyhjYXJkLCBpb2IsCiAJCQkJICAgMTIsICh1bnNpZ25lZCBsb25nKWJ1ZiwKIAkJCQkgICBxZXRoX2wzX2RlZmF1bHRfc2V0YXNzcGFybXNfY2IsIE5VTEwpOwpAQCAtMjYyNiw4ICsyNjQ4LDcgQEAKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1VQKSAmJgotCQkoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9TT0ZUU0VUVVApKQorCWlmICghcWV0aF9jYXJkX2h3X2lzX3JlYWNoYWJsZShjYXJkKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzd2l0Y2ggKGNtZCkgewpAQCAtMjgwMCwxMiArMjgyMSwxMiBAQAogCSAqIGJlZm9yZSB3ZSdyZSBnb2luZyB0byBvdmVyd3JpdGUgdGhpcyBsb2NhdGlvbiB3aXRoIG5leHQgaG9wIGlwLgogCSAqIHY2IHVzZXMgcGFzc3Rocm91Z2gsIHY0IHNldHMgdGhlIHRhZyBpbiB0aGUgUURJTyBoZWFkZXIuCiAJICovCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCWlmICgoaXB2ID09IDQpIHx8IChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSkKIAkJCWhkci0+aGRyLmwzLmV4dF9mbGFncyA9IFFFVEhfSERSX0VYVF9WTEFOX0ZSQU1FOwogCQllbHNlCiAJCQloZHItPmhkci5sMy5leHRfZmxhZ3MgPSBRRVRIX0hEUl9FWFRfSU5DTFVERV9WTEFOX1RBRzsKLQkJaGRyLT5oZHIubDMudmxhbl9pZCA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQloZHItPmhkci5sMy52bGFuX2lkID0gc2tiX3ZsYW5fdGFnX2dldChza2IpOwogCX0KIAogCWhkci0+aGRyLmwzLmxlbmd0aCA9IHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcik7CkBAIC0yOTg2LDcgKzMwMDcsNyBAQAogCQkJc2tiX3B1bGwobmV3X3NrYiwgRVRIX0hMRU4pOwogCQl9CiAKLQkJaWYgKGlwdiAhPSA0ICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQobmV3X3NrYikpIHsKKwkJaWYgKGlwdiAhPSA0ICYmIHNrYl92bGFuX3RhZ19wcmVzZW50KG5ld19za2IpKSB7CiAJCQlza2JfcHVzaChuZXdfc2tiLCBWTEFOX0hMRU4pOwogCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEobmV3X3NrYiwgbmV3X3NrYi0+ZGF0YSArIDQsIDQpOwogCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGFfb2Zmc2V0KG5ld19za2IsIDQsCkBAIC0yOTk1LDcgKzMwMTYsNyBAQAogCQkJCW5ld19za2ItPmRhdGEgKyAxMiwgNCk7CiAJCQl0YWcgPSAodTE2ICopKG5ld19za2ItPmRhdGEgKyAxMik7CiAJCQkqdGFnID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSk7Ci0JCQkqKHRhZyArIDEpID0gaHRvbnModmxhbl90eF90YWdfZ2V0KG5ld19za2IpKTsKKwkJCSoodGFnICsgMSkgPSBodG9ucyhza2Jfdmxhbl90YWdfZ2V0KG5ld19za2IpKTsKIAkJfQogCX0KIApAQCAtMzI2Miw2ICszMjgzLDggQEAKIAogc3RhdGljIGludCBxZXRoX2wzX3NldHVwX25ldGRldihzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogeworCWludCByYzsKKwogCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NEIHx8CiAJICAgIGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU1gpIHsKIAkJaWYgKChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9MQU5FX1RSKSB8fApAQCAtMzI5Myw3ICszMzE2LDkgQEAKIAkJCXJldHVybiAtRU5PREVWOwogCQljYXJkLT5kZXYtPmZsYWdzIHw9IElGRl9OT0FSUDsKIAkJY2FyZC0+ZGV2LT5uZXRkZXZfb3BzID0gJnFldGhfbDNfbmV0ZGV2X29wczsKLQkJcWV0aF9sM19pcWRfcmVhZF9pbml0aWFsX21hYyhjYXJkKTsKKwkJcmMgPSBxZXRoX2wzX2lxZF9yZWFkX2luaXRpYWxfbWFjKGNhcmQpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CiAJCWlmIChjYXJkLT5vcHRpb25zLmhzdWlkWzBdKQogCQkJbWVtY3B5KGNhcmQtPmRldi0+cGVybV9hZGRyLCBjYXJkLT5vcHRpb25zLmhzdWlkLCA5KTsKIAl9IGVsc2UKQEAgLTMzNjAsNyArMzM4NSw3IEBACiAJcmVjb3Zlcl9mbGFnID0gY2FyZC0+c3RhdGU7CiAJcmMgPSBxZXRoX2NvcmVfaGFyZHNldHVwX2NhcmQoY2FyZCk7CiAJaWYgKHJjKSB7Ci0JCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciVkIiwgcmMpOworCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjJlcnIlMDR4IiwgcmMpOwogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X3JlbW92ZTsKIAl9CkBAIC0zNDAxLDcgKzM0MjYsNyBAQAogY29udGluOgogCXJjID0gcWV0aF9sM19zZXRhZGFwdGVyX3Bhcm1zKGNhcmQpOwogCWlmIChyYykKLQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIyZXJyJWQiLCByYyk7CisJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciUwNHgiLCByYyk7CiAJaWYgKCFjYXJkLT5vcHRpb25zLnNuaWZmZXIpIHsKIAkJcmMgPSBxZXRoX2wzX3N0YXJ0X2lwYXNzaXN0cyhjYXJkKTsKIAkJaWYgKHJjKSB7CkBAIC0zNDEwLDEwICszNDM1LDEwIEBACiAJCX0KIAkJcmMgPSBxZXRoX2wzX3NldHJvdXRpbmdfdjQoY2FyZCk7CiAJCWlmIChyYykKLQkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNGVyciVkIiwgcmMpOworCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI0ZXJyJTA0eCIsIHJjKTsKIAkJcmMgPSBxZXRoX2wzX3NldHJvdXRpbmdfdjYoY2FyZCk7CiAJCWlmIChyYykKLQkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNWVyciVkIiwgcmMpOworCQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI1ZXJyJTA0eCIsIHJjKTsKIAl9CiAJbmV0aWZfdHhfZGlzYWJsZShjYXJkLT5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfc3lzLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfc3lzLmMKaW5kZXggYWRlZjVmNS4uMzg2ZWI3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX3N5cy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19zeXMuYwpAQCAtNTcsMjkgKzU3LDI2IEBACiAJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCWVudW0gcWV0aF9yb3V0aW5nX3R5cGVzIG9sZF9yb3V0ZV90eXBlID0gcm91dGUtPnR5cGU7Ci0JY2hhciAqdG1wOwogCWludCByYyA9IDA7CiAKLQl0bXAgPSBzdHJzZXAoKGNoYXIgKiopICZidWYsICJcbiIpOwogCW11dGV4X2xvY2soJmNhcmQtPmNvbmZfbXV0ZXgpOwotCWlmICghc3RyY21wKHRtcCwgIm5vX3JvdXRlciIpKSB7CisJaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgIm5vX3JvdXRlciIpKSB7CiAJCXJvdXRlLT50eXBlID0gTk9fUk9VVEVSOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJwcmltYXJ5X2Nvbm5lY3RvciIpKSB7CisJfSBlbHNlIGlmIChzeXNmc19zdHJlcShidWYsICJwcmltYXJ5X2Nvbm5lY3RvciIpKSB7CiAJCXJvdXRlLT50eXBlID0gUFJJTUFSWV9DT05ORUNUT1I7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgInNlY29uZGFyeV9jb25uZWN0b3IiKSkgeworCX0gZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCAic2Vjb25kYXJ5X2Nvbm5lY3RvciIpKSB7CiAJCXJvdXRlLT50eXBlID0gU0VDT05EQVJZX0NPTk5FQ1RPUjsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAicHJpbWFyeV9yb3V0ZXIiKSkgeworCX0gZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCAicHJpbWFyeV9yb3V0ZXIiKSkgewogCQlyb3V0ZS0+dHlwZSA9IFBSSU1BUllfUk9VVEVSOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICJzZWNvbmRhcnlfcm91dGVyIikpIHsKKwl9IGVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgInNlY29uZGFyeV9yb3V0ZXIiKSkgewogCQlyb3V0ZS0+dHlwZSA9IFNFQ09OREFSWV9ST1VURVI7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIm11bHRpY2FzdF9yb3V0ZXIiKSkgeworCX0gZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCAibXVsdGljYXN0X3JvdXRlciIpKSB7CiAJCXJvdXRlLT50eXBlID0gTVVMVElDQVNUX1JPVVRFUjsKIAl9IGVsc2UgewogCQlyYyA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAoKChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1NPRlRTRVRVUCkgfHwKLQkgICAgIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKSkgJiYKKwlpZiAocWV0aF9jYXJkX2h3X2lzX3JlYWNoYWJsZShjYXJkKSAmJgogCSAgICAob2xkX3JvdXRlX3R5cGUgIT0gcm91dGUtPnR5cGUpKSB7CiAJCWlmIChwcm90ID09IFFFVEhfUFJPVF9JUFY0KQogCQkJcmMgPSBxZXRoX2wzX3NldHJvdXRpbmdfdjQoY2FyZCk7CkBAIC0zNzEsNyArMzY4LDYgQEAKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHFldGhfaXBhZGRyICp0bXBpcGEsICp0OwotCWNoYXIgKnRtcDsKIAlpbnQgcmMgPSAwOwogCiAJaWYgKCFjYXJkKQpAQCAtMzg0LDEwICszODAsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl0bXAgPSBzdHJzZXAoKGNoYXIgKiopICZidWYsICJcbiIpOwotCWlmICghc3RyY21wKHRtcCwgInRvZ2dsZSIpKSB7CisJaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgInRvZ2dsZSIpKSB7CiAJCWNhcmQtPmlwYXRvLmVuYWJsZWQgPSAoY2FyZC0+aXBhdG8uZW5hYmxlZCk/IDAgOiAxOwotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICIxIikpIHsKKwl9IGVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgIjEiKSkgewogCQljYXJkLT5pcGF0by5lbmFibGVkID0gMTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRtcGlwYSwgdCwgY2FyZC0+aXBfdGJkX2xpc3QsIGVudHJ5KSB7CiAJCQlpZiAoKHRtcGlwYS0+dHlwZSA9PSBRRVRIX0lQX1RZUEVfTk9STUFMKSAmJgpAQCAtMzk2LDcgKzM5MSw3IEBACiAJCQkJCVFFVEhfSVBBX1NFVElQX1RBS0VPVkVSX0ZMQUc7CiAJCX0KIAotCX0gZWxzZSBpZiAoIXN0cmNtcCh0bXAsICIwIikpIHsKKwl9IGVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgIjAiKSkgewogCQljYXJkLT5pcGF0by5lbmFibGVkID0gMDsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRtcGlwYSwgdCwgY2FyZC0+aXBfdGJkX2xpc3QsIGVudHJ5KSB7CiAJCQlpZiAodG1waXBhLT5zZXRfZmxhZ3MgJgpAQCAtNDMxLDIxICs0MjYsMTkgQEAKIAkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JY2hhciAqdG1wOwogCWludCByYyA9IDA7CiAKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmY2FyZC0+Y29uZl9tdXRleCk7Ci0JdG1wID0gc3Ryc2VwKChjaGFyICoqKSAmYnVmLCAiXG4iKTsKLQlpZiAoIXN0cmNtcCh0bXAsICJ0b2dnbGUiKSkgeworCWlmIChzeXNmc19zdHJlcShidWYsICJ0b2dnbGUiKSkKIAkJY2FyZC0+aXBhdG8uaW52ZXJ0NCA9IChjYXJkLT5pcGF0by5pbnZlcnQ0KT8gMCA6IDE7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIjEiKSkgeworCWVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgIjEiKSkKIAkJY2FyZC0+aXBhdG8uaW52ZXJ0NCA9IDE7Ci0JfSBlbHNlIGlmICghc3RyY21wKHRtcCwgIjAiKSkgeworCWVsc2UgaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgIjAiKSkKIAkJY2FyZC0+aXBhdG8uaW52ZXJ0NCA9IDA7Ci0JfSBlbHNlCisJZWxzZQogCQlyYyA9IC1FSU5WQUw7CiAJbXV0ZXhfdW5sb2NrKCZjYXJkLT5jb25mX211dGV4KTsKIAlyZXR1cm4gcmMgPyByYyA6IGNvdW50OwpAQCAtNjEzLDIxICs2MDYsMTkgQEAKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQljaGFyICp0bXA7CiAJaW50IHJjID0gMDsKIAogCWlmICghY2FyZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZjYXJkLT5jb25mX211dGV4KTsKLQl0bXAgPSBzdHJzZXAoKGNoYXIgKiopICZidWYsICJcbiIpOwotCWlmICghc3RyY21wKHRtcCwgInRvZ2dsZSIpKSB7CisJaWYgKHN5c2ZzX3N0cmVxKGJ1ZiwgInRvZ2dsZSIpKQogCQljYXJkLT5pcGF0by5pbnZlcnQ2ID0gKGNhcmQtPmlwYXRvLmludmVydDYpPyAwIDogMTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAiMSIpKSB7CisJZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCAiMSIpKQogCQljYXJkLT5pcGF0by5pbnZlcnQ2ID0gMTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAodG1wLCAiMCIpKSB7CisJZWxzZSBpZiAoc3lzZnNfc3RyZXEoYnVmLCAiMCIpKQogCQljYXJkLT5pcGF0by5pbnZlcnQ2ID0gMDsKLQl9IGVsc2UKKwllbHNlCiAJCXJjID0gLUVJTlZBTDsKIAltdXRleF91bmxvY2soJmNhcmQtPmNvbmZfbXV0ZXgpOwogCXJldHVybiByYyA/IHJjIDogY291bnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jIGIvZHJpdmVycy9zY3NpLzN3LTl4eHguYwppbmRleCBjZDQxMjlmLi43NjAwNjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvM3ctOXh4eC5jCisrKyBiL2RyaXZlcnMvc2NzaS8zdy05eHh4LmMKQEAgLTYwOCw3ICs2MDgsOCBAQAogCX0KIAogCS8qIExvYWQgcmVzdCBvZiBjb21wYXRpYmlsaXR5IHN0cnVjdCAqLwotCXN0cm5jcHkodHdfZGV2LT50d19jb21wYXRfaW5mby5kcml2ZXJfdmVyc2lvbiwgVFdfRFJJVkVSX1ZFUlNJT04sIHN0cmxlbihUV19EUklWRVJfVkVSU0lPTikpOworCXN0cmxjcHkodHdfZGV2LT50d19jb21wYXRfaW5mby5kcml2ZXJfdmVyc2lvbiwgVFdfRFJJVkVSX1ZFUlNJT04sCisJCXNpemVvZih0d19kZXYtPnR3X2NvbXBhdF9pbmZvLmRyaXZlcl92ZXJzaW9uKSk7CiAJdHdfZGV2LT50d19jb21wYXRfaW5mby5kcml2ZXJfc3JsX2hpZ2ggPSBUV19DVVJSRU5UX0RSSVZFUl9TUkw7CiAJdHdfZGV2LT50d19jb21wYXRfaW5mby5kcml2ZXJfYnJhbmNoX2hpZ2ggPSBUV19DVVJSRU5UX0RSSVZFUl9CUkFOQ0g7CiAJdHdfZGV2LT50d19jb21wYXRfaW5mby5kcml2ZXJfYnVpbGRfaGlnaCA9IFRXX0NVUlJFTlRfRFJJVkVSX0JVSUxEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0J1c0xvZ2ljLmMgYi9kcml2ZXJzL3Njc2kvQnVzTG9naWMuYwppbmRleCA4ZDY2YTY0Li5jN2JlN2JiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvQnVzTG9naWMuYworKysgYi9kcml2ZXJzL3Njc2kvQnVzTG9naWMuYwpAQCAtMzQ4NSw3ICszNDg1LDcgQEAKIAlzZXFfcHJpbnRmKG0sICJcblwKIEN1cnJlbnQgRHJpdmVyIFF1ZXVlIERlcHRoOgklZFxuXAogQ3VycmVudGx5IEFsbG9jYXRlZCBDQ0JzOgklZFxuIiwgYWRhcHRlci0+ZHJ2cl9xZGVwdGgsIGFkYXB0ZXItPmFsbG9jX2NjYnMpOwotCXNlcV9wcmludGYobSwgIlxuXG5cCisJc2VxX3B1dHMobSwgIlxuXG5cCiAJCQkgICBEQVRBIFRSQU5TRkVSIFNUQVRJU1RJQ1NcblwKIFxuXAogVGFyZ2V0CVRhZ2dlZCBRdWV1aW5nCVF1ZXVlIERlcHRoICBBY3RpdmUgIEF0dGVtcHRlZAlDb21wbGV0ZWRcblwKQEAgLTM1MDAsNyArMzUwMCw3IEBACiAJCXNlcV9wcmludGYobSwKIAkJCQkgICIJICAgICUzZCAgICAgICAlM3UgICAgJTl1CSU5dVxuIiwgYWRhcHRlci0+cWRlcHRoW3RndF0sIGFkYXB0ZXItPmFjdGl2ZV9jbWRzW3RndF0sIHRndF9zdGF0c1t0Z3RdLmNtZHNfdHJpZWQsIHRndF9zdGF0c1t0Z3RdLmNtZHNfY29tcGxldGUpOwogCX0KLQlzZXFfcHJpbnRmKG0sICJcblwKKwlzZXFfcHV0cyhtLCAiXG5cCiBUYXJnZXQgIFJlYWQgQ29tbWFuZHMgIFdyaXRlIENvbW1hbmRzICAgVG90YWwgQnl0ZXMgUmVhZCAgICBUb3RhbCBCeXRlcyBXcml0dGVuXG5cCiA9PT09PT0gID09PT09PT09PT09PT0gID09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09XG4iKTsKIAlmb3IgKHRndCA9IDA7IHRndCA8IGFkYXB0ZXItPm1heGRldjsgdGd0KyspIHsKQEAgLTM1MTcsNyArMzUxNyw3IEBACiAJCWVsc2UKIAkJCXNlcV9wcmludGYobSwgIgkgICAgICU5dVxuIiwgdGd0X3N0YXRzW3RndF0uYnl0ZXN3cml0dGVuLnVuaXRzKTsKIAl9Ci0Jc2VxX3ByaW50ZihtLCAiXG5cCisJc2VxX3B1dHMobSwgIlxuXAogVGFyZ2V0ICBDb21tYW5kICAgIDAtMUtCICAgICAgMS0yS0IgICAgICAyLTRLQiAgICAgIDQtOEtCICAgICA4LTE2S0JcblwKID09PT09PSAgPT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT1cbiIpOwogCWZvciAodGd0ID0gMDsgdGd0IDwgYWRhcHRlci0+bWF4ZGV2OyB0Z3QrKykgewpAQCAtMzUzMyw3ICszNTMzLDcgQEAKIAkJCSAgICB0Z3Rfc3RhdHNbdGd0XS53cml0ZV9zel9idWNrZXRzWzBdLAogCQkJICAgIHRndF9zdGF0c1t0Z3RdLndyaXRlX3N6X2J1Y2tldHNbMV0sIHRndF9zdGF0c1t0Z3RdLndyaXRlX3N6X2J1Y2tldHNbMl0sIHRndF9zdGF0c1t0Z3RdLndyaXRlX3N6X2J1Y2tldHNbM10sIHRndF9zdGF0c1t0Z3RdLndyaXRlX3N6X2J1Y2tldHNbNF0pOwogCX0KLQlzZXFfcHJpbnRmKG0sICJcblwKKwlzZXFfcHV0cyhtLCAiXG5cCiBUYXJnZXQgIENvbW1hbmQgICAxNi0zMktCICAgIDMyLTY0S0IgICA2NC0xMjhLQiAgIDEyOC0yNTZLQiAgIDI1NktCK1xuXAogPT09PT09ICA9PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PVxuIik7CiAJZm9yICh0Z3QgPSAwOyB0Z3QgPCBhZGFwdGVyLT5tYXhkZXY7IHRndCsrKSB7CkBAIC0zNTQ5LDcgKzM1NDksNyBAQAogCQkJICAgIHRndF9zdGF0c1t0Z3RdLndyaXRlX3N6X2J1Y2tldHNbNV0sCiAJCQkgICAgdGd0X3N0YXRzW3RndF0ud3JpdGVfc3pfYnVja2V0c1s2XSwgdGd0X3N0YXRzW3RndF0ud3JpdGVfc3pfYnVja2V0c1s3XSwgdGd0X3N0YXRzW3RndF0ud3JpdGVfc3pfYnVja2V0c1s4XSwgdGd0X3N0YXRzW3RndF0ud3JpdGVfc3pfYnVja2V0c1s5XSk7CiAJfQotCXNlcV9wcmludGYobSwgIlxuXG5cCisJc2VxX3B1dHMobSwgIlxuXG5cCiAJCQkgICBFUlJPUiBSRUNPVkVSWSBTVEFUSVNUSUNTXG5cCiBcblwKIAkgIENvbW1hbmQgQWJvcnRzICAgICAgQnVzIERldmljZSBSZXNldHMJICBIb3N0IEFkYXB0ZXIgUmVzZXRzXG5cCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCmluZGV4IDljOTJmNDEuLmIwMjFiY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCkBAIC0yMDEsMTIgKzIwMSwxMiBAQAogCSAgY2VydGFpbiBlbmNsb3N1cmUgY29uZGl0aW9ucyB0byBiZSByZXBvcnRlZCBhbmQgaXMgbm90IHJlcXVpcmVkLgogCiBjb25maWcgU0NTSV9DT05TVEFOVFMKLQlib29sICJWZXJib3NlIFNDU0kgZXJyb3IgcmVwb3J0aW5nIChrZXJuZWwgc2l6ZSArPTEySykiCisJYm9vbCAiVmVyYm9zZSBTQ1NJIGVycm9yIHJlcG9ydGluZyAoa2VybmVsIHNpemUgKz03NUspIgogCWRlcGVuZHMgb24gU0NTSQogCWhlbHAKIAkgIFRoZSBlcnJvciBtZXNzYWdlcyByZWdhcmRpbmcgeW91ciBTQ1NJIGhhcmR3YXJlIHdpbGwgYmUgZWFzaWVyIHRvCiAJICB1bmRlcnN0YW5kIGlmIHlvdSBzYXkgWSBoZXJlOyBpdCB3aWxsIGVubGFyZ2UgeW91ciBrZXJuZWwgYnkgYWJvdXQKLQkgIDEyIEtCLiBJZiBpbiBkb3VidCwgc2F5IFkuCisJICA3NSBLQi4gSWYgaW4gZG91YnQsIHNheSBZLgogCiBjb25maWcgU0NTSV9MT0dHSU5HCiAJYm9vbCAiU0NTSSBsb2dnaW5nIGZhY2lsaXR5IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL01ha2VmaWxlIGIvZHJpdmVycy9zY3NpL01ha2VmaWxlCmluZGV4IDU4MTU4ZjEuLmRlZTE2MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Njc2kvTWFrZWZpbGUKQEAgLTE1OSwxNSArMTU5LDE1IEBACiAKICMgVGhpcyBnb2VzIGxhc3QsIHNvIHRoYXQgInJlYWwiIHNjc2kgZGV2aWNlcyBwcm9iZSBlYXJsaWVyCiBvYmotJChDT05GSUdfU0NTSV9ERUJVRykJKz0gc2NzaV9kZWJ1Zy5vCi0KLXNjc2lfbW9kLXkJCQkrPSBzY3NpLm8gaG9zdHMubyBzY3NpX2lvY3RsLm8gY29uc3RhbnRzLm8gXAorc2NzaV9tb2QteQkJCSs9IHNjc2kubyBob3N0cy5vIHNjc2lfaW9jdGwubyBcCiAJCQkJICAgc2NzaWNhbS5vIHNjc2lfZXJyb3IubyBzY3NpX2xpYi5vCitzY3NpX21vZC0kKENPTkZJR19TQ1NJX0NPTlNUQU5UUykgKz0gY29uc3RhbnRzLm8KIHNjc2lfbW9kLSQoQ09ORklHX1NDU0lfRE1BKQkrPSBzY3NpX2xpYl9kbWEubwogc2NzaV9tb2QteQkJCSs9IHNjc2lfc2Nhbi5vIHNjc2lfc3lzZnMubyBzY3NpX2RldmluZm8ubwogc2NzaV9tb2QtJChDT05GSUdfU0NTSV9ORVRMSU5LKQkrPSBzY3NpX25ldGxpbmsubwogc2NzaV9tb2QtJChDT05GSUdfU1lTQ1RMKQkrPSBzY3NpX3N5c2N0bC5vCiBzY3NpX21vZC0kKENPTkZJR19TQ1NJX1BST0NfRlMpCSs9IHNjc2lfcHJvYy5vCi1zY3NpX21vZC15CQkJKz0gc2NzaV90cmFjZS5vCitzY3NpX21vZC15CQkJKz0gc2NzaV90cmFjZS5vIHNjc2lfbG9nZ2luZy5vCiBzY3NpX21vZC0kKENPTkZJR19QTSkJCSs9IHNjc2lfcG0ubwogCiBodl9zdG9ydnNjLXkJCQk6PSBzdG9ydnNjX2Rydi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL05DUjUzODAuYwppbmRleCAzNjI0NGQ2Li44OTgxNzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvTkNSNTM4MC5jCisrKyBiL2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMKQEAgLTcxNiw4ICs3MTYsNiBAQAogfQogI2VuZGlmCiAKLSN1bmRlZiBTUFJJTlRGCi0jZGVmaW5lIFNQUklOVEYoYXJncy4uLikgc2VxX3ByaW50ZihtLCAjIyBhcmdzKQogc3RhdGljCiB2b2lkIGxwcmludF9TY3NpX0NtbmQoc3RydWN0IHNjc2lfY21uZCAqY21kLCBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pOwogc3RhdGljCkBAIC03MzQsMTkgKzczMiwxOSBAQAogCWhvc3RkYXRhID0gKHN0cnVjdCBOQ1I1MzgwX2hvc3RkYXRhICopIGluc3RhbmNlLT5ob3N0ZGF0YTsKIAogI2lmZGVmIFBTRVVET19ETUEKLQlTUFJJTlRGKCJIaWdod2F0ZXIgSS9PIGJ1c3kgc3BpbiBjb3VudHM6IHdyaXRlICVkLCByZWFkICVkXG4iLAorCXNlcV9wcmludGYobSwgIkhpZ2h3YXRlciBJL08gYnVzeSBzcGluIGNvdW50czogd3JpdGUgJWQsIHJlYWQgJWRcbiIsCiAJICAgICAgICBob3N0ZGF0YS0+c3Bpbl9tYXhfdywgaG9zdGRhdGEtPnNwaW5fbWF4X3IpOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2lycShpbnN0YW5jZS0+aG9zdF9sb2NrKTsKIAlpZiAoIWhvc3RkYXRhLT5jb25uZWN0ZWQpCi0JCVNQUklOVEYoInNjc2klZDogbm8gY3VycmVudGx5IGNvbm5lY3RlZCBjb21tYW5kXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CisJCXNlcV9wcmludGYobSwgInNjc2klZDogbm8gY3VycmVudGx5IGNvbm5lY3RlZCBjb21tYW5kXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJZWxzZQogCQlscHJpbnRfU2NzaV9DbW5kKChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhvc3RkYXRhLT5jb25uZWN0ZWQsIG0pOwotCVNQUklOVEYoInNjc2klZDogaXNzdWVfcXVldWVcbiIsIGluc3RhbmNlLT5ob3N0X25vKTsKKwlzZXFfcHJpbnRmKG0sICJzY3NpJWQ6IGlzc3VlX3F1ZXVlXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJZm9yIChwdHIgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+aXNzdWVfcXVldWU7IHB0cjsgcHRyID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgcHRyLT5ob3N0X3NjcmliYmxlKQogCQlscHJpbnRfU2NzaV9DbW5kKHB0ciwgbSk7CiAKLQlTUFJJTlRGKCJzY3NpJWQ6IGRpc2Nvbm5lY3RlZF9xdWV1ZVxuIiwgaW5zdGFuY2UtPmhvc3Rfbm8pOworCXNlcV9wcmludGYobSwgInNjc2klZDogZGlzY29ubmVjdGVkX3F1ZXVlXG4iLCBpbnN0YW5jZS0+aG9zdF9ubyk7CiAJZm9yIChwdHIgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBob3N0ZGF0YS0+ZGlzY29ubmVjdGVkX3F1ZXVlOyBwdHI7IHB0ciA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIHB0ci0+aG9zdF9zY3JpYmJsZSkKIAkJbHByaW50X1Njc2lfQ21uZChwdHIsIG0pOwogCXNwaW5fdW5sb2NrX2lycShpbnN0YW5jZS0+aG9zdF9sb2NrKTsKQEAgLTc1NSw4ICs3NTMsOCBAQAogCiBzdGF0aWMgdm9pZCBscHJpbnRfU2NzaV9DbW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCwgc3RydWN0IHNlcV9maWxlICptKQogewotCVNQUklOVEYoInNjc2klZCA6IGRlc3RpbmF0aW9uIHRhcmdldCAlZCwgbHVuICVsbHVcbiIsIGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X25vLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotCVNQUklOVEYoIiAgICAgICAgY29tbWFuZCA9ICIpOworCXNlcV9wcmludGYobSwgInNjc2klZCA6IGRlc3RpbmF0aW9uIHRhcmdldCAlZCwgbHVuICVsbHVcbiIsIGNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0X25vLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOworCXNlcV9wdXRzKG0sICIgICAgICAgIGNvbW1hbmQgPSAiKTsKIAlscHJpbnRfY29tbWFuZChjbWQtPmNtbmQsIG0pOwogfQogCkBAIC03NjUsMTMgKzc2MywxMyBAQAogCWludCBpLCBzOwogCWxwcmludF9vcGNvZGUoY29tbWFuZFswXSwgbSk7CiAJZm9yIChpID0gMSwgcyA9IENPTU1BTkRfU0laRShjb21tYW5kWzBdKTsgaSA8IHM7ICsraSkKLQkJU1BSSU5URigiJTAyeCAiLCBjb21tYW5kW2ldKTsKLQlTUFJJTlRGKCJcbiIpOworCQlzZXFfcHJpbnRmKG0sICIlMDJ4ICIsIGNvbW1hbmRbaV0pOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogCiBzdGF0aWMgdm9pZCBscHJpbnRfb3Bjb2RlKGludCBvcGNvZGUsIHN0cnVjdCBzZXFfZmlsZSAqbSkKIHsKLQlTUFJJTlRGKCIlMmQgKDB4JTAyeCkiLCBvcGNvZGUsIG9wY29kZSk7CisJc2VxX3ByaW50ZihtLCAiJTJkICgweCUwMngpIiwgb3Bjb2RlLCBvcGNvZGUpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hZHZhbnN5cy5jIGIvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKaW5kZXggMmM1Y2U0OC4uYWU5NWUzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKKysrIGIvZHJpdmVycy9zY3NpL2FkdmFuc3lzLmMKQEAgLTI4ODAsNyArMjg4MCw3IEBACiAJCWNoaXBfc2NzaV9pZCA9IGJvYXJkcC0+ZHZjX3Zhci5hZHZfZHZjX3Zhci5jaGlwX3Njc2lfaWQ7CiAJfQogCi0Jc2VxX3ByaW50ZihtLCAiVGFyZ2V0IElEcyBEZXRlY3RlZDoiKTsKKwlzZXFfcHV0cyhtLCAiVGFyZ2V0IElEcyBEZXRlY3RlZDoiKTsKIAlmb3IgKGkgPSAwOyBpIDw9IEFEVl9NQVhfVElEOyBpKyspIHsKIAkJaWYgKGJvYXJkcC0+aW5pdF90aWRtYXNrICYgQURWX1RJRF9UT19USURNQVNLKGkpKQogCQkJc2VxX3ByaW50ZihtLCAiICVYLCIsIGkpOwpAQCAtMjg5NiwxOCArMjg5NiwxNiBAQAogCXN0cnVjdCBhc2NfYm9hcmQgKmJvYXJkcCA9IHNob3N0X3ByaXYoc2hvc3QpOwogCXVzaG9ydCBtYWpvciwgbWlub3IsIGxldHRlcjsKIAotCXNlcV9wcmludGYobSwgIlxuUk9NIEJJT1MgVmVyc2lvbjogIik7CisJc2VxX3B1dHMobSwgIlxuUk9NIEJJT1MgVmVyc2lvbjogIik7CiAKIAkvKgogCSAqIElmIHRoZSBCSU9TIHNhdmVkIGEgdmFsaWQgc2lnbmF0dXJlLCB0aGVuIGZpbGwgaW4KIAkgKiB0aGUgQklPUyBjb2RlIHNlZ21lbnQgYmFzZSBhZGRyZXNzLgogCSAqLwogCWlmIChib2FyZHAtPmJpb3Nfc2lnbmF0dXJlICE9IDB4NTVBQSkgewotCQlzZXFfcHJpbnRmKG0sICJEaXNhYmxlZCBvciBQcmUtMy4xXG4iKTsKLQkJc2VxX3ByaW50ZihtLAotCQkJICAiQklPUyBlaXRoZXIgZGlzYWJsZWQgb3IgUHJlLTMuMS4gSWYgaXQgaXMgcHJlLTMuMSwgdGhlbiBhIG5ld2VyIHZlcnNpb25cbiIpOwotCQlzZXFfcHJpbnRmKG0sCi0JCQkgICJjYW4gYmUgZm91bmQgYXQgdGhlIENvbm5lY3RDb20gRlRQIHNpdGU6IGZ0cDovL2Z0cC5jb25uZWN0Y29tLm5ldC9wdWJcbiIpOworCQlzZXFfcHV0cyhtLCAiRGlzYWJsZWQgb3IgUHJlLTMuMVxuIgorCQkJIkJJT1MgZWl0aGVyIGRpc2FibGVkIG9yIFByZS0zLjEuIElmIGl0IGlzIHByZS0zLjEsIHRoZW4gYSBuZXdlciB2ZXJzaW9uXG4iCisJCQkiY2FuIGJlIGZvdW5kIGF0IHRoZSBDb25uZWN0Q29tIEZUUCBzaXRlOiBmdHA6Ly9mdHAuY29ubmVjdGNvbS5uZXQvcHViXG4iKTsKIAl9IGVsc2UgewogCQltYWpvciA9IChib2FyZHAtPmJpb3NfdmVyc2lvbiA+PiAxMikgJiAweEY7CiAJCW1pbm9yID0gKGJvYXJkcC0+Ymlvc192ZXJzaW9uID4+IDgpICYgMHhGOwpAQCAtMjkyMywxMCArMjkyMSw4IEBACiAJCSAqLwogCQlpZiAobWFqb3IgPCAzIHx8IChtYWpvciA8PSAzICYmIG1pbm9yIDwgMSkgfHwKIAkJICAgIChtYWpvciA8PSAzICYmIG1pbm9yIDw9IDEgJiYgbGV0dGVyIDwgKCdJJyAtICdBJykpKSB7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgIk5ld2VyIHZlcnNpb24gb2YgUk9NIEJJT1MgaXMgYXZhaWxhYmxlIGF0IHRoZSBDb25uZWN0Q29tIEZUUCBzaXRlOlxuIik7Ci0JCQlzZXFfcHJpbnRmKG0sCi0JCQkJICAgImZ0cDovL2Z0cC5jb25uZWN0Y29tLm5ldC9wdWJcbiIpOworCQkJc2VxX3B1dHMobSwgIk5ld2VyIHZlcnNpb24gb2YgUk9NIEJJT1MgaXMgYXZhaWxhYmxlIGF0IHRoZSBDb25uZWN0Q29tIEZUUCBzaXRlOlxuIgorCQkJCSJmdHA6Ly9mdHAuY29ubmVjdGNvbS5uZXQvcHViXG4iKTsKIAkJfQogCX0KIH0KQEAgLTMwNTYsMTEgKzMwNTIsMTAgQEAKIAkgICAgPT0gQVNDX1RSVUUpCiAJCXNlcV9wcmludGYobSwgIiBTZXJpYWwgTnVtYmVyOiAlc1xuIiwgc2VyaWFsc3RyKTsKIAllbHNlIGlmIChlcC0+YWRhcHRlcl9pbmZvWzVdID09IDB4QkIpCi0JCXNlcV9wcmludGYobSwKLQkJCSAgICIgRGVmYXVsdCBTZXR0aW5ncyBVc2VkIGZvciBFRVBST00tbGVzcyBBZGFwdGVyLlxuIik7CisJCXNlcV9wdXRzKG0sCisJCQkgIiBEZWZhdWx0IFNldHRpbmdzIFVzZWQgZm9yIEVFUFJPTS1sZXNzIEFkYXB0ZXIuXG4iKTsKIAllbHNlCi0JCXNlcV9wcmludGYobSwKLQkJCSAgICIgU2VyaWFsIE51bWJlciBTaWduYXR1cmUgTm90IFByZXNlbnQuXG4iKTsKKwkJc2VxX3B1dHMobSwgIiBTZXJpYWwgTnVtYmVyIFNpZ25hdHVyZSBOb3QgUHJlc2VudC5cbiIpOwogCiAJc2VxX3ByaW50ZihtLAogCQkgICAiIEhvc3QgU0NTSSBJRDogJXUsIEhvc3QgUXVldWUgU2l6ZTogJXUsIERldmljZSBRdWV1ZSBTaXplOiAldVxuIiwKQEAgLTMwNzAsMzQgKzMwNjUsMzAgQEAKIAlzZXFfcHJpbnRmKG0sCiAJCSAgICIgY250bCAweCV4LCBub19zY2FtIDB4JXhcbiIsIGVwLT5jbnRsLCBlcC0+bm9fc2NhbSk7CiAKLQlzZXFfcHJpbnRmKG0sICIgVGFyZ2V0IElEOiAgICAgICAgICAgIik7CisJc2VxX3B1dHMobSwgIiBUYXJnZXQgSUQ6ICAgICAgICAgICAiKTsKIAlmb3IgKGkgPSAwOyBpIDw9IEFTQ19NQVhfVElEOyBpKyspCiAJCXNlcV9wcmludGYobSwgIiAlZCIsIGkpOwotCXNlcV9wcmludGYobSwgIlxuIik7CiAKLQlzZXFfcHJpbnRmKG0sICIgRGlzY29ubmVjdHM6ICAgICAgICAgIik7CisJc2VxX3B1dHMobSwgIlxuIERpc2Nvbm5lY3RzOiAgICAgICAgICIpOwogCWZvciAoaSA9IDA7IGkgPD0gQVNDX01BWF9USUQ7IGkrKykKIAkJc2VxX3ByaW50ZihtLCAiICVjIiwKIAkJCSAgIChlcC0+ZGlzY19lbmFibGUgJiBBRFZfVElEX1RPX1RJRE1BU0soaSkpID8gJ1knIDogJ04nKTsKLQlzZXFfcHJpbnRmKG0sICJcbiIpOwogCi0Jc2VxX3ByaW50ZihtLCAiIENvbW1hbmQgUXVldWluZzogICAgICIpOworCXNlcV9wdXRzKG0sICJcbiBDb21tYW5kIFF1ZXVpbmc6ICAgICAiKTsKIAlmb3IgKGkgPSAwOyBpIDw9IEFTQ19NQVhfVElEOyBpKyspCiAJCXNlcV9wcmludGYobSwgIiAlYyIsCiAJCQkgICAoZXAtPnVzZV9jbWRfcW5nICYgQURWX1RJRF9UT19USURNQVNLKGkpKSA/ICdZJyA6ICdOJyk7Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKIAotCXNlcV9wcmludGYobSwgIiBTdGFydCBNb3RvcjogICAgICAgICAiKTsKKwlzZXFfcHV0cyhtLCAiXG4gU3RhcnQgTW90b3I6ICAgICAgICAgIik7CiAJZm9yIChpID0gMDsgaSA8PSBBU0NfTUFYX1RJRDsgaSsrKQogCQlzZXFfcHJpbnRmKG0sICIgJWMiLAogCQkJICAgKGVwLT5zdGFydF9tb3RvciAmIEFEVl9USURfVE9fVElETUFTSyhpKSkgPyAnWScgOiAnTicpOwotCXNlcV9wcmludGYobSwgIlxuIik7CiAKLQlzZXFfcHJpbnRmKG0sICIgU3luY2hyb25vdXMgVHJhbnNmZXI6Iik7CisJc2VxX3B1dHMobSwgIlxuIFN5bmNocm9ub3VzIFRyYW5zZmVyOiIpOwogCWZvciAoaSA9IDA7IGkgPD0gQVNDX01BWF9USUQ7IGkrKykKIAkJc2VxX3ByaW50ZihtLCAiICVjIiwKIAkJCSAgIChlcC0+aW5pdF9zZHRyICYgQURWX1RJRF9UT19USURNQVNLKGkpKSA/ICdZJyA6ICdOJyk7Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAogI2lmZGVmIENPTkZJR19JU0EKIAlpZiAoYXNjX2R2Y192YXJwLT5idXNfdHlwZSAmIEFTQ19JU19JU0EpIHsKQEAgLTMxNTEsNyArMzE0Miw3IEBACiAJaWYgKGFzY19nZXRfZWVwcm9tX3N0cmluZyh3b3JkcCwgc2VyaWFsc3RyKSA9PSBBU0NfVFJVRSkKIAkJc2VxX3ByaW50ZihtLCAiIFNlcmlhbCBOdW1iZXI6ICVzXG4iLCBzZXJpYWxzdHIpOwogCWVsc2UKLQkJc2VxX3ByaW50ZihtLCAiIFNlcmlhbCBOdW1iZXIgU2lnbmF0dXJlIE5vdCBQcmVzZW50LlxuIik7CisJCXNlcV9wdXRzKG0sICIgU2VyaWFsIE51bWJlciBTaWduYXR1cmUgTm90IFByZXNlbnQuXG4iKTsKIAogCWlmIChhZHZfZHZjX3ZhcnAtPmNoaXBfdHlwZSA9PSBBRFZfQ0hJUF9BU0MzNTUwKQogCQlzZXFfcHJpbnRmKG0sCkBAIC0zMjA5LDEwICszMjAwLDEwIEBACiAJCQkgICBlcF8zOEMxNjAwLT50ZXJtaW5hdGlvbl9sdmQsIHRlcm1zdHIsCiAJCQkgICBlcF8zOEMxNjAwLT5iaW9zX2N0cmwpOwogCi0Jc2VxX3ByaW50ZihtLCAiIFRhcmdldCBJRDogICAgICAgICAgICIpOworCXNlcV9wdXRzKG0sICIgVGFyZ2V0IElEOiAgICAgICAgICAgIik7CiAJZm9yIChpID0gMDsgaSA8PSBBRFZfTUFYX1RJRDsgaSsrKQogCQlzZXFfcHJpbnRmKG0sICIgJVgiLCBpKTsKLQlzZXFfcHJpbnRmKG0sICJcbiIpOworCXNlcV9wdXRjKG0sICdcbicpOwogCiAJaWYgKGFkdl9kdmNfdmFycC0+Y2hpcF90eXBlID09IEFEVl9DSElQX0FTQzM1NTApIHsKIAkJd29yZCA9IGVwXzM1NTAtPmRpc2NfZW5hYmxlOwpAQCAtMzIyMSwxMSArMzIxMiwxMSBAQAogCX0gZWxzZSB7CiAJCXdvcmQgPSBlcF8zOEMxNjAwLT5kaXNjX2VuYWJsZTsKIAl9Ci0Jc2VxX3ByaW50ZihtLCAiIERpc2Nvbm5lY3RzOiAgICAgICAgICIpOworCXNlcV9wdXRzKG0sICIgRGlzY29ubmVjdHM6ICAgICAgICAgIik7CiAJZm9yIChpID0gMDsgaSA8PSBBRFZfTUFYX1RJRDsgaSsrKQogCQlzZXFfcHJpbnRmKG0sICIgJWMiLAogCQkJICAgKHdvcmQgJiBBRFZfVElEX1RPX1RJRE1BU0soaSkpID8gJ1knIDogJ04nKTsKLQlzZXFfcHJpbnRmKG0sICJcbiIpOworCXNlcV9wdXRjKG0sICdcbicpOwogCiAJaWYgKGFkdl9kdmNfdmFycC0+Y2hpcF90eXBlID09IEFEVl9DSElQX0FTQzM1NTApIHsKIAkJd29yZCA9IGVwXzM1NTAtPnRhZ3FuZ19hYmxlOwpAQCAtMzIzNCwxMSArMzIyNSwxMSBAQAogCX0gZWxzZSB7CiAJCXdvcmQgPSBlcF8zOEMxNjAwLT50YWdxbmdfYWJsZTsKIAl9Ci0Jc2VxX3ByaW50ZihtLCAiIENvbW1hbmQgUXVldWluZzogICAgICIpOworCXNlcV9wdXRzKG0sICIgQ29tbWFuZCBRdWV1aW5nOiAgICAgIik7CiAJZm9yIChpID0gMDsgaSA8PSBBRFZfTUFYX1RJRDsgaSsrKQogCQlzZXFfcHJpbnRmKG0sICIgJWMiLAogCQkJICAgKHdvcmQgJiBBRFZfVElEX1RPX1RJRE1BU0soaSkpID8gJ1knIDogJ04nKTsKLQlzZXFfcHJpbnRmKG0sICJcbiIpOworCXNlcV9wdXRjKG0sICdcbicpOwogCiAJaWYgKGFkdl9kdmNfdmFycC0+Y2hpcF90eXBlID09IEFEVl9DSElQX0FTQzM1NTApIHsKIAkJd29yZCA9IGVwXzM1NTAtPnN0YXJ0X21vdG9yOwpAQCAtMzI0NywyOCArMzIzOCwyOCBAQAogCX0gZWxzZSB7CiAJCXdvcmQgPSBlcF8zOEMxNjAwLT5zdGFydF9tb3RvcjsKIAl9Ci0Jc2VxX3ByaW50ZihtLCAiIFN0YXJ0IE1vdG9yOiAgICAgICAgICIpOworCXNlcV9wdXRzKG0sICIgU3RhcnQgTW90b3I6ICAgICAgICAgIik7CiAJZm9yIChpID0gMDsgaSA8PSBBRFZfTUFYX1RJRDsgaSsrKQogCQlzZXFfcHJpbnRmKG0sICIgJWMiLAogCQkJICAgKHdvcmQgJiBBRFZfVElEX1RPX1RJRE1BU0soaSkpID8gJ1knIDogJ04nKTsKLQlzZXFfcHJpbnRmKG0sICJcbiIpOworCXNlcV9wdXRjKG0sICdcbicpOwogCiAJaWYgKGFkdl9kdmNfdmFycC0+Y2hpcF90eXBlID09IEFEVl9DSElQX0FTQzM1NTApIHsKLQkJc2VxX3ByaW50ZihtLCAiIFN5bmNocm9ub3VzIFRyYW5zZmVyOiIpOworCQlzZXFfcHV0cyhtLCAiIFN5bmNocm9ub3VzIFRyYW5zZmVyOiIpOwogCQlmb3IgKGkgPSAwOyBpIDw9IEFEVl9NQVhfVElEOyBpKyspCiAJCQlzZXFfcHJpbnRmKG0sICIgJWMiLAogCQkJCSAgIChlcF8zNTUwLT5zZHRyX2FibGUgJiBBRFZfVElEX1RPX1RJRE1BU0soaSkpID8KIAkJCQkgICAnWScgOiAnTicpOwotCQlzZXFfcHJpbnRmKG0sICJcbiIpOworCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAl9CiAKIAlpZiAoYWR2X2R2Y192YXJwLT5jaGlwX3R5cGUgPT0gQURWX0NISVBfQVNDMzU1MCkgewotCQlzZXFfcHJpbnRmKG0sICIgVWx0cmEgVHJhbnNmZXI6ICAgICAgIik7CisJCXNlcV9wdXRzKG0sICIgVWx0cmEgVHJhbnNmZXI6ICAgICAgIik7CiAJCWZvciAoaSA9IDA7IGkgPD0gQURWX01BWF9USUQ7IGkrKykKIAkJCXNlcV9wcmludGYobSwgIiAlYyIsCiAJCQkJICAgKGVwXzM1NTAtPnVsdHJhX2FibGUgJiBBRFZfVElEX1RPX1RJRE1BU0soaSkpCiAJCQkJICAgPyAnWScgOiAnTicpOwotCQlzZXFfcHJpbnRmKG0sICJcbiIpOworCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAl9CiAKIAlpZiAoYWR2X2R2Y192YXJwLT5jaGlwX3R5cGUgPT0gQURWX0NISVBfQVNDMzU1MCkgewpAQCAtMzI3OCwxNiArMzI2OSwxNSBAQAogCX0gZWxzZSB7CiAJCXdvcmQgPSBlcF8zOEMxNjAwLT53ZHRyX2FibGU7CiAJfQotCXNlcV9wcmludGYobSwgIiBXaWRlIFRyYW5zZmVyOiAgICAgICAiKTsKKwlzZXFfcHV0cyhtLCAiIFdpZGUgVHJhbnNmZXI6ICAgICAgICIpOwogCWZvciAoaSA9IDA7IGkgPD0gQURWX01BWF9USUQ7IGkrKykKIAkJc2VxX3ByaW50ZihtLCAiICVjIiwKIAkJCSAgICh3b3JkICYgQURWX1RJRF9UT19USURNQVNLKGkpKSA/ICdZJyA6ICdOJyk7Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAogCWlmIChhZHZfZHZjX3ZhcnAtPmNoaXBfdHlwZSA9PSBBRFZfQ0hJUF9BU0MzOEMwODAwIHx8CiAJICAgIGFkdl9kdmNfdmFycC0+Y2hpcF90eXBlID09IEFEVl9DSElQX0FTQzM4QzE2MDApIHsKLQkJc2VxX3ByaW50ZihtLAotCQkJICAgIiBTeW5jaHJvbm91cyBUcmFuc2ZlciBTcGVlZCAoTWh6KTpcbiAgIik7CisJCXNlcV9wdXRzKG0sICIgU3luY2hyb25vdXMgVHJhbnNmZXIgU3BlZWQgKE1oeik6XG4gICIpOwogCQlmb3IgKGkgPSAwOyBpIDw9IEFEVl9NQVhfVElEOyBpKyspIHsKIAkJCWNoYXIgKnNwZWVkX3N0cjsKIApAQCAtMzMyNSwxMCArMzMxNSwxMCBAQAogCQkJfQogCQkJc2VxX3ByaW50ZihtLCAiJVg6JXMgIiwgaSwgc3BlZWRfc3RyKTsKIAkJCWlmIChpID09IDcpCi0JCQkJc2VxX3ByaW50ZihtLCAiXG4gICIpOworCQkJCXNlcV9wdXRzKG0sICJcbiAgIik7CiAJCQlzZHRyX3NwZWVkID4+PSA0OwogCQl9Ci0JCXNlcV9wcmludGYobSwgIlxuIik7CisJCXNlcV9wdXRjKG0sICdcbicpOwogCX0KIH0KIApAQCAtMzQwMyw3ICszMzkzLDcgQEAKIAlzZXFfcHJpbnRmKG0sCiAJCSAgICIgVG90YWwgQ29tbWFuZCBQZW5kaW5nOiAlZFxuIiwgdi0+Y3VyX3RvdGFsX3FuZyk7CiAKLQlzZXFfcHJpbnRmKG0sICIgQ29tbWFuZCBRdWV1aW5nOiIpOworCXNlcV9wdXRzKG0sICIgQ29tbWFuZCBRdWV1aW5nOiIpOwogCWZvciAoaSA9IDA7IGkgPD0gQVNDX01BWF9USUQ7IGkrKykgewogCQlpZiAoKGNoaXBfc2NzaV9pZCA9PSBpKSB8fAogCQkgICAgKChib2FyZHAtPmluaXRfdGlkbWFzayAmIEFEVl9USURfVE9fVElETUFTSyhpKSkgPT0gMCkpIHsKQEAgLTM0MTMsMTAgKzM0MDMsOSBAQAogCQkJICAgaSwKIAkJCSAgICh2LT51c2VfdGFnZ2VkX3FuZyAmIEFEVl9USURfVE9fVElETUFTSyhpKSkgPyAnWScgOiAnTicpOwogCX0KLQlzZXFfcHJpbnRmKG0sICJcbiIpOwogCiAJLyogQ3VycmVudCBudW1iZXIgb2YgY29tbWFuZHMgd2FpdGluZyBmb3IgYSBkZXZpY2UuICovCi0Jc2VxX3ByaW50ZihtLCAiIENvbW1hbmQgUXVldWUgUGVuZGluZzoiKTsKKwlzZXFfcHV0cyhtLCAiXG4gQ29tbWFuZCBRdWV1ZSBQZW5kaW5nOiIpOwogCWZvciAoaSA9IDA7IGkgPD0gQVNDX01BWF9USUQ7IGkrKykgewogCQlpZiAoKGNoaXBfc2NzaV9pZCA9PSBpKSB8fAogCQkgICAgKChib2FyZHAtPmluaXRfdGlkbWFzayAmIEFEVl9USURfVE9fVElETUFTSyhpKSkgPT0gMCkpIHsKQEAgLTM0MjQsMTAgKzM0MTMsOSBAQAogCQl9CiAJCXNlcV9wcmludGYobSwgIiAlWDoldSIsIGksIHYtPmN1cl9kdmNfcW5nW2ldKTsKIAl9Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKIAogCS8qIEN1cnJlbnQgbGltaXQgb24gbnVtYmVyIG9mIGNvbW1hbmRzIHRoYXQgY2FuIGJlIHNlbnQgdG8gYSBkZXZpY2UuICovCi0Jc2VxX3ByaW50ZihtLCAiIENvbW1hbmQgUXVldWUgTGltaXQ6Iik7CisJc2VxX3B1dHMobSwgIlxuIENvbW1hbmQgUXVldWUgTGltaXQ6Iik7CiAJZm9yIChpID0gMDsgaSA8PSBBU0NfTUFYX1RJRDsgaSsrKSB7CiAJCWlmICgoY2hpcF9zY3NpX2lkID09IGkpIHx8CiAJCSAgICAoKGJvYXJkcC0+aW5pdF90aWRtYXNrICYgQURWX1RJRF9UT19USURNQVNLKGkpKSA9PSAwKSkgewpAQCAtMzQzNSwxMCArMzQyMyw5IEBACiAJCX0KIAkJc2VxX3ByaW50ZihtLCAiICVYOiV1IiwgaSwgdi0+bWF4X2R2Y19xbmdbaV0pOwogCX0KLQlzZXFfcHJpbnRmKG0sICJcbiIpOwogCiAJLyogSW5kaWNhdGUgd2hldGhlciB0aGUgZGV2aWNlIGhhcyByZXR1cm5lZCBxdWV1ZSBmdWxsIHN0YXR1cy4gKi8KLQlzZXFfcHJpbnRmKG0sICIgQ29tbWFuZCBRdWV1ZSBGdWxsOiIpOworCXNlcV9wdXRzKG0sICJcbiBDb21tYW5kIFF1ZXVlIEZ1bGw6Iik7CiAJZm9yIChpID0gMDsgaSA8PSBBU0NfTUFYX1RJRDsgaSsrKSB7CiAJCWlmICgoY2hpcF9zY3NpX2lkID09IGkpIHx8CiAJCSAgICAoKGJvYXJkcC0+aW5pdF90aWRtYXNrICYgQURWX1RJRF9UT19USURNQVNLKGkpKSA9PSAwKSkgewpAQCAtMzQ1MCw5ICszNDM3LDggQEAKIAkJZWxzZQogCQkJc2VxX3ByaW50ZihtLCAiICVYOk4iLCBpKTsKIAl9Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKIAotCXNlcV9wcmludGYobSwgIiBTeW5jaHJvbm91cyBUcmFuc2ZlcjoiKTsKKwlzZXFfcHV0cyhtLCAiXG4gU3luY2hyb25vdXMgVHJhbnNmZXI6Iik7CiAJZm9yIChpID0gMDsgaSA8PSBBU0NfTUFYX1RJRDsgaSsrKSB7CiAJCWlmICgoY2hpcF9zY3NpX2lkID09IGkpIHx8CiAJCSAgICAoKGJvYXJkcC0+aW5pdF90aWRtYXNrICYgQURWX1RJRF9UT19USURNQVNLKGkpKSA9PSAwKSkgewpAQCAtMzQ2Miw3ICszNDQ4LDcgQEAKIAkJCSAgIGksCiAJCQkgICAodi0+c2R0cl9kb25lICYgQURWX1RJRF9UT19USURNQVNLKGkpKSA/ICdZJyA6ICdOJyk7CiAJfQotCXNlcV9wcmludGYobSwgIlxuIik7CisJc2VxX3B1dGMobSwgJ1xuJyk7CiAKIAlmb3IgKGkgPSAwOyBpIDw9IEFTQ19NQVhfVElEOyBpKyspIHsKIAkJdWNoYXIgc3luX3BlcmlvZF9peDsKQEAgLTM0NzYsNyArMzQ2Miw3IEBACiAJCXNlcV9wcmludGYobSwgIiAgJVg6IiwgaSk7CiAKIAkJaWYgKChib2FyZHAtPnNkdHJfZGF0YVtpXSAmIEFTQ19TWU5fTUFYX09GRlNFVCkgPT0gMCkgewotCQkJc2VxX3ByaW50ZihtLCAiIEFzeW5jaHJvbm91cyIpOworCQkJc2VxX3B1dHMobSwgIiBBc3luY2hyb25vdXMiKTsKIAkJfSBlbHNlIHsKIAkJCXN5bl9wZXJpb2RfaXggPQogCQkJICAgIChib2FyZHAtPnNkdHJfZGF0YVtpXSA+PiA0KSAmICh2LT5tYXhfc2R0cl9pbmRleCAtCkBAIC0zNDk0LDE2ICszNDgwLDE1IEBACiAJCX0KIAogCQlpZiAoKHYtPnNkdHJfZG9uZSAmIEFEVl9USURfVE9fVElETUFTSyhpKSkgPT0gMCkgewotCQkJc2VxX3ByaW50ZihtLCAiKlxuIik7CisJCQlzZXFfcHV0cyhtLCAiKlxuIik7CiAJCQlyZW5lZ290aWF0ZSA9IDE7CiAJCX0gZWxzZSB7Ci0JCQlzZXFfcHJpbnRmKG0sICJcbiIpOworCQkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJCX0KIAl9CiAKIAlpZiAocmVuZWdvdGlhdGUpIHsKLQkJc2VxX3ByaW50ZihtLAotCQkJICAgIiAqID0gUmUtbmVnb3RpYXRpb24gcGVuZGluZyBiZWZvcmUgbmV4dCBjb21tYW5kLlxuIik7CisJCXNlcV9wdXRzKG0sICIgKiA9IFJlLW5lZ290aWF0aW9uIHBlbmRpbmcgYmVmb3JlIG5leHQgY29tbWFuZC5cbiIpOwogCX0KIH0KIApAQCAtMzU0OCw3ICszNTMzLDcgQEAKIAkJICAgYy0+bWNvZGVfZGF0ZSwgYy0+bWNvZGVfdmVyc2lvbik7CiAKIAlBZHZSZWFkV29yZExyYW0oaW9wX2Jhc2UsIEFTQ19NQ19UQUdRTkdfQUJMRSwgdGFncW5nX2FibGUpOwotCXNlcV9wcmludGYobSwgIiBRdWV1aW5nIEVuYWJsZWQ6Iik7CisJc2VxX3B1dHMobSwgIiBRdWV1aW5nIEVuYWJsZWQ6Iik7CiAJZm9yIChpID0gMDsgaSA8PSBBRFZfTUFYX1RJRDsgaSsrKSB7CiAJCWlmICgoY2hpcF9zY3NpX2lkID09IGkpIHx8CiAJCSAgICAoKGJvYXJkcC0+aW5pdF90aWRtYXNrICYgQURWX1RJRF9UT19USURNQVNLKGkpKSA9PSAwKSkgewpAQCAtMzU1OSw5ICszNTQ0LDggQEAKIAkJCSAgIGksCiAJCQkgICAodGFncW5nX2FibGUgJiBBRFZfVElEX1RPX1RJRE1BU0soaSkpID8gJ1knIDogJ04nKTsKIAl9Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKIAotCXNlcV9wcmludGYobSwgIiBRdWV1ZSBMaW1pdDoiKTsKKwlzZXFfcHV0cyhtLCAiXG4gUXVldWUgTGltaXQ6Iik7CiAJZm9yIChpID0gMDsgaSA8PSBBRFZfTUFYX1RJRDsgaSsrKSB7CiAJCWlmICgoY2hpcF9zY3NpX2lkID09IGkpIHx8CiAJCSAgICAoKGJvYXJkcC0+aW5pdF90aWRtYXNrICYgQURWX1RJRF9UT19USURNQVNLKGkpKSA9PSAwKSkgewpAQCAtMzU3Myw5ICszNTU3LDggQEAKIAogCQlzZXFfcHJpbnRmKG0sICIgJVg6JWQiLCBpLCBscmFtYnl0ZSk7CiAJfQotCXNlcV9wcmludGYobSwgIlxuIik7CiAKLQlzZXFfcHJpbnRmKG0sICIgQ29tbWFuZCBQZW5kaW5nOiIpOworCXNlcV9wdXRzKG0sICJcbiBDb21tYW5kIFBlbmRpbmc6Iik7CiAJZm9yIChpID0gMDsgaSA8PSBBRFZfTUFYX1RJRDsgaSsrKSB7CiAJCWlmICgoY2hpcF9zY3NpX2lkID09IGkpIHx8CiAJCSAgICAoKGJvYXJkcC0+aW5pdF90aWRtYXNrICYgQURWX1RJRF9UT19USURNQVNLKGkpKSA9PSAwKSkgewpAQCAtMzU4NywxMCArMzU3MCwxMCBAQAogCiAJCXNlcV9wcmludGYobSwgIiAlWDolZCIsIGksIGxyYW1ieXRlKTsKIAl9Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAogCUFkdlJlYWRXb3JkTHJhbShpb3BfYmFzZSwgQVNDX01DX1dEVFJfQUJMRSwgd2R0cl9hYmxlKTsKLQlzZXFfcHJpbnRmKG0sICIgV2lkZSBFbmFibGVkOiIpOworCXNlcV9wdXRzKG0sICIgV2lkZSBFbmFibGVkOiIpOwogCWZvciAoaSA9IDA7IGkgPD0gQURWX01BWF9USUQ7IGkrKykgewogCQlpZiAoKGNoaXBfc2NzaV9pZCA9PSBpKSB8fAogCQkgICAgKChib2FyZHAtPmluaXRfdGlkbWFzayAmIEFEVl9USURfVE9fVElETUFTSyhpKSkgPT0gMCkpIHsKQEAgLTM2MDEsMTAgKzM1ODQsMTAgQEAKIAkJCSAgIGksCiAJCQkgICAod2R0cl9hYmxlICYgQURWX1RJRF9UT19USURNQVNLKGkpKSA/ICdZJyA6ICdOJyk7CiAJfQotCXNlcV9wcmludGYobSwgIlxuIik7CisJc2VxX3B1dGMobSwgJ1xuJyk7CiAKIAlBZHZSZWFkV29yZExyYW0oaW9wX2Jhc2UsIEFTQ19NQ19XRFRSX0RPTkUsIHdkdHJfZG9uZSk7Ci0Jc2VxX3ByaW50ZihtLCAiIFRyYW5zZmVyIEJpdCBXaWR0aDoiKTsKKwlzZXFfcHV0cyhtLCAiIFRyYW5zZmVyIEJpdCBXaWR0aDoiKTsKIAlmb3IgKGkgPSAwOyBpIDw9IEFEVl9NQVhfVElEOyBpKyspIHsKIAkJaWYgKChjaGlwX3Njc2lfaWQgPT0gaSkgfHwKIAkJICAgICgoYm9hcmRwLT5pbml0X3RpZG1hc2sgJiBBRFZfVElEX1RPX1RJRE1BU0soaSkpID09IDApKSB7CkBAIC0zNjIwLDE0ICszNjAzLDE0IEBACiAKIAkJaWYgKCh3ZHRyX2FibGUgJiBBRFZfVElEX1RPX1RJRE1BU0soaSkpICYmCiAJCSAgICAod2R0cl9kb25lICYgQURWX1RJRF9UT19USURNQVNLKGkpKSA9PSAwKSB7Ci0JCQlzZXFfcHJpbnRmKG0sICIqIik7CisJCQlzZXFfcHV0YyhtLCAnKicpOwogCQkJcmVuZWdvdGlhdGUgPSAxOwogCQl9CiAJfQotCXNlcV9wcmludGYobSwgIlxuIik7CisJc2VxX3B1dGMobSwgJ1xuJyk7CiAKIAlBZHZSZWFkV29yZExyYW0oaW9wX2Jhc2UsIEFTQ19NQ19TRFRSX0FCTEUsIHNkdHJfYWJsZSk7Ci0Jc2VxX3ByaW50ZihtLCAiIFN5bmNocm9ub3VzIEVuYWJsZWQ6Iik7CisJc2VxX3B1dHMobSwgIiBTeW5jaHJvbm91cyBFbmFibGVkOiIpOwogCWZvciAoaSA9IDA7IGkgPD0gQURWX01BWF9USUQ7IGkrKykgewogCQlpZiAoKGNoaXBfc2NzaV9pZCA9PSBpKSB8fAogCQkgICAgKChib2FyZHAtPmluaXRfdGlkbWFzayAmIEFEVl9USURfVE9fVElETUFTSyhpKSkgPT0gMCkpIHsKQEAgLTM2MzgsNyArMzYyMSw3IEBACiAJCQkgICBpLAogCQkJICAgKHNkdHJfYWJsZSAmIEFEVl9USURfVE9fVElETUFTSyhpKSkgPyAnWScgOiAnTicpOwogCX0KLQlzZXFfcHJpbnRmKG0sICJcbiIpOworCXNlcV9wdXRjKG0sICdcbicpOwogCiAJQWR2UmVhZFdvcmRMcmFtKGlvcF9iYXNlLCBBU0NfTUNfU0RUUl9ET05FLCBzZHRyX2RvbmUpOwogCWZvciAoaSA9IDA7IGkgPD0gQURWX01BWF9USUQ7IGkrKykgewpAQCAtMzY1NywxNCArMzY0MCwxNCBAQAogCQlzZXFfcHJpbnRmKG0sICIgICVYOiIsIGkpOwogCiAJCWlmICgobHJhbXdvcmQgJiAweDFGKSA9PSAwKSB7CS8qIENoZWNrIGZvciBSRVEvQUNLIE9mZnNldCAwLiAqLwotCQkJc2VxX3ByaW50ZihtLCAiIEFzeW5jaHJvbm91cyIpOworCQkJc2VxX3B1dHMobSwgIiBBc3luY2hyb25vdXMiKTsKIAkJfSBlbHNlIHsKLQkJCXNlcV9wcmludGYobSwgIiBUcmFuc2ZlciBQZXJpb2QgRmFjdG9yOiAiKTsKKwkJCXNlcV9wdXRzKG0sICIgVHJhbnNmZXIgUGVyaW9kIEZhY3RvcjogIik7CiAKIAkJCWlmICgobHJhbXdvcmQgJiAweDFGMDApID09IDB4MTEwMCkgewkvKiA4MCBNaHogKi8KLQkJCQlzZXFfcHJpbnRmKG0sICI5ICg4MC4wIE1oeiksIik7CisJCQkJc2VxX3B1dHMobSwgIjkgKDgwLjAgTWh6KSwiKTsKIAkJCX0gZWxzZSBpZiAoKGxyYW13b3JkICYgMHgxRjAwKSA9PSAweDEwMDApIHsJLyogNDAgTWh6ICovCi0JCQkJc2VxX3ByaW50ZihtLCAiMTAgKDQwLjAgTWh6KSwiKTsKKwkJCQlzZXFfcHV0cyhtLCAiMTAgKDQwLjAgTWh6KSwiKTsKIAkJCX0gZWxzZSB7CS8qIDIwIE1oeiBvciBiZWxvdy4gKi8KIAogCQkJCXBlcmlvZCA9ICgoKGxyYW13b3JkID4+IDgpICogMjUpICsgNTApIC8gNDsKQEAgLTM2ODQsMTYgKzM2NjcsMTUgQEAKIAkJfQogCiAJCWlmICgoc2R0cl9kb25lICYgQURWX1RJRF9UT19USURNQVNLKGkpKSA9PSAwKSB7Ci0JCQlzZXFfcHJpbnRmKG0sICIqXG4iKTsKKwkJCXNlcV9wdXRzKG0sICIqXG4iKTsKIAkJCXJlbmVnb3RpYXRlID0gMTsKIAkJfSBlbHNlIHsKLQkJCXNlcV9wcmludGYobSwgIlxuIik7CisJCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAkJfQogCX0KIAogCWlmIChyZW5lZ290aWF0ZSkgewotCQlzZXFfcHJpbnRmKG0sCi0JCQkgICAiICogPSBSZS1uZWdvdGlhdGlvbiBwZW5kaW5nIGJlZm9yZSBuZXh0IGNvbW1hbmQuXG4iKTsKKwkJc2VxX3B1dHMobSwgIiAqID0gUmUtbmVnb3RpYXRpb24gcGVuZGluZyBiZWZvcmUgbmV4dCBjb21tYW5kLlxuIik7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jIGIvZHJpdmVycy9zY3NpL2FoYTE1MnguYwppbmRleCAyYjk2MGIzLi5lMzFjNDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCisrKyBiL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMKQEAgLTI0OTAsMjk5ICsyNDkwLDI5NiBAQAogCWRpc3BfZW5pbnRyKHNocG50KTsKIH0KIAotI3VuZGVmIFNQUklOVEYKLSNkZWZpbmUgU1BSSU5URihhcmdzLi4uKSBzZXFfcHJpbnRmKG0sICMjYXJncykKLQogc3RhdGljIHZvaWQgZ2V0X2NvbW1hbmQoc3RydWN0IHNlcV9maWxlICptLCBTY3NpX0NtbmQgKiBwdHIpCiB7CiAJaW50IGk7CiAKLQlTUFJJTlRGKCIlcDogdGFyZ2V0PSVkOyBsdW49JWQ7IGNtbmQ9KCAiLAorCXNlcV9wcmludGYobSwgIiVwOiB0YXJnZXQ9JWQ7IGx1bj0lZDsgY21uZD0oICIsCiAJCXB0ciwgcHRyLT5kZXZpY2UtPmlkLCAodTgpcHRyLT5kZXZpY2UtPmx1bik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQ09NTUFORF9TSVpFKHB0ci0+Y21uZFswXSk7IGkrKykKLQkJU1BSSU5URigiMHglMDJ4ICIsIHB0ci0+Y21uZFtpXSk7CisJCXNlcV9wcmludGYobSwgIjB4JTAyeCAiLCBwdHItPmNtbmRbaV0pOwogCi0JU1BSSU5URigiKTsgcmVzaWQ9JWQ7IHJlc2lkdWFsPSVkOyBidWZmZXJzPSVkOyBwaGFzZSB8IiwKKwlzZXFfcHJpbnRmKG0sICIpOyByZXNpZD0lZDsgcmVzaWR1YWw9JWQ7IGJ1ZmZlcnM9JWQ7IHBoYXNlIHwiLAogCQlzY3NpX2dldF9yZXNpZChwdHIpLCBwdHItPlNDcC50aGlzX3Jlc2lkdWFsLAogCQlwdHItPlNDcC5idWZmZXJzX3Jlc2lkdWFsKTsKIAogCWlmIChwdHItPlNDcC5waGFzZSAmIG5vdF9pc3N1ZWQpCi0JCVNQUklOVEYoIm5vdCBpc3N1ZWR8Iik7CisJCXNlcV9wdXRzKG0sICJub3QgaXNzdWVkfCIpOwogCWlmIChwdHItPlNDcC5waGFzZSAmIHNlbGVjdGluZykKLQkJU1BSSU5URigic2VsZWN0aW5nfCIpOworCQlzZXFfcHV0cyhtLCAic2VsZWN0aW5nfCIpOwogCWlmIChwdHItPlNDcC5waGFzZSAmIGRpc2Nvbm5lY3RlZCkKLQkJU1BSSU5URigiZGlzY29ubmVjdGVkfCIpOworCQlzZXFfcHV0cyhtLCAiZGlzY29ubmVjdGVkfCIpOwogCWlmIChwdHItPlNDcC5waGFzZSAmIGFib3J0ZWQpCi0JCVNQUklOVEYoImFib3J0ZWR8Iik7CisJCXNlcV9wdXRzKG0sICJhYm9ydGVkfCIpOwogCWlmIChwdHItPlNDcC5waGFzZSAmIGlkZW50aWZpZWQpCi0JCVNQUklOVEYoImlkZW50aWZpZWR8Iik7CisJCXNlcV9wdXRzKG0sICJpZGVudGlmaWVkfCIpOwogCWlmIChwdHItPlNDcC5waGFzZSAmIGNvbXBsZXRlZCkKLQkJU1BSSU5URigiY29tcGxldGVkfCIpOworCQlzZXFfcHV0cyhtLCAiY29tcGxldGVkfCIpOwogCWlmIChwdHItPlNDcC5waGFzZSAmIHNwaW9yZHkpCi0JCVNQUklOVEYoInNwaW9yZHl8Iik7CisJCXNlcV9wdXRzKG0sICJzcGlvcmR5fCIpOwogCWlmIChwdHItPlNDcC5waGFzZSAmIHN5bmNuZWcpCi0JCVNQUklOVEYoInN5bmNuZWd8Iik7Ci0JU1BSSU5URigiOyBuZXh0PTB4JXBcbiIsIFNDTkVYVChwdHIpKTsKKwkJc2VxX3B1dHMobSwgInN5bmNuZWd8Iik7CisJc2VxX3ByaW50ZihtLCAiOyBuZXh0PTB4JXBcbiIsIFNDTkVYVChwdHIpKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0X3BvcnRzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQpCiB7CiAJaW50IHM7CiAKLQlTUFJJTlRGKCJcbiVzOiAlcyglcykgIiwgQ1VSUkVOVF9TQyA/ICJvbiBidXMiIDogIndhaXRpbmciLCBzdGF0ZXNbU1RBVEVdLm5hbWUsIHN0YXRlc1tQUkVWU1RBVEVdLm5hbWUpOworCXNlcV9wcmludGYobSwgIlxuJXM6ICVzKCVzKSAiLCBDVVJSRU5UX1NDID8gIm9uIGJ1cyIgOiAid2FpdGluZyIsIHN0YXRlc1tTVEFURV0ubmFtZSwgc3RhdGVzW1BSRVZTVEFURV0ubmFtZSk7CiAKIAlzID0gR0VUUE9SVChTQ1NJU0VRKTsKLQlTUFJJTlRGKCJTQ1NJU0VRKCAiKTsKKwlzZXFfcHV0cyhtLCAiU0NTSVNFUSggIik7CiAJaWYgKHMgJiBURU1PREVPKQotCQlTUFJJTlRGKCJUQVJHRVQgTU9ERSAiKTsKKwkJc2VxX3B1dHMobSwgIlRBUkdFVCBNT0RFICIpOwogCWlmIChzICYgRU5TRUxPKQotCQlTUFJJTlRGKCJTRUxPICIpOworCQlzZXFfcHV0cyhtLCAiU0VMTyAiKTsKIAlpZiAocyAmIEVOU0VMSSkKLQkJU1BSSU5URigiU0VMSSAiKTsKKwkJc2VxX3B1dHMobSwgIlNFTEkgIik7CiAJaWYgKHMgJiBFTlJFU0VMSSkKLQkJU1BSSU5URigiUkVTRUxJICIpOworCQlzZXFfcHV0cyhtLCAiUkVTRUxJICIpOwogCWlmIChzICYgRU5BVVRPQVROTykKLQkJU1BSSU5URigiQVVUT0FUTk8gIik7CisJCXNlcV9wdXRzKG0sICJBVVRPQVROTyAiKTsKIAlpZiAocyAmIEVOQVVUT0FUTkkpCi0JCVNQUklOVEYoIkFVVE9BVE5JICIpOworCQlzZXFfcHV0cyhtLCAiQVVUT0FUTkkgIik7CiAJaWYgKHMgJiBFTkFVVE9BVE5QKQotCQlTUFJJTlRGKCJBVVRPQVROUCAiKTsKKwkJc2VxX3B1dHMobSwgIkFVVE9BVE5QICIpOwogCWlmIChzICYgU0NTSVJTVE8pCi0JCVNQUklOVEYoIlNDU0lSU1RPICIpOwotCVNQUklOVEYoIik7Iik7CisJCXNlcV9wdXRzKG0sICJTQ1NJUlNUTyAiKTsKKwlzZXFfcHV0cyhtLCAiKTsiKTsKIAotCVNQUklOVEYoIiBTQ1NJU0lHKCIpOworCXNlcV9wdXRzKG0sICIgU0NTSVNJRygiKTsKIAlzID0gR0VUUE9SVChTQ1NJU0lHKTsKIAlzd2l0Y2ggKHMgJiBQX01BU0spIHsKIAljYXNlIFBfREFUQU86Ci0JCVNQUklOVEYoIkRBVEEgT1VUIik7CisJCXNlcV9wdXRzKG0sICJEQVRBIE9VVCIpOwogCQlicmVhazsKIAljYXNlIFBfREFUQUk6Ci0JCVNQUklOVEYoIkRBVEEgSU4iKTsKKwkJc2VxX3B1dHMobSwgIkRBVEEgSU4iKTsKIAkJYnJlYWs7CiAJY2FzZSBQX0NNRDoKLQkJU1BSSU5URigiQ09NTUFORCIpOworCQlzZXFfcHV0cyhtLCAiQ09NTUFORCIpOwogCQlicmVhazsKIAljYXNlIFBfU1RBVFVTOgotCQlTUFJJTlRGKCJTVEFUVVMiKTsKKwkJc2VxX3B1dHMobSwgIlNUQVRVUyIpOwogCQlicmVhazsKIAljYXNlIFBfTVNHTzoKLQkJU1BSSU5URigiTUVTU0FHRSBPVVQiKTsKKwkJc2VxX3B1dHMobSwgIk1FU1NBR0UgT1VUIik7CiAJCWJyZWFrOwogCWNhc2UgUF9NU0dJOgotCQlTUFJJTlRGKCJNRVNTQUdFIElOIik7CisJCXNlcV9wdXRzKG0sICJNRVNTQUdFIElOIik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVNQUklOVEYoIippbnZhbGlkKiIpOworCQlzZXFfcHV0cyhtLCAiKmludmFsaWQqIik7CiAJCWJyZWFrOwogCX0KIAotCVNQUklOVEYoIik7ICIpOworCXNlcV9wdXRzKG0sICIpOyAiKTsKIAotCVNQUklOVEYoIklOVFNUQVQgKCVzKTsgIiwgVEVTVEhJKERNQVNUQVQsIElOVFNUQVQpID8gImhpIiA6ICJsbyIpOworCXNlcV9wcmludGYobSwgIklOVFNUQVQgKCVzKTsgIiwgVEVTVEhJKERNQVNUQVQsIElOVFNUQVQpID8gImhpIiA6ICJsbyIpOwogCi0JU1BSSU5URigiU1NUQVQoICIpOworCXNlcV9wdXRzKG0sICJTU1RBVCggIik7CiAJcyA9IEdFVFBPUlQoU1NUQVQwKTsKIAlpZiAocyAmIFRBUkdFVCkKLQkJU1BSSU5URigiVEFSR0VUICIpOworCQlzZXFfcHV0cyhtLCAiVEFSR0VUICIpOwogCWlmIChzICYgU0VMRE8pCi0JCVNQUklOVEYoIlNFTERPICIpOworCQlzZXFfcHV0cyhtLCAiU0VMRE8gIik7CiAJaWYgKHMgJiBTRUxESSkKLQkJU1BSSU5URigiU0VMREkgIik7CisJCXNlcV9wdXRzKG0sICJTRUxESSAiKTsKIAlpZiAocyAmIFNFTElOR08pCi0JCVNQUklOVEYoIlNFTElOR08gIik7CisJCXNlcV9wdXRzKG0sICJTRUxJTkdPICIpOwogCWlmIChzICYgU1dSQVApCi0JCVNQUklOVEYoIlNXUkFQICIpOworCQlzZXFfcHV0cyhtLCAiU1dSQVAgIik7CiAJaWYgKHMgJiBTRE9ORSkKLQkJU1BSSU5URigiU0RPTkUgIik7CisJCXNlcV9wdXRzKG0sICJTRE9ORSAiKTsKIAlpZiAocyAmIFNQSU9SRFkpCi0JCVNQUklOVEYoIlNQSU9SRFkgIik7CisJCXNlcV9wdXRzKG0sICJTUElPUkRZICIpOwogCWlmIChzICYgRE1BRE9ORSkKLQkJU1BSSU5URigiRE1BRE9ORSAiKTsKKwkJc2VxX3B1dHMobSwgIkRNQURPTkUgIik7CiAKIAlzID0gR0VUUE9SVChTU1RBVDEpOwogCWlmIChzICYgU0VMVE8pCi0JCVNQUklOVEYoIlNFTFRPICIpOworCQlzZXFfcHV0cyhtLCAiU0VMVE8gIik7CiAJaWYgKHMgJiBBVE5UQVJHKQotCQlTUFJJTlRGKCJBVE5UQVJHICIpOworCQlzZXFfcHV0cyhtLCAiQVROVEFSRyAiKTsKIAlpZiAocyAmIFNDU0lSU1RJKQotCQlTUFJJTlRGKCJTQ1NJUlNUSSAiKTsKKwkJc2VxX3B1dHMobSwgIlNDU0lSU1RJICIpOwogCWlmIChzICYgUEhBU0VNSVMpCi0JCVNQUklOVEYoIlBIQVNFTUlTICIpOworCQlzZXFfcHV0cyhtLCAiUEhBU0VNSVMgIik7CiAJaWYgKHMgJiBCVVNGUkVFKQotCQlTUFJJTlRGKCJCVVNGUkVFICIpOworCQlzZXFfcHV0cyhtLCAiQlVTRlJFRSAiKTsKIAlpZiAocyAmIFNDU0lQRVJSKQotCQlTUFJJTlRGKCJTQ1NJUEVSUiAiKTsKKwkJc2VxX3B1dHMobSwgIlNDU0lQRVJSICIpOwogCWlmIChzICYgUEhBU0VDSEcpCi0JCVNQUklOVEYoIlBIQVNFQ0hHICIpOworCQlzZXFfcHV0cyhtLCAiUEhBU0VDSEcgIik7CiAJaWYgKHMgJiBSRVFJTklUKQotCQlTUFJJTlRGKCJSRVFJTklUICIpOwotCVNQUklOVEYoIik7ICIpOworCQlzZXFfcHV0cyhtLCAiUkVRSU5JVCAiKTsKKwlzZXFfcHV0cyhtLCAiKTsgIik7CiAKIAotCVNQUklOVEYoIlNTVEFUKCAiKTsKKwlzZXFfcHV0cyhtLCAiU1NUQVQoICIpOwogCiAJcyA9IEdFVFBPUlQoU1NUQVQwKSAmIEdFVFBPUlQoU0lNT0RFMCk7CiAKIAlpZiAocyAmIFRBUkdFVCkKLQkJU1BSSU5URigiVEFSR0VUICIpOworCQlzZXFfcHV0cyhtLCAiVEFSR0VUICIpOwogCWlmIChzICYgU0VMRE8pCi0JCVNQUklOVEYoIlNFTERPICIpOworCQlzZXFfcHV0cyhtLCAiU0VMRE8gIik7CiAJaWYgKHMgJiBTRUxESSkKLQkJU1BSSU5URigiU0VMREkgIik7CisJCXNlcV9wdXRzKG0sICJTRUxESSAiKTsKIAlpZiAocyAmIFNFTElOR08pCi0JCVNQUklOVEYoIlNFTElOR08gIik7CisJCXNlcV9wdXRzKG0sICJTRUxJTkdPICIpOwogCWlmIChzICYgU1dSQVApCi0JCVNQUklOVEYoIlNXUkFQICIpOworCQlzZXFfcHV0cyhtLCAiU1dSQVAgIik7CiAJaWYgKHMgJiBTRE9ORSkKLQkJU1BSSU5URigiU0RPTkUgIik7CisJCXNlcV9wdXRzKG0sICJTRE9ORSAiKTsKIAlpZiAocyAmIFNQSU9SRFkpCi0JCVNQUklOVEYoIlNQSU9SRFkgIik7CisJCXNlcV9wdXRzKG0sICJTUElPUkRZICIpOwogCWlmIChzICYgRE1BRE9ORSkKLQkJU1BSSU5URigiRE1BRE9ORSAiKTsKKwkJc2VxX3B1dHMobSwgIkRNQURPTkUgIik7CiAKIAlzID0gR0VUUE9SVChTU1RBVDEpICYgR0VUUE9SVChTSU1PREUxKTsKIAogCWlmIChzICYgU0VMVE8pCi0JCVNQUklOVEYoIlNFTFRPICIpOworCQlzZXFfcHV0cyhtLCAiU0VMVE8gIik7CiAJaWYgKHMgJiBBVE5UQVJHKQotCQlTUFJJTlRGKCJBVE5UQVJHICIpOworCQlzZXFfcHV0cyhtLCAiQVROVEFSRyAiKTsKIAlpZiAocyAmIFNDU0lSU1RJKQotCQlTUFJJTlRGKCJTQ1NJUlNUSSAiKTsKKwkJc2VxX3B1dHMobSwgIlNDU0lSU1RJICIpOwogCWlmIChzICYgUEhBU0VNSVMpCi0JCVNQUklOVEYoIlBIQVNFTUlTICIpOworCQlzZXFfcHV0cyhtLCAiUEhBU0VNSVMgIik7CiAJaWYgKHMgJiBCVVNGUkVFKQotCQlTUFJJTlRGKCJCVVNGUkVFICIpOworCQlzZXFfcHV0cyhtLCAiQlVTRlJFRSAiKTsKIAlpZiAocyAmIFNDU0lQRVJSKQotCQlTUFJJTlRGKCJTQ1NJUEVSUiAiKTsKKwkJc2VxX3B1dHMobSwgIlNDU0lQRVJSICIpOwogCWlmIChzICYgUEhBU0VDSEcpCi0JCVNQUklOVEYoIlBIQVNFQ0hHICIpOworCQlzZXFfcHV0cyhtLCAiUEhBU0VDSEcgIik7CiAJaWYgKHMgJiBSRVFJTklUKQotCQlTUFJJTlRGKCJSRVFJTklUICIpOwotCVNQUklOVEYoIik7ICIpOworCQlzZXFfcHV0cyhtLCAiUkVRSU5JVCAiKTsKKwlzZXFfcHV0cyhtLCAiKTsgIik7CiAKLQlTUFJJTlRGKCJTWEZSQ1RMMCggIik7CisJc2VxX3B1dHMobSwgIlNYRlJDVEwwKCAiKTsKIAogCXMgPSBHRVRQT1JUKFNYRlJDVEwwKTsKIAlpZiAocyAmIFNDU0lFTikKLQkJU1BSSU5URigiU0NTSUVOICIpOworCQlzZXFfcHV0cyhtLCAiU0NTSUVOICIpOwogCWlmIChzICYgRE1BRU4pCi0JCVNQUklOVEYoIkRNQUVOICIpOworCQlzZXFfcHV0cyhtLCAiRE1BRU4gIik7CiAJaWYgKHMgJiBDSDEpCi0JCVNQUklOVEYoIkNIMSAiKTsKKwkJc2VxX3B1dHMobSwgIkNIMSAiKTsKIAlpZiAocyAmIENMUlNUQ05UKQotCQlTUFJJTlRGKCJDTFJTVENOVCAiKTsKKwkJc2VxX3B1dHMobSwgIkNMUlNUQ05UICIpOwogCWlmIChzICYgU1BJT0VOKQotCQlTUFJJTlRGKCJTUElPRU4gIik7CisJCXNlcV9wdXRzKG0sICJTUElPRU4gIik7CiAJaWYgKHMgJiBDTFJDSDEpCi0JCVNQUklOVEYoIkNMUkNIMSAiKTsKLQlTUFJJTlRGKCIpOyAiKTsKKwkJc2VxX3B1dHMobSwgIkNMUkNIMSAiKTsKKwlzZXFfcHV0cyhtLCAiKTsgIik7CiAKLQlTUFJJTlRGKCJTSUdOQUwoICIpOworCXNlcV9wdXRzKG0sICJTSUdOQUwoICIpOwogCiAJcyA9IEdFVFBPUlQoU0NTSVNJRyk7CiAJaWYgKHMgJiBTSUdfQVROSSkKLQkJU1BSSU5URigiQVROSSAiKTsKKwkJc2VxX3B1dHMobSwgIkFUTkkgIik7CiAJaWYgKHMgJiBTSUdfU0VMSSkKLQkJU1BSSU5URigiU0VMSSAiKTsKKwkJc2VxX3B1dHMobSwgIlNFTEkgIik7CiAJaWYgKHMgJiBTSUdfQlNZSSkKLQkJU1BSSU5URigiQlNZSSAiKTsKKwkJc2VxX3B1dHMobSwgIkJTWUkgIik7CiAJaWYgKHMgJiBTSUdfUkVRSSkKLQkJU1BSSU5URigiUkVRSSAiKTsKKwkJc2VxX3B1dHMobSwgIlJFUUkgIik7CiAJaWYgKHMgJiBTSUdfQUNLSSkKLQkJU1BSSU5URigiQUNLSSAiKTsKLQlTUFJJTlRGKCIpOyAiKTsKKwkJc2VxX3B1dHMobSwgIkFDS0kgIik7CisJc2VxX3B1dHMobSwgIik7ICIpOwogCi0JU1BSSU5URigiU0VMSUQoJTAyeCksICIsIEdFVFBPUlQoU0VMSUQpKTsKKwlzZXFfcHJpbnRmKG0sICJTRUxJRCglMDJ4KSwgIiwgR0VUUE9SVChTRUxJRCkpOwogCi0JU1BSSU5URigiU1RDTlQoJWQpLCAiLCBHRVRTVENOVCgpKTsKKwlzZXFfcHJpbnRmKG0sICJTVENOVCglZCksICIsIEdFVFNUQ05UKCkpOwogCi0JU1BSSU5URigiU1NUQVQyKCAiKTsKKwlzZXFfcHV0cyhtLCAiU1NUQVQyKCAiKTsKIAogCXMgPSBHRVRQT1JUKFNTVEFUMik7CiAJaWYgKHMgJiBTT0ZGU0VUKQotCQlTUFJJTlRGKCJTT0ZGU0VUICIpOworCQlzZXFfcHV0cyhtLCAiU09GRlNFVCAiKTsKIAlpZiAocyAmIFNFTVBUWSkKLQkJU1BSSU5URigiU0VNUFRZICIpOworCQlzZXFfcHV0cyhtLCAiU0VNUFRZICIpOwogCWlmIChzICYgU0ZVTEwpCi0JCVNQUklOVEYoIlNGVUxMICIpOwotCVNQUklOVEYoIik7IFNGQ05UICglZCk7ICIsIHMgJiAoU0ZVTEwgfCBTRkNOVCkpOworCQlzZXFfcHV0cyhtLCAiU0ZVTEwgIik7CisJc2VxX3ByaW50ZihtLCAiKTsgU0ZDTlQgKCVkKTsgIiwgcyAmIChTRlVMTCB8IFNGQ05UKSk7CiAKIAlzID0gR0VUUE9SVChTU1RBVDMpOwotCVNQUklOVEYoIlNDU0lDTlQgKCVkKSwgT0ZGQ05UKCVkKSwgIiwgKHMgJiAweGYwKSA+PiA0LCBzICYgMHgwZik7CisJc2VxX3ByaW50ZihtLCAiU0NTSUNOVCAoJWQpLCBPRkZDTlQoJWQpLCAiLCAocyAmIDB4ZjApID4+IDQsIHMgJiAweDBmKTsKIAotCVNQUklOVEYoIlNTVEFUNCggIik7CisJc2VxX3B1dHMobSwgIlNTVEFUNCggIik7CiAJcyA9IEdFVFBPUlQoU1NUQVQ0KTsKIAlpZiAocyAmIFNZTkNFUlIpCi0JCVNQUklOVEYoIlNZTkNFUlIgIik7CisJCXNlcV9wdXRzKG0sICJTWU5DRVJSICIpOwogCWlmIChzICYgRldFUlIpCi0JCVNQUklOVEYoIkZXRVJSICIpOworCQlzZXFfcHV0cyhtLCAiRldFUlIgIik7CiAJaWYgKHMgJiBGUkVSUikKLQkJU1BSSU5URigiRlJFUlIgIik7Ci0JU1BSSU5URigiKTsgIik7CisJCXNlcV9wdXRzKG0sICJGUkVSUiAiKTsKKwlzZXFfcHV0cyhtLCAiKTsgIik7CiAKLQlTUFJJTlRGKCJETUFDTlRSTDAoICIpOworCXNlcV9wdXRzKG0sICJETUFDTlRSTDAoICIpOwogCXMgPSBHRVRQT1JUKERNQUNOVFJMMCk7Ci0JU1BSSU5URigiJXMgIiwgcyAmIF84QklUID8gIjhCSVQiIDogIjE2QklUIik7Ci0JU1BSSU5URigiJXMgIiwgcyAmIERNQSA/ICJETUEiIDogIlBJTyIpOwotCVNQUklOVEYoIiVzICIsIHMgJiBXUklURV9SRUFEID8gIldSSVRFIiA6ICJSRUFEIik7CisJc2VxX3ByaW50ZihtLCAiJXMgIiwgcyAmIF84QklUID8gIjhCSVQiIDogIjE2QklUIik7CisJc2VxX3ByaW50ZihtLCAiJXMgIiwgcyAmIERNQSA/ICJETUEiIDogIlBJTyIpOworCXNlcV9wcmludGYobSwgIiVzICIsIHMgJiBXUklURV9SRUFEID8gIldSSVRFIiA6ICJSRUFEIik7CiAJaWYgKHMgJiBFTkRNQSkKLQkJU1BSSU5URigiRU5ETUEgIik7CisJCXNlcV9wdXRzKG0sICJFTkRNQSAiKTsKIAlpZiAocyAmIElOVEVOKQotCQlTUFJJTlRGKCJJTlRFTiAiKTsKKwkJc2VxX3B1dHMobSwgIklOVEVOICIpOwogCWlmIChzICYgUlNURklGTykKLQkJU1BSSU5URigiUlNURklGTyAiKTsKKwkJc2VxX3B1dHMobSwgIlJTVEZJRk8gIik7CiAJaWYgKHMgJiBTV0lOVCkKLQkJU1BSSU5URigiU1dJTlQgIik7Ci0JU1BSSU5URigiKTsgIik7CisJCXNlcV9wdXRzKG0sICJTV0lOVCAiKTsKKwlzZXFfcHV0cyhtLCAiKTsgIik7CiAKLQlTUFJJTlRGKCJETUFTVEFUKCAiKTsKKwlzZXFfcHV0cyhtLCAiRE1BU1RBVCggIik7CiAJcyA9IEdFVFBPUlQoRE1BU1RBVCk7CiAJaWYgKHMgJiBBVERPTkUpCi0JCVNQUklOVEYoIkFURE9ORSAiKTsKKwkJc2VxX3B1dHMobSwgIkFURE9ORSAiKTsKIAlpZiAocyAmIFdPUkRSRFkpCi0JCVNQUklOVEYoIldPUkRSRFkgIik7CisJCXNlcV9wdXRzKG0sICJXT1JEUkRZICIpOwogCWlmIChzICYgREZJRk9GVUxMKQotCQlTUFJJTlRGKCJERklGT0ZVTEwgIik7CisJCXNlcV9wdXRzKG0sICJERklGT0ZVTEwgIik7CiAJaWYgKHMgJiBERklGT0VNUCkKLQkJU1BSSU5URigiREZJRk9FTVAgIik7Ci0JU1BSSU5URigiKVxuIik7CisJCXNlcV9wdXRzKG0sICJERklGT0VNUCAiKTsKKwlzZXFfcHV0cyhtLCAiKVxuIik7CiAKLQlTUFJJTlRGKCJlbmFibGVkIGludGVycnVwdHMoICIpOworCXNlcV9wdXRzKG0sICJlbmFibGVkIGludGVycnVwdHMoICIpOwogCiAJcyA9IEdFVFBPUlQoU0lNT0RFMCk7CiAJaWYgKHMgJiBFTlNFTERPKQotCQlTUFJJTlRGKCJFTlNFTERPICIpOworCQlzZXFfcHV0cyhtLCAiRU5TRUxETyAiKTsKIAlpZiAocyAmIEVOU0VMREkpCi0JCVNQUklOVEYoIkVOU0VMREkgIik7CisJCXNlcV9wdXRzKG0sICJFTlNFTERJICIpOwogCWlmIChzICYgRU5TRUxJTkdPKQotCQlTUFJJTlRGKCJFTlNFTElOR08gIik7CisJCXNlcV9wdXRzKG0sICJFTlNFTElOR08gIik7CiAJaWYgKHMgJiBFTlNXUkFQKQotCQlTUFJJTlRGKCJFTlNXUkFQICIpOworCQlzZXFfcHV0cyhtLCAiRU5TV1JBUCAiKTsKIAlpZiAocyAmIEVOU0RPTkUpCi0JCVNQUklOVEYoIkVOU0RPTkUgIik7CisJCXNlcV9wdXRzKG0sICJFTlNET05FICIpOwogCWlmIChzICYgRU5TUElPUkRZKQotCQlTUFJJTlRGKCJFTlNQSU9SRFkgIik7CisJCXNlcV9wdXRzKG0sICJFTlNQSU9SRFkgIik7CiAJaWYgKHMgJiBFTkRNQURPTkUpCi0JCVNQUklOVEYoIkVORE1BRE9ORSAiKTsKKwkJc2VxX3B1dHMobSwgIkVORE1BRE9ORSAiKTsKIAogCXMgPSBHRVRQT1JUKFNJTU9ERTEpOwogCWlmIChzICYgRU5TRUxUSU1PKQotCQlTUFJJTlRGKCJFTlNFTFRJTU8gIik7CisJCXNlcV9wdXRzKG0sICJFTlNFTFRJTU8gIik7CiAJaWYgKHMgJiBFTkFUTlRBUkcpCi0JCVNQUklOVEYoIkVOQVROVEFSRyAiKTsKKwkJc2VxX3B1dHMobSwgIkVOQVROVEFSRyAiKTsKIAlpZiAocyAmIEVOUEhBU0VNSVMpCi0JCVNQUklOVEYoIkVOUEhBU0VNSVMgIik7CisJCXNlcV9wdXRzKG0sICJFTlBIQVNFTUlTICIpOwogCWlmIChzICYgRU5CVVNGUkVFKQotCQlTUFJJTlRGKCJFTkJVU0ZSRUUgIik7CisJCXNlcV9wdXRzKG0sICJFTkJVU0ZSRUUgIik7CiAJaWYgKHMgJiBFTlNDU0lQRVJSKQotCQlTUFJJTlRGKCJFTlNDU0lQRVJSICIpOworCQlzZXFfcHV0cyhtLCAiRU5TQ1NJUEVSUiAiKTsKIAlpZiAocyAmIEVOUEhBU0VDSEcpCi0JCVNQUklOVEYoIkVOUEhBU0VDSEcgIik7CisJCXNlcV9wdXRzKG0sICJFTlBIQVNFQ0hHICIpOwogCWlmIChzICYgRU5SRVFJTklUKQotCQlTUFJJTlRGKCJFTlJFUUlOSVQgIik7Ci0JU1BSSU5URigiKVxuIik7CisJCXNlcV9wdXRzKG0sICJFTlJFUUlOSVQgIik7CisJc2VxX3B1dHMobSwgIilcbiIpOwogfQogCiBzdGF0aWMgaW50IGFoYTE1Mnhfc2V0X2luZm8oc3RydWN0IFNjc2lfSG9zdCAqc2hwbnQsIGNoYXIgKmJ1ZmZlciwgaW50IGxlbmd0aCkKQEAgLTI4MjUsNTYgKzI4MjIsNTYgQEAKIAlTY3NpX0NtbmQgKnB0cjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JU1BSSU5URihBSEExNTJYX1JFVklEICJcbiIpOworCXNlcV9wdXRzKG0sIEFIQTE1MlhfUkVWSUQgIlxuIik7CiAKLQlTUFJJTlRGKCJpb3BvcnRzIDB4JTA0bHggdG8gMHglMDRseFxuIiwKKwlzZXFfcHJpbnRmKG0sICJpb3BvcnRzIDB4JTA0bHggdG8gMHglMDRseFxuIiwKIAkJc2hwbnQtPmlvX3BvcnQsIHNocG50LT5pb19wb3J0ICsgc2hwbnQtPm5faW9fcG9ydCAtIDEpOwotCVNQUklOVEYoImludGVycnVwdCAweCUwMnhcbiIsIHNocG50LT5pcnEpOwotCVNQUklOVEYoImRpc2Nvbm5lY3Rpb24vcmVjb25uZWN0aW9uICVzXG4iLAorCXNlcV9wcmludGYobSwgImludGVycnVwdCAweCUwMnhcbiIsIHNocG50LT5pcnEpOworCXNlcV9wcmludGYobSwgImRpc2Nvbm5lY3Rpb24vcmVjb25uZWN0aW9uICVzXG4iLAogCQlSRUNPTk5FQ1QgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKLQlTUFJJTlRGKCJwYXJpdHkgY2hlY2tpbmcgJXNcbiIsCisJc2VxX3ByaW50ZihtLCAicGFyaXR5IGNoZWNraW5nICVzXG4iLAogCQlQQVJJVFkgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKLQlTUFJJTlRGKCJzeW5jaHJvbm91cyB0cmFuc2ZlcnMgJXNcbiIsCisJc2VxX3ByaW50ZihtLCAic3luY2hyb25vdXMgdHJhbnNmZXJzICVzXG4iLAogCQlTWU5DSFJPTk9VUyA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwotCVNQUklOVEYoIiVkIGNvbW1hbmRzIGN1cnJlbnRseSBxdWV1ZWRcbiIsIEhPU1REQVRBKHNocG50KS0+Y29tbWFuZHMpOworCXNlcV9wcmludGYobSwgIiVkIGNvbW1hbmRzIGN1cnJlbnRseSBxdWV1ZWRcbiIsIEhPU1REQVRBKHNocG50KS0+Y29tbWFuZHMpOwogCiAJaWYoU1lOQ0hST05PVVMpIHsKLQkJU1BSSU5URigic3luY2hyb25vdXNseSBvcGVyYXRpbmcgdGFyZ2V0cyAodGljaz01MCBucyk6XG4iKTsKKwkJc2VxX3B1dHMobSwgInN5bmNocm9ub3VzbHkgb3BlcmF0aW5nIHRhcmdldHMgKHRpY2s9NTAgbnMpOlxuIik7CiAJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCiAJCQlpZiAoSE9TVERBVEEoc2hwbnQpLT5zeW5jcmF0ZVtpXSAmIDB4N2YpCi0JCQkJU1BSSU5URigidGFyZ2V0ICVkOiBwZXJpb2QgJWRULyVkbnM7IHJlcS9hY2sgb2Zmc2V0ICVkXG4iLAorCQkJCXNlcV9wcmludGYobSwgInRhcmdldCAlZDogcGVyaW9kICVkVC8lZG5zOyByZXEvYWNrIG9mZnNldCAlZFxuIiwKIAkJCQkJaSwKIAkJCQkJKCgoSE9TVERBVEEoc2hwbnQpLT5zeW5jcmF0ZVtpXSAmIDB4NzApID4+IDQpICsgMiksCiAJCQkJCSgoKEhPU1REQVRBKHNocG50KS0+c3luY3JhdGVbaV0gJiAweDcwKSA+PiA0KSArIDIpICogNTAsCiAJCQkJICAgIEhPU1REQVRBKHNocG50KS0+c3luY3JhdGVbaV0gJiAweDBmKTsKIAl9Ci0JU1BSSU5URigiXG5xdWV1ZSBzdGF0dXM6XG4iKTsKKwlzZXFfcHV0cyhtLCAiXG5xdWV1ZSBzdGF0dXM6XG4iKTsKIAlET19MT0NLKGZsYWdzKTsKIAlpZiAoSVNTVUVfU0MpIHsKLQkJU1BSSU5URigibm90IHlldCBpc3N1ZWQgY29tbWFuZHM6XG4iKTsKKwkJc2VxX3B1dHMobSwgIm5vdCB5ZXQgaXNzdWVkIGNvbW1hbmRzOlxuIik7CiAJCWZvciAocHRyID0gSVNTVUVfU0M7IHB0cjsgcHRyID0gU0NORVhUKHB0cikpCiAJCQlnZXRfY29tbWFuZChtLCBwdHIpOwogCX0gZWxzZQotCQlTUFJJTlRGKCJubyBub3QgeWV0IGlzc3VlZCBjb21tYW5kc1xuIik7CisJCXNlcV9wdXRzKG0sICJubyBub3QgeWV0IGlzc3VlZCBjb21tYW5kc1xuIik7CiAJRE9fVU5MT0NLKGZsYWdzKTsKIAogCWlmIChDVVJSRU5UX1NDKSB7Ci0JCVNQUklOVEYoImN1cnJlbnQgY29tbWFuZDpcbiIpOworCQlzZXFfcHV0cyhtLCAiY3VycmVudCBjb21tYW5kOlxuIik7CiAJCWdldF9jb21tYW5kKG0sIENVUlJFTlRfU0MpOwogCX0gZWxzZQotCQlTUFJJTlRGKCJubyBjdXJyZW50IGNvbW1hbmRcbiIpOworCQlzZXFfcHV0cyhtLCAibm8gY3VycmVudCBjb21tYW5kXG4iKTsKIAogCWlmIChESVNDT05ORUNURURfU0MpIHsKLQkJU1BSSU5URigiZGlzY29ubmVjdGVkIGNvbW1hbmRzOlxuIik7CisJCXNlcV9wdXRzKG0sICJkaXNjb25uZWN0ZWQgY29tbWFuZHM6XG4iKTsKIAkJZm9yIChwdHIgPSBESVNDT05ORUNURURfU0M7IHB0cjsgcHRyID0gU0NORVhUKHB0cikpCiAJCQlnZXRfY29tbWFuZChtLCBwdHIpOwogCX0gZWxzZQotCQlTUFJJTlRGKCJubyBkaXNjb25uZWN0ZWQgY29tbWFuZHNcbiIpOworCQlzZXFfcHV0cyhtLCAibm8gZGlzY29ubmVjdGVkIGNvbW1hbmRzXG4iKTsKIAogCWdldF9wb3J0cyhtLCBzaHBudCk7CiAKICNpZiBkZWZpbmVkKEFIQTE1MlhfU1RBVCkKLQlTUFJJTlRGKCJzdGF0aXN0aWNzOlxuIgorCXNlcV9wcmludGYobSwgInN0YXRpc3RpY3M6XG4iCiAJCSJ0b3RhbCBjb21tYW5kczogICAgICAgICAgICAgICAlZFxuIgogCQkiZGlzY29ubmVjdGlvbnM6ICAgICAgICAgICAgICAgJWRcbiIKIAkJImJ1c2ZyZWUgd2l0aCBjaGVjayBjb25kaXRpb246ICVkXG4iCkBAIC0yODk0LDcgKzI4OTEsNyBAQAogCQlIT1NUREFUQShzaHBudCktPmJ1c2ZyZWVfd2l0aG91dF9kb25lX2NvbW1hbmQsCiAJCUhPU1REQVRBKHNocG50KS0+YnVzZnJlZV93aXRob3V0X2FueV9hY3Rpb24pOwogCWZvcihpPTA7IGk8bWF4c3RhdGU7IGkrKykgewotCQlTUFJJTlRGKCIlLTEwcyAlLTEyZCAlLTEyZCAlLTEybGRcbiIsCisJCXNlcV9wcmludGYobSwgIiUtMTBzICUtMTJkICUtMTJkICUtMTJsZFxuIiwKIAkJCXN0YXRlc1tpXS5uYW1lLAogCQkJSE9TVERBVEEoc2hwbnQpLT5jb3VudF90cmFuc1tpXSwKIAkJCUhPU1REQVRBKHNocG50KS0+Y291bnRbaV0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X2NvcmUuYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jCmluZGV4IDBiY2FjZjcuLjk3ZjJhY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfY29yZS5jCkBAIC0xMjk4LDcgKzEyOTgsNyBAQAogCiAJLyoKIAkgKiBXYWl0IGZvciBhbnkgaW5wcm9ncmVzcyBETUEgdG8gY29tcGxldGUgYW5kIGNsZWFyIERNQSBzdGF0ZQotCSAqIGlmIHRoaXMgaWYgZm9yIGFuIFNDQiBpbiB0aGUgcWluZmlmby4KKwkgKiBpZiB0aGlzIGlzIGZvciBhbiBTQ0IgaW4gdGhlIHFpbmZpZm8uCiAJICovCiAJd2hpbGUgKCgoY2NzY2JjdGwgPSBhaGRfaW5iKGFoZCwgQ0NTQ0JDVEwpKSAmIChDQ0FSUkVOfENDU0NCRU4pKSAhPSAwKSB7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfcHJvYy5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wcm9jLmMKaW5kZXggMjdkYmZjYy4uYWRkMmRhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wcm9jLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9wcm9jLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAl1X2ludCBtYjsKIAogCWlmICh0aW5mby0+cGVyaW9kID09IEFIRF9QRVJJT0RfVU5LTk9XTikgewotCQlzZXFfcHJpbnRmKG0sICJSZW5lZ290aWF0aW9uIFBlbmRpbmdcbiIpOworCQlzZXFfcHV0cyhtLCAiUmVuZWdvdGlhdGlvbiBQZW5kaW5nXG4iKTsKIAkJcmV0dXJuOwogCX0KICAgICAgICAgc3BlZWQgPSAzMzAwOwpAQCAtMTE5LDQwICsxMTksMzggQEAKIAkJcHJpbnRlZF9vcHRpb25zID0gMDsKIAkJc2VxX3ByaW50ZihtLCAiICglZC4lMDNkTUh6IiwgZnJlcSAvIDEwMDAsIGZyZXEgJSAxMDAwKTsKIAkJaWYgKCh0aW5mby0+cHByX29wdGlvbnMgJiBNU0dfRVhUX1BQUl9SRF9TVFJNKSAhPSAwKSB7Ci0JCQlzZXFfcHJpbnRmKG0sICIgUkRTVFJNIik7CisJCQlzZXFfcHV0cyhtLCAiIFJEU1RSTSIpOwogCQkJcHJpbnRlZF9vcHRpb25zKys7CiAJCX0KIAkJaWYgKCh0aW5mby0+cHByX29wdGlvbnMgJiBNU0dfRVhUX1BQUl9EVF9SRVEpICE9IDApIHsKLQkJCXNlcV9wcmludGYobSwgIiVzIiwgcHJpbnRlZF9vcHRpb25zID8gInxEVCIgOiAiIERUIik7CisJCQlzZXFfcHV0cyhtLCBwcmludGVkX29wdGlvbnMgPyAifERUIiA6ICIgRFQiKTsKIAkJCXByaW50ZWRfb3B0aW9ucysrOwogCQl9CiAJCWlmICgodGluZm8tPnBwcl9vcHRpb25zICYgTVNHX0VYVF9QUFJfSVVfUkVRKSAhPSAwKSB7Ci0JCQlzZXFfcHJpbnRmKG0sICIlcyIsIHByaW50ZWRfb3B0aW9ucyA/ICJ8SVUiIDogIiBJVSIpOworCQkJc2VxX3B1dHMobSwgcHJpbnRlZF9vcHRpb25zID8gInxJVSIgOiAiIElVIik7CiAJCQlwcmludGVkX29wdGlvbnMrKzsKIAkJfQogCQlpZiAoKHRpbmZvLT5wcHJfb3B0aW9ucyAmIE1TR19FWFRfUFBSX1JUSSkgIT0gMCkgewotCQkJc2VxX3ByaW50ZihtLCAiJXMiLAotCQkJCSAgcHJpbnRlZF9vcHRpb25zID8gInxSVEkiIDogIiBSVEkiKTsKKwkJCXNlcV9wdXRzKG0sIHByaW50ZWRfb3B0aW9ucyA/ICJ8UlRJIiA6ICIgUlRJIik7CiAJCQlwcmludGVkX29wdGlvbnMrKzsKIAkJfQogCQlpZiAoKHRpbmZvLT5wcHJfb3B0aW9ucyAmIE1TR19FWFRfUFBSX1FBU19SRVEpICE9IDApIHsKLQkJCXNlcV9wcmludGYobSwgIiVzIiwKLQkJCQkgIHByaW50ZWRfb3B0aW9ucyA/ICJ8UUFTIiA6ICIgUUFTIik7CisJCQlzZXFfcHV0cyhtLCBwcmludGVkX29wdGlvbnMgPyAifFFBUyIgOiAiIFFBUyIpOwogCQkJcHJpbnRlZF9vcHRpb25zKys7CiAJCX0KIAl9CiAKIAlpZiAodGluZm8tPndpZHRoID4gMCkgewogCQlpZiAoZnJlcSAhPSAwKSB7Ci0JCQlzZXFfcHJpbnRmKG0sICIsICIpOworCQkJc2VxX3B1dHMobSwgIiwgIik7CiAJCX0gZWxzZSB7Ci0JCQlzZXFfcHJpbnRmKG0sICIgKCIpOworCQkJc2VxX3B1dHMobSwgIiAoIik7CiAJCX0KIAkJc2VxX3ByaW50ZihtLCAiJWRiaXQpIiwgOCAqICgweDAxIDw8IHRpbmZvLT53aWR0aCkpOwogCX0gZWxzZSBpZiAoZnJlcSAhPSAwKSB7Ci0JCXNlcV9wcmludGYobSwgIikiKTsKKwkJc2VxX3B1dGMobSwgJyknKTsKIAl9Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE2NywxNSArMTY1LDE1IEBACiAJdGluZm8gPSBhaGRfZmV0Y2hfdHJhbnNpbmZvKGFoZCwgY2hhbm5lbCwgb3VyX2lkLAogCQkJCSAgICB0YXJnZXRfaWQsICZ0c3RhdGUpOwogCXNlcV9wcmludGYobSwgIlRhcmdldCAlZCBOZWdvdGlhdGlvbiBTZXR0aW5nc1xuIiwgdGFyZ2V0X2lkKTsKLQlzZXFfcHJpbnRmKG0sICJcdFVzZXI6ICIpOworCXNlcV9wdXRzKG0sICJcdFVzZXI6ICIpOwogCWFoZF9mb3JtYXRfdHJhbnNpbmZvKG0sICZ0aW5mby0+dXNlcik7CiAJc3RhcmdldCA9IGFoZC0+cGxhdGZvcm1fZGF0YS0+c3RhcmdldFt0YXJnZXRfaWRdOwogCWlmIChzdGFyZ2V0ID09IE5VTEwpCiAJCXJldHVybjsKIAotCXNlcV9wcmludGYobSwgIlx0R29hbDogIik7CisJc2VxX3B1dHMobSwgIlx0R29hbDogIik7CiAJYWhkX2Zvcm1hdF90cmFuc2luZm8obSwgJnRpbmZvLT5nb2FsKTsKLQlzZXFfcHJpbnRmKG0sICJcdEN1cnI6ICIpOworCXNlcV9wdXRzKG0sICJcdEN1cnI6ICIpOwogCWFoZF9mb3JtYXRfdHJhbnNpbmZvKG0sICZ0aW5mby0+Y3Vycik7CiAKIAlmb3IgKGx1biA9IDA7IGx1biA8IEFIRF9OVU1fTFVOUzsgbHVuKyspIHsKQEAgLTI5MSwxOSArMjg5LDE5IEBACiAJbWF4X3RhcmcgPSAxNjsKIAogCWlmIChhaGQtPnNlZXBfY29uZmlnID09IE5VTEwpCi0JCXNlcV9wcmludGYobSwgIk5vIFNlcmlhbCBFRVBST01cbiIpOworCQlzZXFfcHV0cyhtLCAiTm8gU2VyaWFsIEVFUFJPTVxuIik7CiAJZWxzZSB7Ci0JCXNlcV9wcmludGYobSwgIlNlcmlhbCBFRVBST006XG4iKTsKKwkJc2VxX3B1dHMobSwgIlNlcmlhbCBFRVBST006XG4iKTsKIAkJZm9yIChpID0gMDsgaSA8IHNpemVvZigqYWhkLT5zZWVwX2NvbmZpZykvMjsgaSsrKSB7CiAJCQlpZiAoKChpICUgOCkgPT0gMCkgJiYgKGkgIT0gMCkpIHsKLQkJCQlzZXFfcHJpbnRmKG0sICJcbiIpOworCQkJCXNlcV9wdXRjKG0sICdcbicpOwogCQkJfQogCQkJc2VxX3ByaW50ZihtLCAiMHglLjR4ICIsCiAJCQkJICAoKHVpbnQxNl90KilhaGQtPnNlZXBfY29uZmlnKVtpXSk7CiAJCX0KLQkJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJfQotCXNlcV9wcmludGYobSwgIlxuIik7CisJc2VxX3B1dGMobSwgJ1xuJyk7CiAKIAlpZiAoKGFoZC0+ZmVhdHVyZXMgJiBBSERfV0lERSkgPT0gMCkKIAkJbWF4X3RhcmcgPSA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9wcm9jLmMgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3Byb2MuYwppbmRleCA2NGVlYzZjLi4xODQ1OTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3Byb2MuYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X3Byb2MuYwpAQCAtMTE5LDE1ICsxMTksMTUgQEAKIAogCWlmICh0aW5mby0+d2lkdGggPiAwKSB7CiAJCWlmIChmcmVxICE9IDApIHsKLQkJCXNlcV9wcmludGYobSwgIiwgIik7CisJCQlzZXFfcHV0cyhtLCAiLCAiKTsKIAkJfSBlbHNlIHsKLQkJCXNlcV9wcmludGYobSwgIiAoIik7CisJCQlzZXFfcHV0cyhtLCAiICgiKTsKIAkJfQogCQlzZXFfcHJpbnRmKG0sICIlZGJpdCkiLCA4ICogKDB4MDEgPDwgdGluZm8tPndpZHRoKSk7CiAJfSBlbHNlIGlmIChmcmVxICE9IDApIHsKLQkJc2VxX3ByaW50ZihtLCAiKSIpOworCQlzZXFfcHV0YyhtLCAnKScpOwogCX0KLQlzZXFfcHJpbnRmKG0sICJcbiIpOworCXNlcV9wdXRjKG0sICdcbicpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTQ1LDE1ICsxNDUsMTUgQEAKIAlpZiAoKGFoYy0+ZmVhdHVyZXMgJiBBSENfVFdJTikgIT0gMCkKIAkJc2VxX3ByaW50ZihtLCAiQ2hhbm5lbCAlYyAiLCBjaGFubmVsKTsKIAlzZXFfcHJpbnRmKG0sICJUYXJnZXQgJWQgTmVnb3RpYXRpb24gU2V0dGluZ3NcbiIsIHRhcmdldF9pZCk7Ci0Jc2VxX3ByaW50ZihtLCAiXHRVc2VyOiAiKTsKKwlzZXFfcHV0cyhtLCAiXHRVc2VyOiAiKTsKIAlhaGNfZm9ybWF0X3RyYW5zaW5mbyhtLCAmdGluZm8tPnVzZXIpOwogCXN0YXJnZXQgPSBhaGMtPnBsYXRmb3JtX2RhdGEtPnN0YXJnZXRbdGFyZ2V0X29mZnNldF07CiAJaWYgKCFzdGFyZ2V0KQogCQlyZXR1cm47CiAKLQlzZXFfcHJpbnRmKG0sICJcdEdvYWw6ICIpOworCXNlcV9wdXRzKG0sICJcdEdvYWw6ICIpOwogCWFoY19mb3JtYXRfdHJhbnNpbmZvKG0sICZ0aW5mby0+Z29hbCk7Ci0Jc2VxX3ByaW50ZihtLCAiXHRDdXJyOiAiKTsKKwlzZXFfcHV0cyhtLCAiXHRDdXJyOiAiKTsKIAlhaGNfZm9ybWF0X3RyYW5zaW5mbyhtLCAmdGluZm8tPmN1cnIpOwogCiAJZm9yIChsdW4gPSAwOyBsdW4gPCBBSENfTlVNX0xVTlM7IGx1bisrKSB7CkBAIC0zMDMsMTkgKzMwMywxOSBAQAogCiAKIAlpZiAoYWhjLT5zZWVwX2NvbmZpZyA9PSBOVUxMKQotCQlzZXFfcHJpbnRmKG0sICJObyBTZXJpYWwgRUVQUk9NXG4iKTsKKwkJc2VxX3B1dHMobSwgIk5vIFNlcmlhbCBFRVBST01cbiIpOwogCWVsc2UgewotCQlzZXFfcHJpbnRmKG0sICJTZXJpYWwgRUVQUk9NOlxuIik7CisJCXNlcV9wdXRzKG0sICJTZXJpYWwgRUVQUk9NOlxuIik7CiAJCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoKmFoYy0+c2VlcF9jb25maWcpLzI7IGkrKykgewogCQkJaWYgKCgoaSAlIDgpID09IDApICYmIChpICE9IDApKSB7Ci0JCQkJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwkJCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAkJCX0KIAkJCXNlcV9wcmludGYobSwgIjB4JS40eCAiLAogCQkJCSAgKCh1aW50MTZfdCopYWhjLT5zZWVwX2NvbmZpZylbaV0pOwogCQl9Ci0JCXNlcV9wcmludGYobSwgIlxuIik7CisJCXNlcV9wdXRjKG0sICdcbicpOwogCX0KLQlzZXFfcHJpbnRmKG0sICJcbiIpOworCXNlcV9wdXRjKG0sICdcbicpOwogCiAJbWF4X3RhcmcgPSAxNjsKIAlpZiAoKGFoYy0+ZmVhdHVyZXMgJiAoQUhDX1dJREV8QUhDX1RXSU4pKSA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuYyBiL2RyaXZlcnMvc2NzaS9hcm0vZmFzMjE2LmMKaW5kZXggZTY0YzNhZi4uZGVjZGM3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9mYXMyMTYuYworKysgYi9kcml2ZXJzL3Njc2kvYXJtL2ZhczIxNi5jCkBAIC0yOTkwLDcgKzI5OTAsNyBAQAogCXN0cnVjdCBmYXMyMTZfZGV2aWNlICpkZXY7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzY2Q7CiAKLQlzZXFfcHJpbnRmKG0sICJEZXZpY2UvTHVuIFRhZ2dlZFEgICAgICAgUGFyaXR5ICAgU3luY1xuIik7CisJc2VxX3B1dHMobSwgIkRldmljZS9MdW4gVGFnZ2VkUSAgICAgICBQYXJpdHkgICBTeW5jXG4iKTsKIAogCXNob3N0X2Zvcl9lYWNoX2RldmljZShzY2QsIGluZm8tPmhvc3QpIHsKIAkJZGV2ID0gJmluZm8tPmRldmljZVtzY2QtPmlkXTsKQEAgLTMwMDAsNyArMzAwMCw3IEBACiAJCQkJICAgICBzY2QtPnNpbXBsZV90YWdzID8gImVuIiA6ICJkaXMiLAogCQkJCSAgICAgc2NkLT5jdXJyZW50X3RhZyk7CiAJCWVsc2UKLQkJCXNlcV9wcmludGYobSwgInVuc3VwcG9ydGVkICAgIik7CisJCQlzZXFfcHV0cyhtLCAidW5zdXBwb3J0ZWQgICAiKTsKIAogCQlzZXFfcHJpbnRmKG0sICIlM3NhYmxlZCAiLCBkZXYtPnBhcml0eV9lbmFibGVkID8gImVuIiA6ICJkaXMiKTsKIApAQCAtMzAwOCw3ICszMDA4LDcgQEAKIAkJCXNlcV9wcmludGYobSwgIm9mZnNldCAlZCwgJWQgbnNcbiIsCiAJCQkJICAgICBkZXYtPnNvZiwgZGV2LT5wZXJpb2QgKiA0KTsKIAkJZWxzZQotCQkJc2VxX3ByaW50ZihtLCAiYXN5bmNcbiIpOworCQkJc2VxX3B1dHMobSwgImFzeW5jXG4iKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMgYi9kcml2ZXJzL3Njc2kvYXRhcmlfTkNSNTM4MC5jCmluZGV4IDZkYWVkNmIuLmE3MDI1NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFyaV9OQ1I1MzgwLmMKKysrIGIvZHJpdmVycy9zY3NpL2F0YXJpX05DUjUzODAuYwpAQCAtNzExLDEyICs3MTEsMTIgQEAKIAl1bnNpZ25lZCBjaGFyICpjb21tYW5kOwogCXNlcV9wcmludGYobSwgInNjc2klZDogZGVzdGluYXRpb24gdGFyZ2V0ICVkLCBsdW4gJWxsdVxuIiwKIAkJSF9OTyhjbWQpLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgY29tbWFuZCA9ICIpOworCXNlcV9wdXRzKG0sICIgICAgICAgIGNvbW1hbmQgPSAiKTsKIAljb21tYW5kID0gY21kLT5jbW5kOwogCXNlcV9wcmludGYobSwgIiUyZCAoMHglMDJ4KSIsIGNvbW1hbmRbMF0sIGNvbW1hbmRbMF0pOwogCWZvciAoaSA9IDEsIHMgPSBDT01NQU5EX1NJWkUoY29tbWFuZFswXSk7IGkgPCBzOyArK2kpCiAJCXNlcV9wcmludGYobSwgIiAlMDJ4IiwgY29tbWFuZFtpXSk7Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIH0KIAogc3RhdGljIGludCBfX21heWJlX3VudXNlZCBOQ1I1MzgwX3Nob3dfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRwODcwdS5jIGIvZHJpdmVycy9zY3NpL2F0cDg3MHUuYwppbmRleCBhNzk1ZDgxLi4wODM2NDMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYXRwODcwdS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdHA4NzB1LmMKQEAgLTMxMDEsOSArMzEwMSw4IEBACiAKIHN0YXRpYyBpbnQgYXRwODcwdV9zaG93X2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgU2NzaV9Ib3N0ICpIQkFwdHIpCiB7Ci0Jc2VxX3ByaW50ZihtLCAiQUNBUkQgQUVDLTY3MVggRHJpdmVyIFZlcnNpb246IDIuNithY1xuIik7Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKLQlzZXFfcHJpbnRmKG0sICJBZGFwdGVyIENvbmZpZ3VyYXRpb246XG4iKTsKKwlzZXFfcHV0cyhtLCAiQUNBUkQgQUVDLTY3MVggRHJpdmVyIFZlcnNpb246IDIuNithY1xuXG4iCisJCSJBZGFwdGVyIENvbmZpZ3VyYXRpb246XG4iKTsKIAlzZXFfcHJpbnRmKG0sICIgICAgICAgICAgICAgICBCYXNlIElPOiAlIy40bHhcbiIsIEhCQXB0ci0+aW9fcG9ydCk7CiAJc2VxX3ByaW50ZihtLCAiICAgICAgICAgICAgICAgICAgIElSUTogJWRcbiIsIEhCQXB0ci0+aXJxKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jaC5jIGIvZHJpdmVycy9zY3NpL2NoLmMKaW5kZXggNmJhYzhhNy4uMDA0NTc0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NoLmMKKysrIGIvZHJpdmVycy9zY3NpL2NoLmMKQEAgLTE5NCwxNiArMTk0LDEwIEBACiAKICByZXRyeToKIAllcnJubyA9IDA7Ci0JaWYgKGRlYnVnKSB7Ci0JCURQUklOVEsoImNvbW1hbmQ6ICIpOwotCQlfX3Njc2lfcHJpbnRfY29tbWFuZChjbWQsIGNtZF9sZW4pOwotCX0KLQogCXJlc3VsdCA9IHNjc2lfZXhlY3V0ZV9yZXEoY2gtPmRldmljZSwgY21kLCBkaXJlY3Rpb24sIGJ1ZmZlciwKIAkJCQkgIGJ1Zmxlbmd0aCwgJnNzaGRyLCB0aW1lb3V0ICogSFosCiAJCQkJICBNQVhfUkVUUklFUywgTlVMTCk7CiAKLQlEUFJJTlRLKCJyZXN1bHQ6IDB4JXhcbiIscmVzdWx0KTsKIAlpZiAoZHJpdmVyX2J5dGUocmVzdWx0KSAmIERSSVZFUl9TRU5TRSkgewogCQlpZiAoZGVidWcpCiAJCQlzY3NpX3ByaW50X3NlbnNlX2hkcihjaC0+ZGV2aWNlLCBjaC0+bmFtZSwgJnNzaGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYyBiL2RyaXZlcnMvc2NzaS9jb25zdGFudHMuYwppbmRleCBlMjA2OGEyLi5mYTA5ZDRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY29uc3RhbnRzLmMKKysrIGIvZHJpdmVycy9zY3NpL2NvbnN0YW50cy5jCkBAIC0xOCwxNCArMTgsMTAgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CiAKLQotCiAvKiBDb21tYW5kcyB3aXRoIHNlcnZpY2UgYWN0aW9ucyB0aGF0IGNoYW5nZSB0aGUgY29tbWFuZCBuYW1lICovCiAjZGVmaW5lIFRISVJEX1BBUlRZX0NPUFlfT1VUIDB4ODMKICNkZWZpbmUgVEhJUkRfUEFSVFlfQ09QWV9JTiAweDg0CiAKLSNkZWZpbmUgVkVORE9SX1NQRUNJRklDX0NEQiAweGMwCi0KIHN0cnVjdCBzYV9uYW1lX2xpc3QgewogCWludCBvcGNvZGU7CiAJY29uc3Qgc3RydWN0IHZhbHVlX25hbWVfcGFpciAqYXJyOwpAQCAtMzcsNyArMzMsNiBAQAogCWNvbnN0IGNoYXIgKiBuYW1lOwogfTsKIAotI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUwogc3RhdGljIGNvbnN0IGNoYXIgKiBjZGJfYnl0ZTBfbmFtZXNbXSA9IHsKIC8qIDAwLTAzICovICJUZXN0IFVuaXQgUmVhZHkiLCAiUmV6ZXJvIFVuaXQvUmV3aW5kIiwgTlVMTCwgIlJlcXVlc3QgU2Vuc2UiLAogLyogMDQtMDcgKi8gIkZvcm1hdCBVbml0L01lZGl1bSIsICJSZWFkIEJsb2NrIExpbWl0cyIsIE5VTEwsCkBAIC0yNjEsMjggKzI1Niw4IEBACiAJezAsIE5VTEwsIDB9LAogfTsKIAotI2Vsc2UgLyogaWZuZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUyAqLwotc3RhdGljIGNvbnN0IGNoYXIgKmNkYl9ieXRlMF9uYW1lc1swXTsKLQotc3RhdGljIHN0cnVjdCBzYV9uYW1lX2xpc3Qgc2FfbmFtZXNfYXJyW10gPSB7Ci0Je1ZBUklBQkxFX0xFTkdUSF9DTUQsIE5VTEwsIDB9LAotCXtNQUlOVEVOQU5DRV9JTiwgTlVMTCwgMH0sCi0Je01BSU5URU5BTkNFX09VVCwgTlVMTCwgMH0sCi0Je1BFUlNJU1RFTlRfUkVTRVJWRV9JTiwgTlVMTCwgMH0sCi0Je1BFUlNJU1RFTlRfUkVTRVJWRV9PVVQsIE5VTEwsIDB9LAotCXtTRVJWSUNFX0FDVElPTl9JTl8xMiwgTlVMTCwgMH0sCi0Je1NFUlZJQ0VfQUNUSU9OX09VVF8xMiwgTlVMTCwgMH0sCi0Je1NFUlZJQ0VfQUNUSU9OX0JJRElSRUNUSU9OQUwsIE5VTEwsIDB9LAotCXtTRVJWSUNFX0FDVElPTl9JTl8xNiwgTlVMTCwgMH0sCi0Je1NFUlZJQ0VfQUNUSU9OX09VVF8xNiwgTlVMTCwgMH0sCi0Je1RISVJEX1BBUlRZX0NPUFlfSU4sIE5VTEwsIDB9LAotCXtUSElSRF9QQVJUWV9DT1BZX09VVCwgTlVMTCwgMH0sCi0JezAsIE5VTEwsIDB9LAotfTsKLSNlbmRpZiAvKiBDT05GSUdfU0NTSV9DT05TVEFOVFMgKi8KLQotc3RhdGljIGJvb2wgc2NzaV9vcGNvZGVfc2FfbmFtZShpbnQgb3Bjb2RlLCBpbnQgc2VydmljZV9hY3Rpb24sCi0JCQkJY29uc3QgY2hhciAqKmNkYl9uYW1lLCBjb25zdCBjaGFyICoqc2FfbmFtZSkKK2Jvb2wgc2NzaV9vcGNvZGVfc2FfbmFtZShpbnQgb3Bjb2RlLCBpbnQgc2VydmljZV9hY3Rpb24sCisJCQkgY29uc3QgY2hhciAqKmNkYl9uYW1lLCBjb25zdCBjaGFyICoqc2FfbmFtZSkKIHsKIAlzdHJ1Y3Qgc2FfbmFtZV9saXN0ICpzYV9uYW1lX3B0cjsKIAljb25zdCBzdHJ1Y3QgdmFsdWVfbmFtZV9wYWlyICphcnIgPSBOVUxMOwpAQCAtMzE1LDc2ICsyOTAsNiBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBwcmludF9vcGNvZGVfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICpjZGJwLCBzaXplX3QgY2RiX2xlbikKLXsKLQlpbnQgc2EsIGNkYjA7Ci0JY29uc3QgY2hhciAqY2RiX25hbWUgPSBOVUxMLCAqc2FfbmFtZSA9IE5VTEw7Ci0KLQljZGIwID0gY2RicFswXTsKLQlpZiAoY2RiMCA9PSBWQVJJQUJMRV9MRU5HVEhfQ01EKSB7Ci0JCWlmIChjZGJfbGVuIDwgMTApIHsKLQkJCXByaW50aygic2hvcnQgdmFyaWFibGUgbGVuZ3RoIGNvbW1hbmQsIGxlbj0lenUiLAotCQkJICAgICAgIGNkYl9sZW4pOwotCQkJcmV0dXJuOwotCQl9Ci0JCXNhID0gKGNkYnBbOF0gPDwgOCkgKyBjZGJwWzldOwotCX0gZWxzZQotCQlzYSA9IGNkYnBbMV0gJiAweDFmOwotCi0JaWYgKCFzY3NpX29wY29kZV9zYV9uYW1lKGNkYjAsIHNhLCAmY2RiX25hbWUsICZzYV9uYW1lKSkgewotCQlpZiAoY2RiX25hbWUpCi0JCQlwcmludGsoIiVzIiwgY2RiX25hbWUpOwotCQllbHNlIGlmIChjZGIwID49IFZFTkRPUl9TUEVDSUZJQ19DREIpCi0JCQlwcmludGsoImNkYlswXT0weCV4ICh2ZW5kb3IpIiwgY2RiMCk7Ci0JCWVsc2UgaWYgKGNkYjAgPj0gMHg2MCAmJiBjZGIwIDwgMHg3ZSkKLQkJCXByaW50aygiY2RiWzBdPTB4JXggKHJlc2VydmVkKSIsIGNkYjApOwotCQllbHNlCi0JCQlwcmludGsoImNkYlswXT0weCV4IiwgY2RiMCk7Ci0JfSBlbHNlIHsKLQkJaWYgKHNhX25hbWUpCi0JCQlwcmludGsoIiVzIiwgc2FfbmFtZSk7Ci0JCWVsc2UgaWYgKGNkYl9uYW1lKQotCQkJcHJpbnRrKCIlcywgc2E9MHgleCIsIGNkYl9uYW1lLCBzYSk7Ci0JCWVsc2UKLQkJCXByaW50aygiY2RiWzBdPTB4JXgsIHNhPTB4JXgiLCBjZGIwLCBzYSk7Ci0JfQotfQotCi12b2lkIF9fc2NzaV9wcmludF9jb21tYW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNkYiwgc2l6ZV90IGNkYl9sZW4pCi17Ci0JaW50IGssIGxlbjsKLQotCXByaW50X29wY29kZV9uYW1lKGNkYiwgY2RiX2xlbik7Ci0JbGVuID0gc2NzaV9jb21tYW5kX3NpemUoY2RiKTsKLQlpZiAoY2RiX2xlbiA8IGxlbikKLQkJbGVuID0gY2RiX2xlbjsKLQkvKiBwcmludCBvdXQgYWxsIGJ5dGVzIGluIGNkYiAqLwotCWZvciAoayA9IDA7IGsgPCBsZW47ICsraykKLQkJcHJpbnRrKCIgJTAyeCIsIGNkYltrXSk7Ci0JcHJpbnRrKCJcbiIpOwotfQotRVhQT1JUX1NZTUJPTChfX3Njc2lfcHJpbnRfY29tbWFuZCk7Ci0KLXZvaWQgc2NzaV9wcmludF9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKLXsKLQlpbnQgazsKLQotCWlmIChjbWQtPmNtbmQgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0Jc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsICJDREI6ICIpOwotCXByaW50X29wY29kZV9uYW1lKGNtZC0+Y21uZCwgY21kLT5jbWRfbGVuKTsKLQotCS8qIHByaW50IG91dCBhbGwgYnl0ZXMgaW4gY2RiICovCi0JcHJpbnRrKCI6Iik7Ci0JZm9yIChrID0gMDsgayA8IGNtZC0+Y21kX2xlbjsgKytrKQotCQlwcmludGsoIiAlMDJ4IiwgY21kLT5jbW5kW2tdKTsKLQlwcmludGsoIlxuIik7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc2lfcHJpbnRfY29tbWFuZCk7Ci0KLSNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKLQogc3RydWN0IGVycm9yX2luZm8gewogCXVuc2lnbmVkIHNob3J0IGNvZGUxMjsJLyogMHgwMzAyIGxvb2tzIGJldHRlciB0aGFuIDB4MDMsMHgwMiAqLwogCWNvbnN0IGNoYXIgKiB0ZXh0OwpAQCAtMzkyLDcgKzI5Nyw3IEBACiAKIC8qCiAgKiBUaGUgY2Fub25pY2FsIGxpc3Qgb2YgVDEwIEFkZGl0aW9uYWwgU2Vuc2UgQ29kZXMgaXMgYXZhaWxhYmxlIGF0OgotICogaHR0cDovL3d3dy50MTAub3JnL2xpc3RzL2FzYy1udW0udHh0IFttb3N0IHJlY2VudDogMjAxMzA2MDVdCisgKiBodHRwOi8vd3d3LnQxMC5vcmcvbGlzdHMvYXNjLW51bS50eHQgW21vc3QgcmVjZW50OiAyMDE0MTIyMV0KICAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGVycm9yX2luZm8gYWRkaXRpb25hbFtdID0KQEAgLTQyMSw2ICszMjYsNyBAQAogCXsweDAwMUUsICJDb25mbGljdGluZyBTQSBjcmVhdGlvbiByZXF1ZXN0In0sCiAJezB4MDAxRiwgIkxvZ2ljYWwgdW5pdCB0cmFuc2l0aW9uaW5nIHRvIGFub3RoZXIgcG93ZXIgY29uZGl0aW9uIn0sCiAJezB4MDAyMCwgIkV4dGVuZGVkIGNvcHkgaW5mb3JtYXRpb24gYXZhaWxhYmxlIn0sCisJezB4MDAyMSwgIkF0b21pYyBjb21tYW5kIGFib3J0ZWQgZHVlIHRvIEFDQSJ9LAogCiAJezB4MDEwMCwgIk5vIGluZGV4L3NlY3RvciBzaWduYWwifSwKIApAQCAtNDQ2LDYgKzM1Miw3IEBACiAJezB4MDQwQywgIkxvZ2ljYWwgdW5pdCBub3QgYWNjZXNzaWJsZSwgdGFyZ2V0IHBvcnQgaW4gdW5hdmFpbGFibGUgIgogCSAic3RhdGUifSwKIAl7MHgwNDBELCAiTG9naWNhbCB1bml0IG5vdCByZWFkeSwgc3RydWN0dXJlIGNoZWNrIHJlcXVpcmVkIn0sCisJezB4MDQwRSwgIkxvZ2ljYWwgdW5pdCBub3QgcmVhZHksIHNlY3VyaXR5IHNlc3Npb24gaW4gcHJvZ3Jlc3MifSwKIAl7MHgwNDEwLCAiTG9naWNhbCB1bml0IG5vdCByZWFkeSwgYXV4aWxpYXJ5IG1lbW9yeSBub3QgYWNjZXNzaWJsZSJ9LAogCXsweDA0MTEsICJMb2dpY2FsIHVuaXQgbm90IHJlYWR5LCBub3RpZnkgKGVuYWJsZSBzcGludXApIHJlcXVpcmVkIn0sCiAJezB4MDQxMiwgIkxvZ2ljYWwgdW5pdCBub3QgcmVhZHksIG9mZmxpbmUifSwKQEAgLTQ2Miw2ICszNjksMTEgQEAKIAl7MHgwNDFDLCAiTG9naWNhbCB1bml0IG5vdCByZWFkeSwgYWRkaXRpb25hbCBwb3dlciB1c2Ugbm90IHlldCAiCiAJICJncmFudGVkIn0sCiAJezB4MDQxRCwgIkxvZ2ljYWwgdW5pdCBub3QgcmVhZHksIGNvbmZpZ3VyYXRpb24gaW4gcHJvZ3Jlc3MifSwKKwl7MHgwNDFFLCAiTG9naWNhbCB1bml0IG5vdCByZWFkeSwgbWljcm9jb2RlIGFjdGl2YXRpb24gcmVxdWlyZWQifSwKKwl7MHgwNDFGLCAiTG9naWNhbCB1bml0IG5vdCByZWFkeSwgbWljcm9jb2RlIGRvd25sb2FkIHJlcXVpcmVkIn0sCisJezB4MDQyMCwgIkxvZ2ljYWwgdW5pdCBub3QgcmVhZHksIGxvZ2ljYWwgdW5pdCByZXNldCByZXF1aXJlZCJ9LAorCXsweDA0MjEsICJMb2dpY2FsIHVuaXQgbm90IHJlYWR5LCBoYXJkIHJlc2V0IHJlcXVpcmVkIn0sCisJezB4MDQyMiwgIkxvZ2ljYWwgdW5pdCBub3QgcmVhZHksIHBvd2VyIGN5Y2xlIHJlcXVpcmVkIn0sCiAKIAl7MHgwNTAwLCAiTG9naWNhbCB1bml0IGRvZXMgbm90IHJlc3BvbmQgdG8gc2VsZWN0aW9uIn0sCiAKQEAgLTQ4MCw2ICszOTIsNyBAQAogCXsweDA5MDIsICJGb2N1cyBzZXJ2byBmYWlsdXJlIn0sCiAJezB4MDkwMywgIlNwaW5kbGUgc2Vydm8gZmFpbHVyZSJ9LAogCXsweDA5MDQsICJIZWFkIHNlbGVjdCBmYXVsdCJ9LAorCXsweDA5MDUsICJWaWJyYXRpb24gaW5kdWNlZCB0cmFja2luZyBlcnJvciJ9LAogCiAJezB4MEEwMCwgIkVycm9yIGxvZyBvdmVyZmxvdyJ9LAogCkBAIC01MTAsNiArNDIzLDcgQEAKIAl7MHgwQzBELCAiV3JpdGUgZXJyb3IgLSBub3QgZW5vdWdoIHVuc29saWNpdGVkIGRhdGEifSwKIAl7MHgwQzBFLCAiTXVsdGlwbGUgd3JpdGUgZXJyb3JzIn0sCiAJezB4MEMwRiwgIkRlZmVjdHMgaW4gZXJyb3Igd2luZG93In0sCisJezB4MEMxMCwgIkluY29tcGxldGUgbXVsdGlwbGUgYXRvbWljIHdyaXRlIG9wZXJhdGlvbnMifSwKIAogCXsweDBEMDAsICJFcnJvciBkZXRlY3RlZCBieSB0aGlyZCBwYXJ0eSB0ZW1wb3JhcnkgaW5pdGlhdG9yIn0sCiAJezB4MEQwMSwgIlRoaXJkIHBhcnR5IGRldmljZSBmYWlsdXJlIn0sCkBAIC02MzUsNiArNTQ5LDEwIEBACiAJezB4MjEwMSwgIkludmFsaWQgZWxlbWVudCBhZGRyZXNzIn0sCiAJezB4MjEwMiwgIkludmFsaWQgYWRkcmVzcyBmb3Igd3JpdGUifSwKIAl7MHgyMTAzLCAiSW52YWxpZCB3cml0ZSBjcm9zc2luZyBsYXllciBqdW1wIn0sCisJezB4MjEwNCwgIlVuYWxpZ25lZCB3cml0ZSBjb21tYW5kIn0sCisJezB4MjEwNSwgIldyaXRlIGJvdW5kYXJ5IHZpb2xhdGlvbiJ9LAorCXsweDIxMDYsICJBdHRlbXB0IHRvIHJlYWQgaW52YWxpZCBkYXRhIn0sCisJezB4MjEwNywgIlJlYWQgYm91bmRhcnkgdmlvbGF0aW9uIn0sCiAKIAl7MHgyMjAwLCAiSWxsZWdhbCBmdW5jdGlvbiAodXNlIDIwIDAwLCAyNCAwMCwgb3IgMjYgMDApIn0sCiAKQEAgLTY5MSw2ICs2MDksNyBAQAogCXsweDI3MDUsICJQZXJtYW5lbnQgd3JpdGUgcHJvdGVjdCJ9LAogCXsweDI3MDYsICJDb25kaXRpb25hbCB3cml0ZSBwcm90ZWN0In0sCiAJezB4MjcwNywgIlNwYWNlIGFsbG9jYXRpb24gZmFpbGVkIHdyaXRlIHByb3RlY3QifSwKKwl7MHgyNzA4LCAiWm9uZSBpcyByZWFkIG9ubHkifSwKIAogCXsweDI4MDAsICJOb3QgcmVhZHkgdG8gcmVhZHkgY2hhbmdlLCBtZWRpdW0gbWF5IGhhdmUgY2hhbmdlZCJ9LAogCXsweDI4MDEsICJJbXBvcnQgb3IgZXhwb3J0IGVsZW1lbnQgYWNjZXNzZWQifSwKQEAgLTc0MywxMCArNjYyLDE1IEBACiAJezB4MkMwQSwgIlBhcnRpdGlvbiBvciBjb2xsZWN0aW9uIGNvbnRhaW5zIHVzZXIgb2JqZWN0cyJ9LAogCXsweDJDMEIsICJOb3QgcmVzZXJ2ZWQifSwKIAl7MHgyQzBDLCAiT3J3cml0ZSBnZW5lcmF0aW9uIGRvZXMgbm90IG1hdGNoIn0sCisJezB4MkMwRCwgIlJlc2V0IHdyaXRlIHBvaW50ZXIgbm90IGFsbG93ZWQifSwKKwl7MHgyQzBFLCAiWm9uZSBpcyBvZmZsaW5lIn0sCiAKIAl7MHgyRDAwLCAiT3ZlcndyaXRlIGVycm9yIG9uIHVwZGF0ZSBpbiBwbGFjZSJ9LAogCiAJezB4MkUwMCwgIkluc3VmZmljaWVudCB0aW1lIGZvciBvcGVyYXRpb24ifSwKKwl7MHgyRTAxLCAiQ29tbWFuZCB0aW1lb3V0IGJlZm9yZSBwcm9jZXNzaW5nIn0sCisJezB4MkUwMiwgIkNvbW1hbmQgdGltZW91dCBkdXJpbmcgcHJvY2Vzc2luZyJ9LAorCXsweDJFMDMsICJDb21tYW5kIHRpbWVvdXQgZHVyaW5nIHByb2Nlc3NpbmcgZHVlIHRvIGVycm9yIHJlY292ZXJ5In0sCiAKIAl7MHgyRjAwLCAiQ29tbWFuZHMgY2xlYXJlZCBieSBhbm90aGVyIGluaXRpYXRvciJ9LAogCXsweDJGMDEsICJDb21tYW5kcyBjbGVhcmVkIGJ5IHBvd2VyIGxvc3Mgbm90aWZpY2F0aW9uIn0sCkBAIC04NjgsNiArNzkyLDcgQEAKIAl7MHgzRjEzLCAiaVNDU0kgSVAgYWRkcmVzcyByZW1vdmVkIn0sCiAJezB4M0YxNCwgImlTQ1NJIElQIGFkZHJlc3MgY2hhbmdlZCJ9LAogCXsweDNGMTUsICJJbnNwZWN0IHJlZmVycmFscyBzZW5zZSBkZXNjcmlwdG9ycyJ9LAorCXsweDNGMTYsICJNaWNyb2NvZGUgaGFzIGJlZW4gY2hhbmdlZCB3aXRob3V0IHJlc2V0In0sCiAvKgogICoJezB4NDBOTiwgIlJhbSBmYWlsdXJlIn0sCiAgKgl7MHg0ME5OLCAiRGlhZ25vc3RpYyBmYWlsdXJlIG9uIGNvbXBvbmVudCBubiJ9LApAQCAtOTQ2LDYgKzg3MSwxMSBAQAogCXsweDUzMDYsICJWb2x1bWUgaWRlbnRpZmllciBtaXNzaW5nIn0sCiAJezB4NTMwNywgIkR1cGxpY2F0ZSB2b2x1bWUgaWRlbnRpZmllciJ9LAogCXsweDUzMDgsICJFbGVtZW50IHN0YXR1cyB1bmtub3duIn0sCisJezB4NTMwOSwgIkRhdGEgdHJhbnNmZXIgZGV2aWNlIGVycm9yIC0gbG9hZCBmYWlsZWQifSwKKwl7MHg1MzBhLCAiRGF0YSB0cmFuc2ZlciBkZXZpY2UgZXJyb3IgLSB1bmxvYWQgZmFpbGVkIn0sCisJezB4NTMwYiwgIkRhdGEgdHJhbnNmZXIgZGV2aWNlIGVycm9yIC0gdW5sb2FkIG1pc3NpbmcifSwKKwl7MHg1MzBjLCAiRGF0YSB0cmFuc2ZlciBkZXZpY2UgZXJyb3IgLSBlamVjdCBmYWlsZWQifSwKKwl7MHg1MzBkLCAiRGF0YSB0cmFuc2ZlciBkZXZpY2UgZXJyb3IgLSBsaWJyYXJ5IGNvbW11bmljYXRpb24gZmFpbGVkIn0sCiAKIAl7MHg1NDAwLCAiU2NzaSB0byBob3N0IHN5c3RlbSBpbnRlcmZhY2UgZmFpbHVyZSJ9LAogCkBAIC05NjMsNiArODkzLDcgQEAKIAl7MHg1NTBCLCAiSW5zdWZmaWNpZW50IHBvd2VyIGZvciBvcGVyYXRpb24ifSwKIAl7MHg1NTBDLCAiSW5zdWZmaWNpZW50IHJlc291cmNlcyB0byBjcmVhdGUgcm9kIn0sCiAJezB4NTUwRCwgIkluc3VmZmljaWVudCByZXNvdXJjZXMgdG8gY3JlYXRlIHJvZCB0b2tlbiJ9LAorCXsweDU1MEUsICJJbnN1ZmZpY2llbnQgem9uZSByZXNvdXJjZXMifSwKIAogCXsweDU3MDAsICJVbmFibGUgdG8gcmVjb3ZlciB0YWJsZS1vZi1jb250ZW50cyJ9LAogCkBAIC0xMjQ3LDE1ICsxMTc4LDEyIEBACiAJIkNvbXBsZXRlZCIsCSAgICAvKiBGOiBjb21tYW5kIGNvbXBsZXRlZCBzZW5zZSBkYXRhIHJlcG9ydGVkLAogCQkJCSAgbWF5IG9jY3VyIGZvciBzdWNjZXNzZnVsIGNvbW1hbmQgKi8KIH07Ci0jZW5kaWYKIAogLyogR2V0IHNlbnNlIGtleSBzdHJpbmcgb3IgTlVMTCBpZiBub3QgYXZhaWxhYmxlICovCiBjb25zdCBjaGFyICoKIHNjc2lfc2Vuc2Vfa2V5X3N0cmluZyh1bnNpZ25lZCBjaGFyIGtleSkgewotI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUwogCWlmIChrZXkgPD0gMHhFKQogCQlyZXR1cm4gc25zdGV4dFtrZXldOwotI2VuZGlmCiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfc2Vuc2Vfa2V5X3N0cmluZyk7CkBAIC0xMjY3LDcgKzExOTUsNiBAQAogY29uc3QgY2hhciAqCiBzY3NpX2V4dGRfc2Vuc2VfZm9ybWF0KHVuc2lnbmVkIGNoYXIgYXNjLCB1bnNpZ25lZCBjaGFyIGFzY3EsIGNvbnN0IGNoYXIgKipmbXQpCiB7Ci0jaWZkZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTCiAJaW50IGk7CiAJdW5zaWduZWQgc2hvcnQgY29kZSA9ICgoYXNjIDw8IDgpIHwgYXNjcSk7CiAKQEAgLTEyODMsMTIyICsxMjEwLDEwIEBACiAJCQlyZXR1cm4gYWRkaXRpb25hbDJbaV0uc3RyOwogCQl9CiAJfQotI2Vsc2UKLQkqZm10ID0gTlVMTDsKLSNlbmRpZgogCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChzY3NpX2V4dGRfc2Vuc2VfZm9ybWF0KTsKIAotdm9pZAotc2NzaV9zaG93X2V4dGRfc2Vuc2UoY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBjb25zdCBjaGFyICpuYW1lLAotCQkgICAgIHVuc2lnbmVkIGNoYXIgYXNjLCB1bnNpZ25lZCBjaGFyIGFzY3EpCi17Ci0JY29uc3QgY2hhciAqZXh0ZF9zZW5zZV9mbXQgPSBOVUxMOwotCWNvbnN0IGNoYXIgKmV4dGRfc2Vuc2Vfc3RyID0gc2NzaV9leHRkX3NlbnNlX2Zvcm1hdChhc2MsIGFzY3EsCi0JCQkJCQkJICAgICZleHRkX3NlbnNlX2ZtdCk7Ci0KLQlpZiAoZXh0ZF9zZW5zZV9zdHIpIHsKLQkJaWYgKGV4dGRfc2Vuc2VfZm10KQotCQkJc2Rldl9wcmVmaXhfcHJpbnRrKEtFUk5fSU5GTywgc2RldiwgbmFtZSwKLQkJCQkJICAgIkFkZC4gU2Vuc2U6ICVzICglcyV4KSIsCi0JCQkJCSAgIGV4dGRfc2Vuc2Vfc3RyLCBleHRkX3NlbnNlX2ZtdCwKLQkJCQkJICAgYXNjcSk7Ci0JCWVsc2UKLQkJCXNkZXZfcHJlZml4X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIG5hbWUsCi0JCQkJCSAgICJBZGQuIFNlbnNlOiAlcyIsIGV4dGRfc2Vuc2Vfc3RyKTsKLQotCX0gZWxzZSB7Ci0JCXNkZXZfcHJlZml4X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIG5hbWUsCi0JCQkJICAgIiVzQVNDPTB4JXggJXNBU0NRPTB4JXhcbiIsCi0JCQkJICAgYXNjID49IDB4ODAgPyAiPDx2ZW5kb3I+PiAiIDogIiIsIGFzYywKLQkJCQkgICBhc2NxID49IDB4ODAgPyAiPDx2ZW5kb3I+PiAiIDogIiIsIGFzY3EpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woc2NzaV9zaG93X2V4dGRfc2Vuc2UpOwotCi12b2lkCi1zY3NpX3Nob3dfc2Vuc2VfaGRyKGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgY29uc3QgY2hhciAqbmFtZSwKLQkJICAgIGNvbnN0IHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCi17Ci0JY29uc3QgY2hhciAqc2Vuc2VfdHh0OwotCi0Jc2Vuc2VfdHh0ID0gc2NzaV9zZW5zZV9rZXlfc3RyaW5nKHNzaGRyLT5zZW5zZV9rZXkpOwotCWlmIChzZW5zZV90eHQpCi0JCXNkZXZfcHJlZml4X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIG5hbWUsCi0JCQkJICAgIlNlbnNlIEtleSA6ICVzIFslc10lc1xuIiwgc2Vuc2VfdHh0LAotCQkJCSAgIHNjc2lfc2Vuc2VfaXNfZGVmZXJyZWQoc3NoZHIpID8KLQkJCQkgICAiZGVmZXJyZWQiIDogImN1cnJlbnQiLAotCQkJCSAgIHNzaGRyLT5yZXNwb25zZV9jb2RlID49IDB4NzIgPwotCQkJCSAgICIgW2Rlc2NyaXB0b3JdIiA6ICIiKTsKLQllbHNlCi0JCXNkZXZfcHJlZml4X3ByaW50ayhLRVJOX0lORk8sIHNkZXYsIG5hbWUsCi0JCQkJICAgIlNlbnNlIEtleSA6IDB4JXggWyVzXSVzIiwgc3NoZHItPnNlbnNlX2tleSwKLQkJCQkgICBzY3NpX3NlbnNlX2lzX2RlZmVycmVkKHNzaGRyKSA/Ci0JCQkJICAgImRlZmVycmVkIiA6ICJjdXJyZW50IiwKLQkJCQkgICBzc2hkci0+cmVzcG9uc2VfY29kZSA+PSAweDcyID8KLQkJCQkgICAiIFtkZXNjcmlwdG9yXSIgOiAiIik7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc2lfc2hvd19zZW5zZV9oZHIpOwotCi0vKgotICogUHJpbnQgbm9ybWFsaXplZCBTQ1NJIHNlbnNlIGhlYWRlciB3aXRoIGEgcHJlZml4LgotICovCi12b2lkCi1zY3NpX3ByaW50X3NlbnNlX2hkcihjb25zdCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgY29uc3Qgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKLXsKLQlzY3NpX3Nob3dfc2Vuc2VfaGRyKHNkZXYsIG5hbWUsIHNzaGRyKTsKLQlzY3NpX3Nob3dfZXh0ZF9zZW5zZShzZGV2LCBuYW1lLCBzc2hkci0+YXNjLCBzc2hkci0+YXNjcSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHNjc2lfcHJpbnRfc2Vuc2VfaGRyKTsKLQotc3RhdGljIHZvaWQKLXNjc2lfZHVtcF9zZW5zZV9idWZmZXIoY29uc3QgdW5zaWduZWQgY2hhciAqc2Vuc2VfYnVmZmVyLCBpbnQgc2Vuc2VfbGVuKQotewotCWludCBrLCBudW07Ci0KLQludW0gPSAoc2Vuc2VfbGVuIDwgMzIpID8gc2Vuc2VfbGVuIDogMzI7Ci0JcHJpbnRrKCJVbnJlY29nbml6ZWQgc2Vuc2UgZGF0YSAoaW4gaGV4KToiKTsKLQlmb3IgKGsgPSAwOyBrIDwgbnVtOyArK2spIHsKLQkJaWYgKDAgPT0gKGsgJSAxNikpIHsKLQkJCXByaW50aygiXG4iKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIiAgICAgICAgIik7Ci0JCX0KLQkJcHJpbnRrKCIlMDJ4ICIsIHNlbnNlX2J1ZmZlcltrXSk7Ci0JfQotCXByaW50aygiXG4iKTsKLQlyZXR1cm47Ci19Ci0KLS8qIE5vcm1hbGl6ZSBhbmQgcHJpbnQgc2Vuc2UgYnVmZmVyIHdpdGggbmFtZSBwcmVmaXggKi8KLXZvaWQgX19zY3NpX3ByaW50X3NlbnNlKGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgY29uc3QgY2hhciAqbmFtZSwKLQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlbnNlX2J1ZmZlciwgaW50IHNlbnNlX2xlbikKLXsKLQlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc3NoZHI7Ci0KLQlpZiAoIXNjc2lfbm9ybWFsaXplX3NlbnNlKHNlbnNlX2J1ZmZlciwgc2Vuc2VfbGVuLCAmc3NoZHIpKSB7Ci0JCXNjc2lfZHVtcF9zZW5zZV9idWZmZXIoc2Vuc2VfYnVmZmVyLCBzZW5zZV9sZW4pOwotCQlyZXR1cm47Ci0JfQotCXNjc2lfc2hvd19zZW5zZV9oZHIoc2RldiwgbmFtZSwgJnNzaGRyKTsKLQlzY3NpX3Nob3dfZXh0ZF9zZW5zZShzZGV2LCBuYW1lLCBzc2hkci5hc2MsIHNzaGRyLmFzY3EpOwotfQotRVhQT1JUX1NZTUJPTChfX3Njc2lfcHJpbnRfc2Vuc2UpOwotCi0vKiBOb3JtYWxpemUgYW5kIHByaW50IHNlbnNlIGJ1ZmZlciBpbiBTQ1NJIGNvbW1hbmQgKi8KLXZvaWQgc2NzaV9wcmludF9zZW5zZShjb25zdCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpCi17Ci0Jc3RydWN0IGdlbmRpc2sgKmRpc2sgPSBjbWQtPnJlcXVlc3QtPnJxX2Rpc2s7Ci0JY29uc3QgY2hhciAqZGlza19uYW1lID0gZGlzayA/IGRpc2stPmRpc2tfbmFtZSA6IE5VTEw7Ci0KLQlfX3Njc2lfcHJpbnRfc2Vuc2UoY21kLT5kZXZpY2UsIGRpc2tfbmFtZSwgY21kLT5zZW5zZV9idWZmZXIsCi0JCQkgICBTQ1NJX1NFTlNFX0JVRkZFUlNJWkUpOwotfQotRVhQT1JUX1NZTUJPTChzY3NpX3ByaW50X3NlbnNlKTsKLQotI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUwotCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGhvc3RieXRlX3RhYmxlW109ewogIkRJRF9PSyIsICJESURfTk9fQ09OTkVDVCIsICJESURfQlVTX0JVU1kiLCAiRElEX1RJTUVfT1VUIiwgIkRJRF9CQURfVEFSR0VUIiwKICJESURfQUJPUlQiLCAiRElEX1BBUklUWSIsICJESURfRVJST1IiLCAiRElEX1JFU0VUIiwgIkRJRF9CQURfSU5UUiIsCkBAIC0xNDEwLDE3ICsxMjI1LDEzIEBACiAiRFJJVkVSX09LIiwgIkRSSVZFUl9CVVNZIiwgIkRSSVZFUl9TT0ZUIiwgICJEUklWRVJfTUVESUEiLCAiRFJJVkVSX0VSUk9SIiwKICJEUklWRVJfSU5WQUxJRCIsICJEUklWRVJfVElNRU9VVCIsICJEUklWRVJfSEFSRCIsICJEUklWRVJfU0VOU0UifTsKIAotI2VuZGlmCi0KIGNvbnN0IGNoYXIgKnNjc2lfaG9zdGJ5dGVfc3RyaW5nKGludCByZXN1bHQpCiB7CiAJY29uc3QgY2hhciAqaGJfc3RyaW5nID0gTlVMTDsKLSNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKIAlpbnQgaGIgPSBob3N0X2J5dGUocmVzdWx0KTsKIAogCWlmIChoYiA8IEFSUkFZX1NJWkUoaG9zdGJ5dGVfdGFibGUpKQogCQloYl9zdHJpbmcgPSBob3N0Ynl0ZV90YWJsZVtoYl07Ci0jZW5kaWYKIAlyZXR1cm4gaGJfc3RyaW5nOwogfQogRVhQT1JUX1NZTUJPTChzY3NpX2hvc3RieXRlX3N0cmluZyk7CkBAIC0xNDI4LDE3ICsxMjM5LDE0IEBACiBjb25zdCBjaGFyICpzY3NpX2RyaXZlcmJ5dGVfc3RyaW5nKGludCByZXN1bHQpCiB7CiAJY29uc3QgY2hhciAqZGJfc3RyaW5nID0gTlVMTDsKLSNpZmRlZiBDT05GSUdfU0NTSV9DT05TVEFOVFMKIAlpbnQgZGIgPSBkcml2ZXJfYnl0ZShyZXN1bHQpOwogCiAJaWYgKGRiIDwgQVJSQVlfU0laRShkcml2ZXJieXRlX3RhYmxlKSkKIAkJZGJfc3RyaW5nID0gZHJpdmVyYnl0ZV90YWJsZVtkYl07Ci0jZW5kaWYKIAlyZXR1cm4gZGJfc3RyaW5nOwogfQogRVhQT1JUX1NZTUJPTChzY3NpX2RyaXZlcmJ5dGVfc3RyaW5nKTsKIAotI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUwogI2RlZmluZSBzY3NpX21scmV0dXJuX25hbWUocmVzdWx0KQl7IHJlc3VsdCwgI3Jlc3VsdCB9CiBzdGF0aWMgY29uc3Qgc3RydWN0IHZhbHVlX25hbWVfcGFpciBzY3NpX21scmV0dXJuX2FycltdID0gewogCXNjc2lfbWxyZXR1cm5fbmFtZShORUVEU19SRVRSWSksCkBAIC0xNDUxLDExICsxMjU5LDkgQEAKIAlzY3NpX21scmV0dXJuX25hbWUoU0NTSV9SRVRVUk5fTk9UX0hBTkRMRUQpLAogCXNjc2lfbWxyZXR1cm5fbmFtZShGQVNUX0lPX0ZBSUwpCiB9OwotI2VuZGlmCiAKIGNvbnN0IGNoYXIgKnNjc2lfbWxyZXR1cm5fc3RyaW5nKGludCByZXN1bHQpCiB7Ci0jaWZkZWYgQ09ORklHX1NDU0lfQ09OU1RBTlRTCiAJY29uc3Qgc3RydWN0IHZhbHVlX25hbWVfcGFpciAqYXJyID0gc2NzaV9tbHJldHVybl9hcnI7CiAJaW50IGs7CiAKQEAgLTE0NjMsMjkgKzEyNjksNiBAQAogCQlpZiAocmVzdWx0ID09IGFyci0+dmFsdWUpCiAJCQlyZXR1cm4gYXJyLT5uYW1lOwogCX0KLSNlbmRpZgogCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChzY3NpX21scmV0dXJuX3N0cmluZyk7Ci0KLXZvaWQgc2NzaV9wcmludF9yZXN1bHQoc3RydWN0IHNjc2lfY21uZCAqY21kLCBjb25zdCBjaGFyICptc2csIGludCBkaXNwb3NpdGlvbikKLXsKLQljb25zdCBjaGFyICptbHJldF9zdHJpbmcgPSBzY3NpX21scmV0dXJuX3N0cmluZyhkaXNwb3NpdGlvbik7Ci0JY29uc3QgY2hhciAqaGJfc3RyaW5nID0gc2NzaV9ob3N0Ynl0ZV9zdHJpbmcoY21kLT5yZXN1bHQpOwotCWNvbnN0IGNoYXIgKmRiX3N0cmluZyA9IHNjc2lfZHJpdmVyYnl0ZV9zdHJpbmcoY21kLT5yZXN1bHQpOwotCi0JaWYgKGhiX3N0cmluZyB8fCBkYl9zdHJpbmcpCi0JCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAotCQkJICAgICIlcyVzIFJlc3VsdDogaG9zdGJ5dGU9JXMgZHJpdmVyYnl0ZT0lcyIsCi0JCQkgICAgbXNnID8gbXNnIDogIiIsCi0JCQkgICAgbWxyZXRfc3RyaW5nID8gbWxyZXRfc3RyaW5nIDogIlVOS05PV04iLAotCQkJICAgIGhiX3N0cmluZyA/IGhiX3N0cmluZyA6ICJpbnZhbGlkIiwKLQkJCSAgICBkYl9zdHJpbmcgPyBkYl9zdHJpbmcgOiAiaW52YWxpZCIpOwotCWVsc2UKLQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBjbWQsCi0JCQkgICAgIiVzJXMgUmVzdWx0OiBob3N0Ynl0ZT0weCUwMnggZHJpdmVyYnl0ZT0weCUwMngiLAotCQkJICAgIG1zZyA/IG1zZyA6ICIiLAotCQkJICAgIG1scmV0X3N0cmluZyA/IG1scmV0X3N0cmluZyA6ICJVTktOT1dOIiwKLQkJCSAgICBob3N0X2J5dGUoY21kLT5yZXN1bHQpLCBkcml2ZXJfYnl0ZShjbWQtPnJlc3VsdCkpOwotfQotRVhQT1JUX1NZTUJPTChzY3NpX3ByaW50X3Jlc3VsdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvTWFrZWZpbGUKaW5kZXggOTEzYjlhOS4uMzY4MWEzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NzaW9zdG9yL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9NYWtlZmlsZQpAQCAtOCw1ICs4LDUgQEAKIG9iai0kKENPTkZJR19TQ1NJX0NIRUxTSU9fRkNPRSkgKz0gY3Npb3N0b3IubwogCiBjc2lvc3Rvci1vYmpzIDo9IGNzaW9fYXR0ci5vIGNzaW9faW5pdC5vIGNzaW9fbG5vZGUubyBjc2lvX3Njc2kubyBcCi0JCWNzaW9faHcubyBjc2lvX2h3X3Q0Lm8gY3Npb19od190NS5vIGNzaW9faXNyLm8gXAorCQljc2lvX2h3Lm8gY3Npb19od190NS5vIGNzaW9faXNyLm8gXAogCQljc2lvX21iLm8gY3Npb19ybm9kZS5vIGNzaW9fd3IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9faHcuYyBiL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX2h3LmMKaW5kZXggOWFiOTk3ZS4uMmU2NmYzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9faHcuYworKysgYi9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19ody5jCkBAIC02MCwzNyArNjAsMTAgQEAKIHN0YXRpYyBpbnQgZGV2X251bTsKIAogLyogRkNvRSBBZGFwdGVyIHR5cGVzICYgaXRzIGRlc2NyaXB0aW9uICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNzaW9fYWRhcF9kZXNjIGNzaW9fdDRfZmNvZV9hZGFwdGVyc1tdID0gewotCXsiVDQ0MC1EYmcgMTBHIiwgIkNoZWxzaW8gVDQ0MC1EYmcgMTBHIFtGQ29FXSJ9LAotCXsiVDQyMC1DUiAxMEciLCAiQ2hlbHNpbyBUNDIwLUNSIDEwRyBbRkNvRV0ifSwKLQl7IlQ0MjItQ1IgMTBHLzFHIiwgIkNoZWxzaW8gVDQyMi1DUiAxMEcvMUcgW0ZDb0VdIn0sCi0JeyJUNDQwLUNSIDEwRyIsICJDaGVsc2lvIFQ0NDAtQ1IgMTBHIFtGQ29FXSJ9LAotCXsiVDQyMC1CQ0ggMTBHIiwgIkNoZWxzaW8gVDQyMC1CQ0ggMTBHIFtGQ29FXSJ9LAotCXsiVDQ0MC1CQ0ggMTBHIiwgIkNoZWxzaW8gVDQ0MC1CQ0ggMTBHIFtGQ29FXSJ9LAotCXsiVDQ0MC1DSCAxMEciLCAiQ2hlbHNpbyBUNDQwLUNIIDEwRyBbRkNvRV0ifSwKLQl7IlQ0MjAtU08gMTBHIiwgIkNoZWxzaW8gVDQyMC1TTyAxMEcgW0ZDb0VdIn0sCi0JeyJUNDIwLUNYNCAxMEciLCAiQ2hlbHNpbyBUNDIwLUNYNCAxMEcgW0ZDb0VdIn0sCi0JeyJUNDIwLUJUIDEwRyIsICJDaGVsc2lvIFQ0MjAtQlQgMTBHIFtGQ29FXSJ9LAotCXsiVDQwNC1CVCAxRyIsICJDaGVsc2lvIFQ0MDQtQlQgMUcgW0ZDb0VdIn0sCi0JeyJCNDIwLVNSIDEwRyIsICJDaGVsc2lvIEI0MjAtU1IgMTBHIFtGQ29FXSJ9LAotCXsiQjQwNC1CVCAxRyIsICJDaGVsc2lvIEI0MDQtQlQgMUcgW0ZDb0VdIn0sCi0JeyJUNDgwLUNSIDEwRyIsICJDaGVsc2lvIFQ0ODAtQ1IgMTBHIFtGQ29FXSJ9LAotCXsiVDQ0MC1MUC1DUiAxMEciLCAiQ2hlbHNpbyBUNDQwLUxQLUNSIDEwRyBbRkNvRV0ifSwKLQl7IkFNU1RFUkRBTSAxMEciLCAiQ2hlbHNpbyBBTVNURVJEQU0gMTBHIFtGQ29FXSJ9LAotCXsiSFVBV0VJIFQ0ODAgMTBHIiwgIkNoZWxzaW8gSFVBV0VJIFQ0ODAgMTBHIFtGQ29FXSJ9LAotCXsiSFVBV0VJIFQ0NDAgMTBHIiwgIkNoZWxzaW8gSFVBV0VJIFQ0NDAgMTBHIFtGQ29FXSJ9LAotCXsiSFVBV0VJIFNURyAxMEciLCAiQ2hlbHNpbyBIVUFXRUkgU1RHIDEwRyBbRkNvRV0ifSwKLQl7IkFDUk9NQUcgWEFVSSAxMEciLCAiQ2hlbHNpbyBBQ1JPTUFHIFhBVUkgMTBHIFtGQ29FXSJ9LAotCXsiQUNST01BRyBTRlArIDEwRyIsICJDaGVsc2lvIEFDUk9NQUcgU0ZQKyAxMEcgW0ZDb0VdIn0sCi0JeyJRVUFOVEEgU0ZQKyAxMEciLCAiQ2hlbHNpbyBRVUFOVEEgU0ZQKyAxMEcgW0ZDb0VdIn0sCi0JeyJIVUFXRUkgMTBHYmFzZS1UIiwgIkNoZWxzaW8gSFVBV0VJIDEwR2Jhc2UtVCBbRkNvRV0ifSwKLQl7IkhVQVdFSSBUNFRPRSAxMEciLCAiQ2hlbHNpbyBIVUFXRUkgVDRUT0UgMTBHIFtGQ29FXSJ9Ci19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNzaW9fYWRhcF9kZXNjIGNzaW9fdDVfZmNvZV9hZGFwdGVyc1tdID0gewogCXsiVDU4MC1EYmcgMTBHIiwgIkNoZWxzaW8gVDU4MC1EYmcgMTBHIFtGQ29FXSJ9LAogCXsiVDUyMC1DUiAxMEciLCAiQ2hlbHNpbyBUNTIwLUNSIDEwRyBbRkNvRV0ifSwKLQl7IlQ1MjItQ1IgMTBHLzFHIiwgIkNoZWxzaW8gVDQ1Mi1DUiAxMEcvMUcgW0ZDb0VdIn0sCisJeyJUNTIyLUNSIDEwRy8xRyIsICJDaGVsc2lvIFQ1MjItQ1IgMTBHLzFHIFtGQ29FXSJ9LAogCXsiVDU0MC1DUiAxMEciLCAiQ2hlbHNpbyBUNTQwLUNSIDEwRyBbRkNvRV0ifSwKIAl7IlQ1MjAtQkNIIDEwRyIsICJDaGVsc2lvIFQ1MjAtQkNIIDEwRyBbRkNvRV0ifSwKIAl7IlQ1NDAtQkNIIDEwRyIsICJDaGVsc2lvIFQ1NDAtQkNIIDEwRyBbRkNvRV0ifSwKQEAgLTEwNyw3ICs4MCw5IEBACiAJeyJUNTgwLUxQLUNSIDQwRyIsICJDaGVsc2lvIFQ1ODAtTFAtQ1IgNDBHIFtGQ29FXSJ9LAogCXsiVDUyMC1MTC1DUiAxMEciLCAiQ2hlbHNpbyBUNTIwLUxMLUNSIDEwRyBbRkNvRV0ifSwKIAl7IlQ1NjAtQ1IgNDBHIiwgIkNoZWxzaW8gVDU2MC1DUiA0MEcgW0ZDb0VdIn0sCi0JeyJUNTgwLUNSIDQwRyIsICJDaGVsc2lvIFQ1ODAtQ1IgNDBHIFtGQ29FXSJ9CisJeyJUNTgwLUNSIDQwRyIsICJDaGVsc2lvIFQ1ODAtQ1IgNDBHIFtGQ29FXSJ9LAorCXsiVDU4MC1TTyA0MEciLCAiQ2hlbHNpbyBUNTgwLVNPIDQwRyBbRkNvRV0ifSwKKwl7IlQ1MDItQlQgMUciLCAiQ2hlbHNpbyBUNTAyLUJUIDFHIFtGQ29FXSJ9CiB9OwogCiBzdGF0aWMgdm9pZCBjc2lvX21nbXRtX2NsZWFudXAoc3RydWN0IGNzaW9fbWdtdG0gKik7CkBAIC0xODgsOSArMTYzLDkgQEAKIGNzaW9faHdfdHBfd3JfYml0c19pbmRpcmVjdChzdHJ1Y3QgY3Npb19odyAqaHcsIHVuc2lnbmVkIGludCBhZGRyLAogCQkJdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCB2YWwpCiB7Ci0JY3Npb193cl9yZWczMihodywgYWRkciwgVFBfUElPX0FERFIpOwotCXZhbCB8PSBjc2lvX3JkX3JlZzMyKGh3LCBUUF9QSU9fREFUQSkgJiB+bWFzazsKLQljc2lvX3dyX3JlZzMyKGh3LCB2YWwsIFRQX1BJT19EQVRBKTsKKwljc2lvX3dyX3JlZzMyKGh3LCBhZGRyLCBUUF9QSU9fQUREUl9BKTsKKwl2YWwgfD0gY3Npb19yZF9yZWczMihodywgVFBfUElPX0RBVEFfQSkgJiB+bWFzazsKKwljc2lvX3dyX3JlZzMyKGh3LCB2YWwsIFRQX1BJT19EQVRBX0EpOwogfQogCiB2b2lkCkBAIC0yNTYsNyArMjMxLDcgQEAKIAl9CiAKIAlwY2lfcmVhZF9jb25maWdfZHdvcmQoaHctPnBkZXYsIGJhc2UgKyBQQ0lfVlBEX0RBVEEsIGRhdGEpOwotCSpkYXRhID0gbGUzMl90b19jcHUoKmRhdGEpOworCSpkYXRhID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilkYXRhKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDIxLDE3ICszOTYsMTUgQEAKIAogCWlmICghYnl0ZV9jbnQgfHwgYnl0ZV9jbnQgPiA0KQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY3Npb19yZF9yZWczMihodywgU0ZfT1ApICYgU0ZfQlVTWSkKKwlpZiAoY3Npb19yZF9yZWczMihodywgU0ZfT1BfQSkgJiBTRl9CVVNZX0YpCiAJCXJldHVybiAtRUJVU1k7CiAKLQljb250ID0gY29udCA/IFNGX0NPTlQgOiAwOwotCWxvY2sgPSBsb2NrID8gU0ZfTE9DSyA6IDA7Ci0KLQljc2lvX3dyX3JlZzMyKGh3LCBsb2NrIHwgY29udCB8IEJZVEVDTlQoYnl0ZV9jbnQgLSAxKSwgU0ZfT1ApOwotCXJldCA9IGNzaW9faHdfd2FpdF9vcF9kb25lX3ZhbChodywgU0ZfT1AsIFNGX0JVU1ksIDAsIFNGX0FUVEVNUFRTLAotCQkJCQkgMTAsIE5VTEwpOworCWNzaW9fd3JfcmVnMzIoaHcsICBTRl9MT0NLX1YobG9jaykgfCBTRl9DT05UX1YoY29udCkgfAorCQkgICAgICBCWVRFQ05UX1YoYnl0ZV9jbnQgLSAxKSwgU0ZfT1BfQSk7CisJcmV0ID0gY3Npb19od193YWl0X29wX2RvbmVfdmFsKGh3LCBTRl9PUF9BLCBTRl9CVVNZX0YsIDAsIFNGX0FUVEVNUFRTLAorCQkJCSAgICAgICAxMCwgTlVMTCk7CiAJaWYgKCFyZXQpCi0JCSp2YWxwID0gY3Npb19yZF9yZWczMihodywgU0ZfREFUQSk7CisJCSp2YWxwID0gY3Npb19yZF9yZWczMihodywgU0ZfREFUQV9BKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00NTMsMTYgKzQyNiwxNCBAQAogewogCWlmICghYnl0ZV9jbnQgfHwgYnl0ZV9jbnQgPiA0KQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoY3Npb19yZF9yZWczMihodywgU0ZfT1ApICYgU0ZfQlVTWSkKKwlpZiAoY3Npb19yZF9yZWczMihodywgU0ZfT1BfQSkgJiBTRl9CVVNZX0YpCiAJCXJldHVybiAtRUJVU1k7CiAKLQljb250ID0gY29udCA/IFNGX0NPTlQgOiAwOwotCWxvY2sgPSBsb2NrID8gU0ZfTE9DSyA6IDA7CisJY3Npb193cl9yZWczMihodywgdmFsLCBTRl9EQVRBX0EpOworCWNzaW9fd3JfcmVnMzIoaHcsIFNGX0NPTlRfVihjb250KSB8IEJZVEVDTlRfVihieXRlX2NudCAtIDEpIHwKKwkJICAgICAgT1BfVigxKSB8IFNGX0xPQ0tfVihsb2NrKSwgU0ZfT1BfQSk7CiAKLQljc2lvX3dyX3JlZzMyKGh3LCB2YWwsIFNGX0RBVEEpOwotCWNzaW9fd3JfcmVnMzIoaHcsIGNvbnQgfCBCWVRFQ05UKGJ5dGVfY250IC0gMSkgfCBPUF9XUiB8IGxvY2ssIFNGX09QKTsKLQotCXJldHVybiBjc2lvX2h3X3dhaXRfb3BfZG9uZV92YWwoaHcsIFNGX09QLCBTRl9CVVNZLCAwLCBTRl9BVFRFTVBUUywKKwlyZXR1cm4gY3Npb19od193YWl0X29wX2RvbmVfdmFsKGh3LCBTRl9PUF9BLCBTRl9CVVNZX0YsIDAsIFNGX0FUVEVNUFRTLAogCQkJCQkxMCwgTlVMTCk7CiB9CiAKQEAgLTUzMywxMSArNTA0LDExIEBACiAJZm9yICggOyBud29yZHM7IG53b3Jkcy0tLCBkYXRhKyspIHsKIAkJcmV0ID0gY3Npb19od19zZjFfcmVhZChodywgNCwgbndvcmRzID4gMSwgbndvcmRzID09IDEsIGRhdGEpOwogCQlpZiAobndvcmRzID09IDEpCi0JCQljc2lvX3dyX3JlZzMyKGh3LCAwLCBTRl9PUCk7ICAgIC8qIHVubG9jayBTRiAqLworCQkJY3Npb193cl9yZWczMihodywgMCwgU0ZfT1BfQSk7ICAgIC8qIHVubG9jayBTRiAqLwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAkJaWYgKGJ5dGVfb3JpZW50ZWQpCi0JCQkqZGF0YSA9IGh0b25sKCpkYXRhKTsKKwkJCSpkYXRhID0gKF9fZm9yY2UgX191MzIpIGh0b25sKCpkYXRhKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC01ODYsNyArNTU3LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIHVubG9jazsKIAotCWNzaW9fd3JfcmVnMzIoaHcsIDAsIFNGX09QKTsgICAgLyogdW5sb2NrIFNGICovCisJY3Npb193cl9yZWczMihodywgMCwgU0ZfT1BfQSk7ICAgIC8qIHVubG9jayBTRiAqLwogCiAJLyogUmVhZCB0aGUgcGFnZSB0byB2ZXJpZnkgdGhlIHdyaXRlIHN1Y2NlZWRlZCAqLwogCXJldCA9IGNzaW9faHdfcmVhZF9mbGFzaChodywgYWRkciAmIH4weGZmLCBBUlJBWV9TSVpFKGJ1ZiksIGJ1ZiwgMSk7CkBAIC02MDMsNyArNTc0LDcgQEAKIAlyZXR1cm4gMDsKIAogdW5sb2NrOgotCWNzaW9fd3JfcmVnMzIoaHcsIDAsIFNGX09QKTsgICAgLyogdW5sb2NrIFNGICovCisJY3Npb193cl9yZWczMihodywgMCwgU0ZfT1BfQSk7ICAgIC8qIHVubG9jayBTRiAqLwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTY0MSw3ICs2MTIsNyBAQAogCWlmIChyZXQpCiAJCWNzaW9fZXJyKGh3LCAiZXJhc2Ugb2YgZmxhc2ggc2VjdG9yICVkIGZhaWxlZCwgZXJyb3IgJWRcbiIsCiAJCQkgc3RhcnQsIHJldCk7Ci0JY3Npb193cl9yZWczMihodywgMCwgU0ZfT1ApOyAgICAvKiB1bmxvY2sgU0YgKi8KKwljc2lvX3dyX3JlZzMyKGh3LCAwLCBTRl9PUF9BKTsgICAgLyogdW5sb2NrIFNGICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY2NSw3ICs2MzYsNyBAQAogc3RhdGljIGludAogY3Npb19od19nZXRfZndfdmVyc2lvbihzdHJ1Y3QgY3Npb19odyAqaHcsIHVpbnQzMl90ICp2ZXJzKQogewotCXJldHVybiBjc2lvX2h3X3JlYWRfZmxhc2goaHcsIEZXX0lNR19TVEFSVCArCisJcmV0dXJuIGNzaW9faHdfcmVhZF9mbGFzaChodywgRkxBU0hfRldfU1RBUlQgKwogCQkJCSAgb2Zmc2V0b2Yoc3RydWN0IGZ3X2hkciwgZndfdmVyKSwgMSwKIAkJCQkgIHZlcnMsIDApOwogfQpAQCAtNjg2LDQzICs2NTcsNiBAQAogfQogCiAvKgotICoJY3Npb19od19jaGVja19md192ZXJzaW9uIC0gY2hlY2sgaWYgdGhlIEZXIGlzIGNvbXBhdGlibGUgd2l0aAotICoJCQkJICAgdGhpcyBkcml2ZXIKLSAqCUBodzogSFcgbW9kdWxlCi0gKgotICoJQ2hlY2tzIGlmIGFuIGFkYXB0ZXIncyBGVyBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGRyaXZlci4gIFJldHVybnMgMAotICoJaWYgdGhlcmUncyBleGFjdCBtYXRjaCwgYSBuZWdhdGl2ZSBlcnJvciBpZiB0aGUgdmVyc2lvbiBjb3VsZCBub3QgYmUKLSAqCXJlYWQgb3IgdGhlcmUncyBhIG1ham9yL21pbm9yIHZlcnNpb24gbWlzbWF0Y2gvbWlub3IuCi0gKi8KLXN0YXRpYyBpbnQKLWNzaW9faHdfY2hlY2tfZndfdmVyc2lvbihzdHJ1Y3QgY3Npb19odyAqaHcpCi17Ci0JaW50IHJldCwgbWFqb3IsIG1pbm9yLCBtaWNybzsKLQotCXJldCA9IGNzaW9faHdfZ2V0X2Z3X3ZlcnNpb24oaHcsICZody0+ZndyZXYpOwotCWlmICghcmV0KQotCQlyZXQgPSBjc2lvX2h3X2dldF90cF92ZXJzaW9uKGh3LCAmaHctPnRwX3ZlcnMpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQltYWpvciA9IEZXX0hEUl9GV19WRVJfTUFKT1JfRyhody0+ZndyZXYpOwotCW1pbm9yID0gRldfSERSX0ZXX1ZFUl9NSU5PUl9HKGh3LT5md3Jldik7Ci0JbWljcm8gPSBGV19IRFJfRldfVkVSX01JQ1JPX0coaHctPmZ3cmV2KTsKLQotCWlmIChtYWpvciAhPSBGV19WRVJTSU9OX01BSk9SKGh3KSkgewkvKiBtYWpvciBtaXNtYXRjaCAtIGZhaWwgKi8KLQkJY3Npb19lcnIoaHcsICJjYXJkIEZXIGhhcyBtYWpvciB2ZXJzaW9uICV1LCBkcml2ZXIgd2FudHMgJXVcbiIsCi0JCQkgbWFqb3IsIEZXX1ZFUlNJT05fTUFKT1IoaHcpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKG1pbm9yID09IEZXX1ZFUlNJT05fTUlOT1IoaHcpICYmIG1pY3JvID09IEZXX1ZFUlNJT05fTUlDUk8oaHcpKQotCQlyZXR1cm4gMDsgICAgICAgIC8qIHBlcmZlY3QgbWF0Y2ggKi8KLQotCS8qIE1pbm9yL21pY3JvIHZlcnNpb24gbWlzbWF0Y2ggKi8KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotLyoKICAqIGNzaW9faHdfZndfZGxvYWQgLSBkb3dubG9hZCBmaXJtd2FyZS4KICAqIEBodzogSFcgbW9kdWxlCiAgKiBAZndfZGF0YTogZmlybXdhcmUgaW1hZ2UgdG8gd3JpdGUuCkBAIC03NjIsOSArNjk2LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKHNpemUgPiBGV19NQVhfU0laRSkgeworCWlmIChzaXplID4gRkxBU0hfRldfTUFYX1NJWkUpIHsKIAkJY3Npb19lcnIoaHcsICJGVyBpbWFnZSB0b28gbGFyZ2UsIG1heCBpcyAldSBieXRlc1xuIiwKLQkJCSAgICBGV19NQVhfU0laRSk7CisJCQkgICAgRkxBU0hfRldfTUFYX1NJWkUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTc4MCwxMCArNzE0LDEwIEBACiAJaSA9IERJVl9ST1VORF9VUChzaXplLCBzZl9zZWNfc2l6ZSk7ICAgICAgICAvKiAjIG9mIHNlY3RvcnMgc3Bhbm5lZCAqLwogCiAJY3Npb19kYmcoaHcsICJFcmFzaW5nIHNlY3RvcnMuLi4gc3RhcnQ6JWQgZW5kOiVkXG4iLAotCQkJICBGV19TVEFSVF9TRUMsIEZXX1NUQVJUX1NFQyArIGkgLSAxKTsKKwkJCSAgRkxBU0hfRldfU1RBUlRfU0VDLCBGTEFTSF9GV19TVEFSVF9TRUMgKyBpIC0gMSk7CiAKLQlyZXQgPSBjc2lvX2h3X2ZsYXNoX2VyYXNlX3NlY3RvcnMoaHcsIEZXX1NUQVJUX1NFQywKLQkJCQkJICBGV19TVEFSVF9TRUMgKyBpIC0gMSk7CisJcmV0ID0gY3Npb19od19mbGFzaF9lcmFzZV9zZWN0b3JzKGh3LCBGTEFTSF9GV19TVEFSVF9TRUMsCisJCQkJCSAgRkxBU0hfRldfU1RBUlRfU0VDICsgaSAtIDEpOwogCWlmIChyZXQpIHsKIAkJY3Npb19lcnIoaHcsICJGbGFzaCBFcmFzZSBmYWlsZWRcbiIpOwogCQlnb3RvIG91dDsKQEAgLTc5NiwxNCArNzMwLDE0IEBACiAJICovCiAJbWVtY3B5KGZpcnN0X3BhZ2UsIGZ3X2RhdGEsIFNGX1BBR0VfU0laRSk7CiAJKChzdHJ1Y3QgZndfaGRyICopZmlyc3RfcGFnZSktPmZ3X3ZlciA9IGh0b25sKDB4ZmZmZmZmZmYpOwotCXJldCA9IGNzaW9faHdfd3JpdGVfZmxhc2goaHcsIEZXX0lNR19TVEFSVCwgU0ZfUEFHRV9TSVpFLCBmaXJzdF9wYWdlKTsKKwlyZXQgPSBjc2lvX2h3X3dyaXRlX2ZsYXNoKGh3LCBGTEFTSF9GV19TVEFSVCwgU0ZfUEFHRV9TSVpFLCBmaXJzdF9wYWdlKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAogCWNzaW9fZGJnKGh3LCAiV3JpdGluZyBGbGFzaCAuLiBzdGFydDolZCBlbmQ6JWRcbiIsCiAJCSAgICBGV19JTUdfU1RBUlQsIEZXX0lNR19TVEFSVCArIHNpemUpOwogCi0JYWRkciA9IEZXX0lNR19TVEFSVDsKKwlhZGRyID0gRkxBU0hfRldfU1RBUlQ7CiAJZm9yIChzaXplIC09IFNGX1BBR0VfU0laRTsgc2l6ZTsgc2l6ZSAtPSBTRl9QQUdFX1NJWkUpIHsKIAkJYWRkciArPSBTRl9QQUdFX1NJWkU7CiAJCWZ3X2RhdGEgKz0gU0ZfUEFHRV9TSVpFOwpAQCAtODEzLDcgKzc0Nyw3IEBACiAJfQogCiAJcmV0ID0gY3Npb19od193cml0ZV9mbGFzaChodywKLQkJCQkgIEZXX0lNR19TVEFSVCArCisJCQkJICBGTEFTSF9GV19TVEFSVCArCiAJCQkJCW9mZnNldG9mKHN0cnVjdCBmd19oZHIsIGZ3X3ZlciksCiAJCQkJICBzaXplb2YoaGRyLT5md192ZXIpLAogCQkJCSAgKGNvbnN0IHVpbnQ4X3QgKikmaGRyLT5md192ZXIpOwpAQCAtODMzLDcgKzc2Nyw3IEBACiAJcmV0ID0gY3Npb19od19zZjFfd3JpdGUoaHcsIDEsIDEsIDAsIFNGX1JEX0lEKTsKIAlpZiAoIXJldCkKIAkJcmV0ID0gY3Npb19od19zZjFfcmVhZChodywgMywgMCwgMSwgJmluZm8pOwotCWNzaW9fd3JfcmVnMzIoaHcsIDAsIFNGX09QKTsgICAgLyogdW5sb2NrIFNGICovCisJY3Npb193cl9yZWczMihodywgMCwgU0ZfT1BfQSk7ICAgIC8qIHVubG9jayBTRiAqLwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtODYxLDE3ICs3OTUsMTcgQEAKIAl1aW50MzJfdCByZWc7CiAJaW50IGNudCA9IDY7CiAKLQl3aGlsZSAoKChyZWcgPSBjc2lvX3JkX3JlZzMyKGh3LCBQTF9XSE9BTUkpKSA9PSAweEZGRkZGRkZGKSAmJgotCQkJCQkJCQkoLS1jbnQgIT0gMCkpCisJd2hpbGUgKCgocmVnID0gY3Npb19yZF9yZWczMihodywgUExfV0hPQU1JX0EpKSA9PSAweEZGRkZGRkZGKSAmJgorCSAgICAgICAoLS1jbnQgIT0gMCkpCiAJCW1kZWxheSgxMDApOwogCi0JaWYgKChjbnQgPT0gMCkgJiYgKCgoaW50MzJfdCkoU09VUkNFUEZfR0VUKHJlZykpIDwgMCkgfHwKLQkJCSAgICAoU09VUkNFUEZfR0VUKHJlZykgPj0gQ1NJT19NQVhfUEZOKSkpIHsKKwlpZiAoKGNudCA9PSAwKSAmJiAoKChpbnQzMl90KShTT1VSQ0VQRl9HKHJlZykpIDwgMCkgfHwKKwkJCSAgIChTT1VSQ0VQRl9HKHJlZykgPj0gQ1NJT19NQVhfUEZOKSkpIHsKIAkJY3Npb19lcnIoaHcsICJQTF9XSE9BTUkgcmV0dXJuZWQgMHgleCwgY250OiVkXG4iLCByZWcsIGNudCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAotCWh3LT5wZm4gPSBTT1VSQ0VQRl9HRVQocmVnKTsKKwlody0+cGZuID0gU09VUkNFUEZfRyhyZWcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05NTksOCArODkzLDggQEAKIAkJCSAqIHRpbWVvdXQgLi4uIGFuZCB0aGVuIHJldHJ5IGlmIHdlIGhhdmVuJ3QgZXhoYXVzdGVkCiAJCQkgKiBvdXIgcmV0cmllcyAuLi4KIAkJCSAqLwotCQkJcGNpZV9mdyA9IGNzaW9fcmRfcmVnMzIoaHcsIFBDSUVfRlcpOwotCQkJaWYgKCEocGNpZV9mdyAmIChQQ0lFX0ZXX0VSUnxQQ0lFX0ZXX0lOSVQpKSkgeworCQkJcGNpZV9mdyA9IGNzaW9fcmRfcmVnMzIoaHcsIFBDSUVfRldfQSk7CisJCQlpZiAoIShwY2llX2Z3ICYgKFBDSUVfRldfRVJSX0Z8UENJRV9GV19JTklUX0YpKSkgewogCQkJCWlmICh3YWl0aW5nIDw9IDApIHsKIAkJCQkJaWYgKHJldHJpZXMtLSA+IDApCiAJCQkJCQlnb3RvIHJldHJ5OwpAQCAtOTc2LDEwICs5MTAsMTAgQEAKIAkJCSAqIHJlcG9ydCBlcnJvcnMgcHJlZmVyZW50aWFsbHkuCiAJCQkgKi8KIAkJCWlmIChzdGF0ZSkgewotCQkJCWlmIChwY2llX2Z3ICYgUENJRV9GV19FUlIpIHsKKwkJCQlpZiAocGNpZV9mdyAmIFBDSUVfRldfRVJSX0YpIHsKIAkJCQkJKnN0YXRlID0gQ1NJT19ERVZfU1RBVEVfRVJSOwogCQkJCQlydiA9IC1FVElNRURPVVQ7Ci0JCQkJfSBlbHNlIGlmIChwY2llX2Z3ICYgUENJRV9GV19JTklUKQorCQkJCX0gZWxzZSBpZiAocGNpZV9mdyAmIFBDSUVfRldfSU5JVF9GKQogCQkJCQkqc3RhdGUgPSBDU0lPX0RFVl9TVEFURV9JTklUOwogCQkJfQogCkBAIC05ODgsOSArOTIyLDkgQEAKIAkJCSAqIHRoZXJlJ3Mgbm90IGEgdmFsaWQgTWFzdGVyIFBGLCBncmFiIGl0cyBpZGVudGl0eQogCQkJICogZm9yIG91ciBjYWxsZXIuCiAJCQkgKi8KLQkJCWlmIChtcGZuID09IFBDSUVfRldfTUFTVEVSX01BU0sgJiYKLQkJCSAgICAocGNpZV9mdyAmIFBDSUVfRldfTUFTVEVSX1ZMRCkpCi0JCQkJbXBmbiA9IFBDSUVfRldfTUFTVEVSX0dFVChwY2llX2Z3KTsKKwkJCWlmIChtcGZuID09IFBDSUVfRldfTUFTVEVSX00gJiYKKwkJCSAgICAocGNpZV9mdyAmIFBDSUVfRldfTUFTVEVSX1ZMRF9GKSkKKwkJCQltcGZuID0gUENJRV9GV19NQVNURVJfRyhwY2llX2Z3KTsKIAkJCWJyZWFrOwogCQl9CiAJCWh3LT5mbGFncyAmPSB+Q1NJT19IV0ZfTUFTVEVSOwpAQCAtMTA3OCw3ICsxMDEyLDcgQEAKIAogCWlmICghZndfcnN0KSB7CiAJCS8qIFBJTyByZXNldCAqLwotCQljc2lvX3dyX3JlZzMyKGh3LCBQSU9SU1RNT0RFIHwgUElPUlNULCBQTF9SU1QpOworCQljc2lvX3dyX3JlZzMyKGh3LCBQSU9SU1RNT0RFX0YgfCBQSU9SU1RfRiwgUExfUlNUX0EpOwogCQltZGVsYXkoMjAwMCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTEwOTAsNyArMTAyNCw3IEBACiAJfQogCiAJY3Npb19tYl9yZXNldChodywgbWJwLCBDU0lPX01CX0RFRkFVTFRfVE1PLAotCQkgICAgICBQSU9SU1RNT0RFIHwgUElPUlNULCAwLCBOVUxMKTsKKwkJICAgICAgUElPUlNUTU9ERV9GIHwgUElPUlNUX0YsIDAsIE5VTEwpOwogCiAJaWYgKGNzaW9fbWJfaXNzdWUoaHcsIG1icCkpIHsKIAkJY3Npb19lcnIoaHcsICJJc3N1ZSBvZiBSRVNFVCBjb21tYW5kIGZhaWxlZC5uIik7CkBAIC0xMTU2LDcgKzEwOTAsNyBAQAogCSAqIElmIGEgbGVnaXRpbWF0ZSBtYWlsYm94IGlzIHByb3ZpZGVkLCBpc3N1ZSBhIFJFU0VUIGNvbW1hbmQKIAkgKiB3aXRoIGEgSEFMVCBpbmRpY2F0aW9uLgogCSAqLwotCWlmIChtYm94IDw9IFBDSUVfRldfTUFTVEVSX01BU0spIHsKKwlpZiAobWJveCA8PSBQQ0lFX0ZXX01BU1RFUl9NKSB7CiAJCXN0cnVjdCBjc2lvX21iCSptYnA7CiAKIAkJbWJwID0gbWVtcG9vbF9hbGxvYyhody0+bWJfbWVtcG9vbCwgR0ZQX0FUT01JQyk7CkBAIC0xMTY2LDcgKzExMDAsNyBAQAogCQl9CiAKIAkJY3Npb19tYl9yZXNldChodywgbWJwLCBDU0lPX01CX0RFRkFVTFRfVE1PLAotCQkJICAgICAgUElPUlNUTU9ERSB8IFBJT1JTVCwgRldfUkVTRVRfQ01EX0hBTFRfRiwKKwkJCSAgICAgIFBJT1JTVE1PREVfRiB8IFBJT1JTVF9GLCBGV19SRVNFVF9DTURfSEFMVF9GLAogCQkJICAgICAgTlVMTCk7CiAKIAkJaWYgKGNzaW9fbWJfaXNzdWUoaHcsIG1icCkpIHsKQEAgLTExOTMsOCArMTEyNyw5IEBACiAJICogcmF0aGVyIHRoYW4gYSBSRVNFVCAuLi4gaWYgaXQncyBuZXcgZW5vdWdoIHRvIHVuZGVyc3RhbmQgdGhhdCAuLi4KIAkgKi8KIAlpZiAocmV0dmFsID09IDAgfHwgZm9yY2UpIHsKLQkJY3Npb19zZXRfcmVnX2ZpZWxkKGh3LCBDSU1fQk9PVF9DRkcsIFVQQ1JTVCwgVVBDUlNUKTsKLQkJY3Npb19zZXRfcmVnX2ZpZWxkKGh3LCBQQ0lFX0ZXLCBQQ0lFX0ZXX0hBTFQsIFBDSUVfRldfSEFMVCk7CisJCWNzaW9fc2V0X3JlZ19maWVsZChodywgQ0lNX0JPT1RfQ0ZHX0EsIFVQQ1JTVF9GLCBVUENSU1RfRik7CisJCWNzaW9fc2V0X3JlZ19maWVsZChodywgUENJRV9GV19BLCBQQ0lFX0ZXX0hBTFRfRiwKKwkJCQkgICBQQ0lFX0ZXX0hBTFRfRik7CiAJfQogCiAJLyoKQEAgLTEyMzQsNyArMTE2OSw3IEBACiAJCSAqIGRvaW5nIGl0IGF1dG9tYXRpY2FsbHksIHdlIG5lZWQgdG8gY2xlYXIgdGhlIFBDSUVfRlcuSEFMVAogCQkgKiBiaXQuCiAJCSAqLwotCQljc2lvX3NldF9yZWdfZmllbGQoaHcsIFBDSUVfRlcsIFBDSUVfRldfSEFMVCwgMCk7CisJCWNzaW9fc2V0X3JlZ19maWVsZChodywgUENJRV9GV19BLCBQQ0lFX0ZXX0hBTFRfRiwgMCk7CiAKIAkJLyoKIAkJICogSWYgd2UndmUgYmVlbiBnaXZlbiBhIHZhbGlkIG1haWxib3gsIGZpcnN0IHRyeSB0byBnZXQgdGhlCkBAIC0xMjQzLDIxICsxMTc4LDIxIEBACiAJCSAqIHZhbGlkIG1haWxib3ggb3IgdGhlIFJFU0VUIGNvbW1hbmQgZmFpbGVkLCBmYWxsIGJhY2sgdG8KIAkJICogaGl0dGluZyB0aGUgY2hpcCB3aXRoIGEgaGFtbWVyLgogCQkgKi8KLQkJaWYgKG1ib3ggPD0gUENJRV9GV19NQVNURVJfTUFTSykgewotCQkJY3Npb19zZXRfcmVnX2ZpZWxkKGh3LCBDSU1fQk9PVF9DRkcsIFVQQ1JTVCwgMCk7CisJCWlmIChtYm94IDw9IFBDSUVfRldfTUFTVEVSX00pIHsKKwkJCWNzaW9fc2V0X3JlZ19maWVsZChodywgQ0lNX0JPT1RfQ0ZHX0EsIFVQQ1JTVF9GLCAwKTsKIAkJCW1zbGVlcCgxMDApOwogCQkJaWYgKGNzaW9fZG9fcmVzZXQoaHcsIHRydWUpID09IDApCiAJCQkJcmV0dXJuIDA7CiAJCX0KIAotCQljc2lvX3dyX3JlZzMyKGh3LCBQSU9SU1RNT0RFIHwgUElPUlNULCBQTF9SU1QpOworCQljc2lvX3dyX3JlZzMyKGh3LCBQSU9SU1RNT0RFX0YgfCBQSU9SU1RfRiwgUExfUlNUX0EpOwogCQltc2xlZXAoMjAwMCk7CiAJfSBlbHNlIHsKIAkJaW50IG1zOwogCi0JCWNzaW9fc2V0X3JlZ19maWVsZChodywgQ0lNX0JPT1RfQ0ZHLCBVUENSU1QsIDApOworCQljc2lvX3NldF9yZWdfZmllbGQoaHcsIENJTV9CT09UX0NGR19BLCBVUENSU1RfRiwgMCk7CiAJCWZvciAobXMgPSAwOyBtcyA8IEZXX0NNRF9NQVhfVElNRU9VVDsgKSB7Ci0JCQlpZiAoIShjc2lvX3JkX3JlZzMyKGh3LCBQQ0lFX0ZXKSAmIFBDSUVfRldfSEFMVCkpCisJCQlpZiAoIShjc2lvX3JkX3JlZzMyKGh3LCBQQ0lFX0ZXX0EpICYgUENJRV9GV19IQUxUX0YpKQogCQkJCXJldHVybiAwOwogCQkJbXNsZWVwKDEwMCk7CiAJCQltcyArPSAxMDA7CkBAIC0xMzE1LDExNiArMTI1MCw2IEBACiAJcmV0dXJuIGNzaW9faHdfZndfcmVzdGFydChodywgbWJveCwgcmVzZXQpOwogfQogCi0KLS8qCi0gKgljc2lvX2h3X2Z3X2NvbmZpZ19maWxlIC0gc2V0dXAgYW4gYWRhcHRlciB2aWEgYSBDb25maWd1cmF0aW9uIEZpbGUKLSAqCUBodzogdGhlIEhXIG1vZHVsZQotICoJQG1ib3g6IG1haWxib3ggdG8gdXNlIGZvciB0aGUgRlcgY29tbWFuZAotICoJQG10eXBlOiB0aGUgbWVtb3J5IHR5cGUgd2hlcmUgdGhlIENvbmZpZ3VyYXRpb24gRmlsZSBpcyBsb2NhdGVkCi0gKglAbWFkZHI6IHRoZSBtZW1vcnkgYWRkcmVzcyB3aGVyZSB0aGUgQ29uZmlndXJhdGlvbiBGaWxlIGlzIGxvY2F0ZWQKLSAqCUBmaW5pdmVyOiByZXR1cm4gdmFsdWUgZm9yIENGIFtmaW5pXSB2ZXJzaW9uCi0gKglAZmluaWNzdW06IHJldHVybiB2YWx1ZSBmb3IgQ0YgW2ZpbmldIGNoZWNrc3VtCi0gKglAY2Zjc3VtOiByZXR1cm4gdmFsdWUgZm9yIENGIGNvbXB1dGVkIGNoZWNrc3VtCi0gKgotICoJSXNzdWUgYSBjb21tYW5kIHRvIGdldCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgQ29uZmlndXJhdGlvbgotICoJRmlsZSBsb2NhdGVkIGF0IHRoZSBzcGVjaWZpZWQgbXR5cGUvbWFkZHJlc3MuICBJZiB0aGUgQ29uZmlndXJhdGlvbgotICoJRmlsZSBpcyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5IGFuZCByZXR1cm4gdmFsdWUgcG9pbnRlcnMgYXJlCi0gKglwcm92aWRlZCwgdGhlIENvbmZpZ3VyYXRpb24gRmlsZSAiW2ZpbmldIHNlY3Rpb24gdmVyc2lvbiBhbmQKLSAqCWNoZWNrc3VtIHZhbHVlcyB3aWxsIGJlIHJldHVybmVkIGFsb25nIHdpdGggdGhlIGNvbXB1dGVkIGNoZWNrc3VtLgotICoJSXQncyB1cCB0byB0aGUgY2FsbGVyIHRvIGRlY2lkZSBob3cgaXQgd2FudHMgdG8gcmVzcG9uZCB0byB0aGUKLSAqCWNoZWNrc3VtcyBub3QgbWF0Y2hpbmcgYnV0IGl0IHJlY29tbWVuZGVkIHRoYXQgYSBwcm9taW5hbnQgd2FybmluZwotICoJYmUgZW1pdHRlZCBpbiBvcmRlciB0byBoZWxwIHBlb3BsZSByYXBpZGx5IGlkZW50aWZ5IGNoYW5nZWQgb3IKLSAqCWNvcnJ1cHRlZCBDb25maWd1cmF0aW9uIEZpbGVzLgotICoKLSAqCUFsc28gbm90ZSB0aGF0IGl0J3MgcG9zc2libGUgdG8gbW9kaWZ5IHRoaW5ncyBsaWtlICJuaWNjYXBzIiwKLSAqCSJ0b2VjYXBzIixldGMuIGJldHdlZW4gcHJvY2Vzc2luZyB0aGUgQ29uZmlndXJhdGlvbiBGaWxlIGFuZCB0ZWxsaW5nCi0gKgl0aGUgZmlybXdhcmUgdG8gdXNlIHRoZSBuZXcgY29uZmlndXJhdGlvbi4gIENhbGxlcnMgd2hpY2ggd2FudCB0bwotICoJZG8gdGhpcyB3aWxsIG5lZWQgdG8gImhhbmQtcm9sbCIgdGhlaXIgb3duIENBUFNfQ09ORklHUyBjb21tYW5kcyBmb3IKLSAqCUNvbmZpZ3VyYXRpb24gRmlsZXMgaWYgdGhleSB3YW50IHRvIGRvIHRoaXMuCi0gKi8KLXN0YXRpYyBpbnQKLWNzaW9faHdfZndfY29uZmlnX2ZpbGUoc3RydWN0IGNzaW9faHcgKmh3LAotCQkgICAgICB1bnNpZ25lZCBpbnQgbXR5cGUsIHVuc2lnbmVkIGludCBtYWRkciwKLQkJICAgICAgdWludDMyX3QgKmZpbml2ZXIsIHVpbnQzMl90ICpmaW5pY3N1bSwgdWludDMyX3QgKmNmY3N1bSkKLXsKLQlzdHJ1Y3QgY3Npb19tYgkqbWJwOwotCXN0cnVjdCBmd19jYXBzX2NvbmZpZ19jbWQgKmNhcHNfY21kOwotCWludCBydiA9IC1FSU5WQUw7Ci0JZW51bSBmd19yZXR2YWwgcmV0OwotCi0JbWJwID0gbWVtcG9vbF9hbGxvYyhody0+bWJfbWVtcG9vbCwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFtYnApIHsKLQkJQ1NJT19JTkNfU1RBVFMoaHcsIG5fZXJyX25vbWVtKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCS8qCi0JICogVGVsbCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgaW5kaWNhdGVkIENvbmZpZ3VyYXRpb24gRmlsZS4KLQkgKiBJZiB0aGVyZSBhcmUgbm8gZXJyb3JzIGFuZCB0aGUgY2FsbGVyIGhhcyBwcm92aWRlZCByZXR1cm4gdmFsdWUKLQkgKiBwb2ludGVycyBmb3IgdGhlIFtmaW5pXSBzZWN0aW9uIHZlcnNpb24sIGNoZWNrc3VtIGFuZCBjb21wdXRlZAotCSAqIGNoZWNrc3VtLCBwYXNzIHRob3NlIGJhY2sgdG8gdGhlIGNhbGxlci4KLQkgKi8KLQljYXBzX2NtZCA9IChzdHJ1Y3QgZndfY2Fwc19jb25maWdfY21kICopKG1icC0+bWIpOwotCUNTSU9fSU5JVF9NQlAobWJwLCBjYXBzX2NtZCwgQ1NJT19NQl9ERUZBVUxUX1RNTywgaHcsIE5VTEwsIDEpOwotCWNhcHNfY21kLT5vcF90b193cml0ZSA9Ci0JCWh0b25sKEZXX0NNRF9PUF9WKEZXX0NBUFNfQ09ORklHX0NNRCkgfAotCQkgICAgICBGV19DTURfUkVRVUVTVF9GIHwKLQkJICAgICAgRldfQ01EX1JFQURfRik7Ci0JY2Fwc19jbWQtPmNmdmFsaWRfdG9fbGVuMTYgPQotCQlodG9ubChGV19DQVBTX0NPTkZJR19DTURfQ0ZWQUxJRF9GIHwKLQkJICAgICAgRldfQ0FQU19DT05GSUdfQ01EX01FTVRZUEVfQ0ZfVihtdHlwZSkgfAotCQkgICAgICBGV19DQVBTX0NPTkZJR19DTURfTUVNQUREUjY0S19DRl9WKG1hZGRyID4+IDE2KSB8Ci0JCSAgICAgIEZXX0xFTjE2KCpjYXBzX2NtZCkpOwotCi0JaWYgKGNzaW9fbWJfaXNzdWUoaHcsIG1icCkpIHsKLQkJY3Npb19lcnIoaHcsICJJc3N1ZSBvZiBGV19DQVBTX0NPTkZJR19DTUQgZmFpbGVkIVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IGNzaW9fbWJfZndfcmV0dmFsKG1icCk7Ci0JaWYgKHJldCAhPSBGV19TVUNDRVNTKSB7Ci0JCWNzaW9fZGJnKGh3LCAiRldfQ0FQU19DT05GSUdfQ01EIHJldHVybmVkICVkIVxuIiwgcnYpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoZmluaXZlcikKLQkJKmZpbml2ZXIgPSBudG9obChjYXBzX2NtZC0+ZmluaXZlcik7Ci0JaWYgKGZpbmljc3VtKQotCQkqZmluaWNzdW0gPSBudG9obChjYXBzX2NtZC0+ZmluaWNzdW0pOwotCWlmIChjZmNzdW0pCi0JCSpjZmNzdW0gPSBudG9obChjYXBzX2NtZC0+Y2Zjc3VtKTsKLQotCS8qIFZhbGlkYXRlIGRldmljZSBjYXBhYmlsaXRpZXMgKi8KLQlpZiAoY3Npb19od192YWxpZGF0ZV9jYXBzKGh3LCBtYnApKSB7Ci0JCXJ2ID0gLUVOT0VOVDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBBbmQgbm93IHRlbGwgdGhlIGZpcm13YXJlIHRvIHVzZSB0aGUgY29uZmlndXJhdGlvbiB3ZSBqdXN0IGxvYWRlZC4KLQkgKi8KLQljYXBzX2NtZC0+b3BfdG9fd3JpdGUgPQotCQlodG9ubChGV19DTURfT1BfVihGV19DQVBTX0NPTkZJR19DTUQpIHwKLQkJICAgICAgRldfQ01EX1JFUVVFU1RfRiB8Ci0JCSAgICAgIEZXX0NNRF9XUklURV9GKTsKLQljYXBzX2NtZC0+Y2Z2YWxpZF90b19sZW4xNiA9IGh0b25sKEZXX0xFTjE2KCpjYXBzX2NtZCkpOwotCi0JaWYgKGNzaW9fbWJfaXNzdWUoaHcsIG1icCkpIHsKLQkJY3Npb19lcnIoaHcsICJJc3N1ZSBvZiBGV19DQVBTX0NPTkZJR19DTUQgZmFpbGVkIVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IGNzaW9fbWJfZndfcmV0dmFsKG1icCk7Ci0JaWYgKHJldCAhPSBGV19TVUNDRVNTKSB7Ci0JCWNzaW9fZGJnKGh3LCAiRldfQ0FQU19DT05GSUdfQ01EIHJldHVybmVkICVkIVxuIiwgcnYpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlydiA9IDA7Ci1vdXQ6Ci0JbWVtcG9vbF9mcmVlKG1icCwgaHctPm1iX21lbXBvb2wpOwotCXJldHVybiBydjsKLX0KLQogLyoKICAqIGNzaW9fZ2V0X2RldmljZV9wYXJhbXMgLSBHZXQgZGV2aWNlIHBhcmFtZXRlcnMuCiAgKiBAaHc6IEhXIG1vZHVsZQpAQCAtMTU0Nyw3ICsxMzcyLDggQEAKIAl9CiAKIAkvKiBWYWxpZGF0ZSBkZXZpY2UgY2FwYWJpbGl0aWVzICovCi0JaWYgKGNzaW9faHdfdmFsaWRhdGVfY2FwcyhodywgbWJwKSkKKwlydiA9IGNzaW9faHdfdmFsaWRhdGVfY2FwcyhodywgbWJwKTsKKwlpZiAocnYgIT0gMCkKIAkJZ290byBvdXQ7CiAKIAkvKiBEb24ndCBjb25maWcgZGV2aWNlIGNhcGFiaWxpdGllcyBpZiBhbHJlYWR5IGNvbmZpZ3VyZWQgKi8KQEAgLTE3NTYsOSArMTU4Miw5IEBACiAJdWludDMyX3QgKmNmZ19kYXRhOwogCWludCB2YWx1ZV90b19hZGQgPSAwOwogCi0JaWYgKHJlcXVlc3RfZmlybXdhcmUoJmNmLCBDU0lPX0NGX0ZOQU1FKGh3KSwgZGV2KSA8IDApIHsKKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmY2YsIEZXX0NGR19OQU1FX1Q1LCBkZXYpIDwgMCkgewogCQljc2lvX2VycihodywgImNvdWxkIG5vdCBmaW5kIGNvbmZpZyBmaWxlICVzLCBlcnI6ICVkXG4iLAotCQkJIENTSU9fQ0ZfRk5BTUUoaHcpLCByZXQpOworCQkJIEZXX0NGR19OQU1FX1Q1LCByZXQpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKQEAgLTE3OTgsOCArMTYyNCw4IEBACiAJfQogCWlmIChyZXQgPT0gMCkgewogCQljc2lvX2luZm8oaHcsICJjb25maWcgZmlsZSB1cGdyYWRlZCB0byAlc1xuIiwKLQkJCSAgQ1NJT19DRl9GTkFNRShodykpOwotCQlzbnByaW50ZihwYXRoLCA2NCwgIiVzJXMiLCAiL2xpYi9maXJtd2FyZS8iLCBDU0lPX0NGX0ZOQU1FKGh3KSk7CisJCQkgIEZXX0NGR19OQU1FX1Q1KTsKKwkJc25wcmludGYocGF0aCwgNjQsICIlcyVzIiwgIi9saWIvZmlybXdhcmUvIiwgRldfQ0ZHX05BTUVfVDUpOwogCX0KIAogbGVhdmU6CkBAIC0xODI3LDExICsxNjUzLDEzIEBACiBzdGF0aWMgaW50CiBjc2lvX2h3X3VzZV9md2NvbmZpZyhzdHJ1Y3QgY3Npb19odyAqaHcsIGludCByZXNldCwgdTMyICpmd19jZmdfcGFyYW0pCiB7CisJc3RydWN0IGNzaW9fbWIJKm1icCA9IE5VTEw7CisJc3RydWN0IGZ3X2NhcHNfY29uZmlnX2NtZCAqY2Fwc19jbWQ7CiAJdW5zaWduZWQgaW50IG10eXBlLCBtYWRkcjsKLQlpbnQgcnY7CisJaW50IHJ2ID0gLUVJTlZBTDsKIAl1aW50MzJfdCBmaW5pdmVyID0gMCwgZmluaWNzdW0gPSAwLCBjZmNzdW0gPSAwOwotCWludCB1c2luZ19mbGFzaDsKIAljaGFyIHBhdGhbNjRdOworCWNoYXIgKmNvbmZpZ19uYW1lID0gTlVMTDsKIAogCS8qCiAJICogUmVzZXQgZGV2aWNlIGlmIG5lY2Vzc2FyeQpAQCAtMTg1MSw1MSArMTY3OSwxMDcgQEAKIAlydiA9IGNzaW9faHdfZmxhc2hfY29uZmlnKGh3LCBmd19jZmdfcGFyYW0sIHBhdGgpOwogCXNwaW5fbG9ja19pcnEoJmh3LT5sb2NrKTsKIAlpZiAocnYgIT0gMCkgewotCQlpZiAocnYgPT0gLUVOT0VOVCkgewotCQkJLyoKLQkJCSAqIGNvbmZpZyBmaWxlIHdhcyBub3QgZm91bmQuIFVzZSBkZWZhdWx0Ci0JCQkgKiBjb25maWcgZmlsZSBmcm9tIGZsYXNoLgotCQkJICovCi0JCQltdHlwZSA9IEZXX01FTVRZUEVfQ0ZfRkxBU0g7Ci0JCQltYWRkciA9IGh3LT5jaGlwX29wcy0+Y2hpcF9mbGFzaF9jZmdfYWRkcihodyk7Ci0JCQl1c2luZ19mbGFzaCA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogd2UgcmV2ZXJ0IGJhY2sgdG8gdGhlIGhhcmR3aXJlZCBjb25maWcgaWYKLQkJCSAqIGZsYXNoaW5nIGZhaWxlZC4KLQkJCSAqLwotCQkJZ290byBieWU7Ci0JCX0KKwkJLyoKKwkJICogY29uZmlnIGZpbGUgd2FzIG5vdCBmb3VuZC4gVXNlIGRlZmF1bHQKKwkJICogY29uZmlnIGZpbGUgZnJvbSBmbGFzaC4KKwkJICovCisJCWNvbmZpZ19uYW1lID0gIk9uIEZMQVNIIjsKKwkJbXR5cGUgPSBGV19NRU1UWVBFX0NGX0ZMQVNIOworCQltYWRkciA9IGh3LT5jaGlwX29wcy0+Y2hpcF9mbGFzaF9jZmdfYWRkcihodyk7CiAJfSBlbHNlIHsKKwkJY29uZmlnX25hbWUgPSBwYXRoOwogCQltdHlwZSA9IEZXX1BBUkFNU19QQVJBTV9ZX0coKmZ3X2NmZ19wYXJhbSk7CiAJCW1hZGRyID0gRldfUEFSQU1TX1BBUkFNX1pfRygqZndfY2ZnX3BhcmFtKSA8PCAxNjsKLQkJdXNpbmdfZmxhc2ggPSAwOwogCX0KIAotCWh3LT5jZmdfc3RvcmUgPSAodWludDhfdCltdHlwZTsKLQorCW1icCA9IG1lbXBvb2xfYWxsb2MoaHctPm1iX21lbXBvb2wsIEdGUF9BVE9NSUMpOworCWlmICghbWJwKSB7CisJCUNTSU9fSU5DX1NUQVRTKGh3LCBuX2Vycl9ub21lbSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAkvKgotCSAqIElzc3VlIGEgQ2FwYWJpbGl0eSBDb25maWd1cmF0aW9uIGNvbW1hbmQgdG8gdGhlIGZpcm13YXJlIHRvIGdldCBpdAotCSAqIHRvIHBhcnNlIHRoZSBDb25maWd1cmF0aW9uIEZpbGUuCisJICogVGVsbCB0aGUgZmlybXdhcmUgdG8gcHJvY2VzcyB0aGUgaW5kaWNhdGVkIENvbmZpZ3VyYXRpb24gRmlsZS4KKwkgKiBJZiB0aGVyZSBhcmUgbm8gZXJyb3JzIGFuZCB0aGUgY2FsbGVyIGhhcyBwcm92aWRlZCByZXR1cm4gdmFsdWUKKwkgKiBwb2ludGVycyBmb3IgdGhlIFtmaW5pXSBzZWN0aW9uIHZlcnNpb24sIGNoZWNrc3VtIGFuZCBjb21wdXRlZAorCSAqIGNoZWNrc3VtLCBwYXNzIHRob3NlIGJhY2sgdG8gdGhlIGNhbGxlci4KIAkgKi8KLQlydiA9IGNzaW9faHdfZndfY29uZmlnX2ZpbGUoaHcsIG10eXBlLCBtYWRkciwgJmZpbml2ZXIsCi0JCSZmaW5pY3N1bSwgJmNmY3N1bSk7Ci0JaWYgKHJ2ICE9IDApCisJY2Fwc19jbWQgPSAoc3RydWN0IGZ3X2NhcHNfY29uZmlnX2NtZCAqKShtYnAtPm1iKTsKKwlDU0lPX0lOSVRfTUJQKG1icCwgY2Fwc19jbWQsIENTSU9fTUJfREVGQVVMVF9UTU8sIGh3LCBOVUxMLCAxKTsKKwljYXBzX2NtZC0+b3BfdG9fd3JpdGUgPQorCQlodG9ubChGV19DTURfT1BfVihGV19DQVBTX0NPTkZJR19DTUQpIHwKKwkJICAgICAgRldfQ01EX1JFUVVFU1RfRiB8CisJCSAgICAgIEZXX0NNRF9SRUFEX0YpOworCWNhcHNfY21kLT5jZnZhbGlkX3RvX2xlbjE2ID0KKwkJaHRvbmwoRldfQ0FQU19DT05GSUdfQ01EX0NGVkFMSURfRiB8CisJCSAgICAgIEZXX0NBUFNfQ09ORklHX0NNRF9NRU1UWVBFX0NGX1YobXR5cGUpIHwKKwkJICAgICAgRldfQ0FQU19DT05GSUdfQ01EX01FTUFERFI2NEtfQ0ZfVihtYWRkciA+PiAxNikgfAorCQkgICAgICBGV19MRU4xNigqY2Fwc19jbWQpKTsKKworCWlmIChjc2lvX21iX2lzc3VlKGh3LCBtYnApKSB7CisJCXJ2ID0gLUVJTlZBTDsKKwkJZ290byBieWU7CisJfQorCisJcnYgPSBjc2lvX21iX2Z3X3JldHZhbChtYnApOworCSAvKiBJZiB0aGUgQ0FQU19DT05GSUcgZmFpbGVkIHdpdGggYW4gRU5PRU5UIChmb3IgYSBGaXJtd2FyZQorCSAgKiBDb25maWd1cmF0aW9uIEZpbGUgaW4gRkxBU0gpLCBvdXIgbGFzdCBnYXNwIGVmZm9ydCBpcyB0byB1c2UgdGhlCisJICAqIEZpcm13YXJlIENvbmZpZ3VyYXRpb24gRmlsZSB3aGljaCBpcyBlbWJlZGRlZCBpbiB0aGUKKwkgICogZmlybXdhcmUuICBBIHZlcnkgZmV3IGVhcmx5IHZlcnNpb25zIG9mIHRoZSBmaXJtd2FyZSBkaWRuJ3QKKwkgICogaGF2ZSBvbmUgZW1iZWRkZWQgYnV0IHdlIGNhbiBpZ25vcmUgdGhvc2UuCisJICAqLworCWlmIChydiA9PSBFTk9FTlQpIHsKKwkJQ1NJT19JTklUX01CUChtYnAsIGNhcHNfY21kLCBDU0lPX01CX0RFRkFVTFRfVE1PLCBodywgTlVMTCwgMSk7CisJCWNhcHNfY21kLT5vcF90b193cml0ZSA9IGh0b25sKEZXX0NNRF9PUF9WKEZXX0NBUFNfQ09ORklHX0NNRCkgfAorCQkJCQkgICAgICBGV19DTURfUkVRVUVTVF9GIHwKKwkJCQkJICAgICAgRldfQ01EX1JFQURfRik7CisJCWNhcHNfY21kLT5jZnZhbGlkX3RvX2xlbjE2ID0gaHRvbmwoRldfTEVOMTYoKmNhcHNfY21kKSk7CisKKwkJaWYgKGNzaW9fbWJfaXNzdWUoaHcsIG1icCkpIHsKKwkJCXJ2ID0gLUVJTlZBTDsKKwkJCWdvdG8gYnllOworCQl9CisKKwkJcnYgPSBjc2lvX21iX2Z3X3JldHZhbChtYnApOworCQljb25maWdfbmFtZSA9ICJGaXJtd2FyZSBEZWZhdWx0IjsKKwl9CisJaWYgKHJ2ICE9IEZXX1NVQ0NFU1MpCiAJCWdvdG8gYnllOwogCi0JaHctPmNmZ19maW5pdmVyCQk9IGZpbml2ZXI7Ci0JaHctPmNmZ19maW5pY3N1bQk9IGZpbmljc3VtOwotCWh3LT5jZmdfY2Zjc3VtCQk9IGNmY3N1bTsKLQlody0+Y2ZnX2NzdW1fc3RhdHVzCT0gdHJ1ZTsKKwlmaW5pdmVyID0gbnRvaGwoY2Fwc19jbWQtPmZpbml2ZXIpOworCWZpbmljc3VtID0gbnRvaGwoY2Fwc19jbWQtPmZpbmljc3VtKTsKKwljZmNzdW0gPSBudG9obChjYXBzX2NtZC0+Y2Zjc3VtKTsKIAorCS8qCisJICogQW5kIG5vdyB0ZWxsIHRoZSBmaXJtd2FyZSB0byB1c2UgdGhlIGNvbmZpZ3VyYXRpb24gd2UganVzdCBsb2FkZWQuCisJICovCisJY2Fwc19jbWQtPm9wX3RvX3dyaXRlID0KKwkJaHRvbmwoRldfQ01EX09QX1YoRldfQ0FQU19DT05GSUdfQ01EKSB8CisJCSAgICAgIEZXX0NNRF9SRVFVRVNUX0YgfAorCQkgICAgICBGV19DTURfV1JJVEVfRik7CisJY2Fwc19jbWQtPmNmdmFsaWRfdG9fbGVuMTYgPSBodG9ubChGV19MRU4xNigqY2Fwc19jbWQpKTsKKworCWlmIChjc2lvX21iX2lzc3VlKGh3LCBtYnApKSB7CisJCXJ2ID0gLUVJTlZBTDsKKwkJZ290byBieWU7CisJfQorCisJcnYgPSBjc2lvX21iX2Z3X3JldHZhbChtYnApOworCWlmIChydiAhPSBGV19TVUNDRVNTKSB7CisJCWNzaW9fZGJnKGh3LCAiRldfQ0FQU19DT05GSUdfQ01EIHJldHVybmVkICVkIVxuIiwgcnYpOworCQlnb3RvIGJ5ZTsKKwl9CisKKwltZW1wb29sX2ZyZWUobWJwLCBody0+bWJfbWVtcG9vbCk7CiAJaWYgKGZpbmljc3VtICE9IGNmY3N1bSkgewogCQljc2lvX3dhcm4oaHcsCiAJCSAgICAgICJDb25maWcgRmlsZSBjaGVja3N1bSBtaXNtYXRjaDogY3N1bT0lI3gsIGNvbXB1dGVkPSUjeFxuIiwKIAkJICAgICAgZmluaWNzdW0sIGNmY3N1bSk7Ci0KLQkJaHctPmNmZ19jc3VtX3N0YXR1cyA9IGZhbHNlOwogCX0KIAorCS8qIFZhbGlkYXRlIGRldmljZSBjYXBhYmlsaXRpZXMgKi8KKwlydiA9IGNzaW9faHdfdmFsaWRhdGVfY2FwcyhodywgbWJwKTsKKwlpZiAocnYgIT0gMCkKKwkJZ290byBieWU7CiAJLyoKIAkgKiBOb3RlIHRoYXQgd2UncmUgb3BlcmF0aW5nIHdpdGggcGFyYW1ldGVycwogCSAqIG5vdCBzdXBwbGllZCBieSB0aGUgZHJpdmVyLCByYXRoZXIgdGhhbiBmcm9tIGhhcmQtd2lyZWQKQEAgLTE5MTgsNTYgKzE4MDIsMTg0IEBACiAJLyogUG9zdCBldmVudCB0byBub3RpZnkgY29tcGxldGlvbiBvZiBjb25maWd1cmF0aW9uICovCiAJY3Npb19wb3N0X2V2ZW50KCZody0+c20sIENTSU9fSFdFX0lOSVQpOwogCi0JY3Npb19pbmZvKGh3LAotCSAiRmlybXdhcmUgQ29uZmlndXJhdGlvbiBGaWxlICVzLCB2ZXJzaW9uICUjeCwgY29tcHV0ZWQgY2hlY2tzdW0gJSN4XG4iLAotCQkgICh1c2luZ19mbGFzaCA/ICJpbiBkZXZpY2UgRkxBU0giIDogcGF0aCksIGZpbml2ZXIsIGNmY3N1bSk7Ci0KKwljc2lvX2luZm8oaHcsICJTdWNjZXNzZnVsbHkgY29uZmlndXJlIHVzaW5nIEZpcm13YXJlICIKKwkJICAiQ29uZmlndXJhdGlvbiBGaWxlICVzLCB2ZXJzaW9uICUjeCwgY29tcHV0ZWQgY2hlY2tzdW0gJSN4XG4iLAorCQkgIGNvbmZpZ19uYW1lLCBmaW5pdmVyLCBjZmNzdW0pOwogCXJldHVybiAwOwogCiAJLyoKIAkgKiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkLiAgUmV0dXJuIHRoZSBlcnJvciAuLi4KIAkgKi8KIGJ5ZToKKwlpZiAobWJwKQorCQltZW1wb29sX2ZyZWUobWJwLCBody0+bWJfbWVtcG9vbCk7CiAJaHctPmZsYWdzICY9IH5DU0lPX0hXRl9VU0lOR19TT0ZUX1BBUkFNUzsKLQljc2lvX2RiZyhodywgIkNvbmZpZ3VyYXRpb24gZmlsZSBlcnJvciAlZFxuIiwgcnYpOworCWNzaW9fd2FybihodywgIkNvbmZpZ3VyYXRpb24gZmlsZSBlcnJvciAlZFxuIiwgcnYpOwogCXJldHVybiBydjsKIH0KIAotLyoKLSAqIEF0dGVtcHQgdG8gaW5pdGlhbGl6ZSB0aGUgYWRhcHRlciB2aWEgaGFyZC1jb2RlZCwgZHJpdmVyIHN1cHBsaWVkCi0gKiBwYXJhbWV0ZXJzIC4uLgorLyogSXMgdGhlIGdpdmVuIGZpcm13YXJlIEFQSSBjb21wYXRpYmxlIHdpdGggdGhlIG9uZSB0aGUgZHJpdmVyIHdhcyBjb21waWxlZAorICogd2l0aD8KICAqLwotc3RhdGljIGludAotY3Npb19od19ub19md2NvbmZpZyhzdHJ1Y3QgY3Npb19odyAqaHcsIGludCByZXNldCkKK3N0YXRpYyBpbnQgZndfY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgZndfaGRyICpoZHIxLCBjb25zdCBzdHJ1Y3QgZndfaGRyICpoZHIyKQogewotCWludAkJcnY7Ci0JLyoKLQkgKiBSZXNldCBkZXZpY2UgaWYgbmVjZXNzYXJ5Ci0JICovCi0JaWYgKHJlc2V0KSB7Ci0JCXJ2ID0gY3Npb19kb19yZXNldChodywgdHJ1ZSk7Ci0JCWlmIChydiAhPSAwKQotCQkJZ290byBvdXQ7CisKKwkvKiBzaG9ydCBjaXJjdWl0IGlmIGl0J3MgdGhlIGV4YWN0IHNhbWUgZmlybXdhcmUgdmVyc2lvbiAqLworCWlmIChoZHIxLT5jaGlwID09IGhkcjItPmNoaXAgJiYgaGRyMS0+ZndfdmVyID09IGhkcjItPmZ3X3ZlcikKKwkJcmV0dXJuIDE7CisKKyNkZWZpbmUgU0FNRV9JTlRGKHgpIChoZHIxLT5pbnRmdmVyXyMjeCA9PSBoZHIyLT5pbnRmdmVyXyMjeCkKKwlpZiAoaGRyMS0+Y2hpcCA9PSBoZHIyLT5jaGlwICYmIFNBTUVfSU5URihuaWMpICYmIFNBTUVfSU5URih2bmljKSAmJgorCSAgICBTQU1FX0lOVEYocmkpICYmIFNBTUVfSU5URihpc2NzaSkgJiYgU0FNRV9JTlRGKGZjb2UpKQorCQlyZXR1cm4gMTsKKyN1bmRlZiBTQU1FX0lOVEYKKworCXJldHVybiAwOworfQorCisvKiBUaGUgZmlybXdhcmUgaW4gdGhlIGZpbGVzeXN0ZW0gaXMgdXNhYmxlLCBidXQgc2hvdWxkIGl0IGJlIGluc3RhbGxlZD8KKyAqIFRoaXMgcm91dGluZSBleHBsYWlucyBpdHNlbGYgaW4gZGV0YWlsIGlmIGl0IGluZGljYXRlcyB0aGUgZmlsZXN5c3RlbQorICogZmlybXdhcmUgc2hvdWxkIGJlIGluc3RhbGxlZC4KKyAqLworc3RhdGljIGludCBjc2lvX3Nob3VsZF9pbnN0YWxsX2ZzX2Z3KHN0cnVjdCBjc2lvX2h3ICpodywgaW50IGNhcmRfZndfdXNhYmxlLAorCQkJCWludCBrLCBpbnQgYykKK3sKKwljb25zdCBjaGFyICpyZWFzb247CisKKwlpZiAoIWNhcmRfZndfdXNhYmxlKSB7CisJCXJlYXNvbiA9ICJpbmNvbXBhdGlibGUgb3IgdW51c2FibGUiOworCQlnb3RvIGluc3RhbGw7CiAJfQogCi0JLyogR2V0IGFuZCBzZXQgZGV2aWNlIGNhcGFiaWxpdGllcyAqLwotCXJ2ID0gY3Npb19jb25maWdfZGV2aWNlX2NhcHMoaHcpOwotCWlmIChydiAhPSAwKQotCQlnb3RvIG91dDsKKwlpZiAoayA+IGMpIHsKKwkJcmVhc29uID0gIm9sZGVyIHRoYW4gdGhlIHZlcnNpb24gc3VwcG9ydGVkIHdpdGggdGhpcyBkcml2ZXIiOworCQlnb3RvIGluc3RhbGw7CisJfQogCi0JLyogZGV2aWNlIHBhcmFtZXRlcnMgKi8KLQlydiA9IGNzaW9fZ2V0X2RldmljZV9wYXJhbXMoaHcpOwotCWlmIChydiAhPSAwKQotCQlnb3RvIG91dDsKKwlyZXR1cm4gMDsKIAotCS8qIENvbmZpZ3VyZSBTR0UgKi8KLQljc2lvX3dyX3NnZV9pbml0KGh3KTsKK2luc3RhbGw6CisJY3Npb19lcnIoaHcsICJmaXJtd2FyZSBvbiBjYXJkICgldS4ldS4ldS4ldSkgaXMgJXMsICIKKwkJImluc3RhbGxpbmcgZmlybXdhcmUgJXUuJXUuJXUuJXUgb24gY2FyZC5cbiIsCisJCUZXX0hEUl9GV19WRVJfTUFKT1JfRyhjKSwgRldfSERSX0ZXX1ZFUl9NSU5PUl9HKGMpLAorCQlGV19IRFJfRldfVkVSX01JQ1JPX0coYyksIEZXX0hEUl9GV19WRVJfQlVJTERfRyhjKSwgcmVhc29uLAorCQlGV19IRFJfRldfVkVSX01BSk9SX0coayksIEZXX0hEUl9GV19WRVJfTUlOT1JfRyhrKSwKKwkJRldfSERSX0ZXX1ZFUl9NSUNST19HKGspLCBGV19IRFJfRldfVkVSX0JVSUxEX0coaykpOwogCi0JLyogUG9zdCBldmVudCB0byBub3RpZnkgY29tcGxldGlvbiBvZiBjb25maWd1cmF0aW9uICovCi0JY3Npb19wb3N0X2V2ZW50KCZody0+c20sIENTSU9fSFdFX0lOSVQpOworCXJldHVybiAxOworfQogCi1vdXQ6Ci0JcmV0dXJuIHJ2Oworc3RhdGljIHN0cnVjdCBmd19pbmZvIGZ3X2luZm9fYXJyYXlbXSA9IHsKKwl7CisJCS5jaGlwID0gQ0hFTFNJT19UNSwKKwkJLmZzX25hbWUgPSBGV19DRkdfTkFNRV9UNSwKKwkJLmZ3X21vZF9uYW1lID0gRldfRk5BTUVfVDUsCisJCS5md19oZHIgPSB7CisJCQkuY2hpcCA9IEZXX0hEUl9DSElQX1Q1LAorCQkJLmZ3X3ZlciA9IF9fY3B1X3RvX2JlMzIoRldfVkVSU0lPTihUNSkpLAorCQkJLmludGZ2ZXJfbmljID0gRldfSU5URlZFUihUNSwgTklDKSwKKwkJCS5pbnRmdmVyX3ZuaWMgPSBGV19JTlRGVkVSKFQ1LCBWTklDKSwKKwkJCS5pbnRmdmVyX3JpID0gRldfSU5URlZFUihUNSwgUkkpLAorCQkJLmludGZ2ZXJfaXNjc2kgPSBGV19JTlRGVkVSKFQ1LCBJU0NTSSksCisJCQkuaW50ZnZlcl9mY29lID0gRldfSU5URlZFUihUNSwgRkNPRSksCisJCX0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBmd19pbmZvICpmaW5kX2Z3X2luZm8oaW50IGNoaXApCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmd19pbmZvX2FycmF5KTsgaSsrKSB7CisJCWlmIChmd19pbmZvX2FycmF5W2ldLmNoaXAgPT0gY2hpcCkKKwkJCXJldHVybiAmZndfaW5mb19hcnJheVtpXTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgY3Npb19od19wcmVwX2Z3KHN0cnVjdCBjc2lvX2h3ICpodywgc3RydWN0IGZ3X2luZm8gKmZ3X2luZm8sCisJICAgICAgIGNvbnN0IHU4ICpmd19kYXRhLCB1bnNpZ25lZCBpbnQgZndfc2l6ZSwKKwkgICAgICAgc3RydWN0IGZ3X2hkciAqY2FyZF9mdywgZW51bSBjc2lvX2Rldl9zdGF0ZSBzdGF0ZSwKKwkgICAgICAgaW50ICpyZXNldCkKK3sKKwlpbnQgcmV0LCBjYXJkX2Z3X3VzYWJsZSwgZnNfZndfdXNhYmxlOworCWNvbnN0IHN0cnVjdCBmd19oZHIgKmZzX2Z3OworCWNvbnN0IHN0cnVjdCBmd19oZHIgKmRydl9mdzsKKworCWRydl9mdyA9ICZmd19pbmZvLT5md19oZHI7CisKKwkvKiBSZWFkIHRoZSBoZWFkZXIgb2YgdGhlIGZpcm13YXJlIG9uIHRoZSBjYXJkICovCisJcmV0ID0gY3Npb19od19yZWFkX2ZsYXNoKGh3LCBGTEFTSF9GV19TVEFSVCwKKwkJCSAgICBzaXplb2YoKmNhcmRfZncpIC8gc2l6ZW9mKHVpbnQzMl90KSwKKwkJCSAgICAodWludDMyX3QgKiljYXJkX2Z3LCAxKTsKKwlpZiAocmV0ID09IDApIHsKKwkJY2FyZF9md191c2FibGUgPSBmd19jb21wYXRpYmxlKGRydl9mdywgKGNvbnN0IHZvaWQgKiljYXJkX2Z3KTsKKwl9IGVsc2UgeworCQljc2lvX2VycihodywKKwkJCSJVbmFibGUgdG8gcmVhZCBjYXJkJ3MgZmlybXdhcmUgaGVhZGVyOiAlZFxuIiwgcmV0KTsKKwkJY2FyZF9md191c2FibGUgPSAwOworCX0KKworCWlmIChmd19kYXRhICE9IE5VTEwpIHsKKwkJZnNfZncgPSAoY29uc3Qgdm9pZCAqKWZ3X2RhdGE7CisJCWZzX2Z3X3VzYWJsZSA9IGZ3X2NvbXBhdGlibGUoZHJ2X2Z3LCBmc19mdyk7CisJfSBlbHNlIHsKKwkJZnNfZncgPSBOVUxMOworCQlmc19md191c2FibGUgPSAwOworCX0KKworCWlmIChjYXJkX2Z3X3VzYWJsZSAmJiBjYXJkX2Z3LT5md192ZXIgPT0gZHJ2X2Z3LT5md192ZXIgJiYKKwkgICAgKCFmc19md191c2FibGUgfHwgZnNfZnctPmZ3X3ZlciA9PSBkcnZfZnctPmZ3X3ZlcikpIHsKKwkJLyogQ29tbW9uIGNhc2U6IHRoZSBmaXJtd2FyZSBvbiB0aGUgY2FyZCBpcyBhbiBleGFjdCBtYXRjaCBhbmQKKwkJICogdGhlIGZpbGVzeXN0ZW0gb25lIGlzIGFuIGV4YWN0IG1hdGNoIHRvbywgb3IgdGhlIGZpbGVzeXN0ZW0KKwkJICogb25lIGlzIGFic2VudC9pbmNvbXBhdGlibGUuCisJCSAqLworCX0gZWxzZSBpZiAoZnNfZndfdXNhYmxlICYmIHN0YXRlID09IENTSU9fREVWX1NUQVRFX1VOSU5JVCAmJgorCQkgICBjc2lvX3Nob3VsZF9pbnN0YWxsX2ZzX2Z3KGh3LCBjYXJkX2Z3X3VzYWJsZSwKKwkJCQkJYmUzMl90b19jcHUoZnNfZnctPmZ3X3ZlciksCisJCQkJCWJlMzJfdG9fY3B1KGNhcmRfZnctPmZ3X3ZlcikpKSB7CisJCXJldCA9IGNzaW9faHdfZndfdXBncmFkZShodywgaHctPnBmbiwgZndfZGF0YSwKKwkJCQkgICAgIGZ3X3NpemUsIDApOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWNzaW9fZXJyKGh3LAorCQkJCSJmYWlsZWQgdG8gaW5zdGFsbCBmaXJtd2FyZTogJWRcbiIsIHJldCk7CisJCQlnb3RvIGJ5ZTsKKwkJfQorCisJCS8qIEluc3RhbGxlZCBzdWNjZXNzZnVsbHksIHVwZGF0ZSB0aGUgY2FjaGVkIGhlYWRlciB0b28uICovCisJCW1lbWNweShjYXJkX2Z3LCBmc19mdywgc2l6ZW9mKCpjYXJkX2Z3KSk7CisJCWNhcmRfZndfdXNhYmxlID0gMTsKKwkJKnJlc2V0ID0gMDsJLyogYWxyZWFkeSByZXNldCBhcyBwYXJ0IG9mIGxvYWRfZncgKi8KKwl9CisKKwlpZiAoIWNhcmRfZndfdXNhYmxlKSB7CisJCXVpbnQzMl90IGQsIGMsIGs7CisKKwkJZCA9IGJlMzJfdG9fY3B1KGRydl9mdy0+ZndfdmVyKTsKKwkJYyA9IGJlMzJfdG9fY3B1KGNhcmRfZnctPmZ3X3Zlcik7CisJCWsgPSBmc19mdyA/IGJlMzJfdG9fY3B1KGZzX2Z3LT5md192ZXIpIDogMDsKKworCQljc2lvX2VycihodywgIkNhbm5vdCBmaW5kIGEgdXNhYmxlIGZpcm13YXJlOiAiCisJCQkiY2hpcCBzdGF0ZSAlZCwgIgorCQkJImRyaXZlciBjb21waWxlZCB3aXRoICVkLiVkLiVkLiVkLCAiCisJCQkiY2FyZCBoYXMgJWQuJWQuJWQuJWQsIGZpbGVzeXN0ZW0gaGFzICVkLiVkLiVkLiVkXG4iLAorCQkJc3RhdGUsCisJCQlGV19IRFJfRldfVkVSX01BSk9SX0coZCksIEZXX0hEUl9GV19WRVJfTUlOT1JfRyhkKSwKKwkJCUZXX0hEUl9GV19WRVJfTUlDUk9fRyhkKSwgRldfSERSX0ZXX1ZFUl9CVUlMRF9HKGQpLAorCQkJRldfSERSX0ZXX1ZFUl9NQUpPUl9HKGMpLCBGV19IRFJfRldfVkVSX01JTk9SX0coYyksCisJCQlGV19IRFJfRldfVkVSX01JQ1JPX0coYyksIEZXX0hEUl9GV19WRVJfQlVJTERfRyhjKSwKKwkJCUZXX0hEUl9GV19WRVJfTUFKT1JfRyhrKSwgRldfSERSX0ZXX1ZFUl9NSU5PUl9HKGspLAorCQkJRldfSERSX0ZXX1ZFUl9NSUNST19HKGspLCBGV19IRFJfRldfVkVSX0JVSUxEX0coaykpOworCQlyZXQgPSBFSU5WQUw7CisJCWdvdG8gYnllOworCX0KKworCS8qIFdlJ3JlIHVzaW5nIHdoYXRldmVyJ3Mgb24gdGhlIGNhcmQgYW5kIGl0J3Mga25vd24gdG8gYmUgZ29vZC4gKi8KKwlody0+ZndyZXYgPSBiZTMyX3RvX2NwdShjYXJkX2Z3LT5md192ZXIpOworCWh3LT50cF92ZXJzID0gYmUzMl90b19jcHUoY2FyZF9mdy0+dHBfbWljcm9jb2RlX3Zlcik7CisKK2J5ZToKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtMTk3Nyw0OCArMTk4OSw1MiBAQAogICogbGF0ZXN0IGZpcm13YXJlIEVDQU5DRUxFRCBpcyByZXR1cm5lZAogICovCiBzdGF0aWMgaW50Ci1jc2lvX2h3X2ZsYXNoX2Z3KHN0cnVjdCBjc2lvX2h3ICpodykKK2NzaW9faHdfZmxhc2hfZncoc3RydWN0IGNzaW9faHcgKmh3LCBpbnQgKnJlc2V0KQogewogCWludCByZXQgPSAtRUNBTkNFTEVEOwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0JY29uc3Qgc3RydWN0IGZ3X2hkciAqaGRyOwotCXUzMiBmd192ZXI7CisJc3RydWN0IGZ3X2luZm8gKmZ3X2luZm87CisJc3RydWN0IGZ3X2hkciAqY2FyZF9mdzsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IGh3LT5wZGV2OwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwY2lfZGV2LT5kZXYgOworCWNvbnN0IHU4ICpmd19kYXRhID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgZndfc2l6ZSA9IDA7CiAKLQlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIENTSU9fRldfRk5BTUUoaHcpLCBkZXYpIDwgMCkgewotCQljc2lvX2VycihodywgImNvdWxkIG5vdCBmaW5kIGZpcm13YXJlIGltYWdlICVzLCBlcnI6ICVkXG4iLAotCQkJIENTSU9fRldfRk5BTUUoaHcpLCByZXQpOworCS8qIFRoaXMgaXMgdGhlIGZpcm13YXJlIHdob3NlIGhlYWRlcnMgdGhlIGRyaXZlciB3YXMgY29tcGlsZWQKKwkgKiBhZ2FpbnN0CisJICovCisJZndfaW5mbyA9IGZpbmRfZndfaW5mbyhDSEVMU0lPX0NISVBfVkVSU0lPTihody0+Y2hpcF9pZCkpOworCWlmIChmd19pbmZvID09IE5VTEwpIHsKKwkJY3Npb19lcnIoaHcsCisJCQkidW5hYmxlIHRvIGdldCBmaXJtd2FyZSBpbmZvIGZvciBjaGlwICVkLlxuIiwKKwkJCUNIRUxTSU9fQ0hJUF9WRVJTSU9OKGh3LT5jaGlwX2lkKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWhkciA9IChjb25zdCBzdHJ1Y3QgZndfaGRyICopZnctPmRhdGE7Ci0JZndfdmVyID0gbnRvaGwoaGRyLT5md192ZXIpOwotCWlmIChGV19IRFJfRldfVkVSX01BSk9SX0coZndfdmVyKSAhPSBGV19WRVJTSU9OX01BSk9SKGh3KSkKLQkJcmV0dXJuIC1FSU5WQUw7ICAgICAgLyogd3JvbmcgbWFqb3IgdmVyc2lvbiwgd29uJ3QgZG8gKi8KKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIEZXX0ZOQU1FX1Q1LCBkZXYpIDwgMCkgeworCQljc2lvX2VycihodywgImNvdWxkIG5vdCBmaW5kIGZpcm13YXJlIGltYWdlICVzLCBlcnI6ICVkXG4iLAorCQkJIEZXX0ZOQU1FX1Q1LCByZXQpOworCX0gZWxzZSB7CisJCWZ3X2RhdGEgPSBmdy0+ZGF0YTsKKwkJZndfc2l6ZSA9IGZ3LT5zaXplOworCX0KIAotCS8qCi0JICogSWYgdGhlIGZsYXNoIEZXIGlzIHVudXNhYmxlIG9yIHdlIGZvdW5kIHNvbWV0aGluZyBuZXdlciwgbG9hZCBpdC4KKwkvKiBhbGxvY2F0ZSBtZW1vcnkgdG8gcmVhZCB0aGUgaGVhZGVyIG9mIHRoZSBmaXJtd2FyZSBvbiB0aGUKKwkgKiBjYXJkCiAJICovCi0JaWYgKEZXX0hEUl9GV19WRVJfTUFKT1JfRyhody0+ZndyZXYpICE9IEZXX1ZFUlNJT05fTUFKT1IoaHcpIHx8Ci0JICAgIGZ3X3ZlciA+IGh3LT5md3JldikgewotCQlyZXQgPSBjc2lvX2h3X2Z3X3VwZ3JhZGUoaHcsIGh3LT5wZm4sIGZ3LT5kYXRhLCBmdy0+c2l6ZSwKLQkJCQkgICAgLypmb3JjZT0qL2ZhbHNlKTsKLQkJaWYgKCFyZXQpCi0JCQljc2lvX2luZm8oaHcsCi0JCQkJICAiZmlybXdhcmUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcEk0IGZyb20gJXNcbiIsCi0JCQkJICAmaGRyLT5md192ZXIsIENTSU9fRldfRk5BTUUoaHcpKTsKLQkJZWxzZQotCQkJY3Npb19lcnIoaHcsICJmaXJtd2FyZSB1cGdyYWRlIGZhaWxlZCEgZXJyPSVkXG4iLCByZXQpOwotCX0gZWxzZQotCQlyZXQgPSAtRUlOVkFMOworCWNhcmRfZncgPSBrbWFsbG9jKHNpemVvZigqY2FyZF9mdyksIEdGUF9LRVJORUwpOwogCi0JcmVsZWFzZV9maXJtd2FyZShmdyk7CisJLyogdXBncmFkZSBGVyBsb2dpYyAqLworCXJldCA9IGNzaW9faHdfcHJlcF9mdyhodywgZndfaW5mbywgZndfZGF0YSwgZndfc2l6ZSwgY2FyZF9mdywKKwkJCSBody0+Zndfc3RhdGUsIHJlc2V0KTsKIAorCS8qIENsZWFuaW5nIHVwICovCisJaWYgKGZ3ICE9IE5VTEwpCisJCXJlbGVhc2VfZmlybXdhcmUoZncpOworCWtmcmVlKGNhcmRfZncpOwogCXJldHVybiByZXQ7CiB9CiAKLQogLyoKICAqIGNzaW9faHdfY29uZmlndXJlIC0gQ29uZmlndXJlIEhXCiAgKiBAaHcgLSBIVyBtb2R1bGUKQEAgLTIwMzksNyArMjA1NSw3IEBACiAJfQogCiAJLyogSFcgdmVyc2lvbiAqLwotCWh3LT5jaGlwX3ZlciA9IChjaGFyKWNzaW9fcmRfcmVnMzIoaHcsIFBMX1JFVik7CisJaHctPmNoaXBfdmVyID0gKGNoYXIpY3Npb19yZF9yZWczMihodywgUExfUkVWX0EpOwogCiAJLyogTmVlZGVkIGZvciBGVyBkb3dubG9hZCAqLwogCXJ2ID0gY3Npb19od19nZXRfZmxhc2hfcGFyYW1zKGh3KTsKQEAgLTIwNzQsNTEgKzIwOTAsNDQgQEAKIAlpZiAocnYgIT0gMCkKIAkJZ290byBvdXQ7CiAKKwljc2lvX2h3X2dldF9md192ZXJzaW9uKGh3LCAmaHctPmZ3cmV2KTsKKwljc2lvX2h3X2dldF90cF92ZXJzaW9uKGh3LCAmaHctPnRwX3ZlcnMpOwogCWlmIChjc2lvX2lzX2h3X21hc3RlcihodykgJiYgaHctPmZ3X3N0YXRlICE9IENTSU9fREVWX1NUQVRFX0lOSVQpIHsKLQkJcnYgPSBjc2lvX2h3X2NoZWNrX2Z3X3ZlcnNpb24oaHcpOwotCQlpZiAocnYgPT0gLUVJTlZBTCkgewogCiAJCQkvKiBEbyBmaXJtd2FyZSB1cGRhdGUgKi8KLQkJCXNwaW5fdW5sb2NrX2lycSgmaHctPmxvY2spOwotCQkJcnYgPSBjc2lvX2h3X2ZsYXNoX2Z3KGh3KTsKLQkJCXNwaW5fbG9ja19pcnEoJmh3LT5sb2NrKTsKLQotCQkJaWYgKHJ2ID09IDApIHsKLQkJCQlyZXNldCA9IDA7Ci0JCQkJLyoKLQkJCQkgKiBOb3RlIHRoYXQgdGhlIGNoaXAgd2FzIHJlc2V0IGFzIHBhcnQgb2YgdGhlCi0JCQkJICogZmlybXdhcmUgdXBncmFkZSBzbyB3ZSBkb24ndCByZXNldCBpdCBhZ2FpbgotCQkJCSAqIGJlbG93IGFuZCBncmFiIHRoZSBuZXcgZmlybXdhcmUgdmVyc2lvbi4KLQkJCQkgKi8KLQkJCQlydiA9IGNzaW9faHdfY2hlY2tfZndfdmVyc2lvbihodyk7Ci0JCQl9Ci0JCX0KLQkJLyoKLQkJICogSWYgdGhlIGZpcm13YXJlIGRvZXNuJ3Qgc3VwcG9ydCBDb25maWd1cmF0aW9uCi0JCSAqIEZpbGVzLCB1c2UgdGhlIG9sZCBEcml2ZXItYmFzZWQsIGhhcmQtd2lyZWQKLQkJICogaW5pdGlhbGl6YXRpb24uICBPdGhlcndpc2UsIHRyeSB1c2luZyB0aGUKLQkJICogQ29uZmlndXJhdGlvbiBGaWxlIHN1cHBvcnQgYW5kIGZhbGwgYmFjayB0byB0aGUKLQkJICogRHJpdmVyLWJhc2VkIGluaXRpYWxpemF0aW9uIGlmIHRoZXJlJ3Mgbm8KLQkJICogQ29uZmlndXJhdGlvbiBGaWxlIGZvdW5kLgotCQkgKi8KLQkJaWYgKGNzaW9faHdfY2hlY2tfZndjb25maWcoaHcsIHBhcmFtKSA9PSAwKSB7Ci0JCQlydiA9IGNzaW9faHdfdXNlX2Z3Y29uZmlnKGh3LCByZXNldCwgcGFyYW0pOwotCQkJaWYgKHJ2ID09IC1FTk9FTlQpCi0JCQkJZ290byBvdXQ7Ci0JCQlpZiAocnYgIT0gMCkgewotCQkJCWNzaW9faW5mbyhodywKLQkJCQkgICAgIk5vIENvbmZpZ3VyYXRpb24gRmlsZSBwcmVzZW50ICIKLQkJCQkgICAgIm9uIGFkYXB0ZXIuICBVc2luZyBoYXJkLXdpcmVkICIKLQkJCQkgICAgImNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy5cbiIpOwotCQkJCXJ2ID0gY3Npb19od19ub19md2NvbmZpZyhodywgcmVzZXQpOwotCQkJfQotCQl9IGVsc2UgewotCQkJcnYgPSBjc2lvX2h3X25vX2Z3Y29uZmlnKGh3LCByZXNldCk7Ci0JCX0KKwkJc3Bpbl91bmxvY2tfaXJxKCZody0+bG9jayk7CisJCXJ2ID0gY3Npb19od19mbGFzaF9mdyhodywgJnJlc2V0KTsKKwkJc3Bpbl9sb2NrX2lycSgmaHctPmxvY2spOwogCiAJCWlmIChydiAhPSAwKQogCQkJZ290byBvdXQ7CiAKKwkJLyogSWYgdGhlIGZpcm13YXJlIGRvZXNuJ3Qgc3VwcG9ydCBDb25maWd1cmF0aW9uIEZpbGVzLAorCQkgKiByZXR1cm4gYW4gZXJyb3IuCisJCSAqLworCQlydiA9IGNzaW9faHdfY2hlY2tfZndjb25maWcoaHcsIHBhcmFtKTsKKwkJaWYgKHJ2ICE9IDApIHsKKwkJCWNzaW9faW5mbyhodywgIkZpcm13YXJlIGRvZXNuJ3Qgc3VwcG9ydCAiCisJCQkJICAiRmlybXdhcmUgQ29uZmlndXJhdGlvbiBmaWxlc1xuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIFRoZSBmaXJtd2FyZSBwcm92aWRlcyB1cyB3aXRoIGEgbWVtb3J5IGJ1ZmZlciB3aGVyZSB3ZSBjYW4KKwkJICogbG9hZCBhIENvbmZpZ3VyYXRpb24gRmlsZSBmcm9tIHRoZSBob3N0IGlmIHdlIHdhbnQgdG8KKwkJICogb3ZlcnJpZGUgdGhlIENvbmZpZ3VyYXRpb24gRmlsZSBpbiBmbGFzaC4KKwkJICovCisJCXJ2ID0gY3Npb19od191c2VfZndjb25maWcoaHcsIHJlc2V0LCBwYXJhbSk7CisJCWlmIChydiA9PSAtRU5PRU5UKSB7CisJCQljc2lvX2luZm8oaHcsICJDb3VsZCBub3QgaW5pdGlhbGl6ZSAiCisJCQkJICAiYWRhcHRlciwgZXJyb3IlZFxuIiwgcnYpOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKHJ2ICE9IDApIHsKKwkJCWNzaW9faW5mbyhodywgIkNvdWxkIG5vdCBpbml0aWFsaXplICIKKwkJCQkgICJhZGFwdGVyLCBlcnJvciVkXG4iLCBydik7CisJCQlnb3RvIG91dDsKKwkJfQorCiAJfSBlbHNlIHsKIAkJaWYgKGh3LT5md19zdGF0ZSA9PSBDU0lPX0RFVl9TVEFURV9JTklUKSB7CiAKQEAgLTIyMTcsNyArMjIyNiw3IEBACiAJcmV0dXJuOwogfQogCi0jZGVmaW5lIFBGX0lOVFJfTUFTSyAoUEZTVyB8IFBGQ0lNKQorI2RlZmluZSBQRl9JTlRSX01BU0sgKFBGU1dfRiB8IFBGQ0lNX0YpCiAKIC8qCiAgKiBjc2lvX2h3X2ludHJfZW5hYmxlIC0gRW5hYmxlIEhXIGludGVycnVwdHMKQEAgLTIyMjksMjEgKzIyMzgsMjEgQEAKIGNzaW9faHdfaW50cl9lbmFibGUoc3RydWN0IGNzaW9faHcgKmh3KQogewogCXVpbnQxNl90IHZlYyA9ICh1aW50MTZfdCljc2lvX2dldF9tYl9pbnRyX2lkeChjc2lvX2h3X3RvX21ibShodykpOwotCXVpbnQzMl90IHBmID0gU09VUkNFUEZfR0VUKGNzaW9fcmRfcmVnMzIoaHcsIFBMX1dIT0FNSSkpOwotCXVpbnQzMl90IHBsID0gY3Npb19yZF9yZWczMihodywgUExfSU5UX0VOQUJMRSk7CisJdWludDMyX3QgcGYgPSBTT1VSQ0VQRl9HKGNzaW9fcmRfcmVnMzIoaHcsIFBMX1dIT0FNSV9BKSk7CisJdWludDMyX3QgcGwgPSBjc2lvX3JkX3JlZzMyKGh3LCBQTF9JTlRfRU5BQkxFX0EpOwogCiAJLyoKIAkgKiBTZXQgYWl2ZWMgZm9yIE1TSS9NU0lYLiBQQ0lFX1BGX0NGRy5JTlRYVHlwZSBpcyBzZXQgdXAKIAkgKiBieSBGVywgc28gZG8gbm90aGluZyBmb3IgSU5UWC4KIAkgKi8KIAlpZiAoaHctPmludHJfbW9kZSA9PSBDU0lPX0lNX01TSVgpCi0JCWNzaW9fc2V0X3JlZ19maWVsZChodywgTVlQRl9SRUcoUENJRV9QRl9DRkcpLAotCQkJCSAgIEFJVkVDKEFJVkVDX01BU0spLCB2ZWMpOworCQljc2lvX3NldF9yZWdfZmllbGQoaHcsIE1ZUEZfUkVHKFBDSUVfUEZfQ0ZHX0EpLAorCQkJCSAgIEFJVkVDX1YoQUlWRUNfTSksIHZlYyk7CiAJZWxzZSBpZiAoaHctPmludHJfbW9kZSA9PSBDU0lPX0lNX01TSSkKLQkJY3Npb19zZXRfcmVnX2ZpZWxkKGh3LCBNWVBGX1JFRyhQQ0lFX1BGX0NGRyksCi0JCQkJICAgQUlWRUMoQUlWRUNfTUFTSyksIDApOworCQljc2lvX3NldF9yZWdfZmllbGQoaHcsIE1ZUEZfUkVHKFBDSUVfUEZfQ0ZHX0EpLAorCQkJCSAgIEFJVkVDX1YoQUlWRUNfTSksIDApOwogCi0JY3Npb193cl9yZWczMihodywgUEZfSU5UUl9NQVNLLCBNWVBGX1JFRyhQTF9QRl9JTlRfRU5BQkxFKSk7CisJY3Npb193cl9yZWczMihodywgUEZfSU5UUl9NQVNLLCBNWVBGX1JFRyhQTF9QRl9JTlRfRU5BQkxFX0EpKTsKIAogCS8qIFR1cm4gb24gTUIgaW50ZXJydXB0cyAtIHRoaXMgd2lsbCBpbnRlcm5hbGx5IGZsdXNoIFBJTyBhcyB3ZWxsICovCiAJY3Npb19tYl9pbnRyX2VuYWJsZShodyk7CkBAIC0yMjUzLDE5ICsyMjYyLDE5IEBACiAJCS8qCiAJCSAqIERpc2FibGUgdGhlIFNlcmlhbCBGTEFTSCBpbnRlcnJ1cHQsIGlmIGVuYWJsZWQhCiAJCSAqLwotCQlwbCAmPSAoflNGKTsKLQkJY3Npb193cl9yZWczMihodywgcGwsIFBMX0lOVF9FTkFCTEUpOworCQlwbCAmPSAoflNGX0YpOworCQljc2lvX3dyX3JlZzMyKGh3LCBwbCwgUExfSU5UX0VOQUJMRV9BKTsKIAotCQljc2lvX3dyX3JlZzMyKGh3LCBFUlJfQ1BMX0VYQ0VFRF9JUUVfU0laRSB8Ci0JCQkgICAgICBFR1JFU1NfU0laRV9FUlIgfCBFUlJfSU5WQUxJRF9DSURYX0lOQyB8Ci0JCQkgICAgICBFUlJfQ1BMX09QQ09ERV8wIHwgRVJSX0RST1BQRURfREIgfAotCQkJICAgICAgRVJSX0RBVEFfQ1BMX09OX0hJR0hfUUlEMSB8Ci0JCQkgICAgICBFUlJfREFUQV9DUExfT05fSElHSF9RSUQwIHwgRVJSX0JBRF9EQl9QSURYMyB8Ci0JCQkgICAgICBFUlJfQkFEX0RCX1BJRFgyIHwgRVJSX0JBRF9EQl9QSURYMSB8Ci0JCQkgICAgICBFUlJfQkFEX0RCX1BJRFgwIHwgRVJSX0lOR19DVFhUX1BSSU8gfAotCQkJICAgICAgRVJSX0VHUl9DVFhUX1BSSU8gfCBJTkdSRVNTX1NJWkVfRVJSLAotCQkJICAgICAgU0dFX0lOVF9FTkFCTEUzKTsKLQkJY3Npb19zZXRfcmVnX2ZpZWxkKGh3LCBQTF9JTlRfTUFQMCwgMCwgMSA8PCBwZik7CisJCWNzaW9fd3JfcmVnMzIoaHcsIEVSUl9DUExfRVhDRUVEX0lRRV9TSVpFX0YgfAorCQkJICAgICAgRUdSRVNTX1NJWkVfRVJSX0YgfCBFUlJfSU5WQUxJRF9DSURYX0lOQ19GIHwKKwkJCSAgICAgIEVSUl9DUExfT1BDT0RFXzBfRiB8IEVSUl9EUk9QUEVEX0RCX0YgfAorCQkJICAgICAgRVJSX0RBVEFfQ1BMX09OX0hJR0hfUUlEMV9GIHwKKwkJCSAgICAgIEVSUl9EQVRBX0NQTF9PTl9ISUdIX1FJRDBfRiB8IEVSUl9CQURfREJfUElEWDNfRiB8CisJCQkgICAgICBFUlJfQkFEX0RCX1BJRFgyX0YgfCBFUlJfQkFEX0RCX1BJRFgxX0YgfAorCQkJICAgICAgRVJSX0JBRF9EQl9QSURYMF9GIHwgRVJSX0lOR19DVFhUX1BSSU9fRiB8CisJCQkgICAgICBFUlJfRUdSX0NUWFRfUFJJT19GIHwgSU5HUkVTU19TSVpFX0VSUl9GLAorCQkJICAgICAgU0dFX0lOVF9FTkFCTEUzX0EpOworCQljc2lvX3NldF9yZWdfZmllbGQoaHcsIFBMX0lOVF9NQVAwX0EsIDAsIDEgPDwgcGYpOwogCX0KIAogCWh3LT5mbGFncyB8PSBDU0lPX0hXRl9IV19JTlRSX0VOQUJMRUQ7CkBAIC0yMjgxLDE2ICsyMjkwLDE2IEBACiB2b2lkCiBjc2lvX2h3X2ludHJfZGlzYWJsZShzdHJ1Y3QgY3Npb19odyAqaHcpCiB7Ci0JdWludDMyX3QgcGYgPSBTT1VSQ0VQRl9HRVQoY3Npb19yZF9yZWczMihodywgUExfV0hPQU1JKSk7CisJdWludDMyX3QgcGYgPSBTT1VSQ0VQRl9HKGNzaW9fcmRfcmVnMzIoaHcsIFBMX1dIT0FNSV9BKSk7CiAKIAlpZiAoIShody0+ZmxhZ3MgJiBDU0lPX0hXRl9IV19JTlRSX0VOQUJMRUQpKQogCQlyZXR1cm47CiAKIAlody0+ZmxhZ3MgJj0gfkNTSU9fSFdGX0hXX0lOVFJfRU5BQkxFRDsKIAotCWNzaW9fd3JfcmVnMzIoaHcsIDAsIE1ZUEZfUkVHKFBMX1BGX0lOVF9FTkFCTEUpKTsKKwljc2lvX3dyX3JlZzMyKGh3LCAwLCBNWVBGX1JFRyhQTF9QRl9JTlRfRU5BQkxFX0EpKTsKIAlpZiAoY3Npb19pc19od19tYXN0ZXIoaHcpKQotCQljc2lvX3NldF9yZWdfZmllbGQoaHcsIFBMX0lOVF9NQVAwLCAxIDw8IHBmLCAwKTsKKwkJY3Npb19zZXRfcmVnX2ZpZWxkKGh3LCBQTF9JTlRfTUFQMF9BLCAxIDw8IHBmLCAwKTsKIAogCS8qIFR1cm4gb2ZmIE1CIGludGVycnVwdHMgKi8KIAljc2lvX21iX2ludHJfZGlzYWJsZShodyk7CkBAIC0yMzAwLDcgKzIzMDksNyBAQAogdm9pZAogY3Npb19od19mYXRhbF9lcnIoc3RydWN0IGNzaW9faHcgKmh3KQogewotCWNzaW9fc2V0X3JlZ19maWVsZChodywgU0dFX0NPTlRST0wsIEdMT0JBTEVOQUJMRSwgMCk7CisJY3Npb19zZXRfcmVnX2ZpZWxkKGh3LCBTR0VfQ09OVFJPTF9BLCBHTE9CQUxFTkFCTEVfRiwgMCk7CiAJY3Npb19od19pbnRyX2Rpc2FibGUoaHcpOwogCiAJLyogRG8gbm90IHJlc2V0IEhXLCB3ZSBtYXkgbmVlZCBGVyBzdGF0ZSBmb3IgZGVidWdnaW5nICovCkBAIC0yNTk0LDcgKzI2MDMsNyBAQAogCQkgKiByZWdpc3RlciBkaXJlY3RseS4KIAkJICovCiAJCWNzaW9fZXJyKGh3LCAiUmVzZXR0aW5nIEhXIGFuZCB3YWl0aW5nIDIgc2Vjb25kcy4uLlxuIik7Ci0JCWNzaW9fd3JfcmVnMzIoaHcsIFBJT1JTVE1PREUgfCBQSU9SU1QsIFBMX1JTVCk7CisJCWNzaW9fd3JfcmVnMzIoaHcsIFBJT1JTVE1PREVfRiB8IFBJT1JTVF9GLCBQTF9SU1RfQSk7CiAJCW1kZWxheSgyMDAwKTsKIAkJYnJlYWs7CiAKQEAgLTI2ODIsMTEgKzI2OTEsMTEgQEAKIHsKIAlzdGF0aWMgc3RydWN0IGludHJfaW5mbyB0cF9pbnRyX2luZm9bXSA9IHsKIAkJeyAweDNmZmZmZmZmLCAiVFAgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBGTE1UWEZMU1RFTVBUWSwgIlRQIG91dCBvZiBUeCBwYWdlcyIsIC0xLCAxIH0sCisJCXsgRkxNVFhGTFNURU1QVFlfRiwgIlRQIG91dCBvZiBUeCBwYWdlcyIsIC0xLCAxIH0sCiAJCXsgMCwgTlVMTCwgMCwgMCB9CiAJfTsKIAotCWlmIChjc2lvX2hhbmRsZV9pbnRyX3N0YXR1cyhodywgVFBfSU5UX0NBVVNFLCB0cF9pbnRyX2luZm8pKQorCWlmIChjc2lvX2hhbmRsZV9pbnRyX3N0YXR1cyhodywgVFBfSU5UX0NBVVNFX0EsIHRwX2ludHJfaW5mbykpCiAJCWNzaW9faHdfZmF0YWxfZXJyKGh3KTsKIH0KIApAQCAtMjY5OCw1MiArMjcwNyw1MiBAQAogCXVpbnQ2NF90IHY7CiAKIAlzdGF0aWMgc3RydWN0IGludHJfaW5mbyBzZ2VfaW50cl9pbmZvW10gPSB7Ci0JCXsgRVJSX0NQTF9FWENFRURfSVFFX1NJWkUsCisJCXsgRVJSX0NQTF9FWENFRURfSVFFX1NJWkVfRiwKIAkJICAiU0dFIHJlY2VpdmVkIENQTCBleGNlZWRpbmcgSVFFIHNpemUiLCAtMSwgMSB9LAotCQl7IEVSUl9JTlZBTElEX0NJRFhfSU5DLAorCQl7IEVSUl9JTlZBTElEX0NJRFhfSU5DX0YsCiAJCSAgIlNHRSBHVFMgQ0lEWCBpbmNyZW1lbnQgdG9vIGxhcmdlIiwgLTEsIDAgfSwKLQkJeyBFUlJfQ1BMX09QQ09ERV8wLCAiU0dFIHJlY2VpdmVkIDAtbGVuZ3RoIENQTCIsIC0xLCAwIH0sCi0JCXsgRVJSX0RST1BQRURfREIsICJTR0UgZG9vcmJlbGwgZHJvcHBlZCIsIC0xLCAwIH0sCi0JCXsgRVJSX0RBVEFfQ1BMX09OX0hJR0hfUUlEMSB8IEVSUl9EQVRBX0NQTF9PTl9ISUdIX1FJRDAsCisJCXsgRVJSX0NQTF9PUENPREVfMF9GLCAiU0dFIHJlY2VpdmVkIDAtbGVuZ3RoIENQTCIsIC0xLCAwIH0sCisJCXsgRVJSX0RST1BQRURfREJfRiwgIlNHRSBkb29yYmVsbCBkcm9wcGVkIiwgLTEsIDAgfSwKKwkJeyBFUlJfREFUQV9DUExfT05fSElHSF9RSUQxX0YgfCBFUlJfREFUQV9DUExfT05fSElHSF9RSUQwX0YsCiAJCSAgIlNHRSBJUUlEID4gMTAyMyByZWNlaXZlZCBDUEwgZm9yIEZMIiwgLTEsIDAgfSwKLQkJeyBFUlJfQkFEX0RCX1BJRFgzLCAiU0dFIERCUCAzIHBpZHggaW5jcmVtZW50IHRvbyBsYXJnZSIsIC0xLAorCQl7IEVSUl9CQURfREJfUElEWDNfRiwgIlNHRSBEQlAgMyBwaWR4IGluY3JlbWVudCB0b28gbGFyZ2UiLCAtMSwKIAkJICAwIH0sCi0JCXsgRVJSX0JBRF9EQl9QSURYMiwgIlNHRSBEQlAgMiBwaWR4IGluY3JlbWVudCB0b28gbGFyZ2UiLCAtMSwKKwkJeyBFUlJfQkFEX0RCX1BJRFgyX0YsICJTR0UgREJQIDIgcGlkeCBpbmNyZW1lbnQgdG9vIGxhcmdlIiwgLTEsCiAJCSAgMCB9LAotCQl7IEVSUl9CQURfREJfUElEWDEsICJTR0UgREJQIDEgcGlkeCBpbmNyZW1lbnQgdG9vIGxhcmdlIiwgLTEsCisJCXsgRVJSX0JBRF9EQl9QSURYMV9GLCAiU0dFIERCUCAxIHBpZHggaW5jcmVtZW50IHRvbyBsYXJnZSIsIC0xLAogCQkgIDAgfSwKLQkJeyBFUlJfQkFEX0RCX1BJRFgwLCAiU0dFIERCUCAwIHBpZHggaW5jcmVtZW50IHRvbyBsYXJnZSIsIC0xLAorCQl7IEVSUl9CQURfREJfUElEWDBfRiwgIlNHRSBEQlAgMCBwaWR4IGluY3JlbWVudCB0b28gbGFyZ2UiLCAtMSwKIAkJICAwIH0sCi0JCXsgRVJSX0lOR19DVFhUX1BSSU8sCisJCXsgRVJSX0lOR19DVFhUX1BSSU9fRiwKIAkJICAiU0dFIHRvbyBtYW55IHByaW9yaXR5IGluZ3Jlc3MgY29udGV4dHMiLCAtMSwgMCB9LAotCQl7IEVSUl9FR1JfQ1RYVF9QUklPLAorCQl7IEVSUl9FR1JfQ1RYVF9QUklPX0YsCiAJCSAgIlNHRSB0b28gbWFueSBwcmlvcml0eSBlZ3Jlc3MgY29udGV4dHMiLCAtMSwgMCB9LAotCQl7IElOR1JFU1NfU0laRV9FUlIsICJTR0UgaWxsZWdhbCBpbmdyZXNzIFFJRCIsIC0xLCAwIH0sCi0JCXsgRUdSRVNTX1NJWkVfRVJSLCAiU0dFIGlsbGVnYWwgZWdyZXNzIFFJRCIsIC0xLCAwIH0sCisJCXsgSU5HUkVTU19TSVpFX0VSUl9GLCAiU0dFIGlsbGVnYWwgaW5ncmVzcyBRSUQiLCAtMSwgMCB9LAorCQl7IEVHUkVTU19TSVpFX0VSUl9GLCAiU0dFIGlsbGVnYWwgZWdyZXNzIFFJRCIsIC0xLCAwIH0sCiAJCXsgMCwgTlVMTCwgMCwgMCB9CiAJfTsKIAotCXYgPSAodWludDY0X3QpY3Npb19yZF9yZWczMihodywgU0dFX0lOVF9DQVVTRTEpIHwKLQkgICAgKCh1aW50NjRfdCljc2lvX3JkX3JlZzMyKGh3LCBTR0VfSU5UX0NBVVNFMikgPDwgMzIpOworCXYgPSAodWludDY0X3QpY3Npb19yZF9yZWczMihodywgU0dFX0lOVF9DQVVTRTFfQSkgfAorCSAgICAoKHVpbnQ2NF90KWNzaW9fcmRfcmVnMzIoaHcsIFNHRV9JTlRfQ0FVU0UyX0EpIDw8IDMyKTsKIAlpZiAodikgewogCQljc2lvX2ZhdGFsKGh3LCAiU0dFIHBhcml0eSBlcnJvciAoJSNsbHgpXG4iLAogCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpdik7CiAJCWNzaW9fd3JfcmVnMzIoaHcsICh1aW50MzJfdCkodiAmIDB4RkZGRkZGRkYpLAotCQkJCQkJU0dFX0lOVF9DQVVTRTEpOwotCQljc2lvX3dyX3JlZzMyKGh3LCAodWludDMyX3QpKHYgPj4gMzIpLCBTR0VfSU5UX0NBVVNFMik7CisJCQkJCQlTR0VfSU5UX0NBVVNFMV9BKTsKKwkJY3Npb193cl9yZWczMihodywgKHVpbnQzMl90KSh2ID4+IDMyKSwgU0dFX0lOVF9DQVVTRTJfQSk7CiAJfQogCi0JdiB8PSBjc2lvX2hhbmRsZV9pbnRyX3N0YXR1cyhodywgU0dFX0lOVF9DQVVTRTMsIHNnZV9pbnRyX2luZm8pOworCXYgfD0gY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIFNHRV9JTlRfQ0FVU0UzX0EsIHNnZV9pbnRyX2luZm8pOwogCi0JaWYgKGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LCBTR0VfSU5UX0NBVVNFMywgc2dlX2ludHJfaW5mbykgfHwKKwlpZiAoY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIFNHRV9JTlRfQ0FVU0UzX0EsIHNnZV9pbnRyX2luZm8pIHx8CiAJICAgIHYgIT0gMCkKIAkJY3Npb19od19mYXRhbF9lcnIoaHcpOwogfQogCi0jZGVmaW5lIENJTV9PQlFfSU5UUiAoT0JRVUxQMFBBUkVSUiB8IE9CUVVMUDFQQVJFUlIgfCBPQlFVTFAyUEFSRVJSIHxcCi0JCSAgICAgIE9CUVVMUDNQQVJFUlIgfCBPQlFTR0VQQVJFUlIgfCBPQlFOQ1NJUEFSRVJSKQotI2RlZmluZSBDSU1fSUJRX0lOVFIgKElCUVRQMFBBUkVSUiB8IElCUVRQMVBBUkVSUiB8IElCUVVMUFBBUkVSUiB8XAotCQkgICAgICBJQlFTR0VISVBBUkVSUiB8IElCUVNHRUxPUEFSRVJSIHwgSUJRTkNTSVBBUkVSUikKKyNkZWZpbmUgQ0lNX09CUV9JTlRSIChPQlFVTFAwUEFSRVJSX0YgfCBPQlFVTFAxUEFSRVJSX0YgfCBPQlFVTFAyUEFSRVJSX0YgfFwKKwkJICAgICAgT0JRVUxQM1BBUkVSUl9GIHwgT0JRU0dFUEFSRVJSX0YgfCBPQlFOQ1NJUEFSRVJSX0YpCisjZGVmaW5lIENJTV9JQlFfSU5UUiAoSUJRVFAwUEFSRVJSX0YgfCBJQlFUUDFQQVJFUlJfRiB8IElCUVVMUFBBUkVSUl9GIHxcCisJCSAgICAgIElCUVNHRUhJUEFSRVJSX0YgfCBJQlFTR0VMT1BBUkVSUl9GIHwgSUJRTkNTSVBBUkVSUl9GKQogCiAvKgogICogQ0lNIGludGVycnVwdCBoYW5kbGVyLgpAQCAtMjc1MSw1MyArMjc2MCw1MyBAQAogc3RhdGljIHZvaWQgY3Npb19jaW1faW50cl9oYW5kbGVyKHN0cnVjdCBjc2lvX2h3ICpodykKIHsKIAlzdGF0aWMgc3RydWN0IGludHJfaW5mbyBjaW1faW50cl9pbmZvW10gPSB7Ci0JCXsgUFJFRkRST1BJTlQsICJDSU0gY29udHJvbCByZWdpc3RlciBwcmVmZXRjaCBkcm9wIiwgLTEsIDEgfSwKKwkJeyBQUkVGRFJPUElOVF9GLCAiQ0lNIGNvbnRyb2wgcmVnaXN0ZXIgcHJlZmV0Y2ggZHJvcCIsIC0xLCAxIH0sCiAJCXsgQ0lNX09CUV9JTlRSLCAiQ0lNIE9CUSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IENJTV9JQlFfSU5UUiwgIkNJTSBJQlEgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNQlVQUEFSRVJSLCAiQ0lNIG1haWxib3ggdVAgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNQkhPU1RQQVJFUlIsICJDSU0gbWFpbGJveCBob3N0IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgVElFUUlOUEFSRVJSSU5ULCAiQ0lNIFRJRVEgb3V0Z29pbmcgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBUSUVRT1VUUEFSRVJSSU5ULCAiQ0lNIFRJRVEgaW5jb21pbmcgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBNQlVQUEFSRVJSX0YsICJDSU0gbWFpbGJveCB1UCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IE1CSE9TVFBBUkVSUl9GLCAiQ0lNIG1haWxib3ggaG9zdCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFRJRVFJTlBBUkVSUklOVF9GLCAiQ0lNIFRJRVEgb3V0Z29pbmcgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBUSUVRT1VUUEFSRVJSSU5UX0YsICJDSU0gVElFUSBpbmNvbWluZyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IDAsIE5VTEwsIDAsIDAgfQogCX07CiAJc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gY2ltX3VwaW50cl9pbmZvW10gPSB7Ci0JCXsgUlNWRFNQQUNFSU5ULCAiQ0lNIHJlc2VydmVkIHNwYWNlIGFjY2VzcyIsIC0xLCAxIH0sCi0JCXsgSUxMVFJBTlNJTlQsICJDSU0gaWxsZWdhbCB0cmFuc2FjdGlvbiIsIC0xLCAxIH0sCi0JCXsgSUxMV1JJTlQsICJDSU0gaWxsZWdhbCB3cml0ZSIsIC0xLCAxIH0sCi0JCXsgSUxMUkRJTlQsICJDSU0gaWxsZWdhbCByZWFkIiwgLTEsIDEgfSwKLQkJeyBJTExSREJFSU5ULCAiQ0lNIGlsbGVnYWwgcmVhZCBCRSIsIC0xLCAxIH0sCi0JCXsgSUxMV1JCRUlOVCwgIkNJTSBpbGxlZ2FsIHdyaXRlIEJFIiwgLTEsIDEgfSwKLQkJeyBTR0xSREJPT1RJTlQsICJDSU0gc2luZ2xlIHJlYWQgZnJvbSBib290IHNwYWNlIiwgLTEsIDEgfSwKLQkJeyBTR0xXUkJPT1RJTlQsICJDSU0gc2luZ2xlIHdyaXRlIHRvIGJvb3Qgc3BhY2UiLCAtMSwgMSB9LAotCQl7IEJMS1dSQk9PVElOVCwgIkNJTSBibG9jayB3cml0ZSB0byBib290IHNwYWNlIiwgLTEsIDEgfSwKLQkJeyBTR0xSREZMQVNISU5ULCAiQ0lNIHNpbmdsZSByZWFkIGZyb20gZmxhc2ggc3BhY2UiLCAtMSwgMSB9LAotCQl7IFNHTFdSRkxBU0hJTlQsICJDSU0gc2luZ2xlIHdyaXRlIHRvIGZsYXNoIHNwYWNlIiwgLTEsIDEgfSwKLQkJeyBCTEtXUkZMQVNISU5ULCAiQ0lNIGJsb2NrIHdyaXRlIHRvIGZsYXNoIHNwYWNlIiwgLTEsIDEgfSwKLQkJeyBTR0xSREVFUFJPTUlOVCwgIkNJTSBzaW5nbGUgRUVQUk9NIHJlYWQiLCAtMSwgMSB9LAotCQl7IFNHTFdSRUVQUk9NSU5ULCAiQ0lNIHNpbmdsZSBFRVBST00gd3JpdGUiLCAtMSwgMSB9LAotCQl7IEJMS1JERUVQUk9NSU5ULCAiQ0lNIGJsb2NrIEVFUFJPTSByZWFkIiwgLTEsIDEgfSwKLQkJeyBCTEtXUkVFUFJPTUlOVCwgIkNJTSBibG9jayBFRVBST00gd3JpdGUiLCAtMSwgMSB9LAotCQl7IFNHTFJEQ1RMSU5UICwgIkNJTSBzaW5nbGUgcmVhZCBmcm9tIENUTCBzcGFjZSIsIC0xLCAxIH0sCi0JCXsgU0dMV1JDVExJTlQgLCAiQ0lNIHNpbmdsZSB3cml0ZSB0byBDVEwgc3BhY2UiLCAtMSwgMSB9LAotCQl7IEJMS1JEQ1RMSU5UICwgIkNJTSBibG9jayByZWFkIGZyb20gQ1RMIHNwYWNlIiwgLTEsIDEgfSwKLQkJeyBCTEtXUkNUTElOVCAsICJDSU0gYmxvY2sgd3JpdGUgdG8gQ1RMIHNwYWNlIiwgLTEsIDEgfSwKLQkJeyBTR0xSRFBMSU5UICwgIkNJTSBzaW5nbGUgcmVhZCBmcm9tIFBMIHNwYWNlIiwgLTEsIDEgfSwKLQkJeyBTR0xXUlBMSU5UICwgIkNJTSBzaW5nbGUgd3JpdGUgdG8gUEwgc3BhY2UiLCAtMSwgMSB9LAotCQl7IEJMS1JEUExJTlQgLCAiQ0lNIGJsb2NrIHJlYWQgZnJvbSBQTCBzcGFjZSIsIC0xLCAxIH0sCi0JCXsgQkxLV1JQTElOVCAsICJDSU0gYmxvY2sgd3JpdGUgdG8gUEwgc3BhY2UiLCAtMSwgMSB9LAotCQl7IFJFUU9WUkxPT0tVUElOVCAsICJDSU0gcmVxdWVzdCBGSUZPIG92ZXJ3cml0ZSIsIC0xLCAxIH0sCi0JCXsgUlNQT1ZSTE9PS1VQSU5UICwgIkNJTSByZXNwb25zZSBGSUZPIG92ZXJ3cml0ZSIsIC0xLCAxIH0sCi0JCXsgVElNRU9VVElOVCAsICJDSU0gUElGIHRpbWVvdXQiLCAtMSwgMSB9LAotCQl7IFRJTUVPVVRNQUlOVCAsICJDSU0gUElGIE1BIHRpbWVvdXQiLCAtMSwgMSB9LAorCQl7IFJTVkRTUEFDRUlOVF9GLCAiQ0lNIHJlc2VydmVkIHNwYWNlIGFjY2VzcyIsIC0xLCAxIH0sCisJCXsgSUxMVFJBTlNJTlRfRiwgIkNJTSBpbGxlZ2FsIHRyYW5zYWN0aW9uIiwgLTEsIDEgfSwKKwkJeyBJTExXUklOVF9GLCAiQ0lNIGlsbGVnYWwgd3JpdGUiLCAtMSwgMSB9LAorCQl7IElMTFJESU5UX0YsICJDSU0gaWxsZWdhbCByZWFkIiwgLTEsIDEgfSwKKwkJeyBJTExSREJFSU5UX0YsICJDSU0gaWxsZWdhbCByZWFkIEJFIiwgLTEsIDEgfSwKKwkJeyBJTExXUkJFSU5UX0YsICJDSU0gaWxsZWdhbCB3cml0ZSBCRSIsIC0xLCAxIH0sCisJCXsgU0dMUkRCT09USU5UX0YsICJDSU0gc2luZ2xlIHJlYWQgZnJvbSBib290IHNwYWNlIiwgLTEsIDEgfSwKKwkJeyBTR0xXUkJPT1RJTlRfRiwgIkNJTSBzaW5nbGUgd3JpdGUgdG8gYm9vdCBzcGFjZSIsIC0xLCAxIH0sCisJCXsgQkxLV1JCT09USU5UX0YsICJDSU0gYmxvY2sgd3JpdGUgdG8gYm9vdCBzcGFjZSIsIC0xLCAxIH0sCisJCXsgU0dMUkRGTEFTSElOVF9GLCAiQ0lNIHNpbmdsZSByZWFkIGZyb20gZmxhc2ggc3BhY2UiLCAtMSwgMSB9LAorCQl7IFNHTFdSRkxBU0hJTlRfRiwgIkNJTSBzaW5nbGUgd3JpdGUgdG8gZmxhc2ggc3BhY2UiLCAtMSwgMSB9LAorCQl7IEJMS1dSRkxBU0hJTlRfRiwgIkNJTSBibG9jayB3cml0ZSB0byBmbGFzaCBzcGFjZSIsIC0xLCAxIH0sCisJCXsgU0dMUkRFRVBST01JTlRfRiwgIkNJTSBzaW5nbGUgRUVQUk9NIHJlYWQiLCAtMSwgMSB9LAorCQl7IFNHTFdSRUVQUk9NSU5UX0YsICJDSU0gc2luZ2xlIEVFUFJPTSB3cml0ZSIsIC0xLCAxIH0sCisJCXsgQkxLUkRFRVBST01JTlRfRiwgIkNJTSBibG9jayBFRVBST00gcmVhZCIsIC0xLCAxIH0sCisJCXsgQkxLV1JFRVBST01JTlRfRiwgIkNJTSBibG9jayBFRVBST00gd3JpdGUiLCAtMSwgMSB9LAorCQl7IFNHTFJEQ1RMSU5UX0YsICJDSU0gc2luZ2xlIHJlYWQgZnJvbSBDVEwgc3BhY2UiLCAtMSwgMSB9LAorCQl7IFNHTFdSQ1RMSU5UX0YsICJDSU0gc2luZ2xlIHdyaXRlIHRvIENUTCBzcGFjZSIsIC0xLCAxIH0sCisJCXsgQkxLUkRDVExJTlRfRiwgIkNJTSBibG9jayByZWFkIGZyb20gQ1RMIHNwYWNlIiwgLTEsIDEgfSwKKwkJeyBCTEtXUkNUTElOVF9GLCAiQ0lNIGJsb2NrIHdyaXRlIHRvIENUTCBzcGFjZSIsIC0xLCAxIH0sCisJCXsgU0dMUkRQTElOVF9GLCAiQ0lNIHNpbmdsZSByZWFkIGZyb20gUEwgc3BhY2UiLCAtMSwgMSB9LAorCQl7IFNHTFdSUExJTlRfRiwgIkNJTSBzaW5nbGUgd3JpdGUgdG8gUEwgc3BhY2UiLCAtMSwgMSB9LAorCQl7IEJMS1JEUExJTlRfRiwgIkNJTSBibG9jayByZWFkIGZyb20gUEwgc3BhY2UiLCAtMSwgMSB9LAorCQl7IEJMS1dSUExJTlRfRiwgIkNJTSBibG9jayB3cml0ZSB0byBQTCBzcGFjZSIsIC0xLCAxIH0sCisJCXsgUkVRT1ZSTE9PS1VQSU5UX0YsICJDSU0gcmVxdWVzdCBGSUZPIG92ZXJ3cml0ZSIsIC0xLCAxIH0sCisJCXsgUlNQT1ZSTE9PS1VQSU5UX0YsICJDSU0gcmVzcG9uc2UgRklGTyBvdmVyd3JpdGUiLCAtMSwgMSB9LAorCQl7IFRJTUVPVVRJTlRfRiwgIkNJTSBQSUYgdGltZW91dCIsIC0xLCAxIH0sCisJCXsgVElNRU9VVE1BSU5UX0YsICJDSU0gUElGIE1BIHRpbWVvdXQiLCAtMSwgMSB9LAogCQl7IDAsIE5VTEwsIDAsIDAgfQogCX07CiAKIAlpbnQgZmF0OwogCi0JZmF0ID0gY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIENJTV9IT1NUX0lOVF9DQVVTRSwKLQkJCQkgICAgY2ltX2ludHJfaW5mbykgKwotCSAgICAgIGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LCBDSU1fSE9TVF9VUEFDQ19JTlRfQ0FVU0UsCi0JCQkJICAgIGNpbV91cGludHJfaW5mbyk7CisJZmF0ID0gY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIENJTV9IT1NUX0lOVF9DQVVTRV9BLAorCQkJCSAgICAgIGNpbV9pbnRyX2luZm8pICsKKwkgICAgICBjc2lvX2hhbmRsZV9pbnRyX3N0YXR1cyhodywgQ0lNX0hPU1RfVVBBQ0NfSU5UX0NBVVNFX0EsCisJCQkJICAgICAgY2ltX3VwaW50cl9pbmZvKTsKIAlpZiAoZmF0KQogCQljc2lvX2h3X2ZhdGFsX2Vycihodyk7CiB9CkBAIC0yODEzLDcgKzI4MjIsNyBAQAogCQl7IDAsIE5VTEwsIDAsIDAgfQogCX07CiAKLQlpZiAoY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIFVMUF9SWF9JTlRfQ0FVU0UsIHVscHJ4X2ludHJfaW5mbykpCisJaWYgKGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LCBVTFBfUlhfSU5UX0NBVVNFX0EsIHVscHJ4X2ludHJfaW5mbykpCiAJCWNzaW9faHdfZmF0YWxfZXJyKGh3KTsKIH0KIApAQCAtMjgyMywxOSArMjgzMiwxOSBAQAogc3RhdGljIHZvaWQgY3Npb191bHB0eF9pbnRyX2hhbmRsZXIoc3RydWN0IGNzaW9faHcgKmh3KQogewogCXN0YXRpYyBzdHJ1Y3QgaW50cl9pbmZvIHVscHR4X2ludHJfaW5mb1tdID0gewotCQl7IFBCTF9CT1VORF9FUlJfQ0gzLCAiVUxQVFggY2hhbm5lbCAzIFBCTCBvdXQgb2YgYm91bmRzIiwgLTEsCisJCXsgUEJMX0JPVU5EX0VSUl9DSDNfRiwgIlVMUFRYIGNoYW5uZWwgMyBQQkwgb3V0IG9mIGJvdW5kcyIsIC0xLAogCQkgIDAgfSwKLQkJeyBQQkxfQk9VTkRfRVJSX0NIMiwgIlVMUFRYIGNoYW5uZWwgMiBQQkwgb3V0IG9mIGJvdW5kcyIsIC0xLAorCQl7IFBCTF9CT1VORF9FUlJfQ0gyX0YsICJVTFBUWCBjaGFubmVsIDIgUEJMIG91dCBvZiBib3VuZHMiLCAtMSwKIAkJICAwIH0sCi0JCXsgUEJMX0JPVU5EX0VSUl9DSDEsICJVTFBUWCBjaGFubmVsIDEgUEJMIG91dCBvZiBib3VuZHMiLCAtMSwKKwkJeyBQQkxfQk9VTkRfRVJSX0NIMV9GLCAiVUxQVFggY2hhbm5lbCAxIFBCTCBvdXQgb2YgYm91bmRzIiwgLTEsCiAJCSAgMCB9LAotCQl7IFBCTF9CT1VORF9FUlJfQ0gwLCAiVUxQVFggY2hhbm5lbCAwIFBCTCBvdXQgb2YgYm91bmRzIiwgLTEsCisJCXsgUEJMX0JPVU5EX0VSUl9DSDBfRiwgIlVMUFRYIGNoYW5uZWwgMCBQQkwgb3V0IG9mIGJvdW5kcyIsIC0xLAogCQkgIDAgfSwKIAkJeyAweGZmZmZmZmYsICJVTFBUWCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IDAsIE5VTEwsIDAsIDAgfQogCX07CiAKLQlpZiAoY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIFVMUF9UWF9JTlRfQ0FVU0UsIHVscHR4X2ludHJfaW5mbykpCisJaWYgKGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LCBVTFBfVFhfSU5UX0NBVVNFX0EsIHVscHR4X2ludHJfaW5mbykpCiAJCWNzaW9faHdfZmF0YWxfZXJyKGh3KTsKIH0KIApAQCAtMjg0NSwyMCArMjg1NCwyMCBAQAogc3RhdGljIHZvaWQgY3Npb19wbXR4X2ludHJfaGFuZGxlcihzdHJ1Y3QgY3Npb19odyAqaHcpCiB7CiAJc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gcG10eF9pbnRyX2luZm9bXSA9IHsKLQkJeyBQQ01EX0xFTl9PVkZMMCwgIlBNVFggY2hhbm5lbCAwIHBjbWQgdG9vIGxhcmdlIiwgLTEsIDEgfSwKLQkJeyBQQ01EX0xFTl9PVkZMMSwgIlBNVFggY2hhbm5lbCAxIHBjbWQgdG9vIGxhcmdlIiwgLTEsIDEgfSwKLQkJeyBQQ01EX0xFTl9PVkZMMiwgIlBNVFggY2hhbm5lbCAyIHBjbWQgdG9vIGxhcmdlIiwgLTEsIDEgfSwKLQkJeyBaRVJPX0NfQ01EX0VSUk9SLCAiUE1UWCAwLWxlbmd0aCBwY21kIiwgLTEsIDEgfSwKKwkJeyBQQ01EX0xFTl9PVkZMMF9GLCAiUE1UWCBjaGFubmVsIDAgcGNtZCB0b28gbGFyZ2UiLCAtMSwgMSB9LAorCQl7IFBDTURfTEVOX09WRkwxX0YsICJQTVRYIGNoYW5uZWwgMSBwY21kIHRvbyBsYXJnZSIsIC0xLCAxIH0sCisJCXsgUENNRF9MRU5fT1ZGTDJfRiwgIlBNVFggY2hhbm5lbCAyIHBjbWQgdG9vIGxhcmdlIiwgLTEsIDEgfSwKKwkJeyBaRVJPX0NfQ01EX0VSUk9SX0YsICJQTVRYIDAtbGVuZ3RoIHBjbWQiLCAtMSwgMSB9LAogCQl7IDB4ZmZmZmZmMCwgIlBNVFggZnJhbWluZyBlcnJvciIsIC0xLCAxIH0sCi0JCXsgT0VTUElfUEFSX0VSUk9SLCAiUE1UWCBvZXNwaSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IERCX09QVElPTlNfUEFSX0VSUk9SLCAiUE1UWCBkYl9vcHRpb25zIHBhcml0eSBlcnJvciIsIC0xLAorCQl7IE9FU1BJX1BBUl9FUlJPUl9GLCAiUE1UWCBvZXNwaSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IERCX09QVElPTlNfUEFSX0VSUk9SX0YsICJQTVRYIGRiX29wdGlvbnMgcGFyaXR5IGVycm9yIiwgLTEsCiAJCSAgMSB9LAotCQl7IElDU1BJX1BBUl9FUlJPUiwgIlBNVFggaWNzcGkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBDX1BDTURfUEFSX0VSUk9SLCAiUE1UWCBjX3BjbWQgcGFyaXR5IGVycm9yIiwgLTEsIDF9LAorCQl7IElDU1BJX1BBUl9FUlJPUl9GLCAiUE1UWCBpY3NwaSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFBNVFhfQ19QQ01EX1BBUl9FUlJPUl9GLCAiUE1UWCBjX3BjbWQgcGFyaXR5IGVycm9yIiwgLTEsIDF9LAogCQl7IDAsIE5VTEwsIDAsIDAgfQogCX07CiAKLQlpZiAoY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIFBNX1RYX0lOVF9DQVVTRSwgcG10eF9pbnRyX2luZm8pKQorCWlmIChjc2lvX2hhbmRsZV9pbnRyX3N0YXR1cyhodywgUE1fVFhfSU5UX0NBVVNFX0EsIHBtdHhfaW50cl9pbmZvKSkKIAkJY3Npb19od19mYXRhbF9lcnIoaHcpOwogfQogCkBAIC0yODY4LDE3ICsyODc3LDE3IEBACiBzdGF0aWMgdm9pZCBjc2lvX3BtcnhfaW50cl9oYW5kbGVyKHN0cnVjdCBjc2lvX2h3ICpodykKIHsKIAlzdGF0aWMgc3RydWN0IGludHJfaW5mbyBwbXJ4X2ludHJfaW5mb1tdID0gewotCQl7IFpFUk9fRV9DTURfRVJST1IsICJQTVJYIDAtbGVuZ3RoIHBjbWQiLCAtMSwgMSB9LAorCQl7IFpFUk9fRV9DTURfRVJST1JfRiwgIlBNUlggMC1sZW5ndGggcGNtZCIsIC0xLCAxIH0sCiAJCXsgMHgzZmZmZjAsICJQTVJYIGZyYW1pbmcgZXJyb3IiLCAtMSwgMSB9LAotCQl7IE9DU1BJX1BBUl9FUlJPUiwgIlBNUlggb2NzcGkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBEQl9PUFRJT05TX1BBUl9FUlJPUiwgIlBNUlggZGJfb3B0aW9ucyBwYXJpdHkgZXJyb3IiLCAtMSwKKwkJeyBPQ1NQSV9QQVJfRVJST1JfRiwgIlBNUlggb2NzcGkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBEQl9PUFRJT05TX1BBUl9FUlJPUl9GLCAiUE1SWCBkYl9vcHRpb25zIHBhcml0eSBlcnJvciIsIC0xLAogCQkgIDEgfSwKLQkJeyBJRVNQSV9QQVJfRVJST1IsICJQTVJYIGllc3BpIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgRV9QQ01EX1BBUl9FUlJPUiwgIlBNUlggZV9wY21kIHBhcml0eSBlcnJvciIsIC0xLCAxfSwKKwkJeyBJRVNQSV9QQVJfRVJST1JfRiwgIlBNUlggaWVzcGkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBQTVJYX0VfUENNRF9QQVJfRVJST1JfRiwgIlBNUlggZV9wY21kIHBhcml0eSBlcnJvciIsIC0xLCAxfSwKIAkJeyAwLCBOVUxMLCAwLCAwIH0KIAl9OwogCi0JaWYgKGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LCBQTV9SWF9JTlRfQ0FVU0UsIHBtcnhfaW50cl9pbmZvKSkKKwlpZiAoY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIFBNX1JYX0lOVF9DQVVTRV9BLCBwbXJ4X2ludHJfaW5mbykpCiAJCWNzaW9faHdfZmF0YWxfZXJyKGh3KTsKIH0KIApAQCAtMjg4OCwxNiArMjg5NywxNiBAQAogc3RhdGljIHZvaWQgY3Npb19jcGxzd19pbnRyX2hhbmRsZXIoc3RydWN0IGNzaW9faHcgKmh3KQogewogCXN0YXRpYyBzdHJ1Y3QgaW50cl9pbmZvIGNwbHN3X2ludHJfaW5mb1tdID0gewotCQl7IENJTV9PUF9NQVBfUEVSUiwgIkNQTFNXIENJTSBvcF9tYXAgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBDSU1fT1ZGTF9FUlJPUiwgIkNQTFNXIENJTSBvdmVyZmxvdyIsIC0xLCAxIH0sCi0JCXsgVFBfRlJBTUlOR19FUlJPUiwgIkNQTFNXIFRQIGZyYW1pbmcgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFNHRV9GUkFNSU5HX0VSUk9SLCAiQ1BMU1cgU0dFIGZyYW1pbmcgZXJyb3IiLCAtMSwgMSB9LAotCQl7IENJTV9GUkFNSU5HX0VSUk9SLCAiQ1BMU1cgQ0lNIGZyYW1pbmcgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFpFUk9fU1dJVENIX0VSUk9SLCAiQ1BMU1cgbm8tc3dpdGNoIGVycm9yIiwgLTEsIDEgfSwKKwkJeyBDSU1fT1BfTUFQX1BFUlJfRiwgIkNQTFNXIENJTSBvcF9tYXAgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBDSU1fT1ZGTF9FUlJPUl9GLCAiQ1BMU1cgQ0lNIG92ZXJmbG93IiwgLTEsIDEgfSwKKwkJeyBUUF9GUkFNSU5HX0VSUk9SX0YsICJDUExTVyBUUCBmcmFtaW5nIGVycm9yIiwgLTEsIDEgfSwKKwkJeyBTR0VfRlJBTUlOR19FUlJPUl9GLCAiQ1BMU1cgU0dFIGZyYW1pbmcgZXJyb3IiLCAtMSwgMSB9LAorCQl7IENJTV9GUkFNSU5HX0VSUk9SX0YsICJDUExTVyBDSU0gZnJhbWluZyBlcnJvciIsIC0xLCAxIH0sCisJCXsgWkVST19TV0lUQ0hfRVJST1JfRiwgIkNQTFNXIG5vLXN3aXRjaCBlcnJvciIsIC0xLCAxIH0sCiAJCXsgMCwgTlVMTCwgMCwgMCB9CiAJfTsKIAotCWlmIChjc2lvX2hhbmRsZV9pbnRyX3N0YXR1cyhodywgQ1BMX0lOVFJfQ0FVU0UsIGNwbHN3X2ludHJfaW5mbykpCisJaWYgKGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LCBDUExfSU5UUl9DQVVTRV9BLCBjcGxzd19pbnRyX2luZm8pKQogCQljc2lvX2h3X2ZhdGFsX2Vycihodyk7CiB9CiAKQEAgLTI5MDcsMTUgKzI5MTYsMTUgQEAKIHN0YXRpYyB2b2lkIGNzaW9fbGVfaW50cl9oYW5kbGVyKHN0cnVjdCBjc2lvX2h3ICpodykKIHsKIAlzdGF0aWMgc3RydWN0IGludHJfaW5mbyBsZV9pbnRyX2luZm9bXSA9IHsKLQkJeyBMSVBNSVNTLCAiTEUgTElQIG1pc3MiLCAtMSwgMCB9LAotCQl7IExJUDAsICJMRSAwIExJUCBlcnJvciIsIC0xLCAwIH0sCi0JCXsgUEFSSVRZRVJSLCAiTEUgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBVTktOT1dOQ01ELCAiTEUgdW5rbm93biBjb21tYW5kIiwgLTEsIDEgfSwKLQkJeyBSRVFRUEFSRVJSLCAiTEUgcmVxdWVzdCBxdWV1ZSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IExJUE1JU1NfRiwgIkxFIExJUCBtaXNzIiwgLTEsIDAgfSwKKwkJeyBMSVAwX0YsICJMRSAwIExJUCBlcnJvciIsIC0xLCAwIH0sCisJCXsgUEFSSVRZRVJSX0YsICJMRSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFVOS05PV05DTURfRiwgIkxFIHVua25vd24gY29tbWFuZCIsIC0xLCAxIH0sCisJCXsgUkVRUVBBUkVSUl9GLCAiTEUgcmVxdWVzdCBxdWV1ZSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IDAsIE5VTEwsIDAsIDAgfQogCX07CiAKLQlpZiAoY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIExFX0RCX0lOVF9DQVVTRSwgbGVfaW50cl9pbmZvKSkKKwlpZiAoY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIExFX0RCX0lOVF9DQVVTRV9BLCBsZV9pbnRyX2luZm8pKQogCQljc2lvX2h3X2ZhdGFsX2Vycihodyk7CiB9CiAKQEAgLTI5MjksMTkgKzI5MzgsMjIgQEAKIAkJeyAwLCBOVUxMLCAwLCAwIH0KIAl9OwogCXN0YXRpYyBzdHJ1Y3QgaW50cl9pbmZvIG1wc190eF9pbnRyX2luZm9bXSA9IHsKLQkJeyBUUEZJRk8sICJNUFMgVHggVFAgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IE5DU0lGSUZPLCAiTVBTIFR4IE5DLVNJIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBUWERBVEFGSUZPLCAiTVBTIFR4IGRhdGEgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFRYREVTQ0ZJRk8sICJNUFMgVHggZGVzYyBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgQlVCQkxFLCAiTVBTIFR4IHVuZGVyZmxvdyIsIC0xLCAxIH0sCi0JCXsgU0VDTlRFUlIsICJNUFMgVHggU09QL0VPUCBlcnJvciIsIC0xLCAxIH0sCi0JCXsgRlJNRVJSLCAiTVBTIFR4IGZyYW1pbmcgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFRQRklGT19WKFRQRklGT19NKSwgIk1QUyBUeCBUUCBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgTkNTSUZJRk9fRiwgIk1QUyBUeCBOQy1TSSBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgVFhEQVRBRklGT19WKFRYREFUQUZJRk9fTSksICJNUFMgVHggZGF0YSBGSUZPIHBhcml0eSBlcnJvciIsCisJCSAgLTEsIDEgfSwKKwkJeyBUWERFU0NGSUZPX1YoVFhERVNDRklGT19NKSwgIk1QUyBUeCBkZXNjIEZJRk8gcGFyaXR5IGVycm9yIiwKKwkJICAtMSwgMSB9LAorCQl7IEJVQkJMRV9GLCAiTVBTIFR4IHVuZGVyZmxvdyIsIC0xLCAxIH0sCisJCXsgU0VDTlRFUlJfRiwgIk1QUyBUeCBTT1AvRU9QIGVycm9yIiwgLTEsIDEgfSwKKwkJeyBGUk1FUlJfRiwgIk1QUyBUeCBmcmFtaW5nIGVycm9yIiwgLTEsIDEgfSwKIAkJeyAwLCBOVUxMLCAwLCAwIH0KIAl9OwogCXN0YXRpYyBzdHJ1Y3QgaW50cl9pbmZvIG1wc190cmNfaW50cl9pbmZvW10gPSB7Ci0JCXsgRklMVE1FTSwgIk1QUyBUUkMgZmlsdGVyIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUEtURklGTywgIk1QUyBUUkMgcGFja2V0IEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNSVNDUEVSUiwgIk1QUyBUUkMgbWlzYyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IEZJTFRNRU1fVihGSUxUTUVNX00pLCAiTVBTIFRSQyBmaWx0ZXIgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBQS1RGSUZPX1YoUEtURklGT19NKSwgIk1QUyBUUkMgcGFja2V0IEZJRk8gcGFyaXR5IGVycm9yIiwKKwkJICAtMSwgMSB9LAorCQl7IE1JU0NQRVJSX0YsICJNUFMgVFJDIG1pc2MgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKIAkJeyAwLCBOVUxMLCAwLCAwIH0KIAl9OwogCXN0YXRpYyBzdHJ1Y3QgaW50cl9pbmZvIG1wc19zdGF0X3NyYW1faW50cl9pbmZvW10gPSB7CkBAIC0yOTU3LDM2ICsyOTY5LDM3IEBACiAJCXsgMCwgTlVMTCwgMCwgMCB9CiAJfTsKIAlzdGF0aWMgc3RydWN0IGludHJfaW5mbyBtcHNfY2xzX2ludHJfaW5mb1tdID0gewotCQl7IE1BVENIU1JBTSwgIk1QUyBtYXRjaCBTUkFNIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgTUFUQ0hUQ0FNLCAiTVBTIG1hdGNoIFRDQU0gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBIQVNIU1JBTSwgIk1QUyBoYXNoIFNSQU0gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBNQVRDSFNSQU1fRiwgIk1QUyBtYXRjaCBTUkFNIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgTUFUQ0hUQ0FNX0YsICJNUFMgbWF0Y2ggVENBTSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IEhBU0hTUkFNX0YsICJNUFMgaGFzaCBTUkFNIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCiAJCXsgMCwgTlVMTCwgMCwgMCB9CiAJfTsKIAogCWludCBmYXQ7CiAKLQlmYXQgPSBjc2lvX2hhbmRsZV9pbnRyX3N0YXR1cyhodywgTVBTX1JYX1BFUlJfSU5UX0NBVVNFLAotCQkJCSAgICBtcHNfcnhfaW50cl9pbmZvKSArCi0JICAgICAgY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIE1QU19UWF9JTlRfQ0FVU0UsCi0JCQkJICAgIG1wc190eF9pbnRyX2luZm8pICsKLQkgICAgICBjc2lvX2hhbmRsZV9pbnRyX3N0YXR1cyhodywgTVBTX1RSQ19JTlRfQ0FVU0UsCi0JCQkJICAgIG1wc190cmNfaW50cl9pbmZvKSArCi0JICAgICAgY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIE1QU19TVEFUX1BFUlJfSU5UX0NBVVNFX1NSQU0sCi0JCQkJICAgIG1wc19zdGF0X3NyYW1faW50cl9pbmZvKSArCi0JICAgICAgY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIE1QU19TVEFUX1BFUlJfSU5UX0NBVVNFX1RYX0ZJRk8sCi0JCQkJICAgIG1wc19zdGF0X3R4X2ludHJfaW5mbykgKwotCSAgICAgIGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LCBNUFNfU1RBVF9QRVJSX0lOVF9DQVVTRV9SWF9GSUZPLAotCQkJCSAgICBtcHNfc3RhdF9yeF9pbnRyX2luZm8pICsKLQkgICAgICBjc2lvX2hhbmRsZV9pbnRyX3N0YXR1cyhodywgTVBTX0NMU19JTlRfQ0FVU0UsCi0JCQkJICAgIG1wc19jbHNfaW50cl9pbmZvKTsKKwlmYXQgPSBjc2lvX2hhbmRsZV9pbnRyX3N0YXR1cyhodywgTVBTX1JYX1BFUlJfSU5UX0NBVVNFX0EsCisJCQkJICAgICAgbXBzX3J4X2ludHJfaW5mbykgKworCSAgICAgIGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LCBNUFNfVFhfSU5UX0NBVVNFX0EsCisJCQkJICAgICAgbXBzX3R4X2ludHJfaW5mbykgKworCSAgICAgIGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LCBNUFNfVFJDX0lOVF9DQVVTRV9BLAorCQkJCSAgICAgIG1wc190cmNfaW50cl9pbmZvKSArCisJICAgICAgY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIE1QU19TVEFUX1BFUlJfSU5UX0NBVVNFX1NSQU1fQSwKKwkJCQkgICAgICBtcHNfc3RhdF9zcmFtX2ludHJfaW5mbykgKworCSAgICAgIGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LCBNUFNfU1RBVF9QRVJSX0lOVF9DQVVTRV9UWF9GSUZPX0EsCisJCQkJICAgICAgbXBzX3N0YXRfdHhfaW50cl9pbmZvKSArCisJICAgICAgY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIE1QU19TVEFUX1BFUlJfSU5UX0NBVVNFX1JYX0ZJRk9fQSwKKwkJCQkgICAgICBtcHNfc3RhdF9yeF9pbnRyX2luZm8pICsKKwkgICAgICBjc2lvX2hhbmRsZV9pbnRyX3N0YXR1cyhodywgTVBTX0NMU19JTlRfQ0FVU0VfQSwKKwkJCQkgICAgICBtcHNfY2xzX2ludHJfaW5mbyk7CiAKLQljc2lvX3dyX3JlZzMyKGh3LCAwLCBNUFNfSU5UX0NBVVNFKTsKLQljc2lvX3JkX3JlZzMyKGh3LCBNUFNfSU5UX0NBVVNFKTsgICAgICAgICAgICAgICAgICAgIC8qIGZsdXNoICovCisJY3Npb193cl9yZWczMihodywgMCwgTVBTX0lOVF9DQVVTRV9BKTsKKwljc2lvX3JkX3JlZzMyKGh3LCBNUFNfSU5UX0NBVVNFX0EpOyAgICAgICAgICAgICAgICAgICAgLyogZmx1c2ggKi8KIAlpZiAoZmF0KQogCQljc2lvX2h3X2ZhdGFsX2Vycihodyk7CiB9CiAKLSNkZWZpbmUgTUVNX0lOVF9NQVNLIChQRVJSX0lOVF9DQVVTRSB8IEVDQ19DRV9JTlRfQ0FVU0UgfCBFQ0NfVUVfSU5UX0NBVVNFKQorI2RlZmluZSBNRU1fSU5UX01BU0sgKFBFUlJfSU5UX0NBVVNFX0YgfCBFQ0NfQ0VfSU5UX0NBVVNFX0YgfCBcCisJCSAgICAgIEVDQ19VRV9JTlRfQ0FVU0VfRikKIAogLyoKICAqIEVEQy9NQyBpbnRlcnJ1cHQgaGFuZGxlci4KQEAgLTI5OTgsMjggKzMwMTEsMjggQEAKIAl1bnNpZ25lZCBpbnQgYWRkciwgY250X2FkZHIsIHY7CiAKIAlpZiAoaWR4IDw9IE1FTV9FREMxKSB7Ci0JCWFkZHIgPSBFRENfUkVHKEVEQ19JTlRfQ0FVU0UsIGlkeCk7Ci0JCWNudF9hZGRyID0gRURDX1JFRyhFRENfRUNDX1NUQVRVUywgaWR4KTsKKwkJYWRkciA9IEVEQ19SRUcoRURDX0lOVF9DQVVTRV9BLCBpZHgpOworCQljbnRfYWRkciA9IEVEQ19SRUcoRURDX0VDQ19TVEFUVVNfQSwgaWR4KTsKIAl9IGVsc2UgewotCQlhZGRyID0gTUNfSU5UX0NBVVNFOwotCQljbnRfYWRkciA9IE1DX0VDQ19TVEFUVVM7CisJCWFkZHIgPSBNQ19JTlRfQ0FVU0VfQTsKKwkJY250X2FkZHIgPSBNQ19FQ0NfU1RBVFVTX0E7CiAJfQogCiAJdiA9IGNzaW9fcmRfcmVnMzIoaHcsIGFkZHIpICYgTUVNX0lOVF9NQVNLOwotCWlmICh2ICYgUEVSUl9JTlRfQ0FVU0UpCisJaWYgKHYgJiBQRVJSX0lOVF9DQVVTRV9GKQogCQljc2lvX2ZhdGFsKGh3LCAiJXMgRklGTyBwYXJpdHkgZXJyb3JcbiIsIG5hbWVbaWR4XSk7Ci0JaWYgKHYgJiBFQ0NfQ0VfSU5UX0NBVVNFKSB7Ci0JCXVpbnQzMl90IGNudCA9IEVDQ19DRUNOVF9HRVQoY3Npb19yZF9yZWczMihodywgY250X2FkZHIpKTsKKwlpZiAodiAmIEVDQ19DRV9JTlRfQ0FVU0VfRikgeworCQl1aW50MzJfdCBjbnQgPSBFQ0NfQ0VDTlRfRyhjc2lvX3JkX3JlZzMyKGh3LCBjbnRfYWRkcikpOwogCi0JCWNzaW9fd3JfcmVnMzIoaHcsIEVDQ19DRUNOVF9NQVNLLCBjbnRfYWRkcik7CisJCWNzaW9fd3JfcmVnMzIoaHcsIEVDQ19DRUNOVF9WKEVDQ19DRUNOVF9NKSwgY250X2FkZHIpOwogCQljc2lvX3dhcm4oaHcsICIldSAlcyBjb3JyZWN0YWJsZSBFQ0MgZGF0YSBlcnJvciVzXG4iLAogCQkJICAgIGNudCwgbmFtZVtpZHhdLCBjbnQgPiAxID8gInMiIDogIiIpOwogCX0KLQlpZiAodiAmIEVDQ19VRV9JTlRfQ0FVU0UpCisJaWYgKHYgJiBFQ0NfVUVfSU5UX0NBVVNFX0YpCiAJCWNzaW9fZmF0YWwoaHcsICIlcyB1bmNvcnJlY3RhYmxlIEVDQyBkYXRhIGVycm9yXG4iLCBuYW1lW2lkeF0pOwogCiAJY3Npb193cl9yZWczMihodywgdiwgYWRkcik7Ci0JaWYgKHYgJiAoUEVSUl9JTlRfQ0FVU0UgfCBFQ0NfVUVfSU5UX0NBVVNFKSkKKwlpZiAodiAmIChQRVJSX0lOVF9DQVVTRV9GIHwgRUNDX1VFX0lOVF9DQVVTRV9GKSkKIAkJY3Npb19od19mYXRhbF9lcnIoaHcpOwogfQogCkBAIC0zMDI4LDE4ICszMDQxLDE4IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNzaW9fbWFfaW50cl9oYW5kbGVyKHN0cnVjdCBjc2lvX2h3ICpodykKIHsKLQl1aW50MzJfdCB2LCBzdGF0dXMgPSBjc2lvX3JkX3JlZzMyKGh3LCBNQV9JTlRfQ0FVU0UpOworCXVpbnQzMl90IHYsIHN0YXR1cyA9IGNzaW9fcmRfcmVnMzIoaHcsIE1BX0lOVF9DQVVTRV9BKTsKIAotCWlmIChzdGF0dXMgJiBNRU1fUEVSUl9JTlRfQ0FVU0UpCisJaWYgKHN0YXR1cyAmIE1FTV9QRVJSX0lOVF9DQVVTRV9GKQogCQljc2lvX2ZhdGFsKGh3LCAiTUEgcGFyaXR5IGVycm9yLCBwYXJpdHkgc3RhdHVzICUjeFxuIiwKLQkJCSAgICBjc2lvX3JkX3JlZzMyKGh3LCBNQV9QQVJJVFlfRVJST1JfU1RBVFVTKSk7Ci0JaWYgKHN0YXR1cyAmIE1FTV9XUkFQX0lOVF9DQVVTRSkgewotCQl2ID0gY3Npb19yZF9yZWczMihodywgTUFfSU5UX1dSQVBfU1RBVFVTKTsKKwkJCSAgICBjc2lvX3JkX3JlZzMyKGh3LCBNQV9QQVJJVFlfRVJST1JfU1RBVFVTX0EpKTsKKwlpZiAoc3RhdHVzICYgTUVNX1dSQVBfSU5UX0NBVVNFX0YpIHsKKwkJdiA9IGNzaW9fcmRfcmVnMzIoaHcsIE1BX0lOVF9XUkFQX1NUQVRVU19BKTsKIAkJY3Npb19mYXRhbChodywKIAkJICAgIk1BIGFkZHJlc3Mgd3JhcC1hcm91bmQgZXJyb3IgYnkgY2xpZW50ICV1IHRvIGFkZHJlc3MgJSN4XG4iLAotCQkgICBNRU1fV1JBUF9DTElFTlRfTlVNX0dFVCh2KSwgTUVNX1dSQVBfQUREUkVTU19HRVQodikgPDwgNCk7CisJCSAgIE1FTV9XUkFQX0NMSUVOVF9OVU1fRyh2KSwgTUVNX1dSQVBfQUREUkVTU19HKHYpIDw8IDQpOwogCX0KLQljc2lvX3dyX3JlZzMyKGh3LCBzdGF0dXMsIE1BX0lOVF9DQVVTRSk7CisJY3Npb193cl9yZWczMihodywgc3RhdHVzLCBNQV9JTlRfQ0FVU0VfQSk7CiAJY3Npb19od19mYXRhbF9lcnIoaHcpOwogfQogCkBAIC0zMDQ5LDEzICszMDYyLDEzIEBACiBzdGF0aWMgdm9pZCBjc2lvX3NtYl9pbnRyX2hhbmRsZXIoc3RydWN0IGNzaW9faHcgKmh3KQogewogCXN0YXRpYyBzdHJ1Y3QgaW50cl9pbmZvIHNtYl9pbnRyX2luZm9bXSA9IHsKLQkJeyBNU1RUWEZJRk9QQVJJTlQsICJTTUIgbWFzdGVyIFR4IEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNU1RSWEZJRk9QQVJJTlQsICJTTUIgbWFzdGVyIFJ4IEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBTTFZGSUZPUEFSSU5ULCAiU01CIHNsYXZlIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBNU1RUWEZJRk9QQVJJTlRfRiwgIlNNQiBtYXN0ZXIgVHggRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IE1TVFJYRklGT1BBUklOVF9GLCAiU01CIG1hc3RlciBSeCBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgU0xWRklGT1BBUklOVF9GLCAiU01CIHNsYXZlIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKIAkJeyAwLCBOVUxMLCAwLCAwIH0KIAl9OwogCi0JaWYgKGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LCBTTUJfSU5UX0NBVVNFLCBzbWJfaW50cl9pbmZvKSkKKwlpZiAoY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIFNNQl9JTlRfQ0FVU0VfQSwgc21iX2ludHJfaW5mbykpCiAJCWNzaW9faHdfZmF0YWxfZXJyKGh3KTsKIH0KIApAQCAtMzA2NSwxNCArMzA3OCwxNCBAQAogc3RhdGljIHZvaWQgY3Npb19uY3NpX2ludHJfaGFuZGxlcihzdHJ1Y3QgY3Npb19odyAqaHcpCiB7CiAJc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gbmNzaV9pbnRyX2luZm9bXSA9IHsKLQkJeyBDSU1fRE1fUFJUWV9FUlIsICJOQy1TSSBDSU0gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNUFNfRE1fUFJUWV9FUlIsICJOQy1TSSBNUFMgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBUWEZJRk9fUFJUWV9FUlIsICJOQy1TSSBUeCBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUlhGSUZPX1BSVFlfRVJSLCAiTkMtU0kgUnggRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IENJTV9ETV9QUlRZX0VSUl9GLCAiTkMtU0kgQ0lNIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgTVBTX0RNX1BSVFlfRVJSX0YsICJOQy1TSSBNUFMgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBUWEZJRk9fUFJUWV9FUlJfRiwgIk5DLVNJIFR4IEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBSWEZJRk9fUFJUWV9FUlJfRiwgIk5DLVNJIFJ4IEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKIAkJeyAwLCBOVUxMLCAwLCAwIH0KIAl9OwogCi0JaWYgKGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LCBOQ1NJX0lOVF9DQVVTRSwgbmNzaV9pbnRyX2luZm8pKQorCWlmIChjc2lvX2hhbmRsZV9pbnRyX3N0YXR1cyhodywgTkNTSV9JTlRfQ0FVU0VfQSwgbmNzaV9pbnRyX2luZm8pKQogCQljc2lvX2h3X2ZhdGFsX2Vycihodyk7CiB9CiAKQEAgLTMwODEsMTcgKzMwOTQsMTcgQEAKICAqLwogc3RhdGljIHZvaWQgY3Npb194Z21hY19pbnRyX2hhbmRsZXIoc3RydWN0IGNzaW9faHcgKmh3LCBpbnQgcG9ydCkKIHsKLQl1aW50MzJfdCB2ID0gY3Npb19yZF9yZWczMihodywgQ1NJT19NQUNfSU5UX0NBVVNFX1JFRyhodywgcG9ydCkpOworCXVpbnQzMl90IHYgPSBjc2lvX3JkX3JlZzMyKGh3LCBUNV9QT1JUX1JFRyhwb3J0LCBNQUNfUE9SVF9JTlRfQ0FVU0VfQSkpOwogCi0JdiAmPSBUWEZJRk9fUFJUWV9FUlIgfCBSWEZJRk9fUFJUWV9FUlI7CisJdiAmPSBUWEZJRk9fUFJUWV9FUlJfRiB8IFJYRklGT19QUlRZX0VSUl9GOwogCWlmICghdikKIAkJcmV0dXJuOwogCi0JaWYgKHYgJiBUWEZJRk9fUFJUWV9FUlIpCisJaWYgKHYgJiBUWEZJRk9fUFJUWV9FUlJfRikKIAkJY3Npb19mYXRhbChodywgIlhHTUFDICVkIFR4IEZJRk8gcGFyaXR5IGVycm9yXG4iLCBwb3J0KTsKLQlpZiAodiAmIFJYRklGT19QUlRZX0VSUikKKwlpZiAodiAmIFJYRklGT19QUlRZX0VSUl9GKQogCQljc2lvX2ZhdGFsKGh3LCAiWEdNQUMgJWQgUnggRklGTyBwYXJpdHkgZXJyb3JcbiIsIHBvcnQpOwotCWNzaW9fd3JfcmVnMzIoaHcsIHYsIENTSU9fTUFDX0lOVF9DQVVTRV9SRUcoaHcsIHBvcnQpKTsKKwljc2lvX3dyX3JlZzMyKGh3LCB2LCBUNV9QT1JUX1JFRyhwb3J0LCBNQUNfUE9SVF9JTlRfQ0FVU0VfQSkpOwogCWNzaW9faHdfZmF0YWxfZXJyKGh3KTsKIH0KIApAQCAtMzEwMSwxMiArMzExNCwxMiBAQAogc3RhdGljIHZvaWQgY3Npb19wbF9pbnRyX2hhbmRsZXIoc3RydWN0IGNzaW9faHcgKmh3KQogewogCXN0YXRpYyBzdHJ1Y3QgaW50cl9pbmZvIHBsX2ludHJfaW5mb1tdID0gewotCQl7IEZBVEFMUEVSUiwgIlQ0IGZhdGFsIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUEVSUlZGSUQsICJQTCBWRklEX01BUCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IEZBVEFMUEVSUl9GLCAiVDQgZmF0YWwgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBQRVJSVkZJRF9GLCAiUEwgVkZJRF9NQVAgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKIAkJeyAwLCBOVUxMLCAwLCAwIH0KIAl9OwogCi0JaWYgKGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LCBQTF9QTF9JTlRfQ0FVU0UsIHBsX2ludHJfaW5mbykpCisJaWYgKGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LCBQTF9QTF9JTlRfQ0FVU0VfQSwgcGxfaW50cl9pbmZvKSkKIAkJY3Npb19od19mYXRhbF9lcnIoaHcpOwogfQogCkBAIC0zMTIxLDcgKzMxMzQsNyBAQAogaW50CiBjc2lvX2h3X3Nsb3dfaW50cl9oYW5kbGVyKHN0cnVjdCBjc2lvX2h3ICpodykKIHsKLQl1aW50MzJfdCBjYXVzZSA9IGNzaW9fcmRfcmVnMzIoaHcsIFBMX0lOVF9DQVVTRSk7CisJdWludDMyX3QgY2F1c2UgPSBjc2lvX3JkX3JlZzMyKGh3LCBQTF9JTlRfQ0FVU0VfQSk7CiAKIAlpZiAoIShjYXVzZSAmIENTSU9fR0xCTF9JTlRSX01BU0spKSB7CiAJCUNTSU9fSU5DX1NUQVRTKGh3LCBuX3BsaW50X3VuZXhwKTsKQEAgLTMxMzIsNzUgKzMxNDUsNzUgQEAKIAogCUNTSU9fSU5DX1NUQVRTKGh3LCBuX3BsaW50X2NudCk7CiAKLQlpZiAoY2F1c2UgJiBDSU0pCisJaWYgKGNhdXNlICYgQ0lNX0YpCiAJCWNzaW9fY2ltX2ludHJfaGFuZGxlcihodyk7CiAKLQlpZiAoY2F1c2UgJiBNUFMpCisJaWYgKGNhdXNlICYgTVBTX0YpCiAJCWNzaW9fbXBzX2ludHJfaGFuZGxlcihodyk7CiAKLQlpZiAoY2F1c2UgJiBOQ1NJKQorCWlmIChjYXVzZSAmIE5DU0lfRikKIAkJY3Npb19uY3NpX2ludHJfaGFuZGxlcihodyk7CiAKLQlpZiAoY2F1c2UgJiBQTCkKKwlpZiAoY2F1c2UgJiBQTF9GKQogCQljc2lvX3BsX2ludHJfaGFuZGxlcihodyk7CiAKLQlpZiAoY2F1c2UgJiBTTUIpCisJaWYgKGNhdXNlICYgU01CX0YpCiAJCWNzaW9fc21iX2ludHJfaGFuZGxlcihodyk7CiAKLQlpZiAoY2F1c2UgJiBYR01BQzApCisJaWYgKGNhdXNlICYgWEdNQUMwX0YpCiAJCWNzaW9feGdtYWNfaW50cl9oYW5kbGVyKGh3LCAwKTsKIAotCWlmIChjYXVzZSAmIFhHTUFDMSkKKwlpZiAoY2F1c2UgJiBYR01BQzFfRikKIAkJY3Npb194Z21hY19pbnRyX2hhbmRsZXIoaHcsIDEpOwogCi0JaWYgKGNhdXNlICYgWEdNQUNfS1IwKQorCWlmIChjYXVzZSAmIFhHTUFDX0tSMF9GKQogCQljc2lvX3hnbWFjX2ludHJfaGFuZGxlcihodywgMik7CiAKLQlpZiAoY2F1c2UgJiBYR01BQ19LUjEpCisJaWYgKGNhdXNlICYgWEdNQUNfS1IxX0YpCiAJCWNzaW9feGdtYWNfaW50cl9oYW5kbGVyKGh3LCAzKTsKIAotCWlmIChjYXVzZSAmIFBDSUUpCisJaWYgKGNhdXNlICYgUENJRV9GKQogCQlody0+Y2hpcF9vcHMtPmNoaXBfcGNpZV9pbnRyX2hhbmRsZXIoaHcpOwogCi0JaWYgKGNhdXNlICYgTUMpCisJaWYgKGNhdXNlICYgTUNfRikKIAkJY3Npb19tZW1faW50cl9oYW5kbGVyKGh3LCBNRU1fTUMpOwogCi0JaWYgKGNhdXNlICYgRURDMCkKKwlpZiAoY2F1c2UgJiBFREMwX0YpCiAJCWNzaW9fbWVtX2ludHJfaGFuZGxlcihodywgTUVNX0VEQzApOwogCi0JaWYgKGNhdXNlICYgRURDMSkKKwlpZiAoY2F1c2UgJiBFREMxX0YpCiAJCWNzaW9fbWVtX2ludHJfaGFuZGxlcihodywgTUVNX0VEQzEpOwogCi0JaWYgKGNhdXNlICYgTEUpCisJaWYgKGNhdXNlICYgTEVfRikKIAkJY3Npb19sZV9pbnRyX2hhbmRsZXIoaHcpOwogCi0JaWYgKGNhdXNlICYgVFApCisJaWYgKGNhdXNlICYgVFBfRikKIAkJY3Npb190cF9pbnRyX2hhbmRsZXIoaHcpOwogCi0JaWYgKGNhdXNlICYgTUEpCisJaWYgKGNhdXNlICYgTUFfRikKIAkJY3Npb19tYV9pbnRyX2hhbmRsZXIoaHcpOwogCi0JaWYgKGNhdXNlICYgUE1fVFgpCisJaWYgKGNhdXNlICYgUE1fVFhfRikKIAkJY3Npb19wbXR4X2ludHJfaGFuZGxlcihodyk7CiAKLQlpZiAoY2F1c2UgJiBQTV9SWCkKKwlpZiAoY2F1c2UgJiBQTV9SWF9GKQogCQljc2lvX3BtcnhfaW50cl9oYW5kbGVyKGh3KTsKIAotCWlmIChjYXVzZSAmIFVMUF9SWCkKKwlpZiAoY2F1c2UgJiBVTFBfUlhfRikKIAkJY3Npb191bHByeF9pbnRyX2hhbmRsZXIoaHcpOwogCi0JaWYgKGNhdXNlICYgQ1BMX1NXSVRDSCkKKwlpZiAoY2F1c2UgJiBDUExfU1dJVENIX0YpCiAJCWNzaW9fY3Bsc3dfaW50cl9oYW5kbGVyKGh3KTsKIAotCWlmIChjYXVzZSAmIFNHRSkKKwlpZiAoY2F1c2UgJiBTR0VfRikKIAkJY3Npb19zZ2VfaW50cl9oYW5kbGVyKGh3KTsKIAotCWlmIChjYXVzZSAmIFVMUF9UWCkKKwlpZiAoY2F1c2UgJiBVTFBfVFhfRikKIAkJY3Npb191bHB0eF9pbnRyX2hhbmRsZXIoaHcpOwogCiAJLyogQ2xlYXIgdGhlIGludGVycnVwdHMganVzdCBwcm9jZXNzZWQgZm9yIHdoaWNoIHdlIGFyZSB0aGUgbWFzdGVyLiAqLwotCWNzaW9fd3JfcmVnMzIoaHcsIGNhdXNlICYgQ1NJT19HTEJMX0lOVFJfTUFTSywgUExfSU5UX0NBVVNFKTsKLQljc2lvX3JkX3JlZzMyKGh3LCBQTF9JTlRfQ0FVU0UpOyAvKiBmbHVzaCAqLworCWNzaW9fd3JfcmVnMzIoaHcsIGNhdXNlICYgQ1NJT19HTEJMX0lOVFJfTUFTSywgUExfSU5UX0NBVVNFX0EpOworCWNzaW9fcmRfcmVnMzIoaHcsIFBMX0lOVF9DQVVTRV9BKTsgLyogZmx1c2ggKi8KIAogCXJldHVybiAxOwogfQpAQCAtMzg0MCwxMyArMzg1Myw3IEBACiAJCXByb3RfdHlwZSA9IChkZXZfaWQgJiBDU0lPX0FTSUNfREVWSURfUFJPVE9fTUFTSyk7CiAJCWFkYXBfdHlwZSA9IChkZXZfaWQgJiBDU0lPX0FTSUNfREVWSURfVFlQRV9NQVNLKTsKIAotCQlpZiAocHJvdF90eXBlID09IENTSU9fVDRfRkNPRV9BU0lDKSB7Ci0JCQltZW1jcHkoaHctPmh3X3ZlciwKLQkJCSAgICAgICBjc2lvX3Q0X2Zjb2VfYWRhcHRlcnNbYWRhcF90eXBlXS5tb2RlbF9ubywgMTYpOwotCQkJbWVtY3B5KGh3LT5tb2RlbF9kZXNjLAotCQkJICAgICAgIGNzaW9fdDRfZmNvZV9hZGFwdGVyc1thZGFwX3R5cGVdLmRlc2NyaXB0aW9uLAotCQkJICAgICAgIDMyKTsKLQkJfSBlbHNlIGlmIChwcm90X3R5cGUgPT0gQ1NJT19UNV9GQ09FX0FTSUMpIHsKKwkJaWYgKHByb3RfdHlwZSA9PSBDU0lPX1Q1X0ZDT0VfQVNJQykgewogCQkJbWVtY3B5KGh3LT5od192ZXIsCiAJCQkgICAgICAgY3Npb190NV9mY29lX2FkYXB0ZXJzW2FkYXBfdHlwZV0ubW9kZWxfbm8sIDE2KTsKIAkJCW1lbWNweShody0+bW9kZWxfZGVzYywKQEAgLTM4ODMsOCArMzg5MCw4IEBACiAKIAlzdHJjcHkoaHctPm5hbWUsIENTSU9fSFdfTkFNRSk7CiAKLQkvKiBJbml0aWFsaXplIHRoZSBIVyBjaGlwIG9wcyB3aXRoIFQ0L1Q1IHNwZWNpZmljIG9wcyAqLwotCWh3LT5jaGlwX29wcyA9IGNzaW9faXNfdDQoaHctPmNoaXBfaWQpID8gJnQ0X29wcyA6ICZ0NV9vcHM7CisJLyogSW5pdGlhbGl6ZSB0aGUgSFcgY2hpcCBvcHMgVDUgc3BlY2lmaWMgb3BzICovCisJaHctPmNoaXBfb3BzID0gJnQ1X29wczsKIAogCS8qIFNldCB0aGUgbW9kZWwgJiBpdHMgZGVzY3JpcHRpb24gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9faHcuaCBiL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX2h3LmgKaW5kZXggNjgyNDhkYS4uMDI5YmVmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9faHcuaAorKysgYi9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19ody5oCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV90cmFuc3BvcnRfZmMuaD4KIAorI2luY2x1ZGUgInQ0X2h3LmgiCiAjaW5jbHVkZSAiY3Npb19od19jaGlwLmgiCiAjaW5jbHVkZSAiY3Npb193ci5oIgogI2luY2x1ZGUgImNzaW9fbWIuaCIKQEAgLTExNywxMCArMTE4LDEwIEBACiAjZGVmaW5lIENTSU9fQVNJQ19ERVZJRF9QUk9UT19NQVNLCQkweEZGMDAKICNkZWZpbmUgQ1NJT19BU0lDX0RFVklEX1RZUEVfTUFTSwkJMHgwMEZGCiAKLSNkZWZpbmUgQ1NJT19HTEJMX0lOVFJfTUFTSwkJKENJTSB8IE1QUyB8IFBMIHwgUENJRSB8IE1DIHwgRURDMCB8IFwKLQkJCQkJIEVEQzEgfCBMRSB8IFRQIHwgTUEgfCBQTV9UWCB8IFBNX1JYIHwgXAotCQkJCQkgVUxQX1JYIHwgQ1BMX1NXSVRDSCB8IFNHRSB8IFwKLQkJCQkJIFVMUF9UWCB8IFNGKQorI2RlZmluZSBDU0lPX0dMQkxfSU5UUl9NQVNLCShDSU1fRiB8IE1QU19GIHwgUExfRiB8IFBDSUVfRiB8IE1DX0YgfCBcCisJCQkJIEVEQzBfRiB8IEVEQzFfRiB8IExFX0YgfCBUUF9GIHwgTUFfRiB8IFwKKwkJCQkgUE1fVFhfRiB8IFBNX1JYX0YgfCBVTFBfUlhfRiB8IFwKKwkJCQkgQ1BMX1NXSVRDSF9GIHwgU0dFX0YgfCBVTFBfVFhfRiB8IFNGX0YpCiAKIC8qCiAgKiBIYXJkIHBhcmFtZXRlcnMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBjYXJkIGluIHRoZSBhYnNlbmNlIG9mIGEKQEAgLTE3NCwxNiArMTc1LDEyIEBACiB9OwogCiBlbnVtIHsKLQlFRVBST01WU0laRSAgICA9IDMyNzY4LCAvKiBTZXJpYWwgRUVQUk9NIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBzaXplICovCiAJU0VSTlVNX0xFTiAgICAgPSAxNiwgICAgLyogU2VyaWFsICMgbGVuZ3RoICovCiAJRUNfTEVOICAgICAgICAgPSAxNiwgICAgLyogRS9DIGxlbmd0aCAqLwogCUlEX0xFTiAgICAgICAgID0gMTYsICAgIC8qIElEIGxlbmd0aCAqLwotCVRSQUNFX0xFTiAgICAgID0gMTEyLCAgIC8qIGxlbmd0aCBvZiB0cmFjZSBkYXRhIGFuZCBtYXNrICovCiB9OwogCiBlbnVtIHsKLQlTRl9QQUdFX1NJWkUgPSAyNTYsICAgICAgICAgICAvKiBzZXJpYWwgZmxhc2ggcGFnZSBzaXplICovCi0JU0ZfU0VDX1NJWkUgPSA2NCAqIDEwMjQsICAgICAgLyogc2VyaWFsIGZsYXNoIHNlY3RvciBzaXplICovCiAJU0ZfU0laRSA9IFNGX1NFQ19TSVpFICogMTYsICAgLyogc2VyaWFsIGZsYXNoIHNpemUgKi8KIH07CiAKQEAgLTE5OSwzOSArMTk2LDggQEAKIAlTRl9SRF9EQVRBX0ZBU1QgPSAweGIsICAgICAgICAvKiByZWFkIGZsYXNoICovCiAJU0ZfUkRfSUQJPSAweDlmLAkgICAgICAvKiByZWFkIElEICovCiAJU0ZfRVJBU0VfU0VDVE9SID0gMHhkOCwgICAgICAgLyogZXJhc2Ugc2VjdG9yICovCi0KLQlGV19TVEFSVF9TRUMgPSA4LCAgICAgICAgICAgICAvKiBmaXJzdCBmbGFzaCBzZWN0b3IgZm9yIEZXICovCi0JRldfRU5EX1NFQyA9IDE1LCAgICAgICAgICAgICAgLyogbGFzdCBmbGFzaCBzZWN0b3IgZm9yIEZXICovCi0JRldfSU1HX1NUQVJUID0gRldfU1RBUlRfU0VDICogU0ZfU0VDX1NJWkUsCi0JRldfTUFYX1NJWkUgPSAoRldfRU5EX1NFQyAtIEZXX1NUQVJUX1NFQyArIDEpICogU0ZfU0VDX1NJWkUsCi0KLQlGTEFTSF9DRkdfTUFYX1NJWkUgICAgPSAweDEwMDAwICwgLyogbWF4IHNpemUgb2YgdGhlIGZsYXNoIGNvbmZpZyBmaWxlKi8KLQlGTEFTSF9DRkdfT0ZGU0VUICAgICAgPSAweDFmMDAwMCwKLQlGTEFTSF9DRkdfU1RBUlRfU0VDICAgPSBGTEFTSF9DRkdfT0ZGU0VUIC8gU0ZfU0VDX1NJWkUsCiB9OwogCi0vKgotICogRmxhc2ggbGF5b3V0LgotICovCi0jZGVmaW5lIEZMQVNIX1NUQVJUKHN0YXJ0KQkoKHN0YXJ0KSAqIFNGX1NFQ19TSVpFKQotI2RlZmluZSBGTEFTSF9NQVhfU0laRShuc2VjcykJKChuc2VjcykgKiBTRl9TRUNfU0laRSkKLQotZW51bSB7Ci0JLyoKLQkgKiBMb2NhdGlvbiBvZiBmaXJtd2FyZSBpbWFnZSBpbiBGTEFTSC4KLQkgKi8KLQlGTEFTSF9GV19TVEFSVF9TRUMgPSA4LAotCUZMQVNIX0ZXX05TRUNTID0gOCwKLQlGTEFTSF9GV19TVEFSVCA9IEZMQVNIX1NUQVJUKEZMQVNIX0ZXX1NUQVJUX1NFQyksCi0JRkxBU0hfRldfTUFYX1NJWkUgPSBGTEFTSF9NQVhfU0laRShGTEFTSF9GV19OU0VDUyksCi0KLQkvKiBMb2NhdGlvbiBvZiBGaXJtd2FyZSBDb25maWd1cmF0aW9uIEZpbGUgaW4gRkxBU0guICovCi0JRkxBU0hfQ0ZHX1NUQVJUID0gRkxBU0hfU1RBUlQoRkxBU0hfQ0ZHX1NUQVJUX1NFQyksCi19OwotCi0jdW5kZWYgRkxBU0hfU1RBUlQKLSN1bmRlZiBGTEFTSF9NQVhfU0laRQotCiAvKiBNYW5hZ2VtZW50IG1vZHVsZSAqLwogZW51bSB7CiAJQ1NJT19NR01UX0VRX1dSU0laRSA9IDUxMiwKQEAgLTQ4MiwxMSArNDQ4LDYgQEAKIAl1aW50MzJfdAkJdHBfdmVyczsKIAljaGFyCQkJY2hpcF92ZXI7CiAJdWludDE2X3QJCWNoaXBfaWQ7CQkvKiBUZWxscyBUNC9UNSBjaGlwICovCi0JdWludDMyX3QJCWNmZ19maW5pdmVyOwotCXVpbnQzMl90CQljZmdfZmluaWNzdW07Ci0JdWludDMyX3QJCWNmZ19jZmNzdW07Ci0JdWludDhfdAkJCWNmZ19jc3VtX3N0YXR1czsKLQl1aW50OF90CQkJY2ZnX3N0b3JlOwogCWVudW0gY3Npb19kZXZfc3RhdGUJZndfc3RhdGU7CiAJc3RydWN0IGNzaW9fdnBkCQl2cGQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX2h3X2NoaXAuaCBiL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX2h3X2NoaXAuaAppbmRleCA0NzUyZmVkLi5iNTZhMTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19od19jaGlwLmgKKysrIGIvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9faHdfY2hpcC5oCkBAIC0zNywyNCArMzcsMjcgQEAKICNpbmNsdWRlICJjc2lvX2RlZnMuaCIKIAogLyogRGVmaW5lIE1BQ1JPIHZhbHVlcyAqLwotI2RlZmluZSBDU0lPX0hXX1Q0CQkJCTB4NDAwMAotI2RlZmluZSBDU0lPX1Q0X0ZDT0VfQVNJQwkJCTB4NDYwMAogI2RlZmluZSBDU0lPX0hXX1Q1CQkJCTB4NTAwMAogI2RlZmluZSBDU0lPX1Q1X0ZDT0VfQVNJQwkJCTB4NTYwMAogI2RlZmluZSBDU0lPX0hXX0NISVBfTUFTSwkJCTB4RjAwMAogCi0jZGVmaW5lIFQ0X1JFR01BUF9TSVpFCQkJCSgxNjAgKiAxMDI0KQogI2RlZmluZSBUNV9SRUdNQVBfU0laRQkJCQkoMzMyICogMTAyNCkKLSNkZWZpbmUgRldfRk5BTUVfVDQJCQkJImN4Z2I0L3Q0ZncuYmluIgogI2RlZmluZSBGV19GTkFNRV9UNQkJCQkiY3hnYjQvdDVmdy5iaW4iCi0jZGVmaW5lIEZXX0NGR19OQU1FX1Q0CQkJCSJjeGdiNC90NC1jb25maWcudHh0IgogI2RlZmluZSBGV19DRkdfTkFNRV9UNQkJCQkiY3hnYjQvdDUtY29uZmlnLnR4dCIKIAotLyogRGVmaW5lIHN0YXRpYyBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGNzaW9faXNfdDQodWludDE2X3QgY2hpcCkKLXsKLQlyZXR1cm4gKGNoaXAgPT0gQ1NJT19IV19UNCk7Ci19CisjZGVmaW5lIENIRUxTSU9fQ0hJUF9DT0RFKHZlcnNpb24sIHJldmlzaW9uKSAoKCh2ZXJzaW9uKSA8PCA0KSB8IChyZXZpc2lvbikpCisjZGVmaW5lIENIRUxTSU9fQ0hJUF9GUEdBICAgICAgICAgIDB4MTAwCisjZGVmaW5lIENIRUxTSU9fQ0hJUF9WRVJTSU9OKGNvZGUpICgoKGNvZGUpID4+IDEyKSAmIDB4ZikKKyNkZWZpbmUgQ0hFTFNJT19DSElQX1JFTEVBU0UoY29kZSkgKChjb2RlKSAmIDB4ZikKKworI2RlZmluZSBDSEVMU0lPX1Q1CQkweDUKKworZW51bSBjaGlwX3R5cGUgeworCVQ1X0EwID0gQ0hFTFNJT19DSElQX0NPREUoQ0hFTFNJT19UNSwgMCksCisJVDVfQTEgPSBDSEVMU0lPX0NISVBfQ09ERShDSEVMU0lPX1Q1LCAxKSwKKwlUNV9GSVJTVF9SRVYJPSBUNV9BMCwKKwlUNV9MQVNUX1JFVgk9IFQ1X0ExLAorfTsKIAogc3RhdGljIGlubGluZSBpbnQgY3Npb19pc190NSh1aW50MTZfdCBjaGlwKQogewpAQCAtNjUsMzAgKzY4LDIyIEBACiAjZGVmaW5lIENTSU9fREVWSUNFKGRldmlkLCBpZHgpCQkJCQkJXAogCXsgUENJX1ZFTkRPUl9JRF9DSEVMU0lPLCAoZGV2aWQpLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAoaWR4KSB9CiAKLSNkZWZpbmUgQ1NJT19IV19QSURYKGh3LCBpbmRleCkJCQkJCQlcCi0JKGNzaW9faXNfdDQoaHctPmNoaXBfaWQpID8gKFBJRFgoaW5kZXgpKSA6CQkJXAotCQkJCQkoUElEWF9UNShpbmRleCkgfCBEQlRZUEUoMVUpKSkKKyNpbmNsdWRlICJ0NGZ3X2FwaS5oIgorI2luY2x1ZGUgInQ0ZndfdmVyc2lvbi5oIgogCi0jZGVmaW5lIENTSU9fSFdfTFBfSU5UX1RIUkVTSChodywgdmFsKQkJCQkJXAotCShjc2lvX2lzX3Q0KGh3LT5jaGlwX2lkKSA/IChMUF9JTlRfVEhSRVNIKHZhbCkpIDoJCVwKLQkJCQkJKFZfTFBfSU5UX1RIUkVTSF9UNSh2YWwpKSkKKyNkZWZpbmUgRldfVkVSU0lPTihjaGlwKSAoIFwKKwkJRldfSERSX0ZXX1ZFUl9NQUpPUl9HKGNoaXAjI0ZXX1ZFUlNJT05fTUFKT1IpIHwgXAorCQlGV19IRFJfRldfVkVSX01JTk9SX0coY2hpcCMjRldfVkVSU0lPTl9NSU5PUikgfCBcCisJCUZXX0hEUl9GV19WRVJfTUlDUk9fRyhjaGlwIyNGV19WRVJTSU9OX01JQ1JPKSB8IFwKKwkJRldfSERSX0ZXX1ZFUl9CVUlMRF9HKGNoaXAjI0ZXX1ZFUlNJT05fQlVJTEQpKQorI2RlZmluZSBGV19JTlRGVkVSKGNoaXAsIGludGYpIChGV19IRFJfSU5URlZFUl8jI2ludGYpCiAKLSNkZWZpbmUgQ1NJT19IV19NX0xQX0lOVF9USFJFU0goaHcpCQkJCQlcCi0JKGNzaW9faXNfdDQoaHctPmNoaXBfaWQpID8gKExQX0lOVF9USFJFU0hfTUFTSykgOiAoTV9MUF9JTlRfVEhSRVNIX1Q1KSkKLQotI2RlZmluZSBDU0lPX01BQ19JTlRfQ0FVU0VfUkVHKGh3LCBwb3J0KQkJCQlcCi0JKGNzaW9faXNfdDQoaHctPmNoaXBfaWQpID8gKFBPUlRfUkVHKHBvcnQsIFhHTUFDX1BPUlRfSU5UX0NBVVNFKSkgOiBcCi0JCQkJKFQ1X1BPUlRfUkVHKHBvcnQsIE1BQ19QT1JUX0lOVF9DQVVTRSkpKQotCi0jZGVmaW5lIEZXX1ZFUlNJT05fTUFKT1IoaHcpIChjc2lvX2lzX3Q0KGh3LT5jaGlwX2lkKSA/IDEgOiAwKQotI2RlZmluZSBGV19WRVJTSU9OX01JTk9SKGh3KSAoY3Npb19pc190NChody0+Y2hpcF9pZCkgPyAyIDogMCkKLSNkZWZpbmUgRldfVkVSU0lPTl9NSUNSTyhodykgKGNzaW9faXNfdDQoaHctPmNoaXBfaWQpID8gOCA6IDApCi0KLSNkZWZpbmUgQ1NJT19GV19GTkFNRShodykJCQkJCQlcCi0JKGNzaW9faXNfdDQoaHctPmNoaXBfaWQpID8gRldfRk5BTUVfVDQgOiBGV19GTkFNRV9UNSkKLQotI2RlZmluZSBDU0lPX0NGX0ZOQU1FKGh3KQkJCQkJCVwKLQkoY3Npb19pc190NChody0+Y2hpcF9pZCkgPyBGV19DRkdfTkFNRV9UNCA6IEZXX0NGR19OQU1FX1Q1KQorc3RydWN0IGZ3X2luZm8geworCXU4IGNoaXA7CisJY2hhciAqZnNfbmFtZTsKKwljaGFyICpmd19tb2RfbmFtZTsKKwlzdHJ1Y3QgZndfaGRyIGZ3X2hkcjsKK307CiAKIC8qIERlY2xhcmUgRU5VTVMgKi8KIGVudW0geyBNRU1fRURDMCwgTUVNX0VEQzEsIE1FTV9NQywgTUVNX01DMCA9IE1FTV9NQywgTUVNX01DMSB9OwpAQCAtOTYsNyArOTEsNiBAQAogZW51bSB7CiAJTUVNV0lOX0FQRVJUVVJFID0gMjA0OCwKIAlNRU1XSU5fQkFTRSAgICAgPSAweDFiODAwLAotCU1FTVdJTl9DU0lPU1RPUiA9IDYsCQkvKiBQQ0ktZSBNZW1vcnkgV2luZG93IGFjY2VzcyAqLwogfTsKIAogLyogU2xvdyBwYXRoIGhhbmRsZXJzICovCkBAIC0xMjIsNyArMTE2LDYgQEAKIAl2b2lkICgqY2hpcF9kZnNfY3JlYXRlX2V4dF9tZW0pKHN0cnVjdCBjc2lvX2h3ICopOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBjc2lvX2h3X2NoaXBfb3BzIHQ0X29wczsKIGV4dGVybiBzdHJ1Y3QgY3Npb19od19jaGlwX29wcyB0NV9vcHM7CiAKICNlbmRpZiAvKiAjaWZuZGVmIF9fQ1NJT19IV19DSElQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9faHdfdDQuYyBiL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX2h3X3Q0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1ZDgzMTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9faHdfdDQuYworKysgL2Rldi9udWxsCkBAIC0xLDQwNCArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIENoZWxzaW8gRkNvRSBkcml2ZXIgZm9yIExpbnV4LgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEzIENoZWxzaW8gQ29tbXVuaWNhdGlvbnMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwotICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCi0gKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgotICoKLSAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCi0gKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCi0gKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCi0gKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECi0gKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KLSAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCi0gKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCi0gKiBTT0ZUV0FSRS4KLSAqLwotCi0jaW5jbHVkZSAiY3Npb19ody5oIgotI2luY2x1ZGUgImNzaW9faW5pdC5oIgotCi0vKgotICogUmV0dXJuIHRoZSBzcGVjaWZpZWQgUENJLUUgQ29uZmlndXJhdGlvbiBTcGFjZSByZWdpc3RlciBmcm9tIG91ciBQaHlzaWNhbAotICogRnVuY3Rpb24uICBXZSB0cnkgZmlyc3QgdmlhIGEgRmlybXdhcmUgTERTVCBDb21tYW5kIHNpbmNlIHdlIHByZWZlciB0byBsZXQKLSAqIHRoZSBmaXJtd2FyZSBvd24gYWxsIG9mIHRoZXNlIHJlZ2lzdGVycywgYnV0IGlmIHRoYXQgZmFpbHMgd2UgZ28gZm9yIGl0Ci0gKiBkaXJlY3RseSBvdXJzZWx2ZXMuCi0gKi8KLXN0YXRpYyB1aW50MzJfdAotY3Npb190NF9yZWFkX3BjaWVfY2ZnNChzdHJ1Y3QgY3Npb19odyAqaHcsIGludCByZWcpCi17Ci0JdTMyIHZhbCA9IDA7Ci0Jc3RydWN0IGNzaW9fbWIgKm1icDsKLQlpbnQgcnY7Ci0Jc3RydWN0IGZ3X2xkc3RfY21kICpsZHN0X2NtZDsKLQotCW1icCA9IG1lbXBvb2xfYWxsb2MoaHctPm1iX21lbXBvb2wsIEdGUF9BVE9NSUMpOwotCWlmICghbWJwKSB7Ci0JCUNTSU9fSU5DX1NUQVRTKGh3LCBuX2Vycl9ub21lbSk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChody0+cGRldiwgcmVnLCAmdmFsKTsKLQkJcmV0dXJuIHZhbDsKLQl9Ci0KLQljc2lvX21iX2xkc3QoaHcsIG1icCwgQ1NJT19NQl9ERUZBVUxUX1RNTywgcmVnKTsKLQlydiA9IGNzaW9fbWJfaXNzdWUoaHcsIG1icCk7Ci0KLQkvKgotCSAqIElmIHRoZSBMRFNUIENvbW1hbmQgc3V1Y2NlZWRlZCwgZXhjdHJhY3QgdGhlIHJldHVybmVkIHJlZ2lzdGVyCi0JICogdmFsdWUuICBPdGhlcndpc2UgcmVhZCBpdCBkaXJlY3RseSBvdXJzZWxmLgotCSAqLwotCWlmIChydiA9PSAwKSB7Ci0JCWxkc3RfY21kID0gKHN0cnVjdCBmd19sZHN0X2NtZCAqKShtYnAtPm1iKTsKLQkJdmFsID0gbnRvaGwobGRzdF9jbWQtPnUucGNpZS5kYXRhWzBdKTsKLQl9IGVsc2UKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGh3LT5wZGV2LCByZWcsICZ2YWwpOwotCi0JbWVtcG9vbF9mcmVlKG1icCwgaHctPm1iX21lbXBvb2wpOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotc3RhdGljIGludAotY3Npb190NF9zZXRfbWVtX3dpbihzdHJ1Y3QgY3Npb19odyAqaHcsIHVpbnQzMl90IHdpbikKLXsKLQl1MzIgYmFyMDsKLQl1MzIgbWVtX3dpbl9iYXNlOwotCi0JLyoKLQkgKiBUcnVuY2F0aW9uIGludGVudGlvbmFsOiB3ZSBvbmx5IHJlYWQgdGhlIGJvdHRvbSAzMi1iaXRzIG9mIHRoZQotCSAqIDY0LWJpdCBCQVIwL0JBUjEgLi4uICBXZSB1c2UgdGhlIGhhcmR3YXJlIGJhY2tkb29yIG1lY2hhbmlzbSB0bwotCSAqIHJlYWQgQkFSMCBpbnN0ZWFkIG9mIHVzaW5nIHBjaV9yZXNvdXJjZV9zdGFydCgpIGJlY2F1c2Ugd2UgY291bGQgYmUKLQkgKiBvcGVyYXRpbmcgZnJvbSB3aXRoaW4gYSBWaXJ0dWFsIE1hY2hpbmUgd2hpY2ggaXMgdHJhcHBpbmcgb3VyCi0JICogYWNjZXNzZXMgdG8gb3VyIENvbmZpZ3VyYXRpb24gU3BhY2UgYW5kIHdlIG5lZWQgdG8gc2V0IHVwIHRoZSBQQ0ktRQotCSAqIE1lbW9yeSBXaW5kb3cgZGVjb2RlcnMgd2l0aCB0aGUgYWN0dWFsIGFkZHJlc3NlcyB3aGljaCB3aWxsIGJlCi0JICogY29taW5nIGFjcm9zcyB0aGUgUENJLUUgbGluay4KLQkgKi8KLQliYXIwID0gY3Npb190NF9yZWFkX3BjaWVfY2ZnNChodywgUENJX0JBU0VfQUREUkVTU18wKTsKLQliYXIwICY9IFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0s7Ci0KLQltZW1fd2luX2Jhc2UgPSBiYXIwICsgTUVNV0lOX0JBU0U7Ci0KLQkvKgotCSAqIFNldCB1cCBtZW1vcnkgd2luZG93IGZvciBhY2Nlc3NpbmcgYWRhcHRlciBtZW1vcnkgcmFuZ2VzLiAgKFJlYWQKLQkgKiBiYWNrIE1BIHJlZ2lzdGVyIHRvIGVuc3VyZSB0aGF0IGNoYW5nZXMgcHJvcGFnYXRlIGJlZm9yZSB3ZSBhdHRlbXB0Ci0JICogdG8gdXNlIHRoZSBuZXcgdmFsdWVzLikKLQkgKi8KLQljc2lvX3dyX3JlZzMyKGh3LCBtZW1fd2luX2Jhc2UgfCBCSVIoMCkgfAotCQkJICBXSU5ET1coaWxvZzIoTUVNV0lOX0FQRVJUVVJFKSAtIDEwKSwKLQkJCSAgUENJRV9NRU1fQUNDRVNTX1JFRyhQQ0lFX01FTV9BQ0NFU1NfQkFTRV9XSU4sIHdpbikpOwotCWNzaW9fcmRfcmVnMzIoaHcsCi0JCSAgICAgIFBDSUVfTUVNX0FDQ0VTU19SRUcoUENJRV9NRU1fQUNDRVNTX0JBU0VfV0lOLCB3aW4pKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgUENJRSBtb2R1bGUuCi0gKi8KLXN0YXRpYyB2b2lkCi1jc2lvX3Q0X3BjaWVfaW50cl9oYW5kbGVyKHN0cnVjdCBjc2lvX2h3ICpodykKLXsKLQlzdGF0aWMgc3RydWN0IGludHJfaW5mbyBzeXNidXNfaW50cl9pbmZvW10gPSB7Ci0JCXsgUk5QUCwgIlJYTlAgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBSUENQLCAiUlhQQyBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFJDSVAsICJSWENJRiBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFJDQ1AsICJSeCBjb21wbGV0aW9ucyBjb250cm9sIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUkZUUCwgIlJYRlQgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyAwLCBOVUxMLCAwLCAwIH0KLQl9OwotCXN0YXRpYyBzdHJ1Y3QgaW50cl9pbmZvIHBjaWVfcG9ydF9pbnRyX2luZm9bXSA9IHsKLQkJeyBUUENQLCAiVFhQQyBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFROUFAsICJUWE5QIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgVEZUUCwgIlRYRlQgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBUQ0FQLCAiVFhDQSBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFRDSVAsICJUWENJRiBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFJDQVAsICJSWENBIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgT1RERCwgIm91dGJvdW5kIHJlcXVlc3QgVExQIGRpc2NhcmRlZCIsIC0xLCAxIH0sCi0JCXsgUkRQRSwgIlJ4IGRhdGEgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBURFVFLCAiVHggdW5jb3JyZWN0YWJsZSBkYXRhIGVycm9yIiwgLTEsIDEgfSwKLQkJeyAwLCBOVUxMLCAwLCAwIH0KLQl9OwotCi0Jc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gcGNpZV9pbnRyX2luZm9bXSA9IHsKLQkJeyBNU0lBRERSTFBFUlIsICJNU0kgQWRkckwgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNU0lBRERSSFBFUlIsICJNU0kgQWRkckggcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNU0lEQVRBUEVSUiwgIk1TSSBkYXRhIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgTVNJWEFERFJMUEVSUiwgIk1TSS1YIEFkZHJMIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgTVNJWEFERFJIUEVSUiwgIk1TSS1YIEFkZHJIIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgTVNJWERBVEFQRVJSLCAiTVNJLVggZGF0YSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IE1TSVhESVBFUlIsICJNU0ktWCBESSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFBJT0NQTFBFUlIsICJQQ0kgUElPIGNvbXBsZXRpb24gRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFBJT1JFUVBFUlIsICJQQ0kgUElPIHJlcXVlc3QgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFRBUlRBR1BFUlIsICJQQ0kgUENJIHRhcmdldCB0YWcgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IENDTlRQRVJSLCAiUENJIENNRCBjaGFubmVsIGNvdW50IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgQ1JFUVBFUlIsICJQQ0kgQ01EIGNoYW5uZWwgcmVxdWVzdCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IENSU1BQRVJSLCAiUENJIENNRCBjaGFubmVsIHJlc3BvbnNlIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgRENOVFBFUlIsICJQQ0kgRE1BIGNoYW5uZWwgY291bnQgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBEUkVRUEVSUiwgIlBDSSBETUEgY2hhbm5lbCByZXF1ZXN0IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgRFJTUFBFUlIsICJQQ0kgRE1BIGNoYW5uZWwgcmVzcG9uc2UgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBIQ05UUEVSUiwgIlBDSSBITUEgY2hhbm5lbCBjb3VudCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IEhSRVFQRVJSLCAiUENJIEhNQSBjaGFubmVsIHJlcXVlc3QgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBIUlNQUEVSUiwgIlBDSSBITUEgY2hhbm5lbCByZXNwb25zZSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IENGR1NOUFBFUlIsICJQQ0kgY29uZmlnIHNub29wIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBGSURQRVJSLCAiUENJIEZJRCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IElOVFhDTFJQRVJSLCAiUENJIElOVHggY2xlYXIgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNQVRBR1BFUlIsICJQQ0kgTUEgdGFnIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUElPVEFHUEVSUiwgIlBDSSBQSU8gdGFnIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUlhDUExQRVJSLCAiUENJIFJ4IGNvbXBsZXRpb24gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBSWFdSUEVSUiwgIlBDSSBSeCB3cml0ZSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFJQTFBFUlIsICJQQ0kgcmVwbGF5IGJ1ZmZlciBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFBDSUVTSU5ULCAiUENJIGNvcmUgc2Vjb25kYXJ5IGZhdWx0IiwgLTEsIDEgfSwKLQkJeyBQQ0lFUElOVCwgIlBDSSBjb3JlIHByaW1hcnkgZmF1bHQiLCAtMSwgMSB9LAotCQl7IFVOWFNQTENQTEVSUiwgIlBDSSB1bmV4cGVjdGVkIHNwbGl0IGNvbXBsZXRpb24gZXJyb3IiLCAtMSwKLQkJICAwIH0sCi0JCXsgMCwgTlVMTCwgMCwgMCB9Ci0JfTsKLQotCWludCBmYXQ7Ci0JZmF0ID0gY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsCi0JCQkJICAgICAgUENJRV9DT1JFX1VUTF9TWVNURU1fQlVTX0FHRU5UX1NUQVRVUywKLQkJCQkgICAgICBzeXNidXNfaW50cl9pbmZvKSArCi0JICAgICAgY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsCi0JCQkJICAgICAgUENJRV9DT1JFX1VUTF9QQ0lfRVhQUkVTU19QT1JUX1NUQVRVUywKLQkJCQkgICAgICBwY2llX3BvcnRfaW50cl9pbmZvKSArCi0JICAgICAgY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIFBDSUVfSU5UX0NBVVNFLCBwY2llX2ludHJfaW5mbyk7Ci0JaWYgKGZhdCkKLQkJY3Npb19od19mYXRhbF9lcnIoaHcpOwotfQotCi0vKgotICogY3Npb190NF9mbGFzaF9jZmdfYWRkciAtIHJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgZmxhc2ggY29uZmlndXJhdGlvbiBmaWxlCi0gKiBAaHc6IHRoZSBIVyBtb2R1bGUKLSAqCi0gKiBSZXR1cm4gdGhlIGFkZHJlc3Mgd2l0aGluIHRoZSBmbGFzaCB3aGVyZSB0aGUgRmlybXdhcmUgQ29uZmlndXJhdGlvbgotICogRmlsZSBpcyBzdG9yZWQuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWNzaW9fdDRfZmxhc2hfY2ZnX2FkZHIoc3RydWN0IGNzaW9faHcgKmh3KQotewotCXJldHVybiBGTEFTSF9DRkdfT0ZGU0VUOwotfQotCi0vKgotICogICAgICBjc2lvX3Q0X21jX3JlYWQgLSByZWFkIGZyb20gTUMgdGhyb3VnaCBiYWNrZG9vciBhY2Nlc3NlcwotICogICAgICBAaHc6IHRoZSBodyBtb2R1bGUKLSAqICAgICAgQGlkeDogbm90IHVzZWQgZm9yIFQ0IGFkYXB0ZXIKLSAqICAgICAgQGFkZHI6IGFkZHJlc3Mgb2YgZmlyc3QgYnl0ZSByZXF1ZXN0ZWQKLSAqICAgICAgQGRhdGE6IDY0IGJ5dGVzIG9mIGRhdGEgY29udGFpbmluZyB0aGUgcmVxdWVzdGVkIGFkZHJlc3MKLSAqICAgICAgQGVjYzogd2hlcmUgdG8gc3RvcmUgdGhlIGNvcnJlc3BvbmRpbmcgNjQtYml0IEVDQyB3b3JkCi0gKgotICogICAgICBSZWFkIDY0IGJ5dGVzIG9mIGRhdGEgZnJvbSBNQyBzdGFydGluZyBhdCBhIDY0LWJ5dGUtYWxpZ25lZCBhZGRyZXNzCi0gKiAgICAgIHRoYXQgY292ZXJzIHRoZSByZXF1ZXN0ZWQgYWRkcmVzcyBAYWRkci4gIElmIEBwYXJpdHkgaXMgbm90ICVOVUxMIGl0Ci0gKiAgICAgIGlzIGFzc2lnbmVkIHRoZSA2NC1iaXQgRUNDIHdvcmQgZm9yIHRoZSByZWFkIGRhdGEuCi0gKi8KLXN0YXRpYyBpbnQKLWNzaW9fdDRfbWNfcmVhZChzdHJ1Y3QgY3Npb19odyAqaHcsIGludCBpZHgsIHVpbnQzMl90IGFkZHIsIF9fYmUzMiAqZGF0YSwKLQkJdWludDY0X3QgKmVjYykKLXsKLQlpbnQgaTsKLQotCWlmIChjc2lvX3JkX3JlZzMyKGh3LCBNQ19CSVNUX0NNRCkgJiBTVEFSVF9CSVNUKQotCQlyZXR1cm4gLUVCVVNZOwotCWNzaW9fd3JfcmVnMzIoaHcsIGFkZHIgJiB+MHgzZlUsIE1DX0JJU1RfQ01EX0FERFIpOwotCWNzaW9fd3JfcmVnMzIoaHcsIDY0LCBNQ19CSVNUX0NNRF9MRU4pOwotCWNzaW9fd3JfcmVnMzIoaHcsIDB4YywgTUNfQklTVF9EQVRBX1BBVFRFUk4pOwotCWNzaW9fd3JfcmVnMzIoaHcsIEJJU1RfT1BDT0RFKDEpIHwgU1RBUlRfQklTVCB8IEJJU1RfQ01EX0dBUCgxKSwKLQkJICAgICAgTUNfQklTVF9DTUQpOwotCWkgPSBjc2lvX2h3X3dhaXRfb3BfZG9uZV92YWwoaHcsIE1DX0JJU1RfQ01ELCBTVEFSVF9CSVNULAotCQkJCSAgICAgMCwgMTAsIDEsIE5VTEwpOwotCWlmIChpKQotCQlyZXR1cm4gaTsKLQotI2RlZmluZSBNQ19EQVRBKGkpIE1DX0JJU1RfU1RBVFVTX1JFRyhNQ19CSVNUX1NUQVRVU19SREFUQSwgaSkKLQotCWZvciAoaSA9IDE1OyBpID49IDA7IGktLSkKLQkJKmRhdGErKyA9IGh0b25sKGNzaW9fcmRfcmVnMzIoaHcsIE1DX0RBVEEoaSkpKTsKLQlpZiAoZWNjKQotCQkqZWNjID0gY3Npb19yZF9yZWc2NChodywgTUNfREFUQSgxNikpOwotI3VuZGVmIE1DX0RBVEEKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqICAgICAgY3Npb190NF9lZGNfcmVhZCAtIHJlYWQgZnJvbSBFREMgdGhyb3VnaCBiYWNrZG9vciBhY2Nlc3NlcwotICogICAgICBAaHc6IHRoZSBodyBtb2R1bGUKLSAqICAgICAgQGlkeDogd2hpY2ggRURDIHRvIGFjY2VzcwotICogICAgICBAYWRkcjogYWRkcmVzcyBvZiBmaXJzdCBieXRlIHJlcXVlc3RlZAotICogICAgICBAZGF0YTogNjQgYnl0ZXMgb2YgZGF0YSBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgYWRkcmVzcwotICogICAgICBAZWNjOiB3aGVyZSB0byBzdG9yZSB0aGUgY29ycmVzcG9uZGluZyA2NC1iaXQgRUNDIHdvcmQKLSAqCi0gKiAgICAgIFJlYWQgNjQgYnl0ZXMgb2YgZGF0YSBmcm9tIEVEQyBzdGFydGluZyBhdCBhIDY0LWJ5dGUtYWxpZ25lZCBhZGRyZXNzCi0gKiAgICAgIHRoYXQgY292ZXJzIHRoZSByZXF1ZXN0ZWQgYWRkcmVzcyBAYWRkci4gIElmIEBwYXJpdHkgaXMgbm90ICVOVUxMIGl0Ci0gKiAgICAgIGlzIGFzc2lnbmVkIHRoZSA2NC1iaXQgRUNDIHdvcmQgZm9yIHRoZSByZWFkIGRhdGEuCi0gKi8KLXN0YXRpYyBpbnQKLWNzaW9fdDRfZWRjX3JlYWQoc3RydWN0IGNzaW9faHcgKmh3LCBpbnQgaWR4LCB1aW50MzJfdCBhZGRyLCBfX2JlMzIgKmRhdGEsCi0JCXVpbnQ2NF90ICplY2MpCi17Ci0JaW50IGk7Ci0KLQlpZHggKj0gRURDX1NUUklERTsKLQlpZiAoY3Npb19yZF9yZWczMihodywgRURDX0JJU1RfQ01EICsgaWR4KSAmIFNUQVJUX0JJU1QpCi0JCXJldHVybiAtRUJVU1k7Ci0JY3Npb193cl9yZWczMihodywgYWRkciAmIH4weDNmVSwgRURDX0JJU1RfQ01EX0FERFIgKyBpZHgpOwotCWNzaW9fd3JfcmVnMzIoaHcsIDY0LCBFRENfQklTVF9DTURfTEVOICsgaWR4KTsKLQljc2lvX3dyX3JlZzMyKGh3LCAweGMsIEVEQ19CSVNUX0RBVEFfUEFUVEVSTiArIGlkeCk7Ci0JY3Npb193cl9yZWczMihodywgQklTVF9PUENPREUoMSkgfCBCSVNUX0NNRF9HQVAoMSkgfCBTVEFSVF9CSVNULAotCQkgICAgICBFRENfQklTVF9DTUQgKyBpZHgpOwotCWkgPSBjc2lvX2h3X3dhaXRfb3BfZG9uZV92YWwoaHcsIEVEQ19CSVNUX0NNRCArIGlkeCwgU1RBUlRfQklTVCwKLQkJCQkgICAgIDAsIDEwLCAxLCBOVUxMKTsKLQlpZiAoaSkKLQkJcmV0dXJuIGk7Ci0KLSNkZWZpbmUgRURDX0RBVEEoaSkgKEVEQ19CSVNUX1NUQVRVU19SRUcoRURDX0JJU1RfU1RBVFVTX1JEQVRBLCBpKSArIGlkeCkKLQotCWZvciAoaSA9IDE1OyBpID49IDA7IGktLSkKLQkJKmRhdGErKyA9IGh0b25sKGNzaW9fcmRfcmVnMzIoaHcsIEVEQ19EQVRBKGkpKSk7Ci0JaWYgKGVjYykKLQkJKmVjYyA9IGNzaW9fcmRfcmVnNjQoaHcsIEVEQ19EQVRBKDE2KSk7Ci0jdW5kZWYgRURDX0RBVEEKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGNzaW9fdDRfbWVtb3J5X3J3IC0gcmVhZC93cml0ZSBFREMgMCwgRURDIDEgb3IgTUMgdmlhIFBDSUUgbWVtb3J5IHdpbmRvdwotICogQGh3OiB0aGUgY3Npb19odwotICogQHdpbjogUENJLUUgbWVtb3J5IFdpbmRvdyB0byB1c2UKLSAqIEBtdHlwZTogbWVtb3J5IHR5cGU6IE1FTV9FREMwLCBNRU1fRURDMSwgTUVNX01DMCAob3IgTUVNX01DKSBvciBNRU1fTUMxCi0gKiBAYWRkcjogYWRkcmVzcyB3aXRoaW4gaW5kaWNhdGVkIG1lbW9yeSB0eXBlCi0gKiBAbGVuOiBhbW91bnQgb2YgbWVtb3J5IHRvIHRyYW5zZmVyCi0gKiBAYnVmOiBob3N0IG1lbW9yeSBidWZmZXIKLSAqIEBkaXI6IGRpcmVjdGlvbiBvZiB0cmFuc2ZlciAxID0+IHJlYWQsIDAgPT4gd3JpdGUKLSAqCi0gKiBSZWFkcy93cml0ZXMgYW4gW2FsbW9zdF0gYXJiaXRyYXJ5IG1lbW9yeSByZWdpb24gaW4gdGhlIGZpcm13YXJlOiB0aGUKLSAqIGZpcm13YXJlIG1lbW9yeSBhZGRyZXNzLCBsZW5ndGggYW5kIGhvc3QgYnVmZmVyIG11c3QgYmUgYWxpZ25lZCBvbgotICogMzItYml0IGJvdWRhcmllcy4gIFRoZSBtZW1vcnkgaXMgdHJhbnNmZXJyZWQgYXMgYSByYXcgYnl0ZSBzZXF1ZW5jZQotICogZnJvbS90byB0aGUgZmlybXdhcmUncyBtZW1vcnkuICBJZiB0aGlzIG1lbW9yeSBjb250YWlucyBkYXRhCi0gKiBzdHJ1Y3R1cmVzIHdoaWNoIGNvbnRhaW4gbXVsdGktYnl0ZSBpbnRlZ2VycywgaXQncyB0aGUgY2FsbGVycwotICogcmVzcG9uc2liaWxpdHkgdG8gcGVyZm9ybSBhcHByb3ByaWF0ZSBieXRlIG9yZGVyIGNvbnZlcnNpb25zLgotICovCi1zdGF0aWMgaW50Ci1jc2lvX3Q0X21lbW9yeV9ydyhzdHJ1Y3QgY3Npb19odyAqaHcsIHUzMiB3aW4sIGludCBtdHlwZSwgdTMyIGFkZHIsCi0JCXUzMiBsZW4sIHVpbnQzMl90ICpidWYsIGludCBkaXIpCi17Ci0JdTMyIHBvcywgc3RhcnQsIG9mZnNldCwgbWVtb2Zmc2V0LCBiYXIwOwotCXUzMiBlZGNfc2l6ZSwgbWNfc2l6ZSwgbWVtX3JlZywgbWVtX2FwZXJ0dXJlLCBtZW1fYmFzZTsKLQotCS8qCi0JICogQXJndW1lbnQgc2FuaXR5IGNoZWNrcyAuLi4KLQkgKi8KLQlpZiAoKGFkZHIgJiAweDMpIHx8IChsZW4gJiAweDMpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIE9mZnNldCBpbnRvIHRoZSByZWdpb24gb2YgbWVtb3J5IHdoaWNoIGlzIGJlaW5nIGFjY2Vzc2VkCi0JICogTUVNX0VEQzAgPSAwCi0JICogTUVNX0VEQzEgPSAxCi0JICogTUVNX01DICAgPSAyIC0tIFQ0Ci0JICovCi0JZWRjX3NpemUgID0gRURSQU0wX1NJWkVfRyhjc2lvX3JkX3JlZzMyKGh3LCBNQV9FRFJBTTBfQkFSX0EpKTsKLQlpZiAobXR5cGUgIT0gTUVNX01DMSkKLQkJbWVtb2Zmc2V0ID0gKG10eXBlICogKGVkY19zaXplICogMTAyNCAqIDEwMjQpKTsKLQllbHNlIHsKLQkJbWNfc2l6ZSA9IEVYVF9NRU1fU0laRV9HKGNzaW9fcmRfcmVnMzIoaHcsCi0JCQkJCQkgICAgICAgTUFfRVhUX01FTU9SWV9CQVJfQSkpOwotCQltZW1vZmZzZXQgPSAoTUVNX01DMCAqIGVkY19zaXplICsgbWNfc2l6ZSkgKiAxMDI0ICogMTAyNDsKLQl9Ci0KLQkvKiBEZXRlcm1pbmUgdGhlIFBDSUVfTUVNX0FDQ0VTU19PRkZTRVQgKi8KLQlhZGRyID0gYWRkciArIG1lbW9mZnNldDsKLQotCS8qCi0JICogRWFjaCBQQ0ktRSBNZW1vcnkgV2luZG93IGlzIHByb2dyYW1tZWQgd2l0aCBhIHdpbmRvdyBzaXplIC0tIG9yCi0JICogImFwZXJ0dXJlIiAtLSB3aGljaCBjb250cm9scyB0aGUgZ3JhbnVsYXJpdHkgb2YgaXRzIG1hcHBpbmcgb250bwotCSAqIGFkYXB0ZXIgbWVtb3J5LiAgV2UgbmVlZCB0byBncmFiIHRoYXQgYXBlcnR1cmUgaW4gb3JkZXIgdG8ga25vdwotCSAqIGhvdyB0byB1c2UgdGhlIHNwZWNpZmllZCB3aW5kb3cuICBUaGUgd2luZG93IGlzIGFsc28gcHJvZ3JhbW1lZAotCSAqIHdpdGggdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgTWVtb3J5IFdpbmRvdyBpbiBCQVIwJ3MgYWRkcmVzcwotCSAqIHNwYWNlLiAgRm9yIFQ0IHRoaXMgaXMgYW4gYWJzb2x1dGUgUENJLUUgQnVzIEFkZHJlc3MuICBGb3IgVDUKLQkgKiB0aGUgYWRkcmVzcyBpcyByZWxhdGl2ZSB0byBCQVIwLgotCSAqLwotCW1lbV9yZWcgPSBjc2lvX3JkX3JlZzMyKGh3LAotCQkJUENJRV9NRU1fQUNDRVNTX1JFRyhQQ0lFX01FTV9BQ0NFU1NfQkFTRV9XSU4sIHdpbikpOwotCW1lbV9hcGVydHVyZSA9IDEgPDwgKFdJTkRPVyhtZW1fcmVnKSArIDEwKTsKLQltZW1fYmFzZSA9IEdFVF9QQ0lFT0ZTVChtZW1fcmVnKSA8PCAxMDsKLQotCWJhcjAgPSBjc2lvX3Q0X3JlYWRfcGNpZV9jZmc0KGh3LCBQQ0lfQkFTRV9BRERSRVNTXzApOwotCWJhcjAgJj0gUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSzsKLQltZW1fYmFzZSAtPSBiYXIwOwotCi0Jc3RhcnQgPSBhZGRyICYgfihtZW1fYXBlcnR1cmUtMSk7Ci0Jb2Zmc2V0ID0gYWRkciAtIHN0YXJ0OwotCi0JY3Npb19kYmcoaHcsICJjc2lvX3Q0X21lbW9yeV9ydzogbWVtX3JlZzogMHgleCwgbWVtX2FwZXJ0dXJlOiAweCV4XG4iLAotCQkgbWVtX3JlZywgbWVtX2FwZXJ0dXJlKTsKLQljc2lvX2RiZyhodywgImNzaW9fdDRfbWVtb3J5X3J3OiBtZW1fYmFzZTogMHgleCwgbWVtX29mZnNldDogMHgleFxuIiwKLQkJIG1lbV9iYXNlLCBtZW1vZmZzZXQpOwotCWNzaW9fZGJnKGh3LCAiY3Npb190NF9tZW1vcnlfcnc6IGJhcjA6IDB4JXgsIHN0YXJ0OjB4JXgsIG9mZnNldDoweCV4XG4iLAotCQkgYmFyMCwgc3RhcnQsIG9mZnNldCk7Ci0JY3Npb19kYmcoaHcsICJjc2lvX3Q0X21lbW9yeV9ydzogbXR5cGU6ICVkLCBhZGRyOiAweCV4LCBsZW46ICVkXG4iLAotCQkgbXR5cGUsIGFkZHIsIGxlbik7Ci0KLQlmb3IgKHBvcyA9IHN0YXJ0OyBsZW4gPiAwOyBwb3MgKz0gbWVtX2FwZXJ0dXJlLCBvZmZzZXQgPSAwKSB7Ci0JCS8qCi0JCSAqIE1vdmUgUENJLUUgTWVtb3J5IFdpbmRvdyB0byBvdXIgY3VycmVudCB0cmFuc2ZlcgotCQkgKiBwb3NpdGlvbi4gIFJlYWQgaXQgYmFjayB0byBlbnN1cmUgdGhhdCBjaGFuZ2VzIHByb3BhZ2F0ZQotCQkgKiBiZWZvcmUgd2UgYXR0ZW1wdCB0byB1c2UgdGhlIG5ldyB2YWx1ZS4KLQkJICovCi0JCWNzaW9fd3JfcmVnMzIoaHcsIHBvcywKLQkJCVBDSUVfTUVNX0FDQ0VTU19SRUcoUENJRV9NRU1fQUNDRVNTX09GRlNFVCwgd2luKSk7Ci0JCWNzaW9fcmRfcmVnMzIoaHcsCi0JCQlQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19PRkZTRVQsIHdpbikpOwotCi0JCXdoaWxlIChvZmZzZXQgPCBtZW1fYXBlcnR1cmUgJiYgbGVuID4gMCkgewotCQkJaWYgKGRpcikKLQkJCQkqYnVmKysgPSBjc2lvX3JkX3JlZzMyKGh3LCBtZW1fYmFzZSArIG9mZnNldCk7Ci0JCQllbHNlCi0JCQkJY3Npb193cl9yZWczMihodywgKmJ1ZisrLCBtZW1fYmFzZSArIG9mZnNldCk7Ci0KLQkJCW9mZnNldCArPSBzaXplb2YoX19iZTMyKTsKLQkJCWxlbiAtPSBzaXplb2YoX19iZTMyKTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIGNzaW9fdDRfZGZzX2NyZWF0ZV9leHRfbWVtIC0gc2V0dXAgZGVidWdmcyBmb3IgTUMgdG8gcmVhZCB0aGUgdmFsdWVzCi0gKiBAaHc6IHRoZSBjc2lvX2h3Ci0gKgotICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGZpbGVzIGluIHRoZSBkZWJ1Z2ZzIHdpdGggZXh0ZXJuYWwgbWVtb3J5IHJlZ2lvbiBNQy4KLSAqLwotc3RhdGljIHZvaWQKLWNzaW9fdDRfZGZzX2NyZWF0ZV9leHRfbWVtKHN0cnVjdCBjc2lvX2h3ICpodykKLXsKLQl1MzIgc2l6ZTsKLQlpbnQgaSA9IGNzaW9fcmRfcmVnMzIoaHcsIE1BX1RBUkdFVF9NRU1fRU5BQkxFX0EpOwotCi0JaWYgKGkgJiBFWFRfTUVNX0VOQUJMRV9GKSB7Ci0JCXNpemUgPSBjc2lvX3JkX3JlZzMyKGh3LCBNQV9FWFRfTUVNT1JZX0JBUl9BKTsKLQkJY3Npb19hZGRfZGVidWdmc19tZW0oaHcsICJtYyIsIE1FTV9NQywKLQkJCQkgICAgIEVYVF9NRU1fU0laRV9HKHNpemUpKTsKLQl9Ci19Ci0KLS8qIFQ0IGFkYXB0ZXIgc3BlY2lmaWMgZnVuY3Rpb24gKi8KLXN0cnVjdCBjc2lvX2h3X2NoaXBfb3BzIHQ0X29wcyA9IHsKLQkuY2hpcF9zZXRfbWVtX3dpbgkJPSBjc2lvX3Q0X3NldF9tZW1fd2luLAotCS5jaGlwX3BjaWVfaW50cl9oYW5kbGVyCQk9IGNzaW9fdDRfcGNpZV9pbnRyX2hhbmRsZXIsCi0JLmNoaXBfZmxhc2hfY2ZnX2FkZHIJCT0gY3Npb190NF9mbGFzaF9jZmdfYWRkciwKLQkuY2hpcF9tY19yZWFkCQkJPSBjc2lvX3Q0X21jX3JlYWQsCi0JLmNoaXBfZWRjX3JlYWQJCQk9IGNzaW9fdDRfZWRjX3JlYWQsCi0JLmNoaXBfbWVtb3J5X3J3CQkJPSBjc2lvX3Q0X21lbW9yeV9ydywKLQkuY2hpcF9kZnNfY3JlYXRlX2V4dF9tZW0JPSBjc2lvX3Q0X2Rmc19jcmVhdGVfZXh0X21lbSwKLX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19od190NS5jIGIvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9faHdfdDUuYwppbmRleCA2NmUxODBhLi4zMjY3ZjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19od190NS5jCisrKyBiL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX2h3X3Q1LmMKQEAgLTU2LDExICs1NiwxMSBAQAogCSAqIGJhY2sgTUEgcmVnaXN0ZXIgdG8gZW5zdXJlIHRoYXQgY2hhbmdlcyBwcm9wYWdhdGUgYmVmb3JlIHdlIGF0dGVtcHQKIAkgKiB0byB1c2UgdGhlIG5ldyB2YWx1ZXMuKQogCSAqLwotCWNzaW9fd3JfcmVnMzIoaHcsIG1lbV93aW5fYmFzZSB8IEJJUigwKSB8Ci0JCQkgIFdJTkRPVyhpbG9nMihNRU1XSU5fQVBFUlRVUkUpIC0gMTApLAotCQkJICBQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19CQVNFX1dJTiwgd2luKSk7CisJY3Npb193cl9yZWczMihodywgbWVtX3dpbl9iYXNlIHwgQklSX1YoMCkgfAorCQkJICBXSU5ET1dfVihpbG9nMihNRU1XSU5fQVBFUlRVUkUpIC0gMTApLAorCQkJICBQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19CQVNFX1dJTl9BLCB3aW4pKTsKIAljc2lvX3JkX3JlZzMyKGh3LAotCQkgICAgICBQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19CQVNFX1dJTiwgd2luKSk7CisJCSAgICAgIFBDSUVfTUVNX0FDQ0VTU19SRUcoUENJRV9NRU1fQUNDRVNTX0JBU0VfV0lOX0EsIHdpbikpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03Miw3NCArNzIsNzQgQEAKIGNzaW9fdDVfcGNpZV9pbnRyX2hhbmRsZXIoc3RydWN0IGNzaW9faHcgKmh3KQogewogCXN0YXRpYyBzdHJ1Y3QgaW50cl9pbmZvIHN5c2J1c19pbnRyX2luZm9bXSA9IHsKLQkJeyBSTlBQLCAiUlhOUCBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFJQQ1AsICJSWFBDIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUkNJUCwgIlJYQ0lGIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUkNDUCwgIlJ4IGNvbXBsZXRpb25zIGNvbnRyb2wgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBSRlRQLCAiUlhGVCBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFJOUFBfRiwgIlJYTlAgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBSUENQX0YsICJSWFBDIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgUkNJUF9GLCAiUlhDSUYgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBSQ0NQX0YsICJSeCBjb21wbGV0aW9ucyBjb250cm9sIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgUkZUUF9GLCAiUlhGVCBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAogCQl7IDAsIE5VTEwsIDAsIDAgfQogCX07CiAJc3RhdGljIHN0cnVjdCBpbnRyX2luZm8gcGNpZV9wb3J0X2ludHJfaW5mb1tdID0gewotCQl7IFRQQ1AsICJUWFBDIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgVE5QUCwgIlRYTlAgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBURlRQLCAiVFhGVCBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFRDQVAsICJUWENBIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgVENJUCwgIlRYQ0lGIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUkNBUCwgIlJYQ0EgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBPVERELCAib3V0Ym91bmQgcmVxdWVzdCBUTFAgZGlzY2FyZGVkIiwgLTEsIDEgfSwKLQkJeyBSRFBFLCAiUnggZGF0YSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFREVUUsICJUeCB1bmNvcnJlY3RhYmxlIGRhdGEgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFRQQ1BfRiwgIlRYUEMgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBUTlBQX0YsICJUWE5QIGFycmF5IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgVEZUUF9GLCAiVFhGVCBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFRDQVBfRiwgIlRYQ0EgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBUQ0lQX0YsICJUWENJRiBhcnJheSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFJDQVBfRiwgIlJYQ0EgYXJyYXkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBPVEREX0YsICJvdXRib3VuZCByZXF1ZXN0IFRMUCBkaXNjYXJkZWQiLCAtMSwgMSB9LAorCQl7IFJEUEVfRiwgIlJ4IGRhdGEgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBURFVFX0YsICJUeCB1bmNvcnJlY3RhYmxlIGRhdGEgZXJyb3IiLCAtMSwgMSB9LAogCQl7IDAsIE5VTEwsIDAsIDAgfQogCX07CiAKIAlzdGF0aWMgc3RydWN0IGludHJfaW5mbyBwY2llX2ludHJfaW5mb1tdID0gewotCQl7IE1TVEdSUFBFUlIsICJNYXN0ZXIgUmVzcG9uc2UgUmVhZCBRdWV1ZSBwYXJpdHkgZXJyb3IiLAorCQl7IE1TVEdSUFBFUlJfRiwgIk1hc3RlciBSZXNwb25zZSBSZWFkIFF1ZXVlIHBhcml0eSBlcnJvciIsCiAJCS0xLCAxIH0sCi0JCXsgTVNUVElNRU9VVFBFUlIsICJNYXN0ZXIgVGltZW91dCBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgTVNJWFNUSVBFUlIsICJNU0ktWCBTVEkgU1JBTSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IE1TSVhBRERSTFBFUlIsICJNU0ktWCBBZGRyTCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IE1TSVhBRERSSFBFUlIsICJNU0ktWCBBZGRySCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IE1TSVhEQVRBUEVSUiwgIk1TSS1YIGRhdGEgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNU0lYRElQRVJSLCAiTVNJLVggREkgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBQSU9DUExHUlBQRVJSLCAiUENJIFBJTyBjb21wbGV0aW9uIEdyb3VwIEZJRk8gcGFyaXR5IGVycm9yIiwKKwkJeyBNU1RUSU1FT1VUUEVSUl9GLCAiTWFzdGVyIFRpbWVvdXQgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IE1TSVhTVElQRVJSX0YsICJNU0ktWCBTVEkgU1JBTSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IE1TSVhBRERSTFBFUlJfRiwgIk1TSS1YIEFkZHJMIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgTVNJWEFERFJIUEVSUl9GLCAiTVNJLVggQWRkckggcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBNU0lYREFUQVBFUlJfRiwgIk1TSS1YIGRhdGEgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBNU0lYRElQRVJSX0YsICJNU0ktWCBESSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFBJT0NQTEdSUFBFUlJfRiwgIlBDSSBQSU8gY29tcGxldGlvbiBHcm91cCBGSUZPIHBhcml0eSBlcnJvciIsCiAJCS0xLCAxIH0sCi0JCXsgUElPUkVRR1JQUEVSUiwgIlBDSSBQSU8gcmVxdWVzdCBHcm91cCBGSUZPIHBhcml0eSBlcnJvciIsCisJCXsgUElPUkVRR1JQUEVSUl9GLCAiUENJIFBJTyByZXF1ZXN0IEdyb3VwIEZJRk8gcGFyaXR5IGVycm9yIiwKIAkJLTEsIDEgfSwKLQkJeyBUQVJUQUdQRVJSLCAiUENJIFBDSSB0YXJnZXQgdGFnIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBNU1RUQUdRUEVSUiwgIlBDSSBtYXN0ZXIgdGFnIHF1ZXVlIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgQ1JFUVBFUlIsICJQQ0kgQ01EIGNoYW5uZWwgcmVxdWVzdCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IENSU1BQRVJSLCAiUENJIENNRCBjaGFubmVsIHJlc3BvbnNlIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgRFJFUVdSUEVSUiwgIlBDSSBETUEgY2hhbm5lbCB3cml0ZSByZXF1ZXN0IHBhcml0eSBlcnJvciIsCisJCXsgVEFSVEFHUEVSUl9GLCAiUENJIFBDSSB0YXJnZXQgdGFnIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBNU1RUQUdRUEVSUl9GLCAiUENJIG1hc3RlciB0YWcgcXVldWUgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBDUkVRUEVSUl9GLCAiUENJIENNRCBjaGFubmVsIHJlcXVlc3QgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBDUlNQUEVSUl9GLCAiUENJIENNRCBjaGFubmVsIHJlc3BvbnNlIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgRFJFUVdSUEVSUl9GLCAiUENJIERNQSBjaGFubmVsIHdyaXRlIHJlcXVlc3QgcGFyaXR5IGVycm9yIiwKIAkJLTEsIDEgfSwKLQkJeyBEUkVRUEVSUiwgIlBDSSBETUEgY2hhbm5lbCByZXF1ZXN0IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgRFJTUFBFUlIsICJQQ0kgRE1BIGNoYW5uZWwgcmVzcG9uc2UgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBIUkVRV1JQRVJSLCAiUENJIEhNQSBjaGFubmVsIGNvdW50IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgSFJFUVBFUlIsICJQQ0kgSE1BIGNoYW5uZWwgcmVxdWVzdCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IEhSU1BQRVJSLCAiUENJIEhNQSBjaGFubmVsIHJlc3BvbnNlIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgQ0ZHU05QUEVSUiwgIlBDSSBjb25maWcgc25vb3AgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IEZJRFBFUlIsICJQQ0kgRklEIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgVkZJRFBFUlIsICJQQ0kgSU5UeCBjbGVhciBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IE1BR1JQUEVSUiwgIlBDSSBNQSBncm91cCBGSUZPIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgUElPVEFHUEVSUiwgIlBDSSBQSU8gdGFnIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCi0JCXsgSVBSWEhEUkdSUFBFUlIsICJQQ0kgSVAgUnggaGVhZGVyIGdyb3VwIHBhcml0eSBlcnJvciIsCisJCXsgRFJFUVBFUlJfRiwgIlBDSSBETUEgY2hhbm5lbCByZXF1ZXN0IHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgRFJTUFBFUlJfRiwgIlBDSSBETUEgY2hhbm5lbCByZXNwb25zZSBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IEhSRVFXUlBFUlJfRiwgIlBDSSBITUEgY2hhbm5lbCBjb3VudCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IEhSRVFQRVJSX0YsICJQQ0kgSE1BIGNoYW5uZWwgcmVxdWVzdCBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IEhSU1BQRVJSX0YsICJQQ0kgSE1BIGNoYW5uZWwgcmVzcG9uc2UgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBDRkdTTlBQRVJSX0YsICJQQ0kgY29uZmlnIHNub29wIEZJRk8gcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBGSURQRVJSX0YsICJQQ0kgRklEIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgVkZJRFBFUlJfRiwgIlBDSSBJTlR4IGNsZWFyIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgTUFHUlBQRVJSX0YsICJQQ0kgTUEgZ3JvdXAgRklGTyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFBJT1RBR1BFUlJfRiwgIlBDSSBQSU8gdGFnIHBhcml0eSBlcnJvciIsIC0xLCAxIH0sCisJCXsgSVBSWEhEUkdSUFBFUlJfRiwgIlBDSSBJUCBSeCBoZWFkZXIgZ3JvdXAgcGFyaXR5IGVycm9yIiwKIAkJLTEsIDEgfSwKLQkJeyBJUFJYREFUQUdSUFBFUlIsICJQQ0kgSVAgUnggZGF0YSBncm91cCBwYXJpdHkgZXJyb3IiLAorCQl7IElQUlhEQVRBR1JQUEVSUl9GLCAiUENJIElQIFJ4IGRhdGEgZ3JvdXAgcGFyaXR5IGVycm9yIiwKIAkJLTEsIDEgfSwKLQkJeyBSUExQRVJSLCAiUENJIElQIHJlcGxheSBidWZmZXIgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKLQkJeyBJUFNPVFBFUlIsICJQQ0kgSVAgU09UIGJ1ZmZlciBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFRSR1QxR1JQUEVSUiwgIlBDSSBUUkdUMSBncm91cCBGSUZPcyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAotCQl7IFJFQURSU1BFUlIsICJPdXRib3VuZCByZWFkIGVycm9yIiwgLTEsIDAgfSwKKwkJeyBSUExQRVJSX0YsICJQQ0kgSVAgcmVwbGF5IGJ1ZmZlciBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IElQU09UUEVSUl9GLCAiUENJIElQIFNPVCBidWZmZXIgcGFyaXR5IGVycm9yIiwgLTEsIDEgfSwKKwkJeyBUUkdUMUdSUFBFUlJfRiwgIlBDSSBUUkdUMSBncm91cCBGSUZPcyBwYXJpdHkgZXJyb3IiLCAtMSwgMSB9LAorCQl7IFJFQURSU1BFUlJfRiwgIk91dGJvdW5kIHJlYWQgZXJyb3IiLCAtMSwgMCB9LAogCQl7IDAsIE5VTEwsIDAsIDAgfQogCX07CiAKIAlpbnQgZmF0OwogCWZhdCA9IGNzaW9faGFuZGxlX2ludHJfc3RhdHVzKGh3LAotCQkJCSAgICAgIFBDSUVfQ09SRV9VVExfU1lTVEVNX0JVU19BR0VOVF9TVEFUVVMsCisJCQkJICAgICAgUENJRV9DT1JFX1VUTF9TWVNURU1fQlVTX0FHRU5UX1NUQVRVU19BLAogCQkJCSAgICAgIHN5c2J1c19pbnRyX2luZm8pICsKIAkgICAgICBjc2lvX2hhbmRsZV9pbnRyX3N0YXR1cyhodywKLQkJCQkgICAgICBQQ0lFX0NPUkVfVVRMX1BDSV9FWFBSRVNTX1BPUlRfU1RBVFVTLAorCQkJCSAgICAgIFBDSUVfQ09SRV9VVExfUENJX0VYUFJFU1NfUE9SVF9TVEFUVVNfQSwKIAkJCQkgICAgICBwY2llX3BvcnRfaW50cl9pbmZvKSArCi0JICAgICAgY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIFBDSUVfSU5UX0NBVVNFLCBwY2llX2ludHJfaW5mbyk7CisJICAgICAgY3Npb19oYW5kbGVfaW50cl9zdGF0dXMoaHcsIFBDSUVfSU5UX0NBVVNFX0EsIHBjaWVfaW50cl9pbmZvKTsKIAlpZiAoZmF0KQogCQljc2lvX2h3X2ZhdGFsX2Vycihodyk7CiB9CkBAIC0xNzcsMjUgKzE3NywyNSBAQAogCXVpbnQzMl90IG1jX2Jpc3RfY21kX3JlZywgbWNfYmlzdF9jbWRfYWRkcl9yZWcsIG1jX2Jpc3RfY21kX2xlbl9yZWc7CiAJdWludDMyX3QgbWNfYmlzdF9zdGF0dXNfcmRhdGFfcmVnLCBtY19iaXN0X2RhdGFfcGF0dGVybl9yZWc7CiAKLQltY19iaXN0X2NtZF9yZWcgPSBNQ19SRUcoTUNfUF9CSVNUX0NNRCwgaWR4KTsKLQltY19iaXN0X2NtZF9hZGRyX3JlZyA9IE1DX1JFRyhNQ19QX0JJU1RfQ01EX0FERFIsIGlkeCk7Ci0JbWNfYmlzdF9jbWRfbGVuX3JlZyA9IE1DX1JFRyhNQ19QX0JJU1RfQ01EX0xFTiwgaWR4KTsKLQltY19iaXN0X3N0YXR1c19yZGF0YV9yZWcgPSBNQ19SRUcoTUNfUF9CSVNUX1NUQVRVU19SREFUQSwgaWR4KTsKLQltY19iaXN0X2RhdGFfcGF0dGVybl9yZWcgPSBNQ19SRUcoTUNfUF9CSVNUX0RBVEFfUEFUVEVSTiwgaWR4KTsKKwltY19iaXN0X2NtZF9yZWcgPSBNQ19SRUcoTUNfUF9CSVNUX0NNRF9BLCBpZHgpOworCW1jX2Jpc3RfY21kX2FkZHJfcmVnID0gTUNfUkVHKE1DX1BfQklTVF9DTURfQUREUl9BLCBpZHgpOworCW1jX2Jpc3RfY21kX2xlbl9yZWcgPSBNQ19SRUcoTUNfUF9CSVNUX0NNRF9MRU5fQSwgaWR4KTsKKwltY19iaXN0X3N0YXR1c19yZGF0YV9yZWcgPSBNQ19SRUcoTUNfUF9CSVNUX1NUQVRVU19SREFUQV9BLCBpZHgpOworCW1jX2Jpc3RfZGF0YV9wYXR0ZXJuX3JlZyA9IE1DX1JFRyhNQ19QX0JJU1RfREFUQV9QQVRURVJOX0EsIGlkeCk7CiAKLQlpZiAoY3Npb19yZF9yZWczMihodywgbWNfYmlzdF9jbWRfcmVnKSAmIFNUQVJUX0JJU1QpCisJaWYgKGNzaW9fcmRfcmVnMzIoaHcsIG1jX2Jpc3RfY21kX3JlZykgJiBTVEFSVF9CSVNUX0YpCiAJCXJldHVybiAtRUJVU1k7CiAJY3Npb193cl9yZWczMihodywgYWRkciAmIH4weDNmVSwgbWNfYmlzdF9jbWRfYWRkcl9yZWcpOwogCWNzaW9fd3JfcmVnMzIoaHcsIDY0LCBtY19iaXN0X2NtZF9sZW5fcmVnKTsKIAljc2lvX3dyX3JlZzMyKGh3LCAweGMsIG1jX2Jpc3RfZGF0YV9wYXR0ZXJuX3JlZyk7Ci0JY3Npb193cl9yZWczMihodywgQklTVF9PUENPREUoMSkgfCBTVEFSVF9CSVNUIHwgIEJJU1RfQ01EX0dBUCgxKSwKKwljc2lvX3dyX3JlZzMyKGh3LCBCSVNUX09QQ09ERV9WKDEpIHwgU1RBUlRfQklTVF9GIHwgIEJJU1RfQ01EX0dBUF9WKDEpLAogCQkgICAgICBtY19iaXN0X2NtZF9yZWcpOwotCWkgPSBjc2lvX2h3X3dhaXRfb3BfZG9uZV92YWwoaHcsIG1jX2Jpc3RfY21kX3JlZywgU1RBUlRfQklTVCwKKwlpID0gY3Npb19od193YWl0X29wX2RvbmVfdmFsKGh3LCBtY19iaXN0X2NtZF9yZWcsIFNUQVJUX0JJU1RfRiwKIAkJCQkgICAgIDAsIDEwLCAxLCBOVUxMKTsKIAlpZiAoaSkKIAkJcmV0dXJuIGk7CiAKLSNkZWZpbmUgTUNfREFUQShpKSBNQ19CSVNUX1NUQVRVU19SRUcoTUNfQklTVF9TVEFUVVNfUkRBVEEsIGkpCisjZGVmaW5lIE1DX0RBVEEoaSkgTUNfQklTVF9TVEFUVVNfUkVHKE1DX0JJU1RfU1RBVFVTX1JEQVRBX0EsIGkpCiAKIAlmb3IgKGkgPSAxNTsgaSA+PSAwOyBpLS0pCiAJCSpkYXRhKysgPSBodG9ubChjc2lvX3JkX3JlZzMyKGh3LCBNQ19EQVRBKGkpKSk7CkBAIC0yMzEsMjcgKzIzMSwyNyBAQAogI2RlZmluZSBFRENfU1RSSURFX1Q1IChFRENfVDUxX0JBU0VfQUREUiAtIEVEQ19UNTBfQkFTRV9BRERSKQogI2RlZmluZSBFRENfUkVHX1Q1KHJlZywgaWR4KSAocmVnICsgRURDX1NUUklERV9UNSAqIGlkeCkKIAotCWVkY19iaXN0X2NtZF9yZWcgPSBFRENfUkVHX1Q1KEVEQ19IX0JJU1RfQ01ELCBpZHgpOwotCWVkY19iaXN0X2NtZF9hZGRyX3JlZyA9IEVEQ19SRUdfVDUoRURDX0hfQklTVF9DTURfQUREUiwgaWR4KTsKLQllZGNfYmlzdF9jbWRfbGVuX3JlZyA9IEVEQ19SRUdfVDUoRURDX0hfQklTVF9DTURfTEVOLCBpZHgpOwotCWVkY19iaXN0X2NtZF9kYXRhX3BhdHRlcm4gPSBFRENfUkVHX1Q1KEVEQ19IX0JJU1RfREFUQV9QQVRURVJOLCBpZHgpOwotCWVkY19iaXN0X3N0YXR1c19yZGF0YV9yZWcgPSBFRENfUkVHX1Q1KEVEQ19IX0JJU1RfU1RBVFVTX1JEQVRBLCBpZHgpOworCWVkY19iaXN0X2NtZF9yZWcgPSBFRENfUkVHX1Q1KEVEQ19IX0JJU1RfQ01EX0EsIGlkeCk7CisJZWRjX2Jpc3RfY21kX2FkZHJfcmVnID0gRURDX1JFR19UNShFRENfSF9CSVNUX0NNRF9BRERSX0EsIGlkeCk7CisJZWRjX2Jpc3RfY21kX2xlbl9yZWcgPSBFRENfUkVHX1Q1KEVEQ19IX0JJU1RfQ01EX0xFTl9BLCBpZHgpOworCWVkY19iaXN0X2NtZF9kYXRhX3BhdHRlcm4gPSBFRENfUkVHX1Q1KEVEQ19IX0JJU1RfREFUQV9QQVRURVJOX0EsIGlkeCk7CisJZWRjX2Jpc3Rfc3RhdHVzX3JkYXRhX3JlZyA9IEVEQ19SRUdfVDUoRURDX0hfQklTVF9TVEFUVVNfUkRBVEFfQSwgaWR4KTsKICN1bmRlZiBFRENfUkVHX1Q1CiAjdW5kZWYgRURDX1NUUklERV9UNQogCi0JaWYgKGNzaW9fcmRfcmVnMzIoaHcsIGVkY19iaXN0X2NtZF9yZWcpICYgU1RBUlRfQklTVCkKKwlpZiAoY3Npb19yZF9yZWczMihodywgZWRjX2Jpc3RfY21kX3JlZykgJiBTVEFSVF9CSVNUX0YpCiAJCXJldHVybiAtRUJVU1k7CiAJY3Npb193cl9yZWczMihodywgYWRkciAmIH4weDNmVSwgZWRjX2Jpc3RfY21kX2FkZHJfcmVnKTsKIAljc2lvX3dyX3JlZzMyKGh3LCA2NCwgZWRjX2Jpc3RfY21kX2xlbl9yZWcpOwogCWNzaW9fd3JfcmVnMzIoaHcsIDB4YywgZWRjX2Jpc3RfY21kX2RhdGFfcGF0dGVybik7Ci0JY3Npb193cl9yZWczMihodywgQklTVF9PUENPREUoMSkgfCBTVEFSVF9CSVNUIHwgIEJJU1RfQ01EX0dBUCgxKSwKKwljc2lvX3dyX3JlZzMyKGh3LCBCSVNUX09QQ09ERV9WKDEpIHwgU1RBUlRfQklTVF9GIHwgIEJJU1RfQ01EX0dBUF9WKDEpLAogCQkgICAgICBlZGNfYmlzdF9jbWRfcmVnKTsKLQlpID0gY3Npb19od193YWl0X29wX2RvbmVfdmFsKGh3LCBlZGNfYmlzdF9jbWRfcmVnLCBTVEFSVF9CSVNULAorCWkgPSBjc2lvX2h3X3dhaXRfb3BfZG9uZV92YWwoaHcsIGVkY19iaXN0X2NtZF9yZWcsIFNUQVJUX0JJU1RfRiwKIAkJCQkgICAgIDAsIDEwLCAxLCBOVUxMKTsKIAlpZiAoaSkKIAkJcmV0dXJuIGk7CiAKLSNkZWZpbmUgRURDX0RBVEEoaSkgKEVEQ19CSVNUX1NUQVRVU19SRUcoRURDX0JJU1RfU1RBVFVTX1JEQVRBLCBpKSArIGlkeCkKKyNkZWZpbmUgRURDX0RBVEEoaSkgKEVEQ19CSVNUX1NUQVRVU19SRUcoRURDX0JJU1RfU1RBVFVTX1JEQVRBX0EsIGkpICsgaWR4KQogCiAJZm9yIChpID0gMTU7IGkgPj0gMDsgaS0tKQogCQkqZGF0YSsrID0gaHRvbmwoY3Npb19yZF9yZWczMihodywgRURDX0RBVEEoaSkpKTsKQEAgLTMyMCwxMyArMzIwLDEzIEBACiAJICogdGhlIGFkZHJlc3MgaXMgcmVsYXRpdmUgdG8gQkFSMC4KIAkgKi8KIAltZW1fcmVnID0gY3Npb19yZF9yZWczMihodywKLQkJCVBDSUVfTUVNX0FDQ0VTU19SRUcoUENJRV9NRU1fQUNDRVNTX0JBU0VfV0lOLCB3aW4pKTsKLQltZW1fYXBlcnR1cmUgPSAxIDw8IChXSU5ET1cobWVtX3JlZykgKyAxMCk7Ci0JbWVtX2Jhc2UgPSBHRVRfUENJRU9GU1QobWVtX3JlZykgPDwgMTA7CisJCQlQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19CQVNFX1dJTl9BLCB3aW4pKTsKKwltZW1fYXBlcnR1cmUgPSAxIDw8IChXSU5ET1dfVihtZW1fcmVnKSArIDEwKTsKKwltZW1fYmFzZSA9IFBDSUVPRlNUX0cobWVtX3JlZykgPDwgMTA7CiAKIAlzdGFydCA9IGFkZHIgJiB+KG1lbV9hcGVydHVyZS0xKTsKIAlvZmZzZXQgPSBhZGRyIC0gc3RhcnQ7Ci0Jd2luX3BmID0gVl9QRk5VTShody0+cGZuKTsKKwl3aW5fcGYgPSBQRk5VTV9WKGh3LT5wZm4pOwogCiAJY3Npb19kYmcoaHcsICJjc2lvX3Q1X21lbW9yeV9ydzogbWVtX3JlZzogMHgleCwgbWVtX2FwZXJ0dXJlOiAweCV4XG4iLAogCQkgbWVtX3JlZywgbWVtX2FwZXJ0dXJlKTsKQEAgLTM0NCw5ICszNDQsOSBAQAogCQkgKiBiZWZvcmUgd2UgYXR0ZW1wdCB0byB1c2UgdGhlIG5ldyB2YWx1ZS4KIAkJICovCiAJCWNzaW9fd3JfcmVnMzIoaHcsIHBvcyB8IHdpbl9wZiwKLQkJCVBDSUVfTUVNX0FDQ0VTU19SRUcoUENJRV9NRU1fQUNDRVNTX09GRlNFVCwgd2luKSk7CisJCQlQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19PRkZTRVRfQSwgd2luKSk7CiAJCWNzaW9fcmRfcmVnMzIoaHcsCi0JCQlQQ0lFX01FTV9BQ0NFU1NfUkVHKFBDSUVfTUVNX0FDQ0VTU19PRkZTRVQsIHdpbikpOworCQkJUENJRV9NRU1fQUNDRVNTX1JFRyhQQ0lFX01FTV9BQ0NFU1NfT0ZGU0VUX0EsIHdpbikpOwogCiAJCXdoaWxlIChvZmZzZXQgPCBtZW1fYXBlcnR1cmUgJiYgbGVuID4gMCkgewogCQkJaWYgKGRpcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX2luaXQuYwppbmRleCAzNGQyMGNjLi45Yjk3OTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19pbml0LmMKKysrIGIvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9faW5pdC5jCkBAIC0xMTc2LDkgKzExNzYsOCBAQAogICovCiAjZGVmaW5lIENIX1BDSV9ERVZJQ0VfSURfVEFCTEVfREVGSU5FX0JFR0lOIFwKIAlzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3Npb19wY2lfdGJsW10gPSB7Ci0vKiBEZWZpbmUgZm9yIGlTQ1NJIHVzZXMgUEY1LCBGQ29FIHVzZXMgUEY2ICovCi0jZGVmaW5lIENIX1BDSV9ERVZJQ0VfSURfRlVOQ1RJT04JMHg1Ci0jZGVmaW5lIENIX1BDSV9ERVZJQ0VfSURfRlVOQ1RJT04yCTB4NgorLyogRGVmaW5lIGZvciBGQ29FIHVzZXMgUEY2ICovCisjZGVmaW5lIENIX1BDSV9ERVZJQ0VfSURfRlVOQ1RJT04JMHg2CiAKICNkZWZpbmUgQ0hfUENJX0lEX1RBQkxFX0VOVFJZKGRldmlkKSBcCiAJCXsgUENJX1ZERVZJQ0UoQ0hFTFNJTywgKGRldmlkKSksIDAgfQpAQCAtMTI1Niw1ICsxMjU1LDQgQEAKIE1PRFVMRV9MSUNFTlNFKENTSU9fRFJWX0xJQ0VOU0UpOwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNzaW9fcGNpX3RibCk7CiBNT0RVTEVfVkVSU0lPTihDU0lPX0RSVl9WRVJTSU9OKTsKLU1PRFVMRV9GSVJNV0FSRShGV19GTkFNRV9UNCk7CiBNT0RVTEVfRklSTVdBUkUoRldfRk5BTUVfVDUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9faXNyLmMgYi9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19pc3IuYwppbmRleCBhOGM3NDhhLi4yZmI3MWM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19pc3IuYworKysgYi9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19pc3IuYwpAQCAtMzE3LDcgKzMxNyw3IEBACiAKIAkvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgZm9yIHRoaXMgUENJIGZ1bmN0aW9uLiAqLwogCWlmIChody0+aW50cl9tb2RlID09IENTSU9fSU1fSU5UWCkKLQkJY3Npb193cl9yZWczMihodywgMCwgTVlQRl9SRUcoUENJRV9QRl9DTEkpKTsKKwkJY3Npb193cl9yZWczMihodywgMCwgTVlQRl9SRUcoUENJRV9QRl9DTElfQSkpOwogCiAJLyoKIAkgKiBUaGUgcmVhZCBpbiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHdpbGwgZmx1c2ggdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19sbm9kZS5jIGIvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9fbG5vZGUuYwppbmRleCA4N2Y5MjgwLi5jMDBiMmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19sbm9kZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX2xub2RlLmMKQEAgLTE3NTgsNyArMTc1OCw3IEBACiAJZWxzZSB7CiAJCS8qIFByb2dyYW0gRFNHTCB0byBkbWEgcGF5bG9hZCAqLwogCQlkc2dsLmNtZF9uc2dlID0gaHRvbmwoVUxQVFhfQ01EX1YoVUxQX1RYX1NDX0RTR0wpIHwKLQkJCQkJVUxQVFhfTU9SRSB8IFVMUFRYX05TR0UoMSkpOworCQkJCQlVTFBUWF9NT1JFX0YgfCBVTFBUWF9OU0dFX1YoMSkpOwogCQlkc2dsLmxlbjAgPSBjcHVfdG9fYmUzMihwbGRfbGVuKTsKIAkJZHNnbC5hZGRyMCA9IGNwdV90b19iZTY0KHBsZC0+cGFkZHIpOwogCQljc2lvX3dyX2NvcHlfdG9fd3JwKCZkc2dsLCAmd3JwLCBBTElHTih3cl9vZmYsIDgpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9fbWIuYyBiL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX21iLmMKaW5kZXggMDhjMjY1Yy4uOTQ1MTc4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9fbWIuYworKysgYi9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19tYi5jCkBAIC0zMjcsNyArMzI3LDggQEAKIH0KIAogI2RlZmluZSBDU0lPX0FEVkVSVF9NQVNLICAgICAoRldfUE9SVF9DQVBfU1BFRURfMTAwTSB8IEZXX1BPUlRfQ0FQX1NQRUVEXzFHIHxcCi0JCQkgICAgICBGV19QT1JUX0NBUF9TUEVFRF8xMEcgfCBGV19QT1JUX0NBUF9BTkVHKQorCQkJICAgICAgRldfUE9SVF9DQVBfU1BFRURfMTBHIHwgRldfUE9SVF9DQVBfU1BFRURfNDBHIHxcCisJCQkgICAgICBGV19QT1JUX0NBUF9BTkVHKQogCiAvKgogICogY3Npb19tYl9wb3J0LSBGVyBQT1JUIGNvbW1hbmQgaGVscGVyCkBAIC0xMTA0LDggKzExMDUsOCBAQAogdm9pZAogY3Npb19tYl9pbnRyX2VuYWJsZShzdHJ1Y3QgY3Npb19odyAqaHcpCiB7Ci0JY3Npb193cl9yZWczMihodywgTUJNU0dSRFlJTlRFTigxKSwgTVlQRl9SRUcoQ0lNX1BGX0hPU1RfSU5UX0VOQUJMRSkpOwotCWNzaW9fcmRfcmVnMzIoaHcsIE1ZUEZfUkVHKENJTV9QRl9IT1NUX0lOVF9FTkFCTEUpKTsKKwljc2lvX3dyX3JlZzMyKGh3LCBNQk1TR1JEWUlOVEVOX0YsIE1ZUEZfUkVHKENJTV9QRl9IT1NUX0lOVF9FTkFCTEVfQSkpOworCWNzaW9fcmRfcmVnMzIoaHcsIE1ZUEZfUkVHKENJTV9QRl9IT1NUX0lOVF9FTkFCTEVfQSkpOwogfQogCiAvKgpAQCAtMTExNyw4ICsxMTE4LDkgQEAKIHZvaWQKIGNzaW9fbWJfaW50cl9kaXNhYmxlKHN0cnVjdCBjc2lvX2h3ICpodykKIHsKLQljc2lvX3dyX3JlZzMyKGh3LCBNQk1TR1JEWUlOVEVOKDApLCBNWVBGX1JFRyhDSU1fUEZfSE9TVF9JTlRfRU5BQkxFKSk7Ci0JY3Npb19yZF9yZWczMihodywgTVlQRl9SRUcoQ0lNX1BGX0hPU1RfSU5UX0VOQUJMRSkpOworCWNzaW9fd3JfcmVnMzIoaHcsIE1CTVNHUkRZSU5URU5fVigwKSwKKwkJICAgICAgTVlQRl9SRUcoQ0lNX1BGX0hPU1RfSU5UX0VOQUJMRV9BKSk7CisJY3Npb19yZF9yZWczMihodywgTVlQRl9SRUcoQ0lNX1BGX0hPU1RfSU5UX0VOQUJMRV9BKSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMTUzLDggKzExNTUsOCBAQAogewogCWludCBpOwogCV9fYmU2NCBjbWRbQ1NJT19NQl9NQVhfUkVHU107Ci0JdWludDMyX3QgY3RsX3JlZyA9IFBGX1JFRyhody0+cGZuLCBDSU1fUEZfTUFJTEJPWF9DVFJMKTsKLQl1aW50MzJfdCBkYXRhX3JlZyA9IFBGX1JFRyhody0+cGZuLCBDSU1fUEZfTUFJTEJPWF9EQVRBKTsKKwl1aW50MzJfdCBjdGxfcmVnID0gUEZfUkVHKGh3LT5wZm4sIENJTV9QRl9NQUlMQk9YX0NUUkxfQSk7CisJdWludDMyX3QgZGF0YV9yZWcgPSBQRl9SRUcoaHctPnBmbiwgQ0lNX1BGX01BSUxCT1hfREFUQV9BKTsKIAlpbnQgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZndfZGVidWdfY21kKTsKIAogCS8qIENvcHkgbWFpbGJveCBkYXRhICovCkBAIC0xMTY0LDggKzExNjYsOCBAQAogCWNzaW9fbWJfZHVtcF9md19kYmcoaHcsIGNtZCk7CiAKIAkvKiBOb3RpZnkgRlcgb2YgbWFpbGJveCBieSBzZXR0aW5nIG93bmVyIGFzIFVQICovCi0JY3Npb193cl9yZWczMihodywgTUJNU0dWQUxJRCB8IE1CSU5UUkVRIHwgTUJPV05FUihDU0lPX01CT1dORVJfRlcpLAotCQkgICAgICBjdGxfcmVnKTsKKwljc2lvX3dyX3JlZzMyKGh3LCBNQk1TR1ZBTElEX0YgfCBNQklOVFJFUV9GIHwKKwkJICAgICAgTUJPV05FUl9WKENTSU9fTUJPV05FUl9GVyksIGN0bF9yZWcpOwogCiAJY3Npb19yZF9yZWczMihodywgY3RsX3JlZyk7CiAJd21iKCk7CkBAIC0xMTg3LDggKzExODksOCBAQAogCV9fYmU2NCAqY21kID0gbWJwLT5tYjsKIAlfX2JlNjQgaGRyOwogCXN0cnVjdCBjc2lvX21ibQkqbWJtID0gJmh3LT5tYm07Ci0JdWludDMyX3QgY3RsX3JlZyA9IFBGX1JFRyhody0+cGZuLCBDSU1fUEZfTUFJTEJPWF9DVFJMKTsKLQl1aW50MzJfdCBkYXRhX3JlZyA9IFBGX1JFRyhody0+cGZuLCBDSU1fUEZfTUFJTEJPWF9EQVRBKTsKKwl1aW50MzJfdCBjdGxfcmVnID0gUEZfUkVHKGh3LT5wZm4sIENJTV9QRl9NQUlMQk9YX0NUUkxfQSk7CisJdWludDMyX3QgZGF0YV9yZWcgPSBQRl9SRUcoaHctPnBmbiwgQ0lNX1BGX01BSUxCT1hfREFUQV9BKTsKIAlpbnQgc2l6ZSA9IG1icC0+bWJfc2l6ZTsKIAlpbnQgcnYgPSAtRUlOVkFMOwogCXN0cnVjdCBmd19jbWRfaGRyICpmd19oZHI7CkBAIC0xMjI0LDEyICsxMjI2LDEyIEBACiAJfQogCiAJLyogTm93IGdldCBvd25lcnNoaXAgb2YgbWFpbGJveCAqLwotCW93bmVyID0gTUJPV05FUl9HRVQoY3Npb19yZF9yZWczMihodywgY3RsX3JlZykpOworCW93bmVyID0gTUJPV05FUl9HKGNzaW9fcmRfcmVnMzIoaHcsIGN0bF9yZWcpKTsKIAogCWlmICghY3Npb19tYl9pc19ob3N0X293bmVyKG93bmVyKSkgewogCiAJCWZvciAoaSA9IDA7IChvd25lciA9PSBDU0lPX01CT1dORVJfTk9ORSkgJiYgKGkgPCAzKTsgaSsrKQotCQkJb3duZXIgPSBNQk9XTkVSX0dFVChjc2lvX3JkX3JlZzMyKGh3LCBjdGxfcmVnKSk7CisJCQlvd25lciA9IE1CT1dORVJfRyhjc2lvX3JkX3JlZzMyKGh3LCBjdGxfcmVnKSk7CiAJCS8qCiAJCSAqIE1haWxib3ggdW5hdmFpbGFibGUuIEluIGltbWVkaWF0ZSBtb2RlLCBmYWlsIHRoZSBjb21tYW5kLgogCQkgKiBJbiBvdGhlciBtb2RlcywgZW5xdWV1ZSB0aGUgcmVxdWVzdC4KQEAgLTEyNzEsMTAgKzEyNzMsMTAgQEAKIAlpZiAobWJwLT5tYl9jYmZuICE9IE5VTEwpIHsKIAkJbWJtLT5tY3VycmVudCA9IG1icDsKIAkJbW9kX3RpbWVyKCZtYm0tPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhtYnAtPnRtbykpOwotCQljc2lvX3dyX3JlZzMyKGh3LCBNQk1TR1ZBTElEIHwgTUJJTlRSRVEgfAotCQkJICAgICAgTUJPV05FUihDU0lPX01CT1dORVJfRlcpLCBjdGxfcmVnKTsKKwkJY3Npb193cl9yZWczMihodywgTUJNU0dWQUxJRF9GIHwgTUJJTlRSRVFfRiB8CisJCQkgICAgICBNQk9XTkVSX1YoQ1NJT19NQk9XTkVSX0ZXKSwgY3RsX3JlZyk7CiAJfSBlbHNlCi0JCWNzaW9fd3JfcmVnMzIoaHcsIE1CTVNHVkFMSUQgfCBNQk9XTkVSKENTSU9fTUJPV05FUl9GVyksCisJCWNzaW9fd3JfcmVnMzIoaHcsIE1CTVNHVkFMSURfRiB8IE1CT1dORVJfVihDU0lPX01CT1dORVJfRlcpLAogCQkJICAgICAgY3RsX3JlZyk7CiAKIAkvKiBGbHVzaCBwb3N0ZWQgd3JpdGVzICovCkBAIC0xMjk0LDkgKzEyOTYsOSBAQAogCiAJCS8qIENoZWNrIGZvciByZXNwb25zZSAqLwogCQljdGwgPSBjc2lvX3JkX3JlZzMyKGh3LCBjdGxfcmVnKTsKLQkJaWYgKGNzaW9fbWJfaXNfaG9zdF9vd25lcihNQk9XTkVSX0dFVChjdGwpKSkgeworCQlpZiAoY3Npb19tYl9pc19ob3N0X293bmVyKE1CT1dORVJfRyhjdGwpKSkgewogCi0JCQlpZiAoIShjdGwgJiBNQk1TR1ZBTElEKSkgeworCQkJaWYgKCEoY3RsICYgTUJNU0dWQUxJRF9GKSkgewogCQkJCWNzaW9fd3JfcmVnMzIoaHcsIDAsIGN0bF9yZWcpOwogCQkJCWNvbnRpbnVlOwogCQkJfQpAQCAtMTQ1NywxNiArMTQ1OSwxNiBAQAogCV9fYmU2NAkJCSpjbWQ7CiAJdWludDMyX3QJCWN0bCwgY2ltX2NhdXNlLCBwbF9jYXVzZTsKIAlpbnQJCQlpOwotCXVpbnQzMl90CQljdGxfcmVnID0gUEZfUkVHKGh3LT5wZm4sIENJTV9QRl9NQUlMQk9YX0NUUkwpOwotCXVpbnQzMl90CQlkYXRhX3JlZyA9IFBGX1JFRyhody0+cGZuLCBDSU1fUEZfTUFJTEJPWF9EQVRBKTsKKwl1aW50MzJfdAljdGxfcmVnID0gUEZfUkVHKGh3LT5wZm4sIENJTV9QRl9NQUlMQk9YX0NUUkxfQSk7CisJdWludDMyX3QJZGF0YV9yZWcgPSBQRl9SRUcoaHctPnBmbiwgQ0lNX1BGX01BSUxCT1hfREFUQV9BKTsKIAlpbnQJCQlzaXplOwogCV9fYmU2NAkJCWhkcjsKIAlzdHJ1Y3QgZndfY21kX2hkcgkqZndfaGRyOwogCi0JcGxfY2F1c2UgPSBjc2lvX3JkX3JlZzMyKGh3LCBNWVBGX1JFRyhQTF9QRl9JTlRfQ0FVU0UpKTsKLQljaW1fY2F1c2UgPSBjc2lvX3JkX3JlZzMyKGh3LCBNWVBGX1JFRyhDSU1fUEZfSE9TVF9JTlRfQ0FVU0UpKTsKKwlwbF9jYXVzZSA9IGNzaW9fcmRfcmVnMzIoaHcsIE1ZUEZfUkVHKFBMX1BGX0lOVF9DQVVTRV9BKSk7CisJY2ltX2NhdXNlID0gY3Npb19yZF9yZWczMihodywgTVlQRl9SRUcoQ0lNX1BGX0hPU1RfSU5UX0NBVVNFX0EpKTsKIAotCWlmICghKHBsX2NhdXNlICYgUEZDSU0pIHx8ICEoY2ltX2NhdXNlICYgTUJNU0dSRFlJTlQpKSB7CisJaWYgKCEocGxfY2F1c2UgJiBQRkNJTV9GKSB8fCAhKGNpbV9jYXVzZSAmIE1CTVNHUkRZSU5UX0YpKSB7CiAJCUNTSU9fSU5DX1NUQVRTKGh3LCBuX21iaW50X3VuZXhwKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTQ3NywxNiArMTQ3OSwxNiBAQAogCSAqIHRoZSB1cHBlciBsZXZlbCBjYXVzZSByZWdpc3Rlci4gSW4gb3RoZXIgd29yZHMsIENJTS1jYXVzZQogCSAqIGZpcnN0IGZvbGxvd2VkIGJ5IFBMLUNhdXNlIG5leHQuCiAJICovCi0JY3Npb193cl9yZWczMihodywgTUJNU0dSRFlJTlQsIE1ZUEZfUkVHKENJTV9QRl9IT1NUX0lOVF9DQVVTRSkpOwotCWNzaW9fd3JfcmVnMzIoaHcsIFBGQ0lNLCBNWVBGX1JFRyhQTF9QRl9JTlRfQ0FVU0UpKTsKKwljc2lvX3dyX3JlZzMyKGh3LCBNQk1TR1JEWUlOVF9GLCBNWVBGX1JFRyhDSU1fUEZfSE9TVF9JTlRfQ0FVU0VfQSkpOworCWNzaW9fd3JfcmVnMzIoaHcsIFBGQ0lNX0YsIE1ZUEZfUkVHKFBMX1BGX0lOVF9DQVVTRV9BKSk7CiAKIAljdGwgPSBjc2lvX3JkX3JlZzMyKGh3LCBjdGxfcmVnKTsKIAotCWlmIChjc2lvX21iX2lzX2hvc3Rfb3duZXIoTUJPV05FUl9HRVQoY3RsKSkpIHsKKwlpZiAoY3Npb19tYl9pc19ob3N0X293bmVyKE1CT1dORVJfRyhjdGwpKSkgewogCiAJCUNTSU9fRFVNUF9NQihodywgaHctPnBmbiwgZGF0YV9yZWcpOwogCi0JCWlmICghKGN0bCAmIE1CTVNHVkFMSUQpKSB7CisJCWlmICghKGN0bCAmIE1CTVNHVkFMSURfRikpIHsKIAkJCWNzaW9fd2FybihodywKIAkJCQkgICJTdHJheSBtYWlsYm94IGludGVycnVwdCByZWN2ZCwiCiAJCQkJICAiIG1haWxib3ggZGF0YSBub3QgdmFsaWRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9fc2NzaS5jIGIvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9fc2NzaS5jCmluZGV4IDM5ODcyODQuLjJjNDU2MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb19zY3NpLmMKQEAgLTI5OCw4ICsyOTgsOCBAQAogCXN0cnVjdCBjc2lvX2RtYV9idWYgKmRtYV9idWY7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtbmQgPSBjc2lvX3Njc2lfY21uZChyZXEpOwogCi0Jc2dsLT5jbWRfbnNnZSA9IGh0b25sKFVMUFRYX0NNRF9WKFVMUF9UWF9TQ19EU0dMKSB8IFVMUFRYX01PUkUgfAotCQkJCSAgICAgVUxQVFhfTlNHRShyZXEtPm5zZ2UpKTsKKwlzZ2wtPmNtZF9uc2dlID0gaHRvbmwoVUxQVFhfQ01EX1YoVUxQX1RYX1NDX0RTR0wpIHwgVUxQVFhfTU9SRV9GIHwKKwkJCQkgICAgIFVMUFRYX05TR0VfVihyZXEtPm5zZ2UpKTsKIAkvKiBOb3cgYWRkIHRoZSBkYXRhIFNHTHMgKi8KIAlpZiAobGlrZWx5KCFyZXEtPmRjb3B5KSkgewogCQlzY3NpX2Zvcl9lYWNoX3NnKHNjbW5kLCBzZ2VsLCByZXEtPm5zZ2UsIGkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX3dyLmMgYi9kcml2ZXJzL3Njc2kvY3Npb3N0b3IvY3Npb193ci5jCmluZGV4IDc3M2RhMTQuLmU4ZjE4MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jc2lvc3Rvci9jc2lvX3dyLmMKKysrIGIvZHJpdmVycy9zY3NpL2NzaW9zdG9yL2NzaW9fd3IuYwpAQCAtNTEsMTIgKzUxLDEyIEBACiBzdGF0aWMgaW50IGNzaW9fc2dlX3RpbWVyX3JlZyA9IDE7CiAKICNkZWZpbmUgQ1NJT19TRVRfRkxCVUZfU0laRShfaHcsIF9yZWcsIF92YWwpCQkJCVwKLQljc2lvX3dyX3JlZzMyKChfaHcpLCAoX3ZhbCksIFNHRV9GTF9CVUZGRVJfU0laRSMjX3JlZykKKwljc2lvX3dyX3JlZzMyKChfaHcpLCAoX3ZhbCksIFNHRV9GTF9CVUZGRVJfU0laRSMjX3JlZyMjX0EpCiAKIHN0YXRpYyB2b2lkCiBjc2lvX2dldF9mbGJ1Zl9zaXplKHN0cnVjdCBjc2lvX2h3ICpodywgc3RydWN0IGNzaW9fc2dlICpzZ2UsIHVpbnQzMl90IHJlZykKIHsKLQlzZ2UtPnNnZV9mbF9idWZfc2l6ZVtyZWddID0gY3Npb19yZF9yZWczMihodywgU0dFX0ZMX0JVRkZFUl9TSVpFMCArCisJc2dlLT5zZ2VfZmxfYnVmX3NpemVbcmVnXSA9IGNzaW9fcmRfcmVnMzIoaHcsIFNHRV9GTF9CVUZGRVJfU0laRTBfQSArCiAJCQkJCQkJcmVnICogc2l6ZW9mKHVpbnQzMl90KSk7CiB9CiAKQEAgLTcxLDcgKzcxLDcgQEAKIHN0YXRpYyBpbmxpbmUgdWludDMyX3QKIGNzaW9fd3JfcXN0YXRfcGdzeihzdHJ1Y3QgY3Npb19odyAqaHcpCiB7Ci0JcmV0dXJuIChody0+d3JtLnNnZS5zZ2VfY29udHJvbCAmIEVHUlNUQVRVU1BBR0VTSVpFKDEpKSA/ICAxMjggOiA2NDsKKwlyZXR1cm4gKGh3LT53cm0uc2dlLnNnZV9jb250cm9sICYgRUdSU1RBVFVTUEFHRVNJWkVfRikgPyAgMTI4IDogNjQ7CiB9CiAKIC8qIFJpbmcgZnJlZWxpc3QgZG9vcmJlbGwgKi8KQEAgLTg0LDkgKzg0LDkgQEAKIAkgKiA4IGZyZWVsaXN0IGJ1ZmZlciBwb2ludGVycyAoc2luY2UgZWFjaCBwb2ludGVyIGlzIDggYnl0ZXMpLgogCSAqLwogCWlmIChmbHEtPmluY19pZHggPj0gOCkgewotCQljc2lvX3dyX3JlZzMyKGh3LCBEQlBSSU8oMSkgfCBRSUQoZmxxLT51bi5mbC5mbGlkKSB8Ci0JCQkJICBDU0lPX0hXX1BJRFgoaHcsIGZscS0+aW5jX2lkeCAvIDgpLAotCQkJCSAgTVlQRl9SRUcoU0dFX1BGX0tET09SQkVMTCkpOworCQljc2lvX3dyX3JlZzMyKGh3LCBEQlBSSU9fRiB8IFFJRF9WKGZscS0+dW4uZmwuZmxpZCkgfAorCQkJCSAgUElEWF9UNV9WKGZscS0+aW5jX2lkeCAvIDgpIHwgREJUWVBFX0YsCisJCQkJICBNWVBGX1JFRyhTR0VfUEZfS0RPT1JCRUxMX0EpKTsKIAkJZmxxLT5pbmNfaWR4ICY9IDc7CiAJfQogfQpAQCAtOTUsMTAgKzk1LDEwIEBACiBzdGF0aWMgdm9pZAogY3Npb193cl9zZ2VfaW50cl9lbmFibGUoc3RydWN0IGNzaW9faHcgKmh3LCB1aW50MTZfdCBpcWlkKQogewotCWNzaW9fd3JfcmVnMzIoaHcsIENJRFhJTkMoMCkJCXwKLQkJCSAgSU5HUkVTU1FJRChpcWlkKQl8Ci0JCQkgIFRJTUVSUkVHKFhfVElNRVJSRUdfUkVTVEFSVF9DT1VOVEVSKSwKLQkJCSAgTVlQRl9SRUcoU0dFX1BGX0dUUykpOworCWNzaW9fd3JfcmVnMzIoaHcsIENJRFhJTkNfVigwKQkJfAorCQkJICBJTkdSRVNTUUlEX1YoaXFpZCkJfAorCQkJICBUSU1FUlJFR19WKFhfVElNRVJSRUdfUkVTVEFSVF9DT1VOVEVSKSwKKwkJCSAgTVlQRl9SRUcoU0dFX1BGX0dUU19BKSk7CiB9CiAKIC8qCkBAIC05ODIsOSArOTgyLDkgQEAKIAogCXdtYigpOwogCS8qIFJpbmcgU0dFIERvb3JiZWxsIHdyaXRpbmcgcS0+cGlkeCBpbnRvIGl0ICovCi0JY3Npb193cl9yZWczMihodywgREJQUklPKHByaW8pIHwgUUlEKHEtPnVuLmVxLnBoeXNlcWlkKSB8Ci0JCQkgIENTSU9fSFdfUElEWChodywgcS0+aW5jX2lkeCksCi0JCQkgIE1ZUEZfUkVHKFNHRV9QRl9LRE9PUkJFTEwpKTsKKwljc2lvX3dyX3JlZzMyKGh3LCBEQlBSSU9fVihwcmlvKSB8IFFJRF9WKHEtPnVuLmVxLnBoeXNlcWlkKSB8CisJCQkgIFBJRFhfVDVfVihxLT5pbmNfaWR4KSB8IERCVFlQRV9GLAorCQkJICBNWVBGX1JFRyhTR0VfUEZfS0RPT1JCRUxMX0EpKTsKIAlxLT5pbmNfaWR4ID0gMDsKIAogCXJldHVybiAwOwpAQCAtMTI0MiwxMCArMTI0MiwxMCBAQAogCiByZXN0YXJ0OgogCS8qIE5vdyBpbmZvcm0gU0dFIGFib3V0IG91ciBpbmNyZW1lbnRhbCBpbmRleCB2YWx1ZSAqLwotCWNzaW9fd3JfcmVnMzIoaHcsIENJRFhJTkMocS0+aW5jX2lkeCkJCXwKLQkJCSAgSU5HUkVTU1FJRChxLT51bi5pcS5waHlzaXFpZCkJfAotCQkJICBUSU1FUlJFRyhjc2lvX3NnZV90aW1lcl9yZWcpLAotCQkJICBNWVBGX1JFRyhTR0VfUEZfR1RTKSk7CisJY3Npb193cl9yZWczMihodywgQ0lEWElOQ19WKHEtPmluY19pZHgpCQl8CisJCQkgIElOR1JFU1NRSURfVihxLT51bi5pcS5waHlzaXFpZCkJfAorCQkJICBUSU1FUlJFR19WKGNzaW9fc2dlX3RpbWVyX3JlZyksCisJCQkgIE1ZUEZfUkVHKFNHRV9QRl9HVFNfQSkpOwogCXEtPnN0YXRzLm5fdG90X3JzcHMgKz0gcS0+aW5jX2lkeDsKIAogCXEtPmluY19pZHggPSAwOwpAQCAtMTMxMCwyMiArMTMxMCwyMyBAQAogCXVpbnQzMl90IGluZ3BhZCA9IDA7CiAJdWludDMyX3Qgc3RhdF9sZW4gPSBjbHN6ID4gNjQgPyAxMjggOiA2NDsKIAotCWNzaW9fd3JfcmVnMzIoaHcsIEhPU1RQQUdFU0laRVBGMChzX2hwcykgfCBIT1NUUEFHRVNJWkVQRjEoc19ocHMpIHwKLQkJICAgICAgSE9TVFBBR0VTSVpFUEYyKHNfaHBzKSB8IEhPU1RQQUdFU0laRVBGMyhzX2hwcykgfAotCQkgICAgICBIT1NUUEFHRVNJWkVQRjQoc19ocHMpIHwgSE9TVFBBR0VTSVpFUEY1KHNfaHBzKSB8Ci0JCSAgICAgIEhPU1RQQUdFU0laRVBGNihzX2hwcykgfCBIT1NUUEFHRVNJWkVQRjcoc19ocHMpLAotCQkgICAgICBTR0VfSE9TVF9QQUdFX1NJWkUpOworCWNzaW9fd3JfcmVnMzIoaHcsIEhPU1RQQUdFU0laRVBGMF9WKHNfaHBzKSB8IEhPU1RQQUdFU0laRVBGMV9WKHNfaHBzKSB8CisJCSAgICAgIEhPU1RQQUdFU0laRVBGMl9WKHNfaHBzKSB8IEhPU1RQQUdFU0laRVBGM19WKHNfaHBzKSB8CisJCSAgICAgIEhPU1RQQUdFU0laRVBGNF9WKHNfaHBzKSB8IEhPU1RQQUdFU0laRVBGNV9WKHNfaHBzKSB8CisJCSAgICAgIEhPU1RQQUdFU0laRVBGNl9WKHNfaHBzKSB8IEhPU1RQQUdFU0laRVBGN19WKHNfaHBzKSwKKwkJICAgICAgU0dFX0hPU1RfUEFHRV9TSVpFX0EpOwogCiAJc2dlLT5jc2lvX2ZsX2FsaWduID0gY2xzeiA8IDMyID8gMzIgOiBjbHN6OwogCWluZ3BhZCA9IGlsb2cyKHNnZS0+Y3Npb19mbF9hbGlnbikgLSA1OwogCi0JY3Npb19zZXRfcmVnX2ZpZWxkKGh3LCBTR0VfQ09OVFJPTCwgSU5HUEFEQk9VTkRBUllfTUFTSyB8Ci0JCQkJCSAgICBFR1JTVEFUVVNQQUdFU0laRSgxKSwKLQkJCSAgIElOR1BBREJPVU5EQVJZKGluZ3BhZCkgfAotCQkJICAgRUdSU1RBVFVTUEFHRVNJWkUoc3RhdF9sZW4gIT0gNjQpKTsKKwljc2lvX3NldF9yZWdfZmllbGQoaHcsIFNHRV9DT05UUk9MX0EsCisJCQkgICBJTkdQQURCT1VOREFSWV9WKElOR1BBREJPVU5EQVJZX00pIHwKKwkJCSAgIEVHUlNUQVRVU1BBR0VTSVpFX0YsCisJCQkgICBJTkdQQURCT1VOREFSWV9WKGluZ3BhZCkgfAorCQkJICAgRUdSU1RBVFVTUEFHRVNJWkVfVihzdGF0X2xlbiAhPSA2NCkpOwogCiAJLyogRkwgQlVGRkVSIFNJWkUjMCBpcyBQYWdlIHNpemUgaSxlIGFscmVhZHkgYWxpZ25lZCB0byBjYWNoZSBsaW5lICovCi0JY3Npb193cl9yZWczMihodywgUEFHRV9TSVpFLCBTR0VfRkxfQlVGRkVSX1NJWkUwKTsKKwljc2lvX3dyX3JlZzMyKGh3LCBQQUdFX1NJWkUsIFNHRV9GTF9CVUZGRVJfU0laRTBfQSk7CiAKIAkvKgogCSAqIElmIHVzaW5nIGhhcmQgcGFyYW1zLCB0aGUgZm9sbG93aW5nIHdpbGwgZ2V0IHNldCBjb3JyZWN0bHkKQEAgLTEzMzMsMjMgKzEzMzQsMjQgQEAKIAkgKi8KIAlpZiAoaHctPmZsYWdzICYgQ1NJT19IV0ZfVVNJTkdfU09GVF9QQVJBTVMpIHsKIAkJY3Npb193cl9yZWczMihodywKLQkJCShjc2lvX3JkX3JlZzMyKGh3LCBTR0VfRkxfQlVGRkVSX1NJWkUyKSArCisJCQkoY3Npb19yZF9yZWczMihodywgU0dFX0ZMX0JVRkZFUl9TSVpFMl9BKSArCiAJCQlzZ2UtPmNzaW9fZmxfYWxpZ24gLSAxKSAmIH4oc2dlLT5jc2lvX2ZsX2FsaWduIC0gMSksCi0JCQlTR0VfRkxfQlVGRkVSX1NJWkUyKTsKKwkJCVNHRV9GTF9CVUZGRVJfU0laRTJfQSk7CiAJCWNzaW9fd3JfcmVnMzIoaHcsCi0JCQkoY3Npb19yZF9yZWczMihodywgU0dFX0ZMX0JVRkZFUl9TSVpFMykgKworCQkJKGNzaW9fcmRfcmVnMzIoaHcsIFNHRV9GTF9CVUZGRVJfU0laRTNfQSkgKwogCQkJc2dlLT5jc2lvX2ZsX2FsaWduIC0gMSkgJiB+KHNnZS0+Y3Npb19mbF9hbGlnbiAtIDEpLAotCQkJU0dFX0ZMX0JVRkZFUl9TSVpFMyk7CisJCQlTR0VfRkxfQlVGRkVSX1NJWkUzX0EpOwogCX0KIAotCWNzaW9fd3JfcmVnMzIoaHcsIEhQWjAoUEFHRV9TSElGVCAtIDEyKSwgVUxQX1JYX1RERFBfUFNaKTsKKwljc2lvX3dyX3JlZzMyKGh3LCBIUFowX1YoUEFHRV9TSElGVCAtIDEyKSwgVUxQX1JYX1RERFBfUFNaX0EpOwogCiAJLyogZGVmYXVsdCB2YWx1ZSBvZiByeF9kbWFfb2Zmc2V0IG9mIHRoZSBOSUMgZHJpdmVyICovCi0JY3Npb19zZXRfcmVnX2ZpZWxkKGh3LCBTR0VfQ09OVFJPTCwgUEtUU0hJRlRfTUFTSywKLQkJCSAgIFBLVFNISUZUKENTSU9fU0dFX1JYX0RNQV9PRkZTRVQpKTsKKwljc2lvX3NldF9yZWdfZmllbGQoaHcsIFNHRV9DT05UUk9MX0EsCisJCQkgICBQS1RTSElGVF9WKFBLVFNISUZUX00pLAorCQkJICAgUEtUU0hJRlRfVihDU0lPX1NHRV9SWF9ETUFfT0ZGU0VUKSk7CiAKLQljc2lvX2h3X3RwX3dyX2JpdHNfaW5kaXJlY3QoaHcsIFRQX0lOR1JFU1NfQ09ORklHLAotCQkJCSAgICBDU1VNX0hBU19QU0VVRE9fSERSLCAwKTsKKwljc2lvX2h3X3RwX3dyX2JpdHNfaW5kaXJlY3QoaHcsIFRQX0lOR1JFU1NfQ09ORklHX0EsCisJCQkJICAgIENTVU1fSEFTX1BTRVVET19IRFJfRiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMzg0LDkgKzEzODYsOSBAQAogCXUzMiB0aW1lcl92YWx1ZV8wX2FuZF8xLCB0aW1lcl92YWx1ZV8yX2FuZF8zLCB0aW1lcl92YWx1ZV80X2FuZF81OwogCXUzMiBpbmdyZXNzX3J4X3RocmVzaG9sZDsKIAotCXNnZS0+c2dlX2NvbnRyb2wgPSBjc2lvX3JkX3JlZzMyKGh3LCBTR0VfQ09OVFJPTCk7CisJc2dlLT5zZ2VfY29udHJvbCA9IGNzaW9fcmRfcmVnMzIoaHcsIFNHRV9DT05UUk9MX0EpOwogCi0JaW5ncGFkID0gSU5HUEFEQk9VTkRBUllfR0VUKHNnZS0+c2dlX2NvbnRyb2wpOworCWluZ3BhZCA9IElOR1BBREJPVU5EQVJZX0coc2dlLT5zZ2VfY29udHJvbCk7CiAKIAlzd2l0Y2ggKGluZ3BhZCkgewogCWNhc2UgWF9JTkdQQ0lFQk9VTkRBUllfMzJCOgpAQCAtMTQxMCwyOCArMTQxMiwyOCBAQAogCWZvciAoaSA9IDA7IGkgPCBDU0lPX1NHRV9GTF9TSVpFX1JFR1M7IGkrKykKIAkJY3Npb19nZXRfZmxidWZfc2l6ZShodywgc2dlLCBpKTsKIAotCXRpbWVyX3ZhbHVlXzBfYW5kXzEgPSBjc2lvX3JkX3JlZzMyKGh3LCBTR0VfVElNRVJfVkFMVUVfMF9BTkRfMSk7Ci0JdGltZXJfdmFsdWVfMl9hbmRfMyA9IGNzaW9fcmRfcmVnMzIoaHcsIFNHRV9USU1FUl9WQUxVRV8yX0FORF8zKTsKLQl0aW1lcl92YWx1ZV80X2FuZF81ID0gY3Npb19yZF9yZWczMihodywgU0dFX1RJTUVSX1ZBTFVFXzRfQU5EXzUpOworCXRpbWVyX3ZhbHVlXzBfYW5kXzEgPSBjc2lvX3JkX3JlZzMyKGh3LCBTR0VfVElNRVJfVkFMVUVfMF9BTkRfMV9BKTsKKwl0aW1lcl92YWx1ZV8yX2FuZF8zID0gY3Npb19yZF9yZWczMihodywgU0dFX1RJTUVSX1ZBTFVFXzJfQU5EXzNfQSk7CisJdGltZXJfdmFsdWVfNF9hbmRfNSA9IGNzaW9fcmRfcmVnMzIoaHcsIFNHRV9USU1FUl9WQUxVRV80X0FORF81X0EpOwogCiAJc2dlLT50aW1lcl92YWxbMF0gPSAodWludDE2X3QpY3Npb19jb3JlX3RpY2tzX3RvX3VzKGh3LAotCQkJCQlUSU1FUlZBTFVFMF9HRVQodGltZXJfdmFsdWVfMF9hbmRfMSkpOworCQkJCQlUSU1FUlZBTFVFMF9HKHRpbWVyX3ZhbHVlXzBfYW5kXzEpKTsKIAlzZ2UtPnRpbWVyX3ZhbFsxXSA9ICh1aW50MTZfdCljc2lvX2NvcmVfdGlja3NfdG9fdXMoaHcsCi0JCQkJCVRJTUVSVkFMVUUxX0dFVCh0aW1lcl92YWx1ZV8wX2FuZF8xKSk7CisJCQkJCVRJTUVSVkFMVUUxX0codGltZXJfdmFsdWVfMF9hbmRfMSkpOwogCXNnZS0+dGltZXJfdmFsWzJdID0gKHVpbnQxNl90KWNzaW9fY29yZV90aWNrc190b191cyhodywKLQkJCQkJVElNRVJWQUxVRTJfR0VUKHRpbWVyX3ZhbHVlXzJfYW5kXzMpKTsKKwkJCQkJVElNRVJWQUxVRTJfRyh0aW1lcl92YWx1ZV8yX2FuZF8zKSk7CiAJc2dlLT50aW1lcl92YWxbM10gPSAodWludDE2X3QpY3Npb19jb3JlX3RpY2tzX3RvX3VzKGh3LAotCQkJCQlUSU1FUlZBTFVFM19HRVQodGltZXJfdmFsdWVfMl9hbmRfMykpOworCQkJCQlUSU1FUlZBTFVFM19HKHRpbWVyX3ZhbHVlXzJfYW5kXzMpKTsKIAlzZ2UtPnRpbWVyX3ZhbFs0XSA9ICh1aW50MTZfdCljc2lvX2NvcmVfdGlja3NfdG9fdXMoaHcsCi0JCQkJCVRJTUVSVkFMVUU0X0dFVCh0aW1lcl92YWx1ZV80X2FuZF81KSk7CisJCQkJCVRJTUVSVkFMVUU0X0codGltZXJfdmFsdWVfNF9hbmRfNSkpOwogCXNnZS0+dGltZXJfdmFsWzVdID0gKHVpbnQxNl90KWNzaW9fY29yZV90aWNrc190b191cyhodywKLQkJCQkJVElNRVJWQUxVRTVfR0VUKHRpbWVyX3ZhbHVlXzRfYW5kXzUpKTsKKwkJCQkJVElNRVJWQUxVRTVfRyh0aW1lcl92YWx1ZV80X2FuZF81KSk7CiAKLQlpbmdyZXNzX3J4X3RocmVzaG9sZCA9IGNzaW9fcmRfcmVnMzIoaHcsIFNHRV9JTkdSRVNTX1JYX1RIUkVTSE9MRCk7Ci0Jc2dlLT5jb3VudGVyX3ZhbFswXSA9IFRIUkVTSE9MRF8wX0dFVChpbmdyZXNzX3J4X3RocmVzaG9sZCk7Ci0Jc2dlLT5jb3VudGVyX3ZhbFsxXSA9IFRIUkVTSE9MRF8xX0dFVChpbmdyZXNzX3J4X3RocmVzaG9sZCk7Ci0Jc2dlLT5jb3VudGVyX3ZhbFsyXSA9IFRIUkVTSE9MRF8yX0dFVChpbmdyZXNzX3J4X3RocmVzaG9sZCk7Ci0Jc2dlLT5jb3VudGVyX3ZhbFszXSA9IFRIUkVTSE9MRF8zX0dFVChpbmdyZXNzX3J4X3RocmVzaG9sZCk7CisJaW5ncmVzc19yeF90aHJlc2hvbGQgPSBjc2lvX3JkX3JlZzMyKGh3LCBTR0VfSU5HUkVTU19SWF9USFJFU0hPTERfQSk7CisJc2dlLT5jb3VudGVyX3ZhbFswXSA9IFRIUkVTSE9MRF8wX0coaW5ncmVzc19yeF90aHJlc2hvbGQpOworCXNnZS0+Y291bnRlcl92YWxbMV0gPSBUSFJFU0hPTERfMV9HKGluZ3Jlc3NfcnhfdGhyZXNob2xkKTsKKwlzZ2UtPmNvdW50ZXJfdmFsWzJdID0gVEhSRVNIT0xEXzJfRyhpbmdyZXNzX3J4X3RocmVzaG9sZCk7CisJc2dlLT5jb3VudGVyX3ZhbFszXSA9IFRIUkVTSE9MRF8zX0coaW5ncmVzc19yeF90aHJlc2hvbGQpOwogCiAJY3Npb19pbml0X2ludHJfY29hbGVzY2VfcGFybXMoaHcpOwogfQpAQCAtMTQ1NCw5ICsxNDU2LDkgQEAKIAkgKiBTZXQgdXAgb3VyIGJhc2ljIFNHRSBtb2RlIHRvIGRlbGl2ZXIgQ1BMIG1lc3NhZ2VzIHRvIG91ciBJbmdyZXNzCiAJICogUXVldWUgYW5kIFBhY2tldCBEYXRlIHRvIHRoZSBGcmVlIExpc3QuCiAJICovCi0JY3Npb19zZXRfcmVnX2ZpZWxkKGh3LCBTR0VfQ09OVFJPTCwgUlhQS1RDUExNT0RFKDEpLCBSWFBLVENQTE1PREUoMSkpOworCWNzaW9fc2V0X3JlZ19maWVsZChodywgU0dFX0NPTlRST0xfQSwgUlhQS1RDUExNT0RFX0YsIFJYUEtUQ1BMTU9ERV9GKTsKIAotCXNnZS0+c2dlX2NvbnRyb2wgPSBjc2lvX3JkX3JlZzMyKGh3LCBTR0VfQ09OVFJPTCk7CisJc2dlLT5zZ2VfY29udHJvbCA9IGNzaW9fcmRfcmVnMzIoaHcsIFNHRV9DT05UUk9MX0EpOwogCiAJLyogc2dlLT5jc2lvX2ZsX2FsaWduIGlzIHNldCB1cCBieSBjc2lvX3dyX2ZpeHVwX2hvc3RfcGFyYW1zKCkuICovCiAKQEAgLTE0NjQsMjIgKzE0NjYsMjMgQEAKIAkgKiBTZXQgdXAgdG8gZHJvcCBET09SQkVMTCB3cml0ZXMgd2hlbiB0aGUgRE9PUkJFTEwgRklGTyBvdmVyZmxvd3MKIAkgKiBhbmQgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHdoZW4gdGhpcyBvY2N1cnMgc28gd2UgY2FuIHJlY292ZXIuCiAJICovCi0JY3Npb19zZXRfcmVnX2ZpZWxkKGh3LCBTR0VfREJGSUZPX1NUQVRVUywKLQkJICAgSFBfSU5UX1RIUkVTSChIUF9JTlRfVEhSRVNIX01BU0spIHwKLQkJICAgQ1NJT19IV19MUF9JTlRfVEhSRVNIKGh3LCBDU0lPX0hXX01fTFBfSU5UX1RIUkVTSChodykpLAotCQkgICBIUF9JTlRfVEhSRVNIKENTSU9fU0dFX0RCRklGT19JTlRfVEhSRVNIKSB8Ci0JCSAgIENTSU9fSFdfTFBfSU5UX1RIUkVTSChodywgQ1NJT19TR0VfREJGSUZPX0lOVF9USFJFU0gpKTsKKwljc2lvX3NldF9yZWdfZmllbGQoaHcsIFNHRV9EQkZJRk9fU1RBVFVTX0EsCisJCQkgICBMUF9JTlRfVEhSRVNIX1Q1X1YoTFBfSU5UX1RIUkVTSF9UNV9NKSwKKwkJCSAgIExQX0lOVF9USFJFU0hfVDVfVihDU0lPX1NHRV9EQkZJRk9fSU5UX1RIUkVTSCkpOworCWNzaW9fc2V0X3JlZ19maWVsZChodywgU0dFX0RCRklGT19TVEFUVVMyX0EsCisJCQkgICBIUF9JTlRfVEhSRVNIX1Q1X1YoTFBfSU5UX1RIUkVTSF9UNV9NKSwKKwkJCSAgIEhQX0lOVF9USFJFU0hfVDVfVihDU0lPX1NHRV9EQkZJRk9fSU5UX1RIUkVTSCkpOwogCi0JY3Npb19zZXRfcmVnX2ZpZWxkKGh3LCBTR0VfRE9PUkJFTExfQ09OVFJPTCwgRU5BQkxFX0RST1AsCi0JCQkgICBFTkFCTEVfRFJPUCk7CisJY3Npb19zZXRfcmVnX2ZpZWxkKGh3LCBTR0VfRE9PUkJFTExfQ09OVFJPTF9BLCBFTkFCTEVfRFJPUF9GLAorCQkJICAgRU5BQkxFX0RST1BfRik7CiAKIAkvKiBTR0VfRkxfQlVGRkVSX1NJWkUwIGlzIHNldCB1cCBieSBjc2lvX3dyX2ZpeHVwX2hvc3RfcGFyYW1zKCkuICovCiAKIAlDU0lPX1NFVF9GTEJVRl9TSVpFKGh3LCAxLCBDU0lPX1NHRV9GTEJVRl9TSVpFMSk7CiAJY3Npb193cl9yZWczMihodywgKENTSU9fU0dFX0ZMQlVGX1NJWkUyICsgc2dlLT5jc2lvX2ZsX2FsaWduIC0gMSkKLQkJICAgICAgJiB+KHNnZS0+Y3Npb19mbF9hbGlnbiAtIDEpLCBTR0VfRkxfQlVGRkVSX1NJWkUyKTsKKwkJICAgICAgJiB+KHNnZS0+Y3Npb19mbF9hbGlnbiAtIDEpLCBTR0VfRkxfQlVGRkVSX1NJWkUyX0EpOwogCWNzaW9fd3JfcmVnMzIoaHcsIChDU0lPX1NHRV9GTEJVRl9TSVpFMyArIHNnZS0+Y3Npb19mbF9hbGlnbiAtIDEpCi0JCSAgICAgICYgfihzZ2UtPmNzaW9fZmxfYWxpZ24gLSAxKSwgU0dFX0ZMX0JVRkZFUl9TSVpFMyk7CisJCSAgICAgICYgfihzZ2UtPmNzaW9fZmxfYWxpZ24gLSAxKSwgU0dFX0ZMX0JVRkZFUl9TSVpFM19BKTsKIAlDU0lPX1NFVF9GTEJVRl9TSVpFKGh3LCA0LCBDU0lPX1NHRV9GTEJVRl9TSVpFNCk7CiAJQ1NJT19TRVRfRkxCVUZfU0laRShodywgNSwgQ1NJT19TR0VfRkxCVUZfU0laRTUpOwogCUNTSU9fU0VUX0ZMQlVGX1NJWkUoaHcsIDYsIENTSU9fU0dFX0ZMQlVGX1NJWkU2KTsKQEAgLTE1MDIsMjYgKzE1MDUsMjYgQEAKIAlzZ2UtPmNvdW50ZXJfdmFsWzJdID0gQ1NJT19TR0VfSU5UX0NOVF9WQUxfMjsKIAlzZ2UtPmNvdW50ZXJfdmFsWzNdID0gQ1NJT19TR0VfSU5UX0NOVF9WQUxfMzsKIAotCWNzaW9fd3JfcmVnMzIoaHcsIFRIUkVTSE9MRF8wKHNnZS0+Y291bnRlcl92YWxbMF0pIHwKLQkJICAgICAgVEhSRVNIT0xEXzEoc2dlLT5jb3VudGVyX3ZhbFsxXSkgfAotCQkgICAgICBUSFJFU0hPTERfMihzZ2UtPmNvdW50ZXJfdmFsWzJdKSB8Ci0JCSAgICAgIFRIUkVTSE9MRF8zKHNnZS0+Y291bnRlcl92YWxbM10pLAotCQkgICAgICBTR0VfSU5HUkVTU19SWF9USFJFU0hPTEQpOworCWNzaW9fd3JfcmVnMzIoaHcsIFRIUkVTSE9MRF8wX1Yoc2dlLT5jb3VudGVyX3ZhbFswXSkgfAorCQkgICAgICBUSFJFU0hPTERfMV9WKHNnZS0+Y291bnRlcl92YWxbMV0pIHwKKwkJICAgICAgVEhSRVNIT0xEXzJfVihzZ2UtPmNvdW50ZXJfdmFsWzJdKSB8CisJCSAgICAgIFRIUkVTSE9MRF8zX1Yoc2dlLT5jb3VudGVyX3ZhbFszXSksCisJCSAgICAgIFNHRV9JTkdSRVNTX1JYX1RIUkVTSE9MRF9BKTsKIAogCWNzaW9fd3JfcmVnMzIoaHcsCi0JCSAgIFRJTUVSVkFMVUUwKGNzaW9fdXNfdG9fY29yZV90aWNrcyhodywgc2dlLT50aW1lcl92YWxbMF0pKSB8Ci0JCSAgIFRJTUVSVkFMVUUxKGNzaW9fdXNfdG9fY29yZV90aWNrcyhodywgc2dlLT50aW1lcl92YWxbMV0pKSwKLQkJICAgU0dFX1RJTUVSX1ZBTFVFXzBfQU5EXzEpOworCQkgICBUSU1FUlZBTFVFMF9WKGNzaW9fdXNfdG9fY29yZV90aWNrcyhodywgc2dlLT50aW1lcl92YWxbMF0pKSB8CisJCSAgIFRJTUVSVkFMVUUxX1YoY3Npb191c190b19jb3JlX3RpY2tzKGh3LCBzZ2UtPnRpbWVyX3ZhbFsxXSkpLAorCQkgICBTR0VfVElNRVJfVkFMVUVfMF9BTkRfMV9BKTsKIAogCWNzaW9fd3JfcmVnMzIoaHcsCi0JCSAgIFRJTUVSVkFMVUUyKGNzaW9fdXNfdG9fY29yZV90aWNrcyhodywgc2dlLT50aW1lcl92YWxbMl0pKSB8Ci0JCSAgIFRJTUVSVkFMVUUzKGNzaW9fdXNfdG9fY29yZV90aWNrcyhodywgc2dlLT50aW1lcl92YWxbM10pKSwKLQkJICAgU0dFX1RJTUVSX1ZBTFVFXzJfQU5EXzMpOworCQkgICBUSU1FUlZBTFVFMl9WKGNzaW9fdXNfdG9fY29yZV90aWNrcyhodywgc2dlLT50aW1lcl92YWxbMl0pKSB8CisJCSAgIFRJTUVSVkFMVUUzX1YoY3Npb191c190b19jb3JlX3RpY2tzKGh3LCBzZ2UtPnRpbWVyX3ZhbFszXSkpLAorCQkgICBTR0VfVElNRVJfVkFMVUVfMl9BTkRfM19BKTsKIAogCWNzaW9fd3JfcmVnMzIoaHcsCi0JCSAgIFRJTUVSVkFMVUU0KGNzaW9fdXNfdG9fY29yZV90aWNrcyhodywgc2dlLT50aW1lcl92YWxbNF0pKSB8Ci0JCSAgIFRJTUVSVkFMVUU1KGNzaW9fdXNfdG9fY29yZV90aWNrcyhodywgc2dlLT50aW1lcl92YWxbNV0pKSwKLQkJICAgU0dFX1RJTUVSX1ZBTFVFXzRfQU5EXzUpOworCQkgICBUSU1FUlZBTFVFNF9WKGNzaW9fdXNfdG9fY29yZV90aWNrcyhodywgc2dlLT50aW1lcl92YWxbNF0pKSB8CisJCSAgIFRJTUVSVkFMVUU1X1YoY3Npb191c190b19jb3JlX3RpY2tzKGh3LCBzZ2UtPnRpbWVyX3ZhbFs1XSkpLAorCQkgICBTR0VfVElNRVJfVkFMVUVfNF9BTkRfNV9BKTsKIAogCWNzaW9faW5pdF9pbnRyX2NvYWxlc2NlX3Bhcm1zKGh3KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9jeGdiaS9jeGdiNGkvY3hnYjRpLmMgYi9kcml2ZXJzL3Njc2kvY3hnYmkvY3hnYjRpL2N4Z2I0aS5jCmluZGV4IGE4M2QyY2UuLmRkMDBlNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9jeGdiaS9jeGdiNGkvY3hnYjRpLmMKKysrIGIvZHJpdmVycy9zY3NpL2N4Z2JpL2N4Z2I0aS9jeGdiNGkuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgInQ0ZndfYXBpLmgiCiAjaW5jbHVkZSAibDJ0LmgiCiAjaW5jbHVkZSAiY3hnYjRpLmgiCisjaW5jbHVkZSAiY2xpcF90YmwuaCIKIAogc3RhdGljIHVuc2lnbmVkIGludCBkYmdfbGV2ZWw7CiAKQEAgLTcwNCw3ICs3MDUsNyBAQAogCXN0cnVjdCBjcGxfYWN0X2VzdGFibGlzaCAqcmVxID0gKHN0cnVjdCBjcGxfYWN0X2VzdGFibGlzaCAqKXNrYi0+ZGF0YTsKIAl1bnNpZ25lZCBzaG9ydCB0Y3Bfb3B0ID0gbnRvaHMocmVxLT50Y3Bfb3B0KTsKIAl1bnNpZ25lZCBpbnQgdGlkID0gR0VUX1RJRChyZXEpOwotCXVuc2lnbmVkIGludCBhdGlkID0gR0VUX1RJRF9USUQobnRvaGwocmVxLT50b3NfYXRpZCkpOworCXVuc2lnbmVkIGludCBhdGlkID0gVElEX1RJRF9HKG50b2hsKHJlcS0+dG9zX2F0aWQpKTsKIAlzdHJ1Y3QgY3hnYjRfbGxkX2luZm8gKmxsZGkgPSBjeGdiaV9jZGV2X3ByaXYoY2Rldik7CiAJc3RydWN0IHRpZF9pbmZvICp0ID0gbGxkaS0+dGlkczsKIAl1MzIgcmN2X2lzbiA9IGJlMzJfdG9fY3B1KHJlcS0+cmN2X2lzbik7CkBAIC03NTIsMTUgKzc1MywxNSBAQAogCWlmIChjeGdiNGlfcmN2X3dpbiA+IChSQ1ZfQlVGU0laX01BU0sgPDwgMTApKQogCQljc2stPnJjdl93dXAgLT0gY3hnYjRpX3Jjdl93aW4gLSAoUkNWX0JVRlNJWl9NQVNLIDw8IDEwKTsKIAotCWNzay0+YWR2bXNzID0gbGxkaS0+bXR1c1tHRVRfVENQT1BUX01TUyh0Y3Bfb3B0KV0gLSA0MDsKLQlpZiAoR0VUX1RDUE9QVF9UU1RBTVAodGNwX29wdCkpCisJY3NrLT5hZHZtc3MgPSBsbGRpLT5tdHVzW1RDUE9QVF9NU1NfRyh0Y3Bfb3B0KV0gLSA0MDsKKwlpZiAoVENQT1BUX1RTVEFNUF9HKHRjcF9vcHQpKQogCQljc2stPmFkdm1zcyAtPSAxMjsKIAlpZiAoY3NrLT5hZHZtc3MgPCAxMjgpCiAJCWNzay0+YWR2bXNzID0gMTI4OwogCiAJbG9nX2RlYnVnKDEgPDwgQ1hHQklfREJHX1RPRSB8IDEgPDwgQ1hHQklfREJHX1NPQ0ssCiAJCSJjc2sgMHglcCwgbXNzX2lkeCAldSwgYWR2bXNzICV1LlxuIiwKLQkJCWNzaywgR0VUX1RDUE9QVF9NU1ModGNwX29wdCksIGNzay0+YWR2bXNzKTsKKwkJCWNzaywgVENQT1BUX01TU19HKHRjcF9vcHQpLCBjc2stPmFkdm1zcyk7CiAKIAljeGdiaV9zb2NrX2VzdGFibGlzaGVkKGNzaywgbnRvaGwocmVxLT5zbmRfaXNuKSwgbnRvaHMocmVxLT50Y3Bfb3B0KSk7CiAKQEAgLTg1Niw4ICs4NTcsOCBAQAogCXN0cnVjdCBjcGxfYWN0X29wZW5fcnBsICpycGwgPSAoc3RydWN0IGNwbF9hY3Rfb3Blbl9ycGwgKilza2ItPmRhdGE7CiAJdW5zaWduZWQgaW50IHRpZCA9IEdFVF9USUQocnBsKTsKIAl1bnNpZ25lZCBpbnQgYXRpZCA9Ci0JCUdFVF9USURfVElEKEdFVF9BT1BFTl9BVElEKGJlMzJfdG9fY3B1KHJwbC0+YXRpZF9zdGF0dXMpKSk7Ci0JdW5zaWduZWQgaW50IHN0YXR1cyA9IEdFVF9BT1BFTl9TVEFUVVMoYmUzMl90b19jcHUocnBsLT5hdGlkX3N0YXR1cykpOworCQlUSURfVElEX0coQU9QRU5fQVRJRF9HKGJlMzJfdG9fY3B1KHJwbC0+YXRpZF9zdGF0dXMpKSk7CisJdW5zaWduZWQgaW50IHN0YXR1cyA9IEFPUEVOX1NUQVRVU19HKGJlMzJfdG9fY3B1KHJwbC0+YXRpZF9zdGF0dXMpKTsKIAlzdHJ1Y3QgY3hnYjRfbGxkX2luZm8gKmxsZGkgPSBjeGdiaV9jZGV2X3ByaXYoY2Rldik7CiAJc3RydWN0IHRpZF9pbmZvICp0ID0gbGxkaS0+dGlkczsKIApAQCAtMTExMiw3ICsxMTEzLDcgQEAKIAkJaGxlbiA9IG50b2hzKGNwbC0+bGVuKTsKIAkJZGxlbiA9IG50b2hsKCoodW5zaWduZWQgaW50ICopKGJocyArIDQpKSAmIDB4RkZGRkZGOwogCi0JCXBsZW4gPSBJU0NTSV9QRFVfTEVOKHBkdV9sZW5fZGRwKTsKKwkJcGxlbiA9IElTQ1NJX1BEVV9MRU5fRyhwZHVfbGVuX2RkcCk7CiAJCWlmIChpc190NChsbGRpLT5hZGFwdGVyX3R5cGUpKQogCQkJcGxlbiAtPSA0MDsKIApAQCAtMTMyMiw2ICsxMzIzLDkgQEAKIHN0YXRpYyB2b2lkIHJlbGVhc2Vfb2ZmbG9hZF9yZXNvdXJjZXMoc3RydWN0IGN4Z2JpX3NvY2sgKmNzaykKIHsKIAlzdHJ1Y3QgY3hnYjRfbGxkX2luZm8gKmxsZGk7CisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGNzay0+Y2Rldi0+cG9ydHNbY3NrLT5wb3J0X2lkXTsKKyNlbmRpZgogCiAJbG9nX2RlYnVnKDEgPDwgQ1hHQklfREJHX1RPRSB8IDEgPDwgQ1hHQklfREJHX1NPQ0ssCiAJCSJjc2sgMHglcCwldSwweCVseCwldS5cbiIsCkBAIC0xMzM0LDYgKzEzMzgsMTIgQEAKIAl9CiAKIAlsMnRfcHV0KGNzayk7CisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKKwlpZiAoY3NrLT5jc2tfZmFtaWx5ID09IEFGX0lORVQ2KQorCQljeGdiNF9jbGlwX3JlbGVhc2UobmRldiwKKwkJCQkgICAoY29uc3QgdTMyICopJmNzay0+c2FkZHI2LnNpbjZfYWRkciwgMSk7CisjZW5kaWYKKwogCWlmIChjeGdiaV9zb2NrX2ZsYWcoY3NrLCBDVFBGX0hBU19BVElEKSkKIAkJZnJlZV9hdGlkKGNzayk7CiAJZWxzZSBpZiAoY3hnYmlfc29ja19mbGFnKGNzaywgQ1RQRl9IQVNfVElEKSkgewpAQCAtMTM5MSwxMCArMTQwMSwxNSBAQAogCWNzay0+bDJ0ID0gY3hnYjRfbDJ0X2dldChsbGRpLT5sMnQsIG4sIG5kZXYsIDApOwogCWlmICghY3NrLT5sMnQpIHsKIAkJcHJfZXJyKCIlcywgY2Fubm90IGFsbG9jIGwydC5cbiIsIG5kZXYtPm5hbWUpOwotCQlnb3RvIHJlbF9yZXNvdXJjZTsKKwkJZ290byByZWxfcmVzb3VyY2Vfd2l0aG91dF9jbGlwOwogCX0KIAljeGdiaV9zb2NrX2dldChjc2spOwogCisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKKwlpZiAoY3NrLT5jc2tfZmFtaWx5ID09IEFGX0lORVQ2KQorCQljeGdiNF9jbGlwX2dldChuZGV2LCAoY29uc3QgdTMyICopJmNzay0+c2FkZHI2LnNpbjZfYWRkciwgMSk7CisjZW5kaWYKKwogCWlmICh0NCkgewogCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBjcGxfYWN0X29wZW5fcmVxKTsKIAkJc2l6ZTYgPSBzaXplb2Yoc3RydWN0IGNwbF9hY3Rfb3Blbl9yZXE2KTsKQEAgLTE0NTEsNiArMTQ2NiwxMiBAQAogCXJldHVybiAwOwogCiByZWxfcmVzb3VyY2U6CisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKKwlpZiAoY3NrLT5jc2tfZmFtaWx5ID09IEFGX0lORVQ2KQorCQljeGdiNF9jbGlwX3JlbGVhc2UobmRldiwKKwkJCQkgICAoY29uc3QgdTMyICopJmNzay0+c2FkZHI2LnNpbjZfYWRkciwgMSk7CisjZW5kaWYKK3JlbF9yZXNvdXJjZV93aXRob3V0X2NsaXA6CiAJaWYgKG4pCiAJCW5laWdoX3JlbGVhc2Uobik7CiAJaWYgKHNrYikKQEAgLTE2MTksNyArMTY0MCw3IEBACiAJcmVxID0gKHN0cnVjdCBjcGxfc2V0X3RjYl9maWVsZCAqKXNrYi0+aGVhZDsKIAlJTklUX1RQX1dSKHJlcSwgY3NrLT50aWQpOwogCU9QQ09ERV9USUQocmVxKSA9IGh0b25sKE1LX09QQ09ERV9USUQoQ1BMX1NFVF9UQ0JfRklFTEQsIGNzay0+dGlkKSk7Ci0JcmVxLT5yZXBseV9jdHJsID0gaHRvbnMoTk9fUkVQTFkocmVwbHkpIHwgUVVFVUVOTyhjc2stPnJzc19xaWQpKTsKKwlyZXEtPnJlcGx5X2N0cmwgPSBodG9ucyhOT19SRVBMWV9WKHJlcGx5KSB8IFFVRVVFTk9fVihjc2stPnJzc19xaWQpKTsKIAlyZXEtPndvcmRfY29va2llID0gaHRvbnMoMCk7CiAJcmVxLT5tYXNrID0gY3B1X3RvX2JlNjQoMHgzIDw8IDgpOwogCXJlcS0+dmFsID0gY3B1X3RvX2JlNjQocGdfaWR4IDw8IDgpOwpAQCAtMTY1MSw3ICsxNjcyLDcgQEAKIAlyZXEgPSAoc3RydWN0IGNwbF9zZXRfdGNiX2ZpZWxkICopc2tiLT5oZWFkOwogCUlOSVRfVFBfV1IocmVxLCB0aWQpOwogCU9QQ09ERV9USUQocmVxKSA9IGh0b25sKE1LX09QQ09ERV9USUQoQ1BMX1NFVF9UQ0JfRklFTEQsIHRpZCkpOwotCXJlcS0+cmVwbHlfY3RybCA9IGh0b25zKE5PX1JFUExZKHJlcGx5KSB8IFFVRVVFTk8oY3NrLT5yc3NfcWlkKSk7CisJcmVxLT5yZXBseV9jdHJsID0gaHRvbnMoTk9fUkVQTFlfVihyZXBseSkgfCBRVUVVRU5PX1YoY3NrLT5yc3NfcWlkKSk7CiAJcmVxLT53b3JkX2Nvb2tpZSA9IGh0b25zKDApOwogCXJlcS0+bWFzayA9IGNwdV90b19iZTY0KDB4MyA8PCA0KTsKIAlyZXEtPnZhbCA9IGNwdV90b19iZTY0KCgoaGNyYyA/IFVMUF9DUkNfSEVBREVSIDogMCkgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RjMzk1eC5jIGIvZHJpdmVycy9zY3NpL2RjMzk1eC5jCmluZGV4IDBjNmJlMGEuLjVlZTdmNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9kYzM5NXguYworKysgYi9kcml2ZXJzL3Njc2kvZGMzOTV4LmMKQEAgLTQ2MTAsMTMgKzQ2MTAsMTAgQEAKIH0KIAogCi0jdW5kZWYgU1BSSU5URgotI2RlZmluZSBTUFJJTlRGKGFyZ3MuLi4pIHNlcV9wcmludGYobSwjI2FyZ3MpCi0KICN1bmRlZiBZRVNOTwogI2RlZmluZSBZRVNOTyhZTikgXAotIGlmIChZTikgU1BSSU5URigiIFllcyAiKTtcCi0gZWxzZSBTUFJJTlRGKCIgTm8gICIpCisgaWYgKFlOKSBzZXFfcHJpbnRmKG0sICIgWWVzICIpO1wKKyBlbHNlIHNlcV9wcmludGYobSwgIiBObyAgIikKIAogc3RhdGljIGludCBkYzM5NXhfc2hvd19pbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKIHsKQEAgLTQ2MjYsNDcgKzQ2MjMsNDUgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBkZXY7CiAKLQlTUFJJTlRGKERDMzk1WF9CQU5ORVIgIiBQQ0kgU0NTSSBIb3N0IEFkYXB0ZXJcbiIpOwotCVNQUklOVEYoIiBEcml2ZXIgVmVyc2lvbiAiIERDMzk1WF9WRVJTSU9OICJcbiIpOworCXNlcV9wdXRzKG0sIERDMzk1WF9CQU5ORVIgIiBQQ0kgU0NTSSBIb3N0IEFkYXB0ZXJcbiIKKwkJIiBEcml2ZXIgVmVyc2lvbiAiIERDMzk1WF9WRVJTSU9OICJcbiIpOwogCiAJREMzOTV4X0xPQ0tfSU8oYWNiLT5zY3NpX2hvc3QsIGZsYWdzKTsKIAotCVNQUklOVEYoIlNDU0kgSG9zdCBOciAlaSwgIiwgaG9zdC0+aG9zdF9ubyk7Ci0JU1BSSU5URigiREMzOTVVL1VXL0YgREMzMTUvVSAlc1xuIiwKKwlzZXFfcHJpbnRmKG0sICJTQ1NJIEhvc3QgTnIgJWksICIsIGhvc3QtPmhvc3Rfbm8pOworCXNlcV9wcmludGYobSwgIkRDMzk1VS9VVy9GIERDMzE1L1UgJXNcbiIsCiAJCShhY2ItPmNvbmZpZyAmIEhDQ19XSURFX0NBUkQpID8gIldpZGUiIDogIiIpOwotCVNQUklOVEYoImlvX3BvcnRfYmFzZSAweCUwNGx4LCAiLCBhY2ItPmlvX3BvcnRfYmFzZSk7Ci0JU1BSSU5URigiaXJxX2xldmVsIDB4JTA0eCwgIiwgYWNiLT5pcnFfbGV2ZWwpOwotCVNQUklOVEYoIiBTZWxUaW1lb3V0ICVpbXNcbiIsICgxNjM4ICogYWNiLT5zZWxfdGltZW91dCkgLyAxMDAwKTsKKwlzZXFfcHJpbnRmKG0sICJpb19wb3J0X2Jhc2UgMHglMDRseCwgIiwgYWNiLT5pb19wb3J0X2Jhc2UpOworCXNlcV9wcmludGYobSwgImlycV9sZXZlbCAweCUwNHgsICIsIGFjYi0+aXJxX2xldmVsKTsKKwlzZXFfcHJpbnRmKG0sICIgU2VsVGltZW91dCAlaW1zXG4iLCAoMTYzOCAqIGFjYi0+c2VsX3RpbWVvdXQpIC8gMTAwMCk7CiAKLQlTUFJJTlRGKCJNYXhJRCAlaSwgTWF4TFVOICVsbHUsICIsIGhvc3QtPm1heF9pZCwgaG9zdC0+bWF4X2x1bik7Ci0JU1BSSU5URigiQWRhcHRlcklEICVpXG4iLCBob3N0LT50aGlzX2lkKTsKKwlzZXFfcHJpbnRmKG0sICJNYXhJRCAlaSwgTWF4TFVOICVsbHUsICIsIGhvc3QtPm1heF9pZCwgaG9zdC0+bWF4X2x1bik7CisJc2VxX3ByaW50ZihtLCAiQWRhcHRlcklEICVpXG4iLCBob3N0LT50aGlzX2lkKTsKIAotCVNQUklOVEYoInRhZ19tYXhfbnVtICVpIiwgYWNiLT50YWdfbWF4X251bSk7Ci0JLypTUFJJTlRGKCIsIERNQV9TdGF0dXMgJWlcbiIsIERDMzk1eF9yZWFkOChhY2IsIFRSTV9TMTA0MF9ETUFfU1RBVFVTKSk7ICovCi0JU1BSSU5URigiLCBGaWx0ZXJDZmcgMHglMDJ4IiwKKwlzZXFfcHJpbnRmKG0sICJ0YWdfbWF4X251bSAlaSIsIGFjYi0+dGFnX21heF9udW0pOworCS8qc2VxX3ByaW50ZihtLCAiLCBETUFfU3RhdHVzICVpXG4iLCBEQzM5NXhfcmVhZDgoYWNiLCBUUk1fUzEwNDBfRE1BX1NUQVRVUykpOyAqLworCXNlcV9wcmludGYobSwgIiwgRmlsdGVyQ2ZnIDB4JTAyeCIsCiAJCURDMzk1eF9yZWFkOChhY2IsIFRSTV9TMTA0MF9TQ1NJX0NPTkZJRzEpKTsKLQlTUFJJTlRGKCIsIERlbGF5UmVzZXQgJWlzXG4iLCBhY2ItPmVlcHJvbS5kZWxheV90aW1lKTsKLQkvKlNQUklOVEYoIlxuIik7ICovCisJc2VxX3ByaW50ZihtLCAiLCBEZWxheVJlc2V0ICVpc1xuIiwgYWNiLT5lZXByb20uZGVsYXlfdGltZSk7CisJLypzZXFfcHJpbnRmKG0sICJcbiIpOyAqLwogCi0JU1BSSU5URigiTnIgb2YgRENCczogJWlcbiIsIGxpc3Rfc2l6ZSgmYWNiLT5kY2JfbGlzdCkpOwotCVNQUklOVEYKLQkgICAgKCJNYXAgb2YgYXR0YWNoZWQgTFVOczogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAorCXNlcV9wcmludGYobSwgIk5yIG9mIERDQnM6ICVpXG4iLCBsaXN0X3NpemUoJmFjYi0+ZGNiX2xpc3QpKTsKKwlzZXFfcHJpbnRmKG0sICJNYXAgb2YgYXR0YWNoZWQgTFVOczogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLAogCSAgICAgYWNiLT5kY2JfbWFwWzBdLCBhY2ItPmRjYl9tYXBbMV0sIGFjYi0+ZGNiX21hcFsyXSwKIAkgICAgIGFjYi0+ZGNiX21hcFszXSwgYWNiLT5kY2JfbWFwWzRdLCBhY2ItPmRjYl9tYXBbNV0sCiAJICAgICBhY2ItPmRjYl9tYXBbNl0sIGFjYi0+ZGNiX21hcFs3XSk7Ci0JU1BSSU5URgotCSAgICAoIiAgICAgICAgICAgICAgICAgICAgICAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCisJc2VxX3ByaW50ZihtLCAiICAgICAgICAgICAgICAgICAgICAgICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKIAkgICAgIGFjYi0+ZGNiX21hcFs4XSwgYWNiLT5kY2JfbWFwWzldLCBhY2ItPmRjYl9tYXBbMTBdLAogCSAgICAgYWNiLT5kY2JfbWFwWzExXSwgYWNiLT5kY2JfbWFwWzEyXSwgYWNiLT5kY2JfbWFwWzEzXSwKIAkgICAgIGFjYi0+ZGNiX21hcFsxNF0sIGFjYi0+ZGNiX21hcFsxNV0pOwogCi0JU1BSSU5URgotCSAgICAoIlVuIElEIExVTiBQcnR5IFN5bmMgV2lkZSBEc0NuIFNuZFMgVGFnUSBuZWdvX3BlcmlvZCBTeW5jRnJlcSBTeW5jT2ZmcyBNYXhDbWRcbiIpOworCXNlcV9wdXRzKG0sCisJCSAiVW4gSUQgTFVOIFBydHkgU3luYyBXaWRlIERzQ24gU25kUyBUYWdRIG5lZ29fcGVyaW9kIFN5bmNGcmVxIFN5bmNPZmZzIE1heENtZFxuIik7CiAKIAlkZXYgPSAwOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGNiLCAmYWNiLT5kY2JfbGlzdCwgbGlzdCkgewogCQlpbnQgbmVnb19wZXJpb2Q7Ci0JCVNQUklOVEYoIiUwMmkgJTAyaSAgJTAyaSAiLCBkZXYsIGRjYi0+dGFyZ2V0X2lkLAorCQlzZXFfcHJpbnRmKG0sICIlMDJpICUwMmkgICUwMmkgIiwgZGV2LCBkY2ItPnRhcmdldF9pZCwKIAkJCWRjYi0+dGFyZ2V0X2x1bik7CiAJCVlFU05PKGRjYi0+ZGV2X21vZGUgJiBOVENfRE9fUEFSSVRZX0NISyk7CiAJCVlFU05PKGRjYi0+c3luY19vZmZzZXQpOwpAQCAtNDY3Niw1MyArNDY3MSw1MyBAQAogCQlZRVNOTyhkY2ItPnN5bmNfbW9kZSAmIEVOX1RBR19RVUVVRUlORyk7CiAJCW5lZ29fcGVyaW9kID0gY2xvY2tfcGVyaW9kW2RjYi0+c3luY19wZXJpb2QgJiAweDA3XSA8PCAyOwogCQlpZiAoZGNiLT5zeW5jX29mZnNldCkKLQkJCVNQUklOVEYoIiAgJTAzaSBucyAiLCBuZWdvX3BlcmlvZCk7CisJCQlzZXFfcHJpbnRmKG0sICIgICUwM2kgbnMgIiwgbmVnb19wZXJpb2QpOwogCQllbHNlCi0JCQlTUFJJTlRGKCIgKCUwM2kgbnMpIiwgKGRjYi0+bWluX25lZ29fcGVyaW9kIDw8IDIpKTsKKwkJCXNlcV9wcmludGYobSwgIiAoJTAzaSBucykiLCAoZGNiLT5taW5fbmVnb19wZXJpb2QgPDwgMikpOwogCiAJCWlmIChkY2ItPnN5bmNfb2Zmc2V0ICYgMHgwZikgewogCQkJc3BkID0gMTAwMCAvIChuZWdvX3BlcmlvZCk7CiAJCQlzcGQxID0gMTAwMCAlIChuZWdvX3BlcmlvZCk7CiAJCQlzcGQxID0gKHNwZDEgKiAxMCArIG5lZ29fcGVyaW9kIC8gMikgLyAobmVnb19wZXJpb2QpOwotCQkJU1BSSU5URigiICAgJTJpLiUxaSBNICAgICAlMDJpICIsIHNwZCwgc3BkMSwKKwkJCXNlcV9wcmludGYobSwgIiAgICUyaS4lMWkgTSAgICAgJTAyaSAiLCBzcGQsIHNwZDEsCiAJCQkJKGRjYi0+c3luY19vZmZzZXQgJiAweDBmKSk7CiAJCX0gZWxzZQotCQkJU1BSSU5URigiICAgICAgICAgICAgICAgICAiKTsKKwkJCXNlcV9wdXRzKG0sICIgICAgICAgICAgICAgICAgICIpOwogCiAJCS8qIEFkZCBtb3JlIGluZm8gLi4uICovCi0JCVNQUklOVEYoIiAgICAgJTAyaVxuIiwgZGNiLT5tYXhfY29tbWFuZCk7CisJCXNlcV9wcmludGYobSwgIiAgICAgJTAyaVxuIiwgZGNiLT5tYXhfY29tbWFuZCk7CiAJCWRldisrOwogCX0KIAogCWlmICh0aW1lcl9wZW5kaW5nKCZhY2ItPndhaXRpbmdfdGltZXIpKQotCQlTUFJJTlRGKCJXYWl0aW5nIHF1ZXVlIHRpbWVyIHJ1bm5pbmdcbiIpOworCQlzZXFfcHV0cyhtLCAiV2FpdGluZyBxdWV1ZSB0aW1lciBydW5uaW5nXG4iKTsKIAllbHNlCi0JCVNQUklOVEYoIlxuIik7CisJCXNlcV9wdXRjKG0sICdcbicpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkY2IsICZhY2ItPmRjYl9saXN0LCBsaXN0KSB7CiAJCXN0cnVjdCBTY3NpUmVxQmxrICpzcmI7CiAJCWlmICghbGlzdF9lbXB0eSgmZGNiLT5zcmJfd2FpdGluZ19saXN0KSkKLQkJCVNQUklOVEYoIkRDQiAoJTAyaS0laSk6IFdhaXRpbmc6ICVpOiIsCisJCQlzZXFfcHJpbnRmKG0sICJEQ0IgKCUwMmktJWkpOiBXYWl0aW5nOiAlaToiLAogCQkJCWRjYi0+dGFyZ2V0X2lkLCBkY2ItPnRhcmdldF9sdW4sCiAJCQkJbGlzdF9zaXplKCZkY2ItPnNyYl93YWl0aW5nX2xpc3QpKTsKICAgICAgICAgICAgICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHNyYiwgJmRjYi0+c3JiX3dhaXRpbmdfbGlzdCwgbGlzdCkKLQkJCVNQUklOVEYoIiAlcCIsIHNyYi0+Y21kKTsKKwkJCXNlcV9wcmludGYobSwgIiAlcCIsIHNyYi0+Y21kKTsKIAkJaWYgKCFsaXN0X2VtcHR5KCZkY2ItPnNyYl9nb2luZ19saXN0KSkKLQkJCVNQUklOVEYoIlxuRENCICglMDJpLSVpKTogR29pbmcgIDogJWk6IiwKKwkJCXNlcV9wcmludGYobSwgIlxuRENCICglMDJpLSVpKTogR29pbmcgIDogJWk6IiwKIAkJCQlkY2ItPnRhcmdldF9pZCwgZGNiLT50YXJnZXRfbHVuLAogCQkJCWxpc3Rfc2l6ZSgmZGNiLT5zcmJfZ29pbmdfbGlzdCkpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNyYiwgJmRjYi0+c3JiX2dvaW5nX2xpc3QsIGxpc3QpCi0JCQlTUFJJTlRGKCIgJXAiLCBzcmItPmNtZCk7CisJCQlzZXFfcHJpbnRmKG0sICIgJXAiLCBzcmItPmNtZCk7CiAJCWlmICghbGlzdF9lbXB0eSgmZGNiLT5zcmJfd2FpdGluZ19saXN0KSB8fCAhbGlzdF9lbXB0eSgmZGNiLT5zcmJfZ29pbmdfbGlzdCkpCi0JCQlTUFJJTlRGKCJcbiIpOworCQkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJfQogCiAJaWYgKGRlYnVnX2VuYWJsZWQoREJHXzEpKSB7Ci0JCVNQUklOVEYoIkRDQiBsaXN0IGZvciBBQ0IgJXA6XG4iLCBhY2IpOworCQlzZXFfcHJpbnRmKG0sICJEQ0IgbGlzdCBmb3IgQUNCICVwOlxuIiwgYWNiKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShkY2IsICZhY2ItPmRjYl9saXN0LCBsaXN0KSB7Ci0JCQlTUFJJTlRGKCIlcCAtPiAiLCBkY2IpOworCQkJc2VxX3ByaW50ZihtLCAiJXAgLT4gIiwgZGNiKTsKIAkJfQotCQlTUFJJTlRGKCJFTkRcbiIpOworCQlzZXFfcHV0cyhtLCAiRU5EXG4iKTsKIAl9CiAKIAlEQzM5NXhfVU5MT0NLX0lPKGFjYi0+c2NzaV9ob3N0LCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGguYwppbmRleCAxZGJhNjJjLi4xZWZlYmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoLmMKQEAgLTEzNiwxMSArMTM2LDEyIEBACiAJc3RydWN0IHNjc2lfZGV2aWNlX2hhbmRsZXIgKnNjc2lfZGggPSBzY3NpX2RoX2RhdGEtPnNjc2lfZGg7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2ID0gc2NzaV9kaF9kYXRhLT5zZGV2OwogCisJc2NzaV9kaC0+ZGV0YWNoKHNkZXYpOworCiAJc3Bpbl9sb2NrX2lycShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKIAlzZGV2LT5zY3NpX2RoX2RhdGEgPSBOVUxMOwogCXNwaW5fdW5sb2NrX2lycShzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKIAotCXNjc2lfZGgtPmRldGFjaChzZGV2KTsKIAlzZGV2X3ByaW50ayhLRVJOX05PVElDRSwgc2RldiwgIiVzOiBEZXRhY2hlZFxuIiwgc2NzaV9kaC0+bmFtZSk7CiAJbW9kdWxlX3B1dChzY3NpX2RoLT5tb2R1bGUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2RwdF9pMm8uYyBiL2RyaXZlcnMvc2NzaS9kcHRfaTJvLmMKaW5kZXggMGJmOTc2OS4uMjgwNmNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RwdF9pMm8uYworKysgYi9kcml2ZXJzL3Njc2kvZHB0X2kyby5jCkBAIC01NjgsNyArNTY4LDcgQEAKIAlzZXFfcHJpbnRmKG0sICJcdHBvc3QgZmlmbyBzaXplICA9ICVkXG5cdHJlcGx5IGZpZm8gc2l6ZSA9ICVkXG5cdHNnIHRhYmxlIHNpemUgICA9ICVkXG5cbiIsCiAJCQlob3N0LT5jYW5fcXVldWUsIChpbnQpIHBIYmEtPnJlcGx5X2ZpZm9fc2l6ZSAsIGhvc3QtPnNnX3RhYmxlc2l6ZSk7CiAKLQlzZXFfcHJpbnRmKG0sICJEZXZpY2VzOlxuIik7CisJc2VxX3B1dHMobSwgIkRldmljZXM6XG4iKTsKIAlmb3IoY2hhbiA9IDA7IGNoYW4gPCBNQVhfQ0hBTk5FTDsgY2hhbisrKSB7CiAJCWZvcihpZCA9IDA7IGlkIDwgTUFYX0lEOyBpZCsrKSB7CiAJCQlkID0gcEhiYS0+Y2hhbm5lbFtjaGFuXS5kZXZpY2VbaWRdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VhdGFfcGlvLmMgYi9kcml2ZXJzL3Njc2kvZWF0YV9waW8uYwppbmRleCA4MzE5ZDJiLi5jYTgwMDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZWF0YV9waW8uYworKysgYi9kcml2ZXJzL3Njc2kvZWF0YV9waW8uYwpAQCAtMTAyLDcgKzEwMiw3IEBACiAJCSAgIHNob3N0LT5ob3N0X25vLCBTRChzaG9zdCktPm5hbWUpOwogCXNlcV9wcmludGYobSwgIkZpcm13YXJlIHJldmlzaW9uOiB2JXNcbiIsCiAJCSAgIFNEKHNob3N0KS0+cmV2aXNpb24pOwotCXNlcV9wcmludGYobSwgIklPOiBQSU9cbiIpOworCXNlcV9wdXRzKG0sICJJTzogUElPXG4iKTsKIAlzZXFfcHJpbnRmKG0sICJCYXNlIElPIDogJSMuNHhcbiIsICh1MzIpIHNob3N0LT5iYXNlKTsKIAlzZXFfcHJpbnRmKG0sICJIb3N0IEJ1czogJXNcbiIsCiAJCSAgIChTRChzaG9zdCktPmJ1c3R5cGUgPT0gJ1AnKT8iUENJICI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZXNhczJyL2VzYXMycl9pbml0LmMgYi9kcml2ZXJzL3Njc2kvZXNhczJyL2VzYXMycl9pbml0LmMKaW5kZXggNjc3NjkzMS4uNzhjZTRkNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9lc2FzMnIvZXNhczJyX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvZXNhczJyL2VzYXMycl9pbml0LmMKQEAgLTgxMywxMiArODEzLDEzIEBACiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGEtPnBjaWQsIHBjaWVfY2FwX3JlZyArIFBDSV9FWFBfREVWQ1RMLAogCQkJCSAgICAgJmRldmNvbnRyb2wpOwogCi0JCWlmICgoZGV2Y29udHJvbCAmIFBDSV9FWFBfREVWQ1RMX1JFQURSUSkgPiAweDIwMDApIHsKKwkJaWYgKChkZXZjb250cm9sICYgUENJX0VYUF9ERVZDVExfUkVBRFJRKSA+CisJCSAgICAgUENJX0VYUF9ERVZDVExfUkVBRFJRXzUxMkIpIHsKIAkJCWVzYXMycl9sb2coRVNBUzJSX0xPR19JTkZPLAogCQkJCSAgICJtYXggcmVhZCByZXF1ZXN0IHNpemUgPiA1MTJCIik7CiAKIAkJCWRldmNvbnRyb2wgJj0gflBDSV9FWFBfREVWQ1RMX1JFQURSUTsKLQkJCWRldmNvbnRyb2wgfD0gMHgyMDAwOworCQkJZGV2Y29udHJvbCB8PSBQQ0lfRVhQX0RFVkNUTF9SRUFEUlFfNTEyQjsKIAkJCXBjaV93cml0ZV9jb25maWdfd29yZChhLT5wY2lkLAogCQkJCQkgICAgICBwY2llX2NhcF9yZWcgKyBQQ0lfRVhQX0RFVkNUTCwKIAkJCQkJICAgICAgZGV2Y29udHJvbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZXNhczJyL2VzYXMycl9tYWluLmMgYi9kcml2ZXJzL3Njc2kvZXNhczJyL2VzYXMycl9tYWluLmMKaW5kZXggN2UxYzIxZS4uMzFmODk2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VzYXMyci9lc2FzMnJfbWFpbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9lc2FzMnIvZXNhczJyX21haW4uYwpAQCAtNzQ5LDcgKzc0OSw3IEBACiAJaWYgKGRldl9jb3VudCA9PSAwKQogCQlzZXFfcHV0cyhtLCAibm9uZVxuIik7CiAKLQlzZXFfcHV0cyhtLCAiXG4iKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAlyZXR1cm4gMDsKIAogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2VzcF9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYwppbmRleCBjZTViZDUyLi4wNjViMjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYworKysgYi9kcml2ZXJzL3Njc2kvZXNwX3Njc2kuYwpAQCAtMjM5Niw4ICsyMzk2LDYgQEAKIAogCWlmICghZXNwLT5udW1fdGFncykKIAkJZXNwLT5udW1fdGFncyA9IEVTUF9ERUZBVUxUX1RBR1M7Ci0JZWxzZSBpZiAoZXNwLT5udW1fdGFncyA+PSBFU1BfTUFYX1RBRykKLQkJZXNwLT5udW1fdGFncyA9IEVTUF9NQVhfVEFHIC0gMTsKIAllc3AtPmhvc3QtPnRyYW5zcG9ydHQgPSBlc3BfdHJhbnNwb3J0X3RlbXBsYXRlOwogCWVzcC0+aG9zdC0+bWF4X2x1biA9IEVTUF9NQVhfTFVOOwogCWVzcC0+aG9zdC0+Y21kX3Blcl9sdW4gPSAyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jIGIvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jCmluZGV4IDlmYjYzMjYuLmU2NmU5OTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZ2R0aF9wcm9jLmMKKysrIGIvZHJpdmVycy9zY3NpL2dkdGhfcHJvYy5jCkBAIC0xNzMsNyArMTczLDcgQEAKICAgICAvKiByZXF1ZXN0IGlzIGkuZS4gImNhdCAvcHJvYy9zY3NpL2dkdGgvMCIgKi8gCiAgICAgLyogZm9ybWF0OiAlLTE1c1x0JS0xMHNcdCUtMTVzXHQlcyAqLwogICAgIC8qIGRyaXZlciBwYXJhbWV0ZXJzICovCi0gICAgc2VxX3ByaW50ZihtLCAiRHJpdmVyIFBhcmFtZXRlcnM6XG4iKTsKKyAgICBzZXFfcHV0cyhtLCAiRHJpdmVyIFBhcmFtZXRlcnM6XG4iKTsKICAgICBpZiAocmVzZXJ2ZV9saXN0WzBdID09IDB4ZmYpCiAgICAgICAgIHN0cmNweShocmVjLCAiLS0iKTsKICAgICBlbHNlIHsKQEAgLTE5Miw3ICsxOTIsNyBAQAogICAgICAgICAgICAgICAgICAgIG1heF9pZHMsIGhkcl9jaGFubmVsKTsKIAogICAgIC8qIGNvbnRyb2xsZXIgaW5mb3JtYXRpb24gKi8KLSAgICBzZXFfcHJpbnRmKG0sIlxuRGlzayBBcnJheSBDb250cm9sbGVyIEluZm9ybWF0aW9uOlxuIik7CisgICAgc2VxX3B1dHMobSwgIlxuRGlzayBBcnJheSBDb250cm9sbGVyIEluZm9ybWF0aW9uOlxuIik7CiAgICAgc2VxX3ByaW50ZihtLAogICAgICAgICAgICAgICAgICAgICIgTnVtYmVyOiAgICAgICBcdCVkICAgICAgICAgXHROYW1lOiAgICAgICAgICBcdCVzXG4iLAogICAgICAgICAgICAgICAgICAgIGhhLT5oYW51bSwgaGEtPmJpbmZvLnR5cGVfc3RyaW5nKTsKQEAgLTIxOSw3ICsyMTksNyBAQAogCiAjaWZkZWYgR0RUSF9ETUFfU1RBVElTVElDUwogICAgIC8qIGNvbnRyb2xsZXIgc3RhdGlzdGljcyAqLwotICAgIHNlcV9wcmludGYobSwiXG5Db250cm9sbGVyIFN0YXRpc3RpY3M6XG4iKTsKKyAgICBzZXFfcHV0cyhtLCAiXG5Db250cm9sbGVyIFN0YXRpc3RpY3M6XG4iKTsKICAgICBzZXFfcHJpbnRmKG0sCiAgICAgICAgICAgICAgICAgICAgIiAzMi1iaXQgRE1BIGJ1ZmZlcjpcdCVsdVx0NjQtYml0IERNQSBidWZmZXI6XHQlbHVcbiIsCiAgICAgICAgICAgICAgICAgICAgaGEtPmRtYTMyX2NudCwgaGEtPmRtYTY0X2NudCk7CkBAIC0yMjcsNyArMjI3LDcgQEAKIAogICAgIGlmIChoYS0+bW9yZV9wcm9jKSB7CiAgICAgICAgIC8qIG1vcmUgaW5mb3JtYXRpb246IDIuIGFib3V0IHBoeXNpY2FsIGRldmljZXMgKi8KLSAgICAgICAgc2VxX3ByaW50ZihtLCAiXG5QaHlzaWNhbCBEZXZpY2VzOiIpOworICAgICAgICBzZXFfcHV0cyhtLCAiXG5QaHlzaWNhbCBEZXZpY2VzOiIpOwogICAgICAgICBmbGFnID0gRkFMU0U7CiAgICAgICAgICAgICAKICAgICAgICAgYnVmID0gZ2R0aF9pb2N0bF9hbGxvYyhoYSwgR0RUSF9TQ1JBVENILCBGQUxTRSwgJnBhZGRyKTsKQEAgLTMyNiwxMCArMzI2LDEwIEBACiAgICAgICAgIGdkdGhfaW9jdGxfZnJlZShoYSwgR0RUSF9TQ1JBVENILCBidWYsIHBhZGRyKTsKIAogICAgICAgICBpZiAoIWZsYWcpCi0gICAgICAgICAgICBzZXFfcHJpbnRmKG0sICJcbiAtLVxuIik7CisgICAgICAgICAgICBzZXFfcHV0cyhtLCAiXG4gLS1cbiIpOwogCiAgICAgICAgIC8qIDMuIGFib3V0IGxvZ2ljYWwgZHJpdmVzICovCi0gICAgICAgIHNlcV9wcmludGYobSwiXG5Mb2dpY2FsIERyaXZlczoiKTsKKyAgICAgICAgc2VxX3B1dHMobSwgIlxuTG9naWNhbCBEcml2ZXM6Iik7CiAgICAgICAgIGZsYWcgPSBGQUxTRTsKIAogICAgICAgICBidWYgPSBnZHRoX2lvY3RsX2FsbG9jKGhhLCBHRFRIX1NDUkFUQ0gsIEZBTFNFLCAmcGFkZHIpOwpAQCAtNDExLDEwICs0MTEsMTAgQEAKICAgICAgICAgZ2R0aF9pb2N0bF9mcmVlKGhhLCBHRFRIX1NDUkFUQ0gsIGJ1ZiwgcGFkZHIpOwogICAgICAgICAKICAgICAgICAgaWYgKCFmbGFnKQotICAgICAgICAgICAgc2VxX3ByaW50ZihtLCAiXG4gLS1cbiIpOworICAgICAgICAgICAgc2VxX3B1dHMobSwgIlxuIC0tXG4iKTsKIAogICAgICAgICAvKiA0LiBhYm91dCBhcnJheSBkcml2ZXMgKi8KLSAgICAgICAgc2VxX3ByaW50ZihtLCJcbkFycmF5IERyaXZlczoiKTsKKyAgICAgICAgc2VxX3B1dHMobSwgIlxuQXJyYXkgRHJpdmVzOiIpOwogICAgICAgICBmbGFnID0gRkFMU0U7CiAKICAgICAgICAgYnVmID0gZ2R0aF9pb2N0bF9hbGxvYyhoYSwgR0RUSF9TQ1JBVENILCBGQUxTRSwgJnBhZGRyKTsKQEAgLTQ3MSwxMCArNDcxLDEwIEBACiAgICAgICAgIGdkdGhfaW9jdGxfZnJlZShoYSwgR0RUSF9TQ1JBVENILCBidWYsIHBhZGRyKTsKICAgICAgICAgCiAgICAgICAgIGlmICghZmxhZykKLSAgICAgICAgICAgIHNlcV9wcmludGYobSwgIlxuIC0tXG4iKTsKKyAgICAgICAgICAgIHNlcV9wdXRzKG0sICJcbiAtLVxuIik7CiAKICAgICAgICAgLyogNS4gYWJvdXQgaG9zdCBkcml2ZXMgKi8KLSAgICAgICAgc2VxX3ByaW50ZihtLCJcbkhvc3QgRHJpdmVzOiIpOworICAgICAgICBzZXFfcHV0cyhtLCAiXG5Ib3N0IERyaXZlczoiKTsKICAgICAgICAgZmxhZyA9IEZBTFNFOwogCiAgICAgICAgIGJ1ZiA9IGdkdGhfaW9jdGxfYWxsb2MoaGEsIHNpemVvZihnZHRoX2hnZXRfc3RyKSwgRkFMU0UsICZwYWRkcik7CkBAIC01MjcsMTEgKzUyNywxMSBAQAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIWZsYWcpCi0gICAgICAgICAgICBzZXFfcHJpbnRmKG0sICJcbiAtLVxuIik7CisgICAgICAgICAgICBzZXFfcHV0cyhtLCAiXG4gLS1cbiIpOwogICAgIH0KIAogICAgIC8qIGNvbnRyb2xsZXIgZXZlbnRzICovCi0gICAgc2VxX3ByaW50ZihtLCJcbkNvbnRyb2xsZXIgRXZlbnRzOlxuIik7CisgICAgc2VxX3B1dHMobSwgIlxuQ29udHJvbGxlciBFdmVudHM6XG4iKTsKIAogICAgIGZvciAoaWQgPSAtMTs7KSB7CiAgICAgICAgIGlkID0gZ2R0aF9yZWFkX2V2ZW50KGhhLCBpZCwgZXN0cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHBzYS5jIGIvZHJpdmVycy9zY3NpL2hwc2EuYwppbmRleCA2YmI0NjExLi45NWQ1ODFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHBzYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9ocHNhLmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1LWRlZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAjaW5jbHVkZSAiaHBzYV9jbWQuaCIKICNpbmNsdWRlICJocHNhLmgiCkBAIC01OSw4ICs2MCwxMSBAQAogI2RlZmluZSBEUklWRVJfTkFNRSAiSFAgSFBTQSBEcml2ZXIgKHYgIiBIUFNBX0RSSVZFUl9WRVJTSU9OICIpIgogI2RlZmluZSBIUFNBICJocHNhIgogCi0vKiBIb3cgbG9uZyB0byB3YWl0IChpbiBtaWxsaXNlY29uZHMpIGZvciBib2FyZCB0byBnbyBpbnRvIHNpbXBsZSBtb2RlICovCi0jZGVmaW5lIE1BWF9DT05GSUdfV0FJVCAzMDAwMAorLyogSG93IGxvbmcgdG8gd2FpdCBmb3IgQ0lTUyBkb29yYmVsbCBjb21tdW5pY2F0aW9uICovCisjZGVmaW5lIENMRUFSX0VWRU5UX1dBSVRfSU5URVJWQUwgMjAJLyogbXMgZm9yIGVhY2ggbXNsZWVwKCkgY2FsbCAqLworI2RlZmluZSBNT0RFX0NIQU5HRV9XQUlUX0lOVEVSVkFMIDEwCS8qIG1zIGZvciBlYWNoIG1zbGVlcCgpIGNhbGwgKi8KKyNkZWZpbmUgTUFYX0NMRUFSX0VWRU5UX1dBSVQgMzAwMDAJLyogdGltZXMgMjAgbXMgPSA2MDAgcyAqLworI2RlZmluZSBNQVhfTU9ERV9DSEFOR0VfV0FJVCAyMDAwCS8qIHRpbWVzIDEwIG1zID0gMjAgcyAqLwogI2RlZmluZSBNQVhfSU9DVExfQ09ORklHX1dBSVQgMTAwMAogCiAvKmRlZmluZSBob3cgbWFueSB0aW1lcyB3ZSB3aWxsIHRyeSBhIGNvbW1hbmQgYmVjYXVzZSBvZiBidXMgcmVzZXRzICovCkBAIC0xNjQsMjQgKzE2OCwyNCBAQAogCXsweDE5MjYxMDNDLCAiU21hcnQgQXJyYXkgUDczMW0iLCAmU0E1X2FjY2Vzc30sCiAJezB4MTkyODEwM0MsICJTbWFydCBBcnJheSBQMjMwaSIsICZTQTVfYWNjZXNzfSwKIAl7MHgxOTI5MTAzQywgIlNtYXJ0IEFycmF5IFA1MzAiLCAmU0E1X2FjY2Vzc30sCi0JezB4MjFCRDEwM0MsICJTbWFydCBBcnJheSIsICZTQTVfYWNjZXNzfSwKLQl7MHgyMUJFMTAzQywgIlNtYXJ0IEFycmF5IiwgJlNBNV9hY2Nlc3N9LAotCXsweDIxQkYxMDNDLCAiU21hcnQgQXJyYXkiLCAmU0E1X2FjY2Vzc30sCi0JezB4MjFDMDEwM0MsICJTbWFydCBBcnJheSIsICZTQTVfYWNjZXNzfSwKLQl7MHgyMUMxMTAzQywgIlNtYXJ0IEFycmF5IiwgJlNBNV9hY2Nlc3N9LAotCXsweDIxQzIxMDNDLCAiU21hcnQgQXJyYXkiLCAmU0E1X2FjY2Vzc30sCi0JezB4MjFDMzEwM0MsICJTbWFydCBBcnJheSIsICZTQTVfYWNjZXNzfSwKKwl7MHgyMUJEMTAzQywgIlNtYXJ0IEFycmF5IFAyNDRiciIsICZTQTVfYWNjZXNzfSwKKwl7MHgyMUJFMTAzQywgIlNtYXJ0IEFycmF5IFA3NDFtIiwgJlNBNV9hY2Nlc3N9LAorCXsweDIxQkYxMDNDLCAiU21hcnQgSEJBIEgyNDBhciIsICZTQTVfYWNjZXNzfSwKKwl7MHgyMUMwMTAzQywgIlNtYXJ0IEFycmF5IFA0NDBhciIsICZTQTVfYWNjZXNzfSwKKwl7MHgyMUMxMTAzQywgIlNtYXJ0IEFycmF5IFA4NDBhciIsICZTQTVfYWNjZXNzfSwKKwl7MHgyMUMyMTAzQywgIlNtYXJ0IEFycmF5IFA0NDAiLCAmU0E1X2FjY2Vzc30sCisJezB4MjFDMzEwM0MsICJTbWFydCBBcnJheSBQNDQxIiwgJlNBNV9hY2Nlc3N9LAogCXsweDIxQzQxMDNDLCAiU21hcnQgQXJyYXkiLCAmU0E1X2FjY2Vzc30sCi0JezB4MjFDNTEwM0MsICJTbWFydCBBcnJheSIsICZTQTVfYWNjZXNzfSwKLQl7MHgyMUM2MTAzQywgIlNtYXJ0IEFycmF5IiwgJlNBNV9hY2Nlc3N9LAotCXsweDIxQzcxMDNDLCAiU21hcnQgQXJyYXkiLCAmU0E1X2FjY2Vzc30sCi0JezB4MjFDODEwM0MsICJTbWFydCBBcnJheSIsICZTQTVfYWNjZXNzfSwKKwl7MHgyMUM1MTAzQywgIlNtYXJ0IEFycmF5IFA4NDEiLCAmU0E1X2FjY2Vzc30sCisJezB4MjFDNjEwM0MsICJTbWFydCBIQkEgSDI0NGJyIiwgJlNBNV9hY2Nlc3N9LAorCXsweDIxQzcxMDNDLCAiU21hcnQgSEJBIEgyNDAiLCAmU0E1X2FjY2Vzc30sCisJezB4MjFDODEwM0MsICJTbWFydCBIQkEgSDI0MSIsICZTQTVfYWNjZXNzfSwKIAl7MHgyMUM5MTAzQywgIlNtYXJ0IEFycmF5IiwgJlNBNV9hY2Nlc3N9LAotCXsweDIxQ0ExMDNDLCAiU21hcnQgQXJyYXkiLCAmU0E1X2FjY2Vzc30sCi0JezB4MjFDQjEwM0MsICJTbWFydCBBcnJheSIsICZTQTVfYWNjZXNzfSwKKwl7MHgyMUNBMTAzQywgIlNtYXJ0IEFycmF5IFAyNDZiciIsICZTQTVfYWNjZXNzfSwKKwl7MHgyMUNCMTAzQywgIlNtYXJ0IEFycmF5IFA4NDAiLCAmU0E1X2FjY2Vzc30sCiAJezB4MjFDQzEwM0MsICJTbWFydCBBcnJheSIsICZTQTVfYWNjZXNzfSwKIAl7MHgyMUNEMTAzQywgIlNtYXJ0IEFycmF5IiwgJlNBNV9hY2Nlc3N9LAotCXsweDIxQ0UxMDNDLCAiU21hcnQgQXJyYXkiLCAmU0E1X2FjY2Vzc30sCisJezB4MjFDRTEwM0MsICJTbWFydCBIQkEiLCAmU0E1X2FjY2Vzc30sCiAJezB4MDA3NjE1OTAsICJIUCBTdG9yYWdlIFAxMjI0IEFycmF5IENvbnRyb2xsZXIiLCAmU0E1X2FjY2Vzc30sCiAJezB4MDA4NzE1OTAsICJIUCBTdG9yYWdlIFAxMjI0ZSBBcnJheSBDb250cm9sbGVyIiwgJlNBNV9hY2Nlc3N9LAogCXsweDAwN0QxNTkwLCAiSFAgU3RvcmFnZSBQMTIyOCBBcnJheSBDb250cm9sbGVyIiwgJlNBNV9hY2Nlc3N9LApAQCAtMTk1LDggKzE5OSw2IEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgZG9faHBzYV9pbnRyX2ludHgoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBkb19ocHNhX2ludHJfbXNpKGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgaW50IGhwc2FfaW9jdGwoc3RydWN0IHNjc2lfZGV2aWNlICpkZXYsIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwotc3RhdGljIHZvaWQgbG9ja19hbmRfc3RhcnRfaW8oc3RydWN0IGN0bHJfaW5mbyAqaCk7Ci1zdGF0aWMgdm9pZCBzdGFydF9pbyhzdHJ1Y3QgY3Rscl9pbmZvICpoLCB1bnNpZ25lZCBsb25nICpmbGFncyk7CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBzdGF0aWMgaW50IGhwc2FfY29tcGF0X2lvY3RsKHN0cnVjdCBzY3NpX2RldmljZSAqZGV2LCBpbnQgY21kLApAQCAtMjA0LDE4ICsyMDYsMTggQEAKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBjbWRfZnJlZShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpOwotc3RhdGljIHZvaWQgY21kX3NwZWNpYWxfZnJlZShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpOwogc3RhdGljIHN0cnVjdCBDb21tYW5kTGlzdCAqY21kX2FsbG9jKHN0cnVjdCBjdGxyX2luZm8gKmgpOwotc3RhdGljIHN0cnVjdCBDb21tYW5kTGlzdCAqY21kX3NwZWNpYWxfYWxsb2Moc3RydWN0IGN0bHJfaW5mbyAqaCk7CiBzdGF0aWMgaW50IGZpbGxfY21kKHN0cnVjdCBDb21tYW5kTGlzdCAqYywgdTggY21kLCBzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCXZvaWQgKmJ1ZmYsIHNpemVfdCBzaXplLCB1MTYgcGFnZV9jb2RlLCB1bnNpZ25lZCBjaGFyICpzY3NpM2FkZHIsCiAJaW50IGNtZF90eXBlKTsKK3N0YXRpYyB2b2lkIGhwc2FfZnJlZV9jbWRfcG9vbChzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKICNkZWZpbmUgVlBEX1BBR0UgKDEgPDwgOCkKIAogc3RhdGljIGludCBocHNhX3Njc2lfcXVldWVfY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpoLCBzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwogc3RhdGljIHZvaWQgaHBzYV9zY2FuX3N0YXJ0KHN0cnVjdCBTY3NpX0hvc3QgKik7CiBzdGF0aWMgaW50IGhwc2Ffc2Nhbl9maW5pc2hlZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaCwKIAl1bnNpZ25lZCBsb25nIGVsYXBzZWRfdGltZSk7CitzdGF0aWMgaW50IGhwc2FfY2hhbmdlX3F1ZXVlX2RlcHRoKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgaW50IHFkZXB0aCk7CiAKIHN0YXRpYyBpbnQgaHBzYV9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3NpY21kKTsKIHN0YXRpYyBpbnQgaHBzYV9laF9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjc2ljbWQpOwpAQCAtMjI5LDcgKzIzMSw3IEBACiAJc3RydWN0IENvbW1hbmRMaXN0ICpjKTsKIC8qIHBlcmZvcm1hbnQgbW9kZSBoZWxwZXIgZnVuY3Rpb25zICovCiBzdGF0aWMgdm9pZCBjYWxjX2J1Y2tldF9tYXAoaW50ICpidWNrZXQsIGludCBudW1fYnVja2V0cywKLQlpbnQgbnNncywgaW50IG1pbl9ibG9ja3MsIGludCAqYnVja2V0X21hcCk7CisJaW50IG5zZ3MsIGludCBtaW5fYmxvY2tzLCB1MzIgKmJ1Y2tldF9tYXApOwogc3RhdGljIHZvaWQgaHBzYV9wdXRfY3Rscl9pbnRvX3BlcmZvcm1hbnRfbW9kZShzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIHN0YXRpYyBpbmxpbmUgdTMyIG5leHRfY29tbWFuZChzdHJ1Y3QgY3Rscl9pbmZvICpoLCB1OCBxKTsKIHN0YXRpYyBpbnQgaHBzYV9maW5kX2NmZ19hZGRycyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdm9pZCBfX2lvbWVtICp2YWRkciwKQEAgLTI0MSwxNCArMjQzLDE1IEBACiBzdGF0aWMgaW50IGhwc2Ffd2FpdF9mb3JfYm9hcmRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgX19pb21lbSAqdmFkZHIsCiAJCQkJICAgICBpbnQgd2FpdF9mb3JfcmVhZHkpOwogc3RhdGljIGlubGluZSB2b2lkIGZpbmlzaF9jbWQoc3RydWN0IENvbW1hbmRMaXN0ICpjKTsKLXN0YXRpYyB2b2lkIGhwc2Ffd2FpdF9mb3JfbW9kZV9jaGFuZ2VfYWNrKHN0cnVjdCBjdGxyX2luZm8gKmgpOworc3RhdGljIGludCBocHNhX3dhaXRfZm9yX21vZGVfY2hhbmdlX2FjayhzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKICNkZWZpbmUgQk9BUkRfTk9UX1JFQURZIDAKICNkZWZpbmUgQk9BUkRfUkVBRFkgMQogc3RhdGljIHZvaWQgaHBzYV9kcmFpbl9hY2NlbF9jb21tYW5kcyhzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIHN0YXRpYyB2b2lkIGhwc2FfZmx1c2hfY2FjaGUoc3RydWN0IGN0bHJfaW5mbyAqaCk7CiBzdGF0aWMgaW50IGhwc2Ffc2NzaV9pb2FjY2VsX3F1ZXVlX2NvbW1hbmQoc3RydWN0IGN0bHJfaW5mbyAqaCwKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMsIHUzMiBpb2FjY2VsX2hhbmRsZSwgdTggKmNkYiwgaW50IGNkYl9sZW4sCi0JdTggKnNjc2kzYWRkcik7CisJdTggKnNjc2kzYWRkciwgc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqcGh5c19kaXNrKTsKK3N0YXRpYyB2b2lkIGhwc2FfY29tbWFuZF9yZXN1Ym1pdF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY3Rscl9pbmZvICpzZGV2X3RvX2hiYShzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCiB7CkBAIC01MDUsOCArNTA4LDggQEAKIAlyZXR1cm4gKHNjc2kzYWRkclszXSAmIDB4QzApID09IDB4NDA7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICpyYWlkX2xhYmVsW10gPSB7ICIwIiwgIjQiLCAiMSgxKzApIiwgIjUiLCAiNSsxIiwgIkFERyIsCi0JIjEoQURNKSIsICJVTktOT1dOIgorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCByYWlkX2xhYmVsW10gPSB7ICIwIiwgIjQiLCAiMSgrMCkiLCAiNSIsICI1KzEiLCAiNiIsCisJIjEoKzApQURNIiwgIlVOS05PV04iCiB9OwogI2RlZmluZSBIUFNBX1JBSURfMAkwCiAjZGVmaW5lIEhQU0FfUkFJRF80CTEKQEAgLTY3MSw3ICs2NzQsNyBAQAogCS5xdWV1ZWNvbW1hbmQJCT0gaHBzYV9zY3NpX3F1ZXVlX2NvbW1hbmQsCiAJLnNjYW5fc3RhcnQJCT0gaHBzYV9zY2FuX3N0YXJ0LAogCS5zY2FuX2ZpbmlzaGVkCQk9IGhwc2Ffc2Nhbl9maW5pc2hlZCwKLQkuY2hhbmdlX3F1ZXVlX2RlcHRoCT0gc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgsCisJLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IGhwc2FfY2hhbmdlX3F1ZXVlX2RlcHRoLAogCS50aGlzX2lkCQk9IC0xLAogCS51c2VfY2x1c3RlcmluZwkJPSBFTkFCTEVfQ0xVU1RFUklORywKIAkuZWhfYWJvcnRfaGFuZGxlcgk9IGhwc2FfZWhfYWJvcnRfaGFuZGxlciwKQEAgLTY4OCwxMyArNjkxLDYgQEAKIAkubm9fd3JpdGVfc2FtZSA9IDEsCiB9OwogCi0KLS8qIEVucXVldWluZyBhbmQgZGVxdWV1aW5nIGZ1bmN0aW9ucyBmb3IgY21kbGlzdHMuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkUShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpCi17Ci0JbGlzdF9hZGRfdGFpbCgmYy0+bGlzdCwgbGlzdCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdTMyIG5leHRfY29tbWFuZChzdHJ1Y3QgY3Rscl9pbmZvICpoLCB1OCBxKQogewogCXUzMiBhOwpAQCAtODI4LDMxICs4MjQsMjEgQEAKIHN0YXRpYyB2b2lkIGVucXVldWVfY21kX2FuZF9zdGFydF9pbyhzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCisJZGlhbF9kb3duX2xvY2t1cF9kZXRlY3Rpb25fZHVyaW5nX2Z3X2ZsYXNoKGgsIGMpOworCWF0b21pY19pbmMoJmgtPmNvbW1hbmRzX291dHN0YW5kaW5nKTsKIAlzd2l0Y2ggKGMtPmNtZF90eXBlKSB7CiAJY2FzZSBDTURfSU9BQ0NFTDE6CiAJCXNldF9pb2FjY2VsMV9wZXJmb3JtYW50X21vZGUoaCwgYyk7CisJCXdyaXRlbChjLT5idXNhZGRyLCBoLT52YWRkciArIFNBNV9SRVFVRVNUX1BPUlRfT0ZGU0VUKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfSU9BQ0NFTDI6CiAJCXNldF9pb2FjY2VsMl9wZXJmb3JtYW50X21vZGUoaCwgYyk7CisJCXdyaXRlbChjLT5idXNhZGRyLCBoLT52YWRkciArIElPQUNDRUwyX0lOQk9VTkRfUE9TVFFfMzIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlzZXRfcGVyZm9ybWFudF9tb2RlKGgsIGMpOworCQloLT5hY2Nlc3Muc3VibWl0X2NvbW1hbmQoaCwgYyk7CiAJfQotCWRpYWxfZG93bl9sb2NrdXBfZGV0ZWN0aW9uX2R1cmluZ19md19mbGFzaChoLCBjKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwotCWFkZFEoJmgtPnJlcVEsIGMpOwotCWgtPlFkZXB0aCsrOwotCXN0YXJ0X2lvKGgsICZmbGFncyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlUShzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpCi17Ci0JaWYgKFdBUk5fT04obGlzdF9lbXB0eSgmYy0+bGlzdCkpKQotCQlyZXR1cm47Ci0JbGlzdF9kZWxfaW5pdCgmYy0+bGlzdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2hiYV9sdW5pZCh1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcltdKQpAQCAtOTE5LDcgKzkwNSw3IEBACiAKIAkvKiBJZiB0aGlzIGRldmljZSBhIG5vbi16ZXJvIGx1biBvZiBhIG11bHRpLWx1biBkZXZpY2UKIAkgKiBieXRlIDQgb2YgdGhlIDgtYnl0ZSBMVU4gYWRkciB3aWxsIGNvbnRhaW4gdGhlIGxvZ2ljYWwKLQkgKiB1bml0IG5vLCB6ZXJvIG90aGVyaXNlLgorCSAqIHVuaXQgbm8sIHplcm8gb3RoZXJ3aXNlLgogCSAqLwogCWlmIChkZXZpY2UtPnNjc2kzYWRkcls0XSA9PSAwKSB7CiAJCS8qIFRoaXMgaXMgbm90IGEgbm9uLXplcm8gbHVuIG9mIGEgbXVsdGktbHVuIGRldmljZSAqLwpAQCAtOTg0LDEyICs5NzAsMjQgQEAKIAkvKiBSYWlkIGxldmVsIGNoYW5nZWQuICovCiAJaC0+ZGV2W2VudHJ5XS0+cmFpZF9sZXZlbCA9IG5ld19lbnRyeS0+cmFpZF9sZXZlbDsKIAotCS8qIFJhaWQgb2ZmbG9hZCBwYXJhbWV0ZXJzIGNoYW5nZWQuICovCisJLyogUmFpZCBvZmZsb2FkIHBhcmFtZXRlcnMgY2hhbmdlZC4gIENhcmVmdWwgYWJvdXQgdGhlIG9yZGVyaW5nLiAqLworCWlmIChuZXdfZW50cnktPm9mZmxvYWRfY29uZmlnICYmIG5ld19lbnRyeS0+b2ZmbG9hZF9lbmFibGVkKSB7CisJCS8qCisJCSAqIGlmIGRyaXZlIGlzIG5ld2x5IG9mZmxvYWRfZW5hYmxlZCwgd2Ugd2FudCB0byBjb3B5IHRoZQorCQkgKiByYWlkIG1hcCBkYXRhIGZpcnN0LiAgSWYgcHJldmlvdXNseSBvZmZsb2FkX2VuYWJsZWQgYW5kCisJCSAqIG9mZmxvYWRfY29uZmlnIHdlcmUgc2V0LCByYWlkIG1hcCBkYXRhIGhhZCBiZXR0ZXIgYmUKKwkJICogdGhlIHNhbWUgYXMgaXQgd2FzIGJlZm9yZS4gIGlmIHJhaWQgbWFwIGRhdGEgaXMgY2hhbmdlZAorCQkgKiB0aGVuIGl0IGhhZCBiZXR0ZXIgYmUgdGhlIGNhc2UgdGhhdAorCQkgKiBoLT5kZXZbZW50cnldLT5vZmZsb2FkX2VuYWJsZWQgaXMgY3VycmVudGx5IDAuCisJCSAqLworCQloLT5kZXZbZW50cnldLT5yYWlkX21hcCA9IG5ld19lbnRyeS0+cmFpZF9tYXA7CisJCWgtPmRldltlbnRyeV0tPmlvYWNjZWxfaGFuZGxlID0gbmV3X2VudHJ5LT5pb2FjY2VsX2hhbmRsZTsKKwkJd21iKCk7IC8qIGVuc3VyZSByYWlkIG1hcCB1cGRhdGVkIHByaW9yIHRvIC0+b2ZmbG9hZF9lbmFibGVkICovCisJfQogCWgtPmRldltlbnRyeV0tPm9mZmxvYWRfY29uZmlnID0gbmV3X2VudHJ5LT5vZmZsb2FkX2NvbmZpZzsKLQloLT5kZXZbZW50cnldLT5vZmZsb2FkX2VuYWJsZWQgPSBuZXdfZW50cnktPm9mZmxvYWRfZW5hYmxlZDsKLQloLT5kZXZbZW50cnldLT5pb2FjY2VsX2hhbmRsZSA9IG5ld19lbnRyeS0+aW9hY2NlbF9oYW5kbGU7CiAJaC0+ZGV2W2VudHJ5XS0+b2ZmbG9hZF90b19taXJyb3IgPSBuZXdfZW50cnktPm9mZmxvYWRfdG9fbWlycm9yOwotCWgtPmRldltlbnRyeV0tPnJhaWRfbWFwID0gbmV3X2VudHJ5LT5yYWlkX21hcDsKKwloLT5kZXZbZW50cnldLT5vZmZsb2FkX2VuYWJsZWQgPSBuZXdfZW50cnktPm9mZmxvYWRfZW5hYmxlZDsKKwloLT5kZXZbZW50cnldLT5xdWV1ZV9kZXB0aCA9IG5ld19lbnRyeS0+cXVldWVfZGVwdGg7CiAKIAlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LCAiJXMgZGV2aWNlIGMlZGIlZHQlZGwlZCB1cGRhdGVkLlxuIiwKIAkJc2NzaV9kZXZpY2VfdHlwZShuZXdfZW50cnktPmRldnR5cGUpLCBob3N0bm8sIG5ld19lbnRyeS0+YnVzLApAQCAtMTExNSw2ICsxMTEzLDggQEAKIAkJcmV0dXJuIDE7CiAJaWYgKGRldjEtPm9mZmxvYWRfZW5hYmxlZCAhPSBkZXYyLT5vZmZsb2FkX2VuYWJsZWQpCiAJCXJldHVybiAxOworCWlmIChkZXYxLT5xdWV1ZV9kZXB0aCAhPSBkZXYyLT5xdWV1ZV9kZXB0aCkKKwkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNjAsNiArMTI2MCw4NSBAQAogCX0KIH0KIAorLyoKKyAqIEZpZ3VyZSB0aGUgbGlzdCBvZiBwaHlzaWNhbCBkcml2ZSBwb2ludGVycyBmb3IgYSBsb2dpY2FsIGRyaXZlIHdpdGgKKyAqIHJhaWQgb2ZmbG9hZCBjb25maWd1cmVkLgorICovCitzdGF0aWMgdm9pZCBocHNhX2ZpZ3VyZV9waHlzX2Rpc2tfcHRycyhzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCQkJCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmRldltdLCBpbnQgbmRldmljZXMsCisJCQkJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqbG9naWNhbF9kcml2ZSkKK3sKKwlzdHJ1Y3QgcmFpZF9tYXBfZGF0YSAqbWFwID0gJmxvZ2ljYWxfZHJpdmUtPnJhaWRfbWFwOworCXN0cnVjdCByYWlkX21hcF9kaXNrX2RhdGEgKmRkID0gJm1hcC0+ZGF0YVswXTsKKwlpbnQgaSwgajsKKwlpbnQgdG90YWxfZGlza3NfcGVyX3JvdyA9IGxlMTZfdG9fY3B1KG1hcC0+ZGF0YV9kaXNrc19wZXJfcm93KSArCisJCQkJbGUxNl90b19jcHUobWFwLT5tZXRhZGF0YV9kaXNrc19wZXJfcm93KTsKKwlpbnQgbnJhaWRfbWFwX2VudHJpZXMgPSBsZTE2X3RvX2NwdShtYXAtPnJvd19jbnQpICoKKwkJCQlsZTE2X3RvX2NwdShtYXAtPmxheW91dF9tYXBfY291bnQpICoKKwkJCQl0b3RhbF9kaXNrc19wZXJfcm93OworCWludCBucGh5c19kaXNrID0gbGUxNl90b19jcHUobWFwLT5sYXlvdXRfbWFwX2NvdW50KSAqCisJCQkJdG90YWxfZGlza3NfcGVyX3JvdzsKKwlpbnQgcWRlcHRoOworCisJaWYgKG5yYWlkX21hcF9lbnRyaWVzID4gUkFJRF9NQVBfTUFYX0VOVFJJRVMpCisJCW5yYWlkX21hcF9lbnRyaWVzID0gUkFJRF9NQVBfTUFYX0VOVFJJRVM7CisKKwlxZGVwdGggPSAwOworCWZvciAoaSA9IDA7IGkgPCBucmFpZF9tYXBfZW50cmllczsgaSsrKSB7CisJCWxvZ2ljYWxfZHJpdmUtPnBoeXNfZGlza1tpXSA9IE5VTEw7CisJCWlmICghbG9naWNhbF9kcml2ZS0+b2ZmbG9hZF9jb25maWcpCisJCQljb250aW51ZTsKKwkJZm9yIChqID0gMDsgaiA8IG5kZXZpY2VzOyBqKyspIHsKKwkJCWlmIChkZXZbal0tPmRldnR5cGUgIT0gVFlQRV9ESVNLKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGlzX2xvZ2ljYWxfZGV2X2FkZHJfbW9kZShkZXZbal0tPnNjc2kzYWRkcikpCisJCQkJY29udGludWU7CisJCQlpZiAoZGV2W2pdLT5pb2FjY2VsX2hhbmRsZSAhPSBkZFtpXS5pb2FjY2VsX2hhbmRsZSkKKwkJCQljb250aW51ZTsKKworCQkJbG9naWNhbF9kcml2ZS0+cGh5c19kaXNrW2ldID0gZGV2W2pdOworCQkJaWYgKGkgPCBucGh5c19kaXNrKQorCQkJCXFkZXB0aCA9IG1pbihoLT5ucl9jbWRzLCBxZGVwdGggKworCQkJCSAgICBsb2dpY2FsX2RyaXZlLT5waHlzX2Rpc2tbaV0tPnF1ZXVlX2RlcHRoKTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogVGhpcyBjYW4gaGFwcGVuIGlmIGEgcGh5c2ljYWwgZHJpdmUgaXMgcmVtb3ZlZCBhbmQKKwkJICogdGhlIGxvZ2ljYWwgZHJpdmUgaXMgZGVncmFkZWQuICBJbiB0aGF0IGNhc2UsIHRoZSBSQUlECisJCSAqIG1hcCBkYXRhIHdpbGwgcmVmZXIgdG8gYSBwaHlzaWNhbCBkaXNrIHdoaWNoIGlzbid0IGFjdHVhbGx5CisJCSAqIHByZXNlbnQuICBBbmQgaW4gdGhhdCBjYXNlIG9mZmxvYWRfZW5hYmxlZCBzaG91bGQgYWxyZWFkeQorCQkgKiBiZSAwLCBidXQgd2UnbGwgdHVybiBpdCBvZmYgaGVyZSBqdXN0IGluIGNhc2UKKwkJICovCisJCWlmICghbG9naWNhbF9kcml2ZS0+cGh5c19kaXNrW2ldKSB7CisJCQlsb2dpY2FsX2RyaXZlLT5vZmZsb2FkX2VuYWJsZWQgPSAwOworCQkJbG9naWNhbF9kcml2ZS0+cXVldWVfZGVwdGggPSBoLT5ucl9jbWRzOworCQl9CisJfQorCWlmIChucmFpZF9tYXBfZW50cmllcykKKwkJLyoKKwkJICogVGhpcyBpcyBjb3JyZWN0IGZvciByZWFkcywgdG9vIGhpZ2ggZm9yIGZ1bGwgc3RyaXBlIHdyaXRlcywKKwkJICogd2F5IHRvbyBoaWdoIGZvciBwYXJ0aWFsIHN0cmlwZSB3cml0ZXMKKwkJICovCisJCWxvZ2ljYWxfZHJpdmUtPnF1ZXVlX2RlcHRoID0gcWRlcHRoOworCWVsc2UKKwkJbG9naWNhbF9kcml2ZS0+cXVldWVfZGVwdGggPSBoLT5ucl9jbWRzOworfQorCitzdGF0aWMgdm9pZCBocHNhX3VwZGF0ZV9sb2dfZHJpdmVfcGh5c19kcml2ZV9wdHJzKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJCQkJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqZGV2W10sIGludCBuZGV2aWNlcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuZGV2aWNlczsgaSsrKSB7CisJCWlmIChkZXZbaV0tPmRldnR5cGUgIT0gVFlQRV9ESVNLKQorCQkJY29udGludWU7CisJCWlmICghaXNfbG9naWNhbF9kZXZfYWRkcl9tb2RlKGRldltpXS0+c2NzaTNhZGRyKSkKKwkJCWNvbnRpbnVlOworCQlocHNhX2ZpZ3VyZV9waHlzX2Rpc2tfcHRycyhoLCBkZXYsIG5kZXZpY2VzLCBkZXZbaV0pOworCX0KK30KKwogc3RhdGljIHZvaWQgYWRqdXN0X2hwc2Ffc2NzaV90YWJsZShzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vLAogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnNkW10sIGludCBuc2RzKQogewpAQCAtMTQ0NCw4ICsxNTIzLDEyIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmRldmxvY2ssIGZsYWdzKTsKIAlzZCA9IGxvb2t1cF9ocHNhX3Njc2lfZGV2KGgsIHNkZXZfY2hhbm5lbChzZGV2KSwKIAkJc2Rldl9pZChzZGV2KSwgc2Rldi0+bHVuKTsKLQlpZiAoc2QgIT0gTlVMTCkKKwlpZiAoc2QgIT0gTlVMTCkgewogCQlzZGV2LT5ob3N0ZGF0YSA9IHNkOworCQlpZiAoc2QtPnF1ZXVlX2RlcHRoKQorCQkJc2NzaV9jaGFuZ2VfcXVldWVfZGVwdGgoc2Rldiwgc2QtPnF1ZXVlX2RlcHRoKTsKKwkJYXRvbWljX3NldCgmc2QtPmlvYWNjZWxfY21kc19vdXQsIDApOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5kZXZsb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDc4LDEzICsxNTYxLDE3IEBACiAKIAloLT5jbWRfc2dfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKCpoLT5jbWRfc2dfbGlzdCkgKiBoLT5ucl9jbWRzLAogCQkJCUdGUF9LRVJORUwpOwotCWlmICghaC0+Y21kX3NnX2xpc3QpCisJaWYgKCFoLT5jbWRfc2dfbGlzdCkgeworCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgU0cgbGlzdFxuIik7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAlmb3IgKGkgPSAwOyBpIDwgaC0+bnJfY21kczsgaSsrKSB7CiAJCWgtPmNtZF9zZ19saXN0W2ldID0ga21hbGxvYyhzaXplb2YoKmgtPmNtZF9zZ19saXN0W2ldKSAqCiAJCQkJCQloLT5jaGFpbnNpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIWgtPmNtZF9zZ19saXN0W2ldKQorCQlpZiAoIWgtPmNtZF9zZ19saXN0W2ldKSB7CisJCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgY21kIFNHXG4iKTsKIAkJCWdvdG8gY2xlYW47CisJCX0KIAl9CiAJcmV0dXJuIDA7CiAKQEAgLTE1MDQsNyArMTU5MSw3IEBACiAJY2hhaW5fYmxvY2sgPSBoLT5jbWRfc2dfbGlzdFtjLT5jbWRpbmRleF07CiAJY2hhaW5fc2ctPkV4dCA9IGNwdV90b19sZTMyKEhQU0FfU0dfQ0hBSU4pOwogCWNoYWluX2xlbiA9IHNpemVvZigqY2hhaW5fc2cpICoKLQkJKGMtPkhlYWRlci5TR1RvdGFsIC0gaC0+bWF4X2NtZF9zZ19lbnRyaWVzKTsKKwkJKGxlMTZfdG9fY3B1KGMtPkhlYWRlci5TR1RvdGFsKSAtIGgtPm1heF9jbWRfc2dfZW50cmllcyk7CiAJY2hhaW5fc2ctPkxlbiA9IGNwdV90b19sZTMyKGNoYWluX2xlbik7CiAJdGVtcDY0ID0gcGNpX21hcF9zaW5nbGUoaC0+cGRldiwgY2hhaW5fYmxvY2ssIGNoYWluX2xlbiwKIAkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKQEAgLTE2MzUsNyArMTcyMiw2IEBACiAJCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmRldikKIHsKIAlzdHJ1Y3QgaW9fYWNjZWwyX2NtZCAqYzIgPSAmaC0+aW9hY2NlbDJfY21kX3Bvb2xbYy0+Y21kaW5kZXhdOwotCWludCByYWlkX3JldHJ5ID0gMDsKIAogCS8qIGNoZWNrIGZvciBnb29kIHN0YXR1cyAqLwogCWlmIChsaWtlbHkoYzItPmVycm9yX2RhdGEuc2Vydl9yZXNwb25zZSA9PSAwICYmCkBAIC0xNjUyLDI2ICsxNzM4LDIyIEBACiAJaWYgKGlzX2xvZ2ljYWxfZGV2X2FkZHJfbW9kZShkZXYtPnNjc2kzYWRkcikgJiYKIAkJYzItPmVycm9yX2RhdGEuc2Vydl9yZXNwb25zZSA9PQogCQkJSU9BQ0NFTDJfU0VSVl9SRVNQT05TRV9GQUlMVVJFKSB7Ci0JCWRldi0+b2ZmbG9hZF9lbmFibGVkID0gMDsKLQkJaC0+ZHJ2X3JlcV9yZXNjYW4gPSAxOwkvKiBzY2hlZHVsZSBjb250cm9sbGVyIGZvciBhIHJlc2NhbiAqLwotCQljbWQtPnJlc3VsdCA9IERJRF9TT0ZUX0VSUk9SIDw8IDE2OwotCQljbWRfZnJlZShoLCBjKTsKLQkJY21kLT5zY3NpX2RvbmUoY21kKTsKLQkJcmV0dXJuOworCQlpZiAoYzItPmVycm9yX2RhdGEuc3RhdHVzID09CisJCQlJT0FDQ0VMMl9TVEFUVVNfU1JfSU9BQ0NFTF9ESVNBQkxFRCkKKwkJCWRldi0+b2ZmbG9hZF9lbmFibGVkID0gMDsKKwkJZ290byByZXRyeV9jbWQ7CiAJfQotCXJhaWRfcmV0cnkgPSBoYW5kbGVfaW9hY2NlbF9tb2RlMl9lcnJvcihoLCBjLCBjbWQsIGMyKTsKLQkvKiBJZiBlcnJvciBmb3VuZCwgZGlzYWJsZSBTbWFydCBQYXRoLCBzY2hlZHVsZSBhIHJlc2NhbiwKLQkgKiBhbmQgZm9yY2UgYSByZXRyeSBvbiB0aGUgc3RhbmRhcmQgcGF0aC4KLQkgKi8KLQlpZiAocmFpZF9yZXRyeSkgewotCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiJXM6IFJldHJ5aW5nIG9uIHN0YW5kYXJkIHBhdGguXG4iLAotCQkJIkhQIFNTRCBTbWFydCBQYXRoIik7Ci0JCWRldi0+b2ZmbG9hZF9lbmFibGVkID0gMDsgLyogRGlzYWJsZSBTbWFydCBQYXRoICovCi0JCWgtPmRydl9yZXFfcmVzY2FuID0gMTsJICAvKiBzY2hlZHVsZSBjb250cm9sbGVyIHJlc2NhbiAqLwotCQljbWQtPnJlc3VsdCA9IERJRF9TT0ZUX0VSUk9SIDw8IDE2OwotCX0KKworCWlmIChoYW5kbGVfaW9hY2NlbF9tb2RlMl9lcnJvcihoLCBjLCBjbWQsIGMyKSkKKwkJZ290byByZXRyeV9jbWQ7CisKIAljbWRfZnJlZShoLCBjKTsKIAljbWQtPnNjc2lfZG9uZShjbWQpOworCXJldHVybjsKKworcmV0cnlfY21kOgorCUlOSVRfV09SSygmYy0+d29yaywgaHBzYV9jb21tYW5kX3Jlc3VibWl0X3dvcmtlcik7CisJcXVldWVfd29ya19vbihyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBoLT5yZXN1Ym1pdF93cSwgJmMtPndvcmspOwogfQogCiBzdGF0aWMgdm9pZCBjb21wbGV0ZV9zY3NpX2NvbW1hbmQoc3RydWN0IENvbW1hbmRMaXN0ICpjcCkKQEAgLTE2ODcsMTggKzE3NjksMjEgQEAKIAl1bnNpZ25lZCBsb25nIHNlbnNlX2RhdGFfc2l6ZTsKIAogCWVpID0gY3AtPmVycl9pbmZvOwotCWNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGNwLT5zY3NpX2NtZDsKKwljbWQgPSBjcC0+c2NzaV9jbWQ7CiAJaCA9IGNwLT5oOwogCWRldiA9IGNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAogCXNjc2lfZG1hX3VubWFwKGNtZCk7IC8qIHVuZG8gdGhlIERNQSBtYXBwaW5ncyAqLwogCWlmICgoY3AtPmNtZF90eXBlID09IENNRF9TQ1NJKSAmJgotCQkoY3AtPkhlYWRlci5TR1RvdGFsID4gaC0+bWF4X2NtZF9zZ19lbnRyaWVzKSkKKwkJKGxlMTZfdG9fY3B1KGNwLT5IZWFkZXIuU0dUb3RhbCkgPiBoLT5tYXhfY21kX3NnX2VudHJpZXMpKQogCQlocHNhX3VubWFwX3NnX2NoYWluX2Jsb2NrKGgsIGNwKTsKIAogCWNtZC0+cmVzdWx0ID0gKERJRF9PSyA8PCAxNik7IAkJLyogaG9zdCBieXRlICovCiAJY21kLT5yZXN1bHQgfD0gKENPTU1BTkRfQ09NUExFVEUgPDwgOCk7CS8qIG1zZyBieXRlICovCiAKKwlpZiAoY3AtPmNtZF90eXBlID09IENNRF9JT0FDQ0VMMiB8fCBjcC0+Y21kX3R5cGUgPT0gQ01EX0lPQUNDRUwxKQorCQlhdG9taWNfZGVjKCZjcC0+cGh5c19kaXNrLT5pb2FjY2VsX2NtZHNfb3V0KTsKKwogCWlmIChjcC0+Y21kX3R5cGUgPT0gQ01EX0lPQUNDRUwyKQogCQlyZXR1cm4gcHJvY2Vzc19pb2FjY2VsMl9jb21wbGV0aW9uKGgsIGNwLCBjbWQsIGRldik7CiAKQEAgLTE3MDYsNiArMTc5MSw4IEBACiAKIAlzY3NpX3NldF9yZXNpZChjbWQsIGVpLT5SZXNpZHVhbENudCk7CiAJaWYgKGVpLT5Db21tYW5kU3RhdHVzID09IDApIHsKKwkJaWYgKGNwLT5jbWRfdHlwZSA9PSBDTURfSU9BQ0NFTDEpCisJCQlhdG9taWNfZGVjKCZjcC0+cGh5c19kaXNrLT5pb2FjY2VsX2NtZHNfb3V0KTsKIAkJY21kX2ZyZWUoaCwgY3ApOwogCQljbWQtPnNjc2lfZG9uZShjbWQpOwogCQlyZXR1cm47CkBAIC0xNzI2LDggKzE4MTMsMTAgQEAKIAkgKi8KIAlpZiAoY3AtPmNtZF90eXBlID09IENNRF9JT0FDQ0VMMSkgewogCQlzdHJ1Y3QgaW9fYWNjZWwxX2NtZCAqYyA9ICZoLT5pb2FjY2VsX2NtZF9wb29sW2NwLT5jbWRpbmRleF07Ci0JCWNwLT5IZWFkZXIuU0dMaXN0ID0gY3AtPkhlYWRlci5TR1RvdGFsID0gc2NzaV9zZ19jb3VudChjbWQpOwotCQljcC0+UmVxdWVzdC5DREJMZW4gPSBjLT5pb19mbGFncyAmIElPQUNDRUwxX0lPRkxBR1NfQ0RCTEVOX01BU0s7CisJCWNwLT5IZWFkZXIuU0dMaXN0ID0gc2NzaV9zZ19jb3VudChjbWQpOworCQljcC0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNihjcC0+SGVhZGVyLlNHTGlzdCk7CisJCWNwLT5SZXF1ZXN0LkNEQkxlbiA9IGxlMTZfdG9fY3B1KGMtPmlvX2ZsYWdzKSAmCisJCQlJT0FDQ0VMMV9JT0ZMQUdTX0NEQkxFTl9NQVNLOwogCQljcC0+SGVhZGVyLnRhZyA9IGMtPnRhZzsKIAkJbWVtY3B5KGNwLT5IZWFkZXIuTFVOLkx1bkFkZHJCeXRlcywgYy0+Q0lTU19MVU4sIDgpOwogCQltZW1jcHkoY3AtPlJlcXVlc3QuQ0RCLCBjLT5DREIsIGNwLT5SZXF1ZXN0LkNEQkxlbik7CkBAIC0xNzM5LDkgKzE4MjgsOSBAQAogCQlpZiAoaXNfbG9naWNhbF9kZXZfYWRkcl9tb2RlKGRldi0+c2NzaTNhZGRyKSkgewogCQkJaWYgKGVpLT5Db21tYW5kU3RhdHVzID09IENNRF9JT0FDQ0VMX0RJU0FCTEVEKQogCQkJCWRldi0+b2ZmbG9hZF9lbmFibGVkID0gMDsKLQkJCWNtZC0+cmVzdWx0ID0gRElEX1NPRlRfRVJST1IgPDwgMTY7Ci0JCQljbWRfZnJlZShoLCBjcCk7Ci0JCQljbWQtPnNjc2lfZG9uZShjbWQpOworCQkJSU5JVF9XT1JLKCZjcC0+d29yaywgaHBzYV9jb21tYW5kX3Jlc3VibWl0X3dvcmtlcik7CisJCQlxdWV1ZV93b3JrX29uKHJhd19zbXBfcHJvY2Vzc29yX2lkKCksCisJCQkJCWgtPnJlc3VibWl0X3dxLCAmY3AtPndvcmspOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMTc5OCw5ICsxODg3LDggQEAKIAljYXNlIENNRF9EQVRBX1VOREVSUlVOOiAvKiBsZXQgbWlkIGxheWVyIGhhbmRsZSBpdC4gKi8KIAkJYnJlYWs7CiAJY2FzZSBDTURfREFUQV9PVkVSUlVOOgotCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgaGFzIgotCQkJIiBjb21wbGV0ZWQgd2l0aCBkYXRhIG92ZXJydW4gIgotCQkJInJlcG9ydGVkXG4iLCBjcCk7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsCisJCQkiQ0RCICUxNnBoTiBkYXRhIG92ZXJydW5cbiIsIGNwLT5SZXF1ZXN0LkNEQik7CiAJCWJyZWFrOwogCWNhc2UgQ01EX0lOVkFMSUQ6IHsKIAkJLyogcHJpbnRfYnl0ZXMoY3AsIHNpemVvZigqY3ApLCAxLCAwKTsKQEAgLTE4MTYsMzQgKzE5MDQsMzggQEAKIAkJYnJlYWs7CiAJY2FzZSBDTURfUFJPVE9DT0xfRVJSOgogCQljbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKLQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIGhhcyAiCi0JCQkicHJvdG9jb2wgZXJyb3JcbiIsIGNwKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIkNEQiAlMTZwaE4gOiBwcm90b2NvbCBlcnJvclxuIiwKKwkJCQljcC0+UmVxdWVzdC5DREIpOwogCQlicmVhazsKIAljYXNlIENNRF9IQVJEV0FSRV9FUlI6CiAJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgaGFkICBoYXJkd2FyZSBlcnJvclxuIiwgY3ApOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiQ0RCICUxNnBoTiA6IGhhcmR3YXJlIGVycm9yXG4iLAorCQkJY3AtPlJlcXVlc3QuQ0RCKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfQ09OTkVDVElPTl9MT1NUOgogCQljbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKLQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIGhhZCBjb25uZWN0aW9uIGxvc3RcbiIsIGNwKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIkNEQiAlMTZwaE4gOiBjb25uZWN0aW9uIGxvc3RcbiIsCisJCQljcC0+UmVxdWVzdC5DREIpOwogCQlicmVhazsKIAljYXNlIENNRF9BQk9SVEVEOgogCQljbWQtPnJlc3VsdCA9IERJRF9BQk9SVCA8PCAxNjsKLQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIHdhcyBhYm9ydGVkIHdpdGggc3RhdHVzIDB4JXhcbiIsCi0JCQkJY3AsIGVpLT5TY3NpU3RhdHVzKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIkNEQiAlMTZwaE4gd2FzIGFib3J0ZWQgd2l0aCBzdGF0dXMgMHgleFxuIiwKKwkJCQljcC0+UmVxdWVzdC5DREIsIGVpLT5TY3NpU3RhdHVzKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfQUJPUlRfRkFJTEVEOgogCQljbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKLQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNwICVwIHJlcG9ydHMgYWJvcnQgZmFpbGVkXG4iLCBjcCk7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJDREIgJTE2cGhOIDogYWJvcnQgZmFpbGVkXG4iLAorCQkJY3AtPlJlcXVlc3QuQ0RCKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfVU5TT0xJQ0lURURfQUJPUlQ6CiAJCWNtZC0+cmVzdWx0ID0gRElEX1NPRlRfRVJST1IgPDwgMTY7IC8qIHJldHJ5IHRoZSBjb21tYW5kICovCi0JCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjcCAlcCBhYm9ydGVkIGR1ZSB0byBhbiB1bnNvbGljaXRlZCAiCi0JCQkiYWJvcnRcbiIsIGNwKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIkNEQiAlMTZwaE4gOiB1bnNvbGljaXRlZCBhYm9ydFxuIiwKKwkJCWNwLT5SZXF1ZXN0LkNEQik7CiAJCWJyZWFrOwogCWNhc2UgQ01EX1RJTUVPVVQ6CiAJCWNtZC0+cmVzdWx0ID0gRElEX1RJTUVfT1VUIDw8IDE2OwotCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY3AgJXAgdGltZWRvdXRcbiIsIGNwKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIkNEQiAlMTZwaE4gdGltZWQgb3V0XG4iLAorCQkJY3AtPlJlcXVlc3QuQ0RCKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfVU5BQk9SVEFCTEU6CiAJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwpAQCAtMjA0OCwxMCArMjE0MCwxMCBAQAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKIAlzdHJ1Y3QgRXJyb3JJbmZvICplaTsKIAotCWMgPSBjbWRfc3BlY2lhbF9hbGxvYyhoKTsKKwljID0gY21kX2FsbG9jKGgpOwogCi0JaWYgKGMgPT0gTlVMTCkgewkJCS8qIHRyb3VibGUuLi4gKi8KLQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNtZF9zcGVjaWFsX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKKwlpZiAoYyA9PSBOVUxMKSB7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWRfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTIwNjcsNyArMjE1OSw3IEBACiAJCXJjID0gLTE7CiAJfQogb3V0OgotCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CisJY21kX2ZyZWUoaCwgYyk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0yMDc5LDEwICsyMTcxLDkgQEAKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CiAJc3RydWN0IEVycm9ySW5mbyAqZWk7CiAKLQljID0gY21kX3NwZWNpYWxfYWxsb2MoaCk7Ci0KKwljID0gY21kX2FsbG9jKGgpOwogCWlmIChjID09IE5VTEwpIHsJCQkvKiB0cm91YmxlLi4uICovCi0JCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWRfc3BlY2lhbF9hbGxvYyByZXR1cm5lZCBOVUxMIVxuIik7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWRfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTIwOTgsNyArMjE4OSw3IEBACiAJCXJjID0gLTE7CiAJfQogb3V0OgotCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CisJY21kX2ZyZWUoaCwgYyk7CiAJcmV0dXJuIHJjOwogCX0KIApAQCAtMjEwOSwxMCArMjIwMCwxMCBAQAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKIAlzdHJ1Y3QgRXJyb3JJbmZvICplaTsKIAotCWMgPSBjbWRfc3BlY2lhbF9hbGxvYyhoKTsKKwljID0gY21kX2FsbG9jKGgpOwogCiAJaWYgKGMgPT0gTlVMTCkgewkJCS8qIHRyb3VibGUuLi4gKi8KLQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNtZF9zcGVjaWFsX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKKwkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgImNtZF9hbGxvYyByZXR1cm5lZCBOVUxMIVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMjEyOCw3ICsyMjE5LDcgQEAKIAkJaHBzYV9zY3NpX2ludGVycHJldF9lcnJvcihoLCBjKTsKIAkJcmMgPSAtMTsKIAl9Ci0JY21kX3NwZWNpYWxfZnJlZShoLCBjKTsKKwljbWRfZnJlZShoLCBjKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTIxOTEsMTUgKzIyODIsMTMgQEAKIAkJCWxlMTZfdG9fY3B1KG1hcF9idWZmLT5yb3dfY250KSk7CiAJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgImxheW91dF9tYXBfY291bnQgPSAldVxuIiwKIAkJCWxlMTZfdG9fY3B1KG1hcF9idWZmLT5sYXlvdXRfbWFwX2NvdW50KSk7Ci0JZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgImZsYWdzID0gJXVcbiIsCisJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgImZsYWdzID0gMHgleFxuIiwKIAkJCWxlMTZfdG9fY3B1KG1hcF9idWZmLT5mbGFncykpOwotCWlmIChtYXBfYnVmZi0+ZmxhZ3MgJiBSQUlEX01BUF9GTEFHX0VOQ1JZUFRfT04pCi0JCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICJlbmNyeXB5dGlvbiA9IE9OXG4iKTsKLQllbHNlCi0JCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICJlbmNyeXB5dGlvbiA9IE9GRlxuIik7CisJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgImVuY3J5cHl0aW9uID0gJXNcbiIsCisJCQlsZTE2X3RvX2NwdShtYXBfYnVmZi0+ZmxhZ3MpICYKKwkJCVJBSURfTUFQX0ZMQUdfRU5DUllQVF9PTiA/ICAiT04iIDogIk9GRiIpOwogCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICJkZWtpbmRleCA9ICV1XG4iLAogCQkJbGUxNl90b19jcHUobWFwX2J1ZmYtPmRla2luZGV4KSk7Ci0KIAltYXBfY250ID0gbGUxNl90b19jcHUobWFwX2J1ZmYtPmxheW91dF9tYXBfY291bnQpOwogCWZvciAobWFwID0gMDsgbWFwIDwgbWFwX2NudDsgbWFwKyspIHsKIAkJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIk1hcCV1OlxuIiwgbWFwKTsKQEAgLTIyMzgsMjYgKzIzMjcsMjYgQEAKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CiAJc3RydWN0IEVycm9ySW5mbyAqZWk7CiAKLQljID0gY21kX3NwZWNpYWxfYWxsb2MoaCk7CisJYyA9IGNtZF9hbGxvYyhoKTsKIAlpZiAoYyA9PSBOVUxMKSB7Ci0JCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWRfc3BlY2lhbF9hbGxvYyByZXR1cm5lZCBOVUxMIVxuIik7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWRfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJaWYgKGZpbGxfY21kKGMsIEhQU0FfR0VUX1JBSURfTUFQLCBoLCAmdGhpc19kZXZpY2UtPnJhaWRfbWFwLAogCQkJc2l6ZW9mKHRoaXNfZGV2aWNlLT5yYWlkX21hcCksIDAsCiAJCQlzY3NpM2FkZHIsIFRZUEVfQ01EKSkgewogCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiT3V0IG9mIG1lbW9yeSBpbiBocHNhX2dldF9yYWlkX21hcCgpXG4iKTsKLQkJY21kX3NwZWNpYWxfZnJlZShoLCBjKTsKKwkJY21kX2ZyZWUoaCwgYyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlocHNhX3Njc2lfZG9fc2ltcGxlX2NtZF93aXRoX3JldHJ5KGgsIGMsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJZWkgPSBjLT5lcnJfaW5mbzsKIAlpZiAoZWktPkNvbW1hbmRTdGF0dXMgIT0gMCAmJiBlaS0+Q29tbWFuZFN0YXR1cyAhPSBDTURfREFUQV9VTkRFUlJVTikgewogCQlocHNhX3Njc2lfaW50ZXJwcmV0X2Vycm9yKGgsIGMpOwotCQljbWRfc3BlY2lhbF9mcmVlKGgsIGMpOworCQljbWRfZnJlZShoLCBjKTsKIAkJcmV0dXJuIC0xOwogCX0KLQljbWRfc3BlY2lhbF9mcmVlKGgsIGMpOworCWNtZF9mcmVlKGgsIGMpOwogCiAJLyogQHRvZG8gaW4gdGhlIGZ1dHVyZSwgZHluYW1pY2FsbHkgYWxsb2NhdGUgUkFJRCBtYXAgbWVtb3J5ICovCiAJaWYgKGxlMzJfdG9fY3B1KHRoaXNfZGV2aWNlLT5yYWlkX21hcC5zdHJ1Y3R1cmVfc2l6ZSkgPgpAQCAtMjI2OSw2ICsyMzU4LDM0IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IGhwc2FfYm1pY19pZF9waHlzaWNhbF9kZXZpY2Uoc3RydWN0IGN0bHJfaW5mbyAqaCwKKwkJdW5zaWduZWQgY2hhciBzY3NpM2FkZHJbXSwgdTE2IGJtaWNfZGV2aWNlX2luZGV4LAorCQlzdHJ1Y3QgYm1pY19pZGVudGlmeV9waHlzaWNhbF9kZXZpY2UgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUpCit7CisJaW50IHJjID0gSU9fT0s7CisJc3RydWN0IENvbW1hbmRMaXN0ICpjOworCXN0cnVjdCBFcnJvckluZm8gKmVpOworCisJYyA9IGNtZF9hbGxvYyhoKTsKKwlyYyA9IGZpbGxfY21kKGMsIEJNSUNfSURFTlRJRllfUEhZU0lDQUxfREVWSUNFLCBoLCBidWYsIGJ1ZnNpemUsCisJCTAsIFJBSURfQ1RMUl9MVU5JRCwgVFlQRV9DTUQpOworCWlmIChyYykKKwkJZ290byBvdXQ7CisKKwljLT5SZXF1ZXN0LkNEQlsyXSA9IGJtaWNfZGV2aWNlX2luZGV4ICYgMHhmZjsKKwljLT5SZXF1ZXN0LkNEQls5XSA9IChibWljX2RldmljZV9pbmRleCA+PiA4KSAmIDB4ZmY7CisKKwlocHNhX3Njc2lfZG9fc2ltcGxlX2NtZF93aXRoX3JldHJ5KGgsIGMsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJZWkgPSBjLT5lcnJfaW5mbzsKKwlpZiAoZWktPkNvbW1hbmRTdGF0dXMgIT0gMCAmJiBlaS0+Q29tbWFuZFN0YXR1cyAhPSBDTURfREFUQV9VTkRFUlJVTikgeworCQlocHNhX3Njc2lfaW50ZXJwcmV0X2Vycm9yKGgsIGMpOworCQlyYyA9IC0xOworCX0KK291dDoKKwljbWRfZnJlZShoLCBjKTsKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbnQgaHBzYV92cGRfcGFnZV9zdXBwb3J0ZWQoc3RydWN0IGN0bHJfaW5mbyAqaCwKIAl1bnNpZ25lZCBjaGFyIHNjc2kzYWRkcltdLCB1OCBwYWdlKQogewpAQCAtMjM2OSw3ICsyNDg2LDcgQEAKIH0KIAogc3RhdGljIGludCBocHNhX3Njc2lfZG9fcmVwb3J0X2x1bnMoc3RydWN0IGN0bHJfaW5mbyAqaCwgaW50IGxvZ2ljYWwsCi0JCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpidWYsIGludCBidWZzaXplLAorCQl2b2lkICpidWYsIGludCBidWZzaXplLAogCQlpbnQgZXh0ZW5kZWRfcmVzcG9uc2UpCiB7CiAJaW50IHJjID0gSU9fT0s7CkBAIC0yMzc3LDkgKzI0OTQsOSBAQAogCXVuc2lnbmVkIGNoYXIgc2NzaTNhZGRyWzhdOwogCXN0cnVjdCBFcnJvckluZm8gKmVpOwogCi0JYyA9IGNtZF9zcGVjaWFsX2FsbG9jKGgpOworCWMgPSBjbWRfYWxsb2MoaCk7CiAJaWYgKGMgPT0gTlVMTCkgewkJCS8qIHRyb3VibGUuLi4gKi8KLQkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAiY21kX3NwZWNpYWxfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOworCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJjbWRfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCS8qIGFkZHJlc3MgdGhlIGNvbnRyb2xsZXIgKi8KQEAgLTIzOTgsMjQgKzI1MTUsMjYgQEAKIAkJaHBzYV9zY3NpX2ludGVycHJldF9lcnJvcihoLCBjKTsKIAkJcmMgPSAtMTsKIAl9IGVsc2UgewotCQlpZiAoYnVmLT5leHRlbmRlZF9yZXNwb25zZV9mbGFnICE9IGV4dGVuZGVkX3Jlc3BvbnNlKSB7CisJCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpybGQgPSBidWY7CisKKwkJaWYgKHJsZC0+ZXh0ZW5kZWRfcmVzcG9uc2VfZmxhZyAhPSBleHRlbmRlZF9yZXNwb25zZSkgewogCQkJZGV2X2VycigmaC0+cGRldi0+ZGV2LAogCQkJCSJyZXBvcnQgbHVucyByZXF1ZXN0ZWQgZm9ybWF0ICV1LCBnb3QgJXVcbiIsCiAJCQkJZXh0ZW5kZWRfcmVzcG9uc2UsCi0JCQkJYnVmLT5leHRlbmRlZF9yZXNwb25zZV9mbGFnKTsKKwkJCQlybGQtPmV4dGVuZGVkX3Jlc3BvbnNlX2ZsYWcpOwogCQkJcmMgPSAtMTsKIAkJfQogCX0KIG91dDoKLQljbWRfc3BlY2lhbF9mcmVlKGgsIGMpOworCWNtZF9mcmVlKGgsIGMpOwogCXJldHVybiByYzsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgaHBzYV9zY3NpX2RvX3JlcG9ydF9waHlzX2x1bnMoc3RydWN0IGN0bHJfaW5mbyAqaCwKLQkJc3RydWN0IFJlcG9ydExVTmRhdGEgKmJ1ZiwKLQkJaW50IGJ1ZnNpemUsIGludCBleHRlbmRlZF9yZXNwb25zZSkKKwkJc3RydWN0IFJlcG9ydEV4dGVuZGVkTFVOZGF0YSAqYnVmLCBpbnQgYnVmc2l6ZSkKIHsKLQlyZXR1cm4gaHBzYV9zY3NpX2RvX3JlcG9ydF9sdW5zKGgsIDAsIGJ1ZiwgYnVmc2l6ZSwgZXh0ZW5kZWRfcmVzcG9uc2UpOworCXJldHVybiBocHNhX3Njc2lfZG9fcmVwb3J0X2x1bnMoaCwgMCwgYnVmLCBidWZzaXplLAorCQkJCQkJSFBTQV9SRVBPUlRfUEhZU19FWFRFTkRFRCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGhwc2Ffc2NzaV9kb19yZXBvcnRfbG9nX2x1bnMoc3RydWN0IGN0bHJfaW5mbyAqaCwKQEAgLTI1OTAsNiArMjcwOSw3IEBACiAJCXRoaXNfZGV2aWNlLT5vZmZsb2FkX2NvbmZpZyA9IDA7CiAJCXRoaXNfZGV2aWNlLT5vZmZsb2FkX2VuYWJsZWQgPSAwOwogCQl0aGlzX2RldmljZS0+dm9sdW1lX29mZmxpbmUgPSAwOworCQl0aGlzX2RldmljZS0+cXVldWVfZGVwdGggPSBoLT5ucl9jbWRzOwogCX0KIAogCWlmIChpc19PQkRSX2RldmljZSkgewpAQCAtMjczMiw3ICsyODUyLDYgQEAKIHsKIAlzdHJ1Y3QgUmVwb3J0RXh0ZW5kZWRMVU5kYXRhICpwaHlzaWNhbHMgPSBOVUxMOwogCWludCByZXNwb25zZXNpemUgPSAyNDsJLyogc2l6ZSBvZiBwaHlzaWNhbCBleHRlbmRlZCByZXNwb25zZSAqLwotCWludCBleHRlbmRlZCA9IDI7CS8qIGZsYWcgZm9yY2VzIHJlcG9ydGluZyAnb3RoZXIgZGV2IGluZm8nLiAqLwogCWludCByZXBvcnRzaXplID0gc2l6ZW9mKCpwaHlzaWNhbHMpICsgSFBTQV9NQVhfUEhZU19MVU4gKiByZXNwb25zZXNpemU7CiAJdTMyIG5waHlzaWNhbHMgPSAwOwkvKiBudW1iZXIgb2YgcmVwb3J0ZWQgcGh5c2ljYWwgZGV2cyAqLwogCWludCBmb3VuZCA9IDA7CQkvKiBmb3VuZCBtYXRjaCAoMSkgb3Igbm90ICgwKSAqLwpAQCAtMjc0MSw4ICsyODYwLDggQEAKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOwkvKiBzY3NpIGNvbW1hbmQgd2l0aGluIHJlcXVlc3QgYmVpbmcgYWJvcnRlZCAqLwogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmQ7IC8qIGRldmljZSBvZiByZXF1ZXN0IGJlaW5nIGFib3J0ZWQgKi8KIAlzdHJ1Y3QgaW9fYWNjZWwyX2NtZCAqYzJhOyAvKiBpb2FjY2VsMiBjb21tYW5kIHRvIGFib3J0ICovCi0JdTMyIGl0X25leHVzOwkJLyogNCBieXRlIGRldmljZSBoYW5kbGUgZm9yIHRoZSBpb2FjY2VsMiBjbWQgKi8KLQl1MzIgc2NzaV9uZXh1czsJCS8qIDQgYnl0ZSBkZXZpY2UgaGFuZGxlIGZvciB0aGUgaW9hY2NlbDIgY21kICovCisJX19sZTMyIGl0X25leHVzOwkvKiA0IGJ5dGUgZGV2aWNlIGhhbmRsZSBmb3IgdGhlIGlvYWNjZWwyIGNtZCAqLworCV9fbGUzMiBzY3NpX25leHVzOwkvKiA0IGJ5dGUgZGV2aWNlIGhhbmRsZSBmb3IgdGhlIGlvYWNjZWwyIGNtZCAqLwogCiAJaWYgKGlvYWNjZWwyX2NtZF90b19hYm9ydC0+Y21kX3R5cGUgIT0gQ01EX0lPQUNDRUwyKQogCQlyZXR1cm4gMDsgLyogbm8gbWF0Y2ggKi8KQEAgLTI3NjEsOCArMjg4MCw4IEBACiAJCXJldHVybiAwOyAvKiBubyBtYXRjaCAqLwogCiAJaXRfbmV4dXMgPSBjcHVfdG9fbGUzMihkLT5pb2FjY2VsX2hhbmRsZSk7Ci0Jc2NzaV9uZXh1cyA9IGNwdV90b19sZTMyKGMyYS0+c2NzaV9uZXh1cyk7Ci0JZmluZCA9IGMyYS0+c2NzaV9uZXh1czsKKwlzY3NpX25leHVzID0gYzJhLT5zY3NpX25leHVzOworCWZpbmQgPSBsZTMyX3RvX2NwdShjMmEtPnNjc2lfbmV4dXMpOwogCiAJaWYgKGgtPnJhaWRfb2ZmbG9hZF9kZWJ1ZyA+IDApCiAJCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsCkBAIC0yNzc5LDggKzI4OTgsNyBAQAogCXBoeXNpY2FscyA9IGt6YWxsb2MocmVwb3J0c2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHBoeXNpY2FscyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKLQlpZiAoaHBzYV9zY3NpX2RvX3JlcG9ydF9waHlzX2x1bnMoaCwgKHN0cnVjdCBSZXBvcnRMVU5kYXRhICopIHBoeXNpY2FscywKLQkJcmVwb3J0c2l6ZSwgZXh0ZW5kZWQpKSB7CisJaWYgKGhwc2Ffc2NzaV9kb19yZXBvcnRfcGh5c19sdW5zKGgsIHBoeXNpY2FscywgcmVwb3J0c2l6ZSkpIHsKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LAogCQkJIkNhbid0IGxvb2t1cCAlcyBkZXZpY2UgaGFuZGxlOiByZXBvcnQgcGh5c2ljYWwgTFVOcyBmYWlsZWQuXG4iLAogCQkJIkhQIFNTRCBTbWFydCBQYXRoIik7CkBAIC0yODIxLDM0ICsyOTM5LDIwIEBACiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb3RoZXJ3aXNlLgogICovCiBzdGF0aWMgaW50IGhwc2FfZ2F0aGVyX2x1bl9pbmZvKHN0cnVjdCBjdGxyX2luZm8gKmgsCi0JaW50IHJlcG9ydHBoeXNsdW5zaXplLCBpbnQgcmVwb3J0bG9nbHVuc2l6ZSwKLQlzdHJ1Y3QgUmVwb3J0TFVOZGF0YSAqcGh5c2RldiwgdTMyICpucGh5c2ljYWxzLCBpbnQgKnBoeXNpY2FsX21vZGUsCisJc3RydWN0IFJlcG9ydEV4dGVuZGVkTFVOZGF0YSAqcGh5c2RldiwgdTMyICpucGh5c2ljYWxzLAogCXN0cnVjdCBSZXBvcnRMVU5kYXRhICpsb2dkZXYsIHUzMiAqbmxvZ2ljYWxzKQogewotCWludCBwaHlzaWNhbF9lbnRyeV9zaXplID0gODsKLQotCSpwaHlzaWNhbF9tb2RlID0gMDsKLQotCS8qIEZvciBJL08gYWNjZWxlcmF0b3IgbW9kZSB3ZSBuZWVkIHRvIHJlYWQgcGh5c2ljYWwgZGV2aWNlIGhhbmRsZXMgKi8KLQlpZiAoaC0+dHJhbnNNZXRob2QgJiBDRkdUQkxfVHJhbnNfaW9fYWNjZWwxIHx8Ci0JCWgtPnRyYW5zTWV0aG9kICYgQ0ZHVEJMX1RyYW5zX2lvX2FjY2VsMikgewotCQkqcGh5c2ljYWxfbW9kZSA9IEhQU0FfUkVQT1JUX1BIWVNfRVhURU5ERUQ7Ci0JCXBoeXNpY2FsX2VudHJ5X3NpemUgPSAyNDsKLQl9Ci0JaWYgKGhwc2Ffc2NzaV9kb19yZXBvcnRfcGh5c19sdW5zKGgsIHBoeXNkZXYsIHJlcG9ydHBoeXNsdW5zaXplLAotCQkJCQkJCSpwaHlzaWNhbF9tb2RlKSkgeworCWlmIChocHNhX3Njc2lfZG9fcmVwb3J0X3BoeXNfbHVucyhoLCBwaHlzZGV2LCBzaXplb2YoKnBoeXNkZXYpKSkgewogCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJyZXBvcnQgcGh5c2ljYWwgTFVOcyBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KLQkqbnBoeXNpY2FscyA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKXBoeXNkZXYtPkxVTkxpc3RMZW5ndGgpKSAvCi0JCQkJCQkJcGh5c2ljYWxfZW50cnlfc2l6ZTsKKwkqbnBoeXNpY2FscyA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKXBoeXNkZXYtPkxVTkxpc3RMZW5ndGgpKSAvIDI0OwogCWlmICgqbnBoeXNpY2FscyA+IEhQU0FfTUFYX1BIWVNfTFVOKSB7Ci0JCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJtYXhpbXVtIHBoeXNpY2FsIExVTnMgKCVkKSBleGNlZWRlZC4iCi0JCQkiICAlZCBMVU5zIGlnbm9yZWQuXG4iLCBIUFNBX01BWF9QSFlTX0xVTiwKLQkJCSpucGh5c2ljYWxzIC0gSFBTQV9NQVhfUEhZU19MVU4pOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAibWF4aW11bSBwaHlzaWNhbCBMVU5zICglZCkgZXhjZWVkZWQuICVkIExVTnMgaWdub3JlZC5cbiIsCisJCQlIUFNBX01BWF9QSFlTX0xVTiwgKm5waHlzaWNhbHMgLSBIUFNBX01BWF9QSFlTX0xVTik7CiAJCSpucGh5c2ljYWxzID0gSFBTQV9NQVhfUEhZU19MVU47CiAJfQotCWlmIChocHNhX3Njc2lfZG9fcmVwb3J0X2xvZ19sdW5zKGgsIGxvZ2RldiwgcmVwb3J0bG9nbHVuc2l6ZSkpIHsKKwlpZiAoaHBzYV9zY3NpX2RvX3JlcG9ydF9sb2dfbHVucyhoLCBsb2dkZXYsIHNpemVvZigqbG9nZGV2KSkpIHsKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAicmVwb3J0IGxvZ2ljYWwgTFVOcyBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTI5MjEsNiArMzAyNSwzMyBAQAogCXJldHVybiBoYmFfbW9kZV9lbmFibGVkOwogfQogCisvKiBnZXQgcGh5c2ljYWwgZHJpdmUgaW9hY2NlbCBoYW5kbGUgYW5kIHF1ZXVlIGRlcHRoICovCitzdGF0aWMgdm9pZCBocHNhX2dldF9pb2FjY2VsX2RyaXZlX2luZm8oc3RydWN0IGN0bHJfaW5mbyAqaCwKKwkJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqZGV2LAorCQl1OCAqbHVuYWRkcmJ5dGVzLAorCQlzdHJ1Y3QgYm1pY19pZGVudGlmeV9waHlzaWNhbF9kZXZpY2UgKmlkX3BoeXMpCit7CisJaW50IHJjOworCXN0cnVjdCBleHRfcmVwb3J0X2x1bl9lbnRyeSAqcmxlID0KKwkJKHN0cnVjdCBleHRfcmVwb3J0X2x1bl9lbnRyeSAqKSBsdW5hZGRyYnl0ZXM7CisKKwlkZXYtPmlvYWNjZWxfaGFuZGxlID0gcmxlLT5pb2FjY2VsX2hhbmRsZTsKKwltZW1zZXQoaWRfcGh5cywgMCwgc2l6ZW9mKCppZF9waHlzKSk7CisJcmMgPSBocHNhX2JtaWNfaWRfcGh5c2ljYWxfZGV2aWNlKGgsIGx1bmFkZHJieXRlcywKKwkJCUdFVF9CTUlDX0RSSVZFX05VTUJFUihsdW5hZGRyYnl0ZXMpLCBpZF9waHlzLAorCQkJc2l6ZW9mKCppZF9waHlzKSk7CisJaWYgKCFyYykKKwkJLyogUmVzZXJ2ZSBzcGFjZSBmb3IgRlcgb3BlcmF0aW9ucyAqLworI2RlZmluZSBEUklWRV9DTURTX1JFU0VSVkVEX0ZPUl9GVyAyCisjZGVmaW5lIERSSVZFX1FVRVVFX0RFUFRIIDcKKwkJZGV2LT5xdWV1ZV9kZXB0aCA9CisJCQlsZTE2X3RvX2NwdShpZF9waHlzLT5jdXJyZW50X3F1ZXVlX2RlcHRoX2xpbWl0KSAtCisJCQkJRFJJVkVfQ01EU19SRVNFUlZFRF9GT1JfRlc7CisJZWxzZQorCQlkZXYtPnF1ZXVlX2RlcHRoID0gRFJJVkVfUVVFVUVfREVQVEg7IC8qIGNvbnNlcnZhdGl2ZSAqLworCWF0b21pY19zZXQoJmRldi0+aW9hY2NlbF9jbWRzX291dCwgMCk7Cit9CisKIHN0YXRpYyB2b2lkIGhwc2FfdXBkYXRlX3Njc2lfZGV2aWNlcyhzdHJ1Y3QgY3Rscl9pbmZvICpoLCBpbnQgaG9zdG5vKQogewogCS8qIHRoZSBpZGVhIGhlcmUgaXMgd2UgY291bGQgZ2V0IG5vdGlmaWVkCkBAIC0yOTM1LDkgKzMwNjYsOSBAQAogCSAqLwogCXN0cnVjdCBSZXBvcnRFeHRlbmRlZExVTmRhdGEgKnBoeXNkZXZfbGlzdCA9IE5VTEw7CiAJc3RydWN0IFJlcG9ydExVTmRhdGEgKmxvZ2Rldl9saXN0ID0gTlVMTDsKKwlzdHJ1Y3QgYm1pY19pZGVudGlmeV9waHlzaWNhbF9kZXZpY2UgKmlkX3BoeXMgPSBOVUxMOwogCXUzMiBucGh5c2ljYWxzID0gMDsKIAl1MzIgbmxvZ2ljYWxzID0gMDsKLQlpbnQgcGh5c2ljYWxfbW9kZSA9IDA7CiAJdTMyIG5kZXZfYWxsb2NhdGVkID0gMDsKIAlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICoqY3VycmVudHNkLCAqdGhpc19kZXZpY2UsICp0bXBkZXZpY2U7CiAJaW50IG5jdXJyZW50ID0gMDsKQEAgLTI5NTAsOCArMzA4MSwxMCBAQAogCXBoeXNkZXZfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKCpwaHlzZGV2X2xpc3QpLCBHRlBfS0VSTkVMKTsKIAlsb2dkZXZfbGlzdCA9IGt6YWxsb2Moc2l6ZW9mKCpsb2dkZXZfbGlzdCksIEdGUF9LRVJORUwpOwogCXRtcGRldmljZSA9IGt6YWxsb2Moc2l6ZW9mKCp0bXBkZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlpZF9waHlzID0ga3phbGxvYyhzaXplb2YoKmlkX3BoeXMpLCBHRlBfS0VSTkVMKTsKIAotCWlmICghY3VycmVudHNkIHx8ICFwaHlzZGV2X2xpc3QgfHwgIWxvZ2Rldl9saXN0IHx8ICF0bXBkZXZpY2UpIHsKKwlpZiAoIWN1cnJlbnRzZCB8fCAhcGh5c2Rldl9saXN0IHx8ICFsb2dkZXZfbGlzdCB8fAorCQkhdG1wZGV2aWNlIHx8ICFpZF9waHlzKSB7CiAJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yOTY4LDEwICszMTAxLDggQEAKIAogCWgtPmhiYV9tb2RlX2VuYWJsZWQgPSByZXNjYW5faGJhX21vZGU7CiAKLQlpZiAoaHBzYV9nYXRoZXJfbHVuX2luZm8oaCwKLQkJCXNpemVvZigqcGh5c2Rldl9saXN0KSwgc2l6ZW9mKCpsb2dkZXZfbGlzdCksCi0JCQkoc3RydWN0IFJlcG9ydExVTmRhdGEgKikgcGh5c2Rldl9saXN0LCAmbnBoeXNpY2FscywKLQkJCSZwaHlzaWNhbF9tb2RlLCBsb2dkZXZfbGlzdCwgJm5sb2dpY2FscykpCisJaWYgKGhwc2FfZ2F0aGVyX2x1bl9pbmZvKGgsIHBoeXNkZXZfbGlzdCwgJm5waHlzaWNhbHMsCisJCQlsb2dkZXZfbGlzdCwgJm5sb2dpY2FscykpCiAJCWdvdG8gb3V0OwogCiAJLyogV2UgbWlnaHQgc2VlIHVwIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsb2dpY2FsIGFuZCBwaHlzaWNhbCBkaXNrcwpAQCAtMzA2OCwxMCArMzE5OSwxMSBAQAogCQkJCW5jdXJyZW50Kys7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQlpZiAocGh5c2ljYWxfbW9kZSA9PSBIUFNBX1JFUE9SVF9QSFlTX0VYVEVOREVEKSB7Ci0JCQkJbWVtY3B5KCZ0aGlzX2RldmljZS0+aW9hY2NlbF9oYW5kbGUsCi0JCQkJCSZsdW5hZGRyYnl0ZXNbMjBdLAotCQkJCQlzaXplb2YodGhpc19kZXZpY2UtPmlvYWNjZWxfaGFuZGxlKSk7CisJCQlpZiAoaC0+dHJhbnNNZXRob2QgJiBDRkdUQkxfVHJhbnNfaW9fYWNjZWwxIHx8CisJCQkJaC0+dHJhbnNNZXRob2QgJiBDRkdUQkxfVHJhbnNfaW9fYWNjZWwyKSB7CisJCQkJaHBzYV9nZXRfaW9hY2NlbF9kcml2ZV9pbmZvKGgsIHRoaXNfZGV2aWNlLAorCQkJCQkJCWx1bmFkZHJieXRlcywgaWRfcGh5cyk7CisJCQkJYXRvbWljX3NldCgmdGhpc19kZXZpY2UtPmlvYWNjZWxfY21kc19vdXQsIDApOwogCQkJCW5jdXJyZW50Kys7CiAJCQl9CiAJCQlicmVhazsKQEAgLTMwOTUsNiArMzIyNyw3IEBACiAJCWlmIChuY3VycmVudCA+PSBIUFNBX01BWF9ERVZJQ0VTKQogCQkJYnJlYWs7CiAJfQorCWhwc2FfdXBkYXRlX2xvZ19kcml2ZV9waHlzX2RyaXZlX3B0cnMoaCwgY3VycmVudHNkLCBuY3VycmVudCk7CiAJYWRqdXN0X2hwc2Ffc2NzaV90YWJsZShoLCBob3N0bm8sIGN1cnJlbnRzZCwgbmN1cnJlbnQpOwogb3V0OgogCWtmcmVlKHRtcGRldmljZSk7CkBAIC0zMTAzLDkgKzMyMzYsMjIgQEAKIAlrZnJlZShjdXJyZW50c2QpOwogCWtmcmVlKHBoeXNkZXZfbGlzdCk7CiAJa2ZyZWUobG9nZGV2X2xpc3QpOworCWtmcmVlKGlkX3BoeXMpOwogfQogCi0vKiBocHNhX3NjYXR0ZXJfZ2F0aGVyIHRha2VzIGEgc3RydWN0IHNjc2lfY21uZCwgKGNtZCksIGFuZCBkb2VzIHRoZSBwY2kKK3N0YXRpYyB2b2lkIGhwc2Ffc2V0X3NnX2Rlc2NyaXB0b3Ioc3RydWN0IFNHRGVzY3JpcHRvciAqZGVzYywKKwkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQoreworCXU2NCBhZGRyNjQgPSAodTY0KSBzZ19kbWFfYWRkcmVzcyhzZyk7CisJdW5zaWduZWQgaW50IGxlbiA9IHNnX2RtYV9sZW4oc2cpOworCisJZGVzYy0+QWRkciA9IGNwdV90b19sZTY0KGFkZHI2NCk7CisJZGVzYy0+TGVuID0gY3B1X3RvX2xlMzIobGVuKTsKKwlkZXNjLT5FeHQgPSAwOworfQorCisvKgorICogaHBzYV9zY2F0dGVyX2dhdGhlciB0YWtlcyBhIHN0cnVjdCBzY3NpX2NtbmQsIChjbWQpLCBhbmQgZG9lcyB0aGUgcGNpCiAgKiBkbWEgbWFwcGluZyAgYW5kIGZpbGxzIGluIHRoZSBzY2F0dGVyIGdhdGhlciBlbnRyaWVzIG9mIHRoZQogICogaHBzYSBjb21tYW5kLCBjcC4KICAqLwpAQCAtMzExMyw5ICszMjU5LDcgQEAKIAkJc3RydWN0IENvbW1hbmRMaXN0ICpjcCwKIAkJc3RydWN0IHNjc2lfY21uZCAqY21kKQogewotCXVuc2lnbmVkIGludCBsZW47CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQl1NjQgYWRkcjY0OwogCWludCB1c2Vfc2csIGksIHNnX2luZGV4LCBjaGFpbmVkOwogCXN0cnVjdCBTR0Rlc2NyaXB0b3IgKmN1cnJfc2c7CiAKQEAgLTMxMzgsMTMgKzMyODIsMTEgQEAKIAkJCWN1cnJfc2cgPSBoLT5jbWRfc2dfbGlzdFtjcC0+Y21kaW5kZXhdOwogCQkJc2dfaW5kZXggPSAwOwogCQl9Ci0JCWFkZHI2NCA9ICh1NjQpIHNnX2RtYV9hZGRyZXNzKHNnKTsKLQkJbGVuICA9IHNnX2RtYV9sZW4oc2cpOwotCQljdXJyX3NnLT5BZGRyID0gY3B1X3RvX2xlNjQoYWRkcjY0KTsKLQkJY3Vycl9zZy0+TGVuID0gY3B1X3RvX2xlMzIobGVuKTsKLQkJY3Vycl9zZy0+RXh0ID0gY3B1X3RvX2xlMzIoMCk7CisJCWhwc2Ffc2V0X3NnX2Rlc2NyaXB0b3IoY3Vycl9zZywgc2cpOwogCQljdXJyX3NnKys7CiAJfQorCisJLyogQmFjayB0aGUgcG9pbnRlciB1cCB0byB0aGUgbGFzdCBlbnRyeSBhbmQgbWFyayBpdCBhcyAibGFzdCIuICovCiAJKC0tY3Vycl9zZyktPkV4dCA9IGNwdV90b19sZTMyKEhQU0FfU0dfTEFTVCk7CiAKIAlpZiAodXNlX3NnICsgY2hhaW5lZCA+IGgtPm1heFNHKQpAQCAtMzE2Myw3ICszMzA1LDcgQEAKIHNnbGlzdF9maW5pc2hlZDoKIAogCWNwLT5IZWFkZXIuU0dMaXN0ID0gKHU4KSB1c2Vfc2c7ICAgLyogbm8uIFNHcyBjb250aWcgaW4gdGhpcyBjbWQgKi8KLQljcC0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNih1c2Vfc2cpOyAvKiB0b3RhbCBzZ3MgaW4gdGhpcyBjbWQgbGlzdCAqLworCWNwLT5IZWFkZXIuU0dUb3RhbCA9IGNwdV90b19sZTE2KHVzZV9zZyk7IC8qIHRvdGFsIHNncyBpbiBjbWQgbGlzdCAqLwogCXJldHVybiAwOwogfQogCkBAIC0zMjE3LDcgKzMzNTksNyBAQAogCiBzdGF0aWMgaW50IGhwc2Ffc2NzaV9pb2FjY2VsMV9xdWV1ZV9jb21tYW5kKHN0cnVjdCBjdGxyX2luZm8gKmgsCiAJc3RydWN0IENvbW1hbmRMaXN0ICpjLCB1MzIgaW9hY2NlbF9oYW5kbGUsIHU4ICpjZGIsIGludCBjZGJfbGVuLAotCXU4ICpzY3NpM2FkZHIpCisJdTggKnNjc2kzYWRkciwgc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqcGh5c19kaXNrKQogewogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IGMtPnNjc2lfY21kOwogCXN0cnVjdCBpb19hY2NlbDFfY21kICpjcCA9ICZoLT5pb2FjY2VsX2NtZF9wb29sW2MtPmNtZGluZGV4XTsKQEAgLTMyMzAsMTMgKzMzNzIsMTcgQEAKIAl1MzIgY29udHJvbCA9IElPQUNDRUwxX0NPTlRST0xfU0lNUExFUVVFVUU7CiAKIAkvKiBUT0RPOiBpbXBsZW1lbnQgY2hhaW5pbmcgc3VwcG9ydCAqLwotCWlmIChzY3NpX3NnX2NvdW50KGNtZCkgPiBoLT5pb2FjY2VsX21heHNnKQorCWlmIChzY3NpX3NnX2NvdW50KGNtZCkgPiBoLT5pb2FjY2VsX21heHNnKSB7CisJCWF0b21pY19kZWMoJnBoeXNfZGlzay0+aW9hY2NlbF9jbWRzX291dCk7CiAJCXJldHVybiBJT19BQ0NFTF9JTkVMSUdJQkxFOworCX0KIAogCUJVR19PTihjbWQtPmNtZF9sZW4gPiBJT0FDQ0VMMV9JT0ZMQUdTX0NEQkxFTl9NQVgpOwogCi0JaWYgKGZpeHVwX2lvYWNjZWxfY2RiKGNkYiwgJmNkYl9sZW4pKQorCWlmIChmaXh1cF9pb2FjY2VsX2NkYihjZGIsICZjZGJfbGVuKSkgeworCQlhdG9taWNfZGVjKCZwaHlzX2Rpc2stPmlvYWNjZWxfY21kc19vdXQpOwogCQlyZXR1cm4gSU9fQUNDRUxfSU5FTElHSUJMRTsKKwl9CiAKIAljLT5jbWRfdHlwZSA9IENNRF9JT0FDQ0VMMTsKIApAQCAtMzI0Niw4ICszMzkyLDEwIEBACiAJQlVHX09OKGMtPmJ1c2FkZHIgJiAweDAwMDAwMDdGKTsKIAogCXVzZV9zZyA9IHNjc2lfZG1hX21hcChjbWQpOwotCWlmICh1c2Vfc2cgPCAwKQorCWlmICh1c2Vfc2cgPCAwKSB7CisJCWF0b21pY19kZWMoJnBoeXNfZGlzay0+aW9hY2NlbF9jbWRzX291dCk7CiAJCXJldHVybiB1c2Vfc2c7CisJfQogCiAJaWYgKHVzZV9zZykgewogCQljdXJyX3NnID0gY3AtPlNHOwpAQCAtMzI4NCwxMSArMzQzMiwxMSBAQAogCiAJYy0+SGVhZGVyLlNHTGlzdCA9IHVzZV9zZzsKIAkvKiBGaWxsIG91dCB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUgdG8gc3VibWl0ICovCi0JY3AtPmRldl9oYW5kbGUgPSBpb2FjY2VsX2hhbmRsZSAmIDB4RkZGRjsKLQljcC0+dHJhbnNmZXJfbGVuID0gdG90YWxfbGVuOwotCWNwLT5pb19mbGFncyA9IElPQUNDRUwxX0lPRkxBR1NfSU9fUkVRIHwKLQkJCShjZGJfbGVuICYgSU9BQ0NFTDFfSU9GTEFHU19DREJMRU5fTUFTSyk7Ci0JY3AtPmNvbnRyb2wgPSBjb250cm9sOworCWNwLT5kZXZfaGFuZGxlID0gY3B1X3RvX2xlMTYoaW9hY2NlbF9oYW5kbGUgJiAweEZGRkYpOworCWNwLT50cmFuc2Zlcl9sZW4gPSBjcHVfdG9fbGUzMih0b3RhbF9sZW4pOworCWNwLT5pb19mbGFncyA9IGNwdV90b19sZTE2KElPQUNDRUwxX0lPRkxBR1NfSU9fUkVRIHwKKwkJCShjZGJfbGVuICYgSU9BQ0NFTDFfSU9GTEFHU19DREJMRU5fTUFTSykpOworCWNwLT5jb250cm9sID0gY3B1X3RvX2xlMzIoY29udHJvbCk7CiAJbWVtY3B5KGNwLT5DREIsIGNkYiwgY2RiX2xlbik7CiAJbWVtY3B5KGNwLT5DSVNTX0xVTiwgc2NzaTNhZGRyLCA4KTsKIAkvKiBUYWcgd2FzIGFscmVhZHkgc2V0IGF0IGluaXQgdGltZS4gKi8KQEAgLTMzMDYsOCArMzQ1NCwxMCBAQAogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IGMtPnNjc2lfY21kOwogCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKmRldiA9IGNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAorCWMtPnBoeXNfZGlzayA9IGRldjsKKwogCXJldHVybiBocHNhX3Njc2lfaW9hY2NlbF9xdWV1ZV9jb21tYW5kKGgsIGMsIGRldi0+aW9hY2NlbF9oYW5kbGUsCi0JCWNtZC0+Y21uZCwgY21kLT5jbWRfbGVuLCBkZXYtPnNjc2kzYWRkcik7CisJCWNtZC0+Y21uZCwgY21kLT5jbWRfbGVuLCBkZXYtPnNjc2kzYWRkciwgZGV2KTsKIH0KIAogLyoKQEAgLTMzMjEsMTAgKzM0NzEsOCBAQAogCXN0cnVjdCByYWlkX21hcF9kYXRhICptYXAgPSAmZGV2LT5yYWlkX21hcDsKIAl1NjQgZmlyc3RfYmxvY2s7CiAKLQlCVUdfT04oIShkZXYtPm9mZmxvYWRfY29uZmlnICYmIGRldi0+b2ZmbG9hZF9lbmFibGVkKSk7Ci0KIAkvKiBBcmUgd2UgZG9pbmcgZW5jcnlwdGlvbiBvbiB0aGlzIGRldmljZSAqLwotCWlmICghKG1hcC0+ZmxhZ3MgJiBSQUlEX01BUF9GTEFHX0VOQ1JZUFRfT04pKQorCWlmICghKGxlMTZfdG9fY3B1KG1hcC0+ZmxhZ3MpICYgUkFJRF9NQVBfRkxBR19FTkNSWVBUX09OKSkKIAkJcmV0dXJuOwogCS8qIFNldCB0aGUgZGF0YSBlbmNyeXB0aW9uIGtleSBpbmRleC4gKi8KIAljcC0+ZGVraW5kZXggPSBtYXAtPmRla2luZGV4OwpAQCAtMzM0MCwxMDEgKzM0ODgsMzggQEAKIAkvKiBSZXF1aXJlZD8gNi1ieXRlIGNkYnMgZWxpbWluYXRlZCBieSBmaXh1cF9pb2FjY2VsX2NkYiAqLwogCWNhc2UgV1JJVEVfNjoKIAljYXNlIFJFQURfNjoKLQkJaWYgKG1hcC0+dm9sdW1lX2Jsa19zaXplID09IDUxMikgewotCQkJY3AtPnR3ZWFrX2xvd2VyID0KLQkJCQkoKCh1MzIpIGNtZC0+Y21uZFsyXSkgPDwgOCkgfAotCQkJCQljbWQtPmNtbmRbM107Ci0JCQljcC0+dHdlYWtfdXBwZXIgPSAwOwotCQl9IGVsc2UgewotCQkJZmlyc3RfYmxvY2sgPQotCQkJCSgoKHU2NCkgY21kLT5jbW5kWzJdKSA8PCA4KSB8Ci0JCQkJCWNtZC0+Y21uZFszXTsKLQkJCWZpcnN0X2Jsb2NrID0gKGZpcnN0X2Jsb2NrICogbWFwLT52b2x1bWVfYmxrX3NpemUpLzUxMjsKLQkJCWNwLT50d2Vha19sb3dlciA9ICh1MzIpZmlyc3RfYmxvY2s7Ci0JCQljcC0+dHdlYWtfdXBwZXIgPSAodTMyKShmaXJzdF9ibG9jayA+PiAzMik7Ci0JCX0KKwkJZmlyc3RfYmxvY2sgPSBnZXRfdW5hbGlnbmVkX2JlMTYoJmNtZC0+Y21uZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgV1JJVEVfMTA6CiAJY2FzZSBSRUFEXzEwOgotCQlpZiAobWFwLT52b2x1bWVfYmxrX3NpemUgPT0gNTEyKSB7Ci0JCQljcC0+dHdlYWtfbG93ZXIgPQotCQkJCSgoKHUzMikgY21kLT5jbW5kWzJdKSA8PCAyNCkgfAotCQkJCSgoKHUzMikgY21kLT5jbW5kWzNdKSA8PCAxNikgfAotCQkJCSgoKHUzMikgY21kLT5jbW5kWzRdKSA8PCA4KSB8Ci0JCQkJCWNtZC0+Y21uZFs1XTsKLQkJCWNwLT50d2Vha191cHBlciA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlmaXJzdF9ibG9jayA9Ci0JCQkJKCgodTY0KSBjbWQtPmNtbmRbMl0pIDw8IDI0KSB8Ci0JCQkJKCgodTY0KSBjbWQtPmNtbmRbM10pIDw8IDE2KSB8Ci0JCQkJKCgodTY0KSBjbWQtPmNtbmRbNF0pIDw8IDgpIHwKLQkJCQkJY21kLT5jbW5kWzVdOwotCQkJZmlyc3RfYmxvY2sgPSAoZmlyc3RfYmxvY2sgKiBtYXAtPnZvbHVtZV9ibGtfc2l6ZSkvNTEyOwotCQkJY3AtPnR3ZWFrX2xvd2VyID0gKHUzMilmaXJzdF9ibG9jazsKLQkJCWNwLT50d2Vha191cHBlciA9ICh1MzIpKGZpcnN0X2Jsb2NrID4+IDMyKTsKLQkJfQotCQlicmVhazsKIAkvKiBSZXF1aXJlZD8gMTItYnl0ZSBjZGJzIGVsaW1pbmF0ZWQgYnkgZml4dXBfaW9hY2NlbF9jZGIgKi8KIAljYXNlIFdSSVRFXzEyOgogCWNhc2UgUkVBRF8xMjoKLQkJaWYgKG1hcC0+dm9sdW1lX2Jsa19zaXplID09IDUxMikgewotCQkJY3AtPnR3ZWFrX2xvd2VyID0KLQkJCQkoKCh1MzIpIGNtZC0+Y21uZFsyXSkgPDwgMjQpIHwKLQkJCQkoKCh1MzIpIGNtZC0+Y21uZFszXSkgPDwgMTYpIHwKLQkJCQkoKCh1MzIpIGNtZC0+Y21uZFs0XSkgPDwgOCkgfAotCQkJCQljbWQtPmNtbmRbNV07Ci0JCQljcC0+dHdlYWtfdXBwZXIgPSAwOwotCQl9IGVsc2UgewotCQkJZmlyc3RfYmxvY2sgPQotCQkJCSgoKHU2NCkgY21kLT5jbW5kWzJdKSA8PCAyNCkgfAotCQkJCSgoKHU2NCkgY21kLT5jbW5kWzNdKSA8PCAxNikgfAotCQkJCSgoKHU2NCkgY21kLT5jbW5kWzRdKSA8PCA4KSB8Ci0JCQkJCWNtZC0+Y21uZFs1XTsKLQkJCWZpcnN0X2Jsb2NrID0gKGZpcnN0X2Jsb2NrICogbWFwLT52b2x1bWVfYmxrX3NpemUpLzUxMjsKLQkJCWNwLT50d2Vha19sb3dlciA9ICh1MzIpZmlyc3RfYmxvY2s7Ci0JCQljcC0+dHdlYWtfdXBwZXIgPSAodTMyKShmaXJzdF9ibG9jayA+PiAzMik7Ci0JCX0KKwkJZmlyc3RfYmxvY2sgPSBnZXRfdW5hbGlnbmVkX2JlMzIoJmNtZC0+Y21uZFsyXSk7CiAJCWJyZWFrOwogCWNhc2UgV1JJVEVfMTY6CiAJY2FzZSBSRUFEXzE2OgotCQlpZiAobWFwLT52b2x1bWVfYmxrX3NpemUgPT0gNTEyKSB7Ci0JCQljcC0+dHdlYWtfbG93ZXIgPQotCQkJCSgoKHUzMikgY21kLT5jbW5kWzZdKSA8PCAyNCkgfAotCQkJCSgoKHUzMikgY21kLT5jbW5kWzddKSA8PCAxNikgfAotCQkJCSgoKHUzMikgY21kLT5jbW5kWzhdKSA8PCA4KSB8Ci0JCQkJCWNtZC0+Y21uZFs5XTsKLQkJCWNwLT50d2Vha191cHBlciA9Ci0JCQkJKCgodTMyKSBjbWQtPmNtbmRbMl0pIDw8IDI0KSB8Ci0JCQkJKCgodTMyKSBjbWQtPmNtbmRbM10pIDw8IDE2KSB8Ci0JCQkJKCgodTMyKSBjbWQtPmNtbmRbNF0pIDw8IDgpIHwKLQkJCQkJY21kLT5jbW5kWzVdOwotCQl9IGVsc2UgewotCQkJZmlyc3RfYmxvY2sgPQotCQkJCSgoKHU2NCkgY21kLT5jbW5kWzJdKSA8PCA1NikgfAotCQkJCSgoKHU2NCkgY21kLT5jbW5kWzNdKSA8PCA0OCkgfAotCQkJCSgoKHU2NCkgY21kLT5jbW5kWzRdKSA8PCA0MCkgfAotCQkJCSgoKHU2NCkgY21kLT5jbW5kWzVdKSA8PCAzMikgfAotCQkJCSgoKHU2NCkgY21kLT5jbW5kWzZdKSA8PCAyNCkgfAotCQkJCSgoKHU2NCkgY21kLT5jbW5kWzddKSA8PCAxNikgfAotCQkJCSgoKHU2NCkgY21kLT5jbW5kWzhdKSA8PCA4KSB8Ci0JCQkJCWNtZC0+Y21uZFs5XTsKLQkJCWZpcnN0X2Jsb2NrID0gKGZpcnN0X2Jsb2NrICogbWFwLT52b2x1bWVfYmxrX3NpemUpLzUxMjsKLQkJCWNwLT50d2Vha19sb3dlciA9ICh1MzIpZmlyc3RfYmxvY2s7Ci0JCQljcC0+dHdlYWtfdXBwZXIgPSAodTMyKShmaXJzdF9ibG9jayA+PiAzMik7Ci0JCX0KKwkJZmlyc3RfYmxvY2sgPSBnZXRfdW5hbGlnbmVkX2JlNjQoJmNtZC0+Y21uZFsyXSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwKLQkJCSJFUlJPUjogJXM6IElPQUNDRUwgcmVxdWVzdCBDREIgc2l6ZSBub3Qgc3VwcG9ydGVkIGZvciBlbmNyeXB0aW9uXG4iLAotCQkJX19mdW5jX18pOworCQkJIkVSUk9SOiAlczogc2l6ZSAoMHgleCkgbm90IHN1cHBvcnRlZCBmb3IgZW5jcnlwdGlvblxuIiwKKwkJCV9fZnVuY19fLCBjbWQtPmNtbmRbMF0pOwogCQlCVUcoKTsKIAkJYnJlYWs7CiAJfQorCisJaWYgKGxlMzJfdG9fY3B1KG1hcC0+dm9sdW1lX2Jsa19zaXplKSAhPSA1MTIpCisJCWZpcnN0X2Jsb2NrID0gZmlyc3RfYmxvY2sgKgorCQkJCWxlMzJfdG9fY3B1KG1hcC0+dm9sdW1lX2Jsa19zaXplKS81MTI7CisKKwljcC0+dHdlYWtfbG93ZXIgPSBjcHVfdG9fbGUzMihmaXJzdF9ibG9jayk7CisJY3AtPnR3ZWFrX3VwcGVyID0gY3B1X3RvX2xlMzIoZmlyc3RfYmxvY2sgPj4gMzIpOwogfQogCiBzdGF0aWMgaW50IGhwc2Ffc2NzaV9pb2FjY2VsMl9xdWV1ZV9jb21tYW5kKHN0cnVjdCBjdGxyX2luZm8gKmgsCiAJc3RydWN0IENvbW1hbmRMaXN0ICpjLCB1MzIgaW9hY2NlbF9oYW5kbGUsIHU4ICpjZGIsIGludCBjZGJfbGVuLAotCXU4ICpzY3NpM2FkZHIpCisJdTggKnNjc2kzYWRkciwgc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqcGh5c19kaXNrKQogewogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZCA9IGMtPnNjc2lfY21kOwogCXN0cnVjdCBpb19hY2NlbDJfY21kICpjcCA9ICZoLT5pb2FjY2VsMl9jbWRfcG9vbFtjLT5jbWRpbmRleF07CkBAIC0zNDQ1LDExICszNTMwLDE2IEBACiAJdTMyIGxlbjsKIAl1MzIgdG90YWxfbGVuID0gMDsKIAotCWlmIChzY3NpX3NnX2NvdW50KGNtZCkgPiBoLT5pb2FjY2VsX21heHNnKQorCWlmIChzY3NpX3NnX2NvdW50KGNtZCkgPiBoLT5pb2FjY2VsX21heHNnKSB7CisJCWF0b21pY19kZWMoJnBoeXNfZGlzay0+aW9hY2NlbF9jbWRzX291dCk7CiAJCXJldHVybiBJT19BQ0NFTF9JTkVMSUdJQkxFOworCX0KIAotCWlmIChmaXh1cF9pb2FjY2VsX2NkYihjZGIsICZjZGJfbGVuKSkKKwlpZiAoZml4dXBfaW9hY2NlbF9jZGIoY2RiLCAmY2RiX2xlbikpIHsKKwkJYXRvbWljX2RlYygmcGh5c19kaXNrLT5pb2FjY2VsX2NtZHNfb3V0KTsKIAkJcmV0dXJuIElPX0FDQ0VMX0lORUxJR0lCTEU7CisJfQorCiAJYy0+Y21kX3R5cGUgPSBDTURfSU9BQ0NFTDI7CiAJLyogQWRqdXN0IHRoZSBETUEgYWRkcmVzcyB0byBwb2ludCB0byB0aGUgYWNjZWxlcmF0ZWQgY29tbWFuZCBidWZmZXIgKi8KIAljLT5idXNhZGRyID0gKHUzMikgaC0+aW9hY2NlbDJfY21kX3Bvb2xfZGhhbmRsZSArCkBAIC0zNDYwLDggKzM1NTAsMTAgQEAKIAljcC0+SVVfdHlwZSA9IElPQUNDRUwyX0lVX1RZUEU7CiAKIAl1c2Vfc2cgPSBzY3NpX2RtYV9tYXAoY21kKTsKLQlpZiAodXNlX3NnIDwgMCkKKwlpZiAodXNlX3NnIDwgMCkgeworCQlhdG9taWNfZGVjKCZwaHlzX2Rpc2stPmlvYWNjZWxfY21kc19vdXQpOwogCQlyZXR1cm4gdXNlX3NnOworCX0KIAogCWlmICh1c2Vfc2cpIHsKIAkJQlVHX09OKHVzZV9zZyA+IElPQUNDRUwyX01BWFNHRU5UUklFUyk7CkBAIC0zNTA2LDkgKzM1OTgsOCBAQAogCS8qIFNldCBlbmNyeXB0aW9uIHBhcmFtZXRlcnMsIGlmIG5lY2Vzc2FyeSAqLwogCXNldF9lbmNyeXB0X2lvYWNjZWwyKGgsIGMsIGNwKTsKIAotCWNwLT5zY3NpX25leHVzID0gaW9hY2NlbF9oYW5kbGU7Ci0JY3AtPlRhZyA9IChjLT5jbWRpbmRleCA8PCBESVJFQ1RfTE9PS1VQX1NISUZUKSB8Ci0JCQkJRElSRUNUX0xPT0tVUF9CSVQ7CisJY3AtPnNjc2lfbmV4dXMgPSBjcHVfdG9fbGUzMihpb2FjY2VsX2hhbmRsZSk7CisJY3AtPlRhZyA9IGNwdV90b19sZTMyKGMtPmNtZGluZGV4IDw8IERJUkVDVF9MT09LVVBfU0hJRlQpOwogCW1lbWNweShjcC0+Y2RiLCBjZGIsIHNpemVvZihjcC0+Y2RiKSk7CiAKIAkvKiBmaWxsIGluIHNnIGVsZW1lbnRzICovCkBAIC0zNTI4LDE0ICszNjE5LDIyIEBACiAgKi8KIHN0YXRpYyBpbnQgaHBzYV9zY3NpX2lvYWNjZWxfcXVldWVfY29tbWFuZChzdHJ1Y3QgY3Rscl9pbmZvICpoLAogCXN0cnVjdCBDb21tYW5kTGlzdCAqYywgdTMyIGlvYWNjZWxfaGFuZGxlLCB1OCAqY2RiLCBpbnQgY2RiX2xlbiwKLQl1OCAqc2NzaTNhZGRyKQorCXU4ICpzY3NpM2FkZHIsIHN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnBoeXNfZGlzaykKIHsKKwkvKiBUcnkgdG8gaG9ub3IgdGhlIGRldmljZSdzIHF1ZXVlIGRlcHRoICovCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZwaHlzX2Rpc2stPmlvYWNjZWxfY21kc19vdXQpID4KKwkJCQkJcGh5c19kaXNrLT5xdWV1ZV9kZXB0aCkgeworCQlhdG9taWNfZGVjKCZwaHlzX2Rpc2stPmlvYWNjZWxfY21kc19vdXQpOworCQlyZXR1cm4gSU9fQUNDRUxfSU5FTElHSUJMRTsKKwl9CiAJaWYgKGgtPnRyYW5zTWV0aG9kICYgQ0ZHVEJMX1RyYW5zX2lvX2FjY2VsMSkKIAkJcmV0dXJuIGhwc2Ffc2NzaV9pb2FjY2VsMV9xdWV1ZV9jb21tYW5kKGgsIGMsIGlvYWNjZWxfaGFuZGxlLAotCQkJCQkJY2RiLCBjZGJfbGVuLCBzY3NpM2FkZHIpOworCQkJCQkJY2RiLCBjZGJfbGVuLCBzY3NpM2FkZHIsCisJCQkJCQlwaHlzX2Rpc2spOwogCWVsc2UKIAkJcmV0dXJuIGhwc2Ffc2NzaV9pb2FjY2VsMl9xdWV1ZV9jb21tYW5kKGgsIGMsIGlvYWNjZWxfaGFuZGxlLAotCQkJCQkJY2RiLCBjZGJfbGVuLCBzY3NpM2FkZHIpOworCQkJCQkJY2RiLCBjZGJfbGVuLCBzY3NpM2FkZHIsCisJCQkJCQlwaHlzX2Rpc2spOwogfQogCiBzdGF0aWMgdm9pZCByYWlkX21hcF9oZWxwZXIoc3RydWN0IHJhaWRfbWFwX2RhdGEgKm1hcCwKQEAgLTM1NDMsMjEgKzM2NDIsMjIgQEAKIHsKIAlpZiAob2ZmbG9hZF90b19taXJyb3IgPT0gMCkgIHsKIAkJLyogdXNlIHBoeXNpY2FsIGRpc2sgaW4gdGhlIGZpcnN0IG1pcnJvcmVkIGdyb3VwLiAqLwotCQkqbWFwX2luZGV4ICU9IG1hcC0+ZGF0YV9kaXNrc19wZXJfcm93OworCQkqbWFwX2luZGV4ICU9IGxlMTZfdG9fY3B1KG1hcC0+ZGF0YV9kaXNrc19wZXJfcm93KTsKIAkJcmV0dXJuOwogCX0KIAlkbyB7CiAJCS8qIGRldGVybWluZSBtaXJyb3IgZ3JvdXAgdGhhdCAqbWFwX2luZGV4IGluZGljYXRlcyAqLwotCQkqY3VycmVudF9ncm91cCA9ICptYXBfaW5kZXggLyBtYXAtPmRhdGFfZGlza3NfcGVyX3JvdzsKKwkJKmN1cnJlbnRfZ3JvdXAgPSAqbWFwX2luZGV4IC8KKwkJCWxlMTZfdG9fY3B1KG1hcC0+ZGF0YV9kaXNrc19wZXJfcm93KTsKIAkJaWYgKG9mZmxvYWRfdG9fbWlycm9yID09ICpjdXJyZW50X2dyb3VwKQogCQkJY29udGludWU7Ci0JCWlmICgqY3VycmVudF9ncm91cCA8IChtYXAtPmxheW91dF9tYXBfY291bnQgLSAxKSkgeworCQlpZiAoKmN1cnJlbnRfZ3JvdXAgPCBsZTE2X3RvX2NwdShtYXAtPmxheW91dF9tYXBfY291bnQpIC0gMSkgewogCQkJLyogc2VsZWN0IG1hcCBpbmRleCBmcm9tIG5leHQgZ3JvdXAgKi8KLQkJCSptYXBfaW5kZXggKz0gbWFwLT5kYXRhX2Rpc2tzX3Blcl9yb3c7CisJCQkqbWFwX2luZGV4ICs9IGxlMTZfdG9fY3B1KG1hcC0+ZGF0YV9kaXNrc19wZXJfcm93KTsKIAkJCSgqY3VycmVudF9ncm91cCkrKzsKIAkJfSBlbHNlIHsKIAkJCS8qIHNlbGVjdCBtYXAgaW5kZXggZnJvbSBmaXJzdCBncm91cCAqLwotCQkJKm1hcF9pbmRleCAlPSBtYXAtPmRhdGFfZGlza3NfcGVyX3JvdzsKKwkJCSptYXBfaW5kZXggJT0gbGUxNl90b19jcHUobWFwLT5kYXRhX2Rpc2tzX3Blcl9yb3cpOwogCQkJKmN1cnJlbnRfZ3JvdXAgPSAwOwogCQl9CiAJfSB3aGlsZSAob2ZmbG9hZF90b19taXJyb3IgIT0gKmN1cnJlbnRfZ3JvdXApOwpAQCAtMzU5NSwxMyArMzY5NSwxMiBAQAogCXUzMiBkaXNrX2Jsb2NrX2NudDsKIAl1OCBjZGJbMTZdOwogCXU4IGNkYl9sZW47CisJdTE2IHN0cmlwX3NpemU7CiAjaWYgQklUU19QRVJfTE9ORyA9PSAzMgogCXU2NCB0bXBkaXY7CiAjZW5kaWYKIAlpbnQgb2ZmbG9hZF90b19taXJyb3I7CiAKLQlCVUdfT04oIShkZXYtPm9mZmxvYWRfY29uZmlnICYmIGRldi0+b2ZmbG9hZF9lbmFibGVkKSk7Ci0KIAkvKiBjaGVjayBmb3IgdmFsaWQgb3Bjb2RlLCBnZXQgTEJBIGFuZCBibG9jayBjb3VudCAqLwogCXN3aXRjaCAoY21kLT5jbW5kWzBdKSB7CiAJY2FzZSBXUklURV82OgpAQCAtMzY2OCwxMSArMzc2NywxNCBAQAogCQlyZXR1cm4gSU9fQUNDRUxfSU5FTElHSUJMRTsKIAogCS8qIGNoZWNrIGZvciBpbnZhbGlkIGJsb2NrIG9yIHdyYXBhcm91bmQgKi8KLQlpZiAobGFzdF9ibG9jayA+PSBtYXAtPnZvbHVtZV9ibGtfY250IHx8IGxhc3RfYmxvY2sgPCBmaXJzdF9ibG9jaykKKwlpZiAobGFzdF9ibG9jayA+PSBsZTY0X3RvX2NwdShtYXAtPnZvbHVtZV9ibGtfY250KSB8fAorCQlsYXN0X2Jsb2NrIDwgZmlyc3RfYmxvY2spCiAJCXJldHVybiBJT19BQ0NFTF9JTkVMSUdJQkxFOwogCiAJLyogY2FsY3VsYXRlIHN0cmlwZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlcXVlc3QgKi8KLQlibG9ja3NfcGVyX3JvdyA9IG1hcC0+ZGF0YV9kaXNrc19wZXJfcm93ICogbWFwLT5zdHJpcF9zaXplOworCWJsb2Nrc19wZXJfcm93ID0gbGUxNl90b19jcHUobWFwLT5kYXRhX2Rpc2tzX3Blcl9yb3cpICoKKwkJCQlsZTE2X3RvX2NwdShtYXAtPnN0cmlwX3NpemUpOworCXN0cmlwX3NpemUgPSBsZTE2X3RvX2NwdShtYXAtPnN0cmlwX3NpemUpOwogI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKIAl0bXBkaXYgPSBmaXJzdF9ibG9jazsKIAkodm9pZCkgZG9fZGl2KHRtcGRpdiwgYmxvY2tzX3Blcl9yb3cpOwpAQCAtMzY4MywxOCArMzc4NSwxOCBAQAogCWZpcnN0X3Jvd19vZmZzZXQgPSAodTMyKSAoZmlyc3RfYmxvY2sgLSAoZmlyc3Rfcm93ICogYmxvY2tzX3Blcl9yb3cpKTsKIAlsYXN0X3Jvd19vZmZzZXQgPSAodTMyKSAobGFzdF9ibG9jayAtIChsYXN0X3JvdyAqIGJsb2Nrc19wZXJfcm93KSk7CiAJdG1wZGl2ID0gZmlyc3Rfcm93X29mZnNldDsKLQkodm9pZCkgZG9fZGl2KHRtcGRpdiwgIG1hcC0+c3RyaXBfc2l6ZSk7CisJKHZvaWQpIGRvX2Rpdih0bXBkaXYsIHN0cmlwX3NpemUpOwogCWZpcnN0X2NvbHVtbiA9IHRtcGRpdjsKIAl0bXBkaXYgPSBsYXN0X3Jvd19vZmZzZXQ7Ci0JKHZvaWQpIGRvX2Rpdih0bXBkaXYsIG1hcC0+c3RyaXBfc2l6ZSk7CisJKHZvaWQpIGRvX2Rpdih0bXBkaXYsIHN0cmlwX3NpemUpOwogCWxhc3RfY29sdW1uID0gdG1wZGl2OwogI2Vsc2UKIAlmaXJzdF9yb3cgPSBmaXJzdF9ibG9jayAvIGJsb2Nrc19wZXJfcm93OwogCWxhc3Rfcm93ID0gbGFzdF9ibG9jayAvIGJsb2Nrc19wZXJfcm93OwogCWZpcnN0X3Jvd19vZmZzZXQgPSAodTMyKSAoZmlyc3RfYmxvY2sgLSAoZmlyc3Rfcm93ICogYmxvY2tzX3Blcl9yb3cpKTsKIAlsYXN0X3Jvd19vZmZzZXQgPSAodTMyKSAobGFzdF9ibG9jayAtIChsYXN0X3JvdyAqIGJsb2Nrc19wZXJfcm93KSk7Ci0JZmlyc3RfY29sdW1uID0gZmlyc3Rfcm93X29mZnNldCAvIG1hcC0+c3RyaXBfc2l6ZTsKLQlsYXN0X2NvbHVtbiA9IGxhc3Rfcm93X29mZnNldCAvIG1hcC0+c3RyaXBfc2l6ZTsKKwlmaXJzdF9jb2x1bW4gPSBmaXJzdF9yb3dfb2Zmc2V0IC8gc3RyaXBfc2l6ZTsKKwlsYXN0X2NvbHVtbiA9IGxhc3Rfcm93X29mZnNldCAvIHN0cmlwX3NpemU7CiAjZW5kaWYKIAogCS8qIGlmIHRoaXMgaXNuJ3QgYSBzaW5nbGUgcm93L2NvbHVtbiB0aGVuIGdpdmUgdG8gdGhlIGNvbnRyb2xsZXIgKi8KQEAgLTM3MDIsMTAgKzM4MDQsMTAgQEAKIAkJcmV0dXJuIElPX0FDQ0VMX0lORUxJR0lCTEU7CiAKIAkvKiBwcm9jZWVkaW5nIHdpdGggZHJpdmVyIG1hcHBpbmcgKi8KLQl0b3RhbF9kaXNrc19wZXJfcm93ID0gbWFwLT5kYXRhX2Rpc2tzX3Blcl9yb3cgKwotCQkJCW1hcC0+bWV0YWRhdGFfZGlza3NfcGVyX3JvdzsKKwl0b3RhbF9kaXNrc19wZXJfcm93ID0gbGUxNl90b19jcHUobWFwLT5kYXRhX2Rpc2tzX3Blcl9yb3cpICsKKwkJCQlsZTE2X3RvX2NwdShtYXAtPm1ldGFkYXRhX2Rpc2tzX3Blcl9yb3cpOwogCW1hcF9yb3cgPSAoKHUzMikoZmlyc3Rfcm93ID4+IG1hcC0+cGFyaXR5X3JvdGF0aW9uX3NoaWZ0KSkgJQotCQkJCW1hcC0+cm93X2NudDsKKwkJCQlsZTE2X3RvX2NwdShtYXAtPnJvd19jbnQpOwogCW1hcF9pbmRleCA9IChtYXBfcm93ICogdG90YWxfZGlza3NfcGVyX3JvdykgKyBmaXJzdF9jb2x1bW47CiAKIAlzd2l0Y2ggKGRldi0+cmFpZF9sZXZlbCkgewpAQCAtMzcxNiwyMyArMzgxOCwyNCBAQAogCQkgKiAoMi1kcml2ZSBSMSBhbmQgUjEwIHdpdGggZXZlbiAjIG9mIGRyaXZlcy4pCiAJCSAqIEFwcHJvcHJpYXRlIGZvciBTU0RzLCBub3Qgb3B0aW1hbCBmb3IgSEREcwogCQkgKi8KLQkJQlVHX09OKG1hcC0+bGF5b3V0X21hcF9jb3VudCAhPSAyKTsKKwkJQlVHX09OKGxlMTZfdG9fY3B1KG1hcC0+bGF5b3V0X21hcF9jb3VudCkgIT0gMik7CiAJCWlmIChkZXYtPm9mZmxvYWRfdG9fbWlycm9yKQotCQkJbWFwX2luZGV4ICs9IG1hcC0+ZGF0YV9kaXNrc19wZXJfcm93OworCQkJbWFwX2luZGV4ICs9IGxlMTZfdG9fY3B1KG1hcC0+ZGF0YV9kaXNrc19wZXJfcm93KTsKIAkJZGV2LT5vZmZsb2FkX3RvX21pcnJvciA9ICFkZXYtPm9mZmxvYWRfdG9fbWlycm9yOwogCQlicmVhazsKIAljYXNlIEhQU0FfUkFJRF9BRE06CiAJCS8qIEhhbmRsZXMgTi13YXkgbWlycm9ycyAgKFIxLUFETSkKIAkJICogYW5kIFIxMCB3aXRoICMgb2YgZHJpdmVzIGRpdmlzaWJsZSBieSAzLikKIAkJICovCi0JCUJVR19PTihtYXAtPmxheW91dF9tYXBfY291bnQgIT0gMyk7CisJCUJVR19PTihsZTE2X3RvX2NwdShtYXAtPmxheW91dF9tYXBfY291bnQpICE9IDMpOwogCiAJCW9mZmxvYWRfdG9fbWlycm9yID0gZGV2LT5vZmZsb2FkX3RvX21pcnJvcjsKIAkJcmFpZF9tYXBfaGVscGVyKG1hcCwgb2ZmbG9hZF90b19taXJyb3IsCiAJCQkJJm1hcF9pbmRleCwgJmN1cnJlbnRfZ3JvdXApOwogCQkvKiBzZXQgbWlycm9yIGdyb3VwIHRvIHVzZSBuZXh0IHRpbWUgKi8KIAkJb2ZmbG9hZF90b19taXJyb3IgPQotCQkJKG9mZmxvYWRfdG9fbWlycm9yID49IG1hcC0+bGF5b3V0X21hcF9jb3VudCAtIDEpCisJCQkob2ZmbG9hZF90b19taXJyb3IgPj0KKwkJCWxlMTZfdG9fY3B1KG1hcC0+bGF5b3V0X21hcF9jb3VudCkgLSAxKQogCQkJPyAwIDogb2ZmbG9hZF90b19taXJyb3IgKyAxOwogCQlkZXYtPm9mZmxvYWRfdG9fbWlycm9yID0gb2ZmbG9hZF90b19taXJyb3I7CiAJCS8qIEF2b2lkIGRpcmVjdCB1c2Ugb2YgZGV2LT5vZmZsb2FkX3RvX21pcnJvciB3aXRoaW4gdGhpcwpAQCAtMzc0MiwxNCArMzg0NSwxNiBAQAogCQlicmVhazsKIAljYXNlIEhQU0FfUkFJRF81OgogCWNhc2UgSFBTQV9SQUlEXzY6Ci0JCWlmIChtYXAtPmxheW91dF9tYXBfY291bnQgPD0gMSkKKwkJaWYgKGxlMTZfdG9fY3B1KG1hcC0+bGF5b3V0X21hcF9jb3VudCkgPD0gMSkKIAkJCWJyZWFrOwogCiAJCS8qIFZlcmlmeSBmaXJzdCBhbmQgbGFzdCBibG9jayBhcmUgaW4gc2FtZSBSQUlEIGdyb3VwICovCiAJCXI1b3I2X2Jsb2Nrc19wZXJfcm93ID0KLQkJCW1hcC0+c3RyaXBfc2l6ZSAqIG1hcC0+ZGF0YV9kaXNrc19wZXJfcm93OworCQkJbGUxNl90b19jcHUobWFwLT5zdHJpcF9zaXplKSAqCisJCQlsZTE2X3RvX2NwdShtYXAtPmRhdGFfZGlza3NfcGVyX3Jvdyk7CiAJCUJVR19PTihyNW9yNl9ibG9ja3NfcGVyX3JvdyA9PSAwKTsKLQkJc3RyaXBlc2l6ZSA9IHI1b3I2X2Jsb2Nrc19wZXJfcm93ICogbWFwLT5sYXlvdXRfbWFwX2NvdW50OworCQlzdHJpcGVzaXplID0gcjVvcjZfYmxvY2tzX3Blcl9yb3cgKgorCQkJbGUxNl90b19jcHUobWFwLT5sYXlvdXRfbWFwX2NvdW50KTsKICNpZiBCSVRTX1BFUl9MT05HID09IDMyCiAJCXRtcGRpdiA9IGZpcnN0X2Jsb2NrOwogCQlmaXJzdF9ncm91cCA9IGRvX2Rpdih0bXBkaXYsIHN0cmlwZXNpemUpOwpAQCAtMzgxMiwyOCArMzkxNywzNSBAQAogCQkJCQkJcjVvcjZfYmxvY2tzX3Blcl9yb3cpOwogCiAJCWZpcnN0X2NvbHVtbiA9IHI1b3I2X2ZpcnN0X2NvbHVtbiA9Ci0JCQlyNW9yNl9maXJzdF9yb3dfb2Zmc2V0IC8gbWFwLT5zdHJpcF9zaXplOworCQkJcjVvcjZfZmlyc3Rfcm93X29mZnNldCAvIGxlMTZfdG9fY3B1KG1hcC0+c3RyaXBfc2l6ZSk7CiAJCXI1b3I2X2xhc3RfY29sdW1uID0KLQkJCXI1b3I2X2xhc3Rfcm93X29mZnNldCAvIG1hcC0+c3RyaXBfc2l6ZTsKKwkJCXI1b3I2X2xhc3Rfcm93X29mZnNldCAvIGxlMTZfdG9fY3B1KG1hcC0+c3RyaXBfc2l6ZSk7CiAjZW5kaWYKIAkJaWYgKHI1b3I2X2ZpcnN0X2NvbHVtbiAhPSByNW9yNl9sYXN0X2NvbHVtbikKIAkJCXJldHVybiBJT19BQ0NFTF9JTkVMSUdJQkxFOwogCiAJCS8qIFJlcXVlc3QgaXMgZWxpZ2libGUgKi8KIAkJbWFwX3JvdyA9ICgodTMyKShmaXJzdF9yb3cgPj4gbWFwLT5wYXJpdHlfcm90YXRpb25fc2hpZnQpKSAlCi0JCQltYXAtPnJvd19jbnQ7CisJCQlsZTE2X3RvX2NwdShtYXAtPnJvd19jbnQpOwogCiAJCW1hcF9pbmRleCA9IChmaXJzdF9ncm91cCAqCi0JCQkobWFwLT5yb3dfY250ICogdG90YWxfZGlza3NfcGVyX3JvdykpICsKKwkJCShsZTE2X3RvX2NwdShtYXAtPnJvd19jbnQpICogdG90YWxfZGlza3NfcGVyX3JvdykpICsKIAkJCShtYXBfcm93ICogdG90YWxfZGlza3NfcGVyX3JvdykgKyBmaXJzdF9jb2x1bW47CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiBJT19BQ0NFTF9JTkVMSUdJQkxFOwogCX0KIAorCWlmICh1bmxpa2VseShtYXBfaW5kZXggPj0gUkFJRF9NQVBfTUFYX0VOVFJJRVMpKQorCQlyZXR1cm4gSU9fQUNDRUxfSU5FTElHSUJMRTsKKworCWMtPnBoeXNfZGlzayA9IGRldi0+cGh5c19kaXNrW21hcF9pbmRleF07CisKIAlkaXNrX2hhbmRsZSA9IGRkW21hcF9pbmRleF0uaW9hY2NlbF9oYW5kbGU7Ci0JZGlza19ibG9jayA9IG1hcC0+ZGlza19zdGFydGluZ19ibGsgKyAoZmlyc3Rfcm93ICogbWFwLT5zdHJpcF9zaXplKSArCi0JCQkoZmlyc3Rfcm93X29mZnNldCAtIChmaXJzdF9jb2x1bW4gKiBtYXAtPnN0cmlwX3NpemUpKTsKKwlkaXNrX2Jsb2NrID0gbGU2NF90b19jcHUobWFwLT5kaXNrX3N0YXJ0aW5nX2JsaykgKworCQkJZmlyc3Rfcm93ICogbGUxNl90b19jcHUobWFwLT5zdHJpcF9zaXplKSArCisJCQkoZmlyc3Rfcm93X29mZnNldCAtIGZpcnN0X2NvbHVtbiAqCisJCQlsZTE2X3RvX2NwdShtYXAtPnN0cmlwX3NpemUpKTsKIAlkaXNrX2Jsb2NrX2NudCA9IGJsb2NrX2NudDsKIAogCS8qIGhhbmRsZSBkaWZmZXJpbmcgbG9naWNhbC9waHlzaWNhbCBibG9jayBzaXplcyAqLwpAQCAtMzg3Niw3OCArMzk4OCwyMSBAQAogCQljZGJfbGVuID0gMTA7CiAJfQogCXJldHVybiBocHNhX3Njc2lfaW9hY2NlbF9xdWV1ZV9jb21tYW5kKGgsIGMsIGRpc2tfaGFuZGxlLCBjZGIsIGNkYl9sZW4sCi0JCQkJCQlkZXYtPnNjc2kzYWRkcik7CisJCQkJCQlkZXYtPnNjc2kzYWRkciwKKwkJCQkJCWRldi0+cGh5c19kaXNrW21hcF9pbmRleF0pOwogfQogCi0vKgotICogUnVubmluZyBpbiBzdHJ1Y3QgU2NzaV9Ib3N0LT5ob3N0X2xvY2sgbGVzcyBtb2RlIHVzaW5nIExMRCBpbnRlcm5hbAotICogc3RydWN0IGN0bHJfaW5mbyAqaC0+bG9jayB3LyBzcGluX2xvY2tfaXJxc2F2ZSgpIHByb3RlY3Rpb24uCi0gKi8KLXN0YXRpYyBpbnQgaHBzYV9zY3NpX3F1ZXVlX2NvbW1hbmQoc3RydWN0IFNjc2lfSG9zdCAqc2gsIHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKKy8qIFN1Ym1pdCBjb21tYW5kcyBkb3duIHRoZSAibm9ybWFsIiBSQUlEIHN0YWNrIHBhdGggKi8KK3N0YXRpYyBpbnQgaHBzYV9jaXNzX3N1Ym1pdChzdHJ1Y3QgY3Rscl9pbmZvICpoLAorCXN0cnVjdCBDb21tYW5kTGlzdCAqYywgc3RydWN0IHNjc2lfY21uZCAqY21kLAorCXVuc2lnbmVkIGNoYXIgc2NzaTNhZGRyW10pCiB7Ci0Jc3RydWN0IGN0bHJfaW5mbyAqaDsKLQlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpkZXY7Ci0JdW5zaWduZWQgY2hhciBzY3NpM2FkZHJbOF07Ci0Jc3RydWN0IENvbW1hbmRMaXN0ICpjOwotCWludCByYyA9IDA7Ci0KLQkvKiBHZXQgdGhlIHB0ciB0byBvdXIgYWRhcHRlciBzdHJ1Y3R1cmUgb3V0IG9mIGNtZC0+aG9zdC4gKi8KLQloID0gc2Rldl90b19oYmEoY21kLT5kZXZpY2UpOwotCWRldiA9IGNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKLQlpZiAoIWRldikgewotCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OwotCQljbWQtPnNjc2lfZG9uZShjbWQpOwotCQlyZXR1cm4gMDsKLQl9Ci0JbWVtY3B5KHNjc2kzYWRkciwgZGV2LT5zY3NpM2FkZHIsIHNpemVvZihzY3NpM2FkZHIpKTsKLQotCWlmICh1bmxpa2VseShsb2NrdXBfZGV0ZWN0ZWQoaCkpKSB7Ci0JCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQljbWQtPnNjc2lfZG9uZShjbWQpOwotCQlyZXR1cm4gMDsKLQl9Ci0JYyA9IGNtZF9hbGxvYyhoKTsKLQlpZiAoYyA9PSBOVUxMKSB7CQkJLyogdHJvdWJsZS4uLiAqLwotCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJjbWRfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOwotCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKLQl9Ci0KLQkvKiBGaWxsIGluIHRoZSBjb21tYW5kIGxpc3QgaGVhZGVyICovCi0JLyogc2F2ZSBjIGluIGNhc2Ugd2UgaGF2ZSB0byBhYm9ydCBpdCAgKi8KIAljbWQtPmhvc3Rfc2NyaWJibGUgPSAodW5zaWduZWQgY2hhciAqKSBjOwotCiAJYy0+Y21kX3R5cGUgPSBDTURfU0NTSTsKIAljLT5zY3NpX2NtZCA9IGNtZDsKLQotCS8qIENhbGwgYWx0ZXJuYXRlIHN1Ym1pdCByb3V0aW5lIGZvciBJL08gYWNjZWxlcmF0ZWQgY29tbWFuZHMuCi0JICogUmV0cmllcyBhbHdheXMgZ28gZG93biB0aGUgbm9ybWFsIEkvTyBwYXRoLgotCSAqLwotCWlmIChsaWtlbHkoY21kLT5yZXRyaWVzID09IDAgJiYKLQkJY21kLT5yZXF1ZXN0LT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUyAmJgotCQloLT5hY2Npb3BhdGhfc3RhdHVzKSkgewotCQlpZiAoZGV2LT5vZmZsb2FkX2VuYWJsZWQpIHsKLQkJCXJjID0gaHBzYV9zY3NpX2lvYWNjZWxfcmFpZF9tYXAoaCwgYyk7Ci0JCQlpZiAocmMgPT0gMCkKLQkJCQlyZXR1cm4gMDsgLyogU2VudCBvbiBpb2FjY2VsIHBhdGggKi8KLQkJCWlmIChyYyA8IDApIHsgICAvKiBzY3NpX2RtYV9tYXAgZmFpbGVkLiAqLwotCQkJCWNtZF9mcmVlKGgsIGMpOwotCQkJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwotCQkJfQotCQl9IGVsc2UgaWYgKGRldi0+aW9hY2NlbF9oYW5kbGUpIHsKLQkJCXJjID0gaHBzYV9zY3NpX2lvYWNjZWxfZGlyZWN0X21hcChoLCBjKTsKLQkJCWlmIChyYyA9PSAwKQotCQkJCXJldHVybiAwOyAvKiBTZW50IG9uIGRpcmVjdCBtYXAgcGF0aCAqLwotCQkJaWYgKHJjIDwgMCkgeyAgIC8qIHNjc2lfZG1hX21hcCBmYWlsZWQuICovCi0JCQkJY21kX2ZyZWUoaCwgYyk7Ci0JCQkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7Ci0JCQl9Ci0JCX0KLQl9Ci0KIAljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7ICAvKiB1bnVzZWQgaW4gc2ltcGxlIG1vZGUgKi8KIAltZW1jcHkoJmMtPkhlYWRlci5MVU4uTHVuQWRkckJ5dGVzWzBdLCAmc2NzaTNhZGRyWzBdLCA4KTsKLQljLT5IZWFkZXIudGFnID0gY3B1X3RvX2xlNjQoKGMtPmNtZGluZGV4IDw8IERJUkVDVF9MT09LVVBfU0hJRlQpIHwKLQkJCQkJRElSRUNUX0xPT0tVUF9CSVQpOworCWMtPkhlYWRlci50YWcgPSBjcHVfdG9fbGU2NCgoYy0+Y21kaW5kZXggPDwgRElSRUNUX0xPT0tVUF9TSElGVCkpOwogCiAJLyogRmlsbCBpbiB0aGUgcmVxdWVzdCBibG9jay4uLiAqLwogCkBAIC00MDAzLDI1ICs0MDU4LDEwOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRvX25vdF9zY2FuX2lmX2NvbnRyb2xsZXJfbG9ja2VkX3VwKHN0cnVjdCBjdGxyX2luZm8gKmgpCitzdGF0aWMgdm9pZCBocHNhX2NvbW1hbmRfcmVzdWJtaXRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQ7CisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqZGV2OworCXN0cnVjdCBDb21tYW5kTGlzdCAqYyA9CisJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IENvbW1hbmRMaXN0LCB3b3JrKTsKKworCWNtZCA9IGMtPnNjc2lfY21kOworCWRldiA9IGNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwlpZiAoIWRldikgeworCQljbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2OworCQljbWQtPnNjc2lfZG9uZShjbWQpOworCQlyZXR1cm47CisJfQorCWlmIChocHNhX2Npc3Nfc3VibWl0KGMtPmgsIGMsIGNtZCwgZGV2LT5zY3NpM2FkZHIpKSB7CisJCS8qCisJCSAqIElmIHdlIGdldCBoZXJlLCBpdCBtZWFucyBkbWEgbWFwcGluZyBmYWlsZWQuIFRyeQorCQkgKiBhZ2FpbiB2aWEgc2NzaSBtaWQgbGF5ZXIsIHdoaWNoIHdpbGwgdGhlbiBnZXQKKwkJICogU0NTSV9NTFFVRVVFX0hPU1RfQlVTWS4KKwkJICovCisJCWNtZC0+cmVzdWx0ID0gRElEX0lNTV9SRVRSWSA8PCAxNjsKKwkJY21kLT5zY3NpX2RvbmUoY21kKTsKKwl9Cit9CisKKy8qIFJ1bm5pbmcgaW4gc3RydWN0IFNjc2lfSG9zdC0+aG9zdF9sb2NrIGxlc3MgbW9kZSAqLworc3RhdGljIGludCBocHNhX3Njc2lfcXVldWVfY29tbWFuZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaCwgc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCXN0cnVjdCBjdGxyX2luZm8gKmg7CisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqZGV2OworCXVuc2lnbmVkIGNoYXIgc2NzaTNhZGRyWzhdOworCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKKwlpbnQgcmMgPSAwOworCisJLyogR2V0IHRoZSBwdHIgdG8gb3VyIGFkYXB0ZXIgc3RydWN0dXJlIG91dCBvZiBjbWQtPmhvc3QuICovCisJaCA9IHNkZXZfdG9faGJhKGNtZC0+ZGV2aWNlKTsKKwlkZXYgPSBjbWQtPmRldmljZS0+aG9zdGRhdGE7CisJaWYgKCFkZXYpIHsKKwkJY21kLT5yZXN1bHQgPSBESURfTk9fQ09OTkVDVCA8PCAxNjsKKwkJY21kLT5zY3NpX2RvbmUoY21kKTsKKwkJcmV0dXJuIDA7CisJfQorCW1lbWNweShzY3NpM2FkZHIsIGRldi0+c2NzaTNhZGRyLCBzaXplb2Yoc2NzaTNhZGRyKSk7CisKKwlpZiAodW5saWtlbHkobG9ja3VwX2RldGVjdGVkKGgpKSkgeworCQljbWQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKKwkJY21kLT5zY3NpX2RvbmUoY21kKTsKKwkJcmV0dXJuIDA7CisJfQorCWMgPSBjbWRfYWxsb2MoaCk7CisJaWYgKGMgPT0gTlVMTCkgewkJCS8qIHRyb3VibGUuLi4gKi8KKwkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAiY21kX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKKwkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisJfQorCWlmICh1bmxpa2VseShsb2NrdXBfZGV0ZWN0ZWQoaCkpKSB7CisJCWNtZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OworCQljbWRfZnJlZShoLCBjKTsKKwkJY21kLT5zY3NpX2RvbmUoY21kKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBDYWxsIGFsdGVybmF0ZSBzdWJtaXQgcm91dGluZSBmb3IgSS9PIGFjY2VsZXJhdGVkIGNvbW1hbmRzLgorCSAqIFJldHJpZXMgYWx3YXlzIGdvIGRvd24gdGhlIG5vcm1hbCBJL08gcGF0aC4KKwkgKi8KKwlpZiAobGlrZWx5KGNtZC0+cmV0cmllcyA9PSAwICYmCisJCWNtZC0+cmVxdWVzdC0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMgJiYKKwkJaC0+YWNjaW9wYXRoX3N0YXR1cykpIHsKKworCQljbWQtPmhvc3Rfc2NyaWJibGUgPSAodW5zaWduZWQgY2hhciAqKSBjOworCQljLT5jbWRfdHlwZSA9IENNRF9TQ1NJOworCQljLT5zY3NpX2NtZCA9IGNtZDsKKworCQlpZiAoZGV2LT5vZmZsb2FkX2VuYWJsZWQpIHsKKwkJCXJjID0gaHBzYV9zY3NpX2lvYWNjZWxfcmFpZF9tYXAoaCwgYyk7CisJCQlpZiAocmMgPT0gMCkKKwkJCQlyZXR1cm4gMDsgLyogU2VudCBvbiBpb2FjY2VsIHBhdGggKi8KKwkJCWlmIChyYyA8IDApIHsgICAvKiBzY3NpX2RtYV9tYXAgZmFpbGVkLiAqLworCQkJCWNtZF9mcmVlKGgsIGMpOworCQkJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOworCQkJfQorCQl9IGVsc2UgaWYgKGRldi0+aW9hY2NlbF9oYW5kbGUpIHsKKwkJCXJjID0gaHBzYV9zY3NpX2lvYWNjZWxfZGlyZWN0X21hcChoLCBjKTsKKwkJCWlmIChyYyA9PSAwKQorCQkJCXJldHVybiAwOyAvKiBTZW50IG9uIGRpcmVjdCBtYXAgcGF0aCAqLworCQkJaWYgKHJjIDwgMCkgeyAgIC8qIHNjc2lfZG1hX21hcCBmYWlsZWQuICovCisJCQkJY21kX2ZyZWUoaCwgYyk7CisJCQkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIGhwc2FfY2lzc19zdWJtaXQoaCwgYywgY21kLCBzY3NpM2FkZHIpOworfQorCitzdGF0aWMgdm9pZCBocHNhX3NjYW5fY29tcGxldGUoc3RydWN0IGN0bHJfaW5mbyAqaCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyoKLQkgKiBEb24ndCBsZXQgcmVzY2FucyBiZSBpbml0aWF0ZWQgb24gYSBjb250cm9sbGVyIGtub3duCi0JICogdG8gYmUgbG9ja2VkIHVwLiAgSWYgdGhlIGNvbnRyb2xsZXIgbG9ja3MgdXAgKmR1cmluZyoKLQkgKiBhIHJlc2NhbiwgdGhhdCB0aHJlYWQgaXMgcHJvYmFibHkgaG9zZWQsIGJ1dCBhdCBsZWFzdAotCSAqIHdlIGNhbiBwcmV2ZW50IG5ldyByZXNjYW4gdGhyZWFkcyBmcm9tIHBpbGluZyB1cCBvbiBhCi0JICogbG9ja2VkIHVwIGNvbnRyb2xsZXIuCi0JICovCi0JaWYgKHVubGlrZWx5KGxvY2t1cF9kZXRlY3RlZChoKSkpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOwotCQloLT5zY2FuX2ZpbmlzaGVkID0gMTsKLQkJd2FrZV91cF9hbGwoJmgtPnNjYW5fd2FpdF9xdWV1ZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOworCWgtPnNjYW5fZmluaXNoZWQgPSAxOworCXdha2VfdXBfYWxsKCZoLT5zY2FuX3dhaXRfcXVldWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBocHNhX3NjYW5fc3RhcnQoc3RydWN0IFNjc2lfSG9zdCAqc2gpCkBAIC00MDI5LDggKzQxNjcsMTQgQEAKIAlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gc2hvc3RfdG9faGJhKHNoKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGRvX25vdF9zY2FuX2lmX2NvbnRyb2xsZXJfbG9ja2VkX3VwKGgpKQotCQlyZXR1cm47CisJLyoKKwkgKiBEb24ndCBsZXQgcmVzY2FucyBiZSBpbml0aWF0ZWQgb24gYSBjb250cm9sbGVyIGtub3duIHRvIGJlIGxvY2tlZAorCSAqIHVwLiAgSWYgdGhlIGNvbnRyb2xsZXIgbG9ja3MgdXAgKmR1cmluZyogYSByZXNjYW4sIHRoYXQgdGhyZWFkIGlzCisJICogcHJvYmFibHkgaG9zZWQsIGJ1dCBhdCBsZWFzdCB3ZSBjYW4gcHJldmVudCBuZXcgcmVzY2FuIHRocmVhZHMgZnJvbQorCSAqIHBpbGluZyB1cCBvbiBhIGxvY2tlZCB1cCBjb250cm9sbGVyLgorCSAqLworCWlmICh1bmxpa2VseShsb2NrdXBfZGV0ZWN0ZWQoaCkpKQorCQlyZXR1cm4gaHBzYV9zY2FuX2NvbXBsZXRlKGgpOwogCiAJLyogd2FpdCB1bnRpbCBhbnkgc2NhbiBhbHJlYWR5IGluIHByb2dyZXNzIGlzIGZpbmlzaGVkLiAqLwogCXdoaWxlICgxKSB7CkBAIC00MDQ4LDE1ICs0MTkyLDI3IEBACiAJaC0+c2Nhbl9maW5pc2hlZCA9IDA7IC8qIG1hcmsgc2NhbiBhcyBpbiBwcm9ncmVzcyAqLwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOwogCi0JaWYgKGRvX25vdF9zY2FuX2lmX2NvbnRyb2xsZXJfbG9ja2VkX3VwKGgpKQotCQlyZXR1cm47CisJaWYgKHVubGlrZWx5KGxvY2t1cF9kZXRlY3RlZChoKSkpCisJCXJldHVybiBocHNhX3NjYW5fY29tcGxldGUoaCk7CiAKIAlocHNhX3VwZGF0ZV9zY3NpX2RldmljZXMoaCwgaC0+c2NzaV9ob3N0LT5ob3N0X25vKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5zY2FuX2xvY2ssIGZsYWdzKTsKLQloLT5zY2FuX2ZpbmlzaGVkID0gMTsgLyogbWFyayBzY2FuIGFzIGZpbmlzaGVkLiAqLwotCXdha2VfdXBfYWxsKCZoLT5zY2FuX3dhaXRfcXVldWUpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPnNjYW5fbG9jaywgZmxhZ3MpOworCWhwc2Ffc2Nhbl9jb21wbGV0ZShoKTsKK30KKworc3RhdGljIGludCBocHNhX2NoYW5nZV9xdWV1ZV9kZXB0aChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIGludCBxZGVwdGgpCit7CisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqbG9naWNhbF9kcml2ZSA9IHNkZXYtPmhvc3RkYXRhOworCisJaWYgKCFsb2dpY2FsX2RyaXZlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChxZGVwdGggPCAxKQorCQlxZGVwdGggPSAxOworCWVsc2UgaWYgKHFkZXB0aCA+IGxvZ2ljYWxfZHJpdmUtPnF1ZXVlX2RlcHRoKQorCQlxZGVwdGggPSBsb2dpY2FsX2RyaXZlLT5xdWV1ZV9kZXB0aDsKKworCXJldHVybiBzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2LCBxZGVwdGgpOwogfQogCiBzdGF0aWMgaW50IGhwc2Ffc2Nhbl9maW5pc2hlZChzdHJ1Y3QgU2NzaV9Ib3N0ICpzaCwKQEAgLTQwOTYsMTEgKzQyNTIsMTEgQEAKIAlzaC0+bWF4X2NtZF9sZW4gPSBNQVhfQ09NTUFORF9TSVpFOwogCXNoLT5tYXhfbHVuID0gSFBTQV9NQVhfTFVOOwogCXNoLT5tYXhfaWQgPSBIUFNBX01BWF9MVU47Ci0Jc2gtPmNhbl9xdWV1ZSA9IGgtPm5yX2NtZHM7Ci0JaWYgKGgtPmhiYV9tb2RlX2VuYWJsZWQpCi0JCXNoLT5jbWRfcGVyX2x1biA9IDc7Ci0JZWxzZQotCQlzaC0+Y21kX3Blcl9sdW4gPSBoLT5ucl9jbWRzOworCXNoLT5jYW5fcXVldWUgPSBoLT5ucl9jbWRzIC0KKwkJCUhQU0FfQ01EU19SRVNFUlZFRF9GT1JfQUJPUlRTIC0KKwkJCUhQU0FfQ01EU19SRVNFUlZFRF9GT1JfRFJJVkVSIC0KKwkJCUhQU0FfTUFYX0NPTkNVUlJFTlRfUEFTU1RIUlVTOworCXNoLT5jbWRfcGVyX2x1biA9IHNoLT5jYW5fcXVldWU7CiAJc2gtPnNnX3RhYmxlc2l6ZSA9IGgtPm1heHNnZW50cmllczsKIAloLT5zY3NpX2hvc3QgPSBzaDsKIAlzaC0+aG9zdGRhdGFbMF0gPSAodW5zaWduZWQgbG9uZykgaDsKQEAgLTQxMzEsNyArNDI4Nyw3IEBACiAJaW50IHdhaXR0aW1lID0gMTsgLyogc2Vjb25kcyAqLwogCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKIAotCWMgPSBjbWRfc3BlY2lhbF9hbGxvYyhoKTsKKwljID0gY21kX2FsbG9jKGgpOwogCWlmICghYykgewogCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAib3V0IG9mIG1lbW9yeSBpbiAiCiAJCQkid2FpdF9mb3JfZGV2aWNlX3RvX2JlY29tZV9yZWFkeS5cbiIpOwpAQCAtNDE3Nyw3ICs0MzMzLDcgQEAKIAllbHNlCiAJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJkZXZpY2UgaXMgcmVhZHkuXG4iKTsKIAotCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CisJY21kX2ZyZWUoaCwgYyk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC00MTk0LDYgKzQzNTAsMTAgQEAKIAloID0gc2Rldl90b19oYmEoc2NzaWNtZC0+ZGV2aWNlKTsKIAlpZiAoaCA9PSBOVUxMKSAvKiBwYXJhbm9pYSAqLwogCQlyZXR1cm4gRkFJTEVEOworCisJaWYgKGxvY2t1cF9kZXRlY3RlZChoKSkKKwkJcmV0dXJuIEZBSUxFRDsKKwogCWRldiA9IHNjc2ljbWQtPmRldmljZS0+aG9zdGRhdGE7CiAJaWYgKCFkZXYpIHsKIAkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAiaHBzYV9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcjogIgpAQCAtNDIyNywxMyArNDM4NywxNSBAQAogfQogCiBzdGF0aWMgdm9pZCBocHNhX2dldF90YWcoc3RydWN0IGN0bHJfaW5mbyAqaCwKLQlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMsIHUzMiAqdGFnbG93ZXIsIHUzMiAqdGFndXBwZXIpCisJc3RydWN0IENvbW1hbmRMaXN0ICpjLCBfX2xlMzIgKnRhZ2xvd2VyLCBfX2xlMzIgKnRhZ3VwcGVyKQogeworCXU2NCB0YWc7CiAJaWYgKGMtPmNtZF90eXBlID09IENNRF9JT0FDQ0VMMSkgewogCQlzdHJ1Y3QgaW9fYWNjZWwxX2NtZCAqY20xID0gKHN0cnVjdCBpb19hY2NlbDFfY21kICopCiAJCQkmaC0+aW9hY2NlbF9jbWRfcG9vbFtjLT5jbWRpbmRleF07Ci0JCSp0YWd1cHBlciA9ICh1MzIpIChjbTEtPnRhZyA+PiAzMik7Ci0JCSp0YWdsb3dlciA9ICh1MzIpIChjbTEtPnRhZyAmIDB4MGZmZmZmZmZmVUxMKTsKKwkJdGFnID0gbGU2NF90b19jcHUoY20xLT50YWcpOworCQkqdGFndXBwZXIgPSBjcHVfdG9fbGUzMih0YWcgPj4gMzIpOworCQkqdGFnbG93ZXIgPSBjcHVfdG9fbGUzMih0YWcpOwogCQlyZXR1cm47CiAJfQogCWlmIChjLT5jbWRfdHlwZSA9PSBDTURfSU9BQ0NFTDIpIHsKQEAgLTQyNDQsOCArNDQwNiw5IEBACiAJCSp0YWdsb3dlciA9IGNtMi0+VGFnOwogCQlyZXR1cm47CiAJfQotCSp0YWd1cHBlciA9ICh1MzIpIChjLT5IZWFkZXIudGFnID4+IDMyKTsKLQkqdGFnbG93ZXIgPSAodTMyKSAoYy0+SGVhZGVyLnRhZyAmIDB4MGZmZmZmZmZmVUxMKTsKKwl0YWcgPSBsZTY0X3RvX2NwdShjLT5IZWFkZXIudGFnKTsKKwkqdGFndXBwZXIgPSBjcHVfdG9fbGUzMih0YWcgPj4gMzIpOworCSp0YWdsb3dlciA9IGNwdV90b19sZTMyKHRhZyk7CiB9CiAKIHN0YXRpYyBpbnQgaHBzYV9zZW5kX2Fib3J0KHN0cnVjdCBjdGxyX2luZm8gKmgsIHVuc2lnbmVkIGNoYXIgKnNjc2kzYWRkciwKQEAgLTQyNTQsMTEgKzQ0MTcsMTEgQEAKIAlpbnQgcmMgPSBJT19PSzsKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7CiAJc3RydWN0IEVycm9ySW5mbyAqZWk7Ci0JdTMyIHRhZ3VwcGVyLCB0YWdsb3dlcjsKKwlfX2xlMzIgdGFndXBwZXIsIHRhZ2xvd2VyOwogCi0JYyA9IGNtZF9zcGVjaWFsX2FsbG9jKGgpOworCWMgPSBjbWRfYWxsb2MoaCk7CiAJaWYgKGMgPT0gTlVMTCkgewkvKiB0cm91YmxlLi4uICovCi0JCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWRfc3BlY2lhbF9hbGxvYyByZXR1cm5lZCBOVUxMIVxuIik7CisJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJjbWRfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTQyODcsNjIgKzQ0NTAsMTIgQEAKIAkJcmMgPSAtMTsKIAkJYnJlYWs7CiAJfQotCWNtZF9zcGVjaWFsX2ZyZWUoaCwgYyk7CisJY21kX2ZyZWUoaCwgYyk7CiAJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiJXM6IFRhZzoweCUwOHg6JTA4eDogRmluaXNoZWQuXG4iLAogCQlfX2Z1bmNfXywgdGFndXBwZXIsIHRhZ2xvd2VyKTsKIAlyZXR1cm4gcmM7CiB9CiAKLS8qCi0gKiBocHNhX2ZpbmRfY21kX2luX3F1ZXVlCi0gKgotICogVXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBhIGNvbW1hbmQgKGZpbmQpIGlzIHN0aWxsIHByZXNlbnQKLSAqIGluIHF1ZXVlX2hlYWQuICAgT3B0aW9uYWxseSBleGNsdWRlcyB0aGUgbGFzdCBlbGVtZW50IG9mIHF1ZXVlX2hlYWQuCi0gKgotICogVGhpcyBpcyB1c2VkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGFib3J0cy4gIENvbW1hbmRzIGluIGgtPnJlcVEgaGF2ZQotICogbm90IHlldCBiZWVuIHN1Ym1pdHRlZCwgYW5kIHNvIGNhbiBiZSBhYm9ydGVkIGJ5IHRoZSBkcml2ZXIgd2l0aG91dAotICogc2VuZGluZyBhbiBhYm9ydCB0byB0aGUgaGFyZHdhcmUuCi0gKgotICogUmV0dXJucyBwb2ludGVyIHRvIGNvbW1hbmQgaWYgZm91bmQgaW4gcXVldWUsIE5VTEwgb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgc3RydWN0IENvbW1hbmRMaXN0ICpocHNhX2ZpbmRfY21kX2luX3F1ZXVlKHN0cnVjdCBjdGxyX2luZm8gKmgsCi0JCQlzdHJ1Y3Qgc2NzaV9jbW5kICpmaW5kLCBzdHJ1Y3QgbGlzdF9oZWFkICpxdWV1ZV9oZWFkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IENvbW1hbmRMaXN0ICpjID0gTlVMTDsJLyogcHRyIGludG8gY21wUSAqLwotCi0JaWYgKCFmaW5kKQotCQlyZXR1cm4gTlVMTDsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgcXVldWVfaGVhZCwgbGlzdCkgewotCQlpZiAoYy0+c2NzaV9jbWQgPT0gTlVMTCkgLyogZS5nLjogcGFzc3RocnUgaW9jdGwgKi8KLQkJCWNvbnRpbnVlOwotCQlpZiAoYy0+c2NzaV9jbWQgPT0gZmluZCkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwotCQkJcmV0dXJuIGM7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IENvbW1hbmRMaXN0ICpocHNhX2ZpbmRfY21kX2luX3F1ZXVlX2J5X3RhZyhzdHJ1Y3QgY3Rscl9pbmZvICpoLAotCQkJCQl1OCAqdGFnLCBzdHJ1Y3QgbGlzdF9oZWFkICpxdWV1ZV9oZWFkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IENvbW1hbmRMaXN0ICpjOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsIHF1ZXVlX2hlYWQsIGxpc3QpIHsKLQkJaWYgKG1lbWNtcCgmYy0+SGVhZGVyLnRhZywgdGFnLCA4KSAhPSAwKQotCQkJY29udGludWU7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIGM7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQogLyogaW9hY2NlbDIgcGF0aCBmaXJtd2FyZSBjYW5ub3QgaGFuZGxlIGFib3J0IHRhc2sgcmVxdWVzdHMuCiAgKiBDaGFuZ2UgYWJvcnQgcmVxdWVzdHMgdG8gcGh5c2ljYWwgdGFyZ2V0IHJlc2V0LCBhbmQgc2VuZCB0byB0aGUKICAqIGFkZHJlc3Mgb2YgdGhlIHBoeXNpY2FsIGRpc2sgdXNlZCBmb3IgdGhlIGlvYWNjZWwgMiBjb21tYW5kLgpAQCAtNDM2MCw3ICs0NDczLDcgQEAKIAl1bnNpZ25lZCBjaGFyICpwc2EgPSAmcGh5c19zY3NpM2FkZHJbMF07CiAKIAkvKiBHZXQgYSBwb2ludGVyIHRvIHRoZSBocHNhIGxvZ2ljYWwgZGV2aWNlLiAqLwotCXNjbWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBhYm9ydC0+c2NzaV9jbWQ7CisJc2NtZCA9IGFib3J0LT5zY3NpX2NtZDsKIAlkZXYgPSAoc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqKShzY21kLT5kZXZpY2UtPmhvc3RkYXRhKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKQEAgLTQ0MjksMTAgKzQ1NDIsNiBAQAogc3RhdGljIGludCBocHNhX3NlbmRfYWJvcnRfYm90aF93YXlzKHN0cnVjdCBjdGxyX2luZm8gKmgsCiAJdW5zaWduZWQgY2hhciAqc2NzaTNhZGRyLCBzdHJ1Y3QgQ29tbWFuZExpc3QgKmFib3J0KQogewotCXU4IHN3aXp6bGVkX3RhZ1s4XTsKLQlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7Ci0JaW50IHJjID0gMCwgcmMyID0gMDsKLQogCS8qIGlvY2NlbGVyYXRvciBtb2RlIDIgY29tbWFuZHMgc2hvdWxkIGJlIGFib3J0ZWQgdmlhIHRoZQogCSAqIGFjY2VsZXJhdGVkIHBhdGgsIHNpbmNlIFJBSUQgcGF0aCBpcyB1bmF3YXJlIG9mIHRoZXNlIGNvbW1hbmRzLAogCSAqIGJ1dCB1bmRlcmx5aW5nIGZpcm13YXJlIGNhbid0IGhhbmRsZSBhYm9ydCBUTUYuCkBAIC00NDQxLDI3ICs0NTUwLDggQEAKIAlpZiAoYWJvcnQtPmNtZF90eXBlID09IENNRF9JT0FDQ0VMMikKIAkJcmV0dXJuIGhwc2Ffc2VuZF9yZXNldF9hc19hYm9ydF9pb2FjY2VsMihoLCBzY3NpM2FkZHIsIGFib3J0KTsKIAotCS8qIHdlIGRvIG5vdCBleHBlY3QgdG8gZmluZCB0aGUgc3dpenpsZWQgdGFnIGluIG91ciBxdWV1ZSwgYnV0Ci0JICogY2hlY2sgYW55d2F5IGp1c3QgdG8gYmUgc3VyZSB0aGUgYXNzdW1wdGlvbnMgd2hpY2ggbWFrZSB0aGlzCi0JICogdGhlIGNhc2UgaGF2ZW4ndCBiZWNvbWUgd3JvbmcuCi0JICovCi0JbWVtY3B5KHN3aXp6bGVkX3RhZywgJmFib3J0LT5SZXF1ZXN0LkNEQls0XSwgOCk7Ci0Jc3dpenpsZV9hYm9ydF90YWcoc3dpenpsZWRfdGFnKTsKLQljID0gaHBzYV9maW5kX2NtZF9pbl9xdWV1ZV9ieV90YWcoaCwgc3dpenpsZWRfdGFnLCAmaC0+Y21wUSk7Ci0JaWYgKGMgIT0gTlVMTCkgewotCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiVW5leHBlY3RlZGx5IGZvdW5kIGJ5dGUtc3dhcHBlZCB0YWcgaW4gY29tcGxldGlvbiBxdWV1ZS5cbiIpOwotCQlyZXR1cm4gaHBzYV9zZW5kX2Fib3J0KGgsIHNjc2kzYWRkciwgYWJvcnQsIDApOwotCX0KLQlyYyA9IGhwc2Ffc2VuZF9hYm9ydChoLCBzY3NpM2FkZHIsIGFib3J0LCAwKTsKLQotCS8qIGlmIHRoZSBjb21tYW5kIGlzIHN0aWxsIGluIG91ciBxdWV1ZSwgd2UgY2FuJ3QgY29uY2x1ZGUgdGhhdCBpdCB3YXMKLQkgKiBhYm9ydGVkIChpdCBtaWdodCBoYXZlIGp1c3QgY29tcGxldGVkIG5vcm1hbGx5KSBidXQgaW4gYW55IGNhc2UKLQkgKiB3ZSBkb24ndCBuZWVkIHRvIHRyeSB0byBhYm9ydCBpdCBhbm90aGVyIHdheS4KLQkgKi8KLQljID0gaHBzYV9maW5kX2NtZF9pbl9xdWV1ZShoLCBhYm9ydC0+c2NzaV9jbWQsICZoLT5jbXBRKTsKLQlpZiAoYykKLQkJcmMyID0gaHBzYV9zZW5kX2Fib3J0KGgsIHNjc2kzYWRkciwgYWJvcnQsIDEpOwotCXJldHVybiByYyAmJiByYzI7CisJcmV0dXJuIGhwc2Ffc2VuZF9hYm9ydChoLCBzY3NpM2FkZHIsIGFib3J0LCAwKSAmJgorCQkJaHBzYV9zZW5kX2Fib3J0KGgsIHNjc2kzYWRkciwgYWJvcnQsIDEpOwogfQogCiAvKiBTZW5kIGFuIGFib3J0IGZvciB0aGUgc3BlY2lmaWVkIGNvbW1hbmQuCkBAIC00NDc1LDExICs0NTY1LDExIEBACiAJc3RydWN0IGN0bHJfaW5mbyAqaDsKIAlzdHJ1Y3QgaHBzYV9zY3NpX2Rldl90ICpkZXY7CiAJc3RydWN0IENvbW1hbmRMaXN0ICphYm9ydDsgLyogcG9pbnRlciB0byBjb21tYW5kIHRvIGJlIGFib3J0ZWQgKi8KLQlzdHJ1Y3QgQ29tbWFuZExpc3QgKmZvdW5kOwogCXN0cnVjdCBzY3NpX2NtbmQgKmFzOwkvKiBwdHIgdG8gc2NzaSBjbWQgaW5zaWRlIGFib3J0ZWQgY29tbWFuZC4gKi8KIAljaGFyIG1zZ1syNTZdOwkJLyogRm9yIGRlYnVnIG1lc3NhZ2luZy4gKi8KIAlpbnQgbWwgPSAwOwotCXUzMiB0YWd1cHBlciwgdGFnbG93ZXI7CisJX19sZTMyIHRhZ3VwcGVyLCB0YWdsb3dlcjsKKwlpbnQgcmVmY291bnQ7CiAKIAkvKiBGaW5kIHRoZSBjb250cm9sbGVyIG9mIHRoZSBjb21tYW5kIHRvIGJlIGFib3J0ZWQgKi8KIAloID0gc2Rldl90b19oYmEoc2MtPmRldmljZSk7CkBAIC00NDg3LDYgKzQ1NzcsOSBAQAogCQkJIkFCT1JUIFJFUVVFU1QgRkFJTEVELCBDb250cm9sbGVyIGxvb2t1cCBmYWlsZWQuXG4iKSkKIAkJcmV0dXJuIEZBSUxFRDsKIAorCWlmIChsb2NrdXBfZGV0ZWN0ZWQoaCkpCisJCXJldHVybiBGQUlMRUQ7CisKIAkvKiBDaGVjayB0aGF0IGNvbnRyb2xsZXIgc3VwcG9ydHMgc29tZSBraW5kIG9mIHRhc2sgYWJvcnQgKi8KIAlpZiAoIShIUFNBVE1GX1BIWVNfVEFTS19BQk9SVCAmIGgtPlRNRlN1cHBvcnRGbGFncykgJiYKIAkJIShIUFNBVE1GX0xPR19UQVNLX0FCT1JUICYgaC0+VE1GU3VwcG9ydEZsYWdzKSkKQEAgLTQ1MDgsNDEgKzQ2MDEsMjMgQEAKIAkvKiBHZXQgU0NTSSBjb21tYW5kIHRvIGJlIGFib3J0ZWQgKi8KIAlhYm9ydCA9IChzdHJ1Y3QgQ29tbWFuZExpc3QgKikgc2MtPmhvc3Rfc2NyaWJibGU7CiAJaWYgKGFib3J0ID09IE5VTEwpIHsKLQkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAiJXMgRkFJTEVELCBDb21tYW5kIHRvIGFib3J0IGlzIE5VTEwuXG4iLAotCQkJCW1zZyk7Ci0JCXJldHVybiBGQUlMRUQ7CisJCS8qIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgY29tbWFuZCBhbHJlYWR5IGNvbXBsZXRlZC4gKi8KKwkJcmV0dXJuIFNVQ0NFU1M7CisJfQorCXJlZmNvdW50ID0gYXRvbWljX2luY19yZXR1cm4oJmFib3J0LT5yZWZjb3VudCk7CisJaWYgKHJlZmNvdW50ID09IDEpIHsgLyogQ29tbWFuZCBpcyBkb25lIGFscmVhZHkuICovCisJCWNtZF9mcmVlKGgsIGFib3J0KTsKKwkJcmV0dXJuIFNVQ0NFU1M7CiAJfQogCWhwc2FfZ2V0X3RhZyhoLCBhYm9ydCwgJnRhZ2xvd2VyLCAmdGFndXBwZXIpOwogCW1sICs9IHNwcmludGYobXNnK21sLCAiVGFnOjB4JTA4eDolMDh4ICIsIHRhZ3VwcGVyLCB0YWdsb3dlcik7Ci0JYXMgID0gKHN0cnVjdCBzY3NpX2NtbmQgKikgYWJvcnQtPnNjc2lfY21kOworCWFzICA9IGFib3J0LT5zY3NpX2NtZDsKIAlpZiAoYXMgIT0gTlVMTCkKIAkJbWwgKz0gc3ByaW50Zihtc2crbWwsICJDb21tYW5kOjB4JXggU046MHglbHggIiwKIAkJCWFzLT5jbW5kWzBdLCBhcy0+c2VyaWFsX251bWJlcik7CiAJZGV2X2RiZygmaC0+cGRldi0+ZGV2LCAiJXNcbiIsIG1zZyk7CiAJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIkFib3J0IHJlcXVlc3Qgb24gQyVkOkIlZDpUJWQ6TCVkXG4iLAogCQloLT5zY3NpX2hvc3QtPmhvc3Rfbm8sIGRldi0+YnVzLCBkZXYtPnRhcmdldCwgZGV2LT5sdW4pOwotCi0JLyogU2VhcmNoIHJlcVEgdG8gU2VlIGlmIGNvbW1hbmQgaXMgcXVldWVkIGJ1dCBub3Qgc3VibWl0dGVkLAotCSAqIGlmIHNvLCBjb21wbGV0ZSB0aGUgY29tbWFuZCB3aXRoIGFib3J0ZWQgc3RhdHVzIGFuZCByZW1vdmUKLQkgKiBpdCBmcm9tIHRoZSByZXFRLgotCSAqLwotCWZvdW5kID0gaHBzYV9maW5kX2NtZF9pbl9xdWV1ZShoLCBzYywgJmgtPnJlcVEpOwotCWlmIChmb3VuZCkgewotCQlmb3VuZC0+ZXJyX2luZm8tPkNvbW1hbmRTdGF0dXMgPSBDTURfQUJPUlRFRDsKLQkJZmluaXNoX2NtZChmb3VuZCk7Ci0JCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICIlcyBSZXF1ZXN0IFNVQ0NFRURFRCAoZHJpdmVyIHF1ZXVlKS5cbiIsCi0JCQkJbXNnKTsKLQkJcmV0dXJuIFNVQ0NFU1M7Ci0JfQotCi0JLyogbm90IGluIHJlcVEsIGlmIGFsc28gbm90IGluIGNtcFEsIG11c3QgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZCAqLwotCWZvdW5kID0gaHBzYV9maW5kX2NtZF9pbl9xdWV1ZShoLCBzYywgJmgtPmNtcFEpOwotCWlmICghZm91bmQpICB7Ci0JCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIiVzIFJlcXVlc3QgU1VDQ0VFREVEIChub3Qga25vd24gdG8gZHJpdmVyKS5cbiIsCi0JCQkJbXNnKTsKLQkJcmV0dXJuIFNVQ0NFU1M7Ci0JfQotCiAJLyoKIAkgKiBDb21tYW5kIGlzIGluIGZsaWdodCwgb3IgcG9zc2libHkgYWxyZWFkeSBjb21wbGV0ZWQKIAkgKiBieSB0aGUgZmlybXdhcmUgKGJ1dCBub3QgdG8gdGhlIHNjc2kgbWlkIGxheWVyKSBidXQgd2UgY2FuJ3QKQEAgLTQ1NTQsNiArNDYyOSw3IEBACiAJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJGQUlMRUQgYWJvcnQgb24gZGV2aWNlIEMlZDpCJWQ6VCVkOkwlZFxuIiwKIAkJCWgtPnNjc2lfaG9zdC0+aG9zdF9ubywKIAkJCWRldi0+YnVzLCBkZXYtPnRhcmdldCwgZGV2LT5sdW4pOworCQljbWRfZnJlZShoLCBhYm9ydCk7CiAJCXJldHVybiBGQUlMRUQ7CiAJfQogCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICIlcyBSRVFVRVNUIFNVQ0NFRURFRC5cbiIsIG1zZyk7CkBAIC00NTY1LDMyICs0NjQxLDM4IEBACiAJICovCiAjZGVmaW5lIEFCT1JUX0NPTVBMRVRFX1dBSVRfU0VDUyAzMAogCWZvciAoaSA9IDA7IGkgPCBBQk9SVF9DT01QTEVURV9XQUlUX1NFQ1MgKiAxMDsgaSsrKSB7Ci0JCWZvdW5kID0gaHBzYV9maW5kX2NtZF9pbl9xdWV1ZShoLCBzYywgJmgtPmNtcFEpOwotCQlpZiAoIWZvdW5kKQorCQlyZWZjb3VudCA9IGF0b21pY19yZWFkKCZhYm9ydC0+cmVmY291bnQpOworCQlpZiAocmVmY291bnQgPCAyKSB7CisJCQljbWRfZnJlZShoLCBhYm9ydCk7CiAJCQlyZXR1cm4gU1VDQ0VTUzsKLQkJbXNsZWVwKDEwMCk7CisJCX0gZWxzZSB7CisJCQltc2xlZXAoMTAwKTsKKwkJfQogCX0KIAlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiJXMgRkFJTEVELiBBYm9ydGVkIGNvbW1hbmQgaGFzIG5vdCBjb21wbGV0ZWQgYWZ0ZXIgJWQgc2Vjb25kcy5cbiIsCiAJCW1zZywgQUJPUlRfQ09NUExFVEVfV0FJVF9TRUNTKTsKKwljbWRfZnJlZShoLCBhYm9ydCk7CiAJcmV0dXJuIEZBSUxFRDsKIH0KIAotCiAvKgogICogRm9yIG9wZXJhdGlvbnMgdGhhdCBjYW5ub3Qgc2xlZXAsIGEgY29tbWFuZCBibG9jayBpcyBhbGxvY2F0ZWQgYXQgaW5pdCwKICAqIGFuZCBtYW5hZ2VkIGJ5IGNtZF9hbGxvYygpIGFuZCBjbWRfZnJlZSgpIHVzaW5nIGEgc2ltcGxlIGJpdG1hcCB0byB0cmFjawogICogd2hpY2ggb25lcyBhcmUgZnJlZSBvciBpbiB1c2UuICBMb2NrIG11c3QgYmUgaGVsZCB3aGVuIGNhbGxpbmcgdGhpcy4KICAqIGNtZF9mcmVlKCkgaXMgdGhlIGNvbXBsZW1lbnQuCiAgKi8KKwogc3RhdGljIHN0cnVjdCBDb21tYW5kTGlzdCAqY21kX2FsbG9jKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJc3RydWN0IENvbW1hbmRMaXN0ICpjOwogCWludCBpOwogCXVuaW9uIHU2NGJpdCB0ZW1wNjQ7CiAJZG1hX2FkZHJfdCBjbWRfZG1hX2hhbmRsZSwgZXJyX2RtYV9oYW5kbGU7Ci0JaW50IGxvb3Bjb3VudDsKKwlpbnQgcmVmY291bnQ7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiAKLQkvKiBUaGVyZSBpcyBzb21lICpleHRyZW1lbHkqIHNtYWxsIGJ1dCBub24temVybyBjaGFuY2UgdGhhdCB0aGF0CisJLyoKKwkgKiBUaGVyZSBpcyBzb21lICpleHRyZW1lbHkqIHNtYWxsIGJ1dCBub24temVybyBjaGFuY2UgdGhhdCB0aGF0CiAJICogbXVsdGlwbGUgdGhyZWFkcyBjb3VsZCBnZXQgaW4gaGVyZSwgYW5kIG9uZSB0aHJlYWQgY291bGQKIAkgKiBiZSBzY2FubmluZyB0aHJvdWdoIHRoZSBsaXN0IG9mIGJpdHMgbG9va2luZyBmb3IgYSBmcmVlCiAJICogb25lLCBidXQgdGhlIGZyZWUgb25lcyBhcmUgYWx3YXlzIGJlaGluZCBoaW0sIGFuZCBvdGhlcgpAQCAtNDYwMSwyNCArNDY4MywzMCBAQAogCSAqIGluZnJlcXVlbnRseSBhcyB0byBiZSBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIG5ldmVyLgogCSAqLwogCi0JbG9vcGNvdW50ID0gMDsKLQlkbyB7Ci0JCWkgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGgtPmNtZF9wb29sX2JpdHMsIGgtPm5yX2NtZHMpOwotCQlpZiAoaSA9PSBoLT5ucl9jbWRzKQotCQkJaSA9IDA7Ci0JCWxvb3Bjb3VudCsrOwotCX0gd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoaSAmIChCSVRTX1BFUl9MT05HIC0gMSksCi0JCSAgaC0+Y21kX3Bvb2xfYml0cyArIChpIC8gQklUU19QRVJfTE9ORykpICE9IDAgJiYKLQkJbG9vcGNvdW50IDwgMTApOworCW9mZnNldCA9IGgtPmxhc3RfYWxsb2NhdGlvbjsgLyogYmVuaWdubHkgcmFjeSAqLworCWZvciAoOzspIHsKKwkJaSA9IGZpbmRfbmV4dF96ZXJvX2JpdChoLT5jbWRfcG9vbF9iaXRzLCBoLT5ucl9jbWRzLCBvZmZzZXQpOworCQlpZiAodW5saWtlbHkoaSA9PSBoLT5ucl9jbWRzKSkgeworCQkJb2Zmc2V0ID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCWMgPSBoLT5jbWRfcG9vbCArIGk7CisJCXJlZmNvdW50ID0gYXRvbWljX2luY19yZXR1cm4oJmMtPnJlZmNvdW50KTsKKwkJaWYgKHVubGlrZWx5KHJlZmNvdW50ID4gMSkpIHsKKwkJCWNtZF9mcmVlKGgsIGMpOyAvKiBhbHJlYWR5IGluIHVzZSAqLworCQkJb2Zmc2V0ID0gKGkgKyAxKSAlIGgtPm5yX2NtZHM7CisJCQljb250aW51ZTsKKwkJfQorCQlzZXRfYml0KGkgJiAoQklUU19QRVJfTE9ORyAtIDEpLAorCQkJaC0+Y21kX3Bvb2xfYml0cyArIChpIC8gQklUU19QRVJfTE9ORykpOworCQlicmVhazsgLyogaXQncyBvdXJzIG5vdy4gKi8KKwl9CisJaC0+bGFzdF9hbGxvY2F0aW9uID0gaTsgLyogYmVuaWdubHkgcmFjeSAqLwogCi0JLyogVGhyZWFkIGdvdCBzdGFydmVkPyAgV2UgZG8gbm90IGV4cGVjdCB0aGlzIHRvIGV2ZXIgaGFwcGVuLiAqLwotCWlmIChsb29wY291bnQgPj0gMTApCi0JCXJldHVybiBOVUxMOwotCi0JYyA9IGgtPmNtZF9wb29sICsgaTsKLQltZW1zZXQoYywgMCwgc2l6ZW9mKCpjKSk7Ci0JY21kX2RtYV9oYW5kbGUgPSBoLT5jbWRfcG9vbF9kaGFuZGxlCi0JICAgICsgaSAqIHNpemVvZigqYyk7CisJLyogWmVybyBvdXQgYWxsIG9mIGNvbW1hbmRsaXN0IGV4Y2VwdCB0aGUgbGFzdCBmaWVsZCwgcmVmY291bnQgKi8KKwltZW1zZXQoYywgMCwgb2Zmc2V0b2Yoc3RydWN0IENvbW1hbmRMaXN0LCByZWZjb3VudCkpOworCWMtPkhlYWRlci50YWcgPSBjcHVfdG9fbGU2NCgodTY0KSAoaSA8PCBESVJFQ1RfTE9PS1VQX1NISUZUKSk7CisJY21kX2RtYV9oYW5kbGUgPSBoLT5jbWRfcG9vbF9kaGFuZGxlICsgaSAqIHNpemVvZigqYyk7CiAJYy0+ZXJyX2luZm8gPSBoLT5lcnJpbmZvX3Bvb2wgKyBpOwogCW1lbXNldChjLT5lcnJfaW5mbywgMCwgc2l6ZW9mKCpjLT5lcnJfaW5mbykpOwogCWVycl9kbWFfaGFuZGxlID0gaC0+ZXJyaW5mb19wb29sX2RoYW5kbGUKQEAgLTQ2MjYsNDUgKzQ3MTQsMTAgQEAKIAogCWMtPmNtZGluZGV4ID0gaTsKIAotCUlOSVRfTElTVF9IRUFEKCZjLT5saXN0KTsKIAljLT5idXNhZGRyID0gKHUzMikgY21kX2RtYV9oYW5kbGU7CiAJdGVtcDY0LnZhbCA9ICh1NjQpIGVycl9kbWFfaGFuZGxlOwotCWMtPkVyckRlc2MuQWRkciA9IGNwdV90b19sZTY0KGVycl9kbWFfaGFuZGxlKTsKLQljLT5FcnJEZXNjLkxlbiA9IGNwdV90b19sZTMyKHNpemVvZigqYy0+ZXJyX2luZm8pKTsKLQotCWMtPmggPSBoOwotCXJldHVybiBjOwotfQotCi0vKiBGb3Igb3BlcmF0aW9ucyB0aGF0IGNhbiB3YWl0IGZvciBrbWFsbG9jIHRvIHBvc3NpYmx5IHNsZWVwLAotICogdGhpcyByb3V0aW5lIGNhbiBiZSBjYWxsZWQuIExvY2sgbmVlZCBub3QgYmUgaGVsZCB0byBjYWxsCi0gKiBjbWRfc3BlY2lhbF9hbGxvYy4gY21kX3NwZWNpYWxfZnJlZSgpIGlzIHRoZSBjb21wbGVtZW50LgotICovCi1zdGF0aWMgc3RydWN0IENvbW1hbmRMaXN0ICpjbWRfc3BlY2lhbF9hbGxvYyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQotewotCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKLQlkbWFfYWRkcl90IGNtZF9kbWFfaGFuZGxlLCBlcnJfZG1hX2hhbmRsZTsKLQotCWMgPSBwY2lfemFsbG9jX2NvbnNpc3RlbnQoaC0+cGRldiwgc2l6ZW9mKCpjKSwgJmNtZF9kbWFfaGFuZGxlKTsKLQlpZiAoYyA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCWMtPmNtZF90eXBlID0gQ01EX1NDU0k7Ci0JYy0+Y21kaW5kZXggPSAtMTsKLQotCWMtPmVycl9pbmZvID0gcGNpX3phbGxvY19jb25zaXN0ZW50KGgtPnBkZXYsIHNpemVvZigqYy0+ZXJyX2luZm8pLAotCQkJCQkgICAgJmVycl9kbWFfaGFuZGxlKTsKLQotCWlmIChjLT5lcnJfaW5mbyA9PSBOVUxMKSB7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoaC0+cGRldiwKLQkJCXNpemVvZigqYyksIGMsIGNtZF9kbWFfaGFuZGxlKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JSU5JVF9MSVNUX0hFQUQoJmMtPmxpc3QpOwotCWMtPmJ1c2FkZHIgPSAodTMyKSBjbWRfZG1hX2hhbmRsZTsKLQljLT5FcnJEZXNjLkFkZHIgPSBjcHVfdG9fbGU2NChlcnJfZG1hX2hhbmRsZSk7Ci0JYy0+RXJyRGVzYy5MZW4gPSBjcHVfdG9fbGUzMihzaXplb2YoKmMtPmVycl9pbmZvKSk7CisJYy0+RXJyRGVzYy5BZGRyID0gY3B1X3RvX2xlNjQoKHU2NCkgZXJyX2RtYV9oYW5kbGUpOworCWMtPkVyckRlc2MuTGVuID0gY3B1X3RvX2xlMzIoKHUzMikgc2l6ZW9mKCpjLT5lcnJfaW5mbykpOwogCiAJYy0+aCA9IGg7CiAJcmV0dXJuIGM7CkBAIC00NjcyLDIwICs0NzI1LDEzIEBACiAKIHN0YXRpYyB2b2lkIGNtZF9mcmVlKHN0cnVjdCBjdGxyX2luZm8gKmgsIHN0cnVjdCBDb21tYW5kTGlzdCAqYykKIHsKLQlpbnQgaTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYy0+cmVmY291bnQpKSB7CisJCWludCBpOwogCi0JaSA9IGMgLSBoLT5jbWRfcG9vbDsKLQljbGVhcl9iaXQoaSAmIChCSVRTX1BFUl9MT05HIC0gMSksCi0JCSAgaC0+Y21kX3Bvb2xfYml0cyArIChpIC8gQklUU19QRVJfTE9ORykpOwotfQotCi1zdGF0aWMgdm9pZCBjbWRfc3BlY2lhbF9mcmVlKHN0cnVjdCBjdGxyX2luZm8gKmgsIHN0cnVjdCBDb21tYW5kTGlzdCAqYykKLXsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsIHNpemVvZigqYy0+ZXJyX2luZm8pLAotCQkJICAgIGMtPmVycl9pbmZvLAotCQkJICAgIChkbWFfYWRkcl90KSBsZTY0X3RvX2NwdShjLT5FcnJEZXNjLkFkZHIpKTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGgtPnBkZXYsIHNpemVvZigqYyksCi0JCQkgICAgYywgKGRtYV9hZGRyX3QpIChjLT5idXNhZGRyICYgRElSRUNUX0xPT0tVUF9NQVNLKSk7CisJCWkgPSBjIC0gaC0+Y21kX3Bvb2w7CisJCWNsZWFyX2JpdChpICYgKEJJVFNfUEVSX0xPTkcgLSAxKSwKKwkJCSAgaC0+Y21kX3Bvb2xfYml0cyArIChpIC8gQklUU19QRVJfTE9ORykpOworCX0KIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTQ4NjYsNyArNDkxMiw3IEBACiAJCQltZW1zZXQoYnVmZiwgMCwgaW9jb21tYW5kLmJ1Zl9zaXplKTsKIAkJfQogCX0KLQljID0gY21kX3NwZWNpYWxfYWxsb2MoaCk7CisJYyA9IGNtZF9hbGxvYyhoKTsKIAlpZiAoYyA9PSBOVUxMKSB7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXRfa2ZyZWU7CkBAIC00ODgzLDggKzQ5MjksNiBAQAogCQljLT5IZWFkZXIuU0dUb3RhbCA9IGNwdV90b19sZTE2KDApOwogCX0KIAltZW1jcHkoJmMtPkhlYWRlci5MVU4sICZpb2NvbW1hbmQuTFVOX2luZm8sIHNpemVvZihjLT5IZWFkZXIuTFVOKSk7Ci0JLyogdXNlIHRoZSBrZXJuZWwgYWRkcmVzcyB0aGUgY21kIGJsb2NrIGZvciB0YWcgKi8KLQljLT5IZWFkZXIudGFnID0gYy0+YnVzYWRkcjsKIAogCS8qIEZpbGwgaW4gUmVxdWVzdCBibG9jayAqLwogCW1lbWNweSgmYy0+UmVxdWVzdCwgJmlvY29tbWFuZC5SZXF1ZXN0LApAQCAtNDkyNSw3ICs0OTY5LDcgQEAKIAkJfQogCX0KIG91dDoKLQljbWRfc3BlY2lhbF9mcmVlKGgsIGMpOworCWNtZF9mcmVlKGgsIGMpOwogb3V0X2tmcmVlOgogCWtmcmVlKGJ1ZmYpOwogCXJldHVybiByYzsKQEAgLTQ5NDAsNyArNDk4NCw2IEBACiAJdTY0IHRlbXA2NDsKIAlCWVRFIHNnX3VzZWQgPSAwOwogCWludCBzdGF0dXMgPSAwOwotCWludCBpOwogCXUzMiBsZWZ0OwogCXUzMiBzejsKIAlCWVRFIF9fdXNlciAqZGF0YV9wdHI7CkBAIC01MDA0LDcgKzUwNDcsNyBAQAogCQlkYXRhX3B0ciArPSBzejsKIAkJc2dfdXNlZCsrOwogCX0KLQljID0gY21kX3NwZWNpYWxfYWxsb2MoaCk7CisJYyA9IGNtZF9hbGxvYyhoKTsKIAlpZiAoYyA9PSBOVUxMKSB7CiAJCXN0YXR1cyA9IC1FTk9NRU07CiAJCWdvdG8gY2xlYW51cDE7CkBAIC01MDE0LDcgKzUwNTcsNiBAQAogCWMtPkhlYWRlci5TR0xpc3QgPSAodTgpIHNnX3VzZWQ7CiAJYy0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNihzZ191c2VkKTsKIAltZW1jcHkoJmMtPkhlYWRlci5MVU4sICZpb2MtPkxVTl9pbmZvLCBzaXplb2YoYy0+SGVhZGVyLkxVTikpOwotCWMtPkhlYWRlci50YWcgPSBjLT5idXNhZGRyOwogCW1lbWNweSgmYy0+UmVxdWVzdCwgJmlvYy0+UmVxdWVzdCwgc2l6ZW9mKGMtPlJlcXVlc3QpKTsKIAlpZiAoaW9jLT5idWZfc2l6ZSA+IDApIHsKIAkJaW50IGk7CkBAIC01MDQ3LDYgKzUwODksOCBAQAogCQlnb3RvIGNsZWFudXAwOwogCX0KIAlpZiAoKGlvYy0+UmVxdWVzdC5UeXBlLkRpcmVjdGlvbiAmIFhGRVJfUkVBRCkgJiYgaW9jLT5idWZfc2l6ZSA+IDApIHsKKwkJaW50IGk7CisKIAkJLyogQ29weSB0aGUgZGF0YSBvdXQgb2YgdGhlIGJ1ZmZlciB3ZSBjcmVhdGVkICovCiAJCUJZVEUgX191c2VyICpwdHIgPSBpb2MtPmJ1ZjsKIAkJZm9yIChpID0gMDsgaSA8IHNnX3VzZWQ7IGkrKykgewpAQCAtNTA1OSw5ICs1MTAzLDExIEBACiAJfQogCXN0YXR1cyA9IDA7CiBjbGVhbnVwMDoKLQljbWRfc3BlY2lhbF9mcmVlKGgsIGMpOworCWNtZF9mcmVlKGgsIGMpOwogY2xlYW51cDE6CiAJaWYgKGJ1ZmYpIHsKKwkJaW50IGk7CisKIAkJZm9yIChpID0gMDsgaSA8IHNnX3VzZWQ7IGkrKykKIAkJCWtmcmVlKGJ1ZmZbaV0pOwogCQlrZnJlZShidWZmKTsKQEAgLTUwNzksMzUgKzUxMjUsNiBAQAogCQkodm9pZCkgY2hlY2tfZm9yX3VuaXRfYXR0ZW50aW9uKGgsIGMpOwogfQogCi1zdGF0aWMgaW50IGluY3JlbWVudF9wYXNzdGhydV9jb3VudChzdHJ1Y3QgY3Rscl9pbmZvICpoKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+cGFzc3RocnVfY291bnRfbG9jaywgZmxhZ3MpOwotCWlmIChoLT5wYXNzdGhydV9jb3VudCA+PSBIUFNBX01BWF9DT05DVVJSRU5UX1BBU1NUSFJVUykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5wYXNzdGhydV9jb3VudF9sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAtMTsKLQl9Ci0JaC0+cGFzc3RocnVfY291bnQrKzsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5wYXNzdGhydV9jb3VudF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlY3JlbWVudF9wYXNzdGhydV9jb3VudChzdHJ1Y3QgY3Rscl9pbmZvICpoKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+cGFzc3RocnVfY291bnRfbG9jaywgZmxhZ3MpOwotCWlmIChoLT5wYXNzdGhydV9jb3VudCA8PSAwKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPnBhc3N0aHJ1X2NvdW50X2xvY2ssIGZsYWdzKTsKLQkJLyogbm90IGV4cGVjdGluZyB0byBnZXQgaGVyZS4gKi8KLQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIkJ1ZyBkZXRlY3RlZCwgcGFzc3RocnVfY291bnQgc2VlbXMgdG8gYmUgaW5jb3JyZWN0LlxuIik7Ci0JCXJldHVybjsKLQl9Ci0JaC0+cGFzc3RocnVfY291bnQtLTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5wYXNzdGhydV9jb3VudF9sb2NrLCBmbGFncyk7Ci19Ci0KIC8qCiAgKiBpb2N0bAogICovCkBAIC01MTMwLDE2ICs1MTQ3LDE2IEBACiAJY2FzZSBDQ0lTU19HRVREUklWVkVSOgogCQlyZXR1cm4gaHBzYV9nZXRkcml2dmVyX2lvY3RsKGgsIGFyZ3ApOwogCWNhc2UgQ0NJU1NfUEFTU1RIUlU6Ci0JCWlmIChpbmNyZW1lbnRfcGFzc3RocnVfY291bnQoaCkpCisJCWlmIChhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKCZoLT5wYXNzdGhydV9jbWRzX2F2YWlsKSA8IDApCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJcmMgPSBocHNhX3Bhc3N0aHJ1X2lvY3RsKGgsIGFyZ3ApOwotCQlkZWNyZW1lbnRfcGFzc3RocnVfY291bnQoaCk7CisJCWF0b21pY19pbmMoJmgtPnBhc3N0aHJ1X2NtZHNfYXZhaWwpOwogCQlyZXR1cm4gcmM7CiAJY2FzZSBDQ0lTU19CSUdfUEFTU1RIUlU6Ci0JCWlmIChpbmNyZW1lbnRfcGFzc3RocnVfY291bnQoaCkpCisJCWlmIChhdG9taWNfZGVjX2lmX3Bvc2l0aXZlKCZoLT5wYXNzdGhydV9jbWRzX2F2YWlsKSA8IDApCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAkJcmMgPSBocHNhX2JpZ19wYXNzdGhydV9pb2N0bChoLCBhcmdwKTsKLQkJZGVjcmVtZW50X3Bhc3N0aHJ1X2NvdW50KGgpOworCQlhdG9taWNfaW5jKCZoLT5wYXNzdGhydV9jbWRzX2F2YWlsKTsKIAkJcmV0dXJuIHJjOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwpAQCAtNTE3Myw3ICs1MTkwLDYgQEAKIHsKIAlpbnQgcGNpX2RpciA9IFhGRVJfTk9ORTsKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmE7IC8qIGZvciBjb21tYW5kcyB0byBiZSBhYm9ydGVkICovCi0JdTMyIHR1cHBlciwgdGxvd2VyOwogCiAJYy0+Y21kX3R5cGUgPSBDTURfSU9DVExfUEVORDsKIAljLT5IZWFkZXIuUmVwbHlRdWV1ZSA9IDA7CkBAIC01MTg0LDcgKzUyMDAsNiBAQAogCQljLT5IZWFkZXIuU0dMaXN0ID0gMDsKIAkJYy0+SGVhZGVyLlNHVG90YWwgPSBjcHVfdG9fbGUxNigwKTsKIAl9Ci0JYy0+SGVhZGVyLnRhZyA9IGMtPmJ1c2FkZHI7CiAJbWVtY3B5KGMtPkhlYWRlci5MVU4uTHVuQWRkckJ5dGVzLCBzY3NpM2FkZHIsIDgpOwogCiAJaWYgKGNtZF90eXBlID09IFRZUEVfQ01EKSB7CkBAIC01MjU2LDYgKzUyNzEsMTYgQEAKIAkJCWMtPlJlcXVlc3QuQ0RCWzddID0gKHNpemUgPj4gMTYpICYgMHhGRjsKIAkJCWMtPlJlcXVlc3QuQ0RCWzhdID0gKHNpemUgPj4gOCkgJiAweEZGOwogCQkJYnJlYWs7CisJCWNhc2UgQk1JQ19JREVOVElGWV9QSFlTSUNBTF9ERVZJQ0U6CisJCQljLT5SZXF1ZXN0LkNEQkxlbiA9IDEwOworCQkJYy0+UmVxdWVzdC50eXBlX2F0dHJfZGlyID0KKwkJCQlUWVBFX0FUVFJfRElSKGNtZF90eXBlLCBBVFRSX1NJTVBMRSwgWEZFUl9SRUFEKTsKKwkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CisJCQljLT5SZXF1ZXN0LkNEQlswXSA9IEJNSUNfUkVBRDsKKwkJCWMtPlJlcXVlc3QuQ0RCWzZdID0gQk1JQ19JREVOVElGWV9QSFlTSUNBTF9ERVZJQ0U7CisJCQljLT5SZXF1ZXN0LkNEQls3XSA9IChzaXplID4+IDE2KSAmIDB4RkY7CisJCQljLT5SZXF1ZXN0LkNEQls4XSA9IChzaXplID4+IDgpICYgMFhGRjsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInVua25vd24gY29tbWFuZCAweCVjXG4iLCBjbWQpOwogCQkJQlVHKCk7CkBAIC01MjgxLDEwICs1MzA2LDkgQEAKIAkJCWJyZWFrOwogCQljYXNlICBIUFNBX0FCT1JUX01TRzoKIAkJCWEgPSBidWZmOyAgICAgICAvKiBwb2ludCB0byBjb21tYW5kIHRvIGJlIGFib3J0ZWQgKi8KLQkJCWRldl9kYmcoJmgtPnBkZXYtPmRldiwgIkFib3J0IFRhZzoweCUwMTZsbHggdXNpbmcgcmVxdWVzdCBUYWc6MHglMDE2bGx4IiwKKwkJCWRldl9kYmcoJmgtPnBkZXYtPmRldiwKKwkJCQkiQWJvcnQgVGFnOjB4JTAxNmxseCByZXF1ZXN0IFRhZzoweCUwMTZsbHgiLAogCQkJCWEtPkhlYWRlci50YWcsIGMtPkhlYWRlci50YWcpOwotCQkJdGxvd2VyID0gKHUzMikgKGEtPkhlYWRlci50YWcgPj4gMzIpOwotCQkJdHVwcGVyID0gKHUzMikgKGEtPkhlYWRlci50YWcgJiAweDBmZmZmZmZmZlVMTCk7CiAJCQljLT5SZXF1ZXN0LkNEQkxlbiA9IDE2OwogCQkJYy0+UmVxdWVzdC50eXBlX2F0dHJfZGlyID0KIAkJCQkJVFlQRV9BVFRSX0RJUihjbWRfdHlwZSwKQEAgLTUyOTUsMTQgKzUzMTksOCBAQAogCQkJYy0+UmVxdWVzdC5DREJbMl0gPSAweDAwOyAvKiByZXNlcnZlZCAqLwogCQkJYy0+UmVxdWVzdC5DREJbM10gPSAweDAwOyAvKiByZXNlcnZlZCAqLwogCQkJLyogVGFnIHRvIGFib3J0IGdvZXMgaW4gQ0RCWzRdLUNEQlsxMV0gKi8KLQkJCWMtPlJlcXVlc3QuQ0RCWzRdID0gdGxvd2VyICYgMHhGRjsKLQkJCWMtPlJlcXVlc3QuQ0RCWzVdID0gKHRsb3dlciA+PiA4KSAmIDB4RkY7Ci0JCQljLT5SZXF1ZXN0LkNEQls2XSA9ICh0bG93ZXIgPj4gMTYpICYgMHhGRjsKLQkJCWMtPlJlcXVlc3QuQ0RCWzddID0gKHRsb3dlciA+PiAyNCkgJiAweEZGOwotCQkJYy0+UmVxdWVzdC5DREJbOF0gPSB0dXBwZXIgJiAweEZGOwotCQkJYy0+UmVxdWVzdC5DREJbOV0gPSAodHVwcGVyID4+IDgpICYgMHhGRjsKLQkJCWMtPlJlcXVlc3QuQ0RCWzEwXSA9ICh0dXBwZXIgPj4gMTYpICYgMHhGRjsKLQkJCWMtPlJlcXVlc3QuQ0RCWzExXSA9ICh0dXBwZXIgPj4gMjQpICYgMHhGRjsKKwkJCW1lbWNweSgmYy0+UmVxdWVzdC5DREJbNF0sICZhLT5IZWFkZXIudGFnLAorCQkJCXNpemVvZihhLT5IZWFkZXIudGFnKSk7CiAJCQljLT5SZXF1ZXN0LkNEQlsxMl0gPSAweDAwOyAvKiByZXNlcnZlZCAqLwogCQkJYy0+UmVxdWVzdC5DREJbMTNdID0gMHgwMDsgLyogcmVzZXJ2ZWQgKi8KIAkJCWMtPlJlcXVlc3QuQ0RCWzE0XSA9IDB4MDA7IC8qIHJlc2VydmVkICovCkBAIC01MzQ5LDQ3ICs1MzY3LDYgQEAKIAlyZXR1cm4gcGFnZV9yZW1hcHBlZCA/IChwYWdlX3JlbWFwcGVkICsgcGFnZV9vZmZzKSA6IE5VTEw7CiB9CiAKLS8qIFRha2VzIGNtZHMgb2ZmIHRoZSBzdWJtaXNzaW9uIHF1ZXVlIGFuZCBzZW5kcyB0aGVtIHRvIHRoZSBoYXJkd2FyZSwKLSAqIHRoZW4gcHV0cyB0aGVtIG9uIHRoZSBxdWV1ZSBvZiBjbWRzIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24uCi0gKiBBc3N1bWVzIGgtPmxvY2sgaXMgaGVsZAotICovCi1zdGF0aWMgdm9pZCBzdGFydF9pbyhzdHJ1Y3QgY3Rscl9pbmZvICpoLCB1bnNpZ25lZCBsb25nICpmbGFncykKLXsKLQlzdHJ1Y3QgQ29tbWFuZExpc3QgKmM7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmgtPnJlcVEpKSB7Ci0JCWMgPSBsaXN0X2VudHJ5KGgtPnJlcVEubmV4dCwgc3RydWN0IENvbW1hbmRMaXN0LCBsaXN0KTsKLQkJLyogY2FuJ3QgZG8gYW55dGhpbmcgaWYgZmlmbyBpcyBmdWxsICovCi0JCWlmICgoaC0+YWNjZXNzLmZpZm9fZnVsbChoKSkpIHsKLQkJCWgtPmZpZm9fcmVjZW50bHlfZnVsbCA9IDE7Ci0JCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiZmlmbyBmdWxsXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWgtPmZpZm9fcmVjZW50bHlfZnVsbCA9IDA7Ci0KLQkJLyogR2V0IHRoZSBmaXJzdCBlbnRyeSBmcm9tIHRoZSBSZXF1ZXN0IFEgKi8KLQkJcmVtb3ZlUShjKTsKLQkJaC0+UWRlcHRoLS07Ci0KLQkJLyogUHV0IGpvYiBvbnRvIHRoZSBjb21wbGV0ZWQgUSAqLwotCQlhZGRRKCZoLT5jbXBRLCBjKTsKLQkJYXRvbWljX2luYygmaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmcpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCAqZmxhZ3MpOwotCQkvKiBUZWxsIHRoZSBjb250cm9sbGVyIGV4ZWN1dGUgY29tbWFuZCAqLwotCQloLT5hY2Nlc3Muc3VibWl0X2NvbW1hbmQoaCwgYyk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCAqZmxhZ3MpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgbG9ja19hbmRfc3RhcnRfaW8oc3RydWN0IGN0bHJfaW5mbyAqaCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKLQlzdGFydF9pbyhoLCAmZmxhZ3MpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9uZXh0X2NvbXBsZXRpb24oc3RydWN0IGN0bHJfaW5mbyAqaCwgdTggcSkKIHsKIAlyZXR1cm4gaC0+YWNjZXNzLmNvbW1hbmRfY29tcGxldGVkKGgsIHEpOwpAQCAtNTQxOCw1MyArNTM5NSwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmluaXNoX2NtZChzdHJ1Y3QgQ29tbWFuZExpc3QgKmMpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgaW9fbWF5X2JlX3N0YWxsZWQgPSAwOwotCXN0cnVjdCBjdGxyX2luZm8gKmggPSBjLT5oOwotCWludCBjb3VudDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7Ci0JcmVtb3ZlUShjKTsKLQotCS8qCi0JICogQ2hlY2sgZm9yIHBvc3NpYmx5IHN0YWxsZWQgaS9vLgotCSAqCi0JICogSWYgYSBmaWZvX2Z1bGwgY29uZGl0aW9uIGlzIGVuY291bnRlcmVkLCByZXF1ZXN0cyB3aWxsIGJhY2sgdXAKLQkgKiBpbiBoLT5yZXFRLiAgVGhpcyBxdWV1ZSBpcyBvbmx5IGVtcHRpZWQgb3V0IGJ5IHN0YXJ0X2lvIHdoaWNoIGlzCi0JICogb25seSBjYWxsZWQgd2hlbiBhIG5ldyBpL28gcmVxdWVzdCBjb21lcyBpbi4gIElmIG5vIGkvbydzIGFyZQotCSAqIGZvcnRoY29taW5nLCB0aGUgaS9vJ3MgaW4gaC0+cmVxUSBjYW4gZ2V0IHN0dWNrLiAgU28gd2UgY2FsbAotCSAqIHN0YXJ0X2lvIGZyb20gaGVyZSBpZiB3ZSBkZXRlY3Qgc3VjaCBhIGRhbmdlci4KLQkgKgotCSAqIE5vcm1hbGx5LCB3ZSBzaG91bGRuJ3QgaGl0IHRoaXMgY2FzZSwgYnV0IHBvdW5kaW5nIG9uIHRoZQotCSAqIENDSVNTX1BBU1NUSFJVIGlvY3RsIGNhbiBwcm92b2tlIGl0LiAgT25seSBjYWxsIHN0YXJ0X2lvIGlmCi0JICogY29tbWFuZHNfb3V0c3RhbmRpbmcgaXMgbG93LiAgV2Ugd2FudCB0byBhdm9pZCBjYWxsaW5nCi0JICogc3RhcnRfaW8gZnJvbSBpbiBoZXJlIGFzIG11Y2ggYXMgcG9zc2libGUsIGFuZCBlc3AuIGRvbid0Ci0JICogd2FudCB0byBnZXQgaW4gYSBjeWNsZSB3aGVyZSB3ZSBjYWxsIHN0YXJ0X2lvIGV2ZXJ5IHRpbWUKLQkgKiB0aHJvdWdoIGhlcmUuCi0JICovCi0JY291bnQgPSBhdG9taWNfcmVhZCgmaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKLQlpZiAodW5saWtlbHkoaC0+Zmlmb19yZWNlbnRseV9mdWxsKSAmJiBjb3VudCA8IDUpCi0JCWlvX21heV9iZV9zdGFsbGVkID0gMTsKLQogCWRpYWxfdXBfbG9ja3VwX2RldGVjdGlvbl9vbl9md19mbGFzaF9jb21wbGV0ZShjLT5oLCBjKTsKIAlpZiAobGlrZWx5KGMtPmNtZF90eXBlID09IENNRF9JT0FDQ0VMMSB8fCBjLT5jbWRfdHlwZSA9PSBDTURfU0NTSQogCQkJfHwgYy0+Y21kX3R5cGUgPT0gQ01EX0lPQUNDRUwyKSkKIAkJY29tcGxldGVfc2NzaV9jb21tYW5kKGMpOwogCWVsc2UgaWYgKGMtPmNtZF90eXBlID09IENNRF9JT0NUTF9QRU5EKQogCQljb21wbGV0ZShjLT53YWl0aW5nKTsKLQlpZiAodW5saWtlbHkoaW9fbWF5X2JlX3N0YWxsZWQpKQotCQlsb2NrX2FuZF9zdGFydF9pbyhoKTsKLX0KLQotc3RhdGljIGlubGluZSB1MzIgaHBzYV90YWdfY29udGFpbnNfaW5kZXgodTMyIHRhZykKLXsKLQlyZXR1cm4gdGFnICYgRElSRUNUX0xPT0tVUF9CSVQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGhwc2FfdGFnX3RvX2luZGV4KHUzMiB0YWcpCi17Ci0JcmV0dXJuIHRhZyA+PiBESVJFQ1RfTE9PS1VQX1NISUZUOwogfQogCiAKQEAgLTU0ODQsMzQgKzU0MjAsMTMgQEAKIAl1MzIgdGFnX2luZGV4OwogCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKIAotCXRhZ19pbmRleCA9IGhwc2FfdGFnX3RvX2luZGV4KHJhd190YWcpOworCXRhZ19pbmRleCA9IHJhd190YWcgPj4gRElSRUNUX0xPT0tVUF9TSElGVDsKIAlpZiAoIWJhZF90YWcoaCwgdGFnX2luZGV4LCByYXdfdGFnKSkgewogCQljID0gaC0+Y21kX3Bvb2wgKyB0YWdfaW5kZXg7CiAJCWZpbmlzaF9jbWQoYyk7CiAJfQogfQogCi0vKiBwcm9jZXNzIGNvbXBsZXRpb24gb2YgYSBub24taW5kZXhlZCBjb21tYW5kICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc19ub25pbmRleGVkX2NtZChzdHJ1Y3QgY3Rscl9pbmZvICpoLAotCXUzMiByYXdfdGFnKQotewotCXUzMiB0YWc7Ci0Jc3RydWN0IENvbW1hbmRMaXN0ICpjID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JdGFnID0gaHBzYV90YWdfZGlzY2FyZF9lcnJvcl9iaXRzKGgsIHJhd190YWcpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmaC0+Y21wUSwgbGlzdCkgewotCQlpZiAoKGMtPmJ1c2FkZHIgJiAweEZGRkZGRkUwKSA9PSAodGFnICYgMHhGRkZGRkZFMCkpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKLQkJCWZpbmlzaF9jbWQoYyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOwotCWJhZF90YWcoaCwgaC0+bnJfY21kcyArIDEsIHJhd190YWcpOwotfQotCiAvKiBTb21lIGNvbnRyb2xsZXJzLCBsaWtlIHA0MDAsIHdpbGwgZ2l2ZSB1cyBvbmUgaW50ZXJydXB0CiAgKiBhZnRlciBhIHNvZnQgcmVzZXQsIGV2ZW4gaWYgd2UgdHVybmVkIGludGVycnVwdHMgb2ZmLgogICogT25seSBuZWVkIHRvIGNoZWNrIGZvciB0aGlzIGluIHRoZSBocHNhX3h4eF9kaXNjYXJkX2NvbXBsZXRpb25zCkBAIC01NTg5LDEwICs1NTA0LDcgQEAKIAl3aGlsZSAoaW50ZXJydXB0X3BlbmRpbmcoaCkpIHsKIAkJcmF3X3RhZyA9IGdldF9uZXh0X2NvbXBsZXRpb24oaCwgcSk7CiAJCXdoaWxlIChyYXdfdGFnICE9IEZJRk9fRU1QVFkpIHsKLQkJCWlmIChsaWtlbHkoaHBzYV90YWdfY29udGFpbnNfaW5kZXgocmF3X3RhZykpKQotCQkJCXByb2Nlc3NfaW5kZXhlZF9jbWQoaCwgcmF3X3RhZyk7Ci0JCQllbHNlCi0JCQkJcHJvY2Vzc19ub25pbmRleGVkX2NtZChoLCByYXdfdGFnKTsKKwkJCXByb2Nlc3NfaW5kZXhlZF9jbWQoaCwgcmF3X3RhZyk7CiAJCQlyYXdfdGFnID0gbmV4dF9jb21tYW5kKGgsIHEpOwogCQl9CiAJfQpAQCAtNTYwOCwxMCArNTUyMCw3IEBACiAJaC0+bGFzdF9pbnRyX3RpbWVzdGFtcCA9IGdldF9qaWZmaWVzXzY0KCk7CiAJcmF3X3RhZyA9IGdldF9uZXh0X2NvbXBsZXRpb24oaCwgcSk7CiAJd2hpbGUgKHJhd190YWcgIT0gRklGT19FTVBUWSkgewotCQlpZiAobGlrZWx5KGhwc2FfdGFnX2NvbnRhaW5zX2luZGV4KHJhd190YWcpKSkKLQkJCXByb2Nlc3NfaW5kZXhlZF9jbWQoaCwgcmF3X3RhZyk7Ci0JCWVsc2UKLQkJCXByb2Nlc3Nfbm9uaW5kZXhlZF9jbWQoaCwgcmF3X3RhZyk7CisJCXByb2Nlc3NfaW5kZXhlZF9jbWQoaCwgcmF3X3RhZyk7CiAJCXJhd190YWcgPSBuZXh0X2NvbW1hbmQoaCwgcSk7CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTU2MzMsNyArNTU0Miw4IEBACiAJc3RhdGljIGNvbnN0IHNpemVfdCBjbWRfc3ogPSBzaXplb2YoKmNtZCkgKwogCQkJCQlzaXplb2YoY21kLT5FcnJvckRlc2NyaXB0b3IpOwogCWRtYV9hZGRyX3QgcGFkZHI2NDsKLQl1aW50MzJfdCBwYWRkcjMyLCB0YWc7CisJX19sZTMyIHBhZGRyMzI7CisJdTMyIHRhZzsKIAl2b2lkIF9faW9tZW0gKnZhZGRyOwogCWludCBpLCBlcnI7CiAKQEAgLTU2NDgsNyArNTU1OCw3IEBACiAJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwogCWlmIChlcnIpIHsKIAkJaW91bm1hcCh2YWRkcik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gZXJyOwogCX0KIAogCWNtZCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIGNtZF9zeiwgJnBhZGRyNjQpOwpAQCAtNTY2MSwxMiArNTU3MSwxMiBAQAogCSAqIGFsdGhvdWdoIHRoZXJlJ3Mgbm8gZ3VhcmFudGVlLCB3ZSBhc3N1bWUgdGhhdCB0aGUgYWRkcmVzcyBpcyBhdAogCSAqIGxlYXN0IDQtYnl0ZSBhbGlnbmVkIChtb3N0IGxpa2VseSwgaXQncyBwYWdlLWFsaWduZWQpLgogCSAqLwotCXBhZGRyMzIgPSBwYWRkcjY0OworCXBhZGRyMzIgPSBjcHVfdG9fbGUzMihwYWRkcjY0KTsKIAogCWNtZC0+Q29tbWFuZEhlYWRlci5SZXBseVF1ZXVlID0gMDsKIAljbWQtPkNvbW1hbmRIZWFkZXIuU0dMaXN0ID0gMDsKIAljbWQtPkNvbW1hbmRIZWFkZXIuU0dUb3RhbCA9IGNwdV90b19sZTE2KDApOwotCWNtZC0+Q29tbWFuZEhlYWRlci50YWcgPSBwYWRkcjMyOworCWNtZC0+Q29tbWFuZEhlYWRlci50YWcgPSBjcHVfdG9fbGU2NChwYWRkcjY0KTsKIAltZW1zZXQoJmNtZC0+Q29tbWFuZEhlYWRlci5MVU4uTHVuQWRkckJ5dGVzLCAwLCA4KTsKIAogCWNtZC0+UmVxdWVzdC5DREJMZW4gPSAxNjsKQEAgLTU2NzcsMTQgKzU1ODcsMTQgQEAKIAljbWQtPlJlcXVlc3QuQ0RCWzFdID0gdHlwZTsKIAltZW1zZXQoJmNtZC0+UmVxdWVzdC5DREJbMl0sIDAsIDE0KTsgLyogcmVzdCBvZiB0aGUgQ0RCIGlzIHJlc2VydmVkICovCiAJY21kLT5FcnJvckRlc2NyaXB0b3IuQWRkciA9Ci0JCQljcHVfdG9fbGU2NCgocGFkZHIzMiArIHNpemVvZigqY21kKSkpOworCQkJY3B1X3RvX2xlNjQoKGxlMzJfdG9fY3B1KHBhZGRyMzIpICsgc2l6ZW9mKCpjbWQpKSk7CiAJY21kLT5FcnJvckRlc2NyaXB0b3IuTGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBFcnJvckluZm8pKTsKIAotCXdyaXRlbChwYWRkcjMyLCB2YWRkciArIFNBNV9SRVFVRVNUX1BPUlRfT0ZGU0VUKTsKKwl3cml0ZWwobGUzMl90b19jcHUocGFkZHIzMiksIHZhZGRyICsgU0E1X1JFUVVFU1RfUE9SVF9PRkZTRVQpOwogCiAJZm9yIChpID0gMDsgaSA8IEhQU0FfTVNHX1NFTkRfUkVUUllfTElNSVQ7IGkrKykgewogCQl0YWcgPSByZWFkbCh2YWRkciArIFNBNV9SRVBMWV9QT1JUX09GRlNFVCk7Ci0JCWlmICgodGFnICYgfkhQU0FfU0lNUExFX0VSUk9SX0JJVFMpID09IHBhZGRyMzIpCisJCWlmICgodGFnICYgfkhQU0FfU0lNUExFX0VSUk9SX0JJVFMpID09IHBhZGRyNjQpCiAJCQlicmVhazsKIAkJbXNsZWVwKEhQU0FfTVNHX1NFTkRfUkVUUllfSU5URVJWQUxfTVNFQ1MpOwogCX0KQEAgLTU3MTgsOCArNTYyOCw2IEBACiBzdGF0aWMgaW50IGhwc2FfY29udHJvbGxlcl9oYXJkX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCXZvaWQgX19pb21lbSAqdmFkZHIsIHUzMiB1c2VfZG9vcmJlbGwpCiB7Ci0JdTE2IHBtY3NyOwotCWludCBwb3M7CiAKIAlpZiAodXNlX2Rvb3JiZWxsKSB7CiAJCS8qIEZvciBldmVyeXRoaW5nIGFmdGVyIHRoZSBQNjAwLCB0aGUgUENJIHBvd2VyIHN0YXRlIG1ldGhvZApAQCAtNTc0NSwyNiArNTY1MywyMSBAQAogCQkgKiB0aGlzIGNhdXNlcyBhIHNlY29uZGFyeSBQQ0kgcmVzZXQgd2hpY2ggd2lsbCByZXNldCB0aGUKIAkJICogY29udHJvbGxlci4iICovCiAKLQkJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1BNKTsKLQkJaWYgKHBvcyA9PSAwKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkJImhwc2FfcmVzZXRfY29udHJvbGxlcjogIgotCQkJCSJQQ0kgUE0gbm90IHN1cHBvcnRlZFxuIik7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfQorCQlpbnQgcmMgPSAwOworCiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJ1c2luZyBQQ0kgUE0gdG8gcmVzZXQgY29udHJvbGxlclxuIik7CisKIAkJLyogZW50ZXIgdGhlIEQzaG90IHBvd2VyIG1hbmFnZW1lbnQgc3RhdGUgKi8KLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgcG9zICsgUENJX1BNX0NUUkwsICZwbWNzcik7Ci0JCXBtY3NyICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOwotCQlwbWNzciB8PSBQQ0lfRDNob3Q7Ci0JCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfUE1fQ1RSTCwgcG1jc3IpOworCQlyYyA9IHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOwogCiAJCW1zbGVlcCg1MDApOwogCiAJCS8qIGVudGVyIHRoZSBEMCBwb3dlciBtYW5hZ2VtZW50IHN0YXRlICovCi0JCXBtY3NyICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOwotCQlwbWNzciB8PSBQQ0lfRDA7Ci0JCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfUE1fQ1RSTCwgcG1jc3IpOworCQlyYyA9IHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOwogCiAJCS8qCiAJCSAqIFRoZSBQNjAwIHJlcXVpcmVzIGEgc21hbGwgZGVsYXkgd2hlbiBjaGFuZ2luZyBzdGF0ZXMuCkBAIC01ODU4LDggKzU3NjEsMTIgQEAKIAkgKi8KIAogCXJjID0gaHBzYV9sb29rdXBfYm9hcmRfaWQocGRldiwgJmJvYXJkX2lkKTsKLQlpZiAocmMgPCAwIHx8ICFjdGxyX2lzX3Jlc2V0dGFibGUoYm9hcmRfaWQpKSB7Ci0JCWRldl93YXJuKCZwZGV2LT5kZXYsICJOb3QgcmVzZXR0aW5nIGRldmljZS5cbiIpOworCWlmIChyYyA8IDApIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkJvYXJkIElEIG5vdCBmb3VuZFxuIik7CisJCXJldHVybiByYzsKKwl9CisJaWYgKCFjdGxyX2lzX3Jlc2V0dGFibGUoYm9hcmRfaWQpKSB7CisJCWRldl93YXJuKCZwZGV2LT5kZXYsICJDb250cm9sbGVyIG5vdCByZXNldHRhYmxlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC01ODkyLDcgKzU3OTksNyBAQAogCX0KIAlyYyA9IHdyaXRlX2RyaXZlcl92ZXJfdG9fY2ZndGFibGUoY2ZndGFibGUpOwogCWlmIChyYykKLQkJZ290byB1bm1hcF92YWRkcjsKKwkJZ290byB1bm1hcF9jZmd0YWJsZTsKIAogCS8qIElmIHJlc2V0IHZpYSBkb29yYmVsbCByZWdpc3RlciBpcyBzdXBwb3J0ZWQsIHVzZSB0aGF0LgogCSAqIFRoZXJlIGFyZSB0d28gc3VjaCBtZXRob2RzLiAgRmF2b3IgdGhlIG5ld2VzdCBtZXRob2QuCkBAIC01OTA0LDggKzU4MTEsOCBAQAogCX0gZWxzZSB7CiAJCXVzZV9kb29yYmVsbCA9IG1pc2NfZndfc3VwcG9ydCAmIE1JU0NfRldfRE9PUkJFTExfUkVTRVQ7CiAJCWlmICh1c2VfZG9vcmJlbGwpIHsKLQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJTb2Z0IHJlc2V0IG5vdCBzdXBwb3J0ZWQuICIKLQkJCQkiRmlybXdhcmUgdXBkYXRlIGlzIHJlcXVpcmVkLlxuIik7CisJCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJCSJTb2Z0IHJlc2V0IG5vdCBzdXBwb3J0ZWQuIEZpcm13YXJlIHVwZGF0ZSBpcyByZXF1aXJlZC5cbiIpOwogCQkJcmMgPSAtRU5PVFNVUFA7IC8qIHRyeSBzb2Z0IHJlc2V0ICovCiAJCQlnb3RvIHVubWFwX2NmZ3RhYmxlOwogCQl9CkBAIC01OTI1LDggKzU4MzIsNyBAQAogCXJjID0gaHBzYV93YWl0X2Zvcl9ib2FyZF9zdGF0ZShwZGV2LCB2YWRkciwgQk9BUkRfUkVBRFkpOwogCWlmIChyYykgewogCQlkZXZfd2FybigmcGRldi0+ZGV2LAotCQkJImZhaWxlZCB3YWl0aW5nIGZvciBib2FyZCB0byBiZWNvbWUgcmVhZHkgIgotCQkJImFmdGVyIGhhcmQgcmVzZXRcbiIpOworCQkJIkZhaWxlZCB3YWl0aW5nIGZvciBib2FyZCB0byBiZWNvbWUgcmVhZHkgYWZ0ZXIgaGFyZCByZXNldFxuIik7CiAJCWdvdG8gdW5tYXBfY2ZndGFibGU7CiAJfQogCkBAIC01OTc3LDcgKzU4ODMsNyBAQAogCSAgICAgICByZWFkbCgmKHRiLT5Ib3N0V3JpdGUuQ29hbEludERlbGF5KSkpOwogCWRldl9pbmZvKGRldiwgIiAgIENvYWxlc2NlIEludGVycnVwdCBDb3VudCA9IDB4JXhcbiIsCiAJICAgICAgIHJlYWRsKCYodGItPkhvc3RXcml0ZS5Db2FsSW50Q291bnQpKSk7Ci0JZGV2X2luZm8oZGV2LCAiICAgTWF4IG91dHN0YW5kaW5nIGNvbW1hbmRzID0gMHglZFxuIiwKKwlkZXZfaW5mbyhkZXYsICIgICBNYXggb3V0c3RhbmRpbmcgY29tbWFuZHMgPSAlZFxuIiwKIAkgICAgICAgcmVhZGwoJih0Yi0+Q21kc091dE1heCkpKTsKIAlkZXZfaW5mbyhkZXYsICIgICBCdXMgVHlwZXMgPSAweCV4XG4iLCByZWFkbCgmKHRiLT5CdXNUeXBlcykpKTsKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKQEAgLTYwMjUsNyArNTkzMSw3IEBACiB9CiAKIC8qIElmIE1TSS9NU0ktWCBpcyBzdXBwb3J0ZWQgYnkgdGhlIGtlcm5lbCB3ZSB3aWxsIHRyeSB0byBlbmFibGUgaXQgb24KLSAqIGNvbnRyb2xsZXJzIHRoYXQgYXJlIGNhcGFibGUuIElmIG5vdCwgd2UgdXNlIElPLUFQSUMgbW9kZS4KKyAqIGNvbnRyb2xsZXJzIHRoYXQgYXJlIGNhcGFibGUuIElmIG5vdCwgd2UgdXNlIGxlZ2FjeSBJTlR4IG1vZGUuCiAgKi8KIAogc3RhdGljIHZvaWQgaHBzYV9pbnRlcnJ1cHRfbW9kZShzdHJ1Y3QgY3Rscl9pbmZvICpoKQpAQCAtNjA0NCw3ICs1OTUwLDcgQEAKIAkgICAgKGgtPmJvYXJkX2lkID09IDB4NDA4MjBFMTEpIHx8IChoLT5ib2FyZF9pZCA9PSAweDQwODMwRTExKSkKIAkJZ290byBkZWZhdWx0X2ludF9tb2RlOwogCWlmIChwY2lfZmluZF9jYXBhYmlsaXR5KGgtPnBkZXYsIFBDSV9DQVBfSURfTVNJWCkpIHsKLQkJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIk1TSVhcbiIpOworCQlkZXZfaW5mbygmaC0+cGRldi0+ZGV2LCAiTVNJLVggY2FwYWJsZSBjb250cm9sbGVyXG4iKTsKIAkJaC0+bXNpeF92ZWN0b3IgPSBNQVhfUkVQTFlfUVVFVUVTOwogCQlpZiAoaC0+bXNpeF92ZWN0b3IgPiBudW1fb25saW5lX2NwdXMoKSkKIAkJCWgtPm1zaXhfdmVjdG9yID0gbnVtX29ubGluZV9jcHVzKCk7CkBAIC02MDY1LDcgKzU5NzEsNyBAQAogCX0KIHNpbmdsZV9tc2lfbW9kZToKIAlpZiAocGNpX2ZpbmRfY2FwYWJpbGl0eShoLT5wZGV2LCBQQ0lfQ0FQX0lEX01TSSkpIHsKLQkJZGV2X2luZm8oJmgtPnBkZXYtPmRldiwgIk1TSVxuIik7CisJCWRldl9pbmZvKCZoLT5wZGV2LT5kZXYsICJNU0kgY2FwYWJsZSBjb250cm9sbGVyXG4iKTsKIAkJaWYgKCFwY2lfZW5hYmxlX21zaShoLT5wZGV2KSkKIAkJCWgtPm1zaV92ZWN0b3IgPSAxOwogCQllbHNlCkBAIC02MTcyLDggKzYwNzgsMTAgQEAKIAkJcmV0dXJuIHJjOwogCWgtPmNmZ3RhYmxlID0gcmVtYXBfcGNpX21lbShwY2lfcmVzb3VyY2Vfc3RhcnQoaC0+cGRldiwKIAkJICAgICAgIGNmZ19iYXNlX2FkZHJfaW5kZXgpICsgY2ZnX29mZnNldCwgc2l6ZW9mKCpoLT5jZmd0YWJsZSkpOwotCWlmICghaC0+Y2ZndGFibGUpCisJaWYgKCFoLT5jZmd0YWJsZSkgeworCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJGYWlsZWQgbWFwcGluZyBjZmd0YWJsZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAlyYyA9IHdyaXRlX2RyaXZlcl92ZXJfdG9fY2ZndGFibGUoaC0+Y2ZndGFibGUpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwpAQCAtNjIwNCw2ICs2MTEyLDE1IEBACiAJfQogfQogCisvKiBJZiB0aGUgY29udHJvbGxlciByZXBvcnRzIHRoYXQgdGhlIHRvdGFsIG1heCBzZyBlbnRyaWVzIGlzIGdyZWF0ZXIgdGhhbiA1MTIsCisgKiB0aGVuIHdlIGtub3cgdGhhdCBjaGFpbmVkIFNHIGJsb2NrcyB3b3JrLiAgKE9yaWdpbmFsIHNtYXJ0IGFycmF5cyBkaWQgbm90CisgKiBzdXBwb3J0IGNoYWluZWQgU0cgYmxvY2tzIGFuZCB3b3VsZCByZXR1cm4gemVybyBmb3IgbWF4IHNnIGVudHJpZXMuKQorICovCitzdGF0aWMgaW50IGhwc2Ffc3VwcG9ydHNfY2hhaW5lZF9zZ19ibG9ja3Moc3RydWN0IGN0bHJfaW5mbyAqaCkKK3sKKwlyZXR1cm4gaC0+bWF4c2dlbnRyaWVzID4gNTEyOworfQorCiAvKiBJbnRlcnJvZ2F0ZSB0aGUgaGFyZHdhcmUgZm9yIHNvbWUgbGltaXRzOgogICogbWF4IGNvbW1hbmRzLCBtYXggU0cgZWxlbWVudHMgd2l0aG91dCBjaGFpbmluZywgYW5kIHdpdGggY2hhaW5pbmcsCiAgKiBTRyBjaGFpbiBibG9jayBzaXplLCBldGMuCkBAIC02MjExLDIxICs2MTI4LDIzIEBACiBzdGF0aWMgdm9pZCBocHNhX2ZpbmRfYm9hcmRfcGFyYW1zKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJaHBzYV9nZXRfbWF4X3BlcmZfbW9kZV9jbWRzKGgpOwotCWgtPm5yX2NtZHMgPSBoLT5tYXhfY29tbWFuZHMgLSA0OyAvKiBBbGxvdyByb29tIGZvciBzb21lIGlvY3RscyAqLworCWgtPm5yX2NtZHMgPSBoLT5tYXhfY29tbWFuZHM7CiAJaC0+bWF4c2dlbnRyaWVzID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+TWF4U2NhdHRlckdhdGhlckVsZW1lbnRzKSk7CiAJaC0+Zndfc3VwcG9ydCA9IHJlYWRsKCYoaC0+Y2ZndGFibGUtPm1pc2NfZndfc3VwcG9ydCkpOwotCS8qCi0JICogTGltaXQgaW4tY29tbWFuZCBzL2cgZWxlbWVudHMgdG8gMzIgc2F2ZSBkbWEnYWJsZSBtZW1vcnkuCi0JICogSG93dmV2ZXIgc3BlYyBzYXlzIGlmIDAsIHVzZSAzMQotCSAqLwotCWgtPm1heF9jbWRfc2dfZW50cmllcyA9IDMxOwotCWlmIChoLT5tYXhzZ2VudHJpZXMgPiA1MTIpIHsKKwlpZiAoaHBzYV9zdXBwb3J0c19jaGFpbmVkX3NnX2Jsb2NrcyhoKSkgeworCQkvKiBMaW1pdCBpbi1jb21tYW5kIHMvZyBlbGVtZW50cyB0byAzMiBzYXZlIGRtYSdhYmxlIG1lbW9yeS4gKi8KIAkJaC0+bWF4X2NtZF9zZ19lbnRyaWVzID0gMzI7CiAJCWgtPmNoYWluc2l6ZSA9IGgtPm1heHNnZW50cmllcyAtIGgtPm1heF9jbWRfc2dfZW50cmllczsKIAkJaC0+bWF4c2dlbnRyaWVzLS07IC8qIHNhdmUgb25lIGZvciBjaGFpbiBwb2ludGVyICovCiAJfSBlbHNlIHsKLQkJaC0+Y2hhaW5zaXplID0gMDsKKwkJLyoKKwkJICogT3JpZ2luYWwgc21hcnQgYXJyYXlzIHN1cHBvcnRlZCBhdCBtb3N0IDMxIHMvZyBlbnRyaWVzCisJCSAqIGVtYmVkZGVkIGlubGluZSBpbiB0aGUgY29tbWFuZCAodHJ5aW5nIHRvIHVzZSBtb3JlCisJCSAqIHdvdWxkIGxvY2sgdXAgdGhlIGNvbnRyb2xsZXIpCisJCSAqLworCQloLT5tYXhfY21kX3NnX2VudHJpZXMgPSAzMTsKIAkJaC0+bWF4c2dlbnRyaWVzID0gMzE7IC8qIGRlZmF1bHQgdG8gdHJhZGl0aW9uYWwgdmFsdWVzICovCisJCWgtPmNoYWluc2l6ZSA9IDA7CiAJfQogCiAJLyogRmluZCBvdXQgd2hhdCB0YXNrIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGFyZSBzdXBwb3J0ZWQgYW5kIGNhY2hlICovCkBAIC02MjM5LDcgKzYxNTgsNyBAQAogc3RhdGljIGlubGluZSBib29sIGhwc2FfQ0lTU19zaWduYXR1cmVfcHJlc2VudChzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewogCWlmICghY2hlY2tfc2lnbmF0dXJlKGgtPmNmZ3RhYmxlLT5TaWduYXR1cmUsICJDSVNTIiwgNCkpIHsKLQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIm5vdCBhIHZhbGlkIENJU1MgY29uZmlnIHRhYmxlXG4iKTsKKwkJZGV2X2VycigmaC0+cGRldi0+ZGV2LCAibm90IGEgdmFsaWQgQ0lTUyBjb25maWcgdGFibGVcbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCXJldHVybiB0cnVlOwpAQCAtNjI3MiwyNCArNjE5MSwyNyBAQAogCXdyaXRlbChkbWFfcHJlZmV0Y2gsIGgtPnZhZGRyICsgSTJPX0RNQTFfQ0ZHKTsKIH0KIAotc3RhdGljIHZvaWQgaHBzYV93YWl0X2Zvcl9jbGVhcl9ldmVudF9ub3RpZnlfYWNrKHN0cnVjdCBjdGxyX2luZm8gKmgpCitzdGF0aWMgaW50IGhwc2Ffd2FpdF9mb3JfY2xlYXJfZXZlbnRfbm90aWZ5X2FjayhzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewogCWludCBpOwogCXUzMiBkb29yYmVsbF92YWx1ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCS8qIHdhaXQgdW50aWwgdGhlIGNsZWFyX2V2ZW50X25vdGlmeSBiaXQgNiBpcyBjbGVhcmVkIGJ5IGNvbnRyb2xsZXIuICovCi0JZm9yIChpID0gMDsgaSA8IE1BWF9DT05GSUdfV0FJVDsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IE1BWF9DTEVBUl9FVkVOVF9XQUlUOyBpKyspIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKIAkJZG9vcmJlbGxfdmFsdWUgPSByZWFkbChoLT52YWRkciArIFNBNV9ET09SQkVMTCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKCEoZG9vcmJlbGxfdmFsdWUgJiBET09SQkVMTF9DTEVBUl9FVkVOVFMpKQotCQkJYnJlYWs7CisJCQlnb3RvIGRvbmU7CiAJCS8qIGRlbGF5IGFuZCB0cnkgYWdhaW4gKi8KLQkJbXNsZWVwKDIwKTsKKwkJbXNsZWVwKENMRUFSX0VWRU5UX1dBSVRfSU5URVJWQUwpOwogCX0KKwlyZXR1cm4gLUVOT0RFVjsKK2RvbmU6CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGhwc2Ffd2FpdF9mb3JfbW9kZV9jaGFuZ2VfYWNrKHN0cnVjdCBjdGxyX2luZm8gKmgpCitzdGF0aWMgaW50IGhwc2Ffd2FpdF9mb3JfbW9kZV9jaGFuZ2VfYWNrKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7CiAJaW50IGk7CiAJdTMyIGRvb3JiZWxsX3ZhbHVlOwpAQCAtNjI5OSwxNyArNjIyMSwyMSBAQAogCSAqIChlLmcuOiBob3QgcmVwbGFjZSBhIGZhaWxlZCAxNDRHQiBkcml2ZSBpbiBhIFJBSUQgNSBzZXQgcmlnaHQKIAkgKiBhcyB3ZSBlbnRlciB0aGlzIGNvZGUuKQogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09ORklHX1dBSVQ7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfTU9ERV9DSEFOR0VfV0FJVDsgaSsrKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CiAJCWRvb3JiZWxsX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfRE9PUkJFTEwpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CiAJCWlmICghKGRvb3JiZWxsX3ZhbHVlICYgQ0ZHVEJMX0NoYW5nZVJlcSkpCi0JCQlicmVhazsKKwkJCWdvdG8gZG9uZTsKIAkJLyogZGVsYXkgYW5kIHRyeSBhZ2FpbiAqLwotCQl1c2xlZXBfcmFuZ2UoMTAwMDAsIDIwMDAwKTsKKwkJbXNsZWVwKE1PREVfQ0hBTkdFX1dBSVRfSU5URVJWQUwpOwogCX0KKwlyZXR1cm4gLUVOT0RFVjsKK2RvbmU6CisJcmV0dXJuIDA7CiB9CiAKKy8qIHJldHVybiAtRU5PREVWIG9yIG90aGVyIHJlYXNvbiBvbiBlcnJvciwgMCBvbiBzdWNjZXNzICovCiBzdGF0aWMgaW50IGhwc2FfZW50ZXJfc2ltcGxlX21vZGUoc3RydWN0IGN0bHJfaW5mbyAqaCkKIHsKIAl1MzIgdHJhbnNfc3VwcG9ydDsKQEAgLTYzMjQsMTQgKzYyNTAsMTUgQEAKIAl3cml0ZWwoQ0ZHVEJMX1RyYW5zX1NpbXBsZSwgJihoLT5jZmd0YWJsZS0+SG9zdFdyaXRlLlRyYW5zcG9ydFJlcXVlc3QpKTsKIAl3cml0ZWwoMCwgJmgtPmNmZ3RhYmxlLT5Ib3N0V3JpdGUuY29tbWFuZF9wb29sX2FkZHJfaGkpOwogCXdyaXRlbChDRkdUQkxfQ2hhbmdlUmVxLCBoLT52YWRkciArIFNBNV9ET09SQkVMTCk7Ci0JaHBzYV93YWl0X2Zvcl9tb2RlX2NoYW5nZV9hY2soaCk7CisJaWYgKGhwc2Ffd2FpdF9mb3JfbW9kZV9jaGFuZ2VfYWNrKGgpKQorCQlnb3RvIGVycm9yOwogCXByaW50X2NmZ190YWJsZSgmaC0+cGRldi0+ZGV2LCBoLT5jZmd0YWJsZSk7CiAJaWYgKCEocmVhZGwoJihoLT5jZmd0YWJsZS0+VHJhbnNwb3J0QWN0aXZlKSkgJiBDRkdUQkxfVHJhbnNfU2ltcGxlKSkKIAkJZ290byBlcnJvcjsKIAloLT50cmFuc01ldGhvZCA9IENGR1RCTF9UcmFuc19TaW1wbGU7CiAJcmV0dXJuIDA7CiBlcnJvcjoKLQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAidW5hYmxlIHRvIGdldCBib2FyZCBpbnRvIHNpbXBsZSBtb2RlXG4iKTsKKwlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gZW50ZXIgc2ltcGxlIG1vZGVcbiIpOwogCXJldHVybiAtRU5PREVWOwogfQogCkBAIC02MzQxLDcgKzYyNjgsNyBAQAogCiAJcHJvZF9pbmRleCA9IGhwc2FfbG9va3VwX2JvYXJkX2lkKGgtPnBkZXYsICZoLT5ib2FyZF9pZCk7CiAJaWYgKHByb2RfaW5kZXggPCAwKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIHByb2RfaW5kZXg7CiAJaC0+cHJvZHVjdF9uYW1lID0gcHJvZHVjdHNbcHJvZF9pbmRleF0ucHJvZHVjdF9uYW1lOwogCWgtPmFjY2VzcyA9ICoocHJvZHVjdHNbcHJvZF9pbmRleF0uYWNjZXNzKTsKIApAQCAtNjQyMiw2ICs2MzQ5LDcgQEAKIHN0YXRpYyBpbnQgaHBzYV9pbml0X3Jlc2V0X2RldmljZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJaW50IHJjLCBpOworCXZvaWQgX19pb21lbSAqdmFkZHI7CiAKIAlpZiAoIXJlc2V0X2RldmljZXMpCiAJCXJldHVybiAwOwpAQCAtNjQ0NSw2ICs2MzczLDE0IEBACiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAorCXZhZGRyID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIDApOworCWlmICh2YWRkciA9PSBOVUxMKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfZGlzYWJsZTsKKwl9CisJd3JpdGVsKFNBNV9JTlRSX09GRiwgdmFkZHIgKyBTQTVfUkVQTFlfSU5UUl9NQVNLX09GRlNFVCk7CisJaW91bm1hcCh2YWRkcik7CisKIAkvKiBSZXNldCB0aGUgY29udHJvbGxlciB3aXRoIGEgUENJIHBvd2VyLWN5Y2xlIG9yIHZpYSBkb29yYmVsbCAqLwogCXJjID0gaHBzYV9rZHVtcF9oYXJkX3Jlc2V0X2NvbnRyb2xsZXIocGRldik7CiAKQEAgLTY0NTMsMTQgKzYzODksMTEgQEAKIAkgKiAicGVyZm9ybWFudCBtb2RlIi4gIE9yLCBpdCBtaWdodCBiZSA2NDB4LCB3aGljaCBjYW4ndCByZXNldAogCSAqIGR1ZSB0byBjb25jZXJucyBhYm91dCBzaGFyZWQgYmJ3YyBiZXR3ZWVuIDY0MDIvNjQwNCBwYWlyLgogCSAqLwotCWlmIChyYykgewotCQlpZiAocmMgIT0gLUVOT1RTVVBQKSAvKiBqdXN0IHRyeSB0byBkbyB0aGUga2R1bXAgYW55aG93LiAqLwotCQkJcmMgPSAtRU5PREVWOworCWlmIChyYykKIAkJZ290byBvdXRfZGlzYWJsZTsKLQl9CiAKIAkvKiBOb3cgdHJ5IHRvIGdldCB0aGUgY29udHJvbGxlciB0byByZXNwb25kIHRvIGEgbm8tb3AgKi8KLQlkZXZfd2FybigmcGRldi0+ZGV2LCAiV2FpdGluZyBmb3IgY29udHJvbGxlciB0byByZXNwb25kIHRvIG5vLW9wXG4iKTsKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiV2FpdGluZyBmb3IgY29udHJvbGxlciB0byByZXNwb25kIHRvIG5vLW9wXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgSFBTQV9QT1NUX1JFU0VUX05PT1BfUkVUUklFUzsgaSsrKSB7CiAJCWlmIChocHNhX25vb3AocGRldikgPT0gMCkKIAkJCWJyZWFrOwpAQCAtNjQ5MCw5ICs2NDIzLDEyIEBACiAJICAgIHx8IChoLT5jbWRfcG9vbCA9PSBOVUxMKQogCSAgICB8fCAoaC0+ZXJyaW5mb19wb29sID09IE5VTEwpKSB7CiAJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnkgaW4gJXMiLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlnb3RvIGNsZWFuX3VwOwogCX0KIAlyZXR1cm4gMDsKK2NsZWFuX3VwOgorCWhwc2FfZnJlZV9jbWRfcG9vbChoKTsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgaHBzYV9mcmVlX2NtZF9wb29sKHN0cnVjdCBjdGxyX2luZm8gKmgpCkBAIC02NTE5LDE2ICs2NDU1LDM4IEBACiAKIHN0YXRpYyB2b2lkIGhwc2FfaXJxX2FmZmluaXR5X2hpbnRzKHN0cnVjdCBjdGxyX2luZm8gKmgpCiB7Ci0JaW50IGksIGNwdSwgcmM7CisJaW50IGksIGNwdTsKIAogCWNwdSA9IGNwdW1hc2tfZmlyc3QoY3B1X29ubGluZV9tYXNrKTsKIAlmb3IgKGkgPSAwOyBpIDwgaC0+bXNpeF92ZWN0b3I7IGkrKykgewotCQlyYyA9IGlycV9zZXRfYWZmaW5pdHlfaGludChoLT5pbnRyW2ldLCBnZXRfY3B1X21hc2soY3B1KSk7CisJCWlycV9zZXRfYWZmaW5pdHlfaGludChoLT5pbnRyW2ldLCBnZXRfY3B1X21hc2soY3B1KSk7CiAJCWNwdSA9IGNwdW1hc2tfbmV4dChjcHUsIGNwdV9vbmxpbmVfbWFzayk7CiAJfQogfQogCi1zdGF0aWMgaW50IGhwc2FfcmVxdWVzdF9pcnEoc3RydWN0IGN0bHJfaW5mbyAqaCwKKy8qIGNsZWFyIGFmZmluaXR5IGhpbnRzIGFuZCBmcmVlIE1TSS1YLCBNU0ksIG9yIGxlZ2FjeSBJTlR4IHZlY3RvcnMgKi8KK3N0YXRpYyB2b2lkIGhwc2FfZnJlZV9pcnFzKHN0cnVjdCBjdGxyX2luZm8gKmgpCit7CisJaW50IGk7CisKKwlpZiAoIWgtPm1zaXhfdmVjdG9yIHx8IGgtPmludHJfbW9kZSAhPSBQRVJGX01PREVfSU5UKSB7CisJCS8qIFNpbmdsZSByZXBseSBxdWV1ZSwgb25seSBvbmUgaXJxIHRvIGZyZWUgKi8KKwkJaSA9IGgtPmludHJfbW9kZTsKKwkJaXJxX3NldF9hZmZpbml0eV9oaW50KGgtPmludHJbaV0sIE5VTEwpOworCQlmcmVlX2lycShoLT5pbnRyW2ldLCAmaC0+cVtpXSk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgaC0+bXNpeF92ZWN0b3I7IGkrKykgeworCQlpcnFfc2V0X2FmZmluaXR5X2hpbnQoaC0+aW50cltpXSwgTlVMTCk7CisJCWZyZWVfaXJxKGgtPmludHJbaV0sICZoLT5xW2ldKTsKKwl9CisJZm9yICg7IGkgPCBNQVhfUkVQTFlfUVVFVUVTOyBpKyspCisJCWgtPnFbaV0gPSAwOworfQorCisvKiByZXR1cm5zIDAgb24gc3VjY2VzczsgY2xlYW5zIHVwIGFuZCByZXR1cm5zIC1Fbm4gb24gZXJyb3IgKi8KK3N0YXRpYyBpbnQgaHBzYV9yZXF1ZXN0X2lycXMoc3RydWN0IGN0bHJfaW5mbyAqaCwKIAlpcnFyZXR1cm5fdCAoKm1zaXhoYW5kbGVyKShpbnQsIHZvaWQgKiksCiAJaXJxcmV0dXJuX3QgKCppbnR4aGFuZGxlcikoaW50LCB2b2lkICopKQogewpAQCAtNjU0MywxMCArNjUwMSwyNSBAQAogCiAJaWYgKGgtPmludHJfbW9kZSA9PSBQRVJGX01PREVfSU5UICYmIGgtPm1zaXhfdmVjdG9yID4gMCkgewogCQkvKiBJZiBwZXJmb3JtYW50IG1vZGUgYW5kIE1TSS1YLCB1c2UgbXVsdGlwbGUgcmVwbHkgcXVldWVzICovCi0JCWZvciAoaSA9IDA7IGkgPCBoLT5tc2l4X3ZlY3RvcjsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgaC0+bXNpeF92ZWN0b3I7IGkrKykgewogCQkJcmMgPSByZXF1ZXN0X2lycShoLT5pbnRyW2ldLCBtc2l4aGFuZGxlciwKIAkJCQkJMCwgaC0+ZGV2bmFtZSwKIAkJCQkJJmgtPnFbaV0pOworCQkJaWYgKHJjKSB7CisJCQkJaW50IGo7CisKKwkJCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gZ2V0IGlycSAlZCBmb3IgJXNcbiIsCisJCQkJICAgICAgIGgtPmludHJbaV0sIGgtPmRldm5hbWUpOworCQkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKwkJCQkJZnJlZV9pcnEoaC0+aW50cltqXSwgJmgtPnFbal0pOworCQkJCQloLT5xW2pdID0gMDsKKwkJCQl9CisJCQkJZm9yICg7IGogPCBNQVhfUkVQTFlfUVVFVUVTOyBqKyspCisJCQkJCWgtPnFbal0gPSAwOworCQkJCXJldHVybiByYzsKKwkJCX0KKwkJfQogCQlocHNhX2lycV9hZmZpbml0eV9oaW50cyhoKTsKIAl9IGVsc2UgewogCQkvKiBVc2Ugc2luZ2xlIHJlcGx5IHBvb2wgKi8KQEAgLTY1OTIsMjcgKzY1NjUsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBmcmVlX2lycXMoc3RydWN0IGN0bHJfaW5mbyAqaCkKLXsKLQlpbnQgaTsKLQotCWlmICghaC0+bXNpeF92ZWN0b3IgfHwgaC0+aW50cl9tb2RlICE9IFBFUkZfTU9ERV9JTlQpIHsKLQkJLyogU2luZ2xlIHJlcGx5IHF1ZXVlLCBvbmx5IG9uZSBpcnEgdG8gZnJlZSAqLwotCQlpID0gaC0+aW50cl9tb2RlOwotCQlpcnFfc2V0X2FmZmluaXR5X2hpbnQoaC0+aW50cltpXSwgTlVMTCk7Ci0JCWZyZWVfaXJxKGgtPmludHJbaV0sICZoLT5xW2ldKTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBoLT5tc2l4X3ZlY3RvcjsgaSsrKSB7Ci0JCWlycV9zZXRfYWZmaW5pdHlfaGludChoLT5pbnRyW2ldLCBOVUxMKTsKLQkJZnJlZV9pcnEoaC0+aW50cltpXSwgJmgtPnFbaV0pOwotCX0KLX0KLQogc3RhdGljIHZvaWQgaHBzYV9mcmVlX2lycXNfYW5kX2Rpc2FibGVfbXNpeChzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewotCWZyZWVfaXJxcyhoKTsKKwlocHNhX2ZyZWVfaXJxcyhoKTsKICNpZmRlZiBDT05GSUdfUENJX01TSQogCWlmIChoLT5tc2l4X3ZlY3RvcikgewogCQlpZiAoaC0+cGRldi0+bXNpeF9lbmFibGVkKQpAQCAtNjY1OCwxNiArNjYxMywyMCBAQAogfQogCiAvKiBDYWxsZWQgd2hlbiBjb250cm9sbGVyIGxvY2t1cCBkZXRlY3RlZC4gKi8KLXN0YXRpYyB2b2lkIGZhaWxfYWxsX2NtZHNfb25fbGlzdChzdHJ1Y3QgY3Rscl9pbmZvICpoLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQorc3RhdGljIHZvaWQgZmFpbF9hbGxfb3V0c3RhbmRpbmdfY21kcyhzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewotCXN0cnVjdCBDb21tYW5kTGlzdCAqYyA9IE5VTEw7CisJaW50IGksIHJlZmNvdW50OworCXN0cnVjdCBDb21tYW5kTGlzdCAqYzsKIAotCWFzc2VydF9zcGluX2xvY2tlZCgmaC0+bG9jayk7Ci0JLyogTWFyayBhbGwgb3V0c3RhbmRpbmcgY29tbWFuZHMgYXMgZmFpbGVkIGFuZCBjb21wbGV0ZSB0aGVtLiAqLwotCXdoaWxlICghbGlzdF9lbXB0eShsaXN0KSkgewotCQljID0gbGlzdF9lbnRyeShsaXN0LT5uZXh0LCBzdHJ1Y3QgQ29tbWFuZExpc3QsIGxpc3QpOwotCQljLT5lcnJfaW5mby0+Q29tbWFuZFN0YXR1cyA9IENNRF9IQVJEV0FSRV9FUlI7Ci0JCWZpbmlzaF9jbWQoYyk7CisJZmx1c2hfd29ya3F1ZXVlKGgtPnJlc3VibWl0X3dxKTsgLyogZW5zdXJlIGFsbCBjbWRzIGFyZSBmdWxseSBidWlsdCAqLworCWZvciAoaSA9IDA7IGkgPCBoLT5ucl9jbWRzOyBpKyspIHsKKwkJYyA9IGgtPmNtZF9wb29sICsgaTsKKwkJcmVmY291bnQgPSBhdG9taWNfaW5jX3JldHVybigmYy0+cmVmY291bnQpOworCQlpZiAocmVmY291bnQgPiAxKSB7CisJCQljLT5lcnJfaW5mby0+Q29tbWFuZFN0YXR1cyA9IENNRF9IQVJEV0FSRV9FUlI7CisJCQlmaW5pc2hfY21kKGMpOworCQl9CisJCWNtZF9mcmVlKGgsIGMpOwogCX0KIH0KIApAQCAtNjcwNCwxMCArNjY2Myw3IEBACiAJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgIkNvbnRyb2xsZXIgbG9ja3VwIGRldGVjdGVkOiAweCUwOHhcbiIsCiAJCQlsb2NrdXBfZGV0ZWN0ZWQpOwogCXBjaV9kaXNhYmxlX2RldmljZShoLT5wZGV2KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwotCWZhaWxfYWxsX2NtZHNfb25fbGlzdChoLCAmaC0+Y21wUSk7Ci0JZmFpbF9hbGxfY21kc19vbl9saXN0KGgsICZoLT5yZXFRKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7CisJZmFpbF9hbGxfb3V0c3RhbmRpbmdfY21kcyhoKTsKIH0KIAogc3RhdGljIHZvaWQgZGV0ZWN0X2NvbnRyb2xsZXJfbG9ja3VwKHN0cnVjdCBjdGxyX2luZm8gKmgpCkBAIC02NzUwLDggKzY3MDYsOCBAQAogCWludCBpOwogCWNoYXIgKmV2ZW50X3R5cGU7CiAKLQkvKiBDbGVhciB0aGUgZHJpdmVyLXJlcXVlc3RlZCByZXNjYW4gZmxhZyAqLwotCWgtPmRydl9yZXFfcmVzY2FuID0gMDsKKwlpZiAoIShoLT5md19zdXBwb3J0ICYgTUlTQ19GV19FVkVOVF9OT1RJRlkpKQorCQlyZXR1cm47CiAKIAkvKiBBc2sgdGhlIGNvbnRyb2xsZXIgdG8gY2xlYXIgdGhlIGV2ZW50cyB3ZSdyZSBoYW5kbGluZy4gKi8KIAlpZiAoKGgtPnRyYW5zTWV0aG9kICYgKENGR1RCTF9UcmFuc19pb19hY2NlbDEKQEAgLTY3OTgsOSArNjc1NCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgaHBzYV9jdGxyX25lZWRzX3Jlc2NhbihzdHJ1Y3QgY3Rscl9pbmZvICpoKQogewotCWlmIChoLT5kcnZfcmVxX3Jlc2NhbikKLQkJcmV0dXJuIDE7Ci0KIAlpZiAoIShoLT5md19zdXBwb3J0ICYgTUlTQ19GV19FVkVOVF9OT1RJRlkpKQogCQlyZXR1cm4gMDsKIApAQCAtNjgzNCwzNCArNjc4Nyw2MCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBocHNhX3Jlc2Nhbl9jdGxyX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY3Rscl9pbmZvICpoID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwKKwkJCQkJc3RydWN0IGN0bHJfaW5mbywgcmVzY2FuX2N0bHJfd29yayk7CisKKworCWlmIChoLT5yZW1vdmVfaW5fcHJvZ3Jlc3MpCisJCXJldHVybjsKKworCWlmIChocHNhX2N0bHJfbmVlZHNfcmVzY2FuKGgpIHx8IGhwc2Ffb2ZmbGluZV9kZXZpY2VzX3JlYWR5KGgpKSB7CisJCXNjc2lfaG9zdF9nZXQoaC0+c2NzaV9ob3N0KTsKKwkJaHBzYV9hY2tfY3Rscl9ldmVudHMoaCk7CisJCWhwc2Ffc2Nhbl9zdGFydChoLT5zY3NpX2hvc3QpOworCQlzY3NpX2hvc3RfcHV0KGgtPnNjc2lfaG9zdCk7CisJfQorCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CisJaWYgKCFoLT5yZW1vdmVfaW5fcHJvZ3Jlc3MpCisJCXF1ZXVlX2RlbGF5ZWRfd29yayhoLT5yZXNjYW5fY3Rscl93cSwgJmgtPnJlc2Nhbl9jdGxyX3dvcmssCisJCQkJaC0+aGVhcnRiZWF0X3NhbXBsZV9pbnRlcnZhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaC0+bG9jaywgZmxhZ3MpOworfQogCiBzdGF0aWMgdm9pZCBocHNhX21vbml0b3JfY3Rscl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGN0bHJfaW5mbyAqaCA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCiAJCQkJCXN0cnVjdCBjdGxyX2luZm8sIG1vbml0b3JfY3Rscl93b3JrKTsKKwogCWRldGVjdF9jb250cm9sbGVyX2xvY2t1cChoKTsKIAlpZiAobG9ja3VwX2RldGVjdGVkKGgpKQogCQlyZXR1cm47CiAKLQlpZiAoaHBzYV9jdGxyX25lZWRzX3Jlc2NhbihoKSB8fCBocHNhX29mZmxpbmVfZGV2aWNlc19yZWFkeShoKSkgewotCQlzY3NpX2hvc3RfZ2V0KGgtPnNjc2lfaG9zdCk7Ci0JCWgtPmRydl9yZXFfcmVzY2FuID0gMDsKLQkJaHBzYV9hY2tfY3Rscl9ldmVudHMoaCk7Ci0JCWhwc2Ffc2Nhbl9zdGFydChoLT5zY3NpX2hvc3QpOwotCQlzY3NpX2hvc3RfcHV0KGgtPnNjc2lfaG9zdCk7Ci0JfQotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmgtPmxvY2ssIGZsYWdzKTsKLQlpZiAoaC0+cmVtb3ZlX2luX3Byb2dyZXNzKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOwotCX0KLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmgtPm1vbml0b3JfY3Rscl93b3JrLAorCWlmICghaC0+cmVtb3ZlX2luX3Byb2dyZXNzKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmgtPm1vbml0b3JfY3Rscl93b3JrLAogCQkJCWgtPmhlYXJ0YmVhdF9zYW1wbGVfaW50ZXJ2YWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpocHNhX2NyZWF0ZV9jb250cm9sbGVyX3dxKHN0cnVjdCBjdGxyX2luZm8gKmgsCisJCQkJCQljaGFyICpuYW1lKQoreworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSA9IE5VTEw7CisJY2hhciB3cV9uYW1lWzIwXTsKKworCXNucHJpbnRmKHdxX25hbWUsIHNpemVvZih3cV9uYW1lKSwgIiVzXyVkX2hwc2EiLCBuYW1lLCBoLT5jdGxyKTsKKwl3cSA9IGFsbG9jX29yZGVyZWRfd29ya3F1ZXVlKHdxX25hbWUsIDApOworCWlmICghd3EpCisJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgJXMgd29ya3F1ZXVlXG4iLCBuYW1lKTsKKworCXJldHVybiB3cTsKK30KKwogc3RhdGljIGludCBocHNhX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCWludCBkYWMsIHJjOwpAQCAtNjg5OCwxMyArNjg3NywyMyBAQAogCiAJaC0+cGRldiA9IHBkZXY7CiAJaC0+aW50cl9tb2RlID0gaHBzYV9zaW1wbGVfbW9kZSA/IFNJTVBMRV9NT0RFX0lOVCA6IFBFUkZfTU9ERV9JTlQ7Ci0JSU5JVF9MSVNUX0hFQUQoJmgtPmNtcFEpOwotCUlOSVRfTElTVF9IRUFEKCZoLT5yZXFRKTsKIAlJTklUX0xJU1RfSEVBRCgmaC0+b2ZmbGluZV9kZXZpY2VfbGlzdCk7CiAJc3Bpbl9sb2NrX2luaXQoJmgtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZoLT5vZmZsaW5lX2RldmljZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmaC0+c2Nhbl9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmaC0+cGFzc3RocnVfY291bnRfbG9jayk7CisJYXRvbWljX3NldCgmaC0+cGFzc3RocnVfY21kc19hdmFpbCwgSFBTQV9NQVhfQ09OQ1VSUkVOVF9QQVNTVEhSVVMpOworCisJaC0+cmVzY2FuX2N0bHJfd3EgPSBocHNhX2NyZWF0ZV9jb250cm9sbGVyX3dxKGgsICJyZXNjYW4iKTsKKwlpZiAoIWgtPnJlc2Nhbl9jdGxyX3dxKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBjbGVhbjE7CisJfQorCisJaC0+cmVzdWJtaXRfd3EgPSBocHNhX2NyZWF0ZV9jb250cm9sbGVyX3dxKGgsICJyZXN1Ym1pdCIpOworCWlmICghaC0+cmVzdWJtaXRfd3EpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGNsZWFuMTsKKwl9CiAKIAkvKiBBbGxvY2F0ZSBhbmQgY2xlYXIgcGVyLWNwdSB2YXJpYWJsZSBsb2NrdXBfZGV0ZWN0ZWQgKi8KIAloLT5sb2NrdXBfZGV0ZWN0ZWQgPSBhbGxvY19wZXJjcHUodTMyKTsKQEAgLTY5MzksMTMgKzY5MjgsMTQgQEAKIAkvKiBtYWtlIHN1cmUgdGhlIGJvYXJkIGludGVycnVwdHMgYXJlIG9mZiAqLwogCWgtPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGgsIEhQU0FfSU5UUl9PRkYpOwogCi0JaWYgKGhwc2FfcmVxdWVzdF9pcnEoaCwgZG9faHBzYV9pbnRyX21zaSwgZG9faHBzYV9pbnRyX2ludHgpKQorCWlmIChocHNhX3JlcXVlc3RfaXJxcyhoLCBkb19ocHNhX2ludHJfbXNpLCBkb19ocHNhX2ludHJfaW50eCkpCiAJCWdvdG8gY2xlYW4yOwogCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlczogPDB4JXg+IGF0IElSUSAlZCVzIHVzaW5nIERBQ1xuIiwKIAkgICAgICAgaC0+ZGV2bmFtZSwgcGRldi0+ZGV2aWNlLAogCSAgICAgICBoLT5pbnRyW2gtPmludHJfbW9kZV0sIGRhYyA/ICIiIDogIiBub3QiKTsKLQlpZiAoaHBzYV9hbGxvY2F0ZV9jbWRfcG9vbChoKSkKLQkJZ290byBjbGVhbjQ7CisJcmMgPSBocHNhX2FsbG9jYXRlX2NtZF9wb29sKGgpOworCWlmIChyYykKKwkJZ290byBjbGVhbjJfYW5kX2ZyZWVfaXJxczsKIAlpZiAoaHBzYV9hbGxvY2F0ZV9zZ19jaGFpbl9ibG9ja3MoaCkpCiAJCWdvdG8gY2xlYW40OwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmgtPnNjYW5fd2FpdF9xdWV1ZSk7CkBAIC02OTc0LDEyICs2OTY0LDEyIEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7CiAJCWgtPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGgsIEhQU0FfSU5UUl9PRkYpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoLT5sb2NrLCBmbGFncyk7Ci0JCWZyZWVfaXJxcyhoKTsKLQkJcmMgPSBocHNhX3JlcXVlc3RfaXJxKGgsIGhwc2FfbXNpeF9kaXNjYXJkX2NvbXBsZXRpb25zLAorCQlocHNhX2ZyZWVfaXJxcyhoKTsKKwkJcmMgPSBocHNhX3JlcXVlc3RfaXJxcyhoLCBocHNhX21zaXhfZGlzY2FyZF9jb21wbGV0aW9ucywKIAkJCQkJaHBzYV9pbnR4X2Rpc2NhcmRfY29tcGxldGlvbnMpOwogCQlpZiAocmMpIHsKLQkJCWRldl93YXJuKCZoLT5wZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdF9pcnEgYWZ0ZXIgIgotCQkJCSJzb2Z0IHJlc2V0LlxuIik7CisJCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gcmVxdWVzdF9pcnEgYWZ0ZXIgc29mdCByZXNldC5cbiIpOwogCQkJZ290byBjbGVhbjQ7CiAJCX0KIApAQCAtNzAxNiw3ICs3MDA2LDYgQEAKIAkJLyogRW5hYmxlIEFjY2VsZXJhdGVkIElPIHBhdGggYXQgZHJpdmVyIGxheWVyICovCiAJCWgtPmFjY2lvcGF0aF9zdGF0dXMgPSAxOwogCi0JaC0+ZHJ2X3JlcV9yZXNjYW4gPSAwOwogCiAJLyogVHVybiB0aGUgaW50ZXJydXB0cyBvbiBzbyB3ZSBjYW4gc2VydmljZSByZXF1ZXN0cyAqLwogCWgtPmFjY2Vzcy5zZXRfaW50cl9tYXNrKGgsIEhQU0FfSU5UUl9PTik7CkBAIC03MDI5LDE0ICs3MDE4LDIyIEBACiAJSU5JVF9ERUxBWUVEX1dPUksoJmgtPm1vbml0b3JfY3Rscl93b3JrLCBocHNhX21vbml0b3JfY3Rscl93b3JrZXIpOwogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaC0+bW9uaXRvcl9jdGxyX3dvcmssCiAJCQkJaC0+aGVhcnRiZWF0X3NhbXBsZV9pbnRlcnZhbCk7CisJSU5JVF9ERUxBWUVEX1dPUksoJmgtPnJlc2Nhbl9jdGxyX3dvcmssIGhwc2FfcmVzY2FuX2N0bHJfd29ya2VyKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsoaC0+cmVzY2FuX2N0bHJfd3EsICZoLT5yZXNjYW5fY3Rscl93b3JrLAorCQkJCWgtPmhlYXJ0YmVhdF9zYW1wbGVfaW50ZXJ2YWwpOwogCXJldHVybiAwOwogCiBjbGVhbjQ6CiAJaHBzYV9mcmVlX3NnX2NoYWluX2Jsb2NrcyhoKTsKIAlocHNhX2ZyZWVfY21kX3Bvb2woaCk7Ci0JZnJlZV9pcnFzKGgpOworY2xlYW4yX2FuZF9mcmVlX2lycXM6CisJaHBzYV9mcmVlX2lycXMoaCk7CiBjbGVhbjI6CiBjbGVhbjE6CisJaWYgKGgtPnJlc3VibWl0X3dxKQorCQlkZXN0cm95X3dvcmtxdWV1ZShoLT5yZXN1Ym1pdF93cSk7CisJaWYgKGgtPnJlc2Nhbl9jdGxyX3dxKQorCQlkZXN0cm95X3dvcmtxdWV1ZShoLT5yZXNjYW5fY3Rscl93cSk7CiAJaWYgKGgtPmxvY2t1cF9kZXRlY3RlZCkKIAkJZnJlZV9wZXJjcHUoaC0+bG9ja3VwX2RldGVjdGVkKTsKIAlrZnJlZShoKTsKQEAgLTcwNTUsOSArNzA1Miw5IEBACiAJaWYgKCFmbHVzaF9idWYpCiAJCXJldHVybjsKIAotCWMgPSBjbWRfc3BlY2lhbF9hbGxvYyhoKTsKKwljID0gY21kX2FsbG9jKGgpOwogCWlmICghYykgewotCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY21kX3NwZWNpYWxfYWxsb2MgcmV0dXJuZWQgTlVMTCFcbiIpOworCQlkZXZfd2FybigmaC0+cGRldi0+ZGV2LCAiY21kX2FsbG9jIHJldHVybmVkIE5VTEwhXG4iKTsKIAkJZ290byBvdXRfb2ZfbWVtb3J5OwogCX0KIAlpZiAoZmlsbF9jbWQoYywgSFBTQV9DQUNIRV9GTFVTSCwgaCwgZmx1c2hfYnVmLCA0LCAwLApAQCAtNzA2OSw3ICs3MDY2LDcgQEAKIG91dDoKIAkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwKIAkJCSJlcnJvciBmbHVzaGluZyBjYWNoZSBvbiBjb250cm9sbGVyXG4iKTsKLQljbWRfc3BlY2lhbF9mcmVlKGgsIGMpOworCWNtZF9mcmVlKGgsIGMpOwogb3V0X29mX21lbW9yeToKIAlrZnJlZShmbHVzaF9idWYpOwogfQpAQCAtNzExMCw5ICs3MTA3LDExIEBACiAJLyogR2V0IHJpZCBvZiBhbnkgY29udHJvbGxlciBtb25pdG9yaW5nIHdvcmsgaXRlbXMgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmaC0+bG9jaywgZmxhZ3MpOwogCWgtPnJlbW92ZV9pbl9wcm9ncmVzcyA9IDE7Ci0JY2FuY2VsX2RlbGF5ZWRfd29yaygmaC0+bW9uaXRvcl9jdGxyX3dvcmspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKLQorCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaC0+bW9uaXRvcl9jdGxyX3dvcmspOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaC0+cmVzY2FuX2N0bHJfd29yayk7CisJZGVzdHJveV93b3JrcXVldWUoaC0+cmVzY2FuX2N0bHJfd3EpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGgtPnJlc3VibWl0X3dxKTsKIAlocHNhX3VucmVnaXN0ZXJfc2NzaShoKTsJLyogdW5ob29rIGZyb20gU0NTSSBzdWJzeXN0ZW0gKi8KIAlocHNhX3NodXRkb3duKHBkZXYpOwogCWlvdW5tYXAoaC0+dmFkZHIpOwpAQCAtNzE3Miw3ICs3MTcxLDcgQEAKICAqIGJpdHMgb2YgdGhlIGNvbW1hbmQgYWRkcmVzcy4KICAqLwogc3RhdGljIHZvaWQgIGNhbGNfYnVja2V0X21hcChpbnQgYnVja2V0W10sIGludCBudW1fYnVja2V0cywKLQlpbnQgbnNncywgaW50IG1pbl9ibG9ja3MsIGludCAqYnVja2V0X21hcCkKKwlpbnQgbnNncywgaW50IG1pbl9ibG9ja3MsIHUzMiAqYnVja2V0X21hcCkKIHsKIAlpbnQgaSwgaiwgYiwgc2l6ZTsKIApAQCAtNzE5Myw3ICs3MTkyLDggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGhwc2FfZW50ZXJfcGVyZm9ybWFudF9tb2RlKHN0cnVjdCBjdGxyX2luZm8gKmgsIHUzMiB0cmFuc19zdXBwb3J0KQorLyogcmV0dXJuIC1FTk9ERVYgb3Igb3RoZXIgcmVhc29uIG9uIGVycm9yLCAwIG9uIHN1Y2Nlc3MgKi8KK3N0YXRpYyBpbnQgaHBzYV9lbnRlcl9wZXJmb3JtYW50X21vZGUoc3RydWN0IGN0bHJfaW5mbyAqaCwgdTMyIHRyYW5zX3N1cHBvcnQpCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZTsKQEAgLTcyODUsMTIgKzcyODUsMTYgQEAKIAkJfQogCX0KIAl3cml0ZWwoQ0ZHVEJMX0NoYW5nZVJlcSwgaC0+dmFkZHIgKyBTQTVfRE9PUkJFTEwpOwotCWhwc2Ffd2FpdF9mb3JfbW9kZV9jaGFuZ2VfYWNrKGgpOworCWlmIChocHNhX3dhaXRfZm9yX21vZGVfY2hhbmdlX2FjayhoKSkgeworCQlkZXZfZXJyKCZoLT5wZGV2LT5kZXYsCisJCQkicGVyZm9ybWFudCBtb2RlIHByb2JsZW0gLSBkb29yYmVsbCB0aW1lb3V0XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoJihoLT5jZmd0YWJsZS0+VHJhbnNwb3J0QWN0aXZlKSk7CiAJaWYgKCEocmVnaXN0ZXJfdmFsdWUgJiBDRkdUQkxfVHJhbnNfUGVyZm9ybWFudCkpIHsKLQkJZGV2X3dhcm4oJmgtPnBkZXYtPmRldiwgInVuYWJsZSB0byBnZXQgYm9hcmQgaW50byIKLQkJCQkJIiBwZXJmb3JtYW50IG1vZGVcbiIpOwotCQlyZXR1cm47CisJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwKKwkJCSJwZXJmb3JtYW50IG1vZGUgcHJvYmxlbSAtIHRyYW5zcG9ydCBub3QgYWN0aXZlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCS8qIENoYW5nZSB0aGUgYWNjZXNzIG1ldGhvZHMgdG8gdGhlIHBlcmZvcm1hbnQgYWNjZXNzIG1ldGhvZHMgKi8KIAloLT5hY2Nlc3MgPSBhY2Nlc3M7CkBAIC03Mjk4LDcgKzczMDIsNyBAQAogCiAJaWYgKCEoKHRyYW5zX3N1cHBvcnQgJiBDRkdUQkxfVHJhbnNfaW9fYWNjZWwxKSB8fAogCQkodHJhbnNfc3VwcG9ydCAmIENGR1RCTF9UcmFuc19pb19hY2NlbDIpKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAogCWlmICh0cmFuc19zdXBwb3J0ICYgQ0ZHVEJMX1RyYW5zX2lvX2FjY2VsMSkgewogCQkvKiBTZXQgdXAgSS9PIGFjY2VsZXJhdG9yIG1vZGUgKi8KQEAgLTczMjgsMTIgKzczMzIsMTIgQEAKIAkJCQkJKGkgKiBzaXplb2Yoc3RydWN0IEVycm9ySW5mbykpKTsKIAkJCWNwLT5lcnJfaW5mb19sZW4gPSBzaXplb2Yoc3RydWN0IEVycm9ySW5mbyk7CiAJCQljcC0+c2dsX29mZnNldCA9IElPQUNDRUwxX1NHTE9GRlNFVDsKLQkJCWNwLT5ob3N0X2NvbnRleHRfZmxhZ3MgPSBJT0FDQ0VMMV9IQ0ZMQUdTX0NJU1NfRk9STUFUOworCQkJY3AtPmhvc3RfY29udGV4dF9mbGFncyA9CisJCQkJY3B1X3RvX2xlMTYoSU9BQ0NFTDFfSENGTEFHU19DSVNTX0ZPUk1BVCk7CiAJCQljcC0+dGltZW91dF9zZWMgPSAwOwogCQkJY3AtPlJlcGx5UXVldWUgPSAwOwogCQkJY3AtPnRhZyA9Ci0JCQkJY3B1X3RvX2xlNjQoKGkgPDwgRElSRUNUX0xPT0tVUF9TSElGVCkgfAotCQkJCQkJRElSRUNUX0xPT0tVUF9CSVQpOworCQkJCWNwdV90b19sZTY0KChpIDw8IERJUkVDVF9MT09LVVBfU0hJRlQpKTsKIAkJCWNwLT5ob3N0X2FkZHIgPQogCQkJCWNwdV90b19sZTY0KGgtPmlvYWNjZWxfY21kX3Bvb2xfZGhhbmRsZSArCiAJCQkJCShpICogc2l6ZW9mKHN0cnVjdCBpb19hY2NlbDFfY21kKSkpOwpAQCAtNzM2Miw3ICs3MzY2LDEyIEBACiAJCQl3cml0ZWwoYmZ0MltpXSwgJmgtPmlvYWNjZWwyX2JmdDJfcmVnc1tpXSk7CiAJfQogCXdyaXRlbChDRkdUQkxfQ2hhbmdlUmVxLCBoLT52YWRkciArIFNBNV9ET09SQkVMTCk7Ci0JaHBzYV93YWl0X2Zvcl9tb2RlX2NoYW5nZV9hY2soaCk7CisJaWYgKGhwc2Ffd2FpdF9mb3JfbW9kZV9jaGFuZ2VfYWNrKGgpKSB7CisJCWRldl9lcnIoJmgtPnBkZXYtPmRldiwKKwkJCSJwZXJmb3JtYW50IG1vZGUgcHJvYmxlbSAtIGVuYWJsaW5nIGlvYWNjZWwgbW9kZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBocHNhX2FsbG9jX2lvYWNjZWxfY21kX2FuZF9iZnQoc3RydWN0IGN0bHJfaW5mbyAqaCkKQEAgLTc1MDgsMTcgKzc1MTcsMTggQEAKIHN0YXRpYyB2b2lkIGhwc2FfZHJhaW5fYWNjZWxfY29tbWFuZHMoc3RydWN0IGN0bHJfaW5mbyAqaCkKIHsKIAlzdHJ1Y3QgQ29tbWFuZExpc3QgKmMgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGFjY2VsX2NtZHNfb3V0OworCWludCBpLCBhY2NlbF9jbWRzX291dDsKKwlpbnQgcmVmY291bnQ7CiAKLQlkbyB7IC8qIHdhaXQgZm9yIGFsbCBvdXRzdGFuZGluZyBjb21tYW5kcyB0byBkcmFpbiBvdXQgKi8KKwlkbyB7IC8qIHdhaXQgZm9yIGFsbCBvdXRzdGFuZGluZyBpb2FjY2VsIGNvbW1hbmRzIHRvIGRyYWluIG91dCAqLwogCQlhY2NlbF9jbWRzX291dCA9IDA7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZoLT5sb2NrLCBmbGFncyk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmgtPmNtcFEsIGxpc3QpCi0JCQlhY2NlbF9jbWRzX291dCArPSBpc19hY2NlbGVyYXRlZF9jbWQoYyk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmgtPnJlcVEsIGxpc3QpCi0JCQlhY2NlbF9jbWRzX291dCArPSBpc19hY2NlbGVyYXRlZF9jbWQoYyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmgtPmxvY2ssIGZsYWdzKTsKKwkJZm9yIChpID0gMDsgaSA8IGgtPm5yX2NtZHM7IGkrKykgeworCQkJYyA9IGgtPmNtZF9wb29sICsgaTsKKwkJCXJlZmNvdW50ID0gYXRvbWljX2luY19yZXR1cm4oJmMtPnJlZmNvdW50KTsKKwkJCWlmIChyZWZjb3VudCA+IDEpIC8qIENvbW1hbmQgaXMgYWxsb2NhdGVkICovCisJCQkJYWNjZWxfY21kc19vdXQgKz0gaXNfYWNjZWxlcmF0ZWRfY21kKGMpOworCQkJY21kX2ZyZWUoaCwgYyk7CisJCX0KIAkJaWYgKGFjY2VsX2NtZHNfb3V0IDw9IDApCiAJCQlicmVhazsKIAkJbXNsZWVwKDEwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaHBzYS5oIGIvZHJpdmVycy9zY3NpL2hwc2EuaAppbmRleCA4ZTA2ZDllLi42NTc3MTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHBzYS5oCisrKyBiL2RyaXZlcnMvc2NzaS9ocHNhLmgKQEAgLTMyLDcgKzMyLDYgQEAKIAl2b2lkICgqc3VibWl0X2NvbW1hbmQpKHN0cnVjdCBjdGxyX2luZm8gKmgsCiAJCXN0cnVjdCBDb21tYW5kTGlzdCAqYyk7CiAJdm9pZCAoKnNldF9pbnRyX21hc2spKHN0cnVjdCBjdGxyX2luZm8gKmgsIHVuc2lnbmVkIGxvbmcgdmFsKTsKLQl1bnNpZ25lZCBsb25nICgqZmlmb19mdWxsKShzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIAlib29sICgqaW50cl9wZW5kaW5nKShzdHJ1Y3QgY3Rscl9pbmZvICpoKTsKIAl1bnNpZ25lZCBsb25nICgqY29tbWFuZF9jb21wbGV0ZWQpKHN0cnVjdCBjdGxyX2luZm8gKmgsIHU4IHEpOwogfTsKQEAgLTQ3LDYgKzQ2LDExIEBACiAJdW5zaWduZWQgY2hhciBtb2RlbFsxNl07ICAgICAgICAvKiBieXRlcyAxNi0zMSBvZiBpbnF1aXJ5IGRhdGEgKi8KIAl1bnNpZ25lZCBjaGFyIHJhaWRfbGV2ZWw7CS8qIGZyb20gaW5xdWlyeSBwYWdlIDB4QzEgKi8KIAl1bnNpZ25lZCBjaGFyIHZvbHVtZV9vZmZsaW5lOwkvKiBkaXNjb3ZlcmVkIHZpYSBUVVIgb3IgVlBEICovCisJdTE2IHF1ZXVlX2RlcHRoOwkJLyogbWF4IHF1ZXVlX2RlcHRoIGZvciB0aGlzIGRldmljZSAqLworCWF0b21pY190IGlvYWNjZWxfY21kc19vdXQ7CS8qIE9ubHkgdXNlZCBmb3IgcGh5c2ljYWwgZGV2aWNlcworCQkJCQkgKiBjb3VudHMgY29tbWFuZHMgc2VudCB0byBwaHlzaWNhbAorCQkJCQkgKiBkZXZpY2UgdmlhICJpb2FjY2VsIiBwYXRoLgorCQkJCQkgKi8KIAl1MzIgaW9hY2NlbF9oYW5kbGU7CiAJaW50IG9mZmxvYWRfY29uZmlnOwkJLyogSS9PIGFjY2VsIFJBSUQgb2ZmbG9hZCBjb25maWd1cmVkICovCiAJaW50IG9mZmxvYWRfZW5hYmxlZDsJCS8qIEkvTyBhY2NlbCBSQUlEIG9mZmxvYWQgZW5hYmxlZCAqLwpAQCAtNTUsNiArNTksMTUgQEAKIAkJCQkJICovCiAJc3RydWN0IHJhaWRfbWFwX2RhdGEgcmFpZF9tYXA7CS8qIEkvTyBhY2NlbGVyYXRvciBSQUlEIG1hcCAqLwogCisJLyoKKwkgKiBQb2ludGVycyBmcm9tIGxvZ2ljYWwgZHJpdmUgbWFwIGluZGljZXMgdG8gdGhlIHBoeXMgZHJpdmVzIHRoYXQKKwkgKiBtYWtlIHRob3NlIGxvZ2ljYWwgZHJpdmVzLiAgTm90ZSwgbXVsdGlwbGUgbG9naWNhbCBkcml2ZXMgbWF5CisJICogc2hhcmUgcGh5c2ljYWwgZHJpdmVzLiAgWW91IGNhbiBoYXZlIGZvciBpbnN0YW5jZSA1IHBoeXNpY2FsCisJICogZHJpdmVzIHdpdGggMyBsb2dpY2FsIGRyaXZlcyBlYWNoIHVzaW5nIHRob3NlIHNhbWUgNSBwaHlzaWNhbAorCSAqIGRpc2tzLiBXZSBuZWVkIHRoZXNlIHBvaW50ZXJzIGZvciBjb3VudGluZyBpL28ncyBvdXQgdG8gcGh5c2ljYWwKKwkgKiBkZXZpY2VzIGluIG9yZGVyIHRvIGhvbm9yIHBoeXNpY2FsIGRldmljZSBxdWV1ZSBkZXB0aCBsaW1pdHMuCisJICovCisJc3RydWN0IGhwc2Ffc2NzaV9kZXZfdCAqcGh5c19kaXNrW1JBSURfTUFQX01BWF9FTlRSSUVTXTsKIH07CiAKIHN0cnVjdCByZXBseV9xdWV1ZV9idWZmZXIgewpAQCAtMTE1LDkgKzEyOCwxMiBAQAogCXZvaWQgX19pb21lbSAqdmFkZHI7CiAJdW5zaWduZWQgbG9uZyBwYWRkcjsKIAlpbnQgCW5yX2NtZHM7IC8qIE51bWJlciBvZiBjb21tYW5kcyBhbGxvd2VkIG9uIHRoaXMgY29udHJvbGxlciAqLworI2RlZmluZSBIUFNBX0NNRFNfUkVTRVJWRURfRk9SX0FCT1JUUyAyCisjZGVmaW5lIEhQU0FfQ01EU19SRVNFUlZFRF9GT1JfRFJJVkVSIDEKIAlzdHJ1Y3QgQ2ZnVGFibGUgX19pb21lbSAqY2ZndGFibGU7CiAJaW50CWludGVycnVwdHNfZW5hYmxlZDsKIAlpbnQgCW1heF9jb21tYW5kczsKKwlpbnQgbGFzdF9hbGxvY2F0aW9uOwogCWF0b21pY190IGNvbW1hbmRzX291dHN0YW5kaW5nOwogIwlkZWZpbmUgUEVSRl9NT0RFX0lOVAkwCiAjCWRlZmluZSBET09SQkVMTF9JTlQJMQpAQCAtMTMxLDggKzE0Nyw2IEBACiAJY2hhciBoYmFfbW9kZV9lbmFibGVkOwogCiAJLyogcXVldWUgYW5kIHF1ZXVlIEluZm8gKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHJlcVE7Ci0Jc3RydWN0IGxpc3RfaGVhZCBjbXBROwogCXVuc2lnbmVkIGludCBRZGVwdGg7CiAJdW5zaWduZWQgaW50IG1heFNHOwogCXNwaW5sb2NrX3QgbG9jazsKQEAgLTE2OCw5ICsxODIsOCBAQAogCXVuc2lnbmVkIGxvbmcgdHJhbnNNZXRob2Q7CiAKIAkvKiBjYXAgY29uY3VycmVudCBwYXNzdGhydXMgYXQgc29tZSByZWFzb25hYmxlIG1heGltdW0gKi8KLSNkZWZpbmUgSFBTQV9NQVhfQ09OQ1VSUkVOVF9QQVNTVEhSVVMgKDIwKQotCXNwaW5sb2NrX3QgcGFzc3RocnVfY291bnRfbG9jazsgLyogcHJvdGVjdHMgcGFzc3RocnVfY291bnQgKi8KLQlpbnQgcGFzc3RocnVfY291bnQ7CisjZGVmaW5lIEhQU0FfTUFYX0NPTkNVUlJFTlRfUEFTU1RIUlVTICgxMCkKKwlhdG9taWNfdCBwYXNzdGhydV9jbWRzX2F2YWlsOwogCiAJLyoKIAkgKiBQZXJmb3JtYW50IG1vZGUgY29tcGxldGlvbiBidWZmZXJzCkBAIC0xOTQsOCArMjA3LDggQEAKIAlhdG9taWNfdCBmaXJtd2FyZV9mbGFzaF9pbl9wcm9ncmVzczsKIAl1MzIgX19wZXJjcHUgKmxvY2t1cF9kZXRlY3RlZDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1vbml0b3JfY3Rscl93b3JrOworCXN0cnVjdCBkZWxheWVkX3dvcmsgcmVzY2FuX2N0bHJfd29yazsKIAlpbnQgcmVtb3ZlX2luX3Byb2dyZXNzOwotCXUzMiBmaWZvX3JlY2VudGx5X2Z1bGw7CiAJLyogQWRkcmVzcyBvZiBoLT5xW3hdIGlzIHBhc3NlZCB0byBpbnRyIGhhbmRsZXIgdG8ga25vdyB3aGljaCBxdWV1ZSAqLwogCXU4IHFbTUFYX1JFUExZX1FVRVVFU107CiAJdTMyIFRNRlN1cHBvcnRGbGFnczsgLyogY2FjaGUgd2hhdCB0YXNrIG1nbXQgZnVuY3MgYXJlIHN1cHBvcnRlZC4gKi8KQEAgLTIzNyw4ICsyNTAsOSBAQAogCXNwaW5sb2NrX3Qgb2ZmbGluZV9kZXZpY2VfbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG9mZmxpbmVfZGV2aWNlX2xpc3Q7CiAJaW50CWFjY2lvcGF0aF9zdGF0dXM7Ci0JaW50CWRydl9yZXFfcmVzY2FuOwkvKiBmbGFnIGZvciBkcml2ZXIgdG8gcmVxdWVzdCByZXNjYW4gZXZlbnQgKi8KIAlpbnQJcmFpZF9vZmZsb2FkX2RlYnVnOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXN1Ym1pdF93cTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqcmVzY2FuX2N0bHJfd3E7CiB9OwogCiBzdHJ1Y3Qgb2ZmbGluZV9kZXZpY2VfZW50cnkgewpAQCAtMjk3LDYgKzMxMSw4IEBACiAgKi8KICNkZWZpbmUgU0E1X0RPT1JCRUxMCTB4MjAKICNkZWZpbmUgU0E1X1JFUVVFU1RfUE9SVF9PRkZTRVQJMHg0MAorI2RlZmluZSBTQTVfUkVRVUVTVF9QT1JUNjRfTE9fT0ZGU0VUIDB4QzAKKyNkZWZpbmUgU0E1X1JFUVVFU1RfUE9SVDY0X0hJX09GRlNFVCAweEM0CiAjZGVmaW5lIFNBNV9SRVBMWV9JTlRSX01BU0tfT0ZGU0VUCTB4MzQKICNkZWZpbmUgU0E1X1JFUExZX1BPUlRfT0ZGU0VUCQkweDQ0CiAjZGVmaW5lIFNBNV9JTlRSX1NUQVRVUwkJMHgzMApAQCAtMzUzLDEwICszNjksNyBAQAogc3RhdGljIHZvaWQgU0E1X3N1Ym1pdF9jb21tYW5kX2lvYWNjZWwyKHN0cnVjdCBjdGxyX2luZm8gKmgsCiAJc3RydWN0IENvbW1hbmRMaXN0ICpjKQogewotCWlmIChjLT5jbWRfdHlwZSA9PSBDTURfSU9BQ0NFTDIpCi0JCXdyaXRlbChjLT5idXNhZGRyLCBoLT52YWRkciArIElPQUNDRUwyX0lOQk9VTkRfUE9TVFFfMzIpOwotCWVsc2UKLQkJd3JpdGVsKGMtPmJ1c2FkZHIsIGgtPnZhZGRyICsgU0E1X1JFUVVFU1RfUE9SVF9PRkZTRVQpOworCXdyaXRlbChjLT5idXNhZGRyLCBoLT52YWRkciArIFNBNV9SRVFVRVNUX1BPUlRfT0ZGU0VUKTsKIH0KIAogLyoKQEAgLTM5OCwxOSArNDExLDE5IEBACiAJdW5zaWduZWQgbG9uZyByZWdpc3Rlcl92YWx1ZSA9IEZJRk9fRU1QVFk7CiAKIAkvKiBtc2kgYXV0byBjbGVhcnMgdGhlIGludGVycnVwdCBwZW5kaW5nIGJpdC4gKi8KLQlpZiAoIShoLT5tc2lfdmVjdG9yIHx8IGgtPm1zaXhfdmVjdG9yKSkgeworCWlmICh1bmxpa2VseSghKGgtPm1zaV92ZWN0b3IgfHwgaC0+bXNpeF92ZWN0b3IpKSkgewogCQkvKiBmbHVzaCB0aGUgY29udHJvbGxlciB3cml0ZSBvZiB0aGUgcmVwbHkgcXVldWUgYnkgcmVhZGluZwogCQkgKiBvdXRib3VuZCBkb29yYmVsbCBzdGF0dXMgcmVnaXN0ZXIuCiAJCSAqLwotCQlyZWdpc3Rlcl92YWx1ZSA9IHJlYWRsKGgtPnZhZGRyICsgU0E1X09VVERCX1NUQVRVUyk7CisJCSh2b2lkKSByZWFkbChoLT52YWRkciArIFNBNV9PVVREQl9TVEFUVVMpOwogCQl3cml0ZWwoU0E1X09VVERCX0NMRUFSX1BFUkZfQklULCBoLT52YWRkciArIFNBNV9PVVREQl9DTEVBUik7CiAJCS8qIERvIGEgcmVhZCBpbiBvcmRlciB0byBmbHVzaCB0aGUgd3JpdGUgdG8gdGhlIGNvbnRyb2xsZXIKIAkJICogKGFzIHBlciBzcGVjLikKIAkJICovCi0JCXJlZ2lzdGVyX3ZhbHVlID0gcmVhZGwoaC0+dmFkZHIgKyBTQTVfT1VUREJfU1RBVFVTKTsKKwkJKHZvaWQpIHJlYWRsKGgtPnZhZGRyICsgU0E1X09VVERCX1NUQVRVUyk7CiAJfQogCi0JaWYgKChycS0+aGVhZFtycS0+Y3VycmVudF9lbnRyeV0gJiAxKSA9PSBycS0+d3JhcGFyb3VuZCkgeworCWlmICgoKCh1MzIpIHJxLT5oZWFkW3JxLT5jdXJyZW50X2VudHJ5XSkgJiAxKSA9PSBycS0+d3JhcGFyb3VuZCkgewogCQlyZWdpc3Rlcl92YWx1ZSA9IHJxLT5oZWFkW3JxLT5jdXJyZW50X2VudHJ5XTsKIAkJcnEtPmN1cnJlbnRfZW50cnkrKzsKIAkJYXRvbWljX2RlYygmaC0+Y29tbWFuZHNfb3V0c3RhbmRpbmcpOwpAQCAtNDI2LDE0ICs0MzksNiBAQAogfQogCiAvKgotICogIFJldHVybnMgdHJ1ZSBpZiBmaWZvIGlzIGZ1bGwuCi0gKgotICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBTQTVfZmlmb19mdWxsKHN0cnVjdCBjdGxyX2luZm8gKmgpCi17Ci0JcmV0dXJuIGF0b21pY19yZWFkKCZoLT5jb21tYW5kc19vdXRzdGFuZGluZykgPj0gaC0+bWF4X2NvbW1hbmRzOwotfQotLyoKICAqICAgcmV0dXJucyB2YWx1ZSByZWFkIGZyb20gaGFyZHdhcmUuCiAgKiAgICAgcmV0dXJucyBGSUZPX0VNUFRZIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVhZAogICovCkBAIC00NzMsOSArNDc4LDYgQEAKIAlpZiAoIXJlZ2lzdGVyX3ZhbHVlKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoaC0+bXNpX3ZlY3RvciB8fCBoLT5tc2l4X3ZlY3RvcikKLQkJcmV0dXJuIHRydWU7Ci0KIAkvKiBSZWFkIG91dGJvdW5kIGRvb3JiZWxsIHRvIGZsdXNoICovCiAJcmVnaXN0ZXJfdmFsdWUgPSByZWFkbChoLT52YWRkciArIFNBNV9PVVREQl9TVEFUVVMpOwogCXJldHVybiByZWdpc3Rlcl92YWx1ZSAmIFNBNV9PVVREQl9TVEFUVVNfUEVSRl9CSVQ7CkBAIC01MjUsNyArNTI3LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYWNjZXNzX21ldGhvZCBTQTVfYWNjZXNzID0gewogCVNBNV9zdWJtaXRfY29tbWFuZCwKIAlTQTVfaW50cl9tYXNrLAotCVNBNV9maWZvX2Z1bGwsCiAJU0E1X2ludHJfcGVuZGluZywKIAlTQTVfY29tcGxldGVkLAogfTsKQEAgLTUzMyw3ICs1MzQsNiBAQAogc3RhdGljIHN0cnVjdCBhY2Nlc3NfbWV0aG9kIFNBNV9pb2FjY2VsX21vZGUxX2FjY2VzcyA9IHsKIAlTQTVfc3VibWl0X2NvbW1hbmQsCiAJU0E1X3BlcmZvcm1hbnRfaW50cl9tYXNrLAotCVNBNV9maWZvX2Z1bGwsCiAJU0E1X2lvYWNjZWxfbW9kZTFfaW50cl9wZW5kaW5nLAogCVNBNV9pb2FjY2VsX21vZGUxX2NvbXBsZXRlZCwKIH07CkBAIC01NDEsNyArNTQxLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYWNjZXNzX21ldGhvZCBTQTVfaW9hY2NlbF9tb2RlMl9hY2Nlc3MgPSB7CiAJU0E1X3N1Ym1pdF9jb21tYW5kX2lvYWNjZWwyLAogCVNBNV9wZXJmb3JtYW50X2ludHJfbWFzaywKLQlTQTVfZmlmb19mdWxsLAogCVNBNV9wZXJmb3JtYW50X2ludHJfcGVuZGluZywKIAlTQTVfcGVyZm9ybWFudF9jb21wbGV0ZWQsCiB9OwpAQCAtNTQ5LDcgKzU0OCw2IEBACiBzdGF0aWMgc3RydWN0IGFjY2Vzc19tZXRob2QgU0E1X3BlcmZvcm1hbnRfYWNjZXNzID0gewogCVNBNV9zdWJtaXRfY29tbWFuZCwKIAlTQTVfcGVyZm9ybWFudF9pbnRyX21hc2ssCi0JU0E1X2ZpZm9fZnVsbCwKIAlTQTVfcGVyZm9ybWFudF9pbnRyX3BlbmRpbmcsCiAJU0E1X3BlcmZvcm1hbnRfY29tcGxldGVkLAogfTsKQEAgLTU1Nyw3ICs1NTUsNiBAQAogc3RhdGljIHN0cnVjdCBhY2Nlc3NfbWV0aG9kIFNBNV9wZXJmb3JtYW50X2FjY2Vzc19ub19yZWFkID0gewogCVNBNV9zdWJtaXRfY29tbWFuZF9ub19yZWFkLAogCVNBNV9wZXJmb3JtYW50X2ludHJfbWFzaywKLQlTQTVfZmlmb19mdWxsLAogCVNBNV9wZXJmb3JtYW50X2ludHJfcGVuZGluZywKIAlTQTVfcGVyZm9ybWFudF9jb21wbGV0ZWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwc2FfY21kLmggYi9kcml2ZXJzL3Njc2kvaHBzYV9jbWQuaAppbmRleCBjYjk4OGM0Li4zYTYyMWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaHBzYV9jbWQuaAorKysgYi9kcml2ZXJzL3Njc2kvaHBzYV9jbWQuaApAQCAtMjA2LDI3ICsyMDYsMjcgQEAKIH07CiAKIHN0cnVjdCByYWlkX21hcF9kYXRhIHsKLQl1MzIgICBzdHJ1Y3R1cmVfc2l6ZTsJCS8qIFNpemUgb2YgZW50aXJlIHN0cnVjdHVyZSBpbiBieXRlcyAqLwotCXUzMiAgIHZvbHVtZV9ibGtfc2l6ZTsJCS8qIGJ5dGVzIC8gYmxvY2sgaW4gdGhlIHZvbHVtZSAqLwotCXU2NCAgIHZvbHVtZV9ibGtfY250OwkJLyogbG9naWNhbCBibG9ja3Mgb24gdGhlIHZvbHVtZSAqLworCV9fbGUzMiAgIHN0cnVjdHVyZV9zaXplOwkvKiBTaXplIG9mIGVudGlyZSBzdHJ1Y3R1cmUgaW4gYnl0ZXMgKi8KKwlfX2xlMzIgICB2b2x1bWVfYmxrX3NpemU7CS8qIGJ5dGVzIC8gYmxvY2sgaW4gdGhlIHZvbHVtZSAqLworCV9fbGU2NCAgIHZvbHVtZV9ibGtfY250OwkvKiBsb2dpY2FsIGJsb2NrcyBvbiB0aGUgdm9sdW1lICovCiAJdTggICAgcGh5c19ibGtfc2hpZnQ7CQkvKiBTaGlmdCBmYWN0b3IgdG8gY29udmVydCBiZXR3ZWVuCiAJCQkJCSAqIHVuaXRzIG9mIGxvZ2ljYWwgYmxvY2tzIGFuZCBwaHlzaWNhbAogCQkJCQkgKiBkaXNrIGJsb2NrcyAqLwogCXU4ICAgIHBhcml0eV9yb3RhdGlvbl9zaGlmdDsJLyogU2hpZnQgZmFjdG9yIHRvIGNvbnZlcnQgYmV0d2VlbiB1bml0cwogCQkJCQkgKiBvZiBsb2dpY2FsIHN0cmlwZXMgYW5kIHBoeXNpY2FsCiAJCQkJCSAqIHN0cmlwZXMgKi8KLQl1MTYgICBzdHJpcF9zaXplOwkJLyogYmxvY2tzIHVzZWQgb24gZWFjaCBkaXNrIC8gc3RyaXBlICovCi0JdTY0ICAgZGlza19zdGFydGluZ19ibGs7CS8qIEZpcnN0IGRpc2sgYmxvY2sgdXNlZCBpbiB2b2x1bWUgKi8KLQl1NjQgICBkaXNrX2Jsa19jbnQ7CQkvKiBkaXNrIGJsb2NrcyB1c2VkIGJ5IHZvbHVtZSAvIGRpc2sgKi8KLQl1MTYgICBkYXRhX2Rpc2tzX3Blcl9yb3c7CS8qIGRhdGEgZGlzayBlbnRyaWVzIC8gcm93IGluIHRoZSBtYXAgKi8KLQl1MTYgICBtZXRhZGF0YV9kaXNrc19wZXJfcm93OwkvKiBtaXJyb3IvcGFyaXR5IGRpc2sgZW50cmllcyAvIHJvdworCV9fbGUxNiAgIHN0cmlwX3NpemU7CQkvKiBibG9ja3MgdXNlZCBvbiBlYWNoIGRpc2sgLyBzdHJpcGUgKi8KKwlfX2xlNjQgICBkaXNrX3N0YXJ0aW5nX2JsazsJLyogRmlyc3QgZGlzayBibG9jayB1c2VkIGluIHZvbHVtZSAqLworCV9fbGU2NCAgIGRpc2tfYmxrX2NudDsJCS8qIGRpc2sgYmxvY2tzIHVzZWQgYnkgdm9sdW1lIC8gZGlzayAqLworCV9fbGUxNiAgIGRhdGFfZGlza3NfcGVyX3JvdzsJLyogZGF0YSBkaXNrIGVudHJpZXMgLyByb3cgaW4gdGhlIG1hcCAqLworCV9fbGUxNiAgIG1ldGFkYXRhX2Rpc2tzX3Blcl9yb3c7LyogbWlycm9yL3Bhcml0eSBkaXNrIGVudHJpZXMgLyByb3cKIAkJCQkJICogaW4gdGhlIG1hcCAqLwotCXUxNiAgIHJvd19jbnQ7CQkJLyogcm93cyBpbiBlYWNoIGxheW91dCBtYXAgKi8KLQl1MTYgICBsYXlvdXRfbWFwX2NvdW50OwkJLyogbGF5b3V0IG1hcHMgKDEgbWFwIHBlciBtaXJyb3IvcGFyaXR5CisJX19sZTE2ICAgcm93X2NudDsJCS8qIHJvd3MgaW4gZWFjaCBsYXlvdXQgbWFwICovCisJX19sZTE2ICAgbGF5b3V0X21hcF9jb3VudDsJLyogbGF5b3V0IG1hcHMgKDEgbWFwIHBlciBtaXJyb3IvcGFyaXR5CiAJCQkJCSAqIGdyb3VwKSAqLwotCXUxNiAgIGZsYWdzOwkJCS8qIEJpdCAwIHNldCBpZiBlbmNyeXB0aW9uIGVuYWJsZWQgKi8KKwlfX2xlMTYgICBmbGFnczsJCQkvKiBCaXQgMCBzZXQgaWYgZW5jcnlwdGlvbiBlbmFibGVkICovCiAjZGVmaW5lIFJBSURfTUFQX0ZMQUdfRU5DUllQVF9PTiAgMHgwMQotCXUxNiAgIGRla2luZGV4OwkJCS8qIERhdGEgZW5jcnlwdGlvbiBrZXkgaW5kZXguICovCisJX19sZTE2ICAgZGVraW5kZXg7CQkvKiBEYXRhIGVuY3J5cHRpb24ga2V5IGluZGV4LiAqLwogCXU4ICAgIHJlc2VydmVkWzE2XTsKIAlzdHJ1Y3QgcmFpZF9tYXBfZGlza19kYXRhIGRhdGFbUkFJRF9NQVBfTUFYX0VOVFJJRVNdOwogfTsKQEAgLTI0MCw2ICsyNDAsMTAgQEAKIAogc3RydWN0IGV4dF9yZXBvcnRfbHVuX2VudHJ5IHsKIAl1OCBsdW5pZFs4XTsKKyNkZWZpbmUgR0VUX0JNSUNfQlVTKGx1bmlkKSAoKGx1bmlkKVs3XSAmIDB4M0YpCisjZGVmaW5lIEdFVF9CTUlDX0xFVkVMX1RXT19UQVJHRVQobHVuaWQpICgobHVuaWQpWzZdKQorI2RlZmluZSBHRVRfQk1JQ19EUklWRV9OVU1CRVIobHVuaWQpICgoKEdFVF9CTUlDX0JVUygobHVuaWQpKSAtIDEpIDw8IDgpICsgXAorCQkJR0VUX0JNSUNfTEVWRUxfVFdPX1RBUkdFVCgobHVuaWQpKSkKIAl1OCB3d2lkWzhdOwogCXU4IGRldmljZV90eXBlOwogCXU4IGRldmljZV9mbGFnczsKQEAgLTI2OCw2ICsyNzIsNyBAQAogI2RlZmluZSBIUFNBX0NBQ0hFX0ZMVVNIIDB4MDEJLyogQzIgd2FzIGFscmVhZHkgYmVpbmcgdXNlZCBieSBIUFNBICovCiAjZGVmaW5lIEJNSUNfRkxBU0hfRklSTVdBUkUgMHhGNwogI2RlZmluZSBCTUlDX1NFTlNFX0NPTlRST0xMRVJfUEFSQU1FVEVSUyAweDY0CisjZGVmaW5lIEJNSUNfSURFTlRJRllfUEhZU0lDQUxfREVWSUNFIDB4MTUKIAogLyogQ29tbWFuZCBMaXN0IFN0cnVjdHVyZSAqLwogdW5pb24gU0NTSTNBZGRyIHsKQEAgLTMxMyw4ICszMTgsOCBAQAogc3RydWN0IENvbW1hbmRMaXN0SGVhZGVyIHsKIAl1OCAgICAgICAgICAgICAgUmVwbHlRdWV1ZTsKIAl1OCAgICAgICAgICAgICAgU0dMaXN0OwotCXUxNiAgICAgICAgICAgICBTR1RvdGFsOwotCXU2NAkJdGFnOworCV9fbGUxNiAgICAgICAgICBTR1RvdGFsOworCV9fbGU2NAkJdGFnOwogCXVuaW9uIExVTkFkZHIgICAgIExVTjsKIH07CiAKQEAgLTMzOCwxNCArMzQzLDE0IEBACiB9OwogCiBzdHJ1Y3QgRXJyRGVzY3JpcHRvciB7Ci0JdTY0IEFkZHI7Ci0JdTMyICBMZW47CisJX19sZTY0IEFkZHI7CisJX19sZTMyIExlbjsKIH07CiAKIHN0cnVjdCBTR0Rlc2NyaXB0b3IgewotCXU2NCBBZGRyOwotCXUzMiAgTGVuOwotCXUzMiAgRXh0OworCV9fbGU2NCBBZGRyOworCV9fbGUzMiBMZW47CisJX19sZTMyIEV4dDsKIH07CiAKIHVuaW9uIE1vcmVFcnJJbmZvIHsKQEAgLTM3NSwyMiArMzgwLDE5IEBACiAjZGVmaW5lIENNRF9JT0FDQ0VMMQkweDA0CiAjZGVmaW5lIENNRF9JT0FDQ0VMMgkweDA1CiAKLSNkZWZpbmUgRElSRUNUX0xPT0tVUF9TSElGVCA1Ci0jZGVmaW5lIERJUkVDVF9MT09LVVBfQklUIDB4MTAKKyNkZWZpbmUgRElSRUNUX0xPT0tVUF9TSElGVCA0CiAjZGVmaW5lIERJUkVDVF9MT09LVVBfTUFTSyAofigoMSA8PCBESVJFQ1RfTE9PS1VQX1NISUZUKSAtIDEpKQogCiAjZGVmaW5lIEhQU0FfRVJST1JfQklUICAgICAgICAgIDB4MDIKIHN0cnVjdCBjdGxyX2luZm87IC8qIGRlZmluZWQgaW4gaHBzYS5oICovCi0vKiBUaGUgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSBuZWVkcyB0byBiZSBkaXZpc2libGUgYnkgMzIKLSAqIG9uIGFsbCBhcmNoaXRlY3R1cmVzIGJlY2F1c2UgbG93IDUgYml0cyBvZiB0aGUgYWRkcmVzc2VzCisvKiBUaGUgc2l6ZSBvZiB0aGlzIHN0cnVjdHVyZSBuZWVkcyB0byBiZSBkaXZpc2libGUgYnkgMTI4CisgKiBvbiBhbGwgYXJjaGl0ZWN0dXJlcy4gIFRoZSBsb3cgNCBiaXRzIG9mIHRoZSBhZGRyZXNzZXMKICAqIGFyZSB1c2VkIGFzIGZvbGxvd3M6CiAgKgogICogYml0IDA6IHRvIGRldmljZSwgdXNlZCB0byBpbmRpY2F0ZSAicGVyZm9ybWFudCBtb2RlIiBjb21tYW5kCiAgKiAgICAgICAgZnJvbSBkZXZpY2UsIGluZGlkY2F0ZXMgZXJyb3Igc3RhdHVzLgogICogYml0IDEtMzogdG8gZGV2aWNlLCBpbmRpY2F0ZXMgYmxvY2sgZmV0Y2ggdGFibGUgZW50cnkgZm9yCiAgKiAgICAgICAgICByZWR1Y2luZyBETUEgaW4gZmV0Y2hpbmcgY29tbWFuZHMgZnJvbSBob3N0IG1lbW9yeS4KLSAqIGJpdCA0OiB1c2VkIHRvIGluZGljYXRlIHdoZXRoZXIgdGFnIGlzICJkaXJlY3QgbG9va3VwIiAoaW5kZXgpLAotICogICAgICAgIG9yIGEgYnVzIGFkZHJlc3MuCiAgKi8KIAogI2RlZmluZSBDT01NQU5ETElTVF9BTElHTk1FTlQgMTI4CkBAIC00MDUsOSArNDA3LDIxIEBACiAJc3RydWN0IGN0bHJfaW5mbwkgICAqaDsKIAlpbnQJCQkgICBjbWRfdHlwZTsKIAlsb25nCQkJICAgY21kaW5kZXg7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBjb21wbGV0aW9uICp3YWl0aW5nOwotCXZvaWQgICAqc2NzaV9jbWQ7CisJc3RydWN0IHNjc2lfY21uZCAqc2NzaV9jbWQ7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisKKwkvKgorCSAqIEZvciBjb21tYW5kcyB1c2luZyBlaXRoZXIgb2YgdGhlIHR3byAiaW9hY2NlbCIgcGF0aHMgdG8KKwkgKiBieXBhc3MgdGhlIFJBSUQgc3RhY2sgYW5kIGdvIGRpcmVjdGx5IHRvIHRoZSBwaHlzaWNhbCBkaXNrCisJICogcGh5c19kaXNrIGlzIGEgcG9pbnRlciB0byB0aGUgaHBzYV9zY3NpX2Rldl90IHRvIHdoaWNoIHRoZQorCSAqIGkvbyBpcyBkZXN0aW5lZC4gIFdlIG5lZWQgdG8gc3RvcmUgdGhhdCBoZXJlIGJlY2F1c2UgdGhlIGNvbW1hbmQKKwkgKiBtYXkgcG90ZW50aWFsbHkgZW5jb3VudGVyIFRBU0sgU0VUIEZVTEwgYW5kIG5lZWQgdG8gYmUgcmVzdWJtaXR0ZWQKKwkgKiBGb3IgIm5vcm1hbCIgaS9vJ3Mgbm90IHVzaW5nIHRoZSAiaW9hY2NlbCIgcGF0aHMsIHBoeXNfZGlzayBpcworCSAqIG5vdCB1c2VkLgorCSAqLworCXN0cnVjdCBocHNhX3Njc2lfZGV2X3QgKnBoeXNfZGlzazsKKwlhdG9taWNfdCByZWZjb3VudDsgLyogTXVzdCBiZSBsYXN0IHRvIGF2b2lkIG1lbXNldCBpbiBjbWRfYWxsb2MgKi8KIH0gX19hbGlnbmVkKENPTU1BTkRMSVNUX0FMSUdOTUVOVCk7CiAKIC8qIE1heCBTL0cgZWxlbWVudHMgaW4gSS9PIGFjY2VsZXJhdG9yIGNvbW1hbmQgKi8KQEAgLTQyMCw3ICs0MzQsNyBAQAogICovCiAjZGVmaW5lIElPQUNDRUwxX0NPTU1BTkRMSVNUX0FMSUdOTUVOVCAxMjgKIHN0cnVjdCBpb19hY2NlbDFfY21kIHsKLQl1MTYgZGV2X2hhbmRsZTsJCQkvKiAweDAwIC0gMHgwMSAqLworCV9fbGUxNiBkZXZfaGFuZGxlOwkJLyogMHgwMCAtIDB4MDEgKi8KIAl1OCAgcmVzZXJ2ZWQxOwkJCS8qIDB4MDIgKi8KIAl1OCAgZnVuY3Rpb247CQkJLyogMHgwMyAqLwogCXU4ICByZXNlcnZlZDJbOF07CQkvKiAweDA0IC0gMHgwQiAqLwpAQCAtNDMwLDIwICs0NDQsMjAgQEAKIAl1OCAgcmVzZXJ2ZWQ0OwkJCS8qIDB4MTMgKi8KIAl1OCAgc2dsX29mZnNldDsJCQkvKiAweDE0ICovCiAJdTggIHJlc2VydmVkNVs3XTsJCS8qIDB4MTUgLSAweDFCICovCi0JdTMyIHRyYW5zZmVyX2xlbjsJCS8qIDB4MUMgLSAweDFGICovCisJX19sZTMyIHRyYW5zZmVyX2xlbjsJCS8qIDB4MUMgLSAweDFGICovCiAJdTggIHJlc2VydmVkNls0XTsJCS8qIDB4MjAgLSAweDIzICovCi0JdTE2IGlvX2ZsYWdzOwkJCS8qIDB4MjQgLSAweDI1ICovCisJX19sZTE2IGlvX2ZsYWdzOwkJLyogMHgyNCAtIDB4MjUgKi8KIAl1OCAgcmVzZXJ2ZWQ3WzE0XTsJCS8qIDB4MjYgLSAweDMzICovCiAJdTggIExVTls4XTsJCQkvKiAweDM0IC0gMHgzQiAqLwotCXUzMiBjb250cm9sOwkJCS8qIDB4M0MgLSAweDNGICovCisJX19sZTMyIGNvbnRyb2w7CQkJLyogMHgzQyAtIDB4M0YgKi8KIAl1OCAgQ0RCWzE2XTsJCQkvKiAweDQwIC0gMHg0RiAqLwogCXU4ICByZXNlcnZlZDhbMTZdOwkJLyogMHg1MCAtIDB4NUYgKi8KLQl1MTYgaG9zdF9jb250ZXh0X2ZsYWdzOwkJLyogMHg2MCAtIDB4NjEgKi8KLQl1MTYgdGltZW91dF9zZWM7CQkvKiAweDYyIC0gMHg2MyAqLworCV9fbGUxNiBob3N0X2NvbnRleHRfZmxhZ3M7CS8qIDB4NjAgLSAweDYxICovCisJX19sZTE2IHRpbWVvdXRfc2VjOwkJLyogMHg2MiAtIDB4NjMgKi8KIAl1OCAgUmVwbHlRdWV1ZTsJCQkvKiAweDY0ICovCiAJdTggIHJlc2VydmVkOVszXTsJCS8qIDB4NjUgLSAweDY3ICovCi0JdTY0IHRhZzsJCQkvKiAweDY4IC0gMHg2RiAqLwotCXU2NCBob3N0X2FkZHI7CQkJLyogMHg3MCAtIDB4NzcgKi8KKwlfX2xlNjQgdGFnOwkJCS8qIDB4NjggLSAweDZGICovCisJX19sZTY0IGhvc3RfYWRkcjsJCS8qIDB4NzAgLSAweDc3ICovCiAJdTggIENJU1NfTFVOWzhdOwkJLyogMHg3OCAtIDB4N0YgKi8KIAlzdHJ1Y3QgU0dEZXNjcmlwdG9yIFNHW0lPQUNDRUwxX01BWFNHRU5UUklFU107CiB9IF9fYWxpZ25lZChJT0FDQ0VMMV9DT01NQU5ETElTVF9BTElHTk1FTlQpOwpAQCAtNDcwLDggKzQ4NCw4IEBACiAjZGVmaW5lIElPQUNDRUwxX0JVU0FERFJfQ01EVFlQRSAgICAgICAgMHgwMDAwMDA2MAogCiBzdHJ1Y3QgaW9hY2NlbDJfc2dfZWxlbWVudCB7Ci0JdTY0IGFkZHJlc3M7Ci0JdTMyIGxlbmd0aDsKKwlfX2xlNjQgYWRkcmVzczsKKwlfX2xlMzIgbGVuZ3RoOwogCXU4IHJlc2VydmVkWzNdOwogCXU4IGNoYWluX2luZGljYXRvcjsKICNkZWZpbmUgSU9BQ0NFTDJfQ0hBSU4gMHg4MApAQCAtNTI2LDIwICs1NDAsMjAgQEAKIAkJCQkJICAgICAvKiAgICAgMD1vZmYsIDE9b24gKi8KIAl1OCAgcmVwbHlfcXVldWU7CQkvKiBSZXBseSBRdWV1ZSBJRCAqLwogCXU4ICByZXNlcnZlZDE7CQkJLyogUmVzZXJ2ZWQgKi8KLQl1MzIgc2NzaV9uZXh1czsJCQkvKiBEZXZpY2UgSGFuZGxlICovCi0JdTMyIFRhZzsJCQkvKiBjY2lzcyB0YWcsIGxvd2VyIDQgYnl0ZXMgb25seSAqLwotCXUzMiB0d2Vha19sb3dlcjsJCS8qIEVuY3J5cHRpb24gdHdlYWssIGxvd2VyIDQgYnl0ZXMgKi8KKwlfX2xlMzIgc2NzaV9uZXh1czsJCS8qIERldmljZSBIYW5kbGUgKi8KKwlfX2xlMzIgVGFnOwkJCS8qIGNjaXNzIHRhZywgbG93ZXIgNCBieXRlcyBvbmx5ICovCisJX19sZTMyIHR3ZWFrX2xvd2VyOwkJLyogRW5jcnlwdGlvbiB0d2VhaywgbG93ZXIgNCBieXRlcyAqLwogCXU4ICBjZGJbMTZdOwkJCS8qIFNDU0kgQ29tbWFuZCBEZXNjcmlwdG9yIEJsb2NrICovCiAJdTggIGNjaXNzX2x1bls4XTsJCS8qIDggYnl0ZSBTQ1NJIGFkZHJlc3MgKi8KLQl1MzIgZGF0YV9sZW47CQkJLyogVG90YWwgYnl0ZXMgdG8gdHJhbnNmZXIgKi8KKwlfX2xlMzIgZGF0YV9sZW47CQkvKiBUb3RhbCBieXRlcyB0byB0cmFuc2ZlciAqLwogCXU4ICBjbWRfcHJpb3JpdHlfdGFza19hdHRyOwkvKiBwcmlvcml0eSBhbmQgdGFzayBhdHRycyAqLwogI2RlZmluZSBJT0FDQ0VMMl9QUklPUklUWV9NQVNLIDB4NzgKICNkZWZpbmUgSU9BQ0NFTDJfQVRUUl9NQVNLIDB4MDcKIAl1OCAgc2dfY291bnQ7CQkJLyogTnVtYmVyIG9mIHNnIGVsZW1lbnRzICovCi0JdTE2IGRla2luZGV4OwkJCS8qIERhdGEgZW5jcnlwdGlvbiBrZXkgaW5kZXggKi8KLQl1NjQgZXJyX3B0cjsJCQkvKiBFcnJvciBQb2ludGVyICovCi0JdTMyIGVycl9sZW47CQkJLyogRXJyb3IgTGVuZ3RoKi8KLQl1MzIgdHdlYWtfdXBwZXI7CQkvKiBFbmNyeXB0aW9uIHR3ZWFrLCB1cHBlciA0IGJ5dGVzICovCisJX19sZTE2IGRla2luZGV4OwkJLyogRGF0YSBlbmNyeXB0aW9uIGtleSBpbmRleCAqLworCV9fbGU2NCBlcnJfcHRyOwkJCS8qIEVycm9yIFBvaW50ZXIgKi8KKwlfX2xlMzIgZXJyX2xlbjsJCQkvKiBFcnJvciBMZW5ndGgqLworCV9fbGUzMiB0d2Vha191cHBlcjsJCS8qIEVuY3J5cHRpb24gdHdlYWssIHVwcGVyIDQgYnl0ZXMgKi8KIAlzdHJ1Y3QgaW9hY2NlbDJfc2dfZWxlbWVudCBzZ1tJT0FDQ0VMMl9NQVhTR0VOVFJJRVNdOwogCXN0cnVjdCBpb19hY2NlbDJfc2NzaV9yZXNwb25zZSBlcnJvcl9kYXRhOwogfSBfX2FsaWduZWQoSU9BQ0NFTDJfQ09NTUFORExJU1RfQUxJR05NRU5UKTsKQEAgLTU2MywxOCArNTc3LDE4IEBACiAJdTggcmVzZXJ2ZWQxOwkJLyogYnl0ZSAzIFJlc2VydmVkICovCiAJdTMyIGl0X25leHVzOwkJLyogU0NTSSBJLVQgTmV4dXMgKi8KIAl1OCBsdW5faWRbOF07CQkvKiBMVU4gSUQgZm9yIFRNRiByZXF1ZXN0ICovCi0JdTY0IHRhZzsJCS8qIGNjaXNzIHRhZyBhc3NvY2lhdGVkIHcvIHJlcXVlc3QgKi8KLQl1NjQgYWJvcnRfdGFnOwkJLyogY2Npc3MgdGFnIG9mIFNDU0kgY21kIG9yIHRhc2sgdG8gYWJvcnQgKi8KLQl1NjQgZXJyb3JfcHRyOwkJLyogRXJyb3IgUG9pbnRlciAqLwotCXUzMiBlcnJvcl9sZW47CQkvKiBFcnJvciBMZW5ndGggKi8KKwlfX2xlNjQgdGFnOwkJLyogY2Npc3MgdGFnIGFzc29jaWF0ZWQgdy8gcmVxdWVzdCAqLworCV9fbGU2NCBhYm9ydF90YWc7CS8qIGNjaXNzIHRhZyBvZiBTQ1NJIGNtZCBvciBUTUYgdG8gYWJvcnQgKi8KKwlfX2xlNjQgZXJyb3JfcHRyOwkJLyogRXJyb3IgUG9pbnRlciAqLworCV9fbGUzMiBlcnJvcl9sZW47CQkvKiBFcnJvciBMZW5ndGggKi8KIH07CiAKIC8qIENvbmZpZ3VyYXRpb24gVGFibGUgU3RydWN0dXJlICovCiBzdHJ1Y3QgSG9zdFdyaXRlIHsKLQl1MzIgVHJhbnNwb3J0UmVxdWVzdDsKLQl1MzIgY29tbWFuZF9wb29sX2FkZHJfaGk7Ci0JdTMyIENvYWxJbnREZWxheTsKLQl1MzIgQ29hbEludENvdW50OworCV9fbGUzMgkJVHJhbnNwb3J0UmVxdWVzdDsKKwlfX2xlMzIJCWNvbW1hbmRfcG9vbF9hZGRyX2hpOworCV9fbGUzMgkJQ29hbEludERlbGF5OworCV9fbGUzMgkJQ29hbEludENvdW50OwogfTsKIAogI2RlZmluZSBTSU1QTEVfTU9ERSAgICAgMHgwMgpAQCAtNTg1LDU0ICs1OTksNTQgQEAKICNkZWZpbmUgRFJJVkVSX1NVUFBPUlRfVUFfRU5BQkxFICAgICAgICAweDAwMDAwMDAxCiAKIHN0cnVjdCBDZmdUYWJsZSB7Ci0JdTggICAgICAgICAgICBTaWduYXR1cmVbNF07Ci0JdTMyCQlTcGVjVmFsZW5jZTsKLQl1MzIgICAgICAgICAgIFRyYW5zcG9ydFN1cHBvcnQ7Ci0JdTMyICAgICAgICAgICBUcmFuc3BvcnRBY3RpdmU7Ci0Jc3RydWN0IAkJSG9zdFdyaXRlIEhvc3RXcml0ZTsKLQl1MzIgICAgICAgICAgIENtZHNPdXRNYXg7Ci0JdTMyICAgICAgICAgICBCdXNUeXBlczsKLQl1MzIgICAgICAgICAgIFRyYW5zTWV0aG9kT2Zmc2V0OwotCXU4ICAgICAgICAgICAgU2VydmVyTmFtZVsxNl07Ci0JdTMyICAgICAgICAgICBIZWFydEJlYXQ7Ci0JdTMyICAgICAgICAgICBkcml2ZXJfc3VwcG9ydDsKLSNkZWZpbmUJCQlFTkFCTEVfU0NTSV9QUkVGRVRDSCAweDEwMAotI2RlZmluZQkJCUVOQUJMRV9VTklUX0FUVE4gMHgwMQotCXUzMgkgCU1heFNjYXR0ZXJHYXRoZXJFbGVtZW50czsKLQl1MzIJCU1heExvZ2ljYWxVbml0czsKLQl1MzIJCU1heFBoeXNpY2FsRGV2aWNlczsKLQl1MzIJCU1heFBoeXNpY2FsRHJpdmVzUGVyTG9naWNhbFVuaXQ7Ci0JdTMyCQlNYXhQZXJmb3JtYW50TW9kZUNvbW1hbmRzOwotCXUzMgkJTWF4QmxvY2tGZXRjaDsKLQl1MzIJCVBvd2VyQ29uc2VydmF0aW9uU3VwcG9ydDsKLQl1MzIJCVBvd2VyQ29uc2VydmF0aW9uRW5hYmxlOwotCXUzMgkJVE1GU3VwcG9ydEZsYWdzOworCXU4CQlTaWduYXR1cmVbNF07CisJX19sZTMyCQlTcGVjVmFsZW5jZTsKKwlfX2xlMzIJCVRyYW5zcG9ydFN1cHBvcnQ7CisJX19sZTMyCQlUcmFuc3BvcnRBY3RpdmU7CisJc3RydWN0IEhvc3RXcml0ZSBIb3N0V3JpdGU7CisJX19sZTMyCQlDbWRzT3V0TWF4OworCV9fbGUzMgkJQnVzVHlwZXM7CisJX19sZTMyCQlUcmFuc01ldGhvZE9mZnNldDsKKwl1OAkJU2VydmVyTmFtZVsxNl07CisJX19sZTMyCQlIZWFydEJlYXQ7CisJX19sZTMyCQlkcml2ZXJfc3VwcG9ydDsKKyNkZWZpbmUJCQlFTkFCTEVfU0NTSV9QUkVGRVRDSAkJMHgxMDAKKyNkZWZpbmUJCQlFTkFCTEVfVU5JVF9BVFROCQkweDAxCisJX19sZTMyCQlNYXhTY2F0dGVyR2F0aGVyRWxlbWVudHM7CisJX19sZTMyCQlNYXhMb2dpY2FsVW5pdHM7CisJX19sZTMyCQlNYXhQaHlzaWNhbERldmljZXM7CisJX19sZTMyCQlNYXhQaHlzaWNhbERyaXZlc1BlckxvZ2ljYWxVbml0OworCV9fbGUzMgkJTWF4UGVyZm9ybWFudE1vZGVDb21tYW5kczsKKwlfX2xlMzIJCU1heEJsb2NrRmV0Y2g7CisJX19sZTMyCQlQb3dlckNvbnNlcnZhdGlvblN1cHBvcnQ7CisJX19sZTMyCQlQb3dlckNvbnNlcnZhdGlvbkVuYWJsZTsKKwlfX2xlMzIJCVRNRlN1cHBvcnRGbGFnczsKIAl1OAkJVE1GVGFnTWFza1s4XTsKIAl1OAkJcmVzZXJ2ZWRbMHg3OCAtIDB4NzBdOwotCXUzMgkJbWlzY19md19zdXBwb3J0OyAvKiBvZmZzZXQgMHg3OCAqLwotI2RlZmluZQkJCU1JU0NfRldfRE9PUkJFTExfUkVTRVQgKDB4MDIpCi0jZGVmaW5lCQkJTUlTQ19GV19ET09SQkVMTF9SRVNFVDIgKDB4MDEwKQotI2RlZmluZQkJCU1JU0NfRldfUkFJRF9PRkZMT0FEX0JBU0lDICgweDAyMCkKLSNkZWZpbmUJCQlNSVNDX0ZXX0VWRU5UX05PVElGWSAoMHgwODApCisJX19sZTMyCQltaXNjX2Z3X3N1cHBvcnQ7CQkvKiBvZmZzZXQgMHg3OCAqLworI2RlZmluZQkJCU1JU0NfRldfRE9PUkJFTExfUkVTRVQJCTB4MDIKKyNkZWZpbmUJCQlNSVNDX0ZXX0RPT1JCRUxMX1JFU0VUMgkJMHgwMTAKKyNkZWZpbmUJCQlNSVNDX0ZXX1JBSURfT0ZGTE9BRF9CQVNJQwkweDAyMAorI2RlZmluZQkJCU1JU0NfRldfRVZFTlRfTk9USUZZCQkweDA4MAogCXU4CQlkcml2ZXJfdmVyc2lvblszMl07Ci0JdTMyICAgICAgICAgICAgIG1heF9jYWNoZWRfd3JpdGVfc2l6ZTsKLQl1OCAgICAgICAgICAgICAgZHJpdmVyX3NjcmF0Y2hwYWRbMTZdOwotCXUzMiAgICAgICAgICAgICBtYXhfZXJyb3JfaW5mb19sZW5ndGg7Ci0JdTMyCQlpb19hY2NlbF9tYXhfZW1iZWRkZWRfc2dfY291bnQ7Ci0JdTMyCQlpb19hY2NlbF9yZXF1ZXN0X3NpemVfb2Zmc2V0OwotCXUzMgkJZXZlbnRfbm90aWZ5OwotI2RlZmluZSBIUFNBX0VWRU5UX05PVElGWV9BQ0NFTF9JT19QQVRIX1NUQVRFX0NIQU5HRSAoMSA8PCAzMCkKLSNkZWZpbmUgSFBTQV9FVkVOVF9OT1RJRllfQUNDRUxfSU9fUEFUSF9DT05GSUdfQ0hBTkdFICgxIDw8IDMxKQotCXUzMgkJY2xlYXJfZXZlbnRfbm90aWZ5OworCV9fbGUzMgkJbWF4X2NhY2hlZF93cml0ZV9zaXplOworCXU4CQlkcml2ZXJfc2NyYXRjaHBhZFsxNl07CisJX19sZTMyCQltYXhfZXJyb3JfaW5mb19sZW5ndGg7CisJX19sZTMyCQlpb19hY2NlbF9tYXhfZW1iZWRkZWRfc2dfY291bnQ7CisJX19sZTMyCQlpb19hY2NlbF9yZXF1ZXN0X3NpemVfb2Zmc2V0OworCV9fbGUzMgkJZXZlbnRfbm90aWZ5OworI2RlZmluZQkJSFBTQV9FVkVOVF9OT1RJRllfQUNDRUxfSU9fUEFUSF9TVEFURV9DSEFOR0UgKDEgPDwgMzApCisjZGVmaW5lCQlIUFNBX0VWRU5UX05PVElGWV9BQ0NFTF9JT19QQVRIX0NPTkZJR19DSEFOR0UgKDEgPDwgMzEpCisJX19sZTMyCQljbGVhcl9ldmVudF9ub3RpZnk7CiB9OwogCiAjZGVmaW5lIE5VTV9CTE9DS0ZFVENIX0VOVFJJRVMgOAogc3RydWN0IFRyYW5zVGFibGVfc3RydWN0IHsKLQl1MzIgICAgICAgICAgICBCbG9ja0ZldGNoW05VTV9CTE9DS0ZFVENIX0VOVFJJRVNdOwotCXUzMiAgICAgICAgICAgIFJlcFFTaXplOwotCXUzMiAgICAgICAgICAgIFJlcFFDb3VudDsKLQl1MzIgICAgICAgICAgICBSZXBRQ3RyQWRkckxvdzMyOwotCXUzMiAgICAgICAgICAgIFJlcFFDdHJBZGRySGlnaDMyOworCV9fbGUzMgkJQmxvY2tGZXRjaFtOVU1fQkxPQ0tGRVRDSF9FTlRSSUVTXTsKKwlfX2xlMzIJCVJlcFFTaXplOworCV9fbGUzMgkJUmVwUUNvdW50OworCV9fbGUzMgkJUmVwUUN0ckFkZHJMb3czMjsKKwlfX2xlMzIJCVJlcFFDdHJBZGRySGlnaDMyOwogI2RlZmluZSBNQVhfUkVQTFlfUVVFVUVTIDY0CiAJc3RydWN0IHZhbHMzMiAgUmVwUUFkZHJbTUFYX1JFUExZX1FVRVVFU107CiB9OwpAQCAtNjQ0LDUgKzY1OCwxMzcgQEAKIAl1MzIJCWJvYXJkX2lkOwogfTsKIAorc3RydWN0IGJtaWNfaWRlbnRpZnlfcGh5c2ljYWxfZGV2aWNlIHsKKwl1OCAgICBzY3NpX2J1czsgICAgICAgICAgLyogU0NTSSBCdXMgbnVtYmVyIG9uIGNvbnRyb2xsZXIgKi8KKwl1OCAgICBzY3NpX2lkOyAgICAgICAgICAgLyogU0NTSSBJRCBvbiB0aGlzIGJ1cyAqLworCV9fbGUxNiBibG9ja19zaXplOwkgICAgIC8qIHNlY3RvciBzaXplIGluIGJ5dGVzICovCisJX19sZTMyIHRvdGFsX2Jsb2NrczsJICAgICAvKiBudW1iZXIgZm9yIHNlY3RvcnMgb24gZHJpdmUgKi8KKwlfX2xlMzIgcmVzZXJ2ZWRfYmxvY2tzOyAgIC8qIGNvbnRyb2xsZXIgcmVzZXJ2ZWQgKFJJUykgKi8KKwl1OCAgICBtb2RlbFs0MF07ICAgICAgICAgLyogUGh5c2ljYWwgRHJpdmUgTW9kZWwgKi8KKwl1OCAgICBzZXJpYWxfbnVtYmVyWzQwXTsgLyogRHJpdmUgU2VyaWFsIE51bWJlciAqLworCXU4ICAgIGZpcm13YXJlX3JldmlzaW9uWzhdOyAvKiBkcml2ZSBmaXJtd2FyZSByZXZpc2lvbiAqLworCXU4ICAgIHNjc2lfaW5xdWlyeV9iaXRzOyAvKiBpbnF1aXJ5IGJ5dGUgNyBiaXRzICovCisJdTggICAgY29tcGFxX2RyaXZlX3N0YW1wOyAvKiAwIG1lYW5zIGRyaXZlIG5vdCBzdGFtcGVkICovCisJdTggICAgbGFzdF9mYWlsdXJlX3JlYXNvbjsKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfVE9PX1NNQUxMX0lOX0xPQURfQ09ORklHCQkweDAxCisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX0VSUk9SX0VSQVNJTkdfUklTCQkJMHgwMgorI2RlZmluZSBCTUlDX0xBU1RfRkFJTFVSRV9FUlJPUl9TQVZJTkdfUklTCQkJMHgwMworI2RlZmluZSBCTUlDX0xBU1RfRkFJTFVSRV9GQUlMX0RSSVZFX0NPTU1BTkQJCQkweDA0CisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX01BUktfQkFEX0ZBSUxFRAkJCTB4MDUKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfTUFSS19CQURfRkFJTEVEX0lOX0ZJTklTSF9SRU1BUAkweDA2CisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX1RJTUVPVVQJCQkJMHgwNworI2RlZmluZSBCTUlDX0xBU1RfRkFJTFVSRV9BVVRPU0VOU0VfRkFJTEVECQkJMHgwOAorI2RlZmluZSBCTUlDX0xBU1RfRkFJTFVSRV9NRURJVU1fRVJST1JfMQkJCTB4MDkKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfTUVESVVNX0VSUk9SXzIJCQkweDBhCisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX05PVF9SRUFEWV9CQURfU0VOU0UJCQkweDBiCisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX05PVF9SRUFEWQkJCQkweDBjCisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX0hBUkRXQVJFX0VSUk9SCQkJMHgwZAorI2RlZmluZSBCTUlDX0xBU1RfRkFJTFVSRV9BQk9SVEVEX0NPTU1BTkQJCQkweDBlCisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX1dSSVRFX1BST1RFQ1RFRAkJCTB4MGYKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfU1BJTl9VUF9GQUlMVVJFX0lOX1JFQ09WRVIJCTB4MTAKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfUkVCVUlMRF9XUklURV9FUlJPUgkJCTB4MTEKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfVE9PX1NNQUxMX0lOX0hPVF9QTFVHCQkJMHgxMgorI2RlZmluZSBCTUlDX0xBU1RfRkFJTFVSRV9CVVNfUkVTRVRfUkVDT1ZFUllfQUJPUlRFRAkJMHgxMworI2RlZmluZSBCTUlDX0xBU1RfRkFJTFVSRV9SRU1PVkVEX0lOX0hPVF9QTFVHCQkJMHgxNAorI2RlZmluZSBCTUlDX0xBU1RfRkFJTFVSRV9JTklUX1JFUVVFU1RfU0VOU0VfRkFJTEVECQkweDE1CisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX0lOSVRfU1RBUlRfVU5JVF9GQUlMRUQJCTB4MTYKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfSU5RVUlSWV9GQUlMRUQJCQkweDE3CisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX05PTl9ESVNLX0RFVklDRQkJCTB4MTgKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfUkVBRF9DQVBBQ0lUWV9GQUlMRUQJCQkweDE5CisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX0lOVkFMSURfQkxPQ0tfU0laRQkJCTB4MWEKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfSE9UX1BMVUdfUkVRVUVTVF9TRU5TRV9GQUlMRUQJCTB4MWIKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfSE9UX1BMVUdfU1RBUlRfVU5JVF9GQUlMRUQJCTB4MWMKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfV1JJVEVfRVJST1JfQUZURVJfUkVNQVAJCTB4MWQKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfSU5JVF9SRVNFVF9SRUNPVkVSWV9BQk9SVEVECQkweDFlCisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX0RFRkVSUkVEX1dSSVRFX0VSUk9SCQkJMHgxZgorI2RlZmluZSBCTUlDX0xBU1RfRkFJTFVSRV9NSVNTSU5HX0lOX1NBVkVfUklTCQkJMHgyMAorI2RlZmluZSBCTUlDX0xBU1RfRkFJTFVSRV9XUk9OR19SRVBMQUNFCQkJCTB4MjEKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfR0RQX1ZQRF9JTlFVSVJZX0ZBSUxFRAkJMHgyMgorI2RlZmluZSBCTUlDX0xBU1RfRkFJTFVSRV9HRFBfTU9ERV9TRU5TRV9GQUlMRUQJCQkweDIzCisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX0RSSVZFX05PVF9JTl80OEJJVF9NT0RFCQkweDI0CisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX0RSSVZFX1RZUEVfTUlYX0lOX0hPVF9QTFVHCQkweDI1CisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX0RSSVZFX1RZUEVfTUlYX0lOX0xPQURfQ0ZHCQkweDI2CisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX1BST1RPQ09MX0FEQVBURVJfRkFJTEVECQkweDI3CisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX0ZBVUxUWV9JRF9CQVlfRU1QVFkJCQkweDI4CisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX0ZBVUxUWV9JRF9CQVlfT0NDVVBJRUQJCTB4MjkKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfRkFVTFRZX0lEX0lOVkFMSURfQkFZCQkJMHgyYQorI2RlZmluZSBCTUlDX0xBU1RfRkFJTFVSRV9XUklURV9SRVRSSUVTX0ZBSUxFRAkJCTB4MmIKKworI2RlZmluZSBCTUlDX0xBU1RfRkFJTFVSRV9TTUFSVF9FUlJPUl9SRVBPUlRFRAkJCTB4MzcKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfUEhZX1JFU0VUX0ZBSUxFRAkJCTB4MzgKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfT05MWV9PTkVfQ1RMUl9DQU5fU0VFX0RSSVZFCQkweDQwCisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX0tDX1ZPTFVNRV9GQUlMRUQJCQkweDQxCisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX1VORVhQRUNURURfUkVQTEFDRU1FTlQJCTB4NDIKKyNkZWZpbmUgQk1JQ19MQVNUX0ZBSUxVUkVfT0ZGTElORV9FUkFTRQkJCQkweDgwCisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX09GRkxJTkVfVE9PX1NNQUxMCQkJMHg4MQorI2RlZmluZSBCTUlDX0xBU1RfRkFJTFVSRV9PRkZMSU5FX0RSSVZFX1RZUEVfTUlYCQkweDgyCisjZGVmaW5lIEJNSUNfTEFTVF9GQUlMVVJFX09GRkxJTkVfRVJBU0VfQ09NUExFVEUJCTB4ODMKKworCXU4ICAgICBmbGFnczsKKwl1OCAgICAgbW9yZV9mbGFnczsKKwl1OCAgICAgc2NzaV9sdW47ICAgICAgICAgIC8qIFNDU0kgTFVOIGZvciBwaHlzIGRyaXZlICovCisJdTggICAgIHlldF9tb3JlX2ZsYWdzOworCXU4ICAgICBldmVuX21vcmVfZmxhZ3M7CisJX19sZTMyIHNwaV9zcGVlZF9ydWxlczsvKiBTUEkgU3BlZWQgZGF0YTpVbHRyYSBkaXNhYmxlIGRpYWdub3NlICovCisJdTggICAgIHBoeXNfY29ubmVjdG9yWzJdOyAgICAgICAgIC8qIGNvbm5lY3RvciBudW1iZXIgb24gY29udHJvbGxlciAqLworCXU4ICAgICBwaHlzX2JveF9vbl9idXM7ICAvKiBwaHlzIGVuY2xvc3VyZSB0aGlzIGRyaXZlIHJlc2lkZXMgKi8KKwl1OCAgICAgcGh5c19iYXlfaW5fYm94OyAgLyogcGh5cyBkcnYgYmF5IHRoaXMgZHJpdmUgcmVzaWRlcyAqLworCV9fbGUzMiBycG07ICAgICAgICAgICAgICAvKiBEcml2ZSByb3RhdGlvbmFsIHNwZWVkIGluIHJwbSAqLworCXU4ICAgICBkZXZpY2VfdHlwZTsgICAgICAgLyogdHlwZSBvZiBkcml2ZSAqLworCXU4ICAgICBzYXRhX3ZlcnNpb247ICAgICAvKiBvbmx5IHZhbGlkIHdoZW4gZHJpdmVfdHlwZSBpcyBTQVRBICovCisJX19sZTY0IGJpZ190b3RhbF9ibG9ja19jb3VudDsKKwlfX2xlNjQgcmlzX3N0YXJ0aW5nX2xiYTsKKwlfX2xlMzIgcmlzX3NpemU7CisJdTggICAgIHd3aWRbMjBdOworCXU4ICAgICBjb250cm9sbGVyX3BoeV9tYXBbMzJdOworCV9fbGUxNiBwaHlfY291bnQ7CisJdTggICAgIHBoeV9jb25uZWN0ZWRfZGV2X3R5cGVbMjU2XTsKKwl1OCAgICAgcGh5X3RvX2RyaXZlX2JheV9udW1bMjU2XTsKKwlfX2xlMTYgcGh5X3RvX2F0dGFjaGVkX2Rldl9pbmRleFsyNTZdOworCXU4ICAgICBib3hfaW5kZXg7CisJdTggICAgIHJlc2VydmVkOworCV9fbGUxNiBleHRyYV9waHlzaWNhbF9kcml2ZV9mbGFnczsKKyNkZWZpbmUgQk1JQ19QSFlTX0RSSVZFX1NVUFBPUlRTX0dBU19HQVVHRShpZHBoeWRydikgXAorCShpZHBoeWRydi0+ZXh0cmFfcGh5c2ljYWxfZHJpdmVfZmxhZ3MgJiAoMSA8PCAxMCkpCisJdTggICAgIG5lZ290aWF0ZWRfbGlua19yYXRlWzI1Nl07CisJdTggICAgIHBoeV90b19waHlfbWFwWzI1Nl07CisJdTggICAgIHJlZHVuZGFudF9wYXRoX3ByZXNlbnRfbWFwOworCXU4ICAgICByZWR1bmRhbnRfcGF0aF9mYWlsdXJlX21hcDsKKwl1OCAgICAgYWN0aXZlX3BhdGhfbnVtYmVyOworCV9fbGUxNiBhbHRlcm5hdGVfcGF0aHNfcGh5c19jb25uZWN0b3JbOF07CisJdTggICAgIGFsdGVybmF0ZV9wYXRoc19waHlzX2JveF9vbl9wb3J0WzhdOworCXU4ICAgICBtdWx0aV9sdW5fZGV2aWNlX2x1bl9jb3VudDsKKwl1OCAgICAgbWluaW11bV9nb29kX2Z3X3JldmlzaW9uWzhdOworCXU4ICAgICB1bmlxdWVfaW5xdWlyeV9ieXRlc1syMF07CisJdTggICAgIGN1cnJlbnRfdGVtcGVyYXR1cmVfZGVncmVlc0M7CisJdTggICAgIHRlbXBlcmF0dXJlX3RocmVzaG9sZF9kZWdyZWVzQzsKKwl1OCAgICAgbWF4X3RlbXBlcmF0dXJlX2RlZ3JlZXNDOworCXU4ICAgICBsb2dpY2FsX2Jsb2Nrc19wZXJfcGh5c19ibG9ja19leHA7IC8qIHBoeWJsb2Nrc2l6ZSA9IDUxMioyXmV4cCAqLworCV9fbGUxNiBjdXJyZW50X3F1ZXVlX2RlcHRoX2xpbWl0OworCXU4ICAgICBzd2l0Y2hfbmFtZVsxMF07CisJX19sZTE2IHN3aXRjaF9wb3J0OworCXU4ICAgICBhbHRlcm5hdGVfcGF0aHNfc3dpdGNoX25hbWVbNDBdOworCXU4ICAgICBhbHRlcm5hdGVfcGF0aHNfc3dpdGNoX3BvcnRbOF07CisJX19sZTE2IHBvd2VyX29uX2hvdXJzOyAvKiB2YWxpZCBvbmx5IGlmIGdhcyBnYXVnZSBzdXBwb3J0ZWQgKi8KKwlfX2xlMTYgcGVyY2VudF9lbmR1cmFuY2VfdXNlZDsgLyogdmFsaWQgb25seSBpZiBnYXMgZ2F1Z2Ugc3VwcG9ydGVkLiAqLworI2RlZmluZSBCTUlDX1BIWVNfRFJJVkVfU1NEX1dFQVJPVVQoaWRwaHlkcnYpIFwKKwkoKGlkcGh5ZHJ2LT5wZXJjZW50X2VuZHVyYW5jZV91c2VkICYgMHg4MCkgfHwgXAorCSAoaWRwaHlkcnYtPnBlcmNlbnRfZW5kdXJhbmNlX3VzZWQgPiAxMDAwMCkpCisJdTggICAgIGRyaXZlX2F1dGhlbnRpY2F0aW9uOworI2RlZmluZSBCTUlDX1BIWVNfRFJJVkVfQVVUSEVOVElDQVRFRChpZHBoeWRydikgXAorCShpZHBoeWRydi0+ZHJpdmVfYXV0aGVudGljYXRpb24gPT0gMHg4MCkKKwl1OCAgICAgc21hcnRfY2Fycmllcl9hdXRoZW50aWNhdGlvbjsKKyNkZWZpbmUgQk1JQ19TTUFSVF9DQVJSSUVSX0FVVEhFTlRJQ0FUSU9OX1NVUFBPUlRFRChpZHBoeWRydikgXAorCShpZHBoeWRydi0+c21hcnRfY2Fycmllcl9hdXRoZW50aWNhdGlvbiAhPSAweDApCisjZGVmaW5lIEJNSUNfU01BUlRfQ0FSUklFUl9BVVRIRU5USUNBVEVEKGlkcGh5ZHJ2KSBcCisJKGlkcGh5ZHJ2LT5zbWFydF9jYXJyaWVyX2F1dGhlbnRpY2F0aW9uID09IDB4MDEpCisJdTggICAgIHNtYXJ0X2NhcnJpZXJfYXBwX2Z3X3ZlcnNpb247CisJdTggICAgIHNtYXJ0X2NhcnJpZXJfYm9vdGxvYWRlcl9md192ZXJzaW9uOworCXU4ICAgICBlbmNyeXB0aW9uX2tleV9uYW1lWzY0XTsKKwlfX2xlMzIgbWlzY19kcml2ZV9mbGFnczsKKwlfX2xlMTYgZGVrX2luZGV4OworCXU4ICAgICBwYWRkaW5nWzExMl07Cit9OworCiAjcHJhZ21hIHBhY2soKQogI2VuZGlmIC8qIEhQU0FfQ01EX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pbjIwMDAuYyBiL2RyaXZlcnMvc2NzaS9pbjIwMDAuYwppbmRleCBkZGYwNjk0Li4zODgyZDlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaW4yMDAwLmMKKysrIGIvZHJpdmVycy9zY3NpL2luMjAwMC5jCkBAIC0yMjI2LDM2ICsyMjI2LDM2IEBACiAKIAlpZiAoaGQtPnByb2MgJiBQUl9JTkZPKSB7CiAJCXNlcV9wcmludGYobSwgIlxuZGlwX3N3aXRjaD0lMDJ4OiBpcnE9JWQgaW89JTAyeCBmbG9wcHk9JXMgc3luYy9ET1M1PSVzIiwgKGhkLT5kaXBfc3dpdGNoICYgMHg3ZiksIGluc3RhbmNlLT5pcnEsIGhkLT5pb19iYXNlLCAoaGQtPmRpcF9zd2l0Y2ggJiAweDQwKSA/ICJZZXMiIDogIk5vIiwgKGhkLT5kaXBfc3dpdGNoICYgMHgyMCkgPyAiWWVzIiA6ICJObyIpOwotCQlzZXFfcHJpbnRmKG0sICJcbnN5bmNfeGZlcltdID0gICAgICAgIik7CisJCXNlcV9wdXRzKG0sICJcbnN5bmNfeGZlcltdID0gICAgICAgIik7CiAJCWZvciAoeCA9IDA7IHggPCA3OyB4KyspCiAJCQlzZXFfcHJpbnRmKG0sICJcdCUwMngiLCBoZC0+c3luY194ZmVyW3hdKTsKLQkJc2VxX3ByaW50ZihtLCAiXG5zeW5jX3N0YXRbXSA9ICAgICAgICIpOworCQlzZXFfcHV0cyhtLCAiXG5zeW5jX3N0YXRbXSA9ICAgICAgICIpOwogCQlmb3IgKHggPSAwOyB4IDwgNzsgeCsrKQogCQkJc2VxX3ByaW50ZihtLCAiXHQlMDJ4IiwgaGQtPnN5bmNfc3RhdFt4XSk7CiAJfQogI2lmZGVmIFBST0NfU1RBVElTVElDUwogCWlmIChoZC0+cHJvYyAmIFBSX1NUQVRJU1RJQ1MpIHsKLQkJc2VxX3ByaW50ZihtLCAiXG5jb21tYW5kcyBpc3N1ZWQ6ICAgICIpOworCQlzZXFfcHV0cyhtLCAiXG5jb21tYW5kcyBpc3N1ZWQ6ICAgICIpOwogCQlmb3IgKHggPSAwOyB4IDwgNzsgeCsrKQogCQkJc2VxX3ByaW50ZihtLCAiXHQlbGQiLCBoZC0+Y21kX2NudFt4XSk7Ci0JCXNlcV9wcmludGYobSwgIlxuZGlzY29ubmVjdHMgYWxsb3dlZDoiKTsKKwkJc2VxX3B1dHMobSwgIlxuZGlzY29ubmVjdHMgYWxsb3dlZDoiKTsKIAkJZm9yICh4ID0gMDsgeCA8IDc7IHgrKykKIAkJCXNlcV9wcmludGYobSwgIlx0JWxkIiwgaGQtPmRpc2NfYWxsb3dlZF9jbnRbeF0pOwotCQlzZXFfcHJpbnRmKG0sICJcbmRpc2Nvbm5lY3RzIGRvbmU6ICAgIik7CisJCXNlcV9wdXRzKG0sICJcbmRpc2Nvbm5lY3RzIGRvbmU6ICAgIik7CiAJCWZvciAoeCA9IDA7IHggPCA3OyB4KyspCiAJCQlzZXFfcHJpbnRmKG0sICJcdCVsZCIsIGhkLT5kaXNjX2RvbmVfY250W3hdKTsKIAkJc2VxX3ByaW50ZihtLCAiXG5pbnRlcnJ1cHRzOiAgICAgIFx0JWxkIiwgaGQtPmludF9jbnQpOwogCX0KICNlbmRpZgogCWlmIChoZC0+cHJvYyAmIFBSX0NPTk5FQ1RFRCkgewotCQlzZXFfcHJpbnRmKG0sICJcbmNvbm5lY3RlZDogICAgICIpOworCQlzZXFfcHV0cyhtLCAiXG5jb25uZWN0ZWQ6ICAgICAiKTsKIAkJaWYgKGhkLT5jb25uZWN0ZWQpIHsKIAkJCWNtZCA9IChTY3NpX0NtbmQgKikgaGQtPmNvbm5lY3RlZDsKIAkJCXNlcV9wcmludGYobSwgIiAlZDolbGx1KCUwMngpIiwgY21kLT5kZXZpY2UtPmlkLCBjbWQtPmRldmljZS0+bHVuLCBjbWQtPmNtbmRbMF0pOwogCQl9CiAJfQogCWlmIChoZC0+cHJvYyAmIFBSX0lOUFVUUSkgewotCQlzZXFfcHJpbnRmKG0sICJcbmlucHV0X1E6ICAgICAgICIpOworCQlzZXFfcHV0cyhtLCAiXG5pbnB1dF9ROiAgICAgICAiKTsKIAkJY21kID0gKFNjc2lfQ21uZCAqKSBoZC0+aW5wdXRfUTsKIAkJd2hpbGUgKGNtZCkgewogCQkJc2VxX3ByaW50ZihtLCAiICVkOiVsbHUoJTAyeCkiLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZC0+Y21uZFswXSk7CkBAIC0yMjYzLDcgKzIyNjMsNyBAQAogCQl9CiAJfQogCWlmIChoZC0+cHJvYyAmIFBSX0RJU0NRKSB7Ci0JCXNlcV9wcmludGYobSwgIlxuZGlzY29ubmVjdGVkX1E6Iik7CisJCXNlcV9wdXRzKG0sICJcbmRpc2Nvbm5lY3RlZF9ROiIpOwogCQljbWQgPSAoU2NzaV9DbW5kICopIGhkLT5kaXNjb25uZWN0ZWRfUTsKIAkJd2hpbGUgKGNtZCkgewogCQkJc2VxX3ByaW50ZihtLCAiICVkOiVsbHUoJTAyeCkiLCBjbWQtPmRldmljZS0+aWQsIGNtZC0+ZGV2aWNlLT5sdW4sIGNtZC0+Y21uZFswXSk7CkBAIC0yMjczLDcgKzIyNzMsNyBAQAogCWlmIChoZC0+cHJvYyAmIFBSX1RFU1QpIHsKIAkJOwkJLyogaW5zZXJ0IHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbiBoZXJlICovCiAJfQotCXNlcV9wcmludGYobSwgIlxuIik7CisJc2VxX3B1dGMobSwgJ1xuJyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpbnN0YW5jZS0+aG9zdF9sb2NrLCBmbGFncyk7CiAjZW5kaWYJCQkJLyogUFJPQ19JTlRFUkZBQ0UgKi8KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pcHMuYyBiL2RyaXZlcnMvc2NzaS9pcHMuYwppbmRleCBlNWMyODQzLi43NTQyZjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaXBzLmMKKysrIGIvZHJpdmVycy9zY3NpL2lwcy5jCkBAIC0yMDM4LDE1ICsyMDM4LDE0IEBACiB7CiAJTUVUSE9EX1RSQUNFKCJpcHNfaG9zdF9pbmZvIiwgMSk7CiAKLQlzZXFfcHJpbnRmKG0sICJcbklCTSBTZXJ2ZVJBSUQgR2VuZXJhbCBJbmZvcm1hdGlvbjpcblxuIik7CisJc2VxX3B1dHMobSwgIlxuSUJNIFNlcnZlUkFJRCBHZW5lcmFsIEluZm9ybWF0aW9uOlxuXG4iKTsKIAogCWlmICgobGUzMl90b19jcHUoaGEtPm52cmFtLT5zaWduYXR1cmUpID09IElQU19OVlJBTV9QNV9TSUcpICYmCiAJICAgIChsZTE2X3RvX2NwdShoYS0+bnZyYW0tPmFkYXB0ZXJfdHlwZSkgIT0gMCkpCiAJCXNlcV9wcmludGYobSwgIlx0Q29udHJvbGxlciBUeXBlICAgICAgICAgICAgICAgICAgIDogJXNcbiIsCiAJCQkgIGlwc19hZGFwdGVyX25hbWVbaGEtPmFkX3R5cGUgLSAxXSk7CiAJZWxzZQotCQlzZXFfcHJpbnRmKG0sCi0JCQkgICJcdENvbnRyb2xsZXIgVHlwZSAgICAgICAgICAgICAgICAgICA6IFVua25vd25cbiIpOworCQlzZXFfcHV0cyhtLCAiXHRDb250cm9sbGVyIFR5cGUgICAgICAgICAgICAgICAgICAgOiBVbmtub3duXG4iKTsKIAogCWlmIChoYS0+aW9fYWRkcikKIAkJc2VxX3ByaW50ZihtLApAQCAtMjEzOCw3ICsyMTM3LDcgQEAKIAlzZXFfcHJpbnRmKG0sICJcdEN1cnJlbnQgQWN0aXZlIFBUIENvbW1hbmRzICAgICAgICA6ICVkXG4iLAogCQkgIGhhLT5udW1faW9jdGwpOwogCi0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKaW5kZXggNGMyNTQ4NS4uYzY2MDg4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCkBAIC0yMjI1LDYgKzIyMjUsMTUgQEAKIAlpZiAoKHBoYmEtPnNsaTNfb3B0aW9ucyAmIExQRkNfU0xJM19OUElWX0VOQUJMRUQpICYmCiAJICAgICEodnBvcnQtPmZjX2ZsYWcgJiBGQ19SU0NOX01PREUpICYmCiAJICAgIChwaGJhLT5zbGlfcmV2IDwgTFBGQ19TTElfUkVWNCkpIHsKKwkJLyogVGhlIEFESVNDcyBhcmUgY29tcGxldGUuICBEb2Vzbid0IG1hdHRlciBpZiB0aGV5CisJCSAqIHN1Y2NlZWRlZCBvciBmYWlsZWQgYmVjYXVzZSB0aGUgQURJU0MgY29tcGxldGlvbgorCQkgKiByb3V0aW5lIGd1YXJhbnRlZXMgdG8gY2FsbCB0aGUgc3RhdGUgbWFjaGluZSBhbmQKKwkJICogdGhlIFJQSSBpcyBlaXRoZXIgdW5yZWdpc3RlcmVkIChmYWlsZWQgQURJU0MgcmVzcG9uc2UpCisJCSAqIG9yIHRoZSBSUEkgaXMgc3RpbGwgdmFsaWQgYW5kIHRoZSBub2RlIGlzIG1hcmtlZAorCQkgKiBtYXBwZWQgZm9yIGEgdGFyZ2V0LiAgVGhlIGV4Y2hhbmdlcyBzaG91bGQgYmUgaW4gdGhlCisJCSAqIGNvcnJlY3Qgc3RhdGUuIFRoaXMgY29kZSBpcyBzcGVjaWZpYyB0byBTTEkzLgorCQkgKi8KKwkJbHBmY19pc3N1ZV9jbGVhcl9sYShwaGJhLCB2cG9ydCk7CiAJCWxwZmNfaXNzdWVfcmVnX3ZwaShwaGJhLCB2cG9ydCk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jCmluZGV4IDI0ODUyNTUuLmJjN2IzNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jCkBAIC0yMjQwLDcgKzIyNDAsNyBAQAogCQlnb3RvIGZyZWVfcGRldjsKIAogCWlmKCBtZWdhX2FkYXBpbnEoYWRhcHRlciwgZG1hX2hhbmRsZSkgIT0gMCApIHsKLQkJc2VxX3ByaW50ZihtLCAiQWRhcHRlciBpbnF1aXJ5IGZhaWxlZC5cbiIpOworCQlzZXFfcHV0cyhtLCAiQWRhcHRlciBpbnF1aXJ5IGZhaWxlZC5cbiIpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZWdhcmFpZDogaW5xdWlyeSBmYWlsZWQuXG4iKTsKIAkJZ290byBmcmVlX2lucXVpcnk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhcy5oCmluZGV4IDBkNDRkOTEuLjE0ZTVjN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXMuaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzLmgKQEAgLTM1LDcgKzM1LDcgQEAKIC8qCiAgKiBNZWdhUkFJRCBTQVMgRHJpdmVyIG1ldGEgZGF0YQogICovCi0jZGVmaW5lIE1FR0FTQVNfVkVSU0lPTgkJCQkiMDYuODA1LjA2LjAxLXJjMSIKKyNkZWZpbmUgTUVHQVNBU19WRVJTSU9OCQkJCSIwNi44MDYuMDguMDAtcmMxIgogCiAvKgogICogRGV2aWNlIElEcwpAQCAtOTY5LDcgKzk2OSwyMCBAQAogCiAJc3RydWN0IHsKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKLQkJdTMyICAgICByZXNlcnZlZDoyNTsKKwkJdTMyICAgICByZXNlcnZlZDoxMjsKKwkJdTMyICAgICBkaXNjYXJkQ2FjaGVEdXJpbmdMRERlbGV0ZToxOworCQl1MzIgICAgIHN1cHBvcnRTZWN1cml0eW9uSkJPRDoxOworCQl1MzIgICAgIHN1cHBvcnRDYWNoZUJ5cGFzc01vZGVzOjE7CisJCXUzMiAgICAgc3VwcG9ydERpc2FibGVTRVNNb25pdG9yaW5nOjE7CisJCXUzMiAgICAgc3VwcG9ydEZvcmNlRmxhc2g6MTsKKwkJdTMyICAgICBzdXBwb3J0TlZEUkFNOjE7CisJCXUzMiAgICAgc3VwcG9ydERydkFjdGl2aXR5TEVEU2V0dGluZzoxOworCQl1MzIgICAgIHN1cHBvcnRBbGxvd2VkT3BzZm9yRHJ2UmVtb3ZhbDoxOworCQl1MzIgICAgIHN1cHBvcnRIT1FSZWJ1aWxkOjE7CisJCXUzMiAgICAgc3VwcG9ydEZvcmNlVG81MTJlOjE7CisJCXUzMiAgICAgc3VwcG9ydE5WQ2FjaGVFcmFzZToxOworCQl1MzIgICAgIHN1cHBvcnREZWJ1Z1F1ZXVlOjE7CisJCXUzMiAgICAgc3VwcG9ydFN3Wm9uZToxOwogCQl1MzIgICAgIHN1cHBvcnRDcmFzaER1bXA6MTsKIAkJdTMyICAgICBzdXBwb3J0TWF4RXh0TERzOjE7CiAJCXUzMiAgICAgc3VwcG9ydFQxMFJlYnVpbGRBc3Npc3Q6MTsKQEAgLTk4MSw5ICs5OTQsMjIgQEAKIAkJdTMyICAgICBzdXBwb3J0VGhlcm1hbFBvbGxJbnRlcnZhbDoxOwogCQl1MzIgICAgIHN1cHBvcnREaXNhYmxlSW1tZWRpYXRlSU86MTsKIAkJdTMyICAgICBzdXBwb3J0VDEwUmVidWlsZEFzc2lzdDoxOwotCQl1MzIgICAgIHN1cHBvcnRNYXhFeHRMRHM6MTsKLQkJdTMyICAgICBzdXBwb3J0Q3Jhc2hEdW1wOjE7Ci0JCXUzMiAgICAgcmVzZXJ2ZWQ6MjU7CisJCXUzMglzdXBwb3J0TWF4RXh0TERzOjE7CisJCXUzMglzdXBwb3J0Q3Jhc2hEdW1wOjE7CisJCXUzMiAgICAgc3VwcG9ydFN3Wm9uZToxOworCQl1MzIgICAgIHN1cHBvcnREZWJ1Z1F1ZXVlOjE7CisJCXUzMiAgICAgc3VwcG9ydE5WQ2FjaGVFcmFzZToxOworCQl1MzIgICAgIHN1cHBvcnRGb3JjZVRvNTEyZToxOworCQl1MzIgICAgIHN1cHBvcnRIT1FSZWJ1aWxkOjE7CisJCXUzMiAgICAgc3VwcG9ydEFsbG93ZWRPcHNmb3JEcnZSZW1vdmFsOjE7CisJCXUzMiAgICAgc3VwcG9ydERydkFjdGl2aXR5TEVEU2V0dGluZzoxOworCQl1MzIgICAgIHN1cHBvcnROVkRSQU06MTsKKwkJdTMyICAgICBzdXBwb3J0Rm9yY2VGbGFzaDoxOworCQl1MzIgICAgIHN1cHBvcnREaXNhYmxlU0VTTW9uaXRvcmluZzoxOworCQl1MzIgICAgIHN1cHBvcnRDYWNoZUJ5cGFzc01vZGVzOjE7CisJCXUzMiAgICAgc3VwcG9ydFNlY3VyaXR5b25KQk9EOjE7CisJCXUzMiAgICAgZGlzY2FyZENhY2hlRHVyaW5nTEREZWxldGU6MTsKKwkJdTMyICAgICByZXNlcnZlZDoxMjsKICNlbmRpZgogCX0gYWRhcHRlck9wZXJhdGlvbnMzOwogCkBAIC0xMDIyLDYgKzEwNDgsMTMgQEAKIAlNRklfTVBUX0FUVEFDSEVEID0gMiwKIH07CiAKK2VudW0gTVJfU0NTSV9DTURfVFlQRSB7CisJUkVBRF9XUklURV9MRElPID0gMCwKKwlOT05fUkVBRF9XUklURV9MRElPID0gMSwKKwlSRUFEX1dSSVRFX1NZU1BESU8gPSAyLAorCU5PTl9SRUFEX1dSSVRFX1NZU1BESU8gPSAzLAorfTsKKwogLyogRnJhbWUgVHlwZSAqLwogI2RlZmluZSBJT19GUkFNRQkJCQkwCiAjZGVmaW5lIFBUSFJVX0ZSQU1FCQkJCTEKQEAgLTEwNDksNiArMTA4Miw4IEBACiAgKi8KICNkZWZpbmUgTUVHQVNBU19JTlRfQ01EUwkJCTMyCiAjZGVmaW5lIE1FR0FTQVNfU0tJTk5ZX0lOVF9DTURTCQkJNQorI2RlZmluZSBNRUdBU0FTX0ZVU0lPTl9JTlRFUk5BTF9DTURTCQk1CisjZGVmaW5lIE1FR0FTQVNfRlVTSU9OX0lPQ1RMX0NNRFMJCTMKIAogI2RlZmluZSBNRUdBU0FTX01BWF9NU0lYX1FVRVVFUwkJCTEyOAogLyoKQEAgLTExOTQsMTkgKzEyMjksMjMgQEAKIHR5cGVkZWYgdW5pb24gX01GSV9DQVBBQklMSVRJRVMgewogCXN0cnVjdCB7CiAjaWYgICBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKLQkJdTMyICAgICByZXNlcnZlZDoyNzsKKwkJdTMyICAgICByZXNlcnZlZDoyNTsKKwkJdTMyICAgICBzZWN1cml0eV9wcm90b2NvbF9jbWRzX2Z3OjE7CisJCXUzMiAgICAgc3VwcG9ydF9jb3JlX2FmZmluaXR5OjE7CiAJCXUzMiAgICAgc3VwcG9ydF9uZHJpdmVfcjFfbGI6MTsKIAkJdTMyCXN1cHBvcnRfbWF4XzI1NWxkczoxOwotCQl1MzIJcmVzZXJ2ZWQxOjE7CisJCXUzMglzdXBwb3J0X2Zhc3RwYXRoX3diOjE7CiAJCXUzMiAgICAgc3VwcG9ydF9hZGRpdGlvbmFsX21zaXg6MTsKIAkJdTMyICAgICBzdXBwb3J0X2ZwX3JlbW90ZV9sdW46MTsKICNlbHNlCiAJCXUzMiAgICAgc3VwcG9ydF9mcF9yZW1vdGVfbHVuOjE7CiAJCXUzMiAgICAgc3VwcG9ydF9hZGRpdGlvbmFsX21zaXg6MTsKLQkJdTMyCXJlc2VydmVkMToxOworCQl1MzIJc3VwcG9ydF9mYXN0cGF0aF93YjoxOwogCQl1MzIJc3VwcG9ydF9tYXhfMjU1bGRzOjE7CiAJCXUzMiAgICAgc3VwcG9ydF9uZHJpdmVfcjFfbGI6MTsKLQkJdTMyICAgICByZXNlcnZlZDoyNzsKKwkJdTMyICAgICBzdXBwb3J0X2NvcmVfYWZmaW5pdHk6MTsKKwkJdTMyICAgICBzZWN1cml0eV9wcm90b2NvbF9jbWRzX2Z3OjE7CisJCXUzMiAgICAgcmVzZXJ2ZWQ6MjU7CiAjZW5kaWYKIAl9IG1maV9jYXBhYmlsaXRpZXM7CiAJdTMyICAgICByZWc7CkBAIC0xNjM4LDIwICsxNjc3LDIwIEBACiAJdTMyIGNyYXNoX2R1bXBfZndfc3VwcG9ydDsKIAl1MzIgY3Jhc2hfZHVtcF9kcnZfc3VwcG9ydDsKIAl1MzIgY3Jhc2hfZHVtcF9hcHBfc3VwcG9ydDsKKwl1MzIgc2VjdXJlX2pib2Rfc3VwcG9ydDsKIAlzcGlubG9ja190IGNyYXNoZHVtcF9sb2NrOwogCiAJc3RydWN0IG1lZ2FzYXNfcmVnaXN0ZXJfc2V0IF9faW9tZW0gKnJlZ19zZXQ7CiAJdTMyICpyZXBseV9wb3N0X2hvc3RfaW5kZXhfYWRkcltNUl9NQVhfTVNJWF9SRUdfQVJSQVldOwogCXN0cnVjdCBtZWdhc2FzX3BkX2xpc3QgICAgICAgICAgcGRfbGlzdFtNRUdBU0FTX01BWF9QRF07CiAJc3RydWN0IG1lZ2FzYXNfcGRfbGlzdCAgICAgICAgICBsb2NhbF9wZF9saXN0W01FR0FTQVNfTUFYX1BEXTsKLQl1OCAgICAgbGRfaWRzW01FR0FTQVNfTUFYX0xEX0lEU107CisJdTggbGRfaWRzW01FR0FTQVNfTUFYX0xEX0lEU107CiAJczggaW5pdF9pZDsKIAogCXUxNiBtYXhfbnVtX3NnZTsKIAl1MTYgbWF4X2Z3X2NtZHM7Ci0JLyogRm9yIEZ1c2lvbiBpdHMgbnVtIElPQ1RMIGNtZHMsIGZvciBvdGhlcnMgTUZJIGJhc2VkIGl0cwotCSAgIG1heF9md19jbWRzICovCiAJdTE2IG1heF9tZmlfY21kczsKKwl1MTYgbWF4X3Njc2lfY21kczsKIAl1MzIgbWF4X3NlY3RvcnNfcGVyX3JlcTsKIAlzdHJ1Y3QgbWVnYXNhc19hZW5fZXZlbnQgKmV2OwogCkBAIC0xNzI3LDcgKzE3NjYsNyBAQAogCXU4IHJlcXVlc3RvcklkOwogCWNoYXIgUGxhc21hRlcxMTE7CiAJY2hhciBtcGlvOwotCWludCB0aHJvdHRsZXF1ZXVlZGVwdGg7CisJdTE2IHRocm90dGxlcXVldWVkZXB0aDsKIAl1OCBtYXNrX2ludGVycnVwdHM7CiAJdTggaXNfaW1yOwogfTsKQEAgLTE5NDYsNSArMTk4NSw2IEBACiAKIHZvaWQgbWVnYXNhc19yZXR1cm5fbWZpX21wdF9wdGhyKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKIAlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZF9tZmksIHN0cnVjdCBtZWdhc2FzX2NtZF9mdXNpb24gKmNtZF9mdXNpb24pOworaW50IG1lZ2FzYXNfY21kX3R5cGUoc3RydWN0IHNjc2lfY21uZCAqY21kKTsKIAogI2VuZGlmCQkJCS8qTFNJX01FR0FSQUlEX1NBU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Jhc2UuYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfYmFzZS5jCmluZGV4IGZmMjgzZDIuLjg5MDYzN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfYmFzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfYmFzZS5jCkBAIC03OCw3ICs3OCw3IEBACiBtb2R1bGVfcGFyYW0oYWxsb3dfdmZfaW9jdGxzLCBpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhhbGxvd192Zl9pb2N0bHMsICJBbGxvdyBpb2N0bHMgaW4gU1ItSU9WIFZGIG1vZGUuIERlZmF1bHQ6IDAiKTsKIAotc3RhdGljIGludCB0aHJvdHRsZXF1ZXVlZGVwdGggPSBNRUdBU0FTX1RIUk9UVExFX1FVRVVFX0RFUFRIOworc3RhdGljIHVuc2lnbmVkIGludCB0aHJvdHRsZXF1ZXVlZGVwdGggPSBNRUdBU0FTX1RIUk9UVExFX1FVRVVFX0RFUFRIOwogbW9kdWxlX3BhcmFtKHRocm90dGxlcXVldWVkZXB0aCwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0ModGhyb3R0bGVxdWV1ZWRlcHRoLAogCSJBZGFwdGVyIHF1ZXVlIGRlcHRoIHdoZW4gdGhyb3R0bGVkIGR1ZSB0byBJL08gdGltZW91dC4gRGVmYXVsdDogMTYiKTsKQEAgLTE0MTcsMTYgKzE0MTcsMTUgQEAKIH0KIAogLyoqCi0gKiBtZWdhc2FzX2lzX2xkaW8gLQkJQ2hlY2tzIGlmIHRoZSBjbWQgaXMgZm9yIGxvZ2ljYWwgZHJpdmUKKyAqIG1lZ2FzYXNfY21kX3R5cGUgLQkJQ2hlY2tzIGlmIHRoZSBjbWQgaXMgZm9yIGxvZ2ljYWwgZHJpdmUvc3lzUEQKKyAqCQkJCWFuZCB3aGV0aGVyIGl0J3MgUlcgb3Igbm9uIFJXCiAgKiBAc2NtZDoJCQlTQ1NJIGNvbW1hbmQKICAqCi0gKiBDYWxsZWQgYnkgbWVnYXNhc19xdWV1ZV9jb21tYW5kIHRvIGZpbmQgb3V0IGlmIHRoZSBjb21tYW5kIHRvIGJlIHF1ZXVlZAotICogaXMgYSBsb2dpY2FsIGRyaXZlIGNvbW1hbmQKICAqLwotaW5saW5lIGludCBtZWdhc2FzX2lzX2xkaW8oc3RydWN0IHNjc2lfY21uZCAqY21kKQoraW5saW5lIGludCBtZWdhc2FzX2NtZF90eXBlKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKLQlpZiAoIU1FR0FTQVNfSVNfTE9HSUNBTChjbWQpKQotCQlyZXR1cm4gMDsKKwlpbnQgcmV0OworCiAJc3dpdGNoIChjbWQtPmNtbmRbMF0pIHsKIAljYXNlIFJFQURfMTA6CiAJY2FzZSBXUklURV8xMDoKQEAgLTE0MzYsMTAgKzE0MzUsMTQgQEAKIAljYXNlIFdSSVRFXzY6CiAJY2FzZSBSRUFEXzE2OgogCWNhc2UgV1JJVEVfMTY6Ci0JCXJldHVybiAxOworCQlyZXQgPSAoTUVHQVNBU19JU19MT0dJQ0FMKGNtZCkpID8KKwkJCVJFQURfV1JJVEVfTERJTyA6IFJFQURfV1JJVEVfU1lTUERJTzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmV0dXJuIDA7CisJCXJldCA9IChNRUdBU0FTX0lTX0xPR0lDQUwoY21kKSkgPworCQkJTk9OX1JFQURfV1JJVEVfTERJTyA6IE5PTl9SRUFEX1dSSVRFX1NZU1BESU87CiAJfQorCXJldHVybiByZXQ7CiB9CiAKICAvKioKQEAgLTE0NzEsNyArMTQ3NCw3IEBACiAJCWlmKCFjbWQtPnNjbWQpCiAJCQljb250aW51ZTsKIAkJcHJpbnRrKEtFUk5fRVJSICJtZWdhc2FzWyVkXTogRnJhbWUgYWRkciA6MHglMDhseCA6ICIsaW5zdGFuY2UtPmhvc3QtPmhvc3Rfbm8sKHVuc2lnbmVkIGxvbmcpY21kLT5mcmFtZV9waHlzX2FkZHIpOwotCQlpZiAobWVnYXNhc19pc19sZGlvKGNtZC0+c2NtZCkpeworCQlpZiAobWVnYXNhc19jbWRfdHlwZShjbWQtPnNjbWQpID09IFJFQURfV1JJVEVfTERJTykgewogCQkJbGRpbyA9IChzdHJ1Y3QgbWVnYXNhc19pb19mcmFtZSAqKWNtZC0+ZnJhbWU7CiAJCQltZmlfc2dsID0gJmxkaW8tPnNnbDsKIAkJCXNnY291bnQgPSBsZGlvLT5zZ2VfY291bnQ7CkBAIC0xNTMxLDcgKzE1MzQsNyBAQAogCS8qCiAJICogTG9naWNhbCBkcml2ZSBjb21tYW5kCiAJICovCi0JaWYgKG1lZ2FzYXNfaXNfbGRpbyhzY21kKSkKKwlpZiAobWVnYXNhc19jbWRfdHlwZShzY21kKSA9PSBSRUFEX1dSSVRFX0xESU8pCiAJCWZyYW1lX2NvdW50ID0gbWVnYXNhc19idWlsZF9sZGlvKGluc3RhbmNlLCBzY21kLCBjbWQpOwogCWVsc2UKIAkJZnJhbWVfY291bnQgPSBtZWdhc2FzX2J1aWxkX2RjZGIoaW5zdGFuY2UsIHNjbWQsIGNtZCk7CkBAIC0xNjg5LDIyICsxNjkyLDY2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisqIG1lZ2FzYXNfY29tcGxldGVfb3V0c3RhbmRpbmdfaW9jdGxzIC0gQ29tcGxldGUgb3V0c3RhbmRpbmcgaW9jdGxzIGFmdGVyIGEKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraWxsIGFkYXB0ZXIKKyogQGluc3RhbmNlOgkJCQlBZGFwdGVyIHNvZnQgc3RhdGUKKyoKKyovCit2b2lkIG1lZ2FzYXNfY29tcGxldGVfb3V0c3RhbmRpbmdfaW9jdGxzKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZF9tZmk7CisJc3RydWN0IG1lZ2FzYXNfY21kX2Z1c2lvbiAqY21kX2Z1c2lvbjsKKwlzdHJ1Y3QgZnVzaW9uX2NvbnRleHQgKmZ1c2lvbiA9IGluc3RhbmNlLT5jdHJsX2NvbnRleHQ7CisKKwkvKiBGaW5kIGFsbCBvdXRzdGFuZGluZyBpb2N0bHMgKi8KKwlpZiAoZnVzaW9uKSB7CisJCWZvciAoaSA9IDA7IGkgPCBpbnN0YW5jZS0+bWF4X2Z3X2NtZHM7IGkrKykgeworCQkJY21kX2Z1c2lvbiA9IGZ1c2lvbi0+Y21kX2xpc3RbaV07CisJCQlpZiAoY21kX2Z1c2lvbi0+c3luY19jbWRfaWR4ICE9ICh1MzIpVUxPTkdfTUFYKSB7CisJCQkJY21kX21maSA9IGluc3RhbmNlLT5jbWRfbGlzdFtjbWRfZnVzaW9uLT5zeW5jX2NtZF9pZHhdOworCQkJCWlmIChjbWRfbWZpLT5zeW5jX2NtZCAmJgorCQkJCQljbWRfbWZpLT5mcmFtZS0+aGRyLmNtZCAhPSBNRklfQ01EX0FCT1JUKQorCQkJCQltZWdhc2FzX2NvbXBsZXRlX2NtZChpbnN0YW5jZSwKKwkJCQkJCQkgICAgIGNtZF9tZmksIERJRF9PSyk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgaW5zdGFuY2UtPm1heF9md19jbWRzOyBpKyspIHsKKwkJCWNtZF9tZmkgPSBpbnN0YW5jZS0+Y21kX2xpc3RbaV07CisJCQlpZiAoY21kX21maS0+c3luY19jbWQgJiYgY21kX21maS0+ZnJhbWUtPmhkci5jbWQgIT0KKwkJCQlNRklfQ01EX0FCT1JUKQorCQkJCW1lZ2FzYXNfY29tcGxldGVfY21kKGluc3RhbmNlLCBjbWRfbWZpLCBESURfT0spOworCQl9CisJfQorfQorCisKIHZvaWQgbWVnYXJhaWRfc2FzX2tpbGxfaGJhKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSkKIHsKKwkvKiBTZXQgY3JpdGljYWwgZXJyb3IgdG8gYmxvY2sgSS9PICYgaW9jdGxzIGluIGNhc2UgY2FsbGVyIGRpZG4ndCAqLworCWluc3RhbmNlLT5hZHByZWNvdmVyeSA9IE1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1I7CisJLyogV2FpdCAxIHNlY29uZCB0byBlbnN1cmUgSU8gb3IgaW9jdGxzIGluIGJ1aWxkIGhhdmUgcG9zdGVkICovCisJbXNsZWVwKDEwMDApOwogCWlmICgoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDczU0tJTk5ZKSB8fAotCSAgICAoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMwMDcxU0tJTk5ZKSB8fAotCSAgICAoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0xTSV9GVVNJT04pIHx8Ci0JICAgIChpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1BMQVNNQSkgfHwKLQkgICAgKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfSU5WQURFUikgfHwKLQkgICAgKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfRlVSWSkpIHsKLQkJd3JpdGVsKE1GSV9TVE9QX0FEUCwgJmluc3RhbmNlLT5yZWdfc2V0LT5kb29yYmVsbCk7CisJCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX1NBUzAwNzFTS0lOTlkpIHx8CisJCShpbnN0YW5jZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTFNJX0ZVU0lPTikgfHwKKwkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfUExBU01BKSB8fAorCQkoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0xTSV9JTlZBREVSKSB8fAorCQkoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0xTSV9GVVJZKSkgeworCQl3cml0ZWwoTUZJX1NUT1BfQURQLAorCQkJJmluc3RhbmNlLT5yZWdfc2V0LT5kb29yYmVsbCk7CiAJCS8qIEZsdXNoICovCiAJCXJlYWRsKCZpbnN0YW5jZS0+cmVnX3NldC0+ZG9vcmJlbGwpOwogCQlpZiAoaW5zdGFuY2UtPm1waW8gJiYgaW5zdGFuY2UtPnJlcXVlc3RvcklkKQogCQkJbWVtc2V0KGluc3RhbmNlLT5sZF9pZHMsIDB4ZmYsIE1FR0FTQVNfTUFYX0xEX0lEUyk7CiAJfSBlbHNlIHsKLQkJd3JpdGVsKE1GSV9TVE9QX0FEUCwgJmluc3RhbmNlLT5yZWdfc2V0LT5pbmJvdW5kX2Rvb3JiZWxsKTsKKwkJd3JpdGVsKE1GSV9TVE9QX0FEUCwKKwkJCSZpbnN0YW5jZS0+cmVnX3NldC0+aW5ib3VuZF9kb29yYmVsbCk7CiAJfQorCS8qIENvbXBsZXRlIG91dHN0YW5kaW5nIGlvY3RscyB3aGVuIGFkYXB0ZXIgaXMga2lsbGVkICovCisJbWVnYXNhc19jb21wbGV0ZV9vdXRzdGFuZGluZ19pb2N0bHMoaW5zdGFuY2UpOwogfQogCiAgLyoqCkBAIC0xNzE3LDYgKzE3NjQsNyBAQAogbWVnYXNhc19jaGVja19hbmRfcmVzdG9yZV9xdWV1ZV9kZXB0aChzdHJ1Y3QgbWVnYXNhc19pbnN0YW5jZSAqaW5zdGFuY2UpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCWlmIChpbnN0YW5jZS0+ZmxhZyAmIE1FR0FTQVNfRldfQlVTWQogCSAgICAmJiB0aW1lX2FmdGVyKGppZmZpZXMsIGluc3RhbmNlLT5sYXN0X3RpbWUgKyA1ICogSFopCiAJICAgICYmIGF0b21pY19yZWFkKCZpbnN0YW5jZS0+Zndfb3V0c3RhbmRpbmcpIDwKQEAgLTE3MjQsMTMgKzE3NzIsOCBAQAogCiAJCXNwaW5fbG9ja19pcnFzYXZlKGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJaW5zdGFuY2UtPmZsYWcgJj0gfk1FR0FTQVNfRldfQlVTWTsKLQkJaWYgKGluc3RhbmNlLT5pc19pbXIpIHsKLQkJCWluc3RhbmNlLT5ob3N0LT5jYW5fcXVldWUgPQotCQkJCWluc3RhbmNlLT5tYXhfZndfY21kcyAtIE1FR0FTQVNfU0tJTk5ZX0lOVF9DTURTOwotCQl9IGVsc2UKLQkJCWluc3RhbmNlLT5ob3N0LT5jYW5fcXVldWUgPQotCQkJCWluc3RhbmNlLT5tYXhfZndfY21kcyAtIE1FR0FTQVNfSU5UX0NNRFM7CiAKKwkJaW5zdGFuY2UtPmhvc3QtPmNhbl9xdWV1ZSA9IGluc3RhbmNlLT5tYXhfc2NzaV9jbWRzOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGluc3RhbmNlLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAl9CiB9CkBAIC0zMDI4LDEwICszMDcxLDkgQEAKIAkJCQkJIndhcyB0cmllZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgcmVzZXQuIgogCQkJCQkiU2h1dHRpbmcgZG93biB0aGUgSEJBXG4iLAogCQkJCQljbWQsIGNtZC0+c2NtZCwgY21kLT5zeW5jX2NtZCk7CisJCQkJaW5zdGFuY2UtPmluc3RhbmNldC0+ZGlzYWJsZV9pbnRyKGluc3RhbmNlKTsKKwkJCQlhdG9taWNfc2V0KCZpbnN0YW5jZS0+ZndfcmVzZXRfbm9fcGNpX2FjY2VzcywgMSk7CiAJCQkJbWVnYXJhaWRfc2FzX2tpbGxfaGJhKGluc3RhbmNlKTsKLQotCQkJCWluc3RhbmNlLT5hZHByZWNvdmVyeSA9Ci0JCQkJCQlNRUdBU0FTX0hXX0NSSVRJQ0FMX0VSUk9SOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfQpAQCAtMzE2NSw4ICszMjA3LDggQEAKIAkJaWYgKG1lZ2FzYXNfdHJhbnNpdGlvbl90b19yZWFkeShpbnN0YW5jZSwgMSkpIHsKIAkJCXByaW50ayhLRVJOX05PVElDRSAibWVnYXJhaWRfc2FzOmFkYXB0ZXIgbm90IHJlYWR5XG4iKTsKIAorCQkJYXRvbWljX3NldCgmaW5zdGFuY2UtPmZ3X3Jlc2V0X25vX3BjaV9hY2Nlc3MsIDEpOwogCQkJbWVnYXJhaWRfc2FzX2tpbGxfaGJhKGluc3RhbmNlKTsKLQkJCWluc3RhbmNlLT5hZHByZWNvdmVyeQk9IE1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1I7CiAJCQlyZXR1cm4gOwogCQl9CiAKQEAgLTM1NDcsNyArMzU4OSw2IEBACiAJaW50IGk7CiAJdTMyIG1heF9jbWQ7CiAJdTMyIHNnZV9zejsKLQl1MzIgc2dsX3N6OwogCXUzMiB0b3RhbF9zejsKIAl1MzIgZnJhbWVfY291bnQ7CiAJc3RydWN0IG1lZ2FzYXNfY21kICpjbWQ7CkBAIC0zNTY2LDI0ICszNjA3LDIzIEBACiAJfQogCiAJLyoKLQkgKiBDYWxjdWxhdGVkIHRoZSBudW1iZXIgb2YgNjRieXRlIGZyYW1lcyByZXF1aXJlZCBmb3IgU0dMCisJICogRm9yIE1GSSBjb250cm9sbGVycy4KKwkgKiBtYXhfbnVtX3NnZSA9IDYwCisJICogbWF4X3NnZV9zeiAgPSAxNiBieXRlIChzaXplb2YgbWVnYXNhc19zZ2Vfc2tpbm55KQorCSAqIFRvdGFsIDk2MCBieXRlICgxNSBNRkkgZnJhbWUgb2YgNjQgYnl0ZSkKKwkgKgorCSAqIEZ1c2lvbiBhZGFwdGVyIHJlcXVpcmUgb25seSAzIGV4dHJhIGZyYW1lLgorCSAqIG1heF9udW1fc2dlID0gMTYgKGRlZmluZWQgYXMgTUFYX0lPQ1RMX1NHRSkKKwkgKiBtYXhfc2dlX3N6ICA9IDEyIGJ5dGUgKHNpemVvZiAgbWVnYXNhc19zZ2U2NCkKKwkgKiBUb3RhbCAxOTIgYnl0ZSAoMyBNRkkgZnJhbWUgb2YgNjQgYnl0ZSkKIAkgKi8KLQlzZ2xfc3ogPSBzZ2Vfc3ogKiBpbnN0YW5jZS0+bWF4X251bV9zZ2U7Ci0JZnJhbWVfY291bnQgPSAoc2dsX3N6ICsgTUVHQU1GSV9GUkFNRV9TSVpFIC0gMSkgLyBNRUdBTUZJX0ZSQU1FX1NJWkU7Ci0JZnJhbWVfY291bnQgPSAxNTsKLQotCS8qCi0JICogV2UgbmVlZCBvbmUgZXh0cmEgZnJhbWUgZm9yIHRoZSBNRkkgY29tbWFuZAotCSAqLwotCWZyYW1lX2NvdW50Kys7Ci0KKwlmcmFtZV9jb3VudCA9IGluc3RhbmNlLT5jdHJsX2NvbnRleHQgPyAoMyArIDEpIDogKDE1ICsgMSk7CiAJdG90YWxfc3ogPSBNRUdBTUZJX0ZSQU1FX1NJWkUgKiBmcmFtZV9jb3VudDsKIAkvKgogCSAqIFVzZSBETUEgcG9vbCBmYWNpbGl0eSBwcm92aWRlZCBieSBQQ0kgbGF5ZXIKIAkgKi8KIAlpbnN0YW5jZS0+ZnJhbWVfZG1hX3Bvb2wgPSBwY2lfcG9vbF9jcmVhdGUoIm1lZ2FzYXMgZnJhbWUgcG9vbCIsCi0JCQkJCQkgICBpbnN0YW5jZS0+cGRldiwgdG90YWxfc3osIDY0LAotCQkJCQkJICAgMCk7CisJCQkJCWluc3RhbmNlLT5wZGV2LCB0b3RhbF9zeiwgMjU2LCAwKTsKIAogCWlmICghaW5zdGFuY2UtPmZyYW1lX2RtYV9wb29sKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJtZWdhc2FzOiBmYWlsZWQgdG8gc2V0dXAgZnJhbWUgcG9vbFxuIik7CkBAIC00NjMxLDI4ICs0NjcxLDQ4IEBACiAJCQkJaW5zdGFuY2UtPmNyYXNoX2R1bXBfaCk7CiAJCWluc3RhbmNlLT5jcmFzaF9kdW1wX2J1ZiA9IE5VTEw7CiAJfQorCisJaW5zdGFuY2UtPnNlY3VyZV9qYm9kX3N1cHBvcnQgPQorCQljdHJsX2luZm8tPmFkYXB0ZXJPcGVyYXRpb25zMy5zdXBwb3J0U2VjdXJpdHlvbkpCT0Q7CisJaWYgKGluc3RhbmNlLT5zZWN1cmVfamJvZF9zdXBwb3J0KQorCQlkZXZfaW5mbygmaW5zdGFuY2UtPnBkZXYtPmRldiwgIkZpcm13YXJlIHN1cHBvcnRzIFNlY3VyZSBKQk9EXG4iKTsKIAlpbnN0YW5jZS0+bWF4X3NlY3RvcnNfcGVyX3JlcSA9IGluc3RhbmNlLT5tYXhfbnVtX3NnZSAqCiAJCQkJCQlQQUdFX1NJWkUgLyA1MTI7CiAJaWYgKHRtcF9zZWN0b3JzICYmIChpbnN0YW5jZS0+bWF4X3NlY3RvcnNfcGVyX3JlcSA+IHRtcF9zZWN0b3JzKSkKIAkJaW5zdGFuY2UtPm1heF9zZWN0b3JzX3Blcl9yZXEgPSB0bXBfc2VjdG9yczsKIAotCS8qIENoZWNrIGZvciB2YWxpZCB0aHJvdHRsZXF1ZXVlZGVwdGggbW9kdWxlIHBhcmFtZXRlciAqLwotCWlmIChpbnN0YW5jZS0+aXNfaW1yKSB7Ci0JCWlmICh0aHJvdHRsZXF1ZXVlZGVwdGggPiAoaW5zdGFuY2UtPm1heF9md19jbWRzIC0KLQkJCQkJICBNRUdBU0FTX1NLSU5OWV9JTlRfQ01EUykpCi0JCQlpbnN0YW5jZS0+dGhyb3R0bGVxdWV1ZWRlcHRoID0KLQkJCQlNRUdBU0FTX1RIUk9UVExFX1FVRVVFX0RFUFRIOwotCQllbHNlCi0JCQlpbnN0YW5jZS0+dGhyb3R0bGVxdWV1ZWRlcHRoID0gdGhyb3R0bGVxdWV1ZWRlcHRoOworCS8qCisJICogMS4gRm9yIGZ1c2lvbiBhZGFwdGVycywgMyBjb21tYW5kcyBmb3IgSU9DVEwgYW5kIDUgY29tbWFuZHMKKwkgKiAgICBmb3IgZHJpdmVyJ3MgaW50ZXJuYWwgRENNRHMuCisJICogMi4gRm9yIE1GSSBza2lubnkgYWRhcHRlcnMsIDUgY29tbWFuZHMgZm9yIElPQ1RMICsgZHJpdmVyJ3MKKwkgKiAgICBpbnRlcm5hbCBEQ01Ecy4KKwkgKiAzLiBGb3IgcmVzdCBvZiBNRkkgYWRhcHRlcnMsIDI3IGNvbW1hbmRzIHJlc2VydmVkIGZvciBJT0NUTHMKKwkgKiAgICBhbmQgNSBjb21tYW5kcyBmb3IgZHJpdmVycydzIGludGVybmFsIERDTUQuCisJICovCisJaWYgKGluc3RhbmNlLT5jdHJsX2NvbnRleHQpIHsKKwkJaW5zdGFuY2UtPm1heF9zY3NpX2NtZHMgPSBpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgLQorCQkJCQkoTUVHQVNBU19GVVNJT05fSU5URVJOQUxfQ01EUyArCisJCQkJCU1FR0FTQVNfRlVTSU9OX0lPQ1RMX0NNRFMpOworCQlzZW1hX2luaXQoJmluc3RhbmNlLT5pb2N0bF9zZW0sIE1FR0FTQVNfRlVTSU9OX0lPQ1RMX0NNRFMpOworCX0gZWxzZSBpZiAoKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3M1NLSU5OWSkgfHwKKwkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3MVNLSU5OWSkpIHsKKwkJaW5zdGFuY2UtPm1heF9zY3NpX2NtZHMgPSBpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgLQorCQkJCQkJTUVHQVNBU19TS0lOTllfSU5UX0NNRFM7CisJCXNlbWFfaW5pdCgmaW5zdGFuY2UtPmlvY3RsX3NlbSwgTUVHQVNBU19TS0lOTllfSU5UX0NNRFMpOwogCX0gZWxzZSB7Ci0JCWlmICh0aHJvdHRsZXF1ZXVlZGVwdGggPiAoaW5zdGFuY2UtPm1heF9md19jbWRzIC0KLQkJCQkJICBNRUdBU0FTX0lOVF9DTURTKSkKLQkJCWluc3RhbmNlLT50aHJvdHRsZXF1ZXVlZGVwdGggPQotCQkJCU1FR0FTQVNfVEhST1RUTEVfUVVFVUVfREVQVEg7Ci0JCWVsc2UKLQkJCWluc3RhbmNlLT50aHJvdHRsZXF1ZXVlZGVwdGggPSB0aHJvdHRsZXF1ZXVlZGVwdGg7CisJCWluc3RhbmNlLT5tYXhfc2NzaV9jbWRzID0gaW5zdGFuY2UtPm1heF9md19jbWRzIC0KKwkJCQkJCU1FR0FTQVNfSU5UX0NNRFM7CisJCXNlbWFfaW5pdCgmaW5zdGFuY2UtPmlvY3RsX3NlbSwgKE1FR0FTQVNfSU5UX0NNRFMgLSA1KSk7CiAJfQogCisJLyogQ2hlY2sgZm9yIHZhbGlkIHRocm90dGxlcXVldWVkZXB0aCBtb2R1bGUgcGFyYW1ldGVyICovCisJaWYgKHRocm90dGxlcXVldWVkZXB0aCAmJgorCQkJdGhyb3R0bGVxdWV1ZWRlcHRoIDw9IGluc3RhbmNlLT5tYXhfc2NzaV9jbWRzKQorCQlpbnN0YW5jZS0+dGhyb3R0bGVxdWV1ZWRlcHRoID0gdGhyb3R0bGVxdWV1ZWRlcHRoOworCWVsc2UKKwkJaW5zdGFuY2UtPnRocm90dGxlcXVldWVkZXB0aCA9CisJCQkJTUVHQVNBU19USFJPVFRMRV9RVUVVRV9ERVBUSDsKKwogICAgICAgICAvKgogCSogU2V0dXAgdGFza2xldCBmb3IgY21kIGNvbXBsZXRpb24KIAkqLwpAQCAtNDk0NywxMiArNTAwNyw3IEBACiAJICovCiAJaG9zdC0+aXJxID0gaW5zdGFuY2UtPnBkZXYtPmlycTsKIAlob3N0LT51bmlxdWVfaWQgPSBpbnN0YW5jZS0+dW5pcXVlX2lkOwotCWlmIChpbnN0YW5jZS0+aXNfaW1yKSB7Ci0JCWhvc3QtPmNhbl9xdWV1ZSA9Ci0JCQlpbnN0YW5jZS0+bWF4X2Z3X2NtZHMgLSBNRUdBU0FTX1NLSU5OWV9JTlRfQ01EUzsKLQl9IGVsc2UKLQkJaG9zdC0+Y2FuX3F1ZXVlID0KLQkJCWluc3RhbmNlLT5tYXhfZndfY21kcyAtIE1FR0FTQVNfSU5UX0NNRFM7CisJaG9zdC0+Y2FuX3F1ZXVlID0gaW5zdGFuY2UtPm1heF9zY3NpX2NtZHM7CiAJaG9zdC0+dGhpc19pZCA9IGluc3RhbmNlLT5pbml0X2lkOwogCWhvc3QtPnNnX3RhYmxlc2l6ZSA9IGluc3RhbmNlLT5tYXhfbnVtX3NnZTsKIApAQCAtNTEzMCw4ICs1MTg1LDYgQEAKIAkJCSgoMSA8PCBQQUdFX1NISUZUKSA8PCBpbnN0YW5jZS0+Y3RybF9jb250ZXh0X3BhZ2VzKSk7CiAJCUlOSVRfTElTVF9IRUFEKCZmdXNpb24tPmNtZF9wb29sKTsKIAkJc3Bpbl9sb2NrX2luaXQoJmZ1c2lvbi0+bXB0X3Bvb2xfbG9jayk7Ci0JCW1lbXNldChmdXNpb24tPmxvYWRfYmFsYW5jZV9pbmZvLCAwLAotCQkJc2l6ZW9mKHN0cnVjdCBMRF9MT0FEX0JBTEFOQ0VfSU5GTykgKiBNQVhfTE9HSUNBTF9EUklWRVNfRVhUKTsKIAl9CiAJYnJlYWs7CiAJZGVmYXVsdDogLyogRm9yIGFsbCBvdGhlciBzdXBwb3J0ZWQgY29udHJvbGxlcnMgKi8KQEAgLTUyMTUsMTIgKzUyNjgsMTAgQEAKIAlpbnN0YW5jZS0+aW5pdF9pZCA9IE1FR0FTQVNfREVGQVVMVF9JTklUX0lEOwogCWluc3RhbmNlLT5jdHJsX2luZm8gPSBOVUxMOwogCisKIAlpZiAoKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3M1NLSU5OWSkgfHwKLQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3MVNLSU5OWSkpIHsKKwkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfU0FTMDA3MVNLSU5OWSkpCiAJCWluc3RhbmNlLT5mbGFnX2llZWUgPSAxOwotCQlzZW1hX2luaXQoJmluc3RhbmNlLT5pb2N0bF9zZW0sIE1FR0FTQVNfU0tJTk5ZX0lOVF9DTURTKTsKLQl9IGVsc2UKLQkJc2VtYV9pbml0KCZpbnN0YW5jZS0+aW9jdGxfc2VtLCAoTUVHQVNBU19JTlRfQ01EUyAtIDUpKTsKIAogCW1lZ2FzYXNfZGJnX2x2bCA9IDA7CiAJaW5zdGFuY2UtPmZsYWcgPSAwOwpAQCAtNjIxNSw5ICs2MjY2LDYgQEAKIAkJZ290byBvdXRfa2ZyZWVfaW9jOwogCX0KIAotCS8qCi0JICogV2Ugd2lsbCBhbGxvdyBvbmx5IE1FR0FTQVNfSU5UX0NNRFMgbnVtYmVyIG9mIHBhcmFsbGVsIGlvY3RsIGNtZHMKLQkgKi8KIAlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZpbnN0YW5jZS0+aW9jdGxfc2VtKSkgewogCQllcnJvciA9IC1FUkVTVEFSVFNZUzsKIAkJZ290byBvdXRfa2ZyZWVfaW9jOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mcC5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mcC5jCmluZGV4IDQ2MGM2YTMuLjRmNzIyODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnAuYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2ZwLmMKQEAgLTE3Miw2ICsxNzIsNyBAQAogCXN0cnVjdCBNUl9GV19SQUlEX01BUF9BTEwgICAgICpmd19tYXBfb2xkICAgID0gTlVMTDsKIAlzdHJ1Y3QgTVJfRldfUkFJRF9NQVAgICAgICAgICAqcEZ3UmFpZE1hcCAgICA9IE5VTEw7CiAJaW50IGk7CisJdTE2IGxkX2NvdW50OwogCiAKIAlzdHJ1Y3QgTVJfRFJWX1JBSURfTUFQX0FMTCAqZHJ2X21hcCA9CkBAIC0xOTEsOSArMTkyLDEwIEBACiAJCWZ3X21hcF9vbGQgPSAoc3RydWN0IE1SX0ZXX1JBSURfTUFQX0FMTCAqKQogCQkJZnVzaW9uLT5sZF9tYXBbKGluc3RhbmNlLT5tYXBfaWQgJiAxKV07CiAJCXBGd1JhaWRNYXAgPSAmZndfbWFwX29sZC0+cmFpZE1hcDsKKwkJbGRfY291bnQgPSAodTE2KWxlMzJfdG9fY3B1KHBGd1JhaWRNYXAtPmxkQ291bnQpOwogCiAjaWYgVkRfRVhUX0RFQlVHCi0JCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShwRndSYWlkTWFwLT5sZENvdW50KTsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBsZF9jb3VudDsgaSsrKSB7CiAJCQlkZXZfZGJnKCZpbnN0YW5jZS0+cGRldi0+ZGV2LCAiKCVkKSA6SW5kZXggMHgleCAiCiAJCQkJIlRhcmdldCBJZCAweCV4IFNlcSBOdW0gMHgleCBTaXplIDAvJWxseFxuIiwKIAkJCQlpbnN0YW5jZS0+dW5pcXVlX2lkLCBpLApAQCAtMjA1LDEyICsyMDcsMTUgQEAKIAogCQltZW1zZXQoZHJ2X21hcCwgMCwgZnVzaW9uLT5kcnZfbWFwX3N6KTsKIAkJcERydlJhaWRNYXAtPnRvdGFsU2l6ZSA9IHBGd1JhaWRNYXAtPnRvdGFsU2l6ZTsKLQkJcERydlJhaWRNYXAtPmxkQ291bnQgPSAoX19sZTE2KXBGd1JhaWRNYXAtPmxkQ291bnQ7CisJCXBEcnZSYWlkTWFwLT5sZENvdW50ID0gKF9fbGUxNiljcHVfdG9fbGUxNihsZF9jb3VudCk7CiAJCXBEcnZSYWlkTWFwLT5mcFBkSW9UaW1lb3V0U2VjID0gcEZ3UmFpZE1hcC0+ZnBQZElvVGltZW91dFNlYzsKIAkJZm9yIChpID0gMDsgaSA8IE1BWF9SQUlETUFQX0xPR0lDQUxfRFJJVkVTICsgTUFYX1JBSURNQVBfVklFV1M7IGkrKykKIAkJCXBEcnZSYWlkTWFwLT5sZFRndElkVG9MZFtpXSA9CiAJCQkJKHU4KXBGd1JhaWRNYXAtPmxkVGd0SWRUb0xkW2ldOwotCQlmb3IgKGkgPSAwOyBpIDwgbGUxNl90b19jcHUocERydlJhaWRNYXAtPmxkQ291bnQpOyBpKyspIHsKKwkJZm9yIChpID0gKE1BWF9SQUlETUFQX0xPR0lDQUxfRFJJVkVTICsgTUFYX1JBSURNQVBfVklFV1MpOworCQkJaSA8IE1BWF9MT0dJQ0FMX0RSSVZFU19FWFQ7IGkrKykKKwkJCXBEcnZSYWlkTWFwLT5sZFRndElkVG9MZFtpXSA9IDB4ZmY7CisJCWZvciAoaSA9IDA7IGkgPCBsZF9jb3VudDsgaSsrKSB7CiAJCQlwRHJ2UmFpZE1hcC0+bGRTcGFuTWFwW2ldID0gcEZ3UmFpZE1hcC0+bGRTcGFuTWFwW2ldOwogI2lmIFZEX0VYVF9ERUJVRwogCQkJZGV2X2RiZygmaW5zdGFuY2UtPnBkZXYtPmRldiwKQEAgLTI1Miw3ICsyNTcsNyBAQAogCXN0cnVjdCBMRF9MT0FEX0JBTEFOQ0VfSU5GTyAqbGJJbmZvOwogCVBMRF9TUEFOX0lORk8gbGRTcGFuSW5mbzsKIAlzdHJ1Y3QgTVJfTERfUkFJRCAgICAgICAgICpyYWlkOwotCWludCBsZENvdW50LCBudW1fbGRzOworCXUxNiBsZENvdW50LCBudW1fbGRzOwogCXUxNiBsZDsKIAl1MzIgZXhwZWN0ZWRfc2l6ZTsKIApAQCAtMzU2LDcgKzM2MSw3IEBACiAKIAlmb3IgKGxkQ291bnQgPSAwOyBsZENvdW50IDwgTUFYX0xPR0lDQUxfRFJJVkVTX0VYVDsgbGRDb3VudCsrKSB7CiAJCWxkID0gTVJfVGFyZ2V0SWRUb0xkR2V0KGxkQ291bnQsIG1hcCk7Ci0JCQlpZiAobGQgPj0gTUFYX0xPR0lDQUxfRFJJVkVTX0VYVCkKKwkJCWlmIChsZCA+PSAoTUFYX0xPR0lDQUxfRFJJVkVTX0VYVCAtIDEpKQogCQkJCWNvbnRpbnVlOwogCQlyYWlkID0gTVJfTGRSYWlkR2V0KGxkLCBtYXApOwogCQlkZXZfZGJnKCZpbnN0YW5jZS0+cGRldi0+ZGV2LCAiTEQgJXg6IHNwYW5fZGVwdGg9JXhcbiIsCkBAIC0xMTU3LDcgKzExNjIsNyBAQAogCiAJZm9yIChsZENvdW50ID0gMDsgbGRDb3VudCA8IE1BWF9MT0dJQ0FMX0RSSVZFU19FWFQ7IGxkQ291bnQrKykgewogCQlsZCA9IE1SX1RhcmdldElkVG9MZEdldChsZENvdW50LCBtYXApOwotCQlpZiAobGQgPj0gTUFYX0xPR0lDQUxfRFJJVkVTX0VYVCkKKwkJaWYgKGxkID49IChNQVhfTE9HSUNBTF9EUklWRVNfRVhUIC0gMSkpCiAJCQljb250aW51ZTsKIAkJcmFpZCA9IE1SX0xkUmFpZEdldChsZCwgbWFwKTsKIAkJZm9yIChlbGVtZW50ID0gMDsgZWxlbWVudCA8IE1BWF9RVUFEX0RFUFRIOyBlbGVtZW50KyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnVzaW9uLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Z1c2lvbi5jCmluZGV4IDcxNTU3ZjYuLjY3NWI1ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnVzaW9uLmMKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mdXNpb24uYwpAQCAtNjMsNyArNjMsNiBAQAogZXh0ZXJuIHZvaWQKIG1lZ2FzYXNfY29tcGxldGVfY21kKHN0cnVjdCBtZWdhc2FzX2luc3RhbmNlICppbnN0YW5jZSwKIAkJICAgICBzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCwgdTggYWx0X3N0YXR1cyk7Ci1pbnQgbWVnYXNhc19pc19sZGlvKHN0cnVjdCBzY3NpX2NtbmQgKmNtZCk7CiBpbnQKIHdhaXRfYW5kX3BvbGwoc3RydWN0IG1lZ2FzYXNfaW5zdGFuY2UgKmluc3RhbmNlLCBzdHJ1Y3QgbWVnYXNhc19jbWQgKmNtZCwKIAkgICAgICBpbnQgc2Vjb25kcyk7CkBAIC0xMDMsNiArMTAyLDggQEAKIHsKIAlzdHJ1Y3QgbWVnYXNhc19yZWdpc3Rlcl9zZXQgX19pb21lbSAqcmVnczsKIAlyZWdzID0gaW5zdGFuY2UtPnJlZ19zZXQ7CisKKwlpbnN0YW5jZS0+bWFza19pbnRlcnJ1cHRzID0gMDsKIAkvKiBGb3IgVGh1bmRlcmJvbHQvSW52YWRlciBhbHNvIGNsZWFyIGludHIgb24gZW5hYmxlICovCiAJd3JpdGVsKH4wLCAmcmVncy0+b3V0Ym91bmRfaW50cl9zdGF0dXMpOwogCXJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX3N0YXR1cyk7CkBAIC0xMTEsNyArMTEyLDYgQEAKIAogCS8qIER1bW15IHJlYWRsIHRvIGZvcmNlIHBjaSBmbHVzaCAqLwogCXJlYWRsKCZyZWdzLT5vdXRib3VuZF9pbnRyX21hc2spOwotCWluc3RhbmNlLT5tYXNrX2ludGVycnVwdHMgPSAwOwogfQogCiAvKioKQEAgLTE5Niw2ICsxOTYsNyBAQAogCiAJY21kLT5zY21kID0gTlVMTDsKIAljbWQtPnN5bmNfY21kX2lkeCA9ICh1MzIpVUxPTkdfTUFYOworCW1lbXNldChjbWQtPmlvX3JlcXVlc3QsIDAsIHNpemVvZihzdHJ1Y3QgTVBJMl9SQUlEX1NDU0lfSU9fUkVRVUVTVCkpOwogCWxpc3RfYWRkKCZjbWQtPmxpc3QsICgmZnVzaW9uLT5jbWRfcG9vbCktPm5leHQpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnVzaW9uLT5tcHRfcG9vbF9sb2NrLCBmbGFncyk7CkBAIC02ODksNiArNjkwLDggQEAKIAkJPSAxOwogCWluaXRfZnJhbWUtPmRyaXZlcl9vcGVyYXRpb25zLm1maV9jYXBhYmlsaXRpZXMuc3VwcG9ydF9uZHJpdmVfcjFfbGIKIAkJPSAxOworCWluaXRfZnJhbWUtPmRyaXZlcl9vcGVyYXRpb25zLm1maV9jYXBhYmlsaXRpZXMuc2VjdXJpdHlfcHJvdG9jb2xfY21kc19mdworCQk9IDE7CiAJLyogQ29udmVydCBjYXBhYmlsaXR5IHRvIExFMzIgKi8KIAljcHVfdG9fbGUzMnMoKHUzMiAqKSZpbml0X2ZyYW1lLT5kcml2ZXJfb3BlcmF0aW9ucy5tZmlfY2FwYWJpbGl0aWVzKTsKIApAQCAtNjk4LDEyICs3MDEsMTEgQEAKIAkJY3B1X3RvX2xlMzIobG93ZXJfMzJfYml0cyhpb2NfaW5pdF9oYW5kbGUpKTsKIAlpbml0X2ZyYW1lLT5kYXRhX3hmZXJfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZW9mKHN0cnVjdCBNUEkyX0lPQ19JTklUX1JFUVVFU1QpKTsKIAotCXJlcV9kZXNjLldvcmRzID0gMDsKKwlyZXFfZGVzYy51LmxvdyA9IGNwdV90b19sZTMyKGxvd2VyXzMyX2JpdHMoY21kLT5mcmFtZV9waHlzX2FkZHIpKTsKKwlyZXFfZGVzYy51LmhpZ2ggPSBjcHVfdG9fbGUzMih1cHBlcl8zMl9iaXRzKGNtZC0+ZnJhbWVfcGh5c19hZGRyKSk7CiAJcmVxX2Rlc2MuTUZBSW8uUmVxdWVzdEZsYWdzID0KIAkJKE1FR0FTQVNfUkVRX0RFU0NSSVBUX0ZMQUdTX01GQSA8PAotCQkgTUVHQVNBU19SRVFfREVTQ1JJUFRfRkxBR1NfVFlQRV9TSElGVCk7Ci0JY3B1X3RvX2xlMzJzKCh1MzIgKikmcmVxX2Rlc2MuTUZBSW8pOwotCXJlcV9kZXNjLldvcmRzIHw9IGNwdV90b19sZTY0KGNtZC0+ZnJhbWVfcGh5c19hZGRyKTsKKwkJTUVHQVNBU19SRVFfREVTQ1JJUFRfRkxBR1NfVFlQRV9TSElGVCk7CiAKIAkvKgogCSAqIGRpc2FibGUgdGhlIGludHIgYmVmb3JlIGZpcmluZyB0aGUgaW5pdCBmcmFtZQpAQCAtMTAxNyw4ICsxMDE5LDEyIEBACiAJICogZG9lcyBub3QgZXhjZWVkIG1heCBjbWRzIHRoYXQgdGhlIEZXIGNhbiBzdXBwb3J0CiAJICovCiAJaW5zdGFuY2UtPm1heF9md19jbWRzID0gaW5zdGFuY2UtPm1heF9md19jbWRzLTE7Ci0JLyogT25seSBpbnRlcm5hbCBjbWRzIChEQ01EKSBuZWVkIHRvIGhhdmUgTUZJIGZyYW1lcyAqLwotCWluc3RhbmNlLT5tYXhfbWZpX2NtZHMgPSBNRUdBU0FTX0lOVF9DTURTOworCisJLyoKKwkgKiBPbmx5IERyaXZlcidzIGludGVybmFsIERDTURzIGFuZCBJT0NUTCBEQ01EcyBuZWVkcyB0byBoYXZlIE1GSSBmcmFtZXMKKwkgKi8KKwlpbnN0YW5jZS0+bWF4X21maV9jbWRzID0KKwkJTUVHQVNBU19GVVNJT05fSU5URVJOQUxfQ01EUyArIE1FR0FTQVNfRlVTSU9OX0lPQ1RMX0NNRFM7CiAKIAltYXhfY21kID0gaW5zdGFuY2UtPm1heF9md19jbWRzOwogCkBAIC0xMjg1LDYgKzEyOTEsNyBAQAogCiAJCQlzZ2xfcHRyID0KIAkJCSAgKHN0cnVjdCBNUEkyNV9JRUVFX1NHRV9DSEFJTjY0ICopY21kLT5zZ19mcmFtZTsKKwkJCW1lbXNldChzZ2xfcHRyLCAwLCBNRUdBU0FTX01BWF9TWl9DSEFJTl9GUkFNRSk7CiAJCX0KIAl9CiAKQEAgLTE2NTgsNiArMTY2NSw4IEBACiAJdTMyIGRldmljZV9pZDsKIAlzdHJ1Y3QgTVBJMl9SQUlEX1NDU0lfSU9fUkVRVUVTVCAqaW9fcmVxdWVzdDsKIAl1MTYgcGRfaW5kZXggPSAwOworCXUxNiBvc190aW1lb3V0X3ZhbHVlOworCXUxNiB0aW1lb3V0X2xpbWl0OwogCXN0cnVjdCBNUl9EUlZfUkFJRF9NQVBfQUxMICpsb2NhbF9tYXBfcHRyOwogCXN0cnVjdCBmdXNpb25fY29udGV4dCAqZnVzaW9uID0gaW5zdGFuY2UtPmN0cmxfY29udGV4dDsKIAl1OCAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhbiwgcGh5c0FybTsKQEAgLTE2NzQsNTIgKzE2ODMsNjYgQEAKIAogCWlvX3JlcXVlc3QtPkRhdGFMZW5ndGggPSBjcHVfdG9fbGUzMihzY3NpX2J1ZmZsZW4oc2NtZCkpOwogCi0KLQkvKiBDaGVjayBpZiB0aGlzIGlzIGEgc3lzdGVtIFBEIEkvTyAqLwogCWlmIChzY21kLT5kZXZpY2UtPmNoYW5uZWwgPCBNRUdBU0FTX01BWF9QRF9DSEFOTkVMUyAmJgogCSAgICBpbnN0YW5jZS0+cGRfbGlzdFtwZF9pbmRleF0uZHJpdmVTdGF0ZSA9PSBNUl9QRF9TVEFURV9TWVNURU0pIHsKLQkJaW9fcmVxdWVzdC0+RnVuY3Rpb24gPSAwOwogCQlpZiAoZnVzaW9uLT5mYXN0X3BhdGhfaW8pCiAJCQlpb19yZXF1ZXN0LT5EZXZIYW5kbGUgPQogCQkJbG9jYWxfbWFwX3B0ci0+cmFpZE1hcC5kZXZIbmRsSW5mb1tkZXZpY2VfaWRdLmN1ckRldkhkbDsKLQkJaW9fcmVxdWVzdC0+UmFpZENvbnRleHQudGltZW91dFZhbHVlID0KLQkJCWxvY2FsX21hcF9wdHItPnJhaWRNYXAuZnBQZElvVGltZW91dFNlYzsKLQkJaW9fcmVxdWVzdC0+UmFpZENvbnRleHQucmVnTG9ja0ZsYWdzID0gMDsKLQkJaW9fcmVxdWVzdC0+UmFpZENvbnRleHQucmVnTG9ja1Jvd0xCQSA9IDA7Ci0JCWlvX3JlcXVlc3QtPlJhaWRDb250ZXh0LnJlZ0xvY2tMZW5ndGggPSAwOwogCQlpb19yZXF1ZXN0LT5SYWlkQ29udGV4dC5SQUlERmxhZ3MgPQotCQkJTVJfUkFJRF9GTEFHU19JT19TVUJfVFlQRV9TWVNURU1fUEQgPDwKLQkJCU1SX1JBSURfQ1RYX1JBSURfRkxBR1NfSU9fU1VCX1RZUEVfU0hJRlQ7Ci0JCWlmICgoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0xTSV9JTlZBREVSKSB8fAotCQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfRlVSWSkpCi0JCQlpb19yZXF1ZXN0LT5Jb0ZsYWdzIHw9IGNwdV90b19sZTE2KAotCQkJCU1QSTI1X1NBU19ERVZJQ0UwX0ZMQUdTX0VOQUJMRURfRkFTVF9QQVRIKTsKLQkJY21kLT5yZXF1ZXN0X2Rlc2MtPlNDU0lJTy5SZXF1ZXN0RmxhZ3MgPQotCQkJKE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX0hJR0hfUFJJT1JJVFkgPDwKLQkJCSBNRUdBU0FTX1JFUV9ERVNDUklQVF9GTEFHU19UWVBFX1NISUZUKTsKLQkJY21kLT5yZXF1ZXN0X2Rlc2MtPlNDU0lJTy5EZXZIYW5kbGUgPQotCQkJbG9jYWxfbWFwX3B0ci0+cmFpZE1hcC5kZXZIbmRsSW5mb1tkZXZpY2VfaWRdLmN1ckRldkhkbDsKKwkJCU1SX1JBSURfRkxBR1NfSU9fU1VCX1RZUEVfU1lTVEVNX1BECisJCQk8PCBNUl9SQUlEX0NUWF9SQUlEX0ZMQUdTX0lPX1NVQl9UWVBFX1NISUZUOworCQljbWQtPnJlcXVlc3RfZGVzYy0+U0NTSUlPLkRldkhhbmRsZSA9IGlvX3JlcXVlc3QtPkRldkhhbmRsZTsKIAkJY21kLT5yZXF1ZXN0X2Rlc2MtPlNDU0lJTy5NU0l4SW5kZXggPQogCQkJaW5zdGFuY2UtPm1zaXhfdmVjdG9ycyA/IHNtcF9wcm9jZXNzb3JfaWQoKSAlIGluc3RhbmNlLT5tc2l4X3ZlY3RvcnMgOiAwOwotCQkvKgotCQkgKiBJZiB0aGUgY29tbWFuZCBpcyBmb3IgdGhlIHRhcGUgZGV2aWNlLCBzZXQgdGhlCi0JCSAqIEZQIHRpbWVvdXQgdG8gdGhlIG9zIGxheWVyIHRpbWVvdXQgdmFsdWUuCi0JCSAqLwotCQlpZiAoc2NtZC0+ZGV2aWNlLT50eXBlID09IFRZUEVfVEFQRSkgewotCQkJaWYgKChzY21kLT5yZXF1ZXN0LT50aW1lb3V0IC8gSFopID4gMHhGRkZGKQotCQkJCWlvX3JlcXVlc3QtPlJhaWRDb250ZXh0LnRpbWVvdXRWYWx1ZSA9Ci0JCQkJCTB4RkZGRjsKLQkJCWVsc2UKLQkJCQlpb19yZXF1ZXN0LT5SYWlkQ29udGV4dC50aW1lb3V0VmFsdWUgPQotCQkJCQlzY21kLT5yZXF1ZXN0LT50aW1lb3V0IC8gSFo7CisJCW9zX3RpbWVvdXRfdmFsdWUgPSBzY21kLT5yZXF1ZXN0LT50aW1lb3V0IC8gSFo7CisKKwkJaWYgKGluc3RhbmNlLT5zZWN1cmVfamJvZF9zdXBwb3J0ICYmCisJCQkobWVnYXNhc19jbWRfdHlwZShzY21kKSA9PSBOT05fUkVBRF9XUklURV9TWVNQRElPKSkgeworCQkJLyogc3lzdGVtIHBkIGZpcm13YXJlIHBhdGggKi8KKwkJCWlvX3JlcXVlc3QtPkZ1bmN0aW9uICA9CisJCQkJTUVHQVNBU19NUEkyX0ZVTkNUSU9OX0xEX0lPX1JFUVVFU1Q7CisJCQljbWQtPnJlcXVlc3RfZGVzYy0+U0NTSUlPLlJlcXVlc3RGbGFncyA9CisJCQkJKE1QSTJfUkVRX0RFU0NSSVBUX0ZMQUdTX1NDU0lfSU8gPDwKKwkJCQlNRUdBU0FTX1JFUV9ERVNDUklQVF9GTEFHU19UWVBFX1NISUZUKTsKKwkJCWlvX3JlcXVlc3QtPlJhaWRDb250ZXh0LnRpbWVvdXRWYWx1ZSA9CisJCQkJY3B1X3RvX2xlMTYob3NfdGltZW91dF92YWx1ZSk7CisJCX0gZWxzZSB7CisJCQkvKiBzeXN0ZW0gcGQgRmFzdCBQYXRoICovCisJCQlpb19yZXF1ZXN0LT5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fU0NTSV9JT19SRVFVRVNUOworCQkJaW9fcmVxdWVzdC0+UmFpZENvbnRleHQucmVnTG9ja0ZsYWdzID0gMDsKKwkJCWlvX3JlcXVlc3QtPlJhaWRDb250ZXh0LnJlZ0xvY2tSb3dMQkEgPSAwOworCQkJaW9fcmVxdWVzdC0+UmFpZENvbnRleHQucmVnTG9ja0xlbmd0aCA9IDA7CisJCQl0aW1lb3V0X2xpbWl0ID0gKHNjbWQtPmRldmljZS0+dHlwZSA9PSBUWVBFX0RJU0spID8KKwkJCQkJMjU1IDogMHhGRkZGOworCQkJaW9fcmVxdWVzdC0+UmFpZENvbnRleHQudGltZW91dFZhbHVlID0KKwkJCQljcHVfdG9fbGUxNigob3NfdGltZW91dF92YWx1ZSA+IHRpbWVvdXRfbGltaXQpID8KKwkJCQl0aW1lb3V0X2xpbWl0IDogb3NfdGltZW91dF92YWx1ZSk7CisJCWlmICgoaW5zdGFuY2UtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0xTSV9JTlZBREVSKSB8fAorCQkJKGluc3RhbmNlLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MU0lfRlVSWSkpCisJCQlpb19yZXF1ZXN0LT5Jb0ZsYWdzIHw9CisJCQljcHVfdG9fbGUxNihNUEkyNV9TQVNfREVWSUNFMF9GTEFHU19FTkFCTEVEX0ZBU1RfUEFUSCk7CisKKwkJCWNtZC0+cmVxdWVzdF9kZXNjLT5TQ1NJSU8uUmVxdWVzdEZsYWdzID0KKwkJCQkoTVBJMl9SRVFfREVTQ1JJUFRfRkxBR1NfSElHSF9QUklPUklUWSA8PAorCQkJCU1FR0FTQVNfUkVRX0RFU0NSSVBUX0ZMQUdTX1RZUEVfU0hJRlQpOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKHNjbWQtPmRldmljZS0+Y2hhbm5lbCA8IE1FR0FTQVNfTUFYX1BEX0NIQU5ORUxTKQogCQkJZ290byBOb25GYXN0UGF0aDsKIAorCQkvKgorCQkgKiBGb3Igb2xkZXIgZmlybXdhcmUsIERyaXZlciBzaG91bGQgbm90IGFjY2VzcyBsZFRndElkVG9MZAorCQkgKiBiZXlvbmQgaW5kZXggMTI3IGFuZCBmb3IgRXh0ZW5kZWQgVkQgZmlybXdhcmUsIGxkVGd0SWRUb0xkCisJCSAqIHNob3VsZCBub3QgZ28gYmV5b25kIDI1NS4KKwkJICovCisKKwkJaWYgKCghZnVzaW9uLT5mYXN0X3BhdGhfaW8pIHx8CisJCQkoZGV2aWNlX2lkID49IGluc3RhbmNlLT5md19zdXBwb3J0ZWRfdmRfY291bnQpKQorCQkJZ290byBOb25GYXN0UGF0aDsKKwogCQlsZCA9IE1SX1RhcmdldElkVG9MZEdldChkZXZpY2VfaWQsIGxvY2FsX21hcF9wdHIpOwotCQlpZiAoKGxkID49IGluc3RhbmNlLT5md19zdXBwb3J0ZWRfdmRfY291bnQpIHx8Ci0JCQkoIWZ1c2lvbi0+ZmFzdF9wYXRoX2lvKSkKKworCQlpZiAobGQgPj0gaW5zdGFuY2UtPmZ3X3N1cHBvcnRlZF92ZF9jb3VudCkKIAkJCWdvdG8gTm9uRmFzdFBhdGg7CiAKIAkJcmFpZCA9IE1SX0xkUmFpZEdldChsZCwgbG9jYWxfbWFwX3B0cik7CkBAIC0xODExLDcgKzE4MzQsNyBAQAogCSAqLwogCWlvX3JlcXVlc3QtPklvRmxhZ3MgPSBjcHVfdG9fbGUxNihzY3AtPmNtZF9sZW4pOwogCi0JaWYgKG1lZ2FzYXNfaXNfbGRpbyhzY3ApKQorCWlmIChtZWdhc2FzX2NtZF90eXBlKHNjcCkgPT0gUkVBRF9XUklURV9MRElPKQogCQltZWdhc2FzX2J1aWxkX2xkaW9fZnVzaW9uKGluc3RhbmNlLCBzY3AsIGNtZCk7CiAJZWxzZQogCQltZWdhc2FzX2J1aWxkX2RjZGJfZnVzaW9uKGluc3RhbmNlLCBzY3AsIGNtZCk7CkBAIC0yNjEyLDcgKzI2MzUsNiBAQAogCQkJCWluc3RhbmNlLT5ob3N0LT5ob3N0X25vKTsKIAkJCW1lZ2FyYWlkX3Nhc19raWxsX2hiYShpbnN0YW5jZSk7CiAJCQlpbnN0YW5jZS0+c2tpcF9oZWFydGJlYXRfdGltZXJfZGVsID0gMTsKLQkJCWluc3RhbmNlLT5hZHByZWNvdmVyeSA9IE1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1I7CiAJCQlyZXR2YWwgPSBGQUlMRUQ7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtMjgwOCw4ICsyODMwLDYgQEAKIAkJCQlkZXZfaW5mbygmaW5zdGFuY2UtPnBkZXYtPmRldiwKIAkJCQkJIkZhaWxlZCBmcm9tICVzICVkXG4iLAogCQkJCQlfX2Z1bmNfXywgX19MSU5FX18pOwotCQkJCWluc3RhbmNlLT5hZHByZWNvdmVyeSA9Ci0JCQkJCU1FR0FTQVNfSFdfQ1JJVElDQUxfRVJST1I7CiAJCQkJbWVnYXJhaWRfc2FzX2tpbGxfaGJhKGluc3RhbmNlKTsKIAkJCQlyZXR2YWwgPSBGQUlMRUQ7CiAJCQl9CkBAIC0yODU4LDcgKzI4NzgsNiBAQAogCQkgICAgICAgImFkYXB0ZXIgc2NzaSVkLlxuIiwgaW5zdGFuY2UtPmhvc3QtPmhvc3Rfbm8pOwogCQltZWdhcmFpZF9zYXNfa2lsbF9oYmEoaW5zdGFuY2UpOwogCQlpbnN0YW5jZS0+c2tpcF9oZWFydGJlYXRfdGltZXJfZGVsID0gMTsKLQkJaW5zdGFuY2UtPmFkcHJlY292ZXJ5ID0gTUVHQVNBU19IV19DUklUSUNBTF9FUlJPUjsKIAkJcmV0dmFsID0gRkFJTEVEOwogCX0gZWxzZSB7CiAJCS8qIEZvciBWRjogUmVzdGFydCBIQiB0aW1lciBpZiB3ZSBkaWRuJ3QgT0NSICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Z1c2lvbi5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX3Nhc19mdXNpb24uaAppbmRleCA1YWI3ZGFlLi41NmU2ZGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfc2FzX2Z1c2lvbi5oCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9zYXNfZnVzaW9uLmgKQEAgLTMwNiwxNCArMzA2LDkgQEAKICAqIE1QVCBSQUlEIE1GQSBJTyBEZXNjcmlwdG9yLgogICovCiBzdHJ1Y3QgTUVHQVNBU19SQUlEX01GQV9JT19SRVFVRVNUX0RFU0NSSVBUT1IgewotI2lmICAgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCi0JdTMyICAgICBNZXNzYWdlQWRkcmVzczE6MjQ7IC8qIGJpdHMgMzE6OCovCiAJdTMyICAgICBSZXF1ZXN0RmxhZ3M6ODsKLSNlbHNlCi0JdTMyICAgICBSZXF1ZXN0RmxhZ3M6ODsKLQl1MzIgICAgIE1lc3NhZ2VBZGRyZXNzMToyNDsgLyogYml0cyAzMTo4Ki8KLSNlbmRpZgotCXUzMiAgICAgTWVzc2FnZUFkZHJlc3MyOyAgICAgIC8qIGJpdHMgNjE6MzIgKi8KKwl1MzIgICAgIE1lc3NhZ2VBZGRyZXNzMToyNDsKKwl1MzIgICAgIE1lc3NhZ2VBZGRyZXNzMjsKIH07CiAKIC8qIERlZmF1bHQgUmVxdWVzdCBEZXNjcmlwdG9yICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTIuaAppbmRleCAwODhlZWZhLi43ZmM2ZjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMi5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyLmgKQEAgLTgsNyArOCw3IEBACiAgKiAgICAgICAgICAgICAgICAgIHNjYXR0ZXIvZ2F0aGVyIGZvcm1hdHMuCiAgKiAgQ3JlYXRpb24gRGF0ZTogIEp1bmUgMjEsIDIwMDYKICAqCi0gKiAgbXBpMi5oIFZlcnNpb246ICAwMi4wMC4zMgorICogIG1waTIuaCBWZXJzaW9uOiAgMDIuMDAuMzUKICAqCiAgKiAgVmVyc2lvbiBIaXN0b3J5CiAgKiAgLS0tLS0tLS0tLS0tLS0tCkBAIC04Myw2ICs4Myw5IEBACiAgKiAgMDQtMDktMTMgIDAyLjAwLjMwICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgogICogIDA0LTE3LTEzICAwMi4wMC4zMSAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KICAqICAwOC0xOS0xMyAgMDIuMDAuMzIgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCisgKiAgMTItMDUtMTMgIDAyLjAwLjMzICBCdW1wZWQgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklULgorICogIDAxLTA4LTE0ICAwMi4wMC4zNCAgQnVtcGVkIE1QSTJfSEVBREVSX1ZFUlNJT05fVU5JVC4KKyAqICAwNi0xMy0xNCAgMDIuMDAuMzUgIEJ1bXBlZCBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0xMDgsNyArMTExLDcgQEAKICNkZWZpbmUgTVBJMl9WRVJTSU9OXzAyXzAwICAgICAgICAgICAgICAgICAgKDB4MDIwMCkKIAogLyogdmVyc2lvbmluZyBmb3IgdGhpcyBNUEkgaGVhZGVyIHNldCAqLwotI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVQgICAgICAgICAgICAoMHgyMCkKKyNkZWZpbmUgTVBJMl9IRUFERVJfVkVSU0lPTl9VTklUICAgICAgICAgICAgKDB4MjMpCiAjZGVmaW5lIE1QSTJfSEVBREVSX1ZFUlNJT05fREVWICAgICAgICAgICAgICgweDAwKQogI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVRfTUFTSyAgICAgICAoMHhGRjAwKQogI2RlZmluZSBNUEkyX0hFQURFUl9WRVJTSU9OX1VOSVRfU0hJRlQgICAgICAoOCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX2NuZmcuaAppbmRleCA1MTBlZjBkLi5lZThkMmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9jbmZnLmgKKysrIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfY25mZy5oCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgVGl0bGU6ICBNUEkgQ29uZmlndXJhdGlvbiBtZXNzYWdlcyBhbmQgcGFnZXMKICAqICBDcmVhdGlvbiBEYXRlOiAgTm92ZW1iZXIgMTAsIDIwMDYKICAqCi0gKiAgICBtcGkyX2NuZmcuaCBWZXJzaW9uOiAgMDIuMDAuMjYKKyAqICAgIG1waTJfY25mZy5oIFZlcnNpb246ICAwMi4wMC4yOQogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTE1Nyw2ICsxNTcsMjAgQEAKICAqICAwNC0wOS0xMyAgMDIuMDAuMjUgIEFkZGVkIE1QSTJfSU9VTklUUEFHRTFfQVRBX1NFQ1VSSVRZX0ZSRUVaRV9MT0NLLgogICoJCQlGaXhlZCBNUEkyX0lPVU5JVFBBR0U1X0RNQV9DQVBfTUFTS19NQVhfUkVRVUVTVFMgdG8KICAqCQkJbWF0Y2ggdGhlIHNwZWNpZmljYXRpb24uCisgKiAgMTItMDUtMTMgIDAyLjAwLjI3ICBBZGRlZCBNUEkyX01BTlBBR0U3X0ZMQUdfQkFTRV9FTkNMT1NVUkVfTEVWRUwgZm9yCisgKgkJCU1QSTJfQ09ORklHX1BBR0VfTUFOXzcuCisgKgkJCUFkZGVkIEVuY2xvc3VyZUxldmVsIGFuZCBDb25uZWN0b3JOYW1lIGZpZWxkcyB0bworICoJCQlNUEkyX0NPTkZJR19QQUdFX1NBU19ERVZfMC4KKyAqCQkJQWRkZWQgTVBJMl9TQVNfREVWSUNFMF9GTEFHU19FTkNMX0xFVkVMX1ZBTElEIGZvcgorICoJCQlNUEkyX0NPTkZJR19QQUdFX1NBU19ERVZfMC4KKyAqCQkJQWRkZWQgRW5jbG9zdXJlTGV2ZWwgZmllbGQgdG8KKyAqCQkJTVBJMl9DT05GSUdfUEFHRV9TQVNfRU5DTE9TVVJFXzAuCisgKgkJCUFkZGVkIE1QSTJfU0FTX0VOQ0xTMF9GTEFHU19FTkNMX0xFVkVMX1ZBTElEIGZvcgorICoJCQlNUEkyX0NPTkZJR19QQUdFX1NBU19FTkNMT1NVUkVfMC4KKyAqICAwMS0wOC0xNCAgMDIuMDAuMjggIEFkZGVkIG1vcmUgZGVmaW5lcyBmb3IgdGhlIEJpb3NPcHRpb25zIGZpZWxkIG9mCisgKgkJCU1QSTJfQ09ORklHX1BBR0VfQklPU18xLgorICogIDA2LTEzLTE0ICAwMi4wMC4yOSAgQWRkZWQgU1NVVGltZW91dCBmaWVsZCB0byBNUEkyX0NPTkZJR19QQUdFX0JJT1NfMSwgYW5kCisgKgkJCW1vcmUgZGVmaW5lcyBmb3IgdGhlIEJpb3NPcHRpb25zIGZpZWxkLgogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIApAQCAtNzA2LDYgKzcyMCw3IEBACiAjZGVmaW5lIE1QSTJfTUFOVUZBQ1RVUklORzdfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICgweDAxKQogCiAvKiBkZWZpbmVzIGZvciB0aGUgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9NQU5QQUdFN19GTEFHX0JBU0VfRU5DTE9TVVJFX0xFVkVMICAgICAgICAgKDB4MDAwMDAwMDgpCiAjZGVmaW5lIE1QSTJfTUFOUEFHRTdfRkxBR19FVkVOVFJFUExBWV9TTE9UX09SREVSICAgICAgICgweDAwMDAwMDAyKQogI2RlZmluZSBNUEkyX01BTlBBR0U3X0ZMQUdfVVNFX1NMT1RfSU5GTyAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMSkKIApAQCAtMTIyNCw3ICsxMjM5LDkgQEAKIAlNUEkyX0NPTkZJR19QQUdFX0hFQURFUiBIZWFkZXI7ICAgICAgICAgICAgICAgICAgICAgLyogMHgwMCAqLwogCVUzMiAgICAgICAgICAgICAgICAgICAgIEJpb3NPcHRpb25zOyAgICAgICAgICAgICAgICAvKiAweDA0ICovCiAJVTMyICAgICAgICAgICAgICAgICAgICAgSU9DU2V0dGluZ3M7ICAgICAgICAgICAgICAgIC8qIDB4MDggKi8KLQlVMzIgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDE7ICAgICAgICAgICAgICAgICAgLyogMHgwQyAqLworCVU4CQkJU1NVVGltZW91dDsJCSAgICAvKiAweDBDICovCisJVTgJCQlSZXNlcnZlZDE7CQkgICAgLyogMHgwRCAqLworCVUxNgkJCVJlc2VydmVkMjsJCSAgICAvKiAweDBFICovCiAJVTMyICAgICAgICAgICAgICAgICAgICAgRGV2aWNlU2V0dGluZ3M7ICAgICAgICAgICAgIC8qIDB4MTAgKi8KIAlVMTYgICAgICAgICAgICAgICAgICAgICBOdW1iZXJPZkRldmljZXM7ICAgICAgICAgICAgLyogMHgxNCAqLwogCVUxNiAgICAgICAgICAgICAgICAgICAgIFVFRklWZXJzaW9uOyAgICAgICAgICAgICAgICAvKiAweDE2ICovCkBAIC0xMjM1LDkgKzEyNTIsMjQgQEAKIH0gTVBJMl9DT05GSUdfUEFHRV9CSU9TXzEsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9CSU9TXzEsCiAgIE1waTJCaW9zUGFnZTFfdCwgTVBJMl9QT0lOVEVSIHBNcGkyQmlvc1BhZ2UxX3Q7CiAKLSNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfUEFHRVZFUlNJT04gICAgICAgICAgICAgICAgICAgICAgKDB4MDUpCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX1BBR0VWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICgweDA3KQogCiAvKiB2YWx1ZXMgZm9yIEJJT1MgUGFnZSAxIEJpb3NPcHRpb25zIGZpZWxkICovCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX09QVElPTlNfUE5TX01BU0sJCQkoMHgwMDAwMzgwMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfT1BUSU9OU19QTlNfUEJESEwJCQkoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfT1BUSU9OU19QTlNfRU5DU0xPU1VSRQkJCSgweDAwMDAwODAwKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9PUFRJT05TX1BOU19MV1dJRAkJCSgweDAwMDAxMDAwKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9PUFRJT05TX1BOU19QU0VOUwkJCSgweDAwMDAxODAwKQorI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9PUFRJT05TX1BOU19FU1BIWQkJCSgweDAwMDAyMDAwKQorCisjZGVmaW5lIE1QSTJfQklPU1BBR0UxX09QVElPTlNfWDg2X0RJU0FCTEVfQklPUyAgICAgICAgICAgICAgICAgKDB4MDAwMDA0MDApCisKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfT1BUSU9OU19NQVNLX1JFR0lTVFJBVElPTl9VRUZJX0JTRCAgICAgICAoMHgwMDAwMDMwMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfT1BUSU9OU19VU0VfQklUMF9SRUdJU1RSQVRJT05fVUVGSV9CU0QgICAoMHgwMDAwMDAwMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfT1BUSU9OU19GVUxMX1JFR0lTVFJBVElPTl9VRUZJX0JTRCAgICAgICAoMHgwMDAwMDEwMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfT1BUSU9OU19BREFQVEVSX1JFR0lTVFJBVElPTl9VRUZJX0JTRCAgICAoMHgwMDAwMDIwMCkKKyNkZWZpbmUgTVBJMl9CSU9TUEFHRTFfT1BUSU9OU19ESVNBQkxFX1JFR0lTVFJBVElPTl9VRUZJX0JTRCAgICAoMHgwMDAwMDMwMCkKKwogI2RlZmluZSBNUEkyX0JJT1NQQUdFMV9PUFRJT05TX01BU0tfT0VNX0lEICAgICAgICAgICAgICAgICAgKDB4MDAwMDAwRjApCiAjZGVmaW5lIE1QSTJfQklPU1BBR0UxX09QVElPTlNfTFNJX09FTV9JRCAgICAgICAgICAgICAgICAgICAoMHgwMDAwMDAwMCkKIApAQCAtMjQyMCwxMyArMjQ1MiwxMyBAQAogICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRHcm91cHM7ICAgICAgICAgICAgIC8qIDB4MkMgKi8KICAgICBVOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEbWFHcm91cDsgICAgICAgICAgICAgICAvKiAweDJEICovCiAgICAgVTggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udHJvbEdyb3VwOyAgICAgICAgICAgLyogMHgyRSAqLwotICAgIFU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMTsgICAgICAgICAgICAgIC8qIDB4MkYgKi8KLSAgICBVMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZDI7ICAgICAgICAgICAgICAvKiAweDMwICovCisJVTgJCQkJIEVuY2xvc3VyZUxldmVsOwkgLyogMHgyRiAqLworCVU4CQkJCSBDb25uZWN0b3JOYW1lWzRdOwkgLyogMHgzMCAqLwogICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgIC8qIDB4MzQgKi8KIH0gTVBJMl9DT05GSUdfUEFHRV9TQVNfREVWXzAsIE1QSTJfUE9JTlRFUiBQVFJfTVBJMl9DT05GSUdfUEFHRV9TQVNfREVWXzAsCiAgIE1waTJTYXNEZXZpY2VQYWdlMF90LCBNUEkyX1BPSU5URVIgcE1waTJTYXNEZXZpY2VQYWdlMF90OwogCi0jZGVmaW5lIE1QSTJfU0FTREVWSUNFMF9QQUdFVkVSU0lPTiAgICAgICAgICgweDA4KQorI2RlZmluZSBNUEkyX1NBU0RFVklDRTBfUEFHRVZFUlNJT04gICAgICAgICAoMHgwOSkKIAogLyogdmFsdWVzIGZvciBTQVMgRGV2aWNlIFBhZ2UgMCBBY2Nlc3NTdGF0dXMgZmllbGQgKi8KICNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9BU1RBVFVTX05PX0VSUk9SUyAgICAgICAgICAgICAgICAgICgweDAwKQpAQCAtMjQ2NCw2ICsyNDk2LDcgQEAKICNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9GTEFHU19TQVRBX05DUV9TVVBQT1JURUQgICAgICAgICAgICgweDAwMjApCiAjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfRkxBR1NfU0FUQV9GVUFfU1VQUE9SVEVEICAgICAgICAgICAoMHgwMDEwKQogI2RlZmluZSBNUEkyX1NBU19ERVZJQ0UwX0ZMQUdTX1BPUlRfU0VMRUNUT1JfQVRUQUNIICAgICAgICAgKDB4MDAwOCkKKyNkZWZpbmUgTVBJMl9TQVNfREVWSUNFMF9GTEFHU19FTkNMX0xFVkVMX1ZBTElEICAgICAgICAgICAgICgweDAwMDIpCiAjZGVmaW5lIE1QSTJfU0FTX0RFVklDRTBfRkxBR1NfREVWSUNFX1BSRVNFTlQgICAgICAgICAgICAgICAoMHgwMDAxKQogCiAKQEAgLTI3MzIsNyArMjc2NSw4IEBACiAgICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5jbG9zdXJlSGFuZGxlOyAgICAgICAgICAgIC8qIDB4MTYgKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1TbG90czsgICAgICAgICAgICAgICAgICAgLyogMHgxOCAqLwogICAgIFUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0U2xvdDsgICAgICAgICAgICAgICAgICAvKiAweDFBICovCi0gICAgVTE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAgIC8qIDB4MUMgKi8KKwlVOAkJCQkgUmVzZXJ2ZWQyOwkJICAgICAvKiAweDFDICovCisJVTgJCQkJIEVuY2xvc3VyZUxldmVsOwkgICAgIC8qIDB4MUQgKi8KICAgICBVMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVBEZXZIYW5kbGU7ICAgICAgICAgICAgICAgLyogMHgxRSAqLwogICAgIFUzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkMzsgICAgICAgICAgICAgICAgICAvKiAweDIwICovCiAgICAgVTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAgIC8qIDB4MjQgKi8KQEAgLTI3NDAsOSArMjc3NCwxMCBAQAogICBNUEkyX1BPSU5URVIgUFRSX01QSTJfQ09ORklHX1BBR0VfU0FTX0VOQ0xPU1VSRV8wLAogICBNcGkyU2FzRW5jbG9zdXJlUGFnZTBfdCwgTVBJMl9QT0lOVEVSIHBNcGkyU2FzRW5jbG9zdXJlUGFnZTBfdDsKIAotI2RlZmluZSBNUEkyX1NBU0VOQ0xPU1VSRTBfUEFHRVZFUlNJT04gICAgICAoMHgwMykKKyNkZWZpbmUgTVBJMl9TQVNFTkNMT1NVUkUwX1BBR0VWRVJTSU9OICAgICAgKDB4MDQpCiAKIC8qIHZhbHVlcyBmb3IgU0FTIEVuY2xvc3VyZSBQYWdlIDAgRmxhZ3MgZmllbGQgKi8KKyNkZWZpbmUgTVBJMl9TQVNfRU5DTFMwX0ZMQUdTX0VOQ0xfTEVWRUxfVkFMSUQgICAgICAoMHgwMDEwKQogI2RlZmluZSBNUEkyX1NBU19FTkNMUzBfRkxBR1NfTU5HX01BU0sgICAgICAgICAgICAgICgweDAwMEYpCiAjZGVmaW5lIE1QSTJfU0FTX0VOQ0xTMF9GTEFHU19NTkdfVU5LTk9XTiAgICAgICAgICAgKDB4MDAwMCkKICNkZWZpbmUgTVBJMl9TQVNfRU5DTFMwX0ZMQUdTX01OR19JT0NfU0VTICAgICAgICAgICAoMHgwMDAxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfaW9jLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaAppbmRleCAyYzNiMGYyLi5iMDJkZTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl9pb2MuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIElPQywgUG9ydCwgRXZlbnQsIEZXIERvd25sb2FkLCBhbmQgRlcgVXBsb2FkIG1lc3NhZ2VzCiAgKiAgQ3JlYXRpb24gRGF0ZTogIE9jdG9iZXIgMTEsIDIwMDYKICAqCi0gKiAgbXBpMl9pb2MuaCBWZXJzaW9uOiAgMDIuMDAuMjMKKyAqICBtcGkyX2lvYy5oIFZlcnNpb246ICAwMi4wMC4yNAogICoKICAqICBWZXJzaW9uIEhpc3RvcnkKICAqICAtLS0tLS0tLS0tLS0tLS0KQEAgLTEyNiw2ICsxMjYsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgQWRkZWQgTVBJMl9JT0NGQUNUU19DQVBBQklMSVRZX1JEUFFfQVJSQVlfQ0FQQUJMRS4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIE1QSTJfRldfRE9XTkxPQURfSVRZUEVfUFVCTElDX0tFWS4KICAqICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIEVuY3J5cHRlZCBIYXNoIEV4dGVuZGVkIEltYWdlLgorICogIDEyLTA1LTEzICAwMi4wMC4yNCAgQWRkZWQgTVBJMjVfSEFTSF9JTUFHRV9UWVBFX0JJT1MuCiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCkBAIC0xNTg5LDYgKzE1OTAsNyBAQAogLyogdmFsdWVzIGZvciBIYXNoSW1hZ2VUeXBlICovCiAjZGVmaW5lIE1QSTI1X0hBU0hfSU1BR0VfVFlQRV9VTlVTRUQgICAgICAgICAgICAoMHgwMCkKICNkZWZpbmUgTVBJMjVfSEFTSF9JTUFHRV9UWVBFX0ZJUk1XQVJFICAgICAgICAgICgweDAxKQorI2RlZmluZSBNUEkyNV9IQVNIX0lNQUdFX1RZUEVfQklPUyAgICAgICAgICAgICAgKDB4MDIpCiAKIC8qIHZhbHVlcyBmb3IgSGFzaEFsZ29yaXRobSAqLwogI2RlZmluZSBNUEkyNV9IQVNIX0FMR09SSVRITV9VTlVTRUQgICAgICAgICAgICAgKDB4MDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl90b29sLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcGkvbXBpMl90b29sLmgKaW5kZXggOWJlMDNlZC4uNjU5YjhhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXBpL21waTJfdG9vbC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21waS9tcGkyX3Rvb2wuaApAQCAtNiw3ICs2LDcgQEAKICAqICAgICAgICAgIFRpdGxlOiAgTVBJIGRpYWdub3N0aWMgdG9vbCBzdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucwogICogIENyZWF0aW9uIERhdGU6ICBNYXJjaCAyNiwgMjAwNwogICoKLSAqICAgIG1waTJfdG9vbC5oIFZlcnNpb246ICAwMi4wMC4xMQorICogICAgbXBpMl90b29sLmggVmVyc2lvbjogIDAyLjAwLjEyCiAgKgogICogIFZlcnNpb24gSGlzdG9yeQogICogIC0tLS0tLS0tLS0tLS0tLQpAQCAtMjksNyArMjksOCBAQAogICogICAgICAgICAgICAgICAgICAgICAgTVBJMl9UT09MQk9YX0lTVFdJX1JFQURfV1JJVEVfUkVRVUVTVC4KICAqICAwNy0yNi0xMiAgMDIuMDAuMTAgIE1vZGlmaWVkIE1QSTJfVE9PTEJPWF9ESUFHTk9TVElDX0NMSV9SRVFVRVNUIHNvIHRoYXQKICAqCQkJaXQgdXNlcyBNUEkgQ2hhaW4gU0dFIGFzIHdlbGwgYXMgTVBJIFNpbXBsZSBTR0UuCi0gKiAwOC0xOS0xMyAgMDIuMDAuMTEgIEFkZGVkIE1QSTJfVE9PTEJPWF9URVhUX0RJU1BMQVlfVE9PTCBhbmQgcmVsYXRlZCBpbmZvLgorICogIDA4LTE5LTEzICAwMi4wMC4xMSAgQWRkZWQgTVBJMl9UT09MQk9YX1RFWFRfRElTUExBWV9UT09MIGFuZCByZWxhdGVkIGluZm8uCisgKiAgMDEtMDgtMTQgIDAyLjAwLjEyICBBZGRlZCBNUEkyX1RPT0xCT1hfQ0xFQU5fQklUMjZfUFJPRFVDVF9TUEVDSUZJQy4KICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTEwMSw2ICsxMDIsNyBAQAogI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fT1RIRVJfUEVSU0lTVF9QQUdFUyAgICAgICgweDIwMDAwMDAwKQogI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fRldfQ1VSUkVOVCAgICAgICAgICAgICAgICgweDEwMDAwMDAwKQogI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fRldfQkFDS1VQICAgICAgICAgICAgICAgICgweDA4MDAwMDAwKQorI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fQklUMjZfUFJPRFVDVF9TUEVDSUZJQyAgICgweDA0MDAwMDAwKQogI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fTUVHQVJBSUQgICAgICAgICAgICAgICAgICgweDAyMDAwMDAwKQogI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fSU5JVElBTElaQVRJT04gICAgICAgICAgICgweDAxMDAwMDAwKQogI2RlZmluZSBNUEkyX1RPT0xCT1hfQ0xFQU5fRkxBU0ggICAgICAgICAgICAgICAgICAgICgweDAwMDAwMDA0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwppbmRleCA1OGU0NTIxLi4xMTI0OGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYwpAQCAtNCw3ICs0LDggQEAKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9iYXNlLmMKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE0ICBMU0kgQ29ycG9yYXRpb24KLSAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEzLTIwMTQgQXZhZ28gVGVjaG5vbG9naWVzCisgKiAgKG1haWx0bzogTVBULUZ1c2lvbkxpbnV4LnBkbEBhdmFnb3RlY2guY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC02MzksNiArNjQwLDkgQEAKIAkJaWYgKCFpb2MtPmhpZGVfaXJfbXNnKQogCQkJZGVzYyA9ICJMb2cgRW50cnkgQWRkZWQiOwogCQlicmVhazsKKwljYXNlIE1QSTJfRVZFTlRfVEVNUF9USFJFU0hPTEQ6CisJCWRlc2MgPSAiVGVtcGVyYXR1cmUgVGhyZXNob2xkIjsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKCFkZXNjKQpAQCAtMTI5Niw2ICsxMzAwLDggQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXBseV9xLCBuZXh0LCAmaW9jLT5yZXBseV9xdWV1ZV9saXN0LCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZyZXBseV9xLT5saXN0KTsKKwkJaXJxX3NldF9hZmZpbml0eV9oaW50KHJlcGx5X3EtPnZlY3RvciwgTlVMTCk7CisJCWZyZWVfY3B1bWFza192YXIocmVwbHlfcS0+YWZmaW5pdHlfaGludCk7CiAJCXN5bmNocm9uaXplX2lycShyZXBseV9xLT52ZWN0b3IpOwogCQlmcmVlX2lycShyZXBseV9xLT52ZWN0b3IsIHJlcGx5X3EpOwogCQlrZnJlZShyZXBseV9xKTsKQEAgLTEzMjUsNiArMTMzMSwxMSBAQAogCXJlcGx5X3EtPmlvYyA9IGlvYzsKIAlyZXBseV9xLT5tc2l4X2luZGV4ID0gaW5kZXg7CiAJcmVwbHlfcS0+dmVjdG9yID0gdmVjdG9yOworCisJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmcmVwbHlfcS0+YWZmaW5pdHlfaGludCwgR0ZQX0tFUk5FTCkpCisJCXJldHVybiAtRU5PTUVNOworCWNwdW1hc2tfY2xlYXIocmVwbHlfcS0+YWZmaW5pdHlfaGludCk7CisKIAlhdG9taWNfc2V0KCZyZXBseV9xLT5idXN5LCAwKTsKIAlpZiAoaW9jLT5tc2l4X2VuYWJsZSkKIAkJc25wcmludGYocmVwbHlfcS0+bmFtZSwgTVBUX05BTUVfTEVOR1RILCAiJXMlZC1tc2l4JWQiLApAQCAtMTM1OSw2ICsxMzcwLDcgQEAKIF9iYXNlX2Fzc2lnbl9yZXBseV9xdWV1ZXMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jKQogewogCXVuc2lnbmVkIGludCBjcHUsIG5yX2NwdXMsIG5yX21zaXgsIGluZGV4ID0gMDsKKwlzdHJ1Y3QgYWRhcHRlcl9yZXBseV9xdWV1ZSAqcmVwbHlfcTsKIAogCWlmICghX2Jhc2VfaXNfY29udHJvbGxlcl9tc2l4X2VuYWJsZWQoaW9jKSkKIAkJcmV0dXJuOwpAQCAtMTM3MywyMCArMTM4NSwzMCBAQAogCiAJY3B1ID0gY3B1bWFza19maXJzdChjcHVfb25saW5lX21hc2spOwogCi0JZG8geworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVwbHlfcSwgJmlvYy0+cmVwbHlfcXVldWVfbGlzdCwgbGlzdCkgeworCiAJCXVuc2lnbmVkIGludCBpLCBncm91cCA9IG5yX2NwdXMgLyBucl9tc2l4OwogCisJCWlmIChjcHUgPj0gbnJfY3B1cykKKwkJCWJyZWFrOworCiAJCWlmIChpbmRleCA8IG5yX2NwdXMgJSBucl9tc2l4KQogCQkJZ3JvdXArKzsKIAogCQlmb3IgKGkgPSAwIDsgaSA8IGdyb3VwIDsgaSsrKSB7CiAJCQlpb2MtPmNwdV9tc2l4X3RhYmxlW2NwdV0gPSBpbmRleDsKKwkJCWNwdW1hc2tfb3IocmVwbHlfcS0+YWZmaW5pdHlfaGludCwKKwkJCQkgICByZXBseV9xLT5hZmZpbml0eV9oaW50LCBnZXRfY3B1X21hc2soY3B1KSk7CiAJCQljcHUgPSBjcHVtYXNrX25leHQoY3B1LCBjcHVfb25saW5lX21hc2spOwogCQl9CiAKKwkJaWYgKGlycV9zZXRfYWZmaW5pdHlfaGludChyZXBseV9xLT52ZWN0b3IsCisJCQkJCSAgIHJlcGx5X3EtPmFmZmluaXR5X2hpbnQpKQorCQkJZGluaXRwcmludGsoaW9jLCBwcl9pbmZvKE1QVDJTQVNfRk1UCisJCQkgICAgImVycm9yIHNldHRpbmcgYWZmaW5pdHkgaGludCBmb3IgaXJxIHZlY3RvciAlZFxuIiwKKwkJCSAgICBpb2MtPm5hbWUsIHJlcGx5X3EtPnZlY3RvcikpOwogCQlpbmRleCsrOwotCi0JfSB3aGlsZSAoY3B1IDwgbnJfY3B1cyk7CisJfQogfQogCiAvKioKQEAgLTIzMzgsNiArMjM2MCw3IEBACiAJbXB0MnNhc19jb25maWdfZ2V0X2lvY19wZzgoaW9jLCAmbXBpX3JlcGx5LCAmaW9jLT5pb2NfcGc4KTsKIAltcHQyc2FzX2NvbmZpZ19nZXRfaW91bml0X3BnMChpb2MsICZtcGlfcmVwbHksICZpb2MtPmlvdW5pdF9wZzApOwogCW1wdDJzYXNfY29uZmlnX2dldF9pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwgJmlvYy0+aW91bml0X3BnMSk7CisJbXB0MnNhc19jb25maWdfZ2V0X2lvdW5pdF9wZzgoaW9jLCAmbXBpX3JlcGx5LCAmaW9jLT5pb3VuaXRfcGc4KTsKIAlfYmFzZV9kaXNwbGF5X2lvY19jYXBhYmlsaXRpZXMoaW9jKTsKIAogCS8qCkBAIC0yMzU1LDYgKzIzNzgsOCBAQAogCWlvYy0+aW91bml0X3BnMS5GbGFncyA9IGNwdV90b19sZTMyKGlvdW5pdF9wZzFfZmxhZ3MpOwogCW1wdDJzYXNfY29uZmlnX3NldF9pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwgJmlvYy0+aW91bml0X3BnMSk7CiAKKwlpZiAoaW9jLT5pb3VuaXRfcGc4Lk51bVNlbnNvcnMpCisJCWlvYy0+dGVtcF9zZW5zb3JzX2NvdW50ID0gaW9jLT5pb3VuaXRfcGc4Lk51bVNlbnNvcnM7CiB9CiAKIC8qKgpAQCAtMjQ4Niw5ICsyNTExLDEzIEBACiAKIAkvKiBjb21tYW5kIGxpbmUgdHVuYWJsZXMgIGZvciBtYXggc2dsIGVudHJpZXMgKi8KIAlpZiAobWF4X3NnbF9lbnRyaWVzICE9IC0xKSB7Ci0JCWlvYy0+c2hvc3QtPnNnX3RhYmxlc2l6ZSA9IChtYXhfc2dsX2VudHJpZXMgPAotCQkgICAgTVBUMlNBU19TR19ERVBUSCkgPyBtYXhfc2dsX2VudHJpZXMgOgotCQkgICAgTVBUMlNBU19TR19ERVBUSDsKKwkJaW9jLT5zaG9zdC0+c2dfdGFibGVzaXplID0gIG1pbl90KHVuc2lnbmVkIHNob3J0LAorCQkJICAgICBtYXhfc2dsX2VudHJpZXMsIFNDU0lfTUFYX1NHX0NIQUlOX1NFR01FTlRTKTsKKwkJaWYgKGlvYy0+c2hvc3QtPnNnX3RhYmxlc2l6ZSA+IE1QVDJTQVNfU0dfREVQVEgpCisJCQlwcmludGsoTVBUMlNBU19XQVJOX0ZNVAorCQkJICJzZ190YWJsZXNpemUoJXUpIGlzIGJpZ2dlciB0aGFuIGtlcm5lbCBkZWZpbmVkIgorCQkJICIgU0NTSV9NQVhfU0dfU0VHTUVOVFMoJXUpXG4iLCBpb2MtPm5hbWUsCisJCQkgIGlvYy0+c2hvc3QtPnNnX3RhYmxlc2l6ZSwgTVBUMlNBU19TR19ERVBUSCk7CiAJfSBlbHNlIHsKIAkJaW9jLT5zaG9zdC0+c2dfdGFibGVzaXplID0gTVBUMlNBU19TR19ERVBUSDsKIAl9CkBAIC0zMjM2LDcgKzMyNjUsNyBAQAogCXUxNiBzbWlkOwogCXUzMiBpb2Nfc3RhdGU7CiAJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKLQl1OCBpc3N1ZV9yZXNldDsKKwlib29sIGlzc3VlX3Jlc2V0ID0gZmFsc2U7CiAJaW50IHJjOwogCXZvaWQgKnJlcXVlc3Q7CiAJdTE2IHdhaXRfc3RhdGVfY291bnQ7CkBAIC0zMzAwLDcgKzMzMjksNyBAQAogCQlfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwKIAkJICAgIHNpemVvZihNcGkyU2FzSW9Vbml0Q29udHJvbFJlcXVlc3RfdCkvNCk7CiAJCWlmICghKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDJfQ01EX1JFU0VUKSkKLQkJCWlzc3VlX3Jlc2V0ID0gMTsKKwkJCWlzc3VlX3Jlc2V0ID0gdHJ1ZTsKIAkJZ290byBpc3N1ZV9ob3N0X3Jlc2V0OwogCX0KIAlpZiAoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVQTFlfVkFMSUQpCkBAIC0zMzQxLDcgKzMzNzAsNyBAQAogCXUxNiBzbWlkOwogCXUzMiBpb2Nfc3RhdGU7CiAJdW5zaWduZWQgbG9uZyB0aW1lbGVmdDsKLQl1OCBpc3N1ZV9yZXNldDsKKwlib29sIGlzc3VlX3Jlc2V0ID0gZmFsc2U7CiAJaW50IHJjOwogCXZvaWQgKnJlcXVlc3Q7CiAJdTE2IHdhaXRfc3RhdGVfY291bnQ7CkBAIC0zMzk4LDcgKzM0MjcsNyBAQAogCQlfZGVidWdfZHVtcF9tZihtcGlfcmVxdWVzdCwKIAkJICAgIHNpemVvZihNcGkyU2VwUmVxdWVzdF90KS80KTsKIAkJaWYgKCEoaW9jLT5iYXNlX2NtZHMuc3RhdHVzICYgTVBUMl9DTURfUkVTRVQpKQotCQkJaXNzdWVfcmVzZXQgPSAxOworCQkJaXNzdWVfcmVzZXQgPSB0cnVlOwogCQlnb3RvIGlzc3VlX2hvc3RfcmVzZXQ7CiAJfQogCWlmIChpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQyX0NNRF9SRVBMWV9WQUxJRCkKQEAgLTQ1OTQsNiArNDYyMyw3IEBACiAJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfSVJfUEhZU0lDQUxfRElTSyk7CiAJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfSVJfT1BFUkFUSU9OX1NUQVRVUyk7CiAJX2Jhc2VfdW5tYXNrX2V2ZW50cyhpb2MsIE1QSTJfRVZFTlRfTE9HX0VOVFJZX0FEREVEKTsKKwlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9URU1QX1RIUkVTSE9MRCk7CiAJciA9IF9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKGlvYywgQ0FOX1NMRUVQKTsKIAlpZiAocikKIAkJZ290byBvdXRfZnJlZV9yZXNvdXJjZXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuaCBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCmluZGV4IDIzOWYxNjkuLmNhZmY4ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5oCkBAIC00LDcgKzQsOCBAQAogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2Jhc2UuaAogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTQgIExTSSBDb3Jwb3JhdGlvbgotICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMTMtMjAxNCBBdmFnbyBUZWNobm9sb2dpZXMKKyAqICAobWFpbHRvOiBNUFQtRnVzaW9uTGludXgucGRsQGF2YWdvdGVjaC5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTY3LDEwICs2OCwxMCBAQAogCiAvKiBkcml2ZXIgdmVyc2lvbmluZyBpbmZvICovCiAjZGVmaW5lIE1QVDJTQVNfRFJJVkVSX05BTUUJCSJtcHQyc2FzIgotI2RlZmluZSBNUFQyU0FTX0FVVEhPUgkiTFNJIENvcnBvcmF0aW9uIDxETC1NUFRGdXNpb25MaW51eEBsc2kuY29tPiIKKyNkZWZpbmUgTVBUMlNBU19BVVRIT1IgIkF2YWdvIFRlY2hub2xvZ2llcyA8TVBULUZ1c2lvbkxpbnV4LnBkbEBhdmFnb3RlY2guY29tPiIKICNkZWZpbmUgTVBUMlNBU19ERVNDUklQVElPTgkiTFNJIE1QVCBGdXNpb24gU0FTIDIuMCBEZXZpY2UgRHJpdmVyIgotI2RlZmluZSBNUFQyU0FTX0RSSVZFUl9WRVJTSU9OCQkiMTguMTAwLjAwLjAwIgotI2RlZmluZSBNUFQyU0FTX01BSk9SX1ZFUlNJT04JCTE4CisjZGVmaW5lIE1QVDJTQVNfRFJJVkVSX1ZFUlNJT04JCSIyMC4xMDAuMDAuMDAiCisjZGVmaW5lIE1QVDJTQVNfTUFKT1JfVkVSU0lPTgkJMjAKICNkZWZpbmUgTVBUMlNBU19NSU5PUl9WRVJTSU9OCQkxMDAKICNkZWZpbmUgTVBUMlNBU19CVUlMRF9WRVJTSU9OCQkwMAogI2RlZmluZSBNUFQyU0FTX1JFTEVBU0VfVkVSU0lPTgkJMDAKQEAgLTU4Niw2ICs1ODcsNyBAQAogCU1waTJSZXBseURlc2NyaXB0b3JzVW5pb25fdCAqcmVwbHlfcG9zdF9mcmVlOwogCWNoYXIJCQluYW1lW01QVF9OQU1FX0xFTkdUSF07CiAJYXRvbWljX3QJCWJ1c3k7CisJY3B1bWFza192YXJfdAkJYWZmaW5pdHlfaGludDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiB9OwogCkBAIC03MjUsNiArNzI3LDcgQEAKICAqIEBpb2NfcGc4OiBzdGF0aWMgaW9jIHBhZ2UgOAogICogQGlvdW5pdF9wZzA6IHN0YXRpYyBpb3VuaXQgcGFnZSAwCiAgKiBAaW91bml0X3BnMTogc3RhdGljIGlvdW5pdCBwYWdlIDEKKyAqIEBpb3VuaXRfcGc4OiBzdGF0aWMgaW91bml0IHBhZ2UgOAogICogQHNhc19oYmE6IHNhcyBob3N0IG9iamVjdAogICogQHNhc19leHBhbmRlcl9saXN0OiBleHBhbmRlciBvYmplY3QgbGlzdAogICogQHNhc19ub2RlX2xvY2s6CkBAIC03OTUsNiArNzk4LDcgQEAKICAqIEByZXBseV9wb3N0X2hvc3RfaW5kZXg6IGhlYWQgaW5kZXggaW4gdGhlIHBvb2wgd2hlcmUgRlcgY29tcGxldGVzIElPCiAgKiBAZGVsYXllZF90cl9saXN0OiB0YXJnZXQgcmVzZXQgbGluayBsaXN0CiAgKiBAZGVsYXllZF90cl92b2x1bWVfbGlzdDogdm9sdW1lIHRhcmdldCByZXNldCBsaW5rIGxpc3QKKyAqIEBAdGVtcF9zZW5zb3JzX2NvdW50OiBmbGFnIHRvIGNhcnJ5IHRoZSBudW1iZXIgb2YgdGVtcGVyYXR1cmUgc2Vuc29ycwogICovCiBzdHJ1Y3QgTVBUMlNBU19BREFQVEVSIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC04OTIsNiArODk2LDcgQEAKIAlNcGkySU9DUGFnZThfdCBpb2NfcGc4OwogCU1waTJJT1VuaXRQYWdlMF90IGlvdW5pdF9wZzA7CiAJTXBpMklPVW5pdFBhZ2UxX3QgaW91bml0X3BnMTsKKwlNcGkySU9Vbml0UGFnZThfdCBpb3VuaXRfcGc4OwogCiAJc3RydWN0IF9ib290X2RldmljZSByZXFfYm9vdF9kZXZpY2U7CiAJc3RydWN0IF9ib290X2RldmljZSByZXFfYWx0X2Jvb3RfZGV2aWNlOwpAQCAtOTkyLDYgKzk5Nyw3IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGF5ZWRfdHJfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGF5ZWRfdHJfdm9sdW1lX2xpc3Q7CisJdTgJCXRlbXBfc2Vuc29yc19jb3VudDsKIAogCS8qIGRpYWcgYnVmZmVyIHN1cHBvcnQgKi8KIAl1OAkJKmRpYWdfYnVmZmVyW01QSTJfRElBR19CVUZfVFlQRV9DT1VOVF07CkBAIC0xMTIwLDYgKzExMjYsOCBAQAogICAgICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSk7CiBpbnQgbXB0MnNhc19jb25maWdfc2V0X2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAogICAgICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSk7CitpbnQgbXB0MnNhc19jb25maWdfZ2V0X2lvdW5pdF9wZzgoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorCU1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlOF90ICpjb25maWdfcGFnZSk7CiBpbnQgbXB0MnNhc19jb25maWdfZ2V0X2lvdW5pdF9wZzMoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAogCU1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlM190ICpjb25maWdfcGFnZSwgdTE2IHN6KTsKIGludCBtcHQyc2FzX2NvbmZpZ19nZXRfc2FzX2lvdW5pdF9wZzEoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY29uZmlnLmMKaW5kZXggYzcyYTJmZi4uYzQzODE1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jb25maWcuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2NvbmZpZy5jCkBAIC0zLDcgKzMsOCBAQAogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX2Jhc2UuYwogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTQgIExTSSBDb3Jwb3JhdGlvbgotICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMTMtMjAxNCBBdmFnbyBUZWNobm9sb2dpZXMKKyAqICAobWFpbHRvOiBNUFQtRnVzaW9uTGludXgucGRsQGF2YWdvdGVjaC5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTcxOSw2ICs3MjAsNDIgQEAKIH0KIAogLyoqCisgKiBtcHQyc2FzX2NvbmZpZ19nZXRfaW91bml0X3BnOCAtIG9idGFpbiBpb3VuaXQgcGFnZSA4CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0MnNhc19jb25maWdfZ2V0X2lvdW5pdF9wZzgoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLAorCU1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlOF90ICpjb25maWdfcGFnZSkKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9JT19VTklUOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gODsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX0lPVU5JVFBBR0U4X1BBR0VWRVJTSU9OOworCW1wdDJzYXNfYmFzZV9idWlsZF96ZXJvX2xlbl9zZ2UoaW9jLCAmbXBpX3JlcXVlc3QuUGFnZUJ1ZmZlclNHRSk7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQyX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgTlVMTCwgMCk7CisJaWYgKHIpCisJCWdvdG8gb3V0OworCisJbXBpX3JlcXVlc3QuQWN0aW9uID0gTVBJMl9DT05GSUdfQUNUSU9OX1BBR0VfUkVBRF9DVVJSRU5UOworCXIgPSBfY29uZmlnX3JlcXVlc3QoaW9jLCAmbXBpX3JlcXVlc3QsIG1waV9yZXBseSwKKwkgICAgTVBUMl9DT05GSUdfUEFHRV9ERUZBVUxUX1RJTUVPVVQsIGNvbmZpZ19wYWdlLAorCSAgICBzaXplb2YoKmNvbmZpZ19wYWdlKSk7Cisgb3V0OgorCXJldHVybiByOworfQorCisvKioKICAqIG1wdDJzYXNfY29uZmlnX2dldF9pb2NfcGc4IC0gb2J0YWluIGlvYyBwYWdlIDgKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQG1waV9yZXBseTogcmVwbHkgbWYgcGF5bG9hZCByZXR1cm5lZCBmcm9tIGZpcm13YXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYwppbmRleCBjYTRlNTYzLi40ZTUwOTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKQEAgLTQsNyArNCw4IEBACiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfY3RsLmMKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE0ICBMU0kgQ29ycG9yYXRpb24KLSAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEzLTIwMTQgQXZhZ28gVGVjaG5vbG9naWVzCisgKiAgKG1haWx0bzogTVBULUZ1c2lvbkxpbnV4LnBkbEBhdmFnb3RlY2guY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5oIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaAppbmRleCA3Zjg0MmM4Li40NmIyZmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmgKQEAgLTQsNyArNCw4IEBACiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfY3RsLmgKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE0ICBMU0kgQ29ycG9yYXRpb24KLSAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEzLTIwMTQgQXZhZ28gVGVjaG5vbG9naWVzCisgKiAgKG1haWx0bzogTVBULUZ1c2lvbkxpbnV4LnBkbEBhdmFnb3RlY2guY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2RlYnVnLmggYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2RlYnVnLmgKaW5kZXggY2M1N2VmMy4uMjc3MTIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfZGVidWcuaApAQCAtMyw3ICszLDggQEAKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0Ml9kZWJ1Zy5jCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNCAgTFNJIENvcnBvcmF0aW9uCi0gKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAxMy0yMDE0IEF2YWdvIFRlY2hub2xvZ2llcworICogIChtYWlsdG86IE1QVC1GdXNpb25MaW51eC5wZGxAYXZhZ290ZWNoLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jIGIvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCmluZGV4IDZhMWMwMzYuLjNmMjYxNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKQEAgLTMsNyArMyw4IEBACiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJfc2NzaWguYwogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTQgIExTSSBDb3Jwb3JhdGlvbgotICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwMTMtMjAxNCBBdmFnbyBUZWNobm9sb2dpZXMKKyAqICAobWFpbHRvOiBNUFQtRnVzaW9uTGludXgucGRsQGF2YWdvdGVjaC5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTI3MjksOSArMjczMCwxOCBAQAogCSAgICBpb2MtPm5hbWUsIHNjbWQpOwogCXNjc2lfcHJpbnRfY29tbWFuZChzY21kKTsKIAorCWlmIChpb2MtPmlzX2RyaXZlcl9sb2FkaW5nKSB7CisJCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJCbG9ja2luZyB0aGUgaG9zdCByZXNldFxuIiwKKwkJCQkJCQkgIGlvYy0+bmFtZSk7CisJCXIgPSBGQUlMRUQ7CisJCWdvdG8gb3V0OworCX0KKwogCXJldHZhbCA9IG1wdDJzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoaW9jLCBDQU5fU0xFRVAsCiAJICAgIEZPUkNFX0JJR19IQU1NRVIpOwogCXIgPSAocmV0dmFsIDwgMCkgPyBGQUlMRUQgOiBTVUNDRVNTOworCisgb3V0OgogCXByaW50ayhNUFQyU0FTX0lORk9fRk1UICJob3N0IHJlc2V0OiAlcyBzY21kKCVwKVxuIiwKIAkgICAgaW9jLT5uYW1lLCAoKHIgPT0gU1VDQ0VTUykgPyAiU1VDQ0VTUyIgOiAiRkFJTEVEIiksIHNjbWQpOwogCkBAIC0zNjQ3LDYgKzM2NTcsMzEgQEAKIH0KIAogLyoqCisgKiBfc2NzaWhfdGVtcF90aHJlc2hvbGRfZXZlbnRzIC0gZGlzcGxheSB0ZW1wZXJhdHVyZSB0aHJlc2hvbGQgZXhjZWVkZWQgZXZlbnRzCisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBldmVudF9kYXRhOiB0aGUgdGVtcCB0aHJlc2hvbGQgZXZlbnQgZGF0YQorICogQ29udGV4dDogaW50ZXJydXB0IHRpbWUuCisgKgorICogUmV0dXJuIG5vdGhpbmcuCisgKi8KK3N0YXRpYyB2b2lkCitfc2NzaWhfdGVtcF90aHJlc2hvbGRfZXZlbnRzKHN0cnVjdCBNUFQyU0FTX0FEQVBURVIgKmlvYywKKwlNcGkyRXZlbnREYXRhVGVtcGVyYXR1cmVfdCAqZXZlbnRfZGF0YSkKK3sKKwlpZiAoaW9jLT50ZW1wX3NlbnNvcnNfY291bnQgPj0gZXZlbnRfZGF0YS0+U2Vuc29yTnVtKSB7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIlRlbXBlcmF0dXJlIFRocmVzaG9sZCBmbGFncyAlcyVzJXMlcyIKKwkJICAiIGV4Y2VlZGVkIGZvciBTZW5zb3I6ICVkICEhIVxuIiwgaW9jLT5uYW1lLAorCQkgICgobGUxNl90b19jcHUoZXZlbnRfZGF0YS0+U3RhdHVzKSAmIDB4MSkgPT0gMSkgPyAiMCAiIDogIiAiLAorCQkgICgobGUxNl90b19jcHUoZXZlbnRfZGF0YS0+U3RhdHVzKSAmIDB4MikgPT0gMikgPyAiMSAiIDogIiAiLAorCQkgICgobGUxNl90b19jcHUoZXZlbnRfZGF0YS0+U3RhdHVzKSAmIDB4NCkgPT0gNCkgPyAiMiAiIDogIiAiLAorCQkgICgobGUxNl90b19jcHUoZXZlbnRfZGF0YS0+U3RhdHVzKSAmIDB4OCkgPT0gOCkgPyAiMyAiIDogIiAiLAorCQkgIGV2ZW50X2RhdGEtPlNlbnNvck51bSk7CisJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIkN1cnJlbnQgVGVtcCBJbiBDZWxzaXVzOiAlZFxuIiwKKwkJCWlvYy0+bmFtZSwgZXZlbnRfZGF0YS0+Q3VycmVudFRlbXBlcmF0dXJlKTsKKwl9Cit9CisKKy8qKgogICogX3Njc2loX2ZsdXNoX3J1bm5pbmdfY21kcyAtIGNvbXBsZXRpbmcgb3V0c3RhbmRpbmcgY29tbWFuZHMuCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqCkBAIC00NTA5LDYgKzQ1NDQsMTAgQEAKIAkJCXNjbWQtPnJlc3VsdCA9IERJRF9UUkFOU1BPUlRfRElTUlVQVEVEIDw8IDE2OwogCQkJZ290byBvdXQ7CiAJCX0KKwkJaWYgKGxvZ19pbmZvID09IDB4MzIwMTAwODEpIHsKKwkJCXNjbWQtPnJlc3VsdCA9IERJRF9SRVNFVCA8PCAxNjsKKwkJCWJyZWFrOworCQl9CiAJCXNjbWQtPnJlc3VsdCA9IERJRF9TT0ZUX0VSUk9SIDw8IDE2OwogCQlicmVhazsKIAljYXNlIE1QSTJfSU9DU1RBVFVTX1NDU0lfVEFTS19URVJNSU5BVEVEOgpAQCAtNzU1Nyw2ICs3NTk2LDEyIEBACiAJY2FzZSBNUEkyX0VWRU5UX0lSX1BIWVNJQ0FMX0RJU0s6CiAJCWJyZWFrOwogCisJY2FzZSBNUEkyX0VWRU5UX1RFTVBfVEhSRVNIT0xEOgorCQlfc2NzaWhfdGVtcF90aHJlc2hvbGRfZXZlbnRzKGlvYywKKwkJCShNcGkyRXZlbnREYXRhVGVtcGVyYXR1cmVfdCAqKQorCQkJbXBpX3JlcGx5LT5FdmVudERhdGEpOworCQlicmVhazsKKwogCWRlZmF1bHQ6IC8qIGlnbm9yZSB0aGUgcmVzdCAqLwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfdHJhbnNwb3J0LmMKaW5kZXggZTY4OWJmMi4uZmYyNTAwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc190cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3RyYW5zcG9ydC5jCkBAIC0zLDcgKzMsOCBAQAogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyX3RyYW5zcG9ydC5jCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxNCAgTFNJIENvcnBvcmF0aW9uCi0gKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDAxMy0yMDE0IEF2YWdvIFRlY2hub2xvZ2llcworICogIChtYWlsdG86IE1QVC1GdXNpb25MaW51eC5wZGxAYXZhZ290ZWNoLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19iYXNlLmMgYi9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX2Jhc2UuYwppbmRleCAxNTYwMTE1Li4xNGE3ODFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX2Jhc2UuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX2Jhc2UuYwpAQCAtNCw3ICs0LDggQEAKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19iYXNlLmMKICAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0ICBMU0kgQ29ycG9yYXRpb24KLSAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBBdmFnbyBUZWNobm9sb2dpZXMKKyAqICAobWFpbHRvOiBNUFQtRnVzaW9uTGludXgucGRsQGF2YWdvdGVjaC5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTYxOSw2ICs2MjAsOSBAQAogCWNhc2UgTVBJMl9FVkVOVF9MT0dfRU5UUllfQURERUQ6CiAJCWRlc2MgPSAiTG9nIEVudHJ5IEFkZGVkIjsKIAkJYnJlYWs7CisJY2FzZSBNUEkyX0VWRU5UX1RFTVBfVEhSRVNIT0xEOgorCQlkZXNjID0gIlRlbXBlcmF0dXJlIFRocmVzaG9sZCI7CisJCWJyZWFrOwogCX0KIAogCWlmICghZGVzYykKQEAgLTE1ODAsNiArMTU4NCw4IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVwbHlfcSwgbmV4dCwgJmlvYy0+cmVwbHlfcXVldWVfbGlzdCwgbGlzdCkgewogCQlsaXN0X2RlbCgmcmVwbHlfcS0+bGlzdCk7CisJCWlycV9zZXRfYWZmaW5pdHlfaGludChyZXBseV9xLT52ZWN0b3IsIE5VTEwpOworCQlmcmVlX2NwdW1hc2tfdmFyKHJlcGx5X3EtPmFmZmluaXR5X2hpbnQpOwogCQlzeW5jaHJvbml6ZV9pcnEocmVwbHlfcS0+dmVjdG9yKTsKIAkJZnJlZV9pcnEocmVwbHlfcS0+dmVjdG9yLCByZXBseV9xKTsKIAkJa2ZyZWUocmVwbHlfcSk7CkBAIC0xNjA5LDYgKzE2MTUsMTEgQEAKIAlyZXBseV9xLT5pb2MgPSBpb2M7CiAJcmVwbHlfcS0+bXNpeF9pbmRleCA9IGluZGV4OwogCXJlcGx5X3EtPnZlY3RvciA9IHZlY3RvcjsKKworCWlmICghYWxsb2NfY3B1bWFza192YXIoJnJlcGx5X3EtPmFmZmluaXR5X2hpbnQsIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVOT01FTTsKKwljcHVtYXNrX2NsZWFyKHJlcGx5X3EtPmFmZmluaXR5X2hpbnQpOworCiAJYXRvbWljX3NldCgmcmVwbHlfcS0+YnVzeSwgMCk7CiAJaWYgKGlvYy0+bXNpeF9lbmFibGUpCiAJCXNucHJpbnRmKHJlcGx5X3EtPm5hbWUsIE1QVF9OQU1FX0xFTkdUSCwgIiVzJWQtbXNpeCVkIiwKQEAgLTE2NDMsNiArMTY1NCw3IEBACiBfYmFzZV9hc3NpZ25fcmVwbHlfcXVldWVzKHN0cnVjdCBNUFQzU0FTX0FEQVBURVIgKmlvYykKIHsKIAl1bnNpZ25lZCBpbnQgY3B1LCBucl9jcHVzLCBucl9tc2l4LCBpbmRleCA9IDA7CisJc3RydWN0IGFkYXB0ZXJfcmVwbHlfcXVldWUgKnJlcGx5X3E7CiAKIAlpZiAoIV9iYXNlX2lzX2NvbnRyb2xsZXJfbXNpeF9lbmFibGVkKGlvYykpCiAJCXJldHVybjsKQEAgLTE2NTcsMjAgKzE2NjksMzAgQEAKIAogCWNwdSA9IGNwdW1hc2tfZmlyc3QoY3B1X29ubGluZV9tYXNrKTsKIAotCWRvIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcGx5X3EsICZpb2MtPnJlcGx5X3F1ZXVlX2xpc3QsIGxpc3QpIHsKKwogCQl1bnNpZ25lZCBpbnQgaSwgZ3JvdXAgPSBucl9jcHVzIC8gbnJfbXNpeDsKIAorCQlpZiAoY3B1ID49IG5yX2NwdXMpCisJCQlicmVhazsKKwogCQlpZiAoaW5kZXggPCBucl9jcHVzICUgbnJfbXNpeCkKIAkJCWdyb3VwKys7CiAKIAkJZm9yIChpID0gMCA7IGkgPCBncm91cCA7IGkrKykgewogCQkJaW9jLT5jcHVfbXNpeF90YWJsZVtjcHVdID0gaW5kZXg7CisJCQljcHVtYXNrX29yKHJlcGx5X3EtPmFmZmluaXR5X2hpbnQsCisJCQkJICAgcmVwbHlfcS0+YWZmaW5pdHlfaGludCwgZ2V0X2NwdV9tYXNrKGNwdSkpOwogCQkJY3B1ID0gY3B1bWFza19uZXh0KGNwdSwgY3B1X29ubGluZV9tYXNrKTsKIAkJfQogCisJCWlmIChpcnFfc2V0X2FmZmluaXR5X2hpbnQocmVwbHlfcS0+dmVjdG9yLAorCQkJCQkgICByZXBseV9xLT5hZmZpbml0eV9oaW50KSkKKwkJCWRpbml0cHJpbnRrKGlvYywgcHJfaW5mbyhNUFQzU0FTX0ZNVAorCQkJICAgICJlcnJvciBzZXR0aW5nIGFmZmluaXR5IGhpbnQgZm9yIGlycSB2ZWN0b3IgJWRcbiIsCisJCQkgICAgaW9jLT5uYW1lLCByZXBseV9xLT52ZWN0b3IpKTsKIAkJaW5kZXgrKzsKLQotCX0gd2hpbGUgKGNwdSA8IG5yX2NwdXMpOworCX0KIH0KIAogLyoqCkBAIC0yNTAwLDYgKzI1MjIsNyBAQAogCW1wdDNzYXNfY29uZmlnX2dldF9pb2NfcGc4KGlvYywgJm1waV9yZXBseSwgJmlvYy0+aW9jX3BnOCk7CiAJbXB0M3Nhc19jb25maWdfZ2V0X2lvdW5pdF9wZzAoaW9jLCAmbXBpX3JlcGx5LCAmaW9jLT5pb3VuaXRfcGcwKTsKIAltcHQzc2FzX2NvbmZpZ19nZXRfaW91bml0X3BnMShpb2MsICZtcGlfcmVwbHksICZpb2MtPmlvdW5pdF9wZzEpOworCW1wdDNzYXNfY29uZmlnX2dldF9pb3VuaXRfcGc4KGlvYywgJm1waV9yZXBseSwgJmlvYy0+aW91bml0X3BnOCk7CiAJX2Jhc2VfZGlzcGxheV9pb2NfY2FwYWJpbGl0aWVzKGlvYyk7CiAKIAkvKgpAQCAtMjUxNiw2ICsyNTM5LDkgQEAKIAkJICAgIE1QSTJfSU9VTklUUEFHRTFfRElTQUJMRV9UQVNLX1NFVF9GVUxMX0hBTkRMSU5HOwogCWlvYy0+aW91bml0X3BnMS5GbGFncyA9IGNwdV90b19sZTMyKGlvdW5pdF9wZzFfZmxhZ3MpOwogCW1wdDNzYXNfY29uZmlnX3NldF9pb3VuaXRfcGcxKGlvYywgJm1waV9yZXBseSwgJmlvYy0+aW91bml0X3BnMSk7CisKKwlpZiAoaW9jLT5pb3VuaXRfcGc4Lk51bVNlbnNvcnMpCisJCWlvYy0+dGVtcF9zZW5zb3JzX2NvdW50ID0gaW9jLT5pb3VuaXRfcGc4Lk51bVNlbnNvcnM7CiB9CiAKIC8qKgpAQCAtMjY1OSw4ICsyNjg1LDE0IEBACiAKIAlpZiAoc2dfdGFibGVzaXplIDwgTVBUM1NBU19NSU5fUEhZU19TRUdNRU5UUykKIAkJc2dfdGFibGVzaXplID0gTVBUM1NBU19NSU5fUEhZU19TRUdNRU5UUzsKLQllbHNlIGlmIChzZ190YWJsZXNpemUgPiBNUFQzU0FTX01BWF9QSFlTX1NFR01FTlRTKQotCQlzZ190YWJsZXNpemUgPSBNUFQzU0FTX01BWF9QSFlTX1NFR01FTlRTOworCWVsc2UgaWYgKHNnX3RhYmxlc2l6ZSA+IE1QVDNTQVNfTUFYX1BIWVNfU0VHTUVOVFMpIHsKKwkJc2dfdGFibGVzaXplID0gbWluX3QodW5zaWduZWQgc2hvcnQsIHNnX3RhYmxlc2l6ZSwKKwkJCQkgICAgICBTQ1NJX01BWF9TR19DSEFJTl9TRUdNRU5UUyk7CisJCXByX3dhcm4oTVBUM1NBU19GTVQKKwkJICJzZ190YWJsZXNpemUoJXUpIGlzIGJpZ2dlciB0aGFuIGtlcm5lbCIKKwkJICIgZGVmaW5lZCBTQ1NJX01BWF9TR19TRUdNRU5UUygldSlcbiIsIGlvYy0+bmFtZSwKKwkJIHNnX3RhYmxlc2l6ZSwgTVBUM1NBU19NQVhfUEhZU19TRUdNRU5UUyk7CisJfQogCWlvYy0+c2hvc3QtPnNnX3RhYmxlc2l6ZSA9IHNnX3RhYmxlc2l6ZTsKIAogCWlvYy0+aGlfcHJpb3JpdHlfZGVwdGggPSBmYWN0cy0+SGlnaFByaW9yaXR5Q3JlZGl0OwpAQCAtMzQxOSw3ICszNDUxLDcgQEAKIAl1MTYgc21pZDsKIAl1MzIgaW9jX3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7Ci0JdTggaXNzdWVfcmVzZXQ7CisJYm9vbCBpc3N1ZV9yZXNldCA9IGZhbHNlOwogCWludCByYzsKIAl2b2lkICpyZXF1ZXN0OwogCXUxNiB3YWl0X3N0YXRlX2NvdW50OwpAQCAtMzQ4Myw3ICszNTE1LDcgQEAKIAkJX2RlYnVnX2R1bXBfbWYobXBpX3JlcXVlc3QsCiAJCSAgICBzaXplb2YoTXBpMlNhc0lvVW5pdENvbnRyb2xSZXF1ZXN0X3QpLzQpOwogCQlpZiAoIShpb2MtPmJhc2VfY21kcy5zdGF0dXMgJiBNUFQzX0NNRF9SRVNFVCkpCi0JCQlpc3N1ZV9yZXNldCA9IDE7CisJCQlpc3N1ZV9yZXNldCA9IHRydWU7CiAJCWdvdG8gaXNzdWVfaG9zdF9yZXNldDsKIAl9CiAJaWYgKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDNfQ01EX1JFUExZX1ZBTElEKQpAQCAtMzUyMyw3ICszNTU1LDcgQEAKIAl1MTYgc21pZDsKIAl1MzIgaW9jX3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7Ci0JdTggaXNzdWVfcmVzZXQ7CisJYm9vbCBpc3N1ZV9yZXNldCA9IGZhbHNlOwogCWludCByYzsKIAl2b2lkICpyZXF1ZXN0OwogCXUxNiB3YWl0X3N0YXRlX2NvdW50OwpAQCAtMzU4MSw3ICszNjEzLDcgQEAKIAkJX2RlYnVnX2R1bXBfbWYobXBpX3JlcXVlc3QsCiAJCSAgICBzaXplb2YoTXBpMlNlcFJlcXVlc3RfdCkvNCk7CiAJCWlmICghKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDNfQ01EX1JFU0VUKSkKLQkJCWlzc3VlX3Jlc2V0ID0gMTsKKwkJCWlzc3VlX3Jlc2V0ID0gZmFsc2U7CiAJCWdvdG8gaXNzdWVfaG9zdF9yZXNldDsKIAl9CiAJaWYgKGlvYy0+YmFzZV9jbWRzLnN0YXR1cyAmIE1QVDNfQ01EX1JFUExZX1ZBTElEKQpAQCAtNDcyMCw2ICs0NzUyLDcgQEAKIAlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9JUl9QSFlTSUNBTF9ESVNLKTsKIAlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9JUl9PUEVSQVRJT05fU1RBVFVTKTsKIAlfYmFzZV91bm1hc2tfZXZlbnRzKGlvYywgTVBJMl9FVkVOVF9MT0dfRU5UUllfQURERUQpOworCV9iYXNlX3VubWFza19ldmVudHMoaW9jLCBNUEkyX0VWRU5UX1RFTVBfVEhSRVNIT0xEKTsKIAogCXIgPSBfYmFzZV9tYWtlX2lvY19vcGVyYXRpb25hbChpb2MsIENBTl9TTEVFUCk7CiAJaWYgKHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX2Jhc2UuaCBiL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfYmFzZS5oCmluZGV4IDQwOTI2YWEuLmFmYTg4MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfYmFzZS5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfYmFzZS5oCkBAIC00LDcgKzQsOCBAQAogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX2Jhc2UuaAogICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgIExTSSBDb3Jwb3JhdGlvbgotICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEF2YWdvIFRlY2hub2xvZ2llcworICogIChtYWlsdG86IE1QVC1GdXNpb25MaW51eC5wZGxAYXZhZ290ZWNoLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtNjgsNyArNjksNyBAQAogCiAvKiBkcml2ZXIgdmVyc2lvbmluZyBpbmZvICovCiAjZGVmaW5lIE1QVDNTQVNfRFJJVkVSX05BTUUJCSJtcHQzc2FzIgotI2RlZmluZSBNUFQzU0FTX0FVVEhPUgkiTFNJIENvcnBvcmF0aW9uIDxETC1NUFRGdXNpb25MaW51eEBsc2kuY29tPiIKKyNkZWZpbmUgTVBUM1NBU19BVVRIT1IgIkF2YWdvIFRlY2hub2xvZ2llcyA8TVBULUZ1c2lvbkxpbnV4LnBkbEBhdmFnb3RlY2guY29tPiIKICNkZWZpbmUgTVBUM1NBU19ERVNDUklQVElPTgkiTFNJIE1QVCBGdXNpb24gU0FTIDMuMCBEZXZpY2UgRHJpdmVyIgogI2RlZmluZSBNUFQzU0FTX0RSSVZFUl9WRVJTSU9OCQkiMDQuMTAwLjAwLjAwIgogI2RlZmluZSBNUFQzU0FTX01BSk9SX1ZFUlNJT04JCTQKQEAgLTUwNiw2ICs1MDcsNyBAQAogCU1waTJSZXBseURlc2NyaXB0b3JzVW5pb25fdCAqcmVwbHlfcG9zdF9mcmVlOwogCWNoYXIJCQluYW1lW01QVF9OQU1FX0xFTkdUSF07CiAJYXRvbWljX3QJCWJ1c3k7CisJY3B1bWFza192YXJfdAkJYWZmaW5pdHlfaGludDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiB9OwogCkBAIC02NTksNiArNjYxLDcgQEAKICAqIEBpb2NfcGc4OiBzdGF0aWMgaW9jIHBhZ2UgOAogICogQGlvdW5pdF9wZzA6IHN0YXRpYyBpb3VuaXQgcGFnZSAwCiAgKiBAaW91bml0X3BnMTogc3RhdGljIGlvdW5pdCBwYWdlIDEKKyAqIEBpb3VuaXRfcGc4OiBzdGF0aWMgaW91bml0IHBhZ2UgOAogICogQHNhc19oYmE6IHNhcyBob3N0IG9iamVjdAogICogQHNhc19leHBhbmRlcl9saXN0OiBleHBhbmRlciBvYmplY3QgbGlzdAogICogQHNhc19ub2RlX2xvY2s6CkBAIC03MjgsNiArNzMxLDcgQEAKICAqIEByZXBseV9wb3N0X2hvc3RfaW5kZXg6IGhlYWQgaW5kZXggaW4gdGhlIHBvb2wgd2hlcmUgRlcgY29tcGxldGVzIElPCiAgKiBAZGVsYXllZF90cl9saXN0OiB0YXJnZXQgcmVzZXQgbGluayBsaXN0CiAgKiBAZGVsYXllZF90cl92b2x1bWVfbGlzdDogdm9sdW1lIHRhcmdldCByZXNldCBsaW5rIGxpc3QKKyAqIEBAdGVtcF9zZW5zb3JzX2NvdW50OiBmbGFnIHRvIGNhcnJ5IHRoZSBudW1iZXIgb2YgdGVtcGVyYXR1cmUgc2Vuc29ycwogICovCiBzdHJ1Y3QgTVBUM1NBU19BREFQVEVSIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CkBAIC04MzQsNiArODM4LDcgQEAKIAlNcGkySU9DUGFnZThfdCBpb2NfcGc4OwogCU1waTJJT1VuaXRQYWdlMF90IGlvdW5pdF9wZzA7CiAJTXBpMklPVW5pdFBhZ2UxX3QgaW91bml0X3BnMTsKKwlNcGkySU9Vbml0UGFnZThfdCBpb3VuaXRfcGc4OwogCiAJc3RydWN0IF9ib290X2RldmljZSByZXFfYm9vdF9kZXZpY2U7CiAJc3RydWN0IF9ib290X2RldmljZSByZXFfYWx0X2Jvb3RfZGV2aWNlOwpAQCAtOTM0LDYgKzkzOSw3IEBACiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGF5ZWRfdHJfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlbGF5ZWRfdHJfdm9sdW1lX2xpc3Q7CisJdTgJCXRlbXBfc2Vuc29yc19jb3VudDsKIAogCS8qIGRpYWcgYnVmZmVyIHN1cHBvcnQgKi8KIAl1OAkJKmRpYWdfYnVmZmVyW01QSTJfRElBR19CVUZfVFlQRV9DT1VOVF07CkBAIC0xMDgyLDYgKzEwODgsOCBAQAogCSptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSk7CiBpbnQgbXB0M3Nhc19jb25maWdfc2V0X2lvdW5pdF9wZzEoc3RydWN0IE1QVDNTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAogCSptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlMV90ICpjb25maWdfcGFnZSk7CitpbnQgbXB0M3Nhc19jb25maWdfZ2V0X2lvdW5pdF9wZzgoc3RydWN0IE1QVDNTQVNfQURBUFRFUiAqaW9jLCBNcGkyQ29uZmlnUmVwbHlfdAorCSptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlOF90ICpjb25maWdfcGFnZSk7CiBpbnQgbXB0M3Nhc19jb25maWdfZ2V0X3Nhc19pb3VuaXRfcGcxKHN0cnVjdCBNUFQzU0FTX0FEQVBURVIgKmlvYywKIAlNcGkyQ29uZmlnUmVwbHlfdCAqbXBpX3JlcGx5LCBNcGkyU2FzSU9Vbml0UGFnZTFfdCAqY29uZmlnX3BhZ2UsCiAJdTE2IHN6KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfY29uZmlnLmMgYi9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX2NvbmZpZy5jCmluZGV4IDQ0NzJjMmEuLmU0NWM0NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfY29uZmlnLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19jb25maWcuYwpAQCAtMyw3ICszLDggQEAKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19iYXNlLmMKICAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0ICBMU0kgQ29ycG9yYXRpb24KLSAqICAobWFpbHRvOkRMLU1QVEZ1c2lvbkxpbnV4QGxzaS5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNCBBdmFnbyBUZWNobm9sb2dpZXMKKyAqICAobWFpbHRvOiBNUFQtRnVzaW9uTGludXgucGRsQGF2YWdvdGVjaC5jb20pCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTg3MSw2ICs4NzIsNDIgQEAKIH0KIAogLyoqCisgKiBtcHQzc2FzX2NvbmZpZ19nZXRfaW91bml0X3BnOCAtIG9idGFpbiBpb3VuaXQgcGFnZSA4CisgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKKyAqIEBtcGlfcmVwbHk6IHJlcGx5IG1mIHBheWxvYWQgcmV0dXJuZWQgZnJvbSBmaXJtd2FyZQorICogQGNvbmZpZ19wYWdlOiBjb250ZW50cyBvZiB0aGUgY29uZmlnIHBhZ2UKKyAqIENvbnRleHQ6IHNsZWVwLgorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgbm9uLXplcm8gZm9yIGZhaWx1cmUuCisgKi8KK2ludAorbXB0M3Nhc19jb25maWdfZ2V0X2lvdW5pdF9wZzgoc3RydWN0IE1QVDNTQVNfQURBUFRFUiAqaW9jLAorCU1waTJDb25maWdSZXBseV90ICptcGlfcmVwbHksIE1waTJJT1VuaXRQYWdlOF90ICpjb25maWdfcGFnZSkKK3sKKwlNcGkyQ29uZmlnUmVxdWVzdF90IG1waV9yZXF1ZXN0OworCWludCByOworCisJbWVtc2V0KCZtcGlfcmVxdWVzdCwgMCwgc2l6ZW9mKE1waTJDb25maWdSZXF1ZXN0X3QpKTsKKwltcGlfcmVxdWVzdC5GdW5jdGlvbiA9IE1QSTJfRlVOQ1RJT05fQ09ORklHOworCW1waV9yZXF1ZXN0LkFjdGlvbiA9IE1QSTJfQ09ORklHX0FDVElPTl9QQUdFX0hFQURFUjsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVR5cGUgPSBNUEkyX0NPTkZJR19QQUdFVFlQRV9JT19VTklUOworCW1waV9yZXF1ZXN0LkhlYWRlci5QYWdlTnVtYmVyID0gODsKKwltcGlfcmVxdWVzdC5IZWFkZXIuUGFnZVZlcnNpb24gPSBNUEkyX0lPVU5JVFBBR0U4X1BBR0VWRVJTSU9OOworCWlvYy0+YnVpbGRfemVyb19sZW5fc2dlX21waShpb2MsICZtcGlfcmVxdWVzdC5QYWdlQnVmZmVyU0dFKTsKKwlyID0gX2NvbmZpZ19yZXF1ZXN0KGlvYywgJm1waV9yZXF1ZXN0LCBtcGlfcmVwbHksCisJICAgIE1QVDNfQ09ORklHX1BBR0VfREVGQVVMVF9USU1FT1VULCBOVUxMLCAwKTsKKwlpZiAocikKKwkJZ290byBvdXQ7CisKKwltcGlfcmVxdWVzdC5BY3Rpb24gPSBNUEkyX0NPTkZJR19BQ1RJT05fUEFHRV9SRUFEX0NVUlJFTlQ7CisJciA9IF9jb25maWdfcmVxdWVzdChpb2MsICZtcGlfcmVxdWVzdCwgbXBpX3JlcGx5LAorCSAgICBNUFQzX0NPTkZJR19QQUdFX0RFRkFVTFRfVElNRU9VVCwgY29uZmlnX3BhZ2UsCisJICAgIHNpemVvZigqY29uZmlnX3BhZ2UpKTsKKyBvdXQ6CisJcmV0dXJuIHI7Cit9CisKKy8qKgogICogbXB0M3Nhc19jb25maWdfZ2V0X2lvY19wZzggLSBvYnRhaW4gaW9jIHBhZ2UgOAogICogQGlvYzogcGVyIGFkYXB0ZXIgb2JqZWN0CiAgKiBAbXBpX3JlcGx5OiByZXBseSBtZiBwYXlsb2FkIHJldHVybmVkIGZyb20gZmlybXdhcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfY3RsLmMgYi9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX2N0bC5jCmluZGV4IGRjYTE0ODcuLjA4MGM4YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfY3RsLmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19jdGwuYwpAQCAtNCw3ICs0LDggQEAKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19jdGwuYwogICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgIExTSSBDb3Jwb3JhdGlvbgotICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEF2YWdvIFRlY2hub2xvZ2llcworICogIChtYWlsdG86IE1QVC1GdXNpb25MaW51eC5wZGxAYXZhZ290ZWNoLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19jdGwuaCBiL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfY3RsLmgKaW5kZXggNWYzZDdmZC4uYWVlOTljZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19jdGwuaAorKysgYi9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX2N0bC5oCkBAIC00LDcgKzQsOCBAQAogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX2N0bC5oCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCAgTFNJIENvcnBvcmF0aW9uCi0gKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgQXZhZ28gVGVjaG5vbG9naWVzCisgKiAgKG1haWx0bzogTVBULUZ1c2lvbkxpbnV4LnBkbEBhdmFnb3RlY2guY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX2RlYnVnLmggYi9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX2RlYnVnLmgKaW5kZXggNDc3OGU3ZC4uNGU4YTYzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfZGVidWcuaApAQCAtMyw3ICszLDggQEAKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19kZWJ1Zy5jCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCAgTFNJIENvcnBvcmF0aW9uCi0gKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgQXZhZ28gVGVjaG5vbG9naWVzCisgKiAgKG1haWx0bzogTVBULUZ1c2lvbkxpbnV4LnBkbEBhdmFnb3RlY2guY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX3Njc2loLmMgYi9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX3Njc2loLmMKaW5kZXggOTQyNjFlZS4uNWE5N2UzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19zY3NpaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfc2NzaWguYwpAQCAtMyw3ICszLDggQEAKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc19zY3NpaC5jCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCAgTFNJIENvcnBvcmF0aW9uCi0gKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgQXZhZ28gVGVjaG5vbG9naWVzCisgKiAgKG1haWx0bzogTVBULUZ1c2lvbkxpbnV4LnBkbEBhdmFnb3RlY2guY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0yMzkyLDkgKzIzOTMsMTcgQEAKIAkgICAgaW9jLT5uYW1lLCBzY21kKTsKIAlzY3NpX3ByaW50X2NvbW1hbmQoc2NtZCk7CiAKKwlpZiAoaW9jLT5pc19kcml2ZXJfbG9hZGluZykgeworCQlwcl9pbmZvKE1QVDNTQVNfRk1UICJCbG9ja2luZyB0aGUgaG9zdCByZXNldFxuIiwKKwkJICAgIGlvYy0+bmFtZSk7CisJCXIgPSBGQUlMRUQ7CisJCWdvdG8gb3V0OworCX0KKwogCXJldHZhbCA9IG1wdDNzYXNfYmFzZV9oYXJkX3Jlc2V0X2hhbmRsZXIoaW9jLCBDQU5fU0xFRVAsCiAJICAgIEZPUkNFX0JJR19IQU1NRVIpOwogCXIgPSAocmV0dmFsIDwgMCkgPyBGQUlMRUQgOiBTVUNDRVNTOworb3V0OgogCXByX2luZm8oTVBUM1NBU19GTVQgImhvc3QgcmVzZXQ6ICVzIHNjbWQoJXApXG4iLAogCSAgICBpb2MtPm5hbWUsICgociA9PSBTVUNDRVNTKSA/ICJTVUNDRVNTIiA6ICJGQUlMRUQiKSwgc2NtZCk7CiAKQEAgLTMzNDIsNiArMzM1MSwzMSBAQAogfQogCiAvKioKKyAqIF9zY3NpaF90ZW1wX3RocmVzaG9sZF9ldmVudHMgLSBkaXNwbGF5IHRlbXBlcmF0dXJlIHRocmVzaG9sZCBleGNlZWRlZCBldmVudHMKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQGV2ZW50X2RhdGE6IHRoZSB0ZW1wIHRocmVzaG9sZCBldmVudCBkYXRhCisgKiBDb250ZXh0OiBpbnRlcnJ1cHQgdGltZS4KKyAqCisgKiBSZXR1cm4gbm90aGluZy4KKyAqLworc3RhdGljIHZvaWQKK19zY3NpaF90ZW1wX3RocmVzaG9sZF9ldmVudHMoc3RydWN0IE1QVDNTQVNfQURBUFRFUiAqaW9jLAorCU1waTJFdmVudERhdGFUZW1wZXJhdHVyZV90ICpldmVudF9kYXRhKQoreworCWlmIChpb2MtPnRlbXBfc2Vuc29yc19jb3VudCA+PSBldmVudF9kYXRhLT5TZW5zb3JOdW0pIHsKKwkJcHJfZXJyKE1QVDNTQVNfRk1UICJUZW1wZXJhdHVyZSBUaHJlc2hvbGQgZmxhZ3MgJXMlcyVzJXMiCisJCSAgIiBleGNlZWRlZCBmb3IgU2Vuc29yOiAlZCAhISFcbiIsIGlvYy0+bmFtZSwKKwkJICAoKGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlN0YXR1cykgJiAweDEpID09IDEpID8gIjAgIiA6ICIgIiwKKwkJICAoKGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlN0YXR1cykgJiAweDIpID09IDIpID8gIjEgIiA6ICIgIiwKKwkJICAoKGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlN0YXR1cykgJiAweDQpID09IDQpID8gIjIgIiA6ICIgIiwKKwkJICAoKGxlMTZfdG9fY3B1KGV2ZW50X2RhdGEtPlN0YXR1cykgJiAweDgpID09IDgpID8gIjMgIiA6ICIgIiwKKwkJICBldmVudF9kYXRhLT5TZW5zb3JOdW0pOworCQlwcl9lcnIoTVBUM1NBU19GTVQgIkN1cnJlbnQgVGVtcCBJbiBDZWxzaXVzOiAlZFxuIiwKKwkJCWlvYy0+bmFtZSwgZXZlbnRfZGF0YS0+Q3VycmVudFRlbXBlcmF0dXJlKTsKKwl9Cit9CisKKy8qKgogICogX3Njc2loX2ZsdXNoX3J1bm5pbmdfY21kcyAtIGNvbXBsZXRpbmcgb3V0c3RhbmRpbmcgY29tbWFuZHMuCiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqCkBAIC03MTk0LDYgKzcyMjgsMTIgQEAKIAljYXNlIE1QSTJfRVZFTlRfSVJfUEhZU0lDQUxfRElTSzoKIAkJYnJlYWs7CiAKKwljYXNlIE1QSTJfRVZFTlRfVEVNUF9USFJFU0hPTEQ6CisJCV9zY3NpaF90ZW1wX3RocmVzaG9sZF9ldmVudHMoaW9jLAorCQkJKE1waTJFdmVudERhdGFUZW1wZXJhdHVyZV90ICopCisJCQltcGlfcmVwbHktPkV2ZW50RGF0YSk7CisJCWJyZWFrOworCiAJZGVmYXVsdDogLyogaWdub3JlIHRoZSByZXN0ICovCiAJCXJldHVybiAxOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfdHJhbnNwb3J0LmMgYi9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX3RyYW5zcG9ydC5jCmluZGV4IDM2MzdhZTYuLmVmYjk4YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc190cmFuc3BvcnQuYwpAQCAtMyw3ICszLDggQEAKICAqCiAgKiBUaGlzIGNvZGUgaXMgYmFzZWQgb24gZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc190cmFuc3BvcnQuYwogICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgIExTSSBDb3Jwb3JhdGlvbgotICogIChtYWlsdG86REwtTVBURnVzaW9uTGludXhAbHNpLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE0IEF2YWdvIFRlY2hub2xvZ2llcworICogIChtYWlsdG86IE1QVC1GdXNpb25MaW51eC5wZGxAYXZhZ290ZWNoLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc190cmlnZ2VyX2RpYWcuYyBiL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfdHJpZ2dlcl9kaWFnLmMKaW5kZXggOGEyZGQxMS4uYjYwZmQ3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc190cmlnZ2VyX2RpYWcuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX3RyaWdnZXJfZGlhZy5jCkBAIC00LDcgKzQsOCBAQAogICoKICAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBkcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX3RyaWdnZXJfZGlhZy5jCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCAgTFNJIENvcnBvcmF0aW9uCi0gKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgQXZhZ28gVGVjaG5vbG9naWVzCisgKiAgKG1haWx0bzogTVBULUZ1c2lvbkxpbnV4LnBkbEBhdmFnb3RlY2guY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX3RyaWdnZXJfZGlhZy5oIGIvZHJpdmVycy9zY3NpL21wdDNzYXMvbXB0M3Nhc190cmlnZ2VyX2RpYWcuaAppbmRleCBmNjgxZGI1Li42NTg2YTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbXB0M3Nhcy9tcHQzc2FzX3RyaWdnZXJfZGlhZy5oCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfdHJpZ2dlcl9kaWFnLmgKQEAgLTUsNyArNSw4IEBACiAgKgogICogVGhpcyBjb2RlIGlzIGJhc2VkIG9uIGRyaXZlcnMvc2NzaS9tcHQzc2FzL21wdDNzYXNfYmFzZS5oCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNCAgTFNJIENvcnBvcmF0aW9uCi0gKiAgKG1haWx0bzpETC1NUFRGdXNpb25MaW51eEBsc2kuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTQgQXZhZ28gVGVjaG5vbG9naWVzCisgKiAgKG1haWx0bzogTVBULUZ1c2lvbkxpbnV4LnBkbEBhdmFnb3RlY2guY29tKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbnNwMzIuYyBiL2RyaXZlcnMvc2NzaS9uc3AzMi5jCmluZGV4IDkwYWJiMDMuLmM2MDc3Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5jCisrKyBiL2RyaXZlcnMvc2NzaS9uc3AzMi5jCkBAIC0xNDQxLDggKzE0NDEsNiBAQAogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCi0jdW5kZWYgU1BSSU5URgotI2RlZmluZSBTUFJJTlRGKGFyZ3MuLi4pIHNlcV9wcmludGYobSwgIyNhcmdzKQogCiBzdGF0aWMgaW50IG5zcDMyX3Nob3dfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBTY3NpX0hvc3QgKmhvc3QpCiB7CkBAIC0xNDU4LDY0ICsxNDU2LDYzIEBACiAJZGF0YSA9IChuc3AzMl9od19kYXRhICopaG9zdC0+aG9zdGRhdGE7CiAJYmFzZSA9IGhvc3QtPmlvX3BvcnQ7CiAKLQlTUFJJTlRGKCJOaW5qYVNDU0ktMzIgc3RhdHVzXG5cbiIpOwotCVNQUklOVEYoIkRyaXZlciB2ZXJzaW9uOiAgICAgICAgJXMsICRSZXZpc2lvbjogMS4zMyAkXG4iLCBuc3AzMl9yZWxlYXNlX3ZlcnNpb24pOwotCVNQUklOVEYoIlNDU0kgaG9zdCBOby46ICAgICAgICAgJWRcbiIsCQlob3N0bm8pOwotCVNQUklOVEYoIklSUTogICAgICAgICAgICAgICAgICAgJWRcbiIsCQlob3N0LT5pcnEpOwotCVNQUklOVEYoIklPOiAgICAgICAgICAgICAgICAgICAgMHglbHgtMHglbHhcbiIsIGhvc3QtPmlvX3BvcnQsIGhvc3QtPmlvX3BvcnQgKyBob3N0LT5uX2lvX3BvcnQgLSAxKTsKLQlTUFJJTlRGKCJNTUlPKHZpcnR1YWwgYWRkcmVzcyk6IDB4JWx4LTB4JWx4XG4iLAlob3N0LT5iYXNlLCBob3N0LT5iYXNlICsgZGF0YS0+TW1pb0xlbmd0aCAtIDEpOwotCVNQUklOVEYoInNnX3RhYmxlc2l6ZTogICAgICAgICAgJWRcbiIsCQlob3N0LT5zZ190YWJsZXNpemUpOwotCVNQUklOVEYoIkNoaXAgcmV2aXNpb246ICAgICAgICAgMHgleFxuIiwgICAgICAgCShuc3AzMl9yZWFkMihiYXNlLCBJTkRFWF9SRUcpID4+IDgpICYgMHhmZik7CisJc2VxX3B1dHMobSwgIk5pbmphU0NTSS0zMiBzdGF0dXNcblxuIik7CisJc2VxX3ByaW50ZihtLCAiRHJpdmVyIHZlcnNpb246ICAgICAgICAlcywgJFJldmlzaW9uOiAxLjMzICRcbiIsIG5zcDMyX3JlbGVhc2VfdmVyc2lvbik7CisJc2VxX3ByaW50ZihtLCAiU0NTSSBob3N0IE5vLjogICAgICAgICAlZFxuIiwJCWhvc3Rubyk7CisJc2VxX3ByaW50ZihtLCAiSVJROiAgICAgICAgICAgICAgICAgICAlZFxuIiwJCWhvc3QtPmlycSk7CisJc2VxX3ByaW50ZihtLCAiSU86ICAgICAgICAgICAgICAgICAgICAweCVseC0weCVseFxuIiwgaG9zdC0+aW9fcG9ydCwgaG9zdC0+aW9fcG9ydCArIGhvc3QtPm5faW9fcG9ydCAtIDEpOworCXNlcV9wcmludGYobSwgIk1NSU8odmlydHVhbCBhZGRyZXNzKTogMHglbHgtMHglbHhcbiIsCWhvc3QtPmJhc2UsIGhvc3QtPmJhc2UgKyBkYXRhLT5NbWlvTGVuZ3RoIC0gMSk7CisJc2VxX3ByaW50ZihtLCAic2dfdGFibGVzaXplOiAgICAgICAgICAlZFxuIiwJCWhvc3QtPnNnX3RhYmxlc2l6ZSk7CisJc2VxX3ByaW50ZihtLCAiQ2hpcCByZXZpc2lvbjogICAgICAgICAweCV4XG4iLAkJKG5zcDMyX3JlYWQyKGJhc2UsIElOREVYX1JFRykgPj4gOCkgJiAweGZmKTsKIAogCW1vZGVfcmVnID0gbnNwMzJfaW5kZXhfcmVhZDEoYmFzZSwgQ0hJUF9NT0RFKTsKIAltb2RlbCAgICA9IGRhdGEtPnBjaV9kZXZpZC0+ZHJpdmVyX2RhdGE7CiAKICNpZmRlZiBDT05GSUdfUE0KLQlTUFJJTlRGKCJQb3dlciBNYW5hZ2VtZW50OiAgICAgICVzXG4iLCAgICAgICAgICAobW9kZV9yZWcgJiBPUFRGKSA/ICJ5ZXMiIDogIm5vIik7CisJc2VxX3ByaW50ZihtLCAiUG93ZXIgTWFuYWdlbWVudDogICAgICAlc1xuIiwgICAgICAgICAgKG1vZGVfcmVnICYgT1BURikgPyAieWVzIiA6ICJubyIpOwogI2VuZGlmCi0JU1BSSU5URigiT0VNOiAgICAgICAgICAgICAgICAgICAlbGQsICVzXG4iLCAgICAgKG1vZGVfcmVnICYgKE9FTTB8T0VNMSkpLCBuc3AzMl9tb2RlbFttb2RlbF0pOworCXNlcV9wcmludGYobSwgIk9FTTogICAgICAgICAgICAgICAgICAgJWxkLCAlc1xuIiwgICAgIChtb2RlX3JlZyAmIChPRU0wfE9FTTEpKSwgbnNwMzJfbW9kZWxbbW9kZWxdKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCYoZGF0YS0+TG9jayksIGZsYWdzKTsKLQlTUFJJTlRGKCJDdXJyZW50U0M6ICAgICAgICAgICAgIDB4JXBcblxuIiwgICAgICBkYXRhLT5DdXJyZW50U0MpOworCXNlcV9wcmludGYobSwgIkN1cnJlbnRTQzogICAgICAgICAgICAgMHglcFxuXG4iLCAgICAgIGRhdGEtPkN1cnJlbnRTQyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKGRhdGEtPkxvY2spLCBmbGFncyk7CiAKIAotCVNQUklOVEYoIlNEVFIgc3RhdHVzXG4iKTsKKwlzZXFfcHV0cyhtLCAiU0RUUiBzdGF0dXNcbiIpOwogCWZvciAoaWQgPSAwOyBpZCA8IEFSUkFZX1NJWkUoZGF0YS0+dGFyZ2V0KTsgaWQrKykgewogCi0gICAgICAgICAgICAgICAgU1BSSU5URigiaWQgJWQ6ICIsIGlkKTsKKwkJc2VxX3ByaW50ZihtLCAiaWQgJWQ6ICIsIGlkKTsKIAogCQlpZiAoaWQgPT0gaG9zdC0+dGhpc19pZCkgewotCQkJU1BSSU5URigiLS0tLS0gTmluamFTQ1NJLTMyIGhvc3QgYWRhcHRlclxuIik7CisJCQlzZXFfcHV0cyhtLCAiLS0tLS0gTmluamFTQ1NJLTMyIGhvc3QgYWRhcHRlclxuIik7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWlmIChkYXRhLT50YXJnZXRbaWRdLnN5bmNfZmxhZyA9PSBTRFRSX0RPTkUpIHsKIAkJCWlmIChkYXRhLT50YXJnZXRbaWRdLnBlcmlvZCA9PSAwICAgICAgICAgICAgJiYKIAkJCSAgICBkYXRhLT50YXJnZXRbaWRdLm9mZnNldCA9PSBBU1lOQ19PRkZTRVQgKSB7Ci0JCQkJU1BSSU5URigiYXN5bmMiKTsKKwkJCQlzZXFfcHV0cyhtLCAiYXN5bmMiKTsKIAkJCX0gZWxzZSB7Ci0JCQkJU1BSSU5URigiIHN5bmMiKTsKKwkJCQlzZXFfcHV0cyhtLCAiIHN5bmMiKTsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCVNQUklOVEYoIiBub25lIik7CisJCQlzZXFfcHV0cyhtLCAiIG5vbmUiKTsKIAkJfQogCiAJCWlmIChkYXRhLT50YXJnZXRbaWRdLnBlcmlvZCAhPSAwKSB7CiAKIAkJCXNwZWVkID0gMTAwMDAwMCAvIChkYXRhLT50YXJnZXRbaWRdLnBlcmlvZCAqIDQpOwogCi0JCQlTUFJJTlRGKCIgdHJhbnNmZXIgJWQuJWRNQi9zLCBvZmZzZXQgJWQiLAorCQkJc2VxX3ByaW50ZihtLCAiIHRyYW5zZmVyICVkLiVkTUIvcywgb2Zmc2V0ICVkIiwKIAkJCQlzcGVlZCAvIDEwMDAsCiAJCQkJc3BlZWQgJSAxMDAwLAogCQkJCWRhdGEtPnRhcmdldFtpZF0ub2Zmc2V0CiAJCQkJKTsKIAkJfQotCQlTUFJJTlRGKCJcbiIpOworCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAl9CiAJcmV0dXJuIDA7CiB9Ci0jdW5kZWYgU1BSSU5URgogCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmMKaW5kZXggMzRhYWQzMi4uMWI2Yzg4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuYworKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5jCkBAIC0xMzY0LDkgKzEzNjQsNiBAQAogCXJldHVybiBkYXRhLT5uc3BpbmZvOwogfQogCi0jdW5kZWYgU1BSSU5URgotI2RlZmluZSBTUFJJTlRGKGFyZ3MuLi4pIHNlcV9wcmludGYobSwgIyNhcmdzKQotCiBzdGF0aWMgaW50IG5zcF9zaG93X2luZm8oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0KQogewogCWludCBpZDsKQEAgLTEzNzgsNzUgKzEzNzUsNzQgQEAKIAlob3N0bm8gPSBob3N0LT5ob3N0X25vOwogCWRhdGEgPSAobnNwX2h3X2RhdGEgKilob3N0LT5ob3N0ZGF0YTsKIAotCVNQUklOVEYoIk5pbmphU0NTSSBzdGF0dXNcblxuIik7Ci0JU1BSSU5URigiRHJpdmVyIHZlcnNpb246ICAgICAgICAkUmV2aXNpb246IDEuMjMgJFxuIik7Ci0JU1BSSU5URigiU0NTSSBob3N0IE5vLjogICAgICAgICAlZFxuIiwgICAgICAgICAgaG9zdG5vKTsKLQlTUFJJTlRGKCJJUlE6ICAgICAgICAgICAgICAgICAgICVkXG4iLCAgICAgICAgICBob3N0LT5pcnEpOwotCVNQUklOVEYoIklPOiAgICAgICAgICAgICAgICAgICAgMHglbHgtMHglbHhcbiIsIGhvc3QtPmlvX3BvcnQsIGhvc3QtPmlvX3BvcnQgKyBob3N0LT5uX2lvX3BvcnQgLSAxKTsKLQlTUFJJTlRGKCJNTUlPKHZpcnR1YWwgYWRkcmVzcyk6IDB4JWx4LTB4JWx4XG4iLCBob3N0LT5iYXNlLCBob3N0LT5iYXNlICsgZGF0YS0+TW1pb0xlbmd0aCAtIDEpOwotCVNQUklOVEYoInNnX3RhYmxlc2l6ZTogICAgICAgICAgJWRcbiIsICAgICAgICAgIGhvc3QtPnNnX3RhYmxlc2l6ZSk7CisJc2VxX3B1dHMobSwgIk5pbmphU0NTSSBzdGF0dXNcblxuIgorCQkiRHJpdmVyIHZlcnNpb246ICAgICAgICAkUmV2aXNpb246IDEuMjMgJFxuIik7CisJc2VxX3ByaW50ZihtLCAiU0NTSSBob3N0IE5vLjogICAgICAgICAlZFxuIiwgICAgICAgICAgaG9zdG5vKTsKKwlzZXFfcHJpbnRmKG0sICJJUlE6ICAgICAgICAgICAgICAgICAgICVkXG4iLCAgICAgICAgICBob3N0LT5pcnEpOworCXNlcV9wcmludGYobSwgIklPOiAgICAgICAgICAgICAgICAgICAgMHglbHgtMHglbHhcbiIsIGhvc3QtPmlvX3BvcnQsIGhvc3QtPmlvX3BvcnQgKyBob3N0LT5uX2lvX3BvcnQgLSAxKTsKKwlzZXFfcHJpbnRmKG0sICJNTUlPKHZpcnR1YWwgYWRkcmVzcyk6IDB4JWx4LTB4JWx4XG4iLCBob3N0LT5iYXNlLCBob3N0LT5iYXNlICsgZGF0YS0+TW1pb0xlbmd0aCAtIDEpOworCXNlcV9wcmludGYobSwgInNnX3RhYmxlc2l6ZTogICAgICAgICAgJWRcbiIsICAgICAgICAgIGhvc3QtPnNnX3RhYmxlc2l6ZSk7CiAKLQlTUFJJTlRGKCJidXJzdCB0cmFuc2ZlciBtb2RlOiAgICIpOworCXNlcV9wdXRzKG0sICJidXJzdCB0cmFuc2ZlciBtb2RlOiAgICIpOwogCXN3aXRjaCAobnNwX2J1cnN0X21vZGUpIHsKIAljYXNlIEJVUlNUX0lPODoKLQkJU1BSSU5URigiaW84Iik7CisJCXNlcV9wdXRzKG0sICJpbzgiKTsKIAkJYnJlYWs7CiAJY2FzZSBCVVJTVF9JTzMyOgotCQlTUFJJTlRGKCJpbzMyIik7CisJCXNlcV9wdXRzKG0sICJpbzMyIik7CiAJCWJyZWFrOwogCWNhc2UgQlVSU1RfTUVNMzI6Ci0JCVNQUklOVEYoIm1lbTMyIik7CisJCXNlcV9wdXRzKG0sICJtZW0zMiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlTUFJJTlRGKCI/Pz8iKTsKKwkJc2VxX3B1dHMobSwgIj8/PyIpOwogCQlicmVhazsKIAl9Ci0JU1BSSU5URigiXG4iKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJihkYXRhLT5Mb2NrKSwgZmxhZ3MpOwotCVNQUklOVEYoIkN1cnJlbnRTQzogICAgICAgICAgICAgMHglcFxuXG4iLCAgICAgIGRhdGEtPkN1cnJlbnRTQyk7CisJc2VxX3ByaW50ZihtLCAiQ3VycmVudFNDOiAgICAgICAgICAgICAweCVwXG5cbiIsICAgICAgZGF0YS0+Q3VycmVudFNDKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoZGF0YS0+TG9jayksIGZsYWdzKTsKIAotCVNQUklOVEYoIlNEVFIgc3RhdHVzXG4iKTsKKwlzZXFfcHV0cyhtLCAiU0RUUiBzdGF0dXNcbiIpOwogCWZvcihpZCA9IDA7IGlkIDwgQVJSQVlfU0laRShkYXRhLT5TeW5jKTsgaWQrKykgewogCi0JCVNQUklOVEYoImlkICVkOiAiLCBpZCk7CisJCXNlcV9wcmludGYobSwgImlkICVkOiAiLCBpZCk7CiAKIAkJaWYgKGlkID09IGhvc3QtPnRoaXNfaWQpIHsKLQkJCVNQUklOVEYoIi0tLS0tIE5pbmphU0NTSS0zIGhvc3QgYWRhcHRlclxuIik7CisJCQlzZXFfcHV0cyhtLCAiLS0tLS0gTmluamFTQ1NJLTMgaG9zdCBhZGFwdGVyXG4iKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJc3dpdGNoKGRhdGEtPlN5bmNbaWRdLlN5bmNOZWdvdGlhdGlvbikgewogCQljYXNlIFNZTkNfT0s6Ci0JCQlTUFJJTlRGKCIgc3luYyIpOworCQkJc2VxX3B1dHMobSwgIiBzeW5jIik7CiAJCQlicmVhazsKIAkJY2FzZSBTWU5DX05HOgotCQkJU1BSSU5URigiYXN5bmMiKTsKKwkJCXNlcV9wdXRzKG0sICJhc3luYyIpOwogCQkJYnJlYWs7CiAJCWNhc2UgU1lOQ19OT1RfWUVUOgotCQkJU1BSSU5URigiIG5vbmUiKTsKKwkJCXNlcV9wdXRzKG0sICIgbm9uZSIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlTUFJJTlRGKCI/Pz8/PyIpOworCQkJc2VxX3B1dHMobSwgIj8/Pz8/Iik7CiAJCQlicmVhazsKIAkJfQogCiAJCWlmIChkYXRhLT5TeW5jW2lkXS5TeW5jUGVyaW9kICE9IDApIHsKIAkJCXNwZWVkID0gMTAwMDAwMCAvIChkYXRhLT5TeW5jW2lkXS5TeW5jUGVyaW9kICogNCk7CiAKLQkJCVNQUklOVEYoIiB0cmFuc2ZlciAlZC4lZE1CL3MsIG9mZnNldCAlZCIsCisJCQlzZXFfcHJpbnRmKG0sICIgdHJhbnNmZXIgJWQuJWRNQi9zLCBvZmZzZXQgJWQiLAogCQkJCXNwZWVkIC8gMTAwMCwKIAkJCQlzcGVlZCAlIDEwMDAsCiAJCQkJZGF0YS0+U3luY1tpZF0uU3luY09mZnNldAogCQkJCSk7CiAJCX0KLQkJU1BSSU5URigiXG4iKTsKKwkJc2VxX3B1dGMobSwgJ1xuJyk7CiAJfQogCXJldHVybiAwOwogfQotI3VuZGVmIFNQUklOVEYKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogZXJyb3IgaGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYyBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKaW5kZXggOGMyN2I2YS4uZWQzMWQ4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuYworKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCkBAIC0xNDczLDEzICsxNDczLDcgQEAKIAl9CiAKIAkvKiBzZW5kIGdlbmV0bGluayBtdWx0aWNhc3QgbWVzc2FnZSB0byBub3RpZnkgYXBwcGxpY2F0aW9ucyAqLwotCXJlc3VsdCA9IGdlbmxtc2dfZW5kKHNrYiwgbXNnX2hlYWRlcik7Ci0KLQlpZiAocmVzdWx0IDwgMCkgewotCQlwbWNyYWlkX2VycigiZ2VubG1zZ19lbmQgZmFpbGVkXG4iKTsKLQkJbmxtc2dfZnJlZShza2IpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KKwlnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkZXIpOwogCiAJcmVzdWx0ID0gZ2VubG1zZ19tdWx0aWNhc3QoJnBtY3JhaWRfZXZlbnRfZmFtaWx5LCBza2IsCiAJCQkJICAgMCwgMCwgR0ZQX0FUT01JQyk7CkBAIC00MjIzLDcgKzQyMTcsNyBAQAogc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHBtY3JhaWRfYWRhcHRlcl9pZF9hdHRyID0gewogCS5hdHRyID0gewogCQkgLm5hbWUgPSAiYWRhcHRlcl9pZCIsCi0JCSAubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSLAorCQkgLm1vZGUgPSBTX0lSVUdPLAogCQkgfSwKIAkuc2hvdyA9IHBtY3JhaWRfc2hvd19hZGFwdGVyX2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZnMuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZnMuYwppbmRleCAyY2EzOWI4Li4xNWNmMDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGZzLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2Rmcy5jCkBAIC0yMywxMCArMjMsMTAgQEAKIAogCW11dGV4X2xvY2soJmhhLT5mY2VfbXV0ZXgpOwogCi0Jc2VxX3ByaW50ZihzLCAiRkNFIFRyYWNlIEJ1ZmZlclxuIik7CisJc2VxX3B1dHMocywgIkZDRSBUcmFjZSBCdWZmZXJcbiIpOwogCXNlcV9wcmludGYocywgIkluIFBvaW50ZXIgPSAlbGx4XG5cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpaGEtPmZjZV93cik7CiAJc2VxX3ByaW50ZihzLCAiQmFzZSA9ICVsbHhcblxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgaGEtPmZjZV9kbWEpOwotCXNlcV9wcmludGYocywgIkZDRSBFbmFibGUgUmVnaXN0ZXJzXG4iKTsKKwlzZXFfcHV0cyhzLCAiRkNFIEVuYWJsZSBSZWdpc3RlcnNcbiIpOwogCXNlcV9wcmludGYocywgIiUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAogCSAgICBoYS0+ZmNlX21iWzBdLCBoYS0+ZmNlX21iWzJdLCBoYS0+ZmNlX21iWzNdLCBoYS0+ZmNlX21iWzRdLAogCSAgICBoYS0+ZmNlX21iWzVdLCBoYS0+ZmNlX21iWzZdKTsKQEAgLTM4LDExICszOCwxMSBAQAogCQkJc2VxX3ByaW50ZihzLCAiXG4lbGx4OiAiLAogCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKChjbnQgKiA0KSArIGZjZV9zdGFydCkpOwogCQllbHNlCi0JCQlzZXFfcHJpbnRmKHMsICIgIik7CisJCQlzZXFfcHV0YyhzLCAnICcpOwogCQlzZXFfcHJpbnRmKHMsICIlMDh4IiwgKmZjZSsrKTsKIAl9CiAKLQlzZXFfcHJpbnRmKHMsICJcbkVuZFxuIik7CisJc2VxX3B1dHMocywgIlxuRW5kXG4iKTsKIAogCW11dGV4X3VubG9jaygmaGEtPmZjZV9tdXRleCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IGUwMjg4NTQuLmM5YzNiNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtNTMxLDcgKzUzMSw3IEBACiAJICoKIAkgKiAzOiBzYW1lIGFzIDIKIAkgKgotCSAqIDQ6IHNhbWUgYXMgMyBwbHVzIGR1bXAgZXh0cmEganVuaworCSAqIDQ6IHNhbWUgYXMgMwogCSAqLwogCWlmICh1bmxpa2VseShzY3NpX2xvZ2dpbmdfbGV2ZWwpKSB7CiAJCWxldmVsID0gU0NTSV9MT0dfTEVWRUwoU0NTSV9MT0dfTUxRVUVVRV9TSElGVCwKQEAgLTU0MCwxMyArNTQwLDYgQEAKIAkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAogCQkJCSAgICAiU2VuZDogc2NtZCAweCVwXG4iLCBjbWQpOwogCQkJc2NzaV9wcmludF9jb21tYW5kKGNtZCk7Ci0JCQlpZiAobGV2ZWwgPiAzKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiYnVmZmVyID0gMHglcCwgYnVmZmxlbiA9ICVkLCIKLQkJCQkgICAgICAgIiBxdWV1ZWNvbW1hbmQgMHglcFxuIiwKLQkJCQkJc2NzaV9zZ2xpc3QoY21kKSwgc2NzaV9idWZmbGVuKGNtZCksCi0JCQkJCWNtZC0+ZGV2aWNlLT5ob3N0LT5ob3N0dC0+cXVldWVjb21tYW5kKTsKLQotCQkJfQogCQl9CiAJfQogfQpAQCAtNTcyLDcgKzU2NSw3IEBACiAJCQkJICAgICAgIFNDU0lfTE9HX01MQ09NUExFVEVfQklUUyk7CiAJCWlmICgoKGxldmVsID4gMCkgJiYgKGNtZC0+cmVzdWx0IHx8IGRpc3Bvc2l0aW9uICE9IFNVQ0NFU1MpKSB8fAogCQkgICAgKGxldmVsID4gMSkpIHsKLQkJCXNjc2lfcHJpbnRfcmVzdWx0KGNtZCwgIkRvbmU6ICIsIGRpc3Bvc2l0aW9uKTsKKwkJCXNjc2lfcHJpbnRfcmVzdWx0KGNtZCwgIkRvbmUiLCBkaXNwb3NpdGlvbik7CiAJCQlzY3NpX3ByaW50X2NvbW1hbmQoY21kKTsKIAkJCWlmIChzdGF0dXNfYnl0ZShjbWQtPnJlc3VsdCkgJiBDSEVDS19DT05ESVRJT04pCiAJCQkJc2NzaV9wcmludF9zZW5zZShjbWQpOwpAQCAtOTg2LDkgKzk3OSw5IEBACiAJCXJldHVybiAtRU5YSU87CiAJaWYgKCFnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldikpCiAJCXJldHVybiAtRU5YSU87Ci0JLyogV2UgY2FuIGZhaWwgdGhpcyBpZiB3ZSdyZSBkb2luZyBTQ1NJIG9wZXJhdGlvbnMKKwkvKiBXZSBjYW4gZmFpbCB0cnlfbW9kdWxlX2dldCBpZiB3ZSdyZSBkb2luZyBTQ1NJIG9wZXJhdGlvbnMKIAkgKiBmcm9tIG1vZHVsZSBleGl0IChsaWtlIGNhY2hlIGZsdXNoKSAqLwotCXRyeV9tb2R1bGVfZ2V0KHNkZXYtPmhvc3QtPmhvc3R0LT5tb2R1bGUpOworCV9fbW9kdWxlX2dldChzZGV2LT5ob3N0LT5ob3N0dC0+bW9kdWxlKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTAwNCwxNCArOTk3LDcgQEAKICAqLwogdm9pZCBzY3NpX2RldmljZV9wdXQoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECi0Jc3RydWN0IG1vZHVsZSAqbW9kdWxlID0gc2Rldi0+aG9zdC0+aG9zdHQtPm1vZHVsZTsKLQotCS8qIFRoZSBtb2R1bGUgcmVmY291bnQgd2lsbCBiZSB6ZXJvIGlmIHNjc2lfZGV2aWNlX2dldCgpCi0JICogd2FzIGNhbGxlZCBmcm9tIGEgbW9kdWxlIHJlbW92YWwgcm91dGluZSAqLwotCWlmIChtb2R1bGUgJiYgbW9kdWxlX3JlZmNvdW50KG1vZHVsZSkgIT0gMCkKLQkJbW9kdWxlX3B1dChtb2R1bGUpOwotI2VuZGlmCisJbW9kdWxlX3B1dChzZGV2LT5ob3N0LT5ob3N0dC0+bW9kdWxlKTsKIAlwdXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHNjc2lfZGV2aWNlX3B1dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwppbmRleCA0YWNhMWIwLi4xMTMyMzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKQEAgLTgwLDYgKzgwLDggQEAKICNkZWZpbmUgSU5WQUxJRF9GSUVMRF9JTl9QQVJBTV9MSVNUIDB4MjYKICNkZWZpbmUgVUFfUkVTRVRfQVNDIDB4MjkKICNkZWZpbmUgVUFfQ0hBTkdFRF9BU0MgMHgyYQorI2RlZmluZSBUQVJHRVRfQ0hBTkdFRF9BU0MgMHgzZgorI2RlZmluZSBMVU5TX0NIQU5HRURfQVNDUSAweDBlCiAjZGVmaW5lIElOU1VGRl9SRVNfQVNDIDB4NTUKICNkZWZpbmUgSU5TVUZGX1JFU19BU0NRIDB4MwogI2RlZmluZSBQT1dFUl9PTl9SRVNFVF9BU0NRIDB4MApAQCAtOTEsNiArOTMsOCBAQAogI2RlZmluZSBUSFJFU0hPTERfRVhDRUVERUQgMHg1ZAogI2RlZmluZSBMT1dfUE9XRVJfQ09ORF9PTiAweDVlCiAjZGVmaW5lIE1JU0NPTVBBUkVfVkVSSUZZX0FTQyAweDFkCisjZGVmaW5lIE1JQ1JPQ09ERV9DSEFOR0VEX0FTQ1EgMHgxCS8qIHdpdGggVEFSR0VUX0NIQU5HRURfQVNDICovCisjZGVmaW5lIE1JQ1JPQ09ERV9DSEFOR0VEX1dPX1JFU0VUX0FTQ1EgMHgxNgogCiAvKiBBZGRpdGlvbmFsIFNlbnNlIENvZGUgUXVhbGlmaWVyIChBU0NRKSAqLwogI2RlZmluZSBBQ0tfTkFLX1RPIDB4MwpAQCAtMTgwLDcgKzE4NCwxMCBAQAogI2RlZmluZSBTREVCVUdfVUFfQlVTX1JFU0VUIDEKICNkZWZpbmUgU0RFQlVHX1VBX01PREVfQ0hBTkdFRCAyCiAjZGVmaW5lIFNERUJVR19VQV9DQVBBQ0lUWV9DSEFOR0VEIDMKLSNkZWZpbmUgU0RFQlVHX05VTV9VQVMgNAorI2RlZmluZSBTREVCVUdfVUFfTFVOU19DSEFOR0VEIDQKKyNkZWZpbmUgU0RFQlVHX1VBX01JQ1JPQ09ERV9DSEFOR0VEIDUJLyogc2ltdWxhdGUgZmlybXdhcmUgY2hhbmdlICovCisjZGVmaW5lIFNERUJVR19VQV9NSUNST0NPREVfQ0hBTkdFRF9XT19SRVNFVCA2CisjZGVmaW5lIFNERUJVR19OVU1fVUFTIDcKIAogLyogZm9yIGNoZWNrX3JlYWRpbmVzcygpICovCiAjZGVmaW5lIFVBU19PTkxZIDEJLyogY2hlY2sgZm9yIFVBcyBvbmx5ICovCkBAIC0zMjYsNiArMzMzLDcgQEAKIHN0YXRpYyBpbnQgcmVzcF93cml0ZV9zYW1lXzE2KHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKIHN0YXRpYyBpbnQgcmVzcF94ZHdyaXRlcmVhZF8xMChzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKik7CiBzdGF0aWMgaW50IHJlc3BfY29tcF93cml0ZShzdHJ1Y3Qgc2NzaV9jbW5kICosIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKik7CitzdGF0aWMgaW50IHJlc3Bfd3JpdGVfYnVmZmVyKHN0cnVjdCBzY3NpX2NtbmQgKiwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqKTsKIAogc3RydWN0IG9wY29kZV9pbmZvX3QgewogCXU4IG51bV9hdHRhY2hlZDsJLyogMCBpZiB0aGlzIGlzIGl0IChpLmUuIGEgbGVhZik7IHVzZSAweGZmCkBAIC00ODAsOCArNDg4LDkgQEAKIAl7MCwgMHg1MywgMCwgRl9EX0lOIHwgRl9EX09VVCB8IEZGX0RJUkVDVF9JTywgcmVzcF94ZHdyaXRlcmVhZF8xMCwKIAkgICAgTlVMTCwgezEwLCAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgxZiwgMHhmZiwgMHhmZiwgMHhjNywKIAkJICAgMCwgMCwgMCwgMCwgMCwgMH0gfSwKLQl7MCwgMCwgMCwgRl9JTlZfT1AgfCBGRl9SRVNQT05ELCBOVUxMLCBOVUxMLCAvKiBXUklURV9CVUZGRVIgKi8KLQkgICAgezAsICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfSB9LAorCXswLCAweDNiLCAwLCBGX0RfT1VUX01BWUJFLCByZXNwX3dyaXRlX2J1ZmZlciwgTlVMTCwKKwkgICAgezEwLCAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhjNywgMCwgMCwKKwkgICAgIDAsIDAsIDAsIDB9IH0sCQkJLyogV1JJVEVfQlVGRkVSICovCiAJezEsIDB4NDEsIDAsIEZfRF9PVVRfTUFZQkUgfCBGRl9ESVJFQ1RfSU8sIHJlc3Bfd3JpdGVfc2FtZV8xMCwKIAkgICAgd3JpdGVfc2FtZV9pYXJyLCB7MTAsICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweDFmLCAweGZmLAogCQkJICAgICAgMHhmZiwgMHhjNywgMCwgMCwgMCwgMCwgMCwgMH0gfSwKQEAgLTc4Miw2ICs3OTEsMjIgQEAKIAkvKiByZXR1cm4gLUVOT1RUWTsgLy8gY29ycmVjdCByZXR1cm4gYnV0IHVwc2V0cyBmZGlzayAqLwogfQogCitzdGF0aWMgdm9pZCBjbGVhcl9sdW5zX2NoYW5nZWRfb25fdGFyZ2V0KHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRldmlwKQoreworCXN0cnVjdCBzZGVidWdfaG9zdF9pbmZvICpzZGhwOworCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRwOworCisJc3Bpbl9sb2NrKCZzZGVidWdfaG9zdF9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RocCwgJnNkZWJ1Z19ob3N0X2xpc3QsIGhvc3RfbGlzdCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRwLCAmc2RocC0+ZGV2X2luZm9fbGlzdCwgZGV2X2xpc3QpIHsKKwkJCWlmICgoZGV2aXAtPnNkYmdfaG9zdCA9PSBkcC0+c2RiZ19ob3N0KSAmJgorCQkJICAgIChkZXZpcC0+dGFyZ2V0ID09IGRwLT50YXJnZXQpKQorCQkJCWNsZWFyX2JpdChTREVCVUdfVUFfTFVOU19DSEFOR0VELCBkcC0+dWFzX2JtKTsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmc2RlYnVnX2hvc3RfbGlzdF9sb2NrKTsKK30KKwogc3RhdGljIGludCBjaGVja19yZWFkaW5lc3Moc3RydWN0IHNjc2lfY21uZCAqU0NwbnQsIGludCB1YXNfb25seSwKIAkJCSAgIHN0cnVjdCBzZGVidWdfZGV2X2luZm8gKiBkZXZpcCkKIHsKQEAgLTgxNyw2ICs4NDIsMzYgQEAKIAkJCWlmIChkZWJ1ZykKIAkJCQljcCA9ICJjYXBhY2l0eSBkYXRhIGNoYW5nZWQiOwogCQkJYnJlYWs7CisJCWNhc2UgU0RFQlVHX1VBX01JQ1JPQ09ERV9DSEFOR0VEOgorCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBVTklUX0FUVEVOVElPTiwKKwkJCQkgVEFSR0VUX0NIQU5HRURfQVNDLCBNSUNST0NPREVfQ0hBTkdFRF9BU0NRKTsKKwkJCWlmIChkZWJ1ZykKKwkJCQljcCA9ICJtaWNyb2NvZGUgaGFzIGJlZW4gY2hhbmdlZCI7CisJCQlicmVhazsKKwkJY2FzZSBTREVCVUdfVUFfTUlDUk9DT0RFX0NIQU5HRURfV09fUkVTRVQ6CisJCQlta19zZW5zZV9idWZmZXIoU0NwbnQsIFVOSVRfQVRURU5USU9OLAorCQkJCQlUQVJHRVRfQ0hBTkdFRF9BU0MsCisJCQkJCU1JQ1JPQ09ERV9DSEFOR0VEX1dPX1JFU0VUX0FTQ1EpOworCQkJaWYgKGRlYnVnKQorCQkJCWNwID0gIm1pY3JvY29kZSBoYXMgYmVlbiBjaGFuZ2VkIHdpdGhvdXQgcmVzZXQiOworCQkJYnJlYWs7CisJCWNhc2UgU0RFQlVHX1VBX0xVTlNfQ0hBTkdFRDoKKwkJCS8qCisJCQkgKiBTUEMtMyBiZWhhdmlvciBpcyB0byByZXBvcnQgYSBVTklUIEFUVEVOVElPTiB3aXRoCisJCQkgKiBBU0MvQVNDUSBSRVBPUlRFRCBMVU5TIERBVEEgSEFTIENIQU5HRUQgb24gZXZlcnkgTFVOCisJCQkgKiBvbiB0aGUgdGFyZ2V0LCB1bnRpbCBhIFJFUE9SVCBMVU5TIGNvbW1hbmQgaXMKKwkJCSAqIHJlY2VpdmVkLiAgU1BDLTQgYmVoYXZpb3IgaXMgdG8gcmVwb3J0IGl0IG9ubHkgb25jZS4KKwkJCSAqIE5PVEU6ICBzY3NpX2RlYnVnX3Njc2lfbGV2ZWwgZG9lcyBub3QgdXNlIHRoZSBzYW1lCisJCQkgKiB2YWx1ZXMgYXMgc3RydWN0IHNjc2lfZGV2aWNlLT5zY3NpX2xldmVsLgorCQkJICovCisJCQlpZiAoc2NzaV9kZWJ1Z19zY3NpX2xldmVsID49IDYpCS8qIFNQQy00IGFuZCBhYm92ZSAqLworCQkJCWNsZWFyX2x1bnNfY2hhbmdlZF9vbl90YXJnZXQoZGV2aXApOworCQkJbWtfc2Vuc2VfYnVmZmVyKFNDcG50LCBVTklUX0FUVEVOVElPTiwKKwkJCQkJVEFSR0VUX0NIQU5HRURfQVNDLAorCQkJCQlMVU5TX0NIQU5HRURfQVNDUSk7CisJCQlpZiAoZGVidWcpCisJCQkJY3AgPSAicmVwb3J0ZWQgbHVucyBkYXRhIGhhcyBjaGFuZ2VkIjsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJcHJfd2FybigiJXM6IHVuZXhwZWN0ZWQgdW5pdCBhdHRlbnRpb24gY29kZT0lZFxuIiwKIAkJCQlfX2Z1bmNfXywgayk7CkBAIC0zMDMzLDYgKzMwODgsNTUgQEAKIAlyZXR1cm4gcmVzcF93cml0ZV9zYW1lKHNjcCwgbGJhLCBudW0sIGVpX2xiYSwgdW5tYXAsIG5kb2IpOwogfQogCisvKiBOb3RlIHRoZSBtb2RlIGZpZWxkIGlzIGluIHRoZSBzYW1lIHBvc2l0aW9uIGFzIHRoZSAobG93ZXIpIHNlcnZpY2UgYWN0aW9uCisgKiBmaWVsZC4gRm9yIHRoZSBSZXBvcnQgc3VwcG9ydGVkIG9wZXJhdGlvbiBjb2RlcyBjb21tYW5kLCBTUEMtNCBzdWdnZXN0cworICogZWFjaCBtb2RlIG9mIHRoaXMgY29tbWFuZCBzaG91bGQgYmUgcmVwb3J0ZWQgc2VwYXJhdGVseTsgZm9yIGZ1dHVyZS4gKi8KK3N0YXRpYyBpbnQKK3Jlc3Bfd3JpdGVfYnVmZmVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjcCwgc3RydWN0IHNkZWJ1Z19kZXZfaW5mbyAqZGV2aXApCit7CisJdTggKmNtZCA9IHNjcC0+Y21uZDsKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkcCA9IHNjcC0+ZGV2aWNlOworCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRwOworCXU4IG1vZGU7CisKKwltb2RlID0gY21kWzFdICYgMHgxZjsKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIDB4NDoJLyogZG93bmxvYWQgbWljcm9jb2RlIChNQykgYW5kIGFjdGl2YXRlIChBQ1QpICovCisJCS8qIHNldCBVQXMgb24gdGhpcyBkZXZpY2Ugb25seSAqLworCQlzZXRfYml0KFNERUJVR19VQV9CVVNfUkVTRVQsIGRldmlwLT51YXNfYm0pOworCQlzZXRfYml0KFNERUJVR19VQV9NSUNST0NPREVfQ0hBTkdFRCwgZGV2aXAtPnVhc19ibSk7CisJCWJyZWFrOworCWNhc2UgMHg1OgkvKiBkb3dubG9hZCBNQywgc2F2ZSBhbmQgQUNUICovCisJCXNldF9iaXQoU0RFQlVHX1VBX01JQ1JPQ09ERV9DSEFOR0VEX1dPX1JFU0VULCBkZXZpcC0+dWFzX2JtKTsKKwkJYnJlYWs7CisJY2FzZSAweDY6CS8qIGRvd25sb2FkIE1DIHdpdGggb2Zmc2V0cyBhbmQgQUNUICovCisJCS8qIHNldCBVQXMgb24gbW9zdCBkZXZpY2VzIChMVXMpIGluIHRoaXMgdGFyZ2V0ICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZHAsCisJCQkJICAgICZkZXZpcC0+c2RiZ19ob3N0LT5kZXZfaW5mb19saXN0LAorCQkJCSAgICBkZXZfbGlzdCkKKwkJCWlmIChkcC0+dGFyZ2V0ID09IHNkcC0+aWQpIHsKKwkJCQlzZXRfYml0KFNERUJVR19VQV9CVVNfUkVTRVQsIGRwLT51YXNfYm0pOworCQkJCWlmIChkZXZpcCAhPSBkcCkKKwkJCQkJc2V0X2JpdChTREVCVUdfVUFfTUlDUk9DT0RFX0NIQU5HRUQsCisJCQkJCQlkcC0+dWFzX2JtKTsKKwkJCX0KKwkJYnJlYWs7CisJY2FzZSAweDc6CS8qIGRvd25sb2FkIE1DIHdpdGggb2Zmc2V0cywgc2F2ZSwgYW5kIEFDVCAqLworCQkvKiBzZXQgVUEgb24gYWxsIGRldmljZXMgKExVcykgaW4gdGhpcyB0YXJnZXQgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShkcCwKKwkJCQkgICAgJmRldmlwLT5zZGJnX2hvc3QtPmRldl9pbmZvX2xpc3QsCisJCQkJICAgIGRldl9saXN0KQorCQkJaWYgKGRwLT50YXJnZXQgPT0gc2RwLT5pZCkKKwkJCQlzZXRfYml0KFNERUJVR19VQV9NSUNST0NPREVfQ0hBTkdFRF9XT19SRVNFVCwKKwkJCQkJZHAtPnVhc19ibSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGRvIG5vdGhpbmcgZm9yIHRoaXMgY29tbWFuZCBmb3Igb3RoZXIgbW9kZSB2YWx1ZXMgKi8KKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50CiByZXNwX2NvbXBfd3JpdGUoc3RydWN0IHNjc2lfY21uZCAqc2NwLCBzdHJ1Y3Qgc2RlYnVnX2Rldl9pbmZvICpkZXZpcCkKIHsKQEAgLTMyMjksNiArMzMzMyw3IEBACiAJdW5zaWduZWQgY2hhciBhcnJbU0RFQlVHX1JMVU5fQVJSX1NaXTsKIAl1bnNpZ25lZCBjaGFyICogbWF4X2FkZHI7CiAKKwljbGVhcl9sdW5zX2NoYW5nZWRfb25fdGFyZ2V0KGRldmlwKTsKIAlhbGxvY19sZW4gPSBjbWRbOV0gKyAoY21kWzhdIDw8IDgpICsgKGNtZFs3XSA8PCAxNikgKyAoY21kWzZdIDw8IDI0KTsKIAlzaG9ydGlzaCA9IChhbGxvY19sZW4gPCA0KTsKIAlpZiAoc2hvcnRpc2ggfHwgKHNlbGVjdF9yZXBvcnQgPiAyKSkgewpAQCAtNDM2OSwxMCArNDQ3NCwyNyBAQAogCQkJICAgICAgc2l6ZV90IGNvdW50KQogewogICAgICAgICBpbnQgbjsKKwlib29sIGNoYW5nZWQ7CiAKIAlpZiAoKGNvdW50ID4gMCkgJiYgKDEgPT0gc3NjYW5mKGJ1ZiwgIiVkIiwgJm4pKSAmJiAobiA+PSAwKSkgeworCQljaGFuZ2VkID0gKHNjc2lfZGVidWdfbWF4X2x1bnMgIT0gbik7CiAJCXNjc2lfZGVidWdfbWF4X2x1bnMgPSBuOwogCQlzZGVidWdfbWF4X3RndHNfbHVucygpOworCQlpZiAoY2hhbmdlZCAmJiAoc2NzaV9kZWJ1Z19zY3NpX2xldmVsID49IDUpKSB7CS8qID49IFNQQy0zICovCisJCQlzdHJ1Y3Qgc2RlYnVnX2hvc3RfaW5mbyAqc2RocDsKKwkJCXN0cnVjdCBzZGVidWdfZGV2X2luZm8gKmRwOworCisJCQlzcGluX2xvY2soJnNkZWJ1Z19ob3N0X2xpc3RfbG9jayk7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkaHAsICZzZGVidWdfaG9zdF9saXN0LAorCQkJCQkgICAgaG9zdF9saXN0KSB7CisJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkcCwgJnNkaHAtPmRldl9pbmZvX2xpc3QsCisJCQkJCQkgICAgZGV2X2xpc3QpIHsKKwkJCQkJc2V0X2JpdChTREVCVUdfVUFfTFVOU19DSEFOR0VELAorCQkJCQkJZHAtPnVhc19ibSk7CisJCQkJfQorCQkJfQorCQkJc3Bpbl91bmxvY2soJnNkZWJ1Z19ob3N0X2xpc3RfbG9jayk7CisJCX0KIAkJcmV0dXJuIGNvdW50OwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCmluZGV4IDhhZmIwMTYuLjRjZGFmZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwpAQCAtMTI0LDQxICsxMjQsMzcgQEAKIAlpZiAoc2NzaV9ob3N0X2VoX3Bhc3RfZGVhZGxpbmUoc2Rldi0+aG9zdCkpIHsKIAkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKIAkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKLQkJCQkgICAgInNjbWQgJXAgZWggdGltZW91dCwgbm90IGFib3J0aW5nXG4iLAotCQkJCSAgICBzY21kKSk7CisJCQkJICAgICJlaCB0aW1lb3V0LCBub3QgYWJvcnRpbmdcbiIpKTsKIAl9IGVsc2UgewogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAogCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLAotCQkJCSAgICAiYWJvcnRpbmcgY29tbWFuZCAlcFxuIiwgc2NtZCkpOworCQkJCSAgICAiYWJvcnRpbmcgY29tbWFuZFxuIikpOwogCQlydG4gPSBzY3NpX3RyeV90b19hYm9ydF9jbWQoc2Rldi0+aG9zdC0+aG9zdHQsIHNjbWQpOwogCQlpZiAocnRuID09IFNVQ0NFU1MpIHsKIAkJCXNldF9ob3N0X2J5dGUoc2NtZCwgRElEX1RJTUVfT1VUKTsKIAkJCWlmIChzY3NpX2hvc3RfZWhfcGFzdF9kZWFkbGluZShzZGV2LT5ob3N0KSkgewogCQkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCiAJCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKLQkJCQkJCSAgICAic2NtZCAlcCBlaCB0aW1lb3V0LCAiCi0JCQkJCQkgICAgIm5vdCByZXRyeWluZyBhYm9ydGVkICIKLQkJCQkJCSAgICAiY29tbWFuZFxuIiwgc2NtZCkpOworCQkJCQkJICAgICJlaCB0aW1lb3V0LCBub3QgcmV0cnlpbmcgIgorCQkJCQkJICAgICJhYm9ydGVkIGNvbW1hbmRcbiIpKTsKIAkJCX0gZWxzZSBpZiAoIXNjc2lfbm9yZXRyeV9jbWQoc2NtZCkgJiYKIAkJCSAgICAoKytzY21kLT5yZXRyaWVzIDw9IHNjbWQtPmFsbG93ZWQpKSB7CiAJCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKIAkJCQkJc2NtZF9wcmludGsoS0VSTl9XQVJOSU5HLCBzY21kLAotCQkJCQkJICAgICJzY21kICVwIHJldHJ5ICIKLQkJCQkJCSAgICAiYWJvcnRlZCBjb21tYW5kXG4iLCBzY21kKSk7CisJCQkJCQkgICAgInJldHJ5IGFib3J0ZWQgY29tbWFuZFxuIikpOwogCQkJCXNjc2lfcXVldWVfaW5zZXJ0KHNjbWQsIFNDU0lfTUxRVUVVRV9FSF9SRVRSWSk7CiAJCQkJcmV0dXJuOwogCQkJfSBlbHNlIHsKIAkJCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLAogCQkJCQlzY21kX3ByaW50ayhLRVJOX1dBUk5JTkcsIHNjbWQsCi0JCQkJCQkgICAgInNjbWQgJXAgZmluaXNoICIKLQkJCQkJCSAgICAiYWJvcnRlZCBjb21tYW5kXG4iLCBzY21kKSk7CisJCQkJCQkgICAgImZpbmlzaCBhYm9ydGVkIGNvbW1hbmRcbiIpKTsKIAkJCQlzY3NpX2ZpbmlzaF9jb21tYW5kKHNjbWQpOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCiAJCQkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLAotCQkJCQkgICAgInNjbWQgJXAgYWJvcnQgJXNcbiIsIHNjbWQsCisJCQkJCSAgICAiY21kIGFib3J0ICVzXG4iLAogCQkJCQkgICAgKHJ0biA9PSBGQVNUX0lPX0ZBSUwpID8KIAkJCQkJICAgICJub3Qgc2VuZCIgOiAiZmFpbGVkIikpOwogCQl9CkBAIC0xNjcsOCArMTYzLDcgQEAKIAlpZiAoIXNjc2lfZWhfc2NtZF9hZGQoc2NtZCwgMCkpIHsKIAkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKIAkJCXNjbWRfcHJpbnRrKEtFUk5fV0FSTklORywgc2NtZCwKLQkJCQkgICAgInNjbWQgJXAgdGVybWluYXRlICIKLQkJCQkgICAgImFib3J0ZWQgY29tbWFuZFxuIiwgc2NtZCkpOworCQkJCSAgICAidGVybWluYXRlIGFib3J0ZWQgY29tbWFuZFxuIikpOwogCQlzZXRfaG9zdF9ieXRlKHNjbWQsIERJRF9USU1FX09VVCk7CiAJCXNjc2lfZmluaXNoX2NvbW1hbmQoc2NtZCk7CiAJfQpAQCAtMTk0LDcgKzE4OSw3IEBACiAJCXNjbWQtPmVoX2VmbGFncyAmPSB+U0NTSV9FSF9BQk9SVF9TQ0hFRFVMRUQ7CiAJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCiAJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCi0JCQkJICAgICJzY21kICVwIHByZXZpb3VzIGFib3J0IGZhaWxlZFxuIiwgc2NtZCkpOworCQkJCSAgICAicHJldmlvdXMgYWJvcnQgZmFpbGVkXG4iKSk7CiAJCUJVR19PTihkZWxheWVkX3dvcmtfcGVuZGluZygmc2NtZC0+YWJvcnRfd29yaykpOwogCQlyZXR1cm4gRkFJTEVEOwogCX0KQEAgLTIwOCw4ICsyMDMsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHNob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKIAkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKLQkJCQkgICAgInNjbWQgJXAgbm90IGFib3J0aW5nLCBob3N0IGluIHJlY292ZXJ5XG4iLAotCQkJCSAgICBzY21kKSk7CisJCQkJICAgICJub3QgYWJvcnRpbmcsIGhvc3QgaW4gcmVjb3ZlcnlcbiIpKTsKIAkJcmV0dXJuIEZBSUxFRDsKIAl9CiAKQEAgLTIxOSw4ICsyMTMsNyBAQAogCiAJc2NtZC0+ZWhfZWZsYWdzIHw9IFNDU0lfRUhfQUJPUlRfU0NIRURVTEVEOwogCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsCi0JCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKLQkJCSAgICAic2NtZCAlcCBhYm9ydCBzY2hlZHVsZWRcbiIsIHNjbWQpKTsKKwkJc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLCAiYWJvcnQgc2NoZWR1bGVkXG4iKSk7CiAJcXVldWVfZGVsYXllZF93b3JrKHNob3N0LT50bWZfd29ya19xLCAmc2NtZC0+YWJvcnRfd29yaywgSFogLyAxMDApOwogCXJldHVybiBTVUNDRVNTOwogfQpAQCAtNzM3LDggKzczMCw3IEBACiAJc3RydWN0IGNvbXBsZXRpb24gKmVoX2FjdGlvbjsKIAogCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsIHNjbWRfcHJpbnRrKEtFUk5fSU5GTywgc2NtZCwKLQkJCSIlcyBzY21kOiAlcCByZXN1bHQ6ICV4XG4iLAotCQkJX19mdW5jX18sIHNjbWQsIHNjbWQtPnJlc3VsdCkpOworCQkJIiVzIHJlc3VsdDogJXhcbiIsIF9fZnVuY19fLCBzY21kLT5yZXN1bHQpKTsKIAogCWVoX2FjdGlvbiA9IHNjbWQtPmRldmljZS0+aG9zdC0+ZWhfYWN0aW9uOwogCWlmIChlaF9hY3Rpb24pCkBAIC04NjgsNiArODYwLDcgQEAKIAogLyoqCiAgKiBzY3NpX3RyeV90b19hYm9ydF9jbWQgLSBBc2sgaG9zdCB0byBhYm9ydCBhIFNDU0kgY29tbWFuZAorICogQGhvc3R0OglTQ1NJIGRyaXZlciBob3N0IHRlbXBsYXRlCiAgKiBAc2NtZDoJU0NTSSBjbWQgdXNlZCB0byBzZW5kIGEgdGFyZ2V0IHJlc2V0CiAgKgogICogUmV0dXJuIHZhbHVlOgpAQCAtMTA1Miw4ICsxMDQ1LDggQEAKIAlzY3NpX2xvZ19jb21wbGV0aW9uKHNjbWQsIHJ0bik7CiAKIAlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCi0JCQkiJXM6IHNjbWQ6ICVwLCB0aW1lbGVmdDogJWxkXG4iLAotCQkJX19mdW5jX18sIHNjbWQsIHRpbWVsZWZ0KSk7CisJCQkiJXMgdGltZWxlZnQ6ICVsZFxuIiwKKwkJCV9fZnVuY19fLCB0aW1lbGVmdCkpOwogCiAJLyoKIAkgKiBJZiB0aGVyZSBpcyB0aW1lIGxlZnQgc2NzaV9laF9kb25lIGdvdCBjYWxsZWQsIGFuZCB3ZSB3aWxsIGV4YW1pbmUKQEAgLTExOTIsOCArMTE4NSw3IEBACiAJCQljb250aW51ZTsKIAogCQlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCi0JCQkic2Vuc2UgcmVxdWVzdGVkIGZvciAlcCByZXN1bHQgJXhcbiIsCi0JCQlzY21kLCBzY21kLT5yZXN1bHQpKTsKKwkJCSJzZW5zZSByZXF1ZXN0ZWQsIHJlc3VsdCAleFxuIiwgc2NtZC0+cmVzdWx0KSk7CiAJCVNDU0lfTE9HX0VSUk9SX1JFQ09WRVJZKDMsIHNjc2lfcHJpbnRfc2Vuc2Uoc2NtZCkpOwogCiAJCXJ0biA9IHNjc2lfZGVjaWRlX2Rpc3Bvc2l0aW9uKHNjbWQpOwpAQCAtMTIzNSw3ICsxMjI3LDcgQEAKIAkJCQlzY21kLT5kZXZpY2UtPmVoX3RpbWVvdXQsIDApOwogCiAJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywgc2NtZF9wcmludGsoS0VSTl9JTkZPLCBzY21kLAotCQkiJXM6IHNjbWQgJXAgcnRuICV4XG4iLCBfX2Z1bmNfXywgc2NtZCwgcnRuKSk7CisJCSIlcyByZXR1cm46ICV4XG4iLCBfX2Z1bmNfXywgcnRuKSk7CiAKIAlzd2l0Y2ggKHJ0bikgewogCWNhc2UgTkVFRFNfUkVUUlk6CkBAIC0yMDkyLDggKzIwODQsOCBAQAogCQkgICAgKCsrc2NtZC0+cmV0cmllcyA8PSBzY21kLT5hbGxvd2VkKSkgewogCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKIAkJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCi0JCQkJCSAgICAgIiVzOiBmbHVzaCByZXRyeSBjbWQ6ICVwXG4iLAotCQkJCQkgICAgIGN1cnJlbnQtPmNvbW0sIHNjbWQpKTsKKwkJCQkJICAgICAiJXM6IGZsdXNoIHJldHJ5IGNtZFxuIiwKKwkJCQkJICAgICBjdXJyZW50LT5jb21tKSk7CiAJCQkJc2NzaV9xdWV1ZV9pbnNlcnQoc2NtZCwgU0NTSV9NTFFVRVVFX0VIX1JFVFJZKTsKIAkJfSBlbHNlIHsKIAkJCS8qCkBAIC0yMTA1LDggKzIwOTcsOCBAQAogCQkJCXNjbWQtPnJlc3VsdCB8PSAoRFJJVkVSX1RJTUVPVVQgPDwgMjQpOwogCQkJU0NTSV9MT0dfRVJST1JfUkVDT1ZFUlkoMywKIAkJCQlzY21kX3ByaW50ayhLRVJOX0lORk8sIHNjbWQsCi0JCQkJCSAgICAgIiVzOiBmbHVzaCBmaW5pc2ggY21kOiAlcFxuIiwKLQkJCQkJICAgICBjdXJyZW50LT5jb21tLCBzY21kKSk7CisJCQkJCSAgICAgIiVzOiBmbHVzaCBmaW5pc2ggY21kXG4iLAorCQkJCQkgICAgIGN1cnJlbnQtPmNvbW0pKTsKIAkJCXNjc2lfZmluaXNoX2NvbW1hbmQoc2NtZCk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9sb2dnaW5nLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9sb2dnaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ3MDMzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xvZ2dpbmcuYwpAQCAtMCwwICsxLDQ4NSBAQAorLyoKKyAqIHNjc2lfbG9nZ2luZy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNVU0UgTGludXggUHJvZHVjdHMgR21iSAorICogQ29weXJpZ2h0IChDKSAyMDE0IEhhbm5lcyBSZWluZWNrZSA8aGFyZUBzdXNlLmRlPgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZWguaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CisKKyNkZWZpbmUgU0NTSV9MT0dfU1BPT0xTSVpFIDQwOTYKKworI2lmIChTQ1NJX0xPR19TUE9PTFNJWkUgLyBTQ1NJX0xPR19CVUZTSVpFKSA+IEJJVFNfUEVSX0xPTkcKKyN3YXJuaW5nIFNDU0kgbG9nZ2luZyBiaXRtYXNrIHRvbyBsYXJnZQorI2VuZGlmCisKK3N0cnVjdCBzY3NpX2xvZ19idWYgeworCWNoYXIgYnVmZmVyW1NDU0lfTE9HX1NQT09MU0laRV07CisJdW5zaWduZWQgbG9uZyBtYXA7Cit9OworCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNjc2lfbG9nX2J1Ziwgc2NzaV9mb3JtYXRfbG9nKTsKKworc3RhdGljIGNoYXIgKnNjc2lfbG9nX3Jlc2VydmVfYnVmZmVyKHNpemVfdCAqbGVuKQoreworCXN0cnVjdCBzY3NpX2xvZ19idWYgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIG1hcF9iaXRzID0gc2l6ZW9mKGJ1Zi0+YnVmZmVyKSAvIFNDU0lfTE9HX0JVRlNJWkU7CisJdW5zaWduZWQgbG9uZyBpZHggPSAwOworCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJYnVmID0gdGhpc19jcHVfcHRyKCZzY3NpX2Zvcm1hdF9sb2cpOworCWlkeCA9IGZpbmRfZmlyc3RfemVyb19iaXQoJmJ1Zi0+bWFwLCBtYXBfYml0cyk7CisJaWYgKGxpa2VseShpZHggPCBtYXBfYml0cykpIHsKKwkJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoaWR4LCAmYnVmLT5tYXApKSB7CisJCQlpZHggPSBmaW5kX25leHRfemVyb19iaXQoJmJ1Zi0+bWFwLCBtYXBfYml0cywgaWR4KTsKKwkJCWlmIChpZHggPj0gbWFwX2JpdHMpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKFdBUk5fT04oaWR4ID49IG1hcF9iaXRzKSkgeworCQlwcmVlbXB0X2VuYWJsZSgpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJKmxlbiA9IFNDU0lfTE9HX0JVRlNJWkU7CisJcmV0dXJuIGJ1Zi0+YnVmZmVyICsgaWR4ICogU0NTSV9MT0dfQlVGU0laRTsKK30KKworc3RhdGljIHZvaWQgc2NzaV9sb2dfcmVsZWFzZV9idWZmZXIoY2hhciAqYnVmcHRyKQoreworCXN0cnVjdCBzY3NpX2xvZ19idWYgKmJ1ZjsKKwl1bnNpZ25lZCBsb25nIGlkeDsKKwlpbnQgcmV0OworCisJYnVmID0gdGhpc19jcHVfcHRyKCZzY3NpX2Zvcm1hdF9sb2cpOworCWlmIChidWZwdHIgPj0gYnVmLT5idWZmZXIgJiYKKwkgICAgYnVmcHRyIDwgYnVmLT5idWZmZXIgKyBTQ1NJX0xPR19TUE9PTFNJWkUpIHsKKwkJaWR4ID0gKGJ1ZnB0ciAtIGJ1Zi0+YnVmZmVyKSAvIFNDU0lfTE9HX0JVRlNJWkU7CisJCXJldCA9IHRlc3RfYW5kX2NsZWFyX2JpdChpZHgsICZidWYtPm1hcCk7CisJCVdBUk5fT04oIXJldCk7CisJfQorCXByZWVtcHRfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqc2NtZF9uYW1lKGNvbnN0IHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQpCit7CisJcmV0dXJuIHNjbWQtPnJlcXVlc3QtPnJxX2Rpc2sgPworCQlzY21kLT5yZXF1ZXN0LT5ycV9kaXNrLT5kaXNrX25hbWUgOiBOVUxMOworfQorCitzdGF0aWMgc2l6ZV90IHNkZXZfZm9ybWF0X2hlYWRlcihjaGFyICpsb2didWYsIHNpemVfdCBsb2didWZfbGVuLAorCQkJCSBjb25zdCBjaGFyICpuYW1lLCBpbnQgdGFnKQoreworCXNpemVfdCBvZmYgPSAwOworCisJaWYgKG5hbWUpCisJCW9mZiArPSBzY25wcmludGYobG9nYnVmICsgb2ZmLCBsb2didWZfbGVuIC0gb2ZmLAorCQkJCSAiWyVzXSAiLCBuYW1lKTsKKworCWlmIChXQVJOX09OKG9mZiA+PSBsb2didWZfbGVuKSkKKwkJcmV0dXJuIG9mZjsKKworCWlmICh0YWcgPj0gMCkKKwkJb2ZmICs9IHNjbnByaW50Zihsb2didWYgKyBvZmYsIGxvZ2J1Zl9sZW4gLSBvZmYsCisJCQkJICJ0YWcjJWQgIiwgdGFnKTsKKwlyZXR1cm4gb2ZmOworfQorCit2b2lkIHNkZXZfcHJlZml4X3ByaW50ayhjb25zdCBjaGFyICpsZXZlbCwgY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LAorCQkJY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCWNoYXIgKmxvZ2J1ZjsKKwlzaXplX3Qgb2ZmID0gMCwgbG9nYnVmX2xlbjsKKworCWlmICghc2RldikKKwkJcmV0dXJuOworCisJbG9nYnVmID0gc2NzaV9sb2dfcmVzZXJ2ZV9idWZmZXIoJmxvZ2J1Zl9sZW4pOworCWlmICghbG9nYnVmKQorCQlyZXR1cm47CisKKwlpZiAobmFtZSkKKwkJb2ZmICs9IHNjbnByaW50Zihsb2didWYgKyBvZmYsIGxvZ2J1Zl9sZW4gLSBvZmYsCisJCQkJICJbJXNdICIsIG5hbWUpOworCWlmICghV0FSTl9PTihvZmYgPj0gbG9nYnVmX2xlbikpIHsKKwkJdmFfc3RhcnQoYXJncywgZm10KTsKKwkJb2ZmICs9IHZzY25wcmludGYobG9nYnVmICsgb2ZmLCBsb2didWZfbGVuIC0gb2ZmLCBmbXQsIGFyZ3MpOworCQl2YV9lbmQoYXJncyk7CisJfQorCWRldl9wcmludGsobGV2ZWwsICZzZGV2LT5zZGV2X2dlbmRldiwgIiVzIiwgbG9nYnVmKTsKKwlzY3NpX2xvZ19yZWxlYXNlX2J1ZmZlcihsb2didWYpOworfQorRVhQT1JUX1NZTUJPTChzZGV2X3ByZWZpeF9wcmludGspOworCit2b2lkIHNjbWRfcHJpbnRrKGNvbnN0IGNoYXIgKmxldmVsLCBjb25zdCBzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kLAorCQljb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJY2hhciAqbG9nYnVmOworCXNpemVfdCBvZmYgPSAwLCBsb2didWZfbGVuOworCisJaWYgKCFzY21kIHx8ICFzY21kLT5jbW5kKQorCQlyZXR1cm47CisKKwlsb2didWYgPSBzY3NpX2xvZ19yZXNlcnZlX2J1ZmZlcigmbG9nYnVmX2xlbik7CisJaWYgKCFsb2didWYpCisJCXJldHVybjsKKwlvZmYgPSBzZGV2X2Zvcm1hdF9oZWFkZXIobG9nYnVmLCBsb2didWZfbGVuLCBzY21kX25hbWUoc2NtZCksCisJCQkJIHNjbWQtPnJlcXVlc3QtPnRhZyk7CisJaWYgKG9mZiA8IGxvZ2J1Zl9sZW4pIHsKKwkJdmFfc3RhcnQoYXJncywgZm10KTsKKwkJb2ZmICs9IHZzY25wcmludGYobG9nYnVmICsgb2ZmLCBsb2didWZfbGVuIC0gb2ZmLCBmbXQsIGFyZ3MpOworCQl2YV9lbmQoYXJncyk7CisJfQorCWRldl9wcmludGsobGV2ZWwsICZzY21kLT5kZXZpY2UtPnNkZXZfZ2VuZGV2LCAiJXMiLCBsb2didWYpOworCXNjc2lfbG9nX3JlbGVhc2VfYnVmZmVyKGxvZ2J1Zik7Cit9CitFWFBPUlRfU1lNQk9MKHNjbWRfcHJpbnRrKTsKKworc3RhdGljIHNpemVfdCBzY3NpX2Zvcm1hdF9vcGNvZGVfbmFtZShjaGFyICpidWZmZXIsIHNpemVfdCBidWZfbGVuLAorCQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNkYnApCit7CisJaW50IHNhLCBjZGIwOworCWNvbnN0IGNoYXIgKmNkYl9uYW1lID0gTlVMTCwgKnNhX25hbWUgPSBOVUxMOworCXNpemVfdCBvZmY7CisKKwljZGIwID0gY2RicFswXTsKKwlpZiAoY2RiMCA9PSBWQVJJQUJMRV9MRU5HVEhfQ01EKSB7CisJCWludCBsZW4gPSBzY3NpX3Zhcmxlbl9jZGJfbGVuZ3RoKGNkYnApOworCisJCWlmIChsZW4gPCAxMCkgeworCQkJb2ZmID0gc2NucHJpbnRmKGJ1ZmZlciwgYnVmX2xlbiwKKwkJCQkJInNob3J0IHZhcmlhYmxlIGxlbmd0aCBjb21tYW5kLCBsZW49JWQiLAorCQkJCQlsZW4pOworCQkJcmV0dXJuIG9mZjsKKwkJfQorCQlzYSA9IChjZGJwWzhdIDw8IDgpICsgY2RicFs5XTsKKwl9IGVsc2UKKwkJc2EgPSBjZGJwWzFdICYgMHgxZjsKKworCWlmICghc2NzaV9vcGNvZGVfc2FfbmFtZShjZGIwLCBzYSwgJmNkYl9uYW1lLCAmc2FfbmFtZSkpIHsKKwkJaWYgKGNkYl9uYW1lKQorCQkJb2ZmID0gc2NucHJpbnRmKGJ1ZmZlciwgYnVmX2xlbiwgIiVzIiwgY2RiX25hbWUpOworCQllbHNlIHsKKwkJCW9mZiA9IHNjbnByaW50ZihidWZmZXIsIGJ1Zl9sZW4sICJvcGNvZGU9MHgleCIsIGNkYjApOworCQkJaWYgKFdBUk5fT04ob2ZmID49IGJ1Zl9sZW4pKQorCQkJCXJldHVybiBvZmY7CisJCQlpZiAoY2RiMCA+PSBWRU5ET1JfU1BFQ0lGSUNfQ0RCKQorCQkJCW9mZiArPSBzY25wcmludGYoYnVmZmVyICsgb2ZmLCBidWZfbGVuIC0gb2ZmLAorCQkJCQkJICIgKHZlbmRvcikiKTsKKwkJCWVsc2UgaWYgKGNkYjAgPj0gMHg2MCAmJiBjZGIwIDwgMHg3ZSkKKwkJCQlvZmYgKz0gc2NucHJpbnRmKGJ1ZmZlciArIG9mZiwgYnVmX2xlbiAtIG9mZiwKKwkJCQkJCSAiIChyZXNlcnZlZCkiKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChzYV9uYW1lKQorCQkJb2ZmID0gc2NucHJpbnRmKGJ1ZmZlciwgYnVmX2xlbiwgIiVzIiwgc2FfbmFtZSk7CisJCWVsc2UgaWYgKGNkYl9uYW1lKQorCQkJb2ZmID0gc2NucHJpbnRmKGJ1ZmZlciwgYnVmX2xlbiwgIiVzLCBzYT0weCV4IiwKKwkJCQkJY2RiX25hbWUsIHNhKTsKKwkJZWxzZQorCQkJb2ZmID0gc2NucHJpbnRmKGJ1ZmZlciwgYnVmX2xlbiwKKwkJCQkJIm9wY29kZT0weCV4LCBzYT0weCV4IiwgY2RiMCwgc2EpOworCX0KKwlXQVJOX09OKG9mZiA+PSBidWZfbGVuKTsKKwlyZXR1cm4gb2ZmOworfQorCitzaXplX3QgX19zY3NpX2Zvcm1hdF9jb21tYW5kKGNoYXIgKmxvZ2J1Ziwgc2l6ZV90IGxvZ2J1Zl9sZW4sCisJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNkYiwgc2l6ZV90IGNkYl9sZW4pCit7CisJaW50IGxlbiwgazsKKwlzaXplX3Qgb2ZmOworCisJb2ZmID0gc2NzaV9mb3JtYXRfb3Bjb2RlX25hbWUobG9nYnVmLCBsb2didWZfbGVuLCBjZGIpOworCWlmIChvZmYgPj0gbG9nYnVmX2xlbikKKwkJcmV0dXJuIG9mZjsKKwlsZW4gPSBzY3NpX2NvbW1hbmRfc2l6ZShjZGIpOworCWlmIChjZGJfbGVuIDwgbGVuKQorCQlsZW4gPSBjZGJfbGVuOworCS8qIHByaW50IG91dCBhbGwgYnl0ZXMgaW4gY2RiICovCisJZm9yIChrID0gMDsgayA8IGxlbjsgKytrKSB7CisJCWlmIChvZmYgPiBsb2didWZfbGVuIC0gMykKKwkJCWJyZWFrOworCQlvZmYgKz0gc2NucHJpbnRmKGxvZ2J1ZiArIG9mZiwgbG9nYnVmX2xlbiAtIG9mZiwKKwkJCQkgIiAlMDJ4IiwgY2RiW2tdKTsKKwl9CisJcmV0dXJuIG9mZjsKK30KK0VYUE9SVF9TWU1CT0woX19zY3NpX2Zvcm1hdF9jb21tYW5kKTsKKwordm9pZCBzY3NpX3ByaW50X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqY21kKQoreworCWludCBrOworCWNoYXIgKmxvZ2J1ZjsKKwlzaXplX3Qgb2ZmLCBsb2didWZfbGVuOworCisJaWYgKCFjbWQtPmNtbmQpCisJCXJldHVybjsKKworCWxvZ2J1ZiA9IHNjc2lfbG9nX3Jlc2VydmVfYnVmZmVyKCZsb2didWZfbGVuKTsKKwlpZiAoIWxvZ2J1ZikKKwkJcmV0dXJuOworCisJb2ZmID0gc2Rldl9mb3JtYXRfaGVhZGVyKGxvZ2J1ZiwgbG9nYnVmX2xlbiwKKwkJCQkgc2NtZF9uYW1lKGNtZCksIGNtZC0+cmVxdWVzdC0+dGFnKTsKKwlpZiAob2ZmID49IGxvZ2J1Zl9sZW4pCisJCWdvdG8gb3V0X3ByaW50azsKKwlvZmYgKz0gc2NucHJpbnRmKGxvZ2J1ZiArIG9mZiwgbG9nYnVmX2xlbiAtIG9mZiwgIkNEQjogIik7CisJaWYgKFdBUk5fT04ob2ZmID49IGxvZ2J1Zl9sZW4pKQorCQlnb3RvIG91dF9wcmludGs7CisKKwlvZmYgKz0gc2NzaV9mb3JtYXRfb3Bjb2RlX25hbWUobG9nYnVmICsgb2ZmLCBsb2didWZfbGVuIC0gb2ZmLAorCQkJCSAgICAgICBjbWQtPmNtbmQpOworCWlmIChvZmYgPj0gbG9nYnVmX2xlbikKKwkJZ290byBvdXRfcHJpbnRrOworCisJLyogcHJpbnQgb3V0IGFsbCBieXRlcyBpbiBjZGIgKi8KKwlpZiAoY21kLT5jbWRfbGVuID4gMTYpIHsKKwkJLyogUHJpbnQgb3Bjb2RlIGluIG9uZSBsaW5lIGFuZCB1c2Ugc2VwYXJhdGUgbGluZXMgZm9yIENEQiAqLworCQlvZmYgKz0gc2NucHJpbnRmKGxvZ2J1ZiArIG9mZiwgbG9nYnVmX2xlbiAtIG9mZiwgIlxuIik7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmY21kLT5kZXZpY2UtPnNkZXZfZ2VuZGV2LCAiJXMiLCBsb2didWYpOworCQlzY3NpX2xvZ19yZWxlYXNlX2J1ZmZlcihsb2didWYpOworCQlmb3IgKGsgPSAwOyBrIDwgY21kLT5jbWRfbGVuOyBrICs9IDE2KSB7CisJCQlzaXplX3QgbGluZWxlbiA9IG1pbihjbWQtPmNtZF9sZW4gLSBrLCAxNik7CisKKwkJCWxvZ2J1ZiA9IHNjc2lfbG9nX3Jlc2VydmVfYnVmZmVyKCZsb2didWZfbGVuKTsKKwkJCWlmICghbG9nYnVmKQorCQkJCWJyZWFrOworCQkJb2ZmID0gc2Rldl9mb3JtYXRfaGVhZGVyKGxvZ2J1ZiwgbG9nYnVmX2xlbiwKKwkJCQkJCSBzY21kX25hbWUoY21kKSwKKwkJCQkJCSBjbWQtPnJlcXVlc3QtPnRhZyk7CisJCQlpZiAoIVdBUk5fT04ob2ZmID4gbG9nYnVmX2xlbiAtIDU4KSkgeworCQkJCW9mZiArPSBzY25wcmludGYobG9nYnVmICsgb2ZmLCBsb2didWZfbGVuIC0gb2ZmLAorCQkJCQkJICJDREJbJTAyeF06ICIsIGspOworCQkJCWhleF9kdW1wX3RvX2J1ZmZlcigmY21kLT5jbW5kW2tdLCBsaW5lbGVuLAorCQkJCQkJICAgMTYsIDEsIGxvZ2J1ZiArIG9mZiwKKwkJCQkJCSAgIGxvZ2J1Zl9sZW4gLSBvZmYsIGZhbHNlKTsKKwkJCX0KKwkJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmY21kLT5kZXZpY2UtPnNkZXZfZ2VuZGV2LCAiJXMiLAorCQkJCSAgIGxvZ2J1Zik7CisJCQlzY3NpX2xvZ19yZWxlYXNlX2J1ZmZlcihsb2didWYpOworCQl9CisJCXJldHVybjsKKwl9CisJaWYgKCFXQVJOX09OKG9mZiA+IGxvZ2J1Zl9sZW4gLSA0OSkpIHsKKwkJb2ZmICs9IHNjbnByaW50Zihsb2didWYgKyBvZmYsIGxvZ2J1Zl9sZW4gLSBvZmYsICIgIik7CisJCWhleF9kdW1wX3RvX2J1ZmZlcihjbWQtPmNtbmQsIGNtZC0+Y21kX2xlbiwgMTYsIDEsCisJCQkJICAgbG9nYnVmICsgb2ZmLCBsb2didWZfbGVuIC0gb2ZmLAorCQkJCSAgIGZhbHNlKTsKKwl9CitvdXRfcHJpbnRrOgorCWRldl9wcmludGsoS0VSTl9JTkZPLCAmY21kLT5kZXZpY2UtPnNkZXZfZ2VuZGV2LCAiJXMiLCBsb2didWYpOworCXNjc2lfbG9nX3JlbGVhc2VfYnVmZmVyKGxvZ2J1Zik7Cit9CitFWFBPUlRfU1lNQk9MKHNjc2lfcHJpbnRfY29tbWFuZCk7CisKK3N0YXRpYyBzaXplX3QKK3Njc2lfZm9ybWF0X2V4dGRfc2Vuc2UoY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmX2xlbiwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgYXNjLCB1bnNpZ25lZCBjaGFyIGFzY3EpCit7CisJc2l6ZV90IG9mZiA9IDA7CisJY29uc3QgY2hhciAqZXh0ZF9zZW5zZV9mbXQgPSBOVUxMOworCWNvbnN0IGNoYXIgKmV4dGRfc2Vuc2Vfc3RyID0gc2NzaV9leHRkX3NlbnNlX2Zvcm1hdChhc2MsIGFzY3EsCisJCQkJCQkJICAgICZleHRkX3NlbnNlX2ZtdCk7CisKKwlpZiAoZXh0ZF9zZW5zZV9zdHIpIHsKKwkJb2ZmID0gc2NucHJpbnRmKGJ1ZmZlciwgYnVmX2xlbiwgIkFkZC4gU2Vuc2U6ICVzIiwKKwkJCQlleHRkX3NlbnNlX3N0cik7CisJCWlmIChleHRkX3NlbnNlX2ZtdCkKKwkJCW9mZiArPSBzY25wcmludGYoYnVmZmVyICsgb2ZmLCBidWZfbGVuIC0gb2ZmLAorCQkJCQkgIiglcyV4KSIsIGV4dGRfc2Vuc2VfZm10LCBhc2NxKTsKKwl9IGVsc2UgeworCQlpZiAoYXNjID49IDB4ODApCisJCQlvZmYgPSBzY25wcmludGYoYnVmZmVyLCBidWZfbGVuLCAiPDx2ZW5kb3I+PiIpOworCQlvZmYgKz0gc2NucHJpbnRmKGJ1ZmZlciArIG9mZiwgYnVmX2xlbiAtIG9mZiwKKwkJCQkgIkFTQz0weCV4ICIsIGFzYyk7CisJCWlmIChhc2NxID49IDB4ODApCisJCQlvZmYgKz0gc2NucHJpbnRmKGJ1ZmZlciArIG9mZiwgYnVmX2xlbiAtIG9mZiwKKwkJCQkJICI8PHZlbmRvcj4+Iik7CisJCW9mZiArPSBzY25wcmludGYoYnVmZmVyICsgb2ZmLCBidWZfbGVuIC0gb2ZmLAorCQkJCSAiQVNDUT0weCV4ICIsIGFzY3EpOworCX0KKwlyZXR1cm4gb2ZmOworfQorCitzdGF0aWMgc2l6ZV90CitzY3NpX2Zvcm1hdF9zZW5zZV9oZHIoY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmX2xlbiwKKwkJICAgICAgY29uc3Qgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKK3sKKwljb25zdCBjaGFyICpzZW5zZV90eHQ7CisJc2l6ZV90IG9mZjsKKworCW9mZiA9IHNjbnByaW50ZihidWZmZXIsIGJ1Zl9sZW4sICJTZW5zZSBLZXkgOiAiKTsKKwlzZW5zZV90eHQgPSBzY3NpX3NlbnNlX2tleV9zdHJpbmcoc3NoZHItPnNlbnNlX2tleSk7CisJaWYgKHNlbnNlX3R4dCkKKwkJb2ZmICs9IHNjbnByaW50ZihidWZmZXIgKyBvZmYsIGJ1Zl9sZW4gLSBvZmYsCisJCQkJICIlcyAiLCBzZW5zZV90eHQpOworCWVsc2UKKwkJb2ZmICs9IHNjbnByaW50ZihidWZmZXIgKyBvZmYsIGJ1Zl9sZW4gLSBvZmYsCisJCQkJICIweCV4ICIsIHNzaGRyLT5zZW5zZV9rZXkpOworCW9mZiArPSBzY25wcmludGYoYnVmZmVyICsgb2ZmLCBidWZfbGVuIC0gb2ZmLAorCQlzY3NpX3NlbnNlX2lzX2RlZmVycmVkKHNzaGRyKSA/ICJbZGVmZXJyZWRdICIgOiAiW2N1cnJlbnRdICIpOworCisJaWYgKHNzaGRyLT5yZXNwb25zZV9jb2RlID49IDB4NzIpCisJCW9mZiArPSBzY25wcmludGYoYnVmZmVyICsgb2ZmLCBidWZfbGVuIC0gb2ZmLCAiW2Rlc2NyaXB0b3JdICIpOworCXJldHVybiBvZmY7Cit9CisKK3N0YXRpYyB2b2lkCitzY3NpX2xvZ19kdW1wX3NlbnNlKGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgY29uc3QgY2hhciAqbmFtZSwgaW50IHRhZywKKwkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlbnNlX2J1ZmZlciwgaW50IHNlbnNlX2xlbikKK3sKKwljaGFyICpsb2didWY7CisJc2l6ZV90IGxvZ2J1Zl9sZW47CisJaW50IGk7CisKKwlsb2didWYgPSBzY3NpX2xvZ19yZXNlcnZlX2J1ZmZlcigmbG9nYnVmX2xlbik7CisJaWYgKCFsb2didWYpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBzZW5zZV9sZW47IGkgKz0gMTYpIHsKKwkJaW50IGxlbiA9IG1pbihzZW5zZV9sZW4gLSBpLCAxNik7CisJCXNpemVfdCBvZmY7CisKKwkJb2ZmID0gc2Rldl9mb3JtYXRfaGVhZGVyKGxvZ2J1ZiwgbG9nYnVmX2xlbiwKKwkJCQkJIG5hbWUsIHRhZyk7CisJCWhleF9kdW1wX3RvX2J1ZmZlcigmc2Vuc2VfYnVmZmVyW2ldLCBsZW4sIDE2LCAxLAorCQkJCSAgIGxvZ2J1ZiArIG9mZiwgbG9nYnVmX2xlbiAtIG9mZiwKKwkJCQkgICBmYWxzZSk7CisJCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc2Rldi0+c2Rldl9nZW5kZXYsICIlcyIsIGxvZ2J1Zik7CisJfQorCXNjc2lfbG9nX3JlbGVhc2VfYnVmZmVyKGxvZ2J1Zik7Cit9CisKK3N0YXRpYyB2b2lkCitzY3NpX2xvZ19wcmludF9zZW5zZV9oZHIoY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBjb25zdCBjaGFyICpuYW1lLAorCQkJIGludCB0YWcsIGNvbnN0IHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCit7CisJY2hhciAqbG9nYnVmOworCXNpemVfdCBvZmYsIGxvZ2J1Zl9sZW47CisKKwlsb2didWYgPSBzY3NpX2xvZ19yZXNlcnZlX2J1ZmZlcigmbG9nYnVmX2xlbik7CisJaWYgKCFsb2didWYpCisJCXJldHVybjsKKwlvZmYgPSBzZGV2X2Zvcm1hdF9oZWFkZXIobG9nYnVmLCBsb2didWZfbGVuLCBuYW1lLCB0YWcpOworCW9mZiArPSBzY3NpX2Zvcm1hdF9zZW5zZV9oZHIobG9nYnVmICsgb2ZmLCBsb2didWZfbGVuIC0gb2ZmLCBzc2hkcik7CisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZzZGV2LT5zZGV2X2dlbmRldiwgIiVzIiwgbG9nYnVmKTsKKwlzY3NpX2xvZ19yZWxlYXNlX2J1ZmZlcihsb2didWYpOworCisJbG9nYnVmID0gc2NzaV9sb2dfcmVzZXJ2ZV9idWZmZXIoJmxvZ2J1Zl9sZW4pOworCWlmICghbG9nYnVmKQorCQlyZXR1cm47CisJb2ZmID0gc2Rldl9mb3JtYXRfaGVhZGVyKGxvZ2J1ZiwgbG9nYnVmX2xlbiwgbmFtZSwgdGFnKTsKKwlvZmYgKz0gc2NzaV9mb3JtYXRfZXh0ZF9zZW5zZShsb2didWYgKyBvZmYsIGxvZ2J1Zl9sZW4gLSBvZmYsCisJCQkJICAgICAgc3NoZHItPmFzYywgc3NoZHItPmFzY3EpOworCWRldl9wcmludGsoS0VSTl9JTkZPLCAmc2Rldi0+c2Rldl9nZW5kZXYsICIlcyIsIGxvZ2J1Zik7CisJc2NzaV9sb2dfcmVsZWFzZV9idWZmZXIobG9nYnVmKTsKK30KKworc3RhdGljIHZvaWQKK3Njc2lfbG9nX3ByaW50X3NlbnNlKGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgY29uc3QgY2hhciAqbmFtZSwgaW50IHRhZywKKwkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzZW5zZV9idWZmZXIsIGludCBzZW5zZV9sZW4pCit7CisJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyOworCisJaWYgKHNjc2lfbm9ybWFsaXplX3NlbnNlKHNlbnNlX2J1ZmZlciwgc2Vuc2VfbGVuLCAmc3NoZHIpKQorCQlzY3NpX2xvZ19wcmludF9zZW5zZV9oZHIoc2RldiwgbmFtZSwgdGFnLCAmc3NoZHIpOworCWVsc2UKKwkJc2NzaV9sb2dfZHVtcF9zZW5zZShzZGV2LCBuYW1lLCB0YWcsIHNlbnNlX2J1ZmZlciwgc2Vuc2VfbGVuKTsKK30KKworLyoKKyAqIFByaW50IG5vcm1hbGl6ZWQgU0NTSSBzZW5zZSBoZWFkZXIgd2l0aCBhIHByZWZpeC4KKyAqLwordm9pZAorc2NzaV9wcmludF9zZW5zZV9oZHIoY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBjb25zdCBjaGFyICpuYW1lLAorCQkgICAgIGNvbnN0IHN0cnVjdCBzY3NpX3NlbnNlX2hkciAqc3NoZHIpCit7CisJc2NzaV9sb2dfcHJpbnRfc2Vuc2VfaGRyKHNkZXYsIG5hbWUsIC0xLCBzc2hkcik7Cit9CitFWFBPUlRfU1lNQk9MKHNjc2lfcHJpbnRfc2Vuc2VfaGRyKTsKKworLyogTm9ybWFsaXplIGFuZCBwcmludCBzZW5zZSBidWZmZXIgd2l0aCBuYW1lIHByZWZpeCAqLwordm9pZCBfX3Njc2lfcHJpbnRfc2Vuc2UoY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBjb25zdCBjaGFyICpuYW1lLAorCQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2Vuc2VfYnVmZmVyLCBpbnQgc2Vuc2VfbGVuKQoreworCXNjc2lfbG9nX3ByaW50X3NlbnNlKHNkZXYsIG5hbWUsIC0xLCBzZW5zZV9idWZmZXIsIHNlbnNlX2xlbik7Cit9CitFWFBPUlRfU1lNQk9MKF9fc2NzaV9wcmludF9zZW5zZSk7CisKKy8qIE5vcm1hbGl6ZSBhbmQgcHJpbnQgc2Vuc2UgYnVmZmVyIGluIFNDU0kgY29tbWFuZCAqLwordm9pZCBzY3NpX3ByaW50X3NlbnNlKGNvbnN0IHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKK3sKKwlzY3NpX2xvZ19wcmludF9zZW5zZShjbWQtPmRldmljZSwgc2NtZF9uYW1lKGNtZCksIGNtZC0+cmVxdWVzdC0+dGFnLAorCQkJICAgICBjbWQtPnNlbnNlX2J1ZmZlciwgU0NTSV9TRU5TRV9CVUZGRVJTSVpFKTsKK30KK0VYUE9SVF9TWU1CT0woc2NzaV9wcmludF9zZW5zZSk7CisKK3ZvaWQgc2NzaV9wcmludF9yZXN1bHQoY29uc3Qgc3RydWN0IHNjc2lfY21uZCAqY21kLCBjb25zdCBjaGFyICptc2csCisJCSAgICAgICBpbnQgZGlzcG9zaXRpb24pCit7CisJY2hhciAqbG9nYnVmOworCXNpemVfdCBvZmYsIGxvZ2J1Zl9sZW47CisJY29uc3QgY2hhciAqbWxyZXRfc3RyaW5nID0gc2NzaV9tbHJldHVybl9zdHJpbmcoZGlzcG9zaXRpb24pOworCWNvbnN0IGNoYXIgKmhiX3N0cmluZyA9IHNjc2lfaG9zdGJ5dGVfc3RyaW5nKGNtZC0+cmVzdWx0KTsKKwljb25zdCBjaGFyICpkYl9zdHJpbmcgPSBzY3NpX2RyaXZlcmJ5dGVfc3RyaW5nKGNtZC0+cmVzdWx0KTsKKworCWxvZ2J1ZiA9IHNjc2lfbG9nX3Jlc2VydmVfYnVmZmVyKCZsb2didWZfbGVuKTsKKwlpZiAoIWxvZ2J1ZikKKwkJcmV0dXJuOworCisJb2ZmID0gc2Rldl9mb3JtYXRfaGVhZGVyKGxvZ2J1ZiwgbG9nYnVmX2xlbiwKKwkJCQkgc2NtZF9uYW1lKGNtZCksIGNtZC0+cmVxdWVzdC0+dGFnKTsKKworCWlmIChvZmYgPj0gbG9nYnVmX2xlbikKKwkJZ290byBvdXRfcHJpbnRrOworCisJaWYgKG1zZykgeworCQlvZmYgKz0gc2NucHJpbnRmKGxvZ2J1ZiArIG9mZiwgbG9nYnVmX2xlbiAtIG9mZiwKKwkJCQkgIiVzOiAiLCBtc2cpOworCQlpZiAoV0FSTl9PTihvZmYgPj0gbG9nYnVmX2xlbikpCisJCQlnb3RvIG91dF9wcmludGs7CisJfQorCWlmIChtbHJldF9zdHJpbmcpCisJCW9mZiArPSBzY25wcmludGYobG9nYnVmICsgb2ZmLCBsb2didWZfbGVuIC0gb2ZmLAorCQkJCSAiJXMgIiwgbWxyZXRfc3RyaW5nKTsKKwllbHNlCisJCW9mZiArPSBzY25wcmludGYobG9nYnVmICsgb2ZmLCBsb2didWZfbGVuIC0gb2ZmLAorCQkJCSAiVU5LTk9XTigweCUwMngpICIsIGRpc3Bvc2l0aW9uKTsKKwlpZiAoV0FSTl9PTihvZmYgPj0gbG9nYnVmX2xlbikpCisJCWdvdG8gb3V0X3ByaW50azsKKworCW9mZiArPSBzY25wcmludGYobG9nYnVmICsgb2ZmLCBsb2didWZfbGVuIC0gb2ZmLCAiUmVzdWx0OiAiKTsKKwlpZiAoV0FSTl9PTihvZmYgPj0gbG9nYnVmX2xlbikpCisJCWdvdG8gb3V0X3ByaW50azsKKworCWlmIChoYl9zdHJpbmcpCisJCW9mZiArPSBzY25wcmludGYobG9nYnVmICsgb2ZmLCBsb2didWZfbGVuIC0gb2ZmLAorCQkJCSAiaG9zdGJ5dGU9JXMgIiwgaGJfc3RyaW5nKTsKKwllbHNlCisJCW9mZiArPSBzY25wcmludGYobG9nYnVmICsgb2ZmLCBsb2didWZfbGVuIC0gb2ZmLAorCQkJCSAiaG9zdGJ5dGU9MHglMDJ4ICIsIGhvc3RfYnl0ZShjbWQtPnJlc3VsdCkpOworCWlmIChXQVJOX09OKG9mZiA+PSBsb2didWZfbGVuKSkKKwkJZ290byBvdXRfcHJpbnRrOworCisJaWYgKGRiX3N0cmluZykKKwkJb2ZmICs9IHNjbnByaW50Zihsb2didWYgKyBvZmYsIGxvZ2J1Zl9sZW4gLSBvZmYsCisJCQkJICJkcml2ZXJieXRlPSVzIiwgZGJfc3RyaW5nKTsKKwllbHNlCisJCW9mZiArPSBzY25wcmludGYobG9nYnVmICsgb2ZmLCBsb2didWZfbGVuIC0gb2ZmLAorCQkJCSAiZHJpdmVyYnl0ZT0weCUwMngiLCBkcml2ZXJfYnl0ZShjbWQtPnJlc3VsdCkpOworb3V0X3ByaW50azoKKwlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJmNtZC0+ZGV2aWNlLT5zZGV2X2dlbmRldiwgIiVzIiwgbG9nYnVmKTsKKwlzY3NpX2xvZ19yZWxlYXNlX2J1ZmZlcihsb2didWYpOworfQorRVhQT1JUX1NZTUJPTChzY3NpX3ByaW50X3Jlc3VsdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9wcm9jLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9wcm9jLmMKaW5kZXggNmZjZWZhMi4uMjUxNTk4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfcHJvYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3Byb2MuYwpAQCAtMTg5LDM2ICsxODksMzYgQEAKIAkJc2Rldi0+aG9zdC0+aG9zdF9ubywgc2Rldi0+Y2hhbm5lbCwgc2Rldi0+aWQsIHNkZXYtPmx1bik7CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQlpZiAoc2Rldi0+dmVuZG9yW2ldID49IDB4MjApCi0JCQlzZXFfcHJpbnRmKHMsICIlYyIsIHNkZXYtPnZlbmRvcltpXSk7CisJCQlzZXFfcHV0YyhzLCBzZGV2LT52ZW5kb3JbaV0pOwogCQllbHNlCi0JCQlzZXFfcHJpbnRmKHMsICIgIik7CisJCQlzZXFfcHV0YyhzLCAnICcpOwogCX0KIAotCXNlcV9wcmludGYocywgIiBNb2RlbDogIik7CisJc2VxX3B1dHMocywgIiBNb2RlbDogIik7CiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAkJaWYgKHNkZXYtPm1vZGVsW2ldID49IDB4MjApCi0JCQlzZXFfcHJpbnRmKHMsICIlYyIsIHNkZXYtPm1vZGVsW2ldKTsKKwkJCXNlcV9wdXRjKHMsIHNkZXYtPm1vZGVsW2ldKTsKIAkJZWxzZQotCQkJc2VxX3ByaW50ZihzLCAiICIpOworCQkJc2VxX3B1dGMocywgJyAnKTsKIAl9CiAKLQlzZXFfcHJpbnRmKHMsICIgUmV2OiAiKTsKKwlzZXFfcHV0cyhzLCAiIFJldjogIik7CiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQlpZiAoc2Rldi0+cmV2W2ldID49IDB4MjApCi0JCQlzZXFfcHJpbnRmKHMsICIlYyIsIHNkZXYtPnJldltpXSk7CisJCQlzZXFfcHV0YyhzLCBzZGV2LT5yZXZbaV0pOwogCQllbHNlCi0JCQlzZXFfcHJpbnRmKHMsICIgIik7CisJCQlzZXFfcHV0YyhzLCAnICcpOwogCX0KIAotCXNlcV9wcmludGYocywgIlxuIik7CisJc2VxX3B1dGMocywgJ1xuJyk7CiAKIAlzZXFfcHJpbnRmKHMsICIgIFR5cGU6ICAgJXMgIiwgc2NzaV9kZXZpY2VfdHlwZShzZGV2LT50eXBlKSk7CiAJc2VxX3ByaW50ZihzLCAiICAgICAgICAgICAgICAgQU5TSSAgU0NTSSByZXZpc2lvbjogJTAyeCIsCiAJCQlzZGV2LT5zY3NpX2xldmVsIC0gKHNkZXYtPnNjc2lfbGV2ZWwgPiAxKSk7CiAJaWYgKHNkZXYtPnNjc2lfbGV2ZWwgPT0gMikKLQkJc2VxX3ByaW50ZihzLCAiIENDU1xuIik7CisJCXNlcV9wdXRzKHMsICIgQ0NTXG4iKTsKIAllbHNlCi0JCXNlcV9wcmludGYocywgIlxuIik7CisJCXNlcV9wdXRjKHMsICdcbicpOwogCiBvdXQ6CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKaW5kZXggOTgzYWVkMS4uMGRlYjM4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYXN5bmMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KQEAgLTk4LDIwICs5OSw2IEBACiBtb2R1bGVfcGFyYW1fc3RyaW5nKHNjYW4sIHNjc2lfc2Nhbl90eXBlLCBzaXplb2Yoc2NzaV9zY2FuX3R5cGUpLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0Moc2NhbiwgInN5bmMsIGFzeW5jIG9yIG5vbmUiKTsKIAotLyoKLSAqIG1heF9zY3NpX3JlcG9ydF9sdW5zOiB0aGUgbWF4aW11bSBudW1iZXIgb2YgTFVOUyB0aGF0IHdpbGwgYmUKLSAqIHJldHVybmVkIGZyb20gdGhlIFJFUE9SVCBMVU5TIGNvbW1hbmQuIDggdGltZXMgdGhpcyB2YWx1ZSBtdXN0Ci0gKiBiZSBhbGxvY2F0ZWQuIEluIHRoZW9yeSB0aGlzIGNvdWxkIGJlIHVwIHRvIGFuIDggYnl0ZSB2YWx1ZSwgYnV0Ci0gKiBpbiBwcmFjdGljZSwgdGhlIG1heGltdW0gbnVtYmVyIG9mIExVTnMgc3VwcG9yZWQgYnkgYW55IGRldmljZQotICogaXMgYWJvdXQgMTZrLgotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IG1heF9zY3NpX3JlcG9ydF9sdW5zID0gNTExOwotCi1tb2R1bGVfcGFyYW1fbmFtZWQobWF4X3JlcG9ydF9sdW5zLCBtYXhfc2NzaV9yZXBvcnRfbHVucywgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MobWF4X3JlcG9ydF9sdW5zLAotCQkgIlJFUE9SVCBMVU5TIG1heGltdW0gbnVtYmVyIG9mIExVTlMgcmVjZWl2ZWQgKHNob3VsZCBiZSIKLQkJICIgYmV0d2VlbiAxIGFuZCAxNjM4NCkiKTsKLQogc3RhdGljIHVuc2lnbmVkIGludCBzY3NpX2lucV90aW1lb3V0ID0gU0NTSV9USU1FT1VUL0haICsgMTg7CiAKIG1vZHVsZV9wYXJhbV9uYW1lZChpbnFfdGltZW91dCwgc2NzaV9pbnFfdGltZW91dCwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKQEAgLTEzNjcsNyArMTM1NCw2IEBACiAJdW5zaWduZWQgaW50IHJldHJpZXM7CiAJaW50IHJlc3VsdDsKIAlzdHJ1Y3Qgc2NzaV9sdW4gKmx1bnAsICpsdW5fZGF0YTsKLQl1OCAqZGF0YTsKIAlzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHIgc3NoZHI7CiAJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KCZzdGFyZ2V0LT5kZXYpOwpAQCAtMTQwNywxNiArMTM5MywxMiBAQAogCiAJLyoKIAkgKiBBbGxvY2F0ZSBlbm91Z2ggdG8gaG9sZCB0aGUgaGVhZGVyICh0aGUgc2FtZSBzaXplIGFzIG9uZSBzY3NpX2x1bikKLQkgKiBwbHVzIHRoZSBtYXggbnVtYmVyIG9mIGx1bnMgd2UgYXJlIHJlcXVlc3RpbmcuCi0JICoKLQkgKiBSZWFsbG9jYXRpbmcgYW5kIHRyeWluZyBhZ2FpbiAod2l0aCB0aGUgZXhhY3QgYW1vdW50IHdlIG5lZWQpCi0JICogd291bGQgYmUgbmljZSwgYnV0IHRoZW4gd2UgbmVlZCB0byBzb21laG93IGxpbWl0IHRoZSBzaXplCi0JICogYWxsb2NhdGVkIGJhc2VkIG9uIHRoZSBhdmFpbGFibGUgbWVtb3J5IGFuZCB0aGUgbGltaXRzIG9mCi0JICoga21hbGxvYyAtIHdlIGRvbid0IHdhbnQgYSBrbWFsbG9jKCkgZmFpbHVyZSBvZiBhIGh1Z2UgdmFsdWUgdG8KLQkgKiBwcmV2ZW50IHVzIGZyb20gZmluZGluZyBhbnkgTFVOcyBvbiB0aGlzIHRhcmdldC4KKwkgKiBwbHVzIHRoZSBudW1iZXIgb2YgbHVucyB3ZSBhcmUgcmVxdWVzdGluZy4gIDUxMSB3YXMgdGhlIGRlZmF1bHQKKwkgKiB2YWx1ZSBvZiB0aGUgbm93IHJlbW92ZWQgbWF4X3JlcG9ydF9sdW5zIHBhcmFtZXRlci4KIAkgKi8KLQlsZW5ndGggPSAobWF4X3Njc2lfcmVwb3J0X2x1bnMgKyAxKSAqIHNpemVvZihzdHJ1Y3Qgc2NzaV9sdW4pOwotCWx1bl9kYXRhID0ga21hbGxvYyhsZW5ndGgsIEdGUF9BVE9NSUMgfAorCWxlbmd0aCA9ICg1MTEgKyAxKSAqIHNpemVvZihzdHJ1Y3Qgc2NzaV9sdW4pOworcmV0cnk6CisJbHVuX2RhdGEgPSBrbWFsbG9jKGxlbmd0aCwgR0ZQX0tFUk5FTCB8CiAJCQkgICAoc2Rldi0+aG9zdC0+dW5jaGVja2VkX2lzYV9kbWEgPyBfX0dGUF9ETUEgOiAwKSk7CiAJaWYgKCFsdW5fZGF0YSkgewogCQlwcmludGsoQUxMT0NfRkFJTFVSRV9NU0csIF9fZnVuY19fKTsKQEAgLTE0MzMsMTAgKzE0MTUsNyBAQAogCS8qCiAJICogYnl0ZXMgNiAtIDk6IGxlbmd0aCBvZiB0aGUgY29tbWFuZC4KIAkgKi8KLQlzY3NpX2NtZFs2XSA9ICh1bnNpZ25lZCBjaGFyKSAobGVuZ3RoID4+IDI0KSAmIDB4ZmY7Ci0Jc2NzaV9jbWRbN10gPSAodW5zaWduZWQgY2hhcikgKGxlbmd0aCA+PiAxNikgJiAweGZmOwotCXNjc2lfY21kWzhdID0gKHVuc2lnbmVkIGNoYXIpIChsZW5ndGggPj4gOCkgJiAweGZmOwotCXNjc2lfY21kWzldID0gKHVuc2lnbmVkIGNoYXIpIGxlbmd0aCAmIDB4ZmY7CisJcHV0X3VuYWxpZ25lZF9iZTMyKGxlbmd0aCwgJnNjc2lfY21kWzZdKTsKIAogCXNjc2lfY21kWzEwXSA9IDA7CS8qIHJlc2VydmVkICovCiAJc2NzaV9jbWRbMTFdID0gMDsJLyogY29udHJvbCAqLwpAQCAtMTQ4NCwxOSArMTQ2MywxNiBAQAogCS8qCiAJICogR2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgZmlyc3QgZm91ciBieXRlcyBvZiBsdW5fZGF0YS4KIAkgKi8KLQlkYXRhID0gKHU4ICopIGx1bl9kYXRhLT5zY3NpX2x1bjsKLQlsZW5ndGggPSAoKGRhdGFbMF0gPDwgMjQpIHwgKGRhdGFbMV0gPDwgMTYpIHwKLQkJICAoZGF0YVsyXSA8PCA4KSB8IChkYXRhWzNdIDw8IDApKTsKKwlpZiAoZ2V0X3VuYWxpZ25lZF9iZTMyKGx1bl9kYXRhLT5zY3NpX2x1bikgKworCSAgICBzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSA+IGxlbmd0aCkgeworCQlsZW5ndGggPSBnZXRfdW5hbGlnbmVkX2JlMzIobHVuX2RhdGEtPnNjc2lfbHVuKSArCisJCQkgc2l6ZW9mKHN0cnVjdCBzY3NpX2x1bik7CisJCWtmcmVlKGx1bl9kYXRhKTsKKwkJZ290byByZXRyeTsKKwl9CisJbGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGx1bl9kYXRhLT5zY3NpX2x1bik7CiAKIAludW1fbHVucyA9IChsZW5ndGggLyBzaXplb2Yoc3RydWN0IHNjc2lfbHVuKSk7Ci0JaWYgKG51bV9sdW5zID4gbWF4X3Njc2lfcmVwb3J0X2x1bnMpIHsKLQkJc2Rldl9wcmludGsoS0VSTl9XQVJOSU5HLCBzZGV2LAotCQkJICAgICJPbmx5ICVkIChtYXhfc2NzaV9yZXBvcnRfbHVucykiCi0JCQkgICAgIiBvZiAlZCBsdW5zIHJlcG9ydGVkLCB0cnkgaW5jcmVhc2luZyIKLQkJCSAgICAiIG1heF9zY3NpX3JlcG9ydF9sdW5zLlxuIiwKLQkJCSAgICBtYXhfc2NzaV9yZXBvcnRfbHVucywgbnVtX2x1bnMpOwotCQludW1fbHVucyA9IG1heF9zY3NpX3JlcG9ydF9sdW5zOwotCX0KIAogCVNDU0lfTE9HX1NDQU5fQlVTKDMsIHNkZXZfcHJpbnRrIChLRVJOX0lORk8sIHNkZXYsCiAJCSJzY3NpIHNjYW46IFJFUE9SVCBMVU4gc2NhblxuIikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhY2UuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYWNlLmMKaW5kZXggODJhZjI4Yi4uMDhiYjQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhY2UuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFjZS5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkJY21kID0gIldSSVRFX1NBTUUiOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQl0cmFjZV9zZXFfcHJpbnRmKHAsICJVTktOT1dOIik7CisJCXRyYWNlX3NlcV9wdXRzKHAsICJVTktOT1dOIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjA0LDcgKzIwNCw3IEBACiAJCWNtZCA9ICJHRVRfTEJBX1NUQVRVUyI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXRyYWNlX3NlcV9wcmludGYocCwgIlVOS05PV04iKTsKKwkJdHJhY2Vfc2VxX3B1dHMocCwgIlVOS05PV04iKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yNDksNyArMjQ5LDcgQEAKIHsKIAljb25zdCBjaGFyICpyZXQgPSB0cmFjZV9zZXFfYnVmZmVyX3B0cihwKTsKIAotCXRyYWNlX3NlcV9wcmludGYocCwgIi0iKTsKKwl0cmFjZV9zZXFfcHV0YyhwLCAnLScpOwogCXRyYWNlX3NlcV9wdXRjKHAsIDApOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggMzk5NTE2OS4uNmI3ODQ3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTI4MDAsOSArMjgwMCwxMSBAQAogCSAqLwogCXNkX3NldF9mbHVzaF9mbGFnKHNka3ApOwogCi0JbWF4X3hmZXIgPSBtaW5fbm90X3plcm8ocXVldWVfbWF4X2h3X3NlY3RvcnMoc2RrcC0+ZGlzay0+cXVldWUpLAotCQkJCXNka3AtPm1heF94ZmVyX2Jsb2Nrcyk7CisJbWF4X3hmZXIgPSBzZGtwLT5tYXhfeGZlcl9ibG9ja3M7CiAJbWF4X3hmZXIgPDw9IGlsb2cyKHNkcC0+c2VjdG9yX3NpemUpIC0gOTsKKworCW1heF94ZmVyID0gbWluX25vdF96ZXJvKHF1ZXVlX21heF9od19zZWN0b3JzKHNka3AtPmRpc2stPnF1ZXVlKSwKKwkJCQltYXhfeGZlcik7CiAJYmxrX3F1ZXVlX21heF9od19zZWN0b3JzKHNka3AtPmRpc2stPnF1ZXVlLCBtYXhfeGZlcik7CiAJc2V0X2NhcGFjaXR5KGRpc2ssIHNka3AtPmNhcGFjaXR5KTsKIAlzZF9jb25maWdfd3JpdGVfc2FtZShzZGtwKTsKQEAgLTMzMTgsMTEgKzMzMjAsOCBAQAogc3RhdGljIHZvaWQgc2RfcHJpbnRfc2Vuc2VfaGRyKHN0cnVjdCBzY3NpX2Rpc2sgKnNka3AsCiAJCQkgICAgICAgc3RydWN0IHNjc2lfc2Vuc2VfaGRyICpzc2hkcikKIHsKLQlzY3NpX3Nob3dfc2Vuc2VfaGRyKHNka3AtPmRldmljZSwKLQkJCSAgICBzZGtwLT5kaXNrID8gc2RrcC0+ZGlzay0+ZGlza19uYW1lIDogTlVMTCwgc3NoZHIpOwotCXNjc2lfc2hvd19leHRkX3NlbnNlKHNka3AtPmRldmljZSwKLQkJCSAgICAgc2RrcC0+ZGlzayA/IHNka3AtPmRpc2stPmRpc2tfbmFtZSA6IE5VTEwsCi0JCQkgICAgIHNzaGRyLT5hc2MsIHNzaGRyLT5hc2NxKTsKKwlzY3NpX3ByaW50X3NlbnNlX2hkcihzZGtwLT5kZXZpY2UsCisJCQkgICAgIHNka3AtPmRpc2sgPyBzZGtwLT5kaXNrLT5kaXNrX25hbWUgOiBOVUxMLCBzc2hkcik7CiB9CiAKIHN0YXRpYyB2b2lkIHNkX3ByaW50X3Jlc3VsdChjb25zdCBzdHJ1Y3Qgc2NzaV9kaXNrICpzZGtwLCBjb25zdCBjaGFyICptc2csCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2VzLmMgYi9kcml2ZXJzL3Njc2kvc2VzLmMKaW5kZXggYjdlNzllNy4uZGNiMGQ3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Nlcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zZXMuYwpAQCAtNDcsNyArNDcsNiBAQAogCiBzdHJ1Y3Qgc2VzX2NvbXBvbmVudCB7CiAJdTY0IGFkZHI7Ci0JdW5zaWduZWQgY2hhciAqZGVzYzsKIH07CiAKIHN0YXRpYyBpbnQgc2VzX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTY4LDYgKzY3LDIwIEBACiAjZGVmaW5lIFNFU19USU1FT1VUICgzMCAqIEhaKQogI2RlZmluZSBTRVNfUkVUUklFUyAzCiAKK3N0YXRpYyB2b2lkIGluaXRfZGV2aWNlX3Nsb3RfY29udHJvbCh1bnNpZ25lZCBjaGFyICpkZXN0X2Rlc2MsCisJCQkJICAgICBzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXAsCisJCQkJICAgICB1bnNpZ25lZCBjaGFyICpzdGF0dXMpCit7CisJbWVtY3B5KGRlc3RfZGVzYywgc3RhdHVzLCA0KTsKKwlkZXN0X2Rlc2NbMF0gPSAwOworCS8qIG9ubHkgY2xlYXIgYnl0ZSAxIGZvciBFTkNMT1NVUkVfQ09NUE9ORU5UX0RFVklDRSAqLworCWlmIChlY29tcC0+dHlwZSA9PSBFTkNMT1NVUkVfQ09NUE9ORU5UX0RFVklDRSkKKwkJZGVzdF9kZXNjWzFdID0gMDsKKwlkZXN0X2Rlc2NbMl0gJj0gMHhkZTsKKwlkZXN0X2Rlc2NbM10gJj0gMHgzYzsKK30KKworCiBzdGF0aWMgaW50IHNlc19yZWN2X2RpYWcoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBpbnQgcGFnZV9jb2RlLAogCQkJIHZvaWQgKmJ1ZiwgaW50IGJ1ZmZsZW4pCiB7CkBAIC0xNzksMTQgKzE5MiwyMiBAQAogCQkJICBzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXAsCiAJCQkgZW51bSBlbmNsb3N1cmVfY29tcG9uZW50X3NldHRpbmcgdmFsKQogewotCXVuc2lnbmVkIGNoYXIgZGVzY1s0XSA9IHswIH07CisJdW5zaWduZWQgY2hhciBkZXNjWzRdOworCXVuc2lnbmVkIGNoYXIgKmRlc2NfcHRyOworCisJZGVzY19wdHIgPSBzZXNfZ2V0X3BhZ2UyX2Rlc2NyaXB0b3IoZWRldiwgZWNvbXApOworCisJaWYgKCFkZXNjX3B0cikKKwkJcmV0dXJuIC1FSU87CisKKwlpbml0X2RldmljZV9zbG90X2NvbnRyb2woZGVzYywgZWNvbXAsIGRlc2NfcHRyKTsKIAogCXN3aXRjaCAodmFsKSB7CiAJY2FzZSBFTkNMT1NVUkVfU0VUVElOR19ESVNBQkxFRDoKLQkJLyogemVybyBpcyBkaXNhYmxlZCAqLworCQlkZXNjWzNdICY9IDB4ZGY7CiAJCWJyZWFrOwogCWNhc2UgRU5DTE9TVVJFX1NFVFRJTkdfRU5BQkxFRDoKLQkJZGVzY1szXSA9IDB4MjA7CisJCWRlc2NbM10gfD0gMHgyMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogU0VTIGRvZXNuJ3QgZG8gdGhlIFNHUElPIGJsaW5rIHNldHRpbmdzICovCkBAIC0yMjAsMTQgKzI0MSwyMiBAQAogCQkJICBzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqZWNvbXAsCiAJCQkgIGVudW0gZW5jbG9zdXJlX2NvbXBvbmVudF9zZXR0aW5nIHZhbCkKIHsKLQl1bnNpZ25lZCBjaGFyIGRlc2NbNF0gPSB7MCB9OworCXVuc2lnbmVkIGNoYXIgZGVzY1s0XTsKKwl1bnNpZ25lZCBjaGFyICpkZXNjX3B0cjsKKworCWRlc2NfcHRyID0gc2VzX2dldF9wYWdlMl9kZXNjcmlwdG9yKGVkZXYsIGVjb21wKTsKKworCWlmICghZGVzY19wdHIpCisJCXJldHVybiAtRUlPOworCisJaW5pdF9kZXZpY2Vfc2xvdF9jb250cm9sKGRlc2MsIGVjb21wLCBkZXNjX3B0cik7CiAKIAlzd2l0Y2ggKHZhbCkgewogCWNhc2UgRU5DTE9TVVJFX1NFVFRJTkdfRElTQUJMRUQ6Ci0JCS8qIHplcm8gaXMgZGlzYWJsZWQgKi8KKwkJZGVzY1syXSAmPSAweGZkOwogCQlicmVhazsKIAljYXNlIEVOQ0xPU1VSRV9TRVRUSU5HX0VOQUJMRUQ6Ci0JCWRlc2NbMl0gPSAweDAyOworCQlkZXNjWzJdIHw9IDB4MDI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIFNFUyBkb2Vzbid0IGRvIHRoZSBTR1BJTyBibGluayBzZXR0aW5ncyAqLwpAQCAtMjQwLDE1ICsyNjksMjMgQEAKIAkJCSAgc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wLAogCQkJICBlbnVtIGVuY2xvc3VyZV9jb21wb25lbnRfc2V0dGluZyB2YWwpCiB7Ci0JdW5zaWduZWQgY2hhciBkZXNjWzRdID0gezAgfTsKKwl1bnNpZ25lZCBjaGFyIGRlc2NbNF07CisJdW5zaWduZWQgY2hhciAqZGVzY19wdHI7CisKKwlkZXNjX3B0ciA9IHNlc19nZXRfcGFnZTJfZGVzY3JpcHRvcihlZGV2LCBlY29tcCk7CisKKwlpZiAoIWRlc2NfcHRyKQorCQlyZXR1cm4gLUVJTzsKKworCWluaXRfZGV2aWNlX3Nsb3RfY29udHJvbChkZXNjLCBlY29tcCwgZGVzY19wdHIpOwogCiAJc3dpdGNoICh2YWwpIHsKIAljYXNlIEVOQ0xPU1VSRV9TRVRUSU5HX0RJU0FCTEVEOgotCQkvKiB6ZXJvIGlzIGRpc2FibGVkICovCisJCWRlc2NbMl0gJj0gMHg3ZjsKIAkJZWNvbXAtPmFjdGl2ZSA9IDA7CiAJCWJyZWFrOwogCWNhc2UgRU5DTE9TVVJFX1NFVFRJTkdfRU5BQkxFRDoKLQkJZGVzY1syXSA9IDB4ODA7CisJCWRlc2NbMl0gfD0gMHg4MDsKIAkJZWNvbXAtPmFjdGl2ZSA9IDE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yNTgsMTMgKzI5NSw2MyBAQAogCXJldHVybiBzZXNfc2V0X3BhZ2UyX2Rlc2NyaXB0b3IoZWRldiwgZWNvbXAsIGRlc2MpOwogfQogCitzdGF0aWMgaW50IHNlc19zaG93X2lkKHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICplZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlc19kZXZpY2UgKnNlc19kZXYgPSBlZGV2LT5zY3JhdGNoOworCXVuc2lnbmVkIGxvbmcgbG9uZyBpZCA9IGdldF91bmFsaWduZWRfYmU2NChzZXNfZGV2LT5wYWdlMSs4KzQpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJSNsbHhcbiIsIGlkKTsKK30KKworc3RhdGljIHZvaWQgc2VzX2dldF9wb3dlcl9zdGF0dXMoc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYsCisJCQkJIHN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICplY29tcCkKK3sKKwl1bnNpZ25lZCBjaGFyICpkZXNjOworCisJZGVzYyA9IHNlc19nZXRfcGFnZTJfZGVzY3JpcHRvcihlZGV2LCBlY29tcCk7CisJaWYgKGRlc2MpCisJCWVjb21wLT5wb3dlcl9zdGF0dXMgPSAoZGVzY1szXSAmIDB4MTApID8gMCA6IDE7Cit9CisKK3N0YXRpYyBpbnQgc2VzX3NldF9wb3dlcl9zdGF0dXMoc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVkZXYsCisJCQkJc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKmVjb21wLAorCQkJCWludCB2YWwpCit7CisJdW5zaWduZWQgY2hhciBkZXNjWzRdOworCXVuc2lnbmVkIGNoYXIgKmRlc2NfcHRyOworCisJZGVzY19wdHIgPSBzZXNfZ2V0X3BhZ2UyX2Rlc2NyaXB0b3IoZWRldiwgZWNvbXApOworCisJaWYgKCFkZXNjX3B0cikKKwkJcmV0dXJuIC1FSU87CisKKwlpbml0X2RldmljZV9zbG90X2NvbnRyb2woZGVzYywgZWNvbXAsIGRlc2NfcHRyKTsKKworCXN3aXRjaCAodmFsKSB7CisJLyogcG93ZXIgPSAxIGlzIGRldmljZV9vZmYgPSAwIGFuZCB2aWNlIHZlcnNhICovCisJY2FzZSAwOgorCQlkZXNjWzNdIHw9IDB4MTA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZGVzY1szXSAmPSAweGVmOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZWNvbXAtPnBvd2VyX3N0YXR1cyA9IHZhbDsKKwlyZXR1cm4gc2VzX3NldF9wYWdlMl9kZXNjcmlwdG9yKGVkZXYsIGVjb21wLCBkZXNjKTsKK30KKwogc3RhdGljIHN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50X2NhbGxiYWNrcyBzZXNfZW5jbG9zdXJlX2NhbGxiYWNrcyA9IHsKIAkuZ2V0X2ZhdWx0CQk9IHNlc19nZXRfZmF1bHQsCiAJLnNldF9mYXVsdAkJPSBzZXNfc2V0X2ZhdWx0LAogCS5nZXRfc3RhdHVzCQk9IHNlc19nZXRfc3RhdHVzLAogCS5nZXRfbG9jYXRlCQk9IHNlc19nZXRfbG9jYXRlLAogCS5zZXRfbG9jYXRlCQk9IHNlc19zZXRfbG9jYXRlLAorCS5nZXRfcG93ZXJfc3RhdHVzCT0gc2VzX2dldF9wb3dlcl9zdGF0dXMsCisJLnNldF9wb3dlcl9zdGF0dXMJPSBzZXNfc2V0X3Bvd2VyX3N0YXR1cywKIAkuc2V0X2FjdGl2ZQkJPSBzZXNfc2V0X2FjdGl2ZSwKKwkuc2hvd19pZAkJPSBzZXNfc2hvd19pZCwKIH07CiAKIHN0cnVjdCBzZXNfaG9zdF9lZGV2IHsKQEAgLTI5OCwxOSArMzg1LDI2IEBACiAJaW50IGludmFsaWQgPSBkZXNjWzBdICYgMHg4MDsKIAllbnVtIHNjc2lfcHJvdG9jb2wgcHJvdG8gPSBkZXNjWzBdICYgMHgwZjsKIAl1NjQgYWRkciA9IDA7CisJaW50IHNsb3QgPSAtMTsKIAlzdHJ1Y3Qgc2VzX2NvbXBvbmVudCAqc2NvbXAgPSBlY29tcC0+c2NyYXRjaDsKIAl1bnNpZ25lZCBjaGFyICpkOwogCi0Jc2NvbXAtPmRlc2MgPSBkZXNjOwotCiAJaWYgKGludmFsaWQpCiAJCXJldHVybjsKIAogCXN3aXRjaCAocHJvdG8pIHsKKwljYXNlIFNDU0lfUFJPVE9DT0xfRkNQOgorCQlpZiAoZWlwKSB7CisJCQlkID0gZGVzYyArIDQ7CisJCQlzbG90ID0gZFszXTsKKwkJfQorCQlicmVhazsKIAljYXNlIFNDU0lfUFJPVE9DT0xfU0FTOgotCQlpZiAoZWlwKQorCQlpZiAoZWlwKSB7CisJCQlkID0gZGVzYyArIDQ7CisJCQlzbG90ID0gZFszXTsKIAkJCWQgPSBkZXNjICsgODsKLQkJZWxzZQorCQl9IGVsc2UKIAkJCWQgPSBkZXNjICsgNDsKIAkJLyogb25seSB0YWtlIHRoZSBwaHkwIGFkZHIgKi8KIAkJYWRkciA9ICh1NjQpZFsxMl0gPDwgNTYgfApAQCAtMzI2LDYgKzQyMCw3IEBACiAJCS8qIEZJWE1FOiBOZWVkIHRvIGFkZCBtb3JlIHByb3RvY29scyB0aGFuIGp1c3QgU0FTICovCiAJCWJyZWFrOwogCX0KKwllY29tcC0+c2xvdCA9IHNsb3Q7CiAJc2NvbXAtPmFkZHIgPSBhZGRyOwogfQogCkBAIC0zNDksNyArNDQ0LDggQEAKIAkJaWYgKHNjb21wLT5hZGRyICE9IGVmZC0+YWRkcikKIAkJCWNvbnRpbnVlOwogCi0JCWVuY2xvc3VyZV9hZGRfZGV2aWNlKGVkZXYsIGksIGVmZC0+ZGV2KTsKKwkJaWYgKGVuY2xvc3VyZV9hZGRfZGV2aWNlKGVkZXYsIGksIGVmZC0+ZGV2KSA9PSAwKQorCQkJa29iamVjdF91ZXZlbnQoJmVmZC0+ZGV2LT5rb2JqLCBLT0JKX0NIQU5HRSk7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQyMywxNiArNTE5LDI0IEBACiAJCQkgICAgdHlwZV9wdHJbMF0gPT0gRU5DTE9TVVJFX0NPTVBPTkVOVF9BUlJBWV9ERVZJQ0UpIHsKIAogCQkJCWlmIChjcmVhdGUpCi0JCQkJCWVjb21wID0JZW5jbG9zdXJlX2NvbXBvbmVudF9yZWdpc3RlcihlZGV2LAotCQkJCQkJCQkJICAgICBjb21wb25lbnRzKyssCi0JCQkJCQkJCQkgICAgIHR5cGVfcHRyWzBdLAotCQkJCQkJCQkJICAgICBuYW1lKTsKKwkJCQkJZWNvbXAgPQllbmNsb3N1cmVfY29tcG9uZW50X2FsbG9jKAorCQkJCQkJZWRldiwKKwkJCQkJCWNvbXBvbmVudHMrKywKKwkJCQkJCXR5cGVfcHRyWzBdLAorCQkJCQkJbmFtZSk7CiAJCQkJZWxzZQogCQkJCQllY29tcCA9ICZlZGV2LT5jb21wb25lbnRbY29tcG9uZW50cysrXTsKIAotCQkJCWlmICghSVNfRVJSKGVjb21wKSAmJiBhZGRsX2Rlc2NfcHRyKQotCQkJCQlzZXNfcHJvY2Vzc19kZXNjcmlwdG9yKGVjb21wLAotCQkJCQkJCSAgICAgICBhZGRsX2Rlc2NfcHRyKTsKKwkJCQlpZiAoIUlTX0VSUihlY29tcCkpIHsKKwkJCQkJc2VzX2dldF9wb3dlcl9zdGF0dXMoZWRldiwgZWNvbXApOworCQkJCQlpZiAoYWRkbF9kZXNjX3B0cikKKwkJCQkJCXNlc19wcm9jZXNzX2Rlc2NyaXB0b3IoCisJCQkJCQkJZWNvbXAsCisJCQkJCQkJYWRkbF9kZXNjX3B0cik7CisJCQkJCWlmIChjcmVhdGUpCisJCQkJCQllbmNsb3N1cmVfY29tcG9uZW50X3JlZ2lzdGVyKAorCQkJCQkJCWVjb21wKTsKKwkJCQl9CiAJCQl9CiAJCQlpZiAoZGVzY19wdHIpCiAJCQkJZGVzY19wdHIgKz0gbGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnLmMgYi9kcml2ZXJzL3Njc2kvc2cuYwppbmRleCBiMTRmNjRjLi5hNjY4Yzg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2cuYworKysgYi9kcml2ZXJzL3Njc2kvc2cuYwpAQCAtNzYzLDcgKzc2Myw3IEBACiBzZ19jb21tb25fd3JpdGUoU2dfZmQgKiBzZnAsIFNnX3JlcXVlc3QgKiBzcnAsCiAJCXVuc2lnbmVkIGNoYXIgKmNtbmQsIGludCB0aW1lb3V0LCBpbnQgYmxvY2tpbmcpCiB7Ci0JaW50IGssIGRhdGFfZGlyLCBhdF9oZWFkOworCWludCBrLCBhdF9oZWFkOwogCVNnX2RldmljZSAqc2RwID0gc2ZwLT5wYXJlbnRkcDsKIAlzZ19pb19oZHJfdCAqaHAgPSAmc3JwLT5oZWFkZXI7CiAKQEAgLTc5MywyMSArNzkzLDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0Jc3dpdGNoIChocC0+ZHhmZXJfZGlyZWN0aW9uKSB7Ci0JY2FzZSBTR19EWEZFUl9UT19GUk9NX0RFVjoKLQljYXNlIFNHX0RYRkVSX0ZST01fREVWOgotCQlkYXRhX2RpciA9IERNQV9GUk9NX0RFVklDRTsKLQkJYnJlYWs7Ci0JY2FzZSBTR19EWEZFUl9UT19ERVY6Ci0JCWRhdGFfZGlyID0gRE1BX1RPX0RFVklDRTsKLQkJYnJlYWs7Ci0JY2FzZSBTR19EWEZFUl9VTktOT1dOOgotCQlkYXRhX2RpciA9IERNQV9CSURJUkVDVElPTkFMOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlkYXRhX2RpciA9IERNQV9OT05FOwotCQlicmVhazsKLQl9CiAJaHAtPmR1cmF0aW9uID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzKTsKIAlpZiAoaHAtPmludGVyZmFjZV9pZCAhPSAnXDAnICYmCS8qIHYzIChvciBsYXRlcikgaW50ZXJmYWNlICovCiAJICAgIChTR19GTEFHX1FfQVRfVEFJTCAmIGhwLT5mbGFncykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3JfaW9jdGwuYyBiL2RyaXZlcnMvc2NzaS9zcl9pb2N0bC5jCmluZGV4IGZiOTI5ZmEuLjAzMDU0YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zcl9pb2N0bC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zcl9pb2N0bC5jCkBAIC0yNDUsOSArMjQ1LDYgQEAKIAkJCQlzcl9wcmludGsoS0VSTl9JTkZPLCBjZCwKIAkJCQkJICAiQ0RST00gbm90IHJlYWR5LiAgTWFrZSBzdXJlIHRoZXJlICIKIAkJCQkJICAiaXMgYSBkaXNjIGluIHRoZSBkcml2ZS5cbiIpOwotI2lmZGVmIERFQlVHCi0JCQlzY3NpX3ByaW50X3NlbnNlX2hkcihjZC0+ZGV2aWNlLCBjZC0+Y2RpLm5hbWUsICZzc2hkcik7Ci0jZW5kaWYKIAkJCWVyciA9IC1FTk9NRURJVU07CiAJCQlicmVhazsKIAkJY2FzZSBJTExFR0FMX1JFUVVFU1Q6CkBAIC0yNTYsMTYgKzI1Myw4IEBACiAJCQkgICAgc3NoZHIuYXNjcSA9PSAweDAwKQogCQkJCS8qIHNlbnNlOiBJbnZhbGlkIGNvbW1hbmQgb3BlcmF0aW9uIGNvZGUgKi8KIAkJCQllcnIgPSAtRURSSVZFX0NBTlRfRE9fVEhJUzsKLSNpZmRlZiBERUJVRwotCQkJX19zY3NpX3ByaW50X2NvbW1hbmQoY2djLT5jbWQsIENEUk9NX1BBQ0tFVF9TSVpFKTsKLQkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKGNkLT5kZXZpY2UsIGNkLT5jZGkubmFtZSwgJnNzaGRyKTsKLSNlbmRpZgogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlzcl9wcmludGsoS0VSTl9FUlIsIGNkLAotCQkJCSAgIkNEUk9NIChpb2N0bCkgZXJyb3IsIGNvbW1hbmQ6ICIpOwotCQkJX19zY3NpX3ByaW50X2NvbW1hbmQoY2djLT5jbWQsIENEUk9NX1BBQ0tFVF9TSVpFKTsKLQkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKGNkLT5kZXZpY2UsIGNkLT5jZGkubmFtZSwgJnNzaGRyKTsKIAkJCWVyciA9IC1FSU87CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3QuYyBiL2RyaXZlcnMvc2NzaS9zdC5jCmluZGV4IDEyOGQzYjUuLjlhMWMzNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9zdC5jCkBAIC00NTUxLDE4ICs0NTUxLDE1IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAgICAgICAgIC8qIFRyeSB0byBmYXVsdCBpbiBhbGwgb2YgdGhlIG5lY2Vzc2FyeSBwYWdlcyAqLwotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKICAgICAgICAgLyogcnc9PVJFQUQgbWVhbnMgcmVhZCBmcm9tIGRyaXZlLCB3cml0ZSBpbnRvIG1lbW9yeSBhcmVhICovCi0JcmVzID0gZ2V0X3VzZXJfcGFnZXMoCisJcmVzID0gZ2V0X3VzZXJfcGFnZXNfdW5sb2NrZWQoCiAJCWN1cnJlbnQsCiAJCWN1cnJlbnQtPm1tLAogCQl1YWRkciwKIAkJbnJfcGFnZXMsCiAJCXJ3ID09IFJFQUQsCiAJCTAsIC8qIGRvbid0IGZvcmNlICovCi0JCXBhZ2VzLAotCQlOVUxMKTsKLQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCQlwYWdlcyk7CiAKIAkvKiBFcnJvcnMgYW5kIG5vIHBhZ2UgbWFwcGVkIHNob3VsZCByZXR1cm4gaGVyZSAqLwogCWlmIChyZXMgPCBucl9wYWdlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdG9ydnNjX2Rydi5jIGIvZHJpdmVycy9zY3NpL3N0b3J2c2NfZHJ2LmMKaW5kZXggNGNmZjBkZC4uZWZjNmU0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N0b3J2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zY3NpL3N0b3J2c2NfZHJ2LmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9oeXBlcnYuaD4KLSNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KQEAgLTMwOSwxNCArMzA4LDYgQEAKICAqIFRoaXMgaXMgdGhlIGVuZCBvZiBQcm90b2NvbCBzcGVjaWZpYyBkZWZpbmVzLgogICovCiAKLQotLyoKLSAqIFdlIHNldHVwIGEgbWVtcG9vbCB0byBhbGxvY2F0ZSByZXF1ZXN0IHN0cnVjdHVyZXMgZm9yIHRoaXMgZHJpdmVyCi0gKiBvbiBhIHBlci1sdW4gYmFzaXMuIFRoZSBmb2xsb3dpbmcgZGVmaW5lIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mCi0gKiBlbGVtZW50cyBpbiB0aGUgcG9vbC4KLSAqLwotCi0jZGVmaW5lIFNUT1JWU0NfTUlOX0JVRl9OUgkJCQk2NAogc3RhdGljIGludCBzdG9ydnNjX3JpbmdidWZmZXJfc2l6ZSA9ICgyMCAqIFBBR0VfU0laRSk7CiAKIG1vZHVsZV9wYXJhbShzdG9ydnNjX3JpbmdidWZmZXJfc2l6ZSwgaW50LCBTX0lSVUdPKTsKQEAgLTM0Niw3ICszMzcsNiBAQAogI2RlZmluZSBTVE9SVlNDX0lERV9NQVhfQ0hBTk5FTFMJCQkxCiAKIHN0cnVjdCBzdG9ydnNjX2NtZF9yZXF1ZXN0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OwogCXN0cnVjdCBzY3NpX2NtbmQgKmNtZDsKIAogCXVuc2lnbmVkIGludCBib3VuY2Vfc2dsX2NvdW50OwpAQCAtMzU3LDcgKzM0Nyw2IEBACiAJLyogU3luY2hyb25pemUgdGhlIHJlcXVlc3QvcmVzcG9uc2UgaWYgbmVlZGVkICovCiAJc3RydWN0IGNvbXBsZXRpb24gd2FpdF9ldmVudDsKIAotCXVuc2lnbmVkIGNoYXIgKnNlbnNlX2J1ZmZlcjsKIAlzdHJ1Y3QgaHZfbXVsdGlwYWdlX2J1ZmZlciBkYXRhX2J1ZmZlcjsKIAlzdHJ1Y3QgdnN0b3JfcGFja2V0IHZzdG9yX3BhY2tldDsKIH07CkBAIC0zODksMTEgKzM3OCw2IEBACiAJc3RydWN0IHN0b3J2c2NfY21kX3JlcXVlc3QgcmVzZXRfcmVxdWVzdDsKIH07CiAKLXN0cnVjdCBzdG9yX21lbV9wb29scyB7Ci0Jc3RydWN0IGttZW1fY2FjaGUgKnJlcXVlc3RfcG9vbDsKLQltZW1wb29sX3QgKnJlcXVlc3RfbWVtcG9vbDsKLX07Ci0KIHN0cnVjdCBodl9ob3N0X2RldmljZSB7CiAJc3RydWN0IGh2X2RldmljZSAqZGV2OwogCXVuc2lnbmVkIGludCBwb3J0OwpAQCAtNDI2LDIxICs0MTAsNDIgQEAKIAlrZnJlZSh3cmspOwogfQogCi1zdGF0aWMgdm9pZCBzdG9ydnNjX2J1c19zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3N0YXRpYyB2b2lkIHN0b3J2c2NfaG9zdF9zY2FuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc3RvcnZzY19zY2FuX3dvcmsgKndyazsKLQlpbnQgaWQsIG9yZGVyX2lkOworCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CisJc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAl3cmsgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHN0b3J2c2Nfc2Nhbl93b3JrLCB3b3JrKTsKLQlmb3IgKGlkID0gMDsgaWQgPCB3cmstPmhvc3QtPm1heF9pZDsgKytpZCkgewotCQlpZiAod3JrLT5ob3N0LT5yZXZlcnNlX29yZGVyaW5nKQotCQkJb3JkZXJfaWQgPSB3cmstPmhvc3QtPm1heF9pZCAtIGlkIC0gMTsKLQkJZWxzZQotCQkJb3JkZXJfaWQgPSBpZDsKKwlob3N0ID0gd3JrLT5ob3N0OwogCi0JCXNjc2lfc2Nhbl90YXJnZXQoJndyay0+aG9zdC0+c2hvc3RfZ2VuZGV2LCAwLAotCQkJCW9yZGVyX2lkLCBTQ0FOX1dJTERfQ0FSRCwgMSk7CisJLyoKKwkgKiBCZWZvcmUgc2Nhbm5pbmcgdGhlIGhvc3QsIGZpcnN0IGNoZWNrIHRvIHNlZSBpZiBhbnkgb2YgdGhlCisJICogY3VycnJlbnRseSBrbm93biBkZXZpY2VzIGhhdmUgYmVlbiBob3QgcmVtb3ZlZC4gV2UgaXNzdWUgYQorCSAqICJ1bml0IHJlYWR5IiBjb21tYW5kIGFnYWluc3QgYWxsIGN1cnJlbnRseSBrbm93biBkZXZpY2VzLgorCSAqIFRoaXMgSS9PIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yIGZvciBkZXZpY2VzIHRoYXQgaGF2ZSBiZWVuCisJICogcmVtb3ZlZC4gQXMgcGFydCBvZiBoYW5kbGluZyB0aGUgSS9PIGVycm9yLCB3ZSByZW1vdmUgdGhlIGRldmljZS4KKwkgKgorCSAqIFdoZW4gYSBMVU4gaXMgYWRkZWQgb3IgcmVtb3ZlZCwgdGhlIGhvc3Qgc2VuZHMgdXMgYSBzaWduYWwgdG8KKwkgKiBzY2FuIHRoZSBob3N0LiBUaHVzIHdlIGFyZSBmb3JjZWQgdG8gZGlzY292ZXIgdGhlIExVTnMgdGhhdAorCSAqIG1heSBoYXZlIGJlZW4gcmVtb3ZlZCB0aGlzIHdheS4KKwkgKi8KKwltdXRleF9sb2NrKCZob3N0LT5zY2FuX211dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkZXYsICZob3N0LT5fX2RldmljZXMsIHNpYmxpbmdzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJCXNjc2lfdGVzdF91bml0X3JlYWR5KHNkZXYsIDEsIDEsIE5VTEwpOworCQlzcGluX2xvY2tfaXJxc2F2ZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKKwkJY29udGludWU7CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZob3N0LT5zY2FuX211dGV4KTsKKwkvKgorCSAqIE5vdyBzY2FuIHRoZSBob3N0IHRvIGRpc2NvdmVyIExVTnMgdGhhdCBtYXkgaGF2ZSBiZWVuIGFkZGVkLgorCSAqLworCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOworCiAJa2ZyZWUod3JrKTsKIH0KIApAQCAtMTA3MCwxMCArMTA3NSw4IEBACiB7CiAJc3RydWN0IHNjc2lfY21uZCAqc2NtbmQgPSBjbWRfcmVxdWVzdC0+Y21kOwogCXN0cnVjdCBodl9ob3N0X2RldmljZSAqaG9zdF9kZXYgPSBzaG9zdF9wcml2KHNjbW5kLT5kZXZpY2UtPmhvc3QpOwotCXZvaWQgKCpzY3NpX2RvbmVfZm4pKHN0cnVjdCBzY3NpX2NtbmQgKik7CiAJc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNlbnNlX2hkcjsKIAlzdHJ1Y3Qgdm1zY3NpX3JlcXVlc3QgKnZtX3NyYjsKLQlzdHJ1Y3Qgc3Rvcl9tZW1fcG9vbHMgKm1lbXAgPSBzY21uZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCXN0cnVjdCBzdG9ydnNjX2RldmljZSAqc3Rvcl9kZXY7CiAJc3RydWN0IGh2X2RldmljZSAqZGV2ID0gaG9zdF9kZXYtPmRldjsKQEAgLTExMDksMTQgKzExMTIsNyBAQAogCQljbWRfcmVxdWVzdC0+ZGF0YV9idWZmZXIubGVuIC0KIAkJdm1fc3JiLT5kYXRhX3RyYW5zZmVyX2xlbmd0aCk7CiAKLQlzY3NpX2RvbmVfZm4gPSBzY21uZC0+c2NzaV9kb25lOwotCi0Jc2NtbmQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwotCXNjbW5kLT5zY3NpX2RvbmUgPSBOVUxMOwotCi0Jc2NzaV9kb25lX2ZuKHNjbW5kKTsKLQotCW1lbXBvb2xfZnJlZShjbWRfcmVxdWVzdCwgbWVtcC0+cmVxdWVzdF9tZW1wb29sKTsKKwlzY21uZC0+c2NzaV9kb25lKHNjbW5kKTsKIH0KIAogc3RhdGljIHZvaWQgc3RvcnZzY19vbl9pb19jb21wbGV0aW9uKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZSwKQEAgLTExNjAsNyArMTE1Niw3IEBACiAJCQlTUkJfU1RBVFVTX0FVVE9TRU5TRV9WQUxJRCkgewogCQkJLyogYXV0b3NlbnNlIGRhdGEgYXZhaWxhYmxlICovCiAKLQkJCW1lbWNweShyZXF1ZXN0LT5zZW5zZV9idWZmZXIsCisJCQltZW1jcHkocmVxdWVzdC0+Y21kLT5zZW5zZV9idWZmZXIsCiAJCQkgICAgICAgdnN0b3JfcGFja2V0LT52bV9zcmIuc2Vuc2VfZGF0YSwKIAkJCSAgICAgICB2c3Rvcl9wYWNrZXQtPnZtX3NyYi5zZW5zZV9pbmZvX2xlbmd0aCk7CiAKQEAgLTExOTgsNyArMTE5NCw3IEBACiAJCWlmICghd29yaykKIAkJCXJldHVybjsKIAotCQlJTklUX1dPUksoJndvcmstPndvcmssIHN0b3J2c2NfYnVzX3NjYW4pOworCQlJTklUX1dPUksoJndvcmstPndvcmssIHN0b3J2c2NfaG9zdF9zY2FuKTsKIAkJd29yay0+aG9zdCA9IHN0b3JfZGV2aWNlLT5ob3N0OwogCQlzY2hlZHVsZV93b3JrKCZ3b3JrLT53b3JrKTsKIAkJYnJlYWs7CkBAIC0xMzc4LDU1ICsxMzc0LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHN0b3J2c2NfZGV2aWNlX2FsbG9jKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldmljZSkKLXsKLQlzdHJ1Y3Qgc3Rvcl9tZW1fcG9vbHMgKm1lbXA7Ci0JaW50IG51bWJlciA9IFNUT1JWU0NfTUlOX0JVRl9OUjsKLQotCW1lbXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3Rvcl9tZW1fcG9vbHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1lbXApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtcC0+cmVxdWVzdF9wb29sID0KLQkJa21lbV9jYWNoZV9jcmVhdGUoZGV2X25hbWUoJnNkZXZpY2UtPnNkZXZfZGV2KSwKLQkJCQlzaXplb2Yoc3RydWN0IHN0b3J2c2NfY21kX3JlcXVlc3QpLCAwLAotCQkJCVNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7Ci0KLQlpZiAoIW1lbXAtPnJlcXVlc3RfcG9vbCkKLQkJZ290byBlcnIwOwotCi0JbWVtcC0+cmVxdWVzdF9tZW1wb29sID0gbWVtcG9vbF9jcmVhdGUobnVtYmVyLCBtZW1wb29sX2FsbG9jX3NsYWIsCi0JCQkJCQltZW1wb29sX2ZyZWVfc2xhYiwKLQkJCQkJCW1lbXAtPnJlcXVlc3RfcG9vbCk7Ci0KLQlpZiAoIW1lbXAtPnJlcXVlc3RfbWVtcG9vbCkKLQkJZ290byBlcnIxOwotCi0Jc2RldmljZS0+aG9zdGRhdGEgPSBtZW1wOwotCi0JcmV0dXJuIDA7Ci0KLWVycjE6Ci0Ja21lbV9jYWNoZV9kZXN0cm95KG1lbXAtPnJlcXVlc3RfcG9vbCk7Ci0KLWVycjA6Ci0Ja2ZyZWUobWVtcCk7Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLXN0YXRpYyB2b2lkIHN0b3J2c2NfZGV2aWNlX2Rlc3Ryb3koc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2aWNlKQotewotCXN0cnVjdCBzdG9yX21lbV9wb29scyAqbWVtcCA9IHNkZXZpY2UtPmhvc3RkYXRhOwotCi0JaWYgKCFtZW1wKQotCQlyZXR1cm47Ci0KLQltZW1wb29sX2Rlc3Ryb3kobWVtcC0+cmVxdWVzdF9tZW1wb29sKTsKLQlrbWVtX2NhY2hlX2Rlc3Ryb3kobWVtcC0+cmVxdWVzdF9wb29sKTsKLQlrZnJlZShtZW1wKTsKLQlzZGV2aWNlLT5ob3N0ZGF0YSA9IE5VTEw7Ci19Ci0KIHN0YXRpYyBpbnQgc3RvcnZzY19kZXZpY2VfY29uZmlndXJlKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldmljZSkKIHsKIAlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aChzZGV2aWNlLCBTVE9SVlNDX01BWF9JT19SRVFVRVNUUyk7CkBAIC0xNDQ3LDYgKzEzOTQsMTkgQEAKIAkgKi8KIAlzZGV2aWNlLT5zZGV2X2JmbGFncyB8PSBtc2Z0X2JsaXN0X2ZsYWdzOwogCisJLyoKKwkgKiBJZiB0aGUgaG9zdCBpcyBXSU44IG9yIFdJTjggUjIsIGNsYWltIGNvbmZvcm1hbmNlIHRvIFNQQy0zCisJICogaWYgdGhlIGRldmljZSBpcyBhIE1TRlQgdmlydHVhbCBkZXZpY2UuCisJICovCisJaWYgKCFzdHJuY21wKHNkZXZpY2UtPnZlbmRvciwgIk1zZnQiLCA0KSkgeworCQlzd2l0Y2ggKHZtYnVzX3Byb3RvX3ZlcnNpb24pIHsKKwkJY2FzZSBWRVJTSU9OX1dJTjg6CisJCWNhc2UgVkVSU0lPTl9XSU44XzE6CisJCQlzZGV2aWNlLT5zY3NpX2xldmVsID0gU0NTSV9TUENfMzsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1NjEsMTMgKzE1MjEsMTEgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBodl9ob3N0X2RldmljZSAqaG9zdF9kZXYgPSBzaG9zdF9wcml2KGhvc3QpOwogCXN0cnVjdCBodl9kZXZpY2UgKmRldiA9IGhvc3RfZGV2LT5kZXY7Ci0Jc3RydWN0IHN0b3J2c2NfY21kX3JlcXVlc3QgKmNtZF9yZXF1ZXN0OwotCXVuc2lnbmVkIGludCByZXF1ZXN0X3NpemUgPSAwOworCXN0cnVjdCBzdG9ydnNjX2NtZF9yZXF1ZXN0ICpjbWRfcmVxdWVzdCA9IHNjc2lfY21kX3ByaXYoc2NtbmQpOwogCWludCBpOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsOwogCXVuc2lnbmVkIGludCBzZ19jb3VudCA9IDA7CiAJc3RydWN0IHZtc2NzaV9yZXF1ZXN0ICp2bV9zcmI7Ci0Jc3RydWN0IHN0b3JfbWVtX3Bvb2xzICptZW1wID0gc2NtbmQtPmRldmljZS0+aG9zdGRhdGE7CiAKIAlpZiAodm1zdG9yX2N1cnJlbnRfbWFqb3IgPD0gVk1TVE9SX1dJTjhfTUFKT1IpIHsKIAkJLyoKQEAgLTE1ODQsMjUgKzE1NDIsOSBAQAogCQl9CiAJfQogCi0JcmVxdWVzdF9zaXplID0gc2l6ZW9mKHN0cnVjdCBzdG9ydnNjX2NtZF9yZXF1ZXN0KTsKLQotCWNtZF9yZXF1ZXN0ID0gbWVtcG9vbF9hbGxvYyhtZW1wLT5yZXF1ZXN0X21lbXBvb2wsCi0JCQkJICAgICAgIEdGUF9BVE9NSUMpOwotCi0JLyoKLQkgKiBXZSBtaWdodCBiZSBpbnZva2VkIGluIGFuIGludGVycnVwdCBjb250ZXh0OyBoZW5jZQotCSAqIG1lbXBvb2xfYWxsb2MoKSBjYW4gZmFpbC4KLQkgKi8KLQlpZiAoIWNtZF9yZXF1ZXN0KQotCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOwotCi0JbWVtc2V0KGNtZF9yZXF1ZXN0LCAwLCBzaXplb2Yoc3RydWN0IHN0b3J2c2NfY21kX3JlcXVlc3QpKTsKLQogCS8qIFNldHVwIHRoZSBjbWQgcmVxdWVzdCAqLwogCWNtZF9yZXF1ZXN0LT5jbWQgPSBzY21uZDsKIAotCXNjbW5kLT5ob3N0X3NjcmliYmxlID0gKHVuc2lnbmVkIGNoYXIgKiljbWRfcmVxdWVzdDsKLQogCXZtX3NyYiA9ICZjbWRfcmVxdWVzdC0+dnN0b3JfcGFja2V0LnZtX3NyYjsKIAl2bV9zcmItPndpbjhfZXh0ZW5zaW9uLnRpbWVfb3V0X3ZhbHVlID0gNjA7CiAKQEAgLTE2MzcsOSArMTU3OSw2IEBACiAKIAltZW1jcHkodm1fc3JiLT5jZGIsIHNjbW5kLT5jbW5kLCB2bV9zcmItPmNkYl9sZW5ndGgpOwogCi0JY21kX3JlcXVlc3QtPnNlbnNlX2J1ZmZlciA9IHNjbW5kLT5zZW5zZV9idWZmZXI7Ci0KLQogCWNtZF9yZXF1ZXN0LT5kYXRhX2J1ZmZlci5sZW4gPSBzY3NpX2J1ZmZsZW4oc2NtbmQpOwogCWlmIChzY3NpX3NnX2NvdW50KHNjbW5kKSkgewogCQlzZ2wgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopc2NzaV9zZ2xpc3Qoc2NtbmQpOwpAQCAtMTY1MSwxMCArMTU5MCw4IEBACiAJCQkJY3JlYXRlX2JvdW5jZV9idWZmZXIoc2dsLCBzY3NpX3NnX2NvdW50KHNjbW5kKSwKIAkJCQkJCSAgICAgc2NzaV9idWZmbGVuKHNjbW5kKSwKIAkJCQkJCSAgICAgdm1fc3JiLT5kYXRhX2luKTsKLQkJCWlmICghY21kX3JlcXVlc3QtPmJvdW5jZV9zZ2wpIHsKLQkJCQlyZXQgPSBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwotCQkJCWdvdG8gcXVldWVfZXJyb3I7Ci0JCQl9CisJCQlpZiAoIWNtZF9yZXF1ZXN0LT5ib3VuY2Vfc2dsKQorCQkJCXJldHVybiBTQ1NJX01MUVVFVUVfSE9TVF9CVVNZOwogCiAJCQljbWRfcmVxdWVzdC0+Ym91bmNlX3NnbF9jb3VudCA9CiAJCQkJQUxJR04oc2NzaV9idWZmbGVuKHNjbW5kKSwgUEFHRV9TSVpFKSA+PgpAQCAtMTY5MiwyNyArMTYyOSwyMSBAQAogCQkJZGVzdHJveV9ib3VuY2VfYnVmZmVyKGNtZF9yZXF1ZXN0LT5ib3VuY2Vfc2dsLAogCQkJCQljbWRfcmVxdWVzdC0+Ym91bmNlX3NnbF9jb3VudCk7CiAKLQkJcmV0ID0gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOwotCQlnb3RvIHF1ZXVlX2Vycm9yOworCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0RFVklDRV9CVVNZOwogCX0KIAogCXJldHVybiAwOwotCi1xdWV1ZV9lcnJvcjoKLQltZW1wb29sX2ZyZWUoY21kX3JlcXVlc3QsIG1lbXAtPnJlcXVlc3RfbWVtcG9vbCk7Ci0Jc2NtbmQtPmhvc3Rfc2NyaWJibGUgPSBOVUxMOwotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlIHNjc2lfZHJpdmVyID0gewogCS5tb2R1bGUJPQkJVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJCSJzdG9ydnNjX2hvc3RfdCIsCisJLmNtZF9zaXplID0gICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzdG9ydnNjX2NtZF9yZXF1ZXN0KSwKIAkuYmlvc19wYXJhbSA9CQlzdG9ydnNjX2dldF9jaHMsCiAJLnF1ZXVlY29tbWFuZCA9CQlzdG9ydnNjX3F1ZXVlY29tbWFuZCwKIAkuZWhfaG9zdF9yZXNldF9oYW5kbGVyID0Jc3RvcnZzY19ob3N0X3Jlc2V0X2hhbmRsZXIsCisJLnByb2NfbmFtZSA9CQkic3RvcnZzY19ob3N0IiwKIAkuZWhfdGltZWRfb3V0ID0JCXN0b3J2c2NfZWhfdGltZWRfb3V0LAotCS5zbGF2ZV9hbGxvYyA9CQlzdG9ydnNjX2RldmljZV9hbGxvYywKLQkuc2xhdmVfZGVzdHJveSA9CXN0b3J2c2NfZGV2aWNlX2Rlc3Ryb3ksCiAJLnNsYXZlX2NvbmZpZ3VyZSA9CXN0b3J2c2NfZGV2aWNlX2NvbmZpZ3VyZSwKIAkuY21kX3Blcl9sdW4gPQkJMjU1LAogCS5jYW5fcXVldWUgPQkJU1RPUlZTQ19NQVhfSU9fUkVRVUVTVFMqU1RPUlZTQ19NQVhfVEFSR0VUUywKQEAgLTE3NjAsNiArMTY5MSw5IEBACiAJYm9vbCBkZXZfaXNfaWRlID0gKChkZXZfaWQtPmRyaXZlcl9kYXRhID09IElERV9HVUlEKSA/IHRydWUgOiBmYWxzZSk7CiAJaW50IHRhcmdldCA9IDA7CiAJc3RydWN0IHN0b3J2c2NfZGV2aWNlICpzdG9yX2RldmljZTsKKwlpbnQgbWF4X2x1bnNfcGVyX3RhcmdldDsKKwlpbnQgbWF4X3RhcmdldHM7CisJaW50IG1heF9jaGFubmVsczsKIAogCS8qCiAJICogQmFzZWQgb24gdGhlIHdpbmRvd3MgaG9zdCB3ZSBhcmUgcnVubmluZyBvbiwKQEAgLTE3NzMsMTIgKzE3MDcsMTggQEAKIAkJdm1zY3NpX3NpemVfZGVsdGEgPSBzaXplb2Yoc3RydWN0IHZtc2NzaV93aW44X2V4dGVuc2lvbik7CiAJCXZtc3Rvcl9jdXJyZW50X21ham9yID0gVk1TVE9SX1dJTjdfTUFKT1I7CiAJCXZtc3Rvcl9jdXJyZW50X21pbm9yID0gVk1TVE9SX1dJTjdfTUlOT1I7CisJCW1heF9sdW5zX3Blcl90YXJnZXQgPSBTVE9SVlNDX0lERV9NQVhfTFVOU19QRVJfVEFSR0VUOworCQltYXhfdGFyZ2V0cyA9IFNUT1JWU0NfSURFX01BWF9UQVJHRVRTOworCQltYXhfY2hhbm5lbHMgPSBTVE9SVlNDX0lERV9NQVhfQ0hBTk5FTFM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXNlbnNlX2J1ZmZlcl9zaXplID0gUE9TVF9XSU43X1NUT1JWU0NfU0VOU0VfQlVGRkVSX1NJWkU7CiAJCXZtc2NzaV9zaXplX2RlbHRhID0gMDsKIAkJdm1zdG9yX2N1cnJlbnRfbWFqb3IgPSBWTVNUT1JfV0lOOF9NQUpPUjsKIAkJdm1zdG9yX2N1cnJlbnRfbWlub3IgPSBWTVNUT1JfV0lOOF9NSU5PUjsKKwkJbWF4X2x1bnNfcGVyX3RhcmdldCA9IFNUT1JWU0NfTUFYX0xVTlNfUEVSX1RBUkdFVDsKKwkJbWF4X3RhcmdldHMgPSBTVE9SVlNDX01BWF9UQVJHRVRTOworCQltYXhfY2hhbm5lbHMgPSBTVE9SVlNDX01BWF9DSEFOTkVMUzsKIAkJYnJlYWs7CiAJfQogCkBAIC0xODI2LDkgKzE3NjYsOSBAQAogCQlicmVhazsKIAogCWNhc2UgU0NTSV9HVUlEOgotCQlob3N0LT5tYXhfbHVuID0gU1RPUlZTQ19NQVhfTFVOU19QRVJfVEFSR0VUOwotCQlob3N0LT5tYXhfaWQgPSBTVE9SVlNDX01BWF9UQVJHRVRTOwotCQlob3N0LT5tYXhfY2hhbm5lbCA9IFNUT1JWU0NfTUFYX0NIQU5ORUxTIC0gMTsKKwkJaG9zdC0+bWF4X2x1biA9IG1heF9sdW5zX3Blcl90YXJnZXQ7CisJCWhvc3QtPm1heF9pZCA9IG1heF90YXJnZXRzOworCQlob3N0LT5tYXhfY2hhbm5lbCA9IG1heF9jaGFubmVscyAtIDE7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS91ZnMvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS91ZnMvS2NvbmZpZwppbmRleCA2ZTA3YjJhLi44YTFmNGIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvdWZzL0tjb25maWcKKysrIGIvZHJpdmVycy9zY3NpL3Vmcy9LY29uZmlnCkBAIC03MCwzICs3MCwxNiBAQAogCUlmIHlvdSBoYXZlIGEgY29udHJvbGxlciB3aXRoIHRoaXMgaW50ZXJmYWNlLCBzYXkgWSBvciBNIGhlcmUuCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBTQ1NJX1VGU19RQ09NCisJYm9vbCAiUUNPTSBzcGVjaWZpYyBob29rcyB0byBVRlMgY29udHJvbGxlciBwbGF0Zm9ybSBkcml2ZXIiCisJZGVwZW5kcyBvbiBTQ1NJX1VGU0hDRF9QTEFURk9STSAmJiBBUkNIX01TTQorCXNlbGVjdCBQSFlfUUNPTV9VRlMKKwloZWxwCisJICBUaGlzIHNlbGVjdHMgdGhlIFFDT00gc3BlY2lmaWMgYWRkaXRpb25zIHRvIFVGU0hDRCBwbGF0Zm9ybSBkcml2ZXIuCisJICBVRlMgaG9zdCBvbiBRQ09NIG5lZWRzIHNvbWUgdmVuZG9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gYmVmb3JlCisJICBhY2Nlc3NpbmcgdGhlIGhhcmR3YXJlIHdoaWNoIGluY2x1ZGVzIFBIWSBjb25maWd1cmF0aW9uIGFuZCB2ZW5kb3IKKwkgIHNwZWNpZmljIHJlZ2lzdGVycy4KKworCSAgU2VsZWN0IHRoaXMgaWYgeW91IGhhdmUgVUZTIGNvbnRyb2xsZXIgb24gUUNPTSBjaGlwc2V0LgorCSAgSWYgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS91ZnMvTWFrZWZpbGUgYi9kcml2ZXJzL3Njc2kvdWZzL01ha2VmaWxlCmluZGV4IDFlNWJkNDguLjgzMDNiY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS91ZnMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL3Vmcy9NYWtlZmlsZQpAQCAtMSw0ICsxLDUgQEAKICMgVUZTSENEIG1ha2VmaWxlCitvYmotJChDT05GSUdfU0NTSV9VRlNfUUNPTSkgKz0gdWZzLXFjb20ubwogb2JqLSQoQ09ORklHX1NDU0lfVUZTSENEKSArPSB1ZnNoY2Qubwogb2JqLSQoQ09ORklHX1NDU0lfVUZTSENEX1BDSSkgKz0gdWZzaGNkLXBjaS5vCiBvYmotJChDT05GSUdfU0NTSV9VRlNIQ0RfUExBVEZPUk0pICs9IHVmc2hjZC1wbHRmcm0ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Vmcy91ZnMtcWNvbS5jIGIvZHJpdmVycy9zY3NpL3Vmcy91ZnMtcWNvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMTdhZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Njc2kvdWZzL3Vmcy1xY29tLmMKQEAgLTAsMCArMSwxMDA0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTUsIExpbnV4IEZvdW5kYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFuZAorICogb25seSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KKworI2luY2x1ZGUgPGxpbnV4L3BoeS9waHktcWNvbS11ZnMuaD4KKyNpbmNsdWRlICJ1ZnNoY2QuaCIKKyNpbmNsdWRlICJ1bmlwcm8uaCIKKyNpbmNsdWRlICJ1ZnMtcWNvbS5oIgorI2luY2x1ZGUgInVmc2hjaS5oIgorCitzdGF0aWMgc3RydWN0IHVmc19xY29tX2hvc3QgKnVmc19xY29tX2hvc3RzW01BWF9VRlNfUUNPTV9IT1NUU107CisKK3N0YXRpYyB2b2lkIHVmc19xY29tX2dldF9zcGVlZF9tb2RlKHN0cnVjdCB1ZnNfcGFfbGF5ZXJfYXR0ciAqcCwgY2hhciAqcmVzdWx0KTsKK3N0YXRpYyBpbnQgdWZzX3Fjb21fZ2V0X2J1c192b3RlKHN0cnVjdCB1ZnNfcWNvbV9ob3N0ICpob3N0LAorCQljb25zdCBjaGFyICpzcGVlZF9tb2RlKTsKK3N0YXRpYyBpbnQgdWZzX3Fjb21fc2V0X2J1c192b3RlKHN0cnVjdCB1ZnNfcWNvbV9ob3N0ICpob3N0LCBpbnQgdm90ZSk7CisKK3N0YXRpYyBpbnQgdWZzX3Fjb21fZ2V0X2Nvbm5lY3RlZF90eF9sYW5lcyhzdHJ1Y3QgdWZzX2hiYSAqaGJhLCB1MzIgKnR4X2xhbmVzKQoreworCWludCBlcnIgPSAwOworCisJZXJyID0gdWZzaGNkX2RtZV9nZXQoaGJhLAorCQkJVUlDX0FSR19NSUIoUEFfQ09OTkVDVEVEVFhEQVRBTEFORVMpLCB0eF9sYW5lcyk7CisJaWYgKGVycikKKwkJZGV2X2VycihoYmEtPmRldiwgIiVzOiBjb3VsZG4ndCByZWFkIFBBX0NPTk5FQ1RFRFRYREFUQUxBTkVTICVkXG4iLAorCQkJCV9fZnVuY19fLCBlcnIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB1ZnNfcWNvbV9ob3N0X2Nsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LAorCQljb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgY2xrICoqY2xrX291dCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGs7CisJaW50IGVyciA9IDA7CisKKwljbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBuYW1lKTsKKwlpZiAoSVNfRVJSKGNsaykpIHsKKwkJZXJyID0gUFRSX0VSUihjbGspOworCQlkZXZfZXJyKGRldiwgIiVzOiBmYWlsZWQgdG8gZ2V0ICVzIGVyciAlZCIsCisJCQkJX19mdW5jX18sIG5hbWUsIGVycik7CisJfSBlbHNlIHsKKwkJKmNsa19vdXQgPSBjbGs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB1ZnNfcWNvbV9ob3N0X2Nsa19lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQljb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUoY2xrKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKGRldiwgIiVzOiAlcyBlbmFibGUgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgbmFtZSwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHVmc19xY29tX2Rpc2FibGVfbGFuZV9jbGtzKHN0cnVjdCB1ZnNfcWNvbV9ob3N0ICpob3N0KQoreworCWlmICghaG9zdC0+aXNfbGFuZV9jbGtzX2VuYWJsZWQpCisJCXJldHVybjsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT50eF9sMV9zeW5jX2Nsayk7CisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhvc3QtPnR4X2wwX3N5bmNfY2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoaG9zdC0+cnhfbDFfc3luY19jbGspOworCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5yeF9sMF9zeW5jX2Nsayk7CisKKwlob3N0LT5pc19sYW5lX2Nsa3NfZW5hYmxlZCA9IGZhbHNlOworfQorCitzdGF0aWMgaW50IHVmc19xY29tX2VuYWJsZV9sYW5lX2Nsa3Moc3RydWN0IHVmc19xY29tX2hvc3QgKmhvc3QpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaG9zdC0+aGJhLT5kZXY7CisKKwlpZiAoaG9zdC0+aXNfbGFuZV9jbGtzX2VuYWJsZWQpCisJCXJldHVybiAwOworCisJZXJyID0gdWZzX3Fjb21faG9zdF9jbGtfZW5hYmxlKGRldiwgInJ4X2xhbmUwX3N5bmNfY2xrIiwKKwkJaG9zdC0+cnhfbDBfc3luY19jbGspOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gdWZzX3Fjb21faG9zdF9jbGtfZW5hYmxlKGRldiwgInR4X2xhbmUwX3N5bmNfY2xrIiwKKwkJaG9zdC0+dHhfbDBfc3luY19jbGspOworCWlmIChlcnIpCisJCWdvdG8gZGlzYWJsZV9yeF9sMDsKKworCWVyciA9IHVmc19xY29tX2hvc3RfY2xrX2VuYWJsZShkZXYsICJyeF9sYW5lMV9zeW5jX2NsayIsCisJCWhvc3QtPnJ4X2wxX3N5bmNfY2xrKTsKKwlpZiAoZXJyKQorCQlnb3RvIGRpc2FibGVfdHhfbDA7CisKKwllcnIgPSB1ZnNfcWNvbV9ob3N0X2Nsa19lbmFibGUoZGV2LCAidHhfbGFuZTFfc3luY19jbGsiLAorCQlob3N0LT50eF9sMV9zeW5jX2Nsayk7CisJaWYgKGVycikKKwkJZ290byBkaXNhYmxlX3J4X2wxOworCisJaG9zdC0+aXNfbGFuZV9jbGtzX2VuYWJsZWQgPSB0cnVlOworCWdvdG8gb3V0OworCitkaXNhYmxlX3J4X2wxOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5yeF9sMV9zeW5jX2Nsayk7CitkaXNhYmxlX3R4X2wwOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT50eF9sMF9zeW5jX2Nsayk7CitkaXNhYmxlX3J4X2wwOgorCWNsa19kaXNhYmxlX3VucHJlcGFyZShob3N0LT5yeF9sMF9zeW5jX2Nsayk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB1ZnNfcWNvbV9pbml0X2xhbmVfY2xrcyhzdHJ1Y3QgdWZzX3Fjb21faG9zdCAqaG9zdCkKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBob3N0LT5oYmEtPmRldjsKKworCWVyciA9IHVmc19xY29tX2hvc3RfY2xrX2dldChkZXYsCisJCQkicnhfbGFuZTBfc3luY19jbGsiLCAmaG9zdC0+cnhfbDBfc3luY19jbGspOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gdWZzX3Fjb21faG9zdF9jbGtfZ2V0KGRldiwKKwkJCSJ0eF9sYW5lMF9zeW5jX2NsayIsICZob3N0LT50eF9sMF9zeW5jX2Nsayk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwllcnIgPSB1ZnNfcWNvbV9ob3N0X2Nsa19nZXQoZGV2LCAicnhfbGFuZTFfc3luY19jbGsiLAorCQkmaG9zdC0+cnhfbDFfc3luY19jbGspOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gdWZzX3Fjb21faG9zdF9jbGtfZ2V0KGRldiwgInR4X2xhbmUxX3N5bmNfY2xrIiwKKwkJJmhvc3QtPnR4X2wxX3N5bmNfY2xrKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHVmc19xY29tX2xpbmtfc3RhcnR1cF9wb3N0X2NoYW5nZShzdHJ1Y3QgdWZzX2hiYSAqaGJhKQoreworCXN0cnVjdCB1ZnNfcWNvbV9ob3N0ICpob3N0ID0gaGJhLT5wcml2OworCXN0cnVjdCBwaHkgKnBoeSA9IGhvc3QtPmdlbmVyaWNfcGh5OworCXUzMiB0eF9sYW5lczsKKwlpbnQgZXJyID0gMDsKKworCWVyciA9IHVmc19xY29tX2dldF9jb25uZWN0ZWRfdHhfbGFuZXMoaGJhLCAmdHhfbGFuZXMpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJZXJyID0gdWZzX3Fjb21fcGh5X3NldF90eF9sYW5lX2VuYWJsZShwaHksIHR4X2xhbmVzKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKGhiYS0+ZGV2LCAiJXM6IHVmc19xY29tX3BoeV9zZXRfdHhfbGFuZV9lbmFibGUgZmFpbGVkXG4iLAorCQkJX19mdW5jX18pOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB1ZnNfcWNvbV9jaGVja19oaWJlcm44KHN0cnVjdCB1ZnNfaGJhICpoYmEpCit7CisJaW50IGVycjsKKwl1MzIgdHhfZnNtX3ZhbCA9IDA7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSEJSTjhfUE9MTF9UT1VUX01TKTsKKworCWRvIHsKKwkJZXJyID0gdWZzaGNkX2RtZV9nZXQoaGJhLAorCQkJVUlDX0FSR19NSUIoTVBIWV9UWF9GU01fU1RBVEUpLCAmdHhfZnNtX3ZhbCk7CisJCWlmIChlcnIgfHwgdHhfZnNtX3ZhbCA9PSBUWF9GU01fSElCRVJOOCkKKwkJCWJyZWFrOworCisJCS8qIHNsZWVwIGZvciBtYXguIDIwMHVzICovCisJCXVzbGVlcF9yYW5nZSgxMDAsIDIwMCk7CisJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOworCisJLyoKKwkgKiB3ZSBtaWdodCBoYXZlIHNjaGVkdWxlZCBvdXQgZm9yIGxvbmcgZHVyaW5nIHBvbGxpbmcgc28KKwkgKiBjaGVjayB0aGUgc3RhdGUgYWdhaW4uCisJICovCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCWVyciA9IHVmc2hjZF9kbWVfZ2V0KGhiYSwKKwkJCQlVSUNfQVJHX01JQihNUEhZX1RYX0ZTTV9TVEFURSksICZ0eF9mc21fdmFsKTsKKworCWlmIChlcnIpIHsKKwkJZGV2X2VycihoYmEtPmRldiwgIiVzOiB1bmFibGUgdG8gZ2V0IFRYX0ZTTV9TVEFURSwgZXJyICVkXG4iLAorCQkJCV9fZnVuY19fLCBlcnIpOworCX0gZWxzZSBpZiAodHhfZnNtX3ZhbCAhPSBUWF9GU01fSElCRVJOOCkgeworCQllcnIgPSB0eF9mc21fdmFsOworCQlkZXZfZXJyKGhiYS0+ZGV2LCAiJXM6IGludmFsaWQgVFhfRlNNX1NUQVRFID0gJWRcbiIsCisJCQkJX19mdW5jX18sIGVycik7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB1ZnNfcWNvbV9wb3dlcl91cF9zZXF1ZW5jZShzdHJ1Y3QgdWZzX2hiYSAqaGJhKQoreworCXN0cnVjdCB1ZnNfcWNvbV9ob3N0ICpob3N0ID0gaGJhLT5wcml2OworCXN0cnVjdCBwaHkgKnBoeSA9IGhvc3QtPmdlbmVyaWNfcGh5OworCWludCByZXQgPSAwOworCXU4IG1ham9yOworCXUxNiBtaW5vciwgc3RlcDsKKwlib29sIGlzX3JhdGVfQiA9IChVRlNfUUNPTV9MSU1JVF9IU19SQVRFID09IFBBX0hTX01PREVfQikKKwkJCQkJCQk/IHRydWUgOiBmYWxzZTsKKworCS8qIEFzc2VydCBQSFkgcmVzZXQgYW5kIGFwcGx5IFBIWSBjYWxpYnJhdGlvbiB2YWx1ZXMgKi8KKwl1ZnNfcWNvbV9hc3NlcnRfcmVzZXQoaGJhKTsKKwkvKiBwcm92aWRlIDFtcyBkZWxheSB0byBsZXQgdGhlIHJlc2V0IHB1bHNlIHByb3BhZ2F0ZSAqLworCXVzbGVlcF9yYW5nZSgxMDAwLCAxMTAwKTsKKworCXVmc19xY29tX2dldF9jb250cm9sbGVyX3JldmlzaW9uKGhiYSwgJm1ham9yLCAmbWlub3IsICZzdGVwKTsKKwl1ZnNfcWNvbV9waHlfc2F2ZV9jb250cm9sbGVyX3ZlcnNpb24ocGh5LCBtYWpvciwgbWlub3IsIHN0ZXApOworCXJldCA9IHVmc19xY29tX3BoeV9jYWxpYnJhdGVfcGh5KHBoeSwgaXNfcmF0ZV9CKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoaGJhLT5kZXYsICIlczogdWZzX3Fjb21fcGh5X2NhbGlicmF0ZV9waHkoKSBmYWlsZWQsIHJldCA9ICVkXG4iLAorCQkJX19mdW5jX18sIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIERlLWFzc2VydCBQSFkgcmVzZXQgYW5kIHN0YXJ0IHNlcmRlcyAqLworCXVmc19xY29tX2RlYXNzZXJ0X3Jlc2V0KGhiYSk7CisKKwkvKgorCSAqIGFmdGVyIHJlc2V0IGRlYXNzZXJ0aW9uLCBwaHkgd2lsbCBuZWVkIGFsbCByZWYgY2xvY2tzLAorCSAqIHZvbHRhZ2UsIGN1cnJlbnQgdG8gc2V0dGxlIGRvd24gYmVmb3JlIHN0YXJ0aW5nIHNlcmRlcy4KKwkgKi8KKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMTEwMCk7CisJcmV0ID0gdWZzX3Fjb21fcGh5X3N0YXJ0X3NlcmRlcyhwaHkpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihoYmEtPmRldiwgIiVzOiB1ZnNfcWNvbV9waHlfc3RhcnRfc2VyZGVzKCkgZmFpbGVkLCByZXQgPSAlZFxuIiwKKwkJCV9fZnVuY19fLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSB1ZnNfcWNvbV9waHlfaXNfcGNzX3JlYWR5KHBoeSk7CisJaWYgKHJldCkKKwkJZGV2X2VycihoYmEtPmRldiwgIiVzOiBpc19waHlzaWNhbF9jb2Rpbmdfc3VibGF5ZXJfcmVhZHkoKSBmYWlsZWQsIHJldCA9ICVkXG4iLAorCQkJX19mdW5jX18sIHJldCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhlIFVUUCBjb250cm9sbGVyIGhhcyBhIG51bWJlciBvZiBpbnRlcm5hbCBjbG9jayBnYXRpbmcgY2VsbHMgKENHQ3MpLgorICogSW50ZXJuYWwgaGFyZHdhcmUgc3ViLW1vZHVsZXMgd2l0aGluIHRoZSBVVFAgY29udHJvbGxlciBjb250cm9sIHRoZSBDR0NzLgorICogSGFyZHdhcmUgQ0dDcyBkaXNhYmxlIHRoZSBjbG9jayB0byBpbmFjdGl2YXRlIFVUUCBzdWItbW9kdWxlcyBub3QgaW52b2x2ZWQKKyAqIGluIGEgc3BlY2lmaWMgb3BlcmF0aW9uLCBVVFAgY29udHJvbGxlciBDR0NzIGFyZSBieSBkZWZhdWx0IGRpc2FibGVkIGFuZAorICogdGhpcyBmdW5jdGlvbiBlbmFibGVzIHRoZW0gKGFmdGVyIGV2ZXJ5IFVGUyBsaW5rIHN0YXJ0dXApIHRvIHNhdmUgc29tZSBwb3dlcgorICogbGVha2FnZS4KKyAqLworc3RhdGljIHZvaWQgdWZzX3Fjb21fZW5hYmxlX2h3X2Nsa19nYXRpbmcoc3RydWN0IHVmc19oYmEgKmhiYSkKK3sKKwl1ZnNoY2Rfd3JpdGVsKGhiYSwKKwkJdWZzaGNkX3JlYWRsKGhiYSwgUkVHX1VGU19DRkcyKSB8IFJFR19VRlNfQ0ZHMl9DR0NfRU5fQUxMLAorCQlSRUdfVUZTX0NGRzIpOworCisJLyogRW5zdXJlIHRoYXQgSFcgY2xvY2sgZ2F0aW5nIGlzIGVuYWJsZWQgYmVmb3JlIG5leHQgb3BlcmF0aW9ucyAqLworCW1iKCk7Cit9CisKK3N0YXRpYyBpbnQgdWZzX3Fjb21faGNlX2VuYWJsZV9ub3RpZnkoc3RydWN0IHVmc19oYmEgKmhiYSwgYm9vbCBzdGF0dXMpCit7CisJc3RydWN0IHVmc19xY29tX2hvc3QgKmhvc3QgPSBoYmEtPnByaXY7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgUFJFX0NIQU5HRToKKwkJdWZzX3Fjb21fcG93ZXJfdXBfc2VxdWVuY2UoaGJhKTsKKwkJLyoKKwkJICogVGhlIFBIWSBQTEwgb3V0cHV0IGlzIHRoZSBzb3VyY2Ugb2YgdHgvcnggbGFuZSBzeW1ib2wKKwkJICogY2xvY2tzLCBoZW5jZSwgZW5hYmxlIHRoZSBsYW5lIGNsb2NrcyBvbmx5IGFmdGVyIFBIWQorCQkgKiBpcyBpbml0aWFsaXplZC4KKwkJICovCisJCWVyciA9IHVmc19xY29tX2VuYWJsZV9sYW5lX2Nsa3MoaG9zdCk7CisJCWJyZWFrOworCWNhc2UgUE9TVF9DSEFOR0U6CisJCS8qIGNoZWNrIGlmIFVGUyBQSFkgbW92ZWQgZnJvbSBESVNBQkxFRCB0byBISUJFUk44ICovCisJCWVyciA9IHVmc19xY29tX2NoZWNrX2hpYmVybjgoaGJhKTsKKwkJdWZzX3Fjb21fZW5hYmxlX2h3X2Nsa19nYXRpbmcoaGJhKTsKKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGhiYS0+ZGV2LCAiJXM6IGludmFsaWQgc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogUmV0dXJucyBub24temVybyBmb3Igc3VjY2VzcyAod2hpY2ggcmF0ZSBvZiBjb3JlX2NsaykgYW5kIDAKKyAqIGluIGNhc2Ugb2YgYSBmYWlsdXJlCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nCit1ZnNfcWNvbV9jZmdfdGltZXJzKHN0cnVjdCB1ZnNfaGJhICpoYmEsIHUzMiBnZWFyLCB1MzIgaHMsIHUzMiByYXRlKQoreworCXN0cnVjdCB1ZnNfY2xrX2luZm8gKmNsa2k7CisJdTMyIGNvcmVfY2xrX3BlcmlvZF9pbl9uczsKKwl1MzIgdHhfY2xrX2N5Y2xlc19wZXJfdXMgPSAwOworCXVuc2lnbmVkIGxvbmcgY29yZV9jbGtfcmF0ZSA9IDA7CisJdTMyIGNvcmVfY2xrX2N5Y2xlc19wZXJfdXMgPSAwOworCisJc3RhdGljIHUzMiBwd21fZnJfdGFibGVbXVsyXSA9IHsKKwkJe1VGU19QV01fRzEsIDB4MX0sCisJCXtVRlNfUFdNX0cyLCAweDF9LAorCQl7VUZTX1BXTV9HMywgMHgxfSwKKwkJe1VGU19QV01fRzQsIDB4MX0sCisJfTsKKworCXN0YXRpYyB1MzIgaHNfZnJfdGFibGVfckFbXVsyXSA9IHsKKwkJe1VGU19IU19HMSwgMHgxRn0sCisJCXtVRlNfSFNfRzIsIDB4M2V9LAorCX07CisKKwlzdGF0aWMgdTMyIGhzX2ZyX3RhYmxlX3JCW11bMl0gPSB7CisJCXtVRlNfSFNfRzEsIDB4MjR9LAorCQl7VUZTX0hTX0cyLCAweDQ5fSwKKwl9OworCisJaWYgKGdlYXIgPT0gMCkgeworCQlkZXZfZXJyKGhiYS0+ZGV2LCAiJXM6IGludmFsaWQgZ2VhciA9ICVkXG4iLCBfX2Z1bmNfXywgZ2Vhcik7CisJCWdvdG8gb3V0X2Vycm9yOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xraSwgJmhiYS0+Y2xrX2xpc3RfaGVhZCwgbGlzdCkgeworCQlpZiAoIXN0cmNtcChjbGtpLT5uYW1lLCAiY29yZV9jbGsiKSkKKwkJCWNvcmVfY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xraS0+Y2xrKTsKKwl9CisKKwkvKiBJZiBmcmVxdWVuY3kgaXMgc21hbGxlciB0aGFuIDFNSHosIHNldCB0byAxTUh6ICovCisJaWYgKGNvcmVfY2xrX3JhdGUgPCBERUZBVUxUX0NMS19SQVRFX0haKQorCQljb3JlX2Nsa19yYXRlID0gREVGQVVMVF9DTEtfUkFURV9IWjsKKworCWNvcmVfY2xrX2N5Y2xlc19wZXJfdXMgPSBjb3JlX2Nsa19yYXRlIC8gVVNFQ19QRVJfU0VDOworCXVmc2hjZF93cml0ZWwoaGJhLCBjb3JlX2Nsa19jeWNsZXNfcGVyX3VzLCBSRUdfVUZTX1NZUzFDTEtfMVVTKTsKKworCWNvcmVfY2xrX3BlcmlvZF9pbl9ucyA9IE5TRUNfUEVSX1NFQyAvIGNvcmVfY2xrX3JhdGU7CisJY29yZV9jbGtfcGVyaW9kX2luX25zIDw8PSBPRkZTRVRfQ0xLX05TX1JFRzsKKwljb3JlX2Nsa19wZXJpb2RfaW5fbnMgJj0gTUFTS19DTEtfTlNfUkVHOworCisJc3dpdGNoIChocykgeworCWNhc2UgRkFTVEFVVE9fTU9ERToKKwljYXNlIEZBU1RfTU9ERToKKwkJaWYgKHJhdGUgPT0gUEFfSFNfTU9ERV9BKSB7CisJCQlpZiAoZ2VhciA+IEFSUkFZX1NJWkUoaHNfZnJfdGFibGVfckEpKSB7CisJCQkJZGV2X2VycihoYmEtPmRldiwKKwkJCQkJIiVzOiBpbmRleCAlZCBleGNlZWRzIHRhYmxlIHNpemUgJXp1XG4iLAorCQkJCQlfX2Z1bmNfXywgZ2VhciwKKwkJCQkJQVJSQVlfU0laRShoc19mcl90YWJsZV9yQSkpOworCQkJCWdvdG8gb3V0X2Vycm9yOworCQkJfQorCQkJdHhfY2xrX2N5Y2xlc19wZXJfdXMgPSBoc19mcl90YWJsZV9yQVtnZWFyLTFdWzFdOworCQl9IGVsc2UgaWYgKHJhdGUgPT0gUEFfSFNfTU9ERV9CKSB7CisJCQlpZiAoZ2VhciA+IEFSUkFZX1NJWkUoaHNfZnJfdGFibGVfckIpKSB7CisJCQkJZGV2X2VycihoYmEtPmRldiwKKwkJCQkJIiVzOiBpbmRleCAlZCBleGNlZWRzIHRhYmxlIHNpemUgJXp1XG4iLAorCQkJCQlfX2Z1bmNfXywgZ2VhciwKKwkJCQkJQVJSQVlfU0laRShoc19mcl90YWJsZV9yQikpOworCQkJCWdvdG8gb3V0X2Vycm9yOworCQkJfQorCQkJdHhfY2xrX2N5Y2xlc19wZXJfdXMgPSBoc19mcl90YWJsZV9yQltnZWFyLTFdWzFdOworCQl9IGVsc2UgeworCQkJZGV2X2VycihoYmEtPmRldiwgIiVzOiBpbnZhbGlkIHJhdGUgPSAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgcmF0ZSk7CisJCQlnb3RvIG91dF9lcnJvcjsKKwkJfQorCQlicmVhazsKKwljYXNlIFNMT1dBVVRPX01PREU6CisJY2FzZSBTTE9XX01PREU6CisJCWlmIChnZWFyID4gQVJSQVlfU0laRShwd21fZnJfdGFibGUpKSB7CisJCQlkZXZfZXJyKGhiYS0+ZGV2LAorCQkJCQkiJXM6IGluZGV4ICVkIGV4Y2VlZHMgdGFibGUgc2l6ZSAlenVcbiIsCisJCQkJCV9fZnVuY19fLCBnZWFyLAorCQkJCQlBUlJBWV9TSVpFKHB3bV9mcl90YWJsZSkpOworCQkJZ290byBvdXRfZXJyb3I7CisJCX0KKwkJdHhfY2xrX2N5Y2xlc19wZXJfdXMgPSBwd21fZnJfdGFibGVbZ2Vhci0xXVsxXTsKKwkJYnJlYWs7CisJY2FzZSBVTkNIQU5HRUQ6CisJZGVmYXVsdDoKKwkJZGV2X2VycihoYmEtPmRldiwgIiVzOiBpbnZhbGlkIG1vZGUgPSAlZFxuIiwgX19mdW5jX18sIGhzKTsKKwkJZ290byBvdXRfZXJyb3I7CisJfQorCisJLyogdGhpcyByZWdpc3RlciAyIGZpZWxkcyBzaGFsbCBiZSB3cml0dGVuIGF0IG9uY2UgKi8KKwl1ZnNoY2Rfd3JpdGVsKGhiYSwgY29yZV9jbGtfcGVyaW9kX2luX25zIHwgdHhfY2xrX2N5Y2xlc19wZXJfdXMsCisJCQkJCQlSRUdfVUZTX1RYX1NZTUJPTF9DTEtfTlNfVVMpOworCWdvdG8gb3V0OworCitvdXRfZXJyb3I6CisJY29yZV9jbGtfcmF0ZSA9IDA7CitvdXQ6CisJcmV0dXJuIGNvcmVfY2xrX3JhdGU7Cit9CisKK3N0YXRpYyBpbnQgdWZzX3Fjb21fbGlua19zdGFydHVwX25vdGlmeShzdHJ1Y3QgdWZzX2hiYSAqaGJhLCBib29sIHN0YXR1cykKK3sKKwl1bnNpZ25lZCBsb25nIGNvcmVfY2xrX3JhdGUgPSAwOworCXUzMiBjb3JlX2Nsa19jeWNsZXNfcGVyXzEwMG1zOworCisJc3dpdGNoIChzdGF0dXMpIHsKKwljYXNlIFBSRV9DSEFOR0U6CisJCWNvcmVfY2xrX3JhdGUgPSB1ZnNfcWNvbV9jZmdfdGltZXJzKGhiYSwgVUZTX1BXTV9HMSwKKwkJCQkJCSAgICBTTE9XQVVUT19NT0RFLCAwKTsKKwkJaWYgKCFjb3JlX2Nsa19yYXRlKSB7CisJCQlkZXZfZXJyKGhiYS0+ZGV2LCAiJXM6IHVmc19xY29tX2NmZ190aW1lcnMoKSBmYWlsZWRcbiIsCisJCQkJX19mdW5jX18pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJY29yZV9jbGtfY3ljbGVzX3Blcl8xMDBtcyA9CisJCQkoY29yZV9jbGtfcmF0ZSAvIE1TRUNfUEVSX1NFQykgKiAxMDA7CisJCXVmc2hjZF93cml0ZWwoaGJhLCBjb3JlX2Nsa19jeWNsZXNfcGVyXzEwMG1zLAorCQkJCQlSRUdfVUZTX1BBX0xJTktfU1RBUlRVUF9USU1FUik7CisJCWJyZWFrOworCWNhc2UgUE9TVF9DSEFOR0U6CisJCXVmc19xY29tX2xpbmtfc3RhcnR1cF9wb3N0X2NoYW5nZShoYmEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1ZnNfcWNvbV9zdXNwZW5kKHN0cnVjdCB1ZnNfaGJhICpoYmEsIGVudW0gdWZzX3BtX29wIHBtX29wKQoreworCXN0cnVjdCB1ZnNfcWNvbV9ob3N0ICpob3N0ID0gaGJhLT5wcml2OworCXN0cnVjdCBwaHkgKnBoeSA9IGhvc3QtPmdlbmVyaWNfcGh5OworCWludCByZXQgPSAwOworCisJaWYgKHVmc19xY29tX2lzX2xpbmtfb2ZmKGhiYSkpIHsKKwkJLyoKKwkJICogRGlzYWJsZSB0aGUgdHgvcnggbGFuZSBzeW1ib2wgY2xvY2tzIGJlZm9yZSBQSFkgaXMKKwkJICogcG93ZXJlZCBkb3duIGFzIHRoZSBQTEwgc291cmNlIHNob3VsZCBiZSBkaXNhYmxlZAorCQkgKiBhZnRlciBkb3duc3RyZWFtIGNsb2NrcyBhcmUgZGlzYWJsZWQuCisJCSAqLworCQl1ZnNfcWNvbV9kaXNhYmxlX2xhbmVfY2xrcyhob3N0KTsKKwkJcGh5X3Bvd2VyX29mZihwaHkpOworCisJCS8qIEFzc2VydCBQSFkgc29mdCByZXNldCAqLworCQl1ZnNfcWNvbV9hc3NlcnRfcmVzZXQoaGJhKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBJZiBVbmlQcm8gbGluayBpcyBub3QgYWN0aXZlLCBQSFkgcmVmX2NsaywgbWFpbiBQSFkgYW5hbG9nIHBvd2VyCisJICogcmFpbCBhbmQgbG93IG5vaXNlIGFuYWxvZyBwb3dlciByYWlsIGZvciBQTEwgY2FuIGJlIHN3aXRjaGVkIG9mZi4KKwkgKi8KKwlpZiAoIXVmc19xY29tX2lzX2xpbmtfYWN0aXZlKGhiYSkpCisJCXBoeV9wb3dlcl9vZmYocGh5KTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdWZzX3Fjb21fcmVzdW1lKHN0cnVjdCB1ZnNfaGJhICpoYmEsIGVudW0gdWZzX3BtX29wIHBtX29wKQoreworCXN0cnVjdCB1ZnNfcWNvbV9ob3N0ICpob3N0ID0gaGJhLT5wcml2OworCXN0cnVjdCBwaHkgKnBoeSA9IGhvc3QtPmdlbmVyaWNfcGh5OworCWludCBlcnI7CisKKwllcnIgPSBwaHlfcG93ZXJfb24ocGh5KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoaGJhLT5kZXYsICIlczogZmFpbGVkIGVuYWJsaW5nIHJlZ3MsIGVyciA9ICVkXG4iLAorCQkJX19mdW5jX18sIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCWhiYS0+aXNfc3lzX3N1c3BlbmRlZCA9IGZhbHNlOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RydWN0IHVmc19xY29tX2Rldl9wYXJhbXMgeworCXUzMiBwd21fcnhfZ2VhcjsJLyogcHdtIHJ4IGdlYXIgdG8gd29yayBpbiAqLworCXUzMiBwd21fdHhfZ2VhcjsJLyogcHdtIHR4IGdlYXIgdG8gd29yayBpbiAqLworCXUzMiBoc19yeF9nZWFyOwkJLyogaHMgcnggZ2VhciB0byB3b3JrIGluICovCisJdTMyIGhzX3R4X2dlYXI7CQkvKiBocyB0eCBnZWFyIHRvIHdvcmsgaW4gKi8KKwl1MzIgcnhfbGFuZXM7CQkvKiBudW1iZXIgb2YgcnggbGFuZXMgKi8KKwl1MzIgdHhfbGFuZXM7CQkvKiBudW1iZXIgb2YgdHggbGFuZXMgKi8KKwl1MzIgcnhfcHdyX3B3bTsJCS8qIHJ4IHB3bSB3b3JraW5nIHB3ciAqLworCXUzMiB0eF9wd3JfcHdtOwkJLyogdHggcHdtIHdvcmtpbmcgcHdyICovCisJdTMyIHJ4X3B3cl9oczsJCS8qIHJ4IGhzIHdvcmtpbmcgcHdyICovCisJdTMyIHR4X3B3cl9oczsJCS8qIHR4IGhzIHdvcmtpbmcgcHdyICovCisJdTMyIGhzX3JhdGU7CQkvKiByYXRlIEEvQiB0byB3b3JrIGluIEhTICovCisJdTMyIGRlc2lyZWRfd29ya2luZ19tb2RlOworfTsKKworc3RhdGljIGludCB1ZnNfcWNvbV9nZXRfcHdyX2Rldl9wYXJhbShzdHJ1Y3QgdWZzX3Fjb21fZGV2X3BhcmFtcyAqcWNvbV9wYXJhbSwKKwkJCQkgICAgICBzdHJ1Y3QgdWZzX3BhX2xheWVyX2F0dHIgKmRldl9tYXgsCisJCQkJICAgICAgc3RydWN0IHVmc19wYV9sYXllcl9hdHRyICphZ3JlZWRfcHdyKQoreworCWludCBtaW5fcWNvbV9nZWFyOworCWludCBtaW5fZGV2X2dlYXI7CisJYm9vbCBpc19kZXZfc3VwX2hzID0gZmFsc2U7CisJYm9vbCBpc19xY29tX21heF9ocyA9IGZhbHNlOworCisJaWYgKGRldl9tYXgtPnB3cl9yeCA9PSBGQVNUX01PREUpCisJCWlzX2Rldl9zdXBfaHMgPSB0cnVlOworCisJaWYgKHFjb21fcGFyYW0tPmRlc2lyZWRfd29ya2luZ19tb2RlID09IEZBU1QpIHsKKwkJaXNfcWNvbV9tYXhfaHMgPSB0cnVlOworCQltaW5fcWNvbV9nZWFyID0gbWluX3QodTMyLCBxY29tX3BhcmFtLT5oc19yeF9nZWFyLAorCQkJCSAgICAgIHFjb21fcGFyYW0tPmhzX3R4X2dlYXIpOworCX0gZWxzZSB7CisJCW1pbl9xY29tX2dlYXIgPSBtaW5fdCh1MzIsIHFjb21fcGFyYW0tPnB3bV9yeF9nZWFyLAorCQkJCSAgICAgIHFjb21fcGFyYW0tPnB3bV90eF9nZWFyKTsKKwl9CisKKwkvKgorCSAqIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgSFMgYnV0IHFjb21fcGFyYW0tPmRlc2lyZWRfd29ya2luZ19tb2RlIGlzCisJICogSFMsIHRodXMgZGV2aWNlIGFuZCBxY29tX3BhcmFtIGRvbid0IGFncmVlCisJICovCisJaWYgKCFpc19kZXZfc3VwX2hzICYmIGlzX3Fjb21fbWF4X2hzKSB7CisJCXByX2VycigiJXM6IGZhaWxlZCB0byBhZ3JlZSBvbiBwb3dlciBtb2RlIChkZXZpY2UgZG9lc24ndCBzdXBwb3J0IEhTIGJ1dCByZXF1ZXN0ZWQgcG93ZXIgaXMgSFMpXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVOT1RTVVBQOworCX0gZWxzZSBpZiAoaXNfZGV2X3N1cF9ocyAmJiBpc19xY29tX21heF9ocykgeworCQkvKgorCQkgKiBzaW5jZSBkZXZpY2Ugc3VwcG9ydHMgSFMsIGl0IHN1cHBvcnRzIEZBU1RfTU9ERS4KKwkJICogc2luY2UgcWNvbV9wYXJhbS0+ZGVzaXJlZF93b3JraW5nX21vZGUgaXMgYWxzbyBIUworCQkgKiB0aGVuIGZpbmFsIGRlY2lzaW9uIChGQVNUL0ZBU1RBVVRPKSBpcyBkb25lIGFjY29yZGluZworCQkgKiB0byBxY29tX3BhcmFtcyBhcyBpdCBpcyB0aGUgcmVzdHJpY3RpbmcgZmFjdG9yCisJCSAqLworCQlhZ3JlZWRfcHdyLT5wd3JfcnggPSBhZ3JlZWRfcHdyLT5wd3JfdHggPQorCQkJCQkJcWNvbV9wYXJhbS0+cnhfcHdyX2hzOworCX0gZWxzZSB7CisJCS8qCisJCSAqIGhlcmUgcWNvbV9wYXJhbS0+ZGVzaXJlZF93b3JraW5nX21vZGUgaXMgUFdNLgorCQkgKiBpdCBkb2Vzbid0IG1hdHRlciB3aGV0aGVyIGRldmljZSBzdXBwb3J0cyBIUyBvciBQV00sCisJCSAqIGluIGJvdGggY2FzZXMgcWNvbV9wYXJhbS0+ZGVzaXJlZF93b3JraW5nX21vZGUgd2lsbAorCQkgKiBkZXRlcm1pbmUgdGhlIG1vZGUKKwkJICovCisJCSBhZ3JlZWRfcHdyLT5wd3JfcnggPSBhZ3JlZWRfcHdyLT5wd3JfdHggPQorCQkJCQkJcWNvbV9wYXJhbS0+cnhfcHdyX3B3bTsKKwl9CisKKwkvKgorCSAqIHdlIHdvdWxkIGxpa2UgdHggdG8gd29yayBpbiB0aGUgbWluaW11bSBudW1iZXIgb2YgbGFuZXMKKwkgKiBiZXR3ZWVuIGRldmljZSBjYXBhYmlsaXR5IGFuZCB2ZW5kb3IgcHJlZmVyZW5jZXMuCisJICogdGhlIHNhbWUgZGVjaXNpb24gd2lsbCBiZSBtYWRlIGZvciByeAorCSAqLworCWFncmVlZF9wd3ItPmxhbmVfdHggPSBtaW5fdCh1MzIsIGRldl9tYXgtPmxhbmVfdHgsCisJCQkJCQlxY29tX3BhcmFtLT50eF9sYW5lcyk7CisJYWdyZWVkX3B3ci0+bGFuZV9yeCA9IG1pbl90KHUzMiwgZGV2X21heC0+bGFuZV9yeCwKKwkJCQkJCXFjb21fcGFyYW0tPnJ4X2xhbmVzKTsKKworCS8qIGRldmljZSBtYXhpbXVtIGdlYXIgaXMgdGhlIG1pbmltdW0gYmV0d2VlbiBkZXZpY2UgcnggYW5kIHR4IGdlYXJzICovCisJbWluX2Rldl9nZWFyID0gbWluX3QodTMyLCBkZXZfbWF4LT5nZWFyX3J4LCBkZXZfbWF4LT5nZWFyX3R4KTsKKworCS8qCisJICogaWYgYm90aCBkZXZpY2UgY2FwYWJpbGl0aWVzIGFuZCB2ZW5kb3IgcHJlLWRlZmluZWQgcHJlZmVyZW5jZXMgYXJlCisJICogYm90aCBIUyBvciBib3RoIFBXTSB0aGVuIHNldCB0aGUgbWluaW11bSBnZWFyIHRvIGJlIHRoZSBjaG9zZW4KKwkgKiB3b3JraW5nIGdlYXIuCisJICogaWYgb25lIGlzIFBXTSBhbmQgb25lIGlzIEhTIHRoZW4gdGhlIG9uZSB0aGF0IGlzIFBXTSBnZXQgdG8gZGVjaWRlCisJICogd2hhdCBpcyB0aGUgZ2VhciwgYXMgaXQgaXMgdGhlIG9uZSB0aGF0IGFsc28gZGVjaWRlZCBwcmV2aW91c2x5IHdoYXQKKwkgKiBwd3IgdGhlIGRldmljZSB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8uCisJICovCisJaWYgKChpc19kZXZfc3VwX2hzICYmIGlzX3Fjb21fbWF4X2hzKSB8fAorCSAgICAoIWlzX2Rldl9zdXBfaHMgJiYgIWlzX3Fjb21fbWF4X2hzKSkKKwkJYWdyZWVkX3B3ci0+Z2Vhcl9yeCA9IGFncmVlZF9wd3ItPmdlYXJfdHggPQorCQkJbWluX3QodTMyLCBtaW5fZGV2X2dlYXIsIG1pbl9xY29tX2dlYXIpOworCWVsc2UgaWYgKCFpc19kZXZfc3VwX2hzKQorCQlhZ3JlZWRfcHdyLT5nZWFyX3J4ID0gYWdyZWVkX3B3ci0+Z2Vhcl90eCA9IG1pbl9kZXZfZ2VhcjsKKwllbHNlCisJCWFncmVlZF9wd3ItPmdlYXJfcnggPSBhZ3JlZWRfcHdyLT5nZWFyX3R4ID0gbWluX3Fjb21fZ2VhcjsKKworCWFncmVlZF9wd3ItPmhzX3JhdGUgPSBxY29tX3BhcmFtLT5oc19yYXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVmc19xY29tX3VwZGF0ZV9idXNfYndfdm90ZShzdHJ1Y3QgdWZzX3Fjb21faG9zdCAqaG9zdCkKK3sKKwlpbnQgdm90ZTsKKwlpbnQgZXJyID0gMDsKKwljaGFyIG1vZGVbQlVTX1ZFQ1RPUl9OQU1FX0xFTl07CisKKwl1ZnNfcWNvbV9nZXRfc3BlZWRfbW9kZSgmaG9zdC0+ZGV2X3JlcV9wYXJhbXMsIG1vZGUpOworCisJdm90ZSA9IHVmc19xY29tX2dldF9idXNfdm90ZShob3N0LCBtb2RlKTsKKwlpZiAodm90ZSA+PSAwKQorCQllcnIgPSB1ZnNfcWNvbV9zZXRfYnVzX3ZvdGUoaG9zdCwgdm90ZSk7CisJZWxzZQorCQllcnIgPSB2b3RlOworCisJaWYgKGVycikKKwkJZGV2X2Vycihob3N0LT5oYmEtPmRldiwgIiVzOiBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCBlcnIpOworCWVsc2UKKwkJaG9zdC0+YnVzX3ZvdGUuc2F2ZWRfdm90ZSA9IHZvdGU7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB1ZnNfcWNvbV9wd3JfY2hhbmdlX25vdGlmeShzdHJ1Y3QgdWZzX2hiYSAqaGJhLAorCQkJCWJvb2wgc3RhdHVzLAorCQkJCXN0cnVjdCB1ZnNfcGFfbGF5ZXJfYXR0ciAqZGV2X21heF9wYXJhbXMsCisJCQkJc3RydWN0IHVmc19wYV9sYXllcl9hdHRyICpkZXZfcmVxX3BhcmFtcykKK3sKKwl1MzIgdmFsOworCXN0cnVjdCB1ZnNfcWNvbV9ob3N0ICpob3N0ID0gaGJhLT5wcml2OworCXN0cnVjdCBwaHkgKnBoeSA9IGhvc3QtPmdlbmVyaWNfcGh5OworCXN0cnVjdCB1ZnNfcWNvbV9kZXZfcGFyYW1zIHVmc19xY29tX2NhcDsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgcmVzID0gMDsKKworCWlmICghZGV2X3JlcV9wYXJhbXMpIHsKKwkJcHJfZXJyKCIlczogaW5jb21pbmcgZGV2X3JlcV9wYXJhbXMgaXMgTlVMTFxuIiwgX19mdW5jX18pOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgUFJFX0NIQU5HRToKKwkJdWZzX3Fjb21fY2FwLnR4X2xhbmVzID0gVUZTX1FDT01fTElNSVRfTlVNX0xBTkVTX1RYOworCQl1ZnNfcWNvbV9jYXAucnhfbGFuZXMgPSBVRlNfUUNPTV9MSU1JVF9OVU1fTEFORVNfUlg7CisJCXVmc19xY29tX2NhcC5oc19yeF9nZWFyID0gVUZTX1FDT01fTElNSVRfSFNHRUFSX1JYOworCQl1ZnNfcWNvbV9jYXAuaHNfdHhfZ2VhciA9IFVGU19RQ09NX0xJTUlUX0hTR0VBUl9UWDsKKwkJdWZzX3Fjb21fY2FwLnB3bV9yeF9nZWFyID0gVUZTX1FDT01fTElNSVRfUFdNR0VBUl9SWDsKKwkJdWZzX3Fjb21fY2FwLnB3bV90eF9nZWFyID0gVUZTX1FDT01fTElNSVRfUFdNR0VBUl9UWDsKKwkJdWZzX3Fjb21fY2FwLnJ4X3B3cl9wd20gPSBVRlNfUUNPTV9MSU1JVF9SWF9QV1JfUFdNOworCQl1ZnNfcWNvbV9jYXAudHhfcHdyX3B3bSA9IFVGU19RQ09NX0xJTUlUX1RYX1BXUl9QV007CisJCXVmc19xY29tX2NhcC5yeF9wd3JfaHMgPSBVRlNfUUNPTV9MSU1JVF9SWF9QV1JfSFM7CisJCXVmc19xY29tX2NhcC50eF9wd3JfaHMgPSBVRlNfUUNPTV9MSU1JVF9UWF9QV1JfSFM7CisJCXVmc19xY29tX2NhcC5oc19yYXRlID0gVUZTX1FDT01fTElNSVRfSFNfUkFURTsKKwkJdWZzX3Fjb21fY2FwLmRlc2lyZWRfd29ya2luZ19tb2RlID0KKwkJCQkJVUZTX1FDT01fTElNSVRfREVTSVJFRF9NT0RFOworCisJCXJldCA9IHVmc19xY29tX2dldF9wd3JfZGV2X3BhcmFtKCZ1ZnNfcWNvbV9jYXAsCisJCQkJCQkgZGV2X21heF9wYXJhbXMsCisJCQkJCQkgZGV2X3JlcV9wYXJhbXMpOworCQlpZiAocmV0KSB7CisJCQlwcl9lcnIoIiVzOiBmYWlsZWQgdG8gZGV0ZXJtaW5lIGNhcGFiaWxpdGllc1xuIiwKKwkJCQkJX19mdW5jX18pOworCQkJZ290byBvdXQ7CisJCX0KKworCQlicmVhazsKKwljYXNlIFBPU1RfQ0hBTkdFOgorCQlpZiAoIXVmc19xY29tX2NmZ190aW1lcnMoaGJhLCBkZXZfcmVxX3BhcmFtcy0+Z2Vhcl9yeCwKKwkJCQkJZGV2X3JlcV9wYXJhbXMtPnB3cl9yeCwKKwkJCQkJZGV2X3JlcV9wYXJhbXMtPmhzX3JhdGUpKSB7CisJCQlkZXZfZXJyKGhiYS0+ZGV2LCAiJXM6IHVmc19xY29tX2NmZ190aW1lcnMoKSBmYWlsZWRcbiIsCisJCQkJX19mdW5jX18pOworCQkJLyoKKwkJCSAqIHdlIHJldHVybiBlcnJvciBjb2RlIGF0IHRoZSBlbmQgb2YgdGhlIHJvdXRpbmUsCisJCQkgKiBidXQgY29udGludWUgdG8gY29uZmlndXJlIFVGU19QSFlfVFhfTEFORV9FTkFCTEUKKwkJCSAqIGFuZCBidXMgdm90aW5nIGFzIHVzdWFsCisJCQkgKi8KKwkJCXJldCA9IC1FSU5WQUw7CisJCX0KKworCQl2YWwgPSB+KE1BWF9VMzIgPDwgZGV2X3JlcV9wYXJhbXMtPmxhbmVfdHgpOworCQlyZXMgPSB1ZnNfcWNvbV9waHlfc2V0X3R4X2xhbmVfZW5hYmxlKHBoeSwgdmFsKTsKKwkJaWYgKHJlcykgeworCQkJZGV2X2VycihoYmEtPmRldiwgIiVzOiB1ZnNfcWNvbV9waHlfc2V0X3R4X2xhbmVfZW5hYmxlKCkgZmFpbGVkIHJlcyA9ICVkXG4iLAorCQkJCV9fZnVuY19fLCByZXMpOworCQkJcmV0ID0gcmVzOworCQl9CisKKwkJLyogY2FjaGUgdGhlIHBvd2VyIG1vZGUgcGFyYW1ldGVycyB0byB1c2UgaW50ZXJuYWxseSAqLworCQltZW1jcHkoJmhvc3QtPmRldl9yZXFfcGFyYW1zLAorCQkJCWRldl9yZXFfcGFyYW1zLCBzaXplb2YoKmRldl9yZXFfcGFyYW1zKSk7CisJCXVmc19xY29tX3VwZGF0ZV9idXNfYndfdm90ZShob3N0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogdWZzX3Fjb21fYWR2ZXJ0aXNlX3F1aXJrcyAtIGFkdmVydGlzZSB0aGUga25vd24gUUNPTSBVRlMgY29udHJvbGxlciBxdWlya3MKKyAqIEBoYmE6IGhvc3QgY29udHJvbGxlciBpbnN0YW5jZQorICoKKyAqIFFDT00gVUZTIGhvc3QgY29udHJvbGxlciBtaWdodCBoYXZlIHNvbWUgbm9uIHN0YW5kYXJkIGJlaGF2aW91cnMgKHF1aXJrcykKKyAqIHRoYW4gd2hhdCBpcyBzcGVjaWZpZWQgYnkgVUZTSENJIHNwZWNpZmljYXRpb24uIEFkdmVydGlzZSBhbGwgc3VjaAorICogcXVpcmtzIHRvIHN0YW5kYXJkIFVGUyBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIHNvIHN0YW5kYXJkIHRha2VzIHRoZW0gaW50bworICogYWNjb3VudC4KKyAqLworc3RhdGljIHZvaWQgdWZzX3Fjb21fYWR2ZXJ0aXNlX3F1aXJrcyhzdHJ1Y3QgdWZzX2hiYSAqaGJhKQoreworCXU4IG1ham9yOworCXUxNiBtaW5vciwgc3RlcDsKKworCXVmc19xY29tX2dldF9jb250cm9sbGVyX3JldmlzaW9uKGhiYSwgJm1ham9yLCAmbWlub3IsICZzdGVwKTsKKworCS8qCisJICogVEJECisJICogaGVyZSB3ZSBzaG91bGQgYmUgYWR2ZXJ0aXNpbmcgY29udHJvbGxlciBxdWlya3MgYWNjb3JkaW5nIHRvCisJICogY29udHJvbGxlciB2ZXJzaW9uLgorCSAqLworfQorCitzdGF0aWMgaW50IHVmc19xY29tX2dldF9idXNfdm90ZShzdHJ1Y3QgdWZzX3Fjb21faG9zdCAqaG9zdCwKKwkJY29uc3QgY2hhciAqc3BlZWRfbW9kZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBob3N0LT5oYmEtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCWludCBlcnI7CisJY29uc3QgY2hhciAqa2V5ID0gInFjb20sYnVzLXZlY3Rvci1uYW1lcyI7CisKKwlpZiAoIXNwZWVkX21vZGUpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGhvc3QtPmJ1c192b3RlLmlzX21heF9id19uZWVkZWQgJiYgISFzdHJjbXAoc3BlZWRfbW9kZSwgIk1JTiIpKQorCQllcnIgPSBvZl9wcm9wZXJ0eV9tYXRjaF9zdHJpbmcobnAsIGtleSwgIk1BWCIpOworCWVsc2UKKwkJZXJyID0gb2ZfcHJvcGVydHlfbWF0Y2hfc3RyaW5nKG5wLCBrZXksIHNwZWVkX21vZGUpOworCitvdXQ6CisJaWYgKGVyciA8IDApCisJCWRldl9lcnIoZGV2LCAiJXM6IEludmFsaWQgJXMgbW9kZSAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgc3BlZWRfbW9kZSwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHVmc19xY29tX3NldF9idXNfdm90ZShzdHJ1Y3QgdWZzX3Fjb21faG9zdCAqaG9zdCwgaW50IHZvdGUpCit7CisJaW50IGVyciA9IDA7CisKKwlpZiAodm90ZSAhPSBob3N0LT5idXNfdm90ZS5jdXJyX3ZvdGUpCisJCWhvc3QtPmJ1c192b3RlLmN1cnJfdm90ZSA9IHZvdGU7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCB1ZnNfcWNvbV9nZXRfc3BlZWRfbW9kZShzdHJ1Y3QgdWZzX3BhX2xheWVyX2F0dHIgKnAsIGNoYXIgKnJlc3VsdCkKK3sKKwlpbnQgZ2VhciA9IG1heF90KHUzMiwgcC0+Z2Vhcl9yeCwgcC0+Z2Vhcl90eCk7CisJaW50IGxhbmVzID0gbWF4X3QodTMyLCBwLT5sYW5lX3J4LCBwLT5sYW5lX3R4KTsKKwlpbnQgcHdyOworCisJLyogZGVmYXVsdCB0byBQV00gR2VhciAxLCBMYW5lIDEgaWYgcG93ZXIgbW9kZSBpcyBub3QgaW5pdGlhbGl6ZWQgKi8KKwlpZiAoIWdlYXIpCisJCWdlYXIgPSAxOworCisJaWYgKCFsYW5lcykKKwkJbGFuZXMgPSAxOworCisJaWYgKCFwLT5wd3JfcnggJiYgIXAtPnB3cl90eCkgeworCQlwd3IgPSBTTE9XQVVUT19NT0RFOworCQlzbnByaW50ZihyZXN1bHQsIEJVU19WRUNUT1JfTkFNRV9MRU4sICJNSU4iKTsKKwl9IGVsc2UgaWYgKHAtPnB3cl9yeCA9PSBGQVNUX01PREUgfHwgcC0+cHdyX3J4ID09IEZBU1RBVVRPX01PREUgfHwKKwkJIHAtPnB3cl90eCA9PSBGQVNUX01PREUgfHwgcC0+cHdyX3R4ID09IEZBU1RBVVRPX01PREUpIHsKKwkJcHdyID0gRkFTVF9NT0RFOworCQlzbnByaW50ZihyZXN1bHQsIEJVU19WRUNUT1JfTkFNRV9MRU4sICIlc19SJXNfRyVkX0wlZCIsICJIUyIsCisJCQkgcC0+aHNfcmF0ZSA9PSBQQV9IU19NT0RFX0IgPyAiQiIgOiAiQSIsIGdlYXIsIGxhbmVzKTsKKwl9IGVsc2UgeworCQlwd3IgPSBTTE9XX01PREU7CisJCXNucHJpbnRmKHJlc3VsdCwgQlVTX1ZFQ1RPUl9OQU1FX0xFTiwgIiVzX0clZF9MJWQiLAorCQkJICJQV00iLCBnZWFyLCBsYW5lcyk7CisJfQorfQorCitzdGF0aWMgaW50IHVmc19xY29tX3NldHVwX2Nsb2NrcyhzdHJ1Y3QgdWZzX2hiYSAqaGJhLCBib29sIG9uKQoreworCXN0cnVjdCB1ZnNfcWNvbV9ob3N0ICpob3N0ID0gaGJhLT5wcml2OworCWludCBlcnIgPSAwOworCWludCB2b3RlID0gMDsKKworCS8qCisJICogSW4gY2FzZSB1ZnNfcWNvbV9pbml0KCkgaXMgbm90IHlldCBkb25lLCBzaW1wbHkgaWdub3JlLgorCSAqIFRoaXMgdWZzX3Fjb21fc2V0dXBfY2xvY2tzKCkgc2hhbGwgYmUgY2FsbGVkIGZyb20KKwkgKiB1ZnNfcWNvbV9pbml0KCkgYWZ0ZXIgaW5pdCBpcyBkb25lLgorCSAqLworCWlmICghaG9zdCkKKwkJcmV0dXJuIDA7CisKKwlpZiAob24pIHsKKwkJZXJyID0gdWZzX3Fjb21fcGh5X2VuYWJsZV9pZmFjZV9jbGsoaG9zdC0+Z2VuZXJpY19waHkpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisKKwkJZXJyID0gdWZzX3Fjb21fcGh5X2VuYWJsZV9yZWZfY2xrKGhvc3QtPmdlbmVyaWNfcGh5KTsKKwkJaWYgKGVycikgeworCQkJZGV2X2VycihoYmEtPmRldiwgIiVzIGVuYWJsZSBwaHkgcmVmIGNsb2NrIGZhaWxlZCwgZXJyPSVkXG4iLAorCQkJCV9fZnVuY19fLCBlcnIpOworCQkJdWZzX3Fjb21fcGh5X2Rpc2FibGVfaWZhY2VfY2xrKGhvc3QtPmdlbmVyaWNfcGh5KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCS8qIGVuYWJsZSB0aGUgZGV2aWNlIHJlZiBjbG9jayAqLworCQl1ZnNfcWNvbV9waHlfZW5hYmxlX2Rldl9yZWZfY2xrKGhvc3QtPmdlbmVyaWNfcGh5KTsKKwkJdm90ZSA9IGhvc3QtPmJ1c192b3RlLnNhdmVkX3ZvdGU7CisJCWlmICh2b3RlID09IGhvc3QtPmJ1c192b3RlLm1pbl9id192b3RlKQorCQkJdWZzX3Fjb21fdXBkYXRlX2J1c19id192b3RlKGhvc3QpOworCX0gZWxzZSB7CisJCS8qIE0tUEhZIFJNTUkgaW50ZXJmYWNlIGNsb2NrcyBjYW4gYmUgdHVybmVkIG9mZiAqLworCQl1ZnNfcWNvbV9waHlfZGlzYWJsZV9pZmFjZV9jbGsoaG9zdC0+Z2VuZXJpY19waHkpOworCQlpZiAoIXVmc19xY29tX2lzX2xpbmtfYWN0aXZlKGhiYSkpIHsKKwkJCS8qIHR1cm4gb2ZmIFVGUyBsb2NhbCBQSFkgcmVmX2NsayAqLworCQkJdWZzX3Fjb21fcGh5X2Rpc2FibGVfcmVmX2Nsayhob3N0LT5nZW5lcmljX3BoeSk7CisJCQkvKiBkaXNhYmxlIGRldmljZSByZWZfY2xrICovCisJCQl1ZnNfcWNvbV9waHlfZGlzYWJsZV9kZXZfcmVmX2Nsayhob3N0LT5nZW5lcmljX3BoeSk7CisJCX0KKwkJdm90ZSA9IGhvc3QtPmJ1c192b3RlLm1pbl9id192b3RlOworCX0KKworCWVyciA9IHVmc19xY29tX3NldF9idXNfdm90ZShob3N0LCB2b3RlKTsKKwlpZiAoZXJyKQorCQlkZXZfZXJyKGhiYS0+ZGV2LCAiJXM6IHNldCBidXMgdm90ZSBmYWlsZWQgJWRcbiIsCisJCQkJX19mdW5jX18sIGVycik7CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3NpemVfdAorc2hvd191ZnNfdG9fbWVtX21heF9idXNfYncoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdWZzX2hiYSAqaGJhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHVmc19xY29tX2hvc3QgKmhvc3QgPSBoYmEtPnByaXY7CisKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwKKwkJCWhvc3QtPmJ1c192b3RlLmlzX21heF9id19uZWVkZWQpOworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfdWZzX3RvX21lbV9tYXhfYnVzX2J3KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1ZnNfaGJhICpoYmEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgdWZzX3Fjb21faG9zdCAqaG9zdCA9IGhiYS0+cHJpdjsKKwl1aW50MzJfdCB2YWx1ZTsKKworCWlmICgha3N0cnRvdTMyKGJ1ZiwgMCwgJnZhbHVlKSkgeworCQlob3N0LT5idXNfdm90ZS5pc19tYXhfYndfbmVlZGVkID0gISF2YWx1ZTsKKwkJdWZzX3Fjb21fdXBkYXRlX2J1c19id192b3RlKGhvc3QpOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGludCB1ZnNfcWNvbV9idXNfcmVnaXN0ZXIoc3RydWN0IHVmc19xY29tX2hvc3QgKmhvc3QpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBob3N0LT5oYmEtPmRldjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCisJZXJyID0gb2ZfcHJvcGVydHlfY291bnRfc3RyaW5ncyhucCwgInFjb20sYnVzLXZlY3Rvci1uYW1lcyIpOworCWlmIChlcnIgPCAwICkgeworCQlkZXZfZXJyKGRldiwgIiVzOiBxY29tLGJ1cy12ZWN0b3ItbmFtZXMgbm90IHNwZWNpZmllZCBjb3JyZWN0bHkgJWRcbiIsCisJCQkJX19mdW5jX18sIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGNhY2hlIHRoZSB2b3RlIGluZGV4IGZvciBtaW5pbXVtIGFuZCBtYXhpbXVtIGJhbmR3aWR0aCAqLworCWhvc3QtPmJ1c192b3RlLm1pbl9id192b3RlID0gdWZzX3Fjb21fZ2V0X2J1c192b3RlKGhvc3QsICJNSU4iKTsKKwlob3N0LT5idXNfdm90ZS5tYXhfYndfdm90ZSA9IHVmc19xY29tX2dldF9idXNfdm90ZShob3N0LCAiTUFYIik7CisKKwlob3N0LT5idXNfdm90ZS5tYXhfYnVzX2J3LnNob3cgPSBzaG93X3Vmc190b19tZW1fbWF4X2J1c19idzsKKwlob3N0LT5idXNfdm90ZS5tYXhfYnVzX2J3LnN0b3JlID0gc3RvcmVfdWZzX3RvX21lbV9tYXhfYnVzX2J3OworCXN5c2ZzX2F0dHJfaW5pdCgmaG9zdC0+YnVzX3ZvdGUubWF4X2J1c19idy5hdHRyKTsKKwlob3N0LT5idXNfdm90ZS5tYXhfYnVzX2J3LmF0dHIubmFtZSA9ICJtYXhfYnVzX2J3IjsKKwlob3N0LT5idXNfdm90ZS5tYXhfYnVzX2J3LmF0dHIubW9kZSA9IFNfSVJVR08gfCBTX0lXVVNSOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZob3N0LT5idXNfdm90ZS5tYXhfYnVzX2J3KTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCisjZGVmaW5lCUFORFJPSURfQk9PVF9ERVZfTUFYCTMwCitzdGF0aWMgY2hhciBhbmRyb2lkX2Jvb3RfZGV2W0FORFJPSURfQk9PVF9ERVZfTUFYXTsKK3N0YXRpYyBpbnQgZ2V0X2FuZHJvaWRfYm9vdF9kZXYoY2hhciAqc3RyKQoreworCXN0cmxjcHkoYW5kcm9pZF9ib290X2Rldiwgc3RyLCBBTkRST0lEX0JPT1RfREVWX01BWCk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJhbmRyb2lkYm9vdC5ib290ZGV2aWNlPSIsIGdldF9hbmRyb2lkX2Jvb3RfZGV2KTsKKworLyoqCisgKiB1ZnNfcWNvbV9pbml0IC0gYmluZCBwaHkgd2l0aCBjb250cm9sbGVyCisgKiBAaGJhOiBob3N0IGNvbnRyb2xsZXIgaW5zdGFuY2UKKyAqCisgKiBCaW5kcyBQSFkgd2l0aCBjb250cm9sbGVyIGFuZCBwb3dlcnMgdXAgUEhZIGVuYWJsaW5nIGNsb2NrcworICogYW5kIHJlZ3VsYXRvcnMuCisgKgorICogUmV0dXJucyAtRVBST0JFX0RFRkVSIGlmIGJpbmRpbmcgZmFpbHMsIHJldHVybnMgbmVnYXRpdmUgZXJyb3IKKyAqIG9uIHBoeSBwb3dlciB1cCBmYWlsdXJlIGFuZCByZXR1cm5zIHplcm8gb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCB1ZnNfcWNvbV9pbml0KHN0cnVjdCB1ZnNfaGJhICpoYmEpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBoYmEtPmRldjsKKwlzdHJ1Y3QgdWZzX3Fjb21faG9zdCAqaG9zdDsKKworCWlmIChzdHJsZW4oYW5kcm9pZF9ib290X2RldikgJiYgc3RyY21wKGFuZHJvaWRfYm9vdF9kZXYsIGRldl9uYW1lKGRldikpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWhvc3QgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmhvc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhvc3QpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZGV2X2VycihkZXYsICIlczogbm8gbWVtb3J5IGZvciBxY29tIHVmcyBob3N0XG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0OworCX0KKworCWhvc3QtPmhiYSA9IGhiYTsKKwloYmEtPnByaXYgPSAodm9pZCAqKWhvc3Q7CisKKwlob3N0LT5nZW5lcmljX3BoeSA9IGRldm1fcGh5X2dldChkZXYsICJ1ZnNwaHkiKTsKKworCWlmIChJU19FUlIoaG9zdC0+Z2VuZXJpY19waHkpKSB7CisJCWVyciA9IFBUUl9FUlIoaG9zdC0+Z2VuZXJpY19waHkpOworCQlkZXZfZXJyKGRldiwgIiVzOiBQSFkgZ2V0IGZhaWxlZCAlZFxuIiwgX19mdW5jX18sIGVycik7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IHVmc19xY29tX2J1c19yZWdpc3Rlcihob3N0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9ob3N0X2ZyZWU7CisKKwlwaHlfaW5pdChob3N0LT5nZW5lcmljX3BoeSk7CisJZXJyID0gcGh5X3Bvd2VyX29uKGhvc3QtPmdlbmVyaWNfcGh5KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF91bnJlZ2lzdGVyX2J1czsKKworCWVyciA9IHVmc19xY29tX2luaXRfbGFuZV9jbGtzKGhvc3QpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2Rpc2FibGVfcGh5OworCisJdWZzX3Fjb21fYWR2ZXJ0aXNlX3F1aXJrcyhoYmEpOworCisJaGJhLT5jYXBzIHw9IFVGU0hDRF9DQVBfQ0xLX0dBVElORyB8IFVGU0hDRF9DQVBfQ0xLX1NDQUxJTkc7CisJaGJhLT5jYXBzIHw9IFVGU0hDRF9DQVBfQVVUT19CS09QU19TVVNQRU5EOworCisJdWZzX3Fjb21fc2V0dXBfY2xvY2tzKGhiYSwgdHJ1ZSk7CisKKwlpZiAoaGJhLT5kZXYtPmlkIDwgTUFYX1VGU19RQ09NX0hPU1RTKQorCQl1ZnNfcWNvbV9ob3N0c1toYmEtPmRldi0+aWRdID0gaG9zdDsKKworCWdvdG8gb3V0OworCitvdXRfZGlzYWJsZV9waHk6CisJcGh5X3Bvd2VyX29mZihob3N0LT5nZW5lcmljX3BoeSk7CitvdXRfdW5yZWdpc3Rlcl9idXM6CisJcGh5X2V4aXQoaG9zdC0+Z2VuZXJpY19waHkpOworb3V0X2hvc3RfZnJlZToKKwlkZXZtX2tmcmVlKGRldiwgaG9zdCk7CisJaGJhLT5wcml2ID0gTlVMTDsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCB1ZnNfcWNvbV9leGl0KHN0cnVjdCB1ZnNfaGJhICpoYmEpCit7CisJc3RydWN0IHVmc19xY29tX2hvc3QgKmhvc3QgPSBoYmEtPnByaXY7CisKKwl1ZnNfcWNvbV9kaXNhYmxlX2xhbmVfY2xrcyhob3N0KTsKKwlwaHlfcG93ZXJfb2ZmKGhvc3QtPmdlbmVyaWNfcGh5KTsKK30KKworc3RhdGljCit2b2lkIHVmc19xY29tX2Nsa19zY2FsZV9ub3RpZnkoc3RydWN0IHVmc19oYmEgKmhiYSkKK3sKKwlzdHJ1Y3QgdWZzX3Fjb21faG9zdCAqaG9zdCA9IGhiYS0+cHJpdjsKKwlzdHJ1Y3QgdWZzX3BhX2xheWVyX2F0dHIgKmRldl9yZXFfcGFyYW1zID0gJmhvc3QtPmRldl9yZXFfcGFyYW1zOworCisJaWYgKCFkZXZfcmVxX3BhcmFtcykKKwkJcmV0dXJuOworCisJdWZzX3Fjb21fY2ZnX3RpbWVycyhoYmEsIGRldl9yZXFfcGFyYW1zLT5nZWFyX3J4LAorCQkJCWRldl9yZXFfcGFyYW1zLT5wd3JfcngsCisJCQkJZGV2X3JlcV9wYXJhbXMtPmhzX3JhdGUpOworfQorCisvKioKKyAqIHN0cnVjdCB1ZnNfaGJhX3Fjb21fdm9wcyAtIFVGUyBRQ09NIHNwZWNpZmljIHZhcmlhbnQgb3BlcmF0aW9ucworICoKKyAqIFRoZSB2YXJpYW50IG9wZXJhdGlvbnMgY29uZmlndXJlIHRoZSBuZWNlc3NhcnkgY29udHJvbGxlciBhbmQgUEhZCisgKiBoYW5kc2hha2UgZHVyaW5nIGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVmc19oYmFfdmFyaWFudF9vcHMgdWZzX2hiYV9xY29tX3ZvcHMgPSB7CisJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAicWNvbSIsCisJLmluaXQgICAgICAgICAgICAgICAgICAgPSB1ZnNfcWNvbV9pbml0LAorCS5leGl0ICAgICAgICAgICAgICAgICAgID0gdWZzX3Fjb21fZXhpdCwKKwkuY2xrX3NjYWxlX25vdGlmeQk9IHVmc19xY29tX2Nsa19zY2FsZV9ub3RpZnksCisJLnNldHVwX2Nsb2NrcyAgICAgICAgICAgPSB1ZnNfcWNvbV9zZXR1cF9jbG9ja3MsCisJLmhjZV9lbmFibGVfbm90aWZ5ICAgICAgPSB1ZnNfcWNvbV9oY2VfZW5hYmxlX25vdGlmeSwKKwkubGlua19zdGFydHVwX25vdGlmeSAgICA9IHVmc19xY29tX2xpbmtfc3RhcnR1cF9ub3RpZnksCisJLnB3cl9jaGFuZ2Vfbm90aWZ5CT0gdWZzX3Fjb21fcHdyX2NoYW5nZV9ub3RpZnksCisJLnN1c3BlbmQJCT0gdWZzX3Fjb21fc3VzcGVuZCwKKwkucmVzdW1lCQkJPSB1ZnNfcWNvbV9yZXN1bWUsCit9OworRVhQT1JUX1NZTUJPTCh1ZnNfaGJhX3Fjb21fdm9wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdWZzL3Vmcy1xY29tLmggYi9kcml2ZXJzL3Njc2kvdWZzL3Vmcy1xY29tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2ZmViZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2NzaS91ZnMvdWZzLXFjb20uaApAQCAtMCwwICsxLDE3MCBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEzLTIwMTUsIFRoZSBMaW51eCBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhbmQKKyAqIG9ubHkgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgVUZTX1FDT01fSF8KKyNkZWZpbmUgVUZTX1FDT01fSF8KKworI2RlZmluZSBNQVhfVUZTX1FDT01fSE9TVFMJMQorI2RlZmluZSBNQVhfVTMyICAgICAgICAgICAgICAgICAofih1MzIpMCkKKyNkZWZpbmUgTVBIWV9UWF9GU01fU1RBVEUgICAgICAgMHg0MQorI2RlZmluZSBUWF9GU01fSElCRVJOOCAgICAgICAgICAweDEKKyNkZWZpbmUgSEJSTjhfUE9MTF9UT1VUX01TICAgICAgMTAwCisjZGVmaW5lIERFRkFVTFRfQ0xLX1JBVEVfSFogICAgIDEwMDAwMDAKKyNkZWZpbmUgQlVTX1ZFQ1RPUl9OQU1FX0xFTiAgICAgMzIKKworI2RlZmluZSBVRlNfSFdfVkVSX01BSk9SX1NIRlQJKDI4KQorI2RlZmluZSBVRlNfSFdfVkVSX01BSk9SX01BU0sJKDB4MDAwRiA8PCBVRlNfSFdfVkVSX01BSk9SX1NIRlQpCisjZGVmaW5lIFVGU19IV19WRVJfTUlOT1JfU0hGVAkoMTYpCisjZGVmaW5lIFVGU19IV19WRVJfTUlOT1JfTUFTSwkoMHgwRkZGIDw8IFVGU19IV19WRVJfTUlOT1JfU0hGVCkKKyNkZWZpbmUgVUZTX0hXX1ZFUl9TVEVQX1NIRlQJKDApCisjZGVmaW5lIFVGU19IV19WRVJfU1RFUF9NQVNLCSgweEZGRkYgPDwgVUZTX0hXX1ZFUl9TVEVQX1NIRlQpCisKKy8qIHZlbmRvciBzcGVjaWZpYyBwcmUtZGVmaW5lZCBwYXJhbWV0ZXJzICovCisjZGVmaW5lIFNMT1cgMQorI2RlZmluZSBGQVNUIDIKKworI2RlZmluZSBVRlNfUUNPTV9MSU1JVF9OVU1fTEFORVNfUlgJMgorI2RlZmluZSBVRlNfUUNPTV9MSU1JVF9OVU1fTEFORVNfVFgJMgorI2RlZmluZSBVRlNfUUNPTV9MSU1JVF9IU0dFQVJfUlgJVUZTX0hTX0cyCisjZGVmaW5lIFVGU19RQ09NX0xJTUlUX0hTR0VBUl9UWAlVRlNfSFNfRzIKKyNkZWZpbmUgVUZTX1FDT01fTElNSVRfUFdNR0VBUl9SWAlVRlNfUFdNX0c0CisjZGVmaW5lIFVGU19RQ09NX0xJTUlUX1BXTUdFQVJfVFgJVUZTX1BXTV9HNAorI2RlZmluZSBVRlNfUUNPTV9MSU1JVF9SWF9QV1JfUFdNCVNMT1dfTU9ERQorI2RlZmluZSBVRlNfUUNPTV9MSU1JVF9UWF9QV1JfUFdNCVNMT1dfTU9ERQorI2RlZmluZSBVRlNfUUNPTV9MSU1JVF9SWF9QV1JfSFMJRkFTVF9NT0RFCisjZGVmaW5lIFVGU19RQ09NX0xJTUlUX1RYX1BXUl9IUwlGQVNUX01PREUKKyNkZWZpbmUgVUZTX1FDT01fTElNSVRfSFNfUkFURQkJUEFfSFNfTU9ERV9CCisjZGVmaW5lIFVGU19RQ09NX0xJTUlUX0RFU0lSRURfTU9ERQlGQVNUCisKKy8qIFFDT00gVUZTIGhvc3QgY29udHJvbGxlciB2ZW5kb3Igc3BlY2lmaWMgcmVnaXN0ZXJzICovCitlbnVtIHsKKwlSRUdfVUZTX1NZUzFDTEtfMVVTICAgICAgICAgICAgICAgICA9IDB4QzAsCisJUkVHX1VGU19UWF9TWU1CT0xfQ0xLX05TX1VTICAgICAgICAgPSAweEM0LAorCVJFR19VRlNfTE9DQUxfUE9SVF9JRF9SRUcgICAgICAgICAgID0gMHhDOCwKKwlSRUdfVUZTX1BBX0VSUl9DT0RFICAgICAgICAgICAgICAgICA9IDB4Q0MsCisJUkVHX1VGU19SRVRSWV9USU1FUl9SRUcgICAgICAgICAgICAgPSAweEQwLAorCVJFR19VRlNfUEFfTElOS19TVEFSVFVQX1RJTUVSICAgICAgID0gMHhEOCwKKwlSRUdfVUZTX0NGRzEgICAgICAgICAgICAgICAgICAgICAgICA9IDB4REMsCisJUkVHX1VGU19DRkcyICAgICAgICAgICAgICAgICAgICAgICAgPSAweEUwLAorCVJFR19VRlNfSFdfVkVSU0lPTiAgICAgICAgICAgICAgICAgID0gMHhFNCwKKworCVVGU19EQkdfUkRfUkVHX1VBV00JCQk9IDB4MTAwLAorCVVGU19EQkdfUkRfUkVHX1VBUk0JCQk9IDB4MjAwLAorCVVGU19EQkdfUkRfUkVHX1RYVUMJCQk9IDB4MzAwLAorCVVGU19EQkdfUkRfUkVHX1JYVUMJCQk9IDB4NDAwLAorCVVGU19EQkdfUkRfUkVHX0RGQwkJCT0gMHg1MDAsCisJVUZTX0RCR19SRF9SRUdfVFJMVVQJCQk9IDB4NjAwLAorCVVGU19EQkdfUkRfUkVHX1RNUkxVVAkJCT0gMHg3MDAsCisJVUZTX1VGU19EQkdfUkRfUkVHX09DU0MJCQk9IDB4ODAwLAorCisJVUZTX1VGU19EQkdfUkRfREVTQ19SQU0JCQk9IDB4MTUwMCwKKwlVRlNfVUZTX0RCR19SRF9QUkRUX1JBTQkJCT0gMHgxNzAwLAorCVVGU19VRlNfREJHX1JEX1JFU1BfUkFNCQkJPSAweDE4MDAsCisJVUZTX1VGU19EQkdfUkRfRURUTF9SQU0JCQk9IDB4MTkwMCwKK307CisKKy8qIGJpdCBkZWZpbml0aW9ucyBmb3IgUkVHX1VGU19DRkcyIHJlZ2lzdGVyICovCisjZGVmaW5lIFVBV01fSFdfQ0dDX0VOCQkoMSA8PCAwKQorI2RlZmluZSBVQVJNX0hXX0NHQ19FTgkJKDEgPDwgMSkKKyNkZWZpbmUgVFhVQ19IV19DR0NfRU4JCSgxIDw8IDIpCisjZGVmaW5lIFJYVUNfSFdfQ0dDX0VOCQkoMSA8PCAzKQorI2RlZmluZSBERkNfSFdfQ0dDX0VOCQkoMSA8PCA0KQorI2RlZmluZSBUUkxVVF9IV19DR0NfRU4JCSgxIDw8IDUpCisjZGVmaW5lIFRNUkxVVF9IV19DR0NfRU4JKDEgPDwgNikKKyNkZWZpbmUgT0NTQ19IV19DR0NfRU4JCSgxIDw8IDcpCisKKyNkZWZpbmUgUkVHX1VGU19DRkcyX0NHQ19FTl9BTEwgKFVBV01fSFdfQ0dDX0VOIHwgVUFSTV9IV19DR0NfRU4gfFwKKwkJCQkgVFhVQ19IV19DR0NfRU4gfCBSWFVDX0hXX0NHQ19FTiB8XAorCQkJCSBERkNfSFdfQ0dDX0VOIHwgVFJMVVRfSFdfQ0dDX0VOIHxcCisJCQkJIFRNUkxVVF9IV19DR0NfRU4gfCBPQ1NDX0hXX0NHQ19FTikKKworLyogYml0IG9mZnNldCAqLworZW51bSB7CisJT0ZGU0VUX1VGU19QSFlfU09GVF9SRVNFVCAgICAgICAgICAgPSAxLAorCU9GRlNFVF9DTEtfTlNfUkVHICAgICAgICAgICAgICAgICAgID0gMTAsCit9OworCisvKiBiaXQgbWFza3MgKi8KK2VudW0geworCU1BU0tfVUZTX1BIWV9TT0ZUX1JFU0VUICAgICAgICAgICAgID0gMHgyLAorCU1BU0tfVFhfU1lNQk9MX0NMS18xVVNfUkVHICAgICAgICAgID0gMHgzRkYsCisJTUFTS19DTEtfTlNfUkVHICAgICAgICAgICAgICAgICAgICAgPSAweEZGRkMwMCwKK307CisKK2VudW0gdWZzX3Fjb21fcGh5X2luaXRfdHlwZSB7CisJVUZTX1BIWV9JTklUX0ZVTEwsCisJVUZTX1BIWV9JTklUX0NGR19SRVNUT1JFLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkCit1ZnNfcWNvbV9nZXRfY29udHJvbGxlcl9yZXZpc2lvbihzdHJ1Y3QgdWZzX2hiYSAqaGJhLAorCQkJCSB1OCAqbWFqb3IsIHUxNiAqbWlub3IsIHUxNiAqc3RlcCkKK3sKKwl1MzIgdmVyID0gdWZzaGNkX3JlYWRsKGhiYSwgUkVHX1VGU19IV19WRVJTSU9OKTsKKworCSptYWpvciA9ICh2ZXIgJiBVRlNfSFdfVkVSX01BSk9SX01BU0spID4+IFVGU19IV19WRVJfTUFKT1JfU0hGVDsKKwkqbWlub3IgPSAodmVyICYgVUZTX0hXX1ZFUl9NSU5PUl9NQVNLKSA+PiBVRlNfSFdfVkVSX01JTk9SX1NIRlQ7CisJKnN0ZXAgPSAodmVyICYgVUZTX0hXX1ZFUl9TVEVQX01BU0spID4+IFVGU19IV19WRVJfU1RFUF9TSEZUOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIHVmc19xY29tX2Fzc2VydF9yZXNldChzdHJ1Y3QgdWZzX2hiYSAqaGJhKQoreworCXVmc2hjZF9ybXdsKGhiYSwgTUFTS19VRlNfUEhZX1NPRlRfUkVTRVQsCisJCQkxIDw8IE9GRlNFVF9VRlNfUEhZX1NPRlRfUkVTRVQsIFJFR19VRlNfQ0ZHMSk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBhc3NlcnRpb24gb2YgdWZzIHBoeSByZXNldCBpcyB3cml0dGVuIHRvCisJICogcmVnaXN0ZXIgYmVmb3JlIHJldHVybmluZworCSAqLworCW1iKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1ZnNfcWNvbV9kZWFzc2VydF9yZXNldChzdHJ1Y3QgdWZzX2hiYSAqaGJhKQoreworCXVmc2hjZF9ybXdsKGhiYSwgTUFTS19VRlNfUEhZX1NPRlRfUkVTRVQsCisJCQkwIDw8IE9GRlNFVF9VRlNfUEhZX1NPRlRfUkVTRVQsIFJFR19VRlNfQ0ZHMSk7CisKKwkvKgorCSAqIE1ha2Ugc3VyZSBkZS1hc3NlcnRpb24gb2YgdWZzIHBoeSByZXNldCBpcyB3cml0dGVuIHRvCisJICogcmVnaXN0ZXIgYmVmb3JlIHJldHVybmluZworCSAqLworCW1iKCk7Cit9CisKK3N0cnVjdCB1ZnNfcWNvbV9idXNfdm90ZSB7CisJdWludDMyX3QgY2xpZW50X2hhbmRsZTsKKwl1aW50MzJfdCBjdXJyX3ZvdGU7CisJaW50IG1pbl9id192b3RlOworCWludCBtYXhfYndfdm90ZTsKKwlpbnQgc2F2ZWRfdm90ZTsKKwlib29sIGlzX21heF9id19uZWVkZWQ7CisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgbWF4X2J1c19idzsKK307CisKK3N0cnVjdCB1ZnNfcWNvbV9ob3N0IHsKKwlzdHJ1Y3QgcGh5ICpnZW5lcmljX3BoeTsKKwlzdHJ1Y3QgdWZzX2hiYSAqaGJhOworCXN0cnVjdCB1ZnNfcWNvbV9idXNfdm90ZSBidXNfdm90ZTsKKwlzdHJ1Y3QgdWZzX3BhX2xheWVyX2F0dHIgZGV2X3JlcV9wYXJhbXM7CisJc3RydWN0IGNsayAqcnhfbDBfc3luY19jbGs7CisJc3RydWN0IGNsayAqdHhfbDBfc3luY19jbGs7CisJc3RydWN0IGNsayAqcnhfbDFfc3luY19jbGs7CisJc3RydWN0IGNsayAqdHhfbDFfc3luY19jbGs7CisJYm9vbCBpc19sYW5lX2Nsa3NfZW5hYmxlZDsKK307CisKKyNkZWZpbmUgdWZzX3Fjb21faXNfbGlua19vZmYoaGJhKSB1ZnNoY2RfaXNfbGlua19vZmYoaGJhKQorI2RlZmluZSB1ZnNfcWNvbV9pc19saW5rX2FjdGl2ZShoYmEpIHVmc2hjZF9pc19saW5rX2FjdGl2ZShoYmEpCisjZGVmaW5lIHVmc19xY29tX2lzX2xpbmtfaGliZXJuOChoYmEpIHVmc2hjZF9pc19saW5rX2hpYmVybjgoaGJhKQorCisjZW5kaWYgLyogVUZTX1FDT01fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS91ZnMvdWZzaGNkLmMgYi9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC5jCmluZGV4IDJlNDYxNGIuLjVkNjBhODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS91ZnMvdWZzaGNkLmMKKysrIGIvZHJpdmVycy9zY3NpL3Vmcy91ZnNoY2QuYwpAQCAtNDcxNCwxMCArNDcxNCw4IEBACiAJCXNkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgc2RwLAogCQkJICAgICJTVEFSVF9TVE9QIGZhaWxlZCBmb3IgcG93ZXIgbW9kZTogJWQsIHJlc3VsdCAleFxuIiwKIAkJCSAgICBwd3JfbW9kZSwgcmV0KTsKLQkJaWYgKGRyaXZlcl9ieXRlKHJldCkgJiBEUklWRVJfU0VOU0UpIHsKLQkJCXNjc2lfc2hvd19zZW5zZV9oZHIoc2RwLCBOVUxMLCAmc3NoZHIpOwotCQkJc2NzaV9zaG93X2V4dGRfc2Vuc2Uoc2RwLCBOVUxMLCBzc2hkci5hc2MsIHNzaGRyLmFzY3EpOwotCQl9CisJCWlmIChkcml2ZXJfYnl0ZShyZXQpICYgRFJJVkVSX1NFTlNFKQorCQkJc2NzaV9wcmludF9zZW5zZV9oZHIoc2RwLCBOVUxMLCAmc3NoZHIpOwogCX0KIAogCWlmICghcmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYyBiL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmMKaW5kZXggYzA1MDZkZS4uOWUwOWRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuYworKysgYi9kcml2ZXJzL3Njc2kvd2QzM2M5My5jCkBAIC0yMTQzLDIyICsyMTQzLDIyIEBACiAJCXNlcV9wcmludGYobSwgIlxuY2xvY2tfZnJlcT0lMDJ4IG5vX3N5bmM9JTAyeCBub19kbWE9JWQiCiAJCQkiIGRtYV9tb2RlPSUwMnggZmFzdD0lZCIsCiAJCQloZC0+Y2xvY2tfZnJlcSwgaGQtPm5vX3N5bmMsIGhkLT5ub19kbWEsIGhkLT5kbWFfbW9kZSwgaGQtPmZhc3QpOwotCQlzZXFfcHJpbnRmKG0sICJcbnN5bmNfeGZlcltdID0gICAgICAgIik7CisJCXNlcV9wdXRzKG0sICJcbnN5bmNfeGZlcltdID0gICAgICAgIik7CiAJCWZvciAoeCA9IDA7IHggPCA3OyB4KyspCiAJCQlzZXFfcHJpbnRmKG0sICJcdCUwMngiLCBoZC0+c3luY194ZmVyW3hdKTsKLQkJc2VxX3ByaW50ZihtLCAiXG5zeW5jX3N0YXRbXSA9ICAgICAgICIpOworCQlzZXFfcHV0cyhtLCAiXG5zeW5jX3N0YXRbXSA9ICAgICAgICIpOwogCQlmb3IgKHggPSAwOyB4IDwgNzsgeCsrKQogCQkJc2VxX3ByaW50ZihtLCAiXHQlMDJ4IiwgaGQtPnN5bmNfc3RhdFt4XSk7CiAJfQogI2lmZGVmIFBST0NfU1RBVElTVElDUwogCWlmIChoZC0+cHJvYyAmIFBSX1NUQVRJU1RJQ1MpIHsKLQkJc2VxX3ByaW50ZihtLCAiXG5jb21tYW5kcyBpc3N1ZWQ6ICAgICIpOworCQlzZXFfcHV0cyhtLCAiXG5jb21tYW5kcyBpc3N1ZWQ6ICAgICIpOwogCQlmb3IgKHggPSAwOyB4IDwgNzsgeCsrKQogCQkJc2VxX3ByaW50ZihtLCAiXHQlbGQiLCBoZC0+Y21kX2NudFt4XSk7Ci0JCXNlcV9wcmludGYobSwgIlxuZGlzY29ubmVjdHMgYWxsb3dlZDoiKTsKKwkJc2VxX3B1dHMobSwgIlxuZGlzY29ubmVjdHMgYWxsb3dlZDoiKTsKIAkJZm9yICh4ID0gMDsgeCA8IDc7IHgrKykKIAkJCXNlcV9wcmludGYobSwgIlx0JWxkIiwgaGQtPmRpc2NfYWxsb3dlZF9jbnRbeF0pOwotCQlzZXFfcHJpbnRmKG0sICJcbmRpc2Nvbm5lY3RzIGRvbmU6ICAgIik7CisJCXNlcV9wdXRzKG0sICJcbmRpc2Nvbm5lY3RzIGRvbmU6ICAgIik7CiAJCWZvciAoeCA9IDA7IHggPCA3OyB4KyspCiAJCQlzZXFfcHJpbnRmKG0sICJcdCVsZCIsIGhkLT5kaXNjX2RvbmVfY250W3hdKTsKIAkJc2VxX3ByaW50ZihtLApAQCAtMjE2Nyw3ICsyMTY3LDcgQEAKIAl9CiAjZW5kaWYKIAlpZiAoaGQtPnByb2MgJiBQUl9DT05ORUNURUQpIHsKLQkJc2VxX3ByaW50ZihtLCAiXG5jb25uZWN0ZWQ6ICAgICAiKTsKKwkJc2VxX3B1dHMobSwgIlxuY29ubmVjdGVkOiAgICAgIik7CiAJCWlmIChoZC0+Y29ubmVjdGVkKSB7CiAJCQljbWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBoZC0+Y29ubmVjdGVkOwogCQkJc2VxX3ByaW50ZihtLCAiICVkOiVsbHUoJTAyeCkiLApAQCAtMjE3NSw3ICsyMTc1LDcgQEAKIAkJfQogCX0KIAlpZiAoaGQtPnByb2MgJiBQUl9JTlBVVFEpIHsKLQkJc2VxX3ByaW50ZihtLCAiXG5pbnB1dF9ROiAgICAgICAiKTsKKwkJc2VxX3B1dHMobSwgIlxuaW5wdXRfUTogICAgICAgIik7CiAJCWNtZCA9IChzdHJ1Y3Qgc2NzaV9jbW5kICopIGhkLT5pbnB1dF9ROwogCQl3aGlsZSAoY21kKSB7CiAJCQlzZXFfcHJpbnRmKG0sICIgJWQ6JWxsdSglMDJ4KSIsCkBAIC0yMTg0LDcgKzIxODQsNyBAQAogCQl9CiAJfQogCWlmIChoZC0+cHJvYyAmIFBSX0RJU0NRKSB7Ci0JCXNlcV9wcmludGYobSwgIlxuZGlzY29ubmVjdGVkX1E6Iik7CisJCXNlcV9wdXRzKG0sICJcbmRpc2Nvbm5lY3RlZF9ROiIpOwogCQljbWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBoZC0+ZGlzY29ubmVjdGVkX1E7CiAJCXdoaWxlIChjbWQpIHsKIAkJCXNlcV9wcmludGYobSwgIiAlZDolbGx1KCUwMngpIiwKQEAgLTIxOTIsNyArMjE5Miw3IEBACiAJCQljbWQgPSAoc3RydWN0IHNjc2lfY21uZCAqKSBjbWQtPmhvc3Rfc2NyaWJibGU7CiAJCX0KIAl9Ci0Jc2VxX3ByaW50ZihtLCAiXG4iKTsKKwlzZXFfcHV0YyhtLCAnXG4nKTsKIAlzcGluX3VubG9ja19pcnEoJmhkLT5sb2NrKTsKICNlbmRpZgkJCQkvKiBQUk9DX0lOVEVSRkFDRSAqLwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkNzAwMC5jIGIvZHJpdmVycy9zY3NpL3dkNzAwMC5jCmluZGV4IGY5NGQ3MzYuLjBjMGYxN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS93ZDcwMDAuYworKysgYi9kcml2ZXJzL3Njc2kvd2Q3MDAwLmMKQEAgLTEyOTUsOSArMTI5NSw2IEBACiB9CiAKIAotI3VuZGVmIFNQUklOVEYKLSNkZWZpbmUgU1BSSU5URihhcmdzLi4uKSB7IHNlcV9wcmludGYobSwgIyMgYXJncyk7IH0KLQogc3RhdGljIGludCB3ZDcwMDBfc2V0X2luZm8oc3RydWN0IFNjc2lfSG9zdCAqaG9zdCwgY2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoKQogewogCWRwcmludGsoIkJ1ZmZlciA9IDwlLipzPiwgbGVuZ3RoID0gJWRcbiIsIGxlbmd0aCwgYnVmZmVyLCBsZW5ndGgpOwpAQCAtMTMyMCw0MyArMTMxNyw0MyBAQAogI2VuZGlmCiAKIAlzcGluX2xvY2tfaXJxc2F2ZShob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQlTUFJJTlRGKCJIb3N0IHNjc2klZDogV2VzdGVybiBEaWdpdGFsIFdELTcwMDAgKHJldiAlZC4lZClcbiIsIGhvc3QtPmhvc3Rfbm8sIGFkYXB0ZXItPnJldjEsIGFkYXB0ZXItPnJldjIpOwotCVNQUklOVEYoIiAgSU8gYmFzZTogICAgICAweCV4XG4iLCBhZGFwdGVyLT5pb2Jhc2UpOwotCVNQUklOVEYoIiAgSVJROiAgICAgICAgICAlZFxuIiwgYWRhcHRlci0+aXJxKTsKLQlTUFJJTlRGKCIgIERNQSBjaGFubmVsOiAgJWRcbiIsIGFkYXB0ZXItPmRtYSk7Ci0JU1BSSU5URigiICBJbnRlcnJ1cHRzOiAgICVkXG4iLCBhZGFwdGVyLT5pbnRfY291bnRlcik7Ci0JU1BSSU5URigiICBCVVNfT04gdGltZTogICVkIG5hbm9zZWNvbmRzXG4iLCBhZGFwdGVyLT5idXNfb24gKiAxMjUpOwotCVNQUklOVEYoIiAgQlVTX09GRiB0aW1lOiAlZCBuYW5vc2Vjb25kc1xuIiwgYWRhcHRlci0+YnVzX29mZiAqIDEyNSk7CisJc2VxX3ByaW50ZihtLCAiSG9zdCBzY3NpJWQ6IFdlc3Rlcm4gRGlnaXRhbCBXRC03MDAwIChyZXYgJWQuJWQpXG4iLCBob3N0LT5ob3N0X25vLCBhZGFwdGVyLT5yZXYxLCBhZGFwdGVyLT5yZXYyKTsKKwlzZXFfcHJpbnRmKG0sICIgIElPIGJhc2U6ICAgICAgMHgleFxuIiwgYWRhcHRlci0+aW9iYXNlKTsKKwlzZXFfcHJpbnRmKG0sICIgIElSUTogICAgICAgICAgJWRcbiIsIGFkYXB0ZXItPmlycSk7CisJc2VxX3ByaW50ZihtLCAiICBETUEgY2hhbm5lbDogICVkXG4iLCBhZGFwdGVyLT5kbWEpOworCXNlcV9wcmludGYobSwgIiAgSW50ZXJydXB0czogICAlZFxuIiwgYWRhcHRlci0+aW50X2NvdW50ZXIpOworCXNlcV9wcmludGYobSwgIiAgQlVTX09OIHRpbWU6ICAlZCBuYW5vc2Vjb25kc1xuIiwgYWRhcHRlci0+YnVzX29uICogMTI1KTsKKwlzZXFfcHJpbnRmKG0sICIgIEJVU19PRkYgdGltZTogJWQgbmFub3NlY29uZHNcbiIsIGFkYXB0ZXItPmJ1c19vZmYgKiAxMjUpOwogCiAjaWZkZWYgV0Q3MDAwX0RFQlVHCiAJb2dtYnMgPSBhZGFwdGVyLT5tYi5vZ21iOwogCWljbWJzID0gYWRhcHRlci0+bWIuaWNtYjsKIAotCVNQUklOVEYoIlxuQ29udHJvbCBwb3J0IHZhbHVlOiAweCV4XG4iLCBhZGFwdGVyLT5jb250cm9sKTsKLQlTUFJJTlRGKCJJbmNvbWluZyBtYWlsYm94OlxuIik7Ci0JU1BSSU5URigiICBzaXplOiAlZFxuIiwgSUNNQl9DTlQpOwotCVNQUklOVEYoIiAgcXVldWVkIG1lc3NhZ2VzOiAiKTsKKwlzZXFfcHJpbnRmKG0sICJcbkNvbnRyb2wgcG9ydCB2YWx1ZTogMHgleFxuIiwgYWRhcHRlci0+Y29udHJvbCk7CisJc2VxX3B1dHMobSwgIkluY29taW5nIG1haWxib3g6XG4iKTsKKwlzZXFfcHJpbnRmKG0sICIgIHNpemU6ICVkXG4iLCBJQ01CX0NOVCk7CisJc2VxX3B1dHMobSwgIiAgcXVldWVkIG1lc3NhZ2VzOiAiKTsKIAogCWZvciAoaSA9IGNvdW50ID0gMDsgaSA8IElDTUJfQ05UOyBpKyspCiAJCWlmIChpY21ic1tpXS5zdGF0dXMpIHsKIAkJCWNvdW50Kys7Ci0JCQlTUFJJTlRGKCIweCV4ICIsIGkpOworCQkJc2VxX3ByaW50ZihtLCAiMHgleCAiLCBpKTsKIAkJfQogCi0JU1BSSU5URihjb3VudCA/ICJcbiIgOiAibm9uZVxuIik7CisJc2VxX3B1dHMobSwgY291bnQgPyAiXG4iIDogIm5vbmVcbiIpOwogCi0JU1BSSU5URigiT3V0Z29pbmcgbWFpbGJveDpcbiIpOwotCVNQUklOVEYoIiAgc2l6ZTogJWRcbiIsIE9HTUJfQ05UKTsKLQlTUFJJTlRGKCIgIG5leHQgbWVzc2FnZTogMHgleFxuIiwgYWRhcHRlci0+bmV4dF9vZ21iKTsKLQlTUFJJTlRGKCIgIHF1ZXVlZCBtZXNzYWdlczogIik7CisJc2VxX3B1dHMobSwgIk91dGdvaW5nIG1haWxib3g6XG4iKTsKKwlzZXFfcHJpbnRmKG0sICIgIHNpemU6ICVkXG4iLCBPR01CX0NOVCk7CisJc2VxX3ByaW50ZihtLCAiICBuZXh0IG1lc3NhZ2U6IDB4JXhcbiIsIGFkYXB0ZXItPm5leHRfb2dtYik7CisJc2VxX3B1dHMobSwgIiAgcXVldWVkIG1lc3NhZ2VzOiAiKTsKIAogCWZvciAoaSA9IGNvdW50ID0gMDsgaSA8IE9HTUJfQ05UOyBpKyspCiAJCWlmIChvZ21ic1tpXS5zdGF0dXMpIHsKIAkJCWNvdW50Kys7Ci0JCQlTUFJJTlRGKCIweCV4ICIsIGkpOworCQkJc2VxX3ByaW50ZihtLCAiMHgleCAiLCBpKTsKIAkJfQogCi0JU1BSSU5URihjb3VudCA/ICJcbiIgOiAibm9uZVxuIik7CisJc2VxX3B1dHMobSwgY291bnQgPyAiXG4iIDogIm5vbmVcbiIpOwogI2VuZGlmCiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZmkvc2ZpX2NvcmUuYyBiL2RyaXZlcnMvc2ZpL3NmaV9jb3JlLmMKaW5kZXggMWU4MjRmYi4uMjk2ZGI3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZmkvc2ZpX2NvcmUuYworKysgYi9kcml2ZXJzL3NmaS9zZmlfY29yZS5jCkBAIC0xNjEsNyArMTYxLDcgQEAKICAqIENoZWNrIGZvciBjb21tb24gY2FzZSB0aGF0IHdlIGNhbiByZS11c2UgbWFwcGluZyB0byBTWVNULAogICogd2hpY2ggcmVxdWlyZXMgc3lzdF9wYSwgc3lzdF92YSB0byBiZSBpbml0aWFsaXplZC4KICAqLwotc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnNmaV9tYXBfdGFibGUodTY0IHBhKQorc3RhdGljIHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICpzZmlfbWFwX3RhYmxlKHU2NCBwYSkKIHsKIAlzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGg7CiAJdTMyIGxlbmd0aDsKQEAgLTE4OSw3ICsxODksNyBAQAogICogVW5kb2VzIGVmZmVjdCBvZiBzZmlfbWFwX3RhYmxlKCkgYnkgdW5tYXBwaW5nIHRhYmxlCiAgKiBpZiBpdCBkaWQgbm90IGNvbXBsZXRlbHkgZml0IG9uIHNhbWUgcGFnZSBhcyBTWVNULgogICovCi12b2lkIHNmaV91bm1hcF90YWJsZShzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGgpCitzdGF0aWMgdm9pZCBzZmlfdW5tYXBfdGFibGUoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRoKQogewogCWlmICghVEFCTEVfT05fUEFHRShzeXN0X3ZhLCB0aCwgdGgtPmxlbikpCiAJCXNmaV91bm1hcF9tZW1vcnkodGgsIFRBQkxFX09OX1BBR0UodGgsIHRoLCB0aC0+bGVuKSA/CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9LY29uZmlnIGIvZHJpdmVycy9zcGkvS2NvbmZpZwppbmRleCA5OTgyOTk4Li45NWNjZWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3BpL0tjb25maWcKQEAgLTE4NSw2ICsxODUsMTYgQEAKIAloZWxwCiAJICBTUEkgbWFzdGVyIGNvbnRyb2xsZXIgZm9yIERhVmluY2kvREE4eC9PTUFQLUwvQU0xeCBTUEkgbW9kdWxlcy4KIAorY29uZmlnIFNQSV9ETE4yCisgICAgICAgdHJpc3RhdGUgIkRpb2xhbiBETE4tMiBVU0IgU1BJIGFkYXB0ZXIiCisgICAgICAgZGVwZW5kcyBvbiBNRkRfRExOMgorICAgICAgIGhlbHAKKyAgICAgICAgIElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgZm9yIERpb2xhbgorICAgICAgICAgRExOMiwgYSBVU0IgdG8gU1BJIGludGVyZmFjZS4KKworICAgICAgICAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorICAgICAgICAgd2lsbCBiZSBjYWxsZWQgc3BpLWRsbjIuCisKIGNvbmZpZyBTUElfRUZNMzIKIAl0cmlzdGF0ZSAiRUZNMzIgU1BJIGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBPRiAmJiBBUk0gJiYgKEFSQ0hfRUZNMzIgfHwgQ09NUElMRV9URVNUKQpAQCAtMjc5LDcgKzI4OSw3IEBACiAJZGVwZW5kcyBvbiBGU0xfU09DCiAKIGNvbmZpZyBTUElfRlNMX1NQSQotCWJvb2wgIkZyZWVzY2FsZSBTUEkgY29udHJvbGxlciBhbmQgQWVyb2ZsZXggR2Fpc2xlciBHUkxJQiBTUEkgY29udHJvbGxlciIKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIFNQSSBjb250cm9sbGVyIGFuZCBBZXJvZmxleCBHYWlzbGVyIEdSTElCIFNQSSBjb250cm9sbGVyIgogCWRlcGVuZHMgb24gT0YKIAlzZWxlY3QgU1BJX0ZTTF9MSUIKIAlzZWxlY3QgU1BJX0ZTTF9DUE0gaWYgRlNMX1NPQwpAQCAtMjkyLDcgKzMwMiw2IEBACiAKIGNvbmZpZyBTUElfRlNMX0RTUEkKIAl0cmlzdGF0ZSAiRnJlZXNjYWxlIERTUEkgY29udHJvbGxlciIKLQlzZWxlY3QgU1BJX0JJVEJBTkcKIAlzZWxlY3QgUkVHTUFQX01NSU8KIAlkZXBlbmRzIG9uIFNPQ19WRjYxMCB8fCBDT01QSUxFX1RFU1QKIAloZWxwCkBAIC0zMDAsNyArMzA5LDcgQEAKIAkgIG1vZGUuIFZGNjEwIHBsYXRmb3JtIHVzZXMgdGhlIGNvbnRyb2xsZXIuCiAKIGNvbmZpZyBTUElfRlNMX0VTUEkKLQlib29sICJGcmVlc2NhbGUgZVNQSSBjb250cm9sbGVyIgorCXRyaXN0YXRlICJGcmVlc2NhbGUgZVNQSSBjb250cm9sbGVyIgogCWRlcGVuZHMgb24gRlNMX1NPQwogCXNlbGVjdCBTUElfRlNMX0xJQgogCWhlbHAKQEAgLTQ2MCw3ICs0NjksNiBAQAogY29uZmlnIFNQSV9TM0M2NFhYCiAJdHJpc3RhdGUgIlNhbXN1bmcgUzNDNjRYWCBzZXJpZXMgdHlwZSBTUEkiCiAJZGVwZW5kcyBvbiAoUExBVF9TQU1TVU5HIHx8IEFSQ0hfRVhZTk9TKQotCXNlbGVjdCBTM0M2NFhYX1BMMDgwIGlmIEFSQ0hfUzNDNjRYWAogCWhlbHAKIAkgIFNQSSBkcml2ZXIgZm9yIFNhbXN1bmcgUzNDNjRYWCBhbmQgbmV3ZXIgU29Dcy4KIApAQCAtNTAzLDYgKzUxMSwxMyBAQAogCWhlbHAKIAkgIFNQSSBkcml2ZXIgZm9yIENTUiBTaVJGcHJpbWFJSSBTb0NzCiAKK2NvbmZpZyBTUElfU1RfU1NDNAorCXRyaXN0YXRlICJTVE1pY3JvZWxlY3Ryb25pY3MgU1BJIFNTQy1iYXNlZCBkcml2ZXIiCisJZGVwZW5kcyBvbiBBUkNIX1NUSQorCWhlbHAKKwkgIFNUTWljcm9lbGVjdHJvbmljcyBTb0NzIHN1cHBvcnQgZm9yIFNQSS4gSWYgeW91IHNheSB5ZXMgdG8KKwkgIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgZm9yIHRoZSBTU0MgZHJpdmVuIFNQSS4KKwogY29uZmlnIFNQSV9TVU40SQogCXRyaXN0YXRlICJBbGx3aW5uZXIgQTEwIFNvQ3MgU1BJIGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBBUkNIX1NVTlhJIHx8IENPTVBJTEVfVEVTVApAQCAtNTk1LDcgKzYxMCw2IEBACiAJICAxNiBiaXQgd29yZHMgaW4gU1BJIG1vZGUgMCwgYXV0b21hdGljYWxseSBhc3NlcnRpbmcgQ1Mgb24gdHJhbnNmZXIKIAkgIHN0YXJ0IGFuZCBkZWFzc2VydGluZyBvbiBlbmQuCiAKLQogY29uZmlnIFNQSV9OVUM5MDAKIAl0cmlzdGF0ZSAiTnV2b3RvbiBOVUM5MDAgc2VyaWVzIFNQSSIKIAlkZXBlbmRzIG9uIEFSQ0hfVzkwWDkwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvTWFrZWZpbGUgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQppbmRleCA2YjlkMmFjLi5kOGNiZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQpAQCAtMjcsNiArMjcsNyBAQAogb2JqLSQoQ09ORklHX1NQSV9DTFBTNzExWCkJCSs9IHNwaS1jbHBzNzExeC5vCiBvYmotJChDT05GSUdfU1BJX0NPTERGSVJFX1FTUEkpCQkrPSBzcGktY29sZGZpcmUtcXNwaS5vCiBvYmotJChDT05GSUdfU1BJX0RBVklOQ0kpCQkrPSBzcGktZGF2aW5jaS5vCitvYmotJChDT05GSUdfU1BJX0RMTjIpCQkJKz0gc3BpLWRsbjIubwogb2JqLSQoQ09ORklHX1NQSV9ERVNJR05XQVJFKQkJKz0gc3BpLWR3Lm8KIG9iai0kKENPTkZJR19TUElfRFdfTU1JTykJCSs9IHNwaS1kdy1tbWlvLm8KIG9iai0kKENPTkZJR19TUElfRFdfUENJKQkJKz0gc3BpLWR3LW1pZHBjaS5vCkBAIC03Niw2ICs3Nyw3IEBACiBvYmotJChDT05GSUdfU1BJX1NIX01TSU9GKQkJKz0gc3BpLXNoLW1zaW9mLm8KIG9iai0kKENPTkZJR19TUElfU0hfU0NJKQkJKz0gc3BpLXNoLXNjaS5vCiBvYmotJChDT05GSUdfU1BJX1NJUkYpCQkrPSBzcGktc2lyZi5vCitvYmotJChDT05GSUdfU1BJX1NUX1NTQzQpCQkrPSBzcGktc3Qtc3NjNC5vCiBvYmotJChDT05GSUdfU1BJX1NVTjRJKQkJCSs9IHNwaS1zdW40aS5vCiBvYmotJChDT05GSUdfU1BJX1NVTjZJKQkJCSs9IHNwaS1zdW42aS5vCiBvYmotJChDT05GSUdfU1BJX1RFR1JBMTE0KQkJKz0gc3BpLXRlZ3JhMTE0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1hdG1lbC5jIGIvZHJpdmVycy9zcGkvc3BpLWF0bWVsLmMKaW5kZXggMjNkOGY1ZjUuLjlhZjc4NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1hdG1lbC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1hdG1lbC5jCkBAIC0xMDQ2LDYgKzEwNDYsNyBAQAogCXN0cnVjdCBhdG1lbF9zcGlfZGV2aWNlCSphc2Q7CiAJaW50CQkJdGltZW91dDsKIAlpbnQJCQlyZXQ7CisJdW5zaWduZWQgbG9uZwkJZG1hX3RpbWVvdXQ7CiAKIAlhcyA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKIApAQCAtMTEwMywxNSArMTEwNCwxMiBAQAogCiAJCS8qIGludGVycnVwdHMgYXJlIGRpc2FibGVkLCBzbyBmcmVlIHRoZSBsb2NrIGZvciBzY2hlZHVsZSAqLwogCQlhdG1lbF9zcGlfdW5sb2NrKGFzKTsKLQkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhcy0+eGZlcl9jb21wbGV0aW9uLAotCQkJCQkJCVNQSV9ETUFfVElNRU9VVCk7CisJCWRtYV90aW1lb3V0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhcy0+eGZlcl9jb21wbGV0aW9uLAorCQkJCQkJCSAgU1BJX0RNQV9USU1FT1VUKTsKIAkJYXRtZWxfc3BpX2xvY2soYXMpOwotCQlpZiAoV0FSTl9PTihyZXQgPT0gMCkpIHsKLQkJCWRldl9lcnIoJnNwaS0+ZGV2LAotCQkJCSJzcGkgdHJhc2ZlciB0aW1lb3V0LCBlcnIgJWRcbiIsIHJldCk7CisJCWlmIChXQVJOX09OKGRtYV90aW1lb3V0ID09IDApKSB7CisJCQlkZXZfZXJyKCZzcGktPmRldiwgInNwaSB0cmFuc2ZlciB0aW1lb3V0XG4iKTsKIAkJCWFzLT5kb25lX3N0YXR1cyA9IC1FSU87Ci0JCX0gZWxzZSB7Ci0JCQlyZXQgPSAwOwogCQl9CiAKIAkJaWYgKGFzLT5kb25lX3N0YXR1cykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1hdTE1NTAuYyBiL2RyaXZlcnMvc3BpL3NwaS1hdTE1NTAuYwppbmRleCAzMjZmNDc5Li5mNDVlMDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktYXUxNTUwLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWF1MTU1MC5jCkBAIC0xNSwxMCArMTUsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1iY20yODM1LmMgYi9kcml2ZXJzL3NwaS9zcGktYmNtMjgzNS5jCmluZGV4IDk4YWFiNDUuLjQxOWE3ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1iY20yODM1LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWJjbTI4MzUuYwpAQCAtMTcsMTAgKzE3LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktYmNtNjN4eC5jIGIvZHJpdmVycy9zcGkvc3BpLWJjbTYzeHguYwppbmRleCBjMjA1MzA5Li5lNzNlMmIwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWJjbTYzeHguYworKysgYi9kcml2ZXJzL3NwaS9zcGktYmNtNjN4eC5jCkBAIC0xMywxMCArMTMsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1iaXRiYW5nLmMgYi9kcml2ZXJzL3NwaS9zcGktYml0YmFuZy5jCmluZGV4IGRjN2QyYzIuLjVlZjY2MzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1iaXRiYW5nLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWJpdGJhbmcuYwpAQCAtMTAsMTAgKzEwLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jIGIvZHJpdmVycy9zcGkvc3BpLWJ1dHRlcmZseS5jCmluZGV4IGVlNGY5MWMuLjlhOTU4NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1idXR0ZXJmbHkuYworKysgYi9kcml2ZXJzL3NwaS9zcGktYnV0dGVyZmx5LmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWNvbGRmaXJlLXFzcGkuYyBiL2RyaXZlcnMvc3BpL3NwaS1jb2xkZmlyZS1xc3BpLmMKaW5kZXggNDFiNWRjNC4uNjg4OTU2ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1jb2xkZmlyZS1xc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWNvbGRmaXJlLXFzcGkuYwpAQCAtMTIsMTEgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICoKICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1kYXZpbmNpLmMgYi9kcml2ZXJzL3NwaS9zcGktZGF2aW5jaS5jCmluZGV4IGIzNzA3YmEuLjVlOTkxMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1kYXZpbmNpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWRhdmluY2kuYwpAQCAtMTEsMTAgKzExLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1kbG4yLmMgYi9kcml2ZXJzL3NwaS9zcGktZGxuMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiN2Q5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3NwaS9zcGktZGxuMi5jCkBAIC0wLDAgKzEsODgxIEBACisvKgorICogRHJpdmVyIGZvciB0aGUgRGlvbGFuIERMTi0yIFVTQi1TUEkgYWRhcHRlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvZGxuMi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjZGVmaW5lIERMTjJfU1BJX01PRFVMRV9JRAkJMHgwMgorI2RlZmluZSBETE4yX1NQSV9DTUQoY21kKQkJRExOMl9DTUQoY21kLCBETE4yX1NQSV9NT0RVTEVfSUQpCisKKy8qIFNQSSBjb21tYW5kcyAqLworI2RlZmluZSBETE4yX1NQSV9HRVRfUE9SVF9DT1VOVAkJCURMTjJfU1BJX0NNRCgweDAwKQorI2RlZmluZSBETE4yX1NQSV9FTkFCTEUJCQkJRExOMl9TUElfQ01EKDB4MTEpCisjZGVmaW5lIERMTjJfU1BJX0RJU0FCTEUJCQlETE4yX1NQSV9DTUQoMHgxMikKKyNkZWZpbmUgRExOMl9TUElfSVNfRU5BQkxFRAkJCURMTjJfU1BJX0NNRCgweDEzKQorI2RlZmluZSBETE4yX1NQSV9TRVRfTU9ERQkJCURMTjJfU1BJX0NNRCgweDE0KQorI2RlZmluZSBETE4yX1NQSV9HRVRfTU9ERQkJCURMTjJfU1BJX0NNRCgweDE1KQorI2RlZmluZSBETE4yX1NQSV9TRVRfRlJBTUVfU0laRQkJCURMTjJfU1BJX0NNRCgweDE2KQorI2RlZmluZSBETE4yX1NQSV9HRVRfRlJBTUVfU0laRQkJCURMTjJfU1BJX0NNRCgweDE3KQorI2RlZmluZSBETE4yX1NQSV9TRVRfRlJFUVVFTkNZCQkJRExOMl9TUElfQ01EKDB4MTgpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9GUkVRVUVOQ1kJCQlETE4yX1NQSV9DTUQoMHgxOSkKKyNkZWZpbmUgRExOMl9TUElfUkVBRF9XUklURQkJCURMTjJfU1BJX0NNRCgweDFBKQorI2RlZmluZSBETE4yX1NQSV9SRUFECQkJCURMTjJfU1BJX0NNRCgweDFCKQorI2RlZmluZSBETE4yX1NQSV9XUklURQkJCQlETE4yX1NQSV9DTUQoMHgxQykKKyNkZWZpbmUgRExOMl9TUElfU0VUX0RFTEFZX0JFVFdFRU5fU1MJCURMTjJfU1BJX0NNRCgweDIwKQorI2RlZmluZSBETE4yX1NQSV9HRVRfREVMQVlfQkVUV0VFTl9TUwkJRExOMl9TUElfQ01EKDB4MjEpCisjZGVmaW5lIERMTjJfU1BJX1NFVF9ERUxBWV9BRlRFUl9TUwkJRExOMl9TUElfQ01EKDB4MjIpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9ERUxBWV9BRlRFUl9TUwkJRExOMl9TUElfQ01EKDB4MjMpCisjZGVmaW5lIERMTjJfU1BJX1NFVF9ERUxBWV9CRVRXRUVOX0ZSQU1FUwlETE4yX1NQSV9DTUQoMHgyNCkKKyNkZWZpbmUgRExOMl9TUElfR0VUX0RFTEFZX0JFVFdFRU5fRlJBTUVTCURMTjJfU1BJX0NNRCgweDI1KQorI2RlZmluZSBETE4yX1NQSV9TRVRfU1MJCQkJRExOMl9TUElfQ01EKDB4MjYpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9TUwkJCQlETE4yX1NQSV9DTUQoMHgyNykKKyNkZWZpbmUgRExOMl9TUElfUkVMRUFTRV9TUwkJCURMTjJfU1BJX0NNRCgweDI4KQorI2RlZmluZSBETE4yX1NQSV9TU19WQVJJQUJMRV9FTkFCTEUJCURMTjJfU1BJX0NNRCgweDJCKQorI2RlZmluZSBETE4yX1NQSV9TU19WQVJJQUJMRV9ESVNBQkxFCQlETE4yX1NQSV9DTUQoMHgyQykKKyNkZWZpbmUgRExOMl9TUElfU1NfVkFSSUFCTEVfSVNfRU5BQkxFRAkJRExOMl9TUElfQ01EKDB4MkQpCisjZGVmaW5lIERMTjJfU1BJX1NTX0FBVF9FTkFCTEUJCQlETE4yX1NQSV9DTUQoMHgyRSkKKyNkZWZpbmUgRExOMl9TUElfU1NfQUFUX0RJU0FCTEUJCQlETE4yX1NQSV9DTUQoMHgyRikKKyNkZWZpbmUgRExOMl9TUElfU1NfQUFUX0lTX0VOQUJMRUQJCURMTjJfU1BJX0NNRCgweDMwKQorI2RlZmluZSBETE4yX1NQSV9TU19CRVRXRUVOX0ZSQU1FU19FTkFCTEUJRExOMl9TUElfQ01EKDB4MzEpCisjZGVmaW5lIERMTjJfU1BJX1NTX0JFVFdFRU5fRlJBTUVTX0RJU0FCTEUJRExOMl9TUElfQ01EKDB4MzIpCisjZGVmaW5lIERMTjJfU1BJX1NTX0JFVFdFRU5fRlJBTUVTX0lTX0VOQUJMRUQJRExOMl9TUElfQ01EKDB4MzMpCisjZGVmaW5lIERMTjJfU1BJX1NFVF9DUEhBCQkJRExOMl9TUElfQ01EKDB4MzQpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9DUEhBCQkJRExOMl9TUElfQ01EKDB4MzUpCisjZGVmaW5lIERMTjJfU1BJX1NFVF9DUE9MCQkJRExOMl9TUElfQ01EKDB4MzYpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9DUE9MCQkJRExOMl9TUElfQ01EKDB4MzcpCisjZGVmaW5lIERMTjJfU1BJX1NTX01VTFRJX0VOQUJMRQkJRExOMl9TUElfQ01EKDB4MzgpCisjZGVmaW5lIERMTjJfU1BJX1NTX01VTFRJX0RJU0FCTEUJCURMTjJfU1BJX0NNRCgweDM5KQorI2RlZmluZSBETE4yX1NQSV9TU19NVUxUSV9JU19FTkFCTEVECQlETE4yX1NQSV9DTUQoMHgzQSkKKyNkZWZpbmUgRExOMl9TUElfR0VUX1NVUFBPUlRFRF9NT0RFUwkJRExOMl9TUElfQ01EKDB4NDApCisjZGVmaW5lIERMTjJfU1BJX0dFVF9TVVBQT1JURURfQ1BIQV9WQUxVRVMJRExOMl9TUElfQ01EKDB4NDEpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9TVVBQT1JURURfQ1BPTF9WQUxVRVMJRExOMl9TUElfQ01EKDB4NDIpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9TVVBQT1JURURfRlJBTUVfU0laRVMJRExOMl9TUElfQ01EKDB4NDMpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9TU19DT1VOVAkJCURMTjJfU1BJX0NNRCgweDQ0KQorI2RlZmluZSBETE4yX1NQSV9HRVRfTUlOX0ZSRVFVRU5DWQkJRExOMl9TUElfQ01EKDB4NDUpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9NQVhfRlJFUVVFTkNZCQlETE4yX1NQSV9DTUQoMHg0NikKKyNkZWZpbmUgRExOMl9TUElfR0VUX01JTl9ERUxBWV9CRVRXRUVOX1NTCURMTjJfU1BJX0NNRCgweDQ3KQorI2RlZmluZSBETE4yX1NQSV9HRVRfTUFYX0RFTEFZX0JFVFdFRU5fU1MJRExOMl9TUElfQ01EKDB4NDgpCisjZGVmaW5lIERMTjJfU1BJX0dFVF9NSU5fREVMQVlfQUZURVJfU1MJCURMTjJfU1BJX0NNRCgweDQ5KQorI2RlZmluZSBETE4yX1NQSV9HRVRfTUFYX0RFTEFZX0FGVEVSX1NTCQlETE4yX1NQSV9DTUQoMHg0QSkKKyNkZWZpbmUgRExOMl9TUElfR0VUX01JTl9ERUxBWV9CRVRXRUVOX0ZSQU1FUwlETE4yX1NQSV9DTUQoMHg0QikKKyNkZWZpbmUgRExOMl9TUElfR0VUX01BWF9ERUxBWV9CRVRXRUVOX0ZSQU1FUwlETE4yX1NQSV9DTUQoMHg0QykKKworI2RlZmluZSBETE4yX1NQSV9NQVhfWEZFUl9TSVpFCQkJMjU2CisjZGVmaW5lIERMTjJfU1BJX0JVRl9TSVpFCQkJKERMTjJfU1BJX01BWF9YRkVSX1NJWkUgKyAxNikKKyNkZWZpbmUgRExOMl9TUElfQVRUUl9MRUFWRV9TU19MT1cJCUJJVCgwKQorI2RlZmluZSBETE4yX1RSQU5TRkVSU19XQUlUX0NPTVBMRVRFCQkxCisjZGVmaW5lIERMTjJfVFJBTlNGRVJTX0NBTkNFTAkJCTAKKyNkZWZpbmUgRExOMl9SUE1fQVVUT1NVU1BFTkRfVElNRU9VVAkJMjAwMAorCitzdHJ1Y3QgZGxuMl9zcGkgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKKwl1OCBwb3J0OworCisJLyoKKwkgKiBUaGlzIGJ1ZmZlciB3aWxsIGJlIHVzZWQgbWFpbmx5IGZvciByZWFkL3dyaXRlIG9wZXJhdGlvbnMuIFNpbmNlCisJICogdGhleSdyZSBxdWl0ZSBsYXJnZSwgd2UgY2Fubm90IHVzZSB0aGUgc3RhY2suIFByb3RlY3Rpb24gaXMgbm90CisJICogbmVlZGVkIGJlY2F1c2UgYWxsIFNQSSBjb21tdW5pY2F0aW9uIGlzIHNlcmlhbGl6ZWQgYnkgdGhlIFNQSSBjb3JlLgorCSAqLworCXZvaWQgKmJ1ZjsKKworCXU4IGJwdzsKKwl1MzIgc3BlZWQ7CisJdTE2IG1vZGU7CisJdTggY3M7Cit9OworCisvKgorICogRW5hYmxlL0Rpc2FibGUgU1BJIG1vZHVsZS4gVGhlIGRpc2FibGUgY29tbWFuZCB3aWxsIHdhaXQgZm9yIHRyYW5zZmVycyB0bworICogY29tcGxldGUgZmlyc3QuCisgKi8KK3N0YXRpYyBpbnQgZGxuMl9zcGlfZW5hYmxlKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgYm9vbCBlbmFibGUpCit7CisJdTE2IGNtZDsKKwlzdHJ1Y3QgeworCQl1OCBwb3J0OworCQl1OCB3YWl0X2Zvcl9jb21wbGV0aW9uOworCX0gdHg7CisJdW5zaWduZWQgbGVuID0gc2l6ZW9mKHR4KTsKKworCXR4LnBvcnQgPSBkbG4yLT5wb3J0OworCisJaWYgKGVuYWJsZSkgeworCQljbWQgPSBETE4yX1NQSV9FTkFCTEU7CisJCWxlbiAtPSBzaXplb2YodHgud2FpdF9mb3JfY29tcGxldGlvbik7CisJfSBlbHNlIHsKKwkJdHgud2FpdF9mb3JfY29tcGxldGlvbiA9IERMTjJfVFJBTlNGRVJTX1dBSVRfQ09NUExFVEU7CisJCWNtZCA9IERMTjJfU1BJX0RJU0FCTEU7CisJfQorCisJcmV0dXJuIGRsbjJfdHJhbnNmZXJfdHgoZGxuMi0+cGRldiwgY21kLCAmdHgsIGxlbik7Cit9CisKKy8qCisgKiBTZWxlY3QvdW5zZWxlY3QgbXVsdGlwbGUgQ1MgbGluZXMuIFRoZSBzZWxlY3RlZCBsaW5lcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKyAqIHRvZ2dsZWQgTE9XL0hJR0ggYnkgdGhlIGJvYXJkIGZpcm13YXJlIGR1cmluZyB0cmFuc2ZlcnMsIHByb3ZpZGVkIHRoZXkncmUKKyAqIGVuYWJsZWQgZmlyc3QuCisgKgorICogRXg6IGNzX21hc2sgPSAweDAzIC0+IENTMCAmIENTMSB3aWxsIGJlIHNlbGVjdGVkIGFuZCB0aGUgbmV4dCBXUi9SRCBvcGVyYXRpb24KKyAqICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHRvZ2dsZSB0aGUgbGluZXMgTE9XL0hJR0ggYXV0b21hdGljYWxseS4KKyAqLworc3RhdGljIGludCBkbG4yX3NwaV9jc19zZXQoc3RydWN0IGRsbjJfc3BpICpkbG4yLCB1OCBjc19tYXNrKQoreworCXN0cnVjdCB7CisJCXU4IHBvcnQ7CisJCXU4IGNzOworCX0gdHg7CisKKwl0eC5wb3J0ID0gZGxuMi0+cG9ydDsKKworCS8qCisJICogQWNjb3JkaW5nIHRvIERpb2xhbiBkb2NzLCAiYSBzbGF2ZSBkZXZpY2UgY2FuIGJlIHNlbGVjdGVkIGJ5IGNoYW5naW5nCisJICogdGhlIGNvcnJlc3BvbmRpbmcgYml0IHZhbHVlIHRvIDAiLiBUaGUgcmVzdCBtdXN0IGJlIHNldCB0byAxLiBIZW5jZQorCSAqIHRoZSBiaXR3aXNlIE5PVCBpbiBmcm9udC4KKwkgKi8KKwl0eC5jcyA9IH5jc19tYXNrOworCisJcmV0dXJuIGRsbjJfdHJhbnNmZXJfdHgoZGxuMi0+cGRldiwgRExOMl9TUElfU0VUX1NTLCAmdHgsIHNpemVvZih0eCkpOworfQorCisvKgorICogU2VsZWN0IG9uZSBDUyBsaW5lLiBUaGUgb3RoZXIgbGluZXMgd2lsbCBiZSB1bi1zZWxlY3RlZC4KKyAqLworc3RhdGljIGludCBkbG4yX3NwaV9jc19zZXRfb25lKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTggY3MpCit7CisJcmV0dXJuIGRsbjJfc3BpX2NzX3NldChkbG4yLCBCSVQoY3MpKTsKK30KKworLyoKKyAqIEVuYWJsZS9kaXNhYmxlIENTIGxpbmVzIGZvciB1c2FnZS4gVGhlIG1vZHVsZSBoYXMgdG8gYmUgZGlzYWJsZWQgZmlyc3QuCisgKi8KK3N0YXRpYyBpbnQgZGxuMl9zcGlfY3NfZW5hYmxlKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTggY3NfbWFzaywgYm9vbCBlbmFibGUpCit7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwkJdTggY3M7CisJfSB0eDsKKwl1MTYgY21kOworCisJdHgucG9ydCA9IGRsbjItPnBvcnQ7CisJdHguY3MgPSBjc19tYXNrOworCWNtZCA9IGVuYWJsZSA/IERMTjJfU1BJX1NTX01VTFRJX0VOQUJMRSA6IERMTjJfU1BJX1NTX01VTFRJX0RJU0FCTEU7CisKKwlyZXR1cm4gZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBjbWQsICZ0eCwgc2l6ZW9mKHR4KSk7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9zcGlfY3NfZW5hYmxlX2FsbChzdHJ1Y3QgZGxuMl9zcGkgKmRsbjIsIGJvb2wgZW5hYmxlKQoreworCXU4IGNzX21hc2sgPSBHRU5NQVNLKGRsbjItPm1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgLSAxLCAwKTsKKworCXJldHVybiBkbG4yX3NwaV9jc19lbmFibGUoZGxuMiwgY3NfbWFzaywgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBkbG4yX3NwaV9nZXRfY3NfbnVtKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTE2ICpjc19udW0pCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgeworCQl1OCBwb3J0OworCX0gdHg7CisJc3RydWN0IHsKKwkJX19sZTE2IGNzX2NvdW50OworCX0gcng7CisJdW5zaWduZWQgcnhfbGVuID0gc2l6ZW9mKHJ4KTsKKworCXR4LnBvcnQgPSBkbG4yLT5wb3J0OworCXJldCA9IGRsbjJfdHJhbnNmZXIoZGxuMi0+cGRldiwgRExOMl9TUElfR0VUX1NTX0NPVU5ULCAmdHgsIHNpemVvZih0eCksCisJCQkgICAgJnJ4LCAmcnhfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocnhfbGVuIDwgc2l6ZW9mKHJ4KSkKKwkJcmV0dXJuIC1FUFJPVE87CisKKwkqY3NfbnVtID0gbGUxNl90b19jcHUocnguY3NfY291bnQpOworCisJZGV2X2RiZygmZGxuMi0+cGRldi0+ZGV2LCAiY3NfbnVtID0gJWRcbiIsICpjc19udW0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9zcGlfZ2V0X3NwZWVkKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTE2IGNtZCwgdTMyICpmcmVxKQoreworCWludCByZXQ7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwl9IHR4OworCXN0cnVjdCB7CisJCV9fbGUzMiBzcGVlZDsKKwl9IHJ4OworCXVuc2lnbmVkIHJ4X2xlbiA9IHNpemVvZihyeCk7CisKKwl0eC5wb3J0ID0gZGxuMi0+cG9ydDsKKworCXJldCA9IGRsbjJfdHJhbnNmZXIoZGxuMi0+cGRldiwgY21kLCAmdHgsIHNpemVvZih0eCksICZyeCwgJnJ4X2xlbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHJ4X2xlbiA8IHNpemVvZihyeCkpCisJCXJldHVybiAtRVBST1RPOworCisJKmZyZXEgPSBsZTMyX3RvX2NwdShyeC5zcGVlZCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEdldCBidXMgbWluL21heCBmcmVxdWVuY2llcy4KKyAqLworc3RhdGljIGludCBkbG4yX3NwaV9nZXRfc3BlZWRfcmFuZ2Uoc3RydWN0IGRsbjJfc3BpICpkbG4yLCB1MzIgKmZtaW4sIHUzMiAqZm1heCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZGxuMl9zcGlfZ2V0X3NwZWVkKGRsbjIsIERMTjJfU1BJX0dFVF9NSU5fRlJFUVVFTkNZLCBmbWluKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGRsbjJfc3BpX2dldF9zcGVlZChkbG4yLCBETE4yX1NQSV9HRVRfTUFYX0ZSRVFVRU5DWSwgZm1heCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlkZXZfZGJnKCZkbG4yLT5wZGV2LT5kZXYsICJmcmVxX21pbiA9ICVkLCBmcmVxX21heCA9ICVkXG4iLAorCQkqZm1pbiwgKmZtYXgpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgdGhlIGJ1cyBzcGVlZC4gVGhlIG1vZHVsZSB3aWxsIGF1dG9tYXRpY2FsbHkgcm91bmQgZG93biB0byB0aGUgY2xvc2VzdAorICogYXZhaWxhYmxlIGZyZXF1ZW5jeSBhbmQgcmV0dXJucyBpdC4gVGhlIG1vZHVsZSBoYXMgdG8gYmUgZGlzYWJsZWQgZmlyc3QuCisgKi8KK3N0YXRpYyBpbnQgZGxuMl9zcGlfc2V0X3NwZWVkKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTMyIHNwZWVkKQoreworCWludCByZXQ7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwkJX19sZTMyIHNwZWVkOworCX0gX19wYWNrZWQgdHg7CisJc3RydWN0IHsKKwkJX19sZTMyIHNwZWVkOworCX0gcng7CisJaW50IHJ4X2xlbiA9IHNpemVvZihyeCk7CisKKwl0eC5wb3J0ID0gZGxuMi0+cG9ydDsKKwl0eC5zcGVlZCA9IGNwdV90b19sZTMyKHNwZWVkKTsKKworCXJldCA9IGRsbjJfdHJhbnNmZXIoZGxuMi0+cGRldiwgRExOMl9TUElfU0VUX0ZSRVFVRU5DWSwgJnR4LCBzaXplb2YodHgpLAorCQkJICAgICZyeCwgJnJ4X2xlbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHJ4X2xlbiA8IHNpemVvZihyeCkpCisJCXJldHVybiAtRVBST1RPOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDaGFuZ2UgQ1BPTCAmIENQSEEuIFRoZSBtb2R1bGUgaGFzIHRvIGJlIGRpc2FibGVkIGZpcnN0LgorICovCitzdGF0aWMgaW50IGRsbjJfc3BpX3NldF9tb2RlKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTggbW9kZSkKK3sKKwlzdHJ1Y3QgeworCQl1OCBwb3J0OworCQl1OCBtb2RlOworCX0gdHg7CisKKwl0eC5wb3J0ID0gZGxuMi0+cG9ydDsKKwl0eC5tb2RlID0gbW9kZTsKKworCXJldHVybiBkbG4yX3RyYW5zZmVyX3R4KGRsbjItPnBkZXYsIERMTjJfU1BJX1NFVF9NT0RFLCAmdHgsIHNpemVvZih0eCkpOworfQorCisvKgorICogQ2hhbmdlIGZyYW1lIHNpemUuIFRoZSBtb2R1bGUgaGFzIHRvIGJlIGRpc2FibGVkIGZpcnN0LgorICovCitzdGF0aWMgaW50IGRsbjJfc3BpX3NldF9icHcoc3RydWN0IGRsbjJfc3BpICpkbG4yLCB1OCBicHcpCit7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwkJdTggYnB3OworCX0gdHg7CisKKwl0eC5wb3J0ID0gZGxuMi0+cG9ydDsKKwl0eC5icHcgPSBicHc7CisKKwlyZXR1cm4gZGxuMl90cmFuc2Zlcl90eChkbG4yLT5wZGV2LCBETE4yX1NQSV9TRVRfRlJBTUVfU0laRSwKKwkJCQkmdHgsIHNpemVvZih0eCkpOworfQorCitzdGF0aWMgaW50IGRsbjJfc3BpX2dldF9zdXBwb3J0ZWRfZnJhbWVfc2l6ZXMoc3RydWN0IGRsbjJfc3BpICpkbG4yLAorCQkJCQkgICAgICB1MzIgKmJwd19tYXNrKQoreworCWludCByZXQ7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwl9IHR4OworCXN0cnVjdCB7CisJCXU4IGNvdW50OworCQl1OCBmcmFtZV9zaXplc1szNl07CisJfSAqcnggPSBkbG4yLT5idWY7CisJdW5zaWduZWQgcnhfbGVuID0gc2l6ZW9mKCpyeCk7CisJaW50IGk7CisKKwl0eC5wb3J0ID0gZGxuMi0+cG9ydDsKKworCXJldCA9IGRsbjJfdHJhbnNmZXIoZGxuMi0+cGRldiwgRExOMl9TUElfR0VUX1NVUFBPUlRFRF9GUkFNRV9TSVpFUywKKwkJCSAgICAmdHgsIHNpemVvZih0eCksIHJ4LCAmcnhfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocnhfbGVuIDwgc2l6ZW9mKCpyeCkpCisJCXJldHVybiAtRVBST1RPOworCWlmIChyeC0+Y291bnQgPiBBUlJBWV9TSVpFKHJ4LT5mcmFtZV9zaXplcykpCisJCXJldHVybiAtRVBST1RPOworCisJKmJwd19tYXNrID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcngtPmNvdW50OyBpKyspCisJCSpicHdfbWFzayB8PSBCSVQocngtPmZyYW1lX3NpemVzW2ldIC0gMSk7CisKKwlkZXZfZGJnKCZkbG4yLT5wZGV2LT5kZXYsICJicHdfbWFzayA9IDB4JVhcbiIsICpicHdfbWFzayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvcHkgdGhlIGRhdGEgdG8gRExOMiBidWZmZXIgYW5kIGNoYW5nZSB0aGUgYnl0ZSBvcmRlciB0byBMRSwgcmVxdWVzdGVkIGJ5CisgKiBETE4yIG1vZHVsZS4gU1BJIGNvcmUgbWFrZXMgc3VyZSB0aGF0IHRoZSBkYXRhIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mIHdvcmQKKyAqIHNpemUuCisgKi8KK3N0YXRpYyBpbnQgZGxuMl9zcGlfY29weV90b19idWYodTggKmRsbjJfYnVmLCBjb25zdCB1OCAqc3JjLCB1MTYgbGVuLCB1OCBicHcpCit7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisJbWVtY3B5KGRsbjJfYnVmLCBzcmMsIGxlbik7CisjZWxzZQorCWlmIChicHcgPD0gOCkgeworCQltZW1jcHkoZGxuMl9idWYsIHNyYywgbGVuKTsKKwl9IGVsc2UgaWYgKGJwdyA8PSAxNikgeworCQlfX2xlMTYgKmQgPSAoX19sZTE2ICopZGxuMl9idWY7CisJCXUxNiAqcyA9ICh1MTYgKilzcmM7CisKKwkJbGVuID0gbGVuIC8gMjsKKwkJd2hpbGUgKGxlbi0tKQorCQkJKmQrKyA9IGNwdV90b19sZTE2cChzKyspOworCX0gZWxzZSB7CisJCV9fbGUzMiAqZCA9IChfX2xlMzIgKilkbG4yX2J1ZjsKKwkJdTMyICpzID0gKHUzMiAqKXNyYzsKKworCQlsZW4gPSBsZW4gLyA0OworCQl3aGlsZSAobGVuLS0pCisJCQkqZCsrID0gY3B1X3RvX2xlMzJwKHMrKyk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvcHkgdGhlIGRhdGEgZnJvbSBETE4yIGJ1ZmZlciBhbmQgY29udmVydCB0byBDUFUgYnl0ZSBvcmRlciBzaW5jZSB0aGUgRExOMgorICogYnVmZmVyIGlzIExFIG9yZGVyZWQuIFNQSSBjb3JlIG1ha2VzIHN1cmUgdGhhdCB0aGUgZGF0YSBsZW5ndGggaXMgYSBtdWx0aXBsZQorICogb2Ygd29yZCBzaXplLiBUaGUgUlggZGxuMl9idWYgaXMgMiBieXRlIGFsaWduZWQgc28sIGZvciBCRSwgd2UgaGF2ZSB0byBtYWtlCisgKiBzdXJlIHdlIGF2b2lkIHVuYWxpZ25lZCBhY2Nlc3NlcyBmb3IgMzIgYml0IGNhc2UuCisgKi8KK3N0YXRpYyBpbnQgZGxuMl9zcGlfY29weV9mcm9tX2J1Zih1OCAqZGVzdCwgY29uc3QgdTggKmRsbjJfYnVmLCB1MTYgbGVuLCB1OCBicHcpCit7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisJbWVtY3B5KGRlc3QsIGRsbjJfYnVmLCBsZW4pOworI2Vsc2UKKwlpZiAoYnB3IDw9IDgpIHsKKwkJbWVtY3B5KGRlc3QsIGRsbjJfYnVmLCBsZW4pOworCX0gZWxzZSBpZiAoYnB3IDw9IDE2KSB7CisJCXUxNiAqZCA9ICh1MTYgKilkZXN0OworCQlfX2xlMTYgKnMgPSAoX19sZTE2ICopZGxuMl9idWY7CisKKwkJbGVuID0gbGVuIC8gMjsKKwkJd2hpbGUgKGxlbi0tKQorCQkJKmQrKyA9IGxlMTZfdG9fY3B1cChzKyspOworCX0gZWxzZSB7CisJCXUzMiAqZCA9ICh1MzIgKilkZXN0OworCQlfX2xlMzIgKnMgPSAoX19sZTMyICopZGxuMl9idWY7CisKKwkJbGVuID0gbGVuIC8gNDsKKwkJd2hpbGUgKGxlbi0tKQorCQkJKmQrKyA9IGdldF91bmFsaWduZWRfbGUzMihzKyspOworCX0KKyNlbmRpZgorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBQZXJmb3JtIG9uZSB3cml0ZSBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgZGxuMl9zcGlfd3JpdGVfb25lKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgY29uc3QgdTggKmRhdGEsCisJCQkgICAgICB1MTYgZGF0YV9sZW4sIHU4IGF0dHIpCit7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwkJX19sZTE2IHNpemU7CisJCXU4IGF0dHI7CisJCXU4IGJ1ZltETE4yX1NQSV9NQVhfWEZFUl9TSVpFXTsKKwl9IF9fcGFja2VkICp0eCA9IGRsbjItPmJ1ZjsKKwl1bnNpZ25lZCB0eF9sZW47CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKCp0eCkgPiBETE4yX1NQSV9CVUZfU0laRSk7CisKKwlpZiAoZGF0YV9sZW4gPiBETE4yX1NQSV9NQVhfWEZFUl9TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXR4LT5wb3J0ID0gZGxuMi0+cG9ydDsKKwl0eC0+c2l6ZSA9IGNwdV90b19sZTE2KGRhdGFfbGVuKTsKKwl0eC0+YXR0ciA9IGF0dHI7CisKKwlkbG4yX3NwaV9jb3B5X3RvX2J1Zih0eC0+YnVmLCBkYXRhLCBkYXRhX2xlbiwgZGxuMi0+YnB3KTsKKworCXR4X2xlbiA9IHNpemVvZigqdHgpICsgZGF0YV9sZW4gLSBETE4yX1NQSV9NQVhfWEZFUl9TSVpFOworCXJldHVybiBkbG4yX3RyYW5zZmVyX3R4KGRsbjItPnBkZXYsIERMTjJfU1BJX1dSSVRFLCB0eCwgdHhfbGVuKTsKK30KKworLyoKKyAqIFBlcmZvcm0gb25lIHJlYWQgb3BlcmF0aW9uLgorICovCitzdGF0aWMgaW50IGRsbjJfc3BpX3JlYWRfb25lKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTggKmRhdGEsCisJCQkgICAgIHUxNiBkYXRhX2xlbiwgdTggYXR0cikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB7CisJCXU4IHBvcnQ7CisJCV9fbGUxNiBzaXplOworCQl1OCBhdHRyOworCX0gX19wYWNrZWQgdHg7CisJc3RydWN0IHsKKwkJX19sZTE2IHNpemU7CisJCXU4IGJ1ZltETE4yX1NQSV9NQVhfWEZFUl9TSVpFXTsKKwl9IF9fcGFja2VkICpyeCA9IGRsbjItPmJ1ZjsKKwl1bnNpZ25lZCByeF9sZW4gPSBzaXplb2YoKnJ4KTsKKworCUJVSUxEX0JVR19PTihzaXplb2YoKnJ4KSA+IERMTjJfU1BJX0JVRl9TSVpFKTsKKworCWlmIChkYXRhX2xlbiA+IERMTjJfU1BJX01BWF9YRkVSX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJdHgucG9ydCA9IGRsbjItPnBvcnQ7CisJdHguc2l6ZSA9IGNwdV90b19sZTE2KGRhdGFfbGVuKTsKKwl0eC5hdHRyID0gYXR0cjsKKworCXJldCA9IGRsbjJfdHJhbnNmZXIoZGxuMi0+cGRldiwgRExOMl9TUElfUkVBRCwgJnR4LCBzaXplb2YodHgpLAorCQkJICAgIHJ4LCAmcnhfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocnhfbGVuIDwgc2l6ZW9mKHJ4LT5zaXplKSArIGRhdGFfbGVuKQorCQlyZXR1cm4gLUVQUk9UTzsKKwlpZiAobGUxNl90b19jcHUocngtPnNpemUpICE9IGRhdGFfbGVuKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCWRsbjJfc3BpX2NvcHlfZnJvbV9idWYoZGF0YSwgcngtPmJ1ZiwgZGF0YV9sZW4sIGRsbjItPmJwdyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFBlcmZvcm0gb25lIHdyaXRlICYgcmVhZCBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgZGxuMl9zcGlfcmVhZF93cml0ZV9vbmUoc3RydWN0IGRsbjJfc3BpICpkbG4yLCBjb25zdCB1OCAqdHhfZGF0YSwKKwkJCQkgICB1OCAqcnhfZGF0YSwgdTE2IGRhdGFfbGVuLCB1OCBhdHRyKQoreworCWludCByZXQ7CisJc3RydWN0IHsKKwkJdTggcG9ydDsKKwkJX19sZTE2IHNpemU7CisJCXU4IGF0dHI7CisJCXU4IGJ1ZltETE4yX1NQSV9NQVhfWEZFUl9TSVpFXTsKKwl9IF9fcGFja2VkICp0eDsKKwlzdHJ1Y3QgeworCQlfX2xlMTYgc2l6ZTsKKwkJdTggYnVmW0RMTjJfU1BJX01BWF9YRkVSX1NJWkVdOworCX0gX19wYWNrZWQgKnJ4OworCXVuc2lnbmVkIHR4X2xlbiwgcnhfbGVuOworCisJQlVJTERfQlVHX09OKHNpemVvZigqdHgpID4gRExOMl9TUElfQlVGX1NJWkUgfHwKKwkJICAgICBzaXplb2YoKnJ4KSA+IERMTjJfU1BJX0JVRl9TSVpFKTsKKworCWlmIChkYXRhX2xlbiA+IERMTjJfU1BJX01BWF9YRkVSX1NJWkUpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBTaW5jZSB0aGlzIGlzIGEgcHNldWRvIGZ1bGwtZHVwbGV4IGNvbW11bmljYXRpb24sIHdlJ3JlIHBlcmZlY3RseQorCSAqIHNhZmUgdG8gdXNlIHRoZSBzYW1lIGJ1ZmZlciBmb3IgYm90aCB0eCBhbmQgcnguIFdoZW4gRExOMiBzZW5kcyB0aGUKKwkgKiByZXNwb25zZSBiYWNrLCB3aXRoIHRoZSByeCBkYXRhLCB3ZSBkb24ndCBuZWVkIHRoZSB0eCBidWZmZXIgYW55bW9yZS4KKwkgKi8KKwl0eCA9IGRsbjItPmJ1ZjsKKwlyeCA9IGRsbjItPmJ1ZjsKKworCXR4LT5wb3J0ID0gZGxuMi0+cG9ydDsKKwl0eC0+c2l6ZSA9IGNwdV90b19sZTE2KGRhdGFfbGVuKTsKKwl0eC0+YXR0ciA9IGF0dHI7CisKKwlkbG4yX3NwaV9jb3B5X3RvX2J1Zih0eC0+YnVmLCB0eF9kYXRhLCBkYXRhX2xlbiwgZGxuMi0+YnB3KTsKKworCXR4X2xlbiA9IHNpemVvZigqdHgpICsgZGF0YV9sZW4gLSBETE4yX1NQSV9NQVhfWEZFUl9TSVpFOworCXJ4X2xlbiA9IHNpemVvZigqcngpOworCisJcmV0ID0gZGxuMl90cmFuc2ZlcihkbG4yLT5wZGV2LCBETE4yX1NQSV9SRUFEX1dSSVRFLCB0eCwgdHhfbGVuLAorCQkJICAgIHJ4LCAmcnhfbGVuKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocnhfbGVuIDwgc2l6ZW9mKHJ4LT5zaXplKSArIGRhdGFfbGVuKQorCQlyZXR1cm4gLUVQUk9UTzsKKwlpZiAobGUxNl90b19jcHUocngtPnNpemUpICE9IGRhdGFfbGVuKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCWRsbjJfc3BpX2NvcHlfZnJvbV9idWYocnhfZGF0YSwgcngtPmJ1ZiwgZGF0YV9sZW4sIGRsbjItPmJwdyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlYWQvV3JpdGUgd3JhcHBlci4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5IHNwbGl0IGFuIG9wZXJhdGlvbiBpbnRvIG11bHRpcGxlCisgKiBzaW5nbGUgb25lcyBkdWUgdG8gZGV2aWNlIGJ1ZmZlciBjb25zdHJhaW50cy4KKyAqLworc3RhdGljIGludCBkbG4yX3NwaV9yZHdyKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgY29uc3QgdTggKnR4X2RhdGEsCisJCQkgdTggKnJ4X2RhdGEsIHUxNiBkYXRhX2xlbiwgdTggYXR0cikgeworCWludCByZXQ7CisJdTE2IGxlbjsKKwl1OCB0ZW1wX2F0dHI7CisJdTE2IHJlbWFpbmluZyA9IGRhdGFfbGVuOworCXUxNiBvZmZzZXQ7CisKKwlkbyB7CisJCWlmIChyZW1haW5pbmcgPiBETE4yX1NQSV9NQVhfWEZFUl9TSVpFKSB7CisJCQlsZW4gPSBETE4yX1NQSV9NQVhfWEZFUl9TSVpFOworCQkJdGVtcF9hdHRyID0gRExOMl9TUElfQVRUUl9MRUFWRV9TU19MT1c7CisJCX0gZWxzZSB7CisJCQlsZW4gPSByZW1haW5pbmc7CisJCQl0ZW1wX2F0dHIgPSBhdHRyOworCQl9CisKKwkJb2Zmc2V0ID0gZGF0YV9sZW4gLSByZW1haW5pbmc7CisKKwkJaWYgKHR4X2RhdGEgJiYgcnhfZGF0YSkgeworCQkJcmV0ID0gZGxuMl9zcGlfcmVhZF93cml0ZV9vbmUoZGxuMiwKKwkJCQkJCSAgICAgIHR4X2RhdGEgKyBvZmZzZXQsCisJCQkJCQkgICAgICByeF9kYXRhICsgb2Zmc2V0LAorCQkJCQkJICAgICAgbGVuLCB0ZW1wX2F0dHIpOworCQl9IGVsc2UgaWYgKHR4X2RhdGEpIHsKKwkJCXJldCA9IGRsbjJfc3BpX3dyaXRlX29uZShkbG4yLAorCQkJCQkJIHR4X2RhdGEgKyBvZmZzZXQsCisJCQkJCQkgbGVuLCB0ZW1wX2F0dHIpOworCQl9IGVsc2UgaWYgKHJ4X2RhdGEpIHsKKwkJCXJldCA9IGRsbjJfc3BpX3JlYWRfb25lKGRsbjIsCisJCQkJCQlyeF9kYXRhICsgb2Zmc2V0LAorCQkJCQkJbGVuLCB0ZW1wX2F0dHIpOworCQkgfSBlbHNlIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQkgfQorCisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlyZW1haW5pbmcgLT0gbGVuOworCX0gd2hpbGUgKHJlbWFpbmluZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbG4yX3NwaV9wcmVwYXJlX21lc3NhZ2Uoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciwKKwkJCQkgICAgc3RydWN0IHNwaV9tZXNzYWdlICptZXNzYWdlKQoreworCWludCByZXQ7CisJc3RydWN0IGRsbjJfc3BpICpkbG4yID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBtZXNzYWdlLT5zcGk7CisKKwlpZiAoZGxuMi0+Y3MgIT0gc3BpLT5jaGlwX3NlbGVjdCkgeworCQlyZXQgPSBkbG4yX3NwaV9jc19zZXRfb25lKGRsbjIsIHNwaS0+Y2hpcF9zZWxlY3QpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJZGxuMi0+Y3MgPSBzcGktPmNoaXBfc2VsZWN0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRsbjJfc3BpX3RyYW5zZmVyX3NldHVwKHN0cnVjdCBkbG4yX3NwaSAqZGxuMiwgdTMyIHNwZWVkLAorCQkJCSAgIHU4IGJwdywgdTggbW9kZSkKK3sKKwlpbnQgcmV0OworCWJvb2wgYnVzX3NldHVwX2NoYW5nZTsKKworCWJ1c19zZXR1cF9jaGFuZ2UgPSBkbG4yLT5zcGVlZCAhPSBzcGVlZCB8fCBkbG4yLT5tb2RlICE9IG1vZGUgfHwKKwkJCSAgIGRsbjItPmJwdyAhPSBicHc7CisKKwlpZiAoIWJ1c19zZXR1cF9jaGFuZ2UpCisJCXJldHVybiAwOworCisJcmV0ID0gZGxuMl9zcGlfZW5hYmxlKGRsbjIsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChkbG4yLT5zcGVlZCAhPSBzcGVlZCkgeworCQlyZXQgPSBkbG4yX3NwaV9zZXRfc3BlZWQoZGxuMiwgc3BlZWQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJZGxuMi0+c3BlZWQgPSBzcGVlZDsKKwl9CisKKwlpZiAoZGxuMi0+bW9kZSAhPSBtb2RlKSB7CisJCXJldCA9IGRsbjJfc3BpX3NldF9tb2RlKGRsbjIsIG1vZGUgJiAweDMpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJZGxuMi0+bW9kZSA9IG1vZGU7CisJfQorCisJaWYgKGRsbjItPmJwdyAhPSBicHcpIHsKKwkJcmV0ID0gZGxuMl9zcGlfc2V0X2JwdyhkbG4yLCBicHcpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJZGxuMi0+YnB3ID0gYnB3OworCX0KKworCXJldHVybiBkbG4yX3NwaV9lbmFibGUoZGxuMiwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9zcGlfdHJhbnNmZXJfb25lKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIsCisJCQkJIHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCisJCQkJIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXIpCit7CisJc3RydWN0IGRsbjJfc3BpICpkbG4yID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCWludCBzdGF0dXM7CisJdTggYXR0ciA9IDA7CisKKwlzdGF0dXMgPSBkbG4yX3NwaV90cmFuc2Zlcl9zZXR1cChkbG4yLCB4ZmVyLT5zcGVlZF9oeiwKKwkJCQkJIHhmZXItPmJpdHNfcGVyX3dvcmQsCisJCQkJCSBzcGktPm1vZGUpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRldl9lcnIoJmRsbjItPnBkZXYtPmRldiwgIkNhbm5vdCBzZXR1cCB0cmFuc2ZlclxuIik7CisJCXJldHVybiBzdGF0dXM7CisJfQorCisJaWYgKCF4ZmVyLT5jc19jaGFuZ2UgJiYgIXNwaV90cmFuc2Zlcl9pc19sYXN0KG1hc3RlciwgeGZlcikpCisJCWF0dHIgPSBETE4yX1NQSV9BVFRSX0xFQVZFX1NTX0xPVzsKKworCXN0YXR1cyA9IGRsbjJfc3BpX3Jkd3IoZGxuMiwgeGZlci0+dHhfYnVmLCB4ZmVyLT5yeF9idWYsCisJCQkgICAgICAgeGZlci0+bGVuLCBhdHRyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZGV2X2VycigmZGxuMi0+cGRldi0+ZGV2LCAid3JpdGUvcmVhZCBmYWlsZWQhXG4iKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCBkbG4yX3NwaSAqZGxuMjsKKwlzdHJ1Y3QgZGxuMl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRldik7CisJaW50IHJldDsKKworCW1hc3RlciA9IHNwaV9hbGxvY19tYXN0ZXIoJnBkZXYtPmRldiwgc2l6ZW9mKCpkbG4yKSk7CisJaWYgKCFtYXN0ZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWFzdGVyKTsKKworCWRsbjIgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlkbG4yLT5idWYgPSBkZXZtX2ttYWxsb2MoJnBkZXYtPmRldiwgRExOMl9TUElfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghZGxuMi0+YnVmKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXhpdF9mcmVlX21hc3RlcjsKKwl9CisKKwlkbG4yLT5tYXN0ZXIgPSBtYXN0ZXI7CisJZGxuMi0+cGRldiA9IHBkZXY7CisJZGxuMi0+cG9ydCA9IHBkYXRhLT5wb3J0OworCS8qIGNzL21vZGUgY2FuIG5ldmVyIGJlIDB4ZmYsIHNvIHRoZSBmaXJzdCB0cmFuc2ZlciB3aWxsIHNldCB0aGVtICovCisJZGxuMi0+Y3MgPSAweGZmOworCWRsbjItPm1vZGUgPSAweGZmOworCisJLyogZGlzYWJsZSBTUEkgbW9kdWxlIGJlZm9yZSBjb250aW51aW5nIHdpdGggdGhlIHNldHVwICovCisJcmV0ID0gZGxuMl9zcGlfZW5hYmxlKGRsbjIsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZGlzYWJsZSBTUEkgbW9kdWxlXG4iKTsKKwkJZ290byBleGl0X2ZyZWVfbWFzdGVyOworCX0KKworCXJldCA9IGRsbjJfc3BpX2dldF9jc19udW0oZGxuMiwgJm1hc3Rlci0+bnVtX2NoaXBzZWxlY3QpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgbnVtYmVyIG9mIENTIHBpbnNcbiIpOworCQlnb3RvIGV4aXRfZnJlZV9tYXN0ZXI7CisJfQorCisJcmV0ID0gZGxuMl9zcGlfZ2V0X3NwZWVkX3JhbmdlKGRsbjIsCisJCQkJICAgICAgICZtYXN0ZXItPm1pbl9zcGVlZF9oeiwKKwkJCQkgICAgICAgJm1hc3Rlci0+bWF4X3NwZWVkX2h6KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBidXMgbWluL21heCBmcmVxc1xuIik7CisJCWdvdG8gZXhpdF9mcmVlX21hc3RlcjsKKwl9CisKKwlyZXQgPSBkbG4yX3NwaV9nZXRfc3VwcG9ydGVkX2ZyYW1lX3NpemVzKGRsbjIsCisJCQkJCQkgJm1hc3Rlci0+Yml0c19wZXJfd29yZF9tYXNrKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBzdXBwb3J0ZWQgZnJhbWUgc2l6ZXNcbiIpOworCQlnb3RvIGV4aXRfZnJlZV9tYXN0ZXI7CisJfQorCisJcmV0ID0gZGxuMl9zcGlfY3NfZW5hYmxlX2FsbChkbG4yLCB0cnVlKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIENTIHBpbnNcbiIpOworCQlnb3RvIGV4aXRfZnJlZV9tYXN0ZXI7CisJfQorCisJbWFzdGVyLT5idXNfbnVtID0gLTE7CisJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBOworCW1hc3Rlci0+cHJlcGFyZV9tZXNzYWdlID0gZGxuMl9zcGlfcHJlcGFyZV9tZXNzYWdlOworCW1hc3Rlci0+dHJhbnNmZXJfb25lID0gZGxuMl9zcGlfdHJhbnNmZXJfb25lOworCW1hc3Rlci0+YXV0b19ydW50aW1lX3BtID0gdHJ1ZTsKKworCS8qIGVuYWJsZSBTUEkgbW9kdWxlLCB3ZSdyZSBnb29kIHRvIGdvICovCisJcmV0ID0gZGxuMl9zcGlfZW5hYmxlKGRsbjIsIHRydWUpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgU1BJIG1vZHVsZVxuIik7CisJCWdvdG8gZXhpdF9mcmVlX21hc3RlcjsKKwl9CisKKwlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheSgmcGRldi0+ZGV2LAorCQkJCQkgRExOMl9SUE1fQVVUT1NVU1BFTkRfVElNRU9VVCk7CisJcG1fcnVudGltZV91c2VfYXV0b3N1c3BlbmQoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9zZXRfYWN0aXZlKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCisJcmV0ID0gZGV2bV9zcGlfcmVnaXN0ZXJfbWFzdGVyKCZwZGV2LT5kZXYsIG1hc3Rlcik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIG1hc3RlclxuIik7CisJCWdvdG8gZXhpdF9yZWdpc3RlcjsKKwl9CisKKwlyZXR1cm4gcmV0OworCitleGl0X3JlZ2lzdGVyOgorCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoJnBkZXYtPmRldik7CisKKwlpZiAoZGxuMl9zcGlfZW5hYmxlKGRsbjIsIGZhbHNlKSA8IDApCisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBkaXNhYmxlIFNQSSBtb2R1bGVcbiIpOworZXhpdF9mcmVlX21hc3RlcjoKKwlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkbG4yX3NwaV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gc3BpX21hc3Rlcl9nZXQocGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldikpOworCXN0cnVjdCBkbG4yX3NwaSAqZGxuMiA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKworCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKworCWlmIChkbG4yX3NwaV9lbmFibGUoZGxuMiwgZmFsc2UpIDwgMCkKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGRpc2FibGUgU1BJIG1vZHVsZVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorc3RhdGljIGludCBkbG4yX3NwaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZGxuMl9zcGkgKmRsbjIgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlyZXQgPSBzcGlfbWFzdGVyX3N1c3BlbmQobWFzdGVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmICghcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSkgeworCQlyZXQgPSBkbG4yX3NwaV9lbmFibGUoZGxuMiwgZmFsc2UpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJLyoKKwkgKiBVU0IgcG93ZXIgbWF5IGJlIGN1dCBvZmYgZHVyaW5nIHNsZWVwLiBSZXNldHRpbmcgdGhlIGZvbGxvd2luZworCSAqIHBhcmFtZXRlcnMgd2lsbCBmb3JjZSB0aGUgYm9hcmQgdG8gYmUgc2V0IHVwIGJlZm9yZSBmaXJzdCB0cmFuc2Zlci4KKwkgKi8KKwlkbG4yLT5jcyA9IDB4ZmY7CisJZGxuMi0+c3BlZWQgPSAwOworCWRsbjItPmJwdyA9IDA7CisJZGxuMi0+bW9kZSA9IDB4ZmY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbG4yX3NwaV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBkbG4yX3NwaSAqZGxuMiA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKworCWlmICghcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSkgeworCQlyZXQgPSBkbG4yX3NwaV9jc19lbmFibGVfYWxsKGRsbjIsIHRydWUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0ID0gZGxuMl9zcGlfZW5hYmxlKGRsbjIsIHRydWUpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIHNwaV9tYXN0ZXJfcmVzdW1lKG1hc3Rlcik7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgZGxuMl9zcGlfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGRsbjJfc3BpICpkbG4yID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJcmV0dXJuIGRsbjJfc3BpX2VuYWJsZShkbG4yLCBmYWxzZSk7Cit9CisKK3N0YXRpYyBpbnQgZGxuMl9zcGlfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZGxuMl9zcGkgKmRsbjIgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwlyZXR1cm4gIGRsbjJfc3BpX2VuYWJsZShkbG4yLCB0cnVlKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIGRsbjJfc3BpX3BtID0geworCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKGRsbjJfc3BpX3N1c3BlbmQsIGRsbjJfc3BpX3Jlc3VtZSkKKwlTRVRfUlVOVElNRV9QTV9PUFMoZGxuMl9zcGlfcnVudGltZV9zdXNwZW5kLAorCQkJICAgZGxuMl9zcGlfcnVudGltZV9yZXN1bWUsIE5VTEwpCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzcGlfZGxuMl9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiZGxuMi1zcGkiLAorCQkucG0JPSAmZGxuMl9zcGlfcG0sCisJfSwKKwkucHJvYmUJCT0gZGxuMl9zcGlfcHJvYmUsCisJLnJlbW92ZQkJPSBkbG4yX3NwaV9yZW1vdmUsCit9OworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihzcGlfZGxuMl9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIERpb2xhbiBETE4yIFNQSSBtYXN0ZXIgaW50ZXJmYWNlIik7CitNT0RVTEVfQVVUSE9SKCJMYXVyZW50aXUgUGFsY3UgPGxhdXJlbnRpdS5wYWxjdUBpbnRlbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmRsbjItc3BpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZHctbWlkLmMgYi9kcml2ZXJzL3NwaS9zcGktZHctbWlkLmMKaW5kZXggNzI4MTMxNi4uYTAxOTdmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWR3LW1pZC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1kdy1taWQuYwpAQCAtMjQ3LDkgKzI0Nyw5IEBACiAKIC8qIFNvbWUgc3BlY2lmaWMgaW5mbyBmb3IgU1BJMCBjb250cm9sbGVyIG9uIEludGVsIE1JRCAqLwogCi0vKiBIVyBpbmZvIGZvciBNUlNUIENMayBDb250cm9sIFVuaXQsIG9uZSAzMmIgcmVnICovCisvKiBIVyBpbmZvIGZvciBNUlNUIENsayBDb250cm9sIFVuaXQsIDMyYiByZWcgcGVyIGNvbnRyb2xsZXIgKi8KICNkZWZpbmUgTVJTVF9TUElfQ0xLX0JBU0UJMTAwMDAwMDAwCS8qIDEwMG0gKi8KLSNkZWZpbmUgTVJTVF9DTEtfU1BJMF9SRUcJMHhmZjExZDg2YworI2RlZmluZSBNUlNUX0NMS19TUElfUkVHCTB4ZmYxMWQ4NmMKICNkZWZpbmUgQ0xLX1NQSV9CRElWX09GRlNFVAkwCiAjZGVmaW5lIENMS19TUElfQkRJVl9NQVNLCTB4MDAwMDAwMDcKICNkZWZpbmUgQ0xLX1NQSV9DRElWX09GRlNFVAk5CkBAIC0yNjEsMTcgKzI2MSwxNyBAQAogCXZvaWQgX19pb21lbSAqY2xrX3JlZzsKIAl1MzIgY2xrX2NkaXY7CiAKLQljbGtfcmVnID0gaW9yZW1hcF9ub2NhY2hlKE1SU1RfQ0xLX1NQSTBfUkVHLCAxNik7CisJY2xrX3JlZyA9IGlvcmVtYXBfbm9jYWNoZShNUlNUX0NMS19TUElfUkVHLCAxNik7CiAJaWYgKCFjbGtfcmVnKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qIGdldCBTUEkgY29udHJvbGxlciBvcGVyYXRpbmcgZnJlcSBpbmZvICovCi0JY2xrX2NkaXYgID0gKHJlYWRsKGNsa19yZWcpICYgQ0xLX1NQSV9DRElWX01BU0spID4+IENMS19TUElfQ0RJVl9PRkZTRVQ7CisJLyogR2V0IFNQSSBjb250cm9sbGVyIG9wZXJhdGluZyBmcmVxIGluZm8gKi8KKwljbGtfY2RpdiA9IHJlYWRsKGNsa19yZWcgKyBkd3MtPmJ1c19udW0gKiBzaXplb2YodTMyKSk7CisJY2xrX2NkaXYgJj0gQ0xLX1NQSV9DRElWX01BU0s7CisJY2xrX2NkaXYgPj49IENMS19TUElfQ0RJVl9PRkZTRVQ7CiAJZHdzLT5tYXhfZnJlcSA9IE1SU1RfU1BJX0NMS19CQVNFIC8gKGNsa19jZGl2ICsgMSk7Ci0JaW91bm1hcChjbGtfcmVnKTsKIAotCWR3cy0+bnVtX2NzID0gMTY7Ci0JZHdzLT5maWZvX2xlbiA9IDQwOwkvKiBGSUZPIGhhcyA0MCB3b3JkcyBidWZmZXIgKi8KKwlpb3VubWFwKGNsa19yZWcpOwogCiAjaWZkZWYgQ09ORklHX1NQSV9EV19NSURfRE1BCiAJZHdzLT5kbWFfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWRfZG1hKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZHctcGNpLmMgYi9kcml2ZXJzL3NwaS9zcGktZHctcGNpLmMKaW5kZXggYmE2OGRhMS4uNWJhMzMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWR3LXBjaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1kdy1wY2kuYwpAQCAtMzAsMTAgKzMwLDIwIEBACiAKIHN0cnVjdCBzcGlfcGNpX2Rlc2MgewogCWludAkoKnNldHVwKShzdHJ1Y3QgZHdfc3BpICopOworCXUxNgludW1fY3M7CisJdTE2CWJ1c19udW07CiB9OwogCi1zdGF0aWMgc3RydWN0IHNwaV9wY2lfZGVzYyBzcGlfcGNpX21pZF9kZXNjID0geworc3RhdGljIHN0cnVjdCBzcGlfcGNpX2Rlc2Mgc3BpX3BjaV9taWRfZGVzY18xID0gewogCS5zZXR1cCA9IGR3X3NwaV9taWRfaW5pdCwKKwkubnVtX2NzID0gMzIsCisJLmJ1c19udW0gPSAwLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfcGNpX2Rlc2Mgc3BpX3BjaV9taWRfZGVzY18yID0geworCS5zZXR1cCA9IGR3X3NwaV9taWRfaW5pdCwKKwkubnVtX2NzID0gNCwKKwkuYnVzX251bSA9IDEsCiB9OwogCiBzdGF0aWMgaW50IHNwaV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCkBAIC02NSwxOCArNzUsMjMgQEAKIAogCWR3cy0+cmVncyA9IHBjaW1faW9tYXBfdGFibGUocGRldilbcGNpX2Jhcl07CiAKLQlkd3MtPmJ1c19udW0gPSAwOwotCWR3cy0+bnVtX2NzID0gNDsKIAlkd3MtPmlycSA9IHBkZXYtPmlycTsKIAogCS8qCiAJICogU3BlY2lmaWMgaGFuZGxpbmcgZm9yIHBhbHRmb3JtcywgbGlrZSBkbWEgc2V0dXAsCiAJICogY2xvY2sgcmF0ZSwgRklGTyBkZXB0aC4KIAkgKi8KLQlpZiAoZGVzYyAmJiBkZXNjLT5zZXR1cCkgewotCQlyZXQgPSBkZXNjLT5zZXR1cChkd3MpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKKwlpZiAoZGVzYykgeworCQlkd3MtPm51bV9jcyA9IGRlc2MtPm51bV9jczsKKwkJZHdzLT5idXNfbnVtID0gZGVzYy0+YnVzX251bTsKKworCQlpZiAoZGVzYy0+c2V0dXApIHsKKwkJCXJldCA9IGRlc2MtPnNldHVwKGR3cyk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwl9IGVsc2UgeworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlyZXQgPSBkd19zcGlfYWRkX2hvc3QoJnBkZXYtPmRldiwgZHdzKTsKQEAgLTEyMSw3ICsxMzYsMTQgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHNbXSA9IHsKIAkvKiBJbnRlbCBNSUQgcGxhdGZvcm0gU1BJIGNvbnRyb2xsZXIgMCAqLwotCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MDgwMCksIChrZXJuZWxfdWxvbmdfdCkmc3BpX3BjaV9taWRfZGVzY30sCisJLyoKKwkgKiBUaGUgYWNjZXNzIHRvIHRoZSBkZXZpY2UgODA4NjowODAxIGlzIGRpc2FibGVkIGJ5IEhXLCBzaW5jZSBpdCdzCisJICogZXhjbHVzaXZlbHkgdXNlZCBieSBTQ1UgdG8gY29tbXVuaWNhdGUgd2l0aCBNU0lDLgorCSAqLworCS8qIEludGVsIE1JRCBwbGF0Zm9ybSBTUEkgY29udHJvbGxlciAxICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgwODAwKSwgKGtlcm5lbF91bG9uZ190KSZzcGlfcGNpX21pZF9kZXNjXzF9LAorCS8qIEludGVsIE1JRCBwbGF0Zm9ybSBTUEkgY29udHJvbGxlciAyICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgwODEyKSwgKGtlcm5lbF91bG9uZ190KSZzcGlfcGNpX21pZF9kZXNjXzJ9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWR3LmMgYi9kcml2ZXJzL3NwaS9zcGktZHcuYwppbmRleCBkMGQ1NTQyLi41YTk3YTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktZHcuYworKysgYi9kcml2ZXJzL3NwaS9zcGktZHcuYwpAQCAtNjA4LDcgKzYwOCw3IEBACiB9CiAKIC8qIFJlc3RhcnQgdGhlIGNvbnRyb2xsZXIsIGRpc2FibGUgYWxsIGludGVycnVwdHMsIGNsZWFuIHJ4IGZpZm8gKi8KLXN0YXRpYyB2b2lkIHNwaV9od19pbml0KHN0cnVjdCBkd19zcGkgKmR3cykKK3N0YXRpYyB2b2lkIHNwaV9od19pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGR3X3NwaSAqZHdzKQogewogCXNwaV9lbmFibGVfY2hpcChkd3MsIDApOwogCXNwaV9tYXNrX2ludHIoZHdzLCAweGZmKTsKQEAgLTYyMSwxNCArNjIxLDE1IEBACiAJaWYgKCFkd3MtPmZpZm9fbGVuKSB7CiAJCXUzMiBmaWZvOwogCi0JCWZvciAoZmlmbyA9IDI7IGZpZm8gPD0gMjU3OyBmaWZvKyspIHsKKwkJZm9yIChmaWZvID0gMjsgZmlmbyA8PSAyNTY7IGZpZm8rKykgewogCQkJZHdfd3JpdGV3KGR3cywgRFdfU1BJX1RYRkxUUiwgZmlmbyk7CiAJCQlpZiAoZmlmbyAhPSBkd19yZWFkdyhkd3MsIERXX1NQSV9UWEZMVFIpKQogCQkJCWJyZWFrOwogCQl9Ci0KLQkJZHdzLT5maWZvX2xlbiA9IChmaWZvID09IDI1NykgPyAwIDogZmlmbzsKIAkJZHdfd3JpdGV3KGR3cywgRFdfU1BJX1RYRkxUUiwgMCk7CisKKwkJZHdzLT5maWZvX2xlbiA9IChmaWZvID09IDIpID8gMCA6IGZpZm8gLSAxOworCQlkZXZfZGJnKGRldiwgIkRldGVjdGVkIEZJRk8gc2l6ZTogJXUgYnl0ZXNcbiIsIGR3cy0+Zmlmb19sZW4pOwogCX0KIH0KIApAQCAtNjY4LDEyICs2NjksMTIgQEAKIAltYXN0ZXItPmRldi5vZl9ub2RlID0gZGV2LT5vZl9ub2RlOwogCiAJLyogQmFzaWMgSFcgaW5pdCAqLwotCXNwaV9od19pbml0KGR3cyk7CisJc3BpX2h3X2luaXQoZGV2LCBkd3MpOwogCiAJaWYgKGR3cy0+ZG1hX29wcyAmJiBkd3MtPmRtYV9vcHMtPmRtYV9pbml0KSB7CiAJCXJldCA9IGR3cy0+ZG1hX29wcy0+ZG1hX2luaXQoZHdzKTsKIAkJaWYgKHJldCkgewotCQkJZGV2X3dhcm4oJm1hc3Rlci0+ZGV2LCAiRE1BIGluaXQgZmFpbGVkXG4iKTsKKwkJCWRldl93YXJuKGRldiwgIkRNQSBpbml0IGZhaWxlZFxuIik7CiAJCQlkd3MtPmRtYV9pbml0ZWQgPSAwOwogCQl9CiAJfQpAQCAtNzMxLDcgKzczMiw3IEBACiB7CiAJaW50IHJldDsKIAotCXNwaV9od19pbml0KGR3cyk7CisJc3BpX2h3X2luaXQoJmR3cy0+bWFzdGVyLT5kZXYsIGR3cyk7CiAJcmV0ID0gc3BpX21hc3Rlcl9yZXN1bWUoZHdzLT5tYXN0ZXIpOwogCWlmIChyZXQpCiAJCWRldl9lcnIoJmR3cy0+bWFzdGVyLT5kZXYsICJmYWlsIHRvIHN0YXJ0IHF1ZXVlICglZClcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZmFsY29uLmMgYi9kcml2ZXJzL3NwaS9zcGktZmFsY29uLmMKaW5kZXggOTEyYjkwMy4uMjg2YjJjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWZhbGNvbi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1mYWxjb24uYwpAQCAtMzUzLDE2ICszNTMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZhbGNvbl9zZmxhc2hfcHJlcGFyZV94ZmVyKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZmFsY29uX3NmbGFzaF91bnByZXBhcmVfeGZlcihzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyKQotewotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGZhbGNvbl9zZmxhc2hfeGZlcl9vbmUoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciwKIAkJCQkJc3RydWN0IHNwaV9tZXNzYWdlICptKQogewpAQCAtNDIwLDkgKzQxMCw3IEBACiAJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfTU9ERV8zOwogCW1hc3Rlci0+ZmxhZ3MgPSBTUElfTUFTVEVSX0hBTEZfRFVQTEVYOwogCW1hc3Rlci0+c2V0dXAgPSBmYWxjb25fc2ZsYXNoX3NldHVwOwotCW1hc3Rlci0+cHJlcGFyZV90cmFuc2Zlcl9oYXJkd2FyZSA9IGZhbGNvbl9zZmxhc2hfcHJlcGFyZV94ZmVyOwogCW1hc3Rlci0+dHJhbnNmZXJfb25lX21lc3NhZ2UgPSBmYWxjb25fc2ZsYXNoX3hmZXJfb25lOwotCW1hc3Rlci0+dW5wcmVwYXJlX3RyYW5zZmVyX2hhcmR3YXJlID0gZmFsY29uX3NmbGFzaF91bnByZXBhcmVfeGZlcjsKIAltYXN0ZXItPmRldi5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7CiAKIAlyZXQgPSBkZXZtX3NwaV9yZWdpc3Rlcl9tYXN0ZXIoJnBkZXYtPmRldiwgbWFzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1mc2wtY3BtLmMgYi9kcml2ZXJzL3NwaS9zcGktZnNsLWNwbS5jCmluZGV4IGU4NWFiMWMuLjljNDZhMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1mc2wtY3BtLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWZzbC1jcG0uYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9hZGRyZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC02OCw2ICs2OSw3IEBACiAJCX0KIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfc3BpX2NwbV9yZWluaXRfdHhyeCk7CiAKIHN0YXRpYyB2b2lkIGZzbF9zcGlfY3BtX2J1ZnNfc3RhcnQoc3RydWN0IG1wYzh4eHhfc3BpICptc3BpKQogewpAQCAtMTYyLDYgKzE2NCw3IEBACiAJCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBtc3BpLT50eF9kbWEsIHQtPmxlbiwgRE1BX1RPX0RFVklDRSk7CiAJcmV0dXJuIC1FTk9NRU07CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfc3BpX2NwbV9idWZzKTsKIAogdm9pZCBmc2xfc3BpX2NwbV9idWZzX2NvbXBsZXRlKHN0cnVjdCBtcGM4eHh4X3NwaSAqbXNwaSkKIHsKQEAgLTE3NCw2ICsxNzcsNyBAQAogCQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgbXNwaS0+cnhfZG1hLCB0LT5sZW4sIERNQV9GUk9NX0RFVklDRSk7CiAJbXNwaS0+eGZlcl9pbl9wcm9ncmVzcyA9IE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfc3BpX2NwbV9idWZzX2NvbXBsZXRlKTsKIAogdm9pZCBmc2xfc3BpX2NwbV9pcnEoc3RydWN0IG1wYzh4eHhfc3BpICptc3BpLCB1MzIgZXZlbnRzKQogewpAQCAtMTk4LDYgKzIwMiw3IEBACiAJZWxzZQogCQljb21wbGV0ZSgmbXNwaS0+ZG9uZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfc3BpX2NwbV9pcnEpOwogCiBzdGF0aWMgdm9pZCAqZnNsX3NwaV9hbGxvY19kdW1teV9yeCh2b2lkKQogewpAQCAtMzc1LDYgKzM4MCw3IEBACiAJZnNsX3NwaV9mcmVlX2R1bW15X3J4KCk7CiAJcmV0dXJuIC1FTk9NRU07CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmc2xfc3BpX2NwbV9pbml0KTsKIAogdm9pZCBmc2xfc3BpX2NwbV9mcmVlKHN0cnVjdCBtcGM4eHh4X3NwaSAqbXNwaSkKIHsKQEAgLTM4OSwzICszOTUsNiBAQAogCWNwbV9tdXJhbV9mcmVlKGNwbV9tdXJhbV9vZmZzZXQobXNwaS0+cHJhbSkpOwogCWZzbF9zcGlfZnJlZV9kdW1teV9yeCgpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZnNsX3NwaV9jcG1fZnJlZSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1mc2wtZHNwaS5jIGIvZHJpdmVycy9zcGkvc3BpLWZzbC1kc3BpLmMKaW5kZXggNGNkYTk5NC4uZDFhMzkyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWZzbC1kc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWZzbC1kc3BpLmMKQEAgLTEwNiw3ICsxMDYsNyBAQAogfTsKIAogc3RydWN0IGZzbF9kc3BpIHsKLQlzdHJ1Y3Qgc3BpX2JpdGJhbmcJYml0YmFuZzsKKwlzdHJ1Y3Qgc3BpX21hc3RlcgkqbWFzdGVyOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CiAKIAlzdHJ1Y3QgcmVnbWFwCQkqcmVnbWFwOwpAQCAtMTE0LDYgKzExNCw3IEBACiAJc3RydWN0IGNsawkJKmNsazsKIAogCXN0cnVjdCBzcGlfdHJhbnNmZXIJKmN1cl90cmFuc2ZlcjsKKwlzdHJ1Y3Qgc3BpX21lc3NhZ2UJKmN1cl9tc2c7CiAJc3RydWN0IGNoaXBfZGF0YQkqY3VyX2NoaXA7CiAJc2l6ZV90CQkJbGVuOwogCXZvaWQJCQkqdHg7CkBAIC0xMjMsNiArMTI0LDcgQEAKIAljaGFyCQkJZGF0YWZsYWdzOwogCXU4CQkJY3M7CiAJdTE2CQkJdm9pZF93cml0ZV9kYXRhOworCXUzMgkJCWNzX2NoYW5nZTsKIAogCXdhaXRfcXVldWVfaGVhZF90CXdhaXRxOwogCXUzMgkJCXdhaXRmbGFnczsKQEAgLTIyNSw2ICsyMjcsOCBAQAogCQlpZiAoZHNwaS0+bGVuID09IDAgfHwgdHhfY291bnQgPT0gRFNQSV9GSUZPX1NJWkUgLSAxKSB7CiAJCQkvKiBsYXN0IHRyYW5zZmVyIGluIHRoZSB0cmFuc2ZlciAqLwogCQkJZHNwaV9wdXNociB8PSBTUElfUFVTSFJfRU9ROworCQkJaWYgKChkc3BpLT5jc19jaGFuZ2UpICYmICghZHNwaS0+bGVuKSkKKwkJCQlkc3BpX3B1c2hyICY9IH5TUElfUFVTSFJfQ09OVDsKIAkJfSBlbHNlIGlmICh0eF93b3JkICYmIChkc3BpLT5sZW4gPT0gMSkpCiAJCQlkc3BpX3B1c2hyIHw9IFNQSV9QVVNIUl9FT1E7CiAKQEAgLTI0Niw2ICsyNTAsNyBAQAogCWludCByeF9jb3VudCA9IDA7CiAJaW50IHJ4X3dvcmQgPSBpc19kb3VibGVfYnl0ZV9tb2RlKGRzcGkpOwogCXUxNiBkOworCiAJd2hpbGUgKChkc3BpLT5yeCA8IGRzcGktPnJ4X2VuZCkKIAkJCSYmIChyeF9jb3VudCA8IERTUElfRklGT19TSVpFKSkgewogCQlpZiAocnhfd29yZCkgewpAQCAtMjc2LDgwICsyODEsNzIgQEAKIAlyZXR1cm4gcnhfY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgZHNwaV90eHJ4X3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCitzdGF0aWMgaW50IGRzcGlfdHJhbnNmZXJfb25lX21lc3NhZ2Uoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciwKKwkJc3RydWN0IHNwaV9tZXNzYWdlICptZXNzYWdlKQogewotCXN0cnVjdCBmc2xfZHNwaSAqZHNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCWRzcGktPmN1cl90cmFuc2ZlciA9IHQ7Ci0JZHNwaS0+Y3VyX2NoaXAgPSBzcGlfZ2V0X2N0bGRhdGEoc3BpKTsKLQlkc3BpLT5jcyA9IHNwaS0+Y2hpcF9zZWxlY3Q7Ci0JZHNwaS0+dm9pZF93cml0ZV9kYXRhID0gZHNwaS0+Y3VyX2NoaXAtPnZvaWRfd3JpdGVfZGF0YTsKKwlzdHJ1Y3QgZnNsX2RzcGkgKmRzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IG1lc3NhZ2UtPnNwaTsKKwlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0cmFuc2ZlcjsKKwlpbnQgc3RhdHVzID0gMDsKKwltZXNzYWdlLT5hY3R1YWxfbGVuZ3RoID0gMDsKIAotCWRzcGktPmRhdGFmbGFncyA9IDA7Ci0JZHNwaS0+dHggPSAodm9pZCAqKXQtPnR4X2J1ZjsKLQlkc3BpLT50eF9lbmQgPSBkc3BpLT50eCArIHQtPmxlbjsKLQlkc3BpLT5yeCA9IHQtPnJ4X2J1ZjsKLQlkc3BpLT5yeF9lbmQgPSBkc3BpLT5yeCArIHQtPmxlbjsKLQlkc3BpLT5sZW4gPSB0LT5sZW47CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0cmFuc2ZlciwgJm1lc3NhZ2UtPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkgeworCQlkc3BpLT5jdXJfdHJhbnNmZXIgPSB0cmFuc2ZlcjsKKwkJZHNwaS0+Y3VyX21zZyA9IG1lc3NhZ2U7CisJCWRzcGktPmN1cl9jaGlwID0gc3BpX2dldF9jdGxkYXRhKHNwaSk7CisJCWRzcGktPmNzID0gc3BpLT5jaGlwX3NlbGVjdDsKKwkJaWYgKGRzcGktPmN1cl90cmFuc2Zlci0+dHJhbnNmZXJfbGlzdC5uZXh0CisJCQkJPT0gJmRzcGktPmN1cl9tc2ctPnRyYW5zZmVycykKKwkJCXRyYW5zZmVyLT5jc19jaGFuZ2UgPSAxOworCQlkc3BpLT5jc19jaGFuZ2UgPSB0cmFuc2Zlci0+Y3NfY2hhbmdlOworCQlkc3BpLT52b2lkX3dyaXRlX2RhdGEgPSBkc3BpLT5jdXJfY2hpcC0+dm9pZF93cml0ZV9kYXRhOwogCi0JaWYgKCFkc3BpLT5yeCkKLQkJZHNwaS0+ZGF0YWZsYWdzIHw9IFRSQU5fU1RBVEVfUlhfVk9JRDsKKwkJZHNwaS0+ZGF0YWZsYWdzID0gMDsKKwkJZHNwaS0+dHggPSAodm9pZCAqKXRyYW5zZmVyLT50eF9idWY7CisJCWRzcGktPnR4X2VuZCA9IGRzcGktPnR4ICsgdHJhbnNmZXItPmxlbjsKKwkJZHNwaS0+cnggPSB0cmFuc2Zlci0+cnhfYnVmOworCQlkc3BpLT5yeF9lbmQgPSBkc3BpLT5yeCArIHRyYW5zZmVyLT5sZW47CisJCWRzcGktPmxlbiA9IHRyYW5zZmVyLT5sZW47CiAKLQlpZiAoIWRzcGktPnR4KQotCQlkc3BpLT5kYXRhZmxhZ3MgfD0gVFJBTl9TVEFURV9UWF9WT0lEOworCQlpZiAoIWRzcGktPnJ4KQorCQkJZHNwaS0+ZGF0YWZsYWdzIHw9IFRSQU5fU1RBVEVfUlhfVk9JRDsKIAotCXJlZ21hcF93cml0ZShkc3BpLT5yZWdtYXAsIFNQSV9NQ1IsIGRzcGktPmN1cl9jaGlwLT5tY3JfdmFsKTsKLQlyZWdtYXBfd3JpdGUoZHNwaS0+cmVnbWFwLCBTUElfQ1RBUihkc3BpLT5jcyksIGRzcGktPmN1cl9jaGlwLT5jdGFyX3ZhbCk7Ci0JcmVnbWFwX3dyaXRlKGRzcGktPnJlZ21hcCwgU1BJX1JTRVIsIFNQSV9SU0VSX0VPUUZFKTsKKwkJaWYgKCFkc3BpLT50eCkKKwkJCWRzcGktPmRhdGFmbGFncyB8PSBUUkFOX1NUQVRFX1RYX1ZPSUQ7CiAKLQlpZiAodC0+c3BlZWRfaHopCisJCXJlZ21hcF93cml0ZShkc3BpLT5yZWdtYXAsIFNQSV9NQ1IsIGRzcGktPmN1cl9jaGlwLT5tY3JfdmFsKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGRzcGktPnJlZ21hcCwgU1BJX01DUiwKKwkJCQlTUElfTUNSX0NMUl9UWEYgfCBTUElfTUNSX0NMUl9SWEYsCisJCQkJU1BJX01DUl9DTFJfVFhGIHwgU1BJX01DUl9DTFJfUlhGKTsKIAkJcmVnbWFwX3dyaXRlKGRzcGktPnJlZ21hcCwgU1BJX0NUQVIoZHNwaS0+Y3MpLAogCQkJCWRzcGktPmN1cl9jaGlwLT5jdGFyX3ZhbCk7CisJCWlmICh0cmFuc2Zlci0+c3BlZWRfaHopCisJCQlyZWdtYXBfd3JpdGUoZHNwaS0+cmVnbWFwLCBTUElfQ1RBUihkc3BpLT5jcyksCisJCQkJCWRzcGktPmN1cl9jaGlwLT5jdGFyX3ZhbCk7CiAKLQlkc3BpX3RyYW5zZmVyX3dyaXRlKGRzcGkpOworCQlyZWdtYXBfd3JpdGUoZHNwaS0+cmVnbWFwLCBTUElfUlNFUiwgU1BJX1JTRVJfRU9RRkUpOworCQltZXNzYWdlLT5hY3R1YWxfbGVuZ3RoICs9IGRzcGlfdHJhbnNmZXJfd3JpdGUoZHNwaSk7CiAKLQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRzcGktPndhaXRxLCBkc3BpLT53YWl0ZmxhZ3MpKQotCQlkZXZfZXJyKCZkc3BpLT5wZGV2LT5kZXYsICJ3YWl0IHRyYW5zZmVyIGNvbXBsZXRlIGZhaWwhXG4iKTsKLQlkc3BpLT53YWl0ZmxhZ3MgPSAwOworCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRzcGktPndhaXRxLCBkc3BpLT53YWl0ZmxhZ3MpKQorCQkJZGV2X2VycigmZHNwaS0+cGRldi0+ZGV2LCAid2FpdCB0cmFuc2ZlciBjb21wbGV0ZSBmYWlsIVxuIik7CisJCWRzcGktPndhaXRmbGFncyA9IDA7CiAKLQlyZXR1cm4gdC0+bGVuIC0gZHNwaS0+bGVuOwotfQotCi1zdGF0aWMgdm9pZCBkc3BpX2NoaXBzZWxlY3Qoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IHZhbHVlKQotewotCXN0cnVjdCBmc2xfZHNwaSAqZHNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCXVuc2lnbmVkIGludCBwdXNocjsKLQotCXJlZ21hcF9yZWFkKGRzcGktPnJlZ21hcCwgU1BJX1BVU0hSLCAmcHVzaHIpOwotCi0Jc3dpdGNoICh2YWx1ZSkgewotCWNhc2UgQklUQkFOR19DU19BQ1RJVkU6Ci0JCXB1c2hyIHw9IFNQSV9QVVNIUl9DT05UOwotCQlicmVhazsKLQljYXNlIEJJVEJBTkdfQ1NfSU5BQ1RJVkU6Ci0JCXB1c2hyICY9IH5TUElfUFVTSFJfQ09OVDsKLQkJYnJlYWs7CisJCWlmICh0cmFuc2Zlci0+ZGVsYXlfdXNlY3MpCisJCQl1ZGVsYXkodHJhbnNmZXItPmRlbGF5X3VzZWNzKTsKIAl9CiAKLQlyZWdtYXBfd3JpdGUoZHNwaS0+cmVnbWFwLCBTUElfUFVTSFIsIHB1c2hyKTsKKwltZXNzYWdlLT5zdGF0dXMgPSBzdGF0dXM7CisJc3BpX2ZpbmFsaXplX2N1cnJlbnRfbWVzc2FnZShtYXN0ZXIpOworCisJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBkc3BpX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCitzdGF0aWMgaW50IGRzcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwOwogCXN0cnVjdCBmc2xfZHNwaSAqZHNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwogCXVuc2lnbmVkIGNoYXIgYnIgPSAwLCBwYnIgPSAwLCBmbXN6ID0gMDsKIAotCS8qIE9ubHkgYWxsb2Mgb24gZmlyc3Qgc2V0dXAgKi8KLQljaGlwID0gc3BpX2dldF9jdGxkYXRhKHNwaSk7Ci0JaWYgKGNoaXAgPT0gTlVMTCkgewotCQljaGlwID0gZGV2bV9remFsbG9jKCZzcGktPmRldiwgc2l6ZW9mKHN0cnVjdCBjaGlwX2RhdGEpLAotCQkJCSAgICBHRlBfS0VSTkVMKTsKLQkJaWYgKCFjaGlwKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JY2hpcC0+bWNyX3ZhbCA9IFNQSV9NQ1JfTUFTVEVSIHwgU1BJX01DUl9QQ1NJUyB8Ci0JCVNQSV9NQ1JfQ0xSX1RYRiB8IFNQSV9NQ1JfQ0xSX1JYRjsKIAlpZiAoKHNwaS0+Yml0c19wZXJfd29yZCA+PSA0KSAmJiAoc3BpLT5iaXRzX3Blcl93b3JkIDw9IDE2KSkgewogCQlmbXN6ID0gc3BpLT5iaXRzX3Blcl93b3JkIC0gMTsKIAl9IGVsc2UgewpAQCAtMzU3LDYgKzM1NCwxNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwkvKiBPbmx5IGFsbG9jIG9uIGZpcnN0IHNldHVwICovCisJY2hpcCA9IHNwaV9nZXRfY3RsZGF0YShzcGkpOworCWlmIChjaGlwID09IE5VTEwpIHsKKwkJY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjaGlwX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjaGlwKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJY2hpcC0+bWNyX3ZhbCA9IFNQSV9NQ1JfTUFTVEVSIHwgU1BJX01DUl9QQ1NJUyB8CisJCVNQSV9NQ1JfQ0xSX1RYRiB8IFNQSV9NQ1JfQ0xSX1JYRjsKKwogCWNoaXAtPnZvaWRfd3JpdGVfZGF0YSA9IDA7CiAKIAloel90b19zcGlfYmF1ZCgmcGJyLCAmYnIsCkBAIC0zNzQsMzQgKzM4MiwzNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRzcGlfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3N0YXRpYyB2b2lkIGRzcGlfY2xlYW51cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewotCWlmICghc3BpLT5tYXhfc3BlZWRfaHopCi0JCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBjaGlwX2RhdGEgKmNoaXAgPSBzcGlfZ2V0X2N0bGRhdGEoKHN0cnVjdCBzcGlfZGV2aWNlICopc3BpKTsKIAotCXJldHVybiBkc3BpX3NldHVwX3RyYW5zZmVyKHNwaSwgTlVMTCk7CisJZGV2X2RiZygmc3BpLT5kZXYsICJzcGlfZGV2aWNlICV1LiV1IGNsZWFudXBcbiIsCisJCQlzcGktPm1hc3Rlci0+YnVzX251bSwgc3BpLT5jaGlwX3NlbGVjdCk7CisKKwlrZnJlZShjaGlwKTsKIH0KIAogc3RhdGljIGlycXJldHVybl90IGRzcGlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgZnNsX2RzcGkgKmRzcGkgPSAoc3RydWN0IGZzbF9kc3BpICopZGV2X2lkOwogCi0JcmVnbWFwX3dyaXRlKGRzcGktPnJlZ21hcCwgU1BJX1NSLCBTUElfU1JfRU9RRik7CisJc3RydWN0IHNwaV9tZXNzYWdlICptc2cgPSBkc3BpLT5jdXJfbXNnOwogCisJcmVnbWFwX3dyaXRlKGRzcGktPnJlZ21hcCwgU1BJX1NSLCBTUElfU1JfRU9RRik7CiAJZHNwaV90cmFuc2Zlcl9yZWFkKGRzcGkpOwogCiAJaWYgKCFkc3BpLT5sZW4pIHsKIAkJaWYgKGRzcGktPmRhdGFmbGFncyAmIFRSQU5fU1RBVEVfV09SRF9PRERfTlVNKQogCQkJcmVnbWFwX3VwZGF0ZV9iaXRzKGRzcGktPnJlZ21hcCwgU1BJX0NUQVIoZHNwaS0+Y3MpLAotCQkJCVNQSV9GUkFNRV9CSVRTX01BU0ssIFNQSV9GUkFNRV9CSVRTKDE2KSk7CisJCQlTUElfRlJBTUVfQklUU19NQVNLLCBTUElfRlJBTUVfQklUUygxNikpOwogCiAJCWRzcGktPndhaXRmbGFncyA9IDE7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZHNwaS0+d2FpdHEpOwotCX0gZWxzZSB7Ci0JCWRzcGlfdHJhbnNmZXJfd3JpdGUoZHNwaSk7Ci0KLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KKwl9IGVsc2UKKwkJbXNnLT5hY3R1YWxfbGVuZ3RoICs9IGRzcGlfdHJhbnNmZXJfd3JpdGUoZHNwaSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC00NjAsMTMgKzQ2OCwxNCBAQAogCiAJZHNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKIAlkc3BpLT5wZGV2ID0gcGRldjsKLQlkc3BpLT5iaXRiYW5nLm1hc3RlciA9IG1hc3RlcjsKLQlkc3BpLT5iaXRiYW5nLmNoaXBzZWxlY3QgPSBkc3BpX2NoaXBzZWxlY3Q7Ci0JZHNwaS0+Yml0YmFuZy5zZXR1cF90cmFuc2ZlciA9IGRzcGlfc2V0dXBfdHJhbnNmZXI7Ci0JZHNwaS0+Yml0YmFuZy50eHJ4X2J1ZnMgPSBkc3BpX3R4cnhfdHJhbnNmZXI7Ci0JZHNwaS0+Yml0YmFuZy5tYXN0ZXItPnNldHVwID0gZHNwaV9zZXR1cDsKLQlkc3BpLT5iaXRiYW5nLm1hc3Rlci0+ZGV2Lm9mX25vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlkc3BpLT5tYXN0ZXIgPSBtYXN0ZXI7CiAKKwltYXN0ZXItPnRyYW5zZmVyID0gTlVMTDsKKwltYXN0ZXItPnNldHVwID0gZHNwaV9zZXR1cDsKKwltYXN0ZXItPnRyYW5zZmVyX29uZV9tZXNzYWdlID0gZHNwaV90cmFuc2Zlcl9vbmVfbWVzc2FnZTsKKwltYXN0ZXItPmRldi5vZl9ub2RlID0gcGRldi0+ZGV2Lm9mX25vZGU7CisKKwltYXN0ZXItPmNsZWFudXAgPSBkc3BpX2NsZWFudXA7CiAJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBOwogCW1hc3Rlci0+Yml0c19wZXJfd29yZF9tYXNrID0gU1BJX0JQV19NQVNLKDQpIHwgU1BJX0JQV19NQVNLKDgpIHwKIAkJCQkJU1BJX0JQV19NQVNLKDE2KTsKQEAgLTUyNSw3ICs1MzQsNyBAQAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRzcGktPndhaXRxKTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtYXN0ZXIpOwogCi0JcmV0ID0gc3BpX2JpdGJhbmdfc3RhcnQoJmRzcGktPmJpdGJhbmcpOworCXJldCA9IHNwaV9yZWdpc3Rlcl9tYXN0ZXIobWFzdGVyKTsKIAlpZiAocmV0ICE9IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiUHJvYmxlbSByZWdpc3RlcmluZyBEU1BJIG1hc3RlclxuIik7CiAJCWdvdG8gb3V0X2Nsa19wdXQ7CkBAIC01NDcsOSArNTU2LDkgQEAKIAlzdHJ1Y3QgZnNsX2RzcGkgKmRzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CiAKIAkvKiBEaXNjb25uZWN0IGZyb20gdGhlIFNQSSBmcmFtZXdvcmsgKi8KLQlzcGlfYml0YmFuZ19zdG9wKCZkc3BpLT5iaXRiYW5nKTsKIAljbGtfZGlzYWJsZV91bnByZXBhcmUoZHNwaS0+Y2xrKTsKLQlzcGlfbWFzdGVyX3B1dChkc3BpLT5iaXRiYW5nLm1hc3Rlcik7CisJc3BpX3VucmVnaXN0ZXJfbWFzdGVyKGRzcGktPm1hc3Rlcik7CisJc3BpX21hc3Rlcl9wdXQoZHNwaS0+bWFzdGVyKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWZzbC1saWIuYyBiL2RyaXZlcnMvc3BpL3NwaS1mc2wtbGliLmMKaW5kZXggNDQ2YjczNy4uY2IzNWQyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWZzbC1saWIuYworKysgYi9kcml2ZXJzL3NwaS9zcGktZnNsLWxpYi5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpZmRlZiBDT05GSUdfRlNMX1NPQwpAQCAtMzUsNyArMzYsOCBAQAogCXR5cGUgKnJ4ID0gbXBjOHh4eF9zcGktPnJ4OwkJCQkJICBcCiAJKnJ4KysgPSAodHlwZSkoZGF0YSA+PiBtcGM4eHh4X3NwaS0+cnhfc2hpZnQpOwkJCSAgXAogCW1wYzh4eHhfc3BpLT5yeCA9IHJ4OwkJCQkJCSAgXAotfQorfQkJCQkJCQkJCSAgXAorRVhQT1JUX1NZTUJPTF9HUEwobXBjOHh4eF9zcGlfcnhfYnVmXyMjdHlwZSk7CiAKICNkZWZpbmUgTVBDOFhYWF9TUElfVFhfQlVGKHR5cGUpCQkJCVwKIHUzMiBtcGM4eHh4X3NwaV90eF9idWZfIyN0eXBlKHN0cnVjdCBtcGM4eHh4X3NwaSAqbXBjOHh4eF9zcGkpCVwKQEAgLTQ3LDcgKzQ5LDggQEAKIAlkYXRhID0gKnR4KysgPDwgbXBjOHh4eF9zcGktPnR4X3NoaWZ0OwkJCVwKIAltcGM4eHh4X3NwaS0+dHggPSB0eDsJCQkJCVwKIAlyZXR1cm4gZGF0YTsJCQkJCQlcCi19Cit9CQkJCQkJCQlcCitFWFBPUlRfU1lNQk9MX0dQTChtcGM4eHh4X3NwaV90eF9idWZfIyN0eXBlKTsKIAogTVBDOFhYWF9TUElfUlhfQlVGKHU4KQogTVBDOFhYWF9TUElfUlhfQlVGKHUxNikKQEAgLTYwLDYgKzYzLDcgQEAKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKHBkYXRhLCBzdHJ1Y3QgbXBjOHh4eF9zcGlfcHJvYmVfaW5mbywgcGRhdGEpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodG9fb2ZfcGluZm8pOwogCiBjb25zdCBjaGFyICptcGM4eHh4X3NwaV9zdHJtb2RlKHVuc2lnbmVkIGludCBmbGFncykKIHsKQEAgLTc1LDYgKzc5LDcgQEAKIAl9CiAJcmV0dXJuICJDUFUiOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobXBjOHh4eF9zcGlfc3RybW9kZSk7CiAKIHZvaWQgbXBjOHh4eF9zcGlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcmVzb3VyY2UgKm1lbSwKIAkJCXVuc2lnbmVkIGludCBpcnEpCkBAIC0xMDIsMTMgKzEwNywxMiBAQAogCW1wYzh4eHhfc3BpLT5yeF9zaGlmdCA9IDA7CiAJbXBjOHh4eF9zcGktPnR4X3NoaWZ0ID0gMDsKIAotCWluaXRfY29tcGxldGlvbigmbXBjOHh4eF9zcGktPmRvbmUpOwotCiAJbWFzdGVyLT5idXNfbnVtID0gcGRhdGEtPmJ1c19udW07CiAJbWFzdGVyLT5udW1fY2hpcHNlbGVjdCA9IHBkYXRhLT5tYXhfY2hpcHNlbGVjdDsKIAogCWluaXRfY29tcGxldGlvbigmbXBjOHh4eF9zcGktPmRvbmUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobXBjOHh4eF9zcGlfcHJvYmUpOwogCiBpbnQgbXBjOHh4eF9zcGlfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTEyNyw2ICsxMzEsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChtcGM4eHh4X3NwaV9yZW1vdmUpOwogCiBpbnQgb2ZfbXBjOHh4eF9zcGlfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpCiB7CkBAIC0xNzMsMyArMTc4LDYgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwob2ZfbXBjOHh4eF9zcGlfcHJvYmUpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZnNsLWxpYi5oIGIvZHJpdmVycy9zcGkvc3BpLWZzbC1saWIuaAppbmRleCBiNGVkMDRlLi4xMzI2YTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktZnNsLWxpYi5oCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1mc2wtbGliLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAkvKiByeCAmIHR4IGJ1ZnMgZnJvbSB0aGUgc3BpX3RyYW5zZmVyICovCiAJY29uc3Qgdm9pZCAqdHg7CiAJdm9pZCAqcng7Ci0jaWZkZWYgQ09ORklHX1NQSV9GU0xfRVNQSQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NQSV9GU0xfRVNQSSkKIAlpbnQgbGVuOwogI2VuZGlmCiAKQEAgLTY4LDcgKzY4LDcgQEAKIAogCXVuc2lnbmVkIGludCBmbGFnczsKIAotI2lmZGVmIENPTkZJR19TUElfRlNMX1NQSQorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NQSV9GU0xfU1BJKQogCWludCB0eXBlOwogCWludCBuYXRpdmVfY2hpcHNlbGVjdHM7CiAJdTggbWF4X2JpdHNfcGVyX3dvcmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktZ3Bpby5jIGIvZHJpdmVycy9zcGkvc3BpLWdwaW8uYwppbmRleCBhZWU0ZTc1Li4xYzM0YzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktZ3Bpby5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1ncGlvLmMKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC05Miw3ICs4OCw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNwaV9ncGlvICogX19wdXJlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzcGlfZ3BpbyAqX19wdXJlCiBzcGlfdG9fc3BpX2dwaW8oY29uc3Qgc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAljb25zdCBzdHJ1Y3Qgc3BpX2JpdGJhbmcJKmJhbmc7CkBAIC0xMDMsNyArOTksNyBAQAogCXJldHVybiBzcGlfZ3BpbzsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3BpX2dwaW9fcGxhdGZvcm1fZGF0YSAqIF9fcHVyZQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3BpX2dwaW9fcGxhdGZvcm1fZGF0YSAqX19wdXJlCiBzcGlfdG9fcGRhdGEoY29uc3Qgc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKIHsKIAlyZXR1cm4gJnNwaV90b19zcGlfZ3BpbyhzcGkpLT5wZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1pbWctc3BmaS5jIGIvZHJpdmVycy9zcGkvc3BpLWltZy1zcGZpLmMKaW5kZXggYWFkNjY4My4uYzAxNTY3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWltZy1zcGZpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWltZy1zcGZpLmMKQEAgLTE2MCwxNiArMTYwLDE2IEBACiAJdW5zaWduZWQgaW50IGNvdW50ID0gMDsKIAl1MzIgc3RhdHVzOwogCi0Jd2hpbGUgKGNvdW50IDwgbWF4KSB7CisJd2hpbGUgKGNvdW50IDwgbWF4IC8gNCkgewogCQlzcGZpX3dyaXRlbChzcGZpLCBTUEZJX0lOVEVSUlVQVF9TREZVTCwgU1BGSV9JTlRFUlJVUFRfQ0xFQVIpOwogCQlzdGF0dXMgPSBzcGZpX3JlYWRsKHNwZmksIFNQRklfSU5URVJSVVBUX1NUQVRVUyk7CiAJCWlmIChzdGF0dXMgJiBTUEZJX0lOVEVSUlVQVF9TREZVTCkKIAkJCWJyZWFrOwotCQlzcGZpX3dyaXRlbChzcGZpLCBidWZbY291bnQgLyA0XSwgU1BGSV9UWF8zMkJJVF9WQUxJRF9EQVRBKTsKLQkJY291bnQgKz0gNDsKKwkJc3BmaV93cml0ZWwoc3BmaSwgYnVmW2NvdW50XSwgU1BGSV9UWF8zMkJJVF9WQUxJRF9EQVRBKTsKKwkJY291bnQrKzsKIAl9CiAKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIGNvdW50ICogNDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBzcGZpX3Bpb193cml0ZTgoc3RydWN0IGltZ19zcGZpICpzcGZpLCBjb25zdCB1OCAqYnVmLApAQCAtMTk2LDE3ICsxOTYsMTcgQEAKIAl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwogCXUzMiBzdGF0dXM7CiAKLQl3aGlsZSAoY291bnQgPCBtYXgpIHsKKwl3aGlsZSAoY291bnQgPCBtYXggLyA0KSB7CiAJCXNwZmlfd3JpdGVsKHNwZmksIFNQRklfSU5URVJSVVBUX0dERVgzMkJJVCwKIAkJCSAgICBTUEZJX0lOVEVSUlVQVF9DTEVBUik7CiAJCXN0YXR1cyA9IHNwZmlfcmVhZGwoc3BmaSwgU1BGSV9JTlRFUlJVUFRfU1RBVFVTKTsKIAkJaWYgKCEoc3RhdHVzICYgU1BGSV9JTlRFUlJVUFRfR0RFWDMyQklUKSkKIAkJCWJyZWFrOwotCQlidWZbY291bnQgLyA0XSA9IHNwZmlfcmVhZGwoc3BmaSwgU1BGSV9SWF8zMkJJVF9WQUxJRF9EQVRBKTsKLQkJY291bnQgKz0gNDsKKwkJYnVmW2NvdW50XSA9IHNwZmlfcmVhZGwoc3BmaSwgU1BGSV9SWF8zMkJJVF9WQUxJRF9EQVRBKTsKKwkJY291bnQrKzsKIAl9CiAKLQlyZXR1cm4gY291bnQ7CisJcmV0dXJuIGNvdW50ICogNDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBzcGZpX3Bpb19yZWFkOChzdHJ1Y3QgaW1nX3NwZmkgKnNwZmksIHU4ICpidWYsCkBAIC0yNTEsMTcgKzI1MSwxNSBAQAogCSAgICAgICB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgewogCQl1bnNpZ25lZCBpbnQgdHhfY291bnQsIHJ4X2NvdW50OwogCi0JCXN3aXRjaCAoeGZlci0+Yml0c19wZXJfd29yZCkgewotCQljYXNlIDMyOgorCQlpZiAodHhfYnl0ZXMgPj0gNCkKIAkJCXR4X2NvdW50ID0gc3BmaV9waW9fd3JpdGUzMihzcGZpLCB0eF9idWYsIHR4X2J5dGVzKTsKLQkJCXJ4X2NvdW50ID0gc3BmaV9waW9fcmVhZDMyKHNwZmksIHJ4X2J1ZiwgcnhfYnl0ZXMpOwotCQkJYnJlYWs7Ci0JCWNhc2UgODoKLQkJZGVmYXVsdDoKKwkJZWxzZQogCQkJdHhfY291bnQgPSBzcGZpX3Bpb193cml0ZTgoc3BmaSwgdHhfYnVmLCB0eF9ieXRlcyk7CisKKwkJaWYgKHJ4X2J5dGVzID49IDQpCisJCQlyeF9jb3VudCA9IHNwZmlfcGlvX3JlYWQzMihzcGZpLCByeF9idWYsIHJ4X2J5dGVzKTsKKwkJZWxzZQogCQkJcnhfY291bnQgPSBzcGZpX3Bpb19yZWFkOChzcGZpLCByeF9idWYsIHJ4X2J5dGVzKTsKLQkJCWJyZWFrOwotCQl9CiAKIAkJdHhfYnVmICs9IHR4X2NvdW50OwogCQlyeF9idWYgKz0gcnhfY291bnQ7CkBAIC0zMzEsMTQgKzMyOSwxMSBAQAogCiAJaWYgKHhmZXItPnJ4X2J1ZikgewogCQlyeGNvbmYuZGlyZWN0aW9uID0gRE1BX0RFVl9UT19NRU07Ci0JCXN3aXRjaCAoeGZlci0+Yml0c19wZXJfd29yZCkgewotCQljYXNlIDMyOgorCQlpZiAoeGZlci0+bGVuICUgNCA9PSAwKSB7CiAJCQlyeGNvbmYuc3JjX2FkZHIgPSBzcGZpLT5waHlzICsgU1BGSV9SWF8zMkJJVF9WQUxJRF9EQVRBOwogCQkJcnhjb25mLnNyY19hZGRyX3dpZHRoID0gNDsKIAkJCXJ4Y29uZi5zcmNfbWF4YnVyc3QgPSA0OwotCQkJYnJlYWs7Ci0JCWNhc2UgODoKLQkJZGVmYXVsdDoKKwkJfSBlbHNlIHsKIAkJCXJ4Y29uZi5zcmNfYWRkciA9IHNwZmktPnBoeXMgKyBTUEZJX1JYXzhCSVRfVkFMSURfREFUQTsKIAkJCXJ4Y29uZi5zcmNfYWRkcl93aWR0aCA9IDE7CiAJCQlyeGNvbmYuc3JjX21heGJ1cnN0ID0gNDsKQEAgLTM1OCwxOCArMzUzLDE0IEBACiAKIAlpZiAoeGZlci0+dHhfYnVmKSB7CiAJCXR4Y29uZi5kaXJlY3Rpb24gPSBETUFfTUVNX1RPX0RFVjsKLQkJc3dpdGNoICh4ZmVyLT5iaXRzX3Blcl93b3JkKSB7Ci0JCWNhc2UgMzI6CisJCWlmICh4ZmVyLT5sZW4gJSA0ID09IDApIHsKIAkJCXR4Y29uZi5kc3RfYWRkciA9IHNwZmktPnBoeXMgKyBTUEZJX1RYXzMyQklUX1ZBTElEX0RBVEE7CiAJCQl0eGNvbmYuZHN0X2FkZHJfd2lkdGggPSA0OwogCQkJdHhjb25mLmRzdF9tYXhidXJzdCA9IDQ7Ci0JCQlicmVhazsKLQkJY2FzZSA4OgotCQlkZWZhdWx0OgorCQl9IGVsc2UgewogCQkJdHhjb25mLmRzdF9hZGRyID0gc3BmaS0+cGh5cyArIFNQRklfVFhfOEJJVF9WQUxJRF9EQVRBOwogCQkJdHhjb25mLmRzdF9hZGRyX3dpZHRoID0gMTsKIAkJCXR4Y29uZi5kc3RfbWF4YnVyc3QgPSA0OwotCQkJYnJlYWs7CiAJCX0KIAkJZG1hZW5naW5lX3NsYXZlX2NvbmZpZyhzcGZpLT50eF9jaCwgJnR4Y29uZik7CiAKQEAgLTUwOCw5ICs0OTksNyBAQAogc3RhdGljIGJvb2wgaW1nX3NwZmlfY2FuX2RtYShzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyLCBzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAogCQkJICAgICBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyKQogewotCWlmICh4ZmVyLT5iaXRzX3Blcl93b3JkID09IDggJiYgeGZlci0+bGVuID4gU1BGSV84QklUX0ZJRk9fU0laRSkKLQkJcmV0dXJuIHRydWU7Ci0JaWYgKHhmZXItPmJpdHNfcGVyX3dvcmQgPT0gMzIgJiYgeGZlci0+bGVuID4gU1BGSV8zMkJJVF9GSUZPX1NJWkUpCisJaWYgKHhmZXItPmxlbiA+IFNQRklfMzJCSVRfRklGT19TSVpFKQogCQlyZXR1cm4gdHJ1ZTsKIAlyZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktaW14LmMgYi9kcml2ZXJzL3NwaS9zcGktaW14LmMKaW5kZXggOTYxYjk3ZC4uNmZlYTRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLWlteC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1pbXguYwpAQCAtODksNyArODksNiBAQAogCiAJc3RydWN0IGNvbXBsZXRpb24geGZlcl9kb25lOwogCXZvaWQgX19pb21lbSAqYmFzZTsKLQlpbnQgaXJxOwogCXN0cnVjdCBjbGsgKmNsa19wZXI7CiAJc3RydWN0IGNsayAqY2xrX2lwZzsKIAl1bnNpZ25lZCBsb25nIHNwaV9jbGs7CkBAIC04MjMsNiArODIyLDEwIEBACiAJc3RydWN0IGRtYV9zbGF2ZV9jb25maWcgc2xhdmVfY29uZmlnID0ge307CiAJaW50IHJldDsKIAorCS8qIHVzZSBwaW8gbW9kZSBmb3IgaS5teDZkbCBjaGlwIFRLVDIzODI4NSAqLworCWlmIChvZl9tYWNoaW5lX2lzX2NvbXBhdGlibGUoImZzbCxpbXg2ZGwiKSkKKwkJcmV0dXJuIDA7CisKIAkvKiBQcmVwYXJlIGZvciBUWCBETUE6ICovCiAJbWFzdGVyLT5kbWFfdHggPSBkbWFfcmVxdWVzdF9zbGF2ZV9jaGFubmVsKGRldiwgInR4Iik7CiAJaWYgKCFtYXN0ZXItPmRtYV90eCkgewpAQCAtODkyLDYgKzg5NSw3IEBACiB7CiAJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjX3R4ID0gTlVMTCwgKmRlc2NfcnggPSBOVUxMOwogCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCXUzMiBkbWE7CiAJaW50IGxlZnQ7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IHNwaV9pbXgtPmJpdGJhbmcubWFzdGVyOwpAQCAtOTM5LDE3ICs5NDMsMTcgQEAKIAlkbWFfYXN5bmNfaXNzdWVfcGVuZGluZyhtYXN0ZXItPmRtYV90eCk7CiAJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcobWFzdGVyLT5kbWFfcngpOwogCS8qIFdhaXQgU0RNQSB0byBmaW5pc2ggdGhlIGRhdGEgdHJhbnNmZXIuKi8KLQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnNwaV9pbXgtPmRtYV90eF9jb21wbGV0aW9uLAorCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnNwaV9pbXgtPmRtYV90eF9jb21wbGV0aW9uLAogCQkJCQkJSU1YX0RNQV9USU1FT1VUKTsKLQlpZiAoIXJldCkgeworCWlmICghdGltZW91dCkgewogCQlwcl93YXJuKCIlcyAlczogSS9PIEVycm9yIGluIERNQSBUWFxuIiwKIAkJCWRldl9kcml2ZXJfc3RyaW5nKCZtYXN0ZXItPmRldiksCiAJCQlkZXZfbmFtZSgmbWFzdGVyLT5kZXYpKTsKIAkJZG1hZW5naW5lX3Rlcm1pbmF0ZV9hbGwobWFzdGVyLT5kbWFfdHgpOwogCX0gZWxzZSB7Ci0JCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc3BpX2lteC0+ZG1hX3J4X2NvbXBsZXRpb24sCi0JCQkJSU1YX0RNQV9USU1FT1VUKTsKLQkJaWYgKCFyZXQpIHsKKwkJdGltZW91dCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgKKwkJCQkmc3BpX2lteC0+ZG1hX3J4X2NvbXBsZXRpb24sIElNWF9ETUFfVElNRU9VVCk7CisJCWlmICghdGltZW91dCkgewogCQkJcHJfd2FybigiJXMgJXM6IEkvTyBFcnJvciBpbiBETUEgUlhcbiIsCiAJCQkJZGV2X2RyaXZlcl9zdHJpbmcoJm1hc3Rlci0+ZGV2KSwKIAkJCQlkZXZfbmFtZSgmbWFzdGVyLT5kZXYpKTsKQEAgLTk2NCw5ICs5NjgsOSBAQAogCXNwaV9pbXgtPmRtYV9maW5pc2hlZCA9IDE7CiAJc3BpX2lteC0+ZGV2dHlwZV9kYXRhLT50cmlnZ2VyKHNwaV9pbXgpOwogCi0JaWYgKCFyZXQpCisJaWYgKCF0aW1lb3V0KQogCQlyZXQgPSAtRVRJTUVET1VUOwotCWVsc2UgaWYgKHJldCA+IDApCisJZWxzZQogCQlyZXQgPSB0cmFuc2Zlci0+bGVuOwogCiAJcmV0dXJuIHJldDsKQEAgLTEwNzYsNyArMTA4MCw3IEBACiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcjsKIAlzdHJ1Y3Qgc3BpX2lteF9kYXRhICpzcGlfaW14OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCBpLCByZXQsIG51bV9jczsKKwlpbnQgaSwgcmV0LCBudW1fY3MsIGlycTsKIAogCWlmICghbnAgJiYgIW14Y19wbGF0Zm9ybV9pbmZvKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCB0aGUgcGxhdGZvcm0gZGF0YVxuIik7CkBAIC0xMTQzLDE2ICsxMTQ3LDE2IEBACiAJCWdvdG8gb3V0X21hc3Rlcl9wdXQ7CiAJfQogCi0Jc3BpX2lteC0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoc3BpX2lteC0+aXJxIDwgMCkgewotCQlyZXQgPSBzcGlfaW14LT5pcnE7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlyZXQgPSBpcnE7CiAJCWdvdG8gb3V0X21hc3Rlcl9wdXQ7CiAJfQogCi0JcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBzcGlfaW14LT5pcnEsIHNwaV9pbXhfaXNyLCAwLAorCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJxLCBzcGlfaW14X2lzciwgMCwKIAkJCSAgICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgc3BpX2lteCk7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBnZXQgaXJxJWQ6ICVkXG4iLCBzcGlfaW14LT5pcnEsIHJldCk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGdldCBpcnElZDogJWRcbiIsIGlycSwgcmV0KTsKIAkJZ290byBvdXRfbWFzdGVyX3B1dDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMgYi9kcml2ZXJzL3NwaS9zcGktbG03MGxscC5jCmluZGV4IDQxYzU3NjUuLmJhNzIzNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1sbTcwbGxwLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLWxtNzBsbHAuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1tZXNvbi1zcGlmYy5jIGIvZHJpdmVycy9zcGkvc3BpLW1lc29uLXNwaWZjLmMKaW5kZXggMWJiYWMwMy4uNTQ2OGZjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLW1lc29uLXNwaWZjLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLW1lc29uLXNwaWZjLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiB9OwogCi1zdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgc3BpZmNfcmVnbWFwX2NvbmZpZyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBzcGlmY19yZWdtYXBfY29uZmlnID0gewogCS5yZWdfYml0cyA9IDMyLAogCS52YWxfYml0cyA9IDMyLAogCS5yZWdfc3RyaWRlID0gNCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1teHMuYyBiL2RyaXZlcnMvc3BpL3NwaS1teHMuYwppbmRleCA0MDQ1YTFlLi41YjBlOWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktbXhzLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLW14cy5jCkBAIC0yODIsOSArMjgyLDggQEAKIAlkbWFlbmdpbmVfc3VibWl0KGRlc2MpOwogCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHNzcC0+ZG1hY2gpOwogCi0JcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzcGktPmMsCi0JCQkJbXNlY3NfdG9famlmZmllcyhTU1BfVElNRU9VVCkpOwotCWlmICghcmV0KSB7CisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnNwaS0+YywKKwkJCQkJIG1zZWNzX3RvX2ppZmZpZXMoU1NQX1RJTUVPVVQpKSkgewogCQlkZXZfZXJyKHNzcC0+ZGV2LCAiRE1BIHRyYW5zZmVyIHRpbWVvdXRcbiIpOwogCQlyZXQgPSAtRVRJTUVET1VUOwogCQlkbWFlbmdpbmVfdGVybWluYXRlX2FsbChzc3AtPmRtYWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1vbWFwLTEwMGsuYyBiL2RyaXZlcnMvc3BpL3NwaS1vbWFwLTEwMGsuYwppbmRleCA3OTM5OWFlLi5kODkwZDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktb21hcC0xMDBrLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLW9tYXAtMTAway5jCkBAIC0xNiwxMSArMTYsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0gKgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLW9tYXAtdXdpcmUuYyBiL2RyaXZlcnMvc3BpL3NwaS1vbWFwLXV3aXJlLmMKaW5kZXggZGFmMWFkYS4uM2MwODQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLW9tYXAtdXdpcmUuYworKysgYi9kcml2ZXJzL3NwaS9zcGktb21hcC11d2lyZS5jCkBAIC0yOCwxMCArMjgsNiBAQAogICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLW9tYXAyLW1jc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGktb21hcDItbWNzcGkuYwppbmRleCAzYmMzY2JhLi40ZGY4OTQyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLW9tYXAyLW1jc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLW9tYXAyLW1jc3BpLmMKQEAgLTE0LDExICsxNCw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKLSAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLW9yaW9uLmMgYi9kcml2ZXJzL3NwaS9zcGktb3Jpb24uYwppbmRleCAzZGVjOWUwLi44NjE2NjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktb3Jpb24uYworKysgYi9kcml2ZXJzL3NwaS9zcGktb3Jpb24uYwpAQCAtMjgsNyArMjgsMTIgQEAKIC8qIFJ1bnRpbWUgUE0gYXV0b3N1c3BlbmQgdGltZW91dDogUE0gaXMgZmFpcmx5IGxpZ2h0IG9uIHRoaXMgZHJpdmVyICovCiAjZGVmaW5lIFNQSV9BVVRPU1VTUEVORF9USU1FT1VUCQkyMDAKIAotI2RlZmluZSBPUklPTl9OVU1fQ0hJUFNFTEVDVFMJCTEgLyogb25seSBvbmUgc2xhdmUgaXMgc3VwcG9ydGVkKi8KKy8qIFNvbWUgU29DcyB1c2luZyB0aGlzIGRyaXZlciBzdXBwb3J0IHVwIHRvIDggY2hpcCBzZWxlY3RzLgorICogSXQgaXMgdXAgdG8gdGhlIGltcGxlbWVudGVyIHRvIG9ubHkgdXNlIHRoZSBjaGlwIHNlbGVjdHMKKyAqIHRoYXQgYXJlIGF2YWlsYWJsZS4KKyAqLworI2RlZmluZSBPUklPTl9OVU1fQ0hJUFNFTEVDVFMJCTgKKwogI2RlZmluZSBPUklPTl9TUElfV0FJVF9SRFlfTUFYX0xPT1AJMjAwMCAvKiBpbiB1c2VjICovCiAKICNkZWZpbmUgT1JJT05fU1BJX0lGX0NUUkxfUkVHCQkweDAwCkBAIC00NCw2ICs0OSwxMCBAQAogI2RlZmluZSBBUk1BREFfU1BJX0NMS19QUkVTQ0FMRV9NQVNLCTB4REYKICNkZWZpbmUgT1JJT05fU1BJX01PREVfTUFTSwkJKE9SSU9OX1NQSV9NT0RFX0NQT0wgfCBcCiAJCQkJCSBPUklPTl9TUElfTU9ERV9DUEhBKQorI2RlZmluZSBPUklPTl9TUElfQ1NfTUFTSwkweDFDCisjZGVmaW5lIE9SSU9OX1NQSV9DU19TSElGVAkyCisjZGVmaW5lIE9SSU9OX1NQSV9DUyhjcykJKChjcyA8PCBPUklPTl9TUElfQ1NfU0hJRlQpICYgXAorCQkJCQlPUklPTl9TUElfQ1NfTUFTSykKIAogZW51bSBvcmlvbl9zcGlfdHlwZSB7CiAJT1JJT05fU1BJLApAQCAtMjE1LDkgKzIyNCwxOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBvcmlvbl9zcGlfc2V0X2NzKHN0cnVjdCBvcmlvbl9zcGkgKm9yaW9uX3NwaSwgaW50IGVuYWJsZSkKK3N0YXRpYyB2b2lkIG9yaW9uX3NwaV9zZXRfY3Moc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgYm9vbCBlbmFibGUpCiB7Ci0JaWYgKGVuYWJsZSkKKwlzdHJ1Y3Qgb3Jpb25fc3BpICpvcmlvbl9zcGk7CisKKwlvcmlvbl9zcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCW9yaW9uX3NwaV9jbHJiaXRzKG9yaW9uX3NwaSwgT1JJT05fU1BJX0lGX0NUUkxfUkVHLCBPUklPTl9TUElfQ1NfTUFTSyk7CisJb3Jpb25fc3BpX3NldGJpdHMob3Jpb25fc3BpLCBPUklPTl9TUElfSUZfQ1RSTF9SRUcsCisJCQkJT1JJT05fU1BJX0NTKHNwaS0+Y2hpcF9zZWxlY3QpKTsKKworCS8qIENoaXAgc2VsZWN0IGxvZ2ljIGlzIGludmVydGVkIGZyb20gc3BpX3NldF9jcyAqLworCWlmICghZW5hYmxlKQogCQlvcmlvbl9zcGlfc2V0Yml0cyhvcmlvbl9zcGksIE9SSU9OX1NQSV9JRl9DVFJMX1JFRywgMHgxKTsKIAllbHNlCiAJCW9yaW9uX3NwaV9jbHJiaXRzKG9yaW9uX3NwaSwgT1JJT05fU1BJX0lGX0NUUkxfUkVHLCAweDEpOwpAQCAtMzMyLDY0ICszNTAsMzEgQEAKIAlyZXR1cm4geGZlci0+bGVuIC0gY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgb3Jpb25fc3BpX3RyYW5zZmVyX29uZV9tZXNzYWdlKHN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIsCi0JCQkJCSAgIHN0cnVjdCBzcGlfbWVzc2FnZSAqbSkKK3N0YXRpYyBpbnQgb3Jpb25fc3BpX3RyYW5zZmVyX29uZShzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyLAorCQkJCQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCQlzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQogewotCXN0cnVjdCBvcmlvbl9zcGkgKm9yaW9uX3NwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gbS0+c3BpOwotCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQgPSBOVUxMOwotCWludCBwYXJfb3ZlcnJpZGUgPSAwOwogCWludCBzdGF0dXMgPSAwOwotCWludCBjc19hY3RpdmUgPSAwOwogCi0JLyogTG9hZCBkZWZhdWx0cyAqLwotCXN0YXR1cyA9IG9yaW9uX3NwaV9zZXR1cF90cmFuc2ZlcihzcGksIE5VTEwpOwotCisJc3RhdHVzID0gb3Jpb25fc3BpX3NldHVwX3RyYW5zZmVyKHNwaSwgdCk7CiAJaWYgKHN0YXR1cyA8IDApCi0JCWdvdG8gbXNnX2RvbmU7CisJCXJldHVybiBzdGF0dXM7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZtLT50cmFuc2ZlcnMsIHRyYW5zZmVyX2xpc3QpIHsKLQkJaWYgKHBhcl9vdmVycmlkZSB8fCB0LT5zcGVlZF9oeiB8fCB0LT5iaXRzX3Blcl93b3JkKSB7Ci0JCQlwYXJfb3ZlcnJpZGUgPSAxOwotCQkJc3RhdHVzID0gb3Jpb25fc3BpX3NldHVwX3RyYW5zZmVyKHNwaSwgdCk7Ci0JCQlpZiAoc3RhdHVzIDwgMCkKLQkJCQlicmVhazsKLQkJCWlmICghdC0+c3BlZWRfaHogJiYgIXQtPmJpdHNfcGVyX3dvcmQpCi0JCQkJcGFyX292ZXJyaWRlID0gMDsKLQkJfQorCWlmICh0LT5sZW4pCisJCW9yaW9uX3NwaV93cml0ZV9yZWFkKHNwaSwgdCk7CiAKLQkJaWYgKCFjc19hY3RpdmUpIHsKLQkJCW9yaW9uX3NwaV9zZXRfY3Mob3Jpb25fc3BpLCAxKTsKLQkJCWNzX2FjdGl2ZSA9IDE7Ci0JCX0KKwlyZXR1cm4gc3RhdHVzOworfQogCi0JCWlmICh0LT5sZW4pCi0JCQltLT5hY3R1YWxfbGVuZ3RoICs9IG9yaW9uX3NwaV93cml0ZV9yZWFkKHNwaSwgdCk7Ci0KLQkJaWYgKHQtPmRlbGF5X3VzZWNzKQotCQkJdWRlbGF5KHQtPmRlbGF5X3VzZWNzKTsKLQotCQlpZiAodC0+Y3NfY2hhbmdlKSB7Ci0JCQlvcmlvbl9zcGlfc2V0X2NzKG9yaW9uX3NwaSwgMCk7Ci0JCQljc19hY3RpdmUgPSAwOwotCQl9Ci0JfQotCi1tc2dfZG9uZToKLQlpZiAoY3NfYWN0aXZlKQotCQlvcmlvbl9zcGlfc2V0X2NzKG9yaW9uX3NwaSwgMCk7Ci0KLQltLT5zdGF0dXMgPSBzdGF0dXM7Ci0Jc3BpX2ZpbmFsaXplX2N1cnJlbnRfbWVzc2FnZShtYXN0ZXIpOwotCi0JcmV0dXJuIDA7CitzdGF0aWMgaW50IG9yaW9uX3NwaV9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXJldHVybiBvcmlvbl9zcGlfc2V0dXBfdHJhbnNmZXIoc3BpLCBOVUxMKTsKIH0KIAogc3RhdGljIGludCBvcmlvbl9zcGlfcmVzZXQoc3RydWN0IG9yaW9uX3NwaSAqb3Jpb25fc3BpKQogewogCS8qIFZlcmlmeSB0aGF0IHRoZSBDUyBpcyBkZWFzc2VydGVkICovCi0Jb3Jpb25fc3BpX3NldF9jcyhvcmlvbl9zcGksIDApOwotCisJb3Jpb25fc3BpX2NscmJpdHMob3Jpb25fc3BpLCBPUklPTl9TUElfSUZfQ1RSTF9SRUcsIDB4MSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0Miw5ICs0MjcsMTAgQEAKIAogCS8qIHdlIHN1cHBvcnQgb25seSBtb2RlIDAsIGFuZCBubyBvcHRpb25zICovCiAJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BIQSB8IFNQSV9DUE9MOwotCi0JbWFzdGVyLT50cmFuc2Zlcl9vbmVfbWVzc2FnZSA9IG9yaW9uX3NwaV90cmFuc2Zlcl9vbmVfbWVzc2FnZTsKKwltYXN0ZXItPnNldF9jcyA9IG9yaW9uX3NwaV9zZXRfY3M7CisJbWFzdGVyLT50cmFuc2Zlcl9vbmUgPSBvcmlvbl9zcGlfdHJhbnNmZXJfb25lOwogCW1hc3Rlci0+bnVtX2NoaXBzZWxlY3QgPSBPUklPTl9OVU1fQ0hJUFNFTEVDVFM7CisJbWFzdGVyLT5zZXR1cCA9IG9yaW9uX3NwaV9zZXR1cDsKIAltYXN0ZXItPmJpdHNfcGVyX3dvcmRfbWFzayA9IFNQSV9CUFdfTUFTSyg4KSB8IFNQSV9CUFdfTUFTSygxNik7CiAJbWFzdGVyLT5hdXRvX3J1bnRpbWVfcG0gPSB0cnVlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LWRtYS5jIGIvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC1kbWEuYwppbmRleCA2MmE5Mjk3Li42NmExNzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LWRtYS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1weGEyeHgtZG1hLmMKQEAgLTExMSwyMyArMTExLDI0IEBACiAJICogYnkgdXNpbmcgLT5kbWFfcnVubmluZy4KIAkgKi8KIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZHJ2X2RhdGEtPmRtYV9ydW5uaW5nKSkgewotCQl2b2lkIF9faW9tZW0gKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7Ci0KIAkJLyoKIAkJICogSWYgdGhlIG90aGVyIENQVSBpcyBzdGlsbCBoYW5kbGluZyB0aGUgUk9SIGludGVycnVwdCB3ZQogCQkgKiBtaWdodCBub3Qga25vdyBhYm91dCB0aGUgZXJyb3IgeWV0LiBTbyB3ZSByZS1jaGVjayB0aGUKIAkJICogUk9SIGJpdCBoZXJlIGJlZm9yZSB3ZSBjbGVhciB0aGUgc3RhdHVzIHJlZ2lzdGVyLgogCQkgKi8KIAkJaWYgKCFlcnJvcikgewotCQkJdTMyIHN0YXR1cyA9IHJlYWRfU1NTUihyZWcpICYgZHJ2X2RhdGEtPm1hc2tfc3I7CisJCQl1MzIgc3RhdHVzID0gcHhhMnh4X3NwaV9yZWFkKGRydl9kYXRhLCBTU1NSKQorCQkJCSAgICAgJiBkcnZfZGF0YS0+bWFza19zcjsKIAkJCWVycm9yID0gc3RhdHVzICYgU1NTUl9ST1I7CiAJCX0KIAogCQkvKiBDbGVhciBzdGF0dXMgJiBkaXNhYmxlIGludGVycnVwdHMgKi8KLQkJd3JpdGVfU1NDUjEocmVhZF9TU0NSMShyZWcpICYgfmRydl9kYXRhLT5kbWFfY3IxLCByZWcpOworCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU0NSMSwKKwkJCQkgcHhhMnh4X3NwaV9yZWFkKGRydl9kYXRhLCBTU0NSMSkKKwkJCQkgJiB+ZHJ2X2RhdGEtPmRtYV9jcjEpOwogCQl3cml0ZV9TU1NSX0NTKGRydl9kYXRhLCBkcnZfZGF0YS0+Y2xlYXJfc3IpOwogCQlpZiAoIXB4YTI1eF9zc3BfY29tcChkcnZfZGF0YSkpCi0JCQl3cml0ZV9TU1RPKDAsIHJlZyk7CisJCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU1RPLCAwKTsKIAogCQlpZiAoIWVycm9yKSB7CiAJCQlweGEyeHhfc3BpX3VubWFwX2RtYV9idWZmZXJzKGRydl9kYXRhKTsKQEAgLTEzOSw3ICsxNDAsOSBAQAogCQkJbXNnLT5zdGF0ZSA9IHB4YTJ4eF9zcGlfbmV4dF90cmFuc2ZlcihkcnZfZGF0YSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBJbiBjYXNlIHdlIGdvdCBhbiBlcnJvciB3ZSBkaXNhYmxlIHRoZSBTU1Agbm93ICovCi0JCQl3cml0ZV9TU0NSMChyZWFkX1NTQ1IwKHJlZykgJiB+U1NDUjBfU1NFLCByZWcpOworCQkJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NDUjAsCisJCQkJCSBweGEyeHhfc3BpX3JlYWQoZHJ2X2RhdGEsIFNTQ1IwKQorCQkJCQkgJiB+U1NDUjBfU1NFKTsKIAogCQkJbXNnLT5zdGF0ZSA9IEVSUk9SX1NUQVRFOwogCQl9CkBAIC0yNDcsNyArMjUwLDcgQEAKIHsKIAl1MzIgc3RhdHVzOwogCi0Jc3RhdHVzID0gcmVhZF9TU1NSKGRydl9kYXRhLT5pb2FkZHIpICYgZHJ2X2RhdGEtPm1hc2tfc3I7CisJc3RhdHVzID0gcHhhMnh4X3NwaV9yZWFkKGRydl9kYXRhLCBTU1NSKSAmIGRydl9kYXRhLT5tYXNrX3NyOwogCWlmIChzdGF0dXMgJiBTU1NSX1JPUikgewogCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAiRklGTyBvdmVycnVuXG4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC1weGFkbWEuYyBiL2RyaXZlcnMvc3BpL3NwaS1weGEyeHgtcHhhZG1hLmMKaW5kZXggZThhMjZmMi4uMmUwNzk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC1weGFkbWEuYworKysgYi9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LXB4YWRtYS5jCkBAIC0xMiwxMCArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTI1LDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3B4YTJ4eF9zcGkuaD4KIAorI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSAic3BpLXB4YTJ4eC5oIgogCiAjZGVmaW5lIERNQV9JTlRfTUFTSwkJKERDU1JfRU5ESU5UUiB8IERDU1JfU1RBUlRJTlRSIHwgRENTUl9CVVNFUlIpCkBAIC0xMTgsMTEgKzExNSwxMSBAQAogCWRydl9kYXRhLT5kbWFfbWFwcGVkID0gMDsKIH0KIAotc3RhdGljIGludCB3YWl0X3NzcF9yeF9zdGFsbCh2b2lkIGNvbnN0IF9faW9tZW0gKmlvYWRkcikKK3N0YXRpYyBpbnQgd2FpdF9zc3Bfcnhfc3RhbGwoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIGxpbWl0ID0gbG9vcHNfcGVyX2ppZmZ5IDw8IDE7CiAKLQl3aGlsZSAoKHJlYWRfU1NTUihpb2FkZHIpICYgU1NTUl9CU1kpICYmIC0tbGltaXQpCisJd2hpbGUgKChweGEyeHhfc3BpX3JlYWQoZHJ2X2RhdGEsIFNTU1IpICYgU1NTUl9CU1kpICYmIC0tbGltaXQpCiAJCWNwdV9yZWxheCgpOwogCiAJcmV0dXJuIGxpbWl0OwpAQCAtMTQxLDE3ICsxMzgsMTggQEAKIHN0YXRpYyB2b2lkIHB4YTJ4eF9zcGlfZG1hX2Vycm9yX3N0b3Aoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSwKIAkJCQkgICAgICBjb25zdCBjaGFyICptc2cpCiB7Ci0Jdm9pZCBfX2lvbWVtICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwotCiAJLyogU3RvcCBhbmQgcmVzZXQgKi8KIAlEQ1NSKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOwogCURDU1IoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpID0gUkVTRVRfRE1BX0NIQU5ORUw7CiAJd3JpdGVfU1NTUl9DUyhkcnZfZGF0YSwgZHJ2X2RhdGEtPmNsZWFyX3NyKTsKLQl3cml0ZV9TU0NSMShyZWFkX1NTQ1IxKHJlZykgJiB+ZHJ2X2RhdGEtPmRtYV9jcjEsIHJlZyk7CisJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NDUjEsCisJCQkgcHhhMnh4X3NwaV9yZWFkKGRydl9kYXRhLCBTU0NSMSkKKwkJCSAmIH5kcnZfZGF0YS0+ZG1hX2NyMSk7CiAJaWYgKCFweGEyNXhfc3NwX2NvbXAoZHJ2X2RhdGEpKQotCQl3cml0ZV9TU1RPKDAsIHJlZyk7CisJCXB4YTJ4eF9zcGlfd3JpdGUoZHJ2X2RhdGEsIFNTVE8sIDApOwogCXB4YTJ4eF9zcGlfZmx1c2goZHJ2X2RhdGEpOwotCXdyaXRlX1NTQ1IwKHJlYWRfU1NDUjAocmVnKSAmIH5TU0NSMF9TU0UsIHJlZyk7CisJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NDUjAsCisJCQkgcHhhMnh4X3NwaV9yZWFkKGRydl9kYXRhLCBTU0NSMCkgJiB+U1NDUjBfU1NFKTsKIAogCXB4YTJ4eF9zcGlfdW5tYXBfZG1hX2J1ZmZlcnMoZHJ2X2RhdGEpOwogCkBAIC0xNjMsMTEgKzE2MSwxMiBAQAogCiBzdGF0aWMgdm9pZCBweGEyeHhfc3BpX2RtYV90cmFuc2Zlcl9jb21wbGV0ZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQogewotCXZvaWQgX19pb21lbSAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZyA9IGRydl9kYXRhLT5jdXJfbXNnOwogCiAJLyogQ2xlYXIgYW5kIGRpc2FibGUgaW50ZXJydXB0cyBvbiBTU1AgYW5kIERNQSBjaGFubmVscyovCi0Jd3JpdGVfU1NDUjEocmVhZF9TU0NSMShyZWcpICYgfmRydl9kYXRhLT5kbWFfY3IxLCByZWcpOworCXB4YTJ4eF9zcGlfd3JpdGUoZHJ2X2RhdGEsIFNTQ1IxLAorCQkJIHB4YTJ4eF9zcGlfcmVhZChkcnZfZGF0YSwgU1NDUjEpCisJCQkgJiB+ZHJ2X2RhdGEtPmRtYV9jcjEpOwogCXdyaXRlX1NTU1JfQ1MoZHJ2X2RhdGEsIGRydl9kYXRhLT5jbGVhcl9zcik7CiAJRENTUihkcnZfZGF0YS0+dHhfY2hhbm5lbCkgPSBSRVNFVF9ETUFfQ0hBTk5FTDsKIAlEQ1NSKGRydl9kYXRhLT5yeF9jaGFubmVsKSA9IFJFU0VUX0RNQV9DSEFOTkVMOwpAQCAtMjI4LDcgKzIyNyw3IEBACiAJCSYmIChkcnZfZGF0YS0+c3NwX3R5cGUgPT0gUFhBMjV4X1NTUCkpIHsKIAogCQkvKiBXYWl0IGZvciByeCB0byBzdGFsbCAqLwotCQlpZiAod2FpdF9zc3Bfcnhfc3RhbGwoZHJ2X2RhdGEtPmlvYWRkcikgPT0gMCkKKwkJaWYgKHdhaXRfc3NwX3J4X3N0YWxsKGRydl9kYXRhKSA9PSAwKQogCQkJZGV2X2VycigmZHJ2X2RhdGEtPnBkZXYtPmRldiwKIAkJCQkiZG1hX2hhbmRsZXI6IHNzcCByeCBzdGFsbCBmYWlsZWRcbiIpOwogCkBAIC0yNDAsOSArMjM5LDggQEAKIGlycXJldHVybl90IHB4YTJ4eF9zcGlfZG1hX3RyYW5zZmVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCiB7CiAJdTMyIGlycV9zdGF0dXM7Ci0Jdm9pZCBfX2lvbWVtICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwogCi0JaXJxX3N0YXR1cyA9IHJlYWRfU1NTUihyZWcpICYgZHJ2X2RhdGEtPm1hc2tfc3I7CisJaXJxX3N0YXR1cyA9IHB4YTJ4eF9zcGlfcmVhZChkcnZfZGF0YSwgU1NTUikgJiBkcnZfZGF0YS0+bWFza19zcjsKIAlpZiAoaXJxX3N0YXR1cyAmIFNTU1JfUk9SKSB7CiAJCXB4YTJ4eF9zcGlfZG1hX2Vycm9yX3N0b3AoZHJ2X2RhdGEsCiAJCQkJCSAgImRtYV90cmFuc2ZlcjogZmlmbyBvdmVycnVuIik7CkBAIC0yNTIsNyArMjUwLDcgQEAKIAkvKiBDaGVjayBmb3IgZmFsc2UgcG9zaXRpdmUgdGltZW91dCAqLwogCWlmICgoaXJxX3N0YXR1cyAmIFNTU1JfVElOVCkKIAkJJiYgKERDU1IoZHJ2X2RhdGEtPnR4X2NoYW5uZWwpICYgRENTUl9SVU4pKSB7Ci0JCXdyaXRlX1NTU1IoU1NTUl9USU5ULCByZWcpOworCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU1NSLCBTU1NSX1RJTlQpOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCkBAIC0yNjEsNyArMjU5LDcgQEAKIAkJLyogQ2xlYXIgYW5kIGRpc2FibGUgdGltZW91dCBpbnRlcnJ1cHQsIGRvIHRoZSByZXN0IGluCiAJCSAqIGRtYV90cmFuc2Zlcl9jb21wbGV0ZSAqLwogCQlpZiAoIXB4YTI1eF9zc3BfY29tcChkcnZfZGF0YSkpCi0JCQl3cml0ZV9TU1RPKDAsIHJlZyk7CisJCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU1RPLCAwKTsKIAogCQkvKiBmaW5pc2ggdGhpcyB0cmFuc2Zlciwgc3RhcnQgdGhlIG5leHQgKi8KIAkJcHhhMnh4X3NwaV9kbWFfdHJhbnNmZXJfY29tcGxldGUoZHJ2X2RhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC5jIGIvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC5jCmluZGV4IDA1YzYyM2MuLjZmNzJhZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1weGEyeHguYworKysgYi9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LmMKQEAgLTExLDEwICsxMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC00NSw4ICs0MSw2IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnB4YTJ4eC1zcGkiKTsKIAotI2RlZmluZSBNQVhfQlVTRVMgMwotCiAjZGVmaW5lIFRJTU9VVF9ERkxUCQkxMDAwCiAKIC8qCkBAIC0xNjIsNyArMTU2LDYgQEAKIAogc3RhdGljIGJvb2wgcHhhMnh4X3NwaV90eGZpZm9fZnVsbChjb25zdCBzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQogewotCXZvaWQgX19pb21lbSAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKIAl1MzIgbWFzazsKIAogCXN3aXRjaCAoZHJ2X2RhdGEtPnNzcF90eXBlKSB7CkBAIC0xNzQsNyArMTY3LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIChyZWFkX1NTU1IocmVnKSAmIG1hc2spID09IG1hc2s7CisJcmV0dXJuIChweGEyeHhfc3BpX3JlYWQoZHJ2X2RhdGEsIFNTU1IpICYgbWFzaykgPT0gbWFzazsKIH0KIAogc3RhdGljIHZvaWQgcHhhMnh4X3NwaV9jbGVhcl9yeF90aHJlKGNvbnN0IHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEsCkBAIC0yNTMsOSArMjQ2LDYgQEAKIAl1bnNpZ25lZCBvZmZzZXQgPSAweDQwMDsKIAl1MzIgdmFsdWUsIG9yaWc7CiAKLQlpZiAoIWlzX2xwc3Nfc3NwKGRydl9kYXRhKSkKLQkJcmV0dXJuOwotCiAJLyoKIAkgKiBQZXJmb3JtIGF1dG8tZGV0ZWN0aW9uIG9mIHRoZSBMUFNTIFNTUCBwcml2YXRlIHJlZ2lzdGVycy4gVGhleQogCSAqIGNhbiBiZSBlaXRoZXIgYXQgMWsgb3IgMmsgb2Zmc2V0IGZyb20gdGhlIGJhc2UgYWRkcmVzcy4KQEAgLTMwNCw5ICsyOTQsNiBAQAogewogCXUzMiB2YWx1ZTsKIAotCWlmICghaXNfbHBzc19zc3AoZHJ2X2RhdGEpKQotCQlyZXR1cm47Ci0KIAl2YWx1ZSA9IF9fbHBzc19zc3BfcmVhZF9wcml2KGRydl9kYXRhLCBTUElfQ1NfQ09OVFJPTCk7CiAJaWYgKGVuYWJsZSkKIAkJdmFsdWUgJj0gflNQSV9DU19DT05UUk9MX0NTX0hJR0g7CkBAIC0zMjAsNyArMzA3LDcgQEAKIAlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwID0gZHJ2X2RhdGEtPmN1cl9jaGlwOwogCiAJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSA9PSBDRTQxMDBfU1NQKSB7Ci0JCXdyaXRlX1NTU1IoZHJ2X2RhdGEtPmN1cl9jaGlwLT5mcm0sIGRydl9kYXRhLT5pb2FkZHIpOworCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU1NSLCBkcnZfZGF0YS0+Y3VyX2NoaXAtPmZybSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTMzNCw3ICszMjEsOCBAQAogCQlyZXR1cm47CiAJfQogCi0JbHBzc19zc3BfY3NfY29udHJvbChkcnZfZGF0YSwgdHJ1ZSk7CisJaWYgKGlzX2xwc3Nfc3NwKGRydl9kYXRhKSkKKwkJbHBzc19zc3BfY3NfY29udHJvbChkcnZfZGF0YSwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNzX2RlYXNzZXJ0KHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCkBAIC0zNTQsMjAgKzM0MiwxOCBAQAogCQlyZXR1cm47CiAJfQogCi0JbHBzc19zc3BfY3NfY29udHJvbChkcnZfZGF0YSwgZmFsc2UpOworCWlmIChpc19scHNzX3NzcChkcnZfZGF0YSkpCisJCWxwc3Nfc3NwX2NzX2NvbnRyb2woZHJ2X2RhdGEsIGZhbHNlKTsKIH0KIAogaW50IHB4YTJ4eF9zcGlfZmx1c2goc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIGxpbWl0ID0gbG9vcHNfcGVyX2ppZmZ5IDw8IDE7CiAKLQl2b2lkIF9faW9tZW0gKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7Ci0KIAlkbyB7Ci0JCXdoaWxlIChyZWFkX1NTU1IocmVnKSAmIFNTU1JfUk5FKSB7Ci0JCQlyZWFkX1NTRFIocmVnKTsKLQkJfQotCX0gd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfQlNZKSAmJiAtLWxpbWl0KTsKKwkJd2hpbGUgKHB4YTJ4eF9zcGlfcmVhZChkcnZfZGF0YSwgU1NTUikgJiBTU1NSX1JORSkKKwkJCXB4YTJ4eF9zcGlfcmVhZChkcnZfZGF0YSwgU1NEUik7CisJfSB3aGlsZSAoKHB4YTJ4eF9zcGlfcmVhZChkcnZfZGF0YSwgU1NTUikgJiBTU1NSX0JTWSkgJiYgLS1saW1pdCk7CiAJd3JpdGVfU1NTUl9DUyhkcnZfZGF0YSwgU1NTUl9ST1IpOwogCiAJcmV0dXJuIGxpbWl0OwpAQCAtMzc1LDE0ICszNjEsMTMgQEAKIAogc3RhdGljIGludCBudWxsX3dyaXRlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQogewotCXZvaWQgX19pb21lbSAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKIAl1OCBuX2J5dGVzID0gZHJ2X2RhdGEtPm5fYnl0ZXM7CiAKIAlpZiAocHhhMnh4X3NwaV90eGZpZm9fZnVsbChkcnZfZGF0YSkKIAkJfHwgKGRydl9kYXRhLT50eCA9PSBkcnZfZGF0YS0+dHhfZW5kKSkKIAkJcmV0dXJuIDA7CiAKLQl3cml0ZV9TU0RSKDAsIHJlZyk7CisJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NEUiwgMCk7CiAJZHJ2X2RhdGEtPnR4ICs9IG5fYnl0ZXM7CiAKIAlyZXR1cm4gMTsKQEAgLTM5MCwxMiArMzc1LDExIEBACiAKIHN0YXRpYyBpbnQgbnVsbF9yZWFkZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKIHsKLQl2b2lkIF9faW9tZW0gKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CiAJdTggbl9ieXRlcyA9IGRydl9kYXRhLT5uX2J5dGVzOwogCi0Jd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfUk5FKQotCQkmJiAoZHJ2X2RhdGEtPnJ4IDwgZHJ2X2RhdGEtPnJ4X2VuZCkpIHsKLQkJcmVhZF9TU0RSKHJlZyk7CisJd2hpbGUgKChweGEyeHhfc3BpX3JlYWQoZHJ2X2RhdGEsIFNTU1IpICYgU1NTUl9STkUpCisJICAgICAgICYmIChkcnZfZGF0YS0+cnggPCBkcnZfZGF0YS0+cnhfZW5kKSkgeworCQlweGEyeHhfc3BpX3JlYWQoZHJ2X2RhdGEsIFNTRFIpOwogCQlkcnZfZGF0YS0+cnggKz0gbl9ieXRlczsKIAl9CiAKQEAgLTQwNCwxMyArMzg4LDExIEBACiAKIHN0YXRpYyBpbnQgdThfd3JpdGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCiB7Ci0Jdm9pZCBfX2lvbWVtICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwotCiAJaWYgKHB4YTJ4eF9zcGlfdHhmaWZvX2Z1bGwoZHJ2X2RhdGEpCiAJCXx8IChkcnZfZGF0YS0+dHggPT0gZHJ2X2RhdGEtPnR4X2VuZCkpCiAJCXJldHVybiAwOwogCi0Jd3JpdGVfU1NEUigqKHU4ICopKGRydl9kYXRhLT50eCksIHJlZyk7CisJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NEUiwgKih1OCAqKShkcnZfZGF0YS0+dHgpKTsKIAkrK2Rydl9kYXRhLT50eDsKIAogCXJldHVybiAxOwpAQCAtNDE4LDExICs0MDAsOSBAQAogCiBzdGF0aWMgaW50IHU4X3JlYWRlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQogewotCXZvaWQgX19pb21lbSAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKLQotCXdoaWxlICgocmVhZF9TU1NSKHJlZykgJiBTU1NSX1JORSkKLQkJJiYgKGRydl9kYXRhLT5yeCA8IGRydl9kYXRhLT5yeF9lbmQpKSB7Ci0JCSoodTggKikoZHJ2X2RhdGEtPnJ4KSA9IHJlYWRfU1NEUihyZWcpOworCXdoaWxlICgocHhhMnh4X3NwaV9yZWFkKGRydl9kYXRhLCBTU1NSKSAmIFNTU1JfUk5FKQorCSAgICAgICAmJiAoZHJ2X2RhdGEtPnJ4IDwgZHJ2X2RhdGEtPnJ4X2VuZCkpIHsKKwkJKih1OCAqKShkcnZfZGF0YS0+cngpID0gcHhhMnh4X3NwaV9yZWFkKGRydl9kYXRhLCBTU0RSKTsKIAkJKytkcnZfZGF0YS0+cng7CiAJfQogCkBAIC00MzEsMTMgKzQxMSwxMSBAQAogCiBzdGF0aWMgaW50IHUxNl93cml0ZXIoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSkKIHsKLQl2b2lkIF9faW9tZW0gKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7Ci0KIAlpZiAocHhhMnh4X3NwaV90eGZpZm9fZnVsbChkcnZfZGF0YSkKIAkJfHwgKGRydl9kYXRhLT50eCA9PSBkcnZfZGF0YS0+dHhfZW5kKSkKIAkJcmV0dXJuIDA7CiAKLQl3cml0ZV9TU0RSKCoodTE2ICopKGRydl9kYXRhLT50eCksIHJlZyk7CisJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NEUiwgKih1MTYgKikoZHJ2X2RhdGEtPnR4KSk7CiAJZHJ2X2RhdGEtPnR4ICs9IDI7CiAKIAlyZXR1cm4gMTsKQEAgLTQ0NSwxMSArNDIzLDkgQEAKIAogc3RhdGljIGludCB1MTZfcmVhZGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCiB7Ci0Jdm9pZCBfX2lvbWVtICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwotCi0Jd2hpbGUgKChyZWFkX1NTU1IocmVnKSAmIFNTU1JfUk5FKQotCQkmJiAoZHJ2X2RhdGEtPnJ4IDwgZHJ2X2RhdGEtPnJ4X2VuZCkpIHsKLQkJKih1MTYgKikoZHJ2X2RhdGEtPnJ4KSA9IHJlYWRfU1NEUihyZWcpOworCXdoaWxlICgocHhhMnh4X3NwaV9yZWFkKGRydl9kYXRhLCBTU1NSKSAmIFNTU1JfUk5FKQorCSAgICAgICAmJiAoZHJ2X2RhdGEtPnJ4IDwgZHJ2X2RhdGEtPnJ4X2VuZCkpIHsKKwkJKih1MTYgKikoZHJ2X2RhdGEtPnJ4KSA9IHB4YTJ4eF9zcGlfcmVhZChkcnZfZGF0YSwgU1NEUik7CiAJCWRydl9kYXRhLT5yeCArPSAyOwogCX0KIApAQCAtNDU4LDEzICs0MzQsMTEgQEAKIAogc3RhdGljIGludCB1MzJfd3JpdGVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCiB7Ci0Jdm9pZCBfX2lvbWVtICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwotCiAJaWYgKHB4YTJ4eF9zcGlfdHhmaWZvX2Z1bGwoZHJ2X2RhdGEpCiAJCXx8IChkcnZfZGF0YS0+dHggPT0gZHJ2X2RhdGEtPnR4X2VuZCkpCiAJCXJldHVybiAwOwogCi0Jd3JpdGVfU1NEUigqKHUzMiAqKShkcnZfZGF0YS0+dHgpLCByZWcpOworCXB4YTJ4eF9zcGlfd3JpdGUoZHJ2X2RhdGEsIFNTRFIsICoodTMyICopKGRydl9kYXRhLT50eCkpOwogCWRydl9kYXRhLT50eCArPSA0OwogCiAJcmV0dXJuIDE7CkBAIC00NzIsMTEgKzQ0Niw5IEBACiAKIHN0YXRpYyBpbnQgdTMyX3JlYWRlcihzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQogewotCXZvaWQgX19pb21lbSAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKLQotCXdoaWxlICgocmVhZF9TU1NSKHJlZykgJiBTU1NSX1JORSkKLQkJJiYgKGRydl9kYXRhLT5yeCA8IGRydl9kYXRhLT5yeF9lbmQpKSB7Ci0JCSoodTMyICopKGRydl9kYXRhLT5yeCkgPSByZWFkX1NTRFIocmVnKTsKKwl3aGlsZSAoKHB4YTJ4eF9zcGlfcmVhZChkcnZfZGF0YSwgU1NTUikgJiBTU1NSX1JORSkKKwkgICAgICAgJiYgKGRydl9kYXRhLT5yeCA8IGRydl9kYXRhLT5yeF9lbmQpKSB7CisJCSoodTMyICopKGRydl9kYXRhLT5yeCkgPSBweGEyeHhfc3BpX3JlYWQoZHJ2X2RhdGEsIFNTRFIpOwogCQlkcnZfZGF0YS0+cnggKz0gNDsKIAl9CiAKQEAgLTU0NiwzMyArNTE4LDMxIEBACiAJCQljc19kZWFzc2VydChkcnZfZGF0YSk7CiAJfQogCi0Jc3BpX2ZpbmFsaXplX2N1cnJlbnRfbWVzc2FnZShkcnZfZGF0YS0+bWFzdGVyKTsKIAlkcnZfZGF0YS0+Y3VyX2NoaXAgPSBOVUxMOworCXNwaV9maW5hbGl6ZV9jdXJyZW50X21lc3NhZ2UoZHJ2X2RhdGEtPm1hc3Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHJlc2V0X3NjY3IxKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCiB7Ci0Jdm9pZCBfX2lvbWVtICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwogCXN0cnVjdCBjaGlwX2RhdGEgKmNoaXAgPSBkcnZfZGF0YS0+Y3VyX2NoaXA7CiAJdTMyIHNjY3IxX3JlZzsKIAotCXNjY3IxX3JlZyA9IHJlYWRfU1NDUjEocmVnKSAmIH5kcnZfZGF0YS0+aW50X2NyMTsKKwlzY2NyMV9yZWcgPSBweGEyeHhfc3BpX3JlYWQoZHJ2X2RhdGEsIFNTQ1IxKSAmIH5kcnZfZGF0YS0+aW50X2NyMTsKIAlzY2NyMV9yZWcgJj0gflNTQ1IxX1JGVDsKIAlzY2NyMV9yZWcgfD0gY2hpcC0+dGhyZXNob2xkOwotCXdyaXRlX1NTQ1IxKHNjY3IxX3JlZywgcmVnKTsKKwlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU0NSMSwgc2NjcjFfcmVnKTsKIH0KIAogc3RhdGljIHZvaWQgaW50X2Vycm9yX3N0b3Aoc3RydWN0IGRyaXZlcl9kYXRhICpkcnZfZGF0YSwgY29uc3QgY2hhciogbXNnKQogewotCXZvaWQgX19pb21lbSAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKLQogCS8qIFN0b3AgYW5kIHJlc2V0IFNTUCAqLwogCXdyaXRlX1NTU1JfQ1MoZHJ2X2RhdGEsIGRydl9kYXRhLT5jbGVhcl9zcik7CiAJcmVzZXRfc2NjcjEoZHJ2X2RhdGEpOwogCWlmICghcHhhMjV4X3NzcF9jb21wKGRydl9kYXRhKSkKLQkJd3JpdGVfU1NUTygwLCByZWcpOworCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU1RPLCAwKTsKIAlweGEyeHhfc3BpX2ZsdXNoKGRydl9kYXRhKTsKLQl3cml0ZV9TU0NSMChyZWFkX1NTQ1IwKHJlZykgJiB+U1NDUjBfU1NFLCByZWcpOworCXB4YTJ4eF9zcGlfd3JpdGUoZHJ2X2RhdGEsIFNTQ1IwLAorCQkJIHB4YTJ4eF9zcGlfcmVhZChkcnZfZGF0YSwgU1NDUjApICYgflNTQ1IwX1NTRSk7CiAKIAlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LCAiJXNcbiIsIG1zZyk7CiAKQEAgLTU4MiwxMyArNTUyLDExIEBACiAKIHN0YXRpYyB2b2lkIGludF90cmFuc2Zlcl9jb21wbGV0ZShzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhKQogewotCXZvaWQgX19pb21lbSAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKLQogCS8qIFN0b3AgU1NQICovCiAJd3JpdGVfU1NTUl9DUyhkcnZfZGF0YSwgZHJ2X2RhdGEtPmNsZWFyX3NyKTsKIAlyZXNldF9zY2NyMShkcnZfZGF0YSk7CiAJaWYgKCFweGEyNXhfc3NwX2NvbXAoZHJ2X2RhdGEpKQotCQl3cml0ZV9TU1RPKDAsIHJlZyk7CisJCXB4YTJ4eF9zcGlfd3JpdGUoZHJ2X2RhdGEsIFNTVE8sIDApOwogCiAJLyogVXBkYXRlIHRvdGFsIGJ5dGUgdHJhbnNmZXJyZWQgcmV0dXJuIGNvdW50IGFjdHVhbCBieXRlcyByZWFkICovCiAJZHJ2X2RhdGEtPmN1cl9tc2ctPmFjdHVhbF9sZW5ndGggKz0gZHJ2X2RhdGEtPmxlbiAtCkBAIC02MDcsMTIgKzU3NSwxMCBAQAogCiBzdGF0aWMgaXJxcmV0dXJuX3QgaW50ZXJydXB0X3RyYW5zZmVyKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpCiB7Ci0Jdm9pZCBfX2lvbWVtICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOworCXUzMiBpcnFfbWFzayA9IChweGEyeHhfc3BpX3JlYWQoZHJ2X2RhdGEsIFNTQ1IxKSAmIFNTQ1IxX1RJRSkgPworCQkgICAgICAgZHJ2X2RhdGEtPm1hc2tfc3IgOiBkcnZfZGF0YS0+bWFza19zciAmIH5TU1NSX1RGUzsKIAotCXUzMiBpcnFfbWFzayA9IChyZWFkX1NTQ1IxKHJlZykgJiBTU0NSMV9USUUpID8KLQkJCWRydl9kYXRhLT5tYXNrX3NyIDogZHJ2X2RhdGEtPm1hc2tfc3IgJiB+U1NTUl9URlM7Ci0KLQl1MzIgaXJxX3N0YXR1cyA9IHJlYWRfU1NTUihyZWcpICYgaXJxX21hc2s7CisJdTMyIGlycV9zdGF0dXMgPSBweGEyeHhfc3BpX3JlYWQoZHJ2X2RhdGEsIFNTU1IpICYgaXJxX21hc2s7CiAKIAlpZiAoaXJxX3N0YXR1cyAmIFNTU1JfUk9SKSB7CiAJCWludF9lcnJvcl9zdG9wKGRydl9kYXRhLCAiaW50ZXJydXB0X3RyYW5zZmVyOiBmaWZvIG92ZXJydW4iKTsKQEAgLTYyMCw3ICs1ODYsNyBAQAogCX0KIAogCWlmIChpcnFfc3RhdHVzICYgU1NTUl9USU5UKSB7Ci0JCXdyaXRlX1NTU1IoU1NTUl9USU5ULCByZWcpOworCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU1NSLCBTU1NSX1RJTlQpOwogCQlpZiAoZHJ2X2RhdGEtPnJlYWQoZHJ2X2RhdGEpKSB7CiAJCQlpbnRfdHJhbnNmZXJfY29tcGxldGUoZHJ2X2RhdGEpOwogCQkJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNjQ0LDcgKzYxMCw3IEBACiAJCXUzMiBieXRlc19sZWZ0OwogCQl1MzIgc2NjcjFfcmVnOwogCi0JCXNjY3IxX3JlZyA9IHJlYWRfU1NDUjEocmVnKTsKKwkJc2NjcjFfcmVnID0gcHhhMnh4X3NwaV9yZWFkKGRydl9kYXRhLCBTU0NSMSk7CiAJCXNjY3IxX3JlZyAmPSB+U1NDUjFfVElFOwogCiAJCS8qCkBAIC02NzAsNyArNjM2LDcgQEAKIAogCQkJcHhhMnh4X3NwaV9zZXRfcnhfdGhyZShkcnZfZGF0YSwgJnNjY3IxX3JlZywgcnhfdGhyZSk7CiAJCX0KLQkJd3JpdGVfU1NDUjEoc2NjcjFfcmVnLCByZWcpOworCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU0NSMSwgc2NjcjFfcmVnKTsKIAl9CiAKIAkvKiBXZSBkaWQgc29tZXRoaW5nICovCkBAIC02ODAsNyArNjQ2LDYgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzc3BfaW50KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhID0gZGV2X2lkOwotCXZvaWQgX19pb21lbSAqcmVnID0gZHJ2X2RhdGEtPmlvYWRkcjsKIAl1MzIgc2NjcjFfcmVnOwogCXUzMiBtYXNrID0gZHJ2X2RhdGEtPm1hc2tfc3I7CiAJdTMyIHN0YXR1czsKQEAgLTcwMCwxMSArNjY1LDExIEBACiAJICogYXJlIGFsbCBzZXQgdG8gb25lLiBUaGF0IG1lYW5zIHRoYXQgdGhlIGRldmljZSBpcyBhbHJlYWR5CiAJICogcG93ZXJlZCBvZmYuCiAJICovCi0Jc3RhdHVzID0gcmVhZF9TU1NSKHJlZyk7CisJc3RhdHVzID0gcHhhMnh4X3NwaV9yZWFkKGRydl9kYXRhLCBTU1NSKTsKIAlpZiAoc3RhdHVzID09IH4wKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKLQlzY2NyMV9yZWcgPSByZWFkX1NTQ1IxKHJlZyk7CisJc2NjcjFfcmVnID0gcHhhMnh4X3NwaV9yZWFkKGRydl9kYXRhLCBTU0NSMSk7CiAKIAkvKiBJZ25vcmUgcG9zc2libGUgd3JpdGVzIGlmIHdlIGRvbid0IG5lZWQgdG8gd3JpdGUgKi8KIAlpZiAoIShzY2NyMV9yZWcgJiBTU0NSMV9USUUpKQpAQCAtNzE1LDEwICs2ODAsMTQgQEAKIAogCWlmICghZHJ2X2RhdGEtPmN1cl9tc2cpIHsKIAotCQl3cml0ZV9TU0NSMChyZWFkX1NTQ1IwKHJlZykgJiB+U1NDUjBfU1NFLCByZWcpOwotCQl3cml0ZV9TU0NSMShyZWFkX1NTQ1IxKHJlZykgJiB+ZHJ2X2RhdGEtPmludF9jcjEsIHJlZyk7CisJCXB4YTJ4eF9zcGlfd3JpdGUoZHJ2X2RhdGEsIFNTQ1IwLAorCQkJCSBweGEyeHhfc3BpX3JlYWQoZHJ2X2RhdGEsIFNTQ1IwKQorCQkJCSAmIH5TU0NSMF9TU0UpOworCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU0NSMSwKKwkJCQkgcHhhMnh4X3NwaV9yZWFkKGRydl9kYXRhLCBTU0NSMSkKKwkJCQkgJiB+ZHJ2X2RhdGEtPmludF9jcjEpOwogCQlpZiAoIXB4YTI1eF9zc3BfY29tcChkcnZfZGF0YSkpCi0JCQl3cml0ZV9TU1RPKDAsIHJlZyk7CisJCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU1RPLCAwKTsKIAkJd3JpdGVfU1NTUl9DUyhkcnZfZGF0YSwgZHJ2X2RhdGEtPmNsZWFyX3NyKTsKIAogCQlkZXZfZXJyKCZkcnZfZGF0YS0+cGRldi0+ZGV2LApAQCAtNzg3LDcgKzc1Niw2IEBACiAJc3RydWN0IHNwaV90cmFuc2ZlciAqdHJhbnNmZXIgPSBOVUxMOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnByZXZpb3VzID0gTlVMTDsKIAlzdHJ1Y3QgY2hpcF9kYXRhICpjaGlwID0gTlVMTDsKLQl2b2lkIF9faW9tZW0gKnJlZyA9IGRydl9kYXRhLT5pb2FkZHI7CiAJdTMyIGNsa19kaXYgPSAwOwogCXU4IGJpdHMgPSAwOwogCXUzMiBzcGVlZCA9IDA7CkBAIC05MzEsNyArODk5LDcgQEAKIAogCQkvKiBDbGVhciBzdGF0dXMgYW5kIHN0YXJ0IERNQSBlbmdpbmUgKi8KIAkJY3IxID0gY2hpcC0+Y3IxIHwgZG1hX3RocmVzaCB8IGRydl9kYXRhLT5kbWFfY3IxOwotCQl3cml0ZV9TU1NSKGRydl9kYXRhLT5jbGVhcl9zciwgcmVnKTsKKwkJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NTUiwgZHJ2X2RhdGEtPmNsZWFyX3NyKTsKIAogCQlweGEyeHhfc3BpX2RtYV9zdGFydChkcnZfZGF0YSk7CiAJfSBlbHNlIHsKQEAgLTk0NCwzOSArOTEyLDQzIEBACiAJfQogCiAJaWYgKGlzX2xwc3Nfc3NwKGRydl9kYXRhKSkgewotCQlpZiAoKHJlYWRfU1NJUkYocmVnKSAmIDB4ZmYpICE9IGNoaXAtPmxwc3NfcnhfdGhyZXNob2xkKQotCQkJd3JpdGVfU1NJUkYoY2hpcC0+bHBzc19yeF90aHJlc2hvbGQsIHJlZyk7Ci0JCWlmICgocmVhZF9TU0lURihyZWcpICYgMHhmZmZmKSAhPSBjaGlwLT5scHNzX3R4X3RocmVzaG9sZCkKLQkJCXdyaXRlX1NTSVRGKGNoaXAtPmxwc3NfdHhfdGhyZXNob2xkLCByZWcpOworCQlpZiAoKHB4YTJ4eF9zcGlfcmVhZChkcnZfZGF0YSwgU1NJUkYpICYgMHhmZikKKwkJICAgICE9IGNoaXAtPmxwc3NfcnhfdGhyZXNob2xkKQorCQkJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NJUkYsCisJCQkJCSBjaGlwLT5scHNzX3J4X3RocmVzaG9sZCk7CisJCWlmICgocHhhMnh4X3NwaV9yZWFkKGRydl9kYXRhLCBTU0lURikgJiAweGZmZmYpCisJCSAgICAhPSBjaGlwLT5scHNzX3R4X3RocmVzaG9sZCkKKwkJCXB4YTJ4eF9zcGlfd3JpdGUoZHJ2X2RhdGEsIFNTSVRGLAorCQkJCQkgY2hpcC0+bHBzc190eF90aHJlc2hvbGQpOwogCX0KIAogCWlmIChpc19xdWFya194MTAwMF9zc3AoZHJ2X2RhdGEpICYmCi0JICAgIChyZWFkX0REU19SQVRFKHJlZykgIT0gY2hpcC0+ZGRzX3JhdGUpKQotCQl3cml0ZV9ERFNfUkFURShjaGlwLT5kZHNfcmF0ZSwgcmVnKTsKKwkgICAgKHB4YTJ4eF9zcGlfcmVhZChkcnZfZGF0YSwgRERTX1JBVEUpICE9IGNoaXAtPmRkc19yYXRlKSkKKwkJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgRERTX1JBVEUsIGNoaXAtPmRkc19yYXRlKTsKIAogCS8qIHNlZSBpZiB3ZSBuZWVkIHRvIHJlbG9hZCB0aGUgY29uZmlnIHJlZ2lzdGVycyAqLwotCWlmICgocmVhZF9TU0NSMChyZWcpICE9IGNyMCkgfHwKLQkgICAgKHJlYWRfU1NDUjEocmVnKSAmIGNoYW5nZV9tYXNrKSAhPSAoY3IxICYgY2hhbmdlX21hc2spKSB7Ci0KKwlpZiAoKHB4YTJ4eF9zcGlfcmVhZChkcnZfZGF0YSwgU1NDUjApICE9IGNyMCkKKwkgICAgfHwgKHB4YTJ4eF9zcGlfcmVhZChkcnZfZGF0YSwgU1NDUjEpICYgY2hhbmdlX21hc2spCisJICAgICE9IChjcjEgJiBjaGFuZ2VfbWFzaykpIHsKIAkJLyogc3RvcCB0aGUgU1NQLCBhbmQgdXBkYXRlIHRoZSBvdGhlciBiaXRzICovCi0JCXdyaXRlX1NTQ1IwKGNyMCAmIH5TU0NSMF9TU0UsIHJlZyk7CisJCXB4YTJ4eF9zcGlfd3JpdGUoZHJ2X2RhdGEsIFNTQ1IwLCBjcjAgJiB+U1NDUjBfU1NFKTsKIAkJaWYgKCFweGEyNXhfc3NwX2NvbXAoZHJ2X2RhdGEpKQotCQkJd3JpdGVfU1NUTyhjaGlwLT50aW1lb3V0LCByZWcpOworCQkJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NUTywgY2hpcC0+dGltZW91dCk7CiAJCS8qIGZpcnN0IHNldCBDUjEgd2l0aG91dCBpbnRlcnJ1cHQgYW5kIHNlcnZpY2UgZW5hYmxlcyAqLwotCQl3cml0ZV9TU0NSMShjcjEgJiBjaGFuZ2VfbWFzaywgcmVnKTsKKwkJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NDUjEsIGNyMSAmIGNoYW5nZV9tYXNrKTsKIAkJLyogcmVzdGFydCB0aGUgU1NQICovCi0JCXdyaXRlX1NTQ1IwKGNyMCwgcmVnKTsKKwkJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NDUjAsIGNyMCk7CiAKIAl9IGVsc2UgewogCQlpZiAoIXB4YTI1eF9zc3BfY29tcChkcnZfZGF0YSkpCi0JCQl3cml0ZV9TU1RPKGNoaXAtPnRpbWVvdXQsIHJlZyk7CisJCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU1RPLCBjaGlwLT50aW1lb3V0KTsKIAl9CiAKIAljc19hc3NlcnQoZHJ2X2RhdGEpOwogCiAJLyogYWZ0ZXIgY2hpcCBzZWxlY3QsIHJlbGVhc2UgdGhlIGRhdGEgYnkgZW5hYmxpbmcgc2VydmljZQogCSAqIHJlcXVlc3RzIGFuZCBpbnRlcnJ1cHRzLCB3aXRob3V0IGNoYW5naW5nIGFueSBtb2RlIGJpdHMgKi8KLQl3cml0ZV9TU0NSMShjcjEsIHJlZyk7CisJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NDUjEsIGNyMSk7CiB9CiAKIHN0YXRpYyBpbnQgcHhhMnh4X3NwaV90cmFuc2Zlcl9vbmVfbWVzc2FnZShzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyLApAQCAtMTAwNSw4ICs5NzcsOCBAQAogCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CiAKIAkvKiBEaXNhYmxlIHRoZSBTU1Agbm93ICovCi0Jd3JpdGVfU1NDUjAocmVhZF9TU0NSMChkcnZfZGF0YS0+aW9hZGRyKSAmIH5TU0NSMF9TU0UsCi0JCSAgICBkcnZfZGF0YS0+aW9hZGRyKTsKKwlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU0NSMCwKKwkJCSBweGEyeHhfc3BpX3JlYWQoZHJ2X2RhdGEsIFNTQ1IwKSAmIH5TU0NSMF9TU0UpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjg5LDYgKzEyNjEsNyBAQAogCXN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGE7CiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcDsKIAlpbnQgc3RhdHVzOworCXUzMiB0bXA7CiAKIAlwbGF0Zm9ybV9pbmZvID0gZGV2X2dldF9wbGF0ZGF0YShkZXYpOwogCWlmICghcGxhdGZvcm1faW5mbykgewpAQCAtMTM4NiwzOCArMTM1OSwzNSBAQAogCWRydl9kYXRhLT5tYXhfY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoc3NwLT5jbGspOwogCiAJLyogTG9hZCBkZWZhdWx0IFNTUCBjb25maWd1cmF0aW9uICovCi0Jd3JpdGVfU1NDUjAoMCwgZHJ2X2RhdGEtPmlvYWRkcik7CisJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NDUjAsIDApOwogCXN3aXRjaCAoZHJ2X2RhdGEtPnNzcF90eXBlKSB7CiAJY2FzZSBRVUFSS19YMTAwMF9TU1A6Ci0JCXdyaXRlX1NTQ1IxKFFVQVJLX1gxMDAwX1NTQ1IxX1J4VHJlc2goCi0JCQkJCVJYX1RIUkVTSF9RVUFSS19YMTAwMF9ERkxUKSB8Ci0JCQkgICAgUVVBUktfWDEwMDBfU1NDUjFfVHhUcmVzaCgKLQkJCQkJVFhfVEhSRVNIX1FVQVJLX1gxMDAwX0RGTFQpLAotCQkJICAgIGRydl9kYXRhLT5pb2FkZHIpOworCQl0bXAgPSBRVUFSS19YMTAwMF9TU0NSMV9SeFRyZXNoKFJYX1RIUkVTSF9RVUFSS19YMTAwMF9ERkxUKQorCQkgICAgICB8IFFVQVJLX1gxMDAwX1NTQ1IxX1R4VHJlc2goVFhfVEhSRVNIX1FVQVJLX1gxMDAwX0RGTFQpOworCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU0NSMSwgdG1wKTsKIAogCQkvKiB1c2luZyB0aGUgTW90b3JvbGEgU1BJIHByb3RvY29sIGFuZCB1c2UgOCBiaXQgZnJhbWUgKi8KLQkJd3JpdGVfU1NDUjAoUVVBUktfWDEwMDBfU1NDUjBfTW90b3JvbGEKLQkJCSAgICB8IFFVQVJLX1gxMDAwX1NTQ1IwX0RhdGFTaXplKDgpLAotCQkJICAgIGRydl9kYXRhLT5pb2FkZHIpOworCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU0NSMCwKKwkJCQkgUVVBUktfWDEwMDBfU1NDUjBfTW90b3JvbGEKKwkJCQkgfCBRVUFSS19YMTAwMF9TU0NSMF9EYXRhU2l6ZSg4KSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXdyaXRlX1NTQ1IxKFNTQ1IxX1J4VHJlc2goUlhfVEhSRVNIX0RGTFQpIHwKLQkJCSAgICBTU0NSMV9UeFRyZXNoKFRYX1RIUkVTSF9ERkxUKSwKLQkJCSAgICBkcnZfZGF0YS0+aW9hZGRyKTsKLQkJd3JpdGVfU1NDUjAoU1NDUjBfU0NSKDIpCi0JCQkgICAgfCBTU0NSMF9Nb3Rvcm9sYQotCQkJICAgIHwgU1NDUjBfRGF0YVNpemUoOCksCi0JCQkgICAgZHJ2X2RhdGEtPmlvYWRkcik7CisJCXRtcCA9IFNTQ1IxX1J4VHJlc2goUlhfVEhSRVNIX0RGTFQpIHwKKwkJICAgICAgU1NDUjFfVHhUcmVzaChUWF9USFJFU0hfREZMVCk7CisJCXB4YTJ4eF9zcGlfd3JpdGUoZHJ2X2RhdGEsIFNTQ1IxLCB0bXApOworCQl0bXAgPSBTU0NSMF9TQ1IoMikgfCBTU0NSMF9Nb3Rvcm9sYSB8IFNTQ1IwX0RhdGFTaXplKDgpOworCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU0NSMCwgdG1wKTsKIAkJYnJlYWs7CiAJfQogCiAJaWYgKCFweGEyNXhfc3NwX2NvbXAoZHJ2X2RhdGEpKQotCQl3cml0ZV9TU1RPKDAsIGRydl9kYXRhLT5pb2FkZHIpOworCQlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU1RPLCAwKTsKIAogCWlmICghaXNfcXVhcmtfeDEwMDBfc3NwKGRydl9kYXRhKSkKLQkJd3JpdGVfU1NQU1AoMCwgZHJ2X2RhdGEtPmlvYWRkcik7CisJCXB4YTJ4eF9zcGlfd3JpdGUoZHJ2X2RhdGEsIFNTUFNQLCAwKTsKIAotCWxwc3Nfc3NwX3NldHVwKGRydl9kYXRhKTsKKwlpZiAoaXNfbHBzc19zc3AoZHJ2X2RhdGEpKQorCQlscHNzX3NzcF9zZXR1cChkcnZfZGF0YSk7CiAKIAl0YXNrbGV0X2luaXQoJmRydl9kYXRhLT5wdW1wX3RyYW5zZmVycywgcHVtcF90cmFuc2ZlcnMsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpZHJ2X2RhdGEpOwpAQCAtMTQ2MCw3ICsxNDMwLDcgQEAKIAlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2LT5kZXYpOwogCiAJLyogRGlzYWJsZSB0aGUgU1NQIGF0IHRoZSBwZXJpcGhlcmFsIGFuZCBTT0MgbGV2ZWwgKi8KLQl3cml0ZV9TU0NSMCgwLCBkcnZfZGF0YS0+aW9hZGRyKTsKKwlweGEyeHhfc3BpX3dyaXRlKGRydl9kYXRhLCBTU0NSMCwgMCk7CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNzcC0+Y2xrKTsKIAogCS8qIFJlbGVhc2UgRE1BICovCkBAIC0xNDk3LDcgKzE0NjcsNyBAQAogCXN0YXR1cyA9IHNwaV9tYXN0ZXJfc3VzcGVuZChkcnZfZGF0YS0+bWFzdGVyKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCXJldHVybiBzdGF0dXM7Ci0Jd3JpdGVfU1NDUjAoMCwgZHJ2X2RhdGEtPmlvYWRkcik7CisJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NDUjAsIDApOwogCiAJaWYgKCFwbV9ydW50aW1lX3N1c3BlbmRlZChkZXYpKQogCQljbGtfZGlzYWJsZV91bnByZXBhcmUoc3NwLT5jbGspOwpAQCAtMTUxOCw3ICsxNDg4LDggQEAKIAkJY2xrX3ByZXBhcmVfZW5hYmxlKHNzcC0+Y2xrKTsKIAogCS8qIFJlc3RvcmUgTFBTUyBwcml2YXRlIHJlZ2lzdGVyIGJpdHMgKi8KLQlscHNzX3NzcF9zZXR1cChkcnZfZGF0YSk7CisJaWYgKGlzX2xwc3Nfc3NwKGRydl9kYXRhKSkKKwkJbHBzc19zc3Bfc2V0dXAoZHJ2X2RhdGEpOwogCiAJLyogU3RhcnQgdGhlIHF1ZXVlIHJ1bm5pbmcgKi8KIAlzdGF0dXMgPSBzcGlfbWFzdGVyX3Jlc3VtZShkcnZfZGF0YS0+bWFzdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1weGEyeHguaCBiL2RyaXZlcnMvc3BpL3NwaS1weGEyeHguaAppbmRleCA2YmVjNTljLi44NWE1OGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktcHhhMnh4LmgKKysrIGIvZHJpdmVycy9zcGkvc3BpLXB4YTJ4eC5oCkBAIC0xMTUsMjMgKzExNSwxNyBAQAogCXZvaWQgKCpjc19jb250cm9sKSh1MzIgY29tbWFuZCk7CiB9OwogCi0jZGVmaW5lIERFRklORV9TU1BfUkVHKHJlZywgb2ZmKSBcCi1zdGF0aWMgaW5saW5lIHUzMiByZWFkXyMjcmVnKHZvaWQgY29uc3QgX19pb21lbSAqcCkgXAoteyByZXR1cm4gX19yYXdfcmVhZGwocCArIChvZmYpKTsgfSBcCi1cCi1zdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfIyNyZWcodTMyIHYsIHZvaWQgX19pb21lbSAqcCkgXAoteyBfX3Jhd193cml0ZWwodiwgcCArIChvZmYpKTsgfQorc3RhdGljIGlubGluZSB1MzIgcHhhMnh4X3NwaV9yZWFkKGNvbnN0IHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEsCisJCQkJICB1bnNpZ25lZCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWRsKGRydl9kYXRhLT5pb2FkZHIgKyByZWcpOworfQogCi1ERUZJTkVfU1NQX1JFRyhTU0NSMCwgMHgwMCkKLURFRklORV9TU1BfUkVHKFNTQ1IxLCAweDA0KQotREVGSU5FX1NTUF9SRUcoU1NTUiwgMHgwOCkKLURFRklORV9TU1BfUkVHKFNTSVRSLCAweDBjKQotREVGSU5FX1NTUF9SRUcoU1NEUiwgMHgxMCkKLURFRklORV9TU1BfUkVHKEREU19SQVRFLCAweDI4KSAgLyogRERTIENsb2NrIFJhdGUgKi8KLURFRklORV9TU1BfUkVHKFNTVE8sIDB4MjgpCi1ERUZJTkVfU1NQX1JFRyhTU1BTUCwgMHgyYykKLURFRklORV9TU1BfUkVHKFNTSVRGLCBTU0lURikKLURFRklORV9TU1BfUkVHKFNTSVJGLCBTU0lSRikKK3N0YXRpYyAgaW5saW5lIHZvaWQgcHhhMnh4X3NwaV93cml0ZShjb25zdCBzdHJ1Y3QgZHJpdmVyX2RhdGEgKmRydl9kYXRhLAorCQkJCSAgICAgdW5zaWduZWQgcmVnLCB1MzIgdmFsKQoreworCV9fcmF3X3dyaXRlbCh2YWwsIGRydl9kYXRhLT5pb2FkZHIgKyByZWcpOworfQogCiAjZGVmaW5lIFNUQVJUX1NUQVRFICgodm9pZCAqKTApCiAjZGVmaW5lIFJVTk5JTkdfU1RBVEUgKCh2b2lkICopMSkKQEAgLTE1NSwxMyArMTQ5LDExIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9TU1NSX0NTKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEsIHUzMiB2YWwpCiB7Ci0Jdm9pZCBfX2lvbWVtICpyZWcgPSBkcnZfZGF0YS0+aW9hZGRyOwotCiAJaWYgKGRydl9kYXRhLT5zc3BfdHlwZSA9PSBDRTQxMDBfU1NQIHx8CiAJICAgIGRydl9kYXRhLT5zc3BfdHlwZSA9PSBRVUFSS19YMTAwMF9TU1ApCi0JCXZhbCB8PSByZWFkX1NTU1IocmVnKSAmIFNTU1JfQUxUX0ZSTV9NQVNLOworCQl2YWwgfD0gcHhhMnh4X3NwaV9yZWFkKGRydl9kYXRhLCBTU1NSKSAmIFNTU1JfQUxUX0ZSTV9NQVNLOwogCi0Jd3JpdGVfU1NTUih2YWwsIHJlZyk7CisJcHhhMnh4X3NwaV93cml0ZShkcnZfZGF0YSwgU1NTUiwgdmFsKTsKIH0KIAogZXh0ZXJuIGludCBweGEyeHhfc3BpX2ZsdXNoKHN0cnVjdCBkcml2ZXJfZGF0YSAqZHJ2X2RhdGEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXF1cC5jIGIvZHJpdmVycy9zcGkvc3BpLXF1cC5jCmluZGV4IGU3ZmI1YTAuLmZmOWNkYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1xdXAuYworKysgYi9kcml2ZXJzL3NwaS9zcGktcXVwLmMKQEAgLTMzNyw3ICszMzcsNyBAQAogc3RhdGljIGludCBzcGlfcXVwX2lvX2NvbmZpZyhzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyKQogewogCXN0cnVjdCBzcGlfcXVwICpjb250cm9sbGVyID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7Ci0JdTMyIGNvbmZpZywgaW9tb2RlLCBtb2RlOworCXUzMiBjb25maWcsIGlvbW9kZSwgbW9kZSwgY29udHJvbDsKIAlpbnQgcmV0LCBuX3dvcmRzLCB3X3NpemU7CiAKIAlpZiAoc3BpLT5tb2RlICYgU1BJX0xPT1AgJiYgeGZlci0+bGVuID4gY29udHJvbGxlci0+aW5fZmlmb19zeikgewpAQCAtMzkyLDYgKzM5MiwxNSBAQAogCiAJd3JpdGVsX3JlbGF4ZWQoaW9tb2RlLCBjb250cm9sbGVyLT5iYXNlICsgUVVQX0lPX01fTU9ERVMpOwogCisJY29udHJvbCA9IHJlYWRsX3JlbGF4ZWQoY29udHJvbGxlci0+YmFzZSArIFNQSV9JT19DT05UUk9MKTsKKworCWlmIChzcGktPm1vZGUgJiBTUElfQ1BPTCkKKwkJY29udHJvbCB8PSBTUElfSU9fQ19DTEtfSURMRV9ISUdIOworCWVsc2UKKwkJY29udHJvbCAmPSB+U1BJX0lPX0NfQ0xLX0lETEVfSElHSDsKKworCXdyaXRlbF9yZWxheGVkKGNvbnRyb2wsIGNvbnRyb2xsZXItPmJhc2UgKyBTUElfSU9fQ09OVFJPTCk7CisKIAljb25maWcgPSByZWFkbF9yZWxheGVkKGNvbnRyb2xsZXItPmJhc2UgKyBTUElfQ09ORklHKTsKIAogCWlmIChzcGktPm1vZGUgJiBTUElfTE9PUCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1yb2NrY2hpcC5jIGIvZHJpdmVycy9zcGkvc3BpLXJvY2tjaGlwLmMKaW5kZXggZGFhYmJhYi4uMWE3NzdkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXJvY2tjaGlwLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXJvY2tjaGlwLmMKQEAgLTQzNyw2ICs0MzcsNyBAQAogCXJzLT5zdGF0ZSAmPSB+VFhCVVNZOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJzLT5sb2NrLCBmbGFncyk7CiAKKwlyeGRlc2MgPSBOVUxMOwogCWlmIChycy0+cngpIHsKIAkJcnhjb25mLmRpcmVjdGlvbiA9IHJzLT5kbWFfcnguZGlyZWN0aW9uOwogCQlyeGNvbmYuc3JjX2FkZHIgPSBycy0+ZG1hX3J4LmFkZHI7CkBAIC00NTMsNiArNDU0LDcgQEAKIAkJcnhkZXNjLT5jYWxsYmFja19wYXJhbSA9IHJzOwogCX0KIAorCXR4ZGVzYyA9IE5VTEw7CiAJaWYgKHJzLT50eCkgewogCQl0eGNvbmYuZGlyZWN0aW9uID0gcnMtPmRtYV90eC5kaXJlY3Rpb247CiAJCXR4Y29uZi5kc3RfYWRkciA9IHJzLT5kbWFfdHguYWRkcjsKQEAgLTQ3MCw3ICs0NzIsNyBAQAogCX0KIAogCS8qIHJ4IG11c3QgYmUgc3RhcnRlZCBiZWZvcmUgdHggZHVlIHRvIHNwaSBpbnN0aW5jdCAqLwotCWlmIChycy0+cngpIHsKKwlpZiAocnhkZXNjKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+bG9jaywgZmxhZ3MpOwogCQlycy0+c3RhdGUgfD0gUlhCVVNZOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+bG9jaywgZmxhZ3MpOwpAQCAtNDc4LDcgKzQ4MCw3IEBACiAJCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKHJzLT5kbWFfcnguY2gpOwogCX0KIAotCWlmIChycy0+dHgpIHsKKwlpZiAodHhkZXNjKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZycy0+bG9jaywgZmxhZ3MpOwogCQlycy0+c3RhdGUgfD0gVFhCVVNZOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycy0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXJzcGkuYyBiL2RyaXZlcnMvc3BpL3NwaS1yc3BpLmMKaW5kZXggMjA3MWY3OC4uNDZjZTQ3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXJzcGkuYworKysgYi9kcml2ZXJzL3NwaS9zcGktcnNwaS5jCkBAIC0xNSwxMSArMTUsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktczNjNjR4eC5jIGIvZHJpdmVycy9zcGkvc3BpLXMzYzY0eHguYwppbmRleCAzN2IxOTgzLi45MjMxYzM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktczNjNjR4eC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1zM2M2NHh4LmMKQEAgLTExLDEwICsxMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktc2MxOGlzNjAyLmMgYi9kcml2ZXJzL3NwaS9zcGktc2MxOGlzNjAyLmMKaW5kZXggMjM3ZjJlNy4uNWE1NmFjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXNjMThpczYwMi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS1zYzE4aXM2MDIuYwpAQCAtMTIsMTAgKzEyLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS1zaC1oc3BpLmMgYi9kcml2ZXJzL3NwaS9zcGktc2gtaHNwaS5jCmluZGV4IGZjMjkyMzMuLjIwZTgwMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaS1zaC1oc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXNoLWhzcGkuYwpAQCAtMTYsMTEgKzE2LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXNoLW1zaW9mLmMgYi9kcml2ZXJzL3NwaS9zcGktc2gtbXNpb2YuYwppbmRleCA5NmE1ZmMwLi5lNTdlZWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktc2gtbXNpb2YuYworKysgYi9kcml2ZXJzL3NwaS9zcGktc2gtbXNpb2YuYwpAQCAtODIsNyArODIsOSBAQAogI2RlZmluZSBNRFIxX1NZTkNNRF9MUgkgMHgzMDAwMDAwMCAvKiAgIEwvUiBtb2RlICovCiAjZGVmaW5lIE1EUjFfU1lOQ0FDX1NISUZUCSAyNSAvKiBTeW5jIFBvbGFyaXR5ICgxID0gQWN0aXZlLWxvdykgKi8KICNkZWZpbmUgTURSMV9CSVRMU0JfU0hJRlQJIDI0IC8qIE1TQi9MU0IgRmlyc3QgKDEgPSBMU0IgZmlyc3QpICovCi0jZGVmaW5lIE1EUjFfRkxEX01BU0sJIDB4MDAwMDAwYzAgLyogRnJhbWUgU3luYyBTaWduYWwgSW50ZXJ2YWwgKDAtMykgKi8KKyNkZWZpbmUgTURSMV9EVERMX1NISUZUCQkgMjAgLyogRGF0YSBQaW4gQml0IERlbGF5IGZvciBNU0lPRl9TWU5DICovCisjZGVmaW5lIE1EUjFfU1lOQ0RMX1NISUZUCSAxNiAvKiBGcmFtZSBTeW5jIFNpZ25hbCBUaW1pbmcgRGVsYXkgKi8KKyNkZWZpbmUgTURSMV9GTERfTUFTSwkgMHgwMDAwMDAwYyAvKiBGcmFtZSBTeW5jIFNpZ25hbCBJbnRlcnZhbCAoMC0zKSAqLwogI2RlZmluZSBNRFIxX0ZMRF9TSElGVAkJICAyCiAjZGVmaW5lIE1EUjFfWFhTVFAJIDB4MDAwMDAwMDEgLyogVHJhbnNtaXNzaW9uL1JlY2VwdGlvbiBTdG9wIG9uIEZJRk8gKi8KIC8qIFRNRFIxICovCkBAIC0yNDEsNDIgKzI0Myw4MCBAQAogCiBzdGF0aWMgc3RydWN0IHsKIAl1bnNpZ25lZCBzaG9ydCBkaXY7Ci0JdW5zaWduZWQgc2hvcnQgc2NyOwotfSBjb25zdCBzaF9tc2lvZl9zcGlfY2xrX3RhYmxlW10gPSB7Ci0JeyAxLAlTQ1JfQlJQUyggMSkgfCBTQ1JfQlJEVl9ESVZfMSB9LAotCXsgMiwJU0NSX0JSUFMoIDEpIHwgU0NSX0JSRFZfRElWXzIgfSwKLQl7IDQsCVNDUl9CUlBTKCAxKSB8IFNDUl9CUkRWX0RJVl80IH0sCi0JeyA4LAlTQ1JfQlJQUyggMSkgfCBTQ1JfQlJEVl9ESVZfOCB9LAotCXsgMTYsCVNDUl9CUlBTKCAxKSB8IFNDUl9CUkRWX0RJVl8xNiB9LAotCXsgMzIsCVNDUl9CUlBTKCAxKSB8IFNDUl9CUkRWX0RJVl8zMiB9LAotCXsgNjQsCVNDUl9CUlBTKDMyKSB8IFNDUl9CUkRWX0RJVl8yIH0sCi0JeyAxMjgsCVNDUl9CUlBTKDMyKSB8IFNDUl9CUkRWX0RJVl80IH0sCi0JeyAyNTYsCVNDUl9CUlBTKDMyKSB8IFNDUl9CUkRWX0RJVl84IH0sCi0JeyA1MTIsCVNDUl9CUlBTKDMyKSB8IFNDUl9CUkRWX0RJVl8xNiB9LAotCXsgMTAyNCwJU0NSX0JSUFMoMzIpIHwgU0NSX0JSRFZfRElWXzMyIH0sCisJdW5zaWduZWQgc2hvcnQgYnJkdjsKK30gY29uc3Qgc2hfbXNpb2Zfc3BpX2Rpdl90YWJsZVtdID0geworCXsgMSwJU0NSX0JSRFZfRElWXzEgfSwKKwl7IDIsCVNDUl9CUkRWX0RJVl8yIH0sCisJeyA0LAlTQ1JfQlJEVl9ESVZfNCB9LAorCXsgOCwJU0NSX0JSRFZfRElWXzggfSwKKwl7IDE2LAlTQ1JfQlJEVl9ESVZfMTYgfSwKKwl7IDMyLAlTQ1JfQlJEVl9ESVZfMzIgfSwKIH07CiAKIHN0YXRpYyB2b2lkIHNoX21zaW9mX3NwaV9zZXRfY2xrX3JlZ3Moc3RydWN0IHNoX21zaW9mX3NwaV9wcml2ICpwLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUsIHUzMiBzcGlfaHopCiB7CiAJdW5zaWduZWQgbG9uZyBkaXYgPSAxMDI0OworCXUzMiBicnBzLCBzY3I7CiAJc2l6ZV90IGs7CiAKIAlpZiAoIVdBUk5fT04oIXNwaV9oeiB8fCAhcGFyZW50X3JhdGUpKQogCQlkaXYgPSBESVZfUk9VTkRfVVAocGFyZW50X3JhdGUsIHNwaV9oeik7CiAKLQkvKiBUT0RPOiBtYWtlIG1vcmUgZmluZSBncmFpbmVkICovCi0KLQlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRShzaF9tc2lvZl9zcGlfY2xrX3RhYmxlKTsgaysrKSB7Ci0JCWlmIChzaF9tc2lvZl9zcGlfY2xrX3RhYmxlW2tdLmRpdiA+PSBkaXYpCisJZm9yIChrID0gMDsgayA8IEFSUkFZX1NJWkUoc2hfbXNpb2Zfc3BpX2Rpdl90YWJsZSk7IGsrKykgeworCQlicnBzID0gRElWX1JPVU5EX1VQKGRpdiwgc2hfbXNpb2Zfc3BpX2Rpdl90YWJsZVtrXS5kaXYpOworCQlpZiAoYnJwcyA8PSAzMikgLyogbWF4IG9mIGJyZHYgaXMgMzIgKi8KIAkJCWJyZWFrOwogCX0KIAotCWsgPSBtaW5fdChpbnQsIGssIEFSUkFZX1NJWkUoc2hfbXNpb2Zfc3BpX2Nsa190YWJsZSkgLSAxKTsKKwlrID0gbWluX3QoaW50LCBrLCBBUlJBWV9TSVpFKHNoX21zaW9mX3NwaV9kaXZfdGFibGUpIC0gMSk7CiAKLQlzaF9tc2lvZl93cml0ZShwLCBUU0NSLCBzaF9tc2lvZl9zcGlfY2xrX3RhYmxlW2tdLnNjcik7CisJc2NyID0gc2hfbXNpb2Zfc3BpX2Rpdl90YWJsZVtrXS5icmR2IHwgU0NSX0JSUFMoYnJwcyk7CisJc2hfbXNpb2Zfd3JpdGUocCwgVFNDUiwgc2NyKTsKIAlpZiAoIShwLT5jaGlwZGF0YS0+bWFzdGVyX2ZsYWdzICYgU1BJX01BU1RFUl9NVVNUX1RYKSkKLQkJc2hfbXNpb2Zfd3JpdGUocCwgUlNDUiwgc2hfbXNpb2Zfc3BpX2Nsa190YWJsZVtrXS5zY3IpOworCQlzaF9tc2lvZl93cml0ZShwLCBSU0NSLCBzY3IpOworfQorCitzdGF0aWMgdTMyIHNoX21zaW9mX2dldF9kZWxheV9iaXQodTMyIGR0ZGxfb3Jfc3luY2RsKQoreworCS8qCisJICogRFRETC9TWU5DREwgYml0CTogcC0+aW5mby0+ZHRkbCBvciBwLT5pbmZvLT5zeW5jZGwKKwkgKiBiJzAwMAkJOiAwCisJICogYicwMDEJCTogMTAwCisJICogYicwMTAJCTogMjAwCisJICogYicwMTEgKFNZTkNETCBvbmx5KQk6IDMwMAorCSAqIGInMTAxCQk6IDUwCisJICogYicxMTAJCTogMTUwCisJICovCisJaWYgKGR0ZGxfb3Jfc3luY2RsICUgMTAwKQorCQlyZXR1cm4gZHRkbF9vcl9zeW5jZGwgLyAxMDAgKyA1OworCWVsc2UKKwkJcmV0dXJuIGR0ZGxfb3Jfc3luY2RsIC8gMTAwOworfQorCitzdGF0aWMgdTMyIHNoX21zaW9mX3NwaV9nZXRfZHRkbF9hbmRfc3luY2RsKHN0cnVjdCBzaF9tc2lvZl9zcGlfcHJpdiAqcCkKK3sKKwl1MzIgdmFsOworCisJaWYgKCFwLT5pbmZvKQorCQlyZXR1cm4gMDsKKworCS8qIGNoZWNrIGlmIERUREwgYW5kIFNZTkNETCBpcyBhbGxvd2VkIHZhbHVlICovCisJaWYgKHAtPmluZm8tPmR0ZGwgPiAyMDAgfHwgcC0+aW5mby0+c3luY2RsID4gMzAwKSB7CisJCWRldl93YXJuKCZwLT5wZGV2LT5kZXYsICJEVERMIG9yIFNZTkNETCBpcyB0b28gbGFyZ2VcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBjaGVjayBpZiB0aGUgc3VtIG9mIERUREwgYW5kIFNZTkNETCBiZWNvbWVzIGFuIGludGVnZXIgdmFsdWUgICovCisJaWYgKChwLT5pbmZvLT5kdGRsICsgcC0+aW5mby0+c3luY2RsKSAlIDEwMCkgeworCQlkZXZfd2FybigmcC0+cGRldi0+ZGV2LCAidGhlIHN1bSBvZiBEVERML1NZTkNETCBpcyBub3QgZ29vZFxuIik7CisJCXJldHVybiAwOworCX0KKworCXZhbCA9IHNoX21zaW9mX2dldF9kZWxheV9iaXQocC0+aW5mby0+ZHRkbCkgPDwgTURSMV9EVERMX1NISUZUOworCXZhbCB8PSBzaF9tc2lvZl9nZXRfZGVsYXlfYml0KHAtPmluZm8tPnN5bmNkbCkgPDwgTURSMV9TWU5DRExfU0hJRlQ7CisKKwlyZXR1cm4gdmFsOwogfQogCiBzdGF0aWMgdm9pZCBzaF9tc2lvZl9zcGlfc2V0X3Bpbl9yZWdzKHN0cnVjdCBzaF9tc2lvZl9zcGlfcHJpdiAqcCwKQEAgLTI5Niw2ICszMzYsNyBAQAogCXRtcCA9IE1EUjFfU1lOQ01EX1NQSSB8IDEgPDwgTURSMV9GTERfU0hJRlQgfCBNRFIxX1hYU1RQOwogCXRtcCB8PSAhY3NfaGlnaCA8PCBNRFIxX1NZTkNBQ19TSElGVDsKIAl0bXAgfD0gbHNiX2ZpcnN0IDw8IE1EUjFfQklUTFNCX1NISUZUOworCXRtcCB8PSBzaF9tc2lvZl9zcGlfZ2V0X2R0ZGxfYW5kX3N5bmNkbChwKTsKIAlzaF9tc2lvZl93cml0ZShwLCBUTURSMSwgdG1wIHwgTURSMV9UUk1EIHwgVE1EUjFfUENPTik7CiAJaWYgKHAtPmNoaXBkYXRhLT5tYXN0ZXJfZmxhZ3MgJiBTUElfTUFTVEVSX01VU1RfVFgpIHsKIAkJLyogVGhlc2UgYml0cyBhcmUgcmVzZXJ2ZWQgaWYgUlggbmVlZHMgVFggKi8KQEAgLTUwMSw3ICs1NDIsNyBAQAogCQlncGlvX3NldF92YWx1ZShzcGktPmNzX2dwaW8sICEoc3BpLT5tb2RlICYgU1BJX0NTX0hJR0gpKTsKIAogCi0JcG1fcnVudGltZV9wdXRfc3luYygmcC0+cGRldi0+ZGV2KTsKKwlwbV9ydW50aW1lX3B1dCgmcC0+cGRldi0+ZGV2KTsKIAogCXJldHVybiAwOwogfQpAQCAtNTk1LDggKzYzNiw3IEBACiAJfQogCiAJLyogd2FpdCBmb3IgdHggZmlmbyB0byBiZSBlbXB0aWVkIC8gcnggZmlmbyB0byBiZSBmaWxsZWQgKi8KLQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnAtPmRvbmUsIEhaKTsKLQlpZiAoIXJldCkgeworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZwLT5kb25lLCBIWikpIHsKIAkJZGV2X2VycigmcC0+cGRldi0+ZGV2LCAiUElPIHRpbWVvdXRcbiIpOwogCQlyZXQgPSAtRVRJTUVET1VUOwogCQlnb3RvIHN0b3BfcmVzZXQ7CkBAIC03MDYsOCArNzQ2LDcgQEAKIAl9CiAKIAkvKiB3YWl0IGZvciB0eCBmaWZvIHRvIGJlIGVtcHRpZWQgLyByeCBmaWZvIHRvIGJlIGZpbGxlZCAqLwotCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcC0+ZG9uZSwgSFopOwotCWlmICghcmV0KSB7CisJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnAtPmRvbmUsIEhaKSkgewogCQlkZXZfZXJyKCZwLT5wZGV2LT5kZXYsICJETUEgdGltZW91dFxuIik7CiAJCXJldCA9IC1FVElNRURPVVQ7CiAJCWdvdG8gc3RvcF9yZXNldDsKQEAgLTk1Nyw2ICs5OTYsOCBAQAogCQkJCQkmaW5mby0+dHhfZmlmb19vdmVycmlkZSk7CiAJb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJyZW5lc2FzLHJ4LWZpZm8tc2l6ZSIsCiAJCQkJCSZpbmZvLT5yeF9maWZvX292ZXJyaWRlKTsKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInJlbmVzYXMsZHRkbCIsICZpbmZvLT5kdGRsKTsKKwlvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInJlbmVzYXMsc3luY2RsIiwgJmluZm8tPnN5bmNkbCk7CiAKIAlpbmZvLT5udW1fY2hpcHNlbGVjdCA9IG51bV9jczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXNoLmMgYi9kcml2ZXJzL3NwaS9zcGktc2guYwppbmRleCAxY2ZjOTA2Li41MDI1MDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktc2guYworKysgYi9kcml2ZXJzL3NwaS9zcGktc2guYwpAQCAtMTQsMTEgKzE0LDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLXNpcmYuYyBiL2RyaXZlcnMvc3BpL3NwaS1zaXJmLmMKaW5kZXggZDA3NTE5MS4uZjU3MTVjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXNpcmYuYworKysgYi9kcml2ZXJzL3NwaS9zcGktc2lyZi5jCkBAIC04MTgsNyArODE4LDYgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc3BpX3NpcmZzb2Nfb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInNpcmYscHJpbWEyLXNwaSIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJzaXJmLG1hcmNvLXNwaSIsIH0sCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzcGlfc2lyZnNvY19vZl9tYXRjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktc3Qtc3NjNC5jIGIvZHJpdmVycy9zcGkvc3BpLXN0LXNzYzQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmFlYWE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zcGkvc3BpLXN0LXNzYzQuYwpAQCAtMCwwICsxLDUwNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxNCBTVE1pY3JvZWxlY3Ryb25pY3MgTGltaXRlZAorICoKKyAqICBBdXRob3I6IEFuZ3VzIENsYXJrIDxBbmd1cy5DbGFya0BzdC5jb20+CisgKiAgICAgICAgICBQYXRyaWNlIENob3RhcmQgPHBhdHJpY2UuY2hvdGFyZEBzdC5jb20+CisgKiAgICAgICAgICBMZWUgSm9uZXMgPGxlZS5qb25lc0BsaW5hcm8ub3JnPgorICoKKyAqICBTUEkgbWFzdGVyIG1vZGUgY29udHJvbGxlciBkcml2ZXIsIHVzZWQgaW4gU1RNaWNyb2VsZWN0cm9uaWNzIGRldmljZXMuCisgKgorICogIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIFZlcnNpb24gMi4wIG9ubHkuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BpbmN0cmwvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfYml0YmFuZy5oPgorCisvKiBTU0MgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNTQ19CUkcJCQkJMHgwMDAKKyNkZWZpbmUgU1NDX1RCVUYJCQkweDAwNAorI2RlZmluZSBTU0NfUkJVRgkJCTB4MDA4CisjZGVmaW5lIFNTQ19DVEwJCQkJMHgwMEMKKyNkZWZpbmUgU1NDX0lFTgkJCQkweDAxMAorI2RlZmluZSBTU0NfSTJDCQkJCTB4MDE4CisKKy8qIFNTQyBDb250cm9sICovCisjZGVmaW5lIFNTQ19DVExfREFUQV9XSURUSF85CQkweDgKKyNkZWZpbmUgU1NDX0NUTF9EQVRBX1dJRFRIX01TSwkJMHhmCisjZGVmaW5lIFNTQ19DVExfQk0JCQkweGYKKyNkZWZpbmUgU1NDX0NUTF9IQgkJCUJJVCg0KQorI2RlZmluZSBTU0NfQ1RMX1BICQkJQklUKDUpCisjZGVmaW5lIFNTQ19DVExfUE8JCQlCSVQoNikKKyNkZWZpbmUgU1NDX0NUTF9TUgkJCUJJVCg3KQorI2RlZmluZSBTU0NfQ1RMX01TCQkJQklUKDgpCisjZGVmaW5lIFNTQ19DVExfRU4JCQlCSVQoOSkKKyNkZWZpbmUgU1NDX0NUTF9MUEIJCQlCSVQoMTApCisjZGVmaW5lIFNTQ19DVExfRU5fVFhfRklGTwkJQklUKDExKQorI2RlZmluZSBTU0NfQ1RMX0VOX1JYX0ZJRk8JCUJJVCgxMikKKyNkZWZpbmUgU1NDX0NUTF9FTl9DTFNUX1JYCQlCSVQoMTMpCisKKy8qIFNTQyBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFNTQ19JRU5fVEVFTgkJCUJJVCgyKQorCisjZGVmaW5lIEZJRk9fU0laRQkJCTgKKworc3RydWN0IHNwaV9zdCB7CisJLyogU1NDIFNQSSBDb250cm9sbGVyICovCisJdm9pZCBfX2lvbWVtCQkqYmFzZTsKKwlzdHJ1Y3QgY2xrCQkqY2xrOworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CisKKwkvKiBTU0MgU1BJIGN1cnJlbnQgdHJhbnNhY3Rpb24gKi8KKwljb25zdCB1OAkJKnR4X3B0cjsKKwl1OAkJCSpyeF9wdHI7CisJdTE2CQkJYnl0ZXNfcGVyX3dvcmQ7CisJdW5zaWduZWQgaW50CQl3b3Jkc19yZW1haW5pbmc7CisJdW5zaWduZWQgaW50CQliYXVkOworCXN0cnVjdCBjb21wbGV0aW9uCWRvbmU7Cit9OworCitzdGF0aWMgaW50IHNwaV9zdF9jbGtfZW5hYmxlKHN0cnVjdCBzcGlfc3QgKnNwaV9zdCkKK3sKKwkvKgorCSAqIEN1cnJlbnQgcGxhdGZvcm1zIHVzZSBvbmUgb2YgdGhlIGNvcmUgY2xvY2tzIGZvciBTUEkgYW5kIEkyQy4KKwkgKiBJZiB3ZSBhdHRlbXB0IHRvIGRpc2FibGUgdGhlIGNsb2NrLCB0aGUgc3lzdGVtIHdpbGwgaGFuZy4KKwkgKgorCSAqIFRPRE86IFJlbW92ZSB0aGlzIHdoZW4gcGxhdGZvcm0gc3VwcG9ydHMgcG93ZXIgZG9tYWlucy4KKwkgKi8KKwlyZXR1cm4gMDsKKworCXJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUoc3BpX3N0LT5jbGspOworfQorCitzdGF0aWMgdm9pZCBzcGlfc3RfY2xrX2Rpc2FibGUoc3RydWN0IHNwaV9zdCAqc3BpX3N0KQoreworCS8qCisJICogQ3VycmVudCBwbGF0Zm9ybXMgdXNlIG9uZSBvZiB0aGUgY29yZSBjbG9ja3MgZm9yIFNQSSBhbmQgSTJDLgorCSAqIElmIHdlIGF0dGVtcHQgdG8gZGlzYWJsZSB0aGUgY2xvY2ssIHRoZSBzeXN0ZW0gd2lsbCBoYW5nLgorCSAqCisJICogVE9ETzogUmVtb3ZlIHRoaXMgd2hlbiBwbGF0Zm9ybSBzdXBwb3J0cyBwb3dlciBkb21haW5zLgorCSAqLworCXJldHVybjsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShzcGlfc3QtPmNsayk7Cit9CisKKy8qIExvYWQgdGhlIFRYIEZJRk8gKi8KK3N0YXRpYyB2b2lkIHNzY193cml0ZV90eF9maWZvKHN0cnVjdCBzcGlfc3QgKnNwaV9zdCkKK3sKKwl1bnNpZ25lZCBpbnQgY291bnQsIGk7CisJdWludDMyX3Qgd29yZCA9IDA7CisKKwlpZiAoc3BpX3N0LT53b3Jkc19yZW1haW5pbmcgPiBGSUZPX1NJWkUpCisJCWNvdW50ID0gRklGT19TSVpFOworCWVsc2UKKwkJY291bnQgPSBzcGlfc3QtPndvcmRzX3JlbWFpbmluZzsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWlmIChzcGlfc3QtPnR4X3B0cikgeworCQkJaWYgKHNwaV9zdC0+Ynl0ZXNfcGVyX3dvcmQgPT0gMSkgeworCQkJCXdvcmQgPSAqc3BpX3N0LT50eF9wdHIrKzsKKwkJCX0gZWxzZSB7CisJCQkJd29yZCA9ICpzcGlfc3QtPnR4X3B0cisrOworCQkJCXdvcmQgPSAqc3BpX3N0LT50eF9wdHIrKyB8ICh3b3JkIDw8IDgpOworCQkJfQorCQl9CisJCXdyaXRlbF9yZWxheGVkKHdvcmQsIHNwaV9zdC0+YmFzZSArIFNTQ19UQlVGKTsKKwl9Cit9CisKKy8qIFJlYWQgdGhlIFJYIEZJRk8gKi8KK3N0YXRpYyB2b2lkIHNzY19yZWFkX3J4X2ZpZm8oc3RydWN0IHNwaV9zdCAqc3BpX3N0KQoreworCXVuc2lnbmVkIGludCBjb3VudCwgaTsKKwl1aW50MzJfdCB3b3JkID0gMDsKKworCWlmIChzcGlfc3QtPndvcmRzX3JlbWFpbmluZyA+IEZJRk9fU0laRSkKKwkJY291bnQgPSBGSUZPX1NJWkU7CisJZWxzZQorCQljb3VudCA9IHNwaV9zdC0+d29yZHNfcmVtYWluaW5nOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJd29yZCA9IHJlYWRsX3JlbGF4ZWQoc3BpX3N0LT5iYXNlICsgU1NDX1JCVUYpOworCisJCWlmIChzcGlfc3QtPnJ4X3B0cikgeworCQkJaWYgKHNwaV9zdC0+Ynl0ZXNfcGVyX3dvcmQgPT0gMSkgeworCQkJCSpzcGlfc3QtPnJ4X3B0cisrID0gKHVpbnQ4X3Qpd29yZDsKKwkJCX0gZWxzZSB7CisJCQkJKnNwaV9zdC0+cnhfcHRyKysgPSAod29yZCA+PiA4KTsKKwkJCQkqc3BpX3N0LT5yeF9wdHIrKyA9IHdvcmQgJiAweGZmOworCQkJfQorCQl9CisJfQorCXNwaV9zdC0+d29yZHNfcmVtYWluaW5nIC09IGNvdW50OworfQorCitzdGF0aWMgaW50IHNwaV9zdF90cmFuc2Zlcl9vbmUoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciwKKwkJCSAgICAgICBzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQoreworCXN0cnVjdCBzcGlfc3QgKnNwaV9zdCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEobWFzdGVyKTsKKwl1aW50MzJfdCBjdGwgPSAwOworCisJLyogU2V0dXAgdHJhbnNmZXIgKi8KKwlzcGlfc3QtPnR4X3B0ciA9IHQtPnR4X2J1ZjsKKwlzcGlfc3QtPnJ4X3B0ciA9IHQtPnJ4X2J1ZjsKKworCWlmIChzcGktPmJpdHNfcGVyX3dvcmQgPiA4KSB7CisJCS8qCisJCSAqIEFueXRoaW5nIGdyZWF0ZXIgdGhhbiA4IGJpdHMtcGVyLXdvcmQgcmVxdWlyZXMgMgorCQkgKiBieXRlcy1wZXItd29yZCBpbiB0aGUgUlgvVFggYnVmZmVycworCQkgKi8KKwkJc3BpX3N0LT5ieXRlc19wZXJfd29yZCA9IDI7CisJCXNwaV9zdC0+d29yZHNfcmVtYWluaW5nID0gdC0+bGVuIC8gMjsKKworCX0gZWxzZSBpZiAoc3BpLT5iaXRzX3Blcl93b3JkID09IDggJiYgISh0LT5sZW4gJiAweDEpKSB7CisJCS8qCisJCSAqIElmIHRyYW5zZmVyIGlzIGV2ZW4tbGVuZ3RoLCBhbmQgOCBiaXRzLXBlci13b3JkLCB0aGVuCisJCSAqIGltcGxlbWVudCBhcyBoYWxmLWxlbmd0aCAxNiBiaXRzLXBlci13b3JkIHRyYW5zZmVyCisJCSAqLworCQlzcGlfc3QtPmJ5dGVzX3Blcl93b3JkID0gMjsKKwkJc3BpX3N0LT53b3Jkc19yZW1haW5pbmcgPSB0LT5sZW4gLyAyOworCisJCS8qIFNldCBTU0NfQ1RMIHRvIDE2IGJpdHMtcGVyLXdvcmQgKi8KKwkJY3RsID0gcmVhZGxfcmVsYXhlZChzcGlfc3QtPmJhc2UgKyBTU0NfQ1RMKTsKKwkJd3JpdGVsX3JlbGF4ZWQoKGN0bCB8IDB4ZiksIHNwaV9zdC0+YmFzZSArIFNTQ19DVEwpOworCisJCXJlYWRsX3JlbGF4ZWQoc3BpX3N0LT5iYXNlICsgU1NDX1JCVUYpOworCisJfSBlbHNlIHsKKwkJc3BpX3N0LT5ieXRlc19wZXJfd29yZCA9IDE7CisJCXNwaV9zdC0+d29yZHNfcmVtYWluaW5nID0gdC0+bGVuOworCX0KKworCXJlaW5pdF9jb21wbGV0aW9uKCZzcGlfc3QtPmRvbmUpOworCisJLyogU3RhcnQgdHJhbnNmZXIgYnkgd3JpdGluZyB0byB0aGUgVFggRklGTyAqLworCXNzY193cml0ZV90eF9maWZvKHNwaV9zdCk7CisJd3JpdGVsX3JlbGF4ZWQoU1NDX0lFTl9URUVOLCBzcGlfc3QtPmJhc2UgKyBTU0NfSUVOKTsKKworCS8qIFdhaXQgZm9yIHRyYW5zZmVyIHRvIGNvbXBsZXRlICovCisJd2FpdF9mb3JfY29tcGxldGlvbigmc3BpX3N0LT5kb25lKTsKKworCS8qIFJlc3RvcmUgU1NDX0NUTCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoY3RsKQorCQl3cml0ZWxfcmVsYXhlZChjdGwsIHNwaV9zdC0+YmFzZSArIFNTQ19DVEwpOworCisJc3BpX2ZpbmFsaXplX2N1cnJlbnRfdHJhbnNmZXIoc3BpLT5tYXN0ZXIpOworCisJcmV0dXJuIHQtPmxlbjsKK30KKworc3RhdGljIHZvaWQgc3BpX3N0X2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlpbnQgY3MgPSBzcGktPmNzX2dwaW87CisKKwlpZiAoZ3Bpb19pc192YWxpZChjcykpCisJCWRldm1fZ3Bpb19mcmVlKCZzcGktPmRldiwgY3MpOworfQorCisvKiB0aGUgc3BpLT5tb2RlIGJpdHMgdW5kZXJzdG9vZCBieSB0aGlzIGRyaXZlcjogKi8KKyNkZWZpbmUgTU9ERUJJVFMgIChTUElfQ1BPTCB8IFNQSV9DUEhBIHwgU1BJX0xTQl9GSVJTVCB8IFNQSV9MT09QIHwgU1BJX0NTX0hJR0gpCitzdGF0aWMgaW50IHNwaV9zdF9zZXR1cChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBzcGlfc3QgKnNwaV9zdCA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOworCXUzMiBzcGlfc3RfY2xrLCBzc2NicmcsIHZhcjsKKwl1MzIgaHogPSBzcGktPm1heF9zcGVlZF9oejsKKwlpbnQgY3MgPSBzcGktPmNzX2dwaW87CisJaW50IHJldDsKKworCWlmICghaHopICB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAibWF4X3NwZWVkX2h6IHVuc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFncGlvX2lzX3ZhbGlkKGNzKSkgeworCQlkZXZfZXJyKCZzcGktPmRldiwgIiVkIGlzIG5vdCBhIHZhbGlkIGdwaW9cbiIsIGNzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGRldm1fZ3Bpb19yZXF1ZXN0KCZzcGktPmRldiwgY3MsIGRldl9uYW1lKCZzcGktPmRldikpKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAiY291bGQgbm90IHJlcXVlc3QgZ3BpbzolZFxuIiwgY3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoY3MsIHNwaS0+bW9kZSAmIFNQSV9DU19ISUdIKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc3BpX3N0X2NsayA9IGNsa19nZXRfcmF0ZShzcGlfc3QtPmNsayk7CisKKwkvKiBTZXQgU1NDX0JSRiAqLworCXNzY2JyZyA9IHNwaV9zdF9jbGsgLyAoMiAqIGh6KTsKKwlpZiAoc3NjYnJnIDwgMHgwNyB8fCBzc2NicmcgPiBCSVQoMTYpKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LAorCQkJImJhdWRyYXRlICVkIG91dHNpZGUgdmFsaWQgcmFuZ2UgJWRcbiIsIHNzY2JyZywgaHopOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGlfc3QtPmJhdWQgPSBzcGlfc3RfY2xrIC8gKDIgKiBzc2NicmcpOworCWlmIChzc2NicmcgPT0gQklUKDE2KSkgLyogMTYtYml0IGNvdW50ZXIgd3JhcHMgKi8KKwkJc3NjYnJnID0gMHgwOworCisJd3JpdGVsX3JlbGF4ZWQoc3NjYnJnLCBzcGlfc3QtPmJhc2UgKyBTU0NfQlJHKTsKKworCWRldl9kYmcoJnNwaS0+ZGV2LAorCQkic2V0dGluZyBiYXVkcmF0ZTp0YXJnZXQ9ICV1IGh6LCBhY3R1YWw9ICV1IGh6LCBzc2Nicmc9ICV1XG4iLAorCQloeiwgc3BpX3N0LT5iYXVkLCBzc2NicmcpOworCisJIC8qIFNldCBTU0NfQ1RMIGFuZCBlbmFibGUgU1NDICovCisJIHZhciA9IHJlYWRsX3JlbGF4ZWQoc3BpX3N0LT5iYXNlICsgU1NDX0NUTCk7CisJIHZhciB8PSBTU0NfQ1RMX01TOworCisJIGlmIChzcGktPm1vZGUgJiBTUElfQ1BPTCkKKwkJdmFyIHw9IFNTQ19DVExfUE87CisJIGVsc2UKKwkJdmFyICY9IH5TU0NfQ1RMX1BPOworCisJIGlmIChzcGktPm1vZGUgJiBTUElfQ1BIQSkKKwkJdmFyIHw9IFNTQ19DVExfUEg7CisJIGVsc2UKKwkJdmFyICY9IH5TU0NfQ1RMX1BIOworCisJIGlmICgoc3BpLT5tb2RlICYgU1BJX0xTQl9GSVJTVCkgPT0gMCkKKwkJdmFyIHw9IFNTQ19DVExfSEI7CisJIGVsc2UKKwkJdmFyICY9IH5TU0NfQ1RMX0hCOworCisJIGlmIChzcGktPm1vZGUgJiBTUElfTE9PUCkKKwkJdmFyIHw9IFNTQ19DVExfTFBCOworCSBlbHNlCisJCXZhciAmPSB+U1NDX0NUTF9MUEI7CisKKwkgdmFyICY9IH5TU0NfQ1RMX0RBVEFfV0lEVEhfTVNLOworCSB2YXIgfD0gKHNwaS0+Yml0c19wZXJfd29yZCAtIDEpOworCisJIHZhciB8PSBTU0NfQ1RMX0VOX1RYX0ZJRk8gfCBTU0NfQ1RMX0VOX1JYX0ZJRk87CisJIHZhciB8PSBTU0NfQ1RMX0VOOworCisJIHdyaXRlbF9yZWxheGVkKHZhciwgc3BpX3N0LT5iYXNlICsgU1NDX0NUTCk7CisKKwkgLyogQ2xlYXIgdGhlIHN0YXR1cyByZWdpc3RlciAqLworCSByZWFkbF9yZWxheGVkKHNwaV9zdC0+YmFzZSArIFNTQ19SQlVGKTsKKworCSByZXR1cm4gMDsKK30KKworLyogSW50ZXJydXB0IGZpcmVkIHdoZW4gVFggc2hpZnQgcmVnaXN0ZXIgYmVjb21lcyBlbXB0eSAqLworc3RhdGljIGlycXJldHVybl90IHNwaV9zdF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzcGlfc3QgKnNwaV9zdCA9IChzdHJ1Y3Qgc3BpX3N0ICopZGV2X2lkOworCisJLyogUmVhZCBSWCBGSUZPICovCisJc3NjX3JlYWRfcnhfZmlmbyhzcGlfc3QpOworCisJLyogRmlsbCBUWCBGSUZPICovCisJaWYgKHNwaV9zdC0+d29yZHNfcmVtYWluaW5nKSB7CisJCXNzY193cml0ZV90eF9maWZvKHNwaV9zdCk7CisJfSBlbHNlIHsKKwkJLyogVFgvUlggY29tcGxldGUgKi8KKwkJd3JpdGVsX3JlbGF4ZWQoMHgwLCBzcGlfc3QtPmJhc2UgKyBTU0NfSUVOKTsKKwkJLyoKKwkJICogcmVhZCBTU0NfSUVOIHRvIGVuc3VyZSB0aGF0IHRoaXMgYml0IGlzIHNldAorCQkgKiBiZWZvcmUgcmUtZW5hYmxpbmcgaW50ZXJydXB0CisJCSAqLworCQlyZWFkbChzcGlfc3QtPmJhc2UgKyBTU0NfSUVOKTsKKwkJY29tcGxldGUoJnNwaV9zdC0+ZG9uZSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHNwaV9zdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBzcGlfc3QgKnNwaV9zdDsKKwlpbnQgaXJxLCByZXQgPSAwOworCXUzMiB2YXI7CisKKwltYXN0ZXIgPSBzcGlfYWxsb2NfbWFzdGVyKCZwZGV2LT5kZXYsIHNpemVvZigqc3BpX3N0KSk7CisJaWYgKCFtYXN0ZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJbWFzdGVyLT5kZXYub2Zfbm9kZQkJPSBucDsKKwltYXN0ZXItPm1vZGVfYml0cwkJPSBNT0RFQklUUzsKKwltYXN0ZXItPnNldHVwCQkJPSBzcGlfc3Rfc2V0dXA7CisJbWFzdGVyLT5jbGVhbnVwCQkJPSBzcGlfc3RfY2xlYW51cDsKKwltYXN0ZXItPnRyYW5zZmVyX29uZQkJPSBzcGlfc3RfdHJhbnNmZXJfb25lOworCW1hc3Rlci0+Yml0c19wZXJfd29yZF9tYXNrCT0gU1BJX0JQV19NQVNLKDgpIHwgU1BJX0JQV19NQVNLKDE2KTsKKwltYXN0ZXItPmF1dG9fcnVudGltZV9wbQkJPSB0cnVlOworCW1hc3Rlci0+YnVzX251bQkJCT0gcGRldi0+aWQ7CisJc3BpX3N0CQkJCT0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJc3BpX3N0LT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgInNzYyIpOworCWlmIChJU19FUlIoc3BpX3N0LT5jbGspKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byByZXF1ZXN0IGNsb2NrXG4iKTsKKwkJcmV0dXJuIFBUUl9FUlIoc3BpX3N0LT5jbGspOworCX0KKworCXJldCA9IHNwaV9zdF9jbGtfZW5hYmxlKHNwaV9zdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWluaXRfY29tcGxldGlvbigmc3BpX3N0LT5kb25lKTsKKworCS8qIEdldCByZXNvdXJjZXMgKi8KKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXNwaV9zdC0+YmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoc3BpX3N0LT5iYXNlKSkgeworCQlyZXQgPSBQVFJfRVJSKHNwaV9zdC0+YmFzZSk7CisJCWdvdG8gY2xrX2Rpc2FibGU7CisJfQorCisJLyogRGlzYWJsZSBJMkMgYW5kIFJlc2V0IFNTQyAqLworCXdyaXRlbF9yZWxheGVkKDB4MCwgc3BpX3N0LT5iYXNlICsgU1NDX0kyQyk7CisJdmFyID0gcmVhZHdfcmVsYXhlZChzcGlfc3QtPmJhc2UgKyBTU0NfQ1RMKTsKKwl2YXIgfD0gU1NDX0NUTF9TUjsKKwl3cml0ZWxfcmVsYXhlZCh2YXIsIHNwaV9zdC0+YmFzZSArIFNTQ19DVEwpOworCisJdWRlbGF5KDEpOworCXZhciA9IHJlYWRsX3JlbGF4ZWQoc3BpX3N0LT5iYXNlICsgU1NDX0NUTCk7CisJdmFyICY9IH5TU0NfQ1RMX1NSOworCXdyaXRlbF9yZWxheGVkKHZhciwgc3BpX3N0LT5iYXNlICsgU1NDX0NUTCk7CisKKwkvKiBTZXQgU1NDIGludG8gc2xhdmUgbW9kZSBiZWZvcmUgcmVjb25maWd1cmluZyBQSU8gcGlucyAqLworCXZhciA9IHJlYWRsX3JlbGF4ZWQoc3BpX3N0LT5iYXNlICsgU1NDX0NUTCk7CisJdmFyICY9IH5TU0NfQ1RMX01TOworCXdyaXRlbF9yZWxheGVkKHZhciwgc3BpX3N0LT5iYXNlICsgU1NDX0NUTCk7CisKKwlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJaWYgKCFpcnEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSVJRIG1pc3Npbmcgb3IgaW52YWxpZFxuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gY2xrX2Rpc2FibGU7CisJfQorCisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnEsIHNwaV9zdF9pcnEsIDAsCisJCQkgICAgICAgcGRldi0+bmFtZSwgc3BpX3N0KTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGlycSAlZFxuIiwgaXJxKTsKKwkJZ290byBjbGtfZGlzYWJsZTsKKwl9CisKKwkvKiBieSBkZWZhdWx0IHRoZSBkZXZpY2UgaXMgb24gKi8KKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoJnBkZXYtPmRldik7CisJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBtYXN0ZXIpOworCisJcmV0ID0gZGV2bV9zcGlfcmVnaXN0ZXJfbWFzdGVyKCZwZGV2LT5kZXYsIG1hc3Rlcik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgbWFzdGVyXG4iKTsKKwkJZ290byBjbGtfZGlzYWJsZTsKKwl9CisKKwlyZXR1cm4gMDsKKworY2xrX2Rpc2FibGU6CisJc3BpX3N0X2Nsa19kaXNhYmxlKHNwaV9zdCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNwaV9zdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHNwaV9zdCAqc3BpX3N0ID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShtYXN0ZXIpOworCisJc3BpX3N0X2Nsa19kaXNhYmxlKHNwaV9zdCk7CisKKwlwaW5jdHJsX3BtX3NlbGVjdF9zbGVlcF9zdGF0ZSgmcGRldi0+ZGV2KTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHNwaV9zdF9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3BpX3N0ICpzcGlfc3QgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisKKwl3cml0ZWxfcmVsYXhlZCgwLCBzcGlfc3QtPmJhc2UgKyBTU0NfSUVOKTsKKwlwaW5jdHJsX3BtX3NlbGVjdF9zbGVlcF9zdGF0ZShkZXYpOworCisJc3BpX3N0X2Nsa19kaXNhYmxlKHNwaV9zdCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzcGlfc3RfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3BpX3N0ICpzcGlfc3QgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJaW50IHJldDsKKworCXJldCA9IHNwaV9zdF9jbGtfZW5hYmxlKHNwaV9zdCk7CisJcGluY3RybF9wbV9zZWxlY3RfZGVmYXVsdF9zdGF0ZShkZXYpOworCisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IHNwaV9zdF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKworCXJldCA9IHNwaV9tYXN0ZXJfc3VzcGVuZChtYXN0ZXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcG1fcnVudGltZV9mb3JjZV9zdXNwZW5kKGRldik7Cit9CisKK3N0YXRpYyBpbnQgc3BpX3N0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBzcGlfbWFzdGVyX3Jlc3VtZShtYXN0ZXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcG1fcnVudGltZV9mb3JjZV9yZXN1bWUoZGV2KTsKK30KKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc3BpX3N0X3BtID0geworCVNFVF9TWVNURU1fU0xFRVBfUE1fT1BTKHNwaV9zdF9zdXNwZW5kLCBzcGlfc3RfcmVzdW1lKQorCVNFVF9SVU5USU1FX1BNX09QUyhzcGlfc3RfcnVudGltZV9zdXNwZW5kLCBzcGlfc3RfcnVudGltZV9yZXN1bWUsIE5VTEwpCit9OworCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBzdG1fc3BpX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJzdCxjb21tcy1zc2M0LXNwaSIsIH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc3RtX3NwaV9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNwaV9zdF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAic3BpLXN0IiwKKwkJLnBtID0gJnNwaV9zdF9wbSwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKHN0bV9zcGlfbWF0Y2gpLAorCX0sCisJLnByb2JlID0gc3BpX3N0X3Byb2JlLAorCS5yZW1vdmUgPSBzcGlfc3RfcmVtb3ZlLAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc3BpX3N0X2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIlBhdHJpY2UgQ2hvdGFyZCA8cGF0cmljZS5jaG90YXJkQHN0LmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU1RNIFNTQyBTUEkgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktdGktcXNwaS5jIGIvZHJpdmVycy9zcGkvc3BpLXRpLXFzcGkuYwppbmRleCA2MTQ2YzRjLi44ODRhNzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGktdGktcXNwaS5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS10aS1xc3BpLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCiBzdGF0aWMgaW50IHFzcGlfd3JpdGVfbXNnKHN0cnVjdCB0aV9xc3BpICpxc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQogewotCWludCB3bGVuLCBjb3VudCwgcmV0OworCWludCB3bGVuLCBjb3VudDsKIAl1bnNpZ25lZCBpbnQgY21kOwogCWNvbnN0IHU4ICp0eGJ1ZjsKIApAQCAtMjMwLDkgKzIzMCw4IEBACiAJCX0KIAogCQl0aV9xc3BpX3dyaXRlKHFzcGksIGNtZCwgUVNQSV9TUElfQ01EX1JFRyk7Ci0JCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcXNwaS0+dHJhbnNmZXJfY29tcGxldGUsCi0JCQkJCQkgIFFTUElfQ09NUExFVElPTl9USU1FT1VUKTsKLQkJaWYgKHJldCA9PSAwKSB7CisJCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZxc3BpLT50cmFuc2Zlcl9jb21wbGV0ZSwKKwkJCQkJCSBRU1BJX0NPTVBMRVRJT05fVElNRU9VVCkpIHsKIAkJCWRldl9lcnIocXNwaS0+ZGV2LCAid3JpdGUgdGltZWQgb3V0XG4iKTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CkBAIC0yNDUsNyArMjQ0LDcgQEAKIAogc3RhdGljIGludCBxc3BpX3JlYWRfbXNnKHN0cnVjdCB0aV9xc3BpICpxc3BpLCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp0KQogewotCWludCB3bGVuLCBjb3VudCwgcmV0OworCWludCB3bGVuLCBjb3VudDsKIAl1bnNpZ25lZCBpbnQgY21kOwogCXU4ICpyeGJ1ZjsKIApAQCAtMjY4LDkgKzI2Nyw4IEBACiAJd2hpbGUgKGNvdW50KSB7CiAJCWRldl9kYmcocXNwaS0+ZGV2LCAicnggY21kICUwOHggZGMgJTA4eFxuIiwgY21kLCBxc3BpLT5kYyk7CiAJCXRpX3FzcGlfd3JpdGUocXNwaSwgY21kLCBRU1BJX1NQSV9DTURfUkVHKTsKLQkJcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZxc3BpLT50cmFuc2Zlcl9jb21wbGV0ZSwKLQkJCQlRU1BJX0NPTVBMRVRJT05fVElNRU9VVCk7Ci0JCWlmIChyZXQgPT0gMCkgeworCQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmcXNwaS0+dHJhbnNmZXJfY29tcGxldGUsCisJCQkJCQkgUVNQSV9DT01QTEVUSU9OX1RJTUVPVVQpKSB7CiAJCQlkZXZfZXJyKHFzcGktPmRldiwgInJlYWQgdGltZWQgb3V0XG4iKTsKIAkJCXJldHVybiAtRVRJTUVET1VUOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGktdG9wY2xpZmYtcGNoLmMgYi9kcml2ZXJzL3NwaS9zcGktdG9wY2xpZmYtcGNoLmMKaW5kZXggYmU2OTJhZC4uOTNkZmNlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLXRvcGNsaWZmLXBjaC5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaS10b3BjbGlmZi1wY2guYwpAQCAtMTEsMTAgKzExLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS14aWxpbnguYyBiL2RyaXZlcnMvc3BpL3NwaS14aWxpbnguYwppbmRleCA3OWJkODRmLi4xMzNmNTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGkteGlsaW54LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLXhpbGlueC5jCkBAIC0yMiw2ICsyMiw4IEBACiAjaW5jbHVkZSA8bGludXgvc3BpL3hpbGlueF9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCisjZGVmaW5lIFhJTElOWF9TUElfTUFYX0NTCTMyCisKICNkZWZpbmUgWElMSU5YX1NQSV9OQU1FICJ4aWxpbnhfc3BpIgogCiAvKiBSZWdpc3RlciBkZWZpbml0aW9ucyBhcyBwZXIgIk9QQiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKFNQSSkgKHYxLjAwZSkKQEAgLTM0LDcgKzM2LDggQEAKICNkZWZpbmUgWFNQSV9DUl9NQVNURVJfTU9ERQkweDA0CiAjZGVmaW5lIFhTUElfQ1JfQ1BPTAkJMHgwOAogI2RlZmluZSBYU1BJX0NSX0NQSEEJCTB4MTAKLSNkZWZpbmUgWFNQSV9DUl9NT0RFX01BU0sJKFhTUElfQ1JfQ1BIQSB8IFhTUElfQ1JfQ1BPTCkKKyNkZWZpbmUgWFNQSV9DUl9NT0RFX01BU0sJKFhTUElfQ1JfQ1BIQSB8IFhTUElfQ1JfQ1BPTCB8IFwKKwkJCQkgWFNQSV9DUl9MU0JfRklSU1QgfCBYU1BJX0NSX0xPT1ApCiAjZGVmaW5lIFhTUElfQ1JfVFhGSUZPX1JFU0VUCTB4MjAKICNkZWZpbmUgWFNQSV9DUl9SWEZJRk9fUkVTRVQJMHg0MAogI2RlZmluZSBYU1BJX0NSX01BTlVBTF9TU0VMRUNUCTB4ODAKQEAgLTg1LDEyICs4OCwxMSBAQAogCiAJdTggKnJ4X3B0cjsJCS8qIHBvaW50ZXIgaW4gdGhlIFR4IGJ1ZmZlciAqLwogCWNvbnN0IHU4ICp0eF9wdHI7CS8qIHBvaW50ZXIgaW4gdGhlIFJ4IGJ1ZmZlciAqLwotCWludCByZW1haW5pbmdfYnl0ZXM7CS8qIHRoZSBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byB0cmFuc2ZlciAqLwotCXU4IGJpdHNfcGVyX3dvcmQ7CisJdTggYnl0ZXNfcGVyX3dvcmQ7CisJaW50IGJ1ZmZlcl9zaXplOwkvKiBidWZmZXIgc2l6ZSBpbiB3b3JkcyAqLworCXUzMiBjc19pbmFjdGl2ZTsJLyogTGV2ZWwgb2YgdGhlIENTIHBpbnMgd2hlbiBpbmFjdGl2ZSovCiAJdW5zaWduZWQgaW50ICgqcmVhZF9mbikodm9pZCBfX2lvbWVtICopOwogCXZvaWQgKCp3cml0ZV9mbikodTMyLCB2b2lkIF9faW9tZW0gKik7Ci0Jdm9pZCAoKnR4X2ZuKShzdHJ1Y3QgeGlsaW54X3NwaSAqKTsKLQl2b2lkICgqcnhfZm4pKHN0cnVjdCB4aWxpbnhfc3BpICopOwogfTsKIAogc3RhdGljIHZvaWQgeHNwaV93cml0ZTMyKHUzMiB2YWwsIHZvaWQgX19pb21lbSAqYWRkcikKQEAgLTExMyw0OSArMTE1LDUxIEBACiAJcmV0dXJuIGlvcmVhZDMyYmUoYWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIHhzcGlfdHg4KHN0cnVjdCB4aWxpbnhfc3BpICp4c3BpKQorc3RhdGljIHZvaWQgeGlsaW54X3NwaV90eChzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaSkKIHsKLQl4c3BpLT53cml0ZV9mbigqeHNwaS0+dHhfcHRyLCB4c3BpLT5yZWdzICsgWFNQSV9UWERfT0ZGU0VUKTsKLQl4c3BpLT50eF9wdHIrKzsKLX0KKwl1MzIgZGF0YSA9IDA7CiAKLXN0YXRpYyB2b2lkIHhzcGlfdHgxNihzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaSkKLXsKLQl4c3BpLT53cml0ZV9mbigqKHUxNiAqKSh4c3BpLT50eF9wdHIpLCB4c3BpLT5yZWdzICsgWFNQSV9UWERfT0ZGU0VUKTsKLQl4c3BpLT50eF9wdHIgKz0gMjsKLX0KLQotc3RhdGljIHZvaWQgeHNwaV90eDMyKHN0cnVjdCB4aWxpbnhfc3BpICp4c3BpKQotewotCXhzcGktPndyaXRlX2ZuKCoodTMyICopKHhzcGktPnR4X3B0ciksIHhzcGktPnJlZ3MgKyBYU1BJX1RYRF9PRkZTRVQpOwotCXhzcGktPnR4X3B0ciArPSA0OwotfQotCi1zdGF0aWMgdm9pZCB4c3BpX3J4OChzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaSkKLXsKLQl1MzIgZGF0YSA9IHhzcGktPnJlYWRfZm4oeHNwaS0+cmVncyArIFhTUElfUlhEX09GRlNFVCk7Ci0JaWYgKHhzcGktPnJ4X3B0cikgewotCQkqeHNwaS0+cnhfcHRyID0gZGF0YSAmIDB4ZmY7Ci0JCXhzcGktPnJ4X3B0cisrOworCWlmICgheHNwaS0+dHhfcHRyKSB7CisJCXhzcGktPndyaXRlX2ZuKDAsIHhzcGktPnJlZ3MgKyBYU1BJX1RYRF9PRkZTRVQpOworCQlyZXR1cm47CiAJfQotfQogCi1zdGF0aWMgdm9pZCB4c3BpX3J4MTYoc3RydWN0IHhpbGlueF9zcGkgKnhzcGkpCi17Ci0JdTMyIGRhdGEgPSB4c3BpLT5yZWFkX2ZuKHhzcGktPnJlZ3MgKyBYU1BJX1JYRF9PRkZTRVQpOwotCWlmICh4c3BpLT5yeF9wdHIpIHsKLQkJKih1MTYgKikoeHNwaS0+cnhfcHRyKSA9IGRhdGEgJiAweGZmZmY7Ci0JCXhzcGktPnJ4X3B0ciArPSAyOworCXN3aXRjaCAoeHNwaS0+Ynl0ZXNfcGVyX3dvcmQpIHsKKwljYXNlIDE6CisJCWRhdGEgPSAqKHU4ICopKHhzcGktPnR4X3B0cik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGF0YSA9ICoodTE2ICopKHhzcGktPnR4X3B0cik7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJZGF0YSA9ICoodTMyICopKHhzcGktPnR4X3B0cik7CisJCWJyZWFrOwogCX0KKworCXhzcGktPndyaXRlX2ZuKGRhdGEsIHhzcGktPnJlZ3MgKyBYU1BJX1RYRF9PRkZTRVQpOworCXhzcGktPnR4X3B0ciArPSB4c3BpLT5ieXRlc19wZXJfd29yZDsKIH0KIAotc3RhdGljIHZvaWQgeHNwaV9yeDMyKHN0cnVjdCB4aWxpbnhfc3BpICp4c3BpKQorc3RhdGljIHZvaWQgeGlsaW54X3NwaV9yeChzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaSkKIHsKIAl1MzIgZGF0YSA9IHhzcGktPnJlYWRfZm4oeHNwaS0+cmVncyArIFhTUElfUlhEX09GRlNFVCk7Ci0JaWYgKHhzcGktPnJ4X3B0cikgeworCisJaWYgKCF4c3BpLT5yeF9wdHIpCisJCXJldHVybjsKKworCXN3aXRjaCAoeHNwaS0+Ynl0ZXNfcGVyX3dvcmQpIHsKKwljYXNlIDE6CisJCSoodTggKikoeHNwaS0+cnhfcHRyKSA9IGRhdGE7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJKih1MTYgKikoeHNwaS0+cnhfcHRyKSA9IGRhdGE7CisJCWJyZWFrOworCWNhc2UgNDoKIAkJKih1MzIgKikoeHNwaS0+cnhfcHRyKSA9IGRhdGE7Ci0JCXhzcGktPnJ4X3B0ciArPSA0OworCQlicmVhazsKIAl9CisKKwl4c3BpLT5yeF9wdHIgKz0geHNwaS0+Ynl0ZXNfcGVyX3dvcmQ7CiB9CiAKIHN0YXRpYyB2b2lkIHhzcGlfaW5pdF9odyhzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaSkKQEAgLTE2NSw0NiArMTY5LDU2IEBACiAJLyogUmVzZXQgdGhlIFNQSSBkZXZpY2UgKi8KIAl4c3BpLT53cml0ZV9mbihYSVBJRl9WMTIzQl9SRVNFVF9NQVNLLAogCQlyZWdzX2Jhc2UgKyBYSVBJRl9WMTIzQl9SRVNFVFJfT0ZGU0VUKTsKLQkvKiBEaXNhYmxlIGFsbCB0aGUgaW50ZXJydXB0cyBqdXN0IGluIGNhc2UgKi8KLQl4c3BpLT53cml0ZV9mbigwLCByZWdzX2Jhc2UgKyBYSVBJRl9WMTIzQl9JSUVSX09GRlNFVCk7Ci0JLyogRW5hYmxlIHRoZSBnbG9iYWwgSVBJRiBpbnRlcnJ1cHQgKi8KLQl4c3BpLT53cml0ZV9mbihYSVBJRl9WMTIzQl9HSU5UUl9FTkFCTEUsCi0JCXJlZ3NfYmFzZSArIFhJUElGX1YxMjNCX0RHSUVSX09GRlNFVCk7CisJLyogRW5hYmxlIHRoZSB0cmFuc21pdCBlbXB0eSBpbnRlcnJ1cHQsIHdoaWNoIHdlIHVzZSB0byBkZXRlcm1pbmUKKwkgKiBwcm9ncmVzcyBvbiB0aGUgdHJhbnNtaXNzaW9uLgorCSAqLworCXhzcGktPndyaXRlX2ZuKFhTUElfSU5UUl9UWF9FTVBUWSwKKwkJCXJlZ3NfYmFzZSArIFhJUElGX1YxMjNCX0lJRVJfT0ZGU0VUKTsKKwkvKiBEaXNhYmxlIHRoZSBnbG9iYWwgSVBJRiBpbnRlcnJ1cHQgKi8KKwl4c3BpLT53cml0ZV9mbigwLCByZWdzX2Jhc2UgKyBYSVBJRl9WMTIzQl9ER0lFUl9PRkZTRVQpOwogCS8qIERlc2VsZWN0IHRoZSBzbGF2ZSBvbiB0aGUgU1BJIGJ1cyAqLwogCXhzcGktPndyaXRlX2ZuKDB4ZmZmZiwgcmVnc19iYXNlICsgWFNQSV9TU1JfT0ZGU0VUKTsKIAkvKiBEaXNhYmxlIHRoZSB0cmFuc21pdHRlciwgZW5hYmxlIE1hbnVhbCBTbGF2ZSBTZWxlY3QgQXNzZXJ0aW9uLAogCSAqIHB1dCBTUEkgY29udHJvbGxlciBpbnRvIG1hc3RlciBtb2RlLCBhbmQgZW5hYmxlIGl0ICovCi0JeHNwaS0+d3JpdGVfZm4oWFNQSV9DUl9UUkFOU19JTkhJQklUIHwgWFNQSV9DUl9NQU5VQUxfU1NFTEVDVCB8Ci0JCVhTUElfQ1JfTUFTVEVSX01PREUgfCBYU1BJX0NSX0VOQUJMRSB8IFhTUElfQ1JfVFhGSUZPX1JFU0VUIHwKLQkJWFNQSV9DUl9SWEZJRk9fUkVTRVQsIHJlZ3NfYmFzZSArIFhTUElfQ1JfT0ZGU0VUKTsKKwl4c3BpLT53cml0ZV9mbihYU1BJX0NSX01BTlVBTF9TU0VMRUNUIHwJWFNQSV9DUl9NQVNURVJfTU9ERSB8CisJCVhTUElfQ1JfRU5BQkxFIHwgWFNQSV9DUl9UWEZJRk9fUkVTRVQgfAlYU1BJX0NSX1JYRklGT19SRVNFVCwKKwkJcmVnc19iYXNlICsgWFNQSV9DUl9PRkZTRVQpOwogfQogCiBzdGF0aWMgdm9pZCB4aWxpbnhfc3BpX2NoaXBzZWxlY3Qoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgaW50IGlzX29uKQogewogCXN0cnVjdCB4aWxpbnhfc3BpICp4c3BpID0gc3BpX21hc3Rlcl9nZXRfZGV2ZGF0YShzcGktPm1hc3Rlcik7CisJdTE2IGNyOworCXUzMiBjczsKIAogCWlmIChpc19vbiA9PSBCSVRCQU5HX0NTX0lOQUNUSVZFKSB7CiAJCS8qIERlc2VsZWN0IHRoZSBzbGF2ZSBvbiB0aGUgU1BJIGJ1cyAqLwotCQl4c3BpLT53cml0ZV9mbigweGZmZmYsIHhzcGktPnJlZ3MgKyBYU1BJX1NTUl9PRkZTRVQpOwotCX0gZWxzZSBpZiAoaXNfb24gPT0gQklUQkFOR19DU19BQ1RJVkUpIHsKLQkJLyogU2V0IHRoZSBTUEkgY2xvY2sgcGhhc2UgYW5kIHBvbGFyaXR5ICovCi0JCXUxNiBjciA9IHhzcGktPnJlYWRfZm4oeHNwaS0+cmVncyArIFhTUElfQ1JfT0ZGU0VUKQotCQkJICYgflhTUElfQ1JfTU9ERV9NQVNLOwotCQlpZiAoc3BpLT5tb2RlICYgU1BJX0NQSEEpCi0JCQljciB8PSBYU1BJX0NSX0NQSEE7Ci0JCWlmIChzcGktPm1vZGUgJiBTUElfQ1BPTCkKLQkJCWNyIHw9IFhTUElfQ1JfQ1BPTDsKLQkJeHNwaS0+d3JpdGVfZm4oY3IsIHhzcGktPnJlZ3MgKyBYU1BJX0NSX09GRlNFVCk7Ci0KLQkJLyogV2UgZG8gbm90IGNoZWNrIHNwaS0+bWF4X3NwZWVkX2h6IGhlcmUgYXMgdGhlIFNQSSBjbG9jawotCQkgKiBmcmVxdWVuY3kgaXMgbm90IHNvZnR3YXJlIHByb2dyYW1tYWJsZSAodGhlIElQIGJsb2NrIGRlc2lnbgotCQkgKiBwYXJhbWV0ZXIpCi0JCSAqLwotCi0JCS8qIEFjdGl2YXRlIHRoZSBjaGlwIHNlbGVjdCAqLwotCQl4c3BpLT53cml0ZV9mbih+KDB4MDAwMSA8PCBzcGktPmNoaXBfc2VsZWN0KSwKLQkJCXhzcGktPnJlZ3MgKyBYU1BJX1NTUl9PRkZTRVQpOworCQl4c3BpLT53cml0ZV9mbih4c3BpLT5jc19pbmFjdGl2ZSwgeHNwaS0+cmVncyArIFhTUElfU1NSX09GRlNFVCk7CisJCXJldHVybjsKIAl9CisKKwkvKiBTZXQgdGhlIFNQSSBjbG9jayBwaGFzZSBhbmQgcG9sYXJpdHkgKi8KKwljciA9IHhzcGktPnJlYWRfZm4oeHNwaS0+cmVncyArIFhTUElfQ1JfT0ZGU0VUKQkmIH5YU1BJX0NSX01PREVfTUFTSzsKKwlpZiAoc3BpLT5tb2RlICYgU1BJX0NQSEEpCisJCWNyIHw9IFhTUElfQ1JfQ1BIQTsKKwlpZiAoc3BpLT5tb2RlICYgU1BJX0NQT0wpCisJCWNyIHw9IFhTUElfQ1JfQ1BPTDsKKwlpZiAoc3BpLT5tb2RlICYgU1BJX0xTQl9GSVJTVCkKKwkJY3IgfD0gWFNQSV9DUl9MU0JfRklSU1Q7CisJaWYgKHNwaS0+bW9kZSAmIFNQSV9MT09QKQorCQljciB8PSBYU1BJX0NSX0xPT1A7CisJeHNwaS0+d3JpdGVfZm4oY3IsIHhzcGktPnJlZ3MgKyBYU1BJX0NSX09GRlNFVCk7CisKKwkvKiBXZSBkbyBub3QgY2hlY2sgc3BpLT5tYXhfc3BlZWRfaHogaGVyZSBhcyB0aGUgU1BJIGNsb2NrCisJICogZnJlcXVlbmN5IGlzIG5vdCBzb2Z0d2FyZSBwcm9ncmFtbWFibGUgKHRoZSBJUCBibG9jayBkZXNpZ24KKwkgKiBwYXJhbWV0ZXIpCisJICovCisKKwljcyA9IHhzcGktPmNzX2luYWN0aXZlOworCWNzIF49IEJJVChzcGktPmNoaXBfc2VsZWN0KTsKKworCS8qIEFjdGl2YXRlIHRoZSBjaGlwIHNlbGVjdCAqLworCXhzcGktPndyaXRlX2ZuKGNzLCB4c3BpLT5yZWdzICsgWFNQSV9TU1JfT0ZGU0VUKTsKIH0KIAogLyogc3BpX2JpdGJhbmcgcmVxdWlyZXMgY3VzdG9tIHNldHVwX3RyYW5zZmVyKCkgdG8gYmUgZGVmaW5lZCBpZiB0aGVyZSBpcyBhCkBAIC0yMTMsODUgKzIyNyw4NSBAQAogc3RhdGljIGludCB4aWxpbnhfc3BpX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCiAJCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnQpCiB7CisJc3RydWN0IHhpbGlueF9zcGkgKnhzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKHNwaS0+bWFzdGVyKTsKKworCWlmIChzcGktPm1vZGUgJiBTUElfQ1NfSElHSCkKKwkJeHNwaS0+Y3NfaW5hY3RpdmUgJj0gfkJJVChzcGktPmNoaXBfc2VsZWN0KTsKKwllbHNlCisJCXhzcGktPmNzX2luYWN0aXZlIHw9IEJJVChzcGktPmNoaXBfc2VsZWN0KTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB4aWxpbnhfc3BpX2ZpbGxfdHhfZmlmbyhzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaSkKLXsKLQl1OCBzcjsKLQotCS8qIEZpbGwgdGhlIFR4IEZJRk8gd2l0aCBhcyBtYW55IGJ5dGVzIGFzIHBvc3NpYmxlICovCi0Jc3IgPSB4c3BpLT5yZWFkX2ZuKHhzcGktPnJlZ3MgKyBYU1BJX1NSX09GRlNFVCk7Ci0Jd2hpbGUgKChzciAmIFhTUElfU1JfVFhfRlVMTF9NQVNLKSA9PSAwICYmIHhzcGktPnJlbWFpbmluZ19ieXRlcyA+IDApIHsKLQkJaWYgKHhzcGktPnR4X3B0cikKLQkJCXhzcGktPnR4X2ZuKHhzcGkpOwotCQllbHNlCi0JCQl4c3BpLT53cml0ZV9mbigwLCB4c3BpLT5yZWdzICsgWFNQSV9UWERfT0ZGU0VUKTsKLQkJeHNwaS0+cmVtYWluaW5nX2J5dGVzIC09IHhzcGktPmJpdHNfcGVyX3dvcmQgLyA4OwotCQlzciA9IHhzcGktPnJlYWRfZm4oeHNwaS0+cmVncyArIFhTUElfU1JfT0ZGU0VUKTsKLQl9Ci19Ci0KIHN0YXRpYyBpbnQgeGlsaW54X3NwaV90eHJ4X2J1ZnMoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV90cmFuc2ZlciAqdCkKIHsKIAlzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaSA9IHNwaV9tYXN0ZXJfZ2V0X2RldmRhdGEoc3BpLT5tYXN0ZXIpOwotCXUzMiBpcGlmX2llcjsKKwlpbnQgcmVtYWluaW5nX3dvcmRzOwkvKiB0aGUgbnVtYmVyIG9mIHdvcmRzIGxlZnQgdG8gdHJhbnNmZXIgKi8KKwlib29sIHVzZV9pcnEgPSBmYWxzZTsKKwl1MTYgY3IgPSAwOwogCiAJLyogV2UgZ2V0IGhlcmUgd2l0aCB0cmFuc21pdHRlciBpbmhpYml0ZWQgKi8KIAogCXhzcGktPnR4X3B0ciA9IHQtPnR4X2J1ZjsKIAl4c3BpLT5yeF9wdHIgPSB0LT5yeF9idWY7Ci0JeHNwaS0+cmVtYWluaW5nX2J5dGVzID0gdC0+bGVuOworCXJlbWFpbmluZ193b3JkcyA9IHQtPmxlbiAvIHhzcGktPmJ5dGVzX3Blcl93b3JkOwogCXJlaW5pdF9jb21wbGV0aW9uKCZ4c3BpLT5kb25lKTsKIAorCWlmICh4c3BpLT5pcnEgPj0gMCAmJiAgcmVtYWluaW5nX3dvcmRzID4geHNwaS0+YnVmZmVyX3NpemUpIHsKKwkJdXNlX2lycSA9IHRydWU7CisJCXhzcGktPndyaXRlX2ZuKFhTUElfSU5UUl9UWF9FTVBUWSwKKwkJCQl4c3BpLT5yZWdzICsgWElQSUZfVjEyM0JfSUlTUl9PRkZTRVQpOworCQkvKiBFbmFibGUgdGhlIGdsb2JhbCBJUElGIGludGVycnVwdCAqLworCQl4c3BpLT53cml0ZV9mbihYSVBJRl9WMTIzQl9HSU5UUl9FTkFCTEUsCisJCQkJeHNwaS0+cmVncyArIFhJUElGX1YxMjNCX0RHSUVSX09GRlNFVCk7CisJCS8qIEluaGliaXQgaXJxIHRvIGF2b2lkIHNwdXJpb3VzIGlycXMgb24gdHhfZW1wdHkqLworCQljciA9IHhzcGktPnJlYWRfZm4oeHNwaS0+cmVncyArIFhTUElfQ1JfT0ZGU0VUKTsKKwkJeHNwaS0+d3JpdGVfZm4oY3IgfCBYU1BJX0NSX1RSQU5TX0lOSElCSVQsCisJCQkgICAgICAgeHNwaS0+cmVncyArIFhTUElfQ1JfT0ZGU0VUKTsKKwl9CiAKLQkvKiBFbmFibGUgdGhlIHRyYW5zbWl0IGVtcHR5IGludGVycnVwdCwgd2hpY2ggd2UgdXNlIHRvIGRldGVybWluZQotCSAqIHByb2dyZXNzIG9uIHRoZSB0cmFuc21pc3Npb24uCi0JICovCi0JaXBpZl9pZXIgPSB4c3BpLT5yZWFkX2ZuKHhzcGktPnJlZ3MgKyBYSVBJRl9WMTIzQl9JSUVSX09GRlNFVCk7Ci0JeHNwaS0+d3JpdGVfZm4oaXBpZl9pZXIgfCBYU1BJX0lOVFJfVFhfRU1QVFksCi0JCXhzcGktPnJlZ3MgKyBYSVBJRl9WMTIzQl9JSUVSX09GRlNFVCk7CisJd2hpbGUgKHJlbWFpbmluZ193b3JkcykgeworCQlpbnQgbl93b3JkcywgdHhfd29yZHMsIHJ4X3dvcmRzOwogCi0JZm9yICg7OykgewotCQl1MTYgY3I7Ci0JCXU4IHNyOworCQluX3dvcmRzID0gbWluKHJlbWFpbmluZ193b3JkcywgeHNwaS0+YnVmZmVyX3NpemUpOwogCi0JCXhpbGlueF9zcGlfZmlsbF90eF9maWZvKHhzcGkpOworCQl0eF93b3JkcyA9IG5fd29yZHM7CisJCXdoaWxlICh0eF93b3Jkcy0tKQorCQkJeGlsaW54X3NwaV90eCh4c3BpKTsKIAogCQkvKiBTdGFydCB0aGUgdHJhbnNmZXIgYnkgbm90IGluaGliaXRpbmcgdGhlIHRyYW5zbWl0dGVyIGFueQogCQkgKiBsb25nZXIKIAkJICovCi0JCWNyID0geHNwaS0+cmVhZF9mbih4c3BpLT5yZWdzICsgWFNQSV9DUl9PRkZTRVQpICYKLQkJCQkJCQl+WFNQSV9DUl9UUkFOU19JTkhJQklUOwotCQl4c3BpLT53cml0ZV9mbihjciwgeHNwaS0+cmVncyArIFhTUElfQ1JfT0ZGU0VUKTsKIAotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ4c3BpLT5kb25lKTsKKwkJaWYgKHVzZV9pcnEpIHsKKwkJCXhzcGktPndyaXRlX2ZuKGNyLCB4c3BpLT5yZWdzICsgWFNQSV9DUl9PRkZTRVQpOworCQkJd2FpdF9mb3JfY29tcGxldGlvbigmeHNwaS0+ZG9uZSk7CisJCX0gZWxzZQorCQkJd2hpbGUgKCEoeHNwaS0+cmVhZF9mbih4c3BpLT5yZWdzICsgWFNQSV9TUl9PRkZTRVQpICYKKwkJCQkJCVhTUElfU1JfVFhfRU1QVFlfTUFTSykpCisJCQkJOwogCiAJCS8qIEEgdHJhbnNtaXQgaGFzIGp1c3QgY29tcGxldGVkLiBQcm9jZXNzIHJlY2VpdmVkIGRhdGEgYW5kCiAJCSAqIGNoZWNrIGZvciBtb3JlIGRhdGEgdG8gdHJhbnNtaXQuIEFsd2F5cyBpbmhpYml0IHRoZQogCQkgKiB0cmFuc21pdHRlciB3aGlsZSB0aGUgSXNyIHJlZmlsbHMgdGhlIHRyYW5zbWl0IHJlZ2lzdGVyL0ZJRk8sCiAJCSAqIG9yIG1ha2Ugc3VyZSBpdCBpcyBzdG9wcGVkIGlmIHdlJ3JlIGRvbmUuCiAJCSAqLwotCQljciA9IHhzcGktPnJlYWRfZm4oeHNwaS0+cmVncyArIFhTUElfQ1JfT0ZGU0VUKTsKLQkJeHNwaS0+d3JpdGVfZm4oY3IgfCBYU1BJX0NSX1RSQU5TX0lOSElCSVQsCisJCWlmICh1c2VfaXJxKQorCQkJeHNwaS0+d3JpdGVfZm4oY3IgfCBYU1BJX0NSX1RSQU5TX0lOSElCSVQsCiAJCQkgICAgICAgeHNwaS0+cmVncyArIFhTUElfQ1JfT0ZGU0VUKTsKIAogCQkvKiBSZWFkIG91dCBhbGwgdGhlIGRhdGEgZnJvbSB0aGUgUnggRklGTyAqLwotCQlzciA9IHhzcGktPnJlYWRfZm4oeHNwaS0+cmVncyArIFhTUElfU1JfT0ZGU0VUKTsKLQkJd2hpbGUgKChzciAmIFhTUElfU1JfUlhfRU1QVFlfTUFTSykgPT0gMCkgewotCQkJeHNwaS0+cnhfZm4oeHNwaSk7Ci0JCQlzciA9IHhzcGktPnJlYWRfZm4oeHNwaS0+cmVncyArIFhTUElfU1JfT0ZGU0VUKTsKLQkJfQorCQlyeF93b3JkcyA9IG5fd29yZHM7CisJCXdoaWxlIChyeF93b3Jkcy0tKQorCQkJeGlsaW54X3NwaV9yeCh4c3BpKTsKIAotCQkvKiBTZWUgaWYgdGhlcmUgaXMgbW9yZSBkYXRhIHRvIHNlbmQgKi8KLQkJaWYgKHhzcGktPnJlbWFpbmluZ19ieXRlcyA8PSAwKQotCQkJYnJlYWs7CisJCXJlbWFpbmluZ193b3JkcyAtPSBuX3dvcmRzOwogCX0KIAotCS8qIERpc2FibGUgdGhlIHRyYW5zbWl0IGVtcHR5IGludGVycnVwdCAqLwotCXhzcGktPndyaXRlX2ZuKGlwaWZfaWVyLCB4c3BpLT5yZWdzICsgWElQSUZfVjEyM0JfSUlFUl9PRkZTRVQpOworCWlmICh1c2VfaXJxKQorCQl4c3BpLT53cml0ZV9mbigwLCB4c3BpLT5yZWdzICsgWElQSUZfVjEyM0JfREdJRVJfT0ZGU0VUKTsKIAotCXJldHVybiB0LT5sZW4gLSB4c3BpLT5yZW1haW5pbmdfYnl0ZXM7CisJcmV0dXJuIHQtPmxlbjsKIH0KIAogCkBAIC0zMTYsNiArMzMwLDI4IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgaW50IHhpbGlueF9zcGlfZmluZF9idWZmZXJfc2l6ZShzdHJ1Y3QgeGlsaW54X3NwaSAqeHNwaSkKK3sKKwl1OCBzcjsKKwlpbnQgbl93b3JkcyA9IDA7CisKKwkvKgorCSAqIEJlZm9yZSB0aGUgYnVmZmVyX3NpemUgZGV0ZWN0aW9uIHdlIHJlc2V0IHRoZSBjb3JlCisJICogdG8gbWFrZSBzdXJlIHdlIHN0YXJ0IHdpdGggYSBjbGVhbiBzdGF0ZS4KKwkgKi8KKwl4c3BpLT53cml0ZV9mbihYSVBJRl9WMTIzQl9SRVNFVF9NQVNLLAorCQl4c3BpLT5yZWdzICsgWElQSUZfVjEyM0JfUkVTRVRSX09GRlNFVCk7CisKKwkvKiBGaWxsIHRoZSBUeCBGSUZPIHdpdGggYXMgbWFueSB3b3JkcyBhcyBwb3NzaWJsZSAqLworCWRvIHsKKwkJeHNwaS0+d3JpdGVfZm4oMCwgeHNwaS0+cmVncyArIFhTUElfVFhEX09GRlNFVCk7CisJCXNyID0geHNwaS0+cmVhZF9mbih4c3BpLT5yZWdzICsgWFNQSV9TUl9PRkZTRVQpOworCQluX3dvcmRzKys7CisJfSB3aGlsZSAoIShzciAmIFhTUElfU1JfVFhfRlVMTF9NQVNLKSk7CisKKwlyZXR1cm4gbl93b3JkczsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeGlsaW54X3NwaV9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtc3BpLTIuMDAuYSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1zcGktMi4wMC5iIiwgfSwKQEAgLTM0OCwxNCArMzg0LDIxIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmIChudW1fY3MgPiBYSUxJTlhfU1BJX01BWF9DUykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIG51bWJlciBvZiBzcGkgc2xhdmVzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJbWFzdGVyID0gc3BpX2FsbG9jX21hc3RlcigmcGRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IHhpbGlueF9zcGkpKTsKIAlpZiAoIW1hc3RlcikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiB0aGUgc3BpLT5tb2RlIGJpdHMgdW5kZXJzdG9vZCBieSB0aGlzIGRyaXZlcjogKi8KLQltYXN0ZXItPm1vZGVfYml0cyA9IFNQSV9DUE9MIHwgU1BJX0NQSEE7CisJbWFzdGVyLT5tb2RlX2JpdHMgPSBTUElfQ1BPTCB8IFNQSV9DUEhBIHwgU1BJX0xTQl9GSVJTVCB8IFNQSV9MT09QIHwKKwkJCSAgICBTUElfQ1NfSElHSDsKIAogCXhzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CisJeHNwaS0+Y3NfaW5hY3RpdmUgPSAweGZmZmZmZmZmOwogCXhzcGktPmJpdGJhbmcubWFzdGVyID0gbWFzdGVyOwogCXhzcGktPmJpdGJhbmcuY2hpcHNlbGVjdCA9IHhpbGlueF9zcGlfY2hpcHNlbGVjdDsKIAl4c3BpLT5iaXRiYW5nLnNldHVwX3RyYW5zZmVyID0geGlsaW54X3NwaV9zZXR1cF90cmFuc2ZlcjsKQEAgLTM5MiwzNiArNDM1LDIxIEBACiAJfQogCiAJbWFzdGVyLT5iaXRzX3Blcl93b3JkX21hc2sgPSBTUElfQlBXX01BU0soYml0c19wZXJfd29yZCk7Ci0JeHNwaS0+Yml0c19wZXJfd29yZCA9IGJpdHNfcGVyX3dvcmQ7Ci0JaWYgKHhzcGktPmJpdHNfcGVyX3dvcmQgPT0gOCkgewotCQl4c3BpLT50eF9mbiA9IHhzcGlfdHg4OwotCQl4c3BpLT5yeF9mbiA9IHhzcGlfcng4OwotCX0gZWxzZSBpZiAoeHNwaS0+Yml0c19wZXJfd29yZCA9PSAxNikgewotCQl4c3BpLT50eF9mbiA9IHhzcGlfdHgxNjsKLQkJeHNwaS0+cnhfZm4gPSB4c3BpX3J4MTY7Ci0JfSBlbHNlIGlmICh4c3BpLT5iaXRzX3Blcl93b3JkID09IDMyKSB7Ci0JCXhzcGktPnR4X2ZuID0geHNwaV90eDMyOwotCQl4c3BpLT5yeF9mbiA9IHhzcGlfcngzMjsKLQl9IGVsc2UgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIHB1dF9tYXN0ZXI7CisJeHNwaS0+Ynl0ZXNfcGVyX3dvcmQgPSBiaXRzX3Blcl93b3JkIC8gODsKKwl4c3BpLT5idWZmZXJfc2l6ZSA9IHhpbGlueF9zcGlfZmluZF9idWZmZXJfc2l6ZSh4c3BpKTsKKworCXhzcGktPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKHhzcGktPmlycSA+PSAwKSB7CisJCS8qIFJlZ2lzdGVyIGZvciBTUEkgSW50ZXJydXB0ICovCisJCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgeHNwaS0+aXJxLCB4aWxpbnhfc3BpX2lycSwgMCwKKwkJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSwgeHNwaSk7CisJCWlmIChyZXQpCisJCQlnb3RvIHB1dF9tYXN0ZXI7CiAJfQogCiAJLyogU1BJIGNvbnRyb2xsZXIgaW5pdGlhbGl6YXRpb25zICovCiAJeHNwaV9pbml0X2h3KHhzcGkpOwogCi0JeHNwaS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAoeHNwaS0+aXJxIDwgMCkgewotCQlyZXQgPSB4c3BpLT5pcnE7Ci0JCWdvdG8gcHV0X21hc3RlcjsKLQl9Ci0KLQkvKiBSZWdpc3RlciBmb3IgU1BJIEludGVycnVwdCAqLwotCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgeHNwaS0+aXJxLCB4aWxpbnhfc3BpX2lycSwgMCwKLQkJCSAgICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgeHNwaSk7Ci0JaWYgKHJldCkKLQkJZ290byBwdXRfbWFzdGVyOwotCiAJcmV0ID0gc3BpX2JpdGJhbmdfc3RhcnQoJnhzcGktPmJpdGJhbmcpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAic3BpX2JpdGJhbmdfc3RhcnQgRkFJTEVEXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaS5jIGIvZHJpdmVycy9zcGkvc3BpLmMKaW5kZXggNjZhNzBlOS4uYzY0YTNlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvc3BpLmMKQEAgLTEzLDEwICsxMyw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTc4OCw3ICs3ODQsNyBAQAogCXN0cnVjdCBzcGlfdHJhbnNmZXIgKnhmZXI7CiAJYm9vbCBrZWVwX2NzID0gZmFsc2U7CiAJaW50IHJldCA9IDA7Ci0JaW50IG1zID0gMTsKKwl1bnNpZ25lZCBsb25nIG1zID0gMTsKIAogCXNwaV9zZXRfY3MobXNnLT5zcGksIHRydWUpOwogCkBAIC04NzUsMzEgKzg3MSw1OSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc3BpX2ZpbmFsaXplX2N1cnJlbnRfdHJhbnNmZXIpOwogCiAvKioKLSAqIHNwaV9wdW1wX21lc3NhZ2VzIC0ga3RocmVhZCB3b3JrIGZ1bmN0aW9uIHdoaWNoIHByb2Nlc3NlcyBzcGkgbWVzc2FnZSBxdWV1ZQotICogQHdvcms6IHBvaW50ZXIgdG8ga3RocmVhZCB3b3JrIHN0cnVjdCBjb250YWluZWQgaW4gdGhlIG1hc3RlciBzdHJ1Y3QKKyAqIF9fc3BpX3B1bXBfbWVzc2FnZXMgLSBmdW5jdGlvbiB3aGljaCBwcm9jZXNzZXMgc3BpIG1lc3NhZ2UgcXVldWUKKyAqIEBtYXN0ZXI6IG1hc3RlciB0byBwcm9jZXNzIHF1ZXVlIGZvcgorICogQGluX2t0aHJlYWQ6IHRydWUgaWYgd2UgYXJlIGluIHRoZSBjb250ZXh0IG9mIHRoZSBtZXNzYWdlIHB1bXAgdGhyZWFkCiAgKgogICogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlcmUgaXMgYW55IHNwaSBtZXNzYWdlIGluIHRoZSBxdWV1ZSB0aGF0CiAgKiBuZWVkcyBwcm9jZXNzaW5nIGFuZCBpZiBzbyBjYWxsIG91dCB0byB0aGUgZHJpdmVyIHRvIGluaXRpYWxpemUgaGFyZHdhcmUKICAqIGFuZCB0cmFuc2ZlciBlYWNoIG1lc3NhZ2UuCiAgKgorICogTm90ZSB0aGF0IGl0IGlzIGNhbGxlZCBib3RoIGZyb20gdGhlIGt0aHJlYWQgaXRzZWxmIGFuZCBhbHNvIGZyb20KKyAqIGluc2lkZSBzcGlfc3luYygpOyB0aGUgcXVldWUgZXh0cmFjdGlvbiBoYW5kbGluZyBhdCB0aGUgdG9wIG9mIHRoZQorICogZnVuY3Rpb24gc2hvdWxkIGRlYWwgd2l0aCB0aGlzIHNhZmVseS4KICAqLwotc3RhdGljIHZvaWQgc3BpX3B1bXBfbWVzc2FnZXMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaykKK3N0YXRpYyB2b2lkIF9fc3BpX3B1bXBfbWVzc2FnZXMoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciwgYm9vbCBpbl9rdGhyZWFkKQogewotCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXIgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHNwaV9tYXN0ZXIsIHB1bXBfbWVzc2FnZXMpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJYm9vbCB3YXNfYnVzeSA9IGZhbHNlOwogCWludCByZXQ7CiAKLQkvKiBMb2NrIHF1ZXVlIGFuZCBjaGVjayBmb3IgcXVldWUgd29yayAqLworCS8qIExvY2sgcXVldWUgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWFzdGVyLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisKKwkvKiBNYWtlIHN1cmUgd2UgYXJlIG5vdCBhbHJlYWR5IHJ1bm5pbmcgYSBtZXNzYWdlICovCisJaWYgKG1hc3Rlci0+Y3VyX21zZykgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXN0ZXItPnF1ZXVlX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIElmIGFub3RoZXIgY29udGV4dCBpcyBpZGxpbmcgdGhlIGRldmljZSB0aGVuIGRlZmVyICovCisJaWYgKG1hc3Rlci0+aWRsaW5nKSB7CisJCXF1ZXVlX2t0aHJlYWRfd29yaygmbWFzdGVyLT5rd29ya2VyLCAmbWFzdGVyLT5wdW1wX21lc3NhZ2VzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFzdGVyLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBDaGVjayBpZiB0aGUgcXVldWUgaXMgaWRsZSAqLwogCWlmIChsaXN0X2VtcHR5KCZtYXN0ZXItPnF1ZXVlKSB8fCAhbWFzdGVyLT5ydW5uaW5nKSB7CiAJCWlmICghbWFzdGVyLT5idXN5KSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXN0ZXItPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQorCisJCS8qIE9ubHkgZG8gdGVhcmRvd24gaW4gdGhlIHRocmVhZCAqLworCQlpZiAoIWluX2t0aHJlYWQpIHsKKwkJCXF1ZXVlX2t0aHJlYWRfd29yaygmbWFzdGVyLT5rd29ya2VyLAorCQkJCQkgICAmbWFzdGVyLT5wdW1wX21lc3NhZ2VzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hc3Rlci0+cXVldWVfbG9jaywgZmxhZ3MpOworCQkJcmV0dXJuOworCQl9CisKIAkJbWFzdGVyLT5idXN5ID0gZmFsc2U7CisJCW1hc3Rlci0+aWRsaW5nID0gdHJ1ZTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFzdGVyLT5xdWV1ZV9sb2NrLCBmbGFncyk7CisKIAkJa2ZyZWUobWFzdGVyLT5kdW1teV9yeCk7CiAJCW1hc3Rlci0+ZHVtbXlfcnggPSBOVUxMOwogCQlrZnJlZShtYXN0ZXItPmR1bW15X3R4KTsKQEAgLTkxMywxNCArOTM3LDEzIEBACiAJCQlwbV9ydW50aW1lX3B1dF9hdXRvc3VzcGVuZChtYXN0ZXItPmRldi5wYXJlbnQpOwogCQl9CiAJCXRyYWNlX3NwaV9tYXN0ZXJfaWRsZShtYXN0ZXIpOwotCQlyZXR1cm47Ci0JfQogCi0JLyogTWFrZSBzdXJlIHdlIGFyZSBub3QgYWxyZWFkeSBydW5uaW5nIGEgbWVzc2FnZSAqLwotCWlmIChtYXN0ZXItPmN1cl9tc2cpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hc3Rlci0+cXVldWVfbG9jaywgZmxhZ3MpOworCQltYXN0ZXItPmlkbGluZyA9IGZhbHNlOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXN0ZXItPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KKwogCS8qIEV4dHJhY3QgaGVhZCBvZiBxdWV1ZSAqLwogCW1hc3Rlci0+Y3VyX21zZyA9CiAJCWxpc3RfZmlyc3RfZW50cnkoJm1hc3Rlci0+cXVldWUsIHN0cnVjdCBzcGlfbWVzc2FnZSwgcXVldWUpOwpAQCAtOTg1LDEzICsxMDA4LDIyIEBACiAJfQogfQogCisvKioKKyAqIHNwaV9wdW1wX21lc3NhZ2VzIC0ga3RocmVhZCB3b3JrIGZ1bmN0aW9uIHdoaWNoIHByb2Nlc3NlcyBzcGkgbWVzc2FnZSBxdWV1ZQorICogQHdvcms6IHBvaW50ZXIgdG8ga3RocmVhZCB3b3JrIHN0cnVjdCBjb250YWluZWQgaW4gdGhlIG1hc3RlciBzdHJ1Y3QKKyAqLworc3RhdGljIHZvaWQgc3BpX3B1bXBfbWVzc2FnZXMoc3RydWN0IGt0aHJlYWRfd29yayAqd29yaykKK3sKKwlzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzcGlfbWFzdGVyLCBwdW1wX21lc3NhZ2VzKTsKKworCV9fc3BpX3B1bXBfbWVzc2FnZXMobWFzdGVyLCB0cnVlKTsKK30KKwogc3RhdGljIGludCBzcGlfaW5pdF9xdWV1ZShzdHJ1Y3Qgc3BpX21hc3RlciAqbWFzdGVyKQogewogCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbSA9IHsgLnNjaGVkX3ByaW9yaXR5ID0gTUFYX1JUX1BSSU8gLSAxIH07CiAKLQlJTklUX0xJU1RfSEVBRCgmbWFzdGVyLT5xdWV1ZSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1hc3Rlci0+cXVldWVfbG9jayk7Ci0KIAltYXN0ZXItPnJ1bm5pbmcgPSBmYWxzZTsKIAltYXN0ZXItPmJ1c3kgPSBmYWxzZTsKIApAQCAtMTE2MSwxMiArMTE5Myw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogc3BpX3F1ZXVlZF90cmFuc2ZlciAtIHRyYW5zZmVyIGZ1bmN0aW9uIGZvciBxdWV1ZWQgdHJhbnNmZXJzCi0gKiBAc3BpOiBzcGkgZGV2aWNlIHdoaWNoIGlzIHJlcXVlc3RpbmcgdHJhbnNmZXIKLSAqIEBtc2c6IHNwaSBtZXNzYWdlIHdoaWNoIGlzIHRvIGhhbmRsZWQgaXMgcXVldWVkIHRvIGRyaXZlciBxdWV1ZQotICovCi1zdGF0aWMgaW50IHNwaV9xdWV1ZWRfdHJhbnNmZXIoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IHNwaV9tZXNzYWdlICptc2cpCitzdGF0aWMgaW50IF9fc3BpX3F1ZXVlZF90cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLAorCQkJCSBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZywKKwkJCQkgYm9vbCBuZWVkX3B1bXApCiB7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IHNwaS0+bWFzdGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMTgxLDEzICsxMjEwLDIzIEBACiAJbXNnLT5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CiAKIAlsaXN0X2FkZF90YWlsKCZtc2ctPnF1ZXVlLCAmbWFzdGVyLT5xdWV1ZSk7Ci0JaWYgKCFtYXN0ZXItPmJ1c3kpCisJaWYgKCFtYXN0ZXItPmJ1c3kgJiYgbmVlZF9wdW1wKQogCQlxdWV1ZV9rdGhyZWFkX3dvcmsoJm1hc3Rlci0+a3dvcmtlciwgJm1hc3Rlci0+cHVtcF9tZXNzYWdlcyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtYXN0ZXItPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBzcGlfcXVldWVkX3RyYW5zZmVyIC0gdHJhbnNmZXIgZnVuY3Rpb24gZm9yIHF1ZXVlZCB0cmFuc2ZlcnMKKyAqIEBzcGk6IHNwaSBkZXZpY2Ugd2hpY2ggaXMgcmVxdWVzdGluZyB0cmFuc2ZlcgorICogQG1zZzogc3BpIG1lc3NhZ2Ugd2hpY2ggaXMgdG8gaGFuZGxlZCBpcyBxdWV1ZWQgdG8gZHJpdmVyIHF1ZXVlCisgKi8KK3N0YXRpYyBpbnQgc3BpX3F1ZXVlZF90cmFuc2ZlcihzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3Qgc3BpX21lc3NhZ2UgKm1zZykKK3sKKwlyZXR1cm4gX19zcGlfcXVldWVkX3RyYW5zZmVyKHNwaSwgbXNnLCB0cnVlKTsKK30KKwogc3RhdGljIGludCBzcGlfbWFzdGVyX2luaXRpYWxpemVfcXVldWUoc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlcikKIHsKIAlpbnQgcmV0OwpAQCAtMTYwOSw2ICsxNjQ4LDggQEAKIAkJZHluYW1pYyA9IDE7CiAJfQogCisJSU5JVF9MSVNUX0hFQUQoJm1hc3Rlci0+cXVldWUpOworCXNwaW5fbG9ja19pbml0KCZtYXN0ZXItPnF1ZXVlX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZtYXN0ZXItPmJ1c19sb2NrX3NwaW5sb2NrKTsKIAltdXRleF9pbml0KCZtYXN0ZXItPmJ1c19sb2NrX211dGV4KTsKIAltYXN0ZXItPmJ1c19sb2NrX2ZsYWcgPSAwOwpAQCAtMjExNCwxOSArMjE1NSw0NiBAQAogCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOwogCWludCBzdGF0dXM7CiAJc3RydWN0IHNwaV9tYXN0ZXIgKm1hc3RlciA9IHNwaS0+bWFzdGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzdGF0dXMgPSBfX3NwaV92YWxpZGF0ZShzcGksIG1lc3NhZ2UpOworCWlmIChzdGF0dXMgIT0gMCkKKwkJcmV0dXJuIHN0YXR1czsKIAogCW1lc3NhZ2UtPmNvbXBsZXRlID0gc3BpX2NvbXBsZXRlOwogCW1lc3NhZ2UtPmNvbnRleHQgPSAmZG9uZTsKKwltZXNzYWdlLT5zcGkgPSBzcGk7CiAKIAlpZiAoIWJ1c19sb2NrZWQpCiAJCW11dGV4X2xvY2soJm1hc3Rlci0+YnVzX2xvY2tfbXV0ZXgpOwogCi0Jc3RhdHVzID0gc3BpX2FzeW5jX2xvY2tlZChzcGksIG1lc3NhZ2UpOworCS8qIElmIHdlJ3JlIG5vdCB1c2luZyB0aGUgbGVnYWN5IHRyYW5zZmVyIG1ldGhvZCB0aGVuIHdlIHdpbGwKKwkgKiB0cnkgdG8gdHJhbnNmZXIgaW4gdGhlIGNhbGxpbmcgY29udGV4dCBzbyBzcGVjaWFsIGNhc2UuCisJICogVGhpcyBjb2RlIHdvdWxkIGJlIGxlc3MgdHJpY2t5IGlmIHdlIGNvdWxkIHJlbW92ZSB0aGUKKwkgKiBzdXBwb3J0IGZvciBkcml2ZXIgaW1wbGVtZW50ZWQgbWVzc2FnZSBxdWV1ZXMuCisJICovCisJaWYgKG1hc3Rlci0+dHJhbnNmZXIgPT0gc3BpX3F1ZXVlZF90cmFuc2ZlcikgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWFzdGVyLT5idXNfbG9ja19zcGlubG9jaywgZmxhZ3MpOworCisJCXRyYWNlX3NwaV9tZXNzYWdlX3N1Ym1pdChtZXNzYWdlKTsKKworCQlzdGF0dXMgPSBfX3NwaV9xdWV1ZWRfdHJhbnNmZXIoc3BpLCBtZXNzYWdlLCBmYWxzZSk7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFzdGVyLT5idXNfbG9ja19zcGlubG9jaywgZmxhZ3MpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IHNwaV9hc3luY19sb2NrZWQoc3BpLCBtZXNzYWdlKTsKKwl9CiAKIAlpZiAoIWJ1c19sb2NrZWQpCiAJCW11dGV4X3VubG9jaygmbWFzdGVyLT5idXNfbG9ja19tdXRleCk7CiAKIAlpZiAoc3RhdHVzID09IDApIHsKKwkJLyogUHVzaCBvdXQgdGhlIG1lc3NhZ2VzIGluIHRoZSBjYWxsaW5nIGNvbnRleHQgaWYgd2UKKwkJICogY2FuLgorCQkgKi8KKwkJaWYgKG1hc3Rlci0+dHJhbnNmZXIgPT0gc3BpX3F1ZXVlZF90cmFuc2ZlcikKKwkJCV9fc3BpX3B1bXBfbWVzc2FnZXMobWFzdGVyLCBmYWxzZSk7CisKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmZG9uZSk7CiAJCXN0YXR1cyA9IG1lc3NhZ2UtPnN0YXR1czsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NwaS9zcGlkZXYuYyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCmluZGV4IDY5NDFlMDQuLjRlYjdhOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaWRldi5jCisrKyBiL2RyaXZlcnMvc3BpL3NwaWRldi5jCkBAIC0xNCwxMCArMTQsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMzE3LDYgKzMxMywzNyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2lvY190cmFuc2ZlciAqCitzcGlkZXZfZ2V0X2lvY19tZXNzYWdlKHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBzcGlfaW9jX3RyYW5zZmVyIF9fdXNlciAqdV9pb2MsCisJCXVuc2lnbmVkICpuX2lvYykKK3sKKwlzdHJ1Y3Qgc3BpX2lvY190cmFuc2ZlcgkqaW9jOworCXUzMgl0bXA7CisKKwkvKiBDaGVjayB0eXBlLCBjb21tYW5kIG51bWJlciBhbmQgZGlyZWN0aW9uICovCisJaWYgKF9JT0NfVFlQRShjbWQpICE9IFNQSV9JT0NfTUFHSUMKKwkJCXx8IF9JT0NfTlIoY21kKSAhPSBfSU9DX05SKFNQSV9JT0NfTUVTU0FHRSgwKSkKKwkJCXx8IF9JT0NfRElSKGNtZCkgIT0gX0lPQ19XUklURSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT1RUWSk7CisKKwl0bXAgPSBfSU9DX1NJWkUoY21kKTsKKwlpZiAoKHRtcCAlIHNpemVvZihzdHJ1Y3Qgc3BpX2lvY190cmFuc2ZlcikpICE9IDApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCSpuX2lvYyA9IHRtcCAvIHNpemVvZihzdHJ1Y3Qgc3BpX2lvY190cmFuc2Zlcik7CisJaWYgKCpuX2lvYyA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIGNvcHkgaW50byBzY3JhdGNoIGFyZWEgKi8KKwlpb2MgPSBrbWFsbG9jKHRtcCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpb2MpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWlmIChfX2NvcHlfZnJvbV91c2VyKGlvYywgdV9pb2MsIHRtcCkpIHsKKwkJa2ZyZWUoaW9jKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CisJfQorCXJldHVybiBpb2M7Cit9CisKIHN0YXRpYyBsb25nCiBzcGlkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtNDU2LDMyICs0ODMsMTUgQEAKIAogCWRlZmF1bHQ6CiAJCS8qIHNlZ21lbnRlZCBhbmQvb3IgZnVsbC1kdXBsZXggSS9PIHJlcXVlc3QgKi8KLQkJaWYgKF9JT0NfTlIoY21kKSAhPSBfSU9DX05SKFNQSV9JT0NfTUVTU0FHRSgwKSkKLQkJCQl8fCBfSU9DX0RJUihjbWQpICE9IF9JT0NfV1JJVEUpIHsKLQkJCXJldHZhbCA9IC1FTk9UVFk7CisJCS8qIENoZWNrIG1lc3NhZ2UgYW5kIGNvcHkgaW50byBzY3JhdGNoIGFyZWEgKi8KKwkJaW9jID0gc3BpZGV2X2dldF9pb2NfbWVzc2FnZShjbWQsCisJCQkJKHN0cnVjdCBzcGlfaW9jX3RyYW5zZmVyIF9fdXNlciAqKWFyZywgJm5faW9jKTsKKwkJaWYgKElTX0VSUihpb2MpKSB7CisJCQlyZXR2YWwgPSBQVFJfRVJSKGlvYyk7CiAJCQlicmVhazsKIAkJfQotCi0JCXRtcCA9IF9JT0NfU0laRShjbWQpOwotCQlpZiAoKHRtcCAlIHNpemVvZihzdHJ1Y3Qgc3BpX2lvY190cmFuc2ZlcikpICE9IDApIHsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQluX2lvYyA9IHRtcCAvIHNpemVvZihzdHJ1Y3Qgc3BpX2lvY190cmFuc2Zlcik7Ci0JCWlmIChuX2lvYyA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJLyogY29weSBpbnRvIHNjcmF0Y2ggYXJlYSAqLwotCQlpb2MgPSBrbWFsbG9jKHRtcCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghaW9jKSB7Ci0JCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKF9fY29weV9mcm9tX3VzZXIoaW9jLCAodm9pZCBfX3VzZXIgKilhcmcsIHRtcCkpIHsKLQkJCWtmcmVlKGlvYyk7Ci0JCQlyZXR2YWwgPSAtRUZBVUxUOwotCQkJYnJlYWs7Ci0JCX0KKwkJaWYgKCFpb2MpCisJCQlicmVhazsJLyogbl9pb2MgaXMgYWxzbyAwICovCiAKIAkJLyogdHJhbnNsYXRlIHRvIHNwaV9tZXNzYWdlLCBleGVjdXRlICovCiAJCXJldHZhbCA9IHNwaWRldl9tZXNzYWdlKHNwaWRldiwgaW9jLCBuX2lvYyk7CkBAIC00OTYsOCArNTA2LDY3IEBACiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBzdGF0aWMgbG9uZworc3BpZGV2X2NvbXBhdF9pb2NfbWVzc2FnZShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKKwkJdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNwaV9pb2NfdHJhbnNmZXIgX191c2VyCSp1X2lvYzsKKwlpbnQJCQkJcmV0dmFsID0gMDsKKwlzdHJ1Y3Qgc3BpZGV2X2RhdGEJCSpzcGlkZXY7CisJc3RydWN0IHNwaV9kZXZpY2UJCSpzcGk7CisJdW5zaWduZWQJCQluX2lvYywgbjsKKwlzdHJ1Y3Qgc3BpX2lvY190cmFuc2ZlcgkJKmlvYzsKKworCXVfaW9jID0gKHN0cnVjdCBzcGlfaW9jX3RyYW5zZmVyIF9fdXNlciAqKSBjb21wYXRfcHRyKGFyZyk7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVfaW9jLCBfSU9DX1NJWkUoY21kKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogZ3VhcmQgYWdhaW5zdCBkZXZpY2UgcmVtb3ZhbCBiZWZvcmUsIG9yIHdoaWxlLAorCSAqIHdlIGlzc3VlIHRoaXMgaW9jdGwuCisJICovCisJc3BpZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXNwaW5fbG9ja19pcnEoJnNwaWRldi0+c3BpX2xvY2spOworCXNwaSA9IHNwaV9kZXZfZ2V0KHNwaWRldi0+c3BpKTsKKwlzcGluX3VubG9ja19pcnEoJnNwaWRldi0+c3BpX2xvY2spOworCisJaWYgKHNwaSA9PSBOVUxMKQorCQlyZXR1cm4gLUVTSFVURE9XTjsKKworCS8qIFNQSV9JT0NfTUVTU0FHRSBuZWVkcyB0aGUgYnVmZmVyIGxvY2tlZCAibm9ybWFsbHkiICovCisJbXV0ZXhfbG9jaygmc3BpZGV2LT5idWZfbG9jayk7CisKKwkvKiBDaGVjayBtZXNzYWdlIGFuZCBjb3B5IGludG8gc2NyYXRjaCBhcmVhICovCisJaW9jID0gc3BpZGV2X2dldF9pb2NfbWVzc2FnZShjbWQsIHVfaW9jLCAmbl9pb2MpOworCWlmIChJU19FUlIoaW9jKSkgeworCQlyZXR2YWwgPSBQVFJfRVJSKGlvYyk7CisJCWdvdG8gZG9uZTsKKwl9CisJaWYgKCFpb2MpCisJCWdvdG8gZG9uZTsJLyogbl9pb2MgaXMgYWxzbyAwICovCisKKwkvKiBDb252ZXJ0IGJ1ZmZlciBwb2ludGVycyAqLworCWZvciAobiA9IDA7IG4gPCBuX2lvYzsgbisrKSB7CisJCWlvY1tuXS5yeF9idWYgPSAodWludHB0cl90KSBjb21wYXRfcHRyKGlvY1tuXS5yeF9idWYpOworCQlpb2Nbbl0udHhfYnVmID0gKHVpbnRwdHJfdCkgY29tcGF0X3B0cihpb2Nbbl0udHhfYnVmKTsKKwl9CisKKwkvKiB0cmFuc2xhdGUgdG8gc3BpX21lc3NhZ2UsIGV4ZWN1dGUgKi8KKwlyZXR2YWwgPSBzcGlkZXZfbWVzc2FnZShzcGlkZXYsIGlvYywgbl9pb2MpOworCWtmcmVlKGlvYyk7CisKK2RvbmU6CisJbXV0ZXhfdW5sb2NrKCZzcGlkZXYtPmJ1Zl9sb2NrKTsKKwlzcGlfZGV2X3B1dChzcGkpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBsb25nCiBzcGlkZXZfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKKwlpZiAoX0lPQ19UWVBFKGNtZCkgPT0gU1BJX0lPQ19NQUdJQworCQkJJiYgX0lPQ19OUihjbWQpID09IF9JT0NfTlIoU1BJX0lPQ19NRVNTQUdFKDApKQorCQkJJiYgX0lPQ19ESVIoY21kKSA9PSBfSU9DX1dSSVRFKQorCQlyZXR1cm4gc3BpZGV2X2NvbXBhdF9pb2NfbWVzc2FnZShmaWxwLCBjbWQsIGFyZyk7CisKIAlyZXR1cm4gc3BpZGV2X2lvY3RsKGZpbHAsIGNtZCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9tYWluLmMgYi9kcml2ZXJzL3NzYi9tYWluLmMKaW5kZXggMmZlYWQzOC4uMWUxODBjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvbWFpbi5jCisrKyBiL2RyaXZlcnMvc3NiL21haW4uYwpAQCAtOTAsMjUgKzkwLDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfU1NCX1BDTUNJQUhPU1QgKi8KIAotI2lmZGVmIENPTkZJR19TU0JfU0RJT0hPU1QKLXN0cnVjdCBzc2JfYnVzICpzc2Jfc2Rpb19mdW5jX3RvX2J1cyhzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKQotewotCXN0cnVjdCBzc2JfYnVzICpidXM7Ci0KLQlzc2JfYnVzZXNfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVzLCAmYnVzZXMsIGxpc3QpIHsKLQkJaWYgKGJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9TRElPICYmCi0JCSAgICBidXMtPmhvc3Rfc2RpbyA9PSBmdW5jKQotCQkJZ290byBmb3VuZDsKLQl9Ci0JYnVzID0gTlVMTDsKLWZvdW5kOgotCXNzYl9idXNlc191bmxvY2soKTsKLQotCXJldHVybiBidXM7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1NTQl9TRElPSE9TVCAqLwotCiBpbnQgc3NiX2Zvcl9lYWNoX2J1c19jYWxsKHVuc2lnbmVkIGxvbmcgZGF0YSwKIAkJCSAgaW50ICgqZnVuYykoc3RydWN0IHNzYl9idXMgKmJ1cywgdW5zaWduZWQgbG9uZyBkYXRhKSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKaW5kZXggODE1ZGUzNy4uOTA0OWRkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL0tjb25maWcKQEAgLTQ2LDggKzQ2LDYgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcnRzNTIwOC9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9saW5lNi9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9vY3Rlb24vS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvb2N0ZW9uLXVzYi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCmluZGV4IDMzYzY0MGIuLmZlMjZmZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKQEAgLTE1LDcgKzE1LDYgQEAKIG9iai0kKENPTkZJR19SODE4OEVVKQkJKz0gcnRsODE4OGV1Lwogb2JqLSQoQ09ORklHX1I4NzIzQVUpCQkrPSBydGw4NzIzYXUvCiBvYmotJChDT05GSUdfUlRTNTIwOCkJCSs9IHJ0czUyMDgvCi1vYmotJChDT05GSUdfTElORTZfVVNCKQkJKz0gbGluZTYvCiBvYmotJChDT05GSUdfTkVUTE9HSUNfWExSX05FVCkJKz0gbmV0bG9naWMvCiBvYmotJChDT05GSUdfT0NURU9OX0VUSEVSTkVUKQkrPSBvY3Rlb24vCiBvYmotJChDT05GSUdfT0NURU9OX1VTQikJKz0gb2N0ZW9uLXVzYi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL2xvd21lbW9yeWtpbGxlci5jIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvbG93bWVtb3J5a2lsbGVyLmMKaW5kZXggYjU0NWQzZC4uZmVhZmExNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvbG93bWVtb3J5a2lsbGVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvbG93bWVtb3J5a2lsbGVyLmMKQEAgLTE2MCw3ICsxNjAsMTIgQEAKIAkJCSAgICAgc2VsZWN0ZWQtPnBpZCwgc2VsZWN0ZWQtPmNvbW0sCiAJCQkgICAgIHNlbGVjdGVkX29vbV9zY29yZV9hZGosIHNlbGVjdGVkX3Rhc2tzaXplKTsKIAkJbG93bWVtX2RlYXRocGVuZGluZ190aW1lb3V0ID0gamlmZmllcyArIEhaOwotCQlzZXRfdHNrX3RocmVhZF9mbGFnKHNlbGVjdGVkLCBUSUZfTUVNRElFKTsKKwkJLyoKKwkJICogRklYTUU6IGxvd21lbW9yeWtpbGxlciBzaG91bGRuJ3QgYWJ1c2UgZ2xvYmFsIE9PTSBraWxsZXIKKwkJICogaW5mcmFzdHJ1Y3R1cmUuIFRoZXJlIGlzIG5vIHJlYWwgcmVhc29uIHdoeSB0aGUgc2VsZWN0ZWQKKwkJICogdGFzayBzaG91bGQgaGF2ZSBhY2Nlc3MgdG8gdGhlIG1lbW9yeSByZXNlcnZlcy4KKwkJICovCisJCW1hcmtfdHNrX29vbV92aWN0aW0oc2VsZWN0ZWQpOwogCQlzZW5kX3NpZyhTSUdLSUxMLCBzZWxlY3RlZCwgMCk7CiAJCXJlbSArPSBzZWxlY3RlZF90YXNrc2l6ZTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjEyMTliLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotbWVudWNvbmZpZyBMSU5FNl9VU0IKLQl0cmlzdGF0ZSAiTGluZTYgVVNCIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IgJiYgU05ECi0Jc2VsZWN0IFNORF9SQVdNSURJCi0Jc2VsZWN0IFNORF9QQ00KLQloZWxwCi0JICBUaGlzIGlzIGEgZHJpdmVyIGZvciB0aGUgZ3VpdGFyIGFtcCwgY2FiLCBhbmQgZWZmZWN0cyBtb2RlbGxlcgotCSAgUE9EeHQgUHJvIGJ5IExpbmU2IChhbmQgc2ltaWxhciBkZXZpY2VzKSwgc3VwcG9ydGluZyB0aGUKLQkgIGZvbGxvd2luZyBmZWF0dXJlczoKLQkgICAgKiBSZWFkaW5nL3dyaXRpbmcgaW5kaXZpZHVhbCBwYXJhbWV0ZXJzCi0JICAgICogUmVhZGluZy93cml0aW5nIGNvbXBsZXRlIGNoYW5uZWwsIGVmZmVjdHMgc2V0dXAsIGFuZCBhbXAKLQkgICAgICBzZXR1cCBkYXRhCi0JICAgICogQ2hhbm5lbCBzd2l0Y2hpbmcKLQkgICAgKiBWaXJ0dWFsIE1JREkgaW50ZXJmYWNlCi0JICAgICogVHVuZXIgYWNjZXNzCi0JICAgICogUGxheWJhY2svY2FwdHVyZS9taXhlciBkZXZpY2UgZm9yIGFueSBBTFNBLWNvbXBhdGlibGUgUENNCi0JICAgICAgYXVkaW8gYXBwbGljYXRpb24KLQkgICAgKiBTaWduYWwgcm91dGluZyAocmVjb3JkIGNsZWFuL3Byb2Nlc3NlZCBndWl0YXIgc2lnbmFsLAotCSAgICAgIHJlLWFtcGluZykKLQotCSAgUHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgdGhlIFZhcmlheCBXb3JrYmVuY2ggYW5kIFRvbmVQb3J0Ci0JICBkZXZpY2VzIGlzIGluY2x1ZGVkLgotCi1pZiBMSU5FNl9VU0IKLQotY29uZmlnIExJTkU2X1VTQl9JTVBVTFNFX1JFU1BPTlNFCi0JYm9vbCAibWVhc3VyZSBpbXB1bHNlIHJlc3BvbnNlIgotCWRlZmF1bHQgbgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gYWRkIGNvZGUgdG8gbWVhc3VyZSB0aGUgaW1wdWxzZSByZXNwb25zZSBvZiBhIExpbmU2Ci0JICBkZXZpY2UuIFRoaXMgaXMgbW9yZSBhY2N1cmF0ZSB0aGFuIHVzZXItc3BhY2UgbWV0aG9kcyBzaW5jZSBpdAotCSAgYnlwYXNzZXMgYW55IFBDTSBkYXRhIGJ1ZmZlcmluZyAoZS5nLiwgYnkgQUxTQSBvciBqYWNrKS4gVGhpcyBpcwotCSAgdXNlZnVsIGZvciBhc3Nlc3NpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIG5ldyBkZXZpY2VzLCBidXQgaXMgbm90Ci0JICByZXF1aXJlZCBmb3Igbm9ybWFsIG9wZXJhdGlvbi4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotZW5kaWYgIyBMSU5FNl9VU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU1YzM3NC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi1vYmotJChDT05GSUdfTElORTZfVVNCKQkJKz0gbGluZTZ1c2IubwotCi1saW5lNnVzYi15IDo9IAkJXAotCQlhdWRpby5vCQlcCi0JCWNhcHR1cmUubwlcCi0JCWRyaXZlci5vCVwKLQkJbWlkaS5vCQlcCi0JCW1pZGlidWYubwlcCi0JCXBjbS5vCQlcCi0JCXBsYXliYWNrLm8JXAotCQlwb2QubwkJXAotCQl0b25lcG9ydC5vCVwKLQkJdmFyaWF4Lm8JXAotCQlwb2RoZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvYXVkaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9hdWRpby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzFkODBjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9hdWRpby5jCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoKLSAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjkuMWJldGEKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgotICoKLSAqLwotCi0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KLSNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KLQotI2luY2x1ZGUgImRyaXZlci5oIgotI2luY2x1ZGUgImF1ZGlvLmgiCi0KLS8qCi0JSW5pdGlhbGl6ZSB0aGUgTGluZTYgVVNCIGF1ZGlvIHN5c3RlbS4KLSovCi1pbnQgbGluZTZfaW5pdF9hdWRpbyhzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNikKLXsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0JaW50IGVycjsKLQotCWVyciA9IHNuZF9jYXJkX25ldyhsaW5lNi0+aWZjZGV2LAotCQkJICAgU05EUlZfREVGQVVMVF9JRFgxLCBTTkRSVl9ERUZBVUxUX1NUUjEsCi0JCQkgICBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JbGluZTYtPmNhcmQgPSBjYXJkOwotCi0Jc3RyY3B5KGNhcmQtPmlkLCBsaW5lNi0+cHJvcGVydGllcy0+aWQpOwotCXN0cmNweShjYXJkLT5kcml2ZXIsIERSSVZFUl9OQU1FKTsKLQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBsaW5lNi0+cHJvcGVydGllcy0+bmFtZSk7Ci0JLyogbG9uZ25hbWUgaXMgODAgY2hhcnMgLSBzZWUgYXNvdW5kLmggKi8KLQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiTGluZTYgJXMgYXQgVVNCICVzIiwgbGluZTYtPnByb3BlcnRpZXMtPm5hbWUsCi0JCWRldl9uYW1lKGxpbmU2LT5pZmNkZXYpKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLQlSZWdpc3RlciB0aGUgTGluZTYgVVNCIGF1ZGlvIHN5c3RlbS4KLSovCi1pbnQgbGluZTZfcmVnaXN0ZXJfYXVkaW8oc3RydWN0IHVzYl9saW5lNiAqbGluZTYpCi17Ci0JaW50IGVycjsKLQotCWVyciA9IHNuZF9jYXJkX3JlZ2lzdGVyKGxpbmU2LT5jYXJkKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCXJldHVybiAwOwotfQotCi0vKgotCUNsZWFudXAgdGhlIExpbmU2IFVTQiBhdWRpbyBzeXN0ZW0uCi0qLwotdm9pZCBsaW5lNl9jbGVhbnVwX2F1ZGlvKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KQotewotCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGxpbmU2LT5jYXJkOwotCi0JaWYgKGNhcmQgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0Jc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKLQlzbmRfY2FyZF9mcmVlKGNhcmQpOwotCWxpbmU2LT5jYXJkID0gTlVMTDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9hdWRpby5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2F1ZGlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmOGEwOWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2F1ZGlvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKgotICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOS4xYmV0YQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCi0gKgotICovCi0KLSNpZm5kZWYgQVVESU9fSAotI2RlZmluZSBBVURJT19ICi0KLSNpbmNsdWRlICJkcml2ZXIuaCIKLQotZXh0ZXJuIHZvaWQgbGluZTZfY2xlYW51cF9hdWRpbyhzdHJ1Y3QgdXNiX2xpbmU2ICopOwotZXh0ZXJuIGludCBsaW5lNl9pbml0X2F1ZGlvKHN0cnVjdCB1c2JfbGluZTYgKik7Ci1leHRlcm4gaW50IGxpbmU2X3JlZ2lzdGVyX2F1ZGlvKHN0cnVjdCB1c2JfbGluZTYgKik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NhcHR1cmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9jYXB0dXJlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2Y2E2MzEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NhcHR1cmUuYworKysgL2Rldi9udWxsCkBAIC0xLDQzMiArMCwwIEBACi0vKgotICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOS4xYmV0YQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8c291bmQvY29yZS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KLQotI2luY2x1ZGUgImF1ZGlvLmgiCi0jaW5jbHVkZSAiY2FwdHVyZS5oIgotI2luY2x1ZGUgImRyaXZlci5oIgotI2luY2x1ZGUgInBjbS5oIgotI2luY2x1ZGUgInBvZC5oIgotCi0vKgotCUZpbmQgYSBmcmVlIFVSQiBhbmQgc3VibWl0IGl0LgotKi8KLXN0YXRpYyBpbnQgc3VibWl0X2F1ZGlvX2luX3VyYihzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCi17Ci0JaW50IGluZGV4OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGksIHVyYl9zaXplOwotCWludCByZXQ7Ci0Jc3RydWN0IHVyYiAqdXJiX2luOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmU2cGNtLT5sb2NrX2F1ZGlvX2luLCBmbGFncyk7Ci0JaW5kZXggPQotCSAgICBmaW5kX2ZpcnN0X3plcm9fYml0KCZsaW5lNnBjbS0+YWN0aXZlX3VyYl9pbiwgTElORTZfSVNPX0JVRkZFUlMpOwotCi0JaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBMSU5FNl9JU09fQlVGRkVSUykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19pbiwgZmxhZ3MpOwotCQlkZXZfZXJyKGxpbmU2cGNtLT5saW5lNi0+aWZjZGV2LCAibm8gZnJlZSBVUkIgZm91bmRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl1cmJfaW4gPSBsaW5lNnBjbS0+dXJiX2F1ZGlvX2luW2luZGV4XTsKLQl1cmJfc2l6ZSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX1BBQ0tFVFM7ICsraSkgewotCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqZmluID0KLQkJICAgICZ1cmJfaW4tPmlzb19mcmFtZV9kZXNjW2ldOwotCQlmaW4tPm9mZnNldCA9IHVyYl9zaXplOwotCQlmaW4tPmxlbmd0aCA9IGxpbmU2cGNtLT5tYXhfcGFja2V0X3NpemU7Ci0JCXVyYl9zaXplICs9IGxpbmU2cGNtLT5tYXhfcGFja2V0X3NpemU7Ci0JfQotCi0JdXJiX2luLT50cmFuc2Zlcl9idWZmZXIgPQotCSAgICBsaW5lNnBjbS0+YnVmZmVyX2luICsKLQkgICAgaW5kZXggKiBMSU5FNl9JU09fUEFDS0VUUyAqIGxpbmU2cGNtLT5tYXhfcGFja2V0X3NpemU7Ci0JdXJiX2luLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gdXJiX3NpemU7Ci0JdXJiX2luLT5jb250ZXh0ID0gbGluZTZwY207Ci0KLQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmJfaW4sIEdGUF9BVE9NSUMpOwotCi0JaWYgKHJldCA9PSAwKQotCQlzZXRfYml0KGluZGV4LCAmbGluZTZwY20tPmFjdGl2ZV91cmJfaW4pOwotCWVsc2UKLQkJZGV2X2VycihsaW5lNnBjbS0+bGluZTYtPmlmY2RldiwKLQkJCSJVUkIgaW4gIyVkIHN1Ym1pc3Npb24gZmFpbGVkICglZClcbiIsIGluZGV4LCByZXQpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTZwY20tPmxvY2tfYXVkaW9faW4sIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLQlTdWJtaXQgYWxsIGN1cnJlbnRseSBhdmFpbGFibGUgY2FwdHVyZSBVUkJzLgotKi8KLWludCBsaW5lNl9zdWJtaXRfYXVkaW9faW5fYWxsX3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQotewotCWludCByZXQsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX0JVRkZFUlM7ICsraSkgewotCQlyZXQgPSBzdWJtaXRfYXVkaW9faW5fdXJiKGxpbmU2cGNtKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotCVVubGluayBhbGwgY3VycmVudGx5IGFjdGl2ZSBjYXB0dXJlIFVSQnMuCi0qLwotdm9pZCBsaW5lNl91bmxpbmtfYXVkaW9faW5fdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSBMSU5FNl9JU09fQlVGRkVSUzsgaS0tOykgewotCQlpZiAodGVzdF9iaXQoaSwgJmxpbmU2cGNtLT5hY3RpdmVfdXJiX2luKSkgewotCQkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KGksICZsaW5lNnBjbS0+dW5saW5rX3VyYl9pbikpIHsKLQkJCQlzdHJ1Y3QgdXJiICp1ID0gbGluZTZwY20tPnVyYl9hdWRpb19pbltpXTsKLQotCQkJCXVzYl91bmxpbmtfdXJiKHUpOwotCQkJfQotCQl9Ci0JfQotfQotCi0vKgotCVdhaXQgdW50aWwgdW5saW5raW5nIG9mIGFsbCBjdXJyZW50bHkgYWN0aXZlIGNhcHR1cmUgVVJCcyBoYXMgYmVlbgotCWZpbmlzaGVkLgotKi8KLXZvaWQgbGluZTZfd2FpdF9jbGVhcl9hdWRpb19pbl91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKLXsKLQlpbnQgdGltZW91dCA9IEhaOwotCXVuc2lnbmVkIGludCBpOwotCWludCBhbGl2ZTsKLQotCWRvIHsKLQkJYWxpdmUgPSAwOwotCQlmb3IgKGkgPSBMSU5FNl9JU09fQlVGRkVSUzsgaS0tOykgewotCQkJaWYgKHRlc3RfYml0KGksICZsaW5lNnBjbS0+YWN0aXZlX3VyYl9pbikpCi0JCQkJYWxpdmUrKzsKLQkJfQotCQlpZiAoIWFsaXZlKQotCQkJYnJlYWs7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJc2NoZWR1bGVfdGltZW91dCgxKTsKLQl9IHdoaWxlICgtLXRpbWVvdXQgPiAwKTsKLQlpZiAoYWxpdmUpCi0JCXNuZF9wcmludGsoS0VSTl9FUlIgInRpbWVvdXQ6IHN0aWxsICVkIGFjdGl2ZSB1cmJzLi5cbiIsIGFsaXZlKTsKLX0KLQotLyoKLQlVbmxpbmsgYWxsIGN1cnJlbnRseSBhY3RpdmUgY2FwdHVyZSBVUkJzLCBhbmQgd2FpdCBmb3IgZmluaXNoaW5nLgotKi8KLXZvaWQgbGluZTZfdW5saW5rX3dhaXRfY2xlYXJfYXVkaW9faW5fdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCi17Ci0JbGluZTZfdW5saW5rX2F1ZGlvX2luX3VyYnMobGluZTZwY20pOwotCWxpbmU2X3dhaXRfY2xlYXJfYXVkaW9faW5fdXJicyhsaW5lNnBjbSk7Ci19Ci0KLS8qCi0JQ29weSBkYXRhIGludG8gQUxTQSBjYXB0dXJlIGJ1ZmZlci4KLSovCi12b2lkIGxpbmU2X2NhcHR1cmVfY29weShzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20sIGNoYXIgKmZidWYsIGludCBmc2l6ZSkKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9Ci0JICAgIGdldF9zdWJzdHJlYW0obGluZTZwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSk7Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQljb25zdCBpbnQgYnl0ZXNfcGVyX2ZyYW1lID0gbGluZTZwY20tPnByb3BlcnRpZXMtPmJ5dGVzX3Blcl9mcmFtZTsKLQlpbnQgZnJhbWVzID0gZnNpemUgLyBieXRlc19wZXJfZnJhbWU7Ci0KLQlpZiAocnVudGltZSA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAobGluZTZwY20tPnBvc19pbl9kb25lICsgZnJhbWVzID4gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKLQkJLyoKLQkJICAgVGhlIHRyYW5zZmVycmVkIGFyZWEgZ29lcyBvdmVyIGJ1ZmZlciBib3VuZGFyeSwKLQkJICAgY29weSB0d28gc2VwYXJhdGUgY2h1bmtzLgotCQkgKi8KLQkJaW50IGxlbjsKLQotCQlsZW4gPSBydW50aW1lLT5idWZmZXJfc2l6ZSAtIGxpbmU2cGNtLT5wb3NfaW5fZG9uZTsKLQotCQlpZiAobGVuID4gMCkgewotCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsKLQkJCSAgICAgICBsaW5lNnBjbS0+cG9zX2luX2RvbmUgKiBieXRlc19wZXJfZnJhbWUsIGZidWYsCi0JCQkgICAgICAgbGVuICogYnl0ZXNfcGVyX2ZyYW1lKTsKLQkJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSwgZmJ1ZiArIGxlbiAqIGJ5dGVzX3Blcl9mcmFtZSwKLQkJCSAgICAgICAoZnJhbWVzIC0gbGVuKSAqIGJ5dGVzX3Blcl9mcmFtZSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiB0aGlzIGlzIHNvbWV3aGF0IHBhcmFub2lkICovCi0JCQlkZXZfZXJyKGxpbmU2cGNtLT5saW5lNi0+aWZjZGV2LAotCQkJCSJkcml2ZXIgYnVnOiBsZW4gPSAlZFxuIiwgbGVuKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIGNvcHkgc2luZ2xlIGNodW5rICovCi0JCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArCi0JCSAgICAgICBsaW5lNnBjbS0+cG9zX2luX2RvbmUgKiBieXRlc19wZXJfZnJhbWUsIGZidWYsIGZzaXplKTsKLQl9Ci0KLQlsaW5lNnBjbS0+cG9zX2luX2RvbmUgKz0gZnJhbWVzOwotCWlmIChsaW5lNnBjbS0+cG9zX2luX2RvbmUgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCi0JCWxpbmU2cGNtLT5wb3NfaW5fZG9uZSAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKLX0KLQotdm9pZCBsaW5lNl9jYXB0dXJlX2NoZWNrX3BlcmlvZChzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20sIGludCBsZW5ndGgpCi17Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPQotCSAgICBnZXRfc3Vic3RyZWFtKGxpbmU2cGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOwotCi0JbGluZTZwY20tPmJ5dGVzX2luICs9IGxlbmd0aDsKLQlpZiAobGluZTZwY20tPmJ5dGVzX2luID49IGxpbmU2cGNtLT5wZXJpb2RfaW4pIHsKLQkJbGluZTZwY20tPmJ5dGVzX2luICU9IGxpbmU2cGNtLT5wZXJpb2RfaW47Ci0JCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKLQl9Ci19Ci0KLXZvaWQgbGluZTZfZnJlZV9jYXB0dXJlX2J1ZmZlcihzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCi17Ci0Ja2ZyZWUobGluZTZwY20tPmJ1ZmZlcl9pbik7Ci0JbGluZTZwY20tPmJ1ZmZlcl9pbiA9IE5VTEw7Ci19Ci0KLS8qCi0gKiBDYWxsYmFjayBmb3IgY29tcGxldGVkIGNhcHR1cmUgVVJCLgotICovCi1zdGF0aWMgdm9pZCBhdWRpb19pbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCi17Ci0JaW50IGksIGluZGV4LCBsZW5ndGggPSAwLCBzaHV0ZG93biA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IChzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqKXVyYi0+Y29udGV4dDsKLQotCWxpbmU2cGNtLT5sYXN0X2ZyYW1lX2luID0gdXJiLT5zdGFydF9mcmFtZTsKLQotCS8qIGZpbmQgaW5kZXggb2YgVVJCICovCi0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTElORTZfSVNPX0JVRkZFUlM7ICsraW5kZXgpCi0JCWlmICh1cmIgPT0gbGluZTZwY20tPnVyYl9hdWRpb19pbltpbmRleF0pCi0JCQlicmVhazsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19pbiwgZmxhZ3MpOwotCi0JZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19QQUNLRVRTOyArK2kpIHsKLQkJY2hhciAqZmJ1ZjsKLQkJaW50IGZzaXplOwotCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqZmluID0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV07Ci0KLQkJaWYgKGZpbi0+c3RhdHVzID09IC1FWERFVikgewotCQkJc2h1dGRvd24gPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlmYnVmID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBmaW4tPm9mZnNldDsKLQkJZnNpemUgPSBmaW4tPmFjdHVhbF9sZW5ndGg7Ci0KLQkJaWYgKGZzaXplID4gbGluZTZwY20tPm1heF9wYWNrZXRfc2l6ZSkgewotCQkJZGV2X2VycihsaW5lNnBjbS0+bGluZTYtPmlmY2RldiwKLQkJCQkiZHJpdmVyIGFuZC9vciBkZXZpY2UgYnVnOiBwYWNrZXQgdG9vIGxhcmdlICglZCA+ICVkKVxuIiwKLQkJCQlmc2l6ZSwgbGluZTZwY20tPm1heF9wYWNrZXRfc2l6ZSk7Ci0JCX0KLQotCQlsZW5ndGggKz0gZnNpemU7Ci0KLQkJLyogdGhlIGZvbGxvd2luZyBhc3N1bWVzIExJTkU2X0lTT19QQUNLRVRTID09IDE6ICovCi0JCWxpbmU2cGNtLT5wcmV2X2ZidWYgPSBmYnVmOwotCQlsaW5lNnBjbS0+cHJldl9mc2l6ZSA9IGZzaXplOwotCi0jaWZkZWYgQ09ORklHX0xJTkU2X1VTQl9JTVBVTFNFX1JFU1BPTlNFCi0JCWlmICghKGxpbmU2cGNtLT5mbGFncyAmIExJTkU2X0JJVFNfUENNX0lNUFVMU0UpKQotI2VuZGlmCi0JCQlpZiAodGVzdF9iaXQoTElORTZfSU5ERVhfUENNX0FMU0FfQ0FQVFVSRV9TVFJFQU0sCi0JCQkJICAgICAmbGluZTZwY20tPmZsYWdzKSAmJiAoZnNpemUgPiAwKSkKLQkJCQlsaW5lNl9jYXB0dXJlX2NvcHkobGluZTZwY20sIGZidWYsIGZzaXplKTsKLQl9Ci0KLQljbGVhcl9iaXQoaW5kZXgsICZsaW5lNnBjbS0+YWN0aXZlX3VyYl9pbik7Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGluZGV4LCAmbGluZTZwY20tPnVubGlua191cmJfaW4pKQotCQlzaHV0ZG93biA9IDE7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19pbiwgZmxhZ3MpOwotCi0JaWYgKCFzaHV0ZG93bikgewotCQlzdWJtaXRfYXVkaW9faW5fdXJiKGxpbmU2cGNtKTsKLQotI2lmZGVmIENPTkZJR19MSU5FNl9VU0JfSU1QVUxTRV9SRVNQT05TRQotCQlpZiAoIShsaW5lNnBjbS0+ZmxhZ3MgJiBMSU5FNl9CSVRTX1BDTV9JTVBVTFNFKSkKLSNlbmRpZgotCQkJaWYgKHRlc3RfYml0KExJTkU2X0lOREVYX1BDTV9BTFNBX0NBUFRVUkVfU1RSRUFNLAotCQkJCSAgICAgJmxpbmU2cGNtLT5mbGFncykpCi0JCQkJbGluZTZfY2FwdHVyZV9jaGVja19wZXJpb2QobGluZTZwY20sIGxlbmd0aCk7Ci0JfQotfQotCi0vKiBvcGVuIGNhcHR1cmUgY2FsbGJhY2sgKi8KLXN0YXRpYyBpbnQgc25kX2xpbmU2X2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCi0JZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X3JhdGRlbnMocnVudGltZSwgMCwKLQkJCQkJICAgIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAotCQkJCQkgICAgKCZsaW5lNnBjbS0+Ci0JCQkJCSAgICAgcHJvcGVydGllcy0+c25kX2xpbmU2X3JhdGVzKSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlydW50aW1lLT5odyA9IGxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5zbmRfbGluZTZfY2FwdHVyZV9odzsKLQlyZXR1cm4gMDsKLX0KLQotLyogY2xvc2UgY2FwdHVyZSBjYWxsYmFjayAqLwotc3RhdGljIGludCBzbmRfbGluZTZfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyogaHdfcGFyYW1zIGNhcHR1cmUgY2FsbGJhY2sgKi8KLXN0YXRpYyBpbnQgc25kX2xpbmU2X2NhcHR1cmVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQotCS8qIC0tIEZsb3JpYW4gRGVtc2tpIFtGRF0gKi8KLQkvKiBkb24ndCBhc2sgbWUgd2h5LCBidXQgdGhpcyBmaXhlcyB0aGUgYnVnIG9uIG15IG1hY2hpbmUgKi8KLQlpZiAobGluZTZwY20gPT0gTlVMTCkgewotCQlpZiAoc3Vic3RyZWFtLT5wY20gPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAoc3Vic3RyZWFtLT5wY20tPnByaXZhdGVfZGF0YSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhID0gc3Vic3RyZWFtLT5wY20tPnByaXZhdGVfZGF0YTsKLQkJbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0JfQotCS8qIC0tIFtGRF0gZW5kICovCi0KLQlyZXQgPSBsaW5lNl9wY21fYWNxdWlyZShsaW5lNnBjbSwgTElORTZfQklUX1BDTV9BTFNBX0NBUFRVUkVfQlVGRkVSKTsKLQotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKLQkJCQkgICAgICAgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKLQlpZiAocmV0IDwgMCkgewotCQlsaW5lNl9wY21fcmVsZWFzZShsaW5lNnBjbSwgTElORTZfQklUX1BDTV9BTFNBX0NBUFRVUkVfQlVGRkVSKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlsaW5lNnBjbS0+cGVyaW9kX2luID0gcGFyYW1zX3BlcmlvZF9ieXRlcyhod19wYXJhbXMpOwotCXJldHVybiAwOwotfQotCi0vKiBod19mcmVlIGNhcHR1cmUgY2FsbGJhY2sgKi8KLXN0YXRpYyBpbnQgc25kX2xpbmU2X2NhcHR1cmVfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0KLQlsaW5lNl9wY21fcmVsZWFzZShsaW5lNnBjbSwgTElORTZfQklUX1BDTV9BTFNBX0NBUFRVUkVfQlVGRkVSKTsKLQlyZXR1cm4gc25kX3BjbV9saWJfZnJlZV9wYWdlcyhzdWJzdHJlYW0pOwotfQotCi0vKiB0cmlnZ2VyIGNhbGxiYWNrICovCi1pbnQgc25kX2xpbmU2X2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20sIGludCBjbWQpCi17Ci0JaW50IGVycjsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLSNpZmRlZiBDT05GSUdfUE0KLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKLSNlbmRpZgotCQllcnIgPSBsaW5lNl9wY21fYWNxdWlyZShsaW5lNnBjbSwKLQkJCQkJTElORTZfQklUX1BDTV9BTFNBX0NBUFRVUkVfU1RSRUFNKTsKLQotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0jaWZkZWYgQ09ORklHX1BNCi0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgotI2VuZGlmCi0JCWVyciA9IGxpbmU2X3BjbV9yZWxlYXNlKGxpbmU2cGNtLAotCQkJCQlMSU5FNl9CSVRfUENNX0FMU0FfQ0FQVFVSRV9TVFJFQU0pOwotCi0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBjYXB0dXJlIHBvaW50ZXIgY2FsbGJhY2sgKi8KLXN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdAotc25kX2xpbmU2X2NhcHR1cmVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0KLQlyZXR1cm4gbGluZTZwY20tPnBvc19pbl9kb25lOwotfQotCi0vKiBjYXB0dXJlIG9wZXJhdG9ycyAqLwotc3RydWN0IHNuZF9wY21fb3BzIHNuZF9saW5lNl9jYXB0dXJlX29wcyA9IHsKLQkub3BlbiA9IHNuZF9saW5lNl9jYXB0dXJlX29wZW4sCi0JLmNsb3NlID0gc25kX2xpbmU2X2NhcHR1cmVfY2xvc2UsCi0JLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCi0JLmh3X3BhcmFtcyA9IHNuZF9saW5lNl9jYXB0dXJlX2h3X3BhcmFtcywKLQkuaHdfZnJlZSA9IHNuZF9saW5lNl9jYXB0dXJlX2h3X2ZyZWUsCi0JLnByZXBhcmUgPSBzbmRfbGluZTZfcHJlcGFyZSwKLQkudHJpZ2dlciA9IHNuZF9saW5lNl90cmlnZ2VyLAotCS5wb2ludGVyID0gc25kX2xpbmU2X2NhcHR1cmVfcG9pbnRlciwKLX07Ci0KLWludCBsaW5lNl9jcmVhdGVfYXVkaW9faW5fdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCi17Ci0JaW50IGk7Ci0KLQkvKiBjcmVhdGUgYXVkaW8gVVJCcyBhbmQgZmlsbCBpbiBjb25zdGFudCB2YWx1ZXM6ICovCi0JZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19CVUZGRVJTOyArK2kpIHsKLQkJc3RydWN0IHVyYiAqdXJiOwotCi0JCS8qIFVSQiBmb3IgYXVkaW8gaW46ICovCi0JCXVyYiA9IGxpbmU2cGNtLT51cmJfYXVkaW9faW5baV0gPQotCQkgICAgdXNiX2FsbG9jX3VyYihMSU5FNl9JU09fUEFDS0VUUywgR0ZQX0tFUk5FTCk7Ci0KLQkJaWYgKHVyYiA9PSBOVUxMKSB7Ci0JCQlkZXZfZXJyKGxpbmU2cGNtLT5saW5lNi0+aWZjZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCXVyYi0+ZGV2ID0gbGluZTZwY20tPmxpbmU2LT51c2JkZXY7Ci0JCXVyYi0+cGlwZSA9Ci0JCSAgICB1c2JfcmN2aXNvY3BpcGUobGluZTZwY20tPmxpbmU2LT51c2JkZXYsCi0JCQkJICAgIGxpbmU2cGNtLT5lcF9hdWRpb19yZWFkICYKLQkJCQkgICAgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKLQkJdXJiLT5zdGFydF9mcmFtZSA9IC0xOwotCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gTElORTZfSVNPX1BBQ0tFVFM7Ci0JCXVyYi0+aW50ZXJ2YWwgPSBMSU5FNl9JU09fSU5URVJWQUw7Ci0JCXVyYi0+ZXJyb3JfY291bnQgPSAwOwotCQl1cmItPmNvbXBsZXRlID0gYXVkaW9faW5fY2FsbGJhY2s7Ci0JfQotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwM2IyZDcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE2MiArMCwwIEBACi0vKgotICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOS4xYmV0YQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0KLSNpbmNsdWRlICJhdWRpby5oIgotI2luY2x1ZGUgImNhcHR1cmUuaCIKLSNpbmNsdWRlICJkcml2ZXIuaCIKLSNpbmNsdWRlICJtaWRpLmgiCi0jaW5jbHVkZSAicGxheWJhY2suaCIKLSNpbmNsdWRlICJwb2QuaCIKLSNpbmNsdWRlICJwb2RoZC5oIgotI2luY2x1ZGUgInJldmlzaW9uLmgiCi0jaW5jbHVkZSAidG9uZXBvcnQuaCIKLSNpbmNsdWRlICJ1c2JkZWZzLmgiCi0jaW5jbHVkZSAidmFyaWF4LmgiCi0KLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAgIk1hcmt1cyBHcmFibmVyIDxncmFibmVyQGljZy50dWdyYXouYXQ+IgotI2RlZmluZSBEUklWRVJfREVTQyAgICAiTGluZTYgVVNCIERyaXZlciIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuOS4xYmV0YSIgRFJJVkVSX1JFVklTSU9OCi0KLS8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBsaW5lNl9pZF90YWJsZVtdID0gewotCXtVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfQkFTU1BPRFhUKX0sCi0Je1VTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9CQVNTUE9EWFRMSVZFKX0sCi0Je1VTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9CQVNTUE9EWFRQUk8pfSwKLQl7VVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX0dVSVRBUlBPUlQpfSwKLQl7VVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX1BPQ0tFVFBPRCl9LAotCXtVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfUE9ESEQzMDApfSwKLQl7VVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX1BPREhENDAwKX0sCi0Je1VTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9QT0RIRDUwMCl9LAotCXtVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfUE9EU1RVRElPX0dYKX0sCi0Je1VTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9QT0RTVFVESU9fVVgxKX0sCi0Je1VTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9QT0RTVFVESU9fVVgyKX0sCi0Je1VTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9QT0RYMyl9LAotCXtVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfUE9EWDNMSVZFKX0sCi0Je1VTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9QT0RYVCl9LAotCXtVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfUE9EWFRMSVZFKX0sCi0Je1VTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9QT0RYVFBSTyl9LAotCXtVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfVE9ORVBPUlRfR1gpfSwKLQl7VVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMSl9LAotCXtVU0JfREVWSUNFKExJTkU2X1ZFTkRPUl9JRCwgTElORTZfREVWSURfVE9ORVBPUlRfVVgyKX0sCi0Je1VTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9WQVJJQVgpfSwKLQl7fSwKLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBsaW5lNl9pZF90YWJsZSk7Ci0KLSNkZWZpbmUgTDZQUk9QKGRldl9iaXQsIGRldl9pZCwgZGV2X25hbWUsIGRldl9jYXApXAotCXsuZGV2aWNlX2JpdCA9IExJTkU2X0JJVF8jI2Rldl9iaXQsIC5pZCA9IGRldl9pZCxcCi0JIC5uYW1lID0gZGV2X25hbWUsIC5jYXBhYmlsaXRpZXMgPSBMSU5FNl9CSVRfIyNkZXZfY2FwfQotCi0vKiAqSU5ERU5ULU9GRiogKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbGluZTZfcHJvcGVydGllcyBsaW5lNl9wcm9wZXJ0aWVzX3RhYmxlW10gPSB7Ci0JTDZQUk9QKEJBU1NQT0RYVCwgICAgICJCYXNzUE9EeHQiLCAgICAgIkJhc3NQT0R4dCIsICAgICAgICBDVFJMX1BDTV9IVyksCi0JTDZQUk9QKEJBU1NQT0RYVExJVkUsICJCYXNzUE9EeHRMaXZlIiwgIkJhc3NQT0R4dCBMaXZlIiwgICBDVFJMX1BDTV9IVyksCi0JTDZQUk9QKEJBU1NQT0RYVFBSTywgICJCYXNzUE9EeHRQcm8iLCAgIkJhc3NQT0R4dCBQcm8iLCAgICBDVFJMX1BDTV9IVyksCi0JTDZQUk9QKEdVSVRBUlBPUlQsICAgICJHdWl0YXJQb3J0IiwgICAgIkd1aXRhclBvcnQiLCAgICAgICBQQ00pLAotCUw2UFJPUChQT0NLRVRQT0QsICAgICAiUG9ja2V0UE9EIiwgICAgICJQb2NrZXQgUE9EIiwgICAgICAgQ09OVFJPTCksCi0JTDZQUk9QKFBPREhEMzAwLCAgICAgICJQT0RIRDMwMCIsICAgICAgIlBPRCBIRDMwMCIsICAgICAgICBDVFJMX1BDTV9IVyksCi0JTDZQUk9QKFBPREhENDAwLCAgICAgICJQT0RIRDQwMCIsICAgICAgIlBPRCBIRDQwMCIsICAgICAgICBDVFJMX1BDTV9IVyksCi0JTDZQUk9QKFBPREhENTAwLCAgICAgICJQT0RIRDUwMCIsICAgICAgIlBPRCBIRDUwMCIsICAgICAgICBDVFJMX1BDTV9IVyksCi0JTDZQUk9QKFBPRFNUVURJT19HWCwgICJQT0RTdHVkaW9HWCIsICAgIlBPRCBTdHVkaW8gR1giLCAgICBQQ00pLAotCUw2UFJPUChQT0RTVFVESU9fVVgxLCAiUE9EU3R1ZGlvVVgxIiwgICJQT0QgU3R1ZGlvIFVYMSIsICAgUENNKSwKLQlMNlBST1AoUE9EU1RVRElPX1VYMiwgIlBPRFN0dWRpb1VYMiIsICAiUE9EIFN0dWRpbyBVWDIiLCAgIFBDTSksCi0JTDZQUk9QKFBPRFgzLCAgICAgICAgICJQT0RYMyIsICAgICAgICAgIlBPRCBYMyIsICAgICAgICAgICBQQ00pLAotCUw2UFJPUChQT0RYM0xJVkUsICAgICAiUE9EWDNMaXZlIiwgICAgICJQT0QgWDMgTGl2ZSIsICAgICAgUENNKSwKLQlMNlBST1AoUE9EWFQsICAgICAgICAgIlBPRHh0IiwgICAgICAgICAiUE9EeHQiLCAgICAgICAgICAgIENUUkxfUENNX0hXKSwKLQlMNlBST1AoUE9EWFRMSVZFLCAgICAgIlBPRHh0TGl2ZSIsICAgICAiUE9EeHQgTGl2ZSIsICAgICAgIENUUkxfUENNX0hXKSwKLQlMNlBST1AoUE9EWFRQUk8sICAgICAgIlBPRHh0UHJvIiwgICAgICAiUE9EeHQgUHJvIiwgICAgICAgIENUUkxfUENNX0hXKSwKLQlMNlBST1AoVE9ORVBPUlRfR1gsICAgIlRvbmVQb3J0R1giLCAgICAiVG9uZVBvcnQgR1giLCAgICAgIFBDTSksCi0JTDZQUk9QKFRPTkVQT1JUX1VYMSwgICJUb25lUG9ydFVYMSIsICAgIlRvbmVQb3J0IFVYMSIsICAgICBQQ00pLAotCUw2UFJPUChUT05FUE9SVF9VWDIsICAiVG9uZVBvcnRVWDIiLCAgICJUb25lUG9ydCBVWDIiLCAgICAgUENNKSwKLQlMNlBST1AoVkFSSUFYLCAgICAgICAgIlZhcmlheCIsICAgICAgICAiVmFyaWF4IFdvcmtiZW5jaCIsIENPTlRST0wpLAotfTsKLS8qICpJTkRFTlQtT04qICovCi0KLS8qCi0JVGhpcyBpcyBMaW5lNidzIE1JREkgbWFudWZhY3R1cmVyIElELgotKi8KLWNvbnN0IHVuc2lnbmVkIGNoYXIgbGluZTZfbWlkaV9pZFtdID0gewotCTB4MDAsIDB4MDEsIDB4MGMKLX07Ci0KLS8qCi0JQ29kZSB0byByZXF1ZXN0IHZlcnNpb24gb2YgUE9ELCBWYXJpYXggaW50ZXJmYWNlCi0JKGFuZCBtYXliZSBvdGhlciBkZXZpY2VzKS4KLSovCi1zdGF0aWMgY29uc3QgY2hhciBsaW5lNl9yZXF1ZXN0X3ZlcnNpb25bXSA9IHsKLQkweGYwLCAweDdlLCAweDdmLCAweDA2LCAweDAxLCAweGY3Ci19OwotCi0vKioKLQkgQ2xhc3MgZm9yIGFzeW5jaHJvbm91cyBtZXNzYWdlcy4KLSovCi1zdHJ1Y3QgbWVzc2FnZSB7Ci0Jc3RydWN0IHVzYl9saW5lNiAqbGluZTY7Ci0JY29uc3QgY2hhciAqYnVmZmVyOwotCWludCBzaXplOwotCWludCBkb25lOwotfTsKLQotLyoKLQlGb3J3YXJkIGRlY2xhcmF0aW9ucy4KLSovCi1zdGF0aWMgdm9pZCBsaW5lNl9kYXRhX3JlY2VpdmVkKHN0cnVjdCB1cmIgKnVyYik7Ci1zdGF0aWMgaW50IGxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmNfcGFydChzdHJ1Y3QgbWVzc2FnZSAqbXNnLAotCQkJCQkgICAgIHN0cnVjdCB1cmIgKnVyYik7Ci0KLS8qCi0JU3RhcnQgdG8gbGlzdGVuIG9uIGVuZHBvaW50LgotKi8KLXN0YXRpYyBpbnQgbGluZTZfc3RhcnRfbGlzdGVuKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KQotewotCWludCBlcnI7Ci0KLQl1c2JfZmlsbF9pbnRfdXJiKGxpbmU2LT51cmJfbGlzdGVuLCBsaW5lNi0+dXNiZGV2LAotCQkJIHVzYl9yY3ZpbnRwaXBlKGxpbmU2LT51c2JkZXYsIGxpbmU2LT5lcF9jb250cm9sX3JlYWQpLAotCQkJIGxpbmU2LT5idWZmZXJfbGlzdGVuLCBMSU5FNl9CVUZTSVpFX0xJU1RFTiwKLQkJCSBsaW5lNl9kYXRhX3JlY2VpdmVkLCBsaW5lNiwgbGluZTYtPmludGVydmFsKTsKLQlsaW5lNi0+dXJiX2xpc3Rlbi0+YWN0dWFsX2xlbmd0aCA9IDA7Ci0JZXJyID0gdXNiX3N1Ym1pdF91cmIobGluZTYtPnVyYl9saXN0ZW4sIEdGUF9BVE9NSUMpOwotCXJldHVybiBlcnI7Ci19Ci0KLS8qCi0JU3RvcCBsaXN0ZW5pbmcgb24gZW5kcG9pbnQuCi0qLwotc3RhdGljIHZvaWQgbGluZTZfc3RvcF9saXN0ZW4oc3RydWN0IHVzYl9saW5lNiAqbGluZTYpCi17Ci0JdXNiX2tpbGxfdXJiKGxpbmU2LT51cmJfbGlzdGVuKTsKLX0KLQotLyoKLQlTZW5kIHJhdyBtZXNzYWdlIGluIHBpZWNlcyBvZiB3TWF4UGFja2V0U2l6ZSBieXRlcy4KLSovCi1pbnQgbGluZTZfc2VuZF9yYXdfbWVzc2FnZShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgY29uc3QgY2hhciAqYnVmZmVyLAotCQkJICAgaW50IHNpemUpCi17Ci0JaW50IGksIGRvbmUgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gbGluZTYtPm1heF9wYWNrZXRfc2l6ZSkgewotCQlpbnQgcGFydGlhbDsKLQkJY29uc3QgY2hhciAqZnJhZ19idWYgPSBidWZmZXIgKyBpOwotCQlpbnQgZnJhZ19zaXplID0gbWluKGxpbmU2LT5tYXhfcGFja2V0X3NpemUsIHNpemUgLSBpKTsKLQkJaW50IHJldHZhbDsKLQotCQlyZXR2YWwgPSB1c2JfaW50ZXJydXB0X21zZyhsaW5lNi0+dXNiZGV2LAotCQkJCQl1c2Jfc25kaW50cGlwZShsaW5lNi0+dXNiZGV2LAotCQkJCQkJbGluZTYtPmVwX2NvbnRyb2xfd3JpdGUpLAotCQkJCQkoY2hhciAqKWZyYWdfYnVmLCBmcmFnX3NpemUsCi0JCQkJCSZwYXJ0aWFsLCBMSU5FNl9USU1FT1VUICogSFopOwotCi0JCWlmIChyZXR2YWwpIHsKLQkJCWRldl9lcnIobGluZTYtPmlmY2RldiwKLQkJCQkidXNiX2ludGVycnVwdF9tc2cgZmFpbGVkICglZClcbiIsIHJldHZhbCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWRvbmUgKz0gZnJhZ19zaXplOwotCX0KLQotCXJldHVybiBkb25lOwotfQotCi0vKgotCU5vdGlmaWNhdGlvbiBvZiBjb21wbGV0aW9uIG9mIGFzeW5jaHJvbm91cyByZXF1ZXN0IHRyYW5zbWlzc2lvbi4KLSovCi1zdGF0aWMgdm9pZCBsaW5lNl9hc3luY19yZXF1ZXN0X3NlbnQoc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCBtZXNzYWdlICptc2cgPSAoc3RydWN0IG1lc3NhZ2UgKil1cmItPmNvbnRleHQ7Ci0KLQlpZiAobXNnLT5kb25lID49IG1zZy0+c2l6ZSkgewotCQl1c2JfZnJlZV91cmIodXJiKTsKLQkJa2ZyZWUobXNnKTsKLQl9IGVsc2UKLQkJbGluZTZfc2VuZF9yYXdfbWVzc2FnZV9hc3luY19wYXJ0KG1zZywgdXJiKTsKLX0KLQotLyoKLQlBc3luY2hyb25vdXNseSBzZW5kIHBhcnQgb2YgYSByYXcgbWVzc2FnZS4KLSovCi1zdGF0aWMgaW50IGxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmNfcGFydChzdHJ1Y3QgbWVzc2FnZSAqbXNnLAotCQkJCQkgICAgIHN0cnVjdCB1cmIgKnVyYikKLXsKLQlpbnQgcmV0dmFsOwotCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gbXNnLT5saW5lNjsKLQlpbnQgZG9uZSA9IG1zZy0+ZG9uZTsKLQlpbnQgYnl0ZXMgPSBtaW4obXNnLT5zaXplIC0gZG9uZSwgbGluZTYtPm1heF9wYWNrZXRfc2l6ZSk7Ci0KLQl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgbGluZTYtPnVzYmRldiwKLQkJCSB1c2Jfc25kaW50cGlwZShsaW5lNi0+dXNiZGV2LCBsaW5lNi0+ZXBfY29udHJvbF93cml0ZSksCi0JCQkgKGNoYXIgKiltc2ctPmJ1ZmZlciArIGRvbmUsIGJ5dGVzLAotCQkJIGxpbmU2X2FzeW5jX3JlcXVlc3Rfc2VudCwgbXNnLCBsaW5lNi0+aW50ZXJ2YWwpOwotCi0JbXNnLT5kb25lICs9IGJ5dGVzOwotCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0KLQlpZiAocmV0dmFsIDwgMCkgewotCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkICglZClcbiIsCi0JCQlfX2Z1bmNfXywgcmV0dmFsKTsKLQkJdXNiX2ZyZWVfdXJiKHVyYik7Ci0JCWtmcmVlKG1zZyk7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0JU2V0dXAgYW5kIHN0YXJ0IHRpbWVyLgotKi8KLXZvaWQgbGluZTZfc3RhcnRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBpbnQgbXNlY3MsCi0JCSAgICAgICB2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpLCB1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc2V0dXBfdGltZXIodGltZXIsIGZ1bmN0aW9uLCBkYXRhKTsKLQl0aW1lci0+ZXhwaXJlcyA9IGppZmZpZXMgKyBtc2VjcyAqIEhaIC8gMTAwMDsKLQlhZGRfdGltZXIodGltZXIpOwotfQotCi0vKgotCUFzeW5jaHJvbm91c2x5IHNlbmQgcmF3IG1lc3NhZ2UuCi0qLwotaW50IGxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmMoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKLQkJCQkgaW50IHNpemUpCi17Ci0Jc3RydWN0IG1lc3NhZ2UgKm1zZzsKLQlzdHJ1Y3QgdXJiICp1cmI7Ci0KLQkvKiBjcmVhdGUgbWVzc2FnZTogKi8KLQltc2cgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVzc2FnZSksIEdGUF9BVE9NSUMpOwotCWlmIChtc2cgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBjcmVhdGUgVVJCOiAqLwotCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7Ci0KLQlpZiAodXJiID09IE5VTEwpIHsKLQkJa2ZyZWUobXNnKTsKLQkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCS8qIHNldCBtZXNzYWdlIGRhdGE6ICovCi0JbXNnLT5saW5lNiA9IGxpbmU2OwotCW1zZy0+YnVmZmVyID0gYnVmZmVyOwotCW1zZy0+c2l6ZSA9IHNpemU7Ci0JbXNnLT5kb25lID0gMDsKLQotCS8qIHN0YXJ0IHNlbmRpbmc6ICovCi0JcmV0dXJuIGxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmNfcGFydChtc2csIHVyYik7Ci19Ci0KLS8qCi0JU2VuZCBhc3luY2hyb25vdXMgZGV2aWNlIHZlcnNpb24gcmVxdWVzdC4KLSovCi1pbnQgbGluZTZfdmVyc2lvbl9yZXF1ZXN0X2FzeW5jKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KQotewotCWNoYXIgKmJ1ZmZlcjsKLQlpbnQgcmV0dmFsOwotCi0JYnVmZmVyID0ga21lbWR1cChsaW5lNl9yZXF1ZXN0X3ZlcnNpb24sCi0JCQlzaXplb2YobGluZTZfcmVxdWVzdF92ZXJzaW9uKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCWRldl9lcnIobGluZTYtPmlmY2RldiwgIk91dCBvZiBtZW1vcnkiKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmV0dmFsID0gbGluZTZfc2VuZF9yYXdfbWVzc2FnZV9hc3luYyhsaW5lNiwgYnVmZmVyLAotCQkJCQkgICAgICBzaXplb2YobGluZTZfcmVxdWVzdF92ZXJzaW9uKSk7Ci0Ja2ZyZWUoYnVmZmVyKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKgotCVNlbmQgc3lzZXggbWVzc2FnZSBpbiBwaWVjZXMgb2Ygd01heFBhY2tldFNpemUgYnl0ZXMuCi0qLwotaW50IGxpbmU2X3NlbmRfc3lzZXhfbWVzc2FnZShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgY29uc3QgY2hhciAqYnVmZmVyLAotCQkJICAgICBpbnQgc2l6ZSkKLXsKLQlyZXR1cm4gbGluZTZfc2VuZF9yYXdfbWVzc2FnZShsaW5lNiwgYnVmZmVyLAotCQkJCSAgICAgIHNpemUgKyBTWVNFWF9FWFRSQV9TSVpFKSAtCi0JICAgIFNZU0VYX0VYVFJBX1NJWkU7Ci19Ci0KLS8qCi0JQWxsb2NhdGUgYnVmZmVyIGZvciBzeXNleCBtZXNzYWdlIGFuZCBwcmVwYXJlIGhlYWRlci4KLQlAcGFyYW0gY29kZSBzeXNleCBtZXNzYWdlIGNvZGUKLQlAcGFyYW0gc2l6ZSBudW1iZXIgb2YgYnl0ZXMgYmV0d2VlbiBjb2RlIGFuZCBzeXNleCBlbmQKLSovCi1jaGFyICpsaW5lNl9hbGxvY19zeXNleF9idWZmZXIoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCBjb2RlMSwgaW50IGNvZGUyLAotCQkJICAgICAgIGludCBzaXplKQotewotCWNoYXIgKmJ1ZmZlciA9IGttYWxsb2Moc2l6ZSArIFNZU0VYX0VYVFJBX1NJWkUsIEdGUF9BVE9NSUMpOwotCi0JaWYgKCFidWZmZXIpCi0JCXJldHVybiBOVUxMOwotCi0JYnVmZmVyWzBdID0gTElORTZfU1lTRVhfQkVHSU47Ci0JbWVtY3B5KGJ1ZmZlciArIDEsIGxpbmU2X21pZGlfaWQsIHNpemVvZihsaW5lNl9taWRpX2lkKSk7Ci0JYnVmZmVyW3NpemVvZihsaW5lNl9taWRpX2lkKSArIDFdID0gY29kZTE7Ci0JYnVmZmVyW3NpemVvZihsaW5lNl9taWRpX2lkKSArIDJdID0gY29kZTI7Ci0JYnVmZmVyW3NpemVvZihsaW5lNl9taWRpX2lkKSArIDMgKyBzaXplXSA9IExJTkU2X1NZU0VYX0VORDsKLQlyZXR1cm4gYnVmZmVyOwotfQotCi0vKgotCU5vdGlmaWNhdGlvbiBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIExpbmU2IGRldmljZS4KLSovCi1zdGF0aWMgdm9pZCBsaW5lNl9kYXRhX3JlY2VpdmVkKHN0cnVjdCB1cmIgKnVyYikKLXsKLQlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IChzdHJ1Y3QgdXNiX2xpbmU2ICopdXJiLT5jb250ZXh0OwotCXN0cnVjdCBtaWRpX2J1ZmZlciAqbWIgPSAmbGluZTYtPmxpbmU2bWlkaS0+bWlkaWJ1Zl9pbjsKLQlpbnQgZG9uZTsKLQotCWlmICh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKQotCQlyZXR1cm47Ci0KLQlkb25lID0KLQkgICAgbGluZTZfbWlkaWJ1Zl93cml0ZShtYiwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0KLQlpZiAoZG9uZSA8IHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQlsaW5lNl9taWRpYnVmX2lnbm9yZShtYiwgZG9uZSk7Ci0JCWRldl9kYmcobGluZTYtPmlmY2RldiwgIiVkICVkIGJ1ZmZlciBvdmVyZmxvdyAtIG1lc3NhZ2Ugc2tpcHBlZFxuIiwKLQkJCWRvbmUsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JfQotCi0JZm9yICg7OykgewotCQlkb25lID0KLQkJICAgIGxpbmU2X21pZGlidWZfcmVhZChtYiwgbGluZTYtPmJ1ZmZlcl9tZXNzYWdlLAotCQkJCSAgICAgICBMSU5FNl9NRVNTQUdFX01BWExFTik7Ci0KLQkJaWYgKGRvbmUgPT0gMCkKLQkJCWJyZWFrOwotCi0JCWxpbmU2LT5tZXNzYWdlX2xlbmd0aCA9IGRvbmU7Ci0JCWxpbmU2X21pZGlfcmVjZWl2ZShsaW5lNiwgbGluZTYtPmJ1ZmZlcl9tZXNzYWdlLCBkb25lKTsKLQotCQlzd2l0Y2ggKGxlMTZfdG9fY3B1KGxpbmU2LT51c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSkgewotCQljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVDoKLQkJY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRMSVZFOgotCQljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVFBSTzoKLQkJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVDoKLQkJY2FzZSBMSU5FNl9ERVZJRF9QT0RYVFBSTzoKLQkJY2FzZSBMSU5FNl9ERVZJRF9QT0NLRVRQT0Q6Ci0JCQlsaW5lNl9wb2RfcHJvY2Vzc19tZXNzYWdlKChzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqKQotCQkJCQkJICBsaW5lNik7Ci0JCQlicmVhazsKLQotCQljYXNlIExJTkU2X0RFVklEX1BPREhEMzAwOgotCQljYXNlIExJTkU2X0RFVklEX1BPREhENDAwOgotCQljYXNlIExJTkU2X0RFVklEX1BPREhENTAwOgotCQkJYnJlYWs7IC8qIGxldCB1c2Vyc3BhY2UgaGFuZGxlIE1JREkgKi8KLQotCQljYXNlIExJTkU2X0RFVklEX1BPRFhUTElWRToKLQkJCXN3aXRjaCAobGluZTYtPmludGVyZmFjZV9udW1iZXIpIHsKLQkJCWNhc2UgUE9EWFRMSVZFX0lOVEVSRkFDRV9QT0Q6Ci0JCQkJbGluZTZfcG9kX3Byb2Nlc3NfbWVzc2FnZSgoc3RydWN0IHVzYl9saW5lNl9wb2QKLQkJCQkJCQkgICAqKWxpbmU2KTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSBQT0RYVExJVkVfSU5URVJGQUNFX1ZBUklBWDoKLQkJCQlsaW5lNl92YXJpYXhfcHJvY2Vzc19tZXNzYWdlKChzdHJ1Y3QKLQkJCQkJCQkgICAgICB1c2JfbGluZTZfdmFyaWF4Ci0JCQkJCQkJICAgICAgKilsaW5lNik7Ci0JCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJZGV2X2VycihsaW5lNi0+aWZjZGV2LAotCQkJCQkiUE9EeHQgTGl2ZSBpbnRlcmZhY2UgJWQgbm90IHN1cHBvcnRlZFxuIiwKLQkJCQkJbGluZTYtPmludGVyZmFjZV9udW1iZXIpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBMSU5FNl9ERVZJRF9WQVJJQVg6Ci0JCQlsaW5lNl92YXJpYXhfcHJvY2Vzc19tZXNzYWdlKChzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqKQotCQkJCQkJICAgICBsaW5lNik7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJTUlTU0lOR19DQVNFOwotCQl9Ci0JfQotCi0JbGluZTZfc3RhcnRfbGlzdGVuKGxpbmU2KTsKLX0KLQotLyoKLQlTZW5kIGNoYW5uZWwgbnVtYmVyIChpLmUuLCBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgc291bmQpLgotKi8KLWludCBsaW5lNl9zZW5kX3Byb2dyYW0oc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIHU4IHZhbHVlKQotewotCWludCByZXR2YWw7Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCWludCBwYXJ0aWFsOwotCi0JYnVmZmVyID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZmZlcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlidWZmZXJbMF0gPSBMSU5FNl9QUk9HUkFNX0NIQU5HRSB8IExJTkU2X0NIQU5ORUxfSE9TVDsKLQlidWZmZXJbMV0gPSB2YWx1ZTsKLQotCXJldHZhbCA9IHVzYl9pbnRlcnJ1cHRfbXNnKGxpbmU2LT51c2JkZXYsCi0JCQkJICAgdXNiX3NuZGludHBpcGUobGluZTYtPnVzYmRldiwKLQkJCQkJCSAgbGluZTYtPmVwX2NvbnRyb2xfd3JpdGUpLAotCQkJCSAgIGJ1ZmZlciwgMiwgJnBhcnRpYWwsIExJTkU2X1RJTUVPVVQgKiBIWik7Ci0KLQlpZiAocmV0dmFsKQotCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJ1c2JfaW50ZXJydXB0X21zZyBmYWlsZWQgKCVkKVxuIiwKLQkJCXJldHZhbCk7Ci0KLQlrZnJlZShidWZmZXIpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qCi0JVHJhbnNtaXQgTGluZTYgY29udHJvbCBwYXJhbWV0ZXIuCi0qLwotaW50IGxpbmU2X3RyYW5zbWl0X3BhcmFtZXRlcihzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IHBhcmFtLCB1OCB2YWx1ZSkKLXsKLQlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKLQlpbnQgcGFydGlhbDsKLQotCWJ1ZmZlciA9IGttYWxsb2MoMywgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWZmZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYnVmZmVyWzBdID0gTElORTZfUEFSQU1fQ0hBTkdFIHwgTElORTZfQ0hBTk5FTF9IT1NUOwotCWJ1ZmZlclsxXSA9IHBhcmFtOwotCWJ1ZmZlclsyXSA9IHZhbHVlOwotCi0JcmV0dmFsID0gdXNiX2ludGVycnVwdF9tc2cobGluZTYtPnVzYmRldiwKLQkJCQkgICB1c2Jfc25kaW50cGlwZShsaW5lNi0+dXNiZGV2LAotCQkJCQkJICBsaW5lNi0+ZXBfY29udHJvbF93cml0ZSksCi0JCQkJICAgYnVmZmVyLCAzLCAmcGFydGlhbCwgTElORTZfVElNRU9VVCAqIEhaKTsKLQotCWlmIChyZXR2YWwpCi0JCWRldl9lcnIobGluZTYtPmlmY2RldiwgInVzYl9pbnRlcnJ1cHRfbXNnIGZhaWxlZCAoJWQpXG4iLAotCQkJcmV0dmFsKTsKLQotCWtmcmVlKGJ1ZmZlcik7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotLyoKLQlSZWFkIGRhdGEgZnJvbSBkZXZpY2UuCi0qLwotaW50IGxpbmU2X3JlYWRfZGF0YShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IGFkZHJlc3MsIHZvaWQgKmRhdGEsCi0JCSAgICBzaXplX3QgZGF0YWxlbikKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gbGluZTYtPnVzYmRldjsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGNoYXIgbGVuOwotCi0JLyogcXVlcnkgdGhlIHNlcmlhbCBudW1iZXI6ICovCi0JcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYmRldiwgMCksIDB4NjcsCi0JCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9PVVQsCi0JCQkgICAgICAoZGF0YWxlbiA8PCA4KSB8IDB4MjEsIGFkZHJlc3MsCi0JCQkgICAgICBOVUxMLCAwLCBMSU5FNl9USU1FT1VUICogSFopOwotCi0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAicmVhZCByZXF1ZXN0IGZhaWxlZCAoZXJyb3IgJWQpXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8qIFdhaXQgZm9yIGRhdGEgbGVuZ3RoLiBXZSdsbCBnZXQgMHhmZiB1bnRpbCBsZW5ndGggYXJyaXZlcy4gKi8KLQlkbyB7Ci0JCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2JkZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2JkZXYsIDApLCAweDY3LAotCQkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfAotCQkJCSAgICAgIFVTQl9ESVJfSU4sCi0JCQkJICAgICAgMHgwMDEyLCAweDAwMDAsICZsZW4sIDEsCi0JCQkJICAgICAgTElORTZfVElNRU9VVCAqIEhaKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWRldl9lcnIobGluZTYtPmlmY2RldiwKLQkJCQkicmVjZWl2ZSBsZW5ndGggZmFpbGVkIChlcnJvciAlZClcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfSB3aGlsZSAobGVuID09IDB4ZmYpOwotCi0JaWYgKGxlbiAhPSBkYXRhbGVuKSB7Ci0JCS8qIHNob3VsZCBiZSBlcXVhbCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyAqLwotCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsCi0JCQkibGVuZ3RoIG1pc21hdGNoIChleHBlY3RlZCAlZCwgZ290ICVkKVxuIiwKLQkJCShpbnQpZGF0YWxlbiwgKGludClsZW4pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiByZWNlaXZlIHRoZSByZXN1bHQ6ICovCi0JcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYmRldiwgMCksIDB4NjcsCi0JCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKLQkJCSAgICAgIDB4MDAxMywgMHgwMDAwLCBkYXRhLCBkYXRhbGVuLAotCQkJICAgICAgTElORTZfVElNRU9VVCAqIEhaKTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIobGluZTYtPmlmY2RldiwgInJlYWQgZmFpbGVkIChlcnJvciAlZClcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0JV3JpdGUgZGF0YSB0byBkZXZpY2UuCi0qLwotaW50IGxpbmU2X3dyaXRlX2RhdGEoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCBhZGRyZXNzLCB2b2lkICpkYXRhLAotCQkgICAgIHNpemVfdCBkYXRhbGVuKQotewotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBsaW5lNi0+dXNiZGV2OwotCWludCByZXQ7Ci0JdW5zaWduZWQgY2hhciBzdGF0dXM7Ci0KLQlyZXQgPSB1c2JfY29udHJvbF9tc2codXNiZGV2LCB1c2Jfc25kY3RybHBpcGUodXNiZGV2LCAwKSwgMHg2NywKLQkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX09VVCwKLQkJCSAgICAgIDB4MDAyMiwgYWRkcmVzcywgZGF0YSwgZGF0YWxlbiwKLQkJCSAgICAgIExJTkU2X1RJTUVPVVQgKiBIWik7Ci0KLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsCi0JCQkid3JpdGUgcmVxdWVzdCBmYWlsZWQgKGVycm9yICVkKVxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlkbyB7Ci0JCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2JkZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2JkZXYsIDApLAotCQkJCSAgICAgIDB4NjcsCi0JCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8Ci0JCQkJICAgICAgVVNCX0RJUl9JTiwKLQkJCQkgICAgICAweDAwMTIsIDB4MDAwMCwKLQkJCQkgICAgICAmc3RhdHVzLCAxLCBMSU5FNl9USU1FT1VUICogSFopOwotCi0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsCi0JCQkJInJlY2VpdmluZyBzdGF0dXMgZmFpbGVkIChlcnJvciAlZClcbiIsIHJldCk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JfSB3aGlsZSAoc3RhdHVzID09IDB4ZmYpOwotCi0JaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCWRldl9lcnIobGluZTYtPmlmY2RldiwgIndyaXRlIGZhaWxlZCAoZXJyb3IgJWQpXG4iLCByZXQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLQlSZWFkIExpbmU2IGRldmljZSBzZXJpYWwgbnVtYmVyLgotCShQT0QsIFRvbmVQb3J0LCBHdWl0YXJQb3J0KQotKi8KLWludCBsaW5lNl9yZWFkX3NlcmlhbF9udW1iZXIoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCAqc2VyaWFsX251bWJlcikKLXsKLQlyZXR1cm4gbGluZTZfcmVhZF9kYXRhKGxpbmU2LCAweDgwZDAsIHNlcmlhbF9udW1iZXIsCi0JCQkgICAgICAgc2l6ZW9mKCpzZXJpYWxfbnVtYmVyKSk7Ci19Ci0KLS8qCi0JTm8gb3BlcmF0aW9uIChpLmUuLCB1bnN1cHBvcnRlZCkuCi0qLwotc3NpemVfdCBsaW5lNl9ub3BfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkgICAgICAgY2hhciAqYnVmKQotewotCXJldHVybiAwOwotfQotCi0vKgotCUdlbmVyaWMgZGVzdHJ1Y3Rvci4KLSovCi1zdGF0aWMgdm9pZCBsaW5lNl9kZXN0cnVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQotewotCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2OwotCi0JaWYgKGludGVyZmFjZSA9PSBOVUxMKQotCQlyZXR1cm47Ci0JbGluZTYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0JaWYgKGxpbmU2ID09IE5VTEwpCi0JCXJldHVybjsKLQotCS8qIGZyZWUgYnVmZmVyIG1lbW9yeSBmaXJzdDogKi8KLQlrZnJlZShsaW5lNi0+YnVmZmVyX21lc3NhZ2UpOwotCWtmcmVlKGxpbmU2LT5idWZmZXJfbGlzdGVuKTsKLQotCS8qIHRoZW4gZnJlZSBVUkJzOiAqLwotCXVzYl9mcmVlX3VyYihsaW5lNi0+dXJiX2xpc3Rlbik7Ci0KLQkvKiBtYWtlIHN1cmUgdGhlIGRldmljZSBpc24ndCBkZXN0cnVjdGVkIHR3aWNlOiAqLwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLQotCS8qIGZyZWUgaW50ZXJmYWNlIGRhdGE6ICovCi0Ja2ZyZWUobGluZTYpOwotfQotCi0vKgotCVByb2JlIFVTQiBkZXZpY2UuCi0qLwotc3RhdGljIGludCBsaW5lNl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAotCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQotewotCWludCBkZXZ0eXBlOwotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7Ci0Jc3RydWN0IHVzYl9saW5lNiAqbGluZTY7Ci0JY29uc3Qgc3RydWN0IGxpbmU2X3Byb3BlcnRpZXMgKnByb3BlcnRpZXM7Ci0JaW50IGludGVyZmFjZV9udW1iZXIsIGFsdGVybmF0ZSA9IDA7Ci0JaW50IHByb2R1Y3Q7Ci0JaW50IHNpemUgPSAwOwotCWludCBlcF9yZWFkID0gMCwgZXBfd3JpdGUgPSAwOwotCWludCByZXQ7Ci0KLQlpZiAoaW50ZXJmYWNlID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCXVzYmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKLQlpZiAodXNiZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogd2UgZG9uJ3QgaGFuZGxlIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zICovCi0JaWYgKHVzYmRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnMgIT0gMSkgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycl9wdXQ7Ci0JfQotCi0JLyogY2hlY2sgdmVuZG9yIGFuZCBwcm9kdWN0IGlkICovCi0JZm9yIChkZXZ0eXBlID0gQVJSQVlfU0laRShsaW5lNl9pZF90YWJsZSkgLSAxOyBkZXZ0eXBlLS07KSB7Ci0JCXUxNiBpZFZlbmRvciA9IGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7Ci0JCXUxNiBpZFByb2R1Y3QgPSBsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKLQotCQlpZiAoaWRWZW5kb3IgPT0gbGluZTZfaWRfdGFibGVbZGV2dHlwZV0uaWRWZW5kb3IgJiYKLQkJICAgIGlkUHJvZHVjdCA9PSBsaW5lNl9pZF90YWJsZVtkZXZ0eXBlXS5pZFByb2R1Y3QpCi0JCQlicmVhazsKLQl9Ci0KLQlpZiAoZGV2dHlwZSA8IDApIHsKLQkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBlcnJfcHV0OwotCX0KLQotCS8qIGluaXRpYWxpemUgZGV2aWNlIGluZm86ICovCi0JcHJvcGVydGllcyA9ICZsaW5lNl9wcm9wZXJ0aWVzX3RhYmxlW2RldnR5cGVdOwotCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxpbmU2ICVzIGZvdW5kXG4iLCBwcm9wZXJ0aWVzLT5uYW1lKTsKLQlwcm9kdWN0ID0gbGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7Ci0KLQkvKiBxdWVyeSBpbnRlcmZhY2UgbnVtYmVyICovCi0JaW50ZXJmYWNlX251bWJlciA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQotCXN3aXRjaCAocHJvZHVjdCkgewotCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUTElWRToKLQljYXNlIExJTkU2X0RFVklEX1BPRFhUTElWRToKLQljYXNlIExJTkU2X0RFVklEX1ZBUklBWDoKLQkJYWx0ZXJuYXRlID0gMTsKLQkJYnJlYWs7Ci0KLQljYXNlIExJTkU2X0RFVklEX1BPQ0tFVFBPRDoKLQkJc3dpdGNoIChpbnRlcmZhY2VfbnVtYmVyKSB7Ci0JCWNhc2UgMDoKLQkJCXJldHVybiAtRU5PREVWOwkvKiB0aGlzIGludGVyZmFjZSBoYXMgbm8gZW5kcG9pbnRzICovCi0JCWNhc2UgMToKLQkJCWFsdGVybmF0ZSA9IDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCU1JU1NJTkdfQ0FTRTsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgTElORTZfREVWSURfUE9ESEQ1MDA6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RYMzoKLQljYXNlIExJTkU2X0RFVklEX1BPRFgzTElWRToKLQkJc3dpdGNoIChpbnRlcmZhY2VfbnVtYmVyKSB7Ci0JCWNhc2UgMDoKLQkJCWFsdGVybmF0ZSA9IDE7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJYWx0ZXJuYXRlID0gMDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJTUlTU0lOR19DQVNFOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFQ6Ci0JY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRQUk86Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RYVDoKLQljYXNlIExJTkU2X0RFVklEX1BPRFhUUFJPOgotCWNhc2UgTElORTZfREVWSURfUE9ESEQzMDA6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RIRDQwMDoKLQkJYWx0ZXJuYXRlID0gNTsKLQkJYnJlYWs7Ci0KLQljYXNlIExJTkU2X0RFVklEX0dVSVRBUlBPUlQ6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RTVFVESU9fR1g6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RTVFVESU9fVVgxOgotCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfR1g6Ci0JY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDE6Ci0JCWFsdGVybmF0ZSA9IDI7CS8qIDEuLjQgc2VlbSB0byBiZSBvayAqLwotCQlicmVhazsKLQotCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfVVgyOgotCWNhc2UgTElORTZfREVWSURfUE9EU1RVRElPX1VYMjoKLQkJc3dpdGNoIChpbnRlcmZhY2VfbnVtYmVyKSB7Ci0JCWNhc2UgMDoKLQkJCS8qIGRlZmF1bHRzIHRvIDQ0LjFrSHosIDE2LWJpdCAqLwotCQkJYWx0ZXJuYXRlID0gMjsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQkvKiBkb24ndCBrbm93IHlldCB3aGF0IHRoaXMgaXMgLi4uCi0JCQkgICBhbHRlcm5hdGUgPSAxOwotCQkJICAgYnJlYWs7Ci0JCQkgKi8KLQkJCXJldHVybiAtRU5PREVWOwotCQlkZWZhdWx0OgotCQkJTUlTU0lOR19DQVNFOwotCQl9Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycl9wdXQ7Ci0JfQotCi0JcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UodXNiZGV2LCBpbnRlcmZhY2VfbnVtYmVyLCBhbHRlcm5hdGUpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAic2V0X2ludGVyZmFjZSBmYWlsZWRcbiIpOwotCQlnb3RvIGVycl9wdXQ7Ci0JfQotCi0JLyogaW5pdGlhbGl6ZSBkZXZpY2UgZGF0YSBiYXNlZCBvbiBwcm9kdWN0IGlkOiAqLwotCXN3aXRjaCAocHJvZHVjdCkgewotCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUOgotCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUTElWRToKLQljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVFBSTzoKLQljYXNlIExJTkU2X0RFVklEX1BPRFhUOgotCWNhc2UgTElORTZfREVWSURfUE9EWFRQUk86Ci0JCXNpemUgPSBzaXplb2Yoc3RydWN0IHVzYl9saW5lNl9wb2QpOwotCQllcF9yZWFkID0gMHg4NDsKLQkJZXBfd3JpdGUgPSAweDAzOwotCQlicmVhazsKLQotCWNhc2UgTElORTZfREVWSURfUE9ESEQzMDA6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RIRDQwMDoKLQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXNiX2xpbmU2X3BvZGhkKTsKLQkJZXBfcmVhZCA9IDB4ODQ7Ci0JCWVwX3dyaXRlID0gMHgwMzsKLQkJYnJlYWs7Ci0KLQljYXNlIExJTkU2X0RFVklEX1BPREhENTAwOgotCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTZfcG9kaGQpOwotCQllcF9yZWFkID0gMHg4MTsKLQkJZXBfd3JpdGUgPSAweDAxOwotCQlicmVhazsKLQotCWNhc2UgTElORTZfREVWSURfUE9DS0VUUE9EOgotCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTZfcG9kKTsKLQkJZXBfcmVhZCA9IDB4ODI7Ci0JCWVwX3dyaXRlID0gMHgwMjsKLQkJYnJlYWs7Ci0KLQljYXNlIExJTkU2X0RFVklEX1BPRFgzOgotCWNhc2UgTElORTZfREVWSURfUE9EWDNMSVZFOgotCQkvKiBjdXJyZW50bHkgdW51c2VkISAqLwotCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTZfcG9kKTsKLQkJZXBfcmVhZCA9IDB4ODE7Ci0JCWVwX3dyaXRlID0gMHgwMTsKLQkJYnJlYWs7Ci0KLQljYXNlIExJTkU2X0RFVklEX1BPRFNUVURJT19HWDoKLQljYXNlIExJTkU2X0RFVklEX1BPRFNUVURJT19VWDE6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RTVFVESU9fVVgyOgotCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfR1g6Ci0JY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDE6Ci0JY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDI6Ci0JY2FzZSBMSU5FNl9ERVZJRF9HVUlUQVJQT1JUOgotCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQpOwotCQkvKiB0aGVzZSBkb24ndCBoYXZlIGEgY29udHJvbCBjaGFubmVsICovCi0JCWJyZWFrOwotCi0JY2FzZSBMSU5FNl9ERVZJRF9QT0RYVExJVkU6Ci0JCXN3aXRjaCAoaW50ZXJmYWNlX251bWJlcikgewotCQljYXNlIFBPRFhUTElWRV9JTlRFUkZBQ0VfUE9EOgotCQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXNiX2xpbmU2X3BvZCk7Ci0JCQllcF9yZWFkID0gMHg4NDsKLQkJCWVwX3dyaXRlID0gMHgwMzsKLQkJCWJyZWFrOwotCi0JCWNhc2UgUE9EWFRMSVZFX0lOVEVSRkFDRV9WQVJJQVg6Ci0JCQlzaXplID0gc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4KTsKLQkJCWVwX3JlYWQgPSAweDg2OwotCQkJZXBfd3JpdGUgPSAweDA1OwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldCA9IC1FTk9ERVY7Ci0JCQlnb3RvIGVycl9wdXQ7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIExJTkU2X0RFVklEX1ZBUklBWDoKLQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCk7Ci0JCWVwX3JlYWQgPSAweDgyOwotCQllcF93cml0ZSA9IDB4MDE7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycl9wdXQ7Ci0JfQotCi0JaWYgKHNpemUgPT0gMCkgewotCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwKLQkJCSJkcml2ZXIgYnVnOiBpbnRlcmZhY2UgZGF0YSBzaXplIG5vdCBzZXRcbiIpOwotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIGVycl9wdXQ7Ci0JfQotCi0JbGluZTYgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChsaW5lNiA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX3B1dDsKLQl9Ci0KLQkvKiBzdG9yZSBiYXNpYyBkYXRhOiAqLwotCWxpbmU2LT5pbnRlcmZhY2VfbnVtYmVyID0gaW50ZXJmYWNlX251bWJlcjsKLQlsaW5lNi0+cHJvcGVydGllcyA9IHByb3BlcnRpZXM7Ci0JbGluZTYtPnVzYmRldiA9IHVzYmRldjsKLQlsaW5lNi0+aWZjZGV2ID0gJmludGVyZmFjZS0+ZGV2OwotCWxpbmU2LT5lcF9jb250cm9sX3JlYWQgPSBlcF9yZWFkOwotCWxpbmU2LT5lcF9jb250cm9sX3dyaXRlID0gZXBfd3JpdGU7Ci0JbGluZTYtPnByb2R1Y3QgPSBwcm9kdWN0OwotCi0JLyogZ2V0IGRhdGEgZnJvbSBlbmRwb2ludCBkZXNjcmlwdG9yIChzZWUgdXNiX21heHBhY2tldCk6ICovCi0JewotCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOwotCQl1bnNpZ25lZCBlcG51bSA9Ci0JCSAgICB1c2JfcGlwZWVuZHBvaW50KHVzYl9yY3ZpbnRwaXBlKHVzYmRldiwgZXBfcmVhZCkpOwotCQllcCA9IHVzYmRldi0+ZXBfaW5bZXBudW1dOwotCi0JCWlmIChlcCAhPSBOVUxMKSB7Ci0JCQlsaW5lNi0+aW50ZXJ2YWwgPSBlcC0+ZGVzYy5iSW50ZXJ2YWw7Ci0JCQlsaW5lNi0+bWF4X3BhY2tldF9zaXplID0KLQkJCSAgICBsZTE2X3RvX2NwdShlcC0+ZGVzYy53TWF4UGFja2V0U2l6ZSk7Ci0JCX0gZWxzZSB7Ci0JCQlsaW5lNi0+aW50ZXJ2YWwgPSBMSU5FNl9GQUxMQkFDS19JTlRFUlZBTDsKLQkJCWxpbmU2LT5tYXhfcGFja2V0X3NpemUgPSBMSU5FNl9GQUxMQkFDS19NQVhQQUNLRVRTSVpFOwotCQkJZGV2X2VycihsaW5lNi0+aWZjZGV2LAotCQkJCSJlbmRwb2ludCBub3QgYXZhaWxhYmxlLCB1c2luZyBmYWxsYmFjayB2YWx1ZXMiKTsKLQkJfQotCX0KLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBsaW5lNik7Ci0KLQlpZiAocHJvcGVydGllcy0+Y2FwYWJpbGl0aWVzICYgTElORTZfQklUX0NPTlRST0wpIHsKLQkJLyogaW5pdGlhbGl6ZSBVU0IgYnVmZmVyczogKi8KLQkJbGluZTYtPmJ1ZmZlcl9saXN0ZW4gPQotCQkgICAga21hbGxvYyhMSU5FNl9CVUZTSVpFX0xJU1RFTiwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChsaW5lNi0+YnVmZmVyX2xpc3RlbiA9PSBOVUxMKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBlcnJfZGVzdHJ1Y3Q7Ci0JCX0KLQotCQlsaW5lNi0+YnVmZmVyX21lc3NhZ2UgPQotCQkgICAga21hbGxvYyhMSU5FNl9NRVNTQUdFX01BWExFTiwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChsaW5lNi0+YnVmZmVyX21lc3NhZ2UgPT0gTlVMTCkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyX2Rlc3RydWN0OwotCQl9Ci0KLQkJbGluZTYtPnVyYl9saXN0ZW4gPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCi0JCWlmIChsaW5lNi0+dXJiX2xpc3RlbiA9PSBOVUxMKSB7Ci0JCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOwotCQkJbGluZTZfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIGVycl9kZXN0cnVjdDsKLQkJfQotCi0JCXJldCA9IGxpbmU2X3N0YXJ0X2xpc3RlbihsaW5lNik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWRcbiIsCi0JCQkJX19mdW5jX18pOwotCQkJZ290byBlcnJfZGVzdHJ1Y3Q7Ci0JCX0KLQl9Ci0KLQkvKiBpbml0aWFsaXplIGRldmljZSBkYXRhIGJhc2VkIG9uIHByb2R1Y3QgaWQ6ICovCi0Jc3dpdGNoIChwcm9kdWN0KSB7Ci0JY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFQ6Ci0JY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRMSVZFOgotCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUUFJPOgotCWNhc2UgTElORTZfREVWSURfUE9DS0VUUE9EOgotCWNhc2UgTElORTZfREVWSURfUE9EWDM6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RYM0xJVkU6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RYVDoKLQljYXNlIExJTkU2X0RFVklEX1BPRFhUUFJPOgotCQlyZXQgPSBsaW5lNl9wb2RfaW5pdChpbnRlcmZhY2UsIChzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqKWxpbmU2KTsKLQkJYnJlYWs7Ci0KLQljYXNlIExJTkU2X0RFVklEX1BPREhEMzAwOgotCWNhc2UgTElORTZfREVWSURfUE9ESEQ0MDA6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RIRDUwMDoKLQkJcmV0ID0gbGluZTZfcG9kaGRfaW5pdChpbnRlcmZhY2UsCi0JCQkJICAgICAgIChzdHJ1Y3QgdXNiX2xpbmU2X3BvZGhkICopbGluZTYpOwotCQlicmVhazsKLQotCWNhc2UgTElORTZfREVWSURfUE9EWFRMSVZFOgotCQlzd2l0Y2ggKGludGVyZmFjZV9udW1iZXIpIHsKLQkJY2FzZSBQT0RYVExJVkVfSU5URVJGQUNFX1BPRDoKLQkJCXJldCA9Ci0JCQkgICAgbGluZTZfcG9kX2luaXQoaW50ZXJmYWNlLAotCQkJCQkgICAoc3RydWN0IHVzYl9saW5lNl9wb2QgKilsaW5lNik7Ci0JCQlicmVhazsKLQotCQljYXNlIFBPRFhUTElWRV9JTlRFUkZBQ0VfVkFSSUFYOgotCQkJcmV0ID0KLQkJCSAgICBsaW5lNl92YXJpYXhfaW5pdChpbnRlcmZhY2UsCi0JCQkJCSAgICAgIChzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqKWxpbmU2KTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwKLQkJCQkiUE9EeHQgTGl2ZSBpbnRlcmZhY2UgJWQgbm90IHN1cHBvcnRlZFxuIiwKLQkJCQlpbnRlcmZhY2VfbnVtYmVyKTsKLQkJCXJldCA9IC1FTk9ERVY7Ci0JCX0KLQotCQlicmVhazsKLQotCWNhc2UgTElORTZfREVWSURfVkFSSUFYOgotCQlyZXQgPQotCQkgICAgbGluZTZfdmFyaWF4X2luaXQoaW50ZXJmYWNlLAotCQkJCSAgICAgIChzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqKWxpbmU2KTsKLQkJYnJlYWs7Ci0KLQljYXNlIExJTkU2X0RFVklEX1BPRFNUVURJT19HWDoKLQljYXNlIExJTkU2X0RFVklEX1BPRFNUVURJT19VWDE6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RTVFVESU9fVVgyOgotCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfR1g6Ci0JY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDE6Ci0JY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDI6Ci0JY2FzZSBMSU5FNl9ERVZJRF9HVUlUQVJQT1JUOgotCQlyZXQgPQotCQkgICAgbGluZTZfdG9uZXBvcnRfaW5pdChpbnRlcmZhY2UsCi0JCQkJCShzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICopbGluZTYpOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCU1JU1NJTkdfQ0FTRTsKLQkJcmV0ID0gLUVOT0RFVjsKLQl9Ci0KLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfZGVzdHJ1Y3Q7Ci0KLQlyZXQgPSBzeXNmc19jcmVhdGVfbGluaygmaW50ZXJmYWNlLT5kZXYua29iaiwgJnVzYmRldi0+ZGV2LmtvYmosCi0JCQkJInVzYl9kZXZpY2UiKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfZGVzdHJ1Y3Q7Ci0KLQkvKiBjcmVhdGlvbiBvZiBhZGRpdGlvbmFsIHNwZWNpYWwgZmlsZXMgc2hvdWxkIGdvIGhlcmUgKi8KLQotCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxpbmU2ICVzIG5vdyBhdHRhY2hlZFxuIiwKLQkJIGxpbmU2LT5wcm9wZXJ0aWVzLT5uYW1lKTsKLQotCXN3aXRjaCAocHJvZHVjdCkgewotCWNhc2UgTElORTZfREVWSURfUE9EWDM6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RYM0xJVkU6Ci0JCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwKLQkJCSAiTk9URTogdGhlIExpbmU2ICVzIGlzIGRldGVjdGVkLCBidXQgbm90IHlldCBzdXBwb3J0ZWRcbiIsCi0JCQkgbGluZTYtPnByb3BlcnRpZXMtPm5hbWUpOwotCX0KLQotCS8qIGluY3JlbWVudCByZWZlcmVuY2UgY291bnRlcnM6ICovCi0JdXNiX2dldF9pbnRmKGludGVyZmFjZSk7Ci0JdXNiX2dldF9kZXYodXNiZGV2KTsKLQotCXJldHVybiAwOwotCi1lcnJfZGVzdHJ1Y3Q6Ci0JbGluZTZfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKLWVycl9wdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLQlMaW5lNiBkZXZpY2UgZGlzY29ubmVjdGVkLgotKi8KLXN0YXRpYyB2b2lkIGxpbmU2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKLXsKLQlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNjsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OwotCWludCBpbnRlcmZhY2VfbnVtYmVyOwotCi0JaWYgKGludGVyZmFjZSA9PSBOVUxMKQotCQlyZXR1cm47Ci0JdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwotCWlmICh1c2JkZXYgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JLyogcmVtb3ZhbCBvZiBhZGRpdGlvbmFsIHNwZWNpYWwgZmlsZXMgc2hvdWxkIGdvIGhlcmUgKi8KLQotCXN5c2ZzX3JlbW92ZV9saW5rKCZpbnRlcmZhY2UtPmRldi5rb2JqLCAidXNiX2RldmljZSIpOwotCi0JaW50ZXJmYWNlX251bWJlciA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKLQlsaW5lNiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLQotCWlmIChsaW5lNiAhPSBOVUxMKSB7Ci0JCWlmIChsaW5lNi0+dXJiX2xpc3RlbiAhPSBOVUxMKQotCQkJbGluZTZfc3RvcF9saXN0ZW4obGluZTYpOwotCi0JCWlmICh1c2JkZXYgIT0gbGluZTYtPnVzYmRldikKLQkJCWRldl9lcnIobGluZTYtPmlmY2RldiwKLQkJCQkiZHJpdmVyIGJ1ZzogaW5jb25zaXN0ZW50IHVzYiBkZXZpY2VcbiIpOwotCi0JCXN3aXRjaCAobGUxNl90b19jcHUobGluZTYtPnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSB7Ci0JCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUOgotCQljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVExJVkU6Ci0JCWNhc2UgTElORTZfREVWSURfQkFTU1BPRFhUUFJPOgotCQljYXNlIExJTkU2X0RFVklEX1BPQ0tFVFBPRDoKLQkJY2FzZSBMSU5FNl9ERVZJRF9QT0RYMzoKLQkJY2FzZSBMSU5FNl9ERVZJRF9QT0RYM0xJVkU6Ci0JCWNhc2UgTElORTZfREVWSURfUE9EWFQ6Ci0JCWNhc2UgTElORTZfREVWSURfUE9EWFRQUk86Ci0JCQlsaW5lNl9wb2RfZGlzY29ubmVjdChpbnRlcmZhY2UpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBMSU5FNl9ERVZJRF9QT0RIRDMwMDoKLQkJY2FzZSBMSU5FNl9ERVZJRF9QT0RIRDQwMDoKLQkJY2FzZSBMSU5FNl9ERVZJRF9QT0RIRDUwMDoKLQkJCWxpbmU2X3BvZGhkX2Rpc2Nvbm5lY3QoaW50ZXJmYWNlKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgTElORTZfREVWSURfUE9EWFRMSVZFOgotCQkJc3dpdGNoIChpbnRlcmZhY2VfbnVtYmVyKSB7Ci0JCQljYXNlIFBPRFhUTElWRV9JTlRFUkZBQ0VfUE9EOgotCQkJCWxpbmU2X3BvZF9kaXNjb25uZWN0KGludGVyZmFjZSk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgUE9EWFRMSVZFX0lOVEVSRkFDRV9WQVJJQVg6Ci0JCQkJbGluZTZfdmFyaWF4X2Rpc2Nvbm5lY3QoaW50ZXJmYWNlKTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBMSU5FNl9ERVZJRF9WQVJJQVg6Ci0JCQlsaW5lNl92YXJpYXhfZGlzY29ubmVjdChpbnRlcmZhY2UpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBMSU5FNl9ERVZJRF9QT0RTVFVESU9fR1g6Ci0JCWNhc2UgTElORTZfREVWSURfUE9EU1RVRElPX1VYMToKLQkJY2FzZSBMSU5FNl9ERVZJRF9QT0RTVFVESU9fVVgyOgotCQljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX0dYOgotCQljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMToKLQkJY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDI6Ci0JCWNhc2UgTElORTZfREVWSURfR1VJVEFSUE9SVDoKLQkJCWxpbmU2X3RvbmVwb3J0X2Rpc2Nvbm5lY3QoaW50ZXJmYWNlKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlNSVNTSU5HX0NBU0U7Ci0JCX0KLQotCQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJMaW5lNiAlcyBub3cgZGlzY29ubmVjdGVkXG4iLAotCQkJIGxpbmU2LT5wcm9wZXJ0aWVzLT5uYW1lKTsKLQl9Ci0KLQlsaW5lNl9kZXN0cnVjdChpbnRlcmZhY2UpOwotCi0JLyogZGVjcmVtZW50IHJlZmVyZW5jZSBjb3VudGVyczogKi8KLQl1c2JfcHV0X2ludGYoaW50ZXJmYWNlKTsKLQl1c2JfcHV0X2Rldih1c2JkZXYpOwotfQotCi0jaWZkZWYgQ09ORklHX1BNCi0KLS8qCi0JU3VzcGVuZCBMaW5lNiBkZXZpY2UuCi0qLwotc3RhdGljIGludCBsaW5lNl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQotewotCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IGxpbmU2LT5saW5lNnBjbTsKLQotCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUobGluZTYtPmNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7Ci0KLQlpZiAobGluZTYtPnByb3BlcnRpZXMtPmNhcGFiaWxpdGllcyAmIExJTkU2X0JJVF9DT05UUk9MKQotCQlsaW5lNl9zdG9wX2xpc3RlbihsaW5lNik7Ci0KLQlpZiAobGluZTZwY20gIT0gTlVMTCkgewotCQlzbmRfcGNtX3N1c3BlbmRfYWxsKGxpbmU2cGNtLT5wY20pOwotCQlsaW5lNl9wY21fZGlzY29ubmVjdChsaW5lNnBjbSk7Ci0JCWxpbmU2cGNtLT5mbGFncyA9IDA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0JUmVzdW1lIExpbmU2IGRldmljZS4KLSovCi1zdGF0aWMgaW50IGxpbmU2X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQotewotCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCi0JaWYgKGxpbmU2LT5wcm9wZXJ0aWVzLT5jYXBhYmlsaXRpZXMgJiBMSU5FNl9CSVRfQ09OVFJPTCkKLQkJbGluZTZfc3RhcnRfbGlzdGVuKGxpbmU2KTsKLQotCXNuZF9wb3dlcl9jaGFuZ2Vfc3RhdGUobGluZTYtPmNhcmQsIFNORFJWX0NUTF9QT1dFUl9EMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0JUmVzdW1lIExpbmU2IGRldmljZSBhZnRlciByZXNldC4KLSovCi1zdGF0aWMgaW50IGxpbmU2X3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQotewotCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCi0Jc3dpdGNoIChsZTE2X3RvX2NwdShsaW5lNi0+dXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpIHsKLQljYXNlIExJTkU2X0RFVklEX1BPRFNUVURJT19HWDoKLQljYXNlIExJTkU2X0RFVklEX1BPRFNUVURJT19VWDE6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RTVFVESU9fVVgyOgotCWNhc2UgTElORTZfREVWSURfVE9ORVBPUlRfR1g6Ci0JY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDE6Ci0JY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDI6Ci0JY2FzZSBMSU5FNl9ERVZJRF9HVUlUQVJQT1JUOgotCQlsaW5lNl90b25lcG9ydF9yZXNldF9yZXN1bWUoKHN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKilsaW5lNik7Ci0JfQotCi0JcmV0dXJuIGxpbmU2X3Jlc3VtZShpbnRlcmZhY2UpOwotfQotCi0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBsaW5lNl9kcml2ZXIgPSB7Ci0JLm5hbWUgPSBEUklWRVJfTkFNRSwKLQkucHJvYmUgPSBsaW5lNl9wcm9iZSwKLQkuZGlzY29ubmVjdCA9IGxpbmU2X2Rpc2Nvbm5lY3QsCi0jaWZkZWYgQ09ORklHX1BNCi0JLnN1c3BlbmQgPSBsaW5lNl9zdXNwZW5kLAotCS5yZXN1bWUgPSBsaW5lNl9yZXN1bWUsCi0JLnJlc2V0X3Jlc3VtZSA9IGxpbmU2X3Jlc2V0X3Jlc3VtZSwKLSNlbmRpZgotCS5pZF90YWJsZSA9IGxpbmU2X2lkX3RhYmxlLAotfTsKLQotbW9kdWxlX3VzYl9kcml2ZXIobGluZTZfZHJpdmVyKTsKLQotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2ZTNmYzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjE1ICswLDAgQEAKLS8qCi0gKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC45LjFiZXRhCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KLSAqCi0gKi8KLQotI2lmbmRlZiBEUklWRVJfSAotI2RlZmluZSBEUklWRVJfSAotCi0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0KLSNpbmNsdWRlICJtaWRpLmgiCi0KLSNkZWZpbmUgRFJJVkVSX05BTUUgImxpbmU2dXNiIgotCi0jZGVmaW5lIExJTkU2X1RJTUVPVVQgMQotI2RlZmluZSBMSU5FNl9CVUZTSVpFX0xJU1RFTiAzMgotI2RlZmluZSBMSU5FNl9NRVNTQUdFX01BWExFTiAyNTYKLQotLyoKLQlMaW5lNiBNSURJIGNvbnRyb2wgY29tbWFuZHMKLSovCi0jZGVmaW5lIExJTkU2X1BBUkFNX0NIQU5HRSAgIDB4YjAKLSNkZWZpbmUgTElORTZfUFJPR1JBTV9DSEFOR0UgMHhjMAotI2RlZmluZSBMSU5FNl9TWVNFWF9CRUdJTiAgICAweGYwCi0jZGVmaW5lIExJTkU2X1NZU0VYX0VORCAgICAgIDB4ZjcKLSNkZWZpbmUgTElORTZfUkVTRVQgICAgICAgICAgMHhmZgotCi0vKgotCU1JREkgY2hhbm5lbCBmb3IgbWVzc2FnZXMgaW5pdGlhdGVkIGJ5IHRoZSBob3N0Ci0JKGFuZCBldmVudHVhbGx5IGVjaG9lZCBiYWNrIGJ5IHRoZSBkZXZpY2UpCi0qLwotI2RlZmluZSBMSU5FNl9DSEFOTkVMX0hPU1QgICAweDAwCi0KLS8qCi0JTUlESSBjaGFubmVsIGZvciBtZXNzYWdlcyBpbml0aWF0ZWQgYnkgdGhlIGRldmljZQotKi8KLSNkZWZpbmUgTElORTZfQ0hBTk5FTF9ERVZJQ0UgMHgwMgotCi0jZGVmaW5lIExJTkU2X0NIQU5ORUxfVU5LTk9XTiA1CS8qIGRvbid0IGtub3cgeWV0IHdoYXQgdGhpcyBpcyBnb29kIGZvciAqLwotCi0jZGVmaW5lIExJTkU2X0NIQU5ORUxfTUFTSyAweDBmCi0KLSNkZWZpbmUgTUlTU0lOR19DQVNFCVwKLQlwcl9lcnIoImxpbmU2dXNiIGRyaXZlciBidWc6IG1pc3NpbmcgY2FzZSBpbiAlczolZFxuIiwgXAotCQlfX0ZJTEVfXywgX19MSU5FX18pCi0KLSNkZWZpbmUgQ0hFQ0tfUkVUVVJOKHgpCQlcCi1kbyB7CQkJCVwKLQllcnIgPSB4OwkJXAotCWlmIChlcnIgPCAwKQkJXAotCQlyZXR1cm4gZXJyOwlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIENIRUNLX1NUQVJUVVBfUFJPR1JFU1MoeCwgbikJXAotZG8gewkJCQkJXAotCWlmICgoeCkgPj0gKG4pKQkJCVwKLQkJcmV0dXJuOwkJCVwKLQl4ID0gKG4pOwkJCVwKLX0gd2hpbGUgKDApCi0KLWV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGxpbmU2X21pZGlfaWRbM107Ci0KLXN0YXRpYyBjb25zdCBpbnQgU1lTRVhfREFUQV9PRlMgPSBzaXplb2YobGluZTZfbWlkaV9pZCkgKyAzOwotc3RhdGljIGNvbnN0IGludCBTWVNFWF9FWFRSQV9TSVpFID0gc2l6ZW9mKGxpbmU2X21pZGlfaWQpICsgNDsKLQotLyoqCi0JIENvbW1vbiBwcm9wZXJ0aWVzIG9mIExpbmU2IGRldmljZXMuCi0qLwotc3RydWN0IGxpbmU2X3Byb3BlcnRpZXMgewotCS8qKgotCQkgQml0IGlkZW50aWZ5aW5nIHRoaXMgZGV2aWNlIGluIHRoZSBsaW5lNnVzYiBkcml2ZXIuCi0JKi8KLQlpbnQgZGV2aWNlX2JpdDsKLQotCS8qKgotCQkgQ2FyZCBpZCBzdHJpbmcgKG1heGltdW0gMTYgY2hhcmFjdGVycykuCi0JCSBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZHJlc3MgdGhlIGRldmljZSBpbiBBTFNBIHByb2dyYW1zIGFzCi0JCSAiZGVmYXVsdDpDQVJEPTxpZD4iCi0JKi8KLQljb25zdCBjaGFyICppZDsKLQotCS8qKgotCQkgQ2FyZCBzaG9ydCBuYW1lIChtYXhpbXVtIDMyIGNoYXJhY3RlcnMpLgotCSovCi0JY29uc3QgY2hhciAqbmFtZTsKLQotCS8qKgotCQkgQml0IHZlY3RvciBkZWZpbmluZyB0aGlzIGRldmljZSdzIGNhcGFiaWxpdGllcyBpbiB0aGUKLQkJIGxpbmU2dXNiIGRyaXZlci4KLQkqLwotCWludCBjYXBhYmlsaXRpZXM7Ci19OwotCi0vKioKLQkgQ29tbW9uIGRhdGEgc2hhcmVkIGJ5IGFsbCBMaW5lNiBkZXZpY2VzLgotCSBDb3JyZXNwb25kcyB0byBhIHBhaXIgb2YgVVNCIGVuZHBvaW50cy4KLSovCi1zdHJ1Y3QgdXNiX2xpbmU2IHsKLQkvKioKLQkJIFVTQiBkZXZpY2UuCi0JKi8KLQlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2OwotCi0JLyoqCi0JCSBQcm9kdWN0IGlkLgotCSovCi0JaW50IHByb2R1Y3Q7Ci0KLQkvKioKLQkJIFByb3BlcnRpZXMuCi0JKi8KLQljb25zdCBzdHJ1Y3QgbGluZTZfcHJvcGVydGllcyAqcHJvcGVydGllczsKLQotCS8qKgotCQkgSW50ZXJmYWNlIG51bWJlci4KLQkqLwotCWludCBpbnRlcmZhY2VfbnVtYmVyOwotCi0JLyoqCi0JCSBJbnRlcnZhbCAobXMpLgotCSovCi0JaW50IGludGVydmFsOwotCi0JLyoqCi0JCSBNYXhpbXVtIHNpemUgb2YgVVNCIHBhY2tldC4KLQkqLwotCWludCBtYXhfcGFja2V0X3NpemU7Ci0KLQkvKioKLQkJIERldmljZSByZXByZXNlbnRpbmcgdGhlIFVTQiBpbnRlcmZhY2UuCi0JKi8KLQlzdHJ1Y3QgZGV2aWNlICppZmNkZXY7Ci0KLQkvKioKLQkJIExpbmU2IHNvdW5kIGNhcmQgZGF0YSBzdHJ1Y3R1cmUuCi0JCSBFYWNoIGRldmljZSBoYXMgYXQgbGVhc3QgTUlESSBvciBQQ00uCi0JKi8KLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0KLQkvKioKLQkJIExpbmU2IFBDTSBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUuCi0JKi8KLQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY207Ci0KLQkvKioKLQkJIExpbmU2IE1JREkgZGV2aWNlIGRhdGEgc3RydWN0dXJlLgotCSovCi0Jc3RydWN0IHNuZF9saW5lNl9taWRpICpsaW5lNm1pZGk7Ci0KLQkvKioKLQkJIFVTQiBlbmRwb2ludCBmb3IgbGlzdGVuaW5nIHRvIGNvbnRyb2wgY29tbWFuZHMuCi0JKi8KLQlpbnQgZXBfY29udHJvbF9yZWFkOwotCi0JLyoqCi0JCSBVU0IgZW5kcG9pbnQgZm9yIHdyaXRpbmcgY29udHJvbCBjb21tYW5kcy4KLQkqLwotCWludCBlcF9jb250cm9sX3dyaXRlOwotCi0JLyoqCi0JCSBVUkIgZm9yIGxpc3RlbmluZyB0byBQT0R4dCBQcm8gY29udHJvbCBlbmRwb2ludC4KLQkqLwotCXN0cnVjdCB1cmIgKnVyYl9saXN0ZW47Ci0KLQkvKioKLQkJIEJ1ZmZlciBmb3IgbGlzdGVuaW5nIHRvIFBPRHh0IFBybyBjb250cm9sIGVuZHBvaW50LgotCSovCi0JdW5zaWduZWQgY2hhciAqYnVmZmVyX2xpc3RlbjsKLQotCS8qKgotCQkgQnVmZmVyIGZvciBtZXNzYWdlIHRvIGJlIHByb2Nlc3NlZC4KLQkqLwotCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcl9tZXNzYWdlOwotCi0JLyoqCi0JCSBMZW5ndGggb2YgbWVzc2FnZSB0byBiZSBwcm9jZXNzZWQuCi0JKi8KLQlpbnQgbWVzc2FnZV9sZW5ndGg7Ci19OwotCi1leHRlcm4gY2hhciAqbGluZTZfYWxsb2Nfc3lzZXhfYnVmZmVyKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgY29kZTEsCi0JCQkJICAgICAgaW50IGNvZGUyLCBpbnQgc2l6ZSk7Ci1leHRlcm4gc3NpemVfdCBsaW5lNl9ub3BfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKTsKLWV4dGVybiBpbnQgbGluZTZfcmVhZF9kYXRhKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgYWRkcmVzcywgdm9pZCAqZGF0YSwKLQkJCSAgIHNpemVfdCBkYXRhbGVuKTsKLWV4dGVybiBpbnQgbGluZTZfcmVhZF9zZXJpYWxfbnVtYmVyKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LAotCQkJCSAgICBpbnQgKnNlcmlhbF9udW1iZXIpOwotZXh0ZXJuIGludCBsaW5lNl9zZW5kX3Byb2dyYW0oc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIHU4IHZhbHVlKTsKLWV4dGVybiBpbnQgbGluZTZfc2VuZF9yYXdfbWVzc2FnZShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgY29uc3QgY2hhciAqYnVmZmVyLAotCQkJCSAgaW50IHNpemUpOwotZXh0ZXJuIGludCBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlX2FzeW5jKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LAotCQkJCQljb25zdCBjaGFyICpidWZmZXIsIGludCBzaXplKTsKLWV4dGVybiBpbnQgbGluZTZfc2VuZF9zeXNleF9tZXNzYWdlKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LAotCQkJCSAgICBjb25zdCBjaGFyICpidWZmZXIsIGludCBzaXplKTsKLWV4dGVybiBzc2l6ZV90IGxpbmU2X3NldF9yYXcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwotZXh0ZXJuIHZvaWQgbGluZTZfc3RhcnRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBpbnQgbXNlY3MsCi0JCQkgICAgICB2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKTsKLWV4dGVybiBpbnQgbGluZTZfdHJhbnNtaXRfcGFyYW1ldGVyKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgcGFyYW0sCi0JCQkJICAgIHU4IHZhbHVlKTsKLWV4dGVybiBpbnQgbGluZTZfdmVyc2lvbl9yZXF1ZXN0X2FzeW5jKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KTsKLWV4dGVybiBpbnQgbGluZTZfd3JpdGVfZGF0YShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IGFkZHJlc3MsIHZvaWQgKmRhdGEsCi0JCQkgICAgc2l6ZV90IGRhdGFsZW4pOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OGY5MDNmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOS4xYmV0YQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCi0gKgotICovCi0KLSNpZm5kZWYgTUlESV9ICi0jZGVmaW5lIE1JRElfSAotCi0jaW5jbHVkZSA8c291bmQvcmF3bWlkaS5oPgotCi0jaW5jbHVkZSAibWlkaWJ1Zi5oIgotCi0jZGVmaW5lIE1JRElfQlVGRkVSX1NJWkUgMTAyNAotCi1zdHJ1Y3Qgc25kX2xpbmU2X21pZGkgewotCS8qKgotCQkgUG9pbnRlciBiYWNrIHRvIHRoZSBMaW5lNiBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUuCi0JKi8KLQlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNjsKLQotCS8qKgotCQkgTUlESSBzdWJzdHJlYW0gZm9yIHJlY2VpdmluZyAob3IgTlVMTCBpZiBub3QgYWN0aXZlKS4KLQkqLwotCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbV9yZWNlaXZlOwotCi0JLyoqCi0JCSBNSURJIHN1YnN0cmVhbSBmb3IgdHJhbnNtaXR0aW5nIChvciBOVUxMIGlmIG5vdCBhY3RpdmUpLgotCSovCi0Jc3RydWN0IHNuZF9yYXdtaWRpX3N1YnN0cmVhbSAqc3Vic3RyZWFtX3RyYW5zbWl0OwotCi0JLyoqCi0JCSBOdW1iZXIgb2YgY3VycmVudGx5IGFjdGl2ZSBNSURJIHNlbmQgVVJCcy4KLQkqLwotCWludCBudW1fYWN0aXZlX3NlbmRfdXJiczsKLQotCS8qKgotCQkgU3BpbiBsb2NrIHRvIHByb3RlY3QgdXBkYXRlcyBvZiBzZW5kX3VyYi4KLQkqLwotCXNwaW5sb2NrX3Qgc2VuZF91cmJfbG9jazsKLQotCS8qKgotCQkgU3BpbiBsb2NrIHRvIHByb3RlY3QgTUlESSBidWZmZXIgaGFuZGxpbmcuCi0JKi8KLQlzcGlubG9ja190IG1pZGlfdHJhbnNtaXRfbG9jazsKLQotCS8qKgotCQkgV2FpdCBxdWV1ZSBmb3IgTUlESSB0cmFuc21pc3Npb24uCi0JKi8KLQl3YWl0X3F1ZXVlX2hlYWRfdCBzZW5kX3dhaXQ7Ci0KLQkvKioKLQkJIEJ1ZmZlciBmb3IgaW5jb21pbmcgTUlESSBzdHJlYW0uCi0JKi8KLQlzdHJ1Y3QgbWlkaV9idWZmZXIgbWlkaWJ1Zl9pbjsKLQotCS8qKgotCQkgQnVmZmVyIGZvciBvdXRnb2luZyBNSURJIHN0cmVhbS4KLQkqLwotCXN0cnVjdCBtaWRpX2J1ZmZlciBtaWRpYnVmX291dDsKLX07Ci0KLWV4dGVybiBpbnQgbGluZTZfaW5pdF9taWRpKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KTsKLWV4dGVybiB2b2lkIGxpbmU2X21pZGlfcmVjZWl2ZShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgdW5zaWduZWQgY2hhciAqZGF0YSwKLQkJCSAgICAgICBpbnQgbGVuZ3RoKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGNtLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGNtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzMTM2YjEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BjbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTc2ICswLDAgQEAKLS8qCi0gKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC45LjFiZXRhCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgotI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KLQotI2luY2x1ZGUgImF1ZGlvLmgiCi0jaW5jbHVkZSAiY2FwdHVyZS5oIgotI2luY2x1ZGUgImRyaXZlci5oIgotI2luY2x1ZGUgInBsYXliYWNrLmgiCi0jaW5jbHVkZSAicG9kLmgiCi0KLSNpZmRlZiBDT05GSUdfTElORTZfVVNCX0lNUFVMU0VfUkVTUE9OU0UKLQotc3RhdGljIHN0cnVjdCBzbmRfbGluZTZfcGNtICpkZXYycGNtKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IGxpbmU2LT5saW5lNnBjbTsKLQlyZXR1cm4gbGluZTZwY207Ci19Ci0KLS8qCi0JInJlYWQiIHJlcXVlc3Qgb24gImltcHVsc2Vfdm9sdW1lIiBzcGVjaWFsIGZpbGUuCi0qLwotc3RhdGljIHNzaXplX3QgaW1wdWxzZV92b2x1bWVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGV2MnBjbShkZXYpLT5pbXB1bHNlX3ZvbHVtZSk7Ci19Ci0KLS8qCi0JIndyaXRlIiByZXF1ZXN0IG9uICJpbXB1bHNlX3ZvbHVtZSIgc3BlY2lhbCBmaWxlLgotKi8KLXN0YXRpYyBzc2l6ZV90IGltcHVsc2Vfdm9sdW1lX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IGRldjJwY20oZGV2KTsKLQlpbnQgdmFsdWU7Ci0JaW50IHJldDsKLQotCXJldCA9IGtzdHJ0b2ludChidWYsIDEwLCAmdmFsdWUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JbGluZTZwY20tPmltcHVsc2Vfdm9sdW1lID0gdmFsdWU7Ci0KLQlpZiAodmFsdWUgPiAwKQotCQlsaW5lNl9wY21fYWNxdWlyZShsaW5lNnBjbSwgTElORTZfQklUU19QQ01fSU1QVUxTRSk7Ci0JZWxzZQotCQlsaW5lNl9wY21fcmVsZWFzZShsaW5lNnBjbSwgTElORTZfQklUU19QQ01fSU1QVUxTRSk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci1zdGF0aWMgREVWSUNFX0FUVFJfUlcoaW1wdWxzZV92b2x1bWUpOwotCi0vKgotCSJyZWFkIiByZXF1ZXN0IG9uICJpbXB1bHNlX3BlcmlvZCIgc3BlY2lhbCBmaWxlLgotKi8KLXN0YXRpYyBzc2l6ZV90IGltcHVsc2VfcGVyaW9kX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRldjJwY20oZGV2KS0+aW1wdWxzZV9wZXJpb2QpOwotfQotCi0vKgotCSJ3cml0ZSIgcmVxdWVzdCBvbiAiaW1wdWxzZV9wZXJpb2QiIHNwZWNpYWwgZmlsZS4KLSovCi1zdGF0aWMgc3NpemVfdCBpbXB1bHNlX3BlcmlvZF9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgdmFsdWU7Ci0JaW50IHJldDsKLQotCXJldCA9IGtzdHJ0b2ludChidWYsIDEwLCAmdmFsdWUpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JZGV2MnBjbShkZXYpLT5pbXB1bHNlX3BlcmlvZCA9IHZhbHVlOwotCXJldHVybiBjb3VudDsKLX0KLXN0YXRpYyBERVZJQ0VfQVRUUl9SVyhpbXB1bHNlX3BlcmlvZCk7Ci0KLSNlbmRpZgotCi1zdGF0aWMgYm9vbCB0ZXN0X2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MwLCB1bnNpZ25lZCBsb25nIGZsYWdzMSwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbWFzaykKLXsKLQlyZXR1cm4gKChmbGFnczAgJiBtYXNrKSA9PSAwKSAmJiAoKGZsYWdzMSAmIG1hc2spICE9IDApOwotfQotCi1pbnQgbGluZTZfcGNtX2FjcXVpcmUoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtLCBpbnQgY2hhbm5lbHMpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnc19vbGQsIGZsYWdzX25ldywgZmxhZ3NfZmluYWw7Ci0JaW50IGVycjsKLQotCWRvIHsKLQkJZmxhZ3Nfb2xkID0gQUNDRVNTX09OQ0UobGluZTZwY20tPmZsYWdzKTsKLQkJZmxhZ3NfbmV3ID0gZmxhZ3Nfb2xkIHwgY2hhbm5lbHM7Ci0JfSB3aGlsZSAoY21weGNoZygmbGluZTZwY20tPmZsYWdzLCBmbGFnc19vbGQsIGZsYWdzX25ldykgIT0gZmxhZ3Nfb2xkKTsKLQotCWZsYWdzX2ZpbmFsID0gZmxhZ3Nfb2xkOwotCi0JbGluZTZwY20tPnByZXZfZmJ1ZiA9IE5VTEw7Ci0KLQlpZiAodGVzdF9mbGFncyhmbGFnc19vbGQsIGZsYWdzX25ldywgTElORTZfQklUU19DQVBUVVJFX0JVRkZFUikpIHsKLQkJLyogSW52b2tlZCBtdWx0aXBsZSB0aW1lcyBpbiBhIHJvdyBzbyBhbGxvY2F0ZSBvbmNlIG9ubHkgKi8KLQkJaWYgKCFsaW5lNnBjbS0+YnVmZmVyX2luKSB7Ci0JCQlsaW5lNnBjbS0+YnVmZmVyX2luID0KLQkJCQlrbWFsbG9jKExJTkU2X0lTT19CVUZGRVJTICogTElORTZfSVNPX1BBQ0tFVFMgKgotCQkJCQlsaW5lNnBjbS0+bWF4X3BhY2tldF9zaXplLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghbGluZTZwY20tPmJ1ZmZlcl9pbikgewotCQkJCWVyciA9IC1FTk9NRU07Ci0JCQkJZ290byBwY21fYWNxdWlyZV9lcnJvcjsKLQkJCX0KLQotCQkJZmxhZ3NfZmluYWwgfD0gY2hhbm5lbHMgJiBMSU5FNl9CSVRTX0NBUFRVUkVfQlVGRkVSOwotCQl9Ci0JfQotCi0JaWYgKHRlc3RfZmxhZ3MoZmxhZ3Nfb2xkLCBmbGFnc19uZXcsIExJTkU2X0JJVFNfQ0FQVFVSRV9TVFJFQU0pKSB7Ci0JCS8qCi0JCSAgIFdhaXRpbmcgZm9yIGNvbXBsZXRpb24gb2YgYWN0aXZlIFVSQnMgaW4gdGhlIHN0b3AgaGFuZGxlciBpcwotCQkgICBhIGJ1Zywgd2UgdGhlcmVmb3JlIHJlcG9ydCBhbiBlcnJvciBpZiBjYXB0dXJpbmcgaXMgcmVzdGFydGVkCi0JCSAgIHRvbyBzb29uLgotCQkgKi8KLQkJaWYgKGxpbmU2cGNtLT5hY3RpdmVfdXJiX2luIHwgbGluZTZwY20tPnVubGlua191cmJfaW4pIHsKLQkJCWRldl9lcnIobGluZTZwY20tPmxpbmU2LT5pZmNkZXYsICJEZXZpY2Ugbm90IHlldCByZWFkeVxuIik7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0KLQkJbGluZTZwY20tPmNvdW50X2luID0gMDsKLQkJbGluZTZwY20tPnByZXZfZnNpemUgPSAwOwotCQllcnIgPSBsaW5lNl9zdWJtaXRfYXVkaW9faW5fYWxsX3VyYnMobGluZTZwY20pOwotCi0JCWlmIChlcnIgPCAwKQotCQkJZ290byBwY21fYWNxdWlyZV9lcnJvcjsKLQotCQlmbGFnc19maW5hbCB8PSBjaGFubmVscyAmIExJTkU2X0JJVFNfQ0FQVFVSRV9TVFJFQU07Ci0JfQotCi0JaWYgKHRlc3RfZmxhZ3MoZmxhZ3Nfb2xkLCBmbGFnc19uZXcsIExJTkU2X0JJVFNfUExBWUJBQ0tfQlVGRkVSKSkgewotCQkvKiBJbnZva2VkIG11bHRpcGxlIHRpbWVzIGluIGEgcm93IHNvIGFsbG9jYXRlIG9uY2Ugb25seSAqLwotCQlpZiAoIWxpbmU2cGNtLT5idWZmZXJfb3V0KSB7Ci0JCQlsaW5lNnBjbS0+YnVmZmVyX291dCA9Ci0JCQkJa21hbGxvYyhMSU5FNl9JU09fQlVGRkVSUyAqIExJTkU2X0lTT19QQUNLRVRTICoKLQkJCQkJbGluZTZwY20tPm1heF9wYWNrZXRfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWxpbmU2cGNtLT5idWZmZXJfb3V0KSB7Ci0JCQkJZXJyID0gLUVOT01FTTsKLQkJCQlnb3RvIHBjbV9hY3F1aXJlX2Vycm9yOwotCQkJfQotCi0JCQlmbGFnc19maW5hbCB8PSBjaGFubmVscyAmIExJTkU2X0JJVFNfUExBWUJBQ0tfQlVGRkVSOwotCQl9Ci0JfQotCi0JaWYgKHRlc3RfZmxhZ3MoZmxhZ3Nfb2xkLCBmbGFnc19uZXcsIExJTkU2X0JJVFNfUExBWUJBQ0tfU1RSRUFNKSkgewotCQkvKgotCQkgIFNlZSBjb21tZW50IGFib3ZlIHJlZ2FyZGluZyBQQ00gcmVzdGFydC4KLQkJKi8KLQkJaWYgKGxpbmU2cGNtLT5hY3RpdmVfdXJiX291dCB8IGxpbmU2cGNtLT51bmxpbmtfdXJiX291dCkgewotCQkJZGV2X2VycihsaW5lNnBjbS0+bGluZTYtPmlmY2RldiwgIkRldmljZSBub3QgeWV0IHJlYWR5XG4iKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQotCQlsaW5lNnBjbS0+Y291bnRfb3V0ID0gMDsKLQkJZXJyID0gbGluZTZfc3VibWl0X2F1ZGlvX291dF9hbGxfdXJicyhsaW5lNnBjbSk7Ci0KLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIHBjbV9hY3F1aXJlX2Vycm9yOwotCi0JCWZsYWdzX2ZpbmFsIHw9IGNoYW5uZWxzICYgTElORTZfQklUU19QTEFZQkFDS19TVFJFQU07Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLXBjbV9hY3F1aXJlX2Vycm9yOgotCS8qCi0JICAgSWYgbm90IGFsbCByZXF1ZXN0ZWQgcmVzb3VyY2VzL3N0cmVhbXMgY291bGQgYmUgb2J0YWluZWQsIHJlbGVhc2UKLQkgICB0aG9zZSB3aGljaCB3ZXJlIHN1Y2Nlc3NmdWxseSBvYnRhaW5lZCAoaWYgYW55KS4KLQkqLwotCWxpbmU2X3BjbV9yZWxlYXNlKGxpbmU2cGNtLCBmbGFnc19maW5hbCAmIGNoYW5uZWxzKTsKLQlyZXR1cm4gZXJyOwotfQotCi1pbnQgbGluZTZfcGNtX3JlbGVhc2Uoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtLCBpbnQgY2hhbm5lbHMpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnc19vbGQsIGZsYWdzX25ldzsKLQotCWRvIHsKLQkJZmxhZ3Nfb2xkID0gQUNDRVNTX09OQ0UobGluZTZwY20tPmZsYWdzKTsKLQkJZmxhZ3NfbmV3ID0gZmxhZ3Nfb2xkICYgfmNoYW5uZWxzOwotCX0gd2hpbGUgKGNtcHhjaGcoJmxpbmU2cGNtLT5mbGFncywgZmxhZ3Nfb2xkLCBmbGFnc19uZXcpICE9IGZsYWdzX29sZCk7Ci0KLQlpZiAodGVzdF9mbGFncyhmbGFnc19uZXcsIGZsYWdzX29sZCwgTElORTZfQklUU19DQVBUVVJFX1NUUkVBTSkpCi0JCWxpbmU2X3VubGlua19hdWRpb19pbl91cmJzKGxpbmU2cGNtKTsKLQotCWlmICh0ZXN0X2ZsYWdzKGZsYWdzX25ldywgZmxhZ3Nfb2xkLCBMSU5FNl9CSVRTX0NBUFRVUkVfQlVGRkVSKSkgewotCQlsaW5lNl93YWl0X2NsZWFyX2F1ZGlvX2luX3VyYnMobGluZTZwY20pOwotCQlsaW5lNl9mcmVlX2NhcHR1cmVfYnVmZmVyKGxpbmU2cGNtKTsKLQl9Ci0KLQlpZiAodGVzdF9mbGFncyhmbGFnc19uZXcsIGZsYWdzX29sZCwgTElORTZfQklUU19QTEFZQkFDS19TVFJFQU0pKQotCQlsaW5lNl91bmxpbmtfYXVkaW9fb3V0X3VyYnMobGluZTZwY20pOwotCi0JaWYgKHRlc3RfZmxhZ3MoZmxhZ3NfbmV3LCBmbGFnc19vbGQsIExJTkU2X0JJVFNfUExBWUJBQ0tfQlVGRkVSKSkgewotCQlsaW5lNl93YWl0X2NsZWFyX2F1ZGlvX291dF91cmJzKGxpbmU2cGNtKTsKLQkJbGluZTZfZnJlZV9wbGF5YmFja19idWZmZXIobGluZTZwY20pOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiB0cmlnZ2VyIGNhbGxiYWNrICovCi1pbnQgc25kX2xpbmU2X3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCi17Ci0Jc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqczsKLQlpbnQgZXJyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZTZwY20tPmxvY2tfdHJpZ2dlciwgZmxhZ3MpOwotCWNsZWFyX2JpdChMSU5FNl9JTkRFWF9QUkVQQVJFRCwgJmxpbmU2cGNtLT5mbGFncyk7Ci0KLQlzbmRfcGNtX2dyb3VwX2Zvcl9lYWNoX2VudHJ5KHMsIHN1YnN0cmVhbSkgewotCQlzd2l0Y2ggKHMtPnN0cmVhbSkgewotCQljYXNlIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s6Ci0JCQllcnIgPSBzbmRfbGluZTZfcGxheWJhY2tfdHJpZ2dlcihsaW5lNnBjbSwgY21kKTsKLQotCQkJaWYgKGVyciA8IDApIHsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+bG9ja190cmlnZ2VyLAotCQkJCQkJICAgICAgIGZsYWdzKTsKLQkJCQlyZXR1cm4gZXJyOwotCQkJfQotCi0JCQlicmVhazsKLQotCQljYXNlIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRToKLQkJCWVyciA9IHNuZF9saW5lNl9jYXB0dXJlX3RyaWdnZXIobGluZTZwY20sIGNtZCk7Ci0KLQkJCWlmIChlcnIgPCAwKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTZwY20tPmxvY2tfdHJpZ2dlciwKLQkJCQkJCSAgICAgICBmbGFncyk7Ci0JCQkJcmV0dXJuIGVycjsKLQkJCX0KLQotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCWRldl9lcnIobGluZTZwY20tPmxpbmU2LT5pZmNkZXYsCi0JCQkJIlVua25vd24gc3RyZWFtIGRpcmVjdGlvbiAlZFxuIiwgcy0+c3RyZWFtKTsKLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2cGNtLT5sb2NrX3RyaWdnZXIsIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogY29udHJvbCBpbmZvIGNhbGxiYWNrICovCi1zdGF0aWMgaW50IHNuZF9saW5lNl9jb250cm9sX3BsYXliYWNrX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCi17Ci0JdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7Ci0JdWluZm8tPmNvdW50ID0gMjsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOwotCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDI1NjsKLQlyZXR1cm4gMDsKLX0KLQotLyogY29udHJvbCBnZXQgY2FsbGJhY2sgKi8KLXN0YXRpYyBpbnQgc25kX2xpbmU2X2NvbnRyb2xfcGxheWJhY2tfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCWludCBpOwotCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQotCWZvciAoaSA9IDI7IGktLTspCi0JCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldID0gbGluZTZwY20tPnZvbHVtZV9wbGF5YmFja1tpXTsKLQotCXJldHVybiAwOwotfQotCi0vKiBjb250cm9sIHB1dCBjYWxsYmFjayAqLwotc3RhdGljIGludCBzbmRfbGluZTZfY29udHJvbF9wbGF5YmFja19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0JaW50IGksIGNoYW5nZWQgPSAwOwotCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQotCWZvciAoaSA9IDI7IGktLTspCi0JCWlmIChsaW5lNnBjbS0+dm9sdW1lX3BsYXliYWNrW2ldICE9Ci0JCSAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXSkgewotCQkJbGluZTZwY20tPnZvbHVtZV9wbGF5YmFja1tpXSA9Ci0JCQkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV07Ci0JCQljaGFuZ2VkID0gMTsKLQkJfQotCi0JcmV0dXJuIGNoYW5nZWQ7Ci19Ci0KLS8qIGNvbnRyb2wgZGVmaW5pdGlvbiAqLwotc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxpbmU2X2NvbnRyb2xfcGxheWJhY2sgPSB7Ci0JLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JLm5hbWUgPSAiUENNIFBsYXliYWNrIFZvbHVtZSIsCi0JLmluZGV4ID0gMCwKLQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQURXUklURSwKLQkuaW5mbyA9IHNuZF9saW5lNl9jb250cm9sX3BsYXliYWNrX2luZm8sCi0JLmdldCA9IHNuZF9saW5lNl9jb250cm9sX3BsYXliYWNrX2dldCwKLQkucHV0ID0gc25kX2xpbmU2X2NvbnRyb2xfcGxheWJhY2tfcHV0Ci19OwotCi0vKgotCUNsZWFudXAgdGhlIFBDTSBkZXZpY2UuCi0qLwotc3RhdGljIHZvaWQgbGluZTZfY2xlYW51cF9wY20oc3RydWN0IHNuZF9wY20gKnBjbSkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX2NoaXAocGNtKTsKLQotI2lmZGVmIENPTkZJR19MSU5FNl9VU0JfSU1QVUxTRV9SRVNQT05TRQotCWRldmljZV9yZW1vdmVfZmlsZShsaW5lNnBjbS0+bGluZTYtPmlmY2RldiwgJmRldl9hdHRyX2ltcHVsc2Vfdm9sdW1lKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUobGluZTZwY20tPmxpbmU2LT5pZmNkZXYsICZkZXZfYXR0cl9pbXB1bHNlX3BlcmlvZCk7Ci0jZW5kaWYKLQotCWZvciAoaSA9IExJTkU2X0lTT19CVUZGRVJTOyBpLS07KSB7Ci0JCWlmIChsaW5lNnBjbS0+dXJiX2F1ZGlvX291dFtpXSkgewotCQkJdXNiX2tpbGxfdXJiKGxpbmU2cGNtLT51cmJfYXVkaW9fb3V0W2ldKTsKLQkJCXVzYl9mcmVlX3VyYihsaW5lNnBjbS0+dXJiX2F1ZGlvX291dFtpXSk7Ci0JCX0KLQkJaWYgKGxpbmU2cGNtLT51cmJfYXVkaW9faW5baV0pIHsKLQkJCXVzYl9raWxsX3VyYihsaW5lNnBjbS0+dXJiX2F1ZGlvX2luW2ldKTsKLQkJCXVzYl9mcmVlX3VyYihsaW5lNnBjbS0+dXJiX2F1ZGlvX2luW2ldKTsKLQkJfQotCX0KLX0KLQotLyogY3JlYXRlIGEgUENNIGRldmljZSAqLwotc3RhdGljIGludCBzbmRfbGluZTZfbmV3X3BjbShzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCi17Ci0Jc3RydWN0IHNuZF9wY20gKnBjbTsKLQlpbnQgZXJyOwotCi0JZXJyID0gc25kX3BjbV9uZXcobGluZTZwY20tPmxpbmU2LT5jYXJkLAotCQkJICAoY2hhciAqKWxpbmU2cGNtLT5saW5lNi0+cHJvcGVydGllcy0+bmFtZSwKLQkJCSAgMCwgMSwgMSwgJnBjbSk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlwY20tPnByaXZhdGVfZGF0YSA9IGxpbmU2cGNtOwotCXBjbS0+cHJpdmF0ZV9mcmVlID0gbGluZTZfY2xlYW51cF9wY207Ci0JbGluZTZwY20tPnBjbSA9IHBjbTsKLQlzdHJjcHkocGNtLT5uYW1lLCBsaW5lNnBjbS0+bGluZTYtPnByb3BlcnRpZXMtPm5hbWUpOwotCi0JLyogc2V0IG9wZXJhdG9ycyAqLwotCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCi0JCQkmc25kX2xpbmU2X3BsYXliYWNrX29wcyk7Ci0Jc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmc25kX2xpbmU2X2NhcHR1cmVfb3BzKTsKLQotCS8qIHByZS1hbGxvY2F0aW9uIG9mIGJ1ZmZlcnMgKi8KLQlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfQ09OVElOVU9VUywKLQkJCQkJICAgICAgc25kX2RtYV9jb250aW51b3VzX2RhdGEKLQkJCQkJICAgICAgKEdGUF9LRVJORUwpLCA2NCAqIDEwMjQsCi0JCQkJCSAgICAgIDEyOCAqIDEwMjQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFBDTSBkZXZpY2UgZGVzdHJ1Y3RvciAqLwotc3RhdGljIGludCBzbmRfbGluZTZfcGNtX2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLQlTdG9wIHN1YnN0cmVhbSBpZiBzdGlsbCBydW5uaW5nLgotKi8KLXN0YXRpYyB2b2lkIHBjbV9kaXNjb25uZWN0X3N1YnN0cmVhbShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlpZiAoc3Vic3RyZWFtLT5ydW50aW1lICYmIHNuZF9wY21fcnVubmluZyhzdWJzdHJlYW0pKSB7Ci0JCXNuZF9wY21fc3RyZWFtX2xvY2tfaXJxKHN1YnN0cmVhbSk7Ci0JCXNuZF9wY21fc3RvcChzdWJzdHJlYW0sIFNORFJWX1BDTV9TVEFURV9ESVNDT05ORUNURUQpOwotCQlzbmRfcGNtX3N0cmVhbV91bmxvY2tfaXJxKHN1YnN0cmVhbSk7Ci0JfQotfQotCi0vKgotCVN0b3AgUENNIHN0cmVhbS4KLSovCi12b2lkIGxpbmU2X3BjbV9kaXNjb25uZWN0KHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKLXsKLQlwY21fZGlzY29ubmVjdF9zdWJzdHJlYW0oZ2V0X3N1YnN0cmVhbQotCQkJCSAobGluZTZwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSkpOwotCXBjbV9kaXNjb25uZWN0X3N1YnN0cmVhbShnZXRfc3Vic3RyZWFtCi0JCQkJIChsaW5lNnBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykpOwotCWxpbmU2X3VubGlua193YWl0X2NsZWFyX2F1ZGlvX291dF91cmJzKGxpbmU2cGNtKTsKLQlsaW5lNl91bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19pbl91cmJzKGxpbmU2cGNtKTsKLX0KLQotLyoKLQlDcmVhdGUgYW5kIHJlZ2lzdGVyIHRoZSBQQ00gZGV2aWNlIGFuZCBtaXhlciBlbnRyaWVzLgotCUNyZWF0ZSBVUkJzIGZvciBwbGF5YmFjayBhbmQgY2FwdHVyZS4KLSovCi1pbnQgbGluZTZfaW5pdF9wY20oc3RydWN0IHVzYl9saW5lNiAqbGluZTYsCi0JCSAgIHN0cnVjdCBsaW5lNl9wY21fcHJvcGVydGllcyAqcHJvcGVydGllcykKLXsKLQlzdGF0aWMgc3RydWN0IHNuZF9kZXZpY2Vfb3BzIHBjbV9vcHMgPSB7Ci0JCS5kZXZfZnJlZSA9IHNuZF9saW5lNl9wY21fZnJlZSwKLQl9OwotCi0JaW50IGVycjsKLQlpbnQgZXBfcmVhZCA9IDAsIGVwX3dyaXRlID0gMDsKLQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY207Ci0KLQlpZiAoIShsaW5lNi0+cHJvcGVydGllcy0+Y2FwYWJpbGl0aWVzICYgTElORTZfQklUX1BDTSkpCi0JCXJldHVybiAwOwkvKiBza2lwIFBDTSBpbml0aWFsaXphdGlvbiBhbmQgcmVwb3J0IHN1Y2Nlc3MgKi8KLQotCS8qIGluaXRpYWxpemUgUENNIHN1YnN5c3RlbSBiYXNlZCBvbiBwcm9kdWN0IGlkOiAqLwotCXN3aXRjaCAobGluZTYtPnByb2R1Y3QpIHsKLQljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVDoKLQljYXNlIExJTkU2X0RFVklEX0JBU1NQT0RYVExJVkU6Ci0JY2FzZSBMSU5FNl9ERVZJRF9CQVNTUE9EWFRQUk86Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RYVDoKLQljYXNlIExJTkU2X0RFVklEX1BPRFhUTElWRToKLQljYXNlIExJTkU2X0RFVklEX1BPRFhUUFJPOgotCWNhc2UgTElORTZfREVWSURfUE9ESEQzMDA6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RIRDQwMDoKLQkJZXBfcmVhZCA9IDB4ODI7Ci0JCWVwX3dyaXRlID0gMHgwMTsKLQkJYnJlYWs7Ci0KLQljYXNlIExJTkU2X0RFVklEX1BPREhENTAwOgotCWNhc2UgTElORTZfREVWSURfUE9EWDM6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RYM0xJVkU6Ci0JCWVwX3JlYWQgPSAweDg2OwotCQllcF93cml0ZSA9IDB4MDI7Ci0JCWJyZWFrOwotCi0JY2FzZSBMSU5FNl9ERVZJRF9QT0NLRVRQT0Q6Ci0JCWVwX3JlYWQgPSAweDgyOwotCQllcF93cml0ZSA9IDB4MDI7Ci0JCWJyZWFrOwotCi0JY2FzZSBMSU5FNl9ERVZJRF9HVUlUQVJQT1JUOgotCWNhc2UgTElORTZfREVWSURfUE9EU1RVRElPX0dYOgotCWNhc2UgTElORTZfREVWSURfUE9EU1RVRElPX1VYMToKLQljYXNlIExJTkU2X0RFVklEX1BPRFNUVURJT19VWDI6Ci0JY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9HWDoKLQljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMToKLQljYXNlIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMjoKLQkJZXBfcmVhZCA9IDB4ODI7Ci0JCWVwX3dyaXRlID0gMHgwMTsKLQkJYnJlYWs7Ci0KLQkvKiB0aGlzIGlzIGZvciBpbnRlcmZhY2VfbnVtYmVyID09IDE6Ci0JY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDI6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RTVFVESU9fVVgyOgotCQllcF9yZWFkICA9IDB4ODc7Ci0JCWVwX3dyaXRlID0gMHgwMDsKLQkJYnJlYWs7ICovCi0KLQlkZWZhdWx0OgotCQlNSVNTSU5HX0NBU0U7Ci0JfQotCi0JbGluZTZwY20gPSBremFsbG9jKHNpemVvZigqbGluZTZwY20pLCBHRlBfS0VSTkVMKTsKLQotCWlmIChsaW5lNnBjbSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWxpbmU2cGNtLT52b2x1bWVfcGxheWJhY2tbMF0gPSBsaW5lNnBjbS0+dm9sdW1lX3BsYXliYWNrWzFdID0gMjU1OwotCWxpbmU2cGNtLT52b2x1bWVfbW9uaXRvciA9IDI1NTsKLQlsaW5lNnBjbS0+bGluZTYgPSBsaW5lNjsKLQlsaW5lNnBjbS0+ZXBfYXVkaW9fcmVhZCA9IGVwX3JlYWQ7Ci0JbGluZTZwY20tPmVwX2F1ZGlvX3dyaXRlID0gZXBfd3JpdGU7Ci0KLQkvKiBSZWFkIGFuZCB3cml0ZSBidWZmZXJzIGFyZSBzaXplZCBpZGVudGljYWxseSwgc28gY2hvb3NlIG1pbmltdW0gKi8KLQlsaW5lNnBjbS0+bWF4X3BhY2tldF9zaXplID0gbWluKAotCQkJdXNiX21heHBhY2tldChsaW5lNi0+dXNiZGV2LAotCQkJCXVzYl9yY3Zpc29jcGlwZShsaW5lNi0+dXNiZGV2LCBlcF9yZWFkKSwgMCksCi0JCQl1c2JfbWF4cGFja2V0KGxpbmU2LT51c2JkZXYsCi0JCQkJdXNiX3NuZGlzb2NwaXBlKGxpbmU2LT51c2JkZXYsIGVwX3dyaXRlKSwgMSkpOwotCi0JbGluZTZwY20tPnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOwotCWxpbmU2LT5saW5lNnBjbSA9IGxpbmU2cGNtOwotCi0JLyogUENNIGRldmljZTogKi8KLQllcnIgPSBzbmRfZGV2aWNlX25ldyhsaW5lNi0+Y2FyZCwgU05EUlZfREVWX1BDTSwgbGluZTYsICZwY21fb3BzKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IHNuZF9saW5lNl9uZXdfcGNtKGxpbmU2cGNtKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCXNwaW5fbG9ja19pbml0KCZsaW5lNnBjbS0+bG9ja19hdWRpb19vdXQpOwotCXNwaW5fbG9ja19pbml0KCZsaW5lNnBjbS0+bG9ja19hdWRpb19pbik7Ci0Jc3Bpbl9sb2NrX2luaXQoJmxpbmU2cGNtLT5sb2NrX3RyaWdnZXIpOwotCi0JZXJyID0gbGluZTZfY3JlYXRlX2F1ZGlvX291dF91cmJzKGxpbmU2cGNtKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IGxpbmU2X2NyZWF0ZV9hdWRpb19pbl91cmJzKGxpbmU2cGNtKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCS8qIG1peGVyOiAqLwotCWVyciA9Ci0JICAgIHNuZF9jdGxfYWRkKGxpbmU2LT5jYXJkLAotCQkJc25kX2N0bF9uZXcxKCZsaW5lNl9jb250cm9sX3BsYXliYWNrLCBsaW5lNnBjbSkpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0jaWZkZWYgQ09ORklHX0xJTkU2X1VTQl9JTVBVTFNFX1JFU1BPTlNFCi0JLyogaW1wdWxzZSByZXNwb25zZSB0ZXN0OiAqLwotCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShsaW5lNi0+aWZjZGV2LCAmZGV2X2F0dHJfaW1wdWxzZV92b2x1bWUpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGxpbmU2LT5pZmNkZXYsICZkZXZfYXR0cl9pbXB1bHNlX3BlcmlvZCk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQlsaW5lNnBjbS0+aW1wdWxzZV9wZXJpb2QgPSBMSU5FNl9JTVBVTFNFX0RFRkFVTFRfUEVSSU9EOwotI2VuZGlmCi0KLQlyZXR1cm4gMDsKLX0KLQotLyogcHJlcGFyZSBwY20gY2FsbGJhY2sgKi8KLWludCBzbmRfbGluZTZfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0KLQlzd2l0Y2ggKHN1YnN0cmVhbS0+c3RyZWFtKSB7Ci0JY2FzZSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOgotCQlpZiAoKGxpbmU2cGNtLT5mbGFncyAmIExJTkU2X0JJVFNfUExBWUJBQ0tfU1RSRUFNKSA9PSAwKQotCQkJbGluZTZfdW5saW5rX3dhaXRfY2xlYXJfYXVkaW9fb3V0X3VyYnMobGluZTZwY20pOwotCi0JCWJyZWFrOwotCi0JY2FzZSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkU6Ci0JCWlmICgobGluZTZwY20tPmZsYWdzICYgTElORTZfQklUU19DQVBUVVJFX1NUUkVBTSkgPT0gMCkKLQkJCWxpbmU2X3VubGlua193YWl0X2NsZWFyX2F1ZGlvX2luX3VyYnMobGluZTZwY20pOwotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJTUlTU0lOR19DQVNFOwotCX0KLQotCWlmICghdGVzdF9hbmRfc2V0X2JpdChMSU5FNl9JTkRFWF9QUkVQQVJFRCwgJmxpbmU2cGNtLT5mbGFncykpIHsKLQkJbGluZTZwY20tPmNvdW50X291dCA9IDA7Ci0JCWxpbmU2cGNtLT5wb3Nfb3V0ID0gMDsKLQkJbGluZTZwY20tPnBvc19vdXRfZG9uZSA9IDA7Ci0JCWxpbmU2cGNtLT5ieXRlc19vdXQgPSAwOwotCQlsaW5lNnBjbS0+Y291bnRfaW4gPSAwOwotCQlsaW5lNnBjbS0+cG9zX2luX2RvbmUgPSAwOwotCQlsaW5lNnBjbS0+Ynl0ZXNfaW4gPSAwOwotCX0KLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BjbS5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BjbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWEwZDQ2Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wY20uaAorKysgL2Rldi9udWxsCkBAIC0xLDM4MiArMCwwIEBACi0vKgotICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOS4xYmV0YQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCi0gKgotICovCi0KLS8qCi0JUENNIGludGVyZmFjZSB0byBQT0Qgc2VyaWVzIGRldmljZXMuCi0qLwotCi0jaWZuZGVmIFBDTV9ICi0jZGVmaW5lIFBDTV9ICi0KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLQotI2luY2x1ZGUgImRyaXZlci5oIgotI2luY2x1ZGUgInVzYmRlZnMuaCIKLQotLyogbnVtYmVyIG9mIFVSQnMgKi8KLSNkZWZpbmUgTElORTZfSVNPX0JVRkZFUlMJMgotCi0vKgotCW51bWJlciBvZiBVU0IgZnJhbWVzIHBlciBVUkIKLQlUaGUgTGluZTYgV2luZG93cyBkcml2ZXIgYWx3YXlzIHRyYW5zbWl0cyB0d28gZnJhbWVzIHBlciBwYWNrZXQsIGJ1dAotCXRoZSBMaW51eCBkcml2ZXIgcGVyZm9ybXMgc2lnbmlmaWNhbnRseSBiZXR0ZXIgKGkuZS4sIGxvd2VyIGxhdGVuY3kpCi0Jd2l0aCBvbmx5IG9uZSBmcmFtZSBwZXIgcGFja2V0LgotKi8KLSNkZWZpbmUgTElORTZfSVNPX1BBQ0tFVFMJMQotCi0vKiBpbiBhICJmdWxsIHNwZWVkIiBkZXZpY2UgKHN1Y2ggYXMgdGhlIFBPRHh0IFBybykgdGhpcyBtZWFucyAxbXMgKi8KLSNkZWZpbmUgTElORTZfSVNPX0lOVEVSVkFMCTEKLQotI2lmZGVmIENPTkZJR19MSU5FNl9VU0JfSU1QVUxTRV9SRVNQT05TRQotI2RlZmluZSBMSU5FNl9JTVBVTFNFX0RFRkFVTFRfUEVSSU9EIDEwMAotI2VuZGlmCi0KLS8qCi0JR2V0IHN1YnN0cmVhbSBmcm9tIExpbmU2IFBDTSBkYXRhIHN0cnVjdHVyZQotKi8KLSNkZWZpbmUgZ2V0X3N1YnN0cmVhbShsaW5lNnBjbSwgc3RyZWFtKQlcCi0JCShsaW5lNnBjbS0+cGNtLT5zdHJlYW1zW3N0cmVhbV0uc3Vic3RyZWFtKQotCi0vKgotCVBDTSBtb2RlIGJpdHMuCi0KLQlUaGVyZSBhcmUgc2V2ZXJhbCBmZWF0dXJlcyBvZiB0aGUgTGluZTYgVVNCIGRyaXZlciB3aGljaCByZXF1aXJlIFBDTQotCWRhdGEgdG8gYmUgZXhjaGFuZ2VkIHdpdGggdGhlIGRldmljZToKLQkqKSBQQ00gcGxheWJhY2sgYW5kIGNhcHR1cmUgdmlhIEFMU0EKLQkqKSBzb2Z0d2FyZSBtb25pdG9yaW5nIChmb3IgZGV2aWNlcyB3aXRob3V0IGhhcmR3YXJlIG1vbml0b3JpbmcpCi0JKikgb3B0aW9uYWwgaW1wdWxzZSByZXNwb25zZSBtZWFzdXJlbWVudAotCUhvd2V2ZXIsIGZyb20gdGhlIGRldmljZSdzIHBvaW50IG9mIHZpZXcsIHRoZXJlIGlzIGp1c3QgYSBzaW5nbGUKLQljYXB0dXJlIGFuZCBwbGF5YmFjayBzdHJlYW0sIHdoaWNoIG11c3QgYmUgc2hhcmVkIGJldHdlZW4gdGhlc2UKLQlzdWJzeXN0ZW1zLiBJdCBpcyB0aGVyZWZvcmUgbmVjZXNzYXJ5IHRvIG1haW50YWluIHRoZSBzdGF0ZSBvZiB0aGUKLQlzdWJzeXN0ZW1zIHdpdGggcmVzcGVjdCB0byBQQ00gdXNhZ2UuIFdlIGRlZmluZSBzZXZlcmFsIGNvbnN0YW50cyBvZgotCXRoZSBmb3JtIExJTkU2X0JJVF9QQ01fPHN1YnN5c3RlbT5fPGRpcmVjdGlvbj5fPHJlc291cmNlPiB3aXRoIHRoZQotCWZvbGxvd2luZyBtZWFuaW5nczoKLQkqKSA8c3Vic3lzdGVtPiBpcyBvbmUgb2YKLQktKSBBTFNBOiBQQ00gcGxheWJhY2sgYW5kIGNhcHR1cmUgdmlhIEFMU0EKLQktKSBNT05JVE9SOiBzb2Z0d2FyZSBtb25pdG9yaW5nCi0JLSkgSU1QVUxTRTogb3B0aW9uYWwgaW1wdWxzZSByZXNwb25zZSBtZWFzdXJlbWVudAotCSopIDxkaXJlY3Rpb24+IGlzIG9uZSBvZgotCS0pIFBMQVlCQUNLOiBhdWRpbyBvdXRwdXQgKGZyb20gaG9zdCB0byBkZXZpY2UpCi0JLSkgQ0FQVFVSRTogYXVkaW8gaW5wdXQgKGZyb20gZGV2aWNlIHRvIGhvc3QpCi0JKikgPHJlc291cmNlPiBpcyBvbmUgb2YKLQktKSBCVUZGRVI6IGJ1ZmZlciByZXF1aXJlZCBieSBQQ00gZGF0YSBzdHJlYW0KLQktKSBTVFJFQU06IGFjdHVhbCBQQ00gZGF0YSBzdHJlYW0KLQotCVRoZSBzdWJzeXN0ZW1zIGNhbGwgbGluZTZfcGNtX2FjcXVpcmUoKSB0byBhY3F1aXJlIHRoZSAoc2hhcmVkKQotCXJlc291cmNlcyBuZWVkZWQgZm9yIGEgcGFydGljdWxhciBvcGVyYXRpb24gKGUuZy4sIGFsbG9jYXRlIHRoZSBidWZmZXIKLQlmb3IgQUxTQSBwbGF5YmFjayBvciBzdGFydCB0aGUgY2FwdHVyZSBzdHJlYW0gZm9yIHNvZnR3YXJlIG1vbml0b3JpbmcpLgotCVdoZW4gYSByZXNvdXJjZSBpcyBubyBsb25nZXIgbmVlZGVkLCBpdCBpcyByZWxlYXNlZCBieSBjYWxsaW5nCi0JbGluZTZfcGNtX3JlbGVhc2UoKS4gQnVmZmVyIGFsbG9jYXRpb24gYW5kIHN0cmVhbSBzdGFydHVwIGFyZSBoYW5kbGVkCi0Jc2VwYXJhdGVseSB0byBhbGxvdyB0aGUgQUxTQSBrZXJuZWwgZHJpdmVyIHRvIHBlcmZvcm0gdGhlbSBhdAotCWFwcHJvcHJpYXRlIHBsYWNlcyAoc2luY2UgdGhlIGNhbGxiYWNrIHdoaWNoIHN0YXJ0cyBhIFBDTSBzdHJlYW0gaXMgbm90Ci0JYWxsb3dlZCB0byBzbGVlcCkuCi0qLwotZW51bSB7Ci0JLyogaW5kaXZpZHVhbCBiaXQgaW5kaWNlczogKi8KLQlMSU5FNl9JTkRFWF9QQ01fQUxTQV9QTEFZQkFDS19CVUZGRVIsCi0JTElORTZfSU5ERVhfUENNX0FMU0FfUExBWUJBQ0tfU1RSRUFNLAotCUxJTkU2X0lOREVYX1BDTV9BTFNBX0NBUFRVUkVfQlVGRkVSLAotCUxJTkU2X0lOREVYX1BDTV9BTFNBX0NBUFRVUkVfU1RSRUFNLAotCUxJTkU2X0lOREVYX1BDTV9NT05JVE9SX1BMQVlCQUNLX0JVRkZFUiwKLQlMSU5FNl9JTkRFWF9QQ01fTU9OSVRPUl9QTEFZQkFDS19TVFJFQU0sCi0JTElORTZfSU5ERVhfUENNX01PTklUT1JfQ0FQVFVSRV9CVUZGRVIsCi0JTElORTZfSU5ERVhfUENNX01PTklUT1JfQ0FQVFVSRV9TVFJFQU0sCi0jaWZkZWYgQ09ORklHX0xJTkU2X1VTQl9JTVBVTFNFX1JFU1BPTlNFCi0JTElORTZfSU5ERVhfUENNX0lNUFVMU0VfUExBWUJBQ0tfQlVGRkVSLAotCUxJTkU2X0lOREVYX1BDTV9JTVBVTFNFX1BMQVlCQUNLX1NUUkVBTSwKLQlMSU5FNl9JTkRFWF9QQ01fSU1QVUxTRV9DQVBUVVJFX0JVRkZFUiwKLQlMSU5FNl9JTkRFWF9QQ01fSU1QVUxTRV9DQVBUVVJFX1NUUkVBTSwKLSNlbmRpZgotCUxJTkU2X0lOREVYX1BBVVNFX1BMQVlCQUNLLAotCUxJTkU2X0lOREVYX1BSRVBBUkVELAotCi0JLyogaW5kaXZpZHVhbCBiaXQgbWFza3M6ICovCi0JTElORTZfQklUKFBDTV9BTFNBX1BMQVlCQUNLX0JVRkZFUiksCi0JTElORTZfQklUKFBDTV9BTFNBX1BMQVlCQUNLX1NUUkVBTSksCi0JTElORTZfQklUKFBDTV9BTFNBX0NBUFRVUkVfQlVGRkVSKSwKLQlMSU5FNl9CSVQoUENNX0FMU0FfQ0FQVFVSRV9TVFJFQU0pLAotCUxJTkU2X0JJVChQQ01fTU9OSVRPUl9QTEFZQkFDS19CVUZGRVIpLAotCUxJTkU2X0JJVChQQ01fTU9OSVRPUl9QTEFZQkFDS19TVFJFQU0pLAotCUxJTkU2X0JJVChQQ01fTU9OSVRPUl9DQVBUVVJFX0JVRkZFUiksCi0JTElORTZfQklUKFBDTV9NT05JVE9SX0NBUFRVUkVfU1RSRUFNKSwKLSNpZmRlZiBDT05GSUdfTElORTZfVVNCX0lNUFVMU0VfUkVTUE9OU0UKLQlMSU5FNl9CSVQoUENNX0lNUFVMU0VfUExBWUJBQ0tfQlVGRkVSKSwKLQlMSU5FNl9CSVQoUENNX0lNUFVMU0VfUExBWUJBQ0tfU1RSRUFNKSwKLQlMSU5FNl9CSVQoUENNX0lNUFVMU0VfQ0FQVFVSRV9CVUZGRVIpLAotCUxJTkU2X0JJVChQQ01fSU1QVUxTRV9DQVBUVVJFX1NUUkVBTSksCi0jZW5kaWYKLQlMSU5FNl9CSVQoUEFVU0VfUExBWUJBQ0spLAotCUxJTkU2X0JJVChQUkVQQVJFRCksCi0KLQkvKiBjb21iaW5lZCBiaXQgbWFza3MgKGJ5IG9wZXJhdGlvbik6ICovCi0JTElORTZfQklUU19QQ01fQUxTQV9CVUZGRVIgPQotCSAgICBMSU5FNl9CSVRfUENNX0FMU0FfUExBWUJBQ0tfQlVGRkVSIHwKLQkgICAgTElORTZfQklUX1BDTV9BTFNBX0NBUFRVUkVfQlVGRkVSLAotCi0JTElORTZfQklUU19QQ01fQUxTQV9TVFJFQU0gPQotCSAgICBMSU5FNl9CSVRfUENNX0FMU0FfUExBWUJBQ0tfU1RSRUFNIHwKLQkgICAgTElORTZfQklUX1BDTV9BTFNBX0NBUFRVUkVfU1RSRUFNLAotCi0JTElORTZfQklUU19QQ01fTU9OSVRPUiA9Ci0JICAgIExJTkU2X0JJVF9QQ01fTU9OSVRPUl9QTEFZQkFDS19CVUZGRVIgfAotCSAgICBMSU5FNl9CSVRfUENNX01PTklUT1JfUExBWUJBQ0tfU1RSRUFNIHwKLQkgICAgTElORTZfQklUX1BDTV9NT05JVE9SX0NBUFRVUkVfQlVGRkVSIHwKLQkgICAgTElORTZfQklUX1BDTV9NT05JVE9SX0NBUFRVUkVfU1RSRUFNLAotCi0jaWZkZWYgQ09ORklHX0xJTkU2X1VTQl9JTVBVTFNFX1JFU1BPTlNFCi0JTElORTZfQklUU19QQ01fSU1QVUxTRSA9Ci0JICAgIExJTkU2X0JJVF9QQ01fSU1QVUxTRV9QTEFZQkFDS19CVUZGRVIgfAotCSAgICBMSU5FNl9CSVRfUENNX0lNUFVMU0VfUExBWUJBQ0tfU1RSRUFNIHwKLQkgICAgTElORTZfQklUX1BDTV9JTVBVTFNFX0NBUFRVUkVfQlVGRkVSIHwKLQkgICAgTElORTZfQklUX1BDTV9JTVBVTFNFX0NBUFRVUkVfU1RSRUFNLAotI2VuZGlmCi0KLQkvKiBjb21iaW5lZCBiaXQgbWFza3MgKGJ5IGRpcmVjdGlvbik6ICovCi0JTElORTZfQklUU19QTEFZQkFDS19CVUZGRVIgPQotI2lmZGVmIENPTkZJR19MSU5FNl9VU0JfSU1QVUxTRV9SRVNQT05TRQotCSAgICBMSU5FNl9CSVRfUENNX0lNUFVMU0VfUExBWUJBQ0tfQlVGRkVSIHwKLSNlbmRpZgotCSAgICBMSU5FNl9CSVRfUENNX0FMU0FfUExBWUJBQ0tfQlVGRkVSIHwKLQkgICAgTElORTZfQklUX1BDTV9NT05JVE9SX1BMQVlCQUNLX0JVRkZFUiAsCi0KLQlMSU5FNl9CSVRTX1BMQVlCQUNLX1NUUkVBTSA9Ci0jaWZkZWYgQ09ORklHX0xJTkU2X1VTQl9JTVBVTFNFX1JFU1BPTlNFCi0JICAgIExJTkU2X0JJVF9QQ01fSU1QVUxTRV9QTEFZQkFDS19TVFJFQU0gfAotI2VuZGlmCi0JICAgIExJTkU2X0JJVF9QQ01fQUxTQV9QTEFZQkFDS19TVFJFQU0gfAotCSAgICBMSU5FNl9CSVRfUENNX01PTklUT1JfUExBWUJBQ0tfU1RSRUFNICwKLQotCUxJTkU2X0JJVFNfQ0FQVFVSRV9CVUZGRVIgPQotI2lmZGVmIENPTkZJR19MSU5FNl9VU0JfSU1QVUxTRV9SRVNQT05TRQotCSAgICBMSU5FNl9CSVRfUENNX0lNUFVMU0VfQ0FQVFVSRV9CVUZGRVIgfAotI2VuZGlmCi0JICAgIExJTkU2X0JJVF9QQ01fQUxTQV9DQVBUVVJFX0JVRkZFUiB8Ci0JICAgIExJTkU2X0JJVF9QQ01fTU9OSVRPUl9DQVBUVVJFX0JVRkZFUiAsCi0KLQlMSU5FNl9CSVRTX0NBUFRVUkVfU1RSRUFNID0KLSNpZmRlZiBDT05GSUdfTElORTZfVVNCX0lNUFVMU0VfUkVTUE9OU0UKLQkgICAgTElORTZfQklUX1BDTV9JTVBVTFNFX0NBUFRVUkVfU1RSRUFNIHwKLSNlbmRpZgotCSAgICBMSU5FNl9CSVRfUENNX0FMU0FfQ0FQVFVSRV9TVFJFQU0gfAotCSAgICBMSU5FNl9CSVRfUENNX01PTklUT1JfQ0FQVFVSRV9TVFJFQU0sCi0KLQlMSU5FNl9CSVRTX1NUUkVBTSA9Ci0JICAgIExJTkU2X0JJVFNfUExBWUJBQ0tfU1RSRUFNIHwKLQkgICAgTElORTZfQklUU19DQVBUVVJFX1NUUkVBTQotfTsKLQotc3RydWN0IGxpbmU2X3BjbV9wcm9wZXJ0aWVzIHsKLQlzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBzbmRfbGluZTZfcGxheWJhY2tfaHcsIHNuZF9saW5lNl9jYXB0dXJlX2h3OwotCXN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0ZGVucyBzbmRfbGluZTZfcmF0ZXM7Ci0JaW50IGJ5dGVzX3Blcl9mcmFtZTsKLX07Ci0KLXN0cnVjdCBzbmRfbGluZTZfcGNtIHsKLQkvKioKLQkJIFBvaW50ZXIgYmFjayB0byB0aGUgTGluZTYgZHJpdmVyIGRhdGEgc3RydWN0dXJlLgotCSovCi0Jc3RydWN0IHVzYl9saW5lNiAqbGluZTY7Ci0KLQkvKioKLQkJIFByb3BlcnRpZXMuCi0JKi8KLQlzdHJ1Y3QgbGluZTZfcGNtX3Byb3BlcnRpZXMgKnByb3BlcnRpZXM7Ci0KLQkvKioKLQkJIEFMU0EgcGNtIHN0cmVhbQotCSovCi0Jc3RydWN0IHNuZF9wY20gKnBjbTsKLQotCS8qKgotCQkgVVJCcyBmb3IgYXVkaW8gcGxheWJhY2suCi0JKi8KLQlzdHJ1Y3QgdXJiICp1cmJfYXVkaW9fb3V0W0xJTkU2X0lTT19CVUZGRVJTXTsKLQotCS8qKgotCQkgVVJCcyBmb3IgYXVkaW8gY2FwdHVyZS4KLQkqLwotCXN0cnVjdCB1cmIgKnVyYl9hdWRpb19pbltMSU5FNl9JU09fQlVGRkVSU107Ci0KLQkvKioKLQkJIFRlbXBvcmFyeSBidWZmZXIgZm9yIHBsYXliYWNrLgotCQkgU2luY2UgdGhlIHBhY2tldCBzaXplIGlzIG5vdCBrbm93biBpbiBhZHZhbmNlLCB0aGlzIGJ1ZmZlciBpcwotCQkgbGFyZ2UgZW5vdWdoIHRvIHN0b3JlIG1heGltdW0gc2l6ZSBwYWNrZXRzLgotCSovCi0JdW5zaWduZWQgY2hhciAqYnVmZmVyX291dDsKLQotCS8qKgotCQkgVGVtcG9yYXJ5IGJ1ZmZlciBmb3IgY2FwdHVyZS4KLQkJIFNpbmNlIHRoZSBwYWNrZXQgc2l6ZSBpcyBub3Qga25vd24gaW4gYWR2YW5jZSwgdGhpcyBidWZmZXIgaXMKLQkJIGxhcmdlIGVub3VnaCB0byBzdG9yZSBtYXhpbXVtIHNpemUgcGFja2V0cy4KLQkqLwotCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcl9pbjsKLQotCS8qKgotCQkgUHJldmlvdXNseSBjYXB0dXJlZCBmcmFtZSAoZm9yIHNvZnR3YXJlIG1vbml0b3JpbmcpLgotCSovCi0JdW5zaWduZWQgY2hhciAqcHJldl9mYnVmOwotCi0JLyoqCi0JCSBTaXplIG9mIHByZXZpb3VzbHkgY2FwdHVyZWQgZnJhbWUgKGZvciBzb2Z0d2FyZSBtb25pdG9yaW5nKS4KLQkqLwotCWludCBwcmV2X2ZzaXplOwotCi0JLyoqCi0JCSBGcmVlIGZyYW1lIHBvc2l0aW9uIGluIHRoZSBwbGF5YmFjayBidWZmZXIuCi0JKi8KLQlzbmRfcGNtX3VmcmFtZXNfdCBwb3Nfb3V0OwotCi0JLyoqCi0JCSBDb3VudCBwcm9jZXNzZWQgYnl0ZXMgZm9yIHBsYXliYWNrLgotCQkgVGhpcyBpcyBtb2R1bG8gcGVyaW9kIHNpemUgKHRvIGRldGVybWluZSB3aGVuIGEgcGVyaW9kIGlzCi0JCSBmaW5pc2hlZCkuCi0JKi8KLQl1bnNpZ25lZCBieXRlc19vdXQ7Ci0KLQkvKioKLQkJIENvdW50ZXIgdG8gY3JlYXRlIGRlc2lyZWQgcGxheWJhY2sgc2FtcGxlIHJhdGUuCi0JKi8KLQl1bnNpZ25lZCBjb3VudF9vdXQ7Ci0KLQkvKioKLQkJIFBsYXliYWNrIHBlcmlvZCBzaXplIGluIGJ5dGVzCi0JKi8KLQl1bnNpZ25lZCBwZXJpb2Rfb3V0OwotCi0JLyoqCi0JCSBQcm9jZXNzZWQgZnJhbWUgcG9zaXRpb24gaW4gdGhlIHBsYXliYWNrIGJ1ZmZlci4KLQkJIFRoZSBjb250ZW50cyBvZiB0aGUgb3V0cHV0IHJpbmcgYnVmZmVyIGhhdmUgYmVlbiBjb25zdW1lZCBieQotCQkgdGhlIFVTQiBzdWJzeXN0ZW0gKGkuZS4sIHNlbnQgdG8gdGhlIFVTQiBkZXZpY2UpIHVwIHRvIHRoaXMKLQkJIHBvc2l0aW9uLgotCSovCi0Jc25kX3BjbV91ZnJhbWVzX3QgcG9zX291dF9kb25lOwotCi0JLyoqCi0JCSBDb3VudCBwcm9jZXNzZWQgYnl0ZXMgZm9yIGNhcHR1cmUuCi0JCSBUaGlzIGlzIG1vZHVsbyBwZXJpb2Qgc2l6ZSAodG8gZGV0ZXJtaW5lIHdoZW4gYSBwZXJpb2QgaXMKLQkJIGZpbmlzaGVkKS4KLQkqLwotCXVuc2lnbmVkIGJ5dGVzX2luOwotCi0JLyoqCi0JCSBDb3VudGVyIHRvIGNyZWF0ZSBkZXNpcmVkIGNhcHR1cmUgc2FtcGxlIHJhdGUuCi0JKi8KLQl1bnNpZ25lZCBjb3VudF9pbjsKLQotCS8qKgotCQkgQ2FwdHVyZSBwZXJpb2Qgc2l6ZSBpbiBieXRlcwotCSovCi0JdW5zaWduZWQgcGVyaW9kX2luOwotCi0JLyoqCi0JCSBQcm9jZXNzZWQgZnJhbWUgcG9zaXRpb24gaW4gdGhlIGNhcHR1cmUgYnVmZmVyLgotCQkgVGhlIGNvbnRlbnRzIG9mIHRoZSBvdXRwdXQgcmluZyBidWZmZXIgaGF2ZSBiZWVuIGNvbnN1bWVkIGJ5Ci0JCSB0aGUgVVNCIHN1YnN5c3RlbSAoaS5lLiwgc2VudCB0byB0aGUgVVNCIGRldmljZSkgdXAgdG8gdGhpcwotCQkgcG9zaXRpb24uCi0JKi8KLQlzbmRfcGNtX3VmcmFtZXNfdCBwb3NfaW5fZG9uZTsKLQotCS8qKgotCQkgQml0IG1hc2sgb2YgYWN0aXZlIHBsYXliYWNrIFVSQnMuCi0JKi8KLQl1bnNpZ25lZCBsb25nIGFjdGl2ZV91cmJfb3V0OwotCi0JLyoqCi0JCSBNYXhpbXVtIHNpemUgb2YgVVNCIHBhY2tldC4KLQkqLwotCWludCBtYXhfcGFja2V0X3NpemU7Ci0KLQkvKioKLQkJIFVTQiBlbmRwb2ludCBmb3IgbGlzdGVuaW5nIHRvIGF1ZGlvIGRhdGEuCi0JKi8KLQlpbnQgZXBfYXVkaW9fcmVhZDsKLQotCS8qKgotCQkgVVNCIGVuZHBvaW50IGZvciB3cml0aW5nIGF1ZGlvIGRhdGEuCi0JKi8KLQlpbnQgZXBfYXVkaW9fd3JpdGU7Ci0KLQkvKioKLQkJIEJpdCBtYXNrIG9mIGFjdGl2ZSBjYXB0dXJlIFVSQnMuCi0JKi8KLQl1bnNpZ25lZCBsb25nIGFjdGl2ZV91cmJfaW47Ci0KLQkvKioKLQkJIEJpdCBtYXNrIG9mIHBsYXliYWNrIFVSQnMgY3VycmVudGx5IGJlaW5nIHVubGlua2VkLgotCSovCi0JdW5zaWduZWQgbG9uZyB1bmxpbmtfdXJiX291dDsKLQotCS8qKgotCQkgQml0IG1hc2sgb2YgY2FwdHVyZSBVUkJzIGN1cnJlbnRseSBiZWluZyB1bmxpbmtlZC4KLQkqLwotCXVuc2lnbmVkIGxvbmcgdW5saW5rX3VyYl9pbjsKLQotCS8qKgotCQkgU3BpbiBsb2NrIHRvIHByb3RlY3QgdXBkYXRlcyBvZiB0aGUgcGxheWJhY2sgYnVmZmVyIHBvc2l0aW9ucyAobm90Ci0JCSBjb250ZW50cyEpCi0JKi8KLQlzcGlubG9ja190IGxvY2tfYXVkaW9fb3V0OwotCi0JLyoqCi0JCSBTcGluIGxvY2sgdG8gcHJvdGVjdCB1cGRhdGVzIG9mIHRoZSBjYXB0dXJlIGJ1ZmZlciBwb3NpdGlvbnMgKG5vdAotCQkgY29udGVudHMhKQotCSovCi0Jc3BpbmxvY2tfdCBsb2NrX2F1ZGlvX2luOwotCi0JLyoqCi0JCSBTcGluIGxvY2sgdG8gcHJvdGVjdCB0cmlnZ2VyLgotCSovCi0Jc3BpbmxvY2tfdCBsb2NrX3RyaWdnZXI7Ci0KLQkvKioKLQkJIFBDTSBwbGF5YmFjayB2b2x1bWUgKGxlZnQgYW5kIHJpZ2h0KS4KLQkqLwotCWludCB2b2x1bWVfcGxheWJhY2tbMl07Ci0KLQkvKioKLQkJIFBDTSBtb25pdG9yIHZvbHVtZS4KLQkqLwotCWludCB2b2x1bWVfbW9uaXRvcjsKLQotI2lmZGVmIENPTkZJR19MSU5FNl9VU0JfSU1QVUxTRV9SRVNQT05TRQotCS8qKgotCQkgVm9sdW1lIG9mIGltcHVsc2UgcmVzcG9uc2UgdGVzdCBzaWduYWwgKGlmIHplcm8sIHRlc3QgaXMgZGlzYWJsZWQpLgotCSovCi0JaW50IGltcHVsc2Vfdm9sdW1lOwotCi0JLyoqCi0JCSBQZXJpb2Qgb2YgaW1wdWxzZSByZXNwb25zZSB0ZXN0IHNpZ25hbC4KLQkqLwotCWludCBpbXB1bHNlX3BlcmlvZDsKLQotCS8qKgotCQkgQ291bnRlciBmb3IgaW1wdWxzZSByZXNwb25zZSB0ZXN0IHNpZ25hbC4KLQkqLwotCWludCBpbXB1bHNlX2NvdW50OwotI2VuZGlmCi0KLQkvKioKLQkJIFNldmVyYWwgc3RhdHVzIGJpdHMgKHNlZSBMSU5FNl9CSVRfKikuCi0JKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaW50IGxhc3RfZnJhbWVfaW4sIGxhc3RfZnJhbWVfb3V0OwotfTsKLQotZXh0ZXJuIGludCBsaW5lNl9pbml0X3BjbShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwKLQkJCSAgc3RydWN0IGxpbmU2X3BjbV9wcm9wZXJ0aWVzICpwcm9wZXJ0aWVzKTsKLWV4dGVybiBpbnQgc25kX2xpbmU2X3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpOwotZXh0ZXJuIGludCBzbmRfbGluZTZfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7Ci1leHRlcm4gdm9pZCBsaW5lNl9wY21fZGlzY29ubmVjdChzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pOwotZXh0ZXJuIGludCBsaW5lNl9wY21fYWNxdWlyZShzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20sIGludCBjaGFubmVscyk7Ci1leHRlcm4gaW50IGxpbmU2X3BjbV9yZWxlYXNlKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSwgaW50IGNoYW5uZWxzKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcGxheWJhY2suYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wbGF5YmFjay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2E4OTAwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wbGF5YmFjay5jCisrKyAvZGV2L251bGwKQEAgLTEsNTkyICswLDAgQEAKLS8qCi0gKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC45LjFiZXRhCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgotCi0jaW5jbHVkZSAiYXVkaW8uaCIKLSNpbmNsdWRlICJjYXB0dXJlLmgiCi0jaW5jbHVkZSAiZHJpdmVyLmgiCi0jaW5jbHVkZSAicGNtLmgiCi0jaW5jbHVkZSAicG9kLmgiCi0jaW5jbHVkZSAicGxheWJhY2suaCIKLQotLyoKLQlTb2Z0d2FyZSBzdGVyZW8gdm9sdW1lIGNvbnRyb2wuCi0qLwotc3RhdGljIHZvaWQgY2hhbmdlX3ZvbHVtZShzdHJ1Y3QgdXJiICp1cmJfb3V0LCBpbnQgdm9sdW1lW10sCi0JCQkgIGludCBieXRlc19wZXJfZnJhbWUpCi17Ci0JaW50IGNobiA9IDA7Ci0KLQlpZiAodm9sdW1lWzBdID09IDI1NiAmJiB2b2x1bWVbMV0gPT0gMjU2KQotCQlyZXR1cm47CQkvKiBtYXhpbXVtIHZvbHVtZSAtIG5vIGNoYW5nZSAqLwotCi0JaWYgKGJ5dGVzX3Blcl9mcmFtZSA9PSA0KSB7Ci0JCXNob3J0ICpwLCAqYnVmX2VuZDsKLQotCQlwID0gKHNob3J0ICopdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyOwotCQlidWZfZW5kID0gcCArIHVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLyBzaXplb2YoKnApOwotCi0JCWZvciAoOyBwIDwgYnVmX2VuZDsgKytwKSB7Ci0JCQkqcCA9ICgqcCAqIHZvbHVtZVtjaG4gJiAxXSkgPj4gODsKLQkJCSsrY2huOwotCQl9Ci0JfSBlbHNlIGlmIChieXRlc19wZXJfZnJhbWUgPT0gNikgewotCQl1bnNpZ25lZCBjaGFyICpwLCAqYnVmX2VuZDsKLQotCQlwID0gKHVuc2lnbmVkIGNoYXIgKil1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXI7Ci0JCWJ1Zl9lbmQgPSBwICsgdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKLQotCQlmb3IgKDsgcCA8IGJ1Zl9lbmQ7IHAgKz0gMykgewotCQkJaW50IHZhbDsKLQotCQkJdmFsID0gcFswXSArIChwWzFdIDw8IDgpICsgKChzaWduZWQgY2hhcilwWzJdIDw8IDE2KTsKLQkJCXZhbCA9ICh2YWwgKiB2b2x1bWVbY2huICYgMV0pID4+IDg7Ci0JCQlwWzBdID0gdmFsOwotCQkJcFsxXSA9IHZhbCA+PiA4OwotCQkJcFsyXSA9IHZhbCA+PiAxNjsKLQkJCSsrY2huOwotCQl9Ci0JfQotfQotCi0jaWZkZWYgQ09ORklHX0xJTkU2X1VTQl9JTVBVTFNFX1JFU1BPTlNFCi0KLS8qCi0JQ3JlYXRlIHNpZ25hbCBmb3IgaW1wdWxzZSByZXNwb25zZSB0ZXN0LgotKi8KLXN0YXRpYyB2b2lkIGNyZWF0ZV9pbXB1bHNlX3Rlc3Rfc2lnbmFsKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSwKLQkJCQkgICAgICAgc3RydWN0IHVyYiAqdXJiX291dCwgaW50IGJ5dGVzX3Blcl9mcmFtZSkKLXsKLQlpbnQgZnJhbWVzID0gdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAvIGJ5dGVzX3Blcl9mcmFtZTsKLQotCWlmIChieXRlc19wZXJfZnJhbWUgPT0gNCkgewotCQlpbnQgaTsKLQkJc2hvcnQgKnBpID0gKHNob3J0ICopbGluZTZwY20tPnByZXZfZmJ1ZjsKLQkJc2hvcnQgKnBvID0gKHNob3J0ICopdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyOwotCi0JCWZvciAoaSA9IDA7IGkgPCBmcmFtZXM7ICsraSkgewotCQkJcG9bMF0gPSBwaVswXTsKLQkJCXBvWzFdID0gMDsKLQkJCXBpICs9IDI7Ci0JCQlwbyArPSAyOwotCQl9Ci0JfSBlbHNlIGlmIChieXRlc19wZXJfZnJhbWUgPT0gNikgewotCQlpbnQgaSwgajsKLQkJdW5zaWduZWQgY2hhciAqcGkgPSBsaW5lNnBjbS0+cHJldl9mYnVmOwotCQl1bnNpZ25lZCBjaGFyICpwbyA9IHVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlcjsKLQotCQlmb3IgKGkgPSAwOyBpIDwgZnJhbWVzOyArK2kpIHsKLQkJCWZvciAoaiA9IDA7IGogPCBieXRlc19wZXJfZnJhbWUgLyAyOyArK2opCi0JCQkJcG9bal0gPSBwaVtqXTsKLQotCQkJZm9yICg7IGogPCBieXRlc19wZXJfZnJhbWU7ICsraikKLQkJCQlwb1tqXSA9IDA7Ci0KLQkJCXBpICs9IGJ5dGVzX3Blcl9mcmFtZTsKLQkJCXBvICs9IGJ5dGVzX3Blcl9mcmFtZTsKLQkJfQotCX0KLQlpZiAoLS1saW5lNnBjbS0+aW1wdWxzZV9jb3VudCA8PSAwKSB7Ci0JCSgodW5zaWduZWQgY2hhciAqKSh1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXIpKVtieXRlc19wZXJfZnJhbWUgLQotCQkJCQkJCSAgICAgIDFdID0KLQkJICAgIGxpbmU2cGNtLT5pbXB1bHNlX3ZvbHVtZTsKLQkJbGluZTZwY20tPmltcHVsc2VfY291bnQgPSBsaW5lNnBjbS0+aW1wdWxzZV9wZXJpb2Q7Ci0JfQotfQotCi0jZW5kaWYKLQotLyoKLQlBZGQgc2lnbmFsIHRvIGJ1ZmZlciBmb3Igc29mdHdhcmUgbW9uaXRvcmluZy4KLSovCi1zdGF0aWMgdm9pZCBhZGRfbW9uaXRvcl9zaWduYWwoc3RydWN0IHVyYiAqdXJiX291dCwgdW5zaWduZWQgY2hhciAqc2lnbmFsLAotCQkJICAgICAgIGludCB2b2x1bWUsIGludCBieXRlc19wZXJfZnJhbWUpCi17Ci0JaWYgKHZvbHVtZSA9PSAwKQotCQlyZXR1cm47CQkvKiB6ZXJvIHZvbHVtZSAtIG5vIGNoYW5nZSAqLwotCi0JaWYgKGJ5dGVzX3Blcl9mcmFtZSA9PSA0KSB7Ci0JCXNob3J0ICpwaSwgKnBvLCAqYnVmX2VuZDsKLQotCQlwaSA9IChzaG9ydCAqKXNpZ25hbDsKLQkJcG8gPSAoc2hvcnQgKil1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXI7Ci0JCWJ1Zl9lbmQgPSBwbyArIHVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLyBzaXplb2YoKnBvKTsKLQotCQlmb3IgKDsgcG8gPCBidWZfZW5kOyArK3BpLCArK3BvKQotCQkJKnBvICs9ICgqcGkgKiB2b2x1bWUpID4+IDg7Ci0JfQotCi0JLyoKLQkgICBXZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBkZXZpY2VzIHdpdGggNiBieXRlcyBwZXIgZnJhbWUgaGVyZQotCSAgIHNpbmNlIHRoZXkgYWxsIHN1cHBvcnQgaGFyZHdhcmUgbW9uaXRvcmluZy4KLQkgKi8KLX0KLQotLyoKLQlGaW5kIGEgZnJlZSBVUkIsIHByZXBhcmUgYXVkaW8gZGF0YSwgYW5kIHN1Ym1pdCBVUkIuCi0qLwotc3RhdGljIGludCBzdWJtaXRfYXVkaW9fb3V0X3VyYihzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCi17Ci0JaW50IGluZGV4OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGksIHVyYl9zaXplLCB1cmJfZnJhbWVzOwotCWludCByZXQ7Ci0JY29uc3QgaW50IGJ5dGVzX3Blcl9mcmFtZSA9IGxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5ieXRlc19wZXJfZnJhbWU7Ci0JY29uc3QgaW50IGZyYW1lX2luY3JlbWVudCA9Ci0JICAgIGxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5zbmRfbGluZTZfcmF0ZXMucmF0c1swXS5udW1fbWluOwotCWNvbnN0IGludCBmcmFtZV9mYWN0b3IgPQotCSAgICBsaW5lNnBjbS0+cHJvcGVydGllcy0+c25kX2xpbmU2X3JhdGVzLnJhdHNbMF0uZGVuICoKLQkgICAgKFVTQl9JTlRFUlZBTFNfUEVSX1NFQ09ORCAvIExJTkU2X0lTT19JTlRFUlZBTCk7Ci0Jc3RydWN0IHVyYiAqdXJiX291dDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19vdXQsIGZsYWdzKTsKLQlpbmRleCA9Ci0JICAgIGZpbmRfZmlyc3RfemVyb19iaXQoJmxpbmU2cGNtLT5hY3RpdmVfdXJiX291dCwgTElORTZfSVNPX0JVRkZFUlMpOwotCi0JaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBMSU5FNl9JU09fQlVGRkVSUykgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19vdXQsIGZsYWdzKTsKLQkJZGV2X2VycihsaW5lNnBjbS0+bGluZTYtPmlmY2RldiwgIm5vIGZyZWUgVVJCIGZvdW5kXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JdXJiX291dCA9IGxpbmU2cGNtLT51cmJfYXVkaW9fb3V0W2luZGV4XTsKLQl1cmJfc2l6ZSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX1BBQ0tFVFM7ICsraSkgewotCQkvKiBjb21wdXRlIGZyYW1lIHNpemUgZm9yIGdpdmVuIHNhbXBsaW5nIHJhdGUgKi8KLQkJaW50IGZzaXplID0gMDsKLQkJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmZvdXQgPQotCQkgICAgJnVyYl9vdXQtPmlzb19mcmFtZV9kZXNjW2ldOwotCi0JCWlmIChsaW5lNnBjbS0+ZmxhZ3MgJiBMSU5FNl9CSVRTX0NBUFRVUkVfU1RSRUFNKQotCQkJZnNpemUgPSBsaW5lNnBjbS0+cHJldl9mc2l6ZTsKLQotCQlpZiAoZnNpemUgPT0gMCkgewotCQkJaW50IG47Ci0KLQkJCWxpbmU2cGNtLT5jb3VudF9vdXQgKz0gZnJhbWVfaW5jcmVtZW50OwotCQkJbiA9IGxpbmU2cGNtLT5jb3VudF9vdXQgLyBmcmFtZV9mYWN0b3I7Ci0JCQlsaW5lNnBjbS0+Y291bnRfb3V0IC09IG4gKiBmcmFtZV9mYWN0b3I7Ci0JCQlmc2l6ZSA9IG4gKiBieXRlc19wZXJfZnJhbWU7Ci0JCX0KLQotCQlmb3V0LT5vZmZzZXQgPSB1cmJfc2l6ZTsKLQkJZm91dC0+bGVuZ3RoID0gZnNpemU7Ci0JCXVyYl9zaXplICs9IGZzaXplOwotCX0KLQotCWlmICh1cmJfc2l6ZSA9PSAwKSB7Ci0JCS8qIGNhbid0IGRldGVybWluZSBVUkIgc2l6ZSAqLwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19vdXQsIGZsYWdzKTsKLQkJZGV2X2VycihsaW5lNnBjbS0+bGluZTYtPmlmY2RldiwgImRyaXZlciBidWc6IHVyYl9zaXplID0gMFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXVyYl9mcmFtZXMgPSB1cmJfc2l6ZSAvIGJ5dGVzX3Blcl9mcmFtZTsKLQl1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXIgPQotCSAgICBsaW5lNnBjbS0+YnVmZmVyX291dCArCi0JICAgIGluZGV4ICogTElORTZfSVNPX1BBQ0tFVFMgKiBsaW5lNnBjbS0+bWF4X3BhY2tldF9zaXplOwotCXVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSB1cmJfc2l6ZTsKLQl1cmJfb3V0LT5jb250ZXh0ID0gbGluZTZwY207Ci0KLQlpZiAodGVzdF9iaXQoTElORTZfSU5ERVhfUENNX0FMU0FfUExBWUJBQ0tfU1RSRUFNLCAmbGluZTZwY20tPmZsYWdzKSAmJgotCSAgICAhdGVzdF9iaXQoTElORTZfSU5ERVhfUEFVU0VfUExBWUJBQ0ssICZsaW5lNnBjbS0+ZmxhZ3MpKSB7Ci0JCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPQotCQkgICAgZ2V0X3N1YnN0cmVhbShsaW5lNnBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyktPnJ1bnRpbWU7Ci0KLQkJaWYgKGxpbmU2cGNtLT5wb3Nfb3V0ICsgdXJiX2ZyYW1lcyA+IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7Ci0JCQkvKgotCQkJICAgVGhlIHRyYW5zZmVycmVkIGFyZWEgZ29lcyBvdmVyIGJ1ZmZlciBib3VuZGFyeSwKLQkJCSAgIGNvcHkgdGhlIGRhdGEgdG8gdGhlIHRlbXAgYnVmZmVyLgotCQkJICovCi0JCQlpbnQgbGVuOwotCi0JCQlsZW4gPSBydW50aW1lLT5idWZmZXJfc2l6ZSAtIGxpbmU2cGNtLT5wb3Nfb3V0OwotCi0JCQlpZiAobGVuID4gMCkgewotCQkJCW1lbWNweSh1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXIsCi0JCQkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhICsKLQkJCQkgICAgICAgbGluZTZwY20tPnBvc19vdXQgKiBieXRlc19wZXJfZnJhbWUsCi0JCQkJICAgICAgIGxlbiAqIGJ5dGVzX3Blcl9mcmFtZSk7Ci0JCQkJbWVtY3B5KHVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlciArCi0JCQkJICAgICAgIGxlbiAqIGJ5dGVzX3Blcl9mcmFtZSwgcnVudGltZS0+ZG1hX2FyZWEsCi0JCQkJICAgICAgICh1cmJfZnJhbWVzIC0gbGVuKSAqIGJ5dGVzX3Blcl9mcmFtZSk7Ci0JCQl9IGVsc2UKLQkJCQlkZXZfZXJyKGxpbmU2cGNtLT5saW5lNi0+aWZjZGV2LCAiZHJpdmVyIGJ1ZzogbGVuID0gJWRcbiIsCi0JCQkJCWxlbik7Ci0JCX0gZWxzZSB7Ci0JCQltZW1jcHkodXJiX291dC0+dHJhbnNmZXJfYnVmZmVyLAotCQkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhICsKLQkJCSAgICAgICBsaW5lNnBjbS0+cG9zX291dCAqIGJ5dGVzX3Blcl9mcmFtZSwKLQkJCSAgICAgICB1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKLQkJfQotCi0JCWxpbmU2cGNtLT5wb3Nfb3V0ICs9IHVyYl9mcmFtZXM7Ci0JCWlmIChsaW5lNnBjbS0+cG9zX291dCA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJCWxpbmU2cGNtLT5wb3Nfb3V0IC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCX0gZWxzZSB7Ci0JCW1lbXNldCh1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXIsIDAsCi0JCSAgICAgICB1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKLQl9Ci0KLQljaGFuZ2Vfdm9sdW1lKHVyYl9vdXQsIGxpbmU2cGNtLT52b2x1bWVfcGxheWJhY2ssIGJ5dGVzX3Blcl9mcmFtZSk7Ci0KLQlpZiAobGluZTZwY20tPnByZXZfZmJ1ZiAhPSBOVUxMKSB7Ci0jaWZkZWYgQ09ORklHX0xJTkU2X1VTQl9JTVBVTFNFX1JFU1BPTlNFCi0JCWlmIChsaW5lNnBjbS0+ZmxhZ3MgJiBMSU5FNl9CSVRTX1BDTV9JTVBVTFNFKSB7Ci0JCQljcmVhdGVfaW1wdWxzZV90ZXN0X3NpZ25hbChsaW5lNnBjbSwgdXJiX291dCwKLQkJCQkJCSAgIGJ5dGVzX3Blcl9mcmFtZSk7Ci0JCQlpZiAobGluZTZwY20tPmZsYWdzICYKLQkJCSAgICBMSU5FNl9CSVRfUENNX0FMU0FfQ0FQVFVSRV9TVFJFQU0pIHsKLQkJCQlsaW5lNl9jYXB0dXJlX2NvcHkobGluZTZwY20sCi0JCQkJCQkgICB1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXIsCi0JCQkJCQkgICB1cmJfb3V0LT4KLQkJCQkJCSAgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwotCQkJCWxpbmU2X2NhcHR1cmVfY2hlY2tfcGVyaW9kKGxpbmU2cGNtLAotCQkJCQl1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKLQkJCX0KLQkJfSBlbHNlIHsKLSNlbmRpZgotCQkJaWYgKCEKLQkJCSAgICAobGluZTZwY20tPmxpbmU2LT4KLQkJCSAgICAgcHJvcGVydGllcy0+Y2FwYWJpbGl0aWVzICYgTElORTZfQklUX0hXTU9OKQotCQkJICAgICYmIChsaW5lNnBjbS0+ZmxhZ3MgJiBMSU5FNl9CSVRTX1BMQVlCQUNLX1NUUkVBTSkKLQkJCSAgICAmJiAobGluZTZwY20tPmZsYWdzICYgTElORTZfQklUU19DQVBUVVJFX1NUUkVBTSkpCi0JCQkJYWRkX21vbml0b3Jfc2lnbmFsKHVyYl9vdXQsIGxpbmU2cGNtLT5wcmV2X2ZidWYsCi0JCQkJCQkgICBsaW5lNnBjbS0+dm9sdW1lX21vbml0b3IsCi0JCQkJCQkgICBieXRlc19wZXJfZnJhbWUpOwotI2lmZGVmIENPTkZJR19MSU5FNl9VU0JfSU1QVUxTRV9SRVNQT05TRQotCQl9Ci0jZW5kaWYKLQl9Ci0KLQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmJfb3V0LCBHRlBfQVRPTUlDKTsKLQotCWlmIChyZXQgPT0gMCkKLQkJc2V0X2JpdChpbmRleCwgJmxpbmU2cGNtLT5hY3RpdmVfdXJiX291dCk7Ci0JZWxzZQotCQlkZXZfZXJyKGxpbmU2cGNtLT5saW5lNi0+aWZjZGV2LAotCQkJIlVSQiBvdXQgIyVkIHN1Ym1pc3Npb24gZmFpbGVkICglZClcbiIsIGluZGV4LCByZXQpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTZwY20tPmxvY2tfYXVkaW9fb3V0LCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0JU3VibWl0IGFsbCBjdXJyZW50bHkgYXZhaWxhYmxlIHBsYXliYWNrIFVSQnMuCi0qLwotaW50IGxpbmU2X3N1Ym1pdF9hdWRpb19vdXRfYWxsX3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQotewotCWludCByZXQsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX0JVRkZFUlM7ICsraSkgewotCQlyZXQgPSBzdWJtaXRfYXVkaW9fb3V0X3VyYihsaW5lNnBjbSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLQlVbmxpbmsgYWxsIGN1cnJlbnRseSBhY3RpdmUgcGxheWJhY2sgVVJCcy4KLSovCi12b2lkIGxpbmU2X3VubGlua19hdWRpb19vdXRfdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSBMSU5FNl9JU09fQlVGRkVSUzsgaS0tOykgewotCQlpZiAodGVzdF9iaXQoaSwgJmxpbmU2cGNtLT5hY3RpdmVfdXJiX291dCkpIHsKLQkJCWlmICghdGVzdF9hbmRfc2V0X2JpdChpLCAmbGluZTZwY20tPnVubGlua191cmJfb3V0KSkgewotCQkJCXN0cnVjdCB1cmIgKnUgPSBsaW5lNnBjbS0+dXJiX2F1ZGlvX291dFtpXTsKLQotCQkJCXVzYl91bmxpbmtfdXJiKHUpOwotCQkJfQotCQl9Ci0JfQotfQotCi0vKgotCVdhaXQgdW50aWwgdW5saW5raW5nIG9mIGFsbCBjdXJyZW50bHkgYWN0aXZlIHBsYXliYWNrIFVSQnMgaGFzIGJlZW4KLQlmaW5pc2hlZC4KLSovCi12b2lkIGxpbmU2X3dhaXRfY2xlYXJfYXVkaW9fb3V0X3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQotewotCWludCB0aW1lb3V0ID0gSFo7Ci0JdW5zaWduZWQgaW50IGk7Ci0JaW50IGFsaXZlOwotCi0JZG8gewotCQlhbGl2ZSA9IDA7Ci0JCWZvciAoaSA9IExJTkU2X0lTT19CVUZGRVJTOyBpLS07KSB7Ci0JCQlpZiAodGVzdF9iaXQoaSwgJmxpbmU2cGNtLT5hY3RpdmVfdXJiX291dCkpCi0JCQkJYWxpdmUrKzsKLQkJfQotCQlpZiAoIWFsaXZlKQotCQkJYnJlYWs7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJc2NoZWR1bGVfdGltZW91dCgxKTsKLQl9IHdoaWxlICgtLXRpbWVvdXQgPiAwKTsKLQlpZiAoYWxpdmUpCi0JCXNuZF9wcmludGsoS0VSTl9FUlIgInRpbWVvdXQ6IHN0aWxsICVkIGFjdGl2ZSB1cmJzLi5cbiIsIGFsaXZlKTsKLX0KLQotLyoKLQlVbmxpbmsgYWxsIGN1cnJlbnRseSBhY3RpdmUgcGxheWJhY2sgVVJCcywgYW5kIHdhaXQgZm9yIGZpbmlzaGluZy4KLSovCi12b2lkIGxpbmU2X3VubGlua193YWl0X2NsZWFyX2F1ZGlvX291dF91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKLXsKLQlsaW5lNl91bmxpbmtfYXVkaW9fb3V0X3VyYnMobGluZTZwY20pOwotCWxpbmU2X3dhaXRfY2xlYXJfYXVkaW9fb3V0X3VyYnMobGluZTZwY20pOwotfQotCi12b2lkIGxpbmU2X2ZyZWVfcGxheWJhY2tfYnVmZmVyKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKLXsKLQlrZnJlZShsaW5lNnBjbS0+YnVmZmVyX291dCk7Ci0JbGluZTZwY20tPmJ1ZmZlcl9vdXQgPSBOVUxMOwotfQotCi0vKgotCUNhbGxiYWNrIGZvciBjb21wbGV0ZWQgcGxheWJhY2sgVVJCLgotKi8KLXN0YXRpYyB2b2lkIGF1ZGlvX291dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCi17Ci0JaW50IGksIGluZGV4LCBsZW5ndGggPSAwLCBzaHV0ZG93biA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSAoc3RydWN0IHNuZF9saW5lNl9wY20gKil1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPQotCSAgICBnZXRfc3Vic3RyZWFtKGxpbmU2cGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKTsKLQotI2lmIFVTRV9DTEVBUl9CVUZGRVJfV09SS0FST1VORAotCW1lbXNldCh1cmItPnRyYW5zZmVyX2J1ZmZlciwgMCwgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKLSNlbmRpZgotCi0JbGluZTZwY20tPmxhc3RfZnJhbWVfb3V0ID0gdXJiLT5zdGFydF9mcmFtZTsKLQotCS8qIGZpbmQgaW5kZXggb2YgVVJCICovCi0JZm9yIChpbmRleCA9IExJTkU2X0lTT19CVUZGRVJTOyBpbmRleC0tOykKLQkJaWYgKHVyYiA9PSBsaW5lNnBjbS0+dXJiX2F1ZGlvX291dFtpbmRleF0pCi0JCQlicmVhazsKLQotCWlmIChpbmRleCA8IDApCi0JCXJldHVybjsJCS8qIFVSQiBoYXMgYmVlbiB1bmxpbmtlZCBhc3luY2hyb25vdXNseSAqLwotCi0JZm9yIChpID0gTElORTZfSVNPX1BBQ0tFVFM7IGktLTspCi0JCWxlbmd0aCArPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lNnBjbS0+bG9ja19hdWRpb19vdXQsIGZsYWdzKTsKLQotCWlmICh0ZXN0X2JpdChMSU5FNl9JTkRFWF9QQ01fQUxTQV9QTEFZQkFDS19TVFJFQU0sICZsaW5lNnBjbS0+ZmxhZ3MpKSB7Ci0JCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0KLQkJbGluZTZwY20tPnBvc19vdXRfZG9uZSArPQotCQkgICAgbGVuZ3RoIC8gbGluZTZwY20tPnByb3BlcnRpZXMtPmJ5dGVzX3Blcl9mcmFtZTsKLQotCQlpZiAobGluZTZwY20tPnBvc19vdXRfZG9uZSA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKLQkJCWxpbmU2cGNtLT5wb3Nfb3V0X2RvbmUgLT0gcnVudGltZS0+YnVmZmVyX3NpemU7Ci0JfQotCi0JY2xlYXJfYml0KGluZGV4LCAmbGluZTZwY20tPmFjdGl2ZV91cmJfb3V0KTsKLQotCWZvciAoaSA9IExJTkU2X0lTT19QQUNLRVRTOyBpLS07KQotCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgPT0gLUVYREVWKSB7Ci0JCQlzaHV0ZG93biA9IDE7Ci0JCQlicmVhazsKLQkJfQotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChpbmRleCwgJmxpbmU2cGNtLT51bmxpbmtfdXJiX291dCkpCi0JCXNodXRkb3duID0gMTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2cGNtLT5sb2NrX2F1ZGlvX291dCwgZmxhZ3MpOwotCi0JaWYgKCFzaHV0ZG93bikgewotCQlzdWJtaXRfYXVkaW9fb3V0X3VyYihsaW5lNnBjbSk7Ci0KLQkJaWYgKHRlc3RfYml0KExJTkU2X0lOREVYX1BDTV9BTFNBX1BMQVlCQUNLX1NUUkVBTSwKLQkJCSAgICAgJmxpbmU2cGNtLT5mbGFncykpIHsKLQkJCWxpbmU2cGNtLT5ieXRlc19vdXQgKz0gbGVuZ3RoOwotCQkJaWYgKGxpbmU2cGNtLT5ieXRlc19vdXQgPj0gbGluZTZwY20tPnBlcmlvZF9vdXQpIHsKLQkJCQlsaW5lNnBjbS0+Ynl0ZXNfb3V0ICU9IGxpbmU2cGNtLT5wZXJpb2Rfb3V0OwotCQkJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKLQkJCX0KLQkJfQotCX0KLX0KLQotLyogb3BlbiBwbGF5YmFjayBjYWxsYmFjayAqLwotc3RhdGljIGludCBzbmRfbGluZTZfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7Ci0Jc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCi0JZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X3JhdGRlbnMocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCi0JCQkJCSAgICAoJmxpbmU2cGNtLT4KLQkJCQkJICAgICBwcm9wZXJ0aWVzLT5zbmRfbGluZTZfcmF0ZXMpKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCXJ1bnRpbWUtPmh3ID0gbGluZTZwY20tPnByb3BlcnRpZXMtPnNuZF9saW5lNl9wbGF5YmFja19odzsKLQlyZXR1cm4gMDsKLX0KLQotLyogY2xvc2UgcGxheWJhY2sgY2FsbGJhY2sgKi8KLXN0YXRpYyBpbnQgc25kX2xpbmU2X3BsYXliYWNrX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXJldHVybiAwOwotfQotCi0vKiBod19wYXJhbXMgcGxheWJhY2sgY2FsbGJhY2sgKi8KLXN0YXRpYyBpbnQgc25kX2xpbmU2X3BsYXliYWNrX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0KLQkvKiAtLSBGbG9yaWFuIERlbXNraSBbRkRdICovCi0JLyogZG9uJ3QgYXNrIG1lIHdoeSwgYnV0IHRoaXMgZml4ZXMgdGhlIGJ1ZyBvbiBteSBtYWNoaW5lICovCi0JaWYgKGxpbmU2cGNtID09IE5VTEwpIHsKLQkJaWYgKHN1YnN0cmVhbS0+cGNtID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJaWYgKHN1YnN0cmVhbS0+cGNtLT5wcml2YXRlX2RhdGEgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQlzdWJzdHJlYW0tPnByaXZhdGVfZGF0YSA9IHN1YnN0cmVhbS0+cGNtLT5wcml2YXRlX2RhdGE7Ci0JCWxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCX0KLQkvKiAtLSBbRkRdIGVuZCAqLwotCi0JcmV0ID0gbGluZTZfcGNtX2FjcXVpcmUobGluZTZwY20sIExJTkU2X0JJVF9QQ01fQUxTQV9QTEFZQkFDS19CVUZGRVIpOwotCi0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBzbmRfcGNtX2xpYl9tYWxsb2NfcGFnZXMoc3Vic3RyZWFtLAotCQkJCSAgICAgICBwYXJhbXNfYnVmZmVyX2J5dGVzKGh3X3BhcmFtcykpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWxpbmU2X3BjbV9yZWxlYXNlKGxpbmU2cGNtLCBMSU5FNl9CSVRfUENNX0FMU0FfUExBWUJBQ0tfQlVGRkVSKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlsaW5lNnBjbS0+cGVyaW9kX291dCA9IHBhcmFtc19wZXJpb2RfYnl0ZXMoaHdfcGFyYW1zKTsKLQlyZXR1cm4gMDsKLX0KLQotLyogaHdfZnJlZSBwbGF5YmFjayBjYWxsYmFjayAqLwotc3RhdGljIGludCBzbmRfbGluZTZfcGxheWJhY2tfaHdfZnJlZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0KLQlsaW5lNl9wY21fcmVsZWFzZShsaW5lNnBjbSwgTElORTZfQklUX1BDTV9BTFNBX1BMQVlCQUNLX0JVRkZFUik7Ci0JcmV0dXJuIHNuZF9wY21fbGliX2ZyZWVfcGFnZXMoc3Vic3RyZWFtKTsKLX0KLQotLyogdHJpZ2dlciBwbGF5YmFjayBjYWxsYmFjayAqLwotaW50IHNuZF9saW5lNl9wbGF5YmFja190cmlnZ2VyKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSwgaW50IGNtZCkKLXsKLQlpbnQgZXJyOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotI2lmZGVmIENPTkZJR19QTQotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgotI2VuZGlmCi0JCWVyciA9IGxpbmU2X3BjbV9hY3F1aXJlKGxpbmU2cGNtLAotCQkJCQlMSU5FNl9CSVRfUENNX0FMU0FfUExBWUJBQ0tfU1RSRUFNKTsKLQotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0jaWZkZWYgQ09ORklHX1BNCi0JY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgotI2VuZGlmCi0JCWVyciA9IGxpbmU2X3BjbV9yZWxlYXNlKGxpbmU2cGNtLAotCQkJCQlMSU5FNl9CSVRfUENNX0FMU0FfUExBWUJBQ0tfU1RSRUFNKTsKLQotCQlpZiAoZXJyIDwgMCkKLQkJCXJldHVybiBlcnI7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6Ci0JCXNldF9iaXQoTElORTZfSU5ERVhfUEFVU0VfUExBWUJBQ0ssICZsaW5lNnBjbS0+ZmxhZ3MpOwotCQlicmVhazsKLQotCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKLQkJY2xlYXJfYml0KExJTkU2X0lOREVYX1BBVVNFX1BMQVlCQUNLLCAmbGluZTZwY20tPmZsYWdzKTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogcGxheWJhY2sgcG9pbnRlciBjYWxsYmFjayAqLwotc3RhdGljIHNuZF9wY21fdWZyYW1lc190Ci1zbmRfbGluZTZfcGxheWJhY2tfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKLXsKLQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7Ci0KLQlyZXR1cm4gbGluZTZwY20tPnBvc19vdXRfZG9uZTsKLX0KLQotLyogcGxheWJhY2sgb3BlcmF0b3JzICovCi1zdHJ1Y3Qgc25kX3BjbV9vcHMgc25kX2xpbmU2X3BsYXliYWNrX29wcyA9IHsKLQkub3BlbiA9IHNuZF9saW5lNl9wbGF5YmFja19vcGVuLAotCS5jbG9zZSA9IHNuZF9saW5lNl9wbGF5YmFja19jbG9zZSwKLQkuaW9jdGwgPSBzbmRfcGNtX2xpYl9pb2N0bCwKLQkuaHdfcGFyYW1zID0gc25kX2xpbmU2X3BsYXliYWNrX2h3X3BhcmFtcywKLQkuaHdfZnJlZSA9IHNuZF9saW5lNl9wbGF5YmFja19od19mcmVlLAotCS5wcmVwYXJlID0gc25kX2xpbmU2X3ByZXBhcmUsCi0JLnRyaWdnZXIgPSBzbmRfbGluZTZfdHJpZ2dlciwKLQkucG9pbnRlciA9IHNuZF9saW5lNl9wbGF5YmFja19wb2ludGVyLAotfTsKLQotaW50IGxpbmU2X2NyZWF0ZV9hdWRpb19vdXRfdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCi17Ci0JaW50IGk7Ci0KLQkvKiBjcmVhdGUgYXVkaW8gVVJCcyBhbmQgZmlsbCBpbiBjb25zdGFudCB2YWx1ZXM6ICovCi0JZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19CVUZGRVJTOyArK2kpIHsKLQkJc3RydWN0IHVyYiAqdXJiOwotCi0JCS8qIFVSQiBmb3IgYXVkaW8gb3V0OiAqLwotCQl1cmIgPSBsaW5lNnBjbS0+dXJiX2F1ZGlvX291dFtpXSA9Ci0JCSAgICB1c2JfYWxsb2NfdXJiKExJTkU2X0lTT19QQUNLRVRTLCBHRlBfS0VSTkVMKTsKLQotCQlpZiAodXJiID09IE5VTEwpIHsKLQkJCWRldl9lcnIobGluZTZwY20tPmxpbmU2LT5pZmNkZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJdXJiLT5kZXYgPSBsaW5lNnBjbS0+bGluZTYtPnVzYmRldjsKLQkJdXJiLT5waXBlID0KLQkJICAgIHVzYl9zbmRpc29jcGlwZShsaW5lNnBjbS0+bGluZTYtPnVzYmRldiwKLQkJCQkgICAgbGluZTZwY20tPmVwX2F1ZGlvX3dyaXRlICYKLQkJCQkgICAgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLKTsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKLQkJdXJiLT5zdGFydF9mcmFtZSA9IC0xOwotCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gTElORTZfSVNPX1BBQ0tFVFM7Ci0JCXVyYi0+aW50ZXJ2YWwgPSBMSU5FNl9JU09fSU5URVJWQUw7Ci0JCXVyYi0+ZXJyb3JfY291bnQgPSAwOwotCQl1cmItPmNvbXBsZXRlID0gYXVkaW9fb3V0X2NhbGxiYWNrOwotCX0KLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZC5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTNmMTY3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wb2QuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKgotICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOS4xYmV0YQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCi0gKgotICovCi0KLSNpZm5kZWYgUE9EX0gKLSNkZWZpbmUgUE9EX0gKLQotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0KLSNpbmNsdWRlICJkcml2ZXIuaCIKLQotLyoKLQlQT0R4dCBMaXZlIGludGVyZmFjZXMKLSovCi0jZGVmaW5lIFBPRFhUTElWRV9JTlRFUkZBQ0VfUE9EICAgIDAKLSNkZWZpbmUgUE9EWFRMSVZFX0lOVEVSRkFDRV9WQVJJQVggMQotCi0vKgotCUxvY2F0ZSBuYW1lIGluIGJpbmFyeSBwcm9ncmFtIGR1bXAKLSovCi0jZGVmaW5lCVBPRF9OQU1FX09GRlNFVCAwCi0jZGVmaW5lCVBPRF9OQU1FX0xFTkdUSCAxNgotCi0vKgotCU90aGVyIGNvbnN0YW50cwotKi8KLSNkZWZpbmUgUE9EX0NPTlRST0xfU0laRSAweDgwCi0jZGVmaW5lIFBPRF9CVUZTSVpFX0RVTVBSRVEgNwotI2RlZmluZSBQT0RfU1RBUlRVUF9ERUxBWSAxMDAwCi0KLS8qCi0JU3RhZ2VzIG9mIFBPRCBzdGFydHVwIHByb2NlZHVyZQotKi8KLWVudW0gewotCVBPRF9TVEFSVFVQX0lOSVQgPSAxLAotCVBPRF9TVEFSVFVQX1ZFUlNJT05SRVEsCi0JUE9EX1NUQVJUVVBfV09SS1FVRVVFLAotCVBPRF9TVEFSVFVQX1NFVFVQLAotCVBPRF9TVEFSVFVQX0xBU1QgPSBQT0RfU1RBUlRVUF9TRVRVUCAtIDEKLX07Ci0KLXN0cnVjdCB1c2JfbGluZTZfcG9kIHsKLQkvKioKLQkJR2VuZXJpYyBMaW5lNiBVU0IgZGF0YS4KLQkqLwotCXN0cnVjdCB1c2JfbGluZTYgbGluZTY7Ci0KLQkvKioKLQkJSW5zdHJ1bWVudCBtb25pdG9yIGxldmVsLgotCSovCi0JaW50IG1vbml0b3JfbGV2ZWw7Ci0KLQkvKioKLQkJVGltZXIgZm9yIGRldmljZSBpbml0aWFsaXphdG9uLgotCSovCi0Jc3RydWN0IHRpbWVyX2xpc3Qgc3RhcnR1cF90aW1lcjsKLQotCS8qKgotCQlXb3JrIGhhbmRsZXIgZm9yIGRldmljZSBpbml0aWFsaXphdG9uLgotCSovCi0Jc3RydWN0IHdvcmtfc3RydWN0IHN0YXJ0dXBfd29yazsKLQotCS8qKgotCQlDdXJyZW50IHByb2dyZXNzIGluIHN0YXJ0dXAgcHJvY2VkdXJlLgotCSovCi0JaW50IHN0YXJ0dXBfcHJvZ3Jlc3M7Ci0KLQkvKioKLQkJU2VyaWFsIG51bWJlciBvZiBkZXZpY2UuCi0JKi8KLQlpbnQgc2VyaWFsX251bWJlcjsKLQotCS8qKgotCQlGaXJtd2FyZSB2ZXJzaW9uICh4IDEwMCkuCi0JKi8KLQlpbnQgZmlybXdhcmVfdmVyc2lvbjsKLQotCS8qKgotCQlEZXZpY2UgSUQuCi0JKi8KLQlpbnQgZGV2aWNlX2lkOwotfTsKLQotZXh0ZXJuIHZvaWQgbGluZTZfcG9kX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7Ci1leHRlcm4gaW50IGxpbmU2X3BvZF9pbml0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0JCQkgIHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QpOwotZXh0ZXJuIHZvaWQgbGluZTZfcG9kX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kKTsKLWV4dGVybiB2b2lkIGxpbmU2X3BvZF90cmFuc21pdF9wYXJhbWV0ZXIoc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCwgaW50IHBhcmFtLAotCQkJCQkgdTggdmFsdWUpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wb2RoZC5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZGhkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZjQ1NDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZGhkLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTQgKzAsMCBAQAotLyoKLSAqIExpbmU2IFBvZCBIRAotICoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBTdGVmYW4gSGFqbm9jemkgPHN0ZWZhbmhhQGdtYWlsLmNvbT4KLSAqCi0gKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLQotI2luY2x1ZGUgImF1ZGlvLmgiCi0jaW5jbHVkZSAiZHJpdmVyLmgiCi0jaW5jbHVkZSAicGNtLmgiCi0jaW5jbHVkZSAicG9kaGQuaCIKLQotI2RlZmluZSBQT0RIRF9CWVRFU19QRVJfRlJBTUUgNgkvKiAyNGJpdCBhdWRpbyAoc3RlcmVvKSAqLwotCi1zdGF0aWMgc3RydWN0IHNuZF9yYXRkZW4gcG9kaGRfcmF0ZGVuID0gewotCS5udW1fbWluID0gNDgwMDAsCi0JLm51bV9tYXggPSA0ODAwMCwKLQkubnVtX3N0ZXAgPSAxLAotCS5kZW4gPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBsaW5lNl9wY21fcHJvcGVydGllcyBwb2RoZF9wY21fcHJvcGVydGllcyA9IHsKLQkuc25kX2xpbmU2X3BsYXliYWNrX2h3ID0gewotCQkJCSAgLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8Ci0JCQkJCSAgIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKLQkJCQkJICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAotCQkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKLQkJCQkJICAgU05EUlZfUENNX0lORk9fUEFVU0UgfAotI2lmZGVmIENPTkZJR19QTQotCQkJCQkgICBTTkRSVl9QQ01fSU5GT19SRVNVTUUgfAotI2VuZGlmCi0JCQkJCSAgIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQpLAotCQkJCSAgLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUsCi0JCQkJICAucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKLQkJCQkgIC5yYXRlX21pbiA9IDQ4MDAwLAotCQkJCSAgLnJhdGVfbWF4ID0gNDgwMDAsCi0JCQkJICAuY2hhbm5lbHNfbWluID0gMiwKLQkJCQkgIC5jaGFubmVsc19tYXggPSAyLAotCQkJCSAgLmJ1ZmZlcl9ieXRlc19tYXggPSA2MDAwMCwKLQkJCQkgIC5wZXJpb2RfYnl0ZXNfbWluID0gNjQsCi0JCQkJICAucGVyaW9kX2J5dGVzX21heCA9IDgxOTIsCi0JCQkJICAucGVyaW9kc19taW4gPSAxLAotCQkJCSAgLnBlcmlvZHNfbWF4ID0gMTAyNH0sCi0JLnNuZF9saW5lNl9jYXB0dXJlX2h3ID0gewotCQkJCSAuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKLQkJCQkJICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8Ci0JCQkJCSAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAotCQkJCQkgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAotI2lmZGVmIENPTkZJR19QTQotCQkJCQkgIFNORFJWX1BDTV9JTkZPX1JFU1VNRSB8Ci0jZW5kaWYKLQkJCQkJICBTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUKSwKLQkJCQkgLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUsCi0JCQkJIC5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzQ4MDAwLAotCQkJCSAucmF0ZV9taW4gPSA0ODAwMCwKLQkJCQkgLnJhdGVfbWF4ID0gNDgwMDAsCi0JCQkJIC5jaGFubmVsc19taW4gPSAyLAotCQkJCSAuY2hhbm5lbHNfbWF4ID0gMiwKLQkJCQkgLmJ1ZmZlcl9ieXRlc19tYXggPSA2MDAwMCwKLQkJCQkgLnBlcmlvZF9ieXRlc19taW4gPSA2NCwKLQkJCQkgLnBlcmlvZF9ieXRlc19tYXggPSA4MTkyLAotCQkJCSAucGVyaW9kc19taW4gPSAxLAotCQkJCSAucGVyaW9kc19tYXggPSAxMDI0fSwKLQkuc25kX2xpbmU2X3JhdGVzID0gewotCQkJICAgIC5ucmF0cyA9IDEsCi0JCQkgICAgLnJhdHMgPSAmcG9kaGRfcmF0ZGVufSwKLQkuYnl0ZXNfcGVyX2ZyYW1lID0gUE9ESERfQllURVNfUEVSX0ZSQU1FCi19OwotCi0vKgotCVBPRCBIRCBkZXN0cnVjdG9yLgotKi8KLXN0YXRpYyB2b2lkIHBvZGhkX2Rlc3RydWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCi17Ci0Jc3RydWN0IHVzYl9saW5lNl9wb2RoZCAqcG9kaGQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0KLQlpZiAocG9kaGQgPT0gTlVMTCkKLQkJcmV0dXJuOwotCWxpbmU2X2NsZWFudXBfYXVkaW8oJnBvZGhkLT5saW5lNik7Ci19Ci0KLS8qCi0JVHJ5IHRvIGluaXQgUE9EIEhEIGRldmljZS4KLSovCi1zdGF0aWMgaW50IHBvZGhkX3RyeV9pbml0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0JCQkgIHN0cnVjdCB1c2JfbGluZTZfcG9kaGQgKnBvZGhkKQotewotCWludCBlcnI7Ci0Jc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSAmcG9kaGQtPmxpbmU2OwotCi0JaWYgKChpbnRlcmZhY2UgPT0gTlVMTCkgfHwgKHBvZGhkID09IE5VTEwpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIGluaXRpYWxpemUgYXVkaW8gc3lzdGVtOiAqLwotCWVyciA9IGxpbmU2X2luaXRfYXVkaW8obGluZTYpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JLyogaW5pdGlhbGl6ZSBNSURJIHN1YnN5c3RlbTogKi8KLQllcnIgPSBsaW5lNl9pbml0X21pZGkobGluZTYpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JLyogaW5pdGlhbGl6ZSBQQ00gc3Vic3lzdGVtOiAqLwotCWVyciA9IGxpbmU2X2luaXRfcGNtKGxpbmU2LCAmcG9kaGRfcGNtX3Byb3BlcnRpZXMpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JLyogcmVnaXN0ZXIgVVNCIGF1ZGlvIHN5c3RlbTogKi8KLQllcnIgPSBsaW5lNl9yZWdpc3Rlcl9hdWRpbyhsaW5lNik7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoKLQlJbml0IFBPRCBIRCBkZXZpY2UgKGFuZCBjbGVhbiB1cCBpbiBjYXNlIG9mIGZhaWx1cmUpLgotKi8KLWludCBsaW5lNl9wb2RoZF9pbml0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCi0JCSAgICAgc3RydWN0IHVzYl9saW5lNl9wb2RoZCAqcG9kaGQpCi17Ci0JaW50IGVyciA9IHBvZGhkX3RyeV9pbml0KGludGVyZmFjZSwgcG9kaGQpOwotCi0JaWYgKGVyciA8IDApCi0JCXBvZGhkX2Rlc3RydWN0KGludGVyZmFjZSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotCVBPRCBIRCBkZXZpY2UgZGlzY29ubmVjdGVkLgotKi8KLXZvaWQgbGluZTZfcG9kaGRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQotewotCXN0cnVjdCB1c2JfbGluZTZfcG9kaGQgKnBvZGhkOwotCi0JaWYgKGludGVyZmFjZSA9PSBOVUxMKQotCQlyZXR1cm47Ci0JcG9kaGQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0KLQlpZiAocG9kaGQgIT0gTlVMTCkgewotCQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBwb2RoZC0+bGluZTYubGluZTZwY207Ci0KLQkJaWYgKGxpbmU2cGNtICE9IE5VTEwpCi0JCQlsaW5lNl9wY21fZGlzY29ubmVjdChsaW5lNnBjbSk7Ci0JfQotCi0JcG9kaGRfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wb2RoZC5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZGhkLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MmY3NDAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZGhkLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0vKgotICogTGluZTYgUG9kIEhECi0gKgotICogQ29weXJpZ2h0IChDKSAyMDExIFN0ZWZhbiBIYWpub2N6aSA8c3RlZmFuaGFAZ21haWwuY29tPgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgotICoKLSAqLwotCi0jaWZuZGVmIFBPREhEX0gKLSNkZWZpbmUgUE9ESERfSAotCi0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0KLSNpbmNsdWRlICJkcml2ZXIuaCIKLQotc3RydWN0IHVzYl9saW5lNl9wb2RoZCB7Ci0JLyoqCi0JCUdlbmVyaWMgTGluZTYgVVNCIGRhdGEuCi0JKi8KLQlzdHJ1Y3QgdXNiX2xpbmU2IGxpbmU2OwotfTsKLQotZXh0ZXJuIHZvaWQgbGluZTZfcG9kaGRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKLWV4dGVybiBpbnQgbGluZTZfcG9kaGRfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAotCQkJICAgIHN0cnVjdCB1c2JfbGluZTZfcG9kaGQgKnBvZGhkKTsKLQotI2VuZGlmIC8qIFBPREhEX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9yZXZpc2lvbi5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3JldmlzaW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0ZWVlMmIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3JldmlzaW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNpZm5kZWYgRFJJVkVSX1JFVklTSU9OCi0vKiBjdXJyZW50IHN1YnZlcnNpb24gcmV2aXNpb24gKi8KLSNkZWZpbmUgRFJJVkVSX1JFVklTSU9OICIgKDkwNCkiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi90b25lcG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3RvbmVwb3J0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NDM3MTUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3RvbmVwb3J0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NjAgKzAsMCBAQAotLyoKLSAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjkuMWJldGEKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQotICogICAgICAgICAgICAgICAgICAgICAgICAgRW1pbCBNeWhybWFuIChlbWlsLm15aHJtYW5AZ21haWwuY29tKQotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KLQotI2luY2x1ZGUgImF1ZGlvLmgiCi0jaW5jbHVkZSAiY2FwdHVyZS5oIgotI2luY2x1ZGUgImRyaXZlci5oIgotI2luY2x1ZGUgInBsYXliYWNrLmgiCi0jaW5jbHVkZSAidG9uZXBvcnQuaCIKLQotc3RhdGljIGludCB0b25lcG9ydF9zZW5kX2NtZChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2LCBpbnQgY21kMSwgaW50IGNtZDIpOwotCi0jZGVmaW5lIFRPTkVQT1JUX1BDTV9ERUxBWSAxCi0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3JhdGRlbiB0b25lcG9ydF9yYXRkZW4gPSB7Ci0JLm51bV9taW4gPSA0NDEwMCwKLQkubnVtX21heCA9IDQ0MTAwLAotCS5udW1fc3RlcCA9IDEsCi0JLmRlbiA9IDEKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbGluZTZfcGNtX3Byb3BlcnRpZXMgdG9uZXBvcnRfcGNtX3Byb3BlcnRpZXMgPSB7Ci0JLnNuZF9saW5lNl9wbGF5YmFja19odyA9IHsKLQkJCQkgIC5pbmZvID0gKFNORFJWX1BDTV9JTkZPX01NQVAgfAotCQkJCQkgICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8Ci0JCQkJCSAgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKLQkJCQkJICAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8Ci0JCQkJCSAgIFNORFJWX1BDTV9JTkZPX1BBVVNFIHwKLSNpZmRlZiBDT05GSUdfUE0KLQkJCQkJICAgU05EUlZfUENNX0lORk9fUkVTVU1FIHwKLSNlbmRpZgotCQkJCQkgICBTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUKSwKLQkJCQkgIC5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCi0JCQkJICAucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9LTk9ULAotCQkJCSAgLnJhdGVfbWluID0gNDQxMDAsCi0JCQkJICAucmF0ZV9tYXggPSA0NDEwMCwKLQkJCQkgIC5jaGFubmVsc19taW4gPSAyLAotCQkJCSAgLmNoYW5uZWxzX21heCA9IDIsCi0JCQkJICAuYnVmZmVyX2J5dGVzX21heCA9IDYwMDAwLAotCQkJCSAgLnBlcmlvZF9ieXRlc19taW4gPSA2NCwKLQkJCQkgIC5wZXJpb2RfYnl0ZXNfbWF4ID0gODE5MiwKLQkJCQkgIC5wZXJpb2RzX21pbiA9IDEsCi0JCQkJICAucGVyaW9kc19tYXggPSAxMDI0fSwKLQkuc25kX2xpbmU2X2NhcHR1cmVfaHcgPSB7Ci0JCQkJIC5pbmZvID0gKFNORFJWX1BDTV9JTkZPX01NQVAgfAotCQkJCQkgIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKLQkJCQkJICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8Ci0JCQkJCSAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCB8Ci0jaWZkZWYgQ09ORklHX1BNCi0JCQkJCSAgU05EUlZfUENNX0lORk9fUkVTVU1FIHwKLSNlbmRpZgotCQkJCQkgIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQpLAotCQkJCSAuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAotCQkJCSAucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9LTk9ULAotCQkJCSAucmF0ZV9taW4gPSA0NDEwMCwKLQkJCQkgLnJhdGVfbWF4ID0gNDQxMDAsCi0JCQkJIC5jaGFubmVsc19taW4gPSAyLAotCQkJCSAuY2hhbm5lbHNfbWF4ID0gMiwKLQkJCQkgLmJ1ZmZlcl9ieXRlc19tYXggPSA2MDAwMCwKLQkJCQkgLnBlcmlvZF9ieXRlc19taW4gPSA2NCwKLQkJCQkgLnBlcmlvZF9ieXRlc19tYXggPSA4MTkyLAotCQkJCSAucGVyaW9kc19taW4gPSAxLAotCQkJCSAucGVyaW9kc19tYXggPSAxMDI0fSwKLQkuc25kX2xpbmU2X3JhdGVzID0gewotCQkJICAgIC5ucmF0cyA9IDEsCi0JCQkgICAgLnJhdHMgPSAmdG9uZXBvcnRfcmF0ZGVufSwKLQkuYnl0ZXNfcGVyX2ZyYW1lID0gNAotfTsKLQotLyoKLQlGb3IgdGhlIGxlZCBvbiBHdWl0YXJwb3J0LgotCUJyaWdodG5lc3MgZ29lcyBmcm9tIDB4MDAgdG8gMHgyNi4gU2V0IGEgdmFsdWUgYWJvdmUgdGhpcyB0byBoYXZlIGxlZAotCWJsaW5rLgotCSh2b2lkIGNtZF8weDAyKGJ5dGUgcmVkLCBieXRlIGdyZWVuKQotKi8KLXN0YXRpYyBpbnQgbGVkX3JlZCA9IDB4MDA7Ci1zdGF0aWMgaW50IGxlZF9ncmVlbiA9IDB4MjY7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgewotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JaW50IGNvZGU7Ci19IHRvbmVwb3J0X3NvdXJjZV9pbmZvW10gPSB7Ci0JeyJNaWNyb3Bob25lIiwgMHgwYTAxfSwKLQl7IkxpbmUiLCAweDA4MDF9LAotCXsiSW5zdHJ1bWVudCIsIDB4MGIwMX0sCi0JeyJJbnN0ICYgTWljIiwgMHgwOTAxfQotfTsKLQotc3RhdGljIGJvb2wgdG9uZXBvcnRfaGFzX2xlZChzaG9ydCBwcm9kdWN0KQotewotCXJldHVybgotCSAgICAocHJvZHVjdCA9PSBMSU5FNl9ERVZJRF9HVUlUQVJQT1JUKSB8fAotCSAgICAocHJvZHVjdCA9PSBMSU5FNl9ERVZJRF9UT05FUE9SVF9HWCk7Ci0JLyogYWRkIHlvdXIgZGV2aWNlIGhlcmUgaWYgeW91IGFyZSBtaXNzaW5nIHN1cHBvcnQgZm9yIHRoZSBMRURzICovCi19Ci0KLXN0YXRpYyB2b2lkIHRvbmVwb3J0X3VwZGF0ZV9sZWQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7Ci0Jc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdHAgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0Jc3RydWN0IHVzYl9saW5lNiAqbGluZTY7Ci0KLQlpZiAoIXRwKQotCQlyZXR1cm47Ci0KLQlsaW5lNiA9ICZ0cC0+bGluZTY7Ci0JaWYgKGxpbmU2KQotCQl0b25lcG9ydF9zZW5kX2NtZChsaW5lNi0+dXNiZGV2LCAobGVkX3JlZCA8PCA4KSB8IDB4MDAwMiwKLQkJCQkgIGxlZF9ncmVlbik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHRvbmVwb3J0X3NldF9sZWRfcmVkKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCi0JCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQotewotCWludCByZXR2YWw7Ci0KLQlyZXR2YWwgPSBrc3RydG9pbnQoYnVmLCAxMCwgJmxlZF9yZWQpOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0KLQl0b25lcG9ydF91cGRhdGVfbGVkKGRldik7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCB0b25lcG9ydF9zZXRfbGVkX2dyZWVuKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKLXsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0ga3N0cnRvaW50KGJ1ZiwgMTAsICZsZWRfZ3JlZW4pOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0KLQl0b25lcG9ydF91cGRhdGVfbGVkKGRldik7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgREVWSUNFX0FUVFIobGVkX3JlZCwgU19JV1VTUiB8IFNfSVJVR08sIGxpbmU2X25vcF9yZWFkLAotCQkgICB0b25lcG9ydF9zZXRfbGVkX3JlZCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIobGVkX2dyZWVuLCBTX0lXVVNSIHwgU19JUlVHTywgbGluZTZfbm9wX3JlYWQsCi0JCSAgIHRvbmVwb3J0X3NldF9sZWRfZ3JlZW4pOwotCi1zdGF0aWMgaW50IHRvbmVwb3J0X3NlbmRfY21kKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYsIGludCBjbWQxLCBpbnQgY21kMikKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYmRldiwgMCksIDB4NjcsCi0JCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9PVVQsCi0JCQkgICAgICBjbWQxLCBjbWQyLCBOVUxMLCAwLCBMSU5FNl9USU1FT1VUICogSFopOwotCi0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycigmdXNiZGV2LT5kZXYsICJzZW5kIGZhaWxlZCAoZXJyb3IgJWQpXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiBtb25pdG9yIGluZm8gY2FsbGJhY2sgKi8KLXN0YXRpYyBpbnQgc25kX3RvbmVwb3J0X21vbml0b3JfaW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCQkgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCi17Ci0JdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7Ci0JdWluZm8tPmNvdW50ID0gMTsKLQl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOwotCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDI1NjsKLQlyZXR1cm4gMDsKLX0KLQotLyogbW9uaXRvciBnZXQgY2FsbGJhY2sgKi8KLXN0YXRpYyBpbnQgc25kX3RvbmVwb3J0X21vbml0b3JfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0KLQl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IGxpbmU2cGNtLT52b2x1bWVfbW9uaXRvcjsKLQlyZXR1cm4gMDsKLX0KLQotLyogbW9uaXRvciBwdXQgY2FsbGJhY2sgKi8KLXN0YXRpYyBpbnQgc25kX3RvbmVwb3J0X21vbml0b3JfcHV0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJCSAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0KLQlpZiAodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0gPT0gbGluZTZwY20tPnZvbHVtZV9tb25pdG9yKQotCQlyZXR1cm4gMDsKLQotCWxpbmU2cGNtLT52b2x1bWVfbW9uaXRvciA9IHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdOwotCi0JaWYgKGxpbmU2cGNtLT52b2x1bWVfbW9uaXRvciA+IDApCi0JCWxpbmU2X3BjbV9hY3F1aXJlKGxpbmU2cGNtLCBMSU5FNl9CSVRTX1BDTV9NT05JVE9SKTsKLQllbHNlCi0JCWxpbmU2X3BjbV9yZWxlYXNlKGxpbmU2cGNtLCBMSU5FNl9CSVRTX1BDTV9NT05JVE9SKTsKLQotCXJldHVybiAxOwotfQotCi0vKiBzb3VyY2UgaW5mbyBjYWxsYmFjayAqLwotc3RhdGljIGludCBzbmRfdG9uZXBvcnRfc291cmNlX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCi17Ci0JY29uc3QgaW50IHNpemUgPSBBUlJBWV9TSVpFKHRvbmVwb3J0X3NvdXJjZV9pbmZvKTsKLQotCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOwotCXVpbmZvLT5jb3VudCA9IDE7Ci0JdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSBzaXplOwotCi0JaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gc2l6ZSkKLQkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHNpemUgLSAxOwotCi0Jc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCi0JICAgICAgIHRvbmVwb3J0X3NvdXJjZV9pbmZvW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dLm5hbWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIHNvdXJjZSBnZXQgY2FsbGJhY2sgKi8KLXN0YXRpYyBpbnQgc25kX3RvbmVwb3J0X3NvdXJjZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKnRvbmVwb3J0ID0KLQkgICAgKHN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKilsaW5lNnBjbS0+bGluZTY7Ci0JdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHRvbmVwb3J0LT5zb3VyY2U7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIHNvdXJjZSBwdXQgY2FsbGJhY2sgKi8KLXN0YXRpYyBpbnQgc25kX3RvbmVwb3J0X3NvdXJjZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCi17Ci0Jc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKnRvbmVwb3J0ID0KLQkgICAgKHN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKilsaW5lNnBjbS0+bGluZTY7Ci0JdW5zaWduZWQgaW50IHNvdXJjZTsKLQotCXNvdXJjZSA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07Ci0JaWYgKHNvdXJjZSA+PSBBUlJBWV9TSVpFKHRvbmVwb3J0X3NvdXJjZV9pbmZvKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHNvdXJjZSA9PSB0b25lcG9ydC0+c291cmNlKQotCQlyZXR1cm4gMDsKLQotCXRvbmVwb3J0LT5zb3VyY2UgPSBzb3VyY2U7Ci0JdG9uZXBvcnRfc2VuZF9jbWQodG9uZXBvcnQtPmxpbmU2LnVzYmRldiwKLQkJCSAgdG9uZXBvcnRfc291cmNlX2luZm9bc291cmNlXS5jb2RlLCAweDAwMDApOwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCB0b25lcG9ydF9zdGFydF9wY20odW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdG9uZXBvcnQgPSAoc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqKWFyZzsKLQlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9ICZ0b25lcG9ydC0+bGluZTY7Ci0KLQlsaW5lNl9wY21fYWNxdWlyZShsaW5lNi0+bGluZTZwY20sIExJTkU2X0JJVFNfUENNX01PTklUT1IpOwotfQotCi0vKiBjb250cm9sIGRlZmluaXRpb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0b25lcG9ydF9jb250cm9sX21vbml0b3IgPSB7Ci0JLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JLm5hbWUgPSAiTW9uaXRvciBQbGF5YmFjayBWb2x1bWUiLAotCS5pbmRleCA9IDAsCi0JLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCi0JLmluZm8gPSBzbmRfdG9uZXBvcnRfbW9uaXRvcl9pbmZvLAotCS5nZXQgPSBzbmRfdG9uZXBvcnRfbW9uaXRvcl9nZXQsCi0JLnB1dCA9IHNuZF90b25lcG9ydF9tb25pdG9yX3B1dAotfTsKLQotLyogc291cmNlIHNlbGVjdG9yIGRlZmluaXRpb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyB0b25lcG9ydF9jb250cm9sX3NvdXJjZSA9IHsKLQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkubmFtZSA9ICJQQ00gQ2FwdHVyZSBTb3VyY2UiLAotCS5pbmRleCA9IDAsCi0JLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFEV1JJVEUsCi0JLmluZm8gPSBzbmRfdG9uZXBvcnRfc291cmNlX2luZm8sCi0JLmdldCA9IHNuZF90b25lcG9ydF9zb3VyY2VfZ2V0LAotCS5wdXQgPSBzbmRfdG9uZXBvcnRfc291cmNlX3B1dAotfTsKLQotLyoKLQlUb25lcG9ydCBkZXN0cnVjdG9yLgotKi8KLXN0YXRpYyB2b2lkIHRvbmVwb3J0X2Rlc3RydWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCi17Ci0Jc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdG9uZXBvcnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0KLQlpZiAodG9uZXBvcnQgPT0gTlVMTCkKLQkJcmV0dXJuOwotCWxpbmU2X2NsZWFudXBfYXVkaW8oJnRvbmVwb3J0LT5saW5lNik7Ci19Ci0KLS8qCi0JU2V0dXAgVG9uZXBvcnQgZGV2aWNlLgotKi8KLXN0YXRpYyB2b2lkIHRvbmVwb3J0X3NldHVwKHN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKnRvbmVwb3J0KQotewotCWludCB0aWNrczsKLQlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9ICZ0b25lcG9ydC0+bGluZTY7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IGxpbmU2LT51c2JkZXY7Ci0JdTE2IGlkUHJvZHVjdCA9IGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwotCi0JLyogc3luYyB0aW1lIG9uIGRldmljZSB3aXRoIGhvc3Q6ICovCi0JdGlja3MgPSAoaW50KWdldF9zZWNvbmRzKCk7Ci0JbGluZTZfd3JpdGVfZGF0YShsaW5lNiwgMHg4MGM2LCAmdGlja3MsIDQpOwotCi0JLyogZW5hYmxlIGRldmljZTogKi8KLQl0b25lcG9ydF9zZW5kX2NtZCh1c2JkZXYsIDB4MDMwMSwgMHgwMDAwKTsKLQotCS8qIGluaXRpYWxpemUgc291cmNlIHNlbGVjdDogKi8KLQlzd2l0Y2ggKGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSB7Ci0JY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDE6Ci0JY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDI6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RTVFVESU9fVVgxOgotCWNhc2UgTElORTZfREVWSURfUE9EU1RVRElPX1VYMjoKLQkJdG9uZXBvcnRfc2VuZF9jbWQodXNiZGV2LAotCQkJCSAgdG9uZXBvcnRfc291cmNlX2luZm9bdG9uZXBvcnQtPnNvdXJjZV0uY29kZSwKLQkJCQkgIDB4MDAwMCk7Ci0JfQotCi0JaWYgKHRvbmVwb3J0X2hhc19sZWQoaWRQcm9kdWN0KSkKLQkJdG9uZXBvcnRfdXBkYXRlX2xlZCgmdXNiZGV2LT5kZXYpOwotfQotCi0vKgotCSBUcnkgdG8gaW5pdCBUb25lcG9ydCBkZXZpY2UuCi0qLwotc3RhdGljIGludCB0b25lcG9ydF90cnlfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAotCQkJICAgICBzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICp0b25lcG9ydCkKLXsKLQlpbnQgZXJyOwotCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gJnRvbmVwb3J0LT5saW5lNjsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gbGluZTYtPnVzYmRldjsKLQl1MTYgaWRQcm9kdWN0ID0gbGUxNl90b19jcHUodXNiZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7Ci0KLQlpZiAoKGludGVyZmFjZSA9PSBOVUxMKSB8fCAodG9uZXBvcnQgPT0gTlVMTCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogaW5pdGlhbGl6ZSBhdWRpbyBzeXN0ZW06ICovCi0JZXJyID0gbGluZTZfaW5pdF9hdWRpbyhsaW5lNik7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQkvKiBpbml0aWFsaXplIFBDTSBzdWJzeXN0ZW06ICovCi0JZXJyID0gbGluZTZfaW5pdF9wY20obGluZTYsICZ0b25lcG9ydF9wY21fcHJvcGVydGllcyk7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0KLQkvKiByZWdpc3RlciBtb25pdG9yIGNvbnRyb2w6ICovCi0JZXJyID0gc25kX2N0bF9hZGQobGluZTYtPmNhcmQsCi0JCQkgIHNuZF9jdGxfbmV3MSgmdG9uZXBvcnRfY29udHJvbF9tb25pdG9yLAotCQkJCSAgICAgICBsaW5lNi0+bGluZTZwY20pKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCS8qIHJlZ2lzdGVyIHNvdXJjZSBzZWxlY3QgY29udHJvbDogKi8KLQlzd2l0Y2ggKGxlMTZfdG9fY3B1KHVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSB7Ci0JY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDE6Ci0JY2FzZSBMSU5FNl9ERVZJRF9UT05FUE9SVF9VWDI6Ci0JY2FzZSBMSU5FNl9ERVZJRF9QT0RTVFVESU9fVVgxOgotCWNhc2UgTElORTZfREVWSURfUE9EU1RVRElPX1VYMjoKLQkJZXJyID0KLQkJICAgIHNuZF9jdGxfYWRkKGxpbmU2LT5jYXJkLAotCQkJCXNuZF9jdGxfbmV3MSgmdG9uZXBvcnRfY29udHJvbF9zb3VyY2UsCi0JCQkJCSAgICAgbGluZTYtPmxpbmU2cGNtKSk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKLQl9Ci0KLQkvKiByZWdpc3RlciBhdWRpbyBzeXN0ZW06ICovCi0JZXJyID0gbGluZTZfcmVnaXN0ZXJfYXVkaW8obGluZTYpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JbGluZTZfcmVhZF9zZXJpYWxfbnVtYmVyKGxpbmU2LCAmdG9uZXBvcnQtPnNlcmlhbF9udW1iZXIpOwotCWxpbmU2X3JlYWRfZGF0YShsaW5lNiwgMHg4MGMyLCAmdG9uZXBvcnQtPmZpcm13YXJlX3ZlcnNpb24sIDEpOwotCi0JaWYgKHRvbmVwb3J0X2hhc19sZWQoaWRQcm9kdWN0KSkgewotCQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlCi0JCQkgICAgICgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9sZWRfcmVkKSk7Ci0JCUNIRUNLX1JFVFVSTihkZXZpY2VfY3JlYXRlX2ZpbGUKLQkJCSAgICAgKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2xlZF9ncmVlbikpOwotCX0KLQotCXRvbmVwb3J0X3NldHVwKHRvbmVwb3J0KTsKLQotCWluaXRfdGltZXIoJnRvbmVwb3J0LT50aW1lcik7Ci0JdG9uZXBvcnQtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgVE9ORVBPUlRfUENNX0RFTEFZICogSFo7Ci0JdG9uZXBvcnQtPnRpbWVyLmZ1bmN0aW9uID0gdG9uZXBvcnRfc3RhcnRfcGNtOwotCXRvbmVwb3J0LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpdG9uZXBvcnQ7Ci0JYWRkX3RpbWVyKCZ0b25lcG9ydC0+dGltZXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0JIEluaXQgVG9uZXBvcnQgZGV2aWNlIChhbmQgY2xlYW4gdXAgaW4gY2FzZSBvZiBmYWlsdXJlKS4KLSovCi1pbnQgbGluZTZfdG9uZXBvcnRfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAotCQkJc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdG9uZXBvcnQpCi17Ci0JaW50IGVyciA9IHRvbmVwb3J0X3RyeV9pbml0KGludGVyZmFjZSwgdG9uZXBvcnQpOwotCi0JaWYgKGVyciA8IDApCi0JCXRvbmVwb3J0X2Rlc3RydWN0KGludGVyZmFjZSk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKgotCVJlc3VtZSBUb25lcG9ydCBkZXZpY2UgYWZ0ZXIgcmVzZXQuCi0qLwotdm9pZCBsaW5lNl90b25lcG9ydF9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdG9uZXBvcnQpCi17Ci0JdG9uZXBvcnRfc2V0dXAodG9uZXBvcnQpOwotfQotCi0vKgotCVRvbmVwb3J0IGRldmljZSBkaXNjb25uZWN0ZWQuCi0qLwotdm9pZCBsaW5lNl90b25lcG9ydF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCi17Ci0Jc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdG9uZXBvcnQ7Ci0JdTE2IGlkUHJvZHVjdDsKLQotCWlmIChpbnRlcmZhY2UgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JdG9uZXBvcnQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7Ci0JZGVsX3RpbWVyX3N5bmMoJnRvbmVwb3J0LT50aW1lcik7Ci0JaWRQcm9kdWN0ID0gbGUxNl90b19jcHUodG9uZXBvcnQtPmxpbmU2LnVzYmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwotCi0JaWYgKHRvbmVwb3J0X2hhc19sZWQoaWRQcm9kdWN0KSkgewotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfbGVkX3JlZCk7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9sZWRfZ3JlZW4pOwotCX0KLQotCWlmICh0b25lcG9ydCAhPSBOVUxMKSB7Ci0JCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHRvbmVwb3J0LT5saW5lNi5saW5lNnBjbTsKLQotCQlpZiAobGluZTZwY20gIT0gTlVMTCkgewotCQkJbGluZTZfcGNtX3JlbGVhc2UobGluZTZwY20sIExJTkU2X0JJVFNfUENNX01PTklUT1IpOwotCQkJbGluZTZfcGNtX2Rpc2Nvbm5lY3QobGluZTZwY20pOwotCQl9Ci0JfQotCi0JdG9uZXBvcnRfZGVzdHJ1Y3QoaW50ZXJmYWNlKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi90b25lcG9ydC5oIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3RvbmVwb3J0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1NzZiNzIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3RvbmVwb3J0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKgotICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOS4xYmV0YQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCi0gKgotICovCi0KLSNpZm5kZWYgVE9ORVBPUlRfSAotI2RlZmluZSBUT05FUE9SVF9ICi0KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0KLSNpbmNsdWRlICJkcml2ZXIuaCIKLQotc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCB7Ci0JLyoqCi0JCUdlbmVyaWMgTGluZTYgVVNCIGRhdGEuCi0JKi8KLQlzdHJ1Y3QgdXNiX2xpbmU2IGxpbmU2OwotCi0JLyoqCi0JCVNvdXJjZSBzZWxlY3Rvci4KLQkqLwotCWludCBzb3VyY2U7Ci0KLQkvKioKLQkJU2VyaWFsIG51bWJlciBvZiBkZXZpY2UuCi0JKi8KLQlpbnQgc2VyaWFsX251bWJlcjsKLQotCS8qKgotCQlGaXJtd2FyZSB2ZXJzaW9uICh4IDEwMCkuCi0JKi8KLQlpbnQgZmlybXdhcmVfdmVyc2lvbjsKLQotCS8qKgotCQkgVGltZXIgZm9yIGRlbGF5ZWQgUENNIHN0YXJ0dXAuCi0JKi8KLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLX07Ci0KLWV4dGVybiB2b2lkIGxpbmU2X3RvbmVwb3J0X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7Ci1leHRlcm4gaW50IGxpbmU2X3RvbmVwb3J0X2luaXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKLQkJCSAgICAgICBzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICp0b25lcG9ydCk7Ci1leHRlcm4gdm9pZCBsaW5lNl90b25lcG9ydF9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdG9uZXBvcnQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi91c2JkZWZzLmggYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdXNiZGVmcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZDFjYzQ3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi91c2JkZWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyoKLSAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjkuMWJldGEKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgotICoKLSAqLwotCi0jaWZuZGVmIFVTQkRFRlNfSAotI2RlZmluZSBVU0JERUZTX0gKLQotI2RlZmluZSBMSU5FNl9WRU5ET1JfSUQgIDB4MGU0MQotCi0jZGVmaW5lIFVTQl9JTlRFUlZBTFNfUEVSX1NFQ09ORCAxMDAwCi0KLS8qCi0JRGV2aWNlIGlkcy4KLSovCi0jZGVmaW5lIExJTkU2X0RFVklEX0JBU1NQT0RYVCAgICAgMHg0MjUwCi0jZGVmaW5lIExJTkU2X0RFVklEX0JBU1NQT0RYVExJVkUgMHg0NjQyCi0jZGVmaW5lIExJTkU2X0RFVklEX0JBU1NQT0RYVFBSTyAgMHg0MjUyCi0jZGVmaW5lIExJTkU2X0RFVklEX0dVSVRBUlBPUlQgICAgMHg0NzUwCi0jZGVmaW5lIExJTkU2X0RFVklEX1BPQ0tFVFBPRCAgICAgMHg1MDUxCi0jZGVmaW5lIExJTkU2X0RFVklEX1BPREhEMzAwICAgICAgMHg1MDU3Ci0jZGVmaW5lIExJTkU2X0RFVklEX1BPREhENDAwICAgICAgMHg1MDU4Ci0jZGVmaW5lIExJTkU2X0RFVklEX1BPREhENTAwICAgICAgMHg0MTRECi0jZGVmaW5lIExJTkU2X0RFVklEX1BPRFNUVURJT19HWCAgMHg0MTUzCi0jZGVmaW5lIExJTkU2X0RFVklEX1BPRFNUVURJT19VWDEgMHg0MTUwCi0jZGVmaW5lIExJTkU2X0RFVklEX1BPRFNUVURJT19VWDIgMHg0MTUxCi0jZGVmaW5lIExJTkU2X0RFVklEX1BPRFgzICAgICAgICAgMHg0MTRhCi0jZGVmaW5lIExJTkU2X0RFVklEX1BPRFgzTElWRSAgICAgMHg0MTRiCi0jZGVmaW5lIExJTkU2X0RFVklEX1BPRFhUICAgICAgICAgMHg1MDQ0Ci0jZGVmaW5lIExJTkU2X0RFVklEX1BPRFhUTElWRSAgICAgMHg0NjUwCi0jZGVmaW5lIExJTkU2X0RFVklEX1BPRFhUUFJPICAgICAgMHg1MDUwCi0jZGVmaW5lIExJTkU2X0RFVklEX1RPTkVQT1JUX0dYICAgMHg0MTQ3Ci0jZGVmaW5lIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMSAgMHg0MTQxCi0jZGVmaW5lIExJTkU2X0RFVklEX1RPTkVQT1JUX1VYMiAgMHg0MTQyCi0jZGVmaW5lIExJTkU2X0RFVklEX1ZBUklBWCAgICAgICAgMHg1MzRkCi0KLSNkZWZpbmUgTElORTZfQklUKHgpIExJTkU2X0JJVF8gIyMgeCA9IDEgPDwgTElORTZfSU5ERVhfICMjIHgKLQotZW51bSB7Ci0JTElORTZfSU5ERVhfQkFTU1BPRFhULAotCUxJTkU2X0lOREVYX0JBU1NQT0RYVExJVkUsCi0JTElORTZfSU5ERVhfQkFTU1BPRFhUUFJPLAotCUxJTkU2X0lOREVYX0dVSVRBUlBPUlQsCi0JTElORTZfSU5ERVhfUE9DS0VUUE9ELAotCUxJTkU2X0lOREVYX1BPREhEMzAwLAotCUxJTkU2X0lOREVYX1BPREhENDAwLAotCUxJTkU2X0lOREVYX1BPREhENTAwLAotCUxJTkU2X0lOREVYX1BPRFNUVURJT19HWCwKLQlMSU5FNl9JTkRFWF9QT0RTVFVESU9fVVgxLAotCUxJTkU2X0lOREVYX1BPRFNUVURJT19VWDIsCi0JTElORTZfSU5ERVhfUE9EWDMsCi0JTElORTZfSU5ERVhfUE9EWDNMSVZFLAotCUxJTkU2X0lOREVYX1BPRFhULAotCUxJTkU2X0lOREVYX1BPRFhUTElWRSwKLQlMSU5FNl9JTkRFWF9QT0RYVFBSTywKLQlMSU5FNl9JTkRFWF9UT05FUE9SVF9HWCwKLQlMSU5FNl9JTkRFWF9UT05FUE9SVF9VWDEsCi0JTElORTZfSU5ERVhfVE9ORVBPUlRfVVgyLAotCUxJTkU2X0lOREVYX1ZBUklBWCwKLQotCUxJTkU2X0JJVChCQVNTUE9EWFQpLAotCUxJTkU2X0JJVChCQVNTUE9EWFRMSVZFKSwKLQlMSU5FNl9CSVQoQkFTU1BPRFhUUFJPKSwKLQlMSU5FNl9CSVQoR1VJVEFSUE9SVCksCi0JTElORTZfQklUKFBPQ0tFVFBPRCksCi0JTElORTZfQklUKFBPREhEMzAwKSwKLQlMSU5FNl9CSVQoUE9ESEQ0MDApLAotCUxJTkU2X0JJVChQT0RIRDUwMCksCi0JTElORTZfQklUKFBPRFNUVURJT19HWCksCi0JTElORTZfQklUKFBPRFNUVURJT19VWDEpLAotCUxJTkU2X0JJVChQT0RTVFVESU9fVVgyKSwKLQlMSU5FNl9CSVQoUE9EWDMpLAotCUxJTkU2X0JJVChQT0RYM0xJVkUpLAotCUxJTkU2X0JJVChQT0RYVCksCi0JTElORTZfQklUKFBPRFhUTElWRSksCi0JTElORTZfQklUKFBPRFhUUFJPKSwKLQlMSU5FNl9CSVQoVE9ORVBPUlRfR1gpLAotCUxJTkU2X0JJVChUT05FUE9SVF9VWDEpLAotCUxJTkU2X0JJVChUT05FUE9SVF9VWDIpLAotCUxJTkU2X0JJVChWQVJJQVgpLAotCi0JTElORTZfQklUU19QUk8gPSBMSU5FNl9CSVRfQkFTU1BPRFhUUFJPIHwgTElORTZfQklUX1BPRFhUUFJPLAotCUxJTkU2X0JJVFNfTElWRSA9IExJTkU2X0JJVF9CQVNTUE9EWFRMSVZFIHwgTElORTZfQklUX1BPRFhUTElWRSB8Ci0JCQkgIExJTkU2X0JJVF9QT0RYM0xJVkUsCi0JTElORTZfQklUU19QT0RYVEFMTCA9IExJTkU2X0JJVF9QT0RYVCB8IExJTkU2X0JJVF9QT0RYVExJVkUgfAotCQkJICAgICAgTElORTZfQklUX1BPRFhUUFJPLAotCUxJTkU2X0JJVFNfUE9EWDNBTEwgPSBMSU5FNl9CSVRfUE9EWDMgfCBMSU5FNl9CSVRfUE9EWDNMSVZFLAotCUxJTkU2X0JJVFNfUE9ESERBTEwgPSBMSU5FNl9CSVRfUE9ESEQzMDAgfAotCQkJICAgICAgTElORTZfQklUX1BPREhENDAwIHwKLQkJCSAgICAgIExJTkU2X0JJVF9QT0RIRDUwMCwKLQlMSU5FNl9CSVRTX0JBU1NQT0RYVEFMTAk9IExJTkU2X0JJVF9CQVNTUE9EWFQgfAotCQkJCSAgTElORTZfQklUX0JBU1NQT0RYVExJVkUgfAotCQkJCSAgTElORTZfQklUX0JBU1NQT0RYVFBSTwotfTsKLQotLyogZGV2aWNlIHN1cHBvcnRzIHNldHRpbmdzIHBhcmFtZXRlciB2aWEgVVNCICovCi0jZGVmaW5lIExJTkU2X0JJVF9DT05UUk9MICgxIDw8IDApCi0vKiBkZXZpY2Ugc3VwcG9ydHMgUENNIGlucHV0L291dHB1dCB2aWEgVVNCICovCi0jZGVmaW5lIExJTkU2X0JJVF9QQ00gKDEgPDwgMSkKLS8qIGRldmljZSBzdXBwb3J0IGhhcmR3YXJlIG1vbml0b3JpbmcgKi8KLSNkZWZpbmUgTElORTZfQklUX0hXTU9OICgxIDw8IDIpCi0KLSNkZWZpbmUgTElORTZfQklUX0NUUkxfUENNX0hXCShMSU5FNl9CSVRfQ09OVFJPTCB8CVwKLQkJCQkJIExJTkU2X0JJVF9QQ00gfAlcCi0JCQkJCSBMSU5FNl9CSVRfSFdNT04pCi0KLSNkZWZpbmUgTElORTZfRkFMTEJBQ0tfSU5URVJWQUwgMTAKLSNkZWZpbmUgTElORTZfRkFMTEJBQ0tfTUFYUEFDS0VUU0laRSAxNgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi92YXJpYXguaCBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi92YXJpYXguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRkZTc5Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdmFyaWF4LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKgotICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOS4xYmV0YQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCi0gKgotICovCi0KLSNpZm5kZWYgVkFSSUFYX0gKLSNkZWZpbmUgVkFSSUFYX0gKLQotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLQotI2luY2x1ZGUgImRyaXZlci5oIgotCi0jZGVmaW5lIFZBUklBWF9TVEFSVFVQX0RFTEFZMSAxMDAwCi0jZGVmaW5lIFZBUklBWF9TVEFSVFVQX0RFTEFZMyAxMDAKLSNkZWZpbmUgVkFSSUFYX1NUQVJUVVBfREVMQVk0IDEwMAotCi0vKgotCVN0YWdlcyBvZiBWYXJpYXggc3RhcnR1cCBwcm9jZWR1cmUKLSovCi1lbnVtIHsKLQlWQVJJQVhfU1RBUlRVUF9JTklUID0gMSwKLQlWQVJJQVhfU1RBUlRVUF9WRVJTSU9OUkVRLAotCVZBUklBWF9TVEFSVFVQX1dBSVQsCi0JVkFSSUFYX1NUQVJUVVBfQUNUSVZBVEUsCi0JVkFSSUFYX1NUQVJUVVBfV09SS1FVRVVFLAotCVZBUklBWF9TVEFSVFVQX1NFVFVQLAotCVZBUklBWF9TVEFSVFVQX0xBU1QgPSBWQVJJQVhfU1RBUlRVUF9TRVRVUCAtIDEKLX07Ci0KLXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4IHsKLQkvKioKLQkJR2VuZXJpYyBMaW5lNiBVU0IgZGF0YS4KLQkqLwotCXN0cnVjdCB1c2JfbGluZTYgbGluZTY7Ci0KLQkvKioKLQkJQnVmZmVyIGZvciBhY3RpdmF0aW9uIGNvZGUuCi0JKi8KLQl1bnNpZ25lZCBjaGFyICpidWZmZXJfYWN0aXZhdGU7Ci0KLQkvKioKLQkJSGFuZGxlciBmb3IgZGV2aWNlIGluaXRpYWxpemF0b24uCi0JKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RhcnR1cF93b3JrOwotCi0JLyoqCi0JCVRpbWVycyBmb3IgZGV2aWNlIGluaXRpYWxpemF0b24uCi0JKi8KLQlzdHJ1Y3QgdGltZXJfbGlzdCBzdGFydHVwX3RpbWVyMTsKLQlzdHJ1Y3QgdGltZXJfbGlzdCBzdGFydHVwX3RpbWVyMjsKLQotCS8qKgotCQlDdXJyZW50IHByb2dyZXNzIGluIHN0YXJ0dXAgcHJvY2VkdXJlLgotCSovCi0JaW50IHN0YXJ0dXBfcHJvZ3Jlc3M7Ci19OwotCi1leHRlcm4gdm9pZCBsaW5lNl92YXJpYXhfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKLWV4dGVybiBpbnQgbGluZTZfdmFyaWF4X2luaXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKLQkJCSAgICAgc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCk7Ci1leHRlcm4gdm9pZCBsaW5lNl92YXJpYXhfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXgpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9sdXN0cmUvbHVzdHJlL2xsaXRlL3Z2cF9pby5jIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2lvLmMKaW5kZXggOTMwZjYwMS4uNjVkNjEwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2lvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2x1c3RyZS9sdXN0cmUvbGxpdGUvdnZwX2lvLmMKQEAgLTYzMiw3ICs2MzIsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoY2Zpby0+ZmF1bHQuZnRfZmxhZ3MgJiBWTV9GQVVMVF9TSUdCVVMpIHsKKwlpZiAoY2Zpby0+ZmF1bHQuZnRfZmxhZ3MgJiAoVk1fRkFVTFRfU0lHQlVTIHwgVk1fRkFVTFRfU0lHU0VHVikpIHsKIAkJQ0RFQlVHKERfUEFHRSwgImdvdCBhZGRyICVwIC0gU0lHQlVTXG4iLCB2bWYtPnZpcnR1YWxfYWRkcmVzcyk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL0tjb25maWcKaW5kZXggMmEwNTRhOS4uOTY0OThiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL0tjb25maWcKQEAgLTI3LDE4ICsyNywxMiBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9tZWRpYS9kdDMxNTV2NGwvS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGxnMjMwMC9LY29uZmlnIgotCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9tZWRpYS9tbjg4NDcyL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL21lZGlhL21uODg0NzMvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbWVkaWEvb21hcDRpc3MvS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbWVkaWEvcGFycG9ydC9LY29uZmlnIgotCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9tZWRpYS92aW5vL0tjb25maWciCi0KICMgS2VlcCBMSVJDIGF0IHRoZSBlbmQsIGFzIGl0IGhhcyBzdWItbWVudXMKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL21lZGlhL2xpcmMvS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL01ha2VmaWxlCmluZGV4IDQxMmIyODQwLi5hOTAwNmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL01ha2VmaWxlCkBAIC02LDcgKzYsMyBAQAogb2JqLSQoQ09ORklHX1ZJREVPX09NQVA0KQkrPSBvbWFwNGlzcy8KIG9iai0kKENPTkZJR19EVkJfTU44ODQ3MikgICAgICAgKz0gbW44ODQ3Mi8KIG9iai0kKENPTkZJR19EVkJfTU44ODQ3MykgICAgICAgKz0gbW44ODQ3My8KLW9iai15CQkJCSs9IHBhcnBvcnQvCi1vYmotJChDT05GSUdfVklERU9fVExHMjMwMCkJKz0gdGxnMjMwMC8KLW9iai15ICAgICAgICAgICAgICAgICAgICAgICAgICAgKz0gdmluby8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2JjbTIwNDgvcmFkaW8tYmNtMjA0OC5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2JjbTIwNDgvcmFkaW8tYmNtMjA0OC5jCmluZGV4IDYwYTU3YjIuLjUzODI1MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9iY20yMDQ4L3JhZGlvLWJjbTIwNDguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvYmNtMjA0OC9yYWRpby1iY20yMDQ4LmMKQEAgLTI2ODQsOSArMjY4NCw3IEBACiAJCXZkID0gYmRldi0+dmlkZW9kZXY7CiAKIAkJYmNtMjA0OF9zeXNmc191bnJlZ2lzdGVyX3Byb3BlcnRpZXMoYmRldiwgQVJSQVlfU0laRShhdHRycykpOwotCi0JCWlmICh2ZCkKLQkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkKTsKKwkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodmQpOwogCiAJCWlmIChiZGV2LT5wb3dlcl9zdGF0ZSkKIAkJCWJjbTIwNDhfc2V0X3Bvd2VyX3N0YXRlKGJkZXYsIEJDTTIwNDhfUE9XRVJfT0ZGKTsKQEAgLTI2OTksOCArMjY5Nyw2IEBACiAJCWtmcmVlKGJkZXYpOwogCX0KIAotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9kYXZpbmNpX3ZwZmUvZG0zNjVfaXNpZi5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2RhdmluY2lfdnBmZS9kbTM2NV9pc2lmLmMKaW5kZXggMGJhMGJmMi4uYmNmNzYyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2RhdmluY2lfdnBmZS9kbTM2NV9pc2lmLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2RhdmluY2lfdnBmZS9kbTM2NV9pc2lmLmMKQEAgLTE1MzUsNyArMTUzNSw3IEBACiB9CiAKIC8qCi0gKiBpc2lmX3BhZF9zZXRfY3JvcCgpIC0gc2V0IGNyb3AgcmVjdGFuZ2xlIG9uIHBhZAorICogaXNpZl9wYWRfc2V0X3NlbGVjdGlvbigpIC0gc2V0IGNyb3AgcmVjdGFuZ2xlIG9uIHBhZAogICogQHNkOiBWUEZFIGlzaWYgVjRMMiBzdWJkZXZpY2UKICAqIEBmaDogVjRMMiBzdWJkZXYgZmlsZSBoYW5kbGUKICAqIEBjb2RlOiBwb2ludGVyIHRvIHY0bDJfc3ViZGV2X21idXNfY29kZV9lbnVtIHN0cnVjdHVyZQpAQCAtMTU0MywzNSArMTU0MywzNiBAQAogICogUmV0dXJuIDAgb24gc3VjY2VzcywgLUVJTlZBTCBpZiBwYWQgaXMgaW52YWxpZAogICovCiBzdGF0aWMgaW50Ci1pc2lmX3BhZF9zZXRfY3JvcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdWJkZXZfZmggKmZoLAotCQkgIHN0cnVjdCB2NGwyX3N1YmRldl9jcm9wICpjcm9wKQoraXNpZl9wYWRfc2V0X3NlbGVjdGlvbihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkgICAgICAgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKKwkJICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9zZWxlY3Rpb24gKnNlbCkKIHsKIAlzdHJ1Y3QgdnBmZV9pc2lmX2RldmljZSAqdnBmZV9pc2lmID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm9ybWF0OwogCi0JLyogY2hlY2sgd2V0aGVyIGl0cyBhIHZhbGlkIHBhZCAqLwotCWlmIChjcm9wLT5wYWQgIT0gSVNJRl9QQURfU0lOSykKKwkvKiBjaGVjayB3aGV0aGVyIGl0J3MgYSB2YWxpZCBwYWQgYW5kIHRhcmdldCAqLworCWlmIChzZWwtPnBhZCAhPSBJU0lGX1BBRF9TSU5LIHx8IHNlbC0+dGFyZ2V0ICE9IFY0TDJfU0VMX1RHVF9DUk9QKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvcm1hdCA9IF9faXNpZl9nZXRfZm9ybWF0KHZwZmVfaXNpZiwgZmgsIGNyb3AtPnBhZCwgY3JvcC0+d2hpY2gpOworCWZvcm1hdCA9IF9faXNpZl9nZXRfZm9ybWF0KHZwZmVfaXNpZiwgZmgsIHNlbC0+cGFkLCBzZWwtPndoaWNoKTsKIAlpZiAoZm9ybWF0ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogY2hlY2sgd2V0aGVyIGNyb3AgcmVjdCBpcyB3aXRoaW4gbGltaXRzICovCi0JaWYgKGNyb3AtPnJlY3QudG9wIDwgMCB8fCBjcm9wLT5yZWN0LmxlZnQgPCAwIHx8Ci0JCShjcm9wLT5yZWN0LmxlZnQgKyBjcm9wLT5yZWN0LndpZHRoID4KKwlpZiAoc2VsLT5yLnRvcCA8IDAgfHwgc2VsLT5yLmxlZnQgPCAwIHx8CisJCShzZWwtPnIubGVmdCArIHNlbC0+ci53aWR0aCA+CiAJCXZwZmVfaXNpZi0+Zm9ybWF0c1tJU0lGX1BBRF9TSU5LXS53aWR0aCkgfHwKLQkJKGNyb3AtPnJlY3QudG9wICsgY3JvcC0+cmVjdC5oZWlnaHQgPgorCQkoc2VsLT5yLnRvcCArIHNlbC0+ci5oZWlnaHQgPgogCQkJdnBmZV9pc2lmLT5mb3JtYXRzW0lTSUZfUEFEX1NJTktdLmhlaWdodCkpIHsKLQkJY3JvcC0+cmVjdC5sZWZ0ID0gMDsKLQkJY3JvcC0+cmVjdC50b3AgPSAwOwotCQljcm9wLT5yZWN0LndpZHRoID0gZm9ybWF0LT53aWR0aDsKLQkJY3JvcC0+cmVjdC5oZWlnaHQgPSBmb3JtYXQtPmhlaWdodDsKKwkJc2VsLT5yLmxlZnQgPSAwOworCQlzZWwtPnIudG9wID0gMDsKKwkJc2VsLT5yLndpZHRoID0gZm9ybWF0LT53aWR0aDsKKwkJc2VsLT5yLmhlaWdodCA9IGZvcm1hdC0+aGVpZ2h0OwogCX0KIAkvKiBhZGp1c3QgdGhlIHdpZHRoIHRvIDE2IHBpeGVsIGJvdW5kYXJ5ICovCi0JY3JvcC0+cmVjdC53aWR0aCA9ICgoY3JvcC0+cmVjdC53aWR0aCArIDE1KSAmIH4weGYpOwotCXZwZmVfaXNpZi0+Y3JvcCA9IGNyb3AtPnJlY3Q7Ci0JaWYgKGNyb3AtPndoaWNoID09IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUpIHsKKwlzZWwtPnIud2lkdGggPSAoKHNlbC0+ci53aWR0aCArIDE1KSAmIH4weGYpOworCXZwZmVfaXNpZi0+Y3JvcCA9IHNlbC0+cjsKKwlpZiAoc2VsLT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFKSB7CiAJCWlzaWZfc2V0X2ltYWdlX3dpbmRvdyh2cGZlX2lzaWYpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCB2NGwyX3JlY3QgKnJlY3Q7CkBAIC0xNTgzLDcgKzE1ODQsNyBAQAogfQogCiAvKgotICogaXNpZl9wYWRfZ2V0X2Nyb3AoKSAtIGdldCBjcm9wIHJlY3RhbmdsZSBvbiBwYWQKKyAqIGlzaWZfcGFkX2dldF9zZWxlY3Rpb24oKSAtIGdldCBjcm9wIHJlY3RhbmdsZSBvbiBwYWQKICAqIEBzZDogVlBGRSBpc2lmIFY0TDIgc3ViZGV2aWNlCiAgKiBAZmg6IFY0TDIgc3ViZGV2IGZpbGUgaGFuZGxlCiAgKiBAY29kZTogcG9pbnRlciB0byB2NGwyX3N1YmRldl9tYnVzX2NvZGVfZW51bSBzdHJ1Y3R1cmUKQEAgLTE1OTEsMjIgKzE1OTIsMjMgQEAKICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgaWYgcGFkIGlzIGludmFsaWQKICAqLwogc3RhdGljIGludAotaXNpZl9wYWRfZ2V0X2Nyb3Aoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKLQkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfY3JvcCAqY3JvcCkKK2lzaWZfcGFkX2dldF9zZWxlY3Rpb24oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJICAgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCisJCSAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfc2VsZWN0aW9uICpzZWwpCiB7CiAJc3RydWN0IHZwZmVfaXNpZl9kZXZpY2UgKnZwZmVfaXNpZiA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JLyogY2hlY2sgd2V0aGVyIGl0cyBhIHZhbGlkIHBhZCAqLwotCWlmIChjcm9wLT5wYWQgIT0gSVNJRl9QQURfU0lOSykKKwkvKiBjaGVjayB3aGV0aGVyIGl0J3MgYSB2YWxpZCBwYWQgYW5kIHRhcmdldCAqLworCWlmIChzZWwtPnBhZCAhPSBJU0lGX1BBRF9TSU5LIHx8IHNlbC0+dGFyZ2V0ICE9IFY0TDJfU0VMX1RHVF9DUk9QKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChjcm9wLT53aGljaCA9PSBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZKSB7CisJaWYgKHNlbC0+d2hpY2ggPT0gVjRMMl9TVUJERVZfRk9STUFUX1RSWSkgewogCQlzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0OwogCiAJCXJlY3QgPSB2NGwyX3N1YmRldl9nZXRfdHJ5X2Nyb3AoZmgsIElTSUZfUEFEX1NJTkspOwotCQltZW1jcHkoJmNyb3AtPnJlY3QsIHJlY3QsIHNpemVvZigqcmVjdCkpOworCQltZW1jcHkoJnNlbC0+ciwgcmVjdCwgc2l6ZW9mKCpyZWN0KSk7CiAJfSBlbHNlIHsKLQkJY3JvcC0+cmVjdCA9IHZwZmVfaXNpZi0+Y3JvcDsKKwkJc2VsLT5yID0gdnBmZV9pc2lmLT5jcm9wOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTYyNiw3ICsxNjI4LDcgQEAKIAkJICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZmggKmZoKQogewogCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm9ybWF0OwotCXN0cnVjdCB2NGwyX3N1YmRldl9jcm9wIGNyb3A7CisJc3RydWN0IHY0bDJfc3ViZGV2X3NlbGVjdGlvbiBzZWw7CiAKIAltZW1zZXQoJmZvcm1hdCwgMCwgc2l6ZW9mKGZvcm1hdCkpOwogCWZvcm1hdC5wYWQgPSBJU0lGX1BBRF9TSU5LOwpAQCAtMTY0NCwxMiArMTY0NiwxMyBAQAogCWZvcm1hdC5mb3JtYXQuaGVpZ2h0ID0gTUFYX0hFSUdIVDsKIAlpc2lmX3NldF9mb3JtYXQoc2QsIGZoLCAmZm9ybWF0KTsKIAotCW1lbXNldCgmY3JvcCwgMCwgc2l6ZW9mKGNyb3ApKTsKLQljcm9wLnBhZCA9IElTSUZfUEFEX1NJTks7Ci0JY3JvcC53aGljaCA9IGZoID8gVjRMMl9TVUJERVZfRk9STUFUX1RSWSA6IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkU7Ci0JY3JvcC5yZWN0LndpZHRoID0gTUFYX1dJRFRIOwotCWNyb3AucmVjdC5oZWlnaHQgPSBNQVhfSEVJR0hUOwotCWlzaWZfcGFkX3NldF9jcm9wKHNkLCBmaCwgJmNyb3ApOworCW1lbXNldCgmc2VsLCAwLCBzaXplb2Yoc2VsKSk7CisJc2VsLnBhZCA9IElTSUZfUEFEX1NJTks7CisJc2VsLndoaWNoID0gZmggPyBWNEwyX1NVQkRFVl9GT1JNQVRfVFJZIDogVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRTsKKwlzZWwudGFyZ2V0ID0gVjRMMl9TRUxfVEdUX0NST1A7CisJc2VsLnIud2lkdGggPSBNQVhfV0lEVEg7CisJc2VsLnIuaGVpZ2h0ID0gTUFYX0hFSUdIVDsKKwlpc2lmX3BhZF9zZXRfc2VsZWN0aW9uKHNkLCBmaCwgJnNlbCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NzUsOCArMTY3OCw4IEBACiAJLmVudW1fZnJhbWVfc2l6ZSA9IGlzaWZfZW51bV9mcmFtZV9zaXplLAogCS5nZXRfZm10ID0gaXNpZl9nZXRfZm9ybWF0LAogCS5zZXRfZm10ID0gaXNpZl9zZXRfZm9ybWF0LAotCS5zZXRfY3JvcCA9IGlzaWZfcGFkX3NldF9jcm9wLAotCS5nZXRfY3JvcCA9IGlzaWZfcGFkX2dldF9jcm9wLAorCS5zZXRfc2VsZWN0aW9uID0gaXNpZl9wYWRfc2V0X3NlbGVjdGlvbiwKKwkuZ2V0X3NlbGVjdGlvbiA9IGlzaWZfcGFkX2dldF9zZWxlY3Rpb24sCiB9OwogCiAvKiBzdWJkZXYgb3BlcmF0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2xpcmMvbGlyY19zZXJpYWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9saXJjL2xpcmNfc2VyaWFsLmMKaW5kZXggZWI0Y2NiOC4uMTk2MjhkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2xpcmMvbGlyY19zZXJpYWwuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbGlyYy9saXJjX3NlcmlhbC5jCkBAIC0xMDcsNyArMTA3LDcgQEAKIHN0YXRpYyBpbnQgaXJxOwogc3RhdGljIGJvb2wgaW9tbWFwOwogc3RhdGljIGludCBpb3NoaWZ0Owotc3RhdGljIGJvb2wgc29mdGNhcnJpZXIgPSAxOworc3RhdGljIGJvb2wgc29mdGNhcnJpZXIgPSB0cnVlOwogc3RhdGljIGJvb2wgc2hhcmVfaXJxOwogc3RhdGljIGJvb2wgZGVidWc7CiBzdGF0aWMgaW50IHNlbnNlID0gLTE7CS8qIC0xID0gYXV0bywgMCA9IGFjdGl2ZSBoaWdoLCAxID0gYWN0aXZlIGxvdyAqLwpAQCAtMjY2LDcgKzI2Niw3IEBACiAvKiBmZXRjaCBzZXJpYWwgaW5wdXQgcGFja2V0ICgxIGJ5dGUpIGZyb20gcmVnaXN0ZXIgb2Zmc2V0ICovCiBzdGF0aWMgdTggc2lucChpbnQgb2Zmc2V0KQogewotCWlmIChpb21tYXAgIT0gMCkKKwlpZiAoaW9tbWFwKQogCQkvKiB0aGUgcmVnaXN0ZXIgaXMgbWVtb3J5LW1hcHBlZCAqLwogCQlvZmZzZXQgPDw9IGlvc2hpZnQ7CiAKQEAgLTI3Niw3ICsyNzYsNyBAQAogLyogd3JpdGUgc2VyaWFsIG91dHB1dCBwYWNrZXQgKDEgYnl0ZSkgb2YgdmFsdWUgdG8gcmVnaXN0ZXIgb2Zmc2V0ICovCiBzdGF0aWMgdm9pZCBzb3V0cChpbnQgb2Zmc2V0LCB1OCB2YWx1ZSkKIHsKLQlpZiAoaW9tbWFwICE9IDApCisJaWYgKGlvbW1hcCkKIAkJLyogdGhlIHJlZ2lzdGVyIGlzIG1lbW9yeS1tYXBwZWQgKi8KIAkJb2Zmc2V0IDw8PSBpb3NoaWZ0OwogCkBAIC03OTksMTAgKzc5OSwxMCBAQAogCSAqIEZvciBtZW1vcnkgbWFwcGVkIEkvTyB5b3UgKm1pZ2h0KiBuZWVkIHRvIHVzZSBpb3JlbWFwKCkgZmlyc3QsCiAJICogZm9yIHRoZSBOU0xVMiBpdCdzIGRvbmUgaW4gYm9vdCBjb2RlLgogCSAqLwotCWlmICgoKGlvbW1hcCAhPSAwKQorCWlmICgoKGlvbW1hcCkKIAkgICAgICYmIChkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmZGV2LT5kZXYsIGlvbW1hcCwgOCA8PCBpb3NoaWZ0LAogCQkJCQkgTElSQ19EUklWRVJfTkFNRSkgPT0gTlVMTCkpCi0JICAgfHwgKChpb21tYXAgPT0gMCkKKwkgICB8fCAoKCFpb21tYXApCiAJICAgICAgICYmIChkZXZtX3JlcXVlc3RfcmVnaW9uKCZkZXYtPmRldiwgaW8sIDgsCiAJCQkJICAgICAgIExJUkNfRFJJVkVSX05BTUUpID09IE5VTEwpKSkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgInBvcnQgJTA0eCBhbHJlYWR5IGluIHVzZVxuIiwgaW8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2xpcmMvbGlyY196aWxvZy5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2xpcmMvbGlyY196aWxvZy5jCmluZGV4IGNjODcyZmIuLmUxNjYyN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9saXJjL2xpcmNfemlsb2cuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbGlyYy9saXJjX3ppbG9nLmMKQEAgLTM2OSwxNyArMzY5LDE3IEBACiAJCXJldCA9IGkyY19tYXN0ZXJfc2VuZChyeC0+Yywgc2VuZGJ1ZiwgMSk7CiAJCWlmIChyZXQgIT0gMSkgewogCQkJZGV2X2Vycihpci0+bC5kZXYsICJpMmNfbWFzdGVyX3NlbmQgZmFpbGVkIHdpdGggJWRcbiIsCi0JCQkJCSAgIHJldCk7CisJCQkJcmV0KTsKIAkJCWlmIChmYWlsdXJlcyA+PSAzKSB7CiAJCQkJbXV0ZXhfdW5sb2NrKCZpci0+aXJfbG9jayk7Ci0JCQkJZGV2X2Vycihpci0+bC5kZXYsICJ1bmFibGUgdG8gcmVhZCBmcm9tIHRoZSBJUiBjaGlwICIKLQkJCQkJICAgICJhZnRlciAzIHJlc2V0cywgZ2l2aW5nIHVwXG4iKTsKKwkJCQlkZXZfZXJyKGlyLT5sLmRldiwKKwkJCQkJInVuYWJsZSB0byByZWFkIGZyb20gdGhlIElSIGNoaXAgYWZ0ZXIgMyByZXNldHMsIGdpdmluZyB1cFxuIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAKIAkJCS8qIExvb2tzIGxpa2UgdGhlIGNoaXAgY3Jhc2hlZCwgcmVzZXQgaXQgKi8KLQkJCWRldl9lcnIoaXItPmwuZGV2LCAicG9sbGluZyB0aGUgSVIgcmVjZWl2ZXIgY2hpcCBmYWlsZWQsICIKLQkJCQkgICAgInRyeWluZyByZXNldFxuIik7CisJCQlkZXZfZXJyKGlyLT5sLmRldiwKKwkJCQkicG9sbGluZyB0aGUgSVIgcmVjZWl2ZXIgY2hpcCBmYWlsZWQsIHRyeWluZyByZXNldFxuIik7CiAKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKQEAgLTQwNSwxNCArNDA1LDE2IEBACiAJCXJldCA9IGkyY19tYXN0ZXJfcmVjdihyeC0+Yywga2V5YnVmLCBzaXplb2Yoa2V5YnVmKSk7CiAJCW11dGV4X3VubG9jaygmaXItPmlyX2xvY2spOwogCQlpZiAocmV0ICE9IHNpemVvZihrZXlidWYpKSB7Ci0JCQlkZXZfZXJyKGlyLT5sLmRldiwgImkyY19tYXN0ZXJfcmVjdiBmYWlsZWQgd2l0aCAlZCAtLSAiCi0JCQkJICAgICJrZWVwaW5nIGxhc3QgcmVhZCBidWZmZXJcbiIsIHJldCk7CisJCQlkZXZfZXJyKGlyLT5sLmRldiwKKwkJCQkiaTJjX21hc3Rlcl9yZWN2IGZhaWxlZCB3aXRoICVkIC0tIGtlZXBpbmcgbGFzdCByZWFkIGJ1ZmZlclxuIiwKKwkJCQlyZXQpOwogCQl9IGVsc2UgewogCQkJcngtPmJbMF0gPSBrZXlidWZbM107CiAJCQlyeC0+YlsxXSA9IGtleWJ1Zls0XTsKIAkJCXJ4LT5iWzJdID0ga2V5YnVmWzVdOwotCQkJZGV2X2RiZyhpci0+bC5kZXYsICJrZXkgKDB4JTAyeC8weCUwMngpXG4iLAotCQkJCQkgICByeC0+YlswXSwgcngtPmJbMV0pOworCQkJZGV2X2RiZyhpci0+bC5kZXYsCisJCQkJImtleSAoMHglMDJ4LzB4JTAyeClcbiIsCisJCQkJcngtPmJbMF0sIHJ4LT5iWzFdKTsKIAkJfQogCiAJCS8qIGtleSBwcmVzc2VkID8gKi8KQEAgLTY1Niw4ICs2NTgsOCBAQAogCQlkZXZfZGJnKHR4LT5pci0+bC5kZXYsICIlKnBoIiwgNSwgYnVmKTsKIAkJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHR4LT5jLCBidWYsIHRvc2VuZCArIDEpOwogCQlpZiAocmV0ICE9IHRvc2VuZCArIDEpIHsKLQkJCWRldl9lcnIodHgtPmlyLT5sLmRldiwgImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwKLQkJCQkJICAgICAgIHJldCk7CisJCQlkZXZfZXJyKHR4LT5pci0+bC5kZXYsCisJCQkJImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKIAkJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVGQVVMVDsKIAkJfQogCQlpICs9IHRvc2VuZDsKQEAgLTcxMCwxMSArNzEyLDEyIEBACiAJfQogCWlmICgoYnVmWzBdICE9IDB4ODApICYmIChidWZbMF0gIT0gMHhhMCkpIHsKIAkJZGV2X2Vycih0eC0+aXItPmwuZGV2LCAidW5leHBlY3RlZCBJUiBUWCBpbml0IHJlc3BvbnNlOiAlMDJ4XG4iLAotCQkJCSAgICAgICBidWZbMF0pOworCQkJYnVmWzBdKTsKIAkJcmV0dXJuIDA7CiAJfQotCWRldl9ub3RpY2UodHgtPmlyLT5sLmRldiwgIlppbG9nL0hhdXBwYXVnZSBJUiBibGFzdGVyIGZpcm13YXJlIHZlcnNpb24gIgotCQkgICAgICIlZC4lZC4lZCBsb2FkZWRcbiIsIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10pOworCWRldl9ub3RpY2UodHgtPmlyLT5sLmRldiwKKwkJICAgIlppbG9nL0hhdXBwYXVnZSBJUiBibGFzdGVyIGZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWQgbG9hZGVkXG4iLAorCQkgICBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzU5LDggKzc2Miw5IEBACiAJLyogUmVxdWVzdCBjb2Rlc2V0IGRhdGEgZmlsZSAqLwogCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3X2VudHJ5LCAiaGF1cC1pci1ibGFzdGVyLmJpbiIsIHR4LT5pci0+bC5kZXYpOwogCWlmIChyZXQgIT0gMCkgewotCQlkZXZfZXJyKHR4LT5pci0+bC5kZXYsICJmaXJtd2FyZSBoYXVwLWlyLWJsYXN0ZXIuYmluIG5vdCBhdmFpbGFibGUgKCVkKVxuIiwKLQkJCSAgICByZXQpOworCQlkZXZfZXJyKHR4LT5pci0+bC5kZXYsCisJCQkiZmlybXdhcmUgaGF1cC1pci1ibGFzdGVyLmJpbiBub3QgYXZhaWxhYmxlICglZClcbiIsCisJCQlyZXQpOwogCQlyZXQgPSByZXQgPCAwID8gcmV0IDogLUVGQVVMVDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNzkyLDkgKzc5Niw5IEBACiAJaWYgKCFyZWFkX3VpbnQ4KCZkYXRhLCB0eF9kYXRhLT5lbmRwLCAmdmVyc2lvbikpCiAJCWdvdG8gY29ycnVwdDsKIAlpZiAodmVyc2lvbiAhPSAxKSB7Ci0JCWRldl9lcnIodHgtPmlyLT5sLmRldiwgInVuc3VwcG9ydGVkIGNvZGUgc2V0IGZpbGUgdmVyc2lvbiAoJXUsIGV4cGVjdGVkIgotCQkJICAgICIxKSAtLSBwbGVhc2UgdXBncmFkZSB0byBhIG5ld2VyIGRyaXZlciIsCi0JCQkgICAgdmVyc2lvbik7CisJCWRldl9lcnIodHgtPmlyLT5sLmRldiwKKwkJCSJ1bnN1cHBvcnRlZCBjb2RlIHNldCBmaWxlIHZlcnNpb24gKCV1LCBleHBlY3RlZCAxKSAtLSBwbGVhc2UgdXBncmFkZSB0byBhIG5ld2VyIGRyaXZlclxuIiwKKwkJCXZlcnNpb24pOwogCQlmd191bmxvYWRfbG9ja2VkKCk7CiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0OwpAQCAtODEwLDcgKzgxNCw3IEBACiAJCWdvdG8gY29ycnVwdDsKIAogCWRldl9kYmcodHgtPmlyLT5sLmRldiwgIiV1IElSIGJsYXN0ZXIgY29kZXNldHMgbG9hZGVkXG4iLAotCQkJICAgICAgIHR4X2RhdGEtPm51bV9jb2RlX3NldHMpOworCQl0eF9kYXRhLT5udW1fY29kZV9zZXRzKTsKIAogCXR4X2RhdGEtPmNvZGVfc2V0cyA9IHZtYWxsb2MoCiAJCXR4X2RhdGEtPm51bV9jb2RlX3NldHMgKiBzaXplb2YoY2hhciAqKSk7CkBAIC05NDAsOCArOTQ0LDkgQEAKIAkJCXVuc2lnbmVkIGNoYXIgYnVmW01BWF9YRkVSX1NJWkVdOwogCiAJCQlpZiAocmJ1Zi0+Y2h1bmtfc2l6ZSA+IHNpemVvZihidWYpKSB7Ci0JCQkJZGV2X2Vycihpci0+bC5kZXYsICJjaHVua19zaXplIGlzIHRvbyBiaWcgKCVkKSFcbiIsCi0JCQkJCSAgICByYnVmLT5jaHVua19zaXplKTsKKwkJCQlkZXZfZXJyKGlyLT5sLmRldiwKKwkJCQkJImNodW5rX3NpemUgaXMgdG9vIGJpZyAoJWQpIVxuIiwKKwkJCQkJcmJ1Zi0+Y2h1bmtfc2l6ZSk7CiAJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTk2NCw4ICs5NjksOCBAQAogCXB1dF9pcl9yeChyeCwgZmFsc2UpOwogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKLQlkZXZfZGJnKGlyLT5sLmRldiwgInJlYWQgcmVzdWx0ID0gJWQgKCVzKVxuIiwKLQkJCSAgIHJldCwgcmV0ID8gIkVycm9yIiA6ICJPSyIpOworCWRldl9kYmcoaXItPmwuZGV2LCAicmVhZCByZXN1bHQgPSAlZCAoJXMpXG4iLCByZXQsCisJCXJldCA/ICJFcnJvciIgOiAiT0siKTsKIAogCXJldHVybiByZXQgPyByZXQgOiB3cml0dGVuOwogfQpAQCAtOTgxLDggKzk4Niw5IEBACiAJcmV0ID0gZ2V0X2tleV9kYXRhKGRhdGFfYmxvY2ssIGNvZGUsIGtleSk7CiAKIAlpZiAocmV0ID09IC1FUFJPVE8pIHsKLQkJZGV2X2Vycih0eC0+aXItPmwuZGV2LCAiZmFpbGVkIHRvIGdldCBkYXRhIGZvciBjb2RlICV1LCBrZXkgJXUgLS0gY2hlY2sgIgotCQkJICAgICJsaXJjZC5jb25mIGVudHJpZXNcbiIsIGNvZGUsIGtleSk7CisJCWRldl9lcnIodHgtPmlyLT5sLmRldiwKKwkJCSJmYWlsZWQgdG8gZ2V0IGRhdGEgZm9yIGNvZGUgJXUsIGtleSAldSAtLSBjaGVjayBsaXJjZC5jb25mIGVudHJpZXNcbiIsCisJCQljb2RlLCBrZXkpOwogCQlyZXR1cm4gcmV0OwogCX0gZWxzZSBpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CkBAIC0xMDU3LDEyICsxMDYzLDE0IEBACiAJCXJldCA9IGkyY19tYXN0ZXJfc2VuZCh0eC0+YywgYnVmLCAxKTsKIAkJaWYgKHJldCA9PSAxKQogCQkJYnJlYWs7Ci0JCWRldl9kYmcodHgtPmlyLT5sLmRldiwgIk5BSyBleHBlY3RlZDogaTJjX21hc3Rlcl9zZW5kICIKLQkJCSJmYWlsZWQgd2l0aCAlZCAodHJ5ICVkKVxuIiwgcmV0LCBpKzEpOworCQlkZXZfZGJnKHR4LT5pci0+bC5kZXYsCisJCQkiTkFLIGV4cGVjdGVkOiBpMmNfbWFzdGVyX3NlbmQgZmFpbGVkIHdpdGggJWQgKHRyeSAlZClcbiIsCisJCQlyZXQsIGkrMSk7CiAJfQogCWlmIChyZXQgIT0gMSkgewotCQlkZXZfZXJyKHR4LT5pci0+bC5kZXYsICJJUiBUWCBjaGlwIG5ldmVyIGdvdCByZWFkeTogbGFzdCBpMmNfbWFzdGVyX3NlbmQgIgotCQkJICAgICJmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKKwkJZGV2X2Vycih0eC0+aXItPmwuZGV2LAorCQkJIklSIFRYIGNoaXAgbmV2ZXIgZ290IHJlYWR5OiBsYXN0IGkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJCXJldCk7CiAJCXJldHVybiByZXQgPCAwID8gcmV0IDogLUVGQVVMVDsKIAl9CiAKQEAgLTEwNzQsNyArMTA4Miw3IEBACiAJfQogCWlmIChidWZbMF0gIT0gMHg4MCkgewogCQlkZXZfZXJyKHR4LT5pci0+bC5kZXYsICJ1bmV4cGVjdGVkIElSIFRYIHJlc3BvbnNlICMyOiAlMDJ4XG4iLAotCQkJCSAgICAgICBidWZbMF0pOworCQkJYnVmWzBdKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC0xMTY1LDEyICsxMTczLDEyIEBACiAJCSAqLwogCQlpZiAocmV0ICE9IDApIHsKIAkJCS8qIExvb2tzIGxpa2UgdGhlIGNoaXAgY3Jhc2hlZCwgcmVzZXQgaXQgKi8KLQkJCWRldl9lcnIodHgtPmlyLT5sLmRldiwgInNlbmRpbmcgdG8gdGhlIElSIHRyYW5zbWl0dGVyIGNoaXAgIgotCQkJCSAgICAiZmFpbGVkLCB0cnlpbmcgcmVzZXRcbiIpOworCQkJZGV2X2Vycih0eC0+aXItPmwuZGV2LAorCQkJCSJzZW5kaW5nIHRvIHRoZSBJUiB0cmFuc21pdHRlciBjaGlwIGZhaWxlZCwgdHJ5aW5nIHJlc2V0XG4iKTsKIAogCQkJaWYgKGZhaWx1cmVzID49IDMpIHsKLQkJCQlkZXZfZXJyKHR4LT5pci0+bC5kZXYsICJ1bmFibGUgdG8gc2VuZCB0byB0aGUgSVIgY2hpcCAiCi0JCQkJCSAgICAiYWZ0ZXIgMyByZXNldHMsIGdpdmluZyB1cFxuIik7CisJCQkJZGV2X2Vycih0eC0+aXItPmwuZGV2LAorCQkJCQkidW5hYmxlIHRvIHNlbmQgdG8gdGhlIElSIGNoaXAgYWZ0ZXIgMyByZXNldHMsIGdpdmluZyB1cFxuIik7CiAJCQkJbXV0ZXhfdW5sb2NrKCZpci0+aXJfbG9jayk7CiAJCQkJbXV0ZXhfdW5sb2NrKCZ0eC0+Y2xpZW50X2xvY2spOwogCQkJCXB1dF9pcl90eCh0eCwgZmFsc2UpOwpAQCAtMTIyNiw3ICsxMjM0LDcgQEAKIAlyZXQgPSBsaXJjX2J1ZmZlcl9lbXB0eShyYnVmKSA/IDAgOiAoUE9MTElOfFBPTExSRE5PUk0pOwogCiAJZGV2X2RiZyhpci0+bC5kZXYsICJwb2xsIHJlc3VsdCA9ICVzXG4iLAotCQkJICAgcmV0ID8gIlBPTExJTnxQT0xMUkROT1JNIiA6ICJub25lIik7CisJCXJldCA/ICJQT0xMSU58UE9MTFJETk9STSIgOiAibm9uZSIpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEzMzMsNyArMTM0MSw4IEBACiAJc3RydWN0IElSICppciA9IGZpbGVwLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoaXIgPT0gTlVMTCkgewotCQlkZXZfZXJyKGlyLT5sLmRldiwgImNsb3NlOiBubyBwcml2YXRlX2RhdGEgYXR0YWNoZWQgdG8gdGhlIGZpbGUhXG4iKTsKKwkJZGV2X2Vycihpci0+bC5kZXYsCisJCQkiY2xvc2U6IG5vIHByaXZhdGVfZGF0YSBhdHRhY2hlZCB0byB0aGUgZmlsZSFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTE1NDAsOCArMTU0OSw5IEBACiAKIAkJLyogUHJvY2VlZCBvbmx5IGlmIHRoZSBSeCBjbGllbnQgaXMgYWxzbyByZWFkeSBvciBub3QgbmVlZGVkICovCiAJCWlmIChyeCA9PSBOVUxMICYmICF0eF9vbmx5KSB7Ci0JCQlkZXZfaW5mbyh0eC0+aXItPmwuZGV2LCAicHJvYmUgb2YgSVIgVHggb24gJXMgKGkyYy0lZCkgZG9uZS4gV2FpdGluZyIKLQkJCQkgICAiIG9uIElSIFJ4LlxuIiwgYWRhcC0+bmFtZSwgYWRhcC0+bnIpOworCQkJZGV2X2luZm8odHgtPmlyLT5sLmRldiwKKwkJCQkgInByb2JlIG9mIElSIFR4IG9uICVzIChpMmMtJWQpIGRvbmUuIFdhaXRpbmcgb24gSVIgUnguXG4iLAorCQkJCSBhZGFwLT5uYW1lLCBhZGFwLT5ucik7CiAJCQlnb3RvIG91dF9vazsKIAkJfQogCX0gZWxzZSB7CkBAIC0xNTc5LDggKzE1ODksOSBAQAogCQkJCSAgICAgICAiemlsb2ctcngtaTJjLSVkIiwgYWRhcC0+bnIpOwogCQlpZiAoSVNfRVJSKHJ4LT50YXNrKSkgewogCQkJcmV0ID0gUFRSX0VSUihyeC0+dGFzayk7Ci0JCQlkZXZfZXJyKHR4LT5pci0+bC5kZXYsICIlczogY291bGQgbm90IHN0YXJ0IElSIFJ4IHBvbGxpbmcgdGhyZWFkIgotCQkJCSAgICAiXG4iLCBfX2Z1bmNfXyk7CisJCQlkZXZfZXJyKHR4LT5pci0+bC5kZXYsCisJCQkJIiVzOiBjb3VsZCBub3Qgc3RhcnQgSVIgUnggcG9sbGluZyB0aHJlYWRcbiIsCisJCQkJX19mdW5jX18pOwogCQkJLyogRmFpbGVkIGt0aHJlYWQsIHNvIHB1dCBiYWNrIHRoZSBpciByZWYgKi8KIAkJCXB1dF9pcl9kZXZpY2UoaXIsIHRydWUpOwogCQkJLyogRmFpbHVyZSBleGl0LCBzbyBwdXQgYmFjayByeCByZWYgZnJvbSBpMmNfY2xpZW50ICovCkBAIC0xNTkyLDggKzE2MDMsOCBAQAogCiAJCS8qIFByb2NlZWQgb25seSBpZiB0aGUgVHggY2xpZW50IGlzIGFsc28gcmVhZHkgKi8KIAkJaWYgKHR4ID09IE5VTEwpIHsKLQkJCXByX2luZm8oInByb2JlIG9mIElSIFJ4IG9uICVzIChpMmMtJWQpIGRvbmUuIFdhaXRpbmciCi0JCQkJICAgIiBvbiBJUiBUeC5cbiIsIGFkYXAtPm5hbWUsIGFkYXAtPm5yKTsKKwkJCXByX2luZm8oInByb2JlIG9mIElSIFJ4IG9uICVzIChpMmMtJWQpIGRvbmUuIFdhaXRpbmcgb24gSVIgVHguXG4iLAorCQkJCSAgIGFkYXAtPm5hbWUsIGFkYXAtPm5yKTsKIAkJCWdvdG8gb3V0X29rOwogCQl9CiAJfQpAQCAtMTYwMiwxMyArMTYxMywxNSBAQAogCWlyLT5sLm1pbm9yID0gbWlub3I7IC8qIG1vZHVsZSBvcHRpb246IHVzZXIgcmVxdWVzdGVkIG1pbm9yIG51bWJlciAqLwogCWlyLT5sLm1pbm9yID0gbGlyY19yZWdpc3Rlcl9kcml2ZXIoJmlyLT5sKTsKIAlpZiAoaXItPmwubWlub3IgPCAwIHx8IGlyLT5sLm1pbm9yID49IE1BWF9JUkNUTF9ERVZJQ0VTKSB7Ci0JCWRldl9lcnIodHgtPmlyLT5sLmRldiwgIiVzOiBcIm1pbm9yXCIgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kICVkICglZCkhXG4iLAotCQkJICAgIF9fZnVuY19fLCBNQVhfSVJDVExfREVWSUNFUy0xLCBpci0+bC5taW5vcik7CisJCWRldl9lcnIodHgtPmlyLT5sLmRldiwKKwkJCSIlczogXCJtaW5vclwiIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAlZCAoJWQpIVxuIiwKKwkJCV9fZnVuY19fLCBNQVhfSVJDVExfREVWSUNFUy0xLCBpci0+bC5taW5vcik7CiAJCXJldCA9IC1FQkFEUlFDOwogCQlnb3RvIG91dF9wdXRfeHg7CiAJfQotCWRldl9pbmZvKGlyLT5sLmRldiwgIklSIHVuaXQgb24gJXMgKGkyYy0lZCkgcmVnaXN0ZXJlZCBhcyBsaXJjJWQgYW5kIHJlYWR5XG4iLAotCQkgICBhZGFwLT5uYW1lLCBhZGFwLT5uciwgaXItPmwubWlub3IpOworCWRldl9pbmZvKGlyLT5sLmRldiwKKwkJICJJUiB1bml0IG9uICVzIChpMmMtJWQpIHJlZ2lzdGVyZWQgYXMgbGlyYyVkIGFuZCByZWFkeVxuIiwKKwkJIGFkYXAtPm5hbWUsIGFkYXAtPm5yLCBpci0+bC5taW5vcik7CiAKIG91dF9vazoKIAlpZiAocnggIT0gTlVMTCkKQEAgLTE2MTYsOCArMTYyOSw5IEBACiAJaWYgKHR4ICE9IE5VTEwpCiAJCXB1dF9pcl90eCh0eCwgdHJ1ZSk7CiAJcHV0X2lyX2RldmljZShpciwgdHJ1ZSk7Ci0JZGV2X2luZm8oaXItPmwuZGV2LCAicHJvYmUgb2YgSVIgJXMgb24gJXMgKGkyYy0lZCkgZG9uZVxuIiwKLQkJICAgdHhfcHJvYmUgPyAiVHgiIDogIlJ4IiwgYWRhcC0+bmFtZSwgYWRhcC0+bnIpOworCWRldl9pbmZvKGlyLT5sLmRldiwKKwkJICJwcm9iZSBvZiBJUiAlcyBvbiAlcyAoaTJjLSVkKSBkb25lXG4iLAorCQkgdHhfcHJvYmUgPyAiVHgiIDogIlJ4IiwgYWRhcC0+bmFtZSwgYWRhcC0+bnIpOwogCW11dGV4X3VubG9jaygmaXJfZGV2aWNlc19sb2NrKTsKIAlyZXR1cm4gMDsKIApAQCAtMTYyOSw5ICsxNjQzLDkgQEAKIG91dF9wdXRfaXI6CiAJcHV0X2lyX2RldmljZShpciwgdHJ1ZSk7CiBvdXRfbm9faXI6Ci0JZGV2X2VycigmY2xpZW50LT5kZXYsICIlczogcHJvYmluZyBJUiAlcyBvbiAlcyAoaTJjLSVkKSBmYWlsZWQgd2l0aCAlZFxuIiwKLQkJICAgIF9fZnVuY19fLCB0eF9wcm9iZSA/ICJUeCIgOiAiUngiLCBhZGFwLT5uYW1lLCBhZGFwLT5uciwKLQkJICAgcmV0KTsKKwlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJIiVzOiBwcm9iaW5nIElSICVzIG9uICVzIChpMmMtJWQpIGZhaWxlZCB3aXRoICVkXG4iLAorCQlfX2Z1bmNfXywgdHhfcHJvYmUgPyAiVHgiIDogIlJ4IiwgYWRhcC0+bmFtZSwgYWRhcC0+bnIsIHJldCk7CiAJbXV0ZXhfdW5sb2NrKCZpcl9kZXZpY2VzX2xvY2spOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbW44ODQ3Mi9tbjg4NDcyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbW44ODQ3Mi9tbjg4NDcyLmMKaW5kZXggNTJkZThmOC4uNmVlYmU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL21uODg0NzIvbW44ODQ3Mi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9tbjg4NDcyL21uODg0NzIuYwpAQCAtMzAsNiArMzAsNyBAQAogCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqYyA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwogCWludCByZXQsIGk7CiAJdTMyIGlmX2ZyZXF1ZW5jeSA9IDA7CisJdTY0IHRtcDsKIAl1OCBkZWxpdmVyeV9zeXN0ZW1fdmFsLCBpZl92YWxbM10sIGJ3X3ZhbFs3XSwgYndfdmFsMjsKIAogCWRldl9kYmcoJmNsaWVudC0+ZGV2LApAQCAtNTcsMzYgKzU4LDIyIEBACiAJCWdvdG8gZXJyOwogCX0KIAotCXN3aXRjaCAoYy0+ZGVsaXZlcnlfc3lzdGVtKSB7Ci0JY2FzZSBTWVNfRFZCVDoKLQljYXNlIFNZU19EVkJUMjoKLQkJaWYgKGMtPmJhbmR3aWR0aF9oeiA8PSA2MDAwMDAwKSB7Ci0JCQkvKiBJRiAzNTcwMDAwIEh6LCBCVyA2MDAwMDAwIEh6ICovCi0JCQltZW1jcHkoaWZfdmFsLCAiXHgyY1x4OTRceGRiIiwgMyk7Ci0JCQltZW1jcHkoYndfdmFsLCAiXHhiZlx4NTVceDU1XHgxNVx4NmJceDE1XHg2YiIsIDcpOwotCQkJYndfdmFsMiA9IDB4MDI7Ci0JCX0gZWxzZSBpZiAoYy0+YmFuZHdpZHRoX2h6IDw9IDcwMDAwMDApIHsKLQkJCS8qIElGIDQ1NzAwMDAgSHosIEJXIDcwMDAwMDAgSHogKi8KLQkJCW1lbWNweShpZl92YWwsICJceDM5XHgxMVx4YmMiLCAzKTsKLQkJCW1lbWNweShid192YWwsICJceGE0XHgwMFx4MDBceDBmXHgyY1x4MGZceDJjIiwgNyk7Ci0JCQlid192YWwyID0gMHgwMTsKLQkJfSBlbHNlIGlmIChjLT5iYW5kd2lkdGhfaHogPD0gODAwMDAwMCkgewotCQkJLyogSUYgNDU3MDAwMCBIeiwgQlcgODAwMDAwMCBIeiAqLwotCQkJbWVtY3B5KGlmX3ZhbCwgIlx4MzlceDExXHhiYyIsIDMpOwotCQkJbWVtY3B5KGJ3X3ZhbCwgIlx4OGZceDgwXHgwMFx4MDhceGVlXHgwOFx4ZWUiLCA3KTsKLQkJCWJ3X3ZhbDIgPSAweDAwOwotCQl9IGVsc2UgewotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgU1lTX0RWQkNfQU5ORVhfQToKLQkJLyogSUYgNTA3MDAwMCBIeiwgQlcgODAwMDAwMCBIeiAqLwotCQltZW1jcHkoaWZfdmFsLCAiXHgzZlx4NTBceDJjIiwgMyk7CisJaWYgKGMtPmJhbmR3aWR0aF9oeiA8PSA1MDAwMDAwKSB7CisJCW1lbWNweShid192YWwsICJceGU1XHg5OVx4OWFceDFiXHhhOVx4MWJceGE5IiwgNyk7CisJCWJ3X3ZhbDIgPSAweDAzOworCX0gZWxzZSBpZiAoYy0+YmFuZHdpZHRoX2h6IDw9IDYwMDAwMDApIHsKKwkJLyogSUYgMzU3MDAwMCBIeiwgQlcgNjAwMDAwMCBIeiAqLworCQltZW1jcHkoYndfdmFsLCAiXHhiZlx4NTVceDU1XHgxNVx4NmJceDE1XHg2YiIsIDcpOworCQlid192YWwyID0gMHgwMjsKKwl9IGVsc2UgaWYgKGMtPmJhbmR3aWR0aF9oeiA8PSA3MDAwMDAwKSB7CisJCS8qIElGIDQ1NzAwMDAgSHosIEJXIDcwMDAwMDAgSHogKi8KKwkJbWVtY3B5KGJ3X3ZhbCwgIlx4YTRceDAwXHgwMFx4MGZceDJjXHgwZlx4MmMiLCA3KTsKKwkJYndfdmFsMiA9IDB4MDE7CisJfSBlbHNlIGlmIChjLT5iYW5kd2lkdGhfaHogPD0gODAwMDAwMCkgeworCQkvKiBJRiA0NTcwMDAwIEh6LCBCVyA4MDAwMDAwIEh6ICovCiAJCW1lbWNweShid192YWwsICJceDhmXHg4MFx4MDBceDA4XHhlZVx4MDhceGVlIiwgNyk7CiAJCWJ3X3ZhbDIgPSAweDAwOwotCQlicmVhazsKLQlkZWZhdWx0OgorCX0gZWxzZSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyOwogCX0KQEAgLTEwNiwxNyArOTMsMTIgQEAKIAkJZGV2X2RiZygmY2xpZW50LT5kZXYsICJnZXRfaWZfZnJlcXVlbmN5PSVkXG4iLCBpZl9mcmVxdWVuY3kpOwogCX0KIAotCXN3aXRjaCAoaWZfZnJlcXVlbmN5KSB7Ci0JY2FzZSAzNTcwMDAwOgotCWNhc2UgNDU3MDAwMDoKLQljYXNlIDUwNzAwMDA6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiSUYgZnJlcXVlbmN5ICVkIG5vdCBzdXBwb3J0ZWRcbiIsCi0JCQkJaWZfZnJlcXVlbmN5KTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnI7Ci0JfQorCS8qIENhbGN1bGF0ZSBJRiByZWdpc3RlcnMgKCAoMTw8MjQpKklGIC8gWHRhbCApICovCisJdG1wID0gIGRpdl91NjQoaWZfZnJlcXVlbmN5ICogKHU2NCkoMTw8MjQpICsgKGRldi0+eHRhbCAvIDIpLAorCQkJCSAgIGRldi0+eHRhbCk7CisJaWZfdmFsWzBdID0gKCh0bXAgPj4gMTYpICYgMHhmZik7CisJaWZfdmFsWzFdID0gKCh0bXAgPj4gIDgpICYgMHhmZik7CisJaWZfdmFsWzJdID0gKCh0bXAgPj4gIDApICYgMHhmZik7CiAKIAlyZXQgPSByZWdtYXBfd3JpdGUoZGV2LT5yZWdtYXBbMl0sIDB4ZmIsIDB4MTMpOwogCXJldCA9IHJlZ21hcF93cml0ZShkZXYtPnJlZ21hcFsyXSwgMHhlZiwgMHgxMyk7CkBAIC0xOTgsNiArMTgwLDggQEAKIAlyZXQgPSByZWdtYXBfd3JpdGUoZGV2LT5yZWdtYXBbMF0sIDB4YWUsIDB4MDApOwogCXJldCA9IHJlZ21hcF93cml0ZShkZXYtPnJlZ21hcFsyXSwgMHgwOCwgMHgxZCk7CiAJcmV0ID0gcmVnbWFwX3dyaXRlKGRldi0+cmVnbWFwWzBdLCAweGQ5LCAweGUzKTsKKworCS8qIFJlc2V0IGRlbW9kICovCiAJcmV0ID0gcmVnbWFwX3dyaXRlKGRldi0+cmVnbWFwWzJdLCAweGY4LCAweDlmKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKQEAgLTQxMSw2ICszOTUsNyBAQAogCX0KIAogCWRldi0+aTJjX3dyX21heCA9IGNvbmZpZy0+aTJjX3dyX21heDsKKwlkZXYtPnh0YWwgPSBjb25maWctPnh0YWw7CiAJZGV2LT5jbGllbnRbMF0gPSBjbGllbnQ7CiAJZGV2LT5yZWdtYXBbMF0gPSByZWdtYXBfaW5pdF9pMmMoZGV2LT5jbGllbnRbMF0sICZyZWdtYXBfY29uZmlnKTsKIAlpZiAoSVNfRVJSKGRldi0+cmVnbWFwWzBdKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL21uODg0NzIvbW44ODQ3Ml9wcml2LmggYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbW44ODQ3Mi9tbjg4NDcyX3ByaXYuaAppbmRleCAxMDk1OTQ5Li5iMTJiNzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbW44ODQ3Mi9tbjg4NDcyX3ByaXYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvbW44ODQ3Mi9tbjg4NDcyX3ByaXYuaApAQCAtMzEsNiArMzEsNyBAQAogCXUxNiBpMmNfd3JfbWF4OwogCWZlX2RlbGl2ZXJ5X3N5c3RlbV90IGRlbGl2ZXJ5X3N5c3RlbTsKIAlib29sIHdhcm07IC8qIEZXIHJ1bm5pbmcgKi8KKwl1MzIgeHRhbDsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL29tYXA0aXNzL2lzcy5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL29tYXA0aXNzL2lzcy5jCmluZGV4IGNjMWRmYWQuLjQ0YjgxYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9vbWFwNGlzcy9pc3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvb21hcDRpc3MvaXNzLmMKQEAgLTU2MCw2ICs1NjAsNjEgQEAKICAqLwogCiAvKgorICogaXNzX3BpcGVsaW5lX2Rpc2FibGUgLSBEaXNhYmxlIHN0cmVhbWluZyBvbiBhIHBpcGVsaW5lCisgKiBAcGlwZTogSVNTIHBpcGVsaW5lCisgKiBAdW50aWw6IGVudGl0eSBhdCB3aGljaCB0byBzdG9wIHBpcGVsaW5lIHdhbGsKKyAqCisgKiBXYWxrIHRoZSBlbnRpdGllcyBjaGFpbiBzdGFydGluZyBhdCB0aGUgcGlwZWxpbmUgb3V0cHV0IHZpZGVvIG5vZGUgYW5kIHN0b3AKKyAqIGFsbCBtb2R1bGVzIGluIHRoZSBjaGFpbi4gV2FpdCBzeW5jaHJvbm91c2x5IGZvciB0aGUgbW9kdWxlcyB0byBiZSBzdG9wcGVkIGlmCisgKiBuZWNlc3NhcnkuCisgKgorICogSWYgdGhlIHVudGlsIGFyZ3VtZW50IGlzbid0IE5VTEwsIHN0b3AgdGhlIHBpcGVsaW5lIHdhbGsgd2hlbiByZWFjaGluZyB0aGUKKyAqIHVudGlsIGVudGl0eS4gVGhpcyBpcyB1c2VkIHRvIGRpc2FibGUgYSBwYXJ0aWFsbHkgc3RhcnRlZCBwaXBlbGluZSBkdWUgdG8gYQorICogc3ViZGV2IHN0YXJ0IGVycm9yLgorICovCitzdGF0aWMgaW50IGlzc19waXBlbGluZV9kaXNhYmxlKHN0cnVjdCBpc3NfcGlwZWxpbmUgKnBpcGUsCisJCQkJc3RydWN0IG1lZGlhX2VudGl0eSAqdW50aWwpCit7CisJc3RydWN0IGlzc19kZXZpY2UgKmlzcyA9IHBpcGUtPm91dHB1dC0+aXNzOworCXN0cnVjdCBtZWRpYV9lbnRpdHkgKmVudGl0eTsKKwlzdHJ1Y3QgbWVkaWFfcGFkICpwYWQ7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXY7CisJaW50IGZhaWx1cmUgPSAwOworCWludCByZXQ7CisKKwllbnRpdHkgPSAmcGlwZS0+b3V0cHV0LT52aWRlby5lbnRpdHk7CisJd2hpbGUgKDEpIHsKKwkJcGFkID0gJmVudGl0eS0+cGFkc1swXTsKKwkJaWYgKCEocGFkLT5mbGFncyAmIE1FRElBX1BBRF9GTF9TSU5LKSkKKwkJCWJyZWFrOworCisJCXBhZCA9IG1lZGlhX2VudGl0eV9yZW1vdGVfcGFkKHBhZCk7CisJCWlmIChwYWQgPT0gTlVMTCB8fAorCQkgICAgbWVkaWFfZW50aXR5X3R5cGUocGFkLT5lbnRpdHkpICE9IE1FRElBX0VOVF9UX1Y0TDJfU1VCREVWKQorCQkJYnJlYWs7CisKKwkJZW50aXR5ID0gcGFkLT5lbnRpdHk7CisJCWlmIChlbnRpdHkgPT0gdW50aWwpCisJCQlicmVhazsKKworCQlzdWJkZXYgPSBtZWRpYV9lbnRpdHlfdG9fdjRsMl9zdWJkZXYoZW50aXR5KTsKKwkJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzdWJkZXYsIHZpZGVvLCBzX3N0cmVhbSwgMCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZGJnKGlzcy0+ZGV2LCAiJXM6IG1vZHVsZSBzdG9wIHRpbWVvdXQuXG4iLAorCQkJCXN1YmRldi0+bmFtZSk7CisJCQkvKiBJZiB0aGUgZW50aXR5IGZhaWxlZCB0byBzdG9wcGVkLCBhc3N1bWUgaXQgaGFzCisJCQkgKiBjcmFzaGVkLiBNYXJrIGl0IGFzIHN1Y2gsIHRoZSBJU1Mgd2lsbCBiZSByZXNldCB3aGVuCisJCQkgKiBhcHBsaWNhdGlvbnMgd2lsbCByZWxlYXNlIGl0LgorCQkJICovCisJCQlpc3MtPmNyYXNoZWQgfD0gMVUgPDwgc3ViZGV2LT5lbnRpdHkuaWQ7CisJCQlmYWlsdXJlID0gLUVUSU1FRE9VVDsKKwkJfQorCX0KKworCXJldHVybiBmYWlsdXJlOworfQorCisvKgogICogaXNzX3BpcGVsaW5lX2VuYWJsZSAtIEVuYWJsZSBzdHJlYW1pbmcgb24gYSBwaXBlbGluZQogICogQHBpcGU6IElTUyBwaXBlbGluZQogICogQG1vZGU6IFN0cmVhbSBtb2RlIChzaW5nbGUgc2hvdCBvciBjb250aW51b3VzKQpAQCAtNjEwLDYxICs2NjUsMjEgQEAKIAkJc3ViZGV2ID0gbWVkaWFfZW50aXR5X3RvX3Y0bDJfc3ViZGV2KGVudGl0eSk7CiAKIAkJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzdWJkZXYsIHZpZGVvLCBzX3N0cmVhbSwgbW9kZSk7Ci0JCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRU5PSU9DVExDTUQpCisJCWlmIChyZXQgPCAwICYmIHJldCAhPSAtRU5PSU9DVExDTUQpIHsKKwkJCWlzc19waXBlbGluZV9kaXNhYmxlKHBpcGUsIGVudGl0eSk7CiAJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJaWYgKHN1YmRldiA9PSAmaXNzLT5jc2kyYS5zdWJkZXYgfHwKKwkJICAgIHN1YmRldiA9PSAmaXNzLT5jc2kyYi5zdWJkZXYpCisJCQlwaXBlLT5kb19wcm9wYWdhdGlvbiA9IHRydWU7CiAJfQorCiAJaXNzX3ByaW50X3N0YXR1cyhwaXBlLT5vdXRwdXQtPmlzcyk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBpc3NfcGlwZWxpbmVfZGlzYWJsZSAtIERpc2FibGUgc3RyZWFtaW5nIG9uIGEgcGlwZWxpbmUKLSAqIEBwaXBlOiBJU1MgcGlwZWxpbmUKLSAqCi0gKiBXYWxrIHRoZSBlbnRpdGllcyBjaGFpbiBzdGFydGluZyBhdCB0aGUgcGlwZWxpbmUgb3V0cHV0IHZpZGVvIG5vZGUgYW5kIHN0b3AKLSAqIGFsbCBtb2R1bGVzIGluIHRoZSBjaGFpbi4gV2FpdCBzeW5jaHJvbm91c2x5IGZvciB0aGUgbW9kdWxlcyB0byBiZSBzdG9wcGVkIGlmCi0gKiBuZWNlc3NhcnkuCi0gKi8KLXN0YXRpYyBpbnQgaXNzX3BpcGVsaW5lX2Rpc2FibGUoc3RydWN0IGlzc19waXBlbGluZSAqcGlwZSkKLXsKLQlzdHJ1Y3QgaXNzX2RldmljZSAqaXNzID0gcGlwZS0+b3V0cHV0LT5pc3M7Ci0Jc3RydWN0IG1lZGlhX2VudGl0eSAqZW50aXR5OwotCXN0cnVjdCBtZWRpYV9wYWQgKnBhZDsKLQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldjsKLQlpbnQgZmFpbHVyZSA9IDA7Ci0JaW50IHJldDsKLQotCWVudGl0eSA9ICZwaXBlLT5vdXRwdXQtPnZpZGVvLmVudGl0eTsKLQl3aGlsZSAoMSkgewotCQlwYWQgPSAmZW50aXR5LT5wYWRzWzBdOwotCQlpZiAoIShwYWQtPmZsYWdzICYgTUVESUFfUEFEX0ZMX1NJTkspKQotCQkJYnJlYWs7Ci0KLQkJcGFkID0gbWVkaWFfZW50aXR5X3JlbW90ZV9wYWQocGFkKTsKLQkJaWYgKHBhZCA9PSBOVUxMIHx8Ci0JCSAgICBtZWRpYV9lbnRpdHlfdHlwZShwYWQtPmVudGl0eSkgIT0gTUVESUFfRU5UX1RfVjRMMl9TVUJERVYpCi0JCQlicmVhazsKLQotCQllbnRpdHkgPSBwYWQtPmVudGl0eTsKLQkJc3ViZGV2ID0gbWVkaWFfZW50aXR5X3RvX3Y0bDJfc3ViZGV2KGVudGl0eSk7Ci0KLQkJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChzdWJkZXYsIHZpZGVvLCBzX3N0cmVhbSwgMCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZGJnKGlzcy0+ZGV2LCAiJXM6IG1vZHVsZSBzdG9wIHRpbWVvdXQuXG4iLAotCQkJCXN1YmRldi0+bmFtZSk7Ci0JCQkvKiBJZiB0aGUgZW50aXR5IGZhaWxlZCB0byBzdG9wcGVkLCBhc3N1bWUgaXQgaGFzCi0JCQkgKiBjcmFzaGVkLiBNYXJrIGl0IGFzIHN1Y2gsIHRoZSBJU1Mgd2lsbCBiZSByZXNldCB3aGVuCi0JCQkgKiBhcHBsaWNhdGlvbnMgd2lsbCByZWxlYXNlIGl0LgotCQkJICovCi0JCQlpc3MtPmNyYXNoZWQgfD0gMVUgPDwgc3ViZGV2LT5lbnRpdHkuaWQ7Ci0JCQlmYWlsdXJlID0gLUVUSU1FRE9VVDsKLQkJfQotCX0KLQotCXJldHVybiBmYWlsdXJlOwotfQotCi0vKgogICogb21hcDRpc3NfcGlwZWxpbmVfc2V0X3N0cmVhbSAtIEVuYWJsZS9kaXNhYmxlIHN0cmVhbWluZyBvbiBhIHBpcGVsaW5lCiAgKiBAcGlwZTogSVNTIHBpcGVsaW5lCiAgKiBAc3RhdGU6IFN0cmVhbSBzdGF0ZSAoc3RvcHBlZCwgc2luZ2xlIHNob3Qgb3IgY29udGludW91cykKQEAgLTY4Miw3ICs2OTcsNyBAQAogCWludCByZXQ7CiAKIAlpZiAoc3RhdGUgPT0gSVNTX1BJUEVMSU5FX1NUUkVBTV9TVE9QUEVEKQotCQlyZXQgPSBpc3NfcGlwZWxpbmVfZGlzYWJsZShwaXBlKTsKKwkJcmV0ID0gaXNzX3BpcGVsaW5lX2Rpc2FibGUocGlwZSwgTlVMTCk7CiAJZWxzZQogCQlyZXQgPSBpc3NfcGlwZWxpbmVfZW5hYmxlKHBpcGUsIHN0YXRlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL29tYXA0aXNzL2lzc19jc2kyLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvb21hcDRpc3MvaXNzX2NzaTIuYwppbmRleCAyMTk3MWM2Li4yZDk2ZmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvb21hcDRpc3MvaXNzX2NzaTIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvb21hcDRpc3MvaXNzX2NzaTIuYwpAQCAtMzE5LDYgKzMxOSw4IEBACiB7CiAJdTMyIHJlZyA9IDA7CiAKKwljdHgtPmZyYW1lID0gMDsKKwogCS8qIFNldCB1cCBDU0kyX0NUeF9DVFJMMSAqLwogCWlmIChjdHgtPmVvZl9lbmFibGVkKQogCQlyZWcgPSBDU0kyX0NUWF9DVFJMMV9FT0ZfRU47CkBAIC0zOTYsMjEgKzM5OCwxOCBAQAogICovCiBzdGF0aWMgdm9pZCBjc2kyX2lycV9jdHhfc2V0KHN0cnVjdCBpc3NfY3NpMl9kZXZpY2UgKmNzaTIsIGludCBlbmFibGUpCiB7Ci0JdTMyIHJlZyA9IENTSTJfQ1RYX0lSUV9GRTsKKwljb25zdCB1MzIgbWFzayA9IENTSTJfQ1RYX0lSUV9GRSB8IENTSTJfQ1RYX0lSUV9GUzsKIAlpbnQgaTsKIAotCWlmIChjc2kyLT51c2VfZnNfaXJxKQotCQlyZWcgfD0gQ1NJMl9DVFhfSVJRX0ZTOwotCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQlpc3NfcmVnX3dyaXRlKGNzaTItPmlzcywgY3NpMi0+cmVnczEsIENTSTJfQ1RYX0lSUVNUQVRVUyhpKSwKLQkJCSAgICAgIHJlZyk7CisJCQkgICAgICBtYXNrKTsKIAkJaWYgKGVuYWJsZSkKIAkJCWlzc19yZWdfc2V0KGNzaTItPmlzcywgY3NpMi0+cmVnczEsCi0JCQkJICAgIENTSTJfQ1RYX0lSUUVOQUJMRShpKSwgcmVnKTsKKwkJCQkgICAgQ1NJMl9DVFhfSVJRRU5BQkxFKGkpLCBtYXNrKTsKIAkJZWxzZQogCQkJaXNzX3JlZ19jbHIoY3NpMi0+aXNzLCBjc2kyLT5yZWdzMSwKLQkJCQkgICAgQ1NJMl9DVFhfSVJRRU5BQkxFKGkpLCByZWcpOworCQkJCSAgICBDU0kyX0NUWF9JUlFFTkFCTEUoaSksIG1hc2spOwogCX0KIH0KIApAQCAtNjc5LDggKzY3OCwzNCBAQAogCWlmIChzdGF0dXMgJiBDU0kyX0NUWF9JUlFfRlMpIHsKIAkJc3RydWN0IGlzc19waXBlbGluZSAqcGlwZSA9CiAJCQkJICAgICB0b19pc3NfcGlwZWxpbmUoJmNzaTItPnN1YmRldi5lbnRpdHkpOwotCQlpZiAocGlwZS0+ZG9fcHJvcGFnYXRpb24pCisJCXUxNiBmcmFtZTsKKwkJdTE2IGRlbHRhOworCisJCWZyYW1lID0gaXNzX3JlZ19yZWFkKGNzaTItPmlzcywgY3NpMi0+cmVnczEsCisJCQkJICAgICBDU0kyX0NUWF9DVFJMMihjdHgtPmN0eG51bSkpCisJCSAgICAgID4+IENTSTJfQ1RYX0NUUkwyX0ZSQU1FX1NISUZUOworCisJCWlmIChmcmFtZSA9PSAwKSB7CisJCQkvKiBBIHplcm8gdmFsdWUgbWVhbnMgdGhhdCB0aGUgY291bnRlciBpc24ndCBpbXBsZW1lbnRlZAorCQkJICogYnkgdGhlIHNvdXJjZS4gSW5jcmVtZW50IHRoZSBmcmFtZSBudW1iZXIgaW4gc29mdHdhcmUKKwkJCSAqIGluIHRoYXQgY2FzZS4KKwkJCSAqLwogCQkJYXRvbWljX2luYygmcGlwZS0+ZnJhbWVfbnVtYmVyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIEV4dGVuZCB0aGUgMTYgYml0IGZyYW1lIG51bWJlciB0byAzMiBiaXRzIGJ5CisJCQkgKiBjb21wdXRpbmcgdGhlIGRlbHRhIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIENTSTIKKwkJCSAqIGZyYW1lIG51bWJlcnMgYW5kIGFkZGluZyBpdCB0byB0aGUgc29mdHdhcmUgZnJhbWUKKwkJCSAqIG51bWJlci4gVGhlIGhhcmR3YXJlIGNvdW50ZXIgc3RhcnRzIGF0IDEgYW5kIHdyYXBzCisJCQkgKiBmcm9tIDB4ZmZmZiB0byAxIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCAwLCBzbyBzdWJ0cmFjdAorCQkJICogMSB3aGVuIHRoZSBjb3VudGVyIHdyYXBzLgorCQkJICovCisJCQlkZWx0YSA9IGZyYW1lIC0gY3R4LT5mcmFtZTsKKwkJCWlmIChmcmFtZSA8IGN0eC0+ZnJhbWUpCisJCQkJZGVsdGEtLTsKKwkJCWN0eC0+ZnJhbWUgPSBmcmFtZTsKKworCQkJYXRvbWljX2FkZChkZWx0YSwgJnBpcGUtPmZyYW1lX251bWJlcik7CisJCX0KIAl9CiAKIAlpZiAoIShzdGF0dXMgJiBDU0kyX0NUWF9JUlFfRkUpKQpAQCAtMTAzOSw3ICsxMDY0LDYgQEAKIHsKIAlzdHJ1Y3QgaXNzX2NzaTJfZGV2aWNlICpjc2kyID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJc3RydWN0IGlzc19kZXZpY2UgKmlzcyA9IGNzaTItPmlzczsKLQlzdHJ1Y3QgaXNzX3BpcGVsaW5lICpwaXBlID0gdG9faXNzX3BpcGVsaW5lKCZjc2kyLT5zdWJkZXYuZW50aXR5KTsKIAlzdHJ1Y3QgaXNzX3ZpZGVvICp2aWRlb19vdXQgPSAmY3NpMi0+dmlkZW9fb3V0OwogCWludCByZXQgPSAwOwogCkBAIC0xMDU4LDcgKzEwODIsNiBAQAogCiAJCWlmIChvbWFwNGlzc19jc2lwaHlfYWNxdWlyZShjc2kyLT5waHkpIDwgMCkKIAkJCXJldHVybiAtRU5PREVWOwotCQljc2kyLT51c2VfZnNfaXJxID0gcGlwZS0+ZG9fcHJvcGFnYXRpb247CiAJCWNzaTJfY29uZmlndXJlKGNzaTIpOwogCQljc2kyX3ByaW50X3N0YXR1cyhjc2kyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL29tYXA0aXNzL2lzc19jc2kyLmggYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvb21hcDRpc3MvaXNzX2NzaTIuaAppbmRleCA5NzFhYTdiLi4zYjM3OTc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvb21hcDRpc3MvaXNzX2NzaTIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvb21hcDRpc3MvaXNzX2NzaTIuaApAQCAtODIsNiArODIsNyBAQAogCXU4IHZpcnR1YWxfaWQ7CiAJdTE2IGZvcm1hdF9pZDsJCS8qIGFzIGluIENTSTJfQ1R4X0NUUkwyWzk6MF0gKi8KIAl1OCBkcGNtX3ByZWRpY3RvcjsJLyogMTogc2ltcGxlLCAwOiBhZHZhbmNlZCAqLworCXUxNiBmcmFtZTsKIAogCS8qIEZpZWxkcyBpbiBDU0kyX0NUeF9DVFJMMS8zIC0gU2hhZG93ZWQgKi8KIAl1MTYgYWxwaGE7CkBAIC0xMzcsNyArMTM4LDYgQEAKIAl1MzIgb3V0cHV0OyAvKiBvdXRwdXQgdG8gSVBJUEVJRiwgbWVtb3J5IG9yIGJvdGg/ICovCiAJYm9vbCBkcGNtX2RlY29tcHJlc3M7CiAJdW5zaWduZWQgaW50IGZyYW1lX3NraXA7Ci0JYm9vbCB1c2VfZnNfaXJxOwogCiAJc3RydWN0IGlzc19jc2lwaHkgKnBoeTsKIAlzdHJ1Y3QgaXNzX2NzaTJfY3R4X2NmZyBjb250ZXh0c1tJU1NfQ1NJMl9NQVhfQ1RYX05VTSArIDFdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL29tYXA0aXNzL2lzc19pcGlwZWlmLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvb21hcDRpc3MvaXNzX2lwaXBlaWYuYwppbmRleCAzMmE3NDgzLi4zOTQzZmFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvb21hcDRpc3MvaXNzX2lwaXBlaWYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvb21hcDRpc3MvaXNzX2lwaXBlaWYuYwpAQCAtMjQyLDIzICsyNDIsNiBAQAogfQogCiAvKgotICogaXBpcGVpZl9pc2lmMF9pc3IgLSBIYW5kbGUgSVNJRjAgZXZlbnQKLSAqIEBpcGlwZWlmOiBQb2ludGVyIHRvIElTUCBJUElQRUlGIGRldmljZS4KLSAqCi0gKiBFeGVjdXRlcyBMU0MgZGVmZXJyZWQgZW5hYmxlbWVudCBiZWZvcmUgbmV4dCBmcmFtZSBzdGFydHMuCi0gKi8KLXN0YXRpYyB2b2lkIGlwaXBlaWZfaXNpZjBfaXNyKHN0cnVjdCBpc3NfaXBpcGVpZl9kZXZpY2UgKmlwaXBlaWYpCi17Ci0Jc3RydWN0IGlzc19waXBlbGluZSAqcGlwZSA9Ci0JCQkgICAgIHRvX2lzc19waXBlbGluZSgmaXBpcGVpZi0+c3ViZGV2LmVudGl0eSk7Ci0JaWYgKHBpcGUtPmRvX3Byb3BhZ2F0aW9uKQotCQlhdG9taWNfaW5jKCZwaXBlLT5mcmFtZV9udW1iZXIpOwotCi0JaWYgKGlwaXBlaWYtPm91dHB1dCAmIElQSVBFSUZfT1VUUFVUX01FTU9SWSkKLQkJaXBpcGVpZl9pc3JfYnVmZmVyKGlwaXBlaWYpOwotfQotCi0vKgogICogb21hcDRpc3NfaXBpcGVpZl9pc3IgLSBDb25maWd1cmUgaXBpcGVpZiBkdXJpbmcgaW50ZXJmcmFtZSB0aW1lLgogICogQGlwaXBlaWY6IFBvaW50ZXIgdG8gSVNQIElQSVBFSUYgZGV2aWNlLgogICogQGV2ZW50czogSVBJUEVJRiBldmVudHMKQEAgLTI2OSw4ICsyNTIsOSBAQAogCQkJCQkgICAgICZpcGlwZWlmLT5zdG9wcGluZykpCiAJCXJldHVybjsKIAotCWlmIChldmVudHMgJiBJU1A1X0lSUV9JU0lGX0lOVCgwKSkKLQkJaXBpcGVpZl9pc2lmMF9pc3IoaXBpcGVpZik7CisJaWYgKChldmVudHMgJiBJU1A1X0lSUV9JU0lGX0lOVCgwKSkgJiYKKwkgICAgKGlwaXBlaWYtPm91dHB1dCAmIElQSVBFSUZfT1VUUFVUX01FTU9SWSkpCisJCWlwaXBlaWZfaXNyX2J1ZmZlcihpcGlwZWlmKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9vbWFwNGlzcy9pc3NfcmVncy5oIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL29tYXA0aXNzL2lzc19yZWdzLmgKaW5kZXggZWZkMDI5MS4uZDJiNmI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL29tYXA0aXNzL2lzc19yZWdzLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL29tYXA0aXNzL2lzc19yZWdzLmgKQEAgLTIxNSw2ICsyMTUsOCBAQAogI2RlZmluZSBDU0kyX0NUWF9DVFJMMV9DVFhfRU4JCQkJKDEgPDwgMCkKIAogI2RlZmluZSBDU0kyX0NUWF9DVFJMMihpKQkJCQkoMHg3NCArICgweDIwICogaSkpCisjZGVmaW5lIENTSTJfQ1RYX0NUUkwyX0ZSQU1FX01BU0sJCQkoMHhmZmZmIDw8IDE2KQorI2RlZmluZSBDU0kyX0NUWF9DVFJMMl9GUkFNRV9TSElGVAkJCTE2CiAjZGVmaW5lIENTSTJfQ1RYX0NUUkwyX1VTRVJfREVGX01BUF9TSElGVAkJMTMKICNkZWZpbmUgQ1NJMl9DVFhfQ1RSTDJfVVNFUl9ERUZfTUFQX01BU0sJCVwKIAkJKDB4MyA8PCBDU0kyX0NUWF9DVFJMMl9VU0VSX0RFRl9NQVBfU0hJRlQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvb21hcDRpc3MvaXNzX3Jlc2l6ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9vbWFwNGlzcy9pc3NfcmVzaXplci5jCmluZGV4IDg4NTIyYTguLjNhYjk3MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9vbWFwNGlzcy9pc3NfcmVzaXplci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9vbWFwNGlzcy9pc3NfcmVzaXplci5jCkBAIC0yODMsMjIgKzI4Myw2IEBACiB9CiAKIC8qCi0gKiByZXNpemVyX2lzaWYwX2lzciAtIEhhbmRsZSBJU0lGMCBldmVudAotICogQHJlc2l6ZXI6IFBvaW50ZXIgdG8gSVNQIFJFU0laRVIgZGV2aWNlLgotICoKLSAqIEV4ZWN1dGVzIExTQyBkZWZlcnJlZCBlbmFibGVtZW50IGJlZm9yZSBuZXh0IGZyYW1lIHN0YXJ0cy4KLSAqLwotc3RhdGljIHZvaWQgcmVzaXplcl9pbnRfZG1hX2lzcihzdHJ1Y3QgaXNzX3Jlc2l6ZXJfZGV2aWNlICpyZXNpemVyKQotewotCXN0cnVjdCBpc3NfcGlwZWxpbmUgKnBpcGUgPQotCQkJICAgICB0b19pc3NfcGlwZWxpbmUoJnJlc2l6ZXItPnN1YmRldi5lbnRpdHkpOwotCWlmIChwaXBlLT5kb19wcm9wYWdhdGlvbikKLQkJYXRvbWljX2luYygmcGlwZS0+ZnJhbWVfbnVtYmVyKTsKLQotCXJlc2l6ZXJfaXNyX2J1ZmZlcihyZXNpemVyKTsKLX0KLQotLyoKICAqIG9tYXA0aXNzX3Jlc2l6ZXJfaXNyIC0gQ29uZmlndXJlIHJlc2l6ZXIgZHVyaW5nIGludGVyZnJhbWUgdGltZS4KICAqIEByZXNpemVyOiBQb2ludGVyIHRvIElTUCBSRVNJWkVSIGRldmljZS4KICAqIEBldmVudHM6IFJFU0laRVIgZXZlbnRzCkBAIC0zMjIsNyArMzA2LDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKGV2ZW50cyAmIElTUDVfSVJRX1JTWl9JTlRfRE1BKQotCQlyZXNpemVyX2ludF9kbWFfaXNyKHJlc2l6ZXIpOworCQlyZXNpemVyX2lzcl9idWZmZXIocmVzaXplcik7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvb21hcDRpc3MvaXNzX3ZpZGVvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvb21hcDRpc3MvaXNzX3ZpZGVvLmMKaW5kZXggY2RlZTU5Ni4uNjk1NTA0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL29tYXA0aXNzL2lzc192aWRlby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9vbWFwNGlzcy9pc3NfdmlkZW8uYwpAQCAtMjUsOSArMjUsNiBAQAogI2luY2x1ZGUgImlzc192aWRlby5oIgogI2luY2x1ZGUgImlzcy5oIgogCi1zdGF0aWMgdW5zaWduZWQgZGVidWc7Ci1tb2R1bGVfcGFyYW0oZGVidWcsIHVpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImFjdGl2YXRlcyBkZWJ1ZyBpbmZvIik7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBIZWxwZXIgZnVuY3Rpb25zCkBAIC03NzMsNiArNzcwLDE0IEBACiB9CiAKIHN0YXRpYyBpbnQKK2lzc192aWRlb19leHBidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9leHBvcnRidWZmZXIgKmUpCit7CisJc3RydWN0IGlzc192aWRlb19maCAqdmZoID0gdG9faXNzX3ZpZGVvX2ZoKGZoKTsKKworCXJldHVybiB2YjJfZXhwYnVmKCZ2ZmgtPnF1ZXVlLCBlKTsKK30KKworc3RhdGljIGludAogaXNzX3ZpZGVvX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQogewogCXN0cnVjdCBpc3NfdmlkZW9fZmggKnZmaCA9IHRvX2lzc192aWRlb19maChmaCk7CkBAIC0xMDIxLDYgKzEwMjYsNyBAQAogCS52aWRpb2NfcmVxYnVmcwkJCT0gaXNzX3ZpZGVvX3JlcWJ1ZnMsCiAJLnZpZGlvY19xdWVyeWJ1ZgkJPSBpc3NfdmlkZW9fcXVlcnlidWYsCiAJLnZpZGlvY19xYnVmCQkJPSBpc3NfdmlkZW9fcWJ1ZiwKKwkudmlkaW9jX2V4cGJ1ZgkJCT0gaXNzX3ZpZGVvX2V4cGJ1ZiwKIAkudmlkaW9jX2RxYnVmCQkJPSBpc3NfdmlkZW9fZHFidWYsCiAJLnZpZGlvY19zdHJlYW1vbgkJPSBpc3NfdmlkZW9fc3RyZWFtb24sCiAJLnZpZGlvY19zdHJlYW1vZmYJCT0gaXNzX3ZpZGVvX3N0cmVhbW9mZiwKQEAgLTEwNDQsOCArMTA1MCw2IEBACiAJaWYgKGhhbmRsZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXZpZGVvLT52aWRlby5kZWJ1ZyA9IGRlYnVnOwotCiAJdjRsMl9maF9pbml0KCZoYW5kbGUtPnZmaCwgJnZpZGVvLT52aWRlbyk7CiAJdjRsMl9maF9hZGQoJmhhbmRsZS0+dmZoKTsKIApAQCAtMTA3MSw3ICsxMDc1LDcgQEAKIAlxID0gJmhhbmRsZS0+cXVldWU7CiAKIAlxLT50eXBlID0gdmlkZW8tPnR5cGU7Ci0JcS0+aW9fbW9kZXMgPSBWQjJfTU1BUDsKKwlxLT5pb19tb2RlcyA9IFZCMl9NTUFQIHwgVkIyX0RNQUJVRjsKIAlxLT5kcnZfcHJpdiA9IGhhbmRsZTsKIAlxLT5vcHMgPSAmaXNzX3ZpZGVvX3ZiMm9wczsKIAlxLT5tZW1fb3BzID0gJnZiMl9kbWFfY29udGlnX21lbW9wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9wYXJwb3J0L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvcGFycG9ydC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTk3NGVmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9wYXJwb3J0L0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi1tZW51Y29uZmlnIE1FRElBX1BBUlBPUlRfU1VQUE9SVAotCWJvb2wgIklTQSBhbmQgcGFyYWxsZWwgcG9ydCBkZXZpY2VzIgotCWRlcGVuZHMgb24gKElTQSB8fCBQQVJQT1JUKSAmJiBNRURJQV9DQU1FUkFfU1VQUE9SVAotCWhlbHAKLQkgIEVuYWJsZXMgZHJpdmVycyBmb3IgSVNBIGFuZCBwYXJhbGxlbCBwb3J0IGJ1cy4gSWYgeW91Ci0JICBuZWVkIG1lZGlhIGRyaXZlcnMgdXNpbmcgdGhvc2UgbGVnYWN5IGJ1c2VzLCBzYXkgWS4KLQotaWYgTUVESUFfUEFSUE9SVF9TVVBQT1JUCi1jb25maWcgVklERU9fQldRQ0FNCi0JdHJpc3RhdGUgIlF1aWNrY2FtIEJXIFZpZGVvIEZvciBMaW51eCAoRGVwcmVjYXRlZCkiCi0JZGVwZW5kcyBvbiBQQVJQT1JUICYmIFZJREVPX1Y0TDIKLQlzZWxlY3QgVklERU9CVUYyX1ZNQUxMT0MKLQloZWxwCi0JICBTYXkgWSBoYXZlIGlmIHlvdSB0aGUgYmxhY2sgYW5kIHdoaXRlIHZlcnNpb24gb2YgdGhlIFF1aWNrQ2FtCi0JICBjYW1lcmEuIFNlZSB0aGUgbmV4dCBvcHRpb24gZm9yIHRoZSBjb2xvciB2ZXJzaW9uLgotCi0JICBUaGlzIGRyaXZlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbi4gSWYgeW91IGhhdmUKLQkgIGhhcmR3YXJlIGZvciB0aGlzIGFuZCB5b3Ugd2FudCB0byB3b3JrIG9uIHRoaXMgZHJpdmVyLCB0aGVuIGNvbnRhY3QKLQkgIHRoZSBsaW51eC1tZWRpYSBtYWlsaW5nbGlzdC4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYnctcWNhbS4KLQotY29uZmlnIFZJREVPX0NRQ0FNCi0JdHJpc3RhdGUgIlF1aWNrQ2FtIENvbG91ciBWaWRlbyBGb3IgTGludXggKERlcHJlY2F0ZWQpIgotCWRlcGVuZHMgb24gUEFSUE9SVCAmJiBWSURFT19WNEwyCi0JaGVscAotCSAgVGhpcyBpcyB0aGUgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgY29sb3VyIHZlcnNpb24gb2YgdGhlCi0JICBDb25uZWN0aXggUXVpY2tDYW0uICBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgY2FtZXJhcywgc2F5IFkgaGVyZSwKLQkgIG90aGVyd2lzZSBzYXkgTi4gIFRoaXMgZHJpdmVyIGRvZXMgbm90IHdvcmsgd2l0aCB0aGUgb3JpZ2luYWwKLQkgIG1vbm9jaHJvbWUgUXVpY2tDYW0sIFF1aWNrQ2FtIFZDIG9yIFF1aWNrQ2xpcC4gIEl0IGlzIGFsc28gYXZhaWxhYmxlCi0JICBhcyBhIG1vZHVsZSAoYy1xY2FtKS4KLQkgIFJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DUWNhbS50eHQ+IGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi0JICBUaGlzIGRyaXZlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbi4gSWYgeW91IGhhdmUKLQkgIGhhcmR3YXJlIGZvciB0aGlzIGFuZCB5b3Ugd2FudCB0byB3b3JrIG9uIHRoaXMgZHJpdmVyLCB0aGVuIGNvbnRhY3QKLQkgIHRoZSBsaW51eC1tZWRpYSBtYWlsaW5nbGlzdC4KLQotY29uZmlnIFZJREVPX1BNUwotCXRyaXN0YXRlICJNZWRpYXZpc2lvbiBQcm8gTW92aWUgU3R1ZGlvIFZpZGVvIEZvciBMaW51eCAoRGVwcmVjYXRlZCkiCi0JZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMgotCWhlbHAKLQkgIFNheSBZIGlmIHlvdSBoYXZlIHRoZSBJU0EgTWVkaWF2aXNpb24gUHJvIE1vdmllIFN0dWRpbwotCSAgY2FwdHVyZSBjYXJkLgotCi0JICBUaGlzIGRyaXZlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbi4gSWYgeW91IGhhdmUKLQkgIGhhcmR3YXJlIGZvciB0aGlzIGFuZCB5b3Ugd2FudCB0byB3b3JrIG9uIHRoaXMgZHJpdmVyLCB0aGVuIGNvbnRhY3QKLQkgIHRoZSBsaW51eC1tZWRpYSBtYWlsaW5nbGlzdC4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcG1zLgotCi1jb25maWcgVklERU9fVzk5NjYKLQl0cmlzdGF0ZSAiVzk5NjZDRiBXZWJjYW0gKEZseUNhbSBTdXByYSBhbmQgb3RoZXJzKSBWaWRlbyBGb3IgTGludXggKERlcHJlY2F0ZWQpIgotCWRlcGVuZHMgb24gUEFSUE9SVF8xMjg0ICYmIFBBUlBPUlQgJiYgVklERU9fVjRMMgotCWhlbHAKLQkgIFZpZGVvNGxpbnV4IGRyaXZlciBmb3IgV2luYm9uZCdzIHc5OTY2IGJhc2VkIFdlYmNhbXMuCi0JICBDdXJyZW50bHkgdGVzdGVkIHdpdGggdGhlIExpZmVWaWV3IEZseUNhbSBTdXByYS4KLQkgIElmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBjYW1lcmFzLCBzYXkgWSBoZXJlCi0JICBvdGhlcndpc2Ugc2F5IE4uCi0JICBUaGlzIGRyaXZlciBpcyBhbHNvIGF2YWlsYWJsZSBhcyBhIG1vZHVsZSAodzk5NjYpLgotCi0JICBDaGVjayBvdXQgPGZpbGU6RG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC93OTk2Ni50eHQ+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbi4KLQotCSAgVGhpcyBkcml2ZXIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIHNvb24uIElmIHlvdSBoYXZlCi0JICBoYXJkd2FyZSBmb3IgdGhpcyBhbmQgeW91IHdhbnQgdG8gd29yayBvbiB0aGlzIGRyaXZlciwgdGhlbiBjb250YWN0Ci0JICB0aGUgbGludXgtbWVkaWEgbWFpbGluZ2xpc3QuCi1lbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3BhcnBvcnQvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvcGFycG9ydC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVlYTA2ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvcGFycG9ydC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotb2JqLSQoQ09ORklHX1ZJREVPX0NRQ0FNKSArPSBjLXFjYW0ubwotb2JqLSQoQ09ORklHX1ZJREVPX0JXUUNBTSkgKz0gYnctcWNhbS5vCi1vYmotJChDT05GSUdfVklERU9fVzk5NjYpICs9IHc5OTY2Lm8KLW9iai0kKENPTkZJR19WSURFT19QTVMpICs9IHBtcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvcGFycG9ydC9idy1xY2FtLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvcGFycG9ydC9idy1xY2FtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3YjlkYTEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3BhcnBvcnQvYnctcWNhbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE3NyArMCwwIEBACi0vKgotICogICAgUXVpY2tDYW0gRHJpdmVyIEZvciBWaWRlbzRMaW51eC4KLSAqCi0gKglWaWRlbzRMaW51eCBjb252ZXJzaW9uIHdvcmsgYnkgQWxhbiBDb3guCi0gKglQYXJwb3J0IGNvbXBhdGliaWxpdHkgYnkgUGhpbCBCbHVuZGVsbC4KLSAqCUJ1c3kgbG9vcCBhdm9pZGFuY2UgYnkgTWFyayBDb29rZS4KLSAqCi0gKiAgICBNb2R1bGUgcGFyYW1ldGVyczoKLSAqCi0gKgltYXhwb2xsPTwxIC0gNTAwMD4KLSAqCi0gKgkgIFdoZW4gcG9sbGluZyB0aGUgUXVpY2tDYW0gZm9yIGEgcmVzcG9uc2UsIGJ1c3ktd2FpdCBmb3IgYQotICoJICBtYXhpbXVtIG9mIHRoaXMgbWFueSBsb29wcy4gVGhlIGRlZmF1bHQgb2YgMjUwIGdpdmVzIGxpdHRsZQotICoJICBpbXBhY3Qgb24gaW50ZXJhY3RpdmUgcmVzcG9uc2UuCi0gKgotICoJICBOT1RFOiBJZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG9vIGhpZ2gsIHRoZSBwcm9jZXNzb3IKLSAqCQl3aWxsIGJ1c3kgd2FpdCB1bnRpbCB0aGlzIGxvb3AgdGltZXMgb3V0LCBhbmQgdGhlbgotICoJCXNsb3dseSBwb2xsIGZvciBhIGZ1cnRoZXIgNSBzZWNvbmRzIGJlZm9yZSBmYWlsaW5nCi0gKgkJdGhlIHRyYW5zYWN0aW9uLiBZb3UgaGF2ZSBiZWVuIHdhcm5lZC4KLSAqCi0gKgl5aWVsZGxpbmVzPTwxIC0gMjUwPgotICoKLSAqCSAgV2hlbiBhY3F1aXJpbmcgYSBmcmFtZSBmcm9tIHRoZSBjYW1lcmEsIHRoZSBkYXRhIGdhdGhlcmluZwotICoJICBsb29wIHdpbGwgeWllbGQgYmFjayB0byB0aGUgc2NoZWR1bGVyIGFmdGVyIGNvbXBsZXRpbmcKLSAqCSAgdGhpcyBtYW55IGxpbmVzLiBUaGUgZGVmYXVsdCBvZiA0IHByb3ZpZGVzIGEgdHJhZGUtb2ZmCi0gKgkgIGJldHdlZW4gaW5jcmVhc2VkIGZyYW1lIGFjcXVpc2l0aW9uIHRpbWUgYW5kIGltcGFjdCBvbgotICoJICBpbnRlcmFjdGl2ZSByZXNwb25zZS4KLSAqLwotCi0vKiBxY2FtLWxpYi5jIC0tIExpYnJhcnkgZm9yIHByb2dyYW1taW5nIHdpdGggdGhlIENvbm5lY3RpeCBRdWlja0NhbS4KLSAqIFNlZSB0aGUgaW5jbHVkZWQgZG9jdW1lbnRhdGlvbiBmb3IgdXNhZ2UgaW5zdHJ1Y3Rpb25zIGFuZCBkZXRhaWxzCi0gKiBvZiB0aGUgcHJvdG9jb2wgaW52b2x2ZWQuICovCi0KLQotLyogVmVyc2lvbiAwLjUsIEF1Z3VzdCA0LCAxOTk2ICovCi0vKiBWZXJzaW9uIDAuNywgQXVndXN0IDI3LCAxOTk2ICovCi0vKiBWZXJzaW9uIDAuOSwgTm92ZW1iZXIgMTcsIDE5OTYgKi8KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLUNvcHlyaWdodCAoQykgMTk5NiBieSBTY290dCBMYWlyZAotCi1QZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKLWEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQotIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwotd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAotZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi1wZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLXRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKLWluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKLUVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgotTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgotSU4gTk8gRVZFTlQgU0hBTEwgU0NPVFQgTEFJUkQgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLU9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCi1PVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItZmguaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVudC5oPgotI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmMi12bWFsbG9jLmg+Ci0KLS8qIE9uZSBmcm9tIGNvbHVtbiBBLi4uICovCi0jZGVmaW5lIFFDX05PVFNFVCAwCi0jZGVmaW5lIFFDX1VOSURJUiAxCi0jZGVmaW5lIFFDX0JJRElSICAyCi0jZGVmaW5lIFFDX1NFUklBTCAzCi0KLS8qIC4uLiBhbmQgb25lIGZyb20gY29sdW1uIEIgKi8KLSNkZWZpbmUgUUNfQU5ZICAgICAgICAgIDB4MDAKLSNkZWZpbmUgUUNfRk9SQ0VfVU5JRElSIDB4MTAKLSNkZWZpbmUgUUNfRk9SQ0VfQklESVIgIDB4MjAKLSNkZWZpbmUgUUNfRk9SQ0VfU0VSSUFMIDB4MzAKLS8qIGluIHRoZSBwb3J0X21vZGUgbWVtYmVyICovCi0KLSNkZWZpbmUgUUNfTU9ERV9NQVNLICAgIDB4MDcKLSNkZWZpbmUgUUNfRk9SQ0VfTUFTSyAgIDB4NzAKLQotI2RlZmluZSBNQVhfSEVJR0hUIDI0MwotI2RlZmluZSBNQVhfV0lEVEggMzM2Ci0KLS8qIEJpdCBmaWVsZHMgZm9yIHN0YXR1cyBmbGFncyAqLwotI2RlZmluZSBRQ19QQVJBTV9DSEFOR0UJMHgwMSAvKiBDYW1lcmEgc3RhdHVzIGNoYW5nZSBoYXMgb2NjdXJyZWQgKi8KLQotc3RydWN0IHFjYW0gewotCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7Ci0Jc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGhkbDsKLQlzdHJ1Y3QgdmIyX3F1ZXVlIHZiX3ZpZHE7Ci0Jc3RydWN0IHBhcmRldmljZSAqcGRldjsKLQlzdHJ1Y3QgcGFycG9ydCAqcHBvcnQ7Ci0Jc3RydWN0IG11dGV4IGxvY2s7Ci0Jc3RydWN0IG11dGV4IHF1ZXVlX2xvY2s7Ci0JaW50IHdpZHRoLCBoZWlnaHQ7Ci0JaW50IGJwcDsKLQlpbnQgbW9kZTsKLQlpbnQgY29udHJhc3QsIGJyaWdodG5lc3MsIHdoaXRlYmFsOwotCWludCBwb3J0X21vZGU7Ci0JaW50IHRyYW5zZmVyX3NjYWxlOwotCWludCB0b3AsIGxlZnQ7Ci0JaW50IHN0YXR1czsKLQl1bnNpZ25lZCBpbnQgc2F2ZWRfYml0czsKLQl1bnNpZ25lZCBsb25nIGluX3VzZTsKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4cG9sbCA9IDI1MDsgICAvKiBNYXhpbXVtIGJ1c3ktbG9vcCBjb3VudCBmb3IgcWNhbSBJL08gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgeWllbGRsaW5lcyA9IDQ7ICAvKiBZaWVsZCBhZnRlciB0aGlzIG1hbnkgZHVyaW5nIGNhcHR1cmUgKi8KLXN0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZm9yY2VfaW5pdDsJCS8qIFdoZXRoZXIgdG8gcHJvYmUgYWdncmVzc2l2ZWx5ICovCi0KLW1vZHVsZV9wYXJhbShtYXhwb2xsLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHlpZWxkbGluZXMsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0odmlkZW9fbnIsIGludCwgMCk7Ci0KLS8qIFNldCBmb3JjZV9pbml0PTEgdG8gYXZvaWQgZGV0ZWN0aW9uIGJ5IHBvbGxpbmcgc3RhdHVzIHJlZ2lzdGVyIGFuZAotICogaW1tZWRpYXRlbHkgYXR0ZW1wdCB0byBpbml0aWFsaXplIHFjYW0gKi8KLW1vZHVsZV9wYXJhbShmb3JjZV9pbml0LCBpbnQsIDApOwotCi0jZGVmaW5lIE1BWF9DQU1TIDQKLXN0YXRpYyBzdHJ1Y3QgcWNhbSAqcWNhbXNbTUFYX0NBTVNdOwotc3RhdGljIHVuc2lnbmVkIGludCBudW1fY2FtczsKLQotc3RhdGljIGlubGluZSBpbnQgcmVhZF9scHN0YXR1cyhzdHJ1Y3QgcWNhbSAqcSkKLXsKLQlyZXR1cm4gcGFycG9ydF9yZWFkX3N0YXR1cyhxLT5wcG9ydCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJlYWRfbHBkYXRhKHN0cnVjdCBxY2FtICpxKQotewotCXJldHVybiBwYXJwb3J0X3JlYWRfZGF0YShxLT5wcG9ydCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9scGRhdGEoc3RydWN0IHFjYW0gKnEsIGludCBkKQotewotCXBhcnBvcnRfd3JpdGVfZGF0YShxLT5wcG9ydCwgZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlX2xwY29udHJvbChzdHJ1Y3QgcWNhbSAqcSwgaW50IGQpCi17Ci0JaWYgKGQgJiAweDIwKSB7Ci0JCS8qIFNldCBiaWRpcmVjdGlvbmFsIG1vZGUgdG8gcmV2ZXJzZSAoZGF0YSBpbikgKi8KLQkJcGFycG9ydF9kYXRhX3JldmVyc2UocS0+cHBvcnQpOwotCX0gZWxzZSB7Ci0JCS8qIFNldCBiaWRpcmVjdGlvbmFsIG1vZGUgdG8gZm9yd2FyZCAoZGF0YSBvdXQpICovCi0JCXBhcnBvcnRfZGF0YV9mb3J3YXJkKHEtPnBwb3J0KTsKLQl9Ci0KLQkvKiBOb3cgaXNzdWUgdGhlIHJlZ3VsYXIgcG9ydCBjb21tYW5kLCBidXQgc3RyaXAgb3V0IHRoZQotCSAqIGRpcmVjdGlvbiBmbGFnICovCi0JZCAmPSB+MHgyMDsKLQlwYXJwb3J0X3dyaXRlX2NvbnRyb2wocS0+cHBvcnQsIGQpOwotfQotCi0KLS8qIHFjX3dhaXRoYW5kIGJ1c3ktd2FpdHMgZm9yIGEgaGFuZHNoYWtlIHNpZ25hbCBmcm9tIHRoZSBRdWlja0NhbS4KLSAqIEFsbW9zdCBhbGwgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBjYW1lcmEgcmVxdWlyZXMgaGFuZHNoYWtpbmcuICovCi0KLXN0YXRpYyBpbnQgcWNfd2FpdGhhbmQoc3RydWN0IHFjYW0gKnEsIGludCB2YWwpCi17Ci0JaW50IHN0YXR1czsKLQlpbnQgcnVucyA9IDA7Ci0KLQlpZiAodmFsKSB7Ci0JCXdoaWxlICghKChzdGF0dXMgPSByZWFkX2xwc3RhdHVzKHEpKSAmIDgpKSB7Ci0JCQkvKiAxMDAwIGlzIGVub3VnaCBzcGlucyBvbiB0aGUgSS9PIGZvciBhbGwgbm9ybWFsCi0JCQkgICBjYXNlcywgYXQgdGhhdCBwb2ludCB3ZSBzdGFydCB0byBwb2xsIHNsb3dseQotCQkJICAgdW50aWwgdGhlIGNhbWVyYSB3YWtlcyB1cC4gSG93ZXZlciwgd2UgYXJlCi0JCQkgICBidXN5IGJsb2NrZWQgdW50aWwgdGhlIGNhbWVyYSByZXNwb25kcywgc28KLQkJCSAgIHNldHRpbmcgaXQgbG93ZXIgaXMgbXVjaCBiZXR0ZXIgZm9yIGludGVyYWN0aXZlCi0JCQkgICByZXNwb25zZS4gKi8KLQotCQkJaWYgKHJ1bnMrKyA+IG1heHBvbGwpCi0JCQkJbXNsZWVwX2ludGVycnVwdGlibGUoNSk7Ci0JCQlpZiAocnVucyA+IChtYXhwb2xsICsgMTAwMCkpIC8qIDUgc2Vjb25kcyAqLwotCQkJCXJldHVybiAtMTsKLQkJfQotCX0gZWxzZSB7Ci0JCXdoaWxlICgoKHN0YXR1cyA9IHJlYWRfbHBzdGF0dXMocSkpICYgOCkpIHsKLQkJCS8qIDEwMDAgaXMgZW5vdWdoIHNwaW5zIG9uIHRoZSBJL08gZm9yIGFsbCBub3JtYWwKLQkJCSAgIGNhc2VzLCBhdCB0aGF0IHBvaW50IHdlIHN0YXJ0IHRvIHBvbGwgc2xvd2x5Ci0JCQkgICB1bnRpbCB0aGUgY2FtZXJhIHdha2VzIHVwLiBIb3dldmVyLCB3ZSBhcmUKLQkJCSAgIGJ1c3kgYmxvY2tlZCB1bnRpbCB0aGUgY2FtZXJhIHJlc3BvbmRzLCBzbwotCQkJICAgc2V0dGluZyBpdCBsb3dlciBpcyBtdWNoIGJldHRlciBmb3IgaW50ZXJhY3RpdmUKLQkJCSAgIHJlc3BvbnNlLiAqLwotCi0JCQlpZiAocnVucysrID4gbWF4cG9sbCkKLQkJCQltc2xlZXBfaW50ZXJydXB0aWJsZSg1KTsKLQkJCWlmIChydW5zKysgPiAobWF4cG9sbCArIDEwMDApKSAvKiA1IHNlY29uZHMgKi8KLQkJCQlyZXR1cm4gLTE7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi0vKiBXYWl0aGFuZDIgaXMgdXNlZCB3aGVuIHRoZSBxY2FtIGlzIGluIGJpZGlyZWN0aW9uYWwgbW9kZSwgYW5kIHRoZQotICogaGFuZHNoYWtpbmcgc2lnbmFsIGlzIENhbVJkeTIgKGJpdCAwIG9mIGRhdGEgcmVnKSBpbnN0ZWFkIG9mIENhbVJkeTEKLSAqIChiaXQgMyBvZiBzdGF0dXMgcmVnaXN0ZXIpLiAgSXQgYWxzbyByZXR1cm5zIHRoZSBsYXN0IHZhbHVlIHJlYWQsCi0gKiBzaW5jZSB0aGlzIGRhdGEgaXMgdXNlZnVsLiAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHFjX3dhaXRoYW5kMihzdHJ1Y3QgcWNhbSAqcSwgaW50IHZhbCkKLXsKLQl1bnNpZ25lZCBpbnQgc3RhdHVzOwotCWludCBydW5zID0gMDsKLQotCWRvIHsKLQkJc3RhdHVzID0gcmVhZF9scGRhdGEocSk7Ci0JCS8qIDEwMDAgaXMgZW5vdWdoIHNwaW5zIG9uIHRoZSBJL08gZm9yIGFsbCBub3JtYWwKLQkJICAgY2FzZXMsIGF0IHRoYXQgcG9pbnQgd2Ugc3RhcnQgdG8gcG9sbCBzbG93bHkKLQkJICAgdW50aWwgdGhlIGNhbWVyYSB3YWtlcyB1cC4gSG93ZXZlciwgd2UgYXJlCi0JCSAgIGJ1c3kgYmxvY2tlZCB1bnRpbCB0aGUgY2FtZXJhIHJlc3BvbmRzLCBzbwotCQkgICBzZXR0aW5nIGl0IGxvd2VyIGlzIG11Y2ggYmV0dGVyIGZvciBpbnRlcmFjdGl2ZQotCQkgICByZXNwb25zZS4gKi8KLQotCQlpZiAocnVucysrID4gbWF4cG9sbCkKLQkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUpOwotCQlpZiAocnVucysrID4gKG1heHBvbGwgKyAxMDAwKSkgLyogNSBzZWNvbmRzICovCi0JCQlyZXR1cm4gMDsKLQl9IHdoaWxlICgoc3RhdHVzICYgMSkgIT0gdmFsKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLS8qIHFjX2NvbW1hbmQgaXMgcHJvYmFibHkgYSBiaXQgb2YgYSBtaXNub21lciAtLSBpdCdzIHVzZWQgdG8gc2VuZAotICogYnl0ZXMgKnRvKiB0aGUgY2FtZXJhLiAgR2VuZXJhbGx5LCB0aGVzZSBieXRlcyBhcmUgZWl0aGVyIGNvbW1hbmRzCi0gKiBvciBhcmd1bWVudHMgdG8gY29tbWFuZHMsIHNvIHRoZSBuYW1lIGZpdHMsIGJ1dCBpdCBzdGlsbCBidWdzIG1lIGEKLSAqIGJpdC4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYSBsaXN0IG9mIGNvbW1hbmRzLiAqLwotCi1zdGF0aWMgaW50IHFjX2NvbW1hbmQoc3RydWN0IHFjYW0gKnEsIGludCBjb21tYW5kKQotewotCWludCBuMSwgbjI7Ci0JaW50IGNtZDsKLQotCXdyaXRlX2xwZGF0YShxLCBjb21tYW5kKTsKLQl3cml0ZV9scGNvbnRyb2wocSwgNik7Ci0KLQluMSA9IHFjX3dhaXRoYW5kKHEsIDEpOwotCi0Jd3JpdGVfbHBjb250cm9sKHEsIDB4ZSk7Ci0JbjIgPSBxY193YWl0aGFuZChxLCAwKTsKLQotCWNtZCA9IChuMSAmIDB4ZjApIHwgKChuMiAmIDB4ZjApID4+IDQpOwotCXJldHVybiBjbWQ7Ci19Ci0KLXN0YXRpYyBpbnQgcWNfcmVhZHBhcmFtKHN0cnVjdCBxY2FtICpxKQotewotCWludCBuMSwgbjI7Ci0JaW50IGNtZDsKLQotCXdyaXRlX2xwY29udHJvbChxLCA2KTsKLQluMSA9IHFjX3dhaXRoYW5kKHEsIDEpOwotCi0Jd3JpdGVfbHBjb250cm9sKHEsIDB4ZSk7Ci0JbjIgPSBxY193YWl0aGFuZChxLCAwKTsKLQotCWNtZCA9IChuMSAmIDB4ZjApIHwgKChuMiAmIDB4ZjApID4+IDQpOwotCXJldHVybiBjbWQ7Ci19Ci0KLQotLyogVHJ5IHRvIGRldGVjdCBhIFF1aWNrQ2FtLiAgSXQgYXBwZWFycyB0byBmbGFzaCB0aGUgdXBwZXIgNCBiaXRzIG9mCi0gICB0aGUgc3RhdHVzIHJlZ2lzdGVyIGF0IDUtMTAgSHouICBUaGlzIGlzIG9ubHkgdXNlZCBpbiB0aGUgYXV0b3Byb2JlCi0gICBjb2RlLiAgQmUgYXdhcmUgdGhhdCB0aGlzIGlzbid0IHRoZSB3YXkgQ29ubmVjdGl4IGRldGVjdHMgdGhlCi0gICBjYW1lcmEgKHRoZXkgc2VuZCBhIHJlc2V0IGFuZCB0cnkgdG8gaGFuZHNoYWtlKSwgYnV0IHRoaXMgc2hvdWxkIGJlCi0gICBhbG1vc3QgY29tcGxldGVseSBzYWZlLCB3aGlsZSB0aGVpciBtZXRob2Qgc2NyZXdzIHVwIG15IHByaW50ZXIgaWYKLSAgIEkgcGx1ZyBpdCBpbiBiZWZvcmUgdGhlIGNhbWVyYS4gKi8KLQotc3RhdGljIGludCBxY19kZXRlY3Qoc3RydWN0IHFjYW0gKnEpCi17Ci0JaW50IHJlZywgbGFzdHJlZzsKLQlpbnQgY291bnQgPSAwOwotCWludCBpOwotCi0JaWYgKGZvcmNlX2luaXQpCi0JCXJldHVybiAxOwotCi0JbGFzdHJlZyA9IHJlZyA9IHJlYWRfbHBzdGF0dXMocSkgJiAweGYwOwotCi0JZm9yIChpID0gMDsgaSA8IDUwMDsgaSsrKSB7Ci0JCXJlZyA9IHJlYWRfbHBzdGF0dXMocSkgJiAweGYwOwotCQlpZiAocmVnICE9IGxhc3RyZWcpCi0JCQljb3VudCsrOwotCQlsYXN0cmVnID0gcmVnOwotCQltZGVsYXkoMik7Ci0JfQotCi0KLSNpZiAwCi0JLyogRm9yY2UgY2FtZXJhIGRldGVjdGlvbiBkdXJpbmcgdGVzdGluZy4gU29tZXRpbWVzIHRoZSBjYW1lcmEKLQkgICB3b24ndCBiZSBmbGFzaGluZyB0aGVzZSBiaXRzLiBQb3NzaWJseSB1bmxvYWRpbmcgdGhlIG1vZHVsZQotCSAgIGluIHRoZSBtaWRkbGUgb2YgYSBncmFiPyBPciBzb21lIHRpbWVvdXQgY29uZGl0aW9uPwotCSAgIEkndmUgc2VlbiB0aGlzIHBhcmFtZXRlciBhcyBsb3cgYXMgMTkgb24gbXkgNDUwTWh6IGJveCAtIG1wYyAqLwotCXByaW50ayhLRVJOX0RFQlVHICJEZWJ1Z2dpbmc6IFFDYW0gZGV0ZWN0aW9uIGNvdW50ZXIgPDMwLTIwMCBjb3VudHMgYXMgZGV0ZWN0ZWQ+OiAlZFxuIiwgY291bnQpOwotCXJldHVybiAxOwotI2VuZGlmCi0KLQkvKiBCZSAoZXZlbiBtb3JlKSBsaWJlcmFsIGluIHdoYXQgeW91IGFjY2VwdC4uLiAgKi8KLQotCWlmIChjb3VudCA+IDIwICYmIGNvdW50IDwgNDAwKSB7Ci0JCXJldHVybiAxOwkvKiBmb3VuZCAqLwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiTm8gUXVpY2tjYW0gZm91bmQgb24gcG9ydCAlc1xuIiwKLQkJCQlxLT5wcG9ydC0+bmFtZSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJRdWlja2NhbSBkZXRlY3Rpb24gY291bnRlcjogJXVcbiIsIGNvdW50KTsKLQkJcmV0dXJuIDA7CS8qIG5vdCBmb3VuZCAqLwotCX0KLX0KLQotLyogRGVjaWRlIHdoaWNoIHNjYW4gbW9kZSB0byB1c2UuICBUaGVyZSdzIG5vIHJlYWwgcmVxdWlyZW1lbnQgdGhhdAotICogdGhlIHNjYW5tb2RlIG1hdGNoIHRoZSByZXNvbHV0aW9uIGluIHEtPmhlaWdodCBhbmQgcS0+IHdpZHRoIC0tIHRoZQotICogY2FtZXJhIHRha2VzIHRoZSBwaWN0dXJlIGF0IHRoZSByZXNvbHV0aW9uIHNwZWNpZmllZCBpbiB0aGUKLSAqICJzY2FubW9kZSIgYW5kIHRoZW4gcmV0dXJucyB0aGUgaW1hZ2UgYXQgdGhlIHJlc29sdXRpb24gc3BlY2lmaWVkCi0gKiB3aXRoIHRoZSByZXNvbHV0aW9uIGNvbW1hbmRzLiAgSWYgdGhlIHNjYW4gaXMgYmlnZ2VyIHRoYW4gdGhlCi0gKiByZXF1ZXN0ZWQgcmVzb2x1dGlvbiwgdGhlIHVwcGVyLWxlZnQgaGFuZCBjb3JuZXIgb2YgdGhlIHNjYW4gaXMKLSAqIHJldHVybmVkLiAgSWYgdGhlIHNjYW4gaXMgc21hbGxlciwgdGhlbiB0aGUgcmVzdCBvZiB0aGUgaW1hZ2UKLSAqIHJldHVybmVkIGNvbnRhaW5zIGdhcmJhZ2UuICovCi0KLXN0YXRpYyBpbnQgcWNfc2V0c2Nhbm1vZGUoc3RydWN0IHFjYW0gKnEpCi17Ci0JaW50IG9sZF9tb2RlID0gcS0+bW9kZTsKLQotCXN3aXRjaCAocS0+dHJhbnNmZXJfc2NhbGUpIHsKLQljYXNlIDE6Ci0JCXEtPm1vZGUgPSAwOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXEtPm1vZGUgPSA0OwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXEtPm1vZGUgPSA4OwotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKHEtPmJwcCkgewotCWNhc2UgNDoKLQkJYnJlYWs7Ci0JY2FzZSA2OgotCQlxLT5tb2RlICs9IDI7Ci0JCWJyZWFrOwotCX0KLQotCXN3aXRjaCAocS0+cG9ydF9tb2RlICYgUUNfTU9ERV9NQVNLKSB7Ci0JY2FzZSBRQ19CSURJUjoKLQkJcS0+bW9kZSArPSAxOwotCQlicmVhazsKLQljYXNlIFFDX05PVFNFVDoKLQljYXNlIFFDX1VOSURJUjoKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKHEtPm1vZGUgIT0gb2xkX21vZGUpCi0JCXEtPnN0YXR1cyB8PSBRQ19QQVJBTV9DSEFOR0U7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi0vKiBSZXNldCB0aGUgUXVpY2tDYW0uICBUaGlzIHVzZXMgdGhlIHNhbWUgc2VxdWVuY2UgdGhlIFdpbmRvd3MKLSAqIFF1aWNrUGljIHByb2dyYW0gdXNlcy4gIFNvbWVvbmUgd2l0aCBhIGJpLWRpcmVjdGlvbmFsIHBvcnQgc2hvdWxkCi0gKiBjaGVjayB0aGF0IGJpLWRpcmVjdGlvbmFsIG1vZGUgaXMgZGV0ZWN0ZWQgcmlnaHQsIGFuZCB0aGVuCi0gKiBpbXBsZW1lbnQgYmktZGlyZWN0aW9uYWwgbW9kZSBpbiBxY19yZWFkYnl0ZSgpLiAqLwotCi1zdGF0aWMgdm9pZCBxY19yZXNldChzdHJ1Y3QgcWNhbSAqcSkKLXsKLQlzd2l0Y2ggKHEtPnBvcnRfbW9kZSAmIFFDX0ZPUkNFX01BU0spIHsKLQljYXNlIFFDX0ZPUkNFX1VOSURJUjoKLQkJcS0+cG9ydF9tb2RlID0gKHEtPnBvcnRfbW9kZSAmIH5RQ19NT0RFX01BU0spIHwgUUNfVU5JRElSOwotCQlicmVhazsKLQotCWNhc2UgUUNfRk9SQ0VfQklESVI6Ci0JCXEtPnBvcnRfbW9kZSA9IChxLT5wb3J0X21vZGUgJiB+UUNfTU9ERV9NQVNLKSB8IFFDX0JJRElSOwotCQlicmVhazsKLQotCWNhc2UgUUNfQU5ZOgotCQl3cml0ZV9scGNvbnRyb2wocSwgMHgyMCk7Ci0JCXdyaXRlX2xwZGF0YShxLCAweDc1KTsKLQotCQlpZiAocmVhZF9scGRhdGEocSkgIT0gMHg3NSkKLQkJCXEtPnBvcnRfbW9kZSA9IChxLT5wb3J0X21vZGUgJiB+UUNfTU9ERV9NQVNLKSB8IFFDX0JJRElSOwotCQllbHNlCi0JCQlxLT5wb3J0X21vZGUgPSAocS0+cG9ydF9tb2RlICYgflFDX01PREVfTUFTSykgfCBRQ19VTklESVI7Ci0JCWJyZWFrOwotCX0KLQotCXdyaXRlX2xwY29udHJvbChxLCAweGIpOwotCXVkZWxheSgyNTApOwotCXdyaXRlX2xwY29udHJvbChxLCAweGUpOwotCXFjX3NldHNjYW5tb2RlKHEpOwkJLyogaW4gY2FzZSBwb3J0X21vZGUgY2hhbmdlZCAqLwotfQotCi0KLQotLyogUmVzZXQgdGhlIFF1aWNrQ2FtIGFuZCBwcm9ncmFtIGZvciBicmlnaHRuZXNzLCBjb250cmFzdCwKLSAqIHdoaXRlLWJhbGFuY2UsIGFuZCByZXNvbHV0aW9uLiAqLwotCi1zdGF0aWMgdm9pZCBxY19zZXQoc3RydWN0IHFjYW0gKnEpCi17Ci0JaW50IHZhbDsKLQlpbnQgdmFsMjsKLQotCS8qIFNldCB0aGUgYnJpZ2h0bmVzcy4gIFllcywgdGhpcyBpcyByZXBldGl0aXZlLCBidXQgaXQgd29ya3MuCi0JICogU2hvcnRlciB2ZXJzaW9ucyBzZWVtIHRvIGZhaWwgc3VidGx5LiAgRmVlbCBmcmVlIHRvIHRyeSA6LSkuICovCi0JLyogSSB0aGluayB0aGUgcHJvYmxlbSB3YXMgaW4gcWNfY29tbWFuZCwgbm90IGhlcmUgLS0gYmxzICovCi0KLQlxY19jb21tYW5kKHEsIDB4Yik7Ci0JcWNfY29tbWFuZChxLCBxLT5icmlnaHRuZXNzKTsKLQotCXZhbCA9IHEtPmhlaWdodCAvIHEtPnRyYW5zZmVyX3NjYWxlOwotCXFjX2NvbW1hbmQocSwgMHgxMSk7Ci0JcWNfY29tbWFuZChxLCB2YWwpOwotCWlmICgocS0+cG9ydF9tb2RlICYgUUNfTU9ERV9NQVNLKSA9PSBRQ19VTklESVIgJiYgcS0+YnBwID09IDYpIHsKLQkJLyogVGhlIG5vcm1hbCAidHJhbnNmZXJzIHBlciBsaW5lIiBjYWxjdWxhdGlvbiBkb2Vzbid0IHNlZW0gdG8gd29yawotCQkgICBhcyBleHBlY3RlZCBoZXJlIChhbmQgeWV0IGl0IHdvcmtzIGZpbmUgaW4gcWNfc2NhbikuICBObyBpZGVhCi0JCSAgIHdoeSB0aGlzIGNhc2UgaXMgdGhlIG9kZCBtYW4gb3V0LiAgRm9ydHVuYXRlbHksIExhaXJkJ3Mgb3JpZ2luYWwKLQkJICAgd29ya2luZyB2ZXJzaW9uIGdpdmVzIG1lIGEgZ29vZCB3YXkgdG8gZ3Vlc3MgYXQgd29ya2luZyB2YWx1ZXMuCi0JCSAgIC0tIGJscyAqLwotCQl2YWwgPSBxLT53aWR0aDsKLQkJdmFsMiA9IHEtPnRyYW5zZmVyX3NjYWxlICogNDsKLQl9IGVsc2UgewotCQl2YWwgPSBxLT53aWR0aCAqIHEtPmJwcDsKLQkJdmFsMiA9ICgoKHEtPnBvcnRfbW9kZSAmIFFDX01PREVfTUFTSykgPT0gUUNfQklESVIpID8gMjQgOiA4KSAqCi0JCQlxLT50cmFuc2Zlcl9zY2FsZTsKLQl9Ci0JdmFsID0gRElWX1JPVU5EX1VQKHZhbCwgdmFsMik7Ci0JcWNfY29tbWFuZChxLCAweDEzKTsKLQlxY19jb21tYW5kKHEsIHZhbCk7Ci0KLQkvKiBTZXR0aW5nIHRvcCBhbmQgbGVmdCAtLSBibHMgKi8KLQlxY19jb21tYW5kKHEsIDB4ZCk7Ci0JcWNfY29tbWFuZChxLCBxLT50b3ApOwotCXFjX2NvbW1hbmQocSwgMHhmKTsKLQlxY19jb21tYW5kKHEsIHEtPmxlZnQgLyAyKTsKLQotCXFjX2NvbW1hbmQocSwgMHgxOSk7Ci0JcWNfY29tbWFuZChxLCBxLT5jb250cmFzdCk7Ci0JcWNfY29tbWFuZChxLCAweDFmKTsKLQlxY19jb21tYW5kKHEsIHEtPndoaXRlYmFsKTsKLQotCS8qIENsZWFyIGZsYWcgdGhhdCB3ZSBtdXN0IHVwZGF0ZSB0aGUgZ3JhYmJpbmcgcGFyYW1ldGVycyBvbiB0aGUgY2FtZXJhCi0JICAgYmVmb3JlIHdlIGdyYWIgdGhlIG5leHQgZnJhbWUgKi8KLQlxLT5zdGF0dXMgJj0gKH5RQ19QQVJBTV9DSEFOR0UpOwotfQotCi0vKiBRY19yZWFkYnl0ZXMgcmVhZHMgc29tZSBieXRlcyBmcm9tIHRoZSBRQyBhbmQgcHV0cyB0aGVtIGluCi0gICB0aGUgc3VwcGxpZWQgYnVmZmVyLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQsCi0gICBvciAtMSBvbiBlcnJvci4gKi8KLQotc3RhdGljIGlubGluZSBpbnQgcWNfcmVhZGJ5dGVzKHN0cnVjdCBxY2FtICpxLCBjaGFyIGJ1ZmZlcltdKQotewotCWludCByZXQgPSAxOwotCXVuc2lnbmVkIGludCBoaSwgbG87Ci0JdW5zaWduZWQgaW50IGhpMiwgbG8yOwotCXN0YXRpYyBpbnQgc3RhdGU7Ci0KLQlpZiAoYnVmZmVyID09IE5VTEwpIHsKLQkJc3RhdGUgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzd2l0Y2ggKHEtPnBvcnRfbW9kZSAmIFFDX01PREVfTUFTSykgewotCWNhc2UgUUNfQklESVI6CQkvKiBCaS1kaXJlY3Rpb25hbCBQb3J0ICovCi0JCXdyaXRlX2xwY29udHJvbChxLCAweDI2KTsKLQkJbG8gPSAocWNfd2FpdGhhbmQyKHEsIDEpID4+IDEpOwotCQloaSA9IChyZWFkX2xwc3RhdHVzKHEpID4+IDMpICYgMHgxZjsKLQkJd3JpdGVfbHBjb250cm9sKHEsIDB4MmUpOwotCQlsbzIgPSAocWNfd2FpdGhhbmQyKHEsIDApID4+IDEpOwotCQloaTIgPSAocmVhZF9scHN0YXR1cyhxKSA+PiAzKSAmIDB4MWY7Ci0JCXN3aXRjaCAocS0+YnBwKSB7Ci0JCWNhc2UgNDoKLQkJCWJ1ZmZlclswXSA9IGxvICYgMHhmOwotCQkJYnVmZmVyWzFdID0gKChsbyAmIDB4NzApID4+IDQpIHwgKChoaSAmIDEpIDw8IDMpOwotCQkJYnVmZmVyWzJdID0gKGhpICYgMHgxZSkgPj4gMTsKLQkJCWJ1ZmZlclszXSA9IGxvMiAmIDB4ZjsKLQkJCWJ1ZmZlcls0XSA9ICgobG8yICYgMHg3MCkgPj4gNCkgfCAoKGhpMiAmIDEpIDw8IDMpOwotCQkJYnVmZmVyWzVdID0gKGhpMiAmIDB4MWUpID4+IDE7Ci0JCQlyZXQgPSA2OwotCQkJYnJlYWs7Ci0JCWNhc2UgNjoKLQkJCWJ1ZmZlclswXSA9IGxvICYgMHgzZjsKLQkJCWJ1ZmZlclsxXSA9ICgobG8gJiAweDQwKSA+PiA2KSB8IChoaSA8PCAxKTsKLQkJCWJ1ZmZlclsyXSA9IGxvMiAmIDB4M2Y7Ci0JCQlidWZmZXJbM10gPSAoKGxvMiAmIDB4NDApID4+IDYpIHwgKGhpMiA8PCAxKTsKLQkJCXJldCA9IDQ7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgUUNfVU5JRElSOgkvKiBVbmlkaXJlY3Rpb25hbCBQb3J0ICovCi0JCXdyaXRlX2xwY29udHJvbChxLCA2KTsKLQkJbG8gPSAocWNfd2FpdGhhbmQocSwgMSkgJiAweGYwKSA+PiA0OwotCQl3cml0ZV9scGNvbnRyb2wocSwgMHhlKTsKLQkJaGkgPSAocWNfd2FpdGhhbmQocSwgMCkgJiAweGYwKSA+PiA0OwotCi0JCXN3aXRjaCAocS0+YnBwKSB7Ci0JCWNhc2UgNDoKLQkJCWJ1ZmZlclswXSA9IGxvOwotCQkJYnVmZmVyWzFdID0gaGk7Ci0JCQlyZXQgPSAyOwotCQkJYnJlYWs7Ci0JCWNhc2UgNjoKLQkJCXN3aXRjaCAoc3RhdGUpIHsKLQkJCWNhc2UgMDoKLQkJCQlidWZmZXJbMF0gPSAobG8gPDwgMikgfCAoKGhpICYgMHhjKSA+PiAyKTsKLQkJCQlxLT5zYXZlZF9iaXRzID0gKGhpICYgMykgPDwgNDsKLQkJCQlzdGF0ZSA9IDE7Ci0JCQkJcmV0ID0gMTsKLQkJCQlicmVhazsKLQkJCWNhc2UgMToKLQkJCQlidWZmZXJbMF0gPSBsbyB8IHEtPnNhdmVkX2JpdHM7Ci0JCQkJcS0+c2F2ZWRfYml0cyA9IGhpIDw8IDI7Ci0JCQkJc3RhdGUgPSAyOwotCQkJCXJldCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDI6Ci0JCQkJYnVmZmVyWzBdID0gKChsbyAmIDB4YykgPj4gMikgfCBxLT5zYXZlZF9iaXRzOwotCQkJCWJ1ZmZlclsxXSA9ICgobG8gJiAzKSA8PCA0KSB8IGhpOwotCQkJCXN0YXRlID0gMDsKLQkJCQlyZXQgPSAyOwotCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIHJlcXVlc3RzIGEgc2NhbiBmcm9tIHRoZSBjYW1lcmEuICBJdCBzZW5kcyB0aGUgY29ycmVjdCBpbnN0cnVjdGlvbnMKLSAqIHRvIHRoZSBjYW1lcmEgYW5kIHRoZW4gcmVhZHMgYmFjayB0aGUgY29ycmVjdCBudW1iZXIgb2YgYnl0ZXMuICBJbgotICogcHJldmlvdXMgdmVyc2lvbnMgb2YgdGhpcyByb3V0aW5lIHRoZSByZXR1cm4gc3RydWN0dXJlIGNvbnRhaW5lZAotICogdGhlIHJhdyBvdXRwdXQgZnJvbSB0aGUgY2FtZXJhLCBhbmQgdGhlcmUgd2FzIGEgJ3FjX2NvbnZlcnRzY2FuJwotICogZnVuY3Rpb24gdGhhdCBjb252ZXJ0ZWQgdGhhdCB0byBhIHVzZWZ1bCBmb3JtYXQuICBJbiB2ZXJzaW9uIDAuMyBJCi0gKiByb2xsZWQgcWNfY29udmVydHNjYW4gaW50byBxY19zY2FuIGFuZCBub3cgSSBvbmx5IHJldHVybiB0aGUKLSAqIGNvbnZlcnRlZCBzY2FuLiAgVGhlIGZvcm1hdCBpcyBqdXN0IGFuIG9uZS1kaW1lbnNpb25hbCBhcnJheSBvZgotICogY2hhcmFjdGVycywgb25lIGZvciBlYWNoIHBpeGVsLCB3aXRoIDA9YmxhY2sgdXAgdG8gbj13aGl0ZSwgd2hlcmUKLSAqIG49Ml4oYml0IGRlcHRoKS0xLiAgQXNrIG1lIGZvciBtb3JlIGRldGFpbHMgaWYgeW91IGRvbid0IHVuZGVyc3RhbmQKLSAqIHRoaXMuICovCi0KLXN0YXRpYyBsb25nIHFjX2NhcHR1cmUoc3RydWN0IHFjYW0gKnEsIHU4ICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuKQotewotCWludCBpLCBqLCBrLCB5aWVsZDsKLQlpbnQgYnl0ZXM7Ci0JaW50IGxpbmVzdG90cmFucywgdHJhbnNwZXJsaW5lOwotCWludCBkaXZpc29yOwotCWludCBwaXhlbHNfcGVyX2xpbmU7Ci0JaW50IHBpeGVsc19yZWFkID0gMDsKLQlpbnQgZ290ID0gMDsKLQljaGFyIGJ1ZmZlcls2XTsKLQlpbnQgIHNoaWZ0ID0gOCAtIHEtPmJwcDsKLQljaGFyIGludmVydDsKLQotCWlmIChxLT5tb2RlID09IC0xKQotCQlyZXR1cm4gLUVOWElPOwotCi0JcWNfY29tbWFuZChxLCAweDcpOwotCXFjX2NvbW1hbmQocSwgcS0+bW9kZSk7Ci0KLQlpZiAoKHEtPnBvcnRfbW9kZSAmIFFDX01PREVfTUFTSykgPT0gUUNfQklESVIpIHsKLQkJd3JpdGVfbHBjb250cm9sKHEsIDB4MmUpOwkvKiB0dXJuIHBvcnQgYXJvdW5kICovCi0JCXdyaXRlX2xwY29udHJvbChxLCAweDI2KTsKLQkJcWNfd2FpdGhhbmQocSwgMSk7Ci0JCXdyaXRlX2xwY29udHJvbChxLCAweDJlKTsKLQkJcWNfd2FpdGhhbmQocSwgMCk7Ci0JfQotCi0JLyogc3RyYW5nZSAtLSBzaG91bGQgYmUgMTU6NjMgYmVsb3csIGJ1dCA0YnBwIGlzIG9kZCAqLwotCWludmVydCA9IChxLT5icHAgPT0gNCkgPyAxNiA6IDYzOwotCi0JbGluZXN0b3RyYW5zID0gcS0+aGVpZ2h0IC8gcS0+dHJhbnNmZXJfc2NhbGU7Ci0JcGl4ZWxzX3Blcl9saW5lID0gcS0+d2lkdGggLyBxLT50cmFuc2Zlcl9zY2FsZTsKLQl0cmFuc3BlcmxpbmUgPSBxLT53aWR0aCAqIHEtPmJwcDsKLQlkaXZpc29yID0gKCgocS0+cG9ydF9tb2RlICYgUUNfTU9ERV9NQVNLKSA9PSBRQ19CSURJUikgPyAyNCA6IDgpICoKLQkJcS0+dHJhbnNmZXJfc2NhbGU7Ci0JdHJhbnNwZXJsaW5lID0gRElWX1JPVU5EX1VQKHRyYW5zcGVybGluZSwgZGl2aXNvcik7Ci0KLQlmb3IgKGkgPSAwLCB5aWVsZCA9IHlpZWxkbGluZXM7IGkgPCBsaW5lc3RvdHJhbnM7IGkrKykgewotCQlmb3IgKHBpeGVsc19yZWFkID0gaiA9IDA7IGogPCB0cmFuc3BlcmxpbmU7IGorKykgewotCQkJYnl0ZXMgPSBxY19yZWFkYnl0ZXMocSwgYnVmZmVyKTsKLQkJCWZvciAoayA9IDA7IGsgPCBieXRlcyAmJiAocGl4ZWxzX3JlYWQgKyBrKSA8IHBpeGVsc19wZXJfbGluZTsgaysrKSB7Ci0JCQkJaW50IG87Ci0JCQkJaWYgKGJ1ZmZlcltrXSA9PSAwICYmIGludmVydCA9PSAxNikgewotCQkJCQkvKiA0YnBwIGlzIG9kZCAoYWdhaW4pIC0tIGludmVydGVyIGlzIDE2LCBub3QgMTUsIGJ1dCBvdXRwdXQKLQkJCQkJICAgbXVzdCBiZSAwLTE1IC0tIGJscyAqLwotCQkJCQlidWZmZXJba10gPSAxNjsKLQkJCQl9Ci0JCQkJbyA9IGkgKiBwaXhlbHNfcGVyX2xpbmUgKyBwaXhlbHNfcmVhZCArIGs7Ci0JCQkJaWYgKG8gPCBsZW4pIHsKLQkJCQkJdTggY2ggPSBpbnZlcnQgLSBidWZmZXJba107Ci0JCQkJCWdvdCsrOwotCQkJCQlidWZbb10gPSBjaCA8PCBzaGlmdDsKLQkJCQl9Ci0JCQl9Ci0JCQlwaXhlbHNfcmVhZCArPSBieXRlczsKLQkJfQotCQlxY19yZWFkYnl0ZXMocSwgTlVMTCk7CS8qIHJlc2V0IHN0YXRlIG1hY2hpbmUgKi8KLQotCQkvKiBHcmFiYmluZyBhbiBlbnRpcmUgZnJhbWUgZnJvbSB0aGUgcXVpY2tjYW0gaXMgYSBsZW5ndGh5Ci0JCSAgIHByb2Nlc3MuIFdlIGRvbid0ICh1c3VhbGx5KSB3YW50IHRvIGJ1c3ktYmxvY2sgdGhlCi0JCSAgIHByb2Nlc3NvciBmb3IgdGhlIGVudGlyZSBmcmFtZS4geWllbGRsaW5lcyBpcyBhIG1vZHVsZQotCQkgICBwYXJhbWV0ZXIuIElmIHdlIHlpZWxkIGV2ZXJ5IGxpbmUsIHRoZSBtaW5pbXVtIGZyYW1lCi0JCSAgIHRpbWUgd2lsbCBiZSAyNDAgLyAyMDAgPSAxLjIgc2Vjb25kcy4gVGhlIGNvbXBpbGUtdGltZQotCQkgICBkZWZhdWx0IGlzIHRvIHlpZWxkIGV2ZXJ5IDQgbGluZXMuICovCi0JCWlmIChpID49IHlpZWxkKSB7Ci0JCQltc2xlZXBfaW50ZXJydXB0aWJsZSg1KTsKLQkJCXlpZWxkID0gaSArIHlpZWxkbGluZXM7Ci0JCX0KLQl9Ci0KLQlpZiAoKHEtPnBvcnRfbW9kZSAmIFFDX01PREVfTUFTSykgPT0gUUNfQklESVIpIHsKLQkJd3JpdGVfbHBjb250cm9sKHEsIDIpOwotCQl3cml0ZV9scGNvbnRyb2wocSwgNik7Ci0JCXVkZWxheSgzKTsKLQkJd3JpdGVfbHBjb250cm9sKHEsIDB4ZSk7Ci0JfQotCWlmIChnb3QgPCBsZW4pCi0JCXJldHVybiBnb3Q7Ci0JcmV0dXJuIGxlbjsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JVmlkZW9idWYgb3BlcmF0aW9ucwotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXN0YXRpYyBpbnQgcXVldWVfc2V0dXAoc3RydWN0IHZiMl9xdWV1ZSAqdnEsIGNvbnN0IHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10LAotCQkJCXVuc2lnbmVkIGludCAqbmJ1ZmZlcnMsIHVuc2lnbmVkIGludCAqbnBsYW5lcywKLQkJCQl1bnNpZ25lZCBpbnQgc2l6ZXNbXSwgdm9pZCAqYWxsb2NfY3R4c1tdKQotewotCXN0cnVjdCBxY2FtICpkZXYgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsKLQotCWlmICgwID09ICpuYnVmZmVycykKLQkJKm5idWZmZXJzID0gMzsKLQkqbnBsYW5lcyA9IDE7Ci0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQlpZiAoZm10KQotCQlzaXplc1swXSA9IGZtdC0+Zm10LnBpeC53aWR0aCAqIGZtdC0+Zm10LnBpeC5oZWlnaHQ7Ci0JZWxzZQotCQlzaXplc1swXSA9IChkZXYtPndpZHRoIC8gZGV2LT50cmFuc2Zlcl9zY2FsZSkgKgotCQkgICAoZGV2LT5oZWlnaHQgLyBkZXYtPnRyYW5zZmVyX3NjYWxlKTsKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpCi17Ci0JdmIyX2J1ZmZlcl9kb25lKHZiLCBWQjJfQlVGX1NUQVRFX0RPTkUpOwotfQotCi1zdGF0aWMgdm9pZCBidWZmZXJfZmluaXNoKHN0cnVjdCB2YjJfYnVmZmVyICp2YikKLXsKLQlzdHJ1Y3QgcWNhbSAqcWNhbSA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7Ci0Jdm9pZCAqdmJ1ZiA9IHZiMl9wbGFuZV92YWRkcih2YiwgMCk7Ci0JaW50IHNpemUgPSB2Yi0+dmIyX3F1ZXVlLT5wbGFuZV9zaXplc1swXTsKLQlpbnQgbGVuOwotCi0JaWYgKCF2YjJfaXNfc3RyZWFtaW5nKHZiLT52YjJfcXVldWUpKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZxY2FtLT5sb2NrKTsKLQlwYXJwb3J0X2NsYWltX29yX2Jsb2NrKHFjYW0tPnBkZXYpOwotCi0JcWNfcmVzZXQocWNhbSk7Ci0KLQkvKiBVcGRhdGUgdGhlIGNhbWVyYSBwYXJhbWV0ZXJzIGlmIHdlIG5lZWQgdG8gKi8KLQlpZiAocWNhbS0+c3RhdHVzICYgUUNfUEFSQU1fQ0hBTkdFKQotCQlxY19zZXQocWNhbSk7Ci0KLQlsZW4gPSBxY19jYXB0dXJlKHFjYW0sIHZidWYsIHNpemUpOwotCi0JcGFycG9ydF9yZWxlYXNlKHFjYW0tPnBkZXYpOwotCW11dGV4X3VubG9jaygmcWNhbS0+bG9jayk7Ci0JdjRsMl9nZXRfdGltZXN0YW1wKCZ2Yi0+djRsMl9idWYudGltZXN0YW1wKTsKLQlpZiAobGVuICE9IHNpemUpCi0JCXZiLT5zdGF0ZSA9IFZCMl9CVUZfU1RBVEVfRVJST1I7Ci0JdmIyX3NldF9wbGFuZV9wYXlsb2FkKHZiLCAwLCBsZW4pOwotfQotCi1zdGF0aWMgc3RydWN0IHZiMl9vcHMgcWNhbV92aWRlb19xb3BzID0gewotCS5xdWV1ZV9zZXR1cAkJPSBxdWV1ZV9zZXR1cCwKLQkuYnVmX3F1ZXVlCQk9IGJ1ZmZlcl9xdWV1ZSwKLQkuYnVmX2ZpbmlzaAkJPSBidWZmZXJfZmluaXNoLAotCS53YWl0X3ByZXBhcmUJCT0gdmIyX29wc193YWl0X3ByZXBhcmUsCi0JLndhaXRfZmluaXNoCQk9IHZiMl9vcHNfd2FpdF9maW5pc2gsCi19OwotCi0vKgotICoJVmlkZW80bGludXggaW50ZXJmYWNpbmcKLSAqLwotCi1zdGF0aWMgaW50IHFjYW1fcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2Y2FwKQotewotCXN0cnVjdCBxY2FtICpxY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCXN0cmxjcHkodmNhcC0+ZHJpdmVyLCBxY2FtLT52NGwyX2Rldi5uYW1lLCBzaXplb2YodmNhcC0+ZHJpdmVyKSk7Ci0Jc3RybGNweSh2Y2FwLT5jYXJkLCAiQ29ubmVjdGl4IEImVyBRdWlja2NhbSIsIHNpemVvZih2Y2FwLT5jYXJkKSk7Ci0Jc3RybGNweSh2Y2FwLT5idXNfaW5mbywgcWNhbS0+cHBvcnQtPm5hbWUsIHNpemVvZih2Y2FwLT5idXNfaW5mbykpOwotCXZjYXAtPmRldmljZV9jYXBzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1JFQURXUklURSB8Ci0JCQkJVjRMMl9DQVBfU1RSRUFNSU5HOwotCXZjYXAtPmNhcGFiaWxpdGllcyA9IHZjYXAtPmRldmljZV9jYXBzIHwgVjRMMl9DQVBfREVWSUNFX0NBUFM7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcWNhbV9lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfaW5wdXQgKnZpbikKLXsKLQlpZiAodmluLT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXN0cmxjcHkodmluLT5uYW1lLCAiQ2FtZXJhIiwgc2l6ZW9mKHZpbi0+bmFtZSkpOwotCXZpbi0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7Ci0JdmluLT5hdWRpb3NldCA9IDA7Ci0JdmluLT50dW5lciA9IDA7Ci0JdmluLT5zdGQgPSAwOwotCXZpbi0+c3RhdHVzID0gMDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBxY2FtX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgKmlucCkKLXsKLQkqaW5wID0gMDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBxY2FtX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgaW5wKQotewotCXJldHVybiAoaW5wID4gMCkgPyAtRUlOVkFMIDogMDsKLX0KLQotc3RhdGljIGludCBxY2FtX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKLXsKLQlzdHJ1Y3QgcWNhbSAqcWNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmZtdC0+Zm10LnBpeDsKLQotCXBpeC0+d2lkdGggPSBxY2FtLT53aWR0aCAvIHFjYW0tPnRyYW5zZmVyX3NjYWxlOwotCXBpeC0+aGVpZ2h0ID0gcWNhbS0+aGVpZ2h0IC8gcWNhbS0+dHJhbnNmZXJfc2NhbGU7Ci0JcGl4LT5waXhlbGZvcm1hdCA9IChxY2FtLT5icHAgPT0gNCkgPyBWNEwyX1BJWF9GTVRfWTQgOiBWNEwyX1BJWF9GTVRfWTY7Ci0JcGl4LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKLQlwaXgtPmJ5dGVzcGVybGluZSA9IHBpeC0+d2lkdGg7Ci0JcGl4LT5zaXplaW1hZ2UgPSBwaXgtPndpZHRoICogcGl4LT5oZWlnaHQ7Ci0JLyogSnVzdCBhIGd1ZXNzICovCi0JcGl4LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcWNhbV90cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKLXsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZm10LT5mbXQucGl4OwotCi0JaWYgKHBpeC0+aGVpZ2h0IDw9IDYwIHx8IHBpeC0+d2lkdGggPD0gODApIHsKLQkJcGl4LT5oZWlnaHQgPSA2MDsKLQkJcGl4LT53aWR0aCA9IDgwOwotCX0gZWxzZSBpZiAocGl4LT5oZWlnaHQgPD0gMTIwIHx8IHBpeC0+d2lkdGggPD0gMTYwKSB7Ci0JCXBpeC0+aGVpZ2h0ID0gMTIwOwotCQlwaXgtPndpZHRoID0gMTYwOwotCX0gZWxzZSB7Ci0JCXBpeC0+aGVpZ2h0ID0gMjQwOwotCQlwaXgtPndpZHRoID0gMzIwOwotCX0KLQlpZiAocGl4LT5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfWTQgJiYKLQkgICAgcGl4LT5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfWTYpCi0JCXBpeC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfWTQ7Ci0JcGl4LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKLQlwaXgtPmJ5dGVzcGVybGluZSA9IHBpeC0+d2lkdGg7Ci0JcGl4LT5zaXplaW1hZ2UgPSBwaXgtPndpZHRoICogcGl4LT5oZWlnaHQ7Ci0JLyogSnVzdCBhIGd1ZXNzICovCi0JcGl4LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcWNhbV9zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCi17Ci0Jc3RydWN0IHFjYW0gKnFjYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmbXQtPmZtdC5waXg7Ci0JaW50IHJldCA9IHFjYW1fdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmbXQpOwotCi0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlpZiAodmIyX2lzX2J1c3koJnFjYW0tPnZiX3ZpZHEpKQotCQlyZXR1cm4gLUVCVVNZOwotCXFjYW0tPndpZHRoID0gMzIwOwotCXFjYW0tPmhlaWdodCA9IDI0MDsKLQlpZiAocGl4LT5oZWlnaHQgPT0gNjApCi0JCXFjYW0tPnRyYW5zZmVyX3NjYWxlID0gNDsKLQllbHNlIGlmIChwaXgtPmhlaWdodCA9PSAxMjApCi0JCXFjYW0tPnRyYW5zZmVyX3NjYWxlID0gMjsKLQllbHNlCi0JCXFjYW0tPnRyYW5zZmVyX3NjYWxlID0gMTsKLQlpZiAocGl4LT5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfWTYpCi0JCXFjYW0tPmJwcCA9IDY7Ci0JZWxzZQotCQlxY2FtLT5icHAgPSA0OwotCi0JcWNfc2V0c2Nhbm1vZGUocWNhbSk7Ci0JLyogV2UgbXVzdCB1cGRhdGUgdGhlIGNhbWVyYSBiZWZvcmUgd2UgZ3JhYi4gV2UgY291bGQKLQkgICBqdXN0IGhhdmUgY2hhbmdlZCB0aGUgZ3JhYiBzaXplICovCi0JcWNhbS0+c3RhdHVzIHw9IFFDX1BBUkFNX0NIQU5HRTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBxY2FtX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCi17Ci0Jc3RhdGljIHN0cnVjdCB2NGwyX2ZtdGRlc2MgZm9ybWF0c1tdID0gewotCQl7IDAsIDAsIDAsCi0JCSAgIjQtQml0IE1vbm9jaHJvbWUiLCBWNEwyX1BJWF9GTVRfWTQsCi0JCSAgeyAwLCAwLCAwLCAwIH0KLQkJfSwKLQkJeyAxLCAwLCAwLAotCQkgICI2LUJpdCBNb25vY2hyb21lIiwgVjRMMl9QSVhfRk1UX1k2LAotCQkgIHsgMCwgMCwgMCwgMCB9Ci0JCX0sCi0JfTsKLQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IGZtdC0+dHlwZTsKLQotCWlmIChmbXQtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkqZm10ID0gZm9ybWF0c1tmbXQtPmluZGV4XTsKLQlmbXQtPnR5cGUgPSB0eXBlOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHFjYW1fZW51bV9mcmFtZXNpemVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKLQkJCQkJIHN0cnVjdCB2NGwyX2ZybXNpemVlbnVtICpmc2l6ZSkKLXsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZnJtc2l6ZV9kaXNjcmV0ZSBzaXplc1tdID0gewotCQl7ICA4MCwgIDYwIH0sCi0JCXsgMTYwLCAxMjAgfSwKLQkJeyAzMjAsIDI0MCB9LAotCX07Ci0KLQlpZiAoZnNpemUtPmluZGV4ID4gMikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGZzaXplLT5waXhlbF9mb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1k0ICYmCi0JICAgIGZzaXplLT5waXhlbF9mb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1k2KQotCQlyZXR1cm4gLUVJTlZBTDsKLQlmc2l6ZS0+dHlwZSA9IFY0TDJfRlJNU0laRV9UWVBFX0RJU0NSRVRFOwotCWZzaXplLT5kaXNjcmV0ZSA9IHNpemVzW2ZzaXplLT5pbmRleF07Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcWNhbV9zX2N0cmwoc3RydWN0IHY0bDJfY3RybCAqY3RybCkKLXsKLQlzdHJ1Y3QgcWNhbSAqcWNhbSA9Ci0JCWNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1Y3QgcWNhbSwgaGRsKTsKLQlpbnQgcmV0ID0gMDsKLQotCXN3aXRjaCAoY3RybC0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCXFjYW0tPmJyaWdodG5lc3MgPSBjdHJsLT52YWw7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JCXFjYW0tPmNvbnRyYXN0ID0gY3RybC0+dmFsOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0dBTU1BOgotCQlxY2FtLT53aGl0ZWJhbCA9IGN0cmwtPnZhbDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCWlmIChyZXQgPT0gMCkKLQkJcWNhbS0+c3RhdHVzIHw9IFFDX1BBUkFNX0NIQU5HRTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHFjYW1fZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gdjRsMl9maF9vcGVuLAotCS5yZWxlYXNlCT0gdmIyX2ZvcF9yZWxlYXNlLAotCS5wb2xsCQk9IHZiMl9mb3BfcG9sbCwKLQkudW5sb2NrZWRfaW9jdGwgPSB2aWRlb19pb2N0bDIsCi0JLnJlYWQJCT0gdmIyX2ZvcF9yZWFkLAotCS5tbWFwCQk9IHZiMl9mb3BfbW1hcCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgcWNhbV9pb2N0bF9vcHMgPSB7Ci0JLnZpZGlvY19xdWVyeWNhcCAgICAJCSAgICA9IHFjYW1fcXVlcnljYXAsCi0JLnZpZGlvY19nX2lucHV0ICAgICAgCQkgICAgPSBxY2FtX2dfaW5wdXQsCi0JLnZpZGlvY19zX2lucHV0ICAgICAgCQkgICAgPSBxY2FtX3NfaW5wdXQsCi0JLnZpZGlvY19lbnVtX2lucHV0ICAgCQkgICAgPSBxY2FtX2VudW1faW5wdXQsCi0JLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwIAkgICAgPSBxY2FtX2VudW1fZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMJCSAgICA9IHFjYW1fZW51bV9mcmFtZXNpemVzLAotCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAJCSAgICA9IHFjYW1fZ19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3NfZm10X3ZpZF9jYXAgIAkJICAgID0gcWNhbV9zX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAJICAgID0gcWNhbV90cnlfZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19yZXFidWZzCQkJICAgID0gdmIyX2lvY3RsX3JlcWJ1ZnMsCi0JLnZpZGlvY19jcmVhdGVfYnVmcwkJICAgID0gdmIyX2lvY3RsX2NyZWF0ZV9idWZzLAotCS52aWRpb2NfcHJlcGFyZV9idWYJCSAgICA9IHZiMl9pb2N0bF9wcmVwYXJlX2J1ZiwKLQkudmlkaW9jX3F1ZXJ5YnVmCQkgICAgPSB2YjJfaW9jdGxfcXVlcnlidWYsCi0JLnZpZGlvY19xYnVmCQkJICAgID0gdmIyX2lvY3RsX3FidWYsCi0JLnZpZGlvY19kcWJ1ZgkJCSAgICA9IHZiMl9pb2N0bF9kcWJ1ZiwKLQkudmlkaW9jX3N0cmVhbW9uCQkgICAgPSB2YjJfaW9jdGxfc3RyZWFtb24sCi0JLnZpZGlvY19zdHJlYW1vZmYJCSAgICA9IHZiMl9pb2N0bF9zdHJlYW1vZmYsCi0JLnZpZGlvY19sb2dfc3RhdHVzCQkgICAgPSB2NGwyX2N0cmxfbG9nX3N0YXR1cywKLQkudmlkaW9jX3N1YnNjcmliZV9ldmVudAkJICAgID0gdjRsMl9jdHJsX3N1YnNjcmliZV9ldmVudCwKLQkudmlkaW9jX3Vuc3Vic2NyaWJlX2V2ZW50CSAgICA9IHY0bDJfZXZlbnRfdW5zdWJzY3JpYmUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgcWNhbV9jdHJsX29wcyA9IHsKLQkuc19jdHJsID0gcWNhbV9zX2N0cmwsCi19OwotCi0vKiBJbml0aWFsaXplIHRoZSBRdWlja0NhbSBkcml2ZXIgY29udHJvbCBzdHJ1Y3R1cmUuICBUaGlzIGlzIHdoZXJlCi0gKiBkZWZhdWx0cyBhcmUgc2V0IGZvciBwZW9wbGUgd2hvIGRvbid0IGhhdmUgYSBjb25maWcgZmlsZS4qLwotCi1zdGF0aWMgc3RydWN0IHFjYW0gKnFjYW1faW5pdChzdHJ1Y3QgcGFycG9ydCAqcG9ydCkKLXsKLQlzdHJ1Y3QgcWNhbSAqcWNhbTsKLQlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2OwotCXN0cnVjdCB2YjJfcXVldWUgKnE7Ci0JaW50IGVycjsKLQotCXFjYW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcWNhbSksIEdGUF9LRVJORUwpOwotCWlmIChxY2FtID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JdjRsMl9kZXYgPSAmcWNhbS0+djRsMl9kZXY7Ci0Jc25wcmludGYodjRsMl9kZXYtPm5hbWUsIHNpemVvZih2NGwyX2Rldi0+bmFtZSksICJidy1xY2FtJXUiLCBudW1fY2Ftcyk7Ci0KLQlpZiAodjRsMl9kZXZpY2VfcmVnaXN0ZXIocG9ydC0+ZGV2LCB2NGwyX2RldikgPCAwKSB7Ci0JCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKLQkJa2ZyZWUocWNhbSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXY0bDJfY3RybF9oYW5kbGVyX2luaXQoJnFjYW0tPmhkbCwgMyk7Ci0JdjRsMl9jdHJsX25ld19zdGQoJnFjYW0tPmhkbCwgJnFjYW1fY3RybF9vcHMsCi0JCQkgIFY0TDJfQ0lEX0JSSUdIVE5FU1MsIDAsIDI1NSwgMSwgMTgwKTsKLQl2NGwyX2N0cmxfbmV3X3N0ZCgmcWNhbS0+aGRsLCAmcWNhbV9jdHJsX29wcywKLQkJCSAgVjRMMl9DSURfQ09OVFJBU1QsIDAsIDI1NSwgMSwgMTkyKTsKLQl2NGwyX2N0cmxfbmV3X3N0ZCgmcWNhbS0+aGRsLCAmcWNhbV9jdHJsX29wcywKLQkJCSAgVjRMMl9DSURfR0FNTUEsIDAsIDI1NSwgMSwgMTA1KTsKLQlpZiAocWNhbS0+aGRsLmVycm9yKSB7Ci0JCXY0bDJfZXJyKHY0bDJfZGV2LCAiY291bGRuJ3QgcmVnaXN0ZXIgY29udHJvbHNcbiIpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JbXV0ZXhfaW5pdCgmcWNhbS0+bG9jayk7Ci0JbXV0ZXhfaW5pdCgmcWNhbS0+cXVldWVfbG9jayk7Ci0KLQkvKiBpbml0aWFsaXplIHF1ZXVlICovCi0JcSA9ICZxY2FtLT52Yl92aWRxOwotCXEtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JcS0+aW9fbW9kZXMgPSBWQjJfTU1BUCB8IFZCMl9VU0VSUFRSIHwgVkIyX1JFQUQ7Ci0JcS0+ZHJ2X3ByaXYgPSBxY2FtOwotCXEtPm9wcyA9ICZxY2FtX3ZpZGVvX3FvcHM7Ci0JcS0+bWVtX29wcyA9ICZ2YjJfdm1hbGxvY19tZW1vcHM7Ci0JcS0+dGltZXN0YW1wX2ZsYWdzID0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDOwotCWVyciA9IHZiMl9xdWV1ZV9pbml0KHEpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXY0bDJfZXJyKHY0bDJfZGV2LCAiY291bGRuJ3QgaW5pdCB2YjJfcXVldWUgZm9yICVzLlxuIiwgcG9ydC0+bmFtZSk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JcWNhbS0+dmRldi5xdWV1ZSA9IHE7Ci0JcWNhbS0+dmRldi5xdWV1ZS0+bG9jayA9ICZxY2FtLT5xdWV1ZV9sb2NrOwotCi0JcWNhbS0+cHBvcnQgPSBwb3J0OwotCXFjYW0tPnBkZXYgPSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShwb3J0LCB2NGwyX2Rldi0+bmFtZSwgTlVMTCwgTlVMTCwKLQkJCU5VTEwsIDAsIE5VTEwpOwotCWlmIChxY2FtLT5wZGV2ID09IE5VTEwpIHsKLQkJdjRsMl9lcnIodjRsMl9kZXYsICJjb3VsZG4ndCByZWdpc3RlciBmb3IgJXMuXG4iLCBwb3J0LT5uYW1lKTsKLQkJZ290byBleGl0OwotCX0KLQotCXN0cmxjcHkocWNhbS0+dmRldi5uYW1lLCAiQ29ubmVjdGl4IFF1aWNrQ2FtIiwgc2l6ZW9mKHFjYW0tPnZkZXYubmFtZSkpOwotCXFjYW0tPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKLQlxY2FtLT52ZGV2LmN0cmxfaGFuZGxlciA9ICZxY2FtLT5oZGw7Ci0JcWNhbS0+dmRldi5mb3BzID0gJnFjYW1fZm9wczsKLQlxY2FtLT52ZGV2LmxvY2sgPSAmcWNhbS0+bG9jazsKLQlxY2FtLT52ZGV2LmlvY3RsX29wcyA9ICZxY2FtX2lvY3RsX29wczsKLQlxY2FtLT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmcWNhbS0+dmRldiwgcWNhbSk7Ci0KLQlxY2FtLT5wb3J0X21vZGUgPSAoUUNfQU5ZIHwgUUNfTk9UU0VUKTsKLQlxY2FtLT53aWR0aCA9IDMyMDsKLQlxY2FtLT5oZWlnaHQgPSAyNDA7Ci0JcWNhbS0+YnBwID0gNDsKLQlxY2FtLT50cmFuc2Zlcl9zY2FsZSA9IDI7Ci0JcWNhbS0+Y29udHJhc3QgPSAxOTI7Ci0JcWNhbS0+YnJpZ2h0bmVzcyA9IDE4MDsKLQlxY2FtLT53aGl0ZWJhbCA9IDEwNTsKLQlxY2FtLT50b3AgPSAxOwotCXFjYW0tPmxlZnQgPSAxNDsKLQlxY2FtLT5tb2RlID0gLTE7Ci0JcWNhbS0+c3RhdHVzID0gUUNfUEFSQU1fQ0hBTkdFOwotCXJldHVybiBxY2FtOwotCi1leGl0OgotCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnFjYW0tPmhkbCk7Ci0Ja2ZyZWUocWNhbSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgcWNfY2FsaWJyYXRlKHN0cnVjdCBxY2FtICpxKQotewotCS8qCi0JICoJQnVnZml4IGJ5IEhhbm5vIE11ZWxsZXIgaG11ZWxsZXJAa2FiZWwuZGUsIE1haSAyMSA5NgotCSAqCVRoZSB3aGl0ZSBiYWxhbmNlIGlzIGFuIGluZGl2aWR1YWwgdmFsdWUgZm9yIGVhY2gKLQkgKglxdWlja2NhbS4KLQkgKi8KLQotCWludCB2YWx1ZTsKLQlpbnQgY291bnQgPSAwOwotCi0JcWNfY29tbWFuZChxLCAyNyk7CS8qIEF1dG9BZGp1c3RPZmZzZXQgKi8KLQlxY19jb21tYW5kKHEsIDApOwkvKiBEdW1teSBQYXJhbWV0ZXIsIGlnbm9yZWQgYnkgdGhlIGNhbWVyYSAqLwotCi0JLyogR2V0T2Zmc2V0ICgzMykgd2lsbCByZWFkIDI1NSB1bnRpbCBhdXRvY2FsaWJyYXRpb24gKi8KLQkvKiBpcyBmaW5pc2hlZC4gQWZ0ZXIgdGhhdCwgYSB2YWx1ZSBvZiAxLTI1NCB3aWxsIGJlICovCi0JLyogcmV0dXJuZWQuICovCi0KLQlkbyB7Ci0JCXFjX2NvbW1hbmQocSwgMzMpOwotCQl2YWx1ZSA9IHFjX3JlYWRwYXJhbShxKTsKLQkJbWRlbGF5KDEpOwotCQlzY2hlZHVsZSgpOwotCQljb3VudCsrOwotCX0gd2hpbGUgKHZhbHVlID09IDB4ZmYgJiYgY291bnQgPCAyMDQ4KTsKLQotCXEtPndoaXRlYmFsID0gdmFsdWU7Ci0JcmV0dXJuIHZhbHVlOwotfQotCi1zdGF0aWMgaW50IGluaXRfYndxY2FtKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQotewotCXN0cnVjdCBxY2FtICpxY2FtOwotCi0JaWYgKG51bV9jYW1zID09IE1BWF9DQU1TKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVG9vIG1hbnkgUXVpY2tjYW1zIChtYXggJWQpXG4iLCBNQVhfQ0FNUyk7Ci0JCXJldHVybiAtRU5PU1BDOwotCX0KLQotCXFjYW0gPSBxY2FtX2luaXQocG9ydCk7Ci0JaWYgKHFjYW0gPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlwYXJwb3J0X2NsYWltX29yX2Jsb2NrKHFjYW0tPnBkZXYpOwotCi0JcWNfcmVzZXQocWNhbSk7Ci0KLQlpZiAocWNfZGV0ZWN0KHFjYW0pID09IDApIHsKLQkJcGFycG9ydF9yZWxlYXNlKHFjYW0tPnBkZXYpOwotCQlwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKHFjYW0tPnBkZXYpOwotCQlrZnJlZShxY2FtKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXFjX2NhbGlicmF0ZShxY2FtKTsKLQl2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cCgmcWNhbS0+aGRsKTsKLQotCXBhcnBvcnRfcmVsZWFzZShxY2FtLT5wZGV2KTsKLQotCXY0bDJfaW5mbygmcWNhbS0+djRsMl9kZXYsICJDb25uZWN0aXggUXVpY2tjYW0gb24gJXNcbiIsIHFjYW0tPnBwb3J0LT5uYW1lKTsKLQotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnFjYW0tPnZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKSA8IDApIHsKLQkJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShxY2FtLT5wZGV2KTsKLQkJa2ZyZWUocWNhbSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXFjYW1zW251bV9jYW1zKytdID0gcWNhbTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjbG9zZV9id3FjYW0oc3RydWN0IHFjYW0gKnFjYW0pCi17Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnFjYW0tPnZkZXYpOwotCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJnFjYW0tPmhkbCk7Ci0JcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShxY2FtLT5wZGV2KTsKLQlrZnJlZShxY2FtKTsKLX0KLQotLyogVGhlIHBhcnBvcnQgcGFyYW1ldGVyIGNvbnRyb2xzIHdoaWNoIHBhcnBvcnRzIHdpbGwgYmUgc2Nhbm5lZC4KLSAqIFNjYW5uaW5nIGFsbCBwYXJwb3J0cyBjYXVzZXMgc29tZSBwcmludGVycyB0byBwcmludCBhIGdhcmJhZ2UgcGFnZS4KLSAqICAgICAgIC0tIE1hcmNoIDE0LCAxOTk5ICBCaWxseSBEb25haHVlIDxiaWxseUBlc2NhcGUuY29tPiAqLwotI2lmZGVmIE1PRFVMRQotc3RhdGljIGNoYXIgKnBhcnBvcnRbTUFYX0NBTVNdID0geyBOVUxMLCB9OwotbW9kdWxlX3BhcmFtX2FycmF5KHBhcnBvcnQsIGNoYXJwLCBOVUxMLCAwKTsKLSNlbmRpZgotCi1zdGF0aWMgaW50IGFjY2VwdF9id3FjYW0oc3RydWN0IHBhcnBvcnQgKnBvcnQpCi17Ci0jaWZkZWYgTU9EVUxFCi0JaW50IG47Ci0KLQlpZiAocGFycG9ydFswXSAmJiBzdHJuY21wKHBhcnBvcnRbMF0sICJhdXRvIiwgNCkgIT0gMCkgewotCQkvKiB1c2VyIGdhdmUgcGFycG9ydCBwYXJhbWV0ZXJzICovCi0JCWZvciAobiA9IDA7IG4gPCBNQVhfQ0FNUyAmJiBwYXJwb3J0W25dOyBuKyspIHsKLQkJCWNoYXIgKmVwOwotCQkJdW5zaWduZWQgbG9uZyByOwotCQkJciA9IHNpbXBsZV9zdHJ0b3VsKHBhcnBvcnRbbl0sICZlcCwgMCk7Ci0JCQlpZiAoZXAgPT0gcGFycG9ydFtuXSkgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCQkiYnctcWNhbTogYmFkIHBvcnQgc3BlY2lmaWVyIFwiJXNcIlxuIiwKLQkJCQkJcGFycG9ydFtuXSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAociA9PSBwb3J0LT5udW1iZXIpCi0JCQkJcmV0dXJuIDE7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ3cWNhbV9hdHRhY2goc3RydWN0IHBhcnBvcnQgKnBvcnQpCi17Ci0JaWYgKGFjY2VwdF9id3FjYW0ocG9ydCkpCi0JCWluaXRfYndxY2FtKHBvcnQpOwotfQotCi1zdGF0aWMgdm9pZCBid3FjYW1fZGV0YWNoKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQotewotCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBudW1fY2FtczsgaSsrKSB7Ci0JCXN0cnVjdCBxY2FtICpxY2FtID0gcWNhbXNbaV07Ci0JCWlmIChxY2FtICYmIHFjYW0tPnBkZXYtPnBvcnQgPT0gcG9ydCkgewotCQkJcWNhbXNbaV0gPSBOVUxMOwotCQkJY2xvc2VfYndxY2FtKHFjYW0pOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHBhcnBvcnRfZHJpdmVyIGJ3cWNhbV9kcml2ZXIgPSB7Ci0JLm5hbWUJPSAiYnctcWNhbSIsCi0JLmF0dGFjaAk9IGJ3cWNhbV9hdHRhY2gsCi0JLmRldGFjaAk9IGJ3cWNhbV9kZXRhY2gsCi19OwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9id19xY2Ftcyh2b2lkKQotewotCXBhcnBvcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJmJ3cWNhbV9kcml2ZXIpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2J3X3FjYW1zKHZvaWQpCi17Ci0jaWZkZWYgTU9EVUxFCi0JLyogRG8gc29tZSBzYW5pdHkgY2hlY2tzIG9uIHRoZSBtb2R1bGUgcGFyYW1ldGVycy4gKi8KLQlpZiAobWF4cG9sbCA+IDUwMDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ29ubmVjdGl4IFF1aWNrY2FtIG1heC1wb2xsIHdhcyBhYm92ZSA1MDAwLiBVc2luZyA1MDAwLlxuIik7Ci0JCW1heHBvbGwgPSA1MDAwOwotCX0KLQotCWlmICh5aWVsZGxpbmVzIDwgMSkgewotCQlwcmludGsoS0VSTl9JTkZPICJDb25uZWN0aXggUXVpY2tjYW0geWllbGRsaW5lcyB3YXMgbGVzcyB0aGFuIDEuIFVzaW5nIDEuXG4iKTsKLQkJeWllbGRsaW5lcyA9IDE7Ci0JfQotI2VuZGlmCi0JcmV0dXJuIHBhcnBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZid3FjYW1fZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQoaW5pdF9id19xY2Ftcyk7Ci1tb2R1bGVfZXhpdChleGl0X2J3X3FjYW1zKTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1ZFUlNJT04oIjAuMC4zIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvcGFycG9ydC9jLXFjYW0uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9wYXJwb3J0L2MtcWNhbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTAxMGJkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9wYXJwb3J0L2MtcWNhbS5jCisrKyAvZGV2L251bGwKQEAgLTEsODgyICswLDAgQEAKLS8qCi0gKglWaWRlbzRMaW51eCBDb2xvdXIgUXVpY2tDYW0gZHJpdmVyCi0gKglDb3B5cmlnaHQgMTk5Ny0yMDAwIFBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4KLSAqCi0gKiAgICBNb2R1bGUgcGFyYW1ldGVyczoKLSAqCi0gKglwYXJwb3J0PWF1dG8gICAgICAtLSBwcm9iZSBhbGwgcGFycG9ydHMgKGRlZmF1bHQpCi0gKglwYXJwb3J0PTAgICAgICAgICAtLSBwYXJwb3J0MCBiZWNvbWVzIHFjYW0xCi0gKglwYXJwb3J0PTIsMCwxICAgICAtLSBwYXJwb3J0cyAyLDAsMSBhcmUgdHJpZWQgaW4gdGhhdCBvcmRlcgotICoKLSAqCXByb2JlPTAJCSAgLS0gZG8gbm8gcHJvYmluZywgYXNzdW1lIGNhbWVyYSBpcyBwcmVzZW50Ci0gKglwcm9iZT0xCQkgIC0tIHVzZSBJRUVFLTEyODQgYXV0b3Byb2JlIGRhdGEgb25seSAoZGVmYXVsdCkKLSAqCXByb2JlPTIJCSAgLS0gcHJvYmUgYWdncmVzc2l2ZWx5IGZvciBjYW1lcmFzCi0gKgotICoJZm9yY2VfcmdiPTEgICAgICAgLS0gZm9yY2UgZGF0YSBmb3JtYXQgdG8gUkdCIChkZWZhdWx0IGlzIEJHUikKLSAqCi0gKiBUaGUgcGFycG9ydCBwYXJhbWV0ZXIgY29udHJvbHMgd2hpY2ggcGFycG9ydHMgd2lsbCBiZSBzY2FubmVkLgotICogU2Nhbm5pbmcgYWxsIHBhcnBvcnRzIGNhdXNlcyBzb21lIHByaW50ZXJzIHRvIHByaW50IGEgZ2FyYmFnZSBwYWdlLgotICogICAgICAgLS0gTWFyY2ggMTQsIDE5OTkgIEJpbGx5IERvbmFodWUgPGJpbGx5QGVzY2FwZS5jb20+Ci0gKgotICogRml4ZWQgZGF0YSBmb3JtYXQgdG8gQkdSLCBhZGRlZCBmb3JjZV9yZ2IgcGFyYW1ldGVyLiBBZGRlZCBtaXNzaW5nCi0gKiBwYXJwb3J0X3VucmVnaXN0ZXJfZHJpdmVyKCkgb24gbW9kdWxlIHJlbW92YWwuCi0gKiAgICAgICAtLSBNYXkgMjgsIDIwMDAgIENsYXVkaW8gTWF0c3Vva2EgPGNsYXVkaW9AY29uZWN0aXZhLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWZoLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4KLQotc3RydWN0IHFjYW0gewotCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7Ci0Jc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGhkbDsKLQlzdHJ1Y3QgcGFyZGV2aWNlICpwZGV2OwotCXN0cnVjdCBwYXJwb3J0ICpwcG9ydDsKLQlpbnQgd2lkdGgsIGhlaWdodDsKLQlpbnQgY2NkX3dpZHRoLCBjY2RfaGVpZ2h0OwotCWludCBtb2RlOwotCWludCBjb250cmFzdCwgYnJpZ2h0bmVzcywgd2hpdGViYWw7Ci0JaW50IHRvcCwgbGVmdDsKLQl1bnNpZ25lZCBpbnQgYmlkaXJlY3Rpb25hbDsKLQlzdHJ1Y3QgbXV0ZXggbG9jazsKLX07Ci0KLS8qIGNhbWVyYXMgbWF4aW11bSAqLwotI2RlZmluZSBNQVhfQ0FNUyA0Ci0KLS8qIFRoZSB0aHJlZSBwb3NzaWJsZSBRdWlja0NhbSBtb2RlcyAqLwotI2RlZmluZSBRQ19NSUxMSU9OUwkweDE4Ci0jZGVmaW5lIFFDX0JJTExJT05TCTB4MTAKLSNkZWZpbmUgUUNfVEhPVVNBTkRTCTB4MDgJLyogd2l0aCBWSURFQyBjb21wcmVzc2lvbiAobm90IHN1cHBvcnRlZCkgKi8KLQotLyogVGhlIHRocmVlIHBvc3NpYmxlIGRlY2ltYXRpb25zICovCi0jZGVmaW5lIFFDX0RFQ0lNQVRJT05fMQkJMAotI2RlZmluZSBRQ19ERUNJTUFUSU9OXzIJCTIKLSNkZWZpbmUgUUNfREVDSU1BVElPTl80CQk0Ci0KLSNkZWZpbmUgQkFOTkVSICJDb2xvdXIgUXVpY2tDYW0gZm9yIFZpZGVvNExpbnV4IHYwLjA2IgotCi1zdGF0aWMgaW50IHBhcnBvcnRbTUFYX0NBTVNdID0geyBbMSAuLi4gTUFYX0NBTVMtMV0gPSAtMSB9Owotc3RhdGljIGludCBwcm9iZSA9IDI7Ci1zdGF0aWMgYm9vbCBmb3JjZV9yZ2I7Ci1zdGF0aWMgaW50IHZpZGVvX25yID0gLTE7Ci0KLS8qIEZJWE1FOiBwYXJwb3J0PWF1dG8gd291bGQgbmV2ZXIgaGF2ZSB3b3JrZWQsIHN1cmVseT8gLS1SUiAqLwotTU9EVUxFX1BBUk1fREVTQyhwYXJwb3J0LCAicGFycG9ydD08YXV0b3xuWyxuXS4uLj4gZm9yIHBvcnQgZGV0ZWN0aW9uIG1ldGhvZFxuIgotCQkJICAicHJvYmU9PDB8MXwyPiBmb3IgY2FtZXJhIGRldGVjdGlvbiBtZXRob2RcbiIKLQkJCSAgImZvcmNlX3JnYj08MHwxPiBmb3IgUkdCIGRhdGEgZm9ybWF0IChkZWZhdWx0IEJHUikiKTsKLW1vZHVsZV9wYXJhbV9hcnJheShwYXJwb3J0LCBpbnQsIE5VTEwsIDApOwotbW9kdWxlX3BhcmFtKHByb2JlLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKGZvcmNlX3JnYiwgYm9vbCwgMCk7Ci1tb2R1bGVfcGFyYW0odmlkZW9fbnIsIGludCwgMCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcWNhbSAqcWNhbXNbTUFYX0NBTVNdOwotc3RhdGljIHVuc2lnbmVkIGludCBudW1fY2FtczsKLQotc3RhdGljIGlubGluZSB2b2lkIHFjYW1fc2V0X2FjayhzdHJ1Y3QgcWNhbSAqcWNhbSwgdW5zaWduZWQgaW50IGkpCi17Ci0JLyogbm90ZTogdGhlIFFDIHNwZWNzIHJlZmVyIHRvIHRoZSBQQ0FjayBwaW4gYnkgdm9sdGFnZSwgbm90Ci0JICAgc29mdHdhcmUgbGV2ZWwuICBQQyBwb3J0cyBoYXZlIGJ1aWx0aW4gaW52ZXJ0ZXJzLiAqLwotCXBhcnBvcnRfZnJvYl9jb250cm9sKHFjYW0tPnBwb3J0LCA4LCBpID8gOCA6IDApOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxY2FtX3JlYWR5MShzdHJ1Y3QgcWNhbSAqcWNhbSkKLXsKLQlyZXR1cm4gKHBhcnBvcnRfcmVhZF9zdGF0dXMocWNhbS0+cHBvcnQpICYgMHg4KSA/IDEgOiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxY2FtX3JlYWR5MihzdHJ1Y3QgcWNhbSAqcWNhbSkKLXsKLQlyZXR1cm4gKHBhcnBvcnRfcmVhZF9kYXRhKHFjYW0tPnBwb3J0KSAmIDB4MSkgPyAxIDogMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBxY2FtX2F3YWl0X3JlYWR5MShzdHJ1Y3QgcWNhbSAqcWNhbSwgaW50IHZhbHVlKQotewotCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmcWNhbS0+djRsMl9kZXY7Ci0JdW5zaWduZWQgbG9uZyBvbGRqaWZmaWVzID0gamlmZmllczsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAob2xkamlmZmllcyA9IGppZmZpZXM7Ci0JICAgICB0aW1lX2JlZm9yZShqaWZmaWVzLCBvbGRqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg0MCkpOykKLQkJaWYgKHFjYW1fcmVhZHkxKHFjYW0pID09IHZhbHVlKQotCQkJcmV0dXJuIDA7Ci0KLQkvKiBJZiB0aGUgY2FtZXJhIGRpZG4ndCByZXNwb25kIHdpdGhpbiAxLzI1IHNlY29uZCwgcG9sbCBzbG93bHkKLQkgICBmb3IgYSB3aGlsZS4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgNTA7IGkrKykgewotCQlpZiAocWNhbV9yZWFkeTEocWNhbSkgPT0gdmFsdWUpCi0JCQlyZXR1cm4gMDsKLQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTsKLQl9Ci0KLQkvKiBQcm9iYWJseSBzb21lYm9keSBwdWxsZWQgdGhlIHBsdWcgb3V0LiAgTm90IG11Y2ggd2UgY2FuIGRvLiAqLwotCXY0bDJfZXJyKHY0bDJfZGV2LCAicmVhZHkxIHRpbWVvdXQgKCVkKSAleCAleFxuIiwgdmFsdWUsCi0JICAgICAgIHBhcnBvcnRfcmVhZF9zdGF0dXMocWNhbS0+cHBvcnQpLAotCSAgICAgICBwYXJwb3J0X3JlYWRfY29udHJvbChxY2FtLT5wcG9ydCkpOwotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHFjYW1fYXdhaXRfcmVhZHkyKHN0cnVjdCBxY2FtICpxY2FtLCBpbnQgdmFsdWUpCi17Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZxY2FtLT52NGwyX2RldjsKLQl1bnNpZ25lZCBsb25nIG9sZGppZmZpZXMgPSBqaWZmaWVzOwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChvbGRqaWZmaWVzID0gamlmZmllczsKLQkgICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIG9sZGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDQwKSk7KQotCQlpZiAocWNhbV9yZWFkeTIocWNhbSkgPT0gdmFsdWUpCi0JCQlyZXR1cm4gMDsKLQotCS8qIElmIHRoZSBjYW1lcmEgZGlkbid0IHJlc3BvbmQgd2l0aGluIDEvMjUgc2Vjb25kLCBwb2xsIHNsb3dseQotCSAgIGZvciBhIHdoaWxlLiAqLwotCWZvciAoaSA9IDA7IGkgPCA1MDsgaSsrKSB7Ci0JCWlmIChxY2FtX3JlYWR5MihxY2FtKSA9PSB2YWx1ZSkKLQkJCXJldHVybiAwOwotCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMDApOwotCX0KLQotCS8qIFByb2JhYmx5IHNvbWVib2R5IHB1bGxlZCB0aGUgcGx1ZyBvdXQuICBOb3QgbXVjaCB3ZSBjYW4gZG8uICovCi0JdjRsMl9lcnIodjRsMl9kZXYsICJyZWFkeTIgdGltZW91dCAoJWQpICV4ICV4ICV4XG4iLCB2YWx1ZSwKLQkgICAgICAgcGFycG9ydF9yZWFkX3N0YXR1cyhxY2FtLT5wcG9ydCksCi0JICAgICAgIHBhcnBvcnRfcmVhZF9jb250cm9sKHFjYW0tPnBwb3J0KSwKLQkgICAgICAgcGFycG9ydF9yZWFkX2RhdGEocWNhbS0+cHBvcnQpKTsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBxY2FtX3JlYWRfZGF0YShzdHJ1Y3QgcWNhbSAqcWNhbSkKLXsKLQl1bnNpZ25lZCBpbnQgaWRhdGE7Ci0KLQlxY2FtX3NldF9hY2socWNhbSwgMCk7Ci0JaWYgKHFjYW1fYXdhaXRfcmVhZHkxKHFjYW0sIDEpKQotCQlyZXR1cm4gLTE7Ci0JaWRhdGEgPSBwYXJwb3J0X3JlYWRfc3RhdHVzKHFjYW0tPnBwb3J0KSAmIDB4ZjA7Ci0JcWNhbV9zZXRfYWNrKHFjYW0sIDEpOwotCWlmIChxY2FtX2F3YWl0X3JlYWR5MShxY2FtLCAwKSkKLQkJcmV0dXJuIC0xOwotCWlkYXRhIHw9IHBhcnBvcnRfcmVhZF9zdGF0dXMocWNhbS0+cHBvcnQpID4+IDQ7Ci0JcmV0dXJuIGlkYXRhOwotfQotCi1zdGF0aWMgaW50IHFjYW1fd3JpdGVfZGF0YShzdHJ1Y3QgcWNhbSAqcWNhbSwgdW5zaWduZWQgaW50IGRhdGEpCi17Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZxY2FtLT52NGwyX2RldjsKLQl1bnNpZ25lZCBpbnQgaWRhdGE7Ci0KLQlwYXJwb3J0X3dyaXRlX2RhdGEocWNhbS0+cHBvcnQsIGRhdGEpOwotCWlkYXRhID0gcWNhbV9yZWFkX2RhdGEocWNhbSk7Ci0JaWYgKGRhdGEgIT0gaWRhdGEpIHsKLQkJdjRsMl93YXJuKHY0bDJfZGV2LCAic2VudCAleCBidXQgcmVjZWl2ZWQgJXhcbiIsIGRhdGEsCi0JCSAgICAgICBpZGF0YSk7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcWNhbV9zZXQoc3RydWN0IHFjYW0gKnFjYW0sIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGludCBkYXRhKQotewotCWlmIChxY2FtX3dyaXRlX2RhdGEocWNhbSwgY21kKSkKLQkJcmV0dXJuIC0xOwotCWlmIChxY2FtX3dyaXRlX2RhdGEocWNhbSwgZGF0YSkpCi0JCXJldHVybiAtMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcWNhbV9nZXQoc3RydWN0IHFjYW0gKnFjYW0sIHVuc2lnbmVkIGludCBjbWQpCi17Ci0JaWYgKHFjYW1fd3JpdGVfZGF0YShxY2FtLCBjbWQpKQotCQlyZXR1cm4gLTE7Ci0JcmV0dXJuIHFjYW1fcmVhZF9kYXRhKHFjYW0pOwotfQotCi1zdGF0aWMgaW50IHFjX2RldGVjdChzdHJ1Y3QgcWNhbSAqcWNhbSkKLXsKLQl1bnNpZ25lZCBpbnQgc3RhdCwgb3N0YXQsIGksIGNvdW50ID0gMDsKLQotCS8qIFRoZSBwcm9iZSByb3V0aW5lIGJlbG93IGlzIG5vdCB2ZXJ5IHJlbGlhYmxlLiAgVGhlIElFRUUtMTI4NAotCSAgIHByb2JlIHRha2VzIHByZWNlZGVuY2UuICovCi0JLyogWFhYIEN1cnJlbnRseSBwYXJwb3J0IHByb3ZpZGVzIG5vIHdheSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuCi0JICAgInRoZSBJRUVFIHByb2JlIHdhcyBub3QgZG9uZSIgYW5kICJ0aGUgcHJvYmUgd2FzIGRvbmUsIGJ1dAotCSAgIG5vIGRldmljZSB3YXMgZm91bmQiLiAgRml4IHRoaXMgb25lIGRheS4gKi8KLQlpZiAocWNhbS0+cHBvcnQtPnByb2JlX2luZm9bMF0uY2xhc3MgPT0gUEFSUE9SVF9DTEFTU19NRURJQQotCSAgICAmJiBxY2FtLT5wcG9ydC0+cHJvYmVfaW5mb1swXS5tb2RlbAotCSAgICAmJiAhc3RyY21wKHFjYW0tPnBkZXYtPnBvcnQtPnByb2JlX2luZm9bMF0ubW9kZWwsCi0JCSAgICAgICAiQ29sb3IgUXVpY2tDYW0gMi4wIikpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlF1aWNrQ2FtOiBGb3VuZCBieSBJRUVFMTI4NCBwcm9iZS5cbiIpOwotCQlyZXR1cm4gMTsKLQl9Ci0KLQlpZiAocHJvYmUgPCAyKQotCQlyZXR1cm4gMDsKLQotCXBhcnBvcnRfd3JpdGVfY29udHJvbChxY2FtLT5wcG9ydCwgMHhjKTsKLQotCS8qIGxvb2sgZm9yIGEgaGVhcnRiZWF0ICovCi0Jb3N0YXQgPSBzdGF0ID0gcGFycG9ydF9yZWFkX3N0YXR1cyhxY2FtLT5wcG9ydCk7Ci0JZm9yIChpID0gMDsgaSA8IDI1MDsgaSsrKSB7Ci0JCW1kZWxheSgxKTsKLQkJc3RhdCA9IHBhcnBvcnRfcmVhZF9zdGF0dXMocWNhbS0+cHBvcnQpOwotCQlpZiAob3N0YXQgIT0gc3RhdCkgewotCQkJaWYgKCsrY291bnQgPj0gMykKLQkJCQlyZXR1cm4gMTsKLQkJCW9zdGF0ID0gc3RhdDsKLQkJfQotCX0KLQotCS8qIFJlc2V0IHRoZSBjYW1lcmEgYW5kIHRyeSBhZ2FpbiAqLwotCXBhcnBvcnRfd3JpdGVfY29udHJvbChxY2FtLT5wcG9ydCwgMHhjKTsKLQlwYXJwb3J0X3dyaXRlX2NvbnRyb2wocWNhbS0+cHBvcnQsIDB4OCk7Ci0JbWRlbGF5KDEpOwotCXBhcnBvcnRfd3JpdGVfY29udHJvbChxY2FtLT5wcG9ydCwgMHhjKTsKLQltZGVsYXkoMSk7Ci0JY291bnQgPSAwOwotCi0Jb3N0YXQgPSBzdGF0ID0gcGFycG9ydF9yZWFkX3N0YXR1cyhxY2FtLT5wcG9ydCk7Ci0JZm9yIChpID0gMDsgaSA8IDI1MDsgaSsrKSB7Ci0JCW1kZWxheSgxKTsKLQkJc3RhdCA9IHBhcnBvcnRfcmVhZF9zdGF0dXMocWNhbS0+cHBvcnQpOwotCQlpZiAob3N0YXQgIT0gc3RhdCkgewotCQkJaWYgKCsrY291bnQgPj0gMykKLQkJCQlyZXR1cm4gMTsKLQkJCW9zdGF0ID0gc3RhdDsKLQkJfQotCX0KLQotCS8qIG5vIChvciBmbGF0bGluZSkgY2FtZXJhLCBnaXZlIHVwICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHFjX3Jlc2V0KHN0cnVjdCBxY2FtICpxY2FtKQotewotCXBhcnBvcnRfd3JpdGVfY29udHJvbChxY2FtLT5wcG9ydCwgMHhjKTsKLQlwYXJwb3J0X3dyaXRlX2NvbnRyb2wocWNhbS0+cHBvcnQsIDB4OCk7Ci0JbWRlbGF5KDEpOwotCXBhcnBvcnRfd3JpdGVfY29udHJvbChxY2FtLT5wcG9ydCwgMHhjKTsKLQltZGVsYXkoMSk7Ci19Ci0KLS8qIFJlc2V0IHRoZSBRdWlja0NhbSBhbmQgcHJvZ3JhbSBmb3IgYnJpZ2h0bmVzcywgY29udHJhc3QsCi0gKiB3aGl0ZS1iYWxhbmNlLCBhbmQgcmVzb2x1dGlvbi4gKi8KLQotc3RhdGljIHZvaWQgcWNfc2V0dXAoc3RydWN0IHFjYW0gKnFjYW0pCi17Ci0JcWNfcmVzZXQocWNhbSk7Ci0KLQkvKiBTZXQgdGhlIGJyaWdodG5lc3MuICovCi0JcWNhbV9zZXQocWNhbSwgMTEsIHFjYW0tPmJyaWdodG5lc3MpOwotCi0JLyogU2V0IHRoZSBoZWlnaHQgYW5kIHdpZHRoLiAgVGhlc2UgcmVmZXIgdG8gdGhlIGFjdHVhbAotCSAgIENDRCBhcmVhICpiZWZvcmUqIGFwcGx5aW5nIHRoZSBzZWxlY3RlZCBkZWNpbWF0aW9uLiAgKi8KLQlxY2FtX3NldChxY2FtLCAxNywgcWNhbS0+Y2NkX2hlaWdodCk7Ci0JcWNhbV9zZXQocWNhbSwgMTksIHFjYW0tPmNjZF93aWR0aCAvIDIpOwotCi0JLyogU2V0IHRvcCBhbmQgbGVmdC4gICovCi0JcWNhbV9zZXQocWNhbSwgMHhkLCBxY2FtLT50b3ApOwotCXFjYW1fc2V0KHFjYW0sIDB4ZiwgcWNhbS0+bGVmdCk7Ci0KLQkvKiBTZXQgY29udHJhc3QgYW5kIHdoaXRlIGJhbGFuY2UuICAqLwotCXFjYW1fc2V0KHFjYW0sIDB4MTksIHFjYW0tPmNvbnRyYXN0KTsKLQlxY2FtX3NldChxY2FtLCAweDFmLCBxY2FtLT53aGl0ZWJhbCk7Ci0KLQkvKiBTZXQgdGhlIHNwZWVkLiAgKi8KLQlxY2FtX3NldChxY2FtLCA0NSwgMik7Ci19Ci0KLS8qIFJlYWQgc29tZSBieXRlcyBmcm9tIHRoZSBjYW1lcmEgYW5kIHB1dCB0aGVtIGluIHRoZSBidWZmZXIuCi0gICBuYnl0ZXMgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgMywgYmVjYXVzZSBiaWRpcmVjdGlvbmFsIG1vZGUgZ2l2ZXMKLSAgIHVzIHRocmVlIGJ5dGVzIGF0IGEgdGltZS4gICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcWNhbV9yZWFkX2J5dGVzKHN0cnVjdCBxY2FtICpxY2FtLCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBuYnl0ZXMpCi17Ci0JdW5zaWduZWQgaW50IGJ5dGVzID0gMDsKLQotCXFjYW1fc2V0X2FjayhxY2FtLCAwKTsKLQlpZiAocWNhbS0+YmlkaXJlY3Rpb25hbCkgewotCQkvKiBJdCdzIGEgYmlkaXJlY3Rpb25hbCBwb3J0ICovCi0JCXdoaWxlIChieXRlcyA8IG5ieXRlcykgewotCQkJdW5zaWduZWQgaW50IGxvMSwgaGkxLCBsbzIsIGhpMjsKLQkJCXVuc2lnbmVkIGNoYXIgciwgZywgYjsKLQotCQkJaWYgKHFjYW1fYXdhaXRfcmVhZHkyKHFjYW0sIDEpKQotCQkJCXJldHVybiBieXRlczsKLQkJCWxvMSA9IHBhcnBvcnRfcmVhZF9kYXRhKHFjYW0tPnBwb3J0KSA+PiAxOwotCQkJaGkxID0gKChwYXJwb3J0X3JlYWRfc3RhdHVzKHFjYW0tPnBwb3J0KSA+PiAzKSAmIDB4MWYpIF4gMHgxMDsKLQkJCXFjYW1fc2V0X2FjayhxY2FtLCAxKTsKLQkJCWlmIChxY2FtX2F3YWl0X3JlYWR5MihxY2FtLCAwKSkKLQkJCQlyZXR1cm4gYnl0ZXM7Ci0JCQlsbzIgPSBwYXJwb3J0X3JlYWRfZGF0YShxY2FtLT5wcG9ydCkgPj4gMTsKLQkJCWhpMiA9ICgocGFycG9ydF9yZWFkX3N0YXR1cyhxY2FtLT5wcG9ydCkgPj4gMykgJiAweDFmKSBeIDB4MTA7Ci0JCQlxY2FtX3NldF9hY2socWNhbSwgMCk7Ci0JCQlyID0gbG8xIHwgKChoaTEgJiAxKSA8PCA3KTsKLQkJCWcgPSAoKGhpMSAmIDB4MWUpIDw8IDMpIHwgKChoaTIgJiAweDFlKSA+PiAxKTsKLQkJCWIgPSBsbzIgfCAoKGhpMiAmIDEpIDw8IDcpOwotCQkJaWYgKGZvcmNlX3JnYikgewotCQkJCWJ1ZltieXRlcysrXSA9IHI7Ci0JCQkJYnVmW2J5dGVzKytdID0gZzsKLQkJCQlidWZbYnl0ZXMrK10gPSBiOwotCQkJfSBlbHNlIHsKLQkJCQlidWZbYnl0ZXMrK10gPSBiOwotCQkJCWJ1ZltieXRlcysrXSA9IGc7Ci0JCQkJYnVmW2J5dGVzKytdID0gcjsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCS8qIEl0J3MgYSB1bmlkaXJlY3Rpb25hbCBwb3J0ICovCi0JCWludCBpID0gMCwgbiA9IGJ5dGVzOwotCQl1bnNpZ25lZCBjaGFyIHJnYlszXTsKLQotCQl3aGlsZSAoYnl0ZXMgPCBuYnl0ZXMpIHsKLQkJCXVuc2lnbmVkIGludCBoaSwgbG87Ci0KLQkJCWlmIChxY2FtX2F3YWl0X3JlYWR5MShxY2FtLCAxKSkKLQkJCQlyZXR1cm4gYnl0ZXM7Ci0JCQloaSA9IChwYXJwb3J0X3JlYWRfc3RhdHVzKHFjYW0tPnBwb3J0KSAmIDB4ZjApOwotCQkJcWNhbV9zZXRfYWNrKHFjYW0sIDEpOwotCQkJaWYgKHFjYW1fYXdhaXRfcmVhZHkxKHFjYW0sIDApKQotCQkJCXJldHVybiBieXRlczsKLQkJCWxvID0gKHBhcnBvcnRfcmVhZF9zdGF0dXMocWNhbS0+cHBvcnQpICYgMHhmMCk7Ci0JCQlxY2FtX3NldF9hY2socWNhbSwgMCk7Ci0JCQkvKiBmbGlwIHNvbWUgYml0cyAqLwotCQkJcmdiWyhpID0gYnl0ZXMrKyAlIDMpXSA9IChoaSB8IChsbyA+PiA0KSkgXiAweDg4OwotCQkJaWYgKGkgPj0gMikgewotZ2V0X2ZyYWdtZW50OgotCQkJCWlmIChmb3JjZV9yZ2IpIHsKLQkJCQkJYnVmW24rK10gPSByZ2JbMF07Ci0JCQkJCWJ1ZltuKytdID0gcmdiWzFdOwotCQkJCQlidWZbbisrXSA9IHJnYlsyXTsKLQkJCQl9IGVsc2UgewotCQkJCQlidWZbbisrXSA9IHJnYlsyXTsKLQkJCQkJYnVmW24rK10gPSByZ2JbMV07Ci0JCQkJCWJ1ZltuKytdID0gcmdiWzBdOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAoaSkgewotCQkJaSA9IDA7Ci0JCQlnb3RvIGdldF9mcmFnbWVudDsKLQkJfQotCX0KLQlyZXR1cm4gYnl0ZXM7Ci19Ci0KLSNkZWZpbmUgQlVGU1oJMTUwCi0KLXN0YXRpYyBsb25nIHFjX2NhcHR1cmUoc3RydWN0IHFjYW0gKnFjYW0sIGNoYXIgX191c2VyICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuKQotewotCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmcWNhbS0+djRsMl9kZXY7Ci0JdW5zaWduZWQgbGluZXMsIHBpeGVsc3BlcmxpbmU7Ci0JdW5zaWduZWQgaW50IGlzX2JpX2RpciA9IHFjYW0tPmJpZGlyZWN0aW9uYWw7Ci0Jc2l6ZV90IHdhbnRsZW4sIG91dHB0ciA9IDA7Ci0JY2hhciB0bXBidWZbQlVGU1pdOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWYsIGxlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JLyogV2FpdCBmb3IgY2FtZXJhIHRvIGJlY29tZSByZWFkeSAqLwotCWZvciAoOzspIHsKLQkJaW50IGkgPSBxY2FtX2dldChxY2FtLCA0MSk7Ci0KLQkJaWYgKGkgPT0gLTEpIHsKLQkJCXFjX3NldHVwKHFjYW0pOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJaWYgKChpICYgMHg4MCkgPT0gMCkKLQkJCWJyZWFrOwotCQlzY2hlZHVsZSgpOwotCX0KLQotCWlmIChxY2FtX3NldChxY2FtLCA3LCAocWNhbS0+bW9kZSB8IChpc19iaV9kaXIgPyAxIDogMCkpICsgMSkpCi0JCXJldHVybiAtRUlPOwotCi0JbGluZXMgPSBxY2FtLT5oZWlnaHQ7Ci0JcGl4ZWxzcGVybGluZSA9IHFjYW0tPndpZHRoOwotCi0JaWYgKGlzX2JpX2RpcikgewotCQkvKiBUdXJuIHRoZSBwb3J0IGFyb3VuZCAqLwotCQlwYXJwb3J0X2RhdGFfcmV2ZXJzZShxY2FtLT5wcG9ydCk7Ci0JCW1kZWxheSgzKTsKLQkJcWNhbV9zZXRfYWNrKHFjYW0sIDApOwotCQlpZiAocWNhbV9hd2FpdF9yZWFkeTEocWNhbSwgMSkpIHsKLQkJCXFjX3NldHVwKHFjYW0pOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQkJcWNhbV9zZXRfYWNrKHFjYW0sIDEpOwotCQlpZiAocWNhbV9hd2FpdF9yZWFkeTEocWNhbSwgMCkpIHsKLQkJCXFjX3NldHVwKHFjYW0pOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQl9Ci0KLQl3YW50bGVuID0gbGluZXMgKiBwaXhlbHNwZXJsaW5lICogMjQgLyA4OwotCi0Jd2hpbGUgKHdhbnRsZW4pIHsKLQkJc2l6ZV90IHQsIHM7Ci0KLQkJcyA9ICh3YW50bGVuID4gQlVGU1opID8gQlVGU1ogOiB3YW50bGVuOwotCQl0ID0gcWNhbV9yZWFkX2J5dGVzKHFjYW0sIHRtcGJ1Ziwgcyk7Ci0JCWlmIChvdXRwdHIgPCBsZW4pIHsKLQkJCXNpemVfdCBzeiA9IGxlbiAtIG91dHB0cjsKLQotCQkJaWYgKHN6ID4gdCkKLQkJCQlzeiA9IHQ7Ci0JCQlpZiAoX19jb3B5X3RvX3VzZXIoYnVmICsgb3V0cHRyLCB0bXBidWYsIHN6KSkKLQkJCQlicmVhazsKLQkJCW91dHB0ciArPSBzejsKLQkJfQotCQl3YW50bGVuIC09IHQ7Ci0JCWlmICh0IDwgcykKLQkJCWJyZWFrOwotCQljb25kX3Jlc2NoZWQoKTsKLQl9Ci0KLQlsZW4gPSBvdXRwdHI7Ci0KLQlpZiAod2FudGxlbikgewotCQl2NGwyX2Vycih2NGwyX2RldiwgInNob3J0IHJlYWQuXG4iKTsKLQkJaWYgKGlzX2JpX2RpcikKLQkJCXBhcnBvcnRfZGF0YV9mb3J3YXJkKHFjYW0tPnBwb3J0KTsKLQkJcWNfc2V0dXAocWNhbSk7Ci0JCXJldHVybiBsZW47Ci0JfQotCi0JaWYgKGlzX2JpX2RpcikgewotCQlpbnQgbDsKLQotCQlkbyB7Ci0JCQlsID0gcWNhbV9yZWFkX2J5dGVzKHFjYW0sIHRtcGJ1ZiwgMyk7Ci0JCQljb25kX3Jlc2NoZWQoKTsKLQkJfSB3aGlsZSAobCAmJiAodG1wYnVmWzBdID09IDB4N2UgfHwgdG1wYnVmWzFdID09IDB4N2UgfHwgdG1wYnVmWzJdID09IDB4N2UpKTsKLQkJaWYgKGZvcmNlX3JnYikgewotCQkJaWYgKHRtcGJ1ZlswXSAhPSAweGUgfHwgdG1wYnVmWzFdICE9IDB4MCB8fCB0bXBidWZbMl0gIT0gMHhmKQotCQkJCXY0bDJfZXJyKHY0bDJfZGV2LCAiYmFkIEVPRlxuIik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAodG1wYnVmWzBdICE9IDB4ZiB8fCB0bXBidWZbMV0gIT0gMHgwIHx8IHRtcGJ1ZlsyXSAhPSAweGUpCi0JCQkJdjRsMl9lcnIodjRsMl9kZXYsICJiYWQgRU9GXG4iKTsKLQkJfQotCQlxY2FtX3NldF9hY2socWNhbSwgMCk7Ci0JCWlmIChxY2FtX2F3YWl0X3JlYWR5MShxY2FtLCAxKSkgewotCQkJdjRsMl9lcnIodjRsMl9kZXYsICJubyBhY2sgYWZ0ZXIgRU9GXG4iKTsKLQkJCXBhcnBvcnRfZGF0YV9mb3J3YXJkKHFjYW0tPnBwb3J0KTsKLQkJCXFjX3NldHVwKHFjYW0pOwotCQkJcmV0dXJuIGxlbjsKLQkJfQotCQlwYXJwb3J0X2RhdGFfZm9yd2FyZChxY2FtLT5wcG9ydCk7Ci0JCW1kZWxheSgzKTsKLQkJcWNhbV9zZXRfYWNrKHFjYW0sIDEpOwotCQlpZiAocWNhbV9hd2FpdF9yZWFkeTEocWNhbSwgMCkpIHsKLQkJCXY0bDJfZXJyKHY0bDJfZGV2LCAibm8gYWNrIHRvIHBvcnQgdHVybmFyb3VuZFxuIik7Ci0JCQlxY19zZXR1cChxY2FtKTsKLQkJCXJldHVybiBsZW47Ci0JCX0KLQl9IGVsc2UgewotCQlpbnQgbDsKLQotCQlkbyB7Ci0JCQlsID0gcWNhbV9yZWFkX2J5dGVzKHFjYW0sIHRtcGJ1ZiwgMSk7Ci0JCQljb25kX3Jlc2NoZWQoKTsKLQkJfSB3aGlsZSAobCAmJiB0bXBidWZbMF0gPT0gMHg3ZSk7Ci0JCWwgPSBxY2FtX3JlYWRfYnl0ZXMocWNhbSwgdG1wYnVmICsgMSwgMik7Ci0JCWlmIChmb3JjZV9yZ2IpIHsKLQkJCWlmICh0bXBidWZbMF0gIT0gMHhlIHx8IHRtcGJ1ZlsxXSAhPSAweDAgfHwgdG1wYnVmWzJdICE9IDB4ZikKLQkJCQl2NGwyX2Vycih2NGwyX2RldiwgImJhZCBFT0ZcbiIpOwotCQl9IGVsc2UgewotCQkJaWYgKHRtcGJ1ZlswXSAhPSAweGYgfHwgdG1wYnVmWzFdICE9IDB4MCB8fCB0bXBidWZbMl0gIT0gMHhlKQotCQkJCXY0bDJfZXJyKHY0bDJfZGV2LCAiYmFkIEVPRlxuIik7Ci0JCX0KLQl9Ci0KLQlxY2FtX3dyaXRlX2RhdGEocWNhbSwgMCk7Ci0JcmV0dXJuIGxlbjsKLX0KLQotLyoKLSAqCVZpZGVvNGxpbnV4IGludGVyZmFjaW5nCi0gKi8KLQotc3RhdGljIGludCBxY2FtX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdmNhcCkKLXsKLQlzdHJ1Y3QgcWNhbSAqcWNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlzdHJsY3B5KHZjYXAtPmRyaXZlciwgcWNhbS0+djRsMl9kZXYubmFtZSwgc2l6ZW9mKHZjYXAtPmRyaXZlcikpOwotCXN0cmxjcHkodmNhcC0+Y2FyZCwgIkNvbG9yIFF1aWNrY2FtIiwgc2l6ZW9mKHZjYXAtPmNhcmQpKTsKLQlzdHJsY3B5KHZjYXAtPmJ1c19pbmZvLCAicGFycG9ydCIsIHNpemVvZih2Y2FwLT5idXNfaW5mbykpOwotCXZjYXAtPmRldmljZV9jYXBzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1JFQURXUklURTsKLQl2Y2FwLT5jYXBhYmlsaXRpZXMgPSB2Y2FwLT5kZXZpY2VfY2FwcyB8IFY0TDJfQ0FQX0RFVklDRV9DQVBTOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHFjYW1fZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2lucHV0ICp2aW4pCi17Ci0JaWYgKHZpbi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzdHJsY3B5KHZpbi0+bmFtZSwgIkNhbWVyYSIsIHNpemVvZih2aW4tPm5hbWUpKTsKLQl2aW4tPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwotCXZpbi0+YXVkaW9zZXQgPSAwOwotCXZpbi0+dHVuZXIgPSAwOwotCXZpbi0+c3RkID0gMDsKLQl2aW4tPnN0YXR1cyA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcWNhbV9nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50ICppbnApCi17Ci0JKmlucCA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcWNhbV9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGlucCkKLXsKLQlyZXR1cm4gKGlucCA+IDApID8gLUVJTlZBTCA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgcWNhbV9nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCi17Ci0Jc3RydWN0IHFjYW0gKnFjYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmbXQtPmZtdC5waXg7Ci0KLQlwaXgtPndpZHRoID0gcWNhbS0+d2lkdGg7Ci0JcGl4LT5oZWlnaHQgPSBxY2FtLT5oZWlnaHQ7Ci0JcGl4LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9SR0IyNDsKLQlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOwotCXBpeC0+Ynl0ZXNwZXJsaW5lID0gMyAqIHFjYW0tPndpZHRoOwotCXBpeC0+c2l6ZWltYWdlID0gMyAqIHFjYW0tPndpZHRoICogcWNhbS0+aGVpZ2h0OwotCS8qIEp1c3QgYSBndWVzcyAqLwotCXBpeC0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHFjYW1fdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCi17Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmZtdC0+Zm10LnBpeDsKLQotCWlmIChwaXgtPmhlaWdodCA8IDYwIHx8IHBpeC0+d2lkdGggPCA4MCkgewotCQlwaXgtPmhlaWdodCA9IDYwOwotCQlwaXgtPndpZHRoID0gODA7Ci0JfSBlbHNlIGlmIChwaXgtPmhlaWdodCA8IDEyMCB8fCBwaXgtPndpZHRoIDwgMTYwKSB7Ci0JCXBpeC0+aGVpZ2h0ID0gMTIwOwotCQlwaXgtPndpZHRoID0gMTYwOwotCX0gZWxzZSB7Ci0JCXBpeC0+aGVpZ2h0ID0gMjQwOwotCQlwaXgtPndpZHRoID0gMzIwOwotCX0KLQlwaXgtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1JHQjI0OwotCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Ci0JcGl4LT5ieXRlc3BlcmxpbmUgPSAzICogcGl4LT53aWR0aDsKLQlwaXgtPnNpemVpbWFnZSA9IDMgKiBwaXgtPndpZHRoICogcGl4LT5oZWlnaHQ7Ci0JLyogSnVzdCBhIGd1ZXNzICovCi0JcGl4LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcWNhbV9zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCi17Ci0Jc3RydWN0IHFjYW0gKnFjYW0gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmbXQtPmZtdC5waXg7Ci0JaW50IHJldCA9IHFjYW1fdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmbXQpOwotCi0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQlzd2l0Y2ggKHBpeC0+aGVpZ2h0KSB7Ci0JY2FzZSA2MDoKLQkJcWNhbS0+bW9kZSA9IFFDX0RFQ0lNQVRJT05fNDsKLQkJYnJlYWs7Ci0JY2FzZSAxMjA6Ci0JCXFjYW0tPm1vZGUgPSBRQ19ERUNJTUFUSU9OXzI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXFjYW0tPm1vZGUgPSBRQ19ERUNJTUFUSU9OXzE7Ci0JCWJyZWFrOwotCX0KLQotCW11dGV4X2xvY2soJnFjYW0tPmxvY2spOwotCXFjYW0tPm1vZGUgfD0gUUNfTUlMTElPTlM7Ci0JcWNhbS0+aGVpZ2h0ID0gcGl4LT5oZWlnaHQ7Ci0JcWNhbS0+d2lkdGggPSBwaXgtPndpZHRoOwotCXBhcnBvcnRfY2xhaW1fb3JfYmxvY2socWNhbS0+cGRldik7Ci0JcWNfc2V0dXAocWNhbSk7Ci0JcGFycG9ydF9yZWxlYXNlKHFjYW0tPnBkZXYpOwotCW11dGV4X3VubG9jaygmcWNhbS0+bG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcWNhbV9lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10KQotewotCXN0YXRpYyBzdHJ1Y3QgdjRsMl9mbXRkZXNjIGZvcm1hdHNbXSA9IHsKLQkJeyAwLCAwLCAwLAotCQkgICJSR0IgODo4OjgiLCBWNEwyX1BJWF9GTVRfUkdCMjQsCi0JCSAgeyAwLCAwLCAwLCAwIH0KLQkJfSwKLQl9OwotCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gZm10LT50eXBlOwotCi0JaWYgKGZtdC0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCSpmbXQgPSBmb3JtYXRzW2ZtdC0+aW5kZXhdOwotCWZtdC0+dHlwZSA9IHR5cGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHFjYW1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgcWNhbSAqcWNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IGxlbjsKLQotCW11dGV4X2xvY2soJnFjYW0tPmxvY2spOwotCXBhcnBvcnRfY2xhaW1fb3JfYmxvY2socWNhbS0+cGRldik7Ci0JLyogUHJvYmFibHkgc2hvdWxkIGhhdmUgYSBzZW1hcGhvcmUgYWdhaW5zdCBtdWx0aXBsZSB1c2VycyAqLwotCWxlbiA9IHFjX2NhcHR1cmUocWNhbSwgYnVmLCBjb3VudCk7Ci0JcGFycG9ydF9yZWxlYXNlKHFjYW0tPnBkZXYpOwotCW11dGV4X3VubG9jaygmcWNhbS0+bG9jayk7Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIGludCBxY2FtX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQotewotCXN0cnVjdCBxY2FtICpxY2FtID0KLQkJY29udGFpbmVyX29mKGN0cmwtPmhhbmRsZXIsIHN0cnVjdCBxY2FtLCBoZGwpOwotCWludCByZXQgPSAwOwotCi0JbXV0ZXhfbG9jaygmcWNhbS0+bG9jayk7Ci0Jc3dpdGNoIChjdHJsLT5pZCkgewotCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJcWNhbS0+YnJpZ2h0bmVzcyA9IGN0cmwtPnZhbDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJcWNhbS0+Y29udHJhc3QgPSBjdHJsLT52YWw7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfR0FNTUE6Ci0JCXFjYW0tPndoaXRlYmFsID0gY3RybC0+dmFsOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0JaWYgKHJldCA9PSAwKSB7Ci0JCXBhcnBvcnRfY2xhaW1fb3JfYmxvY2socWNhbS0+cGRldik7Ci0JCXFjX3NldHVwKHFjYW0pOwotCQlwYXJwb3J0X3JlbGVhc2UocWNhbS0+cGRldik7Ci0JfQotCW11dGV4X3VubG9jaygmcWNhbS0+bG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBxY2FtX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHY0bDJfZmhfb3BlbiwKLQkucmVsZWFzZQk9IHY0bDJfZmhfcmVsZWFzZSwKLQkucG9sbAkJPSB2NGwyX2N0cmxfcG9sbCwKLQkudW5sb2NrZWRfaW9jdGwJPSB2aWRlb19pb2N0bDIsCi0JLnJlYWQJCT0gcWNhbV9yZWFkLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBxY2FtX2lvY3RsX29wcyA9IHsKLQkudmlkaW9jX3F1ZXJ5Y2FwICAgIAkJICAgID0gcWNhbV9xdWVyeWNhcCwKLQkudmlkaW9jX2dfaW5wdXQgICAgICAJCSAgICA9IHFjYW1fZ19pbnB1dCwKLQkudmlkaW9jX3NfaW5wdXQgICAgICAJCSAgICA9IHFjYW1fc19pbnB1dCwKLQkudmlkaW9jX2VudW1faW5wdXQgICAJCSAgICA9IHFjYW1fZW51bV9pbnB1dCwKLQkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAJICAgID0gcWNhbV9lbnVtX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAJCSAgICA9IHFjYW1fZ19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3NfZm10X3ZpZF9jYXAgIAkJICAgID0gcWNhbV9zX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAJICAgID0gcWNhbV90cnlfZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19sb2dfc3RhdHVzCQkgICAgPSB2NGwyX2N0cmxfbG9nX3N0YXR1cywKLQkudmlkaW9jX3N1YnNjcmliZV9ldmVudAkJICAgID0gdjRsMl9jdHJsX3N1YnNjcmliZV9ldmVudCwKLQkudmlkaW9jX3Vuc3Vic2NyaWJlX2V2ZW50CSAgICA9IHY0bDJfZXZlbnRfdW5zdWJzY3JpYmUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgcWNhbV9jdHJsX29wcyA9IHsKLQkuc19jdHJsID0gcWNhbV9zX2N0cmwsCi19OwotCi0vKiBJbml0aWFsaXplIHRoZSBRdWlja0NhbSBkcml2ZXIgY29udHJvbCBzdHJ1Y3R1cmUuICovCi0KLXN0YXRpYyBzdHJ1Y3QgcWNhbSAqcWNhbV9pbml0KHN0cnVjdCBwYXJwb3J0ICpwb3J0KQotewotCXN0cnVjdCBxY2FtICpxY2FtOwotCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXY7Ci0KLQlxY2FtID0ga3phbGxvYyhzaXplb2YoKnFjYW0pLCBHRlBfS0VSTkVMKTsKLQlpZiAocWNhbSA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCXY0bDJfZGV2ID0gJnFjYW0tPnY0bDJfZGV2OwotCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJjLXFjYW0iLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKLQotCWlmICh2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2RldikgPCAwKSB7Ci0JCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKLQkJa2ZyZWUocWNhbSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXY0bDJfY3RybF9oYW5kbGVyX2luaXQoJnFjYW0tPmhkbCwgMyk7Ci0JdjRsMl9jdHJsX25ld19zdGQoJnFjYW0tPmhkbCwgJnFjYW1fY3RybF9vcHMsCi0JCQkgIFY0TDJfQ0lEX0JSSUdIVE5FU1MsIDAsIDI1NSwgMSwgMjQwKTsKLQl2NGwyX2N0cmxfbmV3X3N0ZCgmcWNhbS0+aGRsLCAmcWNhbV9jdHJsX29wcywKLQkJCSAgVjRMMl9DSURfQ09OVFJBU1QsIDAsIDI1NSwgMSwgMTkyKTsKLQl2NGwyX2N0cmxfbmV3X3N0ZCgmcWNhbS0+aGRsLCAmcWNhbV9jdHJsX29wcywKLQkJCSAgVjRMMl9DSURfR0FNTUEsIDAsIDI1NSwgMSwgMTI4KTsKLQlpZiAocWNhbS0+aGRsLmVycm9yKSB7Ci0JCXY0bDJfZXJyKHY0bDJfZGV2LCAiY291bGRuJ3QgcmVnaXN0ZXIgY29udHJvbHNcbiIpOwotCQl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZxY2FtLT5oZGwpOwotCQlrZnJlZShxY2FtKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcWNhbS0+cHBvcnQgPSBwb3J0OwotCXFjYW0tPnBkZXYgPSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShwb3J0LCAiYy1xY2FtIiwgTlVMTCwgTlVMTCwKLQkJCQkJICBOVUxMLCAwLCBOVUxMKTsKLQotCXFjYW0tPmJpZGlyZWN0aW9uYWwgPSAocWNhbS0+cHBvcnQtPm1vZGVzICYgUEFSUE9SVF9NT0RFX1RSSVNUQVRFKSA/IDEgOiAwOwotCi0JaWYgKHFjYW0tPnBkZXYgPT0gTlVMTCkgewotCQl2NGwyX2Vycih2NGwyX2RldiwgImNvdWxkbid0IHJlZ2lzdGVyIGZvciAlcy5cbiIsIHBvcnQtPm5hbWUpOwotCQl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZxY2FtLT5oZGwpOwotCQlrZnJlZShxY2FtKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0Jc3RybGNweShxY2FtLT52ZGV2Lm5hbWUsICJDb2xvdXIgUXVpY2tDYW0iLCBzaXplb2YocWNhbS0+dmRldi5uYW1lKSk7Ci0JcWNhbS0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OwotCXFjYW0tPnZkZXYuZm9wcyA9ICZxY2FtX2ZvcHM7Ci0JcWNhbS0+dmRldi5pb2N0bF9vcHMgPSAmcWNhbV9pb2N0bF9vcHM7Ci0JcWNhbS0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7Ci0JcWNhbS0+dmRldi5jdHJsX2hhbmRsZXIgPSAmcWNhbS0+aGRsOwotCXZpZGVvX3NldF9kcnZkYXRhKCZxY2FtLT52ZGV2LCBxY2FtKTsKLQotCW11dGV4X2luaXQoJnFjYW0tPmxvY2spOwotCXFjYW0tPndpZHRoID0gcWNhbS0+Y2NkX3dpZHRoID0gMzIwOwotCXFjYW0tPmhlaWdodCA9IHFjYW0tPmNjZF9oZWlnaHQgPSAyNDA7Ci0JcWNhbS0+bW9kZSA9IFFDX01JTExJT05TIHwgUUNfREVDSU1BVElPTl8xOwotCXFjYW0tPmNvbnRyYXN0ID0gMTkyOwotCXFjYW0tPmJyaWdodG5lc3MgPSAyNDA7Ci0JcWNhbS0+d2hpdGViYWwgPSAxMjg7Ci0JcWNhbS0+dG9wID0gMTsKLQlxY2FtLT5sZWZ0ID0gMTQ7Ci0JcmV0dXJuIHFjYW07Ci19Ci0KLXN0YXRpYyBpbnQgaW5pdF9jcWNhbShzdHJ1Y3QgcGFycG9ydCAqcG9ydCkKLXsKLQlzdHJ1Y3QgcWNhbSAqcWNhbTsKLQlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2OwotCi0JaWYgKHBhcnBvcnRbMF0gIT0gLTEpIHsKLQkJLyogVGhlIHVzZXIgZ2F2ZSBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgKi8KLQkJaW50IGksIGZvdW5kID0gMDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NBTVMgJiYgcGFycG9ydFtpXSAhPSAtMTsgaSsrKSB7Ci0JCQlpZiAocGFycG9ydFswXSA9PSBwb3J0LT5udW1iZXIpCi0JCQkJZm91bmQgPSAxOwotCQl9Ci0JCWlmICghZm91bmQpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZiAobnVtX2NhbXMgPT0gTUFYX0NBTVMpCi0JCXJldHVybiAtRU5PU1BDOwotCi0JcWNhbSA9IHFjYW1faW5pdChwb3J0KTsKLQlpZiAocWNhbSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXY0bDJfZGV2ID0gJnFjYW0tPnY0bDJfZGV2OwotCi0JcGFycG9ydF9jbGFpbV9vcl9ibG9jayhxY2FtLT5wZGV2KTsKLQotCXFjX3Jlc2V0KHFjYW0pOwotCi0JaWYgKHByb2JlICYmIHFjX2RldGVjdChxY2FtKSA9PSAwKSB7Ci0JCXBhcnBvcnRfcmVsZWFzZShxY2FtLT5wZGV2KTsKLQkJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShxY2FtLT5wZGV2KTsKLQkJa2ZyZWUocWNhbSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXFjX3NldHVwKHFjYW0pOwotCi0JcGFycG9ydF9yZWxlYXNlKHFjYW0tPnBkZXYpOwotCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmcWNhbS0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpIDwgMCkgewotCQl2NGwyX2Vycih2NGwyX2RldiwgIlVuYWJsZSB0byByZWdpc3RlciBDb2xvdXIgUXVpY2tDYW0gb24gJXNcbiIsCi0JCSAgICAgICBxY2FtLT5wcG9ydC0+bmFtZSk7Ci0JCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UocWNhbS0+cGRldik7Ci0JCWtmcmVlKHFjYW0pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQl2NGwyX2luZm8odjRsMl9kZXYsICIlczogQ29sb3VyIFF1aWNrQ2FtIGZvdW5kIG9uICVzXG4iLAotCSAgICAgICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKCZxY2FtLT52ZGV2KSwgcWNhbS0+cHBvcnQtPm5hbWUpOwotCi0JcWNhbXNbbnVtX2NhbXMrK10gPSBxY2FtOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGNsb3NlX2NxY2FtKHN0cnVjdCBxY2FtICpxY2FtKQotewotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZxY2FtLT52ZGV2KTsKLQl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZxY2FtLT5oZGwpOwotCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UocWNhbS0+cGRldik7Ci0Ja2ZyZWUocWNhbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNxX2F0dGFjaChzdHJ1Y3QgcGFycG9ydCAqcG9ydCkKLXsKLQlpbml0X2NxY2FtKHBvcnQpOwotfQotCi1zdGF0aWMgdm9pZCBjcV9kZXRhY2goc3RydWN0IHBhcnBvcnQgKnBvcnQpCi17Ci0JLyogV3JpdGUgdGhpcyBzb21lIGRheS4gKi8KLX0KLQotc3RhdGljIHN0cnVjdCBwYXJwb3J0X2RyaXZlciBjcWNhbV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiY3FjYW0iLAotCS5hdHRhY2ggPSBjcV9hdHRhY2gsCi0JLmRldGFjaCA9IGNxX2RldGFjaCwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNxY2FtX2luaXQodm9pZCkKLXsKLQlwcmludGsoS0VSTl9JTkZPIEJBTk5FUiAiXG4iKTsKLQotCXJldHVybiBwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlcigmY3FjYW1fZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNxY2FtX2NsZWFudXAodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fY2FtczsgaSsrKQotCQljbG9zZV9jcWNhbShxY2Ftc1tpXSk7Ci0KLQlwYXJwb3J0X3VucmVnaXN0ZXJfZHJpdmVyKCZjcWNhbV9kcml2ZXIpOwotfQotCi1NT0RVTEVfQVVUSE9SKCJQaGlsaXAgQmx1bmRlbGwgPHBoaWxiQGdudS5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oQkFOTkVSKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9WRVJTSU9OKCIwLjAuNCIpOwotCi1tb2R1bGVfaW5pdChjcWNhbV9pbml0KTsKLW1vZHVsZV9leGl0KGNxY2FtX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3BhcnBvcnQvcG1zLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvcGFycG9ydC9wbXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTZiNDk3NS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvcGFycG9ydC9wbXMuYworKysgL2Rldi9udWxsCkBAIC0xLDExNTYgKzAsMCBAQAotLyoKLSAqCU1lZGlhIFZpc2lvbiBQcm8gTW92aWUgU3R1ZGlvCi0gKgkJCW9yCi0gKgkiYWxsIHlvdSBuZWVkIGlzIGFuIEkyQyBidXMgc29tZSBSQU0gYW5kIGEgcHJheWVyIgotICoKLSAqCVRoaXMgZHJhd3MgaGVhdmlseSBvbiBjb2RlCi0gKgotICoJKGMpIFdvbGZnYW5nIEtvZWhsZXIsICB3b2xmQGZpcnN0LmdtZC5kZSwgRGVjLiAxOTk0Ci0gKglLaWVmZXJucmluZyAxNQotICoJMTQ0NzggUG90c2RhbSwgR2VybWFueQotICoKLSAqCU1vc3Qgb2YgdGhpcyBjb2RlIGlzIGRpcmVjdGx5IGRlcml2ZWQgZnJvbSBoaXMgdXNlcnNwYWNlIGRyaXZlci4KLSAqCUhpcyBkcml2ZXIgd29ya3Mgc28gc2VuZCBhbnkgcmVwb3J0cyB0byBhbGFuQGx4b3JndWsudWt1dS5vcmcudWsKLSAqCXVubGVzcyB0aGUgdXNlcnNwYWNlIGRyaXZlciBhbHNvIGRvZXNuJ3Qgd29yayBmb3IgeW91Li4uCi0gKgotICogICAgICBDaGFuZ2VzOgotICoJMjUtMTEtMjAwOSAJSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+Ci0gKiAJCQktIGNvbnZlcnRlZCB0byB2ZXJzaW9uIDIgb2YgdGhlIFY0TCBBUEkuCi0gKiAgICAgIDA4LzA3LzIwMDMgICAgICBEYW5pZWxlIEJlbGx1Y2NpIDxiZWxsdWNkYUB0aXNjYWxpLml0PgotICogICAgICAgICAgICAgICAgICAgICAgLSBwbXNfY2FwdHVyZTogcmVwb3J0IGJhY2sgLUVGQVVMVAotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvaXNhLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1maC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItZXZlbnQuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfVkVSU0lPTigiMC4wLjUiKTsKLQotI2RlZmluZSBNT1RPUk9MQQkxCi0jZGVmaW5lIFBISUxJUFMyCTIgICAgICAgICAgICAgICAvKiBTQUE3MTkxICovCi0jZGVmaW5lIFBISUxJUFMxCTMKLSNkZWZpbmUgTVZWTUVNT1JZV0lEVEgJMHg0MAkJLyogNTEyIGJ5dGVzICovCi0KLXN0cnVjdCBpMmNfaW5mbyB7Ci0JdTggc2xhdmU7Ci0JdTggc3ViOwotCXU4IGRhdGE7Ci0JdTggaGl0czsKLX07Ci0KLXN0cnVjdCBwbXMgewotCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7Ci0Jc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGhkbDsKLQlpbnQgaGVpZ2h0OwotCWludCB3aWR0aDsKLQlpbnQgZGVwdGg7Ci0JaW50IGlucHV0OwotCXN0cnVjdCBtdXRleCBsb2NrOwotCWludCBpMmNfY291bnQ7Ci0Jc3RydWN0IGkyY19pbmZvIGkyY2luZm9bNjRdOwotCi0JaW50IGRlY29kZXI7Ci0JaW50IHN0YW5kYXJkOwkvKiAwIC0gYXV0byAxIC0gbnRzYyAyIC0gcGFsIDMgLSBzZWNhbSAqLwotCXY0bDJfc3RkX2lkIHN0ZDsKLQlpbnQgaW87Ci0JaW50IGRhdGE7Ci0Jdm9pZCBfX2lvbWVtICptZW07Ci19OwotCi0vKgotICoJSS9PIHBvcnRzIGFuZCBTaGFyZWQgTWVtb3J5Ci0gKi8KLQotc3RhdGljIGludCBpb19wb3J0ID0gMHgyNTA7Ci1tb2R1bGVfcGFyYW0oaW9fcG9ydCwgaW50LCAwKTsKLQotc3RhdGljIGludCBtZW1fYmFzZSA9IDB4YzgwMDA7Ci1tb2R1bGVfcGFyYW0obWVtX2Jhc2UsIGludCwgMCk7Ci0KLXN0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKLW1vZHVsZV9wYXJhbSh2aWRlb19uciwgaW50LCAwKTsKLQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbXZ2X3dyaXRlKHN0cnVjdCBwbXMgKmRldiwgdTggaW5kZXgsIHU4IHZhbHVlKQotewotCW91dHcoaW5kZXggfCAodmFsdWUgPDwgOCksIGRldi0+aW8pOwotfQotCi1zdGF0aWMgaW5saW5lIHU4IG12dl9yZWFkKHN0cnVjdCBwbXMgKmRldiwgdTggaW5kZXgpCi17Ci0Jb3V0YihpbmRleCwgZGV2LT5pbyk7Ci0JcmV0dXJuIGluYihkZXYtPmRhdGEpOwotfQotCi1zdGF0aWMgaW50IHBtc19pMmNfc3RhdChzdHJ1Y3QgcG1zICpkZXYsIHU4IHNsYXZlKQotewotCWludCBjb3VudGVyID0gMDsKLQlpbnQgaTsKLQotCW91dGIoMHgyOCwgZGV2LT5pbyk7Ci0KLQl3aGlsZSAoKGluYihkZXYtPmRhdGEpICYgMHgwMSkgPT0gMCkKLQkJaWYgKGNvdW50ZXIrKyA9PSAyNTYpCi0JCQlicmVhazsKLQotCXdoaWxlICgoaW5iKGRldi0+ZGF0YSkgJiAweDAxKSAhPSAwKQotCQlpZiAoY291bnRlcisrID09IDI1NikKLQkJCWJyZWFrOwotCi0Jb3V0YihzbGF2ZSwgZGV2LT5pbyk7Ci0KLQljb3VudGVyID0gMDsKLQl3aGlsZSAoKGluYihkZXYtPmRhdGEpICYgMHgwMSkgPT0gMCkKLQkJaWYgKGNvdW50ZXIrKyA9PSAyNTYpCi0JCQlicmVhazsKLQotCXdoaWxlICgoaW5iKGRldi0+ZGF0YSkgJiAweDAxKSAhPSAwKQotCQlpZiAoY291bnRlcisrID09IDI1NikKLQkJCWJyZWFrOwotCi0JZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHsKLQkJY2hhciBzdCA9IGluYihkZXYtPmRhdGEpOwotCi0JCWlmICgoc3QgJiAyKSAhPSAwKQotCQkJcmV0dXJuIC0xOwotCQlpZiAoKHN0ICYgMSkgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQlvdXRiKDB4MjksIGRldi0+aW8pOwotCXJldHVybiBpbmIoZGV2LT5kYXRhKTsKLX0KLQotc3RhdGljIGludCBwbXNfaTJjX3dyaXRlKHN0cnVjdCBwbXMgKmRldiwgdTE2IHNsYXZlLCB1MTYgc3ViLCB1MTYgZGF0YSkKLXsKLQlpbnQgc2tpcCA9IDA7Ci0JaW50IGNvdW50OwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGRldi0+aTJjX2NvdW50OyBpKyspIHsKLQkJaWYgKChkZXYtPmkyY2luZm9baV0uc2xhdmUgPT0gc2xhdmUpICYmCi0JCSAgICAoZGV2LT5pMmNpbmZvW2ldLnN1YiA9PSBzdWIpKSB7Ci0JCQlpZiAoZGV2LT5pMmNpbmZvW2ldLmRhdGEgPT0gZGF0YSkKLQkJCQlza2lwID0gMTsKLQkJCWRldi0+aTJjaW5mb1tpXS5kYXRhID0gZGF0YTsKLQkJCWkgPSBkZXYtPmkyY19jb3VudCArIDE7Ci0JCX0KLQl9Ci0KLQlpZiAoaSA9PSBkZXYtPmkyY19jb3VudCAmJiBkZXYtPmkyY19jb3VudCA8IDY0KSB7Ci0JCWRldi0+aTJjaW5mb1tkZXYtPmkyY19jb3VudF0uc2xhdmUgPSBzbGF2ZTsKLQkJZGV2LT5pMmNpbmZvW2Rldi0+aTJjX2NvdW50XS5zdWIgPSBzdWI7Ci0JCWRldi0+aTJjaW5mb1tkZXYtPmkyY19jb3VudF0uZGF0YSA9IGRhdGE7Ci0JCWRldi0+aTJjX2NvdW50Kys7Ci0JfQotCi0JaWYgKHNraXApCi0JCXJldHVybiAwOwotCi0JbXZ2X3dyaXRlKGRldiwgMHgyOSwgc3ViKTsKLQltdnZfd3JpdGUoZGV2LCAweDJBLCBkYXRhKTsKLQltdnZfd3JpdGUoZGV2LCAweDI4LCBzbGF2ZSk7Ci0KLQlvdXRiKDB4MjgsIGRldi0+aW8pOwotCi0JY291bnQgPSAwOwotCXdoaWxlICgoaW5iKGRldi0+ZGF0YSkgJiAxKSA9PSAwKQotCQlpZiAoY291bnQgPiAyNTUpCi0JCQlicmVhazsKLQl3aGlsZSAoKGluYihkZXYtPmRhdGEpICYgMSkgIT0gMCkKLQkJaWYgKGNvdW50ID4gMjU1KQotCQkJYnJlYWs7Ci0KLQljb3VudCA9IGluYihkZXYtPmRhdGEpOwotCi0JaWYgKGNvdW50ICYgMikKLQkJcmV0dXJuIC0xOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGludCBwbXNfaTJjX3JlYWQoc3RydWN0IHBtcyAqZGV2LCBpbnQgc2xhdmUsIGludCBzdWIpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5pMmNfY291bnQ7IGkrKykgewotCQlpZiAoZGV2LT5pMmNpbmZvW2ldLnNsYXZlID09IHNsYXZlICYmIGRldi0+aTJjaW5mb1tpXS5zdWIgPT0gc3ViKQotCQkJcmV0dXJuIGRldi0+aTJjaW5mb1tpXS5kYXRhOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBwbXNfaTJjX2FuZG9yKHN0cnVjdCBwbXMgKmRldiwgaW50IHNsYXZlLCBpbnQgc3ViLCBpbnQgYW5kLCBpbnQgb3IpCi17Ci0JdTggdG1wOwotCi0JdG1wID0gcG1zX2kyY19yZWFkKGRldiwgc2xhdmUsIHN1Yik7Ci0JdG1wID0gKHRtcCAmIGFuZCkgfCBvcjsKLQlwbXNfaTJjX3dyaXRlKGRldiwgc2xhdmUsIHN1YiwgdG1wKTsKLX0KLQotLyoKLSAqCUNvbnRyb2wgZnVuY3Rpb25zCi0gKi8KLQotCi1zdGF0aWMgdm9pZCBwbXNfdmlkZW9zb3VyY2Uoc3RydWN0IHBtcyAqZGV2LCBzaG9ydCBzb3VyY2UpCi17Ci0Jc3dpdGNoIChkZXYtPmRlY29kZXIpIHsKLQljYXNlIE1PVE9ST0xBOgotCQlicmVhazsKLQljYXNlIFBISUxJUFMyOgotCQlwbXNfaTJjX2FuZG9yKGRldiwgMHg4YSwgMHgwNiwgMHg3Ziwgc291cmNlID8gMHg4MCA6IDApOwotCQlicmVhazsKLQljYXNlIFBISUxJUFMxOgotCQlicmVhazsKLQl9Ci0JbXZ2X3dyaXRlKGRldiwgMHgyRSwgMHgzMSk7Ci0JLyogV2FzOiBtdnZfd3JpdGUoZGV2LCAweDJFLCBzb3VyY2UgPyAweDMxIDogMHgzMCk7Ci0JICAgQnV0IGNvdWxkIG5vdCBtYWtlIHRoaXMgd29yayBjb3JyZWN0bHkuIE9ubHkgQ29tcG9zaXRlIGlucHV0Ci0JICAgd29ya2VkIGZvciBtZS4gKi8KLX0KLQotc3RhdGljIHZvaWQgcG1zX2h1ZShzdHJ1Y3QgcG1zICpkZXYsIHNob3J0IGh1ZSkKLXsKLQlzd2l0Y2ggKGRldi0+ZGVjb2RlcikgewotCWNhc2UgTU9UT1JPTEE6Ci0JCXBtc19pMmNfd3JpdGUoZGV2LCAweDhhLCAweDAwLCBodWUpOwotCQlicmVhazsKLQljYXNlIFBISUxJUFMyOgotCQlwbXNfaTJjX3dyaXRlKGRldiwgMHg4YSwgMHgwNywgaHVlKTsKLQkJYnJlYWs7Ci0JY2FzZSBQSElMSVBTMToKLQkJcG1zX2kyY193cml0ZShkZXYsIDB4NDIsIDB4MDcsIGh1ZSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcG1zX3NhdHVyYXRpb24oc3RydWN0IHBtcyAqZGV2LCBzaG9ydCBzYXQpCi17Ci0Jc3dpdGNoIChkZXYtPmRlY29kZXIpIHsKLQljYXNlIE1PVE9ST0xBOgotCQlwbXNfaTJjX3dyaXRlKGRldiwgMHg4YSwgMHgwMCwgc2F0KTsKLQkJYnJlYWs7Ci0JY2FzZSBQSElMSVBTMToKLQkJcG1zX2kyY193cml0ZShkZXYsIDB4NDIsIDB4MTIsIHNhdCk7Ci0JCWJyZWFrOwotCX0KLX0KLQotCi1zdGF0aWMgdm9pZCBwbXNfY29udHJhc3Qoc3RydWN0IHBtcyAqZGV2LCBzaG9ydCBjb250cmFzdCkKLXsKLQlzd2l0Y2ggKGRldi0+ZGVjb2RlcikgewotCWNhc2UgTU9UT1JPTEE6Ci0JCXBtc19pMmNfd3JpdGUoZGV2LCAweDhhLCAweDAwLCBjb250cmFzdCk7Ci0JCWJyZWFrOwotCWNhc2UgUEhJTElQUzE6Ci0JCXBtc19pMmNfd3JpdGUoZGV2LCAweDQyLCAweDEzLCBjb250cmFzdCk7Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcG1zX2JyaWdodG5lc3Moc3RydWN0IHBtcyAqZGV2LCBzaG9ydCBicmlnaHRuZXNzKQotewotCXN3aXRjaCAoZGV2LT5kZWNvZGVyKSB7Ci0JY2FzZSBNT1RPUk9MQToKLQkJcG1zX2kyY193cml0ZShkZXYsIDB4OGEsIDB4MDAsIGJyaWdodG5lc3MpOwotCQlwbXNfaTJjX3dyaXRlKGRldiwgMHg4YSwgMHgwMCwgYnJpZ2h0bmVzcyk7Ci0JCXBtc19pMmNfd3JpdGUoZGV2LCAweDhhLCAweDAwLCBicmlnaHRuZXNzKTsKLQkJYnJlYWs7Ci0JY2FzZSBQSElMSVBTMToKLQkJcG1zX2kyY193cml0ZShkZXYsIDB4NDIsIDB4MTksIGJyaWdodG5lc3MpOwotCQlicmVhazsKLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQgcG1zX2Zvcm1hdChzdHJ1Y3QgcG1zICpkZXYsIHNob3J0IGZvcm1hdCkKLXsKLQlpbnQgdGFyZ2V0OwotCi0JZGV2LT5zdGFuZGFyZCA9IGZvcm1hdDsKLQotCWlmIChkZXYtPmRlY29kZXIgPT0gUEhJTElQUzEpCi0JCXRhcmdldCA9IDB4NDI7Ci0JZWxzZSBpZiAoZGV2LT5kZWNvZGVyID09IFBISUxJUFMyKQotCQl0YXJnZXQgPSAweDhhOwotCWVsc2UKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChmb3JtYXQpIHsKLQljYXNlIDA6CS8qIEF1dG8gKi8KLQkJcG1zX2kyY19hbmRvcihkZXYsIHRhcmdldCwgMHgwZCwgMHhmZSwgMHgwMCk7Ci0JCXBtc19pMmNfYW5kb3IoZGV2LCB0YXJnZXQsIDB4MGYsIDB4M2YsIDB4ODApOwotCQlicmVhazsKLQljYXNlIDE6IC8qIE5UU0MgKi8KLQkJcG1zX2kyY19hbmRvcihkZXYsIHRhcmdldCwgMHgwZCwgMHhmZSwgMHgwMCk7Ci0JCXBtc19pMmNfYW5kb3IoZGV2LCB0YXJnZXQsIDB4MGYsIDB4M2YsIDB4NDApOwotCQlicmVhazsKLQljYXNlIDI6IC8qIFBBTCAqLwotCQlwbXNfaTJjX2FuZG9yKGRldiwgdGFyZ2V0LCAweDBkLCAweGZlLCAweDAwKTsKLQkJcG1zX2kyY19hbmRvcihkZXYsIHRhcmdldCwgMHgwZiwgMHgzZiwgMHgwMCk7Ci0JCWJyZWFrOwotCWNhc2UgMzoJLyogU0VDQU0gKi8KLQkJcG1zX2kyY19hbmRvcihkZXYsIHRhcmdldCwgMHgwZCwgMHhmZSwgMHgwMSk7Ci0JCXBtc19pMmNfYW5kb3IoZGV2LCB0YXJnZXQsIDB4MGYsIDB4M2YsIDB4MDApOwotCQlicmVhazsKLQl9Ci19Ci0KLSNpZmRlZiBGT1JfRlVUVVJFX0VYUEFOU0lPTgotCi0vKgotICoJVGhlc2UgZmVhdHVyZXMgb2YgdGhlIFBNUyBjYXJkIGFyZSBub3QgY3VycmVudGx5IGV4cG9zZXMuIFRoZXkKLSAqCWNvdWxkIGJlY29tZSBhIHByaXZhdGUgdjRsIGlvY3RsIGZvciBQTVNDT05GSUcgb3Igc29tZXN1Y2ggaWYKLSAqCXBlb3BsZSBuZWVkIGl0LiBXZSBhbHNvIGRvbid0IHlldCB1c2UgdGhlIFBNUyBpbnRlcnJ1cHQuCi0gKi8KLQotc3RhdGljIHZvaWQgcG1zX2hzdGFydChzdHJ1Y3QgcG1zICpkZXYsIHNob3J0IHN0YXJ0KQotewotCXN3aXRjaCAoZGV2LT5kZWNvZGVyKSB7Ci0JY2FzZSBQSElMSVBTMToKLQkJcG1zX2kyY193cml0ZShkZXYsIDB4OGEsIDB4MDUsIHN0YXJ0KTsKLQkJcG1zX2kyY193cml0ZShkZXYsIDB4OGEsIDB4MTgsIHN0YXJ0KTsKLQkJYnJlYWs7Ci0JY2FzZSBQSElMSVBTMjoKLQkJcG1zX2kyY193cml0ZShkZXYsIDB4NDIsIDB4MDUsIHN0YXJ0KTsKLQkJcG1zX2kyY193cml0ZShkZXYsIDB4NDIsIDB4MTgsIHN0YXJ0KTsKLQkJYnJlYWs7Ci0JfQotfQotCi0vKgotICoJQmFuZHBhc3MgZmlsdGVycwotICovCi0KLXN0YXRpYyB2b2lkIHBtc19iYW5kcGFzcyhzdHJ1Y3QgcG1zICpkZXYsIHNob3J0IHBhc3MpCi17Ci0JaWYgKGRldi0+ZGVjb2RlciA9PSBQSElMSVBTMikKLQkJcG1zX2kyY19hbmRvcihkZXYsIDB4OGEsIDB4MDYsIDB4Y2YsIChwYXNzICYgMHgwMykgPDwgNCk7Ci0JZWxzZSBpZiAoZGV2LT5kZWNvZGVyID09IFBISUxJUFMxKQotCQlwbXNfaTJjX2FuZG9yKGRldiwgMHg0MiwgMHgwNiwgMHhjZiwgKHBhc3MgJiAweDAzKSA8PCA0KTsKLX0KLQotc3RhdGljIHZvaWQgcG1zX2FudGlzbm93KHN0cnVjdCBwbXMgKmRldiwgc2hvcnQgc25vdykKLXsKLQlpZiAoZGV2LT5kZWNvZGVyID09IFBISUxJUFMyKQotCQlwbXNfaTJjX2FuZG9yKGRldiwgMHg4YSwgMHgwNiwgMHhmMywgKHNub3cgJiAweDAzKSA8PCAyKTsKLQllbHNlIGlmIChkZXYtPmRlY29kZXIgPT0gUEhJTElQUzEpCi0JCXBtc19pMmNfYW5kb3IoZGV2LCAweDQyLCAweDA2LCAweGYzLCAoc25vdyAmIDB4MDMpIDw8IDIpOwotfQotCi1zdGF0aWMgdm9pZCBwbXNfc2hhcnBuZXNzKHN0cnVjdCBwbXMgKmRldiwgc2hvcnQgc2hhcnApCi17Ci0JaWYgKGRldi0+ZGVjb2RlciA9PSBQSElMSVBTMikKLQkJcG1zX2kyY19hbmRvcihkZXYsIDB4OGEsIDB4MDYsIDB4ZmMsIHNoYXJwICYgMHgwMyk7Ci0JZWxzZSBpZiAoZGV2LT5kZWNvZGVyID09IFBISUxJUFMxKQotCQlwbXNfaTJjX2FuZG9yKGRldiwgMHg0MiwgMHgwNiwgMHhmYywgc2hhcnAgJiAweDAzKTsKLX0KLQotc3RhdGljIHZvaWQgcG1zX2Nocm9tYWFnYyhzdHJ1Y3QgcG1zICpkZXYsIHNob3J0IGFnYykKLXsKLQlpZiAoZGV2LT5kZWNvZGVyID09IFBISUxJUFMyKQotCQlwbXNfaTJjX2FuZG9yKGRldiwgMHg4YSwgMHgwYywgMHg5ZiwgKGFnYyAmIDB4MDMpIDw8IDUpOwotCWVsc2UgaWYgKGRldi0+ZGVjb2RlciA9PSBQSElMSVBTMSkKLQkJcG1zX2kyY19hbmRvcihkZXYsIDB4NDIsIDB4MGMsIDB4OWYsIChhZ2MgJiAweDAzKSA8PCA1KTsKLX0KLQotc3RhdGljIHZvaWQgcG1zX3ZlcnRub2lzZShzdHJ1Y3QgcG1zICpkZXYsIHNob3J0IG5vaXNlKQotewotCWlmIChkZXYtPmRlY29kZXIgPT0gUEhJTElQUzIpCi0JCXBtc19pMmNfYW5kb3IoZGV2LCAweDhhLCAweDEwLCAweGZjLCBub2lzZSAmIDMpOwotCWVsc2UgaWYgKGRldi0+ZGVjb2RlciA9PSBQSElMSVBTMSkKLQkJcG1zX2kyY19hbmRvcihkZXYsIDB4NDIsIDB4MTAsIDB4ZmMsIG5vaXNlICYgMyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBtc19mb3JjZWNvbG91cihzdHJ1Y3QgcG1zICpkZXYsIHNob3J0IGNvbG91cikKLXsKLQlpZiAoZGV2LT5kZWNvZGVyID09IFBISUxJUFMyKQotCQlwbXNfaTJjX2FuZG9yKGRldiwgMHg4YSwgMHgwYywgMHg3ZiwgKGNvbG91ciAmIDEpIDw8IDcpOwotCWVsc2UgaWYgKGRldi0+ZGVjb2RlciA9PSBQSElMSVBTMSkKLQkJcG1zX2kyY19hbmRvcihkZXYsIDB4NDIsIDB4MGMsIDB4NywgKGNvbG91ciAmIDEpIDw8IDcpOwotfQotCi1zdGF0aWMgdm9pZCBwbXNfYW50aWdhbW1hKHN0cnVjdCBwbXMgKmRldiwgc2hvcnQgZ2FtbWEpCi17Ci0JaWYgKGRldi0+ZGVjb2RlciA9PSBQSElMSVBTMikKLQkJcG1zX2kyY19hbmRvcihkZXYsIDB4YjgsIDB4MDAsIDB4N2YsIChnYW1tYSAmIDEpIDw8IDcpOwotCWVsc2UgaWYgKGRldi0+ZGVjb2RlciA9PSBQSElMSVBTMSkKLQkJcG1zX2kyY19hbmRvcihkZXYsIDB4NDIsIDB4MjAsIDB4NywgKGdhbW1hICYgMSkgPDwgNyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBtc19wcmVmaWx0ZXIoc3RydWN0IHBtcyAqZGV2LCBzaG9ydCBmaWx0ZXIpCi17Ci0JaWYgKGRldi0+ZGVjb2RlciA9PSBQSElMSVBTMikKLQkJcG1zX2kyY19hbmRvcihkZXYsIDB4OGEsIDB4MDYsIDB4YmYsIChmaWx0ZXIgJiAxKSA8PCA2KTsKLQllbHNlIGlmIChkZXYtPmRlY29kZXIgPT0gUEhJTElQUzEpCi0JCXBtc19pMmNfYW5kb3IoZGV2LCAweDQyLCAweDA2LCAweGJmLCAoZmlsdGVyICYgMSkgPDwgNik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBtc19oZmlsdGVyKHN0cnVjdCBwbXMgKmRldiwgc2hvcnQgZmlsdGVyKQotewotCWlmIChkZXYtPmRlY29kZXIgPT0gUEhJTElQUzIpCi0JCXBtc19pMmNfYW5kb3IoZGV2LCAweGI4LCAweDA0LCAweDFmLCAoZmlsdGVyICYgNykgPDwgNSk7Ci0JZWxzZSBpZiAoZGV2LT5kZWNvZGVyID09IFBISUxJUFMxKQotCQlwbXNfaTJjX2FuZG9yKGRldiwgMHg0MiwgMHgyNCwgMHgxZiwgKGZpbHRlciAmIDcpIDw8IDUpOwotfQotCi1zdGF0aWMgdm9pZCBwbXNfdmZpbHRlcihzdHJ1Y3QgcG1zICpkZXYsIHNob3J0IGZpbHRlcikKLXsKLQlpZiAoZGV2LT5kZWNvZGVyID09IFBISUxJUFMyKQotCQlwbXNfaTJjX2FuZG9yKGRldiwgMHhiOCwgMHgwOCwgMHg5ZiwgKGZpbHRlciAmIDMpIDw8IDUpOwotCWVsc2UgaWYgKGRldi0+ZGVjb2RlciA9PSBQSElMSVBTMSkKLQkJcG1zX2kyY19hbmRvcihkZXYsIDB4NDIsIDB4MjgsIDB4OWYsIChmaWx0ZXIgJiAzKSA8PCA1KTsKLX0KLQotc3RhdGljIHZvaWQgcG1zX2tpbGxjb2xvdXIoc3RydWN0IHBtcyAqZGV2LCBzaG9ydCBjb2xvdXIpCi17Ci0JaWYgKGRldi0+ZGVjb2RlciA9PSBQSElMSVBTMikgewotCQlwbXNfaTJjX2FuZG9yKGRldiwgMHg4YSwgMHgwOCwgMHgwNywgKGNvbG91ciAmIDB4MWYpIDw8IDMpOwotCQlwbXNfaTJjX2FuZG9yKGRldiwgMHg4YSwgMHgwOSwgMHgwNywgKGNvbG91ciAmIDB4MWYpIDw8IDMpOwotCX0gZWxzZSBpZiAoZGV2LT5kZWNvZGVyID09IFBISUxJUFMxKSB7Ci0JCXBtc19pMmNfYW5kb3IoZGV2LCAweDQyLCAweDA4LCAweDA3LCAoY29sb3VyICYgMHgxZikgPDwgMyk7Ci0JCXBtc19pMmNfYW5kb3IoZGV2LCAweDQyLCAweDA5LCAweDA3LCAoY29sb3VyICYgMHgxZikgPDwgMyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwbXNfY2hyb21hZ2FpbihzdHJ1Y3QgcG1zICpkZXYsIHNob3J0IGNocm9tYSkKLXsKLQlpZiAoZGV2LT5kZWNvZGVyID09IFBISUxJUFMyKQotCQlwbXNfaTJjX3dyaXRlKGRldiwgMHg4YSwgMHgxMSwgY2hyb21hKTsKLQllbHNlIGlmIChkZXYtPmRlY29kZXIgPT0gUEhJTElQUzEpCi0JCXBtc19pMmNfd3JpdGUoZGV2LCAweDQyLCAweDExLCBjaHJvbWEpOwotfQotCi0KLXN0YXRpYyB2b2lkIHBtc19zcGFjaWFsY29tcGwoc3RydWN0IHBtcyAqZGV2LCBzaG9ydCBkYXRhKQotewotCW12dl93cml0ZShkZXYsIDB4M2IsIGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBwbXNfc3BhY2lhbGNvbXBoKHN0cnVjdCBwbXMgKmRldiwgc2hvcnQgZGF0YSkKLXsKLQltdnZfd3JpdGUoZGV2LCAweDNhLCBkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgcG1zX3ZzdGFydChzdHJ1Y3QgcG1zICpkZXYsIHNob3J0IHN0YXJ0KQotewotCW12dl93cml0ZShkZXYsIDB4MTYsIHN0YXJ0KTsKLQltdnZfd3JpdGUoZGV2LCAweDE3LCAoc3RhcnQgPj4gOCkgJiAweDAxKTsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHBtc19zZWNhbWNyb3NzKHN0cnVjdCBwbXMgKmRldiwgc2hvcnQgY3Jvc3MpCi17Ci0JaWYgKGRldi0+ZGVjb2RlciA9PSBQSElMSVBTMikKLQkJcG1zX2kyY19hbmRvcihkZXYsIDB4OGEsIDB4MGYsIDB4ZGYsIChjcm9zcyAmIDEpIDw8IDUpOwotCWVsc2UgaWYgKGRldi0+ZGVjb2RlciA9PSBQSElMSVBTMSkKLQkJcG1zX2kyY19hbmRvcihkZXYsIDB4NDIsIDB4MGYsIDB4ZGYsIChjcm9zcyAmIDEpIDw8IDUpOwotfQotCi0KLXN0YXRpYyB2b2lkIHBtc19zd3NlbnNlKHN0cnVjdCBwbXMgKmRldiwgc2hvcnQgc2Vuc2UpCi17Ci0JaWYgKGRldi0+ZGVjb2RlciA9PSBQSElMSVBTMikgewotCQlwbXNfaTJjX3dyaXRlKGRldiwgMHg4YSwgMHgwYSwgc2Vuc2UpOwotCQlwbXNfaTJjX3dyaXRlKGRldiwgMHg4YSwgMHgwYiwgc2Vuc2UpOwotCX0gZWxzZSBpZiAoZGV2LT5kZWNvZGVyID09IFBISUxJUFMxKSB7Ci0JCXBtc19pMmNfd3JpdGUoZGV2LCAweDQyLCAweDBhLCBzZW5zZSk7Ci0JCXBtc19pMmNfd3JpdGUoZGV2LCAweDQyLCAweDBiLCBzZW5zZSk7Ci0JfQotfQotCi0KLXN0YXRpYyB2b2lkIHBtc19mcmFtZXJhdGUoc3RydWN0IHBtcyAqZGV2LCBzaG9ydCBmcnIpCi17Ci0JaW50IGZwcyA9IChkZXYtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgPyAzMCA6IDI1OwotCi0JaWYgKGZyciA9PSAwKQotCQlyZXR1cm47Ci0JZnBzID0gZnBzL2ZycjsKLQltdnZfd3JpdGUoZGV2LCAweDE0LCAweDgwIHwgZnBzKTsKLQltdnZfd3JpdGUoZGV2LCAweDE1LCAxKTsKLX0KLQotc3RhdGljIHZvaWQgcG1zX3ZlcnQoc3RydWN0IHBtcyAqZGV2LCB1OCBkZWNpZGVuLCB1OCBkZWNpbnVtKQotewotCW12dl93cml0ZShkZXYsIDB4MWMsIGRlY2lkZW4pOwkvKiBEZW5vbWluYXRvciAqLwotCW12dl93cml0ZShkZXYsIDB4MWQsIGRlY2ludW0pOwkvKiBOdW1lcmF0b3IgKi8KLX0KLQotLyoKLSAqCVR1cm4gMTZiaXQgcmF0aW9zIGludG8gYmVzdCBzbWFsbCByYXRpbyB0aGUgY2hpcHNldCBjYW4gZ3JvawotICovCi0KLXN0YXRpYyB2b2lkIHBtc192ZXJ0ZGVjaShzdHJ1Y3QgcG1zICpkZXYsIHVuc2lnbmVkIHNob3J0IGRlY2ludW0sIHVuc2lnbmVkIHNob3J0IGRlY2lkZW4pCi17Ci0JLyogS25vY2sgaXQgZG93biBieSAvIDUgb25jZSAqLwotCWlmIChkZWNpbnVtICUgNSA9PSAwKSB7Ci0JCWRlY2lkZW4gLz0gNTsKLQkJZGVjaW51bSAvPSA1OwotCX0KLQkvKgotCSAqCTMncwotCSAqLwotCXdoaWxlIChkZWNpbnVtICUgMyA9PSAwICYmIGRlY2lkZW4gJSAzID09IDApIHsKLQkJZGVjaWRlbiAvPSAzOwotCQlkZWNpbnVtIC89IDM7Ci0JfQotCS8qCi0JICoJMidzCi0JICovCi0Jd2hpbGUgKGRlY2ludW0gJSAyID09IDAgJiYgZGVjaWRlbiAlIDIgPT0gMCkgewotCQlkZWNpbnVtIC89IDI7Ci0JCWRlY2lkZW4gLz0gMjsKLQl9Ci0JLyoKLQkgKglGdWRneWlmeQotCSAqLwotCXdoaWxlIChkZWNpZGVuID4gMzIpIHsKLQkJZGVjaWRlbiAvPSAyOwotCQlkZWNpbnVtID0gKGRlY2ludW0gKyAxKSAvIDI7Ci0JfQotCWlmIChkZWNpZGVuID09IDMyKQotCQlkZWNpZGVuLS07Ci0JcG1zX3ZlcnQoZGV2LCBkZWNpZGVuLCBkZWNpbnVtKTsKLX0KLQotc3RhdGljIHZvaWQgcG1zX2hvcnpkZWNpKHN0cnVjdCBwbXMgKmRldiwgc2hvcnQgZGVjaW51bSwgc2hvcnQgZGVjaWRlbikKLXsKLQlpZiAoZGVjaW51bSA8PSA1MTIpIHsKLQkJaWYgKGRlY2ludW0gJSA1ID09IDApIHsKLQkJCWRlY2ludW0gLz0gNTsKLQkJCWRlY2lkZW4gLz0gNTsKLQkJfQotCX0gZWxzZSB7Ci0JCWRlY2ludW0gPSA1MTI7Ci0JCWRlY2lkZW4gPSA2NDA7CS8qIDc2OCB3b3VsZCBiZSBpZGVhbCAqLwotCX0KLQotCXdoaWxlICgoKGRlY2ludW0gfCBkZWNpZGVuKSAmIDEpID09IDApIHsKLQkJZGVjaW51bSA+Pj0gMTsKLQkJZGVjaWRlbiA+Pj0gMTsKLQl9Ci0Jd2hpbGUgKGRlY2lkZW4gPiAzMikgewotCQlkZWNpZGVuID4+PSAxOwotCQlkZWNpbnVtID0gKGRlY2ludW0gKyAxKSA+PiAxOwotCX0KLQlpZiAoZGVjaWRlbiA9PSAzMikKLQkJZGVjaWRlbi0tOwotCi0JbXZ2X3dyaXRlKGRldiwgMHgyNCwgMHg4MCB8IGRlY2lkZW4pOwotCW12dl93cml0ZShkZXYsIDB4MjUsIGRlY2ludW0pOwotfQotCi1zdGF0aWMgdm9pZCBwbXNfcmVzb2x1dGlvbihzdHJ1Y3QgcG1zICpkZXYsIHNob3J0IHdpZHRoLCBzaG9ydCBoZWlnaHQpCi17Ci0JaW50IGZnX2hlaWdodDsKLQotCWZnX2hlaWdodCA9IGhlaWdodDsKLQlpZiAoZmdfaGVpZ2h0ID4gMjgwKQotCQlmZ19oZWlnaHQgPSAyODA7Ci0KLQltdnZfd3JpdGUoZGV2LCAweDE4LCBmZ19oZWlnaHQpOwotCW12dl93cml0ZShkZXYsIDB4MTksIGZnX2hlaWdodCA+PiA4KTsKLQotCWlmIChkZXYtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkgewotCQltdnZfd3JpdGUoZGV2LCAweDFhLCAweGZjKTsKLQkJbXZ2X3dyaXRlKGRldiwgMHgxYiwgMHgwMCk7Ci0JCWlmIChoZWlnaHQgPiBmZ19oZWlnaHQpCi0JCQlwbXNfdmVydGRlY2koZGV2LCAyNDAsIDI0MCk7Ci0JCWVsc2UKLQkJCXBtc192ZXJ0ZGVjaShkZXYsIGZnX2hlaWdodCwgMjQwKTsKLQl9IGVsc2UgewotCQltdnZfd3JpdGUoZGV2LCAweDFhLCAweDFhKTsKLQkJbXZ2X3dyaXRlKGRldiwgMHgxYiwgMHgwMSk7Ci0JCWlmIChmZ19oZWlnaHQgPiAyNTYpCi0JCQlwbXNfdmVydGRlY2koZGV2LCAyNzAsIDI3MCk7Ci0JCWVsc2UKLQkJCXBtc192ZXJ0ZGVjaShkZXYsIGZnX2hlaWdodCwgMjcwKTsKLQl9Ci0JbXZ2X3dyaXRlKGRldiwgMHgxMiwgMCk7Ci0JbXZ2X3dyaXRlKGRldiwgMHgxMywgTVZWTUVNT1JZV0lEVEgpOwotCW12dl93cml0ZShkZXYsIDB4NDIsIDB4MDApOwotCW12dl93cml0ZShkZXYsIDB4NDMsIDB4MDApOwotCW12dl93cml0ZShkZXYsIDB4NDQsIE1WVk1FTU9SWVdJRFRIKTsKLQotCW12dl93cml0ZShkZXYsIDB4MjIsIHdpZHRoICsgOCk7Ci0JbXZ2X3dyaXRlKGRldiwgMHgyMywgKHdpZHRoICsgOCkgPj4gOCk7Ci0KLQlpZiAoZGV2LT5zdGQgJiBWNEwyX1NURF81MjVfNjApCi0JCXBtc19ob3J6ZGVjaShkZXYsIHdpZHRoLCA2NDApOwotCWVsc2UKLQkJcG1zX2hvcnpkZWNpKGRldiwgd2lkdGggKyA4LCA3NjgpOwotCi0JbXZ2X3dyaXRlKGRldiwgMHgzMCwgbXZ2X3JlYWQoZGV2LCAweDMwKSAmIDB4ZmUpOwotCW12dl93cml0ZShkZXYsIDB4MDgsIG12dl9yZWFkKGRldiwgMHgwOCkgfCAweDAxKTsKLQltdnZfd3JpdGUoZGV2LCAweDAxLCBtdnZfcmVhZChkZXYsIDB4MDEpICYgMHhmZCk7Ci0JbXZ2X3dyaXRlKGRldiwgMHgzMiwgMHgwMCk7Ci0JbXZ2X3dyaXRlKGRldiwgMHgzMywgTVZWTUVNT1JZV0lEVEgpOwotfQotCi0KLS8qCi0gKglTZXQgSW5wdXQKLSAqLwotCi1zdGF0aWMgdm9pZCBwbXNfdmNyaW5wdXQoc3RydWN0IHBtcyAqZGV2LCBzaG9ydCBpbnB1dCkKLXsKLQlpZiAoZGV2LT5kZWNvZGVyID09IFBISUxJUFMyKQotCQlwbXNfaTJjX2FuZG9yKGRldiwgMHg4YSwgMHgwZCwgMHg3ZiwgKGlucHV0ICYgMSkgPDwgNyk7Ci0JZWxzZSBpZiAoZGV2LT5kZWNvZGVyID09IFBISUxJUFMxKQotCQlwbXNfaTJjX2FuZG9yKGRldiwgMHg0MiwgMHgwZCwgMHg3ZiwgKGlucHV0ICYgMSkgPDwgNyk7Ci19Ci0KLQotc3RhdGljIGludCBwbXNfY2FwdHVyZShzdHJ1Y3QgcG1zICpkZXYsIGNoYXIgX191c2VyICpidWYsIGludCByZ2I1NTUsIGludCBjb3VudCkKLXsKLQlpbnQgeTsKLQlpbnQgZHcgPSAyICogZGV2LT53aWR0aDsKLQljaGFyICp0bXA7IC8qIHVzaW5nIGEgdGVtcCBidWZmZXIgaXMgZmFzdGVyIHRoYW4gZGlyZWN0ICAqLwotCWludCBjbnQgPSAwOwotCWludCBsZW4gPSAwOwotCXVuc2lnbmVkIGNoYXIgcjggPSAweDU7ICAvKiB2YWx1ZSBmb3IgcmVnOCAgKi8KLQotCXRtcCA9IGttYWxsb2MoZHcgKyAzMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0bXApCi0JCXJldHVybiAwOwotCi0JaWYgKHJnYjU1NSkKLQkJcjggfD0gMHgyMDsgLyogZWxzZSB1c2UgdW50cmFuc2xhdGVkIHJnYiA9IDU2NSAqLwotCW12dl93cml0ZShkZXYsIDB4MDgsIHI4KTsgLyogY2FwdHVyZSByZ2I1NTUvNTY1LCBpbml0IERSQU0sIFBDIGVuYWJsZSAqLwotCi0vKglwcmludGYoIiVkICVkICVkICVkICVkICV4ICV4XG4iLHdpZHRoLGhlaWdodCx2b2ZmLG5vbSxkZW4sbXZ2X2J1Zik7ICovCi0KLQlmb3IgKHkgPSAwOyB5IDwgZGV2LT5oZWlnaHQ7IHkrKykgewotCQl3cml0ZWIoMCwgZGV2LT5tZW0pOyAgLyogc3luY2hyb25pc2llcnQgbmV1ZSBaZWlsZSAqLwotCi0JCS8qCi0JCSAqCVRoaXMgaXMgaW4gdHJ1dGggYSBmaWZvLCBiZSB2ZXJ5IGNhcmVmdWwgYXMgaWYgeW91Ci0JCSAqCWZvcmdvdCB0aGlzIG9kZCB0aGluZ3Mgd2lsbCBvY2N1ciA4KQotCQkgKi8KLQotCQltZW1jcHlfZnJvbWlvKHRtcCwgZGV2LT5tZW0sIGR3ICsgMzIpOyAvKiBkaXNjYXJkIDE2IHdvcmQgICAqLwotCQljbnQgLT0gZGV2LT5oZWlnaHQ7Ci0JCXdoaWxlIChjbnQgPD0gMCkgewotCQkJLyoKLQkJCSAqCURvbid0IGNvcHkgdG9vIGZhcgotCQkJICovCi0JCQlpbnQgZHQgPSBkdzsKLQkJCWlmIChkdCArIGxlbiA+IGNvdW50KQotCQkJCWR0ID0gY291bnQgLSBsZW47Ci0JCQljbnQgKz0gZGV2LT5oZWlnaHQ7Ci0JCQlpZiAoY29weV90b191c2VyKGJ1ZiwgdG1wICsgMzIsIGR0KSkKLQkJCQlyZXR1cm4gbGVuID8gbGVuIDogLUVGQVVMVDsKLQkJCWJ1ZiArPSBkdDsKLQkJCWxlbiArPSBkdDsKLQkJfQotCX0KLQlrZnJlZSh0bXApOwotCXJldHVybiBsZW47Ci19Ci0KLQotLyoKLSAqCVZpZGVvNGxpbnV4IGludGVyZmFjaW5nCi0gKi8KLQotc3RhdGljIGludCBwbXNfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2Y2FwKQotewotCXN0cnVjdCBwbXMgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlzdHJsY3B5KHZjYXAtPmRyaXZlciwgZGV2LT52NGwyX2Rldi5uYW1lLCBzaXplb2YodmNhcC0+ZHJpdmVyKSk7Ci0Jc3RybGNweSh2Y2FwLT5jYXJkLCAiTWVkaWF2aXNpb24gUE1TIiwgc2l6ZW9mKHZjYXAtPmNhcmQpKTsKLQlzbnByaW50Zih2Y2FwLT5idXNfaW5mbywgc2l6ZW9mKHZjYXAtPmJ1c19pbmZvKSwKLQkJCSJJU0E6JXMiLCBkZXYtPnY0bDJfZGV2Lm5hbWUpOwotCXZjYXAtPmRldmljZV9jYXBzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1JFQURXUklURTsKLQl2Y2FwLT5jYXBhYmlsaXRpZXMgPSB2Y2FwLT5kZXZpY2VfY2FwcyB8IFY0TDJfQ0FQX0RFVklDRV9DQVBTOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBtc19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfaW5wdXQgKnZpbikKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqaW5wdXRzWzRdID0gewotCQkiQ29tcG9zaXRlIiwKLQkJIlMtVmlkZW8iLAotCQkiQ29tcG9zaXRlIChWQ1IpIiwKLQkJIlMtVmlkZW8gKFZDUikiCi0JfTsKLQotCWlmICh2aW4tPmluZGV4ID4gMykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jc3RybGNweSh2aW4tPm5hbWUsIGlucHV0c1t2aW4tPmluZGV4XSwgc2l6ZW9mKHZpbi0+bmFtZSkpOwotCXZpbi0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7Ci0JdmluLT5hdWRpb3NldCA9IDA7Ci0JdmluLT50dW5lciA9IDA7Ci0JdmluLT5zdGQgPSBWNEwyX1NURF9BTEw7Ci0JdmluLT5zdGF0dXMgPSAwOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBtc19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50ICppbnApCi17Ci0Jc3RydWN0IHBtcyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCSppbnAgPSBkZXYtPmlucHV0OwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBtc19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50IGlucCkKLXsKLQlzdHJ1Y3QgcG1zICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCi0JaWYgKGlucCA+IDMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGV2LT5pbnB1dCA9IGlucDsKLQlwbXNfdmlkZW9zb3VyY2UoZGV2LCBpbnAgJiAxKTsKLQlwbXNfdmNyaW5wdXQoZGV2LCBpbnAgPj4gMSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcG1zX2dfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdjRsMl9zdGRfaWQgKnN0ZCkKLXsKLQlzdHJ1Y3QgcG1zICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCi0JKnN0ZCA9IGRldi0+c3RkOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBtc19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHY0bDJfc3RkX2lkIHN0ZCkKLXsKLQlzdHJ1Y3QgcG1zICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWludCByZXQgPSAwOwotCi0JZGV2LT5zdGQgPSBzdGQ7Ci0JaWYgKGRldi0+c3RkICYgVjRMMl9TVERfTlRTQykgewotCQlwbXNfZnJhbWVyYXRlKGRldiwgMzApOwotCQlwbXNfc2VjYW1jcm9zcyhkZXYsIDApOwotCQlwbXNfZm9ybWF0KGRldiwgMSk7Ci0JfSBlbHNlIGlmIChkZXYtPnN0ZCAmIFY0TDJfU1REX1BBTCkgewotCQlwbXNfZnJhbWVyYXRlKGRldiwgMjUpOwotCQlwbXNfc2VjYW1jcm9zcyhkZXYsIDApOwotCQlwbXNfZm9ybWF0KGRldiwgMik7Ci0JfSBlbHNlIGlmIChkZXYtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNKSB7Ci0JCXBtc19mcmFtZXJhdGUoZGV2LCAyNSk7Ci0JCXBtc19zZWNhbWNyb3NzKGRldiwgMSk7Ci0JCXBtc19mb3JtYXQoZGV2LCAyKTsKLQl9IGVsc2UgewotCQlyZXQgPSAtRUlOVkFMOwotCX0KLQkvKgotCXN3aXRjaCAodi0+bW9kZSkgewotCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQlwbXNfZnJhbWVyYXRlKGRldiwgMjUpOwotCQlwbXNfc2VjYW1jcm9zcyhkZXYsIDApOwotCQlwbXNfZm9ybWF0KGRldiwgMCk7Ci0JCWJyZWFrOwotCX0qLwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcG1zX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjdHJsKQotewotCXN0cnVjdCBwbXMgKmRldiA9IGNvbnRhaW5lcl9vZihjdHJsLT5oYW5kbGVyLCBzdHJ1Y3QgcG1zLCBoZGwpOwotCWludCByZXQgPSAwOwotCi0Jc3dpdGNoIChjdHJsLT5pZCkgewotCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJcG1zX2JyaWdodG5lc3MoZGV2LCBjdHJsLT52YWwpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQlwbXNfY29udHJhc3QoZGV2LCBjdHJsLT52YWwpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCXBtc19zYXR1cmF0aW9uKGRldiwgY3RybC0+dmFsKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCXBtc19odWUoZGV2LCBjdHJsLT52YWwpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBwbXNfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQotewotCXN0cnVjdCBwbXMgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmZtdC0+Zm10LnBpeDsKLQotCXBpeC0+d2lkdGggPSBkZXYtPndpZHRoOwotCXBpeC0+aGVpZ2h0ID0gZGV2LT5oZWlnaHQ7Ci0JcGl4LT5waXhlbGZvcm1hdCA9IGRldi0+d2lkdGggPT0gMTUgPwotCQkJICAgIFY0TDJfUElYX0ZNVF9SR0I1NTUgOiBWNEwyX1BJWF9GTVRfUkdCNTY1OwotCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Ci0JcGl4LT5ieXRlc3BlcmxpbmUgPSAyICogZGV2LT53aWR0aDsKLQlwaXgtPnNpemVpbWFnZSA9IDIgKiBkZXYtPndpZHRoICogZGV2LT5oZWlnaHQ7Ci0JLyogSnVzdCBhIGd1ZXNzICovCi0JcGl4LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcG1zX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQotewotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmbXQtPmZtdC5waXg7Ci0KLQlpZiAocGl4LT5oZWlnaHQgPCAxNiB8fCBwaXgtPmhlaWdodCA+IDQ4MCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKHBpeC0+d2lkdGggPCAxNiB8fCBwaXgtPndpZHRoID4gNjQwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAocGl4LT5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfUkdCNTU1ICYmCi0JICAgIHBpeC0+cGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1JHQjU2NSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcGl4LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKLQlwaXgtPmJ5dGVzcGVybGluZSA9IDIgKiBwaXgtPndpZHRoOwotCXBpeC0+c2l6ZWltYWdlID0gMiAqIHBpeC0+d2lkdGggKiBwaXgtPmhlaWdodDsKLQkvKiBKdXN0IGEgZ3Vlc3MgKi8KLQlwaXgtPmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQjsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwbXNfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQotewotCXN0cnVjdCBwbXMgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmZtdC0+Zm10LnBpeDsKLQlpbnQgcmV0ID0gcG1zX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZm10KTsKLQotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JZGV2LT53aWR0aCA9IHBpeC0+d2lkdGg7Ci0JZGV2LT5oZWlnaHQgPSBwaXgtPmhlaWdodDsKLQlkZXYtPmRlcHRoID0gKHBpeC0+cGl4ZWxmb3JtYXQgPT0gVjRMMl9QSVhfRk1UX1JHQjU1NSkgPyAxNSA6IDE2OwotCXBtc19yZXNvbHV0aW9uKGRldiwgZGV2LT53aWR0aCwgZGV2LT5oZWlnaHQpOwotCS8qIE9rIHdlIGZpZ3VyZWQgb3V0IHdoYXQgdG8gdXNlIGZyb20gb3VyIHdpZGUgY2hvaWNlICovCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcG1zX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQpCi17Ci0Jc3RhdGljIHN0cnVjdCB2NGwyX2ZtdGRlc2MgZm9ybWF0c1tdID0gewotCQl7IDAsIDAsIDAsCi0JCSAgIlJHQiA1OjU6NSIsIFY0TDJfUElYX0ZNVF9SR0I1NTUsCi0JCSAgeyAwLCAwLCAwLCAwIH0KLQkJfSwKLQkJeyAxLCAwLCAwLAotCQkgICJSR0IgNTo2OjUiLCBWNEwyX1BJWF9GTVRfUkdCNTY1LAotCQkgIHsgMCwgMCwgMCwgMCB9Ci0JCX0sCi0JfTsKLQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IGZtdC0+dHlwZTsKLQotCWlmIChmbXQtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkqZm10ID0gZm9ybWF0c1tmbXQtPmluZGV4XTsKLQlmbXQtPnR5cGUgPSB0eXBlOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBwbXNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBwbXMgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IGxlbjsKLQotCWxlbiA9IHBtc19jYXB0dXJlKGRldiwgYnVmLCAoZGV2LT5kZXB0aCA9PSAxNSksIGNvdW50KTsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHBtc19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCi17Ci0Jc3RydWN0IHY0bDJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCByZXMgPSBQT0xMSU4gfCBQT0xMUkROT1JNOwotCi0JaWYgKHY0bDJfZXZlbnRfcGVuZGluZyhmaCkpCi0JCXJlcyB8PSBQT0xMUFJJOwotCXBvbGxfd2FpdChmaWxlLCAmZmgtPndhaXQsIHdhaXQpOwotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgcG1zX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHY0bDJfZmhfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSB2NGwyX2ZoX3JlbGVhc2UsCi0JLnBvbGwgICAgICAgICAgID0gcG1zX3BvbGwsCi0JLnVubG9ja2VkX2lvY3RsCT0gdmlkZW9faW9jdGwyLAotCS5yZWFkICAgICAgICAgICA9IHBtc19yZWFkLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBwbXNfaW9jdGxfb3BzID0gewotCS52aWRpb2NfcXVlcnljYXAJICAgID0gcG1zX3F1ZXJ5Y2FwLAotCS52aWRpb2NfZ19pbnB1dAkJICAgID0gcG1zX2dfaW5wdXQsCi0JLnZpZGlvY19zX2lucHV0CQkgICAgPSBwbXNfc19pbnB1dCwKLQkudmlkaW9jX2VudW1faW5wdXQJICAgID0gcG1zX2VudW1faW5wdXQsCi0JLnZpZGlvY19nX3N0ZAkJICAgID0gcG1zX2dfc3RkLAotCS52aWRpb2Nfc19zdGQJCSAgICA9IHBtc19zX3N0ZCwKLQkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgICAgPSBwbXNfZW51bV9mbXRfdmlkX2NhcCwKLQkudmlkaW9jX2dfZm10X3ZpZF9jYXAJICAgID0gcG1zX2dfZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19zX2ZtdF92aWRfY2FwCSAgICA9IHBtc19zX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAgICA9IHBtc190cnlfZm10X3ZpZF9jYXAsCi0JLnZpZGlvY19zdWJzY3JpYmVfZXZlbnQgICAgID0gdjRsMl9jdHJsX3N1YnNjcmliZV9ldmVudCwKLQkudmlkaW9jX3Vuc3Vic2NyaWJlX2V2ZW50ICAgPSB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlLAotfTsKLQotLyoKLSAqCVByb2JlIGZvciBhbmQgaW5pdGlhbGlzZSB0aGUgTWVkaWF2aXNpb24gUE1TCi0gKi8KLQotc3RhdGljIGludCBpbml0X21lZGlhdmlzaW9uKHN0cnVjdCBwbXMgKmRldikKLXsKLQlpbnQgaWRlYywgZGVjc3Q7Ci0JaW50IGk7Ci0Jc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaTJjX2RlZnNbXSA9IHsKLQkJMHg0YywgMHgzMCwgMHgwMCwgMHhlOCwKLQkJMHhiNiwgMHhlMiwgMHgwMCwgMHgwMCwKLQkJMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKLQkJMHgwMCwgMHgwMCwgMHg3OCwgMHg5OCwKLQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLQkJMHgzNCwgMHgwYSwgMHhmNCwgMHhjZSwKLQkJMHhlNAotCX07Ci0KLQlkZXYtPm1lbSA9IGlvcmVtYXAobWVtX2Jhc2UsIDB4ODAwKTsKLQlpZiAoIWRldi0+bWVtKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWlmICghcmVxdWVzdF9yZWdpb24oMHg5YTAxLCAxLCAiTWVkaWF2aXNpb24gUE1TIGNvbmZpZyIpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIm1lZGlhdmlzaW9uOiB1bmFibGUgdG8gZGV0ZWN0OiAweDlhMDEgaW4gdXNlLlxuIik7Ci0JCWlvdW5tYXAoZGV2LT5tZW0pOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGRldi0+aW8sIDMsICJNZWRpYXZpc2lvbiBQTVMiKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJtZWRpYXZpc2lvbjogSS9PIHBvcnQgJWQgaW4gdXNlLlxuIiwgZGV2LT5pbyk7Ci0JCXJlbGVhc2VfcmVnaW9uKDB4OWEwMSwgMSk7Ci0JCWlvdW5tYXAoZGV2LT5tZW0pOwotCQlyZXR1cm4gLUVCVVNZOwotCX0KLQlvdXRiKDB4YjgsIDB4OWEwMSk7CQkvKiBVbmxvY2sgKi8KLQlvdXRiKGRldi0+aW8gPj4gNCwgMHg5YTAxKTsJLyogU2V0IElPIHBvcnQgKi8KLQotCi0JZGVjc3QgPSBwbXNfaTJjX3N0YXQoZGV2LCAweDQzKTsKLQotCWlmIChkZWNzdCAhPSAtMSkKLQkJaWRlYyA9IDI7Ci0JZWxzZSBpZiAocG1zX2kyY19zdGF0KGRldiwgMHhiOSkgIT0gLTEpCi0JCWlkZWMgPSAzOwotCWVsc2UgaWYgKHBtc19pMmNfc3RhdChkZXYsIDB4OGIpICE9IC0xKQotCQlpZGVjID0gMTsKLQllbHNlCi0JCWlkZWMgPSAwOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiUE1TIHR5cGUgaXMgJWRcbiIsIGlkZWMpOwotCWlmIChpZGVjID09IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgMyk7Ci0JCXJlbGVhc2VfcmVnaW9uKDB4OWEwMSwgMSk7Ci0JCWlvdW5tYXAoZGV2LT5tZW0pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKgotCSAqCU9rIHdlIGhhdmUgYSBQTVMgb2Ygc29tZSBzb3J0Ci0JICovCi0KLQltdnZfd3JpdGUoZGV2LCAweDA0LCBtZW1fYmFzZSA+PiAxMik7CS8qIFNldCB0aGUgbWVtb3J5IGFyZWEgKi8KLQotCS8qIE9rIG5vdyBsb2FkIHRoZSBkZWZhdWx0cyAqLwotCi0JZm9yIChpID0gMDsgaSA8IDB4MTk7IGkrKykgewotCQlpZiAoaTJjX2RlZnNbaV0gPT0gMHhmZikKLQkJCXBtc19pMmNfYW5kb3IoZGV2LCAweDhhLCBpLCAweDA3LCAweDAwKTsKLQkJZWxzZQotCQkJcG1zX2kyY193cml0ZShkZXYsIDB4OGEsIGksIGkyY19kZWZzW2ldKTsKLQl9Ci0KLQlwbXNfaTJjX3dyaXRlKGRldiwgMHhiOCwgMHgwMCwgMHgxMik7Ci0JcG1zX2kyY193cml0ZShkZXYsIDB4YjgsIDB4MDQsIDB4MDApOwotCXBtc19pMmNfd3JpdGUoZGV2LCAweGI4LCAweDA3LCAweDAwKTsKLQlwbXNfaTJjX3dyaXRlKGRldiwgMHhiOCwgMHgwOCwgMHgwMCk7Ci0JcG1zX2kyY193cml0ZShkZXYsIDB4YjgsIDB4MDksIDB4ZmYpOwotCXBtc19pMmNfd3JpdGUoZGV2LCAweGI4LCAweDBhLCAweDAwKTsKLQlwbXNfaTJjX3dyaXRlKGRldiwgMHhiOCwgMHgwYiwgMHgxMCk7Ci0JcG1zX2kyY193cml0ZShkZXYsIDB4YjgsIDB4MTAsIDB4MDMpOwotCi0JbXZ2X3dyaXRlKGRldiwgMHgwMSwgMHgwMCk7Ci0JbXZ2X3dyaXRlKGRldiwgMHgwNSwgMHhhMCk7Ci0JbXZ2X3dyaXRlKGRldiwgMHgwOCwgMHgyNSk7Ci0JbXZ2X3dyaXRlKGRldiwgMHgwOSwgMHgwMCk7Ci0JbXZ2X3dyaXRlKGRldiwgMHgwYSwgMHgyMCB8IE1WVk1FTU9SWVdJRFRIKTsKLQotCW12dl93cml0ZShkZXYsIDB4MTAsIDB4MDIpOwotCW12dl93cml0ZShkZXYsIDB4MWUsIDB4MGMpOwotCW12dl93cml0ZShkZXYsIDB4MWYsIDB4MDMpOwotCW12dl93cml0ZShkZXYsIDB4MjYsIDB4MDYpOwotCi0JbXZ2X3dyaXRlKGRldiwgMHgyYiwgMHgwMCk7Ci0JbXZ2X3dyaXRlKGRldiwgMHgyYywgMHgyMCk7Ci0JbXZ2X3dyaXRlKGRldiwgMHgyZCwgMHgwMCk7Ci0JbXZ2X3dyaXRlKGRldiwgMHgyZiwgMHg3MCk7Ci0JbXZ2X3dyaXRlKGRldiwgMHgzMiwgMHgwMCk7Ci0JbXZ2X3dyaXRlKGRldiwgMHgzMywgTVZWTUVNT1JZV0lEVEgpOwotCW12dl93cml0ZShkZXYsIDB4MzQsIDB4MDApOwotCW12dl93cml0ZShkZXYsIDB4MzUsIDB4MDApOwotCW12dl93cml0ZShkZXYsIDB4M2EsIDB4ODApOwotCW12dl93cml0ZShkZXYsIDB4M2IsIDB4MTApOwotCW12dl93cml0ZShkZXYsIDB4MjAsIDB4MDApOwotCW12dl93cml0ZShkZXYsIDB4MjEsIDB4MDApOwotCW12dl93cml0ZShkZXYsIDB4MzAsIDB4MjIpOwotCXJldHVybiAwOwotfQotCi0vKgotICoJSW5pdGlhbGl6YXRpb24gYW5kIG1vZHVsZSBzdHVmZgotICovCi0KLSNpZm5kZWYgTU9EVUxFCi1zdGF0aWMgaW50IGVuYWJsZTsKLW1vZHVsZV9wYXJhbShlbmFibGUsIGludCwgMCk7Ci0jZW5kaWYKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzIHBtc19jdHJsX29wcyA9IHsKLQkuc19jdHJsID0gcG1zX3NfY3RybCwKLX07Ci0KLXN0YXRpYyBpbnQgcG1zX3Byb2JlKHN0cnVjdCBkZXZpY2UgKnBkZXYsIHVuc2lnbmVkIGludCBjYXJkKQotewotCXN0cnVjdCBwbXMgKmRldjsKLQlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2OwotCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsOwotCWludCByZXM7Ci0KLSNpZm5kZWYgTU9EVUxFCi0JaWYgKCFlbmFibGUpIHsKLQkJcHJfZXJyKCJQTVM6IG5vdCBlbmFibGVkLCB1c2UgcG1zLmVuYWJsZT0xIHRvIHByb2JlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotI2VuZGlmCi0KLQlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRldiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRldi0+ZGVjb2RlciA9IFBISUxJUFMyOwotCWRldi0+aW8gPSBpb19wb3J0OwotCWRldi0+ZGF0YSA9IGlvX3BvcnQgKyAxOwotCXY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7Ci0JaGRsID0gJmRldi0+aGRsOwotCi0JcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIocGRldiwgdjRsMl9kZXYpOwotCWlmIChyZXMgPCAwKSB7Ci0JCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKLQkJZ290byBmcmVlX2RldjsKLQl9Ci0JdjRsMl9pbmZvKHY0bDJfZGV2LCAiTWVkaWF2aXNpb24gUHJvIE1vdmllIFN0dWRpbyBkcml2ZXIgMC4wNVxuIik7Ci0KLQlyZXMgPSBpbml0X21lZGlhdmlzaW9uKGRldik7Ci0JaWYgKHJlcykgewotCQl2NGwyX2Vycih2NGwyX2RldiwgIkJvYXJkIG5vdCBmb3VuZC5cbiIpOwotCQlnb3RvIGZyZWVfaW87Ci0JfQotCi0JdjRsMl9jdHJsX2hhbmRsZXJfaW5pdChoZGwsIDQpOwotCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnBtc19jdHJsX29wcywKLQkJCVY0TDJfQ0lEX0JSSUdIVE5FU1MsIDAsIDI1NSwgMSwgMTM5KTsKLQl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsICZwbXNfY3RybF9vcHMsCi0JCQlWNEwyX0NJRF9DT05UUkFTVCwgMCwgMjU1LCAxLCA3MCk7Ci0JdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmcG1zX2N0cmxfb3BzLAotCQkJVjRMMl9DSURfU0FUVVJBVElPTiwgMCwgMjU1LCAxLCA2NCk7Ci0JdjRsMl9jdHJsX25ld19zdGQoaGRsLCAmcG1zX2N0cmxfb3BzLAotCQkJVjRMMl9DSURfSFVFLCAwLCAyNTUsIDEsIDApOwotCWlmIChoZGwtPmVycm9yKSB7Ci0JCXJlcyA9IGhkbC0+ZXJyb3I7Ci0JCWdvdG8gZnJlZV9oZGw7Ci0JfQotCi0JbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKLQlzdHJsY3B5KGRldi0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKGRldi0+dmRldi5uYW1lKSk7Ci0JZGV2LT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7Ci0JZGV2LT52ZGV2LmN0cmxfaGFuZGxlciA9IGhkbDsKLQlkZXYtPnZkZXYuZm9wcyA9ICZwbXNfZm9wczsKLQlkZXYtPnZkZXYuaW9jdGxfb3BzID0gJnBtc19pb2N0bF9vcHM7Ci0JZGV2LT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKLQlkZXYtPnZkZXYubG9jayA9ICZkZXYtPmxvY2s7Ci0JZGV2LT52ZGV2LnR2bm9ybXMgPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU07Ci0JdmlkZW9fc2V0X2RydmRhdGEoJmRldi0+dmRldiwgZGV2KTsKLQlkZXYtPnN0ZCA9IFY0TDJfU1REX05UU0NfTTsKLQlkZXYtPmhlaWdodCA9IDI0MDsKLQlkZXYtPndpZHRoID0gMzIwOwotCWRldi0+ZGVwdGggPSAxNjsKLQlwbXNfc3dzZW5zZShkZXYsIDc1KTsKLQlwbXNfcmVzb2x1dGlvbihkZXYsIDMyMCwgMjQwKTsKLQlwbXNfdmlkZW9zb3VyY2UoZGV2LCAwKTsKLQlwbXNfdmNyaW5wdXQoZGV2LCAwKTsKLQl2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cChoZGwpOwotCXJlcyA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucik7Ci0JaWYgKHJlcyA+PSAwKQotCQlyZXR1cm4gMDsKLQotZnJlZV9oZGw6Ci0JdjRsMl9jdHJsX2hhbmRsZXJfZnJlZShoZGwpOwotCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOwotZnJlZV9pbzoKLQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCAzKTsKLQlyZWxlYXNlX3JlZ2lvbigweDlhMDEsIDEpOwotCWlvdW5tYXAoZGV2LT5tZW0pOwotZnJlZV9kZXY6Ci0Ja2ZyZWUoZGV2KTsKLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50IHBtc19yZW1vdmUoc3RydWN0IGRldmljZSAqcGRldiwgdW5zaWduZWQgaW50IGNhcmQpCi17Ci0Jc3RydWN0IHBtcyAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYpOwotCi0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldik7Ci0JdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmZGV2LT5oZGwpOwotCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDMpOwotCXJlbGVhc2VfcmVnaW9uKDB4OWEwMSwgMSk7Ci0JaW91bm1hcChkZXYtPm1lbSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXNhX2RyaXZlciBwbXNfZHJpdmVyID0gewotCS5wcm9iZQkJPSBwbXNfcHJvYmUsCi0JLnJlbW92ZQkJPSBwbXNfcmVtb3ZlLAotCS5kcml2ZXIJCT0gewotCQkubmFtZQk9ICJwbXMiLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBwbXNfaW5pdCh2b2lkKQotewotCXJldHVybiBpc2FfcmVnaXN0ZXJfZHJpdmVyKCZwbXNfZHJpdmVyLCAxKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHBtc19leGl0KHZvaWQpCi17Ci0JaXNhX3VucmVnaXN0ZXJfZHJpdmVyKCZwbXNfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQocG1zX2luaXQpOwotbW9kdWxlX2V4aXQocG1zX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3BhcnBvcnQvdzk5NjYuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9wYXJwb3J0L3c5OTY2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NTAyZjMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3BhcnBvcnQvdzk5NjYuYworKysgL2Rldi9udWxsCkBAIC0xLDk4MCArMCwwIEBACi0vKgotCVdpbmJvbmQgdzk5NjZjZiBXZWJjYW0gcGFycG9ydCBkcml2ZXIuCi0KLQlWZXJzaW9uIDAuMzMKLQotCUNvcHlyaWdodCAoQykgMjAwMSBKYWtvYiBLZW1pIDxqYWtvYi5rZW1pQHBvc3QudXRmb3JzLnNlPgotCi0JVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLQlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotCXRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0JKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotCVRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0JTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotCUdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLQlZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotCWFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0JRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qLwotLyoKLQlTdXBwb3J0ZWQgZGV2aWNlczoKLQkqTGlmZXZpZXcgRmx5Q2FtIFN1cHJhICh1c2luZyB0aGUgUGhpbGlwcyBzYWE3MTExYSBjaGlwKQotCi0JRG9lcyBhbnkgb3RoZXIgbW9kZWwgdXNpbmcgdGhlIHc5OTY2IGludGVyZmFjZSBjaGlwIGV4aXN0ID8KLQotCVRvZG86Ci0KLQkqQWRkIGEgd29ya2luZyBFUFAgbW9kZSwgc2luY2UgRE1BIEVDUCByZWFkIGlzbid0IGltcGxlbWVudGVkCi0JaW4gdGhlIHBhcnBvcnQgZHJpdmVycy4gKFRoYXQncyB3aHkgaXQncyBzbyBzbG9vdykKLQotCSpBZGQgc3VwcG9ydCBmb3Igb3RoZXIgY2NkLWNvbnRyb2wgY2hpcHMgdGhhbiB0aGUgc2FhNzExMQotCXBsZWFzZSBzZW5kIG1lIGZlZWRiYWNrIG9uIHdoYXQga2luZCBvZiBjaGlwcyB5b3UgaGF2ZS4KLQotCSpBZGQgcHJvcGVyIHByb2JpbmcuIEkgZG9uJ3Qga25vdyB3aGF0J3Mgd3Jvbmcgd2l0aCB0aGUgSUVFRTEyODQKLQlwYXJwb3J0IGRyaXZlcnMgYnV0IChJRUVFMTI4NF9NT0RFX05JQkJMRXxJRUVFMTI4NF9ERVZJQ0VfSUQpCi0JYW5kIG5pYmJsZSByZWFkIHNlZW1zIHRvIGJlIGJyb2tlbiBmb3Igc29tZSBwZXJpcGhlcmFscy4KLQotCSpBZGQgcHJvYmluZyBmb3Igb25ib2FyZCBTUkFNLCBwb3J0IGRpcmVjdGlvbnMgZXRjLiAoaWYgcG9zc2libGUpCi0KLQkqQWRkIHN1cHBvcnQgZm9yIHRoZSBoYXJkd2FyZSBjb21wcmVzc2VkIG1vZGVzIChtYXliZSB1c2luZyB2NGwyKQotCi0JKkZpeCBiZXR0ZXIgc3VwcG9ydCBmb3IgdGhlIGNhcHR1cmUgd2luZG93IChubyBza2V3ZWQgaW1hZ2VzLCB2NGwKLQlpbnRlcmZhY2UgdG8gY2FwdC4gd2luZG93KQotCi0JKlByb2JhYmx5IHNvbWUgYnVncyB0aGF0IEkgZG9uJ3Qga25vdyBvZgotCi0JUGxlYXNlIHN1cHBvcnQgbWUgYnkgc2VuZGluZyBmZWVkYmFjayEKLQotCUNoYW5nZXM6Ci0KLQlBbGFuIENveDoJUmVtb3ZlZCBSR0IgbW9kZSBmb3Iga2VybmVsIG1lcmdlLCBhZGRlZCBUSElTX01PRFVMRQotCQkJYW5kIG93bmVyIHN1cHBvcnQgZm9yIG5ld2VyIG1vZHVsZSBsb2NrcwotKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItZmguaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVudC5oPgotI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KLQotLyojZGVmaW5lIERFQlVHKi8JCQkJLyogVW5kZWYgbWUgZm9yIHByb2R1Y3Rpb24gKi8KLQotI2lmZGVmIERFQlVHCi0jZGVmaW5lIERQUklOVEYoeCwgYS4uLikgcHJpbnRrKEtFUk5fREVCVUcgIlc5OTY2OiAlcygpOiAieCwgX19mdW5jX18gLCAjI2EpCi0jZWxzZQotI2RlZmluZSBEUFJJTlRGKHguLi4pCi0jZW5kaWYKLQotLyoKLSAqCURlZmluZXMsIHNpbXBsZSB0eXBlZGVmcyBldGMuCi0gKi8KLQotI2RlZmluZSBXOTk2Nl9EUklWRVJOQU1FCSJXOTk2NkNGIFdlYmNhbSIKLSNkZWZpbmUgVzk5NjZfTUFYQ0FNUwkJNAkvKiBNYXhpbXVtIG51bWJlciBvZiBjYW1lcmFzICovCi0jZGVmaW5lIFc5OTY2X1JCVUZGRVIJCTIwNDgJLyogUmVhZCBidWZmZXIgKG11c3QgYmUgYW4gZXZlbiBudW1iZXIpICovCi0jZGVmaW5lIFc5OTY2X1NSQU1TSVpFCQkxMzEwNzIJLyogMTI4a2IgKi8KLSNkZWZpbmUgVzk5NjZfU1JBTUlECQkweDAyCS8qIGNoZWNrIHc5OTY2Y2YucGRmICovCi0KLS8qIEVtcGlyaWNhbGx5IGRldGVybWluZWQgd2luZG93IGxpbWl0cyAqLwotI2RlZmluZSBXOTk2Nl9XTkRfTUlOX1gJCTE2Ci0jZGVmaW5lIFc5OTY2X1dORF9NSU5fWQkJMTQKLSNkZWZpbmUgVzk5NjZfV05EX01BWF9YCQk3MDUKLSNkZWZpbmUgVzk5NjZfV05EX01BWF9ZCQkyNTMKLSNkZWZpbmUgVzk5NjZfV05EX01BWF9XCQkoVzk5NjZfV05EX01BWF9YIC0gVzk5NjZfV05EX01JTl9YKQotI2RlZmluZSBXOTk2Nl9XTkRfTUFYX0gJCShXOTk2Nl9XTkRfTUFYX1kgLSBXOTk2Nl9XTkRfTUlOX1kpCi0KLS8qIEtlZXAgdHJhY2sgb2Ygb3VyIGN1cnJlbnQgc3RhdGUgKi8KLSNkZWZpbmUgVzk5NjZfU1RBVEVfUERFVgkweDAxCi0jZGVmaW5lIFc5OTY2X1NUQVRFX0NMQUlNRUQJMHgwMgotI2RlZmluZSBXOTk2Nl9TVEFURV9WREVWCTB4MDQKLQotI2RlZmluZSBXOTk2Nl9JMkNfV19JRAkJMHg0OAotI2RlZmluZSBXOTk2Nl9JMkNfUl9JRAkJMHg0OQotI2RlZmluZSBXOTk2Nl9JMkNfUl9EQVRBCTB4MDgKLSNkZWZpbmUgVzk5NjZfSTJDX1JfQ0xPQ0sJMHgwNAotI2RlZmluZSBXOTk2Nl9JMkNfV19EQVRBCTB4MDIKLSNkZWZpbmUgVzk5NjZfSTJDX1dfQ0xPQ0sJMHgwMQotCi1zdHJ1Y3Qgdzk5NjYgewotCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKLQlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgaGRsOwotCXVuc2lnbmVkIGNoYXIgZGV2X3N0YXRlOwotCXVuc2lnbmVkIGNoYXIgaTJjX3N0YXRlOwotCXVuc2lnbmVkIHNob3J0IHBwbW9kZTsKLQlzdHJ1Y3QgcGFycG9ydCAqcHBvcnQ7Ci0Jc3RydWN0IHBhcmRldmljZSAqcGRldjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7Ci0JdW5zaWduZWQgc2hvcnQgd2lkdGg7Ci0JdW5zaWduZWQgc2hvcnQgaGVpZ2h0OwotCXVuc2lnbmVkIGNoYXIgYnJpZ2h0bmVzczsKLQlzaWduZWQgY2hhciBjb250cmFzdDsKLQlzaWduZWQgY2hhciBjb2xvcjsKLQlzaWduZWQgY2hhciBodWU7Ci0Jc3RydWN0IG11dGV4IGxvY2s7Ci19OwotCi0vKgotICoJTW9kdWxlIHNwZWNpZmljIHByb3BlcnRpZXMKLSAqLwotCi1NT0RVTEVfQVVUSE9SKCJKYWtvYiBLZW1pIDxqYWtvYi5rZW1pQHBvc3QudXRmb3JzLnNlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJXaW5ib25kIHc5OTY2Y2YgV2ViQ2FtIGRyaXZlciAoMC4zMikiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9WRVJTSU9OKCIwLjMzLjEiKTsKLQotI2lmZGVmIE1PRFVMRQotc3RhdGljIGNoYXIgKnBhcmRldltdID0ge1swIC4uLiBXOTk2Nl9NQVhDQU1TXSA9ICIifTsKLSNlbHNlCi1zdGF0aWMgY2hhciAqcGFyZGV2W10gPSB7WzAgLi4uIFc5OTY2X01BWENBTVNdID0gImFnZ3Jlc3NpdmUifTsKLSNlbmRpZgotbW9kdWxlX3BhcmFtX2FycmF5KHBhcmRldiwgY2hhcnAsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyhwYXJkZXYsICJwYXJkZXY6IHdoZXJlIHRvIHNlYXJjaCBmb3JcbiIKLQkJIlx0ZWFjaCBjYW1lcmEuICdhZ2dyZXNzaXZlJyBtZWFucyBicnV0ZS1mb3JjZSBzZWFyY2guXG4iCi0JCSJcdEVnOiA+cGFyZGV2PXBhcnBvcnQzLGFnZ3Jlc3NpdmUscGFycG9ydDIscGFycG9ydDE8IHdvdWxkIGFzc2lnblxuIgotCQkiXHRjYW0gMSB0byBwYXJwb3J0MyBhbmQgc2VhcmNoIGV2ZXJ5IHBhcnBvcnQgZm9yIGNhbSAyIGV0Yy4uLiIpOwotCi1zdGF0aWMgaW50IHBhcm1vZGU7Ci1tb2R1bGVfcGFyYW0ocGFybW9kZSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocGFybW9kZSwgInBhcm1vZGU6IHRyYW5zZmVyIG1vZGUgKDA9YXV0bywgMT1lY3AsIDI9ZXBwIik7Ci0KLXN0YXRpYyBpbnQgdmlkZW9fbnIgPSAtMTsKLW1vZHVsZV9wYXJhbSh2aWRlb19uciwgaW50LCAwKTsKLQotc3RhdGljIHN0cnVjdCB3OTk2NiB3OTk2Nl9jYW1zW1c5OTY2X01BWENBTVNdOwotCi0vKgotICoJUHJpdmF0ZSBmdW5jdGlvbiBkZWZpbmVzCi0gKi8KLQotCi0vKiBTZXQgY2FtZXJhIHBoYXNlIGZsYWdzLCBzbyB3ZSBrbm93IHdoYXQgdG8gdW5pbml0IHdoZW4gdGVybWluYXRpbmcgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB3OTk2Nl9zZXRfc3RhdGUoc3RydWN0IHc5OTY2ICpjYW0sIGludCBtYXNrLCBpbnQgdmFsKQotewotCWNhbS0+ZGV2X3N0YXRlID0gKGNhbS0+ZGV2X3N0YXRlICYgfm1hc2spIF4gdmFsOwotfQotCi0vKiBHZXQgY2FtZXJhIHBoYXNlIGZsYWdzICovCi1zdGF0aWMgaW5saW5lIGludCB3OTk2Nl9nZXRfc3RhdGUoc3RydWN0IHc5OTY2ICpjYW0sIGludCBtYXNrLCBpbnQgdmFsKQotewotCXJldHVybiAoKGNhbS0+ZGV2X3N0YXRlICYgbWFzaykgPT0gdmFsKTsKLX0KLQotLyogQ2xhaW0gcGFycG9ydCBmb3Igb3Vyc2VsZiAqLwotc3RhdGljIHZvaWQgdzk5NjZfcGRldl9jbGFpbShzdHJ1Y3Qgdzk5NjYgKmNhbSkKLXsKLQlpZiAodzk5NjZfZ2V0X3N0YXRlKGNhbSwgVzk5NjZfU1RBVEVfQ0xBSU1FRCwgVzk5NjZfU1RBVEVfQ0xBSU1FRCkpCi0JCXJldHVybjsKLQlwYXJwb3J0X2NsYWltX29yX2Jsb2NrKGNhbS0+cGRldik7Ci0Jdzk5NjZfc2V0X3N0YXRlKGNhbSwgVzk5NjZfU1RBVEVfQ0xBSU1FRCwgVzk5NjZfU1RBVEVfQ0xBSU1FRCk7Ci19Ci0KLS8qIFJlbGVhc2UgcGFycG9ydCBmb3Igb3RoZXJzIHRvIHVzZSAqLwotc3RhdGljIHZvaWQgdzk5NjZfcGRldl9yZWxlYXNlKHN0cnVjdCB3OTk2NiAqY2FtKQotewotCWlmICh3OTk2Nl9nZXRfc3RhdGUoY2FtLCBXOTk2Nl9TVEFURV9DTEFJTUVELCAwKSkKLQkJcmV0dXJuOwotCXBhcnBvcnRfcmVsZWFzZShjYW0tPnBkZXYpOwotCXc5OTY2X3NldF9zdGF0ZShjYW0sIFc5OTY2X1NUQVRFX0NMQUlNRUQsIDApOwotfQotCi0vKiBSZWFkIHJlZ2lzdGVyIGZyb20gVzk5NjYgaW50ZXJmYWNlLWNoaXAKLSAgIEV4cGVjdHMgYSBjbGFpbWVkIHBkZXYKLSAgIC0xIG9uIGVycm9yLCBlbHNlIHJlZ2lzdGVyIGRhdGEgKGJ5dGUpICovCi1zdGF0aWMgaW50IHc5OTY2X3JlYWRfcmVnKHN0cnVjdCB3OTk2NiAqY2FtLCBpbnQgcmVnKQotewotCS8qIEVDUCwgcmVhZCwgcmVndHJhbnNmZXIsIFJFRywgUkVHLCBSRUcsIFJFRywgUkVHICovCi0JY29uc3QgdW5zaWduZWQgY2hhciBhZGRyID0gMHg4MCB8IChyZWcgJiAweDFmKTsKLQl1bnNpZ25lZCBjaGFyIHZhbDsKLQotCWlmIChwYXJwb3J0X25lZ290aWF0ZShjYW0tPnBwb3J0LCBjYW0tPnBwbW9kZSB8IElFRUUxMjg0X0FERFIpICE9IDApCi0JCXJldHVybiAtMTsKLQlpZiAocGFycG9ydF93cml0ZShjYW0tPnBwb3J0LCAmYWRkciwgMSkgIT0gMSkKLQkJcmV0dXJuIC0xOwotCWlmIChwYXJwb3J0X25lZ290aWF0ZShjYW0tPnBwb3J0LCBjYW0tPnBwbW9kZSB8IElFRUUxMjg0X0RBVEEpICE9IDApCi0JCXJldHVybiAtMTsKLQlpZiAocGFycG9ydF9yZWFkKGNhbS0+cHBvcnQsICZ2YWwsIDEpICE9IDEpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLS8qIFdyaXRlIHJlZ2lzdGVyIHRvIFc5OTY2IGludGVyZmFjZS1jaGlwCi0gICBFeHBlY3RzIGEgY2xhaW1lZCBwZGV2Ci0gICAtMSBvbiBlcnJvciAqLwotc3RhdGljIGludCB3OTk2Nl93cml0ZV9yZWcoc3RydWN0IHc5OTY2ICpjYW0sIGludCByZWcsIGludCBkYXRhKQotewotCS8qIEVDUCwgd3JpdGUsIHJlZ3RyYW5zZmVyLCBSRUcsIFJFRywgUkVHLCBSRUcsIFJFRyAqLwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgYWRkciA9IDB4YzAgfCAocmVnICYgMHgxZik7Ci0JY29uc3QgdW5zaWduZWQgY2hhciB2YWwgPSBkYXRhOwotCi0JaWYgKHBhcnBvcnRfbmVnb3RpYXRlKGNhbS0+cHBvcnQsIGNhbS0+cHBtb2RlIHwgSUVFRTEyODRfQUREUikgIT0gMCkKLQkJcmV0dXJuIC0xOwotCWlmIChwYXJwb3J0X3dyaXRlKGNhbS0+cHBvcnQsICZhZGRyLCAxKSAhPSAxKQotCQlyZXR1cm4gLTE7Ci0JaWYgKHBhcnBvcnRfbmVnb3RpYXRlKGNhbS0+cHBvcnQsIGNhbS0+cHBtb2RlIHwgSUVFRTEyODRfREFUQSkgIT0gMCkKLQkJcmV0dXJuIC0xOwotCWlmIChwYXJwb3J0X3dyaXRlKGNhbS0+cHBvcnQsICZ2YWwsIDEpICE9IDEpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiAwOwotfQotCi0vKgotICoJVWdseSBhbmQgcHJpbWl0aXZlIGkyYyBwcm90b2NvbCBmdW5jdGlvbnMKLSAqLwotCi0vKiBTZXRzIHRoZSBkYXRhIGxpbmUgb24gdGhlIGkyYyBidXMuCi0gICBFeHBlY3RzIGEgY2xhaW1lZCBwZGV2LiAqLwotc3RhdGljIHZvaWQgdzk5NjZfaTJjX3NldHNkYShzdHJ1Y3Qgdzk5NjYgKmNhbSwgaW50IHN0YXRlKQotewotCWlmIChzdGF0ZSkKLQkJY2FtLT5pMmNfc3RhdGUgfD0gVzk5NjZfSTJDX1dfREFUQTsKLQllbHNlCi0JCWNhbS0+aTJjX3N0YXRlICY9IH5XOTk2Nl9JMkNfV19EQVRBOwotCi0Jdzk5NjZfd3JpdGVfcmVnKGNhbSwgMHgxOCwgY2FtLT5pMmNfc3RhdGUpOwotCXVkZWxheSg1KTsKLX0KLQotLyogR2V0IHBlcmlwaGVyYWwgY2xvY2sgbGluZQotICAgRXhwZWN0cyBhIGNsYWltZWQgcGRldi4gKi8KLXN0YXRpYyBpbnQgdzk5NjZfaTJjX2dldHNjbChzdHJ1Y3Qgdzk5NjYgKmNhbSkKLXsKLQljb25zdCB1bnNpZ25lZCBjaGFyIHN0YXRlID0gdzk5NjZfcmVhZF9yZWcoY2FtLCAweDE4KTsKLQlyZXR1cm4gKChzdGF0ZSAmIFc5OTY2X0kyQ19SX0NMT0NLKSA+IDApOwotfQotCi0vKiBTZXRzIHRoZSBjbG9jayBsaW5lIG9uIHRoZSBpMmMgYnVzLgotICAgRXhwZWN0cyBhIGNsYWltZWQgcGRldi4gLTEgb24gZXJyb3IgKi8KLXN0YXRpYyBpbnQgdzk5NjZfaTJjX3NldHNjbChzdHJ1Y3Qgdzk5NjYgKmNhbSwgaW50IHN0YXRlKQotewotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQotCWlmIChzdGF0ZSkKLQkJY2FtLT5pMmNfc3RhdGUgfD0gVzk5NjZfSTJDX1dfQ0xPQ0s7Ci0JZWxzZQotCQljYW0tPmkyY19zdGF0ZSAmPSB+Vzk5NjZfSTJDX1dfQ0xPQ0s7Ci0KLQl3OTk2Nl93cml0ZV9yZWcoY2FtLCAweDE4LCBjYW0tPmkyY19zdGF0ZSk7Ci0JdWRlbGF5KDUpOwotCi0JLyogd2UgZ28gdG8gaGlnaCwgd2UgYWxzbyBleHBlY3QgdGhlIHBlcmlwaGVyYWwgdG8gYWNrLiAqLwotCWlmIChzdGF0ZSkgewotCQl0aW1lb3V0ID0gamlmZmllcyArIDEwMDsKLQkJd2hpbGUgKCF3OTk2Nl9pMmNfZ2V0c2NsKGNhbSkpIHsKLQkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQotCQkJCXJldHVybiAtMTsKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotI2lmIDAKLS8qIEdldCBwZXJpcGhlcmFsIGRhdGEgbGluZQotICAgRXhwZWN0cyBhIGNsYWltZWQgcGRldi4gKi8KLXN0YXRpYyBpbnQgdzk5NjZfaTJjX2dldHNkYShzdHJ1Y3Qgdzk5NjYgKmNhbSkKLXsKLQljb25zdCB1bnNpZ25lZCBjaGFyIHN0YXRlID0gdzk5NjZfcmVhZF9yZWcoY2FtLCAweDE4KTsKLQlyZXR1cm4gKChzdGF0ZSAmIFc5OTY2X0kyQ19SX0RBVEEpID4gMCk7Ci19Ci0jZW5kaWYKLQotLyogV3JpdGUgYSBieXRlIHdpdGggYWNrIHRvIHRoZSBpMmMgYnVzLgotICAgRXhwZWN0cyBhIGNsYWltZWQgcGRldi4gLTEgb24gZXJyb3IgKi8KLXN0YXRpYyBpbnQgdzk5NjZfaTJjX3dieXRlKHN0cnVjdCB3OTk2NiAqY2FtLCBpbnQgZGF0YSkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDc7IGkgPj0gMDsgaS0tKSB7Ci0JCXc5OTY2X2kyY19zZXRzZGEoY2FtLCAoZGF0YSA+PiBpKSAmIDB4MDEpOwotCi0JCWlmICh3OTk2Nl9pMmNfc2V0c2NsKGNhbSwgMSkgPT0gLTEpCi0JCQlyZXR1cm4gLTE7Ci0JCXc5OTY2X2kyY19zZXRzY2woY2FtLCAwKTsKLQl9Ci0KLQl3OTk2Nl9pMmNfc2V0c2RhKGNhbSwgMSk7Ci0KLQlpZiAodzk5NjZfaTJjX3NldHNjbChjYW0sIDEpID09IC0xKQotCQlyZXR1cm4gLTE7Ci0Jdzk5NjZfaTJjX3NldHNjbChjYW0sIDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFJlYWQgYSBkYXRhIGJ5dGUgd2l0aCBhY2sgZnJvbSB0aGUgaTJjLWJ1cwotICAgRXhwZWN0cyBhIGNsYWltZWQgcGRldi4gLTEgb24gZXJyb3IgKi8KLSNpZiAwCi1zdGF0aWMgaW50IHc5OTY2X2kyY19yYnl0ZShzdHJ1Y3Qgdzk5NjYgKmNhbSkKLXsKLQl1bnNpZ25lZCBjaGFyIGRhdGEgPSAweDAwOwotCWludCBpOwotCi0Jdzk5NjZfaTJjX3NldHNkYShjYW0sIDEpOwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlpZiAodzk5NjZfaTJjX3NldHNjbChjYW0sIDEpID09IC0xKQotCQkJcmV0dXJuIC0xOwotCQlkYXRhID0gZGF0YSA8PCAxOwotCQlpZiAodzk5NjZfaTJjX2dldHNkYShjYW0pKQotCQkJZGF0YSB8PSAweDAxOwotCi0JCXc5OTY2X2kyY19zZXRzY2woY2FtLCAwKTsKLQl9Ci0JcmV0dXJuIGRhdGE7Ci19Ci0jZW5kaWYKLQotLyogUmVhZCBhIHJlZ2lzdGVyIGZyb20gdGhlIGkyYyBkZXZpY2UuCi0gICBFeHBlY3RzIGNsYWltZWQgcGRldi4gLTEgb24gZXJyb3IgKi8KLSNpZiAwCi1zdGF0aWMgaW50IHc5OTY2X3JlYWRfcmVnX2kyYyhzdHJ1Y3Qgdzk5NjYgKmNhbSwgaW50IHJlZykKLXsKLQlpbnQgZGF0YTsKLQotCXc5OTY2X2kyY19zZXRzZGEoY2FtLCAwKTsKLQl3OTk2Nl9pMmNfc2V0c2NsKGNhbSwgMCk7Ci0KLQlpZiAodzk5NjZfaTJjX3dieXRlKGNhbSwgVzk5NjZfSTJDX1dfSUQpID09IC0xIHx8Ci0JICAgIHc5OTY2X2kyY193Ynl0ZShjYW0sIHJlZykgPT0gLTEpCi0JCXJldHVybiAtMTsKLQotCXc5OTY2X2kyY19zZXRzZGEoY2FtLCAxKTsKLQlpZiAodzk5NjZfaTJjX3NldHNjbChjYW0sIDEpID09IC0xKQotCQlyZXR1cm4gLTE7Ci0Jdzk5NjZfaTJjX3NldHNkYShjYW0sIDApOwotCXc5OTY2X2kyY19zZXRzY2woY2FtLCAwKTsKLQotCWlmICh3OTk2Nl9pMmNfd2J5dGUoY2FtLCBXOTk2Nl9JMkNfUl9JRCkgPT0gLTEpCi0JCXJldHVybiAtMTsKLQlkYXRhID0gdzk5NjZfaTJjX3JieXRlKGNhbSk7Ci0JaWYgKGRhdGEgPT0gLTEpCi0JCXJldHVybiAtMTsKLQotCXc5OTY2X2kyY19zZXRzZGEoY2FtLCAwKTsKLQotCWlmICh3OTk2Nl9pMmNfc2V0c2NsKGNhbSwgMSkgPT0gLTEpCi0JCXJldHVybiAtMTsKLQl3OTk2Nl9pMmNfc2V0c2RhKGNhbSwgMSk7Ci0KLQlyZXR1cm4gZGF0YTsKLX0KLSNlbmRpZgotCi0vKiBXcml0ZSBhIHJlZ2lzdGVyIHRvIHRoZSBpMmMgZGV2aWNlLgotICAgRXhwZWN0cyBjbGFpbWVkIHBkZXYuIC0xIG9uIGVycm9yICovCi1zdGF0aWMgaW50IHc5OTY2X3dyaXRlX3JlZ19pMmMoc3RydWN0IHc5OTY2ICpjYW0sIGludCByZWcsIGludCBkYXRhKQotewotCXc5OTY2X2kyY19zZXRzZGEoY2FtLCAwKTsKLQl3OTk2Nl9pMmNfc2V0c2NsKGNhbSwgMCk7Ci0KLQlpZiAodzk5NjZfaTJjX3dieXRlKGNhbSwgVzk5NjZfSTJDX1dfSUQpID09IC0xIHx8Ci0JCQl3OTk2Nl9pMmNfd2J5dGUoY2FtLCByZWcpID09IC0xIHx8Ci0JCQl3OTk2Nl9pMmNfd2J5dGUoY2FtLCBkYXRhKSA9PSAtMSkKLQkJcmV0dXJuIC0xOwotCi0Jdzk5NjZfaTJjX3NldHNkYShjYW0sIDApOwotCWlmICh3OTk2Nl9pMmNfc2V0c2NsKGNhbSwgMSkgPT0gLTEpCi0JCXJldHVybiAtMTsKLQotCXc5OTY2X2kyY19zZXRzZGEoY2FtLCAxKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBGaW5kIGEgZ29vZCBsZW5ndGggZm9yIGNhcHR1cmUgd2luZG93ICh1c2VkIGJvdGggZm9yIFcgYW5kIEgpCi0gICBBIGJpdCB1Z2x5IGJ1dCBwcmV0dHkgZnVuY3Rpb25hbC4gVGhlIGNhcHR1cmUgbGVuZ3RoCi0gICBoYXZlIHRvIG1hdGNoIHRoZSBkb3duc2NhbGUgKi8KLXN0YXRpYyBpbnQgdzk5NjZfZmluZGxlbihpbnQgbmVhciwgaW50IHNpemUsIGludCBtYXhsZW4pCi17Ci0JaW50IGJlc3RsZW4gPSBzaXplOwotCWludCBiZXN0ZXJyID0gYWJzKG5lYXIgLSBiZXN0bGVuKTsKLQlpbnQgbGVuOwotCi0JZm9yIChsZW4gPSBzaXplICsgMTsgbGVuIDwgbWF4bGVuOyBsZW4rKykgewotCQlpbnQgZXJyOwotCQlpZiAoKCg2NCAqIHNpemUpICUgbGVuKSAhPSAwKQotCQkJY29udGludWU7Ci0KLQkJZXJyID0gYWJzKG5lYXIgLSBsZW4pOwotCi0JCS8qIE9ubHkgY29udGludWUgYXMgbG9uZyBhcyB3ZSBrZWVwIGdldHRpbmcgYmV0dGVyIHZhbHVlcyAqLwotCQlpZiAoZXJyID4gYmVzdGVycikKLQkJCWJyZWFrOwotCi0JCWJlc3RlcnIgPSBlcnI7Ci0JCWJlc3RsZW4gPSBsZW47Ci0JfQotCi0JcmV0dXJuIGJlc3RsZW47Ci19Ci0KLS8qIE1vZGlmeSBjYXB0dXJlIHdpbmRvdyAoaWYgbmVjZXNzYXJ5KQotICAgYW5kIGNhbGN1bGF0ZSBkb3duc2NhbGluZwotICAgUmV0dXJuIC0xIG9uIGVycm9yICovCi1zdGF0aWMgaW50IHc5OTY2X2NhbGNzY2FsZShpbnQgc2l6ZSwgaW50IG1pbiwgaW50IG1heCwgaW50ICpiZWcsIGludCAqZW5kLCB1bnNpZ25lZCBjaGFyICpmYWN0b3IpCi17Ci0JaW50IG1heGxlbiA9IG1heCAtIG1pbjsKLQlpbnQgbGVuID0gKmVuZCAtICpiZWcgKyAxOwotCWludCBuZXdsZW4gPSB3OTk2Nl9maW5kbGVuKGxlbiwgc2l6ZSwgbWF4bGVuKTsKLQlpbnQgZXJyID0gbmV3bGVuIC0gbGVuOwotCi0JLyogQ2hlY2sgZm9yIGJhZCBmb3JtYXQgKi8KLQlpZiAobmV3bGVuID4gbWF4bGVuIHx8IG5ld2xlbiA8IHNpemUpCi0JCXJldHVybiAtMTsKLQotCS8qIFNldCBmYWN0b3IgKDYgYml0IGZpeGVkKSAqLwotCSpmYWN0b3IgPSAoNjQgKiBzaXplKSAvIG5ld2xlbjsKLQlpZiAoKmZhY3RvciA9PSA2NCkKLQkJKmZhY3RvciA9IDB4MDA7CS8qIGRvd25zY2FsZSBpcyBkaXNhYmxlZCAqLwotCWVsc2UKLQkJKmZhY3RvciB8PSAweDgwOyAvKiBzZXQgZG93bnNjYWxlLWVuYWJsZSBiaXQgKi8KLQotCS8qIE1vZGlmeSBvbGQgYmVnaW5uaW5nIGFuZCBlbmQgKi8KLQkqYmVnIC09IGVyciAvIDI7Ci0JKmVuZCArPSBlcnIgLSAoZXJyIC8gMik7Ci0KLQkvKiBNb3ZlIHdpbmRvdyBpZiBvdXRzaWRlIGJvcmRlcnMgKi8KLQlpZiAoKmJlZyA8IG1pbikgewotCQkqZW5kICs9IG1pbiAtICpiZWc7Ci0JCSpiZWcgKz0gbWluIC0gKmJlZzsKLQl9Ci0JaWYgKCplbmQgPiBtYXgpIHsKLQkJKmJlZyAtPSAqZW5kIC0gbWF4OwotCQkqZW5kIC09ICplbmQgLSBtYXg7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFNldHVwIHRoZSBjYW1lcmFzIGNhcHR1cmUgd2luZG93IGV0Yy4KLSAgIEV4cGVjdHMgYSBjbGFpbWVkIHBkZXYKLSAgIHJldHVybiAtMSBvbiBlcnJvciAqLwotc3RhdGljIGludCB3OTk2Nl9zZXR1cChzdHJ1Y3Qgdzk5NjYgKmNhbSwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBpbnQgdywgaW50IGgpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JdW5zaWduZWQgaW50IGVuaF9zLCBlbmhfZTsKLQl1bnNpZ25lZCBjaGFyIHNjYWxlX3gsIHNjYWxlX3k7Ci0JdW5zaWduZWQgY2hhciByZWdzWzB4MWNdOwotCXVuc2lnbmVkIGNoYXIgc2FhNzExMV9yZWdzW10gPSB7Ci0JCTB4MjEsIDB4MDAsIDB4ZDgsIDB4MjMsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MDAsCi0JCTB4ODgsIDB4MTAsIDB4ODAsIDB4NDAsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MDAsCi0JCTB4NDgsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCTB4MDAsIDB4MDAsIDB4MDAsIDB4NzEsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4YzAKLQl9OwotCi0KLQlpZiAodyAqIGggKiAyID4gVzk5NjZfU1JBTVNJWkUpIHsKLQkJRFBSSU5URigiY2FwdHVyZSB3aW5kb3cgZXhjZWVkcyBTUkFNIHNpemUhLlxuIik7Ci0JCXcgPSAyMDA7IGggPSAxNjA7CS8qIFBpY2sgZGVmYXVsdCB2YWx1ZXMgKi8KLQl9Ci0KLQl3ICY9IH4weDE7Ci0JaWYgKHcgPCAyKQotCQl3ID0gMjsKLQlpZiAoaCA8IDEpCi0JCWggPSAxOwotCWlmICh3ID4gVzk5NjZfV05EX01BWF9XKQotCQl3ID0gVzk5NjZfV05EX01BWF9XOwotCWlmIChoID4gVzk5NjZfV05EX01BWF9IKQotCQloID0gVzk5NjZfV05EX01BWF9IOwotCi0JY2FtLT53aWR0aCA9IHc7Ci0JY2FtLT5oZWlnaHQgPSBoOwotCi0JZW5oX3MgPSAwOwotCWVuaF9lID0gdyAqIGggKiAyOwotCi0JLyogTW9kaWZ5IGNhcHR1cmUgd2luZG93IGlmIG5lY2Vzc2FyeSBhbmQgY2FsY3VsYXRlIGRvd25zY2FsaW5nICovCi0JaWYgKHc5OTY2X2NhbGNzY2FsZSh3LCBXOTk2Nl9XTkRfTUlOX1gsIFc5OTY2X1dORF9NQVhfWCwgJngxLCAmeDIsICZzY2FsZV94KSAhPSAwIHx8Ci0JCQl3OTk2Nl9jYWxjc2NhbGUoaCwgVzk5NjZfV05EX01JTl9ZLCBXOTk2Nl9XTkRfTUFYX1ksICZ5MSwgJnkyLCAmc2NhbGVfeSkgIT0gMCkKLQkJcmV0dXJuIC0xOwotCi0JRFBSSU5URigiJWR4JWQsIHg6ICVkPC0+JWQsIHk6ICVkPC0+JWQsIHN4OiAlZC82NCwgc3k6ICVkLzY0LlxuIiwKLQkJCXcsIGgsIHgxLCB4MiwgeTEsIHkyLCBzY2FsZV94ICYgfjB4ODAsIHNjYWxlX3kgJiB+MHg4MCk7Ci0KLQkvKiBTZXR1cCByZWdpc3RlcnMgKi8KLQlyZWdzWzB4MDBdID0gMHgwMDsJCQkvKiBTZXQgbm9ybWFsIG9wZXJhdGlvbiAqLwotCXJlZ3NbMHgwMV0gPSAweDE4OwkJCS8qIENhcHR1cmUgbW9kZSAqLwotCXJlZ3NbMHgwMl0gPSBzY2FsZV95OwkJCS8qIFYtc2NhbGluZyAqLwotCXJlZ3NbMHgwM10gPSBzY2FsZV94OwkJCS8qIEgtc2NhbGluZyAqLwotCi0JLyogQ2FwdHVyZSB3aW5kb3cgKi8KLQlyZWdzWzB4MDRdID0gKHgxICYgMHgwZmYpOwkJLyogWC1zdGFydCAoOCBsb3cgYml0cykgKi8KLQlyZWdzWzB4MDVdID0gKHgxICYgMHgzMDApPj44OwkJLyogWC1zdGFydCAoMiBoaWdoIGJpdHMpICovCi0JcmVnc1sweDA2XSA9ICh5MSAmIDB4MGZmKTsJCS8qIFktc3RhcnQgKDggbG93IGJpdHMpICovCi0JcmVnc1sweDA3XSA9ICh5MSAmIDB4MzAwKT4+ODsJCS8qIFktc3RhcnQgKDIgaGlnaCBiaXRzKSAqLwotCXJlZ3NbMHgwOF0gPSAoeDIgJiAweDBmZik7CQkvKiBYLWVuZCAoOCBsb3cgYml0cykgKi8KLQlyZWdzWzB4MDldID0gKHgyICYgMHgzMDApPj44OwkJLyogWC1lbmQgKDIgaGlnaCBiaXRzKSAqLwotCXJlZ3NbMHgwYV0gPSAoeTIgJiAweDBmZik7CQkvKiBZLWVuZCAoOCBsb3cgYml0cykgKi8KLQotCXJlZ3NbMHgwY10gPSBXOTk2Nl9TUkFNSUQ7CQkvKiBTUkFNLWJhbmtzICgxeCAxMjhrYikgKi8KLQotCS8qIEVuaGFuY2VtZW50IGxheWVyICovCi0JcmVnc1sweDBkXSA9IChlbmhfcyAmIDB4MDAwZmYpOwkJLyogRW5oLiBzdGFydCAoMC03KSAqLwotCXJlZ3NbMHgwZV0gPSAoZW5oX3MgJiAweDBmZjAwKSA+PiA4OwkvKiBFbmguIHN0YXJ0ICg4LTE1KSAqLwotCXJlZ3NbMHgwZl0gPSAoZW5oX3MgJiAweDcwMDAwKSA+PiAxNjsJLyogRW5oLiBzdGFydCAoMTYtMTcvMTg/PykgKi8KLQlyZWdzWzB4MTBdID0gKGVuaF9lICYgMHgwMDBmZik7CQkvKiBFbmguIGVuZCAoMC03KSAqLwotCXJlZ3NbMHgxMV0gPSAoZW5oX2UgJiAweDBmZjAwKSA+PiA4OwkvKiBFbmguIGVuZCAoOC0xNSkgKi8KLQlyZWdzWzB4MTJdID0gKGVuaF9lICYgMHg3MDAwMCkgPj4gMTY7CS8qIEVuaC4gZW5kICgxNi0xNy8xOD8/KSAqLwotCi0JLyogTWlzYyAqLwotCXJlZ3NbMHgxM10gPSAweDQwOwkJCS8qIFZFRSBjb250cm9sIChyYXcgNDoyOjIpICovCi0JcmVnc1sweDE3XSA9IDB4MDA7CQkJLyogPz8/ICovCi0JcmVnc1sweDE4XSA9IGNhbS0+aTJjX3N0YXRlID0gMHgwMDsJLyogU2VyaWFsIGJ1cyAqLwotCXJlZ3NbMHgxOV0gPSAweGZmOwkJCS8qIEkvTyBwb3J0IGRpcmVjdGlvbiBjb250cm9sICovCi0JcmVnc1sweDFhXSA9IDB4ZmY7CQkJLyogSS9PIHBvcnQgZGF0YSByZWdpc3RlciAqLwotCXJlZ3NbMHgxYl0gPSAweDEwOwkJCS8qID8/PyAqLwotCi0JLyogU0FBNzExMSBjaGlwIHNldHRpbmdzICovCi0Jc2FhNzExMV9yZWdzWzB4MGFdID0gY2FtLT5icmlnaHRuZXNzOwotCXNhYTcxMTFfcmVnc1sweDBiXSA9IGNhbS0+Y29udHJhc3Q7Ci0Jc2FhNzExMV9yZWdzWzB4MGNdID0gY2FtLT5jb2xvcjsKLQlzYWE3MTExX3JlZ3NbMHgwZF0gPSBjYW0tPmh1ZTsKLQotCS8qIFJlc2V0IChFQ1AtZmlmbyAmIHNlcmlhbC1idXMpICovCi0JaWYgKHc5OTY2X3dyaXRlX3JlZyhjYW0sIDB4MDAsIDB4MDMpID09IC0xKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBXcml0ZSByZWdzIHRvIHc5OTY2Y2YgY2hpcCAqLwotCWZvciAoaSA9IDA7IGkgPCAweDFjOyBpKyspCi0JCWlmICh3OTk2Nl93cml0ZV9yZWcoY2FtLCBpLCByZWdzW2ldKSA9PSAtMSkKLQkJCXJldHVybiAtMTsKLQotCS8qIFdyaXRlIHJlZ3MgdG8gc2FhNzExMSBjaGlwICovCi0JZm9yIChpID0gMDsgaSA8IDB4MjA7IGkrKykKLQkJaWYgKHc5OTY2X3dyaXRlX3JlZ19pMmMoY2FtLCBpLCBzYWE3MTExX3JlZ3NbaV0pID09IC0xKQotCQkJcmV0dXJuIC0xOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKglWaWRlbzRsaW51eCBpbnRlcmZhY2luZwotICovCi0KLXN0YXRpYyBpbnQgY2FtX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdmNhcCkKLXsKLQlzdHJ1Y3Qgdzk5NjYgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQlzdHJsY3B5KHZjYXAtPmRyaXZlciwgY2FtLT52NGwyX2Rldi5uYW1lLCBzaXplb2YodmNhcC0+ZHJpdmVyKSk7Ci0Jc3RybGNweSh2Y2FwLT5jYXJkLCBXOTk2Nl9EUklWRVJOQU1FLCBzaXplb2YodmNhcC0+Y2FyZCkpOwotCXN0cmxjcHkodmNhcC0+YnVzX2luZm8sICJwYXJwb3J0Iiwgc2l6ZW9mKHZjYXAtPmJ1c19pbmZvKSk7Ci0JdmNhcC0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfUkVBRFdSSVRFOwotCXZjYXAtPmNhcGFiaWxpdGllcyA9IHZjYXAtPmRldmljZV9jYXBzIHwgVjRMMl9DQVBfREVWSUNFX0NBUFM7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2FtX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqdmluKQotewotCWlmICh2aW4tPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jc3RybGNweSh2aW4tPm5hbWUsICJDYW1lcmEiLCBzaXplb2YodmluLT5uYW1lKSk7Ci0JdmluLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKLQl2aW4tPmF1ZGlvc2V0ID0gMDsKLQl2aW4tPnR1bmVyID0gMDsKLQl2aW4tPnN0ZCA9IDA7Ci0JdmluLT5zdGF0dXMgPSAwOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNhbV9nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50ICppbnApCi17Ci0JKmlucCA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2FtX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgaW5wKQotewotCXJldHVybiAoaW5wID4gMCkgPyAtRUlOVkFMIDogMDsKLX0KLQotc3RhdGljIGludCBjYW1fc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCi17Ci0Jc3RydWN0IHc5OTY2ICpjYW0gPQotCQljb250YWluZXJfb2YoY3RybC0+aGFuZGxlciwgc3RydWN0IHc5OTY2LCBoZGwpOwotCWludCByZXQgPSAwOwotCi0JbXV0ZXhfbG9jaygmY2FtLT5sb2NrKTsKLQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQljYW0tPmJyaWdodG5lc3MgPSBjdHJsLT52YWw7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JCWNhbS0+Y29udHJhc3QgPSBjdHJsLT52YWw7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJY2FtLT5jb2xvciA9IGN0cmwtPnZhbDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCWNhbS0+aHVlID0gY3RybC0+dmFsOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQlpZiAocmV0ID09IDApIHsKLQkJdzk5NjZfcGRldl9jbGFpbShjYW0pOwotCi0JCWlmICh3OTk2Nl93cml0ZV9yZWdfaTJjKGNhbSwgMHgwYSwgY2FtLT5icmlnaHRuZXNzKSA9PSAtMSB8fAotCQkgICAgdzk5NjZfd3JpdGVfcmVnX2kyYyhjYW0sIDB4MGIsIGNhbS0+Y29udHJhc3QpID09IC0xIHx8Ci0JCSAgICB3OTk2Nl93cml0ZV9yZWdfaTJjKGNhbSwgMHgwYywgY2FtLT5jb2xvcikgPT0gLTEgfHwKLQkJICAgIHc5OTY2X3dyaXRlX3JlZ19pMmMoY2FtLCAweDBkLCBjYW0tPmh1ZSkgPT0gLTEpIHsKLQkJCXJldCA9IC1FSU87Ci0JCX0KLQotCQl3OTk2Nl9wZGV2X3JlbGVhc2UoY2FtKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZjYW0tPmxvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgY2FtX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKLXsKLQlzdHJ1Y3Qgdzk5NjYgKmNhbSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmZtdC0+Zm10LnBpeDsKLQotCXBpeC0+d2lkdGggPSBjYW0tPndpZHRoOwotCXBpeC0+aGVpZ2h0ID0gY2FtLT5oZWlnaHQ7Ci0JcGl4LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOwotCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Ci0JcGl4LT5ieXRlc3BlcmxpbmUgPSAyICogY2FtLT53aWR0aDsKLQlwaXgtPnNpemVpbWFnZSA9IDIgKiBjYW0tPndpZHRoICogY2FtLT5oZWlnaHQ7Ci0JLyogSnVzdCBhIGd1ZXNzICovCi0JcGl4LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjYW1fdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCi17Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmZtdC0+Zm10LnBpeDsKLQotCWlmIChwaXgtPndpZHRoIDwgMikKLQkJcGl4LT53aWR0aCA9IDI7Ci0JaWYgKHBpeC0+aGVpZ2h0IDwgMSkKLQkJcGl4LT5oZWlnaHQgPSAxOwotCWlmIChwaXgtPndpZHRoID4gVzk5NjZfV05EX01BWF9XKQotCQlwaXgtPndpZHRoID0gVzk5NjZfV05EX01BWF9XOwotCWlmIChwaXgtPmhlaWdodCA+IFc5OTY2X1dORF9NQVhfSCkKLQkJcGl4LT5oZWlnaHQgPSBXOTk2Nl9XTkRfTUFYX0g7Ci0JcGl4LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOwotCXBpeC0+ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7Ci0JcGl4LT5ieXRlc3BlcmxpbmUgPSAyICogcGl4LT53aWR0aDsKLQlwaXgtPnNpemVpbWFnZSA9IDIgKiBwaXgtPndpZHRoICogcGl4LT5oZWlnaHQ7Ci0JLyogSnVzdCBhIGd1ZXNzICovCi0JcGl4LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjYW1fc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQotewotCXN0cnVjdCB3OTk2NiAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZm10LT5mbXQucGl4OwotCWludCByZXQgPSBjYW1fdHJ5X2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmbXQpOwotCi0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCW11dGV4X2xvY2soJmNhbS0+bG9jayk7Ci0JLyogVXBkYXRlIGNhbWVyYSByZWdzICovCi0Jdzk5NjZfcGRldl9jbGFpbShjYW0pOwotCXJldCA9IHc5OTY2X3NldHVwKGNhbSwgMCwgMCwgMTAyMywgMTAyMywgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOwotCXc5OTY2X3BkZXZfcmVsZWFzZShjYW0pOwotCW11dGV4X3VubG9jaygmY2FtLT5sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGNhbV9lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10KQotewotCXN0YXRpYyBzdHJ1Y3QgdjRsMl9mbXRkZXNjIGZvcm1hdHNbXSA9IHsKLQkJeyAwLCAwLCAwLAotCQkgICJZVVYgNDoyOjIiLCBWNEwyX1BJWF9GTVRfWVVZViwKLQkJICB7IDAsIDAsIDAsIDAgfQotCQl9LAotCX07Ci0JZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUgPSBmbXQtPnR5cGU7Ci0KLQlpZiAoZm10LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JKmZtdCA9IGZvcm1hdHNbZm10LT5pbmRleF07Ci0JZm10LT50eXBlID0gdHlwZTsKLQlyZXR1cm4gMDsKLX0KLQotLyogQ2FwdHVyZSBkYXRhICovCi1zdGF0aWMgc3NpemVfdCB3OTk2Nl92NGxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAgX191c2VyICpidWYsCi0JCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCB3OTk2NiAqY2FtID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQl1bnNpZ25lZCBjaGFyIGFkZHIgPSAweGEwOwkvKiBFQ1AsIHJlYWQsIENDRC10cmFuc2ZlciwgMDAwMDAgKi8KLQl1bnNpZ25lZCBjaGFyIF9fdXNlciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyIF9fdXNlciAqKWJ1ZjsKLQl1bnNpZ25lZCBsb25nIGRsZWZ0ID0gY291bnQ7Ci0JdW5zaWduZWQgY2hhciAqdGJ1ZjsKLQotCS8qIFdoeSB3b3VsZCBhbnlvbmUgd2FudCBtb3JlIHRoYW4gdGhpcz8/ICovCi0JaWYgKGNvdW50ID4gY2FtLT53aWR0aCAqIGNhbS0+aGVpZ2h0ICogMikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltdXRleF9sb2NrKCZjYW0tPmxvY2spOwotCXc5OTY2X3BkZXZfY2xhaW0oY2FtKTsKLQl3OTk2Nl93cml0ZV9yZWcoY2FtLCAweDAwLCAweDAyKTsJLyogUmVzZXQgRUNQLUZJRk8gYnVmZmVyICovCi0Jdzk5NjZfd3JpdGVfcmVnKGNhbSwgMHgwMCwgMHgwMCk7CS8qIFJldHVybiB0byBub3JtYWwgb3BlcmF0aW9uICovCi0Jdzk5NjZfd3JpdGVfcmVnKGNhbSwgMHgwMSwgMHg5OCk7CS8qIEVuYWJsZSBjYXB0dXJlICovCi0KLQkvKiB3cml0ZSBzcGVjaWFsIGNhcHR1cmUtYWRkciBhbmQgbmVnb3RpYXRlIGludG8gZGF0YSB0cmFuc2ZlciAqLwotCWlmICgocGFycG9ydF9uZWdvdGlhdGUoY2FtLT5wcG9ydCwgY2FtLT5wcG1vZGV8SUVFRTEyODRfQUREUikgIT0gMCkgfHwKLQkJCShwYXJwb3J0X3dyaXRlKGNhbS0+cHBvcnQsICZhZGRyLCAxKSAhPSAxKSB8fAotCQkJKHBhcnBvcnRfbmVnb3RpYXRlKGNhbS0+cHBvcnQsIGNhbS0+cHBtb2RlfElFRUUxMjg0X0RBVEEpICE9IDApKSB7Ci0JCXc5OTY2X3BkZXZfcmVsZWFzZShjYW0pOwotCQltdXRleF91bmxvY2soJmNhbS0+bG9jayk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCXRidWYgPSBrbWFsbG9jKFc5OTY2X1JCVUZGRVIsIEdGUF9LRVJORUwpOwotCWlmICh0YnVmID09IE5VTEwpIHsKLQkJY291bnQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9Ci0KLQl3aGlsZSAoZGxlZnQgPiAwKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdHNpemUgPSAoZGxlZnQgPiBXOTk2Nl9SQlVGRkVSKSA/IFc5OTY2X1JCVUZGRVIgOiBkbGVmdDsKLQotCQlpZiAocGFycG9ydF9yZWFkKGNhbS0+cHBvcnQsIHRidWYsIHRzaXplKSA8IHRzaXplKSB7Ci0JCQljb3VudCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAoY29weV90b191c2VyKGRlc3QsIHRidWYsIHRzaXplKSAhPSAwKSB7Ci0JCQljb3VudCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlkZXN0ICs9IHRzaXplOwotCQlkbGVmdCAtPSB0c2l6ZTsKLQl9Ci0KLQl3OTk2Nl93cml0ZV9yZWcoY2FtLCAweDAxLCAweDE4KTsJLyogRGlzYWJsZSBjYXB0dXJlICovCi0KLW91dDoKLQlrZnJlZSh0YnVmKTsKLQl3OTk2Nl9wZGV2X3JlbGVhc2UoY2FtKTsKLQltdXRleF91bmxvY2soJmNhbS0+bG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdzk5NjZfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gdjRsMl9maF9vcGVuLAotCS5yZWxlYXNlCT0gdjRsMl9maF9yZWxlYXNlLAotCS5wb2xsCQk9IHY0bDJfY3RybF9wb2xsLAotCS51bmxvY2tlZF9pb2N0bCA9IHZpZGVvX2lvY3RsMiwKLQkucmVhZCAgICAgICAgICAgPSB3OTk2Nl92NGxfcmVhZCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgdzk5NjZfaW9jdGxfb3BzID0gewotCS52aWRpb2NfcXVlcnljYXAgICAgCQkgICAgPSBjYW1fcXVlcnljYXAsCi0JLnZpZGlvY19nX2lucHV0ICAgICAgCQkgICAgPSBjYW1fZ19pbnB1dCwKLQkudmlkaW9jX3NfaW5wdXQgICAgICAJCSAgICA9IGNhbV9zX2lucHV0LAotCS52aWRpb2NfZW51bV9pbnB1dCAgIAkJICAgID0gY2FtX2VudW1faW5wdXQsCi0JLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwIAkgICAgPSBjYW1fZW51bV9mbXRfdmlkX2NhcCwKLQkudmlkaW9jX2dfZm10X3ZpZF9jYXAgCQkgICAgPSBjYW1fZ19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3NfZm10X3ZpZF9jYXAgIAkJICAgID0gY2FtX3NfZm10X3ZpZF9jYXAsCi0JLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgIAkgICAgPSBjYW1fdHJ5X2ZtdF92aWRfY2FwLAotCS52aWRpb2NfbG9nX3N0YXR1cwkJICAgID0gdjRsMl9jdHJsX2xvZ19zdGF0dXMsCi0JLnZpZGlvY19zdWJzY3JpYmVfZXZlbnQJCSAgICA9IHY0bDJfY3RybF9zdWJzY3JpYmVfZXZlbnQsCi0JLnZpZGlvY191bnN1YnNjcmliZV9ldmVudAkgICAgPSB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzIGNhbV9jdHJsX29wcyA9IHsKLQkuc19jdHJsID0gY2FtX3NfY3RybCwKLX07Ci0KLQotLyogSW5pdGlhbGl6ZSBjYW1lcmEgZGV2aWNlLiBTZXR1cCBhbGwgaW50ZXJuYWwgZmxhZ3MsIHNldCBhCi0gICBkZWZhdWx0IHZpZGVvIG1vZGUsIHNldHVwIGNjZC1jaGlwLCByZWdpc3RlciB2NGwgZGV2aWNlIGV0Yy4uCi0gICBBbHNvIHVzZWQgZm9yICdwcm9iaW5nJyBvZiBoYXJkd2FyZS4KLSAgIC0xIG9uIGVycm9yICovCi1zdGF0aWMgaW50IHc5OTY2X2luaXQoc3RydWN0IHc5OTY2ICpjYW0sIHN0cnVjdCBwYXJwb3J0ICpwb3J0KQotewotCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmY2FtLT52NGwyX2RldjsKLQotCWlmIChjYW0tPmRldl9zdGF0ZSAhPSAwKQotCQlyZXR1cm4gLTE7Ci0KLQlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAidzk5NjYiLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKLQotCWlmICh2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2RldikgPCAwKSB7Ci0JCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXY0bDJfY3RybF9oYW5kbGVyX2luaXQoJmNhbS0+aGRsLCA0KTsKLQl2NGwyX2N0cmxfbmV3X3N0ZCgmY2FtLT5oZGwsICZjYW1fY3RybF9vcHMsCi0JCQkgIFY0TDJfQ0lEX0JSSUdIVE5FU1MsIDAsIDI1NSwgMSwgMTI4KTsKLQl2NGwyX2N0cmxfbmV3X3N0ZCgmY2FtLT5oZGwsICZjYW1fY3RybF9vcHMsCi0JCQkgIFY0TDJfQ0lEX0NPTlRSQVNULCAtNjQsIDY0LCAxLCA2NCk7Ci0JdjRsMl9jdHJsX25ld19zdGQoJmNhbS0+aGRsLCAmY2FtX2N0cmxfb3BzLAotCQkJICBWNEwyX0NJRF9TQVRVUkFUSU9OLCAtNjQsIDY0LCAxLCA2NCk7Ci0JdjRsMl9jdHJsX25ld19zdGQoJmNhbS0+aGRsLCAmY2FtX2N0cmxfb3BzLAotCQkJICBWNEwyX0NJRF9IVUUsIC0xMjgsIDEyNywgMSwgMCk7Ci0JaWYgKGNhbS0+aGRsLmVycm9yKSB7Ci0JCXY0bDJfZXJyKHY0bDJfZGV2LCAiY291bGRuJ3QgcmVnaXN0ZXIgY29udHJvbHNcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCWNhbS0+cHBvcnQgPSBwb3J0OwotCWNhbS0+YnJpZ2h0bmVzcyA9IDEyODsKLQljYW0tPmNvbnRyYXN0ID0gNjQ7Ci0JY2FtLT5jb2xvciA9IDY0OwotCWNhbS0+aHVlID0gMDsKLQotCS8qIFNlbGVjdCByZXF1ZXN0ZWQgdHJhbnNmZXIgbW9kZSAqLwotCXN3aXRjaCAocGFybW9kZSkgewotCWRlZmF1bHQ6CS8qIEF1dG8tZGV0ZWN0IChwcmlvcml0eTogaHctZWNwLCBody1lcHAsIHN3LWVjcCkgKi8KLQljYXNlIDA6Ci0JCWlmIChwb3J0LT5tb2RlcyAmIFBBUlBPUlRfTU9ERV9FQ1ApCi0JCQljYW0tPnBwbW9kZSA9IElFRUUxMjg0X01PREVfRUNQOwotCQllbHNlIGlmIChwb3J0LT5tb2RlcyAmIFBBUlBPUlRfTU9ERV9FUFApCi0JCQljYW0tPnBwbW9kZSA9IElFRUUxMjg0X01PREVfRVBQOwotCQllbHNlCi0JCQljYW0tPnBwbW9kZSA9IElFRUUxMjg0X01PREVfRUNQOwotCQlicmVhazsKLQljYXNlIDE6CQkvKiBody0gb3Igc3ctZWNwICovCi0JCWNhbS0+cHBtb2RlID0gSUVFRTEyODRfTU9ERV9FQ1A7Ci0JCWJyZWFrOwotCWNhc2UgMjoJCS8qIGh3LSBvciBzdy1lcHAgKi8KLQkJY2FtLT5wcG1vZGUgPSBJRUVFMTI4NF9NT0RFX0VQUDsKLQkJYnJlYWs7Ci0JfQotCi0JLyogVGVsbCB0aGUgcGFycG9ydCBkcml2ZXIgdGhhdCB3ZSBleGlzdHMgKi8KLQljYW0tPnBkZXYgPSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShwb3J0LCAidzk5NjYiLCBOVUxMLCBOVUxMLCBOVUxMLCAwLCBOVUxMKTsKLQlpZiAoY2FtLT5wZGV2ID09IE5VTEwpIHsKLQkJRFBSSU5URigicGFycG9ydF9yZWdpc3Rlcl9kZXZpY2UoKSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXc5OTY2X3NldF9zdGF0ZShjYW0sIFc5OTY2X1NUQVRFX1BERVYsIFc5OTY2X1NUQVRFX1BERVYpOwotCi0Jdzk5NjZfcGRldl9jbGFpbShjYW0pOwotCi0JLyogU2V0dXAgYSBkZWZhdWx0IGNhcHR1cmUgbW9kZSAqLwotCWlmICh3OTk2Nl9zZXR1cChjYW0sIDAsIDAsIDEwMjMsIDEwMjMsIDIwMCwgMTYwKSAhPSAwKSB7Ci0JCURQUklOVEYoInc5OTY2X3NldHVwKCkgZmFpbGVkLlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQl3OTk2Nl9wZGV2X3JlbGVhc2UoY2FtKTsKLQotCS8qIEZpbGwgaW4gdGhlIHZpZGVvX2RldmljZSBzdHJ1Y3QgYW5kIHJlZ2lzdGVyIHVzIHRvIHY0bCAqLwotCXN0cmxjcHkoY2FtLT52ZGV2Lm5hbWUsIFc5OTY2X0RSSVZFUk5BTUUsIHNpemVvZihjYW0tPnZkZXYubmFtZSkpOwotCWNhbS0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OwotCWNhbS0+dmRldi5mb3BzID0gJnc5OTY2X2ZvcHM7Ci0JY2FtLT52ZGV2LmlvY3RsX29wcyA9ICZ3OTk2Nl9pb2N0bF9vcHM7Ci0JY2FtLT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKLQljYW0tPnZkZXYuY3RybF9oYW5kbGVyID0gJmNhbS0+aGRsOwotCXZpZGVvX3NldF9kcnZkYXRhKCZjYW0tPnZkZXYsIGNhbSk7Ci0KLQltdXRleF9pbml0KCZjYW0tPmxvY2spOwotCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FtLT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucikgPCAwKQotCQlyZXR1cm4gLTE7Ci0KLQl3OTk2Nl9zZXRfc3RhdGUoY2FtLCBXOTk2Nl9TVEFURV9WREVWLCBXOTk2Nl9TVEFURV9WREVWKTsKLQotCS8qIEFsbCBvayAqLwotCXY0bDJfaW5mbyh2NGwyX2RldiwgIkZvdW5kIGFuZCBpbml0aWFsaXplZCBhIHdlYmNhbSBvbiAlcy5cbiIsCi0JCQljYW0tPnBwb3J0LT5uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQotCi0vKiBUZXJtaW5hdGUgZXZlcnl0aGluZyBncmFjZWZ1bGx5ICovCi1zdGF0aWMgdm9pZCB3OTk2Nl90ZXJtKHN0cnVjdCB3OTk2NiAqY2FtKQotewotCS8qIFVucmVnaXN0ZXIgZnJvbSB2NGwgKi8KLQlpZiAodzk5NjZfZ2V0X3N0YXRlKGNhbSwgVzk5NjZfU1RBVEVfVkRFViwgVzk5NjZfU1RBVEVfVkRFVikpIHsKLQkJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+dmRldik7Ci0JCXc5OTY2X3NldF9zdGF0ZShjYW0sIFc5OTY2X1NUQVRFX1ZERVYsIDApOwotCX0KLQotCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmNhbS0+aGRsKTsKLQotCS8qIFRlcm1pbmF0ZSBmcm9tIElFRUUxMjg0IG1vZGUgYW5kIHJlbGVhc2UgcGRldiBibG9jayAqLwotCWlmICh3OTk2Nl9nZXRfc3RhdGUoY2FtLCBXOTk2Nl9TVEFURV9QREVWLCBXOTk2Nl9TVEFURV9QREVWKSkgewotCQl3OTk2Nl9wZGV2X2NsYWltKGNhbSk7Ci0JCXBhcnBvcnRfbmVnb3RpYXRlKGNhbS0+cHBvcnQsIElFRUUxMjg0X01PREVfQ09NUEFUKTsKLQkJdzk5NjZfcGRldl9yZWxlYXNlKGNhbSk7Ci0JfQotCi0JLyogVW5yZWdpc3RlciBmcm9tIHBhcnBvcnQgKi8KLQlpZiAodzk5NjZfZ2V0X3N0YXRlKGNhbSwgVzk5NjZfU1RBVEVfUERFViwgVzk5NjZfU1RBVEVfUERFVikpIHsKLQkJcGFycG9ydF91bnJlZ2lzdGVyX2RldmljZShjYW0tPnBkZXYpOwotCQl3OTk2Nl9zZXRfc3RhdGUoY2FtLCBXOTk2Nl9TVEFURV9QREVWLCAwKTsKLQl9Ci0JbWVtc2V0KGNhbSwgMCwgc2l6ZW9mKCpjYW0pKTsKLX0KLQotCi0vKiBDYWxsZWQgb25jZSBmb3IgZXZlcnkgcGFycG9ydCBvbiBpbml0ICovCi1zdGF0aWMgdm9pZCB3OTk2Nl9hdHRhY2goc3RydWN0IHBhcnBvcnQgKnBvcnQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgVzk5NjZfTUFYQ0FNUzsgaSsrKSB7Ci0JCWlmICh3OTk2Nl9jYW1zW2ldLmRldl9zdGF0ZSAhPSAwKQkvKiBDYW0gaXMgYWxyZWFkeSBhc3NpZ25lZCAqLwotCQkJY29udGludWU7Ci0JCWlmIChzdHJjbXAocGFyZGV2W2ldLCAiYWdncmVzc2l2ZSIpID09IDAgfHwgc3RyY21wKHBhcmRldltpXSwgcG9ydC0+bmFtZSkgPT0gMCkgewotCQkJaWYgKHc5OTY2X2luaXQoJnc5OTY2X2NhbXNbaV0sIHBvcnQpICE9IDApCi0JCQkJdzk5NjZfdGVybSgmdzk5NjZfY2Ftc1tpXSk7Ci0JCQlicmVhazsJLyogcmV0dXJuICovCi0JCX0KLQl9Ci19Ci0KLS8qIENhbGxlZCBvbmNlIGZvciBldmVyeSBwYXJwb3J0IG9uIHRlcm1pbmF0aW9uICovCi1zdGF0aWMgdm9pZCB3OTk2Nl9kZXRhY2goc3RydWN0IHBhcnBvcnQgKnBvcnQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgVzk5NjZfTUFYQ0FNUzsgaSsrKQotCQlpZiAodzk5NjZfY2Ftc1tpXS5kZXZfc3RhdGUgIT0gMCAmJiB3OTk2Nl9jYW1zW2ldLnBwb3J0ID09IHBvcnQpCi0JCQl3OTk2Nl90ZXJtKCZ3OTk2Nl9jYW1zW2ldKTsKLX0KLQotCi1zdGF0aWMgc3RydWN0IHBhcnBvcnRfZHJpdmVyIHc5OTY2X3BwZCA9IHsKLQkubmFtZSA9IFc5OTY2X0RSSVZFUk5BTUUsCi0JLmF0dGFjaCA9IHc5OTY2X2F0dGFjaCwKLQkuZGV0YWNoID0gdzk5NjZfZGV0YWNoLAotfTsKLQotLyogTW9kdWxlIGVudHJ5IHBvaW50ICovCi1zdGF0aWMgaW50IF9faW5pdCB3OTk2Nl9tb2RfaW5pdCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IFc5OTY2X01BWENBTVM7IGkrKykKLQkJdzk5NjZfY2Ftc1tpXS5kZXZfc3RhdGUgPSAwOwotCi0JcmV0dXJuIHBhcnBvcnRfcmVnaXN0ZXJfZHJpdmVyKCZ3OTk2Nl9wcGQpOwotfQotCi0vKiBNb2R1bGUgY2xlYW51cCAqLwotc3RhdGljIHZvaWQgX19leGl0IHc5OTY2X21vZF90ZXJtKHZvaWQpCi17Ci0JcGFycG9ydF91bnJlZ2lzdGVyX2RyaXZlcigmdzk5NjZfcHBkKTsKLX0KLQotbW9kdWxlX2luaXQodzk5NjZfbW9kX2luaXQpOwotbW9kdWxlX2V4aXQodzk5NjZfbW9kX3Rlcm0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90bGcyMzAwL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZDg3NTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLWNvbmZpZyBWSURFT19UTEcyMzAwCi0JdHJpc3RhdGUgIlRlbGVnZW50IFRMRzIzMDAgVVNCIHZpZGVvIGNhcHR1cmUgc3VwcG9ydCAoRGVwcmVjYXRlZCkiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDICYmIFNORCAmJiBEVkJfQ09SRQotCWRlcGVuZHMgb24gTUVESUFfVVNCX1NVUFBPUlQKLQlzZWxlY3QgVklERU9fVFVORVIKLQlzZWxlY3QgVklERU9fVFZFRVBST00KLQlkZXBlbmRzIG9uIFJDX0NPUkUKLQlzZWxlY3QgVklERU9CVUZfVk1BTExPQwotCXNlbGVjdCBTTkRfUENNCi0Jc2VsZWN0IFZJREVPQlVGX0RWQgotCi0JLS0taGVscC0tLQotCSAgVGhpcyBpcyBhIHZpZGVvNGxpbnV4IGRyaXZlciBmb3IgVGVsZWdlbnQgdGxnMjMwMCBiYXNlZCBUViBjYXJkcy4KLQkgIFRoZSBkcml2ZXIgc3VwcG9ydHMgVjRMMiwgRFZCLVQgYW5kIHJhZGlvLgotCi0JICBUaGlzIGRyaXZlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbi4gSWYgeW91IGhhdmUKLQkgIGhhcmR3YXJlIGZvciB0aGlzIGFuZCB5b3Ugd2FudCB0byB3b3JrIG9uIHRoaXMgZHJpdmVyLCB0aGVuIGNvbnRhY3QKLQkgIHRoZSBsaW51eC1tZWRpYSBtYWlsaW5nbGlzdC4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcG9zZWlkb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90bGcyMzAwL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzN2Y4ZTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLXBvc2VpZG9uLW9ianMgOj0gcGQtdmlkZW8ubyBwZC1hbHNhLm8gcGQtZHZiLm8gcGQtcmFkaW8ubyBwZC1tYWluLm8KLQotb2JqLSQoQ09ORklHX1ZJREVPX1RMRzIzMDApICs9IHBvc2VpZG9uLm8KLQotY2NmbGFncy15ICs9IC1JZHJpdmVycy9tZWRpYS9pMmMKLWNjZmxhZ3MteSArPSAtSWRyaXZlcnMvbWVkaWEvdHVuZXJzCi1jY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi1jb3JlCi1jY2ZsYWdzLXkgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi1mcm9udGVuZHMKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvcGQtYWxzYS5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvcGQtYWxzYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDhmZTEwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90bGcyMzAwL3BkLWFsc2EuYworKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NvdW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgotI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+Ci0jaW5jbHVkZSA8c291bmQvaW5mby5oPgotI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlICJwZC1jb21tb24uaCIKLSNpbmNsdWRlICJ2ZW5kb3JjbWRzLmgiCi0KLXN0YXRpYyB2b2lkIGNvbXBsZXRlX2hhbmRsZXJfYXVkaW8oc3RydWN0IHVyYiAqdXJiKTsKLSNkZWZpbmUgQVVESU9fRVAJKDB4ODMpCi0jZGVmaW5lIEFVRElPX0JVRl9TSVpFCSg1MTIpCi0jZGVmaW5lIFBFUklPRF9TSVpFCSgxMDI0ICogOCkKLSNkZWZpbmUgUEVSSU9EX01JTgkoNCkKLSNkZWZpbmUgUEVSSU9EX01BWCAJUEVSSU9EX01JTgotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21faGFyZHdhcmUgc25kX3BkX2h3X2NhcHR1cmUgPSB7Ci0JLmluZm8gPSBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8Ci0JCVNORFJWX1BDTV9JTkZPX01NQVAgICAgICAgICAgIHwKLQkJU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAotCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElELAotCi0JLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKLQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV80ODAwMCwKLQotCS5yYXRlX21pbiA9IDQ4MDAwLAotCS5yYXRlX21heCA9IDQ4MDAwLAotCS5jaGFubmVsc19taW4gPSAyLAotCS5jaGFubmVsc19tYXggPSAyLAotCS5idWZmZXJfYnl0ZXNfbWF4ID0gUEVSSU9EX1NJWkUgKiBQRVJJT0RfTUlOLAotCS5wZXJpb2RfYnl0ZXNfbWluID0gUEVSSU9EX1NJWkUsCi0JLnBlcmlvZF9ieXRlc19tYXggPSBQRVJJT0RfU0laRSwKLQkucGVyaW9kc19taW4gPSBQRVJJT0RfTUlOLAotCS5wZXJpb2RzX21heCA9IFBFUklPRF9NQVgsCi0JLyoKLQkuYnVmZmVyX2J5dGVzX21heCA9IDYyNzIwICogOCwKLQkucGVyaW9kX2J5dGVzX21pbiA9IDY0LAotCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMTI1NDQsCi0JLnBlcmlvZHNfbWluID0gMiwKLQkucGVyaW9kc19tYXggPSA5OAotCSovCi19OwotCi1zdGF0aWMgaW50IHNuZF9wZF9jYXB0dXJlX29wZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IHBvc2VpZG9uICpwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSAmcC0+YXVkaW87Ci0Jc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKLQotCWlmICghcCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JcGEtPnVzZXJzKys7Ci0JcGEtPmNhcmRfY2xvc2UgCQk9IDA7Ci0JcGEtPmNhcHR1cmVfcGNtX3N1YnN0cmVhbQk9IHN1YnN0cmVhbTsKLQlydW50aW1lLT5wcml2YXRlX2RhdGEJCT0gcDsKLQotCXJ1bnRpbWUtPmh3ID0gc25kX3BkX2h3X2NhcHR1cmU7Ci0Jc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIocnVudGltZSwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOwotCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShwLT5pbnRlcmZhY2UpOwotCWtyZWZfZ2V0KCZwLT5rcmVmKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfcGRfcGNtX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBwb3NlaWRvbiAqcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOwotCi0JcGEtPnVzZXJzLS07Ci0JcGEtPmNhcmRfY2xvc2UgCQk9IDE7Ci0JdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHAtPmludGVyZmFjZSk7Ci0Ja3JlZl9wdXQoJnAtPmtyZWYsIHBvc2VpZG9uX2RlbGV0ZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3BkX2h3X2NhcHR1cmVfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAotCQkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKLXsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwotCXVuc2lnbmVkIGludCBzaXplOwotCi0Jc2l6ZSA9IHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKTsKLQlpZiAocnVudGltZS0+ZG1hX2FyZWEpIHsKLQkJaWYgKHJ1bnRpbWUtPmRtYV9ieXRlcyA+IHNpemUpCi0JCQlyZXR1cm4gMDsKLQkJdmZyZWUocnVudGltZS0+ZG1hX2FyZWEpOwotCX0KLQlydW50aW1lLT5kbWFfYXJlYSA9IHZtYWxsb2Moc2l6ZSk7Ci0JaWYgKCFydW50aW1lLT5kbWFfYXJlYSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZWxzZQotCQlydW50aW1lLT5kbWFfYnl0ZXMgPSBzaXplOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGF1ZGlvX2J1Zl9mcmVlKHN0cnVjdCBwb3NlaWRvbiAqcCkKLXsKLQlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOwotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFVRElPX0JVRlM7IGkrKykKLQkJaWYgKHBhLT51cmJfYXJyYXlbaV0pCi0JCQl1c2Jfa2lsbF91cmIocGEtPnVyYl9hcnJheVtpXSk7Ci0JZnJlZV9hbGxfdXJiX2dlbmVyaWMocGEtPnVyYl9hcnJheSwgQVVESU9fQlVGUyk7Ci0JbG9ncG0oKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzbmRfcGRfaHdfY2FwdHVyZV9mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBwb3NlaWRvbiAqcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQotCWxvZ3BtKCk7Ci0JYXVkaW9fYnVmX2ZyZWUocCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25kX3BkX3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgQVVESU9fVFJBSUxFUl9TSVpFCSgxNikKLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfYXVkaW9fZGF0YShzdHJ1Y3QgdXJiICp1cmIsIGludCAqcGVyaW9kX2VsYXBzZWQpCi17Ci0Jc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9IHVyYi0+Y29udGV4dDsKLQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gcGEtPmNhcHR1cmVfcGNtX3N1YnN0cmVhbS0+cnVudGltZTsKLQotCWludCBzdHJpZGUJPSBydW50aW1lLT5mcmFtZV9iaXRzID4+IDM7Ci0JaW50IGxlbgkJPSB1cmItPmFjdHVhbF9sZW5ndGggLyBzdHJpZGU7Ci0JdW5zaWduZWQgY2hhciAqY3AJPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQl1bnNpZ25lZCBpbnQgb2xkcHRyCT0gcGEtPnJjdl9wb3NpdGlvbjsKLQotCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gQVVESU9fQlVGX1NJWkUgLSA0KQotCQlsZW4gLT0gKEFVRElPX1RSQUlMRVJfU0laRSAvIHN0cmlkZSk7Ci0KLQkvKiBkbyB0aGUgY29weSAqLwotCWlmIChvbGRwdHIgKyBsZW4gPj0gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKLQkJdW5zaWduZWQgaW50IGNudCA9IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplIC0gb2xkcHRyOwotCi0JCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArIG9sZHB0ciAqIHN0cmlkZSwgY3AsIGNudCAqIHN0cmlkZSk7Ci0JCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSwgKGNwICsgY250ICogc3RyaWRlKSwKLQkJCQkJKGxlbiAqIHN0cmlkZSAtIGNudCAqIHN0cmlkZSkpOwotCX0gZWxzZQotCQltZW1jcHkocnVudGltZS0+ZG1hX2FyZWEgKyBvbGRwdHIgKiBzdHJpZGUsIGNwLCBsZW4gKiBzdHJpZGUpOwotCi0JLyogdXBkYXRlIHRoZSBzdGF0YXMgKi8KLQlzbmRfcGNtX3N0cmVhbV9sb2NrKHBhLT5jYXB0dXJlX3BjbV9zdWJzdHJlYW0pOwotCXBhLT5yY3ZfcG9zaXRpb24JKz0gbGVuOwotCWlmIChwYS0+cmN2X3Bvc2l0aW9uID49IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKQotCQlwYS0+cmN2X3Bvc2l0aW9uIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOwotCi0JcGEtPmNvcGllZF9wb3NpdGlvbiArPSAobGVuKTsKLQlpZiAocGEtPmNvcGllZF9wb3NpdGlvbiA+PSBydW50aW1lLT5wZXJpb2Rfc2l6ZSkgewotCQlwYS0+Y29waWVkX3Bvc2l0aW9uIC09IHJ1bnRpbWUtPnBlcmlvZF9zaXplOwotCQkqcGVyaW9kX2VsYXBzZWQgPSAxOwotCX0KLQlzbmRfcGNtX3N0cmVhbV91bmxvY2socGEtPmNhcHR1cmVfcGNtX3N1YnN0cmVhbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbXBsZXRlX2hhbmRsZXJfYXVkaW8oc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSB1cmItPmNvbnRleHQ7Ci0Jc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPSBwYS0+Y2FwdHVyZV9wY21fc3Vic3RyZWFtOwotCWludCAgICBwZXJpb2RfZWxhcHNlZCA9IDA7Ci0JaW50ICAgIHJldDsKLQotCWlmICgxID09IHBhLT5jYXJkX2Nsb3NlIHx8IHBhLT5jYXB0dXJlX3N0cmVhbSAhPSBTVFJFQU1fT04pCi0JCXJldHVybjsKLQotCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7Ci0JCS8qaWYgKHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKi8KLQkJCXJldHVybjsKLQl9Ci0KLQlpZiAoc3Vic3RyZWFtKSB7Ci0JCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJCWhhbmRsZV9hdWRpb19kYXRhKHVyYiwgJnBlcmlvZF9lbGFwc2VkKTsKLQkJCWlmIChwZXJpb2RfZWxhcHNlZCkKLQkJCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7Ci0JCX0KLQl9Ci0KLQlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXQgPCAwKQotCQlsb2coImF1ZGlvIHVyYiBmYWlsZWQgKGVycmNvZCA9ICVpKSIsIHJldCk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IGZpcmVfYXVkaW9fdXJiKHN0cnVjdCBwb3NlaWRvbiAqcCkKLXsKLQlpbnQgaSwgcmV0ID0gMDsKLQlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOwotCi0JYWxsb2NfYnVsa191cmJzX2dlbmVyaWMocGEtPnVyYl9hcnJheSwgQVVESU9fQlVGUywKLQkJCXAtPnVkZXYsIEFVRElPX0VQLAotCQkJQVVESU9fQlVGX1NJWkUsIEdGUF9BVE9NSUMsCi0JCQljb21wbGV0ZV9oYW5kbGVyX2F1ZGlvLCBwYSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVVESU9fQlVGUzsgaSsrKSB7Ci0JCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBhLT51cmJfYXJyYXlbaV0sIEdGUF9LRVJORUwpOwotCQlpZiAocmV0KQotCQkJbG9nKCJ1cmIgZXJyIDogJWQiLCByZXQpOwotCX0KLQlsb2coKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHNuZF9wZF9jYXB0dXJlX3RyaWdnZXIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCBjbWQpCi17Ci0Jc3RydWN0IHBvc2VpZG9uICpwID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCXN0cnVjdCBwb3NlaWRvbl9hdWRpbyAqcGEgPSAmcC0+YXVkaW87Ci0KLQlpZiAoZGVidWdfbW9kZSkKLQkJbG9nKCJjbWQgJWQsIGF1ZGlvIHN0YXQgOiAlZFxuIiwgY21kLCBwYS0+Y2FwdHVyZV9zdHJlYW0pOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgotCQlpZiAocGEtPmNhcHR1cmVfc3RyZWFtID09IFNUUkVBTV9PTikKLQkJCXJldHVybiAwOwotCi0JCXBhLT5yY3ZfcG9zaXRpb24gPSBwYS0+Y29waWVkX3Bvc2l0aW9uID0gMDsKLQkJcGEtPmNhcHR1cmVfc3RyZWFtID0gU1RSRUFNX09OOwotCi0JCWlmIChpbl9oaWJlcm5hdGlvbihwKSkKLQkJCXJldHVybiAwOwotCQlmaXJlX2F1ZGlvX3VyYihwKTsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6Ci0JCXBhLT5jYXB0dXJlX3N0cmVhbSA9IFNUUkVBTV9TVVNQRU5EOwotCQlyZXR1cm4gMDsKLQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JCXBhLT5jYXB0dXJlX3N0cmVhbSA9IFNUUkVBTV9PRkY7Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQotc3RhdGljIHNuZF9wY21fdWZyYW1lc190Ci1zbmRfcGRfY2FwdHVyZV9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQotewotCXN0cnVjdCBwb3NlaWRvbiAqcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKLQlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOwotCXJldHVybiBwYS0+cmN2X3Bvc2l0aW9uOwotfQotCi1zdGF0aWMgc3RydWN0IHBhZ2UgKnNuZF9wY21fcGRfZ2V0X3BhZ2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCXZvaWQgKnBhZ2VwdHIgPSBzdWJzLT5ydW50aW1lLT5kbWFfYXJlYSArIG9mZnNldDsKLQlyZXR1cm4gdm1hbGxvY190b19wYWdlKHBhZ2VwdHIpOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9wY21fb3BzIHBjbV9jYXB0dXJlX29wcyA9IHsKLQkub3BlbiAgICAgID0gc25kX3BkX2NhcHR1cmVfb3BlbiwKLQkuY2xvc2UgICAgID0gc25kX3BkX3BjbV9jbG9zZSwKLQkuaW9jdGwgICAgID0gc25kX3BjbV9saWJfaW9jdGwsCi0JLmh3X3BhcmFtcyA9IHNuZF9wZF9od19jYXB0dXJlX3BhcmFtcywKLQkuaHdfZnJlZSAgID0gc25kX3BkX2h3X2NhcHR1cmVfZnJlZSwKLQkucHJlcGFyZSAgID0gc25kX3BkX3ByZXBhcmUsCi0JLnRyaWdnZXIgICA9IHNuZF9wZF9jYXB0dXJlX3RyaWdnZXIsCi0JLnBvaW50ZXIgICA9IHNuZF9wZF9jYXB0dXJlX3BvaW50ZXIsCi0JLnBhZ2UgICAgICA9IHNuZF9wY21fcGRfZ2V0X3BhZ2UsCi19OwotCi0jaWZkZWYgQ09ORklHX1BNCi1pbnQgcG1fYWxzYV9zdXNwZW5kKHN0cnVjdCBwb3NlaWRvbiAqcCkKLXsKLQlsb2dwbShwKTsKLQlhdWRpb19idWZfZnJlZShwKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHBtX2Fsc2FfcmVzdW1lKHN0cnVjdCBwb3NlaWRvbiAqcCkKLXsKLQlsb2dwbShwKTsKLQlmaXJlX2F1ZGlvX3VyYihwKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1pbnQgcG9zZWlkb25fYXVkaW9faW5pdChzdHJ1Y3QgcG9zZWlkb24gKnApCi17Ci0Jc3RydWN0IHBvc2VpZG9uX2F1ZGlvICpwYSA9ICZwLT5hdWRpbzsKLQlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IHNuZF9wY20gKnBjbTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc25kX2NhcmRfbmV3KCZwLT5pbnRlcmZhY2UtPmRldiwgLTEsICJUZWxlZ2VudCIsCi0JCQkgICBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwotCWlmIChyZXQgIT0gMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNuZF9wY21fbmV3KGNhcmQsICJwb3NlaWRvbiBhdWRpbyIsIDAsIDAsIDEsICZwY20pOwotCWlmIChyZXQgPCAwKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnBjbV9jYXB0dXJlX29wcyk7Ci0JcGNtLT5pbmZvX2ZsYWdzICAgPSAwOwotCXBjbS0+cHJpdmF0ZV9kYXRhID0gcDsKLQlzdHJjcHkocGNtLT5uYW1lLCAicG9zZWlkb24gYXVkaW8gY2FwdHVyZSIpOwotCi0Jc3RyY3B5KGNhcmQtPmRyaXZlciwgIkFMU0EgZHJpdmVyIik7Ci0Jc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgInBvc2VpZG9uIEF1ZGlvIik7Ci0Jc3RyY3B5KGNhcmQtPmxvbmduYW1lLCAicG9zZWlkb24gQUxTQSBBdWRpbyIpOwotCi0JaWYgKHNuZF9jYXJkX3JlZ2lzdGVyKGNhcmQpKSB7Ci0JCXNuZF9jYXJkX2ZyZWUoY2FyZCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlwYS0+Y2FyZCA9IGNhcmQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBwb3NlaWRvbl9hdWRpb19mcmVlKHN0cnVjdCBwb3NlaWRvbiAqcCkKLXsKLQlzdHJ1Y3QgcG9zZWlkb25fYXVkaW8gKnBhID0gJnAtPmF1ZGlvOwotCi0JaWYgKHBhLT5jYXJkKQotCQlzbmRfY2FyZF9mcmVlKHBhLT5jYXJkKTsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90bGcyMzAwL3BkLWNvbW1vbi5oIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvcGQtY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllMjNhZDMyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90bGcyMzAwL3BkLWNvbW1vbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjcxICswLDAgQEAKLSNpZm5kZWYgUERfQ09NTU9OX0gKLSNkZWZpbmUgUERfQ09NTU9OX0gKLQotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYtdm1hbGxvYy5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jdHJscy5oPgotCi0jaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCi0jaW5jbHVkZSAiZHZiZGV2LmgiCi0jaW5jbHVkZSAiZHZiX2RlbXV4LmgiCi0jaW5jbHVkZSAiZG14ZGV2LmgiCi0KLSNkZWZpbmUgU0JVRl9OVU0JOAotI2RlZmluZSBNQVhfQlVGRkVSX05VTQk2Ci0jZGVmaW5lIFBLX1BFUl9VUkIJMzIKLSNkZWZpbmUgSVNPX1BLVF9TSVpFCTMwNzIKLQotI2RlZmluZSBQT1NFSURPTl9TVEFURV9OT05FCQkoMHgwMDAwKQotI2RlZmluZSBQT1NFSURPTl9TVEFURV9BTkFMT0cJCSgweDAwMDEpCi0jZGVmaW5lIFBPU0VJRE9OX1NUQVRFX0ZNCQkoMHgwMDAyKQotI2RlZmluZSBQT1NFSURPTl9TVEFURV9EVkJUCQkoMHgwMDA0KQotI2RlZmluZSBQT1NFSURPTl9TVEFURV9ESVNDT05ORUNUCSgweDAwODApCi0KLSNkZWZpbmUgUE1fU1VTUEVORF9ERUxBWQkzCi0KLSNkZWZpbmUgVjRMX1BBTF9WQklfTElORVMJMTgKLSNkZWZpbmUgVjRMX05UU0NfVkJJX0xJTkVTCTEyCi0jZGVmaW5lIFY0TF9QQUxfVkJJX0ZSQU1FU0laRQkoVjRMX1BBTF9WQklfTElORVMgKiAxNDQwICogMikKLSNkZWZpbmUgVjRMX05UU0NfVkJJX0ZSQU1FU0laRQkoVjRMX05UU0NfVkJJX0xJTkVTICogMTQ0MCAqIDIpCi0KLSNkZWZpbmUgVFVORVJfRlJFUV9NSU4JCSg0NTAwMDAwMFUpCi0jZGVmaW5lIFRVTkVSX0ZSRVFfTUFYCQkoODYyMDAwMDAwVSkKLQotc3RydWN0IHZiaV9kYXRhIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlCXZfZGV2OwotCXN0cnVjdCB2aWRlb19kYXRhCSp2aWRlbzsKLQlzdHJ1Y3QgZnJvbnRfZmFjZQkqZnJvbnQ7Ci0KLQl1bnNpZ25lZCBpbnQJCWNvcGllZDsKLQl1bnNpZ25lZCBpbnQJCXZiaV9zaXplOyAvKiB0aGUgd2hvbGUgc2l6ZSBvZiB0d28gZmllbGRzICovCi0JaW50IAkJCXVzZXJzOwotfTsKLQotLyoKLSAqIFRoaXMgaXMgdGhlIHJ1bm5pbmcgY29udGV4dCBvZiB0aGUgdmlkZW8sIGl0IGlzIHVzZWZ1bCBmb3IKLSAqIHJlc3VtZSgpCi0gKi8KLXN0cnVjdCBydW5uaW5nX2NvbnRleHQgewotCXUzMgkJZnJlcTsJCS8qIFZJRElPQ19TX0ZSRVFVRU5DWSAqLwotCWludAkJYXVkaW9faWR4OwkvKiBWSURJT0NfU19UVU5FUiAgICAqLwotCXY0bDJfc3RkX2lkCXR2bm9ybWlkOwkvKiBWSURJT0NfU19TVEQgICAgICovCi0JaW50CQlzaWdfaW5kZXg7CS8qIFZJRElPQ19TX0lOUFVUICAqLwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgcGl4OwkvKiBWSURJT0NfU19GTVQgICAqLwotfTsKLQotc3RydWN0IHZpZGVvX2RhdGEgewotCS8qIHY0bDIgdmlkZW8gZGV2aWNlICovCi0Jc3RydWN0IHZpZGVvX2RldmljZQl2X2RldjsKLQlzdHJ1Y3QgdjRsMl9jdHJsX2hhbmRsZXIgY3RybF9oYW5kbGVyOwotCi0JLyogdGhlIHdvcmtpbmcgY29udGV4dCAqLwotCXN0cnVjdCBydW5uaW5nX2NvbnRleHQJY29udGV4dDsKLQotCS8qIGZvciBkYXRhIGNvcHkgKi8KLQlpbnQJCWZpZWxkX2NvdW50OwotCi0JY2hhcgkJKmRzdDsKLQlpbnQJCWxpbmVzX2NvcGllZDsKLQlpbnQJCXByZXZfbGVmdDsKLQotCWludAkJbGluZXNfcGVyX2ZpZWxkOwotCWludAkJbGluZXNfc2l6ZTsKLQotCS8qIGZvciBjb21tdW5pY2F0aW9uICovCi0JdTgJCQllbmRwb2ludF9hZGRyOwotCXN0cnVjdCB1cmIgCQkqdXJiX2FycmF5W1NCVUZfTlVNXTsKLQlzdHJ1Y3QgdmJpX2RhdGEJCSp2Ymk7Ci0Jc3RydWN0IHBvc2VpZG9uIAkqcGQ7Ci0Jc3RydWN0IGZyb250X2ZhY2UJKmZyb250OwotCi0JaW50CQkJaXNfc3RyZWFtaW5nOwotCWludAkJCXVzZXJzOwotCi0JLyogZm9yIGJ1YmJsZSBoYW5kbGVyICovCi0Jc3RydWN0IHdvcmtfc3RydWN0CWJ1YmJsZV93b3JrOwotfTsKLQotZW51bSBwY21fc3RyZWFtX3N0YXRlIHsKLQlTVFJFQU1fT0ZGLAotCVNUUkVBTV9PTiwKLQlTVFJFQU1fU1VTUEVORCwKLX07Ci0KLSNkZWZpbmUgQVVESU9fQlVGUyAoMykKLSNkZWZpbmUgQ0FQVFVSRV9TVFJFQU1fRU4gMQotc3RydWN0IHBvc2VpZG9uX2F1ZGlvIHsKLQlzdHJ1Y3QgdXJiCQkqdXJiX2FycmF5W0FVRElPX0JVRlNdOwotCXVuc2lnbmVkIGludCAJCWNvcGllZF9wb3NpdGlvbjsKLQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gICAqY2FwdHVyZV9wY21fc3Vic3RyZWFtOwotCi0JdW5zaWduZWQgaW50IAkJcmN2X3Bvc2l0aW9uOwotCXN0cnVjdAlzbmRfY2FyZAkqY2FyZDsKLQlpbnQgCQkJY2FyZF9jbG9zZTsKLQotCWludCAJCQl1c2VyczsKLQlpbnQJCQlwbV9zdGF0ZTsKLQllbnVtIHBjbV9zdHJlYW1fc3RhdGUgCWNhcHR1cmVfc3RyZWFtOwotfTsKLQotc3RydWN0IHJhZGlvX2RhdGEgewotCV9fdTMyCQlmbV9mcmVxOwotCXVuc2lnbmVkIGludAlpc19yYWRpb19zdHJlYW1pbmc7Ci0JaW50CQlwcmVfZW1waGFzaXM7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSBmbV9kZXY7Ci0Jc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyIGN0cmxfaGFuZGxlcjsKLX07Ci0KLSNkZWZpbmUgRFZCX1NCVUZfTlVNCQk0Ci0jZGVmaW5lIERWQl9VUkJfQlVGX1NJWkUJMHgyMDAwCi1zdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgewotCXN0cnVjdCBkdmJfYWRhcHRlcglkdmJfYWRhcDsKLQlzdHJ1Y3QgZHZiX2Zyb250ZW5kCWR2Yl9mZTsKLQlzdHJ1Y3QgZG14ZGV2CQlkbXhkZXY7Ci0Jc3RydWN0IGR2Yl9kZW11eAlkZW11eDsKLQotCWF0b21pY190CQl1c2VyczsKLQlhdG9taWNfdAkJYWN0aXZlX2ZlZWQ7Ci0KLQkvKiBkYXRhIHRyYW5zZmVyICovCi0JczMyCQkJaXNfc3RyZWFtaW5nOwotCXN0cnVjdCB1cmIJCSp1cmJfYXJyYXlbRFZCX1NCVUZfTlVNXTsKLQlzdHJ1Y3QgcG9zZWlkb24JCSpwZF9kZXZpY2U7Ci0JdTgJCQllcF9hZGRyOwotCXU4CQkJcmVzZXJ2ZWRbM107Ci0KLQkvKiBkYXRhIGZvciBwb3dlciByZXN1bWUqLwotCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyBmZV9wYXJhbTsKLQotCS8qIGZvciBjaGFubmVsIHNjYW5uaW5nICovCi0JaW50CQlwcmV2X2ZyZXE7Ci0JaW50CQliYW5kd2lkdGg7Ci0JdW5zaWduZWQgbG9uZwlsYXN0X2ppZmZpZXM7Ci19OwotCi1zdHJ1Y3QgZnJvbnRfZmFjZSB7Ci0JLyogdXNlIHRoaXMgZmllbGQgdG8gZGlzdGluZ3Vpc2ggVklERU8gYW5kIFZCSSAqLwotCWVudW0gdjRsMl9idWZfdHlwZQl0eXBlOwotCi0JLyogZm9yIGhvc3QgKi8KLQlzdHJ1Y3QgdmlkZW9idWZfcXVldWUJcTsKLQotCS8qIHRoZSBicmlkZ2UgZm9yIGhvc3QgYW5kIGRldmljZSAqLwotCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIJKmN1cnJfZnJhbWU7Ci0KLQkvKiBmb3IgZGV2aWNlICovCi0Jc3BpbmxvY2tfdAkJcXVldWVfbG9jazsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZTsKLQlzdHJ1Y3QgcG9zZWlkb24JCSpwZDsKLX07Ci0KLXN0cnVjdCBwb3NlaWRvbiB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlkZXZpY2VfbGlzdDsKLQotCXN0cnVjdCBtdXRleAkJbG9jazsKLQlzdHJ1Y3Qga3JlZgkJa3JlZjsKLQotCS8qIGZvciBWNEwyICovCi0Jc3RydWN0IHY0bDJfZGV2aWNlCXY0bDJfZGV2OwotCi0JLyogaGFyZHdhcmUgaW5mbyAqLwotCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlCSppbnRlcmZhY2U7Ci0JaW50IAkJCWN1cl90cmFuc2Zlcl9tb2RlOwotCi0Jc3RydWN0IHZpZGVvX2RhdGEJdmlkZW9fZGF0YTsJLyogdmlkZW8gKi8KLQlzdHJ1Y3QgdmJpX2RhdGEJCXZiaV9kYXRhOwkvKiB2YmkJICovCi0Jc3RydWN0IHBvc2VpZG9uX2F1ZGlvCWF1ZGlvOwkJLyogYXVkaW8gKGFsc2EpICovCi0Jc3RydWN0IHJhZGlvX2RhdGEJcmFkaW9fZGF0YTsJLyogRk0JICovCi0Jc3RydWN0IHBkX2R2Yl9hZGFwdGVyCWR2Yl9kYXRhOwkvKiBEVkIJICovCi0KLQl1MzIJCQlzdGF0ZTsKLQlzdHJ1Y3QgZmlsZQkJKmZpbGVfZm9yX3N0cmVhbTsgLyogdGhlIGFjdGl2ZSBzdHJlYW0qLwotCi0jaWZkZWYgQ09ORklHX1BNCi0JaW50ICgqcG1fc3VzcGVuZCkoc3RydWN0IHBvc2VpZG9uICopOwotCWludCAoKnBtX3Jlc3VtZSkoc3RydWN0IHBvc2VpZG9uICopOwotCXBtX21lc3NhZ2VfdAkJbXNnOwotCi0Jc3RydWN0IHdvcmtfc3RydWN0CXBtX3dvcms7Ci0JdTgJCQlwb3J0bnVtOwotI2VuZGlmCi19OwotCi1zdHJ1Y3QgcG9zZWlkb25fZm9ybWF0IHsKLQljaGFyIAkqbmFtZTsKLQlpbnQJZm91cmNjOwkJIC8qIHZpZGVvNGxpbnV4IDIJICAqLwotCWludAlkZXB0aDsJCSAvKiBiaXQvcGl4ZWwJCSAgKi8KLQlpbnQJZmxhZ3M7Ci19OwotCi1zdHJ1Y3QgcG9zZWlkb25fdHZub3JtIHsKLQl2NGwyX3N0ZF9pZAl2NGwyX2lkOwotCWNoYXIJCW5hbWVbMTJdOwotCXUzMgkJdGxnX3R2bm9ybTsKLX07Ci0KLS8qIHZpZGVvICovCi1pbnQgcGRfdmlkZW9faW5pdChzdHJ1Y3QgcG9zZWlkb24gKik7Ci12b2lkIHBkX3ZpZGVvX2V4aXQoc3RydWN0IHBvc2VpZG9uICopOwotaW50IHN0b3BfYWxsX3ZpZGVvX3N0cmVhbShzdHJ1Y3QgcG9zZWlkb24gKik7Ci0KLS8qIGFsc2EgYXVkaW8gKi8KLWludCBwb3NlaWRvbl9hdWRpb19pbml0KHN0cnVjdCBwb3NlaWRvbiAqKTsKLWludCBwb3NlaWRvbl9hdWRpb19mcmVlKHN0cnVjdCBwb3NlaWRvbiAqKTsKLSNpZmRlZiBDT05GSUdfUE0KLWludCBwbV9hbHNhX3N1c3BlbmQoc3RydWN0IHBvc2VpZG9uICopOwotaW50IHBtX2Fsc2FfcmVzdW1lKHN0cnVjdCBwb3NlaWRvbiAqKTsKLSNlbmRpZgotCi0vKiBkdmIgKi8KLWludCBwZF9kdmJfdXNiX2RldmljZV9pbml0KHN0cnVjdCBwb3NlaWRvbiAqKTsKLXZvaWQgcGRfZHZiX3VzYl9kZXZpY2VfZXhpdChzdHJ1Y3QgcG9zZWlkb24gKik7Ci12b2lkIHBkX2R2Yl91c2JfZGV2aWNlX2NsZWFudXAoc3RydWN0IHBvc2VpZG9uICopOwotaW50IHBkX2R2Yl9nZXRfYWRhcHRlcl9udW0oc3RydWN0IHBkX2R2Yl9hZGFwdGVyICopOwotdm9pZCBkdmJfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHBkX2R2Yl9hZGFwdGVyICopOwotCi0vKiBGTSAqLwotaW50IHBvc2VpZG9uX2ZtX2luaXQoc3RydWN0IHBvc2VpZG9uICopOwotaW50IHBvc2VpZG9uX2ZtX2V4aXQoc3RydWN0IHBvc2VpZG9uICopOwotCi0vKiB2ZW5kb3IgY29tbWFuZCBvcHMgKi8KLWludCBzZW5kX3NldF9yZXEoc3RydWN0IHBvc2VpZG9uKiwgdTgsIHMzMiwgczMyKik7Ci1pbnQgc2VuZF9nZXRfcmVxKHN0cnVjdCBwb3NlaWRvbiosIHU4LCBzMzIsIHZvaWQqLCBzMzIqLCBzMzIpOwotczMyIHNldF90dW5lcl9tb2RlKHN0cnVjdCBwb3NlaWRvbiosIHVuc2lnbmVkIGNoYXIpOwotCi0vKiBidWxrIHVyYiBhbGxvYy9mcmVlICovCi1pbnQgYWxsb2NfYnVsa191cmJzX2dlbmVyaWMoc3RydWN0IHVyYiAqKnVyYl9hcnJheSwgaW50IG51bSwKLQkJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCBlcF9hZGRyLAotCQkJaW50IGJ1Zl9zaXplLCBnZnBfdCBnZnBfZmxhZ3MsCi0JCQl1c2JfY29tcGxldGVfdCBjb21wbGV0ZV9mbiwgdm9pZCAqY29udGV4dCk7Ci12b2lkIGZyZWVfYWxsX3VyYl9nZW5lcmljKHN0cnVjdCB1cmIgKip1cmJfYXJyYXksIGludCBudW0pOwotCi0vKiBtaXNjICovCi12b2lkIHBvc2VpZG9uX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZik7Ci1leHRlcm4gaW50IGRlYnVnX21vZGU7Ci12b2lkIHNldF9kZWJ1Z19tb2RlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwgaW50IGRlYnVnX21vZGUpOwotCi0jaWZkZWYgQ09ORklHX1BNCi0jZGVmaW5lIGluX2hpYmVybmF0aW9uKHBkKSAocGQtPm1zZy5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpCi0jZWxzZQotI2RlZmluZSBpbl9oaWJlcm5hdGlvbihwZCkgKDApCi0jZW5kaWYKLSNkZWZpbmUgZ2V0X3BtX2NvdW50KHApIChhdG9taWNfcmVhZCgmKHApLT5pbnRlcmZhY2UtPnBtX3VzYWdlX2NudCkpCi0KLSNkZWZpbmUgbG9nKGEsIC4uLikgcHJpbnRrKEtFUk5fREVCVUcgIlx0WyAlcyA6ICUuM2QgXSAiYSJcbiIsIFwKLQkJCQlfX2Z1bmNfXywgX19MSU5FX18sICAjIyBfX1ZBX0FSR1NfXykKLQotLyogZm9yIHBvd2VyIG1hbmFnZW1lbnQgKi8KLSNkZWZpbmUgbG9ncG0ocGQpIGRvIHtcCi0JCQlpZiAoZGVidWdfbW9kZSAmIDB4MTApXAotCQkJCWxvZygpO1wKLQkJfSB3aGlsZSAoMCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGxnMjMwMC9wZC1kdmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90bGcyMzAwL3BkLWR2Yi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYTQ5OTRhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90bGcyMzAwL3BkLWR2Yi5jCisrKyAvZGV2L251bGwKQEAgLTEsNTk3ICswLDAgQEAKLSNpbmNsdWRlICJwZC1jb21tb24uaCIKLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvZHZiL2RteC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZwLmg+Ci0KLSNpbmNsdWRlICJ2ZW5kb3JjbWRzLmgiCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KLQotc3RhdGljIHZvaWQgZHZiX3VyYl9jbGVhbnVwKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKTsKLQotc3RhdGljIGludCBkdmJfYmFuZHdpZHRoW11bMl0gPSB7Ci0JeyBUTEdfQldfOCwgODAwMDAwMCB9LAotCXsgVExHX0JXXzcsIDcwMDAwMDAgfSwKLQl7IFRMR19CV182LCA2MDAwMDAwIH0KLX07Ci1zdGF0aWMgaW50IGR2Yl9iYW5kd2lkdGhfbGVuZ3RoID0gQVJSQVlfU0laRShkdmJfYmFuZHdpZHRoKTsKLQotc3RhdGljIHMzMiBkdmJfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKTsKLXN0YXRpYyBpbnQgcG9zZWlkb25fY2hlY2tfbW9kZV9kdmJ0KHN0cnVjdCBwb3NlaWRvbiAqcGQpCi17Ci0JczMyIHJldCA9IDAsIGNtZF9zdGF0dXMgPSAwOwotCi0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQlzY2hlZHVsZV90aW1lb3V0KEhaLzQpOwotCi0JcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UocGQtPnVkZXYsIDAsIEJVTEtfQUxURVJOQVRFX0lGQUNFKTsKLQlpZiAocmV0ICE9IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBzZXRfdHVuZXJfbW9kZShwZCwgVExHX01PREVfQ0FQU19EVkJfVCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIHNpZ25hbCBzb3VyY2UgKi8KLQlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFNHTkxfU1JDX1NFTCwgVExHX1NJR19TUkNfQU5URU5OQSwgJmNtZF9zdGF0dXMpOwotCWlmIChyZXR8Y21kX3N0YXR1cykKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi0vKiBhY3F1aXJlIDoKLSAqIAkxID09IG9wZW4KLSAqIAkwID09IHJlbGVhc2UKLSAqLwotc3RhdGljIGludCBwb3NlaWRvbl90c19idXNfY3RybChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGFjcXVpcmUpCi17Ci0Jc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiOwotCWludCByZXQgPSAwOwotCi0JaWYgKCFwZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlwZF9kdmIgPSBjb250YWluZXJfb2YoZmUsIHN0cnVjdCBwZF9kdmJfYWRhcHRlciwgZHZiX2ZlKTsKLQlpZiAoYWNxdWlyZSkgewotCQltdXRleF9sb2NrKCZwZC0+bG9jayk7Ci0JCWlmIChwZC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9ESVNDT05ORUNUKSB7Ci0JCQlyZXQgPSAtRU5PREVWOwotCQkJZ290byBvcGVuX291dDsKLQkJfQotCi0JCWlmIChwZC0+c3RhdGUgJiYgIShwZC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9EVkJUKSkgewotCQkJcmV0ID0gLUVCVVNZOwotCQkJZ290byBvcGVuX291dDsKLQkJfQotCi0JCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKLQkJaWYgKDAgPT0gcGQtPnN0YXRlKSB7Ci0JCQlyZXQgPSBwb3NlaWRvbl9jaGVja19tb2RlX2R2YnQocGQpOwotCQkJaWYgKHJldCA8IDApIHsKLQkJCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocGQtPmludGVyZmFjZSk7Ci0JCQkJZ290byBvcGVuX291dDsKLQkJCX0KLQkJCXBkLT5zdGF0ZSB8PSBQT1NFSURPTl9TVEFURV9EVkJUOwotCQkJcGRfZHZiLT5iYW5kd2lkdGggPSAwOwotCQkJcGRfZHZiLT5wcmV2X2ZyZXEgPSAwOwotCQl9Ci0JCWF0b21pY19pbmMoJnBkX2R2Yi0+dXNlcnMpOwotCQlrcmVmX2dldCgmcGQtPmtyZWYpOwotb3Blbl9vdXQ6Ci0JCW11dGV4X3VubG9jaygmcGQtPmxvY2spOwotCX0gZWxzZSB7Ci0JCWR2Yl9zdG9wX3N0cmVhbWluZyhwZF9kdmIpOwotCi0JCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZwZF9kdmItPnVzZXJzKSkgewotCQkJbXV0ZXhfbG9jaygmcGQtPmxvY2spOwotCQkJcGQtPnN0YXRlICY9IH5QT1NFSURPTl9TVEFURV9EVkJUOwotCQkJbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7Ci0JCX0KLQkJa3JlZl9wdXQoJnBkLT5rcmVmLCBwb3NlaWRvbl9kZWxldGUpOwotCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocGQtPmludGVyZmFjZSk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyB2b2lkIHBvc2VpZG9uX2ZlX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCi17Ci0Jc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCi0JcGQtPnBtX3N1c3BlbmQgPSBOVUxMOwotCXBkLT5wbV9yZXN1bWUgID0gTlVMTDsKLX0KLSNlbHNlCi0jZGVmaW5lIHBvc2VpZG9uX2ZlX3JlbGVhc2UgTlVMTAotI2VuZGlmCi0KLXN0YXRpYyBzMzIgcG9zZWlkb25fZmVfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiByZXR1cm4gdHJ1ZSBpZiB3ZSBjYW4gc2F0aXNmeSB0aGUgY29uZGl0aW9ucywgZWxzZSByZXR1cm4gZmFsc2UuCi0gKi8KLXN0YXRpYyBib29sIGNoZWNrX3NjYW5fb2soX191MzIgZnJlcSwgaW50IGJhbmR3aWR0aCwKLQkJCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAoYmFuZHdpZHRoIDwgMCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKGFkYXB0ZXItPnByZXZfZnJlcSA9PSBmcmVxCi0JCSYmIGFkYXB0ZXItPmJhbmR3aWR0aCA9PSBiYW5kd2lkdGgpIHsKLQkJbG9uZyBubCA9IGppZmZpZXMgLSBhZGFwdGVyLT5sYXN0X2ppZmZpZXM7Ci0JCXVuc2lnbmVkIGludCBtc2VjIDsKLQotCQltc2VjID0gamlmZmllc190b19tc2VjcyhhYnMobmwpKTsKLQkJcmV0dXJuIG1zZWMgPiAxNTAwMCA/IHRydWUgOiBmYWxzZTsKLQl9Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBDaGVjayBpZiB0aGUgZmlybXdhcmUgZGVsYXlzIHRvbyBsb25nIGZvciBhbiBpbnZhbGlkIGZyZXF1ZW5jeS4KLSAqLwotc3RhdGljIGludCBmd19kZWxheV9vdmVyZmxvdyhzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JbG9uZyBubCA9IGppZmZpZXMgLSBhZGFwdGVyLT5sYXN0X2ppZmZpZXM7Ci0JdW5zaWduZWQgaW50IG1zZWMgOwotCi0JbXNlYyA9IGppZmZpZXNfdG9fbXNlY3MoYWJzKG5sKSk7Ci0JcmV0dXJuIG1zZWMgPiA4MDAgPyB0cnVlIDogZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbnQgcG9zZWlkb25fc2V0X2ZlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQotewotCXN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcyAqZmVwID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7Ci0JczMyIHJldCA9IDAsIGNtZF9zdGF0dXMgPSAwOwotCXMzMiBpLCBiYW5kd2lkdGggPSAtMTsKLQlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0Jc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSAmcGQtPmR2Yl9kYXRhOwotCi0JaWYgKGluX2hpYmVybmF0aW9uKHBkKSkKLQkJcmV0dXJuIC1FQlVTWTsKLQotCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKLQlmb3IgKGkgPSAwOyBpIDwgZHZiX2JhbmR3aWR0aF9sZW5ndGg7IGkrKykKLQkJaWYgKGZlcC0+YmFuZHdpZHRoX2h6ID09IGR2Yl9iYW5kd2lkdGhbaV1bMV0pCi0JCQliYW5kd2lkdGggPSBkdmJfYmFuZHdpZHRoW2ldWzBdOwotCi0JaWYgKGNoZWNrX3NjYW5fb2soZmVwLT5mcmVxdWVuY3ksIGJhbmR3aWR0aCwgcGRfZHZiKSkgewotCQlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFRVTkVfRlJFUV9TRUxFQ1QsCi0JCQkJCWZlcC0+ZnJlcXVlbmN5IC8gMTAwMCwgJmNtZF9zdGF0dXMpOwotCQlpZiAocmV0IHwgY21kX3N0YXR1cykgewotCQkJbG9nKCJlcnJvciBsaW5lIik7Ci0JCQlnb3RvIGZyb250X291dDsKLQkJfQotCi0JCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgRFZCVF9CQU5EV19TRUwsCi0JCQkJCQliYW5kd2lkdGgsICZjbWRfc3RhdHVzKTsKLQkJaWYgKHJldCB8IGNtZF9zdGF0dXMpIHsKLQkJCWxvZygiZXJyb3IgbGluZSIpOwotCQkJZ290byBmcm9udF9vdXQ7Ci0JCX0KLQotCQlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFRBS0VfUkVRVUVTVCwgMCwgJmNtZF9zdGF0dXMpOwotCQlpZiAocmV0IHwgY21kX3N0YXR1cykgewotCQkJbG9nKCJlcnJvciBsaW5lIik7Ci0JCQlnb3RvIGZyb250X291dDsKLQkJfQotCi0JCS8qIHNhdmUgdGhlIGNvbnRleHQgZm9yIGZ1dHVyZSAqLwotCQltZW1jcHkoJnBkX2R2Yi0+ZmVfcGFyYW0sIGZlcCwgc2l6ZW9mKCpmZXApKTsKLQkJcGRfZHZiLT5iYW5kd2lkdGggPSBiYW5kd2lkdGg7Ci0JCXBkX2R2Yi0+cHJldl9mcmVxID0gZmVwLT5mcmVxdWVuY3k7Ci0JCXBkX2R2Yi0+bGFzdF9qaWZmaWVzID0gamlmZmllczsKLQl9Ci1mcm9udF9vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBwbV9kdmJfc3VzcGVuZChzdHJ1Y3QgcG9zZWlkb24gKnBkKQotewotCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKLQlkdmJfc3RvcF9zdHJlYW1pbmcocGRfZHZiKTsKLQlkdmJfdXJiX2NsZWFudXAocGRfZHZiKTsKLQltc2xlZXAoNTAwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwbV9kdmJfcmVzdW1lKHN0cnVjdCBwb3NlaWRvbiAqcGQpCi17Ci0Jc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSAmcGQtPmR2Yl9kYXRhOwotCi0JcG9zZWlkb25fY2hlY2tfbW9kZV9kdmJ0KHBkKTsKLQltc2xlZXAoMzAwKTsKLQlwb3NlaWRvbl9zZXRfZmUoJnBkX2R2Yi0+ZHZiX2ZlKTsKLQotCWR2Yl9zdGFydF9zdHJlYW1pbmcocGRfZHZiKTsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgczMyIHBvc2VpZG9uX2ZlX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCi17Ci0Jc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKLQotI2lmZGVmIENPTkZJR19QTQotCXBkLT5wbV9zdXNwZW5kID0gcG1fZHZiX3N1c3BlbmQ7Ci0JcGQtPnBtX3Jlc3VtZSAgPSBwbV9kdmJfcmVzdW1lOwotI2VuZGlmCi0JbWVtc2V0KCZwZF9kdmItPmZlX3BhcmFtLCAwLAotCQkJc2l6ZW9mKHN0cnVjdCBkdHZfZnJvbnRlbmRfcHJvcGVydGllcykpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBvc2VpZG9uX2dldF9mZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKLXsKLQlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmZlcCA9ICZmZS0+ZHR2X3Byb3BlcnR5X2NhY2hlOwotCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9ICZwZC0+ZHZiX2RhdGE7Ci0KLQltZW1jcHkoZmVwLCAmcGRfZHZiLT5mZV9wYXJhbSwgc2l6ZW9mKCpmZXApKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwb3NlaWRvbl9mZV9nZXRfdHVuZV9zZXR0aW5ncyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3R1bmVfc2V0dGluZ3MgKnR1bmUpCi17Ci0JdHVuZS0+bWluX2RlbGF5X21zID0gMTAwMDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwb3NlaWRvbl9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXQpCi17Ci0Jc3RydWN0IHBvc2VpZG9uICpwZCA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCXMzMiByZXQgPSAtMSwgY21kX3N0YXR1czsKLQlzdHJ1Y3QgdHVuZXJfZHR2X3NpZ19zdGF0X3Mgc3RhdHVzID0ge307Ci0KLQlpZiAoaW5faGliZXJuYXRpb24ocGQpKQotCQlyZXR1cm4gLUVCVVNZOwotCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKLQotCXJldCA9IHNlbmRfZ2V0X3JlcShwZCwgVFVORVJfU1RBVFVTLCBUTEdfTU9ERV9EVkJfVCwKLQkJCQkmc3RhdHVzLCAmY21kX3N0YXR1cywgc2l6ZW9mKHN0YXR1cykpOwotCWlmIChyZXQgfCBjbWRfc3RhdHVzKSB7Ci0JCWxvZygiZ2V0IHR1bmVyIHN0YXR1cyBlcnJvciIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoZGVidWdfbW9kZSkKLQkJbG9nKCJQIDogJWQsIEwgJWQsIExCIDolZCIsIHN0YXR1cy5zaWdfcHJlc2VudCwKLQkJCXN0YXR1cy5zaWdfbG9ja2VkLCBzdGF0dXMuc2lnX2xvY2tfYnVzeSk7Ci0KLQlpZiAoc3RhdHVzLnNpZ19sb2NrX2J1c3kpIHsKLQkJZ290byBvdXQ7Ci0JfSBlbHNlIGlmIChzdGF0dXMuc2lnX3ByZXNlbnQgfHwgc3RhdHVzLnNpZ19sb2NrZWQpIHsKLQkJKnN0YXQgfD0gRkVfSEFTX0xPQ0sgfCBGRV9IQVNfU0lHTkFMIHwgRkVfSEFTX0NBUlJJRVIKLQkJCQl8IEZFX0hBU19TWU5DIHwgRkVfSEFTX1ZJVEVSQkk7Ci0JfSBlbHNlIHsKLQkJaWYgKGZ3X2RlbGF5X292ZXJmbG93KCZwZC0+ZHZiX2RhdGEpKQotCQkJKnN0YXQgfD0gRkVfVElNRURPVVQ7Ci0JfQotb3V0OgotCW11dGV4X3VubG9jaygmcGQtPmxvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcG9zZWlkb25fcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQotewotCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlzdHJ1Y3QgdHVuZXJfYmVyX3JhdGVfcyB0bGdfYmVyID0ge307Ci0JczMyIHJldCA9IC0xLCBjbWRfc3RhdHVzOwotCi0JbXV0ZXhfbG9jaygmcGQtPmxvY2spOwotCXJldCA9IHNlbmRfZ2V0X3JlcShwZCwgVFVORVJfQkVSX1JBVEUsIDAsCi0JCQkJJnRsZ19iZXIsICZjbWRfc3RhdHVzLCBzaXplb2YodGxnX2JlcikpOwotCWlmIChyZXQgfCBjbWRfc3RhdHVzKQotCQlnb3RvIG91dDsKLQkqYmVyID0gdGxnX2Jlci5iZXJfcmF0ZTsKLW91dDoKLQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgczMyIHBvc2VpZG9uX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnN0cmVuZ3RoKQotewotCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlzdHJ1Y3QgdHVuZXJfZHR2X3NpZ19zdGF0X3Mgc3RhdHVzID0ge307Ci0JczMyIHJldCA9IDAsIGNtZF9zdGF0dXM7Ci0KLQltdXRleF9sb2NrKCZwZC0+bG9jayk7Ci0JcmV0ID0gc2VuZF9nZXRfcmVxKHBkLCBUVU5FUl9TVEFUVVMsIFRMR19NT0RFX0RWQl9ULAotCQkJCSZzdGF0dXMsICZjbWRfc3RhdHVzLCBzaXplb2Yoc3RhdHVzKSk7Ci0JaWYgKHJldCB8IGNtZF9zdGF0dXMpCi0JCWdvdG8gb3V0OwotCWlmICgoc3RhdHVzLnNpZ19wcmVzZW50IHx8IHN0YXR1cy5zaWdfbG9ja2VkKSAmJiAhc3RhdHVzLnNpZ19zdHJlbmd0aCkKLQkJKnN0cmVuZ3RoID0gMHhGRkZGOwotCWVsc2UKLQkJKnN0cmVuZ3RoID0gc3RhdHVzLnNpZ19zdHJlbmd0aDsKLW91dDoKLQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHBvc2VpZG9uX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwb3NlaWRvbl9yZWFkX3VuY19ibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdW5jKQotewotCSp1bmMgPSAwOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgcG9zZWlkb25fZnJvbnRlbmRfb3BzID0gewotCS5kZWxzeXMgPSB7IFNZU19EVkJUIH0sCi0JLmluZm8gPSB7Ci0JCS5uYW1lCQk9ICJQb3NlaWRvbiBEVkItVCIsCi0JCS5mcmVxdWVuY3lfbWluCT0gMTc0MDAwMDAwLAotCQkuZnJlcXVlbmN5X21heCAgPSA4NjIwMDAwMDAsCi0JCS5mcmVxdWVuY3lfc3RlcHNpemUJICA9IDYyNTAwLC8qIEZJWE1FICovCi0JCS5jYXBzID0gRkVfQ0FOX0lOVkVSU0lPTl9BVVRPIHwKLQkJCUZFX0NBTl9GRUNfMV8yIHwgRkVfQ0FOX0ZFQ18yXzMgfCBGRV9DQU5fRkVDXzNfNCB8Ci0JCQlGRV9DQU5fRkVDXzVfNiB8IEZFX0NBTl9GRUNfN184IHwgRkVfQ0FOX0ZFQ19BVVRPIHwKLQkJCUZFX0NBTl9RUFNLIHwgRkVfQ0FOX1FBTV8xNiB8IEZFX0NBTl9RQU1fNjQgfAotCQkJRkVfQ0FOX1FBTV9BVVRPIHwgRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfAotCQkJRkVfQ0FOX0dVQVJEX0lOVEVSVkFMX0FVVE8gfAotCQkJRkVfQ0FOX1JFQ09WRVIgfAotCQkJRkVfQ0FOX0hJRVJBUkNIWV9BVVRPLAotCX0sCi0KLQkucmVsZWFzZSA9IHBvc2VpZG9uX2ZlX3JlbGVhc2UsCi0KLQkuaW5pdCA9IHBvc2VpZG9uX2ZlX2luaXQsCi0JLnNsZWVwID0gcG9zZWlkb25fZmVfc2xlZXAsCi0KLQkuc2V0X2Zyb250ZW5kID0gcG9zZWlkb25fc2V0X2ZlLAotCS5nZXRfZnJvbnRlbmQgPSBwb3NlaWRvbl9nZXRfZmUsCi0JLmdldF90dW5lX3NldHRpbmdzID0gcG9zZWlkb25fZmVfZ2V0X3R1bmVfc2V0dGluZ3MsCi0KLQkucmVhZF9zdGF0dXMJPSBwb3NlaWRvbl9yZWFkX3N0YXR1cywKLQkucmVhZF9iZXIJPSBwb3NlaWRvbl9yZWFkX2JlciwKLQkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBwb3NlaWRvbl9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKLQkucmVhZF9zbnIJPSBwb3NlaWRvbl9yZWFkX3NuciwKLQkucmVhZF91Y2Jsb2Nrcwk9IHBvc2VpZG9uX3JlYWRfdW5jX2Jsb2NrcywKLQotCS50c19idXNfY3RybCA9IHBvc2VpZG9uX3RzX2J1c19jdHJsLAotfTsKLQotc3RhdGljIHZvaWQgZHZiX3VyYl9pcnEoc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gdXJiLT5jb250ZXh0OwotCWludCBsZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7Ci0Jc3RydWN0IGR2Yl9kZW11eCAqZGVtdXggPSAmcGRfZHZiLT5kZW11eDsKLQlzMzIgcmV0OwotCi0JaWYgKCFwZF9kdmItPmlzX3N0cmVhbWluZyB8fCB1cmItPnN0YXR1cykgewotCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVQUk9UTykKLQkJCWdvdG8gcmVzZW5kOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSBsZW4pCi0JCWR2Yl9kbXhfc3dmaWx0ZXIoZGVtdXgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW4pOwotCWVsc2UgaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA9PSBsZW4gLSA0KSB7Ci0JCWludCBvZmZzZXQ7Ci0JCXU4ICpidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQotCQkvKgotCQkgKiBUaGUgcGFja2V0IHNpemUgaXMgNTEyLAotCQkgKiBsYXN0IHBhY2tldCBjb250YWlucyA0NTYgYnl0ZXMgdHNwIGRhdGEKLQkJICovCi0JCWZvciAob2Zmc2V0ID0gNDU2OyBvZmZzZXQgPCBsZW47IG9mZnNldCArPSA1MTIpIHsKLQkJCWlmICghc3RybmNtcChidWYgKyBvZmZzZXQsICJEVkhTIiwgNCkpIHsKLQkJCQlkdmJfZG14X3N3ZmlsdGVyKGRlbXV4LCBidWYsIG9mZnNldCk7Ci0JCQkJaWYgKGxlbiA+IG9mZnNldCArIDUyICsgNCkgewotCQkJCQkvKjE2IGJ5dGVzIHRyYWlsZXIgKyAzNiBieXRlcyBwYWRkaW5nICovCi0JCQkJCWJ1ZiArPSBvZmZzZXQgKyA1MjsKLQkJCQkJbGVuIC09IG9mZnNldCArIDUyICsgNDsKLQkJCQkJZHZiX2RteF9zd2ZpbHRlcihkZW11eCwgYnVmLCBsZW4pOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotcmVzZW5kOgotCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJldCkKLQkJbG9nKCIgdXNiX3N1Ym1pdF91cmIgZmFpbGVkOiBlcnJvciAlZCIsIHJldCk7Ci19Ci0KLXN0YXRpYyBpbnQgZHZiX3VyYl9pbml0KHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKQotewotCWlmIChwZF9kdmItPnVyYl9hcnJheVswXSkKLQkJcmV0dXJuIDA7Ci0KLQlhbGxvY19idWxrX3VyYnNfZ2VuZXJpYyhwZF9kdmItPnVyYl9hcnJheSwgRFZCX1NCVUZfTlVNLAotCQkJcGRfZHZiLT5wZF9kZXZpY2UtPnVkZXYsIHBkX2R2Yi0+ZXBfYWRkciwKLQkJCURWQl9VUkJfQlVGX1NJWkUsIEdGUF9LRVJORUwsCi0JCQlkdmJfdXJiX2lycSwgcGRfZHZiKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZHZiX3VyYl9jbGVhbnVwKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKQotewotCWZyZWVfYWxsX3VyYl9nZW5lcmljKHBkX2R2Yi0+dXJiX2FycmF5LCBEVkJfU0JVRl9OVU0pOwotfQotCi1zdGF0aWMgczMyIGR2Yl9zdGFydF9zdHJlYW1pbmcoc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIpCi17Ci0Jc3RydWN0IHBvc2VpZG9uICpwZCA9IHBkX2R2Yi0+cGRfZGV2aWNlOwotCWludCByZXQgPSAwOwotCi0JaWYgKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1QpCi0JCXJldHVybiAtRU5PREVWOwotCi0JbXV0ZXhfbG9jaygmcGQtPmxvY2spOwotCWlmICghcGRfZHZiLT5pc19zdHJlYW1pbmcpIHsKLQkJczMyIGksIGNtZF9zdGF0dXMgPSAwOwotCQkvKgotCQkgKiBPbmNlIHVwb24gYSB0aW1lLCB0aGVyZSB3YXMgYSBkaWZmaWN1bHQgYnVnIGx5aW5nIGhlcmUuCi0JCSAqIHJldCA9IHNlbmRfc2V0X3JlcShwZCwgVEFLRV9SRVFVRVNULCAwLCAmY21kX3N0YXR1cyk7Ci0JCSAqLwotCi0JCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgUExBWV9TRVJWSUNFLCAxLCAmY21kX3N0YXR1cyk7Ci0JCWlmIChyZXQgfCBjbWRfc3RhdHVzKQotCQkJZ290byBvdXQ7Ci0KLQkJcmV0ID0gZHZiX3VyYl9pbml0KHBkX2R2Yik7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0KLQkJcGRfZHZiLT5pc19zdHJlYW1pbmcgPSAxOwotCQlmb3IgKGkgPSAwOyBpIDwgRFZCX1NCVUZfTlVNOyBpKyspIHsKLQkJCXJldCA9IHVzYl9zdWJtaXRfdXJiKHBkX2R2Yi0+dXJiX2FycmF5W2ldLAotCQkJCQkJICAgICAgIEdGUF9LRVJORUwpOwotCQkJaWYgKHJldCkgewotCQkJCWxvZygiIHN1Ym1pdCB1cmIgZXJyb3IgJWQiLCByZXQpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0JfQotb3V0OgotCW11dGV4X3VubG9jaygmcGQtPmxvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgZHZiX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKQotewotCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBwZF9kdmItPnBkX2RldmljZTsKLQotCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKLQlpZiAocGRfZHZiLT5pc19zdHJlYW1pbmcpIHsKLQkJczMyIGksIHJldCwgY21kX3N0YXR1cyA9IDA7Ci0KLQkJcGRfZHZiLT5pc19zdHJlYW1pbmcgPSAwOwotCi0JCWZvciAoaSA9IDA7IGkgPCBEVkJfU0JVRl9OVU07IGkrKykKLQkJCWlmIChwZF9kdmItPnVyYl9hcnJheVtpXSkKLQkJCQl1c2Jfa2lsbF91cmIocGRfZHZiLT51cmJfYXJyYXlbaV0pOwotCi0JCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgUExBWV9TRVJWSUNFLCBUTEdfVFVORV9QTEFZX1NWQ19TVE9QLAotCQkJCQkmY21kX3N0YXR1cyk7Ci0JCWlmIChyZXQgfCBjbWRfc3RhdHVzKQotCQkJbG9nKCJlcnJvciIpOwotCX0KLQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKLX0KLQotc3RhdGljIGludCBwZF9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZmVlZCkKLXsKLQlzdHJ1Y3QgcGRfZHZiX2FkYXB0ZXIgKnBkX2R2YiA9IGZlZWQtPmRlbXV4LT5wcml2OwotCWludCByZXQgPSAwOwotCi0JaWYgKCFwZF9kdmIpCi0JCXJldHVybiAtMTsKLQlpZiAoYXRvbWljX2luY19yZXR1cm4oJnBkX2R2Yi0+YWN0aXZlX2ZlZWQpID09IDEpCi0JCXJldCA9IGR2Yl9zdGFydF9zdHJlYW1pbmcocGRfZHZiKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHBkX3N0b3BfZmVlZChzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQpCi17Ci0Jc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSBmZWVkLT5kZW11eC0+cHJpdjsKLQotCWlmICghcGRfZHZiKQotCQlyZXR1cm4gLTE7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBkX2R2Yi0+YWN0aXZlX2ZlZWQpKQotCQlkdmJfc3RvcF9zdHJlYW1pbmcocGRfZHZiKTsKLQlyZXR1cm4gMDsKLX0KLQotRFZCX0RFRklORV9NT0RfT1BUX0FEQVBURVJfTlIoYWRhcHRlcl9ucik7Ci1pbnQgcGRfZHZiX3VzYl9kZXZpY2VfaW5pdChzdHJ1Y3QgcG9zZWlkb24gKnBkKQotewotCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKLQlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkZW11eDsKLQlpbnQgcmV0ID0gMDsKLQotCXBkX2R2Yi0+ZXBfYWRkciA9IDB4ODI7Ci0JYXRvbWljX3NldCgmcGRfZHZiLT51c2VycywgMCk7Ci0JYXRvbWljX3NldCgmcGRfZHZiLT5hY3RpdmVfZmVlZCwgMCk7Ci0JcGRfZHZiLT5wZF9kZXZpY2UgPSBwZDsKLQotCXJldCA9IGR2Yl9yZWdpc3Rlcl9hZGFwdGVyKCZwZF9kdmItPmR2Yl9hZGFwLAotCQkJCSJQb3NlaWRvbiBkdmJ0IGFkYXB0ZXIiLAotCQkJCVRISVNfTU9EVUxFLAotCQkJCU5VTEwgLyogZm9yIGhpYmVybmF0aW9uIGNvcnJlY3RseSovLAotCQkJCWFkYXB0ZXJfbnIpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycm9yMTsKLQotCS8qIHJlZ2lzdGVyIGZyb250ZW5kICovCi0JcGRfZHZiLT5kdmJfZmUuZGVtb2R1bGF0b3JfcHJpdiA9IHBkOwotCW1lbWNweSgmcGRfZHZiLT5kdmJfZmUub3BzLCAmcG9zZWlkb25fZnJvbnRlbmRfb3BzLAotCQkJc2l6ZW9mKHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzKSk7Ci0JcmV0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZwZF9kdmItPmR2Yl9hZGFwLCAmcGRfZHZiLT5kdmJfZmUpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycm9yMjsKLQotCS8qIHJlZ2lzdGVyIGRlbXV4IGRldmljZSAqLwotCWR2YmRlbXV4ID0gJnBkX2R2Yi0+ZGVtdXg7Ci0JZHZiZGVtdXgtPmRteC5jYXBhYmlsaXRpZXMgPSBETVhfVFNfRklMVEVSSU5HIHwgRE1YX1NFQ1RJT05fRklMVEVSSU5HOwotCWR2YmRlbXV4LT5wcml2ID0gcGRfZHZiOwotCWR2YmRlbXV4LT5mZWVkbnVtID0gZHZiZGVtdXgtPmZpbHRlcm51bSA9IDY0OwotCWR2YmRlbXV4LT5zdGFydF9mZWVkID0gcGRfc3RhcnRfZmVlZDsKLQlkdmJkZW11eC0+c3RvcF9mZWVkID0gcGRfc3RvcF9mZWVkOwotCWR2YmRlbXV4LT53cml0ZV90b19kZWNvZGVyID0gTlVMTDsKLQotCXJldCA9IGR2Yl9kbXhfaW5pdChkdmJkZW11eCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyb3IzOwotCi0JcGRfZHZiLT5kbXhkZXYuZmlsdGVybnVtID0gcGRfZHZiLT5kZW11eC5maWx0ZXJudW07Ci0JcGRfZHZiLT5kbXhkZXYuZGVtdXggPSAmcGRfZHZiLT5kZW11eC5kbXg7Ci0JcGRfZHZiLT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKLQotCXJldCA9IGR2Yl9kbXhkZXZfaW5pdCgmcGRfZHZiLT5kbXhkZXYsICZwZF9kdmItPmR2Yl9hZGFwKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJvcjM7Ci0JcmV0dXJuIDA7Ci0KLWVycm9yMzoKLQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZCgmcGRfZHZiLT5kdmJfZmUpOwotZXJyb3IyOgotCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJnBkX2R2Yi0+ZHZiX2FkYXApOwotZXJyb3IxOgotCXJldHVybiByZXQ7Ci19Ci0KLXZvaWQgcGRfZHZiX3VzYl9kZXZpY2VfZXhpdChzdHJ1Y3QgcG9zZWlkb24gKnBkKQotewotCXN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiID0gJnBkLT5kdmJfZGF0YTsKLQotCXdoaWxlIChhdG9taWNfcmVhZCgmcGRfZHZiLT51c2VycykgIT0gMAotCQl8fCBhdG9taWNfcmVhZCgmcGRfZHZiLT5hY3RpdmVfZmVlZCkgIT0gMCkgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsKLQl9Ci0JZHZiX2RteGRldl9yZWxlYXNlKCZwZF9kdmItPmRteGRldik7Ci0JZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoJnBkX2R2Yi0+ZHZiX2ZlKTsKLQlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZwZF9kdmItPmR2Yl9hZGFwKTsKLQlwZF9kdmJfdXNiX2RldmljZV9jbGVhbnVwKHBkKTsKLX0KLQotdm9pZCBwZF9kdmJfdXNiX2RldmljZV9jbGVhbnVwKHN0cnVjdCBwb3NlaWRvbiAqcGQpCi17Ci0Jc3RydWN0IHBkX2R2Yl9hZGFwdGVyICpwZF9kdmIgPSAmcGQtPmR2Yl9kYXRhOwotCi0JZHZiX3VyYl9jbGVhbnVwKHBkX2R2Yik7Ci19Ci0KLWludCBwZF9kdmJfZ2V0X2FkYXB0ZXJfbnVtKHN0cnVjdCBwZF9kdmJfYWRhcHRlciAqcGRfZHZiKQotewotCXJldHVybiBwZF9kdmItPmR2Yl9hZGFwLm51bTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90bGcyMzAwL3BkLW1haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90bGcyMzAwL3BkLW1haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMxZjQ3OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGxnMjMwMC9wZC1tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NTMgKzAsMCBAQAotLyoKLSAqIGRldmljZSBkcml2ZXIgZm9yIFRlbGVnZW50IHRsZzIzMDAgYmFzZWQgVFYgY2FyZHMKLSAqCi0gKiBBdXRob3IgOgotICogCUthbmcgWW9uZwk8a2FuZ3lvbmdAdGVsZWdlbnQuY29tPgotICogCVpoYW5nIFhpYW9iaW5nCTx4YnpoYW5nQHRlbGVnZW50LmNvbT4KLSAqIAlIdWFuZyBTaGlqaWUJPHp5emlpaUB0ZWxlZ2VudC5jb20+IG9yIDxzaGlqaWU4QGdtYWlsLmNvbT4KLSAqCi0gKgkoYykgMjAwOSBUZWxlZ2VudCBTeXN0ZW1zCi0gKgkoYykgMjAxMCBUZWxlZ2VudCBTeXN0ZW1zCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL3F1aXJrcy5oPgotI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgotCi0jaW5jbHVkZSAidmVuZG9yY21kcy5oIgotI2luY2x1ZGUgInBkLWNvbW1vbi5oIgotCi0jZGVmaW5lIFZFTkRPUl9JRAkweDFCMjQKLSNkZWZpbmUgUFJPRFVDVF9JRAkweDQwMDEKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oVkVORE9SX0lELCBQUk9EVUNUX0lELCAyNTUsIDEsIDApIH0sCi0JeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhWRU5ET1JfSUQsIFBST0RVQ1RfSUQsIDI1NSwgMSwgMSkgfSwKLQl7IH0sCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKLQotaW50IGRlYnVnX21vZGU7Ci1tb2R1bGVfcGFyYW0oZGVidWdfbW9kZSwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWdfbW9kZSwgIjAgPSBkaXNhYmxlLCAxID0gZW5hYmxlLCAyID0gdmVyYm9zZSIpOwotCi0jZGVmaW5lIFRMRzIzMDBfRklSTVdBUkUgInRsZzIzMDBfZmlybXdhcmUuYmluIgotc3RhdGljIGNvbnN0IGNoYXIgKmZpcm13YXJlX25hbWUgPSBUTEcyMzAwX0ZJUk1XQVJFOwotc3RhdGljIExJU1RfSEVBRChwZF9kZXZpY2VfbGlzdCk7Ci0KLS8qCi0gKiBzZW5kIHNldCByZXF1ZXN0IHRvIFVTQiBmaXJtd2FyZS4KLSAqLwotczMyIHNlbmRfc2V0X3JlcShzdHJ1Y3QgcG9zZWlkb24gKnBkLCB1OCBjbWRpZCwgczMyIHBhcmFtLCBzMzIgKmNtZF9zdGF0dXMpCi17Ci0JczMyIHJldDsKLQlzOCAgZGF0YVszMl0gPSB7fTsKLQl1MTYgbG93ZXJfMTYsIHVwcGVyXzE2OwotCi0JaWYgKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1QpCi0JCXJldHVybiAtRU5PREVWOwotCi0JbWRlbGF5KDMwKTsKLQotCWlmIChwYXJhbSA9PSAwKSB7Ci0JCXVwcGVyXzE2ID0gbG93ZXJfMTYgPSAwOwotCX0gZWxzZSB7Ci0JCS8qIHNlbmQgMzIgYml0IHBhcmFtIGFzICB0d28gMTYgYml0IHBhcmFtLGxpdHRsZSBlbmRpYW4gKi8KLQkJbG93ZXJfMTYgPSAodW5zaWduZWQgc2hvcnQpKHBhcmFtICYgMHhmZmZmKTsKLQkJdXBwZXJfMTYgPSAodW5zaWduZWQgc2hvcnQpKChwYXJhbSA+PiAxNikgJiAweGZmZmYpOwotCX0KLQlyZXQgPSB1c2JfY29udHJvbF9tc2cocGQtPnVkZXYsCi0JCQkgdXNiX3JjdmN0cmxwaXBlKHBkLT51ZGV2LCAwKSwKLQkJCSBSRVFfU0VUX0NNRCB8IGNtZGlkLAotCQkJIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJIGxvd2VyXzE2LAotCQkJIHVwcGVyXzE2LAotCQkJICZkYXRhLAotCQkJIHNpemVvZigqY21kX3N0YXR1cyksCi0JCQkgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOwotCi0JaWYgKCFyZXQpIHsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9IGVsc2UgewotCQkvKiAgMXN0IDQgYnl0ZXMgaW50byBjbWRfc3RhdHVzICAgKi8KLQkJbWVtY3B5KChjaGFyICopY21kX3N0YXR1cywgJihkYXRhWzBdKSwgc2l6ZW9mKCpjbWRfc3RhdHVzKSk7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogc2VuZCBnZXQgcmVxdWVzdCB0byBQb3NlaWRvbiBmaXJtd2FyZS4KLSAqLwotczMyIHNlbmRfZ2V0X3JlcShzdHJ1Y3QgcG9zZWlkb24gKnBkLCB1OCBjbWRpZCwgczMyIHBhcmFtLAotCQkJdm9pZCAqYnVmLCBzMzIgKmNtZF9zdGF0dXMsIHMzMiBkYXRhbGVuKQotewotCXMzMiByZXQ7Ci0JczggZGF0YVsxMjhdID0ge307Ci0JdTE2IGxvd2VyXzE2LCB1cHBlcl8xNjsKLQotCWlmIChwZC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9ESVNDT05ORUNUKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCW1kZWxheSgzMCk7Ci0JaWYgKHBhcmFtID09IDApIHsKLQkJdXBwZXJfMTYgPSBsb3dlcl8xNiA9IDA7Ci0JfSBlbHNlIHsKLQkJLypzZW5kIDMyIGJpdCBwYXJhbSBhcyB0d28gMTYgYml0IHBhcmFtLCBsaXR0bGUgZW5kaWFuICovCi0JCWxvd2VyXzE2ID0gKHVuc2lnbmVkIHNob3J0KShwYXJhbSAmIDB4ZmZmZik7Ci0JCXVwcGVyXzE2ID0gKHVuc2lnbmVkIHNob3J0KSgocGFyYW0gPj4gMTYpICYgMHhmZmZmKTsKLQl9Ci0JcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHBkLT51ZGV2LAotCQkJIHVzYl9yY3ZjdHJscGlwZShwZC0+dWRldiwgMCksCi0JCQkgUkVRX0dFVF9DTUQgfCBjbWRpZCwKLQkJCSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKLQkJCSBsb3dlcl8xNiwKLQkJCSB1cHBlcl8xNiwKLQkJCSAmZGF0YSwKLQkJCSAoZGF0YWxlbiArIHNpemVvZigqY21kX3N0YXR1cykpLAotCQkJIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCXJldHVybiAtRU5YSU87Ci0JfSBlbHNlIHsKLQkJLyogMXN0IDQgYnl0ZXMgaW50byBjbWRfc3RhdHVzLCByZW1haW5pbmcgZGF0YSBpbnRvIGNtZF9kYXRhICovCi0JCW1lbWNweSgoY2hhciAqKWNtZF9zdGF0dXMsICZkYXRhWzBdLCBzaXplb2YoKmNtZF9zdGF0dXMpKTsKLQkJbWVtY3B5KChjaGFyICopYnVmLCAmZGF0YVtzaXplb2YoKmNtZF9zdGF0dXMpXSwgZGF0YWxlbik7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBtX25vdGlmaWVyX2Jsb2NrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCi0JCQkJdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZHVtbXkpCi17Ci0Jc3RydWN0IHBvc2VpZG9uICpwZCA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7Ci0KLQlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBQTV9QT1NUX0hJQkVSTkFUSU9OOgotCQlsaXN0X2Zvcl9lYWNoX3NhZmUobm9kZSwgbmV4dCwgJnBkX2RldmljZV9saXN0KSB7Ci0JCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKLQkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZTsKLQkJCWludCByYyA9IDA7Ci0KLQkJCXBkID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBwb3NlaWRvbiwgZGV2aWNlX2xpc3QpOwotCQkJdWRldiA9IHBkLT51ZGV2OwotCQkJaWZhY2UgPSBwZC0+aW50ZXJmYWNlOwotCi0JCQkvKiBJdCB3aWxsIGNhdXNlIHRoZSBzeXN0ZW0gdG8gcmVsb2FkIHRoZSBmaXJtd2FyZSAqLwotCQkJcmMgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHVkZXYsIGlmYWNlKTsKLQkJCWlmIChyYyA+PSAwKSB7Ci0JCQkJdXNiX3Jlc2V0X2RldmljZSh1ZGV2KTsKLQkJCQl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JbG9nKCJldmVudCA6JWxkXG4iLCBldmVudCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcG1fbm90aWZlciA9IHsKLQkubm90aWZpZXJfY2FsbCA9IHBtX25vdGlmaWVyX2Jsb2NrLAotfTsKLQotaW50IHNldF90dW5lcl9tb2RlKHN0cnVjdCBwb3NlaWRvbiAqcGQsIHVuc2lnbmVkIGNoYXIgbW9kZSkKLXsKLQlzMzIgcmV0LCBjbWRfc3RhdHVzOwotCi0JaWYgKHBkLT5zdGF0ZSAmIFBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1QpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FX01PREVfU0VMRUNULCBtb2RlLCAmY21kX3N0YXR1cyk7Ci0JaWYgKHJldCB8fCBjbWRfc3RhdHVzKQotCQlyZXR1cm4gLUVOWElPOwotCXJldHVybiAwOwotfQotCi12b2lkIHBvc2VpZG9uX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLQlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBwb3NlaWRvbiwga3JlZik7Ci0KLQlpZiAoIXBkKQotCQlyZXR1cm47Ci0JbGlzdF9kZWxfaW5pdCgmcGQtPmRldmljZV9saXN0KTsKLQotCXBkX2R2Yl91c2JfZGV2aWNlX2NsZWFudXAocGQpOwotCS8qIGNsZWFuX2F1ZGlvX2RhdGEoJnBkLT5hdWRpb19kYXRhKTsqLwotCi0JaWYgKHBkLT51ZGV2KSB7Ci0JCXVzYl9wdXRfZGV2KHBkLT51ZGV2KTsKLQkJcGQtPnVkZXYgPSBOVUxMOwotCX0KLQlpZiAocGQtPmludGVyZmFjZSkgewotCQl1c2JfcHV0X2ludGYocGQtPmludGVyZmFjZSk7Ci0JCXBkLT5pbnRlcmZhY2UgPSBOVUxMOwotCX0KLQlrZnJlZShwZCk7Ci0JbG9nKCk7Ci19Ci0KLXN0YXRpYyBpbnQgZmlybXdhcmVfZG93bmxvYWQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCi17Ci0JaW50IHJldCA9IDAsIGFjdHVhbF9sZW5ndGg7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7Ci0Jdm9pZCAqZndidWYgPSBOVUxMOwotCXNpemVfdCBmd2xlbmd0aCA9IDAsIG9mZnNldDsKLQlzaXplX3QgbWF4X3BhY2tldF9zaXplOwotCi0JcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZpcm13YXJlX25hbWUsICZ1ZGV2LT5kZXYpOwotCWlmIChyZXQpIHsKLQkJbG9nKCJkb3dubG9hZCBlcnIgOiAlZCIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JZndsZW5ndGggPSBmdy0+c2l6ZTsKLQotCWZ3YnVmID0ga21lbWR1cChmdy0+ZGF0YSwgZndsZW5ndGgsIEdGUF9LRVJORUwpOwotCWlmICghZndidWYpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbWF4X3BhY2tldF9zaXplID0gbGUxNl90b19jcHUodWRldi0+ZXBfb3V0WzB4MV0tPmRlc2Mud01heFBhY2tldFNpemUpOwotCWxvZygiXHRcdCBkb3dubG9hZCBzaXplIDogJWQiLCAoaW50KW1heF9wYWNrZXRfc2l6ZSk7Ci0KLQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IGZ3bGVuZ3RoOyBvZmZzZXQgKz0gbWF4X3BhY2tldF9zaXplKSB7Ci0JCWFjdHVhbF9sZW5ndGggPSAwOwotCQlyZXQgPSB1c2JfYnVsa19tc2codWRldiwKLQkJCQl1c2Jfc25kYnVsa3BpcGUodWRldiwgMHgwMSksIC8qIGVwIDEgKi8KLQkJCQlmd2J1ZiArIG9mZnNldCwKLQkJCQltaW4obWF4X3BhY2tldF9zaXplLCBmd2xlbmd0aCAtIG9mZnNldCksCi0JCQkJJmFjdHVhbF9sZW5ndGgsCi0JCQkJSFogKiAxMCk7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKLQl9Ci0Ja2ZyZWUoZndidWYpOwotb3V0OgotCXJlbGVhc2VfZmlybXdhcmUoZncpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBvc2VpZG9uICpnZXRfcGQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0JcmV0dXJuIHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLS8qIG9uZS10by1vbmUgbWFwIDogcG9zZWlkb257fSA8LS0tLT4gdXNiX2RldmljZXt9J3MgcG9ydCAqLwotc3RhdGljIGlubGluZSB2b2lkIHNldF9tYXBfZmxhZ3Moc3RydWN0IHBvc2VpZG9uICpwZCwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCi17Ci0JcGQtPnBvcnRudW0gPSB1ZGV2LT5wb3J0bnVtOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBnZXRfYXV0b3BtX3JlZihzdHJ1Y3QgcG9zZWlkb24gKnBkKQotewotCXJldHVybiAgcGQtPnZpZGVvX2RhdGEudXNlcnMgKyBwZC0+dmJpX2RhdGEudXNlcnMgKyBwZC0+YXVkaW8udXNlcnMKLQkJKyBhdG9taWNfcmVhZCgmcGQtPmR2Yl9kYXRhLnVzZXJzKSArCi0JCSFsaXN0X2VtcHR5KCZwZC0+cmFkaW9fZGF0YS5mbV9kZXYuZmhfbGlzdCk7Ci19Ci0KLS8qIGZpeHVwIHNvbWV0aGluZyBmb3IgcG9zZWlkb24gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBvc2VpZG9uICpmaXh1cChzdHJ1Y3QgcG9zZWlkb24gKnBkKQotewotCWludCBjb3VudDsKLQotCS8qIG9sZCB1ZGV2IGFuZCBpbnRlcmZhY2UgaGF2ZSBnb25lLCBzbyBwdXQgYmFjayByZWZlcmVuY2UgLiAqLwotCWNvdW50ID0gZ2V0X2F1dG9wbV9yZWYocGQpOwotCWxvZygiY291bnQgOiAlZCwgcmVmIGNvdW50IDogJWQiLCBjb3VudCwgZ2V0X3BtX2NvdW50KHBkKSk7Ci0Jd2hpbGUgKGNvdW50LS0pCi0JCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKLQkvKnVzYl9hdXRvcG1fc2V0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsgKi8KLQotCXVzYl9wdXRfZGV2KHBkLT51ZGV2KTsKLQl1c2JfcHV0X2ludGYocGQtPmludGVyZmFjZSk7Ci0JbG9nKCJldmVudCA6ICVkXG4iLCBwZC0+bXNnLmV2ZW50KTsKLQlyZXR1cm4gcGQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcG9zZWlkb24gKmZpbmRfb2xkX3Bvc2VpZG9uKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQotewotCXN0cnVjdCBwb3NlaWRvbiAqcGQ7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBkLCAmcGRfZGV2aWNlX2xpc3QsIGRldmljZV9saXN0KSB7Ci0JCWlmIChwZC0+cG9ydG51bSA9PSB1ZGV2LT5wb3J0bnVtICYmIGluX2hpYmVybmF0aW9uKHBkKSkKLQkJCXJldHVybiBmaXh1cChwZCk7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi0vKiBJcyB0aGUgY2FyZCB3b3JraW5nIG5vdyA/ICovCi1zdGF0aWMgaW5saW5lIGludCBpc193b3JraW5nKHN0cnVjdCBwb3NlaWRvbiAqcGQpCi17Ci0JcmV0dXJuIGdldF9wbV9jb3VudChwZCkgPiAwOwotfQotCi1zdGF0aWMgaW50IHBvc2VpZG9uX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtc2cpCi17Ci0Jc3RydWN0IHBvc2VpZG9uICpwZCA9IGdldF9wZChpbnRmKTsKLQotCWlmICghcGQpCi0JCXJldHVybiAwOwotCWlmICghaXNfd29ya2luZyhwZCkpIHsKLQkJaWYgKGdldF9wbV9jb3VudChwZCkgPD0gMCAmJiAhaW5faGliZXJuYXRpb24ocGQpKSB7Ci0JCQlwZC0+bXNnLmV2ZW50ID0gUE1fRVZFTlRfQVVUT19TVVNQRU5EOwotCQkJcGQtPnBtX3Jlc3VtZSA9IE5VTEw7IC8qICBhIGdvb2QgZ3VhcmQgKi8KLQkJCXByaW50ayhLRVJOX0RFQlVHICJUTEcyMzAwIGF1dG8gc3VzcGVuZFxuIik7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCXBkLT5tc2cgPSBtc2c7IC8qIHNhdmUgaXQgaGVyZSAqLwotCWxvZ3BtKHBkKTsKLQlyZXR1cm4gcGQtPnBtX3N1c3BlbmQgPyBwZC0+cG1fc3VzcGVuZChwZCkgOiAwOwotfQotCi1zdGF0aWMgaW50IHBvc2VpZG9uX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKLXsKLQlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZ2V0X3BkKGludGYpOwotCi0JaWYgKCFwZCkKLQkJcmV0dXJuIDA7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlRMRzIzMDAgcmVzdW1lXG4iKTsKLQotCWlmICghaXNfd29ya2luZyhwZCkpIHsKLQkJaWYgKFBNX0VWRU5UX0FVVE9fU1VTUEVORCA9PSBwZC0+bXNnLmV2ZW50KQotCQkJcGQtPm1zZyA9IFBNU0dfT047Ci0JCXJldHVybiAwOwotCX0KLQlpZiAoaW5faGliZXJuYXRpb24ocGQpKSB7Ci0JCWxvZ3BtKHBkKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWxvZ3BtKHBkKTsKLQlyZXR1cm4gcGQtPnBtX3Jlc3VtZSA/IHBkLT5wbV9yZXN1bWUocGQpIDogMDsKLX0KLQotc3RhdGljIHZvaWQgaGliZXJuYXRpb25fcmVzdW1lKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKLXsKLQlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBwb3NlaWRvbiwgcG1fd29yayk7Ci0JaW50IGNvdW50OwotCi0JcGQtPm1zZy5ldmVudCA9IDA7IC8qIGNsZWFyIGl0IGhlcmUgKi8KLQlwZC0+c3RhdGUgJj0gflBPU0VJRE9OX1NUQVRFX0RJU0NPTk5FQ1Q7Ci0KLQkvKiBzZXQgdGhlIG5ldyBpbnRlcmZhY2UncyByZWZlcmVuY2UgKi8KLQljb3VudCA9IGdldF9hdXRvcG1fcmVmKHBkKTsKLQl3aGlsZSAoY291bnQtLSkKLQkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHBkLT5pbnRlcmZhY2UpOwotCi0JLyogcmVzdW1lIHRoZSBjb250ZXh0ICovCi0JbG9ncG0ocGQpOwotCWlmIChwZC0+cG1fcmVzdW1lKQotCQlwZC0+cG1fcmVzdW1lKHBkKTsKLX0KLSNlbHNlIC8qIENPTkZJR19QTSBpcyBub3QgZW5hYmxlZDogKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBvc2VpZG9uICpmaW5kX29sZF9wb3NlaWRvbihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9tYXBfZmxhZ3Moc3RydWN0IHBvc2VpZG9uICpwZCwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCi17Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBjaGVja19maXJtd2FyZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKLXsKLQl2b2lkICpidWY7Ci0JaW50IHJldDsKLQlzdHJ1Y3QgY21kX2Zpcm13YXJlX3ZlcnNfcyAqY21kX2Zpcm07Ci0KLQlidWYgPSBremFsbG9jKHNpemVvZigqY21kX2Zpcm0pICsgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOwotCWlmICghYnVmKQotCQlyZXR1cm4gLUVOT01FTTsKLQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwKLQkJCSB1c2JfcmN2Y3RybHBpcGUodWRldiwgMCksCi0JCQkgUkVRX0dFVF9DTUQgfCBHRVRfRldfSUQsCi0JCQkgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQkgMCwKLQkJCSAwLAotCQkJIGJ1ZiwKLQkJCSBzaXplb2YoKmNtZF9maXJtKSArIHNpemVvZih1MzIpLAotCQkJIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKLQlrZnJlZShidWYpOwotCi0JaWYgKHJldCA8IDApCi0JCXJldHVybiBmaXJtd2FyZV9kb3dubG9hZCh1ZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwb3NlaWRvbl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAotCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKLQlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgbmV3X29uZSA9IDA7Ci0KLQkvKiBkb3dubG9hZCBmaXJtd2FyZSAqLwotCXJldCA9IGNoZWNrX2Zpcm13YXJlKHVkZXYpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBEbyBJIHJlY292ZXJ5IGZyb20gdGhlIGhpYmVybmF0ZSA/ICovCi0JcGQgPSBmaW5kX29sZF9wb3NlaWRvbih1ZGV2KTsKLQlpZiAoIXBkKSB7Ci0JCXBkID0ga3phbGxvYyhzaXplb2YoKnBkKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcGQpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJa3JlZl9pbml0KCZwZC0+a3JlZik7Ci0JCXNldF9tYXBfZmxhZ3MocGQsIHVkZXYpOwotCQluZXdfb25lID0gMTsKLQl9Ci0KLQlwZC0+dWRldgk9IHVzYl9nZXRfZGV2KHVkZXYpOwotCXBkLT5pbnRlcmZhY2UJPSB1c2JfZ2V0X2ludGYoaW50ZXJmYWNlKTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgcGQpOwotCi0JaWYgKG5ld19vbmUpIHsKLQkJbG9ncG0ocGQpOwotCQltdXRleF9pbml0KCZwZC0+bG9jayk7Ci0KLQkJLyogcmVnaXN0ZXIgdjRsMiBkZXZpY2UgKi8KLQkJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJmludGVyZmFjZS0+ZGV2LCAmcGQtPnY0bDJfZGV2KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyX3Y0bDI7Ci0KLQkJLyogcmVnaXN0ZXIgZGV2aWNlcyBpbiBkaXJlY3RvcnkgL2RldiAqLwotCQlyZXQgPSBwZF92aWRlb19pbml0KHBkKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyX3ZpZGVvOwotCQlyZXQgPSBwb3NlaWRvbl9hdWRpb19pbml0KHBkKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyX2F1ZGlvOwotCQlyZXQgPSBwb3NlaWRvbl9mbV9pbml0KHBkKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyX2ZtOwotCQlyZXQgPSBwZF9kdmJfdXNiX2RldmljZV9pbml0KHBkKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gZXJyX2R2YjsKLQotCQlJTklUX0xJU1RfSEVBRCgmcGQtPmRldmljZV9saXN0KTsKLQkJbGlzdF9hZGRfdGFpbCgmcGQtPmRldmljZV9saXN0LCAmcGRfZGV2aWNlX2xpc3QpOwotCX0KLQotCWRldmljZV9pbml0X3dha2V1cCgmdWRldi0+ZGV2LCAxKTsKLSNpZmRlZiBDT05GSUdfUE0KLQlwbV9ydW50aW1lX3NldF9hdXRvc3VzcGVuZF9kZWxheSgmcGQtPnVkZXYtPmRldiwKLQkJCTEwMDAgKiBQTV9TVVNQRU5EX0RFTEFZKTsKLQl1c2JfZW5hYmxlX2F1dG9zdXNwZW5kKHBkLT51ZGV2KTsKLQotCWlmIChpbl9oaWJlcm5hdGlvbihwZCkpIHsKLQkJSU5JVF9XT1JLKCZwZC0+cG1fd29yaywgaGliZXJuYXRpb25fcmVzdW1lKTsKLQkJc2NoZWR1bGVfd29yaygmcGQtPnBtX3dvcmspOwotCX0KLSNlbmRpZgotCXJldHVybiAwOwotZXJyX2R2YjoKLQlwb3NlaWRvbl9mbV9leGl0KHBkKTsKLWVycl9mbToKLQlwb3NlaWRvbl9hdWRpb19mcmVlKHBkKTsKLWVycl9hdWRpbzoKLQlwZF92aWRlb19leGl0KHBkKTsKLWVycl92aWRlbzoKLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZwZC0+djRsMl9kZXYpOwotZXJyX3Y0bDI6Ci0JdXNiX3B1dF9pbnRmKHBkLT5pbnRlcmZhY2UpOwotCXVzYl9wdXRfZGV2KHBkLT51ZGV2KTsKLQlrZnJlZShwZCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgcG9zZWlkb25fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQotewotCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBnZXRfcGQoaW50ZXJmYWNlKTsKLQotCWlmICghcGQpCi0JCXJldHVybjsKLQlsb2dwbShwZCk7Ci0JaWYgKGluX2hpYmVybmF0aW9uKHBkKSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmcGQtPmxvY2spOwotCXBkLT5zdGF0ZSB8PSBQT1NFSURPTl9TVEFURV9ESVNDT05ORUNUOwotCW11dGV4X3VubG9jaygmcGQtPmxvY2spOwotCi0JLyogc3RvcCB1cmIgdHJhbnNmZXJyaW5nICovCi0Jc3RvcF9hbGxfdmlkZW9fc3RyZWFtKHBkKTsKLQlkdmJfc3RvcF9zdHJlYW1pbmcoJnBkLT5kdmJfZGF0YSk7Ci0KLQkvKnVucmVnaXN0ZXIgdjRsMiBkZXZpY2UgKi8KLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZwZC0+djRsMl9kZXYpOwotCi0JcGRfZHZiX3VzYl9kZXZpY2VfZXhpdChwZCk7Ci0JcG9zZWlkb25fZm1fZXhpdChwZCk7Ci0KLQlwb3NlaWRvbl9hdWRpb19mcmVlKHBkKTsKLQlwZF92aWRlb19leGl0KHBkKTsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLQlrcmVmX3B1dCgmcGQtPmtyZWYsIHBvc2VpZG9uX2RlbGV0ZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwb3NlaWRvbl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gInBvc2VpZG9uIiwKLQkucHJvYmUJCT0gcG9zZWlkb25fcHJvYmUsCi0JLmRpc2Nvbm5lY3QJPSBwb3NlaWRvbl9kaXNjb25uZWN0LAotCS5pZF90YWJsZQk9IGlkX3RhYmxlLAotI2lmZGVmIENPTkZJR19QTQotCS5zdXNwZW5kCT0gcG9zZWlkb25fc3VzcGVuZCwKLQkucmVzdW1lCQk9IHBvc2VpZG9uX3Jlc3VtZSwKLSNlbmRpZgotCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDEsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBwb3NlaWRvbl9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHVzYl9yZWdpc3RlcigmcG9zZWlkb25fZHJpdmVyKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCXJlZ2lzdGVyX3BtX25vdGlmaWVyKCZwbV9ub3RpZmVyKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcG9zZWlkb25fZXhpdCh2b2lkKQotewotCWxvZygpOwotCXVucmVnaXN0ZXJfcG1fbm90aWZpZXIoJnBtX25vdGlmZXIpOwotCXVzYl9kZXJlZ2lzdGVyKCZwb3NlaWRvbl9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChwb3NlaWRvbl9pbml0KTsKLW1vZHVsZV9leGl0KHBvc2VpZG9uX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJUZWxlZ2VudCBTeXN0ZW1zIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkZvciB0bGcyMzAwLWJhc2VkIFVTQiBkZXZpY2UiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9WRVJTSU9OKCIwLjAuMiIpOwotTU9EVUxFX0ZJUk1XQVJFKFRMRzIzMDBfRklSTVdBUkUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvcGQtcmFkaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90bGcyMzAwL3BkLXJhZGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOTExOTQuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvcGQtcmFkaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDMzOSArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1ldmVudC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItZmguaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCi0jaW5jbHVkZSAicGQtY29tbW9uLmgiCi0jaW5jbHVkZSAidmVuZG9yY21kcy5oIgotCi1zdGF0aWMgaW50IHNldF9mcmVxdWVuY3koc3RydWN0IHBvc2VpZG9uICpwLCBfX3UzMiBmcmVxdWVuY3kpOwotc3RhdGljIGludCBwb3NlaWRvbl9mbV9jbG9zZShzdHJ1Y3QgZmlsZSAqZmlscCk7Ci1zdGF0aWMgaW50IHBvc2VpZG9uX2ZtX29wZW4oc3RydWN0IGZpbGUgKmZpbHApOwotCi0jZGVmaW5lIFRVTkVSX0ZSRVFfTUlOX0ZNIDc2MDAwMDAwVQotI2RlZmluZSBUVU5FUl9GUkVRX01BWF9GTSAxMDgwMDAwMDBVCi0KLSNkZWZpbmUgTUFYX1BSRUVNUEhBU0lTIChWNEwyX1BSRUVNUEhBU0lTXzc1X3VTICsgMSkKLXN0YXRpYyBpbnQgcHJlZW1waGFzaXNbTUFYX1BSRUVNUEhBU0lTXSA9IHsKLQlUTEdfVFVORV9BU1REX05PTkUsICAgLyogVjRMMl9QUkVFTVBIQVNJU19ESVNBQkxFRCAqLwotCVRMR19UVU5FX0FTVERfRk1fRVVSLCAvKiBWNEwyX1BSRUVNUEhBU0lTXzUwX3VTICAgICovCi0JVExHX1RVTkVfQVNURF9GTV9VUywgIC8qIFY0TDJfUFJFRU1QSEFTSVNfNzVfdVMgICAgKi8KLX07Ci0KLXN0YXRpYyBpbnQgcG9zZWlkb25fY2hlY2tfbW9kZV9yYWRpbyhzdHJ1Y3QgcG9zZWlkb24gKnApCi17Ci0JaW50IHJldDsKLQl1MzIgc3RhdHVzOwotCi0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQlzY2hlZHVsZV90aW1lb3V0KEhaLzIpOwotCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHAtPnVkZXYsIDAsIEJVTEtfQUxURVJOQVRFX0lGQUNFKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSBzZXRfdHVuZXJfbW9kZShwLCBUTEdfTU9ERV9GTV9SQURJTyk7Ci0JaWYgKHJldCAhPSAwKQotCQlnb3RvIG91dDsKLQotCXJldCA9IHNlbmRfc2V0X3JlcShwLCBTR05MX1NSQ19TRUwsIFRMR19TSUdfU1JDX0FOVEVOTkEsICZzdGF0dXMpOwotCXJldCA9IHNlbmRfc2V0X3JlcShwLCBUVU5FUl9BVURfQU5BX1NURCwKLQkJCQlwLT5yYWRpb19kYXRhLnByZV9lbXBoYXNpcywgJnN0YXR1cyk7Ci0JcmV0IHw9IHNlbmRfc2V0X3JlcShwLCBUVU5FUl9BVURfTU9ERSwKLQkJCQlUTEdfVFVORV9UVkFVRElPX01PREVfU1RFUkVPLCAmc3RhdHVzKTsKLQlyZXQgfD0gc2VuZF9zZXRfcmVxKHAsIEFVRElPX1NBTVBMRV9SQVRFX1NFTCwKLQkJCQlBVFZfQVVESU9fUkFURV80OEssICZzdGF0dXMpOwotCXJldCB8PSBzZW5kX3NldF9yZXEocCwgVFVORV9GUkVRX1NFTEVDVCwgVFVORVJfRlJFUV9NSU5fRk0sICZzdGF0dXMpOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcG1fZm1fc3VzcGVuZChzdHJ1Y3QgcG9zZWlkb24gKnApCi17Ci0JbG9ncG0ocCk7Ci0JcG1fYWxzYV9zdXNwZW5kKHApOwotCXVzYl9zZXRfaW50ZXJmYWNlKHAtPnVkZXYsIDAsIDApOwotCW1zbGVlcCgzMDApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBtX2ZtX3Jlc3VtZShzdHJ1Y3QgcG9zZWlkb24gKnApCi17Ci0JbG9ncG0ocCk7Ci0JcG9zZWlkb25fY2hlY2tfbW9kZV9yYWRpbyhwKTsKLQlzZXRfZnJlcXVlbmN5KHAsIHAtPnJhZGlvX2RhdGEuZm1fZnJlcSk7Ci0JcG1fYWxzYV9yZXN1bWUocCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBwb3NlaWRvbl9mbV9vcGVuKHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCBwb3NlaWRvbiAqcCA9IHZpZGVvX2RydmRhdGEoZmlscCk7Ci0JaW50IHJldCA9IDA7Ci0KLQltdXRleF9sb2NrKCZwLT5sb2NrKTsKLQlpZiAocC0+c3RhdGUgJiBQT1NFSURPTl9TVEFURV9ESVNDT05ORUNUKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChwLT5zdGF0ZSAmJiAhKHAtPnN0YXRlICYgUE9TRUlET05fU1RBVEVfRk0pKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQotCXJldCA9IHY0bDJfZmhfb3BlbihmaWxwKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShwLT5pbnRlcmZhY2UpOwotCWlmICgwID09IHAtPnN0YXRlKSB7Ci0JCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCA9ICZwLT5yYWRpb19kYXRhLmZtX2RldjsKLQotCQkvKiBkZWZhdWx0IHByZS1lbXBoYXNpcyAqLwotCQlpZiAocC0+cmFkaW9fZGF0YS5wcmVfZW1waGFzaXMgPT0gMCkKLQkJCXAtPnJhZGlvX2RhdGEucHJlX2VtcGhhc2lzID0gVExHX1RVTkVfQVNURF9GTV9FVVI7Ci0JCXNldF9kZWJ1Z19tb2RlKHZmZCwgZGVidWdfbW9kZSk7Ci0KLQkJcmV0ID0gcG9zZWlkb25fY2hlY2tfbW9kZV9yYWRpbyhwKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwLT5pbnRlcmZhY2UpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJcC0+c3RhdGUgfD0gUE9TRUlET05fU1RBVEVfRk07Ci0JfQotCWtyZWZfZ2V0KCZwLT5rcmVmKTsKLW91dDoKLQltdXRleF91bmxvY2soJnAtPmxvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgcG9zZWlkb25fZm1fY2xvc2Uoc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IHBvc2VpZG9uICpwID0gdmlkZW9fZHJ2ZGF0YShmaWxwKTsKLQlzdHJ1Y3QgcmFkaW9fZGF0YSAqZm0gPSAmcC0+cmFkaW9fZGF0YTsKLQl1aW50MzJfdCBzdGF0dXM7Ci0KLQltdXRleF9sb2NrKCZwLT5sb2NrKTsKLQlpZiAodjRsMl9maF9pc19zaW5ndWxhcl9maWxlKGZpbHApKQotCQlwLT5zdGF0ZSAmPSB+UE9TRUlET05fU1RBVEVfRk07Ci0KLQlpZiAoZm0tPmlzX3JhZGlvX3N0cmVhbWluZyAmJiBmaWxwID09IHAtPmZpbGVfZm9yX3N0cmVhbSkgewotCQlmbS0+aXNfcmFkaW9fc3RyZWFtaW5nID0gMDsKLQkJc2VuZF9zZXRfcmVxKHAsIFBMQVlfU0VSVklDRSwgVExHX1RVTkVfUExBWV9TVkNfU1RPUCwgJnN0YXR1cyk7Ci0JfQotCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwLT5pbnRlcmZhY2UpOwotCW11dGV4X3VubG9jaygmcC0+bG9jayk7Ci0KLQlrcmVmX3B1dCgmcC0+a3JlZiwgcG9zZWlkb25fZGVsZXRlKTsKLQlyZXR1cm4gdjRsMl9maF9yZWxlYXNlKGZpbHApOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYpCi17Ci0Jc3RydWN0IHBvc2VpZG9uICpwID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCXN0cmxjcHkodi0+ZHJpdmVyLCAidGVsZS1yYWRpbyIsIHNpemVvZih2LT5kcml2ZXIpKTsKLQlzdHJsY3B5KHYtPmNhcmQsICJUZWxlZ2VudCBQb3NlaWRvbiIsIHNpemVvZih2LT5jYXJkKSk7Ci0JdXNiX21ha2VfcGF0aChwLT51ZGV2LCB2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7Ci0Jdi0+ZGV2aWNlX2NhcHMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwotCS8qIFJlcG9ydCBhbGwgY2FwYWJpbGl0aWVzIG9mIHRoZSBVU0IgZGV2aWNlICovCi0Jdi0+Y2FwYWJpbGl0aWVzID0gdi0+ZGV2aWNlX2NhcHMgfCBWNEwyX0NBUF9ERVZJQ0VfQ0FQUyB8Ci0JCQlWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfVkJJX0NBUFRVUkUgfAotCQkJVjRMMl9DQVBfQVVESU8gfCBWNEwyX0NBUF9TVFJFQU1JTkcgfAotCQkJVjRMMl9DQVBfUkVBRFdSSVRFOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHBvc2VpZG9uX2ZtX2ZvcHMgPSB7Ci0JLm93bmVyICAgICAgICAgPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICA9IHBvc2VpZG9uX2ZtX29wZW4sCi0JLnJlbGVhc2UgICAgICAgPSBwb3NlaWRvbl9mbV9jbG9zZSwKLQkucG9sbAkJPSB2NGwyX2N0cmxfcG9sbCwKLQkudW5sb2NrZWRfaW9jdGwgPSB2aWRlb19pb2N0bDIsCi19OwotCi1zdGF0aWMgaW50IHRsZ19mbV92aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQotewotCXN0cnVjdCBwb3NlaWRvbiAqcCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHR1bmVyX2ZtX3NpZ19zdGF0X3MgZm1fc3RhdCA9IHt9OwotCWludCByZXQsIHN0YXR1cywgY291bnQgPSA1OwotCi0JaWYgKHZ0LT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXZ0LT50eXBlCT0gVjRMMl9UVU5FUl9SQURJTzsKLQl2dC0+Y2FwYWJpbGl0eQk9IFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8IFY0TDJfVFVORVJfQ0FQX0xPVzsKLQl2dC0+cmFuZ2Vsb3cJPSBUVU5FUl9GUkVRX01JTl9GTSAqIDIgLyAxMjU7Ci0JdnQtPnJhbmdlaGlnaAk9IFRVTkVSX0ZSRVFfTUFYX0ZNICogMiAvIDEyNTsKLQl2dC0+cnhzdWJjaGFucwk9IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQl2dC0+YXVkbW9kZQk9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87Ci0JdnQtPnNpZ25hbAk9IDA7Ci0JdnQtPmFmYyAJPSAwOwotCXN0cmxjcHkodnQtPm5hbWUsICJSYWRpbyIsIHNpemVvZih2dC0+bmFtZSkpOwotCi0JbXV0ZXhfbG9jaygmcC0+bG9jayk7Ci0JcmV0ID0gc2VuZF9nZXRfcmVxKHAsIFRVTkVSX1NUQVRVUywgVExHX01PREVfRk1fUkFESU8sCi0JCQkgICAgICAmZm1fc3RhdCwgJnN0YXR1cywgc2l6ZW9mKGZtX3N0YXQpKTsKLQotCXdoaWxlIChmbV9zdGF0LnNpZ19sb2NrX2J1c3kgJiYgY291bnQtLSAmJiAhcmV0KSB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNjaGVkdWxlX3RpbWVvdXQoSFopOwotCi0JCXJldCA9IHNlbmRfZ2V0X3JlcShwLCBUVU5FUl9TVEFUVVMsIFRMR19NT0RFX0ZNX1JBRElPLAotCQkJCSAgJmZtX3N0YXQsICZzdGF0dXMsIHNpemVvZihmbV9zdGF0KSk7Ci0JfQotCW11dGV4X3VubG9jaygmcC0+bG9jayk7Ci0KLQlpZiAocmV0IHx8IHN0YXR1cykgewotCQl2dC0+c2lnbmFsID0gMDsKLQl9IGVsc2UgaWYgKChmbV9zdGF0LnNpZ19wcmVzZW50IHx8IGZtX3N0YXQuc2lnX2xvY2tlZCkKLQkJCSYmIGZtX3N0YXQuc2lnX3N0cmVuZ3RoID09IDApIHsKLQkJdnQtPnNpZ25hbCA9IDB4ZmZmZjsKLQl9IGVsc2UKLQkJdnQtPnNpZ25hbCA9IChmbV9zdGF0LnNpZ19zdHJlbmd0aCAqIDI1NSAvIDEwKSA8PCA4OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZm1fZ2V0X2ZyZXEoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCSAgICAgICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmFyZ3ApCi17Ci0Jc3RydWN0IHBvc2VpZG9uICpwID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCWlmIChhcmdwLT50dW5lcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JYXJncC0+ZnJlcXVlbmN5ID0gcC0+cmFkaW9fZGF0YS5mbV9mcmVxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNldF9mcmVxdWVuY3koc3RydWN0IHBvc2VpZG9uICpwLCBfX3UzMiBmcmVxdWVuY3kpCi17Ci0JX191MzIgZnJlcSA7Ci0JaW50IHJldCwgc3RhdHVzOwotCi0JbXV0ZXhfbG9jaygmcC0+bG9jayk7Ci0KLQlyZXQgPSBzZW5kX3NldF9yZXEocCwgVFVORVJfQVVEX0FOQV9TVEQsCi0JCQkJcC0+cmFkaW9fZGF0YS5wcmVfZW1waGFzaXMsICZzdGF0dXMpOwotCi0JZnJlcSA9IChmcmVxdWVuY3kgKiAxMjUpIC8gMjsgLyogSHogKi8KLQlmcmVxID0gY2xhbXAoZnJlcSwgVFVORVJfRlJFUV9NSU5fRk0sIFRVTkVSX0ZSRVFfTUFYX0ZNKTsKLQotCXJldCA9IHNlbmRfc2V0X3JlcShwLCBUVU5FX0ZSRVFfU0VMRUNULCBmcmVxLCAmc3RhdHVzKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJvciA7Ci0JcmV0ID0gc2VuZF9zZXRfcmVxKHAsIFRBS0VfUkVRVUVTVCwgMCwgJnN0YXR1cyk7Ci0KLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCXNjaGVkdWxlX3RpbWVvdXQoSFovNCk7Ci0JaWYgKCFwLT5yYWRpb19kYXRhLmlzX3JhZGlvX3N0cmVhbWluZykgewotCQlyZXQgPSBzZW5kX3NldF9yZXEocCwgVEFLRV9SRVFVRVNULCAwLCAmc3RhdHVzKTsKLQkJcmV0ID0gc2VuZF9zZXRfcmVxKHAsIFBMQVlfU0VSVklDRSwKLQkJCQlUTEdfVFVORV9QTEFZX1NWQ19TVEFSVCwgJnN0YXR1cyk7Ci0JCXAtPnJhZGlvX2RhdGEuaXNfcmFkaW9fc3RyZWFtaW5nID0gMTsKLQl9Ci0JcC0+cmFkaW9fZGF0YS5mbV9mcmVxID0gZnJlcSAqIDIgLyAxMjU7Ci1lcnJvcjoKLQltdXRleF91bmxvY2soJnAtPmxvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZm1fc2V0X2ZyZXEoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmFyZ3ApCi17Ci0Jc3RydWN0IHBvc2VpZG9uICpwID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCWlmIChhcmdwLT50dW5lcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcC0+ZmlsZV9mb3Jfc3RyZWFtID0gZmlsZTsKLSNpZmRlZiBDT05GSUdfUE0KLQlwLT5wbV9zdXNwZW5kID0gcG1fZm1fc3VzcGVuZDsKLQlwLT5wbV9yZXN1bWUgID0gcG1fZm1fcmVzdW1lOwotI2VuZGlmCi0JcmV0dXJuIHNldF9mcmVxdWVuY3kocCwgYXJncC0+ZnJlcXVlbmN5KTsKLX0KLQotc3RhdGljIGludCB0bGdfZm1fc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpCi17Ci0Jc3RydWN0IHBvc2VpZG9uICpwID0gY29udGFpbmVyX29mKGN0cmwtPmhhbmRsZXIsIHN0cnVjdCBwb3NlaWRvbiwKLQkJCQkJCXJhZGlvX2RhdGEuY3RybF9oYW5kbGVyKTsKLQlpbnQgcHJlX2VtcGhhc2lzOwotCXUzMiBzdGF0dXM7Ci0KLQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9UVU5FX1BSRUVNUEhBU0lTOgotCQlwcmVfZW1waGFzaXMgPSBwcmVlbXBoYXNpc1tjdHJsLT52YWxdOwotCQlzZW5kX3NldF9yZXEocCwgVFVORVJfQVVEX0FOQV9TVEQsIHByZV9lbXBoYXNpcywgJnN0YXR1cyk7Ci0JCXAtPnJhZGlvX2RhdGEucHJlX2VtcGhhc2lzID0gcHJlX2VtcGhhc2lzOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGNvbnN0IHN0cnVjdCB2NGwyX3R1bmVyICp2dCkKLXsKLQlyZXR1cm4gdnQtPmluZGV4ID4gMCA/IC1FSU5WQUwgOiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgdGxnX2ZtX2N0cmxfb3BzID0gewotCS5zX2N0cmwgPSB0bGdfZm1fc19jdHJsLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBwb3NlaWRvbl9mbV9pb2N0bF9vcHMgPSB7Ci0JLnZpZGlvY19xdWVyeWNhcCAgICA9IHZpZGlvY19xdWVyeWNhcCwKLQkudmlkaW9jX3NfdHVuZXIgICAgID0gdmlkaW9jX3NfdHVuZXIsCi0JLnZpZGlvY19nX3R1bmVyICAgICA9IHRsZ19mbV92aWRpb2NfZ190dW5lciwKLQkudmlkaW9jX2dfZnJlcXVlbmN5ID0gZm1fZ2V0X2ZyZXEsCi0JLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IGZtX3NldF9mcmVxLAotCS52aWRpb2Nfc3Vic2NyaWJlX2V2ZW50ID0gdjRsMl9jdHJsX3N1YnNjcmliZV9ldmVudCwKLQkudmlkaW9jX3Vuc3Vic2NyaWJlX2V2ZW50ID0gdjRsMl9ldmVudF91bnN1YnNjcmliZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHBvc2VpZG9uX2ZtX3RlbXBsYXRlID0gewotCS5uYW1lICAgICAgID0gIlRlbGVnZW50LVJhZGlvIiwKLQkuZm9wcyAgICAgICA9ICZwb3NlaWRvbl9mbV9mb3BzLAotCS5taW5vciAgICAgID0gLTEsCi0JLnJlbGVhc2UgICAgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLQkuaW9jdGxfb3BzICA9ICZwb3NlaWRvbl9mbV9pb2N0bF9vcHMsCi19OwotCi1pbnQgcG9zZWlkb25fZm1faW5pdChzdHJ1Y3QgcG9zZWlkb24gKnApCi17Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gJnAtPnJhZGlvX2RhdGEuZm1fZGV2OwotCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsID0gJnAtPnJhZGlvX2RhdGEuY3RybF9oYW5kbGVyOwotCi0JKnZmZCA9IHBvc2VpZG9uX2ZtX3RlbXBsYXRlOwotCi0Jc2V0X2ZyZXF1ZW5jeShwLCBUVU5FUl9GUkVRX01JTl9GTSk7Ci0JdjRsMl9jdHJsX2hhbmRsZXJfaW5pdChoZGwsIDEpOwotCXY0bDJfY3RybF9uZXdfc3RkX21lbnUoaGRsLCAmdGxnX2ZtX2N0cmxfb3BzLCBWNEwyX0NJRF9UVU5FX1BSRUVNUEhBU0lTLAotCQkJVjRMMl9QUkVFTVBIQVNJU183NV91UywgMCwgVjRMMl9QUkVFTVBIQVNJU181MF91Uyk7Ci0JaWYgKGhkbC0+ZXJyb3IpIHsKLQkJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZShoZGwpOwotCQlyZXR1cm4gaGRsLT5lcnJvcjsKLQl9Ci0JdmZkLT52NGwyX2RldiA9ICZwLT52NGwyX2RldjsKLQl2ZmQtPmN0cmxfaGFuZGxlciA9IGhkbDsKLQl2aWRlb19zZXRfZHJ2ZGF0YSh2ZmQsIHApOwotCXJldHVybiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmZkLCBWRkxfVFlQRV9SQURJTywgLTEpOwotfQotCi1pbnQgcG9zZWlkb25fZm1fZXhpdChzdHJ1Y3QgcG9zZWlkb24gKnApCi17Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnAtPnJhZGlvX2RhdGEuZm1fZGV2KTsKLQl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZwLT5yYWRpb19kYXRhLmN0cmxfaGFuZGxlcik7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGxnMjMwMC9wZC12aWRlby5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvcGQtdmlkZW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNkN2YwMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdGxnMjMwMC9wZC12aWRlby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU3MCArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KLQotI2luY2x1ZGUgInBkLWNvbW1vbi5oIgotI2luY2x1ZGUgInZlbmRvcmNtZHMuaCIKLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBwbV92aWRlb19zdXNwZW5kKHN0cnVjdCBwb3NlaWRvbiAqcGQpOwotc3RhdGljIGludCBwbV92aWRlb19yZXN1bWUoc3RydWN0IHBvc2VpZG9uICpwZCk7Ci0jZW5kaWYKLXN0YXRpYyB2b2lkIGlzb19idWJibGVfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpOwotCi1zdGF0aWMgaW50IHVzYl90cmFuc2Zlcl9tb2RlOwotbW9kdWxlX3BhcmFtKHVzYl90cmFuc2Zlcl9tb2RlLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyh1c2JfdHJhbnNmZXJfbW9kZSwgIjAgPSBCdWxrLCAxID0gSXNvY2hyb25vdXMiKTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwb3NlaWRvbl9mb3JtYXQgcG9zZWlkb25fZm9ybWF0c1tdID0gewotCXsgIllVViA0MjIiLCBWNEwyX1BJWF9GTVRfWVVZViwgMTYsIDB9LAotCXsgIlJHQjU2NSIsIFY0TDJfUElYX0ZNVF9SR0I1NjUsIDE2LCAwfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcG9zZWlkb25fdHZub3JtIHBvc2VpZG9uX3R2bm9ybXNbXSA9IHsKLQl7IFY0TDJfU1REX1BBTF9ELCAiUEFMLUQiLCAgVExHX1RVTkVfVlNURF9QQUxfRCB9LAotCXsgVjRMMl9TVERfUEFMX0IsICJQQUwtQiIsICBUTEdfVFVORV9WU1REX1BBTF9CIH0sCi0JeyBWNEwyX1NURF9QQUxfRywgIlBBTC1HIiwgIFRMR19UVU5FX1ZTVERfUEFMX0cgfSwKLQl7IFY0TDJfU1REX1BBTF9ILCAiUEFMLUgiLCAgVExHX1RVTkVfVlNURF9QQUxfSCB9LAotCXsgVjRMMl9TVERfUEFMX0ksICJQQUwtSSIsICBUTEdfVFVORV9WU1REX1BBTF9JIH0sCi0JeyBWNEwyX1NURF9QQUxfTSwgIlBBTC1NIiwgIFRMR19UVU5FX1ZTVERfUEFMX00gfSwKLQl7IFY0TDJfU1REX1BBTF9OLCAiUEFMLU4iLCAgVExHX1RVTkVfVlNURF9QQUxfTl9DT01CTyB9LAotCXsgVjRMMl9TVERfUEFMX05jLCAiUEFMLU5jIiwgVExHX1RVTkVfVlNURF9QQUxfTl9DT01CTyB9LAotCXsgVjRMMl9TVERfTlRTQ19NLCAiTlRTQy1NIiwgVExHX1RVTkVfVlNURF9OVFNDX00gfSwKLQl7IFY0TDJfU1REX05UU0NfTV9KUCwgIk5UU0MtSlAiLCBUTEdfVFVORV9WU1REX05UU0NfTV9KIH0sCi0JeyBWNEwyX1NURF9TRUNBTV9CLCAiU0VDQU0tQiIsIFRMR19UVU5FX1ZTVERfU0VDQU1fQiB9LAotCXsgVjRMMl9TVERfU0VDQU1fRCwgIlNFQ0FNLUQiLCBUTEdfVFVORV9WU1REX1NFQ0FNX0QgfSwKLQl7IFY0TDJfU1REX1NFQ0FNX0csICJTRUNBTS1HIiwgVExHX1RVTkVfVlNURF9TRUNBTV9HIH0sCi0JeyBWNEwyX1NURF9TRUNBTV9ILCAiU0VDQU0tSCIsIFRMR19UVU5FX1ZTVERfU0VDQU1fSCB9LAotCXsgVjRMMl9TVERfU0VDQU1fSywgIlNFQ0FNLUsiLCBUTEdfVFVORV9WU1REX1NFQ0FNX0sgfSwKLQl7IFY0TDJfU1REX1NFQ0FNX0sxLCAiU0VDQU0tSzEiLCBUTEdfVFVORV9WU1REX1NFQ0FNX0sxIH0sCi0JeyBWNEwyX1NURF9TRUNBTV9MLCAiU0VDQU0tTCIsIFRMR19UVU5FX1ZTVERfU0VDQU1fTCB9LAotCXsgVjRMMl9TVERfU0VDQU1fTEMsICJTRUNBTS1MQyIsIFRMR19UVU5FX1ZTVERfU0VDQU1fTDEgfSwKLX07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IFBPU0VJRE9OX1RWTk9STVMgPSBBUlJBWV9TSVpFKHBvc2VpZG9uX3R2bm9ybXMpOwotCi1zdHJ1Y3QgcGRfYXVkaW9fbW9kZSB7Ci0JdTMyIHRsZ19hdWRpb19tb2RlOwotCXUzMiB2NGwyX2F1ZGlvX3N1YjsKLQl1MzIgdjRsMl9hdWRpb19tb2RlOwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwZF9hdWRpb19tb2RlIHBkX2F1ZGlvX21vZGVzW10gPSB7Ci0JeyBUTEdfVFVORV9UVkFVRElPX01PREVfTU9OTywgVjRMMl9UVU5FUl9TVUJfTU9OTywKLQkJVjRMMl9UVU5FUl9NT0RFX01PTk8gfSwKLQl7IFRMR19UVU5FX1RWQVVESU9fTU9ERV9TVEVSRU8sIFY0TDJfVFVORVJfU1VCX1NURVJFTywKLQkJVjRMMl9UVU5FUl9NT0RFX1NURVJFTyB9LAotCXsgVExHX1RVTkVfVFZBVURJT19NT0RFX0xBTkdfQSwgVjRMMl9UVU5FUl9TVUJfTEFORzEsCi0JCVY0TDJfVFVORVJfTU9ERV9MQU5HMSB9LAotCXsgVExHX1RVTkVfVFZBVURJT19NT0RFX0xBTkdfQiwgVjRMMl9UVU5FUl9TVUJfTEFORzIsCi0JCVY0TDJfVFVORVJfTU9ERV9MQU5HMiB9LAotCXsgVExHX1RVTkVfVFZBVURJT19NT0RFX0xBTkdfQywgVjRMMl9UVU5FUl9TVUJfTEFORzEsCi0JCVY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMiB9Ci19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBQT1NFSURPTl9BVURJT01PRFMgPSBBUlJBWV9TSVpFKHBkX2F1ZGlvX21vZGVzKTsKLQotc3RydWN0IHBkX2lucHV0IHsKLQljaGFyICpuYW1lOwotCXVpbnQzMl90IHRsZ19zcmM7Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBkX2lucHV0IHBkX2lucHV0c1tdID0gewotCXsgIlRWIEFudGVubmEiLCBUTEdfU0lHX1NSQ19BTlRFTk5BIH0sCi0JeyAiVFYgQ2FibGUiLCBUTEdfU0lHX1NSQ19DQUJMRSB9LAotCXsgIlRWIFNWaWRlbyIsIFRMR19TSUdfU1JDX1NWSURFTyB9LAotCXsgIlRWIENvbXBvc2l0ZSIsIFRMR19TSUdfU1JDX0NPTVBPU0lURSB9Ci19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBQT1NFSURPTl9JTlBVVFMgPSBBUlJBWV9TSVpFKHBkX2lucHV0cyk7Ci0KLXN0cnVjdCB2aWRlb19zdGRfdG9fYXVkaW9fc3RkIHsKLQl2NGwyX3N0ZF9pZAl2aWRlb19zdGQ7Ci0JaW50IAkJYXVkaW9fc3RkOwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19zdGRfdG9fYXVkaW9fc3RkIHZpZGVvX3RvX2F1ZGlvX21hcFtdID0gewotCS8qIGNvdW50cnkgOiB7IDI3LCAzMiwgMzMsIDM0LCAzNiwgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA2NCwKLQkJCTY1LCA4NiwgMzUxLCAzNTIsIDM1MywgMzU0LCAzNTgsIDM3MiwgODUyLCA5NzIgfSAqLwotCXsgKFY0TDJfU1REX1BBTF9JIHwgVjRMMl9TVERfUEFMX0IgfCBWNEwyX1NURF9QQUxfRCB8Ci0JCVY0TDJfU1REX1NFQ0FNX0wgfCBWNEwyX1NURF9TRUNBTV9EKSwgVExHX1RVTkVfQVNURF9OSUNBTSB9LAotCi0JLyogY291bnRyeSA6IHsgMSwgNTIsIDU0LCA1NSwgODg2IH0gKi8KLQl7VjRMMl9TVERfTlRTQ19NIHwgVjRMMl9TVERfUEFMX04gfCBWNEwyX1NURF9QQUxfTSwgVExHX1RVTkVfQVNURF9CVFNDfSwKLQotCS8qIGNvdW50cnkgOiB7IDgxIH0gKi8KLQl7IFY0TDJfU1REX05UU0NfTV9KUCwgVExHX1RVTkVfQVNURF9FSUFKIH0sCi0KLQkvKiBvdGhlciBjb3VudHJ5IDogVExHX1RVTkVfQVNURF9BMiAqLwotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWFwX3NpemUgPSBBUlJBWV9TSVpFKHZpZGVvX3RvX2F1ZGlvX21hcCk7Ci0KLXN0YXRpYyBpbnQgZ2V0X2F1ZGlvX3N0ZCh2NGwyX3N0ZF9pZCB2NGwyX3N0ZCkKLXsKLQlpbnQgaSA9IDA7Ci0KLQlmb3IgKDsgaSA8IG1hcF9zaXplOyBpKyspIHsKLQkJaWYgKHY0bDJfc3RkICYgdmlkZW9fdG9fYXVkaW9fbWFwW2ldLnZpZGVvX3N0ZCkKLQkJCXJldHVybiB2aWRlb190b19hdWRpb19tYXBbaV0uYXVkaW9fc3RkOwotCX0KLQlyZXR1cm4gVExHX1RVTkVfQVNURF9BMjsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAotCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbGUpOwotCXN0cnVjdCBwb3NlaWRvbiAqcCA9IHZpZGVvX2dldF9kcnZkYXRhKHZkZXYpOwotCi0Jc3RyY3B5KGNhcC0+ZHJpdmVyLCAidGVsZS12aWRlbyIpOwotCXN0cmNweShjYXAtPmNhcmQsICJUZWxlZ2VudCBQb3NlaWRvbiIpOwotCXVzYl9tYWtlX3BhdGgocC0+dWRldiwgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKLQljYXAtPmRldmljZV9jYXBzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9BVURJTyB8Ci0JCQlWNEwyX0NBUF9TVFJFQU1JTkcgfCBWNEwyX0NBUF9SRUFEV1JJVEU7Ci0JaWYgKHZkZXYtPnZmbF90eXBlID09IFZGTF9UWVBFX1ZCSSkKLQkJY2FwLT5kZXZpY2VfY2FwcyB8PSBWNEwyX0NBUF9WQklfQ0FQVFVSRTsKLQllbHNlCi0JCWNhcC0+ZGV2aWNlX2NhcHMgfD0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRTsKLQljYXAtPmNhcGFiaWxpdGllcyA9IGNhcC0+ZGV2aWNlX2NhcHMgfCBWNEwyX0NBUF9ERVZJQ0VfQ0FQUyB8Ci0JCVY0TDJfQ0FQX1JBRElPIHwgVjRMMl9DQVBfVkJJX0NBUFRVUkUgfCBWNEwyX0NBUF9WSURFT19DQVBUVVJFOwotCXJldHVybiAwOwotfQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLXN0YXRpYyB2b2lkIGluaXRfY29weShzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8sIGJvb2wgaW5kZXgpCi17Ci0Jc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gdmlkZW8tPmZyb250OwotCi0JdmlkZW8tPmZpZWxkX2NvdW50CT0gaW5kZXg7Ci0JdmlkZW8tPmxpbmVzX2NvcGllZAk9IDA7Ci0JdmlkZW8tPnByZXZfbGVmdAk9IDAgOwotCXZpZGVvLT5kc3QgCQk9IChjaGFyICopdmlkZW9idWZfdG9fdm1hbGxvYyhmcm9udC0+Y3Vycl9mcmFtZSkKLQkJCQkJKyBpbmRleCAqIHZpZGVvLT5saW5lc19zaXplOwotCXZpZGVvLT52YmktPmNvcGllZCAJPSAwOyAvKiBzZXQgaXQgaGVyZSAqLwotfQotCi1zdGF0aWMgYm9vbCBnZXRfZnJhbWUoc3RydWN0IGZyb250X2ZhY2UgKmZyb250LCBpbnQgKm5lZWRfaW5pdCkKLXsKLQlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YiA9IGZyb250LT5jdXJyX2ZyYW1lOwotCi0JaWYgKHZiKQotCQlyZXR1cm4gdHJ1ZTsKLQotCXNwaW5fbG9jaygmZnJvbnQtPnF1ZXVlX2xvY2spOwotCWlmICghbGlzdF9lbXB0eSgmZnJvbnQtPmFjdGl2ZSkpIHsKLQkJdmIgPSBsaXN0X2VudHJ5KGZyb250LT5hY3RpdmUubmV4dCwKLQkJCSAgICAgICBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyLCBxdWV1ZSk7Ci0JCWlmIChuZWVkX2luaXQpCi0JCQkqbmVlZF9pbml0ID0gMTsKLQkJZnJvbnQtPmN1cnJfZnJhbWUgPSB2YjsKLQkJbGlzdF9kZWxfaW5pdCgmdmItPnF1ZXVlKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmZyb250LT5xdWV1ZV9sb2NrKTsKLQotCXJldHVybiAhIXZiOwotfQotCi0vKiBjaGVjayBpZiB0aGUgdmlkZW8ncyBidWZmZXIgaXMgcmVhZHkgKi8KLXN0YXRpYyBib29sIGdldF92aWRlb19mcmFtZShzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQsIHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbykKLXsKLQlpbnQgbmVlZF9pbml0ID0gMDsKLQlib29sIHJldCA9IHRydWU7Ci0KLQlyZXQgPSBnZXRfZnJhbWUoZnJvbnQsICZuZWVkX2luaXQpOwotCWlmIChyZXQgJiYgbmVlZF9pbml0KQotCQlpbml0X2NvcHkodmlkZW8sIDApOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHN1Ym1pdF9mcmFtZShzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQpCi17Ci0Jc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIgPSBmcm9udC0+Y3Vycl9mcmFtZTsKLQotCWlmICh2YiA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlmcm9udC0+Y3Vycl9mcmFtZQk9IE5VTEw7Ci0JdmItPnN0YXRlCQk9IFZJREVPQlVGX0RPTkU7Ci0JdmItPmZpZWxkX2NvdW50Kys7Ci0JdjRsMl9nZXRfdGltZXN0YW1wKCZ2Yi0+dHMpOwotCi0Jd2FrZV91cCgmdmItPmRvbmUpOwotfQotCi0vKgotICogQSBmcmFtZSBpcyBjb21wb3NlZCBvZiB0d28gZmllbGRzLiBJZiB3ZSByZWNlaXZlIGFsbCB0aGUgdHdvIGZpZWxkcywKLSAqIGNhbGwgdGhlICBzdWJtaXRfZnJhbWUoKSB0byBzdWJtaXQgdGhlIHdob2xlIGZyYW1lIHRvIGFwcGxpY2F0aW9ucy4KLSAqLwotc3RhdGljIHZvaWQgZW5kX2ZpZWxkKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbykKLXsKLQlpZiAoMSA9PSB2aWRlby0+ZmllbGRfY291bnQpCi0JCXN1Ym1pdF9mcmFtZSh2aWRlby0+ZnJvbnQpOwotCWVsc2UKLQkJaW5pdF9jb3B5KHZpZGVvLCAxKTsKLX0KLQotc3RhdGljIHZvaWQgY29weV92aWRlb19kYXRhKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbywgY2hhciAqc3JjLAotCQkJCXVuc2lnbmVkIGludCBjb3VudCkKLXsKLSNkZWZpbmUgY29weV9kYXRhKGxlbikgIFwKLQlkbyB7IFwKLQkJaWYgKCsrdmlkZW8tPmxpbmVzX2NvcGllZCA+IHZpZGVvLT5saW5lc19wZXJfZmllbGQpIFwKLQkJCWdvdG8gb3ZlcmZsb3c7IFwKLQkJbWVtY3B5KHZpZGVvLT5kc3QsIHNyYywgbGVuKTtcCi0JCXZpZGVvLT5kc3QgKz0gbGVuICsgdmlkZW8tPmxpbmVzX3NpemU7IFwKLQkJc3JjICs9IGxlbjsgXAotCQljb3VudCAtPSBsZW47IFwKLQkgfSB3aGlsZSAoMCkKLQotCXdoaWxlIChjb3VudCAmJiBjb3VudCA+PSB2aWRlby0+bGluZXNfc2l6ZSkgewotCQlpZiAodmlkZW8tPnByZXZfbGVmdCkgewotCQkJY29weV9kYXRhKHZpZGVvLT5wcmV2X2xlZnQpOwotCQkJdmlkZW8tPnByZXZfbGVmdCA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQljb3B5X2RhdGEodmlkZW8tPmxpbmVzX3NpemUpOwotCX0KLQlpZiAoY291bnQgJiYgY291bnQgPCB2aWRlby0+bGluZXNfc2l6ZSkgewotCQltZW1jcHkodmlkZW8tPmRzdCwgc3JjLCBjb3VudCk7Ci0KLQkJdmlkZW8tPnByZXZfbGVmdCA9IHZpZGVvLT5saW5lc19zaXplIC0gY291bnQ7Ci0JCXZpZGVvLT5kc3QgKz0gY291bnQ7Ci0JfQotCXJldHVybjsKLQotb3ZlcmZsb3c6Ci0JZW5kX2ZpZWxkKHZpZGVvKTsKLX0KLQotc3RhdGljIHZvaWQgY2hlY2tfdHJhaWxlcihzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8sIGNoYXIgKnNyYywgaW50IGNvdW50KQotewotCXN0cnVjdCB2YmlfZGF0YSAqdmJpID0gdmlkZW8tPnZiaTsKLQlpbnQgb2Zmc2V0OyAvKiB0cmFpbGVyJ3Mgb2Zmc2V0ICovCi0JY2hhciAqYnVmOwotCi0Jb2Zmc2V0ID0gKHZpZGVvLT5jb250ZXh0LnBpeC5zaXplaW1hZ2UgLyAyICsgdmJpLT52Ymlfc2l6ZSAvIDIpCi0JCS0gKHZiaS0+Y29waWVkICsgdmlkZW8tPmxpbmVzX3NpemUgKiB2aWRlby0+bGluZXNfY29waWVkKTsKLQlpZiAodmlkZW8tPnByZXZfbGVmdCkKLQkJb2Zmc2V0IC09ICh2aWRlby0+bGluZXNfc2l6ZSAtIHZpZGVvLT5wcmV2X2xlZnQpOwotCi0JaWYgKG9mZnNldCA+IGNvdW50IHx8IG9mZnNldCA8PSAwKQotCQlnb3RvIHNob3J0X3BhY2thZ2U7Ci0KLQlidWYgPSBzcmMgKyBvZmZzZXQ7Ci0KLQkvKiB0cmFpbGVyIDogKFZGSFMpICsgVTMyICsgVTMyICsgZmllbGRfbnVtICovCi0JaWYgKCFzdHJuY21wKGJ1ZiwgIlZGSFMiLCA0KSkgewotCQlpbnQgZmllbGRfbnVtID0gKigodTMyICopKGJ1ZiArIDEyKSk7Ci0KLQkJaWYgKChmaWVsZF9udW0gJiAxKSBeIHZpZGVvLT5maWVsZF9jb3VudCkgewotCQkJaW5pdF9jb3B5KHZpZGVvLCB2aWRlby0+ZmllbGRfY291bnQpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWNvcHlfdmlkZW9fZGF0YSh2aWRlbywgc3JjLCBvZmZzZXQpOwotCX0KLXNob3J0X3BhY2thZ2U6Ci0JZW5kX2ZpZWxkKHZpZGVvKTsKLX0KLQotLyogPT09PT09PT09PSAgQ2hlY2sgdGhpcyBtb3JlIGNhcmVmdWxseSEgPT09PT09PT09PT0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X3ZiaV9kYXRhKHN0cnVjdCB2YmlfZGF0YSAqdmJpLAotCQkJCWNoYXIgKnNyYywgdW5zaWduZWQgaW50IGNvdW50KQotewotCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHZiaS0+ZnJvbnQ7Ci0KLQlpZiAoZnJvbnQgJiYgZ2V0X2ZyYW1lKGZyb250LCBOVUxMKSkgewotCQljaGFyICpidWYgPSB2aWRlb2J1Zl90b192bWFsbG9jKGZyb250LT5jdXJyX2ZyYW1lKTsKLQotCQlpZiAodmJpLT52aWRlby0+ZmllbGRfY291bnQpCi0JCQlidWYgKz0gKHZiaS0+dmJpX3NpemUgLyAyKTsKLQkJbWVtY3B5KGJ1ZiArIHZiaS0+Y29waWVkLCBzcmMsIGNvdW50KTsKLQl9Ci0JdmJpLT5jb3BpZWQgKz0gY291bnQ7Ci19Ci0KLS8qCi0gKiBDb3B5IHRoZSBub3JtYWwgZGF0YSAoVkJJIG9yIFZJREVPKSB3aXRob3V0IHRoZSB0cmFpbGVyLgotICogVkJJIGlzIG5vdCBpbnRlcmxhY2VkLCB3aGlsZSBWSURFTyBpcyBpbnRlcmxhY2VkLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV92YmlfdmlkZW9fZGF0YShzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8sCi0JCQkJY2hhciAqc3JjLCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0Jc3RydWN0IHZiaV9kYXRhICp2YmkgPSB2aWRlby0+dmJpOwotCXVuc2lnbmVkIGludCB2YmlfZGVsdGEgPSAodmJpLT52Ymlfc2l6ZSAvIDIpIC0gdmJpLT5jb3BpZWQ7Ci0KLQlpZiAodmJpX2RlbHRhID49IGNvdW50KSB7Ci0JCWNvcHlfdmJpX2RhdGEodmJpLCBzcmMsIGNvdW50KTsKLQl9IGVsc2UgewotCQlpZiAodmJpX2RlbHRhKSB7Ci0JCQljb3B5X3ZiaV9kYXRhKHZiaSwgc3JjLCB2YmlfZGVsdGEpOwotCi0JCQkvKiB3ZSByZWNlaXZlIHRoZSB0d28gZmllbGRzIG9mIHRoZSBWQkkqLwotCQkJaWYgKHZiaS0+ZnJvbnQgJiYgdmlkZW8tPmZpZWxkX2NvdW50KQotCQkJCXN1Ym1pdF9mcmFtZSh2YmktPmZyb250KTsKLQkJfQotCQljb3B5X3ZpZGVvX2RhdGEodmlkZW8sIHNyYyArIHZiaV9kZWx0YSwgY291bnQgLSB2YmlfZGVsdGEpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgdXJiX2NvbXBsZXRlX2J1bGsoc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmZnJvbnQtPnBkLT52aWRlb19kYXRhOwotCWNoYXIgKnNyYyA9IChjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JaW50IGNvdW50ID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwotCWludCByZXQgPSAwOwotCi0JaWYgKCF2aWRlby0+aXNfc3RyZWFtaW5nIHx8IHVyYi0+c3RhdHVzKSB7Ci0JCWlmICh1cmItPnN0YXR1cyA9PSAtRVBST1RPKQotCQkJZ290byByZXNlbmRfaXQ7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKCFnZXRfdmlkZW9fZnJhbWUoZnJvbnQsIHZpZGVvKSkKLQkJZ290byByZXNlbmRfaXQ7Ci0KLQlpZiAoY291bnQgPT0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQotCQljb3B5X3ZiaV92aWRlb19kYXRhKHZpZGVvLCBzcmMsIGNvdW50KTsKLQllbHNlCi0JCWNoZWNrX3RyYWlsZXIodmlkZW8sIHNyYywgY291bnQpOwotCi1yZXNlbmRfaXQ6Ci0JcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmV0KQotCQlsb2coIiBzdWJtaXQgZmFpbGVkOiBlcnJvciAlZCIsIHJldCk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqIGZvciBJU08gKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBHRVRfU1VDQ0VTUwkJKDApCi0jZGVmaW5lIEdFVF9UUkFJTEVSCQkoMSkKLSNkZWZpbmUgR0VUX1RPT19NVUNIX0JVQkJMRQkoMikKLSNkZWZpbmUgR0VUX05PTkUJCSgzKQotc3RhdGljIGludCBnZXRfY2h1bmsoaW50IHN0YXJ0LCBzdHJ1Y3QgdXJiICp1cmIsCi0JCQlpbnQgKmhlYWQsIGludCAqdGFpbCwgaW50ICpidWJibGVfZXJyKQotewotCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpwa3QgPSBOVUxMOwotCWludCByZXQgPSBHRVRfU1VDQ0VTUzsKLQotCWZvciAoKmhlYWQgPSAqdGFpbCA9IC0xOyBzdGFydCA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IHN0YXJ0KyspIHsKLQkJcGt0ID0gJnVyYi0+aXNvX2ZyYW1lX2Rlc2Nbc3RhcnRdOwotCi0JCS8qIGhhbmRsZSB0aGUgYnViYmxlIG9mIHRoZSBIdWIgKi8KLQkJaWYgKC1FT1ZFUkZMT1cgPT0gcGt0LT5zdGF0dXMpIHsKLQkJCWlmICgrKypidWJibGVfZXJyID4gdXJiLT5udW1iZXJfb2ZfcGFja2V0cyAvIDMpCi0JCQkJcmV0dXJuIEdFVF9UT09fTVVDSF9CVUJCTEU7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIFRoaXMgaXMgdGhlIGdhcCAqLwotCQlpZiAocGt0LT5zdGF0dXMgfHwgcGt0LT5hY3R1YWxfbGVuZ3RoIDw9IDAKLQkJCQl8fCBwa3QtPmFjdHVhbF9sZW5ndGggPiBJU09fUEtUX1NJWkUpIHsKLQkJCWlmICgqaGVhZCAhPSAtMSkKLQkJCQlicmVhazsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogYSBnb29kIGlzb2Nocm9ub3VzIHBhY2tldCAqLwotCQlpZiAocGt0LT5hY3R1YWxfbGVuZ3RoID09IElTT19QS1RfU0laRSkgewotCQkJaWYgKCpoZWFkID09IC0xKQotCQkJCSpoZWFkID0gc3RhcnQ7Ci0JCQkqdGFpbCA9IHN0YXJ0OwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiB0cmFpbGVyIGlzIGhlcmUgKi8KLQkJaWYgKHBrdC0+YWN0dWFsX2xlbmd0aCA8IElTT19QS1RfU0laRSkgewotCQkJaWYgKCpoZWFkID09IC0xKSB7Ci0JCQkJKmhlYWQgPSBzdGFydDsKLQkJCQkqdGFpbCA9IHN0YXJ0OwotCQkJCXJldHVybiBHRVRfVFJBSUxFUjsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKCpoZWFkID09IC0xICYmICp0YWlsID09IC0xKQotCQlyZXQgPSBHRVRfTk9ORTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogfF9ffC0tLS0tLXxfX198LS0tLS18X19fX19fX3wKLSAqICAgICAgIF4gICAgICAgICAgXgotICogICAgICAgfCAgICAgICAgICB8Ci0gKiAgICAgIGdhcCAgICAgICAgZ2FwCi0gKi8KLXN0YXRpYyB2b2lkIHVyYl9jb21wbGV0ZV9pc28oc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmZnJvbnQtPnBkLT52aWRlb19kYXRhOwotCWludCBidWJibGVfZXJyID0gMCwgaGVhZCA9IDAsIHRhaWwgPSAwOwotCWNoYXIgKnNyYyA9IChjaGFyICopdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoIXZpZGVvLT5pc19zdHJlYW1pbmcpCi0JCXJldHVybjsKLQotCWRvIHsKLQkJaWYgKCFnZXRfdmlkZW9fZnJhbWUoZnJvbnQsIHZpZGVvKSkKLQkJCWdvdG8gb3V0OwotCi0JCXN3aXRjaCAoZ2V0X2NodW5rKGhlYWQsIHVyYiwgJmhlYWQsICZ0YWlsLCAmYnViYmxlX2VycikpIHsKLQkJY2FzZSBHRVRfU1VDQ0VTUzoKLQkJCWNvcHlfdmJpX3ZpZGVvX2RhdGEodmlkZW8sIHNyYyArIChoZWFkICogSVNPX1BLVF9TSVpFKSwKLQkJCQkJKHRhaWwgLSBoZWFkICsgMSkgKiBJU09fUEtUX1NJWkUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgR0VUX1RSQUlMRVI6Ci0JCQljaGVja190cmFpbGVyKHZpZGVvLCBzcmMgKyAoaGVhZCAqIElTT19QS1RfU0laRSksCi0JCQkJCUlTT19QS1RfU0laRSk7Ci0JCQlicmVhazsKLQkJY2FzZSBHRVRfTk9ORToKLQkJCWdvdG8gb3V0OwotCQljYXNlIEdFVF9UT09fTVVDSF9CVUJCTEU6Ci0JCQlsb2coIlx0IFdlIGdvdCB0b28gbXVjaCBidWJibGUiKTsKLQkJCXNjaGVkdWxlX3dvcmsoJnZpZGVvLT5idWJibGVfd29yayk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9IHdoaWxlIChoZWFkID0gdGFpbCArIDEsIGhlYWQgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzKTsKLQotb3V0OgotCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJldCkKLQkJbG9nKCJ1c2Jfc3VibWl0X3VyYiBlcnIgOiAlZCIsIHJldCk7Ci19Ci0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09IFsgIGVuZCAgXSA9PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgaW50IHByZXBhcmVfaXNvX3VyYihzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8pCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSB2aWRlby0+cGQtPnVkZXY7Ci0JaW50IGk7Ci0KLQlpZiAodmlkZW8tPnVyYl9hcnJheVswXSkKLQkJcmV0dXJuIDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgU0JVRl9OVU07IGkrKykgewotCQlzdHJ1Y3QgdXJiICp1cmI7Ci0JCXZvaWQgKm1lbTsKLQkJaW50IGo7Ci0KLQkJdXJiID0gdXNiX2FsbG9jX3VyYihQS19QRVJfVVJCLCBHRlBfS0VSTkVMKTsKLQkJaWYgKHVyYiA9PSBOVUxMKQotCQkJZ290byBvdXQ7Ci0KLQkJdmlkZW8tPnVyYl9hcnJheVtpXSA9IHVyYjsKLQkJbWVtID0gdXNiX2FsbG9jX2NvaGVyZW50KHVkZXYsCi0JCQkJCSBJU09fUEtUX1NJWkUgKiBQS19QRVJfVVJCLAotCQkJCQkgR0ZQX0tFUk5FTCwKLQkJCQkJICZ1cmItPnRyYW5zZmVyX2RtYSk7Ci0KLQkJdXJiLT5jb21wbGV0ZQk9IHVyYl9jb21wbGV0ZV9pc287CS8qIGhhbmRsZXIgKi8KLQkJdXJiLT5kZXYJPSB1ZGV2OwotCQl1cmItPmNvbnRleHQJPSB2aWRlby0+ZnJvbnQ7Ci0JCXVyYi0+cGlwZQk9IHVzYl9yY3Zpc29jcGlwZSh1ZGV2LAotCQkJCQkJdmlkZW8tPmVuZHBvaW50X2FkZHIpOwotCQl1cmItPmludGVydmFsCT0gMTsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwotCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzCT0gUEtfUEVSX1VSQjsKLQkJdXJiLT50cmFuc2Zlcl9idWZmZXIJPSBtZW07Ci0JCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IFBLX1BFUl9VUkIgKiBJU09fUEtUX1NJWkU7Ci0KLQkJZm9yIChqID0gMDsgaiA8IFBLX1BFUl9VUkI7IGorKykgewotCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5vZmZzZXQgPSBJU09fUEtUX1NJWkUgKiBqOwotCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tqXS5sZW5ndGggPSBJU09fUEtUX1NJWkU7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci1vdXQ6Ci0JZm9yICg7IGkgPiAwOyBpLS0pCi0JCTsKLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotLyogcmV0dXJuIHRoZSBzdWNjZWVkZWQgbnVtYmVyIG9mIHRoZSBhbGxvY2F0aW9uICovCi1pbnQgYWxsb2NfYnVsa191cmJzX2dlbmVyaWMoc3RydWN0IHVyYiAqKnVyYl9hcnJheSwgaW50IG51bSwKLQkJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCBlcF9hZGRyLAotCQkJaW50IGJ1Zl9zaXplLCBnZnBfdCBnZnBfZmxhZ3MsCi0JCQl1c2JfY29tcGxldGVfdCBjb21wbGV0ZV9mbiwgdm9pZCAqY29udGV4dCkKLXsKLQlpbnQgaSA9IDA7Ci0KLQlmb3IgKDsgaSA8IG51bTsgaSsrKSB7Ci0JCXZvaWQgKm1lbTsKLQkJc3RydWN0IHVyYiAqdXJiID0gdXNiX2FsbG9jX3VyYigwLCBnZnBfZmxhZ3MpOwotCQlpZiAodXJiID09IE5VTEwpCi0JCQlyZXR1cm4gaTsKLQotCQltZW0gPSB1c2JfYWxsb2NfY29oZXJlbnQodWRldiwgYnVmX3NpemUsIGdmcF9mbGFncywKLQkJCQkJICZ1cmItPnRyYW5zZmVyX2RtYSk7Ci0JCWlmIChtZW0gPT0gTlVMTCkgewotCQkJdXNiX2ZyZWVfdXJiKHVyYik7Ci0JCQlyZXR1cm4gaTsKLQkJfQotCi0JCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgdWRldiwgdXNiX3JjdmJ1bGtwaXBlKHVkZXYsIGVwX2FkZHIpLAotCQkJCW1lbSwgYnVmX3NpemUsIGNvbXBsZXRlX2ZuLCBjb250ZXh0KTsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQkJdXJiX2FycmF5W2ldID0gdXJiOwotCX0KLQlyZXR1cm4gaTsKLX0KLQotdm9pZCBmcmVlX2FsbF91cmJfZ2VuZXJpYyhzdHJ1Y3QgdXJiICoqdXJiX2FycmF5LCBpbnQgbnVtKQotewotCWludCBpOwotCXN0cnVjdCB1cmIgKnVyYjsKLQotCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewotCQl1cmIgPSB1cmJfYXJyYXlbaV07Ci0JCWlmICh1cmIpIHsKLQkJCXVzYl9mcmVlX2NvaGVyZW50KHVyYi0+ZGV2LAotCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLAotCQkJCQl1cmItPnRyYW5zZmVyX2RtYSk7Ci0JCQl1c2JfZnJlZV91cmIodXJiKTsKLQkJCXVyYl9hcnJheVtpXSA9IE5VTEw7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcHJlcGFyZV9idWxrX3VyYihzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8pCi17Ci0JaWYgKHZpZGVvLT51cmJfYXJyYXlbMF0pCi0JCXJldHVybiAwOwotCi0JYWxsb2NfYnVsa191cmJzX2dlbmVyaWModmlkZW8tPnVyYl9hcnJheSwgU0JVRl9OVU0sCi0JCQl2aWRlby0+cGQtPnVkZXYsIHZpZGVvLT5lbmRwb2ludF9hZGRyLAotCQkJMHgyMDAwLCBHRlBfS0VSTkVMLAotCQkJdXJiX2NvbXBsZXRlX2J1bGssIHZpZGVvLT5mcm9udCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIGZyZWUgdGhlIFVSQnMgKi8KLXN0YXRpYyB2b2lkIGZyZWVfYWxsX3VyYihzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8pCi17Ci0JZnJlZV9hbGxfdXJiX2dlbmVyaWModmlkZW8tPnVyYl9hcnJheSwgU0JVRl9OVU0pOwotfQotCi1zdGF0aWMgdm9pZCBwZF9idWZfcmVsZWFzZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQotewotCXZpZGVvYnVmX3ZtYWxsb2NfZnJlZSh2Yik7Ci0JdmItPnN0YXRlID0gVklERU9CVUZfTkVFRFNfSU5JVDsKLX0KLQotc3RhdGljIHZvaWQgcGRfYnVmX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSwgc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCi17Ci0Jc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gcS0+cHJpdl9kYXRhOwotCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKLQlsaXN0X2FkZF90YWlsKCZ2Yi0+cXVldWUsICZmcm9udC0+YWN0aXZlKTsKLX0KLQotc3RhdGljIGludCBwZF9idWZfcHJlcGFyZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAotCQkJICAgZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQotewotCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHEtPnByaXZfZGF0YTsKLQlpbnQgcmM7Ci0KLQlzd2l0Y2ggKGZyb250LT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCWlmIChWSURFT0JVRl9ORUVEU19JTklUID09IHZiLT5zdGF0ZSkgewotCQkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4OwotCi0JCQlwaXggPSAmZnJvbnQtPnBkLT52aWRlb19kYXRhLmNvbnRleHQucGl4OwotCQkJdmItPnNpemUJPSBwaXgtPnNpemVpbWFnZTsgLyogcmVhbCBmcmFtZSBzaXplICovCi0JCQl2Yi0+d2lkdGgJPSBwaXgtPndpZHRoOwotCQkJdmItPmhlaWdodAk9IHBpeC0+aGVpZ2h0OwotCQkJcmMgPSB2aWRlb2J1Zl9pb2xvY2socSwgdmIsIE5VTEwpOwotCQkJaWYgKHJjIDwgMCkKLQkJCQlyZXR1cm4gcmM7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgotCQlpZiAoVklERU9CVUZfTkVFRFNfSU5JVCA9PSB2Yi0+c3RhdGUpIHsKLQkJCXZiLT5zaXplCT0gZnJvbnQtPnBkLT52YmlfZGF0YS52Ymlfc2l6ZTsKLQkJCXJjID0gdmlkZW9idWZfaW9sb2NrKHEsIHZiLCBOVUxMKTsKLQkJCWlmIChyYyA8IDApCi0JCQkJcmV0dXJuIHJjOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQl2Yi0+ZmllbGQgPSBmaWVsZDsKLQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9QUkVQQVJFRDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBmaXJlX2FsbF91cmIoc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvKQotewotCWludCBpLCByZXQ7Ci0KLQl2aWRlby0+aXNfc3RyZWFtaW5nID0gMTsKLQotCWZvciAoaSA9IDA7IGkgPCBTQlVGX05VTTsgaSsrKSB7Ci0JCXJldCA9IHVzYl9zdWJtaXRfdXJiKHZpZGVvLT51cmJfYXJyYXlbaV0sIEdGUF9LRVJORUwpOwotCQlpZiAocmV0KQotCQkJbG9nKCIoJWQpIGZhaWxlZDogZXJyb3IgJWQiLCBpLCByZXQpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHN0YXJ0X3ZpZGVvX3N0cmVhbShzdHJ1Y3QgcG9zZWlkb24gKnBkKQotewotCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbyA9ICZwZC0+dmlkZW9fZGF0YTsKLQlzMzIgY21kX3N0YXR1czsKLQotCXNlbmRfc2V0X3JlcShwZCwgVEFLRV9SRVFVRVNULCAwLCAmY21kX3N0YXR1cyk7Ci0Jc2VuZF9zZXRfcmVxKHBkLCBQTEFZX1NFUlZJQ0UsIFRMR19UVU5FX1BMQVlfU1ZDX1NUQVJULCAmY21kX3N0YXR1cyk7Ci0KLQlpZiAocGQtPmN1cl90cmFuc2Zlcl9tb2RlKSB7Ci0JCXByZXBhcmVfaXNvX3VyYih2aWRlbyk7Ci0JCUlOSVRfV09SSygmdmlkZW8tPmJ1YmJsZV93b3JrLCBpc29fYnViYmxlX2hhbmRsZXIpOwotCX0gZWxzZSB7Ci0JCS8qIFRoZSBidWxrIG1vZGUgZG9lcyBub3QgbmVlZCBhIGJ1YmJsZSBoYW5kbGVyICovCi0JCXByZXBhcmVfYnVsa191cmIodmlkZW8pOwotCX0KLQlmaXJlX2FsbF91cmIodmlkZW8pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBkX2J1Zl9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEsIHVuc2lnbmVkIGludCAqY291bnQsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgKnNpemUpCi17Ci0Jc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gcS0+cHJpdl9kYXRhOwotCXN0cnVjdCBwb3NlaWRvbiAqcGQJPSBmcm9udC0+cGQ7Ci0KLQlzd2l0Y2ggKGZyb250LT50eXBlKSB7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IHsKLQkJc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvID0gJnBkLT52aWRlb19kYXRhOwotCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmdmlkZW8tPmNvbnRleHQucGl4OwotCi0JCSpzaXplID0gUEFHRV9BTElHTihwaXgtPnNpemVpbWFnZSk7LyogcGFnZSBhbGlnbmVkIGZyYW1lIHNpemUgKi8KLQkJaWYgKCpjb3VudCA8IDQpCi0JCQkqY291bnQgPSA0OwotCQlpZiAoMSkgewotCQkJLyogc2FtZSBpbiBkaWZmZXJlbnQgYWx0ZXJzZXR0aW5nICovCi0JCQl2aWRlby0+ZW5kcG9pbnRfYWRkcgk9IDB4ODI7Ci0JCQl2aWRlby0+dmJpCQk9ICZwZC0+dmJpX2RhdGE7Ci0JCQl2aWRlby0+dmJpLT52aWRlbwk9IHZpZGVvOwotCQkJdmlkZW8tPnBkCQk9IHBkOwotCQkJdmlkZW8tPmxpbmVzX3Blcl9maWVsZAk9IHBpeC0+aGVpZ2h0IC8gMjsKLQkJCXZpZGVvLT5saW5lc19zaXplCT0gcGl4LT53aWR0aCAqIDI7Ci0JCQl2aWRlby0+ZnJvbnQgCQk9IGZyb250OwotCQl9Ci0JCXJldHVybiBzdGFydF92aWRlb19zdHJlYW0ocGQpOwotCX0KLQotCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTogewotCQlzdHJ1Y3QgdmJpX2RhdGEgKnZiaSA9ICZwZC0+dmJpX2RhdGE7Ci0KLQkJKnNpemUgPSBQQUdFX0FMSUdOKHZiaS0+dmJpX3NpemUpOwotCQlsb2coInNpemUgOiAlZCIsICpzaXplKTsKLQkJaWYgKCpjb3VudCA9PSAwKQotCQkJKmNvdW50ID0gNDsKLQl9Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgcGRfdmlkZW9fcW9wcyA9IHsKLQkuYnVmX3NldHVwICAgICAgPSBwZF9idWZfc2V0dXAsCi0JLmJ1Zl9wcmVwYXJlICAgID0gcGRfYnVmX3ByZXBhcmUsCi0JLmJ1Zl9xdWV1ZSAgICAgID0gcGRfYnVmX3F1ZXVlLAotCS5idWZfcmVsZWFzZSAgICA9IHBkX2J1Zl9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAotCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCi17Ci0JaWYgKEFSUkFZX1NJWkUocG9zZWlkb25fZm9ybWF0cykgPD0gZi0+aW5kZXgpCi0JCXJldHVybiAtRUlOVkFMOwotCWYtPnR5cGUJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWYtPmZsYWdzCT0gMDsKLQlmLT5waXhlbGZvcm1hdAk9IHBvc2VpZG9uX2Zvcm1hdHNbZi0+aW5kZXhdLmZvdXJjYzsKLQlzdHJjcHkoZi0+ZGVzY3JpcHRpb24sIHBvc2VpZG9uX2Zvcm1hdHNbZi0+aW5kZXhdLm5hbWUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19nX2ZtdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaDsKLQlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZnJvbnQtPnBkOwotCi0JZi0+Zm10LnBpeCA9IHBkLT52aWRlb19kYXRhLmNvbnRleHQucGl4OwotCXJldHVybiAwOwotfQotCi0vKgotICogVkxDIGNhbGxzIFZJRElPQ19TX1NURCBiZWZvcmUgVklESU9DX1NfRk1ULCB3aGlsZQotICogTXBsYXllciBjYWxscyB0aGVtIGluIHRoZSByZXZlcnNlIG9yZGVyLgotICovCi1zdGF0aWMgaW50IHBkX3ZpZGlvY19zX2ZtdChzdHJ1Y3QgcG9zZWlkb24gKnBkLCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXgpCi17Ci0Jc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvCT0gJnBkLT52aWRlb19kYXRhOwotCXN0cnVjdCBydW5uaW5nX2NvbnRleHQgKmNvbnRleHQgPSAmdmlkZW8tPmNvbnRleHQ7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4X2RlZgk9ICZjb250ZXh0LT5waXg7Ci0JczMyIHJldCA9IDAsIGNtZF9zdGF0dXMgPSAwLCB2aWRfcmVzb2w7Ci0KLQkvKiBzZXQgdGhlIHBpeGVsIGZvcm1hdCB0byBmaXJtd2FyZSAqLwotCWlmIChwaXgtPnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9SR0I1NjUpIHsKLQkJdmlkX3Jlc29sID0gVExHX1RVTkVSX1ZJRF9GT1JNQVRfUkdCXzU2NTsKLQl9IGVsc2UgewotCQlwaXgtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1lVWVY7Ci0JCXZpZF9yZXNvbCA9IFRMR19UVU5FUl9WSURfRk9STUFUX1lVVjsKLQl9Ci0JcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBWSURFT19TVFJFQU1fRk1UX1NFTCwKLQkJCQl2aWRfcmVzb2wsICZjbWRfc3RhdHVzKTsKLQotCS8qIHNldCB0aGUgcmVzb2x1dGlvbiB0byBmaXJtd2FyZSAqLwotCXZpZF9yZXNvbCA9IFRMR19UVU5FX1ZJRF9SRVNfNzIwOwotCXN3aXRjaCAocGl4LT53aWR0aCkgewotCWNhc2UgNzA0OgotCQl2aWRfcmVzb2wgPSBUTEdfVFVORV9WSURfUkVTXzcwNDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcGl4LT53aWR0aCA9IDcyMDsKLQljYXNlIDcyMDoKLQkJYnJlYWs7Ci0JfQotCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFZJREVPX1JPU09MVV9TRUwsCi0JCQkJdmlkX3Jlc29sLCAmY21kX3N0YXR1cyk7Ci0JaWYgKHJldCB8fCBjbWRfc3RhdHVzKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JcGl4X2RlZi0+cGl4ZWxmb3JtYXQgPSBwaXgtPnBpeGVsZm9ybWF0OyAvKiBzYXZlIGl0ICovCi0JcGl4LT5oZWlnaHQgPSAoY29udGV4dC0+dHZub3JtaWQgJiBWNEwyX1NURF81MjVfNjApID8gIDQ4MCA6IDU3NjsKLQotCS8qIENvbXBhcmUgd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5nICovCi0JaWYgKChwaXhfZGVmLT53aWR0aCAhPSBwaXgtPndpZHRoKQotCQl8fCAocGl4X2RlZi0+aGVpZ2h0ICE9IHBpeC0+aGVpZ2h0KSkgewotCQlwaXhfZGVmLT53aWR0aAkJPSBwaXgtPndpZHRoOwotCQlwaXhfZGVmLT5oZWlnaHQJCT0gcGl4LT5oZWlnaHQ7Ci0JCXBpeF9kZWYtPmJ5dGVzcGVybGluZQk9IHBpeC0+d2lkdGggKiAyOwotCQlwaXhfZGVmLT5zaXplaW1hZ2UgCT0gcGl4LT53aWR0aCAqIHBpeC0+aGVpZ2h0ICogMjsKLQl9Ci0JKnBpeCA9ICpwaXhfZGVmOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfZm10KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQotewotCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udAk9IGZoOwotCXN0cnVjdCBwb3NlaWRvbiAqcGQJCT0gZnJvbnQtPnBkOwotCi0JLyogc3RvcCBWQkkgaGVyZSAqLwotCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgIT0gZi0+dHlwZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltdXRleF9sb2NrKCZwZC0+bG9jayk7Ci0JaWYgKHBkLT5maWxlX2Zvcl9zdHJlYW0gPT0gTlVMTCkKLQkJcGQtPmZpbGVfZm9yX3N0cmVhbSA9IGZpbGU7Ci0JZWxzZSBpZiAoZmlsZSAhPSBwZC0+ZmlsZV9mb3Jfc3RyZWFtKSB7Ci0JCW11dGV4X3VubG9jaygmcGQtPmxvY2spOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlwZF92aWRpb2Nfc19mbXQocGQsICZmLT5mbXQucGl4KTsKLQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ19mbXRfdmJpKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKnY0bDJfZikKLXsKLQlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQJPSBmaDsKLQlzdHJ1Y3QgcG9zZWlkb24gKnBkCQk9IGZyb250LT5wZDsKLQlzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0ICp2YmlfZm10CT0gJnY0bDJfZi0+Zm10LnZiaTsKLQotCXZiaV9mbXQtPnNhbXBsZXNfcGVyX2xpbmUJPSA3MjAgKiAyOwotCXZiaV9mbXQtPnNhbXBsaW5nX3JhdGUJCT0gNjc1MDAwMCAqIDQ7Ci0JdmJpX2ZtdC0+c2FtcGxlX2Zvcm1hdAkJPSBWNEwyX1BJWF9GTVRfR1JFWTsKLQl2YmlfZm10LT5vZmZzZXQJCQk9IDY0ICogNDsgIC8qRklYTUU6IHdoeSBvZmZzZXQgKi8KLQlpZiAocGQtPnZpZGVvX2RhdGEuY29udGV4dC50dm5vcm1pZCAmIFY0TDJfU1REXzUyNV82MCkgewotCQl2YmlfZm10LT5zdGFydFswXSA9IDEwOwotCQl2YmlfZm10LT5zdGFydFsxXSA9IDI2NDsKLQkJdmJpX2ZtdC0+Y291bnRbMF0gPSBWNExfTlRTQ19WQklfTElORVM7Ci0JCXZiaV9mbXQtPmNvdW50WzFdID0gVjRMX05UU0NfVkJJX0xJTkVTOwotCX0gZWxzZSB7Ci0JCXZiaV9mbXQtPnN0YXJ0WzBdID0gNjsKLQkJdmJpX2ZtdC0+c3RhcnRbMV0gPSAzMTQ7Ci0JCXZiaV9mbXQtPmNvdW50WzBdID0gVjRMX1BBTF9WQklfTElORVM7Ci0JCXZiaV9mbXQtPmNvdW50WzFdID0gVjRMX1BBTF9WQklfTElORVM7Ci0JfQotCXZiaV9mbXQtPmZsYWdzID0gVjRMMl9WQklfVU5TWU5DOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNldF9zdGQoc3RydWN0IHBvc2VpZG9uICpwZCwgdjRsMl9zdGRfaWQgbm9ybSkKLXsKLQlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmcGQtPnZpZGVvX2RhdGE7Ci0Jc3RydWN0IHZiaV9kYXRhICp2YmkJPSAmcGQtPnZiaV9kYXRhOwotCXN0cnVjdCBydW5uaW5nX2NvbnRleHQgKmNvbnRleHQ7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4OwotCXMzMiBpLCByZXQgPSAwLCBjbWRfc3RhdHVzLCBwYXJhbTsKLQlpbnQgaGVpZ2h0OwotCi0JZm9yIChpID0gMDsgaSA8IFBPU0VJRE9OX1RWTk9STVM7IGkrKykgewotCQlpZiAobm9ybSAmIHBvc2VpZG9uX3R2bm9ybXNbaV0udjRsMl9pZCkgewotCQkJcGFyYW0gPSBwb3NlaWRvbl90dm5vcm1zW2ldLnRsZ190dm5vcm07Ci0JCQlsb2coIm5hbWUgOiAlcyIsIHBvc2VpZG9uX3R2bm9ybXNbaV0ubmFtZSk7Ci0JCQlnb3RvIGZvdW5kOwotCQl9Ci0JfQotCXJldHVybiAtRUlOVkFMOwotZm91bmQ6Ci0JbXV0ZXhfbG9jaygmcGQtPmxvY2spOwotCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVklERU9fU1REX1NFTCwgcGFyYW0sICZjbWRfc3RhdHVzKTsKLQlpZiAocmV0IHx8IGNtZF9zdGF0dXMpCi0JCWdvdG8gb3V0OwotCi0JLyogU2V0IHZiaSBzaXplIGFuZCBjaGVjayB0aGUgaGVpZ2h0IG9mIHRoZSBmcmFtZSAqLwotCWNvbnRleHQgPSAmdmlkZW8tPmNvbnRleHQ7Ci0JY29udGV4dC0+dHZub3JtaWQgPSBwb3NlaWRvbl90dm5vcm1zW2ldLnY0bDJfaWQ7Ci0JaWYgKGNvbnRleHQtPnR2bm9ybWlkICYgVjRMMl9TVERfNTI1XzYwKSB7Ci0JCXZiaS0+dmJpX3NpemUgPSBWNExfTlRTQ19WQklfRlJBTUVTSVpFOwotCQloZWlnaHQgPSA0ODA7Ci0JfSBlbHNlIHsKLQkJdmJpLT52Ymlfc2l6ZSA9IFY0TF9QQUxfVkJJX0ZSQU1FU0laRTsKLQkJaGVpZ2h0ID0gNTc2OwotCX0KLQotCXBpeCA9ICZjb250ZXh0LT5waXg7Ci0JaWYgKHBpeC0+aGVpZ2h0ICE9IGhlaWdodCkgewotCQlwaXgtPmhlaWdodAk9IGhlaWdodDsKLQkJcGl4LT5zaXplaW1hZ2UgCT0gcGl4LT53aWR0aCAqIHBpeC0+aGVpZ2h0ICogMjsKLQl9Ci0KLW91dDoKLQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHY0bDJfc3RkX2lkIG5vcm0pCi17Ci0Jc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7Ci0KLQlyZXR1cm4gc2V0X3N0ZChmcm9udC0+cGQsIG5vcm0pOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19nX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHY0bDJfc3RkX2lkICpub3JtKQotewotCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOwotCi0JKm5vcm0gPSBmcm9udC0+cGQtPnZpZGVvX2RhdGEuY29udGV4dC50dm5vcm1pZDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2lucHV0ICppbikKLXsKLQlpZiAoaW4tPmluZGV4ID49IFBPU0VJRE9OX0lOUFVUUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jc3RyY3B5KGluLT5uYW1lLCBwZF9pbnB1dHNbaW4tPmluZGV4XS5uYW1lKTsKLQlpbi0+dHlwZSAgPSBWNEwyX0lOUFVUX1RZUEVfVFVORVI7Ci0KLQkvKgotCSAqIHRoZSBhdWRpbyBpbnB1dCBpbmRleCBtaXhlZCB3aXRoIHRoaXMgdmlkZW8gaW5wdXQsCi0JICogUG9zZWlkb24gb25seSBoYXZlIG9uZSBhdWRpby92aWRlbywgc2V0IHRvICIwIgotCSAqLwotCWluLT5hdWRpb3NldAk9IDE7Ci0JaW4tPnR1bmVyCT0gMDsKLQlpbi0+c3RkCQk9IFY0TDJfU1REX0FMTDsKLQlpbi0+c3RhdHVzCT0gMDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCAqaSkKLXsKLQlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaDsKLQlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZnJvbnQtPnBkOwotCXN0cnVjdCBydW5uaW5nX2NvbnRleHQgKmNvbnRleHQgPSAmcGQtPnZpZGVvX2RhdGEuY29udGV4dDsKLQotCSppID0gY29udGV4dC0+c2lnX2luZGV4OwotCXJldHVybiAwOwotfQotCi0vKiBXZSBjYW4gc3VwcG9ydCBzZXZlcmFsIGlucHV0cyAqLwotc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpKQotewotCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOwotCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmcm9udC0+cGQ7Ci0JczMyIHJldCwgY21kX3N0YXR1czsKLQotCWlmIChpID49IFBPU0VJRE9OX0lOUFVUUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBTR05MX1NSQ19TRUwsCi0JCQlwZF9pbnB1dHNbaV0udGxnX3NyYywgJmNtZF9zdGF0dXMpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlwZC0+dmlkZW9fZGF0YS5jb250ZXh0LnNpZ19pbmRleCA9IGk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdGxnX3NfY3RybChzdHJ1Y3QgdjRsMl9jdHJsICpjKQotewotCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBjb250YWluZXJfb2YoYy0+aGFuZGxlciwgc3RydWN0IHBvc2VpZG9uLAotCQkJCQkJdmlkZW9fZGF0YS5jdHJsX2hhbmRsZXIpOwotCXN0cnVjdCB0dW5lcl9jdXN0b21fcGFyYW1ldGVyX3MgcGFyYW0gPSB7MH07Ci0JczMyIHJldCA9IDAsIGNtZF9zdGF0dXMsIHBhcmFtczsKLQotCXN3aXRjaCAoYy0+aWQpIHsKLQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCXBhcmFtLnBhcmFtX2lkID0gQ1VTVF9QQVJNX0lEX0JSSUdIVE5FU1NfQ1RSTDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJcGFyYW0ucGFyYW1faWQgPSBDVVNUX1BBUk1fSURfQ09OVFJBU1RfQ1RSTDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCXBhcmFtLnBhcmFtX2lkID0gQ1VTVF9QQVJNX0lEX0hVRV9DVFJMOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCXBhcmFtLnBhcmFtX2lkID0gQ1VTVF9QQVJNX0lEX1NBVFVSQVRJT05fQ1RSTDsKLQkJYnJlYWs7Ci0JfQotCXBhcmFtLnBhcmFtX3ZhbHVlID0gYy0+dmFsOwotCXBhcmFtcyA9ICooczMyICopJnBhcmFtOyAvKiB0ZW1wIGNvZGUgKi8KLQotCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKLQlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFRVTkVSX0NVU1RPTV9QQVJBTUVURVIsIHBhcmFtcywgJmNtZF9zdGF0dXMpOwotCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVEFLRV9SRVFVRVNULCAwLCAmY21kX3N0YXR1cyk7Ci0JbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7Ci0KLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCXNjaGVkdWxlX3RpbWVvdXQoSFovNCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogQXVkaW8gaW9jdGxzICovCi1zdGF0aWMgaW50IHZpZGlvY19lbnVtYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoMCAhPSBhLT5pbmRleCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlzdHJjcHkoYS0+bmFtZSwgIlVTQiBhdWRpbyBpbiIpOwotCS8qUG9zZWlkb24gaGF2ZSBubyBBVkwgZnVuY3Rpb24uKi8KLQlhLT5tb2RlID0gMDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWEtPmluZGV4ID0gMDsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXN0cmNweShhLT5uYW1lLCAiVVNCIGF1ZGlvIGluIik7Ci0JYS0+bW9kZSA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBjb25zdCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlyZXR1cm4gKDAgPT0gYS0+aW5kZXgpID8gMCA6IC1FSU5WQUw7Ci19Ci0KLS8qIFR1bmVyIGlvY3RscyAqLwotc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3R1bmVyICp0dW5lcikKLXsKLQlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQJPSBmaDsKLQlzdHJ1Y3QgcG9zZWlkb24gKnBkCQk9IGZyb250LT5wZDsKLQlzdHJ1Y3QgdHVuZXJfYXR2X3NpZ19zdGF0X3MgYXR2X3N0YXQ7Ci0JczMyIGNvdW50ID0gNSwgcmV0LCBjbWRfc3RhdHVzOwotCWludCBpbmRleDsKLQotCWlmICgwICE9IHR1bmVyLT5pbmRleCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltdXRleF9sb2NrKCZwZC0+bG9jayk7Ci0JcmV0ID0gc2VuZF9nZXRfcmVxKHBkLCBUVU5FUl9TVEFUVVMsIFRMR19NT0RFX0FOQUxPR19UViwKLQkJCQkmYXR2X3N0YXQsICZjbWRfc3RhdHVzLCBzaXplb2YoYXR2X3N0YXQpKTsKLQotCXdoaWxlIChhdHZfc3RhdC5zaWdfbG9ja19idXN5ICYmIGNvdW50LS0gJiYgIXJldCkgewotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzY2hlZHVsZV90aW1lb3V0KEhaKTsKLQotCQlyZXQgPSBzZW5kX2dldF9yZXEocGQsIFRVTkVSX1NUQVRVUywgVExHX01PREVfQU5BTE9HX1RWLAotCQkJCSZhdHZfc3RhdCwgJmNtZF9zdGF0dXMsIHNpemVvZihhdHZfc3RhdCkpOwotCX0KLQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKLQotCWlmIChkZWJ1Z19tb2RlKQotCQlsb2coIlA6JWQsUzolZCIsIGF0dl9zdGF0LnNpZ19wcmVzZW50LCBhdHZfc3RhdC5zaWdfc3RyZW5ndGgpOwotCi0JaWYgKHJldCB8fCBjbWRfc3RhdHVzKQotCQl0dW5lci0+c2lnbmFsID0gMDsKLQllbHNlIGlmIChhdHZfc3RhdC5zaWdfcHJlc2VudCAmJiAhYXR2X3N0YXQuc2lnX3N0cmVuZ3RoKQotCQl0dW5lci0+c2lnbmFsID0gMHhGRkZGOwotCWVsc2UKLQkJdHVuZXItPnNpZ25hbCA9IChhdHZfc3RhdC5zaWdfc3RyZW5ndGggKiAyNTUgLyAxMCkgPDwgODsKLQotCXN0cmNweSh0dW5lci0+bmFtZSwgIlRlbGVnZW50IFN5c3RlbXMiKTsKLQl0dW5lci0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwotCXR1bmVyLT5yYW5nZWxvdyA9IFRVTkVSX0ZSRVFfTUlOIC8gNjI1MDA7Ci0JdHVuZXItPnJhbmdlaGlnaCA9IFRVTkVSX0ZSRVFfTUFYIC8gNjI1MDA7Ci0JdHVuZXItPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNIHwgVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwKLQkJCQlWNEwyX1RVTkVSX0NBUF9MQU5HMSB8IFY0TDJfVFVORVJfQ0FQX0xBTkcyOwotCWluZGV4ID0gcGQtPnZpZGVvX2RhdGEuY29udGV4dC5hdWRpb19pZHg7Ci0JdHVuZXItPnJ4c3ViY2hhbnMgPSBwZF9hdWRpb19tb2Rlc1tpbmRleF0udjRsMl9hdWRpb19zdWI7Ci0JdHVuZXItPmF1ZG1vZGUgPSBwZF9hdWRpb19tb2Rlc1tpbmRleF0udjRsMl9hdWRpb19tb2RlOwotCXR1bmVyLT5hZmMgPSAwOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHBkX3ZpZGlvY19zX3R1bmVyKHN0cnVjdCBwb3NlaWRvbiAqcGQsIGludCBpbmRleCkKLXsKLQlzMzIgcmV0ID0gMCwgY21kX3N0YXR1cywgcGFyYW0sIGF1ZGlvbW9kZTsKLQotCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKLQlwYXJhbSA9IHBkX2F1ZGlvX21vZGVzW2luZGV4XS50bGdfYXVkaW9fbW9kZTsKLQlyZXQgPSBzZW5kX3NldF9yZXEocGQsIFRVTkVSX0FVRF9NT0RFLCBwYXJhbSwgJmNtZF9zdGF0dXMpOwotCWF1ZGlvbW9kZSA9IGdldF9hdWRpb19zdGQocGQtPnZpZGVvX2RhdGEuY29udGV4dC50dm5vcm1pZCk7Ci0JcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVFVORVJfQVVEX0FOQV9TVEQsIGF1ZGlvbW9kZSwKLQkJCQkmY21kX3N0YXR1cyk7Ci0JaWYgKCFyZXQpCi0JCXBkLT52aWRlb19kYXRhLmNvbnRleHQuYXVkaW9faWR4ID0gaW5kZXg7Ci0JbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIGNvbnN0IHN0cnVjdCB2NGwyX3R1bmVyICphKQotewotCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udAk9IGZoOwotCXN0cnVjdCBwb3NlaWRvbiAqcGQJCT0gZnJvbnQtPnBkOwotCWludCBpbmRleDsKLQotCWlmICgwICE9IGEtPmluZGV4KQotCQlyZXR1cm4gLUVJTlZBTDsKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBQT1NFSURPTl9BVURJT01PRFM7IGluZGV4KyspCi0JCWlmIChhLT5hdWRtb2RlID09IHBkX2F1ZGlvX21vZGVzW2luZGV4XS52NGwyX2F1ZGlvX21vZGUpCi0JCQlyZXR1cm4gcGRfdmlkaW9jX3NfdHVuZXIocGQsIGluZGV4KTsKLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAotCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmcmVxKQotewotCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZoOwotCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSBmcm9udC0+cGQ7Ci0Jc3RydWN0IHJ1bm5pbmdfY29udGV4dCAqY29udGV4dCA9ICZwZC0+dmlkZW9fZGF0YS5jb250ZXh0OwotCi0JaWYgKDAgIT0gZnJlcS0+dHVuZXIpCi0JCXJldHVybiAtRUlOVkFMOwotCWZyZXEtPmZyZXF1ZW5jeSA9IGNvbnRleHQtPmZyZXE7Ci0JZnJlcS0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNldF9mcmVxdWVuY3koc3RydWN0IHBvc2VpZG9uICpwZCwgdTMyICpmcmVxdWVuY3kpCi17Ci0JczMyIHJldCA9IDAsIHBhcmFtLCBjbWRfc3RhdHVzOwotCXN0cnVjdCBydW5uaW5nX2NvbnRleHQgKmNvbnRleHQgPSAmcGQtPnZpZGVvX2RhdGEuY29udGV4dDsKLQotCSpmcmVxdWVuY3kgPSBjbGFtcCgqZnJlcXVlbmN5LAotCQkJVFVORVJfRlJFUV9NSU4gLyA2MjUwMCwgVFVORVJfRlJFUV9NQVggLyA2MjUwMCk7Ci0JcGFyYW0gPSAoKmZyZXF1ZW5jeSkgKiA2MjUwMCAvIDEwMDA7Ci0KLQltdXRleF9sb2NrKCZwZC0+bG9jayk7Ci0JcmV0ID0gc2VuZF9zZXRfcmVxKHBkLCBUVU5FX0ZSRVFfU0VMRUNULCBwYXJhbSwgJmNtZF9zdGF0dXMpOwotCXJldCA9IHNlbmRfc2V0X3JlcShwZCwgVEFLRV9SRVFVRVNULCAwLCAmY21kX3N0YXR1cyk7Ci0KLQltc2xlZXAoMjUwKTsgLyogd2FpdCBmb3IgYSB3aGlsZSB1bnRpbCB0aGUgaGFyZHdhcmUgaXMgcmVhZHkuICovCi0JY29udGV4dC0+ZnJlcSA9ICpmcmVxdWVuY3k7Ci0JbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAotCQkJCWNvbnN0IHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKLXsKLQlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaDsKLQlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZnJvbnQtPnBkOwotCXUzMiBmcmVxdWVuY3kgPSBmcmVxLT5mcmVxdWVuY3k7Ci0KLQlpZiAoZnJlcS0+dHVuZXIpCi0JCXJldHVybiAtRUlOVkFMOwotI2lmZGVmIENPTkZJR19QTQotCXBkLT5wbV9zdXNwZW5kID0gcG1fdmlkZW9fc3VzcGVuZDsKLQlwZC0+cG1fcmVzdW1lID0gcG1fdmlkZW9fcmVzdW1lOwotI2VuZGlmCi0JcmV0dXJuIHNldF9mcmVxdWVuY3kocGQsICZmcmVxdWVuY3kpOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKLQkJCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqYikKLXsKLQlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoJmZyb250LT5xLCBiKTsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCi17Ci0Jc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZigmZnJvbnQtPnEsIGIpOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQotewotCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlyZXR1cm4gdmlkZW9idWZfcWJ1ZigmZnJvbnQtPnEsIGIpOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKLXsKLQlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JcmV0dXJuIHZpZGVvYnVmX2RxYnVmKCZmcm9udC0+cSwgYiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotfQotCi0vKiBKdXN0IHN0b3AgdGhlIFVSQnMsIGRvIG5vdCBmcmVlIHRoZSBVUkJzICovCi1zdGF0aWMgaW50IHVzYl90cmFuc2Zlcl9zdG9wKHN0cnVjdCB2aWRlb19kYXRhICp2aWRlbykKLXsKLQlpZiAodmlkZW8tPmlzX3N0cmVhbWluZykgewotCQlpbnQgaTsKLQkJczMyIGNtZF9zdGF0dXM7Ci0JCXN0cnVjdCBwb3NlaWRvbiAqcGQgPSB2aWRlby0+cGQ7Ci0KLQkJdmlkZW8tPmlzX3N0cmVhbWluZyA9IDA7Ci0JCWZvciAoaSA9IDA7IGkgPCBTQlVGX05VTTsgKytpKSB7Ci0JCQlpZiAodmlkZW8tPnVyYl9hcnJheVtpXSkKLQkJCQl1c2Jfa2lsbF91cmIodmlkZW8tPnVyYl9hcnJheVtpXSk7Ci0JCX0KLQotCQlzZW5kX3NldF9yZXEocGQsIFBMQVlfU0VSVklDRSwgVExHX1RVTkVfUExBWV9TVkNfU1RPUCwKLQkJCSAgICAgICAmY21kX3N0YXR1cyk7Ci0JfQotCXJldHVybiAwOwotfQotCi1pbnQgc3RvcF9hbGxfdmlkZW9fc3RyZWFtKHN0cnVjdCBwb3NlaWRvbiAqcGQpCi17Ci0Jc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvID0gJnBkLT52aWRlb19kYXRhOwotCXN0cnVjdCB2YmlfZGF0YSAqdmJpCT0gJnBkLT52YmlfZGF0YTsKLQotCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKLQlpZiAodmlkZW8tPmlzX3N0cmVhbWluZykgewotCQlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSB2aWRlby0+ZnJvbnQ7Ci0KLQkJLyogc3RvcCB0aGUgVVJCcyAqLwotCQl1c2JfdHJhbnNmZXJfc3RvcCh2aWRlbyk7Ci0JCWZyZWVfYWxsX3VyYih2aWRlbyk7Ci0KLQkJLyogc3RvcCB0aGUgaG9zdCBzaWRlIG9mIFZJREVPICovCi0JCXZpZGVvYnVmX3N0b3AoJmZyb250LT5xKTsKLQkJdmlkZW9idWZfbW1hcF9mcmVlKCZmcm9udC0+cSk7Ci0KLQkJLyogc3RvcCB0aGUgaG9zdCBzaWRlIG9mIFZCSSAqLwotCQlmcm9udCA9IHZiaS0+ZnJvbnQ7Ci0JCWlmIChmcm9udCkgewotCQkJdmlkZW9idWZfc3RvcCgmZnJvbnQtPnEpOwotCQkJdmlkZW9idWZfbW1hcF9mcmVlKCZmcm9udC0+cSk7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUaGUgYnViYmxlcyBjYW4gc2VyaW91c2x5IGRhbWFnZSB0aGUgdmlkZW8ncyBxdWFsaXR5LAotICogdGhvdWdoIGl0IG9jY3VycyBpbiB2ZXJ5IHJhcmUgc2l0dWF0aW9uLgotICovCi1zdGF0aWMgdm9pZCBpc29fYnViYmxlX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3KQotewotCXN0cnVjdCB2aWRlb19kYXRhICp2aWRlbzsKLQlzdHJ1Y3QgcG9zZWlkb24gKnBkOwotCi0JdmlkZW8gPSBjb250YWluZXJfb2Yodywgc3RydWN0IHZpZGVvX2RhdGEsIGJ1YmJsZV93b3JrKTsKLQlwZCA9IHZpZGVvLT5wZDsKLQotCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKLQl1c2JfdHJhbnNmZXJfc3RvcCh2aWRlbyk7Ci0JbXNsZWVwKDUwMCk7Ci0Jc3RhcnRfdmlkZW9fc3RyZWFtKHBkKTsKLQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKLX0KLQotCi1zdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCi0JCQkJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCi17Ci0Jc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmg7Ci0KLQlpZiAodW5saWtlbHkodHlwZSAhPSBmcm9udC0+dHlwZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiB2aWRlb2J1Zl9zdHJlYW1vbigmZnJvbnQtPnEpOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAotCQkJCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQotewotCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCWlmICh1bmxpa2VseSh0eXBlICE9IGZyb250LT50eXBlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9mZigmZnJvbnQtPnEpOwotfQotCi0vKiBTZXQgdGhlIGZpcm13YXJlJ3MgZGVmYXVsdCB2YWx1ZXMgOiBuZWVkIGFsdGVyc2V0dGluZyAqLwotc3RhdGljIGludCBwZF92aWRlb19jaGVja21vZGUoc3RydWN0IHBvc2VpZG9uICpwZCkKLXsKLQlzMzIgcmV0ID0gMCwgY21kX3N0YXR1cywgYXVkaW9tb2RlOwotCi0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQlzY2hlZHVsZV90aW1lb3V0KEhaLzIpOwotCi0JLyogY2hvb3NlIHRoZSBhbHRlcnNldHRpbmcgKi8KLQlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShwZC0+dWRldiwgMCwKLQkJCQkJKHBkLT5jdXJfdHJhbnNmZXJfbW9kZSA/Ci0JCQkJCSBJU09fM0tfQlVMS19BTFRFUk5BVEVfSUZBQ0UgOgotCQkJCQkgQlVMS19BTFRFUk5BVEVfSUZBQ0UpKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJvcjsKLQotCS8qIHNldCBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIFBBTC1EICwgd2l0aCB0aGUgVkJJIGVuYWJsZWQqLwotCXJldCA9IHNldF90dW5lcl9tb2RlKHBkLCBUTEdfTU9ERV9BTkFMT0dfVFYpOwotCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFNHTkxfU1JDX1NFTCwKLQkJCQlUTEdfU0lHX1NSQ19BTlRFTk5BLCAmY21kX3N0YXR1cyk7Ci0JcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVklERU9fU1REX1NFTCwKLQkJCQlUTEdfVFVORV9WU1REX1BBTF9ELCAmY21kX3N0YXR1cyk7Ci0JcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVklERU9fU1RSRUFNX0ZNVF9TRUwsCi0JCQkJVExHX1RVTkVSX1ZJRF9GT1JNQVRfWVVWLCAmY21kX3N0YXR1cyk7Ci0JcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVklERU9fUk9TT0xVX1NFTCwKLQkJCQlUTEdfVFVORV9WSURfUkVTXzcyMCwgJmNtZF9zdGF0dXMpOwotCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFRVTkVfRlJFUV9TRUxFQ1QsIFRVTkVSX0ZSRVFfTUlOLCAmY21kX3N0YXR1cyk7Ci0JcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVkJJX0RBVEFfU0VMLCAxLCAmY21kX3N0YXR1cyk7LyogZW5hYmxlIHZiaSAqLwotCi0JLyogc2V0IHRoZSBhdWRpbyAqLwotCWF1ZGlvbW9kZSA9IGdldF9hdWRpb19zdGQocGQtPnZpZGVvX2RhdGEuY29udGV4dC50dm5vcm1pZCk7Ci0JcmV0IHw9IHNlbmRfc2V0X3JlcShwZCwgVFVORVJfQVVEX0FOQV9TVEQsIGF1ZGlvbW9kZSwgJmNtZF9zdGF0dXMpOwotCXJldCB8PSBzZW5kX3NldF9yZXEocGQsIFRVTkVSX0FVRF9NT0RFLAotCQkJCVRMR19UVU5FX1RWQVVESU9fTU9ERV9TVEVSRU8sICZjbWRfc3RhdHVzKTsKLQlyZXQgfD0gc2VuZF9zZXRfcmVxKHBkLCBBVURJT19TQU1QTEVfUkFURV9TRUwsCi0JCQkJQVRWX0FVRElPX1JBVEVfNDhLLCAmY21kX3N0YXR1cyk7Ci1lcnJvcjoKLQlyZXR1cm4gcmV0OwotfQotCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IHBtX3ZpZGVvX3N1c3BlbmQoc3RydWN0IHBvc2VpZG9uICpwZCkKLXsKLQkvKiBzdG9wIGF1ZGlvICovCi0JcG1fYWxzYV9zdXNwZW5kKHBkKTsKLQotCS8qIHN0b3AgYW5kIGZyZWUgYWxsIHRoZSBVUkJzICovCi0JdXNiX3RyYW5zZmVyX3N0b3AoJnBkLT52aWRlb19kYXRhKTsKLQlmcmVlX2FsbF91cmIoJnBkLT52aWRlb19kYXRhKTsKLQotCS8qIHJlc2V0IHRoZSBpbnRlcmZhY2UgKi8KLQl1c2Jfc2V0X2ludGVyZmFjZShwZC0+dWRldiwgMCwgMCk7Ci0JbXNsZWVwKDMwMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcmVzdG9yZV92NGwyX2NvbnRleHQoc3RydWN0IHBvc2VpZG9uICpwZCwKLQkJCQlzdHJ1Y3QgcnVubmluZ19jb250ZXh0ICpjb250ZXh0KQotewotCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IHBkLT52aWRlb19kYXRhLmZyb250OwotCi0JcGRfdmlkZW9fY2hlY2ttb2RlKHBkKTsKLQotCXNldF9zdGQocGQsIGNvbnRleHQtPnR2bm9ybWlkKTsKLQl2aWRpb2Nfc19pbnB1dChOVUxMLCBmcm9udCwgY29udGV4dC0+c2lnX2luZGV4KTsKLQlwZF92aWRpb2Nfc190dW5lcihwZCwgY29udGV4dC0+YXVkaW9faWR4KTsKLQlwZF92aWRpb2Nfc19mbXQocGQsICZjb250ZXh0LT5waXgpOwotCXNldF9mcmVxdWVuY3kocGQsICZjb250ZXh0LT5mcmVxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwbV92aWRlb19yZXN1bWUoc3RydWN0IHBvc2VpZG9uICpwZCkKLXsKLQlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmcGQtPnZpZGVvX2RhdGE7Ci0KLQkvKiByZXN1bWUgdGhlIHZpZGVvICovCi0JLyogWzFdIHJlc3RvcmUgdGhlIG9yaWdpbiBWNEwyIHBhcmFtZXRlcnMgKi8KLQlyZXN0b3JlX3Y0bDJfY29udGV4dChwZCwgJnZpZGVvLT5jb250ZXh0KTsKLQotCS8qIFsyXSBpbml0aWF0ZSB2aWRlbyBjb3B5IHZhcmlhYmxlcyAqLwotCWlmICh2aWRlby0+ZnJvbnQtPmN1cnJfZnJhbWUpCi0JCWluaXRfY29weSh2aWRlbywgMCk7Ci0KLQkvKiBbM10gZmlyZSB1cmJzCSovCi0Jc3RhcnRfdmlkZW9fc3RyZWFtKHBkKTsKLQotCS8qIHJlc3VtZSB0aGUgYXVkaW8gKi8KLQlwbV9hbHNhX3Jlc3VtZShwZCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotdm9pZCBzZXRfZGVidWdfbW9kZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQsIGludCBkZWJ1Z19tb2RlKQotewotCXZmZC0+ZGVidWcgPSAwOwotCWlmIChkZWJ1Z19tb2RlICYgMHgxKQotCQl2ZmQtPmRlYnVnID0gVjRMMl9ERUJVR19JT0NUTDsKLQlpZiAoZGVidWdfbW9kZSAmIDB4MikKLQkJdmZkLT5kZWJ1ZyA9IFY0TDJfREVCVUdfSU9DVEwgfCBWNEwyX0RFQlVHX0lPQ1RMX0FSRzsKLX0KLQotc3RhdGljIHZvaWQgaW5pdF92aWRlb19jb250ZXh0KHN0cnVjdCBydW5uaW5nX2NvbnRleHQgKmNvbnRleHQpCi17Ci0JY29udGV4dC0+c2lnX2luZGV4CT0gMDsKLQljb250ZXh0LT5hdWRpb19pZHgJPSAxOyAvKiBzdGVyZW8gKi8KLQljb250ZXh0LT50dm5vcm1pZCAgCT0gVjRMMl9TVERfUEFMX0Q7Ci0JY29udGV4dC0+cGl4ID0gKHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQpIHsKLQkJCQkud2lkdGgJCT0gNzIwLAotCQkJCS5oZWlnaHQJCT0gNTc2LAotCQkJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9ZVVlWLAotCQkJCS5maWVsZAkJPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCi0JCQkJLmJ5dGVzcGVybGluZQk9IDcyMCAqIDIsCi0JCQkJLnNpemVpbWFnZQk9IDcyMCAqIDU3NiAqIDIsCi0JCQkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNLAotCQkJfTsKLX0KLQotc3RhdGljIGludCBwZF92aWRlb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCA9IHZpZGVvX2RldmRhdGEoZmlsZSk7Ci0Jc3RydWN0IHBvc2VpZG9uICpwZCA9IHZpZGVvX2dldF9kcnZkYXRhKHZmZCk7Ci0Jc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gTlVMTDsKLQlpbnQgcmV0ID0gLUVOT01FTTsKLQotCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKLQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UocGQtPmludGVyZmFjZSk7Ci0KLQlpZiAocGQtPnN0YXRlICYmICEocGQtPnN0YXRlICYgUE9TRUlET05fU1RBVEVfQU5BTE9HKSkgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQlmcm9udCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmcm9udF9mYWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmcm9udCkKLQkJZ290byBvdXQ7Ci0JaWYgKHZmZC0+dmZsX3R5cGUgPT0gVkZMX1RZUEVfR1JBQkJFUikgewotCQlwZC0+Y3VyX3RyYW5zZmVyX21vZGUJPSB1c2JfdHJhbnNmZXJfbW9kZTsvKiBidWxrIG9yIGlzbyAqLwotCQlpbml0X3ZpZGVvX2NvbnRleHQoJnBkLT52aWRlb19kYXRhLmNvbnRleHQpOwotCi0JCXJldCA9IHBkX3ZpZGVvX2NoZWNrbW9kZShwZCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlrZnJlZShmcm9udCk7Ci0JCQlyZXQgPSAtMTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJZnJvbnQtPnR5cGUJCT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCQlwZC0+dmlkZW9fZGF0YS51c2VycysrOwotCQlzZXRfZGVidWdfbW9kZSh2ZmQsIGRlYnVnX21vZGUpOwotCi0JCXZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdCgmZnJvbnQtPnEsICZwZF92aWRlb19xb3BzLAotCQkJCU5VTEwsICZmcm9udC0+cXVldWVfbG9jaywKLQkJCQlWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCi0JCQkJVjRMMl9GSUVMRF9JTlRFUkxBQ0VELC8qIHZpZGVvIGlzIGludGVybGFjZCAqLwotCQkJCXNpemVvZihzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyKSwvKml0J3MgZW5vdWdoKi8KLQkJCQlmcm9udCwgTlVMTCk7Ci0JfSBlbHNlIHsKLQkJZnJvbnQtPnR5cGUJPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwotCQlwZC0+dmJpX2RhdGEuZnJvbnQgPSBmcm9udDsKLQkJcGQtPnZiaV9kYXRhLnVzZXJzKys7Ci0KLQkJdmlkZW9idWZfcXVldWVfdm1hbGxvY19pbml0KCZmcm9udC0+cSwgJnBkX3ZpZGVvX3FvcHMsCi0JCQkJTlVMTCwgJmZyb250LT5xdWV1ZV9sb2NrLAotCQkJCVY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUsCi0JCQkJVjRMMl9GSUVMRF9OT05FLCAvKiB2YmkgaXMgTk9ORSBtb2RlICovCi0JCQkJc2l6ZW9mKHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIpLAotCQkJCWZyb250LCBOVUxMKTsKLQl9Ci0KLQlwZC0+c3RhdGUgfD0gUE9TRUlET05fU1RBVEVfQU5BTE9HOwotCWZyb250LT5wZCA9IHBkOwotCWZyb250LT5jdXJyX2ZyYW1lID0gTlVMTDsKLQlJTklUX0xJU1RfSEVBRCgmZnJvbnQtPmFjdGl2ZSk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmZyb250LT5xdWV1ZV9sb2NrKTsKLQotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZyb250OwotCWtyZWZfZ2V0KCZwZC0+a3JlZik7Ci0KLQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKLQlyZXR1cm4gMDsKLW91dDoKLQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UocGQtPmludGVyZmFjZSk7Ci0JbXV0ZXhfdW5sb2NrKCZwZC0+bG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBwZF92aWRlb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgcG9zZWlkb24gKnBkID0gZnJvbnQtPnBkOwotCXMzMiBjbWRfc3RhdHVzID0gMDsKLQotCW11dGV4X2xvY2soJnBkLT5sb2NrKTsKLQotCWlmIChmcm9udC0+dHlwZQk9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJLyogc3RvcCB0aGUgZGV2aWNlLCBhbmQgZnJlZSB0aGUgVVJCcyAqLwotCQl1c2JfdHJhbnNmZXJfc3RvcCgmcGQtPnZpZGVvX2RhdGEpOwotCQlmcmVlX2FsbF91cmIoJnBkLT52aWRlb19kYXRhKTsKLQotCQkvKiBzdG9wIHRoZSBmaXJtd2FyZSAqLwotCQlzZW5kX3NldF9yZXEocGQsIFBMQVlfU0VSVklDRSwgVExHX1RVTkVfUExBWV9TVkNfU1RPUCwKLQkJCSAgICAgICAmY21kX3N0YXR1cyk7Ci0KLQkJcGQtPmZpbGVfZm9yX3N0cmVhbSA9IE5VTEw7Ci0JCXBkLT52aWRlb19kYXRhLnVzZXJzLS07Ci0JfSBlbHNlIGlmIChmcm9udC0+dHlwZQk9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKSB7Ci0JCXBkLT52YmlfZGF0YS5mcm9udCA9IE5VTEw7Ci0JCXBkLT52YmlfZGF0YS51c2Vycy0tOwotCX0KLQlpZiAoIXBkLT52YmlfZGF0YS51c2VycyAmJiAhcGQtPnZpZGVvX2RhdGEudXNlcnMpCi0JCXBkLT5zdGF0ZSAmPSB+UE9TRUlET05fU1RBVEVfQU5BTE9HOwotCXZpZGVvYnVmX3N0b3AoJmZyb250LT5xKTsKLQl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZyb250LT5xKTsKLQotCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShwZC0+aW50ZXJmYWNlKTsKLQltdXRleF91bmxvY2soJnBkLT5sb2NrKTsKLQotCWtmcmVlKGZyb250KTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCWtyZWZfcHV0KCZwZC0+a3JlZiwgcG9zZWlkb25fZGVsZXRlKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwZF92aWRlb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3QgZnJvbnRfZmFjZSAqZnJvbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JcmV0dXJuICB2aWRlb2J1Zl9tbWFwX21hcHBlcigmZnJvbnQtPnEsIHZtYSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGRfdmlkZW9fcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqdGFibGUpCi17Ci0Jc3RydWN0IGZyb250X2ZhY2UgKmZyb250ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXJldHVybiB2aWRlb2J1Zl9wb2xsX3N0cmVhbShmaWxlLCAmZnJvbnQtPnEsIHRhYmxlKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcGRfdmlkZW9fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBmcm9udF9mYWNlICpmcm9udCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlyZXR1cm4gdmlkZW9idWZfcmVhZF9zdHJlYW0oJmZyb250LT5xLCBidWZmZXIsIGNvdW50LCBwcG9zLAotCQkJCTAsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLX0KLQotLyogVGhpcyBzdHJ1Y3Qgd29ya3MgZm9yIGJvdGggVklERU8gYW5kIFZCSSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBwZF92aWRlb19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSBwZF92aWRlb19vcGVuLAotCS5yZWxlYXNlCT0gcGRfdmlkZW9fcmVsZWFzZSwKLQkucmVhZAkJPSBwZF92aWRlb19yZWFkLAotCS5wb2xsCQk9IHBkX3ZpZGVvX3BvbGwsCi0JLm1tYXAJCT0gcGRfdmlkZW9fbW1hcCwKLQkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLCAvKiBtYXliZSBjaGFuZ2VkIGluIGZ1dHVyZSAqLwotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBwZF92aWRlb19pb2N0bF9vcHMgPSB7Ci0JLnZpZGlvY19xdWVyeWNhcAk9IHZpZGlvY19xdWVyeWNhcCwKLQotCS8qIFZpZGVvIGZvcm1hdCAqLwotCS52aWRpb2NfZ19mbXRfdmlkX2NhcAk9IHZpZGlvY19nX2ZtdCwKLQkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAJPSB2aWRpb2NfZW51bV9mbXQsCi0JLnZpZGlvY19zX2ZtdF92aWRfY2FwCT0gdmlkaW9jX3NfZm10LAotCS52aWRpb2NfZ19mbXRfdmJpX2NhcAk9IHZpZGlvY19nX2ZtdF92YmksIC8qIFZCSSAqLwotCi0JLyogSW5wdXQgKi8KLQkudmlkaW9jX2dfaW5wdXQJCT0gdmlkaW9jX2dfaW5wdXQsCi0JLnZpZGlvY19zX2lucHV0CQk9IHZpZGlvY19zX2lucHV0LAotCS52aWRpb2NfZW51bV9pbnB1dAk9IHZpZGlvY19lbnVtX2lucHV0LAotCi0JLyogQXVkaW8gaW9jdGxzICovCi0JLnZpZGlvY19lbnVtYXVkaW8JPSB2aWRpb2NfZW51bWF1ZGlvLAotCS52aWRpb2NfZ19hdWRpbwkJPSB2aWRpb2NfZ19hdWRpbywKLQkudmlkaW9jX3NfYXVkaW8JCT0gdmlkaW9jX3NfYXVkaW8sCi0KLQkvKiBUdW5lciBpb2N0bHMgKi8KLQkudmlkaW9jX2dfdHVuZXIJCT0gdmlkaW9jX2dfdHVuZXIsCi0JLnZpZGlvY19zX3R1bmVyCQk9IHZpZGlvY19zX3R1bmVyLAotCS52aWRpb2NfZ19zdGQJCT0gdmlkaW9jX2dfc3RkLAotCS52aWRpb2Nfc19zdGQJCT0gdmlkaW9jX3Nfc3RkLAotCS52aWRpb2NfZ19mcmVxdWVuY3kJPSB2aWRpb2NfZ19mcmVxdWVuY3ksCi0JLnZpZGlvY19zX2ZyZXF1ZW5jeQk9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKLQotCS8qIEJ1ZmZlciBoYW5kbGVycyAqLwotCS52aWRpb2NfcmVxYnVmcwkJPSB2aWRpb2NfcmVxYnVmcywKLQkudmlkaW9jX3F1ZXJ5YnVmCT0gdmlkaW9jX3F1ZXJ5YnVmLAotCS52aWRpb2NfcWJ1ZgkJPSB2aWRpb2NfcWJ1ZiwKLQkudmlkaW9jX2RxYnVmCQk9IHZpZGlvY19kcWJ1ZiwKLQotCS8qIFN0cmVhbSBvbi9vZmYgKi8KLQkudmlkaW9jX3N0cmVhbW9uCT0gdmlkaW9jX3N0cmVhbW9uLAotCS52aWRpb2Nfc3RyZWFtb2ZmCT0gdmlkaW9jX3N0cmVhbW9mZiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHBkX3ZpZGVvX3RlbXBsYXRlID0gewotCS5uYW1lID0gIlRlbGVnZW50LVZpZGVvIiwKLQkuZm9wcyA9ICZwZF92aWRlb19mb3BzLAotCS5taW5vciA9IC0xLAotCS5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi0JLnR2bm9ybXMgPSBWNEwyX1NURF9BTEwsCi0JLmlvY3RsX29wcyA9ICZwZF92aWRlb19pb2N0bF9vcHMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfY3RybF9vcHMgdGxnX2N0cmxfb3BzID0gewotCS5zX2N0cmwgPSB0bGdfc19jdHJsLAotfTsKLQotdm9pZCBwZF92aWRlb19leGl0KHN0cnVjdCBwb3NlaWRvbiAqcGQpCi17Ci0Jc3RydWN0IHZpZGVvX2RhdGEgKnZpZGVvID0gJnBkLT52aWRlb19kYXRhOwotCXN0cnVjdCB2YmlfZGF0YSAqdmJpID0gJnBkLT52YmlfZGF0YTsKLQotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ2aWRlby0+dl9kZXYpOwotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ2YmktPnZfZGV2KTsKLQl2NGwyX2N0cmxfaGFuZGxlcl9mcmVlKCZ2aWRlby0+Y3RybF9oYW5kbGVyKTsKLQlsb2coKTsKLX0KLQotaW50IHBkX3ZpZGVvX2luaXQoc3RydWN0IHBvc2VpZG9uICpwZCkKLXsKLQlzdHJ1Y3QgdmlkZW9fZGF0YSAqdmlkZW8gPSAmcGQtPnZpZGVvX2RhdGE7Ci0Jc3RydWN0IHZiaV9kYXRhICp2YmkJPSAmcGQtPnZiaV9kYXRhOwotCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciAqaGRsID0gJnZpZGVvLT5jdHJsX2hhbmRsZXI7Ci0JdTMyIGZyZXEgPSBUVU5FUl9GUkVRX01JTiAvIDYyNTAwOwotCWludCByZXQgPSAtRU5PTUVNOwotCi0JdjRsMl9jdHJsX2hhbmRsZXJfaW5pdChoZGwsIDQpOwotCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnRsZ19jdHJsX29wcywgVjRMMl9DSURfQlJJR0hUTkVTUywKLQkJCTAsIDEwMDAwLCAxLCAxMDApOwotCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnRsZ19jdHJsX29wcywgVjRMMl9DSURfQ09OVFJBU1QsCi0JCQkwLCAxMDAwMCwgMSwgMTAwKTsKLQl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsICZ0bGdfY3RybF9vcHMsIFY0TDJfQ0lEX0hVRSwKLQkJCTAsIDEwMDAwLCAxLCAxMDApOwotCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgJnRsZ19jdHJsX29wcywgVjRMMl9DSURfU0FUVVJBVElPTiwKLQkJCTAsIDEwMDAwLCAxLCAxMDApOwotCWlmIChoZGwtPmVycm9yKSB7Ci0JCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoaGRsKTsKLQkJcmV0dXJuIGhkbC0+ZXJyb3I7Ci0JfQotCXNldF9mcmVxdWVuY3kocGQsICZmcmVxKTsKLQl2aWRlby0+dl9kZXYgPSBwZF92aWRlb190ZW1wbGF0ZTsKLQl2aWRlby0+dl9kZXYudjRsMl9kZXYgPSAmcGQtPnY0bDJfZGV2OwotCXZpZGVvLT52X2Rldi5jdHJsX2hhbmRsZXIgPSBoZGw7Ci0JdmlkZW9fc2V0X2RydmRhdGEoJnZpZGVvLT52X2RldiwgcGQpOwotCi0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ2aWRlby0+dl9kZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKLQlpZiAocmV0ICE9IDApCi0JCWdvdG8gb3V0OwotCi0JLyogVkJJIHVzZXMgdGhlIHNhbWUgdGVtcGxhdGUgYXMgdmlkZW8gKi8KLQl2YmktPnZfZGV2ID0gcGRfdmlkZW9fdGVtcGxhdGU7Ci0JdmJpLT52X2Rldi52NGwyX2RldiA9ICZwZC0+djRsMl9kZXY7Ci0JdmJpLT52X2Rldi5jdHJsX2hhbmRsZXIgPSBoZGw7Ci0JdmlkZW9fc2V0X2RydmRhdGEoJnZiaS0+dl9kZXYsIHBkKTsKLQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnZiaS0+dl9kZXYsIFZGTF9UWVBFX1ZCSSwgLTEpOwotCWlmIChyZXQgIT0gMCkKLQkJZ290byBvdXQ7Ci0JbG9nKCJyZWdpc3RlciBWSURFTy9WQkkgZGV2aWNlcyIpOwotCXJldHVybiAwOwotb3V0OgotCWxvZygiVklERU8vVkJJIGRldmljZXMgcmVnaXN0ZXIgZmFpbGVkLCA6ICVkIiwgcmV0KTsKLQlwZF92aWRlb19leGl0KHBkKTsKLQlyZXR1cm4gcmV0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvdmVuZG9yY21kcy5oIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3RsZzIzMDAvdmVuZG9yY21kcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTZmNGFlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS90bGcyMzAwL3ZlbmRvcmNtZHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0MyArMCwwIEBACi0jaWZuZGVmIFZFTkRPUl9DTURfSF8KLSNkZWZpbmUgVkVORE9SX0NNRF9IXwotCi0jZGVmaW5lIEJVTEtfQUxURVJOQVRFX0lGQUNFCQkoMikKLSNkZWZpbmUgSVNPXzNLX0JVTEtfQUxURVJOQVRFX0lGQUNFICAgICAoMSkKLSNkZWZpbmUgUkVRX1NFVF9DTUQJCQkoMFgwMCkKLSNkZWZpbmUgUkVRX0dFVF9DTUQJCQkoMFg4MCkKLQotZW51bSB0bGdfX2FuYWxvZ19hdWRpb19zdGFuZGFyZCB7Ci0JVExHX1RVTkVfQVNURF9OT05FCT0gMHgwMDAwMDAwMCwKLQlUTEdfVFVORV9BU1REX0EyCT0gMHgwMDAwMDAwMSwKLQlUTEdfVFVORV9BU1REX05JQ0FNCT0gMHgwMDAwMDAwMiwKLQlUTEdfVFVORV9BU1REX0VJQUoJPSAweDAwMDAwMDA0LAotCVRMR19UVU5FX0FTVERfQlRTQwk9IDB4MDAwMDAwMDgsCi0JVExHX1RVTkVfQVNURF9GTV9VUwk9IDB4MDAwMDAwMTAsCi0JVExHX1RVTkVfQVNURF9GTV9FVVIJPSAweDAwMDAwMDIwLAotCVRMR19UVU5FX0FTVERfQUxMCT0gMHgwMDAwMDAzZgotfTsKLQotLyoKLSAqIGlkZW50aWZpZXJzIGZvciBDdXN0b20gUGFyYW1ldGVyIG1lc3NhZ2VzLgotICogQHR5cGVkZWYgY21kX2N1c3RvbV9wYXJhbV9pZF90Ci0gKi8KLWVudW0gY21kX2N1c3RvbV9wYXJhbV9pZCB7Ci0JQ1VTVF9QQVJNX0lEX05PTkUJCT0gMHgwMCwKLQlDVVNUX1BBUk1fSURfQlJJR0hUTkVTU19DVFJMCT0gMHgwMSwKLQlDVVNUX1BBUk1fSURfQ09OVFJBU1RfQ1RSTAk9IDB4MDIsCi0JQ1VTVF9QQVJNX0lEX0hVRV9DVFJMCQk9IDB4MDMsCi0JQ1VTVF9QQVJNX0lEX1NBVFVSQVRJT05fQ1RSTAkgID0gMHgwNCwKLQlDVVNUX1BBUk1fSURfQVVESU9fU05SX1RIUkVTSE9MRCAgPSAweDEwLAotCUNVU1RfUEFSTV9JRF9BVURJT19BR0NfVEhSRVNIT0xEICA9IDB4MTEsCi0JQ1VTVF9QQVJNX0lEX01BWAotfTsKLQotc3RydWN0ICB0dW5lcl9jdXN0b21fcGFyYW1ldGVyX3MgewotCXVpbnQxNl90CXBhcmFtX2lkOwkgLyogIFBhcmFtZXRlciBpZGVudGlmaWVyICAqLwotCXVpbnQxNl90CXBhcmFtX3ZhbHVlOwkgLyogIFBhcmFtZXRlciB2YWx1ZQkgICAqLwotfTsKLQotc3RydWN0ICB0dW5lcl9iZXJfcmF0ZV9zIHsKLQl1aW50MzJfdAliZXJfcmF0ZTsgIC8qICBCRVIgc2FtcGxlIHJhdGUgaW4gc2Vjb25kcyAgICovCi19OwotCi1zdHJ1Y3QgdHVuZXJfYXR2X3NpZ19zdGF0X3MgewotCXVpbnQzMl90CXNpZ19wcmVzZW50OwotCXVpbnQzMl90CXNpZ19sb2NrZWQ7Ci0JdWludDMyX3QJc2lnX2xvY2tfYnVzeTsKLQl1aW50MzJfdAlzaWdfc3RyZW5ndGg7CSAgIC8qICBtaWxsaURiCSAgKi8KLQl1aW50MzJfdAl0dl9hdWRpb19jaGFuOwkgIC8qICBtb25vL3N0ZXJlby9zYXAqLwotCXVpbnQzMl90IAltdmlzaW9uX3N0YXQ7CSAgIC8qICBtYWNyb3Zpc2lvbiBzdGF0dXMgKi8KLX07Ci0KLXN0cnVjdCB0dW5lcl9kdHZfc2lnX3N0YXRfcyB7Ci0JdWludDMyX3Qgc2lnX3ByZXNlbnQ7ICAgLyogIEJvb2xlYW4qLwotCXVpbnQzMl90IHNpZ19sb2NrZWQ7CS8qICBCb29sZWFuICovCi0JdWludDMyX3Qgc2lnX2xvY2tfYnVzeTsgLyogIEJvb2xlYW4JKENhbiB0aGlzIHRpbWUtb3V0PykgKi8KLQl1aW50MzJfdCBzaWdfc3RyZW5ndGg7ICAvKiAgbWlsbGlEYiovCi19OwotCi1zdHJ1Y3QgdHVuZXJfZm1fc2lnX3N0YXRfcyB7Ci0JdWludDMyX3Qgc2lnX3ByZXNlbnQ7CS8qIEJvb2xlYW4qLwotCXVpbnQzMl90IHNpZ19sb2NrZWQ7CSAvKiBCb29sZWFuICovCi0JdWludDMyX3Qgc2lnX2xvY2tfYnVzeTsgIC8qIEJvb2xlYW4gKi8KLQl1aW50MzJfdCBzaWdfc3RlcmVvX21vbm87LyogVEJEKi8KLQl1aW50MzJfdCBzaWdfc3RyZW5ndGg7ICAgLyogbWlsbGlEYiovCi19OwotCi1lbnVtIF90YWdfdGxnX3R1bmVfc3J2X2NtZCB7Ci0JVExHX1RVTkVfUExBWV9TVkNfU1RBUlQgPSAxLAotCVRMR19UVU5FX1BMQVlfU1ZDX1NUT1AKLX07Ci0KLWVudW0gIF90YWdfdHVuZV9hdHZfYXVkaW9fbW9kZV9jYXBzIHsKLQlUTEdfVFVORV9UVkFVRElPX01PREVfTU9OTwk9IDB4MDAwMDAwMDEsCi0JVExHX1RVTkVfVFZBVURJT19NT0RFX1NURVJFTwk9IDB4MDAwMDAwMDIsCi0JVExHX1RVTkVfVFZBVURJT19NT0RFX0xBTkdfQQk9IDB4MDAwMDAwMTAsLyogUHJpbWFyeSBsYW5ndWFnZSovCi0JVExHX1RVTkVfVFZBVURJT19NT0RFX0xBTkdfQgk9IDB4MDAwMDAwMjAsLyogMm5kIGF2YWlsIGxhbmd1YWdlKi8KLQlUTEdfVFVORV9UVkFVRElPX01PREVfTEFOR19DCT0gMHgwMDAwMDA0MAotfTsKLQotCi1lbnVtICAgX3RhZ190dW5lcl9hdHZfYXVkaW9fcmF0ZXMgewotCUFUVl9BVURJT19SQVRFX05PTkUJPSAweDAwLC8qIEF1ZGlvIG5vdCBzdXBwb3J0ZWQqLwotCUFUVl9BVURJT19SQVRFXzMySwk9IDB4MDEsLyogQXVkaW8gcmF0ZSA9IDMyIEtIeiovCi0JQVRWX0FVRElPX1JBVEVfNDhLCT0gMHgwMiwgLyogQXVkaW8gcmF0ZSA9IDQ4IEtIeiovCi0JQVRWX0FVRElPX1JBVEVfMzFfMjVLCT0gMHgwNCAvKiBBdWRpbyByYXRlID0gMzEuMjVLSHogKi8KLX07Ci0KLWVudW0gIF90YWdfdHVuZV9hdHZfdmlkX3Jlc19jYXBzIHsKLQlUTEdfVFVORV9WSURfUkVTX05PTkUJPSAweDAwMDAwMDAwLAotCVRMR19UVU5FX1ZJRF9SRVNfNzIwCT0gMHgwMDAwMDAwMSwKLQlUTEdfVFVORV9WSURfUkVTXzcwNAk9IDB4MDAwMDAwMDIsCi0JVExHX1RVTkVfVklEX1JFU18zNjAJPSAweDAwMDAwMDA0Ci19OwotCi1lbnVtIF90YWdfdHVuZXJfYW5hbG9nX3ZpZGVvX2Zvcm1hdCB7Ci0JVExHX1RVTkVSX1ZJRF9GT1JNQVRfWVVWCT0gMHgwMDAwMDAwMSwKLQlUTEdfVFVORVJfVklEX0ZPUk1BVF9ZQ1JDQgk9IDB4MDAwMDAwMDIsCi0JVExHX1RVTkVSX1ZJRF9GT1JNQVRfUkdCXzU2NQk9IDB4MDAwMDAwMDQsCi19OwotCi1lbnVtICB0bGdfZXh0X2F1ZGlvX3N1cHBvcnQgewotCVRMR19FWFRfQVVESU9fTk9ORSAJPSAweDAwLC8qICBObyBleHRlcm5hbCBhdWRpbyBpbnB1dCBzdXBwb3J0ZWQgKi8KLQlUTEdfRVhUX0FVRElPX0xSCT0gMHgwMS8qICBMUiBleHRlcm5hbCBhdWRpbyBpbnB1dHMgc3VwcG9ydGVkKi8KLX07Ci0KLWVudW0gewotCVRMR19NT0RFX05PTkUJCQk9IDB4MDAsIC8qIE5vIE1vZGUgc3BlY2lmaWVkKi8KLQlUTEdfTU9ERV9BTkFMT0dfVFYJCT0gMHgwMSwgLyogQW5hbG9nIFRlbGV2aXNpb24gbW9kZSovCi0JVExHX01PREVfQU5BTE9HX1RWX1VOQ09NUAk9IDB4MDEsIC8qIEFuYWxvZyBUZWxldmlzaW9uIG1vZGUqLwotCVRMR19NT0RFX0FOQUxPR19UVl9DT01QICAJPSAweDAyLCAvKiBBbmFsb2cgVFYgbW9kZSAoY29tcHJlc3NlZCkqLwotCVRMR19NT0RFX0ZNX1JBRElPCQk9IDB4MDQsIC8qIEZNIFJhZGlvIG1vZGUqLwotCVRMR19NT0RFX0RWQl9UCQkJPSAweDA4LCAvKiBEaWdpdGFsIFRWIChEVkItVCkqLwotfTsKLQotZW51bSAgdGxnX3NpZ25hbF9zb3VyY2VzX3QgewotCVRMR19TSUdfU1JDX05PTkUJPSAweDAwLC8qIFNpZ25hbCBzb3VyY2Ugbm90IHNwZWNpZmllZCAqLwotCVRMR19TSUdfU1JDX0FOVEVOTkEJPSAweDAxLC8qIFNpZ25hbCBzcmMgaXM6IEFudGVubmEgKi8KLQlUTEdfU0lHX1NSQ19DQUJMRQk9IDB4MDIsLyogU2lnbmFsIHNyYyBpczogQ29heCBDYWJsZSovCi0JVExHX1NJR19TUkNfU1ZJREVPCT0gMHgwNCwvKiBTaWduYWwgc3JjIGlzOiBTX1ZJREVPICAgKi8KLQlUTEdfU0lHX1NSQ19DT01QT1NJVEUgICA9IDB4MDggLyogU2lnbmFsIHNyYyBpczogQ29tcG9zaXRlIFZpZGVvICovCi19OwotCi1lbnVtIHR1bmVyX2FuYWxvZ192aWRlb19zdGFuZGFyZCB7Ci0JVExHX1RVTkVfVlNURF9OT05FCT0gMHgwMDAwMDAwMCwKLQlUTEdfVFVORV9WU1REX05UU0NfTQk9IDB4MDAwMDAwMDEsCi0JVExHX1RVTkVfVlNURF9OVFNDX01fSgk9IDB4MDAwMDAwMDIsLyogSmFwYW4gICAqLwotCVRMR19UVU5FX1ZTVERfUEFMX0IJPSAweDAwMDAwMDEwLAotCVRMR19UVU5FX1ZTVERfUEFMX0QJPSAweDAwMDAwMDIwLAotCVRMR19UVU5FX1ZTVERfUEFMX0cJPSAweDAwMDAwMDQwLAotCVRMR19UVU5FX1ZTVERfUEFMX0gJPSAweDAwMDAwMDgwLAotCVRMR19UVU5FX1ZTVERfUEFMX0kJPSAweDAwMDAwMTAwLAotCVRMR19UVU5FX1ZTVERfUEFMX00JPSAweDAwMDAwMjAwLAotCVRMR19UVU5FX1ZTVERfUEFMX04JPSAweDAwMDAwNDAwLAotCVRMR19UVU5FX1ZTVERfU0VDQU1fQgk9IDB4MDAwMDEwMDAsCi0JVExHX1RVTkVfVlNURF9TRUNBTV9ECT0gMHgwMDAwMjAwMCwKLQlUTEdfVFVORV9WU1REX1NFQ0FNX0cJPSAweDAwMDA0MDAwLAotCVRMR19UVU5FX1ZTVERfU0VDQU1fSAk9IDB4MDAwMDgwMDAsCi0JVExHX1RVTkVfVlNURF9TRUNBTV9LCT0gMHgwMDAxMDAwMCwKLQlUTEdfVFVORV9WU1REX1NFQ0FNX0sxCT0gMHgwMDAyMDAwMCwKLQlUTEdfVFVORV9WU1REX1NFQ0FNX0wJPSAweDAwMDQwMDAwLAotCVRMR19UVU5FX1ZTVERfU0VDQU1fTDEJPSAweDAwMDgwMDAwLAotCVRMR19UVU5FX1ZTVERfUEFMX05fQ09NQk8gPSAweDAwMTAwMDAwCi19OwotCi1lbnVtIHRsZ19tb2RlX2NhcHMgewotCVRMR19NT0RFX0NBUFNfTk9ORQkJPSAweDAwLCAgLyogIE5vIE1vZGUgc3BlY2lmaWVkCSovCi0JVExHX01PREVfQ0FQU19BTkFMT0dfVFZfVU5DT01QICA9IDB4MDEsICAvKiAgQW5hbG9nIFRWIG1vZGUgICAgICovCi0JVExHX01PREVfQ0FQU19BTkFMT0dfVFZfQ09NUAk9IDB4MDIsICAvKiAgQW5hbG9nIFRWIChjb21wcmVzc2VkKSovCi0JVExHX01PREVfQ0FQU19GTV9SQURJTwkJPSAweDA0LCAgLyogIEZNIFJhZGlvIG1vZGUJKi8KLQlUTEdfTU9ERV9DQVBTX0RWQl9UCQk9IDB4MDgsICAvKiAgRGlnaXRhbCBUViAoRFZCLVQpCSovCi19OwotCi1lbnVtIHBvc2VpZG9uX3ZlbmRvcl9jbWRzIHsKLQlMQVNUX0NNRF9TVEFUCQk9IDB4MDAsCi0JR0VUX0NISVBfSUQJCT0gMHgwMSwKLQlHRVRfRldfSUQJCT0gMHgwMiwKLQlQUk9EVUNUX0NBUFMJCT0gMHgwMywKLQotCVRVTkVfTU9ERV9DQVBfQVRWCT0gMHgxMCwKLQlUVU5FX01PREVfQ0FQX0FUVkNPTVAJPSAwWDEwLAotCVRVTkVfTU9ERV9DQVBfRFZCVAk9IDB4MTAsCi0JVFVORV9NT0RFX0NBUF9GTQk9IDB4MTAsCi0JVFVORV9NT0RFX1NFTEVDVAk9IDB4MTEsCi0JVFVORV9GUkVRX1NFTEVDVAk9IDB4MTIsCi0JU0dOTF9TUkNfU0VMCQk9IDB4MTMsCi0KLQlWSURFT19TVERfU0VMCQk9IDB4MTQsCi0JVklERU9fU1RSRUFNX0ZNVF9TRUwJPSAweDE1LAotCVZJREVPX1JPU09MVV9BVkFJTAk9IDB4MTYsCi0JVklERU9fUk9TT0xVX1NFTAk9IDB4MTcsCi0JVklERU9fQ09OVF9QUk9URUNUCT0gMHgyMCwKLQotCVZDUl9USU1JTkdfTU9EU0VMCT0gMHgyMSwKLQlFWFRfQVVESU9fQ0FQCQk9IDB4MjIsCi0JRVhUX0FVRElPX1NFTAkJPSAweDIzLAotCVRFU1RfUEFUVEVSTl9TRUwJPSAweDI0LAotCVZCSV9EQVRBX1NFTAkJPSAweDI1LAotCUFVRElPX1NBTVBMRV9SQVRFX0NBUCAgID0gMHgyOCwKLQlBVURJT19TQU1QTEVfUkFURV9TRUwgICA9IDB4MjksCi0JVFVORVJfQVVEX01PREUJCT0gMHgyYSwKLQlUVU5FUl9BVURfTU9ERV9BVkFJTAk9IDB4MmIsCi0JVFVORVJfQVVEX0FOQV9TVEQJPSAweDJjLAotCVRVTkVSX0NVU1RPTV9QQVJBTUVURVIJPSAweDJmLAotCi0JRFZCVF9UVU5FX01PREVfU0VMCT0gMHgzMCwKLQlEVkJUX0JBTkRXX0NBUAkJPSAweDMxLAotCURWQlRfQkFORFdfU0VMCQk9IDB4MzIsCi0JRFZCVF9HVUFSRF9JTlRFUlZfQ0FQICAgPSAweDMzLAotCURWQlRfR1VBUkRfSU5URVJWX1NFTCAgID0gMHgzNCwKLQlEVkJUX01PRFVMQVRJT05fQ0FQCT0gMHgzNSwKLQlEVkJUX01PRFVMQVRJT05fU0VMCT0gMHgzNiwKLQlEVkJUX0lOTkVSX0ZFQ19SQVRFX0NBUCA9IDB4MzcsCi0JRFZCVF9JTk5FUl9GRUNfUkFURV9TRUwgPSAweDM4LAotCURWQlRfVFJBTlNfTU9ERV9DQVAJPSAweDM5LAotCURWQlRfVFJBTlNfTU9ERV9TRUwJPSAweDNhLAotCURWQlRfU0VBUkNIX1JBTkcJPSAweDNjLAotCi0JVFVORVJfU0VUVVBfQU5BTE9HCT0gMHg0MCwKLQlUVU5FUl9TRVRVUF9ESUdJVEFMCT0gMHg0MSwKLQlUVU5FUl9TRVRVUF9GTV9SQURJTwk9IDB4NDIsCi0JVEFLRV9SRVFVRVNUCQk9IDB4NDMsIC8qIFRha2UgZWZmZWN0IG9mIHRoZSBjb21tYW5kICovCi0JUExBWV9TRVJWSUNFCQk9IDB4NDQsIC8qIFBsYXkgc3RhcnQgb3IgUGxheSBzdG9wICovCi0JVFVORVJfU1RBVFVTCQk9IDB4NDUsCi0JVFVORV9QUk9QX0RWQlQJCT0gMHg0NiwKLQlFUlJfUkFURV9TVEFUUwkJPSAweDQ3LAotCVRVTkVSX0JFUl9SQVRFCQk9IDB4NDgsCi0KLQlTQ0FOX0NBUFMJCT0gMHg1MCwKLQlTQ0FOX1NFVFVQCQk9IDB4NTEsCi0JU0NBTl9TRVJWSUNFCQk9IDB4NTIsCi0JU0NBTl9TVEFUUwkJPSAweDUzLAotCi0JUElEX1NFVAkJCT0gMHg1OCwKLQlQSURfVU5TRVQJCT0gMHg1OSwKLQlQSURfTElTVAkJPSAweDVhLAotCi0JSVJEX0NBUAkJCT0gMHg2MCwKLQlJUkRfTU9ERV9TRUwJCT0gMHg2MSwKLQlJUkRfU0VUVVAJCT0gMHg2MiwKLQotCVBUTV9NT0RFX0NBUAkJPSAweDcwLAotCVBUTV9NT0RFX1NFTAkJPSAweDcxLAotCVBUTV9TRVJWSUNFCQk9IDB4NzIsCi0JVFVORVJfUkVHX1NDUklQVAk9IDB4NzMsCi0JQ01EX0NISVBfUlNUCQk9IDB4NzQsCi19OwotCi1lbnVtIHRsZ19idyB7Ci0JVExHX0JXXzUgPSA1LAotCVRMR19CV182ID0gNiwKLQlUTEdfQldfNyA9IDcsCi0JVExHX0JXXzggPSA4LAotCVRMR19CV18xMiA9IDEyLAotCVRMR19CV18xNSA9IDE1Ci19OwotCi1zdHJ1Y3QgY21kX2Zpcm13YXJlX3ZlcnNfcyB7Ci0JdWludDhfdAkgZndfcmV2X21ham9yOwotCXVpbnQ4X3QJIGZ3X3Jldl9taW5vcjsKLQl1aW50MTZfdCBmd19wYXRjaDsKLX07Ci0jZW5kaWYgLyogVkVORE9SX0NNRF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3Zpbm8vS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS92aW5vL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNzAwZGEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3Zpbm8vS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLWNvbmZpZyBWSURFT19WSU5PCi0JdHJpc3RhdGUgIlNHSSBWaW5vIFZpZGVvIEZvciBMaW51eCAoRGVwcmVjYXRlZCkiCi0JZGVwZW5kcyBvbiBJMkMgJiYgU0dJX0lQMjIgJiYgVklERU9fVjRMMgotCXNlbGVjdCBWSURFT19TQUE3MTkxIGlmIE1FRElBX1NVQkRSVl9BVVRPU0VMRUNUCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBidWlsZCBpbiBzdXBwb3J0IGZvciB0aGUgVmlubyB2aWRlbyBpbnB1dCBzeXN0ZW0gZm91bmQKLQkgIG9uIFNHSSBJbmR5IG1hY2hpbmVzLgotCi0JICBUaGlzIGRyaXZlciBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbi4gSWYgeW91IGhhdmUKLQkgIGhhcmR3YXJlIGZvciB0aGlzIGFuZCB5b3Ugd2FudCB0byB3b3JrIG9uIHRoaXMgZHJpdmVyLCB0aGVuIGNvbnRhY3QKLQkgIHRoZSBsaW51eC1tZWRpYSBtYWlsaW5nbGlzdC4KLQotY29uZmlnIFZJREVPX1NBQTcxOTEKLQl0cmlzdGF0ZSAiUGhpbGlwcyBTQUE3MTkxIHZpZGVvIGRlY29kZXIgKERlcHJlY2F0ZWQpIgotCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKLQktLS1oZWxwLS0tCi0JICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTkxIHZpZGVvIGRlY29kZXIuCi0KLQkgIFRoaXMgZHJpdmVyIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uLiBJZiB5b3UgaGF2ZQotCSAgaGFyZHdhcmUgZm9yIHRoaXMgYW5kIHlvdSB3YW50IHRvIHdvcmsgb24gdGhpcyBkcml2ZXIsIHRoZW4gY29udGFjdAotCSAgdGhlIGxpbnV4LW1lZGlhIG1haWxpbmdsaXN0LgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTkxLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3Zpbm8vTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdmluby9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE0YzI1MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdmluby9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotb2JqLSQoQ09ORklHX1ZJREVPX1ZJTk8pICs9IGluZHljYW0ubwotb2JqLSQoQ09ORklHX1ZJREVPX1ZJTk8pICs9IHZpbm8ubwotb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxOTEpICs9IHNhYTcxOTEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3Zpbm8vaW5keWNhbS5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3Zpbm8vaW5keWNhbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWQxOTJiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS92aW5vL2luZHljYW0uYworKysgL2Rldi9udWxsCkBAIC0xLDM3OCArMCwwIEBACi0vKgotICogIGluZHljYW0uYyAtIFNpbGljb24gR3JhcGhpY3MgSW5keUNhbSBkaWdpdGFsIGNhbWVyYSBkcml2ZXIKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzIExhZGlzbGF2IE1pY2hsIDxsYWRpc0BsaW51eC1taXBzLm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSBNaWthZWwgTm91c2lhaW5lbiA8dG1ub3VzaWFAY2MuaHV0LmZpPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0vKiBJbmR5Q2FtIGRlY29kZXMgc3RyZWFtIG9mIHBob3RvbnMgaW50byBkaWdpdGFsIGltYWdlIHJlcHJlc2VudGF0aW9uIDstKSAqLwotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Ci0KLSNpbmNsdWRlICJpbmR5Y2FtLmgiCi0KLSNkZWZpbmUgSU5EWUNBTV9NT0RVTEVfVkVSU0lPTiAiMC4wLjUiCi0KLU1PRFVMRV9ERVNDUklQVElPTigiU0dJIEluZHlDYW0gZHJpdmVyIik7Ci1NT0RVTEVfVkVSU0lPTihJTkRZQ0FNX01PRFVMRV9WRVJTSU9OKTsKLU1PRFVMRV9BVVRIT1IoIk1pa2FlbCBOb3VzaWFpbmVuIDx0bW5vdXNpYUBjYy5odXQuZmk+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLQotLy8gI2RlZmluZSBJTkRZQ0FNX0RFQlVHCi0KLSNpZmRlZiBJTkRZQ0FNX0RFQlVHCi0jZGVmaW5lIGRwcmludGsoeC4uLikgcHJpbnRrKCJJbmR5Q2FtOiAiIHgpOwotI2RlZmluZSBpbmR5Y2FtX3JlZ2R1bXAoY2xpZW50KSBpbmR5Y2FtX3JlZ2R1bXBfZGVidWcoY2xpZW50KQotI2Vsc2UKLSNkZWZpbmUgZHByaW50ayh4Li4uKQotI2RlZmluZSBpbmR5Y2FtX3JlZ2R1bXAoY2xpZW50KQotI2VuZGlmCi0KLXN0cnVjdCBpbmR5Y2FtIHsKLQlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7Ci0JdTggdmVyc2lvbjsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGluZHljYW0gKnRvX2luZHljYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgaW5keWNhbSwgc2QpOwotfQotCi1zdGF0aWMgY29uc3QgdTggaW5pdHNlcVtdID0gewotCUlORFlDQU1fQ09OVFJPTF9BR0NFTkEsCQkvKiBJTkRZQ0FNX0NPTlRST0wgKi8KLQlJTkRZQ0FNX1NIVVRURVJfNjAsCQkvKiBJTkRZQ0FNX1NIVVRURVIgKi8KLQlJTkRZQ0FNX0dBSU5fREVGQVVMVCwJCS8qIElORFlDQU1fR0FJTiAqLwotCTB4MDAsCQkJCS8qIElORFlDQU1fQlJJR0hUTkVTUyAocmVhZC1vbmx5KSAqLwotCUlORFlDQU1fUkVEX0JBTEFOQ0VfREVGQVVMVCwJLyogSU5EWUNBTV9SRURfQkFMQU5DRSAqLwotCUlORFlDQU1fQkxVRV9CQUxBTkNFX0RFRkFVTFQsCS8qIElORFlDQU1fQkxVRV9CQUxBTkNFICovCi0JSU5EWUNBTV9SRURfU0FUVVJBVElPTl9ERUZBVUxULAkvKiBJTkRZQ0FNX1JFRF9TQVRVUkFUSU9OICovCi0JSU5EWUNBTV9CTFVFX1NBVFVSQVRJT05fREVGQVVMVCwvKiBJTkRZQ0FNX0JMVUVfU0FUVVJBVElPTiAqLwotfTsKLQotLyogSW5keUNhbSByZWdpc3RlciBoYW5kbGluZyAqLwotCi1zdGF0aWMgaW50IGluZHljYW1fcmVhZF9yZWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCAqdmFsdWUpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwotCWludCByZXQ7Ci0KLQlpZiAocmVnID09IElORFlDQU1fUkVHX1JFU0VUKSB7Ci0JCWRwcmludGsoImluZHljYW1fcmVhZF9yZWcoKTogIgotCQkJInNraXBwaW5nIHdyaXRlLW9ubHkgcmVnaXN0ZXIgJWRcbiIsIHJlZyk7Ci0JCSp2YWx1ZSA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7Ci0KLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkluZHlDYW06IGluZHljYW1fcmVhZF9yZWcoKTogcmVhZCBmYWlsZWQsICIKLQkJICAgICAgICJyZWdpc3RlciA9IDB4JTAyeFxuIiwgcmVnKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkqdmFsdWUgPSAodTgpcmV0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW5keWNhbV93cml0ZV9yZWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0JaW50IGVycjsKLQotCWlmIChyZWcgPT0gSU5EWUNBTV9SRUdfQlJJR0hUTkVTUyB8fCByZWcgPT0gSU5EWUNBTV9SRUdfVkVSU0lPTikgewotCQlkcHJpbnRrKCJpbmR5Y2FtX3dyaXRlX3JlZygpOiAiCi0JCQkic2tpcHBpbmcgcmVhZC1vbmx5IHJlZ2lzdGVyICVkXG4iLCByZWcpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlkcHJpbnRrKCJXcml0aW5nIFJlZyAlZCA9IDB4JTAyeFxuIiwgcmVnLCB2YWx1ZSk7Ci0JZXJyID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwotCi0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIkluZHlDYW06IGluZHljYW1fd3JpdGVfcmVnKCk6IHdyaXRlIGZhaWxlZCwgIgotCQkgICAgICAgInJlZ2lzdGVyID0gMHglMDJ4LCB2YWx1ZSA9IDB4JTAyeFxuIiwgcmVnLCB2YWx1ZSk7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgaW5keWNhbV93cml0ZV9ibG9jayhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsCi0JCQkgICAgICAgdTggbGVuZ3RoLCB1OCAqZGF0YSkKLXsKLQlpbnQgaSwgZXJyOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCWVyciA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCByZWcgKyBpLCBkYXRhW2ldKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEhlbHBlciBmdW5jdGlvbnMgKi8KLQotI2lmZGVmIElORFlDQU1fREVCVUcKLXN0YXRpYyB2b2lkIGluZHljYW1fcmVnZHVtcF9kZWJ1ZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQotewotCWludCBpOwotCXU4IHZhbDsKLQotCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKLQkJaW5keWNhbV9yZWFkX3JlZyhzZCwgaSwgJnZhbCk7Ci0JCWRwcmludGsoIlJlZyAlZCA9IDB4JTAyeFxuIiwgaSwgdmFsKTsKLQl9Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBpbmR5Y2FtX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQotewotCXN0cnVjdCBpbmR5Y2FtICpjYW1lcmEgPSB0b19pbmR5Y2FtKHNkKTsKLQl1OCByZWc7Ci0JaW50IHJldCA9IDA7Ci0KLQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKLQljYXNlIFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRToKLQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwgSU5EWUNBTV9SRUdfQ09OVFJPTCwgJnJlZyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gLUVJTzsKLQkJaWYgKGN0cmwtPmlkID09IFY0TDJfQ0lEX0FVVE9HQUlOKQotCQkJY3RybC0+dmFsdWUgPSAocmVnICYgSU5EWUNBTV9DT05UUk9MX0FHQ0VOQSkKLQkJCQk/IDEgOiAwOwotCQllbHNlCi0JCQljdHJsLT52YWx1ZSA9IChyZWcgJiBJTkRZQ0FNX0NPTlRST0xfQVdCQ1RMKQotCQkJCT8gMSA6IDA7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6Ci0JCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX1NIVVRURVIsICZyZWcpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIC1FSU87Ci0JCWN0cmwtPnZhbHVlID0gKChzMzIpcmVnID09IDB4MDApID8gMHhmZiA6ICgoczMyKXJlZyAtIDEpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0dBSU46Ci0JCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX0dBSU4sICZyZWcpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIC1FSU87Ci0JCWN0cmwtPnZhbHVlID0gKHMzMilyZWc7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6Ci0JCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX1JFRF9CQUxBTkNFLCAmcmVnKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiAtRUlPOwotCQljdHJsLT52YWx1ZSA9IChzMzIpcmVnOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKLQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwgSU5EWUNBTV9SRUdfQkxVRV9CQUxBTkNFLCAmcmVnKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiAtRUlPOwotCQljdHJsLT52YWx1ZSA9IChzMzIpcmVnOwotCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9SRURfU0FUVVJBVElPTjoKLQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwKLQkJCQkgICAgICAgSU5EWUNBTV9SRUdfUkVEX1NBVFVSQVRJT04sICZyZWcpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIC1FSU87Ci0JCWN0cmwtPnZhbHVlID0gKHMzMilyZWc7Ci0JCWJyZWFrOwotCWNhc2UgSU5EWUNBTV9DT05UUk9MX0JMVUVfU0FUVVJBVElPTjoKLQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwKLQkJCQkgICAgICAgSU5EWUNBTV9SRUdfQkxVRV9TQVRVUkFUSU9OLCAmcmVnKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiAtRUlPOwotCQljdHJsLT52YWx1ZSA9IChzMzIpcmVnOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0dBTU1BOgotCQlpZiAoY2FtZXJhLT52ZXJzaW9uID09IENBTUVSQV9WRVJTSU9OX01PT1NFKSB7Ci0JCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKHNkLAotCQkJCQkgICAgICAgSU5EWUNBTV9SRUdfR0FNTUEsICZyZWcpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCWN0cmwtPnZhbHVlID0gKHMzMilyZWc7Ci0JCX0gZWxzZSB7Ci0JCQljdHJsLT52YWx1ZSA9IElORFlDQU1fR0FNTUFfREVGQVVMVDsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaW5keWNhbV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKLXsKLQlzdHJ1Y3QgaW5keWNhbSAqY2FtZXJhID0gdG9faW5keWNhbShzZCk7Ci0JdTggcmVnOwotCWludCByZXQgPSAwOwotCi0Jc3dpdGNoIChjdHJsLT5pZCkgewotCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46Ci0JY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6Ci0JCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX0NPTlRST0wsICZyZWcpOwotCQlpZiAocmV0KQotCQkJYnJlYWs7Ci0KLQkJaWYgKGN0cmwtPmlkID09IFY0TDJfQ0lEX0FVVE9HQUlOKSB7Ci0JCQlpZiAoY3RybC0+dmFsdWUpCi0JCQkJcmVnIHw9IElORFlDQU1fQ09OVFJPTF9BR0NFTkE7Ci0JCQllbHNlCi0JCQkJcmVnICY9IH5JTkRZQ0FNX0NPTlRST0xfQUdDRU5BOwotCQl9IGVsc2UgewotCQkJaWYgKGN0cmwtPnZhbHVlKQotCQkJCXJlZyB8PSBJTkRZQ0FNX0NPTlRST0xfQVdCQ1RMOwotCQkJZWxzZQotCQkJCXJlZyAmPSB+SU5EWUNBTV9DT05UUk9MX0FXQkNUTDsKLQkJfQotCi0JCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19DT05UUk9MLCByZWcpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgotCQlyZWcgPSAoY3RybC0+dmFsdWUgPT0gMHhmZikgPyAweDAwIDogKGN0cmwtPnZhbHVlICsgMSk7Ci0JCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19TSFVUVEVSLCByZWcpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0dBSU46Ci0JCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19HQUlOLCBjdHJsLT52YWx1ZSk7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6Ci0JCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19SRURfQkFMQU5DRSwKLQkJCQkJY3RybC0+dmFsdWUpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX0JMVUVfQkFMQU5DRSwKLQkJCQkJY3RybC0+dmFsdWUpOwotCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9SRURfU0FUVVJBVElPTjoKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX1JFRF9TQVRVUkFUSU9OLAotCQkJCQljdHJsLT52YWx1ZSk7Ci0JCWJyZWFrOwotCWNhc2UgSU5EWUNBTV9DT05UUk9MX0JMVUVfU0FUVVJBVElPTjoKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX0JMVUVfU0FUVVJBVElPTiwKLQkJCQkJY3RybC0+dmFsdWUpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0dBTU1BOgotCQlpZiAoY2FtZXJhLT52ZXJzaW9uID09IENBTUVSQV9WRVJTSU9OX01PT1NFKSB7Ci0JCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgSU5EWUNBTV9SRUdfR0FNTUEsCi0JCQkJCQljdHJsLT52YWx1ZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBJMkMtaW50ZXJmYWNlICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgaW5keWNhbV9jb3JlX29wcyA9IHsKLQkuZ19jdHJsID0gaW5keWNhbV9nX2N0cmwsCi0JLnNfY3RybCA9IGluZHljYW1fc19jdHJsLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgaW5keWNhbV9vcHMgPSB7Ci0JLmNvcmUgPSAmaW5keWNhbV9jb3JlX29wcywKLX07Ci0KLXN0YXRpYyBpbnQgaW5keWNhbV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IGluZHljYW0gKmNhbWVyYTsKLQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwotCi0JdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKLQkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwotCi0JY2FtZXJhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGluZHljYW0pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNhbWVyYSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzZCA9ICZjYW1lcmEtPnNkOwotCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZpbmR5Y2FtX29wcyk7Ci0KLQljYW1lcmEtPnZlcnNpb24gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJICAgSU5EWUNBTV9SRUdfVkVSU0lPTik7Ci0JaWYgKGNhbWVyYS0+dmVyc2lvbiAhPSBDQU1FUkFfVkVSU0lPTl9JTkRZICYmCi0JICAgIGNhbWVyYS0+dmVyc2lvbiAhPSBDQU1FUkFfVkVSU0lPTl9NT09TRSkgewotCQlrZnJlZShjYW1lcmEpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJJbmR5Q2FtIHYlZC4lZCBkZXRlY3RlZFxuIiwKLQkgICAgICAgSU5EWUNBTV9WRVJTSU9OX01BSk9SKGNhbWVyYS0+dmVyc2lvbiksCi0JICAgICAgIElORFlDQU1fVkVSU0lPTl9NSU5PUihjYW1lcmEtPnZlcnNpb24pKTsKLQotCWluZHljYW1fcmVnZHVtcChzZCk7Ci0KLQkvLyBpbml0aWFsaXplCi0JZXJyID0gaW5keWNhbV93cml0ZV9ibG9jayhzZCwgMCwgc2l6ZW9mKGluaXRzZXEpLCAodTggKikmaW5pdHNlcSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIkluZHlDYW0gaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQkJa2ZyZWUoY2FtZXJhKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaW5keWNhbV9yZWdkdW1wKHNkKTsKLQotCS8vIHdoaXRlIGJhbGFuY2UKLQllcnIgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgSU5EWUNBTV9SRUdfQ09OVFJPTCwKLQkJCSAgSU5EWUNBTV9DT05UUk9MX0FHQ0VOQSB8IElORFlDQU1fQ09OVFJPTF9BV0JDVEwpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJJbmR5Q2FtOiBXaGl0ZSBiYWxhbmNpbmcgY2FtZXJhIGZhaWxlZFxuIik7Ci0JCWtmcmVlKGNhbWVyYSk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCWluZHljYW1fcmVnZHVtcChzZCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJJbmR5Q2FtIGluaXRpYWxpemVkXG4iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGluZHljYW1fcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOwotCWtmcmVlKHRvX2luZHljYW0oc2QpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGluZHljYW1faWRbXSA9IHsKLQl7ICJpbmR5Y2FtIiwgMCB9LAotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBpbmR5Y2FtX2lkKTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGluZHljYW1fZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCQkubmFtZQk9ICJpbmR5Y2FtIiwKLQl9LAotCS5wcm9iZQkJPSBpbmR5Y2FtX3Byb2JlLAotCS5yZW1vdmUJCT0gaW5keWNhbV9yZW1vdmUsCi0JLmlkX3RhYmxlCT0gaW5keWNhbV9pZCwKLX07Ci0KLW1vZHVsZV9pMmNfZHJpdmVyKGluZHljYW1fZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS92aW5vL2luZHljYW0uaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS92aW5vL2luZHljYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgxZjIxYy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdmluby9pbmR5Y2FtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MyArMCwwIEBACi0vKgotICogIGluZHljYW0uaCAtIFNpbGljb24gR3JhcGhpY3MgSW5keUNhbSBkaWdpdGFsIGNhbWVyYSBkcml2ZXIKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzIExhZGlzbGF2IE1pY2hsIDxsYWRpc0BsaW51eC1taXBzLm9yZz4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNSBNaWthZWwgTm91c2lhaW5lbiA8dG1ub3VzaWFAY2MuaHV0LmZpPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2lmbmRlZiBfSU5EWUNBTV9IXwotI2RlZmluZSBfSU5EWUNBTV9IXwotCi0vKiBJMkMgYWRkcmVzcyBmb3IgdGhlIEd1aW5uZXNzIENhbWVyYSAqLwotI2RlZmluZSBJTkRZQ0FNX0FERFIJCQkweDU2Ci0KLS8qIENhbWVyYSB2ZXJzaW9uICovCi0jZGVmaW5lIENBTUVSQV9WRVJTSU9OX0lORFkJCTB4MTAJLyogdjEuMCAqLwotI2RlZmluZSBDQU1FUkFfVkVSU0lPTl9NT09TRQkJMHgxMgkvKiB2MS4yICovCi0jZGVmaW5lIElORFlDQU1fVkVSU0lPTl9NQUpPUih4KQkoKCh4KSAmIDB4ZjApID4+IDQpCi0jZGVmaW5lIElORFlDQU1fVkVSU0lPTl9NSU5PUih4KQkoKHgpICYgMHgwZikKLQotLyogUmVnaXN0ZXIgYnVzIGFkZHJlc3NlcyAqLwotI2RlZmluZSBJTkRZQ0FNX1JFR19DT05UUk9MCQkweDAwCi0jZGVmaW5lIElORFlDQU1fUkVHX1NIVVRURVIJCTB4MDEKLSNkZWZpbmUgSU5EWUNBTV9SRUdfR0FJTgkJMHgwMgotI2RlZmluZSBJTkRZQ0FNX1JFR19CUklHSFRORVNTCQkweDAzIC8qIHJlYWQtb25seSAqLwotI2RlZmluZSBJTkRZQ0FNX1JFR19SRURfQkFMQU5DRQkJMHgwNAotI2RlZmluZSBJTkRZQ0FNX1JFR19CTFVFX0JBTEFOQ0UJMHgwNQotI2RlZmluZSBJTkRZQ0FNX1JFR19SRURfU0FUVVJBVElPTgkweDA2Ci0jZGVmaW5lIElORFlDQU1fUkVHX0JMVUVfU0FUVVJBVElPTgkweDA3Ci0jZGVmaW5lIElORFlDQU1fUkVHX0dBTU1BCQkweDA4Ci0jZGVmaW5lIElORFlDQU1fUkVHX1ZFUlNJT04JCTB4MGUgLyogcmVhZC1vbmx5ICovCi0jZGVmaW5lIElORFlDQU1fUkVHX1JFU0VUCQkweDBmIC8qIHdyaXRlLW9ubHkgKi8KLQotI2RlZmluZSBJTkRZQ0FNX1JFR19MRUQJCQkweDQ2Ci0jZGVmaW5lIElORFlDQU1fUkVHX09SSUVOVEFUSU9OCQkweDQ3Ci0jZGVmaW5lIElORFlDQU1fUkVHX0JVVFRPTgkJMHg0OAotCi0vKiBGaWVsZCBkZWZpbml0aW9ucyBvZiByZWdpc3RlcnMgKi8KLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX0FHQ0VOQQkJKDE8PDApIC8qIGF1dG9tYXRpYyBnYWluIGNvbnRyb2wgKi8KLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX0FXQkNUTAkJKDE8PDEpIC8qIGF1dG9tYXRpYyB3aGl0ZSBiYWxhbmNlICovCi0JCQkJCQkvKiAyLTMgYXJlIHJlc2VydmVkICovCi0jZGVmaW5lIElORFlDQU1fQ09OVFJPTF9FVk5GTEQJCSgxPDw0KQkvKiByZWFkLW9ubHkgKi8KLQotI2RlZmluZSBJTkRZQ0FNX1NIVVRURVJfMTAwMDAJCTB4MDIJLyogMS8xMDAwMCBzZWNvbmQgKi8KLSNkZWZpbmUgSU5EWUNBTV9TSFVUVEVSXzQwMDAJCTB4MDQJLyogMS80MDAwIHNlY29uZCAqLwotI2RlZmluZSBJTkRZQ0FNX1NIVVRURVJfMjAwMAkJMHgwOAkvKiAxLzIwMDAgc2Vjb25kICovCi0jZGVmaW5lIElORFlDQU1fU0hVVFRFUl8xMDAwCQkweDEwCS8qIDEvMTAwMCBzZWNvbmQgKi8KLSNkZWZpbmUgSU5EWUNBTV9TSFVUVEVSXzUwMAkJMHgyMAkvKiAxLzUwMCBzZWNvbmQgKi8KLSNkZWZpbmUgSU5EWUNBTV9TSFVUVEVSXzI1MAkJMHgzZgkvKiAxLzI1MCBzZWNvbmQgKi8KLSNkZWZpbmUgSU5EWUNBTV9TSFVUVEVSXzEyNQkJMHg3ZQkvKiAxLzEyNSBzZWNvbmQgKi8KLSNkZWZpbmUgSU5EWUNBTV9TSFVUVEVSXzEwMAkJMHg5ZQkvKiAxLzEwMCBzZWNvbmQgKi8KLSNkZWZpbmUgSU5EWUNBTV9TSFVUVEVSXzYwCQkweDAwCS8qIDEvNjAgc2Vjb25kICovCi0KLSNkZWZpbmUgSU5EWUNBTV9MRURfQUNUSVZFCQkJMHgxMAotI2RlZmluZSBJTkRZQ0FNX0xFRF9JTkFDVElWRQkJCTB4MzAKLSNkZWZpbmUgSU5EWUNBTV9PUklFTlRBVElPTl9CT1RUT01fVE9fVE9QCTB4NDAKLSNkZWZpbmUgSU5EWUNBTV9CVVRUT05fUkVMRUFTRUQJCQkweDEwCi0KLS8qIFZhbHVlcyBmb3IgY29udHJvbHMgKi8KLSNkZWZpbmUgSU5EWUNBTV9TSFVUVEVSX01JTgkJMHgwMAotI2RlZmluZSBJTkRZQ0FNX1NIVVRURVJfTUFYCQkweGZmCi0jZGVmaW5lIElORFlDQU1fR0FJTl9NSU4gICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBJTkRZQ0FNX0dBSU5fTUFYICAgICAgICAgICAgICAgIDB4ZmYKLSNkZWZpbmUgSU5EWUNBTV9SRURfQkFMQU5DRV9NSU4JCTB4MDAKLSNkZWZpbmUgSU5EWUNBTV9SRURfQkFMQU5DRV9NQVgJCTB4ZmYKLSNkZWZpbmUgSU5EWUNBTV9CTFVFX0JBTEFOQ0VfTUlOICAgICAgICAweDAwCi0jZGVmaW5lIElORFlDQU1fQkxVRV9CQUxBTkNFX01BWCAgICAgICAgMHhmZgotI2RlZmluZSBJTkRZQ0FNX1JFRF9TQVRVUkFUSU9OX01JTiAgICAgIDB4MDAKLSNkZWZpbmUgSU5EWUNBTV9SRURfU0FUVVJBVElPTl9NQVggICAgICAweGZmCi0jZGVmaW5lIElORFlDQU1fQkxVRV9TQVRVUkFUSU9OX01JTgkweDAwCi0jZGVmaW5lIElORFlDQU1fQkxVRV9TQVRVUkFUSU9OX01BWAkweGZmCi0jZGVmaW5lIElORFlDQU1fR0FNTUFfTUlOCQkweDAwCi0jZGVmaW5lIElORFlDQU1fR0FNTUFfTUFYCQkweGZmCi0KLSNkZWZpbmUgSU5EWUNBTV9BR0NfREVGQVVMVAkJMQotI2RlZmluZSBJTkRZQ0FNX0FXQl9ERUZBVUxUCQkwCi0jZGVmaW5lIElORFlDQU1fU0hVVFRFUl9ERUZBVUxUCQkweGZmCi0jZGVmaW5lIElORFlDQU1fR0FJTl9ERUZBVUxUCQkweDgwCi0jZGVmaW5lIElORFlDQU1fUkVEX0JBTEFOQ0VfREVGQVVMVAkweDE4Ci0jZGVmaW5lIElORFlDQU1fQkxVRV9CQUxBTkNFX0RFRkFVTFQJMHhhNAotI2RlZmluZSBJTkRZQ0FNX1JFRF9TQVRVUkFUSU9OX0RFRkFVTFQJMHg4MAotI2RlZmluZSBJTkRZQ0FNX0JMVUVfU0FUVVJBVElPTl9ERUZBVUxUCTB4YzAKLSNkZWZpbmUgSU5EWUNBTV9HQU1NQV9ERUZBVUxUCQkweDgwCi0KLS8qIERyaXZlciBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgKi8KLQotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfUkVEX1NBVFVSQVRJT04JCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAwKQotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfQkxVRV9TQVRVUkFUSU9OCQkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMSkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdmluby9zYWE3MTkxLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdmluby9zYWE3MTkxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlOTY5OTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3Zpbm8vc2FhNzE5MS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjQ5ICswLDAgQEAKLS8qCi0gKiAgc2FhNzE5MS5jIC0gUGhpbGlwcyBTQUE3MTkxIHZpZGVvIGRlY29kZXIgZHJpdmVyCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwMyBMYWRpc2xhdiBNaWNobCA8bGFkaXNAbGludXgtbWlwcy5vcmc+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgTWlrYWVsIE5vdXNpYWluZW4gPHRtbm91c2lhQGNjLmh1dC5maT4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Ci0KLSNpbmNsdWRlICJzYWE3MTkxLmgiCi0KLSNkZWZpbmUgU0FBNzE5MV9NT0RVTEVfVkVSU0lPTgkiMC4wLjUiCi0KLU1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE3MTkxIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7Ci1NT0RVTEVfVkVSU0lPTihTQUE3MTkxX01PRFVMRV9WRVJTSU9OKTsKLU1PRFVMRV9BVVRIT1IoIk1pa2FlbCBOb3VzaWFpbmVuIDx0bW5vdXNpYUBjYy5odXQuZmk+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLQotLy8gI2RlZmluZSBTQUE3MTkxX0RFQlVHCi0KLSNpZmRlZiBTQUE3MTkxX0RFQlVHCi0jZGVmaW5lIGRwcmludGsoeC4uLikgcHJpbnRrKCJTQUE3MTkxOiAiIHgpOwotI2Vsc2UKLSNkZWZpbmUgZHByaW50ayh4Li4uKQotI2VuZGlmCi0KLSNkZWZpbmUgU0FBNzE5MV9TWU5DX0NPVU5UCTMwCi0jZGVmaW5lIFNBQTcxOTFfU1lOQ19ERUxBWQkxMDAJLyogbWlsbGlzZWNvbmRzICovCi0KLXN0cnVjdCBzYWE3MTkxIHsKLQlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7Ci0KLQkvKiB0aGUgcmVnaXN0ZXIgdmFsdWVzIGFyZSBzdG9yZWQgaGVyZSBhcyB0aGUgYWN0dWFsCi0JICogSTJDLXJlZ2lzdGVycyBhcmUgd3JpdGUtb25seSAqLwotCXU4IHJlZ1syNV07Ci0KLQlpbnQgaW5wdXQ7Ci0JdjRsMl9zdGRfaWQgbm9ybTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNhYTcxOTEgKnRvX3NhYTcxOTEoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNzE5MSwgc2QpOwotfQotCi1zdGF0aWMgY29uc3QgdTggaW5pdHNlcVtdID0gewotCTAsCS8qIFN1YmFkZHJlc3MgKi8KLQotCTB4NTAsCS8qICgweDUwKSBTQUE3MTkxX1JFR19JREVMICovCi0KLQkvKiA1MCBIeiBzaWduYWwgdGltaW5nICovCi0JMHgzMCwJLyogKDB4MzApIFNBQTcxOTFfUkVHX0hTWUIgKi8KLQkweDAwLAkvKiAoMHgwMCkgU0FBNzE5MV9SRUdfSFNZUyAqLwotCTB4ZTgsCS8qICgweGU4KSBTQUE3MTkxX1JFR19IQ0xCICovCi0JMHhiNiwJLyogKDB4YjYpIFNBQTcxOTFfUkVHX0hDTFMgKi8KLQkweGY0LAkvKiAoMHhmNCkgU0FBNzE5MV9SRUdfSFBISSAqLwotCi0JLyogY29udHJvbCAqLwotCVNBQTcxOTFfTFVNQV9BUEVSXzEsCS8qICgweDAxKSBTQUE3MTkxX1JFR19MVU1BIC0gQ1ZCUyBtb2RlICovCi0JMHgwMCwJLyogKDB4MDApIFNBQTcxOTFfUkVHX0hVRUMgKi8KLQkweGY4LAkvKiAoMHhmOCkgU0FBNzE5MV9SRUdfQ0tUUSAqLwotCTB4ZjgsCS8qICgweGY4KSBTQUE3MTkxX1JFR19DS1RTICovCi0JMHg5MCwJLyogKDB4OTApIFNBQTcxOTFfUkVHX1BMU0UgKi8KLQkweDkwLAkvKiAoMHg5MCkgU0FBNzE5MV9SRUdfU0VTRSAqLwotCTB4MDAsCS8qICgweDAwKSBTQUE3MTkxX1JFR19HQUlOICovCi0JU0FBNzE5MV9TVERDX05GRU4gfCBTQUE3MTkxX1NURENfSFJNViwJLyogKDB4MGMpIFNBQTcxOTFfUkVHX1NUREMKLQkJCQkJCSAqIC0gbm90IFNFQ0FNLAotCQkJCQkJICogc2xvdyB0aW1lIGNvbnN0YW50ICovCi0JU0FBNzE5MV9JT0NLX09FREMgfCBTQUE3MTkxX0lPQ0tfT0VIUyB8IFNBQTcxOTFfSU9DS19PRVZTCi0JfCBTQUE3MTkxX0lPQ0tfT0VEWSwJLyogKDB4NzgpIFNBQTcxOTFfUkVHX0lPQ0sKLQkJCQkgKiAtIGNocm9tYSBmcm9tIENWQlMsIEdQU1cxICYgMiBvZmYgKi8KLQlTQUE3MTkxX0NUTDNfQVVGRCB8IFNBQTcxOTFfQ1RMM19TQ0VOIHwgU0FBNzE5MV9DVEwzX09GVFMKLQl8IFNBQTcxOTFfQ1RMM19ZREVMMCwJLyogKDB4OTkpIFNBQTcxOTFfUkVHX0NUTDMKLQkJCQkgKiAtIGF1dG9tYXRpYyBmaWVsZCBkZXRlY3Rpb24gKi8KLQkweDAwLAkvKiAoMHgwMCkgU0FBNzE5MV9SRUdfQ1RMNCAqLwotCTB4MmMsCS8qICgweDJjKSBTQUE3MTkxX1JFR19DSENWIC0gUEFMIG5vbWluYWwgdmFsdWUgKi8KLQkweDAwLAkvKiB1bnVzZWQgKi8KLQkweDAwLAkvKiB1bnVzZWQgKi8KLQotCS8qIDYwIEh6IHNpZ25hbCB0aW1pbmcgKi8KLQkweDM0LAkvKiAoMHgzNCkgU0FBNzE5MV9SRUdfSFM2QiAqLwotCTB4MGEsCS8qICgweDBhKSBTQUE3MTkxX1JFR19IUzZTICovCi0JMHhmNCwJLyogKDB4ZjQpIFNBQTcxOTFfUkVHX0hDNkIgKi8KLQkweGNlLAkvKiAoMHhjZSkgU0FBNzE5MV9SRUdfSEM2UyAqLwotCTB4ZjQsCS8qICgweGY0KSBTQUE3MTkxX1JFR19IUDZJICovCi19OwotCi0vKiBTQUE3MTkxIHJlZ2lzdGVyIGhhbmRsaW5nICovCi0KLXN0YXRpYyB1OCBzYWE3MTkxX3JlYWRfcmVnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZykKLXsKLQlyZXR1cm4gdG9fc2FhNzE5MShzZCktPnJlZ1tyZWddOwotfQotCi1zdGF0aWMgaW50IHNhYTcxOTFfcmVhZF9zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggKnZhbHVlKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQlpbnQgcmV0OwotCi0JcmV0ID0gaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgdmFsdWUsIDEpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU0FBNzE5MTogc2FhNzE5MV9yZWFkX3N0YXR1cygpOiByZWFkIGZhaWxlZFxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludCBzYWE3MTkxX3dyaXRlX3JlZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKLQotCXRvX3NhYTcxOTEoc2QpLT5yZWdbcmVnXSA9IHZhbHVlOwotCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Ci19Ci0KLS8qIHRoZSBmaXJzdCBieXRlIG9mIGRhdGEgbXVzdCBiZSB0aGUgZmlyc3Qgc3ViYWRkcmVzcyBudW1iZXIgKHJlZ2lzdGVyKSAqLwotc3RhdGljIGludCBzYWE3MTkxX3dyaXRlX2Jsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCi0JCQkgICAgICAgdTggbGVuZ3RoLCBjb25zdCB1OCAqZGF0YSkKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0Jc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSB0b19zYWE3MTkxKHNkKTsKLQlpbnQgaTsKLQlpbnQgcmV0OwotCi0JZm9yIChpID0gMDsgaSA8IChsZW5ndGggLSAxKTsgaSsrKSB7Ci0JCWRlY29kZXItPnJlZ1tkYXRhWzBdICsgaV0gPSBkYXRhW2kgKyAxXTsKLQl9Ci0KLQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBkYXRhLCBsZW5ndGgpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU0FBNzE5MTogc2FhNzE5MV93cml0ZV9ibG9jaygpOiAiCi0JCSAgICAgICAid3JpdGUgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogSGVscGVyIGZ1bmN0aW9ucyAqLwotCi1zdGF0aWMgaW50IHNhYTcxOTFfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCi0JCQkgICAgIHUzMiBpbnB1dCwgdTMyIG91dHB1dCwgdTMyIGNvbmZpZykKLXsKLQlzdHJ1Y3Qgc2FhNzE5MSAqZGVjb2RlciA9IHRvX3NhYTcxOTEoc2QpOwotCXU4IGx1bWEgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19MVU1BKTsKLQl1OCBpb2NrID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfSU9DSyk7Ci0JaW50IGVycjsKLQotCXN3aXRjaCAoaW5wdXQpIHsKLQljYXNlIFNBQTcxOTFfSU5QVVRfQ09NUE9TSVRFOiAvKiBTZXQgQ29tcG9zaXRlIGlucHV0ICovCi0JCWlvY2sgJj0gfihTQUE3MTkxX0lPQ0tfQ0hSUyB8IFNBQTcxOTFfSU9DS19HUFNXMQotCQkJICB8IFNBQTcxOTFfSU9DS19HUFNXMik7Ci0JCS8qIENocm9taW5hbmNlIHRyYXAgYWN0aXZlICovCi0JCWx1bWEgJj0gflNBQTcxOTFfTFVNQV9CWVBTOwotCQlicmVhazsKLQljYXNlIFNBQTcxOTFfSU5QVVRfU1ZJREVPOiAvKiBTZXQgUy1WaWRlbyBpbnB1dCAqLwotCQlpb2NrIHw9IFNBQTcxOTFfSU9DS19DSFJTIHwgU0FBNzE5MV9JT0NLX0dQU1cyOwotCQkvKiBDaHJvbWluYW5jZSB0cmFwIGJ5cGFzc2VkICovCi0JCWx1bWEgfD0gU0FBNzE5MV9MVU1BX0JZUFM7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19MVU1BLCBsdW1hKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gLUVJTzsKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfSU9DSywgaW9jayk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIC1FSU87Ci0KLQlkZWNvZGVyLT5pbnB1dCA9IGlucHV0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzE5MV9zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBub3JtKQotewotCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gdG9fc2FhNzE5MShzZCk7Ci0JdTggc3RkYyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMpOwotCXU4IGN0bDMgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzKTsKLQl1OCBjaGN2ID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ0hDVik7Ci0JaW50IGVycjsKLQotCWlmIChub3JtICYgVjRMMl9TVERfUEFMKSB7Ci0JCXN0ZGMgJj0gflNBQTcxOTFfU1REQ19TRUNTOwotCQljdGwzICY9IH4oU0FBNzE5MV9DVEwzX0FVRkQgfCBTQUE3MTkxX0NUTDNfRlNFTCk7Ci0JCWNoY3YgPSBTQUE3MTkxX0NIQ1ZfUEFMOwotCX0gZWxzZSBpZiAobm9ybSAmIFY0TDJfU1REX05UU0MpIHsKLQkJc3RkYyAmPSB+U0FBNzE5MV9TVERDX1NFQ1M7Ci0JCWN0bDMgJj0gflNBQTcxOTFfQ1RMM19BVUZEOwotCQljdGwzIHw9IFNBQTcxOTFfQ1RMM19GU0VMOwotCQljaGN2ID0gU0FBNzE5MV9DSENWX05UU0M7Ci0JfSBlbHNlIGlmIChub3JtICYgVjRMMl9TVERfU0VDQU0pIHsKLQkJc3RkYyB8PSBTQUE3MTkxX1NURENfU0VDUzsKLQkJY3RsMyAmPSB+KFNBQTcxOTFfQ1RMM19BVUZEIHwgU0FBNzE5MV9DVEwzX0ZTRUwpOwotCQljaGN2ID0gU0FBNzE5MV9DSENWX1BBTDsKLQl9IGVsc2UgewotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMMywgY3RsMyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIC1FSU87Ci0JZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMsIHN0ZGMpOwotCWlmIChlcnIpCi0JCXJldHVybiAtRUlPOwotCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19DSENWLCBjaGN2KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gLUVJTzsKLQotCWRlY29kZXItPm5vcm0gPSBub3JtOwotCi0JZHByaW50aygiY3RsMzogJTAyeCBzdGRjOiAlMDJ4IGNoY3Y6ICUwMnhcbiIsIGN0bDMsCi0JCXN0ZGMsIGNoY3YpOwotCWRwcmludGsoIm5vcm06ICVsbHhcbiIsIG5vcm0pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzE5MV93YWl0X2Zvcl9zaWduYWwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggKnN0YXR1cykKLXsKLQlpbnQgaSA9IDA7Ci0KLQlkcHJpbnRrKCJDaGVja2luZyBmb3Igc2lnbmFsLi4uXG4iKTsKLQotCWZvciAoaSA9IDA7IGkgPCBTQUE3MTkxX1NZTkNfQ09VTlQ7IGkrKykgewotCQlpZiAoc2FhNzE5MV9yZWFkX3N0YXR1cyhzZCwgc3RhdHVzKSkKLQkJCXJldHVybiAtRUlPOwotCi0JCWlmICgoKCpzdGF0dXMpICYgU0FBNzE5MV9TVEFUVVNfSExDSykgPT0gMCkgewotCQkJZHByaW50aygiU2lnbmFsIGZvdW5kXG4iKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJbXNsZWVwKFNBQTcxOTFfU1lOQ19ERUxBWSk7Ci0JfQotCi0JZHByaW50aygiTm8gc2lnbmFsXG4iKTsKLQotCXJldHVybiAtRUJVU1k7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzE5MV9xdWVyeXN0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCAqbm9ybSkKLXsKLQlzdHJ1Y3Qgc2FhNzE5MSAqZGVjb2RlciA9IHRvX3NhYTcxOTEoc2QpOwotCXU4IHN0ZGMgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDKTsKLQl1OCBjdGwzID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMMyk7Ci0JdTggc3RhdHVzOwotCXY0bDJfc3RkX2lkIG9sZF9ub3JtID0gZGVjb2Rlci0+bm9ybTsKLQlpbnQgZXJyID0gMDsKLQotCWRwcmludGsoIlNBQTcxOTEgZXh0ZW5kZWQgc2lnbmFsIGF1dG8tZGV0ZWN0aW9uLi4uXG4iKTsKLQotCSpub3JtICY9IFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwgfCBWNEwyX1NURF9TRUNBTTsKLQlzdGRjICY9IH5TQUE3MTkxX1NURENfU0VDUzsKLQljdGwzICY9IH4oU0FBNzE5MV9DVEwzX0ZTRUwpOwotCi0JZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMsIHN0ZGMpOwotCWlmIChlcnIpIHsKLQkJZXJyID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzLCBjdGwzKTsKLQlpZiAoZXJyKSB7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQotCWN0bDMgfD0gU0FBNzE5MV9DVEwzX0FVRkQ7Ci0JZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMsIGN0bDMpOwotCWlmIChlcnIpIHsKLQkJZXJyID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbXNsZWVwKFNBQTcxOTFfU1lOQ19ERUxBWSk7Ci0KLQllcnIgPSBzYWE3MTkxX3dhaXRfZm9yX3NpZ25hbChzZCwgJnN0YXR1cyk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQlpZiAoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfRklEVCkgewotCQkvKiA2MEh6IHNpZ25hbCAtPiBOVFNDICovCi0JCWRwcmludGsoIjYwSHogc2lnbmFsOiBOVFNDXG4iKTsKLQkJKm5vcm0gJj0gVjRMMl9TVERfTlRTQzsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogNTBIeiBzaWduYWwgKi8KLQlkcHJpbnRrKCI1MEh6IHNpZ25hbDogVHJ5aW5nIFBBTC4uLlxuIik7Ci0KLQkvKiB0cnkgUEFMIGZpcnN0ICovCi0JZXJyID0gc2FhNzE5MV9zX3N0ZChzZCwgVjRMMl9TVERfUEFMKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCW1zbGVlcChTQUE3MTkxX1NZTkNfREVMQVkpOwotCi0JZXJyID0gc2FhNzE5MV93YWl0X2Zvcl9zaWduYWwoc2QsICZzdGF0dXMpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JLyogbm90IDUwSHogPyAqLwotCWlmIChzdGF0dXMgJiBTQUE3MTkxX1NUQVRVU19GSURUKSB7Ci0JCWRwcmludGsoIk5vIDUwSHogc2lnbmFsXG4iKTsKLQkJc2FhNzE5MV9zX3N0ZChzZCwgb2xkX25vcm0pOwotCQkqbm9ybSA9IFY0TDJfU1REX1VOS05PV047Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChzdGF0dXMgJiBTQUE3MTkxX1NUQVRVU19DT0RFKSB7Ci0JCWRwcmludGsoIlBBTFxuIik7Ci0JCSpub3JtICY9IFY0TDJfU1REX1BBTDsKLQkJcmV0dXJuIHNhYTcxOTFfc19zdGQoc2QsIG9sZF9ub3JtKTsKLQl9Ci0KLQlkcHJpbnRrKCJObyBjb2xvciBkZXRlY3RlZCB3aXRoIFBBTCAtIFRyeWluZyBTRUNBTS4uLlxuIik7Ci0KLQkvKiBubyBjb2xvciBkZXRlY3RlZCA/IC0+IHRyeSBTRUNBTSAqLwotCWVyciA9IHNhYTcxOTFfc19zdGQoc2QsIFY0TDJfU1REX1NFQ0FNKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCW1zbGVlcChTQUE3MTkxX1NZTkNfREVMQVkpOwotCi0JZXJyID0gc2FhNzE5MV93YWl0X2Zvcl9zaWduYWwoc2QsICZzdGF0dXMpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCi0JLyogbm90IDUwSHogPyAqLwotCWlmIChzdGF0dXMgJiBTQUE3MTkxX1NUQVRVU19GSURUKSB7Ci0JCWRwcmludGsoIk5vIDUwSHogc2lnbmFsXG4iKTsKLQkJKm5vcm0gPSBWNEwyX1NURF9VTktOT1dOOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfQ09ERSkgewotCQkvKiBDb2xvciBkZXRlY3RlZCAtPiBTRUNBTSAqLwotCQlkcHJpbnRrKCJTRUNBTVxuIik7Ci0JCSpub3JtICY9IFY0TDJfU1REX1NFQ0FNOwotCQlyZXR1cm4gc2FhNzE5MV9zX3N0ZChzZCwgb2xkX25vcm0pOwotCX0KLQotCWRwcmludGsoIk5vIGNvbG9yIGRldGVjdGVkIHdpdGggU0VDQU0gLSBHb2luZyBiYWNrIHRvIFBBTC5cbiIpOwotCSpub3JtID0gVjRMMl9TVERfVU5LTk9XTjsKLQotb3V0OgotCXJldHVybiBzYWE3MTkxX3Nfc3RkKHNkLCBvbGRfbm9ybSk7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzE5MV9hdXRvZGV0ZWN0X25vcm0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKLXsKLQl1OCBzdGF0dXM7Ci0KLQlkcHJpbnRrKCJTQUE3MTkxIHNpZ25hbCBhdXRvLWRldGVjdGlvbi4uLlxuIik7Ci0KLQlkcHJpbnRrKCJSZWFkaW5nIHN0YXR1cy4uLlxuIik7Ci0KLQlpZiAoc2FhNzE5MV9yZWFkX3N0YXR1cyhzZCwgJnN0YXR1cykpCi0JCXJldHVybiAtRUlPOwotCi0JZHByaW50aygiQ2hlY2tpbmcgZm9yIHNpZ25hbC4uLlxuIik7Ci0KLQkvKiBubyBzaWduYWwgPyAqLwotCWlmIChzdGF0dXMgJiBTQUE3MTkxX1NUQVRVU19ITENLKSB7Ci0JCWRwcmludGsoIk5vIHNpZ25hbFxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JZHByaW50aygiU2lnbmFsIGZvdW5kXG4iKTsKLQotCWlmIChzdGF0dXMgJiBTQUE3MTkxX1NUQVRVU19GSURUKSB7Ci0JCS8qIDYwaHogc2lnbmFsIC0+IE5UU0MgKi8KLQkJZHByaW50aygiTlRTQ1xuIik7Ci0JCXJldHVybiBzYWE3MTkxX3Nfc3RkKHNkLCBWNEwyX1NURF9OVFNDKTsKLQl9IGVsc2UgewotCQkvKiA1MGh6IHNpZ25hbCAtPiBQQUwgKi8KLQkJZHByaW50aygiUEFMXG4iKTsKLQkJcmV0dXJuIHNhYTcxOTFfc19zdGQoc2QsIFY0TDJfU1REX1BBTCk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHNhYTcxOTFfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCi17Ci0JdTggcmVnOwotCWludCByZXQgPSAwOwotCi0Jc3dpdGNoIChjdHJsLT5pZCkgewotCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTOgotCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTX1dFSUdIVDoKLQljYXNlIFNBQTcxOTFfQ09OVFJPTF9DT1JJTkc6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0xVTUEpOwotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTOgotCQkJY3RybC0+dmFsdWUgPSAoKHMzMilyZWcgJiBTQUE3MTkxX0xVTUFfQlBTU19NQVNLKQotCQkJCT4+IFNBQTcxOTFfTFVNQV9CUFNTX1NISUZUOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTX1dFSUdIVDoKLQkJCWN0cmwtPnZhbHVlID0gKChzMzIpcmVnICYgU0FBNzE5MV9MVU1BX0FQRVJfTUFTSykKLQkJCQk+PiBTQUE3MTkxX0xVTUFfQVBFUl9TSElGVDsKLQkJCWJyZWFrOwotCQljYXNlIFNBQTcxOTFfQ09OVFJPTF9DT1JJTkc6Ci0JCQljdHJsLT52YWx1ZSA9ICgoczMyKXJlZyAmIFNBQTcxOTFfTFVNQV9DT1JJX01BU0spCi0JCQkJPj4gU0FBNzE5MV9MVU1BX0NPUklfU0hJRlQ7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVI6Ci0JY2FzZSBTQUE3MTkxX0NPTlRST0xfQ0hST01BX0dBSU46Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0dBSU4pOwotCQlpZiAoY3RybC0+aWQgPT0gU0FBNzE5MV9DT05UUk9MX0ZPUkNFX0NPTE9VUikKLQkJCWN0cmwtPnZhbHVlID0gKChzMzIpcmVnICYgU0FBNzE5MV9HQUlOX0NPTE8pID8gMSA6IDA7Ci0JCWVsc2UKLQkJCWN0cmwtPnZhbHVlID0gKChzMzIpcmVnICYgU0FBNzE5MV9HQUlOX0xGSVNfTUFTSykKLQkJCQk+PiBTQUE3MTkxX0dBSU5fTEZJU19TSElGVDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0hVRUMpOwotCQlpZiAocmVnIDwgMHg4MCkKLQkJCXJlZyArPSAweDgwOwotCQllbHNlCi0JCQlyZWcgLT0gMHg4MDsKLQkJY3RybC0+dmFsdWUgPSAoczMyKXJlZzsKLQkJYnJlYWs7Ci0JY2FzZSBTQUE3MTkxX0NPTlRST0xfVlRSQzoKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfU1REQyk7Ci0JCWN0cmwtPnZhbHVlID0gKChzMzIpcmVnICYgU0FBNzE5MV9TVERDX1ZUUkMpID8gMSA6IDA7Ci0JCWJyZWFrOwotCWNhc2UgU0FBNzE5MV9DT05UUk9MX0xVTUFfREVMQVk6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMpOwotCQljdHJsLT52YWx1ZSA9ICgoczMyKXJlZyAmIFNBQTcxOTFfQ1RMM19ZREVMX01BU0spCi0JCQk+PiBTQUE3MTkxX0NUTDNfWURFTF9TSElGVDsKLQkJaWYgKGN0cmwtPnZhbHVlID49IDQpCi0JCQljdHJsLT52YWx1ZSAtPSA4OwotCQlicmVhazsKLQljYXNlIFNBQTcxOTFfQ09OVFJPTF9WTlI6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDQpOwotCQljdHJsLT52YWx1ZSA9ICgoczMyKXJlZyAmIFNBQTcxOTFfQ1RMNF9WTk9JX01BU0spCi0JCQk+PiBTQUE3MTkxX0NUTDRfVk5PSV9TSElGVDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IHNhYTcxOTFfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCi17Ci0JdTggcmVnOwotCWludCByZXQgPSAwOwotCi0Jc3dpdGNoIChjdHJsLT5pZCkgewotCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTOgotCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTX1dFSUdIVDoKLQljYXNlIFNBQTcxOTFfQ09OVFJPTF9DT1JJTkc6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0xVTUEpOwotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTOgotCQkJcmVnICY9IH5TQUE3MTkxX0xVTUFfQlBTU19NQVNLOwotCQkJcmVnIHw9IChjdHJsLT52YWx1ZSA8PCBTQUE3MTkxX0xVTUFfQlBTU19TSElGVCkKLQkJCQkmIFNBQTcxOTFfTFVNQV9CUFNTX01BU0s7Ci0JCQlicmVhazsKLQkJY2FzZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1NfV0VJR0hUOgotCQkJcmVnICY9IH5TQUE3MTkxX0xVTUFfQVBFUl9NQVNLOwotCQkJcmVnIHw9IChjdHJsLT52YWx1ZSA8PCBTQUE3MTkxX0xVTUFfQVBFUl9TSElGVCkKLQkJCQkmIFNBQTcxOTFfTFVNQV9BUEVSX01BU0s7Ci0JCQlicmVhazsKLQkJY2FzZSBTQUE3MTkxX0NPTlRST0xfQ09SSU5HOgotCQkJcmVnICY9IH5TQUE3MTkxX0xVTUFfQ09SSV9NQVNLOwotCQkJcmVnIHw9IChjdHJsLT52YWx1ZSA8PCBTQUE3MTkxX0xVTUFfQ09SSV9TSElGVCkKLQkJCQkmIFNBQTcxOTFfTFVNQV9DT1JJX01BU0s7Ci0JCQlicmVhazsKLQkJfQotCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfTFVNQSwgcmVnKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSOgotCWNhc2UgU0FBNzE5MV9DT05UUk9MX0NIUk9NQV9HQUlOOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19HQUlOKTsKLQkJaWYgKGN0cmwtPmlkID09IFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVIpIHsKLQkJCWlmIChjdHJsLT52YWx1ZSkKLQkJCQlyZWcgfD0gU0FBNzE5MV9HQUlOX0NPTE87Ci0JCQllbHNlCi0JCQkJcmVnICY9IH5TQUE3MTkxX0dBSU5fQ09MTzsKLQkJfSBlbHNlIHsKLQkJCXJlZyAmPSB+U0FBNzE5MV9HQUlOX0xGSVNfTUFTSzsKLQkJCXJlZyB8PSAoY3RybC0+dmFsdWUgPDwgU0FBNzE5MV9HQUlOX0xGSVNfU0hJRlQpCi0JCQkJJiBTQUE3MTkxX0dBSU5fTEZJU19NQVNLOwotCQl9Ci0JCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19HQUlOLCByZWcpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX0hVRToKLQkJcmVnID0gY3RybC0+dmFsdWUgJiAweGZmOwotCQlpZiAocmVnIDwgMHg4MCkKLQkJCXJlZyArPSAweDgwOwotCQllbHNlCi0JCQlyZWcgLT0gMHg4MDsKLQkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0hVRUMsIHJlZyk7Ci0JCWJyZWFrOwotCWNhc2UgU0FBNzE5MV9DT05UUk9MX1ZUUkM6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX1NUREMpOwotCQlpZiAoY3RybC0+dmFsdWUpCi0JCQlyZWcgfD0gU0FBNzE5MV9TVERDX1ZUUkM7Ci0JCWVsc2UKLQkJCXJlZyAmPSB+U0FBNzE5MV9TVERDX1ZUUkM7Ci0JCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDLCByZWcpOwotCQlicmVhazsKLQljYXNlIFNBQTcxOTFfQ09OVFJPTF9MVU1BX0RFTEFZOiB7Ci0JCXMzMiB2YWx1ZSA9IGN0cmwtPnZhbHVlOwotCQlpZiAodmFsdWUgPCAwKQotCQkJdmFsdWUgKz0gODsKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMMyk7Ci0JCXJlZyAmPSB+U0FBNzE5MV9DVEwzX1lERUxfTUFTSzsKLQkJcmVnIHw9ICh2YWx1ZSA8PCBTQUE3MTkxX0NUTDNfWURFTF9TSElGVCkKLQkJCSYgU0FBNzE5MV9DVEwzX1lERUxfTUFTSzsKLQkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMsIHJlZyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNBQTcxOTFfQ09OVFJPTF9WTlI6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDQpOwotCQlyZWcgJj0gflNBQTcxOTFfQ1RMNF9WTk9JX01BU0s7Ci0JCXJlZyB8PSAoY3RybC0+dmFsdWUgPDwgU0FBNzE5MV9DVEw0X1ZOT0lfU0hJRlQpCi0JCQkmIFNBQTcxOTFfQ1RMNF9WTk9JX01BU0s7Ci0JCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEw0LCByZWcpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRUlOVkFMOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIEkyQy1pbnRlcmZhY2UgKi8KLQotc3RhdGljIGludCBzYWE3MTkxX2dfaW5wdXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKQotewotCXU4IHN0YXR1c19yZWc7Ci0JaW50IHJlcyA9IFY0TDJfSU5fU1RfTk9fU0lHTkFMOwotCi0JaWYgKHNhYTcxOTFfcmVhZF9zdGF0dXMoc2QsICZzdGF0dXNfcmVnKSkKLQkJcmV0dXJuIC1FSU87Ci0JaWYgKChzdGF0dXNfcmVnICYgU0FBNzE5MV9TVEFUVVNfSExDSykgPT0gMCkKLQkJcmVzID0gMDsKLQlpZiAoIShzdGF0dXNfcmVnICYgU0FBNzE5MV9TVEFUVVNfQ09ERSkpCi0JCXJlcyB8PSBWNEwyX0lOX1NUX05PX0NPTE9SOwotCSpzdGF0dXMgPSByZXM7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE3MTkxX2NvcmVfb3BzID0gewotCS5nX2N0cmwgPSBzYWE3MTkxX2dfY3RybCwKLQkuc19jdHJsID0gc2FhNzE5MV9zX2N0cmwsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBzYWE3MTkxX3ZpZGVvX29wcyA9IHsKLQkuc19zdGQgPSBzYWE3MTkxX3Nfc3RkLAotCS5zX3JvdXRpbmcgPSBzYWE3MTkxX3Nfcm91dGluZywKLQkucXVlcnlzdGQgPSBzYWE3MTkxX3F1ZXJ5c3RkLAotCS5nX2lucHV0X3N0YXR1cyA9IHNhYTcxOTFfZ19pbnB1dF9zdGF0dXMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE3MTkxX29wcyA9IHsKLQkuY29yZSA9ICZzYWE3MTkxX2NvcmVfb3BzLAotCS52aWRlbyA9ICZzYWE3MTkxX3ZpZGVvX29wcywKLX07Ci0KLXN0YXRpYyBpbnQgc2FhNzE5MV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IHNhYTcxOTEgKmRlY29kZXI7Ci0Jc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKLQotCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCi0JCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKLQotCWRlY29kZXIgPSBkZXZtX2t6YWxsb2MoJmNsaWVudC0+ZGV2LCBzaXplb2YoKmRlY29kZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRlY29kZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc2QgPSAmZGVjb2Rlci0+c2Q7Ci0JdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnNhYTcxOTFfb3BzKTsKLQotCWVyciA9IHNhYTcxOTFfd3JpdGVfYmxvY2soc2QsIHNpemVvZihpbml0c2VxKSwgaW5pdHNlcSk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIlNBQTcxOTEgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJTQUE3MTkxIGluaXRpYWxpemVkXG4iKTsKLQotCWRlY29kZXItPmlucHV0ID0gU0FBNzE5MV9JTlBVVF9DT01QT1NJVEU7Ci0JZGVjb2Rlci0+bm9ybSA9IFY0TDJfU1REX1BBTDsKLQotCWVyciA9IHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtKHNkKTsKLQlpZiAoZXJyICYmIChlcnIgIT0gLUVCVVNZKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJTQUE3MTkxOiBTaWduYWwgYXV0by1kZXRlY3Rpb24gZmFpbGVkXG4iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNhYTcxOTFfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc2FhNzE5MV9pZFtdID0gewotCXsgInNhYTcxOTEiLCAwIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNhYTcxOTFfaWQpOwotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc2FhNzE5MV9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JCS5uYW1lCT0gInNhYTcxOTEiLAotCX0sCi0JLnByb2JlCQk9IHNhYTcxOTFfcHJvYmUsCi0JLnJlbW92ZQkJPSBzYWE3MTkxX3JlbW92ZSwKLQkuaWRfdGFibGUJPSBzYWE3MTkxX2lkLAotfTsKLQotbW9kdWxlX2kyY19kcml2ZXIoc2FhNzE5MV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL3Zpbm8vc2FhNzE5MS5oIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL3Zpbm8vc2FhNzE5MS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDNjNzRkLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS92aW5vL3NhYTcxOTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0vKgotICogIHNhYTcxOTEuaCAtIFBoaWxpcHMgU0FBNzE5MSB2aWRlbyBkZWNvZGVyIGRyaXZlcgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMgTGFkaXNsYXYgTWljaGwgPGxhZGlzQGxpbnV4LW1pcHMub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNCwyMDA1IE1pa2FlbCBOb3VzaWFpbmVuIDx0bW5vdXNpYUBjYy5odXQuZmk+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9TQUE3MTkxX0hfCi0jZGVmaW5lIF9TQUE3MTkxX0hfCi0KLS8qIFBoaWxpcHMgU0FBNzE5MSBETVNEIEkyQyBidXMgYWRkcmVzcyAqLwotI2RlZmluZSBTQUE3MTkxX0FERFIJCTB4OGEKLQotLyogUmVnaXN0ZXIgc3ViYWRkcmVzc2VzLiAqLwotI2RlZmluZSBTQUE3MTkxX1JFR19JREVMCTB4MDAKLSNkZWZpbmUgU0FBNzE5MV9SRUdfSFNZQgkweDAxCi0jZGVmaW5lIFNBQTcxOTFfUkVHX0hTWVMJMHgwMgotI2RlZmluZSBTQUE3MTkxX1JFR19IQ0xCCTB4MDMKLSNkZWZpbmUgU0FBNzE5MV9SRUdfSENMUwkweDA0Ci0jZGVmaW5lIFNBQTcxOTFfUkVHX0hQSEkJMHgwNQotI2RlZmluZSBTQUE3MTkxX1JFR19MVU1BCTB4MDYKLSNkZWZpbmUgU0FBNzE5MV9SRUdfSFVFQwkweDA3Ci0jZGVmaW5lIFNBQTcxOTFfUkVHX0NLVFEJMHgwOCAvKiBiaXRzIDMtNyAqLwotI2RlZmluZSBTQUE3MTkxX1JFR19DS1RTCTB4MDkgLyogYml0cyAzLTcgKi8KLSNkZWZpbmUgU0FBNzE5MV9SRUdfUExTRQkweDBhCi0jZGVmaW5lIFNBQTcxOTFfUkVHX1NFU0UJMHgwYgotI2RlZmluZSBTQUE3MTkxX1JFR19HQUlOCTB4MGMKLSNkZWZpbmUgU0FBNzE5MV9SRUdfU1REQwkweDBkCi0jZGVmaW5lIFNBQTcxOTFfUkVHX0lPQ0sJMHgwZQotI2RlZmluZSBTQUE3MTkxX1JFR19DVEwzCTB4MGYKLSNkZWZpbmUgU0FBNzE5MV9SRUdfQ1RMNAkweDEwCi0jZGVmaW5lIFNBQTcxOTFfUkVHX0NIQ1YJMHgxMQotI2RlZmluZSBTQUE3MTkxX1JFR19IUzZCCTB4MTQKLSNkZWZpbmUgU0FBNzE5MV9SRUdfSFM2UwkweDE1Ci0jZGVmaW5lIFNBQTcxOTFfUkVHX0hDNkIJMHgxNgotI2RlZmluZSBTQUE3MTkxX1JFR19IQzZTCTB4MTcKLSNkZWZpbmUgU0FBNzE5MV9SRUdfSFA2SQkweDE4Ci0jZGVmaW5lIFNBQTcxOTFfUkVHX1NUQVRVUwkweGZmCS8qIG5vdCByZWFsbHkgYSBzdWJhZGRyZXNzICovCi0KLS8qIFN0YXR1cyBSZWdpc3RlciBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBTQUE3MTkxX1NUQVRVU19DT0RFCTB4MDEJLyogY29sb3IgZGV0ZWN0ZWQgZmxhZyAqLwotI2RlZmluZSBTQUE3MTkxX1NUQVRVU19GSURUCTB4MjAJLyogc2lnbmFsIHR5cGUgNTAvNjAgSHogKi8KLSNkZWZpbmUgU0FBNzE5MV9TVEFUVVNfSExDSwkweDQwCS8qIFBMTCB1bmxvY2tlZCgxKS9sb2NrZWQoMCkgKi8KLSNkZWZpbmUgU0FBNzE5MV9TVEFUVVNfU1RUQwkweDgwCS8qIHR2L3Z0ciB0aW1lIGNvbnN0YW50ICovCi0KLS8qIEx1bWluYW5jZSBDb250cm9sIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCi0vKiBpbnB1dCBtb2RlIHNlbGVjdCBiaXQ6Ci0gKiAwPUNWQlMgKGNocm9taW5hbmNlIHRyYXAgYWN0aXZlKSwgMT1TLVZpZGVvICh0cmFwIGJ5cGFzc2VkKSAqLwotI2RlZmluZSBTQUE3MTkxX0xVTUFfQllQUwkweDgwCi0vKiBwcmUtZmlsdGVyIChvbmx5IHdoZW4gY2hyb21pbmFuY2UgdHJhcCBpcyBhY3RpdmUpICovCi0jZGVmaW5lIFNBQTcxOTFfTFVNQV9QUkVGCTB4NDAKLS8qIGFwZXJ0dXJlIGJhbmRwYXNzIHRvIHNlbGVjdCBkaWZmZXJlbnQgY2hhcmFjdGVyaXN0aWNzIHdpdGggbWF4aW11bXMKLSAqIChiaXRzIDQtNSkgKi8KLSNkZWZpbmUgU0FBNzE5MV9MVU1BX0JQU1NfTUFTSwkweDMwCi0jZGVmaW5lIFNBQTcxOTFfTFVNQV9CUFNTX1NISUZUCTQKLSNkZWZpbmUgU0FBNzE5MV9MVU1BX0JQU1NfMwkweDMwCi0jZGVmaW5lIFNBQTcxOTFfTFVNQV9CUFNTXzIJMHgyMAotI2RlZmluZSBTQUE3MTkxX0xVTUFfQlBTU18xCTB4MTAKLSNkZWZpbmUgU0FBNzE5MV9MVU1BX0JQU1NfMAkweDAwCi0vKiBjb3JpbmcgcmFuZ2UgZm9yIGhpZ2ggZnJlcXVlbmN5IGNvbXBvbmVudHMgYWNjb3JkaW5nIHRvIDgtYml0IGx1bWluYW5jZQotICogKGJpdHMgMi0zKQotICogMD1jb3Jpbmcgb2ZmLCBuPSAoKy0pbiBMU0IgKi8KLSNkZWZpbmUgU0FBNzE5MV9MVU1BX0NPUklfTUFTSwkweDBjCi0jZGVmaW5lIFNBQTcxOTFfTFVNQV9DT1JJX1NISUZUCTIKLSNkZWZpbmUgU0FBNzE5MV9MVU1BX0NPUklfMwkweDBjCi0jZGVmaW5lIFNBQTcxOTFfTFVNQV9DT1JJXzIJMHgwOAotI2RlZmluZSBTQUE3MTkxX0xVTUFfQ09SSV8xCTB4MDQKLSNkZWZpbmUgU0FBNzE5MV9MVU1BX0NPUklfMAkweDAwCi0vKiBhcGVydHVyZSBiYW5kcGFzcyBmaWx0ZXIgd2VpZ2h0cyBoaWdoIGZyZXF1ZW5jeSBjb21wb25lbnRzIG9mIGx1bWluYW5jZQotICogc2lnbmFsIChiaXRzIDAtMSkKLSAqIDA9ZmFjdG9yIDAsIDE9MC4yNSwgMj0wLjUsIDM9MSAqLwotI2RlZmluZSBTQUE3MTkxX0xVTUFfQVBFUl9NQVNLCTB4MDMKLSNkZWZpbmUgU0FBNzE5MV9MVU1BX0FQRVJfU0hJRlQJMAotI2RlZmluZSBTQUE3MTkxX0xVTUFfQVBFUl8zCTB4MDMKLSNkZWZpbmUgU0FBNzE5MV9MVU1BX0FQRVJfMgkweDAyCi0jZGVmaW5lIFNBQTcxOTFfTFVNQV9BUEVSXzEJMHgwMQotI2RlZmluZSBTQUE3MTkxX0xVTUFfQVBFUl8wCTB4MDAKLQotLyogQ2hyb21pbmFuY2UgR2FpbiBDb250cm9sIFNldHRpbmdzIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCi0vKiBjb2xvdXIgb246IDA9YXV0b21hdGljIGNvbG91ci1raWxsZXIgZW5hYmxlZCwgMT1mb3JjZWQgY29sb3VyIG9uICovCi0jZGVmaW5lIFNBQTcxOTFfR0FJTl9DT0xPCTB4ODAKLS8qIGNocm9taW5hbmNlIGdhaW4gY29udHJvbCAoQUdDIGZpbHRlcikKLSAqIDA9bG9vcCBmaWx0ZXIgdGltZSBjb25zdGFudCBzbG93LCAxPW1lZGl1bSwgMj1mYXN0LCAzPWFjdHVhbCBnYWluICovCi0jZGVmaW5lIFNBQTcxOTFfR0FJTl9MRklTX01BU0sJMHg2MAotI2RlZmluZSBTQUE3MTkxX0dBSU5fTEZJU19TSElGVAk1Ci0jZGVmaW5lIFNBQTcxOTFfR0FJTl9MRklTXzMJMHg2MAotI2RlZmluZSBTQUE3MTkxX0dBSU5fTEZJU18yCTB4NDAKLSNkZWZpbmUgU0FBNzE5MV9HQUlOX0xGSVNfMQkweDIwCi0jZGVmaW5lIFNBQTcxOTFfR0FJTl9MRklTXzAJMHgwMAotCi0vKiBTdGFuZGFyZC9Nb2RlIENvbnRyb2wgUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KLS8qIHR2L3Z0ciBtb2RlIGJpdDogMD1UViBtb2RlIChzbG93IHRpbWUgY29uc3RhbnQpLAotICogMT1WVFIgbW9kZSAoZmFzdCB0aW1lIGNvbnN0YW50KSAqLwotI2RlZmluZSBTQUE3MTkxX1NURENfVlRSQwkweDgwCi0vKiBTQUE3MTkxQi1zcGVjaWZpYyBmdW5jdGlvbnMgZW5hYmxlIChSVENPLCBPREQgYW5kIEdQU1cwIG91dHB1dHMpCi0gKiAwPW91dHB1dHMgc2V0IHRvIGhpZ2gtaW1wZWRhbmNlIChjaXJjdWl0IGVxdWFscyBTQUE3MTkxKSwgMT1lbmFibGVkICovCi0jZGVmaW5lIFNBQTcxOTFfU1REQ19ORkVOCTB4MDgKLS8qIEhSRUYgZ2VuZXJhdGlvbjogMD1saWtlIFNBQTcxOTEsIDE9SFJFRiBpcyA4eExMQzIgY2xvY2tzIGVhcmxpZXIgKi8KLSNkZWZpbmUgU0FBNzE5MV9TVERDX0hSTVYJMHgwNAotLyogZ2VuZXJhbCBwdXJwb3NlIHN3aXRjaCAwCi0gKiAobm90IHVzZWQgd2l0aCBWSU5PIGFmYWlrKSAqLwotI2RlZmluZSBTQUE3MTkxX1NURENfR1BTVzAJMHgwMgotLyogU0VDQU0gbW9kZSBiaXQ6IDA9b3RoZXIgc3RhbmRhcmRzLCAxPVNFQ0FNICovCi0jZGVmaW5lIFNBQTcxOTFfU1REQ19TRUNTCTB4MDEKLQotLyogSS9PIGFuZCBDbG9jayBDb250cm9sIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCi0vKiBob3Jpem9udGFsIGNsb2NrIFBMTDogMD1QTEwgY2xvc2VkLAotICogMT1QTEwgY2lyY3VpdCBvcGVuIGFuZCBob3Jpem9udGFsIGZyZXEgZml4ZWQgKi8KLSNkZWZpbmUgU0FBNzE5MV9JT0NLX0hQTEwJMHg4MAotLyogY29sb3VyLWRpZmZlcmVuY2Ugb3V0cHV0IGVuYWJsZSAob3V0cHV0cyBVVjAtVVY3KSAqLwotI2RlZmluZSBTQUE3MTkxX0lPQ0tfT0VEQwkweDQwCi0vKiBILXN5bmMgb3V0cHV0IGVuYWJsZSAqLwotI2RlZmluZSBTQUE3MTkxX0lPQ0tfT0VIUwkweDIwCi0vKiBWLXN5bmMgb3V0cHV0IGVuYWJsZSAqLwotI2RlZmluZSBTQUE3MTkxX0lPQ0tfT0VWUwkweDEwCi0vKiBsdW1pbmFuY2Ugb3V0cHV0IGVuYWJsZSAob3V0cHV0cyBZMC1ZNykgKi8KLSNkZWZpbmUgU0FBNzE5MV9JT0NLX09FRFkJMHgwOAotLyogUy1WSFMgYml0IChjaHJvbWluYW5jZSBmcm9tIENWQlMgb3IgZnJvbSBjaHJvbWluYW5jZSBpbnB1dCk6Ci0gKiAwPWNvbnRyb2xsZWQgYnkgQllQUy1iaXQsIDE9ZnJvbSBjaHJvbWluYW5jZSBpbnB1dCAqLwotI2RlZmluZSBTQUE3MTkxX0lPQ0tfQ0hSUwkweDA0Ci0vKiBnZW5lcmFsIHB1cnBvc2Ugc3dpdGNoIDIKLSAqIFZJTk8tc3BlY2lmaWM6IDA9dXNlZCB3aXRoIENWQlMsIDE9dXNlZCB3aXRoIFMtVmlkZW8gKi8KLSNkZWZpbmUgU0FBNzE5MV9JT0NLX0dQU1cyCTB4MDIKLS8qIGdlbmVyYWwgcHVycG9zZSBzd2l0Y2ggMSAqLwotLyogVklOTy1zcGVjaWZpYzogMD1hbHdheXMsIDE9bm90IHVzZWQhKi8KLSNkZWZpbmUgU0FBNzE5MV9JT0NLX0dQU1cxCTB4MDEKLQotLyogTWlzY2VsbGFuZW91cyBDb250cm9sICMxIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCi0vKiBhdXRvbWF0aWMgZmllbGQgZGV0ZWN0aW9uICg1MC82MEh6IHN0YW5kYXJkKSAqLwotI2RlZmluZSBTQUE3MTkxX0NUTDNfQVVGRAkweDgwCi0vKiBmaWVsZCBzZWxlY3Q6IChpZiBBVUZEPTApCi0gKiAwPTUwSHogKDYyNSBsaW5lcyksIDE9NjBIeiAoNTI1IGxpbmVzKSAqLwotI2RlZmluZSBTQUE3MTkxX0NUTDNfRlNFTAkweDQwCi0vKiBTRUNBTSBjcm9zcy1jb2xvdXIgcmVkdWN0aW9uIGVuYWJsZSAqLwotI2RlZmluZSBTQUE3MTkxX0NUTDNfU1hDUgkweDIwCi0vKiBzeW5jIGFuZCBjbGFtcGluZyBwdWxzZSBlbmFibGUgKEhDTCBhbmQgSFNZIG91dHB1dHMpICovCi0jZGVmaW5lIFNBQTcxOTFfQ1RMM19TQ0VOCTB4MTAKLS8qIG91dHB1dCBmb3JtYXQ6IDA9NDoxOjEsIDE9NDoyOjIgKDQ6MjoyIGZvciBWSU5PKSAqLwotI2RlZmluZSBTQUE3MTkxX0NUTDNfT0ZUUwkweDA4Ci0vKiBsdW1pbmFuY2UgZGVsYXkgY29tcGVuc2F0aW9uCi0gKiAwPTAqMi9MTEMsICAxPSsxKjIvTExDLCAyPSsyKjIvTExDLCAzPSszKjIvTExDLAotICogND0tNCoyL0xMQywgNT0tMyoyL0xMQywgNj0tMioyL0xMQywgNz0tMSoyL0xMQwotICogc3RlcCBzaXplID0gMi9MTEMgPSA2Ny44bnMgZm9yIDUwSHosIDgxLjVucyBmb3IgNjBIeiAqLwotI2RlZmluZSBTQUE3MTkxX0NUTDNfWURFTF9NQVNLCTB4MDcKLSNkZWZpbmUgU0FBNzE5MV9DVEwzX1lERUxfU0hJRlQJMAotI2RlZmluZSBTQUE3MTkxX0NUTDNfWURFTDIJMHgwNAotI2RlZmluZSBTQUE3MTkxX0NUTDNfWURFTDEJMHgwMgotI2RlZmluZSBTQUE3MTkxX0NUTDNfWURFTDAJMHgwMQotCi0vKiBNaXNjZWxsYW5lb3VzIENvbnRyb2wgIzIgUmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KLS8qIHNlbGVjdCBIUkVGIHBvc2l0aW9uCi0gKiAwPW5vcm1hbCwgSFJFRiBpcyBtYXRjaGVkIHRvIFlVViBvdXRwdXQgcG9ydCwKLSAqIDE9SFJFRiBpcyBtYXRjaGVkIHRvIENWQlMgaW5wdXQgcG9ydCAqLwotI2RlZmluZSBTQUE3MTkxX0NUTDRfSFJGUwkweDA0Ci0vKiB2ZXJ0aWNhbCBub2lzZSByZWR1Y3Rpb24KLSAqIDA9bm9ybWFsLCAxPXNlYXJjaGluZyB3aW5kb3csIDI9YXV0by1kZWZsZWN0aW9uLCAzPXJlZHVjdGlvbiBieXBhc3NlZCAqLwotI2RlZmluZSBTQUE3MTkxX0NUTDRfVk5PSV9NQVNLCTB4MDMKLSNkZWZpbmUgU0FBNzE5MV9DVEw0X1ZOT0lfU0hJRlQJMAotI2RlZmluZSBTQUE3MTkxX0NUTDRfVk5PSV8zCTB4MDMKLSNkZWZpbmUgU0FBNzE5MV9DVEw0X1ZOT0lfMgkweDAyCi0jZGVmaW5lIFNBQTcxOTFfQ1RMNF9WTk9JXzEJMHgwMQotI2RlZmluZSBTQUE3MTkxX0NUTDRfVk5PSV8wCTB4MDAKLQotLyogQ2hyb21pbmFuY2UgR2FpbiBDb250cm9sIFJlZ2lzdGVyIGRlZmluaXRpb25zCi0gKiAtIGZvciBRQU0tbW9kdWxhdGVkIGlucHV0IHNpZ25hbHMsIGVmZmVjdHMgb3V0cHV0IGFtcGxpdHVkZQotICogKFNFQ0FNIGdhaW4gZml4ZWQpCi0gKiAobm9taW5hbCB2YWx1ZXMgZm9yIFVWIENDSVIgbGV2ZWwpICovCi0jZGVmaW5lIFNBQTcxOTFfQ0hDVl9OVFNDCTB4MmMKLSNkZWZpbmUgU0FBNzE5MV9DSENWX1BBTAkweDU5Ci0KLS8qIERyaXZlciBpbnRlcmZhY2UgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgU0FBNzE5MV9JTlBVVF9DT01QT1NJVEUJMAotI2RlZmluZSBTQUE3MTkxX0lOUFVUX1NWSURFTwkxCi0KLSNkZWZpbmUgU0FBNzE5MV9OT1JNX1BBTAkxCi0jZGVmaW5lIFNBQTcxOTFfTk9STV9OVFNDCTIKLSNkZWZpbmUgU0FBNzE5MV9OT1JNX1NFQ0FNCTMKLQotc3RydWN0IHNhYTcxOTFfc3RhdHVzIHsKLQkvKiAwPW5vIHNpZ25hbCwgMT1zaWduYWwgZGV0ZWN0ZWQgKi8KLQlpbnQgc2lnbmFsOwotCS8qIDA9NTBoeiAocGFsKSBzaWduYWwsIDE9NjBoeiAobnRzYykgc2lnbmFsICovCi0JaW50IHNpZ25hbF82MGh6OwotCS8qIDA9bm8gY29sb3IgZGV0ZWN0ZWQsIDE9Y29sb3IgZGV0ZWN0ZWQgKi8KLQlpbnQgY29sb3I7Ci0KLQkvKiBjdXJyZW50IFNBQTcxOTFfSU5QVVRfICovCi0JaW50IGlucHV0OwotCS8qIGN1cnJlbnQgU0FBNzE5MV9OT1JNXyAqLwotCWludCBub3JtOwotfTsKLQotI2RlZmluZSBTQUE3MTkxX0JBTkRQQVNTX01JTgkJMHgwMAotI2RlZmluZSBTQUE3MTkxX0JBTkRQQVNTX01BWAkJMHgwMwotI2RlZmluZSBTQUE3MTkxX0JBTkRQQVNTX0RFRkFVTFQJMHgwMAotCi0jZGVmaW5lIFNBQTcxOTFfQkFORFBBU1NfV0VJR0hUX01JTgkweDAwCi0jZGVmaW5lIFNBQTcxOTFfQkFORFBBU1NfV0VJR0hUX01BWAkweDAzCi0jZGVmaW5lIFNBQTcxOTFfQkFORFBBU1NfV0VJR0hUX0RFRkFVTFQJMHgwMQotCi0jZGVmaW5lIFNBQTcxOTFfQ09SSU5HX01JTgkJMHgwMAotI2RlZmluZSBTQUE3MTkxX0NPUklOR19NQVgJCTB4MDMKLSNkZWZpbmUgU0FBNzE5MV9DT1JJTkdfREVGQVVMVAkJMHgwMAotCi0jZGVmaW5lIFNBQTcxOTFfSFVFX01JTgkJCTB4MDAKLSNkZWZpbmUgU0FBNzE5MV9IVUVfTUFYCQkJMHhmZgotI2RlZmluZSBTQUE3MTkxX0hVRV9ERUZBVUxUCQkweDgwCi0KLSNkZWZpbmUgU0FBNzE5MV9WVFJDX01JTgkJMHgwMAotI2RlZmluZSBTQUE3MTkxX1ZUUkNfTUFYCQkweDAxCi0jZGVmaW5lIFNBQTcxOTFfVlRSQ19ERUZBVUxUCQkweDAwCi0KLSNkZWZpbmUgU0FBNzE5MV9GT1JDRV9DT0xPVVJfTUlOCTB4MDAKLSNkZWZpbmUgU0FBNzE5MV9GT1JDRV9DT0xPVVJfTUFYCTB4MDEKLSNkZWZpbmUgU0FBNzE5MV9GT1JDRV9DT0xPVVJfREVGQVVMVAkweDAwCi0KLSNkZWZpbmUgU0FBNzE5MV9DSFJPTUFfR0FJTl9NSU4JCTB4MDAKLSNkZWZpbmUgU0FBNzE5MV9DSFJPTUFfR0FJTl9NQVgJCTB4MDMKLSNkZWZpbmUgU0FBNzE5MV9DSFJPTUFfR0FJTl9ERUZBVUxUCTB4MDAKLQotI2RlZmluZSBTQUE3MTkxX0xVTUFfREVMQVlfTUlOCQktMHgwNAotI2RlZmluZSBTQUE3MTkxX0xVTUFfREVMQVlfTUFYCQkweDAzCi0jZGVmaW5lIFNBQTcxOTFfTFVNQV9ERUxBWV9ERUZBVUxUCTB4MDEKLQotI2RlZmluZSBTQUE3MTkxX1ZOUl9NSU4JCQkweDAwCi0jZGVmaW5lIFNBQTcxOTFfVk5SX01BWAkJCTB4MDMKLSNkZWZpbmUgU0FBNzE5MV9WTlJfREVGQVVMVAkJMHgwMAotCi0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTUwkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMCkKLSNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTX1dFSUdIVAkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMSkKLSNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX0NPUklORwkJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDIpCi0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVIJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDMpCi0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9DSFJPTUFfR0FJTgkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgNCkKLSNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX1ZUUkMJCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA1KQotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfTFVNQV9ERUxBWQkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgNikKLSNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX1ZOUgkJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDcpCi0KLSNkZWZpbmUJREVDT0RFUl9TQUE3MTkxX0dFVF9TVEFUVVMJX0lPUignZCcsIDE5NSwgc3RydWN0IHNhYTcxOTFfc3RhdHVzKQotI2RlZmluZQlERUNPREVSX1NBQTcxOTFfU0VUX05PUk0JX0lPVygnZCcsIDE5NiwgaW50KQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS92aW5vL3Zpbm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS92aW5vL3Zpbm8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM4NTM1Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdmluby92aW5vLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MzQ1ICswLDAgQEAKLS8qCi0gKiBEcml2ZXIgZm9yIHRoZSBWSU5PIChWaWRlbyBJbiBObyBPdXQpIHN5c3RlbSBmb3VuZCBpbiBTR0kgSW5keXMuCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwyMDA1IE1pa2FlbCBOb3VzaWFpbmVuIDx0bW5vdXNpYUBjYy5odXQuZmk+Ci0gKgotICogQmFzZWQgb24gdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIGRyaXZlciBmb3IgMi40IGtlcm5lbHMgYnk6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgTGFkaXNsYXYgTWljaGwgPGxhZGlzQGxpbnV4LW1pcHMub3JnPgotICoKLSAqIHY0bDJfZGV2aWNlL3Y0bDJfc3ViZGV2IGNvbnZlcnNpb24gYnk6Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+Ci0gKgotICogTm90ZTogdGhpcyBjb252ZXJzaW9uIGlzIHVudGVzdGVkISBQbGVhc2UgY29udGFjdCB0aGUgbGludXgtbWVkaWEKLSAqIG1haWxpbmdsaXN0IGlmIHlvdSBjYW4gdGVzdCB0aGlzLCB0b2dldGhlciB3aXRoIHRoZSB0ZXN0IHJlc3VsdHMuCi0gKi8KLQotLyoKLSAqIFRPRE86Ci0gKiAtIHJlbW92ZSAibWFyayBwYWdlcyByZXNlcnZlZC1oYWNrcyIgZnJvbSBtZW1vcnkgYWxsb2NhdGlvbiBjb2RlCi0gKiAgIGFuZCBpbXBsZW1lbnQgZmF1bHQoKQotICogLSBjaGVjayBkZWNpbWF0aW9uLCBjYWxjdWxhdGluZyBhbmQgcmVwb3J0aW5nIGltYWdlIHNpemUgd2hlbgotICogICB1c2luZyBkZWNpbWF0aW9uCi0gKiAtIGltcGxlbWVudCByZWFkKCksIHVzZXIgbW9kZSBidWZmZXJzIGFuZCBvdmVybGF5ICg/KQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgva21vZC5oPgotCi0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi0jaW5jbHVkZSA8YXNtL3BhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vc2dpL2lwMjIuaD4KLSNpbmNsdWRlIDxhc20vc2dpL21jLmg+Ci0KLSNpbmNsdWRlICJ2aW5vLmgiCi0jaW5jbHVkZSAic2FhNzE5MS5oIgotI2luY2x1ZGUgImluZHljYW0uaCIKLQotLyogVW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBnZXQgbG90cyBhbmQgbG90cyBvZiAobW9zdGx5IHVzZWxlc3MpCi0gKiBkZWJ1ZyBpbmZvLgotICogTm90ZSB0aGF0IHRoZSBkZWJ1ZyBvdXRwdXQgYWxzbyBzbG93cyBkb3duIHRoZSBkcml2ZXIgc2lnbmlmaWNhbnRseSAqLwotLy8gI2RlZmluZSBWSU5PX0RFQlVHCi0vLyAjZGVmaW5lIFZJTk9fREVCVUdfSU5UCi0KLSNkZWZpbmUgVklOT19NT0RVTEVfVkVSU0lPTiAiMC4wLjciCi0KLU1PRFVMRV9ERVNDUklQVElPTigiU0dJIFZJTk8gVmlkZW80TGludXgyIGRyaXZlciIpOwotTU9EVUxFX1ZFUlNJT04oVklOT19NT0RVTEVfVkVSU0lPTik7Ci1NT0RVTEVfQVVUSE9SKCJNaWthZWwgTm91c2lhaW5lbiA8dG1ub3VzaWFAY2MuaHV0LmZpPiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0jaWZkZWYgVklOT19ERUJVRwotI2RlZmluZSBkcHJpbnRrKHguLi4pIHByaW50aygiVklOTzogIiB4KTsKLSNlbHNlCi0jZGVmaW5lIGRwcmludGsoeC4uLikKLSNlbmRpZgotCi0jZGVmaW5lIFZJTk9fTk9fQ0hBTk5FTAkJCTAKLSNkZWZpbmUgVklOT19DSEFOTkVMX0EJCQkxCi0jZGVmaW5lIFZJTk9fQ0hBTk5FTF9CCQkJMgotCi0jZGVmaW5lIFZJTk9fUEFMX1dJRFRICQkJNzY4Ci0jZGVmaW5lIFZJTk9fUEFMX0hFSUdIVAkJCTU3NgotI2RlZmluZSBWSU5PX05UU0NfV0lEVEgJCQk2NDAKLSNkZWZpbmUgVklOT19OVFNDX0hFSUdIVAkJNDgwCi0KLSNkZWZpbmUgVklOT19NSU5fV0lEVEgJCQkzMgotI2RlZmluZSBWSU5PX01JTl9IRUlHSFQJCQkzMgotCi0jZGVmaW5lIFZJTk9fQ0xJUFBJTkdfU1RBUlRfT0REX0QxCTEKLSNkZWZpbmUgVklOT19DTElQUElOR19TVEFSVF9PRERfUEFMCTE1Ci0jZGVmaW5lIFZJTk9fQ0xJUFBJTkdfU1RBUlRfT0REX05UU0MJMTIKLQotI2RlZmluZSBWSU5PX0NMSVBQSU5HX1NUQVJUX0VWRU5fRDEJMgotI2RlZmluZSBWSU5PX0NMSVBQSU5HX1NUQVJUX0VWRU5fUEFMCTE1Ci0jZGVmaW5lIFZJTk9fQ0xJUFBJTkdfU1RBUlRfRVZFTl9OVFNDCTEyCi0KLSNkZWZpbmUgVklOT19JTlBVVF9DSEFOTkVMX0NPVU5UCTMKLQotLyogdGhlIG51bWJlciBpcyB0aGUgaW5kZXggZm9yIHZpbm9faW5wdXRzICovCi0jZGVmaW5lIFZJTk9fSU5QVVRfTk9ORQkJCS0xCi0jZGVmaW5lIFZJTk9fSU5QVVRfQ09NUE9TSVRFCQkwCi0jZGVmaW5lIFZJTk9fSU5QVVRfU1ZJREVPCQkxCi0jZGVmaW5lIFZJTk9fSU5QVVRfRDEJCQkyCi0KLSNkZWZpbmUgVklOT19QQUdFX1JBVElPCQkJKFBBR0VfU0laRSAvIFZJTk9fUEFHRV9TSVpFKQotCi0jZGVmaW5lIFZJTk9fRklGT19USFJFU0hPTERfREVGQVVMVAkxNgotCi0jZGVmaW5lIFZJTk9fRlJBTUVCVUZGRVJfU0laRQkJKChWSU5PX1BBTF9XSURUSCBcCi0JCQkJCSAgKiBWSU5PX1BBTF9IRUlHSFQgKiA0IFwKLQkJCQkJICArIDMgKiBQQUdFX1NJWkUpICYgfihQQUdFX1NJWkUgLSAxKSkKLQotI2RlZmluZSBWSU5PX0ZSQU1FQlVGRkVSX0NPVU5UX01BWAk4Ci0KLSNkZWZpbmUgVklOT19GUkFNRUJVRkZFUl9VTlVTRUQJCTAKLSNkZWZpbmUgVklOT19GUkFNRUJVRkZFUl9JTl9VU0UJCTEKLSNkZWZpbmUgVklOT19GUkFNRUJVRkZFUl9SRUFEWQkJMgotCi0jZGVmaW5lIFZJTk9fUVVFVUVfRVJST1IJCS0xCi0jZGVmaW5lIFZJTk9fUVVFVUVfTUFHSUMJCTB4MjAwNTAxMjUKLQotI2RlZmluZSBWSU5PX01FTU9SWV9OT05FCQkwCi0jZGVmaW5lIFZJTk9fTUVNT1JZX01NQVAJCTEKLSNkZWZpbmUgVklOT19NRU1PUllfVVNFUlBUUgkJMgotCi0jZGVmaW5lIFZJTk9fRFVNTVlfREVTQ19DT1VOVAkJNAotI2RlZmluZSBWSU5PX0RFU0NfRkVUQ0hfREVMQVkJCTUJLyogbWljcm9zZWNvbmRzICovCi0KLSNkZWZpbmUgVklOT19NQVhfRlJBTUVfU0tJUF9DT1VOVAkxMjgKLQotLyogdGhlIG51bWJlciBpcyB0aGUgaW5kZXggZm9yIHZpbm9fZGF0YV9mb3JtYXRzICovCi0jZGVmaW5lIFZJTk9fREFUQV9GTVRfTk9ORQkJLTEKLSNkZWZpbmUgVklOT19EQVRBX0ZNVF9HUkVZCQkwCi0jZGVmaW5lIFZJTk9fREFUQV9GTVRfUkdCMzMyCQkxCi0jZGVmaW5lIFZJTk9fREFUQV9GTVRfUkdCMzIJCTIKLSNkZWZpbmUgVklOT19EQVRBX0ZNVF9ZVVYJCTMKLQotI2RlZmluZSBWSU5PX0RBVEFfRk1UX0NPVU5UCQk0Ci0KLS8qIHRoZSBudW1iZXIgaXMgdGhlIGluZGV4IGZvciB2aW5vX2RhdGFfbm9ybXMgKi8KLSNkZWZpbmUgVklOT19EQVRBX05PUk1fTk9ORQkJLTEKLSNkZWZpbmUgVklOT19EQVRBX05PUk1fTlRTQwkJMAotI2RlZmluZSBWSU5PX0RBVEFfTk9STV9QQUwJCTEKLSNkZWZpbmUgVklOT19EQVRBX05PUk1fU0VDQU0JCTIKLSNkZWZpbmUgVklOT19EQVRBX05PUk1fRDEJCTMKLQotI2RlZmluZSBWSU5PX0RBVEFfTk9STV9DT1VOVAkJNAotCi0vKiBJMkMgY29udHJvbGxlciBmbGFncyAqLwotI2RlZmluZSBTR0lfSTJDX0ZPUkNFX0lETEUJCSgwIDw8IDApCi0jZGVmaW5lIFNHSV9JMkNfTk9UX0lETEUJCSgxIDw8IDApCi0jZGVmaW5lIFNHSV9JMkNfV1JJVEUJCQkoMCA8PCAxKQotI2RlZmluZSBTR0lfSTJDX1JFQUQJCQkoMSA8PCAxKQotI2RlZmluZSBTR0lfSTJDX1JFTEVBU0VfQlVTCQkoMCA8PCAyKQotI2RlZmluZSBTR0lfSTJDX0hPTERfQlVTCQkoMSA8PCAyKQotI2RlZmluZSBTR0lfSTJDX1hGRVJfRE9ORQkJKDAgPDwgNCkKLSNkZWZpbmUgU0dJX0kyQ19YRkVSX0JVU1kJCSgxIDw8IDQpCi0jZGVmaW5lIFNHSV9JMkNfQUNLCQkJKDAgPDwgNSkKLSNkZWZpbmUgU0dJX0kyQ19OQUNLCQkJKDEgPDwgNSkKLSNkZWZpbmUgU0dJX0kyQ19CVVNfT0sJCQkoMCA8PCA3KQotI2RlZmluZSBTR0lfSTJDX0JVU19FUlIJCQkoMSA8PCA3KQotCi0vKiBJbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9ucyAqLwotCi1zdHJ1Y3Qgdmlub19pbnB1dCB7Ci0JY2hhciAqbmFtZTsKLQl2NGwyX3N0ZF9pZCBzdGQ7Ci19OwotCi1zdHJ1Y3Qgdmlub19jbGlwcGluZyB7Ci0JdW5zaWduZWQgaW50IGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbTsKLX07Ci0KLXN0cnVjdCB2aW5vX2RhdGFfZm9ybWF0IHsKLQkvKiB0aGUgZGVzY3JpcHRpb24gKi8KLQljaGFyICpkZXNjcmlwdGlvbjsKLQkvKiBieXRlcyBwZXIgcGl4ZWwgKi8KLQl1bnNpZ25lZCBpbnQgYnBwOwotCS8qIFY0TDIgZm91cmNjIGNvZGUgKi8KLQlfX3UzMiBwaXhlbGZvcm1hdDsKLQkvKiBWNEwyIGNvbG9yc3BhY2UgKGR1aCEpICovCi0JZW51bSB2NGwyX2NvbG9yc3BhY2UgY29sb3JzcGFjZTsKLX07Ci0KLXN0cnVjdCB2aW5vX2RhdGFfbm9ybSB7Ci0JY2hhciAqZGVzY3JpcHRpb247Ci0JdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQ7Ci0Jc3RydWN0IHZpbm9fY2xpcHBpbmcgb2RkOwotCXN0cnVjdCB2aW5vX2NsaXBwaW5nIGV2ZW47Ci0KLQl2NGwyX3N0ZF9pZCBzdGQ7Ci0JdW5zaWduZWQgaW50IGZwc19taW4sIGZwc19tYXg7Ci0JX191MzIgZnJhbWVsaW5lczsKLX07Ci0KLXN0cnVjdCB2aW5vX2Rlc2NyaXB0b3JfdGFibGUgewotCS8qIHRoZSBudW1iZXIgb2YgUEFHRV9TSVpFIHNpemVkIHBhZ2VzIGluIHRoZSBidWZmZXIgKi8KLQl1bnNpZ25lZCBpbnQgcGFnZV9jb3VudDsKLQkvKiB2aXJ0dWFsIChrbWFsbG9jJ2QpIHBvaW50ZXJzIHRvIHRoZSBhY3R1YWwgZGF0YQotCSAqIChpbiBQQUdFX1NJWkUgY2h1bmtzLCB1c2VkIHdpdGggbW1hcCBzdHJlYW1pbmcpICovCi0JdW5zaWduZWQgbG9uZyAqdmlydHVhbDsKLQotCS8qIGNwdSBhZGRyZXNzIGZvciB0aGUgVklOTyBkZXNjcmlwdG9yIHRhYmxlCi0JICogKGNvbnRhaW5zIERNQSBhZGRyZXNzZXMsIFZJTk9fUEFHRV9TSVpFIGNodW5rcykgKi8KLQl1bnNpZ25lZCBsb25nICpkbWFfY3B1OwotCS8qIGRtYSBhZGRyZXNzIGZvciB0aGUgVklOTyBkZXNjcmlwdG9yIHRhYmxlCi0JICogKGNvbnRhaW5zIERNQSBhZGRyZXNzZXMsIFZJTk9fUEFHRV9TSVpFIGNodW5rcykgKi8KLQlkbWFfYWRkcl90IGRtYTsKLX07Ci0KLXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyIHsKLQkvKiBpZGVudGlmaWVyIG51Ym1lciAqLwotCXVuc2lnbmVkIGludCBpZDsKLQkvKiB0aGUgbGVuZ3RoIG9mIHRoZSB3aG9sZSBidWZmZXIgKi8KLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQkvKiB0aGUgbGVuZ3RoIG9mIGFjdHVhbCBkYXRhIGluIGJ1ZmZlciAqLwotCXVuc2lnbmVkIGludCBkYXRhX3NpemU7Ci0JLyogdGhlIGRhdGEgZm9ybWF0ICovCi0JdW5zaWduZWQgaW50IGRhdGFfZm9ybWF0OwotCS8qIHRoZSBzdGF0ZSBvZiBidWZmZXIgZGF0YSAqLwotCXVuc2lnbmVkIGludCBzdGF0ZTsKLQkvKiBpcyB0aGUgYnVmZmVyIG1hcHBlZCBpbiB1c2VyIHNwYWNlPyAqLwotCXVuc2lnbmVkIGludCBtYXBfY291bnQ7Ci0JLyogbWVtb3J5IG9mZnNldCBmb3IgbW1hcCgpICovCi0JdW5zaWduZWQgaW50IG9mZnNldDsKLQkvKiBmcmFtZSBjb3VudGVyICovCi0JdW5zaWduZWQgaW50IGZyYW1lX2NvdW50ZXI7Ci0JLyogdGltZXN0YW1wICh3cml0dGVuIHdoZW4gaW1hZ2UgY2FwdHVyZSBmaW5pc2hlcykgKi8KLQlzdHJ1Y3QgdGltZXZhbCB0aW1lc3RhbXA7Ci0KLQlzdHJ1Y3Qgdmlub19kZXNjcmlwdG9yX3RhYmxlIGRlc2NfdGFibGU7Ci0KLQlzcGlubG9ja190IHN0YXRlX2xvY2s7Ci19OwotCi1zdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlcl9maWZvIHsKLQl1bnNpZ25lZCBpbnQgbGVuZ3RoOwotCi0JdW5zaWduZWQgaW50IHVzZWQ7Ci0JdW5zaWduZWQgaW50IGhlYWQ7Ci0JdW5zaWduZWQgaW50IHRhaWw7Ci0KLQl1bnNpZ25lZCBpbnQgZGF0YVtWSU5PX0ZSQU1FQlVGRkVSX0NPVU5UX01BWF07Ci19OwotCi1zdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlcl9xdWV1ZSB7Ci0JdW5zaWduZWQgaW50IG1hZ2ljOwotCi0JLyogVklOT19NRU1PUllfTk9ORSwgVklOT19NRU1PUllfTU1BUCBvciBWSU5PX01FTU9SWV9VU0VSUFRSICovCi0JdW5zaWduZWQgaW50IHR5cGU7Ci0JdW5zaWduZWQgaW50IGxlbmd0aDsKLQotCS8qIGRhdGEgZmllbGQgb2YgaW4gYW5kIG91dCBjb250YWluIGluZGV4IG51bWJlcnMgZm9yIGJ1ZmZlciAqLwotCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyX2ZpZm8gaW47Ci0Jc3RydWN0IHZpbm9fZnJhbWVidWZmZXJfZmlmbyBvdXQ7Ci0KLQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqYnVmZmVyW1ZJTk9fRlJBTUVCVUZGRVJfQ09VTlRfTUFYXTsKLQotCXNwaW5sb2NrX3QgcXVldWVfbG9jazsKLQlzdHJ1Y3QgbXV0ZXggcXVldWVfbXV0ZXg7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgZnJhbWVfd2FpdF9xdWV1ZTsKLX07Ci0KLXN0cnVjdCB2aW5vX2ludGVycnVwdF9kYXRhIHsKLQlzdHJ1Y3QgdGltZXZhbCB0aW1lc3RhbXA7Ci0JdW5zaWduZWQgaW50IGZyYW1lX2NvdW50ZXI7Ci0JdW5zaWduZWQgaW50IHNraXBfY291bnQ7Ci0JdW5zaWduZWQgaW50IHNraXA7Ci19OwotCi1zdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzIHsKLQl1bnNpZ25lZCBpbnQgY2hhbm5lbDsKLQotCWludCBpbnB1dDsKLQl1bnNpZ25lZCBpbnQgZGF0YV9mb3JtYXQ7Ci0JdW5zaWduZWQgaW50IGRhdGFfbm9ybTsKLQlzdHJ1Y3Qgdmlub19jbGlwcGluZyBjbGlwcGluZzsKLQl1bnNpZ25lZCBpbnQgZGVjaW1hdGlvbjsKLQl1bnNpZ25lZCBpbnQgbGluZV9zaXplOwotCXVuc2lnbmVkIGludCBhbHBoYTsKLQl1bnNpZ25lZCBpbnQgZnBzOwotCXVuc2lnbmVkIGludCBmcmFtZXJ0X3JlZzsKLQotCXVuc2lnbmVkIGludCBmaWZvX3RocmVzaG9sZDsKLQotCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyX3F1ZXVlIGZiX3F1ZXVlOwotCi0JLyogbnVtYmVyIG9mIHRoZSBjdXJyZW50IGZpZWxkICovCi0JdW5zaWduZWQgaW50IGZpZWxkOwotCi0JLyogcmVhZCBpbiBwcm9ncmVzcyAqLwotCWludCByZWFkaW5nOwotCS8qIHN0cmVhbWluZyBpcyBhY3RpdmUgKi8KLQlpbnQgc3RyZWFtaW5nOwotCS8qIHRoZSBkcml2ZXIgaXMgY3VycmVudGx5IHByb2Nlc3NpbmcgdGhlIHF1ZXVlICovCi0JaW50IGNhcHR1cmluZzsKLQotCXN0cnVjdCBtdXRleCBtdXRleDsKLQlzcGlubG9ja190IGNhcHR1cmVfbG9jazsKLQotCXVuc2lnbmVkIGludCB1c2VyczsKLQotCXN0cnVjdCB2aW5vX2ludGVycnVwdF9kYXRhIGludF9kYXRhOwotCi0JLyogVjRMIHN1cHBvcnQgKi8KLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwotfTsKLQotc3RydWN0IHZpbm9fc2V0dGluZ3MgewotCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKLQlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzIGE7Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyBiOwotCi0JLyogdGhlIGNoYW5uZWwgd2hpY2ggb3ducyB0aGlzIGNsaWVudDoKLQkgKiBWSU5PX05PX0NIQU5ORUwsIFZJTk9fQ0hBTk5FTF9BIG9yIFZJTk9fQ0hBTk5FTF9CICovCi0JdW5zaWduZWQgaW50IGRlY29kZXJfb3duZXI7Ci0Jc3RydWN0IHY0bDJfc3ViZGV2ICpkZWNvZGVyOwotCXVuc2lnbmVkIGludCBjYW1lcmFfb3duZXI7Ci0Jc3RydWN0IHY0bDJfc3ViZGV2ICpjYW1lcmE7Ci0KLQkvKiBhIGxvY2sgZm9yIHZpbm8gcmVnaXN0ZXIgYWNjZXNzICovCi0Jc3BpbmxvY2tfdCB2aW5vX2xvY2s7Ci0JLyogYSBsb2NrIGZvciBjaGFubmVsIGlucHV0IGNoYW5nZXMgKi8KLQlzcGlubG9ja190IGlucHV0X2xvY2s7Ci0KLQl1bnNpZ25lZCBsb25nIGR1bW15X3BhZ2U7Ci0Jc3RydWN0IHZpbm9fZGVzY3JpcHRvcl90YWJsZSBkdW1teV9kZXNjX3RhYmxlOwotfTsKLQotLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KLQotLyoKLSAqIFVzaW5nIHZpbm9fcGl4ZWxfY29udmVyc2lvbiB0aGUgQUJHUjMyLWZvcm1hdCBwaXhlbHMgc3VwcGxpZWQKLSAqIGJ5IHRoZSBWSU5PIGNoaXAgY2FuIGJlIGNvbnZlcnRlZCB0byBtb3JlIGNvbW1vbiBmb3JtYXRzCi0gKiBsaWtlIFJHQkEzMiAob3IgcHJvYmFibHkgUkdCMjQgaW4gdGhlIGZ1dHVyZSkuIFRoaXMgd2F5IHdlCi0gKiBjYW4gZ2l2ZSBvdXQgZGF0YSB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgY29ycmVjdGx5IHdpdGgKLSAqIHRoZSBWNEwyLWRlZmluaXRpb25zLgotICoKLSAqIFRoZSBwaXhlbCBmb3JtYXQgaXMgc3BlY2lmaWVkIGFzIFJHQkEzMiB3aGVuIG5vIGNvbnZlcnNpb24KLSAqIGlzIHVzZWQuCi0gKgotICogTm90ZSB0aGF0IHRoaXMgb25seSBhZmZlY3RzIHRoZSAzMi1iaXQgYml0IGRlcHRoLgotICoKLSAqIFVzZSBub24temVybyB2YWx1ZSB0byBlbmFibGUgY29udmVyc2lvbi4KLSAqLwotc3RhdGljIGludCB2aW5vX3BpeGVsX2NvbnZlcnNpb247Ci0KLW1vZHVsZV9wYXJhbV9uYW1lZChwaXhlbGNvbnYsIHZpbm9fcGl4ZWxfY29udmVyc2lvbiwgaW50LCAwKTsKLQotTU9EVUxFX1BBUk1fREVTQyhwaXhlbGNvbnYsCi0JCSAiZW5hYmxlIHBpeGVsIGNvbnZlcnNpb24gKG5vbi16ZXJvIHZhbHVlIGVuYWJsZXMpIik7Ci0KLS8qIEludGVybmFsIGRhdGEgc3RydWN0dXJlcyAqLwotCi1zdGF0aWMgc3RydWN0IHNnaV92aW5vICp2aW5vOwotCi1zdGF0aWMgc3RydWN0IHZpbm9fc2V0dGluZ3MgKnZpbm9fZHJ2ZGF0YTsKLQotI2RlZmluZSBjYW1lcmFfY2FsbChvLCBmLCBhcmdzLi4uKSBcCi0JdjRsMl9zdWJkZXZfY2FsbCh2aW5vX2RydmRhdGEtPmNhbWVyYSwgbywgZiwgIyNhcmdzKQotI2RlZmluZSBkZWNvZGVyX2NhbGwobywgZiwgYXJncy4uLikgXAotCXY0bDJfc3ViZGV2X2NhbGwodmlub19kcnZkYXRhLT5kZWNvZGVyLCBvLCBmLCAjI2FyZ3MpCi0KLXN0YXRpYyBjb25zdCBjaGFyICp2aW5vX2RyaXZlcl9uYW1lID0gInZpbm8iOwotc3RhdGljIGNvbnN0IGNoYXIgKnZpbm9fZHJpdmVyX2Rlc2NyaXB0aW9uID0gIlNHSSBWSU5PIjsKLXN0YXRpYyBjb25zdCBjaGFyICp2aW5vX2J1c19uYW1lID0gIkdJTzY0IGJ1cyI7Ci1zdGF0aWMgY29uc3QgY2hhciAqdmlub192ZGV2X25hbWVfYSA9ICJTR0kgVklOTyBDaGFubmVsIEEiOwotc3RhdGljIGNvbnN0IGNoYXIgKnZpbm9fdmRldl9uYW1lX2IgPSAiU0dJIFZJTk8gQ2hhbm5lbCBCIjsKLQotc3RhdGljIHZvaWQgdmlub19jYXB0dXJlX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBjaGFubmVsKTsKLQotREVDTEFSRV9UQVNLTEVUKHZpbm9fdGFza2xldF9hLCB2aW5vX2NhcHR1cmVfdGFza2xldCwgVklOT19DSEFOTkVMX0EpOwotREVDTEFSRV9UQVNLTEVUKHZpbm9fdGFza2xldF9iLCB2aW5vX2NhcHR1cmVfdGFza2xldCwgVklOT19DSEFOTkVMX0IpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHZpbm9faW5wdXQgdmlub19pbnB1dHNbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJDb21wb3NpdGUiLAotCQkuc3RkCQk9IFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwKLQkJfCBWNEwyX1NURF9TRUNBTSwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJTLVZpZGVvIiwKLQkJLnN0ZAkJPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMCi0JCXwgVjRMMl9TVERfU0VDQU0sCi0JfSwgewotCQkubmFtZQkJPSAiRDEvSW5keUNhbSIsCi0JCS5zdGQJCT0gVjRMMl9TVERfTlRTQywKLQl9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHZpbm9fZGF0YV9mb3JtYXQgdmlub19kYXRhX2Zvcm1hdHNbXSA9IHsKLQl7Ci0JCS5kZXNjcmlwdGlvbgk9ICI4LWJpdCBncmV5c2NhbGUiLAotCQkuYnBwCQk9IDEsCi0JCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9HUkVZLAotCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0sCi0JfSwgewotCQkuZGVzY3JpcHRpb24JPSAiOC1iaXQgZGl0aGVyZWQgUkdCIDMtMy0yIiwKLQkJLmJwcAkJPSAxLAotCQkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfUkdCMzMyLAotCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCX0sIHsKLQkJLmRlc2NyaXB0aW9uCT0gIjMyLWJpdCBSR0IiLAotCQkuYnBwCQk9IDQsCi0JCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9SR0IzMiwKLQkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQl9LCB7Ci0JCS5kZXNjcmlwdGlvbgk9ICJZVVYgNDoyOjIiLAotCQkuYnBwCQk9IDIsCi0JCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9ZVVlWLCAvLyBYWFg6IHN3YXBwZWQ/Ci0JCS5jb2xvcnNwYWNlCT0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKLQl9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHZpbm9fZGF0YV9ub3JtIHZpbm9fZGF0YV9ub3Jtc1tdID0gewotCXsKLQkJLmRlc2NyaXB0aW9uCT0gIk5UU0MiLAotCQkuc3RkCQk9IFY0TDJfU1REX05UU0MsCi0JCS5mcHNfbWluCT0gNiwKLQkJLmZwc19tYXgJPSAzMCwKLQkJLmZyYW1lbGluZXMJPSA1MjUsCi0JCS53aWR0aAkJPSBWSU5PX05UU0NfV0lEVEgsCi0JCS5oZWlnaHQJCT0gVklOT19OVFNDX0hFSUdIVCwKLQkJLm9kZAkJPSB7Ci0JCQkudG9wCT0gVklOT19DTElQUElOR19TVEFSVF9PRERfTlRTQywKLQkJCS5sZWZ0CT0gMCwKLQkJCS5ib3R0b20JPSBWSU5PX0NMSVBQSU5HX1NUQVJUX09ERF9OVFNDCi0JCQkrIFZJTk9fTlRTQ19IRUlHSFQgLyAyIC0gMSwKLQkJCS5yaWdodAk9IFZJTk9fTlRTQ19XSURUSCwKLQkJfSwKLQkJLmV2ZW4JCT0gewotCQkJLnRvcAk9IFZJTk9fQ0xJUFBJTkdfU1RBUlRfRVZFTl9OVFNDLAotCQkJLmxlZnQJPSAwLAotCQkJLmJvdHRvbQk9IFZJTk9fQ0xJUFBJTkdfU1RBUlRfRVZFTl9OVFNDCi0JCQkrIFZJTk9fTlRTQ19IRUlHSFQgLyAyIC0gMSwKLQkJCS5yaWdodAk9IFZJTk9fTlRTQ19XSURUSCwKLQkJfSwKLQl9LCB7Ci0JCS5kZXNjcmlwdGlvbgk9ICJQQUwiLAotCQkuc3RkCQk9IFY0TDJfU1REX1BBTCwKLQkJLmZwc19taW4JPSA1LAotCQkuZnBzX21heAk9IDI1LAotCQkuZnJhbWVsaW5lcwk9IDYyNSwKLQkJLndpZHRoCQk9IFZJTk9fUEFMX1dJRFRILAotCQkuaGVpZ2h0CQk9IFZJTk9fUEFMX0hFSUdIVCwKLQkJLm9kZAkJPSB7Ci0JCQkudG9wCT0gVklOT19DTElQUElOR19TVEFSVF9PRERfUEFMLAotCQkJLmxlZnQJPSAwLAotCQkJLmJvdHRvbQk9IFZJTk9fQ0xJUFBJTkdfU1RBUlRfT0REX1BBTAotCQkJKyBWSU5PX1BBTF9IRUlHSFQgLyAyIC0gMSwKLQkJCS5yaWdodAk9IFZJTk9fUEFMX1dJRFRILAotCQl9LAotCQkuZXZlbgkJPSB7Ci0JCQkudG9wCT0gVklOT19DTElQUElOR19TVEFSVF9FVkVOX1BBTCwKLQkJCS5sZWZ0CT0gMCwKLQkJCS5ib3R0b20JPSBWSU5PX0NMSVBQSU5HX1NUQVJUX0VWRU5fUEFMCi0JCQkrIFZJTk9fUEFMX0hFSUdIVCAvIDIgLSAxLAotCQkJLnJpZ2h0CT0gVklOT19QQUxfV0lEVEgsCi0JCX0sCi0JfSwgewotCQkuZGVzY3JpcHRpb24JPSAiU0VDQU0iLAotCQkuc3RkCQk9IFY0TDJfU1REX1NFQ0FNLAotCQkuZnBzX21pbgk9IDUsCi0JCS5mcHNfbWF4CT0gMjUsCi0JCS5mcmFtZWxpbmVzCT0gNjI1LAotCQkud2lkdGgJCT0gVklOT19QQUxfV0lEVEgsCi0JCS5oZWlnaHQJCT0gVklOT19QQUxfSEVJR0hULAotCQkub2RkCQk9IHsKLQkJCS50b3AJPSBWSU5PX0NMSVBQSU5HX1NUQVJUX09ERF9QQUwsCi0JCQkubGVmdAk9IDAsCi0JCQkuYm90dG9tCT0gVklOT19DTElQUElOR19TVEFSVF9PRERfUEFMCi0JCQkrIFZJTk9fUEFMX0hFSUdIVCAvIDIgLSAxLAotCQkJLnJpZ2h0CT0gVklOT19QQUxfV0lEVEgsCi0JCX0sCi0JCS5ldmVuCQk9IHsKLQkJCS50b3AJPSBWSU5PX0NMSVBQSU5HX1NUQVJUX0VWRU5fUEFMLAotCQkJLmxlZnQJPSAwLAotCQkJLmJvdHRvbQk9IFZJTk9fQ0xJUFBJTkdfU1RBUlRfRVZFTl9QQUwKLQkJCSsgVklOT19QQUxfSEVJR0hUIC8gMiAtIDEsCi0JCQkucmlnaHQJPSBWSU5PX1BBTF9XSURUSCwKLQkJfSwKLQl9LCB7Ci0JCS5kZXNjcmlwdGlvbgk9ICJOVFNDL0QxIiwKLQkJLnN0ZAkJPSBWNEwyX1NURF9OVFNDLAotCQkuZnBzX21pbgk9IDYsCi0JCS5mcHNfbWF4CT0gMzAsCi0JCS5mcmFtZWxpbmVzCT0gNTI1LAotCQkud2lkdGgJCT0gVklOT19OVFNDX1dJRFRILAotCQkuaGVpZ2h0CQk9IFZJTk9fTlRTQ19IRUlHSFQsCi0JCS5vZGQJCT0gewotCQkJLnRvcAk9IFZJTk9fQ0xJUFBJTkdfU1RBUlRfT0REX0QxLAotCQkJLmxlZnQJPSAwLAotCQkJLmJvdHRvbQk9IFZJTk9fQ0xJUFBJTkdfU1RBUlRfT0REX0QxCi0JCQkrIFZJTk9fTlRTQ19IRUlHSFQgLyAyIC0gMSwKLQkJCS5yaWdodAk9IFZJTk9fTlRTQ19XSURUSCwKLQkJfSwKLQkJLmV2ZW4JCT0gewotCQkJLnRvcAk9IFZJTk9fQ0xJUFBJTkdfU1RBUlRfRVZFTl9EMSwKLQkJCS5sZWZ0CT0gMCwKLQkJCS5ib3R0b20JPSBWSU5PX0NMSVBQSU5HX1NUQVJUX0VWRU5fRDEKLQkJCSsgVklOT19OVFNDX0hFSUdIVCAvIDIgLSAxLAotCQkJLnJpZ2h0CT0gVklOT19OVFNDX1dJRFRILAotCQl9LAotCX0KLX07Ci0KLSNkZWZpbmUgVklOT19JTkRZQ0FNX1Y0TDJfQ09OVFJPTF9DT1VOVAkJOQotCi1zdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgdmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbXSA9IHsKLQl7Ci0JCS5pZCA9IFY0TDJfQ0lEX0FVVE9HQUlOLAotCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JCS5uYW1lID0gIkF1dG9tYXRpYyBHYWluIENvbnRyb2wiLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gMSwKLQkJLnN0ZXAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fQUdDX0RFRkFVTFQsCi0JfSwgewotCQkuaWQgPSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0UsCi0JCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkJLm5hbWUgPSAiQXV0b21hdGljIFdoaXRlIEJhbGFuY2UiLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gMSwKLQkJLnN0ZXAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fQVdCX0RFRkFVTFQsCi0JfSwgewotCQkuaWQgPSBWNEwyX0NJRF9HQUlOLAotCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lID0gIkdhaW4iLAotCQkubWluaW11bSA9IElORFlDQU1fR0FJTl9NSU4sCi0JCS5tYXhpbXVtID0gSU5EWUNBTV9HQUlOX01BWCwKLQkJLnN0ZXAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fR0FJTl9ERUZBVUxULAotCX0sIHsKLQkJLmlkID0gSU5EWUNBTV9DT05UUk9MX1JFRF9TQVRVUkFUSU9OLAotCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lID0gIlJlZCBTYXR1cmF0aW9uIiwKLQkJLm1pbmltdW0gPSBJTkRZQ0FNX1JFRF9TQVRVUkFUSU9OX01JTiwKLQkJLm1heGltdW0gPSBJTkRZQ0FNX1JFRF9TQVRVUkFUSU9OX01BWCwKLQkJLnN0ZXAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fUkVEX1NBVFVSQVRJT05fREVGQVVMVCwKLQl9LCB7Ci0JCS5pZCA9IElORFlDQU1fQ09OVFJPTF9CTFVFX1NBVFVSQVRJT04sCi0JCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgPSAiQmx1ZSBTYXR1cmF0aW9uIiwKLQkJLm1pbmltdW0gPSBJTkRZQ0FNX0JMVUVfU0FUVVJBVElPTl9NSU4sCi0JCS5tYXhpbXVtID0gSU5EWUNBTV9CTFVFX1NBVFVSQVRJT05fTUFYLAotCQkuc3RlcCA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9CTFVFX1NBVFVSQVRJT05fREVGQVVMVCwKLQl9LCB7Ci0JCS5pZCA9IFY0TDJfQ0lEX1JFRF9CQUxBTkNFLAotCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lID0gIlJlZCBCYWxhbmNlIiwKLQkJLm1pbmltdW0gPSBJTkRZQ0FNX1JFRF9CQUxBTkNFX01JTiwKLQkJLm1heGltdW0gPSBJTkRZQ0FNX1JFRF9CQUxBTkNFX01BWCwKLQkJLnN0ZXAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fUkVEX0JBTEFOQ0VfREVGQVVMVCwKLQl9LCB7Ci0JCS5pZCA9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKLQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkubmFtZSA9ICJCbHVlIEJhbGFuY2UiLAotCQkubWluaW11bSA9IElORFlDQU1fQkxVRV9CQUxBTkNFX01JTiwKLQkJLm1heGltdW0gPSBJTkRZQ0FNX0JMVUVfQkFMQU5DRV9NQVgsCi0JCS5zdGVwID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSBJTkRZQ0FNX0JMVUVfQkFMQU5DRV9ERUZBVUxULAotCX0sIHsKLQkJLmlkID0gVjRMMl9DSURfRVhQT1NVUkUsCi0JCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgPSAiU2h1dHRlciBDb250cm9sIiwKLQkJLm1pbmltdW0gPSBJTkRZQ0FNX1NIVVRURVJfTUlOLAotCQkubWF4aW11bSA9IElORFlDQU1fU0hVVFRFUl9NQVgsCi0JCS5zdGVwID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSBJTkRZQ0FNX1NIVVRURVJfREVGQVVMVCwKLQl9LCB7Ci0JCS5pZCA9IFY0TDJfQ0lEX0dBTU1BLAotCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lID0gIkdhbW1hIiwKLQkJLm1pbmltdW0gPSBJTkRZQ0FNX0dBTU1BX01JTiwKLQkJLm1heGltdW0gPSBJTkRZQ0FNX0dBTU1BX01BWCwKLQkJLnN0ZXAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fR0FNTUFfREVGQVVMVCwKLQl9Ci19OwotCi0jZGVmaW5lIFZJTk9fU0FBNzE5MV9WNEwyX0NPTlRST0xfQ09VTlQJCTkKLQotc3RydWN0IHY0bDJfcXVlcnljdHJsIHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW10gPSB7Ci0JewotCQkuaWQgPSBWNEwyX0NJRF9IVUUsCi0JCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgPSAiSHVlIiwKLQkJLm1pbmltdW0gPSBTQUE3MTkxX0hVRV9NSU4sCi0JCS5tYXhpbXVtID0gU0FBNzE5MV9IVUVfTUFYLAotCQkuc3RlcCA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gU0FBNzE5MV9IVUVfREVGQVVMVCwKLQl9LCB7Ci0JCS5pZCA9IFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTUywKLQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkubmFtZSA9ICJMdW1pbmFuY2UgQmFuZHBhc3MiLAotCQkubWluaW11bSA9IFNBQTcxOTFfQkFORFBBU1NfTUlOLAotCQkubWF4aW11bSA9IFNBQTcxOTFfQkFORFBBU1NfTUFYLAotCQkuc3RlcCA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gU0FBNzE5MV9CQU5EUEFTU19ERUZBVUxULAotCX0sIHsKLQkJLmlkID0gU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTX1dFSUdIVCwKLQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkubmFtZSA9ICJMdW1pbmFuY2UgQmFuZHBhc3MgV2VpZ2h0IiwKLQkJLm1pbmltdW0gPSBTQUE3MTkxX0JBTkRQQVNTX1dFSUdIVF9NSU4sCi0JCS5tYXhpbXVtID0gU0FBNzE5MV9CQU5EUEFTU19XRUlHSFRfTUFYLAotCQkuc3RlcCA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gU0FBNzE5MV9CQU5EUEFTU19XRUlHSFRfREVGQVVMVCwKLQl9LCB7Ci0JCS5pZCA9IFNBQTcxOTFfQ09OVFJPTF9DT1JJTkcsCi0JCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgPSAiSEYgTHVtaW5hbmNlIENvcmluZyIsCi0JCS5taW5pbXVtID0gU0FBNzE5MV9DT1JJTkdfTUlOLAotCQkubWF4aW11bSA9IFNBQTcxOTFfQ09SSU5HX01BWCwKLQkJLnN0ZXAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfQ09SSU5HX0RFRkFVTFQsCi0JfSwgewotCQkuaWQgPSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSLAotCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JCS5uYW1lID0gIkZvcmNlIENvbG91ciIsCi0JCS5taW5pbXVtID0gU0FBNzE5MV9GT1JDRV9DT0xPVVJfTUlOLAotCQkubWF4aW11bSA9IFNBQTcxOTFfRk9SQ0VfQ09MT1VSX01BWCwKLQkJLnN0ZXAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfRk9SQ0VfQ09MT1VSX0RFRkFVTFQsCi0JfSwgewotCQkuaWQgPSBTQUE3MTkxX0NPTlRST0xfQ0hST01BX0dBSU4sCi0JCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJLm5hbWUgPSAiQ2hyb21pbmFuY2UgR2FpbiBDb250cm9sIiwKLQkJLm1pbmltdW0gPSBTQUE3MTkxX0NIUk9NQV9HQUlOX01JTiwKLQkJLm1heGltdW0gPSBTQUE3MTkxX0NIUk9NQV9HQUlOX01BWCwKLQkJLnN0ZXAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfQ0hST01BX0dBSU5fREVGQVVMVCwKLQl9LCB7Ci0JCS5pZCA9IFNBQTcxOTFfQ09OVFJPTF9WVFJDLAotCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JCS5uYW1lID0gIlZUUiBUaW1lIENvbnN0YW50IiwKLQkJLm1pbmltdW0gPSBTQUE3MTkxX1ZUUkNfTUlOLAotCQkubWF4aW11bSA9IFNBQTcxOTFfVlRSQ19NQVgsCi0JCS5zdGVwID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX1ZUUkNfREVGQVVMVCwKLQl9LCB7Ci0JCS5pZCA9IFNBQTcxOTFfQ09OVFJPTF9MVU1BX0RFTEFZLAotCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCS5uYW1lID0gIkx1bWluYW5jZSBEZWxheSBDb21wZW5zYXRpb24iLAotCQkubWluaW11bSA9IFNBQTcxOTFfTFVNQV9ERUxBWV9NSU4sCi0JCS5tYXhpbXVtID0gU0FBNzE5MV9MVU1BX0RFTEFZX01BWCwKLQkJLnN0ZXAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfTFVNQV9ERUxBWV9ERUZBVUxULAotCX0sIHsKLQkJLmlkID0gU0FBNzE5MV9DT05UUk9MX1ZOUiwKLQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkubmFtZSA9ICJWZXJ0aWNhbCBOb2lzZSBSZWR1Y3Rpb24iLAotCQkubWluaW11bSA9IFNBQTcxOTFfVk5SX01JTiwKLQkJLm1heGltdW0gPSBTQUE3MTkxX1ZOUl9NQVgsCi0JCS5zdGVwID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX1ZOUl9ERUZBVUxULAotCX0KLX07Ci0KLS8qIFZJTk8gZnJhbWVidWZmZXIvRE1BIGRlc2NyaXB0b3IgbWFuYWdlbWVudCAqLwotCi1zdGF0aWMgdm9pZCB2aW5vX2ZyZWVfYnVmZmVyX3dpdGhfY291bnQoc3RydWN0IHZpbm9fZnJhbWVidWZmZXIgKmZiLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGNvdW50KQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZHByaW50aygidmlub19mcmVlX2J1ZmZlcl93aXRoX2NvdW50KCk6IGNvdW50ID0gJWRcbiIsIGNvdW50KTsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZSgodm9pZCAqKWZiLT5kZXNjX3RhYmxlLnZpcnR1YWxbaV0pKTsKLQkJZG1hX3VubWFwX3NpbmdsZShOVUxMLAotCQkJCSBmYi0+ZGVzY190YWJsZS5kbWFfY3B1W1ZJTk9fUEFHRV9SQVRJTyAqIGldLAotCQkJCSBQQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7Ci0JCWZyZWVfcGFnZShmYi0+ZGVzY190YWJsZS52aXJ0dWFsW2ldKTsKLQl9Ci0KLQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLAotCQkJICBWSU5PX1BBR0VfUkFUSU8gKiAoZmItPmRlc2NfdGFibGUucGFnZV9jb3VudCArIDQpICoKLQkJCSAgc2l6ZW9mKGRtYV9hZGRyX3QpLCAodm9pZCAqKWZiLT5kZXNjX3RhYmxlLmRtYV9jcHUsCi0JCQkgIGZiLT5kZXNjX3RhYmxlLmRtYSk7Ci0Ja2ZyZWUoZmItPmRlc2NfdGFibGUudmlydHVhbCk7Ci0KLQltZW1zZXQoZmIsIDAsIHNpemVvZihzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlcikpOwotfQotCi1zdGF0aWMgdm9pZCB2aW5vX2ZyZWVfYnVmZmVyKHN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYikKLXsKLQl2aW5vX2ZyZWVfYnVmZmVyX3dpdGhfY291bnQoZmIsIGZiLT5kZXNjX3RhYmxlLnBhZ2VfY291bnQpOwotfQotCi1zdGF0aWMgaW50IHZpbm9fYWxsb2NhdGVfYnVmZmVyKHN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYiwKLQkJCQl1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBpbnQgY291bnQsIGksIGo7Ci0JaW50IHJldCA9IDA7Ci0KLQlkcHJpbnRrKCJ2aW5vX2FsbG9jYXRlX2J1ZmZlcigpOlxuIik7Ci0KLQlpZiAoc2l6ZSA8IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtc2V0KGZiLCAwLCBzaXplb2Yoc3RydWN0IHZpbm9fZnJhbWVidWZmZXIpKTsKLQotCWNvdW50ID0gKChzaXplIC8gUEFHRV9TSVpFKSArIDQpICYgfjM7Ci0KLQlkcHJpbnRrKCJ2aW5vX2FsbG9jYXRlX2J1ZmZlcigpOiBzaXplID0gJWQsIGNvdW50ID0gJWRcbiIsCi0JCXNpemUsIGNvdW50KTsKLQotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGFibGUgd2l0aCB2aXJ0dWFsIChwYWdlKSBhZGRyZXNzZXMgKi8KLQlmYi0+ZGVzY190YWJsZS52aXJ0dWFsID0KLQkJa21hbGxvYyhjb3VudCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmYi0+ZGVzY190YWJsZS52aXJ0dWFsKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGFibGUgd2l0aCBkbWEgYWRkcmVzc2VzCi0JICogKGhhcyBzcGFjZSBmb3IgZm91ciBleHRyYSBkZXNjcmlwdG9ycykgKi8KLQlmYi0+ZGVzY190YWJsZS5kbWFfY3B1ID0KLQkJZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIFZJTk9fUEFHRV9SQVRJTyAqIChjb3VudCArIDQpICoKLQkJCQkgICBzaXplb2YoZG1hX2FkZHJfdCksICZmYi0+ZGVzY190YWJsZS5kbWEsCi0JCQkJICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwotCWlmICghZmItPmRlc2NfdGFibGUuZG1hX2NwdSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX3ZpcnR1YWw7Ci0JfQotCi0JLyogYWxsb2NhdGUgcGFnZXMgZm9yIHRoZSBidWZmZXIgYW5kIGFjcXVpcmUgdGhlIGFjY29yZGluZwotCSAqIGRtYSBhZGRyZXNzZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlkbWFfYWRkcl90IGRtYV9kYXRhX2FkZHI7Ci0KLQkJZmItPmRlc2NfdGFibGUudmlydHVhbFtpXSA9Ci0JCQlnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwotCQlpZiAoIWZiLT5kZXNjX3RhYmxlLnZpcnR1YWxbaV0pIHsKLQkJCXJldCA9IC1FTk9CVUZTOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlkbWFfZGF0YV9hZGRyID0KLQkJCWRtYV9tYXBfc2luZ2xlKE5VTEwsCi0JCQkJICAgICAgICh2b2lkICopZmItPmRlc2NfdGFibGUudmlydHVhbFtpXSwKLQkJCQkgICAgICAgUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwotCi0JCWZvciAoaiA9IDA7IGogPCBWSU5PX1BBR0VfUkFUSU87IGorKykgewotCQkJZmItPmRlc2NfdGFibGUuZG1hX2NwdVtWSU5PX1BBR0VfUkFUSU8gKiBpICsgal0gPQotCQkJCWRtYV9kYXRhX2FkZHIgKyBWSU5PX1BBR0VfU0laRSAqIGo7Ci0JCX0KLQotCQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKCh2b2lkICopZmItPmRlc2NfdGFibGUudmlydHVhbFtpXSkpOwotCX0KLQotCS8qIHBhZ2VfY291bnQgbmVlZHMgdG8gYmUgc2V0IGFueXdheSwgYmVjYXVzZSB0aGUgZGVzY3JpcHRvciB0YWJsZSBoYXMKLQkgKiBiZWVuIGFsbG9jYXRlZCBhY2NvcmRpbmcgdG8gdGhpcyBudW1iZXIgKi8KLQlmYi0+ZGVzY190YWJsZS5wYWdlX2NvdW50ID0gY291bnQ7Ci0KLQlpZiAocmV0KSB7Ci0JCS8qIHRoZSBkZXNjcmlwdG9yIHdpdGggaW5kZXggaSBkb2Vzbid0IGNvbnRhaW4KLQkJICogYSB2YWxpZCBhZGRyZXNzIHlldCAqLwotCQl2aW5vX2ZyZWVfYnVmZmVyX3dpdGhfY291bnQoZmIsIGkpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCS8vZmItPnNpemUgPSBzaXplOwotCWZiLT5zaXplID0gY291bnQgKiBQQUdFX1NJWkU7Ci0JZmItPmRhdGFfZm9ybWF0ID0gVklOT19EQVRBX0ZNVF9OT05FOwotCi0JLyogc2V0IHRoZSBkbWEgc3RvcC1iaXQgZm9yIHRoZSBsYXN0IChjb3VudCsxKXRoIGRlc2NyaXB0b3IgKi8KLQlmYi0+ZGVzY190YWJsZS5kbWFfY3B1W1ZJTk9fUEFHRV9SQVRJTyAqIGNvdW50XSA9IFZJTk9fREVTQ19TVE9QOwotCXJldHVybiAwOwotCi0gb3V0X2ZyZWVfdmlydHVhbDoKLQlrZnJlZShmYi0+ZGVzY190YWJsZS52aXJ0dWFsKTsKLQlyZXR1cm4gcmV0OwotfQotCi0jaWYgMAotLyogdXNlciBidWZmZXJzIG5vdCBmdWxseSBpbXBsZW1lbnRlZCB5ZXQgKi8KLXN0YXRpYyBpbnQgdmlub19wcmVwYXJlX3VzZXJfYnVmZmVyKHN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYiwKLQkJCQkgICAgIHZvaWQgKnVzZXIsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQl1bnNpZ25lZCBpbnQgY291bnQsIGksIGo7Ci0JaW50IHJldCA9IDA7Ci0KLQlkcHJpbnRrKCJ2aW5vX3ByZXBhcmVfdXNlcl9idWZmZXIoKTpcbiIpOwotCi0JaWYgKHNpemUgPCAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1lbXNldChmYiwgMCwgc2l6ZW9mKHN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyKSk7Ci0KLQljb3VudCA9ICgoc2l6ZSAvIFBBR0VfU0laRSkpICYgfjM7Ci0KLQlkcHJpbnRrKCJ2aW5vX3ByZXBhcmVfdXNlcl9idWZmZXIoKTogc2l6ZSA9ICVkLCBjb3VudCA9ICVkXG4iLAotCQlzaXplLCBjb3VudCk7Ci0KLQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRhYmxlIHdpdGggdmlydHVhbCAocGFnZSkgYWRkcmVzc2VzICovCi0JZmItPmRlc2NfdGFibGUudmlydHVhbCA9ICh1bnNpZ25lZCBsb25nICopCi0JCWttYWxsb2MoY291bnQgKiBzaXplb2YodW5zaWduZWQgbG9uZyksIEdGUF9LRVJORUwpOwotCWlmICghZmItPmRlc2NfdGFibGUudmlydHVhbCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRhYmxlIHdpdGggZG1hIGFkZHJlc3NlcwotCSAqIChoYXMgc3BhY2UgZm9yIGZvdXIgZXh0cmEgZGVzY3JpcHRvcnMpICovCi0JZmItPmRlc2NfdGFibGUuZG1hX2NwdSA9Ci0JCWRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBWSU5PX1BBR0VfUkFUSU8gKiAoY291bnQgKyA0KSAqCi0JCQkJICAgc2l6ZW9mKGRtYV9hZGRyX3QpLCAmZmItPmRlc2NfdGFibGUuZG1hLAotCQkJCSAgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKLQlpZiAoIWZiLT5kZXNjX3RhYmxlLmRtYV9jcHUpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZV92aXJ0dWFsOwotCX0KLQotCS8qIGFsbG9jYXRlIHBhZ2VzIGZvciB0aGUgYnVmZmVyIGFuZCBhY3F1aXJlIHRoZSBhY2NvcmRpbmcKLQkgKiBkbWEgYWRkcmVzc2VzICovCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLQkJZG1hX2FkZHJfdCBkbWFfZGF0YV9hZGRyOwotCi0JCWZiLT5kZXNjX3RhYmxlLnZpcnR1YWxbaV0gPQotCQkJZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKLQkJaWYgKCFmYi0+ZGVzY190YWJsZS52aXJ0dWFsW2ldKSB7Ci0JCQlyZXQgPSAtRU5PQlVGUzsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJZG1hX2RhdGFfYWRkciA9Ci0JCQlkbWFfbWFwX3NpbmdsZShOVUxMLAotCQkJCSAgICAgICAodm9pZCAqKWZiLT5kZXNjX3RhYmxlLnZpcnR1YWxbaV0sCi0JCQkJICAgICAgIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKLQotCQlmb3IgKGogPSAwOyBqIDwgVklOT19QQUdFX1JBVElPOyBqKyspIHsKLQkJCWZiLT5kZXNjX3RhYmxlLmRtYV9jcHVbVklOT19QQUdFX1JBVElPICogaSArIGpdID0KLQkJCQlkbWFfZGF0YV9hZGRyICsgVklOT19QQUdFX1NJWkUgKiBqOwotCQl9Ci0KLQkJU2V0UGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZSgodm9pZCAqKWZiLT5kZXNjX3RhYmxlLnZpcnR1YWxbaV0pKTsKLQl9Ci0KLQkvKiBwYWdlX2NvdW50IG5lZWRzIHRvIGJlIHNldCBhbnl3YXksIGJlY2F1c2UgdGhlIGRlc2NyaXB0b3IgdGFibGUgaGFzCi0JICogYmVlbiBhbGxvY2F0ZWQgYWNjb3JkaW5nIHRvIHRoaXMgbnVtYmVyICovCi0JZmItPmRlc2NfdGFibGUucGFnZV9jb3VudCA9IGNvdW50OwotCi0JaWYgKHJldCkgewotCQkvKiB0aGUgZGVzY3JpcHRvciB3aXRoIGluZGV4IGkgZG9lc24ndCBjb250YWluCi0JCSAqIGEgdmFsaWQgYWRkcmVzcyB5ZXQgKi8KLQkJdmlub19mcmVlX2J1ZmZlcl93aXRoX2NvdW50KGZiLCBpKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQkvL2ZiLT5zaXplID0gc2l6ZTsKLQlmYi0+c2l6ZSA9IGNvdW50ICogUEFHRV9TSVpFOwotCi0JLyogc2V0IHRoZSBkbWEgc3RvcC1iaXQgZm9yIHRoZSBsYXN0IChjb3VudCsxKXRoIGRlc2NyaXB0b3IgKi8KLQlmYi0+ZGVzY190YWJsZS5kbWFfY3B1W1ZJTk9fUEFHRV9SQVRJTyAqIGNvdW50XSA9IFZJTk9fREVTQ19TVE9QOwotCXJldHVybiAwOwotCi0gb3V0X2ZyZWVfdmlydHVhbDoKLQlrZnJlZShmYi0+ZGVzY190YWJsZS52aXJ0dWFsKTsKLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHZpbm9fc3luY19idWZmZXIoc3RydWN0IHZpbm9fZnJhbWVidWZmZXIgKmZiKQotewotCWludCBpOwotCi0JZHByaW50aygidmlub19zeW5jX2J1ZmZlcigpOlxuIik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZmItPmRlc2NfdGFibGUucGFnZV9jb3VudDsgaSsrKQotCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShOVUxMLAotCQkJCQlmYi0+ZGVzY190YWJsZS5kbWFfY3B1W1ZJTk9fUEFHRV9SQVRJTyAqIGldLAotCQkJCQlQQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7Ci19Ci0KLS8qIEZyYW1lYnVmZmVyIGZpZm8gZnVuY3Rpb25zIChuZWVkIHRvIGJlIGxvY2tlZCBleHRlcm5hbGx5KSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgdmlub19maWZvX2luaXQoc3RydWN0IHZpbm9fZnJhbWVidWZmZXJfZmlmbyAqZiwKLQkJCSAgIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0JZi0+bGVuZ3RoID0gMDsKLQlmLT51c2VkID0gMDsKLQlmLT5oZWFkID0gMDsKLQlmLT50YWlsID0gMDsKLQotCWlmIChsZW5ndGggPiBWSU5PX0ZSQU1FQlVGRkVSX0NPVU5UX01BWCkKLQkJbGVuZ3RoID0gVklOT19GUkFNRUJVRkZFUl9DT1VOVF9NQVg7Ci0KLQlmLT5sZW5ndGggPSBsZW5ndGg7Ci19Ci0KLS8qIHJldHVybnMgdHJ1ZS9mYWxzZSAqLwotc3RhdGljIGlubGluZSBpbnQgdmlub19maWZvX2hhc19pZChzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlcl9maWZvICpmLAotCQkJCSAgIHVuc2lnbmVkIGludCBpZCkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IGYtPmhlYWQ7IGkgPT0gKGYtPnRhaWwgLSAxKTsgaSA9IChpICsgMSkgJSBmLT5sZW5ndGgpIHsKLQkJaWYgKGYtPmRhdGFbaV0gPT0gaWQpCi0JCQlyZXR1cm4gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmIDAKLS8qIHJldHVybnMgdHJ1ZS9mYWxzZSAqLwotc3RhdGljIGlubGluZSBpbnQgdmlub19maWZvX2Z1bGwoc3RydWN0IHZpbm9fZnJhbWVidWZmZXJfZmlmbyAqZikKLXsKLQlyZXR1cm4gKGYtPnVzZWQgPT0gZi0+bGVuZ3RoKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2aW5vX2ZpZm9fZ2V0X3VzZWQoc3RydWN0IHZpbm9fZnJhbWVidWZmZXJfZmlmbyAqZikKLXsKLQlyZXR1cm4gZi0+dXNlZDsKLX0KLQotc3RhdGljIGludCB2aW5vX2ZpZm9fZW5xdWV1ZShzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlcl9maWZvICpmLCB1bnNpZ25lZCBpbnQgaWQpCi17Ci0JaWYgKGlkID49IGYtPmxlbmd0aCkgewotCQlyZXR1cm4gVklOT19RVUVVRV9FUlJPUjsKLQl9Ci0KLQlpZiAodmlub19maWZvX2hhc19pZChmLCBpZCkpIHsKLQkJcmV0dXJuIFZJTk9fUVVFVUVfRVJST1I7Ci0JfQotCi0JaWYgKGYtPnVzZWQgPCBmLT5sZW5ndGgpIHsKLQkJZi0+ZGF0YVtmLT50YWlsXSA9IGlkOwotCQlmLT50YWlsID0gKGYtPnRhaWwgKyAxKSAlIGYtPmxlbmd0aDsKLQkJZi0+dXNlZCsrOwotCX0gZWxzZSB7Ci0JCXJldHVybiBWSU5PX1FVRVVFX0VSUk9SOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpbm9fZmlmb19wZWVrKHN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyX2ZpZm8gKmYsIHVuc2lnbmVkIGludCAqaWQpCi17Ci0JaWYgKGYtPnVzZWQgPiAwKSB7Ci0JCSppZCA9IGYtPmRhdGFbZi0+aGVhZF07Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIFZJTk9fUVVFVUVfRVJST1I7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19maWZvX2RlcXVldWUoc3RydWN0IHZpbm9fZnJhbWVidWZmZXJfZmlmbyAqZiwgdW5zaWduZWQgaW50ICppZCkKLXsKLQlpZiAoZi0+dXNlZCA+IDApIHsKLQkJKmlkID0gZi0+ZGF0YVtmLT5oZWFkXTsKLQkJZi0+aGVhZCA9IChmLT5oZWFkICsgMSkgJSBmLT5sZW5ndGg7Ci0JCWYtPnVzZWQtLTsKLQl9IGVsc2UgewotCQlyZXR1cm4gVklOT19RVUVVRV9FUlJPUjsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogRnJhbWVidWZmZXIgcXVldWUgZnVuY3Rpb25zICovCi0KLS8qIGV4ZWN1dGUgd2l0aCBxdWV1ZV9sb2NrIGxvY2tlZCAqLwotc3RhdGljIHZvaWQgdmlub19xdWV1ZV9mcmVlX3dpdGhfY291bnQoc3RydWN0IHZpbm9fZnJhbWVidWZmZXJfcXVldWUgKnEsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlxLT5sZW5ndGggPSAwOwotCW1lbXNldCgmcS0+aW4sIDAsIHNpemVvZihzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlcl9maWZvKSk7Ci0JbWVtc2V0KCZxLT5vdXQsIDAsIHNpemVvZihzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlcl9maWZvKSk7Ci0JZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCWRwcmludGsoInZpbm9fcXVldWVfZnJlZV93aXRoX2NvdW50KCk6IGZyZWVpbmcgYnVmZmVyICVkXG4iLAotCQkJaSk7Ci0JCXZpbm9fZnJlZV9idWZmZXIocS0+YnVmZmVyW2ldKTsKLQkJa2ZyZWUocS0+YnVmZmVyW2ldKTsKLQl9Ci0KLQlxLT50eXBlID0gVklOT19NRU1PUllfTk9ORTsKLQlxLT5tYWdpYyA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHZpbm9fcXVldWVfZnJlZShzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlcl9xdWV1ZSAqcSkKLXsKLQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2ZyZWUoKTpcbiIpOwotCi0JaWYgKHEtPm1hZ2ljICE9IFZJTk9fUVVFVUVfTUFHSUMpCi0JCXJldHVybjsKLQlpZiAocS0+dHlwZSAhPSBWSU5PX01FTU9SWV9NTUFQKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZxLT5xdWV1ZV9tdXRleCk7Ci0KLQl2aW5vX3F1ZXVlX2ZyZWVfd2l0aF9jb3VudChxLCBxLT5sZW5ndGgpOwotCi0JbXV0ZXhfdW5sb2NrKCZxLT5xdWV1ZV9tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19xdWV1ZV9pbml0KHN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyX3F1ZXVlICpxLAotCQkJICAgdW5zaWduZWQgaW50ICpsZW5ndGgpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JaW50IHJldCA9IDA7Ci0KLQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2luaXQoKTogbGVuZ3RoID0gJWRcbiIsICpsZW5ndGgpOwotCi0JaWYgKHEtPm1hZ2ljID09IFZJTk9fUVVFVUVfTUFHSUMpIHsKLQkJZHByaW50aygidmlub19xdWV1ZV9pbml0KCk6IHF1ZXVlIGFscmVhZHkgaW5pdGlhbGl6ZWQhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHEtPnR5cGUgIT0gVklOT19NRU1PUllfTk9ORSkgewotCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2luaXQoKTogcXVldWUgYWxyZWFkeSBpbml0aWFsaXplZCFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoKmxlbmd0aCA8IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbXV0ZXhfbG9jaygmcS0+cXVldWVfbXV0ZXgpOwotCi0JaWYgKCpsZW5ndGggPiBWSU5PX0ZSQU1FQlVGRkVSX0NPVU5UX01BWCkKLQkJKmxlbmd0aCA9IFZJTk9fRlJBTUVCVUZGRVJfQ09VTlRfTUFYOwotCi0JcS0+bGVuZ3RoID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCAqbGVuZ3RoOyBpKyspIHsKLQkJZHByaW50aygidmlub19xdWV1ZV9pbml0KCk6IGFsbG9jYXRpbmcgYnVmZmVyICVkXG4iLCBpKTsKLQkJcS0+YnVmZmVyW2ldID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZpbm9fZnJhbWVidWZmZXIpLAotCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKLQkJaWYgKCFxLT5idWZmZXJbaV0pIHsKLQkJCWRwcmludGsoInZpbm9fcXVldWVfaW5pdCgpOiBrbWFsbG9jKCkgZmFpbGVkXG4iKTsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldCA9IHZpbm9fYWxsb2NhdGVfYnVmZmVyKHEtPmJ1ZmZlcltpXSwKLQkJCQkJICAgVklOT19GUkFNRUJVRkZFUl9TSVpFKTsKLQkJaWYgKHJldCkgewotCQkJa2ZyZWUocS0+YnVmZmVyW2ldKTsKLQkJCWRwcmludGsoInZpbm9fcXVldWVfaW5pdCgpOiAiCi0JCQkJInZpbm9fYWxsb2NhdGVfYnVmZmVyKCkgZmFpbGVkXG4iKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcS0+YnVmZmVyW2ldLT5pZCA9IGk7Ci0JCWlmIChpID4gMCkgewotCQkJcS0+YnVmZmVyW2ldLT5vZmZzZXQgPSBxLT5idWZmZXJbaSAtIDFdLT5vZmZzZXQgKwotCQkJCXEtPmJ1ZmZlcltpIC0gMV0tPnNpemU7Ci0JCX0gZWxzZSB7Ci0JCQlxLT5idWZmZXJbaV0tPm9mZnNldCA9IDA7Ci0JCX0KLQotCQlzcGluX2xvY2tfaW5pdCgmcS0+YnVmZmVyW2ldLT5zdGF0ZV9sb2NrKTsKLQotCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2luaXQoKTogYnVmZmVyID0gJWQsIG9mZnNldCA9ICVkLCAiCi0JCQkic2l6ZSA9ICVkXG4iLCBpLCBxLT5idWZmZXJbaV0tPm9mZnNldCwKLQkJCXEtPmJ1ZmZlcltpXS0+c2l6ZSk7Ci0JfQotCi0JaWYgKHJldCkgewotCQl2aW5vX3F1ZXVlX2ZyZWVfd2l0aF9jb3VudChxLCBpKTsKLQkJKmxlbmd0aCA9IDA7Ci0JfSBlbHNlIHsKLQkJcS0+bGVuZ3RoID0gKmxlbmd0aDsKLQkJdmlub19maWZvX2luaXQoJnEtPmluLCBxLT5sZW5ndGgpOwotCQl2aW5vX2ZpZm9faW5pdCgmcS0+b3V0LCBxLT5sZW5ndGgpOwotCQlxLT50eXBlID0gVklOT19NRU1PUllfTU1BUDsKLQkJcS0+bWFnaWMgPSBWSU5PX1FVRVVFX01BR0lDOwotCX0KLQotCW11dGV4X3VubG9jaygmcS0+cXVldWVfbXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICp2aW5vX3F1ZXVlX2FkZChzdHJ1Y3QKLQkJCQkJICAgICAgIHZpbm9fZnJhbWVidWZmZXJfcXVldWUgKnEsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgaWQpCi17Ci0Jc3RydWN0IHZpbm9fZnJhbWVidWZmZXIgKnJldCA9IE5VTEw7Ci0JdW5zaWduZWQgaW50IHRvdGFsOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2FkZCgpOiBpZCA9ICVkXG4iLCBpZCk7Ci0KLQlpZiAocS0+bWFnaWMgIT0gVklOT19RVUVVRV9NQUdJQykgewotCQlyZXR1cm4gcmV0OwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAocS0+bGVuZ3RoID09IDApCi0JCWdvdG8gb3V0OwotCi0JaWYgKGlkID49IHEtPmxlbmd0aCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBub3QgbmVlZGVkPzogaWYgKHZpbm9fZmlmb19mdWxsKCZxLT5vdXQpKSB7Ci0JCWdvdG8gb3V0OwotCQl9Ki8KLQkvKiBjaGVjayB0aGF0IG91dGdvaW5nIHF1ZXVlIGlzbid0IGFscmVhZHkgZnVsbAotCSAqIChvciB0aGF0IGl0IHdvbid0IGJlY29tZSBmdWxsKSAqLwotCXRvdGFsID0gdmlub19maWZvX2dldF91c2VkKCZxLT5pbikgKwotCQl2aW5vX2ZpZm9fZ2V0X3VzZWQoJnEtPm91dCk7Ci0JaWYgKHRvdGFsID49IHEtPmxlbmd0aCkKLQkJZ290byBvdXQ7Ci0KLQlpZiAodmlub19maWZvX2VucXVldWUoJnEtPmluLCBpZCkpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gcS0+YnVmZmVyW2lkXTsKLQotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqdmlub19xdWV1ZV90cmFuc2ZlcihzdHJ1Y3QKLQkJCQkJCSAgICB2aW5vX2ZyYW1lYnVmZmVyX3F1ZXVlICpxKQotewotCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpyZXQgPSBOVUxMOwotCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYjsKLQlpbnQgaWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWRwcmludGsoInZpbm9fcXVldWVfdHJhbnNmZXIoKTpcbiIpOwotCi0JaWYgKHEtPm1hZ2ljICE9IFZJTk9fUVVFVUVfTUFHSUMpIHsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHEtPmxlbmd0aCA9PSAwKQotCQlnb3RvIG91dDsKLQotCS8vIG5vdyB0aGlzIGFjdHVhbGx5IHJlbW92ZXMgYW4gZW50cnkgZnJvbSB0aGUgaW5jb21pbmcgcXVldWUKLQlpZiAodmlub19maWZvX2RlcXVldWUoJnEtPmluLCAmaWQpKSB7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWRwcmludGsoInZpbm9fcXVldWVfdHJhbnNmZXIoKTogaWQgPSAlZFxuIiwgaWQpOwotCWZiID0gcS0+YnVmZmVyW2lkXTsKLQotCS8vIHdlIGhhdmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIG91dGdvaW5nIHF1ZXVlIGlzIG5vdCBmdWxsLCBidXQuLi4KLQlpZiAodmlub19maWZvX2VucXVldWUoJnEtPm91dCwgaWQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidmlub19xdWV1ZV90cmFuc2ZlcigpOiAiCi0JCSAgICAgICAib3V0Z29pbmcgcXVldWUgaXMgZnVsbCwgdGhpcyBzaG91bGRuJ3QgaGFwcGVuIVxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXJldCA9IGZiOwotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIHJldHVybnMgdHJ1ZS9mYWxzZSAqLwotc3RhdGljIGludCB2aW5vX3F1ZXVlX2luY29taW5nX2NvbnRhaW5zKHN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyX3F1ZXVlICpxLAotCQkJCQl1bnNpZ25lZCBpbnQgaWQpCi17Ci0JaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChxLT5tYWdpYyAhPSBWSU5PX1FVRVVFX01BR0lDKSB7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQotCWlmIChxLT5sZW5ndGggPT0gMCkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSB2aW5vX2ZpZm9faGFzX2lkKCZxLT5pbiwgaWQpOwotCi1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogcmV0dXJucyB0cnVlL2ZhbHNlICovCi1zdGF0aWMgaW50IHZpbm9fcXVldWVfb3V0Z29pbmdfY29udGFpbnMoc3RydWN0IHZpbm9fZnJhbWVidWZmZXJfcXVldWUgKnEsCi0JCQkJCXVuc2lnbmVkIGludCBpZCkKLXsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHEtPm1hZ2ljICE9IFZJTk9fUVVFVUVfTUFHSUMpIHsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHEtPmxlbmd0aCA9PSAwKQotCQlnb3RvIG91dDsKLQotCXJldCA9IHZpbm9fZmlmb19oYXNfaWQoJnEtPm91dCwgaWQpOwotCi1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB2aW5vX3F1ZXVlX2dldF9pbmNvbWluZyhzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlcl9xdWV1ZSAqcSwKLQkJCQkgICB1bnNpZ25lZCBpbnQgKnVzZWQpCi17Ci0JaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChxLT5tYWdpYyAhPSBWSU5PX1FVRVVFX01BR0lDKSB7Ci0JCXJldHVybiBWSU5PX1FVRVVFX0VSUk9SOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAocS0+bGVuZ3RoID09IDApIHsKLQkJcmV0ID0gVklOT19RVUVVRV9FUlJPUjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JKnVzZWQgPSB2aW5vX2ZpZm9fZ2V0X3VzZWQoJnEtPmluKTsKLQotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19xdWV1ZV9nZXRfb3V0Z29pbmcoc3RydWN0IHZpbm9fZnJhbWVidWZmZXJfcXVldWUgKnEsCi0JCQkJICAgdW5zaWduZWQgaW50ICp1c2VkKQotewotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAocS0+bWFnaWMgIT0gVklOT19RVUVVRV9NQUdJQykgewotCQlyZXR1cm4gVklOT19RVUVVRV9FUlJPUjsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHEtPmxlbmd0aCA9PSAwKSB7Ci0JCXJldCA9IFZJTk9fUVVFVUVfRVJST1I7Ci0JCWdvdG8gb3V0OwotCX0KLQotCSp1c2VkID0gdmlub19maWZvX2dldF91c2VkKCZxLT5vdXQpOwotCi1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotI2lmIDAKLXN0YXRpYyBpbnQgdmlub19xdWV1ZV9nZXRfdG90YWwoc3RydWN0IHZpbm9fZnJhbWVidWZmZXJfcXVldWUgKnEsCi0JCQkJdW5zaWduZWQgaW50ICp0b3RhbCkKLXsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHEtPm1hZ2ljICE9IFZJTk9fUVVFVUVfTUFHSUMpIHsKLQkJcmV0dXJuIFZJTk9fUVVFVUVfRVJST1I7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQotCWlmIChxLT5sZW5ndGggPT0gMCkgewotCQlyZXQgPSBWSU5PX1FVRVVFX0VSUk9SOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkqdG90YWwgPSB2aW5vX2ZpZm9fZ2V0X3VzZWQoJnEtPmluKSArCi0JCXZpbm9fZmlmb19nZXRfdXNlZCgmcS0+b3V0KTsKLQotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICp2aW5vX3F1ZXVlX3BlZWsoc3RydWN0Ci0JCQkJCQl2aW5vX2ZyYW1lYnVmZmVyX3F1ZXVlICpxLAotCQkJCQkJdW5zaWduZWQgaW50ICppZCkKLXsKLQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqcmV0ID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHEtPm1hZ2ljICE9IFZJTk9fUVVFVUVfTUFHSUMpIHsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHEtPmxlbmd0aCA9PSAwKQotCQlnb3RvIG91dDsKLQotCWlmICh2aW5vX2ZpZm9fcGVlaygmcS0+aW4sIGlkKSkgewotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSBxLT5idWZmZXJbKmlkXTsKLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IHZpbm9fZnJhbWVidWZmZXIgKnZpbm9fcXVldWVfcmVtb3ZlKHN0cnVjdAotCQkJCQkJICB2aW5vX2ZyYW1lYnVmZmVyX3F1ZXVlICpxLAotCQkJCQkJICB1bnNpZ25lZCBpbnQgKmlkKQotewotCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpyZXQgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JZHByaW50aygidmlub19xdWV1ZV9yZW1vdmUoKTpcbiIpOwotCi0JaWYgKHEtPm1hZ2ljICE9IFZJTk9fUVVFVUVfTUFHSUMpIHsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHEtPmxlbmd0aCA9PSAwKQotCQlnb3RvIG91dDsKLQotCWlmICh2aW5vX2ZpZm9fZGVxdWV1ZSgmcS0+b3V0LCBpZCkpIHsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZHByaW50aygidmlub19xdWV1ZV9yZW1vdmUoKTogaWQgPSAlZFxuIiwgKmlkKTsKLQlyZXQgPSBxLT5idWZmZXJbKmlkXTsKLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0Ci12aW5vX2ZyYW1lYnVmZmVyICp2aW5vX3F1ZXVlX2dldF9idWZmZXIoc3RydWN0IHZpbm9fZnJhbWVidWZmZXJfcXVldWUgKnEsCi0JCQkJCXVuc2lnbmVkIGludCBpZCkKLXsKLQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqcmV0ID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHEtPm1hZ2ljICE9IFZJTk9fUVVFVUVfTUFHSUMpIHsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHEtPmxlbmd0aCA9PSAwKQotCQlnb3RvIG91dDsKLQotCWlmIChpZCA+PSBxLT5sZW5ndGgpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gcS0+YnVmZmVyW2lkXTsKLSBvdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCB2aW5vX3F1ZXVlX2dldF9sZW5ndGgoc3RydWN0IHZpbm9fZnJhbWVidWZmZXJfcXVldWUgKnEpCi17Ci0JdW5zaWduZWQgaW50IGxlbmd0aCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChxLT5tYWdpYyAhPSBWSU5PX1FVRVVFX01BR0lDKSB7Ci0JCXJldHVybiBsZW5ndGg7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlsZW5ndGggPSBxLT5sZW5ndGg7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIGxlbmd0aDsKLX0KLQotc3RhdGljIGludCB2aW5vX3F1ZXVlX2hhc19tYXBwZWRfYnVmZmVycyhzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlcl9xdWV1ZSAqcSkKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHEtPm1hZ2ljICE9IFZJTk9fUVVFVUVfTUFHSUMpIHsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBxLT5sZW5ndGg7IGkrKykgewotCQlpZiAocS0+YnVmZmVyW2ldLT5tYXBfY291bnQgPiAwKSB7Ci0JCQlyZXQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogVklOTyBmdW5jdGlvbnMgKi8KLQotLyogZXhlY3V0ZSB3aXRoIGlucHV0X2xvY2sgbG9ja2VkICovCi1zdGF0aWMgdm9pZCB2aW5vX3VwZGF0ZV9saW5lX3NpemUoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzKQotewotCXVuc2lnbmVkIGludCB3ID0gdmNzLT5jbGlwcGluZy5yaWdodCAtIHZjcy0+Y2xpcHBpbmcubGVmdDsKLQl1bnNpZ25lZCBpbnQgZCA9IHZjcy0+ZGVjaW1hdGlvbjsKLQl1bnNpZ25lZCBpbnQgYnBwID0gdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uYnBwOwotCXVuc2lnbmVkIGludCBsc2l6ZTsKLQotCWRwcmludGsoInVwZGF0ZV9saW5lX3NpemUoKTogYmVmb3JlOiB3ID0gJWQsIGQgPSAlZCwgIgotCQkibGluZV9zaXplID0gJWRcbiIsIHcsIGQsIHZjcy0+bGluZV9zaXplKTsKLQotCS8qIGxpbmUgc2l6ZSBtdXN0IGJlIG11bHRpcGxlIG9mIDggYnl0ZXMgKi8KLQlsc2l6ZSA9IChicHAgKiAodyAvIGQpKSAmIH43OwotCXcgPSAobHNpemUgLyBicHApICogZDsKLQotCXZjcy0+Y2xpcHBpbmcucmlnaHQgPSB2Y3MtPmNsaXBwaW5nLmxlZnQgKyB3OwotCXZjcy0+bGluZV9zaXplID0gbHNpemU7Ci0KLQlkcHJpbnRrKCJ1cGRhdGVfbGluZV9zaXplKCk6IGFmdGVyOiB3ID0gJWQsIGQgPSAlZCwgIgotCQkibGluZV9zaXplID0gJWRcbiIsIHcsIGQsIHZjcy0+bGluZV9zaXplKTsKLX0KLQotLyogZXhlY3V0ZSB3aXRoIGlucHV0X2xvY2sgbG9ja2VkICovCi1zdGF0aWMgdm9pZCB2aW5vX3NldF9jbGlwcGluZyhzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgeCwgdW5zaWduZWQgaW50IHksCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgdywgdW5zaWduZWQgaW50IGgpCi17Ci0JdW5zaWduZWQgaW50IG1heHdpZHRoLCBtYXhoZWlnaHQ7Ci0JdW5zaWduZWQgaW50IGQ7Ci0KLQltYXh3aWR0aCA9IHZpbm9fZGF0YV9ub3Jtc1t2Y3MtPmRhdGFfbm9ybV0ud2lkdGg7Ci0JbWF4aGVpZ2h0ID0gdmlub19kYXRhX25vcm1zW3Zjcy0+ZGF0YV9ub3JtXS5oZWlnaHQ7Ci0JZCA9IHZjcy0+ZGVjaW1hdGlvbjsKLQotCXkgJj0gfjE7CS8qIG9kZC9ldmVuIGZpZWxkcyAqLwotCi0JaWYgKHggPiBtYXh3aWR0aCkgewotCQl4ID0gMDsKLQl9Ci0JaWYgKHkgPiBtYXhoZWlnaHQpIHsKLQkJeSA9IDA7Ci0JfQotCi0JaWYgKCgodyAvIGQpIDwgVklOT19NSU5fV0lEVEgpCi0JICAgIHx8ICgoaCAvIGQpIDwgVklOT19NSU5fSEVJR0hUKSkgewotCQl3ID0gVklOT19NSU5fV0lEVEggKiBkOwotCQloID0gVklOT19NSU5fSEVJR0hUICogZDsKLQl9Ci0KLQlpZiAoKHggKyB3KSA+IG1heHdpZHRoKSB7Ci0JCXcgPSBtYXh3aWR0aCAtIHg7Ci0JCWlmICgodyAvIGQpIDwgVklOT19NSU5fV0lEVEgpCi0JCQl4ID0gbWF4d2lkdGggLSBWSU5PX01JTl9XSURUSCAqIGQ7Ci0JfQotCWlmICgoeSArIGgpID4gbWF4aGVpZ2h0KSB7Ci0JCWggPSBtYXhoZWlnaHQgLSB5OwotCQlpZiAoKGggLyBkKSA8IFZJTk9fTUlOX0hFSUdIVCkKLQkJCXkgPSBtYXhoZWlnaHQgLSBWSU5PX01JTl9IRUlHSFQgKiBkOwotCX0KLQotCXZjcy0+Y2xpcHBpbmcubGVmdCA9IHg7Ci0JdmNzLT5jbGlwcGluZy50b3AgPSB5OwotCXZjcy0+Y2xpcHBpbmcucmlnaHQgPSB4ICsgdzsKLQl2Y3MtPmNsaXBwaW5nLmJvdHRvbSA9IHkgKyBoOwotCi0Jdmlub191cGRhdGVfbGluZV9zaXplKHZjcyk7Ci0KLQlkcHJpbnRrKCJjbGlwcGluZyAlZCwgJWQsICVkLCAlZCAvICVkIC0gJWRcbiIsCi0JCXZjcy0+Y2xpcHBpbmcubGVmdCwgdmNzLT5jbGlwcGluZy50b3AsIHZjcy0+Y2xpcHBpbmcucmlnaHQsCi0JCXZjcy0+Y2xpcHBpbmcuYm90dG9tLCB2Y3MtPmRlY2ltYXRpb24sIHZjcy0+bGluZV9zaXplKTsKLX0KLQotLyogZXhlY3V0ZSB3aXRoIGlucHV0X2xvY2sgbG9ja2VkICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdmlub19zZXRfZGVmYXVsdF9jbGlwcGluZyhzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MpCi17Ci0Jdmlub19zZXRfY2xpcHBpbmcodmNzLCAwLCAwLCB2aW5vX2RhdGFfbm9ybXNbdmNzLT5kYXRhX25vcm1dLndpZHRoLAotCQkJICB2aW5vX2RhdGFfbm9ybXNbdmNzLT5kYXRhX25vcm1dLmhlaWdodCk7Ci19Ci0KLS8qIGV4ZWN1dGUgd2l0aCBpbnB1dF9sb2NrIGxvY2tlZCAqLwotc3RhdGljIHZvaWQgdmlub19zZXRfc2NhbGluZyhzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCi0JCQkgICAgIHVuc2lnbmVkIGludCB3LCB1bnNpZ25lZCBpbnQgaCkKLXsKLQl1bnNpZ25lZCBpbnQgeCwgeSwgY3VydywgY3VyaCwgZDsKLQotCXggPSB2Y3MtPmNsaXBwaW5nLmxlZnQ7Ci0JeSA9IHZjcy0+Y2xpcHBpbmcudG9wOwotCWN1cncgPSB2Y3MtPmNsaXBwaW5nLnJpZ2h0IC0gdmNzLT5jbGlwcGluZy5sZWZ0OwotCWN1cmggPSB2Y3MtPmNsaXBwaW5nLmJvdHRvbSAtIHZjcy0+Y2xpcHBpbmcudG9wOwotCi0JZCA9IG1heChjdXJ3IC8gdywgY3VyaCAvIGgpOwotCi0JZHByaW50aygic2NhbGluZyB3OiAlZCwgaDogJWQsIGN1cnc6ICVkLCBjdXJoOiAlZCwgZDogJWRcbiIsCi0JCXcsIGgsIGN1cncsIGN1cmgsIGQpOwotCi0JaWYgKGQgPCAxKSB7Ci0JCWQgPSAxOwotCX0gZWxzZSBpZiAoZCA+IDgpIHsKLQkJZCA9IDg7Ci0JfQotCi0JdmNzLT5kZWNpbWF0aW9uID0gZDsKLQl2aW5vX3NldF9jbGlwcGluZyh2Y3MsIHgsIHksIHcgKiBkLCBoICogZCk7Ci0KLQlkcHJpbnRrKCJzY2FsaW5nICVkLCAlZCwgJWQsICVkIC8gJWQgLSAlZFxuIiwgdmNzLT5jbGlwcGluZy5sZWZ0LAotCQl2Y3MtPmNsaXBwaW5nLnRvcCwgdmNzLT5jbGlwcGluZy5yaWdodCwgdmNzLT5jbGlwcGluZy5ib3R0b20sCi0JCXZjcy0+ZGVjaW1hdGlvbiwgdmNzLT5saW5lX3NpemUpOwotfQotCi0vKiBleGVjdXRlIHdpdGggaW5wdXRfbG9jayBsb2NrZWQgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB2aW5vX3NldF9kZWZhdWx0X3NjYWxpbmcoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzKQotewotCXZpbm9fc2V0X3NjYWxpbmcodmNzLCB2Y3MtPmNsaXBwaW5nLnJpZ2h0IC0gdmNzLT5jbGlwcGluZy5sZWZ0LAotCQkJIHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApOwotfQotCi0vKiBleGVjdXRlIHdpdGggaW5wdXRfbG9jayBsb2NrZWQgKi8KLXN0YXRpYyB2b2lkIHZpbm9fc2V0X2ZyYW1lcmF0ZShzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCi0JCQkgICAgICAgdW5zaWduZWQgaW50IGZwcykKLXsKLQl1bnNpZ25lZCBpbnQgbWFzazsKLQotCXN3aXRjaCAodmNzLT5kYXRhX25vcm0pIHsKLQljYXNlIFZJTk9fREFUQV9OT1JNX05UU0M6Ci0JY2FzZSBWSU5PX0RBVEFfTk9STV9EMToKLQkJZnBzID0gKHVuc2lnbmVkIGludCkoZnBzIC8gNikgKiA2OyAvLyBGSVhNRTogcm91bmQhCi0KLQkJaWYgKGZwcyA8IHZpbm9fZGF0YV9ub3Jtc1t2Y3MtPmRhdGFfbm9ybV0uZnBzX21pbikKLQkJCWZwcyA9IHZpbm9fZGF0YV9ub3Jtc1t2Y3MtPmRhdGFfbm9ybV0uZnBzX21pbjsKLQkJaWYgKGZwcyA+IHZpbm9fZGF0YV9ub3Jtc1t2Y3MtPmRhdGFfbm9ybV0uZnBzX21heCkKLQkJCWZwcyA9IHZpbm9fZGF0YV9ub3Jtc1t2Y3MtPmRhdGFfbm9ybV0uZnBzX21heDsKLQotCQlzd2l0Y2ggKGZwcykgewotCQljYXNlIDY6Ci0JCQltYXNrID0gMHgwMDM7Ci0JCQlicmVhazsKLQkJY2FzZSAxMjoKLQkJCW1hc2sgPSAweDBjMzsKLQkJCWJyZWFrOwotCQljYXNlIDE4OgotCQkJbWFzayA9IDB4MzMzOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjQ6Ci0JCQltYXNrID0gMHgzZmY7Ci0JCQlicmVhazsKLQkJY2FzZSAzMDoKLQkJCW1hc2sgPSAweGZmZjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJbWFzayA9IFZJTk9fRlJBTUVSVF9GVUxMOwotCQl9Ci0JCXZjcy0+ZnJhbWVydF9yZWcgPSBWSU5PX0ZSQU1FUlRfUlQobWFzayk7Ci0JCWJyZWFrOwotCWNhc2UgVklOT19EQVRBX05PUk1fUEFMOgotCWNhc2UgVklOT19EQVRBX05PUk1fU0VDQU06Ci0JCWZwcyA9ICh1bnNpZ25lZCBpbnQpKGZwcyAvIDUpICogNTsgLy8gRklYTUU6IHJvdW5kIQotCi0JCWlmIChmcHMgPCB2aW5vX2RhdGFfbm9ybXNbdmNzLT5kYXRhX25vcm1dLmZwc19taW4pCi0JCQlmcHMgPSB2aW5vX2RhdGFfbm9ybXNbdmNzLT5kYXRhX25vcm1dLmZwc19taW47Ci0JCWlmIChmcHMgPiB2aW5vX2RhdGFfbm9ybXNbdmNzLT5kYXRhX25vcm1dLmZwc19tYXgpCi0JCQlmcHMgPSB2aW5vX2RhdGFfbm9ybXNbdmNzLT5kYXRhX25vcm1dLmZwc19tYXg7Ci0KLQkJc3dpdGNoIChmcHMpIHsKLQkJY2FzZSA1OgotCQkJbWFzayA9IDB4MDAzOwotCQkJYnJlYWs7Ci0JCWNhc2UgMTA6Ci0JCQltYXNrID0gMHgwYzM7Ci0JCQlicmVhazsKLQkJY2FzZSAxNToKLQkJCW1hc2sgPSAweDMzMzsKLQkJCWJyZWFrOwotCQljYXNlIDIwOgotCQkJbWFzayA9IDB4MGZmOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjU6Ci0JCQltYXNrID0gMHgzZmY7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCW1hc2sgPSBWSU5PX0ZSQU1FUlRfRlVMTDsKLQkJfQotCQl2Y3MtPmZyYW1lcnRfcmVnID0gVklOT19GUkFNRVJUX1JUKG1hc2spIHwgVklOT19GUkFNRVJUX1BBTDsKLQkJYnJlYWs7Ci0JfQotCi0JdmNzLT5mcHMgPSBmcHM7Ci19Ci0KLS8qIGV4ZWN1dGUgd2l0aCBpbnB1dF9sb2NrIGxvY2tlZCAqLwotc3RhdGljIGlubGluZSB2b2lkIHZpbm9fc2V0X2RlZmF1bHRfZnJhbWVyYXRlKHN0cnVjdAotCQkJCQkgICAgICB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcykKLXsKLQl2aW5vX3NldF9mcmFtZXJhdGUodmNzLCB2aW5vX2RhdGFfbm9ybXNbdmNzLT5kYXRhX25vcm1dLmZwc19tYXgpOwotfQotCi0vKiBWSU5PIEkyQyBidXMgZnVuY3Rpb25zICovCi0KLXN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSB7Ci0Jdm9pZCAqZGF0YTsJLyogcHJpdmF0ZSBkYXRhIGZvciBsb3dsZXZlbCByb3V0aW5lcyAqLwotCXVuc2lnbmVkICgqZ2V0Y3RybCkodm9pZCAqZGF0YSk7Ci0Jdm9pZCAoKnNldGN0cmwpKHZvaWQgKmRhdGEsIHVuc2lnbmVkIHZhbCk7Ci0JdW5zaWduZWQgKCpyZGF0YSkodm9pZCAqZGF0YSk7Ci0Jdm9pZCAoKndkYXRhKSh2b2lkICpkYXRhLCB1bnNpZ25lZCB2YWwpOwotCi0JaW50IHhmZXJfdGltZW91dDsKLQlpbnQgYWNrX3RpbWVvdXQ7Ci19OwotCi1zdGF0aWMgaW50IHdhaXRfeGZlcl9kb25lKHN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSAqYWRhcCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBhZGFwLT54ZmVyX3RpbWVvdXQ7IGkrKykgewotCQlpZiAoKGFkYXAtPmdldGN0cmwoYWRhcC0+ZGF0YSkgJiBTR0lfSTJDX1hGRVJfQlVTWSkgPT0gMCkKLQkJCXJldHVybiAwOwotCQl1ZGVsYXkoMSk7Ci0JfQotCi0JcmV0dXJuIC1FVElNRURPVVQ7Ci19Ci0KLXN0YXRpYyBpbnQgd2FpdF9hY2soc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhICphZGFwKQotewotCWludCBpOwotCi0JaWYgKHdhaXRfeGZlcl9kb25lKGFkYXApKQotCQlyZXR1cm4gLUVUSU1FRE9VVDsKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcC0+YWNrX3RpbWVvdXQ7IGkrKykgewotCQlpZiAoKGFkYXAtPmdldGN0cmwoYWRhcC0+ZGF0YSkgJiBTR0lfSTJDX05BQ0spID09IDApCi0JCQlyZXR1cm4gMDsKLQkJdWRlbGF5KDEpOwotCX0KLQotCXJldHVybiAtRVRJTUVET1VUOwotfQotCi1zdGF0aWMgaW50IGZvcmNlX2lkbGUoc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhICphZGFwKQotewotCWludCBpOwotCi0JYWRhcC0+c2V0Y3RybChhZGFwLT5kYXRhLCBTR0lfSTJDX0ZPUkNFX0lETEUpOwotCWZvciAoaSA9IDA7IGkgPCBhZGFwLT54ZmVyX3RpbWVvdXQ7IGkrKykgewotCQlpZiAoKGFkYXAtPmdldGN0cmwoYWRhcC0+ZGF0YSkgJiBTR0lfSTJDX05PVF9JRExFKSA9PSAwKQotCQkJZ290byBvdXQ7Ci0JCXVkZWxheSgxKTsKLQl9Ci0JcmV0dXJuIC1FVElNRURPVVQ7Ci1vdXQ6Ci0JaWYgKGFkYXAtPmdldGN0cmwoYWRhcC0+ZGF0YSkgJiBTR0lfSTJDX0JVU19FUlIpCi0JCXJldHVybiAtRUlPOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRvX2FkZHJlc3Moc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhICphZGFwLCB1bnNpZ25lZCBpbnQgYWRkciwKLQkJICAgICAgaW50IHJkKQotewotCWlmIChyZCkKLQkJYWRhcC0+c2V0Y3RybChhZGFwLT5kYXRhLCBTR0lfSTJDX05PVF9JRExFKTsKLQkvKiBDaGVjayBpZiBidXMgaXMgaWRsZSwgZXZlbnR1YWxseSBmb3JjZSBpdCB0byBkbyBzbyAqLwotCWlmIChhZGFwLT5nZXRjdHJsKGFkYXAtPmRhdGEpICYgU0dJX0kyQ19OT1RfSURMRSkKLQkJaWYgKGZvcmNlX2lkbGUoYWRhcCkpCi0JCQlyZXR1cm4gLUVJTzsKLQkvKiBXcml0ZSBvdXQgdGhlIGkyYyBjaGlwIGFkZHJlc3MgYW5kIHNwZWNpZnkgb3BlcmF0aW9uICovCi0JYWRhcC0+c2V0Y3RybChhZGFwLT5kYXRhLAotCQkgICAgICBTR0lfSTJDX0hPTERfQlVTIHwgU0dJX0kyQ19XUklURSB8IFNHSV9JMkNfTk9UX0lETEUpOwotCWlmIChyZCkKLQkJYWRkciB8PSAxOwotCWFkYXAtPndkYXRhKGFkYXAtPmRhdGEsIGFkZHIpOwotCWlmICh3YWl0X2FjayhhZGFwKSkKLQkJcmV0dXJuIC1FSU87Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaTJjX3JlYWQoc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhICphZGFwLCB1bnNpZ25lZCBjaGFyICpidWYsCi0JCSAgICB1bnNpZ25lZCBpbnQgbGVuKQotewotCWludCBpOwotCi0JYWRhcC0+c2V0Y3RybChhZGFwLT5kYXRhLAotCQkgICAgICBTR0lfSTJDX0hPTERfQlVTIHwgU0dJX0kyQ19SRUFEIHwgU0dJX0kyQ19OT1RfSURMRSk7Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCWlmICh3YWl0X3hmZXJfZG9uZShhZGFwKSkKLQkJCXJldHVybiAtRUlPOwotCQlidWZbaV0gPSBhZGFwLT5yZGF0YShhZGFwLT5kYXRhKTsKLQl9Ci0JYWRhcC0+c2V0Y3RybChhZGFwLT5kYXRhLCBTR0lfSTJDX1JFTEVBU0VfQlVTIHwgU0dJX0kyQ19GT1JDRV9JRExFKTsKLQotCXJldHVybiAwOwotCi19Ci0KLXN0YXRpYyBpbnQgaTJjX3dyaXRlKHN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSAqYWRhcCwgdW5zaWduZWQgY2hhciAqYnVmLAotCQkgICAgIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JaW50IGk7Ci0KLQkvKiBXZSBhcmUgYWxyZWFkeSBpbiB3cml0ZSBzdGF0ZSAqLwotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQlhZGFwLT53ZGF0YShhZGFwLT5kYXRhLCBidWZbaV0pOwotCQlpZiAod2FpdF9hY2soYWRhcCkpCi0JCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2dpX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgc3RydWN0IGkyY19tc2cgKm1zZ3MsCi0JCSAgICBpbnQgbnVtKQotewotCXN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSAqYWRhcCA9IGkyY19hZGFwLT5hbGdvX2RhdGE7Ci0Jc3RydWN0IGkyY19tc2cgKnA7Ci0JaW50IGksIGVyciA9IDA7Ci0KLQlmb3IgKGkgPSAwOyAhZXJyICYmIGkgPCBudW07IGkrKykgewotCQlwID0gJm1zZ3NbaV07Ci0JCWVyciA9IGRvX2FkZHJlc3MoYWRhcCwgcC0+YWRkciwgcC0+ZmxhZ3MgJiBJMkNfTV9SRCk7Ci0JCWlmIChlcnIgfHwgIXAtPmxlbikKLQkJCWNvbnRpbnVlOwotCQlpZiAocC0+ZmxhZ3MgJiBJMkNfTV9SRCkKLQkJCWVyciA9IGkyY19yZWFkKGFkYXAsIHAtPmJ1ZiwgcC0+bGVuKTsKLQkJZWxzZQotCQkJZXJyID0gaTJjX3dyaXRlKGFkYXAsIHAtPmJ1ZiwgcC0+bGVuKTsKLQl9Ci0KLQlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogaTsKLX0KLQotc3RhdGljIHUzMiBzZ2lfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCi17Ci0JcmV0dXJuIEkyQ19GVU5DX1NNQlVTX0VNVUw7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzZ2lfYWxnbyA9IHsKLQkubWFzdGVyX3hmZXIJPSBzZ2lfeGZlciwKLQkuZnVuY3Rpb25hbGl0eQk9IHNnaV9mdW5jLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGkyY192aW5vX2dldGN0cmwodm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gdmluby0+aTJjX2NvbnRyb2w7Ci19Ci0KLXN0YXRpYyB2b2lkIGkyY192aW5vX3NldGN0cmwodm9pZCAqZGF0YSwgdW5zaWduZWQgdmFsKQotewotCXZpbm8tPmkyY19jb250cm9sID0gdmFsOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaTJjX3Zpbm9fcmRhdGEodm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gdmluby0+aTJjX2RhdGE7Ci19Ci0KLXN0YXRpYyB2b2lkIGkyY192aW5vX3dkYXRhKHZvaWQgKmRhdGEsIHVuc2lnbmVkIHZhbCkKLXsKLQl2aW5vLT5pMmNfZGF0YSA9IHZhbDsKLX0KLQotc3RhdGljIHN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSBpMmNfc2dpX3Zpbm9fZGF0YSA9IHsKLQkuZ2V0Y3RybCA9ICZpMmNfdmlub19nZXRjdHJsLAotCS5zZXRjdHJsID0gJmkyY192aW5vX3NldGN0cmwsCi0JLnJkYXRhICAgPSAmaTJjX3Zpbm9fcmRhdGEsCi0JLndkYXRhICAgPSAmaTJjX3Zpbm9fd2RhdGEsCi0JLnhmZXJfdGltZW91dCA9IDIwMCwKLQkuYWNrX3RpbWVvdXQgID0gMTAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgdmlub19pMmNfYWRhcHRlciA9IHsKLQkubmFtZQkJCT0gIlZJTk8gSTJDIGJ1cyIsCi0JLmFsZ28JCQk9ICZzZ2lfYWxnbywKLQkuYWxnb19kYXRhCQk9ICZpMmNfc2dpX3Zpbm9fZGF0YSwKLQkub3duZXIgCQkJPSBUSElTX01PRFVMRSwKLX07Ci0KLS8qCi0gKiBQcmVwYXJlIFZJTk8gZm9yIERNQSB0cmFuc2Zlci4uLgotICogKGV4ZWN1dGUgb25seSB3aXRoIHZpbm9fbG9jayBhbmQgaW5wdXRfbG9jayBsb2NrZWQpCi0gKi8KLXN0YXRpYyBpbnQgdmlub19kbWFfc2V0dXAoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAotCQkJICBzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmIpCi17Ci0JdTMyIGN0cmwsIGludHI7Ci0Jc3RydWN0IHNnaV92aW5vX2NoYW5uZWwgKmNoOwotCWNvbnN0IHN0cnVjdCB2aW5vX2RhdGFfbm9ybSAqbm9ybTsKLQotCWRwcmludGsoInZpbm9fZG1hX3NldHVwKCk6XG4iKTsKLQotCXZjcy0+ZmllbGQgPSAwOwotCWZiLT5mcmFtZV9jb3VudGVyID0gMDsKLQotCWNoID0gKHZjcy0+Y2hhbm5lbCA9PSBWSU5PX0NIQU5ORUxfQSkgPyAmdmluby0+YSA6ICZ2aW5vLT5iOwotCW5vcm0gPSAmdmlub19kYXRhX25vcm1zW3Zjcy0+ZGF0YV9ub3JtXTsKLQotCWNoLT5wYWdlX2luZGV4ID0gMDsKLQljaC0+bGluZV9jb3VudCA9IDA7Ci0KLQkvKiBWSU5PIGxpbmUgc2l6ZSByZWdpc3RlciBpcyBzZXQgOCBieXRlcyBsZXNzIHRoYW4gYWN0dWFsICovCi0JY2gtPmxpbmVfc2l6ZSA9IHZjcy0+bGluZV9zaXplIC0gODsKLQotCS8qIGxldCBWSU5PIGtub3cgd2hlcmUgdG8gdHJhbnNmZXIgZGF0YSAqLwotCWNoLT5zdGFydF9kZXNjX3RibCA9IGZiLT5kZXNjX3RhYmxlLmRtYTsKLQljaC0+bmV4dF80X2Rlc2MgPSBmYi0+ZGVzY190YWJsZS5kbWE7Ci0KLQkvKiBnaXZlIHZpbm8gdGltZSB0byBmZXRjaCB0aGUgZmlyc3QgZm91ciBkZXNjcmlwdG9ycywgNSB1c2VjCi0JICogc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggdGltZSAqLwotCXVkZWxheShWSU5PX0RFU0NfRkVUQ0hfREVMQVkpOwotCi0JZHByaW50aygidmlub19kbWFfc2V0dXAoKTogc3RhcnQgZGVzYyA9ICUwOHgsIG5leHQgNCBkZXNjID0gJTA4eFxuIiwKLQkJY2gtPnN0YXJ0X2Rlc2NfdGJsLCBjaC0+bmV4dF80X2Rlc2MpOwotCi0JLyogc2V0IHRoZSBhbHBoYSByZWdpc3RlciAqLwotCWNoLT5hbHBoYSA9IHZjcy0+YWxwaGE7Ci0KLQkvKiBzZXQgY2xpcHBpbmcgcmVnaXN0ZXJzICovCi0JY2gtPmNsaXBfc3RhcnQgPSBWSU5PX0NMSVBfT0REKG5vcm0tPm9kZC50b3AgKyB2Y3MtPmNsaXBwaW5nLnRvcCAvIDIpIHwKLQkJVklOT19DTElQX0VWRU4obm9ybS0+ZXZlbi50b3AgKwotCQkJICAgICAgIHZjcy0+Y2xpcHBpbmcudG9wIC8gMikgfAotCQlWSU5PX0NMSVBfWCh2Y3MtPmNsaXBwaW5nLmxlZnQpOwotCWNoLT5jbGlwX2VuZCA9IFZJTk9fQ0xJUF9PREQobm9ybS0+b2RkLnRvcCArCi0JCQkJICAgICB2Y3MtPmNsaXBwaW5nLmJvdHRvbSAvIDIgLSAxKSB8Ci0JCVZJTk9fQ0xJUF9FVkVOKG5vcm0tPmV2ZW4udG9wICsKLQkJCSAgICAgICB2Y3MtPmNsaXBwaW5nLmJvdHRvbSAvIDIgLSAxKSB8Ci0JCVZJTk9fQ0xJUF9YKHZjcy0+Y2xpcHBpbmcucmlnaHQpOwotCi0JLyogc2V0IHRoZSBzaXplIG9mIGFjdHVhbCBjb250ZW50IGluIHRoZSBidWZmZXIgKERFQ0lNQVRJT04gISkgKi8KLQlmYi0+ZGF0YV9zaXplID0gKCh2Y3MtPmNsaXBwaW5nLnJpZ2h0IC0gdmNzLT5jbGlwcGluZy5sZWZ0KSAvCi0JCQkgdmNzLT5kZWNpbWF0aW9uKSAqCi0JCSgodmNzLT5jbGlwcGluZy5ib3R0b20gLSB2Y3MtPmNsaXBwaW5nLnRvcCkgLwotCQkgdmNzLT5kZWNpbWF0aW9uKSAqCi0JCXZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLmJwcDsKLQotCWNoLT5mcmFtZV9yYXRlID0gdmNzLT5mcmFtZXJ0X3JlZzsKLQotCWN0cmwgPSB2aW5vLT5jb250cm9sOwotCWludHIgPSB2aW5vLT5pbnRyX3N0YXR1czsKLQotCWlmICh2Y3MtPmNoYW5uZWwgPT0gVklOT19DSEFOTkVMX0EpIHsKLQkJLyogQWxsIGludGVycnVwdCBjb25kaXRpb25zIGZvciB0aGlzIGNoYW5uZWwgd2FzIGNsZWFyZWQKLQkJICogc28gY2xlYXIgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgYW5kIGVuYWJsZQotCQkgKiBpbnRlcnJ1cHRzICovCi0JCWludHIgJj0JflZJTk9fSU5UU1RBVF9BOwotCQljdHJsIHw9IFZJTk9fQ1RSTF9BX0lOVDsKLQotCQkvKiBlbmFibGUgc3luY2hyb25pemF0aW9uICovCi0JCWN0cmwgfD0gVklOT19DVFJMX0FfU1lOQ19FTkJMOwotCi0JCS8qIGVuYWJsZSBmcmFtZSBhc3NlbWJseSAqLwotCQljdHJsIHw9IFZJTk9fQ1RSTF9BX0lOVEVSTEVBVkVfRU5CTDsKLQotCQkvKiBzZXQgZGVjaW1hdGlvbiB1c2VkICovCi0JCWlmICh2Y3MtPmRlY2ltYXRpb24gPCAyKQotCQkJY3RybCAmPSB+VklOT19DVFJMX0FfREVDX0VOQkw7Ci0JCWVsc2UgewotCQkJY3RybCB8PSBWSU5PX0NUUkxfQV9ERUNfRU5CTDsKLQkJCWN0cmwgJj0gflZJTk9fQ1RSTF9BX0RFQ19TQ0FMRV9NQVNLOwotCQkJY3RybCB8PSAodmNzLT5kZWNpbWF0aW9uIC0gMSkgPDwKLQkJCQlWSU5PX0NUUkxfQV9ERUNfU0NBTEVfU0hJRlQ7Ci0JCX0KLQotCQkvKiBzZWxlY3QgaW5wdXQgaW50ZXJmYWNlICovCi0JCWlmICh2Y3MtPmlucHV0ID09IFZJTk9fSU5QVVRfRDEpCi0JCQljdHJsIHw9IFZJTk9fQ1RSTF9BX1NFTEVDVDsKLQkJZWxzZQotCQkJY3RybCAmPSB+VklOT19DVFJMX0FfU0VMRUNUOwotCi0JCS8qIHBhbGV0dGUgKi8KLQkJY3RybCAmPSB+KFZJTk9fQ1RSTF9BX0xVTUFfT05MWSB8IFZJTk9fQ1RSTF9BX1JHQiB8Ci0JCQkgIFZJTk9fQ1RSTF9BX0RJVEhFUik7Ci0JfSBlbHNlIHsKLQkJaW50ciAmPSB+VklOT19JTlRTVEFUX0I7Ci0JCWN0cmwgfD0gVklOT19DVFJMX0JfSU5UOwotCi0JCWN0cmwgfD0gVklOT19DVFJMX0JfU1lOQ19FTkJMOwotCQljdHJsIHw9IFZJTk9fQ1RSTF9CX0lOVEVSTEVBVkVfRU5CTDsKLQotCQlpZiAodmNzLT5kZWNpbWF0aW9uIDwgMikKLQkJCWN0cmwgJj0gflZJTk9fQ1RSTF9CX0RFQ19FTkJMOwotCQllbHNlIHsKLQkJCWN0cmwgfD0gVklOT19DVFJMX0JfREVDX0VOQkw7Ci0JCQljdHJsICY9IH5WSU5PX0NUUkxfQl9ERUNfU0NBTEVfTUFTSzsKLQkJCWN0cmwgfD0gKHZjcy0+ZGVjaW1hdGlvbiAtIDEpIDw8Ci0JCQkJVklOT19DVFJMX0JfREVDX1NDQUxFX1NISUZUOwotCi0JCX0KLQkJaWYgKHZjcy0+aW5wdXQgPT0gVklOT19JTlBVVF9EMSkKLQkJCWN0cmwgfD0gVklOT19DVFJMX0JfU0VMRUNUOwotCQllbHNlCi0JCQljdHJsICY9IH5WSU5PX0NUUkxfQl9TRUxFQ1Q7Ci0KLQkJY3RybCAmPSB+KFZJTk9fQ1RSTF9CX0xVTUFfT05MWSB8IFZJTk9fQ1RSTF9CX1JHQiB8Ci0JCQkgIFZJTk9fQ1RSTF9CX0RJVEhFUik7Ci0JfQotCi0JLyogc2V0IHBhbGV0dGUgKi8KLQlmYi0+ZGF0YV9mb3JtYXQgPSB2Y3MtPmRhdGFfZm9ybWF0OwotCi0Jc3dpdGNoICh2Y3MtPmRhdGFfZm9ybWF0KSB7Ci0JCWNhc2UgVklOT19EQVRBX0ZNVF9HUkVZOgotCQkJY3RybCB8PSAodmNzLT5jaGFubmVsID09IFZJTk9fQ0hBTk5FTF9BKSA/Ci0JCQkJVklOT19DVFJMX0FfTFVNQV9PTkxZIDogVklOT19DVFJMX0JfTFVNQV9PTkxZOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklOT19EQVRBX0ZNVF9SR0IzMjoKLQkJCWN0cmwgfD0gKHZjcy0+Y2hhbm5lbCA9PSBWSU5PX0NIQU5ORUxfQSkgPwotCQkJCVZJTk9fQ1RSTF9BX1JHQiA6IFZJTk9fQ1RSTF9CX1JHQjsKLQkJCWJyZWFrOwotCQljYXNlIFZJTk9fREFUQV9GTVRfWVVWOgotCQkJLyogbm90aGluZyBuZWVkcyB0byBiZSBkb25lICovCi0JCQlicmVhazsKLQkJY2FzZSBWSU5PX0RBVEFfRk1UX1JHQjMzMjoKLQkJCWN0cmwgfD0gKHZjcy0+Y2hhbm5lbCA9PSBWSU5PX0NIQU5ORUxfQSkgPwotCQkJCVZJTk9fQ1RSTF9BX1JHQiB8IFZJTk9fQ1RSTF9BX0RJVEhFUiA6Ci0JCQkJVklOT19DVFJMX0JfUkdCIHwgVklOT19DVFJMX0JfRElUSEVSOwotCQkJYnJlYWs7Ci0JfQotCi0Jdmluby0+aW50cl9zdGF0dXMgPSBpbnRyOwotCXZpbm8tPmNvbnRyb2wgPSBjdHJsOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIChleGVjdXRlIG9ubHkgd2l0aCB2aW5vX2xvY2sgbG9ja2VkKSAqLwotc3RhdGljIGlubGluZSB2b2lkIHZpbm9fZG1hX3N0YXJ0KHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcykKLXsKLQl1MzIgY3RybCA9IHZpbm8tPmNvbnRyb2w7Ci0KLQlkcHJpbnRrKCJ2aW5vX2RtYV9zdGFydCgpOlxuIik7Ci0JY3RybCB8PSAodmNzLT5jaGFubmVsID09IFZJTk9fQ0hBTk5FTF9BKSA/Ci0JCVZJTk9fQ1RSTF9BX0RNQV9FTkJMIDogVklOT19DVFJMX0JfRE1BX0VOQkw7Ci0Jdmluby0+Y29udHJvbCA9IGN0cmw7Ci19Ci0KLS8qIChleGVjdXRlIG9ubHkgd2l0aCB2aW5vX2xvY2sgbG9ja2VkKSAqLwotc3RhdGljIGlubGluZSB2b2lkIHZpbm9fZG1hX3N0b3Aoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzKQotewotCXUzMiBjdHJsID0gdmluby0+Y29udHJvbDsKLQotCWN0cmwgJj0gKHZjcy0+Y2hhbm5lbCA9PSBWSU5PX0NIQU5ORUxfQSkgPwotCQl+VklOT19DVFJMX0FfRE1BX0VOQkwgOiB+VklOT19DVFJMX0JfRE1BX0VOQkw7Ci0JY3RybCAmPSAodmNzLT5jaGFubmVsID09IFZJTk9fQ0hBTk5FTF9BKSA/Ci0JCX5WSU5PX0NUUkxfQV9JTlQgOiB+VklOT19DVFJMX0JfSU5UOwotCXZpbm8tPmNvbnRyb2wgPSBjdHJsOwotCWRwcmludGsoInZpbm9fZG1hX3N0b3AoKTpcbiIpOwotfQotCi0vKgotICogTG9hZCBkdW1teSBwYWdlIHRvIGRlc2NyaXB0b3IgcmVnaXN0ZXJzLiBUaGlzIHByZXZlbnRzIGdlbmVyYXRpbmcgb2YKLSAqIHNwdXJpb3VzIGludGVycnVwdHMuIChleGVjdXRlIG9ubHkgd2l0aCB2aW5vX2xvY2sgbG9ja2VkKQotICovCi1zdGF0aWMgdm9pZCB2aW5vX2NsZWFyX2ludGVycnVwdChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MpCi17Ci0Jc3RydWN0IHNnaV92aW5vX2NoYW5uZWwgKmNoOwotCi0JY2ggPSAodmNzLT5jaGFubmVsID09IFZJTk9fQ0hBTk5FTF9BKSA/ICZ2aW5vLT5hIDogJnZpbm8tPmI7Ci0KLQljaC0+cGFnZV9pbmRleCA9IDA7Ci0JY2gtPmxpbmVfY291bnQgPSAwOwotCi0JY2gtPnN0YXJ0X2Rlc2NfdGJsID0gdmlub19kcnZkYXRhLT5kdW1teV9kZXNjX3RhYmxlLmRtYTsKLQljaC0+bmV4dF80X2Rlc2MgPSB2aW5vX2RydmRhdGEtPmR1bW15X2Rlc2NfdGFibGUuZG1hOwotCi0JdWRlbGF5KFZJTk9fREVTQ19GRVRDSF9ERUxBWSk7Ci0JZHByaW50aygiY2hhbm5lbCAlYyBjbGVhciBpbnRlcnJ1cHQgY29uZGl0aW9uXG4iLAotCSAgICAgICAodmNzLT5jaGFubmVsID09IFZJTk9fQ0hBTk5FTF9BKSA/ICdBJzonQicpOwotfQotCi1zdGF0aWMgaW50IHZpbm9fY2FwdHVyZShzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCi0JCQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmIpCi17Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgZmxhZ3MyOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZiLT5zdGF0ZV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoZmItPnN0YXRlID09IFZJTk9fRlJBTUVCVUZGRVJfSU5fVVNFKQotCQllcnIgPSAtRUJVU1k7Ci0JZmItPnN0YXRlID0gVklOT19GUkFNRUJVRkZFUl9JTl9VU0U7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmYi0+c3RhdGVfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPnZpbm9fbG9jaywgZmxhZ3MpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzMik7Ci0KLQl2aW5vX2RtYV9zZXR1cCh2Y3MsIGZiKTsKLQl2aW5vX2RtYV9zdGFydCh2Y3MpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFnczIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+dmlub19sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMKLXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICp2aW5vX2NhcHR1cmVfZW5xdWV1ZShzdHJ1Y3QKLQkJCQkJICAgICAgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGludCBpbmRleCkKLXsKLQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWRwcmludGsoInZpbm9fY2FwdHVyZV9lbnF1ZXVlKCk6XG4iKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2Y3MtPmNhcHR1cmVfbG9jaywgZmxhZ3MpOwotCi0JZmIgPSB2aW5vX3F1ZXVlX2FkZCgmdmNzLT5mYl9xdWV1ZSwgaW5kZXgpOwotCWlmIChmYiA9PSBOVUxMKSB7Ci0JCWRwcmludGsoInZpbm9fY2FwdHVyZV9lbnF1ZXVlKCk6IHZpbm9fcXVldWVfYWRkKCkgZmFpbGVkLCAiCi0JCQkicXVldWUgZnVsbD9cbiIpOwotCQlnb3RvIG91dDsKLQl9Ci1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmNzLT5jYXB0dXJlX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBmYjsKLX0KLQotc3RhdGljIGludCB2aW5vX2NhcHR1cmVfbmV4dChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsIGludCBzdGFydCkKLXsKLQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7Ci0JdW5zaWduZWQgaW50IGluY29taW5nLCBpZDsKLQlpbnQgZXJyID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZHByaW50aygidmlub19jYXB0dXJlX25leHQoKTpcbiIpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZjcy0+Y2FwdHVyZV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoc3RhcnQpIHsKLQkJLyogc3RhcnQgY2FwdHVyZSBvbmx5IGlmIGNhcHR1cmUgaXNuJ3QgaW4gcHJvZ3Jlc3MgYWxyZWFkeSAqLwotCQlpZiAodmNzLT5jYXB0dXJpbmcpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZjcy0+Y2FwdHVyZV9sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JfSBlbHNlIHsKLQkJLyogY2FwdHVyZSBuZXh0IGZyYW1lOgotCQkgKiBzdG9wIGNhcHR1cmUgaWYgY2FwdHVyaW5nIGlzIG5vdCBzZXQgKi8KLQkJaWYgKCF2Y3MtPmNhcHR1cmluZykgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmNzLT5jYXB0dXJlX2xvY2ssIGZsYWdzKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JZXJyID0gdmlub19xdWV1ZV9nZXRfaW5jb21pbmcoJnZjcy0+ZmJfcXVldWUsICZpbmNvbWluZyk7Ci0JaWYgKGVycikgewotCQlkcHJpbnRrKCJ2aW5vX2NhcHR1cmVfbmV4dCgpOiB2aW5vX3F1ZXVlX2dldF9pbmNvbWluZygpICIKLQkJCSJmYWlsZWRcbiIpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGluY29taW5nID09IDApIHsKLQkJZHByaW50aygidmlub19jYXB0dXJlX25leHQoKTogbm8gYnVmZmVycyBhdmFpbGFibGVcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmYiA9IHZpbm9fcXVldWVfcGVlaygmdmNzLT5mYl9xdWV1ZSwgJmlkKTsKLQlpZiAoZmIgPT0gTlVMTCkgewotCQlkcHJpbnRrKCJ2aW5vX2NhcHR1cmVfbmV4dCgpOiB2aW5vX3F1ZXVlX3BlZWsoKSBmYWlsZWRcbiIpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoc3RhcnQpIHsKLQkJdmNzLT5jYXB0dXJpbmcgPSAxOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZjcy0+Y2FwdHVyZV9sb2NrLCBmbGFncyk7Ci0KLQllcnIgPSB2aW5vX2NhcHR1cmUodmNzLCBmYik7Ci0KLQlyZXR1cm4gZXJyOwotCi1vdXQ6Ci0JdmNzLT5jYXB0dXJpbmcgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZjcy0+Y2FwdHVyZV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB2aW5vX2lzX2NhcHR1cmluZyhzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MpCi17Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZjcy0+Y2FwdHVyZV9sb2NrLCBmbGFncyk7Ci0KLQlyZXQgPSB2Y3MtPmNhcHR1cmluZzsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZjcy0+Y2FwdHVyZV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiB3YWl0cyB1bnRpbCBhIGZyYW1lIGlzIGNhcHR1cmVkICovCi1zdGF0aWMgaW50IHZpbm9fd2FpdF9mb3JfZnJhbWUoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzKQotewotCXdhaXRfcXVldWVfdCB3YWl0OwotCWludCBlcnIgPSAwOwotCi0JZHByaW50aygidmlub193YWl0X2Zvcl9mcmFtZSgpOlxuIik7Ci0KLQlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7Ci0JLyogYWRkIG91cnNlbHZlcyBpbnRvIHdhaXQgcXVldWUgKi8KLQlhZGRfd2FpdF9xdWV1ZSgmdmNzLT5mYl9xdWV1ZS5mcmFtZV93YWl0X3F1ZXVlLCAmd2FpdCk7Ci0KLQkvKiB0byBlbnN1cmUgdGhhdCBzY2hlZHVsZV90aW1lb3V0IHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5Ci0JICogaWYgVklOTyBpbnRlcnJ1cHQgd2FzIHRyaWdnZXJlZCBtZWFud2hpbGUgKi8KLQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcygxMDApKTsKLQotCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJZXJyID0gLUVJTlRSOwotCi0JcmVtb3ZlX3dhaXRfcXVldWUoJnZjcy0+ZmJfcXVldWUuZnJhbWVfd2FpdF9xdWV1ZSwgJndhaXQpOwotCi0JZHByaW50aygidmlub193YWl0X2Zvcl9mcmFtZSgpOiB3YWl0aW5nIGZvciBmcmFtZSAlc1xuIiwKLQkJZXJyID8gImZhaWxlZCIgOiAib2siKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLS8qIHRoZSBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgUEFHRV9TSVpFICUgNCA9PSAwICovCi1zdGF0aWMgdm9pZCB2aW5vX2NvbnZlcnRfdG9fcmdiYShzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmIpIHsKLQl1bnNpZ25lZCBjaGFyICpwYWdlcHRyOwotCXVuc2lnbmVkIGludCBwYWdlLCBpOwotCXVuc2lnbmVkIGNoYXIgYTsKLQotCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBmYi0+ZGVzY190YWJsZS5wYWdlX2NvdW50OyBwYWdlKyspIHsKLQkJcGFnZXB0ciA9ICh1bnNpZ25lZCBjaGFyICopZmItPmRlc2NfdGFibGUudmlydHVhbFtwYWdlXTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgUEFHRV9TSVpFOyBpICs9IDQpIHsKLQkJCWEgPSBwYWdlcHRyWzBdOwotCQkJcGFnZXB0clswXSA9IHBhZ2VwdHJbM107Ci0JCQlwYWdlcHRyWzFdID0gcGFnZXB0clsyXTsKLQkJCXBhZ2VwdHJbMl0gPSBwYWdlcHRyWzFdOwotCQkJcGFnZXB0clszXSA9IGE7Ci0JCQlwYWdlcHRyICs9IDQ7Ci0JCX0KLQl9Ci19Ci0KLS8qIGNoZWNrcyBpZiB0aGUgYnVmZmVyIGlzIGluIGNvcnJlY3Qgc3RhdGUgYW5kIHN5bmNzIGRhdGEgKi8KLXN0YXRpYyBpbnQgdmlub19jaGVja19idWZmZXIoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAotCQkJICAgICBzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmIpCi17Ci0JaW50IGVyciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWRwcmludGsoInZpbm9fY2hlY2tfYnVmZmVyKCk6XG4iKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmYi0+c3RhdGVfbG9jaywgZmxhZ3MpOwotCXN3aXRjaCAoZmItPnN0YXRlKSB7Ci0JY2FzZSBWSU5PX0ZSQU1FQlVGRkVSX0lOX1VTRToKLQkJZXJyID0gLUVJTzsKLQkJYnJlYWs7Ci0JY2FzZSBWSU5PX0ZSQU1FQlVGRkVSX1JFQURZOgotCQl2aW5vX3N5bmNfYnVmZmVyKGZiKTsKLQkJZmItPnN0YXRlID0gVklOT19GUkFNRUJVRkZFUl9VTlVTRUQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FSU5WQUw7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZiLT5zdGF0ZV9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIWVycikgewotCQlpZiAodmlub19waXhlbF9jb252ZXJzaW9uCi0JCSAgICAmJiAoZmItPmRhdGFfZm9ybWF0ID09IFZJTk9fREFUQV9GTVRfUkdCMzIpKSB7Ci0JCQl2aW5vX2NvbnZlcnRfdG9fcmdiYShmYik7Ci0JCX0KLQl9IGVsc2UgaWYgKGVyciAmJiAoZXJyICE9IC1FSU5WQUwpKSB7Ci0JCWRwcmludGsoInZpbm9fY2hlY2tfYnVmZmVyKCk6IGJ1ZmZlciBub3QgcmVhZHlcbiIpOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPnZpbm9fbG9jaywgZmxhZ3MpOwotCQl2aW5vX2RtYV9zdG9wKHZjcyk7Ci0JCXZpbm9fY2xlYXJfaW50ZXJydXB0KHZjcyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+dmlub19sb2NrLCBmbGFncyk7Ci0JfQotCi0JcmV0dXJuIGVycjsKLX0KLQotLyogZm9yY2VmdWxseSB0ZXJtaW5hdGVzIGNhcHR1cmUgKi8KLXN0YXRpYyB2b2lkIHZpbm9fY2FwdHVyZV9zdG9wKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcykKLXsKLQl1bnNpZ25lZCBpbnQgaW5jb21pbmcgPSAwLCBvdXRnb2luZyA9IDAsIGlkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGZsYWdzMjsKLQotCWRwcmludGsoInZpbm9fY2FwdHVyZV9zdG9wKCk6XG4iKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2Y3MtPmNhcHR1cmVfbG9jaywgZmxhZ3MpOwotCi0JLyogdW5zZXQgY2FwdHVyaW5nIHRvIHN0b3AgcXVldWUgcHJvY2Vzc2luZyAqLwotCXZjcy0+Y2FwdHVyaW5nID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPnZpbm9fbG9jaywgZmxhZ3MyKTsKLQotCXZpbm9fZG1hX3N0b3AodmNzKTsKLQl2aW5vX2NsZWFyX2ludGVycnVwdCh2Y3MpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT52aW5vX2xvY2ssIGZsYWdzMik7Ci0KLQkvKiByZW1vdmUgYWxsIGl0ZW1zIGZyb20gdGhlIHF1ZXVlICovCi0JaWYgKHZpbm9fcXVldWVfZ2V0X2luY29taW5nKCZ2Y3MtPmZiX3F1ZXVlLCAmaW5jb21pbmcpKSB7Ci0JCWRwcmludGsoInZpbm9fY2FwdHVyZV9zdG9wKCk6ICIKLQkJCSJ2aW5vX3F1ZXVlX2dldF9pbmNvbWluZygpIGZhaWxlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQl3aGlsZSAoaW5jb21pbmcgPiAwKSB7Ci0JCXZpbm9fcXVldWVfdHJhbnNmZXIoJnZjcy0+ZmJfcXVldWUpOwotCi0JCWlmICh2aW5vX3F1ZXVlX2dldF9pbmNvbWluZygmdmNzLT5mYl9xdWV1ZSwgJmluY29taW5nKSkgewotCQkJZHByaW50aygidmlub19jYXB0dXJlX3N0b3AoKTogIgotCQkJCSJ2aW5vX3F1ZXVlX2dldF9pbmNvbWluZygpIGZhaWxlZFxuIik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCWlmICh2aW5vX3F1ZXVlX2dldF9vdXRnb2luZygmdmNzLT5mYl9xdWV1ZSwgJm91dGdvaW5nKSkgewotCQlkcHJpbnRrKCJ2aW5vX2NhcHR1cmVfc3RvcCgpOiAiCi0JCQkidmlub19xdWV1ZV9nZXRfb3V0Z29pbmcoKSBmYWlsZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0Jd2hpbGUgKG91dGdvaW5nID4gMCkgewotCQl2aW5vX3F1ZXVlX3JlbW92ZSgmdmNzLT5mYl9xdWV1ZSwgJmlkKTsKLQotCQlpZiAodmlub19xdWV1ZV9nZXRfb3V0Z29pbmcoJnZjcy0+ZmJfcXVldWUsICZvdXRnb2luZykpIHsKLQkJCWRwcmludGsoInZpbm9fY2FwdHVyZV9zdG9wKCk6ICIKLQkJCQkidmlub19xdWV1ZV9nZXRfb3V0Z29pbmcoKSBmYWlsZWRcbiIpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2Y3MtPmNhcHR1cmVfbG9jaywgZmxhZ3MpOwotfQotCi0jaWYgMAotc3RhdGljIGludCB2aW5vX2NhcHR1cmVfZmFpbGVkKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcykKLXsKLQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgcmV0OwotCi0JZHByaW50aygidmlub19jYXB0dXJlX2ZhaWxlZCgpOlxuIik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT52aW5vX2xvY2ssIGZsYWdzKTsKLQotCXZpbm9fZG1hX3N0b3AodmNzKTsKLQl2aW5vX2NsZWFyX2ludGVycnVwdCh2Y3MpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT52aW5vX2xvY2ssIGZsYWdzKTsKLQotCXJldCA9IHZpbm9fcXVldWVfZ2V0X2luY29taW5nKCZ2Y3MtPmZiX3F1ZXVlLCAmaSk7Ci0JaWYgKHJldCA9PSBWSU5PX1FVRVVFX0VSUk9SKSB7Ci0JCWRwcmludGsoInZpbm9fcXVldWVfZ2V0X2luY29taW5nKCkgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmIChpID09IDApIHsKLQkJLyogbm8gYnVmZmVycyB0byBwcm9jZXNzICovCi0JCXJldHVybiAwOwotCX0KLQotCWZiID0gdmlub19xdWV1ZV9wZWVrKCZ2Y3MtPmZiX3F1ZXVlLCAmaSk7Ci0JaWYgKGZiID09IE5VTEwpIHsKLQkJZHByaW50aygidmlub19xdWV1ZV9wZWVrKCkgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZiLT5zdGF0ZV9sb2NrLCBmbGFncyk7Ci0JaWYgKGZiLT5zdGF0ZSA9PSBWSU5PX0ZSQU1FQlVGRkVSX0lOX1VTRSkgewotCQlmYi0+c3RhdGUgPSBWSU5PX0ZSQU1FQlVGRkVSX1VOVVNFRDsKLQkJdmlub19xdWV1ZV90cmFuc2ZlcigmdmNzLT5mYl9xdWV1ZSk7Ci0JCXZpbm9fcXVldWVfcmVtb3ZlKCZ2Y3MtPmZiX3F1ZXVlLCAmaSk7Ci0JCS8qIHdlIHNob3VsZCBhY3R1YWxseSBkaXNjYXJkIHRoZSBuZXdlc3QgZnJhbWUsCi0JCSAqIGJ1dCB3aG8gY2FyZXMgLi4uICovCi0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZiLT5zdGF0ZV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCB2aW5vX3NraXBfZnJhbWUoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzKQotewotCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBpZDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2Y3MtPmNhcHR1cmVfbG9jaywgZmxhZ3MpOwotCWZiID0gdmlub19xdWV1ZV9wZWVrKCZ2Y3MtPmZiX3F1ZXVlLCAmaWQpOwotCWlmICghZmIpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmNzLT5jYXB0dXJlX2xvY2ssIGZsYWdzKTsKLQkJZHByaW50aygidmlub19za2lwX2ZyYW1lKCk6IHZpbm9fcXVldWVfcGVlaygpIGZhaWxlZCFcbiIpOwotCQlyZXR1cm47Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZjcy0+Y2FwdHVyZV9sb2NrLCBmbGFncyk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmItPnN0YXRlX2xvY2ssIGZsYWdzKTsKLQlmYi0+c3RhdGUgPSBWSU5PX0ZSQU1FQlVGRkVSX1VOVVNFRDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmYi0+c3RhdGVfbG9jaywgZmxhZ3MpOwotCi0Jdmlub19jYXB0dXJlX25leHQodmNzLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgdmlub19mcmFtZV9kb25lKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcykKLXsKLQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2Y3MtPmNhcHR1cmVfbG9jaywgZmxhZ3MpOwotCWZiID0gdmlub19xdWV1ZV90cmFuc2ZlcigmdmNzLT5mYl9xdWV1ZSk7Ci0JaWYgKCFmYikgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2Y3MtPmNhcHR1cmVfbG9jaywgZmxhZ3MpOwotCQlkcHJpbnRrKCJ2aW5vX2ZyYW1lX2RvbmUoKTogdmlub19xdWV1ZV90cmFuc2ZlcigpIGZhaWxlZCFcbiIpOwotCQlyZXR1cm47Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZjcy0+Y2FwdHVyZV9sb2NrLCBmbGFncyk7Ci0KLQlmYi0+ZnJhbWVfY291bnRlciA9IHZjcy0+aW50X2RhdGEuZnJhbWVfY291bnRlcjsKLQltZW1jcHkoJmZiLT50aW1lc3RhbXAsICZ2Y3MtPmludF9kYXRhLnRpbWVzdGFtcCwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmItPnN0YXRlX2xvY2ssIGZsYWdzKTsKLQlpZiAoZmItPnN0YXRlID09IFZJTk9fRlJBTUVCVUZGRVJfSU5fVVNFKQotCQlmYi0+c3RhdGUgPSBWSU5PX0ZSQU1FQlVGRkVSX1JFQURZOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZiLT5zdGF0ZV9sb2NrLCBmbGFncyk7Ci0KLQl3YWtlX3VwKCZ2Y3MtPmZiX3F1ZXVlLmZyYW1lX3dhaXRfcXVldWUpOwotCi0Jdmlub19jYXB0dXJlX25leHQodmNzLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgdmlub19jYXB0dXJlX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBjaGFubmVsKSB7Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzOwotCi0JdmNzID0gKGNoYW5uZWwgPT0gVklOT19DSEFOTkVMX0EpCi0JCT8gJnZpbm9fZHJ2ZGF0YS0+YSA6ICZ2aW5vX2RydmRhdGEtPmI7Ci0KLQlpZiAodmNzLT5pbnRfZGF0YS5za2lwKQotCQl2Y3MtPmludF9kYXRhLnNraXBfY291bnQrKzsKLQotCWlmICh2Y3MtPmludF9kYXRhLnNraXAgJiYgKHZjcy0+aW50X2RhdGEuc2tpcF9jb3VudAotCQkJCSAgIDw9IFZJTk9fTUFYX0ZSQU1FX1NLSVBfQ09VTlQpKSB7Ci0JCXZpbm9fc2tpcF9mcmFtZSh2Y3MpOwotCX0gZWxzZSB7Ci0JCXZjcy0+aW50X2RhdGEuc2tpcF9jb3VudCA9IDA7Ci0JCXZpbm9fZnJhbWVfZG9uZSh2Y3MpOwotCX0KLX0KLQotc3RhdGljIGlycXJldHVybl90IHZpbm9faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQl1MzIgY3RybCwgaW50cjsKLQl1bnNpZ25lZCBpbnQgZmNfYSwgZmNfYjsKLQlpbnQgaGFuZGxlZF9hID0gMCwgc2tpcF9hID0gMCwgZG9uZV9hID0gMDsKLQlpbnQgaGFuZGxlZF9iID0gMCwgc2tpcF9iID0gMCwgZG9uZV9iID0gMDsKLQotI2lmZGVmIFZJTk9fREVCVUdfSU5UCi0JaW50IGxvb3AgPSAwOwotCXVuc2lnbmVkIGludCBsaW5lX2NvdW50ID0gdmluby0+YS5saW5lX2NvdW50LAotCQlwYWdlX2luZGV4ID0gdmluby0+YS5wYWdlX2luZGV4LAotCQlmaWVsZF9jb3VudGVyID0gdmluby0+YS5maWVsZF9jb3VudGVyLAotCQlzdGFydF9kZXNjX3RibCA9IHZpbm8tPmEuc3RhcnRfZGVzY190YmwsCi0JCW5leHRfNF9kZXNjID0gdmluby0+YS5uZXh0XzRfZGVzYzsKLQl1bnNpZ25lZCBpbnQgbGluZV9jb3VudF8yLAotCQlwYWdlX2luZGV4XzIsCi0JCWZpZWxkX2NvdW50ZXJfMiwKLQkJc3RhcnRfZGVzY190YmxfMiwKLQkJbmV4dF80X2Rlc2NfMjsKLSNlbmRpZgotCi0Jc3Bpbl9sb2NrKCZ2aW5vX2RydmRhdGEtPnZpbm9fbG9jayk7Ci0KLQl3aGlsZSAoKGludHIgPSB2aW5vLT5pbnRyX3N0YXR1cykpIHsKLQkJZmNfYSA9IHZpbm8tPmEuZmllbGRfY291bnRlciA+PiAxOwotCQlmY19iID0gdmluby0+Yi5maWVsZF9jb3VudGVyID4+IDE7Ci0KLQkJLyogaGFuZGxlIGVycm9yLWludGVycnVwdHMgaW4gc29tZSBzcGVjaWFsIHdheSA/Ci0JCSAqIC0tPiBza2lwcyBmcmFtZXMgKi8KLQkJaWYgKGludHIgJiBWSU5PX0lOVFNUQVRfQSkgewotCQkJaWYgKGludHIgJiBWSU5PX0lOVFNUQVRfQV9FT0YpIHsKLQkJCQl2aW5vX2RydmRhdGEtPmEuZmllbGQrKzsKLQkJCQlpZiAodmlub19kcnZkYXRhLT5hLmZpZWxkID4gMSkgewotCQkJCQl2aW5vX2RtYV9zdG9wKCZ2aW5vX2RydmRhdGEtPmEpOwotCQkJCQl2aW5vX2NsZWFyX2ludGVycnVwdCgmdmlub19kcnZkYXRhLT5hKTsKLQkJCQkJdmlub19kcnZkYXRhLT5hLmZpZWxkID0gMDsKLQkJCQkJZG9uZV9hID0gMTsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAodmluby0+YS5wYWdlX2luZGV4Ci0JCQkJCSAgICAhPSB2aW5vX2RydmRhdGEtPmEubGluZV9zaXplKSB7Ci0JCQkJCQl2aW5vLT5hLmxpbmVfY291bnQgPSAwOwotCQkJCQkJdmluby0+YS5wYWdlX2luZGV4ID0KLQkJCQkJCQl2aW5vX2RydmRhdGEtPgotCQkJCQkJCWEubGluZV9zaXplOwotCQkJCQkJdmluby0+YS5uZXh0XzRfZGVzYyA9Ci0JCQkJCQkJdmluby0+YS5zdGFydF9kZXNjX3RibDsKLQkJCQkJfQotCQkJCX0KLQkJCQlkcHJpbnRrKCJjaGFubmVsIEEgZW5kLW9mLWZpZWxkICIKLQkJCQkJImludGVycnVwdDogJTA0eFxuIiwgaW50cik7Ci0JCQl9IGVsc2UgewotCQkJCXZpbm9fZG1hX3N0b3AoJnZpbm9fZHJ2ZGF0YS0+YSk7Ci0JCQkJdmlub19jbGVhcl9pbnRlcnJ1cHQoJnZpbm9fZHJ2ZGF0YS0+YSk7Ci0JCQkJdmlub19kcnZkYXRhLT5hLmZpZWxkID0gMDsKLQkJCQlza2lwX2EgPSAxOwotCQkJCWRwcmludGsoImNoYW5uZWwgQSBlcnJvciBpbnRlcnJ1cHQ6ICUwNHhcbiIsCi0JCQkJCWludHIpOwotCQkJfQotCi0jaWZkZWYgVklOT19ERUJVR19JTlQKLQkJCWxpbmVfY291bnRfMiA9IHZpbm8tPmEubGluZV9jb3VudDsKLQkJCXBhZ2VfaW5kZXhfMiA9IHZpbm8tPmEucGFnZV9pbmRleDsKLQkJCWZpZWxkX2NvdW50ZXJfMiA9IHZpbm8tPmEuZmllbGRfY291bnRlcjsKLQkJCXN0YXJ0X2Rlc2NfdGJsXzIgPSB2aW5vLT5hLnN0YXJ0X2Rlc2NfdGJsOwotCQkJbmV4dF80X2Rlc2NfMiA9IHZpbm8tPmEubmV4dF80X2Rlc2M7Ci0KLQkJCXByaW50aygiaW50ciA9ICUwNHgsIGxvb3AgPSAlZCwgZmllbGQgPSAlZFxuIiwKLQkJCSAgICAgICBpbnRyLCBsb29wLCB2aW5vX2RydmRhdGEtPmEuZmllbGQpOwotCQkJcHJpbnRrKCIxLSBsaW5lIGNvdW50ID0gJTA0ZCwgcGFnZSBpbmRleCA9ICUwNGQsICIKLQkJCSAgICAgICAic3RhcnQgPSAlMDh4LCBuZXh0ID0gJTA4eFxuIgotCQkJICAgICAgICIgICBmaWVsZGMgPSAlZCwgZnJhbWVjID0gJWRcbiIsCi0JCQkgICAgICAgbGluZV9jb3VudCwgcGFnZV9pbmRleCwgc3RhcnRfZGVzY190YmwsCi0JCQkgICAgICAgbmV4dF80X2Rlc2MsIGZpZWxkX2NvdW50ZXIsIGZjX2EpOwotCQkJcHJpbnRrKCIxMi1saW5lIGNvdW50ID0gJTA0ZCwgcGFnZSBpbmRleCA9ICUwNGQsICIKLQkJCSAgICAgICAiICAgc3RhcnQgPSAlMDh4LCBuZXh0ID0gJTA4eFxuIiwKLQkJCSAgICAgICBsaW5lX2NvdW50XzIsIHBhZ2VfaW5kZXhfMiwgc3RhcnRfZGVzY190YmxfMiwKLQkJCSAgICAgICBuZXh0XzRfZGVzY18yKTsKLQotCQkJaWYgKGRvbmVfYSkKLQkJCQlwcmludGsoIlxuIik7Ci0jZW5kaWYKLQkJfQotCi0JCWlmIChpbnRyICYgVklOT19JTlRTVEFUX0IpIHsKLQkJCWlmIChpbnRyICYgVklOT19JTlRTVEFUX0JfRU9GKSB7Ci0JCQkJdmlub19kcnZkYXRhLT5iLmZpZWxkKys7Ci0JCQkJaWYgKHZpbm9fZHJ2ZGF0YS0+Yi5maWVsZCA+IDEpIHsKLQkJCQkJdmlub19kbWFfc3RvcCgmdmlub19kcnZkYXRhLT5iKTsKLQkJCQkJdmlub19jbGVhcl9pbnRlcnJ1cHQoJnZpbm9fZHJ2ZGF0YS0+Yik7Ci0JCQkJCXZpbm9fZHJ2ZGF0YS0+Yi5maWVsZCA9IDA7Ci0JCQkJCWRvbmVfYiA9IDE7Ci0JCQkJfQotCQkJCWRwcmludGsoImNoYW5uZWwgQiBlbmQtb2YtZmllbGQgIgotCQkJCQkiaW50ZXJydXB0OiAlMDR4XG4iLCBpbnRyKTsKLQkJCX0gZWxzZSB7Ci0JCQkJdmlub19kbWFfc3RvcCgmdmlub19kcnZkYXRhLT5iKTsKLQkJCQl2aW5vX2NsZWFyX2ludGVycnVwdCgmdmlub19kcnZkYXRhLT5iKTsKLQkJCQl2aW5vX2RydmRhdGEtPmIuZmllbGQgPSAwOwotCQkJCXNraXBfYiA9IDE7Ci0JCQkJZHByaW50aygiY2hhbm5lbCBCIGVycm9yIGludGVycnVwdDogJTA0eFxuIiwKLQkJCQkJaW50cik7Ci0JCQl9Ci0JCX0KLQotCQkvKiBBbHdheXMgcmVtZW1iZXIgdG8gY2xlYXIgaW50ZXJydXB0IHN0YXR1cy4KLQkJICogRGlzYWJsZSBWSU5PIGludGVycnVwdHMgd2hpbGUgd2UgZG8gdGhpcy4gKi8KLQkJY3RybCA9IHZpbm8tPmNvbnRyb2w7Ci0JCXZpbm8tPmNvbnRyb2wgPSBjdHJsICYgfihWSU5PX0NUUkxfQV9JTlQgfCBWSU5PX0NUUkxfQl9JTlQpOwotCQl2aW5vLT5pbnRyX3N0YXR1cyA9IH5pbnRyOwotCQl2aW5vLT5jb250cm9sID0gY3RybDsKLQotCQlzcGluX3VubG9jaygmdmlub19kcnZkYXRhLT52aW5vX2xvY2spOwotCi0JCWlmICgoIWhhbmRsZWRfYSkgJiYgKGRvbmVfYSB8fCBza2lwX2EpKSB7Ci0JCQlpZiAoIXNraXBfYSkgewotCQkJCXY0bDJfZ2V0X3RpbWVzdGFtcCgKLQkJCQkJJnZpbm9fZHJ2ZGF0YS0+YS5pbnRfZGF0YS50aW1lc3RhbXApOwotCQkJCXZpbm9fZHJ2ZGF0YS0+YS5pbnRfZGF0YS5mcmFtZV9jb3VudGVyID0gZmNfYTsKLQkJCX0KLQkJCXZpbm9fZHJ2ZGF0YS0+YS5pbnRfZGF0YS5za2lwID0gc2tpcF9hOwotCi0JCQlkcHJpbnRrKCJjaGFubmVsIEEgJXMsIGludGVycnVwdDogJWRcbiIsCi0JCQkJc2tpcF9hID8gInNraXBwaW5nIGZyYW1lIiA6ICJmcmFtZSBkb25lIiwKLQkJCQlpbnRyKTsKLQkJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnZpbm9fdGFza2xldF9hKTsKLQkJCWhhbmRsZWRfYSA9IDE7Ci0JCX0KLQotCQlpZiAoKCFoYW5kbGVkX2IpICYmIChkb25lX2IgfHwgc2tpcF9iKSkgewotCQkJaWYgKCFza2lwX2IpIHsKLQkJCQl2NGwyX2dldF90aW1lc3RhbXAoCi0JCQkJCSZ2aW5vX2RydmRhdGEtPmIuaW50X2RhdGEudGltZXN0YW1wKTsKLQkJCQl2aW5vX2RydmRhdGEtPmIuaW50X2RhdGEuZnJhbWVfY291bnRlciA9IGZjX2I7Ci0JCQl9Ci0JCQl2aW5vX2RydmRhdGEtPmIuaW50X2RhdGEuc2tpcCA9IHNraXBfYjsKLQotCQkJZHByaW50aygiY2hhbm5lbCBCICVzLCBpbnRlcnJ1cHQ6ICVkXG4iLAotCQkJCXNraXBfYiA/ICJza2lwcGluZyBmcmFtZSIgOiAiZnJhbWUgZG9uZSIsCi0JCQkJaW50cik7Ci0JCQl0YXNrbGV0X2hpX3NjaGVkdWxlKCZ2aW5vX3Rhc2tsZXRfYik7Ci0JCQloYW5kbGVkX2IgPSAxOwotCQl9Ci0KLSNpZmRlZiBWSU5PX0RFQlVHX0lOVAotCQlsb29wKys7Ci0jZW5kaWYKLQkJc3Bpbl9sb2NrKCZ2aW5vX2RydmRhdGEtPnZpbm9fbG9jayk7Ci0JfQotCi0Jc3Bpbl91bmxvY2soJnZpbm9fZHJ2ZGF0YS0+dmlub19sb2NrKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotLyogVklOTyB2aWRlbyBpbnB1dCBtYW5hZ2VtZW50ICovCi0KLXN0YXRpYyBpbnQgdmlub19nZXRfc2FhNzE5MV9pbnB1dChpbnQgaW5wdXQpCi17Ci0Jc3dpdGNoIChpbnB1dCkgewotCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6Ci0JCXJldHVybiBTQUE3MTkxX0lOUFVUX0NPTVBPU0lURTsKLQljYXNlIFZJTk9fSU5QVVRfU1ZJREVPOgotCQlyZXR1cm4gU0FBNzE5MV9JTlBVVF9TVklERU87Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJWSU5POiB2aW5vX2dldF9zYWE3MTkxX2lucHV0KCk6ICIKLQkJICAgICAgICJpbnZhbGlkIGlucHV0IVxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci19Ci0KLS8qIGV4ZWN1dGUgd2l0aCBpbnB1dF9sb2NrIGxvY2tlZCAqLwotc3RhdGljIGludCB2aW5vX2lzX2lucHV0X293bmVyKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcykKLXsKLQlzd2l0Y2godmNzLT5pbnB1dCkgewotCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6Ci0JY2FzZSBWSU5PX0lOUFVUX1NWSURFTzoKLQkJcmV0dXJuIHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9PSB2Y3MtPmNoYW5uZWw7Ci0JY2FzZSBWSU5PX0lOUFVUX0QxOgotCQlyZXR1cm4gdmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPT0gdmNzLT5jaGFubmVsOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIGludCB2aW5vX2FjcXVpcmVfaW5wdXQoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7Ci0KLQlkcHJpbnRrKCJ2aW5vX2FjcXVpcmVfaW5wdXQoKTpcbiIpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JLyogRmlyc3QgdHJ5IEQxIGFuZCB0aGVuIFNBQTcxOTEgKi8KLQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmEKLQkgICAgJiYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID09IFZJTk9fTk9fQ0hBTk5FTCkpIHsKLQkJdmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPSB2Y3MtPmNoYW5uZWw7Ci0JCXZjcy0+aW5wdXQgPSBWSU5PX0lOUFVUX0QxOwotCQl2Y3MtPmRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX0QxOwotCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyCi0JCSAgICYmICh2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPT0gVklOT19OT19DSEFOTkVMKSkgewotCQlpbnQgaW5wdXQ7Ci0JCWludCBkYXRhX25vcm0gPSAwOwotCQl2NGwyX3N0ZF9pZCBub3JtOwotCi0JCWlucHV0ID0gVklOT19JTlBVVF9DT01QT1NJVEU7Ci0KLQkJcmV0ID0gZGVjb2Rlcl9jYWxsKHZpZGVvLCBzX3JvdXRpbmcsCi0JCQkJdmlub19nZXRfc2FhNzE5MV9pbnB1dChpbnB1dCksIDAsIDApOwotCQlpZiAocmV0KSB7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCQkvKiBEb24ndCBob2xkIHNwaW5sb2NrcyB3aGlsZSBhdXRvLWRldGVjdGluZyBub3JtCi0JCSAqIGFzIGl0IG1heSB0YWtlIGEgd2hpbGUuLi4gKi8KLQotCQlyZXQgPSBkZWNvZGVyX2NhbGwodmlkZW8sIHF1ZXJ5c3RkLCAmbm9ybSk7Ci0JCWlmICghcmV0KSB7Ci0JCQlmb3IgKGRhdGFfbm9ybSA9IDA7IGRhdGFfbm9ybSA8IDM7IGRhdGFfbm9ybSsrKSB7Ci0JCQkJaWYgKHZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLnN0ZCAmIG5vcm0pCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKGRhdGFfbm9ybSA9PSAzKQotCQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX1BBTDsKLQkJCXJldCA9IGRlY29kZXJfY2FsbCh2aWRlbywgc19zdGQsIG5vcm0pOwotCQl9Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JCWlmIChyZXQpIHsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IHZjcy0+Y2hhbm5lbDsKLQotCQl2Y3MtPmlucHV0ID0gaW5wdXQ7Ci0JCXZjcy0+ZGF0YV9ub3JtID0gZGF0YV9ub3JtOwotCX0gZWxzZSB7Ci0JCXZjcy0+aW5wdXQgPSAodmNzLT5jaGFubmVsID09IFZJTk9fQ0hBTk5FTF9BKSA/Ci0JCQl2aW5vX2RydmRhdGEtPmIuaW5wdXQgOiB2aW5vX2RydmRhdGEtPmEuaW5wdXQ7Ci0JCXZjcy0+ZGF0YV9ub3JtID0gKHZjcy0+Y2hhbm5lbCA9PSBWSU5PX0NIQU5ORUxfQSkgPwotCQkJdmlub19kcnZkYXRhLT5iLmRhdGFfbm9ybSA6IHZpbm9fZHJ2ZGF0YS0+YS5kYXRhX25vcm07Ci0JfQotCi0JaWYgKHZjcy0+aW5wdXQgPT0gVklOT19JTlBVVF9OT05FKSB7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXZpbm9fc2V0X2RlZmF1bHRfY2xpcHBpbmcodmNzKTsKLQl2aW5vX3NldF9kZWZhdWx0X3NjYWxpbmcodmNzKTsKLQl2aW5vX3NldF9kZWZhdWx0X2ZyYW1lcmF0ZSh2Y3MpOwotCi0JZHByaW50aygidmlub19hY3F1aXJlX2lucHV0KCk6ICVzXG4iLCB2aW5vX2lucHV0c1t2Y3MtPmlucHV0XS5uYW1lKTsKLQotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB2aW5vX3NldF9pbnB1dChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsIGludCBpbnB1dCkKLXsKLQlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MyID0gKHZjcy0+Y2hhbm5lbCA9PSBWSU5PX0NIQU5ORUxfQSkgPwotCQkmdmlub19kcnZkYXRhLT5iIDogJnZpbm9fZHJ2ZGF0YS0+YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0JZHByaW50aygidmlub19zZXRfaW5wdXQoKTpcbiIpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JaWYgKHZjcy0+aW5wdXQgPT0gaW5wdXQpCi0JCWdvdG8gb3V0OwotCi0Jc3dpdGNoIChpbnB1dCkgewotCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6Ci0JY2FzZSBWSU5PX0lOUFVUX1NWSURFTzoKLQkJaWYgKCF2aW5vX2RydmRhdGEtPmRlY29kZXIpIHsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPT0gVklOT19OT19DSEFOTkVMKSB7Ci0JCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSB2Y3MtPmNoYW5uZWw7Ci0JCX0KLQotCQlpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID09IHZjcy0+Y2hhbm5lbCkgewotCQkJaW50IGRhdGFfbm9ybSA9IDA7Ci0JCQl2NGwyX3N0ZF9pZCBub3JtOwotCi0JCQlyZXQgPSBkZWNvZGVyX2NhbGwodmlkZW8sIHNfcm91dGluZywKLQkJCQkJdmlub19nZXRfc2FhNzE5MV9pbnB1dChpbnB1dCksIDAsIDApOwotCQkJaWYgKHJldCkgewotCQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCQkJLyogRG9uJ3QgaG9sZCBzcGlubG9ja3Mgd2hpbGUgYXV0by1kZXRlY3Rpbmcgbm9ybQotCQkJICogYXMgaXQgbWF5IHRha2UgYSB3aGlsZS4uLiAqLwotCi0JCQlyZXQgPSBkZWNvZGVyX2NhbGwodmlkZW8sIHF1ZXJ5c3RkLCAmbm9ybSk7Ci0JCQlpZiAoIXJldCkgewotCQkJCWZvciAoZGF0YV9ub3JtID0gMDsgZGF0YV9ub3JtIDwgMzsgZGF0YV9ub3JtKyspIHsKLQkJCQkJaWYgKHZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLnN0ZCAmIG5vcm0pCi0JCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJaWYgKGRhdGFfbm9ybSA9PSAzKQotCQkJCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9QQUw7Ci0JCQkJcmV0ID0gZGVjb2Rlcl9jYWxsKHZpZGVvLCBzX3N0ZCwgbm9ybSk7Ci0JCQl9Ci0KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCQkJaWYgKHJldCkgewotCQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKLQkJCQlyZXQgPSAtRUlOVkFMOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQl2Y3MtPmlucHV0ID0gaW5wdXQ7Ci0JCQl2Y3MtPmRhdGFfbm9ybSA9IGRhdGFfbm9ybTsKLQkJfSBlbHNlIHsKLQkJCWlmIChpbnB1dCAhPSB2Y3MyLT5pbnB1dCkgewotCQkJCXJldCA9IC1FQlVTWTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQotCQkJdmNzLT5pbnB1dCA9IGlucHV0OwotCQkJdmNzLT5kYXRhX25vcm0gPSB2Y3MyLT5kYXRhX25vcm07Ci0JCX0KLQotCQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPT0gdmNzLT5jaGFubmVsKSB7Ci0JCQkvKiBUcmFuc2ZlciB0aGUgb3duZXJzaGlwIG9yIHJlbGVhc2UgdGhlIGlucHV0ICovCi0JCQlpZiAodmNzMi0+aW5wdXQgPT0gVklOT19JTlBVVF9EMSkgewotCQkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID0gdmNzMi0+Y2hhbm5lbDsKLQkJCX0gZWxzZSB7Ci0JCQkJdmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPSBWSU5PX05PX0NIQU5ORUw7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBWSU5PX0lOUFVUX0QxOgotCQlpZiAoIXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhKSB7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPT0gVklOT19OT19DSEFOTkVMKQotCQkJdmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPSB2Y3MtPmNoYW5uZWw7Ci0KLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9PSB2Y3MtPmNoYW5uZWwpIHsKLQkJCS8qIFRyYW5zZmVyIHRoZSBvd25lcnNoaXAgb3IgcmVsZWFzZSB0aGUgaW5wdXQgKi8KLQkJCWlmICgodmNzMi0+aW5wdXQgPT0gVklOT19JTlBVVF9DT01QT1NJVEUpIHx8Ci0JCQkJICh2Y3MyLT5pbnB1dCA9PSBWSU5PX0lOUFVUX1NWSURFTykpIHsKLQkJCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSB2Y3MyLT5jaGFubmVsOwotCQkJfSBlbHNlIHsKLQkJCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSBWSU5PX05PX0NIQU5ORUw7Ci0JCQl9Ci0JCX0KLQotCQl2Y3MtPmlucHV0ID0gaW5wdXQ7Ci0JCXZjcy0+ZGF0YV9ub3JtID0gVklOT19EQVRBX05PUk1fRDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXZpbm9fc2V0X2RlZmF1bHRfY2xpcHBpbmcodmNzKTsKLQl2aW5vX3NldF9kZWZhdWx0X3NjYWxpbmcodmNzKTsKLQl2aW5vX3NldF9kZWZhdWx0X2ZyYW1lcmF0ZSh2Y3MpOwotCi0JZHByaW50aygidmlub19zZXRfaW5wdXQoKTogJXNcbiIsIHZpbm9faW5wdXRzW3Zjcy0+aW5wdXRdLm5hbWUpOwotCi1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCB2aW5vX3JlbGVhc2VfaW5wdXQoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzKQotewotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjczIgPSAodmNzLT5jaGFubmVsID09IFZJTk9fQ0hBTk5FTF9BKSA/Ci0JCSZ2aW5vX2RydmRhdGEtPmIgOiAmdmlub19kcnZkYXRhLT5hOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkcHJpbnRrKCJ2aW5vX3JlbGVhc2VfaW5wdXQoKTpcbiIpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JLyogUmVsZWFzZSBvd25lcnNoaXAgb2YgdGhlIGNoYW5uZWwKLQkgKiBhbmQgaWYgdGhlIG90aGVyIGNoYW5uZWwgdGFrZXMgaW5wdXQgZnJvbQotCSAqIHRoZSBzYW1lIHNvdXJjZSwgdHJhbnNmZXIgdGhlIG93bmVyc2hpcCAqLwotCWlmICh2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9PSB2Y3MtPmNoYW5uZWwpIHsKLQkJaWYgKHZjczItPmlucHV0ID09IFZJTk9fSU5QVVRfRDEpIHsKLQkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID0gdmNzMi0+Y2hhbm5lbDsKLQkJfSBlbHNlIHsKLQkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID0gVklOT19OT19DSEFOTkVMOwotCQl9Ci0JfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPT0gdmNzLT5jaGFubmVsKSB7Ci0JCWlmICgodmNzMi0+aW5wdXQgPT0gVklOT19JTlBVVF9DT01QT1NJVEUpIHx8Ci0JCQkgKHZjczItPmlucHV0ID09IFZJTk9fSU5QVVRfU1ZJREVPKSkgewotCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID0gdmNzMi0+Y2hhbm5lbDsKLQkJfSBlbHNlIHsKLQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKLQkJfQotCX0KLQl2Y3MtPmlucHV0ID0gVklOT19JTlBVVF9OT05FOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qIGV4ZWN1dGUgd2l0aCBpbnB1dF9sb2NrIGxvY2tlZCAqLwotc3RhdGljIGludCB2aW5vX3NldF9kYXRhX25vcm0oc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAotCQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFfbm9ybSwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQotewotCWludCBlcnIgPSAwOwotCi0JaWYgKGRhdGFfbm9ybSA9PSB2Y3MtPmRhdGFfbm9ybSkKLQkJcmV0dXJuIDA7Ci0KLQlzd2l0Y2ggKHZjcy0+aW5wdXQpIHsKLQljYXNlIFZJTk9fSU5QVVRfRDE6Ci0JCS8qIG9ubHkgb25lICJub3JtIiBzdXBwb3J0ZWQgKi8KLQkJaWYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9EMSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgotCWNhc2UgVklOT19JTlBVVF9TVklERU86IHsKLQkJdjRsMl9zdGRfaWQgbm9ybTsKLQotCQlpZiAoKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9QQUwpCi0JCSAgICAmJiAoZGF0YV9ub3JtICE9IFZJTk9fREFUQV9OT1JNX05UU0MpCi0JCSAgICAmJiAoZGF0YV9ub3JtICE9IFZJTk9fREFUQV9OT1JNX1NFQ0FNKSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgKmZsYWdzKTsKLQotCQkvKiBEb24ndCBob2xkIHNwaW5sb2NrcyB3aGlsZSBzZXR0aW5nIG5vcm0KLQkJICogYXMgaXQgbWF5IHRha2UgYSB3aGlsZS4uLiAqLwotCi0JCW5vcm0gPSB2aW5vX2RhdGFfbm9ybXNbZGF0YV9ub3JtXS5zdGQ7Ci0JCWVyciA9IGRlY29kZXJfY2FsbCh2aWRlbywgc19zdGQsIG5vcm0pOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssICpmbGFncyk7Ci0KLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCi0JCXZjcy0+ZGF0YV9ub3JtID0gZGF0YV9ub3JtOwotCi0JCXZpbm9fc2V0X2RlZmF1bHRfY2xpcHBpbmcodmNzKTsKLQkJdmlub19zZXRfZGVmYXVsdF9zY2FsaW5nKHZjcyk7Ci0JCXZpbm9fc2V0X2RlZmF1bHRfZnJhbWVyYXRlKHZjcyk7Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gZXJyOwotfQotCi0vKiBWNEwyIGhlbHBlciBmdW5jdGlvbnMgKi8KLQotc3RhdGljIGludCB2aW5vX2ZpbmRfZGF0YV9mb3JtYXQoX191MzIgcGl4ZWxmb3JtYXQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgVklOT19EQVRBX0ZNVF9DT1VOVDsgaSsrKSB7Ci0JCWlmICh2aW5vX2RhdGFfZm9ybWF0c1tpXS5waXhlbGZvcm1hdCA9PSBwaXhlbGZvcm1hdCkKLQkJCXJldHVybiBpOwotCX0KLQotCXJldHVybiBWSU5PX0RBVEFfRk1UX05PTkU7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19pbnRfZW51bV9pbnB1dChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsIF9fdTMyIGluZGV4KQotewotCWludCBpbnB1dCA9IFZJTk9fSU5QVVRfTk9ORTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIgJiYgdmlub19kcnZkYXRhLT5jYW1lcmEpIHsKLQkJc3dpdGNoIChpbmRleCkgewotCQljYXNlIDA6Ci0JCQlpbnB1dCA9IFZJTk9fSU5QVVRfQ09NUE9TSVRFOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCWlucHV0ID0gVklOT19JTlBVVF9TVklERU87Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJaW5wdXQgPSBWSU5PX0lOUFVUX0QxOwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2RlcikgewotCQlzd2l0Y2ggKGluZGV4KSB7Ci0JCWNhc2UgMDoKLQkJCWlucHV0ID0gVklOT19JTlBVVF9DT01QT1NJVEU7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJaW5wdXQgPSBWSU5PX0lOUFVUX1NWSURFTzsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmNhbWVyYSkgewotCQlzd2l0Y2ggKGluZGV4KSB7Ci0JCWNhc2UgMDoKLQkJCWlucHV0ID0gVklOT19JTlBVVF9EMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIGlucHV0OwotfQotCi0vKiBleGVjdXRlIHdpdGggaW5wdXRfbG9jayBsb2NrZWQgKi8KLXN0YXRpYyBfX3UzMiB2aW5vX2ZpbmRfaW5wdXRfaW5kZXgoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzKQotewotCV9fdTMyIGluZGV4ID0gMDsKLQkvLyBGSVhNRTogZGV0ZWN0IHdoZW4gbm8gaW5wdXRzIGF2YWlsYWJsZQotCi0JaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2RlciAmJiB2aW5vX2RydmRhdGEtPmNhbWVyYSkgewotCQlzd2l0Y2ggKHZjcy0+aW5wdXQpIHsKLQkJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKLQkJCWluZGV4ID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIFZJTk9fSU5QVVRfU1ZJREVPOgotCQkJaW5kZXggPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklOT19JTlBVVF9EMToKLQkJCWluZGV4ID0gMjsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIpIHsKLQkJc3dpdGNoICh2Y3MtPmlucHV0KSB7Ci0JCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6Ci0JCQlpbmRleCA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBWSU5PX0lOUFVUX1NWSURFTzoKLQkJCWluZGV4ID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmNhbWVyYSkgewotCQlzd2l0Y2ggKHZjcy0+aW5wdXQpIHsKLQkJY2FzZSBWSU5PX0lOUFVUX0QxOgotCQkJaW5kZXggPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gaW5kZXg7Ci19Ci0KLS8qIFY0TDIgaW9jdGxzICovCi0KLXN0YXRpYyBpbnQgdmlub19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKLQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQotewotCW1lbXNldChjYXAsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5KSk7Ci0KLQlzdHJjcHkoY2FwLT5kcml2ZXIsIHZpbm9fZHJpdmVyX25hbWUpOwotCXN0cmNweShjYXAtPmNhcmQsIHZpbm9fZHJpdmVyX2Rlc2NyaXB0aW9uKTsKLQlzdHJjcHkoY2FwLT5idXNfaW5mbywgdmlub19idXNfbmFtZSk7Ci0JY2FwLT5kZXZpY2VfY2FwcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9TVFJFQU1JTkc7Ci0JY2FwLT5jYXBhYmlsaXRpZXMgPSBjYXAtPmRldmljZV9jYXBzIHwgVjRMMl9DQVBfREVWSUNFX0NBUFM7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAotCQkJICAgICAgIHN0cnVjdCB2NGwyX2lucHV0ICppKQotewotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JX191MzIgaW5kZXggPSBpLT5pbmRleDsKLQlpbnQgaW5wdXQ7Ci0JZHByaW50aygicmVxdWVzdGVkIGluZGV4ID0gJWRcbiIsIGluZGV4KTsKLQotCWlucHV0ID0gdmlub19pbnRfZW51bV9pbnB1dCh2Y3MsIGluZGV4KTsKLQlpZiAoaW5wdXQgPT0gVklOT19JTlBVVF9OT05FKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWktPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwotCWktPnN0ZCA9IHZpbm9faW5wdXRzW2lucHV0XS5zdGQ7Ci0Jc3RyY3B5KGktPm5hbWUsIHZpbm9faW5wdXRzW2lucHV0XS5uYW1lKTsKLQotCWlmIChpbnB1dCA9PSBWSU5PX0lOUFVUX0NPTVBPU0lURSB8fCBpbnB1dCA9PSBWSU5PX0lOUFVUX1NWSURFTykKLQkJZGVjb2Rlcl9jYWxsKHZpZGVvLCBnX2lucHV0X3N0YXR1cywgJmktPnN0YXR1cyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAotCQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlfX3UzMiBpbmRleDsKLQlpbnQgaW5wdXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQlpbnB1dCA9IHZjcy0+aW5wdXQ7Ci0JaW5kZXggPSB2aW5vX2ZpbmRfaW5wdXRfaW5kZXgodmNzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCWRwcmludGsoImlucHV0ID0gJWRcbiIsIGlucHV0KTsKLQotCWlmIChpbnB1dCA9PSBWSU5PX0lOUFVUX05PTkUpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JKmkgPSBpbmRleDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpbm9fc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKLQkJCSAgICAgdW5zaWduZWQgaW50IGkpCi17Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlpbnQgaW5wdXQ7Ci0JZHByaW50aygicmVxdWVzdGVkIGlucHV0ID0gJWRcbiIsIGkpOwotCi0JaW5wdXQgPSB2aW5vX2ludF9lbnVtX2lucHV0KHZjcywgaSk7Ci0JaWYgKGlucHV0ID09IFZJTk9fSU5QVVRfTk9ORSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gdmlub19zZXRfaW5wdXQodmNzLCBpbnB1dCk7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19xdWVyeXN0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKLQkJCSAgICAgIHY0bDJfc3RkX2lkICpzdGQpCi17Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBlcnIgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0Jc3dpdGNoICh2Y3MtPmlucHV0KSB7Ci0JY2FzZSBWSU5PX0lOUFVUX0QxOgotCQkqc3RkID0gdmlub19pbnB1dHNbdmNzLT5pbnB1dF0uc3RkOwotCQlicmVhazsKLQljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgotCWNhc2UgVklOT19JTlBVVF9TVklERU86IHsKLQkJZGVjb2Rlcl9jYWxsKHZpZGVvLCBxdWVyeXN0ZCwgc3RkKTsKLQkJYnJlYWs7Ci0JfQotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FSU5WQUw7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHZpbm9fZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCi0JCQkgICB2NGwyX3N0ZF9pZCAqc3RkKQotewotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCSpzdGQgPSB2aW5vX2RhdGFfbm9ybXNbdmNzLT5kYXRhX25vcm1dLnN0ZDsKLQlkcHJpbnRrKCJjdXJyZW50IHN0YW5kYXJkID0gJWRcbiIsIHZjcy0+ZGF0YV9ub3JtKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKLQkJCSAgIHY0bDJfc3RkX2lkIHN0ZCkKLXsKLQlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIXZpbm9faXNfaW5wdXRfb3duZXIodmNzKSkgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGNoZWNrIGlmIHRoZSBzdGFuZGFyZCBpcyB2YWxpZCBmb3IgdGhlIGN1cnJlbnQgaW5wdXQgKi8KLQlpZiAoc3RkICYgdmlub19pbnB1dHNbdmNzLT5pbnB1dF0uc3RkKSB7Ci0JCWRwcmludGsoInN0YW5kYXJkIGFjY2VwdGVkXG4iKTsKLQotCQkvKiBjaGFuZ2UgdGhlIHZpZGVvIG5vcm0gZm9yIFNBQTcxOTEKLQkJICogYW5kIGFjY2VwdCBOVFNDIGZvciBEMSAoZG8gbm90aGluZykgKi8KLQotCQlpZiAodmNzLT5pbnB1dCA9PSBWSU5PX0lOUFVUX0QxKQotCQkJZ290byBvdXQ7Ci0KLQkJaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgewotCQkJcmV0ID0gdmlub19zZXRfZGF0YV9ub3JtKHZjcywgVklOT19EQVRBX05PUk1fUEFMLAotCQkJCQkJICZmbGFncyk7Ci0JCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfTlRTQykgewotCQkJcmV0ID0gdmlub19zZXRfZGF0YV9ub3JtKHZjcywgVklOT19EQVRBX05PUk1fTlRTQywKLQkJCQkJCSAmZmxhZ3MpOwotCQl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1NFQ0FNKSB7Ci0JCQlyZXQgPSB2aW5vX3NldF9kYXRhX25vcm0odmNzLCBWSU5PX0RBVEFfTk9STV9TRUNBTSwKLQkJCQkJCSAmZmxhZ3MpOwotCQl9IGVsc2UgewotCQkJcmV0ID0gLUVJTlZBTDsKLQkJfQotCi0JCWlmIChyZXQpIHsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCX0KLQl9IGVsc2UgewotCQlyZXQgPSAtRUlOVkFMOwotCX0KLQotb3V0OgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB2aW5vX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmZCkKLXsKLQlkcHJpbnRrKCJmb3JtYXQgaW5kZXggPSAlZFxuIiwgZmQtPmluZGV4KTsKLQotCWlmIChmZC0+aW5kZXggPj0gVklOT19EQVRBX0ZNVF9DT1VOVCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZHByaW50aygiZm9ybWF0IG5hbWUgPSAlc1xuIiwgdmlub19kYXRhX2Zvcm1hdHNbZmQtPmluZGV4XS5kZXNjcmlwdGlvbik7Ci0KLQlmZC0+cGl4ZWxmb3JtYXQgPSB2aW5vX2RhdGFfZm9ybWF0c1tmZC0+aW5kZXhdLnBpeGVsZm9ybWF0OwotCXN0cmNweShmZC0+ZGVzY3JpcHRpb24sIHZpbm9fZGF0YV9mb3JtYXRzW2ZkLT5pbmRleF0uZGVzY3JpcHRpb24pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpbm9fdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAotCQkJICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCi17Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzIHRlbXB2Y3M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwZiA9ICZmLT5mbXQucGl4OwotCi0JZHByaW50aygicmVxdWVzdGVkOiB3ID0gJWQsIGggPSAlZFxuIiwKLQkJCXBmLT53aWR0aCwgcGYtPmhlaWdodCk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0JbWVtY3B5KCZ0ZW1wdmNzLCB2Y3MsIHNpemVvZihzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQl0ZW1wdmNzLmRhdGFfZm9ybWF0ID0gdmlub19maW5kX2RhdGFfZm9ybWF0KHBmLT5waXhlbGZvcm1hdCk7Ci0JaWYgKHRlbXB2Y3MuZGF0YV9mb3JtYXQgPT0gVklOT19EQVRBX0ZNVF9OT05FKSB7Ci0JCXRlbXB2Y3MuZGF0YV9mb3JtYXQgPSBWSU5PX0RBVEFfRk1UX0dSRVk7Ci0JCXBmLT5waXhlbGZvcm1hdCA9Ci0JCQl2aW5vX2RhdGFfZm9ybWF0c1t0ZW1wdmNzLmRhdGFfZm9ybWF0XS4KLQkJCXBpeGVsZm9ybWF0OwotCX0KLQotCS8qIGRhdGEgZm9ybWF0IG11c3QgYmUgc2V0IGJlZm9yZSBjbGlwcGluZy9zY2FsaW5nICovCi0Jdmlub19zZXRfc2NhbGluZygmdGVtcHZjcywgcGYtPndpZHRoLCBwZi0+aGVpZ2h0KTsKLQotCWRwcmludGsoImRhdGEgZm9ybWF0ID0gJXNcbiIsCi0JCQl2aW5vX2RhdGFfZm9ybWF0c1t0ZW1wdmNzLmRhdGFfZm9ybWF0XS5kZXNjcmlwdGlvbik7Ci0KLQlwZi0+d2lkdGggPSAodGVtcHZjcy5jbGlwcGluZy5yaWdodCAtIHRlbXB2Y3MuY2xpcHBpbmcubGVmdCkgLwotCQl0ZW1wdmNzLmRlY2ltYXRpb247Ci0JcGYtPmhlaWdodCA9ICh0ZW1wdmNzLmNsaXBwaW5nLmJvdHRvbSAtIHRlbXB2Y3MuY2xpcHBpbmcudG9wKSAvCi0JCXRlbXB2Y3MuZGVjaW1hdGlvbjsKLQotCXBmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQlwZi0+Ynl0ZXNwZXJsaW5lID0gdGVtcHZjcy5saW5lX3NpemU7Ci0JcGYtPnNpemVpbWFnZSA9IHRlbXB2Y3MubGluZV9zaXplICoKLQkJKHRlbXB2Y3MuY2xpcHBpbmcuYm90dG9tIC0gdGVtcHZjcy5jbGlwcGluZy50b3ApIC8KLQkJdGVtcHZjcy5kZWNpbWF0aW9uOwotCXBmLT5jb2xvcnNwYWNlID0KLQkJdmlub19kYXRhX2Zvcm1hdHNbdGVtcHZjcy5kYXRhX2Zvcm1hdF0uY29sb3JzcGFjZTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpbm9fZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKLQkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGYgPSAmZi0+Zm10LnBpeDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCXBmLT53aWR0aCA9ICh2Y3MtPmNsaXBwaW5nLnJpZ2h0IC0gdmNzLT5jbGlwcGluZy5sZWZ0KSAvCi0JCXZjcy0+ZGVjaW1hdGlvbjsKLQlwZi0+aGVpZ2h0ID0gKHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApIC8KLQkJdmNzLT5kZWNpbWF0aW9uOwotCXBmLT5waXhlbGZvcm1hdCA9Ci0JCXZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLnBpeGVsZm9ybWF0OwotCi0JcGYtPmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCXBmLT5ieXRlc3BlcmxpbmUgPSB2Y3MtPmxpbmVfc2l6ZTsKLQlwZi0+c2l6ZWltYWdlID0gdmNzLT5saW5lX3NpemUgKgotCQkodmNzLT5jbGlwcGluZy5ib3R0b20gLSB2Y3MtPmNsaXBwaW5nLnRvcCkgLwotCQl2Y3MtPmRlY2ltYXRpb247Ci0JcGYtPmNvbG9yc3BhY2UgPQotCQl2aW5vX2RhdGFfZm9ybWF0c1t2Y3MtPmRhdGFfZm9ybWF0XS5jb2xvcnNwYWNlOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAotCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQotewotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaW50IGRhdGFfZm9ybWF0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGYgPSAmZi0+Zm10LnBpeDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCWRhdGFfZm9ybWF0ID0gdmlub19maW5kX2RhdGFfZm9ybWF0KHBmLT5waXhlbGZvcm1hdCk7Ci0KLQlpZiAoZGF0YV9mb3JtYXQgPT0gVklOT19EQVRBX0ZNVF9OT05FKSB7Ci0JCXZjcy0+ZGF0YV9mb3JtYXQgPSBWSU5PX0RBVEFfRk1UX0dSRVk7Ci0JCXBmLT5waXhlbGZvcm1hdCA9Ci0JCQl2aW5vX2RhdGFfZm9ybWF0c1t2Y3MtPmRhdGFfZm9ybWF0XS4KLQkJCXBpeGVsZm9ybWF0OwotCX0gZWxzZSB7Ci0JCXZjcy0+ZGF0YV9mb3JtYXQgPSBkYXRhX2Zvcm1hdDsKLQl9Ci0KLQkvKiBkYXRhIGZvcm1hdCBtdXN0IGJlIHNldCBiZWZvcmUgY2xpcHBpbmcvc2NhbGluZyAqLwotCXZpbm9fc2V0X3NjYWxpbmcodmNzLCBwZi0+d2lkdGgsIHBmLT5oZWlnaHQpOwotCi0JZHByaW50aygiZGF0YSBmb3JtYXQgPSAlc1xuIiwKLQkgICAgICAgdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uZGVzY3JpcHRpb24pOwotCi0JcGYtPndpZHRoID0gdmNzLT5jbGlwcGluZy5yaWdodCAtIHZjcy0+Y2xpcHBpbmcubGVmdDsKLQlwZi0+aGVpZ2h0ID0gdmNzLT5jbGlwcGluZy5ib3R0b20gLSB2Y3MtPmNsaXBwaW5nLnRvcDsKLQotCXBmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQlwZi0+Ynl0ZXNwZXJsaW5lID0gdmNzLT5saW5lX3NpemU7Ci0JcGYtPnNpemVpbWFnZSA9IHZjcy0+bGluZV9zaXplICoKLQkJKHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApIC8KLQkJdmNzLT5kZWNpbWF0aW9uOwotCXBmLT5jb2xvcnNwYWNlID0KLQkJdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uY29sb3JzcGFjZTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpbm9fY3JvcGNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKLQkJCSAgICAgc3RydWN0IHY0bDJfY3JvcGNhcCAqY2NhcCkKLXsKLQlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWNvbnN0IHN0cnVjdCB2aW5vX2RhdGFfbm9ybSAqbm9ybTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3dpdGNoIChjY2FwLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCQlub3JtID0gJnZpbm9fZGF0YV9ub3Jtc1t2Y3MtPmRhdGFfbm9ybV07Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQkJY2NhcC0+Ym91bmRzLmxlZnQgPSAwOwotCQljY2FwLT5ib3VuZHMudG9wID0gMDsKLQkJY2NhcC0+Ym91bmRzLndpZHRoID0gbm9ybS0+d2lkdGg7Ci0JCWNjYXAtPmJvdW5kcy5oZWlnaHQgPSBub3JtLT5oZWlnaHQ7Ci0JCW1lbWNweSgmY2NhcC0+ZGVmcmVjdCwgJmNjYXAtPmJvdW5kcywKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgdjRsMl9yZWN0KSk7Ci0KLQkJY2NhcC0+cGl4ZWxhc3BlY3QubnVtZXJhdG9yID0gMTsKLQkJY2NhcC0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IgPSAxOwotCQlicmVhazsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aW5vX2dfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9jcm9wICpjKQotewotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXN3aXRjaCAoYy0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQkJYy0+Yy5sZWZ0ID0gdmNzLT5jbGlwcGluZy5sZWZ0OwotCQljLT5jLnRvcCA9IHZjcy0+Y2xpcHBpbmcudG9wOwotCQljLT5jLndpZHRoID0gdmNzLT5jbGlwcGluZy5yaWdodCAtIHZjcy0+Y2xpcHBpbmcubGVmdDsKLQkJYy0+Yy5oZWlnaHQgPSB2Y3MtPmNsaXBwaW5nLmJvdHRvbSAtIHZjcy0+Y2xpcHBpbmcudG9wOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aW5vX3NfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgdjRsMl9jcm9wICpjKQotewotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXN3aXRjaCAoYy0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQkJdmlub19zZXRfY2xpcHBpbmcodmNzLCBjLT5jLmxlZnQsIGMtPmMudG9wLAotCQkJCSAgYy0+Yy53aWR0aCwgYy0+Yy5oZWlnaHQpOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aW5vX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpzcCkKLXsKLQlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gKmNwID0gJnNwLT5wYXJtLmNhcHR1cmU7Ci0KLQljcC0+Y2FwYWJpbGl0eSA9IFY0TDJfQ0FQX1RJTUVQRVJGUkFNRTsKLQljcC0+dGltZXBlcmZyYW1lLm51bWVyYXRvciA9IDE7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQljcC0+dGltZXBlcmZyYW1lLmRlbm9taW5hdG9yID0gdmNzLT5mcHM7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCS8qIFRPRE86IGNwLT5yZWFkYnVmZmVycyA9IHh4eDsgKi8KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpbm9fc19wYXJtKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAotCQkJICAgIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnNwKQotewotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSAqY3AgPSAmc3AtPnBhcm0uY2FwdHVyZTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCWlmICgoY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPT0gMCkgfHwKLQkgICAgKGNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPT0gMCkpIHsKLQkJLyogcmVzZXQgZnJhbWVyYXRlICovCi0JCXZpbm9fc2V0X2RlZmF1bHRfZnJhbWVyYXRlKHZjcyk7Ci0JfSBlbHNlIHsKLQkJdmlub19zZXRfZnJhbWVyYXRlKHZjcywgY3AtPnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciAvCi0JCQkJICAgY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IpOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAotCQkJICAgICBzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmIpCi17Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCWlmICh2Y3MtPnJlYWRpbmcpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKiBUT0RPOiBjaGVjayBxdWV1ZSB0eXBlICovCi0JaWYgKHJiLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkgewotCQlkcHJpbnRrKCJ0eXBlIG5vdCBtbWFwXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZHByaW50aygiY291bnQgPSAlZFxuIiwgcmItPmNvdW50KTsKLQlpZiAocmItPmNvdW50ID4gMCkgewotCQlpZiAodmlub19pc19jYXB0dXJpbmcodmNzKSkgewotCQkJZHByaW50aygiYnVzeSwgY2FwdHVyaW5nXG4iKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQotCQlpZiAodmlub19xdWV1ZV9oYXNfbWFwcGVkX2J1ZmZlcnMoJnZjcy0+ZmJfcXVldWUpKSB7Ci0JCQlkcHJpbnRrKCJidXN5LCBidWZmZXJzIHN0aWxsIG1hcHBlZFxuIik7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9IGVsc2UgewotCQkJdmNzLT5zdHJlYW1pbmcgPSAwOwotCQkJdmlub19xdWV1ZV9mcmVlKCZ2Y3MtPmZiX3F1ZXVlKTsKLQkJCXZpbm9fcXVldWVfaW5pdCgmdmNzLT5mYl9xdWV1ZSwgJnJiLT5jb3VudCk7Ci0JCX0KLQl9IGVsc2UgewotCQl2Y3MtPnN0cmVhbWluZyA9IDA7Ci0JCXZpbm9fY2FwdHVyZV9zdG9wKHZjcyk7Ci0JCXZpbm9fcXVldWVfZnJlZSgmdmNzLT5mYl9xdWV1ZSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHZpbm9fdjRsMl9nZXRfYnVmZmVyX3N0YXR1cyhzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCi0JCQkJCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYiwKLQkJCQkJc3RydWN0IHY0bDJfYnVmZmVyICpiKQotewotCWlmICh2aW5vX3F1ZXVlX291dGdvaW5nX2NvbnRhaW5zKCZ2Y3MtPmZiX3F1ZXVlLAotCQkJCQkgZmItPmlkKSkgewotCQliLT5mbGFncyAmPSB+VjRMMl9CVUZfRkxBR19RVUVVRUQ7Ci0JCWItPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKLQl9IGVsc2UgaWYgKHZpbm9fcXVldWVfaW5jb21pbmdfY29udGFpbnMoJnZjcy0+ZmJfcXVldWUsCi0JCQkJICAgICAgIGZiLT5pZCkpIHsKLQkJYi0+ZmxhZ3MgJj0gflY0TDJfQlVGX0ZMQUdfRE9ORTsKLQkJYi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7Ci0JfSBlbHNlIHsKLQkJYi0+ZmxhZ3MgJj0gfihWNEwyX0JVRl9GTEFHX0RPTkUgfAotCQkJICAgICAgVjRMMl9CVUZfRkxBR19RVUVVRUQpOwotCX0KLQotCWItPmZsYWdzICY9IH4oVjRMMl9CVUZfRkxBR19USU1FQ09ERSk7Ci0KLQlpZiAoZmItPm1hcF9jb3VudCA+IDApCi0JCWItPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfTUFQUEVEOwotCi0JYi0+ZmxhZ3MgJj0gflY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01BU0s7Ci0JYi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDOwotCi0JYi0+aW5kZXggPSBmYi0+aWQ7Ci0JYi0+bWVtb3J5ID0gKHZjcy0+ZmJfcXVldWUudHlwZSA9PSBWSU5PX01FTU9SWV9NTUFQKSA/Ci0JCVY0TDJfTUVNT1JZX01NQVAgOiBWNEwyX01FTU9SWV9VU0VSUFRSOwotCWItPm0ub2Zmc2V0ID0gZmItPm9mZnNldDsKLQliLT5ieXRlc3VzZWQgPSBmYi0+ZGF0YV9zaXplOwotCWItPmxlbmd0aCA9IGZiLT5zaXplOwotCWItPmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCWItPnNlcXVlbmNlID0gZmItPmZyYW1lX2NvdW50ZXI7Ci0JbWVtY3B5KCZiLT50aW1lc3RhbXAsICZmYi0+dGltZXN0YW1wLAotCSAgICAgICBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKTsKLQkvLyBiLT5pbnB1dCA/Ci0KLQlkcHJpbnRrKCJidWZmZXIgJWQ6IGxlbmd0aCA9ICVkLCBieXRlc3VzZWQgPSAlZCwgb2Zmc2V0ID0gJWRcbiIsCi0JCWZiLT5pZCwgZmItPnNpemUsIGZiLT5kYXRhX3NpemUsIGZiLT5vZmZzZXQpOwotfQotCi1zdGF0aWMgaW50IHZpbm9fcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCi17Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7Ci0KLQlpZiAodmNzLT5yZWFkaW5nKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JLyogVE9ETzogY2hlY2sgcXVldWUgdHlwZSAqLwotCWlmIChiLT5pbmRleCA+PSB2aW5vX3F1ZXVlX2dldF9sZW5ndGgoJnZjcy0+ZmJfcXVldWUpKSB7Ci0JCWRwcmludGsoImludmFsaWQgaW5kZXggPSAlZFxuIiwKLQkJICAgICAgIGItPmluZGV4KTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JZmIgPSB2aW5vX3F1ZXVlX2dldF9idWZmZXIoJnZjcy0+ZmJfcXVldWUsCi0JCQkJICAgYi0+aW5kZXgpOwotCWlmIChmYiA9PSBOVUxMKSB7Ci0JCWRwcmludGsoInZpbm9fcXVldWVfZ2V0X2J1ZmZlcigpIGZhaWxlZCIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQl2aW5vX3Y0bDJfZ2V0X2J1ZmZlcl9zdGF0dXModmNzLCBmYiwgYik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aW5vX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCi0JCQkgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKLXsKLQlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYjsKLQlpbnQgcmV0OwotCi0JaWYgKHZjcy0+cmVhZGluZykKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIFRPRE86IGNoZWNrIHF1ZXVlIHR5cGUgKi8KLQlpZiAoYi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApIHsKLQkJZHByaW50aygidHlwZSBub3QgbW1hcFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWZiID0gdmlub19jYXB0dXJlX2VucXVldWUodmNzLCBiLT5pbmRleCk7Ci0JaWYgKGZiID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jdmlub192NGwyX2dldF9idWZmZXJfc3RhdHVzKHZjcywgZmIsIGIpOwotCi0JaWYgKHZjcy0+c3RyZWFtaW5nKSB7Ci0JCXJldCA9IHZpbm9fY2FwdHVyZV9uZXh0KHZjcywgMSk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpbm9fZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCi0JCQkgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCi17Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQl1bnNpZ25lZCBpbnQgbm9uYmxvY2tpbmcgPSBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSzsKLQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7Ci0JdW5zaWduZWQgaW50IGluY29taW5nLCBvdXRnb2luZzsKLQlpbnQgZXJyOwotCi0JaWYgKHZjcy0+cmVhZGluZykKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIFRPRE86IGNoZWNrIHF1ZXVlIHR5cGUgKi8KLQotCWVyciA9IHZpbm9fcXVldWVfZ2V0X2luY29taW5nKCZ2Y3MtPmZiX3F1ZXVlLCAmaW5jb21pbmcpOwotCWlmIChlcnIpIHsKLQkJZHByaW50aygidmlub19xdWV1ZV9nZXRfaW5jb21pbmcoKSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JZXJyID0gdmlub19xdWV1ZV9nZXRfb3V0Z29pbmcoJnZjcy0+ZmJfcXVldWUsICZvdXRnb2luZyk7Ci0JaWYgKGVycikgewotCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2dldF9vdXRnb2luZygpIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWRwcmludGsoImluY29taW5nID0gJWQsIG91dGdvaW5nID0gJWRcbiIsIGluY29taW5nLCBvdXRnb2luZyk7Ci0KLQlpZiAob3V0Z29pbmcgPT0gMCkgewotCQlpZiAoaW5jb21pbmcgPT0gMCkgewotCQkJZHByaW50aygibm8gaW5jb21pbmcgb3Igb3V0Z29pbmcgYnVmZmVyc1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAobm9uYmxvY2tpbmcpIHsKLQkJCWRwcmludGsoIm5vbi1ibG9ja2luZyBJL08gd2FzIHNlbGVjdGVkIGFuZCAiCi0JCQkJInRoZXJlIGFyZSBubyBidWZmZXJzIHRvIGRlcXVldWVcbiIpOwotCQkJcmV0dXJuIC1FQUdBSU47Ci0JCX0KLQotCQllcnIgPSB2aW5vX3dhaXRfZm9yX2ZyYW1lKHZjcyk7Ci0JCWlmIChlcnIpIHsKLQkJCWVyciA9IHZpbm9fd2FpdF9mb3JfZnJhbWUodmNzKTsKLQkJCWlmIChlcnIpIHsKLQkJCQkvKiBpbnRlcnJ1cHRlZCBvciBubyBmcmFtZXMgY2FwdHVyZWQgYmVjYXVzZSBvZgotCQkJCSAqIGZyYW1lIHNraXBwaW5nICovCi0JCQkJLyogdmlub19jYXB0dXJlX2ZhaWxlZCh2Y3MpOyAqLwotCQkJCXJldHVybiAtRUlPOwotCQkJfQotCQl9Ci0JfQotCi0JZmIgPSB2aW5vX3F1ZXVlX3JlbW92ZSgmdmNzLT5mYl9xdWV1ZSwgJmItPmluZGV4KTsKLQlpZiAoZmIgPT0gTlVMTCkgewotCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX3JlbW92ZSgpIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWVyciA9IHZpbm9fY2hlY2tfYnVmZmVyKHZjcywgZmIpOwotCi0Jdmlub192NGwyX2dldF9idWZmZXJfc3RhdHVzKHZjcywgZmIsIGIpOwotCi0JaWYgKGVycikKLQkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aW5vX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAotCQllbnVtIHY0bDJfYnVmX3R5cGUgaSkKLXsKLQlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXVuc2lnbmVkIGludCBpbmNvbWluZzsKLQlpbnQgcmV0OwotCWlmICh2Y3MtPnJlYWRpbmcpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAodmNzLT5zdHJlYW1pbmcpCi0JCXJldHVybiAwOwotCi0JLy8gVE9ETzogY2hlY2sgcXVldWUgdHlwZQotCi0JaWYgKHZpbm9fcXVldWVfZ2V0X2xlbmd0aCgmdmNzLT5mYl9xdWV1ZSkgPCAxKSB7Ci0JCWRwcmludGsoIm5vIGJ1ZmZlcnMgYWxsb2NhdGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0ID0gdmlub19xdWV1ZV9nZXRfaW5jb21pbmcoJnZjcy0+ZmJfcXVldWUsICZpbmNvbWluZyk7Ci0JaWYgKHJldCkgewotCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2dldF9pbmNvbWluZygpIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXZjcy0+c3RyZWFtaW5nID0gMTsKLQotCWlmIChpbmNvbWluZyA+IDApIHsKLQkJcmV0ID0gdmlub19jYXB0dXJlX25leHQodmNzLCAxKTsKLQkJaWYgKHJldCkgewotCQkJdmNzLT5zdHJlYW1pbmcgPSAwOwotCi0JCQlkcHJpbnRrKCJjb3VsZG4ndCBzdGFydCBjYXB0dXJlXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCi0JCWVudW0gdjRsMl9idWZfdHlwZSBpKQotewotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JaWYgKHZjcy0+cmVhZGluZykKLQkJcmV0dXJuIC1FQlVTWTsKLQotCWlmICghdmNzLT5zdHJlYW1pbmcpCi0JCXJldHVybiAwOwotCi0JdmNzLT5zdHJlYW1pbmcgPSAwOwotCXZpbm9fY2FwdHVyZV9zdG9wKHZjcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aW5vX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKLQkJCSAgICAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnF1ZXJ5Y3RybCkKLXsKLQlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7Ci0JaW50IGVyciA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQlzd2l0Y2ggKHZjcy0+aW5wdXQpIHsKLQljYXNlIFZJTk9fSU5QVVRfRDE6Ci0JCWZvciAoaSA9IDA7IGkgPCBWSU5PX0lORFlDQU1fVjRMMl9DT05UUk9MX0NPVU5UOyBpKyspIHsKLQkJCWlmICh2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5pZCA9PQotCQkJICAgIHF1ZXJ5Y3RybC0+aWQpIHsKLQkJCQltZW1jcHkocXVlcnljdHJsLAotCQkJCSAgICAgICAmdmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0sCi0JCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwpKTsKLQkJCQlxdWVyeWN0cmwtPnJlc2VydmVkWzBdID0gMDsKLQkJCQlnb3RvIGZvdW5kOwotCQkJfQotCQl9Ci0KLQkJZXJyID0gIC1FSU5WQUw7Ci0JCWJyZWFrOwotCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6Ci0JY2FzZSBWSU5PX0lOUFVUX1NWSURFTzoKLQkJZm9yIChpID0gMDsgaSA8IFZJTk9fU0FBNzE5MV9WNEwyX0NPTlRST0xfQ09VTlQ7IGkrKykgewotCQkJaWYgKHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLmlkID09Ci0JCQkgICAgcXVlcnljdHJsLT5pZCkgewotCQkJCW1lbWNweShxdWVyeWN0cmwsCi0JCQkJICAgICAgICZ2aW5vX3NhYTcxOTFfdjRsMl9jb250cm9sc1tpXSwKLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCkpOwotCQkJCXF1ZXJ5Y3RybC0+cmVzZXJ2ZWRbMF0gPSAwOwotCQkJCWdvdG8gZm91bmQ7Ci0JCQl9Ci0JCX0KLQotCQllcnIgPSAgLUVJTlZBTDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gIC1FSU5WQUw7Ci0JfQotCi0gZm91bmQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHZpbm9fZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAotCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmNvbnRyb2wpCi17Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCWludCBlcnIgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0Jc3dpdGNoICh2Y3MtPmlucHV0KSB7Ci0JY2FzZSBWSU5PX0lOUFVUX0QxOiB7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWZvciAoaSA9IDA7IGkgPCBWSU5PX0lORFlDQU1fVjRMMl9DT05UUk9MX0NPVU5UOyBpKyspIHsKLQkJCWlmICh2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5pZCA9PSBjb250cm9sLT5pZCkgewotCQkJCWVyciA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0KLQkJZXJyID0gY2FtZXJhX2NhbGwoY29yZSwgZ19jdHJsLCBjb250cm9sKTsKLQkJaWYgKGVycikKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgotCWNhc2UgVklOT19JTlBVVF9TVklERU86IHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZm9yIChpID0gMDsgaSA8IFZJTk9fU0FBNzE5MV9WNEwyX0NPTlRST0xfQ09VTlQ7IGkrKykgewotCQkJaWYgKHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLmlkID09IGNvbnRyb2wtPmlkKSB7Ci0JCQkJZXJyID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQotCQllcnIgPSBkZWNvZGVyX2NhbGwoY29yZSwgZ19jdHJsLCBjb250cm9sKTsKLQkJaWYgKGVycikKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0OgotCQllcnIgPSAgLUVJTlZBTDsKLQl9Ci0KLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCi0JCQkgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY29udHJvbCkKLXsKLQlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7Ci0JaW50IGVyciA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoIXZpbm9faXNfaW5wdXRfb3duZXIodmNzKSkgewotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXN3aXRjaCAodmNzLT5pbnB1dCkgewotCWNhc2UgVklOT19JTlBVVF9EMTogewotCQllcnIgPSAtRUlOVkFMOwotCQlmb3IgKGkgPSAwOyBpIDwgVklOT19JTkRZQ0FNX1Y0TDJfQ09OVFJPTF9DT1VOVDsgaSsrKSB7Ci0JCQlpZiAodmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0uaWQgPT0gY29udHJvbC0+aWQpIHsKLQkJCQllcnIgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQkJaWYgKGNvbnRyb2wtPnZhbHVlIDwgdmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0ubWluaW11bSB8fAotCQkgICAgY29udHJvbC0+dmFsdWUgPiB2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5tYXhpbXVtKSB7Ci0JCQllcnIgPSAtRVJBTkdFOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJZXJyID0gY2FtZXJhX2NhbGwoY29yZSwgc19jdHJsLCBjb250cm9sKTsKLQkJaWYgKGVycikKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgotCWNhc2UgVklOT19JTlBVVF9TVklERU86IHsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZm9yIChpID0gMDsgaSA8IFZJTk9fU0FBNzE5MV9WNEwyX0NPTlRST0xfQ09VTlQ7IGkrKykgewotCQkJaWYgKHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLmlkID09IGNvbnRyb2wtPmlkKSB7Ci0JCQkJZXJyID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JCWlmIChjb250cm9sLT52YWx1ZSA8IHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLm1pbmltdW0gfHwKLQkJICAgIGNvbnRyb2wtPnZhbHVlID4gdmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0ubWF4aW11bSkgewotCQkJZXJyID0gLUVSQU5HRTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJZXJyID0gZGVjb2Rlcl9jYWxsKGNvcmUsIHNfY3RybCwgY29udHJvbCk7Ci0JCWlmIChlcnIpCi0JCQllcnIgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJZXJyID0gIC1FSU5WQUw7Ci0JfQotCi1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi0vKiBGaWxlIG9wZXJhdGlvbnMgKi8KLQotc3RhdGljIGludCB2aW5vX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlpbnQgcmV0ID0gMDsKLQlkcHJpbnRrKCJvcGVuKCk6IGNoYW5uZWwgPSAlY1xuIiwKLQkgICAgICAgKHZjcy0+Y2hhbm5lbCA9PSBWSU5PX0NIQU5ORUxfQSkgPyAnQScgOiAnQicpOwotCi0JbXV0ZXhfbG9jaygmdmNzLT5tdXRleCk7Ci0KLQlpZiAodmNzLT51c2VycykgewotCQlkcHJpbnRrKCJvcGVuKCk6IGRyaXZlciBidXN5XG4iKTsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSB2aW5vX2FjcXVpcmVfaW5wdXQodmNzKTsKLQlpZiAocmV0KSB7Ci0JCWRwcmludGsoIm9wZW4oKTogdmlub19hY3F1aXJlX2lucHV0KCkgZmFpbGVkXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JdmNzLT51c2VycysrOwotCi0gb3V0OgotCW11dGV4X3VubG9jaygmdmNzLT5tdXRleCk7Ci0KLQlkcHJpbnRrKCJvcGVuKCk6ICVzIVxuIiwgcmV0ID8gImZhaWxlZCIgOiAiY29tcGxldGUiKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19jbG9zZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWRwcmludGsoImNsb3NlKCk6XG4iKTsKLQotCW11dGV4X2xvY2soJnZjcy0+bXV0ZXgpOwotCi0JdmNzLT51c2Vycy0tOwotCi0JaWYgKCF2Y3MtPnVzZXJzKSB7Ci0JCXZpbm9fcmVsZWFzZV9pbnB1dCh2Y3MpOwotCi0JCS8qIHN0b3AgRE1BIGFuZCBmcmVlIGJ1ZmZlcnMgKi8KLQkJdmlub19jYXB0dXJlX3N0b3AodmNzKTsKLQkJdmlub19xdWV1ZV9mcmVlKCZ2Y3MtPmZiX3F1ZXVlKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJnZjcy0+bXV0ZXgpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHZpbm9fdm1fb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKLXsKLQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmIgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKLQotCWZiLT5tYXBfY291bnQrKzsKLQlkcHJpbnRrKCJ2aW5vX3ZtX29wZW4oKTogY291bnQgPSAlZFxuIiwgZmItPm1hcF9jb3VudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHZpbm9fdm1fY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHZpbm9fZnJhbWVidWZmZXIgKmZiID0gdm1hLT52bV9wcml2YXRlX2RhdGE7Ci0KLQlmYi0+bWFwX2NvdW50LS07Ci0JZHByaW50aygidmlub192bV9jbG9zZSgpOiBjb3VudCA9ICVkXG4iLCBmYi0+bWFwX2NvdW50KTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2aW5vX3ZtX29wcyA9IHsKLQkub3Blbgk9IHZpbm9fdm1fb3BlbiwKLQkuY2xvc2UJPSB2aW5vX3ZtX2Nsb3NlLAotfTsKLQotc3RhdGljIGludCB2aW5vX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7Ci0KLQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmIgPSBOVUxMOwotCXVuc2lnbmVkIGludCBpLCBsZW5ndGg7Ci0JaW50IHJldCA9IDA7Ci0KLQlkcHJpbnRrKCJtbWFwKCk6XG4iKTsKLQotCS8vIFRPRE86IHJlamVjdCBtbWFwIGlmIGFscmVhZHkgbWFwcGVkCi0KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2Y3MtPm11dGV4KSkKLQkJcmV0dXJuIC1FSU5UUjsKLQotCWlmICh2Y3MtPnJlYWRpbmcpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQkvLyBUT0RPOiBjaGVjayBxdWV1ZSB0eXBlCi0KLQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKSB7Ci0JCWRwcmludGsoIm1tYXAoKTogYXBwIGJ1ZzogUFJPVF9XUklURSBwbGVhc2VcbiIpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkpIHsKLQkJZHByaW50aygibW1hcCgpOiBhcHAgYnVnOiBNQVBfU0hBUkVEIHBsZWFzZVxuIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGZpbmQgdGhlIGNvcnJlY3QgYnVmZmVyIHVzaW5nIG9mZnNldCAqLwotCWxlbmd0aCA9IHZpbm9fcXVldWVfZ2V0X2xlbmd0aCgmdmNzLT5mYl9xdWV1ZSk7Ci0JaWYgKGxlbmd0aCA9PSAwKSB7Ci0JCWRwcmludGsoIm1tYXAoKTogcXVldWUgbm90IGluaXRpYWxpemVkXG4iKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCWZiID0gdmlub19xdWV1ZV9nZXRfYnVmZmVyKCZ2Y3MtPmZiX3F1ZXVlLCBpKTsKLQkJaWYgKGZiID09IE5VTEwpIHsKLQkJCWRwcmludGsoIm1tYXAoKTogdmlub19xdWV1ZV9nZXRfYnVmZmVyKCkgZmFpbGVkXG4iKTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCWlmIChmYi0+b2Zmc2V0ID09IG9mZnNldCkKLQkJCWdvdG8gZm91bmQ7Ci0JfQotCi0JZHByaW50aygibW1hcCgpOiBpbnZhbGlkIG9mZnNldCA9ICVsdVxuIiwgb2Zmc2V0KTsKLQlyZXQgPSAtRUlOVkFMOwotCWdvdG8gb3V0OwotCi1mb3VuZDoKLQlkcHJpbnRrKCJtbWFwKCk6IGJ1ZmZlciA9ICVkXG4iLCBpKTsKLQotCWlmIChzaXplID4gKGZiLT5kZXNjX3RhYmxlLnBhZ2VfY291bnQgKiBQQUdFX1NJWkUpKSB7Ci0JCWRwcmludGsoIm1tYXAoKTogZmFpbGVkOiBzaXplID0gJWx1ID4gJWx1XG4iLAotCQkJc2l6ZSwgZmItPmRlc2NfdGFibGUucGFnZV9jb3VudCAqIFBBR0VfU0laRSk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBmYi0+ZGVzY190YWJsZS5wYWdlX2NvdW50OyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBwZm4gPQotCQkJdmlydF90b19waHlzKCh2b2lkICopZmItPmRlc2NfdGFibGUudmlydHVhbFtpXSkgPj4KLQkJCVBBR0VfU0hJRlQ7Ci0KLQkJaWYgKHNpemUgPCBQQUdFX1NJWkUpCi0JCQlicmVhazsKLQotCQkvLyBwcm90ZWN0aW9uIHdhczogUEFHRV9SRUFET05MWQotCQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBmbiwgUEFHRV9TSVpFLAotCQkJCSAgICB2bWEtPnZtX3BhZ2VfcHJvdCkpIHsKLQkJCWRwcmludGsoIm1tYXAoKTogcmVtYXBfcGZuX3JhbmdlKCkgZmFpbGVkXG4iKTsKLQkJCXJldCA9IC1FQUdBSU47Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCXN0YXJ0ICs9IFBBR0VfU0laRTsKLQkJc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JfQotCi0JZmItPm1hcF9jb3VudCA9IDE7Ci0KLQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUDsKLQl2bWEtPnZtX2ZsYWdzICY9IH5WTV9JTzsKLQl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IGZiOwotCXZtYS0+dm1fZmlsZSA9IGZpbGU7Ci0Jdm1hLT52bV9vcHMgPSAmdmlub192bV9vcHM7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJnZjcy0+bXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCB2aW5vX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKnB0KQotewotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JdW5zaWduZWQgaW50IG91dGdvaW5nOwotCXVuc2lnbmVkIGludCByZXQgPSAwOwotCi0JLy8gbG9jayBtdXRleCAoPykKLQkvLyBUT0RPOiB0aGlzIGhhcyB0byBiZSBjb3JyZWN0ZWQgZm9yIGRpZmZlcmVudCByZWFkIG1vZGVzCi0KLQlkcHJpbnRrKCJwb2xsKCk6XG4iKTsKLQotCWlmICh2aW5vX3F1ZXVlX2dldF9vdXRnb2luZygmdmNzLT5mYl9xdWV1ZSwgJm91dGdvaW5nKSkgewotCQlkcHJpbnRrKCJwb2xsKCk6IHZpbm9fcXVldWVfZ2V0X291dGdvaW5nKCkgZmFpbGVkXG4iKTsKLQkJcmV0ID0gUE9MTEVSUjsKLQkJZ290byBlcnJvcjsKLQl9Ci0JaWYgKG91dGdvaW5nID4gMCkKLQkJZ290byBvdmVyOwotCi0JcG9sbF93YWl0KGZpbGUsICZ2Y3MtPmZiX3F1ZXVlLmZyYW1lX3dhaXRfcXVldWUsIHB0KTsKLQotCWlmICh2aW5vX3F1ZXVlX2dldF9vdXRnb2luZygmdmNzLT5mYl9xdWV1ZSwgJm91dGdvaW5nKSkgewotCQlkcHJpbnRrKCJwb2xsKCk6IHZpbm9fcXVldWVfZ2V0X291dGdvaW5nKCkgZmFpbGVkXG4iKTsKLQkJcmV0ID0gUE9MTEVSUjsKLQkJZ290byBlcnJvcjsKLQl9Ci0KLW92ZXI6Ci0JZHByaW50aygicG9sbCgpOiBkYXRhICVzYXZhaWxhYmxlXG4iLAotCQkob3V0Z29pbmcgPiAwKSA/ICIiIDogIm5vdCAiKTsKLQotCWlmIChvdXRnb2luZyA+IDApCi0JCXJldCA9IFBPTExJTiB8IFBPTExSRE5PUk07Ci0KLWVycm9yOgotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBsb25nIHZpbm9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCi0JCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JbG9uZyByZXQ7Ci0KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2Y3MtPm11dGV4KSkKLQkJcmV0dXJuIC1FSU5UUjsKLQotCXJldCA9IHZpZGVvX2lvY3RsMihmaWxlLCBjbWQsIGFyZyk7Ci0KLQltdXRleF91bmxvY2soJnZjcy0+bXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyogSW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAgKi8KLQotLyogX19pbml0ZGF0YSAqLwotc3RhdGljIGludCB2aW5vX2luaXRfc3RhZ2U7Ci0KLWNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aW5vX2lvY3RsX29wcyA9IHsKLQkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgICAgID0gdmlub19lbnVtX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAJICAgICA9IHZpbm9fZ19mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3NfZm10X3ZpZF9jYXAgIAkgICAgID0gdmlub19zX2ZtdF92aWRfY2FwLAotCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwCSAgICAgPSB2aW5vX3RyeV9mbXRfdmlkX2NhcCwKLQkudmlkaW9jX3F1ZXJ5Y2FwICAgIAkgICAgID0gdmlub19xdWVyeWNhcCwKLQkudmlkaW9jX2VudW1faW5wdXQgICAJICAgICA9IHZpbm9fZW51bV9pbnB1dCwKLQkudmlkaW9jX2dfaW5wdXQgICAgICAJICAgICA9IHZpbm9fZ19pbnB1dCwKLQkudmlkaW9jX3NfaW5wdXQgICAgICAJICAgICA9IHZpbm9fc19pbnB1dCwKLQkudmlkaW9jX2dfc3RkIAkJICAgICA9IHZpbm9fZ19zdGQsCi0JLnZpZGlvY19zX3N0ZCAJCSAgICAgPSB2aW5vX3Nfc3RkLAotCS52aWRpb2NfcXVlcnlzdGQgICAgICAgICAgICAgPSB2aW5vX3F1ZXJ5c3RkLAotCS52aWRpb2NfY3JvcGNhcCAgICAgIAkgICAgID0gdmlub19jcm9wY2FwLAotCS52aWRpb2Nfc19jcm9wICAgICAgIAkgICAgID0gdmlub19zX2Nyb3AsCi0JLnZpZGlvY19nX2Nyb3AgICAgICAgCSAgICAgPSB2aW5vX2dfY3JvcCwKLQkudmlkaW9jX3NfcGFybSAJCSAgICAgPSB2aW5vX3NfcGFybSwKLQkudmlkaW9jX2dfcGFybSAJCSAgICAgPSB2aW5vX2dfcGFybSwKLQkudmlkaW9jX3JlcWJ1ZnMgICAgICAgICAgICAgID0gdmlub19yZXFidWZzLAotCS52aWRpb2NfcXVlcnlidWYgICAgICAgICAgICAgPSB2aW5vX3F1ZXJ5YnVmLAotCS52aWRpb2NfcWJ1ZiAgICAgICAgICAgICAgICAgPSB2aW5vX3FidWYsCi0JLnZpZGlvY19kcWJ1ZiAgICAgICAgICAgICAgICA9IHZpbm9fZHFidWYsCi0JLnZpZGlvY19zdHJlYW1vbiAgICAgICAgICAgICA9IHZpbm9fc3RyZWFtb24sCi0JLnZpZGlvY19zdHJlYW1vZmYgICAgICAgICAgICA9IHZpbm9fc3RyZWFtb2ZmLAotCS52aWRpb2NfcXVlcnljdHJsICAgICAgICAgICAgPSB2aW5vX3F1ZXJ5Y3RybCwKLQkudmlkaW9jX2dfY3RybCAgICAgICAgICAgICAgID0gdmlub19nX2N0cmwsCi0JLnZpZGlvY19zX2N0cmwgICAgICAgICAgICAgICA9IHZpbm9fc19jdHJsLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aW5vX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHZpbm9fb3BlbiwKLQkucmVsZWFzZQk9IHZpbm9fY2xvc2UsCi0JLnVubG9ja2VkX2lvY3RsCT0gdmlub19pb2N0bCwKLQkubW1hcAkJPSB2aW5vX21tYXAsCi0JLnBvbGwJCT0gdmlub19wb2xsLAotfTsKLQotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdmRldl90ZW1wbGF0ZSA9IHsKLQkubmFtZQkJPSAiTk9UIFNFVCIsCi0JLmZvcHMJCT0gJnZpbm9fZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZ2aW5vX2lvY3RsX29wcywKLQkudHZub3JtcyAJPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMIHwgVjRMMl9TVERfU0VDQU0sCi19OwotCi1zdGF0aWMgdm9pZCB2aW5vX21vZHVsZV9jbGVhbnVwKGludCBzdGFnZSkKLXsKLQlzd2l0Y2goc3RhZ2UpIHsKLQljYXNlIDExOgotCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh2aW5vX2RydmRhdGEtPmIudmRldik7Ci0JCXZpbm9fZHJ2ZGF0YS0+Yi52ZGV2ID0gTlVMTDsKLQljYXNlIDEwOgotCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh2aW5vX2RydmRhdGEtPmEudmRldik7Ci0JCXZpbm9fZHJ2ZGF0YS0+YS52ZGV2ID0gTlVMTDsKLQljYXNlIDk6Ci0JCWkyY19kZWxfYWRhcHRlcigmdmlub19pMmNfYWRhcHRlcik7Ci0JY2FzZSA4OgotCQlmcmVlX2lycShTR0lfVklOT19JUlEsIE5VTEwpOwotCWNhc2UgNzoKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+Yi52ZGV2KSB7Ci0JCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2aW5vX2RydmRhdGEtPmIudmRldik7Ci0JCQl2aW5vX2RydmRhdGEtPmIudmRldiA9IE5VTEw7Ci0JCX0KLQljYXNlIDY6Ci0JCWlmICh2aW5vX2RydmRhdGEtPmEudmRldikgewotCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uodmlub19kcnZkYXRhLT5hLnZkZXYpOwotCQkJdmlub19kcnZkYXRhLT5hLnZkZXYgPSBOVUxMOwotCQl9Ci0JY2FzZSA1OgotCQkvKiBhbGwgZW50cmllcyBpbiBkbWFfY3B1IGR1bW15IHRhYmxlIGhhdmUgdGhlIHNhbWUgYWRkcmVzcyAqLwotCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsCi0JCQkJIHZpbm9fZHJ2ZGF0YS0+ZHVtbXlfZGVzY190YWJsZS5kbWFfY3B1WzBdLAotCQkJCSBQQUdFX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7Ci0JCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFZJTk9fRFVNTVlfREVTQ19DT1VOVAotCQkJCSAgKiBzaXplb2YoZG1hX2FkZHJfdCksCi0JCQkJICAodm9pZCAqKXZpbm9fZHJ2ZGF0YS0+Ci0JCQkJICBkdW1teV9kZXNjX3RhYmxlLmRtYV9jcHUsCi0JCQkJICB2aW5vX2RydmRhdGEtPmR1bW15X2Rlc2NfdGFibGUuZG1hKTsKLQljYXNlIDQ6Ci0JCWZyZWVfcGFnZSh2aW5vX2RydmRhdGEtPmR1bW15X3BhZ2UpOwotCWNhc2UgMzoKLQkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcigmdmlub19kcnZkYXRhLT52NGwyX2Rldik7Ci0JY2FzZSAyOgotCQlrZnJlZSh2aW5vX2RydmRhdGEpOwotCWNhc2UgMToKLQkJaW91bm1hcCh2aW5vKTsKLQljYXNlIDA6Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRwcmludGsoInZpbm9fbW9kdWxlX2NsZWFudXAoKTogaW52YWxpZCBjbGVhbnVwIHN0YWdlID0gJWRcbiIsCi0JCQlzdGFnZSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHZpbm9fcHJvYmUodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHJldl9pZDsKLQotCWlmIChpcDIyX2lzX2Z1bGxob3VzZSgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVklOTyBkb2Vzbid0IGV4aXN0IGluIElQMjIgRnVsbGhvdXNlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKCEoc2dpbWMtPnN5c3RlbWlkICYgU0dJTUNfU1lTSURfRVBSRVNFTlQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVklOTyBpcyBub3QgZm91bmQgKEVJU0EgQlVTIG5vdCBwcmVzZW50KVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXZpbm8gPSAoc3RydWN0IHNnaV92aW5vICopaW9yZW1hcChWSU5PX0JBU0UsIHNpemVvZihzdHJ1Y3Qgc2dpX3Zpbm8pKTsKLQlpZiAoIXZpbm8pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJWSU5POiBpb3JlbWFwKCkgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXZpbm9faW5pdF9zdGFnZSsrOwotCi0JaWYgKGdldF9kYmUocmV2X2lkLCAmKHZpbm8tPnJldl9pZCkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlYWQgVklOTyByZXZpc2lvbiByZWdpc3RlclxuIik7Ci0JCXZpbm9fbW9kdWxlX2NsZWFudXAodmlub19pbml0X3N0YWdlKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKFZJTk9fSURfVkFMVUUocmV2X2lkKSAhPSBWSU5PX0NISVBfSUQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmtub3duIFZJTk8gY2hpcCBJRCAoUmV2L0lEOiAweCUwMmx4KVxuIiwKLQkJICAgICAgIHJldl9pZCk7Ci0JCXZpbm9fbW9kdWxlX2NsZWFudXAodmlub19pbml0X3N0YWdlKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJpbnRrKEtFUk5fSU5GTyAiVklOTyByZXZpc2lvbiAlbGQgZm91bmRcbiIsIFZJTk9fUkVWX05VTShyZXZfaWQpKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpbm9faW5pdCh2b2lkKQotewotCWRtYV9hZGRyX3QgZG1hX2R1bW15X2FkZHJlc3M7Ci0JaW50IGVycjsKLQlpbnQgaTsKLQotCXZpbm9fZHJ2ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aW5vX3NldHRpbmdzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF2aW5vX2RydmRhdGEpIHsKLQkJdmlub19tb2R1bGVfY2xlYW51cCh2aW5vX2luaXRfc3RhZ2UpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0Jdmlub19pbml0X3N0YWdlKys7Ci0Jc3RybGNweSh2aW5vX2RydmRhdGEtPnY0bDJfZGV2Lm5hbWUsICJ2aW5vIiwKLQkJCXNpemVvZih2aW5vX2RydmRhdGEtPnY0bDJfZGV2Lm5hbWUpKTsKLQllcnIgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCAmdmlub19kcnZkYXRhLT52NGwyX2Rldik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQl2aW5vX2luaXRfc3RhZ2UrKzsKLQotCS8qIGNyZWF0ZSBhIGR1bW15IGRtYSBkZXNjcmlwdG9yICovCi0Jdmlub19kcnZkYXRhLT5kdW1teV9wYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKLQlpZiAoIXZpbm9fZHJ2ZGF0YS0+ZHVtbXlfcGFnZSkgewotCQl2aW5vX21vZHVsZV9jbGVhbnVwKHZpbm9faW5pdF9zdGFnZSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQl2aW5vX2luaXRfc3RhZ2UrKzsKLQotCS8vIFRPRE86IHVzZSBwYWdlX2NvdW50IGluIGR1bW15X2Rlc2NfdGFibGUKLQotCXZpbm9fZHJ2ZGF0YS0+ZHVtbXlfZGVzY190YWJsZS5kbWFfY3B1ID0KLQkJZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsCi0JCVZJTk9fRFVNTVlfREVTQ19DT1VOVCAqIHNpemVvZihkbWFfYWRkcl90KSwKLQkJJnZpbm9fZHJ2ZGF0YS0+ZHVtbXlfZGVzY190YWJsZS5kbWEsCi0JCUdGUF9LRVJORUwgfCBHRlBfRE1BKTsKLQlpZiAoIXZpbm9fZHJ2ZGF0YS0+ZHVtbXlfZGVzY190YWJsZS5kbWFfY3B1KSB7Ci0JCXZpbm9fbW9kdWxlX2NsZWFudXAodmlub19pbml0X3N0YWdlKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXZpbm9faW5pdF9zdGFnZSsrOwotCi0JZG1hX2R1bW15X2FkZHJlc3MgPSBkbWFfbWFwX3NpbmdsZShOVUxMLAotCQkJCQkgICAodm9pZCAqKXZpbm9fZHJ2ZGF0YS0+ZHVtbXlfcGFnZSwKLQkJCQkJUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwotCWZvciAoaSA9IDA7IGkgPCBWSU5PX0RVTU1ZX0RFU0NfQ09VTlQ7IGkrKykgewotCQl2aW5vX2RydmRhdGEtPmR1bW15X2Rlc2NfdGFibGUuZG1hX2NwdVtpXSA9IGRtYV9kdW1teV9hZGRyZXNzOwotCX0KLQotCS8qIGluaXRpYWxpemUgVklOTyAqLwotCi0Jdmluby0+Y29udHJvbCA9IDA7Ci0Jdmluby0+YS5uZXh0XzRfZGVzYyA9IHZpbm9fZHJ2ZGF0YS0+ZHVtbXlfZGVzY190YWJsZS5kbWE7Ci0Jdmluby0+Yi5uZXh0XzRfZGVzYyA9IHZpbm9fZHJ2ZGF0YS0+ZHVtbXlfZGVzY190YWJsZS5kbWE7Ci0JdWRlbGF5KFZJTk9fREVTQ19GRVRDSF9ERUxBWSk7Ci0KLQl2aW5vLT5pbnRyX3N0YXR1cyA9IDA7Ci0KLQl2aW5vLT5hLmZpZm9fdGhyZXMgPSBWSU5PX0ZJRk9fVEhSRVNIT0xEX0RFRkFVTFQ7Ci0Jdmluby0+Yi5maWZvX3RocmVzID0gVklOT19GSUZPX1RIUkVTSE9MRF9ERUZBVUxUOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlub19pbml0X2NoYW5uZWxfc2V0dGluZ3Moc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAotCQkJCSB1bnNpZ25lZCBpbnQgY2hhbm5lbCwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQl2Y3MtPmNoYW5uZWwgPSBjaGFubmVsOwotCXZjcy0+aW5wdXQgPSBWSU5PX0lOUFVUX05PTkU7Ci0JdmNzLT5hbHBoYSA9IDA7Ci0JdmNzLT51c2VycyA9IDA7Ci0JdmNzLT5kYXRhX2Zvcm1hdCA9IFZJTk9fREFUQV9GTVRfR1JFWTsKLQl2Y3MtPmRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX05UU0M7Ci0JdmNzLT5kZWNpbWF0aW9uID0gMTsKLQl2aW5vX3NldF9kZWZhdWx0X2NsaXBwaW5nKHZjcyk7Ci0Jdmlub19zZXRfZGVmYXVsdF9mcmFtZXJhdGUodmNzKTsKLQotCXZjcy0+Y2FwdHVyaW5nID0gMDsKLQotCW11dGV4X2luaXQoJnZjcy0+bXV0ZXgpOwotCXNwaW5fbG9ja19pbml0KCZ2Y3MtPmNhcHR1cmVfbG9jayk7Ci0KLQltdXRleF9pbml0KCZ2Y3MtPmZiX3F1ZXVlLnF1ZXVlX211dGV4KTsKLQlzcGluX2xvY2tfaW5pdCgmdmNzLT5mYl9xdWV1ZS5xdWV1ZV9sb2NrKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ2Y3MtPmZiX3F1ZXVlLmZyYW1lX3dhaXRfcXVldWUpOwotCi0JdmNzLT52ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7Ci0JaWYgKCF2Y3MtPnZkZXYpIHsKLQkJdmlub19tb2R1bGVfY2xlYW51cCh2aW5vX2luaXRfc3RhZ2UpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0Jdmlub19pbml0X3N0YWdlKys7Ci0KLQltZW1jcHkodmNzLT52ZGV2LCAmdmRldl90ZW1wbGF0ZSwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCB2aWRlb19kZXZpY2UpKTsKLQlzdHJjcHkodmNzLT52ZGV2LT5uYW1lLCBuYW1lKTsKLQl2Y3MtPnZkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKLQl2Y3MtPnZkZXYtPnY0bDJfZGV2ID0gJnZpbm9fZHJ2ZGF0YS0+djRsMl9kZXY7Ci0KLQl2aWRlb19zZXRfZHJ2ZGF0YSh2Y3MtPnZkZXYsIHZjcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBfX2luaXQgdmlub19tb2R1bGVfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJTR0kgVklOTyBkcml2ZXIgdmVyc2lvbiAlc1xuIiwKLQkgICAgICAgVklOT19NT0RVTEVfVkVSU0lPTik7Ci0KLQlyZXQgPSB2aW5vX3Byb2JlKCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHZpbm9faW5pdCgpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBpbml0aWFsaXplIGRhdGEgc3RydWN0dXJlcyAqLwotCi0Jc3Bpbl9sb2NrX2luaXQoJnZpbm9fZHJ2ZGF0YS0+dmlub19sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrKTsKLQotCXJldCA9IHZpbm9faW5pdF9jaGFubmVsX3NldHRpbmdzKCZ2aW5vX2RydmRhdGEtPmEsIFZJTk9fQ0hBTk5FTF9BLAotCQkJCSAgICB2aW5vX3ZkZXZfbmFtZV9hKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gdmlub19pbml0X2NoYW5uZWxfc2V0dGluZ3MoJnZpbm9fZHJ2ZGF0YS0+YiwgVklOT19DSEFOTkVMX0IsCi0JCQkJICAgIHZpbm9fdmRldl9uYW1lX2IpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBpbml0aWFsaXplIGhhcmR3YXJlIGFuZCByZWdpc3RlciBWNEwgZGV2aWNlcyAqLwotCi0JcmV0ID0gcmVxdWVzdF9pcnEoU0dJX1ZJTk9fSVJRLCB2aW5vX2ludGVycnVwdCwgMCwKLQkJdmlub19kcml2ZXJfZGVzY3JpcHRpb24sIE5VTEwpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJWSU5POiByZXF1ZXN0aW5nIElSUSAlMDJkIGZhaWxlZFxuIiwKLQkJICAgICAgIFNHSV9WSU5PX0lSUSk7Ci0JCXZpbm9fbW9kdWxlX2NsZWFudXAodmlub19pbml0X3N0YWdlKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCXZpbm9faW5pdF9zdGFnZSsrOwotCi0JcmV0ID0gaTJjX2FkZF9hZGFwdGVyKCZ2aW5vX2kyY19hZGFwdGVyKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVklOTyBJMkMgYnVzIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwotCQl2aW5vX21vZHVsZV9jbGVhbnVwKHZpbm9faW5pdF9zdGFnZSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCWkyY19zZXRfYWRhcGRhdGEoJnZpbm9faTJjX2FkYXB0ZXIsICZ2aW5vX2RydmRhdGEtPnY0bDJfZGV2KTsKLQl2aW5vX2luaXRfc3RhZ2UrKzsKLQotCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2aW5vX2RydmRhdGEtPmEudmRldiwKLQkJCQkgICAgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVklOTyBjaGFubmVsIEEgVmlkZW80TGludXgtZGV2aWNlICIKLQkJICAgICAgICJyZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKLQkJdmlub19tb2R1bGVfY2xlYW51cCh2aW5vX2luaXRfc3RhZ2UpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0Jdmlub19pbml0X3N0YWdlKys7Ci0KLQlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uodmlub19kcnZkYXRhLT5iLnZkZXYsCi0JCQkJICAgIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIlZJTk8gY2hhbm5lbCBCIFZpZGVvNExpbnV4LWRldmljZSAiCi0JCSAgICAgICAicmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Ci0JCXZpbm9fbW9kdWxlX2NsZWFudXAodmlub19pbml0X3N0YWdlKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXZpbm9faW5pdF9zdGFnZSsrOwotCi0Jdmlub19kcnZkYXRhLT5kZWNvZGVyID0KLQkJdjRsMl9pMmNfbmV3X3N1YmRldigmdmlub19kcnZkYXRhLT52NGwyX2RldiwgJnZpbm9faTJjX2FkYXB0ZXIsCi0JCQkgICAgICAgInNhYTcxOTEiLCAwLCBJMkNfQUREUlMoMHg0NSkpOwotCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhID0KLQkJdjRsMl9pMmNfbmV3X3N1YmRldigmdmlub19kcnZkYXRhLT52NGwyX2RldiwgJnZpbm9faTJjX2FkYXB0ZXIsCi0JCQkgICAgICAgImluZHljYW0iLCAwLCBJMkNfQUREUlMoMHgyYikpOwotCi0JZHByaW50aygiaW5pdCBjb21wbGV0ZSFcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB2aW5vX21vZHVsZV9leGl0KHZvaWQpCi17Ci0JZHByaW50aygiZXhpdGluZywgc3RhZ2UgPSAlZCAuLi5cbiIsIHZpbm9faW5pdF9zdGFnZSk7Ci0Jdmlub19tb2R1bGVfY2xlYW51cCh2aW5vX2luaXRfc3RhZ2UpOwotCWRwcmludGsoImNsZWFudXAgY29tcGxldGUsIGV4aXQhXG4iKTsKLX0KLQotbW9kdWxlX2luaXQodmlub19tb2R1bGVfaW5pdCk7Ci1tb2R1bGVfZXhpdCh2aW5vX21vZHVsZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS92aW5vL3Zpbm8uaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS92aW5vL3Zpbm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGUyZDYxNS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvdmluby92aW5vLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoKLSAqIERyaXZlciBmb3IgdGhlIFZJTk8gKFZpZGVvIEluIE5vIE91dCkgc3lzdGVtIGZvdW5kIGluIFNHSSBJbmR5cy4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IFVsZiBLYXJsc3NvbiA8dWxmY0BidW4uZmFsa2VuYmVyZy5zZT4KLSAqIENvcHlyaWdodCAoQykgMjAwMyBMYWRpc2xhdiBNaWNobCA8bGFkaXNAbGludXgtbWlwcy5vcmc+Ci0gKi8KLQotI2lmbmRlZiBfVklOT19IXwotI2RlZmluZSBfVklOT19IXwotCi0jZGVmaW5lIFZJTk9fQkFTRQkweDAwMDgwMDAwCS8qIFZpbm8gaXMgaW4gdGhlIEVJU0EgYWRkcmVzcyBzcGFjZSwKLQkJCQkJICogYnV0IGl0IGlzIG5vdCBhbiBFSVNBIGJ1cyBjYXJkICovCi0jZGVmaW5lIFZJTk9fUEFHRV9TSVpFCTQwOTYKLQotc3RydWN0IHNnaV92aW5vX2NoYW5uZWwgewotCXUzMiBfcGFkX2FscGhhOwotCXZvbGF0aWxlIHUzMiBhbHBoYTsKLQotI2RlZmluZSBWSU5PX0NMSVBfWCh4KQkJKCh4KSAmIDB4M2ZmKQkJLyogYml0cyAwOjkgKi8KLSNkZWZpbmUgVklOT19DTElQX09ERCh4KQkoKCh4KSAmIDB4MWZmKSA8PCAxMCkJLyogYml0cyAxMDoxOCAqLwotI2RlZmluZSBWSU5PX0NMSVBfRVZFTih4KQkoKCh4KSAmIDB4MWZmKSA8PCAxOSkJLyogYml0cyAxOToyNyAqLwotCXUzMiBfcGFkX2NsaXBfc3RhcnQ7Ci0Jdm9sYXRpbGUgdTMyIGNsaXBfc3RhcnQ7Ci0JdTMyIF9wYWRfY2xpcF9lbmQ7Ci0Jdm9sYXRpbGUgdTMyIGNsaXBfZW5kOwotCi0jZGVmaW5lIFZJTk9fRlJBTUVSVF9GVUxMCTB4ZmZmCi0jZGVmaW5lIFZJTk9fRlJBTUVSVF9QQUwJKDE8PDApCQkJLyogMD1OVFNDIDE9UEFMICovCi0jZGVmaW5lIFZJTk9fRlJBTUVSVF9SVCh4KQkoKCh4KSAmIDB4ZmZmKSA8PCAxKQkvKiBiaXRzIDE6MTIgKi8KLQl1MzIgX3BhZF9mcmFtZV9yYXRlOwotCXZvbGF0aWxlIHUzMiBmcmFtZV9yYXRlOwotCi0JdTMyIF9wYWRfZmllbGRfY291bnRlcjsKLQl2b2xhdGlsZSB1MzIgZmllbGRfY291bnRlcjsKLQl1MzIgX3BhZF9saW5lX3NpemU7Ci0Jdm9sYXRpbGUgdTMyIGxpbmVfc2l6ZTsKLQl1MzIgX3BhZF9saW5lX2NvdW50OwotCXZvbGF0aWxlIHUzMiBsaW5lX2NvdW50OwotCXUzMiBfcGFkX3BhZ2VfaW5kZXg7Ci0Jdm9sYXRpbGUgdTMyIHBhZ2VfaW5kZXg7Ci0JdTMyIF9wYWRfbmV4dF80X2Rlc2M7Ci0Jdm9sYXRpbGUgdTMyIG5leHRfNF9kZXNjOwotCXUzMiBfcGFkX3N0YXJ0X2Rlc2NfdGJsOwotCXZvbGF0aWxlIHUzMiBzdGFydF9kZXNjX3RibDsKLQotI2RlZmluZSBWSU5PX0RFU0NfSlVNUAkJKDE8PDMwKQotI2RlZmluZSBWSU5PX0RFU0NfU1RPUAkJKDE8PDMxKQotI2RlZmluZSBWSU5PX0RFU0NfVkFMSUQJCSgxPDwzMikKLQl1MzIgX3BhZF9kZXNjXzA7Ci0Jdm9sYXRpbGUgdTMyIGRlc2NfMDsKLQl1MzIgX3BhZF9kZXNjXzE7Ci0Jdm9sYXRpbGUgdTMyIGRlc2NfMTsKLQl1MzIgX3BhZF9kZXNjXzI7Ci0Jdm9sYXRpbGUgdTMyIGRlc2NfMjsKLQl1MzIgX3BhZF9CZGVzY18zOwotCXZvbGF0aWxlIHUzMiBkZXNjXzM7Ci0KLQl1MzIgX3BhZF9maWZvX3RocmVzOwotCXZvbGF0aWxlIHUzMiBmaWZvX3RocmVzOwotCXUzMiBfcGFkX2ZpZm9fcmVhZDsKLQl2b2xhdGlsZSB1MzIgZmlmb19yZWFkOwotCXUzMiBfcGFkX2ZpZm9fd3JpdGU7Ci0Jdm9sYXRpbGUgdTMyIGZpZm9fd3JpdGU7Ci19OwotCi1zdHJ1Y3Qgc2dpX3Zpbm8gewotI2RlZmluZSBWSU5PX0NISVBfSUQJCTB4YgotI2RlZmluZSBWSU5PX1JFVl9OVU0oeCkJCSgoeCkgJiAweDBmKQotI2RlZmluZSBWSU5PX0lEX1ZBTFVFKHgpCSgoKHgpICYgMHhmMCkgPj4gNCkKLQl1MzIgX3BhZF9yZXZfaWQ7Ci0Jdm9sYXRpbGUgdTMyIHJldl9pZDsKLQotI2RlZmluZSBWSU5PX0NUUkxfTElUVExFX0VORElBTgkJKDE8PDApCi0jZGVmaW5lIFZJTk9fQ1RSTF9BX0VPRl9JTlQJCSgxPDwxKQkvKiBGaWVsZCB0cmFuc2ZlcnJlZCBpbnQgKi8KLSNkZWZpbmUgVklOT19DVFJMX0FfRklGT19JTlQJCSgxPDwyKQkvKiBGSUZPIG92ZXJmbG93IGludCAqLwotI2RlZmluZSBWSU5PX0NUUkxfQV9FT0RfSU5UCQkoMTw8MykJLyogRW5kIG9mIGRlc2MgdGFibGUgaW50ICovCi0jZGVmaW5lIFZJTk9fQ1RSTF9BX0lOVAkJCShWSU5PX0NUUkxfQV9FT0ZfSU5UIHwgXAotCQkJCQkgVklOT19DVFJMX0FfRklGT19JTlQgfCBcCi0JCQkJCSBWSU5PX0NUUkxfQV9FT0RfSU5UKQotI2RlZmluZSBWSU5PX0NUUkxfQl9FT0ZfSU5UCQkoMTw8NCkJLyogRmllbGQgdHJhbnNmZXJyZWQgaW50ICovCi0jZGVmaW5lIFZJTk9fQ1RSTF9CX0ZJRk9fSU5UCQkoMTw8NSkJLyogRklGTyBvdmVyZmxvdyBpbnQgKi8KLSNkZWZpbmUgVklOT19DVFJMX0JfRU9EX0lOVAkJKDE8PDYpCS8qIEVuZCBvZiBkZXNjIHRhYmxlIGludCAqLwotI2RlZmluZSBWSU5PX0NUUkxfQl9JTlQJCQkoVklOT19DVFJMX0JfRU9GX0lOVCB8IFwKLQkJCQkJIFZJTk9fQ1RSTF9CX0ZJRk9fSU5UIHwgXAotCQkJCQkgVklOT19DVFJMX0JfRU9EX0lOVCkKLSNkZWZpbmUgVklOT19DVFJMX0FfRE1BX0VOQkwJCSgxPDw3KQotI2RlZmluZSBWSU5PX0NUUkxfQV9JTlRFUkxFQVZFX0VOQkwJKDE8PDgpCi0jZGVmaW5lIFZJTk9fQ1RSTF9BX1NZTkNfRU5CTAkJKDE8PDkpCi0jZGVmaW5lIFZJTk9fQ1RSTF9BX1NFTEVDVAkJKDE8PDEwKQkvKiAxPUQxIDA9UGhpbGlwcyAqLwotI2RlZmluZSBWSU5PX0NUUkxfQV9SR0IJCQkoMTw8MTEpCS8qIDE9UkdCIDA9WVVWICovCi0jZGVmaW5lIFZJTk9fQ1RSTF9BX0xVTUFfT05MWQkJKDE8PDEyKQotI2RlZmluZSBWSU5PX0NUUkxfQV9ERUNfRU5CTAkJKDE8PDEzKQkvKiBEZWNpbWF0aW9uICovCi0jZGVmaW5lIFZJTk9fQ1RSTF9BX0RFQ19TQ0FMRV9NQVNLCTB4MWMwMDAJLyogYml0cyAxNDoxNyAqLwotI2RlZmluZSBWSU5PX0NUUkxfQV9ERUNfU0NBTEVfU0hJRlQJKDE0KQotI2RlZmluZSBWSU5PX0NUUkxfQV9ERUNfSE9SX09OTFkJKDE8PDE3KQkvKiBIb3Jpem9udGFsIG9ubHkgKi8KLSNkZWZpbmUgVklOT19DVFJMX0FfRElUSEVSCQkoMTw8MTgpCS8qIDI0IC0+IDggYml0IGRpdGhlciAqLwotI2RlZmluZSBWSU5PX0NUUkxfQl9ETUFfRU5CTAkJKDE8PDE5KQotI2RlZmluZSBWSU5PX0NUUkxfQl9JTlRFUkxFQVZFX0VOQkwJKDE8PDIwKQotI2RlZmluZSBWSU5PX0NUUkxfQl9TWU5DX0VOQkwJCSgxPDwyMSkKLSNkZWZpbmUgVklOT19DVFJMX0JfU0VMRUNUCQkoMTw8MjIpCS8qIDE9RDEgMD1QaGlsaXBzICovCi0jZGVmaW5lIFZJTk9fQ1RSTF9CX1JHQgkJCSgxPDwyMykJLyogMT1SR0IgMD1ZVVYgKi8KLSNkZWZpbmUgVklOT19DVFJMX0JfTFVNQV9PTkxZCQkoMTw8MjQpCi0jZGVmaW5lIFZJTk9fQ1RSTF9CX0RFQ19FTkJMCQkoMTw8MjUpCS8qIERlY2ltYXRpb24gKi8KLSNkZWZpbmUgVklOT19DVFJMX0JfREVDX1NDQUxFX01BU0sJMHgxYzAwMDAwMAkvKiBiaXRzIDI2OjI4ICovCi0jZGVmaW5lIFZJTk9fQ1RSTF9CX0RFQ19TQ0FMRV9TSElGVAkoMjYpCi0jZGVmaW5lIFZJTk9fQ1RSTF9CX0RFQ19IT1JfT05MWQkoMTw8MjkpCS8qIERlY2ltYXRpb24gaG9yaXpvbnRhbCBvbmx5ICovCi0jZGVmaW5lIFZJTk9fQ1RSTF9CX0RJVEhFUgkJKDE8PDMwKQkvKiBDaGFuQiAyNCAtPiA4IGJpdCBkaXRoZXIgKi8KLQl1MzIgX3BhZF9jb250cm9sOwotCXZvbGF0aWxlIHUzMiBjb250cm9sOwotCi0jZGVmaW5lIFZJTk9fSU5UU1RBVF9BX0VPRgkJKDE8PDApCS8qIEZpZWxkIHRyYW5zZmVycmVkIGludCAqLwotI2RlZmluZSBWSU5PX0lOVFNUQVRfQV9GSUZPCQkoMTw8MSkJLyogRklGTyBvdmVyZmxvdyBpbnQgKi8KLSNkZWZpbmUgVklOT19JTlRTVEFUX0FfRU9ECQkoMTw8MikJLyogRW5kIG9mIGRlc2MgdGFibGUgaW50ICovCi0jZGVmaW5lIFZJTk9fSU5UU1RBVF9BCQkJKFZJTk9fSU5UU1RBVF9BX0VPRiB8IFwKLQkJCQkJIFZJTk9fSU5UU1RBVF9BX0ZJRk8gfCBcCi0JCQkJCSBWSU5PX0lOVFNUQVRfQV9FT0QpCi0jZGVmaW5lIFZJTk9fSU5UU1RBVF9CX0VPRgkJKDE8PDMpCS8qIEZpZWxkIHRyYW5zZmVycmVkIGludCAqLwotI2RlZmluZSBWSU5PX0lOVFNUQVRfQl9GSUZPCQkoMTw8NCkJLyogRklGTyBvdmVyZmxvdyBpbnQgKi8KLSNkZWZpbmUgVklOT19JTlRTVEFUX0JfRU9ECQkoMTw8NSkJLyogRW5kIG9mIGRlc2MgdGFibGUgaW50ICovCi0jZGVmaW5lIFZJTk9fSU5UU1RBVF9CCQkJKFZJTk9fSU5UU1RBVF9CX0VPRiB8IFwKLQkJCQkJIFZJTk9fSU5UU1RBVF9CX0ZJRk8gfCBcCi0JCQkJCSBWSU5PX0lOVFNUQVRfQl9FT0QpCi0JdTMyIF9wYWRfaW50cl9zdGF0dXM7Ci0Jdm9sYXRpbGUgdTMyIGludHJfc3RhdHVzOwotCi0JdTMyIF9wYWRfaTJjX2NvbnRyb2w7Ci0Jdm9sYXRpbGUgdTMyIGkyY19jb250cm9sOwotCXUzMiBfcGFkX2kyY19kYXRhOwotCXZvbGF0aWxlIHUzMiBpMmNfZGF0YTsKLQotCXN0cnVjdCBzZ2lfdmlub19jaGFubmVsIGE7Ci0Jc3RydWN0IHNnaV92aW5vX2NoYW5uZWwgYjsKLX07Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL252ZWMvbnZlYy5jIGIvZHJpdmVycy9zdGFnaW5nL252ZWMvbnZlYy5jCmluZGV4IDA5MzUzNWMuLjEyMGI3MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9udmVjL252ZWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbnZlYy9udmVjLmMKQEAgLTg1LDIzICs4NSwyMCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBtZmRfY2VsbCBudmVjX2RldmljZXNbXSA9IHsKIAl7CiAJCS5uYW1lID0gIm52ZWMta2JkIiwKLQkJLmlkID0gMSwKIAl9LAogCXsKIAkJLm5hbWUgPSAibnZlYy1tb3VzZSIsCi0JCS5pZCA9IDEsCisJfSwKKwl7CisJCS5uYW1lID0gIm52ZWMtcG93ZXIiLAorCQkuaWQgPSAwLAogCX0sCiAJewogCQkubmFtZSA9ICJudmVjLXBvd2VyIiwKIAkJLmlkID0gMSwKIAl9LAogCXsKLQkJLm5hbWUgPSAibnZlYy1wb3dlciIsCi0JCS5pZCA9IDIsCi0JfSwKLQl7CiAJCS5uYW1lID0gIm52ZWMtcGF6MDAiLAotCQkuaWQgPSAxLAogCX0sCiB9OwogCkBAIC04OTEsNyArODg4LDcgQEAKIAkJbnZlY19tc2dfZnJlZShudmVjLCBtc2cpOwogCX0KIAotCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhudmVjLT5kZXYsIC0xLCBudmVjX2RldmljZXMsCisJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKG52ZWMtPmRldiwgMCwgbnZlY19kZXZpY2VzLAogCQkJICAgICAgQVJSQVlfU0laRShudmVjX2RldmljZXMpLCBOVUxMLCAwLCBOVUxMKTsKIAlpZiAocmV0KQogCQlkZXZfZXJyKG52ZWMtPmRldiwgImVycm9yIGFkZGluZyBzdWJkZXZpY2VzXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL2lvY3RsX2NmZzgwMjExLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2F1L29zX2RlcC9pb2N0bF9jZmc4MDIxMS5jCmluZGV4IDgyYThjMDYuLmM1ODAwYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYXUvb3NfZGVwL2lvY3RsX2NmZzgwMjExLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNhdS9vc19kZXAvaW9jdGxfY2ZnODAyMTEuYwpAQCAtMTA5MSwxNyArMTA5MSwxNyBAQAogCQkJZ290byBleGl0OwogCQl9CiAKLQkJc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fU0lHTkFMOworCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX1NJR05BTCk7CiAJCXNpbmZvLT5zaWduYWwgPSB0cmFuc2xhdGVfcGVyY2VudGFnZV90b19kYm0ocGFkYXB0ZXItPnJlY3Zwcml2LgogCQkJCQkJCSAgICBzaWduYWxfc3RyZW5ndGgpOwogCi0JCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1RYX0JJVFJBVEU7CisJCXNpbmZvLT5maWxsZWQgfD0gQklUKE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURSk7CiAJCXNpbmZvLT50eHJhdGUubGVnYWN5ID0gcnR3X2dldF9jdXJfbWF4X3JhdGUocGFkYXB0ZXIpOwogCi0JCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFM7CisJCXNpbmZvLT5maWxsZWQgfD0gQklUKE5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUyk7CiAJCXNpbmZvLT5yeF9wYWNrZXRzID0gc3RhX3J4X2RhdGFfcGt0cyhwc3RhKTsKIAotCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19UWF9QQUNLRVRTOworCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFMpOwogCQlzaW5mby0+dHhfcGFja2V0cyA9IHBzdGEtPnN0YV9zdGF0cy50eF9wa3RzOwogCX0KIApAQCAtMjM2Myw3ICsyMzYzLDcgQEAKIAkJCWllX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwKIAkJCQkJICAgICB1LnJlYXNzb2NfcmVxLnZhcmlhYmxlKTsKIAotCQlzaW5mby5maWxsZWQgPSBTVEFUSU9OX0lORk9fQVNTT0NfUkVRX0lFUzsKKwkJc2luZm8uZmlsbGVkID0gMDsKIAkJc2luZm8uYXNzb2NfcmVxX2llcyA9IHBtZ210X2ZyYW1lICsgaWVfb2Zmc2V0OwogCQlzaW5mby5hc3NvY19yZXFfaWVzX2xlbiA9IGZyYW1lX2xlbiAtIGllX29mZnNldDsKIAkJY2ZnODAyMTFfbmV3X3N0YShuZGV2LCBoZHItPmFkZHIyLCAmc2luZm8sIEdGUF9BVE9NSUMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAvc3BlYWt1cF9kdGxrLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2R0bGsuYwppbmRleCA0ZTA1OWVhLi44OTU5MmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2R0bGsuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9zcGVha3VwX2R0bGsuYwpAQCAtMzI1LDcgKzMyNSw3IEBACiAKIHN0YXRpYyBpbnQgc3ludGhfcHJvYmUoc3RydWN0IHNwa19zeW50aCAqc3ludGgpCiB7Ci0JCXVuc2lnbmVkIGludCBwb3J0X3ZhbCA9IDA7CisJdW5zaWduZWQgaW50IHBvcnRfdmFsID0gMDsKIAlpbnQgaSA9IDA7CiAJc3RydWN0IHN5bnRoX3NldHRpbmdzICpzcDsKIApAQCAtMzYxLDcgKzM2MSw4IEBACiAJcG9ydF92YWwgJj0gMHhmYmZmOwogCWlmIChwb3J0X3ZhbCAhPSAweDEwN2YpIHsKIAkJcHJfaW5mbygiRG91YmxlVGFsayBQQzogbm90IGZvdW5kXG4iKTsKLQkJc3ludGhfcmVsZWFzZV9yZWdpb24oc3ludGhfbHBjLCBTWU5USF9JT19FWFRFTlQpOworCQlpZiAoc3ludGhfbHBjKQorCQkJc3ludGhfcmVsZWFzZV9yZWdpb24oc3ludGhfbHBjLCBTWU5USF9JT19FWFRFTlQpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJd2hpbGUgKGlud19wKHN5bnRoX2xwYykgIT0gMHgxNDdmKQpAQCAtMzY5LDcgKzM3MCw3IEBACiAJc3AgPSBzeW50aF9pbnRlcnJvZ2F0ZShzeW50aCk7CiAJcHJfaW5mbygiJXM6ICUwM3gtJTAzeCwgUk9NIHZlciAlcywgcy9uICV1LCBkcml2ZXI6ICVzXG4iLAogCQlzeW50aC0+bG9uZ19uYW1lLCBzeW50aF9scGMsIHN5bnRoX2xwYytTWU5USF9JT19FWFRFTlQgLSAxLAotCSBzcC0+cm9tX3ZlcnNpb24sIHNwLT5zZXJpYWxfbnVtYmVyLCBzeW50aC0+dmVyc2lvbik7CisJCXNwLT5yb21fdmVyc2lvbiwgc3AtPnNlcmlhbF9udW1iZXIsIHN5bnRoLT52ZXJzaW9uKTsKIAlzeW50aC0+YWxpdmUgPSAxOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvY2ZnODAyMTEuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2NmZzgwMjExLmMKaW5kZXggODk0MmRjYi4uN2M4N2FlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvY2ZnODAyMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9jZmc4MDIxMS5jCkBAIC0zMjUsOSArMzI1LDkgQEAKIAogCWlmIChyZXN1bHQgPT0gMCkgewogCQlzaW5mby0+dHhyYXRlLmxlZ2FjeSA9IHF1YWxpdHkudHhyYXRlLmRhdGE7Ci0JCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1RYX0JJVFJBVEU7CisJCXNpbmZvLT5maWxsZWQgfD0gQklUKE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURSk7CiAJCXNpbmZvLT5zaWduYWwgPSBxdWFsaXR5LmxldmVsLmRhdGE7Ci0JCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1NJR05BTDsKKwkJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19TSUdOQUwpOwogCX0KIAogCXJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV91c2VyLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV91c2VyLmMKaW5kZXggMTE1N2I1NS4uMWExYmNmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdXNlci5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3VzZXIuYwpAQCAtNzg0LDkgKzc4NCw3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZnJlZV9za2I7CiAKLQlyZXQgPSBnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkZXIpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIGZyZWVfc2tiOworCWdlbmxtc2dfZW5kKHNrYiwgbXNnX2hlYWRlcik7CiAKIAlyZXQgPSBnZW5sbXNnX211bHRpY2FzdCgmdGNtdV9nZW5sX2ZhbWlseSwgc2tiLCAwLAogCQkJCVRDTVVfTUNHUlBfQ09ORklHLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX2NvcmUuYyBiL2RyaXZlcnMvdGhlcm1hbC90aGVybWFsX2NvcmUuYwppbmRleCA4N2UwYjA3Li40ODQ5MWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9jb3JlLmMKKysrIGIvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfY29yZS5jCkBAIC0xNzU5LDExICsxNzU5LDcgQEAKIAl0aGVybWFsX2V2ZW50LT5ldmVudCA9IGV2ZW50OwogCiAJLyogc2VuZCBtdWx0aWNhc3QgZ2VuZXRsaW5rIG1lc3NhZ2UgKi8KLQlyZXN1bHQgPSBnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkZXIpOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCW5sbXNnX2ZyZWUoc2tiKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9CisJZ2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZGVyKTsKIAogCXJlc3VsdCA9IGdlbmxtc2dfbXVsdGljYXN0KCZ0aGVybWFsX2V2ZW50X2dlbmxfZmFtaWx5LCBza2IsIDAsCiAJCQkJICAgMCwgR0ZQX0FUT01JQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9odmMvaHZjX2l1Y3YuYyBiL2RyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jCmluZGV4IGVhNzQ0NjAuLmY3OGE4N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jCisrKyBiL2RyaXZlcnMvdHR5L2h2Yy9odmNfaXVjdi5jCkBAIC0xLDEwICsxLDEwIEBACiAvKgotICogaHZjX2l1Y3YuYyAtIHovVk0gSVVDViBoeXBlcnZpc29yIGNvbnNvbGUgKEhWQykgZGV2aWNlIGRyaXZlcgorICogei9WTSBJVUNWIGh5cGVydmlzb3IgY29uc29sZSAoSFZDKSBkZXZpY2UgZHJpdmVyCiAgKgogICogVGhpcyBIVkMgZGV2aWNlIGRyaXZlciBwcm92aWRlcyB0ZXJtaW5hbCBhY2Nlc3MgdXNpbmcKICAqIHovVk0gSVVDViBjb21tdW5pY2F0aW9uIHBhdGhzLgogICoKLSAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwOCwgMjAwOQorICogQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA4LCAyMDEzCiAgKgogICogQXV0aG9yKHMpOglIZW5kcmlrIEJydWVja25lciA8YnJ1ZWNrbmVyQGxpbnV4LnZuZXQuaWJtLmNvbT4KICAqLwpAQCAtMTAyLDYgKzEwMiw3IEBACiAjZGVmaW5lIElVQ1ZfSFZDX0NPTl9JRFgJKDApCiAvKiBMaXN0IG9mIHovVk0gdXNlciBJRCBmaWx0ZXIgZW50cmllcyAoc3RydWN0IGl1Y3Zfdm1pZF9maWx0ZXIpICovCiAjZGVmaW5lIE1BWF9WTUlEX0ZJTFRFUgkJKDUwMCkKKyNkZWZpbmUgRklMVEVSX1dJTERDQVJEX0NIQVIJJyonCiBzdGF0aWMgc2l6ZV90IGh2Y19pdWN2X2ZpbHRlcl9zaXplOwogc3RhdGljIHZvaWQgKmh2Y19pdWN2X2ZpbHRlcjsKIHN0YXRpYyBjb25zdCBjaGFyICpodmNfaXVjdl9maWx0ZXJfc3RyaW5nOwpAQCAtNzM0LDIwICs3MzUsMzEgQEAKICAqIGh2Y19pdWN2X2ZpbHRlcl9jb25ucmVxKCkgLSBGaWx0ZXIgY29ubmVjdGlvbiByZXF1ZXN0IGJhc2VkIG9uIHovVk0gdXNlciBJRAogICogQGlwdm1pZDoJT3JpZ2luYXRpbmcgei9WTSB1c2VyIElEIChyaWdodCBwYWRkZWQgd2l0aCBibGFua3MpCiAgKgotICogUmV0dXJucyAwIGlmIHRoZSB6L1ZNIHVzZXIgSUQgQGlwdm1pZCBpcyBhbGxvd2VkIHRvIGNvbm5lY3Rpb24sIG90aGVyd2lzZQotICogbm9uLXplcm8uCisgKiBSZXR1cm5zIDAgaWYgdGhlIHovVk0gdXNlciBJRCB0aGF0IGlzIHNwZWNpZmllZCB3aXRoIEBpcHZtaWQgaXMgcGVybWl0dGVkIHRvCisgKiBjb25uZWN0LCBvdGhlcndpc2Ugbm9uLXplcm8uCiAgKi8KIHN0YXRpYyBpbnQgaHZjX2l1Y3ZfZmlsdGVyX2Nvbm5yZXEodTggaXB2bWlkWzhdKQogewotCXNpemVfdCBpOworCWNvbnN0IGNoYXIgKndpbGRjYXJkLCAqZmlsdGVyX2VudHJ5OworCXNpemVfdCBpLCBsZW47CiAKIAkvKiBOb3RlOiBkZWZhdWx0IHBvbGljeSBpcyBBQ0NFUFQgaWYgbm8gZmlsdGVyIGlzIHNldCAqLwogCWlmICghaHZjX2l1Y3ZfZmlsdGVyX3NpemUpCiAJCXJldHVybiAwOwogCi0JZm9yIChpID0gMDsgaSA8IGh2Y19pdWN2X2ZpbHRlcl9zaXplOyBpKyspCi0JCWlmICgwID09IG1lbWNtcChpcHZtaWQsIGh2Y19pdWN2X2ZpbHRlciArICg4ICogaSksIDgpKQorCWZvciAoaSA9IDA7IGkgPCBodmNfaXVjdl9maWx0ZXJfc2l6ZTsgaSsrKSB7CisJCWZpbHRlcl9lbnRyeSA9IGh2Y19pdWN2X2ZpbHRlciArICg4ICogaSk7CisKKwkJLyogSWYgYSBmaWx0ZXIgZW50cnkgY29udGFpbnMgdGhlIGZpbHRlciB3aWxkY2FyZCBjaGFyYWN0ZXIsCisJCSAqIHJlZHVjZSB0aGUgbGVuZ3RoIHRvIG1hdGNoIHRoZSBsZWFkaW5nIHBvcnRpb24gb2YgdGhlIHVzZXIKKwkJICogSUQgb25seSAod2lsZGNhcmQgbWF0Y2gpLiAgQ2hhcmFjdGVycyBmb2xsb3dpbmcgdGhlIHdpbGRjYXJkCisJCSAqIGFyZSBpZ25vcmVkLgorCQkgKi8KKwkJd2lsZGNhcmQgPSBzdHJuY2hyKGZpbHRlcl9lbnRyeSwgOCwgRklMVEVSX1dJTERDQVJEX0NIQVIpOworCQlsZW4gPSAod2lsZGNhcmQpID8gd2lsZGNhcmQgLSBmaWx0ZXJfZW50cnkgOiA4OworCQlpZiAoMCA9PSBtZW1jbXAoaXB2bWlkLCBmaWx0ZXJfZW50cnksIGxlbikpCiAJCQlyZXR1cm4gMDsKKwl9CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTExNjYsNiArMTE3OCw3IEBACiAvKioKICAqIGh2Y19pdWN2X3BhcnNlX2ZpbHRlcigpIC0gUGFyc2UgZmlsdGVyIGZvciBhIHNpbmdsZSB6L1ZNIHVzZXIgSUQKICAqIEBmaWx0ZXI6CVN0cmluZyBjb250YWluaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygei9WTSB1c2VyIElEcworICogQGRlc3Q6CUxvY2F0aW9uIHdoZXJlIHRvIHN0b3JlIHRoZSBwYXJzZWQgei9WTSB1c2VyIElECiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICpodmNfaXVjdl9wYXJzZV9maWx0ZXIoY29uc3QgY2hhciAqZmlsdGVyLCBjaGFyICpkZXN0KQogewpAQCAtMTE4OCw2ICsxMjAxLDEwIEBACiAJaWYgKGZpbHRlcltsZW4gLSAxXSA9PSAnXG4nKQogCQlsZW4tLTsKIAorCS8qIHByb2hpYml0IGZpbHRlciBlbnRyaWVzIGNvbnRhaW5pbmcgdGhlIHdpbGRjYXJkIGNoYXJhY3RlciBvbmx5ICovCisJaWYgKGxlbiA9PSAxICYmICpmaWx0ZXIgPT0gRklMVEVSX1dJTERDQVJEX0NIQVIpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCiAJaWYgKGxlbiA+IDgpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zeXNycS5jIGIvZHJpdmVycy90dHkvc3lzcnEuYwppbmRleCA0MmJhZDE4Li4yNTlhNGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zeXNycS5jCisrKyBiL2RyaXZlcnMvdHR5L3N5c3JxLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAogCWkgPSBrZXkgLSAnMCc7CiAJY29uc29sZV9sb2dsZXZlbCA9IENPTlNPTEVfTE9HTEVWRUxfREVGQVVMVDsKLQlwcmludGsoIkxvZ2xldmVsIHNldCB0byAlZFxuIiwgaSk7CisJcHJfaW5mbygiTG9nbGV2ZWwgc2V0IHRvICVkXG4iLCBpKTsKIAljb25zb2xlX2xvZ2xldmVsID0gaTsKIH0KIHN0YXRpYyBzdHJ1Y3Qgc3lzcnFfa2V5X29wIHN5c3JxX2xvZ2xldmVsX29wID0gewpAQCAtMjIwLDcgKzIyMCw3IEBACiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzaG93X2xvY2ssIGZsYWdzKTsKLQlwcmludGsoS0VSTl9JTkZPICJDUFUlZDpcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcHJfaW5mbygiQ1BVJWQ6XG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXNob3dfc3RhY2soTlVMTCwgTlVMTCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2hvd19sb2NrLCBmbGFncyk7CiB9CkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSBnZXRfaXJxX3JlZ3MoKTsKIAogCQlpZiAocmVncykgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVJWQ6XG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQkJcHJfaW5mbygiQ1BVJWQ6XG4iLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCQkJc2hvd19yZWdzKHJlZ3MpOwogCQl9CiAJCXNjaGVkdWxlX3dvcmsoJnN5c3JxX3Nob3dhbGxjcHVzKTsKQEAgLTM1NSw4ICszNTUsOSBAQAogCiBzdGF0aWMgdm9pZCBtb29tX2NhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZCkKIHsKLQlvdXRfb2ZfbWVtb3J5KG5vZGVfem9uZWxpc3QoZmlyc3RfbWVtb3J5X25vZGUsIEdGUF9LRVJORUwpLCBHRlBfS0VSTkVMLAotCQkgICAgICAwLCBOVUxMLCB0cnVlKTsKKwlpZiAoIW91dF9vZl9tZW1vcnkobm9kZV96b25lbGlzdChmaXJzdF9tZW1vcnlfbm9kZSwgR0ZQX0tFUk5FTCksCisJCQkgICBHRlBfS0VSTkVMLCAwLCBOVUxMLCB0cnVlKSkKKwkJcHJfaW5mbygiT09NIHJlcXVlc3QgaWdub3JlZCBiZWNhdXNlIGtpbGxlciBpcyBkaXNhYmxlZFxuIik7CiB9CiAKIHN0YXRpYyBERUNMQVJFX1dPUksobW9vbV93b3JrLCBtb29tX2NhbGxiYWNrKTsKQEAgLTUyMiw3ICs1MjMsNyBAQAogCSAqLwogCW9yaWdfbG9nX2xldmVsID0gY29uc29sZV9sb2dsZXZlbDsKIAljb25zb2xlX2xvZ2xldmVsID0gQ09OU09MRV9MT0dMRVZFTF9ERUZBVUxUOwotCXByaW50ayhLRVJOX0lORk8gIlN5c1JxIDogIik7CisJcHJfaW5mbygiU3lzUnEgOiAiKTsKIAogICAgICAgICBvcF9wID0gX19zeXNycV9nZXRfa2V5X29wKGtleSk7CiAgICAgICAgIGlmIChvcF9wKSB7CkBAIC01MzEsMTQgKzUzMiwxNCBAQAogCQkgKiBzaG91bGQgbm90KSBhbmQgaXMgdGhlIGludm9rZWQgb3BlcmF0aW9uIGVuYWJsZWQ/CiAJCSAqLwogCQlpZiAoIWNoZWNrX21hc2sgfHwgc3lzcnFfb25fbWFzayhvcF9wLT5lbmFibGVfbWFzaykpIHsKLQkJCXByaW50aygiJXNcbiIsIG9wX3AtPmFjdGlvbl9tc2cpOworCQkJcHJfY29udCgiJXNcbiIsIG9wX3AtPmFjdGlvbl9tc2cpOwogCQkJY29uc29sZV9sb2dsZXZlbCA9IG9yaWdfbG9nX2xldmVsOwogCQkJb3BfcC0+aGFuZGxlcihrZXkpOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKCJUaGlzIHN5c3JxIG9wZXJhdGlvbiBpcyBkaXNhYmxlZC5cbiIpOworCQkJcHJfY29udCgiVGhpcyBzeXNycSBvcGVyYXRpb24gaXMgZGlzYWJsZWQuXG4iKTsKIAkJfQogCX0gZWxzZSB7Ci0JCXByaW50aygiSEVMUCA6ICIpOworCQlwcl9jb250KCJIRUxQIDogIik7CiAJCS8qIE9ubHkgcHJpbnQgdGhlIGhlbHAgbXNnIG9uY2UgcGVyIGhhbmRsZXIgKi8KIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3lzcnFfa2V5X3RhYmxlKTsgaSsrKSB7CiAJCQlpZiAoc3lzcnFfa2V5X3RhYmxlW2ldKSB7CkBAIC01NDksMTAgKzU1MCwxMCBAQAogCQkJCQk7CiAJCQkJaWYgKGogIT0gaSkKIAkJCQkJY29udGludWU7Ci0JCQkJcHJpbnRrKCIlcyAiLCBzeXNycV9rZXlfdGFibGVbaV0tPmhlbHBfbXNnKTsKKwkJCQlwcl9jb250KCIlcyAiLCBzeXNycV9rZXlfdGFibGVbaV0tPmhlbHBfbXNnKTsKIAkJCX0KIAkJfQotCQlwcmludGsoIlxuIik7CisJCXByX2NvbnQoIlxuIik7CiAJCWNvbnNvbGVfbG9nbGV2ZWwgPSBvcmlnX2xvZ19sZXZlbDsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwppbmRleCBhZWI1MGJiLi5lYWZmYjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKQEAgLTM0NTIsOCArMzQ1Miw2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotI2lmZGVmCUNPTkZJR19QTQotCiBpbnQgdXNiX3JlbW90ZV93YWtldXAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CiAJaW50CXN0YXR1cyA9IDA7CkBAIC0zNTEyLDE2ICszNTEwLDYgQEAKIAlyZXR1cm4gY29ubmVjdF9jaGFuZ2U7CiB9CiAKLSNlbHNlCi0KLXN0YXRpYyBpbnQgaHViX2hhbmRsZV9yZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfaHViICpodWIsIHVuc2lnbmVkIGludCBwb3J0LAotCQl1MTYgcG9ydHN0YXR1cywgdTE2IHBvcnRjaGFuZ2UpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZgotCiBzdGF0aWMgaW50IGNoZWNrX3BvcnRzX2NoYW5nZWQoc3RydWN0IHVzYl9odWIgKmh1YikKIHsKIAlpbnQgcG9ydDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL290Z193aGl0ZWxpc3QuaCBiL2RyaXZlcnMvdXNiL2NvcmUvb3RnX3doaXRlbGlzdC5oCmluZGV4IGRlMGM5YzkuLmE2MzE1YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvb3RnX3doaXRlbGlzdC5oCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvb3RnX3doaXRlbGlzdC5oCkBAIC01NSw2ICs1NSwxMSBAQAogCSAgICAgbGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gMHhiYWRkKSkKIAkJcmV0dXJuIDA7CiAKKwkvKiBPVEcgUEVUIGRldmljZSBpcyBhbHdheXMgdGFyZ2V0ZWQgKHNlZSBPVEcgMi4wIEVDTiA2LjQuMikgKi8KKwlpZiAoKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gMHgxYTBhICYmCisJICAgICBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweDAyMDApKQorCQlyZXR1cm4gMTsKKwogCS8qIE5PVEU6IGNhbid0IHVzZSB1c2JfbWF0Y2hfaWQoKSBzaW5jZSBpbnRlcmZhY2UgY2FjaGVzCiAJICogYXJlbid0IHNldCB1cCB5ZXQuIHRoaXMgaXMgY3V0L3Bhc3RlIGZyb20gdGhhdCBjb2RlLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYyBiL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKaW5kZXggMGZmYjRlZC4uNDFlNTEwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCkBAIC0xNzksNiArMTc5LDEwIEBACiAJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxN2UwKSwgLmRyaXZlcl9pbmZvID0KIAkJCVVTQl9RVUlSS19JR05PUkVfUkVNT1RFX1dBS0VVUCB9LAogCisJLyogUHJvdG9jb2wgYW5kIE9URyBFbGVjdHJpY2FsIFRlc3QgRGV2aWNlICovCisJeyBVU0JfREVWSUNFKDB4MWEwYSwgMHgwMjAwKSwgLmRyaXZlcl9pbmZvID0KKwkJCVVTQl9RVUlSS19MSU5FQVJfVUZSQU1FX0lOVFJfQklOVEVSVkFMIH0sCisKIAl7IH0gIC8qIHRlcm1pbmF0aW5nIGVudHJ5IG11c3QgYmUgbGFzdCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZHdjMi9jb3JlX2ludHIuYyBiL2RyaXZlcnMvdXNiL2R3YzIvY29yZV9pbnRyLmMKaW5kZXggYWQ0M2M1Yi4uMDJlM2UyZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2R3YzIvY29yZV9pbnRyLmMKKysrIGIvZHJpdmVycy91c2IvZHdjMi9jb3JlX2ludHIuYwpAQCAtNDc2LDEzICs0NzYsMTMgQEAKIAl1MzIgZ2ludHN0czsKIAlpcnFyZXR1cm5fdCByZXR2YWwgPSBJUlFfTk9ORTsKIAorCXNwaW5fbG9jaygmaHNvdGctPmxvY2spOworCiAJaWYgKCFkd2MyX2lzX2NvbnRyb2xsZXJfYWxpdmUoaHNvdGcpKSB7CiAJCWRldl93YXJuKGhzb3RnLT5kZXYsICJDb250cm9sbGVyIGlzIGRlYWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKLQlzcGluX2xvY2soJmhzb3RnLT5sb2NrKTsKLQogCWdpbnRzdHMgPSBkd2MyX3JlYWRfY29tbW9uX2ludHIoaHNvdGcpOwogCWlmIChnaW50c3RzICYgfkdJTlRTVFNfUFJUSU5UKQogCQlyZXR2YWwgPSBJUlFfSEFORExFRDsKQEAgLTUxNSw4ICs1MTUsOCBAQAogCQl9CiAJfQogCi0Jc3Bpbl91bmxvY2soJmhzb3RnLT5sb2NrKTsKIG91dDoKKwlzcGluX3VubG9jaygmaHNvdGctPmxvY2spOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkd2MyX2hhbmRsZV9jb21tb25faW50cik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvdWRjL3VkYy14aWxpbnguYyBiL2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvdWRjLXhpbGlueC5jCmluZGV4IDFlYWM1NmYuLmRkM2U5ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvdWRjLXhpbGlueC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC91ZGMvdWRjLXhpbGlueC5jCkBAIC0yMTMxLDggKzIxMzEsOCBAQAogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgdWRjKTsKIAotCWRldl92ZGJnKCZwZGV2LT5kZXYsICIlcyBhdCAweCUwOFggbWFwcGVkIHRvIDB4JTA4WCAlc1xuIiwKLQkJIGRyaXZlcl9uYW1lLCAodTMyKXJlcy0+c3RhcnQsICh1MzIgX19mb3JjZSl1ZGMtPmFkZHIsCisJZGV2X3ZkYmcoJnBkZXYtPmRldiwgIiVzIGF0IDB4JTA4WCBtYXBwZWQgdG8gJXAgJXNcbiIsCisJCSBkcml2ZXJfbmFtZSwgKHUzMilyZXMtPnN0YXJ0LCB1ZGMtPmFkZHIsCiAJCSB1ZGMtPmRtYV9lbmFibGVkID8gIndpdGggRE1BIiA6ICJ3aXRob3V0IERNQSIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9waHkvcGh5LmMgYi9kcml2ZXJzL3VzYi9waHkvcGh5LmMKaW5kZXggY2NmZGZiMi4uMmY5NzM1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvcGh5L3BoeS5jCisrKyBiL2RyaXZlcnMvdXNiL3BoeS9waHkuYwpAQCAtMzQsNyArMzQsNyBAQAogCQlyZXR1cm4gcGh5OwogCX0KIAotCXJldHVybiBFUlJfUFRSKC1FUFJPQkVfREVGRVIpOworCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9waHkgKl9fdXNiX2ZpbmRfcGh5X2RldihzdHJ1Y3QgZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCAxMWM3YTk2Li5kNjg0YjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTUwNyw3ICs1MDcsNyBAQAogVU5VU1VBTF9ERVYoICAweDA0ZTYsIDB4MDAwZiwgMHgwMDAwLCAweDk5OTksCiAJCSJTQ00gTWljcm9zeXN0ZW1zIiwKIAkJImVVU0IgU0NTSSBBZGFwdGVyIChCdXMgUG93ZXJlZCkiLAotCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCB1c2Jfc3Rvcl9ldXNjc2lfaW5pdCwKKwkJVVNCX1NDX1NDU0ksIFVTQl9QUl9CVUxLLCB1c2Jfc3Rvcl9ldXNjc2lfaW5pdCwKIAkJVVNfRkxfU0NNX01VTFRfVEFSRyApLAogCiBVTlVTVUFMX0RFViggIDB4MDRlNiwgMHgwMTAxLCAweDAyMDAsIDB4MDIwMCwKQEAgLTE5OTUsNiArMTk5NSwxMyBAQAogCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9JR05PUkVfUkVTSURVRSB8IFVTX0ZMX1NBTkVfU0VOU0UgKSwKIAorLyogUmVwb3J0ZWQgYnkgRG1pdHJ5IE5lemhldmVua28gPGRpb25AZGlvbi5vcmcudWE+ICovCitVTlVTVUFMX0RFViggIDB4MTUyZCwgMHgyNTY2LCAweDAxMTQsIDB4MDExNCwKKwkJIkpNaWNyb24iLAorCQkiVVNCIHRvIEFUQS9BVEFQSSBCcmlkZ2UiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9CUk9LRU5fRlVBICksCisKIC8qIEVudHJlZ2EgVGVjaG5vbG9naWVzIFUxLVNDMjUgKGxhdGVyIFhpcmNvbSBQb3J0R2VhciBQR1NDU0kpCiAgKiBhbmQgTWFjIFVTQiBEb2NrIFVTQi1TQ1NJICovCiBVTlVTVUFMX0RFViggIDB4MTY0NSwgMHgwMDA3LCAweDAxMDAsIDB4MDEzMywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91YXMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF91YXMuaAppbmRleCA2ZGY0MzU3Li5kYmMwMGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfdWFzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX3Vhcy5oCkBAIC0xNDAsMyArMTQwLDEwIEBACiAJCSJFeHRlcm5hbCBIREQiLAogCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9JR05PUkVfVUFTKSwKKworLyogUmVwb3J0ZWQtYnk6IFJpY2hhcmQgSGVuZGVyc29uIDxydGhAcmVkaGF0LmNvbT4gKi8KK1VOVVNVQUxfREVWKDB4NDk3MSwgMHg4MDE3LCAweDAwMDAsIDB4OTk5OSwKKwkJIlNpbXBsZVRlY2giLAorCQkiRXh0ZXJuYWwgSEREIiwKKwkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfTk9fUkVQT1JUX09QQ09ERVMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKaW5kZXggZDQxNWQ2OS4uOGRjY2NhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuYworKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jCkBAIC04NCwxMCArODQsNiBAQAogCiBzdHJ1Y3Qgdmhvc3RfbmV0X3ZpcnRxdWV1ZSB7CiAJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSB2cTsKLQkvKiBoZHIgaXMgdXNlZCB0byBzdG9yZSB0aGUgdmlydGlvIGhlYWRlci4KLQkgKiBTaW5jZSBlYWNoIGlvdmVjIGhhcyA+PSAxIGJ5dGUgbGVuZ3RoLCB3ZSBuZXZlciBuZWVkIG1vcmUgdGhhbgotCSAqIGhlYWRlciBsZW5ndGggZW50cmllcyB0byBzdG9yZSB0aGUgaGVhZGVyLiAqLwotCXN0cnVjdCBpb3ZlYyBoZHJbc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcl9tcmdfcnhidWYpXTsKIAlzaXplX3Qgdmhvc3RfaGxlbjsKIAlzaXplX3Qgc29ja19obGVuOwogCS8qIHZob3N0IHplcm9jb3B5IHN1cHBvcnQgZmllbGRzIGJlbG93OiAqLwpAQCAtMjM1LDQ0ICsyMzEsNiBAQAogCQlzb2NrX2ZsYWcoc29jay0+c2ssIFNPQ0tfWkVST0NPUFkpOwogfQogCi0vKiBQb3AgZmlyc3QgbGVuIGJ5dGVzIGZyb20gaW92ZWMuIFJldHVybiBudW1iZXIgb2Ygc2VnbWVudHMgdXNlZC4gKi8KLXN0YXRpYyBpbnQgbW92ZV9pb3ZlY19oZHIoc3RydWN0IGlvdmVjICpmcm9tLCBzdHJ1Y3QgaW92ZWMgKnRvLAotCQkJICBzaXplX3QgbGVuLCBpbnQgaW92X2NvdW50KQotewotCWludCBzZWcgPSAwOwotCXNpemVfdCBzaXplOwotCi0Jd2hpbGUgKGxlbiAmJiBzZWcgPCBpb3ZfY291bnQpIHsKLQkJc2l6ZSA9IG1pbihmcm9tLT5pb3ZfbGVuLCBsZW4pOwotCQl0by0+aW92X2Jhc2UgPSBmcm9tLT5pb3ZfYmFzZTsKLQkJdG8tPmlvdl9sZW4gPSBzaXplOwotCQlmcm9tLT5pb3ZfbGVuIC09IHNpemU7Ci0JCWZyb20tPmlvdl9iYXNlICs9IHNpemU7Ci0JCWxlbiAtPSBzaXplOwotCQkrK2Zyb207Ci0JCSsrdG87Ci0JCSsrc2VnOwotCX0KLQlyZXR1cm4gc2VnOwotfQotLyogQ29weSBpb3ZlYyBlbnRyaWVzIGZvciBsZW4gYnl0ZXMgZnJvbSBpb3ZlYy4gKi8KLXN0YXRpYyB2b2lkIGNvcHlfaW92ZWNfaGRyKGNvbnN0IHN0cnVjdCBpb3ZlYyAqZnJvbSwgc3RydWN0IGlvdmVjICp0bywKLQkJCSAgIHNpemVfdCBsZW4sIGludCBpb3Zjb3VudCkKLXsKLQlpbnQgc2VnID0gMDsKLQlzaXplX3Qgc2l6ZTsKLQotCXdoaWxlIChsZW4gJiYgc2VnIDwgaW92Y291bnQpIHsKLQkJc2l6ZSA9IG1pbihmcm9tLT5pb3ZfbGVuLCBsZW4pOwotCQl0by0+aW92X2Jhc2UgPSBmcm9tLT5pb3ZfYmFzZTsKLQkJdG8tPmlvdl9sZW4gPSBzaXplOwotCQlsZW4gLT0gc2l6ZTsKLQkJKytmcm9tOwotCQkrK3RvOwotCQkrK3NlZzsKLQl9Ci19Ci0KIC8qIEluIGNhc2Ugb2YgRE1BIGRvbmUgbm90IGluIG9yZGVyIGluIGxvd2VyIGRldmljZSBkcml2ZXIgZm9yIHNvbWUgcmVhc29uLgogICogdXBlbmRfaWR4IGlzIHVzZWQgdG8gdHJhY2sgZW5kIG9mIHVzZWQgaWR4LCBkb25lX2lkeCBpcyB1c2VkIHRvIHRyYWNrIGhlYWQKICAqIG9mIHVzZWQgaWR4LiBPbmNlIGxvd2VyIGRldmljZSBETUEgZG9uZSBjb250aWd1b3VzbHksIHdlIHdpbGwgc2lnbmFsIEtWTQpAQCAtMzM2LDcgKzI5NCw3IEBACiB7CiAJc3RydWN0IHZob3N0X25ldF92aXJ0cXVldWUgKm52cSA9ICZuZXQtPnZxc1tWSE9TVF9ORVRfVlFfVFhdOwogCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxID0gJm52cS0+dnE7Ci0JdW5zaWduZWQgb3V0LCBpbiwgczsKKwl1bnNpZ25lZCBvdXQsIGluOwogCWludCBoZWFkOwogCXN0cnVjdCBtc2doZHIgbXNnID0gewogCQkubXNnX25hbWUgPSBOVUxMLApAQCAtMzk1LDE2ICszNTMsMTcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCS8qIFNraXAgaGVhZGVyLiBUT0RPOiBzdXBwb3J0IFRTTy4gKi8KLQkJcyA9IG1vdmVfaW92ZWNfaGRyKHZxLT5pb3YsIG52cS0+aGRyLCBoZHJfc2l6ZSwgb3V0KTsKIAkJbGVuID0gaW92X2xlbmd0aCh2cS0+aW92LCBvdXQpOwogCQlpb3ZfaXRlcl9pbml0KCZtc2cubXNnX2l0ZXIsIFdSSVRFLCB2cS0+aW92LCBvdXQsIGxlbik7CisJCWlvdl9pdGVyX2FkdmFuY2UoJm1zZy5tc2dfaXRlciwgaGRyX3NpemUpOwogCQkvKiBTYW5pdHkgY2hlY2sgKi8KLQkJaWYgKCFsZW4pIHsKKwkJaWYgKCFpb3ZfaXRlcl9jb3VudCgmbXNnLm1zZ19pdGVyKSkgewogCQkJdnFfZXJyKHZxLCAiVW5leHBlY3RlZCBoZWFkZXIgbGVuIGZvciBUWDogIgogCQkJICAgICAgICIlemQgZXhwZWN0ZWQgJXpkXG4iLAotCQkJICAgICAgIGlvdl9sZW5ndGgobnZxLT5oZHIsIHMpLCBoZHJfc2l6ZSk7CisJCQkgICAgICAgbGVuLCBoZHJfc2l6ZSk7CiAJCQlicmVhazsKIAkJfQorCQlsZW4gPSBpb3ZfaXRlcl9jb3VudCgmbXNnLm1zZ19pdGVyKTsKIAogCQl6Y29weV91c2VkID0gemNvcHkgJiYgbGVuID49IFZIT1NUX0dPT0RDT1BZX0xFTgogCQkJCSAgICYmIChudnEtPnVwZW5kX2lkeCArIDEpICUgVUlPX01BWElPViAhPQpAQCAtNDY5LDcgKzQyOCw3IEBACiAJaGVhZCA9IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiAJaWYgKGxpa2VseShoZWFkKSkgewogCQlsZW4gPSBoZWFkLT5sZW47Ci0JCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KGhlYWQpKQorCQlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoaGVhZCkpCiAJCQlsZW4gKz0gVkxBTl9ITEVOOwogCX0KIApAQCAtNTc5LDYgKzUzOCw3IEBACiAJc2l6ZV90IHZob3N0X2hsZW4sIHNvY2tfaGxlbjsKIAlzaXplX3Qgdmhvc3RfbGVuLCBzb2NrX2xlbjsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCXN0cnVjdCBpb3ZfaXRlciBmaXh1cDsKIAogCW11dGV4X2xvY2soJnZxLT5tdXRleCk7CiAJc29jayA9IHZxLT5wcml2YXRlX2RhdGE7CkBAIC02MjMsMTQgKzU4MywxOSBAQAogCQkJYnJlYWs7CiAJCX0KIAkJLyogV2UgZG9uJ3QgbmVlZCB0byBiZSBub3RpZmllZCBhZ2Fpbi4gKi8KLQkJaWYgKHVubGlrZWx5KCh2aG9zdF9obGVuKSkpCi0JCQkvKiBTa2lwIGhlYWRlci4gVE9ETzogc3VwcG9ydCBUU08uICovCi0JCQltb3ZlX2lvdmVjX2hkcih2cS0+aW92LCBudnEtPmhkciwgdmhvc3RfaGxlbiwgaW4pOwotCQllbHNlCi0JCQkvKiBDb3B5IHRoZSBoZWFkZXIgZm9yIHVzZSBpbiBWSVJUSU9fTkVUX0ZfTVJHX1JYQlVGOgotCQkJICogbmVlZGVkIGJlY2F1c2UgcmVjdm1zZyBjYW4gbW9kaWZ5IG1zZ19pb3YuICovCi0JCQljb3B5X2lvdmVjX2hkcih2cS0+aW92LCBudnEtPmhkciwgc29ja19obGVuLCBpbik7Ci0JCWlvdl9pdGVyX2luaXQoJm1zZy5tc2dfaXRlciwgUkVBRCwgdnEtPmlvdiwgaW4sIHNvY2tfbGVuKTsKKwkJaW92X2l0ZXJfaW5pdCgmbXNnLm1zZ19pdGVyLCBSRUFELCB2cS0+aW92LCBpbiwgdmhvc3RfbGVuKTsKKwkJZml4dXAgPSBtc2cubXNnX2l0ZXI7CisJCWlmICh1bmxpa2VseSgodmhvc3RfaGxlbikpKSB7CisJCQkvKiBXZSB3aWxsIHN1cHBseSB0aGUgaGVhZGVyIG91cnNlbHZlcworCQkJICogVE9ETzogc3VwcG9ydCBUU08uCisJCQkgKi8KKwkJCWlvdl9pdGVyX2FkdmFuY2UoJm1zZy5tc2dfaXRlciwgdmhvc3RfaGxlbik7CisJCX0gZWxzZSB7CisJCQkvKiBJdCdsbCBjb21lIGZyb20gc29ja2V0OyB3ZSdsbCBuZWVkIHRvIHBhdGNoCisJCQkgKiAtPm51bV9idWZmZXJzIG92ZXIgaWYgVklSVElPX05FVF9GX01SR19SWEJVRgorCQkJICovCisJCQlpb3ZfaXRlcl9hZHZhbmNlKCZmaXh1cCwgc2l6ZW9mKGhkcikpOworCQl9CiAJCWVyciA9IHNvY2stPm9wcy0+cmVjdm1zZyhOVUxMLCBzb2NrLCAmbXNnLAogCQkJCQkgc29ja19sZW4sIE1TR19ET05UV0FJVCB8IE1TR19UUlVOQyk7CiAJCS8qIFVzZXJzcGFjZSBtaWdodCBoYXZlIGNvbnN1bWVkIHRoZSBwYWNrZXQgbWVhbndoaWxlOgpAQCAtNjQyLDE4ICs2MDcsMTggQEAKIAkJCXZob3N0X2Rpc2NhcmRfdnFfZGVzYyh2cSwgaGVhZGNvdW50KTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCS8qIFN1cHBseSB2aXJ0aW9fbmV0X2hkciBpZiBWSE9TVF9ORVRfRl9WSVJUSU9fTkVUX0hEUiAqLwogCQlpZiAodW5saWtlbHkodmhvc3RfaGxlbikgJiYKLQkJICAgIG1lbWNweV90b2lvdmVjZW5kKG52cS0+aGRyLCAodW5zaWduZWQgY2hhciAqKSZoZHIsIDAsCi0JCQkJICAgICAgdmhvc3RfaGxlbikpIHsKKwkJICAgIGNvcHlfdG9faXRlcigmaGRyLCBzaXplb2YoaGRyKSwgJmZpeHVwKSAhPSBzaXplb2YoaGRyKSkgewogCQkJdnFfZXJyKHZxLCAiVW5hYmxlIHRvIHdyaXRlIHZuZXRfaGRyIGF0IGFkZHIgJXBcbiIsCiAJCQkgICAgICAgdnEtPmlvdi0+aW92X2Jhc2UpOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogVE9ETzogU2hvdWxkIGNoZWNrIGFuZCBoYW5kbGUgY2hlY2tzdW0uICovCisKKwkJaGRyLm51bV9idWZmZXJzID0gY3B1X3RvX3Zob3N0MTYodnEsIGhlYWRjb3VudCk7CiAJCWlmIChsaWtlbHkobWVyZ2VhYmxlKSAmJgotCQkgICAgbWVtY3B5X3RvaW92ZWNlbmQobnZxLT5oZHIsICh1bnNpZ25lZCBjaGFyICopJmhlYWRjb3VudCwKLQkJCQkgICAgICBvZmZzZXRvZih0eXBlb2YoaGRyKSwgbnVtX2J1ZmZlcnMpLAotCQkJCSAgICAgIHNpemVvZiBoZHIubnVtX2J1ZmZlcnMpKSB7CisJCSAgICBjb3B5X3RvX2l0ZXIoJmhkci5udW1fYnVmZmVycywgMiwgJmZpeHVwKSAhPSAyKSB7CiAJCQl2cV9lcnIodnEsICJGYWlsZWQgbnVtX2J1ZmZlcnMgd3JpdGUiKTsKIAkJCXZob3N0X2Rpc2NhcmRfdnFfZGVzYyh2cSwgaGVhZGNvdW50KTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9zY3NpLmMgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwppbmRleCBkNjk1YjE2Li5kYzc4ZDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Zob3N0L3Njc2kuYworKysgYi9kcml2ZXJzL3Zob3N0L3Njc2kuYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAkJCSAgICAgICByZXFfc2l6ZSwgdnEtPmlvdlswXS5pb3ZfbGVuKTsKIAkJCWJyZWFrOwogCQl9Ci0JCXJldCA9IG1lbWNweV9mcm9taW92ZWNlbmQocmVxLCAmdnEtPmlvdlswXSwgMCwgcmVxX3NpemUpOworCQlyZXQgPSBjb3B5X2Zyb21fdXNlcihyZXEsIHZxLT5pb3ZbMF0uaW92X2Jhc2UsIHJlcV9zaXplKTsKIAkJaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJCXZxX2Vycih2cSwgIkZhdWx0ZWQgb24gdmlydGlvX3Njc2lfY21kX3JlcVxuIik7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwppbmRleCBjYjgwN2QwZS4uMmVlMjgyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC92aG9zdC5jCisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwpAQCAtMTEyNSw2ICsxMTI1LDcgQEAKIAlzdHJ1Y3QgdnJpbmdfZGVzYyBkZXNjOwogCXVuc2lnbmVkIGludCBpID0gMCwgY291bnQsIGZvdW5kID0gMDsKIAl1MzIgbGVuID0gdmhvc3QzMl90b19jcHUodnEsIGluZGlyZWN0LT5sZW4pOworCXN0cnVjdCBpb3ZfaXRlciBmcm9tOwogCWludCByZXQ7CiAKIAkvKiBTYW5pdHkgY2hlY2sgKi8KQEAgLTExNDIsNiArMTE0Myw3IEBACiAJCXZxX2Vycih2cSwgIlRyYW5zbGF0aW9uIGZhaWx1cmUgJWQgaW4gaW5kaXJlY3QuXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KKwlpb3ZfaXRlcl9pbml0KCZmcm9tLCBSRUFELCB2cS0+aW5kaXJlY3QsIHJldCwgbGVuKTsKIAogCS8qIFdlIHdpbGwgdXNlIHRoZSByZXN1bHQgYXMgYW4gYWRkcmVzcyB0byByZWFkIGZyb20sIHNvIG1vc3QKIAkgKiBhcmNoaXRlY3R1cmVzIG9ubHkgbmVlZCBhIGNvbXBpbGVyIGJhcnJpZXIgaGVyZS4gKi8KQEAgLTExNjQsOCArMTE2Niw4IEBACiAJCQkgICAgICAgaSwgY291bnQpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKHVubGlrZWx5KG1lbWNweV9mcm9taW92ZWMoKHVuc2lnbmVkIGNoYXIgKikmZGVzYywKLQkJCQkJICAgICAgdnEtPmluZGlyZWN0LCBzaXplb2YgZGVzYykpKSB7CisJCWlmICh1bmxpa2VseShjb3B5X2Zyb21faXRlcigmZGVzYywgc2l6ZW9mKGRlc2MpLCAmZnJvbSkgIT0KKwkJCSAgICAgc2l6ZW9mKGRlc2MpKSkgewogCQkJdnFfZXJyKHZxLCAiRmFpbGVkIGluZGlyZWN0IGRlc2NyaXB0b3I6IGlkeCAlZCwgJXp4XG4iLAogCQkJICAgICAgIGksIChzaXplX3Qpdmhvc3Q2NF90b19jcHUodnEsIGluZGlyZWN0LT5hZGRyKSArIGkgKiBzaXplb2YgZGVzYyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnIGIvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcKaW5kZXggZmUxY2QwMS4uYmE5N2VmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcKQEAgLTc3LDE4ICs3NywyMiBAQAogCiBjb25maWcgRFVNTVlfQ09OU09MRV9DT0xVTU5TCiAgICAgICAgIGludCAiSW5pdGlhbCBudW1iZXIgb2YgY29uc29sZSBzY3JlZW4gY29sdW1ucyIKLSAgICAgICAgZGVwZW5kcyBvbiBQQVJJU0MgJiYgRFVNTVlfQ09OU09MRQotICAgICAgICBkZWZhdWx0ICIxNjAiCisgICAgICAgIGRlcGVuZHMgb24gRFVNTVlfQ09OU09MRSAmJiAhQVJNCisgICAgICAgIGRlZmF1bHQgMTYwIGlmIFBBUklTQworICAgICAgICBkZWZhdWx0IDgwCiAgICAgICAgIGhlbHAKLSAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNjAsIHdoaWNoIHNob3VsZCBmaXQgYSAxMjgweDEwMjQgbW9uaXRvci4KKyAgICAgICAgICBPbiBQQS1SSVNDLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyAxNjAsIHdoaWNoIHNob3VsZCBmaXQgYSAxMjgweDEwMjQKKyAgICAgICAgICBtb25pdG9yLgogICAgICAgICAgIFNlbGVjdCA4MCBpZiB5b3UgdXNlIGEgNjQweDQ4MCByZXNvbHV0aW9uIGJ5IGRlZmF1bHQuCiAKIGNvbmZpZyBEVU1NWV9DT05TT0xFX1JPV1MKICAgICAgICAgaW50ICJJbml0aWFsIG51bWJlciBvZiBjb25zb2xlIHNjcmVlbiByb3dzIgotICAgICAgICBkZXBlbmRzIG9uIFBBUklTQyAmJiBEVU1NWV9DT05TT0xFCi0gICAgICAgIGRlZmF1bHQgIjY0IgorICAgICAgICBkZXBlbmRzIG9uIERVTU1ZX0NPTlNPTEUgJiYgIUFSTQorICAgICAgICBkZWZhdWx0IDY0IGlmIFBBUklTQworICAgICAgICBkZWZhdWx0IDI1CiAgICAgICAgIGhlbHAKLSAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2NCwgd2hpY2ggc2hvdWxkIGZpdCBhIDEyODB4MTAyNCBtb25pdG9yLgorICAgICAgICAgIE9uIFBBLVJJU0MsIHRoZSBkZWZhdWx0IHZhbHVlIGlzIDY0LCB3aGljaCBzaG91bGQgZml0IGEgMTI4MHgxMDI0CisgICAgICAgICAgbW9uaXRvci4KICAgICAgICAgICBTZWxlY3QgMjUgaWYgeW91IHVzZSBhIDY0MHg0ODAgcmVzb2x1dGlvbiBieSBkZWZhdWx0LgogCiBjb25maWcgRlJBTUVCVUZGRVJfQ09OU09MRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL2R1bW15Y29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZHVtbXljb24uYwppbmRleCA0MGJlYzhkLi4wZWZjNTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZHVtbXljb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZHVtbXljb24uYwpAQCAtMjAsMTMgKzIwLDEwIEBACiAjaWYgZGVmaW5lZChfX2FybV9fKQogI2RlZmluZSBEVU1NWV9DT0xVTU5TCXNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fY29scwogI2RlZmluZSBEVU1NWV9ST1dTCXNjcmVlbl9pbmZvLm9yaWdfdmlkZW9fbGluZXMKLSNlbGlmIGRlZmluZWQoX19ocHBhX18pCisjZWxzZQogLyogc2V0IGJ5IEtjb25maWcuIFVzZSA4MHgyNSBmb3IgNjQweDQ4MCBhbmQgMTYweDY0IGZvciAxMjgweDEwMjQgKi8KICNkZWZpbmUgRFVNTVlfQ09MVU1OUwlDT05GSUdfRFVNTVlfQ09OU09MRV9DT0xVTU5TCiAjZGVmaW5lIERVTU1ZX1JPV1MJQ09ORklHX0RVTU1ZX0NPTlNPTEVfUk9XUwotI2Vsc2UKLSNkZWZpbmUgRFVNTVlfQ09MVU1OUwk4MAotI2RlZmluZSBEVU1NWV9ST1dTCTI1CiAjZW5kaWYKIAogc3RhdGljIGNvbnN0IGNoYXIgKmR1bW15Y29uX3N0YXJ0dXAodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKaW5kZXggZWE0MzcyNC4uYjk3MjEwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKQEAgLTE0Niw5ICsxNDYsNiBAQAogCiBzdGF0aWMgaW50IGZiY29uX3NldF9vcmlnaW4oc3RydWN0IHZjX2RhdGEgKik7CiAKLSNkZWZpbmUgQ1VSU09SX0RSQVdfREVMQVkJCSgxKQotCi1zdGF0aWMgaW50IHZibF9jdXJzb3JfY250Owogc3RhdGljIGludCBmYmNvbl9jdXJzb3Jfbm9ibGluazsKIAogI2RlZmluZSBkaXZpZGVzKGEsIGIpCSgoIShhKSB8fCAoYiklKGEpKSA/IDAgOiAxKQpAQCAtMTMyOSw3ICsxMzI2LDYgQEAKIAogCW9wcy0+Y3Vyc29yKHZjLCBpbmZvLCBtb2RlLCB5LCBnZXRfY29sb3IodmMsIGluZm8sIGMsIDEpLAogCQkgICAgZ2V0X2NvbG9yKHZjLCBpbmZvLCBjLCAwKSk7Ci0JdmJsX2N1cnNvcl9jbnQgPSBDVVJTT1JfRFJBV19ERUxBWTsKIH0KIAogc3RhdGljIGludCBzY3JvbGxiYWNrX3BoeXNfbWF4ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvS2NvbmZpZwppbmRleCA0OTE2Yzk3Li5iM2RkNDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9LY29uZmlnCkBAIC0xNTMwLDEzICsxNTMwLDExIEBACiAKIGNvbmZpZyBGQl9WSUEKICAgICAgICB0cmlzdGF0ZSAiVklBIFVuaUNocm9tZSAoUHJvKSBhbmQgQ2hyb21lOSBkaXNwbGF5IHN1cHBvcnQiCi0gICAgICAgZGVwZW5kcyBvbiBGQiAmJiBQQ0kgJiYgWDg2CisgICAgICAgZGVwZW5kcyBvbiBGQiAmJiBQQ0kgJiYgWDg2ICYmIEdQSU9MSUIgJiYgSTJDCiAgICAgICAgc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogICAgICAgIHNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKICAgICAgICBzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAogICAgICAgIHNlbGVjdCBJMkNfQUxHT0JJVAotICAgICAgIHNlbGVjdCBJMkMKLSAgICAgICBzZWxlY3QgR1BJT0xJQgogICAgICAgIGhlbHAKIAkgIFRoaXMgaXMgdGhlIGZyYW1lIGJ1ZmZlciBkZXZpY2UgZHJpdmVyIGZvciBHcmFwaGljcyBjaGlwcyBvZiBWSUEKIAkgIFVuaUNocm9tZSAoUHJvKSBGYW1pbHkgKENMRTI2NixQTTgwMC9DTjQwMCxQNE04MDBDRS9QNE04MDBQcm8vCkBAIC0yMTUxLDcgKzIxNDksNiBAQAogCXNlbGVjdCBGQl9TWVNfQ09QWUFSRUEKIAlzZWxlY3QgRkJfU1lTX0lNQUdFQkxJVAogCXNlbGVjdCBGQl9TWVNfRk9QUwotCXNlbGVjdCBWVF9IV19DT05TT0xFX0JJTkRJTkcgaWYgRlJBTUVCVUZGRVJfQ09OU09MRQogCS0tLWhlbHAtLS0KIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIHZpcnR1YWwgZnJhbWUgYnVmZmVyIGluIHRoZSBQUzMgcGxhdGZvcm0uCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvYXRhZmIuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvYXRhZmIuYwppbmRleCA0OTUzYjY1Li5jYjllZTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2F0YWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9hdGFmYi5jCkBAIC0zMTE4LDggKzMxMTgsNyBAQAogCQkJcHJpbnRrKCJhdGFmYl9pbml0OiBpbml0aWFsaXppbmcgRmFsY29uIGh3XG4iKTsKIAkJCWZiaHcgPSAmZmFsY29uX3N3aXRjaDsKIAkJCWF0YWZiX29wcy5mYl9zZXRjb2xyZWcgPSAmZmFsY29uX3NldGNvbHJlZzsKLQkJCWVycm9yID0gcmVxdWVzdF9pcnEoSVJRX0FVVE9fNCwgZmFsY29uX3ZibF9zd2l0Y2hlciwKLQkJCQkJICAgIElSUV9UWVBFX1BSSU8sCisJCQllcnJvciA9IHJlcXVlc3RfaXJxKElSUV9BVVRPXzQsIGZhbGNvbl92Ymxfc3dpdGNoZXIsIDAsCiAJCQkJCSAgICAiZnJhbWVidWZmZXI6bW9kZXN3aXRjaCIsCiAJCQkJCSAgICBmYWxjb25fdmJsX3N3aXRjaGVyKTsKIAkJCWlmIChlcnJvcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvYXR5L2F0eWZiX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvYXR5L2F0eWZiX2Jhc2UuYwppbmRleCAzN2VjMDliLi44Nzg5ZTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2F0eS9hdHlmYl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9hdHkvYXR5ZmJfYmFzZS5jCkBAIC0zOTQ4LDcgKzM5NDgsNyBAQAogCS5ub3RpZmllcl9jYWxsID0gYXR5ZmJfcmVib290X25vdGlmeSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBhdHlmYl9yZWJvb3RfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgYXR5ZmJfcmVib290X2lkc1tdIF9faW5pdGNvbnN0ID0gewogCXsKIAkJLmlkZW50ID0gIkhQIE9tbmlCb29rIDUwMCIsCiAJCS5tYXRjaGVzID0gewpAQCAtMzk2MCw2ICszOTYwLDcgQEAKIAogCXsgfQogfTsKK3N0YXRpYyBib29sIHJlZ2lzdGVyZWRfbm90aWZpZXIgPSBmYWxzZTsKIAogc3RhdGljIGludCBfX2luaXQgYXR5ZmJfaW5pdCh2b2lkKQogewpAQCAtMzk4MiwxNSArMzk4MywxNyBAQAogCWlmIChlcnIxICYmIGVycjIpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKGRtaV9jaGVja19zeXN0ZW0oYXR5ZmJfcmVib290X2lkcykpCisJaWYgKGRtaV9jaGVja19zeXN0ZW0oYXR5ZmJfcmVib290X2lkcykpIHsKIAkJcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZhdHlmYl9yZWJvb3Rfbm90aWZpZXIpOworCQlyZWdpc3RlcmVkX25vdGlmaWVyID0gdHJ1ZTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGF0eWZiX2V4aXQodm9pZCkKIHsKLQlpZiAoZG1pX2NoZWNrX3N5c3RlbShhdHlmYl9yZWJvb3RfaWRzKSkKKwlpZiAocmVnaXN0ZXJlZF9ub3RpZmllcikKIAkJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmF0eWZiX3JlYm9vdF9ub3RpZmllcik7CiAKICNpZmRlZiBDT05GSUdfUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJjdnQuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmN2dC5jCmluZGV4IDdjYjcxNWQuLjU1ZDJiZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmN2dC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYmN2dC5jCkBAIC0zNjksOSArMzY5LDkgQEAKIAljdnQuaF9iYWNrX3BvcmNoID0gY3Z0LmhibGFuay8yICsgY3Z0LmhfbWFyZ2luOwogCWN2dC5oX2Zyb250X3BvcmNoID0gY3Z0LmhibGFuayAtIGN2dC5oc3luYyAtIGN2dC5oX2JhY2tfcG9yY2ggKwogCQkyICogY3Z0LmhfbWFyZ2luOwotCWN2dC52X2JhY2tfcG9yY2ggPSAzICsgY3Z0LnZfbWFyZ2luOwotCWN2dC52X2Zyb250X3BvcmNoID0gY3Z0LnZ0b3RhbCAtIGN2dC55cmVzL2N2dC5pbnRlcmxhY2UgLQotCSAgICBjdnQudl9iYWNrX3BvcmNoIC0gY3Z0LnZzeW5jOworCWN2dC52X2Zyb250X3BvcmNoID0gMyArIGN2dC52X21hcmdpbjsKKwljdnQudl9iYWNrX3BvcmNoID0gY3Z0LnZ0b3RhbCAtIGN2dC55cmVzL2N2dC5pbnRlcmxhY2UgLQorCSAgICBjdnQudl9mcm9udF9wb3JjaCAtIGN2dC52c3luYzsKIAlmYl9jdnRfcHJpbnRfbmFtZSgmY3Z0KTsKIAlmYl9jdnRfY29udmVydF90b19tb2RlKCZjdnQsIG1vZGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvZmJtb24uYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYm1vbi5jCmluZGV4IDViMGUzMTMuLjk1MzM4NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYm1vbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9mYm1vbi5jCkBAIC00OTYsNTYgKzQ5Niw3MSBAQAogfQogCiBzdGF0aWMgaW50IGdldF9zdGRfdGltaW5nKHVuc2lnbmVkIGNoYXIgKmJsb2NrLCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlLAotCQlpbnQgdmVyLCBpbnQgcmV2KQorCQkJICBpbnQgdmVyLCBpbnQgcmV2LCBjb25zdCBzdHJ1Y3QgZmJfbW9uc3BlY3MgKnNwZWNzKQogewotCWludCB4cmVzLCB5cmVzID0gMCwgcmVmcmVzaCwgcmF0aW8sIGk7CisJaW50IGk7CiAKLQl4cmVzID0gKGJsb2NrWzBdICsgMzEpICogODsKLQlpZiAoeHJlcyA8PSAyNTYpCi0JCXJldHVybiAwOwotCi0JcmF0aW8gPSAoYmxvY2tbMV0gJiAweGMwKSA+PiA2OwotCXN3aXRjaCAocmF0aW8pIHsKLQljYXNlIDA6Ci0JCS8qIGluIEVESUQgMS4zIHRoZSBtZWFuaW5nIG9mIDAgY2hhbmdlZCB0byAxNjoxMCAocHJpb3IgMToxKSAqLwotCQlpZiAodmVyIDwgMSB8fCAodmVyID09IDEgJiYgcmV2IDwgMykpCi0JCQl5cmVzID0geHJlczsKLQkJZWxzZQotCQkJeXJlcyA9ICh4cmVzICogMTApLzE2OwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXlyZXMgPSAoeHJlcyAqIDMpLzQ7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJeXJlcyA9ICh4cmVzICogNCkvNTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQl5cmVzID0gKHhyZXMgKiA5KS8xNjsKLQkJYnJlYWs7CisJZm9yIChpID0gMDsgaSA8IERNVF9TSVpFOyBpKyspIHsKKwkJdTMyIHN0ZF8yYnl0ZV9jb2RlID0gYmxvY2tbMF0gPDwgOCB8IGJsb2NrWzFdOworCQlpZiAoc3RkXzJieXRlX2NvZGUgPT0gZG10X21vZGVzW2ldLnN0ZF8yYnl0ZV9jb2RlKQorCQkJYnJlYWs7CiAJfQotCXJlZnJlc2ggPSAoYmxvY2tbMV0gJiAweDNmKSArIDYwOwogCi0JRFBSSU5USygiICAgICAgJWR4JWRAJWRIelxuIiwgeHJlcywgeXJlcywgcmVmcmVzaCk7Ci0JZm9yIChpID0gMDsgaSA8IFZFU0FfTU9ERURCX1NJWkU7IGkrKykgewotCQlpZiAodmVzYV9tb2Rlc1tpXS54cmVzID09IHhyZXMgJiYKLQkJICAgIHZlc2FfbW9kZXNbaV0ueXJlcyA9PSB5cmVzICYmCi0JCSAgICB2ZXNhX21vZGVzW2ldLnJlZnJlc2ggPT0gcmVmcmVzaCkgewotCQkJKm1vZGUgPSB2ZXNhX21vZGVzW2ldOwotCQkJbW9kZS0+ZmxhZyB8PSBGQl9NT0RFX0lTX1NUQU5EQVJEOwotCQkJcmV0dXJuIDE7CisJaWYgKGkgPCBETVRfU0laRSAmJiBkbXRfbW9kZXNbaV0ubW9kZSkgeworCQkvKiBETVQgbW9kZSBmb3VuZCAqLworCQkqbW9kZSA9ICpkbXRfbW9kZXNbaV0ubW9kZTsKKwkJbW9kZS0+ZmxhZyB8PSBGQl9NT0RFX0lTX1NUQU5EQVJEOworCQlEUFJJTlRLKCIgICAgICAgIERNVCBpZD0lZFxuIiwgZG10X21vZGVzW2ldLmRtdF9pZCk7CisKKwl9IGVsc2UgeworCQlpbnQgeHJlcywgeXJlcyA9IDAsIHJlZnJlc2gsIHJhdGlvOworCisJCXhyZXMgPSAoYmxvY2tbMF0gKyAzMSkgKiA4OworCQlpZiAoeHJlcyA8PSAyNTYpCisJCQlyZXR1cm4gMDsKKworCQlyYXRpbyA9IChibG9ja1sxXSAmIDB4YzApID4+IDY7CisJCXN3aXRjaCAocmF0aW8pIHsKKwkJY2FzZSAwOgorCQkJLyogaW4gRURJRCAxLjMgdGhlIG1lYW5pbmcgb2YgMCBjaGFuZ2VkIHRvIDE2OjEwIChwcmlvciAxOjEpICovCisJCQlpZiAodmVyIDwgMSB8fCAodmVyID09IDEgJiYgcmV2IDwgMykpCisJCQkJeXJlcyA9IHhyZXM7CisJCQllbHNlCisJCQkJeXJlcyA9ICh4cmVzICogMTApLzE2OworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXlyZXMgPSAoeHJlcyAqIDMpLzQ7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJeXJlcyA9ICh4cmVzICogNCkvNTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQl5cmVzID0gKHhyZXMgKiA5KS8xNjsKKwkJCWJyZWFrOwogCQl9CisJCXJlZnJlc2ggPSAoYmxvY2tbMV0gJiAweDNmKSArIDYwOworCQlEUFJJTlRLKCIgICAgICAlZHglZEAlZEh6XG4iLCB4cmVzLCB5cmVzLCByZWZyZXNoKTsKKworCQljYWxjX21vZGVfdGltaW5ncyh4cmVzLCB5cmVzLCByZWZyZXNoLCBtb2RlKTsKIAl9Ci0JY2FsY19tb2RlX3RpbWluZ3MoeHJlcywgeXJlcywgcmVmcmVzaCwgbW9kZSk7CisKKwkvKiBDaGVjayB0aGUgbW9kZSB3ZSBnb3QgaXMgd2l0aGluIHZhbGlkIHNwZWMgb2YgdGhlIG1vbml0b3IgKi8KKwlpZiAoc3BlY3MgJiYgc3BlY3MtPmRjbGttYXgKKwkgICAgJiYgUElDT1MyS0haKG1vZGUtPnBpeGNsb2NrKSAqIDEwMDAgPiBzcGVjcy0+ZGNsa21heCkgeworCQlEUFJJTlRLKCIgICAgICAgIG1vZGUgZXhjZWVkIG1heCBEQ0xLXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X2RzdF90aW1pbmcodW5zaWduZWQgY2hhciAqYmxvY2ssCi0JCQkgIHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUsIGludCB2ZXIsIGludCByZXYpCitzdGF0aWMgaW50IGdldF9kc3RfdGltaW5nKHVuc2lnbmVkIGNoYXIgKmJsb2NrLCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICptb2RlLAorCQkJICBpbnQgdmVyLCBpbnQgcmV2LCBjb25zdCBzdHJ1Y3QgZmJfbW9uc3BlY3MgKnNwZWNzKQogewogCWludCBqLCBudW0gPSAwOwogCiAJZm9yIChqID0gMDsgaiA8IDY7IGorKywgYmxvY2sgKz0gU1REX1RJTUlOR19ERVNDUklQVElPTl9TSVpFKQotCQludW0gKz0gZ2V0X3N0ZF90aW1pbmcoYmxvY2ssICZtb2RlW251bV0sIHZlciwgcmV2KTsKKwkJbnVtICs9IGdldF9zdGRfdGltaW5nKGJsb2NrLCAmbW9kZVtudW1dLCB2ZXIsIHJldiwgc3BlY3MpOwogCiAJcmV0dXJuIG51bTsKIH0KQEAgLTYwMSw3ICs2MTYsOCBAQAogICogVGhpcyBmdW5jdGlvbiBidWlsZHMgYSBtb2RlIGRhdGFiYXNlIHVzaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgRURJRAogICogZGF0YQogICovCi1zdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSAqZmJfY3JlYXRlX21vZGVkYih1bnNpZ25lZCBjaGFyICplZGlkLCBpbnQgKmRic2l6ZSkKK3N0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlICpmYl9jcmVhdGVfbW9kZWRiKHVuc2lnbmVkIGNoYXIgKmVkaWQsIGludCAqZGJzaXplLAorCQkJCQkgICAgIGNvbnN0IHN0cnVjdCBmYl9tb25zcGVjcyAqc3BlY3MpCiB7CiAJc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZSwgKm07CiAJdW5zaWduZWQgY2hhciAqYmxvY2s7CkBAIC02NDMsMTIgKzY1OSwxMyBAQAogCURQUklOVEsoIiAgIFN0YW5kYXJkIFRpbWluZ3NcbiIpOwogCWJsb2NrID0gZWRpZCArIFNURF9USU1JTkdfREVTQ1JJUFRJT05TX1NUQVJUOwogCWZvciAoaSA9IDA7IGkgPCBTVERfVElNSU5HOyBpKyssIGJsb2NrICs9IFNURF9USU1JTkdfREVTQ1JJUFRJT05fU0laRSkKLQkJbnVtICs9IGdldF9zdGRfdGltaW5nKGJsb2NrLCAmbW9kZVtudW1dLCB2ZXIsIHJldik7CisJCW51bSArPSBnZXRfc3RkX3RpbWluZyhibG9jaywgJm1vZGVbbnVtXSwgdmVyLCByZXYsIHNwZWNzKTsKIAogCWJsb2NrID0gZWRpZCArIERFVEFJTEVEX1RJTUlOR19ERVNDUklQVElPTlNfU1RBUlQ7CiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKywgYmxvY2srPSBERVRBSUxFRF9USU1JTkdfREVTQ1JJUFRJT05fU0laRSkgewogCQlpZiAoYmxvY2tbMF0gPT0gMHgwMCAmJiBibG9ja1sxXSA9PSAweDAwICYmIGJsb2NrWzNdID09IDB4ZmEpCi0JCQludW0gKz0gZ2V0X2RzdF90aW1pbmcoYmxvY2sgKyA1LCAmbW9kZVtudW1dLCB2ZXIsIHJldik7CisJCQludW0gKz0gZ2V0X2RzdF90aW1pbmcoYmxvY2sgKyA1LCAmbW9kZVtudW1dLAorCQkJCQkgICAgICB2ZXIsIHJldiwgc3BlY3MpOwogCX0KIAogCS8qIFlpa2VzLCBFRElEIGRhdGEgaXMgdG90YWxseSB1c2VsZXNzICovCkBAIC03MDcsNyArNzI0LDcgQEAKIAkJaW50IG51bV9tb2RlcywgaHosIGhzY2FuLCBwaXhjbG9jazsKIAkJaW50IHZ0b3RhbCwgaHRvdGFsOwogCi0JCW1vZGVzID0gZmJfY3JlYXRlX21vZGVkYihlZGlkLCAmbnVtX21vZGVzKTsKKwkJbW9kZXMgPSBmYl9jcmVhdGVfbW9kZWRiKGVkaWQsICZudW1fbW9kZXMsIHNwZWNzKTsKIAkJaWYgKCFtb2RlcykgewogCQkJRFBSSU5USygiTm9uZSBBdmFpbGFibGVcbiIpOwogCQkJcmV0dXJuIDE7CkBAIC05NjQsNyArOTgxLDcgQEAKIAlEUFJJTlRLKCIgICBEaXNwbGF5IENoYXJhY3RlcmlzdGljczpcbiIpOwogCWdldF9tb25zcGVjcyhlZGlkLCBzcGVjcyk7CiAKLQlzcGVjcy0+bW9kZWRiID0gZmJfY3JlYXRlX21vZGVkYihlZGlkLCAmc3BlY3MtPm1vZGVkYl9sZW4pOworCXNwZWNzLT5tb2RlZGIgPSBmYl9jcmVhdGVfbW9kZWRiKGVkaWQsICZzcGVjcy0+bW9kZWRiX2xlbiwgc3BlY3MpOwogCiAJLyoKIAkgKiBXb3JrYXJvdW5kIGZvciBidWdneSBFRElEcyB0aGF0IHNldHMgdGhhdCB0aGUgZmlyc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9tb2RlZGIuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9tb2RlZGIuYwppbmRleCAzODhmNzk3Li43ZDA3Y2Y4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvbW9kZWRiLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9jb3JlL21vZGVkYi5jCkBAIC00NjgsOCArNDY4LDExOSBAQAogCS8qIDMzIDE5MjB4MTQ0MC03NSBWRVNBICovCiAJeyBOVUxMLCA3NSwgMTkyMCwgMTQ0MCwgMzM2NywgMzUyLCAxNDQsIDU2LCAxLCAyMjQsIDMsCiAJICBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsIEZCX01PREVfSVNfVkVTQSB9LAorCS8qIDM0IDE5MjB4MTIwMC02MCBSQiBWRVNBICovCisJeyBOVUxMLCA2MCwgMTkyMCwgMTIwMCwgNjQ5MywgODAsIDQ4LCAyNiwgMywgMzIsIDYsCisJICBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsIEZCX01PREVfSVNfVkVTQSB9LAorCS8qIDM1IDE5MjB4MTIwMC02MCBWRVNBICovCisJeyBOVUxMLCA2MCwgMTkyMCwgMTIwMCwgNTE3NCwgMzM2LCAxMzYsIDM2LCAzLCAyMDAsIDYsCisJICBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsIEZCX01PREVfSVNfVkVTQSB9LAorCS8qIDM2IDE5MjB4MTIwMC03NSBWRVNBICovCisJeyBOVUxMLCA3NSwgMTkyMCwgMTIwMCwgNDA3NywgMzQ0LCAxMzYsIDQ2LCAzLCAyMDgsIDYsCisJICBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsIEZCX01PREVfSVNfVkVTQSB9LAorCS8qIDM3IDE5MjB4MTIwMC04NSBWRVNBICovCisJeyBOVUxMLCA4NSwgMTkyMCwgMTIwMCwgMzU1NSwgMzUyLCAxNDQsIDUzLCAzLCAyMDgsIDYsCisJICBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsIEZCX01PREVfSVNfVkVTQSB9LAorCS8qIDM4IDI1NjB4MTYwMC02MCBSQiBWRVNBICovCisJeyBOVUxMLCA2MCwgMjU2MCwgMTYwMCwgMzcyNCwgODAsIDQ4LCAzNywgMywgMzIsIDYsCisJICBGQl9TWU5DX0hPUl9ISUdIX0FDVCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRCwgRkJfTU9ERV9JU19WRVNBIH0sCisJLyogMzkgMjU2MHgxNjAwLTYwIFZFU0EgKi8KKwl7IE5VTEwsIDYwLCAyNTYwLCAxNjAwLCAyODY5LCA0NzIsIDE5MiwgNDksIDMsIDI4MCwgNiwKKwkgIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRCwgRkJfTU9ERV9JU19WRVNBIH0sCisJLyogNDAgMjU2MHgxNjAwLTc1IFZFU0EgKi8KKwl7IE5VTEwsIDc1LCAyNTYwLCAxNjAwLCAyMjU2LCA0ODgsIDIwOCwgNjMsIDMsIDI4MCwgNiwKKwkgIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRCwgRkJfTU9ERV9JU19WRVNBIH0sCisJLyogNDEgMjU2MHgxNjAwLTg1IFZFU0EgKi8KKwl7IE5VTEwsIDg1LCAyNTYwLCAxNjAwLCAxOTc5LCA0ODgsIDIwOCwgNzMsIDMsIDI4MCwgNiwKKwkgIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwgRkJfVk1PREVfTk9OSU5URVJMQUNFRCwgRkJfTU9ERV9JU19WRVNBIH0sCisJLyogNDIgMjU2MHgxNjAwLTEyMCBSQiBWRVNBICovCisJeyBOVUxMLCAxMjAsIDI1NjAsIDE2MDAsIDE4MDksIDgwLCA0OCwgODUsIDMsIDMyLCA2LAorCSAgRkJfU1lOQ19IT1JfSElHSF9BQ1QsIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsIEZCX01PREVfSVNfVkVTQSB9LAogfTsKIEVYUE9SVF9TWU1CT0wodmVzYV9tb2Rlcyk7CisKK2NvbnN0IHN0cnVjdCBkbXRfdmlkZW9tb2RlIGRtdF9tb2Rlc1tETVRfU0laRV0gPSB7CisJeyAweDAxLCAweDAwMDAsIDB4MDAwMDAwLCAmdmVzYV9tb2Rlc1swXSB9LAorCXsgMHgwMiwgMHgzMTE5LCAweDAwMDAwMCwgJnZlc2FfbW9kZXNbMV0gfSwKKwl7IDB4MDMsIDB4MDAwMCwgMHgwMDAwMDAsICZ2ZXNhX21vZGVzWzJdIH0sCisJeyAweDA0LCAweDMxNDAsIDB4MDAwMDAwLCAmdmVzYV9tb2Rlc1szXSB9LAorCXsgMHgwNSwgMHgzMTRjLCAweDAwMDAwMCwgJnZlc2FfbW9kZXNbNF0gfSwKKwl7IDB4MDYsIDB4MzE0ZiwgMHgwMDAwMDAsICZ2ZXNhX21vZGVzWzVdIH0sCisJeyAweDA3LCAweDMxNTksIDB4MDAwMDAwLCAmdmVzYV9tb2Rlc1s2XSB9LAorCXsgMHgwOCwgMHgwMDAwLCAweDAwMDAwMCwgJnZlc2FfbW9kZXNbN10gfSwKKwl7IDB4MDksIDB4NDU0MCwgMHgwMDAwMDAsICZ2ZXNhX21vZGVzWzhdIH0sCisJeyAweDBhLCAweDQ1NGMsIDB4MDAwMDAwLCAmdmVzYV9tb2Rlc1s5XSB9LAorCXsgMHgwYiwgMHg0NTRmLCAweDAwMDAwMCwgJnZlc2FfbW9kZXNbMTBdIH0sCisJeyAweDBjLCAweDQ1NTksIDB4MDAwMDAwLCAmdmVzYV9tb2Rlc1sxMV0gfSwKKwl7IDB4MGQsIDB4MDAwMCwgMHgwMDAwMDAsIE5VTEwgfSwKKwl7IDB4MGUsIDB4MDAwMCwgMHgwMDAwMDAsIE5VTEwgfSwKKwl7IDB4MGYsIDB4MDAwMCwgMHgwMDAwMDAsICZ2ZXNhX21vZGVzWzEyXSB9LAorCXsgMHgxMCwgMHg2MTQwLCAweDAwMDAwMCwgJnZlc2FfbW9kZXNbMTNdIH0sCisJeyAweDExLCAweDYxNGEsIDB4MDAwMDAwLCAmdmVzYV9tb2Rlc1sxNF0gfSwKKwl7IDB4MTIsIDB4NjE0ZiwgMHgwMDAwMDAsICZ2ZXNhX21vZGVzWzE1XSB9LAorCXsgMHgxMywgMHg2MTU5LCAweDAwMDAwMCwgJnZlc2FfbW9kZXNbMTZdIH0sCisJeyAweDE0LCAweDAwMDAsIDB4MDAwMDAwLCBOVUxMIH0sCisJeyAweDE1LCAweDcxNGYsIDB4MDAwMDAwLCAmdmVzYV9tb2Rlc1sxN10gfSwKKwl7IDB4MTYsIDB4MDAwMCwgMHg3ZjFjMjEsIE5VTEwgfSwKKwl7IDB4MTcsIDB4MDAwMCwgMHg3ZjFjMjgsIE5VTEwgfSwKKwl7IDB4MTgsIDB4MDAwMCwgMHg3ZjFjNDQsIE5VTEwgfSwKKwl7IDB4MTksIDB4MDAwMCwgMHg3ZjFjNjIsIE5VTEwgfSwKKwl7IDB4MWEsIDB4MDAwMCwgMHgwMDAwMDAsIE5VTEwgfSwKKwl7IDB4MWIsIDB4MDAwMCwgMHg4ZjE4MjEsIE5VTEwgfSwKKwl7IDB4MWMsIDB4ODEwMCwgMHg4ZjE4MjgsIE5VTEwgfSwKKwl7IDB4MWQsIDB4ODEwZiwgMHg4ZjE4NDQsIE5VTEwgfSwKKwl7IDB4MWUsIDB4ODExOSwgMHg4ZjE4NjIsIE5VTEwgfSwKKwl7IDB4MWYsIDB4MDAwMCwgMHgwMDAwMDAsIE5VTEwgfSwKKwl7IDB4MjAsIDB4ODE0MCwgMHgwMDAwMDAsICZ2ZXNhX21vZGVzWzE4XSB9LAorCXsgMHgyMSwgMHg4MTU5LCAweDAwMDAwMCwgJnZlc2FfbW9kZXNbMTldIH0sCisJeyAweDIyLCAweDAwMDAsIDB4MDAwMDAwLCBOVUxMIH0sCisJeyAweDIzLCAweDgxODAsIDB4MDAwMDAwLCAmdmVzYV9tb2Rlc1syMF0gfSwKKwl7IDB4MjQsIDB4ODE4ZiwgMHgwMDAwMDAsICZ2ZXNhX21vZGVzWzIxXSB9LAorCXsgMHgyNSwgMHg4MTk5LCAweDAwMDAwMCwgJnZlc2FfbW9kZXNbMjJdIH0sCisJeyAweDI2LCAweDAwMDAsIDB4MDAwMDAwLCBOVUxMIH0sCisJeyAweDI3LCAweDAwMDAsIDB4MDAwMDAwLCBOVUxMIH0sCisJeyAweDI4LCAweDAwMDAsIDB4MDAwMDAwLCBOVUxMIH0sCisJeyAweDI5LCAweDAwMDAsIDB4MGMyMDIxLCBOVUxMIH0sCisJeyAweDJhLCAweDkwNDAsIDB4MGMyMDI4LCBOVUxMIH0sCisJeyAweDJiLCAweDkwNGYsIDB4MGMyMDQ0LCBOVUxMIH0sCisJeyAweDJjLCAweDkwNTksIDB4MGMyMDYyLCBOVUxMIH0sCisJeyAweDJkLCAweDAwMDAsIDB4MDAwMDAwLCBOVUxMIH0sCisJeyAweDJlLCAweDk1MDAsIDB4YzExODIxLCBOVUxMIH0sCisJeyAweDJmLCAweDk1MDAsIDB4YzExODI4LCBOVUxMIH0sCisJeyAweDMwLCAweDk1MGYsIDB4YzExODQ0LCBOVUxMIH0sCisJeyAweDMxLCAweDk1MTksIDB4YzExODY4LCBOVUxMIH0sCisJeyAweDMyLCAweDAwMDAsIDB4MDAwMDAwLCBOVUxMIH0sCisJeyAweDMzLCAweGE5NDAsIDB4MDAwMDAwLCAmdmVzYV9tb2Rlc1syM10gfSwKKwl7IDB4MzQsIDB4YTk0NSwgMHgwMDAwMDAsICZ2ZXNhX21vZGVzWzI0XSB9LAorCXsgMHgzNSwgMHhhOTRhLCAweDAwMDAwMCwgJnZlc2FfbW9kZXNbMjVdIH0sCisJeyAweDM2LCAweGE5NGYsIDB4MDAwMDAwLCAmdmVzYV9tb2Rlc1syNl0gfSwKKwl7IDB4MzcsIDB4YTk1OSwgMHgwMDAwMDAsICZ2ZXNhX21vZGVzWzI3XSB9LAorCXsgMHgzOCwgMHgwMDAwLCAweDAwMDAwMCwgTlVMTCB9LAorCXsgMHgzOSwgMHgwMDAwLCAweDBjMjgyMSwgTlVMTCB9LAorCXsgMHgzYSwgMHhiMzAwLCAweDBjMjgyOCwgTlVMTCB9LAorCXsgMHgzYiwgMHhiMzBmLCAweDBjMjg0NCwgTlVMTCB9LAorCXsgMHgzYywgMHhiMzE5LCAweDBjMjg2OCwgTlVMTCB9LAorCXsgMHgzZCwgMHgwMDAwLCAweDAwMDAwMCwgTlVMTCB9LAorCXsgMHgzZSwgMHhjMTQwLCAweDAwMDAwMCwgJnZlc2FfbW9kZXNbMjhdIH0sCisJeyAweDNmLCAweGMxNGYsIDB4MDAwMDAwLCAmdmVzYV9tb2Rlc1syOV0gfSwKKwl7IDB4NDAsIDB4MDAwMCwgMHgwMDAwMDAsIE5VTEx9LAorCXsgMHg0MSwgMHhjOTQwLCAweDAwMDAwMCwgJnZlc2FfbW9kZXNbMzBdIH0sCisJeyAweDQyLCAweGM5NGYsIDB4MDAwMDAwLCAmdmVzYV9tb2Rlc1szMV0gfSwKKwl7IDB4NDMsIDB4MDAwMCwgMHgwMDAwMDAsIE5VTEwgfSwKKwl7IDB4NDQsIDB4MDAwMCwgMHg1NzI4MjEsICZ2ZXNhX21vZGVzWzM0XSB9LAorCXsgMHg0NSwgMHhkMTAwLCAweDU3MjgyOCwgJnZlc2FfbW9kZXNbMzVdIH0sCisJeyAweDQ2LCAweGQxMGYsIDB4NTcyODQ0LCAmdmVzYV9tb2Rlc1szNl0gfSwKKwl7IDB4NDcsIDB4ZDExOSwgMHg1NzI4NjIsICZ2ZXNhX21vZGVzWzM3XSB9LAorCXsgMHg0OCwgMHgwMDAwLCAweDAwMDAwMCwgTlVMTCB9LAorCXsgMHg0OSwgMHhkMTQwLCAweDAwMDAwMCwgJnZlc2FfbW9kZXNbMzJdIH0sCisJeyAweDRhLCAweGQxNGYsIDB4MDAwMDAwLCAmdmVzYV9tb2Rlc1szM10gfSwKKwl7IDB4NGIsIDB4MDAwMCwgMHgwMDAwMDAsIE5VTEwgfSwKKwl7IDB4NGMsIDB4MDAwMCwgMHgxZjM4MjEsICZ2ZXNhX21vZGVzWzM4XSB9LAorCXsgMHg0ZCwgMHgwMDAwLCAweDFmMzgyOCwgJnZlc2FfbW9kZXNbMzldIH0sCisJeyAweDRlLCAweDAwMDAsIDB4MWYzODQ0LCAmdmVzYV9tb2Rlc1s0MF0gfSwKKwl7IDB4NGYsIDB4MDAwMCwgMHgxZjM4NjIsICZ2ZXNhX21vZGVzWzQxXSB9LAorCXsgMHg1MCwgMHgwMDAwLCAweDAwMDAwMCwgJnZlc2FfbW9kZXNbNDJdIH0sCit9OworRVhQT1JUX1NZTUJPTChkbXRfbW9kZXMpOwogI2VuZGlmIC8qIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2NvcmUvc3lzY29weWFyZWEuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9zeXNjb3B5YXJlYS5jCmluZGV4IDg0NGEzMmYuLmMxZWRhMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9zeXNjb3B5YXJlYS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvY29yZS9zeXNjb3B5YXJlYS5jCkBAIC0yNSw4ICsyNSw4IEBACiAgICAgICovCiAKIHN0YXRpYyB2b2lkCi1iaXRjcHkoc3RydWN0IGZiX2luZm8gKnAsIHVuc2lnbmVkIGxvbmcgKmRzdCwgaW50IGRzdF9pZHgsCi0JCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnNyYywgaW50IHNyY19pZHgsIGludCBiaXRzLCB1bnNpZ25lZCBuKQorYml0Y3B5KHN0cnVjdCBmYl9pbmZvICpwLCB1bnNpZ25lZCBsb25nICpkc3QsIHVuc2lnbmVkIGRzdF9pZHgsCisJY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLCB1bnNpZ25lZCBzcmNfaWR4LCBpbnQgYml0cywgdW5zaWduZWQgbikKIHsKIAl1bnNpZ25lZCBsb25nIGZpcnN0LCBsYXN0OwogCWludCBjb25zdCBzaGlmdCA9IGRzdF9pZHgtc3JjX2lkeDsKQEAgLTg2LDE1ICs4NiwxNSBAQAogCQkJCWZpcnN0ICY9IGxhc3Q7CiAJCQlpZiAoc2hpZnQgPiAwKSB7CiAJCQkJLyogU2luZ2xlIHNvdXJjZSB3b3JkICovCi0JCQkJKmRzdCA9IGNvbXAoKnNyYyA+PiByaWdodCwgKmRzdCwgZmlyc3QpOworCQkJCSpkc3QgPSBjb21wKCpzcmMgPDwgbGVmdCwgKmRzdCwgZmlyc3QpOwogCQkJfSBlbHNlIGlmIChzcmNfaWR4K24gPD0gYml0cykgewogCQkJCS8qIFNpbmdsZSBzb3VyY2Ugd29yZCAqLwotCQkJCSpkc3QgPSBjb21wKCpzcmMgPDwgbGVmdCwgKmRzdCwgZmlyc3QpOworCQkJCSpkc3QgPSBjb21wKCpzcmMgPj4gcmlnaHQsICpkc3QsIGZpcnN0KTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogMiBzb3VyY2Ugd29yZHMgKi8KIAkJCQlkMCA9ICpzcmMrKzsKIAkJCQlkMSA9ICpzcmM7Ci0JCQkJKmRzdCA9IGNvbXAoZDAgPDwgbGVmdCB8IGQxID4+IHJpZ2h0LCAqZHN0LAorCQkJCSpkc3QgPSBjb21wKGQwID4+IHJpZ2h0IHwgZDEgPDwgbGVmdCwgKmRzdCwKIAkJCQkJICAgIGZpcnN0KTsKIAkJCX0KIAkJfSBlbHNlIHsKQEAgLTEwOSwxMyArMTA5LDE0IEBACiAJCQkvKiBMZWFkaW5nIGJpdHMgKi8KIAkJCWlmIChzaGlmdCA+IDApIHsKIAkJCQkvKiBTaW5nbGUgc291cmNlIHdvcmQgKi8KLQkJCQkqZHN0ID0gY29tcChkMCA+PiByaWdodCwgKmRzdCwgZmlyc3QpOworCQkJCSpkc3QgPSBjb21wKGQwIDw8IGxlZnQsICpkc3QsIGZpcnN0KTsKIAkJCQlkc3QrKzsKIAkJCQluIC09IGJpdHMgLSBkc3RfaWR4OwogCQkJfSBlbHNlIHsKIAkJCQkvKiAyIHNvdXJjZSB3b3JkcyAqLwogCQkJCWQxID0gKnNyYysrOwotCQkJCSpkc3QgPSBjb21wKGQwIDw8IGxlZnQgfCAqZHN0ID4+IHJpZ2h0LCAqZHN0LCBmaXJzdCk7CisJCQkJKmRzdCA9IGNvbXAoZDAgPj4gcmlnaHQgfCBkMSA8PCBsZWZ0LCAqZHN0LAorCQkJCQkgICAgZmlyc3QpOwogCQkJCWQwID0gZDE7CiAJCQkJZHN0Kys7CiAJCQkJbiAtPSBiaXRzIC0gZHN0X2lkeDsKQEAgLTEyNiwzNiArMTI3LDM2IEBACiAJCQluIC89IGJpdHM7CiAJCQl3aGlsZSAobiA+PSA0KSB7CiAJCQkJZDEgPSAqc3JjKys7Ci0JCQkJKmRzdCsrID0gZDAgPDwgbGVmdCB8IGQxID4+IHJpZ2h0OworCQkJCSpkc3QrKyA9IGQwID4+IHJpZ2h0IHwgZDEgPDwgbGVmdDsKIAkJCQlkMCA9IGQxOwogCQkJCWQxID0gKnNyYysrOwotCQkJCSpkc3QrKyA9IGQwIDw8IGxlZnQgfCBkMSA+PiByaWdodDsKKwkJCQkqZHN0KysgPSBkMCA+PiByaWdodCB8IGQxIDw8IGxlZnQ7CiAJCQkJZDAgPSBkMTsKIAkJCQlkMSA9ICpzcmMrKzsKLQkJCQkqZHN0KysgPSBkMCA8PCBsZWZ0IHwgZDEgPj4gcmlnaHQ7CisJCQkJKmRzdCsrID0gZDAgPj4gcmlnaHQgfCBkMSA8PCBsZWZ0OwogCQkJCWQwID0gZDE7CiAJCQkJZDEgPSAqc3JjKys7Ci0JCQkJKmRzdCsrID0gZDAgPDwgbGVmdCB8IGQxID4+IHJpZ2h0OworCQkJCSpkc3QrKyA9IGQwID4+IHJpZ2h0IHwgZDEgPDwgbGVmdDsKIAkJCQlkMCA9IGQxOwogCQkJCW4gLT0gNDsKIAkJCX0KIAkJCXdoaWxlIChuLS0pIHsKIAkJCQlkMSA9ICpzcmMrKzsKLQkJCQkqZHN0KysgPSBkMCA8PCBsZWZ0IHwgZDEgPj4gcmlnaHQ7CisJCQkJKmRzdCsrID0gZDAgPj4gcmlnaHQgfCBkMSA8PCBsZWZ0OwogCQkJCWQwID0gZDE7CiAJCQl9CiAKIAkJCS8qIFRyYWlsaW5nIGJpdHMgKi8KLQkJCWlmIChsYXN0KSB7Ci0JCQkJaWYgKG0gPD0gcmlnaHQpIHsKKwkJCWlmIChtKSB7CisJCQkJaWYgKG0gPD0gYml0cyAtIHJpZ2h0KSB7CiAJCQkJCS8qIFNpbmdsZSBzb3VyY2Ugd29yZCAqLwotCQkJCQkqZHN0ID0gY29tcChkMCA8PCBsZWZ0LCAqZHN0LCBsYXN0KTsKKwkJCQkJZDAgPj49IHJpZ2h0OwogCQkJCX0gZWxzZSB7CiAJCQkJCS8qIDIgc291cmNlIHdvcmRzICovCiAgCQkJCQlkMSA9ICpzcmM7Ci0JCQkJCSpkc3QgPSBjb21wKGQwIDw8IGxlZnQgfCBkMSA+PiByaWdodCwKLQkJCQkJCSAgICAqZHN0LCBsYXN0KTsKKwkJCQkJZDAgPSBkMCA+PiByaWdodCB8IGQxIDw8IGxlZnQ7CiAJCQkJfQorCQkJCSpkc3QgPSBjb21wKGQwLCAqZHN0LCBsYXN0KTsKIAkJCX0KIAkJfQogCX0KQEAgLTE2Niw0MCArMTY3LDM1IEBACiAgICAgICovCiAKIHN0YXRpYyB2b2lkCi1iaXRjcHlfcmV2KHN0cnVjdCBmYl9pbmZvICpwLCB1bnNpZ25lZCBsb25nICpkc3QsIGludCBkc3RfaWR4LAotCQljb25zdCB1bnNpZ25lZCBsb25nICpzcmMsIGludCBzcmNfaWR4LCBpbnQgYml0cywgdW5zaWduZWQgbikKK2JpdGNweV9yZXYoc3RydWN0IGZiX2luZm8gKnAsIHVuc2lnbmVkIGxvbmcgKmRzdCwgdW5zaWduZWQgZHN0X2lkeCwKKwkgICBjb25zdCB1bnNpZ25lZCBsb25nICpzcmMsIHVuc2lnbmVkIHNyY19pZHgsIHVuc2lnbmVkIGJpdHMsCisJICAgdW5zaWduZWQgbikKIHsKIAl1bnNpZ25lZCBsb25nIGZpcnN0LCBsYXN0OwogCWludCBzaGlmdDsKIAotCWRzdCArPSAobi0xKS9iaXRzOwotCXNyYyArPSAobi0xKS9iaXRzOwotCWlmICgobi0xKSAlIGJpdHMpIHsKLQkJZHN0X2lkeCArPSAobi0xKSAlIGJpdHM7Ci0JCWRzdCArPSBkc3RfaWR4ID4+IChmZnMoYml0cykgLSAxKTsKLQkJZHN0X2lkeCAmPSBiaXRzIC0gMTsKLQkJc3JjX2lkeCArPSAobi0xKSAlIGJpdHM7Ci0JCXNyYyArPSBzcmNfaWR4ID4+IChmZnMoYml0cykgLSAxKTsKLQkJc3JjX2lkeCAmPSBiaXRzIC0gMTsKLQl9CisJZHN0ICs9IChkc3RfaWR4ICsgbiAtIDEpIC8gYml0czsKKwlzcmMgKz0gKHNyY19pZHggKyBuIC0gMSkgLyBiaXRzOworCWRzdF9pZHggPSAoZHN0X2lkeCArIG4gLSAxKSAlIGJpdHM7CisJc3JjX2lkeCA9IChzcmNfaWR4ICsgbiAtIDEpICUgYml0czsKIAogCXNoaWZ0ID0gZHN0X2lkeC1zcmNfaWR4OwogCi0JZmlyc3QgPSBGQl9TSElGVF9MT1cocCwgfjBVTCwgYml0cyAtIDEgLSBkc3RfaWR4KTsKLQlsYXN0ID0gfihGQl9TSElGVF9MT1cocCwgfjBVTCwgYml0cyAtIDEgLSAoKGRzdF9pZHgtbikgJSBiaXRzKSkpOworCWZpcnN0ID0gfkZCX1NISUZUX0hJR0gocCwgfjBVTCwgKGRzdF9pZHggKyAxKSAlIGJpdHMpOworCWxhc3QgPSBGQl9TSElGVF9ISUdIKHAsIH4wVUwsIChiaXRzICsgZHN0X2lkeCArIDEgLSBuKSAlIGJpdHMpOwogCiAJaWYgKCFzaGlmdCkgewogCQkvKiBTYW1lIGFsaWdubWVudCBmb3Igc291cmNlIGFuZCBkZXN0ICovCiAJCWlmICgodW5zaWduZWQgbG9uZylkc3RfaWR4KzEgPj0gbikgewogCQkJLyogU2luZ2xlIHdvcmQgKi8KLQkJCWlmIChsYXN0KQotCQkJCWZpcnN0ICY9IGxhc3Q7Ci0JCQkqZHN0ID0gY29tcCgqc3JjLCAqZHN0LCBmaXJzdCk7CisJCQlpZiAoZmlyc3QpCisJCQkJbGFzdCAmPSBmaXJzdDsKKwkJCSpkc3QgPSBjb21wKCpzcmMsICpkc3QsIGxhc3QpOwogCQl9IGVsc2UgewogCQkJLyogTXVsdGlwbGUgZGVzdGluYXRpb24gd29yZHMgKi8KIAogCQkJLyogTGVhZGluZyBiaXRzICovCi0JCQlpZiAoZmlyc3QgIT0gfjBVTCkgeworCQkJaWYgKGZpcnN0KSB7CiAJCQkJKmRzdCA9IGNvbXAoKnNyYywgKmRzdCwgZmlyc3QpOwogCQkJCWRzdC0tOwogCQkJCXNyYy0tOwpAQCAtMjIyLDI5ICsyMTgsMjkgQEAKIAkJCXdoaWxlIChuLS0pCiAJCQkJKmRzdC0tID0gKnNyYy0tOwogCQkJLyogVHJhaWxpbmcgYml0cyAqLwotCQkJaWYgKGxhc3QpCisJCQlpZiAobGFzdCAhPSAtMVVMKQogCQkJCSpkc3QgPSBjb21wKCpzcmMsICpkc3QsIGxhc3QpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogRGlmZmVyZW50IGFsaWdubWVudCBmb3Igc291cmNlIGFuZCBkZXN0ICovCiAKLQkJaW50IGNvbnN0IGxlZnQgPSAtc2hpZnQgJiAoYml0cy0xKTsKLQkJaW50IGNvbnN0IHJpZ2h0ID0gc2hpZnQgJiAoYml0cy0xKTsKKwkJaW50IGNvbnN0IGxlZnQgPSBzaGlmdCAmIChiaXRzLTEpOworCQlpbnQgY29uc3QgcmlnaHQgPSAtc2hpZnQgJiAoYml0cy0xKTsKIAogCQlpZiAoKHVuc2lnbmVkIGxvbmcpZHN0X2lkeCsxID49IG4pIHsKIAkJCS8qIFNpbmdsZSBkZXN0aW5hdGlvbiB3b3JkICovCi0JCQlpZiAobGFzdCkKLQkJCQlmaXJzdCAmPSBsYXN0OworCQkJaWYgKGZpcnN0KQorCQkJCWxhc3QgJj0gZmlyc3Q7CiAJCQlpZiAoc2hpZnQgPCAwKSB7CiAJCQkJLyogU2luZ2xlIHNvdXJjZSB3b3JkICovCi0JCQkJKmRzdCA9IGNvbXAoKnNyYyA8PCBsZWZ0LCAqZHN0LCBmaXJzdCk7CisJCQkJKmRzdCA9IGNvbXAoKnNyYyA+PiByaWdodCwgKmRzdCwgbGFzdCk7CiAJCQl9IGVsc2UgaWYgKDErKHVuc2lnbmVkIGxvbmcpc3JjX2lkeCA+PSBuKSB7CiAJCQkJLyogU2luZ2xlIHNvdXJjZSB3b3JkICovCi0JCQkJKmRzdCA9IGNvbXAoKnNyYyA+PiByaWdodCwgKmRzdCwgZmlyc3QpOworCQkJCSpkc3QgPSBjb21wKCpzcmMgPDwgbGVmdCwgKmRzdCwgbGFzdCk7CiAJCQl9IGVsc2UgewogCQkJCS8qIDIgc291cmNlIHdvcmRzICovCi0JCQkJKmRzdCA9IGNvbXAoKnNyYyA+PiByaWdodCB8ICooc3JjLTEpIDw8IGxlZnQsCi0JCQkJCSAgICAqZHN0LCBmaXJzdCk7CisJCQkJKmRzdCA9IGNvbXAoKnNyYyA8PCBsZWZ0IHwgKihzcmMtMSkgPj4gcmlnaHQsCisJCQkJCSAgICAqZHN0LCBsYXN0KTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIE11bHRpcGxlIGRlc3RpbmF0aW9uIHdvcmRzICovCkBAIC0yNjEsMTQgKzI1NywxOCBAQAogCQkJLyogTGVhZGluZyBiaXRzICovCiAJCQlpZiAoc2hpZnQgPCAwKSB7CiAJCQkJLyogU2luZ2xlIHNvdXJjZSB3b3JkICovCi0JCQkJKmRzdCA9IGNvbXAoZDAgPDwgbGVmdCwgKmRzdCwgZmlyc3QpOworCQkJCWQxID0gZDA7CisJCQkJZDAgPj49IHJpZ2h0OwogCQkJfSBlbHNlIHsKIAkJCQkvKiAyIHNvdXJjZSB3b3JkcyAqLwogCQkJCWQxID0gKnNyYy0tOwotCQkJCSpkc3QgPSBjb21wKGQwID4+IHJpZ2h0IHwgZDEgPDwgbGVmdCwgKmRzdCwKLQkJCQkJICAgIGZpcnN0KTsKLQkJCQlkMCA9IGQxOworCQkJCWQwID0gZDAgPDwgbGVmdCB8IGQxID4+IHJpZ2h0OwogCQkJfQorCQkJaWYgKCFmaXJzdCkKKwkJCQkqZHN0ID0gZDA7CisJCQllbHNlCisJCQkJKmRzdCA9IGNvbXAoZDAsICpkc3QsIGZpcnN0KTsKKwkJCWQwID0gZDE7CiAJCQlkc3QtLTsKIAkJCW4gLT0gZHN0X2lkeCsxOwogCkBAIC0yNzcsMzYgKzI3NywzNiBAQAogCQkJbiAvPSBiaXRzOwogCQkJd2hpbGUgKG4gPj0gNCkgewogCQkJCWQxID0gKnNyYy0tOwotCQkJCSpkc3QtLSA9IGQwID4+IHJpZ2h0IHwgZDEgPDwgbGVmdDsKKwkJCQkqZHN0LS0gPSBkMCA8PCBsZWZ0IHwgZDEgPj4gcmlnaHQ7CiAJCQkJZDAgPSBkMTsKIAkJCQlkMSA9ICpzcmMtLTsKLQkJCQkqZHN0LS0gPSBkMCA+PiByaWdodCB8IGQxIDw8IGxlZnQ7CisJCQkJKmRzdC0tID0gZDAgPDwgbGVmdCB8IGQxID4+IHJpZ2h0OwogCQkJCWQwID0gZDE7CiAJCQkJZDEgPSAqc3JjLS07Ci0JCQkJKmRzdC0tID0gZDAgPj4gcmlnaHQgfCBkMSA8PCBsZWZ0OworCQkJCSpkc3QtLSA9IGQwIDw8IGxlZnQgfCBkMSA+PiByaWdodDsKIAkJCQlkMCA9IGQxOwogCQkJCWQxID0gKnNyYy0tOwotCQkJCSpkc3QtLSA9IGQwID4+IHJpZ2h0IHwgZDEgPDwgbGVmdDsKKwkJCQkqZHN0LS0gPSBkMCA8PCBsZWZ0IHwgZDEgPj4gcmlnaHQ7CiAJCQkJZDAgPSBkMTsKIAkJCQluIC09IDQ7CiAJCQl9CiAJCQl3aGlsZSAobi0tKSB7CiAJCQkJZDEgPSAqc3JjLS07Ci0JCQkJKmRzdC0tID0gZDAgPj4gcmlnaHQgfCBkMSA8PCBsZWZ0OworCQkJCSpkc3QtLSA9IGQwIDw8IGxlZnQgfCBkMSA+PiByaWdodDsKIAkJCQlkMCA9IGQxOwogCQkJfQogCiAJCQkvKiBUcmFpbGluZyBiaXRzICovCi0JCQlpZiAobGFzdCkgewotCQkJCWlmIChtIDw9IGxlZnQpIHsKKwkJCWlmIChtKSB7CisJCQkJaWYgKG0gPD0gYml0cyAtIGxlZnQpIHsKIAkJCQkJLyogU2luZ2xlIHNvdXJjZSB3b3JkICovCi0JCQkJCSpkc3QgPSBjb21wKGQwID4+IHJpZ2h0LCAqZHN0LCBsYXN0KTsKKwkJCQkJZDAgPDw9IGxlZnQ7CiAJCQkJfSBlbHNlIHsKIAkJCQkJLyogMiBzb3VyY2Ugd29yZHMgKi8KIAkJCQkJZDEgPSAqc3JjOwotCQkJCQkqZHN0ID0gY29tcChkMCA+PiByaWdodCB8IGQxIDw8IGxlZnQsCi0JCQkJCQkgICAgKmRzdCwgbGFzdCk7CisJCQkJCWQwID0gZDAgPDwgbGVmdCB8IGQxID4+IHJpZ2h0OwogCQkJCX0KKwkJCQkqZHN0ID0gY29tcChkMCwgKmRzdCwgbGFzdCk7CiAJCQl9CiAJCX0KIAl9CkBAIC0zMTcsOSArMzE3LDkgQEAKIAl1MzIgZHggPSBhcmVhLT5keCwgZHkgPSBhcmVhLT5keSwgc3ggPSBhcmVhLT5zeCwgc3kgPSBhcmVhLT5zeTsKIAl1MzIgaGVpZ2h0ID0gYXJlYS0+aGVpZ2h0LCB3aWR0aCA9IGFyZWEtPndpZHRoOwogCXVuc2lnbmVkIGxvbmcgY29uc3QgYml0c19wZXJfbGluZSA9IHAtPmZpeC5saW5lX2xlbmd0aCo4dTsKLQl1bnNpZ25lZCBsb25nICpkc3QgPSBOVUxMLCAqc3JjID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nICpiYXNlID0gTlVMTDsKIAlpbnQgYml0cyA9IEJJVFNfUEVSX0xPTkcsIGJ5dGVzID0gYml0cyA+PiAzOwotCWludCBkc3RfaWR4ID0gMCwgc3JjX2lkeCA9IDAsIHJldl9jb3B5ID0gMDsKKwl1bnNpZ25lZCBkc3RfaWR4ID0gMCwgc3JjX2lkeCA9IDAsIHJldl9jb3B5ID0gMDsKIAogCWlmIChwLT5zdGF0ZSAhPSBGQklORk9fU1RBVEVfUlVOTklORykKIAkJcmV0dXJuOwpAQCAtMzM0LDggKzMzNCw3IEBACiAKIAkvKiBzcGxpdCB0aGUgYmFzZSBvZiB0aGUgZnJhbWVidWZmZXIgaW50byBhIGxvbmctYWxpZ25lZCBhZGRyZXNzIGFuZAogCSAgIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgYml0ICovCi0JZHN0ID0gc3JjID0gKHVuc2lnbmVkIGxvbmcgKikoKHVuc2lnbmVkIGxvbmcpcC0+c2NyZWVuX2Jhc2UgJgotCQkJCSAgICAgIH4oYnl0ZXMtMSkpOworCWJhc2UgPSAodW5zaWduZWQgbG9uZyAqKSgodW5zaWduZWQgbG9uZylwLT5zY3JlZW5fYmFzZSAmIH4oYnl0ZXMtMSkpOwogCWRzdF9pZHggPSBzcmNfaWR4ID0gOCooKHVuc2lnbmVkIGxvbmcpcC0+c2NyZWVuX2Jhc2UgJiAoYnl0ZXMtMSkpOwogCS8qIGFkZCBvZmZzZXQgb2Ygc291cmNlIGFuZCB0YXJnZXQgYXJlYSAqLwogCWRzdF9pZHggKz0gZHkqYml0c19wZXJfbGluZSArIGR4KnAtPnZhci5iaXRzX3Blcl9waXhlbDsKQEAgLTM0OCwyMCArMzQ3LDE0IEBACiAJCXdoaWxlIChoZWlnaHQtLSkgewogCQkJZHN0X2lkeCAtPSBiaXRzX3Blcl9saW5lOwogCQkJc3JjX2lkeCAtPSBiaXRzX3Blcl9saW5lOwotCQkJZHN0ICs9IGRzdF9pZHggPj4gKGZmcyhiaXRzKSAtIDEpOwotCQkJZHN0X2lkeCAmPSAoYnl0ZXMgLSAxKTsKLQkJCXNyYyArPSBzcmNfaWR4ID4+IChmZnMoYml0cykgLSAxKTsKLQkJCXNyY19pZHggJj0gKGJ5dGVzIC0gMSk7Ci0JCQliaXRjcHlfcmV2KHAsIGRzdCwgZHN0X2lkeCwgc3JjLCBzcmNfaWR4LCBiaXRzLAorCQkJYml0Y3B5X3JldihwLCBiYXNlICsgKGRzdF9pZHggLyBiaXRzKSwgZHN0X2lkeCAlIGJpdHMsCisJCQkJYmFzZSArIChzcmNfaWR4IC8gYml0cyksIHNyY19pZHggJSBiaXRzLCBiaXRzLAogCQkJCXdpZHRoKnAtPnZhci5iaXRzX3Blcl9waXhlbCk7CiAJCX0KIAl9IGVsc2UgewogCQl3aGlsZSAoaGVpZ2h0LS0pIHsKLQkJCWRzdCArPSBkc3RfaWR4ID4+IChmZnMoYml0cykgLSAxKTsKLQkJCWRzdF9pZHggJj0gKGJ5dGVzIC0gMSk7Ci0JCQlzcmMgKz0gc3JjX2lkeCA+PiAoZmZzKGJpdHMpIC0gMSk7Ci0JCQlzcmNfaWR4ICY9IChieXRlcyAtIDEpOwotCQkJYml0Y3B5KHAsIGRzdCwgZHN0X2lkeCwgc3JjLCBzcmNfaWR4LCBiaXRzLAorCQkJYml0Y3B5KHAsIGJhc2UgKyAoZHN0X2lkeCAvIGJpdHMpLCBkc3RfaWR4ICUgYml0cywKKwkJCQliYXNlICsgKHNyY19pZHggLyBiaXRzKSwgc3JjX2lkeCAlIGJpdHMsIGJpdHMsCiAJCQkJd2lkdGgqcC0+dmFyLmJpdHNfcGVyX3BpeGVsKTsKIAkJCWRzdF9pZHggKz0gYml0c19wZXJfbGluZTsKIAkJCXNyY19pZHggKz0gYml0c19wZXJfbGluZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvZ2VvZGUvZ3gxZmJfY29yZS5jIGIvZHJpdmVycy92aWRlby9mYmRldi9nZW9kZS9neDFmYl9jb3JlLmMKaW5kZXggMjc5NGJhMS4uOWJlZTg3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9nZW9kZS9neDFmYl9jb3JlLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9nZW9kZS9neDFmYl9jb3JlLmMKQEAgLTM3NCwxMCArMzc0LDggQEAKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKGd4MV9neF9iYXNlKCkgKyAweDgzMDAsIDB4MTAwKTsKIAl9CiAKLQlpZiAoaW5mbykgewotCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwotCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwotCX0KKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9nZW9kZS9neGZiX2NvcmUuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvZ2VvZGUvZ3hmYl9jb3JlLmMKaW5kZXggMTc5MGYxNC4uMTI0ZDdjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9nZW9kZS9neGZiX2NvcmUuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2dlb2RlL2d4ZmJfY29yZS5jCkBAIC00NDQsMTAgKzQ0NCw4IEBACiAJCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAxKTsKIAl9CiAKLQlpZiAoaW5mbykgewotCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwotCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwotCX0KKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9nZW9kZS9seGZiX2NvcmUuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvZ2VvZGUvbHhmYl9jb3JlLmMKaW5kZXggOWUxZDE5ZC4uMTM4ZGE2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9nZW9kZS9seGZiX2NvcmUuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2dlb2RlL2x4ZmJfY29yZS5jCkBAIC01NzcsMTAgKzU3Nyw4IEBACiAJCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAzKTsKIAl9CiAKLQlpZiAoaW5mbykgewotCQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwotCQlmcmFtZWJ1ZmZlcl9yZWxlYXNlKGluZm8pOwotCX0KKwlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOworCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9oZ2FmYi5jIGIvZHJpdmVycy92aWRlby9mYmRldi9oZ2FmYi5jCmluZGV4IDVmZjlmZTIuLjE1ZDNjY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvaGdhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L2hnYWZiLmMKQEAgLTQxNyw4ICs0MTcsNyBAQAogCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlpZiAodmFyLT52bW9kZSAmIEZCX1ZNT0RFX1lXUkFQKSB7Ci0JCWlmICh2YXItPnlvZmZzZXQgPCAwIHx8IAotCQkgICAgdmFyLT55b2Zmc2V0ID49IGluZm8tPnZhci55cmVzX3ZpcnR1YWwgfHwKKwkJaWYgKHZhci0+eW9mZnNldCA+PSBpbmZvLT52YXIueXJlc192aXJ0dWFsIHx8CiAJCSAgICB2YXItPnhvZmZzZXQpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9tbXAvTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L21tcC9NYWtlZmlsZQppbmRleCBhMDE0Y2IzLi45MjRkZDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L21tcC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L21tcC9NYWtlZmlsZQpAQCAtMSArMSwzIEBACi1vYmoteSArPSBjb3JlLm8gaHcvIHBhbmVsLyBmYi8KK29iai0kKENPTkZJR19NTVBfRElTUCkgKz0gbW1wX2Rpc3AubyBody8gcGFuZWwvIGZiLworCittbXBfZGlzcC15CQkrPSBjb3JlLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvbW1wL2ZiL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L21tcC9mYi9LY29uZmlnCmluZGV4IDliMDE0MWYuLjk4NWUxYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvbW1wL2ZiL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9tbXAvZmIvS2NvbmZpZwpAQCAtMSw3ICsxLDcgQEAKIGlmIE1NUF9ESVNQCiAKIGNvbmZpZyBNTVBfRkIKLQlib29sICJmYiBkcml2ZXIgZm9yIE1hcnZlbGwgTU1QIERpc3BsYXkgU3Vic3lzdGVtIgorCXRyaXN0YXRlICJmYiBkcml2ZXIgZm9yIE1hcnZlbGwgTU1QIERpc3BsYXkgU3Vic3lzdGVtIgogCWRlcGVuZHMgb24gRkIKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9vY2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29jZmIuYwppbmRleCA3ZjlkYzliLi5kZTk4MTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29jZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29jZmIuYwpAQCAtNjEsNyArNjEsNyBAQAogCS8qIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZWdzIGFyZSBsaXR0bGUgZW5kaWFuIGFjY2Vzc2VkICovCiAJaW50IGxpdHRsZV9lbmRpYW47CiAJLyogUGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzc2VzIG9mIGZyYW1lYnVmZmVyICovCi0JcGh5c19hZGRyX3QgZmJfcGh5czsKKwlkbWFfYWRkcl90IGZiX3BoeXM7CiAJdm9pZCBfX2lvbWVtICpmYl92aXJ0OwogCXUzMiBwc2V1ZG9fcGFsZXR0ZVtQQUxFVFRFX1NJWkVdOwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZGlzcGxheXMtbmV3L0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rpc3BsYXlzLW5ldy9LY29uZmlnCmluZGV4IGU2Y2ZjMzguLjU3NDcxMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZGlzcGxheXMtbmV3L0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kaXNwbGF5cy1uZXcvS2NvbmZpZwpAQCAtMSw2ICsxLDEyIEBACiBtZW51ICJPTUFQIERpc3BsYXkgRGV2aWNlIERyaXZlcnMgKG5ldyBkZXZpY2UgbW9kZWwpIgogICAgICAgICBkZXBlbmRzIG9uIE9NQVAyX0RTUwogCitjb25maWcgRElTUExBWV9FTkNPREVSX09QQTM2MgorCXRyaXN0YXRlICJPUEEzNjIgZXh0ZXJuYWwgYW5hbG9nIGFtcGxpZmllciIKKwloZWxwCisJICBEcml2ZXIgZm9yIE9QQTM2MiBleHRlcm5hbCBhbmFsb2cgVFYgYW1wbGlmaWVyIGNvbnRyb2xsZWQKKwkgIHRocm91Z2ggYSBHUElPLgorCiBjb25maWcgRElTUExBWV9FTkNPREVSX1RGUDQxMAogICAgICAgICB0cmlzdGF0ZSAiVEZQNDEwIERQSSB0byBEVkkgRW5jb2RlciIKIAloZWxwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rpc3BsYXlzLW5ldy9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZGlzcGxheXMtbmV3L01ha2VmaWxlCmluZGV4IDAzMjNhOGEuLjlhYTE3NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZGlzcGxheXMtbmV3L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZGlzcGxheXMtbmV3L01ha2VmaWxlCkBAIC0xLDMgKzEsNCBAQAorb2JqLSQoQ09ORklHX0RJU1BMQVlfRU5DT0RFUl9PUEEzNjIpICs9IGVuY29kZXItb3BhMzYyLm8KIG9iai0kKENPTkZJR19ESVNQTEFZX0VOQ09ERVJfVEZQNDEwKSArPSBlbmNvZGVyLXRmcDQxMC5vCiBvYmotJChDT05GSUdfRElTUExBWV9FTkNPREVSX1RQRDEyUzAxNSkgKz0gZW5jb2Rlci10cGQxMnMwMTUubwogb2JqLSQoQ09ORklHX0RJU1BMQVlfQ09OTkVDVE9SX0RWSSkgKz0gY29ubmVjdG9yLWR2aS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rpc3BsYXlzLW5ldy9jb25uZWN0b3ItYW5hbG9nLXR2LmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rpc3BsYXlzLW5ldy9jb25uZWN0b3ItYW5hbG9nLXR2LmMKaW5kZXggOWEyYjVjZS4uODUxMWM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kaXNwbGF5cy1uZXcvY29ubmVjdG9yLWFuYWxvZy10di5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZGlzcGxheXMtbmV3L2Nvbm5lY3Rvci1hbmFsb2ctdHYuYwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJZGRhdGEtPmluID0gaW47CiAKIAlkZGF0YS0+Y29ubmVjdG9yX3R5cGUgPSBwZGF0YS0+Y29ubmVjdG9yX3R5cGU7Ci0JZGRhdGEtPmludmVydF9wb2xhcml0eSA9IGRkYXRhLT5pbnZlcnRfcG9sYXJpdHk7CisJZGRhdGEtPmludmVydF9wb2xhcml0eSA9IHBkYXRhLT5pbnZlcnRfcG9sYXJpdHk7CiAKIAlkc3NkZXYgPSAmZGRhdGEtPmRzc2RldjsKIAlkc3NkZXYtPm5hbWUgPSBwZGF0YS0+bmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZGlzcGxheXMtbmV3L2VuY29kZXItb3BhMzYyLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rpc3BsYXlzLW5ldy9lbmNvZGVyLW9wYTM2Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YTZiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rpc3BsYXlzLW5ldy9lbmNvZGVyLW9wYTM2Mi5jCkBAIC0wLDAgKzEsMjg1IEBACisvKgorICogT1BBMzYyIGFuYWxvZyB2aWRlbyBhbXBsaWZpZXIgd2l0aCBvdXRwdXQvcG93ZXIgY29udHJvbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBHb2xkZW4gRGVsaWNpb3VzIENvbXB1dGVycworICogQXV0aG9yOiBILiBOaWtvbGF1cyBTY2hhbGxlciA8aG5zQGdvbGRlbGljby5jb20+CisgKgorICogYmFzZWQgb24gZW5jb2Rlci10ZnA0MTAKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgVGV4YXMgSW5zdHJ1bWVudHMKKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQHRpLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KKworI2luY2x1ZGUgPHZpZGVvL29tYXBkc3MuaD4KKworc3RydWN0IHBhbmVsX2Rydl9kYXRhIHsKKwlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlIGRzc2RldjsKKwlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICppbjsKKworCXN0cnVjdCBncGlvX2Rlc2MgKmVuYWJsZV9ncGlvOworCisJc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyB0aW1pbmdzOworfTsKKworI2RlZmluZSB0b19wYW5lbF9kYXRhKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEsIGRzc2RldikKKworc3RhdGljIGludCBvcGEzNjJfY29ubmVjdChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzdCkKK3sKKwlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gdG9fcGFuZWxfZGF0YShkc3NkZXYpOworCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmluID0gZGRhdGEtPmluOworCWludCByOworCisJZGV2X2RiZyhkc3NkZXYtPmRldiwgImNvbm5lY3RcbiIpOworCisJaWYgKG9tYXBkc3NfZGV2aWNlX2lzX2Nvbm5lY3RlZChkc3NkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJciA9IGluLT5vcHMuYXR2LT5jb25uZWN0KGluLCBkc3NkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCWRzdC0+c3JjID0gZHNzZGV2OworCWRzc2Rldi0+ZHN0ID0gZHN0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9wYTM2Ml9kaXNjb25uZWN0KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKKwkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHN0KQoreworCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7CisJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqaW4gPSBkZGF0YS0+aW47CisKKwlkZXZfZGJnKGRzc2Rldi0+ZGV2LCAiZGlzY29ubmVjdFxuIik7CisKKwlXQVJOX09OKCFvbWFwZHNzX2RldmljZV9pc19jb25uZWN0ZWQoZHNzZGV2KSk7CisJaWYgKCFvbWFwZHNzX2RldmljZV9pc19jb25uZWN0ZWQoZHNzZGV2KSkKKwkJcmV0dXJuOworCisJV0FSTl9PTihkc3QgIT0gZHNzZGV2LT5kc3QpOworCWlmIChkc3QgIT0gZHNzZGV2LT5kc3QpCisJCXJldHVybjsKKworCWRzdC0+c3JjID0gTlVMTDsKKwlkc3NkZXYtPmRzdCA9IE5VTEw7CisKKwlpbi0+b3BzLmF0di0+ZGlzY29ubmVjdChpbiwgJmRkYXRhLT5kc3NkZXYpOworfQorCitzdGF0aWMgaW50IG9wYTM2Ml9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7CisJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqaW4gPSBkZGF0YS0+aW47CisJaW50IHI7CisKKwlkZXZfZGJnKGRzc2Rldi0+ZGV2LCAiZW5hYmxlXG4iKTsKKworCWlmICghb21hcGRzc19kZXZpY2VfaXNfY29ubmVjdGVkKGRzc2RldikpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKG9tYXBkc3NfZGV2aWNlX2lzX2VuYWJsZWQoZHNzZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlpbi0+b3BzLmF0di0+c2V0X3RpbWluZ3MoaW4sICZkZGF0YS0+dGltaW5ncyk7CisKKwlyID0gaW4tPm9wcy5hdHYtPmVuYWJsZShpbik7CisJaWYgKHIpCisJCXJldHVybiByOworCisJaWYgKGRkYXRhLT5lbmFibGVfZ3BpbykKKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGRkYXRhLT5lbmFibGVfZ3BpbywgMSk7CisKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb3BhMzYyX2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7CisJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqaW4gPSBkZGF0YS0+aW47CisKKwlkZXZfZGJnKGRzc2Rldi0+ZGV2LCAiZGlzYWJsZVxuIik7CisKKwlpZiAoIW9tYXBkc3NfZGV2aWNlX2lzX2VuYWJsZWQoZHNzZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKGRkYXRhLT5lbmFibGVfZ3BpbykKKwkJZ3Bpb2Rfc2V0X3ZhbHVlX2NhbnNsZWVwKGRkYXRhLT5lbmFibGVfZ3BpbywgMCk7CisKKwlpbi0+b3BzLmF0di0+ZGlzYWJsZShpbik7CisKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRDsKK30KKworc3RhdGljIHZvaWQgb3BhMzYyX3NldF90aW1pbmdzKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKKwkJc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyAqdGltaW5ncykKK3sKKwlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gdG9fcGFuZWxfZGF0YShkc3NkZXYpOworCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmluID0gZGRhdGEtPmluOworCisJZGV2X2RiZyhkc3NkZXYtPmRldiwgInNldF90aW1pbmdzXG4iKTsKKworCWRkYXRhLT50aW1pbmdzID0gKnRpbWluZ3M7CisJZHNzZGV2LT5wYW5lbC50aW1pbmdzID0gKnRpbWluZ3M7CisKKwlpbi0+b3BzLmF0di0+c2V0X3RpbWluZ3MoaW4sIHRpbWluZ3MpOworfQorCitzdGF0aWMgdm9pZCBvcGEzNjJfZ2V0X3RpbWluZ3Moc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAorCQlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzICp0aW1pbmdzKQoreworCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSB0b19wYW5lbF9kYXRhKGRzc2Rldik7CisKKwlkZXZfZGJnKGRzc2Rldi0+ZGV2LCAiZ2V0X3RpbWluZ3NcbiIpOworCisJKnRpbWluZ3MgPSBkZGF0YS0+dGltaW5nczsKK30KKworc3RhdGljIGludCBvcGEzNjJfY2hlY2tfdGltaW5ncyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCXN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgKnRpbWluZ3MpCit7CisJc3RydWN0IHBhbmVsX2Rydl9kYXRhICpkZGF0YSA9IHRvX3BhbmVsX2RhdGEoZHNzZGV2KTsKKwlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICppbiA9IGRkYXRhLT5pbjsKKworCWRldl9kYmcoZHNzZGV2LT5kZXYsICJjaGVja190aW1pbmdzXG4iKTsKKworCXJldHVybiBpbi0+b3BzLmF0di0+Y2hlY2tfdGltaW5ncyhpbiwgdGltaW5ncyk7Cit9CisKK3N0YXRpYyB2b2lkIG9wYTM2Ml9zZXRfdHlwZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCWVudW0gb21hcF9kc3NfdmVuY190eXBlIHR5cGUpCit7CisJLyogd2UgY2FuIG9ubHkgZHJpdmUgYSBDT01QT1NJVEUgb3V0cHV0ICovCisJV0FSTl9PTih0eXBlICE9IE9NQVBfRFNTX1ZFTkNfVFlQRV9DT01QT1NJVEUpOworCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb21hcGRzc19hdHZfb3BzIG9wYTM2Ml9hdHZfb3BzID0geworCS5jb25uZWN0CT0gb3BhMzYyX2Nvbm5lY3QsCisJLmRpc2Nvbm5lY3QJPSBvcGEzNjJfZGlzY29ubmVjdCwKKworCS5lbmFibGUJCT0gb3BhMzYyX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG9wYTM2Ml9kaXNhYmxlLAorCisJLmNoZWNrX3RpbWluZ3MJPSBvcGEzNjJfY2hlY2tfdGltaW5ncywKKwkuc2V0X3RpbWluZ3MJPSBvcGEzNjJfc2V0X3RpbWluZ3MsCisJLmdldF90aW1pbmdzCT0gb3BhMzYyX2dldF90aW1pbmdzLAorCisJLnNldF90eXBlCT0gb3BhMzYyX3NldF90eXBlLAorfTsKKworc3RhdGljIGludCBvcGEzNjJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwZGV2LT5kZXYub2Zfbm9kZTsKKwlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhOworCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgKmluOworCXN0cnVjdCBncGlvX2Rlc2MgKmdwaW87CisJaW50IHI7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJwcm9iZVxuIik7CisKKwlpZiAobm9kZSA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBmaW5kIGRldmljZSB0cmVlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGRhdGEgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGRhdGEpOworCisJZ3BpbyA9IGRldm1fZ3Bpb2RfZ2V0KCZwZGV2LT5kZXYsICJlbmFibGUiKTsKKwlpZiAoSVNfRVJSKGdwaW8pKSB7CisJCWlmIChQVFJfRVJSKGdwaW8pICE9IC1FTk9FTlQpCisJCQlyZXR1cm4gUFRSX0VSUihncGlvKTsKKworCQlncGlvID0gTlVMTDsKKwl9IGVsc2UgeworCQlncGlvZF9kaXJlY3Rpb25fb3V0cHV0KGdwaW8sIDApOworCX0KKworCWRkYXRhLT5lbmFibGVfZ3BpbyA9IGdwaW87CisKKwlpbiA9IG9tYXBkc3Nfb2ZfZmluZF9zb3VyY2VfZm9yX2ZpcnN0X2VwKG5vZGUpOworCWlmIChJU19FUlIoaW4pKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBmaW5kIHZpZGVvIHNvdXJjZVxuIik7CisJCXJldHVybiBQVFJfRVJSKGluKTsKKwl9CisKKwlkZGF0YS0+aW4gPSBpbjsKKworCWRzc2RldiA9ICZkZGF0YS0+ZHNzZGV2OworCWRzc2Rldi0+b3BzLmF0diA9ICZvcGEzNjJfYXR2X29wczsKKwlkc3NkZXYtPmRldiA9ICZwZGV2LT5kZXY7CisJZHNzZGV2LT50eXBlID0gT01BUF9ESVNQTEFZX1RZUEVfVkVOQzsKKwlkc3NkZXYtPm91dHB1dF90eXBlID0gT01BUF9ESVNQTEFZX1RZUEVfVkVOQzsKKwlkc3NkZXYtPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwlyID0gb21hcGRzc19yZWdpc3Rlcl9vdXRwdXQoZHNzZGV2KTsKKwlpZiAocikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgb3V0cHV0XG4iKTsKKwkJZ290byBlcnJfcmVnOworCX0KKworCXJldHVybiAwOworZXJyX3JlZzoKKwlvbWFwX2Rzc19wdXRfZGV2aWNlKGRkYXRhLT5pbik7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyBpbnQgX19leGl0IG9wYTM2Ml9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2ID0gJmRkYXRhLT5kc3NkZXY7CisJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqaW4gPSBkZGF0YS0+aW47CisKKwlvbWFwZHNzX3VucmVnaXN0ZXJfb3V0cHV0KCZkZGF0YS0+ZHNzZGV2KTsKKworCVdBUk5fT04ob21hcGRzc19kZXZpY2VfaXNfZW5hYmxlZChkc3NkZXYpKTsKKwlpZiAob21hcGRzc19kZXZpY2VfaXNfZW5hYmxlZChkc3NkZXYpKQorCQlvcGEzNjJfZGlzYWJsZShkc3NkZXYpOworCisJV0FSTl9PTihvbWFwZHNzX2RldmljZV9pc19jb25uZWN0ZWQoZHNzZGV2KSk7CisJaWYgKG9tYXBkc3NfZGV2aWNlX2lzX2Nvbm5lY3RlZChkc3NkZXYpKQorCQlvcGEzNjJfZGlzY29ubmVjdChkc3NkZXYsIGRzc2Rldi0+ZHN0KTsKKworCW9tYXBfZHNzX3B1dF9kZXZpY2UoaW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9wYTM2Ml9vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAib21hcGRzcyx0aSxvcGEzNjIiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG9wYTM2Ml9vZl9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9wYTM2Ml9kcml2ZXIgPSB7CisJLnByb2JlCT0gb3BhMzYyX3Byb2JlLAorCS5yZW1vdmUJPSBfX2V4aXRfcChvcGEzNjJfcmVtb3ZlKSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJhbXBsaWZpZXItb3BhMzYyIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9wYTM2Ml9vZl9tYXRjaCwKKwkJLnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVlLAorCX0sCit9OworCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG9wYTM2Ml9kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJILiBOaWtvbGF1cyBTY2hhbGxlciA8aG5zQGdvbGRlbGljby5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk9QQTM2MiBhbmFsb2cgdmlkZW8gYW1wbGlmaWVyIHdpdGggb3V0cHV0L3Bvd2VyIGNvbnRyb2wiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZGlzcGxheXMtbmV3L2VuY29kZXItdHBkMTJzMDE1LmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rpc3BsYXlzLW5ldy9lbmNvZGVyLXRwZDEyczAxNS5jCmluZGV4IDdmM2UxMWIuLjk5MGFmNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZGlzcGxheXMtbmV3L2VuY29kZXItdHBkMTJzMDE1LmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kaXNwbGF5cy1uZXcvZW5jb2Rlci10cGQxMnMwMTUuYwpAQCAtMjksMzMgKzI5LDEwIEBACiAJaW50IGhwZF9ncGlvOwogCiAJc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyB0aW1pbmdzOwotCi0Jc3RydWN0IGNvbXBsZXRpb24gaHBkX2NvbXBsZXRpb247CiB9OwogCiAjZGVmaW5lIHRvX3BhbmVsX2RhdGEoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBwYW5lbF9kcnZfZGF0YSwgZHNzZGV2KQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgdHBkX2hwZF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBwYW5lbF9kcnZfZGF0YSAqZGRhdGEgPSBkYXRhOwotCWJvb2wgaHBkOwotCi0JaHBkID0gZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAoZGRhdGEtPmhwZF9ncGlvKTsKLQotCWRldl9kYmcoZGRhdGEtPmRzc2Rldi5kZXYsICJocGQgJWRcbiIsIGhwZCk7Ci0KLQlpZiAoZ3Bpb19pc192YWxpZChkZGF0YS0+bHNfb2VfZ3BpbykpIHsKLQkJaWYgKGhwZCkKLQkJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGRkYXRhLT5sc19vZV9ncGlvLCAxKTsKLQkJZWxzZQotCQkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoZGRhdGEtPmxzX29lX2dwaW8sIDApOwotCX0KLQotCWNvbXBsZXRlX2FsbCgmZGRhdGEtPmhwZF9jb21wbGV0aW9uKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQogc3RhdGljIGludCB0cGRfY29ubmVjdChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCiAJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzdCkKIHsKQEAgLTcwLDIzICs0NywxMCBAQAogCWRzdC0+c3JjID0gZHNzZGV2OwogCWRzc2Rldi0+ZHN0ID0gZHN0OwogCi0JcmVpbml0X2NvbXBsZXRpb24oJmRkYXRhLT5ocGRfY29tcGxldGlvbik7Ci0KIAlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChkZGF0YS0+Y3RfY3BfaHBkX2dwaW8sIDEpOwogCS8qIERDLURDIGNvbnZlcnRlciBuZWVkcyBhdCBtYXggMzAwdXMgdG8gZ2V0IHRvIDkwJSBvZiA1ViAqLwogCXVkZWxheSgzMDApOwogCi0JLyoKLQkgKiBJZiB0aGVyZSdzIGEgY2FibGUgY29ubmVjdGVkLCB3YWl0IGZvciB0aGUgaHBkIGlycSB0byB0cmlnZ2VyLAotCSAqIHdoaWNoIHR1cm5zIG9uIHRoZSBsZXZlbCBzaGlmdGVycy4KLQkgKi8KLQlpZiAoZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAoZGRhdGEtPmhwZF9ncGlvKSkgewotCQl1bnNpZ25lZCBsb25nIHRvOwotCQl0byA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmZGRhdGEtPmhwZF9jb21wbGV0aW9uLAotCQkJCW1zZWNzX3RvX2ppZmZpZXMoMjUwKSk7Ci0JCVdBUk5fT05fT05DRSh0byA9PSAwKTsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc5LDExICsxNDMsMjAgQEAKIHsKIAlzdHJ1Y3QgcGFuZWxfZHJ2X2RhdGEgKmRkYXRhID0gdG9fcGFuZWxfZGF0YShkc3NkZXYpOwogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmluID0gZGRhdGEtPmluOworCWludCByOwogCiAJaWYgKCFncGlvX2dldF92YWx1ZV9jYW5zbGVlcChkZGF0YS0+aHBkX2dwaW8pKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBpbi0+b3BzLmhkbWktPnJlYWRfZWRpZChpbiwgZWRpZCwgbGVuKTsKKwlpZiAoZ3Bpb19pc192YWxpZChkZGF0YS0+bHNfb2VfZ3BpbykpCisJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGRkYXRhLT5sc19vZV9ncGlvLCAxKTsKKworCXIgPSBpbi0+b3BzLmhkbWktPnJlYWRfZWRpZChpbiwgZWRpZCwgbGVuKTsKKworCWlmIChncGlvX2lzX3ZhbGlkKGRkYXRhLT5sc19vZV9ncGlvKSkKKwkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoZGRhdGEtPmxzX29lX2dwaW8sIDApOworCisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBib29sIHRwZF9kZXRlY3Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQpAQCAtMzA5LDggKzI4Miw2IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZGF0YSk7CiAKLQlpbml0X2NvbXBsZXRpb24oJmRkYXRhLT5ocGRfY29tcGxldGlvbik7Ci0KIAlpZiAoZGV2X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KSkgewogCQlyID0gdHBkX3Byb2JlX3BkYXRhKHBkZXYpOwogCQlpZiAocikKQEAgLTM0MCwxMyArMzExLDYgQEAKIAlpZiAocikKIAkJZ290byBlcnJfZ3BpbzsKIAotCXIgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZwZGV2LT5kZXYsIGdwaW9fdG9faXJxKGRkYXRhLT5ocGRfZ3BpbyksCi0JCQkJIE5VTEwsIHRwZF9ocGRfaXJxX2hhbmRsZXIsCi0JCQkJIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORyB8Ci0JCQkJIElSUUZfT05FU0hPVCwgImhwZCIsIGRkYXRhKTsKLQlpZiAocikKLQkJZ290byBlcnJfaXJxOwotCiAJZHNzZGV2ID0gJmRkYXRhLT5kc3NkZXY7CiAJZHNzZGV2LT5vcHMuaGRtaSA9ICZ0cGRfaGRtaV9vcHM7CiAJZHNzZGV2LT5kZXYgPSAmcGRldi0+ZGV2OwpAQCAtMzY1LDcgKzMyOSw2IEBACiAKIAlyZXR1cm4gMDsKIGVycl9yZWc6Ci1lcnJfaXJxOgogZXJyX2dwaW86CiAJb21hcF9kc3NfcHV0X2RldmljZShkZGF0YS0+aW4pOwogCXJldHVybiByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9NYWtlZmlsZQppbmRleCAyZWE5ZDM4Li5iNTEzNmQzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvTWFrZWZpbGUKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvTWFrZWZpbGUKQEAgLTIsNyArMiw3IEBACiBvYmotJChDT05GSUdfT01BUDJfRFNTKSArPSBvbWFwZHNzLm8KICMgQ29yZSBEU1MgZmlsZXMKIG9tYXBkc3MteSA6PSBjb3JlLm8gZHNzLm8gZHNzX2ZlYXR1cmVzLm8gZGlzcGMubyBkaXNwY19jb2Vmcy5vIGRpc3BsYXkubyBcCi0Jb3V0cHV0Lm8gZHNzLW9mLm8gcGxsLm8KKwlvdXRwdXQubyBkc3Mtb2YubyBwbGwubyB2aWRlby1wbGwubwogIyBEU1MgY29tcGF0IGxheWVyIGZpbGVzCiBvbWFwZHNzLXkgKz0gbWFuYWdlci5vIG1hbmFnZXItc3lzZnMubyBvdmVybGF5Lm8gb3ZlcmxheS1zeXNmcy5vIGFwcGx5Lm8gXAogCWRpc3BjLWNvbXBhdC5vIGRpc3BsYXktc3lzZnMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvZGlzcGMuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2Rpc3BjLmMKaW5kZXggOTg1MGQ5ZS4uMzFiNzQzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvZGlzcGMuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9kaXNwYy5jCkBAIC0zNiw2ICszNiw5IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpemVzLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAKICNpbmNsdWRlIDx2aWRlby9vbWFwZHNzLmg+CiAKQEAgLTExNyw2ICsxMjAsOSBAQAogCWNvbnN0IHN0cnVjdCBkaXNwY19mZWF0dXJlcyAqZmVhdDsKIAogCWJvb2wgaXNfZW5hYmxlZDsKKworCXN0cnVjdCByZWdtYXAgKnN5c2Nvbl9wb2w7CisJdTMyIHN5c2Nvbl9wb2xfb2Zmc2V0OwogfSBkaXNwYzsKIAogZW51bSBvbWFwX2NvbG9yX2NvbXBvbmVudCB7CkBAIC0yOTU4LDYgKzI5NjQsMjUgQEAKIAkJRkxEX1ZBTCh2c3luY19sZXZlbCwgMTIsIDEyKTsKIAogCWRpc3BjX3dyaXRlX3JlZyhESVNQQ19QT0xfRlJFUShjaGFubmVsKSwgbCk7CisKKwlpZiAoZGlzcGMuc3lzY29uX3BvbCkgeworCQljb25zdCBpbnQgc2hpZnRzW10gPSB7CisJCQlbT01BUF9EU1NfQ0hBTk5FTF9MQ0RdID0gMCwKKwkJCVtPTUFQX0RTU19DSEFOTkVMX0xDRDJdID0gMSwKKwkJCVtPTUFQX0RTU19DSEFOTkVMX0xDRDNdID0gMiwKKwkJfTsKKworCQl1MzIgbWFzaywgdmFsOworCisJCW1hc2sgPSAoMSA8PCAwKSB8ICgxIDw8IDMpIHwgKDEgPDwgNik7CisJCXZhbCA9IChyZiA8PCAwKSB8IChpcGMgPDwgMykgfCAob25vZmYgPDwgNik7CisKKwkJbWFzayA8PD0gMTYgKyBzaGlmdHNbY2hhbm5lbF07CisJCXZhbCA8PD0gMTYgKyBzaGlmdHNbY2hhbm5lbF07CisKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGRpc3BjLnN5c2Nvbl9wb2wsIGRpc3BjLnN5c2Nvbl9wb2xfb2Zmc2V0LAorCQkJbWFzaywgdmFsKTsKKwl9CiB9CiAKIC8qIGNoYW5nZSBuYW1lIHRvIG1vZGU/ICovCkBAIC0zMDM3LDEwICszMDYyLDE2IEBACiAJCWJyZWFrOwogCWNhc2UgT01BUF9EU1NfQ0xLX1NSQ19EU0lfUExMX0hTRElWX0RJU1BDOgogCQlwbGwgPSBkc3NfcGxsX2ZpbmQoImRzaTAiKTsKKwkJaWYgKCFwbGwpCisJCQlwbGwgPSBkc3NfcGxsX2ZpbmQoInZpZGVvMCIpOworCiAJCXIgPSBwbGwtPmNpbmZvLmNsa291dFswXTsKIAkJYnJlYWs7CiAJY2FzZSBPTUFQX0RTU19DTEtfU1JDX0RTSTJfUExMX0hTRElWX0RJU1BDOgogCQlwbGwgPSBkc3NfcGxsX2ZpbmQoImRzaTEiKTsKKwkJaWYgKCFwbGwpCisJCQlwbGwgPSBkc3NfcGxsX2ZpbmQoInZpZGVvMSIpOworCiAJCXIgPSBwbGwtPmNpbmZvLmNsa291dFswXTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTMwNjksMTAgKzMxMDAsMTYgQEAKIAkJCWJyZWFrOwogCQljYXNlIE9NQVBfRFNTX0NMS19TUkNfRFNJX1BMTF9IU0RJVl9ESVNQQzoKIAkJCXBsbCA9IGRzc19wbGxfZmluZCgiZHNpMCIpOworCQkJaWYgKCFwbGwpCisJCQkJcGxsID0gZHNzX3BsbF9maW5kKCJ2aWRlbzAiKTsKKwogCQkJciA9IHBsbC0+Y2luZm8uY2xrb3V0WzBdOwogCQkJYnJlYWs7CiAJCWNhc2UgT01BUF9EU1NfQ0xLX1NSQ19EU0kyX1BMTF9IU0RJVl9ESVNQQzoKIAkJCXBsbCA9IGRzc19wbGxfZmluZCgiZHNpMSIpOworCQkJaWYgKCFwbGwpCisJCQkJcGxsID0gZHNzX3BsbF9maW5kKCJ2aWRlbzEiKTsKKwogCQkJciA9IHBsbC0+Y2luZm8uY2xrb3V0WzBdOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC0zNjY4LDYgKzM3MDUsNyBAQAogCQlicmVhazsKIAogCWNhc2UgT01BUERTU19WRVJfT01BUDU6CisJY2FzZSBPTUFQRFNTX1ZFUl9EUkE3eHg6CiAJCXNyYyA9ICZvbWFwNTR4eF9kaXNwY19mZWF0czsKIAkJYnJlYWs7CiAKQEAgLTM3MjgsNiArMzc2Niw3IEBACiAJdTMyIHJldjsKIAlpbnQgciA9IDA7CiAJc3RydWN0IHJlc291cmNlICpkaXNwY19tZW07CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOwogCiAJZGlzcGMucGRldiA9IHBkZXY7CiAKQEAgLTM3NTQsNiArMzc5MywyMCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlpZiAobnAgJiYgb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAic3lzY29uLXBvbCIpKSB7CisJCWRpc3BjLnN5c2Nvbl9wb2wgPSBzeXNjb25fcmVnbWFwX2xvb2t1cF9ieV9waGFuZGxlKG5wLCAic3lzY29uLXBvbCIpOworCQlpZiAoSVNfRVJSKGRpc3BjLnN5c2Nvbl9wb2wpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHN5c2Nvbi1wb2wgcmVnbWFwXG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKGRpc3BjLnN5c2Nvbl9wb2wpOworCQl9CisKKwkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG5wLCAic3lzY29uLXBvbCIsIDEsCisJCQkJJmRpc3BjLnN5c2Nvbl9wb2xfb2Zmc2V0KSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBzeXNjb24tcG9sIG9mZnNldFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwogCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOwogCiAJciA9IGRpc3BjX3J1bnRpbWVfZ2V0KCk7CkBAIC0zODMyLDYgKzM4ODUsNyBAQAogCXsgLmNvbXBhdGlibGUgPSAidGksb21hcDMtZGlzcGMiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAidGksb21hcDQtZGlzcGMiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAidGksb21hcDUtZGlzcGMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAidGksZHJhNy1kaXNwYyIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9kcGkuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2RwaS5jCmluZGV4IDlhMmY4YzMuLmY4M2U3YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2RwaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2RwaS5jCkBAIC0xMDYsNiArMTA2LDE3IEBACiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCisJY2FzZSBPTUFQRFNTX1ZFUl9EUkE3eHg6CisJCXN3aXRjaCAoY2hhbm5lbCkgeworCQljYXNlIE9NQVBfRFNTX0NIQU5ORUxfTENEOgorCQljYXNlIE9NQVBfRFNTX0NIQU5ORUxfTENEMjoKKwkJCXJldHVybiBkc3NfcGxsX2ZpbmQoInZpZGVvMCIpOworCQljYXNlIE9NQVBfRFNTX0NIQU5ORUxfTENEMzoKKwkJCXJldHVybiBkc3NfcGxsX2ZpbmQoInZpZGVvMSIpOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIE5VTEw7CisJCX0KKwogCWRlZmF1bHQ6CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTU5MCw2ICs2MDEsMTAgQEAKIAlpZiAoIXBsbCkKIAkJcmV0dXJuOwogCisJLyogT24gRFJBNyB3ZSBuZWVkIHRvIHNldCBhIG11eCB0byB1c2UgdGhlIFBMTCAqLworCWlmIChvbWFwZHNzX2dldF92ZXJzaW9uKCkgPT0gT01BUERTU19WRVJfRFJBN3h4KQorCQlkc3NfY3RybF9wbGxfc2V0X2NvbnRyb2xfbXV4KHBsbC0+aWQsIGRwaS0+b3V0cHV0LmRpc3BjX2NoYW5uZWwpOworCiAJaWYgKGRwaV92ZXJpZnlfZHNpX3BsbChwbGwpKSB7CiAJCURTU1dBUk4oIkRTSSBQTEwgbm90IG9wZXJhdGlvbmFsXG4iKTsKIAkJcmV0dXJuOwpAQCAtNjE1LDYgKzYzMCwxNyBAQAogCWNhc2UgT01BUERTU19WRVJfQU00M3h4OgogCQlyZXR1cm4gT01BUF9EU1NfQ0hBTk5FTF9MQ0Q7CiAKKwljYXNlIE9NQVBEU1NfVkVSX0RSQTd4eDoKKwkJc3dpdGNoIChwb3J0X251bSkgeworCQljYXNlIDI6CisJCQlyZXR1cm4gT01BUF9EU1NfQ0hBTk5FTF9MQ0QzOworCQljYXNlIDE6CisJCQlyZXR1cm4gT01BUF9EU1NfQ0hBTk5FTF9MQ0QyOworCQljYXNlIDA6CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gT01BUF9EU1NfQ0hBTk5FTF9MQ0Q7CisJCX0KKwogCWNhc2UgT01BUERTU19WRVJfT01BUDQ0MzBfRVMxOgogCWNhc2UgT01BUERTU19WRVJfT01BUDQ0MzBfRVMyOgogCWNhc2UgT01BUERTU19WRVJfT01BUDQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9kc2kuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2RzaS5jCmluZGV4IDNlNDRjNTguLjUwODFmNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2RzaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2RzaS5jCkBAIC01MjM4LDYgKzUyMzgsNyBAQAogCX0KIAogCXBsbC0+bmFtZSA9IGRzaS0+bW9kdWxlX2lkID09IDAgPyAiZHNpMCIgOiAiZHNpMSI7CisJcGxsLT5pZCA9IGRzaS0+bW9kdWxlX2lkID09IDAgPyBEU1NfUExMX0RTSTEgOiBEU1NfUExMX0RTSTI7CiAJcGxsLT5jbGtpbiA9IGNsazsKIAlwbGwtPmJhc2UgPSBkc2ktPnBsbF9iYXNlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9kc3MuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2Rzcy5jCmluZGV4IDk5ODcxNTQuLmE2ZDEwZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2Rzcy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2Rzcy5jCkBAIC0zNCw3ICszNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9zaXplcy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAjaW5jbHVkZSA8dmlkZW8vb21hcGRzcy5oPgogCkBAIC02MywxNCArNjYsMTEgQEAKICNkZWZpbmUgUkVHX0ZMRF9NT0QoaWR4LCB2YWwsIHN0YXJ0LCBlbmQpIFwKIAlkc3Nfd3JpdGVfcmVnKGlkeCwgRkxEX01PRChkc3NfcmVhZF9yZWcoaWR4KSwgdmFsLCBzdGFydCwgZW5kKSkKIAotc3RhdGljIGludCBkc3NfcnVudGltZV9nZXQodm9pZCk7Ci1zdGF0aWMgdm9pZCBkc3NfcnVudGltZV9wdXQodm9pZCk7Ci0KIHN0cnVjdCBkc3NfZmVhdHVyZXMgewogCXU4IGZja19kaXZfbWF4OwogCXU4IGRzc19mY2tfbXVsdGlwbGllcjsKIAljb25zdCBjaGFyICpwYXJlbnRfY2xrX25hbWU7Ci0JZW51bSBvbWFwX2Rpc3BsYXlfdHlwZSAqcG9ydHM7CisJY29uc3QgZW51bSBvbWFwX2Rpc3BsYXlfdHlwZSAqcG9ydHM7CiAJaW50IG51bV9wb3J0czsKIAlpbnQgKCpkcGlfc2VsZWN0X3NvdXJjZSkoaW50IHBvcnQsIGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwpOwogfTsKQEAgLTc4LDYgKzc4LDggQEAKIHN0YXRpYyBzdHJ1Y3QgewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJdm9pZCBfX2lvbWVtICAgICpiYXNlOworCXN0cnVjdCByZWdtYXAJKnN5c2Nvbl9wbGxfY3RybDsKKwl1MzIJCXN5c2Nvbl9wbGxfY3RybF9vZmZzZXQ7CiAKIAlzdHJ1Y3QgY2xrCSpwYXJlbnRfY2xrOwogCXN0cnVjdCBjbGsJKmRzc19jbGs7CkBAIC05NSw2ICs5Nyw5IEBACiAJdTMyCQljdHhbRFNTX1NaX1JFR1MgLyBzaXplb2YodTMyKV07CiAKIAljb25zdCBzdHJ1Y3QgZHNzX2ZlYXR1cmVzICpmZWF0OworCisJc3RydWN0IGRzc19wbGwJKnZpZGVvMV9wbGw7CisJc3RydWN0IGRzc19wbGwJKnZpZGVvMl9wbGw7CiB9IGRzczsKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkc3NfZ2VuZXJpY19jbGtfc291cmNlX25hbWVzW10gPSB7CkBAIC0xNTgsNiArMTYzLDk5IEBACiAjdW5kZWYgU1IKICN1bmRlZiBSUgogCit2b2lkIGRzc19jdHJsX3BsbF9lbmFibGUoZW51bSBkc3NfcGxsX2lkIHBsbF9pZCwgYm9vbCBlbmFibGUpCit7CisJdW5zaWduZWQgc2hpZnQ7CisJdW5zaWduZWQgdmFsOworCisJaWYgKCFkc3Muc3lzY29uX3BsbF9jdHJsKQorCQlyZXR1cm47CisKKwl2YWwgPSAhZW5hYmxlOworCisJc3dpdGNoIChwbGxfaWQpIHsKKwljYXNlIERTU19QTExfVklERU8xOgorCQlzaGlmdCA9IDA7CisJCWJyZWFrOworCWNhc2UgRFNTX1BMTF9WSURFTzI6CisJCXNoaWZ0ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBEU1NfUExMX0hETUk6CisJCXNoaWZ0ID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFNTRVJSKCJpbGxlZ2FsIERTUyBQTEwgSUQgJWRcbiIsIHBsbF9pZCk7CisJCXJldHVybjsKKwl9CisKKwlyZWdtYXBfdXBkYXRlX2JpdHMoZHNzLnN5c2Nvbl9wbGxfY3RybCwgZHNzLnN5c2Nvbl9wbGxfY3RybF9vZmZzZXQsCisJCTEgPDwgc2hpZnQsIHZhbCA8PCBzaGlmdCk7Cit9CisKK3ZvaWQgZHNzX2N0cmxfcGxsX3NldF9jb250cm9sX211eChlbnVtIGRzc19wbGxfaWQgcGxsX2lkLAorCWVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwpCit7CisJdW5zaWduZWQgc2hpZnQsIHZhbDsKKworCWlmICghZHNzLnN5c2Nvbl9wbGxfY3RybCkKKwkJcmV0dXJuOworCisJc3dpdGNoIChjaGFubmVsKSB7CisJY2FzZSBPTUFQX0RTU19DSEFOTkVMX0xDRDoKKwkJc2hpZnQgPSAzOworCisJCXN3aXRjaCAocGxsX2lkKSB7CisJCWNhc2UgRFNTX1BMTF9WSURFTzE6CisJCQl2YWwgPSAwOyBicmVhazsKKwkJY2FzZSBEU1NfUExMX0hETUk6CisJCQl2YWwgPSAxOyBicmVhazsKKwkJZGVmYXVsdDoKKwkJCURTU0VSUigiZXJyb3IgaW4gUExMIG11eCBjb25maWcgZm9yIExDRFxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQlicmVhazsKKwljYXNlIE9NQVBfRFNTX0NIQU5ORUxfTENEMjoKKwkJc2hpZnQgPSA1OworCisJCXN3aXRjaCAocGxsX2lkKSB7CisJCWNhc2UgRFNTX1BMTF9WSURFTzE6CisJCQl2YWwgPSAwOyBicmVhazsKKwkJY2FzZSBEU1NfUExMX1ZJREVPMjoKKwkJCXZhbCA9IDE7IGJyZWFrOworCQljYXNlIERTU19QTExfSERNSToKKwkJCXZhbCA9IDI7IGJyZWFrOworCQlkZWZhdWx0OgorCQkJRFNTRVJSKCJlcnJvciBpbiBQTEwgbXV4IGNvbmZpZyBmb3IgTENEMlxuIik7CisJCQlyZXR1cm47CisJCX0KKworCQlicmVhazsKKwljYXNlIE9NQVBfRFNTX0NIQU5ORUxfTENEMzoKKwkJc2hpZnQgPSA3OworCisJCXN3aXRjaCAocGxsX2lkKSB7CisJCWNhc2UgRFNTX1BMTF9WSURFTzE6CisJCQl2YWwgPSAxOyBicmVhazsKKwkJY2FzZSBEU1NfUExMX1ZJREVPMjoKKwkJCXZhbCA9IDA7IGJyZWFrOworCQljYXNlIERTU19QTExfSERNSToKKwkJCXZhbCA9IDI7IGJyZWFrOworCQlkZWZhdWx0OgorCQkJRFNTRVJSKCJlcnJvciBpbiBQTEwgbXV4IGNvbmZpZyBmb3IgTENEM1xuIik7CisJCQlyZXR1cm47CisJCX0KKworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEU1NFUlIoImVycm9yIGluIFBMTCBtdXggY29uZmlnXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXJlZ21hcF91cGRhdGVfYml0cyhkc3Muc3lzY29uX3BsbF9jdHJsLCBkc3Muc3lzY29uX3BsbF9jdHJsX29mZnNldCwKKwkJMHgzIDw8IHNoaWZ0LCB2YWwgPDwgc2hpZnQpOworfQorCiB2b2lkIGRzc19zZGlfaW5pdChpbnQgZGF0YXBhaXJzKQogewogCXUzMiBsOwpAQCAtNjA1LDYgKzcwMywyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRzc19kcGlfc2VsZWN0X3NvdXJjZV9kcmE3eHgoaW50IHBvcnQsIGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwpCit7CisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSAwOgorCQlyZXR1cm4gZHNzX2RwaV9zZWxlY3Rfc291cmNlX29tYXA1KHBvcnQsIGNoYW5uZWwpOworCWNhc2UgMToKKwkJaWYgKGNoYW5uZWwgIT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QyKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJaWYgKGNoYW5uZWwgIT0gT01BUF9EU1NfQ0hBTk5FTF9MQ0QzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCiBpbnQgZHNzX2RwaV9zZWxlY3Rfc291cmNlKGludCBwb3J0LCBlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsKQogewogCXJldHVybiBkc3MuZmVhdC0+ZHBpX3NlbGVjdF9zb3VyY2UocG9ydCwgY2hhbm5lbCk7CkBAIC02NDMsNyArNzYxLDcgQEAKIAkJY2xrX3B1dChkc3MucGFyZW50X2Nsayk7CiB9CiAKLXN0YXRpYyBpbnQgZHNzX3J1bnRpbWVfZ2V0KHZvaWQpCitpbnQgZHNzX3J1bnRpbWVfZ2V0KHZvaWQpCiB7CiAJaW50IHI7CiAKQEAgLTY1NCw3ICs3NzIsNyBAQAogCXJldHVybiByIDwgMCA/IHIgOiAwOwogfQogCi1zdGF0aWMgdm9pZCBkc3NfcnVudGltZV9wdXQodm9pZCkKK3ZvaWQgZHNzX3J1bnRpbWVfcHV0KHZvaWQpCiB7CiAJaW50IHI7CiAKQEAgLTY3NywxNSArNzk1LDIxIEBACiAjZW5kaWYKIAogCi1zdGF0aWMgZW51bSBvbWFwX2Rpc3BsYXlfdHlwZSBvbWFwMnBsdXNfcG9ydHNbXSA9IHsKK3N0YXRpYyBjb25zdCBlbnVtIG9tYXBfZGlzcGxheV90eXBlIG9tYXAycGx1c19wb3J0c1tdID0gewogCU9NQVBfRElTUExBWV9UWVBFX0RQSSwKIH07CiAKLXN0YXRpYyBlbnVtIG9tYXBfZGlzcGxheV90eXBlIG9tYXAzNHh4X3BvcnRzW10gPSB7CitzdGF0aWMgY29uc3QgZW51bSBvbWFwX2Rpc3BsYXlfdHlwZSBvbWFwMzR4eF9wb3J0c1tdID0gewogCU9NQVBfRElTUExBWV9UWVBFX0RQSSwKIAlPTUFQX0RJU1BMQVlfVFlQRV9TREksCiB9OwogCitzdGF0aWMgY29uc3QgZW51bSBvbWFwX2Rpc3BsYXlfdHlwZSBkcmE3eHhfcG9ydHNbXSA9IHsKKwlPTUFQX0RJU1BMQVlfVFlQRV9EUEksCisJT01BUF9ESVNQTEFZX1RZUEVfRFBJLAorCU9NQVBfRElTUExBWV9UWVBFX0RQSSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNzX2ZlYXR1cmVzIG9tYXAyNHh4X2Rzc19mZWF0cyBfX2luaXRjb25zdCA9IHsKIAkvKgogCSAqIGZjayBkaXYgbWF4IGlzIHJlYWxseSAxNiwgYnV0IHRoZSBkaXZpZGVyIHJhbmdlIGhhcyBnYXBzLiBUaGUgcmFuZ2UKQEAgLTc0NCw2ICs4NjgsMTUgQEAKIAkubnVtX3BvcnRzCQk9CUFSUkFZX1NJWkUob21hcDJwbHVzX3BvcnRzKSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHNzX2ZlYXR1cmVzIGRyYTd4eF9kc3NfZmVhdHMgX19pbml0Y29uc3QgPSB7CisJLmZja19kaXZfbWF4CQk9CTY0LAorCS5kc3NfZmNrX211bHRpcGxpZXIJPQkxLAorCS5wYXJlbnRfY2xrX25hbWUJPQkiZHBsbF9wZXJfeDJfY2siLAorCS5kcGlfc2VsZWN0X3NvdXJjZQk9CSZkc3NfZHBpX3NlbGVjdF9zb3VyY2VfZHJhN3h4LAorCS5wb3J0cwkJCT0JZHJhN3h4X3BvcnRzLAorCS5udW1fcG9ydHMJCT0JQVJSQVlfU0laRShkcmE3eHhfcG9ydHMpLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgZHNzX2luaXRfZmVhdHVyZXMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAljb25zdCBzdHJ1Y3QgZHNzX2ZlYXR1cmVzICpzcmM7CkBAIC03ODQsNiArOTE3LDEwIEBACiAJCXNyYyA9ICZhbTQzeHhfZHNzX2ZlYXRzOwogCQlicmVhazsKIAorCWNhc2UgT01BUERTU19WRVJfRFJBN3h4OgorCQlzcmMgPSAmZHJhN3h4X2Rzc19mZWF0czsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC04ODQsOCArMTAyMSwxMCBAQAogc3RhdGljIGludCBfX2luaXQgb21hcF9kc3Nod19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSAqZHNzX21lbTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7CiAJdTMyIHJldjsKIAlpbnQgcjsKKwlzdHJ1Y3QgcmVndWxhdG9yICpwbGxfcmVndWxhdG9yOwogCiAJZHNzLnBkZXYgPSBwZGV2OwogCkBAIC05NDAsNiArMTA3OSw1NyBAQAogCiAJZHNzX2luaXRfcG9ydHMocGRldik7CiAKKwlpZiAobnAgJiYgb2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAic3lzY29uLXBsbC1jdHJsIikpIHsKKwkJZHNzLnN5c2Nvbl9wbGxfY3RybCA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUobnAsCisJCQkic3lzY29uLXBsbC1jdHJsIik7CisJCWlmIChJU19FUlIoZHNzLnN5c2Nvbl9wbGxfY3RybCkpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCQkiZmFpbGVkIHRvIGdldCBzeXNjb24tcGxsLWN0cmwgcmVnbWFwXG4iKTsKKwkJCXJldHVybiBQVFJfRVJSKGRzcy5zeXNjb25fcGxsX2N0cmwpOworCQl9CisKKwkJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyX2luZGV4KG5wLCAic3lzY29uLXBsbC1jdHJsIiwgMSwKKwkJCQkmZHNzLnN5c2Nvbl9wbGxfY3RybF9vZmZzZXQpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJImZhaWxlZCB0byBnZXQgc3lzY29uLXBsbC1jdHJsIG9mZnNldFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXBsbF9yZWd1bGF0b3IgPSBkZXZtX3JlZ3VsYXRvcl9nZXQoJnBkZXYtPmRldiwgInZkZGFfdmlkZW8iKTsKKwlpZiAoSVNfRVJSKHBsbF9yZWd1bGF0b3IpKSB7CisJCXIgPSBQVFJfRVJSKHBsbF9yZWd1bGF0b3IpOworCisJCXN3aXRjaCAocikgeworCQljYXNlIC1FTk9FTlQ6CisJCQlwbGxfcmVndWxhdG9yID0gTlVMTDsKKwkJCWJyZWFrOworCisJCWNhc2UgLUVQUk9CRV9ERUZFUjoKKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCisJCWRlZmF1bHQ6CisJCQlEU1NFUlIoImNhbid0IGdldCBEUExMIFZEREEgcmVndWxhdG9yXG4iKTsKKwkJCXJldHVybiByOworCQl9CisJfQorCisJaWYgKG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhucCwgInJlZy1uYW1lcyIsICJwbGwxIikgPj0gMCkgeworCQlkc3MudmlkZW8xX3BsbCA9IGRzc192aWRlb19wbGxfaW5pdChwZGV2LCAwLCBwbGxfcmVndWxhdG9yKTsKKwkJaWYgKElTX0VSUihkc3MudmlkZW8xX3BsbCkpIHsKKwkJCXIgPSBQVFJfRVJSKGRzcy52aWRlbzFfcGxsKTsKKwkJCWdvdG8gZXJyX3BsbF9pbml0OworCQl9CisJfQorCisJaWYgKG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhucCwgInJlZy1uYW1lcyIsICJwbGwyIikgPj0gMCkgeworCQlkc3MudmlkZW8yX3BsbCA9IGRzc192aWRlb19wbGxfaW5pdChwZGV2LCAxLCBwbGxfcmVndWxhdG9yKTsKKwkJaWYgKElTX0VSUihkc3MudmlkZW8yX3BsbCkpIHsKKwkJCXIgPSBQVFJfRVJSKGRzcy52aWRlbzJfcGxsKTsKKwkJCWdvdG8gZXJyX3BsbF9pbml0OworCQl9CisJfQorCiAJcmV2ID0gZHNzX3JlYWRfcmVnKERTU19SRVZJU0lPTik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBEU1MgcmV2ICVkLiVkXG4iLAogCQkJRkxEX0dFVChyZXYsIDcsIDQpLCBGTERfR0VUKHJldiwgMywgMCkpOwpAQCAtOTUwLDYgKzExNDAsMTIgQEAKIAogCXJldHVybiAwOwogCitlcnJfcGxsX2luaXQ6CisJaWYgKGRzcy52aWRlbzFfcGxsKQorCQlkc3NfdmlkZW9fcGxsX3VuaW5pdChkc3MudmlkZW8xX3BsbCk7CisKKwlpZiAoZHNzLnZpZGVvMl9wbGwpCisJCWRzc192aWRlb19wbGxfdW5pbml0KGRzcy52aWRlbzJfcGxsKTsKIGVycl9ydW50aW1lX2dldDoKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiBlcnJfc2V0dXBfY2xvY2tzOgpAQCAtOTU5LDYgKzExNTUsMTIgQEAKIAogc3RhdGljIGludCBfX2V4aXQgb21hcF9kc3Nod19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKKwlpZiAoZHNzLnZpZGVvMV9wbGwpCisJCWRzc192aWRlb19wbGxfdW5pbml0KGRzcy52aWRlbzFfcGxsKTsKKworCWlmIChkc3MudmlkZW8yX3BsbCkKKwkJZHNzX3ZpZGVvX3BsbF91bmluaXQoZHNzLnZpZGVvMl9wbGwpOworCiAJZHNzX3VuaW5pdF9wb3J0cyhwZGV2KTsKIAogCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKQEAgLTEwMDMsNiArMTIwNSw3IEBACiAJeyAuY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1kc3MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAidGksb21hcDQtZHNzIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInRpLG9tYXA1LWRzcyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJ0aSxkcmE3LWRzcyIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9kc3MuaCBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2Rzcy5oCmluZGV4IDE0ZmIwYzIuLjQ4MTJlZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2Rzcy5oCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2Rzcy5oCkBAIC0xMDAsNiArMTAwLDE0IEBACiAJRFNTX1dCX0xDRDNfTUdSID0JNywKIH07CiAKK2VudW0gZHNzX3BsbF9pZCB7CisJRFNTX1BMTF9EU0kxLAorCURTU19QTExfRFNJMiwKKwlEU1NfUExMX0hETUksCisJRFNTX1BMTF9WSURFTzEsCisJRFNTX1BMTF9WSURFTzIsCit9OworCiBzdHJ1Y3QgZHNzX3BsbDsKIAogI2RlZmluZSBEU1NfUExMX01BWF9IU0RJVlMgNApAQCAtMTUwLDYgKzE1OCw3IEBACiAKIHN0cnVjdCBkc3NfcGxsIHsKIAljb25zdCBjaGFyICpuYW1lOworCWVudW0gZHNzX3BsbF9pZCBpZDsKIAogCXN0cnVjdCBjbGsgKmNsa2luOwogCXN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcjsKQEAgLTI1MCw2ICsyNTksOSBAQAogaW50IGRzc19pbml0X3BsYXRmb3JtX2RyaXZlcih2b2lkKSBfX2luaXQ7CiB2b2lkIGRzc191bmluaXRfcGxhdGZvcm1fZHJpdmVyKHZvaWQpOwogCitpbnQgZHNzX3J1bnRpbWVfZ2V0KHZvaWQpOwordm9pZCBkc3NfcnVudGltZV9wdXQodm9pZCk7CisKIHVuc2lnbmVkIGxvbmcgZHNzX2dldF9kaXNwY19jbGtfcmF0ZSh2b2lkKTsKIGludCBkc3NfZHBpX3NlbGVjdF9zb3VyY2UoaW50IHBvcnQsIGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwpOwogdm9pZCBkc3Nfc2VsZWN0X2hkbWlfdmVuY19jbGtfc291cmNlKGVudW0gZHNzX2hkbWlfdmVuY19jbGtfc291cmNlX3NlbGVjdCk7CkBAIC0yNTcsNiArMjY5LDExIEBACiBjb25zdCBjaGFyICpkc3NfZ2V0X2dlbmVyaWNfY2xrX3NvdXJjZV9uYW1lKGVudW0gb21hcF9kc3NfY2xrX3NvdXJjZSBjbGtfc3JjKTsKIHZvaWQgZHNzX2R1bXBfY2xvY2tzKHN0cnVjdCBzZXFfZmlsZSAqcyk7CiAKKy8qIERTUyBWSURFTyBQTEwgKi8KK3N0cnVjdCBkc3NfcGxsICpkc3NfdmlkZW9fcGxsX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlkLAorCXN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcik7Cit2b2lkIGRzc192aWRlb19wbGxfdW5pbml0KHN0cnVjdCBkc3NfcGxsICpwbGwpOworCiAvKiBkc3Mtb2YgKi8KIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHNzX29mX3BvcnRfZ2V0X3BhcmVudF9kZXZpY2Uoc3RydWN0IGRldmljZV9ub2RlICpwb3J0KTsKIHUzMiBkc3Nfb2ZfcG9ydF9nZXRfcG9ydF9udW1iZXIoc3RydWN0IGRldmljZV9ub2RlICpwb3J0KTsKQEAgLTI2NSw2ICsyODIsMTAgQEAKIHZvaWQgZHNzX2RlYnVnX2R1bXBfY2xvY2tzKHN0cnVjdCBzZXFfZmlsZSAqcyk7CiAjZW5kaWYKIAordm9pZCBkc3NfY3RybF9wbGxfZW5hYmxlKGVudW0gZHNzX3BsbF9pZCBwbGxfaWQsIGJvb2wgZW5hYmxlKTsKK3ZvaWQgZHNzX2N0cmxfcGxsX3NldF9jb250cm9sX211eChlbnVtIGRzc19wbGxfaWQgcGxsX2lkLAorCWVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwpOworCiB2b2lkIGRzc19zZGlfaW5pdChpbnQgZGF0YXBhaXJzKTsKIGludCBkc3Nfc2RpX2VuYWJsZSh2b2lkKTsKIHZvaWQgZHNzX3NkaV9kaXNhYmxlKHZvaWQpOwpAQCAtNDQ2LDUgKzQ2Nyw2IEBACiAJCWNvbnN0IHN0cnVjdCBkc3NfcGxsX2Nsb2NrX2luZm8gKmNpbmZvKTsKIGludCBkc3NfcGxsX3dyaXRlX2NvbmZpZ190eXBlX2Ioc3RydWN0IGRzc19wbGwgKnBsbCwKIAkJY29uc3Qgc3RydWN0IGRzc19wbGxfY2xvY2tfaW5mbyAqY2luZm8pOworaW50IGRzc19wbGxfd2FpdF9yZXNldF9kb25lKHN0cnVjdCBkc3NfcGxsICpwbGwpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2Rzc19mZWF0dXJlcy5jIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvZHNzX2ZlYXR1cmVzLmMKaW5kZXggMGUzZGE4MC4uMzc2MjcwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvZHNzX2ZlYXR1cmVzLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvZHNzX2ZlYXR1cmVzLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCU9NQVBfRFNTX09VVFBVVF9EU0kxIHwgT01BUF9EU1NfT1VUUFVUX0RTSTIsCiAKIAkvKiBPTUFQX0RTU19DSEFOTkVMX0RJR0lUICovCi0JT01BUF9EU1NfT1VUUFVUX0hETUkgfCBPTUFQX0RTU19PVVRQVVRfRFBJLAorCU9NQVBfRFNTX09VVFBVVF9IRE1JLAogCiAJLyogT01BUF9EU1NfQ0hBTk5FTF9MQ0QyICovCiAJT01BUF9EU1NfT1VUUFVUX0RQSSB8IE9NQVBfRFNTX09VVFBVVF9EQkkgfApAQCAtOTQzLDYgKzk0Myw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBPTUFQRFNTX1ZFUl9PTUFQNToKKwljYXNlIE9NQVBEU1NfVkVSX0RSQTd4eDoKIAkJb21hcF9jdXJyZW50X2Rzc19mZWF0dXJlcyA9ICZvbWFwNV9kc3NfZmVhdHVyZXM7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9oZG1pNS5jIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvaGRtaTUuYwppbmRleCAzOWFhZTNhLi4zZjBiMzRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9oZG1pNS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2hkbWk1LmMKQEAgLTc4Nyw2ICs3ODcsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBoZG1pX29mX21hdGNoW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJ0aSxvbWFwNS1oZG1pIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInRpLGRyYTctaGRtaSIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9oZG1pX3BoeS5jIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvaGRtaV9waHkuYwppbmRleCBiYzllMDdkLi4xZjVkMTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9oZG1pX3BoeS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2hkbWlfcGh5LmMKQEAgLTIwOCw2ICsyMDgsNyBAQAogCQlicmVhazsKIAogCWNhc2UgT01BUERTU19WRVJfT01BUDU6CisJY2FzZSBPTUFQRFNTX1ZFUl9EUkE3eHg6CiAJCXNyYyA9ICZvbWFwNTR4eF9waHlfZmVhdHM7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9oZG1pX3BsbC5jIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvaGRtaV9wbGwuYwppbmRleCBhYzgzZWY1Li4wNmUyM2E3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9oZG1pX3BsbC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL2hkbWlfcGxsLmMKQEAgLTEwNCw2ICsxMDQsOCBAQAogCXN0cnVjdCBoZG1pX3dwX2RhdGEgKndwID0gcGxsLT53cDsKIAl1MTYgciA9IDA7CiAKKwlkc3NfY3RybF9wbGxfZW5hYmxlKERTU19QTExfSERNSSwgdHJ1ZSk7CisKIAlyID0gaGRtaV93cF9zZXRfcGxsX3B3cih3cCwgSERNSV9QTExQV1JDTURfQk9USE9OX0FMTENMS1MpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKQEAgLTExNyw2ICsxMTksOCBAQAogCXN0cnVjdCBoZG1pX3dwX2RhdGEgKndwID0gcGxsLT53cDsKIAogCWhkbWlfd3Bfc2V0X3BsbF9wd3Iod3AsIEhETUlfUExMUFdSQ01EX0FMTE9GRik7CisKKwlkc3NfY3RybF9wbGxfZW5hYmxlKERTU19QTExfSERNSSwgZmFsc2UpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRzc19wbGxfb3BzIGRzaV9wbGxfb3BzID0gewpAQCAtMTg1LDYgKzE4OSw3IEBACiAJfQogCiAJcGxsLT5uYW1lID0gImhkbWkiOworCXBsbC0+aWQgPSBEU1NfUExMX0hETUk7CiAJcGxsLT5iYXNlID0gaHBsbC0+YmFzZTsKIAlwbGwtPmNsa2luID0gY2xrOwogCkBAIC0xOTYsNiArMjAxLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIE9NQVBEU1NfVkVSX09NQVA1OgorCWNhc2UgT01BUERTU19WRVJfRFJBN3h4OgogCQlwbGwtPmh3ID0gJmRzc19vbWFwNV9oZG1pX3BsbF9odzsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL29tYXBkc3MtYm9vdC1pbml0LmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9vbWFwZHNzLWJvb3QtaW5pdC5jCmluZGV4IDJmMDgyMmUuLjQyYjg3ZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL29tYXBkc3MtYm9vdC1pbml0LmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3Mvb21hcGRzcy1ib290LWluaXQuYwpAQCAtMTg2LDYgKzE4Niw3IEBACiAJeyAuY29tcGF0aWJsZSA9ICJ0aSxvbWFwMy1kc3MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAidGksb21hcDQtZHNzIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInRpLG9tYXA1LWRzcyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJ0aSxkcmE3LWRzcyIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rzcy9wbGwuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL3BsbC5jCmluZGV4IDMzNWZmYWMuLmY5NzRkZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL3BsbC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL3BsbC5jCkBAIC0yMjIsNiArMjIyLDE2IEBACiAJcmV0dXJuICF2YWx1ZTsKIH0KIAoraW50IGRzc19wbGxfd2FpdF9yZXNldF9kb25lKHN0cnVjdCBkc3NfcGxsICpwbGwpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gcGxsLT5iYXNlOworCisJaWYgKHdhaXRfZm9yX2JpdF9jaGFuZ2UoYmFzZSArIFBMTF9TVEFUVVMsIDAsIDEpICE9IDEpCisJCXJldHVybiAtRVRJTUVET1VUOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgZHNzX3dhaXRfaHNkaXZfYWNrKHN0cnVjdCBkc3NfcGxsICpwbGwsIHUzMiBoc2Rpdl9hY2tfbWFzaykKIHsKIAlpbnQgdCA9IDEwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL3ZpZGVvLXBsbC5jIGIvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3MvdmlkZW8tcGxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFlYzU5ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL3ZpZGVvLXBsbC5jCkBAIC0wLDAgKzEsMjExIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTQgVGV4YXMgSW5zdHJ1bWVudHMgTHRkCisqCisqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKgorKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2luY2x1ZGUgPHZpZGVvL29tYXBkc3MuaD4KKworI2luY2x1ZGUgImRzcy5oIgorI2luY2x1ZGUgImRzc19mZWF0dXJlcy5oIgorCitzdHJ1Y3QgZHNzX3ZpZGVvX3BsbCB7CisJc3RydWN0IGRzc19wbGwgcGxsOworCisJc3RydWN0IGRldmljZSAqZGV2OworCisJdm9pZCBfX2lvbWVtICpjbGtjdHJsX2Jhc2U7Cit9OworCisjZGVmaW5lIFJFR19NT0QocmVnLCB2YWwsIHN0YXJ0LCBlbmQpIFwKKwl3cml0ZWxfcmVsYXhlZChGTERfTU9EKHJlYWRsX3JlbGF4ZWQocmVnKSwgdmFsLCBzdGFydCwgZW5kKSwgcmVnKQorCitzdGF0aWMgdm9pZCBkc3NfZHBsbF9lbmFibGVfc2NwX2NsayhzdHJ1Y3QgZHNzX3ZpZGVvX3BsbCAqdnBsbCkKK3sKKwlSRUdfTU9EKHZwbGwtPmNsa2N0cmxfYmFzZSwgMSwgMTQsIDE0KTsgLyogQ0lPX0NMS19JQ0cgKi8KK30KKworc3RhdGljIHZvaWQgZHNzX2RwbGxfZGlzYWJsZV9zY3BfY2xrKHN0cnVjdCBkc3NfdmlkZW9fcGxsICp2cGxsKQoreworCVJFR19NT0QodnBsbC0+Y2xrY3RybF9iYXNlLCAwLCAxNCwgMTQpOyAvKiBDSU9fQ0xLX0lDRyAqLworfQorCitzdGF0aWMgdm9pZCBkc3NfZHBsbF9wb3dlcl9lbmFibGUoc3RydWN0IGRzc192aWRlb19wbGwgKnZwbGwpCit7CisJUkVHX01PRCh2cGxsLT5jbGtjdHJsX2Jhc2UsIDIsIDMxLCAzMCk7IC8qIFBMTF9QT1dFUl9PTl9BTEwgKi8KKworCS8qCisJICogRFJBN3ggUExMIENUUkwncyBQTExfUFdSX1NUQVRVUyBzZWVtcyB0byBhbHdheXMgcmV0dXJuIDAsCisJICogc28gd2UgaGF2ZSB0byB1c2UgZml4ZWQgZGVsYXkgaGVyZS4KKwkgKi8KKwltc2xlZXAoMSk7Cit9CisKK3N0YXRpYyB2b2lkIGRzc19kcGxsX3Bvd2VyX2Rpc2FibGUoc3RydWN0IGRzc192aWRlb19wbGwgKnZwbGwpCit7CisJUkVHX01PRCh2cGxsLT5jbGtjdHJsX2Jhc2UsIDAsIDMxLCAzMCk7CS8qIFBMTF9QT1dFUl9PRkYgKi8KK30KKworc3RhdGljIGludCBkc3NfdmlkZW9fcGxsX2VuYWJsZShzdHJ1Y3QgZHNzX3BsbCAqcGxsKQoreworCXN0cnVjdCBkc3NfdmlkZW9fcGxsICp2cGxsID0gY29udGFpbmVyX29mKHBsbCwgc3RydWN0IGRzc192aWRlb19wbGwsIHBsbCk7CisJaW50IHI7CisKKwlyID0gZHNzX3J1bnRpbWVfZ2V0KCk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJZHNzX2N0cmxfcGxsX2VuYWJsZShwbGwtPmlkLCB0cnVlKTsKKworCWRzc19kcGxsX2VuYWJsZV9zY3BfY2xrKHZwbGwpOworCisJciA9IGRzc19wbGxfd2FpdF9yZXNldF9kb25lKHBsbCk7CisJaWYgKHIpCisJCWdvdG8gZXJyX3Jlc2V0OworCisJZHNzX2RwbGxfcG93ZXJfZW5hYmxlKHZwbGwpOworCisJcmV0dXJuIDA7CisKK2Vycl9yZXNldDoKKwlkc3NfZHBsbF9kaXNhYmxlX3NjcF9jbGsodnBsbCk7CisJZHNzX2N0cmxfcGxsX2VuYWJsZShwbGwtPmlkLCBmYWxzZSk7CisJZHNzX3J1bnRpbWVfcHV0KCk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgZHNzX3ZpZGVvX3BsbF9kaXNhYmxlKHN0cnVjdCBkc3NfcGxsICpwbGwpCit7CisJc3RydWN0IGRzc192aWRlb19wbGwgKnZwbGwgPSBjb250YWluZXJfb2YocGxsLCBzdHJ1Y3QgZHNzX3ZpZGVvX3BsbCwgcGxsKTsKKworCWRzc19kcGxsX3Bvd2VyX2Rpc2FibGUodnBsbCk7CisKKwlkc3NfZHBsbF9kaXNhYmxlX3NjcF9jbGsodnBsbCk7CisKKwlkc3NfY3RybF9wbGxfZW5hYmxlKHBsbC0+aWQsIGZhbHNlKTsKKworCWRzc19ydW50aW1lX3B1dCgpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGRzc19wbGxfb3BzIGRzc19wbGxfb3BzID0geworCS5lbmFibGUgPSBkc3NfdmlkZW9fcGxsX2VuYWJsZSwKKwkuZGlzYWJsZSA9IGRzc192aWRlb19wbGxfZGlzYWJsZSwKKwkuc2V0X2NvbmZpZyA9IGRzc19wbGxfd3JpdGVfY29uZmlnX3R5cGVfYSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHNzX3BsbF9odyBkc3NfZHJhN192aWRlb19wbGxfaHcgPSB7CisJLm5fbWF4ID0gKDEgPDwgOCkgLSAxLAorCS5tX21heCA9ICgxIDw8IDEyKSAtIDEsCisJLm1YX21heCA9ICgxIDw8IDUpIC0gMSwKKwkuZmludF9taW4gPSA1MDAwMDAsCisJLmZpbnRfbWF4ID0gMjUwMDAwMCwKKwkuY2xrZGNvX21heCA9IDE4MDAwMDAwMDAsCisKKwkubl9tc2IgPSA4LAorCS5uX2xzYiA9IDEsCisJLm1fbXNiID0gMjAsCisJLm1fbHNiID0gOSwKKworCS5tWF9tc2JbMF0gPSAyNSwKKwkubVhfbHNiWzBdID0gMjEsCisJLm1YX21zYlsxXSA9IDMwLAorCS5tWF9sc2JbMV0gPSAyNiwKKworCS5oYXNfcmVmc2VsID0gdHJ1ZSwKK307CisKK3N0cnVjdCBkc3NfcGxsICpkc3NfdmlkZW9fcGxsX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGlkLAorCXN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcikKK3sKKwljb25zdCBjaGFyICogY29uc3QgcmVnX25hbWVbXSA9IHsgInBsbDEiLCAicGxsMiIgfTsKKwljb25zdCBjaGFyICogY29uc3QgY2xrY3RybF9uYW1lW10gPSB7ICJwbGwxX2Nsa2N0cmwiLCAicGxsMl9jbGtjdHJsIiB9OworCWNvbnN0IGNoYXIgKiBjb25zdCBjbGtpbl9uYW1lW10gPSB7ICJ2aWRlbzFfY2xrIiwgInZpZGVvMl9jbGsiIH07CisKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgZHNzX3ZpZGVvX3BsbCAqdnBsbDsKKwl2b2lkIF9faW9tZW0gKnBsbF9iYXNlLCAqY2xrY3RybF9iYXNlOworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgZHNzX3BsbCAqcGxsOworCWludCByOworCisJLyogUExMIENPTlRST0wgKi8KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sIHJlZ19uYW1lW2lkXSk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIm1pc3NpbmcgcGxhdGZvcm0gcmVzb3VyY2UgZGF0YSBmb3IgcGxsJWRcbiIsIGlkKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CisJfQorCisJcGxsX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoJnBkZXYtPmRldiwgcmVzKTsKKwlpZiAoSVNfRVJSKHBsbF9iYXNlKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW9yZW1hcCBwbGwlZCByZWdfbmFtZVxuIiwgaWQpOworCQlyZXR1cm4gRVJSX0NBU1QocGxsX2Jhc2UpOworCX0KKworCS8qIENMT0NLIENPTlRST0wgKi8KKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sCisJCWNsa2N0cmxfbmFtZVtpZF0pOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJtaXNzaW5nIHBsYXRmb3JtIHJlc291cmNlIGRhdGEgZm9yIHBsbCVkXG4iLCBpZCk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworCX0KKworCWNsa2N0cmxfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOworCWlmIChJU19FUlIoY2xrY3RybF9iYXNlKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW9yZW1hcCBwbGwlZCBjbGtjdHJsXG4iLCBpZCk7CisJCXJldHVybiBFUlJfQ0FTVChjbGtjdHJsX2Jhc2UpOworCX0KKworCS8qIENMS0lOICovCisKKwljbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgY2xraW5fbmFtZVtpZF0pOworCWlmIChJU19FUlIoY2xrKSkgeworCQlEU1NFUlIoImNhbid0IGdldCB2aWRlbyBwbGwgY2xraW5cbiIpOworCQlyZXR1cm4gRVJSX0NBU1QoY2xrKTsKKwl9CisKKwl2cGxsID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqdnBsbCksIEdGUF9LRVJORUwpOworCWlmICghdnBsbCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl2cGxsLT5kZXYgPSAmcGRldi0+ZGV2OworCXZwbGwtPmNsa2N0cmxfYmFzZSA9IGNsa2N0cmxfYmFzZTsKKworCXBsbCA9ICZ2cGxsLT5wbGw7CisKKwlwbGwtPm5hbWUgPSBpZCA9PSAwID8gInZpZGVvMCIgOiAidmlkZW8xIjsKKwlwbGwtPmlkID0gaWQgPT0gMCA/IERTU19QTExfVklERU8xIDogRFNTX1BMTF9WSURFTzI7CisJcGxsLT5jbGtpbiA9IGNsazsKKwlwbGwtPnJlZ3VsYXRvciA9IHJlZ3VsYXRvcjsKKwlwbGwtPmJhc2UgPSBwbGxfYmFzZTsKKwlwbGwtPmh3ID0gJmRzc19kcmE3X3ZpZGVvX3BsbF9odzsKKwlwbGwtPm9wcyA9ICZkc3NfcGxsX29wczsKKworCXIgPSBkc3NfcGxsX3JlZ2lzdGVyKHBsbCk7CisJaWYgKHIpCisJCXJldHVybiBFUlJfUFRSKHIpOworCisJcmV0dXJuIHBsbDsKK30KKwordm9pZCBkc3NfdmlkZW9fcGxsX3VuaW5pdChzdHJ1Y3QgZHNzX3BsbCAqcGxsKQoreworCWRzc19wbGxfdW5yZWdpc3RlcihwbGwpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9vbWFwZmIvb21hcGZiLWlvY3RsLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL29tYXBmYi9vbWFwZmItaW9jdGwuYwppbmRleCAxNDZiNmY1Li45ZGRmZGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL29tYXBmYi9vbWFwZmItaW9jdGwuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL29tYXBmYi9vbWFwZmItaW9jdGwuYwpAQCAtMTM3LDggKzEzNywxMSBAQAogCQkJZ290byB1bmRvOwogCX0KIAotCWlmIChvdmwtPm1hbmFnZXIpCi0JCW92bC0+bWFuYWdlci0+YXBwbHkob3ZsLT5tYW5hZ2VyKTsKKwlpZiAob3ZsLT5tYW5hZ2VyKSB7CisJCXIgPSBvdmwtPm1hbmFnZXItPmFwcGx5KG92bC0+bWFuYWdlcik7CisJCWlmIChyKQorCQkJZ290byB1bmRvOworCX0KIAogCWlmIChwaS0+ZW5hYmxlZCkgewogCQlyID0gb3ZsLT5lbmFibGUob3ZsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvcHZyMmZiLmMgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L3B2cjJmYi5jCmluZGV4IDdjNzRmNTguLjBlMjRlYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvcHZyMmZiLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9wdnIyZmIuYwpAQCAtNjg2LDEwICs2ODYsOCBAQAogCWlmICghcGFnZXMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCAodW5zaWduZWQgbG9uZylidWYsCi0JCQkgICAgIG5yX3BhZ2VzLCBXUklURSwgMCwgcGFnZXMsIE5VTEwpOwotCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJcmV0ID0gZ2V0X3VzZXJfcGFnZXNfdW5sb2NrZWQoY3VycmVudCwgY3VycmVudC0+bW0sICh1bnNpZ25lZCBsb25nKWJ1ZiwKKwkJCQkgICAgICBucl9wYWdlcywgV1JJVEUsIDAsIHBhZ2VzKTsKIAogCWlmIChyZXQgPCBucl9wYWdlcykgewogCQlucl9wYWdlcyA9IHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvc2F2YWdlL3NhdmFnZWZiLmggYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L3NhdmFnZS9zYXZhZ2VmYi5oCmluZGV4IGRjYWFiOTAuLjhmZjRhYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvc2F2YWdlL3NhdmFnZWZiLmgKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi9zYXZhZ2Uvc2F2YWdlZmIuaApAQCAtMzUxLDMyICszNTEsMjYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIFZHQWVuYWJsZVBhbGV0dGUoc3RydWN0IHNhdmFnZWZiX3BhciAqcGFyKQogewotCXU4IHRtcDsKLQotCXRtcCA9IHZnYV9pbjgoMHgzZGEsIHBhcik7CisJdmdhX2luOCgweDNkYSwgcGFyKTsKIAl2Z2Ffb3V0OCgweDNjMCwgMHgwMCwgcGFyKTsKIAlwYXItPnBhbGV0dGVFbmFibGVkID0gMTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIFZHQWRpc2FibGVQYWxldHRlKHN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhcikKIHsKLQl1OCB0bXA7Ci0KLQl0bXAgPSB2Z2FfaW44KDB4M2RhLCBwYXIpOworCXZnYV9pbjgoMHgzZGEsIHBhcik7CiAJdmdhX291dDgoMHgzYzAsIDB4MjAsIHBhcik7CiAJcGFyLT5wYWxldHRlRW5hYmxlZCA9IDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBWR0F3QVRUUih1OCBpbmRleCwgdTggdmFsdWUsIHN0cnVjdCBzYXZhZ2VmYl9wYXIgKnBhcikKIHsKLQl1OCB0bXA7Ci0KIAlpZiAocGFyLT5wYWxldHRlRW5hYmxlZCkKIAkJaW5kZXggJj0gfjB4MjA7CiAJZWxzZQogCQlpbmRleCB8PSAweDIwOwogCi0JdG1wID0gdmdhX2luOCgweDNkYSwgcGFyKTsKKwl2Z2FfaW44KDB4M2RhLCBwYXIpOwogCXZnYV9vdXQ4KDB4M2MwLCBpbmRleCwgcGFyKTsKIAl2Z2Ffb3V0OCAoMHgzYzAsIHZhbHVlLCBwYXIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYmRldi9zc2QxMzA3ZmIuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvc3NkMTMwN2ZiLmMKaW5kZXggZjRkYWE1OS4uZjdlZDZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYmRldi9zc2QxMzA3ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L3NzZDEzMDdmYi5jCkBAIC0xMjIsMjMgKzEyMiw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc3NkMTMwN2ZiX3dyaXRlX2RhdGEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggZGF0YSkKLXsKLQlzdHJ1Y3Qgc3NkMTMwN2ZiX2FycmF5ICphcnJheTsKLQlpbnQgcmV0OwotCi0JYXJyYXkgPSBzc2QxMzA3ZmJfYWxsb2NfYXJyYXkoMSwgU1NEMTMwN0ZCX0RBVEEpOwotCWlmICghYXJyYXkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYXJyYXktPmRhdGFbMF0gPSBkYXRhOwotCi0JcmV0ID0gc3NkMTMwN2ZiX3dyaXRlX2FycmF5KGNsaWVudCwgYXJyYXksIDEpOwotCWtmcmVlKGFycmF5KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyB2b2lkIHNzZDEzMDdmYl91cGRhdGVfZGlzcGxheShzdHJ1Y3Qgc3NkMTMwN2ZiX3BhciAqcGFyKQogewogCXN0cnVjdCBzc2QxMzA3ZmJfYXJyYXkgKmFycmF5OwpAQCAtMzIwLDcgKzMwMywxMCBAQAogCiAJLyogU2V0IGluaXRpYWwgY29udHJhc3QgKi8KIAlyZXQgPSBzc2QxMzA3ZmJfd3JpdGVfY21kKHBhci0+Y2xpZW50LCBTU0QxMzA3RkJfQ09OVFJBU1QpOwotCXJldCA9IHJldCAmIHNzZDEzMDdmYl93cml0ZV9jbWQocGFyLT5jbGllbnQsIDB4N2YpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc3NkMTMwN2ZiX3dyaXRlX2NtZChwYXItPmNsaWVudCwgMHg3Zik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTMzNiw2MyArMzIyLDk5IEBACiAKIAkvKiBTZXQgbXVsdGlwbGV4IHJhdGlvIHZhbHVlICovCiAJcmV0ID0gc3NkMTMwN2ZiX3dyaXRlX2NtZChwYXItPmNsaWVudCwgU1NEMTMwN0ZCX1NFVF9NVUxUSVBMRVhfUkFUSU8pOwotCXJldCA9IHJldCAmIHNzZDEzMDdmYl93cml0ZV9jbWQocGFyLT5jbGllbnQsIHBhci0+aGVpZ2h0IC0gMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzc2QxMzA3ZmJfd3JpdGVfY21kKHBhci0+Y2xpZW50LCBwYXItPmhlaWdodCAtIDEpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogc2V0IGRpc3BsYXkgb2Zmc2V0IHZhbHVlICovCiAJcmV0ID0gc3NkMTMwN2ZiX3dyaXRlX2NtZChwYXItPmNsaWVudCwgU1NEMTMwN0ZCX1NFVF9ESVNQTEFZX09GRlNFVCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKIAlyZXQgPSBzc2QxMzA3ZmJfd3JpdGVfY21kKHBhci0+Y2xpZW50LCAweDIwKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIFNldCBjbG9jayBmcmVxdWVuY3kgKi8KIAlyZXQgPSBzc2QxMzA3ZmJfd3JpdGVfY21kKHBhci0+Y2xpZW50LCBTU0QxMzA3RkJfU0VUX0NMT0NLX0ZSRVEpOwotCXJldCA9IHJldCAmIHNzZDEzMDdmYl93cml0ZV9jbWQocGFyLT5jbGllbnQsIDB4ZjApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc3NkMTMwN2ZiX3dyaXRlX2NtZChwYXItPmNsaWVudCwgMHhmMCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKIAkvKiBTZXQgcHJlY2hhcmdlIHBlcmlvZCBpbiBudW1iZXIgb2YgdGlja3MgZnJvbSB0aGUgaW50ZXJuYWwgY2xvY2sgKi8KIAlyZXQgPSBzc2QxMzA3ZmJfd3JpdGVfY21kKHBhci0+Y2xpZW50LCBTU0QxMzA3RkJfU0VUX1BSRUNIQVJHRV9QRVJJT0QpOwotCXJldCA9IHJldCAmIHNzZDEzMDdmYl93cml0ZV9jbWQocGFyLT5jbGllbnQsIDB4MjIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc3NkMTMwN2ZiX3dyaXRlX2NtZChwYXItPmNsaWVudCwgMHgyMik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKIAkvKiBTZXQgQ09NIHBpbnMgY29uZmlndXJhdGlvbiAqLwogCXJldCA9IHNzZDEzMDdmYl93cml0ZV9jbWQocGFyLT5jbGllbnQsIFNTRDEzMDdGQl9TRVRfQ09NX1BJTlNfQ09ORklHKTsKLQlyZXQgPSByZXQgJiBzc2QxMzA3ZmJfd3JpdGVfY21kKHBhci0+Y2xpZW50LCAweDIyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNzZDEzMDdmYl93cml0ZV9jbWQocGFyLT5jbGllbnQsIDB4MjIpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogU2V0IFZDT01IICovCiAJcmV0ID0gc3NkMTMwN2ZiX3dyaXRlX2NtZChwYXItPmNsaWVudCwgU1NEMTMwN0ZCX1NFVF9WQ09NSCk7Ci0JcmV0ID0gcmV0ICYgc3NkMTMwN2ZiX3dyaXRlX2NtZChwYXItPmNsaWVudCwgMHg0OSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzc2QxMzA3ZmJfd3JpdGVfY21kKHBhci0+Y2xpZW50LCAweDQ5KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIFR1cm4gb24gdGhlIERDLURDIENoYXJnZSBQdW1wICovCiAJcmV0ID0gc3NkMTMwN2ZiX3dyaXRlX2NtZChwYXItPmNsaWVudCwgU1NEMTMwN0ZCX0NIQVJHRV9QVU1QKTsKLQlyZXQgPSByZXQgJiBzc2QxMzA3ZmJfd3JpdGVfY21kKHBhci0+Y2xpZW50LCAweDE0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNzZDEzMDdmYl93cml0ZV9jbWQocGFyLT5jbGllbnQsIDB4MTQpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogU3dpdGNoIHRvIGhvcml6b250YWwgYWRkcmVzc2luZyBtb2RlICovCiAJcmV0ID0gc3NkMTMwN2ZiX3dyaXRlX2NtZChwYXItPmNsaWVudCwgU1NEMTMwN0ZCX1NFVF9BRERSRVNTX01PREUpOwotCXJldCA9IHJldCAmIHNzZDEzMDdmYl93cml0ZV9jbWQocGFyLT5jbGllbnQsCi0JCQkJCVNTRDEzMDdGQl9TRVRfQUREUkVTU19NT0RFX0hPUklaT05UQUwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc3NkMTMwN2ZiX3dyaXRlX2NtZChwYXItPmNsaWVudCwKKwkJCQkgIFNTRDEzMDdGQl9TRVRfQUREUkVTU19NT0RFX0hPUklaT05UQUwpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJcmV0ID0gc3NkMTMwN2ZiX3dyaXRlX2NtZChwYXItPmNsaWVudCwgU1NEMTMwN0ZCX1NFVF9DT0xfUkFOR0UpOwotCXJldCA9IHJldCAmIHNzZDEzMDdmYl93cml0ZV9jbWQocGFyLT5jbGllbnQsIDB4MCk7Ci0JcmV0ID0gcmV0ICYgc3NkMTMwN2ZiX3dyaXRlX2NtZChwYXItPmNsaWVudCwgcGFyLT53aWR0aCAtIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gc3NkMTMwN2ZiX3dyaXRlX2NtZChwYXItPmNsaWVudCwgMHgwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNzZDEzMDdmYl93cml0ZV9jbWQocGFyLT5jbGllbnQsIHBhci0+d2lkdGggLSAxKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHNzZDEzMDdmYl93cml0ZV9jbWQocGFyLT5jbGllbnQsIFNTRDEzMDdGQl9TRVRfUEFHRV9SQU5HRSk7Ci0JcmV0ID0gcmV0ICYgc3NkMTMwN2ZiX3dyaXRlX2NtZChwYXItPmNsaWVudCwgMHgwKTsKLQlyZXQgPSByZXQgJiBzc2QxMzA3ZmJfd3JpdGVfY21kKHBhci0+Y2xpZW50LAotCQkJCQlwYXItPnBhZ2Vfb2Zmc2V0ICsgKHBhci0+aGVpZ2h0IC8gOCkgLSAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHNzZDEzMDdmYl93cml0ZV9jbWQocGFyLT5jbGllbnQsIDB4MCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBzc2QxMzA3ZmJfd3JpdGVfY21kKHBhci0+Y2xpZW50LAorCQkJCSAgcGFyLT5wYWdlX29mZnNldCArIChwYXItPmhlaWdodCAvIDgpIC0gMSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTQ2MCw3ICs0ODIsNyBAQAogCQlwYXItPndpZHRoID0gOTY7CiAKIAlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgInNvbG9tb24saGVpZ2h0IiwgJnBhci0+aGVpZ2h0KSkKLQkJcGFyLT53aWR0aCA9IDE2OworCQlwYXItPmhlaWdodCA9IDE2OwogCiAJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJzb2xvbW9uLHBhZ2Utb2Zmc2V0IiwgJnBhci0+cGFnZV9vZmZzZXQpKQogCQlwYXItPnBhZ2Vfb2Zmc2V0ID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvdnQ4NTAwbGNkZmIuYyBiL2RyaXZlcnMvdmlkZW8vZmJkZXYvdnQ4NTAwbGNkZmIuYwppbmRleCBmZmFmMjllLi4xYTExNzZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZiZGV2L3Z0ODUwMGxjZGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9mYmRldi92dDg1MDBsY2RmYi5jCkBAIC0xMTMsMTAgKzExMyw4IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlpZiAoYnBwX3ZhbHVlc1tpXSA9PSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKKwkJaWYgKGJwcF92YWx1ZXNbaV0gPT0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKQogCQkJcmVnX2JwcCA9IGk7Ci0JCQljb250aW51ZTsKLQkJfQogCX0KIAogCWNvbnRyb2wwID0gcmVhZGwoZmJpLT5yZWdiYXNlKSAmIH4weGY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2hkbWkuYyBiL2RyaXZlcnMvdmlkZW8vaGRtaS5jCmluZGV4IDllNzU4YTguLjE2MjY4OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaGRtaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaGRtaS5jCkBAIC0yNywxMCArMjcsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9oZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKLXN0YXRpYyB2b2lkIGhkbWlfaW5mb2ZyYW1lX2NoZWNrc3VtKHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCisjZGVmaW5lIGhkbWlfbG9nKGZtdCwgLi4uKSBkZXZfcHJpbnRrKGxldmVsLCBkZXYsIGZtdCwgIyNfX1ZBX0FSR1NfXykKKworc3RhdGljIHU4IGhkbWlfaW5mb2ZyYW1lX2NoZWNrc3VtKHU4ICpwdHIsIHNpemVfdCBzaXplKQogewotCXU4ICpwdHIgPSBidWZmZXI7CiAJdTggY3N1bSA9IDA7CiAJc2l6ZV90IGk7CiAKQEAgLTM4LDcgKzQwLDE0IEBACiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKIAkJY3N1bSArPSBwdHJbaV07CiAKLQlwdHJbM10gPSAyNTYgLSBjc3VtOworCXJldHVybiAyNTYgLSBjc3VtOworfQorCitzdGF0aWMgdm9pZCBoZG1pX2luZm9mcmFtZV9zZXRfY2hlY2tzdW0odm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwl1OCAqcHRyID0gYnVmZmVyOworCisJcHRyWzNdID0gaGRtaV9pbmZvZnJhbWVfY2hlY2tzdW0oYnVmZmVyLCBzaXplKTsKIH0KIAogLyoqCkBAIC0xMzYsNyArMTQ1LDcgQEAKIAlwdHJbMTFdID0gZnJhbWUtPnJpZ2h0X2JhciAmIDB4ZmY7CiAJcHRyWzEyXSA9IChmcmFtZS0+cmlnaHRfYmFyID4+IDgpICYgMHhmZjsKIAotCWhkbWlfaW5mb2ZyYW1lX2NoZWNrc3VtKGJ1ZmZlciwgbGVuZ3RoKTsKKwloZG1pX2luZm9mcmFtZV9zZXRfY2hlY2tzdW0oYnVmZmVyLCBsZW5ndGgpOwogCiAJcmV0dXJuIGxlbmd0aDsKIH0KQEAgLTIwNiw3ICsyMTUsNyBAQAogCiAJcHRyWzI0XSA9IGZyYW1lLT5zZGk7CiAKLQloZG1pX2luZm9mcmFtZV9jaGVja3N1bShidWZmZXIsIGxlbmd0aCk7CisJaGRtaV9pbmZvZnJhbWVfc2V0X2NoZWNrc3VtKGJ1ZmZlciwgbGVuZ3RoKTsKIAogCXJldHVybiBsZW5ndGg7CiB9CkBAIC0yODEsNyArMjkwLDcgQEAKIAlpZiAoZnJhbWUtPmRvd25taXhfaW5oaWJpdCkKIAkJcHRyWzRdIHw9IEJJVCg3KTsKIAotCWhkbWlfaW5mb2ZyYW1lX2NoZWNrc3VtKGJ1ZmZlciwgbGVuZ3RoKTsKKwloZG1pX2luZm9mcmFtZV9zZXRfY2hlY2tzdW0oYnVmZmVyLCBsZW5ndGgpOwogCiAJcmV0dXJuIGxlbmd0aDsKIH0KQEAgLTM3Myw3ICszODIsNyBAQAogCQkJcHRyWzldID0gKGZyYW1lLT5zM2RfZXh0X2RhdGEgJiAweGYpIDw8IDQ7CiAJfQogCi0JaGRtaV9pbmZvZnJhbWVfY2hlY2tzdW0oYnVmZmVyLCBsZW5ndGgpOworCWhkbWlfaW5mb2ZyYW1lX3NldF9jaGVja3N1bShidWZmZXIsIGxlbmd0aCk7CiAKIAlyZXR1cm4gbGVuZ3RoOwogfQpAQCAtNDM0LDMgKzQ0Myw4MDIgQEAKIAlyZXR1cm4gbGVuZ3RoOwogfQogRVhQT1JUX1NZTUJPTChoZG1pX2luZm9mcmFtZV9wYWNrKTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmhkbWlfaW5mb2ZyYW1lX3R5cGVfZ2V0X25hbWUoZW51bSBoZG1pX2luZm9mcmFtZV90eXBlIHR5cGUpCit7CisJaWYgKHR5cGUgPCAweDgwIHx8IHR5cGUgPiAweDlmKQorCQlyZXR1cm4gIkludmFsaWQiOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9WRU5ET1I6CisJCXJldHVybiAiVmVuZG9yIjsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVZJOgorCQlyZXR1cm4gIkF1eGlsaWFyeSBWaWRlbyBJbmZvcm1hdGlvbiAoQVZJKSI7CisJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX1NQRDoKKwkJcmV0dXJuICJTb3VyY2UgUHJvZHVjdCBEZXNjcmlwdGlvbiAoU1BEKSI7CisJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX0FVRElPOgorCQlyZXR1cm4gIkF1ZGlvIjsKKwl9CisJcmV0dXJuICJSZXNlcnZlZCI7Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlfaW5mb2ZyYW1lX2xvZ19oZWFkZXIoY29uc3QgY2hhciAqbGV2ZWwsCisJCQkJICAgICAgc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBoZG1pX2FueV9pbmZvZnJhbWUgKmZyYW1lKQoreworCWhkbWlfbG9nKCJIRE1JIGluZm9mcmFtZTogJXMsIHZlcnNpb24gJXUsIGxlbmd0aCAldVxuIiwKKwkJaGRtaV9pbmZvZnJhbWVfdHlwZV9nZXRfbmFtZShmcmFtZS0+dHlwZSksCisJCWZyYW1lLT52ZXJzaW9uLCBmcmFtZS0+bGVuZ3RoKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmhkbWlfY29sb3JzcGFjZV9nZXRfbmFtZShlbnVtIGhkbWlfY29sb3JzcGFjZSBjb2xvcnNwYWNlKQoreworCXN3aXRjaCAoY29sb3JzcGFjZSkgeworCWNhc2UgSERNSV9DT0xPUlNQQUNFX1JHQjoKKwkJcmV0dXJuICJSR0IiOworCWNhc2UgSERNSV9DT0xPUlNQQUNFX1lVVjQyMjoKKwkJcmV0dXJuICJZQ2JDciA0OjI6MiI7CisJY2FzZSBIRE1JX0NPTE9SU1BBQ0VfWVVWNDQ0OgorCQlyZXR1cm4gIllDYkNyIDQ6NDo0IjsKKwljYXNlIEhETUlfQ09MT1JTUEFDRV9ZVVY0MjA6CisJCXJldHVybiAiWUNiQ3IgNDoyOjAiOworCWNhc2UgSERNSV9DT0xPUlNQQUNFX1JFU0VSVkVENDoKKwkJcmV0dXJuICJSZXNlcnZlZCAoNCkiOworCWNhc2UgSERNSV9DT0xPUlNQQUNFX1JFU0VSVkVENToKKwkJcmV0dXJuICJSZXNlcnZlZCAoNSkiOworCWNhc2UgSERNSV9DT0xPUlNQQUNFX1JFU0VSVkVENjoKKwkJcmV0dXJuICJSZXNlcnZlZCAoNikiOworCWNhc2UgSERNSV9DT0xPUlNQQUNFX0lET19ERUZJTkVEOgorCQlyZXR1cm4gIklETyBEZWZpbmVkIjsKKwl9CisJcmV0dXJuICJJbnZhbGlkIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmhkbWlfc2Nhbl9tb2RlX2dldF9uYW1lKGVudW0gaGRtaV9zY2FuX21vZGUgc2Nhbl9tb2RlKQoreworCXN3aXRjaCAoc2Nhbl9tb2RlKSB7CisJY2FzZSBIRE1JX1NDQU5fTU9ERV9OT05FOgorCQlyZXR1cm4gIk5vIERhdGEiOworCWNhc2UgSERNSV9TQ0FOX01PREVfT1ZFUlNDQU46CisJCXJldHVybiAiT3ZlcnNjYW4iOworCWNhc2UgSERNSV9TQ0FOX01PREVfVU5ERVJTQ0FOOgorCQlyZXR1cm4gIlVuZGVyc2NhbiI7CisJY2FzZSBIRE1JX1NDQU5fTU9ERV9SRVNFUlZFRDoKKwkJcmV0dXJuICJSZXNlcnZlZCI7CisJfQorCXJldHVybiAiSW52YWxpZCI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpoZG1pX2NvbG9yaW1ldHJ5X2dldF9uYW1lKGVudW0gaGRtaV9jb2xvcmltZXRyeSBjb2xvcmltZXRyeSkKK3sKKwlzd2l0Y2ggKGNvbG9yaW1ldHJ5KSB7CisJY2FzZSBIRE1JX0NPTE9SSU1FVFJZX05PTkU6CisJCXJldHVybiAiTm8gRGF0YSI7CisJY2FzZSBIRE1JX0NPTE9SSU1FVFJZX0lUVV82MDE6CisJCXJldHVybiAiSVRVNjAxIjsKKwljYXNlIEhETUlfQ09MT1JJTUVUUllfSVRVXzcwOToKKwkJcmV0dXJuICJJVFU3MDkiOworCWNhc2UgSERNSV9DT0xPUklNRVRSWV9FWFRFTkRFRDoKKwkJcmV0dXJuICJFeHRlbmRlZCI7CisJfQorCXJldHVybiAiSW52YWxpZCI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2hkbWlfcGljdHVyZV9hc3BlY3RfZ2V0X25hbWUoZW51bSBoZG1pX3BpY3R1cmVfYXNwZWN0IHBpY3R1cmVfYXNwZWN0KQoreworCXN3aXRjaCAocGljdHVyZV9hc3BlY3QpIHsKKwljYXNlIEhETUlfUElDVFVSRV9BU1BFQ1RfTk9ORToKKwkJcmV0dXJuICJObyBEYXRhIjsKKwljYXNlIEhETUlfUElDVFVSRV9BU1BFQ1RfNF8zOgorCQlyZXR1cm4gIjQ6MyI7CisJY2FzZSBIRE1JX1BJQ1RVUkVfQVNQRUNUXzE2Xzk6CisJCXJldHVybiAiMTY6OSI7CisJY2FzZSBIRE1JX1BJQ1RVUkVfQVNQRUNUX1JFU0VSVkVEOgorCQlyZXR1cm4gIlJlc2VydmVkIjsKKwl9CisJcmV0dXJuICJJbnZhbGlkIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgoraGRtaV9hY3RpdmVfYXNwZWN0X2dldF9uYW1lKGVudW0gaGRtaV9hY3RpdmVfYXNwZWN0IGFjdGl2ZV9hc3BlY3QpCit7CisJaWYgKGFjdGl2ZV9hc3BlY3QgPCAwIHx8IGFjdGl2ZV9hc3BlY3QgPiAweGYpCisJCXJldHVybiAiSW52YWxpZCI7CisKKwlzd2l0Y2ggKGFjdGl2ZV9hc3BlY3QpIHsKKwljYXNlIEhETUlfQUNUSVZFX0FTUEVDVF8xNl85X1RPUDoKKwkJcmV0dXJuICIxNjo5IFRvcCI7CisJY2FzZSBIRE1JX0FDVElWRV9BU1BFQ1RfMTRfOV9UT1A6CisJCXJldHVybiAiMTQ6OSBUb3AiOworCWNhc2UgSERNSV9BQ1RJVkVfQVNQRUNUXzE2XzlfQ0VOVEVSOgorCQlyZXR1cm4gIjE2OjkgQ2VudGVyIjsKKwljYXNlIEhETUlfQUNUSVZFX0FTUEVDVF9QSUNUVVJFOgorCQlyZXR1cm4gIlNhbWUgYXMgUGljdHVyZSI7CisJY2FzZSBIRE1JX0FDVElWRV9BU1BFQ1RfNF8zOgorCQlyZXR1cm4gIjQ6MyI7CisJY2FzZSBIRE1JX0FDVElWRV9BU1BFQ1RfMTZfOToKKwkJcmV0dXJuICIxNjo5IjsKKwljYXNlIEhETUlfQUNUSVZFX0FTUEVDVF8xNF85OgorCQlyZXR1cm4gIjE0OjkiOworCWNhc2UgSERNSV9BQ1RJVkVfQVNQRUNUXzRfM19TUF8xNF85OgorCQlyZXR1cm4gIjQ6MyBTUCAxNDo5IjsKKwljYXNlIEhETUlfQUNUSVZFX0FTUEVDVF8xNl85X1NQXzE0Xzk6CisJCXJldHVybiAiMTY6OSBTUCAxNDo5IjsKKwljYXNlIEhETUlfQUNUSVZFX0FTUEVDVF8xNl85X1NQXzRfMzoKKwkJcmV0dXJuICIxNjo5IFNQIDQ6MyI7CisJfQorCXJldHVybiAiUmVzZXJ2ZWQiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitoZG1pX2V4dGVuZGVkX2NvbG9yaW1ldHJ5X2dldF9uYW1lKGVudW0gaGRtaV9leHRlbmRlZF9jb2xvcmltZXRyeSBleHRfY29sKQoreworCXN3aXRjaCAoZXh0X2NvbCkgeworCWNhc2UgSERNSV9FWFRFTkRFRF9DT0xPUklNRVRSWV9YVl9ZQ0NfNjAxOgorCQlyZXR1cm4gInh2WUNDIDYwMSI7CisJY2FzZSBIRE1JX0VYVEVOREVEX0NPTE9SSU1FVFJZX1hWX1lDQ183MDk6CisJCXJldHVybiAieHZZQ0MgNzA5IjsKKwljYXNlIEhETUlfRVhURU5ERURfQ09MT1JJTUVUUllfU19ZQ0NfNjAxOgorCQlyZXR1cm4gInNZQ0MgNjAxIjsKKwljYXNlIEhETUlfRVhURU5ERURfQ09MT1JJTUVUUllfQURPQkVfWUNDXzYwMToKKwkJcmV0dXJuICJBZG9iZSBZQ0MgNjAxIjsKKwljYXNlIEhETUlfRVhURU5ERURfQ09MT1JJTUVUUllfQURPQkVfUkdCOgorCQlyZXR1cm4gIkFkb2JlIFJHQiI7CisJY2FzZSBIRE1JX0VYVEVOREVEX0NPTE9SSU1FVFJZX0JUMjAyMF9DT05TVF9MVU06CisJCXJldHVybiAiQlQuMjAyMCBDb25zdGFudCBMdW1pbmFuY2UiOworCWNhc2UgSERNSV9FWFRFTkRFRF9DT0xPUklNRVRSWV9CVDIwMjA6CisJCXJldHVybiAiQlQuMjAyMCI7CisJY2FzZSBIRE1JX0VYVEVOREVEX0NPTE9SSU1FVFJZX1JFU0VSVkVEOgorCQlyZXR1cm4gIlJlc2VydmVkIjsKKwl9CisJcmV0dXJuICJJbnZhbGlkIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgoraGRtaV9xdWFudGl6YXRpb25fcmFuZ2VfZ2V0X25hbWUoZW51bSBoZG1pX3F1YW50aXphdGlvbl9yYW5nZSBxcmFuZ2UpCit7CisJc3dpdGNoIChxcmFuZ2UpIHsKKwljYXNlIEhETUlfUVVBTlRJWkFUSU9OX1JBTkdFX0RFRkFVTFQ6CisJCXJldHVybiAiRGVmYXVsdCI7CisJY2FzZSBIRE1JX1FVQU5USVpBVElPTl9SQU5HRV9MSU1JVEVEOgorCQlyZXR1cm4gIkxpbWl0ZWQiOworCWNhc2UgSERNSV9RVUFOVElaQVRJT05fUkFOR0VfRlVMTDoKKwkJcmV0dXJuICJGdWxsIjsKKwljYXNlIEhETUlfUVVBTlRJWkFUSU9OX1JBTkdFX1JFU0VSVkVEOgorCQlyZXR1cm4gIlJlc2VydmVkIjsKKwl9CisJcmV0dXJuICJJbnZhbGlkIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmhkbWlfbnVwc19nZXRfbmFtZShlbnVtIGhkbWlfbnVwcyBudXBzKQoreworCXN3aXRjaCAobnVwcykgeworCWNhc2UgSERNSV9OVVBTX1VOS05PV046CisJCXJldHVybiAiVW5rbm93biBOb24tdW5pZm9ybSBTY2FsaW5nIjsKKwljYXNlIEhETUlfTlVQU19IT1JJWk9OVEFMOgorCQlyZXR1cm4gIkhvcml6b250YWxseSBTY2FsZWQiOworCWNhc2UgSERNSV9OVVBTX1ZFUlRJQ0FMOgorCQlyZXR1cm4gIlZlcnRpY2FsbHkgU2NhbGVkIjsKKwljYXNlIEhETUlfTlVQU19CT1RIOgorCQlyZXR1cm4gIkhvcml6b250YWxseSBhbmQgVmVydGljYWxseSBTY2FsZWQiOworCX0KKwlyZXR1cm4gIkludmFsaWQiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitoZG1pX3ljY19xdWFudGl6YXRpb25fcmFuZ2VfZ2V0X25hbWUoZW51bSBoZG1pX3ljY19xdWFudGl6YXRpb25fcmFuZ2UgcXJhbmdlKQoreworCXN3aXRjaCAocXJhbmdlKSB7CisJY2FzZSBIRE1JX1lDQ19RVUFOVElaQVRJT05fUkFOR0VfTElNSVRFRDoKKwkJcmV0dXJuICJMaW1pdGVkIjsKKwljYXNlIEhETUlfWUNDX1FVQU5USVpBVElPTl9SQU5HRV9GVUxMOgorCQlyZXR1cm4gIkZ1bGwiOworCX0KKwlyZXR1cm4gIkludmFsaWQiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitoZG1pX2NvbnRlbnRfdHlwZV9nZXRfbmFtZShlbnVtIGhkbWlfY29udGVudF90eXBlIGNvbnRlbnRfdHlwZSkKK3sKKwlzd2l0Y2ggKGNvbnRlbnRfdHlwZSkgeworCWNhc2UgSERNSV9DT05URU5UX1RZUEVfR1JBUEhJQ1M6CisJCXJldHVybiAiR3JhcGhpY3MiOworCWNhc2UgSERNSV9DT05URU5UX1RZUEVfUEhPVE86CisJCXJldHVybiAiUGhvdG8iOworCWNhc2UgSERNSV9DT05URU5UX1RZUEVfQ0lORU1BOgorCQlyZXR1cm4gIkNpbmVtYSI7CisJY2FzZSBIRE1JX0NPTlRFTlRfVFlQRV9HQU1FOgorCQlyZXR1cm4gIkdhbWUiOworCX0KKwlyZXR1cm4gIkludmFsaWQiOworfQorCisvKioKKyAqIGhkbWlfYXZpX2luZm9mcmFtZV9sb2coKSAtIGxvZyBpbmZvIG9mIEhETUkgQVZJIGluZm9mcmFtZQorICogQGxldmVsOiBsb2dnaW5nIGxldmVsCisgKiBAZGV2OiBkZXZpY2UKKyAqIEBmcmFtZTogSERNSSBBVkkgaW5mb2ZyYW1lCisgKi8KK3N0YXRpYyB2b2lkIGhkbWlfYXZpX2luZm9mcmFtZV9sb2coY29uc3QgY2hhciAqbGV2ZWwsCisJCQkJICAgc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBoZG1pX2F2aV9pbmZvZnJhbWUgKmZyYW1lKQoreworCWhkbWlfaW5mb2ZyYW1lX2xvZ19oZWFkZXIobGV2ZWwsIGRldiwKKwkJCQkgIChzdHJ1Y3QgaGRtaV9hbnlfaW5mb2ZyYW1lICopZnJhbWUpOworCisJaGRtaV9sb2coIiAgICBjb2xvcnNwYWNlOiAlc1xuIiwKKwkJCWhkbWlfY29sb3JzcGFjZV9nZXRfbmFtZShmcmFtZS0+Y29sb3JzcGFjZSkpOworCWhkbWlfbG9nKCIgICAgc2NhbiBtb2RlOiAlc1xuIiwKKwkJCWhkbWlfc2Nhbl9tb2RlX2dldF9uYW1lKGZyYW1lLT5zY2FuX21vZGUpKTsKKwloZG1pX2xvZygiICAgIGNvbG9yaW1ldHJ5OiAlc1xuIiwKKwkJCWhkbWlfY29sb3JpbWV0cnlfZ2V0X25hbWUoZnJhbWUtPmNvbG9yaW1ldHJ5KSk7CisJaGRtaV9sb2coIiAgICBwaWN0dXJlIGFzcGVjdDogJXNcbiIsCisJCQloZG1pX3BpY3R1cmVfYXNwZWN0X2dldF9uYW1lKGZyYW1lLT5waWN0dXJlX2FzcGVjdCkpOworCWhkbWlfbG9nKCIgICAgYWN0aXZlIGFzcGVjdDogJXNcbiIsCisJCQloZG1pX2FjdGl2ZV9hc3BlY3RfZ2V0X25hbWUoZnJhbWUtPmFjdGl2ZV9hc3BlY3QpKTsKKwloZG1pX2xvZygiICAgIGl0YzogJXNcbiIsIGZyYW1lLT5pdGMgPyAiSVQgQ29udGVudCIgOiAiTm8gRGF0YSIpOworCWhkbWlfbG9nKCIgICAgZXh0ZW5kZWQgY29sb3JpbWV0cnk6ICVzXG4iLAorCQkJaGRtaV9leHRlbmRlZF9jb2xvcmltZXRyeV9nZXRfbmFtZShmcmFtZS0+ZXh0ZW5kZWRfY29sb3JpbWV0cnkpKTsKKwloZG1pX2xvZygiICAgIHF1YW50aXphdGlvbiByYW5nZTogJXNcbiIsCisJCQloZG1pX3F1YW50aXphdGlvbl9yYW5nZV9nZXRfbmFtZShmcmFtZS0+cXVhbnRpemF0aW9uX3JhbmdlKSk7CisJaGRtaV9sb2coIiAgICBudXBzOiAlc1xuIiwgaGRtaV9udXBzX2dldF9uYW1lKGZyYW1lLT5udXBzKSk7CisJaGRtaV9sb2coIiAgICB2aWRlbyBjb2RlOiAldVxuIiwgZnJhbWUtPnZpZGVvX2NvZGUpOworCWhkbWlfbG9nKCIgICAgeWNjIHF1YW50aXphdGlvbiByYW5nZTogJXNcbiIsCisJCQloZG1pX3ljY19xdWFudGl6YXRpb25fcmFuZ2VfZ2V0X25hbWUoZnJhbWUtPnljY19xdWFudGl6YXRpb25fcmFuZ2UpKTsKKwloZG1pX2xvZygiICAgIGhkbWkgY29udGVudCB0eXBlOiAlc1xuIiwKKwkJCWhkbWlfY29udGVudF90eXBlX2dldF9uYW1lKGZyYW1lLT5jb250ZW50X3R5cGUpKTsKKwloZG1pX2xvZygiICAgIHBpeGVsIHJlcGVhdDogJXVcbiIsIGZyYW1lLT5waXhlbF9yZXBlYXQpOworCWhkbWlfbG9nKCIgICAgYmFyIHRvcCAldSwgYm90dG9tICV1LCBsZWZ0ICV1LCByaWdodCAldVxuIiwKKwkJCWZyYW1lLT50b3BfYmFyLCBmcmFtZS0+Ym90dG9tX2JhciwKKwkJCWZyYW1lLT5sZWZ0X2JhciwgZnJhbWUtPnJpZ2h0X2Jhcik7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpoZG1pX3NwZF9zZGlfZ2V0X25hbWUoZW51bSBoZG1pX3NwZF9zZGkgc2RpKQoreworCWlmIChzZGkgPCAwIHx8IHNkaSA+IDB4ZmYpCisJCXJldHVybiAiSW52YWxpZCI7CisJc3dpdGNoIChzZGkpIHsKKwljYXNlIEhETUlfU1BEX1NESV9VTktOT1dOOgorCQlyZXR1cm4gIlVua25vd24iOworCWNhc2UgSERNSV9TUERfU0RJX0RTVEI6CisJCXJldHVybiAiRGlnaXRhbCBTVEIiOworCWNhc2UgSERNSV9TUERfU0RJX0RWRFA6CisJCXJldHVybiAiRFZEIFBsYXllciI7CisJY2FzZSBIRE1JX1NQRF9TRElfRFZIUzoKKwkJcmV0dXJuICJELVZIUyI7CisJY2FzZSBIRE1JX1NQRF9TRElfSEREVlI6CisJCXJldHVybiAiSEREIFZpZGVvcmVjb3JkZXIiOworCWNhc2UgSERNSV9TUERfU0RJX0RWQzoKKwkJcmV0dXJuICJEVkMiOworCWNhc2UgSERNSV9TUERfU0RJX0RTQzoKKwkJcmV0dXJuICJEU0MiOworCWNhc2UgSERNSV9TUERfU0RJX1ZDRDoKKwkJcmV0dXJuICJWaWRlbyBDRCI7CisJY2FzZSBIRE1JX1NQRF9TRElfR0FNRToKKwkJcmV0dXJuICJHYW1lIjsKKwljYXNlIEhETUlfU1BEX1NESV9QQzoKKwkJcmV0dXJuICJQQyBHZW5lcmFsIjsKKwljYXNlIEhETUlfU1BEX1NESV9CRDoKKwkJcmV0dXJuICJCbHUtUmF5IERpc2MgKEJEKSI7CisJY2FzZSBIRE1JX1NQRF9TRElfU0FDRDoKKwkJcmV0dXJuICJTdXBlciBBdWRpbyBDRCI7CisJY2FzZSBIRE1JX1NQRF9TRElfSEREVkQ6CisJCXJldHVybiAiSEQgRFZEIjsKKwljYXNlIEhETUlfU1BEX1NESV9QTVA6CisJCXJldHVybiAiUE1QIjsKKwl9CisJcmV0dXJuICJSZXNlcnZlZCI7Cit9CisKKy8qKgorICogaGRtaV9zcGRfaW5mb2ZyYW1lX2xvZygpIC0gbG9nIGluZm8gb2YgSERNSSBTUEQgaW5mb2ZyYW1lCisgKiBAbGV2ZWw6IGxvZ2dpbmcgbGV2ZWwKKyAqIEBkZXY6IGRldmljZQorICogQGZyYW1lOiBIRE1JIFNQRCBpbmZvZnJhbWUKKyAqLworc3RhdGljIHZvaWQgaGRtaV9zcGRfaW5mb2ZyYW1lX2xvZyhjb25zdCBjaGFyICpsZXZlbCwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGhkbWlfc3BkX2luZm9mcmFtZSAqZnJhbWUpCit7CisJdTggYnVmWzE3XTsKKworCWhkbWlfaW5mb2ZyYW1lX2xvZ19oZWFkZXIobGV2ZWwsIGRldiwKKwkJCQkgIChzdHJ1Y3QgaGRtaV9hbnlfaW5mb2ZyYW1lICopZnJhbWUpOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCisJc3RybmNweShidWYsIGZyYW1lLT52ZW5kb3IsIDgpOworCWhkbWlfbG9nKCIgICAgdmVuZG9yOiAlc1xuIiwgYnVmKTsKKwlzdHJuY3B5KGJ1ZiwgZnJhbWUtPnByb2R1Y3QsIDE2KTsKKwloZG1pX2xvZygiICAgIHByb2R1Y3Q6ICVzXG4iLCBidWYpOworCWhkbWlfbG9nKCIgICAgc291cmNlIGRldmljZSBpbmZvcm1hdGlvbjogJXMgKDB4JXgpXG4iLAorCQloZG1pX3NwZF9zZGlfZ2V0X25hbWUoZnJhbWUtPnNkaSksIGZyYW1lLT5zZGkpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitoZG1pX2F1ZGlvX2NvZGluZ190eXBlX2dldF9uYW1lKGVudW0gaGRtaV9hdWRpb19jb2RpbmdfdHlwZSBjb2RpbmdfdHlwZSkKK3sKKwlzd2l0Y2ggKGNvZGluZ190eXBlKSB7CisJY2FzZSBIRE1JX0FVRElPX0NPRElOR19UWVBFX1NUUkVBTToKKwkJcmV0dXJuICJSZWZlciB0byBTdHJlYW0gSGVhZGVyIjsKKwljYXNlIEhETUlfQVVESU9fQ09ESU5HX1RZUEVfUENNOgorCQlyZXR1cm4gIlBDTSI7CisJY2FzZSBIRE1JX0FVRElPX0NPRElOR19UWVBFX0FDMzoKKwkJcmV0dXJuICJBQy0zIjsKKwljYXNlIEhETUlfQVVESU9fQ09ESU5HX1RZUEVfTVBFRzE6CisJCXJldHVybiAiTVBFRzEiOworCWNhc2UgSERNSV9BVURJT19DT0RJTkdfVFlQRV9NUDM6CisJCXJldHVybiAiTVAzIjsKKwljYXNlIEhETUlfQVVESU9fQ09ESU5HX1RZUEVfTVBFRzI6CisJCXJldHVybiAiTVBFRzIiOworCWNhc2UgSERNSV9BVURJT19DT0RJTkdfVFlQRV9BQUNfTEM6CisJCXJldHVybiAiQUFDIjsKKwljYXNlIEhETUlfQVVESU9fQ09ESU5HX1RZUEVfRFRTOgorCQlyZXR1cm4gIkRUUyI7CisJY2FzZSBIRE1JX0FVRElPX0NPRElOR19UWVBFX0FUUkFDOgorCQlyZXR1cm4gIkFUUkFDIjsKKwljYXNlIEhETUlfQVVESU9fQ09ESU5HX1RZUEVfRFNEOgorCQlyZXR1cm4gIk9uZSBCaXQgQXVkaW8iOworCWNhc2UgSERNSV9BVURJT19DT0RJTkdfVFlQRV9FQUMzOgorCQlyZXR1cm4gIkRvbGJ5IERpZ2l0YWwgKyI7CisJY2FzZSBIRE1JX0FVRElPX0NPRElOR19UWVBFX0RUU19IRDoKKwkJcmV0dXJuICJEVFMtSEQiOworCWNhc2UgSERNSV9BVURJT19DT0RJTkdfVFlQRV9NTFA6CisJCXJldHVybiAiTUFUIChNTFApIjsKKwljYXNlIEhETUlfQVVESU9fQ09ESU5HX1RZUEVfRFNUOgorCQlyZXR1cm4gIkRTVCI7CisJY2FzZSBIRE1JX0FVRElPX0NPRElOR19UWVBFX1dNQV9QUk86CisJCXJldHVybiAiV01BIFBSTyI7CisJY2FzZSBIRE1JX0FVRElPX0NPRElOR19UWVBFX0NYVDoKKwkJcmV0dXJuICJSZWZlciB0byBDWFQiOworCX0KKwlyZXR1cm4gIkludmFsaWQiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitoZG1pX2F1ZGlvX3NhbXBsZV9zaXplX2dldF9uYW1lKGVudW0gaGRtaV9hdWRpb19zYW1wbGVfc2l6ZSBzYW1wbGVfc2l6ZSkKK3sKKwlzd2l0Y2ggKHNhbXBsZV9zaXplKSB7CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9TSVpFX1NUUkVBTToKKwkJcmV0dXJuICJSZWZlciB0byBTdHJlYW0gSGVhZGVyIjsKKwljYXNlIEhETUlfQVVESU9fU0FNUExFX1NJWkVfMTY6CisJCXJldHVybiAiMTYgYml0IjsKKwljYXNlIEhETUlfQVVESU9fU0FNUExFX1NJWkVfMjA6CisJCXJldHVybiAiMjAgYml0IjsKKwljYXNlIEhETUlfQVVESU9fU0FNUExFX1NJWkVfMjQ6CisJCXJldHVybiAiMjQgYml0IjsKKwl9CisJcmV0dXJuICJJbnZhbGlkIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgoraGRtaV9hdWRpb19zYW1wbGVfZnJlcXVlbmN5X2dldF9uYW1lKGVudW0gaGRtaV9hdWRpb19zYW1wbGVfZnJlcXVlbmN5IGZyZXEpCit7CisJc3dpdGNoIChmcmVxKSB7CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfU1RSRUFNOgorCQlyZXR1cm4gIlJlZmVyIHRvIFN0cmVhbSBIZWFkZXIiOworCWNhc2UgSERNSV9BVURJT19TQU1QTEVfRlJFUVVFTkNZXzMyMDAwOgorCQlyZXR1cm4gIjMyIGtIeiI7CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfNDQxMDA6CisJCXJldHVybiAiNDQuMSBrSHogKENEKSI7CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfNDgwMDA6CisJCXJldHVybiAiNDgga0h6IjsKKwljYXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV84ODIwMDoKKwkJcmV0dXJuICI4OC4yIGtIeiI7CisJY2FzZSBIRE1JX0FVRElPX1NBTVBMRV9GUkVRVUVOQ1lfOTYwMDA6CisJCXJldHVybiAiOTYga0h6IjsKKwljYXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV8xNzY0MDA6CisJCXJldHVybiAiMTc2LjQga0h6IjsKKwljYXNlIEhETUlfQVVESU9fU0FNUExFX0ZSRVFVRU5DWV8xOTIwMDA6CisJCXJldHVybiAiMTkyIGtIeiI7CisJfQorCXJldHVybiAiSW52YWxpZCI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2hkbWlfYXVkaW9fY29kaW5nX3R5cGVfZXh0X2dldF9uYW1lKGVudW0gaGRtaV9hdWRpb19jb2RpbmdfdHlwZV9leHQgY3R4KQoreworCWlmIChjdHggPCAwIHx8IGN0eCA+IDB4MWYpCisJCXJldHVybiAiSW52YWxpZCI7CisKKwlzd2l0Y2ggKGN0eCkgeworCWNhc2UgSERNSV9BVURJT19DT0RJTkdfVFlQRV9FWFRfQ1Q6CisJCXJldHVybiAiUmVmZXIgdG8gQ1QiOworCWNhc2UgSERNSV9BVURJT19DT0RJTkdfVFlQRV9FWFRfSEVfQUFDOgorCQlyZXR1cm4gIkhFIEFBQyI7CisJY2FzZSBIRE1JX0FVRElPX0NPRElOR19UWVBFX0VYVF9IRV9BQUNfVjI6CisJCXJldHVybiAiSEUgQUFDIHYyIjsKKwljYXNlIEhETUlfQVVESU9fQ09ESU5HX1RZUEVfRVhUX01QRUdfU1VSUk9VTkQ6CisJCXJldHVybiAiTVBFRyBTVVJST1VORCI7CisJY2FzZSBIRE1JX0FVRElPX0NPRElOR19UWVBFX0VYVF9NUEVHNF9IRV9BQUM6CisJCXJldHVybiAiTVBFRy00IEhFIEFBQyI7CisJY2FzZSBIRE1JX0FVRElPX0NPRElOR19UWVBFX0VYVF9NUEVHNF9IRV9BQUNfVjI6CisJCXJldHVybiAiTVBFRy00IEhFIEFBQyB2MiI7CisJY2FzZSBIRE1JX0FVRElPX0NPRElOR19UWVBFX0VYVF9NUEVHNF9BQUNfTEM6CisJCXJldHVybiAiTVBFRy00IEFBQyBMQyI7CisJY2FzZSBIRE1JX0FVRElPX0NPRElOR19UWVBFX0VYVF9EUkE6CisJCXJldHVybiAiRFJBIjsKKwljYXNlIEhETUlfQVVESU9fQ09ESU5HX1RZUEVfRVhUX01QRUc0X0hFX0FBQ19TVVJST1VORDoKKwkJcmV0dXJuICJNUEVHLTQgSEUgQUFDICsgTVBFRyBTdXJyb3VuZCI7CisJY2FzZSBIRE1JX0FVRElPX0NPRElOR19UWVBFX0VYVF9NUEVHNF9BQUNfTENfU1VSUk9VTkQ6CisJCXJldHVybiAiTVBFRy00IEFBQyBMQyArIE1QRUcgU3Vycm91bmQiOworCX0KKwlyZXR1cm4gIlJlc2VydmVkIjsKK30KKworLyoqCisgKiBoZG1pX2F1ZGlvX2luZm9mcmFtZV9sb2coKSAtIGxvZyBpbmZvIG9mIEhETUkgQVVESU8gaW5mb2ZyYW1lCisgKiBAbGV2ZWw6IGxvZ2dpbmcgbGV2ZWwKKyAqIEBkZXY6IGRldmljZQorICogQGZyYW1lOiBIRE1JIEFVRElPIGluZm9mcmFtZQorICovCitzdGF0aWMgdm9pZCBoZG1pX2F1ZGlvX2luZm9mcmFtZV9sb2coY29uc3QgY2hhciAqbGV2ZWwsCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgaGRtaV9hdWRpb19pbmZvZnJhbWUgKmZyYW1lKQoreworCWhkbWlfaW5mb2ZyYW1lX2xvZ19oZWFkZXIobGV2ZWwsIGRldiwKKwkJCQkgIChzdHJ1Y3QgaGRtaV9hbnlfaW5mb2ZyYW1lICopZnJhbWUpOworCisJaWYgKGZyYW1lLT5jaGFubmVscykKKwkJaGRtaV9sb2coIiAgICBjaGFubmVsczogJXVcbiIsIGZyYW1lLT5jaGFubmVscyAtIDEpOworCWVsc2UKKwkJaGRtaV9sb2coIiAgICBjaGFubmVsczogUmVmZXIgdG8gc3RyZWFtIGhlYWRlclxuIik7CisJaGRtaV9sb2coIiAgICBjb2RpbmcgdHlwZTogJXNcbiIsCisJCQloZG1pX2F1ZGlvX2NvZGluZ190eXBlX2dldF9uYW1lKGZyYW1lLT5jb2RpbmdfdHlwZSkpOworCWhkbWlfbG9nKCIgICAgc2FtcGxlIHNpemU6ICVzXG4iLAorCQkJaGRtaV9hdWRpb19zYW1wbGVfc2l6ZV9nZXRfbmFtZShmcmFtZS0+c2FtcGxlX3NpemUpKTsKKwloZG1pX2xvZygiICAgIHNhbXBsZSBmcmVxdWVuY3k6ICVzXG4iLAorCQkJaGRtaV9hdWRpb19zYW1wbGVfZnJlcXVlbmN5X2dldF9uYW1lKGZyYW1lLT5zYW1wbGVfZnJlcXVlbmN5KSk7CisJaGRtaV9sb2coIiAgICBjb2RpbmcgdHlwZSBleHQ6ICVzXG4iLAorCQkJaGRtaV9hdWRpb19jb2RpbmdfdHlwZV9leHRfZ2V0X25hbWUoZnJhbWUtPmNvZGluZ190eXBlX2V4dCkpOworCWhkbWlfbG9nKCIgICAgY2hhbm5lbCBhbGxvY2F0aW9uOiAweCV4XG4iLAorCQkJZnJhbWUtPmNoYW5uZWxfYWxsb2NhdGlvbik7CisJaGRtaV9sb2coIiAgICBsZXZlbCBzaGlmdCB2YWx1ZTogJXUgZEJcbiIsCisJCQlmcmFtZS0+bGV2ZWxfc2hpZnRfdmFsdWUpOworCWhkbWlfbG9nKCIgICAgZG93bm1peCBpbmhpYml0OiAlc1xuIiwKKwkJCWZyYW1lLT5kb3dubWl4X2luaGliaXQgPyAiWWVzIiA6ICJObyIpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitoZG1pXzNkX3N0cnVjdHVyZV9nZXRfbmFtZShlbnVtIGhkbWlfM2Rfc3RydWN0dXJlIHMzZF9zdHJ1Y3QpCit7CisJaWYgKHMzZF9zdHJ1Y3QgPCAwIHx8IHMzZF9zdHJ1Y3QgPiAweGYpCisJCXJldHVybiAiSW52YWxpZCI7CisKKwlzd2l0Y2ggKHMzZF9zdHJ1Y3QpIHsKKwljYXNlIEhETUlfM0RfU1RSVUNUVVJFX0ZSQU1FX1BBQ0tJTkc6CisJCXJldHVybiAiRnJhbWUgUGFja2luZyI7CisJY2FzZSBIRE1JXzNEX1NUUlVDVFVSRV9GSUVMRF9BTFRFUk5BVElWRToKKwkJcmV0dXJuICJGaWVsZCBBbHRlcm5hdGl2ZSI7CisJY2FzZSBIRE1JXzNEX1NUUlVDVFVSRV9MSU5FX0FMVEVSTkFUSVZFOgorCQlyZXR1cm4gIkxpbmUgQWx0ZXJuYXRpdmUiOworCWNhc2UgSERNSV8zRF9TVFJVQ1RVUkVfU0lERV9CWV9TSURFX0ZVTEw6CisJCXJldHVybiAiU2lkZS1ieS1zaWRlIChGdWxsKSI7CisJY2FzZSBIRE1JXzNEX1NUUlVDVFVSRV9MX0RFUFRIOgorCQlyZXR1cm4gIkwgKyBEZXB0aCI7CisJY2FzZSBIRE1JXzNEX1NUUlVDVFVSRV9MX0RFUFRIX0dGWF9HRlhfREVQVEg6CisJCXJldHVybiAiTCArIERlcHRoICsgR3JhcGhpY3MgKyBHcmFwaGljcy1kZXB0aCI7CisJY2FzZSBIRE1JXzNEX1NUUlVDVFVSRV9UT1BfQU5EX0JPVFRPTToKKwkJcmV0dXJuICJUb3AtYW5kLUJvdHRvbSI7CisJY2FzZSBIRE1JXzNEX1NUUlVDVFVSRV9TSURFX0JZX1NJREVfSEFMRjoKKwkJcmV0dXJuICJTaWRlLWJ5LXNpZGUgKEhhbGYpIjsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuICJSZXNlcnZlZCI7Cit9CisKKy8qKgorICogaGRtaV92ZW5kb3JfaW5mb2ZyYW1lX2xvZygpIC0gbG9nIGluZm8gb2YgSERNSSBWRU5ET1IgaW5mb2ZyYW1lCisgKiBAbGV2ZWw6IGxvZ2dpbmcgbGV2ZWwKKyAqIEBkZXY6IGRldmljZQorICogQGZyYW1lOiBIRE1JIFZFTkRPUiBpbmZvZnJhbWUKKyAqLworc3RhdGljIHZvaWQKK2hkbWlfdmVuZG9yX2FueV9pbmZvZnJhbWVfbG9nKGNvbnN0IGNoYXIgKmxldmVsLAorCQkJICAgICAgc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgdW5pb24gaGRtaV92ZW5kb3JfYW55X2luZm9mcmFtZSAqZnJhbWUpCit7CisJc3RydWN0IGhkbWlfdmVuZG9yX2luZm9mcmFtZSAqaHZmID0gJmZyYW1lLT5oZG1pOworCisJaGRtaV9pbmZvZnJhbWVfbG9nX2hlYWRlcihsZXZlbCwgZGV2LAorCQkJCSAgKHN0cnVjdCBoZG1pX2FueV9pbmZvZnJhbWUgKilmcmFtZSk7CisKKwlpZiAoZnJhbWUtPmFueS5vdWkgIT0gSERNSV9JRUVFX09VSSkgeworCQloZG1pX2xvZygiICAgIG5vdCBhIEhETUkgdmVuZG9yIGluZm9mcmFtZVxuIik7CisJCXJldHVybjsKKwl9CisJaWYgKGh2Zi0+dmljID09IDAgJiYgaHZmLT5zM2Rfc3RydWN0ID09IEhETUlfM0RfU1RSVUNUVVJFX0lOVkFMSUQpIHsKKwkJaGRtaV9sb2coIiAgICBlbXB0eSBmcmFtZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoaHZmLT52aWMpCisJCWhkbWlfbG9nKCIgICAgSERNSSBWSUM6ICV1XG4iLCBodmYtPnZpYyk7CisJaWYgKGh2Zi0+czNkX3N0cnVjdCAhPSBIRE1JXzNEX1NUUlVDVFVSRV9JTlZBTElEKSB7CisJCWhkbWlfbG9nKCIgICAgM0Qgc3RydWN0dXJlOiAlc1xuIiwKKwkJCQloZG1pXzNkX3N0cnVjdHVyZV9nZXRfbmFtZShodmYtPnMzZF9zdHJ1Y3QpKTsKKwkJaWYgKGh2Zi0+czNkX3N0cnVjdCA+PSBIRE1JXzNEX1NUUlVDVFVSRV9TSURFX0JZX1NJREVfSEFMRikKKwkJCWhkbWlfbG9nKCIgICAgM0QgZXh0ZW5zaW9uIGRhdGE6ICVkXG4iLAorCQkJCQlodmYtPnMzZF9leHRfZGF0YSk7CisJfQorfQorCisvKioKKyAqIGhkbWlfaW5mb2ZyYW1lX2xvZygpIC0gbG9nIGluZm8gb2YgSERNSSBpbmZvZnJhbWUKKyAqIEBsZXZlbDogbG9nZ2luZyBsZXZlbAorICogQGRldjogZGV2aWNlCisgKiBAZnJhbWU6IEhETUkgaW5mb2ZyYW1lCisgKi8KK3ZvaWQgaGRtaV9pbmZvZnJhbWVfbG9nKGNvbnN0IGNoYXIgKmxldmVsLAorCQkJc3RydWN0IGRldmljZSAqZGV2LAorCQkJdW5pb24gaGRtaV9pbmZvZnJhbWUgKmZyYW1lKQoreworCXN3aXRjaCAoZnJhbWUtPmFueS50eXBlKSB7CisJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX0FWSToKKwkJaGRtaV9hdmlfaW5mb2ZyYW1lX2xvZyhsZXZlbCwgZGV2LCAmZnJhbWUtPmF2aSk7CisJCWJyZWFrOworCWNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9TUEQ6CisJCWhkbWlfc3BkX2luZm9mcmFtZV9sb2cobGV2ZWwsIGRldiwgJmZyYW1lLT5zcGQpOworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVVESU86CisJCWhkbWlfYXVkaW9faW5mb2ZyYW1lX2xvZyhsZXZlbCwgZGV2LCAmZnJhbWUtPmF1ZGlvKTsKKwkJYnJlYWs7CisJY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX1ZFTkRPUjoKKwkJaGRtaV92ZW5kb3JfYW55X2luZm9mcmFtZV9sb2cobGV2ZWwsIGRldiwgJmZyYW1lLT52ZW5kb3IpOworCQlicmVhazsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGhkbWlfaW5mb2ZyYW1lX2xvZyk7CisKKy8qKgorICogaGRtaV9hdmlfaW5mb2ZyYW1lX3VucGFjaygpIC0gdW5wYWNrIGJpbmFyeSBidWZmZXIgdG8gYSBIRE1JIEFWSSBpbmZvZnJhbWUKKyAqIEBidWZmZXI6IHNvdXJjZSBidWZmZXIKKyAqIEBmcmFtZTogSERNSSBBVkkgaW5mb2ZyYW1lCisgKgorICogVW5wYWNrcyB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIGJpbmFyeSBAYnVmZmVyIGludG8gYSBzdHJ1Y3R1cmVkCisgKiBAZnJhbWUgb2YgdGhlIEhETUkgQXV4aWxpYXJ5IFZpZGVvIChBVkkpIGluZm9ybWF0aW9uIGZyYW1lLgorICogQWxzbyB2ZXJpZmllcyB0aGUgY2hlY2tzdW0gYXMgcmVxdWlyZWQgYnkgc2VjdGlvbiA1LjMuNSBvZiB0aGUgSERNSSAxLjQKKyAqIHNwZWNpZmljYXRpb24uCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaGRtaV9hdmlfaW5mb2ZyYW1lX3VucGFjayhzdHJ1Y3QgaGRtaV9hdmlfaW5mb2ZyYW1lICpmcmFtZSwKKwkJCQkgICAgIHZvaWQgKmJ1ZmZlcikKK3sKKwl1OCAqcHRyID0gYnVmZmVyOworCWludCByZXQ7CisKKwlpZiAocHRyWzBdICE9IEhETUlfSU5GT0ZSQU1FX1RZUEVfQVZJIHx8CisJICAgIHB0clsxXSAhPSAyIHx8CisJICAgIHB0clsyXSAhPSBIRE1JX0FWSV9JTkZPRlJBTUVfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoaGRtaV9pbmZvZnJhbWVfY2hlY2tzdW0oYnVmZmVyLCBIRE1JX0lORk9GUkFNRV9TSVpFKEFWSSkpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gaGRtaV9hdmlfaW5mb2ZyYW1lX2luaXQoZnJhbWUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlwdHIgKz0gSERNSV9JTkZPRlJBTUVfSEVBREVSX1NJWkU7CisKKwlmcmFtZS0+Y29sb3JzcGFjZSA9IChwdHJbMF0gPj4gNSkgJiAweDM7CisJaWYgKHB0clswXSAmIDB4MTApCisJCWZyYW1lLT5hY3RpdmVfYXNwZWN0ID0gcHRyWzFdICYgMHhmOworCWlmIChwdHJbMF0gJiAweDgpIHsKKwkJZnJhbWUtPnRvcF9iYXIgPSAocHRyWzVdIDw8IDgpICsgcHRyWzZdOworCQlmcmFtZS0+Ym90dG9tX2JhciA9IChwdHJbN10gPDwgOCkgKyBwdHJbOF07CisJfQorCWlmIChwdHJbMF0gJiAweDQpIHsKKwkJZnJhbWUtPmxlZnRfYmFyID0gKHB0cls5XSA8PCA4KSArIHB0clsxMF07CisJCWZyYW1lLT5yaWdodF9iYXIgPSAocHRyWzExXSA8PCA4KSArIHB0clsxMl07CisJfQorCWZyYW1lLT5zY2FuX21vZGUgPSBwdHJbMF0gJiAweDM7CisKKwlmcmFtZS0+Y29sb3JpbWV0cnkgPSAocHRyWzFdID4+IDYpICYgMHgzOworCWZyYW1lLT5waWN0dXJlX2FzcGVjdCA9IChwdHJbMV0gPj4gNCkgJiAweDM7CisJZnJhbWUtPmFjdGl2ZV9hc3BlY3QgPSBwdHJbMV0gJiAweGY7CisKKwlmcmFtZS0+aXRjID0gcHRyWzJdICYgMHg4MCA/IHRydWUgOiBmYWxzZTsKKwlmcmFtZS0+ZXh0ZW5kZWRfY29sb3JpbWV0cnkgPSAocHRyWzJdID4+IDQpICYgMHg3OworCWZyYW1lLT5xdWFudGl6YXRpb25fcmFuZ2UgPSAocHRyWzJdID4+IDIpICYgMHgzOworCWZyYW1lLT5udXBzID0gcHRyWzJdICYgMHgzOworCisJZnJhbWUtPnZpZGVvX2NvZGUgPSBwdHJbM10gJiAweDdmOworCWZyYW1lLT55Y2NfcXVhbnRpemF0aW9uX3JhbmdlID0gKHB0cls0XSA+PiA2KSAmIDB4MzsKKwlmcmFtZS0+Y29udGVudF90eXBlID0gKHB0cls0XSA+PiA0KSAmIDB4MzsKKworCWZyYW1lLT5waXhlbF9yZXBlYXQgPSBwdHJbNF0gJiAweGY7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBoZG1pX3NwZF9pbmZvZnJhbWVfdW5wYWNrKCkgLSB1bnBhY2sgYmluYXJ5IGJ1ZmZlciB0byBhIEhETUkgU1BEIGluZm9mcmFtZQorICogQGJ1ZmZlcjogc291cmNlIGJ1ZmZlcgorICogQGZyYW1lOiBIRE1JIFNQRCBpbmZvZnJhbWUKKyAqCisgKiBVbnBhY2tzIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gYmluYXJ5IEBidWZmZXIgaW50byBhIHN0cnVjdHVyZWQKKyAqIEBmcmFtZSBvZiB0aGUgSERNSSBTb3VyY2UgUHJvZHVjdCBEZXNjcmlwdGlvbiAoU1BEKSBpbmZvcm1hdGlvbiBmcmFtZS4KKyAqIEFsc28gdmVyaWZpZXMgdGhlIGNoZWNrc3VtIGFzIHJlcXVpcmVkIGJ5IHNlY3Rpb24gNS4zLjUgb2YgdGhlIEhETUkgMS40CisgKiBzcGVjaWZpY2F0aW9uLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgorICovCitzdGF0aWMgaW50IGhkbWlfc3BkX2luZm9mcmFtZV91bnBhY2soc3RydWN0IGhkbWlfc3BkX2luZm9mcmFtZSAqZnJhbWUsCisJCQkJICAgICB2b2lkICpidWZmZXIpCit7CisJdTggKnB0ciA9IGJ1ZmZlcjsKKwlpbnQgcmV0OworCisJaWYgKHB0clswXSAhPSBIRE1JX0lORk9GUkFNRV9UWVBFX1NQRCB8fAorCSAgICBwdHJbMV0gIT0gMSB8fAorCSAgICBwdHJbMl0gIT0gSERNSV9TUERfSU5GT0ZSQU1FX1NJWkUpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGhkbWlfaW5mb2ZyYW1lX2NoZWNrc3VtKGJ1ZmZlciwgSERNSV9JTkZPRlJBTUVfU0laRShTUEQpKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXB0ciArPSBIRE1JX0lORk9GUkFNRV9IRUFERVJfU0laRTsKKworCXJldCA9IGhkbWlfc3BkX2luZm9mcmFtZV9pbml0KGZyYW1lLCBwdHIsIHB0ciArIDgpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmcmFtZS0+c2RpID0gcHRyWzI0XTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGhkbWlfYXVkaW9faW5mb2ZyYW1lX3VucGFjaygpIC0gdW5wYWNrIGJpbmFyeSBidWZmZXIgdG8gYSBIRE1JIEFVRElPIGluZm9mcmFtZQorICogQGJ1ZmZlcjogc291cmNlIGJ1ZmZlcgorICogQGZyYW1lOiBIRE1JIEF1ZGlvIGluZm9mcmFtZQorICoKKyAqIFVucGFja3MgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiBiaW5hcnkgQGJ1ZmZlciBpbnRvIGEgc3RydWN0dXJlZAorICogQGZyYW1lIG9mIHRoZSBIRE1JIEF1ZGlvIGluZm9ybWF0aW9uIGZyYW1lLgorICogQWxzbyB2ZXJpZmllcyB0aGUgY2hlY2tzdW0gYXMgcmVxdWlyZWQgYnkgc2VjdGlvbiA1LjMuNSBvZiB0aGUgSERNSSAxLjQKKyAqIHNwZWNpZmljYXRpb24uCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgaGRtaV9hdWRpb19pbmZvZnJhbWVfdW5wYWNrKHN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSAqZnJhbWUsCisJCQkJICAgICAgIHZvaWQgKmJ1ZmZlcikKK3sKKwl1OCAqcHRyID0gYnVmZmVyOworCWludCByZXQ7CisKKwlpZiAocHRyWzBdICE9IEhETUlfSU5GT0ZSQU1FX1RZUEVfQVVESU8gfHwKKwkgICAgcHRyWzFdICE9IDEgfHwKKwkgICAgcHRyWzJdICE9IEhETUlfQVVESU9fSU5GT0ZSQU1FX1NJWkUpIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGhkbWlfaW5mb2ZyYW1lX2NoZWNrc3VtKGJ1ZmZlciwgSERNSV9JTkZPRlJBTUVfU0laRShBVURJTykpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gaGRtaV9hdWRpb19pbmZvZnJhbWVfaW5pdChmcmFtZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXB0ciArPSBIRE1JX0lORk9GUkFNRV9IRUFERVJfU0laRTsKKworCWZyYW1lLT5jaGFubmVscyA9IHB0clswXSAmIDB4NzsKKwlmcmFtZS0+Y29kaW5nX3R5cGUgPSAocHRyWzBdID4+IDQpICYgMHhmOworCWZyYW1lLT5zYW1wbGVfc2l6ZSA9IHB0clsxXSAmIDB4MzsKKwlmcmFtZS0+c2FtcGxlX2ZyZXF1ZW5jeSA9IChwdHJbMV0gPj4gMikgJiAweDc7CisJZnJhbWUtPmNvZGluZ190eXBlX2V4dCA9IHB0clsyXSAmIDB4MWY7CisJZnJhbWUtPmNoYW5uZWxfYWxsb2NhdGlvbiA9IHB0clszXTsKKwlmcmFtZS0+bGV2ZWxfc2hpZnRfdmFsdWUgPSAocHRyWzRdID4+IDMpICYgMHhmOworCWZyYW1lLT5kb3dubWl4X2luaGliaXQgPSBwdHJbNF0gJiAweDgwID8gdHJ1ZSA6IGZhbHNlOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaGRtaV92ZW5kb3JfaW5mb2ZyYW1lX3VucGFjaygpIC0gdW5wYWNrIGJpbmFyeSBidWZmZXIgdG8gYSBIRE1JIHZlbmRvciBpbmZvZnJhbWUKKyAqIEBidWZmZXI6IHNvdXJjZSBidWZmZXIKKyAqIEBmcmFtZTogSERNSSBWZW5kb3IgaW5mb2ZyYW1lCisgKgorICogVW5wYWNrcyB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIGJpbmFyeSBAYnVmZmVyIGludG8gYSBzdHJ1Y3R1cmVkCisgKiBAZnJhbWUgb2YgdGhlIEhETUkgVmVuZG9yIGluZm9ybWF0aW9uIGZyYW1lLgorICogQWxzbyB2ZXJpZmllcyB0aGUgY2hlY2tzdW0gYXMgcmVxdWlyZWQgYnkgc2VjdGlvbiA1LjMuNSBvZiB0aGUgSERNSSAxLjQKKyAqIHNwZWNpZmljYXRpb24uCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQKK2hkbWlfdmVuZG9yX2FueV9pbmZvZnJhbWVfdW5wYWNrKHVuaW9uIGhkbWlfdmVuZG9yX2FueV9pbmZvZnJhbWUgKmZyYW1lLAorCQkJCSB2b2lkICpidWZmZXIpCit7CisJdTggKnB0ciA9IGJ1ZmZlcjsKKwlzaXplX3QgbGVuZ3RoOworCWludCByZXQ7CisJdTggaGRtaV92aWRlb19mb3JtYXQ7CisJc3RydWN0IGhkbWlfdmVuZG9yX2luZm9mcmFtZSAqaHZmID0gJmZyYW1lLT5oZG1pOworCisJaWYgKHB0clswXSAhPSBIRE1JX0lORk9GUkFNRV9UWVBFX1ZFTkRPUiB8fAorCSAgICBwdHJbMV0gIT0gMSB8fAorCSAgICAocHRyWzJdICE9IDUgJiYgcHRyWzJdICE9IDYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxlbmd0aCA9IHB0clsyXTsKKworCWlmIChoZG1pX2luZm9mcmFtZV9jaGVja3N1bShidWZmZXIsCisJCQkJICAgIEhETUlfSU5GT0ZSQU1FX0hFQURFUl9TSVpFICsgbGVuZ3RoKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXB0ciArPSBIRE1JX0lORk9GUkFNRV9IRUFERVJfU0laRTsKKworCS8qIEhETUkgT1VJICovCisJaWYgKChwdHJbMF0gIT0gMHgwMykgfHwKKwkgICAgKHB0clsxXSAhPSAweDBjKSB8fAorCSAgICAocHRyWzJdICE9IDB4MDApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhkbWlfdmlkZW9fZm9ybWF0ID0gcHRyWzNdID4+IDU7CisKKwlpZiAoaGRtaV92aWRlb19mb3JtYXQgPiAweDIpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gaGRtaV92ZW5kb3JfaW5mb2ZyYW1lX2luaXQoaHZmKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaHZmLT5sZW5ndGggPSBsZW5ndGg7CisKKwlpZiAoaGRtaV92aWRlb19mb3JtYXQgPT0gMHgxKSB7CisJCWh2Zi0+dmljID0gcHRyWzRdOworCX0gZWxzZSBpZiAoaGRtaV92aWRlb19mb3JtYXQgPT0gMHgyKSB7CisJCWh2Zi0+czNkX3N0cnVjdCA9IHB0cls0XSA+PiA0OworCQlpZiAoaHZmLT5zM2Rfc3RydWN0ID49IEhETUlfM0RfU1RSVUNUVVJFX1NJREVfQllfU0lERV9IQUxGKSB7CisJCQlpZiAobGVuZ3RoID09IDYpCisJCQkJaHZmLT5zM2RfZXh0X2RhdGEgPSBwdHJbNV0gPj4gNDsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGhkbWlfaW5mb2ZyYW1lX3VucGFjaygpIC0gdW5wYWNrIGJpbmFyeSBidWZmZXIgdG8gYSBIRE1JIGluZm9mcmFtZQorICogQGJ1ZmZlcjogc291cmNlIGJ1ZmZlcgorICogQGZyYW1lOiBIRE1JIGluZm9mcmFtZQorICoKKyAqIFVucGFja3MgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiBiaW5hcnkgYnVmZmVyIEBidWZmZXIgaW50byBhIHN0cnVjdHVyZWQKKyAqIEBmcmFtZSBvZiBhIEhETUkgaW5mb2ZyYW1lLgorICogQWxzbyB2ZXJpZmllcyB0aGUgY2hlY2tzdW0gYXMgcmVxdWlyZWQgYnkgc2VjdGlvbiA1LjMuNSBvZiB0aGUgSERNSSAxLjQKKyAqIHNwZWNpZmljYXRpb24uCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBoZG1pX2luZm9mcmFtZV91bnBhY2sodW5pb24gaGRtaV9pbmZvZnJhbWUgKmZyYW1lLCB2b2lkICpidWZmZXIpCit7CisJaW50IHJldDsKKwl1OCAqcHRyID0gYnVmZmVyOworCisJc3dpdGNoIChwdHJbMF0pIHsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVZJOgorCQlyZXQgPSBoZG1pX2F2aV9pbmZvZnJhbWVfdW5wYWNrKCZmcmFtZS0+YXZpLCBidWZmZXIpOworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfU1BEOgorCQlyZXQgPSBoZG1pX3NwZF9pbmZvZnJhbWVfdW5wYWNrKCZmcmFtZS0+c3BkLCBidWZmZXIpOworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfQVVESU86CisJCXJldCA9IGhkbWlfYXVkaW9faW5mb2ZyYW1lX3VucGFjaygmZnJhbWUtPmF1ZGlvLCBidWZmZXIpOworCQlicmVhazsKKwljYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfVkVORE9SOgorCQlyZXQgPSBoZG1pX3ZlbmRvcl9hbnlfaW5mb2ZyYW1lX3VucGFjaygmZnJhbWUtPnZlbmRvciwgYnVmZmVyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaGRtaV9pbmZvZnJhbWVfdW5wYWNrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmdhc3RhdGUuYyBiL2RyaXZlcnMvdmlkZW8vdmdhc3RhdGUuYwppbmRleCBiOTFjNDY2Li41NDhjNzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZnYXN0YXRlLmMKKysrIGIvZHJpdmVycy92aWRlby92Z2FzdGF0ZS5jCkBAIC0yLDcgKzIsNyBAQAogICogbGludXgvZHJpdmVycy92aWRlby92Z2FzdGF0ZS5jIC0tIFZHQSBzdGF0ZSBzYXZlL3Jlc3RvcmUKICAqCiAgKiBDb3B5cmlnaHQgMjAwMiBKYW1lcyBTaW1tb25zCi0gKiAKKyAqCiAgKiBDb3B5cmlnaHQgaGlzdG9yeSBmcm9tIHZnYTE2ZmIuYzoKICAqCUNvcHlyaWdodCAxOTk5IEJlbiBQZmFmZiBhbmQgUGV0ciBWYW5kcm92ZWMKICAqCUJhc2VkIG9uIFZHQSBpbmZvIGF0IGh0dHA6Ly93d3cuZ29vZG5ldC5jb20vfnRpbmFyYS9GcmVlVkdBL2hvbWUuaHRtCkBAIC0xMCw3ICsxMCw3IEBACiAgKgogICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbAogICogUHVibGljIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcwotICogYXJjaGl2ZSBmb3IgbW9yZSBkZXRhaWxzLiAgCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yOSwxNiArMjksMTYgQEAKIAlfX3U4ICpnZng7CiAJX191OCAqc2VxOwogCV9fdTggbWlzYzsKLX07CQorfTsKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHZnYV9yY3J0Y3Modm9pZCBfX2lvbWVtICpyZWdiYXNlLCB1bnNpZ25lZCBzaG9ydCBpb2Jhc2UsIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHZnYV9yY3J0Y3Modm9pZCBfX2lvbWVtICpyZWdiYXNlLCB1bnNpZ25lZCBzaG9ydCBpb2Jhc2UsCiAJCQkJICAgICAgIHVuc2lnbmVkIGNoYXIgcmVnKQogewogCXZnYV93KHJlZ2Jhc2UsIGlvYmFzZSArIDB4NCwgcmVnKTsKIAlyZXR1cm4gdmdhX3IocmVnYmFzZSwgaW9iYXNlICsgMHg1KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHZnYV93Y3J0Y3Modm9pZCBfX2lvbWVtICpyZWdiYXNlLCB1bnNpZ25lZCBzaG9ydCBpb2Jhc2UsIAorc3RhdGljIGlubGluZSB2b2lkIHZnYV93Y3J0Y3Modm9pZCBfX2lvbWVtICpyZWdiYXNlLCB1bnNpZ25lZCBzaG9ydCBpb2Jhc2UsCiAJCQkgICAgICB1bnNpZ25lZCBjaGFyIHJlZywgdW5zaWduZWQgY2hhciB2YWwpCiB7CiAJdmdhX3cocmVnYmFzZSwgaW9iYXNlICsgMHg0LCByZWcpOwpAQCAtNzEsNyArNzEsNyBAQAogCWdyNiA9IHZnYV9yZ2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX01JU0MpOwogCXNlcTIgPSB2Z2FfcnNlcShzdGF0ZS0+dmdhYmFzZSwgVkdBX1NFUV9QTEFORV9XUklURSk7CiAJc2VxNCA9IHZnYV9yc2VxKHN0YXRlLT52Z2FiYXNlLCBWR0FfU0VRX01FTU9SWV9NT0RFKTsKLQkKKwogCS8qIGJsYW5rIHNjcmVlbiAqLwogCXNlcTEgPSB2Z2FfcnNlcShzdGF0ZS0+dmdhYmFzZSwgVkdBX1NFUV9DTE9DS19NT0RFKTsKIAl2Z2Ffd3NlcShzdGF0ZS0+dmdhYmFzZSwgVkdBX1NFUV9SRVNFVCwgMHgxKTsKQEAgLTg1LDcgKzg1LDcgQEAKIAkJdmdhX3dnZngoc3RhdGUtPnZnYWJhc2UsIFZHQV9HRlhfUExBTkVfUkVBRCwgMHgyKTsKIAkJdmdhX3dnZngoc3RhdGUtPnZnYWJhc2UsIFZHQV9HRlhfTU9ERSwgMHgwKTsKIAkJdmdhX3dnZngoc3RhdGUtPnZnYWJhc2UsIFZHQV9HRlhfTUlTQywgMHg1KTsKLQkJZm9yIChpID0gMDsgaSA8IDQgKiA4MTkyOyBpKyspIAorCQlmb3IgKGkgPSAwOyBpIDwgNCAqIDgxOTI7IGkrKykKIAkJCXNhdmVkLT52Z2FfZm9udDBbaV0gPSB2Z2FfcihmYmJhc2UsIGkpOwogCX0KIApAQCAtOTYsMTAgKzk2LDEwIEBACiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX1BMQU5FX1JFQUQsIDB4Myk7CiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX01PREUsIDB4MCk7CiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX01JU0MsIDB4NSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bWVtc2l6ZTsgaSsrKSAKKwkJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5tZW1zaXplOyBpKyspCiAJCQlzYXZlZC0+dmdhX2ZvbnQxW2ldID0gdmdhX3IoZmJiYXNlLCBpKTsKIAl9Ci0JCisKIAkvKiBzYXZlIGZvbnQgYXQgcGxhbmUgMC8xICovCiAJaWYgKHN0YXRlLT5mbGFncyAmIFZHQV9TQVZFX1RFWFQpIHsKIAkJdmdhX3dzZXEoc3RhdGUtPnZnYWJhc2UsIFZHQV9TRVFfUExBTkVfV1JJVEUsIDB4MSk7CkBAIC0xMDcsNyArMTA3LDcgQEAKIAkJdmdhX3dnZngoc3RhdGUtPnZnYWJhc2UsIFZHQV9HRlhfUExBTkVfUkVBRCwgMHgwKTsKIAkJdmdhX3dnZngoc3RhdGUtPnZnYWJhc2UsIFZHQV9HRlhfTU9ERSwgMHgwKTsKIAkJdmdhX3dnZngoc3RhdGUtPnZnYWJhc2UsIFZHQV9HRlhfTUlTQywgMHg1KTsKLQkJZm9yIChpID0gMDsgaSA8IDgxOTI7IGkrKykgCisJCWZvciAoaSA9IDA7IGkgPCA4MTkyOyBpKyspCiAJCQlzYXZlZC0+dmdhX3RleHRbaV0gPSB2Z2FfcihmYmJhc2UsIGkpOwogCiAJCXZnYV93c2VxKHN0YXRlLT52Z2FiYXNlLCBWR0FfU0VRX1BMQU5FX1dSSVRFLCAweDIpOwpAQCAtMTE1LDggKzExNSw4IEBACiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX1BMQU5FX1JFQUQsIDB4MSk7CiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX01PREUsIDB4MCk7CiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX01JU0MsIDB4NSk7Ci0JCWZvciAoaSA9IDA7IGkgPCA4MTkyOyBpKyspIAotCQkJc2F2ZWQtPnZnYV90ZXh0WzgxOTIraV0gPSB2Z2FfcihmYmJhc2UgKyAyICogODE5MiwgaSk7IAorCQlmb3IgKGkgPSAwOyBpIDwgODE5MjsgaSsrKQorCQkJc2F2ZWQtPnZnYV90ZXh0WzgxOTIraV0gPSB2Z2FfcihmYmJhc2UgKyAyICogODE5MiwgaSk7CiAJfQogCiAJLyogcmVzdG9yZSByZWdzICovCkBAIC0xNTEsNyArMTUxLDcgQEAKIAlncjggPSB2Z2FfcmdmeChzdGF0ZS0+dmdhYmFzZSwgVkdBX0dGWF9CSVRfTUFTSyk7CiAJc2VxMiA9IHZnYV9yc2VxKHN0YXRlLT52Z2FiYXNlLCBWR0FfU0VRX1BMQU5FX1dSSVRFKTsKIAlzZXE0ID0gdmdhX3JzZXEoc3RhdGUtPnZnYWJhc2UsIFZHQV9TRVFfTUVNT1JZX01PREUpOwotCQorCiAJLyogYmxhbmsgc2NyZWVuICovCiAJc2VxMSA9IHZnYV9yc2VxKHN0YXRlLT52Z2FiYXNlLCBWR0FfU0VRX0NMT0NLX01PREUpOwogCXZnYV93c2VxKHN0YXRlLT52Z2FiYXNlLCBWR0FfU0VRX1JFU0VULCAweDEpOwpAQCAtMTYzLDcgKzE2Myw3IEBACiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX0JJVF9NQVNLLCAweGZmKTsKIAkJdmdhX3dnZngoc3RhdGUtPnZnYWJhc2UsIFZHQV9HRlhfU1JfRU5BQkxFLCAweDAwKTsKIAl9Ci0JCisKIAkvKiByZXN0b3JlIGZvbnQgYXQgcGxhbmUgMiAqLwogCWlmIChzdGF0ZS0+ZmxhZ3MgJiBWR0FfU0FWRV9GT05UMCkgewogCQl2Z2Ffd3NlcShzdGF0ZS0+dmdhYmFzZSwgVkdBX1NFUV9QTEFORV9XUklURSwgMHg0KTsKQEAgLTE3MSw3ICsxNzEsNyBAQAogCQl2Z2Ffd2dmeChzdGF0ZS0+dmdhYmFzZSwgVkdBX0dGWF9QTEFORV9SRUFELCAweDIpOwogCQl2Z2Ffd2dmeChzdGF0ZS0+dmdhYmFzZSwgVkdBX0dGWF9NT0RFLCAweDApOwogCQl2Z2Ffd2dmeChzdGF0ZS0+dmdhYmFzZSwgVkdBX0dGWF9NSVNDLCAweDUpOwotCQlmb3IgKGkgPSAwOyBpIDwgNCAqIDgxOTI7IGkrKykgCisJCWZvciAoaSA9IDA7IGkgPCA0ICogODE5MjsgaSsrKQogCQkJdmdhX3coZmJiYXNlLCBpLCBzYXZlZC0+dmdhX2ZvbnQwW2ldKTsKIAl9CiAKQEAgLTE4MiwxMCArMTgyLDEwIEBACiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX1BMQU5FX1JFQUQsIDB4Myk7CiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX01PREUsIDB4MCk7CiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX01JU0MsIDB4NSk7Ci0JCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bWVtc2l6ZTsgaSsrKSAKKwkJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5tZW1zaXplOyBpKyspCiAJCQl2Z2FfdyhmYmJhc2UsIGksIHNhdmVkLT52Z2FfZm9udDFbaV0pOwogCX0KLQkKKwogCS8qIHJlc3RvcmUgZm9udCBhdCBwbGFuZSAwLzEgKi8KIAlpZiAoc3RhdGUtPmZsYWdzICYgVkdBX1NBVkVfVEVYVCkgewogCQl2Z2Ffd3NlcShzdGF0ZS0+dmdhYmFzZSwgVkdBX1NFUV9QTEFORV9XUklURSwgMHgxKTsKQEAgLTE5MywxNiArMTkzLDE2IEBACiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX1BMQU5FX1JFQUQsIDB4MCk7CiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX01PREUsIDB4MCk7CiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX01JU0MsIDB4NSk7Ci0JCWZvciAoaSA9IDA7IGkgPCA4MTkyOyBpKyspIAorCQlmb3IgKGkgPSAwOyBpIDwgODE5MjsgaSsrKQogCQkJdmdhX3coZmJiYXNlLCBpLCBzYXZlZC0+dmdhX3RleHRbaV0pOwotCQkKKwogCQl2Z2Ffd3NlcShzdGF0ZS0+dmdhYmFzZSwgVkdBX1NFUV9QTEFORV9XUklURSwgMHgyKTsKIAkJdmdhX3dzZXEoc3RhdGUtPnZnYWJhc2UsIFZHQV9TRVFfTUVNT1JZX01PREUsIDB4Nik7CiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX1BMQU5FX1JFQUQsIDB4MSk7CiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX01PREUsIDB4MCk7CiAJCXZnYV93Z2Z4KHN0YXRlLT52Z2FiYXNlLCBWR0FfR0ZYX01JU0MsIDB4NSk7Ci0JCWZvciAoaSA9IDA7IGkgPCA4MTkyOyBpKyspIAotCQkJdmdhX3coZmJiYXNlLCBpLCBzYXZlZC0+dmdhX3RleHRbODE5MitpXSk7IAorCQlmb3IgKGkgPSAwOyBpIDwgODE5MjsgaSsrKQorCQkJdmdhX3coZmJiYXNlLCBpLCBzYXZlZC0+dmdhX3RleHRbODE5MitpXSk7CiAJfQogCiAJLyogdW5ibGFuayBzY3JlZW4gKi8KQEAgLTIyMiw3ICsyMjIsNyBAQAogCXZnYV93c2VxKHN0YXRlLT52Z2FiYXNlLCBWR0FfU0VRX1BMQU5FX1dSSVRFLCBzZXEyKTsKIAl2Z2Ffd3NlcShzdGF0ZS0+dmdhYmFzZSwgVkdBX1NFUV9NRU1PUllfTU9ERSwgc2VxNCk7CiB9Ci0JCQkgICAgICAKKwogc3RhdGljIHZvaWQgc2F2ZV92Z2FfbW9kZShzdHJ1Y3Qgdmdhc3RhdGUgKnN0YXRlKQogewogCXN0cnVjdCByZWdzdGF0ZSAqc2F2ZWQgPSAoc3RydWN0IHJlZ3N0YXRlICopIHN0YXRlLT52aWRzdGF0ZTsKQEAgLTIzNSwxMCArMjM1LDEwIEBACiAJZWxzZQogCQlpb2Jhc2UgPSAweDNiMDsKIAotCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVtX2NydGM7IGkrKykgCisJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5udW1fY3J0YzsgaSsrKQogCQlzYXZlZC0+Y3J0Y1tpXSA9IHZnYV9yY3J0Y3Moc3RhdGUtPnZnYWJhc2UsIGlvYmFzZSwgaSk7Ci0JCi0JdmdhX3Ioc3RhdGUtPnZnYWJhc2UsIGlvYmFzZSArIDB4YSk7IAorCisJdmdhX3Ioc3RhdGUtPnZnYWJhc2UsIGlvYmFzZSArIDB4YSk7CiAJdmdhX3coc3RhdGUtPnZnYWJhc2UsIFZHQV9BVFRfVywgMHgwMCk7CiAJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5udW1fYXR0cjsgaSsrKSB7CiAJCXZnYV9yKHN0YXRlLT52Z2FiYXNlLCBpb2Jhc2UgKyAweGEpOwpAQCAtMjQ3LDEwICsyNDcsMTAgQEAKIAl2Z2FfcihzdGF0ZS0+dmdhYmFzZSwgaW9iYXNlICsgMHhhKTsKIAl2Z2FfdyhzdGF0ZS0+dmdhYmFzZSwgVkdBX0FUVF9XLCAweDIwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVtX2dmeDsgaSsrKSAKKwlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPm51bV9nZng7IGkrKykKIAkJc2F2ZWQtPmdmeFtpXSA9IHZnYV9yZ2Z4KHN0YXRlLT52Z2FiYXNlLCBpKTsKIAotCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVtX3NlcTsgaSsrKSAKKwlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPm51bV9zZXE7IGkrKykKIAkJc2F2ZWQtPnNlcVtpXSA9IHZnYV9yc2VxKHN0YXRlLT52Z2FiYXNlLCBpKTsKIH0KIApAQCAtMjY4LDI2ICsyNjgsMjYgQEAKIAkJaW9iYXNlID0gMHgzYjA7CiAKIAkvKiB0dXJuIG9mZiBkaXNwbGF5ICovCi0JdmdhX3dzZXEoc3RhdGUtPnZnYWJhc2UsIFZHQV9TRVFfQ0xPQ0tfTU9ERSwgCisJdmdhX3dzZXEoc3RhdGUtPnZnYWJhc2UsIFZHQV9TRVFfQ0xPQ0tfTU9ERSwKIAkJIHNhdmVkLT5zZXFbVkdBX1NFUV9DTE9DS19NT0RFXSB8IDB4MjApOwogCiAJLyogZGlzYWJsZSBzZXF1ZW5jZXIgKi8KIAl2Z2Ffd3NlcShzdGF0ZS0+dmdhYmFzZSwgVkdBX1NFUV9SRVNFVCwgMHgwMSk7Ci0JCisKIAkvKiBlbmFibGUgcGFsZXR0ZSBhZGRyZXNzaW5nICovCiAJdmdhX3Ioc3RhdGUtPnZnYWJhc2UsIGlvYmFzZSArIDB4YSk7CiAJdmdhX3coc3RhdGUtPnZnYWJhc2UsIFZHQV9BVFRfVywgMHgwMCk7CiAKLQlmb3IgKGkgPSAyOyBpIDwgc3RhdGUtPm51bV9zZXE7IGkrKykgCisJZm9yIChpID0gMjsgaSA8IHN0YXRlLT5udW1fc2VxOyBpKyspCiAJCXZnYV93c2VxKHN0YXRlLT52Z2FiYXNlLCBpLCBzYXZlZC0+c2VxW2ldKTsKIAogCiAJLyogdW5wcm90ZWN0IHZnYSByZWdzICovCiAJdmdhX3djcnRjcyhzdGF0ZS0+dmdhYmFzZSwgaW9iYXNlLCAxNywgc2F2ZWQtPmNydGNbMTddICYgfjB4ODApOwotCWZvciAoaSA9IDA7IGkgPCBzdGF0ZS0+bnVtX2NydGM7IGkrKykgCisJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5udW1fY3J0YzsgaSsrKQogCQl2Z2Ffd2NydGNzKHN0YXRlLT52Z2FiYXNlLCBpb2Jhc2UsIGksIHNhdmVkLT5jcnRjW2ldKTsKLQkKLQlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPm51bV9nZng7IGkrKykgCisKKwlmb3IgKGkgPSAwOyBpIDwgc3RhdGUtPm51bV9nZng7IGkrKykKIAkJdmdhX3dnZngoc3RhdGUtPnZnYWJhc2UsIGksIHNhdmVkLT5nZnhbaV0pOwogCiAJZm9yIChpID0gMDsgaSA8IHN0YXRlLT5udW1fYXR0cjsgaSsrKSB7CkBAIC0yOTgsNyArMjk4LDcgQEAKIAkvKiByZWVuYWJsZSBzZXF1ZW5jZXIgKi8KIAl2Z2Ffd3NlcShzdGF0ZS0+dmdhYmFzZSwgVkdBX1NFUV9SRVNFVCwgMHgwMyk7CiAJLyogdHVybiBkaXNwbGF5IG9uICovCi0JdmdhX3dzZXEoc3RhdGUtPnZnYWJhc2UsIFZHQV9TRVFfQ0xPQ0tfTU9ERSwgCisJdmdhX3dzZXEoc3RhdGUtPnZnYWJhc2UsIFZHQV9TRVFfQ0xPQ0tfTU9ERSwKIAkJIHNhdmVkLT5zZXFbVkdBX1NFUV9DTE9DS19NT0RFXSAmIH4oMSA8PCA1KSk7CiAKIAkvKiBkaXNhYmxlIHZpZGVvL3BhbGV0dGUgc291cmNlICovCkBAIC0zMTIsNyArMzEyLDcgQEAKIAlpbnQgaTsKIAogCXZnYV93KHN0YXRlLT52Z2FiYXNlLCBWR0FfUEVMX01TSywgMHhmZik7Ci0JCisKIAkvKiBhc3N1bWVzIERBQyBpcyByZWFkYWJsZSBhbmQgd3JpdGFibGUgKi8KIAl2Z2FfdyhzdGF0ZS0+dmdhYmFzZSwgVkdBX1BFTF9JUiwgMHgwMCk7CiAJZm9yIChpID0gMDsgaSA8IDc2ODsgaSsrKQpAQCAtMzQ2LDcgKzM0Niw3IEBACiAJCXN0YXRlLT52aWRzdGF0ZSA9IE5VTEw7CiAJfQogfQotCQkKKwogaW50IHNhdmVfdmdhKHN0cnVjdCB2Z2FzdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IHJlZ3N0YXRlICpzYXZlZDsKQEAgLTM1Nyw3ICszNTcsNyBAQAogCQlyZXR1cm4gMTsKIAogCXN0YXRlLT52aWRzdGF0ZSA9ICh2b2lkICopc2F2ZWQ7Ci0JCQorCiAJaWYgKHN0YXRlLT5mbGFncyAmIFZHQV9TQVZFX0NNQVApIHsKIAkJc2F2ZWQtPnZnYV9jbWFwID0gdm1hbGxvYyg3NjgpOwogCQlpZiAoIXNhdmVkLT52Z2FfY21hcCkgewpAQCAtNDAzLDcgKzQwMyw3IEBACiAJCX0KIAkJaWYgKCFzdGF0ZS0+bWVtc2l6ZSkKIAkJCXN0YXRlLT5tZW1zaXplID0gOCAqIDgxOTI7Ci0JCQorCiAJCWlmICghc3RhdGUtPm1lbWJhc2UpCiAJCQlzdGF0ZS0+bWVtYmFzZSA9IDB4QTAwMDA7CiAKQEAgLTQxNCw3ICs0MTQsNyBAQAogCQkJcmV0dXJuIDE7CiAJCX0KIAotCQkvKiAKKwkJLyoKIAkJICogc2F2ZSBvbmx5IGZpcnN0IDMySyB1c2VkIGJ5IHZnYWNvbgogCQkgKi8KIAkJaWYgKHN0YXRlLT5mbGFncyAmIFZHQV9TQVZFX0ZPTlQwKSB7CkBAIC00MjUsNyArNDI1LDcgQEAKIAkJCQlyZXR1cm4gMTsKIAkJCX0KIAkJfQotCQkvKiAKKwkJLyoKIAkJICogbGFyZ2VseSB1bnVzZWQsIGJ1dCBpZiByZXF1aXJlZCBieSB0aGUgY2FsbGVyCiAJCSAqIHdlJ2xsIGp1c3Qgc2F2ZSBldmVyeXRoaW5nLgogCQkgKi8KQEAgLTQ0OCw3ICs0NDgsNyBAQAogCQkJCXJldHVybiAxOwogCQkJfQogCQl9Ci0JCQorCiAJCXNhdmVfdmdhX3RleHQoc3RhdGUsIGZiYmFzZSk7CiAJCWlvdW5tYXAoZmJiYXNlKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9iYWxsb29uLmMgYi9kcml2ZXJzL3hlbi9iYWxsb29uLmMKaW5kZXggMzg2MGQwMi4uMGI1MmQ5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vYmFsbG9vbi5jCisrKyBiL2RyaXZlcnMveGVuL2JhbGxvb24uYwpAQCAtOTIsNyArOTIsNiBAQAogCiAvKiBXZSBpbmNyZWFzZS9kZWNyZWFzZSBpbiBiYXRjaGVzIHdoaWNoIGZpdCBpbiBhIHBhZ2UgKi8KIHN0YXRpYyB4ZW5fcGZuX3QgZnJhbWVfbGlzdFtQQUdFX1NJWkUgLyBzaXplb2YodW5zaWduZWQgbG9uZyldOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwYWdlICosIGJhbGxvb25fc2NyYXRjaF9wYWdlKTsKIAogCiAvKiBMaXN0IG9mIGJhbGxvb25lZCBwYWdlcywgdGhyZWFkZWQgdGhyb3VnaCB0aGUgbWVtX21hcCBhcnJheS4gKi8KQEAgLTQyMywyMiArNDIyLDEyIEBACiAJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOwogCiAjaWZkZWYgQ09ORklHX1hFTl9IQVZFX1BWTU1VCi0JCS8qCi0JCSAqIEJhbGxvb25lZCBvdXQgZnJhbWVzIGFyZSBlZmZlY3RpdmVseSByZXBsYWNlZCB3aXRoCi0JCSAqIGEgc2NyYXRjaCBmcmFtZS4gIEVuc3VyZSBkaXJlY3QgbWFwcGluZ3MgYW5kIHRoZQotCQkgKiBwMm0gYXJlIGNvbnNpc3RlbnQuCi0JCSAqLwogCQlpZiAoIXhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0b190cmFuc2xhdGVkX3BoeXNtYXApKSB7CiAJCQlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7Ci0JCQkJc3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZSA9IGdldF9iYWxsb29uX3NjcmF0Y2hfcGFnZSgpOwotCiAJCQkJcmV0ID0gSFlQRVJWSVNPUl91cGRhdGVfdmFfbWFwcGluZygKIAkJCQkJCSh1bnNpZ25lZCBsb25nKV9fdmEocGZuIDw8IFBBR0VfU0hJRlQpLAotCQkJCQkJcGZuX3B0ZShwYWdlX3RvX3BmbihzY3JhdGNoX3BhZ2UpLAotCQkJCQkJCVBBR0VfS0VSTkVMX1JPKSwgMCk7CisJCQkJCQlfX3B0ZV9tYSgwKSwgMCk7CiAJCQkJQlVHX09OKHJldCk7Ci0KLQkJCQlwdXRfYmFsbG9vbl9zY3JhdGNoX3BhZ2UoKTsKIAkJCX0KIAkJCV9fc2V0X3BoeXNfdG9fbWFjaGluZShwZm4sIElOVkFMSURfUDJNX0VOVFJZKTsKIAkJfQpAQCAtNTAwLDE4ICs0ODksNiBAQAogCW11dGV4X3VubG9jaygmYmFsbG9vbl9tdXRleCk7CiB9CiAKLXN0cnVjdCBwYWdlICpnZXRfYmFsbG9vbl9zY3JhdGNoX3BhZ2Uodm9pZCkKLXsKLQlzdHJ1Y3QgcGFnZSAqcmV0ID0gZ2V0X2NwdV92YXIoYmFsbG9vbl9zY3JhdGNoX3BhZ2UpOwotCUJVR19PTihyZXQgPT0gTlVMTCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBwdXRfYmFsbG9vbl9zY3JhdGNoX3BhZ2Uodm9pZCkKLXsKLQlwdXRfY3B1X3ZhcihiYWxsb29uX3NjcmF0Y2hfcGFnZSk7Ci19Ci0KIC8qIFJlc2V0cyB0aGUgWGVuIGxpbWl0LCBzZXRzIG5ldyB0YXJnZXQsIGFuZCBraWNrcyBvZmYgcHJvY2Vzc2luZy4gKi8KIHZvaWQgYmFsbG9vbl9zZXRfbmV3X3RhcmdldCh1bnNpZ25lZCBsb25nIHRhcmdldCkKIHsKQEAgLTYwNSw2MSArNTgyLDEzIEBACiAJfQogfQogCi1zdGF0aWMgaW50IGFsbG9jX2JhbGxvb25fc2NyYXRjaF9wYWdlKGludCBjcHUpCi17Ci0JaWYgKHBlcl9jcHUoYmFsbG9vbl9zY3JhdGNoX3BhZ2UsIGNwdSkgIT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQlwZXJfY3B1KGJhbGxvb25fc2NyYXRjaF9wYWdlLCBjcHUpID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAocGVyX2NwdShiYWxsb29uX3NjcmF0Y2hfcGFnZSwgY3B1KSA9PSBOVUxMKSB7Ci0JCXByX3dhcm4oIkZhaWxlZCB0byBhbGxvY2F0ZSBiYWxsb29uX3NjcmF0Y2hfcGFnZSBmb3IgY3B1ICVkXG4iLCBjcHUpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IGJhbGxvb25fY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQotewotCWludCBjcHUgPSAobG9uZyloY3B1OwotCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBDUFVfVVBfUFJFUEFSRToKLQkJaWYgKGFsbG9jX2JhbGxvb25fc2NyYXRjaF9wYWdlKGNwdSkpCi0JCQlyZXR1cm4gTk9USUZZX0JBRDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBOT1RJRllfT0s7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgYmFsbG9vbl9jcHVfbm90aWZpZXIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwJPSBiYWxsb29uX2NwdV9ub3RpZnksCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCBiYWxsb29uX2luaXQodm9pZCkKIHsKLQlpbnQgaSwgY3B1OworCWludCBpOwogCiAJaWYgKCF4ZW5fZG9tYWluKCkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKCF4ZW5fZmVhdHVyZShYRU5GRUFUX2F1dG9fdHJhbnNsYXRlZF9waHlzbWFwKSkgewotCQlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmJhbGxvb25fY3B1X25vdGlmaWVyKTsKLQotCQlnZXRfb25saW5lX2NwdXMoKTsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJCWlmIChhbGxvY19iYWxsb29uX3NjcmF0Y2hfcGFnZShjcHUpKSB7Ci0JCQkJcHV0X29ubGluZV9jcHVzKCk7Ci0JCQkJdW5yZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmJhbGxvb25fY3B1X25vdGlmaWVyKTsKLQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCX0KLQkJfQotCQlwdXRfb25saW5lX2NwdXMoKTsKLQl9Ci0KIAlwcl9pbmZvKCJJbml0aWFsaXNpbmcgYmFsbG9vbiBkcml2ZXJcbiIpOwogCiAJYmFsbG9vbl9zdGF0cy5jdXJyZW50X3BhZ2VzID0geGVuX3B2X2RvbWFpbigpCkBAIC02OTYsMTUgKzYyNSw0IEBACiAKIHN1YnN5c19pbml0Y2FsbChiYWxsb29uX2luaXQpOwogCi1zdGF0aWMgaW50IF9faW5pdCBiYWxsb29uX2NsZWFyKHZvaWQpCi17Ci0JaW50IGNwdTsKLQotCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCXBlcl9jcHUoYmFsbG9vbl9zY3JhdGNoX3BhZ2UsIGNwdSkgPSBOVUxMOwotCi0JcmV0dXJuIDA7Ci19Ci1lYXJseV9pbml0Y2FsbChiYWxsb29uX2NsZWFyKTsKLQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZ250ZGV2LmMgYi9kcml2ZXJzL3hlbi9nbnRkZXYuYwppbmRleCAwNzNiNGExLi5kNWJiMWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9nbnRkZXYuYworKysgYi9kcml2ZXJzL3hlbi9nbnRkZXYuYwpAQCAtNjcsNyArNjcsNyBAQAogCSAqIE9ubHkgcG9wdWxhdGVkIGlmIHBvcHVsYXRlX2ZyZWVhYmxlX21hcHMgPT0gMSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZnJlZWFibGVfbWFwczsKIAkvKiBsb2NrIHByb3RlY3RzIG1hcHMgYW5kIGZyZWVhYmxlX21hcHMgKi8KLQlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW07CiAJc3RydWN0IG1tdV9ub3RpZmllciBtbjsKIH07CkBAIC05MSw3ICs5MSw5IEBACiAJc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmICAgKm1hcF9vcHM7CiAJc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgKnVubWFwX29wczsKIAlzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYgICAqa21hcF9vcHM7CisJc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgKmt1bm1hcF9vcHM7CiAJc3RydWN0IHBhZ2UgKipwYWdlczsKKwl1bnNpZ25lZCBsb25nIHBhZ2VzX3ZtX3N0YXJ0OwogfTsKIAogc3RhdGljIGludCB1bm1hcF9ncmFudF9wYWdlcyhzdHJ1Y3QgZ3JhbnRfbWFwICptYXAsIGludCBvZmZzZXQsIGludCBwYWdlcyk7CkBAIC0xMTgsMTIgKzEyMCwxMyBAQAogCQlyZXR1cm47CiAKIAlpZiAobWFwLT5wYWdlcykKLQkJZnJlZV94ZW5iYWxsb29uZWRfcGFnZXMobWFwLT5jb3VudCwgbWFwLT5wYWdlcyk7CisJCWdudHRhYl9mcmVlX3BhZ2VzKG1hcC0+Y291bnQsIG1hcC0+cGFnZXMpOwogCWtmcmVlKG1hcC0+cGFnZXMpOwogCWtmcmVlKG1hcC0+Z3JhbnRzKTsKIAlrZnJlZShtYXAtPm1hcF9vcHMpOwogCWtmcmVlKG1hcC0+dW5tYXBfb3BzKTsKIAlrZnJlZShtYXAtPmttYXBfb3BzKTsKKwlrZnJlZShtYXAtPmt1bm1hcF9vcHMpOwogCWtmcmVlKG1hcCk7CiB9CiAKQEAgLTE0MCwyMSArMTQzLDI0IEBACiAJYWRkLT5tYXBfb3BzICAgPSBrY2FsbG9jKGNvdW50LCBzaXplb2YoYWRkLT5tYXBfb3BzWzBdKSwgR0ZQX0tFUk5FTCk7CiAJYWRkLT51bm1hcF9vcHMgPSBrY2FsbG9jKGNvdW50LCBzaXplb2YoYWRkLT51bm1hcF9vcHNbMF0pLCBHRlBfS0VSTkVMKTsKIAlhZGQtPmttYXBfb3BzICA9IGtjYWxsb2MoY291bnQsIHNpemVvZihhZGQtPmttYXBfb3BzWzBdKSwgR0ZQX0tFUk5FTCk7CisJYWRkLT5rdW5tYXBfb3BzID0ga2NhbGxvYyhjb3VudCwgc2l6ZW9mKGFkZC0+a3VubWFwX29wc1swXSksIEdGUF9LRVJORUwpOwogCWFkZC0+cGFnZXMgICAgID0ga2NhbGxvYyhjb3VudCwgc2l6ZW9mKGFkZC0+cGFnZXNbMF0pLCBHRlBfS0VSTkVMKTsKIAlpZiAoTlVMTCA9PSBhZGQtPmdyYW50cyAgICB8fAogCSAgICBOVUxMID09IGFkZC0+bWFwX29wcyAgIHx8CiAJICAgIE5VTEwgPT0gYWRkLT51bm1hcF9vcHMgfHwKIAkgICAgTlVMTCA9PSBhZGQtPmttYXBfb3BzICB8fAorCSAgICBOVUxMID09IGFkZC0+a3VubWFwX29wcyB8fAogCSAgICBOVUxMID09IGFkZC0+cGFnZXMpCiAJCWdvdG8gZXJyOwogCi0JaWYgKGFsbG9jX3hlbmJhbGxvb25lZF9wYWdlcyhjb3VudCwgYWRkLT5wYWdlcywgZmFsc2UgLyogbG93bWVtICovKSkKKwlpZiAoZ250dGFiX2FsbG9jX3BhZ2VzKGNvdW50LCBhZGQtPnBhZ2VzKSkKIAkJZ290byBlcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogCQlhZGQtPm1hcF9vcHNbaV0uaGFuZGxlID0gLTE7CiAJCWFkZC0+dW5tYXBfb3BzW2ldLmhhbmRsZSA9IC0xOwogCQlhZGQtPmttYXBfb3BzW2ldLmhhbmRsZSA9IC0xOworCQlhZGQtPmt1bm1hcF9vcHNbaV0uaGFuZGxlID0gLTE7CiAJfQogCiAJYWRkLT5pbmRleCA9IDA7CkBAIC0yMTYsOSArMjIyLDkgQEAKIAl9CiAKIAlpZiAocG9wdWxhdGVfZnJlZWFibGVfbWFwcyAmJiBwcml2KSB7Ci0JCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisJCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwogCQlsaXN0X2RlbCgmbWFwLT5uZXh0KTsKLQkJc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCQltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwogCX0KIAogCWlmIChtYXAtPnBhZ2VzICYmICF1c2VfcHRlbW9kKQpAQCAtMjM5LDYgKzI0NSwxNCBAQAogCUJVR19PTihwZ25yID49IG1hcC0+Y291bnQpOwogCXB0ZV9tYWRkciA9IGFyYml0cmFyeV92aXJ0X3RvX21hY2hpbmUocHRlKS5tYWRkcjsKIAorCS8qCisJICogU2V0IHRoZSBQVEUgYXMgc3BlY2lhbCB0byBmb3JjZSBnZXRfdXNlcl9wYWdlc19mYXN0KCkgZmFsbAorCSAqIGJhY2sgdG8gdGhlIHNsb3cgcGF0aC4gIElmIHRoaXMgaXMgbm90IHN1cHBvcnRlZCBhcyBwYXJ0IG9mCisJICogdGhlIGdyYW50IG1hcCwgaXQgd2lsbCBiZSBkb25lIGFmdGVyd2FyZHMuCisJICovCisJaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfZ250dGFiX21hcF9hdmFpbF9iaXRzKSkKKwkJZmxhZ3MgfD0gKDEgPDwgX0dOVE1BUF9ndWVzdF9hdmFpbDApOworCiAJZ250dGFiX3NldF9tYXBfb3AoJm1hcC0+bWFwX29wc1twZ25yXSwgcHRlX21hZGRyLCBmbGFncywKIAkJCSAgbWFwLT5ncmFudHNbcGducl0ucmVmLAogCQkJICBtYXAtPmdyYW50c1twZ25yXS5kb21pZCk7CkBAIC0yNDcsNiArMjYxLDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfWDg2CitzdGF0aWMgaW50IHNldF9ncmFudF9wdGVzX2FzX3NwZWNpYWwocHRlX3QgKnB0ZSwgcGd0YWJsZV90IHRva2VuLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKQoreworCXNldF9wdGVfYXQoY3VycmVudC0+bW0sIGFkZHIsIHB0ZSwgcHRlX21rc3BlY2lhbCgqcHRlKSk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBtYXBfZ3JhbnRfcGFnZXMoc3RydWN0IGdyYW50X21hcCAqbWFwKQogewogCWludCBpLCBlcnIgPSAwOwpAQCAtMjgwLDYgKzMwMyw4IEBACiAJCQkJbWFwLT5mbGFncyB8IEdOVE1BUF9ob3N0X21hcCwKIAkJCQltYXAtPmdyYW50c1tpXS5yZWYsCiAJCQkJbWFwLT5ncmFudHNbaV0uZG9taWQpOworCQkJZ250dGFiX3NldF91bm1hcF9vcCgmbWFwLT5rdW5tYXBfb3BzW2ldLCBhZGRyZXNzLAorCQkJCW1hcC0+ZmxhZ3MgfCBHTlRNQVBfaG9zdF9tYXAsIC0xKTsKIAkJfQogCX0KIApAQCAtMjkwLDIwICszMTUsNDIgQEAKIAkJcmV0dXJuIGVycjsKIAogCWZvciAoaSA9IDA7IGkgPCBtYXAtPmNvdW50OyBpKyspIHsKLQkJaWYgKG1hcC0+bWFwX29wc1tpXS5zdGF0dXMpCisJCWlmIChtYXAtPm1hcF9vcHNbaV0uc3RhdHVzKSB7CiAJCQllcnIgPSAtRUlOVkFMOwotCQllbHNlIHsKLQkJCUJVR19PTihtYXAtPm1hcF9vcHNbaV0uaGFuZGxlID09IC0xKTsKLQkJCW1hcC0+dW5tYXBfb3BzW2ldLmhhbmRsZSA9IG1hcC0+bWFwX29wc1tpXS5oYW5kbGU7Ci0JCQlwcl9kZWJ1ZygibWFwIGhhbmRsZT0lZFxuIiwgbWFwLT5tYXBfb3BzW2ldLmhhbmRsZSk7CisJCQljb250aW51ZTsKIAkJfQorCisJCW1hcC0+dW5tYXBfb3BzW2ldLmhhbmRsZSA9IG1hcC0+bWFwX29wc1tpXS5oYW5kbGU7CisJCWlmICh1c2VfcHRlbW9kKQorCQkJbWFwLT5rdW5tYXBfb3BzW2ldLmhhbmRsZSA9IG1hcC0+a21hcF9vcHNbaV0uaGFuZGxlOwogCX0KIAlyZXR1cm4gZXJyOwogfQogCitzdHJ1Y3QgdW5tYXBfZ3JhbnRfcGFnZXNfY2FsbGJhY2tfZGF0YQoreworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXBsZXRpb247CisJaW50IHJlc3VsdDsKK307CisKK3N0YXRpYyB2b2lkIHVubWFwX2dyYW50X2NhbGxiYWNrKGludCByZXN1bHQsCisJCQkJIHN0cnVjdCBnbnRhYl91bm1hcF9xdWV1ZV9kYXRhICpkYXRhKQoreworCXN0cnVjdCB1bm1hcF9ncmFudF9wYWdlc19jYWxsYmFja19kYXRhKiBkID0gZGF0YS0+ZGF0YTsKKworCWQtPnJlc3VsdCA9IHJlc3VsdDsKKwljb21wbGV0ZSgmZC0+Y29tcGxldGlvbik7Cit9CisKIHN0YXRpYyBpbnQgX191bm1hcF9ncmFudF9wYWdlcyhzdHJ1Y3QgZ3JhbnRfbWFwICptYXAsIGludCBvZmZzZXQsIGludCBwYWdlcykKIHsKIAlpbnQgaSwgZXJyID0gMDsKKwlzdHJ1Y3QgZ250YWJfdW5tYXBfcXVldWVfZGF0YSB1bm1hcF9kYXRhOworCXN0cnVjdCB1bm1hcF9ncmFudF9wYWdlc19jYWxsYmFja19kYXRhIGRhdGE7CisKKwlpbml0X2NvbXBsZXRpb24oJmRhdGEuY29tcGxldGlvbik7CisJdW5tYXBfZGF0YS5kYXRhID0gJmRhdGE7CisJdW5tYXBfZGF0YS5kb25lPSAmdW5tYXBfZ3JhbnRfY2FsbGJhY2s7CiAKIAlpZiAobWFwLT5ub3RpZnkuZmxhZ3MgJiBVTk1BUF9OT1RJRllfQ0xFQVJfQllURSkgewogCQlpbnQgcGdubyA9IChtYXAtPm5vdGlmeS5hZGRyID4+IFBBR0VfU0hJRlQpOwpAQCAtMzE1LDExICszNjIsMTYgQEAKIAkJfQogCX0KIAotCWVyciA9IGdudHRhYl91bm1hcF9yZWZzKG1hcC0+dW5tYXBfb3BzICsgb2Zmc2V0LAotCQkJdXNlX3B0ZW1vZCA/IG1hcC0+a21hcF9vcHMgKyBvZmZzZXQgOiBOVUxMLCBtYXAtPnBhZ2VzICsgb2Zmc2V0LAotCQkJcGFnZXMpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJdW5tYXBfZGF0YS51bm1hcF9vcHMgPSBtYXAtPnVubWFwX29wcyArIG9mZnNldDsKKwl1bm1hcF9kYXRhLmt1bm1hcF9vcHMgPSB1c2VfcHRlbW9kID8gbWFwLT5rdW5tYXBfb3BzICsgb2Zmc2V0IDogTlVMTDsKKwl1bm1hcF9kYXRhLnBhZ2VzID0gbWFwLT5wYWdlcyArIG9mZnNldDsKKwl1bm1hcF9kYXRhLmNvdW50ID0gcGFnZXM7CisKKwlnbnR0YWJfdW5tYXBfcmVmc19hc3luYygmdW5tYXBfZGF0YSk7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkYXRhLmNvbXBsZXRpb24pOworCWlmIChkYXRhLnJlc3VsdCkKKwkJcmV0dXJuIGRhdGEucmVzdWx0OwogCiAJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKIAkJaWYgKG1hcC0+dW5tYXBfb3BzW29mZnNldCtpXS5zdGF0dXMpCkBAIC0zODcsMTcgKzQzOSwyNiBAQAogCQkgKiBub3QgZG8gYW55IHVubWFwcGluZywgc2luY2UgdGhhdCBoYXMgYmVlbiBkb25lIHByaW9yIHRvCiAJCSAqIGNsb3NpbmcgdGhlIHZtYSwgYnV0IGl0IG1heSBzdGlsbCBpdGVyYXRlIHRoZSB1bm1hcF9vcHMgbGlzdC4KIAkJICovCi0JCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisJCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwogCQltYXAtPnZtYSA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKIAl9CiAJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBOVUxMOwogCWdudGRldl9wdXRfbWFwKHByaXYsIG1hcCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqZ250ZGV2X3ZtYV9maW5kX3NwZWNpYWxfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IGdyYW50X21hcCAqbWFwID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gbWFwLT5wYWdlc1soYWRkciAtIG1hcC0+cGFnZXNfdm1fc3RhcnQpID4+IFBBR0VfU0hJRlRdOworfQorCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdudGRldl92bW9wcyA9IHsKIAkub3BlbiA9IGdudGRldl92bWFfb3BlbiwKIAkuY2xvc2UgPSBnbnRkZXZfdm1hX2Nsb3NlLAorCS5maW5kX3NwZWNpYWxfcGFnZSA9IGdudGRldl92bWFfZmluZF9zcGVjaWFsX3BhZ2UsCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTQzMywxNCArNDk0LDE0IEBACiAJc3RydWN0IGdudGRldl9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgZ250ZGV2X3ByaXYsIG1uKTsKIAlzdHJ1Y3QgZ3JhbnRfbWFwICptYXA7CiAKLQlzcGluX2xvY2soJnByaXYtPmxvY2spOworCW11dGV4X2xvY2soJnByaXYtPmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkobWFwLCAmcHJpdi0+bWFwcywgbmV4dCkgewogCQl1bm1hcF9pZl9pbl9yYW5nZShtYXAsIHN0YXJ0LCBlbmQpOwogCX0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcCwgJnByaXYtPmZyZWVhYmxlX21hcHMsIG5leHQpIHsKIAkJdW5tYXBfaWZfaW5fcmFuZ2UobWFwLCBzdGFydCwgZW5kKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIG1uX2ludmxfcGFnZShzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwKQEAgLTQ1Nyw3ICs1MTgsNyBAQAogCXN0cnVjdCBncmFudF9tYXAgKm1hcDsKIAlpbnQgZXJyOwogCi0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKwltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcCwgJnByaXYtPm1hcHMsIG5leHQpIHsKIAkJaWYgKCFtYXAtPnZtYSkKIAkJCWNvbnRpbnVlOwpAQCAtNDc2LDcgKzUzNyw3IEBACiAJCWVyciA9IHVubWFwX2dyYW50X3BhZ2VzKG1hcCwgLyogb2Zmc2V0ICovIDAsIG1hcC0+Y291bnQpOwogCQlXQVJOX09OKGVycik7CiAJfQotCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwogfQogCiBzdGF0aWMgc3RydWN0IG1tdV9ub3RpZmllcl9vcHMgZ250ZGV2X21tdV9vcHMgPSB7CkBAIC00OTgsNyArNTU5LDcgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5tYXBzKTsKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+ZnJlZWFibGVfbWFwcyk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCW11dGV4X2luaXQoJnByaXYtPmxvY2spOwogCiAJaWYgKHVzZV9wdGVtb2QpIHsKIAkJcHJpdi0+bW0gPSBnZXRfdGFza19tbShjdXJyZW50KTsKQEAgLTU3MiwxMCArNjMzLDEwIEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CiAJZ250ZGV2X2FkZF9tYXAocHJpdiwgbWFwKTsKIAlvcC5pbmRleCA9IG1hcC0+aW5kZXggPDwgUEFHRV9TSElGVDsKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKIAogCWlmIChjb3B5X3RvX3VzZXIodSwgJm9wLCBzaXplb2Yob3ApKSAhPSAwKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTU5NCw3ICs2NTUsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAlwcl9kZWJ1ZygicHJpdiAlcCwgZGVsICVkKyVkXG4iLCBwcml2LCAoaW50KW9wLmluZGV4LCAoaW50KW9wLmNvdW50KTsKIAotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CiAJbWFwID0gZ250ZGV2X2ZpbmRfbWFwX2luZGV4KHByaXYsIG9wLmluZGV4ID4+IFBBR0VfU0hJRlQsIG9wLmNvdW50KTsKIAlpZiAobWFwKSB7CiAJCWxpc3RfZGVsKCZtYXAtPm5leHQpOwpAQCAtNjAyLDcgKzY2Myw3IEBACiAJCQlsaXN0X2FkZF90YWlsKCZtYXAtPm5leHQsICZwcml2LT5mcmVlYWJsZV9tYXBzKTsKIAkJZXJyID0gMDsKIAl9Ci0Jc3Bpbl91bmxvY2soJnByaXYtPmxvY2spOworCW11dGV4X3VubG9jaygmcHJpdi0+bG9jayk7CiAJaWYgKG1hcCkKIAkJZ250ZGV2X3B1dF9tYXAocHJpdiwgbWFwKTsKIAlyZXR1cm4gZXJyOwpAQCAtNjcwLDcgKzczMSw3IEBACiAJb3V0X2ZsYWdzID0gb3AuYWN0aW9uOwogCW91dF9ldmVudCA9IG9wLmV2ZW50X2NoYW5uZWxfcG9ydDsKIAotCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CisJbXV0ZXhfbG9jaygmcHJpdi0+bG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1hcCwgJnByaXYtPm1hcHMsIG5leHQpIHsKIAkJdWludDY0X3QgYmVnaW4gPSBtYXAtPmluZGV4IDw8IFBBR0VfU0hJRlQ7CkBAIC02OTgsNyArNzU5LDcgQEAKIAlyYyA9IDA7CiAKICB1bmxvY2tfb3V0OgotCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwogCiAJLyogRHJvcCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBldmVudCBjaGFubmVsIHdlIGRpZCBub3Qgc2F2ZSBpbiB0aGUgbWFwICovCiAJaWYgKG91dF9mbGFncyAmIFVOTUFQX05PVElGWV9TRU5EX0VWRU5UKQpAQCAtNzQ4LDcgKzgwOSw3IEBACiAJcHJfZGVidWcoIm1hcCAlZCslZCBhdCAlbHggKHBnb2ZmICVseClcbiIsCiAJCQlpbmRleCwgY291bnQsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fcGdvZmYpOwogCi0Jc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKKwltdXRleF9sb2NrKCZwcml2LT5sb2NrKTsKIAltYXAgPSBnbnRkZXZfZmluZF9tYXBfaW5kZXgocHJpdiwgaW5kZXgsIGNvdW50KTsKIAlpZiAoIW1hcCkKIAkJZ290byB1bmxvY2tfb3V0OwpAQCAtNzgzLDcgKzg0NCw3IEBACiAJCQltYXAtPmZsYWdzIHw9IEdOVE1BUF9yZWFkb25seTsKIAl9CiAKLQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5sb2NrKTsKIAogCWlmICh1c2VfcHRlbW9kKSB7CiAJCWVyciA9IGFwcGx5X3RvX3BhZ2VfcmFuZ2Uodm1hLT52bV9tbSwgdm1hLT52bV9zdGFydCwKQEAgLTgwNiwxNiArODY3LDM0IEBACiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0X3B1dF9tYXA7CiAJCX0KKwl9IGVsc2UgeworI2lmZGVmIENPTkZJR19YODYKKwkJLyoKKwkJICogSWYgdGhlIFBURXMgd2VyZSBub3QgbWFkZSBzcGVjaWFsIGJ5IHRoZSBncmFudCBtYXAKKwkJICogaHlwZXJjYWxsLCBkbyBzbyBoZXJlLgorCQkgKgorCQkgKiBUaGlzIGlzIHJhY3kgc2luY2UgdGhlIG1hcHBpbmcgaXMgYWxyZWFkeSB2aXNpYmxlCisJCSAqIHRvIHVzZXJzcGFjZSBidXQgdXNlcnNwYWNlIHNob3VsZCBiZSB3ZWxsLWJlaGF2ZWQKKwkJICogZW5vdWdoIHRvIG5vdCB0b3VjaCBpdCB1bnRpbCB0aGUgbW1hcCgpIGNhbGwKKwkJICogcmV0dXJucy4KKwkJICovCisJCWlmICgheGVuX2ZlYXR1cmUoWEVORkVBVF9nbnR0YWJfbWFwX2F2YWlsX2JpdHMpKSB7CisJCQlhcHBseV90b19wYWdlX3JhbmdlKHZtYS0+dm1fbW0sIHZtYS0+dm1fc3RhcnQsCisJCQkJCSAgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCisJCQkJCSAgICBzZXRfZ3JhbnRfcHRlc19hc19zcGVjaWFsLCBOVUxMKTsKKwkJfQorI2VuZGlmCisJCW1hcC0+cGFnZXNfdm1fc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwogCX0KIAogCXJldHVybiAwOwogCiB1bmxvY2tfb3V0OgotCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwogCXJldHVybiBlcnI7CiAKIG91dF91bmxvY2tfcHV0OgotCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnByaXYtPmxvY2spOwogb3V0X3B1dF9tYXA6CiAJaWYgKHVzZV9wdGVtb2QpCiAJCW1hcC0+dm1hID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL2dyYW50LXRhYmxlLmMgYi9kcml2ZXJzL3hlbi9ncmFudC10YWJsZS5jCmluZGV4IDc3ODYyOTEuLjE3OTcyZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2dyYW50LXRhYmxlLmMKKysrIGIvZHJpdmVycy94ZW4vZ3JhbnQtdGFibGUuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlIDx4ZW4veGVuLmg+CiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS94ZW4uaD4KQEAgLTUwLDYgKzUxLDcgQEAKICNpbmNsdWRlIDx4ZW4vaW50ZXJmYWNlL21lbW9yeS5oPgogI2luY2x1ZGUgPHhlbi9odmMtY29uc29sZS5oPgogI2luY2x1ZGUgPHhlbi9zd2lvdGxiLXhlbi5oPgorI2luY2x1ZGUgPHhlbi9iYWxsb29uLmg+CiAjaW5jbHVkZSA8YXNtL3hlbi9oeXBlcmNhbGwuaD4KICNpbmNsdWRlIDxhc20veGVuL2ludGVyZmFjZS5oPgogCkBAIC02NzEsNiArNjczLDU5IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChnbnR0YWJfZnJlZV9hdXRvX3hsYXRfZnJhbWVzKTsKIAorLyoqCisgKiBnbnR0YWJfYWxsb2NfcGFnZXMgLSBhbGxvYyBwYWdlcyBzdWl0YWJsZSBmb3IgZ3JhbnQgbWFwcGluZyBpbnRvCisgKiBAbnJfcGFnZXM6IG51bWJlciBvZiBwYWdlcyB0byBhbGxvYworICogQHBhZ2VzOiByZXR1cm5zIHRoZSBwYWdlcworICovCitpbnQgZ250dGFiX2FsbG9jX3BhZ2VzKGludCBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlcykKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCisJcmV0ID0gYWxsb2NfeGVuYmFsbG9vbmVkX3BhZ2VzKG5yX3BhZ2VzLCBwYWdlcywgZmFsc2UpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKKyNpZiBCSVRTX1BFUl9MT05HIDwgNjQKKwkJc3RydWN0IHhlbl9wYWdlX2ZvcmVpZ24gKmZvcmVpZ247CisKKwkJZm9yZWlnbiA9IGt6YWxsb2Moc2l6ZW9mKCpmb3JlaWduKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZm9yZWlnbikgeworCQkJZ250dGFiX2ZyZWVfcGFnZXMobnJfcGFnZXMsIHBhZ2VzKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXNldF9wYWdlX3ByaXZhdGUocGFnZXNbaV0sICh1bnNpZ25lZCBsb25nKWZvcmVpZ24pOworI2VuZGlmCisJCVNldFBhZ2VQcml2YXRlKHBhZ2VzW2ldKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woZ250dGFiX2FsbG9jX3BhZ2VzKTsKKworLyoqCisgKiBnbnR0YWJfZnJlZV9wYWdlcyAtIGZyZWUgcGFnZXMgYWxsb2NhdGVkIGJ5IGdudHRhYl9hbGxvY19wYWdlcygpCisgKiBAbnJfcGFnZXM7IG51bWJlciBvZiBwYWdlcyB0byBmcmVlCisgKiBAcGFnZXM6IHRoZSBwYWdlcworICovCit2b2lkIGdudHRhYl9mcmVlX3BhZ2VzKGludCBucl9wYWdlcywgc3RydWN0IHBhZ2UgKipwYWdlcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CisJCWlmIChQYWdlUHJpdmF0ZShwYWdlc1tpXSkpIHsKKyNpZiBCSVRTX1BFUl9MT05HIDwgNjQKKwkJCWtmcmVlKCh2b2lkICopcGFnZV9wcml2YXRlKHBhZ2VzW2ldKSk7CisjZW5kaWYKKwkJCUNsZWFyUGFnZVByaXZhdGUocGFnZXNbaV0pOworCQl9CisJfQorCWZyZWVfeGVuYmFsbG9vbmVkX3BhZ2VzKG5yX3BhZ2VzLCBwYWdlcyk7Cit9CitFWFBPUlRfU1lNQk9MKGdudHRhYl9mcmVlX3BhZ2VzKTsKKwogLyogSGFuZGxpbmcgb2YgcGFnZWQgb3V0IGdyYW50IHRhcmdldHMgKEdOVFNUX2VhZ2FpbikgKi8KICNkZWZpbmUgTUFYX0RFTEFZIDI1Ngogc3RhdGljIGlubGluZSB2b2lkCkBAIC03MjcsMzAgKzc4Miw4NyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQkvKiBSZXRyeSBlYWdhaW4gbWFwcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCS8qIFJldHJ5IGVhZ2FpbiBtYXBzICovCiAJCWlmIChtYXBfb3BzW2ldLnN0YXR1cyA9PSBHTlRTVF9lYWdhaW4pCiAJCQlnbnR0YWJfcmV0cnlfZWFnYWluX2dvcChHTlRUQUJPUF9tYXBfZ3JhbnRfcmVmLCBtYXBfb3BzICsgaSwKIAkJCQkJCSZtYXBfb3BzW2ldLnN0YXR1cywgX19mdW5jX18pOwogCisJCWlmIChtYXBfb3BzW2ldLnN0YXR1cyA9PSBHTlRTVF9va2F5KSB7CisJCQlzdHJ1Y3QgeGVuX3BhZ2VfZm9yZWlnbiAqZm9yZWlnbjsKKworCQkJU2V0UGFnZUZvcmVpZ24ocGFnZXNbaV0pOworCQkJZm9yZWlnbiA9IHhlbl9wYWdlX2ZvcmVpZ24ocGFnZXNbaV0pOworCQkJZm9yZWlnbi0+ZG9taWQgPSBtYXBfb3BzW2ldLmRvbTsKKwkJCWZvcmVpZ24tPmdyZWYgPSBtYXBfb3BzW2ldLnJlZjsKKwkJfQorCX0KKwogCXJldHVybiBzZXRfZm9yZWlnbl9wMm1fbWFwcGluZyhtYXBfb3BzLCBrbWFwX29wcywgcGFnZXMsIGNvdW50KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdudHRhYl9tYXBfcmVmcyk7CiAKIGludCBnbnR0YWJfdW5tYXBfcmVmcyhzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZiAqdW5tYXBfb3BzLAotCQkgICAgICBzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYgKmttYXBfb3BzLAorCQkgICAgICBzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZiAqa3VubWFwX29wcywKIAkJICAgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgaW50IGNvdW50KQogeworCXVuc2lnbmVkIGludCBpOwogCWludCByZXQ7CiAKIAlyZXQgPSBIWVBFUlZJU09SX2dyYW50X3RhYmxlX29wKEdOVFRBQk9QX3VubWFwX2dyYW50X3JlZiwgdW5tYXBfb3BzLCBjb3VudCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiBjbGVhcl9mb3JlaWduX3AybV9tYXBwaW5nKHVubWFwX29wcywga21hcF9vcHMsIHBhZ2VzLCBjb3VudCk7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCUNsZWFyUGFnZUZvcmVpZ24ocGFnZXNbaV0pOworCisJcmV0dXJuIGNsZWFyX2ZvcmVpZ25fcDJtX21hcHBpbmcodW5tYXBfb3BzLCBrdW5tYXBfb3BzLCBwYWdlcywgY291bnQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ250dGFiX3VubWFwX3JlZnMpOwogCisjZGVmaW5lIEdOVFRBQl9VTk1BUF9SRUZTX0RFTEFZIDUKKworc3RhdGljIHZvaWQgX19nbnR0YWJfdW5tYXBfcmVmc19hc3luYyhzdHJ1Y3QgZ250YWJfdW5tYXBfcXVldWVfZGF0YSogaXRlbSk7CisKK3N0YXRpYyB2b2lkIGdudHRhYl91bm1hcF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZ250YWJfdW5tYXBfcXVldWVfZGF0YQorCQkqdW5tYXBfZGF0YSA9IGNvbnRhaW5lcl9vZih3b3JrLCAKKwkJCQkJICAgc3RydWN0IGdudGFiX3VubWFwX3F1ZXVlX2RhdGEsCisJCQkJCSAgIGdudHRhYl93b3JrLndvcmspOworCWlmICh1bm1hcF9kYXRhLT5hZ2UgIT0gVUlOVF9NQVgpCisJCXVubWFwX2RhdGEtPmFnZSsrOworCV9fZ250dGFiX3VubWFwX3JlZnNfYXN5bmModW5tYXBfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZ250dGFiX3VubWFwX3JlZnNfYXN5bmMoc3RydWN0IGdudGFiX3VubWFwX3F1ZXVlX2RhdGEqIGl0ZW0pCit7CisJaW50IHJldDsKKwlpbnQgcGM7CisKKwlmb3IgKHBjID0gMDsgcGMgPCBpdGVtLT5jb3VudDsgcGMrKykgeworCQlpZiAocGFnZV9jb3VudChpdGVtLT5wYWdlc1twY10pID4gMSkgeworCQkJdW5zaWduZWQgbG9uZyBkZWxheSA9IEdOVFRBQl9VTk1BUF9SRUZTX0RFTEFZICogKGl0ZW0tPmFnZSArIDEpOworCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpdGVtLT5nbnR0YWJfd29yaywKKwkJCQkJICAgICAgbXNlY3NfdG9famlmZmllcyhkZWxheSkpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJcmV0ID0gZ250dGFiX3VubWFwX3JlZnMoaXRlbS0+dW5tYXBfb3BzLCBpdGVtLT5rdW5tYXBfb3BzLAorCQkJCWl0ZW0tPnBhZ2VzLCBpdGVtLT5jb3VudCk7CisJaXRlbS0+ZG9uZShyZXQsIGl0ZW0pOworfQorCit2b2lkIGdudHRhYl91bm1hcF9yZWZzX2FzeW5jKHN0cnVjdCBnbnRhYl91bm1hcF9xdWV1ZV9kYXRhKiBpdGVtKQoreworCUlOSVRfREVMQVlFRF9XT1JLKCZpdGVtLT5nbnR0YWJfd29yaywgZ250dGFiX3VubWFwX3dvcmspOworCWl0ZW0tPmFnZSA9IDA7CisKKwlfX2dudHRhYl91bm1hcF9yZWZzX2FzeW5jKGl0ZW0pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ250dGFiX3VubWFwX3JlZnNfYXN5bmMpOworCiBzdGF0aWMgaW50IGdudHRhYl9tYXBfZnJhbWVzX3YxKHhlbl9wZm5fdCAqZnJhbWVzLCB1bnNpZ25lZCBpbnQgbnJfZ2ZyYW1lcykKIHsKIAlpbnQgcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9tYW5hZ2UuYyBiL2RyaXZlcnMveGVuL21hbmFnZS5jCmluZGV4IGY4YmIzNmYuLmJmMTk0MDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL21hbmFnZS5jCisrKyBiL2RyaXZlcnMveGVuL21hbmFnZS5jCkBAIC0xMDUsMTAgKzEwNSwxNiBAQAogCiAJZXJyID0gZnJlZXplX3Byb2Nlc3NlcygpOwogCWlmIChlcnIpIHsKLQkJcHJfZXJyKCIlczogZnJlZXplIGZhaWxlZCAlZFxuIiwgX19mdW5jX18sIGVycik7CisJCXByX2VycigiJXM6IGZyZWV6ZSBwcm9jZXNzZXMgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKIAkJZ290byBvdXQ7CiAJfQogCisJZXJyID0gZnJlZXplX2tlcm5lbF90aHJlYWRzKCk7CisJaWYgKGVycikgeworCQlwcl9lcnIoIiVzOiBmcmVlemUga2VybmVsIHRocmVhZHMgZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgZXJyKTsKKwkJZ290byBvdXRfdGhhdzsKKwl9CisKIAllcnIgPSBkcG1fc3VzcGVuZF9zdGFydChQTVNHX0ZSRUVaRSk7CiAJaWYgKGVycikgewogCQlwcl9lcnIoIiVzOiBkcG1fc3VzcGVuZF9zdGFydCAlZFxuIiwgX19mdW5jX18sIGVycik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi90bWVtLmMgYi9kcml2ZXJzL3hlbi90bWVtLmMKaW5kZXggODNiNWM1My4uOGE2NTQyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vdG1lbS5jCisrKyBiL2RyaXZlcnMveGVuL3RtZW0uYwpAQCAtMzc0LDcgKzM3NCw3IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgeGVuX3RtZW1faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgeGVuX3RtZW1faW5pdCh2b2lkKQogewogCWlmICgheGVuX2RvbWFpbigpKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3hlbi1hY3BpLW1lbWhvdHBsdWcuYyBiL2RyaXZlcnMveGVuL3hlbi1hY3BpLW1lbWhvdHBsdWcuYwppbmRleCAzNGU0MGI3Li40ZmM4ODZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi94ZW4tYWNwaS1tZW1ob3RwbHVnLmMKKysrIGIvZHJpdmVycy94ZW4veGVuLWFjcGktbWVtaG90cGx1Zy5jCkBAIC0xMTcsOCArMTE3LDggQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGluZm8sICZtZW1fZGV2aWNlLT5yZXNfbGlzdCwgbGlzdCkgewogCQlpZiAoKGluZm8tPmNhY2hpbmcgPT0gYWRkcmVzczY0LmluZm8ubWVtLmNhY2hpbmcpICYmCiAJCSAgICAoaW5mby0+d3JpdGVfcHJvdGVjdCA9PSBhZGRyZXNzNjQuaW5mby5tZW0ud3JpdGVfcHJvdGVjdCkgJiYKLQkJICAgIChpbmZvLT5zdGFydF9hZGRyICsgaW5mby0+bGVuZ3RoID09IGFkZHJlc3M2NC5taW5pbXVtKSkgewotCQkJaW5mby0+bGVuZ3RoICs9IGFkZHJlc3M2NC5hZGRyZXNzX2xlbmd0aDsKKwkJICAgIChpbmZvLT5zdGFydF9hZGRyICsgaW5mby0+bGVuZ3RoID09IGFkZHJlc3M2NC5hZGRyZXNzLm1pbmltdW0pKSB7CisJCQlpbmZvLT5sZW5ndGggKz0gYWRkcmVzczY0LmFkZHJlc3MuYWRkcmVzc19sZW5ndGg7CiAJCQlyZXR1cm4gQUVfT0s7CiAJCX0KIAl9CkBAIC0xMzAsOCArMTMwLDggQEAKIAlJTklUX0xJU1RfSEVBRCgmbmV3LT5saXN0KTsKIAluZXctPmNhY2hpbmcgPSBhZGRyZXNzNjQuaW5mby5tZW0uY2FjaGluZzsKIAluZXctPndyaXRlX3Byb3RlY3QgPSBhZGRyZXNzNjQuaW5mby5tZW0ud3JpdGVfcHJvdGVjdDsKLQluZXctPnN0YXJ0X2FkZHIgPSBhZGRyZXNzNjQubWluaW11bTsKLQluZXctPmxlbmd0aCA9IGFkZHJlc3M2NC5hZGRyZXNzX2xlbmd0aDsKKwluZXctPnN0YXJ0X2FkZHIgPSBhZGRyZXNzNjQuYWRkcmVzcy5taW5pbXVtOworCW5ldy0+bGVuZ3RoID0gYWRkcmVzczY0LmFkZHJlc3MuYWRkcmVzc19sZW5ndGg7CiAJbGlzdF9hZGRfdGFpbCgmbmV3LT5saXN0LCAmbWVtX2RldmljZS0+cmVzX2xpc3QpOwogCiAJcmV0dXJuIEFFX09LOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4veGVuLXNjc2liYWNrLmMgYi9kcml2ZXJzL3hlbi94ZW4tc2NzaWJhY2suYwppbmRleCBlOTk5NDk2ZS4uNjE2NTNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4veGVuLXNjc2liYWNrLmMKKysrIGIvZHJpdmVycy94ZW4veGVuLXNjc2liYWNrLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKIAogI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+CiAKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2lfZGJnLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2VoLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX3RjcS5oPgpAQCAtMjI3LDcgKzIyOCw3IEBACiAJCXJldHVybjsKIAlpZiAoaSA+IHNjc2liYWNrX21heF9idWZmZXJfcGFnZXMpIHsKIAkJbiA9IG1pbihudW0sIGkgLSBzY3NpYmFja19tYXhfYnVmZmVyX3BhZ2VzKTsKLQkJZnJlZV94ZW5iYWxsb29uZWRfcGFnZXMobiwgcGFnZSArIG51bSAtIG4pOworCQlnbnR0YWJfZnJlZV9wYWdlcyhuLCBwYWdlICsgbnVtIC0gbik7CiAJCW4gPSBudW0gLSBuOwogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZnJlZV9wYWdlc19sb2NrLCBmbGFncyk7CkBAIC0yNDQsNyArMjQ1LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZnJlZV9wYWdlc19sb2NrLCBmbGFncyk7CiAJaWYgKGxpc3RfZW1wdHkoJnNjc2liYWNrX2ZyZWVfcGFnZXMpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZyZWVfcGFnZXNfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gYWxsb2NfeGVuYmFsbG9vbmVkX3BhZ2VzKDEsIHBhZ2UsIGZhbHNlKTsKKwkJcmV0dXJuIGdudHRhYl9hbGxvY19wYWdlcygxLCBwYWdlKTsKIAl9CiAJcGFnZVswXSA9IGxpc3RfZmlyc3RfZW50cnkoJnNjc2liYWNrX2ZyZWVfcGFnZXMsIHN0cnVjdCBwYWdlLCBscnUpOwogCWxpc3RfZGVsKCZwYWdlWzBdLT5scnUpOwpAQCAtMjEwNiw3ICsyMTA3LDcgQEAKIAl3aGlsZSAoZnJlZV9wYWdlc19udW0pIHsKIAkJaWYgKGdldF9mcmVlX3BhZ2UoJnBhZ2UpKQogCQkJQlVHKCk7Ci0JCWZyZWVfeGVuYmFsbG9vbmVkX3BhZ2VzKDEsICZwYWdlKTsKKwkJZ250dGFiX2ZyZWVfcGFnZXMoMSwgJnBhZ2UpOwogCX0KIAlzY3NpYmFja19kZXJlZ2lzdGVyX2NvbmZpZ2ZzKCk7CiAJeGVuYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZzY3NpYmFja19kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4veGVuYnVzL3hlbmJ1c19kZXZfZnJvbnRlbmQuYyBiL2RyaXZlcnMveGVuL3hlbmJ1cy94ZW5idXNfZGV2X2Zyb250ZW5kLmMKaW5kZXggODU1MzRlYS4uOTQzM2U0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4veGVuYnVzL3hlbmJ1c19kZXZfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL3hlbi94ZW5idXMveGVuYnVzX2Rldl9mcm9udGVuZC5jCkBAIC0zMjYsMTAgKzMyNiwxMyBAQAogCX0KIAogCWlmIChtc2dfdHlwZSA9PSBYU19UUkFOU0FDVElPTl9TVEFSVCkgewotCQl0cmFucy0+aGFuZGxlLmlkID0gc2ltcGxlX3N0cnRvdWwocmVwbHksIE5VTEwsIDApOwotCi0JCWxpc3RfYWRkKCZ0cmFucy0+bGlzdCwgJnUtPnRyYW5zYWN0aW9ucyk7Ci0JfSBlbHNlIGlmIChtc2dfdHlwZSA9PSBYU19UUkFOU0FDVElPTl9FTkQpIHsKKwkJaWYgKHUtPnUubXNnLnR5cGUgPT0gWFNfRVJST1IpCisJCQlrZnJlZSh0cmFucyk7CisJCWVsc2UgeworCQkJdHJhbnMtPmhhbmRsZS5pZCA9IHNpbXBsZV9zdHJ0b3VsKHJlcGx5LCBOVUxMLCAwKTsKKwkJCWxpc3RfYWRkKCZ0cmFucy0+bGlzdCwgJnUtPnRyYW5zYWN0aW9ucyk7CisJCX0KKwl9IGVsc2UgaWYgKHUtPnUubXNnLnR5cGUgPT0gWFNfVFJBTlNBQ1RJT05fRU5EKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkodHJhbnMsICZ1LT50cmFuc2FjdGlvbnMsIGxpc3QpCiAJCQlpZiAodHJhbnMtPmhhbmRsZS5pZCA9PSB1LT51Lm1zZy50eF9pZCkKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19maWxlLmMgYi9mcy85cC92ZnNfZmlsZS5jCmluZGV4IDU1OTQ1MDUuLmI0MDEzMzcgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19maWxlLmMKKysrIGIvZnMvOXAvdmZzX2ZpbGUuYwpAQCAtODMxLDcgKzgzMSw2IEBACiAJLmZhdWx0ID0gZmlsZW1hcF9mYXVsdCwKIAkubWFwX3BhZ2VzID0gZmlsZW1hcF9tYXBfcGFnZXMsCiAJLnBhZ2VfbWt3cml0ZSA9IHY5ZnNfdm1fcGFnZV9ta3dyaXRlLAotCS5yZW1hcF9wYWdlcyA9IGdlbmVyaWNfZmlsZV9yZW1hcF9wYWdlcywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgdjlmc19tbWFwX2ZpbGVfdm1fb3BzID0gewpAQCAtODM5LDcgKzgzOCw2IEBACiAJLmZhdWx0ID0gZmlsZW1hcF9mYXVsdCwKIAkubWFwX3BhZ2VzID0gZmlsZW1hcF9tYXBfcGFnZXMsCiAJLnBhZ2VfbWt3cml0ZSA9IHY5ZnNfdm1fcGFnZV9ta3dyaXRlLAotCS5yZW1hcF9wYWdlcyA9IGdlbmVyaWNfZmlsZV9yZW1hcF9wYWdlcywKIH07CiAKIApkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggNjY0OTkxYS4uYTZiYjUzMCAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC0xNjUsNiArMTY1LDcgQEAKIAlkZWZfYm9vbCBIVUdFVExCRlMKIAogc291cmNlICJmcy9jb25maWdmcy9LY29uZmlnIgorc291cmNlICJmcy9lZml2YXJmcy9LY29uZmlnIgogCiBlbmRtZW51CiAKQEAgLTIwOSw3ICsyMTAsNiBAQAogc291cmNlICJmcy91ZnMvS2NvbmZpZyIKIHNvdXJjZSAiZnMvZXhvZnMvS2NvbmZpZyIKIHNvdXJjZSAiZnMvZjJmcy9LY29uZmlnIgotc291cmNlICJmcy9lZml2YXJmcy9LY29uZmlnIgogCiBlbmRpZiAjIE1JU0NfRklMRVNZU1RFTVMKIApkaWZmIC0tZ2l0IGEvZnMvYWZzL3J4cnBjLmMgYi9mcy9hZnMvcnhycGMuYwppbmRleCAwNmUxNGJmLi5kYmM3MzJlIDEwMDY0NAotLS0gYS9mcy9hZnMvcnhycGMuYworKysgYi9mcy9hZnMvcnhycGMuYwpAQCAtMzA2LDggKzMwNiw4IEBACiAKIAkJCV9kZWJ1ZygiLSByYW5nZSAldS0ldSVzIiwKIAkJCSAgICAgICBvZmZzZXQsIHRvLCBtc2ctPm1zZ19mbGFncyA/ICIgW21vcmVdIiA6ICIiKTsKLQkJCWlvdl9pdGVyX2luaXQoJm1zZy0+bXNnX2l0ZXIsIFdSSVRFLAotCQkJCSAgICAgIChzdHJ1Y3QgaW92ZWMgKikgaW92LCAxLCB0byAtIG9mZnNldCk7CisJCQlpb3ZfaXRlcl9rdmVjKCZtc2ctPm1zZ19pdGVyLCBXUklURSB8IElURVJfS1ZFQywKKwkJCQkgICAgICBpb3YsIDEsIHRvIC0gb2Zmc2V0KTsKIAogCQkJLyogaGF2ZSB0byBjaGFuZ2UgdGhlIHN0YXRlICpiZWZvcmUqIHNlbmRpbmcgdGhlIGxhc3QKIAkJCSAqIHBhY2tldCBhcyBSeFJQQyBtaWdodCBnaXZlIHVzIHRoZSByZXBseSBiZWZvcmUgaXQKQEAgLTM4NCw3ICszODQsNyBAQAogCiAJbXNnLm1zZ19uYW1lCQk9IE5VTEw7CiAJbXNnLm1zZ19uYW1lbGVuCQk9IDA7Ci0JaW92X2l0ZXJfaW5pdCgmbXNnLm1zZ19pdGVyLCBXUklURSwgKHN0cnVjdCBpb3ZlYyAqKWlvdiwgMSwKKwlpb3ZfaXRlcl9rdmVjKCZtc2cubXNnX2l0ZXIsIFdSSVRFIHwgSVRFUl9LVkVDLCBpb3YsIDEsCiAJCSAgICAgIGNhbGwtPnJlcXVlc3Rfc2l6ZSk7CiAJbXNnLm1zZ19jb250cm9sCQk9IE5VTEw7CiAJbXNnLm1zZ19jb250cm9sbGVuCT0gMDsKQEAgLTc3MCw3ICs3NzAsNyBAQAogdm9pZCBhZnNfc2VuZF9lbXB0eV9yZXBseShzdHJ1Y3QgYWZzX2NhbGwgKmNhbGwpCiB7CiAJc3RydWN0IG1zZ2hkciBtc2c7Ci0Jc3RydWN0IGlvdmVjIGlvdlsxXTsKKwlzdHJ1Y3Qga3ZlYyBpb3ZbMV07CiAKIAlfZW50ZXIoIiIpOwogCkBAIC03NzgsNyArNzc4LDcgQEAKIAlpb3ZbMF0uaW92X2xlbgkJPSAwOwogCW1zZy5tc2dfbmFtZQkJPSBOVUxMOwogCW1zZy5tc2dfbmFtZWxlbgkJPSAwOwotCWlvdl9pdGVyX2luaXQoJm1zZy5tc2dfaXRlciwgV1JJVEUsIGlvdiwgMCwgMCk7CS8qIFdURj8gKi8KKwlpb3ZfaXRlcl9rdmVjKCZtc2cubXNnX2l0ZXIsIFdSSVRFIHwgSVRFUl9LVkVDLCBpb3YsIDAsIDApOwkvKiBXVEY/ICovCiAJbXNnLm1zZ19jb250cm9sCQk9IE5VTEw7CiAJbXNnLm1zZ19jb250cm9sbGVuCT0gMDsKIAltc2cubXNnX2ZsYWdzCQk9IDA7CkBAIC04MDUsNyArODA1LDcgQEAKIHZvaWQgYWZzX3NlbmRfc2ltcGxlX3JlcGx5KHN0cnVjdCBhZnNfY2FsbCAqY2FsbCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBtc2doZHIgbXNnOwotCXN0cnVjdCBpb3ZlYyBpb3ZbMV07CisJc3RydWN0IGt2ZWMgaW92WzFdOwogCWludCBuOwogCiAJX2VudGVyKCIiKTsKQEAgLTgxNCw3ICs4MTQsNyBAQAogCWlvdlswXS5pb3ZfbGVuCQk9IGxlbjsKIAltc2cubXNnX25hbWUJCT0gTlVMTDsKIAltc2cubXNnX25hbWVsZW4JCT0gMDsKLQlpb3ZfaXRlcl9pbml0KCZtc2cubXNnX2l0ZXIsIFdSSVRFLCBpb3YsIDEsIGxlbik7CisJaW92X2l0ZXJfa3ZlYygmbXNnLm1zZ19pdGVyLCBXUklURSB8IElURVJfS1ZFQywgaW92LCAxLCBsZW4pOwogCW1zZy5tc2dfY29udHJvbAkJPSBOVUxMOwogCW1zZy5tc2dfY29udHJvbGxlbgk9IDA7CiAJbXNnLm1zZ19mbGFncwkJPSAwOwpkaWZmIC0tZ2l0IGEvZnMvYWlvLmMgYi9mcy9haW8uYwppbmRleCAxYjc4OTNlLi5jNDI4ODcxIDEwMDY0NAotLS0gYS9mcy9haW8uYworKysgYi9mcy9haW8uYwpAQCAtMTE0MCw2ICsxMTQwLDEzIEBACiAJbG9uZyByZXQgPSAwOwogCWludCBjb3B5X3JldDsKIAorCS8qCisJICogVGhlIG11dGV4IGNhbiBibG9jayBhbmQgd2FrZSB1cyB1cCBhbmQgdGhhdCB3aWxsIGNhdXNlCisJICogd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX2hydGltZW91dCgpIHRvIHNjaGVkdWxlIHdpdGhvdXQgc2xlZXBpbmcKKwkgKiBhbmQgcmVwZWF0LiBUaGlzIHNob3VsZCBiZSByYXJlIGVub3VnaCB0aGF0IGl0IGRvZXNuJ3QgY2F1c2UKKwkgKiBwZWZvcm1hbmNlIGlzc3Vlcy4gU2VlIHRoZSBjb21tZW50IGluIHJlYWRfZXZlbnRzKCkgZm9yIG1vcmUgZGV0YWlsLgorCSAqLworCXNjaGVkX2Fubm90YXRlX3NsZWVwKCk7CiAJbXV0ZXhfbG9jaygmY3R4LT5yaW5nX2xvY2spOwogCiAJLyogQWNjZXNzIHRvIC0+cmluZ19wYWdlcyBoZXJlIGlzIHByb3RlY3RlZCBieSBjdHgtPnJpbmdfbG9jay4gKi8KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL0tjb25maWcgYi9mcy9idHJmcy9LY29uZmlnCmluZGV4IGE2Njc2OGUuLjgwZTljMTggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL0tjb25maWcKKysrIGIvZnMvYnRyZnMvS2NvbmZpZwpAQCAtOCw2ICs4LDcgQEAKIAlzZWxlY3QgTFpPX0RFQ09NUFJFU1MKIAlzZWxlY3QgUkFJRDZfUFEKIAlzZWxlY3QgWE9SX0JMT0NLUworCXNlbGVjdCBTUkNVCiAKIAloZWxwCiAJICBCdHJmcyBpcyBhIGdlbmVyYWwgcHVycG9zZSBjb3B5LW9uLXdyaXRlIGZpbGVzeXN0ZW0gd2l0aCBleHRlbnRzLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMgYi9mcy9idHJmcy9leHRlbnRfaW8uYwppbmRleCA3OTBkYmFlLi5jNzNkZjZhIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uYworKysgYi9mcy9idHJmcy9leHRlbnRfaW8uYwpAQCAtMTQwNyw4ICsxNDA3LDggQEAKIAl3aGlsZSAoaW5kZXggPD0gZW5kX2luZGV4KSB7CiAJCXBhZ2UgPSBmaW5kX2dldF9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGluZGV4KTsKIAkJQlVHX09OKCFwYWdlKTsgLyogUGFnZXMgc2hvdWxkIGJlIGluIHRoZSBleHRlbnRfaW9fdHJlZSAqLwotCQlhY2NvdW50X3BhZ2VfcmVkaXJ0eShwYWdlKTsKIAkJX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMocGFnZSk7CisJCWFjY291bnRfcGFnZV9yZWRpcnR5KHBhZ2UpOwogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJCWluZGV4Kys7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS5jIGIvZnMvYnRyZnMvZmlsZS5jCmluZGV4IGU0MDkwMjUuLmE2MDZhYjUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUuYworKysgYi9mcy9idHJmcy9maWxlLmMKQEAgLTIwODEsNyArMjA4MSw2IEBACiAJLmZhdWx0CQk9IGZpbGVtYXBfZmF1bHQsCiAJLm1hcF9wYWdlcwk9IGZpbGVtYXBfbWFwX3BhZ2VzLAogCS5wYWdlX21rd3JpdGUJPSBidHJmc19wYWdlX21rd3JpdGUsCi0JLnJlbWFwX3BhZ2VzCT0gZ2VuZXJpY19maWxlX3JlbWFwX3BhZ2VzLAogfTsKIAogc3RhdGljIGludCBidHJmc19maWxlX21tYXAoc3RydWN0IGZpbGUJKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc2NydWIuYyBiL2ZzL2J0cmZzL3NjcnViLmMKaW5kZXggMmYwZmJjMy4uZTQyN2NiN2UgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3NjcnViLmMKKysrIGIvZnMvYnRyZnMvc2NydWIuYwpAQCAtMzA2NSw2ICszMDY1LDggQEAKIAlwYXRoLT5zZWFyY2hfY29tbWl0X3Jvb3QgPSAxOwogCXBhdGgtPnNraXBfbG9ja2luZyA9IDE7CiAKKwlwcGF0aC0+c2VhcmNoX2NvbW1pdF9yb290ID0gMTsKKwlwcGF0aC0+c2tpcF9sb2NraW5nID0gMTsKIAkvKgogCSAqIHRyaWdnZXIgdGhlIHJlYWRhaGVhZCBmb3IgZXh0ZW50IHRyZWUgY3N1bSB0cmVlIGFuZCB3YWl0IGZvcgogCSAqIGNvbXBsZXRpb24uIER1cmluZyByZWFkYWhlYWQsIHRoZSBzY3J1YiBpcyBvZmZpY2lhbGx5IHBhdXNlZApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdHJlZS1sb2cuYyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKaW5kZXggOWEwMmRhMS4uMWE5NTg1ZCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvdHJlZS1sb2cuYworKysgYi9mcy9idHJmcy90cmVlLWxvZy5jCkBAIC0yNTkxLDYgKzI1OTEsNyBAQAogCX0KIAogCWlmIChsb2dfcm9vdF90cmVlLT5sb2dfdHJhbnNpZF9jb21taXR0ZWQgPj0gcm9vdF9sb2dfY3R4LmxvZ190cmFuc2lkKSB7CisJCWJsa19maW5pc2hfcGx1ZygmcGx1Zyk7CiAJCW11dGV4X3VubG9jaygmbG9nX3Jvb3RfdHJlZS0+bG9nX211dGV4KTsKIAkJcmV0ID0gcm9vdF9sb2dfY3R4LmxvZ19yZXQ7CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9hZGRyLmMgYi9mcy9jZXBoL2FkZHIuYwppbmRleCBjODFjMGUwMC4uMjRiZTA1OSAxMDA2NDQKLS0tIGEvZnMvY2VwaC9hZGRyLmMKKysrIGIvZnMvY2VwaC9hZGRyLmMKQEAgLTE1NjksNyArMTU2OSw2IEBACiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGNlcGhfdm1vcHMgPSB7CiAJLmZhdWx0CQk9IGNlcGhfZmlsZW1hcF9mYXVsdCwKIAkucGFnZV9ta3dyaXRlCT0gY2VwaF9wYWdlX21rd3JpdGUsCi0JLnJlbWFwX3BhZ2VzCT0gZ2VuZXJpY19maWxlX3JlbWFwX3BhZ2VzLAogfTsKIAogaW50IGNlcGhfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCmRpZmYgLS1naXQgYS9mcy9jZXBoL2xvY2tzLmMgYi9mcy9jZXBoL2xvY2tzLmMKaW5kZXggYzM1YzVjNi4uMDZlYTVjZCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9sb2Nrcy5jCisrKyBiL2ZzL2NlcGgvbG9ja3MuYwpAQCAtMjM5LDIzICsyMzksMjEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKioKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggbG9ja19mbG9ja3MoKSBhbHJlYWR5IGhlbGQuIEZpbGxzIGluIHRoZSBwYXNzZWQKLSAqIGNvdW50ZXIgdmFyaWFibGVzLCBzbyB5b3UgY2FuIHByZXBhcmUgcGFnZWxpc3QgbWV0YWRhdGEgYmVmb3JlIGNhbGxpbmcKLSAqIGNlcGhfZW5jb2RlX2xvY2tzLgorLyoKKyAqIEZpbGxzIGluIHRoZSBwYXNzZWQgY291bnRlciB2YXJpYWJsZXMsIHNvIHlvdSBjYW4gcHJlcGFyZSBwYWdlbGlzdCBtZXRhZGF0YQorICogYmVmb3JlIGNhbGxpbmcgY2VwaF9lbmNvZGVfbG9ja3MuCiAgKi8KIHZvaWQgY2VwaF9jb3VudF9sb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgKmZjbnRsX2NvdW50LCBpbnQgKmZsb2NrX2NvdW50KQogewotCXN0cnVjdCBmaWxlX2xvY2sgKmxvY2s7CisJc3RydWN0IGZpbGVfbG9ja19jb250ZXh0ICpjdHg7CiAKIAkqZmNudGxfY291bnQgPSAwOwogCSpmbG9ja19jb3VudCA9IDA7CiAKLQlmb3IgKGxvY2sgPSBpbm9kZS0+aV9mbG9jazsgbG9jayAhPSBOVUxMOyBsb2NrID0gbG9jay0+ZmxfbmV4dCkgewotCQlpZiAobG9jay0+ZmxfZmxhZ3MgJiBGTF9QT1NJWCkKLQkJCSsrKCpmY250bF9jb3VudCk7Ci0JCWVsc2UgaWYgKGxvY2stPmZsX2ZsYWdzICYgRkxfRkxPQ0spCi0JCQkrKygqZmxvY2tfY291bnQpOworCWN0eCA9IGlub2RlLT5pX2ZsY3R4OworCWlmIChjdHgpIHsKKwkJKmZjbnRsX2NvdW50ID0gY3R4LT5mbGNfcG9zaXhfY250OworCQkqZmxvY2tfY291bnQgPSBjdHgtPmZsY19mbG9ja19jbnQ7CiAJfQogCWRvdXQoImNvdW50ZWQgJWQgZmxvY2sgbG9ja3MgYW5kICVkIGZjbnRsIGxvY2tzIiwKIAkgICAgICpmbG9ja19jb3VudCwgKmZjbnRsX2NvdW50KTsKQEAgLTI3MSw2ICsyNjksNyBAQAogCQkJCWludCBudW1fZmNudGxfbG9ja3MsIGludCBudW1fZmxvY2tfbG9ja3MpCiB7CiAJc3RydWN0IGZpbGVfbG9jayAqbG9jazsKKwlzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmN0eCA9IGlub2RlLT5pX2ZsY3R4OwogCWludCBlcnIgPSAwOwogCWludCBzZWVuX2ZjbnRsID0gMDsKIAlpbnQgc2Vlbl9mbG9jayA9IDA7CkBAIC0yNzksMzMgKzI3OCwzNCBAQAogCWRvdXQoImVuY29kaW5nICVkIGZsb2NrIGFuZCAlZCBmY250bCBsb2NrcyIsIG51bV9mbG9ja19sb2NrcywKIAkgICAgIG51bV9mY250bF9sb2Nrcyk7CiAKLQlmb3IgKGxvY2sgPSBpbm9kZS0+aV9mbG9jazsgbG9jayAhPSBOVUxMOyBsb2NrID0gbG9jay0+ZmxfbmV4dCkgewotCQlpZiAobG9jay0+ZmxfZmxhZ3MgJiBGTF9QT1NJWCkgewotCQkJKytzZWVuX2ZjbnRsOwotCQkJaWYgKHNlZW5fZmNudGwgPiBudW1fZmNudGxfbG9ja3MpIHsKLQkJCQllcnIgPSAtRU5PU1BDOwotCQkJCWdvdG8gZmFpbDsKLQkJCX0KLQkJCWVyciA9IGxvY2tfdG9fY2VwaF9maWxlbG9jayhsb2NrLCAmZmxvY2tzW2xdKTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBmYWlsOwotCQkJKytsOworCWlmICghY3R4KQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9jaygmY3R4LT5mbGNfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShsb2NrLCAmY3R4LT5mbGNfZmxvY2ssIGZsX2xpc3QpIHsKKwkJKytzZWVuX2ZjbnRsOworCQlpZiAoc2Vlbl9mY250bCA+IG51bV9mY250bF9sb2NrcykgeworCQkJZXJyID0gLUVOT1NQQzsKKwkJCWdvdG8gZmFpbDsKIAkJfQorCQllcnIgPSBsb2NrX3RvX2NlcGhfZmlsZWxvY2sobG9jaywgJmZsb2Nrc1tsXSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZhaWw7CisJCSsrbDsKIAl9Ci0JZm9yIChsb2NrID0gaW5vZGUtPmlfZmxvY2s7IGxvY2sgIT0gTlVMTDsgbG9jayA9IGxvY2stPmZsX25leHQpIHsKLQkJaWYgKGxvY2stPmZsX2ZsYWdzICYgRkxfRkxPQ0spIHsKLQkJCSsrc2Vlbl9mbG9jazsKLQkJCWlmIChzZWVuX2Zsb2NrID4gbnVtX2Zsb2NrX2xvY2tzKSB7Ci0JCQkJZXJyID0gLUVOT1NQQzsKLQkJCQlnb3RvIGZhaWw7Ci0JCQl9Ci0JCQllcnIgPSBsb2NrX3RvX2NlcGhfZmlsZWxvY2sobG9jaywgJmZsb2Nrc1tsXSk7Ci0JCQlpZiAoZXJyKQotCQkJCWdvdG8gZmFpbDsKLQkJCSsrbDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvY2ssICZjdHgtPmZsY19mbG9jaywgZmxfbGlzdCkgeworCQkrK3NlZW5fZmxvY2s7CisJCWlmIChzZWVuX2Zsb2NrID4gbnVtX2Zsb2NrX2xvY2tzKSB7CisJCQllcnIgPSAtRU5PU1BDOworCQkJZ290byBmYWlsOwogCQl9CisJCWVyciA9IGxvY2tfdG9fY2VwaF9maWxlbG9jayhsb2NrLCAmZmxvY2tzW2xdKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZmFpbDsKKwkJKytsOwogCX0KIGZhaWw6CisJc3Bpbl91bmxvY2soJmN0eC0+ZmxjX2xvY2spOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvbWRzX2NsaWVudC5jIGIvZnMvY2VwaC9tZHNfY2xpZW50LmMKaW5kZXggZDIxNzFmNC4uNWY2MmZiNyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9tZHNfY2xpZW50LmMKKysrIGIvZnMvY2VwaC9tZHNfY2xpZW50LmMKQEAgLTI3MDAsMjAgKzI3MDAsMTYgQEAKIAkJc3RydWN0IGNlcGhfZmlsZWxvY2sgKmZsb2NrczsKIAogZW5jb2RlX2FnYWluOgotCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCQljZXBoX2NvdW50X2xvY2tzKGlub2RlLCAmbnVtX2ZjbnRsX2xvY2tzLCAmbnVtX2Zsb2NrX2xvY2tzKTsKLQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCQlmbG9ja3MgPSBrbWFsbG9jKChudW1fZmNudGxfbG9ja3MrbnVtX2Zsb2NrX2xvY2tzKSAqCiAJCQkJIHNpemVvZihzdHJ1Y3QgY2VwaF9maWxlbG9jayksIEdGUF9OT0ZTKTsKIAkJaWYgKCFmbG9ja3MpIHsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIG91dF9mcmVlOwogCQl9Ci0JCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCWVyciA9IGNlcGhfZW5jb2RlX2xvY2tzX3RvX2J1ZmZlcihpbm9kZSwgZmxvY2tzLAogCQkJCQkJICBudW1fZmNudGxfbG9ja3MsCiAJCQkJCQkgIG51bV9mbG9ja19sb2Nrcyk7Ci0JCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkJaWYgKGVycikgewogCQkJa2ZyZWUoZmxvY2tzKTsKIAkJCWlmIChlcnIgPT0gLUVOT1NQQykKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKaW5kZXggOWM1NmVmNy4uN2ZlYmNmMiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMKKysrIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKQEAgLTYwNiw5ICs2MDYsMTEgQEAKIAkJKmZsYWdzID0gQ0lGU1NFQ19NVVNUX05UTE1WMjsKIAllbHNlIGlmICgoKmZsYWdzICYgQ0lGU1NFQ19NVVNUX05UTE0pID09IENJRlNTRUNfTVVTVF9OVExNKQogCQkqZmxhZ3MgPSBDSUZTU0VDX01VU1RfTlRMTTsKLQllbHNlIGlmICgoKmZsYWdzICYgQ0lGU1NFQ19NVVNUX0xBTk1BTikgPT0gQ0lGU1NFQ19NVVNUX0xBTk1BTikKKwllbHNlIGlmIChDSUZTU0VDX01VU1RfTEFOTUFOICYmCisJCSAoKmZsYWdzICYgQ0lGU1NFQ19NVVNUX0xBTk1BTikgPT0gQ0lGU1NFQ19NVVNUX0xBTk1BTikKIAkJKmZsYWdzID0gQ0lGU1NFQ19NVVNUX0xBTk1BTjsKLQllbHNlIGlmICgoKmZsYWdzICYgQ0lGU1NFQ19NVVNUX1BMTlRYVCkgPT0gQ0lGU1NFQ19NVVNUX1BMTlRYVCkKKwllbHNlIGlmIChDSUZTU0VDX01VU1RfUExOVFhUICYmCisJCSAoKmZsYWdzICYgQ0lGU1NFQ19NVVNUX1BMTlRYVCkgPT0gQ0lGU1NFQ19NVVNUX1BMTlRYVCkKIAkJKmZsYWdzID0gQ0lGU1NFQ19NVVNUX1BMTlRYVDsKIAogCSpmbGFncyB8PSBzaWduZmxhZ3M7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IDk2YjdlOWIuLjhmZTFmN2EgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC0zNjYsNiArMzY2LDcgQEAKIAlzdHJ1Y3QgY2lmc0xvY2tJbmZvICpsaSwgKnRtcDsKIAlzdHJ1Y3QgY2lmc19maWQgZmlkOwogCXN0cnVjdCBjaWZzX3BlbmRpbmdfb3BlbiBvcGVuOworCWJvb2wgb3Bsb2NrX2JyZWFrX2NhbmNlbGxlZDsKIAogCXNwaW5fbG9jaygmY2lmc19maWxlX2xpc3RfbG9jayk7CiAJaWYgKC0tY2lmc19maWxlLT5jb3VudCA+IDApIHsKQEAgLTM5Nyw3ICszOTgsNyBAQAogCX0KIAlzcGluX3VubG9jaygmY2lmc19maWxlX2xpc3RfbG9jayk7CiAKLQljYW5jZWxfd29ya19zeW5jKCZjaWZzX2ZpbGUtPm9wbG9ja19icmVhayk7CisJb3Bsb2NrX2JyZWFrX2NhbmNlbGxlZCA9IGNhbmNlbF93b3JrX3N5bmMoJmNpZnNfZmlsZS0+b3Bsb2NrX2JyZWFrKTsKIAogCWlmICghdGNvbi0+bmVlZF9yZWNvbm5lY3QgJiYgIWNpZnNfZmlsZS0+aW52YWxpZEhhbmRsZSkgewogCQlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIgPSB0Y29uLT5zZXMtPnNlcnZlcjsKQEAgLTQwOSw2ICs0MTAsOSBAQAogCQlfZnJlZV94aWQoeGlkKTsKIAl9CiAKKwlpZiAob3Bsb2NrX2JyZWFrX2NhbmNlbGxlZCkKKwkJY2lmc19kb25lX29wbG9ja19icmVhayhjaWZzaSk7CisKIAljaWZzX2RlbF9wZW5kaW5nX29wZW4oJm9wZW4pOwogCiAJLyoKQEAgLTExMDksMTEgKzExMTMsNiBAQAogCXJldHVybiByYzsKIH0KIAotLyogY29waWVkIGZyb20gZnMvbG9ja3MuYyB3aXRoIGEgbmFtZSBjaGFuZ2UgKi8KLSNkZWZpbmUgY2lmc19mb3JfZWFjaF9sb2NrKGlub2RlLCBsb2NrcCkgXAotCWZvciAobG9ja3AgPSAmaW5vZGUtPmlfZmxvY2s7ICpsb2NrcCAhPSBOVUxMOyBcCi0JICAgICBsb2NrcCA9ICYoKmxvY2twKS0+ZmxfbmV4dCkKLQogc3RydWN0IGxvY2tfdG9fcHVzaCB7CiAJc3RydWN0IGxpc3RfaGVhZCBsbGlzdDsKIAlfX3U2NCBvZmZzZXQ7CkBAIC0xMTI4LDggKzExMjcsOSBAQAogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjZmlsZS0+ZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBjaWZzX3Rjb24gKnRjb24gPSB0bGlua190Y29uKGNmaWxlLT50bGluayk7Ci0Jc3RydWN0IGZpbGVfbG9jayAqZmxvY2ssICoqYmVmb3JlOwotCXVuc2lnbmVkIGludCBjb3VudCA9IDAsIGkgPSAwOworCXN0cnVjdCBmaWxlX2xvY2sgKmZsb2NrOworCXN0cnVjdCBmaWxlX2xvY2tfY29udGV4dCAqZmxjdHggPSBpbm9kZS0+aV9mbGN0eDsKKwl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmMgPSAwLCB4aWQsIHR5cGU7CiAJc3RydWN0IGxpc3RfaGVhZCBsb2Nrc190b19zZW5kLCAqZWw7CiAJc3RydWN0IGxvY2tfdG9fcHVzaCAqbGNrLCAqdG1wOwpAQCAtMTEzNywyMSArMTEzNywxNyBAQAogCiAJeGlkID0gZ2V0X3hpZCgpOwogCi0Jc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQljaWZzX2Zvcl9lYWNoX2xvY2soaW5vZGUsIGJlZm9yZSkgewotCQlpZiAoKCpiZWZvcmUpLT5mbF9mbGFncyAmIEZMX1BPU0lYKQotCQkJY291bnQrKzsKLQl9Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCWlmICghZmxjdHgpCisJCWdvdG8gb3V0OwogCiAJSU5JVF9MSVNUX0hFQUQoJmxvY2tzX3RvX3NlbmQpOwogCiAJLyoKLQkgKiBBbGxvY2F0aW5nIGNvdW50IGxvY2tzIGlzIGVub3VnaCBiZWNhdXNlIG5vIEZMX1BPU0lYIGxvY2tzIGNhbiBiZQotCSAqIGFkZGVkIHRvIHRoZSBsaXN0IHdoaWxlIHdlIGFyZSBob2xkaW5nIGNpbm9kZS0+bG9ja19zZW0gdGhhdAorCSAqIEFsbG9jYXRpbmcgZmxjX3Bvc2l4X2NudCBsb2NrcyBpcyBlbm91Z2ggYmVjYXVzZSBubyBGTF9QT1NJWCBsb2NrcworCSAqIGNhbiBiZSBhZGRlZCB0byB0aGUgbGlzdCB3aGlsZSB3ZSBhcmUgaG9sZGluZyBjaW5vZGUtPmxvY2tfc2VtIHRoYXQKIAkgKiBwcm90ZWN0cyBsb2NraW5nIG9wZXJhdGlvbnMgb2YgdGhpcyBpbm9kZS4KIAkgKi8KLQlmb3IgKDsgaSA8IGNvdW50OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZmxjdHgtPmZsY19wb3NpeF9jbnQ7IGkrKykgewogCQlsY2sgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbG9ja190b19wdXNoKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghbGNrKSB7CiAJCQlyYyA9IC1FTk9NRU07CkBAIC0xMTYxLDExICsxMTU3LDggQEAKIAl9CiAKIAllbCA9IGxvY2tzX3RvX3NlbmQubmV4dDsKLQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCWNpZnNfZm9yX2VhY2hfbG9jayhpbm9kZSwgYmVmb3JlKSB7Ci0JCWZsb2NrID0gKmJlZm9yZTsKLQkJaWYgKChmbG9jay0+ZmxfZmxhZ3MgJiBGTF9QT1NJWCkgPT0gMCkKLQkJCWNvbnRpbnVlOworCXNwaW5fbG9jaygmZmxjdHgtPmZsY19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsb2NrLCAmZmxjdHgtPmZsY19wb3NpeCwgZmxfbGlzdCkgewogCQlpZiAoZWwgPT0gJmxvY2tzX3RvX3NlbmQpIHsKIAkJCS8qCiAJCQkgKiBUaGUgbGlzdCBlbmRlZC4gV2UgZG9uJ3QgaGF2ZSBlbm91Z2ggYWxsb2NhdGVkCkBAIC0xMTg1LDkgKzExNzgsOCBAQAogCQlsY2stPmxlbmd0aCA9IGxlbmd0aDsKIAkJbGNrLT50eXBlID0gdHlwZTsKIAkJbGNrLT5vZmZzZXQgPSBmbG9jay0+Zmxfc3RhcnQ7Ci0JCWVsID0gZWwtPm5leHQ7CiAJfQotCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlzcGluX3VubG9jaygmZmxjdHgtPmZsY19sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsY2ssIHRtcCwgJmxvY2tzX3RvX3NlbmQsIGxsaXN0KSB7CiAJCWludCBzdG9yZWRfcmM7CkBAIC0zMjQ0LDcgKzMyMzYsNiBAQAogCS5mYXVsdCA9IGZpbGVtYXBfZmF1bHQsCiAJLm1hcF9wYWdlcyA9IGZpbGVtYXBfbWFwX3BhZ2VzLAogCS5wYWdlX21rd3JpdGUgPSBjaWZzX3BhZ2VfbWt3cml0ZSwKLQkucmVtYXBfcGFnZXMgPSBnZW5lcmljX2ZpbGVfcmVtYXBfcGFnZXMsCiB9OwogCiBpbnQgY2lmc19maWxlX3N0cmljdF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc21iZW5jcnlwdC5jIGIvZnMvY2lmcy9zbWJlbmNyeXB0LmMKaW5kZXggNmMxNTY2My4uYTQyMzJlYyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zbWJlbmNyeXB0LmMKKysrIGIvZnMvY2lmcy9zbWJlbmNyeXB0LmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogCX0KIAogCXJjID0gbWRmb3VyKHAxNiwgKHVuc2lnbmVkIGNoYXIgKikgd3B3ZCwgbGVuICogc2l6ZW9mKF9fbGUxNikpOwotCW1lbXNldCh3cHdkLCAwLCAxMjkgKiBzaXplb2YoX19sZTE2KSk7CisJbWVtemVyb19leHBsaWNpdCh3cHdkLCBzaXplb2Yod3B3ZCkpOwogCiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZnMvZGxtL25ldGxpbmsuYyBiL2ZzL2RsbS9uZXRsaW5rLmMKaW5kZXggZTdjZmJhZi4uMWU2ZTIyNyAxMDA2NDQKLS0tIGEvZnMvZGxtL25ldGxpbmsuYworKysgYi9mcy9kbG0vbmV0bGluay5jCkBAIC01NiwxMyArNTYsOCBAQAogewogCXN0cnVjdCBnZW5sbXNnaGRyICpnZW5saGRyID0gbmxtc2dfZGF0YSgoc3RydWN0IG5sbXNnaGRyICopc2tiLT5kYXRhKTsKIAl2b2lkICpkYXRhID0gZ2VubG1zZ19kYXRhKGdlbmxoZHIpOwotCWludCBydjsKIAotCXJ2ID0gZ2VubG1zZ19lbmQoc2tiLCBkYXRhKTsKLQlpZiAocnYgPCAwKSB7Ci0JCW5sbXNnX2ZyZWUoc2tiKTsKLQkJcmV0dXJuIHJ2OwotCX0KKwlnZW5sbXNnX2VuZChza2IsIGRhdGEpOwogCiAJcmV0dXJuIGdlbmxtc2dfdW5pY2FzdCgmaW5pdF9uZXQsIHNrYiwgbGlzdGVuZXJfbmxwb3J0aWQpOwogfQpkaWZmIC0tZ2l0IGEvZnMvZWZpdmFyZnMvS2NvbmZpZyBiL2ZzL2VmaXZhcmZzL0tjb25maWcKaW5kZXggMzY3YmJiMS4uYzI0OTllZiAxMDA2NDQKLS0tIGEvZnMvZWZpdmFyZnMvS2NvbmZpZworKysgYi9mcy9lZml2YXJmcy9LY29uZmlnCkBAIC0xLDYgKzEsNyBAQAogY29uZmlnIEVGSVZBUl9GUwogCXRyaXN0YXRlICJFRkkgVmFyaWFibGUgZmlsZXN5c3RlbSIKIAlkZXBlbmRzIG9uIEVGSQorCWRlZmF1bHQgbQogCWhlbHAKIAkgIGVmaXZhcmZzIGlzIGEgcmVwbGFjZW1lbnQgZmlsZXN5c3RlbSBmb3IgdGhlIG9sZCBFRkkKIAkgIHZhcmlhYmxlIHN1cHBvcnQgdmlhIHN5c2ZzLCBhcyBpdCBkb2Vzbid0IHN1ZmZlciBmcm9tIHRoZQpkaWZmIC0tZ2l0IGEvZnMvZWZpdmFyZnMvc3VwZXIuYyBiL2ZzL2VmaXZhcmZzL3N1cGVyLmMKaW5kZXggNmRhZDExNy4uZGRiY2U0MiAxMDA2NDQKLS0tIGEvZnMvZWZpdmFyZnMvc3VwZXIuYworKysgYi9mcy9lZml2YXJmcy9zdXBlci5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogCW5hbWVbbGVuXSA9ICctJzsKIAotCWVmaV9ndWlkX3VucGFyc2UoJmVudHJ5LT52YXIuVmVuZG9yR3VpZCwgbmFtZSArIGxlbiArIDEpOworCWVmaV9ndWlkX3RvX3N0cigmZW50cnktPnZhci5WZW5kb3JHdWlkLCBuYW1lICsgbGVuICsgMSk7CiAKIAluYW1lW2xlbiArIEVGSV9WQVJJQUJMRV9HVUlEX0xFTisxXSA9ICdcMCc7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCA5YjRlN2Q3Li5kNGRiZjNjIDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC00NjYsNiArNDY2LDggQEAKIAl9CiAJc2ItPnNfZnNfaW5mbyA9IE5VTEw7CiAJa2ZyZWUoc2JpLT5zX2Jsb2NrZ3JvdXBfbG9jayk7CisJbXV0ZXhfZGVzdHJveSgmc2JpLT5zX29ycGhhbl9sb2NrKTsKKwltdXRleF9kZXN0cm95KCZzYmktPnNfcmVzaXplX2xvY2spOwogCWtmcmVlKHNiaSk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZmlsZS5jIGIvZnMvZXh0NC9maWxlLmMKaW5kZXggODEzMWJlOC4uN2NiNTkyMyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9maWxlLmMKKysrIGIvZnMvZXh0NC9maWxlLmMKQEAgLTE5NSw3ICsxOTUsNiBAQAogCS5mYXVsdAkJPSBmaWxlbWFwX2ZhdWx0LAogCS5tYXBfcGFnZXMJPSBmaWxlbWFwX21hcF9wYWdlcywKIAkucGFnZV9ta3dyaXRlICAgPSBleHQ0X3BhZ2VfbWt3cml0ZSwKLQkucmVtYXBfcGFnZXMJPSBnZW5lcmljX2ZpbGVfcmVtYXBfcGFnZXMsCiB9OwogCiBzdGF0aWMgaW50IGV4dDRfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCA3NGM1ZjUzLi5hYzY0ZWRiIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC0xMDQ2LDEwICsxMDQ2LDcgQEAKIHN0YXRpYyBpbnQgZXh0NF93cml0ZV9pbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsKIHN0YXRpYyBpbnQgZXh0NF9xdW90YV9vbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKIAkJCSBzdHJ1Y3QgcGF0aCAqcGF0aCk7Ci1zdGF0aWMgaW50IGV4dDRfcXVvdGFfb25fc3lzZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwKLQkJCQkgaW50IGZvcm1hdF9pZCk7CiBzdGF0aWMgaW50IGV4dDRfcXVvdGFfb2ZmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsKLXN0YXRpYyBpbnQgZXh0NF9xdW90YV9vZmZfc3lzZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSk7CiBzdGF0aWMgaW50IGV4dDRfcXVvdGFfb25fbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpOwogc3RhdGljIHNzaXplX3QgZXh0NF9xdW90YV9yZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBjaGFyICpkYXRhLAogCQkJICAgICAgIHNpemVfdCBsZW4sIGxvZmZfdCBvZmYpOwpAQCAtMTA4NCwxNiArMTA4MSw2IEBACiAJLmdldF9kcWJsawk9IGRxdW90X2dldF9kcWJsaywKIAkuc2V0X2RxYmxrCT0gZHF1b3Rfc2V0X2RxYmxrCiB9OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcyBleHQ0X3FjdGxfc3lzZmlsZV9vcGVyYXRpb25zID0gewotCS5xdW90YV9vbl9tZXRhCT0gZXh0NF9xdW90YV9vbl9zeXNmaWxlLAotCS5xdW90YV9vZmYJPSBleHQ0X3F1b3RhX29mZl9zeXNmaWxlLAotCS5xdW90YV9zeW5jCT0gZHF1b3RfcXVvdGFfc3luYywKLQkuZ2V0X2luZm8JPSBkcXVvdF9nZXRfZHFpbmZvLAotCS5zZXRfaW5mbwk9IGRxdW90X3NldF9kcWluZm8sCi0JLmdldF9kcWJsawk9IGRxdW90X2dldF9kcWJsaywKLQkuc2V0X2RxYmxrCT0gZHF1b3Rfc2V0X2RxYmxrCi19OwogI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBleHQ0X3NvcHMgPSB7CkBAIC0zOTM1LDcgKzM5MjIsNyBAQAogI2lmZGVmIENPTkZJR19RVU9UQQogCXNiLT5kcV9vcCA9ICZleHQ0X3F1b3RhX29wZXJhdGlvbnM7CiAJaWYgKEVYVDRfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBKSkKLQkJc2ItPnNfcWNvcCA9ICZleHQ0X3FjdGxfc3lzZmlsZV9vcGVyYXRpb25zOworCQlzYi0+c19xY29wID0gJmRxdW90X3F1b3RhY3RsX3N5c2ZpbGVfb3BzOwogCWVsc2UKIAkJc2ItPnNfcWNvcCA9ICZleHQ0X3FjdGxfb3BlcmF0aW9uczsKIAlzYi0+c19xdW90YV90eXBlcyA9IFFUWVBFX01BU0tfVVNSIHwgUVRZUEVfTUFTS19HUlA7CkBAIC01Mjg4LDIxICs1Mjc1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIHF1b3RhX29uIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIFFVT1RBIGZlYXR1cmUgaXMgc2V0LgotICovCi1zdGF0aWMgaW50IGV4dDRfcXVvdGFfb25fc3lzZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwKLQkJCQkgaW50IGZvcm1hdF9pZCkKLXsKLQlpZiAoIUVYVDRfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKgotCSAqIFVTQUdFIHdhcyBlbmFibGVkIGF0IG1vdW50IHRpbWUuIE9ubHkgbmVlZCB0byBlbmFibGUgTElNSVRTIG5vdy4KLQkgKi8KLQlyZXR1cm4gZXh0NF9xdW90YV9lbmFibGUoc2IsIHR5cGUsIGZvcm1hdF9pZCwgRFFVT1RfTElNSVRTX0VOQUJMRUQpOwotfQotCiBzdGF0aWMgaW50IGV4dDRfcXVvdGFfb2ZmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBzYl9kcW9wdChzYiktPmZpbGVzW3R5cGVdOwpAQCAtNTMyOSwxOCArNTMwMSw2IEBACiAJcmV0dXJuIGRxdW90X3F1b3RhX29mZihzYiwgdHlwZSk7CiB9CiAKLS8qCi0gKiBxdW90YV9vZmYgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gUVVPVEEgZmVhdHVyZSBpcyBzZXQuCi0gKi8KLXN0YXRpYyBpbnQgZXh0NF9xdW90YV9vZmZfc3lzZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKLXsKLQlpZiAoIUVYVDRfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1FVT1RBKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBEaXNhYmxlIG9ubHkgdGhlIGxpbWl0cy4gKi8KLQlyZXR1cm4gZHF1b3RfZGlzYWJsZShzYiwgdHlwZSwgRFFVT1RfTElNSVRTX0VOQUJMRUQpOwotfQotCiAvKiBSZWFkIGRhdGEgZnJvbSBxdW90YWZpbGUgLSBhdm9pZCBwYWdlY2FjaGUgYW5kIHN1Y2ggYmVjYXVzZSB3ZSBjYW5ub3QgYWZmb3JkCiAgKiBhY3F1aXJpbmcgdGhlIGxvY2tzLi4uIEFzIHF1b3RhIGZpbGVzIGFyZSBuZXZlciB0cnVuY2F0ZWQgYW5kIHF1b3RhIGNvZGUKICAqIGl0c2VsZiBzZXJpYWxpemVzIHRoZSBvcGVyYXRpb25zIChhbmQgbm8gb25lIGVsc2Ugc2hvdWxkIHRvdWNoIHRoZSBmaWxlcykKZGlmZiAtLWdpdCBhL2ZzL2YyZnMvZmlsZS5jIGIvZnMvZjJmcy9maWxlLmMKaW5kZXggM2MyN2UwZS4uNTY3NGJhMSAxMDA2NDQKLS0tIGEvZnMvZjJmcy9maWxlLmMKKysrIGIvZnMvZjJmcy9maWxlLmMKQEAgLTkyLDcgKzkyLDYgQEAKIAkuZmF1bHQJCT0gZmlsZW1hcF9mYXVsdCwKIAkubWFwX3BhZ2VzCT0gZmlsZW1hcF9tYXBfcGFnZXMsCiAJLnBhZ2VfbWt3cml0ZQk9IGYyZnNfdm1fcGFnZV9ta3dyaXRlLAotCS5yZW1hcF9wYWdlcwk9IGdlbmVyaWNfZmlsZV9yZW1hcF9wYWdlcywKIH07CiAKIHN0YXRpYyBpbnQgZ2V0X3BhcmVudF9pbm8oc3RydWN0IGlub2RlICppbm9kZSwgbmlkX3QgKnBpbm8pCmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IDc2MGIyYzUuLmQ3NjllNTkgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0yMDYyLDcgKzIwNjIsNiBAQAogCS5mYXVsdAkJPSBmaWxlbWFwX2ZhdWx0LAogCS5tYXBfcGFnZXMJPSBmaWxlbWFwX21hcF9wYWdlcywKIAkucGFnZV9ta3dyaXRlCT0gZnVzZV9wYWdlX21rd3JpdGUsCi0JLnJlbWFwX3BhZ2VzCT0gZ2VuZXJpY19maWxlX3JlbWFwX3BhZ2VzLAogfTsKIAogc3RhdGljIGludCBmdXNlX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCmRpZmYgLS1naXQgYS9mcy9nZnMyL2FjbC5jIGIvZnMvZ2ZzMi9hY2wuYwppbmRleCAzMDg4ZTJhLi43YjMxNDMwIDEwMDY0NAotLS0gYS9mcy9nZnMyL2FjbC5jCisrKyBiL2ZzL2dmczIvYWNsLmMKQEAgLTczLDcgKzczLDcgQEAKIAogCUJVR19PTihuYW1lID09IE5VTEwpOwogCi0JaWYgKGFjbC0+YV9jb3VudCA+IEdGUzJfQUNMX01BWF9FTlRSSUVTKEdGUzJfU0IoaW5vZGUpKSkKKwlpZiAoYWNsICYmIGFjbC0+YV9jb3VudCA+IEdGUzJfQUNMX01BWF9FTlRSSUVTKEdGUzJfU0IoaW5vZGUpKSkKIAkJcmV0dXJuIC1FMkJJRzsKIAogCWlmICh0eXBlID09IEFDTF9UWVBFX0FDQ0VTUykgewpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9kaXIuYyBiL2ZzL2dmczIvZGlyLmMKaW5kZXggYzVhMzRmMC4uNjM3MTE5MiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9kaXIuYworKysgYi9mcy9nZnMyL2Rpci5jCkBAIC0xODk2LDcgKzE4OTYsOCBAQAogCiAJaHQgPSBremFsbG9jKHNpemUsIEdGUF9OT0ZTIHwgX19HRlBfTk9XQVJOKTsKIAlpZiAoaHQgPT0gTlVMTCkKLQkJaHQgPSB2emFsbG9jKHNpemUpOworCQlodCA9IF9fdm1hbGxvYyhzaXplLCBHRlBfTk9GUyB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX1pFUk8sCisJCQkgICAgICAgUEFHRV9LRVJORUwpOwogCWlmICghaHQpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL2ZpbGUuYyBiL2ZzL2dmczIvZmlsZS5jCmluZGV4IDZlNjAwYWIuLmVjOWMyZDMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZmlsZS5jCisrKyBiL2ZzL2dmczIvZmlsZS5jCkBAIC00OTgsNyArNDk4LDYgQEAKIAkuZmF1bHQgPSBmaWxlbWFwX2ZhdWx0LAogCS5tYXBfcGFnZXMgPSBmaWxlbWFwX21hcF9wYWdlcywKIAkucGFnZV9ta3dyaXRlID0gZ2ZzMl9wYWdlX21rd3JpdGUsCi0JLnJlbWFwX3BhZ2VzID0gZ2VuZXJpY19maWxlX3JlbWFwX3BhZ2VzLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggYTIzNTI0YS4uYWViN2JjOSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtMTczLDE5ICsxNzMsMTQgQEAKIAlzcGluX3VubG9jaygmbHJ1X2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBfX2dmczJfZ2xvY2tfcmVtb3ZlX2Zyb21fbHJ1KHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKK3N0YXRpYyB2b2lkIGdmczJfZ2xvY2tfcmVtb3ZlX2Zyb21fbHJ1KHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKKwlzcGluX2xvY2soJmxydV9sb2NrKTsKIAlpZiAoIWxpc3RfZW1wdHkoJmdsLT5nbF9scnUpKSB7CiAJCWxpc3RfZGVsX2luaXQoJmdsLT5nbF9scnUpOwogCQlhdG9taWNfZGVjKCZscnVfY291bnQpOwogCQljbGVhcl9iaXQoR0xGX0xSVSwgJmdsLT5nbF9mbGFncyk7CiAJfQotfQotCi1zdGF0aWMgdm9pZCBnZnMyX2dsb2NrX3JlbW92ZV9mcm9tX2xydShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCi17Ci0Jc3Bpbl9sb2NrKCZscnVfbG9jayk7Ci0JX19nZnMyX2dsb2NrX3JlbW92ZV9mcm9tX2xydShnbCk7CiAJc3Bpbl91bmxvY2soJmxydV9sb2NrKTsKIH0KIApAQCAtMjA1LDkgKzIwMCw3IEBACiAKIAlsb2NrcmVmX21hcmtfZGVhZCgmZ2wtPmdsX2xvY2tyZWYpOwogCi0Jc3Bpbl9sb2NrKCZscnVfbG9jayk7Ci0JX19nZnMyX2dsb2NrX3JlbW92ZV9mcm9tX2xydShnbCk7Ci0Jc3Bpbl91bmxvY2soJmxydV9sb2NrKTsKKwlnZnMyX2dsb2NrX3JlbW92ZV9mcm9tX2xydShnbCk7CiAJc3Bpbl91bmxvY2soJmdsLT5nbF9sb2NrcmVmLmxvY2spOwogCXNwaW5fbG9ja19idWNrZXQoZ2wtPmdsX2hhc2gpOwogCWhsaXN0X2JsX2RlbF9yY3UoJmdsLT5nbF9saXN0KTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuYwppbmRleCA5MDU0MDAyLi43M2M3MjI1MyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbm9kZS5jCisrKyBiL2ZzL2dmczIvaW5vZGUuYwpAQCAtNTQzLDEwICs1NDMsNyBAQAogCX0KIAogCWVycm9yID0gZ2ZzMl9kaXJfYWRkKCZkaXAtPmlfaW5vZGUsIG5hbWUsIGlwLCBkYSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIGZhaWxfZW5kX3RyYW5zOwogCi1mYWlsX2VuZF90cmFuczoKIAlnZnMyX3RyYW5zX2VuZChzZHApOwogZmFpbF9pcHJlc2VydjoKIAlnZnMyX2lucGxhY2VfcmVsZWFzZShkaXApOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9xdW90YS5jIGIvZnMvZ2ZzMi9xdW90YS5jCmluZGV4IGM4YjE0OGIuLjNlMTkzY2IgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcXVvdGEuYworKysgYi9mcy9nZnMyL3F1b3RhLmMKQEAgLTY2Nyw3ICs2NjcsNyBAQAogCiBzdGF0aWMgaW50IGdmczJfYWRqdXN0X3F1b3RhKHN0cnVjdCBnZnMyX2lub2RlICppcCwgbG9mZl90IGxvYywKIAkJCSAgICAgczY0IGNoYW5nZSwgc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQsCi0JCQkgICAgIHN0cnVjdCBmc19kaXNrX3F1b3RhICpmZHEpCisJCQkgICAgIHN0cnVjdCBxY19kcWJsayAqZmRxKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSAmaXAtPmlfaW5vZGU7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGlub2RlKTsKQEAgLTY5NywxNiArNjk3LDE2IEBACiAJYmU2NF9hZGRfY3B1KCZxLnF1X3ZhbHVlLCBjaGFuZ2UpOwogCXFkLT5xZF9xYi5xYl92YWx1ZSA9IHEucXVfdmFsdWU7CiAJaWYgKGZkcSkgewotCQlpZiAoZmRxLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JTT0ZUKSB7Ci0JCQlxLnF1X3dhcm4gPSBjcHVfdG9fYmU2NChmZHEtPmRfYmxrX3NvZnRsaW1pdCA+PiBzZHAtPnNkX2ZzYjJiYl9zaGlmdCk7CisJCWlmIChmZHEtPmRfZmllbGRtYXNrICYgUUNfU1BDX1NPRlQpIHsKKwkJCXEucXVfd2FybiA9IGNwdV90b19iZTY0KGZkcS0+ZF9zcGNfc29mdGxpbWl0ID4+IHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQpOwogCQkJcWQtPnFkX3FiLnFiX3dhcm4gPSBxLnF1X3dhcm47CiAJCX0KLQkJaWYgKGZkcS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CSEFSRCkgewotCQkJcS5xdV9saW1pdCA9IGNwdV90b19iZTY0KGZkcS0+ZF9ibGtfaGFyZGxpbWl0ID4+IHNkcC0+c2RfZnNiMmJiX3NoaWZ0KTsKKwkJaWYgKGZkcS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfSEFSRCkgeworCQkJcS5xdV9saW1pdCA9IGNwdV90b19iZTY0KGZkcS0+ZF9zcGNfaGFyZGxpbWl0ID4+IHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQpOwogCQkJcWQtPnFkX3FiLnFiX2xpbWl0ID0gcS5xdV9saW1pdDsKIAkJfQotCQlpZiAoZmRxLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JDT1VOVCkgewotCQkJcS5xdV92YWx1ZSA9IGNwdV90b19iZTY0KGZkcS0+ZF9iY291bnQgPj4gc2RwLT5zZF9mc2IyYmJfc2hpZnQpOworCQlpZiAoZmRxLT5kX2ZpZWxkbWFzayAmIFFDX1NQQUNFKSB7CisJCQlxLnF1X3ZhbHVlID0gY3B1X3RvX2JlNjQoZmRxLT5kX3NwYWNlID4+IHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQpOwogCQkJcWQtPnFkX3FiLnFiX3ZhbHVlID0gcS5xdV92YWx1ZTsKIAkJfQogCX0KQEAgLTE0OTcsNyArMTQ5Nyw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZ2ZzMl9nZXRfZHFibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtxaWQgcWlkLAotCQkJICBzdHJ1Y3QgZnNfZGlza19xdW90YSAqZmRxKQorCQkJICBzdHJ1Y3QgcWNfZHFibGsgKmZkcSkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHNiLT5zX2ZzX2luZm87CiAJc3RydWN0IGdmczJfcXVvdGFfbHZiICpxbHZiOwpAQCAtMTUwNSw3ICsxNTA1LDcgQEAKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgcV9naDsKIAlpbnQgZXJyb3I7CiAKLQltZW1zZXQoZmRxLCAwLCBzaXplb2Yoc3RydWN0IGZzX2Rpc2tfcXVvdGEpKTsKKwltZW1zZXQoZmRxLCAwLCBzaXplb2YoKmZkcSkpOwogCiAJaWYgKHNkcC0+c2RfYXJncy5hcl9xdW90YSA9PSBHRlMyX1FVT1RBX09GRikKIAkJcmV0dXJuIC1FU1JDSDsgLyogQ3JhenkgWEZTIGVycm9yIGNvZGUgKi8KQEAgLTE1MjIsMTIgKzE1MjIsOSBAQAogCQlnb3RvIG91dDsKIAogCXFsdmIgPSAoc3RydWN0IGdmczJfcXVvdGFfbHZiICopcWQtPnFkX2dsLT5nbF9sa3NiLnNiX2x2YnB0cjsKLQlmZHEtPmRfdmVyc2lvbiA9IEZTX0RRVU9UX1ZFUlNJT047Ci0JZmRxLT5kX2ZsYWdzID0gKHFpZC50eXBlID09IFVTUlFVT1RBKSA/IEZTX1VTRVJfUVVPVEEgOiBGU19HUk9VUF9RVU9UQTsKLQlmZHEtPmRfaWQgPSBmcm9tX2txaWRfbXVuZ2VkKGN1cnJlbnRfdXNlcl9ucygpLCBxaWQpOwotCWZkcS0+ZF9ibGtfaGFyZGxpbWl0ID0gYmU2NF90b19jcHUocWx2Yi0+cWJfbGltaXQpIDw8IHNkcC0+c2RfZnNiMmJiX3NoaWZ0OwotCWZkcS0+ZF9ibGtfc29mdGxpbWl0ID0gYmU2NF90b19jcHUocWx2Yi0+cWJfd2FybikgPDwgc2RwLT5zZF9mc2IyYmJfc2hpZnQ7Ci0JZmRxLT5kX2Jjb3VudCA9IGJlNjRfdG9fY3B1KHFsdmItPnFiX3ZhbHVlKSA8PCBzZHAtPnNkX2ZzYjJiYl9zaGlmdDsKKwlmZHEtPmRfc3BjX2hhcmRsaW1pdCA9IGJlNjRfdG9fY3B1KHFsdmItPnFiX2xpbWl0KSA8PCBzZHAtPnNkX3NiLnNiX2JzaXplX3NoaWZ0OworCWZkcS0+ZF9zcGNfc29mdGxpbWl0ID0gYmU2NF90b19jcHUocWx2Yi0+cWJfd2FybikgPDwgc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdDsKKwlmZHEtPmRfc3BhY2UgPSBiZTY0X3RvX2NwdShxbHZiLT5xYl92YWx1ZSkgPDwgc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdDsKIAogCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZxX2doKTsKIG91dDoKQEAgLTE1MzYsMTAgKzE1MzMsMTAgQEAKIH0KIAogLyogR0ZTMiBvbmx5IHN1cHBvcnRzIGEgc3Vic2V0IG9mIHRoZSBYRlMgZmllbGRzICovCi0jZGVmaW5lIEdGUzJfRklFTERNQVNLIChGU19EUV9CU09GVHxGU19EUV9CSEFSRHxGU19EUV9CQ09VTlQpCisjZGVmaW5lIEdGUzJfRklFTERNQVNLIChRQ19TUENfU09GVHxRQ19TUENfSEFSRHxRQ19TUEFDRSkKIAogc3RhdGljIGludCBnZnMyX3NldF9kcWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga3FpZCBxaWQsCi0JCQkgIHN0cnVjdCBmc19kaXNrX3F1b3RhICpmZHEpCisJCQkgIHN0cnVjdCBxY19kcWJsayAqZmRxKQogewogCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gc2ItPnNfZnNfaW5mbzsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koc2RwLT5zZF9xdW90YV9pbm9kZSk7CkBAIC0xNTgzLDE3ICsxNTgwLDE3IEBACiAJCWdvdG8gb3V0X2k7CiAKIAkvKiBJZiBub3RoaW5nIGhhcyBjaGFuZ2VkLCB0aGlzIGlzIGEgbm8tb3AgKi8KLQlpZiAoKGZkcS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CU09GVCkgJiYKLQkgICAgKChmZHEtPmRfYmxrX3NvZnRsaW1pdCA+PiBzZHAtPnNkX2ZzYjJiYl9zaGlmdCkgPT0gYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX3dhcm4pKSkKLQkJZmRxLT5kX2ZpZWxkbWFzayBePSBGU19EUV9CU09GVDsKKwlpZiAoKGZkcS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfU09GVCkgJiYKKwkgICAgKChmZHEtPmRfc3BjX3NvZnRsaW1pdCA+PiBzZHAtPnNkX3NiLnNiX2JzaXplX3NoaWZ0KSA9PSBiZTY0X3RvX2NwdShxZC0+cWRfcWIucWJfd2FybikpKQorCQlmZHEtPmRfZmllbGRtYXNrIF49IFFDX1NQQ19TT0ZUOwogCi0JaWYgKChmZHEtPmRfZmllbGRtYXNrICYgRlNfRFFfQkhBUkQpICYmCi0JICAgICgoZmRxLT5kX2Jsa19oYXJkbGltaXQgPj4gc2RwLT5zZF9mc2IyYmJfc2hpZnQpID09IGJlNjRfdG9fY3B1KHFkLT5xZF9xYi5xYl9saW1pdCkpKQotCQlmZHEtPmRfZmllbGRtYXNrIF49IEZTX0RRX0JIQVJEOworCWlmICgoZmRxLT5kX2ZpZWxkbWFzayAmIFFDX1NQQ19IQVJEKSAmJgorCSAgICAoKGZkcS0+ZF9zcGNfaGFyZGxpbWl0ID4+IHNkcC0+c2Rfc2Iuc2JfYnNpemVfc2hpZnQpID09IGJlNjRfdG9fY3B1KHFkLT5xZF9xYi5xYl9saW1pdCkpKQorCQlmZHEtPmRfZmllbGRtYXNrIF49IFFDX1NQQ19IQVJEOwogCi0JaWYgKChmZHEtPmRfZmllbGRtYXNrICYgRlNfRFFfQkNPVU5UKSAmJgotCSAgICAoKGZkcS0+ZF9iY291bnQgPj4gc2RwLT5zZF9mc2IyYmJfc2hpZnQpID09IGJlNjRfdG9fY3B1KHFkLT5xZF9xYi5xYl92YWx1ZSkpKQotCQlmZHEtPmRfZmllbGRtYXNrIF49IEZTX0RRX0JDT1VOVDsKKwlpZiAoKGZkcS0+ZF9maWVsZG1hc2sgJiBRQ19TUEFDRSkgJiYKKwkgICAgKChmZHEtPmRfc3BhY2UgPj4gc2RwLT5zZF9zYi5zYl9ic2l6ZV9zaGlmdCkgPT0gYmU2NF90b19jcHUocWQtPnFkX3FiLnFiX3ZhbHVlKSkpCisJCWZkcS0+ZF9maWVsZG1hc2sgXj0gUUNfU1BBQ0U7CiAKIAlpZiAoZmRxLT5kX2ZpZWxkbWFzayA9PSAwKQogCQlnb3RvIG91dF9pOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9yZWNvdmVyeS5jIGIvZnMvZ2ZzMi9yZWNvdmVyeS5jCmluZGV4IDU3M2JkM2IuLjFiNjQ1NzcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcmVjb3ZlcnkuYworKysgYi9mcy9nZnMyL3JlY292ZXJ5LmMKQEAgLTQzOSw3ICs0MzksNyBAQAogCiAgICAgICAgIGxzLT5sc19yZWNvdmVyX2ppZF9kb25lID0gamlkOwogICAgICAgICBscy0+bHNfcmVjb3Zlcl9qaWRfc3RhdHVzID0gbWVzc2FnZTsKLQlzcHJpbnRmKGVudl9qaWQsICJKSUQ9JWQiLCBqaWQpOworCXNwcmludGYoZW52X2ppZCwgIkpJRD0ldSIsIGppZCk7CiAJc3ByaW50ZihlbnZfc3RhdHVzLCAiUkVDT1ZFUlk9JXMiLAogCQltZXNzYWdlID09IExNX1JEX1NVQ0NFU1MgPyAiRG9uZSIgOiAiRmFpbGVkIik7CiAgICAgICAgIGtvYmplY3RfdWV2ZW50X2Vudigmc2RwLT5zZF9rb2JqLCBLT0JKX0NIQU5HRSwgZW52cCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3N5cy5jIGIvZnMvZ2ZzMi9zeXMuYwppbmRleCAzYWI1NjZiLi5hZThlODgxIDEwMDY0NAotLS0gYS9mcy9nZnMyL3N5cy5jCisrKyBiL2ZzL2dmczIvc3lzLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gc2RwLT5zZF92ZnM7CiAJaW50IGZyb3plbiA9IChzYi0+c193cml0ZXJzLmZyb3plbiA9PSBTQl9VTkZST1pFTikgPyAwIDogMTsKIAotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLCBmcm96ZW4pOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBmcm96ZW4pOwogfQogCiBzdGF0aWMgc3NpemVfdCBmcmVlemVfc3RvcmUoc3RydWN0IGdmczJfc2JkICpzZHAsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IGFhMTQ5ZTcuLjNhNTNiMWQgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAjaWZkZWYgQ09ORklHX0ZTTk9USUZZCiAJaW5vZGUtPmlfZnNub3RpZnlfbWFzayA9IDA7CiAjZW5kaWYKLQorCWlub2RlLT5pX2ZsY3R4ID0gTlVMTDsKIAl0aGlzX2NwdV9pbmMobnJfaW5vZGVzKTsKIAogCXJldHVybiAwOwpAQCAtMjM3LDYgKzIzNyw3IEBACiAJQlVHX09OKGlub2RlX2hhc19idWZmZXJzKGlub2RlKSk7CiAJc2VjdXJpdHlfaW5vZGVfZnJlZShpbm9kZSk7CiAJZnNub3RpZnlfaW5vZGVfZGVsZXRlKGlub2RlKTsKKwlsb2Nrc19mcmVlX2xvY2tfY29udGV4dChpbm9kZS0+aV9mbGN0eCk7CiAJaWYgKCFpbm9kZS0+aV9ubGluaykgewogCQlXQVJOX09OKGF0b21pY19sb25nX3JlYWQoJmlub2RlLT5pX3NiLT5zX3JlbW92ZV9jb3VudCkgPT0gMCk7CiAJCWF0b21pY19sb25nX2RlYygmaW5vZGUtPmlfc2ItPnNfcmVtb3ZlX2NvdW50KTsKQEAgLTM1NSw3ICszNTYsNiBAQAogCUlOSVRfTElTVF9IRUFEKCZtYXBwaW5nLT5wcml2YXRlX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZtYXBwaW5nLT5wcml2YXRlX2xvY2spOwogCW1hcHBpbmctPmlfbW1hcCA9IFJCX1JPT1Q7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIpOwogfQogRVhQT1JUX1NZTUJPTChhZGRyZXNzX3NwYWNlX2luaXRfb25jZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2lvY3RsLmMgYi9mcy9pb2N0bC5jCmluZGV4IDIxNGMzYzEuLjVkMDFkMjYgMTAwNjQ0Ci0tLSBhL2ZzL2lvY3RsLmMKKysrIGIvZnMvaW9jdGwuYwpAQCAtMzc5LDYgKzM3OSwxMSBAQAogCQkJCXBhc3RfZW9mID0gdHJ1ZTsKIAkJfQogCQljb25kX3Jlc2NoZWQoKTsKKwkJaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlyZXQgPSAtRUlOVFI7CisJCQlicmVhazsKKwkJfQorCiAJfSB3aGlsZSAoMSk7CiAKIAkvKiBJZiByZXQgaXMgMSB0aGVuIHdlIGp1c3QgaGl0IHRoZSBlbmQgb2YgdGhlIGV4dGVudCBhcnJheSAqLwpkaWZmIC0tZ2l0IGEvZnMvaXNvZnMvdXRpbC5jIGIvZnMvaXNvZnMvdXRpbC5jCmluZGV4IDAxZTFlZTcuLjAwNWExNWMgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL3V0aWwuYworKysgYi9mcy9pc29mcy91dGlsLmMKQEAgLTIsNiArMiw3IEBACiAgKiAgbGludXgvZnMvaXNvZnMvdXRpbC5jCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlICJpc29mcy5oIgogCiAvKiAKQEAgLTE3LDkgKzE4LDkgQEAKIGludCBpc29fZGF0ZShjaGFyICogcCwgaW50IGZsYWcpCiB7CiAJaW50IHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCB0ejsKLQlpbnQgY3J0aW1lLCBkYXlzLCBpOworCWludCBjcnRpbWU7CiAKLQl5ZWFyID0gcFswXSAtIDcwOworCXllYXIgPSBwWzBdOwogCW1vbnRoID0gcFsxXTsKIAlkYXkgPSBwWzJdOwogCWhvdXIgPSBwWzNdOwpAQCAtMzEsMTggKzMyLDcgQEAKIAlpZiAoeWVhciA8IDApIHsKIAkJY3J0aW1lID0gMDsKIAl9IGVsc2UgewotCQlpbnQgbW9ubGVuWzEyXSA9IHszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMX07Ci0KLQkJZGF5cyA9IHllYXIgKiAzNjU7Ci0JCWlmICh5ZWFyID4gMikKLQkJCWRheXMgKz0gKHllYXIrMSkgLyA0OwotCQlmb3IgKGkgPSAxOyBpIDwgbW9udGg7IGkrKykKLQkJCWRheXMgKz0gbW9ubGVuW2ktMV07Ci0JCWlmICgoKHllYXIrMikgJSA0KSA9PSAwICYmIG1vbnRoID4gMikKLQkJCWRheXMrKzsKLQkJZGF5cyArPSBkYXkgLSAxOwotCQljcnRpbWUgPSAoKCgoZGF5cyAqIDI0KSArIGhvdXIpICogNjAgKyBtaW51dGUpICogNjApCi0JCQkrIHNlY29uZDsKKwkJY3J0aW1lID0gbWt0aW1lNjQoeWVhcisxOTAwLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCk7CiAKIAkJLyogc2lnbiBleHRlbmQgKi8KIAkJaWYgKHR6ICYgMHg4MCkKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL21vbi5jIGIvZnMvbG9ja2QvbW9uLmMKaW5kZXggMWNjNmVjNS4uNDdhMzJiNiAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvbW9uLmMKKysrIGIvZnMvbG9ja2QvbW9uLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAlyZXR1cm4gKHN0cnVjdCBzb2NrYWRkciAqKSZuc20tPnNtX2FkZHI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnBjX2NsbnQgKm5zbV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHN0cnVjdCBycGNfY2xudCAqbnNtX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5vZGVuYW1lKQogewogCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW4gPSB7CiAJCS5zaW5fZmFtaWx5CQk9IEFGX0lORVQsCkBAIC03Nyw2ICs3Nyw3IEBACiAJCS5hZGRyZXNzCQk9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLAogCQkuYWRkcnNpemUJCT0gc2l6ZW9mKHNpbiksCiAJCS5zZXJ2ZXJuYW1lCQk9ICJycGMuc3RhdGQiLAorCQkubm9kZW5hbWUJCT0gbm9kZW5hbWUsCiAJCS5wcm9ncmFtCQk9ICZuc21fcHJvZ3JhbSwKIAkJLnZlcnNpb24JCT0gTlNNX1ZFUlNJT04sCiAJCS5hdXRoZmxhdm9yCQk9IFJQQ19BVVRIX05VTEwsCkBAIC0xMDIsNyArMTAzLDcgQEAKIAlyZXR1cm4gY2xudDsKIH0KIAotc3RhdGljIHN0cnVjdCBycGNfY2xudCAqbnNtX2NsaWVudF9nZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHN0cnVjdCBycGNfY2xudCAqbnNtX2NsaWVudF9nZXQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpub2RlbmFtZSkKIHsKIAlzdHJ1Y3QgcnBjX2NsbnQJKmNsbnQsICpuZXc7CiAJc3RydWN0IGxvY2tkX25ldCAqbG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGxvY2tkX25ldF9pZCk7CkBAIC0xMTEsNyArMTEyLDcgQEAKIAlpZiAoY2xudCAhPSBOVUxMKQogCQlnb3RvIG91dDsKIAotCWNsbnQgPSBuZXcgPSBuc21fY3JlYXRlKG5ldCk7CisJY2xudCA9IG5ldyA9IG5zbV9jcmVhdGUobmV0LCBub2RlbmFtZSk7CiAJaWYgKElTX0VSUihjbG50KSkKIAkJZ290byBvdXQ7CiAKQEAgLTE5MCwxOSArMTkxLDIzIEBACiAJc3RydWN0IG5zbV9yZXMJcmVzOwogCWludAkJc3RhdHVzOwogCXN0cnVjdCBycGNfY2xudCAqY2xudDsKKwljb25zdCBjaGFyICpub2RlbmFtZSA9IE5VTEw7CiAKIAlkcHJpbnRrKCJsb2NrZDogbnNtX21vbml0b3IoJXMpXG4iLCBuc20tPnNtX25hbWUpOwogCiAJaWYgKG5zbS0+c21fbW9uaXRvcmVkKQogCQlyZXR1cm4gMDsKIAorCWlmIChob3N0LT5oX3JwY2NsbnQpCisJCW5vZGVuYW1lID0gaG9zdC0+aF9ycGNjbG50LT5jbF9ub2RlbmFtZTsKKwogCS8qCiAJICogQ2hvb3NlIHdoZXRoZXIgdG8gcmVjb3JkIHRoZSBjYWxsZXJfbmFtZSBvciBJUCBhZGRyZXNzIG9mCiAJICogdGhpcyBwZWVyIGluIHRoZSBsb2NhbCBycGMuc3RhdGQncyBkYXRhYmFzZS4KIAkgKi8KIAluc20tPnNtX21vbl9uYW1lID0gbnNtX3VzZV9ob3N0bmFtZXMgPyBuc20tPnNtX25hbWUgOiBuc20tPnNtX2FkZHJidWY7CiAKLQljbG50ID0gbnNtX2NsaWVudF9nZXQoaG9zdC0+bmV0KTsKKwljbG50ID0gbnNtX2NsaWVudF9nZXQoaG9zdC0+bmV0LCBub2RlbmFtZSk7CiAJaWYgKElTX0VSUihjbG50KSkgewogCQlzdGF0dXMgPSBQVFJfRVJSKGNsbnQpOwogCQlkcHJpbnRrKCJsb2NrZDogZmFpbGVkIHRvIGNyZWF0ZSBOU00gdXBjYWxsIHRyYW5zcG9ydCwgIgpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3Zjc3Vicy5jIGIvZnMvbG9ja2Qvc3Zjc3Vicy5jCmluZGV4IGQxMmZmNGUuLjY2NWVmNWEgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y3N1YnMuYworKysgYi9mcy9sb2NrZC9zdmNzdWJzLmMKQEAgLTE2NCwxMiArMTY0LDE1IEBACiB7CiAJc3RydWN0IGlub2RlCSAqaW5vZGUgPSBubG1zdmNfZmlsZV9pbm9kZShmaWxlKTsKIAlzdHJ1Y3QgZmlsZV9sb2NrICpmbDsKKwlzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmZsY3R4ID0gaW5vZGUtPmlfZmxjdHg7CiAJc3RydWN0IG5sbV9ob3N0CSAqbG9ja2hvc3Q7CiAKKwlpZiAoIWZsY3R4IHx8IGxpc3RfZW1wdHlfY2FyZWZ1bCgmZmxjdHgtPmZsY19wb3NpeCkpCisJCXJldHVybiAwOwogYWdhaW46CiAJZmlsZS0+Zl9sb2NrcyA9IDA7Ci0Jc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlmb3IgKGZsID0gaW5vZGUtPmlfZmxvY2s7IGZsOyBmbCA9IGZsLT5mbF9uZXh0KSB7CisJc3Bpbl9sb2NrKCZmbGN0eC0+ZmxjX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZmwsICZmbGN0eC0+ZmxjX3Bvc2l4LCBmbF9saXN0KSB7CiAJCWlmIChmbC0+ZmxfbG1vcHMgIT0gJm5sbXN2Y19sb2NrX29wZXJhdGlvbnMpCiAJCQljb250aW51ZTsKIApAQCAtMTgwLDcgKzE4Myw3IEBACiAJCWlmIChtYXRjaChsb2NraG9zdCwgaG9zdCkpIHsKIAkJCXN0cnVjdCBmaWxlX2xvY2sgbG9jayA9ICpmbDsKIAotCQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCQkJc3Bpbl91bmxvY2soJmZsY3R4LT5mbGNfbG9jayk7CiAJCQlsb2NrLmZsX3R5cGUgID0gRl9VTkxDSzsKIAkJCWxvY2suZmxfc3RhcnQgPSAwOwogCQkJbG9jay5mbF9lbmQgICA9IE9GRlNFVF9NQVg7CkBAIC0xOTIsNyArMTk1LDcgQEAKIAkJCWdvdG8gYWdhaW47CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCXNwaW5fdW5sb2NrKCZmbGN0eC0+ZmxjX2xvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjMsMTggKzIyNiwyMSBAQAogewogCXN0cnVjdCBpbm9kZQkgKmlub2RlID0gbmxtc3ZjX2ZpbGVfaW5vZGUoZmlsZSk7CiAJc3RydWN0IGZpbGVfbG9jayAqZmw7CisJc3RydWN0IGZpbGVfbG9ja19jb250ZXh0ICpmbGN0eCA9IGlub2RlLT5pX2ZsY3R4OwogCiAJaWYgKGZpbGUtPmZfY291bnQgfHwgIWxpc3RfZW1wdHkoJmZpbGUtPmZfYmxvY2tzKSB8fCBmaWxlLT5mX3NoYXJlcykKIAkJcmV0dXJuIDE7CiAKLQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCWZvciAoZmwgPSBpbm9kZS0+aV9mbG9jazsgZmw7IGZsID0gZmwtPmZsX25leHQpIHsKLQkJaWYgKGZsLT5mbF9sbW9wcyA9PSAmbmxtc3ZjX2xvY2tfb3BlcmF0aW9ucykgewotCQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCQkJcmV0dXJuIDE7CisJaWYgKGZsY3R4ICYmICFsaXN0X2VtcHR5X2NhcmVmdWwoJmZsY3R4LT5mbGNfcG9zaXgpKSB7CisJCXNwaW5fbG9jaygmZmxjdHgtPmZsY19sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShmbCwgJmZsY3R4LT5mbGNfcG9zaXgsIGZsX2xpc3QpIHsKKwkJCWlmIChmbC0+ZmxfbG1vcHMgPT0gJm5sbXN2Y19sb2NrX29wZXJhdGlvbnMpIHsKKwkJCQlzcGluX3VubG9jaygmZmxjdHgtPmZsY19sb2NrKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KIAkJfQorCQlzcGluX3VubG9jaygmZmxjdHgtPmZsY19sb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCWZpbGUtPmZfbG9ja3MgPSAwOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmMKaW5kZXggNTllMmY5MDUuLjRkMGQ0MTEgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKKysrIGIvZnMvbG9ja3MuYwpAQCAtMTU3LDE0ICsxNTcsMTEgQEAKIGludCBsZWFzZXNfZW5hYmxlID0gMTsKIGludCBsZWFzZV9icmVha190aW1lID0gNDU7CiAKLSNkZWZpbmUgZm9yX2VhY2hfbG9jayhpbm9kZSwgbG9ja3ApIFwKLQlmb3IgKGxvY2twID0gJmlub2RlLT5pX2Zsb2NrOyAqbG9ja3AgIT0gTlVMTDsgbG9ja3AgPSAmKCpsb2NrcCktPmZsX25leHQpCi0KIC8qCiAgKiBUaGUgZ2xvYmFsIGZpbGVfbG9ja19saXN0IGlzIG9ubHkgdXNlZCBmb3IgZGlzcGxheWluZyAvcHJvYy9sb2Nrcywgc28gd2UKICAqIGtlZXAgYSBsaXN0IG9uIGVhY2ggQ1BVLCB3aXRoIGVhY2ggbGlzdCBwcm90ZWN0ZWQgYnkgaXRzIG93biBzcGlubG9jayB2aWEKICAqIHRoZSBmaWxlX2xvY2tfbGdsb2NrLiBOb3RlIHRoYXQgYWx0ZXJhdGlvbnMgdG8gdGhlIGxpc3QgYWxzbyByZXF1aXJlIHRoYXQKLSAqIHRoZSByZWxldmFudCBpX2xvY2sgaXMgaGVsZC4KKyAqIHRoZSByZWxldmFudCBmbGNfbG9jayBpcyBoZWxkLgogICovCiBERUZJTkVfU1RBVElDX0xHTE9DSyhmaWxlX2xvY2tfbGdsb2NrKTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgaGxpc3RfaGVhZCwgZmlsZV9sb2NrX2xpc3QpOwpAQCAtMTkyLDIxICsxODksNjggQEAKICAqIGNvbnRyYXN0IHRvIHRob3NlIHRoYXQgYXJlIGFjdGluZyBhcyByZWNvcmRzIG9mIGFjcXVpcmVkIGxvY2tzKS4KICAqCiAgKiBOb3RlIHRoYXQgd2hlbiB3ZSBhY3F1aXJlIHRoaXMgbG9jayBpbiBvcmRlciB0byBjaGFuZ2UgdGhlIGFib3ZlIGZpZWxkcywKLSAqIHdlIG9mdGVuIGhvbGQgdGhlIGlfbG9jayBhcyB3ZWxsLiBJbiBjZXJ0YWluIGNhc2VzLCB3aGVuIHJlYWRpbmcgdGhlIGZpZWxkcworICogd2Ugb2Z0ZW4gaG9sZCB0aGUgZmxjX2xvY2sgYXMgd2VsbC4gSW4gY2VydGFpbiBjYXNlcywgd2hlbiByZWFkaW5nIHRoZSBmaWVsZHMKICAqIHByb3RlY3RlZCBieSB0aGlzIGxvY2ssIHdlIGNhbiBza2lwIGFjcXVpcmluZyBpdCBpZmYgd2UgYWxyZWFkeSBob2xkIHRoZQotICogaV9sb2NrLgorICogZmxjX2xvY2suCiAgKgogICogSW4gcGFydGljdWxhciwgYWRkaW5nIGFuIGVudHJ5IHRvIHRoZSBmbF9ibG9jayBsaXN0IHJlcXVpcmVzIHRoYXQgeW91IGhvbGQKLSAqIGJvdGggdGhlIGlfbG9jayBhbmQgdGhlIGJsb2NrZWRfbG9ja19sb2NrIChhY3F1aXJlZCBpbiB0aGF0IG9yZGVyKS4gRGVsZXRpbmcKLSAqIGFuIGVudHJ5IGZyb20gdGhlIGxpc3QgaG93ZXZlciBvbmx5IHJlcXVpcmVzIHRoZSBmaWxlX2xvY2tfbG9jay4KKyAqIGJvdGggdGhlIGZsY19sb2NrIGFuZCB0aGUgYmxvY2tlZF9sb2NrX2xvY2sgKGFjcXVpcmVkIGluIHRoYXQgb3JkZXIpLgorICogRGVsZXRpbmcgYW4gZW50cnkgZnJvbSB0aGUgbGlzdCBob3dldmVyIG9ubHkgcmVxdWlyZXMgdGhlIGZpbGVfbG9ja19sb2NrLgogICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJsb2NrZWRfbG9ja19sb2NrKTsKIAorc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmbGN0eF9jYWNoZSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpmaWxlbG9ja19jYWNoZSBfX3JlYWRfbW9zdGx5OwogCitzdGF0aWMgc3RydWN0IGZpbGVfbG9ja19jb250ZXh0ICoKK2xvY2tzX2dldF9sb2NrX2NvbnRleHQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKm5ldzsKKworCWlmIChsaWtlbHkoaW5vZGUtPmlfZmxjdHgpKQorCQlnb3RvIG91dDsKKworCW5ldyA9IGttZW1fY2FjaGVfYWxsb2MoZmxjdHhfY2FjaGUsIEdGUF9LRVJORUwpOworCWlmICghbmV3KQorCQlnb3RvIG91dDsKKworCXNwaW5fbG9ja19pbml0KCZuZXctPmZsY19sb2NrKTsKKwlJTklUX0xJU1RfSEVBRCgmbmV3LT5mbGNfZmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZuZXctPmZsY19wb3NpeCk7CisJSU5JVF9MSVNUX0hFQUQoJm5ldy0+ZmxjX2xlYXNlKTsKKworCS8qCisJICogQXNzaWduIHRoZSBwb2ludGVyIGlmIGl0J3Mgbm90IGFscmVhZHkgYXNzaWduZWQuIElmIGl0IGlzLCB0aGVuCisJICogZnJlZSB0aGUgY29udGV4dCB3ZSBqdXN0IGFsbG9jYXRlZC4KKwkgKi8KKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCWlmIChsaWtlbHkoIWlub2RlLT5pX2ZsY3R4KSkgeworCQlpbm9kZS0+aV9mbGN0eCA9IG5ldzsKKwkJbmV3ID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCisJaWYgKG5ldykKKwkJa21lbV9jYWNoZV9mcmVlKGZsY3R4X2NhY2hlLCBuZXcpOworb3V0OgorCXJldHVybiBpbm9kZS0+aV9mbGN0eDsKK30KKwordm9pZAorbG9ja3NfZnJlZV9sb2NrX2NvbnRleHQoc3RydWN0IGZpbGVfbG9ja19jb250ZXh0ICpjdHgpCit7CisJaWYgKGN0eCkgeworCQlXQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkoJmN0eC0+ZmxjX2Zsb2NrKSk7CisJCVdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmY3R4LT5mbGNfcG9zaXgpKTsKKwkJV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KCZjdHgtPmZsY19sZWFzZSkpOworCQlrbWVtX2NhY2hlX2ZyZWUoZmxjdHhfY2FjaGUsIGN0eCk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBsb2Nrc19pbml0X2xvY2tfaGVhZHMoc3RydWN0IGZpbGVfbG9jayAqZmwpCiB7CiAJSU5JVF9ITElTVF9OT0RFKCZmbC0+ZmxfbGluayk7CisJSU5JVF9MSVNUX0hFQUQoJmZsLT5mbF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmZmwtPmZsX2Jsb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZmbC0+Zmxfd2FpdCk7CiB9CkBAIC0yNDMsNiArMjg3LDcgQEAKIHZvaWQgbG9ja3NfZnJlZV9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKmZsKQogewogCUJVR19PTih3YWl0cXVldWVfYWN0aXZlKCZmbC0+Zmxfd2FpdCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmZmwtPmZsX2xpc3QpKTsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmZsLT5mbF9ibG9jaykpOwogCUJVR19PTighaGxpc3RfdW5oYXNoZWQoJmZsLT5mbF9saW5rKSk7CiAKQEAgLTI1Nyw4ICszMDIsOCBAQAogCXN0cnVjdCBmaWxlX2xvY2sgKmZsOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KGRpc3Bvc2UpKSB7Ci0JCWZsID0gbGlzdF9maXJzdF9lbnRyeShkaXNwb3NlLCBzdHJ1Y3QgZmlsZV9sb2NrLCBmbF9ibG9jayk7Ci0JCWxpc3RfZGVsX2luaXQoJmZsLT5mbF9ibG9jayk7CisJCWZsID0gbGlzdF9maXJzdF9lbnRyeShkaXNwb3NlLCBzdHJ1Y3QgZmlsZV9sb2NrLCBmbF9saXN0KTsKKwkJbGlzdF9kZWxfaW5pdCgmZmwtPmZsX2xpc3QpOwogCQlsb2Nrc19mcmVlX2xvY2soZmwpOwogCX0KIH0KQEAgLTUxMyw3ICs1NTgsNyBAQAogCXJldHVybiBmbDEtPmZsX293bmVyID09IGZsMi0+Zmxfb3duZXI7CiB9CiAKLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGlfbG9jayBoZWxkISAqLworLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgZmxjX2xvY2sgaGVsZCEgKi8KIHN0YXRpYyB2b2lkIGxvY2tzX2luc2VydF9nbG9iYWxfbG9ja3Moc3RydWN0IGZpbGVfbG9jayAqZmwpCiB7CiAJbGdfbG9jYWxfbG9jaygmZmlsZV9sb2NrX2xnbG9jayk7CkBAIC01MjIsMTIgKzU2NywxMiBAQAogCWxnX2xvY2FsX3VubG9jaygmZmlsZV9sb2NrX2xnbG9jayk7CiB9CiAKLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGlfbG9jayBoZWxkISAqLworLyogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgZmxjX2xvY2sgaGVsZCEgKi8KIHN0YXRpYyB2b2lkIGxvY2tzX2RlbGV0ZV9nbG9iYWxfbG9ja3Moc3RydWN0IGZpbGVfbG9jayAqZmwpCiB7CiAJLyoKIAkgKiBBdm9pZCB0YWtpbmcgbG9jayBpZiBhbHJlYWR5IHVuaGFzaGVkLiBUaGlzIGlzIHNhZmUgc2luY2UgdGhpcyBjaGVjawotCSAqIGlzIGRvbmUgd2hpbGUgaG9sZGluZyB0aGUgaV9sb2NrLCBhbmQgbmV3IGluc2VydGlvbnMgaW50byB0aGUgbGlzdAorCSAqIGlzIGRvbmUgd2hpbGUgaG9sZGluZyB0aGUgZmxjX2xvY2ssIGFuZCBuZXcgaW5zZXJ0aW9ucyBpbnRvIHRoZSBsaXN0CiAJICogYWxzbyByZXF1aXJlIHRoYXQgaXQgYmUgaGVsZC4KIAkgKi8KIAlpZiAoaGxpc3RfdW5oYXNoZWQoJmZsLT5mbF9saW5rKSkKQEAgLTU3OSwxMCArNjI0LDEwIEBACiAgKiB0aGUgb3JkZXIgdGhleSBibG9ja2VkLiBUaGUgZG9jdW1lbnRhdGlvbiBkb2Vzbid0IHJlcXVpcmUgdGhpcyBidXQKICAqIGl0IHNlZW1zIGxpa2UgdGhlIHJlYXNvbmFibGUgdGhpbmcgdG8gZG8uCiAgKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCBib3RoIHRoZSBpX2xvY2sgYW5kIGJsb2NrZWRfbG9ja19sb2NrIGhlbGQuIFRoZSBmbF9ibG9jawotICogbGlzdCBpdHNlbGYgaXMgcHJvdGVjdGVkIGJ5IHRoZSBibG9ja2VkX2xvY2tfbG9jaywgYnV0IGJ5IGVuc3VyaW5nIHRoYXQgdGhlCi0gKiBpX2xvY2sgaXMgYWxzbyBoZWxkIG9uIGluc2VydGlvbnMgd2UgY2FuIGF2b2lkIHRha2luZyB0aGUgYmxvY2tlZF9sb2NrX2xvY2sKLSAqIGluIHNvbWUgY2FzZXMgd2hlbiB3ZSBzZWUgdGhhdCB0aGUgZmxfYmxvY2sgbGlzdCBpcyBlbXB0eS4KKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggYm90aCB0aGUgZmxjX2xvY2sgYW5kIGJsb2NrZWRfbG9ja19sb2NrIGhlbGQuIFRoZQorICogZmxfYmxvY2sgbGlzdCBpdHNlbGYgaXMgcHJvdGVjdGVkIGJ5IHRoZSBibG9ja2VkX2xvY2tfbG9jaywgYnV0IGJ5IGVuc3VyaW5nCisgKiB0aGF0IHRoZSBmbGNfbG9jayBpcyBhbHNvIGhlbGQgb24gaW5zZXJ0aW9ucyB3ZSBjYW4gYXZvaWQgdGFraW5nIHRoZQorICogYmxvY2tlZF9sb2NrX2xvY2sgaW4gc29tZSBjYXNlcyB3aGVuIHdlIHNlZSB0aGF0IHRoZSBmbF9ibG9jayBsaXN0IGlzIGVtcHR5LgogICovCiBzdGF0aWMgdm9pZCBfX2xvY2tzX2luc2VydF9ibG9jayhzdHJ1Y3QgZmlsZV9sb2NrICpibG9ja2VyLAogCQkJCQlzdHJ1Y3QgZmlsZV9sb2NrICp3YWl0ZXIpCkBAIC01OTQsNyArNjM5LDcgQEAKIAkJbG9ja3NfaW5zZXJ0X2dsb2JhbF9ibG9ja2VkKHdhaXRlcik7CiB9CiAKLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggaV9sb2NrIGhlbGQuICovCisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGZsY19sb2NrIGhlbGQuICovCiBzdGF0aWMgdm9pZCBsb2Nrc19pbnNlcnRfYmxvY2soc3RydWN0IGZpbGVfbG9jayAqYmxvY2tlciwKIAkJCQkJc3RydWN0IGZpbGVfbG9jayAqd2FpdGVyKQogewpAQCAtNjA2LDE1ICs2NTEsMTUgQEAKIC8qCiAgKiBXYWtlIHVwIHByb2Nlc3NlcyBibG9ja2VkIHdhaXRpbmcgZm9yIGJsb2NrZXIuCiAgKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgaW5vZGUtPmlfbG9jayBoZWxkIQorICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgaW5vZGUtPmZsY19sb2NrIGhlbGQhCiAgKi8KIHN0YXRpYyB2b2lkIGxvY2tzX3dha2VfdXBfYmxvY2tzKHN0cnVjdCBmaWxlX2xvY2sgKmJsb2NrZXIpCiB7CiAJLyoKIAkgKiBBdm9pZCB0YWtpbmcgZ2xvYmFsIGxvY2sgaWYgbGlzdCBpcyBlbXB0eS4gVGhpcyBpcyBzYWZlIHNpbmNlIG5ldwotCSAqIGJsb2NrZWQgcmVxdWVzdHMgYXJlIG9ubHkgYWRkZWQgdG8gdGhlIGxpc3QgdW5kZXIgdGhlIGlfbG9jaywgYW5kCi0JICogdGhlIGlfbG9jayBpcyBhbHdheXMgaGVsZCBoZXJlLiBOb3RlIHRoYXQgcmVtb3ZhbCBmcm9tIHRoZSBmbF9ibG9jawotCSAqIGxpc3QgZG9lcyBub3QgcmVxdWlyZSB0aGUgaV9sb2NrLCBzbyB3ZSBtdXN0IHJlY2hlY2sgbGlzdF9lbXB0eSgpCisJICogYmxvY2tlZCByZXF1ZXN0cyBhcmUgb25seSBhZGRlZCB0byB0aGUgbGlzdCB1bmRlciB0aGUgZmxjX2xvY2ssIGFuZAorCSAqIHRoZSBmbGNfbG9jayBpcyBhbHdheXMgaGVsZCBoZXJlLiBOb3RlIHRoYXQgcmVtb3ZhbCBmcm9tIHRoZSBmbF9ibG9jaworCSAqIGxpc3QgZG9lcyBub3QgcmVxdWlyZSB0aGUgZmxjX2xvY2ssIHNvIHdlIG11c3QgcmVjaGVjayBsaXN0X2VtcHR5KCkKIAkgKiBhZnRlciBhY3F1aXJpbmcgdGhlIGJsb2NrZWRfbG9ja19sb2NrLgogCSAqLwogCWlmIChsaXN0X2VtcHR5KCZibG9ja2VyLT5mbF9ibG9jaykpCkBAIC02MzUsNjMgKzY4MCwzNiBAQAogCXNwaW5fdW5sb2NrKCZibG9ja2VkX2xvY2tfbG9jayk7CiB9CiAKLS8qIEluc2VydCBmaWxlIGxvY2sgZmwgaW50byBhbiBpbm9kZSdzIGxvY2sgbGlzdCBhdCB0aGUgcG9zaXRpb24gaW5kaWNhdGVkCi0gKiBieSBwb3MuIEF0IHRoZSBzYW1lIHRpbWUgYWRkIHRoZSBsb2NrIHRvIHRoZSBnbG9iYWwgZmlsZSBsb2NrIGxpc3QuCi0gKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgaV9sb2NrIGhlbGQhCi0gKi8KLXN0YXRpYyB2b2lkIGxvY2tzX2luc2VydF9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKipwb3MsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKQorc3RhdGljIHZvaWQKK2xvY2tzX2luc2VydF9sb2NrX2N0eChzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgaW50ICpjb3VudGVyLAorCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpiZWZvcmUpCiB7CiAJZmwtPmZsX25zcGlkID0gZ2V0X3BpZCh0YXNrX3RnaWQoY3VycmVudCkpOwotCi0JLyogaW5zZXJ0IGludG8gZmlsZSdzIGxpc3QgKi8KLQlmbC0+ZmxfbmV4dCA9ICpwb3M7Ci0JKnBvcyA9IGZsOwotCisJbGlzdF9hZGRfdGFpbCgmZmwtPmZsX2xpc3QsIGJlZm9yZSk7CisJKysqY291bnRlcjsKIAlsb2Nrc19pbnNlcnRfZ2xvYmFsX2xvY2tzKGZsKTsKIH0KIAotLyoqCi0gKiBsb2Nrc19kZWxldGVfbG9jayAtIERlbGV0ZSBhIGxvY2sgYW5kIHRoZW4gZnJlZSBpdC4KLSAqIEB0aGlzZmxfcDogcG9pbnRlciB0aGF0IHBvaW50cyB0byB0aGUgZmxfbmV4dCBmaWVsZCBvZiB0aGUgcHJldmlvdXMKLSAqIAkgICAgICBpbm9kZS0+aV9mbG9jayBsaXN0IGVudHJ5Ci0gKgotICogVW5saW5rIGEgbG9jayBmcm9tIGFsbCBsaXN0cyBhbmQgZnJlZSB0aGUgbmFtZXNwYWNlIHJlZmVyZW5jZSwgYnV0IGRvbid0Ci0gKiBmcmVlIGl0IHlldC4gV2FrZSB1cCBwcm9jZXNzZXMgdGhhdCBhcmUgYmxvY2tlZCB3YWl0aW5nIGZvciB0aGlzIGxvY2sgYW5kCi0gKiBub3RpZnkgdGhlIEZTIHRoYXQgdGhlIGxvY2sgaGFzIGJlZW4gY2xlYXJlZC4KLSAqCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBpX2xvY2sgaGVsZCEKLSAqLwotc3RhdGljIHZvaWQgbG9ja3NfdW5saW5rX2xvY2soc3RydWN0IGZpbGVfbG9jayAqKnRoaXNmbF9wKQorc3RhdGljIHZvaWQKK2xvY2tzX3VubGlua19sb2NrX2N0eChzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgaW50ICpjb3VudGVyKQogewotCXN0cnVjdCBmaWxlX2xvY2sgKmZsID0gKnRoaXNmbF9wOwotCiAJbG9ja3NfZGVsZXRlX2dsb2JhbF9sb2NrcyhmbCk7Ci0KLQkqdGhpc2ZsX3AgPSBmbC0+ZmxfbmV4dDsKLQlmbC0+ZmxfbmV4dCA9IE5VTEw7Ci0KKwlsaXN0X2RlbF9pbml0KCZmbC0+ZmxfbGlzdCk7CisJLS0qY291bnRlcjsKIAlpZiAoZmwtPmZsX25zcGlkKSB7CiAJCXB1dF9waWQoZmwtPmZsX25zcGlkKTsKIAkJZmwtPmZsX25zcGlkID0gTlVMTDsKIAl9Ci0KIAlsb2Nrc193YWtlX3VwX2Jsb2NrcyhmbCk7CiB9CiAKLS8qCi0gKiBVbmxpbmsgYSBsb2NrIGZyb20gYWxsIGxpc3RzIGFuZCBmcmVlIGl0LgotICoKLSAqIE11c3QgYmUgY2FsbGVkIHdpdGggaV9sb2NrIGhlbGQhCi0gKi8KLXN0YXRpYyB2b2lkIGxvY2tzX2RlbGV0ZV9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKip0aGlzZmxfcCwKLQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRpc3Bvc2UpCitzdGF0aWMgdm9pZAorbG9ja3NfZGVsZXRlX2xvY2tfY3R4KHN0cnVjdCBmaWxlX2xvY2sgKmZsLCBpbnQgKmNvdW50ZXIsCisJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRpc3Bvc2UpCiB7Ci0Jc3RydWN0IGZpbGVfbG9jayAqZmwgPSAqdGhpc2ZsX3A7Ci0KLQlsb2Nrc191bmxpbmtfbG9jayh0aGlzZmxfcCk7CisJbG9ja3NfdW5saW5rX2xvY2tfY3R4KGZsLCBjb3VudGVyKTsKIAlpZiAoZGlzcG9zZSkKLQkJbGlzdF9hZGQoJmZsLT5mbF9ibG9jaywgZGlzcG9zZSk7CisJCWxpc3RfYWRkKCZmbC0+ZmxfbGlzdCwgZGlzcG9zZSk7CiAJZWxzZQogCQlsb2Nrc19mcmVlX2xvY2soZmwpOwogfQpAQCAtNzQ2LDIyICs3NjQsMjcgQEAKIHBvc2l4X3Rlc3RfbG9jayhzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCiB7CiAJc3RydWN0IGZpbGVfbG9jayAqY2ZsOworCXN0cnVjdCBmaWxlX2xvY2tfY29udGV4dCAqY3R4OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOwogCi0Jc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlmb3IgKGNmbCA9IGZpbGVfaW5vZGUoZmlscCktPmlfZmxvY2s7IGNmbDsgY2ZsID0gY2ZsLT5mbF9uZXh0KSB7Ci0JCWlmICghSVNfUE9TSVgoY2ZsKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAocG9zaXhfbG9ja3NfY29uZmxpY3QoZmwsIGNmbCkpCi0JCQlicmVhazsKLQl9Ci0JaWYgKGNmbCkgewotCQlsb2Nrc19jb3B5X2NvbmZsb2NrKGZsLCBjZmwpOwotCQlpZiAoY2ZsLT5mbF9uc3BpZCkKLQkJCWZsLT5mbF9waWQgPSBwaWRfdm5yKGNmbC0+ZmxfbnNwaWQpOwotCX0gZWxzZQorCWN0eCA9IGlub2RlLT5pX2ZsY3R4OworCWlmICghY3R4IHx8IGxpc3RfZW1wdHlfY2FyZWZ1bCgmY3R4LT5mbGNfcG9zaXgpKSB7CiAJCWZsLT5mbF90eXBlID0gRl9VTkxDSzsKLQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2soJmN0eC0+ZmxjX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2ZsLCAmY3R4LT5mbGNfcG9zaXgsIGZsX2xpc3QpIHsKKwkJaWYgKHBvc2l4X2xvY2tzX2NvbmZsaWN0KGZsLCBjZmwpKSB7CisJCQlsb2Nrc19jb3B5X2NvbmZsb2NrKGZsLCBjZmwpOworCQkJaWYgKGNmbC0+ZmxfbnNwaWQpCisJCQkJZmwtPmZsX3BpZCA9IHBpZF92bnIoY2ZsLT5mbF9uc3BpZCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlmbC0+ZmxfdHlwZSA9IEZfVU5MQ0s7CitvdXQ6CisJc3Bpbl91bmxvY2soJmN0eC0+ZmxjX2xvY2spOwogCXJldHVybjsKIH0KIEVYUE9SVF9TWU1CT0wocG9zaXhfdGVzdF9sb2NrKTsKQEAgLTg0NSwzNCArODY4LDM0IEBACiBzdGF0aWMgaW50IGZsb2NrX2xvY2tfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IGZpbGVfbG9jayAqcmVxdWVzdCkKIHsKIAlzdHJ1Y3QgZmlsZV9sb2NrICpuZXdfZmwgPSBOVUxMOwotCXN0cnVjdCBmaWxlX2xvY2sgKipiZWZvcmU7Ci0Jc3RydWN0IGlub2RlICogaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOworCXN0cnVjdCBmaWxlX2xvY2sgKmZsOworCXN0cnVjdCBmaWxlX2xvY2tfY29udGV4dCAqY3R4OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOwogCWludCBlcnJvciA9IDA7Ci0JaW50IGZvdW5kID0gMDsKKwlib29sIGZvdW5kID0gZmFsc2U7CiAJTElTVF9IRUFEKGRpc3Bvc2UpOwogCisJY3R4ID0gbG9ja3NfZ2V0X2xvY2tfY29udGV4dChpbm9kZSk7CisJaWYgKCFjdHgpCisJCXJldHVybiAtRU5PTUVNOworCiAJaWYgKCEocmVxdWVzdC0+ZmxfZmxhZ3MgJiBGTF9BQ0NFU1MpICYmIChyZXF1ZXN0LT5mbF90eXBlICE9IEZfVU5MQ0spKSB7CiAJCW5ld19mbCA9IGxvY2tzX2FsbG9jX2xvY2soKTsKIAkJaWYgKCFuZXdfZmwpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCXNwaW5fbG9jaygmY3R4LT5mbGNfbG9jayk7CiAJaWYgKHJlcXVlc3QtPmZsX2ZsYWdzICYgRkxfQUNDRVNTKQogCQlnb3RvIGZpbmRfY29uZmxpY3Q7CiAKLQlmb3JfZWFjaF9sb2NrKGlub2RlLCBiZWZvcmUpIHsKLQkJc3RydWN0IGZpbGVfbG9jayAqZmwgPSAqYmVmb3JlOwotCQlpZiAoSVNfUE9TSVgoZmwpKQotCQkJYnJlYWs7Ci0JCWlmIChJU19MRUFTRShmbCkpCi0JCQljb250aW51ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsLCAmY3R4LT5mbGNfZmxvY2ssIGZsX2xpc3QpIHsKIAkJaWYgKGZpbHAgIT0gZmwtPmZsX2ZpbGUpCiAJCQljb250aW51ZTsKIAkJaWYgKHJlcXVlc3QtPmZsX3R5cGUgPT0gZmwtPmZsX3R5cGUpCiAJCQlnb3RvIG91dDsKLQkJZm91bmQgPSAxOwotCQlsb2Nrc19kZWxldGVfbG9jayhiZWZvcmUsICZkaXNwb3NlKTsKKwkJZm91bmQgPSB0cnVlOworCQlsb2Nrc19kZWxldGVfbG9ja19jdHgoZmwsICZjdHgtPmZsY19mbG9ja19jbnQsICZkaXNwb3NlKTsKIAkJYnJlYWs7CiAJfQogCkBAIC04ODcsMTggKzkxMCwxMyBAQAogCSAqIGdpdmUgaXQgdGhlIG9wcG9ydHVuaXR5IHRvIGxvY2sgdGhlIGZpbGUuCiAJICovCiAJaWYgKGZvdW5kKSB7Ci0JCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmN0eC0+ZmxjX2xvY2spOwogCQljb25kX3Jlc2NoZWQoKTsKLQkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJc3Bpbl9sb2NrKCZjdHgtPmZsY19sb2NrKTsKIAl9CiAKIGZpbmRfY29uZmxpY3Q6Ci0JZm9yX2VhY2hfbG9jayhpbm9kZSwgYmVmb3JlKSB7Ci0JCXN0cnVjdCBmaWxlX2xvY2sgKmZsID0gKmJlZm9yZTsKLQkJaWYgKElTX1BPU0lYKGZsKSkKLQkJCWJyZWFrOwotCQlpZiAoSVNfTEVBU0UoZmwpKQotCQkJY29udGludWU7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShmbCwgJmN0eC0+ZmxjX2Zsb2NrLCBmbF9saXN0KSB7CiAJCWlmICghZmxvY2tfbG9ja3NfY29uZmxpY3QocmVxdWVzdCwgZmwpKQogCQkJY29udGludWU7CiAJCWVycm9yID0gLUVBR0FJTjsKQEAgLTkxMSwxMiArOTI5LDEyIEBACiAJaWYgKHJlcXVlc3QtPmZsX2ZsYWdzICYgRkxfQUNDRVNTKQogCQlnb3RvIG91dDsKIAlsb2Nrc19jb3B5X2xvY2sobmV3X2ZsLCByZXF1ZXN0KTsKLQlsb2Nrc19pbnNlcnRfbG9jayhiZWZvcmUsIG5ld19mbCk7CisJbG9ja3NfaW5zZXJ0X2xvY2tfY3R4KG5ld19mbCwgJmN0eC0+ZmxjX2Zsb2NrX2NudCwgJmN0eC0+ZmxjX2Zsb2NrKTsKIAluZXdfZmwgPSBOVUxMOwogCWVycm9yID0gMDsKIAogb3V0OgotCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlzcGluX3VubG9jaygmY3R4LT5mbGNfbG9jayk7CiAJaWYgKG5ld19mbCkKIAkJbG9ja3NfZnJlZV9sb2NrKG5ld19mbCk7CiAJbG9ja3NfZGlzcG9zZV9saXN0KCZkaXNwb3NlKTsKQEAgLTkyNSwxNiArOTQzLDIwIEBACiAKIHN0YXRpYyBpbnQgX19wb3NpeF9sb2NrX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGVfbG9jayAqcmVxdWVzdCwgc3RydWN0IGZpbGVfbG9jayAqY29uZmxvY2spCiB7Ci0Jc3RydWN0IGZpbGVfbG9jayAqZmw7CisJc3RydWN0IGZpbGVfbG9jayAqZmwsICp0bXA7CiAJc3RydWN0IGZpbGVfbG9jayAqbmV3X2ZsID0gTlVMTDsKIAlzdHJ1Y3QgZmlsZV9sb2NrICpuZXdfZmwyID0gTlVMTDsKIAlzdHJ1Y3QgZmlsZV9sb2NrICpsZWZ0ID0gTlVMTDsKIAlzdHJ1Y3QgZmlsZV9sb2NrICpyaWdodCA9IE5VTEw7Ci0Jc3RydWN0IGZpbGVfbG9jayAqKmJlZm9yZTsKKwlzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmN0eDsKIAlpbnQgZXJyb3I7CiAJYm9vbCBhZGRlZCA9IGZhbHNlOwogCUxJU1RfSEVBRChkaXNwb3NlKTsKIAorCWN0eCA9IGxvY2tzX2dldF9sb2NrX2NvbnRleHQoaW5vZGUpOworCWlmICghY3R4KQorCQlyZXR1cm4gLUVOT01FTTsKKwogCS8qCiAJICogV2UgbWF5IG5lZWQgdHdvIGZpbGVfbG9jayBzdHJ1Y3R1cmVzIGZvciB0aGlzIG9wZXJhdGlvbiwKIAkgKiBzbyB3ZSBnZXQgdGhlbSBpbiBhZHZhbmNlIHRvIGF2b2lkIHJhY2VzLgpAQCAtOTQ4LDE1ICs5NzAsMTQgQEAKIAkJbmV3X2ZsMiA9IGxvY2tzX2FsbG9jX2xvY2soKTsKIAl9CiAKLQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCXNwaW5fbG9jaygmY3R4LT5mbGNfbG9jayk7CiAJLyoKIAkgKiBOZXcgbG9jayByZXF1ZXN0LiBXYWxrIGFsbCBQT1NJWCBsb2NrcyBhbmQgbG9vayBmb3IgY29uZmxpY3RzLiBJZgogCSAqIHRoZXJlIGFyZSBhbnksIGVpdGhlciByZXR1cm4gZXJyb3Igb3IgcHV0IHRoZSByZXF1ZXN0IG9uIHRoZQogCSAqIGJsb2NrZXIncyBsaXN0IG9mIHdhaXRlcnMgYW5kIHRoZSBnbG9iYWwgYmxvY2tlZF9oYXNoLgogCSAqLwogCWlmIChyZXF1ZXN0LT5mbF90eXBlICE9IEZfVU5MQ0spIHsKLQkJZm9yX2VhY2hfbG9jayhpbm9kZSwgYmVmb3JlKSB7Ci0JCQlmbCA9ICpiZWZvcmU7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmwsICZjdHgtPmZsY19wb3NpeCwgZmxfbGlzdCkgewogCQkJaWYgKCFJU19QT1NJWChmbCkpCiAJCQkJY29udGludWU7CiAJCQlpZiAoIXBvc2l4X2xvY2tzX2NvbmZsaWN0KHJlcXVlc3QsIGZsKSkKQEAgLTk4NiwyOSArMTAwNywyNSBAQAogCWlmIChyZXF1ZXN0LT5mbF9mbGFncyAmIEZMX0FDQ0VTUykKIAkJZ290byBvdXQ7CiAKLQkvKgotCSAqIEZpbmQgdGhlIGZpcnN0IG9sZCBsb2NrIHdpdGggdGhlIHNhbWUgb3duZXIgYXMgdGhlIG5ldyBsb2NrLgotCSAqLwotCQotCWJlZm9yZSA9ICZpbm9kZS0+aV9mbG9jazsKLQotCS8qIEZpcnN0IHNraXAgbG9ja3Mgb3duZWQgYnkgb3RoZXIgcHJvY2Vzc2VzLiAgKi8KLQl3aGlsZSAoKGZsID0gKmJlZm9yZSkgJiYgKCFJU19QT1NJWChmbCkgfHwKLQkJCQkgICFwb3NpeF9zYW1lX293bmVyKHJlcXVlc3QsIGZsKSkpIHsKLQkJYmVmb3JlID0gJmZsLT5mbF9uZXh0OworCS8qIEZpbmQgdGhlIGZpcnN0IG9sZCBsb2NrIHdpdGggdGhlIHNhbWUgb3duZXIgYXMgdGhlIG5ldyBsb2NrICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShmbCwgJmN0eC0+ZmxjX3Bvc2l4LCBmbF9saXN0KSB7CisJCWlmIChwb3NpeF9zYW1lX293bmVyKHJlcXVlc3QsIGZsKSkKKwkJCWJyZWFrOwogCX0KIAogCS8qIFByb2Nlc3MgbG9ja3Mgd2l0aCB0aGlzIG93bmVyLiAqLwotCXdoaWxlICgoZmwgPSAqYmVmb3JlKSAmJiBwb3NpeF9zYW1lX293bmVyKHJlcXVlc3QsIGZsKSkgewotCQkvKiBEZXRlY3QgYWRqYWNlbnQgb3Igb3ZlcmxhcHBpbmcgcmVnaW9ucyAoaWYgc2FtZSBsb2NrIHR5cGUpCi0JCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9mcm9tKGZsLCB0bXAsICZjdHgtPmZsY19wb3NpeCwgZmxfbGlzdCkgeworCQlpZiAoIXBvc2l4X3NhbWVfb3duZXIocmVxdWVzdCwgZmwpKQorCQkJYnJlYWs7CisKKwkJLyogRGV0ZWN0IGFkamFjZW50IG9yIG92ZXJsYXBwaW5nIHJlZ2lvbnMgKGlmIHNhbWUgbG9jayB0eXBlKSAqLwogCQlpZiAocmVxdWVzdC0+ZmxfdHlwZSA9PSBmbC0+ZmxfdHlwZSkgewogCQkJLyogSW4gYWxsIGNvbXBhcmlzb25zIG9mIHN0YXJ0IHZzIGVuZCwgdXNlCiAJCQkgKiAic3RhcnQgLSAxIiByYXRoZXIgdGhhbiAiZW5kICsgMSIuIElmIGVuZAogCQkJICogaXMgT0ZGU0VUX01BWCwgZW5kICsgMSB3aWxsIGJlY29tZSBuZWdhdGl2ZS4KIAkJCSAqLwogCQkJaWYgKGZsLT5mbF9lbmQgPCByZXF1ZXN0LT5mbF9zdGFydCAtIDEpCi0JCQkJZ290byBuZXh0X2xvY2s7CisJCQkJY29udGludWU7CiAJCQkvKiBJZiB0aGUgbmV4dCBsb2NrIGluIHRoZSBsaXN0IGhhcyBlbnRpcmVseSBiaWdnZXIKIAkJCSAqIGFkZHJlc3NlcyB0aGFuIHRoZSBuZXcgb25lLCBpbnNlcnQgdGhlIGxvY2sgaGVyZS4KIAkJCSAqLwpAQCAtMTAyOSwxOCArMTA0NiwxOCBAQAogCQkJZWxzZQogCQkJCXJlcXVlc3QtPmZsX2VuZCA9IGZsLT5mbF9lbmQ7CiAJCQlpZiAoYWRkZWQpIHsKLQkJCQlsb2Nrc19kZWxldGVfbG9jayhiZWZvcmUsICZkaXNwb3NlKTsKKwkJCQlsb2Nrc19kZWxldGVfbG9ja19jdHgoZmwsICZjdHgtPmZsY19wb3NpeF9jbnQsCisJCQkJCQkJJmRpc3Bvc2UpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJcmVxdWVzdCA9IGZsOwogCQkJYWRkZWQgPSB0cnVlOwotCQl9Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJLyogUHJvY2Vzc2luZyBmb3IgZGlmZmVyZW50IGxvY2sgdHlwZXMgaXMgYSBiaXQKIAkJCSAqIG1vcmUgY29tcGxleC4KIAkJCSAqLwogCQkJaWYgKGZsLT5mbF9lbmQgPCByZXF1ZXN0LT5mbF9zdGFydCkKLQkJCQlnb3RvIG5leHRfbG9jazsKKwkJCQljb250aW51ZTsKIAkJCWlmIChmbC0+Zmxfc3RhcnQgPiByZXF1ZXN0LT5mbF9lbmQpCiAJCQkJYnJlYWs7CiAJCQlpZiAocmVxdWVzdC0+ZmxfdHlwZSA9PSBGX1VOTENLKQpAQCAtMTA1OSw3ICsxMDc2LDggQEAKIAkJCQkgKiBvbmUgKFRoaXMgbWF5IGhhcHBlbiBzZXZlcmFsIHRpbWVzKS4KIAkJCQkgKi8KIAkJCQlpZiAoYWRkZWQpIHsKLQkJCQkJbG9ja3NfZGVsZXRlX2xvY2soYmVmb3JlLCAmZGlzcG9zZSk7CisJCQkJCWxvY2tzX2RlbGV0ZV9sb2NrX2N0eChmbCwKKwkJCQkJCSZjdHgtPmZsY19wb3NpeF9jbnQsICZkaXNwb3NlKTsKIAkJCQkJY29udGludWU7CiAJCQkJfQogCQkJCS8qCkBAIC0xMDc1LDE1ICsxMDkzLDEzIEBACiAJCQkJbG9ja3NfY29weV9sb2NrKG5ld19mbCwgcmVxdWVzdCk7CiAJCQkJcmVxdWVzdCA9IG5ld19mbDsKIAkJCQluZXdfZmwgPSBOVUxMOwotCQkJCWxvY2tzX2RlbGV0ZV9sb2NrKGJlZm9yZSwgJmRpc3Bvc2UpOwotCQkJCWxvY2tzX2luc2VydF9sb2NrKGJlZm9yZSwgcmVxdWVzdCk7CisJCQkJbG9ja3NfaW5zZXJ0X2xvY2tfY3R4KHJlcXVlc3QsCisJCQkJCSZjdHgtPmZsY19wb3NpeF9jbnQsICZmbC0+ZmxfbGlzdCk7CisJCQkJbG9ja3NfZGVsZXRlX2xvY2tfY3R4KGZsLAorCQkJCQkmY3R4LT5mbGNfcG9zaXhfY250LCAmZGlzcG9zZSk7CiAJCQkJYWRkZWQgPSB0cnVlOwogCQkJfQogCQl9Ci0JCS8qIEdvIG9uIHRvIG5leHQgbG9jay4KLQkJICovCi0JbmV4dF9sb2NrOgotCQliZWZvcmUgPSAmZmwtPmZsX25leHQ7CiAJfQogCiAJLyoKQEAgLTExMDgsNyArMTEyNCw4IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCQlsb2Nrc19jb3B5X2xvY2sobmV3X2ZsLCByZXF1ZXN0KTsKLQkJbG9ja3NfaW5zZXJ0X2xvY2soYmVmb3JlLCBuZXdfZmwpOworCQlsb2Nrc19pbnNlcnRfbG9ja19jdHgobmV3X2ZsLCAmY3R4LT5mbGNfcG9zaXhfY250LAorCQkJCQkmZmwtPmZsX2xpc3QpOwogCQluZXdfZmwgPSBOVUxMOwogCX0KIAlpZiAocmlnaHQpIHsKQEAgLTExMTksNyArMTEzNiw4IEBACiAJCQlsZWZ0ID0gbmV3X2ZsMjsKIAkJCW5ld19mbDIgPSBOVUxMOwogCQkJbG9ja3NfY29weV9sb2NrKGxlZnQsIHJpZ2h0KTsKLQkJCWxvY2tzX2luc2VydF9sb2NrKGJlZm9yZSwgbGVmdCk7CisJCQlsb2Nrc19pbnNlcnRfbG9ja19jdHgobGVmdCwgJmN0eC0+ZmxjX3Bvc2l4X2NudCwKKwkJCQkJCSZmbC0+ZmxfbGlzdCk7CiAJCX0KIAkJcmlnaHQtPmZsX3N0YXJ0ID0gcmVxdWVzdC0+ZmxfZW5kICsgMTsKIAkJbG9ja3Nfd2FrZV91cF9ibG9ja3MocmlnaHQpOwpAQCAtMTEyOSw3ICsxMTQ3LDcgQEAKIAkJbG9ja3Nfd2FrZV91cF9ibG9ja3MobGVmdCk7CiAJfQogIG91dDoKLQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJc3Bpbl91bmxvY2soJmN0eC0+ZmxjX2xvY2spOwogCS8qCiAJICogRnJlZSBhbnkgdW51c2VkIGxvY2tzLgogCSAqLwpAQCAtMTE5OSwyMiArMTIxNywyOSBAQAogICovCiBpbnQgbG9ja3NfbWFuZGF0b3J5X2xvY2tlZChzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwlpbnQgcmV0OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOworCXN0cnVjdCBmaWxlX2xvY2tfY29udGV4dCAqY3R4OwogCXN0cnVjdCBmaWxlX2xvY2sgKmZsOwogCisJY3R4ID0gaW5vZGUtPmlfZmxjdHg7CisJaWYgKCFjdHggfHwgbGlzdF9lbXB0eV9jYXJlZnVsKCZjdHgtPmZsY19wb3NpeCkpCisJCXJldHVybiAwOworCiAJLyoKIAkgKiBTZWFyY2ggdGhlIGxvY2sgbGlzdCBmb3IgdGhpcyBpbm9kZSBmb3IgYW55IFBPU0lYIGxvY2tzLgogCSAqLwotCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JZm9yIChmbCA9IGlub2RlLT5pX2Zsb2NrOyBmbCAhPSBOVUxMOyBmbCA9IGZsLT5mbF9uZXh0KSB7Ci0JCWlmICghSVNfUE9TSVgoZmwpKQotCQkJY29udGludWU7CisJc3Bpbl9sb2NrKCZjdHgtPmZsY19sb2NrKTsKKwlyZXQgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZmwsICZjdHgtPmZsY19wb3NpeCwgZmxfbGlzdCkgewogCQlpZiAoZmwtPmZsX293bmVyICE9IGN1cnJlbnQtPmZpbGVzICYmCi0JCSAgICBmbC0+Zmxfb3duZXIgIT0gZmlsZSkKKwkJICAgIGZsLT5mbF9vd25lciAhPSBmaWxlKSB7CisJCQlyZXQgPSAtRUFHQUlOOwogCQkJYnJlYWs7CisJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCXJldHVybiBmbCA/IC1FQUdBSU4gOiAwOworCXNwaW5fdW5sb2NrKCZjdHgtPmZsY19sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTEyOTQsOSArMTMxOSw5IEBACiB9CiAKIC8qIFdlIGFscmVhZHkgaGFkIGEgbGVhc2Ugb24gdGhpcyBmaWxlOyBqdXN0IGNoYW5nZSBpdHMgdHlwZSAqLwotaW50IGxlYXNlX21vZGlmeShzdHJ1Y3QgZmlsZV9sb2NrICoqYmVmb3JlLCBpbnQgYXJnLCBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwb3NlKQoraW50IGxlYXNlX21vZGlmeShzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgaW50IGFyZywgc3RydWN0IGxpc3RfaGVhZCAqZGlzcG9zZSkKIHsKLQlzdHJ1Y3QgZmlsZV9sb2NrICpmbCA9ICpiZWZvcmU7CisJc3RydWN0IGZpbGVfbG9ja19jb250ZXh0ICpmbGN0eDsKIAlpbnQgZXJyb3IgPSBhc3NpZ25fdHlwZShmbCwgYXJnKTsKIAogCWlmIChlcnJvcikKQEAgLTEzMDYsNiArMTMzMSw3IEBACiAJaWYgKGFyZyA9PSBGX1VOTENLKSB7CiAJCXN0cnVjdCBmaWxlICpmaWxwID0gZmwtPmZsX2ZpbGU7CiAKKwkJZmxjdHggPSBmaWxlX2lub2RlKGZpbHApLT5pX2ZsY3R4OwogCQlmX2RlbG93bihmaWxwKTsKIAkJZmlscC0+Zl9vd25lci5zaWdudW0gPSAwOwogCQlmYXN5bmNfaGVscGVyKDAsIGZsLT5mbF9maWxlLCAwLCAmZmwtPmZsX2Zhc3luYyk7CkBAIC0xMzEzLDcgKzEzMzksNyBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICJsb2Nrc19kZWxldGVfbG9jazogZmFzeW5jID09ICVwXG4iLCBmbC0+ZmxfZmFzeW5jKTsKIAkJCWZsLT5mbF9mYXN5bmMgPSBOVUxMOwogCQl9Ci0JCWxvY2tzX2RlbGV0ZV9sb2NrKGJlZm9yZSwgZGlzcG9zZSk7CisJCWxvY2tzX2RlbGV0ZV9sb2NrX2N0eChmbCwgJmZsY3R4LT5mbGNfbGVhc2VfY250LCBkaXNwb3NlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzI5LDIwICsxMzU1LDE3IEBACiAKIHN0YXRpYyB2b2lkIHRpbWVfb3V0X2xlYXNlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwb3NlKQogewotCXN0cnVjdCBmaWxlX2xvY2sgKipiZWZvcmU7Ci0Jc3RydWN0IGZpbGVfbG9jayAqZmw7CisJc3RydWN0IGZpbGVfbG9ja19jb250ZXh0ICpjdHggPSBpbm9kZS0+aV9mbGN0eDsKKwlzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgKnRtcDsKIAotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmlub2RlLT5pX2xvY2spOworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmN0eC0+ZmxjX2xvY2spOwogCi0JYmVmb3JlID0gJmlub2RlLT5pX2Zsb2NrOwotCXdoaWxlICgoZmwgPSAqYmVmb3JlKSAmJiBJU19MRUFTRShmbCkgJiYgbGVhc2VfYnJlYWtpbmcoZmwpKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZsLCB0bXAsICZjdHgtPmZsY19sZWFzZSwgZmxfbGlzdCkgewogCQl0cmFjZV90aW1lX291dF9sZWFzZXMoaW5vZGUsIGZsKTsKIAkJaWYgKHBhc3RfdGltZShmbC0+ZmxfZG93bmdyYWRlX3RpbWUpKQotCQkJbGVhc2VfbW9kaWZ5KGJlZm9yZSwgRl9SRExDSywgZGlzcG9zZSk7CisJCQlsZWFzZV9tb2RpZnkoZmwsIEZfUkRMQ0ssIGRpc3Bvc2UpOwogCQlpZiAocGFzdF90aW1lKGZsLT5mbF9icmVha190aW1lKSkKLQkJCWxlYXNlX21vZGlmeShiZWZvcmUsIEZfVU5MQ0ssIGRpc3Bvc2UpOwotCQlpZiAoZmwgPT0gKmJlZm9yZSkJLyogbGVhc2VfbW9kaWZ5IG1heSBoYXZlIGZyZWVkIGZsICovCi0JCQliZWZvcmUgPSAmZmwtPmZsX25leHQ7CisJCQlsZWFzZV9tb2RpZnkoZmwsIEZfVU5MQ0ssIGRpc3Bvc2UpOwogCX0KIH0KIApAQCAtMTM1NiwxMSArMTM3OSwxMiBAQAogc3RhdGljIGJvb2wKIGFueV9sZWFzZXNfY29uZmxpY3Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGVfbG9jayAqYnJlYWtlcikKIHsKKwlzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmN0eCA9IGlub2RlLT5pX2ZsY3R4OwogCXN0cnVjdCBmaWxlX2xvY2sgKmZsOwogCi0JbG9ja2RlcF9hc3NlcnRfaGVsZCgmaW5vZGUtPmlfbG9jayk7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmY3R4LT5mbGNfbG9jayk7CiAKLQlmb3IgKGZsID0gaW5vZGUtPmlfZmxvY2sgOyBmbCAmJiBJU19MRUFTRShmbCk7IGZsID0gZmwtPmZsX25leHQpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsLCAmY3R4LT5mbGNfbGVhc2UsIGZsX2xpc3QpIHsKIAkJaWYgKGxlYXNlc19jb25mbGljdChmbCwgYnJlYWtlcikpCiAJCQlyZXR1cm4gdHJ1ZTsKIAl9CkBAIC0xMzg0LDcgKzE0MDgsOCBAQAogewogCWludCBlcnJvciA9IDA7CiAJc3RydWN0IGZpbGVfbG9jayAqbmV3X2ZsOwotCXN0cnVjdCBmaWxlX2xvY2sgKmZsLCAqKmJlZm9yZTsKKwlzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmN0eCA9IGlub2RlLT5pX2ZsY3R4OworCXN0cnVjdCBmaWxlX2xvY2sgKmZsOwogCXVuc2lnbmVkIGxvbmcgYnJlYWtfdGltZTsKIAlpbnQgd2FudF93cml0ZSA9IChtb2RlICYgT19BQ0NNT0RFKSAhPSBPX1JET05MWTsKIAlMSVNUX0hFQUQoZGlzcG9zZSk7CkBAIC0xMzk0LDcgKzE0MTksMTMgQEAKIAkJcmV0dXJuIFBUUl9FUlIobmV3X2ZsKTsKIAluZXdfZmwtPmZsX2ZsYWdzID0gdHlwZTsKIAotCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJLyogdHlwaWNhbGx5IHdlIHdpbGwgY2hlY2sgdGhhdCBjdHggaXMgbm9uLU5VTEwgYmVmb3JlIGNhbGxpbmcgKi8KKwlpZiAoIWN0eCkgeworCQlXQVJOX09OX09OQ0UoMSk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlzcGluX2xvY2soJmN0eC0+ZmxjX2xvY2spOwogCiAJdGltZV9vdXRfbGVhc2VzKGlub2RlLCAmZGlzcG9zZSk7CiAKQEAgLTE0MDgsOSArMTQzOSw3IEBACiAJCQlicmVha190aW1lKys7CS8qIHNvIHRoYXQgMCBtZWFucyBubyBicmVhayB0aW1lICovCiAJfQogCi0JZm9yIChiZWZvcmUgPSAmaW5vZGUtPmlfZmxvY2s7Ci0JCQkoKGZsID0gKmJlZm9yZSkgIT0gTlVMTCkgJiYgSVNfTEVBU0UoZmwpOwotCQkJYmVmb3JlID0gJmZsLT5mbF9uZXh0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShmbCwgJmN0eC0+ZmxjX2xlYXNlLCBmbF9saXN0KSB7CiAJCWlmICghbGVhc2VzX2NvbmZsaWN0KGZsLCBuZXdfZmwpKQogCQkJY29udGludWU7CiAJCWlmICh3YW50X3dyaXRlKSB7CkBAIC0xNDE5LDE3ICsxNDQ4LDE3IEBACiAJCQlmbC0+ZmxfZmxhZ3MgfD0gRkxfVU5MT0NLX1BFTkRJTkc7CiAJCQlmbC0+ZmxfYnJlYWtfdGltZSA9IGJyZWFrX3RpbWU7CiAJCX0gZWxzZSB7Ci0JCQlpZiAobGVhc2VfYnJlYWtpbmcoaW5vZGUtPmlfZmxvY2spKQorCQkJaWYgKGxlYXNlX2JyZWFraW5nKGZsKSkKIAkJCQljb250aW51ZTsKIAkJCWZsLT5mbF9mbGFncyB8PSBGTF9ET1dOR1JBREVfUEVORElORzsKIAkJCWZsLT5mbF9kb3duZ3JhZGVfdGltZSA9IGJyZWFrX3RpbWU7CiAJCX0KIAkJaWYgKGZsLT5mbF9sbW9wcy0+bG1fYnJlYWsoZmwpKQotCQkJbG9ja3NfZGVsZXRlX2xvY2soYmVmb3JlLCAmZGlzcG9zZSk7CisJCQlsb2Nrc19kZWxldGVfbG9ja19jdHgoZmwsICZjdHgtPmZsY19sZWFzZV9jbnQsCisJCQkJCQkmZGlzcG9zZSk7CiAJfQogCi0JZmwgPSBpbm9kZS0+aV9mbG9jazsKLQlpZiAoIWZsIHx8ICFJU19MRUFTRShmbCkpCisJaWYgKGxpc3RfZW1wdHkoJmN0eC0+ZmxjX2xlYXNlKSkKIAkJZ290byBvdXQ7CiAKIAlpZiAobW9kZSAmIE9fTk9OQkxPQ0spIHsKQEAgLTE0MzksMTggKzE0NjgsMTkgQEAKIAl9CiAKIHJlc3RhcnQ6Ci0JYnJlYWtfdGltZSA9IGlub2RlLT5pX2Zsb2NrLT5mbF9icmVha190aW1lOworCWZsID0gbGlzdF9maXJzdF9lbnRyeSgmY3R4LT5mbGNfbGVhc2UsIHN0cnVjdCBmaWxlX2xvY2ssIGZsX2xpc3QpOworCWJyZWFrX3RpbWUgPSBmbC0+ZmxfYnJlYWtfdGltZTsKIAlpZiAoYnJlYWtfdGltZSAhPSAwKQogCQlicmVha190aW1lIC09IGppZmZpZXM7CiAJaWYgKGJyZWFrX3RpbWUgPT0gMCkKIAkJYnJlYWtfdGltZSsrOwotCWxvY2tzX2luc2VydF9ibG9jayhpbm9kZS0+aV9mbG9jaywgbmV3X2ZsKTsKKwlsb2Nrc19pbnNlcnRfYmxvY2soZmwsIG5ld19mbCk7CiAJdHJhY2VfYnJlYWtfbGVhc2VfYmxvY2soaW5vZGUsIG5ld19mbCk7Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCXNwaW5fdW5sb2NrKCZjdHgtPmZsY19sb2NrKTsKIAlsb2Nrc19kaXNwb3NlX2xpc3QoJmRpc3Bvc2UpOwogCWVycm9yID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQobmV3X2ZsLT5mbF93YWl0LAogCQkJCQkJIW5ld19mbC0+ZmxfbmV4dCwgYnJlYWtfdGltZSk7Ci0Jc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlzcGluX2xvY2soJmN0eC0+ZmxjX2xvY2spOwogCXRyYWNlX2JyZWFrX2xlYXNlX3VuYmxvY2soaW5vZGUsIG5ld19mbCk7CiAJbG9ja3NfZGVsZXRlX2Jsb2NrKG5ld19mbCk7CiAJaWYgKGVycm9yID49IDApIHsKQEAgLTE0NjIsMTIgKzE0OTIsMTAgQEAKIAkJCXRpbWVfb3V0X2xlYXNlcyhpbm9kZSwgJmRpc3Bvc2UpOwogCQlpZiAoYW55X2xlYXNlc19jb25mbGljdChpbm9kZSwgbmV3X2ZsKSkKIAkJCWdvdG8gcmVzdGFydDsKLQogCQllcnJvciA9IDA7CiAJfQotCiBvdXQ6Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCXNwaW5fdW5sb2NrKCZjdHgtPmZsY19sb2NrKTsKIAlsb2Nrc19kaXNwb3NlX2xpc3QoJmRpc3Bvc2UpOwogCWxvY2tzX2ZyZWVfbG9jayhuZXdfZmwpOwogCXJldHVybiBlcnJvcjsKQEAgLTE0ODcsMTQgKzE1MTUsMTggQEAKIHZvaWQgbGVhc2VfZ2V0X210aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB0aW1lc3BlYyAqdGltZSkKIHsKIAlib29sIGhhc19sZWFzZSA9IGZhbHNlOwotCXN0cnVjdCBmaWxlX2xvY2sgKmZsb2NrOworCXN0cnVjdCBmaWxlX2xvY2tfY29udGV4dCAqY3R4ID0gaW5vZGUtPmlfZmxjdHg7CisJc3RydWN0IGZpbGVfbG9jayAqZmw7CiAKLQlpZiAoaW5vZGUtPmlfZmxvY2spIHsKLQkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQkJZmxvY2sgPSBpbm9kZS0+aV9mbG9jazsKLQkJaWYgKGZsb2NrICYmIElTX0xFQVNFKGZsb2NrKSAmJiAoZmxvY2stPmZsX3R5cGUgPT0gRl9XUkxDSykpCi0JCQloYXNfbGVhc2UgPSB0cnVlOwotCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJaWYgKGN0eCAmJiAhbGlzdF9lbXB0eV9jYXJlZnVsKCZjdHgtPmZsY19sZWFzZSkpIHsKKwkJc3Bpbl9sb2NrKCZjdHgtPmZsY19sb2NrKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZjdHgtPmZsY19sZWFzZSkpIHsKKwkJCWZsID0gbGlzdF9maXJzdF9lbnRyeSgmY3R4LT5mbGNfbGVhc2UsCisJCQkJCQlzdHJ1Y3QgZmlsZV9sb2NrLCBmbF9saXN0KTsKKwkJCWlmIChmbC0+ZmxfdHlwZSA9PSBGX1dSTENLKQorCQkJCWhhc19sZWFzZSA9IHRydWU7CisJCX0KKwkJc3Bpbl91bmxvY2soJmN0eC0+ZmxjX2xvY2spOwogCX0KIAogCWlmIChoYXNfbGVhc2UpCkBAIC0xNTMyLDIwICsxNTY0LDIyIEBACiB7CiAJc3RydWN0IGZpbGVfbG9jayAqZmw7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7CisJc3RydWN0IGZpbGVfbG9ja19jb250ZXh0ICpjdHggPSBpbm9kZS0+aV9mbGN0eDsKIAlpbnQgdHlwZSA9IEZfVU5MQ0s7CiAJTElTVF9IRUFEKGRpc3Bvc2UpOwogCi0Jc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQl0aW1lX291dF9sZWFzZXMoZmlsZV9pbm9kZShmaWxwKSwgJmRpc3Bvc2UpOwotCWZvciAoZmwgPSBmaWxlX2lub2RlKGZpbHApLT5pX2Zsb2NrOyBmbCAmJiBJU19MRUFTRShmbCk7Ci0JCQlmbCA9IGZsLT5mbF9uZXh0KSB7Ci0JCWlmIChmbC0+ZmxfZmlsZSA9PSBmaWxwKSB7CisJaWYgKGN0eCAmJiAhbGlzdF9lbXB0eV9jYXJlZnVsKCZjdHgtPmZsY19sZWFzZSkpIHsKKwkJc3Bpbl9sb2NrKCZjdHgtPmZsY19sb2NrKTsKKwkJdGltZV9vdXRfbGVhc2VzKGZpbGVfaW5vZGUoZmlscCksICZkaXNwb3NlKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShmbCwgJmN0eC0+ZmxjX2xlYXNlLCBmbF9saXN0KSB7CisJCQlpZiAoZmwtPmZsX2ZpbGUgIT0gZmlscCkKKwkJCQljb250aW51ZTsKIAkJCXR5cGUgPSB0YXJnZXRfbGVhc2V0eXBlKGZsKTsKIAkJCWJyZWFrOwogCQl9CisJCXNwaW5fdW5sb2NrKCZjdHgtPmZsY19sb2NrKTsKKwkJbG9ja3NfZGlzcG9zZV9saXN0KCZkaXNwb3NlKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCWxvY2tzX2Rpc3Bvc2VfbGlzdCgmZGlzcG9zZSk7CiAJcmV0dXJuIHR5cGU7CiB9CiAKQEAgLTE1NzgsOSArMTYxMiwxMCBAQAogc3RhdGljIGludAogZ2VuZXJpY19hZGRfbGVhc2Uoc3RydWN0IGZpbGUgKmZpbHAsIGxvbmcgYXJnLCBzdHJ1Y3QgZmlsZV9sb2NrICoqZmxwLCB2b2lkICoqcHJpdikKIHsKLQlzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgKipiZWZvcmUsICoqbXlfYmVmb3JlID0gTlVMTCwgKmxlYXNlOworCXN0cnVjdCBmaWxlX2xvY2sgKmZsLCAqbXlfZmwgPSBOVUxMLCAqbGVhc2U7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBmaWxlX2xvY2tfY29udGV4dCAqY3R4OwogCWJvb2wgaXNfZGVsZWcgPSAoKmZscCktPmZsX2ZsYWdzICYgRkxfREVMRUc7CiAJaW50IGVycm9yOwogCUxJU1RfSEVBRChkaXNwb3NlKTsKQEAgLTE1ODgsNiArMTYyMywxMCBAQAogCWxlYXNlID0gKmZscDsKIAl0cmFjZV9nZW5lcmljX2FkZF9sZWFzZShpbm9kZSwgbGVhc2UpOwogCisJY3R4ID0gbG9ja3NfZ2V0X2xvY2tfY29udGV4dChpbm9kZSk7CisJaWYgKCFjdHgpCisJCXJldHVybiAtRU5PTUVNOworCiAJLyoKIAkgKiBJbiB0aGUgZGVsZWdhdGlvbiBjYXNlIHdlIG5lZWQgbXV0dWFsIGV4Y2x1c2lvbiB3aXRoCiAJICogYSBudW1iZXIgb2Ygb3BlcmF0aW9ucyB0aGF0IHRha2UgdGhlIGlfbXV0ZXguICBXZSB0cnlsb2NrCkBAIC0xNjA2LDcgKzE2NDUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCXNwaW5fbG9jaygmY3R4LT5mbGNfbG9jayk7CiAJdGltZV9vdXRfbGVhc2VzKGlub2RlLCAmZGlzcG9zZSk7CiAJZXJyb3IgPSBjaGVja19jb25mbGljdGluZ19vcGVuKGRlbnRyeSwgYXJnKTsKIAlpZiAoZXJyb3IpCkBAIC0xNjIxLDEzICsxNjYwLDEyIEBACiAJICogZXhjZXB0IGZvciB0aGlzIGZpbHAuCiAJICovCiAJZXJyb3IgPSAtRUFHQUlOOwotCWZvciAoYmVmb3JlID0gJmlub2RlLT5pX2Zsb2NrOwotCQkJKChmbCA9ICpiZWZvcmUpICE9IE5VTEwpICYmIElTX0xFQVNFKGZsKTsKLQkJCWJlZm9yZSA9ICZmbC0+ZmxfbmV4dCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZmwsICZjdHgtPmZsY19sZWFzZSwgZmxfbGlzdCkgewogCQlpZiAoZmwtPmZsX2ZpbGUgPT0gZmlscCkgewotCQkJbXlfYmVmb3JlID0gYmVmb3JlOworCQkJbXlfZmwgPSBmbDsKIAkJCWNvbnRpbnVlOwogCQl9CisKIAkJLyoKIAkJICogTm8gZXhjbHVzaXZlIGxlYXNlcyBpZiBzb21lb25lIGVsc2UgaGFzIGEgbGVhc2Ugb24KIAkJICogdGhpcyBmaWxlOgpAQCAtMTY0Miw5ICsxNjgwLDggQEAKIAkJCWdvdG8gb3V0OwogCX0KIAotCWlmIChteV9iZWZvcmUgIT0gTlVMTCkgewotCQlsZWFzZSA9ICpteV9iZWZvcmU7Ci0JCWVycm9yID0gbGVhc2UtPmZsX2xtb3BzLT5sbV9jaGFuZ2UobXlfYmVmb3JlLCBhcmcsICZkaXNwb3NlKTsKKwlpZiAobXlfZmwgIT0gTlVMTCkgeworCQllcnJvciA9IGxlYXNlLT5mbF9sbW9wcy0+bG1fY2hhbmdlKG15X2ZsLCBhcmcsICZkaXNwb3NlKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXQ7CiAJCWdvdG8gb3V0X3NldHVwOwpAQCAtMTY1NCw3ICsxNjkxLDcgQEAKIAlpZiAoIWxlYXNlc19lbmFibGUpCiAJCWdvdG8gb3V0OwogCi0JbG9ja3NfaW5zZXJ0X2xvY2soYmVmb3JlLCBsZWFzZSk7CisJbG9ja3NfaW5zZXJ0X2xvY2tfY3R4KGxlYXNlLCAmY3R4LT5mbGNfbGVhc2VfY250LCAmY3R4LT5mbGNfbGVhc2UpOwogCS8qCiAJICogVGhlIGNoZWNrIGluIGJyZWFrX2xlYXNlKCkgaXMgbG9ja2xlc3MuIEl0J3MgcG9zc2libGUgZm9yIGFub3RoZXIKIAkgKiBvcGVuIHRvIHJhY2UgaW4gYWZ0ZXIgd2UgZGlkIHRoZSBlYXJsaWVyIGNoZWNrIGZvciBhIGNvbmZsaWN0aW5nCkBAIC0xNjY2LDQ1ICsxNzAzLDQ5IEBACiAJICovCiAJc21wX21iKCk7CiAJZXJyb3IgPSBjaGVja19jb25mbGljdGluZ19vcGVuKGRlbnRyeSwgYXJnKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X3VubGluazsKKwlpZiAoZXJyb3IpIHsKKwkJbG9ja3NfdW5saW5rX2xvY2tfY3R4KGxlYXNlLCAmY3R4LT5mbGNfbGVhc2VfY250KTsKKwkJZ290byBvdXQ7CisJfQogCiBvdXRfc2V0dXA6CiAJaWYgKGxlYXNlLT5mbF9sbW9wcy0+bG1fc2V0dXApCiAJCWxlYXNlLT5mbF9sbW9wcy0+bG1fc2V0dXAobGVhc2UsIHByaXYpOwogb3V0OgotCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlzcGluX3VubG9jaygmY3R4LT5mbGNfbG9jayk7CiAJbG9ja3NfZGlzcG9zZV9saXN0KCZkaXNwb3NlKTsKIAlpZiAoaXNfZGVsZWcpCiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWlmICghZXJyb3IgJiYgIW15X2JlZm9yZSkKKwlpZiAoIWVycm9yICYmICFteV9mbCkKIAkJKmZscCA9IE5VTEw7CiAJcmV0dXJuIGVycm9yOwotb3V0X3VubGluazoKLQlsb2Nrc191bmxpbmtfbG9jayhiZWZvcmUpOwotCWdvdG8gb3V0OwogfQogCiBzdGF0aWMgaW50IGdlbmVyaWNfZGVsZXRlX2xlYXNlKHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludCBlcnJvciA9IC1FQUdBSU47Ci0Jc3RydWN0IGZpbGVfbG9jayAqZmwsICoqYmVmb3JlOworCXN0cnVjdCBmaWxlX2xvY2sgKmZsLCAqdmljdGltID0gTlVMTDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxwLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGZpbGVfbG9ja19jb250ZXh0ICpjdHggPSBpbm9kZS0+aV9mbGN0eDsKIAlMSVNUX0hFQUQoZGlzcG9zZSk7CiAKLQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCXRpbWVfb3V0X2xlYXNlcyhpbm9kZSwgJmRpc3Bvc2UpOwotCWZvciAoYmVmb3JlID0gJmlub2RlLT5pX2Zsb2NrOwotCQkJKChmbCA9ICpiZWZvcmUpICE9IE5VTEwpICYmIElTX0xFQVNFKGZsKTsKLQkJCWJlZm9yZSA9ICZmbC0+ZmxfbmV4dCkgewotCQlpZiAoZmwtPmZsX2ZpbGUgPT0gZmlscCkKKwlpZiAoIWN0eCkgeworCQl0cmFjZV9nZW5lcmljX2RlbGV0ZV9sZWFzZShpbm9kZSwgTlVMTCk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlzcGluX2xvY2soJmN0eC0+ZmxjX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZmwsICZjdHgtPmZsY19sZWFzZSwgZmxfbGlzdCkgeworCQlpZiAoZmwtPmZsX2ZpbGUgPT0gZmlscCkgeworCQkJdmljdGltID0gZmw7CiAJCQlicmVhazsKKwkJfQogCX0KIAl0cmFjZV9nZW5lcmljX2RlbGV0ZV9sZWFzZShpbm9kZSwgZmwpOwotCWlmIChmbCAmJiBJU19MRUFTRShmbCkpCi0JCWVycm9yID0gZmwtPmZsX2xtb3BzLT5sbV9jaGFuZ2UoYmVmb3JlLCBGX1VOTENLLCAmZGlzcG9zZSk7Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCWlmICh2aWN0aW0pCisJCWVycm9yID0gZmwtPmZsX2xtb3BzLT5sbV9jaGFuZ2UodmljdGltLCBGX1VOTENLLCAmZGlzcG9zZSk7CisJc3Bpbl91bmxvY2soJmN0eC0+ZmxjX2xvY2spOwogCWxvY2tzX2Rpc3Bvc2VfbGlzdCgmZGlzcG9zZSk7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMjE3MSw3ICsyMjEyLDcgQEAKIAkgKi8KIAkvKgogCSAqIHdlIG5lZWQgdGhhdCBzcGluX2xvY2sgaGVyZSAtIGl0IHByZXZlbnRzIHJlb3JkZXJpbmcgYmV0d2VlbgotCSAqIHVwZGF0ZSBvZiBpbm9kZS0+aV9mbG9jayBhbmQgY2hlY2sgZm9yIGl0IGRvbmUgaW4gY2xvc2UoKS4KKwkgKiB1cGRhdGUgb2YgaV9mbGN0eC0+ZmxjX3Bvc2l4IGFuZCBjaGVjayBmb3IgaXQgZG9uZSBpbiBjbG9zZSgpLgogCSAqIHJjdV9yZWFkX2xvY2soKSB3b3VsZG4ndCBkby4KIAkgKi8KIAlzcGluX2xvY2soJmN1cnJlbnQtPmZpbGVzLT5maWxlX2xvY2spOwpAQCAtMjMzMSwxMyArMjM3MiwxNCBAQAogdm9pZCBsb2Nrc19yZW1vdmVfcG9zaXgoc3RydWN0IGZpbGUgKmZpbHAsIGZsX293bmVyX3Qgb3duZXIpCiB7CiAJc3RydWN0IGZpbGVfbG9jayBsb2NrOworCXN0cnVjdCBmaWxlX2xvY2tfY29udGV4dCAqY3R4ID0gZmlsZV9pbm9kZShmaWxwKS0+aV9mbGN0eDsKIAogCS8qCiAJICogSWYgdGhlcmUgYXJlIG5vIGxvY2tzIGhlbGQgb24gdGhpcyBmaWxlLCB3ZSBkb24ndCBuZWVkIHRvIGNhbGwKIAkgKiBwb3NpeF9sb2NrX2ZpbGUoKS4gIEFub3RoZXIgcHJvY2VzcyBjb3VsZCBiZSBzZXR0aW5nIGEgbG9jayBvbiB0aGlzCiAJICogZmlsZSBhdCB0aGUgc2FtZSB0aW1lLCBidXQgd2Ugd291bGRuJ3QgcmVtb3ZlIHRoYXQgbG9jayBhbnl3YXkuCiAJICovCi0JaWYgKCFmaWxlX2lub2RlKGZpbHApLT5pX2Zsb2NrKQorCWlmICghY3R4IHx8IGxpc3RfZW1wdHkoJmN0eC0+ZmxjX3Bvc2l4KSkKIAkJcmV0dXJuOwogCiAJbG9jay5mbF90eXBlID0gRl9VTkxDSzsKQEAgLTIzNTgsNjcgKzI0MDAsNjcgQEAKIAogRVhQT1JUX1NZTUJPTChsb2Nrc19yZW1vdmVfcG9zaXgpOwogCisvKiBUaGUgaV9mbGN0eCBtdXN0IGJlIHZhbGlkIHdoZW4gY2FsbGluZyBpbnRvIGhlcmUgKi8KK3N0YXRpYyB2b2lkCitsb2Nrc19yZW1vdmVfZmxvY2soc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGZpbGVfbG9jayBmbCA9IHsKKwkJLmZsX293bmVyID0gZmlscCwKKwkJLmZsX3BpZCA9IGN1cnJlbnQtPnRnaWQsCisJCS5mbF9maWxlID0gZmlscCwKKwkJLmZsX2ZsYWdzID0gRkxfRkxPQ0ssCisJCS5mbF90eXBlID0gRl9VTkxDSywKKwkJLmZsX2VuZCA9IE9GRlNFVF9NQVgsCisJfTsKKwlzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmZsY3R4ID0gZmlsZV9pbm9kZShmaWxwKS0+aV9mbGN0eDsKKworCWlmIChsaXN0X2VtcHR5KCZmbGN0eC0+ZmxjX2Zsb2NrKSkKKwkJcmV0dXJuOworCisJaWYgKGZpbHAtPmZfb3AtPmZsb2NrKQorCQlmaWxwLT5mX29wLT5mbG9jayhmaWxwLCBGX1NFVExLVywgJmZsKTsKKwllbHNlCisJCWZsb2NrX2xvY2tfZmlsZShmaWxwLCAmZmwpOworCisJaWYgKGZsLmZsX29wcyAmJiBmbC5mbF9vcHMtPmZsX3JlbGVhc2VfcHJpdmF0ZSkKKwkJZmwuZmxfb3BzLT5mbF9yZWxlYXNlX3ByaXZhdGUoJmZsKTsKK30KKworLyogVGhlIGlfZmxjdHggbXVzdCBiZSB2YWxpZCB3aGVuIGNhbGxpbmcgaW50byBoZXJlICovCitzdGF0aWMgdm9pZAorbG9ja3NfcmVtb3ZlX2xlYXNlKHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbHApOworCXN0cnVjdCBmaWxlX2xvY2tfY29udGV4dCAqY3R4ID0gaW5vZGUtPmlfZmxjdHg7CisJc3RydWN0IGZpbGVfbG9jayAqZmwsICp0bXA7CisJTElTVF9IRUFEKGRpc3Bvc2UpOworCisJaWYgKGxpc3RfZW1wdHkoJmN0eC0+ZmxjX2xlYXNlKSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrKCZjdHgtPmZsY19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmwsIHRtcCwgJmN0eC0+ZmxjX2xlYXNlLCBmbF9saXN0KQorCQlsZWFzZV9tb2RpZnkoZmwsIEZfVU5MQ0ssICZkaXNwb3NlKTsKKwlzcGluX3VubG9jaygmY3R4LT5mbGNfbG9jayk7CisJbG9ja3NfZGlzcG9zZV9saXN0KCZkaXNwb3NlKTsKK30KKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIHRoZSBsYXN0IGNsb3NlIG9mIGFuIG9wZW4gZmlsZS4KICAqLwogdm9pZCBsb2Nrc19yZW1vdmVfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbGVfaW5vZGUoZmlscCk7Ci0Jc3RydWN0IGZpbGVfbG9jayAqZmw7Ci0Jc3RydWN0IGZpbGVfbG9jayAqKmJlZm9yZTsKLQlMSVNUX0hFQUQoZGlzcG9zZSk7Ci0KLQlpZiAoIWlub2RlLT5pX2Zsb2NrKQorCWlmICghZmlsZV9pbm9kZShmaWxwKS0+aV9mbGN0eCkKIAkJcmV0dXJuOwogCisJLyogcmVtb3ZlIGFueSBPRkQgbG9ja3MgKi8KIAlsb2Nrc19yZW1vdmVfcG9zaXgoZmlscCwgZmlscCk7CiAKLQlpZiAoZmlscC0+Zl9vcC0+ZmxvY2spIHsKLQkJc3RydWN0IGZpbGVfbG9jayBmbCA9IHsKLQkJCS5mbF9vd25lciA9IGZpbHAsCi0JCQkuZmxfcGlkID0gY3VycmVudC0+dGdpZCwKLQkJCS5mbF9maWxlID0gZmlscCwKLQkJCS5mbF9mbGFncyA9IEZMX0ZMT0NLLAotCQkJLmZsX3R5cGUgPSBGX1VOTENLLAotCQkJLmZsX2VuZCA9IE9GRlNFVF9NQVgsCi0JCX07Ci0JCWZpbHAtPmZfb3AtPmZsb2NrKGZpbHAsIEZfU0VUTEtXLCAmZmwpOwotCQlpZiAoZmwuZmxfb3BzICYmIGZsLmZsX29wcy0+ZmxfcmVsZWFzZV9wcml2YXRlKQotCQkJZmwuZmxfb3BzLT5mbF9yZWxlYXNlX3ByaXZhdGUoJmZsKTsKLQl9CisJLyogcmVtb3ZlIGZsb2NrIGxvY2tzICovCisJbG9ja3NfcmVtb3ZlX2Zsb2NrKGZpbHApOwogCi0Jc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQliZWZvcmUgPSAmaW5vZGUtPmlfZmxvY2s7Ci0KLQl3aGlsZSAoKGZsID0gKmJlZm9yZSkgIT0gTlVMTCkgewotCQlpZiAoZmwtPmZsX2ZpbGUgPT0gZmlscCkgewotCQkJaWYgKElTX0xFQVNFKGZsKSkgewotCQkJCWxlYXNlX21vZGlmeShiZWZvcmUsIEZfVU5MQ0ssICZkaXNwb3NlKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIFRoZXJlJ3MgYSBsZWZ0b3ZlciBsb2NrIG9uIHRoZSBsaXN0IG9mIGEgdHlwZSB0aGF0Ci0JCQkgKiB3ZSBkaWRuJ3QgZXhwZWN0IHRvIHNlZS4gTW9zdCBsaWtlbHkgYSBjbGFzc2ljCi0JCQkgKiBQT1NJWCBsb2NrIHRoYXQgZW5kZWQgdXAgbm90IGdldHRpbmcgcmVsZWFzZWQKLQkJCSAqIHByb3Blcmx5LCBvciB0aGF0IHJhY2VkIG9udG8gdGhlIGxpc3Qgc29tZWhvdy4gTG9nCi0JCQkgKiBzb21lIGluZm8gYWJvdXQgaXQgYW5kIHRoZW4ganVzdCByZW1vdmUgaXQgZnJvbQotCQkJICogdGhlIGxpc3QuCi0JCQkgKi8KLQkJCVdBUk4oIUlTX0ZMT0NLKGZsKSwKLQkJCQkibGVmdG92ZXIgbG9jazogZGV2PSV1OiV1IGlubz0lbHUgdHlwZT0laGhkIGZsYWdzPTB4JXggc3RhcnQ9JWxsZCBlbmQ9JWxsZFxuIiwKLQkJCQlNQUpPUihpbm9kZS0+aV9zYi0+c19kZXYpLAotCQkJCU1JTk9SKGlub2RlLT5pX3NiLT5zX2RldiksIGlub2RlLT5pX2lubywKLQkJCQlmbC0+ZmxfdHlwZSwgZmwtPmZsX2ZsYWdzLAotCQkJCWZsLT5mbF9zdGFydCwgZmwtPmZsX2VuZCk7Ci0KLQkJCWxvY2tzX2RlbGV0ZV9sb2NrKGJlZm9yZSwgJmRpc3Bvc2UpOwotCQkJY29udGludWU7Ci0gCQl9Ci0JCWJlZm9yZSA9ICZmbC0+ZmxfbmV4dDsKLQl9Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCWxvY2tzX2Rpc3Bvc2VfbGlzdCgmZGlzcG9zZSk7CisJLyogcmVtb3ZlIGFueSBsZWFzZXMgKi8KKwlsb2Nrc19yZW1vdmVfbGVhc2UoZmlscCk7CiB9CiAKIC8qKgpAQCAtMjYyMSw2ICsyNjYzLDkgQEAKIHsKIAlpbnQgaTsKIAorCWZsY3R4X2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImZpbGVfbG9ja19jdHgiLAorCQkJc2l6ZW9mKHN0cnVjdCBmaWxlX2xvY2tfY29udGV4dCksIDAsIFNMQUJfUEFOSUMsIE5VTEwpOworCiAJZmlsZWxvY2tfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZmlsZV9sb2NrX2NhY2hlIiwKIAkJCXNpemVvZihzdHJ1Y3QgZmlsZV9sb2NrKSwgMCwgU0xBQl9QQU5JQywgTlVMTCk7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9LY29uZmlnIGIvZnMvbmZzL0tjb25maWcKaW5kZXggM2RlY2UwMy4uYzdhYmMxMCAxMDA2NDQKLS0tIGEvZnMvbmZzL0tjb25maWcKKysrIGIvZnMvbmZzL0tjb25maWcKQEAgLTEyOCw2ICsxMjgsMTEgQEAKIAlkZXBlbmRzIG9uIE5GU19WNF8xICYmIFNDU0lfT1NEX1VMRAogCWRlZmF1bHQgTkZTX1Y0CiAKK2NvbmZpZyBQTkZTX0ZMRVhGSUxFX0xBWU9VVAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBORlNfVjRfMSAmJiBORlNfVjMKKwlkZWZhdWx0IG0KKwogY29uZmlnIE5GU19WNF8xX0lNUExFTUVOVEFUSU9OX0lEX0RPTUFJTgogCXN0cmluZyAiTkZTdjQuMSBJbXBsZW1lbnRhdGlvbiBJRCBEb21haW4iCiAJZGVwZW5kcyBvbiBORlNfVjRfMQpkaWZmIC0tZ2l0IGEvZnMvbmZzL01ha2VmaWxlIGIvZnMvbmZzL01ha2VmaWxlCmluZGV4IDA0Y2I4MzAuLjFlOTg3YWMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9NYWtlZmlsZQorKysgYi9mcy9uZnMvTWFrZWZpbGUKQEAgLTI3LDkgKzI3LDEwIEBACiAJICBkbnNfcmVzb2x2ZS5vIG5mczR0cmFjZS5vCiBuZnN2NC0kKENPTkZJR19ORlNfVVNFX0xFR0FDWV9ETlMpICs9IGNhY2hlX2xpYi5vCiBuZnN2NC0kKENPTkZJR19TWVNDVEwpCSs9IG5mczRzeXNjdGwubwotbmZzdjQtJChDT05GSUdfTkZTX1Y0XzEpCSs9IHBuZnMubyBwbmZzX2Rldi5vCituZnN2NC0kKENPTkZJR19ORlNfVjRfMSkJKz0gcG5mcy5vIHBuZnNfZGV2Lm8gcG5mc19uZnMubwogbmZzdjQtJChDT05GSUdfTkZTX1Y0XzIpCSs9IG5mczQycHJvYy5vCiAKIG9iai0kKENPTkZJR19QTkZTX0ZJTEVfTEFZT1VUKSArPSBmaWxlbGF5b3V0Lwogb2JqLSQoQ09ORklHX1BORlNfT0JKTEFZT1VUKSArPSBvYmpsYXlvdXQvCiBvYmotJChDT05GSUdfUE5GU19CTE9DSykgKz0gYmxvY2tsYXlvdXQvCitvYmotJChDT05GSUdfUE5GU19GTEVYRklMRV9MQVlPVVQpICs9IGZsZXhmaWxlbGF5b3V0LwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Jsb2NrbGF5b3V0L2Jsb2NrbGF5b3V0LmMgYi9mcy9uZnMvYmxvY2tsYXlvdXQvYmxvY2tsYXlvdXQuYwppbmRleCA3N2ZlYzZhLi4xY2FjM2MxIDEwMDY0NAotLS0gYS9mcy9uZnMvYmxvY2tsYXlvdXQvYmxvY2tsYXlvdXQuYworKysgYi9mcy9uZnMvYmxvY2tsYXlvdXQvYmxvY2tsYXlvdXQuYwpAQCAtODYwLDEyICs4NjAsMTQgQEAKIAkucGdfaW5pdCA9IGJsX3BnX2luaXRfcmVhZCwKIAkucGdfdGVzdCA9IGJsX3BnX3Rlc3RfcmVhZCwKIAkucGdfZG9pbyA9IHBuZnNfZ2VuZXJpY19wZ19yZWFkcGFnZXMsCisJLnBnX2NsZWFudXAgPSBwbmZzX2dlbmVyaWNfcGdfY2xlYW51cCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZzX3BhZ2Vpb19vcHMgYmxfcGdfd3JpdGVfb3BzID0gewogCS5wZ19pbml0ID0gYmxfcGdfaW5pdF93cml0ZSwKIAkucGdfdGVzdCA9IGJsX3BnX3Rlc3Rfd3JpdGUsCiAJLnBnX2RvaW8gPSBwbmZzX2dlbmVyaWNfcGdfd3JpdGVwYWdlcywKKwkucGdfY2xlYW51cCA9IHBuZnNfZ2VuZXJpY19wZ19jbGVhbnVwLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbmZzX2xheW91dGRyaXZlcl90eXBlIGJsb2NrbGF5b3V0X3R5cGUgPSB7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2FsbGJhY2suYyBiL2ZzL25mcy9jYWxsYmFjay5jCmluZGV4IGI4ZmIzYTQuLjM1MWJlOTIwIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suYworKysgYi9mcy9uZnMvY2FsbGJhY2suYwpAQCAtMTI4LDIyICsxMjgsMjQgQEAKIAkJaWYgKHRyeV90b19mcmVlemUoKSkKIAkJCWNvbnRpbnVlOwogCi0JCXByZXBhcmVfdG9fd2FpdCgmc2Vydi0+c3ZfY2Jfd2FpdHEsICZ3cSwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJcHJlcGFyZV90b193YWl0KCZzZXJ2LT5zdl9jYl93YWl0cSwgJndxLCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJCXNwaW5fbG9ja19iaCgmc2Vydi0+c3ZfY2JfbG9jayk7CiAJCWlmICghbGlzdF9lbXB0eSgmc2Vydi0+c3ZfY2JfbGlzdCkpIHsKIAkJCXJlcSA9IGxpc3RfZmlyc3RfZW50cnkoJnNlcnYtPnN2X2NiX2xpc3QsCiAJCQkJCXN0cnVjdCBycGNfcnFzdCwgcnFfYmNfbGlzdCk7CiAJCQlsaXN0X2RlbCgmcmVxLT5ycV9iY19saXN0KTsKIAkJCXNwaW5fdW5sb2NrX2JoKCZzZXJ2LT5zdl9jYl9sb2NrKTsKKwkJCWZpbmlzaF93YWl0KCZzZXJ2LT5zdl9jYl93YWl0cSwgJndxKTsKIAkJCWRwcmludGsoIkludm9raW5nIGJjX3N2Y19wcm9jZXNzKClcbiIpOwogCQkJZXJyb3IgPSBiY19zdmNfcHJvY2VzcyhzZXJ2LCByZXEsIHJxc3RwKTsKIAkJCWRwcmludGsoImJjX3N2Y19wcm9jZXNzKCkgcmV0dXJuZWQgdy8gZXJyb3IgY29kZT0gJWRcbiIsCiAJCQkJZXJyb3IpOwogCQl9IGVsc2UgewogCQkJc3Bpbl91bmxvY2tfYmgoJnNlcnYtPnN2X2NiX2xvY2spOwotCQkJc2NoZWR1bGUoKTsKKwkJCS8qIHNjaGVkdWxlX3RpbWVvdXQgdG8gZ2FtZSB0aGUgaHVuZyB0YXNrIHdhdGNoZG9nICovCisJCQlzY2hlZHVsZV90aW1lb3V0KDYwICogSFopOworCQkJZmluaXNoX3dhaXQoJnNlcnYtPnN2X2NiX3dhaXRxLCAmd3EpOwogCQl9Ci0JCWZpbmlzaF93YWl0KCZzZXJ2LT5zdl9jYl93YWl0cSwgJndxKTsKIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvZGVsZWdhdGlvbi5jIGIvZnMvbmZzL2RlbGVnYXRpb24uYwppbmRleCA3ZjNmNjA2Li5kYTU0MzMyIDEwMDY0NAotLS0gYS9mcy9uZnMvZGVsZWdhdGlvbi5jCisrKyBiL2ZzL25mcy9kZWxlZ2F0aW9uLmMKQEAgLTg1LDI1ICs4NSwzMCBAQAogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBzdGF0ZS0+aW5vZGU7CiAJc3RydWN0IGZpbGVfbG9jayAqZmw7CisJc3RydWN0IGZpbGVfbG9ja19jb250ZXh0ICpmbGN0eCA9IGlub2RlLT5pX2ZsY3R4OworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAJaW50IHN0YXR1cyA9IDA7CiAKLQlpZiAoaW5vZGUtPmlfZmxvY2sgPT0gTlVMTCkKKwlpZiAoZmxjdHggPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKLQkvKiBQcm90ZWN0IGlub2RlLT5pX2Zsb2NrIHVzaW5nIHRoZSBpX2xvY2sgKi8KLQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCWZvciAoZmwgPSBpbm9kZS0+aV9mbG9jazsgZmwgIT0gTlVMTDsgZmwgPSBmbC0+ZmxfbmV4dCkgewotCQlpZiAoIShmbC0+ZmxfZmxhZ3MgJiAoRkxfUE9TSVh8RkxfRkxPQ0spKSkKLQkJCWNvbnRpbnVlOworCWxpc3QgPSAmZmxjdHgtPmZsY19wb3NpeDsKKwlzcGluX2xvY2soJmZsY3R4LT5mbGNfbG9jayk7CityZXN0YXJ0OgorCWxpc3RfZm9yX2VhY2hfZW50cnkoZmwsIGxpc3QsIGZsX2xpc3QpIHsKIAkJaWYgKG5mc19maWxlX29wZW5fY29udGV4dChmbC0+ZmxfZmlsZSkgIT0gY3R4KQogCQkJY29udGludWU7Ci0JCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmZsY3R4LT5mbGNfbG9jayk7CiAJCXN0YXR1cyA9IG5mczRfbG9ja19kZWxlZ2F0aW9uX3JlY2FsbChmbCwgc3RhdGUsIHN0YXRlaWQpOwogCQlpZiAoc3RhdHVzIDwgMCkKIAkJCWdvdG8gb3V0OwotCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCQlzcGluX2xvY2soJmZsY3R4LT5mbGNfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlpZiAobGlzdCA9PSAmZmxjdHgtPmZsY19wb3NpeCkgeworCQlsaXN0ID0gJmZsY3R4LT5mbGNfZmxvY2s7CisJCWdvdG8gcmVzdGFydDsKKwl9CisJc3Bpbl91bmxvY2soJmZsY3R4LT5mbGNfbG9jayk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTMwMSw2ICszMDYsMTcgQEAKIAlyZXR1cm4gbmZzX2RldGFjaF9kZWxlZ2F0aW9uKG5mc2ksIGRlbGVnYXRpb24sIHNlcnZlcik7CiB9CiAKK3N0YXRpYyB2b2lkCituZnNfdXBkYXRlX2lucGxhY2VfZGVsZWdhdGlvbihzdHJ1Y3QgbmZzX2RlbGVnYXRpb24gKmRlbGVnYXRpb24sCisJCWNvbnN0IHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqdXBkYXRlKQoreworCWlmIChuZnM0X3N0YXRlaWRfaXNfbmV3ZXIoJnVwZGF0ZS0+c3RhdGVpZCwgJmRlbGVnYXRpb24tPnN0YXRlaWQpKSB7CisJCWRlbGVnYXRpb24tPnN0YXRlaWQuc2VxaWQgPSB1cGRhdGUtPnN0YXRlaWQuc2VxaWQ7CisJCXNtcF93bWIoKTsKKwkJZGVsZWdhdGlvbi0+dHlwZSA9IHVwZGF0ZS0+dHlwZTsKKwl9Cit9CisKIC8qKgogICogbmZzX2lub2RlX3NldF9kZWxlZ2F0aW9uIC0gc2V0IHVwIGEgZGVsZWdhdGlvbiBvbiBhbiBpbm9kZQogICogQGlub2RlOiBpbm9kZSB0byB3aGljaCBkZWxlZ2F0aW9uIGFwcGxpZXMKQEAgLTMzNCw5ICszNTAsMTIgQEAKIAlvbGRfZGVsZWdhdGlvbiA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobmZzaS0+ZGVsZWdhdGlvbiwKIAkJCQkJbG9ja2RlcF9pc19oZWxkKCZjbHAtPmNsX2xvY2spKTsKIAlpZiAob2xkX2RlbGVnYXRpb24gIT0gTlVMTCkgewotCQlpZiAobmZzNF9zdGF0ZWlkX21hdGNoKCZkZWxlZ2F0aW9uLT5zdGF0ZWlkLAotCQkJCQkmb2xkX2RlbGVnYXRpb24tPnN0YXRlaWQpICYmCi0JCQkJZGVsZWdhdGlvbi0+dHlwZSA9PSBvbGRfZGVsZWdhdGlvbi0+dHlwZSkgeworCQkvKiBJcyB0aGlzIGFuIHVwZGF0ZSBvZiB0aGUgZXhpc3RpbmcgZGVsZWdhdGlvbj8gKi8KKwkJaWYgKG5mczRfc3RhdGVpZF9tYXRjaF9vdGhlcigmb2xkX2RlbGVnYXRpb24tPnN0YXRlaWQsCisJCQkJCSZkZWxlZ2F0aW9uLT5zdGF0ZWlkKSkgeworCQkJbmZzX3VwZGF0ZV9pbnBsYWNlX2RlbGVnYXRpb24ob2xkX2RlbGVnYXRpb24sCisJCQkJCWRlbGVnYXRpb24pOworCQkJbmZzaS0+ZGVsZWdhdGlvbl9zdGF0ZSA9IG9sZF9kZWxlZ2F0aW9uLT50eXBlOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJLyoKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXJlY3QuYyBiL2ZzL25mcy9kaXJlY3QuYwppbmRleCAxMGJmMDcyLi43MDc3NTIxIDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyZWN0LmMKKysrIGIvZnMvbmZzL2RpcmVjdC5jCkBAIC02Niw2ICs2NiwxMCBAQAogLyoKICAqIFRoaXMgcmVwcmVzZW50cyBhIHNldCBvZiBhc3luY2hyb25vdXMgcmVxdWVzdHMgdGhhdCB3ZSdyZSB3YWl0aW5nIG9uCiAgKi8KK3N0cnVjdCBuZnNfZGlyZWN0X21pcnJvciB7CisJc3NpemVfdCBjb3VudDsKK307CisKIHN0cnVjdCBuZnNfZGlyZWN0X3JlcSB7CiAJc3RydWN0IGtyZWYJCWtyZWY7CQkvKiByZWxlYXNlIG1hbmFnZXIgKi8KIApAQCAtNzgsOCArODIsMTMgQEAKIAkvKiBjb21wbGV0aW9uIHN0YXRlICovCiAJYXRvbWljX3QJCWlvX2NvdW50OwkvKiBpL29zIHdlJ3JlIHdhaXRpbmcgZm9yICovCiAJc3BpbmxvY2tfdAkJbG9jazsJCS8qIHByb3RlY3QgY29tcGxldGlvbiBzdGF0ZSAqLworCisJc3RydWN0IG5mc19kaXJlY3RfbWlycm9yIG1pcnJvcnNbTkZTX1BBR0VJT19ERVNDUklQVE9SX01JUlJPUl9NQVhdOworCWludAkJCW1pcnJvcl9jb3VudDsKKwogCXNzaXplX3QJCQljb3VudCwJCS8qIGJ5dGVzIGFjdHVhbGx5IHByb2Nlc3NlZCAqLwogCQkJCWJ5dGVzX2xlZnQsCS8qIGJ5dGVzIGxlZnQgdG8gYmUgc2VudCAqLworCQkJCWlvX3N0YXJ0LAkvKiBzdGFydCBvZiBJTyAqLwogCQkJCWVycm9yOwkJLyogYW55IHJlcG9ydGVkIGVycm9yICovCiAJc3RydWN0IGNvbXBsZXRpb24JY29tcGxldGlvbjsJLyogd2FpdCBmb3IgaS9vIGNvbXBsZXRpb24gKi8KIApAQCAtMTA4LDI2ICsxMTcsNTYgQEAKIAlyZXR1cm4gYXRvbWljX2RlY19hbmRfdGVzdCgmZHJlcS0+aW9fY291bnQpOwogfQogCit2b2lkIG5mc19kaXJlY3Rfc2V0X3Jlc2NoZWRfd3JpdGVzKHN0cnVjdCBuZnNfZGlyZWN0X3JlcSAqZHJlcSkKK3sKKwlkcmVxLT5mbGFncyA9IE5GU19PRElSRUNUX1JFU0NIRURfV1JJVEVTOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZzX2RpcmVjdF9zZXRfcmVzY2hlZF93cml0ZXMpOworCitzdGF0aWMgdm9pZAorbmZzX2RpcmVjdF9nb29kX2J5dGVzKHN0cnVjdCBuZnNfZGlyZWN0X3JlcSAqZHJlcSwgc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqaGRyKQoreworCWludCBpOworCXNzaXplX3QgY291bnQ7CisKKwlXQVJOX09OX09OQ0UoaGRyLT5wZ2lvX21pcnJvcl9pZHggPj0gZHJlcS0+bWlycm9yX2NvdW50KTsKKworCWNvdW50ID0gZHJlcS0+bWlycm9yc1toZHItPnBnaW9fbWlycm9yX2lkeF0uY291bnQ7CisJaWYgKGNvdW50ICsgZHJlcS0+aW9fc3RhcnQgPCBoZHItPmlvX3N0YXJ0ICsgaGRyLT5nb29kX2J5dGVzKSB7CisJCWNvdW50ID0gaGRyLT5pb19zdGFydCArIGhkci0+Z29vZF9ieXRlcyAtIGRyZXEtPmlvX3N0YXJ0OworCQlkcmVxLT5taXJyb3JzW2hkci0+cGdpb19taXJyb3JfaWR4XS5jb3VudCA9IGNvdW50OworCX0KKworCS8qIHVwZGF0ZSB0aGUgZHJlcS0+Y291bnQgYnkgZmluZGluZyB0aGUgbWluaW11bSBhZ3JlZWQgY291bnQgZnJvbSBhbGwKKwkgKiBtaXJyb3JzICovCisJY291bnQgPSBkcmVxLT5taXJyb3JzWzBdLmNvdW50OworCisJZm9yIChpID0gMTsgaSA8IGRyZXEtPm1pcnJvcl9jb3VudDsgaSsrKQorCQljb3VudCA9IG1pbihjb3VudCwgZHJlcS0+bWlycm9yc1tpXS5jb3VudCk7CisKKwlkcmVxLT5jb3VudCA9IGNvdW50OworfQorCiAvKgogICogbmZzX2RpcmVjdF9zZWxlY3RfdmVyZiAtIHNlbGVjdCB0aGUgcmlnaHQgdmVyaWZpZXIKICAqIEBkcmVxIC0gZGlyZWN0IHJlcXVlc3QgcG9zc2libHkgc3Bhbm5pbmcgbXVsdGlwbGUgc2VydmVycwogICogQGRzX2NscCAtIG5mc19jbGllbnQgb2YgZGF0YSBzZXJ2ZXIgb3IgTlVMTCBpZiBNRFMgLyBub24tcG5mcwotICogQGRzX2lkeCAtIGluZGV4IG9mIGRhdGEgc2VydmVyIGluIGRhdGEgc2VydmVyIGxpc3QsIG9ubHkgdmFsaWQgaWYgZHNfY2xwIHNldAorICogQGNvbW1pdF9pZHggLSBjb21taXQgYnVja2V0IGluZGV4IGZvciB0aGUgRFMKICAqCiAgKiByZXR1cm5zIHRoZSBjb3JyZWN0IHZlcmlmaWVyIHRvIHVzZSBnaXZlbiB0aGUgcm9sZSBvZiB0aGUgc2VydmVyCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbmZzX3dyaXRldmVyZiAqCiBuZnNfZGlyZWN0X3NlbGVjdF92ZXJmKHN0cnVjdCBuZnNfZGlyZWN0X3JlcSAqZHJlcSwKIAkJICAgICAgIHN0cnVjdCBuZnNfY2xpZW50ICpkc19jbHAsCi0JCSAgICAgICBpbnQgZHNfaWR4KQorCQkgICAgICAgaW50IGNvbW1pdF9pZHgpCiB7CiAJc3RydWN0IG5mc193cml0ZXZlcmYgKnZlcmZwID0gJmRyZXEtPnZlcmY7CiAKICNpZmRlZiBDT05GSUdfTkZTX1Y0XzEKIAlpZiAoZHNfY2xwKSB7CiAJCS8qIHBORlMgaXMgaW4gdXNlLCB1c2UgdGhlIERTIHZlcmYgKi8KLQkJaWYgKGRzX2lkeCA+PSAwICYmIGRzX2lkeCA8IGRyZXEtPmRzX2NpbmZvLm5idWNrZXRzKQotCQkJdmVyZnAgPSAmZHJlcS0+ZHNfY2luZm8uYnVja2V0c1tkc19pZHhdLmRpcmVjdF92ZXJmOworCQlpZiAoY29tbWl0X2lkeCA+PSAwICYmIGNvbW1pdF9pZHggPCBkcmVxLT5kc19jaW5mby5uYnVja2V0cykKKwkJCXZlcmZwID0gJmRyZXEtPmRzX2NpbmZvLmJ1Y2tldHNbY29tbWl0X2lkeF0uZGlyZWN0X3ZlcmY7CiAJCWVsc2UKIAkJCVdBUk5fT05fT05DRSgxKTsKIAl9CkBAIC0xNDgsOCArMTg3LDcgQEAKIHsKIAlzdHJ1Y3QgbmZzX3dyaXRldmVyZiAqdmVyZnA7CiAKLQl2ZXJmcCA9IG5mc19kaXJlY3Rfc2VsZWN0X3ZlcmYoZHJlcSwgaGRyLT5kc19jbHAsCi0JCQkJICAgICAgaGRyLT5kc19pZHgpOworCXZlcmZwID0gbmZzX2RpcmVjdF9zZWxlY3RfdmVyZihkcmVxLCBoZHItPmRzX2NscCwgaGRyLT5kc19jb21taXRfaWR4KTsKIAlXQVJOX09OX09OQ0UodmVyZnAtPmNvbW1pdHRlZCA+PSAwKTsKIAltZW1jcHkodmVyZnAsICZoZHItPnZlcmYsIHNpemVvZihzdHJ1Y3QgbmZzX3dyaXRldmVyZikpOwogCVdBUk5fT05fT05DRSh2ZXJmcC0+Y29tbWl0dGVkIDwgMCk7CkBAIC0xNjksOCArMjA3LDcgQEAKIHsKIAlzdHJ1Y3QgbmZzX3dyaXRldmVyZiAqdmVyZnA7CiAKLQl2ZXJmcCA9IG5mc19kaXJlY3Rfc2VsZWN0X3ZlcmYoZHJlcSwgaGRyLT5kc19jbHAsCi0JCQkJCSBoZHItPmRzX2lkeCk7CisJdmVyZnAgPSBuZnNfZGlyZWN0X3NlbGVjdF92ZXJmKGRyZXEsIGhkci0+ZHNfY2xwLCBoZHItPmRzX2NvbW1pdF9pZHgpOwogCWlmICh2ZXJmcC0+Y29tbWl0dGVkIDwgMCkgewogCQluZnNfZGlyZWN0X3NldF9oZHJfdmVyZihkcmVxLCBoZHIpOwogCQlyZXR1cm4gMDsKQEAgLTE5Myw3ICsyMzAsMTEgQEAKIAogCXZlcmZwID0gbmZzX2RpcmVjdF9zZWxlY3RfdmVyZihkcmVxLCBkYXRhLT5kc19jbHAsCiAJCQkJCSBkYXRhLT5kc19jb21taXRfaW5kZXgpOwotCVdBUk5fT05fT05DRSh2ZXJmcC0+Y29tbWl0dGVkIDwgMCk7CisKKwkvKiB2ZXJpZmllciBub3Qgc2V0IHNvIGFsd2F5cyBmYWlsICovCisJaWYgKHZlcmZwLT5jb21taXR0ZWQgPCAwKQorCQlyZXR1cm4gMTsKKwogCXJldHVybiBtZW1jbXAodmVyZnAsICZkYXRhLT52ZXJmLCBzaXplb2Yoc3RydWN0IG5mc193cml0ZXZlcmYpKTsKIH0KIApAQCAtMjEyLDYgKzI1MywxMiBAQAogICovCiBzc2l6ZV90IG5mc19kaXJlY3RfSU8oaW50IHJ3LCBzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgbG9mZl90IHBvcykKIHsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9tYXBwaW5nLT5ob3N0OworCisJLyogd2Ugb25seSBzdXBwb3J0IHN3YXAgZmlsZSBjYWxsaW5nIG5mc19kaXJlY3RfSU8gKi8KKwlpZiAoIUlTX1NXQVBGSUxFKGlub2RlKSkKKwkJcmV0dXJuIDA7CisKICNpZm5kZWYgQ09ORklHX05GU19TV0FQCiAJZHByaW50aygiTkZTOiBuZnNfZGlyZWN0X0lPICglcEQpIG9mZi9ubyglTGQvJWx1KSBFSU5WQUxcbiIsCiAJCQlpb2NiLT5raV9maWxwLCAobG9uZyBsb25nKSBwb3MsIGl0ZXItPm5yX3NlZ3MpOwpAQCAtMjQzLDYgKzI5MCwxOCBAQAogCWNpbmZvLT5jb21wbGV0aW9uX29wcyA9ICZuZnNfZGlyZWN0X2NvbW1pdF9jb21wbGV0aW9uX29wczsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG5mc19kaXJlY3Rfc2V0dXBfbWlycm9yaW5nKHN0cnVjdCBuZnNfZGlyZWN0X3JlcSAqZHJlcSwKKwkJCQkJICAgICBzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpwZ2lvLAorCQkJCQkgICAgIHN0cnVjdCBuZnNfcGFnZSAqcmVxKQoreworCWludCBtaXJyb3JfY291bnQgPSAxOworCisJaWYgKHBnaW8tPnBnX29wcy0+cGdfZ2V0X21pcnJvcl9jb3VudCkKKwkJbWlycm9yX2NvdW50ID0gcGdpby0+cGdfb3BzLT5wZ19nZXRfbWlycm9yX2NvdW50KHBnaW8sIHJlcSk7CisKKwlkcmVxLT5taXJyb3JfY291bnQgPSBtaXJyb3JfY291bnQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mc19kaXJlY3RfcmVxICpuZnNfZGlyZWN0X3JlcV9hbGxvYyh2b2lkKQogewogCXN0cnVjdCBuZnNfZGlyZWN0X3JlcSAqZHJlcTsKQEAgLTI1Nyw2ICszMTYsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZkcmVxLT5tZHNfY2luZm8ubGlzdCk7CiAJZHJlcS0+dmVyZi5jb21taXR0ZWQgPSBORlNfSU5WQUxJRF9TVEFCTEVfSE9XOwkvKiBub3Qgc2V0IHlldCAqLwogCUlOSVRfV09SSygmZHJlcS0+d29yaywgbmZzX2RpcmVjdF93cml0ZV9zY2hlZHVsZV93b3JrKTsKKwlkcmVxLT5taXJyb3JfY291bnQgPSAxOwogCXNwaW5fbG9ja19pbml0KCZkcmVxLT5sb2NrKTsKIAogCXJldHVybiBkcmVxOwpAQCAtMzYzLDcgKzQyMyw4IEBACiAJaWYgKHRlc3RfYml0KE5GU19JT0hEUl9FUlJPUiwgJmhkci0+ZmxhZ3MpICYmIChoZHItPmdvb2RfYnl0ZXMgPT0gMCkpCiAJCWRyZXEtPmVycm9yID0gaGRyLT5lcnJvcjsKIAllbHNlCi0JCWRyZXEtPmNvdW50ICs9IGhkci0+Z29vZF9ieXRlczsKKwkJbmZzX2RpcmVjdF9nb29kX2J5dGVzKGRyZXEsIGhkcik7CisKIAlzcGluX3VubG9jaygmZHJlcS0+bG9jayk7CiAKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmhkci0+cGFnZXMpKSB7CkBAIC01NDEsNiArNjAyLDcgQEAKIAogCWRyZXEtPmlub2RlID0gaW5vZGU7CiAJZHJlcS0+Ynl0ZXNfbGVmdCA9IGNvdW50OworCWRyZXEtPmlvX3N0YXJ0ID0gcG9zOwogCWRyZXEtPmN0eCA9IGdldF9uZnNfb3Blbl9jb250ZXh0KG5mc19maWxlX29wZW5fY29udGV4dChpb2NiLT5raV9maWxwKSk7CiAJbF9jdHggPSBuZnNfZ2V0X2xvY2tfY29udGV4dChkcmVxLT5jdHgpOwogCWlmIChJU19FUlIobF9jdHgpKSB7CkBAIC01NzMsNiArNjM1LDIwIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAorc3RhdGljIHZvaWQKK25mc19kaXJlY3Rfd3JpdGVfc2Nhbl9jb21taXRfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKKwkJCQkgIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvKQoreworCXNwaW5fbG9jayhjaW5mby0+bG9jayk7CisjaWZkZWYgQ09ORklHX05GU19WNF8xCisJaWYgKGNpbmZvLT5kcyAhPSBOVUxMICYmIGNpbmZvLT5kcy0+bndyaXR0ZW4gIT0gMCkKKwkJTkZTX1NFUlZFUihpbm9kZSktPnBuZnNfY3Vycl9sZC0+cmVjb3Zlcl9jb21taXRfcmVxcyhsaXN0LCBjaW5mbyk7CisjZW5kaWYKKwluZnNfc2Nhbl9jb21taXRfbGlzdCgmY2luZm8tPm1kcy0+bGlzdCwgbGlzdCwgY2luZm8sIDApOworCXNwaW5fdW5sb2NrKGNpbmZvLT5sb2NrKTsKK30KKwogc3RhdGljIHZvaWQgbmZzX2RpcmVjdF93cml0ZV9yZXNjaGVkdWxlKHN0cnVjdCBuZnNfZGlyZWN0X3JlcSAqZHJlcSkKIHsKIAlzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yIGRlc2M7CkBAIC01ODAsMjAgKzY1NiwyMyBAQAogCUxJU1RfSEVBRChyZXFzKTsKIAlzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvIGNpbmZvOwogCUxJU1RfSEVBRChmYWlsZWQpOworCWludCBpOwogCiAJbmZzX2luaXRfY2luZm9fZnJvbV9kcmVxKCZjaW5mbywgZHJlcSk7Ci0JcG5mc19yZWNvdmVyX2NvbW1pdF9yZXFzKGRyZXEtPmlub2RlLCAmcmVxcywgJmNpbmZvKTsKLQlzcGluX2xvY2soY2luZm8ubG9jayk7Ci0JbmZzX3NjYW5fY29tbWl0X2xpc3QoJmNpbmZvLm1kcy0+bGlzdCwgJnJlcXMsICZjaW5mbywgMCk7Ci0Jc3Bpbl91bmxvY2soY2luZm8ubG9jayk7CisJbmZzX2RpcmVjdF93cml0ZV9zY2FuX2NvbW1pdF9saXN0KGRyZXEtPmlub2RlLCAmcmVxcywgJmNpbmZvKTsKIAogCWRyZXEtPmNvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgZHJlcS0+bWlycm9yX2NvdW50OyBpKyspCisJCWRyZXEtPm1pcnJvcnNbaV0uY291bnQgPSAwOwogCWdldF9kcmVxKGRyZXEpOwogCiAJbmZzX3BhZ2Vpb19pbml0X3dyaXRlKCZkZXNjLCBkcmVxLT5pbm9kZSwgRkxVU0hfU1RBQkxFLCBmYWxzZSwKIAkJCSAgICAgICZuZnNfZGlyZWN0X3dyaXRlX2NvbXBsZXRpb25fb3BzKTsKIAlkZXNjLnBnX2RyZXEgPSBkcmVxOwogCisJcmVxID0gbmZzX2xpc3RfZW50cnkocmVxcy5uZXh0KTsKKwluZnNfZGlyZWN0X3NldHVwX21pcnJvcmluZyhkcmVxLCAmZGVzYywgcmVxKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXEsIHRtcCwgJnJlcXMsIHdiX2xpc3QpIHsKIAkJaWYgKCFuZnNfcGFnZWlvX2FkZF9yZXF1ZXN0KCZkZXNjLCByZXEpKSB7CiAJCQluZnNfbGlzdF9yZW1vdmVfcmVxdWVzdChyZXEpOwpAQCAtNjQwLDcgKzcxOSw3IEBACiAJCW5mc19saXN0X3JlbW92ZV9yZXF1ZXN0KHJlcSk7CiAJCWlmIChkcmVxLT5mbGFncyA9PSBORlNfT0RJUkVDVF9SRVNDSEVEX1dSSVRFUykgewogCQkJLyogTm90ZSB0aGUgcmV3cml0ZSB3aWxsIGdvIHRocm91Z2ggbWRzICovCi0JCQluZnNfbWFya19yZXF1ZXN0X2NvbW1pdChyZXEsIE5VTEwsICZjaW5mbyk7CisJCQluZnNfbWFya19yZXF1ZXN0X2NvbW1pdChyZXEsIE5VTEwsICZjaW5mbywgMCk7CiAJCX0gZWxzZQogCQkJbmZzX3JlbGVhc2VfcmVxdWVzdChyZXEpOwogCQluZnNfdW5sb2NrX2FuZF9yZWxlYXNlX3JlcXVlc3QocmVxKTsKQEAgLTcxNSw3ICs3OTQsNyBAQAogCQlkcmVxLT5lcnJvciA9IGhkci0+ZXJyb3I7CiAJfQogCWlmIChkcmVxLT5lcnJvciA9PSAwKSB7Ci0JCWRyZXEtPmNvdW50ICs9IGhkci0+Z29vZF9ieXRlczsKKwkJbmZzX2RpcmVjdF9nb29kX2J5dGVzKGRyZXEsIGhkcik7CiAJCWlmIChuZnNfd3JpdGVfbmVlZF9jb21taXQoaGRyKSkgewogCQkJaWYgKGRyZXEtPmZsYWdzID09IE5GU19PRElSRUNUX1JFU0NIRURfV1JJVEVTKQogCQkJCXJlcXVlc3RfY29tbWl0ID0gdHJ1ZTsKQEAgLTczOSw3ICs4MTgsOCBAQAogCQluZnNfbGlzdF9yZW1vdmVfcmVxdWVzdChyZXEpOwogCQlpZiAocmVxdWVzdF9jb21taXQpIHsKIAkJCWtyZWZfZ2V0KCZyZXEtPndiX2tyZWYpOwotCQkJbmZzX21hcmtfcmVxdWVzdF9jb21taXQocmVxLCBoZHItPmxzZWcsICZjaW5mbyk7CisJCQluZnNfbWFya19yZXF1ZXN0X2NvbW1pdChyZXEsIGhkci0+bHNlZywgJmNpbmZvLAorCQkJCWhkci0+ZHNfY29tbWl0X2lkeCk7CiAJCX0KIAkJbmZzX3VubG9ja19hbmRfcmVsZWFzZV9yZXF1ZXN0KHJlcSk7CiAJfQpAQCAtODIwLDYgKzkwMCw5IEBACiAJCQkJcmVzdWx0ID0gUFRSX0VSUihyZXEpOwogCQkJCWJyZWFrOwogCQkJfQorCisJCQluZnNfZGlyZWN0X3NldHVwX21pcnJvcmluZyhkcmVxLCAmZGVzYywgcmVxKTsKKwogCQkJbmZzX2xvY2tfcmVxdWVzdChyZXEpOwogCQkJcmVxLT53Yl9pbmRleCA9IHBvcyA+PiBQQUdFX1NISUZUOwogCQkJcmVxLT53Yl9vZmZzZXQgPSBwb3MgJiB+UEFHRV9NQVNLOwpAQCAtOTI4LDYgKzEwMTEsNyBAQAogCiAJZHJlcS0+aW5vZGUgPSBpbm9kZTsKIAlkcmVxLT5ieXRlc19sZWZ0ID0gY291bnQ7CisJZHJlcS0+aW9fc3RhcnQgPSBwb3M7CiAJZHJlcS0+Y3R4ID0gZ2V0X25mc19vcGVuX2NvbnRleHQobmZzX2ZpbGVfb3Blbl9jb250ZXh0KGlvY2ItPmtpX2ZpbHApKTsKIAlsX2N0eCA9IG5mc19nZXRfbG9ja19jb250ZXh0KGRyZXEtPmN0eCk7CiAJaWYgKElTX0VSUihsX2N0eCkpIHsKZGlmZiAtLWdpdCBhL2ZzL25mcy9maWxlLmMgYi9mcy9uZnMvZmlsZS5jCmluZGV4IDJhYjZmMDAuLjk0NzEyZmMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9maWxlLmMKKysrIGIvZnMvbmZzL2ZpbGUuYwpAQCAtNjQ2LDcgKzY0Niw2IEBACiAJLmZhdWx0ID0gZmlsZW1hcF9mYXVsdCwKIAkubWFwX3BhZ2VzID0gZmlsZW1hcF9tYXBfcGFnZXMsCiAJLnBhZ2VfbWt3cml0ZSA9IG5mc192bV9wYWdlX21rd3JpdGUsCi0JLnJlbWFwX3BhZ2VzID0gZ2VuZXJpY19maWxlX3JlbWFwX3BhZ2VzLAogfTsKIAogc3RhdGljIGludCBuZnNfbmVlZF9zeW5jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGVsYXlvdXQvZmlsZWxheW91dC5jIGIvZnMvbmZzL2ZpbGVsYXlvdXQvZmlsZWxheW91dC5jCmluZGV4IDdhZmI1MmYuLjNjOTc2OTQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9maWxlbGF5b3V0L2ZpbGVsYXlvdXQuYworKysgYi9mcy9uZnMvZmlsZWxheW91dC9maWxlbGF5b3V0LmMKQEAgLTExOCwxMyArMTE4LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGZpbGVsYXlvdXRfZmVuY2VtZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbykKLXsKLQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChORlNfTEFZT1VUX1JFVFVSTiwgJmxvLT5wbGhfZmxhZ3MpKQotCQlyZXR1cm47Ci0JcG5mc19yZXR1cm5fbGF5b3V0KGlub2RlKTsKLX0KLQogc3RhdGljIGludCBmaWxlbGF5b3V0X2FzeW5jX2hhbmRsZV9lcnJvcihzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssCiAJCQkJCSBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsCiAJCQkJCSBzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLApAQCAtMjA3LDcgKzIwMCw3IEBACiAJCWRwcmludGsoIiVzIERTIGNvbm5lY3Rpb24gZXJyb3IgJWRcbiIsIF9fZnVuY19fLAogCQkJdGFzay0+dGtfc3RhdHVzKTsKIAkJbmZzNF9tYXJrX2RldmljZWlkX3VuYXZhaWxhYmxlKGRldmlkKTsKLQkJc2V0X2JpdChORlNfTEFZT1VUX1JFVFVSTiwgJmxvLT5wbGhfZmxhZ3MpOworCQlwbmZzX2Vycm9yX21hcmtfbGF5b3V0X2Zvcl9yZXR1cm4oaW5vZGUsIGxzZWcpOwogCQlycGNfd2FrZV91cCgmdGJsLT5zbG90X3RibF93YWl0cSk7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWRlZmF1bHQ6CkBAIC0zMzksMTYgKzMzMiw2IEBACiAJcnBjX2NvdW50X2lvc3RhdHModGFzaywgTkZTX1NFUlZFUihoZHItPmlub2RlKS0+Y2xpZW50LT5jbF9tZXRyaWNzKTsKIH0KIAotc3RhdGljIHZvaWQgZmlsZWxheW91dF9yZWFkX3JlbGVhc2Uodm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICpoZHIgPSBkYXRhOwotCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvID0gaGRyLT5sc2VnLT5wbHNfbGF5b3V0OwotCi0JZmlsZWxheW91dF9mZW5jZW1lKGxvLT5wbGhfaW5vZGUsIGxvKTsKLQluZnNfcHV0X2NsaWVudChoZHItPmRzX2NscCk7Ci0JaGRyLT5tZHNfb3BzLT5ycGNfcmVsZWFzZShkYXRhKTsKLX0KLQogc3RhdGljIGludCBmaWxlbGF5b3V0X3dyaXRlX2RvbmVfY2Ioc3RydWN0IHJwY190YXNrICp0YXNrLAogCQkJCXN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkcikKIHsKQEAgLTM3MSwxNyArMzU0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogRmFrZSB1cCBzb21lIGRhdGEgdGhhdCB3aWxsIGNhdXNlIG5mc19jb21taXRfcmVsZWFzZSB0byByZXRyeSB0aGUgd3JpdGVzLiAqLwotc3RhdGljIHZvaWQgcHJlcGFyZV90b19yZXNlbmRfd3JpdGVzKHN0cnVjdCBuZnNfY29tbWl0X2RhdGEgKmRhdGEpCi17Ci0Jc3RydWN0IG5mc19wYWdlICpmaXJzdCA9IG5mc19saXN0X2VudHJ5KGRhdGEtPnBhZ2VzLm5leHQpOwotCi0JZGF0YS0+dGFzay50a19zdGF0dXMgPSAwOwotCW1lbWNweSgmZGF0YS0+dmVyZi52ZXJpZmllciwgJmZpcnN0LT53Yl92ZXJmLAotCSAgICAgICBzaXplb2YoZGF0YS0+dmVyZi52ZXJpZmllcikpOwotCWRhdGEtPnZlcmYudmVyaWZpZXIuZGF0YVswXSsrOyAvKiBlbnN1cmUgdmVyaWZpZXIgbWlzbWF0Y2ggKi8KLX0KLQogc3RhdGljIGludCBmaWxlbGF5b3V0X2NvbW1pdF9kb25lX2NiKHN0cnVjdCBycGNfdGFzayAqdGFzaywKIAkJCQkgICAgIHN0cnVjdCBuZnNfY29tbWl0X2RhdGEgKmRhdGEpCiB7CkBAIC0zOTMsNyArMzY1LDcgQEAKIAogCXN3aXRjaCAoZXJyKSB7CiAJY2FzZSAtTkZTNEVSUl9SRVNFVF9UT19NRFM6Ci0JCXByZXBhcmVfdG9fcmVzZW5kX3dyaXRlcyhkYXRhKTsKKwkJcG5mc19nZW5lcmljX3ByZXBhcmVfdG9fcmVzZW5kX3dyaXRlcyhkYXRhKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJY2FzZSAtRUFHQUlOOgogCQlycGNfcmVzdGFydF9jYWxsX3ByZXBhcmUodGFzayk7CkBAIC00NTEsMTYgKzQyMyw2IEBACiAJcnBjX2NvdW50X2lvc3RhdHModGFzaywgTkZTX1NFUlZFUihoZHItPmlub2RlKS0+Y2xpZW50LT5jbF9tZXRyaWNzKTsKIH0KIAotc3RhdGljIHZvaWQgZmlsZWxheW91dF93cml0ZV9yZWxlYXNlKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqaGRyID0gZGF0YTsKLQlzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbyA9IGhkci0+bHNlZy0+cGxzX2xheW91dDsKLQotCWZpbGVsYXlvdXRfZmVuY2VtZShsby0+cGxoX2lub2RlLCBsbyk7Ci0JbmZzX3B1dF9jbGllbnQoaGRyLT5kc19jbHApOwotCWhkci0+bWRzX29wcy0+cnBjX3JlbGVhc2UoZGF0YSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGZpbGVsYXlvdXRfY29tbWl0X3ByZXBhcmUoc3RydWN0IHJwY190YXNrICp0YXNrLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBuZnNfY29tbWl0X2RhdGEgKndkYXRhID0gZGF0YTsKQEAgLTQ3MSwxNCArNDMzLDYgQEAKIAkJCXRhc2spOwogfQogCi1zdGF0aWMgdm9pZCBmaWxlbGF5b3V0X3dyaXRlX2NvbW1pdF9kb25lKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgbmZzX2NvbW1pdF9kYXRhICp3ZGF0YSA9IGRhdGE7Ci0KLQkvKiBOb3RlIHRoaXMgbWF5IGNhdXNlIFJQQyB0byBiZSByZXNlbnQgKi8KLQl3ZGF0YS0+bWRzX29wcy0+cnBjX2NhbGxfZG9uZSh0YXNrLCBkYXRhKTsKLX0KLQogc3RhdGljIHZvaWQgZmlsZWxheW91dF9jb21taXRfY291bnRfc3RhdHMoc3RydWN0IHJwY190YXNrICp0YXNrLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBuZnNfY29tbWl0X2RhdGEgKmNkYXRhID0gZGF0YTsKQEAgLTQ4NiwzNSArNDQwLDI1IEBACiAJcnBjX2NvdW50X2lvc3RhdHModGFzaywgTkZTX1NFUlZFUihjZGF0YS0+aW5vZGUpLT5jbGllbnQtPmNsX21ldHJpY3MpOwogfQogCi1zdGF0aWMgdm9pZCBmaWxlbGF5b3V0X2NvbW1pdF9yZWxlYXNlKHZvaWQgKmNhbGxkYXRhKQotewotCXN0cnVjdCBuZnNfY29tbWl0X2RhdGEgKmRhdGEgPSBjYWxsZGF0YTsKLQotCWRhdGEtPmNvbXBsZXRpb25fb3BzLT5jb21wbGV0aW9uKGRhdGEpOwotCXBuZnNfcHV0X2xzZWcoZGF0YS0+bHNlZyk7Ci0JbmZzX3B1dF9jbGllbnQoZGF0YS0+ZHNfY2xwKTsKLQluZnNfY29tbWl0ZGF0YV9yZWxlYXNlKGRhdGEpOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBmaWxlbGF5b3V0X3JlYWRfY2FsbF9vcHMgPSB7CiAJLnJwY19jYWxsX3ByZXBhcmUgPSBmaWxlbGF5b3V0X3JlYWRfcHJlcGFyZSwKIAkucnBjX2NhbGxfZG9uZSA9IGZpbGVsYXlvdXRfcmVhZF9jYWxsX2RvbmUsCiAJLnJwY19jb3VudF9zdGF0cyA9IGZpbGVsYXlvdXRfcmVhZF9jb3VudF9zdGF0cywKLQkucnBjX3JlbGVhc2UgPSBmaWxlbGF5b3V0X3JlYWRfcmVsZWFzZSwKKwkucnBjX3JlbGVhc2UgPSBwbmZzX2dlbmVyaWNfcndfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzIGZpbGVsYXlvdXRfd3JpdGVfY2FsbF9vcHMgPSB7CiAJLnJwY19jYWxsX3ByZXBhcmUgPSBmaWxlbGF5b3V0X3dyaXRlX3ByZXBhcmUsCiAJLnJwY19jYWxsX2RvbmUgPSBmaWxlbGF5b3V0X3dyaXRlX2NhbGxfZG9uZSwKIAkucnBjX2NvdW50X3N0YXRzID0gZmlsZWxheW91dF93cml0ZV9jb3VudF9zdGF0cywKLQkucnBjX3JlbGVhc2UgPSBmaWxlbGF5b3V0X3dyaXRlX3JlbGVhc2UsCisJLnJwY19yZWxlYXNlID0gcG5mc19nZW5lcmljX3J3X3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBmaWxlbGF5b3V0X2NvbW1pdF9jYWxsX29wcyA9IHsKIAkucnBjX2NhbGxfcHJlcGFyZSA9IGZpbGVsYXlvdXRfY29tbWl0X3ByZXBhcmUsCi0JLnJwY19jYWxsX2RvbmUgPSBmaWxlbGF5b3V0X3dyaXRlX2NvbW1pdF9kb25lLAorCS5ycGNfY2FsbF9kb25lID0gcG5mc19nZW5lcmljX3dyaXRlX2NvbW1pdF9kb25lLAogCS5ycGNfY291bnRfc3RhdHMgPSBmaWxlbGF5b3V0X2NvbW1pdF9jb3VudF9zdGF0cywKLQkucnBjX3JlbGVhc2UgPSBmaWxlbGF5b3V0X2NvbW1pdF9yZWxlYXNlLAorCS5ycGNfcmVsZWFzZSA9IHBuZnNfZ2VuZXJpY19jb21taXRfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBlbnVtIHBuZnNfdHJ5X3N0YXR1cwpAQCAtNTQ4LDcgKzQ5Miw3IEBACiAJLyogTm8gbXVsdGlwYXRoIHN1cHBvcnQuIFVzZSBmaXJzdCBEUyAqLwogCWF0b21pY19pbmMoJmRzLT5kc19jbHAtPmNsX2NvdW50KTsKIAloZHItPmRzX2NscCA9IGRzLT5kc19jbHA7Ci0JaGRyLT5kc19pZHggPSBpZHg7CisJaGRyLT5kc19jb21taXRfaWR4ID0gaWR4OwogCWZoID0gbmZzNF9mbF9zZWxlY3RfZHNfZmgobHNlZywgaik7CiAJaWYgKGZoKQogCQloZHItPmFyZ3MuZmggPSBmaDsKQEAgLTU1Nyw4ICs1MDEsOSBAQAogCWhkci0+bWRzX29mZnNldCA9IG9mZnNldDsKIAogCS8qIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIHJlYWQgdG8gZHMgKi8KLQluZnNfaW5pdGlhdGVfcGdpbyhkc19jbG50LCBoZHIsCi0JCQkgICAgJmZpbGVsYXlvdXRfcmVhZF9jYWxsX29wcywgMCwgUlBDX1RBU0tfU09GVENPTk4pOworCW5mc19pbml0aWF0ZV9wZ2lvKGRzX2NsbnQsIGhkciwgaGRyLT5jcmVkLAorCQkJICBORlNfUFJPVE8oaGRyLT5pbm9kZSksICZmaWxlbGF5b3V0X3JlYWRfY2FsbF9vcHMsCisJCQkgIDAsIFJQQ19UQVNLX1NPRlRDT05OKTsKIAlyZXR1cm4gUE5GU19BVFRFTVBURUQ7CiB9CiAKQEAgLTU5MSwxNiArNTM2LDE2IEBACiAJaGRyLT5wZ2lvX2RvbmVfY2IgPSBmaWxlbGF5b3V0X3dyaXRlX2RvbmVfY2I7CiAJYXRvbWljX2luYygmZHMtPmRzX2NscC0+Y2xfY291bnQpOwogCWhkci0+ZHNfY2xwID0gZHMtPmRzX2NscDsKLQloZHItPmRzX2lkeCA9IGlkeDsKKwloZHItPmRzX2NvbW1pdF9pZHggPSBpZHg7CiAJZmggPSBuZnM0X2ZsX3NlbGVjdF9kc19maChsc2VnLCBqKTsKIAlpZiAoZmgpCiAJCWhkci0+YXJncy5maCA9IGZoOwogCWhkci0+YXJncy5vZmZzZXQgPSBmaWxlbGF5b3V0X2dldF9kc2VydmVyX29mZnNldChsc2VnLCBvZmZzZXQpOwogCiAJLyogUGVyZm9ybSBhbiBhc3luY2hyb25vdXMgd3JpdGUgKi8KLQluZnNfaW5pdGlhdGVfcGdpbyhkc19jbG50LCBoZHIsCi0JCQkJICAgICZmaWxlbGF5b3V0X3dyaXRlX2NhbGxfb3BzLCBzeW5jLAotCQkJCSAgICBSUENfVEFTS19TT0ZUQ09OTik7CisJbmZzX2luaXRpYXRlX3BnaW8oZHNfY2xudCwgaGRyLCBoZHItPmNyZWQsCisJCQkgIE5GU19QUk9UTyhoZHItPmlub2RlKSwgJmZpbGVsYXlvdXRfd3JpdGVfY2FsbF9vcHMsCisJCQkgIHN5bmMsIFJQQ19UQVNLX1NPRlRDT05OKTsKIAlyZXR1cm4gUE5GU19BVFRFTVBURUQ7CiB9CiAKQEAgLTk4OCwxMiArOTMzLDE0IEBACiAJLnBnX2luaXQgPSBmaWxlbGF5b3V0X3BnX2luaXRfcmVhZCwKIAkucGdfdGVzdCA9IGZpbGVsYXlvdXRfcGdfdGVzdCwKIAkucGdfZG9pbyA9IHBuZnNfZ2VuZXJpY19wZ19yZWFkcGFnZXMsCisJLnBnX2NsZWFudXAgPSBwbmZzX2dlbmVyaWNfcGdfY2xlYW51cCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZzX3BhZ2Vpb19vcHMgZmlsZWxheW91dF9wZ193cml0ZV9vcHMgPSB7CiAJLnBnX2luaXQgPSBmaWxlbGF5b3V0X3BnX2luaXRfd3JpdGUsCiAJLnBnX3Rlc3QgPSBmaWxlbGF5b3V0X3BnX3Rlc3QsCiAJLnBnX2RvaW8gPSBwbmZzX2dlbmVyaWNfcGdfd3JpdGVwYWdlcywKKwkucGdfY2xlYW51cCA9IHBuZnNfZ2VuZXJpY19wZ19jbGVhbnVwLAogfTsKIAogc3RhdGljIHUzMiBzZWxlY3RfYnVja2V0X2luZGV4KHN0cnVjdCBuZnM0X2ZpbGVsYXlvdXRfc2VnbWVudCAqZmwsIHUzMiBqKQpAQCAtMTAwNCwzNyArOTUxLDExIEBACiAJCXJldHVybiBqOwogfQogCi0vKiBUaGUgZ2VuZXJpYyBsYXllciBpcyBhYm91dCB0byByZW1vdmUgdGhlIHJlcSBmcm9tIHRoZSBjb21taXQgbGlzdC4KLSAqIElmIHRoaXMgd2lsbCBtYWtlIHRoZSBidWNrZXQgZW1wdHksIGl0IHdpbGwgbmVlZCB0byBwdXQgdGhlIGxzZWcgcmVmZXJlbmNlLgotICogTm90ZSB0aGlzIGlzIG11c3QgYmUgY2FsbGVkIGhvbGRpbmcgdGhlIGlub2RlICgvY2luZm8pIGxvY2sKLSAqLwotc3RhdGljIHZvaWQKLWZpbGVsYXlvdXRfY2xlYXJfcmVxdWVzdF9jb21taXQoc3RydWN0IG5mc19wYWdlICpyZXEsCi0JCQkJc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8pCi17Ci0Jc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmZyZWVtZSA9IE5VTEw7Ci0KLQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChQR19DT01NSVRfVE9fRFMsICZyZXEtPndiX2ZsYWdzKSkKLQkJZ290byBvdXQ7Ci0JY2luZm8tPmRzLT5ud3JpdHRlbi0tOwotCWlmIChsaXN0X2lzX3Npbmd1bGFyKCZyZXEtPndiX2xpc3QpKSB7Ci0JCXN0cnVjdCBwbmZzX2NvbW1pdF9idWNrZXQgKmJ1Y2tldDsKLQotCQlidWNrZXQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZyZXEtPndiX2xpc3QsCi0JCQkJCSAgc3RydWN0IHBuZnNfY29tbWl0X2J1Y2tldCwKLQkJCQkJICB3cml0dGVuKTsKLQkJZnJlZW1lID0gYnVja2V0LT53bHNlZzsKLQkJYnVja2V0LT53bHNlZyA9IE5VTEw7Ci0JfQotb3V0OgotCW5mc19yZXF1ZXN0X3JlbW92ZV9jb21taXRfbGlzdChyZXEsIGNpbmZvKTsKLQlwbmZzX3B1dF9sc2VnX2xvY2tlZChmcmVlbWUpOwotfQotCiBzdGF0aWMgdm9pZAogZmlsZWxheW91dF9tYXJrX3JlcXVlc3RfY29tbWl0KHN0cnVjdCBuZnNfcGFnZSAqcmVxLAogCQkJICAgICAgIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLAotCQkJICAgICAgIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvKQorCQkJICAgICAgIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvLAorCQkJICAgICAgIHUzMiBkc19jb21taXRfaWR4KQogCiB7CiAJc3RydWN0IG5mczRfZmlsZWxheW91dF9zZWdtZW50ICpmbCA9IEZJTEVMQVlPVVRfTFNFRyhsc2VnKTsKQEAgLTEwNjQsNyArOTg1LDcgQEAKIAkJICogaXMgbm9ybWFsbHkgdHJhbnNmZXJyZWQgdG8gdGhlIENPTU1JVCBjYWxsIGFuZCByZWxlYXNlZAogCQkgKiB0aGVyZS4gIEl0IGNvdWxkIGFsc28gYmUgcmVsZWFzZWQgaWYgdGhlIGxhc3QgcmVxIGlzIHB1bGxlZAogCQkgKiBvZmYgZHVlIHRvIGEgcmV3cml0ZSwgaW4gd2hpY2ggY2FzZSBpdCB3aWxsIGJlIGRvbmUgaW4KLQkJICogZmlsZWxheW91dF9jbGVhcl9yZXF1ZXN0X2NvbW1pdAorCQkgKiBwbmZzX2dlbmVyaWNfY2xlYXJfcmVxdWVzdF9jb21taXQKIAkJICovCiAJCWJ1Y2tldHNbaV0ud2xzZWcgPSBwbmZzX2dldF9sc2VnKGxzZWcpOwogCX0KQEAgLTExMzgsMTAxICsxMDU5LDE1IEBACiAJZmggPSBzZWxlY3RfZHNfZmhfZnJvbV9jb21taXQobHNlZywgZGF0YS0+ZHNfY29tbWl0X2luZGV4KTsKIAlpZiAoZmgpCiAJCWRhdGEtPmFyZ3MuZmggPSBmaDsKLQlyZXR1cm4gbmZzX2luaXRpYXRlX2NvbW1pdChkc19jbG50LCBkYXRhLAorCXJldHVybiBuZnNfaW5pdGlhdGVfY29tbWl0KGRzX2NsbnQsIGRhdGEsIE5GU19QUk9UTyhkYXRhLT5pbm9kZSksCiAJCQkJICAgJmZpbGVsYXlvdXRfY29tbWl0X2NhbGxfb3BzLCBob3csCiAJCQkJICAgUlBDX1RBU0tfU09GVENPTk4pOwogb3V0X2VycjoKLQlwcmVwYXJlX3RvX3Jlc2VuZF93cml0ZXMoZGF0YSk7Ci0JZmlsZWxheW91dF9jb21taXRfcmVsZWFzZShkYXRhKTsKKwlwbmZzX2dlbmVyaWNfcHJlcGFyZV90b19yZXNlbmRfd3JpdGVzKGRhdGEpOworCXBuZnNfZ2VuZXJpY19jb21taXRfcmVsZWFzZShkYXRhKTsKIAlyZXR1cm4gLUVBR0FJTjsKIH0KIAotc3RhdGljIGludAotdHJhbnNmZXJfY29tbWl0X2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqc3JjLCBzdHJ1Y3QgbGlzdF9oZWFkICpkc3QsCi0JCSAgICAgc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8sIGludCBtYXgpCi17Ci0Jc3RydWN0IG5mc19wYWdlICpyZXEsICp0bXA7Ci0JaW50IHJldCA9IDA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0bXAsIHNyYywgd2JfbGlzdCkgewotCQlpZiAoIW5mc19sb2NrX3JlcXVlc3QocmVxKSkKLQkJCWNvbnRpbnVlOwotCQlrcmVmX2dldCgmcmVxLT53Yl9rcmVmKTsKLQkJaWYgKGNvbmRfcmVzY2hlZF9sb2NrKGNpbmZvLT5sb2NrKSkKLQkJCWxpc3Rfc2FmZV9yZXNldF9uZXh0KHJlcSwgdG1wLCB3Yl9saXN0KTsKLQkJbmZzX3JlcXVlc3RfcmVtb3ZlX2NvbW1pdF9saXN0KHJlcSwgY2luZm8pOwotCQljbGVhcl9iaXQoUEdfQ09NTUlUX1RPX0RTLCAmcmVxLT53Yl9mbGFncyk7Ci0JCW5mc19saXN0X2FkZF9yZXF1ZXN0KHJlcSwgZHN0KTsKLQkJcmV0Kys7Ci0JCWlmICgocmV0ID09IG1heCkgJiYgIWNpbmZvLT5kcmVxKQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qIE5vdGUgY2FsbGVkIHdpdGggY2luZm8tPmxvY2sgaGVsZC4gKi8KLXN0YXRpYyBpbnQKLWZpbGVsYXlvdXRfc2Nhbl9kc19jb21taXRfbGlzdChzdHJ1Y3QgcG5mc19jb21taXRfYnVja2V0ICpidWNrZXQsCi0JCQkgICAgICAgc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8sCi0JCQkgICAgICAgaW50IG1heCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpzcmMgPSAmYnVja2V0LT53cml0dGVuOwotCXN0cnVjdCBsaXN0X2hlYWQgKmRzdCA9ICZidWNrZXQtPmNvbW1pdHRpbmc7Ci0JaW50IHJldDsKLQotCXJldCA9IHRyYW5zZmVyX2NvbW1pdF9saXN0KHNyYywgZHN0LCBjaW5mbywgbWF4KTsKLQlpZiAocmV0KSB7Ci0JCWNpbmZvLT5kcy0+bndyaXR0ZW4gLT0gcmV0OwotCQljaW5mby0+ZHMtPm5jb21taXR0aW5nICs9IHJldDsKLQkJYnVja2V0LT5jbHNlZyA9IGJ1Y2tldC0+d2xzZWc7Ci0JCWlmIChsaXN0X2VtcHR5KHNyYykpCi0JCQlidWNrZXQtPndsc2VnID0gTlVMTDsKLQkJZWxzZQotCQkJcG5mc19nZXRfbHNlZyhidWNrZXQtPmNsc2VnKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogTW92ZSByZXFzIGZyb20gd3JpdHRlbiB0byBjb21taXR0aW5nIGxpc3RzLCByZXR1cm5pbmcgY291bnQgb2YgbnVtYmVyIG1vdmVkLgotICogTm90ZSBjYWxsZWQgd2l0aCBjaW5mby0+bG9jayBoZWxkLgotICovCi1zdGF0aWMgaW50IGZpbGVsYXlvdXRfc2Nhbl9jb21taXRfbGlzdHMoc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8sCi0JCQkJCWludCBtYXgpCi17Ci0JaW50IGksIHJ2ID0gMCwgY250OwotCi0JZm9yIChpID0gMDsgaSA8IGNpbmZvLT5kcy0+bmJ1Y2tldHMgJiYgbWF4ICE9IDA7IGkrKykgewotCQljbnQgPSBmaWxlbGF5b3V0X3NjYW5fZHNfY29tbWl0X2xpc3QoJmNpbmZvLT5kcy0+YnVja2V0c1tpXSwKLQkJCQkJCSAgICAgY2luZm8sIG1heCk7Ci0JCW1heCAtPSBjbnQ7Ci0JCXJ2ICs9IGNudDsKLQl9Ci0JcmV0dXJuIHJ2OwotfQotCi0vKiBQdWxsIGV2ZXJ5dGhpbmcgb2ZmIHRoZSBjb21taXR0aW5nIGxpc3RzIGFuZCBkdW1wIGludG8gQGRzdCAqLwotc3RhdGljIHZvaWQgZmlsZWxheW91dF9yZWNvdmVyX2NvbW1pdF9yZXFzKHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwKLQkJCQkJICAgc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8pCi17Ci0Jc3RydWN0IHBuZnNfY29tbWl0X2J1Y2tldCAqYjsKLQlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqZnJlZW1lOwotCWludCBpOwotCi1yZXN0YXJ0OgotCXNwaW5fbG9jayhjaW5mby0+bG9jayk7Ci0JZm9yIChpID0gMCwgYiA9IGNpbmZvLT5kcy0+YnVja2V0czsgaSA8IGNpbmZvLT5kcy0+bmJ1Y2tldHM7IGkrKywgYisrKSB7Ci0JCWlmICh0cmFuc2Zlcl9jb21taXRfbGlzdCgmYi0+d3JpdHRlbiwgZHN0LCBjaW5mbywgMCkpIHsKLQkJCWZyZWVtZSA9IGItPndsc2VnOwotCQkJYi0+d2xzZWcgPSBOVUxMOwotCQkJc3Bpbl91bmxvY2soY2luZm8tPmxvY2spOwotCQkJcG5mc19wdXRfbHNlZyhmcmVlbWUpOwotCQkJZ290byByZXN0YXJ0OwotCQl9Ci0JfQotCWNpbmZvLT5kcy0+bndyaXR0ZW4gPSAwOwotCXNwaW5fdW5sb2NrKGNpbmZvLT5sb2NrKTsKLX0KLQogLyogZmlsZWxheW91dF9zZWFyY2hfY29tbWl0X3JlcXMgLSBTZWFyY2ggbGlzdHMgaW4gQGNpbmZvIGZvciB0aGUgaGVhZCByZXFlc3QKICAqCQkJCSAgIGZvciBAcGFnZQogICogQGNpbmZvIC0gY29tbWl0IGluZm8gZm9yIGN1cnJlbnQgaW5vZGUKQEAgLTEyNjMsMTA4ICsxMDk4LDE0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbGVsYXlvdXRfcmV0cnlfY29tbWl0KHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvLCBpbnQgaWR4KQotewotCXN0cnVjdCBwbmZzX2RzX2NvbW1pdF9pbmZvICpmbF9jaW5mbyA9IGNpbmZvLT5kczsKLQlzdHJ1Y3QgcG5mc19jb21taXRfYnVja2V0ICpidWNrZXQ7Ci0Jc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmZyZWVtZTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IGlkeDsgaSA8IGZsX2NpbmZvLT5uYnVja2V0czsgaSsrKSB7Ci0JCWJ1Y2tldCA9ICZmbF9jaW5mby0+YnVja2V0c1tpXTsKLQkJaWYgKGxpc3RfZW1wdHkoJmJ1Y2tldC0+Y29tbWl0dGluZykpCi0JCQljb250aW51ZTsKLQkJbmZzX3JldHJ5X2NvbW1pdCgmYnVja2V0LT5jb21taXR0aW5nLCBidWNrZXQtPmNsc2VnLCBjaW5mbyk7Ci0JCXNwaW5fbG9jayhjaW5mby0+bG9jayk7Ci0JCWZyZWVtZSA9IGJ1Y2tldC0+Y2xzZWc7Ci0JCWJ1Y2tldC0+Y2xzZWcgPSBOVUxMOwotCQlzcGluX3VubG9jayhjaW5mby0+bG9jayk7Ci0JCXBuZnNfcHV0X2xzZWcoZnJlZW1lKTsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWFsbG9jX2RzX2NvbW1pdHMoc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8sIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCi17Ci0Jc3RydWN0IHBuZnNfZHNfY29tbWl0X2luZm8gKmZsX2NpbmZvOwotCXN0cnVjdCBwbmZzX2NvbW1pdF9idWNrZXQgKmJ1Y2tldDsKLQlzdHJ1Y3QgbmZzX2NvbW1pdF9kYXRhICpkYXRhOwotCWludCBpOwotCXVuc2lnbmVkIGludCBucmVxID0gMDsKLQotCWZsX2NpbmZvID0gY2luZm8tPmRzOwotCWJ1Y2tldCA9IGZsX2NpbmZvLT5idWNrZXRzOwotCWZvciAoaSA9IDA7IGkgPCBmbF9jaW5mby0+bmJ1Y2tldHM7IGkrKywgYnVja2V0KyspIHsKLQkJaWYgKGxpc3RfZW1wdHkoJmJ1Y2tldC0+Y29tbWl0dGluZykpCi0JCQljb250aW51ZTsKLQkJZGF0YSA9IG5mc19jb21taXRkYXRhX2FsbG9jKCk7Ci0JCWlmICghZGF0YSkKLQkJCWJyZWFrOwotCQlkYXRhLT5kc19jb21taXRfaW5kZXggPSBpOwotCQlzcGluX2xvY2soY2luZm8tPmxvY2spOwotCQlkYXRhLT5sc2VnID0gYnVja2V0LT5jbHNlZzsKLQkJYnVja2V0LT5jbHNlZyA9IE5VTEw7Ci0JCXNwaW5fdW5sb2NrKGNpbmZvLT5sb2NrKTsKLQkJbGlzdF9hZGQoJmRhdGEtPnBhZ2VzLCBsaXN0KTsKLQkJbnJlcSsrOwotCX0KLQotCS8qIENsZWFuIHVwIG9uIGVycm9yICovCi0JZmlsZWxheW91dF9yZXRyeV9jb21taXQoY2luZm8sIGkpOwotCS8qIENhbGxlciB3aWxsIGNsZWFuIHVwIGVudHJpZXMgcHV0IG9uIGxpc3QgKi8KLQlyZXR1cm4gbnJlcTsKLX0KLQotLyogVGhpcyBmb2xsb3dzIG5mc19jb21taXRfbGlzdCBwcmV0dHkgY2xvc2VseSAqLwogc3RhdGljIGludAogZmlsZWxheW91dF9jb21taXRfcGFnZWxpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqbWRzX3BhZ2VzLAogCQkJICAgaW50IGhvdywgc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8pCiB7Ci0Jc3RydWN0IG5mc19jb21taXRfZGF0YSAqZGF0YSwgKnRtcDsKLQlMSVNUX0hFQUQobGlzdCk7Ci0JdW5zaWduZWQgaW50IG5yZXEgPSAwOwotCi0JaWYgKCFsaXN0X2VtcHR5KG1kc19wYWdlcykpIHsKLQkJZGF0YSA9IG5mc19jb21taXRkYXRhX2FsbG9jKCk7Ci0JCWlmIChkYXRhICE9IE5VTEwpIHsKLQkJCWRhdGEtPmxzZWcgPSBOVUxMOwotCQkJbGlzdF9hZGQoJmRhdGEtPnBhZ2VzLCAmbGlzdCk7Ci0JCQlucmVxKys7Ci0JCX0gZWxzZSB7Ci0JCQluZnNfcmV0cnlfY29tbWl0KG1kc19wYWdlcywgTlVMTCwgY2luZm8pOwotCQkJZmlsZWxheW91dF9yZXRyeV9jb21taXQoY2luZm8sIDApOwotCQkJY2luZm8tPmNvbXBsZXRpb25fb3BzLT5lcnJvcl9jbGVhbnVwKE5GU19JKGlub2RlKSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQotCW5yZXEgKz0gYWxsb2NfZHNfY29tbWl0cyhjaW5mbywgJmxpc3QpOwotCi0JaWYgKG5yZXEgPT0gMCkgewotCQljaW5mby0+Y29tcGxldGlvbl9vcHMtPmVycm9yX2NsZWFudXAoTkZTX0koaW5vZGUpKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JYXRvbWljX2FkZChucmVxLCAmY2luZm8tPm1kcy0+cnBjc19vdXQpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRhdGEsIHRtcCwgJmxpc3QsIHBhZ2VzKSB7Ci0JCWxpc3RfZGVsX2luaXQoJmRhdGEtPnBhZ2VzKTsKLQkJaWYgKCFkYXRhLT5sc2VnKSB7Ci0JCQluZnNfaW5pdF9jb21taXQoZGF0YSwgbWRzX3BhZ2VzLCBOVUxMLCBjaW5mbyk7Ci0JCQluZnNfaW5pdGlhdGVfY29tbWl0KE5GU19DTElFTlQoaW5vZGUpLCBkYXRhLAotCQkJCQkgICAgZGF0YS0+bWRzX29wcywgaG93LCAwKTsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBwbmZzX2NvbW1pdF9idWNrZXQgKmJ1Y2tldHM7Ci0KLQkJCWJ1Y2tldHMgPSBjaW5mby0+ZHMtPmJ1Y2tldHM7Ci0JCQluZnNfaW5pdF9jb21taXQoZGF0YSwgJmJ1Y2tldHNbZGF0YS0+ZHNfY29tbWl0X2luZGV4XS5jb21taXR0aW5nLCBkYXRhLT5sc2VnLCBjaW5mbyk7Ci0JCQlmaWxlbGF5b3V0X2luaXRpYXRlX2NvbW1pdChkYXRhLCBob3cpOwotCQl9Ci0JfQotb3V0OgotCWNpbmZvLT5kcy0+bmNvbW1pdHRpbmcgPSAwOwotCXJldHVybiBQTkZTX0FUVEVNUFRFRDsKKwlyZXR1cm4gcG5mc19nZW5lcmljX2NvbW1pdF9wYWdlbGlzdChpbm9kZSwgbWRzX3BhZ2VzLCBob3csIGNpbmZvLAorCQkJCQkgICAgZmlsZWxheW91dF9pbml0aWF0ZV9jb21taXQpOwogfQorCiBzdGF0aWMgc3RydWN0IG5mczRfZGV2aWNlaWRfbm9kZSAqCiBmaWxlbGF5b3V0X2FsbG9jX2RldmljZWlkX25vZGUoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwKIAkJc3RydWN0IHBuZnNfZGV2aWNlICpwZGV2LCBnZnBfdCBnZnBfZmxhZ3MpCkBAIC0xNDIxLDkgKzExNjIsOSBAQAogCS5wZ193cml0ZV9vcHMJCT0gJmZpbGVsYXlvdXRfcGdfd3JpdGVfb3BzLAogCS5nZXRfZHNfaW5mbwkJPSAmZmlsZWxheW91dF9nZXRfZHNfaW5mbywKIAkubWFya19yZXF1ZXN0X2NvbW1pdAk9IGZpbGVsYXlvdXRfbWFya19yZXF1ZXN0X2NvbW1pdCwKLQkuY2xlYXJfcmVxdWVzdF9jb21taXQJPSBmaWxlbGF5b3V0X2NsZWFyX3JlcXVlc3RfY29tbWl0LAotCS5zY2FuX2NvbW1pdF9saXN0cwk9IGZpbGVsYXlvdXRfc2Nhbl9jb21taXRfbGlzdHMsCi0JLnJlY292ZXJfY29tbWl0X3JlcXMJPSBmaWxlbGF5b3V0X3JlY292ZXJfY29tbWl0X3JlcXMsCisJLmNsZWFyX3JlcXVlc3RfY29tbWl0CT0gcG5mc19nZW5lcmljX2NsZWFyX3JlcXVlc3RfY29tbWl0LAorCS5zY2FuX2NvbW1pdF9saXN0cwk9IHBuZnNfZ2VuZXJpY19zY2FuX2NvbW1pdF9saXN0cywKKwkucmVjb3Zlcl9jb21taXRfcmVxcwk9IHBuZnNfZ2VuZXJpY19yZWNvdmVyX2NvbW1pdF9yZXFzLAogCS5zZWFyY2hfY29tbWl0X3JlcXMJPSBmaWxlbGF5b3V0X3NlYXJjaF9jb21taXRfcmVxcywKIAkuY29tbWl0X3BhZ2VsaXN0CT0gZmlsZWxheW91dF9jb21taXRfcGFnZWxpc3QsCiAJLnJlYWRfcGFnZWxpc3QJCT0gZmlsZWxheW91dF9yZWFkX3BhZ2VsaXN0LApkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGVsYXlvdXQvZmlsZWxheW91dC5oIGIvZnMvbmZzL2ZpbGVsYXlvdXQvZmlsZWxheW91dC5oCmluZGV4IDdjOWY4MDAuLjI4OTZjYjggMTAwNjQ0Ci0tLSBhL2ZzL25mcy9maWxlbGF5b3V0L2ZpbGVsYXlvdXQuaAorKysgYi9mcy9uZnMvZmlsZWxheW91dC9maWxlbGF5b3V0LmgKQEAgLTMzLDEzICszMyw2IEBACiAjaW5jbHVkZSAiLi4vcG5mcy5oIgogCiAvKgotICogRGVmYXVsdCBkYXRhIHNlcnZlciBjb25uZWN0aW9uIHRpbWVvdXQgYW5kIHJldHJhbnMgdmF1bGVzLgotICogU2V0IGJ5IG1vZHVsZSBwYXJhbXRlcnMgZGF0YXNlcnZlcl90aW1lbyBhbmQgZGF0YXNlcnZlcl9yZXRyYW5zLgotICovCi0jZGVmaW5lIE5GUzRfREVGX0RTX1RJTUVPICAgNjAwIC8qIGluIHRlbnRocyBvZiBhIHNlY29uZCAqLwotI2RlZmluZSBORlM0X0RFRl9EU19SRVRSQU5TIDUKLQotLyoKICAqIEZpZWxkIHRlc3Rpbmcgc2hvd3Mgd2UgbmVlZCB0byBzdXBwb3J0IHVwIHRvIDQwOTYgc3RyaXBlIGluZGljZXMuCiAgKiBXZSBzdG9yZSBlYWNoIGluZGV4IGFzIGEgdTggKHUzMiBvbiB0aGUgd2lyZSkgdG8ga2VlcCB0aGUgbWVtb3J5IGZvb3RwcmludAogICogcmVhc29uYWJsZS4gVGhpcyBpbiB0dXJuIG1lYW5zIHdlIHN1cHBvcnQgYSBtYXhpbXVtIG9mIDI1NgpAQCAtNDgsMzIgKzQxLDExIEBACiAjZGVmaW5lIE5GUzRfUE5GU19NQVhfU1RSSVBFX0NOVCA0MDk2CiAjZGVmaW5lIE5GUzRfUE5GU19NQVhfTVVMVElfQ05UICAyNTYgLyogMjU2IGZpdCBpbnRvIGEgdTggc3RyaXBlX2luZGV4ICovCiAKLS8qIGVycm9yIGNvZGVzIGZvciBpbnRlcm5hbCB1c2UgKi8KLSNkZWZpbmUgTkZTNEVSUl9SRVNFVF9UT19NRFMgICAxMjAwMQotCiBlbnVtIHN0cmlwZXR5cGU0IHsKIAlTVFJJUEVfU1BBUlNFID0gMSwKIAlTVFJJUEVfREVOU0UgPSAyCiB9OwogCi0vKiBJbmRpdmlkdWFsIGlwIGFkZHJlc3MgKi8KLXN0cnVjdCBuZnM0X3BuZnNfZHNfYWRkciB7Ci0Jc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UJZGFfYWRkcjsKLQlzaXplX3QJCQlkYV9hZGRybGVuOwotCXN0cnVjdCBsaXN0X2hlYWQJZGFfbm9kZTsgIC8qIG5mczRfcG5mc19kZXZfaGxpc3QgZGV2X2RzbGlzdCAqLwotCWNoYXIJCQkqZGFfcmVtb3Rlc3RyOwkvKiBodW1hbiByZWFkYWJsZSBhZGRyK3BvcnQgKi8KLX07Ci0KLXN0cnVjdCBuZnM0X3BuZnNfZHMgewotCXN0cnVjdCBsaXN0X2hlYWQJZHNfbm9kZTsgIC8qIG5mczRfcG5mc19kZXZfaGxpc3QgZGV2X2RzbGlzdCAqLwotCWNoYXIJCQkqZHNfcmVtb3Rlc3RyOwkvKiBjb21tYSBzZXAgbGlzdCBvZiBhZGRycyAqLwotCXN0cnVjdCBsaXN0X2hlYWQJZHNfYWRkcnM7Ci0Jc3RydWN0IG5mc19jbGllbnQJKmRzX2NscDsKLQlhdG9taWNfdAkJZHNfY291bnQ7Ci0JdW5zaWduZWQgbG9uZwkJZHNfc3RhdGU7Ci0jZGVmaW5lIE5GUzREU19DT05ORUNUSU5HCTAJLyogZHMgaXMgZXN0YWJsaXNoaW5nIGNvbm5lY3Rpb24gKi8KLX07Ci0KIHN0cnVjdCBuZnM0X2ZpbGVfbGF5b3V0X2RzYWRkciB7CiAJc3RydWN0IG5mczRfZGV2aWNlaWRfbm9kZQlpZF9ub2RlOwogCXUzMgkJCQlzdHJpcGVfY291bnQ7CkBAIC0xMTksMTcgKzkxLDYgQEAKIAlyZXR1cm4gJkZJTEVMQVlPVVRfTFNFRyhsc2VnKS0+ZHNhZGRyLT5pZF9ub2RlOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZpbGVsYXlvdXRfbWFya19kZXZpZF9pbnZhbGlkKHN0cnVjdCBuZnM0X2RldmljZWlkX25vZGUgKm5vZGUpCi17Ci0JdTMyICpwID0gKHUzMiAqKSZub2RlLT5kZXZpY2VpZDsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgIk5GUzogRGV2aWNlaWQgWyV4JXgleCV4XSBtYXJrZWQgb3V0IG9mIHVzZS5cbiIsCi0JCXBbMF0sIHBbMV0sIHBbMl0sIHBbM10pOwotCi0Jc2V0X2JpdChORlNfREVWSUNFSURfSU5WQUxJRCwgJm5vZGUtPmZsYWdzKTsKLX0KLQogc3RhdGljIGlubGluZSBib29sCiBmaWxlbGF5b3V0X3Rlc3RfZGV2aWRfaW52YWxpZChzdHJ1Y3QgbmZzNF9kZXZpY2VpZF9ub2RlICpub2RlKQogewpAQCAtMTQyLDcgKzEwMyw2IEBACiBleHRlcm4gc3RydWN0IG5mc19maCAqCiBuZnM0X2ZsX3NlbGVjdF9kc19maChzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywgdTMyIGopOwogCi1leHRlcm4gdm9pZCBwcmludF9kcyhzdHJ1Y3QgbmZzNF9wbmZzX2RzICpkcyk7CiB1MzIgbmZzNF9mbF9jYWxjX2pfaW5kZXgoc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcsIGxvZmZfdCBvZmZzZXQpOwogdTMyIG5mczRfZmxfY2FsY19kc19pbmRleChzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywgdTMyIGopOwogc3RydWN0IG5mczRfcG5mc19kcyAqbmZzNF9mbF9wcmVwYXJlX2RzKHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLApkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGVsYXlvdXQvZmlsZWxheW91dGRldi5jIGIvZnMvbmZzL2ZpbGVsYXlvdXQvZmlsZWxheW91dGRldi5jCmluZGV4IGJmZWNhYzcuLjRmMzcyZTIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9maWxlbGF5b3V0L2ZpbGVsYXlvdXRkZXYuYworKysgYi9mcy9uZnMvZmlsZWxheW91dC9maWxlbGF5b3V0ZGV2LmMKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3VucnBjL2FkZHIuaD4KIAogI2luY2x1ZGUgIi4uL2ludGVybmFsLmgiCiAjaW5jbHVkZSAiLi4vbmZzNHNlc3Npb24uaCIKQEAgLTQyLDE4MyArNDEsNiBAQAogc3RhdGljIHVuc2lnbmVkIGludCBkYXRhc2VydmVyX3RpbWVvID0gTkZTNF9ERUZfRFNfVElNRU87CiBzdGF0aWMgdW5zaWduZWQgaW50IGRhdGFzZXJ2ZXJfcmV0cmFucyA9IE5GUzRfREVGX0RTX1JFVFJBTlM7CiAKLS8qCi0gKiBEYXRhIHNlcnZlciBjYWNoZQotICoKLSAqIERhdGEgc2VydmVycyBjYW4gYmUgbWFwcGVkIHRvIGRpZmZlcmVudCBkZXZpY2UgaWRzLgotICogbmZzNF9wbmZzX2RzIHJlZmVyZW5jZSBjb3VudGluZwotICogICAtIHNldCB0byAxIG9uIGFsbG9jYXRpb24KLSAqICAgLSBpbmNyZW1lbnRlZCB3aGVuIGEgZGV2aWNlIGlkIG1hcHMgYSBkYXRhIHNlcnZlciBhbHJlYWR5IGluIHRoZSBjYWNoZS4KLSAqICAgLSBkZWNyZW1lbnRlZCB3aGVuIGRldmljZWlkIGlzIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUuCi0gKi8KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmZzNF9kc19jYWNoZV9sb2NrKTsKLXN0YXRpYyBMSVNUX0hFQUQobmZzNF9kYXRhX3NlcnZlcl9jYWNoZSk7Ci0KLS8qIERlYnVnIHJvdXRpbmVzICovCi12b2lkCi1wcmludF9kcyhzdHJ1Y3QgbmZzNF9wbmZzX2RzICpkcykKLXsKLQlpZiAoZHMgPT0gTlVMTCkgewotCQlwcmludGsoIiVzIE5VTEwgZGV2aWNlXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKLQl9Ci0JcHJpbnRrKCIgICAgICAgIGRzICVzXG4iCi0JCSIgICAgICAgIHJlZiBjb3VudCAlZFxuIgotCQkiICAgICAgICBjbGllbnQgJXBcbiIKLQkJIiAgICAgICAgY2xfZXhjaGFuZ2VfZmxhZ3MgJXhcbiIsCi0JCWRzLT5kc19yZW1vdGVzdHIsCi0JCWF0b21pY19yZWFkKCZkcy0+ZHNfY291bnQpLCBkcy0+ZHNfY2xwLAotCQlkcy0+ZHNfY2xwID8gZHMtPmRzX2NscC0+Y2xfZXhjaGFuZ2VfZmxhZ3MgOiAwKTsKLX0KLQotc3RhdGljIGJvb2wKLXNhbWVfc29ja2FkZHIoc3RydWN0IHNvY2thZGRyICphZGRyMSwgc3RydWN0IHNvY2thZGRyICphZGRyMikKLXsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmEsICpiOwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKmE2LCAqYjY7Ci0KLQlpZiAoYWRkcjEtPnNhX2ZhbWlseSAhPSBhZGRyMi0+c2FfZmFtaWx5KQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlzd2l0Y2ggKGFkZHIxLT5zYV9mYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCWEgPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjE7Ci0JCWIgPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjI7Ci0KLQkJaWYgKGEtPnNpbl9hZGRyLnNfYWRkciA9PSBiLT5zaW5fYWRkci5zX2FkZHIgJiYKLQkJICAgIGEtPnNpbl9wb3J0ID09IGItPnNpbl9wb3J0KQotCQkJcmV0dXJuIHRydWU7Ci0JCWJyZWFrOwotCi0JY2FzZSBBRl9JTkVUNjoKLQkJYTYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHIxOwotCQliNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjI7Ci0KLQkJLyogTElOS0xPQ0FMIGFkZHJlc3NlcyBtdXN0IGhhdmUgbWF0Y2hpbmcgc2NvcGVfaWQgKi8KLQkJaWYgKGlwdjZfYWRkcl9zcmNfc2NvcGUoJmE2LT5zaW42X2FkZHIpID09Ci0JCSAgICBJUFY2X0FERFJfU0NPUEVfTElOS0xPQ0FMICYmCi0JCSAgICBhNi0+c2luNl9zY29wZV9pZCAhPSBiNi0+c2luNl9zY29wZV9pZCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZhNi0+c2luNl9hZGRyLCAmYjYtPnNpbjZfYWRkcikgJiYKLQkJICAgIGE2LT5zaW42X3BvcnQgPT0gYjYtPnNpbjZfcG9ydCkKLQkJCXJldHVybiB0cnVlOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWRwcmludGsoIiVzOiB1bmhhbmRsZWQgYWRkcmVzcyBmYW1pbHk6ICV1XG4iLAotCQkJX19mdW5jX18sIGFkZHIxLT5zYV9mYW1pbHkpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbAotX3NhbWVfZGF0YV9zZXJ2ZXJfYWRkcnNfbG9ja2VkKGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmRzYWRkcnMxLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmRzYWRkcnMyKQotewotCXN0cnVjdCBuZnM0X3BuZnNfZHNfYWRkciAqZGExLCAqZGEyOwotCi0JLyogc3RlcCB0aHJvdWdoIGJvdGggbGlzdHMsIGNvbXBhcmluZyBhcyB3ZSBnbyAqLwotCWZvciAoZGExID0gbGlzdF9maXJzdF9lbnRyeShkc2FkZHJzMSwgdHlwZW9mKCpkYTEpLCBkYV9ub2RlKSwKLQkgICAgIGRhMiA9IGxpc3RfZmlyc3RfZW50cnkoZHNhZGRyczIsIHR5cGVvZigqZGEyKSwgZGFfbm9kZSk7Ci0JICAgICBkYTEgIT0gTlVMTCAmJiBkYTIgIT0gTlVMTDsKLQkgICAgIGRhMSA9IGxpc3RfZW50cnkoZGExLT5kYV9ub2RlLm5leHQsIHR5cGVvZigqZGExKSwgZGFfbm9kZSksCi0JICAgICBkYTIgPSBsaXN0X2VudHJ5KGRhMi0+ZGFfbm9kZS5uZXh0LCB0eXBlb2YoKmRhMiksIGRhX25vZGUpKSB7Ci0JCWlmICghc2FtZV9zb2NrYWRkcigoc3RydWN0IHNvY2thZGRyICopJmRhMS0+ZGFfYWRkciwKLQkJCQkgICAoc3RydWN0IHNvY2thZGRyICopJmRhMi0+ZGFfYWRkcikpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChkYTEgPT0gTlVMTCAmJiBkYTIgPT0gTlVMTCkKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qCi0gKiBMb29rdXAgRFMgYnkgYWRkcmVzc2VzLiAgbmZzNF9kc19jYWNoZV9sb2NrIGlzIGhlbGQKLSAqLwotc3RhdGljIHN0cnVjdCBuZnM0X3BuZnNfZHMgKgotX2RhdGFfc2VydmVyX2xvb2t1cF9sb2NrZWQoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqZHNhZGRycykKLXsKLQlzdHJ1Y3QgbmZzNF9wbmZzX2RzICpkczsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZHMsICZuZnM0X2RhdGFfc2VydmVyX2NhY2hlLCBkc19ub2RlKQotCQlpZiAoX3NhbWVfZGF0YV9zZXJ2ZXJfYWRkcnNfbG9ja2VkKCZkcy0+ZHNfYWRkcnMsIGRzYWRkcnMpKQotCQkJcmV0dXJuIGRzOwotCXJldHVybiBOVUxMOwotfQotCi0vKgotICogQ3JlYXRlIGFuIHJwYyBjb25uZWN0aW9uIHRvIHRoZSBuZnM0X3BuZnNfZHMgZGF0YSBzZXJ2ZXIKLSAqIEN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIElQdjQgYW5kIElQdjYgYWRkcmVzc2VzCi0gKi8KLXN0YXRpYyBpbnQKLW5mczRfZHNfY29ubmVjdChzdHJ1Y3QgbmZzX3NlcnZlciAqbWRzX3Nydiwgc3RydWN0IG5mczRfcG5mc19kcyAqZHMpCi17Ci0Jc3RydWN0IG5mc19jbGllbnQgKmNscCA9IEVSUl9QVFIoLUVJTyk7Ci0Jc3RydWN0IG5mczRfcG5mc19kc19hZGRyICpkYTsKLQlpbnQgc3RhdHVzID0gMDsKLQotCWRwcmludGsoIi0tPiAlcyBEUyAlcyBhdV9mbGF2b3IgJWRcbiIsIF9fZnVuY19fLCBkcy0+ZHNfcmVtb3Rlc3RyLAotCQltZHNfc3J2LT5uZnNfY2xpZW50LT5jbF9ycGNjbGllbnQtPmNsX2F1dGgtPmF1X2ZsYXZvcik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRhLCAmZHMtPmRzX2FkZHJzLCBkYV9ub2RlKSB7Ci0JCWRwcmludGsoIiVzOiBEUyAlczogdHJ5aW5nIGFkZHJlc3MgJXNcbiIsCi0JCQlfX2Z1bmNfXywgZHMtPmRzX3JlbW90ZXN0ciwgZGEtPmRhX3JlbW90ZXN0cik7Ci0KLQkJY2xwID0gbmZzNF9zZXRfZHNfY2xpZW50KG1kc19zcnYtPm5mc19jbGllbnQsCi0JCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikmZGEtPmRhX2FkZHIsCi0JCQkJCWRhLT5kYV9hZGRybGVuLCBJUFBST1RPX1RDUCwKLQkJCQkJZGF0YXNlcnZlcl90aW1lbywgZGF0YXNlcnZlcl9yZXRyYW5zKTsKLQkJaWYgKCFJU19FUlIoY2xwKSkKLQkJCWJyZWFrOwotCX0KLQotCWlmIChJU19FUlIoY2xwKSkgewotCQlzdGF0dXMgPSBQVFJfRVJSKGNscCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXN0YXR1cyA9IG5mczRfaW5pdF9kc19zZXNzaW9uKGNscCwgbWRzX3Nydi0+bmZzX2NsaWVudC0+Y2xfbGVhc2VfdGltZSk7Ci0JaWYgKHN0YXR1cykKLQkJZ290byBvdXRfcHV0OwotCi0Jc21wX3dtYigpOwotCWRzLT5kc19jbHAgPSBjbHA7Ci0JZHByaW50aygiJXMgW25ld10gYWRkcjogJXNcbiIsIF9fZnVuY19fLCBkcy0+ZHNfcmVtb3Rlc3RyKTsKLW91dDoKLQlyZXR1cm4gc3RhdHVzOwotb3V0X3B1dDoKLQluZnNfcHV0X2NsaWVudChjbHApOwotCWdvdG8gb3V0OwotfQotCi1zdGF0aWMgdm9pZAotZGVzdHJveV9kcyhzdHJ1Y3QgbmZzNF9wbmZzX2RzICpkcykKLXsKLQlzdHJ1Y3QgbmZzNF9wbmZzX2RzX2FkZHIgKmRhOwotCi0JZHByaW50aygiLS0+ICVzXG4iLCBfX2Z1bmNfXyk7Ci0JaWZkZWJ1ZyhGQUNJTElUWSkKLQkJcHJpbnRfZHMoZHMpOwotCi0JbmZzX3B1dF9jbGllbnQoZHMtPmRzX2NscCk7Ci0KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmRzLT5kc19hZGRycykpIHsKLQkJZGEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkcy0+ZHNfYWRkcnMsCi0JCQkJICAgICAgc3RydWN0IG5mczRfcG5mc19kc19hZGRyLAotCQkJCSAgICAgIGRhX25vZGUpOwotCQlsaXN0X2RlbF9pbml0KCZkYS0+ZGFfbm9kZSk7Ci0JCWtmcmVlKGRhLT5kYV9yZW1vdGVzdHIpOwotCQlrZnJlZShkYSk7Ci0JfQotCi0Ja2ZyZWUoZHMtPmRzX3JlbW90ZXN0cik7Ci0Ja2ZyZWUoZHMpOwotfQotCiB2b2lkCiBuZnM0X2ZsX2ZyZWVfZGV2aWNlaWQoc3RydWN0IG5mczRfZmlsZV9sYXlvdXRfZHNhZGRyICpkc2FkZHIpCiB7CkBAIC0yMjksMjU5ICs1MSwxMyBAQAogCiAJZm9yIChpID0gMDsgaSA8IGRzYWRkci0+ZHNfbnVtOyBpKyspIHsKIAkJZHMgPSBkc2FkZHItPmRzX2xpc3RbaV07Ci0JCWlmIChkcyAhPSBOVUxMKSB7Ci0JCQlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmZHMtPmRzX2NvdW50LAotCQkJCQkJJm5mczRfZHNfY2FjaGVfbG9jaykpIHsKLQkJCQlsaXN0X2RlbF9pbml0KCZkcy0+ZHNfbm9kZSk7Ci0JCQkJc3Bpbl91bmxvY2soJm5mczRfZHNfY2FjaGVfbG9jayk7Ci0JCQkJZGVzdHJveV9kcyhkcyk7Ci0JCQl9Ci0JCX0KKwkJaWYgKGRzICE9IE5VTEwpCisJCQluZnM0X3BuZnNfZHNfcHV0KGRzKTsKIAl9CiAJa2ZyZWUoZHNhZGRyLT5zdHJpcGVfaW5kaWNlcyk7CiAJa2ZyZWUoZHNhZGRyKTsKIH0KIAotLyoKLSAqIENyZWF0ZSBhIHN0cmluZyB3aXRoIGEgaHVtYW4gcmVhZGFibGUgYWRkcmVzcyBhbmQgcG9ydCB0byBhdm9pZAotICogY29tcGxpY2F0ZWQgc2V0dXAgYXJvdW5kIG1hbnkgZHByaW5rcy4KLSAqLwotc3RhdGljIGNoYXIgKgotbmZzNF9wbmZzX3JlbW90ZXN0cihzdHJ1Y3QgbGlzdF9oZWFkICpkc2FkZHJzLCBnZnBfdCBnZnBfZmxhZ3MpCi17Ci0Jc3RydWN0IG5mczRfcG5mc19kc19hZGRyICpkYTsKLQljaGFyICpyZW1vdGVzdHI7Ci0Jc2l6ZV90IGxlbjsKLQljaGFyICpwOwotCi0JbGVuID0gMzsgICAgICAgIC8qICd7JywgJ30nIGFuZCBlb2wgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRhLCBkc2FkZHJzLCBkYV9ub2RlKSB7Ci0JCWxlbiArPSBzdHJsZW4oZGEtPmRhX3JlbW90ZXN0cikgKyAxOyAgICAvKiBzdHJpbmcgcGx1cyBjb21tYSAqLwotCX0KLQotCXJlbW90ZXN0ciA9IGt6YWxsb2MobGVuLCBnZnBfZmxhZ3MpOwotCWlmICghcmVtb3Rlc3RyKQotCQlyZXR1cm4gTlVMTDsKLQotCXAgPSByZW1vdGVzdHI7Ci0JKihwKyspID0gJ3snOwotCWxlbi0tOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZGEsIGRzYWRkcnMsIGRhX25vZGUpIHsKLQkJc2l6ZV90IGxsID0gc3RybGVuKGRhLT5kYV9yZW1vdGVzdHIpOwotCi0JCWlmIChsbCA+IGxlbikKLQkJCWdvdG8gb3V0X2VycjsKLQotCQltZW1jcHkocCwgZGEtPmRhX3JlbW90ZXN0ciwgbGwpOwotCQlwICs9IGxsOwotCQlsZW4gLT0gbGw7Ci0KLQkJaWYgKGxlbiA8IDEpCi0JCQlnb3RvIG91dF9lcnI7Ci0JCSgqcCsrKSA9ICcsJzsKLQkJbGVuLS07Ci0JfQotCWlmIChsZW4gPCAyKQotCQlnb3RvIG91dF9lcnI7Ci0JKihwKyspID0gJ30nOwotCSpwID0gJ1wwJzsKLQlyZXR1cm4gcmVtb3Rlc3RyOwotb3V0X2VycjoKLQlrZnJlZShyZW1vdGVzdHIpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IG5mczRfcG5mc19kcyAqCi1uZnM0X3BuZnNfZHNfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKmRzYWRkcnMsIGdmcF90IGdmcF9mbGFncykKLXsKLQlzdHJ1Y3QgbmZzNF9wbmZzX2RzICp0bXBfZHMsICpkcyA9IE5VTEw7Ci0JY2hhciAqcmVtb3Rlc3RyOwotCi0JaWYgKGxpc3RfZW1wdHkoZHNhZGRycykpIHsKLQkJZHByaW50aygiJXM6IG5vIGFkZHJlc3NlcyBkZWZpbmVkXG4iLCBfX2Z1bmNfXyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWRzID0ga3phbGxvYyhzaXplb2YoKmRzKSwgZ2ZwX2ZsYWdzKTsKLQlpZiAoIWRzKQotCQlnb3RvIG91dDsKLQotCS8qIHRoaXMgaXMgb25seSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0J3Mgb2sgaWYgaXRzIE5VTEwgKi8KLQlyZW1vdGVzdHIgPSBuZnM0X3BuZnNfcmVtb3Rlc3RyKGRzYWRkcnMsIGdmcF9mbGFncyk7Ci0KLQlzcGluX2xvY2soJm5mczRfZHNfY2FjaGVfbG9jayk7Ci0JdG1wX2RzID0gX2RhdGFfc2VydmVyX2xvb2t1cF9sb2NrZWQoZHNhZGRycyk7Ci0JaWYgKHRtcF9kcyA9PSBOVUxMKSB7Ci0JCUlOSVRfTElTVF9IRUFEKCZkcy0+ZHNfYWRkcnMpOwotCQlsaXN0X3NwbGljZV9pbml0KGRzYWRkcnMsICZkcy0+ZHNfYWRkcnMpOwotCQlkcy0+ZHNfcmVtb3Rlc3RyID0gcmVtb3Rlc3RyOwotCQlhdG9taWNfc2V0KCZkcy0+ZHNfY291bnQsIDEpOwotCQlJTklUX0xJU1RfSEVBRCgmZHMtPmRzX25vZGUpOwotCQlkcy0+ZHNfY2xwID0gTlVMTDsKLQkJbGlzdF9hZGQoJmRzLT5kc19ub2RlLCAmbmZzNF9kYXRhX3NlcnZlcl9jYWNoZSk7Ci0JCWRwcmludGsoIiVzIGFkZCBuZXcgZGF0YSBzZXJ2ZXIgJXNcbiIsIF9fZnVuY19fLAotCQkJZHMtPmRzX3JlbW90ZXN0cik7Ci0JfSBlbHNlIHsKLQkJa2ZyZWUocmVtb3Rlc3RyKTsKLQkJa2ZyZWUoZHMpOwotCQlhdG9taWNfaW5jKCZ0bXBfZHMtPmRzX2NvdW50KTsKLQkJZHByaW50aygiJXMgZGF0YSBzZXJ2ZXIgJXMgZm91bmQsIGluYydlZCBkc19jb3VudCB0byAlZFxuIiwKLQkJCV9fZnVuY19fLCB0bXBfZHMtPmRzX3JlbW90ZXN0ciwKLQkJCWF0b21pY19yZWFkKCZ0bXBfZHMtPmRzX2NvdW50KSk7Ci0JCWRzID0gdG1wX2RzOwotCX0KLQlzcGluX3VubG9jaygmbmZzNF9kc19jYWNoZV9sb2NrKTsKLW91dDoKLQlyZXR1cm4gZHM7Ci19Ci0KLS8qCi0gKiBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBpcHY0LCBpcHY2IGFuZCBvbmUgbXVsdGktcGF0aCBhZGRyZXNzLgotICovCi1zdGF0aWMgc3RydWN0IG5mczRfcG5mc19kc19hZGRyICoKLWRlY29kZV9kc19hZGRyKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHhkcl9zdHJlYW0gKnN0cmVhbXAsIGdmcF90IGdmcF9mbGFncykKLXsKLQlzdHJ1Y3QgbmZzNF9wbmZzX2RzX2FkZHIgKmRhID0gTlVMTDsKLQljaGFyICpidWYsICpwb3J0c3RyOwotCV9fYmUxNiBwb3J0OwotCWludCBubGVuLCBybGVuOwotCWludCB0bXBbMl07Ci0JX19iZTMyICpwOwotCWNoYXIgKm5ldGlkLCAqbWF0Y2hfbmV0aWQ7Ci0Jc2l6ZV90IGxlbiwgbWF0Y2hfbmV0aWRfbGVuOwotCWNoYXIgKnN0YXJ0c2VwID0gIiI7Ci0JY2hhciAqZW5kc2VwID0gIiI7Ci0KLQotCS8qIHJfbmV0aWQgKi8KLQlwID0geGRyX2lubGluZV9kZWNvZGUoc3RyZWFtcCwgNCk7Ci0JaWYgKHVubGlrZWx5KCFwKSkKLQkJZ290byBvdXRfZXJyOwotCW5sZW4gPSBiZTMyX3RvX2NwdXAocCsrKTsKLQotCXAgPSB4ZHJfaW5saW5lX2RlY29kZShzdHJlYW1wLCBubGVuKTsKLQlpZiAodW5saWtlbHkoIXApKQotCQlnb3RvIG91dF9lcnI7Ci0KLQluZXRpZCA9IGttYWxsb2MobmxlbisxLCBnZnBfZmxhZ3MpOwotCWlmICh1bmxpa2VseSghbmV0aWQpKQotCQlnb3RvIG91dF9lcnI7Ci0KLQluZXRpZFtubGVuXSA9ICdcMCc7Ci0JbWVtY3B5KG5ldGlkLCBwLCBubGVuKTsKLQotCS8qIHJfYWRkcjogaXAvaXA2YWRkciB3aXRoIHBvcnQgaW4gZGVjIG9jdGV0cyAtIHNlZSBSRkMgNTY2NSAqLwotCXAgPSB4ZHJfaW5saW5lX2RlY29kZShzdHJlYW1wLCA0KTsKLQlpZiAodW5saWtlbHkoIXApKQotCQlnb3RvIG91dF9mcmVlX25ldGlkOwotCXJsZW4gPSBiZTMyX3RvX2NwdXAocCk7Ci0KLQlwID0geGRyX2lubGluZV9kZWNvZGUoc3RyZWFtcCwgcmxlbik7Ci0JaWYgKHVubGlrZWx5KCFwKSkKLQkJZ290byBvdXRfZnJlZV9uZXRpZDsKLQotCS8qIHBvcnQgaXMgIi5BQkMuREVGIiwgOCBjaGFycyBtYXggKi8KLQlpZiAocmxlbiA+IElORVQ2X0FERFJTVFJMRU4gKyBJUFY2X1NDT1BFX0lEX0xFTiArIDgpIHsKLQkJZHByaW50aygiJXM6IEludmFsaWQgYWRkcmVzcywgbGVuZ3RoICVkXG4iLCBfX2Z1bmNfXywKLQkJCXJsZW4pOwotCQlnb3RvIG91dF9mcmVlX25ldGlkOwotCX0KLQlidWYgPSBrbWFsbG9jKHJsZW4gKyAxLCBnZnBfZmxhZ3MpOwotCWlmICghYnVmKSB7Ci0JCWRwcmludGsoIiVzOiBOb3QgZW5vdWdoIG1lbW9yeVxuIiwgX19mdW5jX18pOwotCQlnb3RvIG91dF9mcmVlX25ldGlkOwotCX0KLQlidWZbcmxlbl0gPSAnXDAnOwotCW1lbWNweShidWYsIHAsIHJsZW4pOwotCi0JLyogcmVwbGFjZSBwb3J0ICcuJyB3aXRoICctJyAqLwotCXBvcnRzdHIgPSBzdHJyY2hyKGJ1ZiwgJy4nKTsKLQlpZiAoIXBvcnRzdHIpIHsKLQkJZHByaW50aygiJXM6IEZhaWxlZCBmaW5kaW5nIGV4cGVjdGVkIGRvdCBpbiBwb3J0XG4iLAotCQkJX19mdW5jX18pOwotCQlnb3RvIG91dF9mcmVlX2J1ZjsKLQl9Ci0JKnBvcnRzdHIgPSAnLSc7Ci0KLQkvKiBmaW5kICcuJyBiZXR3ZWVuIGFkZHJlc3MgYW5kIHBvcnQgKi8KLQlwb3J0c3RyID0gc3RycmNocihidWYsICcuJyk7Ci0JaWYgKCFwb3J0c3RyKSB7Ci0JCWRwcmludGsoIiVzOiBGYWlsZWQgZmluZGluZyBleHBlY3RlZCBkb3QgYmV0d2VlbiBhZGRyZXNzIGFuZCAiCi0JCQkicG9ydFxuIiwgX19mdW5jX18pOwotCQlnb3RvIG91dF9mcmVlX2J1ZjsKLQl9Ci0JKnBvcnRzdHIgPSAnXDAnOwotCi0JZGEgPSBremFsbG9jKHNpemVvZigqZGEpLCBnZnBfZmxhZ3MpOwotCWlmICh1bmxpa2VseSghZGEpKQotCQlnb3RvIG91dF9mcmVlX2J1ZjsKLQotCUlOSVRfTElTVF9IRUFEKCZkYS0+ZGFfbm9kZSk7Ci0KLQlpZiAoIXJwY19wdG9uKG5ldCwgYnVmLCBwb3J0c3RyLWJ1ZiwgKHN0cnVjdCBzb2NrYWRkciAqKSZkYS0+ZGFfYWRkciwKLQkJICAgICAgc2l6ZW9mKGRhLT5kYV9hZGRyKSkpIHsKLQkJZHByaW50aygiJXM6IGVycm9yIHBhcnNpbmcgYWRkcmVzcyAlc1xuIiwgX19mdW5jX18sIGJ1Zik7Ci0JCWdvdG8gb3V0X2ZyZWVfZGE7Ci0JfQotCi0JcG9ydHN0cisrOwotCXNzY2FuZihwb3J0c3RyLCAiJWQtJWQiLCAmdG1wWzBdLCAmdG1wWzFdKTsKLQlwb3J0ID0gaHRvbnMoKHRtcFswXSA8PCA4KSB8ICh0bXBbMV0pKTsKLQotCXN3aXRjaCAoZGEtPmRhX2FkZHIuc3NfZmFtaWx5KSB7Ci0JY2FzZSBBRl9JTkVUOgotCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZkYS0+ZGFfYWRkciktPnNpbl9wb3J0ID0gcG9ydDsKLQkJZGEtPmRhX2FkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLQkJbWF0Y2hfbmV0aWQgPSAidGNwIjsKLQkJbWF0Y2hfbmV0aWRfbGVuID0gMzsKLQkJYnJlYWs7Ci0KLQljYXNlIEFGX0lORVQ2OgotCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmZGEtPmRhX2FkZHIpLT5zaW42X3BvcnQgPSBwb3J0OwotCQlkYS0+ZGFfYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLQkJbWF0Y2hfbmV0aWQgPSAidGNwNiI7Ci0JCW1hdGNoX25ldGlkX2xlbiA9IDQ7Ci0JCXN0YXJ0c2VwID0gIlsiOwotCQllbmRzZXAgPSAiXSI7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZHByaW50aygiJXM6IHVuc3VwcG9ydGVkIGFkZHJlc3MgZmFtaWx5OiAldVxuIiwKLQkJCV9fZnVuY19fLCBkYS0+ZGFfYWRkci5zc19mYW1pbHkpOwotCQlnb3RvIG91dF9mcmVlX2RhOwotCX0KLQotCWlmIChubGVuICE9IG1hdGNoX25ldGlkX2xlbiB8fCBzdHJuY21wKG5ldGlkLCBtYXRjaF9uZXRpZCwgbmxlbikpIHsKLQkJZHByaW50aygiJXM6IEVSUk9SOiByX25ldGlkIFwiJXNcIiAhPSBcIiVzXCJcbiIsCi0JCQlfX2Z1bmNfXywgbmV0aWQsIG1hdGNoX25ldGlkKTsKLQkJZ290byBvdXRfZnJlZV9kYTsKLQl9Ci0KLQkvKiBzYXZlIGh1bWFuIHJlYWRhYmxlIGFkZHJlc3MgKi8KLQlsZW4gPSBzdHJsZW4oc3RhcnRzZXApICsgc3RybGVuKGJ1ZikgKyBzdHJsZW4oZW5kc2VwKSArIDc7Ci0JZGEtPmRhX3JlbW90ZXN0ciA9IGt6YWxsb2MobGVuLCBnZnBfZmxhZ3MpOwotCi0JLyogTlVMTCBpcyBvaywgb25seSB1c2VkIGZvciBkcHJpbnRrICovCi0JaWYgKGRhLT5kYV9yZW1vdGVzdHIpCi0JCXNucHJpbnRmKGRhLT5kYV9yZW1vdGVzdHIsIGxlbiwgIiVzJXMlczoldSIsIHN0YXJ0c2VwLAotCQkJIGJ1ZiwgZW5kc2VwLCBudG9ocyhwb3J0KSk7Ci0KLQlkcHJpbnRrKCIlczogUGFyc2VkIERTIGFkZHIgJXNcbiIsIF9fZnVuY19fLCBkYS0+ZGFfcmVtb3Rlc3RyKTsKLQlrZnJlZShidWYpOwotCWtmcmVlKG5ldGlkKTsKLQlyZXR1cm4gZGE7Ci0KLW91dF9mcmVlX2RhOgotCWtmcmVlKGRhKTsKLW91dF9mcmVlX2J1ZjoKLQlkcHJpbnRrKCIlczogRXJyb3IgcGFyc2luZyBEUyBhZGRyOiAlc1xuIiwgX19mdW5jX18sIGJ1Zik7Ci0Ja2ZyZWUoYnVmKTsKLW91dF9mcmVlX25ldGlkOgotCWtmcmVlKG5ldGlkKTsKLW91dF9lcnI6Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KIC8qIERlY29kZSBvcGFxdWUgZGV2aWNlIGRhdGEgYW5kIHJldHVybiB0aGUgcmVzdWx0ICovCiBzdHJ1Y3QgbmZzNF9maWxlX2xheW91dF9kc2FkZHIgKgogbmZzNF9mbF9hbGxvY19kZXZpY2VpZF9ub2RlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBwbmZzX2RldmljZSAqcGRldiwKQEAgLTU4NCw4ICsxNjAsOCBAQAogCiAJCW1wX2NvdW50ID0gYmUzMl90b19jcHVwKHApOyAvKiBtdWx0aXBhdGggY291bnQgKi8KIAkJZm9yIChqID0gMDsgaiA8IG1wX2NvdW50OyBqKyspIHsKLQkJCWRhID0gZGVjb2RlX2RzX2FkZHIoc2VydmVyLT5uZnNfY2xpZW50LT5jbF9uZXQsCi0JCQkJCSAgICAmc3RyZWFtLCBnZnBfZmxhZ3MpOworCQkJZGEgPSBuZnM0X2RlY29kZV9tcF9kc19hZGRyKHNlcnZlci0+bmZzX2NsaWVudC0+Y2xfbmV0LAorCQkJCQkJICAgICZzdHJlYW0sIGdmcF9mbGFncyk7CiAJCQlpZiAoZGEpCiAJCQkJbGlzdF9hZGRfdGFpbCgmZGEtPmRhX25vZGUsICZkc2FkZHJzKTsKIAkJfQpAQCAtNjgxLDIyICsyNTcsNyBAQAogCXJldHVybiBmbHNlZy0+ZmhfYXJyYXlbaV07CiB9CiAKLXN0YXRpYyB2b2lkIG5mczRfd2FpdF9kc19jb25uZWN0KHN0cnVjdCBuZnM0X3BuZnNfZHMgKmRzKQotewotCW1pZ2h0X3NsZWVwKCk7Ci0Jd2FpdF9vbl9iaXRfYWN0aW9uKCZkcy0+ZHNfc3RhdGUsIE5GUzREU19DT05ORUNUSU5HLAotCQkJICAgbmZzX3dhaXRfYml0X2tpbGxhYmxlLCBUQVNLX0tJTExBQkxFKTsKLX0KLQotc3RhdGljIHZvaWQgbmZzNF9jbGVhcl9kc19jb25uX2JpdChzdHJ1Y3QgbmZzNF9wbmZzX2RzICpkcykKLXsKLQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKLQljbGVhcl9iaXQoTkZTNERTX0NPTk5FQ1RJTkcsICZkcy0+ZHNfc3RhdGUpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7Ci0Jd2FrZV91cF9iaXQoJmRzLT5kc19zdGF0ZSwgTkZTNERTX0NPTk5FQ1RJTkcpOwotfQotCi0KKy8qIFVwb24gcmV0dXJuLCBlaXRoZXIgZHMgaXMgY29ubmVjdGVkLCBvciBkcyBpcyBOVUxMICovCiBzdHJ1Y3QgbmZzNF9wbmZzX2RzICoKIG5mczRfZmxfcHJlcGFyZV9kcyhzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywgdTMyIGRzX2lkeCkKIHsKQEAgLTcwNCwyOSArMjY1LDIzIEBACiAJc3RydWN0IG5mczRfcG5mc19kcyAqZHMgPSBkc2FkZHItPmRzX2xpc3RbZHNfaWR4XTsKIAlzdHJ1Y3QgbmZzNF9kZXZpY2VpZF9ub2RlICpkZXZpZCA9IEZJTEVMQVlPVVRfREVWSURfTk9ERShsc2VnKTsKIAlzdHJ1Y3QgbmZzNF9wbmZzX2RzICpyZXQgPSBkczsKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqcyA9IE5GU19TRVJWRVIobHNlZy0+cGxzX2xheW91dC0+cGxoX2lub2RlKTsKIAogCWlmIChkcyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiTkZTOiAlczogTm8gZGF0YSBzZXJ2ZXIgZm9yIG9mZnNldCBpbmRleCAlZFxuIiwKIAkJCV9fZnVuY19fLCBkc19pZHgpOwotCQlmaWxlbGF5b3V0X21hcmtfZGV2aWRfaW52YWxpZChkZXZpZCk7CisJCXBuZnNfZ2VuZXJpY19tYXJrX2RldmlkX2ludmFsaWQoZGV2aWQpOwogCQlnb3RvIG91dDsKIAl9CiAJc21wX3JtYigpOwogCWlmIChkcy0+ZHNfY2xwKQogCQlnb3RvIG91dF90ZXN0X2RldmlkOwogCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoTkZTNERTX0NPTk5FQ1RJTkcsICZkcy0+ZHNfc3RhdGUpID09IDApIHsKLQkJc3RydWN0IG5mc19zZXJ2ZXIgKnMgPSBORlNfU0VSVkVSKGxzZWctPnBsc19sYXlvdXQtPnBsaF9pbm9kZSk7Ci0JCWludCBlcnI7CisJbmZzNF9wbmZzX2RzX2Nvbm5lY3QocywgZHMsIGRldmlkLCBkYXRhc2VydmVyX3RpbWVvLAorCQkJICAgICBkYXRhc2VydmVyX3JldHJhbnMsIDQsCisJCQkgICAgIHMtPm5mc19jbGllbnQtPmNsX21pbm9ydmVyc2lvbiwKKwkJCSAgICAgcy0+bmZzX2NsaWVudC0+Y2xfcnBjY2xpZW50LT5jbF9hdXRoLT5hdV9mbGF2b3IpOwogCi0JCWVyciA9IG5mczRfZHNfY29ubmVjdChzLCBkcyk7Ci0JCWlmIChlcnIpCi0JCQluZnM0X21hcmtfZGV2aWNlaWRfdW5hdmFpbGFibGUoZGV2aWQpOwotCQluZnM0X2NsZWFyX2RzX2Nvbm5fYml0KGRzKTsKLQl9IGVsc2UgewotCQkvKiBFaXRoZXIgZHMgaXMgY29ubmVjdGVkLCBvciBkcyBpcyBOVUxMICovCi0JCW5mczRfd2FpdF9kc19jb25uZWN0KGRzKTsKLQl9CiBvdXRfdGVzdF9kZXZpZDoKIAlpZiAoZmlsZWxheW91dF90ZXN0X2RldmlkX3VuYXZhaWxhYmxlKGRldmlkKSkKIAkJcmV0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL25mcy9mbGV4ZmlsZWxheW91dC9NYWtlZmlsZSBiL2ZzL25mcy9mbGV4ZmlsZWxheW91dC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDJjOWY2Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvbmZzL2ZsZXhmaWxlbGF5b3V0L01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIHBORlMgRmxleGZpbGUgTGF5b3V0IERyaXZlciBrZXJuZWwgbW9kdWxlCisjCitvYmotJChDT05GSUdfUE5GU19GTEVYRklMRV9MQVlPVVQpICs9IG5mc19sYXlvdXRfZmxleGZpbGVzLm8KK25mc19sYXlvdXRfZmxleGZpbGVzLXkgOj0gZmxleGZpbGVsYXlvdXQubyBmbGV4ZmlsZWxheW91dGRldi5vCmRpZmYgLS1naXQgYS9mcy9uZnMvZmxleGZpbGVsYXlvdXQvZmxleGZpbGVsYXlvdXQuYyBiL2ZzL25mcy9mbGV4ZmlsZWxheW91dC9mbGV4ZmlsZWxheW91dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOWZiN2QKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9uZnMvZmxleGZpbGVsYXlvdXQvZmxleGZpbGVsYXlvdXQuYwpAQCAtMCwwICsxLDE1NzQgQEAKKy8qCisgKiBNb2R1bGUgZm9yIHBuZnMgZmxleGZpbGUgbGF5b3V0IGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIFByaW1hcnkgRGF0YSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRhbyBQZW5nIDxiZXJnd29sZkBwcmltYXJ5ZGF0YS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25mc19wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvbWV0cmljcy5oPgorI2luY2x1ZGUgPGxpbnV4L25mc19pZG1hcC5oPgorCisjaW5jbHVkZSAiZmxleGZpbGVsYXlvdXQuaCIKKyNpbmNsdWRlICIuLi9uZnM0c2Vzc2lvbi5oIgorI2luY2x1ZGUgIi4uL2ludGVybmFsLmgiCisjaW5jbHVkZSAiLi4vZGVsZWdhdGlvbi5oIgorI2luY2x1ZGUgIi4uL25mczR0cmFjZS5oIgorI2luY2x1ZGUgIi4uL2lvc3RhdC5oIgorI2luY2x1ZGUgIi4uL25mcy5oIgorCisjZGVmaW5lIE5GU0RCR19GQUNJTElUWSAgICAgICAgIE5GU0RCR19QTkZTX0xECisKKyNkZWZpbmUgRkZfTEFZT1VUX1BPTExfUkVUUllfTUFYICAgICAoMTUqSFopCisKK3N0YXRpYyBzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICoKK2ZmX2xheW91dF9hbGxvY19sYXlvdXRfaGRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGdmcF90IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgbmZzNF9mbGV4ZmlsZV9sYXlvdXQgKmZmbDsKKworCWZmbCA9IGt6YWxsb2Moc2l6ZW9mKCpmZmwpLCBnZnBfZmxhZ3MpOworCWlmIChmZmwpIHsKKwkJSU5JVF9MSVNUX0hFQUQoJmZmbC0+ZXJyb3JfbGlzdCk7CisJCXJldHVybiAmZmZsLT5nZW5lcmljX2hkcjsKKwl9IGVsc2UKKwkJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitmZl9sYXlvdXRfZnJlZV9sYXlvdXRfaGRyKHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvKQoreworCXN0cnVjdCBuZnM0X2ZmX2xheW91dF9kc19lcnIgKmVyciwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXJyLCBuLCAmRkZfTEFZT1VUX0ZST01fSERSKGxvKS0+ZXJyb3JfbGlzdCwKKwkJCQkgbGlzdCkgeworCQlsaXN0X2RlbCgmZXJyLT5saXN0KTsKKwkJa2ZyZWUoZXJyKTsKKwl9CisJa2ZyZWUoRkZfTEFZT1VUX0ZST01fSERSKGxvKSk7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX3N0YXRlaWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgbmZzNF9zdGF0ZWlkICpzdGF0ZWlkKQoreworCV9fYmUzMiAqcDsKKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIE5GUzRfU1RBVEVJRF9TSVpFKTsKKwlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCW1lbWNweShzdGF0ZWlkLCBwLCBORlM0X1NUQVRFSURfU0laRSk7CisJZHByaW50aygiJXM6IHN0YXRlaWQgaWQ9IFsleCV4JXgleF1cbiIsIF9fZnVuY19fLAorCQlwWzBdLCBwWzFdLCBwWzJdLCBwWzNdKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWNvZGVfZGV2aWNlaWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mczRfZGV2aWNlaWQgKmRldmlkKQoreworCV9fYmUzMiAqcDsKKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIE5GUzRfREVWSUNFSUQ0X1NJWkUpOworCWlmICh1bmxpa2VseSghcCkpCisJCXJldHVybiAtRU5PQlVGUzsKKwltZW1jcHkoZGV2aWQsIHAsIE5GUzRfREVWSUNFSUQ0X1NJWkUpOworCW5mczRfcHJpbnRfZGV2aWNlaWQoZGV2aWQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlY29kZV9uZnNfZmgoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19maCAqZmgpCit7CisJX19iZTMyICpwOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCWZoLT5zaXplID0gYmUzMl90b19jcHVwKHArKyk7CisJaWYgKGZoLT5zaXplID4gc2l6ZW9mKHN0cnVjdCBuZnNfZmgpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTkZTIGZsZXhmaWxlczogVG9vIGJpZyBmaCByZWNlaXZlZCAlZFxuIiwKKwkJICAgICAgIGZoLT5zaXplKTsKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CisJfQorCS8qIGZoLmRhdGEgKi8KKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBmaC0+c2l6ZSk7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCW1lbWNweSgmZmgtPmRhdGEsIHAsIGZoLT5zaXplKTsKKwlkcHJpbnRrKCIlczogZmggbGVuICVkXG4iLCBfX2Z1bmNfXywgZmgtPnNpemUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDdXJyZW50bHkgb25seSBzdHJpbmdpZmllZCB1aWRzIGFuZCBnaWRzIGFyZSBhY2NlcHRlZC4KKyAqIEkuZS4sIGtlcmJlcm9zIGlzIG5vdCBzdXBwb3J0ZWQgdG8gdGhlIERTZXMsIHNvIG5vIHByaWNpcGFscy4KKyAqCisgKiBUaGF0IG1lYW5zIHRoYXQgb25lIGNvbW1vbiBmdW5jdGlvbiB3aWxsIHN1ZmZpY2UsIGJ1dCB3aGVuCisgKiBwcmluY2lwYWxzIGFyZSBhZGRlZCwgdGhpcyBzaG91bGQgYmUgc3BsaXQgdG8gYWNjb21vZGF0ZQorICogY2FsbHMgdG8gYm90aCBuZnNfbWFwX25hbWVfdG9fdWlkKCkgYW5kIG5mc19tYXBfZ3JvdXBfdG9fZ2lkKCkuCisgKi8KK3N0YXRpYyBpbnQKK2RlY29kZV9uYW1lKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHUzMiAqaWQpCit7CisJX19iZTMyICpwOworCWludCBsZW47CisKKwkvKiBvcGFxdWVfbGVuZ3RoKDQpKi8KKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlyZXR1cm4gLUVOT0JVRlM7CisJbGVuID0gYmUzMl90b19jcHVwKHArKyk7CisJaWYgKGxlbiA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZHByaW50aygiJXM6IGxlbiAldVxuIiwgX19mdW5jX18sIGxlbik7CisKKwkvKiBvcGFxdWUgYm9keSAqLworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIGxlbik7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJaWYgKCFuZnNfbWFwX3N0cmluZ190b19udW1lcmljKChjaGFyICopcCwgbGVuLCBpZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZmX2xheW91dF9mcmVlX21pcnJvcl9hcnJheShzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfc2VnbWVudCAqZmxzKQoreworCWludCBpOworCisJaWYgKGZscy0+bWlycm9yX2FycmF5KSB7CisJCWZvciAoaSA9IDA7IGkgPCBmbHMtPm1pcnJvcl9hcnJheV9jbnQ7IGkrKykgeworCQkJLyogbm9ybWFsbHkgbWlycm9yX2RzIGlzIGZyZWVkIGluCisJCQkgKiAuZnJlZV9kZXZpY2VpZF9ub2RlIGJ1dCB3ZSBzdGlsbCBkbyBpdCBoZXJlCisJCQkgKiBmb3IgLmFsbG9jX2xzZWcgZXJyb3IgcGF0aCAqLworCQkJaWYgKGZscy0+bWlycm9yX2FycmF5W2ldKSB7CisJCQkJa2ZyZWUoZmxzLT5taXJyb3JfYXJyYXlbaV0tPmZoX3ZlcnNpb25zKTsKKwkJCQluZnM0X2ZmX2xheW91dF9wdXRfZGV2aWNlaWQoZmxzLT5taXJyb3JfYXJyYXlbaV0tPm1pcnJvcl9kcyk7CisJCQkJa2ZyZWUoZmxzLT5taXJyb3JfYXJyYXlbaV0pOworCQkJfQorCQl9CisJCWtmcmVlKGZscy0+bWlycm9yX2FycmF5KTsKKwkJZmxzLT5taXJyb3JfYXJyYXkgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCBmZl9sYXlvdXRfY2hlY2tfbGF5b3V0KHN0cnVjdCBuZnM0X2xheW91dGdldF9yZXMgKmxncikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOworCisJLyogRklYTUU6IHJlbW92ZSB0aGlzIGNoZWNrIHdoZW4gbGF5b3V0IHNlZ21lbnQgc3VwcG9ydCBpcyBhZGRlZCAqLworCWlmIChsZ3ItPnJhbmdlLm9mZnNldCAhPSAwIHx8CisJICAgIGxnci0+cmFuZ2UubGVuZ3RoICE9IE5GUzRfTUFYX1VJTlQ2NCkgeworCQlkcHJpbnRrKCIlcyBPbmx5IHdob2xlIGZpbGUgbGF5b3V0cyBzdXBwb3J0ZWQuIFVzZSBNRFMgaS9vXG4iLAorCQkJX19mdW5jX18pOworCQlyZXQgPSAtRUlOVkFMOworCX0KKworCWRwcmludGsoIi0tPiAlcyByZXR1cm5zICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfZmZfbGF5b3V0X2ZyZWVfbHNlZyhzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfc2VnbWVudCAqZmxzKQoreworCWlmIChmbHMpIHsKKwkJZmZfbGF5b3V0X2ZyZWVfbWlycm9yX2FycmF5KGZscyk7CisJCWtmcmVlKGZscyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmZl9sYXlvdXRfc29ydF9taXJyb3JzKHN0cnVjdCBuZnM0X2ZmX2xheW91dF9zZWdtZW50ICpmbHMpCit7CisJc3RydWN0IG5mczRfZmZfbGF5b3V0X21pcnJvciAqdG1wOworCWludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IGZscy0+bWlycm9yX2FycmF5X2NudCAtIDE7IGkrKykgeworCQlmb3IgKGogPSBpICsgMTsgaiA8IGZscy0+bWlycm9yX2FycmF5X2NudDsgaisrKQorCQkJaWYgKGZscy0+bWlycm9yX2FycmF5W2ldLT5lZmZpY2llbmN5IDwKKwkJCSAgICBmbHMtPm1pcnJvcl9hcnJheVtqXS0+ZWZmaWNpZW5jeSkgeworCQkJCXRtcCA9IGZscy0+bWlycm9yX2FycmF5W2ldOworCQkJCWZscy0+bWlycm9yX2FycmF5W2ldID0gZmxzLT5taXJyb3JfYXJyYXlbal07CisJCQkJZmxzLT5taXJyb3JfYXJyYXlbal0gPSB0bXA7CisJCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKgorZmZfbGF5b3V0X2FsbG9jX2xzZWcoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbGgsCisJCSAgICAgc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyAqbGdyLAorCQkgICAgIGdmcF90IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqcmV0OworCXN0cnVjdCBuZnM0X2ZmX2xheW91dF9zZWdtZW50ICpmbHMgPSBOVUxMOworCXN0cnVjdCB4ZHJfc3RyZWFtIHN0cmVhbTsKKwlzdHJ1Y3QgeGRyX2J1ZiBidWY7CisJc3RydWN0IHBhZ2UgKnNjcmF0Y2g7CisJdTY0IHN0cmlwZV91bml0OworCXUzMiBtaXJyb3JfYXJyYXlfY250OworCV9fYmUzMiAqcDsKKwlpbnQgaSwgcmM7CisKKwlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKKwlzY3JhdGNoID0gYWxsb2NfcGFnZShnZnBfZmxhZ3MpOworCWlmICghc2NyYXRjaCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwl4ZHJfaW5pdF9kZWNvZGVfcGFnZXMoJnN0cmVhbSwgJmJ1ZiwgbGdyLT5sYXlvdXRwLT5wYWdlcywKKwkJCSAgICAgIGxnci0+bGF5b3V0cC0+bGVuKTsKKwl4ZHJfc2V0X3NjcmF0Y2hfYnVmZmVyKCZzdHJlYW0sIHBhZ2VfYWRkcmVzcyhzY3JhdGNoKSwgUEFHRV9TSVpFKTsKKworCS8qIHN0cmlwZSB1bml0IGFuZCBtaXJyb3JfYXJyYXlfY250ICovCisJcmMgPSAtRUlPOworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSgmc3RyZWFtLCA4ICsgNCk7CisJaWYgKCFwKQorCQlnb3RvIG91dF9lcnJfZnJlZTsKKworCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZzdHJpcGVfdW5pdCk7CisJbWlycm9yX2FycmF5X2NudCA9IGJlMzJfdG9fY3B1cChwKyspOworCWRwcmludGsoIiVzOiBzdHJpcGVfdW5pdD0lbGx1IG1pcnJvcl9hcnJheV9jbnQ9JXVcbiIsIF9fZnVuY19fLAorCQlzdHJpcGVfdW5pdCwgbWlycm9yX2FycmF5X2NudCk7CisKKwlpZiAobWlycm9yX2FycmF5X2NudCA+IE5GUzRfRkxFWEZJTEVfTEFZT1VUX01BWF9NSVJST1JfQ05UIHx8CisJICAgIG1pcnJvcl9hcnJheV9jbnQgPT0gMCkKKwkJZ290byBvdXRfZXJyX2ZyZWU7CisKKwlyYyA9IC1FTk9NRU07CisJZmxzID0ga3phbGxvYyhzaXplb2YoKmZscyksIGdmcF9mbGFncyk7CisJaWYgKCFmbHMpCisJCWdvdG8gb3V0X2Vycl9mcmVlOworCisJZmxzLT5taXJyb3JfYXJyYXlfY250ID0gbWlycm9yX2FycmF5X2NudDsKKwlmbHMtPnN0cmlwZV91bml0ID0gc3RyaXBlX3VuaXQ7CisJZmxzLT5taXJyb3JfYXJyYXkgPSBrY2FsbG9jKGZscy0+bWlycm9yX2FycmF5X2NudCwKKwkJCQkgICAgc2l6ZW9mKGZscy0+bWlycm9yX2FycmF5WzBdKSwgZ2ZwX2ZsYWdzKTsKKwlpZiAoZmxzLT5taXJyb3JfYXJyYXkgPT0gTlVMTCkKKwkJZ290byBvdXRfZXJyX2ZyZWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgZmxzLT5taXJyb3JfYXJyYXlfY250OyBpKyspIHsKKwkJc3RydWN0IG5mczRfZGV2aWNlaWQgZGV2aWQ7CisJCXN0cnVjdCBuZnM0X2RldmljZWlkX25vZGUgKmlkbm9kZTsKKwkJdTMyIGRzX2NvdW50OworCQl1MzIgZmhfY291bnQ7CisJCWludCBqOworCisJCXJjID0gLUVJTzsKKwkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKCZzdHJlYW0sIDQpOworCQlpZiAoIXApCisJCQlnb3RvIG91dF9lcnJfZnJlZTsKKwkJZHNfY291bnQgPSBiZTMyX3RvX2NwdXAocCk7CisKKwkJLyogRklYTUU6IGFsbG93IGZvciBzdHJpcGluZz8gKi8KKwkJaWYgKGRzX2NvdW50ICE9IDEpCisJCQlnb3RvIG91dF9lcnJfZnJlZTsKKworCQlmbHMtPm1pcnJvcl9hcnJheVtpXSA9CisJCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfbWlycm9yKSwKKwkJCQlnZnBfZmxhZ3MpOworCQlpZiAoZmxzLT5taXJyb3JfYXJyYXlbaV0gPT0gTlVMTCkgeworCQkJcmMgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZXJyX2ZyZWU7CisJCX0KKworCQlzcGluX2xvY2tfaW5pdCgmZmxzLT5taXJyb3JfYXJyYXlbaV0tPmxvY2spOworCQlmbHMtPm1pcnJvcl9hcnJheVtpXS0+ZHNfY291bnQgPSBkc19jb3VudDsKKworCQkvKiBkZXZpY2VpZCAqLworCQlyYyA9IGRlY29kZV9kZXZpY2VpZCgmc3RyZWFtLCAmZGV2aWQpOworCQlpZiAocmMpCisJCQlnb3RvIG91dF9lcnJfZnJlZTsKKworCQlpZG5vZGUgPSBuZnM0X2ZpbmRfZ2V0X2RldmljZWlkKE5GU19TRVJWRVIobGgtPnBsaF9pbm9kZSksCisJCQkJCQkmZGV2aWQsIGxoLT5wbGhfbGNfY3JlZCwKKwkJCQkJCWdmcF9mbGFncyk7CisJCS8qCisJCSAqIHVwb24gc3VjY2VzcywgbWlycm9yX2RzIGlzIGFsbG9jYXRlZCBieSBwcmV2aW91cworCQkgKiBnZXRkZXZpY2VpbmZvLCBvciBuZXdseSBieSAuYWxsb2NfZGV2aWNlaWRfbm9kZQorCQkgKiBuZnM0X2ZpbmRfZ2V0X2RldmljZWlkIGZhaWx1cmUgaXMgaW5kZWVkIGdldGRldmljZWluZm8gZmFsdXJlCisJCSAqLworCQlpZiAoaWRub2RlKQorCQkJZmxzLT5taXJyb3JfYXJyYXlbaV0tPm1pcnJvcl9kcyA9CisJCQkJRkZfTEFZT1VUX01JUlJPUl9EUyhpZG5vZGUpOworCQllbHNlCisJCQlnb3RvIG91dF9lcnJfZnJlZTsKKworCQkvKiBlZmZpY2llbmN5ICovCisJCXJjID0gLUVJTzsKKwkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKCZzdHJlYW0sIDQpOworCQlpZiAoIXApCisJCQlnb3RvIG91dF9lcnJfZnJlZTsKKwkJZmxzLT5taXJyb3JfYXJyYXlbaV0tPmVmZmljaWVuY3kgPSBiZTMyX3RvX2NwdXAocCk7CisKKwkJLyogc3RhdGVpZCAqLworCQlyYyA9IGRlY29kZV9zdGF0ZWlkKCZzdHJlYW0sICZmbHMtPm1pcnJvcl9hcnJheVtpXS0+c3RhdGVpZCk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0X2Vycl9mcmVlOworCisJCS8qIGZoICovCisJCXAgPSB4ZHJfaW5saW5lX2RlY29kZSgmc3RyZWFtLCA0KTsKKwkJaWYgKCFwKQorCQkJZ290byBvdXRfZXJyX2ZyZWU7CisJCWZoX2NvdW50ID0gYmUzMl90b19jcHVwKHApOworCisJCWZscy0+bWlycm9yX2FycmF5W2ldLT5maF92ZXJzaW9ucyA9CisJCQlremFsbG9jKGZoX2NvdW50ICogc2l6ZW9mKHN0cnVjdCBuZnNfZmgpLAorCQkJCWdmcF9mbGFncyk7CisJCWlmIChmbHMtPm1pcnJvcl9hcnJheVtpXS0+ZmhfdmVyc2lvbnMgPT0gTlVMTCkgeworCQkJcmMgPSAtRU5PTUVNOworCQkJZ290byBvdXRfZXJyX2ZyZWU7CisJCX0KKworCQlmb3IgKGogPSAwOyBqIDwgZmhfY291bnQ7IGorKykgeworCQkJcmMgPSBkZWNvZGVfbmZzX2ZoKCZzdHJlYW0sCisJCQkJCSAgICZmbHMtPm1pcnJvcl9hcnJheVtpXS0+ZmhfdmVyc2lvbnNbal0pOworCQkJaWYgKHJjKQorCQkJCWdvdG8gb3V0X2Vycl9mcmVlOworCQl9CisKKwkJZmxzLT5taXJyb3JfYXJyYXlbaV0tPmZoX3ZlcnNpb25zX2NudCA9IGZoX2NvdW50OworCisJCS8qIHVzZXIgKi8KKwkJcmMgPSBkZWNvZGVfbmFtZSgmc3RyZWFtLCAmZmxzLT5taXJyb3JfYXJyYXlbaV0tPnVpZCk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0X2Vycl9mcmVlOworCisJCS8qIGdyb3VwICovCisJCXJjID0gZGVjb2RlX25hbWUoJnN0cmVhbSwgJmZscy0+bWlycm9yX2FycmF5W2ldLT5naWQpOworCQlpZiAocmMpCisJCQlnb3RvIG91dF9lcnJfZnJlZTsKKworCQlkcHJpbnRrKCIlczogdWlkICVkIGdpZCAlZFxuIiwgX19mdW5jX18sCisJCQlmbHMtPm1pcnJvcl9hcnJheVtpXS0+dWlkLAorCQkJZmxzLT5taXJyb3JfYXJyYXlbaV0tPmdpZCk7CisJfQorCisJZmZfbGF5b3V0X3NvcnRfbWlycm9ycyhmbHMpOworCXJjID0gZmZfbGF5b3V0X2NoZWNrX2xheW91dChsZ3IpOworCWlmIChyYykKKwkJZ290byBvdXRfZXJyX2ZyZWU7CisKKwlyZXQgPSAmZmxzLT5nZW5lcmljX2hkcjsKKwlkcHJpbnRrKCI8LS0gJXMgKHN1Y2Nlc3MpXG4iLCBfX2Z1bmNfXyk7CitvdXRfZnJlZV9wYWdlOgorCV9fZnJlZV9wYWdlKHNjcmF0Y2gpOworCXJldHVybiByZXQ7CitvdXRfZXJyX2ZyZWU6CisJX2ZmX2xheW91dF9mcmVlX2xzZWcoZmxzKTsKKwlyZXQgPSBFUlJfUFRSKHJjKTsKKwlkcHJpbnRrKCI8LS0gJXMgKCVkKVxuIiwgX19mdW5jX18sIHJjKTsKKwlnb3RvIG91dF9mcmVlX3BhZ2U7Cit9CisKK3N0YXRpYyBib29sIGZmX2xheW91dF9oYXNfcndfc2VnbWVudHMoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbGF5b3V0KQoreworCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShsc2VnLCAmbGF5b3V0LT5wbGhfc2VncywgcGxzX2xpc3QpCisJCWlmIChsc2VnLT5wbHNfcmFuZ2UuaW9tb2RlID09IElPTU9ERV9SVykKKwkJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZAorZmZfbGF5b3V0X2ZyZWVfbHNlZyhzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZykKK3sKKwlzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfc2VnbWVudCAqZmxzID0gRkZfTEFZT1VUX0xTRUcobHNlZyk7CisJaW50IGk7CisKKwlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKKworCWZvciAoaSA9IDA7IGkgPCBmbHMtPm1pcnJvcl9hcnJheV9jbnQ7IGkrKykgeworCQlpZiAoZmxzLT5taXJyb3JfYXJyYXlbaV0pIHsKKwkJCW5mczRfZmZfbGF5b3V0X3B1dF9kZXZpY2VpZChmbHMtPm1pcnJvcl9hcnJheVtpXS0+bWlycm9yX2RzKTsKKwkJCWZscy0+bWlycm9yX2FycmF5W2ldLT5taXJyb3JfZHMgPSBOVUxMOworCQkJaWYgKGZscy0+bWlycm9yX2FycmF5W2ldLT5jcmVkKSB7CisJCQkJcHV0X3JwY2NyZWQoZmxzLT5taXJyb3JfYXJyYXlbaV0tPmNyZWQpOworCQkJCWZscy0+bWlycm9yX2FycmF5W2ldLT5jcmVkID0gTlVMTDsKKwkJCX0KKwkJfQorCX0KKworCWlmIChsc2VnLT5wbHNfcmFuZ2UuaW9tb2RlID09IElPTU9ERV9SVykgeworCQlzdHJ1Y3QgbmZzNF9mbGV4ZmlsZV9sYXlvdXQgKmZmbDsKKwkJc3RydWN0IGlub2RlICppbm9kZTsKKworCQlmZmwgPSBGRl9MQVlPVVRfRlJPTV9IRFIobHNlZy0+cGxzX2xheW91dCk7CisJCWlub2RlID0gZmZsLT5nZW5lcmljX2hkci5wbGhfaW5vZGU7CisJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJCWlmICghZmZfbGF5b3V0X2hhc19yd19zZWdtZW50cyhsc2VnLT5wbHNfbGF5b3V0KSkgeworCQkJZmZsLT5jb21taXRfaW5mby5uYnVja2V0cyA9IDA7CisJCQlrZnJlZShmZmwtPmNvbW1pdF9pbmZvLmJ1Y2tldHMpOworCQkJZmZsLT5jb21taXRfaW5mby5idWNrZXRzID0gTlVMTDsKKwkJfQorCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJfQorCV9mZl9sYXlvdXRfZnJlZV9sc2VnKGZscyk7Cit9CisKKy8qIFJldHVybiAxIHVudGlsIHdlIGhhdmUgbXVsdGlwbGUgbHNlZ3Mgc3VwcG9ydCAqLworc3RhdGljIGludAorZmZfbGF5b3V0X2dldF9sc2VnX2NvdW50KHN0cnVjdCBuZnM0X2ZmX2xheW91dF9zZWdtZW50ICpmbHMpCit7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK2ZmX2xheW91dF9hbGxvY19jb21taXRfaW5mbyhzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywKKwkJCSAgICBzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvICpjaW5mbywKKwkJCSAgICBnZnBfdCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IG5mczRfZmZfbGF5b3V0X3NlZ21lbnQgKmZscyA9IEZGX0xBWU9VVF9MU0VHKGxzZWcpOworCXN0cnVjdCBwbmZzX2NvbW1pdF9idWNrZXQgKmJ1Y2tldHM7CisJaW50IHNpemU7CisKKwlpZiAoY2luZm8tPmRzLT5uYnVja2V0cyAhPSAwKSB7CisJCS8qIFRoaXMgYXNzdW1lcyB0aGVyZSBpcyBvbmx5IG9uZSBSVyBsc2VnIHBlciBmaWxlLgorCQkgKiBUbyBzdXBwb3J0IG11bHRpcGxlIGxzZWcgcGVyIGZpbGUsIHdlIG5lZWQgdG8KKwkJICogY2hhbmdlIHN0cnVjdCBwbmZzX2NvbW1pdF9idWNrZXQgdG8gYWxsb3cgZHluYW1pYworCQkgKiBpbmNyZWFzaW5nIG5idWNrZXRzLgorCQkgKi8KKwkJcmV0dXJuIDA7CisJfQorCisJc2l6ZSA9IGZmX2xheW91dF9nZXRfbHNlZ19jb3VudChmbHMpICogRkZfTEFZT1VUX01JUlJPUl9DT1VOVChsc2VnKTsKKworCWJ1Y2tldHMgPSBrY2FsbG9jKHNpemUsIHNpemVvZihzdHJ1Y3QgcG5mc19jb21taXRfYnVja2V0KSwKKwkJCSAgZ2ZwX2ZsYWdzKTsKKwlpZiAoIWJ1Y2tldHMpCisJCXJldHVybiAtRU5PTUVNOworCWVsc2UgeworCQlpbnQgaTsKKworCQlzcGluX2xvY2soY2luZm8tPmxvY2spOworCQlpZiAoY2luZm8tPmRzLT5uYnVja2V0cyAhPSAwKQorCQkJa2ZyZWUoYnVja2V0cyk7CisJCWVsc2UgeworCQkJY2luZm8tPmRzLT5idWNrZXRzID0gYnVja2V0czsKKwkJCWNpbmZvLT5kcy0+bmJ1Y2tldHMgPSBzaXplOworCQkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJCUlOSVRfTElTVF9IRUFEKCZidWNrZXRzW2ldLndyaXR0ZW4pOworCQkJCUlOSVRfTElTVF9IRUFEKCZidWNrZXRzW2ldLmNvbW1pdHRpbmcpOworCQkJCS8qIG1hcmsgZGlyZWN0IHZlcmlmaWVyIGFzIHVuc2V0ICovCisJCQkJYnVja2V0c1tpXS5kaXJlY3RfdmVyZi5jb21taXR0ZWQgPQorCQkJCQlORlNfSU5WQUxJRF9TVEFCTEVfSE9XOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrKGNpbmZvLT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgc3RydWN0IG5mczRfcG5mc19kcyAqCitmZl9sYXlvdXRfY2hvb3NlX2Jlc3RfZHNfZm9yX3JlYWQoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqcGdpbywKKwkJCQkgIGludCAqYmVzdF9pZHgpCit7CisJc3RydWN0IG5mczRfZmZfbGF5b3V0X3NlZ21lbnQgKmZsczsKKwlzdHJ1Y3QgbmZzNF9wbmZzX2RzICpkczsKKwlpbnQgaWR4OworCisJZmxzID0gRkZfTEFZT1VUX0xTRUcocGdpby0+cGdfbHNlZyk7CisJLyogbWlycm9ycyBhcmUgc29ydGVkIGJ5IGVmZmljaWVuY3kgKi8KKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGZscy0+bWlycm9yX2FycmF5X2NudDsgaWR4KyspIHsKKwkJZHMgPSBuZnM0X2ZmX2xheW91dF9wcmVwYXJlX2RzKHBnaW8tPnBnX2xzZWcsIGlkeCwgZmFsc2UpOworCQlpZiAoZHMpIHsKKwkJCSpiZXN0X2lkeCA9IGlkeDsKKwkJCXJldHVybiBkczsKKwkJfQorCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZAorZmZfbGF5b3V0X3BnX2luaXRfcmVhZChzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpwZ2lvLAorCQkJc3RydWN0IG5mc19wYWdlICpyZXEpCit7CisJc3RydWN0IG5mc19wZ2lvX21pcnJvciAqcGdtOworCXN0cnVjdCBuZnM0X2ZmX2xheW91dF9taXJyb3IgKm1pcnJvcjsKKwlzdHJ1Y3QgbmZzNF9wbmZzX2RzICpkczsKKwlpbnQgZHNfaWR4OworCisJLyogVXNlIGZ1bGwgbGF5b3V0IGZvciBub3cgKi8KKwlpZiAoIXBnaW8tPnBnX2xzZWcpCisJCXBnaW8tPnBnX2xzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQocGdpby0+cGdfaW5vZGUsCisJCQkJCQkgICByZXEtPndiX2NvbnRleHQsCisJCQkJCQkgICAwLAorCQkJCQkJICAgTkZTNF9NQVhfVUlOVDY0LAorCQkJCQkJICAgSU9NT0RFX1JFQUQsCisJCQkJCQkgICBHRlBfS0VSTkVMKTsKKwkvKiBJZiBubyBsc2VnLCBmYWxsIGJhY2sgdG8gcmVhZCB0aHJvdWdoIG1kcyAqLworCWlmIChwZ2lvLT5wZ19sc2VnID09IE5VTEwpCisJCWdvdG8gb3V0X21kczsKKworCWRzID0gZmZfbGF5b3V0X2Nob29zZV9iZXN0X2RzX2Zvcl9yZWFkKHBnaW8sICZkc19pZHgpOworCWlmICghZHMpCisJCWdvdG8gb3V0X21kczsKKwltaXJyb3IgPSBGRl9MQVlPVVRfQ09NUChwZ2lvLT5wZ19sc2VnLCBkc19pZHgpOworCisJcGdpby0+cGdfbWlycm9yX2lkeCA9IGRzX2lkeDsKKworCS8qIHJlYWQgYWx3YXlzIHVzZXMgb25seSBvbmUgbWlycm9yIC0gaWR4IDAgZm9yIHBnaW8gbGF5ZXIgKi8KKwlwZ20gPSAmcGdpby0+cGdfbWlycm9yc1swXTsKKwlwZ20tPnBnX2JzaXplID0gbWlycm9yLT5taXJyb3JfZHMtPmRzX3ZlcnNpb25zWzBdLnJzaXplOworCisJcmV0dXJuOworb3V0X21kczoKKwlwbmZzX3B1dF9sc2VnKHBnaW8tPnBnX2xzZWcpOworCXBnaW8tPnBnX2xzZWcgPSBOVUxMOworCW5mc19wYWdlaW9fcmVzZXRfcmVhZF9tZHMocGdpbyk7Cit9CisKK3N0YXRpYyB2b2lkCitmZl9sYXlvdXRfcGdfaW5pdF93cml0ZShzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpwZ2lvLAorCQkJc3RydWN0IG5mc19wYWdlICpyZXEpCit7CisJc3RydWN0IG5mczRfZmZfbGF5b3V0X21pcnJvciAqbWlycm9yOworCXN0cnVjdCBuZnNfcGdpb19taXJyb3IgKnBnbTsKKwlzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvIGNpbmZvOworCXN0cnVjdCBuZnM0X3BuZnNfZHMgKmRzOworCWludCBpOworCWludCBzdGF0dXM7CisKKwlpZiAoIXBnaW8tPnBnX2xzZWcpCisJCXBnaW8tPnBnX2xzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQocGdpby0+cGdfaW5vZGUsCisJCQkJCQkgICByZXEtPndiX2NvbnRleHQsCisJCQkJCQkgICAwLAorCQkJCQkJICAgTkZTNF9NQVhfVUlOVDY0LAorCQkJCQkJICAgSU9NT0RFX1JXLAorCQkJCQkJICAgR0ZQX05PRlMpOworCS8qIElmIG5vIGxzZWcsIGZhbGwgYmFjayB0byB3cml0ZSB0aHJvdWdoIG1kcyAqLworCWlmIChwZ2lvLT5wZ19sc2VnID09IE5VTEwpCisJCWdvdG8gb3V0X21kczsKKworCW5mc19pbml0X2NpbmZvKCZjaW5mbywgcGdpby0+cGdfaW5vZGUsIHBnaW8tPnBnX2RyZXEpOworCXN0YXR1cyA9IGZmX2xheW91dF9hbGxvY19jb21taXRfaW5mbyhwZ2lvLT5wZ19sc2VnLCAmY2luZm8sIEdGUF9OT0ZTKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBvdXRfbWRzOworCisJLyogVXNlIGEgZGlyZWN0IG1hcHBpbmcgb2YgZHNfaWR4IHRvIHBnaW8gbWlycm9yX2lkeCAqLworCWlmIChXQVJOX09OX09OQ0UocGdpby0+cGdfbWlycm9yX2NvdW50ICE9CisJICAgIEZGX0xBWU9VVF9NSVJST1JfQ09VTlQocGdpby0+cGdfbHNlZykpKQorCQlnb3RvIG91dF9tZHM7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGdpby0+cGdfbWlycm9yX2NvdW50OyBpKyspIHsKKwkJZHMgPSBuZnM0X2ZmX2xheW91dF9wcmVwYXJlX2RzKHBnaW8tPnBnX2xzZWcsIGksIHRydWUpOworCQlpZiAoIWRzKQorCQkJZ290byBvdXRfbWRzOworCQlwZ20gPSAmcGdpby0+cGdfbWlycm9yc1tpXTsKKwkJbWlycm9yID0gRkZfTEFZT1VUX0NPTVAocGdpby0+cGdfbHNlZywgaSk7CisJCXBnbS0+cGdfYnNpemUgPSBtaXJyb3ItPm1pcnJvcl9kcy0+ZHNfdmVyc2lvbnNbMF0ud3NpemU7CisJfQorCisJcmV0dXJuOworCitvdXRfbWRzOgorCXBuZnNfcHV0X2xzZWcocGdpby0+cGdfbHNlZyk7CisJcGdpby0+cGdfbHNlZyA9IE5VTEw7CisJbmZzX3BhZ2Vpb19yZXNldF93cml0ZV9tZHMocGdpbyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2ZmX2xheW91dF9wZ19nZXRfbWlycm9yX2NvdW50X3dyaXRlKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKnBnaW8sCisJCQkJICAgIHN0cnVjdCBuZnNfcGFnZSAqcmVxKQoreworCWlmICghcGdpby0+cGdfbHNlZykKKwkJcGdpby0+cGdfbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChwZ2lvLT5wZ19pbm9kZSwKKwkJCQkJCSAgIHJlcS0+d2JfY29udGV4dCwKKwkJCQkJCSAgIDAsCisJCQkJCQkgICBORlM0X01BWF9VSU5UNjQsCisJCQkJCQkgICBJT01PREVfUlcsCisJCQkJCQkgICBHRlBfTk9GUyk7CisJaWYgKHBnaW8tPnBnX2xzZWcpCisJCXJldHVybiBGRl9MQVlPVVRfTUlSUk9SX0NPVU5UKHBnaW8tPnBnX2xzZWcpOworCisJLyogbm8gbHNlZyBtZWFucyB0aGF0IHBuZnMgaXMgbm90IGluIHVzZSwgc28gbm8gbWlycm9yaW5nIGhlcmUgKi8KKwlwbmZzX3B1dF9sc2VnKHBnaW8tPnBnX2xzZWcpOworCXBnaW8tPnBnX2xzZWcgPSBOVUxMOworCW5mc19wYWdlaW9fcmVzZXRfd3JpdGVfbWRzKHBnaW8pOworCXJldHVybiAxOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5mc19wYWdlaW9fb3BzIGZmX2xheW91dF9wZ19yZWFkX29wcyA9IHsKKwkucGdfaW5pdCA9IGZmX2xheW91dF9wZ19pbml0X3JlYWQsCisJLnBnX3Rlc3QgPSBwbmZzX2dlbmVyaWNfcGdfdGVzdCwKKwkucGdfZG9pbyA9IHBuZnNfZ2VuZXJpY19wZ19yZWFkcGFnZXMsCisJLnBnX2NsZWFudXAgPSBwbmZzX2dlbmVyaWNfcGdfY2xlYW51cCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmZzX3BhZ2Vpb19vcHMgZmZfbGF5b3V0X3BnX3dyaXRlX29wcyA9IHsKKwkucGdfaW5pdCA9IGZmX2xheW91dF9wZ19pbml0X3dyaXRlLAorCS5wZ190ZXN0ID0gcG5mc19nZW5lcmljX3BnX3Rlc3QsCisJLnBnX2RvaW8gPSBwbmZzX2dlbmVyaWNfcGdfd3JpdGVwYWdlcywKKwkucGdfZ2V0X21pcnJvcl9jb3VudCA9IGZmX2xheW91dF9wZ19nZXRfbWlycm9yX2NvdW50X3dyaXRlLAorCS5wZ19jbGVhbnVwID0gcG5mc19nZW5lcmljX3BnX2NsZWFudXAsCit9OworCitzdGF0aWMgdm9pZCBmZl9sYXlvdXRfcmVzZXRfd3JpdGUoc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqaGRyLCBib29sIHJldHJ5X3BuZnMpCit7CisJc3RydWN0IHJwY190YXNrICp0YXNrID0gJmhkci0+dGFzazsKKworCXBuZnNfbGF5b3V0Y29tbWl0X2lub2RlKGhkci0+aW5vZGUsIGZhbHNlKTsKKworCWlmIChyZXRyeV9wbmZzKSB7CisJCWRwcmludGsoIiVzIFJlc2V0IHRhc2sgJTV1IGZvciBpL28gdGhyb3VnaCBwTkZTICIKKwkJCSIocmVxICVzLyVsbHUsICV1IGJ5dGVzIEAgb2Zmc2V0ICVsbHUpXG4iLCBfX2Z1bmNfXywKKwkJCWhkci0+dGFzay50a19waWQsCisJCQloZHItPmlub2RlLT5pX3NiLT5zX2lkLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylORlNfRklMRUlEKGhkci0+aW5vZGUpLAorCQkJaGRyLT5hcmdzLmNvdW50LAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyloZHItPmFyZ3Mub2Zmc2V0KTsKKworCQlpZiAoIWhkci0+ZHJlcSkgeworCQkJc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eDsKKworCQkJY3R4ID0gbmZzX2xpc3RfZW50cnkoaGRyLT5wYWdlcy5uZXh0KS0+d2JfY29udGV4dDsKKwkJCXNldF9iaXQoTkZTX0NPTlRFWFRfUkVTRU5EX1dSSVRFUywgJmN0eC0+ZmxhZ3MpOworCQkJaGRyLT5jb21wbGV0aW9uX29wcy0+ZXJyb3JfY2xlYW51cCgmaGRyLT5wYWdlcyk7CisJCX0gZWxzZSB7CisJCQluZnNfZGlyZWN0X3NldF9yZXNjaGVkX3dyaXRlcyhoZHItPmRyZXEpOworCQkJLyogZmFrZSB1bnN0YWJsZSB3cml0ZSB0byBsZXQgY29tbW9uIG5mcyByZXNlbmQgcGFnZXMgKi8KKwkJCWhkci0+dmVyZi5jb21taXR0ZWQgPSBORlNfVU5TVEFCTEU7CisJCQloZHItPmdvb2RfYnl0ZXMgPSAwOworCQl9CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoTkZTX0lPSERSX1JFRE8sICZoZHItPmZsYWdzKSkgeworCQlkcHJpbnRrKCIlcyBSZXNldCB0YXNrICU1dSBmb3IgaS9vIHRocm91Z2ggTURTICIKKwkJCSIocmVxICVzLyVsbHUsICV1IGJ5dGVzIEAgb2Zmc2V0ICVsbHUpXG4iLCBfX2Z1bmNfXywKKwkJCWhkci0+dGFzay50a19waWQsCisJCQloZHItPmlub2RlLT5pX3NiLT5zX2lkLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylORlNfRklMRUlEKGhkci0+aW5vZGUpLAorCQkJaGRyLT5hcmdzLmNvdW50LAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyloZHItPmFyZ3Mub2Zmc2V0KTsKKworCQl0YXNrLT50a19zdGF0dXMgPSBwbmZzX3dyaXRlX2RvbmVfcmVzZW5kX3RvX21kcyhoZHIpOworCX0KK30KKworc3RhdGljIHZvaWQgZmZfbGF5b3V0X3Jlc2V0X3JlYWQoc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqaGRyKQoreworCXN0cnVjdCBycGNfdGFzayAqdGFzayA9ICZoZHItPnRhc2s7CisKKwlwbmZzX2xheW91dGNvbW1pdF9pbm9kZShoZHItPmlub2RlLCBmYWxzZSk7CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoTkZTX0lPSERSX1JFRE8sICZoZHItPmZsYWdzKSkgeworCQlkcHJpbnRrKCIlcyBSZXNldCB0YXNrICU1dSBmb3IgaS9vIHRocm91Z2ggTURTICIKKwkJCSIocmVxICVzLyVsbHUsICV1IGJ5dGVzIEAgb2Zmc2V0ICVsbHUpXG4iLCBfX2Z1bmNfXywKKwkJCWhkci0+dGFzay50a19waWQsCisJCQloZHItPmlub2RlLT5pX3NiLT5zX2lkLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylORlNfRklMRUlEKGhkci0+aW5vZGUpLAorCQkJaGRyLT5hcmdzLmNvdW50LAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyloZHItPmFyZ3Mub2Zmc2V0KTsKKworCQl0YXNrLT50a19zdGF0dXMgPSBwbmZzX3JlYWRfZG9uZV9yZXNlbmRfdG9fbWRzKGhkcik7CisJfQorfQorCitzdGF0aWMgaW50IGZmX2xheW91dF9hc3luY19oYW5kbGVfZXJyb3JfdjQoc3RydWN0IHJwY190YXNrICp0YXNrLAorCQkJCQkgICBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsCisJCQkJCSAgIHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCisJCQkJCSAgIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLAorCQkJCQkgICBpbnQgaWR4KQoreworCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvID0gbHNlZy0+cGxzX2xheW91dDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbG8tPnBsaF9pbm9kZTsKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqbWRzX3NlcnZlciA9IE5GU19TRVJWRVIoaW5vZGUpOworCisJc3RydWN0IG5mczRfZGV2aWNlaWRfbm9kZSAqZGV2aWQgPSBGRl9MQVlPVVRfREVWSURfTk9ERShsc2VnLCBpZHgpOworCXN0cnVjdCBuZnNfY2xpZW50ICptZHNfY2xpZW50ID0gbWRzX3NlcnZlci0+bmZzX2NsaWVudDsKKwlzdHJ1Y3QgbmZzNF9zbG90X3RhYmxlICp0YmwgPSAmY2xwLT5jbF9zZXNzaW9uLT5mY19zbG90X3RhYmxlOworCisJaWYgKHRhc2stPnRrX3N0YXR1cyA+PSAwKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAodGFzay0+dGtfc3RhdHVzKSB7CisJLyogTURTIHN0YXRlIGVycm9ycyAqLworCWNhc2UgLU5GUzRFUlJfREVMRUdfUkVWT0tFRDoKKwljYXNlIC1ORlM0RVJSX0FETUlOX1JFVk9LRUQ6CisJY2FzZSAtTkZTNEVSUl9CQURfU1RBVEVJRDoKKwkJaWYgKHN0YXRlID09IE5VTEwpCisJCQlicmVhazsKKwkJbmZzX3JlbW92ZV9iYWRfZGVsZWdhdGlvbihzdGF0ZS0+aW5vZGUpOworCWNhc2UgLU5GUzRFUlJfT1BFTk1PREU6CisJCWlmIChzdGF0ZSA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmIChuZnM0X3NjaGVkdWxlX3N0YXRlaWRfcmVjb3ZlcnkobWRzX3NlcnZlciwgc3RhdGUpIDwgMCkKKwkJCWdvdG8gb3V0X2JhZF9zdGF0ZWlkOworCQlnb3RvIHdhaXRfb25fcmVjb3Zlcnk7CisJY2FzZSAtTkZTNEVSUl9FWFBJUkVEOgorCQlpZiAoc3RhdGUgIT0gTlVMTCkgeworCQkJaWYgKG5mczRfc2NoZWR1bGVfc3RhdGVpZF9yZWNvdmVyeShtZHNfc2VydmVyLCBzdGF0ZSkgPCAwKQorCQkJCWdvdG8gb3V0X2JhZF9zdGF0ZWlkOworCQl9CisJCW5mczRfc2NoZWR1bGVfbGVhc2VfcmVjb3ZlcnkobWRzX2NsaWVudCk7CisJCWdvdG8gd2FpdF9vbl9yZWNvdmVyeTsKKwkvKiBEUyBzZXNzaW9uIGVycm9ycyAqLworCWNhc2UgLU5GUzRFUlJfQkFEU0VTU0lPTjoKKwljYXNlIC1ORlM0RVJSX0JBRFNMT1Q6CisJY2FzZSAtTkZTNEVSUl9CQURfSElHSF9TTE9UOgorCWNhc2UgLU5GUzRFUlJfREVBRFNFU1NJT046CisJY2FzZSAtTkZTNEVSUl9DT05OX05PVF9CT1VORF9UT19TRVNTSU9OOgorCWNhc2UgLU5GUzRFUlJfU0VRX0ZBTFNFX1JFVFJZOgorCWNhc2UgLU5GUzRFUlJfU0VRX01JU09SREVSRUQ6CisJCWRwcmludGsoIiVzIEVSUk9SICVkLCBSZXNldCBzZXNzaW9uLiBFeGNoYW5nZWlkICIKKwkJCSJmbGFncyAweCV4XG4iLCBfX2Z1bmNfXywgdGFzay0+dGtfc3RhdHVzLAorCQkJY2xwLT5jbF9leGNoYW5nZV9mbGFncyk7CisJCW5mczRfc2NoZWR1bGVfc2Vzc2lvbl9yZWNvdmVyeShjbHAtPmNsX3Nlc3Npb24sIHRhc2stPnRrX3N0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgLU5GUzRFUlJfREVMQVk6CisJY2FzZSAtTkZTNEVSUl9HUkFDRToKKwkJcnBjX2RlbGF5KHRhc2ssIEZGX0xBWU9VVF9QT0xMX1JFVFJZX01BWCk7CisJCWJyZWFrOworCWNhc2UgLU5GUzRFUlJfUkVUUllfVU5DQUNIRURfUkVQOgorCQlicmVhazsKKwkvKiBJbnZhbGlkYXRlIExheW91dCBlcnJvcnMgKi8KKwljYXNlIC1ORlM0RVJSX1BORlNfTk9fTEFZT1VUOgorCWNhc2UgLUVTVEFMRTogICAgICAgICAgIC8qIG1hcHBlZCBORlM0RVJSX1NUQUxFICovCisJY2FzZSAtRUJBREhBTkRMRTogICAgICAgLyogbWFwcGVkIE5GUzRFUlJfQkFESEFORExFICovCisJY2FzZSAtRUlTRElSOiAgICAgICAgICAgLyogbWFwcGVkIE5GUzRFUlJfSVNESVIgKi8KKwljYXNlIC1ORlM0RVJSX0ZIRVhQSVJFRDoKKwljYXNlIC1ORlM0RVJSX1dST05HX1RZUEU6CisJCWRwcmludGsoIiVzIEludmFsaWQgbGF5b3V0IGVycm9yICVkXG4iLCBfX2Z1bmNfXywKKwkJCXRhc2stPnRrX3N0YXR1cyk7CisJCS8qCisJCSAqIERlc3Ryb3kgbGF5b3V0IHNvIG5ldyBpL28gd2lsbCBnZXQgYSBuZXcgbGF5b3V0LgorCQkgKiBMYXlvdXQgd2lsbCBub3QgYmUgZGVzdHJveWVkIHVudGlsIGFsbCBjdXJyZW50IGxzZWcKKwkJICogcmVmZXJlbmNlcyBhcmUgcHV0LiBNYXJrIGxheW91dCBhcyBpbnZhbGlkIHRvIHJlc2VuZCBmYWlsZWQKKwkJICogaS9vIGFuZCBhbGwgaS9vIHdhaXRpbmcgb24gdGhlIHNsb3QgdGFibGUgdG8gdGhlIE1EUyB1bnRpbAorCQkgKiBsYXlvdXQgaXMgZGVzdHJveWVkIGFuZCBhIG5ldyB2YWxpZCBsYXlvdXQgaXMgb2J0YWluZWQuCisJCSAqLworCQlwbmZzX2Rlc3Ryb3lfbGF5b3V0KE5GU19JKGlub2RlKSk7CisJCXJwY193YWtlX3VwKCZ0YmwtPnNsb3RfdGJsX3dhaXRxKTsKKwkJZ290byByZXNldDsKKwkvKiBSUEMgY29ubmVjdGlvbiBlcnJvcnMgKi8KKwljYXNlIC1FQ09OTlJFRlVTRUQ6CisJY2FzZSAtRUhPU1RET1dOOgorCWNhc2UgLUVIT1NUVU5SRUFDSDoKKwljYXNlIC1FTkVUVU5SRUFDSDoKKwljYXNlIC1FSU86CisJY2FzZSAtRVRJTUVET1VUOgorCWNhc2UgLUVQSVBFOgorCQlkcHJpbnRrKCIlcyBEUyBjb25uZWN0aW9uIGVycm9yICVkXG4iLCBfX2Z1bmNfXywKKwkJCXRhc2stPnRrX3N0YXR1cyk7CisJCW5mczRfbWFya19kZXZpY2VpZF91bmF2YWlsYWJsZShkZXZpZCk7CisJCXJwY193YWtlX3VwKCZ0YmwtPnNsb3RfdGJsX3dhaXRxKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJaWYgKGZmX2xheW91dF9oYXNfYXZhaWxhYmxlX2RzKGxzZWcpKQorCQkJcmV0dXJuIC1ORlM0RVJSX1JFU0VUX1RPX1BORlM7CityZXNldDoKKwkJZHByaW50aygiJXMgUmV0cnkgdGhyb3VnaCBNRFMuIEVycm9yICVkXG4iLCBfX2Z1bmNfXywKKwkJCXRhc2stPnRrX3N0YXR1cyk7CisJCXJldHVybiAtTkZTNEVSUl9SRVNFVF9UT19NRFM7CisJfQorb3V0OgorCXRhc2stPnRrX3N0YXR1cyA9IDA7CisJcmV0dXJuIC1FQUdBSU47CitvdXRfYmFkX3N0YXRlaWQ6CisJdGFzay0+dGtfc3RhdHVzID0gLUVJTzsKKwlyZXR1cm4gMDsKK3dhaXRfb25fcmVjb3Zlcnk6CisJcnBjX3NsZWVwX29uKCZtZHNfY2xpZW50LT5jbF9ycGN3YWl0cSwgdGFzaywgTlVMTCk7CisJaWYgKHRlc3RfYml0KE5GUzRDTE5UX01BTkFHRVJfUlVOTklORywgJm1kc19jbGllbnQtPmNsX3N0YXRlKSA9PSAwKQorCQlycGNfd2FrZV91cF9xdWV1ZWRfdGFzaygmbWRzX2NsaWVudC0+Y2xfcnBjd2FpdHEsIHRhc2spOworCWdvdG8gb3V0OworfQorCisvKiBSZXRyeSBhbGwgZXJyb3JzIHRocm91Z2ggZWl0aGVyIHBORlMgb3IgTURTIGV4Y2VwdCBmb3IgLUVKVUtFQk9YICovCitzdGF0aWMgaW50IGZmX2xheW91dF9hc3luY19oYW5kbGVfZXJyb3JfdjMoc3RydWN0IHJwY190YXNrICp0YXNrLAorCQkJCQkgICBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywKKwkJCQkJICAgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgbmZzNF9kZXZpY2VpZF9ub2RlICpkZXZpZCA9IEZGX0xBWU9VVF9ERVZJRF9OT0RFKGxzZWcsIGlkeCk7CisKKwlpZiAodGFzay0+dGtfc3RhdHVzID49IDApCisJCXJldHVybiAwOworCisJaWYgKHRhc2stPnRrX3N0YXR1cyAhPSAtRUpVS0VCT1gpIHsKKwkJZHByaW50aygiJXMgRFMgY29ubmVjdGlvbiBlcnJvciAlZFxuIiwgX19mdW5jX18sCisJCQl0YXNrLT50a19zdGF0dXMpOworCQluZnM0X21hcmtfZGV2aWNlaWRfdW5hdmFpbGFibGUoZGV2aWQpOworCQlpZiAoZmZfbGF5b3V0X2hhc19hdmFpbGFibGVfZHMobHNlZykpCisJCQlyZXR1cm4gLU5GUzRFUlJfUkVTRVRfVE9fUE5GUzsKKwkJZWxzZQorCQkJcmV0dXJuIC1ORlM0RVJSX1JFU0VUX1RPX01EUzsKKwl9CisKKwlpZiAodGFzay0+dGtfc3RhdHVzID09IC1FSlVLRUJPWCkKKwkJbmZzX2luY19zdGF0cyhsc2VnLT5wbHNfbGF5b3V0LT5wbGhfaW5vZGUsIE5GU0lPU19ERUxBWSk7CisJdGFzay0+dGtfc3RhdHVzID0gMDsKKwlycGNfcmVzdGFydF9jYWxsKHRhc2spOworCXJwY19kZWxheSh0YXNrLCBORlNfSlVLRUJPWF9SRVRSWV9USU1FKTsKKwlyZXR1cm4gLUVBR0FJTjsKK30KKworc3RhdGljIGludCBmZl9sYXlvdXRfYXN5bmNfaGFuZGxlX2Vycm9yKHN0cnVjdCBycGNfdGFzayAqdGFzaywKKwkJCQkJc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlLAorCQkJCQlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAorCQkJCQlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywKKwkJCQkJaW50IGlkeCkKK3sKKwlpbnQgdmVycyA9IGNscC0+Y2xfbmZzX21vZC0+cnBjX3ZlcnMtPm51bWJlcjsKKworCXN3aXRjaCAodmVycykgeworCWNhc2UgMzoKKwkJcmV0dXJuIGZmX2xheW91dF9hc3luY19oYW5kbGVfZXJyb3JfdjModGFzaywgbHNlZywgaWR4KTsKKwljYXNlIDQ6CisJCXJldHVybiBmZl9sYXlvdXRfYXN5bmNfaGFuZGxlX2Vycm9yX3Y0KHRhc2ssIHN0YXRlLCBjbHAsCisJCQkJCQkgICAgICAgbHNlZywgaWR4KTsKKwlkZWZhdWx0OgorCQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBmZl9sYXlvdXRfaW9fdHJhY2tfZHNfZXJyb3Ioc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcsCisJCQkJCWludCBpZHgsIHU2NCBvZmZzZXQsIHU2NCBsZW5ndGgsCisJCQkJCXUzMiBzdGF0dXMsIGludCBvcG51bSkKK3sKKwlzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfbWlycm9yICptaXJyb3I7CisJaW50IGVycjsKKworCW1pcnJvciA9IEZGX0xBWU9VVF9DT01QKGxzZWcsIGlkeCk7CisJZXJyID0gZmZfbGF5b3V0X3RyYWNrX2RzX2Vycm9yKEZGX0xBWU9VVF9GUk9NX0hEUihsc2VnLT5wbHNfbGF5b3V0KSwKKwkJCQkgICAgICAgbWlycm9yLCBvZmZzZXQsIGxlbmd0aCwgc3RhdHVzLCBvcG51bSwKKwkJCQkgICAgICAgR0ZQX05PSU8pOworCWRwcmludGsoIiVzOiBlcnIgJWQgb3AgJWQgc3RhdHVzICV1XG4iLCBfX2Z1bmNfXywgZXJyLCBvcG51bSwgc3RhdHVzKTsKK30KKworLyogTkZTX1BST1RPIGNhbGwgZG9uZSBjYWxsYmFjayByb3V0aW5lcyAqLworCitzdGF0aWMgaW50IGZmX2xheW91dF9yZWFkX2RvbmVfY2Ioc3RydWN0IHJwY190YXNrICp0YXNrLAorCQkJCXN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkcikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCBlcnI7CisKKwl0cmFjZV9uZnM0X3BuZnNfcmVhZChoZHIsIHRhc2stPnRrX3N0YXR1cyk7CisJaWYgKHRhc2stPnRrX3N0YXR1cyA9PSAtRVRJTUVET1VUICYmICFoZHItPnJlcy5vcF9zdGF0dXMpCisJCWhkci0+cmVzLm9wX3N0YXR1cyA9IE5GUzRFUlJfTlhJTzsKKwlpZiAodGFzay0+dGtfc3RhdHVzIDwgMCAmJiBoZHItPnJlcy5vcF9zdGF0dXMpCisJCWZmX2xheW91dF9pb190cmFja19kc19lcnJvcihoZHItPmxzZWcsIGhkci0+cGdpb19taXJyb3JfaWR4LAorCQkJCQkgICAgaGRyLT5hcmdzLm9mZnNldCwgaGRyLT5hcmdzLmNvdW50LAorCQkJCQkgICAgaGRyLT5yZXMub3Bfc3RhdHVzLCBPUF9SRUFEKTsKKwllcnIgPSBmZl9sYXlvdXRfYXN5bmNfaGFuZGxlX2Vycm9yKHRhc2ssIGhkci0+YXJncy5jb250ZXh0LT5zdGF0ZSwKKwkJCQkJICAgaGRyLT5kc19jbHAsIGhkci0+bHNlZywKKwkJCQkJICAgaGRyLT5wZ2lvX21pcnJvcl9pZHgpOworCisJc3dpdGNoIChlcnIpIHsKKwljYXNlIC1ORlM0RVJSX1JFU0VUX1RPX1BORlM6CisJCXNldF9iaXQoTkZTX0xBWU9VVF9SRVRVUk5fQkVGT1JFX0NMT1NFLAorCQkJJmhkci0+bHNlZy0+cGxzX2xheW91dC0+cGxoX2ZsYWdzKTsKKwkJcG5mc19yZWFkX3Jlc2VuZF9wbmZzKGhkcik7CisJCXJldHVybiB0YXNrLT50a19zdGF0dXM7CisJY2FzZSAtTkZTNEVSUl9SRVNFVF9UT19NRFM6CisJCWlub2RlID0gaGRyLT5sc2VnLT5wbHNfbGF5b3V0LT5wbGhfaW5vZGU7CisJCXBuZnNfZXJyb3JfbWFya19sYXlvdXRfZm9yX3JldHVybihpbm9kZSwgaGRyLT5sc2VnKTsKKwkJZmZfbGF5b3V0X3Jlc2V0X3JlYWQoaGRyKTsKKwkJcmV0dXJuIHRhc2stPnRrX3N0YXR1czsKKwljYXNlIC1FQUdBSU46CisJCXJwY19yZXN0YXJ0X2NhbGxfcHJlcGFyZSh0YXNrKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXZSByZWZlcmVuY2UgdGhlIHJwY19jcmVkIG9mIHRoZSBmaXJzdCBXUklURSB0aGF0IHRyaWdnZXJzIHRoZSBuZWVkIGZvcgorICogYSBMQVlPVVRDT01NSVQsIGFuZCB1c2UgaXQgdG8gc2VuZCB0aGUgbGF5b3V0Y29tbWl0IGNvbXBvdW5kLgorICogcmZjNTY2MSBpcyBub3QgY2xlYXIgYWJvdXQgd2hpY2ggY3JlZGVudGlhbCBzaG91bGQgYmUgdXNlZC4KKyAqCisgKiBGbGV4bGF5b3V0IGNsaWVudCBzaG91bGQgdHJlYXQgRFMgcmVwbGllZCBGSUxFX1NZTkMgYXMgREFUQV9TWU5DLCBzbworICogdG8gZm9sbG93IGh0dHA6Ly93d3cucmZjLWVkaXRvci5vcmcvZXJyYXRhX3NlYXJjaC5waHA/cmZjPTU2NjEmZWlkPTI3NTEKKyAqIHdlIGFsd2F5cyBzZW5kIGxheW91dGNvbW1pdCBhZnRlciBEUyB3cml0ZXMuCisgKi8KK3N0YXRpYyB2b2lkCitmZl9sYXlvdXRfc2V0X2xheW91dGNvbW1pdChzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICpoZHIpCit7CisJcG5mc19zZXRfbGF5b3V0Y29tbWl0KGhkcik7CisJZHByaW50aygiJXMgaW5vZGUgJWx1IHBsc19lbmRfcG9zICVsdVxuIiwgX19mdW5jX18sIGhkci0+aW5vZGUtPmlfaW5vLAorCQkodW5zaWduZWQgbG9uZykgTkZTX0koaGRyLT5pbm9kZSktPmxheW91dC0+cGxoX2x3Yik7Cit9CisKK3N0YXRpYyBib29sCitmZl9sYXlvdXRfcmVzZXRfdG9fbWRzKHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLCBpbnQgaWR4KQoreworCS8qIE5vIG1pcnJvcmluZyBmb3Igbm93ICovCisJc3RydWN0IG5mczRfZGV2aWNlaWRfbm9kZSAqbm9kZSA9IEZGX0xBWU9VVF9ERVZJRF9OT0RFKGxzZWcsIGlkeCk7CisKKwlyZXR1cm4gZmZfbGF5b3V0X3Rlc3RfZGV2aWRfdW5hdmFpbGFibGUobm9kZSk7Cit9CisKK3N0YXRpYyBpbnQgZmZfbGF5b3V0X3JlYWRfcHJlcGFyZV9jb21tb24oc3RydWN0IHJwY190YXNrICp0YXNrLAorCQkJCQkgc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqaGRyKQoreworCWlmICh1bmxpa2VseSh0ZXN0X2JpdChORlNfQ09OVEVYVF9CQUQsICZoZHItPmFyZ3MuY29udGV4dC0+ZmxhZ3MpKSkgeworCQlycGNfZXhpdCh0YXNrLCAtRUlPKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCWlmIChmZl9sYXlvdXRfcmVzZXRfdG9fbWRzKGhkci0+bHNlZywgaGRyLT5wZ2lvX21pcnJvcl9pZHgpKSB7CisJCWRwcmludGsoIiVzIHRhc2sgJXUgcmVzZXQgaW8gdG8gTURTXG4iLCBfX2Z1bmNfXywgdGFzay0+dGtfcGlkKTsKKwkJaWYgKGZmX2xheW91dF9oYXNfYXZhaWxhYmxlX2RzKGhkci0+bHNlZykpCisJCQlwbmZzX3JlYWRfcmVzZW5kX3BuZnMoaGRyKTsKKwkJZWxzZQorCQkJZmZfbGF5b3V0X3Jlc2V0X3JlYWQoaGRyKTsKKwkJcnBjX2V4aXQodGFzaywgMCk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwloZHItPnBnaW9fZG9uZV9jYiA9IGZmX2xheW91dF9yZWFkX2RvbmVfY2I7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENhbGwgb3BzIGZvciB0aGUgYXN5bmMgcmVhZC93cml0ZSBjYXNlcworICogSW4gdGhlIGNhc2Ugb2YgZGVuc2UgbGF5b3V0cywgdGhlIG9mZnNldCBuZWVkcyB0byBiZSByZXNldCB0byBpdHMKKyAqIG9yaWdpbmFsIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBmZl9sYXlvdXRfcmVhZF9wcmVwYXJlX3YzKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICpoZHIgPSBkYXRhOworCisJaWYgKGZmX2xheW91dF9yZWFkX3ByZXBhcmVfY29tbW9uKHRhc2ssIGhkcikpCisJCXJldHVybjsKKworCXJwY19jYWxsX3N0YXJ0KHRhc2spOworfQorCitzdGF0aWMgaW50IGZmX2xheW91dF9zZXR1cF9zZXF1ZW5jZShzdHJ1Y3QgbmZzX2NsaWVudCAqZHNfY2xwLAorCQkJCSAgICBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzICphcmdzLAorCQkJCSAgICBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMgKnJlcywKKwkJCQkgICAgc3RydWN0IHJwY190YXNrICp0YXNrKQoreworCWlmIChkc19jbHAtPmNsX3Nlc3Npb24pCisJCXJldHVybiBuZnM0MV9zZXR1cF9zZXF1ZW5jZShkc19jbHAtPmNsX3Nlc3Npb24sCisJCQkJCSAgIGFyZ3MsCisJCQkJCSAgIHJlcywKKwkJCQkJICAgdGFzayk7CisJcmV0dXJuIG5mczQwX3NldHVwX3NlcXVlbmNlKGRzX2NscC0+Y2xfc2xvdF90YmwsCisJCQkJICAgYXJncywKKwkJCQkgICByZXMsCisJCQkJICAgdGFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGZmX2xheW91dF9yZWFkX3ByZXBhcmVfdjQoc3RydWN0IHJwY190YXNrICp0YXNrLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkciA9IGRhdGE7CisKKwlpZiAoZmZfbGF5b3V0X3JlYWRfcHJlcGFyZV9jb21tb24odGFzaywgaGRyKSkKKwkJcmV0dXJuOworCisJaWYgKGZmX2xheW91dF9zZXR1cF9zZXF1ZW5jZShoZHItPmRzX2NscCwKKwkJCQkgICAgICZoZHItPmFyZ3Muc2VxX2FyZ3MsCisJCQkJICAgICAmaGRyLT5yZXMuc2VxX3JlcywKKwkJCQkgICAgIHRhc2spKQorCQlyZXR1cm47CisKKwlpZiAobmZzNF9zZXRfcndfc3RhdGVpZCgmaGRyLT5hcmdzLnN0YXRlaWQsIGhkci0+YXJncy5jb250ZXh0LAorCQkJaGRyLT5hcmdzLmxvY2tfY29udGV4dCwgRk1PREVfUkVBRCkgPT0gLUVJTykKKwkJcnBjX2V4aXQodGFzaywgLUVJTyk7IC8qIGxvc3QgbG9jaywgdGVybWluYXRlIEkvTyAqLworfQorCitzdGF0aWMgdm9pZCBmZl9sYXlvdXRfcmVhZF9jYWxsX2RvbmUoc3RydWN0IHJwY190YXNrICp0YXNrLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkciA9IGRhdGE7CisKKwlkcHJpbnRrKCItLT4gJXMgdGFzay0+dGtfc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgdGFzay0+dGtfc3RhdHVzKTsKKworCWlmICh0ZXN0X2JpdChORlNfSU9IRFJfUkVETywgJmhkci0+ZmxhZ3MpICYmCisJICAgIHRhc2stPnRrX3N0YXR1cyA9PSAwKSB7CisJCW5mczRfc2VxdWVuY2VfZG9uZSh0YXNrLCAmaGRyLT5yZXMuc2VxX3Jlcyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBOb3RlIHRoaXMgbWF5IGNhdXNlIFJQQyB0byBiZSByZXNlbnQgKi8KKwloZHItPm1kc19vcHMtPnJwY19jYWxsX2RvbmUodGFzaywgaGRyKTsKK30KKworc3RhdGljIHZvaWQgZmZfbGF5b3V0X3JlYWRfY291bnRfc3RhdHMoc3RydWN0IHJwY190YXNrICp0YXNrLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkciA9IGRhdGE7CisKKwlycGNfY291bnRfaW9zdGF0c19tZXRyaWNzKHRhc2ssCisJICAgICZORlNfQ0xJRU5UKGhkci0+aW5vZGUpLT5jbF9tZXRyaWNzW05GU1BST0M0X0NMTlRfUkVBRF0pOworfQorCitzdGF0aWMgaW50IGZmX2xheW91dF93cml0ZV9kb25lX2NiKHN0cnVjdCBycGNfdGFzayAqdGFzaywKKwkJCQlzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICpoZHIpCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlpbnQgZXJyOworCisJdHJhY2VfbmZzNF9wbmZzX3dyaXRlKGhkciwgdGFzay0+dGtfc3RhdHVzKTsKKwlpZiAodGFzay0+dGtfc3RhdHVzID09IC1FVElNRURPVVQgJiYgIWhkci0+cmVzLm9wX3N0YXR1cykKKwkJaGRyLT5yZXMub3Bfc3RhdHVzID0gTkZTNEVSUl9OWElPOworCWlmICh0YXNrLT50a19zdGF0dXMgPCAwICYmIGhkci0+cmVzLm9wX3N0YXR1cykKKwkJZmZfbGF5b3V0X2lvX3RyYWNrX2RzX2Vycm9yKGhkci0+bHNlZywgaGRyLT5wZ2lvX21pcnJvcl9pZHgsCisJCQkJCSAgICBoZHItPmFyZ3Mub2Zmc2V0LCBoZHItPmFyZ3MuY291bnQsCisJCQkJCSAgICBoZHItPnJlcy5vcF9zdGF0dXMsIE9QX1dSSVRFKTsKKwllcnIgPSBmZl9sYXlvdXRfYXN5bmNfaGFuZGxlX2Vycm9yKHRhc2ssIGhkci0+YXJncy5jb250ZXh0LT5zdGF0ZSwKKwkJCQkJICAgaGRyLT5kc19jbHAsIGhkci0+bHNlZywKKwkJCQkJICAgaGRyLT5wZ2lvX21pcnJvcl9pZHgpOworCisJc3dpdGNoIChlcnIpIHsKKwljYXNlIC1ORlM0RVJSX1JFU0VUX1RPX1BORlM6CisJY2FzZSAtTkZTNEVSUl9SRVNFVF9UT19NRFM6CisJCWlub2RlID0gaGRyLT5sc2VnLT5wbHNfbGF5b3V0LT5wbGhfaW5vZGU7CisJCXBuZnNfZXJyb3JfbWFya19sYXlvdXRfZm9yX3JldHVybihpbm9kZSwgaGRyLT5sc2VnKTsKKwkJaWYgKGVyciA9PSAtTkZTNEVSUl9SRVNFVF9UT19QTkZTKSB7CisJCQlwbmZzX3NldF9yZXRyeV9sYXlvdXRnZXQoaGRyLT5sc2VnLT5wbHNfbGF5b3V0KTsKKwkJCWZmX2xheW91dF9yZXNldF93cml0ZShoZHIsIHRydWUpOworCQl9IGVsc2UgeworCQkJcG5mc19jbGVhcl9yZXRyeV9sYXlvdXRnZXQoaGRyLT5sc2VnLT5wbHNfbGF5b3V0KTsKKwkJCWZmX2xheW91dF9yZXNldF93cml0ZShoZHIsIGZhbHNlKTsKKwkJfQorCQlyZXR1cm4gdGFzay0+dGtfc3RhdHVzOworCWNhc2UgLUVBR0FJTjoKKwkJcnBjX3Jlc3RhcnRfY2FsbF9wcmVwYXJlKHRhc2spOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlpZiAoaGRyLT5yZXMudmVyZi0+Y29tbWl0dGVkID09IE5GU19GSUxFX1NZTkMgfHwKKwkgICAgaGRyLT5yZXMudmVyZi0+Y29tbWl0dGVkID09IE5GU19EQVRBX1NZTkMpCisJCWZmX2xheW91dF9zZXRfbGF5b3V0Y29tbWl0KGhkcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmZl9sYXlvdXRfY29tbWl0X2RvbmVfY2Ioc3RydWN0IHJwY190YXNrICp0YXNrLAorCQkJCSAgICAgc3RydWN0IG5mc19jb21taXRfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCBlcnI7CisKKwl0cmFjZV9uZnM0X3BuZnNfY29tbWl0X2RzKGRhdGEsIHRhc2stPnRrX3N0YXR1cyk7CisJaWYgKHRhc2stPnRrX3N0YXR1cyA9PSAtRVRJTUVET1VUICYmICFkYXRhLT5yZXMub3Bfc3RhdHVzKQorCQlkYXRhLT5yZXMub3Bfc3RhdHVzID0gTkZTNEVSUl9OWElPOworCWlmICh0YXNrLT50a19zdGF0dXMgPCAwICYmIGRhdGEtPnJlcy5vcF9zdGF0dXMpCisJCWZmX2xheW91dF9pb190cmFja19kc19lcnJvcihkYXRhLT5sc2VnLCBkYXRhLT5kc19jb21taXRfaW5kZXgsCisJCQkJCSAgICBkYXRhLT5hcmdzLm9mZnNldCwgZGF0YS0+YXJncy5jb3VudCwKKwkJCQkJICAgIGRhdGEtPnJlcy5vcF9zdGF0dXMsIE9QX0NPTU1JVCk7CisJZXJyID0gZmZfbGF5b3V0X2FzeW5jX2hhbmRsZV9lcnJvcih0YXNrLCBOVUxMLCBkYXRhLT5kc19jbHAsCisJCQkJCSAgIGRhdGEtPmxzZWcsIGRhdGEtPmRzX2NvbW1pdF9pbmRleCk7CisKKwlzd2l0Y2ggKGVycikgeworCWNhc2UgLU5GUzRFUlJfUkVTRVRfVE9fUE5GUzoKKwljYXNlIC1ORlM0RVJSX1JFU0VUX1RPX01EUzoKKwkJaW5vZGUgPSBkYXRhLT5sc2VnLT5wbHNfbGF5b3V0LT5wbGhfaW5vZGU7CisJCXBuZnNfZXJyb3JfbWFya19sYXlvdXRfZm9yX3JldHVybihpbm9kZSwgZGF0YS0+bHNlZyk7CisJCWlmIChlcnIgPT0gLU5GUzRFUlJfUkVTRVRfVE9fUE5GUykKKwkJCXBuZnNfc2V0X3JldHJ5X2xheW91dGdldChkYXRhLT5sc2VnLT5wbHNfbGF5b3V0KTsKKwkJZWxzZQorCQkJcG5mc19jbGVhcl9yZXRyeV9sYXlvdXRnZXQoZGF0YS0+bHNlZy0+cGxzX2xheW91dCk7CisJCXBuZnNfZ2VuZXJpY19wcmVwYXJlX3RvX3Jlc2VuZF93cml0ZXMoZGF0YSk7CisJCXJldHVybiAtRUFHQUlOOworCWNhc2UgLUVBR0FJTjoKKwkJcnBjX3Jlc3RhcnRfY2FsbF9wcmVwYXJlKHRhc2spOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlpZiAoZGF0YS0+dmVyZi5jb21taXR0ZWQgPT0gTkZTX1VOU1RBQkxFKQorCQlwbmZzX2NvbW1pdF9zZXRfbGF5b3V0Y29tbWl0KGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmZfbGF5b3V0X3dyaXRlX3ByZXBhcmVfY29tbW9uKHN0cnVjdCBycGNfdGFzayAqdGFzaywKKwkJCQkJICBzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICpoZHIpCit7CisJaWYgKHVubGlrZWx5KHRlc3RfYml0KE5GU19DT05URVhUX0JBRCwgJmhkci0+YXJncy5jb250ZXh0LT5mbGFncykpKSB7CisJCXJwY19leGl0KHRhc2ssIC1FSU8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoZmZfbGF5b3V0X3Jlc2V0X3RvX21kcyhoZHItPmxzZWcsIGhkci0+cGdpb19taXJyb3JfaWR4KSkgeworCQlib29sIHJldHJ5X3BuZnM7CisKKwkJcmV0cnlfcG5mcyA9IGZmX2xheW91dF9oYXNfYXZhaWxhYmxlX2RzKGhkci0+bHNlZyk7CisJCWRwcmludGsoIiVzIHRhc2sgJXUgcmVzZXQgaW8gdG8gJXNcbiIsIF9fZnVuY19fLAorCQkJdGFzay0+dGtfcGlkLCByZXRyeV9wbmZzID8gInBORlMiIDogIk1EUyIpOworCQlmZl9sYXlvdXRfcmVzZXRfd3JpdGUoaGRyLCByZXRyeV9wbmZzKTsKKwkJcnBjX2V4aXQodGFzaywgMCk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmZl9sYXlvdXRfd3JpdGVfcHJlcGFyZV92MyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqaGRyID0gZGF0YTsKKworCWlmIChmZl9sYXlvdXRfd3JpdGVfcHJlcGFyZV9jb21tb24odGFzaywgaGRyKSkKKwkJcmV0dXJuOworCisJcnBjX2NhbGxfc3RhcnQodGFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGZmX2xheW91dF93cml0ZV9wcmVwYXJlX3Y0KHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICpoZHIgPSBkYXRhOworCisJaWYgKGZmX2xheW91dF93cml0ZV9wcmVwYXJlX2NvbW1vbih0YXNrLCBoZHIpKQorCQlyZXR1cm47CisKKwlpZiAoZmZfbGF5b3V0X3NldHVwX3NlcXVlbmNlKGhkci0+ZHNfY2xwLAorCQkJCSAgICAgJmhkci0+YXJncy5zZXFfYXJncywKKwkJCQkgICAgICZoZHItPnJlcy5zZXFfcmVzLAorCQkJCSAgICAgdGFzaykpCisJCXJldHVybjsKKworCWlmIChuZnM0X3NldF9yd19zdGF0ZWlkKCZoZHItPmFyZ3Muc3RhdGVpZCwgaGRyLT5hcmdzLmNvbnRleHQsCisJCQloZHItPmFyZ3MubG9ja19jb250ZXh0LCBGTU9ERV9XUklURSkgPT0gLUVJTykKKwkJcnBjX2V4aXQodGFzaywgLUVJTyk7IC8qIGxvc3QgbG9jaywgdGVybWluYXRlIEkvTyAqLworfQorCitzdGF0aWMgdm9pZCBmZl9sYXlvdXRfd3JpdGVfY2FsbF9kb25lKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICpoZHIgPSBkYXRhOworCisJaWYgKHRlc3RfYml0KE5GU19JT0hEUl9SRURPLCAmaGRyLT5mbGFncykgJiYKKwkgICAgdGFzay0+dGtfc3RhdHVzID09IDApIHsKKwkJbmZzNF9zZXF1ZW5jZV9kb25lKHRhc2ssICZoZHItPnJlcy5zZXFfcmVzKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE5vdGUgdGhpcyBtYXkgY2F1c2UgUlBDIHRvIGJlIHJlc2VudCAqLworCWhkci0+bWRzX29wcy0+cnBjX2NhbGxfZG9uZSh0YXNrLCBoZHIpOworfQorCitzdGF0aWMgdm9pZCBmZl9sYXlvdXRfd3JpdGVfY291bnRfc3RhdHMoc3RydWN0IHJwY190YXNrICp0YXNrLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkciA9IGRhdGE7CisKKwlycGNfY291bnRfaW9zdGF0c19tZXRyaWNzKHRhc2ssCisJICAgICZORlNfQ0xJRU5UKGhkci0+aW5vZGUpLT5jbF9tZXRyaWNzW05GU1BST0M0X0NMTlRfV1JJVEVdKTsKK30KKworc3RhdGljIHZvaWQgZmZfbGF5b3V0X2NvbW1pdF9wcmVwYXJlX3YzKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqZGF0YSkKK3sKKwlycGNfY2FsbF9zdGFydCh0YXNrKTsKK30KKworc3RhdGljIHZvaWQgZmZfbGF5b3V0X2NvbW1pdF9wcmVwYXJlX3Y0KHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzX2NvbW1pdF9kYXRhICp3ZGF0YSA9IGRhdGE7CisKKwlmZl9sYXlvdXRfc2V0dXBfc2VxdWVuY2Uod2RhdGEtPmRzX2NscCwKKwkJCQkgJndkYXRhLT5hcmdzLnNlcV9hcmdzLAorCQkJCSAmd2RhdGEtPnJlcy5zZXFfcmVzLAorCQkJCSB0YXNrKTsKK30KKworc3RhdGljIHZvaWQgZmZfbGF5b3V0X2NvbW1pdF9jb3VudF9zdGF0cyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5mc19jb21taXRfZGF0YSAqY2RhdGEgPSBkYXRhOworCisJcnBjX2NvdW50X2lvc3RhdHNfbWV0cmljcyh0YXNrLAorCSAgICAmTkZTX0NMSUVOVChjZGF0YS0+aW5vZGUpLT5jbF9tZXRyaWNzW05GU1BST0M0X0NMTlRfQ09NTUlUXSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzIGZmX2xheW91dF9yZWFkX2NhbGxfb3BzX3YzID0geworCS5ycGNfY2FsbF9wcmVwYXJlID0gZmZfbGF5b3V0X3JlYWRfcHJlcGFyZV92MywKKwkucnBjX2NhbGxfZG9uZSA9IGZmX2xheW91dF9yZWFkX2NhbGxfZG9uZSwKKwkucnBjX2NvdW50X3N0YXRzID0gZmZfbGF5b3V0X3JlYWRfY291bnRfc3RhdHMsCisJLnJwY19yZWxlYXNlID0gcG5mc19nZW5lcmljX3J3X3JlbGVhc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBmZl9sYXlvdXRfcmVhZF9jYWxsX29wc192NCA9IHsKKwkucnBjX2NhbGxfcHJlcGFyZSA9IGZmX2xheW91dF9yZWFkX3ByZXBhcmVfdjQsCisJLnJwY19jYWxsX2RvbmUgPSBmZl9sYXlvdXRfcmVhZF9jYWxsX2RvbmUsCisJLnJwY19jb3VudF9zdGF0cyA9IGZmX2xheW91dF9yZWFkX2NvdW50X3N0YXRzLAorCS5ycGNfcmVsZWFzZSA9IHBuZnNfZ2VuZXJpY19yd19yZWxlYXNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgZmZfbGF5b3V0X3dyaXRlX2NhbGxfb3BzX3YzID0geworCS5ycGNfY2FsbF9wcmVwYXJlID0gZmZfbGF5b3V0X3dyaXRlX3ByZXBhcmVfdjMsCisJLnJwY19jYWxsX2RvbmUgPSBmZl9sYXlvdXRfd3JpdGVfY2FsbF9kb25lLAorCS5ycGNfY291bnRfc3RhdHMgPSBmZl9sYXlvdXRfd3JpdGVfY291bnRfc3RhdHMsCisJLnJwY19yZWxlYXNlID0gcG5mc19nZW5lcmljX3J3X3JlbGVhc2UsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBmZl9sYXlvdXRfd3JpdGVfY2FsbF9vcHNfdjQgPSB7CisJLnJwY19jYWxsX3ByZXBhcmUgPSBmZl9sYXlvdXRfd3JpdGVfcHJlcGFyZV92NCwKKwkucnBjX2NhbGxfZG9uZSA9IGZmX2xheW91dF93cml0ZV9jYWxsX2RvbmUsCisJLnJwY19jb3VudF9zdGF0cyA9IGZmX2xheW91dF93cml0ZV9jb3VudF9zdGF0cywKKwkucnBjX3JlbGVhc2UgPSBwbmZzX2dlbmVyaWNfcndfcmVsZWFzZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzIGZmX2xheW91dF9jb21taXRfY2FsbF9vcHNfdjMgPSB7CisJLnJwY19jYWxsX3ByZXBhcmUgPSBmZl9sYXlvdXRfY29tbWl0X3ByZXBhcmVfdjMsCisJLnJwY19jYWxsX2RvbmUgPSBwbmZzX2dlbmVyaWNfd3JpdGVfY29tbWl0X2RvbmUsCisJLnJwY19jb3VudF9zdGF0cyA9IGZmX2xheW91dF9jb21taXRfY291bnRfc3RhdHMsCisJLnJwY19yZWxlYXNlID0gcG5mc19nZW5lcmljX2NvbW1pdF9yZWxlYXNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgZmZfbGF5b3V0X2NvbW1pdF9jYWxsX29wc192NCA9IHsKKwkucnBjX2NhbGxfcHJlcGFyZSA9IGZmX2xheW91dF9jb21taXRfcHJlcGFyZV92NCwKKwkucnBjX2NhbGxfZG9uZSA9IHBuZnNfZ2VuZXJpY193cml0ZV9jb21taXRfZG9uZSwKKwkucnBjX2NvdW50X3N0YXRzID0gZmZfbGF5b3V0X2NvbW1pdF9jb3VudF9zdGF0cywKKwkucnBjX3JlbGVhc2UgPSBwbmZzX2dlbmVyaWNfY29tbWl0X3JlbGVhc2UsCit9OworCitzdGF0aWMgZW51bSBwbmZzX3RyeV9zdGF0dXMKK2ZmX2xheW91dF9yZWFkX3BhZ2VsaXN0KHN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkcikKK3sKKwlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZyA9IGhkci0+bHNlZzsKKwlzdHJ1Y3QgbmZzNF9wbmZzX2RzICpkczsKKwlzdHJ1Y3QgcnBjX2NsbnQgKmRzX2NsbnQ7CisJc3RydWN0IHJwY19jcmVkICpkc19jcmVkOworCWxvZmZfdCBvZmZzZXQgPSBoZHItPmFyZ3Mub2Zmc2V0OworCXUzMiBpZHggPSBoZHItPnBnaW9fbWlycm9yX2lkeDsKKwlpbnQgdmVyczsKKwlzdHJ1Y3QgbmZzX2ZoICpmaDsKKworCWRwcmludGsoIi0tPiAlcyBpbm8gJWx1IHBnYmFzZSAldSByZXEgJVp1QCVsbHVcbiIsCisJCV9fZnVuY19fLCBoZHItPmlub2RlLT5pX2lubywKKwkJaGRyLT5hcmdzLnBnYmFzZSwgKHNpemVfdCloZHItPmFyZ3MuY291bnQsIG9mZnNldCk7CisKKwlkcyA9IG5mczRfZmZfbGF5b3V0X3ByZXBhcmVfZHMobHNlZywgaWR4LCBmYWxzZSk7CisJaWYgKCFkcykKKwkJZ290byBvdXRfZmFpbGVkOworCisJZHNfY2xudCA9IG5mczRfZmZfZmluZF9vcl9jcmVhdGVfZHNfY2xpZW50KGxzZWcsIGlkeCwgZHMtPmRzX2NscCwKKwkJCQkJCSAgIGhkci0+aW5vZGUpOworCWlmIChJU19FUlIoZHNfY2xudCkpCisJCWdvdG8gb3V0X2ZhaWxlZDsKKworCWRzX2NyZWQgPSBmZl9sYXlvdXRfZ2V0X2RzX2NyZWQobHNlZywgaWR4LCBoZHItPmNyZWQpOworCWlmIChJU19FUlIoZHNfY3JlZCkpCisJCWdvdG8gb3V0X2ZhaWxlZDsKKworCXZlcnMgPSBuZnM0X2ZmX2xheW91dF9kc192ZXJzaW9uKGxzZWcsIGlkeCk7CisKKwlkcHJpbnRrKCIlcyBVU0UgRFM6ICVzIGNsX2NvdW50ICVkIHZlcnMgJWRcbiIsIF9fZnVuY19fLAorCQlkcy0+ZHNfcmVtb3Rlc3RyLCBhdG9taWNfcmVhZCgmZHMtPmRzX2NscC0+Y2xfY291bnQpLCB2ZXJzKTsKKworCWF0b21pY19pbmMoJmRzLT5kc19jbHAtPmNsX2NvdW50KTsKKwloZHItPmRzX2NscCA9IGRzLT5kc19jbHA7CisJZmggPSBuZnM0X2ZmX2xheW91dF9zZWxlY3RfZHNfZmgobHNlZywgaWR4KTsKKwlpZiAoZmgpCisJCWhkci0+YXJncy5maCA9IGZoOworCisJLyoKKwkgKiBOb3RlIHRoYXQgaWYgd2UgZXZlciBkZWNpZGUgdG8gc3BsaXQgYWNyb3NzIERTZXMsCisJICogdGhlbiB3ZSBtYXkgbmVlZCB0byBoYW5kbGUgZGVuc2UtbGlrZSBvZmZzZXRzLgorCSAqLworCWhkci0+YXJncy5vZmZzZXQgPSBvZmZzZXQ7CisJaGRyLT5tZHNfb2Zmc2V0ID0gb2Zmc2V0OworCisJLyogUGVyZm9ybSBhbiBhc3luY2hyb25vdXMgcmVhZCB0byBkcyAqLworCW5mc19pbml0aWF0ZV9wZ2lvKGRzX2NsbnQsIGhkciwgZHNfY3JlZCwgZHMtPmRzX2NscC0+cnBjX29wcywKKwkJCSAgdmVycyA9PSAzID8gJmZmX2xheW91dF9yZWFkX2NhbGxfb3BzX3YzIDoKKwkJCQkgICAgICAmZmZfbGF5b3V0X3JlYWRfY2FsbF9vcHNfdjQsCisJCQkgIDAsIFJQQ19UQVNLX1NPRlRDT05OKTsKKworCXJldHVybiBQTkZTX0FUVEVNUFRFRDsKKworb3V0X2ZhaWxlZDoKKwlpZiAoZmZfbGF5b3V0X2hhc19hdmFpbGFibGVfZHMobHNlZykpCisJCXJldHVybiBQTkZTX1RSWV9BR0FJTjsKKwlyZXR1cm4gUE5GU19OT1RfQVRURU1QVEVEOworfQorCisvKiBQZXJmb3JtIGFzeW5jIHdyaXRlcy4gKi8KK3N0YXRpYyBlbnVtIHBuZnNfdHJ5X3N0YXR1cworZmZfbGF5b3V0X3dyaXRlX3BhZ2VsaXN0KHN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkciwgaW50IHN5bmMpCit7CisJc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcgPSBoZHItPmxzZWc7CisJc3RydWN0IG5mczRfcG5mc19kcyAqZHM7CisJc3RydWN0IHJwY19jbG50ICpkc19jbG50OworCXN0cnVjdCBycGNfY3JlZCAqZHNfY3JlZDsKKwlsb2ZmX3Qgb2Zmc2V0ID0gaGRyLT5hcmdzLm9mZnNldDsKKwlpbnQgdmVyczsKKwlzdHJ1Y3QgbmZzX2ZoICpmaDsKKwlpbnQgaWR4ID0gaGRyLT5wZ2lvX21pcnJvcl9pZHg7CisKKwlkcyA9IG5mczRfZmZfbGF5b3V0X3ByZXBhcmVfZHMobHNlZywgaWR4LCB0cnVlKTsKKwlpZiAoIWRzKQorCQlyZXR1cm4gUE5GU19OT1RfQVRURU1QVEVEOworCisJZHNfY2xudCA9IG5mczRfZmZfZmluZF9vcl9jcmVhdGVfZHNfY2xpZW50KGxzZWcsIGlkeCwgZHMtPmRzX2NscCwKKwkJCQkJCSAgIGhkci0+aW5vZGUpOworCWlmIChJU19FUlIoZHNfY2xudCkpCisJCXJldHVybiBQTkZTX05PVF9BVFRFTVBURUQ7CisKKwlkc19jcmVkID0gZmZfbGF5b3V0X2dldF9kc19jcmVkKGxzZWcsIGlkeCwgaGRyLT5jcmVkKTsKKwlpZiAoSVNfRVJSKGRzX2NyZWQpKQorCQlyZXR1cm4gUE5GU19OT1RfQVRURU1QVEVEOworCisJdmVycyA9IG5mczRfZmZfbGF5b3V0X2RzX3ZlcnNpb24obHNlZywgaWR4KTsKKworCWRwcmludGsoIiVzIGlubyAlbHUgc3luYyAlZCByZXEgJVp1QCVsbHUgRFM6ICVzIGNsX2NvdW50ICVkIHZlcnMgJWRcbiIsCisJCV9fZnVuY19fLCBoZHItPmlub2RlLT5pX2lubywgc3luYywgKHNpemVfdCkgaGRyLT5hcmdzLmNvdW50LAorCQlvZmZzZXQsIGRzLT5kc19yZW1vdGVzdHIsIGF0b21pY19yZWFkKCZkcy0+ZHNfY2xwLT5jbF9jb3VudCksCisJCXZlcnMpOworCisJaGRyLT5wZ2lvX2RvbmVfY2IgPSBmZl9sYXlvdXRfd3JpdGVfZG9uZV9jYjsKKwlhdG9taWNfaW5jKCZkcy0+ZHNfY2xwLT5jbF9jb3VudCk7CisJaGRyLT5kc19jbHAgPSBkcy0+ZHNfY2xwOworCWhkci0+ZHNfY29tbWl0X2lkeCA9IGlkeDsKKwlmaCA9IG5mczRfZmZfbGF5b3V0X3NlbGVjdF9kc19maChsc2VnLCBpZHgpOworCWlmIChmaCkKKwkJaGRyLT5hcmdzLmZoID0gZmg7CisKKwkvKgorCSAqIE5vdGUgdGhhdCBpZiB3ZSBldmVyIGRlY2lkZSB0byBzcGxpdCBhY3Jvc3MgRFNlcywKKwkgKiB0aGVuIHdlIG1heSBuZWVkIHRvIGhhbmRsZSBkZW5zZS1saWtlIG9mZnNldHMuCisJICovCisJaGRyLT5hcmdzLm9mZnNldCA9IG9mZnNldDsKKworCS8qIFBlcmZvcm0gYW4gYXN5bmNocm9ub3VzIHdyaXRlICovCisJbmZzX2luaXRpYXRlX3BnaW8oZHNfY2xudCwgaGRyLCBkc19jcmVkLCBkcy0+ZHNfY2xwLT5ycGNfb3BzLAorCQkJICB2ZXJzID09IDMgPyAmZmZfbGF5b3V0X3dyaXRlX2NhbGxfb3BzX3YzIDoKKwkJCQkgICAgICAmZmZfbGF5b3V0X3dyaXRlX2NhbGxfb3BzX3Y0LAorCQkJICBzeW5jLCBSUENfVEFTS19TT0ZUQ09OTik7CisJcmV0dXJuIFBORlNfQVRURU1QVEVEOworfQorCitzdGF0aWMgdm9pZAorZmZfbGF5b3V0X21hcmtfcmVxdWVzdF9jb21taXQoc3RydWN0IG5mc19wYWdlICpyZXEsCisJCQkgICAgICBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywKKwkJCSAgICAgIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvLAorCQkJICAgICAgdTMyIGRzX2NvbW1pdF9pZHgpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwlzdHJ1Y3QgcG5mc19jb21taXRfYnVja2V0ICpidWNrZXRzOworCisJc3Bpbl9sb2NrKGNpbmZvLT5sb2NrKTsKKwlidWNrZXRzID0gY2luZm8tPmRzLT5idWNrZXRzOworCWxpc3QgPSAmYnVja2V0c1tkc19jb21taXRfaWR4XS53cml0dGVuOworCWlmIChsaXN0X2VtcHR5KGxpc3QpKSB7CisJCS8qIE5vbi1lbXB0eSBidWNrZXRzIGhvbGQgYSByZWZlcmVuY2Ugb24gdGhlIGxzZWcuICBUaGF0IHJlZgorCQkgKiBpcyBub3JtYWxseSB0cmFuc2ZlcnJlZCB0byB0aGUgQ09NTUlUIGNhbGwgYW5kIHJlbGVhc2VkCisJCSAqIHRoZXJlLiAgSXQgY291bGQgYWxzbyBiZSByZWxlYXNlZCBpZiB0aGUgbGFzdCByZXEgaXMgcHVsbGVkCisJCSAqIG9mZiBkdWUgdG8gYSByZXdyaXRlLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUgZG9uZSBpbgorCQkgKiBwbmZzX2NvbW1vbl9jbGVhcl9yZXF1ZXN0X2NvbW1pdAorCQkgKi8KKwkJV0FSTl9PTl9PTkNFKGJ1Y2tldHNbZHNfY29tbWl0X2lkeF0ud2xzZWcgIT0gTlVMTCk7CisJCWJ1Y2tldHNbZHNfY29tbWl0X2lkeF0ud2xzZWcgPSBwbmZzX2dldF9sc2VnKGxzZWcpOworCX0KKwlzZXRfYml0KFBHX0NPTU1JVF9UT19EUywgJnJlcS0+d2JfZmxhZ3MpOworCWNpbmZvLT5kcy0+bndyaXR0ZW4rKzsKKworCS8qIG5mc19yZXF1ZXN0X2FkZF9jb21taXRfbGlzdCgpLiBXZSBuZWVkIHRvIGFkZCByZXEgdG8gbGlzdCB3aXRob3V0CisJICogZHJvcHBpbmcgY2luZm8gbG9jay4KKwkgKi8KKwlzZXRfYml0KFBHX0NMRUFOLCAmKHJlcSktPndiX2ZsYWdzKTsKKwluZnNfbGlzdF9hZGRfcmVxdWVzdChyZXEsIGxpc3QpOworCWNpbmZvLT5tZHMtPm5jb21taXQrKzsKKwlzcGluX3VubG9jayhjaW5mby0+bG9jayk7CisJaWYgKCFjaW5mby0+ZHJlcSkgeworCQlpbmNfem9uZV9wYWdlX3N0YXRlKHJlcS0+d2JfcGFnZSwgTlJfVU5TVEFCTEVfTkZTKTsKKwkJaW5jX2JkaV9zdGF0KHBhZ2VfZmlsZV9tYXBwaW5nKHJlcS0+d2JfcGFnZSktPmJhY2tpbmdfZGV2X2luZm8sCisJCQkgICAgIEJESV9SRUNMQUlNQUJMRSk7CisJCV9fbWFya19pbm9kZV9kaXJ0eShyZXEtPndiX2NvbnRleHQtPmRlbnRyeS0+ZF9pbm9kZSwKKwkJCQkgICBJX0RJUlRZX0RBVEFTWU5DKTsKKwl9Cit9CisKK3N0YXRpYyB1MzIgY2FsY19kc19pbmRleF9mcm9tX2NvbW1pdChzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywgdTMyIGkpCit7CisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmZzX2ZoICoKK3NlbGVjdF9kc19maF9mcm9tX2NvbW1pdChzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywgdTMyIGkpCit7CisJc3RydWN0IG5mczRfZmZfbGF5b3V0X3NlZ21lbnQgKmZsc2VnID0gRkZfTEFZT1VUX0xTRUcobHNlZyk7CisKKwkvKiBGSVhNRTogQXNzdW1lIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgTkZTIHZlcnNpb24gYXZhaWxhYmxlCisJICogZm9yIHRoZSBEUy4KKwkgKi8KKwlyZXR1cm4gJmZsc2VnLT5taXJyb3JfYXJyYXlbaV0tPmZoX3ZlcnNpb25zWzBdOworfQorCitzdGF0aWMgaW50IGZmX2xheW91dF9pbml0aWF0ZV9jb21taXQoc3RydWN0IG5mc19jb21taXRfZGF0YSAqZGF0YSwgaW50IGhvdykKK3sKKwlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZyA9IGRhdGEtPmxzZWc7CisJc3RydWN0IG5mczRfcG5mc19kcyAqZHM7CisJc3RydWN0IHJwY19jbG50ICpkc19jbG50OworCXN0cnVjdCBycGNfY3JlZCAqZHNfY3JlZDsKKwl1MzIgaWR4OworCWludCB2ZXJzOworCXN0cnVjdCBuZnNfZmggKmZoOworCisJaWR4ID0gY2FsY19kc19pbmRleF9mcm9tX2NvbW1pdChsc2VnLCBkYXRhLT5kc19jb21taXRfaW5kZXgpOworCWRzID0gbmZzNF9mZl9sYXlvdXRfcHJlcGFyZV9kcyhsc2VnLCBpZHgsIHRydWUpOworCWlmICghZHMpCisJCWdvdG8gb3V0X2VycjsKKworCWRzX2NsbnQgPSBuZnM0X2ZmX2ZpbmRfb3JfY3JlYXRlX2RzX2NsaWVudChsc2VnLCBpZHgsIGRzLT5kc19jbHAsCisJCQkJCQkgICBkYXRhLT5pbm9kZSk7CisJaWYgKElTX0VSUihkc19jbG50KSkKKwkJZ290byBvdXRfZXJyOworCisJZHNfY3JlZCA9IGZmX2xheW91dF9nZXRfZHNfY3JlZChsc2VnLCBpZHgsIGRhdGEtPmNyZWQpOworCWlmIChJU19FUlIoZHNfY3JlZCkpCisJCWdvdG8gb3V0X2VycjsKKworCXZlcnMgPSBuZnM0X2ZmX2xheW91dF9kc192ZXJzaW9uKGxzZWcsIGlkeCk7CisKKwlkcHJpbnRrKCIlcyBpbm8gJWx1LCBob3cgJWQgY2xfY291bnQgJWQgdmVycyAlZFxuIiwgX19mdW5jX18sCisJCWRhdGEtPmlub2RlLT5pX2lubywgaG93LCBhdG9taWNfcmVhZCgmZHMtPmRzX2NscC0+Y2xfY291bnQpLAorCQl2ZXJzKTsKKwlkYXRhLT5jb21taXRfZG9uZV9jYiA9IGZmX2xheW91dF9jb21taXRfZG9uZV9jYjsKKwlkYXRhLT5jcmVkID0gZHNfY3JlZDsKKwlhdG9taWNfaW5jKCZkcy0+ZHNfY2xwLT5jbF9jb3VudCk7CisJZGF0YS0+ZHNfY2xwID0gZHMtPmRzX2NscDsKKwlmaCA9IHNlbGVjdF9kc19maF9mcm9tX2NvbW1pdChsc2VnLCBkYXRhLT5kc19jb21taXRfaW5kZXgpOworCWlmIChmaCkKKwkJZGF0YS0+YXJncy5maCA9IGZoOworCXJldHVybiBuZnNfaW5pdGlhdGVfY29tbWl0KGRzX2NsbnQsIGRhdGEsIGRzLT5kc19jbHAtPnJwY19vcHMsCisJCQkJICAgdmVycyA9PSAzID8gJmZmX2xheW91dF9jb21taXRfY2FsbF9vcHNfdjMgOgorCQkJCQkgICAgICAgJmZmX2xheW91dF9jb21taXRfY2FsbF9vcHNfdjQsCisJCQkJICAgaG93LCBSUENfVEFTS19TT0ZUQ09OTik7CitvdXRfZXJyOgorCXBuZnNfZ2VuZXJpY19wcmVwYXJlX3RvX3Jlc2VuZF93cml0ZXMoZGF0YSk7CisJcG5mc19nZW5lcmljX2NvbW1pdF9yZWxlYXNlKGRhdGEpOworCXJldHVybiAtRUFHQUlOOworfQorCitzdGF0aWMgaW50CitmZl9sYXlvdXRfY29tbWl0X3BhZ2VsaXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKm1kc19wYWdlcywKKwkJCSAgIGludCBob3csIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvKQoreworCXJldHVybiBwbmZzX2dlbmVyaWNfY29tbWl0X3BhZ2VsaXN0KGlub2RlLCBtZHNfcGFnZXMsIGhvdywgY2luZm8sCisJCQkJCSAgICBmZl9sYXlvdXRfaW5pdGlhdGVfY29tbWl0KTsKK30KKworc3RhdGljIHN0cnVjdCBwbmZzX2RzX2NvbW1pdF9pbmZvICoKK2ZmX2xheW91dF9nZXRfZHNfaW5mbyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxheW91dCA9IE5GU19JKGlub2RlKS0+bGF5b3V0OworCisJaWYgKGxheW91dCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiAmRkZfTEFZT1VUX0ZST01fSERSKGxheW91dCktPmNvbW1pdF9pbmZvOworfQorCitzdGF0aWMgdm9pZAorZmZfbGF5b3V0X2ZyZWVfZGV2ZWljZWlkX25vZGUoc3RydWN0IG5mczRfZGV2aWNlaWRfbm9kZSAqZCkKK3sKKwluZnM0X2ZmX2xheW91dF9mcmVlX2RldmljZWlkKGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfZHMsCisJCQkJCQkgIGlkX25vZGUpKTsKK30KKworc3RhdGljIGludCBmZl9sYXlvdXRfZW5jb2RlX2lvZXJyKHN0cnVjdCBuZnM0X2ZsZXhmaWxlX2xheW91dCAqZmxvLAorCQkJCSAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCQkgIGNvbnN0IHN0cnVjdCBuZnM0X2xheW91dHJldHVybl9hcmdzICphcmdzKQoreworCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmhkciA9ICZmbG8tPmdlbmVyaWNfaGRyOworCV9fYmUzMiAqc3RhcnQ7CisJaW50IGNvdW50ID0gMCwgcmV0ID0gMDsKKworCXN0YXJ0ID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA0KTsKKwlpZiAodW5saWtlbHkoIXN0YXJ0KSkKKwkJcmV0dXJuIC1FMkJJRzsKKworCS8qIFRoaXMgYXNzdW1lIHdlIGFsd2F5cyByZXR1cm4gX0FMTF8gbGF5b3V0cyAqLworCXNwaW5fbG9jaygmaGRyLT5wbGhfaW5vZGUtPmlfbG9jayk7CisJcmV0ID0gZmZfbGF5b3V0X2VuY29kZV9kc19pb2VycihmbG8sIHhkciwgJmNvdW50LCAmYXJncy0+cmFuZ2UpOworCXNwaW5fdW5sb2NrKCZoZHItPnBsaF9pbm9kZS0+aV9sb2NrKTsKKworCSpzdGFydCA9IGNwdV90b19iZTMyKGNvdW50KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIHJlcG9ydCBub3RoaW5nIGZvciBub3cgKi8KK3N0YXRpYyB2b2lkIGZmX2xheW91dF9lbmNvZGVfaW9zdGF0cyhzdHJ1Y3QgbmZzNF9mbGV4ZmlsZV9sYXlvdXQgKmZsbywKKwkJCQkgICAgIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZzNF9sYXlvdXRyZXR1cm5fYXJncyAqYXJncykKK3sKKwlfX2JlMzIgKnA7CisKKwlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA0KTsKKwlpZiAobGlrZWx5KHApKQorCQkqcCA9IGNwdV90b19iZTMyKDApOworfQorCitzdGF0aWMgc3RydWN0IG5mczRfZGV2aWNlaWRfbm9kZSAqCitmZl9sYXlvdXRfYWxsb2NfZGV2aWNlaWRfbm9kZShzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLAorCQkJICAgICAgc3RydWN0IHBuZnNfZGV2aWNlICpwZGV2LCBnZnBfdCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IG5mczRfZmZfbGF5b3V0X2RzICpkc2FkZHI7CisKKwlkc2FkZHIgPSBuZnM0X2ZmX2FsbG9jX2RldmljZWlkX25vZGUoc2VydmVyLCBwZGV2LCBnZnBfZmxhZ3MpOworCWlmICghZHNhZGRyKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gJmRzYWRkci0+aWRfbm9kZTsKK30KKworc3RhdGljIHZvaWQKK2ZmX2xheW91dF9lbmNvZGVfbGF5b3V0cmV0dXJuKHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvLAorCQkJICAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZnM0X2xheW91dHJldHVybl9hcmdzICphcmdzKQoreworCXN0cnVjdCBuZnM0X2ZsZXhmaWxlX2xheW91dCAqZmxvID0gRkZfTEFZT1VUX0ZST01fSERSKGxvKTsKKwlfX2JlMzIgKnN0YXJ0OworCisJZHByaW50aygiJXM6IEJlZ2luXG4iLCBfX2Z1bmNfXyk7CisJc3RhcnQgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsIDQpOworCUJVR19PTighc3RhcnQpOworCisJaWYgKGZmX2xheW91dF9lbmNvZGVfaW9lcnIoZmxvLCB4ZHIsIGFyZ3MpKQorCQlnb3RvIG91dDsKKworCWZmX2xheW91dF9lbmNvZGVfaW9zdGF0cyhmbG8sIHhkciwgYXJncyk7CitvdXQ6CisJKnN0YXJ0ID0gY3B1X3RvX2JlMzIoKHhkci0+cCAtIHN0YXJ0IC0gMSkgKiA0KTsKKwlkcHJpbnRrKCIlczogUmV0dXJuXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG5mc19sYXlvdXRkcml2ZXJfdHlwZSBmbGV4ZmlsZWxheW91dF90eXBlID0geworCS5pZAkJCT0gTEFZT1VUX0ZMRVhfRklMRVMsCisJLm5hbWUJCQk9ICJMQVlPVVRfRkxFWF9GSUxFUyIsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuYWxsb2NfbGF5b3V0X2hkcgk9IGZmX2xheW91dF9hbGxvY19sYXlvdXRfaGRyLAorCS5mcmVlX2xheW91dF9oZHIJPSBmZl9sYXlvdXRfZnJlZV9sYXlvdXRfaGRyLAorCS5hbGxvY19sc2VnCQk9IGZmX2xheW91dF9hbGxvY19sc2VnLAorCS5mcmVlX2xzZWcJCT0gZmZfbGF5b3V0X2ZyZWVfbHNlZywKKwkucGdfcmVhZF9vcHMJCT0gJmZmX2xheW91dF9wZ19yZWFkX29wcywKKwkucGdfd3JpdGVfb3BzCQk9ICZmZl9sYXlvdXRfcGdfd3JpdGVfb3BzLAorCS5nZXRfZHNfaW5mbwkJPSBmZl9sYXlvdXRfZ2V0X2RzX2luZm8sCisJLmZyZWVfZGV2aWNlaWRfbm9kZQk9IGZmX2xheW91dF9mcmVlX2RldmVpY2VpZF9ub2RlLAorCS5tYXJrX3JlcXVlc3RfY29tbWl0CT0gZmZfbGF5b3V0X21hcmtfcmVxdWVzdF9jb21taXQsCisJLmNsZWFyX3JlcXVlc3RfY29tbWl0CT0gcG5mc19nZW5lcmljX2NsZWFyX3JlcXVlc3RfY29tbWl0LAorCS5zY2FuX2NvbW1pdF9saXN0cwk9IHBuZnNfZ2VuZXJpY19zY2FuX2NvbW1pdF9saXN0cywKKwkucmVjb3Zlcl9jb21taXRfcmVxcwk9IHBuZnNfZ2VuZXJpY19yZWNvdmVyX2NvbW1pdF9yZXFzLAorCS5jb21taXRfcGFnZWxpc3QJPSBmZl9sYXlvdXRfY29tbWl0X3BhZ2VsaXN0LAorCS5yZWFkX3BhZ2VsaXN0CQk9IGZmX2xheW91dF9yZWFkX3BhZ2VsaXN0LAorCS53cml0ZV9wYWdlbGlzdAkJPSBmZl9sYXlvdXRfd3JpdGVfcGFnZWxpc3QsCisJLmFsbG9jX2RldmljZWlkX25vZGUgICAgPSBmZl9sYXlvdXRfYWxsb2NfZGV2aWNlaWRfbm9kZSwKKwkuZW5jb2RlX2xheW91dHJldHVybiAgICA9IGZmX2xheW91dF9lbmNvZGVfbGF5b3V0cmV0dXJuLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbmZzNGZsZXhmaWxlbGF5b3V0X2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICIlczogTkZTdjQgRmxleGZpbGUgTGF5b3V0IERyaXZlciBSZWdpc3RlcmluZy4uLlxuIiwKKwkgICAgICAgX19mdW5jX18pOworCXJldHVybiBwbmZzX3JlZ2lzdGVyX2xheW91dGRyaXZlcigmZmxleGZpbGVsYXlvdXRfdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuZnM0ZmxleGZpbGVsYXlvdXRfZXhpdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIiVzOiBORlN2NCBGbGV4ZmlsZSBMYXlvdXQgRHJpdmVyIFVucmVnaXN0ZXJpbmcuLi5cbiIsCisJICAgICAgIF9fZnVuY19fKTsKKwlwbmZzX3VucmVnaXN0ZXJfbGF5b3V0ZHJpdmVyKCZmbGV4ZmlsZWxheW91dF90eXBlKTsKK30KKworTU9EVUxFX0FMSUFTKCJuZnMtbGF5b3V0dHlwZTQtNCIpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRoZSBORlN2NCBmbGV4ZmlsZSBsYXlvdXQgZHJpdmVyIik7CisKK21vZHVsZV9pbml0KG5mczRmbGV4ZmlsZWxheW91dF9pbml0KTsKK21vZHVsZV9leGl0KG5mczRmbGV4ZmlsZWxheW91dF9leGl0KTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9mbGV4ZmlsZWxheW91dC9mbGV4ZmlsZWxheW91dC5oIGIvZnMvbmZzL2ZsZXhmaWxlbGF5b3V0L2ZsZXhmaWxlbGF5b3V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcwZjIwNAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL25mcy9mbGV4ZmlsZWxheW91dC9mbGV4ZmlsZWxheW91dC5oCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogTkZTdjQgZmxleGZpbGUgbGF5b3V0IGRyaXZlciBkYXRhIHN0cnVjdHVyZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0LCBQcmltYXJ5IERhdGEsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUYW8gUGVuZyA8YmVyZ3dvbGZAcHJpbWFyeWRhdGEuY29tPgorICovCisKKyNpZm5kZWYgRlNfTkZTX05GUzRGTEVYRklMRUxBWU9VVF9ICisjZGVmaW5lIEZTX05GU19ORlM0RkxFWEZJTEVMQVlPVVRfSAorCisjaW5jbHVkZSAiLi4vcG5mcy5oIgorCisvKiBYWFg6IExldCdzIGZpbHRlciBvdXQgaW5zYW5lbHkgbGFyZ2UgbWlycm9yIGNvdW50IGZvciBub3cgdG8gYXZvaWQgb29tCisgKiBkdWUgdG8gbmV0d29yayBlcnJvciBldGMuICovCisjZGVmaW5lIE5GUzRfRkxFWEZJTEVfTEFZT1VUX01BWF9NSVJST1JfQ05UIDQwOTYKKworc3RydWN0IG5mczRfZmZfZHNfdmVyc2lvbiB7CisJdTMyCQkJCXZlcnNpb247CisJdTMyCQkJCW1pbm9yX3ZlcnNpb247CisJdTMyCQkJCXJzaXplOworCXUzMgkJCQl3c2l6ZTsKKwlib29sCQkJCXRpZ2h0bHlfY291cGxlZDsKK307CisKKy8qIGNoYWluZWQgaW4gZ2xvYmFsIGRldmljZWlkIGhsaXN0ICovCitzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfZHMgeworCXN0cnVjdCBuZnM0X2RldmljZWlkX25vZGUJaWRfbm9kZTsKKwl1MzIJCQkJZHNfdmVyc2lvbnNfY250OworCXN0cnVjdCBuZnM0X2ZmX2RzX3ZlcnNpb24JKmRzX3ZlcnNpb25zOworCXN0cnVjdCBuZnM0X3BuZnNfZHMJCSpkczsKK307CisKK3N0cnVjdCBuZnM0X2ZmX2xheW91dF9kc19lcnIgeworCXN0cnVjdCBsaXN0X2hlYWQJCWxpc3Q7IC8qIGxpbmtlZCBpbiBtaXJyb3IgZXJyb3JfbGlzdCAqLworCXU2NAkJCQlvZmZzZXQ7CisJdTY0CQkJCWxlbmd0aDsKKwlpbnQJCQkJc3RhdHVzOworCWVudW0gbmZzX29wbnVtNAkJCW9wbnVtOworCW5mczRfc3RhdGVpZAkJCXN0YXRlaWQ7CisJc3RydWN0IG5mczRfZGV2aWNlaWQJCWRldmljZWlkOworfTsKKworc3RydWN0IG5mczRfZmZfbGF5b3V0X21pcnJvciB7CisJdTMyCQkJCWRzX2NvdW50OworCXUzMgkJCQllZmZpY2llbmN5OworCXN0cnVjdCBuZnM0X2ZmX2xheW91dF9kcwkqbWlycm9yX2RzOworCXUzMgkJCQlmaF92ZXJzaW9uc19jbnQ7CisJc3RydWN0IG5mc19maAkJCSpmaF92ZXJzaW9uczsKKwluZnM0X3N0YXRlaWQJCQlzdGF0ZWlkOworCXN0cnVjdCBuZnM0X3N0cmluZwkJdXNlcl9uYW1lOworCXN0cnVjdCBuZnM0X3N0cmluZwkJZ3JvdXBfbmFtZTsKKwl1MzIJCQkJdWlkOworCXUzMgkJCQlnaWQ7CisJc3RydWN0IHJwY19jcmVkCQkJKmNyZWQ7CisJc3BpbmxvY2tfdAkJCWxvY2s7Cit9OworCitzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfc2VnbWVudCB7CisJc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQJZ2VuZXJpY19oZHI7CisJdTY0CQkJCXN0cmlwZV91bml0OworCXUzMgkJCQltaXJyb3JfYXJyYXlfY250OworCXN0cnVjdCBuZnM0X2ZmX2xheW91dF9taXJyb3IJKiptaXJyb3JfYXJyYXk7Cit9OworCitzdHJ1Y3QgbmZzNF9mbGV4ZmlsZV9sYXlvdXQgeworCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgZ2VuZXJpY19oZHI7CisJc3RydWN0IHBuZnNfZHNfY29tbWl0X2luZm8gY29tbWl0X2luZm87CisJc3RydWN0IGxpc3RfaGVhZAllcnJvcl9saXN0OyAvKiBuZnM0X2ZmX2xheW91dF9kc19lcnIgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5mczRfZmxleGZpbGVfbGF5b3V0ICoKK0ZGX0xBWU9VVF9GUk9NX0hEUihzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGxvLCBzdHJ1Y3QgbmZzNF9mbGV4ZmlsZV9sYXlvdXQsIGdlbmVyaWNfaGRyKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfc2VnbWVudCAqCitGRl9MQVlPVVRfTFNFRyhzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGxzZWcsCisJCQkgICAgc3RydWN0IG5mczRfZmZfbGF5b3V0X3NlZ21lbnQsCisJCQkgICAgZ2VuZXJpY19oZHIpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnM0X2RldmljZWlkX25vZGUgKgorRkZfTEFZT1VUX0RFVklEX05PREUoc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcsIHUzMiBpZHgpCit7CisJaWYgKGlkeCA+PSBGRl9MQVlPVVRfTFNFRyhsc2VnKS0+bWlycm9yX2FycmF5X2NudCB8fAorCSAgICBGRl9MQVlPVVRfTFNFRyhsc2VnKS0+bWlycm9yX2FycmF5W2lkeF0gPT0gTlVMTCB8fAorCSAgICBGRl9MQVlPVVRfTFNFRyhsc2VnKS0+bWlycm9yX2FycmF5W2lkeF0tPm1pcnJvcl9kcyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gJkZGX0xBWU9VVF9MU0VHKGxzZWcpLT5taXJyb3JfYXJyYXlbaWR4XS0+bWlycm9yX2RzLT5pZF9ub2RlOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnM0X2ZmX2xheW91dF9kcyAqCitGRl9MQVlPVVRfTUlSUk9SX0RTKHN0cnVjdCBuZnM0X2RldmljZWlkX25vZGUgKm5vZGUpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfZHMsIGlkX25vZGUpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnM0X2ZmX2xheW91dF9taXJyb3IgKgorRkZfTEFZT1VUX0NPTVAoc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcsIHUzMiBpZHgpCit7CisJaWYgKGlkeCA+PSBGRl9MQVlPVVRfTFNFRyhsc2VnKS0+bWlycm9yX2FycmF5X2NudCkKKwkJcmV0dXJuIE5VTEw7CisJcmV0dXJuIEZGX0xBWU9VVF9MU0VHKGxzZWcpLT5taXJyb3JfYXJyYXlbaWR4XTsKK30KKworc3RhdGljIGlubGluZSB1MzIKK0ZGX0xBWU9VVF9NSVJST1JfQ09VTlQoc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcpCit7CisJcmV0dXJuIEZGX0xBWU9VVF9MU0VHKGxzZWcpLT5taXJyb3JfYXJyYXlfY250OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wKK2ZmX2xheW91dF90ZXN0X2RldmlkX3VuYXZhaWxhYmxlKHN0cnVjdCBuZnM0X2RldmljZWlkX25vZGUgKm5vZGUpCit7CisJcmV0dXJuIG5mczRfdGVzdF9kZXZpY2VpZF91bmF2YWlsYWJsZShub2RlKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK25mczRfZmZfbGF5b3V0X2RzX3ZlcnNpb24oc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcsIHUzMiBkc19pZHgpCit7CisJcmV0dXJuIEZGX0xBWU9VVF9DT01QKGxzZWcsIGRzX2lkeCktPm1pcnJvcl9kcy0+ZHNfdmVyc2lvbnNbMF0udmVyc2lvbjsKK30KKworc3RydWN0IG5mczRfZmZfbGF5b3V0X2RzICoKK25mczRfZmZfYWxsb2NfZGV2aWNlaWRfbm9kZShzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgcG5mc19kZXZpY2UgKnBkZXYsCisJCQkgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKK3ZvaWQgbmZzNF9mZl9sYXlvdXRfcHV0X2RldmljZWlkKHN0cnVjdCBuZnM0X2ZmX2xheW91dF9kcyAqbWlycm9yX2RzKTsKK3ZvaWQgbmZzNF9mZl9sYXlvdXRfZnJlZV9kZXZpY2VpZChzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfZHMgKm1pcnJvcl9kcyk7CitpbnQgZmZfbGF5b3V0X3RyYWNrX2RzX2Vycm9yKHN0cnVjdCBuZnM0X2ZsZXhmaWxlX2xheW91dCAqZmxvLAorCQkJICAgICBzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfbWlycm9yICptaXJyb3IsIHU2NCBvZmZzZXQsCisJCQkgICAgIHU2NCBsZW5ndGgsIGludCBzdGF0dXMsIGVudW0gbmZzX29wbnVtNCBvcG51bSwKKwkJCSAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKK2ludCBmZl9sYXlvdXRfZW5jb2RlX2RzX2lvZXJyKHN0cnVjdCBuZnM0X2ZsZXhmaWxlX2xheW91dCAqZmxvLAorCQkJICAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgaW50ICpjb3VudCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBwbmZzX2xheW91dF9yYW5nZSAqcmFuZ2UpOworc3RydWN0IG5mc19maCAqCituZnM0X2ZmX2xheW91dF9zZWxlY3RfZHNfZmgoc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcsIHUzMiBtaXJyb3JfaWR4KTsKKworc3RydWN0IG5mczRfcG5mc19kcyAqCituZnM0X2ZmX2xheW91dF9wcmVwYXJlX2RzKHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLCB1MzIgZHNfaWR4LAorCQkJICBib29sIGZhaWxfcmV0dXJuKTsKKworc3RydWN0IHJwY19jbG50ICoKK25mczRfZmZfZmluZF9vcl9jcmVhdGVfZHNfY2xpZW50KHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLAorCQkJCSB1MzIgZHNfaWR4LAorCQkJCSBzdHJ1Y3QgbmZzX2NsaWVudCAqZHNfY2xwLAorCQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3N0cnVjdCBycGNfY3JlZCAqZmZfbGF5b3V0X2dldF9kc19jcmVkKHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLAorCQkJCSAgICAgICB1MzIgZHNfaWR4LCBzdHJ1Y3QgcnBjX2NyZWQgKm1kc2NyZWQpOworYm9vbCBmZl9sYXlvdXRfaGFzX2F2YWlsYWJsZV9kcyhzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZyk7CisjZW5kaWYgLyogRlNfTkZTX05GUzRGTEVYRklMRUxBWU9VVF9IICovCmRpZmYgLS1naXQgYS9mcy9uZnMvZmxleGZpbGVsYXlvdXQvZmxleGZpbGVsYXlvdXRkZXYuYyBiL2ZzL25mcy9mbGV4ZmlsZWxheW91dC9mbGV4ZmlsZWxheW91dGRldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYzAxZjIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9uZnMvZmxleGZpbGVsYXlvdXQvZmxleGZpbGVsYXlvdXRkZXYuYwpAQCAtMCwwICsxLDU1MiBAQAorLyoKKyAqIERldmljZSBvcGVyYXRpb25zIGZvciB0aGUgcG5mcyBuZnM0IGZpbGUgbGF5b3V0IGRyaXZlci4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIFByaW1hcnkgRGF0YSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRhbyBQZW5nIDxiZXJnd29sZkBwcmltYXJ5ZGF0YS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvYWRkci5oPgorCisjaW5jbHVkZSAiLi4vaW50ZXJuYWwuaCIKKyNpbmNsdWRlICIuLi9uZnM0c2Vzc2lvbi5oIgorI2luY2x1ZGUgImZsZXhmaWxlbGF5b3V0LmgiCisKKyNkZWZpbmUgTkZTREJHX0ZBQ0lMSVRZCQlORlNEQkdfUE5GU19MRAorCitzdGF0aWMgdW5zaWduZWQgaW50IGRhdGFzZXJ2ZXJfdGltZW8gPSBORlM0X0RFRl9EU19USU1FTzsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGF0YXNlcnZlcl9yZXRyYW5zID0gTkZTNF9ERUZfRFNfUkVUUkFOUzsKKwordm9pZCBuZnM0X2ZmX2xheW91dF9wdXRfZGV2aWNlaWQoc3RydWN0IG5mczRfZmZfbGF5b3V0X2RzICptaXJyb3JfZHMpCit7CisJaWYgKG1pcnJvcl9kcykKKwkJbmZzNF9wdXRfZGV2aWNlaWRfbm9kZSgmbWlycm9yX2RzLT5pZF9ub2RlKTsKK30KKwordm9pZCBuZnM0X2ZmX2xheW91dF9mcmVlX2RldmljZWlkKHN0cnVjdCBuZnM0X2ZmX2xheW91dF9kcyAqbWlycm9yX2RzKQoreworCW5mczRfcHJpbnRfZGV2aWNlaWQoJm1pcnJvcl9kcy0+aWRfbm9kZS5kZXZpY2VpZCk7CisJbmZzNF9wbmZzX2RzX3B1dChtaXJyb3JfZHMtPmRzKTsKKwlrZnJlZShtaXJyb3JfZHMpOworfQorCisvKiBEZWNvZGUgb3BhcXVlIGRldmljZSBkYXRhIGFuZCBjb25zdHJ1Y3QgbmV3X2RzIHVzaW5nIGl0ICovCitzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfZHMgKgorbmZzNF9mZl9hbGxvY19kZXZpY2VpZF9ub2RlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBwbmZzX2RldmljZSAqcGRldiwKKwkJCSAgICBnZnBfdCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IHhkcl9zdHJlYW0gc3RyZWFtOworCXN0cnVjdCB4ZHJfYnVmIGJ1ZjsKKwlzdHJ1Y3QgcGFnZSAqc2NyYXRjaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGRzYWRkcnM7CisJc3RydWN0IG5mczRfcG5mc19kc19hZGRyICpkYTsKKwlzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfZHMgKm5ld19kcyA9IE5VTEw7CisJc3RydWN0IG5mczRfZmZfZHNfdmVyc2lvbiAqZHNfdmVyc2lvbnMgPSBOVUxMOworCXUzMiBtcF9jb3VudDsKKwl1MzIgdmVyc2lvbl9jb3VudDsKKwlfX2JlMzIgKnA7CisJaW50IGksIHJldCA9IC1FTk9NRU07CisKKwkvKiBzZXQgdXAgeGRyIHN0cmVhbSAqLworCXNjcmF0Y2ggPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7CisJaWYgKCFzY3JhdGNoKQorCQlnb3RvIG91dF9lcnI7CisKKwluZXdfZHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfZHMpLCBnZnBfZmxhZ3MpOworCWlmICghbmV3X2RzKQorCQlnb3RvIG91dF9zY3JhdGNoOworCisJbmZzNF9pbml0X2RldmljZWlkX25vZGUoJm5ld19kcy0+aWRfbm9kZSwKKwkJCQlzZXJ2ZXIsCisJCQkJJnBkZXYtPmRldl9pZCk7CisJSU5JVF9MSVNUX0hFQUQoJmRzYWRkcnMpOworCisJeGRyX2luaXRfZGVjb2RlX3BhZ2VzKCZzdHJlYW0sICZidWYsIHBkZXYtPnBhZ2VzLCBwZGV2LT5wZ2xlbik7CisJeGRyX3NldF9zY3JhdGNoX2J1ZmZlcigmc3RyZWFtLCBwYWdlX2FkZHJlc3Moc2NyYXRjaCksIFBBR0VfU0laRSk7CisKKwkvKiBtdWx0aXBhdGggY291bnQgKi8KKwlwID0geGRyX2lubGluZV9kZWNvZGUoJnN0cmVhbSwgNCk7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJZ290byBvdXRfZXJyX2RyYWluX2RzYWRkcnM7CisJbXBfY291bnQgPSBiZTMyX3RvX2NwdXAocCk7CisJZHByaW50aygiJXM6IG11bHRpcGF0aCBkcyBjb3VudCAlZFxuIiwgX19mdW5jX18sIG1wX2NvdW50KTsKKworCWZvciAoaSA9IDA7IGkgPCBtcF9jb3VudDsgaSsrKSB7CisJCS8qIG11bHRpcGF0aCBkcyAqLworCQlkYSA9IG5mczRfZGVjb2RlX21wX2RzX2FkZHIoc2VydmVyLT5uZnNfY2xpZW50LT5jbF9uZXQsCisJCQkJCSAgICAmc3RyZWFtLCBnZnBfZmxhZ3MpOworCQlpZiAoZGEpCisJCQlsaXN0X2FkZF90YWlsKCZkYS0+ZGFfbm9kZSwgJmRzYWRkcnMpOworCX0KKwlpZiAobGlzdF9lbXB0eSgmZHNhZGRycykpIHsKKwkJZHByaW50aygiJXM6IG5vIHN1aXRhYmxlIERTIGFkZHJlc3NlcyBmb3VuZFxuIiwKKwkJCV9fZnVuY19fKTsKKwkJcmV0ID0gLUVOT01FRElVTTsKKwkJZ290byBvdXRfZXJyX2RyYWluX2RzYWRkcnM7CisJfQorCisJLyogdmVyc2lvbiBjb3VudCAqLworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSgmc3RyZWFtLCA0KTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9lcnJfZHJhaW5fZHNhZGRyczsKKwl2ZXJzaW9uX2NvdW50ID0gYmUzMl90b19jcHVwKHApOworCWRwcmludGsoIiVzOiB2ZXJzaW9uIGNvdW50ICVkXG4iLCBfX2Z1bmNfXywgdmVyc2lvbl9jb3VudCk7CisKKwlkc192ZXJzaW9ucyA9IGt6YWxsb2ModmVyc2lvbl9jb3VudCAqIHNpemVvZihzdHJ1Y3QgbmZzNF9mZl9kc192ZXJzaW9uKSwKKwkJCSAgICAgIGdmcF9mbGFncyk7CisJaWYgKCFkc192ZXJzaW9ucykKKwkJZ290byBvdXRfc2NyYXRjaDsKKworCWZvciAoaSA9IDA7IGkgPCB2ZXJzaW9uX2NvdW50OyBpKyspIHsKKwkJLyogMjAgPSB2ZXJzaW9uKDQpICsgbWlub3JfdmVyc2lvbig0KSArIHJzaXplKDQpICsgd3NpemUoNCkgKworCQkgKiB0aWdodGx5X2NvdXBsZWQoNCkgKi8KKwkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKCZzdHJlYW0sIDIwKTsKKwkJaWYgKHVubGlrZWx5KCFwKSkKKwkJCWdvdG8gb3V0X2Vycl9kcmFpbl9kc2FkZHJzOworCQlkc192ZXJzaW9uc1tpXS52ZXJzaW9uID0gYmUzMl90b19jcHVwKHArKyk7CisJCWRzX3ZlcnNpb25zW2ldLm1pbm9yX3ZlcnNpb24gPSBiZTMyX3RvX2NwdXAocCsrKTsKKwkJZHNfdmVyc2lvbnNbaV0ucnNpemUgPSBuZnNfYmxvY2tfc2l6ZShiZTMyX3RvX2NwdXAocCsrKSwgTlVMTCk7CisJCWRzX3ZlcnNpb25zW2ldLndzaXplID0gbmZzX2Jsb2NrX3NpemUoYmUzMl90b19jcHVwKHArKyksIE5VTEwpOworCQlkc192ZXJzaW9uc1tpXS50aWdodGx5X2NvdXBsZWQgPSBiZTMyX3RvX2NwdXAocCk7CisKKwkJaWYgKGRzX3ZlcnNpb25zW2ldLnJzaXplID4gTkZTX01BWF9GSUxFX0lPX1NJWkUpCisJCQlkc192ZXJzaW9uc1tpXS5yc2l6ZSA9IE5GU19NQVhfRklMRV9JT19TSVpFOworCQlpZiAoZHNfdmVyc2lvbnNbaV0ud3NpemUgPiBORlNfTUFYX0ZJTEVfSU9fU0laRSkKKwkJCWRzX3ZlcnNpb25zW2ldLndzaXplID0gTkZTX01BWF9GSUxFX0lPX1NJWkU7CisKKwkJaWYgKGRzX3ZlcnNpb25zW2ldLnZlcnNpb24gIT0gMyB8fCBkc192ZXJzaW9uc1tpXS5taW5vcl92ZXJzaW9uICE9IDApIHsKKwkJCWRwcmludGsoIiVzOiBbJWRdIHVuc3VwcG9ydGVkIGRzIHZlcnNpb24gJWQtJWRcbiIsIF9fZnVuY19fLAorCQkJCWksIGRzX3ZlcnNpb25zW2ldLnZlcnNpb24sCisJCQkJZHNfdmVyc2lvbnNbaV0ubWlub3JfdmVyc2lvbik7CisJCQlyZXQgPSAtRVBST1RPTk9TVVBQT1JUOworCQkJZ290byBvdXRfZXJyX2RyYWluX2RzYWRkcnM7CisJCX0KKworCQlkcHJpbnRrKCIlczogWyVkXSB2ZXJzICV1IG1pbm9yX3ZlciAldSByc2l6ZSAldSB3c2l6ZSAldSBjb3VwbGVkICVkXG4iLAorCQkJX19mdW5jX18sIGksIGRzX3ZlcnNpb25zW2ldLnZlcnNpb24sCisJCQlkc192ZXJzaW9uc1tpXS5taW5vcl92ZXJzaW9uLAorCQkJZHNfdmVyc2lvbnNbaV0ucnNpemUsCisJCQlkc192ZXJzaW9uc1tpXS53c2l6ZSwKKwkJCWRzX3ZlcnNpb25zW2ldLnRpZ2h0bHlfY291cGxlZCk7CisJfQorCisJbmV3X2RzLT5kc192ZXJzaW9ucyA9IGRzX3ZlcnNpb25zOworCW5ld19kcy0+ZHNfdmVyc2lvbnNfY250ID0gdmVyc2lvbl9jb3VudDsKKworCW5ld19kcy0+ZHMgPSBuZnM0X3BuZnNfZHNfYWRkKCZkc2FkZHJzLCBnZnBfZmxhZ3MpOworCWlmICghbmV3X2RzLT5kcykKKwkJZ290byBvdXRfZXJyX2RyYWluX2RzYWRkcnM7CisKKwkvKiBJZiBEUyB3YXMgYWxyZWFkeSBpbiBjYWNoZSwgZnJlZSBkcyBhZGRycyAqLworCXdoaWxlICghbGlzdF9lbXB0eSgmZHNhZGRycykpIHsKKwkJZGEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZkc2FkZHJzLAorCQkJCSAgICAgIHN0cnVjdCBuZnM0X3BuZnNfZHNfYWRkciwKKwkJCQkgICAgICBkYV9ub2RlKTsKKwkJbGlzdF9kZWxfaW5pdCgmZGEtPmRhX25vZGUpOworCQlrZnJlZShkYS0+ZGFfcmVtb3Rlc3RyKTsKKwkJa2ZyZWUoZGEpOworCX0KKworCV9fZnJlZV9wYWdlKHNjcmF0Y2gpOworCXJldHVybiBuZXdfZHM7CisKK291dF9lcnJfZHJhaW5fZHNhZGRyczoKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRzYWRkcnMpKSB7CisJCWRhID0gbGlzdF9maXJzdF9lbnRyeSgmZHNhZGRycywgc3RydWN0IG5mczRfcG5mc19kc19hZGRyLAorCQkJCSAgICAgIGRhX25vZGUpOworCQlsaXN0X2RlbF9pbml0KCZkYS0+ZGFfbm9kZSk7CisJCWtmcmVlKGRhLT5kYV9yZW1vdGVzdHIpOworCQlrZnJlZShkYSk7CisJfQorCisJa2ZyZWUoZHNfdmVyc2lvbnMpOworb3V0X3NjcmF0Y2g6CisJX19mcmVlX3BhZ2Uoc2NyYXRjaCk7CitvdXRfZXJyOgorCWtmcmVlKG5ld19kcyk7CisKKwlkcHJpbnRrKCIlcyBFUlJPUjogcmV0dXJuaW5nICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHU2NAorZW5kX29mZnNldCh1NjQgc3RhcnQsIHU2NCBsZW4pCit7CisJdTY0IGVuZDsKKworCWVuZCA9IHN0YXJ0ICsgbGVuOworCXJldHVybiBlbmQgPj0gc3RhcnQgPyBlbmQgOiBORlM0X01BWF9VSU5UNjQ7Cit9CisKK3N0YXRpYyB2b2lkIGV4dGVuZF9kc19lcnJvcihzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfZHNfZXJyICplcnIsCisJCQkgICAgdTY0IG9mZnNldCwgdTY0IGxlbmd0aCkKK3sKKwl1NjQgZW5kOworCisJZW5kID0gbWF4X3QodTY0LCBlbmRfb2Zmc2V0KGVyci0+b2Zmc2V0LCBlcnItPmxlbmd0aCksCisJCSAgICBlbmRfb2Zmc2V0KG9mZnNldCwgbGVuZ3RoKSk7CisJZXJyLT5vZmZzZXQgPSBtaW5fdCh1NjQsIGVyci0+b2Zmc2V0LCBvZmZzZXQpOworCWVyci0+bGVuZ3RoID0gZW5kIC0gZXJyLT5vZmZzZXQ7Cit9CisKK3N0YXRpYyBib29sIGRzX2Vycm9yX2Nhbl9tZXJnZShzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfZHNfZXJyICplcnIsICB1NjQgb2Zmc2V0LAorCQkJICAgICAgIHU2NCBsZW5ndGgsIGludCBzdGF0dXMsIGVudW0gbmZzX29wbnVtNCBvcG51bSwKKwkJCSAgICAgICBuZnM0X3N0YXRlaWQgKnN0YXRlaWQsCisJCQkgICAgICAgc3RydWN0IG5mczRfZGV2aWNlaWQgKmRldmljZWlkKQoreworCXJldHVybiBlcnItPnN0YXR1cyA9PSBzdGF0dXMgJiYgZXJyLT5vcG51bSA9PSBvcG51bSAmJgorCSAgICAgICBuZnM0X3N0YXRlaWRfbWF0Y2goJmVyci0+c3RhdGVpZCwgc3RhdGVpZCkgJiYKKwkgICAgICAgIW1lbWNtcCgmZXJyLT5kZXZpY2VpZCwgZGV2aWNlaWQsIHNpemVvZigqZGV2aWNlaWQpKSAmJgorCSAgICAgICBlbmRfb2Zmc2V0KGVyci0+b2Zmc2V0LCBlcnItPmxlbmd0aCkgPj0gb2Zmc2V0ICYmCisJICAgICAgIGVyci0+b2Zmc2V0IDw9IGVuZF9vZmZzZXQob2Zmc2V0LCBsZW5ndGgpOworfQorCitzdGF0aWMgYm9vbCBtZXJnZV9kc19lcnJvcihzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfZHNfZXJyICpvbGQsCisJCQkgICBzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfZHNfZXJyICpuZXcpCit7CisJaWYgKCFkc19lcnJvcl9jYW5fbWVyZ2Uob2xkLCBuZXctPm9mZnNldCwgbmV3LT5sZW5ndGgsIG5ldy0+c3RhdHVzLAorCQkJCW5ldy0+b3BudW0sICZuZXctPnN0YXRlaWQsICZuZXctPmRldmljZWlkKSkKKwkJcmV0dXJuIGZhbHNlOworCisJZXh0ZW5kX2RzX2Vycm9yKG9sZCwgbmV3LT5vZmZzZXQsIG5ldy0+bGVuZ3RoKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK2ZmX2xheW91dF9hZGRfZHNfZXJyb3JfbG9ja2VkKHN0cnVjdCBuZnM0X2ZsZXhmaWxlX2xheW91dCAqZmxvLAorCQkJICAgICAgc3RydWN0IG5mczRfZmZfbGF5b3V0X2RzX2VyciAqZHNlcnIpCit7CisJc3RydWN0IG5mczRfZmZfbGF5b3V0X2RzX2VyciAqZXJyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlcnIsICZmbG8tPmVycm9yX2xpc3QsIGxpc3QpIHsKKwkJaWYgKG1lcmdlX2RzX2Vycm9yKGVyciwgZHNlcnIpKSB7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCWxpc3RfYWRkKCZkc2Vyci0+bGlzdCwgJmZsby0+ZXJyb3JfbGlzdCk7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbAorZmZfbGF5b3V0X3VwZGF0ZV9kc19lcnJvcihzdHJ1Y3QgbmZzNF9mbGV4ZmlsZV9sYXlvdXQgKmZsbywgdTY0IG9mZnNldCwKKwkJCSAgdTY0IGxlbmd0aCwgaW50IHN0YXR1cywgZW51bSBuZnNfb3BudW00IG9wbnVtLAorCQkJICBuZnM0X3N0YXRlaWQgKnN0YXRlaWQsIHN0cnVjdCBuZnM0X2RldmljZWlkICpkZXZpY2VpZCkKK3sKKwlib29sIGZvdW5kID0gZmFsc2U7CisJc3RydWN0IG5mczRfZmZfbGF5b3V0X2RzX2VyciAqZXJyOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlcnIsICZmbG8tPmVycm9yX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGRzX2Vycm9yX2Nhbl9tZXJnZShlcnIsIG9mZnNldCwgbGVuZ3RoLCBzdGF0dXMsIG9wbnVtLAorCQkJCSAgICAgICBzdGF0ZWlkLCBkZXZpY2VpZCkpIHsKKwkJCWZvdW5kID0gdHJ1ZTsKKwkJCWV4dGVuZF9kc19lcnJvcihlcnIsIG9mZnNldCwgbGVuZ3RoKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCitpbnQgZmZfbGF5b3V0X3RyYWNrX2RzX2Vycm9yKHN0cnVjdCBuZnM0X2ZsZXhmaWxlX2xheW91dCAqZmxvLAorCQkJICAgICBzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfbWlycm9yICptaXJyb3IsIHU2NCBvZmZzZXQsCisJCQkgICAgIHU2NCBsZW5ndGgsIGludCBzdGF0dXMsIGVudW0gbmZzX29wbnVtNCBvcG51bSwKKwkJCSAgICAgZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBuZnM0X2ZmX2xheW91dF9kc19lcnIgKmRzZXJyOworCWJvb2wgbmVlZGZyZWU7CisKKwlpZiAoc3RhdHVzID09IDApCisJCXJldHVybiAwOworCisJaWYgKG1pcnJvci0+bWlycm9yX2RzID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJc3Bpbl9sb2NrKCZmbG8tPmdlbmVyaWNfaGRyLnBsaF9pbm9kZS0+aV9sb2NrKTsKKwlpZiAoZmZfbGF5b3V0X3VwZGF0ZV9kc19lcnJvcihmbG8sIG9mZnNldCwgbGVuZ3RoLCBzdGF0dXMsIG9wbnVtLAorCQkJCSAgICAgICZtaXJyb3ItPnN0YXRlaWQsCisJCQkJICAgICAgJm1pcnJvci0+bWlycm9yX2RzLT5pZF9ub2RlLmRldmljZWlkKSkgeworCQlzcGluX3VubG9jaygmZmxvLT5nZW5lcmljX2hkci5wbGhfaW5vZGUtPmlfbG9jayk7CisJCXJldHVybiAwOworCX0KKwlzcGluX3VubG9jaygmZmxvLT5nZW5lcmljX2hkci5wbGhfaW5vZGUtPmlfbG9jayk7CisJZHNlcnIgPSBrbWFsbG9jKHNpemVvZigqZHNlcnIpLCBnZnBfZmxhZ3MpOworCWlmICghZHNlcnIpCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9MSVNUX0hFQUQoJmRzZXJyLT5saXN0KTsKKwlkc2Vyci0+b2Zmc2V0ID0gb2Zmc2V0OworCWRzZXJyLT5sZW5ndGggPSBsZW5ndGg7CisJZHNlcnItPnN0YXR1cyA9IHN0YXR1czsKKwlkc2Vyci0+b3BudW0gPSBvcG51bTsKKwluZnM0X3N0YXRlaWRfY29weSgmZHNlcnItPnN0YXRlaWQsICZtaXJyb3ItPnN0YXRlaWQpOworCW1lbWNweSgmZHNlcnItPmRldmljZWlkLCAmbWlycm9yLT5taXJyb3JfZHMtPmlkX25vZGUuZGV2aWNlaWQsCisJICAgICAgIE5GUzRfREVWSUNFSUQ0X1NJWkUpOworCisJc3Bpbl9sb2NrKCZmbG8tPmdlbmVyaWNfaGRyLnBsaF9pbm9kZS0+aV9sb2NrKTsKKwluZWVkZnJlZSA9IGZmX2xheW91dF9hZGRfZHNfZXJyb3JfbG9ja2VkKGZsbywgZHNlcnIpOworCXNwaW5fdW5sb2NrKCZmbG8tPmdlbmVyaWNfaGRyLnBsaF9pbm9kZS0+aV9sb2NrKTsKKwlpZiAobmVlZGZyZWUpCisJCWtmcmVlKGRzZXJyKTsKKworCXJldHVybiAwOworfQorCisvKiBjdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IEFVVEhfTk9ORSBhbmQgQVVUSF9TWVMgKi8KK3N0YXRpYyBycGNfYXV0aGZsYXZvcl90CituZnM0X2ZmX2xheW91dF9jaG9vc2VfYXV0aGZsYXZvcihzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfbWlycm9yICptaXJyb3IpCit7CisJaWYgKG1pcnJvci0+dWlkID09ICh1MzIpLTEpCisJCXJldHVybiBSUENfQVVUSF9OVUxMOworCXJldHVybiBSUENfQVVUSF9VTklYOworfQorCisvKiBmZXRjaCBjcmVkIGZvciBORlN2MyBEUyAqLworc3RhdGljIGludCBmZl9sYXlvdXRfdXBkYXRlX21pcnJvcl9jcmVkKHN0cnVjdCBuZnM0X2ZmX2xheW91dF9taXJyb3IgKm1pcnJvciwKKwkJCQkgICAgICBzdHJ1Y3QgbmZzNF9wbmZzX2RzICpkcykKK3sKKwlpZiAoZHMtPmRzX2NscCAmJiAhbWlycm9yLT5jcmVkICYmCisJICAgIG1pcnJvci0+bWlycm9yX2RzLT5kc192ZXJzaW9uc1swXS52ZXJzaW9uID09IDMpIHsKKwkJc3RydWN0IHJwY19hdXRoICphdXRoID0gZHMtPmRzX2NscC0+Y2xfcnBjY2xpZW50LT5jbF9hdXRoOworCQlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQ7CisJCXN0cnVjdCBhdXRoX2NyZWQgYWNyZWQgPSB7CisJCQkudWlkID0gbWFrZV9rdWlkKCZpbml0X3VzZXJfbnMsIG1pcnJvci0+dWlkKSwKKwkJCS5naWQgPSBtYWtlX2tnaWQoJmluaXRfdXNlcl9ucywgbWlycm9yLT5naWQpLAorCQl9OworCisJCS8qIEFVVEhfTlVMTCBpZ25vcmVzIGFjcmVkICovCisJCWNyZWQgPSBhdXRoLT5hdV9vcHMtPmxvb2t1cF9jcmVkKGF1dGgsICZhY3JlZCwgMCk7CisJCWlmIChJU19FUlIoY3JlZCkpIHsKKwkJCWRwcmludGsoIiVzOiBsb29rdXBfY3JlZCBmYWlsZWQgd2l0aCAlbGRcbiIsCisJCQkJX19mdW5jX18sIFBUUl9FUlIoY3JlZCkpOworCQkJcmV0dXJuIFBUUl9FUlIoY3JlZCk7CisJCX0gZWxzZSB7CisJCQltaXJyb3ItPmNyZWQgPSBjcmVkOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdHJ1Y3QgbmZzX2ZoICoKK25mczRfZmZfbGF5b3V0X3NlbGVjdF9kc19maChzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywgdTMyIG1pcnJvcl9pZHgpCit7CisJc3RydWN0IG5mczRfZmZfbGF5b3V0X21pcnJvciAqbWlycm9yID0gRkZfTEFZT1VUX0NPTVAobHNlZywgbWlycm9yX2lkeCk7CisJc3RydWN0IG5mc19maCAqZmggPSBOVUxMOworCXN0cnVjdCBuZnM0X2RldmljZWlkX25vZGUgKmRldmlkOworCisJaWYgKG1pcnJvciA9PSBOVUxMIHx8IG1pcnJvci0+bWlycm9yX2RzID09IE5VTEwgfHwKKwkgICAgbWlycm9yLT5taXJyb3JfZHMtPmRzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJORlM6ICVzOiBObyBkYXRhIHNlcnZlciBmb3IgbWlycm9yIG9mZnNldCBpbmRleCAlZFxuIiwKKwkJCV9fZnVuY19fLCBtaXJyb3JfaWR4KTsKKwkJaWYgKG1pcnJvciAmJiBtaXJyb3ItPm1pcnJvcl9kcykgeworCQkJZGV2aWQgPSAmbWlycm9yLT5taXJyb3JfZHMtPmlkX25vZGU7CisJCQlwbmZzX2dlbmVyaWNfbWFya19kZXZpZF9pbnZhbGlkKGRldmlkKTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwkvKiBGSVhNRTogRm9yIG5vdyBhc3N1bWUgdGhlcmUgaXMgb25seSAxIHZlcnNpb24gYXZhaWxhYmxlIGZvciB0aGUgRFMgKi8KKwlmaCA9ICZtaXJyb3ItPmZoX3ZlcnNpb25zWzBdOworb3V0OgorCXJldHVybiBmaDsKK30KKworLyogVXBvbiByZXR1cm4sIGVpdGhlciBkcyBpcyBjb25uZWN0ZWQsIG9yIGRzIGlzIE5VTEwgKi8KK3N0cnVjdCBuZnM0X3BuZnNfZHMgKgorbmZzNF9mZl9sYXlvdXRfcHJlcGFyZV9kcyhzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywgdTMyIGRzX2lkeCwKKwkJCSAgYm9vbCBmYWlsX3JldHVybikKK3sKKwlzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfbWlycm9yICptaXJyb3IgPSBGRl9MQVlPVVRfQ09NUChsc2VnLCBkc19pZHgpOworCXN0cnVjdCBuZnM0X3BuZnNfZHMgKmRzID0gTlVMTDsKKwlzdHJ1Y3QgbmZzNF9kZXZpY2VpZF9ub2RlICpkZXZpZDsKKwlzdHJ1Y3QgaW5vZGUgKmlubyA9IGxzZWctPnBsc19sYXlvdXQtPnBsaF9pbm9kZTsKKwlzdHJ1Y3QgbmZzX3NlcnZlciAqcyA9IE5GU19TRVJWRVIoaW5vKTsKKwl1bnNpZ25lZCBpbnQgbWF4X3BheWxvYWQ7CisJcnBjX2F1dGhmbGF2b3JfdCBmbGF2b3I7CisKKwlpZiAobWlycm9yID09IE5VTEwgfHwgbWlycm9yLT5taXJyb3JfZHMgPT0gTlVMTCB8fAorCSAgICBtaXJyb3ItPm1pcnJvcl9kcy0+ZHMgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIk5GUzogJXM6IE5vIGRhdGEgc2VydmVyIGZvciBvZmZzZXQgaW5kZXggJWRcbiIsCisJCQlfX2Z1bmNfXywgZHNfaWR4KTsKKwkJaWYgKG1pcnJvciAmJiBtaXJyb3ItPm1pcnJvcl9kcykgeworCQkJZGV2aWQgPSAmbWlycm9yLT5taXJyb3JfZHMtPmlkX25vZGU7CisJCQlwbmZzX2dlbmVyaWNfbWFya19kZXZpZF9pbnZhbGlkKGRldmlkKTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwlkZXZpZCA9ICZtaXJyb3ItPm1pcnJvcl9kcy0+aWRfbm9kZTsKKwlpZiAoZmZfbGF5b3V0X3Rlc3RfZGV2aWRfdW5hdmFpbGFibGUoZGV2aWQpKQorCQlnb3RvIG91dDsKKworCWRzID0gbWlycm9yLT5taXJyb3JfZHMtPmRzOworCS8qIG1hdGNoaW5nIHNtcF93bWIoKSBpbiBfbmZzNF9wbmZzX3YzLzRfZHNfY29ubmVjdCAqLworCXNtcF9ybWIoKTsKKwlpZiAoZHMtPmRzX2NscCkKKwkJZ290byBvdXQ7CisKKwlmbGF2b3IgPSBuZnM0X2ZmX2xheW91dF9jaG9vc2VfYXV0aGZsYXZvcihtaXJyb3IpOworCisJLyogRklYTUU6IEZvciBub3cgd2UgYXNzdW1lIHRoZSBzZXJ2ZXIgc2VudCBvbmx5IG9uZSB2ZXJzaW9uIG9mIE5GUworCSAqIHRvIHVzZSBmb3IgdGhlIERTLgorCSAqLworCW5mczRfcG5mc19kc19jb25uZWN0KHMsIGRzLCBkZXZpZCwgZGF0YXNlcnZlcl90aW1lbywKKwkJCSAgICAgZGF0YXNlcnZlcl9yZXRyYW5zLAorCQkJICAgICBtaXJyb3ItPm1pcnJvcl9kcy0+ZHNfdmVyc2lvbnNbMF0udmVyc2lvbiwKKwkJCSAgICAgbWlycm9yLT5taXJyb3JfZHMtPmRzX3ZlcnNpb25zWzBdLm1pbm9yX3ZlcnNpb24sCisJCQkgICAgIGZsYXZvcik7CisKKwkvKiBjb25uZWN0IHN1Y2Nlc3MsIGNoZWNrIHJzaXplL3dzaXplIGxpbWl0ICovCisJaWYgKGRzLT5kc19jbHApIHsKKwkJbWF4X3BheWxvYWQgPQorCQkJbmZzX2Jsb2NrX3NpemUocnBjX21heF9wYXlsb2FkKGRzLT5kc19jbHAtPmNsX3JwY2NsaWVudCksCisJCQkJICAgICAgIE5VTEwpOworCQlpZiAobWlycm9yLT5taXJyb3JfZHMtPmRzX3ZlcnNpb25zWzBdLnJzaXplID4gbWF4X3BheWxvYWQpCisJCQltaXJyb3ItPm1pcnJvcl9kcy0+ZHNfdmVyc2lvbnNbMF0ucnNpemUgPSBtYXhfcGF5bG9hZDsKKwkJaWYgKG1pcnJvci0+bWlycm9yX2RzLT5kc192ZXJzaW9uc1swXS53c2l6ZSA+IG1heF9wYXlsb2FkKQorCQkJbWlycm9yLT5taXJyb3JfZHMtPmRzX3ZlcnNpb25zWzBdLndzaXplID0gbWF4X3BheWxvYWQ7CisJfSBlbHNlIHsKKwkJZmZfbGF5b3V0X3RyYWNrX2RzX2Vycm9yKEZGX0xBWU9VVF9GUk9NX0hEUihsc2VnLT5wbHNfbGF5b3V0KSwKKwkJCQkJIG1pcnJvciwgbHNlZy0+cGxzX3JhbmdlLm9mZnNldCwKKwkJCQkJIGxzZWctPnBsc19yYW5nZS5sZW5ndGgsIE5GUzRFUlJfTlhJTywKKwkJCQkJIE9QX0lMTEVHQUwsIEdGUF9OT0lPKTsKKwkJaWYgKGZhaWxfcmV0dXJuKSB7CisJCQlwbmZzX2Vycm9yX21hcmtfbGF5b3V0X2Zvcl9yZXR1cm4oaW5vLCBsc2VnKTsKKwkJCWlmIChmZl9sYXlvdXRfaGFzX2F2YWlsYWJsZV9kcyhsc2VnKSkKKwkJCQlwbmZzX3NldF9yZXRyeV9sYXlvdXRnZXQobHNlZy0+cGxzX2xheW91dCk7CisJCQllbHNlCisJCQkJcG5mc19jbGVhcl9yZXRyeV9sYXlvdXRnZXQobHNlZy0+cGxzX2xheW91dCk7CisKKwkJfSBlbHNlIHsKKwkJCWlmIChmZl9sYXlvdXRfaGFzX2F2YWlsYWJsZV9kcyhsc2VnKSkKKwkJCQlzZXRfYml0KE5GU19MQVlPVVRfUkVUVVJOX0JFRk9SRV9DTE9TRSwKKwkJCQkJJmxzZWctPnBsc19sYXlvdXQtPnBsaF9mbGFncyk7CisJCQllbHNlIHsKKwkJCQlwbmZzX2Vycm9yX21hcmtfbGF5b3V0X2Zvcl9yZXR1cm4oaW5vLCBsc2VnKTsKKwkJCQlwbmZzX2NsZWFyX3JldHJ5X2xheW91dGdldChsc2VnLT5wbHNfbGF5b3V0KTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmZl9sYXlvdXRfdXBkYXRlX21pcnJvcl9jcmVkKG1pcnJvciwgZHMpKQorCQlkcyA9IE5VTEw7CitvdXQ6CisJcmV0dXJuIGRzOworfQorCitzdHJ1Y3QgcnBjX2NyZWQgKgorZmZfbGF5b3V0X2dldF9kc19jcmVkKHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLCB1MzIgZHNfaWR4LAorCQkgICAgICBzdHJ1Y3QgcnBjX2NyZWQgKm1kc2NyZWQpCit7CisJc3RydWN0IG5mczRfZmZfbGF5b3V0X21pcnJvciAqbWlycm9yID0gRkZfTEFZT1VUX0NPTVAobHNlZywgZHNfaWR4KTsKKwlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQgPSBFUlJfUFRSKC1FSU5WQUwpOworCisJaWYgKCFuZnM0X2ZmX2xheW91dF9wcmVwYXJlX2RzKGxzZWcsIGRzX2lkeCwgdHJ1ZSkpCisJCWdvdG8gb3V0OworCisJaWYgKG1pcnJvciAmJiBtaXJyb3ItPmNyZWQpCisJCWNyZWQgPSBtaXJyb3ItPmNyZWQ7CisJZWxzZQorCQljcmVkID0gbWRzY3JlZDsKK291dDoKKwlyZXR1cm4gY3JlZDsKK30KKworLyoqCisqIEZpbmQgb3IgY3JlYXRlIGEgRFMgcnBjIGNsaWVudCB3aXRoIHRoIE1EUyBzZXJ2ZXIgcnBjIGNsaWVudCBhdXRoIGZsYXZvcgorKiBpbiB0aGUgbmZzX2NsaWVudCBjbF9kc19jbGllbnRzIGxpc3QuCisqLworc3RydWN0IHJwY19jbG50ICoKK25mczRfZmZfZmluZF9vcl9jcmVhdGVfZHNfY2xpZW50KHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLCB1MzIgZHNfaWR4LAorCQkJCSBzdHJ1Y3QgbmZzX2NsaWVudCAqZHNfY2xwLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBuZnM0X2ZmX2xheW91dF9taXJyb3IgKm1pcnJvciA9IEZGX0xBWU9VVF9DT01QKGxzZWcsIGRzX2lkeCk7CisKKwlzd2l0Y2ggKG1pcnJvci0+bWlycm9yX2RzLT5kc192ZXJzaW9uc1swXS52ZXJzaW9uKSB7CisJY2FzZSAzOgorCQkvKiBGb3IgTkZTdjMgRFMsIGZsYXZvciBpcyBzZXQgd2hlbiBjcmVhdGluZyBEUyBjb25uZWN0aW9ucyAqLworCQlyZXR1cm4gZHNfY2xwLT5jbF9ycGNjbGllbnQ7CisJY2FzZSA0OgorCQlyZXR1cm4gbmZzNF9maW5kX29yX2NyZWF0ZV9kc19jbGllbnQoZHNfY2xwLCBpbm9kZSk7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCitzdGF0aWMgYm9vbCBpc19yYW5nZV9pbnRlcnNlY3RpbmcodTY0IG9mZnNldDEsIHU2NCBsZW5ndGgxLAorCQkJCSAgdTY0IG9mZnNldDIsIHU2NCBsZW5ndGgyKQoreworCXU2NCBlbmQxID0gZW5kX29mZnNldChvZmZzZXQxLCBsZW5ndGgxKTsKKwl1NjQgZW5kMiA9IGVuZF9vZmZzZXQob2Zmc2V0MiwgbGVuZ3RoMik7CisKKwlyZXR1cm4gKGVuZDEgPT0gTkZTNF9NQVhfVUlOVDY0IHx8IGVuZDEgPiBvZmZzZXQyKSAmJgorCSAgICAgICAoZW5kMiA9PSBORlM0X01BWF9VSU5UNjQgfHwgZW5kMiA+IG9mZnNldDEpOworfQorCisvKiBjYWxsZWQgd2l0aCBpbm9kZSBpX2xvY2sgaGVsZCAqLworaW50IGZmX2xheW91dF9lbmNvZGVfZHNfaW9lcnIoc3RydWN0IG5mczRfZmxleGZpbGVfbGF5b3V0ICpmbG8sCisJCQkgICAgICBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBpbnQgKmNvdW50LAorCQkJICAgICAgY29uc3Qgc3RydWN0IHBuZnNfbGF5b3V0X3JhbmdlICpyYW5nZSkKK3sKKwlzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfZHNfZXJyICplcnIsICpuOworCV9fYmUzMiAqcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlcnIsIG4sICZmbG8tPmVycm9yX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCFpc19yYW5nZV9pbnRlcnNlY3RpbmcoZXJyLT5vZmZzZXQsIGVyci0+bGVuZ3RoLAorCQkJCQkgICByYW5nZS0+b2Zmc2V0LCByYW5nZS0+bGVuZ3RoKSkKKwkJCWNvbnRpbnVlOworCQkvKiBvZmZzZXQoOCkgKyBsZW5ndGgoOCkgKyBzdGF0ZWlkKE5GUzRfU1RBVEVJRF9TSVpFKQorCQkgKiArIGRldmljZWlkKE5GUzRfREVWSUNFSUQ0X1NJWkUpICsgc3RhdHVzKDQpICsgb3BudW0oNCkKKwkJICovCisJCXAgPSB4ZHJfcmVzZXJ2ZV9zcGFjZSh4ZHIsCisJCQkJMjQgKyBORlM0X1NUQVRFSURfU0laRSArIE5GUzRfREVWSUNFSUQ0X1NJWkUpOworCQlpZiAodW5saWtlbHkoIXApKQorCQkJcmV0dXJuIC1FTk9CVUZTOworCQlwID0geGRyX2VuY29kZV9oeXBlcihwLCBlcnItPm9mZnNldCk7CisJCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIGVyci0+bGVuZ3RoKTsKKwkJcCA9IHhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsICZlcnItPnN0YXRlaWQsCisJCQkJCSAgICBORlM0X1NUQVRFSURfU0laRSk7CisJCXAgPSB4ZHJfZW5jb2RlX29wYXF1ZV9maXhlZChwLCAmZXJyLT5kZXZpY2VpZCwKKwkJCQkJICAgIE5GUzRfREVWSUNFSUQ0X1NJWkUpOworCQkqcCsrID0gY3B1X3RvX2JlMzIoZXJyLT5zdGF0dXMpOworCQkqcCsrID0gY3B1X3RvX2JlMzIoZXJyLT5vcG51bSk7CisJCSpjb3VudCArPSAxOworCQlsaXN0X2RlbCgmZXJyLT5saXN0KTsKKwkJZHByaW50aygiJXM6IG9mZnNldCAlbGx1IGxlbmd0aCAlbGx1IHN0YXR1cyAlZCBvcCAlZCBjb3VudCAlZFxuIiwKKwkJCV9fZnVuY19fLCBlcnItPm9mZnNldCwgZXJyLT5sZW5ndGgsIGVyci0+c3RhdHVzLAorCQkJZXJyLT5vcG51bSwgKmNvdW50KTsKKwkJa2ZyZWUoZXJyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworYm9vbCBmZl9sYXlvdXRfaGFzX2F2YWlsYWJsZV9kcyhzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZykKK3sKKwlzdHJ1Y3QgbmZzNF9mZl9sYXlvdXRfbWlycm9yICptaXJyb3I7CisJc3RydWN0IG5mczRfZGV2aWNlaWRfbm9kZSAqZGV2aWQ7CisJaW50IGlkeDsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgRkZfTEFZT1VUX01JUlJPUl9DT1VOVChsc2VnKTsgaWR4KyspIHsKKwkJbWlycm9yID0gRkZfTEFZT1VUX0NPTVAobHNlZywgaWR4KTsKKwkJaWYgKG1pcnJvciAmJiBtaXJyb3ItPm1pcnJvcl9kcykgeworCQkJZGV2aWQgPSAmbWlycm9yLT5taXJyb3JfZHMtPmlkX25vZGU7CisJCQlpZiAoIWZmX2xheW91dF90ZXN0X2RldmlkX3VuYXZhaWxhYmxlKGRldmlkKSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVybiBmYWxzZTsKK30KKworbW9kdWxlX3BhcmFtKGRhdGFzZXJ2ZXJfcmV0cmFucywgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRhdGFzZXJ2ZXJfcmV0cmFucywgIlRoZSAgbnVtYmVyIG9mIHRpbWVzIHRoZSBORlN2NC4xIGNsaWVudCAiCisJCQkicmV0cmllcyBhIHJlcXVlc3QgYmVmb3JlIGl0IGF0dGVtcHRzIGZ1cnRoZXIgIgorCQkJIiByZWNvdmVyeSAgYWN0aW9uLiIpOworbW9kdWxlX3BhcmFtKGRhdGFzZXJ2ZXJfdGltZW8sIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkYXRhc2VydmVyX3RpbWVvLCAiVGhlIHRpbWUgKGluIHRlbnRocyBvZiBhIHNlY29uZCkgdGhlICIKKwkJCSJORlN2NC4xICBjbGllbnQgIHdhaXRzIGZvciBhIHJlc3BvbnNlIGZyb20gYSAiCisJCQkiIGRhdGEgc2VydmVyIGJlZm9yZSBpdCByZXRyaWVzIGFuIE5GUyByZXF1ZXN0LiIpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2lkbWFwLmMgYi9mcy9uZnMvaWRtYXAuYwppbmRleCAyZjVkYjg0Li44NTdlMmE5IDEwMDY0NAotLS0gYS9mcy9uZnMvaWRtYXAuYworKysgYi9mcy9uZnMvaWRtYXAuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJCW5mc19mYXR0cl9mcmVlX2dyb3VwX25hbWUoZmF0dHIpOwogfQogCi1zdGF0aWMgaW50IG5mc19tYXBfc3RyaW5nX3RvX251bWVyaWMoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sIF9fdTMyICpyZXMpCitpbnQgbmZzX21hcF9zdHJpbmdfdG9fbnVtZXJpYyhjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZWxlbiwgX191MzIgKnJlcykKIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAljaGFyIGJ1ZlsxNl07CkBAIC0xNjYsNiArMTY2LDcgQEAKIAkqcmVzID0gdmFsOwogCXJldHVybiAxOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmZzX21hcF9zdHJpbmdfdG9fbnVtZXJpYyk7CiAKIHN0YXRpYyBpbnQgbmZzX21hcF9udW1lcmljX3RvX3N0cmluZyhfX3UzMiBpZCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQogewpkaWZmIC0tZ2l0IGEvZnMvbmZzL2lub2RlLmMgYi9mcy9uZnMvaW5vZGUuYwppbmRleCA0YmZmZTYzLi5kMjM5OGMxIDEwMDY0NAotLS0gYS9mcy9uZnMvaW5vZGUuYworKysgYi9mcy9uZnMvaW5vZGUuYwpAQCAtMzUyLDggKzM1Miw5IEBACiAKIAluZnNfYXR0cl9jaGVja19tb3VudHBvaW50KHNiLCBmYXR0cik7CiAKLQlpZiAoKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9GSUxFSUQpID09IDApICYmCi0JICAgICFuZnNfYXR0cl91c2VfbW91bnRlZF9vbl9maWxlaWQoZmF0dHIpKQorCWlmIChuZnNfYXR0cl91c2VfbW91bnRlZF9vbl9maWxlaWQoZmF0dHIpKQorCQlmYXR0ci0+ZmlsZWlkID0gZmF0dHItPm1vdW50ZWRfb25fZmlsZWlkOworCWVsc2UgaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9GSUxFSUQpID09IDApCiAJCWdvdG8gb3V0X25vX2lub2RlOwogCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVFlQRSkgPT0gMCkKIAkJZ290byBvdXRfbm9faW5vZGU7CkBAIC01MDYsMTAgKzUwNywxNSBAQAogCQlhdHRyLT5pYV92YWxpZCAmPSB+QVRUUl9NT0RFOwogCiAJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSB7CisJCWxvZmZfdCBpX3NpemU7CisKIAkJQlVHX09OKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKTsKIAotCQlpZiAoYXR0ci0+aWFfc2l6ZSA9PSBpX3NpemVfcmVhZChpbm9kZSkpCisJCWlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwkJaWYgKGF0dHItPmlhX3NpemUgPT0gaV9zaXplKQogCQkJYXR0ci0+aWFfdmFsaWQgJj0gfkFUVFJfU0laRTsKKwkJZWxzZSBpZiAoYXR0ci0+aWFfc2l6ZSA8IGlfc2l6ZSAmJiBJU19TV0FQRklMRShpbm9kZSkpCisJCQlyZXR1cm4gLUVUWFRCU1k7CiAJfQogCiAJLyogT3B0aW1pemF0aW9uOiBpZiB0aGUgZW5kIHJlc3VsdCBpcyBubyBjaGFuZ2UsIGRvbid0IFJQQyAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ludGVybmFsLmggYi9mcy9uZnMvaW50ZXJuYWwuaAppbmRleCBlZmFhMzFjLi4yMTQ2OWU2IDEwMDY0NAotLS0gYS9mcy9uZnMvaW50ZXJuYWwuaAorKysgYi9mcy9uZnMvaW50ZXJuYWwuaApAQCAtNiw2ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnNfcGFnZS5oPgogCiAjZGVmaW5lIE5GU19NU19NQVNLIChNU19SRE9OTFl8TVNfTk9TVUlEfE1TX05PREVWfE1TX05PRVhFQ3xNU19TWU5DSFJPTk9VUykKIApAQCAtMzEsOCArMzIsNiBAQAogCSAgICAoKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9NT1VOVFBPSU5UKSA9PSAwKSAmJgogCSAgICAgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9WNF9SRUZFUlJBTCkgPT0gMCkpKQogCQlyZXR1cm4gMDsKLQotCWZhdHRyLT5maWxlaWQgPSBmYXR0ci0+bW91bnRlZF9vbl9maWxlaWQ7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTE4OSw5ICsxODgsMTUgQEAKIAkJCQkJICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmRzX2FkZHIsCiAJCQkJCSAgICAgaW50IGRzX2FkZHJsZW4sIGludCBkc19wcm90bywKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgZHNfdGltZW8sCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IGRzX3JldHJhbnMpOworCQkJCQkgICAgIHVuc2lnbmVkIGludCBkc19yZXRyYW5zLAorCQkJCQkgICAgIHUzMiBtaW5vcl92ZXJzaW9uLAorCQkJCQkgICAgIHJwY19hdXRoZmxhdm9yX3QgYXVfZmxhdm9yKTsKIGV4dGVybiBzdHJ1Y3QgcnBjX2NsbnQgKm5mczRfZmluZF9vcl9jcmVhdGVfZHNfY2xpZW50KHN0cnVjdCBuZnNfY2xpZW50ICosCiAJCQkJCQlzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gc3RydWN0IG5mc19jbGllbnQgKm5mczNfc2V0X2RzX2NsaWVudChzdHJ1Y3QgbmZzX2NsaWVudCAqbWRzX2NscCwKKwkJCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqZHNfYWRkciwgaW50IGRzX2FkZHJsZW4sCisJCQlpbnQgZHNfcHJvdG8sIHVuc2lnbmVkIGludCBkc190aW1lbywKKwkJCXVuc2lnbmVkIGludCBkc19yZXRyYW5zLCBycGNfYXV0aGZsYXZvcl90IGF1X2ZsYXZvcik7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIGV4dGVybiBpbnQgX19pbml0IG5mc19mc19wcm9jX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBuZnNfZnNfcHJvY19leGl0KHZvaWQpOwpAQCAtMjQ0LDkgKzI0OSwxMiBAQAogdm9pZCBuZnNfcGdpb19oZWFkZXJfZnJlZShzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICopOwogdm9pZCBuZnNfcGdpb19kYXRhX2Rlc3Ryb3koc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqKTsKIGludCBuZnNfZ2VuZXJpY19wZ2lvKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKiwgc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqKTsKLWludCBuZnNfaW5pdGlhdGVfcGdpbyhzdHJ1Y3QgcnBjX2NsbnQgKiwgc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqLAotCQkgICAgICBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzICosIGludCwgaW50KTsKK2ludCBuZnNfaW5pdGlhdGVfcGdpbyhzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsIHN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkciwKKwkJICAgICAgc3RydWN0IHJwY19jcmVkICpjcmVkLCBjb25zdCBzdHJ1Y3QgbmZzX3JwY19vcHMgKnJwY19vcHMsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgKmNhbGxfb3BzLCBpbnQgaG93LCBpbnQgZmxhZ3MpOwogdm9pZCBuZnNfZnJlZV9yZXF1ZXN0KHN0cnVjdCBuZnNfcGFnZSAqcmVxKTsKK3N0cnVjdCBuZnNfcGdpb19taXJyb3IgKgorbmZzX3BnaW9fY3VycmVudF9taXJyb3Ioc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqZGVzYyk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZnNfaW9jb3VudGVyX2luaXQoc3RydWN0IG5mc19pb19jb3VudGVyICpjKQogewpAQCAtMjU0LDYgKzI2MiwxMiBAQAogCWF0b21pY19zZXQoJmMtPmlvX2NvdW50LCAwKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIG5mc19wZ2lvX2hhc19taXJyb3Jpbmcoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqZGVzYykKK3sKKwlXQVJOX09OX09OQ0UoZGVzYy0+cGdfbWlycm9yX2NvdW50IDwgMSk7CisJcmV0dXJuIGRlc2MtPnBnX21pcnJvcl9jb3VudCA+IDE7Cit9CisKIC8qIG5mczJ4ZHIuYyAqLwogZXh0ZXJuIHN0cnVjdCBycGNfcHJvY2luZm8gbmZzX3Byb2NlZHVyZXNbXTsKIGV4dGVybiBpbnQgbmZzMl9kZWNvZGVfZGlyZW50KHN0cnVjdCB4ZHJfc3RyZWFtICosCkBAIC0zNzcsNyArMzkxLDcgQEAKIAogZXh0ZXJuIGludCBfX2luaXQgcmVnaXN0ZXJfbmZzX2ZzKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19leGl0IHVucmVnaXN0ZXJfbmZzX2ZzKHZvaWQpOwotZXh0ZXJuIHZvaWQgbmZzX3NiX2FjdGl2ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK2V4dGVybiBib29sIG5mc19zYl9hY3RpdmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiBleHRlcm4gdm9pZCBuZnNfc2JfZGVhY3RpdmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CiAKIC8qIG5hbWVzcGFjZS5jICovCkBAIC00MjksNiArNDQzLDcgQEAKIGV4dGVybiB2b2lkIG5mc19jb21taXRfcHJlcGFyZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHZvaWQgKmNhbGxkYXRhKTsKIGV4dGVybiBpbnQgbmZzX2luaXRpYXRlX2NvbW1pdChzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsCiAJCQkgICAgICAgc3RydWN0IG5mc19jb21taXRfZGF0YSAqZGF0YSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZzX3JwY19vcHMgKm5mc19vcHMsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyAqY2FsbF9vcHMsCiAJCQkgICAgICAgaW50IGhvdywgaW50IGZsYWdzKTsKIGV4dGVybiB2b2lkIG5mc19pbml0X2NvbW1pdChzdHJ1Y3QgbmZzX2NvbW1pdF9kYXRhICpkYXRhLApAQCAtNDQyLDEzICs0NTcsMTUgQEAKIAkJICAgIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvKTsKIHZvaWQgbmZzX21hcmtfcmVxdWVzdF9jb21taXQoc3RydWN0IG5mc19wYWdlICpyZXEsCiAJCQkgICAgIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLAotCQkJICAgICBzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvICpjaW5mbyk7CisJCQkgICAgIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvLAorCQkJICAgICB1MzIgZHNfY29tbWl0X2lkeCk7CiBpbnQgbmZzX3dyaXRlX25lZWRfY29tbWl0KHN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKik7CiBpbnQgbmZzX2dlbmVyaWNfY29tbWl0X2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKIAkJCSAgICBpbnQgaG93LCBzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvICpjaW5mbyk7CiB2b2lkIG5mc19yZXRyeV9jb21taXQoc3RydWN0IGxpc3RfaGVhZCAqcGFnZV9saXN0LAogCQkgICAgICBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywKLQkJICAgICAgc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8pOworCQkgICAgICBzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvICpjaW5mbywKKwkJICAgICAgdTMyIGRzX2NvbW1pdF9pZHgpOwogdm9pZCBuZnNfY29tbWl0ZGF0YV9yZWxlYXNlKHN0cnVjdCBuZnNfY29tbWl0X2RhdGEgKmRhdGEpOwogdm9pZCBuZnNfcmVxdWVzdF9hZGRfY29tbWl0X2xpc3Qoc3RydWN0IG5mc19wYWdlICpyZXEsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwKIAkJCQkgc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8pOwpAQCAtNDU5LDYgKzQ3Niw3IEBACiAJCSAgICBzdHJ1Y3QgbmZzX2RpcmVjdF9yZXEgKmRyZXEpOwogaW50IG5mc19rZXlfdGltZW91dF9ub3RpZnkoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogYm9vbCBuZnNfY3R4X2tleV90b19leHBpcmUoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCk7Cit2b2lkIG5mc19wYWdlaW9fc3RvcF9taXJyb3Jpbmcoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqcGdpbyk7CiAKICNpZmRlZiBDT05GSUdfTUlHUkFUSU9OCiBleHRlcm4gaW50IG5mc19taWdyYXRlX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwKQEAgLTQ4Miw2ICs1MDAsNyBAQAogCWlub2RlX2Rpb193YWl0KGlub2RlKTsKIH0KIGV4dGVybiBzc2l6ZV90IG5mc19kcmVxX2J5dGVzX2xlZnQoc3RydWN0IG5mc19kaXJlY3RfcmVxICpkcmVxKTsKK2V4dGVybiB2b2lkIG5mc19kaXJlY3Rfc2V0X3Jlc2NoZWRfd3JpdGVzKHN0cnVjdCBuZnNfZGlyZWN0X3JlcSAqZHJlcSk7CiAKIC8qIG5mczRwcm9jLmMgKi8KIGV4dGVybiB2b2lkIF9fbmZzNF9yZWFkX2RvbmVfY2Ioc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqKTsKQEAgLTQ5NSw2ICs1MTQsMjYgQEAKIAkJCQlzdHJ1Y3QgbmZzX2NsaWVudCAqKnJlc3VsdCwKIAkJCQlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpOwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqbmZzX2lncmFiX2FuZF9hY3RpdmUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpbm9kZSA9IGlncmFiKGlub2RlKTsKKwlpZiAoaW5vZGUgIT0gTlVMTCAmJiAhbmZzX3NiX2FjdGl2ZShpbm9kZS0+aV9zYikpIHsKKwkJaXB1dChpbm9kZSk7CisJCWlub2RlID0gTlVMTDsKKwl9CisJcmV0dXJuIGlub2RlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbmZzX2lwdXRfYW5kX2RlYWN0aXZlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKGlub2RlICE9IE5VTEwpIHsKKwkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCisJCWlwdXQoaW5vZGUpOworCQluZnNfc2JfZGVhY3RpdmUoc2IpOworCX0KK30KKwogLyoKICAqIERldGVybWluZSB0aGUgZGV2aWNlIG5hbWUgYXMgYSBzdHJpbmcKICAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczJ4ZHIuYyBiL2ZzL25mcy9uZnMyeGRyLmMKaW5kZXggNWY2MWI4My4uYjRlMDNlZCAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczJ4ZHIuYworKysgYi9mcy9uZnMvbmZzMnhkci5jCkBAIC00ODEsNyArNDgxLDggQEAKICAqCQl2b2lkOwogICoJfTsKICAqLwotc3RhdGljIGludCBkZWNvZGVfYXR0cnN0YXQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19mYXR0ciAqcmVzdWx0KQorc3RhdGljIGludCBkZWNvZGVfYXR0cnN0YXQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19mYXR0ciAqcmVzdWx0LAorCQkJICAgX191MzIgKm9wX3N0YXR1cykKIHsKIAllbnVtIG5mc19zdGF0IHN0YXR1czsKIAlpbnQgZXJyb3I7CkBAIC00ODksNiArNDkwLDggQEAKIAllcnJvciA9IGRlY29kZV9zdGF0KHhkciwgJnN0YXR1cyk7CiAJaWYgKHVubGlrZWx5KGVycm9yKSkKIAkJZ290byBvdXQ7CisJaWYgKG9wX3N0YXR1cykKKwkJKm9wX3N0YXR1cyA9IHN0YXR1czsKIAlpZiAoc3RhdHVzICE9IE5GU19PSykKIAkJZ290byBvdXRfZGVmYXVsdDsKIAllcnJvciA9IGRlY29kZV9mYXR0cih4ZHIsIHJlc3VsdCk7CkBAIC04MDgsNyArODExLDcgQEAKIHN0YXRpYyBpbnQgbmZzMl94ZHJfZGVjX2F0dHJzdGF0KHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAogCQkJCSBzdHJ1Y3QgbmZzX2ZhdHRyICpyZXN1bHQpCiB7Ci0JcmV0dXJuIGRlY29kZV9hdHRyc3RhdCh4ZHIsIHJlc3VsdCk7CisJcmV0dXJuIGRlY29kZV9hdHRyc3RhdCh4ZHIsIHJlc3VsdCwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgbmZzMl94ZHJfZGVjX2Rpcm9wcmVzKHN0cnVjdCBycGNfcnFzdCAqcmVxLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLApAQCAtODY1LDYgKzg2OCw3IEBACiAJZXJyb3IgPSBkZWNvZGVfc3RhdCh4ZHIsICZzdGF0dXMpOwogCWlmICh1bmxpa2VseShlcnJvcikpCiAJCWdvdG8gb3V0OworCXJlc3VsdC0+b3Bfc3RhdHVzID0gc3RhdHVzOwogCWlmIChzdGF0dXMgIT0gTkZTX09LKQogCQlnb3RvIG91dF9kZWZhdWx0OwogCWVycm9yID0gZGVjb2RlX2ZhdHRyKHhkciwgcmVzdWx0LT5mYXR0cik7CkBAIC04ODIsNyArODg2LDcgQEAKIHsKIAkvKiBBbGwgTkZTdjIgd3JpdGVzIGFyZSAiZmlsZSBzeW5jIiB3cml0ZXMgKi8KIAlyZXN1bHQtPnZlcmYtPmNvbW1pdHRlZCA9IE5GU19GSUxFX1NZTkM7Ci0JcmV0dXJuIGRlY29kZV9hdHRyc3RhdCh4ZHIsIHJlc3VsdC0+ZmF0dHIpOworCXJldHVybiBkZWNvZGVfYXR0cnN0YXQoeGRyLCByZXN1bHQtPmZhdHRyLCAmcmVzdWx0LT5vcF9zdGF0dXMpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzX2ZzLmggYi9mcy9uZnMvbmZzM19mcy5oCmluZGV4IDMzM2FlNDAuLmUxMzRkNjUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMzX2ZzLmgKKysrIGIvZnMvbmZzL25mczNfZnMuaApAQCAtMzAsNSArMzAsNyBAQAogc3RydWN0IG5mc19zZXJ2ZXIgKm5mczNfY2xvbmVfc2VydmVyKHN0cnVjdCBuZnNfc2VydmVyICosIHN0cnVjdCBuZnNfZmggKiwKIAkJCQkgICAgIHN0cnVjdCBuZnNfZmF0dHIgKiwgcnBjX2F1dGhmbGF2b3JfdCk7CiAKKy8qIG5mczNzdXBlci5jICovCitleHRlcm4gc3RydWN0IG5mc19zdWJ2ZXJzaW9uIG5mc192MzsKIAogI2VuZGlmIC8qIF9fTElOVVhfRlNfTkZTX05GUzNfRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczNjbGllbnQuYyBiL2ZzL25mcy9uZnMzY2xpZW50LmMKaW5kZXggOGMxYjQzNy4uOWU5ZmEzNCAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczNjbGllbnQuYworKysgYi9mcy9uZnMvbmZzM2NsaWVudC5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L25mc19tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9hZGRyLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKICNpbmNsdWRlICJuZnMzX2ZzLmgiCiAKQEAgLTY0LDMgKzY1LDQzIEBACiAJCW5mc19pbml0X3NlcnZlcl9hY2xjbGllbnQoc2VydmVyKTsKIAlyZXR1cm4gc2VydmVyOwogfQorCisvKgorICogU2V0IHVwIGEgcE5GUyBEYXRhIFNlcnZlciBjbGllbnQgb3ZlciBORlN2My4KKyAqCisgKiBSZXR1cm4gYW55IGV4aXN0aW5nIG5mc19jbGllbnQgdGhhdCBtYXRjaGVzIHNlcnZlciBhZGRyZXNzLHBvcnQsdmVyc2lvbgorICogYW5kIG1pbm9ydmVyc2lvbi4KKyAqCisgKiBGb3IgYSBuZXcgbmZzX2NsaWVudCwgdXNlIGEgc29mdCBtb3VudCAoZGVmYXVsdCksIGEgbG93IHJldHJhbnMgYW5kIGEKKyAqIGxvdyB0aW1lb3V0IGludGVydmFsIHNvIHRoYXQgaWYgYSBjb25uZWN0aW9uIGlzIGxvc3QsIHdlIHJldHJ5IHRocm91Z2gKKyAqIHRoZSBNRFMuCisgKi8KK3N0cnVjdCBuZnNfY2xpZW50ICpuZnMzX3NldF9kc19jbGllbnQoc3RydWN0IG5mc19jbGllbnQgKm1kc19jbHAsCisJCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqZHNfYWRkciwgaW50IGRzX2FkZHJsZW4sCisJCWludCBkc19wcm90bywgdW5zaWduZWQgaW50IGRzX3RpbWVvLCB1bnNpZ25lZCBpbnQgZHNfcmV0cmFucywKKwkJcnBjX2F1dGhmbGF2b3JfdCBhdV9mbGF2b3IpCit7CisJc3RydWN0IG5mc19jbGllbnRfaW5pdGRhdGEgY2xfaW5pdCA9IHsKKwkJLmFkZHIgPSBkc19hZGRyLAorCQkuYWRkcmxlbiA9IGRzX2FkZHJsZW4sCisJCS5uZnNfbW9kID0gJm5mc192MywKKwkJLnByb3RvID0gZHNfcHJvdG8sCisJCS5uZXQgPSBtZHNfY2xwLT5jbF9uZXQsCisJfTsKKwlzdHJ1Y3QgcnBjX3RpbWVvdXQgZHNfdGltZW91dDsKKwlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOworCWNoYXIgYnVmW0lORVQ2X0FERFJTVFJMRU4gKyAxXTsKKworCS8qIGZha2UgYSBob3N0bmFtZSBiZWNhdXNlIGxvY2tkIHdhbnRzIGl0ICovCisJaWYgKHJwY19udG9wKGRzX2FkZHIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpIDw9IDApCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCWNsX2luaXQuaG9zdG5hbWUgPSBidWY7CisKKwkvKiBVc2UgdGhlIE1EUyBuZnNfY2xpZW50IGNsX2lwYWRkci4gKi8KKwluZnNfaW5pdF90aW1lb3V0X3ZhbHVlcygmZHNfdGltZW91dCwgZHNfcHJvdG8sIGRzX3RpbWVvLCBkc19yZXRyYW5zKTsKKwljbHAgPSBuZnNfZ2V0X2NsaWVudCgmY2xfaW5pdCwgJmRzX3RpbWVvdXQsIG1kc19jbHAtPmNsX2lwYWRkciwKKwkJCSAgICAgYXVfZmxhdm9yKTsKKworCXJldHVybiBjbHA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZnMzX3NldF9kc19jbGllbnQpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczNwcm9jLmMgYi9mcy9uZnMvbmZzM3Byb2MuYwppbmRleCA1MjRmOWY4Li43OGU1NTdjIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzM3Byb2MuYworKysgYi9mcy9uZnMvbmZzM3Byb2MuYwpAQCAtODAwLDYgKzgwMCw5IEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGhkci0+aW5vZGU7CiAKKwlpZiAoaGRyLT5wZ2lvX2RvbmVfY2IgIT0gTlVMTCkKKwkJcmV0dXJuIGhkci0+cGdpb19kb25lX2NiKHRhc2ssIGhkcik7CisKIAlpZiAobmZzM19hc3luY19oYW5kbGVfanVrZWJveCh0YXNrLCBpbm9kZSkpCiAJCXJldHVybiAtRUFHQUlOOwogCkBAIC04MjUsNiArODI4LDkgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaGRyLT5pbm9kZTsKIAorCWlmIChoZHItPnBnaW9fZG9uZV9jYiAhPSBOVUxMKQorCQlyZXR1cm4gaGRyLT5wZ2lvX2RvbmVfY2IodGFzaywgaGRyKTsKKwogCWlmIChuZnMzX2FzeW5jX2hhbmRsZV9qdWtlYm94KHRhc2ssIGlub2RlKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAJaWYgKHRhc2stPnRrX3N0YXR1cyA+PSAwKQpAQCAtODQ1LDYgKzg1MSw5IEBACiAKIHN0YXRpYyBpbnQgbmZzM19jb21taXRfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHN0cnVjdCBuZnNfY29tbWl0X2RhdGEgKmRhdGEpCiB7CisJaWYgKGRhdGEtPmNvbW1pdF9kb25lX2NiICE9IE5VTEwpCisJCXJldHVybiBkYXRhLT5jb21taXRfZG9uZV9jYih0YXNrLCBkYXRhKTsKKwogCWlmIChuZnMzX2FzeW5jX2hhbmRsZV9qdWtlYm94KHRhc2ssIGRhdGEtPmlub2RlKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAJbmZzX3JlZnJlc2hfaW5vZGUoZGF0YS0+aW5vZGUsIGRhdGEtPnJlcy5mYXR0cik7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzM3N1cGVyLmMgYi9mcy9uZnMvbmZzM3N1cGVyLmMKaW5kZXggNmFmMjljMi4uNWM0Mzk0ZSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczNzdXBlci5jCisrKyBiL2ZzL25mcy9uZnMzc3VwZXIuYwpAQCAtNyw3ICs3LDcgQEAKICNpbmNsdWRlICJuZnMzX2ZzLmgiCiAjaW5jbHVkZSAibmZzLmgiCiAKLXN0YXRpYyBzdHJ1Y3QgbmZzX3N1YnZlcnNpb24gbmZzX3YzID0geworc3RydWN0IG5mc19zdWJ2ZXJzaW9uIG5mc192MyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubmZzX2ZzICAgPSAmbmZzX2ZzX3R5cGUsCiAJLnJwY192ZXJzID0gJm5mc192ZXJzaW9uMywKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzeGRyLmMgYi9mcy9uZnMvbmZzM3hkci5jCmluZGV4IDhmNGNiZTcuLjJhOTMyZmQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMzeGRyLmMKKysrIGIvZnMvbmZzL25mczN4ZHIuYwpAQCAtMTYzNiw2ICsxNjM2LDcgQEAKIAllcnJvciA9IGRlY29kZV9wb3N0X29wX2F0dHIoeGRyLCByZXN1bHQtPmZhdHRyKTsKIAlpZiAodW5saWtlbHkoZXJyb3IpKQogCQlnb3RvIG91dDsKKwlyZXN1bHQtPm9wX3N0YXR1cyA9IHN0YXR1czsKIAlpZiAoc3RhdHVzICE9IE5GUzNfT0spCiAJCWdvdG8gb3V0X3N0YXR1czsKIAllcnJvciA9IGRlY29kZV9yZWFkM3Jlc29rKHhkciwgcmVzdWx0KTsKQEAgLTE3MDgsNiArMTcwOSw3IEBACiAJZXJyb3IgPSBkZWNvZGVfd2NjX2RhdGEoeGRyLCByZXN1bHQtPmZhdHRyKTsKIAlpZiAodW5saWtlbHkoZXJyb3IpKQogCQlnb3RvIG91dDsKKwlyZXN1bHQtPm9wX3N0YXR1cyA9IHN0YXR1czsKIAlpZiAoc3RhdHVzICE9IE5GUzNfT0spCiAJCWdvdG8gb3V0X3N0YXR1czsKIAllcnJvciA9IGRlY29kZV93cml0ZTNyZXNvayh4ZHIsIHJlc3VsdCk7CkBAIC0yMzIzLDYgKzIzMjUsNyBAQAogCWVycm9yID0gZGVjb2RlX3djY19kYXRhKHhkciwgcmVzdWx0LT5mYXR0cik7CiAJaWYgKHVubGlrZWx5KGVycm9yKSkKIAkJZ290byBvdXQ7CisJcmVzdWx0LT5vcF9zdGF0dXMgPSBzdGF0dXM7CiAJaWYgKHN0YXR1cyAhPSBORlMzX09LKQogCQlnb3RvIG91dF9zdGF0dXM7CiAJZXJyb3IgPSBkZWNvZGVfd3JpdGV2ZXJmMyh4ZHIsICZyZXN1bHQtPnZlcmYtPnZlcmlmaWVyKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0X2ZzLmggYi9mcy9uZnMvbmZzNF9mcy5oCmluZGV4IGEwODE3ODcuLmZkZWY0MjQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0X2ZzLmgKKysrIGIvZnMvbmZzL25mczRfZnMuaApAQCAtNDQsNiArNDQsNyBAQAogI2RlZmluZSBORlM0X1JFTkVXX1RJTUVPVVQJCTB4MDEKICNkZWZpbmUgTkZTNF9SRU5FV19ERUxFR0FUSU9OX0NCCTB4MDIKIAorc3RydWN0IG5mc19zZXFpZF9jb3VudGVyOwogc3RydWN0IG5mczRfbWlub3JfdmVyc2lvbl9vcHMgewogCXUzMgltaW5vcl92ZXJzaW9uOwogCXVuc2lnbmVkIGluaXRfY2FwczsKQEAgLTU2LDYgKzU3LDggQEAKIAkJCXN0cnVjdCBuZnNfZnNpbmZvICopOwogCXZvaWQJKCpmcmVlX2xvY2tfc3RhdGUpKHN0cnVjdCBuZnNfc2VydmVyICosCiAJCQlzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICopOworCXN0cnVjdCBuZnNfc2VxaWQgKgorCQkoKmFsbG9jX3NlcWlkKShzdHJ1Y3QgbmZzX3NlcWlkX2NvdW50ZXIgKiwgZ2ZwX3QpOwogCWNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgKmNhbGxfc3luY19vcHM7CiAJY29uc3Qgc3RydWN0IG5mczRfc3RhdGVfcmVjb3Zlcnlfb3BzICpyZWJvb3RfcmVjb3Zlcnlfb3BzOwogCWNvbnN0IHN0cnVjdCBuZnM0X3N0YXRlX3JlY292ZXJ5X29wcyAqbm9ncmFjZV9yZWNvdmVyeV9vcHM7CkBAIC00NDMsNiArNDQ2LDEyIEBACiBleHRlcm4gdm9pZCBuZnNfaW5jcmVtZW50X2xvY2tfc2VxaWQoaW50IHN0YXR1cywgc3RydWN0IG5mc19zZXFpZCAqc2VxaWQpOwogZXh0ZXJuIHZvaWQgbmZzX3JlbGVhc2Vfc2VxaWQoc3RydWN0IG5mc19zZXFpZCAqc2VxaWQpOwogZXh0ZXJuIHZvaWQgbmZzX2ZyZWVfc2VxaWQoc3RydWN0IG5mc19zZXFpZCAqc2VxaWQpOworZXh0ZXJuIGludCBuZnM0MF9zZXR1cF9zZXF1ZW5jZShzdHJ1Y3QgbmZzNF9zbG90X3RhYmxlICp0YmwsCisJCQkJc3RydWN0IG5mczRfc2VxdWVuY2VfYXJncyAqYXJncywKKwkJCQlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMgKnJlcywKKwkJCQlzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOworZXh0ZXJuIGludCBuZnM0X3NlcXVlbmNlX2RvbmUoc3RydWN0IHJwY190YXNrICp0YXNrLAorCQkJICAgICAgc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMpOwogCiBleHRlcm4gdm9pZCBuZnM0X2ZyZWVfbG9ja19zdGF0ZShzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICpsc3ApOwogCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNGNsaWVudC5jIGIvZnMvbmZzL25mczRjbGllbnQuYwppbmRleCA5NTNkYWE0Li44NjQ2YWY5IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNGNsaWVudC5jCisrKyBiL2ZzL25mcy9uZnM0Y2xpZW50LmMKQEAgLTYzOSw3ICs2MzksNyBAQAogCQkJcHJldiA9IHBvczsKIAogCQkJc3RhdHVzID0gbmZzX3dhaXRfY2xpZW50X2luaXRfY29tcGxldGUocG9zKTsKLQkJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJaWYgKHBvcy0+Y2xfY29uc19zdGF0ZSA9PSBORlNfQ1NfU0VTU0lPTl9JTklUSU5HKSB7CiAJCQkJbmZzNF9zY2hlZHVsZV9sZWFzZV9yZWNvdmVyeShwb3MpOwogCQkJCXN0YXR1cyA9IG5mczRfd2FpdF9jbG50X3JlY292ZXIocG9zKTsKIAkJCX0KQEAgLTg0OSwxNCArODQ5LDE1IEBACiAgKi8KIHN0cnVjdCBuZnNfY2xpZW50ICpuZnM0X3NldF9kc19jbGllbnQoc3RydWN0IG5mc19jbGllbnQqIG1kc19jbHAsCiAJCWNvbnN0IHN0cnVjdCBzb2NrYWRkciAqZHNfYWRkciwgaW50IGRzX2FkZHJsZW4sCi0JCWludCBkc19wcm90bywgdW5zaWduZWQgaW50IGRzX3RpbWVvLCB1bnNpZ25lZCBpbnQgZHNfcmV0cmFucykKKwkJaW50IGRzX3Byb3RvLCB1bnNpZ25lZCBpbnQgZHNfdGltZW8sIHVuc2lnbmVkIGludCBkc19yZXRyYW5zLAorCQl1MzIgbWlub3JfdmVyc2lvbiwgcnBjX2F1dGhmbGF2b3JfdCBhdV9mbGF2b3IpCiB7CiAJc3RydWN0IG5mc19jbGllbnRfaW5pdGRhdGEgY2xfaW5pdCA9IHsKIAkJLmFkZHIgPSBkc19hZGRyLAogCQkuYWRkcmxlbiA9IGRzX2FkZHJsZW4sCiAJCS5uZnNfbW9kID0gJm5mc192NCwKIAkJLnByb3RvID0gZHNfcHJvdG8sCi0JCS5taW5vcnZlcnNpb24gPSBtZHNfY2xwLT5jbF9taW5vcnZlcnNpb24sCisJCS5taW5vcnZlcnNpb24gPSBtaW5vcl92ZXJzaW9uLAogCQkubmV0ID0gbWRzX2NscC0+Y2xfbmV0LAogCX07CiAJc3RydWN0IHJwY190aW1lb3V0IGRzX3RpbWVvdXQ7CkBAIC04NzQsNyArODc1LDcgQEAKIAkgKi8KIAluZnNfaW5pdF90aW1lb3V0X3ZhbHVlcygmZHNfdGltZW91dCwgZHNfcHJvdG8sIGRzX3RpbWVvLCBkc19yZXRyYW5zKTsKIAljbHAgPSBuZnNfZ2V0X2NsaWVudCgmY2xfaW5pdCwgJmRzX3RpbWVvdXQsIG1kc19jbHAtPmNsX2lwYWRkciwKLQkJCSAgICAgbWRzX2NscC0+Y2xfcnBjY2xpZW50LT5jbF9hdXRoLT5hdV9mbGF2b3IpOworCQkJICAgICBhdV9mbGF2b3IpOwogCiAJZHByaW50aygiPC0tICVzICVwXG4iLCBfX2Z1bmNfXywgY2xwKTsKIAlyZXR1cm4gY2xwOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCBjMzQ3NzA1Li4yZTdjOWY3IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtNDk1LDEyICs0OTUsMTEgQEAKIAlhcmdzLT5zYV9wcml2aWxlZ2VkID0gMTsKIH0KIAotc3RhdGljIGludCBuZnM0MF9zZXR1cF9zZXF1ZW5jZShjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLAotCQkJCXN0cnVjdCBuZnM0X3NlcXVlbmNlX2FyZ3MgKmFyZ3MsCi0JCQkJc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMsCi0JCQkJc3RydWN0IHJwY190YXNrICp0YXNrKQoraW50IG5mczQwX3NldHVwX3NlcXVlbmNlKHN0cnVjdCBuZnM0X3Nsb3RfdGFibGUgKnRibCwKKwkJCSBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzICphcmdzLAorCQkJIHN0cnVjdCBuZnM0X3NlcXVlbmNlX3JlcyAqcmVzLAorCQkJIHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKLQlzdHJ1Y3QgbmZzNF9zbG90X3RhYmxlICp0YmwgPSBzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3Nsb3RfdGJsOwogCXN0cnVjdCBuZnM0X3Nsb3QgKnNsb3Q7CiAKIAkvKiBzbG90IGFscmVhZHkgYWxsb2NhdGVkPyAqLwpAQCAtNTM1LDYgKzUzNCw3IEBACiAJc3Bpbl91bmxvY2soJnRibC0+c2xvdF90YmxfbG9jayk7CiAJcmV0dXJuIC1FQUdBSU47CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuZnM0MF9zZXR1cF9zZXF1ZW5jZSk7CiAKIHN0YXRpYyBpbnQgbmZzNDBfc2VxdWVuY2VfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssCiAJCQkgICAgICAgc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMpCkBAIC02OTQsOCArNjk0LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mczQxX3NlcXVlbmNlX2RvbmUpOwogCi1zdGF0aWMgaW50IG5mczRfc2VxdWVuY2VfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssCi0JCQkgICAgICAgc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMpCitpbnQgbmZzNF9zZXF1ZW5jZV9kb25lKHN0cnVjdCBycGNfdGFzayAqdGFzaywgc3RydWN0IG5mczRfc2VxdWVuY2VfcmVzICpyZXMpCiB7CiAJaWYgKHJlcy0+c3Jfc2xvdCA9PSBOVUxMKQogCQlyZXR1cm4gMTsKQEAgLTcwMyw2ICs3MDIsNyBAQAogCQlyZXR1cm4gbmZzNDBfc2VxdWVuY2VfZG9uZSh0YXNrLCByZXMpOwogCXJldHVybiBuZnM0MV9zZXF1ZW5jZV9kb25lKHRhc2ssIHJlcyk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChuZnM0X3NlcXVlbmNlX2RvbmUpOwogCiBpbnQgbmZzNDFfc2V0dXBfc2VxdWVuY2Uoc3RydWN0IG5mczRfc2Vzc2lvbiAqc2Vzc2lvbiwKIAkJCQlzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9hcmdzICphcmdzLApAQCAtNzc3LDcgKzc3Nyw4IEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoIXNlc3Npb24pCi0JCXJldHVybiBuZnM0MF9zZXR1cF9zZXF1ZW5jZShzZXJ2ZXIsIGFyZ3MsIHJlcywgdGFzayk7CisJCXJldHVybiBuZnM0MF9zZXR1cF9zZXF1ZW5jZShzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3Nsb3RfdGJsLAorCQkJCQkgICAgYXJncywgcmVzLCB0YXNrKTsKIAogCWRwcmludGsoIi0tPiAlcyBjbHAgJXAgc2Vzc2lvbiAlcCBzcl9zbG90ICV1XG4iLAogCQlfX2Z1bmNfXywgc2Vzc2lvbi0+Y2xwLCBzZXNzaW9uLCByZXMtPnNyX3Nsb3QgPwpAQCAtODE4LDE0ICs4MTksMTYgQEAKIAkJCSAgICAgICBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMgKnJlcywKIAkJCSAgICAgICBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7Ci0JcmV0dXJuIG5mczQwX3NldHVwX3NlcXVlbmNlKHNlcnZlciwgYXJncywgcmVzLCB0YXNrKTsKKwlyZXR1cm4gbmZzNDBfc2V0dXBfc2VxdWVuY2Uoc2VydmVyLT5uZnNfY2xpZW50LT5jbF9zbG90X3RibCwKKwkJCQkgICAgYXJncywgcmVzLCB0YXNrKTsKIH0KIAotc3RhdGljIGludCBuZnM0X3NlcXVlbmNlX2RvbmUoc3RydWN0IHJwY190YXNrICp0YXNrLAotCQkJICAgICAgIHN0cnVjdCBuZnM0X3NlcXVlbmNlX3JlcyAqcmVzKQoraW50IG5mczRfc2VxdWVuY2VfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssCisJCSAgICAgICBzdHJ1Y3QgbmZzNF9zZXF1ZW5jZV9yZXMgKnJlcykKIHsKIAlyZXR1cm4gbmZzNDBfc2VxdWVuY2VfZG9uZSh0YXNrLCByZXMpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwobmZzNF9zZXF1ZW5jZV9kb25lKTsKIAogI2VuZGlmCS8qICFDT05GSUdfTkZTX1Y0XzEgKi8KIApAQCAtOTM3LDYgKzk0MCwzMSBAQAogCXJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdTMyCituZnM0X21hcF9hdG9taWNfb3Blbl9zaGFyZShzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLAorCQlmbW9kZV90IGZtb2RlLCBpbnQgb3BlbmZsYWdzKQoreworCXUzMiByZXMgPSAwOworCisJc3dpdGNoIChmbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpKSB7CisJY2FzZSBGTU9ERV9SRUFEOgorCQlyZXMgPSBORlM0X1NIQVJFX0FDQ0VTU19SRUFEOworCQlicmVhazsKKwljYXNlIEZNT0RFX1dSSVRFOgorCQlyZXMgPSBORlM0X1NIQVJFX0FDQ0VTU19XUklURTsKKwkJYnJlYWs7CisJY2FzZSBGTU9ERV9SRUFEfEZNT0RFX1dSSVRFOgorCQlyZXMgPSBORlM0X1NIQVJFX0FDQ0VTU19CT1RIOworCX0KKwlpZiAoIShzZXJ2ZXItPmNhcHMgJiBORlNfQ0FQX0FUT01JQ19PUEVOX1YxKSkKKwkJZ290byBvdXQ7CisJLyogV2FudCBubyBkZWxlZ2F0aW9uIGlmIHdlJ3JlIHVzaW5nIE9fRElSRUNUICovCisJaWYgKG9wZW5mbGFncyAmIE9fRElSRUNUKQorCQlyZXMgfD0gTkZTNF9TSEFSRV9XQU5UX05PX0RFTEVHOworb3V0OgorCXJldHVybiByZXM7Cit9CisKIHN0YXRpYyBlbnVtIG9wZW5fY2xhaW1fdHlwZTQKIG5mczRfbWFwX2F0b21pY19vcGVuX2NsYWltKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsCiAJCWVudW0gb3Blbl9jbGFpbV90eXBlNCBjbGFpbSkKQEAgLTk3Nyw2ICsxMDA1LDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQgPSBkZ2V0X3BhcmVudChkZW50cnkpOwogCXN0cnVjdCBpbm9kZSAqZGlyID0gcGFyZW50LT5kX2lub2RlOwogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGRpcik7CisJc3RydWN0IG5mc19zZXFpZCAqKCphbGxvY19zZXFpZCkoc3RydWN0IG5mc19zZXFpZF9jb3VudGVyICosIGdmcF90KTsKIAlzdHJ1Y3QgbmZzNF9vcGVuZGF0YSAqcDsKIAogCXAgPSBremFsbG9jKHNpemVvZigqcCksIGdmcF9tYXNrKTsKQEAgLTk4Nyw4ICsxMDE2LDkgQEAKIAlpZiAoSVNfRVJSKHAtPmZfbGFiZWwpKQogCQlnb3RvIGVycl9mcmVlX3A7CiAKLQlwLT5vX2FyZy5zZXFpZCA9IG5mc19hbGxvY19zZXFpZCgmc3AtPnNvX3NlcWlkLCBnZnBfbWFzayk7Ci0JaWYgKHAtPm9fYXJnLnNlcWlkID09IE5VTEwpCisJYWxsb2Nfc2VxaWQgPSBzZXJ2ZXItPm5mc19jbGllbnQtPmNsX212b3BzLT5hbGxvY19zZXFpZDsKKwlwLT5vX2FyZy5zZXFpZCA9IGFsbG9jX3NlcWlkKCZzcC0+c29fc2VxaWQsIGdmcF9tYXNrKTsKKwlpZiAoSVNfRVJSKHAtPm9fYXJnLnNlcWlkKSkKIAkJZ290byBlcnJfZnJlZV9sYWJlbDsKIAluZnNfc2JfYWN0aXZlKGRlbnRyeS0+ZF9zYik7CiAJcC0+ZGVudHJ5ID0gZGdldChkZW50cnkpOwpAQCAtOTk3LDYgKzEwMjcsOCBAQAogCWF0b21pY19pbmMoJnNwLT5zb19jb3VudCk7CiAJcC0+b19hcmcub3Blbl9mbGFncyA9IGZsYWdzOwogCXAtPm9fYXJnLmZtb2RlID0gZm1vZGUgJiAoRk1PREVfUkVBRHxGTU9ERV9XUklURSk7CisJcC0+b19hcmcuc2hhcmVfYWNjZXNzID0gbmZzNF9tYXBfYXRvbWljX29wZW5fc2hhcmUoc2VydmVyLAorCQkJZm1vZGUsIGZsYWdzKTsKIAkvKiBkb24ndCBwdXQgYW4gQUNDRVNTIG9wIGluIE9QRU4gY29tcG91bmQgaWYgT19FWENMLCBiZWNhdXNlIEFDQ0VTUwogCSAqIHdpbGwgcmV0dXJuIHBlcm1pc3Npb24gZGVuaWVkIGZvciBhbGwgYml0cyB1bnRpbCBjbG9zZSAqLwogCWlmICghKGZsYWdzICYgT19FWENMKSkgewpAQCAtMTE2Nyw2ICsxMTk5LDE2IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgdm9pZCBuZnNfcmVzeW5jX29wZW5fc3RhdGVpZF9sb2NrZWQoc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlKQoreworCWlmIChzdGF0ZS0+bl93cm9ubHkpCisJCXNldF9iaXQoTkZTX09fV1JPTkxZX1NUQVRFLCAmc3RhdGUtPmZsYWdzKTsKKwlpZiAoc3RhdGUtPm5fcmRvbmx5KQorCQlzZXRfYml0KE5GU19PX1JET05MWV9TVEFURSwgJnN0YXRlLT5mbGFncyk7CisJaWYgKHN0YXRlLT5uX3Jkd3IpCisJCXNldF9iaXQoTkZTX09fUkRXUl9TVEFURSwgJnN0YXRlLT5mbGFncyk7Cit9CisKIHN0YXRpYyB2b2lkIG5mc19jbGVhcl9vcGVuX3N0YXRlaWRfbG9ja2VkKHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwKIAkJbmZzNF9zdGF0ZWlkICpzdGF0ZWlkLCBmbW9kZV90IGZtb2RlKQogewpAQCAtMTE4NSw4ICsxMjI3LDEyIEBACiAJfQogCWlmIChzdGF0ZWlkID09IE5VTEwpCiAJCXJldHVybjsKLQlpZiAoIW5mc19uZWVkX3VwZGF0ZV9vcGVuX3N0YXRlaWQoc3RhdGUsIHN0YXRlaWQpKQorCS8qIEhhbmRsZSByYWNlcyB3aXRoIE9QRU4gKi8KKwlpZiAoIW5mczRfc3RhdGVpZF9tYXRjaF9vdGhlcihzdGF0ZWlkLCAmc3RhdGUtPm9wZW5fc3RhdGVpZCkgfHwKKwkgICAgIW5mczRfc3RhdGVpZF9pc19uZXdlcihzdGF0ZWlkLCAmc3RhdGUtPm9wZW5fc3RhdGVpZCkpIHsKKwkJbmZzX3Jlc3luY19vcGVuX3N0YXRlaWRfbG9ja2VkKHN0YXRlKTsKIAkJcmV0dXJuOworCX0KIAlpZiAodGVzdF9iaXQoTkZTX0RFTEVHQVRFRF9TVEFURSwgJnN0YXRlLT5mbGFncykgPT0gMCkKIAkJbmZzNF9zdGF0ZWlkX2NvcHkoJnN0YXRlLT5zdGF0ZWlkLCBzdGF0ZWlkKTsKIAluZnM0X3N0YXRlaWRfY29weSgmc3RhdGUtPm9wZW5fc3RhdGVpZCwgc3RhdGVpZCk7CkBAIC0xMjgxLDYgKzEzMjcsMjMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgYm9vbCBuZnM0X3VwZGF0ZV9sb2NrX3N0YXRlaWQoc3RydWN0IG5mczRfbG9ja19zdGF0ZSAqbHNwLAorCQljb25zdCBuZnM0X3N0YXRlaWQgKnN0YXRlaWQpCit7CisJc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlID0gbHNwLT5sc19zdGF0ZTsKKwlib29sIHJldCA9IGZhbHNlOworCisJc3Bpbl9sb2NrKCZzdGF0ZS0+c3RhdGVfbG9jayk7CisJaWYgKCFuZnM0X3N0YXRlaWRfbWF0Y2hfb3RoZXIoc3RhdGVpZCwgJmxzcC0+bHNfc3RhdGVpZCkpCisJCWdvdG8gb3V0X25vdXBkYXRlOworCWlmICghbmZzNF9zdGF0ZWlkX2lzX25ld2VyKHN0YXRlaWQsICZsc3AtPmxzX3N0YXRlaWQpKQorCQlnb3RvIG91dF9ub3VwZGF0ZTsKKwluZnM0X3N0YXRlaWRfY29weSgmbHNwLT5sc19zdGF0ZWlkLCBzdGF0ZWlkKTsKKwlyZXQgPSB0cnVlOworb3V0X25vdXBkYXRlOgorCXNwaW5fdW5sb2NrKCZzdGF0ZS0+c3RhdGVfbG9jayk7CisJcmV0dXJuIHJldDsKK30KIAogc3RhdGljIHZvaWQgbmZzNF9yZXR1cm5faW5jb21wYXRpYmxlX2RlbGVnYXRpb24oc3RydWN0IGlub2RlICppbm9kZSwgZm1vZGVfdCBmbW9kZSkKIHsKQEAgLTE2NzksOCArMTc0Miw4IEBACiB7CiAJc3RydWN0IG5mczRfb3BlbmRhdGEgKmRhdGEgPSBjYWxsZGF0YTsKIAotCW5mczQwX3NldHVwX3NlcXVlbmNlKGRhdGEtPm9fYXJnLnNlcnZlciwgJmRhdGEtPmNfYXJnLnNlcV9hcmdzLAotCQkJCSZkYXRhLT5jX3Jlcy5zZXFfcmVzLCB0YXNrKTsKKwluZnM0MF9zZXR1cF9zZXF1ZW5jZShkYXRhLT5vX2FyZy5zZXJ2ZXItPm5mc19jbGllbnQtPmNsX3Nsb3RfdGJsLAorCQkJICAgICAmZGF0YS0+Y19hcmcuc2VxX2FyZ3MsICZkYXRhLT5jX3Jlcy5zZXFfcmVzLCB0YXNrKTsKIH0KIAogc3RhdGljIHZvaWQgbmZzNF9vcGVuX2NvbmZpcm1fZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHZvaWQgKmNhbGxkYXRhKQpAQCAtMjU4Nyw2ICsyNjUwLDExIEBACiAJCWNhc2UgLU5GUzRFUlJfT0xEX1NUQVRFSUQ6CiAJCWNhc2UgLU5GUzRFUlJfQkFEX1NUQVRFSUQ6CiAJCWNhc2UgLU5GUzRFUlJfRVhQSVJFRDoKKwkJCWlmICghbmZzNF9zdGF0ZWlkX21hdGNoKCZjYWxsZGF0YS0+YXJnLnN0YXRlaWQsCisJCQkJCQkmc3RhdGUtPnN0YXRlaWQpKSB7CisJCQkJcnBjX3Jlc3RhcnRfY2FsbF9wcmVwYXJlKHRhc2spOworCQkJCWdvdG8gb3V0X3JlbGVhc2U7CisJCQl9CiAJCQlpZiAoY2FsbGRhdGEtPmFyZy5mbW9kZSA9PSAwKQogCQkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMjYxOSw2ICsyNjg3LDcgQEAKIAlpc19yZHdyID0gdGVzdF9iaXQoTkZTX09fUkRXUl9TVEFURSwgJnN0YXRlLT5mbGFncyk7CiAJaXNfcmRvbmx5ID0gdGVzdF9iaXQoTkZTX09fUkRPTkxZX1NUQVRFLCAmc3RhdGUtPmZsYWdzKTsKIAlpc193cm9ubHkgPSB0ZXN0X2JpdChORlNfT19XUk9OTFlfU1RBVEUsICZzdGF0ZS0+ZmxhZ3MpOworCW5mczRfc3RhdGVpZF9jb3B5KCZjYWxsZGF0YS0+YXJnLnN0YXRlaWQsICZzdGF0ZS0+c3RhdGVpZCk7CiAJLyogQ2FsY3VsYXRlIHRoZSBjaGFuZ2UgaW4gb3BlbiBtb2RlICovCiAJY2FsbGRhdGEtPmFyZy5mbW9kZSA9IDA7CiAJaWYgKHN0YXRlLT5uX3Jkd3IgPT0gMCkgewpAQCAtMjY1Myw2ICsyNzIyLDkgQEAKIAkJCWdvdG8gb3V0X3dhaXQ7CiAJCSAgICB9CiAJfQorCWNhbGxkYXRhLT5hcmcuc2hhcmVfYWNjZXNzID0KKwkJbmZzNF9tYXBfYXRvbWljX29wZW5fc2hhcmUoTkZTX1NFUlZFUihpbm9kZSksCisJCQkJY2FsbGRhdGEtPmFyZy5mbW9kZSwgMCk7CiAKIAluZnNfZmF0dHJfaW5pdChjYWxsZGF0YS0+cmVzLmZhdHRyKTsKIAljYWxsZGF0YS0+dGltZXN0YW1wID0gamlmZmllczsKQEAgLTI2NzUsNDUgKzI3NDcsMTAgQEAKIAkucnBjX3JlbGVhc2UgPSBuZnM0X2ZyZWVfY2xvc2VkYXRhLAogfTsKIAotc3RhdGljIGJvb2wgbmZzNF9zdGF0ZV9oYXNfb3BlbmVyKHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSkKLXsKLQkvKiBmaXJzdCBjaGVjayBleGlzdGluZyBvcGVuZXJzICovCi0JaWYgKHRlc3RfYml0KE5GU19PX1JET05MWV9TVEFURSwgJnN0YXRlLT5mbGFncykgIT0gMCAmJgotCSAgICBzdGF0ZS0+bl9yZG9ubHkgIT0gMCkKLQkJcmV0dXJuIHRydWU7Ci0KLQlpZiAodGVzdF9iaXQoTkZTX09fV1JPTkxZX1NUQVRFLCAmc3RhdGUtPmZsYWdzKSAhPSAwICYmCi0JICAgIHN0YXRlLT5uX3dyb25seSAhPSAwKQotCQlyZXR1cm4gdHJ1ZTsKLQotCWlmICh0ZXN0X2JpdChORlNfT19SRFdSX1NUQVRFLCAmc3RhdGUtPmZsYWdzKSAhPSAwICYmCi0JICAgIHN0YXRlLT5uX3Jkd3IgIT0gMCkKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBib29sIG5mczRfcm9jKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Jc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKLQlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4OwotCXN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZTsKLQotCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShjdHgsICZuZnNpLT5vcGVuX2ZpbGVzLCBsaXN0KSB7Ci0JCXN0YXRlID0gY3R4LT5zdGF0ZTsKLQkJaWYgKHN0YXRlID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJaWYgKG5mczRfc3RhdGVfaGFzX29wZW5lcihzdGF0ZSkpIHsKLQkJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQkJCXJldHVybiBmYWxzZTsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0KLQlpZiAobmZzNF9jaGVja19kZWxlZ2F0aW9uKGlub2RlLCBGTU9ERV9SRUFEKSkKKwlpZiAoIW5mc19oYXZlX2xheW91dChpbm9kZSkpCiAJCXJldHVybiBmYWxzZTsKLQogCXJldHVybiBwbmZzX3JvYyhpbm9kZSk7CiB9CiAKQEAgLTI3MzEsNiArMjc2OCw3IEBACiBpbnQgbmZzNF9kb19jbG9zZShzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsIGdmcF90IGdmcF9tYXNrLCBpbnQgd2FpdCkKIHsKIAlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NFUlZFUihzdGF0ZS0+aW5vZGUpOworCXN0cnVjdCBuZnNfc2VxaWQgKigqYWxsb2Nfc2VxaWQpKHN0cnVjdCBuZnNfc2VxaWRfY291bnRlciAqLCBnZnBfdCk7CiAJc3RydWN0IG5mczRfY2xvc2VkYXRhICpjYWxsZGF0YTsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqc3AgPSBzdGF0ZS0+b3duZXI7CiAJc3RydWN0IHJwY190YXNrICp0YXNrOwpAQCAtMjc1NywxMCArMjc5NSwxMCBAQAogCWNhbGxkYXRhLT5pbm9kZSA9IHN0YXRlLT5pbm9kZTsKIAljYWxsZGF0YS0+c3RhdGUgPSBzdGF0ZTsKIAljYWxsZGF0YS0+YXJnLmZoID0gTkZTX0ZIKHN0YXRlLT5pbm9kZSk7Ci0JY2FsbGRhdGEtPmFyZy5zdGF0ZWlkID0gJnN0YXRlLT5vcGVuX3N0YXRlaWQ7CiAJLyogU2VyaWFsaXphdGlvbiBmb3IgdGhlIHNlcXVlbmNlIGlkICovCi0JY2FsbGRhdGEtPmFyZy5zZXFpZCA9IG5mc19hbGxvY19zZXFpZCgmc3RhdGUtPm93bmVyLT5zb19zZXFpZCwgZ2ZwX21hc2spOwotCWlmIChjYWxsZGF0YS0+YXJnLnNlcWlkID09IE5VTEwpCisJYWxsb2Nfc2VxaWQgPSBzZXJ2ZXItPm5mc19jbGllbnQtPmNsX212b3BzLT5hbGxvY19zZXFpZDsKKwljYWxsZGF0YS0+YXJnLnNlcWlkID0gYWxsb2Nfc2VxaWQoJnN0YXRlLT5vd25lci0+c29fc2VxaWQsIGdmcF9tYXNrKTsKKwlpZiAoSVNfRVJSKGNhbGxkYXRhLT5hcmcuc2VxaWQpKQogCQlnb3RvIG91dF9mcmVlX2NhbGxkYXRhOwogCWNhbGxkYXRhLT5hcmcuZm1vZGUgPSAwOwogCWNhbGxkYXRhLT5hcmcuYml0bWFzayA9IHNlcnZlci0+Y2FjaGVfY29uc2lzdGVuY3lfYml0bWFzazsKQEAgLTUxMzcsOSArNTE3NSwxMyBAQAogc3RhdGljIHZvaWQgbmZzNF9kZWxlZ3JldHVybl9yZWxlYXNlKHZvaWQgKmNhbGxkYXRhKQogewogCXN0cnVjdCBuZnM0X2RlbGVncmV0dXJuZGF0YSAqZGF0YSA9IGNhbGxkYXRhOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkYXRhLT5pbm9kZTsKIAotCWlmIChkYXRhLT5yb2MpCi0JCXBuZnNfcm9jX3JlbGVhc2UoZGF0YS0+aW5vZGUpOworCWlmIChpbm9kZSkgeworCQlpZiAoZGF0YS0+cm9jKQorCQkJcG5mc19yb2NfcmVsZWFzZShpbm9kZSk7CisJCW5mc19pcHV0X2FuZF9kZWFjdGl2ZShpbm9kZSk7CisJfQogCWtmcmVlKGNhbGxkYXRhKTsKIH0KIApAQCAtNTE5Niw5ICs1MjM4LDkgQEAKIAluZnNfZmF0dHJfaW5pdChkYXRhLT5yZXMuZmF0dHIpOwogCWRhdGEtPnRpbWVzdGFtcCA9IGppZmZpZXM7CiAJZGF0YS0+cnBjX3N0YXR1cyA9IDA7Ci0JZGF0YS0+aW5vZGUgPSBpbm9kZTsKLQlkYXRhLT5yb2MgPSBsaXN0X2VtcHR5KCZORlNfSShpbm9kZSktPm9wZW5fZmlsZXMpID8KLQkJICAgIHBuZnNfcm9jKGlub2RlKSA6IGZhbHNlOworCWRhdGEtPmlub2RlID0gbmZzX2lncmFiX2FuZF9hY3RpdmUoaW5vZGUpOworCWlmIChkYXRhLT5pbm9kZSkKKwkJZGF0YS0+cm9jID0gbmZzNF9yb2MoaW5vZGUpOwogCiAJdGFza19zZXR1cF9kYXRhLmNhbGxiYWNrX2RhdGEgPSBkYXRhOwogCW1zZy5ycGNfYXJncCA9ICZkYXRhLT5hcmdzOwpAQCAtNTM1Myw3ICs1Mzk1LDYgQEAKIAlwLT5hcmcuZmwgPSAmcC0+Zmw7CiAJcC0+YXJnLnNlcWlkID0gc2VxaWQ7CiAJcC0+cmVzLnNlcWlkID0gc2VxaWQ7Ci0JcC0+YXJnLnN0YXRlaWQgPSAmbHNwLT5sc19zdGF0ZWlkOwogCXAtPmxzcCA9IGxzcDsKIAlhdG9taWNfaW5jKCZsc3AtPmxzX2NvdW50KTsKIAkvKiBFbnN1cmUgd2UgZG9uJ3QgY2xvc2UgZmlsZSB1bnRpbCB3ZSdyZSBkb25lIGZyZWVpbmcgbG9ja3MhICovCkBAIC01MzgwLDE0ICs1NDIxLDE4IEBACiAJCXJldHVybjsKIAlzd2l0Y2ggKHRhc2stPnRrX3N0YXR1cykgewogCQljYXNlIDA6Ci0JCQluZnM0X3N0YXRlaWRfY29weSgmY2FsbGRhdGEtPmxzcC0+bHNfc3RhdGVpZCwKLQkJCQkJJmNhbGxkYXRhLT5yZXMuc3RhdGVpZCk7CiAJCQlyZW5ld19sZWFzZShjYWxsZGF0YS0+c2VydmVyLCBjYWxsZGF0YS0+dGltZXN0YW1wKTsKLQkJCWJyZWFrOworCQkJZG9fdmZzX2xvY2soY2FsbGRhdGEtPmZsLmZsX2ZpbGUsICZjYWxsZGF0YS0+ZmwpOworCQkJaWYgKG5mczRfdXBkYXRlX2xvY2tfc3RhdGVpZChjYWxsZGF0YS0+bHNwLAorCQkJCQkmY2FsbGRhdGEtPnJlcy5zdGF0ZWlkKSkKKwkJCQlicmVhazsKIAkJY2FzZSAtTkZTNEVSUl9CQURfU1RBVEVJRDoKIAkJY2FzZSAtTkZTNEVSUl9PTERfU1RBVEVJRDoKIAkJY2FzZSAtTkZTNEVSUl9TVEFMRV9TVEFURUlEOgogCQljYXNlIC1ORlM0RVJSX0VYUElSRUQ6CisJCQlpZiAoIW5mczRfc3RhdGVpZF9tYXRjaCgmY2FsbGRhdGEtPmFyZy5zdGF0ZWlkLAorCQkJCQkJJmNhbGxkYXRhLT5sc3AtPmxzX3N0YXRlaWQpKQorCQkJCXJwY19yZXN0YXJ0X2NhbGxfcHJlcGFyZSh0YXNrKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJaWYgKG5mczRfYXN5bmNfaGFuZGxlX2Vycm9yKHRhc2ssIGNhbGxkYXRhLT5zZXJ2ZXIsCkBAIC01NDAzLDYgKzU0NDgsNyBAQAogCiAJaWYgKG5mc193YWl0X29uX3NlcXVlbmNlKGNhbGxkYXRhLT5hcmcuc2VxaWQsIHRhc2spICE9IDApCiAJCWdvdG8gb3V0X3dhaXQ7CisJbmZzNF9zdGF0ZWlkX2NvcHkoJmNhbGxkYXRhLT5hcmcuc3RhdGVpZCwgJmNhbGxkYXRhLT5sc3AtPmxzX3N0YXRlaWQpOwogCWlmICh0ZXN0X2JpdChORlNfTE9DS19JTklUSUFMSVpFRCwgJmNhbGxkYXRhLT5sc3AtPmxzX2ZsYWdzKSA9PSAwKSB7CiAJCS8qIE5vdGU6IGV4aXQgX3dpdGhvdXRfIHJ1bm5pbmcgbmZzNF9sb2NrdV9kb25lICovCiAJCWdvdG8gb3V0X25vX2FjdGlvbjsKQEAgLTU0NzMsNiArNTUxOSw3IEBACiAJc3RydWN0IG5mc19zZXFpZCAqc2VxaWQ7CiAJc3RydWN0IG5mczRfbG9ja19zdGF0ZSAqbHNwOwogCXN0cnVjdCBycGNfdGFzayAqdGFzazsKKwlzdHJ1Y3QgbmZzX3NlcWlkICooKmFsbG9jX3NlcWlkKShzdHJ1Y3QgbmZzX3NlcWlkX2NvdW50ZXIgKiwgZ2ZwX3QpOwogCWludCBzdGF0dXMgPSAwOwogCXVuc2lnbmVkIGNoYXIgZmxfZmxhZ3MgPSByZXF1ZXN0LT5mbF9mbGFnczsKIApAQCAtNTQ5Niw5ICs1NTQzLDEwIEBACiAJbHNwID0gcmVxdWVzdC0+ZmxfdS5uZnM0X2ZsLm93bmVyOwogCWlmICh0ZXN0X2JpdChORlNfTE9DS19JTklUSUFMSVpFRCwgJmxzcC0+bHNfZmxhZ3MpID09IDApCiAJCWdvdG8gb3V0OwotCXNlcWlkID0gbmZzX2FsbG9jX3NlcWlkKCZsc3AtPmxzX3NlcWlkLCBHRlBfS0VSTkVMKTsKKwlhbGxvY19zZXFpZCA9IE5GU19TRVJWRVIoaW5vZGUpLT5uZnNfY2xpZW50LT5jbF9tdm9wcy0+YWxsb2Nfc2VxaWQ7CisJc2VxaWQgPSBhbGxvY19zZXFpZCgmbHNwLT5sc19zZXFpZCwgR0ZQX0tFUk5FTCk7CiAJc3RhdHVzID0gLUVOT01FTTsKLQlpZiAoc2VxaWQgPT0gTlVMTCkKKwlpZiAoSVNfRVJSKHNlcWlkKSkKIAkJZ290byBvdXQ7CiAJdGFzayA9IG5mczRfZG9fdW5sY2socmVxdWVzdCwgbmZzX2ZpbGVfb3Blbl9jb250ZXh0KHJlcXVlc3QtPmZsX2ZpbGUpLCBsc3AsIHNlcWlkKTsKIAlzdGF0dXMgPSBQVFJfRVJSKHRhc2spOwpAQCAtNTUzMSw2ICs1NTc5LDcgQEAKIAlzdHJ1Y3QgbmZzNF9sb2NrZGF0YSAqcDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbHNwLT5sc19zdGF0ZS0+aW5vZGU7CiAJc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IE5GU19TRVJWRVIoaW5vZGUpOworCXN0cnVjdCBuZnNfc2VxaWQgKigqYWxsb2Nfc2VxaWQpKHN0cnVjdCBuZnNfc2VxaWRfY291bnRlciAqLCBnZnBfdCk7CiAKIAlwID0ga3phbGxvYyhzaXplb2YoKnApLCBnZnBfbWFzayk7CiAJaWYgKHAgPT0gTlVMTCkKQEAgLTU1MzksMTIgKzU1ODgsMTIgQEAKIAlwLT5hcmcuZmggPSBORlNfRkgoaW5vZGUpOwogCXAtPmFyZy5mbCA9ICZwLT5mbDsKIAlwLT5hcmcub3Blbl9zZXFpZCA9IG5mc19hbGxvY19zZXFpZCgmbHNwLT5sc19zdGF0ZS0+b3duZXItPnNvX3NlcWlkLCBnZnBfbWFzayk7Ci0JaWYgKHAtPmFyZy5vcGVuX3NlcWlkID09IE5VTEwpCisJaWYgKElTX0VSUihwLT5hcmcub3Blbl9zZXFpZCkpCiAJCWdvdG8gb3V0X2ZyZWU7Ci0JcC0+YXJnLmxvY2tfc2VxaWQgPSBuZnNfYWxsb2Nfc2VxaWQoJmxzcC0+bHNfc2VxaWQsIGdmcF9tYXNrKTsKLQlpZiAocC0+YXJnLmxvY2tfc2VxaWQgPT0gTlVMTCkKKwlhbGxvY19zZXFpZCA9IHNlcnZlci0+bmZzX2NsaWVudC0+Y2xfbXZvcHMtPmFsbG9jX3NlcWlkOworCXAtPmFyZy5sb2NrX3NlcWlkID0gYWxsb2Nfc2VxaWQoJmxzcC0+bHNfc2VxaWQsIGdmcF9tYXNrKTsKKwlpZiAoSVNfRVJSKHAtPmFyZy5sb2NrX3NlcWlkKSkKIAkJZ290byBvdXRfZnJlZV9zZXFpZDsKLQlwLT5hcmcubG9ja19zdGF0ZWlkID0gJmxzcC0+bHNfc3RhdGVpZDsKIAlwLT5hcmcubG9ja19vd25lci5jbGllbnRpZCA9IHNlcnZlci0+bmZzX2NsaWVudC0+Y2xfY2xpZW50aWQ7CiAJcC0+YXJnLmxvY2tfb3duZXIuaWQgPSBsc3AtPmxzX3NlcWlkLm93bmVyX2lkOwogCXAtPmFyZy5sb2NrX293bmVyLnNfZGV2ID0gc2VydmVyLT5zX2RldjsKQEAgLTU1NzEsMTUgKzU2MjAsMTkgQEAKIAlpZiAobmZzX3dhaXRfb25fc2VxdWVuY2UoZGF0YS0+YXJnLmxvY2tfc2VxaWQsIHRhc2spICE9IDApCiAJCWdvdG8gb3V0X3dhaXQ7CiAJLyogRG8gd2UgbmVlZCB0byBkbyBhbiBvcGVuX3RvX2xvY2tfb3duZXI/ICovCi0JaWYgKCEoZGF0YS0+YXJnLmxvY2tfc2VxaWQtPnNlcXVlbmNlLT5mbGFncyAmIE5GU19TRVFJRF9DT05GSVJNRUQpKSB7CisJaWYgKCF0ZXN0X2JpdChORlNfTE9DS19JTklUSUFMSVpFRCwgJmRhdGEtPmxzcC0+bHNfZmxhZ3MpKSB7CiAJCWlmIChuZnNfd2FpdF9vbl9zZXF1ZW5jZShkYXRhLT5hcmcub3Blbl9zZXFpZCwgdGFzaykgIT0gMCkgewogCQkJZ290byBvdXRfcmVsZWFzZV9sb2NrX3NlcWlkOwogCQl9Ci0JCWRhdGEtPmFyZy5vcGVuX3N0YXRlaWQgPSAmc3RhdGUtPm9wZW5fc3RhdGVpZDsKKwkJbmZzNF9zdGF0ZWlkX2NvcHkoJmRhdGEtPmFyZy5vcGVuX3N0YXRlaWQsCisJCQkJJnN0YXRlLT5vcGVuX3N0YXRlaWQpOwogCQlkYXRhLT5hcmcubmV3X2xvY2tfb3duZXIgPSAxOwogCQlkYXRhLT5yZXMub3Blbl9zZXFpZCA9IGRhdGEtPmFyZy5vcGVuX3NlcWlkOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCWRhdGEtPmFyZy5uZXdfbG9ja19vd25lciA9IDA7CisJCW5mczRfc3RhdGVpZF9jb3B5KCZkYXRhLT5hcmcubG9ja19zdGF0ZWlkLAorCQkJCSZkYXRhLT5sc3AtPmxzX3N0YXRlaWQpOworCX0KIAlpZiAoIW5mczRfdmFsaWRfb3Blbl9zdGF0ZWlkKHN0YXRlKSkgewogCQlkYXRhLT5ycGNfc3RhdHVzID0gLUVCQURGOwogCQl0YXNrLT50a19hY3Rpb24gPSBOVUxMOwpAQCAtNTYwMyw2ICs1NjU2LDcgQEAKIHN0YXRpYyB2b2lkIG5mczRfbG9ja19kb25lKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqY2FsbGRhdGEpCiB7CiAJc3RydWN0IG5mczRfbG9ja2RhdGEgKmRhdGEgPSBjYWxsZGF0YTsKKwlzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICpsc3AgPSBkYXRhLT5sc3A7CiAKIAlkcHJpbnRrKCIlczogYmVnaW4hXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTU2MTAsMTggKzU2NjQsMzYgQEAKIAkJcmV0dXJuOwogCiAJZGF0YS0+cnBjX3N0YXR1cyA9IHRhc2stPnRrX3N0YXR1czsKLQlpZiAoZGF0YS0+YXJnLm5ld19sb2NrX293bmVyICE9IDApIHsKLQkJaWYgKGRhdGEtPnJwY19zdGF0dXMgPT0gMCkKLQkJCW5mc19jb25maXJtX3NlcWlkKCZkYXRhLT5sc3AtPmxzX3NlcWlkLCAwKTsKLQkJZWxzZQotCQkJZ290byBvdXQ7CisJc3dpdGNoICh0YXNrLT50a19zdGF0dXMpIHsKKwljYXNlIDA6CisJCXJlbmV3X2xlYXNlKE5GU19TRVJWRVIoZGF0YS0+Y3R4LT5kZW50cnktPmRfaW5vZGUpLAorCQkJCWRhdGEtPnRpbWVzdGFtcCk7CisJCWlmIChkYXRhLT5hcmcubmV3X2xvY2spIHsKKwkJCWRhdGEtPmZsLmZsX2ZsYWdzICY9IH4oRkxfU0xFRVAgfCBGTF9BQ0NFU1MpOworCQkJaWYgKGRvX3Zmc19sb2NrKGRhdGEtPmZsLmZsX2ZpbGUsICZkYXRhLT5mbCkgPCAwKSB7CisJCQkJcnBjX3Jlc3RhcnRfY2FsbF9wcmVwYXJlKHRhc2spOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChkYXRhLT5hcmcubmV3X2xvY2tfb3duZXIgIT0gMCkgeworCQkJbmZzX2NvbmZpcm1fc2VxaWQoJmxzcC0+bHNfc2VxaWQsIDApOworCQkJbmZzNF9zdGF0ZWlkX2NvcHkoJmxzcC0+bHNfc3RhdGVpZCwgJmRhdGEtPnJlcy5zdGF0ZWlkKTsKKwkJCXNldF9iaXQoTkZTX0xPQ0tfSU5JVElBTElaRUQsICZsc3AtPmxzX2ZsYWdzKTsKKwkJfSBlbHNlIGlmICghbmZzNF91cGRhdGVfbG9ja19zdGF0ZWlkKGxzcCwgJmRhdGEtPnJlcy5zdGF0ZWlkKSkKKwkJCXJwY19yZXN0YXJ0X2NhbGxfcHJlcGFyZSh0YXNrKTsKKwkJYnJlYWs7CisJY2FzZSAtTkZTNEVSUl9CQURfU1RBVEVJRDoKKwljYXNlIC1ORlM0RVJSX09MRF9TVEFURUlEOgorCWNhc2UgLU5GUzRFUlJfU1RBTEVfU1RBVEVJRDoKKwljYXNlIC1ORlM0RVJSX0VYUElSRUQ6CisJCWlmIChkYXRhLT5hcmcubmV3X2xvY2tfb3duZXIgIT0gMCkgeworCQkJaWYgKCFuZnM0X3N0YXRlaWRfbWF0Y2goJmRhdGEtPmFyZy5vcGVuX3N0YXRlaWQsCisJCQkJCQkmbHNwLT5sc19zdGF0ZS0+b3Blbl9zdGF0ZWlkKSkKKwkJCQlycGNfcmVzdGFydF9jYWxsX3ByZXBhcmUodGFzayk7CisJCX0gZWxzZSBpZiAoIW5mczRfc3RhdGVpZF9tYXRjaCgmZGF0YS0+YXJnLmxvY2tfc3RhdGVpZCwKKwkJCQkJCSZsc3AtPmxzX3N0YXRlaWQpKQorCQkJCXJwY19yZXN0YXJ0X2NhbGxfcHJlcGFyZSh0YXNrKTsKIAl9Ci0JaWYgKGRhdGEtPnJwY19zdGF0dXMgPT0gMCkgewotCQluZnM0X3N0YXRlaWRfY29weSgmZGF0YS0+bHNwLT5sc19zdGF0ZWlkLCAmZGF0YS0+cmVzLnN0YXRlaWQpOwotCQlzZXRfYml0KE5GU19MT0NLX0lOSVRJQUxJWkVELCAmZGF0YS0+bHNwLT5sc19mbGFncyk7Ci0JCXJlbmV3X2xlYXNlKE5GU19TRVJWRVIoZGF0YS0+Y3R4LT5kZW50cnktPmRfaW5vZGUpLCBkYXRhLT50aW1lc3RhbXApOwotCX0KLW91dDoKIAlkcHJpbnRrKCIlczogZG9uZSwgcmV0ID0gJWQhXG4iLCBfX2Z1bmNfXywgZGF0YS0+cnBjX3N0YXR1cyk7CiB9CiAKQEAgLTU3MDIsNyArNTc3NCw4IEBACiAJCWlmIChyZWNvdmVyeV90eXBlID09IE5GU19MT0NLX1JFQ0xBSU0pCiAJCQlkYXRhLT5hcmcucmVjbGFpbSA9IE5GU19MT0NLX1JFQ0xBSU07CiAJCW5mczRfc2V0X3NlcXVlbmNlX3ByaXZpbGVnZWQoJmRhdGEtPmFyZy5zZXFfYXJncyk7Ci0JfQorCX0gZWxzZQorCQlkYXRhLT5hcmcubmV3X2xvY2sgPSAxOwogCXRhc2sgPSBycGNfcnVuX3Rhc2soJnRhc2tfc2V0dXBfZGF0YSk7CiAJaWYgKElTX0VSUih0YXNrKSkKIAkJcmV0dXJuIFBUUl9FUlIodGFzayk7CkBAIC01ODI2LDEwICs1ODk5LDggQEAKIAogc3RhdGljIGludCBfbmZzNF9wcm9jX3NldGxrKHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqcmVxdWVzdCkKIHsKLQlzdHJ1Y3QgbmZzNF9zdGF0ZV9vd25lciAqc3AgPSBzdGF0ZS0+b3duZXI7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKHN0YXRlLT5pbm9kZSk7CiAJdW5zaWduZWQgY2hhciBmbF9mbGFncyA9IHJlcXVlc3QtPmZsX2ZsYWdzOwotCXVuc2lnbmVkIGludCBzZXE7CiAJaW50IHN0YXR1cyA9IC1FTk9MQ0s7CiAKIAlpZiAoKGZsX2ZsYWdzICYgRkxfUE9TSVgpICYmCkBAIC01ODQ5LDI1ICs1OTIwLDExIEBACiAJCS8qIC4uLmJ1dCBhdm9pZCByYWNlcyB3aXRoIGRlbGVnYXRpb24gcmVjYWxsLi4uICovCiAJCXJlcXVlc3QtPmZsX2ZsYWdzID0gZmxfZmxhZ3MgJiB+RkxfU0xFRVA7CiAJCXN0YXR1cyA9IGRvX3Zmc19sb2NrKHJlcXVlc3QtPmZsX2ZpbGUsIHJlcXVlc3QpOwotCQlnb3RvIG91dF91bmxvY2s7CisJCXVwX3JlYWQoJm5mc2ktPnJ3c2VtKTsKKwkJZ290byBvdXQ7CiAJfQotCXNlcSA9IHJhd19zZXFjb3VudF9iZWdpbigmc3AtPnNvX3JlY2xhaW1fc2VxY291bnQpOwogCXVwX3JlYWQoJm5mc2ktPnJ3c2VtKTsKIAlzdGF0dXMgPSBfbmZzNF9kb19zZXRsayhzdGF0ZSwgY21kLCByZXF1ZXN0LCBORlNfTE9DS19ORVcpOwotCWlmIChzdGF0dXMgIT0gMCkKLQkJZ290byBvdXQ7Ci0JZG93bl9yZWFkKCZuZnNpLT5yd3NlbSk7Ci0JaWYgKHJlYWRfc2VxY291bnRfcmV0cnkoJnNwLT5zb19yZWNsYWltX3NlcWNvdW50LCBzZXEpKSB7Ci0JCXN0YXR1cyA9IC1ORlM0RVJSX0RFTEFZOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCS8qIE5vdGU6IHdlIGFsd2F5cyB3YW50IHRvIHNsZWVwIGhlcmUhICovCi0JcmVxdWVzdC0+ZmxfZmxhZ3MgPSBmbF9mbGFncyB8IEZMX1NMRUVQOwotCWlmIChkb192ZnNfbG9jayhyZXF1ZXN0LT5mbF9maWxlLCByZXF1ZXN0KSA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIk5GUzogJXM6IFZGUyBpcyBvdXQgb2Ygc3luYyB3aXRoIGxvY2sgIgotCQkJIm1hbmFnZXIhXG4iLCBfX2Z1bmNfXyk7Ci1vdXRfdW5sb2NrOgotCXVwX3JlYWQoJm5mc2ktPnJ3c2VtKTsKIG91dDoKIAlyZXF1ZXN0LT5mbF9mbGFncyA9IGZsX2ZsYWdzOwogCXJldHVybiBzdGF0dXM7CkBAIC01OTc0LDggKzYwMzEsOCBAQAogewogCXN0cnVjdCBuZnNfcmVsZWFzZV9sb2Nrb3duZXJfZGF0YSAqZGF0YSA9IGNhbGxkYXRhOwogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBkYXRhLT5zZXJ2ZXI7Ci0JbmZzNDBfc2V0dXBfc2VxdWVuY2Uoc2VydmVyLCAmZGF0YS0+YXJncy5zZXFfYXJncywKLQkJCQkmZGF0YS0+cmVzLnNlcV9yZXMsIHRhc2spOworCW5mczQwX3NldHVwX3NlcXVlbmNlKHNlcnZlci0+bmZzX2NsaWVudC0+Y2xfc2xvdF90YmwsCisJCQkgICAgICZkYXRhLT5hcmdzLnNlcV9hcmdzLCAmZGF0YS0+cmVzLnNlcV9yZXMsIHRhc2spOwogCWRhdGEtPmFyZ3MubG9ja19vd25lci5jbGllbnRpZCA9IHNlcnZlci0+bmZzX2NsaWVudC0+Y2xfY2xpZW50aWQ7CiAJZGF0YS0+dGltZXN0YW1wID0gamlmZmllczsKIH0KQEAgLTc1MzcsNiArNzU5NCw3IEBACiAJCXJldHVybjsKIAlpZiAocG5mc19jaG9vc2VfbGF5b3V0Z2V0X3N0YXRlaWQoJmxncC0+YXJncy5zdGF0ZWlkLAogCQkJCQkgIE5GU19JKGxncC0+YXJncy5pbm9kZSktPmxheW91dCwKKwkJCQkJICAmbGdwLT5hcmdzLnJhbmdlLAogCQkJCQkgIGxncC0+YXJncy5jdHgtPnN0YXRlKSkgewogCQlycGNfZXhpdCh0YXNrLCBORlM0X09LKTsKIAl9CkBAIC03NzkyLDkgKzc4NTAsMTMgQEAKIAlzcGluX2xvY2soJmxvLT5wbGhfaW5vZGUtPmlfbG9jayk7CiAJaWYgKGxycC0+cmVzLmxyc19wcmVzZW50KQogCQlwbmZzX3NldF9sYXlvdXRfc3RhdGVpZChsbywgJmxycC0+cmVzLnN0YXRlaWQsIHRydWUpOworCXBuZnNfY2xlYXJfbGF5b3V0cmV0dXJuX3dhaXRiaXQobG8pOworCWNsZWFyX2JpdChORlNfTEFZT1VUX1JFVFVSTl9CRUZPUkVfQ0xPU0UsICZsby0+cGxoX2ZsYWdzKTsKKwlycGNfd2FrZV91cCgmTkZTX1NFUlZFUihsby0+cGxoX2lub2RlKS0+cm9jX3JwY3dhaXRxKTsKIAlsby0+cGxoX2Jsb2NrX2xnZXRzLS07CiAJc3Bpbl91bmxvY2soJmxvLT5wbGhfaW5vZGUtPmlfbG9jayk7CiAJcG5mc19wdXRfbGF5b3V0X2hkcihscnAtPmFyZ3MubGF5b3V0KTsKKwluZnNfaXB1dF9hbmRfZGVhY3RpdmUobHJwLT5pbm9kZSk7CiAJa2ZyZWUoY2FsbGRhdGEpOwogCWRwcmludGsoIjwtLSAlc1xuIiwgX19mdW5jX18pOwogfQpAQCAtNzgwNSw3ICs3ODY3LDcgQEAKIAkucnBjX3JlbGVhc2UgPSBuZnM0X2xheW91dHJldHVybl9yZWxlYXNlLAogfTsKIAotaW50IG5mczRfcHJvY19sYXlvdXRyZXR1cm4oc3RydWN0IG5mczRfbGF5b3V0cmV0dXJuICpscnApCitpbnQgbmZzNF9wcm9jX2xheW91dHJldHVybihzdHJ1Y3QgbmZzNF9sYXlvdXRyZXR1cm4gKmxycCwgYm9vbCBzeW5jKQogewogCXN0cnVjdCBycGNfdGFzayAqdGFzazsKIAlzdHJ1Y3QgcnBjX21lc3NhZ2UgbXNnID0gewpAQCAtNzgyMCwxNCArNzg4MiwyMyBAQAogCQkuY2FsbGJhY2tfb3BzID0gJm5mczRfbGF5b3V0cmV0dXJuX2NhbGxfb3BzLAogCQkuY2FsbGJhY2tfZGF0YSA9IGxycCwKIAl9OwotCWludCBzdGF0dXM7CisJaW50IHN0YXR1cyA9IDA7CiAKIAlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKKwlpZiAoIXN5bmMpIHsKKwkJbHJwLT5pbm9kZSA9IG5mc19pZ3JhYl9hbmRfYWN0aXZlKGxycC0+YXJncy5pbm9kZSk7CisJCWlmICghbHJwLT5pbm9kZSkgeworCQkJbmZzNF9sYXlvdXRyZXR1cm5fcmVsZWFzZShscnApOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJdGFza19zZXR1cF9kYXRhLmZsYWdzIHw9IFJQQ19UQVNLX0FTWU5DOworCX0KIAluZnM0X2luaXRfc2VxdWVuY2UoJmxycC0+YXJncy5zZXFfYXJncywgJmxycC0+cmVzLnNlcV9yZXMsIDEpOwogCXRhc2sgPSBycGNfcnVuX3Rhc2soJnRhc2tfc2V0dXBfZGF0YSk7CiAJaWYgKElTX0VSUih0YXNrKSkKIAkJcmV0dXJuIFBUUl9FUlIodGFzayk7Ci0Jc3RhdHVzID0gdGFzay0+dGtfc3RhdHVzOworCWlmIChzeW5jKQorCQlzdGF0dXMgPSB0YXNrLT50a19zdGF0dXM7CiAJdHJhY2VfbmZzNF9sYXlvdXRyZXR1cm4obHJwLT5hcmdzLmlub2RlLCBzdGF0dXMpOwogCWRwcmludGsoIjwtLSAlcyBzdGF0dXM9JWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwogCXJwY19wdXRfdGFzayh0YXNrKTsKQEAgLTc5MjEsNiArNzk5Miw3IEBACiAJbmZzX3Bvc3Rfb3BfdXBkYXRlX2lub2RlX2ZvcmNlX3djYyhkYXRhLT5hcmdzLmlub2RlLAogCQkJCQkgICBkYXRhLT5yZXMuZmF0dHIpOwogCXB1dF9ycGNjcmVkKGRhdGEtPmNyZWQpOworCW5mc19pcHV0X2FuZF9kZWFjdGl2ZShkYXRhLT5pbm9kZSk7CiAJa2ZyZWUoZGF0YSk7CiB9CiAKQEAgLTc5NDUsNyArODAxNyw2IEBACiAJCS5ycGNfbWVzc2FnZSA9ICZtc2csCiAJCS5jYWxsYmFja19vcHMgPSAmbmZzNF9sYXlvdXRjb21taXRfb3BzLAogCQkuY2FsbGJhY2tfZGF0YSA9IGRhdGEsCi0JCS5mbGFncyA9IFJQQ19UQVNLX0FTWU5DLAogCX07CiAJc3RydWN0IHJwY190YXNrICp0YXNrOwogCWludCBzdGF0dXMgPSAwOwpAQCAtNzk1NiwxOCArODAyNywyMSBAQAogCQlkYXRhLT5hcmdzLmxhc3RieXRld3JpdHRlbiwKIAkJZGF0YS0+YXJncy5pbm9kZS0+aV9pbm8pOwogCisJaWYgKCFzeW5jKSB7CisJCWRhdGEtPmlub2RlID0gbmZzX2lncmFiX2FuZF9hY3RpdmUoZGF0YS0+YXJncy5pbm9kZSk7CisJCWlmIChkYXRhLT5pbm9kZSA9PSBOVUxMKSB7CisJCQluZnM0X2xheW91dGNvbW1pdF9yZWxlYXNlKGRhdGEpOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJdGFza19zZXR1cF9kYXRhLmZsYWdzID0gUlBDX1RBU0tfQVNZTkM7CisJfQogCW5mczRfaW5pdF9zZXF1ZW5jZSgmZGF0YS0+YXJncy5zZXFfYXJncywgJmRhdGEtPnJlcy5zZXFfcmVzLCAxKTsKIAl0YXNrID0gcnBjX3J1bl90YXNrKCZ0YXNrX3NldHVwX2RhdGEpOwogCWlmIChJU19FUlIodGFzaykpCiAJCXJldHVybiBQVFJfRVJSKHRhc2spOwotCWlmIChzeW5jID09IGZhbHNlKQotCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBuZnM0X3dhaXRfZm9yX2NvbXBsZXRpb25fcnBjX3Rhc2sodGFzayk7Ci0JaWYgKHN0YXR1cyAhPSAwKQotCQlnb3RvIG91dDsKLQlzdGF0dXMgPSB0YXNrLT50a19zdGF0dXM7CisJaWYgKHN5bmMpCisJCXN0YXR1cyA9IHRhc2stPnRrX3N0YXR1czsKIAl0cmFjZV9uZnM0X2xheW91dGNvbW1pdChkYXRhLT5hcmdzLmlub2RlLCBzdGF0dXMpOwotb3V0OgogCWRwcmludGsoIiVzOiBzdGF0dXMgJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwogCXJwY19wdXRfdGFzayh0YXNrKTsKIAlyZXR1cm4gc3RhdHVzOwpAQCAtODM5NSw2ICs4NDY5LDcgQEAKIAkubWF0Y2hfc3RhdGVpZCA9IG5mczRfbWF0Y2hfc3RhdGVpZCwKIAkuZmluZF9yb290X3NlYyA9IG5mczRfZmluZF9yb290X3NlYywKIAkuZnJlZV9sb2NrX3N0YXRlID0gbmZzNF9yZWxlYXNlX2xvY2tvd25lciwKKwkuYWxsb2Nfc2VxaWQgPSBuZnNfYWxsb2Nfc2VxaWQsCiAJLmNhbGxfc3luY19vcHMgPSAmbmZzNDBfY2FsbF9zeW5jX29wcywKIAkucmVib290X3JlY292ZXJ5X29wcyA9ICZuZnM0MF9yZWJvb3RfcmVjb3Zlcnlfb3BzLAogCS5ub2dyYWNlX3JlY292ZXJ5X29wcyA9ICZuZnM0MF9ub2dyYWNlX3JlY292ZXJ5X29wcywKQEAgLTg0MDMsNiArODQ3OCwxMiBAQAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQorc3RhdGljIHN0cnVjdCBuZnNfc2VxaWQgKgorbmZzX2FsbG9jX25vX3NlcWlkKHN0cnVjdCBuZnNfc2VxaWRfY291bnRlciAqYXJnMSwgZ2ZwX3QgYXJnMikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBuZnM0X21pbm9yX3ZlcnNpb25fb3BzIG5mc192NF8xX21pbm9yX29wcyA9IHsKIAkubWlub3JfdmVyc2lvbiA9IDEsCiAJLmluaXRfY2FwcyA9IE5GU19DQVBfUkVBRERJUlBMVVMKQEAgLTg0MTYsNiArODQ5Nyw3IEBACiAJLm1hdGNoX3N0YXRlaWQgPSBuZnM0MV9tYXRjaF9zdGF0ZWlkLAogCS5maW5kX3Jvb3Rfc2VjID0gbmZzNDFfZmluZF9yb290X3NlYywKIAkuZnJlZV9sb2NrX3N0YXRlID0gbmZzNDFfZnJlZV9sb2NrX3N0YXRlLAorCS5hbGxvY19zZXFpZCA9IG5mc19hbGxvY19ub19zZXFpZCwKIAkuY2FsbF9zeW5jX29wcyA9ICZuZnM0MV9jYWxsX3N5bmNfb3BzLAogCS5yZWJvb3RfcmVjb3Zlcnlfb3BzID0gJm5mczQxX3JlYm9vdF9yZWNvdmVyeV9vcHMsCiAJLm5vZ3JhY2VfcmVjb3Zlcnlfb3BzID0gJm5mczQxX25vZ3JhY2VfcmVjb3Zlcnlfb3BzLApAQCAtODQ0Miw2ICs4NTI0LDcgQEAKIAkuZmluZF9yb290X3NlYyA9IG5mczQxX2ZpbmRfcm9vdF9zZWMsCiAJLmZyZWVfbG9ja19zdGF0ZSA9IG5mczQxX2ZyZWVfbG9ja19zdGF0ZSwKIAkuY2FsbF9zeW5jX29wcyA9ICZuZnM0MV9jYWxsX3N5bmNfb3BzLAorCS5hbGxvY19zZXFpZCA9IG5mc19hbGxvY19ub19zZXFpZCwKIAkucmVib290X3JlY292ZXJ5X29wcyA9ICZuZnM0MV9yZWJvb3RfcmVjb3Zlcnlfb3BzLAogCS5ub2dyYWNlX3JlY292ZXJ5X29wcyA9ICZuZnM0MV9ub2dyYWNlX3JlY292ZXJ5X29wcywKIAkuc3RhdGVfcmVuZXdhbF9vcHMgPSAmbmZzNDFfc3RhdGVfcmVuZXdhbF9vcHMsCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHN0YXRlLmMgYi9mcy9uZnMvbmZzNHN0YXRlLmMKaW5kZXggNTE5NDkzMy4uNWFkOTA4ZSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRzdGF0ZS5jCisrKyBiL2ZzL25mcy9uZnM0c3RhdGUuYwpAQCAtMTAwMywxMSArMTAwMywxMSBAQAogCXN0cnVjdCBuZnNfc2VxaWQgKm5ldzsKIAogCW5ldyA9IGttYWxsb2Moc2l6ZW9mKCpuZXcpLCBnZnBfbWFzayk7Ci0JaWYgKG5ldyAhPSBOVUxMKSB7Ci0JCW5ldy0+c2VxdWVuY2UgPSBjb3VudGVyOwotCQlJTklUX0xJU1RfSEVBRCgmbmV3LT5saXN0KTsKLQkJbmV3LT50YXNrID0gTlVMTDsKLQl9CisJaWYgKG5ldyA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwluZXctPnNlcXVlbmNlID0gY291bnRlcjsKKwlJTklUX0xJU1RfSEVBRCgmbmV3LT5saXN0KTsKKwluZXctPnRhc2sgPSBOVUxMOwogCXJldHVybiBuZXc7CiB9CiAKQEAgLTEwMTUsNyArMTAxNSw3IEBACiB7CiAJc3RydWN0IG5mc19zZXFpZF9jb3VudGVyICpzZXF1ZW5jZTsKIAotCWlmIChsaXN0X2VtcHR5KCZzZXFpZC0+bGlzdCkpCisJaWYgKHNlcWlkID09IE5VTEwgfHwgbGlzdF9lbXB0eSgmc2VxaWQtPmxpc3QpKQogCQlyZXR1cm47CiAJc2VxdWVuY2UgPSBzZXFpZC0+c2VxdWVuY2U7CiAJc3Bpbl9sb2NrKCZzZXF1ZW5jZS0+bG9jayk7CkBAIC0xMDcxLDEzICsxMDcxLDE1IEBACiAKIHZvaWQgbmZzX2luY3JlbWVudF9vcGVuX3NlcWlkKGludCBzdGF0dXMsIHN0cnVjdCBuZnNfc2VxaWQgKnNlcWlkKQogewotCXN0cnVjdCBuZnM0X3N0YXRlX293bmVyICpzcCA9IGNvbnRhaW5lcl9vZihzZXFpZC0+c2VxdWVuY2UsCi0JCQkJCXN0cnVjdCBuZnM0X3N0YXRlX293bmVyLCBzb19zZXFpZCk7Ci0Jc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciA9IHNwLT5zb19zZXJ2ZXI7CisJc3RydWN0IG5mczRfc3RhdGVfb3duZXIgKnNwOwogCisJaWYgKHNlcWlkID09IE5VTEwpCisJCXJldHVybjsKKworCXNwID0gY29udGFpbmVyX29mKHNlcWlkLT5zZXF1ZW5jZSwgc3RydWN0IG5mczRfc3RhdGVfb3duZXIsIHNvX3NlcWlkKTsKIAlpZiAoc3RhdHVzID09IC1ORlM0RVJSX0JBRF9TRVFJRCkKIAkJbmZzNF9kcm9wX3N0YXRlX293bmVyKHNwKTsKLQlpZiAoIW5mczRfaGFzX3Nlc3Npb24oc2VydmVyLT5uZnNfY2xpZW50KSkKKwlpZiAoIW5mczRfaGFzX3Nlc3Npb24oc3AtPnNvX3NlcnZlci0+bmZzX2NsaWVudCkpCiAJCW5mc19pbmNyZW1lbnRfc2VxaWQoc3RhdHVzLCBzZXFpZCk7CiB9CiAKQEAgLTEwODgsMTQgKzEwOTAsMTggQEAKICAqLwogdm9pZCBuZnNfaW5jcmVtZW50X2xvY2tfc2VxaWQoaW50IHN0YXR1cywgc3RydWN0IG5mc19zZXFpZCAqc2VxaWQpCiB7Ci0JbmZzX2luY3JlbWVudF9zZXFpZChzdGF0dXMsIHNlcWlkKTsKKwlpZiAoc2VxaWQgIT0gTlVMTCkKKwkJbmZzX2luY3JlbWVudF9zZXFpZChzdGF0dXMsIHNlcWlkKTsKIH0KIAogaW50IG5mc193YWl0X29uX3NlcXVlbmNlKHN0cnVjdCBuZnNfc2VxaWQgKnNlcWlkLCBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCiB7Ci0Jc3RydWN0IG5mc19zZXFpZF9jb3VudGVyICpzZXF1ZW5jZSA9IHNlcWlkLT5zZXF1ZW5jZTsKKwlzdHJ1Y3QgbmZzX3NlcWlkX2NvdW50ZXIgKnNlcXVlbmNlOwogCWludCBzdGF0dXMgPSAwOwogCisJaWYgKHNlcWlkID09IE5VTEwpCisJCWdvdG8gb3V0OworCXNlcXVlbmNlID0gc2VxaWQtPnNlcXVlbmNlOwogCXNwaW5fbG9jaygmc2VxdWVuY2UtPmxvY2spOwogCXNlcWlkLT50YXNrID0gdGFzazsKIAlpZiAobGlzdF9lbXB0eSgmc2VxaWQtPmxpc3QpKQpAQCAtMTEwNiw2ICsxMTEyLDcgQEAKIAlzdGF0dXMgPSAtRUFHQUlOOwogdW5sb2NrOgogCXNwaW5fdW5sb2NrKCZzZXF1ZW5jZS0+bG9jayk7CitvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTM2Niw0OSArMTM3Myw1NSBAQAogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CiAJc3RydWN0IGZpbGVfbG9jayAqZmw7CiAJaW50IHN0YXR1cyA9IDA7CisJc3RydWN0IGZpbGVfbG9ja19jb250ZXh0ICpmbGN0eCA9IGlub2RlLT5pX2ZsY3R4OworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAKLQlpZiAoaW5vZGUtPmlfZmxvY2sgPT0gTlVMTCkKKwlpZiAoZmxjdHggPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKKwlsaXN0ID0gJmZsY3R4LT5mbGNfcG9zaXg7CisKIAkvKiBHdWFyZCBhZ2FpbnN0IGRlbGVnYXRpb24gcmV0dXJucyBhbmQgbmV3IGxvY2svdW5sb2NrIGNhbGxzICovCiAJZG93bl93cml0ZSgmbmZzaS0+cndzZW0pOwotCS8qIFByb3RlY3QgaW5vZGUtPmlfZmxvY2sgdXNpbmcgdGhlIEJLTCAqLwotCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JZm9yIChmbCA9IGlub2RlLT5pX2Zsb2NrOyBmbCAhPSBOVUxMOyBmbCA9IGZsLT5mbF9uZXh0KSB7Ci0JCWlmICghKGZsLT5mbF9mbGFncyAmIChGTF9QT1NJWHxGTF9GTE9DSykpKQotCQkJY29udGludWU7CisJc3Bpbl9sb2NrKCZmbGN0eC0+ZmxjX2xvY2spOworcmVzdGFydDoKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGZsLCBsaXN0LCBmbF9saXN0KSB7CiAJCWlmIChuZnNfZmlsZV9vcGVuX2NvbnRleHQoZmwtPmZsX2ZpbGUpLT5zdGF0ZSAhPSBzdGF0ZSkKIAkJCWNvbnRpbnVlOwotCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZmbGN0eC0+ZmxjX2xvY2spOwogCQlzdGF0dXMgPSBvcHMtPnJlY292ZXJfbG9jayhzdGF0ZSwgZmwpOwogCQlzd2l0Y2ggKHN0YXR1cykgewotCQkJY2FzZSAwOgotCQkJCWJyZWFrOwotCQkJY2FzZSAtRVNUQUxFOgotCQkJY2FzZSAtTkZTNEVSUl9BRE1JTl9SRVZPS0VEOgotCQkJY2FzZSAtTkZTNEVSUl9TVEFMRV9TVEFURUlEOgotCQkJY2FzZSAtTkZTNEVSUl9CQURfU1RBVEVJRDoKLQkJCWNhc2UgLU5GUzRFUlJfRVhQSVJFRDoKLQkJCWNhc2UgLU5GUzRFUlJfTk9fR1JBQ0U6Ci0JCQljYXNlIC1ORlM0RVJSX1NUQUxFX0NMSUVOVElEOgotCQkJY2FzZSAtTkZTNEVSUl9CQURTRVNTSU9OOgotCQkJY2FzZSAtTkZTNEVSUl9CQURTTE9UOgotCQkJY2FzZSAtTkZTNEVSUl9CQURfSElHSF9TTE9UOgotCQkJY2FzZSAtTkZTNEVSUl9DT05OX05PVF9CT1VORF9UT19TRVNTSU9OOgotCQkJCWdvdG8gb3V0OwotCQkJZGVmYXVsdDoKLQkJCQlwcmludGsoS0VSTl9FUlIgIk5GUzogJXM6IHVuaGFuZGxlZCBlcnJvciAlZFxuIiwKLQkJCQkJIF9fZnVuY19fLCBzdGF0dXMpOwotCQkJY2FzZSAtRU5PTUVNOgotCQkJY2FzZSAtTkZTNEVSUl9ERU5JRUQ6Ci0JCQljYXNlIC1ORlM0RVJSX1JFQ0xBSU1fQkFEOgotCQkJY2FzZSAtTkZTNEVSUl9SRUNMQUlNX0NPTkZMSUNUOgotCQkJCS8qIGtpbGxfcHJvYyhmbC0+ZmxfcGlkLCBTSUdMT1NULCAxKTsgKi8KLQkJCQlzdGF0dXMgPSAwOworCQljYXNlIDA6CisJCQlicmVhazsKKwkJY2FzZSAtRVNUQUxFOgorCQljYXNlIC1ORlM0RVJSX0FETUlOX1JFVk9LRUQ6CisJCWNhc2UgLU5GUzRFUlJfU1RBTEVfU1RBVEVJRDoKKwkJY2FzZSAtTkZTNEVSUl9CQURfU1RBVEVJRDoKKwkJY2FzZSAtTkZTNEVSUl9FWFBJUkVEOgorCQljYXNlIC1ORlM0RVJSX05PX0dSQUNFOgorCQljYXNlIC1ORlM0RVJSX1NUQUxFX0NMSUVOVElEOgorCQljYXNlIC1ORlM0RVJSX0JBRFNFU1NJT046CisJCWNhc2UgLU5GUzRFUlJfQkFEU0xPVDoKKwkJY2FzZSAtTkZTNEVSUl9CQURfSElHSF9TTE9UOgorCQljYXNlIC1ORlM0RVJSX0NPTk5fTk9UX0JPVU5EX1RPX1NFU1NJT046CisJCQlnb3RvIG91dDsKKwkJZGVmYXVsdDoKKwkJCXByX2VycigiTkZTOiAlczogdW5oYW5kbGVkIGVycm9yICVkXG4iLAorCQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKKwkJY2FzZSAtRU5PTUVNOgorCQljYXNlIC1ORlM0RVJSX0RFTklFRDoKKwkJY2FzZSAtTkZTNEVSUl9SRUNMQUlNX0JBRDoKKwkJY2FzZSAtTkZTNEVSUl9SRUNMQUlNX0NPTkZMSUNUOgorCQkJLyoga2lsbF9wcm9jKGZsLT5mbF9waWQsIFNJR0xPU1QsIDEpOyAqLworCQkJc3RhdHVzID0gMDsKIAkJfQotCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCQlzcGluX2xvY2soJmZsY3R4LT5mbGNfbG9jayk7CiAJfQotCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlpZiAobGlzdCA9PSAmZmxjdHgtPmZsY19wb3NpeCkgeworCQlsaXN0ID0gJmZsY3R4LT5mbGNfZmxvY2s7CisJCWdvdG8gcmVzdGFydDsKKwl9CisJc3Bpbl91bmxvY2soJmZsY3R4LT5mbGNfbG9jayk7CiBvdXQ6CiAJdXBfd3JpdGUoJm5mc2ktPnJ3c2VtKTsKIAlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRzdXBlci5jIGIvZnMvbmZzL25mczRzdXBlci5jCmluZGV4IDZmMzQwZjAuLjQ4Y2VhM2MgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0c3VwZXIuYworKysgYi9mcy9uZnMvbmZzNHN1cGVyLmMKQEAgLTM0Niw2ICszNDYsOSBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9uZnNfdjQodm9pZCkKIHsKKwkvKiBOb3QgY2FsbGVkIGluIHRoZSBfaW5pdCgpLCBjb25kaXRpb25hbGx5IGxvYWRlZCAqLworCW5mczRfcG5mc192M19kc19jb25uZWN0X3VubG9hZCgpOworCiAJdW5yZWdpc3Rlcl9uZnNfdmVyc2lvbigmbmZzX3Y0KTsKIAluZnM0X3VucmVnaXN0ZXJfc3lzY3RsKCk7CiAJbmZzX2lkbWFwX3F1aXQoKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IGNiNDM3NmIuLmUyM2EwYTYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtOTQ2LDcgKzk0NiwxMCBAQAogc3RhdGljIHZvaWQgZW5jb2RlX25mczRfc2VxaWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKIAkJY29uc3Qgc3RydWN0IG5mc19zZXFpZCAqc2VxaWQpCiB7Ci0JZW5jb2RlX3VpbnQzMih4ZHIsIHNlcWlkLT5zZXF1ZW5jZS0+Y291bnRlcik7CisJaWYgKHNlcWlkICE9IE5VTEwpCisJCWVuY29kZV91aW50MzIoeGRyLCBzZXFpZC0+c2VxdWVuY2UtPmNvdW50ZXIpOworCWVsc2UKKwkJZW5jb2RlX3VpbnQzMih4ZHIsIDApOwogfQogCiBzdGF0aWMgdm9pZCBlbmNvZGVfY29tcG91bmRfaGRyKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCkBAIC0xMTI1LDcgKzExMjgsNyBAQAogewogCWVuY29kZV9vcF9oZHIoeGRyLCBPUF9DTE9TRSwgZGVjb2RlX2Nsb3NlX21heHN6LCBoZHIpOwogCWVuY29kZV9uZnM0X3NlcWlkKHhkciwgYXJnLT5zZXFpZCk7Ci0JZW5jb2RlX25mczRfc3RhdGVpZCh4ZHIsIGFyZy0+c3RhdGVpZCk7CisJZW5jb2RlX25mczRfc3RhdGVpZCh4ZHIsICZhcmctPnN0YXRlaWQpOwogfQogCiBzdGF0aWMgdm9pZCBlbmNvZGVfY29tbWl0KHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGNvbnN0IHN0cnVjdCBuZnNfY29tbWl0YXJncyAqYXJncywgc3RydWN0IGNvbXBvdW5kX2hkciAqaGRyKQpAQCAtMTMwMSwxMiArMTMwNCwxMiBAQAogCSpwID0gY3B1X3RvX2JlMzIoYXJncy0+bmV3X2xvY2tfb3duZXIpOwogCWlmIChhcmdzLT5uZXdfbG9ja19vd25lcil7CiAJCWVuY29kZV9uZnM0X3NlcWlkKHhkciwgYXJncy0+b3Blbl9zZXFpZCk7Ci0JCWVuY29kZV9uZnM0X3N0YXRlaWQoeGRyLCBhcmdzLT5vcGVuX3N0YXRlaWQpOworCQllbmNvZGVfbmZzNF9zdGF0ZWlkKHhkciwgJmFyZ3MtPm9wZW5fc3RhdGVpZCk7CiAJCWVuY29kZV9uZnM0X3NlcWlkKHhkciwgYXJncy0+bG9ja19zZXFpZCk7CiAJCWVuY29kZV9sb2Nrb3duZXIoeGRyLCAmYXJncy0+bG9ja19vd25lcik7CiAJfQogCWVsc2UgewotCQllbmNvZGVfbmZzNF9zdGF0ZWlkKHhkciwgYXJncy0+bG9ja19zdGF0ZWlkKTsKKwkJZW5jb2RlX25mczRfc3RhdGVpZCh4ZHIsICZhcmdzLT5sb2NrX3N0YXRlaWQpOwogCQllbmNvZGVfbmZzNF9zZXFpZCh4ZHIsIGFyZ3MtPmxvY2tfc2VxaWQpOwogCX0KIH0KQEAgLTEzMzAsNyArMTMzMyw3IEBACiAJZW5jb2RlX29wX2hkcih4ZHIsIE9QX0xPQ0tVLCBkZWNvZGVfbG9ja3VfbWF4c3osIGhkcik7CiAJZW5jb2RlX3VpbnQzMih4ZHIsIG5mczRfbG9ja190eXBlKGFyZ3MtPmZsLCAwKSk7CiAJZW5jb2RlX25mczRfc2VxaWQoeGRyLCBhcmdzLT5zZXFpZCk7Ci0JZW5jb2RlX25mczRfc3RhdGVpZCh4ZHIsIGFyZ3MtPnN0YXRlaWQpOworCWVuY29kZV9uZnM0X3N0YXRlaWQoeGRyLCAmYXJncy0+c3RhdGVpZCk7CiAJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCAxNik7CiAJcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgYXJncy0+ZmwtPmZsX3N0YXJ0KTsKIAl4ZHJfZW5jb2RlX2h5cGVyKHAsIG5mczRfbG9ja19sZW5ndGgoYXJncy0+ZmwpKTsKQEAgLTEzNDgsMjQgKzEzNTEsMTIgQEAKIAllbmNvZGVfc3RyaW5nKHhkciwgbmFtZS0+bGVuLCBuYW1lLT5uYW1lKTsKIH0KIAotc3RhdGljIHZvaWQgZW5jb2RlX3NoYXJlX2FjY2VzcyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBmbW9kZV90IGZtb2RlKQorc3RhdGljIHZvaWQgZW5jb2RlX3NoYXJlX2FjY2VzcyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1MzIgc2hhcmVfYWNjZXNzKQogewogCV9fYmUzMiAqcDsKIAogCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgOCk7Ci0Jc3dpdGNoIChmbW9kZSAmIChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKSkgewotCWNhc2UgRk1PREVfUkVBRDoKLQkJKnArKyA9IGNwdV90b19iZTMyKE5GUzRfU0hBUkVfQUNDRVNTX1JFQUQpOwotCQlicmVhazsKLQljYXNlIEZNT0RFX1dSSVRFOgotCQkqcCsrID0gY3B1X3RvX2JlMzIoTkZTNF9TSEFSRV9BQ0NFU1NfV1JJVEUpOwotCQlicmVhazsKLQljYXNlIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEU6Ci0JCSpwKysgPSBjcHVfdG9fYmUzMihORlM0X1NIQVJFX0FDQ0VTU19CT1RIKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJKnArKyA9IGNwdV90b19iZTMyKDApOwotCX0KKwkqcCsrID0gY3B1X3RvX2JlMzIoc2hhcmVfYWNjZXNzKTsKIAkqcCA9IGNwdV90b19iZTMyKDApOwkJLyogZm9yIGxpbnV4LCBzaGFyZV9kZW55ID0gMCBhbHdheXMgKi8KIH0KIApAQCAtMTM3Nyw3ICsxMzY4LDcgQEAKICAqIG93bmVyIDQgPSAzMgogICovCiAJZW5jb2RlX25mczRfc2VxaWQoeGRyLCBhcmctPnNlcWlkKTsKLQllbmNvZGVfc2hhcmVfYWNjZXNzKHhkciwgYXJnLT5mbW9kZSk7CisJZW5jb2RlX3NoYXJlX2FjY2Vzcyh4ZHIsIGFyZy0+c2hhcmVfYWNjZXNzKTsKIAlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDM2KTsKIAlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmctPmNsaWVudGlkKTsKIAkqcCsrID0gY3B1X3RvX2JlMzIoMjQpOwpAQCAtMTUzMCw5ICsxNTIxLDkgQEAKIHN0YXRpYyB2b2lkIGVuY29kZV9vcGVuX2Rvd25ncmFkZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCBzdHJ1Y3QgbmZzX2Nsb3NlYXJncyAqYXJnLCBzdHJ1Y3QgY29tcG91bmRfaGRyICpoZHIpCiB7CiAJZW5jb2RlX29wX2hkcih4ZHIsIE9QX09QRU5fRE9XTkdSQURFLCBkZWNvZGVfb3Blbl9kb3duZ3JhZGVfbWF4c3osIGhkcik7Ci0JZW5jb2RlX25mczRfc3RhdGVpZCh4ZHIsIGFyZy0+c3RhdGVpZCk7CisJZW5jb2RlX25mczRfc3RhdGVpZCh4ZHIsICZhcmctPnN0YXRlaWQpOwogCWVuY29kZV9uZnM0X3NlcWlkKHhkciwgYXJnLT5zZXFpZCk7Ci0JZW5jb2RlX3NoYXJlX2FjY2Vzcyh4ZHIsIGFyZy0+Zm1vZGUpOworCWVuY29kZV9zaGFyZV9hY2Nlc3MoeGRyLCBhcmctPnNoYXJlX2FjY2Vzcyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xODAxLDkgKzE3OTIsOCBAQAogCQkJCSAgc3RydWN0IGNvbXBvdW5kX2hkciAqaGRyKQogewogCV9fYmUzMiAqcDsKLQljaGFyIG1hY2hpbmVfbmFtZVtORlM0X01BWF9NQUNISU5FX05BTUVfTEVOXTsKLQl1aW50MzJfdCBsZW47CiAJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IGFyZ3MtPmNsaWVudDsKKwlzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQgPSBjbHAtPmNsX3JwY2NsaWVudDsKIAlzdHJ1Y3QgbmZzX25ldCAqbm4gPSBuZXRfZ2VuZXJpYyhjbHAtPmNsX25ldCwgbmZzX25ldF9pZCk7CiAJdTMyIG1heF9yZXNwX3N6X2NhY2hlZDsKIApAQCAtMTgxNCwxMSArMTgwNCw4IEBACiAJbWF4X3Jlc3Bfc3pfY2FjaGVkID0gKE5GUzRfZGVjX29wZW5fc3ogKyBSUENfUkVQSERSU0laRSArCiAJCQkgICAgICBSUENfTUFYX0FVVEhfU0laRSArIDIpICogWERSX1VOSVQ7CiAKLQlsZW4gPSBzY25wcmludGYobWFjaGluZV9uYW1lLCBzaXplb2YobWFjaGluZV9uYW1lKSwgIiVzIiwKLQkJCWNscC0+Y2xfaXBhZGRyKTsKLQogCWVuY29kZV9vcF9oZHIoeGRyLCBPUF9DUkVBVEVfU0VTU0lPTiwgZGVjb2RlX2NyZWF0ZV9zZXNzaW9uX21heHN6LCBoZHIpOwotCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgMTYgKyAyKjI4ICsgMjAgKyBsZW4gKyAxMik7CisJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCAxNiArIDIqMjggKyAyMCArIGNsbnQtPmNsX25vZGVsZW4gKyAxMik7CiAJcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgY2xwLT5jbF9jbGllbnRpZCk7CiAJKnArKyA9IGNwdV90b19iZTMyKGNscC0+Y2xfc2VxaWQpOwkJCS8qU2VxdWVuY2UgaWQgKi8KIAkqcCsrID0gY3B1X3RvX2JlMzIoYXJncy0+ZmxhZ3MpOwkJCS8qZmxhZ3MgKi8KQEAgLTE4NDcsNyArMTgzNCw3IEBACiAKIAkvKiBhdXRoc3lzX3Bhcm1zIHJmYzE4MzEgKi8KIAkqcCsrID0gY3B1X3RvX2JlMzIobm4tPmJvb3RfdGltZS50dl9uc2VjKTsJLyogc3RhbXAgKi8KLQlwID0geGRyX2VuY29kZV9vcGFxdWUocCwgbWFjaGluZV9uYW1lLCBsZW4pOworCXAgPSB4ZHJfZW5jb2RlX2FycmF5KHAsIGNsbnQtPmNsX25vZGVuYW1lLCBjbG50LT5jbF9ub2RlbGVuKTsKIAkqcCsrID0gY3B1X3RvX2JlMzIoMCk7CQkJCS8qIFVJRCAqLwogCSpwKysgPSBjcHVfdG9fYmUzMigwKTsJCQkJLyogR0lEICovCiAJKnAgPSBjcHVfdG9fYmUzMigwKTsJCQkJLyogTm8gbW9yZSBnaWRzICovCkBAIC0yMDEyLDExICsxOTk5LDExIEBACiAJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCAxNik7CiAJKnArKyA9IGNwdV90b19iZTMyKDApOwkJLyogcmVjbGFpbS4gYWx3YXlzIDAgZm9yIG5vdyAqLwogCSpwKysgPSBjcHVfdG9fYmUzMihhcmdzLT5sYXlvdXRfdHlwZSk7Ci0JKnArKyA9IGNwdV90b19iZTMyKElPTU9ERV9BTlkpOworCSpwKysgPSBjcHVfdG9fYmUzMihhcmdzLT5yYW5nZS5pb21vZGUpOwogCSpwID0gY3B1X3RvX2JlMzIoUkVUVVJOX0ZJTEUpOwogCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgMTYpOwotCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIDApOwotCXAgPSB4ZHJfZW5jb2RlX2h5cGVyKHAsIE5GUzRfTUFYX1VJTlQ2NCk7CisJcCA9IHhkcl9lbmNvZGVfaHlwZXIocCwgYXJncy0+cmFuZ2Uub2Zmc2V0KTsKKwlwID0geGRyX2VuY29kZV9oeXBlcihwLCBhcmdzLT5yYW5nZS5sZW5ndGgpOwogCXNwaW5fbG9jaygmYXJncy0+aW5vZGUtPmlfbG9jayk7CiAJZW5jb2RlX25mczRfc3RhdGVpZCh4ZHIsICZhcmdzLT5zdGF0ZWlkKTsKIAlzcGluX3VubG9jaygmYXJncy0+aW5vZGUtPmlfbG9jayk7CkBAIC00OTM2LDIwICs0OTIzLDEzIEBACiAJcmV0dXJuIC1FSU87CiB9CiAKLXN0YXRpYyBpbnQgZGVjb2RlX2RlbGVnYXRpb24oc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19vcGVucmVzICpyZXMpCitzdGF0aWMgaW50IGRlY29kZV9yd19kZWxlZ2F0aW9uKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCXVpbnQzMl90IGRlbGVnYXRpb25fdHlwZSwKKwkJc3RydWN0IG5mc19vcGVucmVzICpyZXMpCiB7CiAJX19iZTMyICpwOwotCXVpbnQzMl90IGRlbGVnYXRpb25fdHlwZTsKIAlpbnQgc3RhdHVzOwogCi0JcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7Ci0JaWYgKHVubGlrZWx5KCFwKSkKLQkJZ290byBvdXRfb3ZlcmZsb3c7Ci0JZGVsZWdhdGlvbl90eXBlID0gYmUzMl90b19jcHVwKHApOwotCWlmIChkZWxlZ2F0aW9uX3R5cGUgPT0gTkZTNF9PUEVOX0RFTEVHQVRFX05PTkUpIHsKLQkJcmVzLT5kZWxlZ2F0aW9uX3R5cGUgPSAwOwotCQlyZXR1cm4gMDsKLQl9CiAJc3RhdHVzID0gZGVjb2RlX3N0YXRlaWQoeGRyLCAmcmVzLT5kZWxlZ2F0aW9uKTsKIAlpZiAodW5saWtlbHkoc3RhdHVzKSkKIAkJcmV0dXJuIHN0YXR1czsKQEAgLTQ5NzMsNiArNDk1Myw1MiBAQAogCXJldHVybiAtRUlPOwogfQogCitzdGF0aWMgaW50IGRlY29kZV9ub19kZWxlZ2F0aW9uKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCBuZnNfb3BlbnJlcyAqcmVzKQoreworCV9fYmUzMiAqcDsKKwl1aW50MzJfdCB3aHlfbm9fZGVsZWdhdGlvbjsKKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCXdoeV9ub19kZWxlZ2F0aW9uID0gYmUzMl90b19jcHVwKHApOworCXN3aXRjaCAod2h5X25vX2RlbGVnYXRpb24pIHsKKwkJY2FzZSBXTkQ0X0NPTlRFTlRJT046CisJCWNhc2UgV05ENF9SRVNPVVJDRToKKwkJCXhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CisJCQkvKiBJZ25vcmUgZm9yIG5vdyAqLworCX0KKwlyZXR1cm4gMDsKK291dF9vdmVyZmxvdzoKKwlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX2RlbGVnYXRpb24oc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IG5mc19vcGVucmVzICpyZXMpCit7CisJX19iZTMyICpwOworCXVpbnQzMl90IGRlbGVnYXRpb25fdHlwZTsKKworCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gb3V0X292ZXJmbG93OworCWRlbGVnYXRpb25fdHlwZSA9IGJlMzJfdG9fY3B1cChwKTsKKwlyZXMtPmRlbGVnYXRpb25fdHlwZSA9IDA7CisJc3dpdGNoIChkZWxlZ2F0aW9uX3R5cGUpIHsKKwljYXNlIE5GUzRfT1BFTl9ERUxFR0FURV9OT05FOgorCQlyZXR1cm4gMDsKKwljYXNlIE5GUzRfT1BFTl9ERUxFR0FURV9SRUFEOgorCWNhc2UgTkZTNF9PUEVOX0RFTEVHQVRFX1dSSVRFOgorCQlyZXR1cm4gZGVjb2RlX3J3X2RlbGVnYXRpb24oeGRyLCBkZWxlZ2F0aW9uX3R5cGUsIHJlcyk7CisJY2FzZSBORlM0X09QRU5fREVMRUdBVEVfTk9ORV9FWFQ6CisJCXJldHVybiBkZWNvZGVfbm9fZGVsZWdhdGlvbih4ZHIsIHJlcyk7CisJfQorCXJldHVybiAtRUlPOworb3V0X292ZXJmbG93OgorCXByaW50X292ZXJmbG93X21zZyhfX2Z1bmNfXywgeGRyKTsKKwlyZXR1cm4gLUVJTzsKK30KKwogc3RhdGljIGludCBkZWNvZGVfb3BlbihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgbmZzX29wZW5yZXMgKnJlcykKIHsKIAlfX2JlMzIgKnA7CkBAIC02NTY3LDYgKzY1OTMsNyBAQAogCWludCBzdGF0dXM7CiAKIAlzdGF0dXMgPSBkZWNvZGVfY29tcG91bmRfaGRyKHhkciwgJmhkcik7CisJcmVzLT5vcF9zdGF0dXMgPSBoZHIuc3RhdHVzOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0OwogCXN0YXR1cyA9IGRlY29kZV9zZXF1ZW5jZSh4ZHIsICZyZXMtPnNlcV9yZXMsIHJxc3RwKTsKQEAgLTY1OTIsNiArNjYxOSw3IEBACiAJaW50IHN0YXR1czsKIAogCXN0YXR1cyA9IGRlY29kZV9jb21wb3VuZF9oZHIoeGRyLCAmaGRyKTsKKwlyZXMtPm9wX3N0YXR1cyA9IGhkci5zdGF0dXM7CiAJaWYgKHN0YXR1cykKIAkJZ290byBvdXQ7CiAJc3RhdHVzID0gZGVjb2RlX3NlcXVlbmNlKHhkciwgJnJlcy0+c2VxX3JlcywgcnFzdHApOwpAQCAtNjYyMSw2ICs2NjQ5LDcgQEAKIAlpbnQgc3RhdHVzOwogCiAJc3RhdHVzID0gZGVjb2RlX2NvbXBvdW5kX2hkcih4ZHIsICZoZHIpOworCXJlcy0+b3Bfc3RhdHVzID0gaGRyLnN0YXR1czsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKIAlzdGF0dXMgPSBkZWNvZGVfc2VxdWVuY2UoeGRyLCAmcmVzLT5zZXFfcmVzLCBycXN0cCk7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzcm9vdC5jIGIvZnMvbmZzL25mc3Jvb3QuYwppbmRleCBjZDNjOTEwLi45YmM5ZjA0IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzcm9vdC5jCisrKyBiL2ZzL25mcy9uZnNyb290LmMKQEAgLTI2MSwxMSArMjYxLDExIEBACiAJICovCiAJbGVuID0gc25wcmludGYobmZzX2V4cG9ydF9wYXRoLCBzaXplb2YobmZzX2V4cG9ydF9wYXRoKSwKIAkJCQl0bXAsIHV0c25hbWUoKS0+bm9kZW5hbWUpOwotCWlmIChsZW4gPiAoaW50KXNpemVvZihuZnNfZXhwb3J0X3BhdGgpKQorCWlmIChsZW4gPj0gKGludClzaXplb2YobmZzX2V4cG9ydF9wYXRoKSkKIAkJZ290byBvdXRfZGV2bmFtZXRvb2xvbmc7CiAJbGVuID0gc25wcmludGYobmZzX3Jvb3RfZGV2aWNlLCBzaXplb2YobmZzX3Jvb3RfZGV2aWNlKSwKIAkJCQkiJXBJNDolcyIsICZzZXJ2YWRkciwgbmZzX2V4cG9ydF9wYXRoKTsKLQlpZiAobGVuID4gKGludClzaXplb2YobmZzX3Jvb3RfZGV2aWNlKSkKKwlpZiAobGVuID49IChpbnQpc2l6ZW9mKG5mc19yb290X2RldmljZSkpCiAJCWdvdG8gb3V0X2Rldm5hbWV0b29sb25nOwogCiAJcmV0dmFsID0gMDsKZGlmZiAtLWdpdCBhL2ZzL25mcy9vYmpsYXlvdXQvb2JqaW9fb3NkLmMgYi9mcy9uZnMvb2JqbGF5b3V0L29iamlvX29zZC5jCmluZGV4IDllNWJjNDIuLjI0ZTFkNzQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9vYmpsYXlvdXQvb2JqaW9fb3NkLmMKKysrIGIvZnMvbmZzL29iamxheW91dC9vYmppb19vc2QuYwpAQCAtNTM3LDExICs1MzcsMTIgQEAKIHN0YXRpYyBzaXplX3Qgb2JqaW9fcGdfdGVzdChzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpwZ2lvLAogCQkJICBzdHJ1Y3QgbmZzX3BhZ2UgKnByZXYsIHN0cnVjdCBuZnNfcGFnZSAqcmVxKQogeworCXN0cnVjdCBuZnNfcGdpb19taXJyb3IgKm1pcnJvciA9IG5mc19wZ2lvX2N1cnJlbnRfbWlycm9yKHBnaW8pOwogCXVuc2lnbmVkIGludCBzaXplOwogCiAJc2l6ZSA9IHBuZnNfZ2VuZXJpY19wZ190ZXN0KHBnaW8sIHByZXYsIHJlcSk7CiAKLQlpZiAoIXNpemUgfHwgcGdpby0+cGdfY291bnQgKyByZXEtPndiX2J5dGVzID4KKwlpZiAoIXNpemUgfHwgbWlycm9yLT5wZ19jb3VudCArIHJlcS0+d2JfYnl0ZXMgPgogCSAgICAodW5zaWduZWQgbG9uZylwZ2lvLT5wZ19sYXlvdXRfcHJpdmF0ZSkKIAkJcmV0dXJuIDA7CiAKQEAgLTYwNywxMiArNjA4LDE0IEBACiAJLnBnX2luaXQgPSBvYmppb19pbml0X3JlYWQsCiAJLnBnX3Rlc3QgPSBvYmppb19wZ190ZXN0LAogCS5wZ19kb2lvID0gcG5mc19nZW5lcmljX3BnX3JlYWRwYWdlcywKKwkucGdfY2xlYW51cCA9IHBuZnNfZ2VuZXJpY19wZ19jbGVhbnVwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZnNfcGFnZWlvX29wcyBvYmppb19wZ193cml0ZV9vcHMgPSB7CiAJLnBnX2luaXQgPSBvYmppb19pbml0X3dyaXRlLAogCS5wZ190ZXN0ID0gb2JqaW9fcGdfdGVzdCwKIAkucGdfZG9pbyA9IHBuZnNfZ2VuZXJpY19wZ193cml0ZXBhZ2VzLAorCS5wZ19jbGVhbnVwID0gcG5mc19nZW5lcmljX3BnX2NsZWFudXAsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBuZnNfbGF5b3V0ZHJpdmVyX3R5cGUgb2JqbGF5b3V0X3R5cGUgPSB7CmRpZmYgLS1naXQgYS9mcy9uZnMvcGFnZWxpc3QuYyBiL2ZzL25mcy9wYWdlbGlzdC5jCmluZGV4IDJiNWU3NjkuLmQ1NzE5MGEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9wYWdlbGlzdC5jCisrKyBiL2ZzL25mcy9wYWdlbGlzdC5jCkBAIC00MiwyMSArNDIsMzUgQEAKIAlyZXR1cm4gcC0+cGFnZXZlYyAhPSBOVUxMOwogfQogCitzdHJ1Y3QgbmZzX3BnaW9fbWlycm9yICoKK25mc19wZ2lvX2N1cnJlbnRfbWlycm9yKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKmRlc2MpCit7CisJcmV0dXJuIG5mc19wZ2lvX2hhc19taXJyb3JpbmcoZGVzYykgPworCQkmZGVzYy0+cGdfbWlycm9yc1tkZXNjLT5wZ19taXJyb3JfaWR4XSA6CisJCSZkZXNjLT5wZ19taXJyb3JzWzBdOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZzX3BnaW9fY3VycmVudF9taXJyb3IpOworCiB2b2lkIG5mc19wZ2hlYWRlcl9pbml0KHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKmRlc2MsCiAJCSAgICAgICBzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICpoZHIsCiAJCSAgICAgICB2b2lkICgqcmVsZWFzZSkoc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqaGRyKSkKIHsKLQloZHItPnJlcSA9IG5mc19saXN0X2VudHJ5KGRlc2MtPnBnX2xpc3QubmV4dCk7CisJc3RydWN0IG5mc19wZ2lvX21pcnJvciAqbWlycm9yID0gbmZzX3BnaW9fY3VycmVudF9taXJyb3IoZGVzYyk7CisKKworCWhkci0+cmVxID0gbmZzX2xpc3RfZW50cnkobWlycm9yLT5wZ19saXN0Lm5leHQpOwogCWhkci0+aW5vZGUgPSBkZXNjLT5wZ19pbm9kZTsKIAloZHItPmNyZWQgPSBoZHItPnJlcS0+d2JfY29udGV4dC0+Y3JlZDsKIAloZHItPmlvX3N0YXJ0ID0gcmVxX29mZnNldChoZHItPnJlcSk7Ci0JaGRyLT5nb29kX2J5dGVzID0gZGVzYy0+cGdfY291bnQ7CisJaGRyLT5nb29kX2J5dGVzID0gbWlycm9yLT5wZ19jb3VudDsKIAloZHItPmRyZXEgPSBkZXNjLT5wZ19kcmVxOwogCWhkci0+bGF5b3V0X3ByaXZhdGUgPSBkZXNjLT5wZ19sYXlvdXRfcHJpdmF0ZTsKIAloZHItPnJlbGVhc2UgPSByZWxlYXNlOwogCWhkci0+Y29tcGxldGlvbl9vcHMgPSBkZXNjLT5wZ19jb21wbGV0aW9uX29wczsKIAlpZiAoaGRyLT5jb21wbGV0aW9uX29wcy0+aW5pdF9oZHIpCiAJCWhkci0+Y29tcGxldGlvbl9vcHMtPmluaXRfaGRyKGhkcik7CisKKwloZHItPnBnaW9fbWlycm9yX2lkeCA9IGRlc2MtPnBnX21pcnJvcl9pZHg7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZnNfcGdoZWFkZXJfaW5pdCk7CiAKQEAgLTQ4MCw3ICs0OTQsMTAgQEAKIHNpemVfdCBuZnNfZ2VuZXJpY19wZ190ZXN0KHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKmRlc2MsCiAJCQkgICBzdHJ1Y3QgbmZzX3BhZ2UgKnByZXYsIHN0cnVjdCBuZnNfcGFnZSAqcmVxKQogewotCWlmIChkZXNjLT5wZ19jb3VudCA+IGRlc2MtPnBnX2JzaXplKSB7CisJc3RydWN0IG5mc19wZ2lvX21pcnJvciAqbWlycm9yID0gbmZzX3BnaW9fY3VycmVudF9taXJyb3IoZGVzYyk7CisKKworCWlmIChtaXJyb3ItPnBnX2NvdW50ID4gbWlycm9yLT5wZ19ic2l6ZSkgewogCQkvKiBzaG91bGQgbmV2ZXIgaGFwcGVuICovCiAJCVdBUk5fT05fT05DRSgxKTsKIAkJcmV0dXJuIDA7CkBAIC00OTAsMTEgKzUwNywxMSBAQAogCSAqIExpbWl0IHRoZSByZXF1ZXN0IHNpemUgc28gdGhhdCB3ZSBjYW4gc3RpbGwgYWxsb2NhdGUgYSBwYWdlIGFycmF5CiAJICogZm9yIGl0IHdpdGhvdXQgdXBzZXR0aW5nIHRoZSBzbGFiIGFsbG9jYXRvci4KIAkgKi8KLQlpZiAoKChkZXNjLT5wZ19jb3VudCArIHJlcS0+d2JfYnl0ZXMpID4+IFBBR0VfU0hJRlQpICoKKwlpZiAoKChtaXJyb3ItPnBnX2NvdW50ICsgcmVxLT53Yl9ieXRlcykgPj4gUEFHRV9TSElGVCkgKgogCQkJc2l6ZW9mKHN0cnVjdCBwYWdlKSA+IFBBR0VfU0laRSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gbWluKGRlc2MtPnBnX2JzaXplIC0gZGVzYy0+cGdfY291bnQsIChzaXplX3QpcmVxLT53Yl9ieXRlcyk7CisJcmV0dXJuIG1pbihtaXJyb3ItPnBnX2JzaXplIC0gbWlycm9yLT5wZ19jb3VudCwgKHNpemVfdClyZXEtPndiX2J5dGVzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mc19nZW5lcmljX3BnX3Rlc3QpOwogCkBAIC01OTcsMTMgKzYxNCwxNCBAQAogfQogCiBpbnQgbmZzX2luaXRpYXRlX3BnaW8oc3RydWN0IHJwY19jbG50ICpjbG50LCBzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICpoZHIsCisJCSAgICAgIHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgY29uc3Qgc3RydWN0IG5mc19ycGNfb3BzICpycGNfb3BzLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzICpjYWxsX29wcywgaW50IGhvdywgaW50IGZsYWdzKQogewogCXN0cnVjdCBycGNfdGFzayAqdGFzazsKIAlzdHJ1Y3QgcnBjX21lc3NhZ2UgbXNnID0gewogCQkucnBjX2FyZ3AgPSAmaGRyLT5hcmdzLAogCQkucnBjX3Jlc3AgPSAmaGRyLT5yZXMsCi0JCS5ycGNfY3JlZCA9IGhkci0+Y3JlZCwKKwkJLnJwY19jcmVkID0gY3JlZCwKIAl9OwogCXN0cnVjdCBycGNfdGFza19zZXR1cCB0YXNrX3NldHVwX2RhdGEgPSB7CiAJCS5ycGNfY2xpZW50ID0gY2xudCwKQEAgLTYxNiw3ICs2MzQsNyBAQAogCX07CiAJaW50IHJldCA9IDA7CiAKLQloZHItPnJ3X29wcy0+cndfaW5pdGlhdGUoaGRyLCAmbXNnLCAmdGFza19zZXR1cF9kYXRhLCBob3cpOworCWhkci0+cndfb3BzLT5yd19pbml0aWF0ZShoZHIsICZtc2csIHJwY19vcHMsICZ0YXNrX3NldHVwX2RhdGEsIGhvdyk7CiAKIAlkcHJpbnRrKCJORlM6ICU1dSBpbml0aWF0ZWQgcGdpbyBjYWxsICIKIAkJIihyZXEgJXMvJWxsdSwgJXUgYnl0ZXMgQCBvZmZzZXQgJWxsdSlcbiIsCkBAIC02NTAsMTAgKzY2OCwxOCBAQAogc3RhdGljIGludCBuZnNfcGdpb19lcnJvcihzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpkZXNjLAogCQkJICBzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICpoZHIpCiB7CisJc3RydWN0IG5mc19wZ2lvX21pcnJvciAqbWlycm9yOworCXUzMiBtaWR4OworCiAJc2V0X2JpdChORlNfSU9IRFJfUkVETywgJmhkci0+ZmxhZ3MpOwogCW5mc19wZ2lvX2RhdGFfZGVzdHJveShoZHIpOwogCWhkci0+Y29tcGxldGlvbl9vcHMtPmNvbXBsZXRpb24oaGRyKTsKLQlkZXNjLT5wZ19jb21wbGV0aW9uX29wcy0+ZXJyb3JfY2xlYW51cCgmZGVzYy0+cGdfbGlzdCk7CisJLyogVE9ETzogTWFrZSBzdXJlIGl0J3MgcmlnaHQgdG8gY2xlYW4gdXAgYWxsIG1pcnJvcnMgaGVyZQorCSAqICAgICAgIGFuZCBub3QganVzdCBoZHItPnBnaW9fbWlycm9yX2lkeCAqLworCWZvciAobWlkeCA9IDA7IG1pZHggPCBkZXNjLT5wZ19taXJyb3JfY291bnQ7IG1pZHgrKykgeworCQltaXJyb3IgPSAmZGVzYy0+cGdfbWlycm9yc1ttaWR4XTsKKwkJZGVzYy0+cGdfY29tcGxldGlvbl9vcHMtPmVycm9yX2NsZWFudXAoJm1pcnJvci0+cGdfbGlzdCk7CisJfQogCXJldHVybiAtRU5PTUVNOwogfQogCkBAIC02NzAsNiArNjk2LDE3IEBACiAJaGRyLT5jb21wbGV0aW9uX29wcy0+Y29tcGxldGlvbihoZHIpOwogfQogCitzdGF0aWMgdm9pZCBuZnNfcGFnZWlvX21pcnJvcl9pbml0KHN0cnVjdCBuZnNfcGdpb19taXJyb3IgKm1pcnJvciwKKwkJCQkgICB1bnNpZ25lZCBpbnQgYnNpemUpCit7CisJSU5JVF9MSVNUX0hFQUQoJm1pcnJvci0+cGdfbGlzdCk7CisJbWlycm9yLT5wZ19ieXRlc193cml0dGVuID0gMDsKKwltaXJyb3ItPnBnX2NvdW50ID0gMDsKKwltaXJyb3ItPnBnX2JzaXplID0gYnNpemU7CisJbWlycm9yLT5wZ19iYXNlID0gMDsKKwltaXJyb3ItPnBnX3JlY29hbGVzY2UgPSAwOworfQorCiAvKioKICAqIG5mc19wYWdlaW9faW5pdCAtIGluaXRpYWxpc2UgYSBwYWdlIGlvIGRlc2NyaXB0b3IKICAqIEBkZXNjOiBwb2ludGVyIHRvIGRlc2NyaXB0b3IKQEAgLTY4NiwxMyArNzIzLDEwIEBACiAJCSAgICAgc2l6ZV90IGJzaXplLAogCQkgICAgIGludCBpb19mbGFncykKIHsKLQlJTklUX0xJU1RfSEVBRCgmZGVzYy0+cGdfbGlzdCk7Ci0JZGVzYy0+cGdfYnl0ZXNfd3JpdHRlbiA9IDA7Ci0JZGVzYy0+cGdfY291bnQgPSAwOwotCWRlc2MtPnBnX2JzaXplID0gYnNpemU7Ci0JZGVzYy0+cGdfYmFzZSA9IDA7CisJc3RydWN0IG5mc19wZ2lvX21pcnJvciAqbmV3OworCWludCBpOworCiAJZGVzYy0+cGdfbW9yZWlvID0gMDsKLQlkZXNjLT5wZ19yZWNvYWxlc2NlID0gMDsKIAlkZXNjLT5wZ19pbm9kZSA9IGlub2RlOwogCWRlc2MtPnBnX29wcyA9IHBnX29wczsKIAlkZXNjLT5wZ19jb21wbGV0aW9uX29wcyA9IGNvbXBsX29wczsKQEAgLTcwMiw2ICs3MzYsMjYgQEAKIAlkZXNjLT5wZ19sc2VnID0gTlVMTDsKIAlkZXNjLT5wZ19kcmVxID0gTlVMTDsKIAlkZXNjLT5wZ19sYXlvdXRfcHJpdmF0ZSA9IE5VTEw7CisJZGVzYy0+cGdfYnNpemUgPSBic2l6ZTsKKworCWRlc2MtPnBnX21pcnJvcl9jb3VudCA9IDE7CisJZGVzYy0+cGdfbWlycm9yX2lkeCA9IDA7CisKKwlpZiAocGdfb3BzLT5wZ19nZXRfbWlycm9yX2NvdW50KSB7CisJCS8qIHVudGlsIHdlIGhhdmUgYSByZXF1ZXN0LCB3ZSBkb24ndCBoYXZlIGFuIGxzZWcgYW5kIG5vCisJCSAqIGlkZWEgaG93IG1hbnkgbWlycm9ycyB0aGVyZSB3aWxsIGJlICovCisJCW5ldyA9IGtjYWxsb2MoTkZTX1BBR0VJT19ERVNDUklQVE9SX01JUlJPUl9NQVgsCisJCQkgICAgICBzaXplb2Yoc3RydWN0IG5mc19wZ2lvX21pcnJvciksIEdGUF9LRVJORUwpOworCQlkZXNjLT5wZ19taXJyb3JzX2R5bmFtaWMgPSBuZXc7CisJCWRlc2MtPnBnX21pcnJvcnMgPSBuZXc7CisKKwkJZm9yIChpID0gMDsgaSA8IE5GU19QQUdFSU9fREVTQ1JJUFRPUl9NSVJST1JfTUFYOyBpKyspCisJCQluZnNfcGFnZWlvX21pcnJvcl9pbml0KCZkZXNjLT5wZ19taXJyb3JzW2ldLCBic2l6ZSk7CisJfSBlbHNlIHsKKwkJZGVzYy0+cGdfbWlycm9yc19keW5hbWljID0gTlVMTDsKKwkJZGVzYy0+cGdfbWlycm9ycyA9IGRlc2MtPnBnX21pcnJvcnNfc3RhdGljOworCQluZnNfcGFnZWlvX21pcnJvcl9pbml0KCZkZXNjLT5wZ19taXJyb3JzWzBdLCBic2l6ZSk7CisJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZzX3BhZ2Vpb19pbml0KTsKIApAQCAtNzM3LDE0ICs3OTEsMTYgQEAKIGludCBuZnNfZ2VuZXJpY19wZ2lvKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKmRlc2MsCiAJCSAgICAgc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqaGRyKQogeworCXN0cnVjdCBuZnNfcGdpb19taXJyb3IgKm1pcnJvciA9IG5mc19wZ2lvX2N1cnJlbnRfbWlycm9yKGRlc2MpOworCiAJc3RydWN0IG5mc19wYWdlCQkqcmVxOwogCXN0cnVjdCBwYWdlCQkqKnBhZ2VzLAogCQkJCSpsYXN0X3BhZ2U7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZkZXNjLT5wZ19saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmbWlycm9yLT5wZ19saXN0OwogCXN0cnVjdCBuZnNfY29tbWl0X2luZm8gY2luZm87CiAJdW5zaWduZWQgaW50IHBhZ2Vjb3VudCwgcGFnZXVzZWQ7CiAKLQlwYWdlY291bnQgPSBuZnNfcGFnZV9hcnJheV9sZW4oZGVzYy0+cGdfYmFzZSwgZGVzYy0+cGdfY291bnQpOworCXBhZ2Vjb3VudCA9IG5mc19wYWdlX2FycmF5X2xlbihtaXJyb3ItPnBnX2Jhc2UsIG1pcnJvci0+cGdfY291bnQpOwogCWlmICghbmZzX3BnYXJyYXlfc2V0KCZoZHItPnBhZ2VfYXJyYXksIHBhZ2Vjb3VudCkpCiAJCXJldHVybiBuZnNfcGdpb19lcnJvcihkZXNjLCBoZHIpOwogCkBAIC03NzIsNyArODI4LDcgQEAKIAkJZGVzYy0+cGdfaW9mbGFncyAmPSB+RkxVU0hfQ09ORF9TVEFCTEU7CiAKIAkvKiBTZXQgdXAgdGhlIGFyZ3VtZW50IHN0cnVjdCAqLwotCW5mc19wZ2lvX3JwY3NldHVwKGhkciwgZGVzYy0+cGdfY291bnQsIDAsIGRlc2MtPnBnX2lvZmxhZ3MsICZjaW5mbyk7CisJbmZzX3BnaW9fcnBjc2V0dXAoaGRyLCBtaXJyb3ItPnBnX2NvdW50LCAwLCBkZXNjLT5wZ19pb2ZsYWdzLCAmY2luZm8pOwogCWRlc2MtPnBnX3JwY19jYWxsb3BzID0gJm5mc19wZ2lvX2NvbW1vbl9vcHM7CiAJcmV0dXJuIDA7CiB9CkBAIC03ODAsMjMgKzgzNiw3NCBAQAogCiBzdGF0aWMgaW50IG5mc19nZW5lcmljX3BnX3BnaW9zKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKmRlc2MpCiB7CisJc3RydWN0IG5mc19wZ2lvX21pcnJvciAqbWlycm9yOwogCXN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkcjsKIAlpbnQgcmV0OwogCisJbWlycm9yID0gbmZzX3BnaW9fY3VycmVudF9taXJyb3IoZGVzYyk7CisKIAloZHIgPSBuZnNfcGdpb19oZWFkZXJfYWxsb2MoZGVzYy0+cGdfcndfb3BzKTsKIAlpZiAoIWhkcikgewotCQlkZXNjLT5wZ19jb21wbGV0aW9uX29wcy0+ZXJyb3JfY2xlYW51cCgmZGVzYy0+cGdfbGlzdCk7CisJCS8qIFRPRE86IG1ha2Ugc3VyZSB0aGlzIGlzIHJpZ2h0IHdpdGggbWlycm9yaW5nIC0gb3IKKwkJICogICAgICAgc2hvdWxkIGl0IGJhY2sgb3V0IGFsbCBtaXJyb3JzPyAqLworCQlkZXNjLT5wZ19jb21wbGV0aW9uX29wcy0+ZXJyb3JfY2xlYW51cCgmbWlycm9yLT5wZ19saXN0KTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW5mc19wZ2hlYWRlcl9pbml0KGRlc2MsIGhkciwgbmZzX3BnaW9faGVhZGVyX2ZyZWUpOwogCXJldCA9IG5mc19nZW5lcmljX3BnaW8oZGVzYywgaGRyKTsKIAlpZiAocmV0ID09IDApCiAJCXJldCA9IG5mc19pbml0aWF0ZV9wZ2lvKE5GU19DTElFTlQoaGRyLT5pbm9kZSksCi0JCQkJCWhkciwgZGVzYy0+cGdfcnBjX2NhbGxvcHMsCisJCQkJCWhkciwKKwkJCQkJaGRyLT5jcmVkLAorCQkJCQlORlNfUFJPVE8oaGRyLT5pbm9kZSksCisJCQkJCWRlc2MtPnBnX3JwY19jYWxsb3BzLAogCQkJCQlkZXNjLT5wZ19pb2ZsYWdzLCAwKTsKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogbmZzX3BhZ2Vpb19zZXR1cF9taXJyb3JpbmcgLSBkZXRlcm1pbmUgaWYgbWlycm9yaW5nIGlzIHRvIGJlIHVzZWQKKyAqCQkJCWJ5IGNhbGxpbmcgdGhlIHBnX2dldF9taXJyb3JfY291bnQgb3AKKyAqLworc3RhdGljIGludCBuZnNfcGFnZWlvX3NldHVwX21pcnJvcmluZyhzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpwZ2lvLAorCQkJCSAgICAgICBzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSkKK3sKKwlpbnQgbWlycm9yX2NvdW50ID0gMTsKKworCWlmICghcGdpby0+cGdfb3BzLT5wZ19nZXRfbWlycm9yX2NvdW50KQorCQlyZXR1cm4gMDsKKworCW1pcnJvcl9jb3VudCA9IHBnaW8tPnBnX29wcy0+cGdfZ2V0X21pcnJvcl9jb3VudChwZ2lvLCByZXEpOworCisJaWYgKCFtaXJyb3JfY291bnQgfHwgbWlycm9yX2NvdW50ID4gTkZTX1BBR0VJT19ERVNDUklQVE9SX01JUlJPUl9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKFdBUk5fT05fT05DRSghcGdpby0+cGdfbWlycm9yc19keW5hbWljKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwZ2lvLT5wZ19taXJyb3JfY291bnQgPSBtaXJyb3JfY291bnQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIG5mc19wYWdlaW9fc3RvcF9taXJyb3JpbmcgLSBzdG9wIHVzaW5nIG1pcnJvcmluZyAoc2V0IG1pcnJvciBjb3VudCB0byAxKQorICovCit2b2lkIG5mc19wYWdlaW9fc3RvcF9taXJyb3Jpbmcoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqcGdpbykKK3sKKwlwZ2lvLT5wZ19taXJyb3JfY291bnQgPSAxOworCXBnaW8tPnBnX21pcnJvcl9pZHggPSAwOworfQorCitzdGF0aWMgdm9pZCBuZnNfcGFnZWlvX2NsZWFudXBfbWlycm9yaW5nKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKnBnaW8pCit7CisJcGdpby0+cGdfbWlycm9yX2NvdW50ID0gMTsKKwlwZ2lvLT5wZ19taXJyb3JfaWR4ID0gMDsKKwlwZ2lvLT5wZ19taXJyb3JzID0gcGdpby0+cGdfbWlycm9yc19zdGF0aWM7CisJa2ZyZWUocGdpby0+cGdfbWlycm9yc19keW5hbWljKTsKKwlwZ2lvLT5wZ19taXJyb3JzX2R5bmFtaWMgPSBOVUxMOworfQorCiBzdGF0aWMgYm9vbCBuZnNfbWF0Y2hfb3Blbl9jb250ZXh0KGNvbnN0IHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgxLAogCQljb25zdCBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4MikKIHsKQEAgLTgyNiwxMSArOTMzLDE1IEBACiAJCQkJICAgICAgc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqcGdpbykKIHsKIAlzaXplX3Qgc2l6ZTsKKwlzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmZsY3R4OwogCiAJaWYgKHByZXYpIHsKIAkJaWYgKCFuZnNfbWF0Y2hfb3Blbl9jb250ZXh0KHJlcS0+d2JfY29udGV4dCwgcHJldi0+d2JfY29udGV4dCkpCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCWlmIChyZXEtPndiX2NvbnRleHQtPmRlbnRyeS0+ZF9pbm9kZS0+aV9mbG9jayAhPSBOVUxMICYmCisJCWZsY3R4ID0gcmVxLT53Yl9jb250ZXh0LT5kZW50cnktPmRfaW5vZGUtPmlfZmxjdHg7CisJCWlmIChmbGN0eCAhPSBOVUxMICYmCisJCSAgICAhKGxpc3RfZW1wdHlfY2FyZWZ1bCgmZmxjdHgtPmZsY19wb3NpeCkgJiYKKwkJICAgICAgbGlzdF9lbXB0eV9jYXJlZnVsKCZmbGN0eC0+ZmxjX2Zsb2NrKSkgJiYKIAkJICAgICFuZnNfbWF0Y2hfbG9ja19jb250ZXh0KHJlcS0+d2JfbG9ja19jb250ZXh0LAogCQkJCQkgICAgcHJldi0+d2JfbG9ja19jb250ZXh0KSkKIAkJCXJldHVybiBmYWxzZTsKQEAgLTg2MywxOSArOTc0LDIyIEBACiBzdGF0aWMgaW50IG5mc19wYWdlaW9fZG9fYWRkX3JlcXVlc3Qoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqZGVzYywKIAkJCQkgICAgIHN0cnVjdCBuZnNfcGFnZSAqcmVxKQogeworCXN0cnVjdCBuZnNfcGdpb19taXJyb3IgKm1pcnJvciA9IG5mc19wZ2lvX2N1cnJlbnRfbWlycm9yKGRlc2MpOworCiAJc3RydWN0IG5mc19wYWdlICpwcmV2ID0gTlVMTDsKLQlpZiAoZGVzYy0+cGdfY291bnQgIT0gMCkgewotCQlwcmV2ID0gbmZzX2xpc3RfZW50cnkoZGVzYy0+cGdfbGlzdC5wcmV2KTsKKworCWlmIChtaXJyb3ItPnBnX2NvdW50ICE9IDApIHsKKwkJcHJldiA9IG5mc19saXN0X2VudHJ5KG1pcnJvci0+cGdfbGlzdC5wcmV2KTsKIAl9IGVsc2UgewogCQlpZiAoZGVzYy0+cGdfb3BzLT5wZ19pbml0KQogCQkJZGVzYy0+cGdfb3BzLT5wZ19pbml0KGRlc2MsIHJlcSk7Ci0JCWRlc2MtPnBnX2Jhc2UgPSByZXEtPndiX3BnYmFzZTsKKwkJbWlycm9yLT5wZ19iYXNlID0gcmVxLT53Yl9wZ2Jhc2U7CiAJfQogCWlmICghbmZzX2Nhbl9jb2FsZXNjZV9yZXF1ZXN0cyhwcmV2LCByZXEsIGRlc2MpKQogCQlyZXR1cm4gMDsKIAluZnNfbGlzdF9yZW1vdmVfcmVxdWVzdChyZXEpOwotCW5mc19saXN0X2FkZF9yZXF1ZXN0KHJlcSwgJmRlc2MtPnBnX2xpc3QpOwotCWRlc2MtPnBnX2NvdW50ICs9IHJlcS0+d2JfYnl0ZXM7CisJbmZzX2xpc3RfYWRkX3JlcXVlc3QocmVxLCAmbWlycm9yLT5wZ19saXN0KTsKKwltaXJyb3ItPnBnX2NvdW50ICs9IHJlcS0+d2JfYnl0ZXM7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTg4NCwxNiArOTk4LDE5IEBACiAgKi8KIHN0YXRpYyB2b2lkIG5mc19wYWdlaW9fZG9pbyhzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpkZXNjKQogewotCWlmICghbGlzdF9lbXB0eSgmZGVzYy0+cGdfbGlzdCkpIHsKKwlzdHJ1Y3QgbmZzX3BnaW9fbWlycm9yICptaXJyb3IgPSBuZnNfcGdpb19jdXJyZW50X21pcnJvcihkZXNjKTsKKworCisJaWYgKCFsaXN0X2VtcHR5KCZtaXJyb3ItPnBnX2xpc3QpKSB7CiAJCWludCBlcnJvciA9IGRlc2MtPnBnX29wcy0+cGdfZG9pbyhkZXNjKTsKIAkJaWYgKGVycm9yIDwgMCkKIAkJCWRlc2MtPnBnX2Vycm9yID0gZXJyb3I7CiAJCWVsc2UKLQkJCWRlc2MtPnBnX2J5dGVzX3dyaXR0ZW4gKz0gZGVzYy0+cGdfY291bnQ7CisJCQltaXJyb3ItPnBnX2J5dGVzX3dyaXR0ZW4gKz0gbWlycm9yLT5wZ19jb3VudDsKIAl9Ci0JaWYgKGxpc3RfZW1wdHkoJmRlc2MtPnBnX2xpc3QpKSB7Ci0JCWRlc2MtPnBnX2NvdW50ID0gMDsKLQkJZGVzYy0+cGdfYmFzZSA9IDA7CisJaWYgKGxpc3RfZW1wdHkoJm1pcnJvci0+cGdfbGlzdCkpIHsKKwkJbWlycm9yLT5wZ19jb3VudCA9IDA7CisJCW1pcnJvci0+cGdfYmFzZSA9IDA7CiAJfQogfQogCkBAIC05MTEsNiArMTAyOCw4IEBACiBzdGF0aWMgaW50IF9fbmZzX3BhZ2Vpb19hZGRfcmVxdWVzdChzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpkZXNjLAogCQkJICAgc3RydWN0IG5mc19wYWdlICpyZXEpCiB7CisJc3RydWN0IG5mc19wZ2lvX21pcnJvciAqbWlycm9yID0gbmZzX3BnaW9fY3VycmVudF9taXJyb3IoZGVzYyk7CisKIAlzdHJ1Y3QgbmZzX3BhZ2UgKnN1YnJlcTsKIAl1bnNpZ25lZCBpbnQgYnl0ZXNfbGVmdCA9IDA7CiAJdW5zaWduZWQgaW50IG9mZnNldCwgcGdiYXNlOwpAQCAtOTM0LDcgKzEwNTMsNyBAQAogCQkJbmZzX3BhZ2Vpb19kb2lvKGRlc2MpOwogCQkJaWYgKGRlc2MtPnBnX2Vycm9yIDwgMCkKIAkJCQlyZXR1cm4gMDsKLQkJCWlmIChkZXNjLT5wZ19yZWNvYWxlc2NlKQorCQkJaWYgKG1pcnJvci0+cGdfcmVjb2FsZXNjZSkKIAkJCQlyZXR1cm4gMDsKIAkJCS8qIHJldHJ5IGFkZF9yZXF1ZXN0IGZvciB0aGlzIHN1YnJlcSAqLwogCQkJbmZzX3BhZ2VfZ3JvdXBfbG9jayhyZXEsIGZhbHNlKTsKQEAgLTk3MiwxNCArMTA5MSwxNiBAQAogCiBzdGF0aWMgaW50IG5mc19kb19yZWNvYWxlc2NlKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKmRlc2MpCiB7CisJc3RydWN0IG5mc19wZ2lvX21pcnJvciAqbWlycm9yID0gbmZzX3BnaW9fY3VycmVudF9taXJyb3IoZGVzYyk7CiAJTElTVF9IRUFEKGhlYWQpOwogCiAJZG8gewotCQlsaXN0X3NwbGljZV9pbml0KCZkZXNjLT5wZ19saXN0LCAmaGVhZCk7Ci0JCWRlc2MtPnBnX2J5dGVzX3dyaXR0ZW4gLT0gZGVzYy0+cGdfY291bnQ7Ci0JCWRlc2MtPnBnX2NvdW50ID0gMDsKLQkJZGVzYy0+cGdfYmFzZSA9IDA7Ci0JCWRlc2MtPnBnX3JlY29hbGVzY2UgPSAwOworCQlsaXN0X3NwbGljZV9pbml0KCZtaXJyb3ItPnBnX2xpc3QsICZoZWFkKTsKKwkJbWlycm9yLT5wZ19ieXRlc193cml0dGVuIC09IG1pcnJvci0+cGdfY291bnQ7CisJCW1pcnJvci0+cGdfY291bnQgPSAwOworCQltaXJyb3ItPnBnX2Jhc2UgPSAwOworCQltaXJyb3ItPnBnX3JlY29hbGVzY2UgPSAwOworCiAJCWRlc2MtPnBnX21vcmVpbyA9IDA7CiAKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KCZoZWFkKSkgewpAQCAtOTkzLDExICsxMTE0LDExIEBACiAJCQkJcmV0dXJuIDA7CiAJCQlicmVhazsKIAkJfQotCX0gd2hpbGUgKGRlc2MtPnBnX3JlY29hbGVzY2UpOworCX0gd2hpbGUgKG1pcnJvci0+cGdfcmVjb2FsZXNjZSk7CiAJcmV0dXJuIDE7CiB9CiAKLWludCBuZnNfcGFnZWlvX2FkZF9yZXF1ZXN0KHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKmRlc2MsCitzdGF0aWMgaW50IG5mc19wYWdlaW9fYWRkX3JlcXVlc3RfbWlycm9yKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKmRlc2MsCiAJCXN0cnVjdCBuZnNfcGFnZSAqcmVxKQogewogCWludCByZXQ7CkBAIC0xMDEwLDkgKzExMzEsODAgQEAKIAkJCWJyZWFrOwogCQlyZXQgPSBuZnNfZG9fcmVjb2FsZXNjZShkZXNjKTsKIAl9IHdoaWxlIChyZXQpOworCiAJcmV0dXJuIHJldDsKIH0KIAoraW50IG5mc19wYWdlaW9fYWRkX3JlcXVlc3Qoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqZGVzYywKKwkJCSAgIHN0cnVjdCBuZnNfcGFnZSAqcmVxKQoreworCXUzMiBtaWR4OworCXVuc2lnbmVkIGludCBwZ2Jhc2UsIG9mZnNldCwgYnl0ZXM7CisJc3RydWN0IG5mc19wYWdlICpkdXByZXEsICpsYXN0cmVxOworCisJcGdiYXNlID0gcmVxLT53Yl9wZ2Jhc2U7CisJb2Zmc2V0ID0gcmVxLT53Yl9vZmZzZXQ7CisJYnl0ZXMgPSByZXEtPndiX2J5dGVzOworCisJbmZzX3BhZ2Vpb19zZXR1cF9taXJyb3JpbmcoZGVzYywgcmVxKTsKKworCWZvciAobWlkeCA9IDA7IG1pZHggPCBkZXNjLT5wZ19taXJyb3JfY291bnQ7IG1pZHgrKykgeworCQlpZiAobWlkeCkgeworCQkJbmZzX3BhZ2VfZ3JvdXBfbG9jayhyZXEsIGZhbHNlKTsKKworCQkJLyogZmluZCB0aGUgbGFzdCByZXF1ZXN0ICovCisJCQlmb3IgKGxhc3RyZXEgPSByZXEtPndiX2hlYWQ7CisJCQkgICAgIGxhc3RyZXEtPndiX3RoaXNfcGFnZSAhPSByZXEtPndiX2hlYWQ7CisJCQkgICAgIGxhc3RyZXEgPSBsYXN0cmVxLT53Yl90aGlzX3BhZ2UpCisJCQkJOworCisJCQlkdXByZXEgPSBuZnNfY3JlYXRlX3JlcXVlc3QocmVxLT53Yl9jb250ZXh0LAorCQkJCQlyZXEtPndiX3BhZ2UsIGxhc3RyZXEsIHBnYmFzZSwgYnl0ZXMpOworCisJCQlpZiAoSVNfRVJSKGR1cHJlcSkpIHsKKwkJCQluZnNfcGFnZV9ncm91cF91bmxvY2socmVxKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKworCQkJbmZzX2xvY2tfcmVxdWVzdChkdXByZXEpOworCQkJbmZzX3BhZ2VfZ3JvdXBfdW5sb2NrKHJlcSk7CisJCQlkdXByZXEtPndiX29mZnNldCA9IG9mZnNldDsKKwkJCWR1cHJlcS0+d2JfaW5kZXggPSByZXEtPndiX2luZGV4OworCQl9IGVsc2UKKwkJCWR1cHJlcSA9IHJlcTsKKworCQlpZiAobmZzX3BnaW9faGFzX21pcnJvcmluZyhkZXNjKSkKKwkJCWRlc2MtPnBnX21pcnJvcl9pZHggPSBtaWR4OworCQlpZiAoIW5mc19wYWdlaW9fYWRkX3JlcXVlc3RfbWlycm9yKGRlc2MsIGR1cHJlcSkpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIG5mc19wYWdlaW9fY29tcGxldGVfbWlycm9yIC0gQ29tcGxldGUgSS9PIG9uIHRoZSBjdXJyZW50IG1pcnJvciBvZiBhbgorICoJCQkJbmZzX3BhZ2Vpb19kZXNjcmlwdG9yCisgKiBAZGVzYzogcG9pbnRlciB0byBpbyBkZXNjcmlwdG9yCisgKi8KK3N0YXRpYyB2b2lkIG5mc19wYWdlaW9fY29tcGxldGVfbWlycm9yKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKmRlc2MsCisJCQkJICAgICAgIHUzMiBtaXJyb3JfaWR4KQoreworCXN0cnVjdCBuZnNfcGdpb19taXJyb3IgKm1pcnJvciA9ICZkZXNjLT5wZ19taXJyb3JzW21pcnJvcl9pZHhdOworCXUzMiByZXN0b3JlX2lkeCA9IGRlc2MtPnBnX21pcnJvcl9pZHg7CisKKwlpZiAobmZzX3BnaW9faGFzX21pcnJvcmluZyhkZXNjKSkKKwkJZGVzYy0+cGdfbWlycm9yX2lkeCA9IG1pcnJvcl9pZHg7CisJZm9yICg7OykgeworCQluZnNfcGFnZWlvX2RvaW8oZGVzYyk7CisJCWlmICghbWlycm9yLT5wZ19yZWNvYWxlc2NlKQorCQkJYnJlYWs7CisJCWlmICghbmZzX2RvX3JlY29hbGVzY2UoZGVzYykpCisJCQlicmVhazsKKwl9CisJZGVzYy0+cGdfbWlycm9yX2lkeCA9IHJlc3RvcmVfaWR4OworfQorCiAvKgogICogbmZzX3BhZ2Vpb19yZXNlbmQgLSBUcmFuc2ZlciByZXF1ZXN0cyB0byBuZXcgZGVzY3JpcHRvciBhbmQgcmVzZW5kCiAgKiBAaGRyIC0gdGhlIHBnaW8gaGVhZGVyIHRvIG1vdmUgcmVxdWVzdCBmcm9tCkBAIC0xMDQ2LDE4ICsxMjM4LDE5IEBACiBFWFBPUlRfU1lNQk9MX0dQTChuZnNfcGFnZWlvX3Jlc2VuZCk7CiAKIC8qKgotICogbmZzX3BhZ2Vpb19jb21wbGV0ZSAtIENvbXBsZXRlIEkvTyBvbiBhbiBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IKKyAqIG5mc19wYWdlaW9fY29tcGxldGUgLSBDb21wbGV0ZSBJL08gdGhlbiBjbGVhbnVwIGFuIG5mc19wYWdlaW9fZGVzY3JpcHRvcgogICogQGRlc2M6IHBvaW50ZXIgdG8gaW8gZGVzY3JpcHRvcgogICovCiB2b2lkIG5mc19wYWdlaW9fY29tcGxldGUoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqZGVzYykKIHsKLQlmb3IgKDs7KSB7Ci0JCW5mc19wYWdlaW9fZG9pbyhkZXNjKTsKLQkJaWYgKCFkZXNjLT5wZ19yZWNvYWxlc2NlKQotCQkJYnJlYWs7Ci0JCWlmICghbmZzX2RvX3JlY29hbGVzY2UoZGVzYykpCi0JCQlicmVhazsKLQl9CisJdTMyIG1pZHg7CisKKwlmb3IgKG1pZHggPSAwOyBtaWR4IDwgZGVzYy0+cGdfbWlycm9yX2NvdW50OyBtaWR4KyspCisJCW5mc19wYWdlaW9fY29tcGxldGVfbWlycm9yKGRlc2MsIG1pZHgpOworCisJaWYgKGRlc2MtPnBnX29wcy0+cGdfY2xlYW51cCkKKwkJZGVzYy0+cGdfb3BzLT5wZ19jbGVhbnVwKGRlc2MpOworCW5mc19wYWdlaW9fY2xlYW51cF9taXJyb3JpbmcoZGVzYyk7CiB9CiAKIC8qKgpAQCAtMTA3MywxMCArMTI2NiwxNyBAQAogICovCiB2b2lkIG5mc19wYWdlaW9fY29uZF9jb21wbGV0ZShzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpkZXNjLCBwZ29mZl90IGluZGV4KQogewotCWlmICghbGlzdF9lbXB0eSgmZGVzYy0+cGdfbGlzdCkpIHsKLQkJc3RydWN0IG5mc19wYWdlICpwcmV2ID0gbmZzX2xpc3RfZW50cnkoZGVzYy0+cGdfbGlzdC5wcmV2KTsKLQkJaWYgKGluZGV4ICE9IHByZXYtPndiX2luZGV4ICsgMSkKLQkJCW5mc19wYWdlaW9fY29tcGxldGUoZGVzYyk7CisJc3RydWN0IG5mc19wZ2lvX21pcnJvciAqbWlycm9yOworCXN0cnVjdCBuZnNfcGFnZSAqcHJldjsKKwl1MzIgbWlkeDsKKworCWZvciAobWlkeCA9IDA7IG1pZHggPCBkZXNjLT5wZ19taXJyb3JfY291bnQ7IG1pZHgrKykgeworCQltaXJyb3IgPSAmZGVzYy0+cGdfbWlycm9yc1ttaWR4XTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZtaXJyb3ItPnBnX2xpc3QpKSB7CisJCQlwcmV2ID0gbmZzX2xpc3RfZW50cnkobWlycm9yLT5wZ19saXN0LnByZXYpOworCQkJaWYgKGluZGV4ICE9IHByZXYtPndiX2luZGV4ICsgMSkKKwkJCQluZnNfcGFnZWlvX2NvbXBsZXRlX21pcnJvcihkZXNjLCBtaWR4KTsKKwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL3BuZnMuYyBiL2ZzL25mcy9wbmZzLmMKaW5kZXggMGE1ZGRhNC4uNGY4MDJiMCAxMDA2NDQKLS0tIGEvZnMvbmZzL3BuZnMuYworKysgYi9mcy9uZnMvcG5mcy5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAicG5mcy5oIgogI2luY2x1ZGUgImlvc3RhdC5oIgogI2luY2x1ZGUgIm5mczR0cmFjZS5oIgorI2luY2x1ZGUgImRlbGVnYXRpb24uaCIKIAogI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RCR19QTkZTCiAjZGVmaW5lIFBORlNfTEFZT1VUR0VUX1JFVFJZX1RJTUVPVVQgKDEyMCpIWikKQEAgLTUwLDYgKzUxLDEwIEBACiAgKi8KIHN0YXRpYyBMSVNUX0hFQUQocG5mc19tb2R1bGVzX3RibCk7CiAKK3N0YXRpYyBpbnQKK3BuZnNfc2VuZF9sYXlvdXRyZXR1cm4oc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sIG5mczRfc3RhdGVpZCBzdGF0ZWlkLAorCQkgICAgICAgZW51bSBwbmZzX2lvbW9kZSBpb21vZGUsIGJvb2wgc3luYyk7CisKIC8qIFJldHVybiB0aGUgcmVnaXN0ZXJlZCBwbmZzIGxheW91dCBkcml2ZXIgbW9kdWxlIG1hdGNoaW5nIGdpdmVuIGlkICovCiBzdGF0aWMgc3RydWN0IHBuZnNfbGF5b3V0ZHJpdmVyX3R5cGUgKgogZmluZF9wbmZzX2RyaXZlcl9sb2NrZWQodTMyIGlkKQpAQCAtMjM4LDYgKzI0Myw4IEBACiAJc3RydWN0IGlub2RlICppbm9kZSA9IGxvLT5wbGhfaW5vZGU7CiAKIAlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmbG8tPnBsaF9yZWZjb3VudCwgJmlub2RlLT5pX2xvY2spKSB7CisJCWlmICghbGlzdF9lbXB0eSgmbG8tPnBsaF9zZWdzKSkKKwkJCVdBUk5fT05DRSgxLCAiTkZTOiBCVUcgdW5mcmVlZCBsYXlvdXQgc2VnbWVudHMuXG4iKTsKIAkJcG5mc19kZXRhY2hfbGF5b3V0X2hkcihsbyk7CiAJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkJcG5mc19mcmVlX2xheW91dF9oZHIobG8pOwpAQCAtMzM3LDYgKzM0NCw0OCBAQAogCXJwY193YWtlX3VwKCZORlNfU0VSVkVSKGlub2RlKS0+cm9jX3JwY3dhaXRxKTsKIH0KIAorLyogUmV0dXJuIHRydWUgaWYgbGF5b3V0cmV0dXJuIGlzIG5lZWRlZCAqLworc3RhdGljIGJvb2wKK3BuZnNfbGF5b3V0X25lZWRfcmV0dXJuKHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvLAorCQkJc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcpCit7CisJc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKnM7CisKKwlpZiAoIXRlc3RfYml0KE5GU19MU0VHX0xBWU9VVFJFVFVSTiwgJmxzZWctPnBsc19mbGFncykpCisJCXJldHVybiBmYWxzZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJmxvLT5wbGhfc2VncywgcGxzX2xpc3QpCisJCWlmIChzICE9IGxzZWcgJiYgdGVzdF9iaXQoTkZTX0xTRUdfTEFZT1VUUkVUVVJOLCAmcy0+cGxzX2ZsYWdzKSkKKwkJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBwbmZzX2xheW91dHJldHVybl9iZWZvcmVfcHV0X2xzZWcoc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcsCisJCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWxvID0gbHNlZy0+cGxzX2xheW91dDsKKwlpbm9kZSA9IGxvLT5wbGhfaW5vZGU7CisKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCWlmIChwbmZzX2xheW91dF9uZWVkX3JldHVybihsbywgbHNlZykpIHsKKwkJbmZzNF9zdGF0ZWlkIHN0YXRlaWQ7CisJCWVudW0gcG5mc19pb21vZGUgaW9tb2RlOworCisJCXN0YXRlaWQgPSBsby0+cGxoX3N0YXRlaWQ7CisJCWlvbW9kZSA9IGxvLT5wbGhfcmV0dXJuX2lvbW9kZTsKKwkJLyogZGVjcmVhc2VkIGluIHBuZnNfc2VuZF9sYXlvdXRyZXR1cm4oKSAqLworCQlsby0+cGxoX2Jsb2NrX2xnZXRzKys7CisJCWxvLT5wbGhfcmV0dXJuX2lvbW9kZSA9IDA7CisJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJcG5mc19nZXRfbGF5b3V0X2hkcihsbyk7CisKKwkJLyogU2VuZCBhbiBhc3luYyBsYXlvdXRyZXR1cm4gc28gd2UgZG9udCBkZWFkbG9jayAqLworCQlwbmZzX3NlbmRfbGF5b3V0cmV0dXJuKGxvLCBzdGF0ZWlkLCBpb21vZGUsIGZhbHNlKTsKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworfQorCiB2b2lkCiBwbmZzX3B1dF9sc2VnKHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnKQogewpAQCAtMzQ5LDggKzM5OCwxNyBAQAogCWRwcmludGsoIiVzOiBsc2VnICVwIHJlZiAlZCB2YWxpZCAlZFxuIiwgX19mdW5jX18sIGxzZWcsCiAJCWF0b21pY19yZWFkKCZsc2VnLT5wbHNfcmVmY291bnQpLAogCQl0ZXN0X2JpdChORlNfTFNFR19WQUxJRCwgJmxzZWctPnBsc19mbGFncykpOworCisJLyogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIHJlZmNvdW50ICE9IDEgKi8KKwlpZiAoYXRvbWljX2FkZF91bmxlc3MoJmxzZWctPnBsc19yZWZjb3VudCwgLTEsIDEpKQorCQlyZXR1cm47CisKIAlsbyA9IGxzZWctPnBsc19sYXlvdXQ7CiAJaW5vZGUgPSBsby0+cGxoX2lub2RlOworCS8qIERvIHdlIG5lZWQgYSBsYXlvdXRyZXR1cm4/ICovCisJaWYgKHRlc3RfYml0KE5GU19MU0VHX0xBWU9VVFJFVFVSTiwgJmxzZWctPnBsc19mbGFncykpCisJCXBuZnNfbGF5b3V0cmV0dXJuX2JlZm9yZV9wdXRfbHNlZyhsc2VnLCBsbywgaW5vZGUpOworCiAJaWYgKGF0b21pY19kZWNfYW5kX2xvY2soJmxzZWctPnBsc19yZWZjb3VudCwgJmlub2RlLT5pX2xvY2spKSB7CiAJCXBuZnNfZ2V0X2xheW91dF9oZHIobG8pOwogCQlwbmZzX2xheW91dF9yZW1vdmVfbHNlZyhsbywgbHNlZyk7CkBAIC01NDMsNiArNjAxLDcgQEAKIAkJcG5mc19nZXRfbGF5b3V0X2hkcihsbyk7CiAJCXBuZnNfbGF5b3V0X2NsZWFyX2ZhaWxfYml0KGxvLCBORlNfTEFZT1VUX1JPX0ZBSUxFRCk7CiAJCXBuZnNfbGF5b3V0X2NsZWFyX2ZhaWxfYml0KGxvLCBORlNfTEFZT1VUX1JXX0ZBSUxFRCk7CisJCXBuZnNfY2xlYXJfcmV0cnlfbGF5b3V0Z2V0KGxvKTsKIAkJc3Bpbl91bmxvY2soJm5mc2ktPnZmc19pbm9kZS5pX2xvY2spOwogCQlwbmZzX2ZyZWVfbHNlZ19saXN0KCZ0bXBfbGlzdCk7CiAJCXBuZnNfcHV0X2xheW91dF9oZHIobG8pOwpAQCAtNzQwLDI1ICs3OTksMzcgQEAKIAlyZXR1cm4gIXBuZnNfc2VxaWRfaXNfbmV3ZXIoc2VxaWQsIGxvLT5wbGhfYmFycmllcik7CiB9CiAKK3N0YXRpYyBib29sCitwbmZzX2xheW91dF9yZXR1cm5pbmcoY29uc3Qgc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sCisJCSAgICAgIHN0cnVjdCBwbmZzX2xheW91dF9yYW5nZSAqcmFuZ2UpCit7CisJcmV0dXJuIHRlc3RfYml0KE5GU19MQVlPVVRfUkVUVVJOLCAmbG8tPnBsaF9mbGFncykgJiYKKwkJKGxvLT5wbGhfcmV0dXJuX2lvbW9kZSA9PSBJT01PREVfQU5ZIHx8CisJCSBsby0+cGxoX3JldHVybl9pb21vZGUgPT0gcmFuZ2UtPmlvbW9kZSk7Cit9CisKIC8qIGxnZXQgaXMgc2V0IHRvIDEgaWYgY2FsbGVkIGZyb20gaW5zaWRlIHNlbmRfbGF5b3V0Z2V0IGNhbGwgY2hhaW4gKi8KIHN0YXRpYyBib29sCi1wbmZzX2xheW91dGdldHNfYmxvY2tlZChjb25zdCBzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbywgaW50IGxnZXQpCitwbmZzX2xheW91dGdldHNfYmxvY2tlZChjb25zdCBzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbywKKwkJCXN0cnVjdCBwbmZzX2xheW91dF9yYW5nZSAqcmFuZ2UsIGludCBsZ2V0KQogewogCXJldHVybiBsby0+cGxoX2Jsb2NrX2xnZXRzIHx8CiAJCXRlc3RfYml0KE5GU19MQVlPVVRfQlVMS19SRUNBTEwsICZsby0+cGxoX2ZsYWdzKSB8fAogCQkobGlzdF9lbXB0eSgmbG8tPnBsaF9zZWdzKSAmJgotCQkgKGF0b21pY19yZWFkKCZsby0+cGxoX291dHN0YW5kaW5nKSA+IGxnZXQpKTsKKwkJIChhdG9taWNfcmVhZCgmbG8tPnBsaF9vdXRzdGFuZGluZykgPiBsZ2V0KSkgfHwKKwkJcG5mc19sYXlvdXRfcmV0dXJuaW5nKGxvLCByYW5nZSk7CiB9CiAKIGludAogcG5mc19jaG9vc2VfbGF5b3V0Z2V0X3N0YXRlaWQobmZzNF9zdGF0ZWlkICpkc3QsIHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvLAorCQkJICAgICAgc3RydWN0IHBuZnNfbGF5b3V0X3JhbmdlICpyYW5nZSwKIAkJCSAgICAgIHN0cnVjdCBuZnM0X3N0YXRlICpvcGVuX3N0YXRlKQogewogCWludCBzdGF0dXMgPSAwOwogCiAJZHByaW50aygiLS0+ICVzXG4iLCBfX2Z1bmNfXyk7CiAJc3Bpbl9sb2NrKCZsby0+cGxoX2lub2RlLT5pX2xvY2spOwotCWlmIChwbmZzX2xheW91dGdldHNfYmxvY2tlZChsbywgMSkpIHsKKwlpZiAocG5mc19sYXlvdXRnZXRzX2Jsb2NrZWQobG8sIHJhbmdlLCAxKSkgewogCQlzdGF0dXMgPSAtRUFHQUlOOwogCX0gZWxzZSBpZiAoIW5mczRfdmFsaWRfb3Blbl9zdGF0ZWlkKG9wZW5fc3RhdGUpKSB7CiAJCXN0YXR1cyA9IC1FQkFERjsKQEAgLTgyNSw3ICs4OTYsOSBAQAogCQkJcG5mc19sYXlvdXRfaW9fc2V0X2ZhaWxlZChsbywgcmFuZ2UtPmlvbW9kZSk7CiAJCX0KIAkJcmV0dXJuIE5VTEw7Ci0JfQorCX0gZWxzZQorCQlwbmZzX2xheW91dF9jbGVhcl9mYWlsX2JpdChsbywKKwkJCQlwbmZzX2lvbW9kZV90b19mYWlsX2JpdChyYW5nZS0+aW9tb2RlKSk7CiAKIAlyZXR1cm4gbHNlZzsKIH0KQEAgLTg0NSw2ICs5MTgsNDkgQEAKIAl9CiB9CiAKK3ZvaWQgcG5mc19jbGVhcl9sYXlvdXRyZXR1cm5fd2FpdGJpdChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbykKK3sKKwljbGVhcl9iaXRfdW5sb2NrKE5GU19MQVlPVVRfUkVUVVJOLCAmbG8tPnBsaF9mbGFncyk7CisJc21wX21iX19hZnRlcl9hdG9taWMoKTsKKwl3YWtlX3VwX2JpdCgmbG8tPnBsaF9mbGFncywgTkZTX0xBWU9VVF9SRVRVUk4pOworfQorCitzdGF0aWMgaW50CitwbmZzX3NlbmRfbGF5b3V0cmV0dXJuKHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvLCBuZnM0X3N0YXRlaWQgc3RhdGVpZCwKKwkJICAgICAgIGVudW0gcG5mc19pb21vZGUgaW9tb2RlLCBib29sIHN5bmMpCit7CisJc3RydWN0IGlub2RlICppbm8gPSBsby0+cGxoX2lub2RlOworCXN0cnVjdCBuZnM0X2xheW91dHJldHVybiAqbHJwOworCWludCBzdGF0dXMgPSAwOworCisJbHJwID0ga3phbGxvYyhzaXplb2YoKmxycCksIEdGUF9OT0ZTKTsKKwlpZiAodW5saWtlbHkobHJwID09IE5VTEwpKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCXNwaW5fbG9jaygmaW5vLT5pX2xvY2spOworCQlsby0+cGxoX2Jsb2NrX2xnZXRzLS07CisJCXBuZnNfY2xlYXJfbGF5b3V0cmV0dXJuX3dhaXRiaXQobG8pOworCQlycGNfd2FrZV91cCgmTkZTX1NFUlZFUihpbm8pLT5yb2NfcnBjd2FpdHEpOworCQlzcGluX3VubG9jaygmaW5vLT5pX2xvY2spOworCQlwbmZzX3B1dF9sYXlvdXRfaGRyKGxvKTsKKwkJZ290byBvdXQ7CisJfQorCisJbHJwLT5hcmdzLnN0YXRlaWQgPSBzdGF0ZWlkOworCWxycC0+YXJncy5sYXlvdXRfdHlwZSA9IE5GU19TRVJWRVIoaW5vKS0+cG5mc19jdXJyX2xkLT5pZDsKKwlscnAtPmFyZ3MuaW5vZGUgPSBpbm87CisJbHJwLT5hcmdzLnJhbmdlLmlvbW9kZSA9IGlvbW9kZTsKKwlscnAtPmFyZ3MucmFuZ2Uub2Zmc2V0ID0gMDsKKwlscnAtPmFyZ3MucmFuZ2UubGVuZ3RoID0gTkZTNF9NQVhfVUlOVDY0OworCWxycC0+YXJncy5sYXlvdXQgPSBsbzsKKwlscnAtPmNscCA9IE5GU19TRVJWRVIoaW5vKS0+bmZzX2NsaWVudDsKKwlscnAtPmNyZWQgPSBsby0+cGxoX2xjX2NyZWQ7CisKKwlzdGF0dXMgPSBuZnM0X3Byb2NfbGF5b3V0cmV0dXJuKGxycCwgc3luYyk7CitvdXQ6CisJZHByaW50aygiPC0tICVzIHN0YXR1czogJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOworCXJldHVybiBzdGF0dXM7Cit9CisKIC8qCiAgKiBJbml0aWF0ZXMgYSBMQVlPVVRSRVRVUk4oRklMRSksIGFuZCByZW1vdmVzIHRoZSBwbmZzX2xheW91dF9oZHIKICAqIHdoZW4gdGhlIGxheW91dCBzZWdtZW50IGxpc3QgaXMgZW1wdHkuCkBAIC04NTksNyArOTc1LDYgQEAKIAlzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbyA9IE5VTEw7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlubyk7CiAJTElTVF9IRUFEKHRtcF9saXN0KTsKLQlzdHJ1Y3QgbmZzNF9sYXlvdXRyZXR1cm4gKmxycDsKIAluZnM0X3N0YXRlaWQgc3RhdGVpZDsKIAlpbnQgc3RhdHVzID0gMCwgZW1wdHk7CiAKQEAgLTkwMSwyNCArMTAxNiw3IEBACiAJc3Bpbl91bmxvY2soJmluby0+aV9sb2NrKTsKIAlwbmZzX2ZyZWVfbHNlZ19saXN0KCZ0bXBfbGlzdCk7CiAKLQlscnAgPSBremFsbG9jKHNpemVvZigqbHJwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5KGxycCA9PSBOVUxMKSkgewotCQlzdGF0dXMgPSAtRU5PTUVNOwotCQlzcGluX2xvY2soJmluby0+aV9sb2NrKTsKLQkJbG8tPnBsaF9ibG9ja19sZ2V0cy0tOwotCQlzcGluX3VubG9jaygmaW5vLT5pX2xvY2spOwotCQlwbmZzX3B1dF9sYXlvdXRfaGRyKGxvKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbHJwLT5hcmdzLnN0YXRlaWQgPSBzdGF0ZWlkOwotCWxycC0+YXJncy5sYXlvdXRfdHlwZSA9IE5GU19TRVJWRVIoaW5vKS0+cG5mc19jdXJyX2xkLT5pZDsKLQlscnAtPmFyZ3MuaW5vZGUgPSBpbm87Ci0JbHJwLT5hcmdzLmxheW91dCA9IGxvOwotCWxycC0+Y2xwID0gTkZTX1NFUlZFUihpbm8pLT5uZnNfY2xpZW50OwotCWxycC0+Y3JlZCA9IGxvLT5wbGhfbGNfY3JlZDsKLQotCXN0YXR1cyA9IG5mczRfcHJvY19sYXlvdXRyZXR1cm4obHJwKTsKKwlzdGF0dXMgPSBwbmZzX3NlbmRfbGF5b3V0cmV0dXJuKGxvLCBzdGF0ZWlkLCBJT01PREVfQU5ZLCB0cnVlKTsKIG91dDoKIAlkcHJpbnRrKCI8LS0gJXMgc3RhdHVzOiAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTk1NCwzMSArMTA1Miw2MCBAQAogCiBib29sIHBuZnNfcm9jKHN0cnVjdCBpbm9kZSAqaW5vKQogeworCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm8pOworCXN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHg7CisJc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlOwogCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvOwogCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLCAqdG1wOworCW5mczRfc3RhdGVpZCBzdGF0ZWlkOwogCUxJU1RfSEVBRCh0bXBfbGlzdCk7Ci0JYm9vbCBmb3VuZCA9IGZhbHNlOworCWJvb2wgZm91bmQgPSBmYWxzZSwgbGF5b3V0cmV0dXJuID0gZmFsc2U7CiAKIAlzcGluX2xvY2soJmluby0+aV9sb2NrKTsKLQlsbyA9IE5GU19JKGlubyktPmxheW91dDsKKwlsbyA9IG5mc2ktPmxheW91dDsKIAlpZiAoIWxvIHx8ICF0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTX0xBWU9VVF9ST0MsICZsby0+cGxoX2ZsYWdzKSB8fAogCSAgICB0ZXN0X2JpdChORlNfTEFZT1VUX0JVTEtfUkVDQUxMLCAmbG8tPnBsaF9mbGFncykpCi0JCWdvdG8gb3V0X25vbGF5b3V0OworCQlnb3RvIG91dF9ub3JvYzsKKworCS8qIERvbid0IHJldHVybiBsYXlvdXQgaWYgd2UgaG9sZCBhIGRlbGVnYXRpb24gKi8KKwlpZiAobmZzNF9jaGVja19kZWxlZ2F0aW9uKGlubywgRk1PREVfUkVBRCkpCisJCWdvdG8gb3V0X25vcm9jOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjdHgsICZuZnNpLT5vcGVuX2ZpbGVzLCBsaXN0KSB7CisJCXN0YXRlID0gY3R4LT5zdGF0ZTsKKwkJLyogRG9uJ3QgcmV0dXJuIGxheW91dCBpZiB0aGVyZSBpcyBvcGVuIGZpbGUgc3RhdGUgKi8KKwkJaWYgKHN0YXRlICE9IE5VTEwgJiYgc3RhdGUtPnN0YXRlICE9IDApCisJCQlnb3RvIG91dF9ub3JvYzsKKwl9CisKKwlwbmZzX2NsZWFyX3JldHJ5X2xheW91dGdldChsbyk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxzZWcsIHRtcCwgJmxvLT5wbGhfc2VncywgcGxzX2xpc3QpCiAJCWlmICh0ZXN0X2JpdChORlNfTFNFR19ST0MsICZsc2VnLT5wbHNfZmxhZ3MpKSB7CiAJCQltYXJrX2xzZWdfaW52YWxpZChsc2VnLCAmdG1wX2xpc3QpOwogCQkJZm91bmQgPSB0cnVlOwogCQl9CiAJaWYgKCFmb3VuZCkKLQkJZ290byBvdXRfbm9sYXlvdXQ7CisJCWdvdG8gb3V0X25vcm9jOwogCWxvLT5wbGhfYmxvY2tfbGdldHMrKzsKIAlwbmZzX2dldF9sYXlvdXRfaGRyKGxvKTsgLyogbWF0Y2hlZCBpbiBwbmZzX3JvY19yZWxlYXNlICovCiAJc3Bpbl91bmxvY2soJmluby0+aV9sb2NrKTsKIAlwbmZzX2ZyZWVfbHNlZ19saXN0KCZ0bXBfbGlzdCk7CiAJcmV0dXJuIHRydWU7CiAKLW91dF9ub2xheW91dDoKK291dF9ub3JvYzoKKwlpZiAobG8pIHsKKwkJc3RhdGVpZCA9IGxvLT5wbGhfc3RhdGVpZDsKKwkJbGF5b3V0cmV0dXJuID0KKwkJCXRlc3RfYW5kX2NsZWFyX2JpdChORlNfTEFZT1VUX1JFVFVSTl9CRUZPUkVfQ0xPU0UsCisJCQkJCSAgICZsby0+cGxoX2ZsYWdzKTsKKwkJaWYgKGxheW91dHJldHVybikgeworCQkJbG8tPnBsaF9ibG9ja19sZ2V0cysrOworCQkJcG5mc19nZXRfbGF5b3V0X2hkcihsbyk7CisJCX0KKwl9CiAJc3Bpbl91bmxvY2soJmluby0+aV9sb2NrKTsKKwlpZiAobGF5b3V0cmV0dXJuKQorCQlwbmZzX3NlbmRfbGF5b3V0cmV0dXJuKGxvLCBzdGF0ZWlkLCBJT01PREVfQU5ZLCB0cnVlKTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEwMTMsOCArMTE0MCw5IEBACiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlubyk7CiAJc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG87CiAJc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWc7CisJbmZzNF9zdGF0ZWlkIHN0YXRlaWQ7CiAJdTMyIGN1cnJlbnRfc2VxaWQ7Ci0JYm9vbCBmb3VuZCA9IGZhbHNlOworCWJvb2wgZm91bmQgPSBmYWxzZSwgbGF5b3V0cmV0dXJuID0gZmFsc2U7CiAKIAlzcGluX2xvY2soJmluby0+aV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxzZWcsICZuZnNpLT5sYXlvdXQtPnBsaF9zZWdzLCBwbHNfbGlzdCkKQEAgLTEwMzEsNyArMTE1OSwyMSBAQAogCSAqLwogCSpiYXJyaWVyID0gY3VycmVudF9zZXFpZCArIGF0b21pY19yZWFkKCZsby0+cGxoX291dHN0YW5kaW5nKTsKIG91dDoKKwlpZiAoIWZvdW5kKSB7CisJCXN0YXRlaWQgPSBsby0+cGxoX3N0YXRlaWQ7CisJCWxheW91dHJldHVybiA9CisJCQl0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTX0xBWU9VVF9SRVRVUk5fQkVGT1JFX0NMT1NFLAorCQkJCQkgICAmbG8tPnBsaF9mbGFncyk7CisJCWlmIChsYXlvdXRyZXR1cm4pIHsKKwkJCWxvLT5wbGhfYmxvY2tfbGdldHMrKzsKKwkJCXBuZnNfZ2V0X2xheW91dF9oZHIobG8pOworCQl9CisJfQogCXNwaW5fdW5sb2NrKCZpbm8tPmlfbG9jayk7CisJaWYgKGxheW91dHJldHVybikgeworCQlycGNfc2xlZXBfb24oJk5GU19TRVJWRVIoaW5vKS0+cm9jX3JwY3dhaXRxLCB0YXNrLCBOVUxMKTsKKwkJcG5mc19zZW5kX2xheW91dHJldHVybihsbywgc3RhdGVpZCwgSU9NT0RFX0FOWSwgZmFsc2UpOworCX0KIAlyZXR1cm4gZm91bmQ7CiB9CiAKQEAgLTExNzgsNiArMTMyMCw3IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxzZWcsICZsby0+cGxoX3NlZ3MsIHBsc19saXN0KSB7CiAJCWlmICh0ZXN0X2JpdChORlNfTFNFR19WQUxJRCwgJmxzZWctPnBsc19mbGFncykgJiYKKwkJICAgICF0ZXN0X2JpdChORlNfTFNFR19MQVlPVVRSRVRVUk4sICZsc2VnLT5wbHNfZmxhZ3MpICYmCiAJCSAgICBwbmZzX2xzZWdfcmFuZ2VfbWF0Y2goJmxzZWctPnBsc19yYW5nZSwgcmFuZ2UpKSB7CiAJCQlyZXQgPSBwbmZzX2dldF9sc2VnKGxzZWcpOwogCQkJYnJlYWs7CkBAIC0xMjY2LDYgKzE0MDksMzUgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBzdG9wIHdhaXRpbmcgaWYgc29tZW9uZSBjbGVhcnMgTkZTX0xBWU9VVF9SRVRSWV9MQVlPVVRHRVQgYml0LiAqLworc3RhdGljIGludCBwbmZzX2xheW91dGdldF9yZXRyeV9iaXRfd2FpdChzdHJ1Y3Qgd2FpdF9iaXRfa2V5ICprZXkpCit7CisJaWYgKCF0ZXN0X2JpdChORlNfTEFZT1VUX1JFVFJZX0xBWU9VVEdFVCwga2V5LT5mbGFncykpCisJCXJldHVybiAxOworCXJldHVybiBuZnNfd2FpdF9iaXRfa2lsbGFibGUoa2V5KTsKK30KKworc3RhdGljIGJvb2wgcG5mc19wcmVwYXJlX3RvX3JldHJ5X2xheW91dGdldChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbykKK3sKKwkvKgorCSAqIHNlbmQgbGF5b3V0Y29tbWl0IGFzIGl0IGNhbiBob2xkIHVwIGxheW91dHJldHVybiBkdWUgdG8gbHNlZworCSAqIHJlZmVyZW5jZQorCSAqLworCXBuZnNfbGF5b3V0Y29tbWl0X2lub2RlKGxvLT5wbGhfaW5vZGUsIGZhbHNlKTsKKwlyZXR1cm4gIXdhaXRfb25fYml0X2FjdGlvbigmbG8tPnBsaF9mbGFncywgTkZTX0xBWU9VVF9SRVRVUk4sCisJCQkJICAgcG5mc19sYXlvdXRnZXRfcmV0cnlfYml0X3dhaXQsCisJCQkJICAgVEFTS19VTklOVEVSUlVQVElCTEUpOworfQorCitzdGF0aWMgdm9pZCBwbmZzX2NsZWFyX2ZpcnN0X2xheW91dGdldChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbykKK3sKKwl1bnNpZ25lZCBsb25nICpiaXRsb2NrID0gJmxvLT5wbGhfZmxhZ3M7CisKKwljbGVhcl9iaXRfdW5sb2NrKE5GU19MQVlPVVRfRklSU1RfTEFZT1VUR0VULCBiaXRsb2NrKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOworCXdha2VfdXBfYml0KGJpdGxvY2ssIE5GU19MQVlPVVRfRklSU1RfTEFZT1VUR0VUKTsKK30KKwogLyoKICAqIExheW91dCBzZWdtZW50IGlzIHJldHJlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIgaWYgbm90IGNhY2hlZC4KICAqIFRoZSBhcHByb3ByaWF0ZSBsYXlvdXQgc2VnbWVudCBpcyByZWZlcmVuY2VkIGFuZCByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgpAQCAtMTI5Niw2ICsxNDY4LDggQEAKIAlpZiAocG5mc193aXRoaW5fbWRzdGhyZXNob2xkKGN0eCwgaW5vLCBpb21vZGUpKQogCQlnb3RvIG91dDsKIAorbG9va3VwX2FnYWluOgorCWZpcnN0ID0gZmFsc2U7CiAJc3Bpbl9sb2NrKCZpbm8tPmlfbG9jayk7CiAJbG8gPSBwbmZzX2ZpbmRfYWxsb2NfbGF5b3V0KGlubywgY3R4LCBnZnBfZmxhZ3MpOwogCWlmIChsbyA9PSBOVUxMKSB7CkBAIC0xMzEwLDI3ICsxNDg0LDYyIEBACiAJfQogCiAJLyogaWYgTEFZT1VUR0VUIGFscmVhZHkgZmFpbGVkIG9uY2Ugd2UgZG9uJ3QgdHJ5IGFnYWluICovCi0JaWYgKHBuZnNfbGF5b3V0X2lvX3Rlc3RfZmFpbGVkKGxvLCBpb21vZGUpKQorCWlmIChwbmZzX2xheW91dF9pb190ZXN0X2ZhaWxlZChsbywgaW9tb2RlKSAmJgorCSAgICAhcG5mc19zaG91bGRfcmV0cnlfbGF5b3V0Z2V0KGxvKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBsYXlvdXQgZm9yIHRoZSBnaXZlbiByYW5nZSBhbHJlYWR5IGV4aXN0cyAqLwotCWxzZWcgPSBwbmZzX2ZpbmRfbHNlZyhsbywgJmFyZyk7Ci0JaWYgKGxzZWcpCi0JCWdvdG8gb3V0X3VubG9jazsKKwlmaXJzdCA9IGxpc3RfZW1wdHkoJmxvLT5wbGhfc2Vncyk7CisJaWYgKGZpcnN0KSB7CisJCS8qIFRoZSBmaXJzdCBsYXlvdXRnZXQgZm9yIHRoZSBmaWxlLiBOZWVkIHRvIHNlcmlhbGl6ZSBwZXIKKwkJICogUkZDIDU2NjEgRXJyYXRhIDMyMDguCisJCSAqLworCQlpZiAodGVzdF9hbmRfc2V0X2JpdChORlNfTEFZT1VUX0ZJUlNUX0xBWU9VVEdFVCwKKwkJCQkgICAgICZsby0+cGxoX2ZsYWdzKSkgeworCQkJc3Bpbl91bmxvY2soJmluby0+aV9sb2NrKTsKKwkJCXdhaXRfb25fYml0KCZsby0+cGxoX2ZsYWdzLCBORlNfTEFZT1VUX0ZJUlNUX0xBWU9VVEdFVCwKKwkJCQkgICAgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQkJcG5mc19wdXRfbGF5b3V0X2hkcihsbyk7CisJCQlnb3RvIGxvb2t1cF9hZ2FpbjsKKwkJfQorCX0gZWxzZSB7CisJCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgbGF5b3V0IGZvciB0aGUgZ2l2ZW4gcmFuZ2UKKwkJICogYWxyZWFkeSBleGlzdHMKKwkJICovCisJCWxzZWcgPSBwbmZzX2ZpbmRfbHNlZyhsbywgJmFyZyk7CisJCWlmIChsc2VnKQorCQkJZ290byBvdXRfdW5sb2NrOworCX0KIAotCWlmIChwbmZzX2xheW91dGdldHNfYmxvY2tlZChsbywgMCkpCisJLyoKKwkgKiBCZWNhdXNlIHdlIGZyZWUgbHNlZ3MgYmVmb3JlIHNlbmRpbmcgTEFZT1VUUkVUVVJOLCB3ZSBuZWVkIHRvIHdhaXQKKwkgKiBmb3IgTEFZT1VUUkVUVVJOIGV2ZW4gaWYgZmlyc3QgaXMgdHJ1ZS4KKwkgKi8KKwlpZiAoIWxzZWcgJiYgcG5mc19zaG91bGRfcmV0cnlfbGF5b3V0Z2V0KGxvKSAmJgorCSAgICB0ZXN0X2JpdChORlNfTEFZT1VUX1JFVFVSTiwgJmxvLT5wbGhfZmxhZ3MpKSB7CisJCXNwaW5fdW5sb2NrKCZpbm8tPmlfbG9jayk7CisJCWRwcmludGsoIiVzIHdhaXQgZm9yIGxheW91dHJldHVyblxuIiwgX19mdW5jX18pOworCQlpZiAocG5mc19wcmVwYXJlX3RvX3JldHJ5X2xheW91dGdldChsbykpIHsKKwkJCWlmIChmaXJzdCkKKwkJCQlwbmZzX2NsZWFyX2ZpcnN0X2xheW91dGdldChsbyk7CisJCQlwbmZzX3B1dF9sYXlvdXRfaGRyKGxvKTsKKwkJCWRwcmludGsoIiVzIHJldHJ5aW5nXG4iLCBfX2Z1bmNfXyk7CisJCQlnb3RvIGxvb2t1cF9hZ2FpbjsKKwkJfQorCQlnb3RvIG91dF9wdXRfbGF5b3V0X2hkcjsKKwl9CisKKwlpZiAocG5mc19sYXlvdXRnZXRzX2Jsb2NrZWQobG8sICZhcmcsIDApKQogCQlnb3RvIG91dF91bmxvY2s7CiAJYXRvbWljX2luYygmbG8tPnBsaF9vdXRzdGFuZGluZyk7Ci0KLQlmaXJzdCA9IGxpc3RfZW1wdHkoJmxvLT5wbGhfbGF5b3V0cykgPyB0cnVlIDogZmFsc2U7CiAJc3Bpbl91bmxvY2soJmluby0+aV9sb2NrKTsKIAotCWlmIChmaXJzdCkgeworCWlmIChsaXN0X2VtcHR5KCZsby0+cGxoX2xheW91dHMpKSB7CiAJCS8qIFRoZSBsbyBtdXN0IGJlIG9uIHRoZSBjbHAgbGlzdCBpZiB0aGVyZSBpcyBhbnkKIAkJICogY2hhbmNlIG9mIGEgQ0JfTEFZT1VUUkVDQUxMKEZJTEUpIGNvbWluZyBpbi4KIAkJICovCiAJCXNwaW5fbG9jaygmY2xwLT5jbF9sb2NrKTsKLQkJbGlzdF9hZGRfdGFpbCgmbG8tPnBsaF9sYXlvdXRzLCAmc2VydmVyLT5sYXlvdXRzKTsKKwkJaWYgKGxpc3RfZW1wdHkoJmxvLT5wbGhfbGF5b3V0cykpCisJCQlsaXN0X2FkZF90YWlsKCZsby0+cGxoX2xheW91dHMsICZzZXJ2ZXItPmxheW91dHMpOwogCQlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKIAl9CiAKQEAgLTEzNDMsOCArMTU1MiwxMSBAQAogCQlhcmcubGVuZ3RoID0gUEFHRV9DQUNIRV9BTElHTihhcmcubGVuZ3RoKTsKIAogCWxzZWcgPSBzZW5kX2xheW91dGdldChsbywgY3R4LCAmYXJnLCBnZnBfZmxhZ3MpOworCXBuZnNfY2xlYXJfcmV0cnlfbGF5b3V0Z2V0KGxvKTsKIAlhdG9taWNfZGVjKCZsby0+cGxoX291dHN0YW5kaW5nKTsKIG91dF9wdXRfbGF5b3V0X2hkcjoKKwlpZiAoZmlyc3QpCisJCXBuZnNfY2xlYXJfZmlyc3RfbGF5b3V0Z2V0KGxvKTsKIAlwbmZzX3B1dF9sYXlvdXRfaGRyKGxvKTsKIG91dDoKIAlkcHJpbnRrKCIlczogaW5vZGUgJXMvJWxsdSBwTkZTIGxheW91dCBzZWdtZW50ICVzIGZvciAiCkBAIC0xMzkzLDcgKzE2MDUsNyBAQAogCQlnb3RvIG91dF9mb3JnZXRfcmVwbHk7CiAJfQogCi0JaWYgKHBuZnNfbGF5b3V0Z2V0c19ibG9ja2VkKGxvLCAxKSkgeworCWlmIChwbmZzX2xheW91dGdldHNfYmxvY2tlZChsbywgJmxncC0+YXJncy5yYW5nZSwgMSkpIHsKIAkJZHByaW50aygiJXMgZm9yZ2V0IHJlcGx5IGR1ZSB0byBzdGF0ZVxuIiwgX19mdW5jX18pOwogCQlnb3RvIG91dF9mb3JnZXRfcmVwbHk7CiAJfQpAQCAtMTQ0MCwyNCArMTY1Miw3OSBAQAogCWdvdG8gb3V0OwogfQogCitzdGF0aWMgdm9pZAorcG5mc19tYXJrX21hdGNoaW5nX2xzZWdzX3JldHVybihzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbywKKwkJCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXBfbGlzdCwKKwkJCQlzdHJ1Y3QgcG5mc19sYXlvdXRfcmFuZ2UgKnJldHVybl9yYW5nZSkKK3sKKwlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywgKm5leHQ7CisKKwlkcHJpbnRrKCIlczpCZWdpbiBsbyAlcFxuIiwgX19mdW5jX18sIGxvKTsKKworCWlmIChsaXN0X2VtcHR5KCZsby0+cGxoX3NlZ3MpKQorCQlyZXR1cm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobHNlZywgbmV4dCwgJmxvLT5wbGhfc2VncywgcGxzX2xpc3QpCisJCWlmIChzaG91bGRfZnJlZV9sc2VnKCZsc2VnLT5wbHNfcmFuZ2UsIHJldHVybl9yYW5nZSkpIHsKKwkJCWRwcmludGsoIiVzOiBtYXJraW5nIGxzZWcgJXAgaW9tb2RlICVkICIKKwkJCQkib2Zmc2V0ICVsbHUgbGVuZ3RoICVsbHVcbiIsIF9fZnVuY19fLAorCQkJCWxzZWcsIGxzZWctPnBsc19yYW5nZS5pb21vZGUsCisJCQkJbHNlZy0+cGxzX3JhbmdlLm9mZnNldCwKKwkJCQlsc2VnLT5wbHNfcmFuZ2UubGVuZ3RoKTsKKwkJCXNldF9iaXQoTkZTX0xTRUdfTEFZT1VUUkVUVVJOLCAmbHNlZy0+cGxzX2ZsYWdzKTsKKwkJCW1hcmtfbHNlZ19pbnZhbGlkKGxzZWcsIHRtcF9saXN0KTsKKwkJfQorfQorCit2b2lkIHBuZnNfZXJyb3JfbWFya19sYXlvdXRfZm9yX3JldHVybihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZykKK3sKKwlzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbyA9IE5GU19JKGlub2RlKS0+bGF5b3V0OworCWludCBpb21vZGUgPSBwbmZzX2lvbW9kZV90b19mYWlsX2JpdChsc2VnLT5wbHNfcmFuZ2UuaW9tb2RlKTsKKwlzdHJ1Y3QgcG5mc19sYXlvdXRfcmFuZ2UgcmFuZ2UgPSB7CisJCS5pb21vZGUgPSBsc2VnLT5wbHNfcmFuZ2UuaW9tb2RlLAorCQkub2Zmc2V0ID0gMCwKKwkJLmxlbmd0aCA9IE5GUzRfTUFYX1VJTlQ2NCwKKwl9OworCUxJU1RfSEVBRChmcmVlX21lKTsKKworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJLyogc2V0IGZhaWx1cmUgYml0IHNvIHRoYXQgcG5mcyBwYXRoIHdpbGwgYmUgcmV0cmllZCBsYXRlciAqLworCXBuZnNfbGF5b3V0X3NldF9mYWlsX2JpdChsbywgaW9tb2RlKTsKKwlzZXRfYml0KE5GU19MQVlPVVRfUkVUVVJOLCAmbG8tPnBsaF9mbGFncyk7CisJaWYgKGxvLT5wbGhfcmV0dXJuX2lvbW9kZSA9PSAwKQorCQlsby0+cGxoX3JldHVybl9pb21vZGUgPSByYW5nZS5pb21vZGU7CisJZWxzZSBpZiAobG8tPnBsaF9yZXR1cm5faW9tb2RlICE9IHJhbmdlLmlvbW9kZSkKKwkJbG8tPnBsaF9yZXR1cm5faW9tb2RlID0gSU9NT0RFX0FOWTsKKwkvKgorCSAqIG1hcmsgYWxsIG1hdGNoaW5nIGxzZWdzIHNvIHRoYXQgd2UgYXJlIHN1cmUgdG8gaGF2ZSBubyBsaXZlCisJICogc2VnbWVudHMgYXQgaGFuZCB3aGVuIHNlbmRpbmcgbGF5b3V0cmV0dXJuLiBTZWUgcG5mc19wdXRfbHNlZygpCisJICogZm9yIGhvdyBpdCB3b3Jrcy4KKwkgKi8KKwlwbmZzX21hcmtfbWF0Y2hpbmdfbHNlZ3NfcmV0dXJuKGxvLCAmZnJlZV9tZSwgJnJhbmdlKTsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJcG5mc19mcmVlX2xzZWdfbGlzdCgmZnJlZV9tZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbmZzX2Vycm9yX21hcmtfbGF5b3V0X2Zvcl9yZXR1cm4pOworCiB2b2lkCiBwbmZzX2dlbmVyaWNfcGdfaW5pdF9yZWFkKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKnBnaW8sIHN0cnVjdCBuZnNfcGFnZSAqcmVxKQogewogCXU2NCByZF9zaXplID0gcmVxLT53Yl9ieXRlczsKIAotCVdBUk5fT05fT05DRShwZ2lvLT5wZ19sc2VnICE9IE5VTEwpOworCWlmIChwZ2lvLT5wZ19sc2VnID09IE5VTEwpIHsKKwkJaWYgKHBnaW8tPnBnX2RyZXEgPT0gTlVMTCkKKwkJCXJkX3NpemUgPSBpX3NpemVfcmVhZChwZ2lvLT5wZ19pbm9kZSkgLSByZXFfb2Zmc2V0KHJlcSk7CisJCWVsc2UKKwkJCXJkX3NpemUgPSBuZnNfZHJlcV9ieXRlc19sZWZ0KHBnaW8tPnBnX2RyZXEpOwogCi0JaWYgKHBnaW8tPnBnX2RyZXEgPT0gTlVMTCkKLQkJcmRfc2l6ZSA9IGlfc2l6ZV9yZWFkKHBnaW8tPnBnX2lub2RlKSAtIHJlcV9vZmZzZXQocmVxKTsKLQllbHNlCi0JCXJkX3NpemUgPSBuZnNfZHJlcV9ieXRlc19sZWZ0KHBnaW8tPnBnX2RyZXEpOwotCi0JcGdpby0+cGdfbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChwZ2lvLT5wZ19pbm9kZSwKLQkJCQkJICAgcmVxLT53Yl9jb250ZXh0LAotCQkJCQkgICByZXFfb2Zmc2V0KHJlcSksCi0JCQkJCSAgIHJkX3NpemUsCi0JCQkJCSAgIElPTU9ERV9SRUFELAotCQkJCQkgICBHRlBfS0VSTkVMKTsKKwkJcGdpby0+cGdfbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChwZ2lvLT5wZ19pbm9kZSwKKwkJCQkJCSAgIHJlcS0+d2JfY29udGV4dCwKKwkJCQkJCSAgIHJlcV9vZmZzZXQocmVxKSwKKwkJCQkJCSAgIHJkX3NpemUsCisJCQkJCQkgICBJT01PREVfUkVBRCwKKwkJCQkJCSAgIEdGUF9LRVJORUwpOworCX0KIAkvKiBJZiBubyBsc2VnLCBmYWxsIGJhY2sgdG8gcmVhZCB0aHJvdWdoIG1kcyAqLwogCWlmIChwZ2lvLT5wZ19sc2VnID09IE5VTEwpCiAJCW5mc19wYWdlaW9fcmVzZXRfcmVhZF9tZHMocGdpbyk7CkBAIC0xNDY5LDI3ICsxNzM2LDM2IEBACiBwbmZzX2dlbmVyaWNfcGdfaW5pdF93cml0ZShzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpwZ2lvLAogCQkJICAgc3RydWN0IG5mc19wYWdlICpyZXEsIHU2NCB3Yl9zaXplKQogewotCVdBUk5fT05fT05DRShwZ2lvLT5wZ19sc2VnICE9IE5VTEwpOwotCi0JcGdpby0+cGdfbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChwZ2lvLT5wZ19pbm9kZSwKLQkJCQkJICAgcmVxLT53Yl9jb250ZXh0LAotCQkJCQkgICByZXFfb2Zmc2V0KHJlcSksCi0JCQkJCSAgIHdiX3NpemUsCi0JCQkJCSAgIElPTU9ERV9SVywKLQkJCQkJICAgR0ZQX05PRlMpOworCWlmIChwZ2lvLT5wZ19sc2VnID09IE5VTEwpCisJCXBnaW8tPnBnX2xzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQocGdpby0+cGdfaW5vZGUsCisJCQkJCQkgICByZXEtPndiX2NvbnRleHQsCisJCQkJCQkgICByZXFfb2Zmc2V0KHJlcSksCisJCQkJCQkgICB3Yl9zaXplLAorCQkJCQkJICAgSU9NT0RFX1JXLAorCQkJCQkJICAgR0ZQX05PRlMpOwogCS8qIElmIG5vIGxzZWcsIGZhbGwgYmFjayB0byB3cml0ZSB0aHJvdWdoIG1kcyAqLwogCWlmIChwZ2lvLT5wZ19sc2VnID09IE5VTEwpCiAJCW5mc19wYWdlaW9fcmVzZXRfd3JpdGVfbWRzKHBnaW8pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocG5mc19nZW5lcmljX3BnX2luaXRfd3JpdGUpOwogCit2b2lkCitwbmZzX2dlbmVyaWNfcGdfY2xlYW51cChzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpkZXNjKQoreworCWlmIChkZXNjLT5wZ19sc2VnKSB7CisJCXBuZnNfcHV0X2xzZWcoZGVzYy0+cGdfbHNlZyk7CisJCWRlc2MtPnBnX2xzZWcgPSBOVUxMOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBuZnNfZ2VuZXJpY19wZ19jbGVhbnVwKTsKKwogLyoKICAqIFJldHVybiAwIGlmIEByZXEgY2Fubm90IGJlIGNvYWxlc2NlZCBpbnRvIEBwZ2lvLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBudW1iZXIKICAqIG9mIGJ5dGVzIChtYXhpbXVtIEByZXEtPndiX2J5dGVzKSB0aGF0IGNhbiBiZSBjb2FsZXNjZWQuCiAgKi8KIHNpemVfdAotcG5mc19nZW5lcmljX3BnX3Rlc3Qoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqcGdpbywgc3RydWN0IG5mc19wYWdlICpwcmV2LAotCQkgICAgIHN0cnVjdCBuZnNfcGFnZSAqcmVxKQorcG5mc19nZW5lcmljX3BnX3Rlc3Qoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqcGdpbywKKwkJICAgICBzdHJ1Y3QgbmZzX3BhZ2UgKnByZXYsIHN0cnVjdCBuZnNfcGFnZSAqcmVxKQogewogCXVuc2lnbmVkIGludCBzaXplOwogCXU2NCBzZWdfZW5kLCByZXFfc3RhcnQsIHNlZ19sZWZ0OwpAQCAtMTUxMywxMCArMTc4OSwxNiBAQAogCQlzZWdfZW5kID0gZW5kX29mZnNldChwZ2lvLT5wZ19sc2VnLT5wbHNfcmFuZ2Uub2Zmc2V0LAogCQkJCSAgICAgcGdpby0+cGdfbHNlZy0+cGxzX3JhbmdlLmxlbmd0aCk7CiAJCXJlcV9zdGFydCA9IHJlcV9vZmZzZXQocmVxKTsKLQkJV0FSTl9PTl9PTkNFKHJlcV9zdGFydCA+IHNlZ19lbmQpOworCQlXQVJOX09OX09OQ0UocmVxX3N0YXJ0ID49IHNlZ19lbmQpOwogCQkvKiBzdGFydCBvZiByZXF1ZXN0IGlzIHBhc3QgdGhlIGxhc3QgYnl0ZSBvZiB0aGlzIHNlZ21lbnQgKi8KLQkJaWYgKHJlcV9zdGFydCA+PSBzZWdfZW5kKQorCQlpZiAocmVxX3N0YXJ0ID49IHNlZ19lbmQpIHsKKwkJCS8qIHJlZmVyZW5jZSB0aGUgbmV3IGxzZWcgKi8KKwkJCWlmIChwZ2lvLT5wZ19vcHMtPnBnX2NsZWFudXApCisJCQkJcGdpby0+cGdfb3BzLT5wZ19jbGVhbnVwKHBnaW8pOworCQkJaWYgKHBnaW8tPnBnX29wcy0+cGdfaW5pdCkKKwkJCQlwZ2lvLT5wZ19vcHMtPnBnX2luaXQocGdpbywgcmVxKTsKIAkJCXJldHVybiAwOworCQl9CiAKIAkJLyogYWRqdXN0ICdzaXplJyBpZmYgdGhlcmUgYXJlIGZld2VyIGJ5dGVzIGxlZnQgaW4gdGhlCiAJCSAqIHNlZ21lbnQgdGhhbiB3aGF0IG5mc19nZW5lcmljX3BnX3Rlc3QgcmV0dXJuZWQgKi8KQEAgLTE1NzEsMTAgKzE4NTMsMTIgQEAKIHBuZnNfd3JpdGVfdGhyb3VnaF9tZHMoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqZGVzYywKIAkJc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqaGRyKQogeworCXN0cnVjdCBuZnNfcGdpb19taXJyb3IgKm1pcnJvciA9IG5mc19wZ2lvX2N1cnJlbnRfbWlycm9yKGRlc2MpOworCiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KE5GU19JT0hEUl9SRURPLCAmaGRyLT5mbGFncykpIHsKLQkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZoZHItPnBhZ2VzLCAmZGVzYy0+cGdfbGlzdCk7CisJCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmaGRyLT5wYWdlcywgJm1pcnJvci0+cGdfbGlzdCk7CiAJCW5mc19wYWdlaW9fcmVzZXRfd3JpdGVfbWRzKGRlc2MpOwotCQlkZXNjLT5wZ19yZWNvYWxlc2NlID0gMTsKKwkJbWlycm9yLT5wZ19yZWNvYWxlc2NlID0gMTsKIAl9CiAJbmZzX3BnaW9fZGF0YV9kZXN0cm95KGhkcik7CiB9CkBAIC0xNjA4LDExICsxODkyLDkgQEAKIAlzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZyA9IGRlc2MtPnBnX2xzZWc7CiAJZW51bSBwbmZzX3RyeV9zdGF0dXMgdHJ5cG5mczsKIAotCWRlc2MtPnBnX2xzZWcgPSBOVUxMOwogCXRyeXBuZnMgPSBwbmZzX3RyeV90b193cml0ZV9kYXRhKGhkciwgY2FsbF9vcHMsIGxzZWcsIGhvdyk7CiAJaWYgKHRyeXBuZnMgPT0gUE5GU19OT1RfQVRURU1QVEVEKQogCQlwbmZzX3dyaXRlX3Rocm91Z2hfbWRzKGRlc2MsIGhkcik7Ci0JcG5mc19wdXRfbHNlZyhsc2VnKTsKIH0KIAogc3RhdGljIHZvaWQgcG5mc193cml0ZWhkcl9mcmVlKHN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkcikKQEAgLTE2MjUsMjQgKzE5MDcsMjMgQEAKIGludAogcG5mc19nZW5lcmljX3BnX3dyaXRlcGFnZXMoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqZGVzYykKIHsKKwlzdHJ1Y3QgbmZzX3BnaW9fbWlycm9yICptaXJyb3IgPSBuZnNfcGdpb19jdXJyZW50X21pcnJvcihkZXNjKTsKKwogCXN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkcjsKIAlpbnQgcmV0OwogCiAJaGRyID0gbmZzX3BnaW9faGVhZGVyX2FsbG9jKGRlc2MtPnBnX3J3X29wcyk7CiAJaWYgKCFoZHIpIHsKLQkJZGVzYy0+cGdfY29tcGxldGlvbl9vcHMtPmVycm9yX2NsZWFudXAoJmRlc2MtPnBnX2xpc3QpOwotCQlwbmZzX3B1dF9sc2VnKGRlc2MtPnBnX2xzZWcpOwotCQlkZXNjLT5wZ19sc2VnID0gTlVMTDsKKwkJZGVzYy0+cGdfY29tcGxldGlvbl9vcHMtPmVycm9yX2NsZWFudXAoJm1pcnJvci0+cGdfbGlzdCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAluZnNfcGdoZWFkZXJfaW5pdChkZXNjLCBoZHIsIHBuZnNfd3JpdGVoZHJfZnJlZSk7CisKIAloZHItPmxzZWcgPSBwbmZzX2dldF9sc2VnKGRlc2MtPnBnX2xzZWcpOwogCXJldCA9IG5mc19nZW5lcmljX3BnaW8oZGVzYywgaGRyKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJcG5mc19wdXRfbHNlZyhkZXNjLT5wZ19sc2VnKTsKLQkJZGVzYy0+cGdfbHNlZyA9IE5VTEw7Ci0JfSBlbHNlCisJaWYgKCFyZXQpCiAJCXBuZnNfZG9fd3JpdGUoZGVzYywgaGRyLCBkZXNjLT5wZ19pb2ZsYWdzKTsKKwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwbmZzX2dlbmVyaWNfcGdfd3JpdGVwYWdlcyk7CkBAIC0xNjg3LDEwICsxOTY4LDEyIEBACiBwbmZzX3JlYWRfdGhyb3VnaF9tZHMoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqZGVzYywKIAkJc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqaGRyKQogeworCXN0cnVjdCBuZnNfcGdpb19taXJyb3IgKm1pcnJvciA9IG5mc19wZ2lvX2N1cnJlbnRfbWlycm9yKGRlc2MpOworCiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KE5GU19JT0hEUl9SRURPLCAmaGRyLT5mbGFncykpIHsKLQkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZoZHItPnBhZ2VzLCAmZGVzYy0+cGdfbGlzdCk7CisJCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmaGRyLT5wYWdlcywgJm1pcnJvci0+cGdfbGlzdCk7CiAJCW5mc19wYWdlaW9fcmVzZXRfcmVhZF9tZHMoZGVzYyk7Ci0JCWRlc2MtPnBnX3JlY29hbGVzY2UgPSAxOworCQltaXJyb3ItPnBnX3JlY29hbGVzY2UgPSAxOwogCX0KIAluZnNfcGdpb19kYXRhX2Rlc3Ryb3koaGRyKTsKIH0KQEAgLTE3MTksMTggKzIwMDIsMjkgQEAKIAlyZXR1cm4gdHJ5cG5mczsKIH0KIAorLyogUmVzZW5kIGFsbCByZXF1ZXN0cyB0aHJvdWdoIHBuZnMuICovCitpbnQgcG5mc19yZWFkX3Jlc2VuZF9wbmZzKHN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkcikKK3sKKwlzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yIHBnaW87CisKKwluZnNfcGFnZWlvX2luaXRfcmVhZCgmcGdpbywgaGRyLT5pbm9kZSwgZmFsc2UsIGhkci0+Y29tcGxldGlvbl9vcHMpOworCXJldHVybiBuZnNfcGFnZWlvX3Jlc2VuZCgmcGdpbywgaGRyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBuZnNfcmVhZF9yZXNlbmRfcG5mcyk7CisKIHN0YXRpYyB2b2lkCiBwbmZzX2RvX3JlYWQoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqZGVzYywgc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqaGRyKQogewogCWNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgKmNhbGxfb3BzID0gZGVzYy0+cGdfcnBjX2NhbGxvcHM7CiAJc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcgPSBkZXNjLT5wZ19sc2VnOwogCWVudW0gcG5mc190cnlfc3RhdHVzIHRyeXBuZnM7CisJaW50IGVyciA9IDA7CiAKLQlkZXNjLT5wZ19sc2VnID0gTlVMTDsKIAl0cnlwbmZzID0gcG5mc190cnlfdG9fcmVhZF9kYXRhKGhkciwgY2FsbF9vcHMsIGxzZWcpOwotCWlmICh0cnlwbmZzID09IFBORlNfTk9UX0FUVEVNUFRFRCkKKwlpZiAodHJ5cG5mcyA9PSBQTkZTX1RSWV9BR0FJTikKKwkJZXJyID0gcG5mc19yZWFkX3Jlc2VuZF9wbmZzKGhkcik7CisJaWYgKHRyeXBuZnMgPT0gUE5GU19OT1RfQVRURU1QVEVEIHx8IGVycikKIAkJcG5mc19yZWFkX3Rocm91Z2hfbWRzKGRlc2MsIGhkcik7Ci0JcG5mc19wdXRfbHNlZyhsc2VnKTsKIH0KIAogc3RhdGljIHZvaWQgcG5mc19yZWFkaGRyX2ZyZWUoc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqaGRyKQpAQCAtMTc0MywyNCArMjAzNywyMCBAQAogaW50CiBwbmZzX2dlbmVyaWNfcGdfcmVhZHBhZ2VzKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKmRlc2MpCiB7CisJc3RydWN0IG5mc19wZ2lvX21pcnJvciAqbWlycm9yID0gbmZzX3BnaW9fY3VycmVudF9taXJyb3IoZGVzYyk7CisKIAlzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICpoZHI7CiAJaW50IHJldDsKIAogCWhkciA9IG5mc19wZ2lvX2hlYWRlcl9hbGxvYyhkZXNjLT5wZ19yd19vcHMpOwogCWlmICghaGRyKSB7Ci0JCWRlc2MtPnBnX2NvbXBsZXRpb25fb3BzLT5lcnJvcl9jbGVhbnVwKCZkZXNjLT5wZ19saXN0KTsKLQkJcmV0ID0gLUVOT01FTTsKLQkJcG5mc19wdXRfbHNlZyhkZXNjLT5wZ19sc2VnKTsKLQkJZGVzYy0+cGdfbHNlZyA9IE5VTEw7Ci0JCXJldHVybiByZXQ7CisJCWRlc2MtPnBnX2NvbXBsZXRpb25fb3BzLT5lcnJvcl9jbGVhbnVwKCZtaXJyb3ItPnBnX2xpc3QpOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbmZzX3BnaGVhZGVyX2luaXQoZGVzYywgaGRyLCBwbmZzX3JlYWRoZHJfZnJlZSk7CiAJaGRyLT5sc2VnID0gcG5mc19nZXRfbHNlZyhkZXNjLT5wZ19sc2VnKTsKIAlyZXQgPSBuZnNfZ2VuZXJpY19wZ2lvKGRlc2MsIGhkcik7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCXBuZnNfcHV0X2xzZWcoZGVzYy0+cGdfbHNlZyk7Ci0JCWRlc2MtPnBnX2xzZWcgPSBOVUxMOwotCX0gZWxzZQorCWlmICghcmV0KQogCQlwbmZzX2RvX3JlYWQoZGVzYywgaGRyKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTk2Niw2ICsyMjU2LDcgQEAKIAlwbmZzX2NsZWFyX2xheW91dGNvbW1pdHRpbmcoaW5vZGUpOwogCWdvdG8gb3V0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwocG5mc19sYXlvdXRjb21taXRfaW5vZGUpOwogCiBzdHJ1Y3QgbmZzNF90aHJlc2hvbGQgKnBuZnNfbWRzdGhyZXNob2xkX2FsbG9jKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9mcy9uZnMvcG5mcy5oIGIvZnMvbmZzL3BuZnMuaAppbmRleCA5YWU1Yjc2Li43OTdjZDYyIDEwMDY0NAotLS0gYS9mcy9uZnMvcG5mcy5oCisrKyBiL2ZzL25mcy9wbmZzLmgKQEAgLTM4LDYgKzM4LDI1IEBACiAJTkZTX0xTRUdfVkFMSUQgPSAwLAkvKiBjbGVhcmVkIHdoZW4gbHNlZyBpcyByZWNhbGxlZC9yZXR1cm5lZCAqLwogCU5GU19MU0VHX1JPQywJCS8qIHJvYyBiaXQgcmVjZWl2ZWQgZnJvbSBzZXJ2ZXIgKi8KIAlORlNfTFNFR19MQVlPVVRDT01NSVQsCS8qIGxheW91dGNvbW1pdCBiaXQgc2V0IGZvciBsYXlvdXRjb21taXQgKi8KKwlORlNfTFNFR19MQVlPVVRSRVRVUk4sCS8qIGxheW91dHJldHVybiBiaXQgc2V0IGZvciBsYXlvdXRyZXR1cm4gKi8KK307CisKKy8qIEluZGl2aWR1YWwgaXAgYWRkcmVzcyAqLworc3RydWN0IG5mczRfcG5mc19kc19hZGRyIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZQlkYV9hZGRyOworCXNpemVfdAkJCWRhX2FkZHJsZW47CisJc3RydWN0IGxpc3RfaGVhZAlkYV9ub2RlOyAgLyogbmZzNF9wbmZzX2Rldl9obGlzdCBkZXZfZHNsaXN0ICovCisJY2hhcgkJCSpkYV9yZW1vdGVzdHI7CS8qIGh1bWFuIHJlYWRhYmxlIGFkZHIrcG9ydCAqLworfTsKKworc3RydWN0IG5mczRfcG5mc19kcyB7CisJc3RydWN0IGxpc3RfaGVhZAlkc19ub2RlOyAgLyogbmZzNF9wbmZzX2Rldl9obGlzdCBkZXZfZHNsaXN0ICovCisJY2hhcgkJCSpkc19yZW1vdGVzdHI7CS8qIGNvbW1hIHNlcCBsaXN0IG9mIGFkZHJzICovCisJc3RydWN0IGxpc3RfaGVhZAlkc19hZGRyczsKKwlzdHJ1Y3QgbmZzX2NsaWVudAkqZHNfY2xwOworCWF0b21pY190CQlkc19jb3VudDsKKwl1bnNpZ25lZCBsb25nCQlkc19zdGF0ZTsKKyNkZWZpbmUgTkZTNERTX0NPTk5FQ1RJTkcJMAkvKiBkcyBpcyBlc3RhYmxpc2hpbmcgY29ubmVjdGlvbiAqLwogfTsKIAogc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgewpAQCAtNTMsMTkgKzcyLDM0IEBACiBlbnVtIHBuZnNfdHJ5X3N0YXR1cyB7CiAJUE5GU19BVFRFTVBURUQgICAgID0gMCwKIAlQTkZTX05PVF9BVFRFTVBURUQgPSAxLAorCVBORlNfVFJZX0FHQUlOICAgICA9IDIsCiB9OwogCiAjaWZkZWYgQ09ORklHX05GU19WNF8xCiAKICNkZWZpbmUgTEFZT1VUX05GU1Y0XzFfTU9EVUxFX1BSRUZJWCAibmZzLWxheW91dHR5cGU0IgogCisvKgorICogRGVmYXVsdCBkYXRhIHNlcnZlciBjb25uZWN0aW9uIHRpbWVvdXQgYW5kIHJldHJhbnMgdmF1bGVzLgorICogU2V0IGJ5IG1vZHVsZSBwYXJhbWV0ZXJzIGRhdGFzZXJ2ZXJfdGltZW8gYW5kIGRhdGFzZXJ2ZXJfcmV0cmFucy4KKyAqLworI2RlZmluZSBORlM0X0RFRl9EU19USU1FTyAgIDYwMCAvKiBpbiB0ZW50aHMgb2YgYSBzZWNvbmQgKi8KKyNkZWZpbmUgTkZTNF9ERUZfRFNfUkVUUkFOUyA1CisKKy8qIGVycm9yIGNvZGVzIGZvciBpbnRlcm5hbCB1c2UgKi8KKyNkZWZpbmUgTkZTNEVSUl9SRVNFVF9UT19NRFMgICAxMjAwMQorI2RlZmluZSBORlM0RVJSX1JFU0VUX1RPX1BORlMgIDEyMDAyCisKIGVudW0gewogCU5GU19MQVlPVVRfUk9fRkFJTEVEID0gMCwJLyogZ2V0IHJvIGxheW91dCBmYWlsZWQgc3RvcCB0cnlpbmcgKi8KIAlORlNfTEFZT1VUX1JXX0ZBSUxFRCwJCS8qIGdldCBydyBsYXlvdXQgZmFpbGVkIHN0b3AgdHJ5aW5nICovCiAJTkZTX0xBWU9VVF9CVUxLX1JFQ0FMTCwJCS8qIGJ1bGsgcmVjYWxsIGFmZmVjdGluZyBsYXlvdXQgKi8KIAlORlNfTEFZT1VUX1JPQywJCQkvKiBzb21lIGxzZWcgaGFkIHJvYyBiaXQgc2V0ICovCiAJTkZTX0xBWU9VVF9SRVRVUk4sCQkvKiBSZXR1cm4gdGhpcyBsYXlvdXQgQVNBUCAqLworCU5GU19MQVlPVVRfUkVUVVJOX0JFRk9SRV9DTE9TRSwJLyogUmV0dXJuIHRoaXMgbGF5b3V0IGJlZm9yZSBjbG9zZSAqLwogCU5GU19MQVlPVVRfSU5WQUxJRF9TVElELAkvKiBsYXlvdXQgc3RhdGVpZCBpZCBpcyBpbnZhbGlkICovCisJTkZTX0xBWU9VVF9GSVJTVF9MQVlPVVRHRVQsCS8qIFNlcmlhbGl6ZSBmaXJzdCBsYXlvdXRnZXQgKi8KKwlORlNfTEFZT1VUX1JFVFJZX0xBWU9VVEdFVCwJLyogUmV0cnkgbGF5b3V0Z2V0ICovCiB9OwogCiBlbnVtIGxheW91dGRyaXZlcl9wb2xpY3lfZmxhZ3MgewpAQCAtMTA2LDcgKzE0MCw4IEBACiAJc3RydWN0IHBuZnNfZHNfY29tbWl0X2luZm8gKigqZ2V0X2RzX2luZm8pIChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAl2b2lkICgqbWFya19yZXF1ZXN0X2NvbW1pdCkgKHN0cnVjdCBuZnNfcGFnZSAqcmVxLAogCQkJCSAgICAgc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcsCi0JCQkJICAgICBzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvICpjaW5mbyk7CisJCQkJICAgICBzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvICpjaW5mbywKKwkJCQkgICAgIHUzMiBkc19jb21taXRfaWR4KTsKIAl2b2lkICgqY2xlYXJfcmVxdWVzdF9jb21taXQpIChzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSwKIAkJCQkgICAgICBzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvICpjaW5mbyk7CiAJaW50ICgqc2Nhbl9jb21taXRfbGlzdHMpIChzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvICpjaW5mbywKQEAgLTE1NCw2ICsxODksNyBAQAogCXUzMgkJCXBsaF9iYXJyaWVyOyAvKiBpZ25vcmUgbG93ZXIgc2VxaWRzICovCiAJdW5zaWduZWQgbG9uZwkJcGxoX3JldHJ5X3RpbWVzdGFtcDsKIAl1bnNpZ25lZCBsb25nCQlwbGhfZmxhZ3M7CisJZW51bSBwbmZzX2lvbW9kZQlwbGhfcmV0dXJuX2lvbW9kZTsKIAlsb2ZmX3QJCQlwbGhfbHdiOyAvKiBsYXN0IHdyaXRlIGJ5dGUgZm9yIGxheW91dGNvbW1pdCAqLwogCXN0cnVjdCBycGNfY3JlZAkJKnBsaF9sY19jcmVkOyAvKiBsYXlvdXRjb21taXQgY3JlZCAqLwogCXN0cnVjdCBpbm9kZQkJKnBsaF9pbm9kZTsKQEAgLTE4NSw3ICsyMjEsNyBAQAogCQkJCSAgIHN0cnVjdCBwbmZzX2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBycGNfY3JlZCAqY3JlZCk7CiBleHRlcm4gc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQqIG5mczRfcHJvY19sYXlvdXRnZXQoc3RydWN0IG5mczRfbGF5b3V0Z2V0ICpsZ3AsIGdmcF90IGdmcF9mbGFncyk7Ci1leHRlcm4gaW50IG5mczRfcHJvY19sYXlvdXRyZXR1cm4oc3RydWN0IG5mczRfbGF5b3V0cmV0dXJuICpscnApOworZXh0ZXJuIGludCBuZnM0X3Byb2NfbGF5b3V0cmV0dXJuKHN0cnVjdCBuZnM0X2xheW91dHJldHVybiAqbHJwLCBib29sIHN5bmMpOwogCiAvKiBwbmZzLmMgKi8KIHZvaWQgcG5mc19nZXRfbGF5b3V0X2hkcihzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbyk7CkBAIC0xOTgsNiArMjM0LDcgQEAKIGludCBwbmZzX2dlbmVyaWNfcGdfcmVhZHBhZ2VzKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKmRlc2MpOwogdm9pZCBwbmZzX2dlbmVyaWNfcGdfaW5pdF93cml0ZShzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICpwZ2lvLAogCQkJICAgICAgICBzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSwgdTY0IHdiX3NpemUpOwordm9pZCBwbmZzX2dlbmVyaWNfcGdfY2xlYW51cChzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICopOwogaW50IHBuZnNfZ2VuZXJpY19wZ193cml0ZXBhZ2VzKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKmRlc2MpOwogc2l6ZV90IHBuZnNfZ2VuZXJpY19wZ190ZXN0KHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKnBnaW8sCiAJCQkgICAgc3RydWN0IG5mc19wYWdlICpwcmV2LCBzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSk7CkBAIC0yMTcsNiArMjU0LDcgQEAKIAkJCSAgICAgYm9vbCB1cGRhdGVfYmFycmllcik7CiBpbnQgcG5mc19jaG9vc2VfbGF5b3V0Z2V0X3N0YXRlaWQobmZzNF9zdGF0ZWlkICpkc3QsCiAJCQkJICBzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbywKKwkJCQkgIHN0cnVjdCBwbmZzX2xheW91dF9yYW5nZSAqcmFuZ2UsCiAJCQkJICBzdHJ1Y3QgbmZzNF9zdGF0ZSAqb3Blbl9zdGF0ZSk7CiBpbnQgcG5mc19tYXJrX21hdGNoaW5nX2xzZWdzX2ludmFsaWQoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sCiAJCQkJc3RydWN0IGxpc3RfaGVhZCAqdG1wX2xpc3QsCkBAIC0yMzMsMTcgKzI3MSwyMSBAQAogaW50IHBuZnNfY29tbWl0X2FuZF9yZXR1cm5fbGF5b3V0KHN0cnVjdCBpbm9kZSAqKTsKIHZvaWQgcG5mc19sZF93cml0ZV9kb25lKHN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKik7CiB2b2lkIHBuZnNfbGRfcmVhZF9kb25lKHN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKik7CitpbnQgcG5mc19yZWFkX3Jlc2VuZF9wbmZzKHN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKik7CiBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqcG5mc191cGRhdGVfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vLAogCQkJCQkgICAgICAgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKIAkJCQkJICAgICAgIGxvZmZfdCBwb3MsCiAJCQkJCSAgICAgICB1NjQgY291bnQsCiAJCQkJCSAgICAgICBlbnVtIHBuZnNfaW9tb2RlIGlvbW9kZSwKIAkJCQkJICAgICAgIGdmcF90IGdmcF9mbGFncyk7Cit2b2lkIHBuZnNfY2xlYXJfbGF5b3V0cmV0dXJuX3dhaXRiaXQoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8pOwogCiB2b2lkIG5mczRfZGV2aWNlaWRfbWFya19jbGllbnRfaW52YWxpZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKTsKIGludCBwbmZzX3JlYWRfZG9uZV9yZXNlbmRfdG9fbWRzKHN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKik7CiBpbnQgcG5mc193cml0ZV9kb25lX3Jlc2VuZF90b19tZHMoc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqKTsKIHN0cnVjdCBuZnM0X3RocmVzaG9sZCAqcG5mc19tZHN0aHJlc2hvbGRfYWxsb2Modm9pZCk7Cit2b2lkIHBuZnNfZXJyb3JfbWFya19sYXlvdXRfZm9yX3JldHVybihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZyk7CiAKIC8qIG5mczRfZGV2aWNlaWRfZmxhZ3MgKi8KIGVudW0gewpAQCAtMjc1LDYgKzMxNywzOSBAQAogYm9vbCBuZnM0X3Rlc3RfZGV2aWNlaWRfdW5hdmFpbGFibGUoc3RydWN0IG5mczRfZGV2aWNlaWRfbm9kZSAqbm9kZSk7CiB2b2lkIG5mczRfZGV2aWNlaWRfcHVyZ2VfY2xpZW50KGNvbnN0IHN0cnVjdCBuZnNfY2xpZW50ICopOwogCisvKiBwbmZzX25mcy5jICovCit2b2lkIHBuZnNfZ2VuZXJpY19jbGVhcl9yZXF1ZXN0X2NvbW1pdChzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSwKKwkJCQkgICAgICAgc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8pOwordm9pZCBwbmZzX2dlbmVyaWNfY29tbWl0X3JlbGVhc2Uodm9pZCAqY2FsbGRhdGEpOwordm9pZCBwbmZzX2dlbmVyaWNfcHJlcGFyZV90b19yZXNlbmRfd3JpdGVzKHN0cnVjdCBuZnNfY29tbWl0X2RhdGEgKmRhdGEpOwordm9pZCBwbmZzX2dlbmVyaWNfcndfcmVsZWFzZSh2b2lkICpkYXRhKTsKK3ZvaWQgcG5mc19nZW5lcmljX3JlY292ZXJfY29tbWl0X3JlcXMoc3RydWN0IGxpc3RfaGVhZCAqZHN0LAorCQkJCSAgICAgIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvKTsKK2ludCBwbmZzX2dlbmVyaWNfY29tbWl0X3BhZ2VsaXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKm1kc19wYWdlcywKKwkJCQkgaW50IGhvdywKKwkJCQkgc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8sCisJCQkJIGludCAoKmluaXRpYXRlX2NvbW1pdCkoc3RydWN0IG5mc19jb21taXRfZGF0YSAqZGF0YSwKKwkJCQkJCQlpbnQgaG93KSk7CitpbnQgcG5mc19nZW5lcmljX3NjYW5fY29tbWl0X2xpc3RzKHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvLCBpbnQgbWF4KTsKK3ZvaWQgcG5mc19nZW5lcmljX3dyaXRlX2NvbW1pdF9kb25lKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqZGF0YSk7Cit2b2lkIG5mczRfcG5mc19kc19wdXQoc3RydWN0IG5mczRfcG5mc19kcyAqZHMpOworc3RydWN0IG5mczRfcG5mc19kcyAqbmZzNF9wbmZzX2RzX2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpkc2FkZHJzLAorCQkJCSAgICAgIGdmcF90IGdmcF9mbGFncyk7Cit2b2lkIG5mczRfcG5mc192M19kc19jb25uZWN0X3VubG9hZCh2b2lkKTsKK3ZvaWQgbmZzNF9wbmZzX2RzX2Nvbm5lY3Qoc3RydWN0IG5mc19zZXJ2ZXIgKm1kc19zcnYsIHN0cnVjdCBuZnM0X3BuZnNfZHMgKmRzLAorCQkJICBzdHJ1Y3QgbmZzNF9kZXZpY2VpZF9ub2RlICpkZXZpZCwgdW5zaWduZWQgaW50IHRpbWVvLAorCQkJICB1bnNpZ25lZCBpbnQgcmV0cmFucywgdTMyIHZlcnNpb24sIHUzMiBtaW5vcl92ZXJzaW9uLAorCQkJICBycGNfYXV0aGZsYXZvcl90IGF1X2ZsYXZvcik7CitzdHJ1Y3QgbmZzNF9wbmZzX2RzX2FkZHIgKm5mczRfZGVjb2RlX21wX2RzX2FkZHIoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkJIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCisJCQkJCQkgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKKworc3RhdGljIGlubGluZSBib29sIG5mc19oYXZlX2xheW91dChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBORlNfSShpbm9kZSktPmxheW91dCAhPSBOVUxMOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZnM0X2RldmljZWlkX25vZGUgKgogbmZzNF9nZXRfZGV2aWNlaWQoc3RydWN0IG5mczRfZGV2aWNlaWRfbm9kZSAqZCkKIHsKQEAgLTI4Miw2ICszNTcsMjYgQEAKIAlyZXR1cm4gZDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHBuZnNfc2V0X3JldHJ5X2xheW91dGdldChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbykKK3sKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoTkZTX0xBWU9VVF9SRVRSWV9MQVlPVVRHRVQsICZsby0+cGxoX2ZsYWdzKSkKKwkJYXRvbWljX2luYygmbG8tPnBsaF9yZWZjb3VudCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbmZzX2NsZWFyX3JldHJ5X2xheW91dGdldChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbykKK3sKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KE5GU19MQVlPVVRfUkVUUllfTEFZT1VUR0VULCAmbG8tPnBsaF9mbGFncykpIHsKKwkJYXRvbWljX2RlYygmbG8tPnBsaF9yZWZjb3VudCk7CisJCS8qIHdha2UgdXAgd2FpdGVycyBmb3IgTEFZT1VUUkVUVVJOIGFzIHRoYXQgaXMgbm90IG5lZWRlZCAqLworCQl3YWtlX3VwX2JpdCgmbG8tPnBsaF9mbGFncywgTkZTX0xBWU9VVF9SRVRVUk4pOworCX0KK30KKworc3RhdGljIGlubGluZSBib29sIHBuZnNfc2hvdWxkX3JldHJ5X2xheW91dGdldChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbykKK3sKKwlyZXR1cm4gdGVzdF9iaXQoTkZTX0xBWU9VVF9SRVRSWV9MQVlPVVRHRVQsICZsby0+cGxoX2ZsYWdzKTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqCiBwbmZzX2dldF9sc2VnKHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnKQogewpAQCAtMzE3LDE2ICs0MTIsMjIgQEAKIAlyZXR1cm4gbGQtPmdldF9kc19pbmZvKGlub2RlKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitwbmZzX2dlbmVyaWNfbWFya19kZXZpZF9pbnZhbGlkKHN0cnVjdCBuZnM0X2RldmljZWlkX25vZGUgKm5vZGUpCit7CisJc2V0X2JpdChORlNfREVWSUNFSURfSU5WQUxJRCwgJm5vZGUtPmZsYWdzKTsKK30KKwogc3RhdGljIGlubGluZSBib29sCiBwbmZzX21hcmtfcmVxdWVzdF9jb21taXQoc3RydWN0IG5mc19wYWdlICpyZXEsIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpsc2VnLAotCQkJIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvKQorCQkJIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvLCB1MzIgZHNfY29tbWl0X2lkeCkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcmVxLT53Yl9jb250ZXh0LT5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHBuZnNfbGF5b3V0ZHJpdmVyX3R5cGUgKmxkID0gTkZTX1NFUlZFUihpbm9kZSktPnBuZnNfY3Vycl9sZDsKIAogCWlmIChsc2VnID09IE5VTEwgfHwgbGQtPm1hcmtfcmVxdWVzdF9jb21taXQgPT0gTlVMTCkKIAkJcmV0dXJuIGZhbHNlOwotCWxkLT5tYXJrX3JlcXVlc3RfY29tbWl0KHJlcSwgbHNlZywgY2luZm8pOworCWxkLT5tYXJrX3JlcXVlc3RfY29tbWl0KHJlcSwgbHNlZywgY2luZm8sIGRzX2NvbW1pdF9pZHgpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC0zNTIsMTUgKzQ1Myw2IEBACiAJCXJldHVybiBORlNfU0VSVkVSKGlub2RlKS0+cG5mc19jdXJyX2xkLT5zY2FuX2NvbW1pdF9saXN0cyhjaW5mbywgbWF4KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1wbmZzX3JlY292ZXJfY29tbWl0X3JlcXMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKLQkJCSBzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvICpjaW5mbykKLXsKLQlpZiAoY2luZm8tPmRzID09IE5VTEwgfHwgY2luZm8tPmRzLT5ud3JpdHRlbiA9PSAwKQotCQlyZXR1cm47Ci0JTkZTX1NFUlZFUihpbm9kZSktPnBuZnNfY3Vycl9sZC0+cmVjb3Zlcl9jb21taXRfcmVxcyhsaXN0LCBjaW5mbyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5mc19wYWdlICoKIHBuZnNfc2VhcmNoX2NvbW1pdF9yZXFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvLAogCQkJc3RydWN0IHBhZ2UgKnBhZ2UpCkBAIC00MjcsNiArNTE5LDExIEBACiAjZW5kaWYgLyogTkZTX0RFQlVHICovCiAjZWxzZSAgLyogQ09ORklHX05GU19WNF8xICovCiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBuZnNfaGF2ZV9sYXlvdXQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBwbmZzX2Rlc3Ryb3lfYWxsX2xheW91dHMoc3RydWN0IG5mc19jbGllbnQgKmNscCkKIHsKIH0KQEAgLTUxMyw3ICs2MTAsNyBAQAogCiBzdGF0aWMgaW5saW5lIGJvb2wKIHBuZnNfbWFya19yZXF1ZXN0X2NvbW1pdChzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSwgc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcsCi0JCQkgc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8pCisJCQkgc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8sIHUzMiBkc19jb21taXRfaWR4KQogewogCXJldHVybiBmYWxzZTsKIH0KQEAgLTUzMSwxMiArNjI4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCi1wbmZzX3JlY292ZXJfY29tbWl0X3JlcXMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKLQkJCSBzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvICpjaW5mbykKLXsKLX0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZzX3BhZ2UgKgogcG5mc19zZWFyY2hfY29tbWl0X3JlcXMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8sCiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZSkKQEAgLTU2OCw2ICs2NTksMTAgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIG5mczRfcG5mc192M19kc19jb25uZWN0X3VubG9hZCh2b2lkKQoreworfQorCiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKICNlbmRpZiAvKiBGU19ORlNfUE5GU19IICovCmRpZmYgLS1naXQgYS9mcy9uZnMvcG5mc19uZnMuYyBiL2ZzL25mcy9wbmZzX25mcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYzRmNjUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9uZnMvcG5mc19uZnMuYwpAQCAtMCwwICsxLDg0MCBAQAorLyoKKyAqIENvbW1vbiBORlMgSS9PICBvcGVyYXRpb25zIGZvciB0aGUgcG5mcyBmaWxlIGJhc2VkCisgKiBsYXlvdXQgZHJpdmVycy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQsIFByaW1hcnkgRGF0YSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRvbSBIYXluZXMgPGxvZ2h5ckBwcmltYXJ5ZGF0YS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25mc19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L25mc19wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL2FkZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworI2luY2x1ZGUgIm5mczRzZXNzaW9uLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJwbmZzLmgiCisKKyNkZWZpbmUgTkZTREJHX0ZBQ0lMSVRZCQlORlNEQkdfUE5GUworCit2b2lkIHBuZnNfZ2VuZXJpY19yd19yZWxlYXNlKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqaGRyID0gZGF0YTsKKworCW5mc19wdXRfY2xpZW50KGhkci0+ZHNfY2xwKTsKKwloZHItPm1kc19vcHMtPnJwY19yZWxlYXNlKGRhdGEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocG5mc19nZW5lcmljX3J3X3JlbGVhc2UpOworCisvKiBGYWtlIHVwIHNvbWUgZGF0YSB0aGF0IHdpbGwgY2F1c2UgbmZzX2NvbW1pdF9yZWxlYXNlIHRvIHJldHJ5IHRoZSB3cml0ZXMuICovCit2b2lkIHBuZnNfZ2VuZXJpY19wcmVwYXJlX3RvX3Jlc2VuZF93cml0ZXMoc3RydWN0IG5mc19jb21taXRfZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzX3BhZ2UgKmZpcnN0ID0gbmZzX2xpc3RfZW50cnkoZGF0YS0+cGFnZXMubmV4dCk7CisKKwlkYXRhLT50YXNrLnRrX3N0YXR1cyA9IDA7CisJbWVtY3B5KCZkYXRhLT52ZXJmLnZlcmlmaWVyLCAmZmlyc3QtPndiX3ZlcmYsCisJICAgICAgIHNpemVvZihkYXRhLT52ZXJmLnZlcmlmaWVyKSk7CisJZGF0YS0+dmVyZi52ZXJpZmllci5kYXRhWzBdKys7IC8qIGVuc3VyZSB2ZXJpZmllciBtaXNtYXRjaCAqLworfQorRVhQT1JUX1NZTUJPTF9HUEwocG5mc19nZW5lcmljX3ByZXBhcmVfdG9fcmVzZW5kX3dyaXRlcyk7CisKK3ZvaWQgcG5mc19nZW5lcmljX3dyaXRlX2NvbW1pdF9kb25lKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzX2NvbW1pdF9kYXRhICp3ZGF0YSA9IGRhdGE7CisKKwkvKiBOb3RlIHRoaXMgbWF5IGNhdXNlIFJQQyB0byBiZSByZXNlbnQgKi8KKwl3ZGF0YS0+bWRzX29wcy0+cnBjX2NhbGxfZG9uZSh0YXNrLCBkYXRhKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBuZnNfZ2VuZXJpY193cml0ZV9jb21taXRfZG9uZSk7CisKK3ZvaWQgcG5mc19nZW5lcmljX2NvbW1pdF9yZWxlYXNlKHZvaWQgKmNhbGxkYXRhKQoreworCXN0cnVjdCBuZnNfY29tbWl0X2RhdGEgKmRhdGEgPSBjYWxsZGF0YTsKKworCWRhdGEtPmNvbXBsZXRpb25fb3BzLT5jb21wbGV0aW9uKGRhdGEpOworCXBuZnNfcHV0X2xzZWcoZGF0YS0+bHNlZyk7CisJbmZzX3B1dF9jbGllbnQoZGF0YS0+ZHNfY2xwKTsKKwluZnNfY29tbWl0ZGF0YV9yZWxlYXNlKGRhdGEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocG5mc19nZW5lcmljX2NvbW1pdF9yZWxlYXNlKTsKKworLyogVGhlIGdlbmVyaWMgbGF5ZXIgaXMgYWJvdXQgdG8gcmVtb3ZlIHRoZSByZXEgZnJvbSB0aGUgY29tbWl0IGxpc3QuCisgKiBJZiB0aGlzIHdpbGwgbWFrZSB0aGUgYnVja2V0IGVtcHR5LCBpdCB3aWxsIG5lZWQgdG8gcHV0IHRoZSBsc2VnIHJlZmVyZW5jZS4KKyAqIE5vdGUgdGhpcyBtdXN0IGJlIGNhbGxlZCBob2xkaW5nIHRoZSBpbm9kZSAoL2NpbmZvKSBsb2NrCisgKi8KK3ZvaWQKK3BuZnNfZ2VuZXJpY19jbGVhcl9yZXF1ZXN0X2NvbW1pdChzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSwKKwkJCQkgIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvKQoreworCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpmcmVlbWUgPSBOVUxMOworCisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoUEdfQ09NTUlUX1RPX0RTLCAmcmVxLT53Yl9mbGFncykpCisJCWdvdG8gb3V0OworCWNpbmZvLT5kcy0+bndyaXR0ZW4tLTsKKwlpZiAobGlzdF9pc19zaW5ndWxhcigmcmVxLT53Yl9saXN0KSkgeworCQlzdHJ1Y3QgcG5mc19jb21taXRfYnVja2V0ICpidWNrZXQ7CisKKwkJYnVja2V0ID0gbGlzdF9maXJzdF9lbnRyeSgmcmVxLT53Yl9saXN0LAorCQkJCQkgIHN0cnVjdCBwbmZzX2NvbW1pdF9idWNrZXQsCisJCQkJCSAgd3JpdHRlbik7CisJCWZyZWVtZSA9IGJ1Y2tldC0+d2xzZWc7CisJCWJ1Y2tldC0+d2xzZWcgPSBOVUxMOworCX0KK291dDoKKwluZnNfcmVxdWVzdF9yZW1vdmVfY29tbWl0X2xpc3QocmVxLCBjaW5mbyk7CisJcG5mc19wdXRfbHNlZ19sb2NrZWQoZnJlZW1lKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBuZnNfZ2VuZXJpY19jbGVhcl9yZXF1ZXN0X2NvbW1pdCk7CisKK3N0YXRpYyBpbnQKK3BuZnNfZ2VuZXJpY190cmFuc2Zlcl9jb21taXRfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpzcmMsIHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwKKwkJCQkgIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvLCBpbnQgbWF4KQoreworCXN0cnVjdCBuZnNfcGFnZSAqcmVxLCAqdG1wOworCWludCByZXQgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgdG1wLCBzcmMsIHdiX2xpc3QpIHsKKwkJaWYgKCFuZnNfbG9ja19yZXF1ZXN0KHJlcSkpCisJCQljb250aW51ZTsKKwkJa3JlZl9nZXQoJnJlcS0+d2Jfa3JlZik7CisJCWlmIChjb25kX3Jlc2NoZWRfbG9jayhjaW5mby0+bG9jaykpCisJCQlsaXN0X3NhZmVfcmVzZXRfbmV4dChyZXEsIHRtcCwgd2JfbGlzdCk7CisJCW5mc19yZXF1ZXN0X3JlbW92ZV9jb21taXRfbGlzdChyZXEsIGNpbmZvKTsKKwkJY2xlYXJfYml0KFBHX0NPTU1JVF9UT19EUywgJnJlcS0+d2JfZmxhZ3MpOworCQluZnNfbGlzdF9hZGRfcmVxdWVzdChyZXEsIGRzdCk7CisJCXJldCsrOworCQlpZiAoKHJldCA9PSBtYXgpICYmICFjaW5mby0+ZHJlcSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitwbmZzX2dlbmVyaWNfc2Nhbl9kc19jb21taXRfbGlzdChzdHJ1Y3QgcG5mc19jb21taXRfYnVja2V0ICpidWNrZXQsCisJCQkJIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvLAorCQkJCSBpbnQgbWF4KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnNyYyA9ICZidWNrZXQtPndyaXR0ZW47CisJc3RydWN0IGxpc3RfaGVhZCAqZHN0ID0gJmJ1Y2tldC0+Y29tbWl0dGluZzsKKwlpbnQgcmV0OworCisJbG9ja2RlcF9hc3NlcnRfaGVsZChjaW5mby0+bG9jayk7CisJcmV0ID0gcG5mc19nZW5lcmljX3RyYW5zZmVyX2NvbW1pdF9saXN0KHNyYywgZHN0LCBjaW5mbywgbWF4KTsKKwlpZiAocmV0KSB7CisJCWNpbmZvLT5kcy0+bndyaXR0ZW4gLT0gcmV0OworCQljaW5mby0+ZHMtPm5jb21taXR0aW5nICs9IHJldDsKKwkJYnVja2V0LT5jbHNlZyA9IGJ1Y2tldC0+d2xzZWc7CisJCWlmIChsaXN0X2VtcHR5KHNyYykpCisJCQlidWNrZXQtPndsc2VnID0gTlVMTDsKKwkJZWxzZQorCQkJcG5mc19nZXRfbHNlZyhidWNrZXQtPmNsc2VnKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogTW92ZSByZXFzIGZyb20gd3JpdHRlbiB0byBjb21taXR0aW5nIGxpc3RzLCByZXR1cm5pbmcgY291bnQKKyAqIG9mIG51bWJlciBtb3ZlZC4KKyAqLworaW50IHBuZnNfZ2VuZXJpY19zY2FuX2NvbW1pdF9saXN0cyhzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvICpjaW5mbywKKwkJCQkgICBpbnQgbWF4KQoreworCWludCBpLCBydiA9IDAsIGNudDsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoY2luZm8tPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBjaW5mby0+ZHMtPm5idWNrZXRzICYmIG1heCAhPSAwOyBpKyspIHsKKwkJY250ID0gcG5mc19nZW5lcmljX3NjYW5fZHNfY29tbWl0X2xpc3QoJmNpbmZvLT5kcy0+YnVja2V0c1tpXSwKKwkJCQkJCSAgICAgICBjaW5mbywgbWF4KTsKKwkJbWF4IC09IGNudDsKKwkJcnYgKz0gY250OworCX0KKwlyZXR1cm4gcnY7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbmZzX2dlbmVyaWNfc2Nhbl9jb21taXRfbGlzdHMpOworCisvKiBQdWxsIGV2ZXJ5dGhpbmcgb2ZmIHRoZSBjb21taXR0aW5nIGxpc3RzIGFuZCBkdW1wIGludG8gQGRzdC4gICovCit2b2lkIHBuZnNfZ2VuZXJpY19yZWNvdmVyX2NvbW1pdF9yZXFzKHN0cnVjdCBsaXN0X2hlYWQgKmRzdCwKKwkJCQkgICAgICBzdHJ1Y3QgbmZzX2NvbW1pdF9pbmZvICpjaW5mbykKK3sKKwlzdHJ1Y3QgcG5mc19jb21taXRfYnVja2V0ICpiOworCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpmcmVlbWU7CisJaW50IGk7CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKGNpbmZvLT5sb2NrKTsKK3Jlc3RhcnQ6CisJZm9yIChpID0gMCwgYiA9IGNpbmZvLT5kcy0+YnVja2V0czsgaSA8IGNpbmZvLT5kcy0+bmJ1Y2tldHM7IGkrKywgYisrKSB7CisJCWlmIChwbmZzX2dlbmVyaWNfdHJhbnNmZXJfY29tbWl0X2xpc3QoJmItPndyaXR0ZW4sIGRzdCwKKwkJCQkJCSAgICAgIGNpbmZvLCAwKSkgeworCQkJZnJlZW1lID0gYi0+d2xzZWc7CisJCQliLT53bHNlZyA9IE5VTEw7CisJCQlzcGluX3VubG9jayhjaW5mby0+bG9jayk7CisJCQlwbmZzX3B1dF9sc2VnKGZyZWVtZSk7CisJCQlzcGluX2xvY2soY2luZm8tPmxvY2spOworCQkJZ290byByZXN0YXJ0OworCQl9CisJfQorCWNpbmZvLT5kcy0+bndyaXR0ZW4gPSAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocG5mc19nZW5lcmljX3JlY292ZXJfY29tbWl0X3JlcXMpOworCitzdGF0aWMgdm9pZCBwbmZzX2dlbmVyaWNfcmV0cnlfY29tbWl0KHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvLCBpbnQgaWR4KQoreworCXN0cnVjdCBwbmZzX2RzX2NvbW1pdF9pbmZvICpmbF9jaW5mbyA9IGNpbmZvLT5kczsKKwlzdHJ1Y3QgcG5mc19jb21taXRfYnVja2V0ICpidWNrZXQ7CisJc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmZyZWVtZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IGlkeDsgaSA8IGZsX2NpbmZvLT5uYnVja2V0czsgaSsrKSB7CisJCWJ1Y2tldCA9ICZmbF9jaW5mby0+YnVja2V0c1tpXTsKKwkJaWYgKGxpc3RfZW1wdHkoJmJ1Y2tldC0+Y29tbWl0dGluZykpCisJCQljb250aW51ZTsKKwkJbmZzX3JldHJ5X2NvbW1pdCgmYnVja2V0LT5jb21taXR0aW5nLCBidWNrZXQtPmNsc2VnLCBjaW5mbywgaSk7CisJCXNwaW5fbG9jayhjaW5mby0+bG9jayk7CisJCWZyZWVtZSA9IGJ1Y2tldC0+Y2xzZWc7CisJCWJ1Y2tldC0+Y2xzZWcgPSBOVUxMOworCQlzcGluX3VubG9jayhjaW5mby0+bG9jayk7CisJCXBuZnNfcHV0X2xzZWcoZnJlZW1lKTsKKwl9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3BuZnNfZ2VuZXJpY19hbGxvY19kc19jb21taXRzKHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvLAorCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgcG5mc19kc19jb21taXRfaW5mbyAqZmxfY2luZm87CisJc3RydWN0IHBuZnNfY29tbWl0X2J1Y2tldCAqYnVja2V0OworCXN0cnVjdCBuZnNfY29tbWl0X2RhdGEgKmRhdGE7CisJaW50IGk7CisJdW5zaWduZWQgaW50IG5yZXEgPSAwOworCisJZmxfY2luZm8gPSBjaW5mby0+ZHM7CisJYnVja2V0ID0gZmxfY2luZm8tPmJ1Y2tldHM7CisJZm9yIChpID0gMDsgaSA8IGZsX2NpbmZvLT5uYnVja2V0czsgaSsrLCBidWNrZXQrKykgeworCQlpZiAobGlzdF9lbXB0eSgmYnVja2V0LT5jb21taXR0aW5nKSkKKwkJCWNvbnRpbnVlOworCQlkYXRhID0gbmZzX2NvbW1pdGRhdGFfYWxsb2MoKTsKKwkJaWYgKCFkYXRhKQorCQkJYnJlYWs7CisJCWRhdGEtPmRzX2NvbW1pdF9pbmRleCA9IGk7CisJCXNwaW5fbG9jayhjaW5mby0+bG9jayk7CisJCWRhdGEtPmxzZWcgPSBidWNrZXQtPmNsc2VnOworCQlidWNrZXQtPmNsc2VnID0gTlVMTDsKKwkJc3Bpbl91bmxvY2soY2luZm8tPmxvY2spOworCQlsaXN0X2FkZCgmZGF0YS0+cGFnZXMsIGxpc3QpOworCQlucmVxKys7CisJfQorCisJLyogQ2xlYW4gdXAgb24gZXJyb3IgKi8KKwlwbmZzX2dlbmVyaWNfcmV0cnlfY29tbWl0KGNpbmZvLCBpKTsKKwlyZXR1cm4gbnJlcTsKK30KKworLyogVGhpcyBmb2xsb3dzIG5mc19jb21taXRfbGlzdCBwcmV0dHkgY2xvc2VseSAqLworaW50CitwbmZzX2dlbmVyaWNfY29tbWl0X3BhZ2VsaXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKm1kc19wYWdlcywKKwkJCSAgICAgaW50IGhvdywgc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8sCisJCQkgICAgIGludCAoKmluaXRpYXRlX2NvbW1pdCkoc3RydWN0IG5mc19jb21taXRfZGF0YSAqZGF0YSwKKwkJCQkJCSAgICBpbnQgaG93KSkKK3sKKwlzdHJ1Y3QgbmZzX2NvbW1pdF9kYXRhICpkYXRhLCAqdG1wOworCUxJU1RfSEVBRChsaXN0KTsKKwl1bnNpZ25lZCBpbnQgbnJlcSA9IDA7CisKKwlpZiAoIWxpc3RfZW1wdHkobWRzX3BhZ2VzKSkgeworCQlkYXRhID0gbmZzX2NvbW1pdGRhdGFfYWxsb2MoKTsKKwkJaWYgKGRhdGEgIT0gTlVMTCkgeworCQkJZGF0YS0+bHNlZyA9IE5VTEw7CisJCQlsaXN0X2FkZCgmZGF0YS0+cGFnZXMsICZsaXN0KTsKKwkJCW5yZXErKzsKKwkJfSBlbHNlIHsKKwkJCW5mc19yZXRyeV9jb21taXQobWRzX3BhZ2VzLCBOVUxMLCBjaW5mbywgMCk7CisJCQlwbmZzX2dlbmVyaWNfcmV0cnlfY29tbWl0KGNpbmZvLCAwKTsKKwkJCWNpbmZvLT5jb21wbGV0aW9uX29wcy0+ZXJyb3JfY2xlYW51cChORlNfSShpbm9kZSkpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwlucmVxICs9IHBuZnNfZ2VuZXJpY19hbGxvY19kc19jb21taXRzKGNpbmZvLCAmbGlzdCk7CisKKwlpZiAobnJlcSA9PSAwKSB7CisJCWNpbmZvLT5jb21wbGV0aW9uX29wcy0+ZXJyb3JfY2xlYW51cChORlNfSShpbm9kZSkpOworCQlnb3RvIG91dDsKKwl9CisKKwlhdG9taWNfYWRkKG5yZXEsICZjaW5mby0+bWRzLT5ycGNzX291dCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGF0YSwgdG1wLCAmbGlzdCwgcGFnZXMpIHsKKwkJbGlzdF9kZWxfaW5pdCgmZGF0YS0+cGFnZXMpOworCQlpZiAoIWRhdGEtPmxzZWcpIHsKKwkJCW5mc19pbml0X2NvbW1pdChkYXRhLCBtZHNfcGFnZXMsIE5VTEwsIGNpbmZvKTsKKwkJCW5mc19pbml0aWF0ZV9jb21taXQoTkZTX0NMSUVOVChpbm9kZSksIGRhdGEsCisJCQkJCSAgICBORlNfUFJPVE8oZGF0YS0+aW5vZGUpLAorCQkJCQkgICAgZGF0YS0+bWRzX29wcywgaG93LCAwKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBwbmZzX2NvbW1pdF9idWNrZXQgKmJ1Y2tldHM7CisKKwkJCWJ1Y2tldHMgPSBjaW5mby0+ZHMtPmJ1Y2tldHM7CisJCQluZnNfaW5pdF9jb21taXQoZGF0YSwKKwkJCQkJJmJ1Y2tldHNbZGF0YS0+ZHNfY29tbWl0X2luZGV4XS5jb21taXR0aW5nLAorCQkJCQlkYXRhLT5sc2VnLAorCQkJCQljaW5mbyk7CisJCQlpbml0aWF0ZV9jb21taXQoZGF0YSwgaG93KTsKKwkJfQorCX0KK291dDoKKwljaW5mby0+ZHMtPm5jb21taXR0aW5nID0gMDsKKwlyZXR1cm4gUE5GU19BVFRFTVBURUQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbmZzX2dlbmVyaWNfY29tbWl0X3BhZ2VsaXN0KTsKKworLyoKKyAqIERhdGEgc2VydmVyIGNhY2hlCisgKgorICogRGF0YSBzZXJ2ZXJzIGNhbiBiZSBtYXBwZWQgdG8gZGlmZmVyZW50IGRldmljZSBpZHMuCisgKiBuZnM0X3BuZnNfZHMgcmVmZXJlbmNlIGNvdW50aW5nCisgKiAgIC0gc2V0IHRvIDEgb24gYWxsb2NhdGlvbgorICogICAtIGluY3JlbWVudGVkIHdoZW4gYSBkZXZpY2UgaWQgbWFwcyBhIGRhdGEgc2VydmVyIGFscmVhZHkgaW4gdGhlIGNhY2hlLgorICogICAtIGRlY3JlbWVudGVkIHdoZW4gZGV2aWNlaWQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS4KKyAqLworc3RhdGljIERFRklORV9TUElOTE9DSyhuZnM0X2RzX2NhY2hlX2xvY2spOworc3RhdGljIExJU1RfSEVBRChuZnM0X2RhdGFfc2VydmVyX2NhY2hlKTsKKworLyogRGVidWcgcm91dGluZXMgKi8KK3N0YXRpYyB2b2lkCitwcmludF9kcyhzdHJ1Y3QgbmZzNF9wbmZzX2RzICpkcykKK3sKKwlpZiAoZHMgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBOVUxMIGRldmljZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgICAgICAgZHMgJXNcbiIKKwkJIiAgICAgICAgcmVmIGNvdW50ICVkXG4iCisJCSIgICAgICAgIGNsaWVudCAlcFxuIgorCQkiICAgICAgICBjbF9leGNoYW5nZV9mbGFncyAleFxuIiwKKwkJZHMtPmRzX3JlbW90ZXN0ciwKKwkJYXRvbWljX3JlYWQoJmRzLT5kc19jb3VudCksIGRzLT5kc19jbHAsCisJCWRzLT5kc19jbHAgPyBkcy0+ZHNfY2xwLT5jbF9leGNoYW5nZV9mbGFncyA6IDApOworfQorCitzdGF0aWMgYm9vbAorc2FtZV9zb2NrYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIxLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIyKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqYSwgKmI7CisJc3RydWN0IHNvY2thZGRyX2luNiAqYTYsICpiNjsKKworCWlmIChhZGRyMS0+c2FfZmFtaWx5ICE9IGFkZHIyLT5zYV9mYW1pbHkpCisJCXJldHVybiBmYWxzZTsKKworCXN3aXRjaCAoYWRkcjEtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJYSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyMTsKKwkJYiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyMjsKKworCQlpZiAoYS0+c2luX2FkZHIuc19hZGRyID09IGItPnNpbl9hZGRyLnNfYWRkciAmJgorCQkgICAgYS0+c2luX3BvcnQgPT0gYi0+c2luX3BvcnQpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJYnJlYWs7CisKKwljYXNlIEFGX0lORVQ2OgorCQlhNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjE7CisJCWI2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyMjsKKworCQkvKiBMSU5LTE9DQUwgYWRkcmVzc2VzIG11c3QgaGF2ZSBtYXRjaGluZyBzY29wZV9pZCAqLworCQlpZiAoaXB2Nl9hZGRyX3NyY19zY29wZSgmYTYtPnNpbjZfYWRkcikgPT0KKwkJICAgIElQVjZfQUREUl9TQ09QRV9MSU5LTE9DQUwgJiYKKwkJICAgIGE2LT5zaW42X3Njb3BlX2lkICE9IGI2LT5zaW42X3Njb3BlX2lkKQorCQkJcmV0dXJuIGZhbHNlOworCisJCWlmIChpcHY2X2FkZHJfZXF1YWwoJmE2LT5zaW42X2FkZHIsICZiNi0+c2luNl9hZGRyKSAmJgorCQkgICAgYTYtPnNpbjZfcG9ydCA9PSBiNi0+c2luNl9wb3J0KQorCQkJcmV0dXJuIHRydWU7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZHByaW50aygiJXM6IHVuaGFuZGxlZCBhZGRyZXNzIGZhbWlseTogJXVcbiIsCisJCQlfX2Z1bmNfXywgYWRkcjEtPnNhX2ZhbWlseSk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sCitfc2FtZV9kYXRhX3NlcnZlcl9hZGRyc19sb2NrZWQoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqZHNhZGRyczEsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqZHNhZGRyczIpCit7CisJc3RydWN0IG5mczRfcG5mc19kc19hZGRyICpkYTEsICpkYTI7CisKKwkvKiBzdGVwIHRocm91Z2ggYm90aCBsaXN0cywgY29tcGFyaW5nIGFzIHdlIGdvICovCisJZm9yIChkYTEgPSBsaXN0X2ZpcnN0X2VudHJ5KGRzYWRkcnMxLCB0eXBlb2YoKmRhMSksIGRhX25vZGUpLAorCSAgICAgZGEyID0gbGlzdF9maXJzdF9lbnRyeShkc2FkZHJzMiwgdHlwZW9mKCpkYTIpLCBkYV9ub2RlKTsKKwkgICAgIGRhMSAhPSBOVUxMICYmIGRhMiAhPSBOVUxMOworCSAgICAgZGExID0gbGlzdF9lbnRyeShkYTEtPmRhX25vZGUubmV4dCwgdHlwZW9mKCpkYTEpLCBkYV9ub2RlKSwKKwkgICAgIGRhMiA9IGxpc3RfZW50cnkoZGEyLT5kYV9ub2RlLm5leHQsIHR5cGVvZigqZGEyKSwgZGFfbm9kZSkpIHsKKwkJaWYgKCFzYW1lX3NvY2thZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikmZGExLT5kYV9hZGRyLAorCQkJCSAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZGEyLT5kYV9hZGRyKSkKKwkJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKGRhMSA9PSBOVUxMICYmIGRhMiA9PSBOVUxMKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIExvb2t1cCBEUyBieSBhZGRyZXNzZXMuICBuZnM0X2RzX2NhY2hlX2xvY2sgaXMgaGVsZAorICovCitzdGF0aWMgc3RydWN0IG5mczRfcG5mc19kcyAqCitfZGF0YV9zZXJ2ZXJfbG9va3VwX2xvY2tlZChjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpkc2FkZHJzKQoreworCXN0cnVjdCBuZnM0X3BuZnNfZHMgKmRzOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkcywgJm5mczRfZGF0YV9zZXJ2ZXJfY2FjaGUsIGRzX25vZGUpCisJCWlmIChfc2FtZV9kYXRhX3NlcnZlcl9hZGRyc19sb2NrZWQoJmRzLT5kc19hZGRycywgZHNhZGRycykpCisJCQlyZXR1cm4gZHM7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfZHMoc3RydWN0IG5mczRfcG5mc19kcyAqZHMpCit7CisJc3RydWN0IG5mczRfcG5mc19kc19hZGRyICpkYTsKKworCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOworCWlmZGVidWcoRkFDSUxJVFkpCisJCXByaW50X2RzKGRzKTsKKworCW5mc19wdXRfY2xpZW50KGRzLT5kc19jbHApOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkcy0+ZHNfYWRkcnMpKSB7CisJCWRhID0gbGlzdF9maXJzdF9lbnRyeSgmZHMtPmRzX2FkZHJzLAorCQkJCSAgICAgIHN0cnVjdCBuZnM0X3BuZnNfZHNfYWRkciwKKwkJCQkgICAgICBkYV9ub2RlKTsKKwkJbGlzdF9kZWxfaW5pdCgmZGEtPmRhX25vZGUpOworCQlrZnJlZShkYS0+ZGFfcmVtb3Rlc3RyKTsKKwkJa2ZyZWUoZGEpOworCX0KKworCWtmcmVlKGRzLT5kc19yZW1vdGVzdHIpOworCWtmcmVlKGRzKTsKK30KKwordm9pZCBuZnM0X3BuZnNfZHNfcHV0KHN0cnVjdCBuZnM0X3BuZnNfZHMgKmRzKQoreworCWlmIChhdG9taWNfZGVjX2FuZF9sb2NrKCZkcy0+ZHNfY291bnQsCisJCQkJJm5mczRfZHNfY2FjaGVfbG9jaykpIHsKKwkJbGlzdF9kZWxfaW5pdCgmZHMtPmRzX25vZGUpOworCQlzcGluX3VubG9jaygmbmZzNF9kc19jYWNoZV9sb2NrKTsKKwkJZGVzdHJveV9kcyhkcyk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwobmZzNF9wbmZzX2RzX3B1dCk7CisKKy8qCisgKiBDcmVhdGUgYSBzdHJpbmcgd2l0aCBhIGh1bWFuIHJlYWRhYmxlIGFkZHJlc3MgYW5kIHBvcnQgdG8gYXZvaWQKKyAqIGNvbXBsaWNhdGVkIHNldHVwIGFyb3VuZCBtYW55IGRwcmlua3MuCisgKi8KK3N0YXRpYyBjaGFyICoKK25mczRfcG5mc19yZW1vdGVzdHIoc3RydWN0IGxpc3RfaGVhZCAqZHNhZGRycywgZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCXN0cnVjdCBuZnM0X3BuZnNfZHNfYWRkciAqZGE7CisJY2hhciAqcmVtb3Rlc3RyOworCXNpemVfdCBsZW47CisJY2hhciAqcDsKKworCWxlbiA9IDM7ICAgICAgICAvKiAneycsICd9JyBhbmQgZW9sICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShkYSwgZHNhZGRycywgZGFfbm9kZSkgeworCQlsZW4gKz0gc3RybGVuKGRhLT5kYV9yZW1vdGVzdHIpICsgMTsgICAgLyogc3RyaW5nIHBsdXMgY29tbWEgKi8KKwl9CisKKwlyZW1vdGVzdHIgPSBremFsbG9jKGxlbiwgZ2ZwX2ZsYWdzKTsKKwlpZiAoIXJlbW90ZXN0cikKKwkJcmV0dXJuIE5VTEw7CisKKwlwID0gcmVtb3Rlc3RyOworCSoocCsrKSA9ICd7JzsKKwlsZW4tLTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRhLCBkc2FkZHJzLCBkYV9ub2RlKSB7CisJCXNpemVfdCBsbCA9IHN0cmxlbihkYS0+ZGFfcmVtb3Rlc3RyKTsKKworCQlpZiAobGwgPiBsZW4pCisJCQlnb3RvIG91dF9lcnI7CisKKwkJbWVtY3B5KHAsIGRhLT5kYV9yZW1vdGVzdHIsIGxsKTsKKwkJcCArPSBsbDsKKwkJbGVuIC09IGxsOworCisJCWlmIChsZW4gPCAxKQorCQkJZ290byBvdXRfZXJyOworCQkoKnArKykgPSAnLCc7CisJCWxlbi0tOworCX0KKwlpZiAobGVuIDwgMikKKwkJZ290byBvdXRfZXJyOworCSoocCsrKSA9ICd9JzsKKwkqcCA9ICdcMCc7CisJcmV0dXJuIHJlbW90ZXN0cjsKK291dF9lcnI6CisJa2ZyZWUocmVtb3Rlc3RyKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEdpdmVuIGEgbGlzdCBvZiBtdWx0aXBhdGggc3RydWN0IG5mczRfcG5mc19kc19hZGRyLCBhZGQgaXQgdG8gZHMgY2FjaGUgaWYKKyAqIHVuY2FjaGVkIGFuZCByZXR1cm4gY2FjaGVkIHN0cnVjdCBuZnM0X3BuZnNfZHMuCisgKi8KK3N0cnVjdCBuZnM0X3BuZnNfZHMgKgorbmZzNF9wbmZzX2RzX2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpkc2FkZHJzLCBnZnBfdCBnZnBfZmxhZ3MpCit7CisJc3RydWN0IG5mczRfcG5mc19kcyAqdG1wX2RzLCAqZHMgPSBOVUxMOworCWNoYXIgKnJlbW90ZXN0cjsKKworCWlmIChsaXN0X2VtcHR5KGRzYWRkcnMpKSB7CisJCWRwcmludGsoIiVzOiBubyBhZGRyZXNzZXMgZGVmaW5lZFxuIiwgX19mdW5jX18pOworCQlnb3RvIG91dDsKKwl9CisKKwlkcyA9IGt6YWxsb2Moc2l6ZW9mKCpkcyksIGdmcF9mbGFncyk7CisJaWYgKCFkcykKKwkJZ290byBvdXQ7CisKKwkvKiB0aGlzIGlzIG9ubHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCdzIG9rIGlmIGl0cyBOVUxMICovCisJcmVtb3Rlc3RyID0gbmZzNF9wbmZzX3JlbW90ZXN0cihkc2FkZHJzLCBnZnBfZmxhZ3MpOworCisJc3Bpbl9sb2NrKCZuZnM0X2RzX2NhY2hlX2xvY2spOworCXRtcF9kcyA9IF9kYXRhX3NlcnZlcl9sb29rdXBfbG9ja2VkKGRzYWRkcnMpOworCWlmICh0bXBfZHMgPT0gTlVMTCkgeworCQlJTklUX0xJU1RfSEVBRCgmZHMtPmRzX2FkZHJzKTsKKwkJbGlzdF9zcGxpY2VfaW5pdChkc2FkZHJzLCAmZHMtPmRzX2FkZHJzKTsKKwkJZHMtPmRzX3JlbW90ZXN0ciA9IHJlbW90ZXN0cjsKKwkJYXRvbWljX3NldCgmZHMtPmRzX2NvdW50LCAxKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmRzLT5kc19ub2RlKTsKKwkJZHMtPmRzX2NscCA9IE5VTEw7CisJCWxpc3RfYWRkKCZkcy0+ZHNfbm9kZSwgJm5mczRfZGF0YV9zZXJ2ZXJfY2FjaGUpOworCQlkcHJpbnRrKCIlcyBhZGQgbmV3IGRhdGEgc2VydmVyICVzXG4iLCBfX2Z1bmNfXywKKwkJCWRzLT5kc19yZW1vdGVzdHIpOworCX0gZWxzZSB7CisJCWtmcmVlKHJlbW90ZXN0cik7CisJCWtmcmVlKGRzKTsKKwkJYXRvbWljX2luYygmdG1wX2RzLT5kc19jb3VudCk7CisJCWRwcmludGsoIiVzIGRhdGEgc2VydmVyICVzIGZvdW5kLCBpbmMnZWQgZHNfY291bnQgdG8gJWRcbiIsCisJCQlfX2Z1bmNfXywgdG1wX2RzLT5kc19yZW1vdGVzdHIsCisJCQlhdG9taWNfcmVhZCgmdG1wX2RzLT5kc19jb3VudCkpOworCQlkcyA9IHRtcF9kczsKKwl9CisJc3Bpbl91bmxvY2soJm5mczRfZHNfY2FjaGVfbG9jayk7CitvdXQ6CisJcmV0dXJuIGRzOworfQorRVhQT1JUX1NZTUJPTF9HUEwobmZzNF9wbmZzX2RzX2FkZCk7CisKK3N0YXRpYyB2b2lkIG5mczRfd2FpdF9kc19jb25uZWN0KHN0cnVjdCBuZnM0X3BuZnNfZHMgKmRzKQoreworCW1pZ2h0X3NsZWVwKCk7CisJd2FpdF9vbl9iaXQoJmRzLT5kc19zdGF0ZSwgTkZTNERTX0NPTk5FQ1RJTkcsCisJCQlUQVNLX0tJTExBQkxFKTsKK30KKworc3RhdGljIHZvaWQgbmZzNF9jbGVhcl9kc19jb25uX2JpdChzdHJ1Y3QgbmZzNF9wbmZzX2RzICpkcykKK3sKKwlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsKKwljbGVhcl9iaXQoTkZTNERTX0NPTk5FQ1RJTkcsICZkcy0+ZHNfc3RhdGUpOworCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CisJd2FrZV91cF9iaXQoJmRzLT5kc19zdGF0ZSwgTkZTNERTX0NPTk5FQ1RJTkcpOworfQorCitzdGF0aWMgc3RydWN0IG5mc19jbGllbnQgKigqZ2V0X3YzX2RzX2Nvbm5lY3QpKAorCQkJc3RydWN0IG5mc19jbGllbnQgKm1kc19jbHAsCisJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmRzX2FkZHIsCisJCQlpbnQgZHNfYWRkcmxlbiwKKwkJCWludCBkc19wcm90bywKKwkJCXVuc2lnbmVkIGludCBkc190aW1lbywKKwkJCXVuc2lnbmVkIGludCBkc19yZXRyYW5zLAorCQkJcnBjX2F1dGhmbGF2b3JfdCBhdV9mbGF2b3IpOworCitzdGF0aWMgYm9vbCBsb2FkX3YzX2RzX2Nvbm5lY3Qodm9pZCkKK3sKKwlpZiAoIWdldF92M19kc19jb25uZWN0KSB7CisJCWdldF92M19kc19jb25uZWN0ID0gc3ltYm9sX3JlcXVlc3QobmZzM19zZXRfZHNfY2xpZW50KTsKKwkJV0FSTl9PTl9PTkNFKCFnZXRfdjNfZHNfY29ubmVjdCk7CisJfQorCisJcmV0dXJuKGdldF92M19kc19jb25uZWN0ICE9IE5VTEwpOworfQorCit2b2lkIF9fZXhpdCBuZnM0X3BuZnNfdjNfZHNfY29ubmVjdF91bmxvYWQodm9pZCkKK3sKKwlpZiAoZ2V0X3YzX2RzX2Nvbm5lY3QpIHsKKwkJc3ltYm9sX3B1dChuZnMzX3NldF9kc19jbGllbnQpOworCQlnZXRfdjNfZHNfY29ubmVjdCA9IE5VTEw7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwobmZzNF9wbmZzX3YzX2RzX2Nvbm5lY3RfdW5sb2FkKTsKKworc3RhdGljIGludCBfbmZzNF9wbmZzX3YzX2RzX2Nvbm5lY3Qoc3RydWN0IG5mc19zZXJ2ZXIgKm1kc19zcnYsCisJCQkJIHN0cnVjdCBuZnM0X3BuZnNfZHMgKmRzLAorCQkJCSB1bnNpZ25lZCBpbnQgdGltZW8sCisJCQkJIHVuc2lnbmVkIGludCByZXRyYW5zLAorCQkJCSBycGNfYXV0aGZsYXZvcl90IGF1X2ZsYXZvcikKK3sKKwlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gRVJSX1BUUigtRUlPKTsKKwlzdHJ1Y3QgbmZzNF9wbmZzX2RzX2FkZHIgKmRhOworCWludCBzdGF0dXMgPSAwOworCisJZHByaW50aygiLS0+ICVzIERTICVzIGF1X2ZsYXZvciAlZFxuIiwgX19mdW5jX18sCisJCWRzLT5kc19yZW1vdGVzdHIsIGF1X2ZsYXZvcik7CisKKwlpZiAoIWxvYWRfdjNfZHNfY29ubmVjdCgpKQorCQlnb3RvIG91dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGEsICZkcy0+ZHNfYWRkcnMsIGRhX25vZGUpIHsKKwkJZHByaW50aygiJXM6IERTICVzOiB0cnlpbmcgYWRkcmVzcyAlc1xuIiwKKwkJCV9fZnVuY19fLCBkcy0+ZHNfcmVtb3Rlc3RyLCBkYS0+ZGFfcmVtb3Rlc3RyKTsKKworCQljbHAgPSBnZXRfdjNfZHNfY29ubmVjdChtZHNfc3J2LT5uZnNfY2xpZW50LAorCQkJCQkoc3RydWN0IHNvY2thZGRyICopJmRhLT5kYV9hZGRyLAorCQkJCQlkYS0+ZGFfYWRkcmxlbiwgSVBQUk9UT19UQ1AsCisJCQkJCXRpbWVvLCByZXRyYW5zLCBhdV9mbGF2b3IpOworCQlpZiAoIUlTX0VSUihjbHApKQorCQkJYnJlYWs7CisJfQorCisJaWYgKElTX0VSUihjbHApKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoY2xwKTsKKwkJZ290byBvdXQ7CisJfQorCisJc21wX3dtYigpOworCWRzLT5kc19jbHAgPSBjbHA7CisJZHByaW50aygiJXMgW25ld10gYWRkcjogJXNcbiIsIF9fZnVuY19fLCBkcy0+ZHNfcmVtb3Rlc3RyKTsKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IF9uZnM0X3BuZnNfdjRfZHNfY29ubmVjdChzdHJ1Y3QgbmZzX3NlcnZlciAqbWRzX3NydiwKKwkJCQkgc3RydWN0IG5mczRfcG5mc19kcyAqZHMsCisJCQkJIHVuc2lnbmVkIGludCB0aW1lbywKKwkJCQkgdW5zaWduZWQgaW50IHJldHJhbnMsCisJCQkJIHUzMiBtaW5vcl92ZXJzaW9uLAorCQkJCSBycGNfYXV0aGZsYXZvcl90IGF1X2ZsYXZvcikKK3sKKwlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gRVJSX1BUUigtRUlPKTsKKwlzdHJ1Y3QgbmZzNF9wbmZzX2RzX2FkZHIgKmRhOworCWludCBzdGF0dXMgPSAwOworCisJZHByaW50aygiLS0+ICVzIERTICVzIGF1X2ZsYXZvciAlZFxuIiwgX19mdW5jX18sIGRzLT5kc19yZW1vdGVzdHIsCisJCWF1X2ZsYXZvcik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRhLCAmZHMtPmRzX2FkZHJzLCBkYV9ub2RlKSB7CisJCWRwcmludGsoIiVzOiBEUyAlczogdHJ5aW5nIGFkZHJlc3MgJXNcbiIsCisJCQlfX2Z1bmNfXywgZHMtPmRzX3JlbW90ZXN0ciwgZGEtPmRhX3JlbW90ZXN0cik7CisKKwkJY2xwID0gbmZzNF9zZXRfZHNfY2xpZW50KG1kc19zcnYtPm5mc19jbGllbnQsCisJCQkJCShzdHJ1Y3Qgc29ja2FkZHIgKikmZGEtPmRhX2FkZHIsCisJCQkJCWRhLT5kYV9hZGRybGVuLCBJUFBST1RPX1RDUCwKKwkJCQkJdGltZW8sIHJldHJhbnMsIG1pbm9yX3ZlcnNpb24sCisJCQkJCWF1X2ZsYXZvcik7CisJCWlmICghSVNfRVJSKGNscCkpCisJCQlicmVhazsKKwl9CisKKwlpZiAoSVNfRVJSKGNscCkpIHsKKwkJc3RhdHVzID0gUFRSX0VSUihjbHApOworCQlnb3RvIG91dDsKKwl9CisKKwlzdGF0dXMgPSBuZnM0X2luaXRfZHNfc2Vzc2lvbihjbHAsIG1kc19zcnYtPm5mc19jbGllbnQtPmNsX2xlYXNlX3RpbWUpOworCWlmIChzdGF0dXMpCisJCWdvdG8gb3V0X3B1dDsKKworCXNtcF93bWIoKTsKKwlkcy0+ZHNfY2xwID0gY2xwOworCWRwcmludGsoIiVzIFtuZXddIGFkZHI6ICVzXG4iLCBfX2Z1bmNfXywgZHMtPmRzX3JlbW90ZXN0cik7CitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK291dF9wdXQ6CisJbmZzX3B1dF9jbGllbnQoY2xwKTsKKwlnb3RvIG91dDsKK30KKworLyoKKyAqIENyZWF0ZSBhbiBycGMgY29ubmVjdGlvbiB0byB0aGUgbmZzNF9wbmZzX2RzIGRhdGEgc2VydmVyLgorICogQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMuCisgKiBJZiBjb25uZWN0aW9uIGZhaWxzLCBtYWtlIGRldmlkIHVuYXZhaWxhYmxlLgorICovCit2b2lkIG5mczRfcG5mc19kc19jb25uZWN0KHN0cnVjdCBuZnNfc2VydmVyICptZHNfc3J2LCBzdHJ1Y3QgbmZzNF9wbmZzX2RzICpkcywKKwkJCSAgc3RydWN0IG5mczRfZGV2aWNlaWRfbm9kZSAqZGV2aWQsIHVuc2lnbmVkIGludCB0aW1lbywKKwkJCSAgdW5zaWduZWQgaW50IHJldHJhbnMsIHUzMiB2ZXJzaW9uLAorCQkJICB1MzIgbWlub3JfdmVyc2lvbiwgcnBjX2F1dGhmbGF2b3JfdCBhdV9mbGF2b3IpCit7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoTkZTNERTX0NPTk5FQ1RJTkcsICZkcy0+ZHNfc3RhdGUpID09IDApIHsKKwkJaW50IGVyciA9IDA7CisKKwkJaWYgKHZlcnNpb24gPT0gMykgeworCQkJZXJyID0gX25mczRfcG5mc192M19kc19jb25uZWN0KG1kc19zcnYsIGRzLCB0aW1lbywKKwkJCQkJCSAgICAgICByZXRyYW5zLCBhdV9mbGF2b3IpOworCQl9IGVsc2UgaWYgKHZlcnNpb24gPT0gNCkgeworCQkJZXJyID0gX25mczRfcG5mc192NF9kc19jb25uZWN0KG1kc19zcnYsIGRzLCB0aW1lbywKKwkJCQkJCSAgICAgICByZXRyYW5zLCBtaW5vcl92ZXJzaW9uLAorCQkJCQkJICAgICAgIGF1X2ZsYXZvcik7CisJCX0gZWxzZSB7CisJCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgRFMgdmVyc2lvbiAlZFxuIiwgX19mdW5jX18sCisJCQkJdmVyc2lvbik7CisJCQllcnIgPSAtRVBST1RPTk9TVVBQT1JUOworCQl9CisKKwkJaWYgKGVycikKKwkJCW5mczRfbWFya19kZXZpY2VpZF91bmF2YWlsYWJsZShkZXZpZCk7CisJCW5mczRfY2xlYXJfZHNfY29ubl9iaXQoZHMpOworCX0gZWxzZSB7CisJCW5mczRfd2FpdF9kc19jb25uZWN0KGRzKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZnM0X3BuZnNfZHNfY29ubmVjdCk7CisKKy8qCisgKiBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBpcHY0LCBpcHY2IGFuZCBvbmUgbXVsdGktcGF0aCBhZGRyZXNzLgorICovCitzdHJ1Y3QgbmZzNF9wbmZzX2RzX2FkZHIgKgorbmZzNF9kZWNvZGVfbXBfZHNfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIGdmcF90IGdmcF9mbGFncykKK3sKKwlzdHJ1Y3QgbmZzNF9wbmZzX2RzX2FkZHIgKmRhID0gTlVMTDsKKwljaGFyICpidWYsICpwb3J0c3RyOworCV9fYmUxNiBwb3J0OworCWludCBubGVuLCBybGVuOworCWludCB0bXBbMl07CisJX19iZTMyICpwOworCWNoYXIgKm5ldGlkLCAqbWF0Y2hfbmV0aWQ7CisJc2l6ZV90IGxlbiwgbWF0Y2hfbmV0aWRfbGVuOworCWNoYXIgKnN0YXJ0c2VwID0gIiI7CisJY2hhciAqZW5kc2VwID0gIiI7CisKKworCS8qIHJfbmV0aWQgKi8KKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9lcnI7CisJbmxlbiA9IGJlMzJfdG9fY3B1cChwKyspOworCisJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgbmxlbik7CisJaWYgKHVubGlrZWx5KCFwKSkKKwkJZ290byBvdXRfZXJyOworCisJbmV0aWQgPSBrbWFsbG9jKG5sZW4rMSwgZ2ZwX2ZsYWdzKTsKKwlpZiAodW5saWtlbHkoIW5ldGlkKSkKKwkJZ290byBvdXRfZXJyOworCisJbmV0aWRbbmxlbl0gPSAnXDAnOworCW1lbWNweShuZXRpZCwgcCwgbmxlbik7CisKKwkvKiByX2FkZHI6IGlwL2lwNmFkZHIgd2l0aCBwb3J0IGluIGRlYyBvY3RldHMgLSBzZWUgUkZDIDU2NjUgKi8KKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9mcmVlX25ldGlkOworCXJsZW4gPSBiZTMyX3RvX2NwdXAocCk7CisKKwlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCBybGVuKTsKKwlpZiAodW5saWtlbHkoIXApKQorCQlnb3RvIG91dF9mcmVlX25ldGlkOworCisJLyogcG9ydCBpcyAiLkFCQy5ERUYiLCA4IGNoYXJzIG1heCAqLworCWlmIChybGVuID4gSU5FVDZfQUREUlNUUkxFTiArIElQVjZfU0NPUEVfSURfTEVOICsgOCkgeworCQlkcHJpbnRrKCIlczogSW52YWxpZCBhZGRyZXNzLCBsZW5ndGggJWRcbiIsIF9fZnVuY19fLAorCQkJcmxlbik7CisJCWdvdG8gb3V0X2ZyZWVfbmV0aWQ7CisJfQorCWJ1ZiA9IGttYWxsb2MocmxlbiArIDEsIGdmcF9mbGFncyk7CisJaWYgKCFidWYpIHsKKwkJZHByaW50aygiJXM6IE5vdCBlbm91Z2ggbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2ZyZWVfbmV0aWQ7CisJfQorCWJ1ZltybGVuXSA9ICdcMCc7CisJbWVtY3B5KGJ1ZiwgcCwgcmxlbik7CisKKwkvKiByZXBsYWNlIHBvcnQgJy4nIHdpdGggJy0nICovCisJcG9ydHN0ciA9IHN0cnJjaHIoYnVmLCAnLicpOworCWlmICghcG9ydHN0cikgeworCQlkcHJpbnRrKCIlczogRmFpbGVkIGZpbmRpbmcgZXhwZWN0ZWQgZG90IGluIHBvcnRcbiIsCisJCQlfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2ZyZWVfYnVmOworCX0KKwkqcG9ydHN0ciA9ICctJzsKKworCS8qIGZpbmQgJy4nIGJldHdlZW4gYWRkcmVzcyBhbmQgcG9ydCAqLworCXBvcnRzdHIgPSBzdHJyY2hyKGJ1ZiwgJy4nKTsKKwlpZiAoIXBvcnRzdHIpIHsKKwkJZHByaW50aygiJXM6IEZhaWxlZCBmaW5kaW5nIGV4cGVjdGVkIGRvdCBiZXR3ZWVuIGFkZHJlc3MgYW5kICIKKwkJCSJwb3J0XG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gb3V0X2ZyZWVfYnVmOworCX0KKwkqcG9ydHN0ciA9ICdcMCc7CisKKwlkYSA9IGt6YWxsb2Moc2l6ZW9mKCpkYSksIGdmcF9mbGFncyk7CisJaWYgKHVubGlrZWx5KCFkYSkpCisJCWdvdG8gb3V0X2ZyZWVfYnVmOworCisJSU5JVF9MSVNUX0hFQUQoJmRhLT5kYV9ub2RlKTsKKworCWlmICghcnBjX3B0b24obmV0LCBidWYsIHBvcnRzdHItYnVmLCAoc3RydWN0IHNvY2thZGRyICopJmRhLT5kYV9hZGRyLAorCQkgICAgICBzaXplb2YoZGEtPmRhX2FkZHIpKSkgeworCQlkcHJpbnRrKCIlczogZXJyb3IgcGFyc2luZyBhZGRyZXNzICVzXG4iLCBfX2Z1bmNfXywgYnVmKTsKKwkJZ290byBvdXRfZnJlZV9kYTsKKwl9CisKKwlwb3J0c3RyKys7CisJc3NjYW5mKHBvcnRzdHIsICIlZC0lZCIsICZ0bXBbMF0sICZ0bXBbMV0pOworCXBvcnQgPSBodG9ucygodG1wWzBdIDw8IDgpIHwgKHRtcFsxXSkpOworCisJc3dpdGNoIChkYS0+ZGFfYWRkci5zc19mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCSgoc3RydWN0IHNvY2thZGRyX2luICopJmRhLT5kYV9hZGRyKS0+c2luX3BvcnQgPSBwb3J0OworCQlkYS0+ZGFfYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCQltYXRjaF9uZXRpZCA9ICJ0Y3AiOworCQltYXRjaF9uZXRpZF9sZW4gPSAzOworCQlicmVhazsKKworCWNhc2UgQUZfSU5FVDY6CisJCSgoc3RydWN0IHNvY2thZGRyX2luNiAqKSZkYS0+ZGFfYWRkciktPnNpbjZfcG9ydCA9IHBvcnQ7CisJCWRhLT5kYV9hZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQltYXRjaF9uZXRpZCA9ICJ0Y3A2IjsKKwkJbWF0Y2hfbmV0aWRfbGVuID0gNDsKKwkJc3RhcnRzZXAgPSAiWyI7CisJCWVuZHNlcCA9ICJdIjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgYWRkcmVzcyBmYW1pbHk6ICV1XG4iLAorCQkJX19mdW5jX18sIGRhLT5kYV9hZGRyLnNzX2ZhbWlseSk7CisJCWdvdG8gb3V0X2ZyZWVfZGE7CisJfQorCisJaWYgKG5sZW4gIT0gbWF0Y2hfbmV0aWRfbGVuIHx8IHN0cm5jbXAobmV0aWQsIG1hdGNoX25ldGlkLCBubGVuKSkgeworCQlkcHJpbnRrKCIlczogRVJST1I6IHJfbmV0aWQgXCIlc1wiICE9IFwiJXNcIlxuIiwKKwkJCV9fZnVuY19fLCBuZXRpZCwgbWF0Y2hfbmV0aWQpOworCQlnb3RvIG91dF9mcmVlX2RhOworCX0KKworCS8qIHNhdmUgaHVtYW4gcmVhZGFibGUgYWRkcmVzcyAqLworCWxlbiA9IHN0cmxlbihzdGFydHNlcCkgKyBzdHJsZW4oYnVmKSArIHN0cmxlbihlbmRzZXApICsgNzsKKwlkYS0+ZGFfcmVtb3Rlc3RyID0ga3phbGxvYyhsZW4sIGdmcF9mbGFncyk7CisKKwkvKiBOVUxMIGlzIG9rLCBvbmx5IHVzZWQgZm9yIGRwcmludGsgKi8KKwlpZiAoZGEtPmRhX3JlbW90ZXN0cikKKwkJc25wcmludGYoZGEtPmRhX3JlbW90ZXN0ciwgbGVuLCAiJXMlcyVzOiV1Iiwgc3RhcnRzZXAsCisJCQkgYnVmLCBlbmRzZXAsIG50b2hzKHBvcnQpKTsKKworCWRwcmludGsoIiVzOiBQYXJzZWQgRFMgYWRkciAlc1xuIiwgX19mdW5jX18sIGRhLT5kYV9yZW1vdGVzdHIpOworCWtmcmVlKGJ1Zik7CisJa2ZyZWUobmV0aWQpOworCXJldHVybiBkYTsKKworb3V0X2ZyZWVfZGE6CisJa2ZyZWUoZGEpOworb3V0X2ZyZWVfYnVmOgorCWRwcmludGsoIiVzOiBFcnJvciBwYXJzaW5nIERTIGFkZHI6ICVzXG4iLCBfX2Z1bmNfXywgYnVmKTsKKwlrZnJlZShidWYpOworb3V0X2ZyZWVfbmV0aWQ6CisJa2ZyZWUobmV0aWQpOworb3V0X2VycjoKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mczRfZGVjb2RlX21wX2RzX2FkZHIpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3JlYWQuYyBiL2ZzL25mcy9yZWFkLmMKaW5kZXggYzkxYTQ3OS4uNTY4ZWNmMCAxMDA2NDQKLS0tIGEvZnMvbmZzL3JlYWQuYworKysgYi9mcy9uZnMvcmVhZC5jCkBAIC03MCw4ICs3MCwxNSBAQAogCiB2b2lkIG5mc19wYWdlaW9fcmVzZXRfcmVhZF9tZHMoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqcGdpbykKIHsKKwlzdHJ1Y3QgbmZzX3BnaW9fbWlycm9yICptaXJyb3I7CisKIAlwZ2lvLT5wZ19vcHMgPSAmbmZzX3BnaW9fcndfb3BzOwotCXBnaW8tPnBnX2JzaXplID0gTkZTX1NFUlZFUihwZ2lvLT5wZ19pbm9kZSktPnJzaXplOworCisJLyogcmVhZCBwYXRoIHNob3VsZCBuZXZlciBoYXZlIG1vcmUgdGhhbiBvbmUgbWlycm9yICovCisJV0FSTl9PTl9PTkNFKHBnaW8tPnBnX21pcnJvcl9jb3VudCAhPSAxKTsKKworCW1pcnJvciA9ICZwZ2lvLT5wZ19taXJyb3JzWzBdOworCW1pcnJvci0+cGdfYnNpemUgPSBORlNfU0VSVkVSKHBnaW8tPnBnX2lub2RlKS0+cnNpemU7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZnNfcGFnZWlvX3Jlc2V0X3JlYWRfbWRzKTsKIApAQCAtODEsNiArODgsNyBAQAogCXN0cnVjdCBuZnNfcGFnZQkqbmV3OwogCXVuc2lnbmVkIGludCBsZW47CiAJc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciBwZ2lvOworCXN0cnVjdCBuZnNfcGdpb19taXJyb3IgKnBnbTsKIAogCWxlbiA9IG5mc19wYWdlX2xlbmd0aChwYWdlKTsKIAlpZiAobGVuID09IDApCkBAIC05Nyw3ICsxMDUsMTMgQEAKIAkJCSAgICAgJm5mc19hc3luY19yZWFkX2NvbXBsZXRpb25fb3BzKTsKIAluZnNfcGFnZWlvX2FkZF9yZXF1ZXN0KCZwZ2lvLCBuZXcpOwogCW5mc19wYWdlaW9fY29tcGxldGUoJnBnaW8pOwotCU5GU19JKGlub2RlKS0+cmVhZF9pbyArPSBwZ2lvLnBnX2J5dGVzX3dyaXR0ZW47CisKKwkvKiBJdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gZG8gbWlycm9yZWQgcmVhZHMhICovCisJV0FSTl9PTl9PTkNFKHBnaW8ucGdfbWlycm9yX2NvdW50ICE9IDEpOworCisJcGdtID0gJnBnaW8ucGdfbWlycm9yc1swXTsKKwlORlNfSShpbm9kZSktPnJlYWRfaW8gKz0gcGdtLT5wZ19ieXRlc193cml0dGVuOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2OCwxMyArMTgyLDE0IEBACiAKIHN0YXRpYyB2b2lkIG5mc19pbml0aWF0ZV9yZWFkKHN0cnVjdCBuZnNfcGdpb19oZWFkZXIgKmhkciwKIAkJCSAgICAgIHN0cnVjdCBycGNfbWVzc2FnZSAqbXNnLAorCQkJICAgICAgY29uc3Qgc3RydWN0IG5mc19ycGNfb3BzICpycGNfb3BzLAogCQkJICAgICAgc3RydWN0IHJwY190YXNrX3NldHVwICp0YXNrX3NldHVwX2RhdGEsIGludCBob3cpCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGhkci0+aW5vZGU7CiAJaW50IHN3YXBfZmxhZ3MgPSBJU19TV0FQRklMRShpbm9kZSkgPyBORlNfUlBDX1NXQVBGTEFHUyA6IDA7CiAKIAl0YXNrX3NldHVwX2RhdGEtPmZsYWdzIHw9IHN3YXBfZmxhZ3M7Ci0JTkZTX1BST1RPKGlub2RlKS0+cmVhZF9zZXR1cChoZHIsIG1zZyk7CisJcnBjX29wcy0+cmVhZF9zZXR1cChoZHIsIG1zZyk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zNTEsNiArMzY2LDcgQEAKIAkJc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMsIHVuc2lnbmVkIG5yX3BhZ2VzKQogewogCXN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgcGdpbzsKKwlzdHJ1Y3QgbmZzX3BnaW9fbWlycm9yICpwZ207CiAJc3RydWN0IG5mc19yZWFkZGVzYyBkZXNjID0gewogCQkucGdpbyA9ICZwZ2lvLAogCX07CkBAIC0zODYsMTAgKzQwMiwxNSBAQAogCQkJICAgICAmbmZzX2FzeW5jX3JlYWRfY29tcGxldGlvbl9vcHMpOwogCiAJcmV0ID0gcmVhZF9jYWNoZV9wYWdlcyhtYXBwaW5nLCBwYWdlcywgcmVhZHBhZ2VfYXN5bmNfZmlsbGVyLCAmZGVzYyk7Ci0KIAluZnNfcGFnZWlvX2NvbXBsZXRlKCZwZ2lvKTsKLQlORlNfSShpbm9kZSktPnJlYWRfaW8gKz0gcGdpby5wZ19ieXRlc193cml0dGVuOwotCW5wYWdlcyA9IChwZ2lvLnBnX2J5dGVzX3dyaXR0ZW4gKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOworCisJLyogSXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIGRvIG1pcnJvcmVkIHJlYWRzISAqLworCVdBUk5fT05fT05DRShwZ2lvLnBnX21pcnJvcl9jb3VudCAhPSAxKTsKKworCXBnbSA9ICZwZ2lvLnBnX21pcnJvcnNbMF07CisJTkZTX0koaW5vZGUpLT5yZWFkX2lvICs9IHBnbS0+cGdfYnl0ZXNfd3JpdHRlbjsKKwlucGFnZXMgPSAocGdtLT5wZ19ieXRlc193cml0dGVuICsgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4KKwkJIFBBR0VfQ0FDSEVfU0hJRlQ7CiAJbmZzX2FkZF9zdGF0cyhpbm9kZSwgTkZTSU9TX1JFQURQQUdFUywgbnBhZ2VzKTsKIHJlYWRfY29tcGxldGU6CiAJcHV0X25mc19vcGVuX2NvbnRleHQoZGVzYy5jdHgpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3N1cGVyLmMgYi9mcy9uZnMvc3VwZXIuYwppbmRleCAzMWExMWIwLi4zNjhkOTM5IDEwMDY0NAotLS0gYS9mcy9uZnMvc3VwZXIuYworKysgYi9mcy9uZnMvc3VwZXIuYwpAQCAtNDA1LDEyICs0MDUsMTUgQEAKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJm5mc19mc190eXBlKTsKIH0KIAotdm9pZCBuZnNfc2JfYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCitib29sIG5mc19zYl9hY3RpdmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NCKHNiKTsKIAotCWlmIChhdG9taWNfaW5jX3JldHVybigmc2VydmVyLT5hY3RpdmUpID09IDEpCi0JCWF0b21pY19pbmMoJnNiLT5zX2FjdGl2ZSk7CisJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZzYi0+c19hY3RpdmUpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZzZXJ2ZXItPmFjdGl2ZSkgIT0gMSkKKwkJYXRvbWljX2RlYygmc2ItPnNfYWN0aXZlKTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mc19zYl9hY3RpdmUpOwogCmRpZmYgLS1naXQgYS9mcy9uZnMvd3JpdGUuYyBiL2ZzL25mcy93cml0ZS5jCmluZGV4IGFmM2FmNjguLmJjZjgzZTUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy93cml0ZS5jCisrKyBiL2ZzL25mcy93cml0ZS5jCkBAIC00NzMsMTMgKzQ3MywxOCBAQAogCWRvIHsKIAkJLyoKIAkJICogU3VicmVxdWVzdHMgYXJlIGFsd2F5cyBjb250aWd1b3VzLCBub24gb3ZlcmxhcHBpbmcKLQkJICogYW5kIGluIG9yZGVyLiBJZiBub3QsIGl0J3MgYSBwcm9ncmFtbWluZyBlcnJvci4KKwkJICogYW5kIGluIG9yZGVyIC0gYnV0IG1heSBiZSByZXBlYXRlZCAobWlycm9yZWQgd3JpdGVzKS4KIAkJICovCi0JCVdBUk5fT05fT05DRShzdWJyZXEtPndiX29mZnNldCAhPQotCQkgICAgIChoZWFkLT53Yl9vZmZzZXQgKyB0b3RhbF9ieXRlcykpOwotCi0JCS8qIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgYnl0ZXMgdGhpcyBncm91cCBjb3ZlcnMgKi8KLQkJdG90YWxfYnl0ZXMgKz0gc3VicmVxLT53Yl9ieXRlczsKKwkJaWYgKHN1YnJlcS0+d2Jfb2Zmc2V0ID09IChoZWFkLT53Yl9vZmZzZXQgKyB0b3RhbF9ieXRlcykpIHsKKwkJCS8qIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgYnl0ZXMgdGhpcyBncm91cCBjb3ZlcnMgKi8KKwkJCXRvdGFsX2J5dGVzICs9IHN1YnJlcS0+d2JfYnl0ZXM7CisJCX0gZWxzZSBpZiAoV0FSTl9PTl9PTkNFKHN1YnJlcS0+d2Jfb2Zmc2V0IDwgaGVhZC0+d2Jfb2Zmc2V0IHx8CisJCQkgICAgKChzdWJyZXEtPndiX29mZnNldCArIHN1YnJlcS0+d2JfYnl0ZXMpID4KKwkJCSAgICAgKGhlYWQtPndiX29mZnNldCArIHRvdGFsX2J5dGVzKSkpKSB7CisJCQluZnNfcGFnZV9ncm91cF91bmxvY2soaGVhZCk7CisJCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKKwkJfQogCiAJCWlmICghbmZzX2xvY2tfcmVxdWVzdChzdWJyZXEpKSB7CiAJCQkvKiByZWxlYXNlcyBwYWdlIGdyb3VwIGJpdCBsb2NrIGFuZApAQCAtODQyLDkgKzg0Nyw5IEBACiAgKi8KIHZvaWQKIG5mc19tYXJrX3JlcXVlc3RfY29tbWl0KHN0cnVjdCBuZnNfcGFnZSAqcmVxLCBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywKLQkJCXN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvKQorCQkJc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8sIHUzMiBkc19jb21taXRfaWR4KQogewotCWlmIChwbmZzX21hcmtfcmVxdWVzdF9jb21taXQocmVxLCBsc2VnLCBjaW5mbykpCisJaWYgKHBuZnNfbWFya19yZXF1ZXN0X2NvbW1pdChyZXEsIGxzZWcsIGNpbmZvLCBkc19jb21taXRfaWR4KSkKIAkJcmV0dXJuOwogCW5mc19yZXF1ZXN0X2FkZF9jb21taXRfbGlzdChyZXEsICZjaW5mby0+bWRzLT5saXN0LCBjaW5mbyk7CiB9CkBAIC05MDAsNyArOTA1LDggQEAKIAkJfQogCQlpZiAobmZzX3dyaXRlX25lZWRfY29tbWl0KGhkcikpIHsKIAkJCW1lbWNweSgmcmVxLT53Yl92ZXJmLCAmaGRyLT52ZXJmLnZlcmlmaWVyLCBzaXplb2YocmVxLT53Yl92ZXJmKSk7Ci0JCQluZnNfbWFya19yZXF1ZXN0X2NvbW1pdChyZXEsIGhkci0+bHNlZywgJmNpbmZvKTsKKwkJCW5mc19tYXJrX3JlcXVlc3RfY29tbWl0KHJlcSwgaGRyLT5sc2VnLCAmY2luZm8sCisJCQkJaGRyLT5wZ2lvX21pcnJvcl9pZHgpOwogCQkJZ290byBuZXh0OwogCQl9CiByZW1vdmVfcmVxOgpAQCAtMTA5MSw2ICsxMDk3LDcgQEAKIHsKIAlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4ID0gbmZzX2ZpbGVfb3Blbl9jb250ZXh0KGZpbGUpOwogCXN0cnVjdCBuZnNfbG9ja19jb250ZXh0ICpsX2N0eDsKKwlzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmZsY3R4ID0gZmlsZV9pbm9kZShmaWxlKS0+aV9mbGN0eDsKIAlzdHJ1Y3QgbmZzX3BhZ2UJKnJlcTsKIAlpbnQgZG9fZmx1c2gsIHN0YXR1czsKIAkvKgpAQCAtMTEwOSw3ICsxMTE2LDkgQEAKIAkJZG9fZmx1c2ggPSByZXEtPndiX3BhZ2UgIT0gcGFnZSB8fCByZXEtPndiX2NvbnRleHQgIT0gY3R4OwogCQkvKiBmb3Igbm93LCBmbHVzaCBpZiBtb3JlIHRoYW4gMSByZXF1ZXN0IGluIHBhZ2VfZ3JvdXAgKi8KIAkJZG9fZmx1c2ggfD0gcmVxLT53Yl90aGlzX3BhZ2UgIT0gcmVxOwotCQlpZiAobF9jdHggJiYgY3R4LT5kZW50cnktPmRfaW5vZGUtPmlfZmxvY2sgIT0gTlVMTCkgeworCQlpZiAobF9jdHggJiYgZmxjdHggJiYKKwkJICAgICEobGlzdF9lbXB0eV9jYXJlZnVsKCZmbGN0eC0+ZmxjX3Bvc2l4KSAmJgorCQkgICAgICBsaXN0X2VtcHR5X2NhcmVmdWwoJmZsY3R4LT5mbGNfZmxvY2spKSkgewogCQkJZG9fZmx1c2ggfD0gbF9jdHgtPmxvY2tvd25lci5sX293bmVyICE9IGN1cnJlbnQtPmZpbGVzCiAJCQkJfHwgbF9jdHgtPmxvY2tvd25lci5sX3BpZCAhPSBjdXJyZW50LT50Z2lkOwogCQl9CkBAIC0xMTcwLDYgKzExNzksMTMgQEAKIAlyZXR1cm4gUGFnZVVwdG9kYXRlKHBhZ2UpICE9IDA7CiB9CiAKK3N0YXRpYyBib29sCitpc193aG9sZV9maWxlX3dybG9jayhzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKK3sKKwlyZXR1cm4gZmwtPmZsX3N0YXJ0ID09IDAgJiYgZmwtPmZsX2VuZCA9PSBPRkZTRVRfTUFYICYmCisJCQlmbC0+ZmxfdHlwZSA9PSBGX1dSTENLOworfQorCiAvKiBJZiB3ZSBrbm93IHRoZSBwYWdlIGlzIHVwIHRvIGRhdGUsIGFuZCB3ZSdyZSBub3QgdXNpbmcgYnl0ZSByYW5nZSBsb2NrcyAob3IKICAqIGlmIHdlIGhhdmUgdGhlIHdob2xlIGZpbGUgbG9ja2VkIGZvciB3cml0aW5nKSwgaXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50IHRvCiAgKiBleHRlbmQgdGhlIHdyaXRlIHRvIGNvdmVyIHRoZSBlbnRpcmUgcGFnZSBpbiBvcmRlciB0byBhdm9pZCBmcmFnbWVudGF0aW9uCkBAIC0xMTgwLDE3ICsxMTk2LDM2IEBACiAgKi8KIHN0YXRpYyBpbnQgbmZzX2Nhbl9leHRlbmRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeworCWludCByZXQ7CisJc3RydWN0IGZpbGVfbG9ja19jb250ZXh0ICpmbGN0eCA9IGlub2RlLT5pX2ZsY3R4OworCXN0cnVjdCBmaWxlX2xvY2sgKmZsOworCiAJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX0RTWU5DKQogCQlyZXR1cm4gMDsKIAlpZiAoIW5mc193cml0ZV9wYWdldXB0b2RhdGUocGFnZSwgaW5vZGUpKQogCQlyZXR1cm4gMDsKIAlpZiAoTkZTX1BST1RPKGlub2RlKS0+aGF2ZV9kZWxlZ2F0aW9uKGlub2RlLCBGTU9ERV9XUklURSkpCiAJCXJldHVybiAxOwotCWlmIChpbm9kZS0+aV9mbG9jayA9PSBOVUxMIHx8IChpbm9kZS0+aV9mbG9jay0+Zmxfc3RhcnQgPT0gMCAmJgotCQkJaW5vZGUtPmlfZmxvY2stPmZsX2VuZCA9PSBPRkZTRVRfTUFYICYmCi0JCQlpbm9kZS0+aV9mbG9jay0+ZmxfdHlwZSAhPSBGX1JETENLKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7CisJaWYgKCFmbGN0eCB8fCAobGlzdF9lbXB0eV9jYXJlZnVsKCZmbGN0eC0+ZmxjX2Zsb2NrKSAmJgorCQkgICAgICAgbGlzdF9lbXB0eV9jYXJlZnVsKCZmbGN0eC0+ZmxjX3Bvc2l4KSkpCisJCXJldHVybiAwOworCisJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSB3aG9sZSBmaWxlIHdyaXRlIGxvY2tzICovCisJcmV0ID0gMDsKKwlzcGluX2xvY2soJmZsY3R4LT5mbGNfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZmbGN0eC0+ZmxjX3Bvc2l4KSkgeworCQlmbCA9IGxpc3RfZmlyc3RfZW50cnkoJmZsY3R4LT5mbGNfcG9zaXgsIHN0cnVjdCBmaWxlX2xvY2ssCisJCQkJCWZsX2xpc3QpOworCQlpZiAoaXNfd2hvbGVfZmlsZV93cmxvY2soZmwpKQorCQkJcmV0ID0gMTsKKwl9IGVsc2UgaWYgKCFsaXN0X2VtcHR5KCZmbGN0eC0+ZmxjX2Zsb2NrKSkgeworCQlmbCA9IGxpc3RfZmlyc3RfZW50cnkoJmZsY3R4LT5mbGNfZmxvY2ssIHN0cnVjdCBmaWxlX2xvY2ssCisJCQkJCWZsX2xpc3QpOworCQlpZiAoZmwtPmZsX3R5cGUgPT0gRl9XUkxDSykKKwkJCXJldCA9IDE7CisJfQorCXNwaW5fdW5sb2NrKCZmbGN0eC0+ZmxjX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0xMjQwLDE1ICsxMjc1LDE1IEBACiAKIHN0YXRpYyB2b2lkIG5mc19pbml0aWF0ZV93cml0ZShzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICpoZHIsCiAJCQkgICAgICAgc3RydWN0IHJwY19tZXNzYWdlICptc2csCisJCQkgICAgICAgY29uc3Qgc3RydWN0IG5mc19ycGNfb3BzICpycGNfb3BzLAogCQkJICAgICAgIHN0cnVjdCBycGNfdGFza19zZXR1cCAqdGFza19zZXR1cF9kYXRhLCBpbnQgaG93KQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBoZHItPmlub2RlOwogCWludCBwcmlvcml0eSA9IGZsdXNoX3Rhc2tfcHJpb3JpdHkoaG93KTsKIAogCXRhc2tfc2V0dXBfZGF0YS0+cHJpb3JpdHkgPSBwcmlvcml0eTsKLQlORlNfUFJPVE8oaW5vZGUpLT53cml0ZV9zZXR1cChoZHIsIG1zZyk7CisJcnBjX29wcy0+d3JpdGVfc2V0dXAoaGRyLCBtc2cpOwogCi0JbmZzNF9zdGF0ZV9wcm90ZWN0X3dyaXRlKE5GU19TRVJWRVIoaW5vZGUpLT5uZnNfY2xpZW50LAorCW5mczRfc3RhdGVfcHJvdGVjdF93cml0ZShORlNfU0VSVkVSKGhkci0+aW5vZGUpLT5uZnNfY2xpZW50LAogCQkJCSAmdGFza19zZXR1cF9kYXRhLT5ycGNfY2xpZW50LCBtc2csIGhkcik7CiB9CiAKQEAgLTEyOTgsOCArMTMzMywxNCBAQAogCiB2b2lkIG5mc19wYWdlaW9fcmVzZXRfd3JpdGVfbWRzKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKnBnaW8pCiB7CisJc3RydWN0IG5mc19wZ2lvX21pcnJvciAqbWlycm9yOworCiAJcGdpby0+cGdfb3BzID0gJm5mc19wZ2lvX3J3X29wczsKLQlwZ2lvLT5wZ19ic2l6ZSA9IE5GU19TRVJWRVIocGdpby0+cGdfaW5vZGUpLT53c2l6ZTsKKworCW5mc19wYWdlaW9fc3RvcF9taXJyb3JpbmcocGdpbyk7CisKKwltaXJyb3IgPSAmcGdpby0+cGdfbWlycm9yc1swXTsKKwltaXJyb3ItPnBnX2JzaXplID0gTkZTX1NFUlZFUihwZ2lvLT5wZ19pbm9kZSktPndzaXplOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZzX3BhZ2Vpb19yZXNldF93cml0ZV9tZHMpOwogCkBAIC0xNDY1LDYgKzE1MDYsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwobmZzX2NvbW1pdGRhdGFfcmVsZWFzZSk7CiAKIGludCBuZnNfaW5pdGlhdGVfY29tbWl0KHN0cnVjdCBycGNfY2xudCAqY2xudCwgc3RydWN0IG5mc19jb21taXRfZGF0YSAqZGF0YSwKKwkJCWNvbnN0IHN0cnVjdCBuZnNfcnBjX29wcyAqbmZzX29wcywKIAkJCWNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgKmNhbGxfb3BzLAogCQkJaW50IGhvdywgaW50IGZsYWdzKQogewpAQCAtMTQ4Niw3ICsxNTI4LDcgQEAKIAkJLnByaW9yaXR5ID0gcHJpb3JpdHksCiAJfTsKIAkvKiBTZXQgdXAgdGhlIGluaXRpYWwgdGFzayBzdHJ1Y3QuICAqLwotCU5GU19QUk9UTyhkYXRhLT5pbm9kZSktPmNvbW1pdF9zZXR1cChkYXRhLCAmbXNnKTsKKwluZnNfb3BzLT5jb21taXRfc2V0dXAoZGF0YSwgJm1zZyk7CiAKIAlkcHJpbnRrKCJORlM6ICU1dSBpbml0aWF0ZWQgY29tbWl0IGNhbGxcbiIsIGRhdGEtPnRhc2sudGtfcGlkKTsKIApAQCAtMTU1NCwxNCArMTU5NiwxNSBAQAogCiB2b2lkIG5mc19yZXRyeV9jb21taXQoc3RydWN0IGxpc3RfaGVhZCAqcGFnZV9saXN0LAogCQkgICAgICBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZywKLQkJICAgICAgc3RydWN0IG5mc19jb21taXRfaW5mbyAqY2luZm8pCisJCSAgICAgIHN0cnVjdCBuZnNfY29tbWl0X2luZm8gKmNpbmZvLAorCQkgICAgICB1MzIgZHNfY29tbWl0X2lkeCkKIHsKIAlzdHJ1Y3QgbmZzX3BhZ2UgKnJlcTsKIAogCXdoaWxlICghbGlzdF9lbXB0eShwYWdlX2xpc3QpKSB7CiAJCXJlcSA9IG5mc19saXN0X2VudHJ5KHBhZ2VfbGlzdC0+bmV4dCk7CiAJCW5mc19saXN0X3JlbW92ZV9yZXF1ZXN0KHJlcSk7Ci0JCW5mc19tYXJrX3JlcXVlc3RfY29tbWl0KHJlcSwgbHNlZywgY2luZm8pOworCQluZnNfbWFya19yZXF1ZXN0X2NvbW1pdChyZXEsIGxzZWcsIGNpbmZvLCBkc19jb21taXRfaWR4KTsKIAkJaWYgKCFjaW5mby0+ZHJlcSkgewogCQkJZGVjX3pvbmVfcGFnZV9zdGF0ZShyZXEtPndiX3BhZ2UsIE5SX1VOU1RBQkxFX05GUyk7CiAJCQlkZWNfYmRpX3N0YXQocGFnZV9maWxlX21hcHBpbmcocmVxLT53Yl9wYWdlKS0+YmFja2luZ19kZXZfaW5mbywKQEAgLTE1ODksMTAgKzE2MzIsMTAgQEAKIAkvKiBTZXQgdXAgdGhlIGFyZ3VtZW50IHN0cnVjdCAqLwogCW5mc19pbml0X2NvbW1pdChkYXRhLCBoZWFkLCBOVUxMLCBjaW5mbyk7CiAJYXRvbWljX2luYygmY2luZm8tPm1kcy0+cnBjc19vdXQpOwotCXJldHVybiBuZnNfaW5pdGlhdGVfY29tbWl0KE5GU19DTElFTlQoaW5vZGUpLCBkYXRhLCBkYXRhLT5tZHNfb3BzLAotCQkJCSAgIGhvdywgMCk7CisJcmV0dXJuIG5mc19pbml0aWF0ZV9jb21taXQoTkZTX0NMSUVOVChpbm9kZSksIGRhdGEsIE5GU19QUk9UTyhpbm9kZSksCisJCQkJICAgZGF0YS0+bWRzX29wcywgaG93LCAwKTsKICBvdXRfYmFkOgotCW5mc19yZXRyeV9jb21taXQoaGVhZCwgTlVMTCwgY2luZm8pOworCW5mc19yZXRyeV9jb21taXQoaGVhZCwgTlVMTCwgY2luZm8sIDApOwogCWNpbmZvLT5jb21wbGV0aW9uX29wcy0+ZXJyb3JfY2xlYW51cChORlNfSShpbm9kZSkpOwogCXJldHVybiAtRU5PTUVNOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0c3RhdGUuYyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKaW5kZXggYzA2YTFiYS4uNTMyYTYwYyAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0c3RhdGUuYworKysgYi9mcy9uZnNkL25mczRzdGF0ZS5jCkBAIC0zNDc3LDcgKzM0NzcsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1uZnNkX2NoYW5nZV9kZWxlZ19jYihzdHJ1Y3QgZmlsZV9sb2NrICoqb25saXN0LCBpbnQgYXJnLCBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwb3NlKQorbmZzZF9jaGFuZ2VfZGVsZWdfY2Ioc3RydWN0IGZpbGVfbG9jayAqb25saXN0LCBpbnQgYXJnLAorCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmRpc3Bvc2UpCiB7CiAJaWYgKGFyZyAmIEZfVU5MQ0spCiAJCXJldHVybiBsZWFzZV9tb2RpZnkob25saXN0LCBhcmcsIGRpc3Bvc2UpOwpAQCAtNTU1NiwxMCArNTU1NywxMSBAQAogc3RhdGljIGJvb2wKIGNoZWNrX2Zvcl9sb2NrcyhzdHJ1Y3QgbmZzNF9maWxlICpmcCwgc3RydWN0IG5mczRfbG9ja293bmVyICpsb3duZXIpCiB7Ci0Jc3RydWN0IGZpbGVfbG9jayAqKmZscHA7CisJc3RydWN0IGZpbGVfbG9jayAqZmw7CiAJaW50IHN0YXR1cyA9IGZhbHNlOwogCXN0cnVjdCBmaWxlICpmaWxwID0gZmluZF9hbnlfZmlsZShmcCk7CiAJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmZsY3R4OwogCiAJaWYgKCFmaWxwKSB7CiAJCS8qIEFueSB2YWxpZCBsb2NrIHN0YXRlaWQgc2hvdWxkIGhhdmUgc29tZSBzb3J0IG9mIGFjY2VzcyAqLwpAQCAtNTU2OCwxNSArNTU3MCwxOCBAQAogCX0KIAogCWlub2RlID0gZmlsZV9pbm9kZShmaWxwKTsKKwlmbGN0eCA9IGlub2RlLT5pX2ZsY3R4OwogCi0Jc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQlmb3IgKGZscHAgPSAmaW5vZGUtPmlfZmxvY2s7ICpmbHBwICE9IE5VTEw7IGZscHAgPSAmKCpmbHBwKS0+ZmxfbmV4dCkgewotCQlpZiAoKCpmbHBwKS0+Zmxfb3duZXIgPT0gKGZsX293bmVyX3QpbG93bmVyKSB7Ci0JCQlzdGF0dXMgPSB0cnVlOwotCQkJYnJlYWs7CisJaWYgKGZsY3R4ICYmICFsaXN0X2VtcHR5X2NhcmVmdWwoJmZsY3R4LT5mbGNfcG9zaXgpKSB7CisJCXNwaW5fbG9jaygmZmxjdHgtPmZsY19sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShmbCwgJmZsY3R4LT5mbGNfcG9zaXgsIGZsX2xpc3QpIHsKKwkJCWlmIChmbC0+Zmxfb3duZXIgPT0gKGZsX293bmVyX3QpbG93bmVyKSB7CisJCQkJc3RhdHVzID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQorCQlzcGluX3VubG9jaygmZmxjdHgtPmZsY19sb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCWZwdXQoZmlscCk7CiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9maWxlLmMgYi9mcy9uaWxmczIvZmlsZS5jCmluZGV4IDNhMDNlMGEuLmE4YzcyOGFjIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZmlsZS5jCisrKyBiL2ZzL25pbGZzMi9maWxlLmMKQEAgLTEyOCw3ICsxMjgsNiBAQAogCS5mYXVsdAkJPSBmaWxlbWFwX2ZhdWx0LAogCS5tYXBfcGFnZXMJPSBmaWxlbWFwX21hcF9wYWdlcywKIAkucGFnZV9ta3dyaXRlCT0gbmlsZnNfcGFnZV9ta3dyaXRlLAotCS5yZW1hcF9wYWdlcwk9IGdlbmVyaWNfZmlsZV9yZW1hcF9wYWdlcywKIH07CiAKIHN0YXRpYyBpbnQgbmlsZnNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9uaWxmcy5oIGIvZnMvbmlsZnMyL25pbGZzLmgKaW5kZXggOTEwOTNjZC4uMzg1NzA0MCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL25pbGZzLmgKKysrIGIvZnMvbmlsZnMyL25pbGZzLmgKQEAgLTE0MSw3ICsxNDEsNiBAQAogICogQHRpX3NhdmU6IEJhY2t1cCBvZiBqb3VybmFsX2luZm8gZmllbGQgb2YgdGFza19zdHJ1Y3QKICAqIEB0aV9mbGFnczogRmxhZ3MKICAqIEB0aV9jb3VudDogTmVzdCBsZXZlbAotICogQHRpX2dhcmJhZ2U6CUxpc3Qgb2YgaW5vZGUgdG8gYmUgcHV0IHdoZW4gcmVsZWFzaW5nIHNlbWFwaG9yZQogICovCiBzdHJ1Y3QgbmlsZnNfdHJhbnNhY3Rpb25faW5mbyB7CiAJdTMyCQkJdGlfbWFnaWM7CkBAIC0xNTAsNyArMTQ5LDYgQEAKIAkJCQkgICBvbmUgb2Ygb3RoZXIgZmlsZXN5c3RlbXMgaGFzIGEgYnVnLiAqLwogCXVuc2lnbmVkIHNob3J0CQl0aV9mbGFnczsKIAl1bnNpZ25lZCBzaG9ydAkJdGlfY291bnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZAl0aV9nYXJiYWdlOwogfTsKIAogLyogdGlfbWFnaWMgKi8KZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9zZWdtZW50LmMgYi9mcy9uaWxmczIvc2VnbWVudC5jCmluZGV4IDdlZjE4ZmMuLjQ2OTA4NmIgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zZWdtZW50LmMKKysrIGIvZnMvbmlsZnMyL3NlZ21lbnQuYwpAQCAtMzA1LDcgKzMwNSw2IEBACiAJdGktPnRpX2NvdW50ID0gMDsKIAl0aS0+dGlfc2F2ZSA9IGN1cl90aTsKIAl0aS0+dGlfbWFnaWMgPSBOSUxGU19USV9NQUdJQzsKLQlJTklUX0xJU1RfSEVBRCgmdGktPnRpX2dhcmJhZ2UpOwogCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IHRpOwogCiAJZm9yICg7OykgewpAQCAtMzMyLDggKzMzMSw2IEBACiAKIAl1cF93cml0ZSgmbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKIAljdXJyZW50LT5qb3VybmFsX2luZm8gPSB0aS0+dGlfc2F2ZTsKLQlpZiAoIWxpc3RfZW1wdHkoJnRpLT50aV9nYXJiYWdlKSkKLQkJbmlsZnNfZGlzcG9zZV9saXN0KG5pbGZzLCAmdGktPnRpX2dhcmJhZ2UsIDApOwogfQogCiBzdGF0aWMgdm9pZCAqbmlsZnNfc2VnY3Rvcl9tYXBfc2Vnc3VtX2VudHJ5KHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2ksCkBAIC03NDYsNiArNzQzLDE1IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBuaWxmc19pcHV0X3dvcmtfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmlsZnNfc2NfaW5mbywKKwkJCQkJCSBzY19pcHV0X3dvcmspOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2NpLT5zY19zdXBlci0+c19mc19pbmZvOworCisJbmlsZnNfZGlzcG9zZV9saXN0KG5pbGZzLCAmc2NpLT5zY19pcHV0X3F1ZXVlLCAwKTsKK30KKwogc3RhdGljIGludCBuaWxmc190ZXN0X21ldGFkYXRhX2RpcnR5KHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLAogCQkJCSAgICAgc3RydWN0IG5pbGZzX3Jvb3QgKnJvb3QpCiB7CkBAIC0xOTAwLDggKzE5MDYsOCBAQAogc3RhdGljIHZvaWQgbmlsZnNfc2VnY3Rvcl9kcm9wX3dyaXR0ZW5fZmlsZXMoc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSwKIAkJCQkJICAgICBzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcykKIHsKLQlzdHJ1Y3QgbmlsZnNfdHJhbnNhY3Rpb25faW5mbyAqdGkgPSBjdXJyZW50LT5qb3VybmFsX2luZm87CiAJc3RydWN0IG5pbGZzX2lub2RlX2luZm8gKmlpLCAqbjsKKwlpbnQgZGVmZXJfaXB1dCA9IGZhbHNlOwogCiAJc3Bpbl9sb2NrKCZuaWxmcy0+bnNfaW5vZGVfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGlpLCBuLCAmc2NpLT5zY19kaXJ0eV9maWxlcywgaV9kaXJ0eSkgewpAQCAtMTkxMiw5ICsxOTE4LDI0IEBACiAJCWNsZWFyX2JpdChOSUxGU19JX0JVU1ksICZpaS0+aV9zdGF0ZSk7CiAJCWJyZWxzZShpaS0+aV9iaCk7CiAJCWlpLT5pX2JoID0gTlVMTDsKLQkJbGlzdF9tb3ZlX3RhaWwoJmlpLT5pX2RpcnR5LCAmdGktPnRpX2dhcmJhZ2UpOworCQlsaXN0X2RlbF9pbml0KCZpaS0+aV9kaXJ0eSk7CisJCWlmICghaWktPnZmc19pbm9kZS5pX25saW5rKSB7CisJCQkvKgorCQkJICogRGVmZXIgY2FsbGluZyBpcHV0KCkgdG8gYXZvaWQgYSBkZWFkbG9jaworCQkJICogb3ZlciBJX1NZTkMgZmxhZyBmb3IgaW5vZGVzIHdpdGggaV9ubGluayA9PSAwCisJCQkgKi8KKwkJCWxpc3RfYWRkX3RhaWwoJmlpLT5pX2RpcnR5LCAmc2NpLT5zY19pcHV0X3F1ZXVlKTsKKwkJCWRlZmVyX2lwdXQgPSB0cnVlOworCQl9IGVsc2UgeworCQkJc3Bpbl91bmxvY2soJm5pbGZzLT5uc19pbm9kZV9sb2NrKTsKKwkJCWlwdXQoJmlpLT52ZnNfaW5vZGUpOworCQkJc3Bpbl9sb2NrKCZuaWxmcy0+bnNfaW5vZGVfbG9jayk7CisJCX0KIAl9CiAJc3Bpbl91bmxvY2soJm5pbGZzLT5uc19pbm9kZV9sb2NrKTsKKworCWlmIChkZWZlcl9pcHV0KQorCQlzY2hlZHVsZV93b3JrKCZzY2ktPnNjX2lwdXRfd29yayk7CiB9CiAKIC8qCkBAIC0yNTgzLDYgKzI2MDQsOCBAQAogCUlOSVRfTElTVF9IRUFEKCZzY2ktPnNjX3NlZ2J1ZnMpOwogCUlOSVRfTElTVF9IRUFEKCZzY2ktPnNjX3dyaXRlX2xvZ3MpOwogCUlOSVRfTElTVF9IRUFEKCZzY2ktPnNjX2djX2lub2Rlcyk7CisJSU5JVF9MSVNUX0hFQUQoJnNjaS0+c2NfaXB1dF9xdWV1ZSk7CisJSU5JVF9XT1JLKCZzY2ktPnNjX2lwdXRfd29yaywgbmlsZnNfaXB1dF93b3JrX2Z1bmMpOwogCWluaXRfdGltZXIoJnNjaS0+c2NfdGltZXIpOwogCiAJc2NpLT5zY19pbnRlcnZhbCA9IEhaICogTklMRlNfU0NfREVGQVVMVF9USU1FT1VUOwpAQCAtMjYwOSw2ICsyNjMyLDggQEAKIAkJcmV0ID0gbmlsZnNfc2VnY3Rvcl9jb25zdHJ1Y3Qoc2NpLCBTQ19MU0VHX1NSKTsKIAkJbmlsZnNfdHJhbnNhY3Rpb25fdW5sb2NrKHNjaS0+c2Nfc3VwZXIpOwogCisJCWZsdXNoX3dvcmsoJnNjaS0+c2NfaXB1dF93b3JrKTsKKwogCX0gd2hpbGUgKHJldCAmJiByZXRyeWNvdW50LS0gPiAwKTsKIH0KIApAQCAtMjYzMyw2ICsyNjU4LDkgQEAKIAkJfHwgc2NpLT5zY19zZXFfcmVxdWVzdCAhPSBzY2ktPnNjX3NlcV9kb25lKTsKIAlzcGluX3VubG9jaygmc2NpLT5zY19zdGF0ZV9sb2NrKTsKIAorCWlmIChmbHVzaF93b3JrKCZzY2ktPnNjX2lwdXRfd29yaykpCisJCWZsYWcgPSB0cnVlOworCiAJaWYgKGZsYWcgfHwgIW5pbGZzX3NlZ2N0b3JfY29uZmlybShzY2kpKQogCQluaWxmc19zZWdjdG9yX3dyaXRlX291dChzY2kpOwogCkBAIC0yNjQyLDYgKzI2NzAsMTIgQEAKIAkJbmlsZnNfZGlzcG9zZV9saXN0KG5pbGZzLCAmc2NpLT5zY19kaXJ0eV9maWxlcywgMSk7CiAJfQogCisJaWYgKCFsaXN0X2VtcHR5KCZzY2ktPnNjX2lwdXRfcXVldWUpKSB7CisJCW5pbGZzX3dhcm5pbmcoc2NpLT5zY19zdXBlciwgX19mdW5jX18sCisJCQkgICAgICAiaXB1dCBxdWV1ZSBpcyBub3QgZW1wdHlcbiIpOworCQluaWxmc19kaXNwb3NlX2xpc3QobmlsZnMsICZzY2ktPnNjX2lwdXRfcXVldWUsIDEpOworCX0KKwogCVdBUk5fT04oIWxpc3RfZW1wdHkoJnNjaS0+c2Nfc2VnYnVmcykpOwogCVdBUk5fT04oIWxpc3RfZW1wdHkoJnNjaS0+c2Nfd3JpdGVfbG9ncykpOwogCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnbWVudC5oIGIvZnMvbmlsZnMyL3NlZ21lbnQuaAppbmRleCAzOGExZDAwLi5hNDhkNmRlIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnbWVudC5oCisrKyBiL2ZzL25pbGZzMi9zZWdtZW50LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9uaWxmczJfZnMuaD4KICNpbmNsdWRlICJuaWxmcy5oIgogCkBAIC05Miw2ICs5Myw4IEBACiAgKiBAc2NfbmJsa19pbmM6IEJsb2NrIGNvdW50IG9mIGN1cnJlbnQgZ2VuZXJhdGlvbgogICogQHNjX2RpcnR5X2ZpbGVzOiBMaXN0IG9mIGZpbGVzIHRvIGJlIHdyaXR0ZW4KICAqIEBzY19nY19pbm9kZXM6IExpc3Qgb2YgR0MgaW5vZGVzIGhhdmluZyBibG9ja3MgdG8gYmUgd3JpdHRlbgorICogQHNjX2lwdXRfcXVldWU6IGxpc3Qgb2YgaW5vZGVzIGZvciB3aGljaCBpcHV0IHNob3VsZCBiZSBkb25lCisgKiBAc2NfaXB1dF93b3JrOiB3b3JrIHN0cnVjdCB0byBkZWZlciBpcHV0IGNhbGwKICAqIEBzY19mcmVlc2VnczogYXJyYXkgb2Ygc2VnbWVudCBudW1iZXJzIHRvIGJlIGZyZWVkCiAgKiBAc2NfbmZyZWVzZWdzOiBudW1iZXIgb2Ygc2VnbWVudHMgb24gQHNjX2ZyZWVzZWdzCiAgKiBAc2NfZHN5bmNfaW5vZGU6IGlub2RlIHdob3NlIGRhdGEgcGFnZXMgYXJlIHdyaXR0ZW4gZm9yIGEgc3luYyBvcGVyYXRpb24KQEAgLTEzNSw2ICsxMzgsOCBAQAogCiAJc3RydWN0IGxpc3RfaGVhZAlzY19kaXJ0eV9maWxlczsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNjX2djX2lub2RlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXNjX2lwdXRfcXVldWU7CisJc3RydWN0IHdvcmtfc3RydWN0CXNjX2lwdXRfd29yazsKIAogCV9fdTY0CQkgICAgICAgKnNjX2ZyZWVzZWdzOwogCXNpemVfdAkJCXNjX25mcmVlc2VnczsKZGlmZiAtLWdpdCBhL2ZzL25vdGlmeS9LY29uZmlnIGIvZnMvbm90aWZ5L0tjb25maWcKaW5kZXggMjJjNjI5ZS4uMmEyNDI0OSAxMDA2NDQKLS0tIGEvZnMvbm90aWZ5L0tjb25maWcKKysrIGIvZnMvbm90aWZ5L0tjb25maWcKQEAgLTEsNSArMSw2IEBACiBjb25maWcgRlNOT1RJRlkKIAlkZWZfYm9vbCBuCisJc2VsZWN0IFNSQ1UKIAogc291cmNlICJmcy9ub3RpZnkvZG5vdGlmeS9LY29uZmlnIgogc291cmNlICJmcy9ub3RpZnkvaW5vdGlmeS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5LmMgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYwppbmRleCAzMGQzYWRkLi41MWNlYjgxIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYworKysgYi9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnkuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJfQogCiAJaWYgKFNfSVNESVIocGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpICYmCi0JICAgIChtYXJrc19pZ25vcmVkX21hc2sgJiBGU19JU0RJUikpCisJICAgICEobWFya3NfbWFzayAmIEZTX0lTRElSICYgfm1hcmtzX2lnbm9yZWRfbWFzaykpCiAJCXJldHVybiBmYWxzZTsKIAogCWlmIChldmVudF9tYXNrICYgbWFya3NfbWFzayAmIH5tYXJrc19pZ25vcmVkX21hc2spCmRpZmYgLS1naXQgYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jIGIvZnMvbm90aWZ5L2Zhbm90aWZ5L2Zhbm90aWZ5X3VzZXIuYwppbmRleCBiZmY4NTY3Li5jZjI3NTUwIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvZmFub3RpZnkvZmFub3RpZnlfdXNlci5jCisrKyBiL2ZzL25vdGlmeS9mYW5vdGlmeS9mYW5vdGlmeV91c2VyLmMKQEAgLTQ4NywxOSArNDg3LDI2IEBACiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCiAJCQkJCSAgICBpbnQgKmRlc3Ryb3kpCiB7Ci0JX191MzIgb2xkbWFzazsKKwlfX3UzMiBvbGRtYXNrID0gMDsKIAogCXNwaW5fbG9jaygmZnNuX21hcmstPmxvY2spOwogCWlmICghKGZsYWdzICYgRkFOX01BUktfSUdOT1JFRF9NQVNLKSkgewotCQlvbGRtYXNrID0gZnNuX21hcmstPm1hc2s7Ci0JCWZzbm90aWZ5X3NldF9tYXJrX21hc2tfbG9ja2VkKGZzbl9tYXJrLCAob2xkbWFzayAmIH5tYXNrKSk7Ci0JfSBlbHNlIHsKLQkJb2xkbWFzayA9IGZzbl9tYXJrLT5pZ25vcmVkX21hc2s7Ci0JCWZzbm90aWZ5X3NldF9tYXJrX2lnbm9yZWRfbWFza19sb2NrZWQoZnNuX21hcmssIChvbGRtYXNrICYgfm1hc2spKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmZzbl9tYXJrLT5sb2NrKTsKKwkJX191MzIgdG1hc2sgPSBmc25fbWFyay0+bWFzayAmIH5tYXNrOwogCi0JKmRlc3Ryb3kgPSAhKG9sZG1hc2sgJiB+bWFzayk7CisJCWlmIChmbGFncyAmIEZBTl9NQVJLX09ORElSKQorCQkJdG1hc2sgJj0gfkZBTl9PTkRJUjsKKworCQlvbGRtYXNrID0gZnNuX21hcmstPm1hc2s7CisJCWZzbm90aWZ5X3NldF9tYXJrX21hc2tfbG9ja2VkKGZzbl9tYXJrLCB0bWFzayk7CisJfSBlbHNlIHsKKwkJX191MzIgdG1hc2sgPSBmc25fbWFyay0+aWdub3JlZF9tYXNrICYgfm1hc2s7CisJCWlmIChmbGFncyAmIEZBTl9NQVJLX09ORElSKQorCQkJdG1hc2sgJj0gfkZBTl9PTkRJUjsKKworCQlmc25vdGlmeV9zZXRfbWFya19pZ25vcmVkX21hc2tfbG9ja2VkKGZzbl9tYXJrLCB0bWFzayk7CisJfQorCSpkZXN0cm95ID0gIShmc25fbWFyay0+bWFzayB8IGZzbl9tYXJrLT5pZ25vcmVkX21hc2spOworCXNwaW5fdW5sb2NrKCZmc25fbWFyay0+bG9jayk7CiAKIAlyZXR1cm4gbWFzayAmIG9sZG1hc2s7CiB9CkBAIC01NjksMjAgKzU3NiwyMiBAQAogCiAJc3Bpbl9sb2NrKCZmc25fbWFyay0+bG9jayk7CiAJaWYgKCEoZmxhZ3MgJiBGQU5fTUFSS19JR05PUkVEX01BU0spKSB7CisJCV9fdTMyIHRtYXNrID0gZnNuX21hcmstPm1hc2sgfCBtYXNrOworCisJCWlmIChmbGFncyAmIEZBTl9NQVJLX09ORElSKQorCQkJdG1hc2sgfD0gRkFOX09ORElSOworCiAJCW9sZG1hc2sgPSBmc25fbWFyay0+bWFzazsKLQkJZnNub3RpZnlfc2V0X21hcmtfbWFza19sb2NrZWQoZnNuX21hcmssIChvbGRtYXNrIHwgbWFzaykpOworCQlmc25vdGlmeV9zZXRfbWFya19tYXNrX2xvY2tlZChmc25fbWFyaywgdG1hc2spOwogCX0gZWxzZSB7CiAJCV9fdTMyIHRtYXNrID0gZnNuX21hcmstPmlnbm9yZWRfbWFzayB8IG1hc2s7CisJCWlmIChmbGFncyAmIEZBTl9NQVJLX09ORElSKQorCQkJdG1hc2sgfD0gRkFOX09ORElSOworCiAJCWZzbm90aWZ5X3NldF9tYXJrX2lnbm9yZWRfbWFza19sb2NrZWQoZnNuX21hcmssIHRtYXNrKTsKIAkJaWYgKGZsYWdzICYgRkFOX01BUktfSUdOT1JFRF9TVVJWX01PRElGWSkKIAkJCWZzbl9tYXJrLT5mbGFncyB8PSBGU05PVElGWV9NQVJLX0ZMQUdfSUdOT1JFRF9TVVJWX01PRElGWTsKIAl9Ci0KLQlpZiAoIShmbGFncyAmIEZBTl9NQVJLX09ORElSKSkgewotCQlfX3UzMiB0bWFzayA9IGZzbl9tYXJrLT5pZ25vcmVkX21hc2sgfCBGQU5fT05ESVI7Ci0JCWZzbm90aWZ5X3NldF9tYXJrX2lnbm9yZWRfbWFza19sb2NrZWQoZnNuX21hcmssIHRtYXNrKTsKLQl9Ci0KIAlzcGluX3VubG9jaygmZnNuX21hcmstPmxvY2spOwogCiAJcmV0dXJuIG1hc2sgJiB+b2xkbWFzazsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FjbC5jIGIvZnMvb2NmczIvYWNsLmMKaW5kZXggN2U4MjgyZC4uYzU4YTFiYyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYWNsLmMKKysrIGIvZnMvb2NmczIvYWNsLmMKQEAgLTI0NSwxNiArMjQ1LDE0IEBACiAJCQlyZXQgPSBwb3NpeF9hY2xfZXF1aXZfbW9kZShhY2wsICZtb2RlKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCXJldHVybiByZXQ7Ci0JCQllbHNlIHsKLQkJCQlpZiAocmV0ID09IDApCi0JCQkJCWFjbCA9IE5VTEw7CiAKLQkJCQlyZXQgPSBvY2ZzMl9hY2xfc2V0X21vZGUoaW5vZGUsIGRpX2JoLAotCQkJCQkJCSBoYW5kbGUsIG1vZGUpOwotCQkJCWlmIChyZXQpCi0JCQkJCXJldHVybiByZXQ7CisJCQlpZiAocmV0ID09IDApCisJCQkJYWNsID0gTlVMTDsKIAotCQkJfQorCQkJcmV0ID0gb2NmczJfYWNsX3NldF9tb2RlKGlub2RlLCBkaV9iaCwKKwkJCQkJCSBoYW5kbGUsIG1vZGUpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQUNMX1RZUEVfREVGQVVMVDoKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FsbG9jLmMgYi9mcy9vY2ZzMi9hbGxvYy5jCmluZGV4IGZjYWU5ZWYuLjA0NDE1OGIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FsbG9jLmMKKysrIGIvZnMvb2NmczIvYWxsb2MuYwpAQCAtNjg3Myw3ICs2ODczLDcgQEAKIAlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKIAkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOwogCQltbG9nX2Vycm5vKHJldCk7Ci0JCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBvdXQ7CiAJfQogCiAJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGkoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIGRpX2JoLApAQCAtNjkzMSw3ICs2OTMxLDcgQEAKIAkJaWYgKHJldCkgewogCQkJbWxvZ19lcnJubyhyZXQpOwogCQkJbmVlZF9mcmVlID0gMTsKLQkJCWdvdG8gb3V0X2NvbW1pdDsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCiAJCXBhZ2VfZW5kID0gUEFHRV9DQUNIRV9TSVpFOwpAQCAtNjk2NCwxMiArNjk2NCwxNiBAQAogCQlpZiAocmV0KSB7CiAJCQltbG9nX2Vycm5vKHJldCk7CiAJCQluZWVkX2ZyZWUgPSAxOwotCQkJZ290byBvdXRfY29tbWl0OworCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKIAkJaW5vZGUtPmlfYmxvY2tzID0gb2NmczJfaW5vZGVfc2VjdG9yX2NvdW50KGlub2RlKTsKIAl9CiAKK291dF91bmxvY2s6CisJaWYgKHBhZ2VzKQorCQlvY2ZzMl91bmxvY2tfYW5kX2ZyZWVfcGFnZXMocGFnZXMsIG51bV9wYWdlcyk7CisKIG91dF9jb21taXQ6CiAJaWYgKHJldCA8IDAgJiYgZGlkX3F1b3RhKQogCQlkcXVvdF9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsCkBAIC02OTg5LDE1ICs2OTkzLDExIEBACiAKIAlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOwogCi1vdXRfdW5sb2NrOgorb3V0OgogCWlmIChkYXRhX2FjKQogCQlvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoZGF0YV9hYyk7Ci0KLW91dDoKLQlpZiAocGFnZXMpIHsKLQkJb2NmczJfdW5sb2NrX2FuZF9mcmVlX3BhZ2VzKHBhZ2VzLCBudW1fcGFnZXMpOworCWlmIChwYWdlcykKIAkJa2ZyZWUocGFnZXMpOwotCX0KIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jIGIvZnMvb2NmczIvY2x1c3Rlci90Y3AuYwppbmRleCAyZTM1NWUwLi41NmM0MDNhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jCisrKyBiL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMKQEAgLTEwMTYsNyArMTAxNiw4IEBACiAKIAltZW1zZXQobWFwLCAwLCBieXRlcyk7CiAJZm9yIChub2RlID0gMDsgbm9kZSA8IE8yTk1fTUFYX05PREVTOyArK25vZGUpIHsKLQkJbzJuZXRfdHhfY2FuX3Byb2NlZWQobzJuZXRfbm5fZnJvbV9udW0obm9kZSksICZzYywgJnJldCk7CisJCWlmICghbzJuZXRfdHhfY2FuX3Byb2NlZWQobzJuZXRfbm5fZnJvbV9udW0obm9kZSksICZzYywgJnJldCkpCisJCQljb250aW51ZTsKIAkJaWYgKCFyZXQpIHsKIAkJCXNldF9iaXQobm9kZSwgbWFwKTsKIAkJCXNjX3B1dChzYyk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9jbHVzdGVyL3RjcF9pbnRlcm5hbC5oIGIvZnMvb2NmczIvY2x1c3Rlci90Y3BfaW50ZXJuYWwuaAppbmRleCBkYzAyNDM2Ny4uYjk1ZTdkZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci90Y3BfaW50ZXJuYWwuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL3RjcF9pbnRlcm5hbC5oCkBAIC0xMDcsMTIgKzEwNywxMiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJCW5uX3N0YXR1c19saXN0OwogCiAJLyogY29ubmVjdHMgYXJlIGF0dGVtcHRlZCBmcm9tIHdoZW4gaGVhcnRiZWF0IGNvbWVzIHVwIHVudGlsIGVpdGhlciBoYgotCSAqIGdvZXMgZG93biwgdGhlIG5vZGUgaXMgdW5jb25maWd1cmVkLCBubyBjb25uZWN0IGF0dGVtcHRzIHN1Y2NlZWQKLQkgKiBiZWZvcmUgTzJORVRfQ09OTl9JRExFX0RFTEFZLCBvciBhIGNvbm5lY3Qgc3VjY2VlZHMuICBjb25uZWN0X3dvcmsKLQkgKiBpcyBxdWV1ZWQgZnJvbSBzZXRfbm5fc3RhdGUgYm90aCBmcm9tIGhiIHVwIGFuZCBmcm9tIGl0c2VsZiBpZiBhCi0JICogY29ubmVjdCBhdHRlbXB0IGZhaWxzIGFuZCBzbyBjYW4gYmUgc2VsZi1hcm1pbmcuICBzaHV0ZG93biBpcwotCSAqIGNhcmVmdWwgdG8gZmlyc3QgbWFyayB0aGUgbm4gc3VjaCB0aGF0IG5vIGNvbm5lY3RzIHdpbGwgYmUgYXR0ZW1wdGVkCi0JICogYmVmb3JlIGNhbmNlbGluZyBkZWxheWVkIGNvbm5lY3Qgd29yayBhbmQgZmx1c2hpbmcgdGhlIHF1ZXVlLiAqLworCSAqIGdvZXMgZG93biwgdGhlIG5vZGUgaXMgdW5jb25maWd1cmVkLCBvciBhIGNvbm5lY3Qgc3VjY2VlZHMuCisJICogY29ubmVjdF93b3JrIGlzIHF1ZXVlZCBmcm9tIHNldF9ubl9zdGF0ZSBib3RoIGZyb20gaGIgdXAgYW5kIGZyb20KKwkgKiBpdHNlbGYgaWYgYSBjb25uZWN0IGF0dGVtcHQgZmFpbHMgYW5kIHNvIGNhbiBiZSBzZWxmLWFybWluZy4KKwkgKiBzaHV0ZG93biBpcyBjYXJlZnVsIHRvIGZpcnN0IG1hcmsgdGhlIG5uIHN1Y2ggdGhhdCBubyBjb25uZWN0cyB3aWxsCisJICogYmUgYXR0ZW1wdGVkIGJlZm9yZSBjYW5jZWxpbmcgZGVsYXllZCBjb25uZWN0IHdvcmsgYW5kIGZsdXNoaW5nIHRoZQorCSAqIHF1ZXVlLiAqLwogCXN0cnVjdCBkZWxheWVkX3dvcmsJCW5uX2Nvbm5lY3Rfd29yazsKIAl1bnNpZ25lZCBsb25nCQkJbm5fbGFzdF9jb25uZWN0X2F0dGVtcHQ7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2Rpci5jIGIvZnMvb2NmczIvZGlyLmMKaW5kZXggMzE5ZTc4Ni4uYjA4MDUwYiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGlyLmMKKysrIGIvZnMvb2NmczIvZGlyLmMKQEAgLTM0NTYsMTAgKzM0NTYsOCBAQAogCWludCBibG9ja3NpemUgPSBkaXItPmlfc2ItPnNfYmxvY2tzaXplOwogCiAJc3RhdHVzID0gb2NmczJfcmVhZF9kaXJfYmxvY2soZGlyLCAwLCAmYmgsIDApOwotCWlmIChzdGF0dXMpIHsKLQkJbWxvZ19lcnJubyhzdGF0dXMpOworCWlmIChzdGF0dXMpCiAJCWdvdG8gYmFpbDsKLQl9CiAKIAlyZWNfbGVuID0gT0NGUzJfRElSX1JFQ19MRU4obmFtZWxlbik7CiAJb2Zmc2V0ID0gMDsKQEAgLTM0ODAsMTAgKzM0NzgsOSBAQAogCQkJc3RhdHVzID0gb2NmczJfcmVhZF9kaXJfYmxvY2soZGlyLAogCQkJCQkgICAgIG9mZnNldCA+PiBzYi0+c19ibG9ja3NpemVfYml0cywKIAkJCQkJICAgICAmYmgsIDApOwotCQkJaWYgKHN0YXR1cykgewotCQkJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJCWlmIChzdGF0dXMpCiAJCQkJZ290byBiYWlsOwotCQkJfQorCiAJCQkvKiBtb3ZlIHRvIG5leHQgYmxvY2sgKi8KIAkJCWRlID0gKHN0cnVjdCBvY2ZzMl9kaXJfZW50cnkgKikgYmgtPmJfZGF0YTsKIAkJfQpAQCAtMzUxMyw3ICszNTEwLDYgQEAKIAkJZGUgPSAoc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqKSgoY2hhciAqKSBkZSArIGxlMTZfdG9fY3B1KGRlLT5yZWNfbGVuKSk7CiAJfQogCi0Jc3RhdHVzID0gMDsKIGJhaWw6CiAJYnJlbHNlKGJoKTsKIAlpZiAoc3RhdHVzKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWFzdC5jIGIvZnMvb2NmczIvZGxtL2RsbWFzdC5jCmluZGV4IGI0NjI3OGYuLmZkNmJiYmIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1hc3QuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtYXN0LmMKQEAgLTM4NSw4ICszODUsMTIgQEAKIAkJaGVhZCA9ICZyZXMtPmdyYW50ZWQ7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxvY2ssIGhlYWQsIGxpc3QpIHsKLQkJaWYgKGxvY2stPm1sLmNvb2tpZSA9PSBjb29raWUpCisJCS8qIGlmIGxvY2sgaXMgZm91bmQgYnV0IHVubG9jayBpcyBwZW5kaW5nIGlnbm9yZSB0aGUgYmFzdCAqLworCQlpZiAobG9jay0+bWwuY29va2llID09IGNvb2tpZSkgeworCQkJaWYgKGxvY2stPnVubG9ja19wZW5kaW5nKQorCQkJCWJyZWFrOwogCQkJZ290byBkb19hc3Q7CisJCX0KIAl9CiAKIAltbG9nKDAsICJHb3QgJXNhc3QgZm9yIHVua25vd24gbG9jayEgY29va2llPSV1OiVsbHUsIG5hbWU9JS4qcywgIgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWRlYnVnLmMgYi9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYwppbmRleCAxNDllYjU1Li44MjUxMzYwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtZGVidWcuYwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJfQogCXNwaW5fdW5sb2NrKCZkbG0tPnNwaW5sb2NrKTsKIAotCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwgIlRvdGFsIG9uIGxpc3Q6ICVsZFxuIiwgdG90YWwpOworCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwgIlRvdGFsIG9uIGxpc3Q6ICVsdVxuIiwgdG90YWwpOwogCiAJcmV0dXJuIG91dDsKIH0KQEAgLTQ2NCw3ICs0NjQsNyBAQAogCXNwaW5fdW5sb2NrKCZkbG0tPm1hc3Rlcl9sb2NrKTsKIAogCW91dCArPSBzbnByaW50ZihidWYgKyBvdXQsIGxlbiAtIG91dCwKLQkJCSJUb3RhbDogJWxkLCBMb25nZXN0OiAlbGRcbiIsIHRvdGFsLCBsb25nZXN0KTsKKwkJCSJUb3RhbDogJWx1LCBMb25nZXN0OiAlbHVcbiIsIHRvdGFsLCBsb25nZXN0KTsKIAlyZXR1cm4gb3V0OwogfQogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMgYi9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKaW5kZXggNTBhNTlkMi4uN2RmODhhNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYwpAQCAtNjc0LDIwICs2NzQsNiBAQAogCXNwaW5fdW5sb2NrKCZkbG0tPnNwaW5sb2NrKTsKIH0KIAotaW50IGRsbV9qb2luZWQoc3RydWN0IGRsbV9jdHh0ICpkbG0pCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlzcGluX2xvY2soJmRsbV9kb21haW5fbG9jayk7Ci0KLQlpZiAoZGxtLT5kbG1fc3RhdGUgPT0gRExNX0NUWFRfSk9JTkVEKQotCQlyZXQgPSAxOwotCi0Jc3Bpbl91bmxvY2soJmRsbV9kb21haW5fbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBpbnQgZGxtX3NodXR0aW5nX2Rvd24oc3RydWN0IGRsbV9jdHh0ICpkbG0pCiB7CiAJaW50IHJldCA9IDA7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmggYi9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmgKaW5kZXggMmY3ZjYwYi4uZmQ2MTIyYSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5oCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uaApAQCAtMjgsNyArMjgsNiBAQAogZXh0ZXJuIHNwaW5sb2NrX3QgZGxtX2RvbWFpbl9sb2NrOwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZGxtX2RvbWFpbnM7CiAKLWludCBkbG1fam9pbmVkKHN0cnVjdCBkbG1fY3R4dCAqZGxtKTsKIGludCBkbG1fc2h1dHRpbmdfZG93bihzdHJ1Y3QgZGxtX2N0eHQgKmRsbSk7CiB2b2lkIGRsbV9maXJlX2RvbWFpbl9ldmljdGlvbl9jYWxsYmFja3Moc3RydWN0IGRsbV9jdHh0ICpkbG0sCiAJCQkJCWludCBub2RlX251bSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYyBiL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCmluZGV4IGNlY2Q4NzUuLmNlMTJlMGIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCisrKyBiL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jCkBAIC0xMDcwLDYgKzEwNzAsOSBAQAogCQkJCQkgICAgIGRlYWRfbm9kZSwgZGxtLT5uYW1lKTsKIAkJCQkJbGlzdF9kZWxfaW5pdCgmbG9jay0+bGlzdCk7CiAJCQkJCWRsbV9sb2NrX3B1dChsb2NrKTsKKwkJCQkJLyogQ2FuJ3Qgc2NoZWR1bGUgRExNX1VOTE9DS19GUkVFX0xPQ0sKKwkJCQkJICogLSBkbyBtYW51YWxseSAqLworCQkJCQlkbG1fbG9ja19wdXQobG9jayk7CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KQEAgLTIzNDYsNiArMjM0OSwxMCBAQAogCQkJCQkJICAgICBkZWFkX25vZGUsIGRsbS0+bmFtZSk7CiAJCQkJCQlsaXN0X2RlbF9pbml0KCZsb2NrLT5saXN0KTsKIAkJCQkJCWRsbV9sb2NrX3B1dChsb2NrKTsKKwkJCQkJCS8qIENhbid0IHNjaGVkdWxlCisJCQkJCQkgKiBETE1fVU5MT0NLX0ZSRUVfTE9DSworCQkJCQkJICogLSBkbyBtYW51YWxseSAqLworCQkJCQkJZGxtX2xvY2tfcHV0KGxvY2spOwogCQkJCQkJYnJlYWs7CiAJCQkJCX0KIAkJCQl9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1nbHVlLmMgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKaW5kZXggMWM0MjNhZi4uMTE4NDlhNCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtZ2x1ZS5jCisrKyBiL2ZzL29jZnMyL2RsbWdsdWUuYwpAQCAtMzc1MCw2ICszNzUwLDkgQEAKIAkJCWJyZWFrOwogCQlzcGluX3VubG9jaygmZGVudHJ5X2F0dGFjaF9sb2NrKTsKIAorCQlpZiAoU19JU0RJUihkbC0+ZGxfaW5vZGUtPmlfbW9kZSkpCisJCQlzaHJpbmtfZGNhY2hlX3BhcmVudChkZW50cnkpOworCiAJCW1sb2coMCwgImRfZGVsZXRlKCVwZCk7XG4iLCBkZW50cnkpOwogCiAJCS8qCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9maWxlLmMgYi9mcy9vY2ZzMi9maWxlLmMKaW5kZXggMzk1MDY5My4uMjQ1ZGI0ZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZmlsZS5jCisrKyBiL2ZzL29jZnMyL2ZpbGUuYwpAQCAtNTY5LDcgKzU2OSw3IEBACiAJaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmRhdGFfYWMgPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjID0gTlVMTDsKLQllbnVtIG9jZnMyX2FsbG9jX3Jlc3RhcnRlZCB3aHk7CisJZW51bSBvY2ZzMl9hbGxvY19yZXN0YXJ0ZWQgd2h5ID0gUkVTVEFSVF9OT05FOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwogCXN0cnVjdCBvY2ZzMl9leHRlbnRfdHJlZSBldDsKIAlpbnQgZGlkX3F1b3RhID0gMDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2pvdXJuYWwuYyBiL2ZzL29jZnMyL2pvdXJuYWwuYwppbmRleCA0ZjUwMjM4Mi4uZDEwODYwZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvam91cm5hbC5jCisrKyBiL2ZzL29jZnMyL2pvdXJuYWwuYwpAQCAtMTQ0Nyw3ICsxNDQ3LDYgQEAKIAkgKiByZXF1aXJlcyB0aGF0IHdlIGNhbGwgZG9fZXhpdCgpLiAgQW5kIGl0IGlzbid0IGV4cG9ydGVkLCBidXQKIAkgKiBjb21wbGV0ZV9hbmRfZXhpdCgpIHNlZW1zIHRvIGJlIGEgbWluaW1hbCB3cmFwcGVyIGFyb3VuZCBpdC4gKi8KIAljb21wbGV0ZV9hbmRfZXhpdChOVUxMLCBzdGF0dXMpOwotCXJldHVybiBzdGF0dXM7CiB9CiAKIHZvaWQgb2NmczJfcmVjb3ZlcnlfdGhyZWFkKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLCBpbnQgbm9kZV9udW0pCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9tbWFwLmMgYi9mcy9vY2ZzMi9tbWFwLmMKaW5kZXggMTBkNjZjNy4uOTU4MWQxOTAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL21tYXAuYworKysgYi9mcy9vY2ZzMi9tbWFwLmMKQEAgLTE3Myw3ICsxNzMsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBvY2ZzMl9maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJCT0gb2NmczJfZmF1bHQsCiAJLnBhZ2VfbWt3cml0ZQk9IG9jZnMyX3BhZ2VfbWt3cml0ZSwKLQkucmVtYXBfcGFnZXMJPSBnZW5lcmljX2ZpbGVfcmVtYXBfcGFnZXMsCiB9OwogCiBpbnQgb2NmczJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMi5oIGIvZnMvb2NmczIvb2NmczIuaAppbmRleCA3ZDZiN2QwLi5mZGJjYmZlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9vY2ZzMi5oCisrKyBiL2ZzL29jZnMyL29jZnMyLmgKQEAgLTI3OSw2ICsyNzksOCBAQAogCQkJCQkJICAgICB3cml0ZXMgKi8KIAlPQ0ZTMl9NT1VOVF9IQl9OT05FID0gMSA8PCAxMywgLyogTm8gaGVhcnRiZWF0ICovCiAJT0NGUzJfTU9VTlRfSEJfR0xPQkFMID0gMSA8PCAxNCwgLyogR2xvYmFsIGhlYXJ0YmVhdCAqLworCisJT0NGUzJfTU9VTlRfSk9VUk5BTF9BU1lOQ19DT01NSVQgPSAxIDw8IDE1LCAgLyogSm91cm5hbCBBc3luYyBDb21taXQgKi8KIH07CiAKICNkZWZpbmUgT0NGUzJfT1NCX1NPRlRfUk8JMHgwMDAxCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9xdW90YS5oIGIvZnMvb2NmczIvcXVvdGEuaAppbmRleCAxZWFlMzMwLi5iNmQ1MTMzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9xdW90YS5oCisrKyBiL2ZzL29jZnMyL3F1b3RhLmgKQEAgLTQ4LDYgKzQ4LDcgQEAKIC8qIEluLW1lbW9yeSBzdHJ1Y3R1cmUgd2l0aCBxdW90YSBoZWFkZXIgaW5mb3JtYXRpb24gKi8KIHN0cnVjdCBvY2ZzMl9tZW1fZHFpbmZvIHsKIAl1bnNpZ25lZCBpbnQgZHFpX3R5cGU7CQkvKiBRdW90YSB0eXBlIHRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyAqLworCXVuc2lnbmVkIGludCBkcWlfZmxhZ3M7CQkvKiBGbGFncyBPTFFGXyogKi8KIAl1bnNpZ25lZCBpbnQgZHFpX2NodW5rczsJLyogTnVtYmVyIG9mIGNodW5rcyBpbiBsb2NhbCBxdW90YSBmaWxlICovCiAJdW5zaWduZWQgaW50IGRxaV9ibG9ja3M7CS8qIE51bWJlciBvZiBibG9ja3MgYWxsb2NhdGVkIGZvciBsb2NhbCBxdW90YSBmaWxlICovCiAJdW5zaWduZWQgaW50IGRxaV9zeW5jbXM7CS8qIEhvdyBvZnRlbiBzaG91bGQgd2Ugc3luYyB3aXRoIG90aGVyIG5vZGVzICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9xdW90YV9sb2NhbC5jIGIvZnMvb2NmczIvcXVvdGFfbG9jYWwuYwppbmRleCAxMGI2NTM5Li4zZDBiNjNkIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9xdW90YV9sb2NhbC5jCisrKyBiL2ZzL29jZnMyL3F1b3RhX2xvY2FsLmMKQEAgLTczLDEyICs3Myw2IEBACiAJICAgICAgIG9sX2RxYmxrX2Jsb2NrX29mZihzYiwgYywgb2ZmKTsKIH0KIAotLyogQ29tcHV0ZSBibG9jayBudW1iZXIgZnJvbSBnaXZlbiBvZmZzZXQgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9sX2RxYmxrX2ZpbGVfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbG9mZl90IG9mZikKLXsKLQlyZXR1cm4gb2ZmID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwotfQotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvbF9kcWJsa19ibG9ja19vZmZzZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbG9mZl90IG9mZikKIHsKIAlyZXR1cm4gb2ZmICYgKCgxIDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSAtIDEpOwpAQCAtMjkyLDcgKzI4Niw3IEBACiAJbGRpbmZvID0gKHN0cnVjdCBvY2ZzMl9sb2NhbF9kaXNrX2RxaW5mbyAqKShiaC0+Yl9kYXRhICsKIAkJCQkJCU9DRlMyX0xPQ0FMX0lORk9fT0ZGKTsKIAlzcGluX2xvY2soJmRxX2RhdGFfbG9jayk7Ci0JbGRpbmZvLT5kcWlfZmxhZ3MgPSBjcHVfdG9fbGUzMihpbmZvLT5kcWlfZmxhZ3MgJiBEUUZfTUFTSyk7CisJbGRpbmZvLT5kcWlfZmxhZ3MgPSBjcHVfdG9fbGUzMihvaW5mby0+ZHFpX2ZsYWdzKTsKIAlsZGluZm8tPmRxaV9jaHVua3MgPSBjcHVfdG9fbGUzMihvaW5mby0+ZHFpX2NodW5rcyk7CiAJbGRpbmZvLT5kcWlfYmxvY2tzID0gY3B1X3RvX2xlMzIob2luZm8tPmRxaV9ibG9ja3MpOwogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwpAQCAtNzAxLDggKzY5NSw4IEBACiAJLyogV2UgZG9uJ3QgbmVlZCB0aGUgbG9jayBhbmQgd2UgaGF2ZSB0byBhY3F1aXJlIHF1b3RhIGZpbGUgbG9ja3MKIAkgKiB3aGljaCB3aWxsIGxhdGVyIGRlcGVuZCBvbiB0aGlzIGxvY2sgKi8KIAltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZHFpb19tdXRleCk7Ci0JaW5mby0+ZHFpX21heGJsaW1pdCA9IDB4N2ZmZmZmZmZmZmZmZmZmZkxMOwotCWluZm8tPmRxaV9tYXhpbGltaXQgPSAweDdmZmZmZmZmZmZmZmZmZmZMTDsKKwlpbmZvLT5kcWlfbWF4X3NwY19saW1pdCA9IDB4N2ZmZmZmZmZmZmZmZmZmZkxMOworCWluZm8tPmRxaV9tYXhfaW5vX2xpbWl0ID0gMHg3ZmZmZmZmZmZmZmZmZmZmTEw7CiAJb2luZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb2NmczJfbWVtX2RxaW5mbyksIEdGUF9OT0ZTKTsKIAlpZiAoIW9pbmZvKSB7CiAJCW1sb2coTUxfRVJST1IsICJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBvY2ZzMiBxdW90YSIKQEAgLTczNywxMyArNzMxLDEzIEBACiAJfQogCWxkaW5mbyA9IChzdHJ1Y3Qgb2NmczJfbG9jYWxfZGlza19kcWluZm8gKikoYmgtPmJfZGF0YSArCiAJCQkJCQlPQ0ZTMl9MT0NBTF9JTkZPX09GRik7Ci0JaW5mby0+ZHFpX2ZsYWdzID0gbGUzMl90b19jcHUobGRpbmZvLT5kcWlfZmxhZ3MpOworCW9pbmZvLT5kcWlfZmxhZ3MgPSBsZTMyX3RvX2NwdShsZGluZm8tPmRxaV9mbGFncyk7CiAJb2luZm8tPmRxaV9jaHVua3MgPSBsZTMyX3RvX2NwdShsZGluZm8tPmRxaV9jaHVua3MpOwogCW9pbmZvLT5kcWlfYmxvY2tzID0gbGUzMl90b19jcHUobGRpbmZvLT5kcWlfYmxvY2tzKTsKIAlvaW5mby0+ZHFpX2xpYmggPSBiaDsKIAogCS8qIFdlIGNyYXNoZWQgd2hlbiB1c2luZyBsb2NhbCBxdW90YSBmaWxlPyAqLwotCWlmICghKGluZm8tPmRxaV9mbGFncyAmIE9MUUZfQ0xFQU4pKSB7CisJaWYgKCEob2luZm8tPmRxaV9mbGFncyAmIE9MUUZfQ0xFQU4pKSB7CiAJCXJlYyA9IE9DRlMyX1NCKHNiKS0+cXVvdGFfcmVjOwogCQlpZiAoIXJlYykgewogCQkJcmVjID0gb2NmczJfYWxsb2NfcXVvdGFfcmVjb3ZlcnkoKTsKQEAgLTc3Miw3ICs3NjYsNyBAQAogCX0KIAogCS8qIE5vdyBtYXJrIHF1b3RhIGZpbGUgYXMgdXNlZCAqLwotCWluZm8tPmRxaV9mbGFncyAmPSB+T0xRRl9DTEVBTjsKKwlvaW5mby0+ZHFpX2ZsYWdzICY9IH5PTFFGX0NMRUFOOwogCXN0YXR1cyA9IG9jZnMyX21vZGlmeV9iaChscWlub2RlLCBiaCwgb2xxX3VwZGF0ZV9pbmZvLCBpbmZvKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC04NTcsNyArODUxLDcgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBNYXJrIGxvY2FsIGZpbGUgYXMgY2xlYW4gKi8KLQlpbmZvLT5kcWlfZmxhZ3MgfD0gT0xRRl9DTEVBTjsKKwlvaW5mby0+ZHFpX2ZsYWdzIHw9IE9MUUZfQ0xFQU47CiAJc3RhdHVzID0gb2NmczJfbW9kaWZ5X2JoKHNiX2Rxb3B0KHNiKS0+ZmlsZXNbdHlwZV0sCiAJCQkJIG9pbmZvLT5kcWlfbGliaCwKIAkJCQkgb2xxX3VwZGF0ZV9pbmZvLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcmVmY291bnR0cmVlLmMgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwppbmRleCBkODFmNmUyLi5lZTU0MWY5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYworKysgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwpAQCAtMjQyOCw4ICsyNDI4LDYgQEAKIAkJCWdldF9iaChwcmV2X2JoKTsKIAkJfQogCi0JCXJiID0gKHN0cnVjdCBvY2ZzMl9yZWZjb3VudF9ibG9jayAqKXJlZl9sZWFmX2JoLT5iX2RhdGE7Ci0KIAkJdHJhY2Vfb2NmczJfY2FsY19yZWZjb3VudF9tZXRhX2NyZWRpdHNfaXRlcmF0ZSgKIAkJCQlyZWNzX2FkZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyljcG9zLCBjbHVzdGVycywKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KHJlYy5yX2Nwb3MpLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcmVzZXJ2YXRpb25zLmMgYi9mcy9vY2ZzMi9yZXNlcnZhdGlvbnMuYwppbmRleCA0MWZmZDM2Li42YTM0OGIwIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9yZXNlcnZhdGlvbnMuYworKysgYi9mcy9vY2ZzMi9yZXNlcnZhdGlvbnMuYwpAQCAtMzksNyArMzksNyBAQAogI2RlZmluZSBPQ0ZTMl9DSEVDS19SRVNFUlZBVElPTlMKICNlbmRpZgogCi1ERUZJTkVfU1BJTkxPQ0socmVzdl9sb2NrKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socmVzdl9sb2NrKTsKIAogI2RlZmluZQlPQ0ZTMl9NSU5fUkVTVl9XSU5ET1dfQklUUwk4CiAjZGVmaW5lCU9DRlMyX01BWF9SRVNWX1dJTkRPV19CSVRTCTEwMjQKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDgzNzIzMTcuLjg3YTFmNzYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtMTkxLDYgKzE5MSw3IEBACiAJT3B0X2NvaGVyZW5jeV9mdWxsLAogCU9wdF9yZXN2X2xldmVsLAogCU9wdF9kaXJfcmVzdl9sZXZlbCwKKwlPcHRfam91cm5hbF9hc3luY19jb21taXQsCiAJT3B0X2VyciwKIH07CiAKQEAgLTIyMiw2ICsyMjMsNyBAQAogCXtPcHRfY29oZXJlbmN5X2Z1bGwsICJjb2hlcmVuY3k9ZnVsbCJ9LAogCXtPcHRfcmVzdl9sZXZlbCwgInJlc3ZfbGV2ZWw9JXUifSwKIAl7T3B0X2Rpcl9yZXN2X2xldmVsLCAiZGlyX3Jlc3ZfbGV2ZWw9JXUifSwKKwl7T3B0X2pvdXJuYWxfYXN5bmNfY29tbWl0LCAiam91cm5hbF9hc3luY19jb21taXQifSwKIAl7T3B0X2VyciwgTlVMTH0KIH07CiAKQEAgLTEwMDAsMzYgKzEwMDIsNiBAQAogCX0KIH0KIAotLyogSGFuZGxlIHF1b3RhIG9uIHF1b3RhY3RsICovCi1zdGF0aWMgaW50IG9jZnMyX3F1b3RhX29uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgZm9ybWF0X2lkKQotewotCXVuc2lnbmVkIGludCBmZWF0dXJlW09DRlMyX01BWFFVT1RBU10gPSB7Ci0JCQkJCU9DRlMyX0ZFQVRVUkVfUk9fQ09NUEFUX1VTUlFVT1RBLAotCQkJCQlPQ0ZTMl9GRUFUVVJFX1JPX0NPTVBBVF9HUlBRVU9UQX07Ci0KLQlpZiAoIU9DRlMyX0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwgZmVhdHVyZVt0eXBlXSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmV0dXJuIGRxdW90X2VuYWJsZShzYl9kcW9wdChzYiktPmZpbGVzW3R5cGVdLCB0eXBlLAotCQkJICAgIGZvcm1hdF9pZCwgRFFVT1RfTElNSVRTX0VOQUJMRUQpOwotfQotCi0vKiBIYW5kbGUgcXVvdGEgb2ZmIHF1b3RhY3RsICovCi1zdGF0aWMgaW50IG9jZnMyX3F1b3RhX29mZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKLXsKLQlyZXR1cm4gZHF1b3RfZGlzYWJsZShzYiwgdHlwZSwgRFFVT1RfTElNSVRTX0VOQUJMRUQpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcyBvY2ZzMl9xdW90YWN0bF9vcHMgPSB7Ci0JLnF1b3RhX29uX21ldGEJPSBvY2ZzMl9xdW90YV9vbiwKLQkucXVvdGFfb2ZmCT0gb2NmczJfcXVvdGFfb2ZmLAotCS5xdW90YV9zeW5jCT0gZHF1b3RfcXVvdGFfc3luYywKLQkuZ2V0X2luZm8JPSBkcXVvdF9nZXRfZHFpbmZvLAotCS5zZXRfaW5mbwk9IGRxdW90X3NldF9kcWluZm8sCi0JLmdldF9kcWJsawk9IGRxdW90X2dldF9kcWJsaywKLQkuc2V0X2RxYmxrCT0gZHF1b3Rfc2V0X2RxYmxrLAotfTsKLQogc3RhdGljIGludCBvY2ZzMl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCiB7CiAJc3RydWN0IGRlbnRyeSAqcm9vdDsKQEAgLTE1MDAsNiArMTQ3Miw5IEBACiAJCQkgICAgb3B0aW9uIDwgT0NGUzJfTUFYX1JFU1ZfTEVWRUwpCiAJCQkJbW9wdC0+ZGlyX3Jlc3ZfbGV2ZWwgPSBvcHRpb247CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfam91cm5hbF9hc3luY19jb21taXQ6CisJCQltb3B0LT5tb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfSk9VUk5BTF9BU1lOQ19DT01NSVQ7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCW1sb2coTUxfRVJST1IsCiAJCQkgICAgICJVbnJlY29nbml6ZWQgbW91bnQgb3B0aW9uIFwiJXNcIiAiCkBAIC0xNjA2LDYgKzE1ODEsOSBAQAogCWlmIChvc2ItPm9zYl9kaXJfcmVzdl9sZXZlbCAhPSBvc2ItPm9zYl9yZXN2X2xldmVsKQogCQlzZXFfcHJpbnRmKHMsICIsZGlyX3Jlc3ZfbGV2ZWw9JWQiLCBvc2ItPm9zYl9yZXN2X2xldmVsKTsKIAorCWlmIChvcHRzICYgT0NGUzJfTU9VTlRfSk9VUk5BTF9BU1lOQ19DT01NSVQpCisJCXNlcV9wcmludGYocywgIixqb3VybmFsX2FzeW5jX2NvbW1pdCIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwNzksNyArMjA1Nyw3IEBACiAJc2ItPnNfb3AgPSAmb2NmczJfc29wczsKIAlzYi0+c19kX29wID0gJm9jZnMyX2RlbnRyeV9vcHM7CiAJc2ItPnNfZXhwb3J0X29wID0gJm9jZnMyX2V4cG9ydF9vcHM7Ci0Jc2ItPnNfcWNvcCA9ICZvY2ZzMl9xdW90YWN0bF9vcHM7CisJc2ItPnNfcWNvcCA9ICZkcXVvdF9xdW90YWN0bF9zeXNmaWxlX29wczsKIAlzYi0+ZHFfb3AgPSAmb2NmczJfcXVvdGFfb3BlcmF0aW9uczsKIAlzYi0+c19xdW90YV90eXBlcyA9IFFUWVBFX01BU0tfVVNSIHwgUVRZUEVfTUFTS19HUlA7CiAJc2ItPnNfeGF0dHIgPSBvY2ZzMl94YXR0cl9oYW5kbGVyczsKQEAgLTI0NzUsNiArMjQ1MywxNSBAQAogCQlnb3RvIGZpbmFsbHk7CiAJfQogCisJaWYgKG9zYi0+c19tb3VudF9vcHQgJiBPQ0ZTMl9NT1VOVF9KT1VSTkFMX0FTWU5DX0NPTU1JVCkKKwkJamJkMl9qb3VybmFsX3NldF9mZWF0dXJlcyhvc2ItPmpvdXJuYWwtPmpfam91cm5hbCwKKwkJCQlKQkQyX0ZFQVRVUkVfQ09NUEFUX0NIRUNLU1VNLCAwLAorCQkJCUpCRDJfRkVBVFVSRV9JTkNPTVBBVF9BU1lOQ19DT01NSVQpOworCWVsc2UKKwkJamJkMl9qb3VybmFsX2NsZWFyX2ZlYXR1cmVzKG9zYi0+am91cm5hbC0+al9qb3VybmFsLAorCQkJCUpCRDJfRkVBVFVSRV9DT01QQVRfQ0hFQ0tTVU0sIDAsCisJCQkJSkJEMl9GRUFUVVJFX0lOQ09NUEFUX0FTWU5DX0NPTU1JVCk7CisKIAlpZiAoZGlydHkpIHsKIAkJLyogcmVjb3ZlciBteSBsb2NhbCBhbGxvYyBpZiB3ZSBkaWRuJ3QgdW5tb3VudCBjbGVhbmx5LiAqLwogCQlzdGF0dXMgPSBvY2ZzMl9iZWdpbl9sb2NhbF9hbGxvY19yZWNvdmVyeShvc2IsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuYwppbmRleCA2NjJmOGRlLi44NWIxOTBkIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi94YXR0ci5jCisrKyBiL2ZzL29jZnMyL3hhdHRyLmMKQEAgLTUzMzQsMTYgKzUzMzQsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY2hhciAqb2NmczJfeGF0dHJfYnVja2V0X2dldF92YWwoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0LAotCQkJCQlpbnQgb2ZmcykKLXsKLQlpbnQgYmxvY2tfb2ZmID0gb2ZmcyA+PiBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKLQotCW9mZnMgPSBvZmZzICUgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOwotCXJldHVybiBidWNrZXRfYmxvY2soYnVja2V0LCBibG9ja19vZmYpICsgb2ZmczsKLX0KLQogLyoKICAqIFRydW5jYXRlIHRoZSBzcGVjaWZpZWQgeGVfb2ZmIGVudHJ5IGluIHhhdHRyIGJ1Y2tldC4KICAqIGJ1Y2tldCBpcyBpbmRpY2F0ZWQgYnkgaGVhZGVyX2JoIGFuZCBsZW4gaXMgdGhlIG5ldyBsZW5ndGguCmRpZmYgLS1naXQgYS9mcy9wcm9jL3BhZ2UuYyBiL2ZzL3Byb2MvcGFnZS5jCmluZGV4IDFlMzE4N2QuLjdlZWUyZDggMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcGFnZS5jCisrKyBiL2ZzL3Byb2MvcGFnZS5jCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tzbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CisjaW5jbHVkZSA8bGludXgvaHVnZV9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KQEAgLTEyMSw5ICsxMjIsMTggQEAKIAkgKiBqdXN0IGNoZWNrcyBQR19oZWFkL1BHX3RhaWwsIHNvIHdlIG5lZWQgdG8gY2hlY2sgUGFnZUxSVS9QYWdlQW5vbgogCSAqIHRvIG1ha2Ugc3VyZSBhIGdpdmVuIHBhZ2UgaXMgYSB0aHAsIG5vdCBhIG5vbi1odWdlIGNvbXBvdW5kIHBhZ2UuCiAJICovCi0JZWxzZSBpZiAoUGFnZVRyYW5zQ29tcG91bmQocGFnZSkgJiYgKFBhZ2VMUlUoY29tcG91bmRfaGVhZChwYWdlKSkgfHwKLQkJCQkJICAgICBQYWdlQW5vbihjb21wb3VuZF9oZWFkKHBhZ2UpKSkpCi0JCXUgfD0gMSA8PCBLUEZfVEhQOworCWVsc2UgaWYgKFBhZ2VUcmFuc0NvbXBvdW5kKHBhZ2UpKSB7CisJCXN0cnVjdCBwYWdlICpoZWFkID0gY29tcG91bmRfaGVhZChwYWdlKTsKKworCQlpZiAoUGFnZUxSVShoZWFkKSB8fCBQYWdlQW5vbihoZWFkKSkKKwkJCXUgfD0gMSA8PCBLUEZfVEhQOworCQllbHNlIGlmIChpc19odWdlX3plcm9fcGFnZShoZWFkKSkgeworCQkJdSB8PSAxIDw8IEtQRl9aRVJPX1BBR0U7CisJCQl1IHw9IDEgPDwgS1BGX1RIUDsKKwkJfQorCX0gZWxzZSBpZiAoaXNfemVyb19wZm4ocGFnZV90b19wZm4ocGFnZSkpKQorCQl1IHw9IDEgPDwgS1BGX1pFUk9fUEFHRTsKKwogCiAJLyoKIAkgKiBDYXZlYXRzIG9uIGhpZ2ggb3JkZXIgcGFnZXM6IHBhZ2UtPl9jb3VudCB3aWxsIG9ubHkgYmUgc2V0CmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmMKaW5kZXggMjQ2ZWFlOC4uMGUzNmMxZSAxMDA2NDQKLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jCisrKyBiL2ZzL3Byb2MvdGFza19tbXUuYwpAQCAtMjEsNyArMjEsNyBAQAogCiB2b2lkIHRhc2tfbWVtKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0JdW5zaWduZWQgbG9uZyBkYXRhLCB0ZXh0LCBsaWIsIHN3YXA7CisJdW5zaWduZWQgbG9uZyBkYXRhLCB0ZXh0LCBsaWIsIHN3YXAsIHB0ZXMsIHBtZHM7CiAJdW5zaWduZWQgbG9uZyBoaXdhdGVyX3ZtLCB0b3RhbF92bSwgaGl3YXRlcl9yc3MsIHRvdGFsX3JzczsKIAogCS8qCkBAIC00Miw2ICs0Miw4IEBACiAJdGV4dCA9IChQQUdFX0FMSUdOKG1tLT5lbmRfY29kZSkgLSAobW0tPnN0YXJ0X2NvZGUgJiBQQUdFX01BU0spKSA+PiAxMDsKIAlsaWIgPSAobW0tPmV4ZWNfdm0gPDwgKFBBR0VfU0hJRlQtMTApKSAtIHRleHQ7CiAJc3dhcCA9IGdldF9tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7CisJcHRlcyA9IFBUUlNfUEVSX1BURSAqIHNpemVvZihwdGVfdCkgKiBhdG9taWNfbG9uZ19yZWFkKCZtbS0+bnJfcHRlcyk7CisJcG1kcyA9IFBUUlNfUEVSX1BNRCAqIHNpemVvZihwbWRfdCkgKiBtbV9ucl9wbWRzKG1tKTsKIAlzZXFfcHJpbnRmKG0sCiAJCSJWbVBlYWs6XHQlOGx1IGtCXG4iCiAJCSJWbVNpemU6XHQlOGx1IGtCXG4iCkBAIC01NCw2ICs1Niw3IEBACiAJCSJWbUV4ZTpcdCU4bHUga0JcbiIKIAkJIlZtTGliOlx0JThsdSBrQlxuIgogCQkiVm1QVEU6XHQlOGx1IGtCXG4iCisJCSJWbVBNRDpcdCU4bHUga0JcbiIKIAkJIlZtU3dhcDpcdCU4bHUga0JcbiIsCiAJCWhpd2F0ZXJfdm0gPDwgKFBBR0VfU0hJRlQtMTApLAogCQl0b3RhbF92bSA8PCAoUEFHRV9TSElGVC0xMCksCkBAIC02Myw4ICs2Niw4IEBACiAJCXRvdGFsX3JzcyA8PCAoUEFHRV9TSElGVC0xMCksCiAJCWRhdGEgPDwgKFBBR0VfU0hJRlQtMTApLAogCQltbS0+c3RhY2tfdm0gPDwgKFBBR0VfU0hJRlQtMTApLCB0ZXh0LCBsaWIsCi0JCShQVFJTX1BFUl9QVEUgKiBzaXplb2YocHRlX3QpICoKLQkJIGF0b21pY19sb25nX3JlYWQoJm1tLT5ucl9wdGVzKSkgPj4gMTAsCisJCXB0ZXMgPj4gMTAsCisJCXBtZHMgPj4gMTAsCiAJCXN3YXAgPDwgKFBBR0VfU0hJRlQtMTApKTsKIH0KIApAQCAtNDMzLDcgKzQzNiw2IEBACiAKICNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IKIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyB7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZyByZXNpZGVudDsKIAl1bnNpZ25lZCBsb25nIHNoYXJlZF9jbGVhbjsKIAl1bnNpZ25lZCBsb25nIHNoYXJlZF9kaXJ0eTsKQEAgLTQ0Myw3ICs0NDUsNiBAQAogCXVuc2lnbmVkIGxvbmcgYW5vbnltb3VzOwogCXVuc2lnbmVkIGxvbmcgYW5vbnltb3VzX3RocDsKIAl1bnNpZ25lZCBsb25nIHN3YXA7Ci0JdW5zaWduZWQgbG9uZyBub25saW5lYXI7CiAJdTY0IHBzczsKIH07CiAKQEAgLTQ4Myw4ICs0ODQsNyBAQAogCQlzdHJ1Y3QgbW1fd2FsayAqd2FsaykKIHsKIAlzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgKm1zcyA9IHdhbGstPnByaXZhdGU7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSBtc3MtPnZtYTsKLQlwZ29mZl90IHBnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnZtYTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAKIAlpZiAocHRlX3ByZXNlbnQoKnB0ZSkpIHsKQEAgLTQ5NiwxNyArNDk2LDEwIEBACiAJCQltc3MtPnN3YXAgKz0gUEFHRV9TSVpFOwogCQllbHNlIGlmIChpc19taWdyYXRpb25fZW50cnkoc3dwZW50KSkKIAkJCXBhZ2UgPSBtaWdyYXRpb25fZW50cnlfdG9fcGFnZShzd3BlbnQpOwotCX0gZWxzZSBpZiAocHRlX2ZpbGUoKnB0ZSkpIHsKLQkJaWYgKHB0ZV90b19wZ29mZigqcHRlKSAhPSBwZ29mZikKLQkJCW1zcy0+bm9ubGluZWFyICs9IFBBR0VfU0laRTsKIAl9CiAKIAlpZiAoIXBhZ2UpCiAJCXJldHVybjsKLQotCWlmIChwYWdlLT5pbmRleCAhPSBwZ29mZikKLQkJbXNzLT5ub25saW5lYXIgKz0gUEFHRV9TSVpFOwotCiAJc21hcHNfYWNjb3VudChtc3MsIHBhZ2UsIFBBR0VfU0laRSwgcHRlX3lvdW5nKCpwdGUpLCBwdGVfZGlydHkoKnB0ZSkpOwogfQogCkBAIC01MTUsNyArNTA4LDcgQEAKIAkJc3RydWN0IG1tX3dhbGsgKndhbGspCiB7CiAJc3RydWN0IG1lbV9zaXplX3N0YXRzICptc3MgPSB3YWxrLT5wcml2YXRlOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbXNzLT52bWE7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLT52bWE7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKIAkvKiBGT0xMX0RVTVAgd2lsbCByZXR1cm4gLUVGQVVMVCBvbiBodWdlIHplcm8gcGFnZSAqLwpAQCAtNTM2LDggKzUyOSw3IEBACiBzdGF0aWMgaW50IHNtYXBzX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJICAgc3RydWN0IG1tX3dhbGsgKndhbGspCiB7Ci0Jc3RydWN0IG1lbV9zaXplX3N0YXRzICptc3MgPSB3YWxrLT5wcml2YXRlOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gbXNzLT52bWE7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLT52bWE7CiAJcHRlX3QgKnB0ZTsKIAlzcGlubG9ja190ICpwdGw7CiAKQEAgLTU5Niw3ICs1ODgsNiBAQAogCQlbaWxvZzIoVk1fQUNDT1VOVCldCT0gImFjIiwKIAkJW2lsb2cyKFZNX05PUkVTRVJWRSldCT0gIm5yIiwKIAkJW2lsb2cyKFZNX0hVR0VUTEIpXQk9ICJodCIsCi0JCVtpbG9nMihWTV9OT05MSU5FQVIpXQk9ICJubCIsCiAJCVtpbG9nMihWTV9BUkNIXzEpXQk9ICJhciIsCiAJCVtpbG9nMihWTV9ET05URFVNUCldCT0gImRkIiwKICNpZmRlZiBDT05GSUdfTUVNX1NPRlRfRElSVFkKQEAgLTYzMCwxMCArNjIxLDggQEAKIAl9OwogCiAJbWVtc2V0KCZtc3MsIDAsIHNpemVvZiBtc3MpOwotCW1zcy52bWEgPSB2bWE7CiAJLyogbW1hcF9zZW0gaXMgaGVsZCBpbiBtX3N0YXJ0ICovCi0JaWYgKHZtYS0+dm1fbW0gJiYgIWlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKQotCQl3YWxrX3BhZ2VfcmFuZ2Uodm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsICZzbWFwc193YWxrKTsKKwl3YWxrX3BhZ2Vfdm1hKHZtYSwgJnNtYXBzX3dhbGspOwogCiAJc2hvd19tYXBfdm1hKG0sIHZtYSwgaXNfcGlkKTsKIApAQCAtNjY4LDEwICs2NTcsNiBAQAogCQkgICAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgPwogCQkJKHVuc2lnbmVkIGxvbmcpKG1zcy5wc3MgPj4gKDEwICsgUFNTX1NISUZUKSkgOiAwKTsKIAotCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTk9OTElORUFSKQotCQlzZXFfcHJpbnRmKG0sICJOb25saW5lYXI6ICAgICAgJThsdSBrQlxuIiwKLQkJCQltc3Mubm9ubGluZWFyID4+IDEwKTsKLQogCXNob3dfc21hcF92bWFfZmxhZ3MobSwgdm1hKTsKIAltX2NhY2hlX3ZtYShtLCB2bWEpOwogCXJldHVybiAwOwpAQCAtNzUxLDE0ICs3MzYsMTMgQEAKIH07CiAKIHN0cnVjdCBjbGVhcl9yZWZzX3ByaXZhdGUgewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCWVudW0gY2xlYXJfcmVmc190eXBlcyB0eXBlOwogfTsKIAorI2lmZGVmIENPTkZJR19NRU1fU09GVF9ESVJUWQogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSkKIHsKLSNpZmRlZiBDT05GSUdfTUVNX1NPRlRfRElSVFkKIAkvKgogCSAqIFRoZSBzb2Z0LWRpcnR5IHRyYWNrZXIgdXNlcyAjUEYtcyB0byBjYXRjaCB3cml0ZXMKIAkgKiB0byBwYWdlcywgc28gd3JpdGUtcHJvdGVjdCB0aGUgcHRlIGFzIHdlbGwuIFNlZSB0aGUKQEAgLTc3MiwyNCArNzU2LDYzIEBACiAJCXB0ZW50ID0gcHRlX2NsZWFyX2ZsYWdzKHB0ZW50LCBfUEFHRV9TT0ZUX0RJUlRZKTsKIAl9IGVsc2UgaWYgKGlzX3N3YXBfcHRlKHB0ZW50KSkgewogCQlwdGVudCA9IHB0ZV9zd3BfY2xlYXJfc29mdF9kaXJ0eShwdGVudCk7Ci0JfSBlbHNlIGlmIChwdGVfZmlsZShwdGVudCkpIHsKLQkJcHRlbnQgPSBwdGVfZmlsZV9jbGVhcl9zb2Z0X2RpcnR5KHB0ZW50KTsKIAl9CiAKIAlzZXRfcHRlX2F0KHZtYS0+dm1fbW0sIGFkZHIsIHB0ZSwgcHRlbnQpOwotI2VuZGlmCiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcCkKK3sKKwlwbWRfdCBwbWQgPSAqcG1kcDsKKworCXBtZCA9IHBtZF93cnByb3RlY3QocG1kKTsKKwlwbWQgPSBwbWRfY2xlYXJfZmxhZ3MocG1kLCBfUEFHRV9TT0ZUX0RJUlRZKTsKKworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fU09GVERJUlRZKQorCQl2bWEtPnZtX2ZsYWdzICY9IH5WTV9TT0ZURElSVFk7CisKKwlzZXRfcG1kX2F0KHZtYS0+dm1fbW0sIGFkZHIsIHBtZHAsIHBtZCk7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQl1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcCkKK3sKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IGNsZWFyX3JlZnNfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQl1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IG1tX3dhbGsgKndhbGspCiB7CiAJc3RydWN0IGNsZWFyX3JlZnNfcHJpdmF0ZSAqY3AgPSB3YWxrLT5wcml2YXRlOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gY3AtPnZtYTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnZtYTsKIAlwdGVfdCAqcHRlLCBwdGVudDsKIAlzcGlubG9ja190ICpwdGw7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKLQlzcGxpdF9odWdlX3BhZ2VfcG1kKHZtYSwgYWRkciwgcG1kKTsKKwlpZiAocG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSwgJnB0bCkgPT0gMSkgeworCQlpZiAoY3AtPnR5cGUgPT0gQ0xFQVJfUkVGU19TT0ZUX0RJUlRZKSB7CisJCQljbGVhcl9zb2Z0X2RpcnR5X3BtZCh2bWEsIGFkZHIsIHBtZCk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXBhZ2UgPSBwbWRfcGFnZSgqcG1kKTsKKworCQkvKiBDbGVhciBhY2Nlc3NlZCBhbmQgcmVmZXJlbmNlZCBiaXRzLiAqLworCQlwbWRwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHZtYSwgYWRkciwgcG1kKTsKKwkJQ2xlYXJQYWdlUmVmZXJlbmNlZChwYWdlKTsKK291dDoKKwkJc3Bpbl91bmxvY2socHRsKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJaWYgKHBtZF90cmFuc191bnN0YWJsZShwbWQpKQogCQlyZXR1cm4gMDsKIApAQCAtODE4LDYgKzg0MSwyOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNsZWFyX3JlZnNfdGVzdF93YWxrKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCXN0cnVjdCBtbV93YWxrICp3YWxrKQoreworCXN0cnVjdCBjbGVhcl9yZWZzX3ByaXZhdGUgKmNwID0gd2Fsay0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnZtYTsKKworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fUEZOTUFQKQorCQlyZXR1cm4gMTsKKworCS8qCisJICogV3JpdGluZyAxIHRvIC9wcm9jL3BpZC9jbGVhcl9yZWZzIGFmZmVjdHMgYWxsIHBhZ2VzLgorCSAqIFdyaXRpbmcgMiB0byAvcHJvYy9waWQvY2xlYXJfcmVmcyBvbmx5IGFmZmVjdHMgYW5vbnltb3VzIHBhZ2VzLgorCSAqIFdyaXRpbmcgMyB0byAvcHJvYy9waWQvY2xlYXJfcmVmcyBvbmx5IGFmZmVjdHMgZmlsZSBtYXBwZWQgcGFnZXMuCisJICogV3JpdGluZyA0IHRvIC9wcm9jL3BpZC9jbGVhcl9yZWZzIGFmZmVjdHMgYWxsIHBhZ2VzLgorCSAqLworCWlmIChjcC0+dHlwZSA9PSBDTEVBUl9SRUZTX0FOT04gJiYgdm1hLT52bV9maWxlKQorCQlyZXR1cm4gMTsKKwlpZiAoY3AtPnR5cGUgPT0gQ0xFQVJfUkVGU19NQVBQRUQgJiYgIXZtYS0+dm1fZmlsZSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGNsZWFyX3JlZnNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC04NTgsNiArOTAzLDcgQEAKIAkJfTsKIAkJc3RydWN0IG1tX3dhbGsgY2xlYXJfcmVmc193YWxrID0gewogCQkJLnBtZF9lbnRyeSA9IGNsZWFyX3JlZnNfcHRlX3JhbmdlLAorCQkJLnRlc3Rfd2FsayA9IGNsZWFyX3JlZnNfdGVzdF93YWxrLAogCQkJLm1tID0gbW0sCiAJCQkucHJpdmF0ZSA9ICZjcCwKIAkJfTsKQEAgLTg3NywyOCArOTIzLDcgQEAKIAkJCX0KIAkJCW1tdV9ub3RpZmllcl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0KG1tLCAwLCAtMSk7CiAJCX0KLQkJZm9yICh2bWEgPSBtbS0+bW1hcDsgdm1hOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKLQkJCWNwLnZtYSA9IHZtYTsKLQkJCWlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSkKLQkJCQljb250aW51ZTsKLQkJCS8qCi0JCQkgKiBXcml0aW5nIDEgdG8gL3Byb2MvcGlkL2NsZWFyX3JlZnMgYWZmZWN0cyBhbGwgcGFnZXMuCi0JCQkgKgotCQkJICogV3JpdGluZyAyIHRvIC9wcm9jL3BpZC9jbGVhcl9yZWZzIG9ubHkgYWZmZWN0cwotCQkJICogQW5vbnltb3VzIHBhZ2VzLgotCQkJICoKLQkJCSAqIFdyaXRpbmcgMyB0byAvcHJvYy9waWQvY2xlYXJfcmVmcyBvbmx5IGFmZmVjdHMgZmlsZQotCQkJICogbWFwcGVkIHBhZ2VzLgotCQkJICoKLQkJCSAqIFdyaXRpbmcgNCB0byAvcHJvYy9waWQvY2xlYXJfcmVmcyBhZmZlY3RzIGFsbCBwYWdlcy4KLQkJCSAqLwotCQkJaWYgKHR5cGUgPT0gQ0xFQVJfUkVGU19BTk9OICYmIHZtYS0+dm1fZmlsZSkKLQkJCQljb250aW51ZTsKLQkJCWlmICh0eXBlID09IENMRUFSX1JFRlNfTUFQUEVEICYmICF2bWEtPnZtX2ZpbGUpCi0JCQkJY29udGludWU7Ci0JCQl3YWxrX3BhZ2VfcmFuZ2Uodm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsCi0JCQkJCSZjbGVhcl9yZWZzX3dhbGspOwotCQl9CisJCXdhbGtfcGFnZV9yYW5nZSgwLCB+MFVMLCAmY2xlYXJfcmVmc193YWxrKTsKIAkJaWYgKHR5cGUgPT0gQ0xFQVJfUkVGU19TT0ZUX0RJUlRZKQogCQkJbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKG1tLCAwLCAtMSk7CiAJCWZsdXNoX3RsYl9tbShtbSk7CkBAIC0xMDY2LDE1ICsxMDkxLDEzIEBACiBzdGF0aWMgaW50IHBhZ2VtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQkgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKQogewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay0+dm1hOwogCXN0cnVjdCBwYWdlbWFwcmVhZCAqcG0gPSB3YWxrLT5wcml2YXRlOwogCXNwaW5sb2NrX3QgKnB0bDsKLQlwdGVfdCAqcHRlOworCXB0ZV90ICpwdGUsICpvcmlnX3B0ZTsKIAlpbnQgZXJyID0gMDsKIAotCS8qIGZpbmQgdGhlIGZpcnN0IFZNQSBhdCBvciBhYm92ZSAnYWRkcicgKi8KLQl2bWEgPSBmaW5kX3ZtYSh3YWxrLT5tbSwgYWRkcik7Ci0JaWYgKHZtYSAmJiBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hLCAmcHRsKSA9PSAxKSB7CisJaWYgKHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEsICZwdGwpID09IDEpIHsKIAkJaW50IHBtZF9mbGFnczI7CiAKIAkJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fU09GVERJUlRZKSB8fCBwbWRfc29mdF9kaXJ0eSgqcG1kKSkKQEAgLTExMDAsNTEgKzExMjMsMjAgQEAKIAlpZiAocG1kX3RyYW5zX3Vuc3RhYmxlKHBtZCkpCiAJCXJldHVybiAwOwogCi0Jd2hpbGUgKDEpIHsKLQkJLyogRW5kIG9mIGFkZHJlc3Mgc3BhY2UgaG9sZSwgd2hpY2ggd2UgbWFyayBhcyBub24tcHJlc2VudC4gKi8KLQkJdW5zaWduZWQgbG9uZyBob2xlX2VuZDsKKwkvKgorCSAqIFdlIGNhbiBhc3N1bWUgdGhhdCBAdm1hIGFsd2F5cyBwb2ludHMgdG8gYSB2YWxpZCBvbmUgYW5kIEBlbmQgbmV2ZXIKKwkgKiBnb2VzIGJleW9uZCB2bWEtPnZtX2VuZC4KKwkgKi8KKwlvcmlnX3B0ZSA9IHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sod2Fsay0+bW0sIHBtZCwgYWRkciwgJnB0bCk7CisJZm9yICg7IGFkZHIgPCBlbmQ7IHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSkgeworCQlwYWdlbWFwX2VudHJ5X3QgcG1lOwogCi0JCWlmICh2bWEpCi0JCQlob2xlX2VuZCA9IG1pbihlbmQsIHZtYS0+dm1fc3RhcnQpOwotCQllbHNlCi0JCQlob2xlX2VuZCA9IGVuZDsKLQotCQlmb3IgKDsgYWRkciA8IGhvbGVfZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgewotCQkJcGFnZW1hcF9lbnRyeV90IHBtZSA9IG1ha2VfcG1lKFBNX05PVF9QUkVTRU5UKHBtLT52MikpOwotCi0JCQllcnIgPSBhZGRfdG9fcGFnZW1hcChhZGRyLCAmcG1lLCBwbSk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQlpZiAoIXZtYSB8fCB2bWEtPnZtX3N0YXJ0ID49IGVuZCkKKwkJcHRlX3RvX3BhZ2VtYXBfZW50cnkoJnBtZSwgcG0sIHZtYSwgYWRkciwgKnB0ZSk7CisJCWVyciA9IGFkZF90b19wYWdlbWFwKGFkZHIsICZwbWUsIHBtKTsKKwkJaWYgKGVycikKIAkJCWJyZWFrOwotCQkvKgotCQkgKiBXZSBjYW4ndCBwb3NzaWJseSBiZSBpbiBhIGh1Z2V0bGIgVk1BLiBJbiBnZW5lcmFsLAotCQkgKiBmb3IgYSBtbV93YWxrIHdpdGggYSBwbWRfZW50cnkgYW5kIGEgaHVnZXRsYl9lbnRyeSwKLQkJICogdGhlIHBtZF9lbnRyeSBjYW4gb25seSBiZSBjYWxsZWQgb24gYWRkcmVzc2VzIGluIGEKLQkJICogaHVnZXRsYiBpZiB0aGUgd2FsayBzdGFydHMgaW4gYSBub24taHVnZXRsYiBWTUEgYW5kCi0JCSAqIHNwYW5zIGEgaHVnZXBhZ2UgVk1BLiBTaW5jZSBwYWdlbWFwX3JlYWQgd2Fsa3MgYXJlCi0JCSAqIFBNRC1zaXplZCBhbmQgUE1ELWFsaWduZWQsIHRoaXMgd2lsbCBuZXZlciBiZSB0cnVlLgotCQkgKi8KLQkJQlVHX09OKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKTsKLQotCQkvKiBBZGRyZXNzZXMgaW4gdGhlIFZNQS4gKi8KLQkJZm9yICg7IGFkZHIgPCBtaW4oZW5kLCB2bWEtPnZtX2VuZCk7IGFkZHIgKz0gUEFHRV9TSVpFKSB7Ci0JCQlwYWdlbWFwX2VudHJ5X3QgcG1lOwotCQkJcHRlID0gcHRlX29mZnNldF9tYXAocG1kLCBhZGRyKTsKLQkJCXB0ZV90b19wYWdlbWFwX2VudHJ5KCZwbWUsIHBtLCB2bWEsIGFkZHIsICpwdGUpOwotCQkJcHRlX3VubWFwKHB0ZSk7Ci0JCQllcnIgPSBhZGRfdG9fcGFnZW1hcChhZGRyLCAmcG1lLCBwbSk7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KLQotCQlpZiAoYWRkciA9PSBlbmQpCi0JCQlicmVhazsKLQotCQl2bWEgPSBmaW5kX3ZtYSh3YWxrLT5tbSwgYWRkcik7CiAJfQorCXB0ZV91bm1hcF91bmxvY2sob3JpZ19wdGUsIHB0bCk7CiAKIAljb25kX3Jlc2NoZWQoKTsKIApAQCAtMTE3MCwxNSArMTE2MiwxMiBAQAogCQkJCSBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKIHsKIAlzdHJ1Y3QgcGFnZW1hcHJlYWQgKnBtID0gd2Fsay0+cHJpdmF0ZTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnZtYTsKIAlpbnQgZXJyID0gMDsKIAlpbnQgZmxhZ3MyOwogCXBhZ2VtYXBfZW50cnlfdCBwbWU7CiAKLQl2bWEgPSBmaW5kX3ZtYSh3YWxrLT5tbSwgYWRkcik7Ci0JV0FSTl9PTl9PTkNFKCF2bWEpOwotCi0JaWYgKHZtYSAmJiAodm1hLT52bV9mbGFncyAmIFZNX1NPRlRESVJUWSkpCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9TT0ZURElSVFkpCiAJCWZsYWdzMiA9IF9fUE1fU09GVF9ESVJUWTsKIAllbHNlCiAJCWZsYWdzMiA9IDA7CkBAIC0xMzM4LDcgKzEzMjcsNiBAQAogI2lmZGVmIENPTkZJR19OVU1BCiAKIHN0cnVjdCBudW1hX21hcHMgewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCXVuc2lnbmVkIGxvbmcgcGFnZXM7CiAJdW5zaWduZWQgbG9uZyBhbm9uOwogCXVuc2lnbmVkIGxvbmcgYWN0aXZlOwpAQCAtMTQwNywxOCArMTM5NSwxNyBAQAogc3RhdGljIGludCBnYXRoZXJfcHRlX3N0YXRzKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQogewotCXN0cnVjdCBudW1hX21hcHMgKm1kOworCXN0cnVjdCBudW1hX21hcHMgKm1kID0gd2Fsay0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnZtYTsKIAlzcGlubG9ja190ICpwdGw7CiAJcHRlX3QgKm9yaWdfcHRlOwogCXB0ZV90ICpwdGU7CiAKLQltZCA9IHdhbGstPnByaXZhdGU7Ci0KLQlpZiAocG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIG1kLT52bWEsICZwdGwpID09IDEpIHsKKwlpZiAocG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSwgJnB0bCkgPT0gMSkgewogCQlwdGVfdCBodWdlX3B0ZSA9ICoocHRlX3QgKilwbWQ7CiAJCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JCXBhZ2UgPSBjYW5fZ2F0aGVyX251bWFfc3RhdHMoaHVnZV9wdGUsIG1kLT52bWEsIGFkZHIpOworCQlwYWdlID0gY2FuX2dhdGhlcl9udW1hX3N0YXRzKGh1Z2VfcHRlLCB2bWEsIGFkZHIpOwogCQlpZiAocGFnZSkKIAkJCWdhdGhlcl9zdGF0cyhwYWdlLCBtZCwgcHRlX2RpcnR5KGh1Z2VfcHRlKSwKIAkJCQkgICAgIEhQQUdFX1BNRF9TSVpFL1BBR0VfU0laRSk7CkBAIC0xNDMwLDcgKzE0MTcsNyBAQAogCQlyZXR1cm4gMDsKIAlvcmlnX3B0ZSA9IHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sod2Fsay0+bW0sIHBtZCwgYWRkciwgJnB0bCk7CiAJZG8gewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGNhbl9nYXRoZXJfbnVtYV9zdGF0cygqcHRlLCBtZC0+dm1hLCBhZGRyKTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBjYW5fZ2F0aGVyX251bWFfc3RhdHMoKnB0ZSwgdm1hLCBhZGRyKTsKIAkJaWYgKCFwYWdlKQogCQkJY29udGludWU7CiAJCWdhdGhlcl9zdGF0cyhwYWdlLCBtZCwgcHRlX2RpcnR5KCpwdGUpLCAxKTsKQEAgLTE0NDAsNyArMTQyNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQotc3RhdGljIGludCBnYXRoZXJfaHVnZXRibF9zdGF0cyhwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLAorc3RhdGljIGludCBnYXRoZXJfaHVnZXRsYl9zdGF0cyhwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGhtYXNrLAogCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKIHsKIAlzdHJ1Y3QgbnVtYV9tYXBzICptZDsKQEAgLTE0NTksNyArMTQ0Niw3IEBACiB9CiAKICNlbHNlCi1zdGF0aWMgaW50IGdhdGhlcl9odWdldGJsX3N0YXRzKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssCitzdGF0aWMgaW50IGdhdGhlcl9odWdldGxiX3N0YXRzKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssCiAJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQogewogCXJldHVybiAwOwpAQCAtMTQ3Nyw3ICsxNDY0LDEyIEBACiAJc3RydWN0IG51bWFfbWFwcyAqbWQgPSAmbnVtYV9wcml2LT5tZDsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IHZtYS0+dm1fZmlsZTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07Ci0Jc3RydWN0IG1tX3dhbGsgd2FsayA9IHt9OworCXN0cnVjdCBtbV93YWxrIHdhbGsgPSB7CisJCS5odWdldGxiX2VudHJ5ID0gZ2F0aGVyX2h1Z2V0bGJfc3RhdHMsCisJCS5wbWRfZW50cnkgPSBnYXRoZXJfcHRlX3N0YXRzLAorCQkucHJpdmF0ZSA9IG1kLAorCQkubW0gPSBtbSwKKwl9OwogCXN0cnVjdCBtZW1wb2xpY3kgKnBvbDsKIAljaGFyIGJ1ZmZlcls2NF07CiAJaW50IG5pZDsKQEAgLTE0ODgsMTMgKzE0ODAsNiBAQAogCS8qIEVuc3VyZSB3ZSBzdGFydCB3aXRoIGFuIGVtcHR5IHNldCBvZiBudW1hX21hcHMgc3RhdGlzdGljcy4gKi8KIAltZW1zZXQobWQsIDAsIHNpemVvZigqbWQpKTsKIAotCW1kLT52bWEgPSB2bWE7Ci0KLQl3YWxrLmh1Z2V0bGJfZW50cnkgPSBnYXRoZXJfaHVnZXRibF9zdGF0czsKLQl3YWxrLnBtZF9lbnRyeSA9IGdhdGhlcl9wdGVfc3RhdHM7Ci0Jd2Fsay5wcml2YXRlID0gbWQ7Ci0Jd2Fsay5tbSA9IG1tOwotCiAJcG9sID0gX19nZXRfdm1hX3BvbGljeSh2bWEsIHZtYS0+dm1fc3RhcnQpOwogCWlmIChwb2wpIHsKIAkJbXBvbF90b19zdHIoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgcG9sKTsKQEAgLTE1MjgsNyArMTUxMyw4IEBACiAJaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKQogCQlzZXFfcHV0cyhtLCAiIGh1Z2UiKTsKIAotCXdhbGtfcGFnZV9yYW5nZSh2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgJndhbGspOworCS8qIG1tYXBfc2VtIGlzIGhlbGQgYnkgbV9zdGFydCAqLworCXdhbGtfcGFnZV92bWEodm1hLCAmd2Fsayk7CiAKIAlpZiAoIW1kLT5wYWdlcykKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9mcy9wc3RvcmUvS2NvbmZpZyBiL2ZzL3BzdG9yZS9LY29uZmlnCmluZGV4IDk4M2Q5NTEuLjkxNmI4ZTIgMTAwNjQ0Ci0tLSBhL2ZzL3BzdG9yZS9LY29uZmlnCisrKyBiL2ZzL3BzdG9yZS9LY29uZmlnCkBAIC0yMSw2ICsyMSwxNiBAQAogCSAgV2hlbiB0aGUgb3B0aW9uIGlzIGVuYWJsZWQsIHBzdG9yZSB3aWxsIGxvZyBhbGwga2VybmVsCiAJICBtZXNzYWdlcywgZXZlbiBpZiBubyBvb3BzIG9yIHBhbmljIGhhcHBlbmVkLgogCitjb25maWcgUFNUT1JFX1BNU0cKKwlib29sICJMb2cgdXNlciBzcGFjZSBtZXNzYWdlcyIKKwlkZXBlbmRzIG9uIFBTVE9SRQorCWhlbHAKKwkgIFdoZW4gdGhlIG9wdGlvbiBpcyBlbmFibGVkLCBwc3RvcmUgd2lsbCBleHBvcnQgYSBjaGFyYWN0ZXIKKwkgIGludGVyZmFjZSAvZGV2L3Btc2cwIHRvIGxvZyB1c2VyIHNwYWNlIG1lc3NhZ2VzLiBPbiByZWJvb3QKKwkgIGRhdGEgY2FuIGJlIHJldHJpZXZlZCBmcm9tIC9zeXMvZnMvcHN0b3JlL3Btc2ctcmFtb29wcy1bSURdLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgUFNUT1JFX0ZUUkFDRQogCWJvb2wgIlBlcnNpc3RlbnQgZnVuY3Rpb24gdHJhY2VyIgogCWRlcGVuZHMgb24gUFNUT1JFCmRpZmYgLS1naXQgYS9mcy9wc3RvcmUvTWFrZWZpbGUgYi9mcy9wc3RvcmUvTWFrZWZpbGUKaW5kZXggNGM5MDk1Yy4uZTY0N2Q4ZSAxMDA2NDQKLS0tIGEvZnMvcHN0b3JlL01ha2VmaWxlCisrKyBiL2ZzL3BzdG9yZS9NYWtlZmlsZQpAQCAtNyw1ICs3LDcgQEAKIHBzdG9yZS1vYmpzICs9IGlub2RlLm8gcGxhdGZvcm0ubwogb2JqLSQoQ09ORklHX1BTVE9SRV9GVFJBQ0UpCSs9IGZ0cmFjZS5vCiAKK29iai0kKENPTkZJR19QU1RPUkVfUE1TRykJKz0gcG1zZy5vCisKIHJhbW9vcHMtb2JqcyArPSByYW0ubyByYW1fY29yZS5vCiBvYmotJChDT05GSUdfUFNUT1JFX1JBTSkJKz0gcmFtb29wcy5vCmRpZmYgLS1naXQgYS9mcy9wc3RvcmUvaW5vZGUuYyBiL2ZzL3BzdG9yZS9pbm9kZS5jCmluZGV4IDUwNDE2NjAuLmIzMmNlNTMgMTAwNjQ0Ci0tLSBhL2ZzL3BzdG9yZS9pbm9kZS5jCisrKyBiL2ZzL3BzdG9yZS9pbm9kZS5jCkBAIC0zMzgsMzIgKzMzOCwzOCBAQAogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBQU1RPUkVfVFlQRV9ETUVTRzoKLQkJc3ByaW50ZihuYW1lLCAiZG1lc2ctJXMtJWxsZCVzIiwgcHNuYW1lLCBpZCwKLQkJCQkJCWNvbXByZXNzZWQgPyAiLmVuYy56IiA6ICIiKTsKKwkJc2NucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImRtZXNnLSVzLSVsbGQlcyIsCisJCQkgIHBzbmFtZSwgaWQsIGNvbXByZXNzZWQgPyAiLmVuYy56IiA6ICIiKTsKIAkJYnJlYWs7CiAJY2FzZSBQU1RPUkVfVFlQRV9DT05TT0xFOgotCQlzcHJpbnRmKG5hbWUsICJjb25zb2xlLSVzLSVsbGQiLCBwc25hbWUsIGlkKTsKKwkJc2NucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImNvbnNvbGUtJXMtJWxsZCIsIHBzbmFtZSwgaWQpOwogCQlicmVhazsKIAljYXNlIFBTVE9SRV9UWVBFX0ZUUkFDRToKLQkJc3ByaW50ZihuYW1lLCAiZnRyYWNlLSVzLSVsbGQiLCBwc25hbWUsIGlkKTsKKwkJc2NucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgImZ0cmFjZS0lcy0lbGxkIiwgcHNuYW1lLCBpZCk7CiAJCWJyZWFrOwogCWNhc2UgUFNUT1JFX1RZUEVfTUNFOgotCQlzcHJpbnRmKG5hbWUsICJtY2UtJXMtJWxsZCIsIHBzbmFtZSwgaWQpOworCQlzY25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAibWNlLSVzLSVsbGQiLCBwc25hbWUsIGlkKTsKIAkJYnJlYWs7CiAJY2FzZSBQU1RPUkVfVFlQRV9QUENfUlRBUzoKLQkJc3ByaW50ZihuYW1lLCAicnRhcy0lcy0lbGxkIiwgcHNuYW1lLCBpZCk7CisJCXNjbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJydGFzLSVzLSVsbGQiLCBwc25hbWUsIGlkKTsKIAkJYnJlYWs7CiAJY2FzZSBQU1RPUkVfVFlQRV9QUENfT0Y6Ci0JCXNwcmludGYobmFtZSwgInBvd2VycGMtb2Z3LSVzLSVsbGQiLCBwc25hbWUsIGlkKTsKKwkJc2NucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInBvd2VycGMtb2Z3LSVzLSVsbGQiLAorCQkJICBwc25hbWUsIGlkKTsKIAkJYnJlYWs7CiAJY2FzZSBQU1RPUkVfVFlQRV9QUENfQ09NTU9OOgotCQlzcHJpbnRmKG5hbWUsICJwb3dlcnBjLWNvbW1vbi0lcy0lbGxkIiwgcHNuYW1lLCBpZCk7CisJCXNjbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJwb3dlcnBjLWNvbW1vbi0lcy0lbGxkIiwKKwkJCSAgcHNuYW1lLCBpZCk7CisJCWJyZWFrOworCWNhc2UgUFNUT1JFX1RZUEVfUE1TRzoKKwkJc2NucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInBtc2ctJXMtJWxsZCIsIHBzbmFtZSwgaWQpOwogCQlicmVhazsKIAljYXNlIFBTVE9SRV9UWVBFX1VOS05PV046Ci0JCXNwcmludGYobmFtZSwgInVua25vd24tJXMtJWxsZCIsIHBzbmFtZSwgaWQpOworCQlzY25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAidW5rbm93bi0lcy0lbGxkIiwgcHNuYW1lLCBpZCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNwcmludGYobmFtZSwgInR5cGUlZC0lcy0lbGxkIiwgdHlwZSwgcHNuYW1lLCBpZCk7CisJCXNjbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJ0eXBlJWQtJXMtJWxsZCIsCisJCQkgIHR5cGUsIHBzbmFtZSwgaWQpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL3BzdG9yZS9pbnRlcm5hbC5oIGIvZnMvcHN0b3JlL2ludGVybmFsLmgKaW5kZXggM2IzZDMwNS4uYzM2YmEyYyAxMDA2NDQKLS0tIGEvZnMvcHN0b3JlL2ludGVybmFsLmgKKysrIGIvZnMvcHN0b3JlL2ludGVybmFsLmgKQEAgLTQ1LDYgKzQ1LDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcHN0b3JlX3JlZ2lzdGVyX2Z0cmFjZSh2b2lkKSB7fQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUFNUT1JFX1BNU0cKK2V4dGVybiB2b2lkIHBzdG9yZV9yZWdpc3Rlcl9wbXNnKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwc3RvcmVfcmVnaXN0ZXJfcG1zZyh2b2lkKSB7fQorI2VuZGlmCisKIGV4dGVybiBzdHJ1Y3QgcHN0b3JlX2luZm8gKnBzaW5mbzsKIAogZXh0ZXJuIHZvaWQJcHN0b3JlX3NldF9rbXNnX2J5dGVzKGludCk7CmRpZmYgLS1naXQgYS9mcy9wc3RvcmUvcGxhdGZvcm0uYyBiL2ZzL3BzdG9yZS9wbGF0Zm9ybS5jCmluZGV4IDBhOWI3MmMuLmM0YzlhMTBjIDEwMDY0NAotLS0gYS9mcy9wc3RvcmUvcGxhdGZvcm0uYworKysgYi9mcy9wc3RvcmUvcGxhdGZvcm0uYwpAQCAtMzAxLDcgKzMwMSw3IEBACiAKIAkJaWYgKGJpZ19vb3BzX2J1ZikgewogCQkJZHN0ID0gYmlnX29vcHNfYnVmOwotCQkJaHNpemUgPSBzcHJpbnRmKGRzdCwgIiVzIyVkIFBhcnQlZFxuIiwgd2h5LAorCQkJaHNpemUgPSBzcHJpbnRmKGRzdCwgIiVzIyVkIFBhcnQldVxuIiwgd2h5LAogCQkJCQkJCW9vcHNjb3VudCwgcGFydCk7CiAJCQlzaXplID0gYmlnX29vcHNfYnVmX3N6IC0gaHNpemU7CiAKQEAgLTMyMSw3ICszMjEsNyBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJZHN0ID0gcHNpbmZvLT5idWY7Ci0JCQloc2l6ZSA9IHNwcmludGYoZHN0LCAiJXMjJWQgUGFydCVkXG4iLCB3aHksIG9vcHNjb3VudCwKKwkJCWhzaXplID0gc3ByaW50Zihkc3QsICIlcyMlZCBQYXJ0JXVcbiIsIHdoeSwgb29wc2NvdW50LAogCQkJCQkJCQkJcGFydCk7CiAJCQlzaXplID0gcHNpbmZvLT5idWZzaXplIC0gaHNpemU7CiAJCQlkc3QgKz0gaHNpemU7CkBAIC00NDcsNiArNDQ3LDcgQEAKIAlpZiAoKHBzaS0+ZmxhZ3MgJiBQU1RPUkVfRkxBR1NfRlJBR0lMRSkgPT0gMCkgewogCQlwc3RvcmVfcmVnaXN0ZXJfY29uc29sZSgpOwogCQlwc3RvcmVfcmVnaXN0ZXJfZnRyYWNlKCk7CisJCXBzdG9yZV9yZWdpc3Rlcl9wbXNnKCk7CiAJfQogCiAJaWYgKHBzdG9yZV91cGRhdGVfbXMgPj0gMCkgewpkaWZmIC0tZ2l0IGEvZnMvcHN0b3JlL3Btc2cuYyBiL2ZzL3BzdG9yZS9wbXNnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmViNWRkMgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3BzdG9yZS9wbXNnLmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxNCAgR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgREVGSU5FX01VVEVYKHBtc2dfbG9jayk7CisjZGVmaW5lIFBNU0dfTUFYX0JPVU5DRV9CVUZGRVJfU0laRSAoMipQQUdFX1NJWkUpCisKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX3Btc2coc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXNpemVfdCBpLCBidWZmZXJfc2l6ZTsKKwljaGFyICpidWZmZXI7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gMDsKKworCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWYsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidWZmZXJfc2l6ZSA9IGNvdW50OworCWlmIChidWZmZXJfc2l6ZSA+IFBNU0dfTUFYX0JPVU5DRV9CVUZGRVJfU0laRSkKKwkJYnVmZmVyX3NpemUgPSBQTVNHX01BWF9CT1VOQ0VfQlVGRkVSX1NJWkU7CisJYnVmZmVyID0gdm1hbGxvYyhidWZmZXJfc2l6ZSk7CisKKwltdXRleF9sb2NrKCZwbXNnX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKSB7CisJCXNpemVfdCBjID0gbWluKGNvdW50IC0gaSwgYnVmZmVyX3NpemUpOworCQl1NjQgaWQ7CisJCWxvbmcgcmV0OworCisJCXJldCA9IF9fY29weV9mcm9tX3VzZXIoYnVmZmVyLCBidWYgKyBpLCBjKTsKKwkJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZwbXNnX2xvY2spOworCQkJdmZyZWUoYnVmZmVyKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCXBzaW5mby0+d3JpdGVfYnVmKFBTVE9SRV9UWVBFX1BNU0csIDAsICZpZCwgMCwgYnVmZmVyLCAwLCBjLAorCQkJCSAgcHNpbmZvKTsKKworCQlpICs9IGM7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZwbXNnX2xvY2spOworCXZmcmVlKGJ1ZmZlcik7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwbXNnX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsJCT0gbm9vcF9sbHNlZWssCisJLndyaXRlCQk9IHdyaXRlX3Btc2csCit9OworCitzdGF0aWMgc3RydWN0IGNsYXNzICpwbXNnX2NsYXNzOworc3RhdGljIGludCBwbXNnX21ham9yOworI2RlZmluZSBQTVNHX05BTUUgInBtc2ciCisjdW5kZWYgcHJfZm10CisjZGVmaW5lIHByX2ZtdChmbXQpIFBNU0dfTkFNRSAiOiAiIGZtdAorCitzdGF0aWMgY2hhciAqcG1zZ19kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW1vZGVfdCAqbW9kZSkKK3sKKwlpZiAobW9kZSkKKwkJKm1vZGUgPSAwMjIwOworCXJldHVybiBOVUxMOworfQorCit2b2lkIHBzdG9yZV9yZWdpc3Rlcl9wbXNnKHZvaWQpCit7CisJc3RydWN0IGRldmljZSAqcG1zZ19kZXZpY2U7CisKKwlwbXNnX21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsIFBNU0dfTkFNRSwgJnBtc2dfZm9wcyk7CisJaWYgKHBtc2dfbWFqb3IgPCAwKSB7CisJCXByX2VycigicmVnaXN0ZXJfY2hyZGV2IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXBtc2dfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsIFBNU0dfTkFNRSk7CisJaWYgKElTX0VSUihwbXNnX2NsYXNzKSkgeworCQlwcl9lcnIoImRldmljZSBjbGFzcyBmaWxlIGFscmVhZHkgaW4gdXNlXG4iKTsKKwkJZ290byBlcnJfY2xhc3M7CisJfQorCXBtc2dfY2xhc3MtPmRldm5vZGUgPSBwbXNnX2Rldm5vZGU7CisKKwlwbXNnX2RldmljZSA9IGRldmljZV9jcmVhdGUocG1zZ19jbGFzcywgTlVMTCwgTUtERVYocG1zZ19tYWpvciwgMCksCisJCQkJCU5VTEwsICIlcyVkIiwgUE1TR19OQU1FLCAwKTsKKwlpZiAoSVNfRVJSKHBtc2dfZGV2aWNlKSkgeworCQlwcl9lcnIoImZhaWxlZCB0byBjcmVhdGUgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfZGV2aWNlOworCX0KKwlyZXR1cm47CisKK2Vycl9kZXZpY2U6CisJY2xhc3NfZGVzdHJveShwbXNnX2NsYXNzKTsKK2Vycl9jbGFzczoKKwl1bnJlZ2lzdGVyX2NocmRldihwbXNnX21ham9yLCBQTVNHX05BTUUpOworZXJyOgorCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL2ZzL3BzdG9yZS9yYW0uYyBiL2ZzL3BzdG9yZS9yYW0uYwppbmRleCA4NjEzZTViLi4zOWQxMzczIDEwMDY0NAotLS0gYS9mcy9wc3RvcmUvcmFtLmMKKysrIGIvZnMvcHN0b3JlL3JhbS5jCkBAIC01MSw2ICs1MSwxMCBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGZ0cmFjZV9zaXplLCByYW1vb3BzX2Z0cmFjZV9zaXplLCB1bG9uZywgMDQwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGZ0cmFjZV9zaXplLCAic2l6ZSBvZiBmdHJhY2UgbG9nIik7CiAKK3N0YXRpYyB1bG9uZyByYW1vb3BzX3Btc2dfc2l6ZSA9IE1JTl9NRU1fU0laRTsKK21vZHVsZV9wYXJhbV9uYW1lZChwbXNnX3NpemUsIHJhbW9vcHNfcG1zZ19zaXplLCB1bG9uZywgMDQwMCk7CitNT0RVTEVfUEFSTV9ERVNDKHBtc2dfc2l6ZSwgInNpemUgb2YgdXNlciBzcGFjZSBtZXNzYWdlIGxvZyIpOworCiBzdGF0aWMgdWxvbmcgbWVtX2FkZHJlc3M7CiBtb2R1bGVfcGFyYW0obWVtX2FkZHJlc3MsIHVsb25nLCAwNDAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWVtX2FkZHJlc3MsCkBAIC04MiwxMiArODYsMTQgQEAKIAlzdHJ1Y3QgcGVyc2lzdGVudF9yYW1fem9uZSAqKnByenM7CiAJc3RydWN0IHBlcnNpc3RlbnRfcmFtX3pvbmUgKmNwcno7CiAJc3RydWN0IHBlcnNpc3RlbnRfcmFtX3pvbmUgKmZwcno7CisJc3RydWN0IHBlcnNpc3RlbnRfcmFtX3pvbmUgKm1wcno7CiAJcGh5c19hZGRyX3QgcGh5c19hZGRyOwogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAl1bnNpZ25lZCBpbnQgbWVtdHlwZTsKIAlzaXplX3QgcmVjb3JkX3NpemU7CiAJc2l6ZV90IGNvbnNvbGVfc2l6ZTsKIAlzaXplX3QgZnRyYWNlX3NpemU7CisJc2l6ZV90IHBtc2dfc2l6ZTsKIAlpbnQgZHVtcF9vb3BzOwogCXN0cnVjdCBwZXJzaXN0ZW50X3JhbV9lY2NfaW5mbyBlY2NfaW5mbzsKIAl1bnNpZ25lZCBpbnQgbWF4X2R1bXBfY250OwpAQCAtOTYsNiArMTAyLDcgQEAKIAl1bnNpZ25lZCBpbnQgZHVtcF9yZWFkX2NudDsKIAl1bnNpZ25lZCBpbnQgY29uc29sZV9yZWFkX2NudDsKIAl1bnNpZ25lZCBpbnQgZnRyYWNlX3JlYWRfY250OworCXVuc2lnbmVkIGludCBwbXNnX3JlYWRfY250OwogCXN0cnVjdCBwc3RvcmVfaW5mbyBwc3RvcmU7CiB9OwogCkBAIC0xMDksNiArMTE2LDcgQEAKIAljeHQtPmR1bXBfcmVhZF9jbnQgPSAwOwogCWN4dC0+Y29uc29sZV9yZWFkX2NudCA9IDA7CiAJY3h0LT5mdHJhY2VfcmVhZF9jbnQgPSAwOworCWN4dC0+cG1zZ19yZWFkX2NudCA9IDA7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NCw2ICsxNzIsMTIgQEAKIAlyZXR1cm4gaGVhZGVyX2xlbmd0aDsKIH0KIAorc3RhdGljIGJvb2wgcHJ6X29rKHN0cnVjdCBwZXJzaXN0ZW50X3JhbV96b25lICpwcnopCit7CisJcmV0dXJuICEhcHJ6ICYmICEhKHBlcnNpc3RlbnRfcmFtX29sZF9zaXplKHByeikgKworCQkJICAgcGVyc2lzdGVudF9yYW1fZWNjX3N0cmluZyhwcnosIE5VTEwsIDApKTsKK30KKwogc3RhdGljIHNzaXplX3QgcmFtb29wc19wc3RvcmVfcmVhZCh1NjQgKmlkLCBlbnVtIHBzdG9yZV90eXBlX2lkICp0eXBlLAogCQkJCSAgIGludCAqY291bnQsIHN0cnVjdCB0aW1lc3BlYyAqdGltZSwKIAkJCQkgICBjaGFyICoqYnVmLCBib29sICpjb21wcmVzc2VkLApAQCAtMTc4LDEzICsxOTIsMTYgQEAKIAlwcnogPSByYW1vb3BzX2dldF9uZXh0X3ByeihjeHQtPnByenMsICZjeHQtPmR1bXBfcmVhZF9jbnQsCiAJCQkJICAgY3h0LT5tYXhfZHVtcF9jbnQsIGlkLCB0eXBlLAogCQkJCSAgIFBTVE9SRV9UWVBFX0RNRVNHLCAxKTsKLQlpZiAoIXByeikKKwlpZiAoIXByel9vayhwcnopKQogCQlwcnogPSByYW1vb3BzX2dldF9uZXh0X3ByeigmY3h0LT5jcHJ6LCAmY3h0LT5jb25zb2xlX3JlYWRfY250LAogCQkJCQkgICAxLCBpZCwgdHlwZSwgUFNUT1JFX1RZUEVfQ09OU09MRSwgMCk7Ci0JaWYgKCFwcnopCisJaWYgKCFwcnpfb2socHJ6KSkKIAkJcHJ6ID0gcmFtb29wc19nZXRfbmV4dF9wcnooJmN4dC0+ZnByeiwgJmN4dC0+ZnRyYWNlX3JlYWRfY250LAogCQkJCQkgICAxLCBpZCwgdHlwZSwgUFNUT1JFX1RZUEVfRlRSQUNFLCAwKTsKLQlpZiAoIXByeikKKwlpZiAoIXByel9vayhwcnopKQorCQlwcnogPSByYW1vb3BzX2dldF9uZXh0X3ByeigmY3h0LT5tcHJ6LCAmY3h0LT5wbXNnX3JlYWRfY250LAorCQkJCQkgICAxLCBpZCwgdHlwZSwgUFNUT1JFX1RZUEVfUE1TRywgMCk7CisJaWYgKCFwcnpfb2socHJ6KSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIXBlcnNpc3RlbnRfcmFtX29sZChwcnopKQpAQCAtMjUyLDYgKzI2OSwxMSBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXBlcnNpc3RlbnRfcmFtX3dyaXRlKGN4dC0+ZnByeiwgYnVmLCBzaXplKTsKIAkJcmV0dXJuIDA7CisJfSBlbHNlIGlmICh0eXBlID09IFBTVE9SRV9UWVBFX1BNU0cpIHsKKwkJaWYgKCFjeHQtPm1wcnopCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcGVyc2lzdGVudF9yYW1fd3JpdGUoY3h0LT5tcHJ6LCBidWYsIHNpemUpOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAodHlwZSAhPSBQU1RPUkVfVFlQRV9ETUVTRykKQEAgLTMwOSw2ICszMzEsOSBAQAogCWNhc2UgUFNUT1JFX1RZUEVfRlRSQUNFOgogCQlwcnogPSBjeHQtPmZwcno7CiAJCWJyZWFrOworCWNhc2UgUFNUT1JFX1RZUEVfUE1TRzoKKwkJcHJ6ID0gY3h0LT5tcHJ6OworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC00MzUsNyArNDYwLDcgQEAKIAkJZ290byBmYWlsX291dDsKIAogCWlmICghcGRhdGEtPm1lbV9zaXplIHx8ICghcGRhdGEtPnJlY29yZF9zaXplICYmICFwZGF0YS0+Y29uc29sZV9zaXplICYmCi0JCQkhcGRhdGEtPmZ0cmFjZV9zaXplKSkgeworCQkJIXBkYXRhLT5mdHJhY2Vfc2l6ZSAmJiAhcGRhdGEtPnBtc2dfc2l6ZSkpIHsKIAkJcHJfZXJyKCJUaGUgbWVtb3J5IHNpemUgYW5kIHRoZSByZWNvcmQvY29uc29sZSBzaXplIG11c3QgYmUgIgogCQkJIm5vbi16ZXJvXG4iKTsKIAkJZ290byBmYWlsX291dDsKQEAgLTQ0Nyw2ICs0NzIsOCBAQAogCQlwZGF0YS0+Y29uc29sZV9zaXplID0gcm91bmRkb3duX3Bvd19vZl90d28ocGRhdGEtPmNvbnNvbGVfc2l6ZSk7CiAJaWYgKHBkYXRhLT5mdHJhY2Vfc2l6ZSAmJiAhaXNfcG93ZXJfb2ZfMihwZGF0YS0+ZnRyYWNlX3NpemUpKQogCQlwZGF0YS0+ZnRyYWNlX3NpemUgPSByb3VuZGRvd25fcG93X29mX3R3byhwZGF0YS0+ZnRyYWNlX3NpemUpOworCWlmIChwZGF0YS0+cG1zZ19zaXplICYmICFpc19wb3dlcl9vZl8yKHBkYXRhLT5wbXNnX3NpemUpKQorCQlwZGF0YS0+cG1zZ19zaXplID0gcm91bmRkb3duX3Bvd19vZl90d28ocGRhdGEtPnBtc2dfc2l6ZSk7CiAKIAljeHQtPnNpemUgPSBwZGF0YS0+bWVtX3NpemU7CiAJY3h0LT5waHlzX2FkZHIgPSBwZGF0YS0+bWVtX2FkZHJlc3M7CkBAIC00NTQsMTIgKzQ4MSwxNCBAQAogCWN4dC0+cmVjb3JkX3NpemUgPSBwZGF0YS0+cmVjb3JkX3NpemU7CiAJY3h0LT5jb25zb2xlX3NpemUgPSBwZGF0YS0+Y29uc29sZV9zaXplOwogCWN4dC0+ZnRyYWNlX3NpemUgPSBwZGF0YS0+ZnRyYWNlX3NpemU7CisJY3h0LT5wbXNnX3NpemUgPSBwZGF0YS0+cG1zZ19zaXplOwogCWN4dC0+ZHVtcF9vb3BzID0gcGRhdGEtPmR1bXBfb29wczsKIAljeHQtPmVjY19pbmZvID0gcGRhdGEtPmVjY19pbmZvOwogCiAJcGFkZHIgPSBjeHQtPnBoeXNfYWRkcjsKIAotCWR1bXBfbWVtX3N6ID0gY3h0LT5zaXplIC0gY3h0LT5jb25zb2xlX3NpemUgLSBjeHQtPmZ0cmFjZV9zaXplOworCWR1bXBfbWVtX3N6ID0gY3h0LT5zaXplIC0gY3h0LT5jb25zb2xlX3NpemUgLSBjeHQtPmZ0cmFjZV9zaXplCisJCQktIGN4dC0+cG1zZ19zaXplOwogCWVyciA9IHJhbW9vcHNfaW5pdF9wcnpzKGRldiwgY3h0LCAmcGFkZHIsIGR1bXBfbWVtX3N6KTsKIAlpZiAoZXJyKQogCQlnb3RvIGZhaWxfb3V0OwpAQCAtNDc0LDEzICs1MDMsOSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZmFpbF9pbml0X2Zwcno7CiAKLQlpZiAoIWN4dC0+cHJ6cyAmJiAhY3h0LT5jcHJ6ICYmICFjeHQtPmZwcnopIHsKLQkJcHJfZXJyKCJtZW1vcnkgc2l6ZSB0b28gc21hbGwsIG1pbmltdW0gaXMgJXp1XG4iLAotCQkJY3h0LT5jb25zb2xlX3NpemUgKyBjeHQtPnJlY29yZF9zaXplICsKLQkJCWN4dC0+ZnRyYWNlX3NpemUpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGZhaWxfY250OwotCX0KKwllcnIgPSByYW1vb3BzX2luaXRfcHJ6KGRldiwgY3h0LCAmY3h0LT5tcHJ6LCAmcGFkZHIsIGN4dC0+cG1zZ19zaXplLCAwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfaW5pdF9tcHJ6OwogCiAJY3h0LT5wc3RvcmUuZGF0YSA9IGN4dDsKIAkvKgpAQCAtNTI1LDcgKzU1MCw4IEBACiAJa2ZyZWUoY3h0LT5wc3RvcmUuYnVmKTsKIGZhaWxfY2xlYXI6CiAJY3h0LT5wc3RvcmUuYnVmc2l6ZSA9IDA7Ci1mYWlsX2NudDoKKwlrZnJlZShjeHQtPm1wcnopOworZmFpbF9pbml0X21wcno6CiAJa2ZyZWUoY3h0LT5mcHJ6KTsKIGZhaWxfaW5pdF9mcHJ6OgogCWtmcmVlKGN4dC0+Y3Byeik7CkBAIC01ODMsNiArNjA5LDcgQEAKIAlkdW1teV9kYXRhLT5yZWNvcmRfc2l6ZSA9IHJlY29yZF9zaXplOwogCWR1bW15X2RhdGEtPmNvbnNvbGVfc2l6ZSA9IHJhbW9vcHNfY29uc29sZV9zaXplOwogCWR1bW15X2RhdGEtPmZ0cmFjZV9zaXplID0gcmFtb29wc19mdHJhY2Vfc2l6ZTsKKwlkdW1teV9kYXRhLT5wbXNnX3NpemUgPSByYW1vb3BzX3Btc2dfc2l6ZTsKIAlkdW1teV9kYXRhLT5kdW1wX29vcHMgPSBkdW1wX29vcHM7CiAJLyoKIAkgKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmFtb29wcy5lY2M9MSBtZWFucyAxNiBieXRlcyBFQ0MKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL0tjb25maWcgYi9mcy9xdW90YS9LY29uZmlnCmluZGV4IGM1MWRmMWQuLjRhMDk5NzUgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhL0tjb25maWcKKysrIGIvZnMvcXVvdGEvS2NvbmZpZwpAQCAtNSw2ICs1LDcgQEAKIGNvbmZpZyBRVU9UQQogCWJvb2wgIlF1b3RhIHN1cHBvcnQiCiAJc2VsZWN0IFFVT1RBQ1RMCisJc2VsZWN0IFNSQ1UKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBzZXQgcGVyIHVzZXIgbGltaXRzIGZvciBkaXNrCiAJICB1c2FnZSAoYWxzbyBjYWxsZWQgZGlzayBxdW90YXMpLiBDdXJyZW50bHksIGl0IHdvcmtzIGZvciB0aGUKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL2RxdW90LmMgYi9mcy9xdW90YS9kcXVvdC5jCmluZGV4IDhmMGFjZWYuLjBjY2Q0YmEgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhL2RxdW90LmMKKysrIGIvZnMvcXVvdGEvZHF1b3QuYwpAQCAtMTI0OCw3ICsxMjQ4LDcgQEAKIAogCXJldHVybiBjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpICYmCiAJICAgICAgIChpbmZvLT5kcWlfZm9ybWF0LT5xZl9mbXRfaWQgIT0gUUZNVF9WRlNfT0xEIHx8Ci0JCSEoaW5mby0+ZHFpX2ZsYWdzICYgVjFfRFFGX1JTUVVBU0gpKTsKKwkJIShpbmZvLT5kcWlfZmxhZ3MgJiBEUUZfUk9PVF9TUVVBU0gpKTsKIH0KIAogLyogbmVlZHMgZHFfZGF0YV9sb2NrICovCkBAIC0yMzg1LDQxICsyMzg1LDEwNiBAQAogfQogRVhQT1JUX1NZTUJPTChkcXVvdF9xdW90YV9vbl9tb3VudCk7CiAKLXN0YXRpYyBpbmxpbmUgcXNpemVfdCBxYnRvcyhxc2l6ZV90IGJsb2NrcykKK3N0YXRpYyBpbnQgZHF1b3RfcXVvdGFfZW5hYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlyZXR1cm4gYmxvY2tzIDw8IFFJRl9EUUJMS1NJWkVfQklUUzsKKwlpbnQgcmV0OworCWludCB0eXBlOworCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTsKKworCWlmICghKGRxb3B0LT5mbGFncyAmIERRVU9UX1FVT1RBX1NZU19GSUxFKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJLyogQWNjb3VudGluZyBjYW5ub3QgYmUgdHVybmVkIG9uIHdoaWxlIGZzIGlzIG1vdW50ZWQgKi8KKwlmbGFncyAmPSB+KEZTX1FVT1RBX1VEUV9BQ0NUIHwgRlNfUVVPVEFfR0RRX0FDQ1QgfCBGU19RVU9UQV9QRFFfQUNDVCk7CisJaWYgKCFmbGFncykKKwkJcmV0dXJuIC1FSU5WQUw7CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IE1BWFFVT1RBUzsgdHlwZSsrKSB7CisJCWlmICghKGZsYWdzICYgcXR5cGVfZW5mb3JjZV9mbGFnKHR5cGUpKSkKKwkJCWNvbnRpbnVlOworCQkvKiBDYW4ndCBlbmZvcmNlIHdpdGhvdXQgYWNjb3VudGluZyAqLworCQlpZiAoIXNiX2hhc19xdW90YV91c2FnZV9lbmFibGVkKHNiLCB0eXBlKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSBkcXVvdF9lbmFibGUoZHFvcHQtPmZpbGVzW3R5cGVdLCB0eXBlLAorCQkJCSAgIGRxb3B0LT5pbmZvW3R5cGVdLmRxaV9mbXRfaWQsCisJCQkJICAgRFFVT1RfTElNSVRTX0VOQUJMRUQpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X2VycjsKKwl9CisJcmV0dXJuIDA7CitvdXRfZXJyOgorCS8qIEJhY2tvdXQgZW5mb3JjZW1lbnQgZW5hYmxlbWVudCB3ZSBhbHJlYWR5IGRpZCAqLworCWZvciAodHlwZS0tOyB0eXBlID49IDA7IHR5cGUtLSkgIHsKKwkJaWYgKGZsYWdzICYgcXR5cGVfZW5mb3JjZV9mbGFnKHR5cGUpKQorCQkJZHF1b3RfZGlzYWJsZShzYiwgdHlwZSwgRFFVT1RfTElNSVRTX0VOQUJMRUQpOworCX0KKwkvKiBFcnJvciBjb2RlIHRyYW5zbGF0aW9uIGZvciBiZXR0ZXIgY29tcGF0aWJpbGl0eSB3aXRoIFhGUyAqLworCWlmIChyZXQgPT0gLUVCVVNZKQorCQlyZXQgPSAtRUVYSVNUOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgcXNpemVfdCBzdG9xYihxc2l6ZV90IHNwYWNlKQorc3RhdGljIGludCBkcXVvdF9xdW90YV9kaXNhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQlyZXR1cm4gKHNwYWNlICsgUUlGX0RRQkxLU0laRSAtIDEpID4+IFFJRl9EUUJMS1NJWkVfQklUUzsKKwlpbnQgcmV0OworCWludCB0eXBlOworCXN0cnVjdCBxdW90YV9pbmZvICpkcW9wdCA9IHNiX2Rxb3B0KHNiKTsKKworCWlmICghKGRxb3B0LT5mbGFncyAmIERRVU9UX1FVT1RBX1NZU19GSUxFKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJLyoKKwkgKiBXZSBkb24ndCBzdXBwb3J0IHR1cm5pbmcgb2ZmIGFjY291bnRpbmcgdmlhIHF1b3RhY3RsLiBJbiBwcmluY2lwbGUKKwkgKiBxdW90YSBpbmZyYXN0cnVjdHVyZSBjYW4gZG8gdGhpcyBidXQgZmlsZXN5c3RlbXMgZG9uJ3QgZXhwZWN0CisJICogdXNlcnNwYWNlIHRvIGJlIGFibGUgdG8gZG8gaXQuCisJICovCisJaWYgKGZsYWdzICYKKwkJICAoRlNfUVVPVEFfVURRX0FDQ1QgfCBGU19RVU9UQV9HRFFfQUNDVCB8IEZTX1FVT1RBX1BEUV9BQ0NUKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJLyogRmlsdGVyIG91dCBsaW1pdHMgbm90IGVuYWJsZWQgKi8KKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgTUFYUVVPVEFTOyB0eXBlKyspCisJCWlmICghc2JfaGFzX3F1b3RhX2xpbWl0c19lbmFibGVkKHNiLCB0eXBlKSkKKwkJCWZsYWdzICY9IH5xdHlwZV9lbmZvcmNlX2ZsYWcodHlwZSk7CisJLyogTm90aGluZyBsZWZ0PyAqLworCWlmICghZmxhZ3MpCisJCXJldHVybiAtRUVYSVNUOworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBNQVhRVU9UQVM7IHR5cGUrKykgeworCQlpZiAoZmxhZ3MgJiBxdHlwZV9lbmZvcmNlX2ZsYWcodHlwZSkpIHsKKwkJCXJldCA9IGRxdW90X2Rpc2FibGUoc2IsIHR5cGUsIERRVU9UX0xJTUlUU19FTkFCTEVEKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0X2VycjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK291dF9lcnI6CisJLyogQmFja291dCBlbmZvcmNlbWVudCBkaXNhYmxpbmcgd2UgYWxyZWFkeSBkaWQgKi8KKwlmb3IgKHR5cGUtLTsgdHlwZSA+PSAwOyB0eXBlLS0pICB7CisJCWlmIChmbGFncyAmIHF0eXBlX2VuZm9yY2VfZmxhZyh0eXBlKSkKKwkJCWRxdW90X2VuYWJsZShkcW9wdC0+ZmlsZXNbdHlwZV0sIHR5cGUsCisJCQkJICAgICBkcW9wdC0+aW5mb1t0eXBlXS5kcWlfZm10X2lkLAorCQkJCSAgICAgRFFVT1RfTElNSVRTX0VOQUJMRUQpOworCX0KKwlyZXR1cm4gcmV0OwogfQogCiAvKiBHZW5lcmljIHJvdXRpbmUgZm9yIGdldHRpbmcgY29tbW9uIHBhcnQgb2YgcXVvdGEgc3RydWN0dXJlICovCi1zdGF0aWMgdm9pZCBkb19nZXRfZHFibGsoc3RydWN0IGRxdW90ICpkcXVvdCwgc3RydWN0IGZzX2Rpc2tfcXVvdGEgKmRpKQorc3RhdGljIHZvaWQgZG9fZ2V0X2RxYmxrKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHN0cnVjdCBxY19kcWJsayAqZGkpCiB7CiAJc3RydWN0IG1lbV9kcWJsayAqZG0gPSAmZHF1b3QtPmRxX2RxYjsKIAogCW1lbXNldChkaSwgMCwgc2l6ZW9mKCpkaSkpOwotCWRpLT5kX3ZlcnNpb24gPSBGU19EUVVPVF9WRVJTSU9OOwotCWRpLT5kX2ZsYWdzID0gZHF1b3QtPmRxX2lkLnR5cGUgPT0gVVNSUVVPVEEgPwotCQkJRlNfVVNFUl9RVU9UQSA6IEZTX0dST1VQX1FVT1RBOwotCWRpLT5kX2lkID0gZnJvbV9rcWlkX211bmdlZChjdXJyZW50X3VzZXJfbnMoKSwgZHF1b3QtPmRxX2lkKTsKLQogCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQlkaS0+ZF9ibGtfaGFyZGxpbWl0ID0gc3RvcWIoZG0tPmRxYl9iaGFyZGxpbWl0KTsKLQlkaS0+ZF9ibGtfc29mdGxpbWl0ID0gc3RvcWIoZG0tPmRxYl9ic29mdGxpbWl0KTsKKwlkaS0+ZF9zcGNfaGFyZGxpbWl0ID0gZG0tPmRxYl9iaGFyZGxpbWl0OworCWRpLT5kX3NwY19zb2Z0bGltaXQgPSBkbS0+ZHFiX2Jzb2Z0bGltaXQ7CiAJZGktPmRfaW5vX2hhcmRsaW1pdCA9IGRtLT5kcWJfaWhhcmRsaW1pdDsKIAlkaS0+ZF9pbm9fc29mdGxpbWl0ID0gZG0tPmRxYl9pc29mdGxpbWl0OwotCWRpLT5kX2Jjb3VudCA9IGRtLT5kcWJfY3Vyc3BhY2UgKyBkbS0+ZHFiX3JzdnNwYWNlOwotCWRpLT5kX2ljb3VudCA9IGRtLT5kcWJfY3VyaW5vZGVzOwotCWRpLT5kX2J0aW1lciA9IGRtLT5kcWJfYnRpbWU7Ci0JZGktPmRfaXRpbWVyID0gZG0tPmRxYl9pdGltZTsKKwlkaS0+ZF9zcGFjZSA9IGRtLT5kcWJfY3Vyc3BhY2UgKyBkbS0+ZHFiX3JzdnNwYWNlOworCWRpLT5kX2lub19jb3VudCA9IGRtLT5kcWJfY3VyaW5vZGVzOworCWRpLT5kX3NwY190aW1lciA9IGRtLT5kcWJfYnRpbWU7CisJZGktPmRfaW5vX3RpbWVyID0gZG0tPmRxYl9pdGltZTsKIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIH0KIAogaW50IGRxdW90X2dldF9kcWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga3FpZCBxaWQsCi0JCSAgICBzdHJ1Y3QgZnNfZGlza19xdW90YSAqZGkpCisJCSAgICBzdHJ1Y3QgcWNfZHFibGsgKmRpKQogewogCXN0cnVjdCBkcXVvdCAqZHF1b3Q7CiAKQEAgLTI0MzMsNzAgKzI0OTgsNzAgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHF1b3RfZ2V0X2RxYmxrKTsKIAotI2RlZmluZSBWRlNfRlNfRFFfTUFTSyBcCi0JKEZTX0RRX0JDT1VOVCB8IEZTX0RRX0JTT0ZUIHwgRlNfRFFfQkhBUkQgfCBcCi0JIEZTX0RRX0lDT1VOVCB8IEZTX0RRX0lTT0ZUIHwgRlNfRFFfSUhBUkQgfCBcCi0JIEZTX0RRX0JUSU1FUiB8IEZTX0RRX0lUSU1FUikKKyNkZWZpbmUgVkZTX1FDX01BU0sgXAorCShRQ19TUEFDRSB8IFFDX1NQQ19TT0ZUIHwgUUNfU1BDX0hBUkQgfCBcCisJIFFDX0lOT19DT1VOVCB8IFFDX0lOT19TT0ZUIHwgUUNfSU5PX0hBUkQgfCBcCisJIFFDX1NQQ19USU1FUiB8IFFDX0lOT19USU1FUikKIAogLyogR2VuZXJpYyByb3V0aW5lIGZvciBzZXR0aW5nIGNvbW1vbiBwYXJ0IG9mIHF1b3RhIHN0cnVjdHVyZSAqLwotc3RhdGljIGludCBkb19zZXRfZHFibGsoc3RydWN0IGRxdW90ICpkcXVvdCwgc3RydWN0IGZzX2Rpc2tfcXVvdGEgKmRpKQorc3RhdGljIGludCBkb19zZXRfZHFibGsoc3RydWN0IGRxdW90ICpkcXVvdCwgc3RydWN0IHFjX2RxYmxrICpkaSkKIHsKIAlzdHJ1Y3QgbWVtX2RxYmxrICpkbSA9ICZkcXVvdC0+ZHFfZHFiOwogCWludCBjaGVja19ibGltID0gMCwgY2hlY2tfaWxpbSA9IDA7CiAJc3RydWN0IG1lbV9kcWluZm8gKmRxaSA9ICZzYl9kcW9wdChkcXVvdC0+ZHFfc2IpLT5pbmZvW2RxdW90LT5kcV9pZC50eXBlXTsKIAotCWlmIChkaS0+ZF9maWVsZG1hc2sgJiB+VkZTX0ZTX0RRX01BU0spCisJaWYgKGRpLT5kX2ZpZWxkbWFzayAmIH5WRlNfUUNfTUFTSykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoKChkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CU09GVCkgJiYKLQkgICAgIChkaS0+ZF9ibGtfc29mdGxpbWl0ID4gZHFpLT5kcWlfbWF4YmxpbWl0KSkgfHwKLQkgICAgKChkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CSEFSRCkgJiYKLQkgICAgIChkaS0+ZF9ibGtfaGFyZGxpbWl0ID4gZHFpLT5kcWlfbWF4YmxpbWl0KSkgfHwKLQkgICAgKChkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9JU09GVCkgJiYKLQkgICAgIChkaS0+ZF9pbm9fc29mdGxpbWl0ID4gZHFpLT5kcWlfbWF4aWxpbWl0KSkgfHwKLQkgICAgKChkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9JSEFSRCkgJiYKLQkgICAgIChkaS0+ZF9pbm9faGFyZGxpbWl0ID4gZHFpLT5kcWlfbWF4aWxpbWl0KSkpCisJaWYgKCgoZGktPmRfZmllbGRtYXNrICYgUUNfU1BDX1NPRlQpICYmCisJICAgICBkaS0+ZF9zcGNfc29mdGxpbWl0ID4gZHFpLT5kcWlfbWF4X3NwY19saW1pdCkgfHwKKwkgICAgKChkaS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfSEFSRCkgJiYKKwkgICAgIGRpLT5kX3NwY19oYXJkbGltaXQgPiBkcWktPmRxaV9tYXhfc3BjX2xpbWl0KSB8fAorCSAgICAoKGRpLT5kX2ZpZWxkbWFzayAmIFFDX0lOT19TT0ZUKSAmJgorCSAgICAgKGRpLT5kX2lub19zb2Z0bGltaXQgPiBkcWktPmRxaV9tYXhfaW5vX2xpbWl0KSkgfHwKKwkgICAgKChkaS0+ZF9maWVsZG1hc2sgJiBRQ19JTk9fSEFSRCkgJiYKKwkgICAgIChkaS0+ZF9pbm9faGFyZGxpbWl0ID4gZHFpLT5kcWlfbWF4X2lub19saW1pdCkpKQogCQlyZXR1cm4gLUVSQU5HRTsKIAogCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKLQlpZiAoZGktPmRfZmllbGRtYXNrICYgRlNfRFFfQkNPVU5UKSB7Ci0JCWRtLT5kcWJfY3Vyc3BhY2UgPSBkaS0+ZF9iY291bnQgLSBkbS0+ZHFiX3JzdnNwYWNlOworCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBRQ19TUEFDRSkgeworCQlkbS0+ZHFiX2N1cnNwYWNlID0gZGktPmRfc3BhY2UgLSBkbS0+ZHFiX3JzdnNwYWNlOwogCQljaGVja19ibGltID0gMTsKIAkJc2V0X2JpdChEUV9MQVNUU0VUX0IgKyBRSUZfU1BBQ0VfQiwgJmRxdW90LT5kcV9mbGFncyk7CiAJfQogCi0JaWYgKGRpLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JTT0ZUKQotCQlkbS0+ZHFiX2Jzb2Z0bGltaXQgPSBxYnRvcyhkaS0+ZF9ibGtfc29mdGxpbWl0KTsKLQlpZiAoZGktPmRfZmllbGRtYXNrICYgRlNfRFFfQkhBUkQpCi0JCWRtLT5kcWJfYmhhcmRsaW1pdCA9IHFidG9zKGRpLT5kX2Jsa19oYXJkbGltaXQpOwotCWlmIChkaS0+ZF9maWVsZG1hc2sgJiAoRlNfRFFfQlNPRlQgfCBGU19EUV9CSEFSRCkpIHsKKwlpZiAoZGktPmRfZmllbGRtYXNrICYgUUNfU1BDX1NPRlQpCisJCWRtLT5kcWJfYnNvZnRsaW1pdCA9IGRpLT5kX3NwY19zb2Z0bGltaXQ7CisJaWYgKGRpLT5kX2ZpZWxkbWFzayAmIFFDX1NQQ19IQVJEKQorCQlkbS0+ZHFiX2JoYXJkbGltaXQgPSBkaS0+ZF9zcGNfaGFyZGxpbWl0OworCWlmIChkaS0+ZF9maWVsZG1hc2sgJiAoUUNfU1BDX1NPRlQgfCBRQ19TUENfSEFSRCkpIHsKIAkJY2hlY2tfYmxpbSA9IDE7CiAJCXNldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX0JMSU1JVFNfQiwgJmRxdW90LT5kcV9mbGFncyk7CiAJfQogCi0JaWYgKGRpLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lDT1VOVCkgewotCQlkbS0+ZHFiX2N1cmlub2RlcyA9IGRpLT5kX2ljb3VudDsKKwlpZiAoZGktPmRfZmllbGRtYXNrICYgUUNfSU5PX0NPVU5UKSB7CisJCWRtLT5kcWJfY3VyaW5vZGVzID0gZGktPmRfaW5vX2NvdW50OwogCQljaGVja19pbGltID0gMTsKIAkJc2V0X2JpdChEUV9MQVNUU0VUX0IgKyBRSUZfSU5PREVTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwogCX0KIAotCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBGU19EUV9JU09GVCkKKwlpZiAoZGktPmRfZmllbGRtYXNrICYgUUNfSU5PX1NPRlQpCiAJCWRtLT5kcWJfaXNvZnRsaW1pdCA9IGRpLT5kX2lub19zb2Z0bGltaXQ7Ci0JaWYgKGRpLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lIQVJEKQorCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBRQ19JTk9fSEFSRCkKIAkJZG0tPmRxYl9paGFyZGxpbWl0ID0gZGktPmRfaW5vX2hhcmRsaW1pdDsKLQlpZiAoZGktPmRfZmllbGRtYXNrICYgKEZTX0RRX0lTT0ZUIHwgRlNfRFFfSUhBUkQpKSB7CisJaWYgKGRpLT5kX2ZpZWxkbWFzayAmIChRQ19JTk9fU09GVCB8IFFDX0lOT19IQVJEKSkgewogCQljaGVja19pbGltID0gMTsKIAkJc2V0X2JpdChEUV9MQVNUU0VUX0IgKyBRSUZfSUxJTUlUU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKIAl9CiAKLQlpZiAoZGktPmRfZmllbGRtYXNrICYgRlNfRFFfQlRJTUVSKSB7Ci0JCWRtLT5kcWJfYnRpbWUgPSBkaS0+ZF9idGltZXI7CisJaWYgKGRpLT5kX2ZpZWxkbWFzayAmIFFDX1NQQ19USU1FUikgeworCQlkbS0+ZHFiX2J0aW1lID0gZGktPmRfc3BjX3RpbWVyOwogCQljaGVja19ibGltID0gMTsKIAkJc2V0X2JpdChEUV9MQVNUU0VUX0IgKyBRSUZfQlRJTUVfQiwgJmRxdW90LT5kcV9mbGFncyk7CiAJfQogCi0JaWYgKGRpLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lUSU1FUikgewotCQlkbS0+ZHFiX2l0aW1lID0gZGktPmRfaXRpbWVyOworCWlmIChkaS0+ZF9maWVsZG1hc2sgJiBRQ19JTk9fVElNRVIpIHsKKwkJZG0tPmRxYl9pdGltZSA9IGRpLT5kX2lub190aW1lcjsKIAkJY2hlY2tfaWxpbSA9IDE7CiAJCXNldF9iaXQoRFFfTEFTVFNFVF9CICsgUUlGX0lUSU1FX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwogCX0KQEAgLTI1MDYsNyArMjU3MSw3IEBACiAJCSAgICBkbS0+ZHFiX2N1cnNwYWNlIDwgZG0tPmRxYl9ic29mdGxpbWl0KSB7CiAJCQlkbS0+ZHFiX2J0aW1lID0gMDsKIAkJCWNsZWFyX2JpdChEUV9CTEtTX0IsICZkcXVvdC0+ZHFfZmxhZ3MpOwotCQl9IGVsc2UgaWYgKCEoZGktPmRfZmllbGRtYXNrICYgRlNfRFFfQlRJTUVSKSkKKwkJfSBlbHNlIGlmICghKGRpLT5kX2ZpZWxkbWFzayAmIFFDX1NQQ19USU1FUikpCiAJCQkvKiBTZXQgZ3JhY2Ugb25seSBpZiB1c2VyIGhhc24ndCBwcm92aWRlZCBoaXMgb3duLi4uICovCiAJCQlkbS0+ZHFiX2J0aW1lID0gZ2V0X3NlY29uZHMoKSArIGRxaS0+ZHFpX2JncmFjZTsKIAl9CkBAIC0yNTE1LDcgKzI1ODAsNyBAQAogCQkgICAgZG0tPmRxYl9jdXJpbm9kZXMgPCBkbS0+ZHFiX2lzb2Z0bGltaXQpIHsKIAkJCWRtLT5kcWJfaXRpbWUgPSAwOwogCQkJY2xlYXJfYml0KERRX0lOT0RFU19CLCAmZHF1b3QtPmRxX2ZsYWdzKTsKLQkJfSBlbHNlIGlmICghKGRpLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lUSU1FUikpCisJCX0gZWxzZSBpZiAoIShkaS0+ZF9maWVsZG1hc2sgJiBRQ19JTk9fVElNRVIpKQogCQkJLyogU2V0IGdyYWNlIG9ubHkgaWYgdXNlciBoYXNuJ3QgcHJvdmlkZWQgaGlzIG93bi4uLiAqLwogCQkJZG0tPmRxYl9pdGltZSA9IGdldF9zZWNvbmRzKCkgKyBkcWktPmRxaV9pZ3JhY2U7CiAJfQpAQCAtMjUzMSw3ICsyNTk2LDcgQEAKIH0KIAogaW50IGRxdW90X3NldF9kcWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga3FpZCBxaWQsCi0JCSAgc3RydWN0IGZzX2Rpc2tfcXVvdGEgKmRpKQorCQkgIHN0cnVjdCBxY19kcWJsayAqZGkpCiB7CiAJc3RydWN0IGRxdW90ICpkcXVvdDsKIAlpbnQgcmM7CkBAIC0yNTgyLDYgKzI2NDcsMTQgQEAKIAkJZ290byBvdXQ7CiAJfQogCW1pID0gc2JfZHFvcHQoc2IpLT5pbmZvICsgdHlwZTsKKwlpZiAoaWktPmRxaV92YWxpZCAmIElJRl9GTEFHUykgeworCQlpZiAoaWktPmRxaV9mbGFncyAmIH5EUUZfU0VUSU5GT19NQVNLIHx8CisJCSAgICAoaWktPmRxaV9mbGFncyAmIERRRl9ST09UX1NRVUFTSCAmJgorCQkgICAgIG1pLT5kcWlfZm9ybWF0LT5xZl9mbXRfaWQgIT0gUUZNVF9WRlNfT0xEKSkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQogCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKIAlpZiAoaWktPmRxaV92YWxpZCAmIElJRl9CR1JBQ0UpCiAJCW1pLT5kcWlfYmdyYWNlID0gaWktPmRxaV9iZ3JhY2U7CkBAIC0yNjExLDYgKzI2ODQsMTcgQEAKIH07CiBFWFBPUlRfU1lNQk9MKGRxdW90X3F1b3RhY3RsX29wcyk7CiAKK2NvbnN0IHN0cnVjdCBxdW90YWN0bF9vcHMgZHF1b3RfcXVvdGFjdGxfc3lzZmlsZV9vcHMgPSB7CisJLnF1b3RhX2VuYWJsZQk9IGRxdW90X3F1b3RhX2VuYWJsZSwKKwkucXVvdGFfZGlzYWJsZQk9IGRxdW90X3F1b3RhX2Rpc2FibGUsCisJLnF1b3RhX3N5bmMJPSBkcXVvdF9xdW90YV9zeW5jLAorCS5nZXRfaW5mbwk9IGRxdW90X2dldF9kcWluZm8sCisJLnNldF9pbmZvCT0gZHF1b3Rfc2V0X2RxaW5mbywKKwkuZ2V0X2RxYmxrCT0gZHF1b3RfZ2V0X2RxYmxrLAorCS5zZXRfZHFibGsJPSBkcXVvdF9zZXRfZHFibGsKK307CitFWFBPUlRfU1lNQk9MKGRxdW90X3F1b3RhY3RsX3N5c2ZpbGVfb3BzKTsKKwogc3RhdGljIGludCBkb19wcm9jX2Rxc3RhdHMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAkJICAgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL3F1b3RhLmMgYi9mcy9xdW90YS9xdW90YS5jCmluZGV4IDJhYTQxNTEuLmQxNGE3OTkgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhL3F1b3RhLmMKKysrIGIvZnMvcXVvdGEvcXVvdGEuYwpAQCAtNjYsMTggKzY2LDQwIEBACiAJcmV0dXJuIHJldDsKIH0KIAordW5zaWduZWQgaW50IHF0eXBlX2VuZm9yY2VfZmxhZyhpbnQgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFVTUlFVT1RBOgorCQlyZXR1cm4gRlNfUVVPVEFfVURRX0VORkQ7CisJY2FzZSBHUlBRVU9UQToKKwkJcmV0dXJuIEZTX1FVT1RBX0dEUV9FTkZEOworCWNhc2UgUFJKUVVPVEE6CisJCXJldHVybiBGU19RVU9UQV9QRFFfRU5GRDsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcXVvdGFfcXVvdGFvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IGNtZCwgcWlkX3QgaWQsCiAJCSAgICAgICAgIHN0cnVjdCBwYXRoICpwYXRoKQogewotCWlmICghc2ItPnNfcWNvcC0+cXVvdGFfb24gJiYgIXNiLT5zX3Fjb3AtPnF1b3RhX29uX21ldGEpCisJaWYgKCFzYi0+c19xY29wLT5xdW90YV9vbiAmJiAhc2ItPnNfcWNvcC0+cXVvdGFfZW5hYmxlKQogCQlyZXR1cm4gLUVOT1NZUzsKLQlpZiAoc2ItPnNfcWNvcC0+cXVvdGFfb25fbWV0YSkKLQkJcmV0dXJuIHNiLT5zX3Fjb3AtPnF1b3RhX29uX21ldGEoc2IsIHR5cGUsIGlkKTsKKwlpZiAoc2ItPnNfcWNvcC0+cXVvdGFfZW5hYmxlKQorCQlyZXR1cm4gc2ItPnNfcWNvcC0+cXVvdGFfZW5hYmxlKHNiLCBxdHlwZV9lbmZvcmNlX2ZsYWcodHlwZSkpOwogCWlmIChJU19FUlIocGF0aCkpCiAJCXJldHVybiBQVFJfRVJSKHBhdGgpOwogCXJldHVybiBzYi0+c19xY29wLT5xdW90YV9vbihzYiwgdHlwZSwgaWQsIHBhdGgpOwogfQogCitzdGF0aWMgaW50IHF1b3RhX3F1b3Rhb2ZmKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQoreworCWlmICghc2ItPnNfcWNvcC0+cXVvdGFfb2ZmICYmICFzYi0+c19xY29wLT5xdW90YV9kaXNhYmxlKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlpZiAoc2ItPnNfcWNvcC0+cXVvdGFfZGlzYWJsZSkKKwkJcmV0dXJuIHNiLT5zX3Fjb3AtPnF1b3RhX2Rpc2FibGUoc2IsIHF0eXBlX2VuZm9yY2VfZmxhZyh0eXBlKSk7CisJcmV0dXJuIHNiLT5zX3Fjb3AtPnF1b3RhX29mZihzYiwgdHlwZSk7Cit9CisKIHN0YXRpYyBpbnQgcXVvdGFfZ2V0Zm10KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCB2b2lkIF9fdXNlciAqYWRkcikKIHsKIAlfX3UzMiBmbXQ7CkBAIC0xMTgsMTcgKzE0MCwyNyBAQAogCXJldHVybiBzYi0+c19xY29wLT5zZXRfaW5mbyhzYiwgdHlwZSwgJmluZm8pOwogfQogCi1zdGF0aWMgdm9pZCBjb3B5X3RvX2lmX2RxYmxrKHN0cnVjdCBpZl9kcWJsayAqZHN0LCBzdHJ1Y3QgZnNfZGlza19xdW90YSAqc3JjKQorc3RhdGljIGlubGluZSBxc2l6ZV90IHFidG9zKHFzaXplX3QgYmxvY2tzKQoreworCXJldHVybiBibG9ja3MgPDwgUUlGX0RRQkxLU0laRV9CSVRTOworfQorCitzdGF0aWMgaW5saW5lIHFzaXplX3Qgc3RvcWIocXNpemVfdCBzcGFjZSkKK3sKKwlyZXR1cm4gKHNwYWNlICsgUUlGX0RRQkxLU0laRSAtIDEpID4+IFFJRl9EUUJMS1NJWkVfQklUUzsKK30KKworc3RhdGljIHZvaWQgY29weV90b19pZl9kcWJsayhzdHJ1Y3QgaWZfZHFibGsgKmRzdCwgc3RydWN0IHFjX2RxYmxrICpzcmMpCiB7CiAJbWVtc2V0KGRzdCwgMCwgc2l6ZW9mKCpkc3QpKTsKLQlkc3QtPmRxYl9iaGFyZGxpbWl0ID0gc3JjLT5kX2Jsa19oYXJkbGltaXQ7Ci0JZHN0LT5kcWJfYnNvZnRsaW1pdCA9IHNyYy0+ZF9ibGtfc29mdGxpbWl0OwotCWRzdC0+ZHFiX2N1cnNwYWNlID0gc3JjLT5kX2Jjb3VudDsKKwlkc3QtPmRxYl9iaGFyZGxpbWl0ID0gc3RvcWIoc3JjLT5kX3NwY19oYXJkbGltaXQpOworCWRzdC0+ZHFiX2Jzb2Z0bGltaXQgPSBzdG9xYihzcmMtPmRfc3BjX3NvZnRsaW1pdCk7CisJZHN0LT5kcWJfY3Vyc3BhY2UgPSBzcmMtPmRfc3BhY2U7CiAJZHN0LT5kcWJfaWhhcmRsaW1pdCA9IHNyYy0+ZF9pbm9faGFyZGxpbWl0OwogCWRzdC0+ZHFiX2lzb2Z0bGltaXQgPSBzcmMtPmRfaW5vX3NvZnRsaW1pdDsKLQlkc3QtPmRxYl9jdXJpbm9kZXMgPSBzcmMtPmRfaWNvdW50OwotCWRzdC0+ZHFiX2J0aW1lID0gc3JjLT5kX2J0aW1lcjsKLQlkc3QtPmRxYl9pdGltZSA9IHNyYy0+ZF9pdGltZXI7CisJZHN0LT5kcWJfY3VyaW5vZGVzID0gc3JjLT5kX2lub19jb3VudDsKKwlkc3QtPmRxYl9idGltZSA9IHNyYy0+ZF9zcGNfdGltZXI7CisJZHN0LT5kcWJfaXRpbWUgPSBzcmMtPmRfaW5vX3RpbWVyOwogCWRzdC0+ZHFiX3ZhbGlkID0gUUlGX0FMTDsKIH0KIApAQCAtMTM2LDcgKzE2OCw3IEBACiAJCQkgIHZvaWQgX191c2VyICphZGRyKQogewogCXN0cnVjdCBrcWlkIHFpZDsKLQlzdHJ1Y3QgZnNfZGlza19xdW90YSBmZHE7CisJc3RydWN0IHFjX2RxYmxrIGZkcTsKIAlzdHJ1Y3QgaWZfZHFibGsgaWRxOwogCWludCByZXQ7CiAKQEAgLTE1NCwzNiArMTg2LDM2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNvcHlfZnJvbV9pZl9kcWJsayhzdHJ1Y3QgZnNfZGlza19xdW90YSAqZHN0LCBzdHJ1Y3QgaWZfZHFibGsgKnNyYykKK3N0YXRpYyB2b2lkIGNvcHlfZnJvbV9pZl9kcWJsayhzdHJ1Y3QgcWNfZHFibGsgKmRzdCwgc3RydWN0IGlmX2RxYmxrICpzcmMpCiB7Ci0JZHN0LT5kX2Jsa19oYXJkbGltaXQgPSBzcmMtPmRxYl9iaGFyZGxpbWl0OwotCWRzdC0+ZF9ibGtfc29mdGxpbWl0ICA9IHNyYy0+ZHFiX2Jzb2Z0bGltaXQ7Ci0JZHN0LT5kX2Jjb3VudCA9IHNyYy0+ZHFiX2N1cnNwYWNlOworCWRzdC0+ZF9zcGNfaGFyZGxpbWl0ID0gcWJ0b3Moc3JjLT5kcWJfYmhhcmRsaW1pdCk7CisJZHN0LT5kX3NwY19zb2Z0bGltaXQgPSBxYnRvcyhzcmMtPmRxYl9ic29mdGxpbWl0KTsKKwlkc3QtPmRfc3BhY2UgPSBzcmMtPmRxYl9jdXJzcGFjZTsKIAlkc3QtPmRfaW5vX2hhcmRsaW1pdCA9IHNyYy0+ZHFiX2loYXJkbGltaXQ7CiAJZHN0LT5kX2lub19zb2Z0bGltaXQgPSBzcmMtPmRxYl9pc29mdGxpbWl0OwotCWRzdC0+ZF9pY291bnQgPSBzcmMtPmRxYl9jdXJpbm9kZXM7Ci0JZHN0LT5kX2J0aW1lciA9IHNyYy0+ZHFiX2J0aW1lOwotCWRzdC0+ZF9pdGltZXIgPSBzcmMtPmRxYl9pdGltZTsKKwlkc3QtPmRfaW5vX2NvdW50ID0gc3JjLT5kcWJfY3VyaW5vZGVzOworCWRzdC0+ZF9zcGNfdGltZXIgPSBzcmMtPmRxYl9idGltZTsKKwlkc3QtPmRfaW5vX3RpbWVyID0gc3JjLT5kcWJfaXRpbWU7CiAKIAlkc3QtPmRfZmllbGRtYXNrID0gMDsKIAlpZiAoc3JjLT5kcWJfdmFsaWQgJiBRSUZfQkxJTUlUUykKLQkJZHN0LT5kX2ZpZWxkbWFzayB8PSBGU19EUV9CU09GVCB8IEZTX0RRX0JIQVJEOworCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX1NQQ19TT0ZUIHwgUUNfU1BDX0hBUkQ7CiAJaWYgKHNyYy0+ZHFiX3ZhbGlkICYgUUlGX1NQQUNFKQotCQlkc3QtPmRfZmllbGRtYXNrIHw9IEZTX0RRX0JDT1VOVDsKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19TUEFDRTsKIAlpZiAoc3JjLT5kcWJfdmFsaWQgJiBRSUZfSUxJTUlUUykKLQkJZHN0LT5kX2ZpZWxkbWFzayB8PSBGU19EUV9JU09GVCB8IEZTX0RRX0lIQVJEOworCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX0lOT19TT0ZUIHwgUUNfSU5PX0hBUkQ7CiAJaWYgKHNyYy0+ZHFiX3ZhbGlkICYgUUlGX0lOT0RFUykKLQkJZHN0LT5kX2ZpZWxkbWFzayB8PSBGU19EUV9JQ09VTlQ7CisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfSU5PX0NPVU5UOwogCWlmIChzcmMtPmRxYl92YWxpZCAmIFFJRl9CVElNRSkKLQkJZHN0LT5kX2ZpZWxkbWFzayB8PSBGU19EUV9CVElNRVI7CisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfU1BDX1RJTUVSOwogCWlmIChzcmMtPmRxYl92YWxpZCAmIFFJRl9JVElNRSkKLQkJZHN0LT5kX2ZpZWxkbWFzayB8PSBGU19EUV9JVElNRVI7CisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfSU5PX1RJTUVSOwogfQogCiBzdGF0aWMgaW50IHF1b3RhX3NldHF1b3RhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBxaWRfdCBpZCwKIAkJCSAgdm9pZCBfX3VzZXIgKmFkZHIpCiB7Ci0Jc3RydWN0IGZzX2Rpc2tfcXVvdGEgZmRxOworCXN0cnVjdCBxY19kcWJsayBmZHE7CiAJc3RydWN0IGlmX2RxYmxrIGlkcTsKIAlzdHJ1Y3Qga3FpZCBxaWQ7CiAKQEAgLTE5OCwxNSArMjMwLDI2IEBACiAJcmV0dXJuIHNiLT5zX3Fjb3AtPnNldF9kcWJsayhzYiwgcWlkLCAmZmRxKTsKIH0KIAotc3RhdGljIGludCBxdW90YV9zZXR4c3RhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFkZHIpCitzdGF0aWMgaW50IHF1b3RhX2VuYWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkIF9fdXNlciAqYWRkcikKIHsKIAlfX3UzMiBmbGFnczsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmZmxhZ3MsIGFkZHIsIHNpemVvZihmbGFncykpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoIXNiLT5zX3Fjb3AtPnNldF94c3RhdGUpCisJaWYgKCFzYi0+c19xY29wLT5xdW90YV9lbmFibGUpCiAJCXJldHVybiAtRU5PU1lTOwotCXJldHVybiBzYi0+c19xY29wLT5zZXRfeHN0YXRlKHNiLCBmbGFncywgY21kKTsKKwlyZXR1cm4gc2ItPnNfcWNvcC0+cXVvdGFfZW5hYmxlKHNiLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcXVvdGFfZGlzYWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkIF9fdXNlciAqYWRkcikKK3sKKwlfX3UzMiBmbGFnczsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmZmxhZ3MsIGFkZHIsIHNpemVvZihmbGFncykpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoIXNiLT5zX3Fjb3AtPnF1b3RhX2Rpc2FibGUpCisJCXJldHVybiAtRU5PU1lTOworCXJldHVybiBzYi0+c19xY29wLT5xdW90YV9kaXNhYmxlKHNiLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgcXVvdGFfZ2V0eHN0YXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgX191c2VyICphZGRyKQpAQCAtMjQ3LDEwICsyOTAsNzggQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogWEZTIGRlZmluZXMgQkJUT0IgYW5kIEJUT0JCIG1hY3JvcyBpbnNpZGUgZnMveGZzLyBhbmQgd2UgY2Fubm90IG1vdmUgdGhlbQorICogb3V0IG9mIHRoZXJlIGFzIHhmc3Byb2dzIHJlbHkgb24gZGVmaW5pdGlvbnMgYmVpbmcgaW4gdGhhdCBoZWFkZXIgZmlsZS4gU28KKyAqIGp1c3QgZGVmaW5lIHNhbWUgZnVuY3Rpb25zIGhlcmUgZm9yIHF1b3RhIHB1cnBvc2VzLgorICovCisjZGVmaW5lIFhGU19CQl9TSElGVCA5CisKK3N0YXRpYyBpbmxpbmUgdTY0IHF1b3RhX2JidG9iKHU2NCBibG9ja3MpCit7CisJcmV0dXJuIGJsb2NrcyA8PCBYRlNfQkJfU0hJRlQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IHF1b3RhX2J0b2JiKHU2NCBieXRlcykKK3sKKwlyZXR1cm4gKGJ5dGVzICsgKDEgPDwgWEZTX0JCX1NISUZUKSAtIDEpID4+IFhGU19CQl9TSElGVDsKK30KKworc3RhdGljIHZvaWQgY29weV9mcm9tX3hmc19kcWJsayhzdHJ1Y3QgcWNfZHFibGsgKmRzdCwgc3RydWN0IGZzX2Rpc2tfcXVvdGEgKnNyYykKK3sKKwlkc3QtPmRfc3BjX2hhcmRsaW1pdCA9IHF1b3RhX2JidG9iKHNyYy0+ZF9ibGtfaGFyZGxpbWl0KTsKKwlkc3QtPmRfc3BjX3NvZnRsaW1pdCA9IHF1b3RhX2JidG9iKHNyYy0+ZF9ibGtfc29mdGxpbWl0KTsKKwlkc3QtPmRfaW5vX2hhcmRsaW1pdCA9IHNyYy0+ZF9pbm9faGFyZGxpbWl0OworCWRzdC0+ZF9pbm9fc29mdGxpbWl0ID0gc3JjLT5kX2lub19zb2Z0bGltaXQ7CisJZHN0LT5kX3NwYWNlID0gcXVvdGFfYmJ0b2Ioc3JjLT5kX2Jjb3VudCk7CisJZHN0LT5kX2lub19jb3VudCA9IHNyYy0+ZF9pY291bnQ7CisJZHN0LT5kX2lub190aW1lciA9IHNyYy0+ZF9pdGltZXI7CisJZHN0LT5kX3NwY190aW1lciA9IHNyYy0+ZF9idGltZXI7CisJZHN0LT5kX2lub193YXJucyA9IHNyYy0+ZF9pd2FybnM7CisJZHN0LT5kX3NwY193YXJucyA9IHNyYy0+ZF9id2FybnM7CisJZHN0LT5kX3J0X3NwY19oYXJkbGltaXQgPSBxdW90YV9iYnRvYihzcmMtPmRfcnRiX2hhcmRsaW1pdCk7CisJZHN0LT5kX3J0X3NwY19zb2Z0bGltaXQgPSBxdW90YV9iYnRvYihzcmMtPmRfcnRiX3NvZnRsaW1pdCk7CisJZHN0LT5kX3J0X3NwYWNlID0gcXVvdGFfYmJ0b2Ioc3JjLT5kX3J0YmNvdW50KTsKKwlkc3QtPmRfcnRfc3BjX3RpbWVyID0gc3JjLT5kX3J0YnRpbWVyOworCWRzdC0+ZF9ydF9zcGNfd2FybnMgPSBzcmMtPmRfcnRid2FybnM7CisJZHN0LT5kX2ZpZWxkbWFzayA9IDA7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9JU09GVCkKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19JTk9fU09GVDsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lIQVJEKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX0lOT19IQVJEOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfQlNPRlQpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfU1BDX1NPRlQ7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9CSEFSRCkKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19TUENfSEFSRDsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX1JUQlNPRlQpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfUlRfU1BDX1NPRlQ7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9SVEJIQVJEKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX1JUX1NQQ19IQVJEOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfQlRJTUVSKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX1NQQ19USU1FUjsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lUSU1FUikKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19JTk9fVElNRVI7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9SVEJUSU1FUikKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19SVF9TUENfVElNRVI7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9CV0FSTlMpCisJCWRzdC0+ZF9maWVsZG1hc2sgfD0gUUNfU1BDX1dBUk5TOworCWlmIChzcmMtPmRfZmllbGRtYXNrICYgRlNfRFFfSVdBUk5TKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX0lOT19XQVJOUzsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX1JUQldBUk5TKQorCQlkc3QtPmRfZmllbGRtYXNrIHw9IFFDX1JUX1NQQ19XQVJOUzsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JDT1VOVCkKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19TUEFDRTsKKwlpZiAoc3JjLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lDT1VOVCkKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19JTk9fQ09VTlQ7CisJaWYgKHNyYy0+ZF9maWVsZG1hc2sgJiBGU19EUV9SVEJDT1VOVCkKKwkJZHN0LT5kX2ZpZWxkbWFzayB8PSBRQ19SVF9TUEFDRTsKK30KKwogc3RhdGljIGludCBxdW90YV9zZXR4cXVvdGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHFpZF90IGlkLAogCQkJICAgdm9pZCBfX3VzZXIgKmFkZHIpCiB7CiAJc3RydWN0IGZzX2Rpc2tfcXVvdGEgZmRxOworCXN0cnVjdCBxY19kcWJsayBxZHE7CiAJc3RydWN0IGtxaWQgcWlkOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZmZHEsIGFkZHIsIHNpemVvZihmZHEpKSkKQEAgLTI2MCwxMyArMzcxLDQ0IEBACiAJcWlkID0gbWFrZV9rcWlkKGN1cnJlbnRfdXNlcl9ucygpLCB0eXBlLCBpZCk7CiAJaWYgKCFxaWRfdmFsaWQocWlkKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIHNiLT5zX3Fjb3AtPnNldF9kcWJsayhzYiwgcWlkLCAmZmRxKTsKKwljb3B5X2Zyb21feGZzX2RxYmxrKCZxZHEsICZmZHEpOworCXJldHVybiBzYi0+c19xY29wLT5zZXRfZHFibGsoc2IsIHFpZCwgJnFkcSk7Cit9CisKK3N0YXRpYyB2b2lkIGNvcHlfdG9feGZzX2RxYmxrKHN0cnVjdCBmc19kaXNrX3F1b3RhICpkc3QsIHN0cnVjdCBxY19kcWJsayAqc3JjLAorCQkJICAgICAgaW50IHR5cGUsIHFpZF90IGlkKQoreworCW1lbXNldChkc3QsIDAsIHNpemVvZigqZHN0KSk7CisJZHN0LT5kX3ZlcnNpb24gPSBGU19EUVVPVF9WRVJTSU9OOworCWRzdC0+ZF9pZCA9IGlkOworCWlmICh0eXBlID09IFVTUlFVT1RBKQorCQlkc3QtPmRfZmxhZ3MgPSBGU19VU0VSX1FVT1RBOworCWVsc2UgaWYgKHR5cGUgPT0gUFJKUVVPVEEpCisJCWRzdC0+ZF9mbGFncyA9IEZTX1BST0pfUVVPVEE7CisJZWxzZQorCQlkc3QtPmRfZmxhZ3MgPSBGU19HUk9VUF9RVU9UQTsKKwlkc3QtPmRfYmxrX2hhcmRsaW1pdCA9IHF1b3RhX2J0b2JiKHNyYy0+ZF9zcGNfaGFyZGxpbWl0KTsKKwlkc3QtPmRfYmxrX3NvZnRsaW1pdCA9IHF1b3RhX2J0b2JiKHNyYy0+ZF9zcGNfc29mdGxpbWl0KTsKKwlkc3QtPmRfaW5vX2hhcmRsaW1pdCA9IHNyYy0+ZF9pbm9faGFyZGxpbWl0OworCWRzdC0+ZF9pbm9fc29mdGxpbWl0ID0gc3JjLT5kX2lub19zb2Z0bGltaXQ7CisJZHN0LT5kX2Jjb3VudCA9IHF1b3RhX2J0b2JiKHNyYy0+ZF9zcGFjZSk7CisJZHN0LT5kX2ljb3VudCA9IHNyYy0+ZF9pbm9fY291bnQ7CisJZHN0LT5kX2l0aW1lciA9IHNyYy0+ZF9pbm9fdGltZXI7CisJZHN0LT5kX2J0aW1lciA9IHNyYy0+ZF9zcGNfdGltZXI7CisJZHN0LT5kX2l3YXJucyA9IHNyYy0+ZF9pbm9fd2FybnM7CisJZHN0LT5kX2J3YXJucyA9IHNyYy0+ZF9zcGNfd2FybnM7CisJZHN0LT5kX3J0Yl9oYXJkbGltaXQgPSBxdW90YV9idG9iYihzcmMtPmRfcnRfc3BjX2hhcmRsaW1pdCk7CisJZHN0LT5kX3J0Yl9zb2Z0bGltaXQgPSBxdW90YV9idG9iYihzcmMtPmRfcnRfc3BjX3NvZnRsaW1pdCk7CisJZHN0LT5kX3J0YmNvdW50ID0gcXVvdGFfYnRvYmIoc3JjLT5kX3J0X3NwYWNlKTsKKwlkc3QtPmRfcnRidGltZXIgPSBzcmMtPmRfcnRfc3BjX3RpbWVyOworCWRzdC0+ZF9ydGJ3YXJucyA9IHNyYy0+ZF9ydF9zcGNfd2FybnM7CiB9CiAKIHN0YXRpYyBpbnQgcXVvdGFfZ2V0eHF1b3RhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBxaWRfdCBpZCwKIAkJCSAgIHZvaWQgX191c2VyICphZGRyKQogewogCXN0cnVjdCBmc19kaXNrX3F1b3RhIGZkcTsKKwlzdHJ1Y3QgcWNfZHFibGsgcWRxOwogCXN0cnVjdCBrcWlkIHFpZDsKIAlpbnQgcmV0OwogCkBAIC0yNzUsOCArNDE3LDExIEBACiAJcWlkID0gbWFrZV9rcWlkKGN1cnJlbnRfdXNlcl9ucygpLCB0eXBlLCBpZCk7CiAJaWYgKCFxaWRfdmFsaWQocWlkKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0ID0gc2ItPnNfcWNvcC0+Z2V0X2RxYmxrKHNiLCBxaWQsICZmZHEpOwotCWlmICghcmV0ICYmIGNvcHlfdG9fdXNlcihhZGRyLCAmZmRxLCBzaXplb2YoZmRxKSkpCisJcmV0ID0gc2ItPnNfcWNvcC0+Z2V0X2RxYmxrKHNiLCBxaWQsICZxZHEpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJY29weV90b194ZnNfZHFibGsoJmZkcSwgJnFkcSwgdHlwZSwgaWQpOworCWlmIChjb3B5X3RvX3VzZXIoYWRkciwgJmZkcSwgc2l6ZW9mKGZkcSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzE3LDkgKzQ2Miw3IEBACiAJY2FzZSBRX1FVT1RBT046CiAJCXJldHVybiBxdW90YV9xdW90YW9uKHNiLCB0eXBlLCBjbWQsIGlkLCBwYXRoKTsKIAljYXNlIFFfUVVPVEFPRkY6Ci0JCWlmICghc2ItPnNfcWNvcC0+cXVvdGFfb2ZmKQotCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCXJldHVybiBzYi0+c19xY29wLT5xdW90YV9vZmYoc2IsIHR5cGUpOworCQlyZXR1cm4gcXVvdGFfcXVvdGFvZmYoc2IsIHR5cGUpOwogCWNhc2UgUV9HRVRGTVQ6CiAJCXJldHVybiBxdW90YV9nZXRmbXQoc2IsIHR5cGUsIGFkZHIpOwogCWNhc2UgUV9HRVRJTkZPOgpAQCAtMzM1LDggKzQ3OCw5IEBACiAJCQlyZXR1cm4gLUVOT1NZUzsKIAkJcmV0dXJuIHNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMoc2IsIHR5cGUpOwogCWNhc2UgUV9YUVVPVEFPTjoKKwkJcmV0dXJuIHF1b3RhX2VuYWJsZShzYiwgYWRkcik7CiAJY2FzZSBRX1hRVU9UQU9GRjoKLQkJcmV0dXJuIHF1b3RhX3NldHhzdGF0ZShzYiwgY21kLCBhZGRyKTsKKwkJcmV0dXJuIHF1b3RhX2Rpc2FibGUoc2IsIGFkZHIpOwogCWNhc2UgUV9YUVVPVEFSTToKIAkJcmV0dXJuIHF1b3RhX3JteHF1b3RhKHNiLCBhZGRyKTsKIAljYXNlIFFfWEdFVFFTVEFUOgpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvcXVvdGFfdjEuYyBiL2ZzL3F1b3RhL3F1b3RhX3YxLmMKaW5kZXggNDY5YzY4NC4uOGZlNzliZSAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvcXVvdGFfdjEuYworKysgYi9mcy9xdW90YS9xdW90YV92MS5jCkBAIC0xNjksOCArMTY5LDggQEAKIAl9CiAJcmV0ID0gMDsKIAkvKiBsaW1pdHMgYXJlIHN0b3JlZCBhcyB1bnNpZ25lZCAzMi1iaXQgZGF0YSAqLwotCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9tYXhibGltaXQgPSAweGZmZmZmZmZmOwotCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9tYXhpbGltaXQgPSAweGZmZmZmZmZmOworCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9tYXhfc3BjX2xpbWl0ID0gMHhmZmZmZmZmZlVMTCA8PCBRVU9UQUJMT0NLX0JJVFM7CisJZHFvcHQtPmluZm9bdHlwZV0uZHFpX21heF9pbm9fbGltaXQgPSAweGZmZmZmZmZmOwogCWRxb3B0LT5pbmZvW3R5cGVdLmRxaV9pZ3JhY2UgPQogCQkJZHFibGsuZHFiX2l0aW1lID8gZHFibGsuZHFiX2l0aW1lIDogTUFYX0lRX1RJTUU7CiAJZHFvcHQtPmluZm9bdHlwZV0uZHFpX2JncmFjZSA9CmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YV92Mi5jIGIvZnMvcXVvdGEvcXVvdGFfdjIuYwppbmRleCAwMjc1MWVjLi45Y2IxMGQ3IDEwMDY0NAotLS0gYS9mcy9xdW90YS9xdW90YV92Mi5jCisrKyBiL2ZzL3F1b3RhL3F1b3RhX3YyLmMKQEAgLTExNywxNiArMTE3LDE3IEBACiAJcWluZm8gPSBpbmZvLT5kcWlfcHJpdjsKIAlpZiAodmVyc2lvbiA9PSAwKSB7CiAJCS8qIGxpbWl0cyBhcmUgc3RvcmVkIGFzIHVuc2lnbmVkIDMyLWJpdCBkYXRhICovCi0JCWluZm8tPmRxaV9tYXhibGltaXQgPSAweGZmZmZmZmZmOwotCQlpbmZvLT5kcWlfbWF4aWxpbWl0ID0gMHhmZmZmZmZmZjsKKwkJaW5mby0+ZHFpX21heF9zcGNfbGltaXQgPSAweGZmZmZmZmZmVUxMIDw8IFFVT1RBQkxPQ0tfQklUUzsKKwkJaW5mby0+ZHFpX21heF9pbm9fbGltaXQgPSAweGZmZmZmZmZmOwogCX0gZWxzZSB7Ci0JCS8qIHVzZWQgc3BhY2UgaXMgc3RvcmVkIGFzIHVuc2lnbmVkIDY0LWJpdCB2YWx1ZSAqLwotCQlpbmZvLT5kcWlfbWF4YmxpbWl0ID0gMHhmZmZmZmZmZmZmZmZmZmZmVUxMOwkvKiAyXjY0LTEgKi8KLQkJaW5mby0+ZHFpX21heGlsaW1pdCA9IDB4ZmZmZmZmZmZmZmZmZmZmZlVMTDsKKwkJLyogdXNlZCBzcGFjZSBpcyBzdG9yZWQgYXMgdW5zaWduZWQgNjQtYml0IHZhbHVlIGluIGJ5dGVzICovCisJCWluZm8tPmRxaV9tYXhfc3BjX2xpbWl0ID0gMHhmZmZmZmZmZmZmZmZmZmZmVUxMOyAvKiAyXjY0LTEgKi8KKwkJaW5mby0+ZHFpX21heF9pbm9fbGltaXQgPSAweGZmZmZmZmZmZmZmZmZmZmZVTEw7CiAJfQogCWluZm8tPmRxaV9iZ3JhY2UgPSBsZTMyX3RvX2NwdShkaW5mby5kcWlfYmdyYWNlKTsKIAlpbmZvLT5kcWlfaWdyYWNlID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2lncmFjZSk7Ci0JaW5mby0+ZHFpX2ZsYWdzID0gbGUzMl90b19jcHUoZGluZm8uZHFpX2ZsYWdzKTsKKwkvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovCisJaW5mby0+ZHFpX2ZsYWdzID0gMDsKIAlxaW5mby0+ZHFpX3NiID0gc2I7CiAJcWluZm8tPmRxaV90eXBlID0gdHlwZTsKIAlxaW5mby0+ZHFpX2Jsb2NrcyA9IGxlMzJfdG9fY3B1KGRpbmZvLmRxaV9ibG9ja3MpOwpAQCAtMTU3LDcgKzE1OCw4IEBACiAJaW5mby0+ZHFpX2ZsYWdzICY9IH5EUUZfSU5GT19ESVJUWTsKIAlkaW5mby5kcWlfYmdyYWNlID0gY3B1X3RvX2xlMzIoaW5mby0+ZHFpX2JncmFjZSk7CiAJZGluZm8uZHFpX2lncmFjZSA9IGNwdV90b19sZTMyKGluZm8tPmRxaV9pZ3JhY2UpOwotCWRpbmZvLmRxaV9mbGFncyA9IGNwdV90b19sZTMyKGluZm8tPmRxaV9mbGFncyAmIERRRl9NQVNLKTsKKwkvKiBObyBmbGFncyBjdXJyZW50bHkgc3VwcG9ydGVkICovCisJZGluZm8uZHFpX2ZsYWdzID0gY3B1X3RvX2xlMzIoMCk7CiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7CiAJZGluZm8uZHFpX2Jsb2NrcyA9IGNwdV90b19sZTMyKHFpbmZvLT5kcWlfYmxvY2tzKTsKIAlkaW5mby5kcWlfZnJlZV9ibGsgPSBjcHVfdG9fbGUzMihxaW5mby0+ZHFpX2ZyZWVfYmxrKTsKZGlmZiAtLWdpdCBhL2ZzL3JlYWRfd3JpdGUuYyBiL2ZzL3JlYWRfd3JpdGUuYwppbmRleCBjMDgwNWM5Li40MDYwNjkxIDEwMDY0NAotLS0gYS9mcy9yZWFkX3dyaXRlLmMKKysrIGIvZnMvcmVhZF93cml0ZS5jCkBAIC0zNTgsNyArMzU4LDcgQEAKIAkJCXJldHVybiByZXR2YWw7CiAJfQogCi0JaWYgKHVubGlrZWx5KGlub2RlLT5pX2Zsb2NrICYmIG1hbmRhdG9yeV9sb2NrKGlub2RlKSkpIHsKKwlpZiAodW5saWtlbHkoaW5vZGUtPmlfZmxjdHggJiYgbWFuZGF0b3J5X2xvY2soaW5vZGUpKSkgewogCQlyZXR2YWwgPSBsb2Nrc19tYW5kYXRvcnlfYXJlYSgKIAkJCXJlYWRfd3JpdGUgPT0gUkVBRCA/IEZMT0NLX1ZFUklGWV9SRUFEIDogRkxPQ0tfVkVSSUZZX1dSSVRFLAogCQkJaW5vZGUsIGZpbGUsIHBvcywgY291bnQpOwpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZmlsZS5jIGIvZnMvdWJpZnMvZmlsZS5jCmluZGV4IDUzODUxOWUuLjAzNWU1MTAgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2ZpbGUuYworKysgYi9mcy91Ymlmcy9maWxlLmMKQEAgLTE1MzYsNyArMTUzNiw2IEBACiAJLmZhdWx0ICAgICAgICA9IGZpbGVtYXBfZmF1bHQsCiAJLm1hcF9wYWdlcyA9IGZpbGVtYXBfbWFwX3BhZ2VzLAogCS5wYWdlX21rd3JpdGUgPSB1Ymlmc192bV9wYWdlX21rd3JpdGUsCi0JLnJlbWFwX3BhZ2VzID0gZ2VuZXJpY19maWxlX3JlbWFwX3BhZ2VzLAogfTsKIAogc3RhdGljIGludCB1Ymlmc19maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQpkaWZmIC0tZ2l0IGEvZnMvdWRmL0tjb25maWcgYi9mcy91ZGYvS2NvbmZpZwppbmRleCAwZTBlOTliLi5jNmUxN2E3IDEwMDY0NAotLS0gYS9mcy91ZGYvS2NvbmZpZworKysgYi9mcy91ZGYvS2NvbmZpZwpAQCAtMiwxMCArMiwxMiBAQAogCXRyaXN0YXRlICJVREYgZmlsZSBzeXN0ZW0gc3VwcG9ydCIKIAlzZWxlY3QgQ1JDX0lUVV9UCiAJaGVscAotCSAgVGhpcyBpcyB0aGUgbmV3IGZpbGUgc3lzdGVtIHVzZWQgb24gc29tZSBDRC1ST01zIGFuZCBEVkRzLiBTYXkgWSBpZgotCSAgeW91IGludGVuZCB0byBtb3VudCBEVkQgZGlzY3Mgb3IgQ0RSVydzIHdyaXR0ZW4gaW4gcGFja2V0IG1vZGUsIG9yCi0JICBpZiB3cml0dGVuIHRvIGJ5IG90aGVyIFVERiB1dGlsaXRpZXMsIHN1Y2ggYXMgRGlyZWN0Q0QuCi0JICBQbGVhc2UgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3VkZi50eHQ+LgorCSAgVGhpcyBpcyBhIGZpbGUgc3lzdGVtIHVzZWQgb24gc29tZSBDRC1ST01zIGFuZCBEVkRzLiBTaW5jZSB0aGUKKwkgIGZpbGUgc3lzdGVtIGlzIHN1cHBvcnRlZCBieSBtdWx0aXBsZSBvcGVyYXRpbmcgc3lzdGVtcyBhbmQgaXMgbW9yZQorCSAgY29tcGF0aWJsZSB3aXRoIHN0YW5kYXJkIHVuaXggZmlsZSBzeXN0ZW1zLCBpdCBpcyBhbHNvIHN1aXRhYmxlIGZvcgorCSAgcmVtb3ZhYmxlIFVTQiBkaXNrcy4gU2F5IFkgaWYgeW91IGludGVuZCB0byBtb3VudCBEVkQgZGlzY3Mgb3IgQ0RSVydzCisJICB3cml0dGVuIGluIHBhY2tldCBtb2RlLCBvciBpZiB5b3Ugd2FudCB0byB1c2UgVURGIGZvciByZW1vdmFibGUgVVNCCisJICBkaXNrcy4gUGxlYXNlIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy91ZGYudHh0Pi4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGZpbGUgc3lzdGVtIHN1cHBvcnQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVkZi4KZGlmZiAtLWdpdCBhL2ZzL3VkZi9maWxlLmMgYi9mcy91ZGYvZmlsZS5jCmluZGV4IGJiMTU3NzEuLjA4ZjM1NTUgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9maWxlLmMKKysrIGIvZnMvdWRmL2ZpbGUuYwpAQCAtMjI0LDcgKzIyNCw3IEBACiBzdGF0aWMgaW50IHVkZl9yZWxlYXNlX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CiAJaWYgKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFICYmCi0JICAgIGF0b21pY19yZWFkKCZpbm9kZS0+aV93cml0ZWNvdW50KSA+IDEpIHsKKwkgICAgYXRvbWljX3JlYWQoJmlub2RlLT5pX3dyaXRlY291bnQpID09IDEpIHsKIAkJLyoKIAkJICogR3JhYiBpX211dGV4IHRvIGF2b2lkIHJhY2VzIHdpdGggd3JpdGVzIGNoYW5naW5nIGlfc2l6ZQogCQkgKiB3aGlsZSB3ZSBhcmUgcnVubmluZy4KZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmMKaW5kZXggNWJjNzFkOS4uYTQ0NWQ1OSAxMDA2NDQKLS0tIGEvZnMvdWRmL2lub2RlLmMKKysrIGIvZnMvdWRmL2lub2RlLmMKQEAgLTc1MCw3ICs3NTAsNyBAQAogCS8qIEFyZSB3ZSBiZXlvbmQgRU9GPyAqLwogCWlmIChldHlwZSA9PSAtMSkgewogCQlpbnQgcmV0OwotCQlpc0JleW9uZEVPRiA9IDE7CisJCWlzQmV5b25kRU9GID0gdHJ1ZTsKIAkJaWYgKGNvdW50KSB7CiAJCQlpZiAoYykKIAkJCQlsYWFyclswXSA9IGxhYXJyWzFdOwpAQCAtNzkyLDcgKzc5Miw3IEBACiAJCWVuZG51bSA9IGMgKyAxOwogCQlsYXN0YmxvY2sgPSAxOwogCX0gZWxzZSB7Ci0JCWlzQmV5b25kRU9GID0gMDsKKwkJaXNCZXlvbmRFT0YgPSBmYWxzZTsKIAkJZW5kbnVtID0gc3RhcnRudW0gPSAoKGNvdW50ID4gMikgPyAyIDogY291bnQpOwogCiAJCS8qIGlmIHRoZSBjdXJyZW50IGV4dGVudCBpcyBpbiBwb3NpdGlvbiAwLApAQCAtMTI4OCw2ICsxMjg4LDcgQEAKIAlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgKmlsb2MgPSAmaWluZm8tPmlfbG9jYXRpb247CiAJdW5zaWduZWQgaW50IGxpbmtfY291bnQ7CiAJdW5zaWduZWQgaW50IGluZGlyZWN0aW9ucyA9IDA7CisJaW50IGJzID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOwogCWludCByZXQgPSAtRUlPOwogCiByZXJlYWQ6CkBAIC0xMzc0LDM4ICsxMzc1LDM1IEBACiAJaWYgKGZlLT5kZXNjVGFnLnRhZ0lkZW50ID09IGNwdV90b19sZTE2KFRBR19JREVOVF9FRkUpKSB7CiAJCWlpbmZvLT5pX2VmZSA9IDE7CiAJCWlpbmZvLT5pX3VzZSA9IDA7Ci0JCXJldCA9IHVkZl9hbGxvY19pX2RhdGEoaW5vZGUsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtCisJCXJldCA9IHVkZl9hbGxvY19pX2RhdGEoaW5vZGUsIGJzIC0KIAkJCQkJc2l6ZW9mKHN0cnVjdCBleHRlbmRlZEZpbGVFbnRyeSkpOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAJCW1lbWNweShpaW5mby0+aV9leHQuaV9kYXRhLAogCQkgICAgICAgYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZXh0ZW5kZWRGaWxlRW50cnkpLAotCQkgICAgICAgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0KLQkJCQkJc2l6ZW9mKHN0cnVjdCBleHRlbmRlZEZpbGVFbnRyeSkpOworCQkgICAgICAgYnMgLSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkRmlsZUVudHJ5KSk7CiAJfSBlbHNlIGlmIChmZS0+ZGVzY1RhZy50YWdJZGVudCA9PSBjcHVfdG9fbGUxNihUQUdfSURFTlRfRkUpKSB7CiAJCWlpbmZvLT5pX2VmZSA9IDA7CiAJCWlpbmZvLT5pX3VzZSA9IDA7Ci0JCXJldCA9IHVkZl9hbGxvY19pX2RhdGEoaW5vZGUsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtCi0JCQkJCQlzaXplb2Yoc3RydWN0IGZpbGVFbnRyeSkpOworCQlyZXQgPSB1ZGZfYWxsb2NfaV9kYXRhKGlub2RlLCBicyAtIHNpemVvZihzdHJ1Y3QgZmlsZUVudHJ5KSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIAkJbWVtY3B5KGlpbmZvLT5pX2V4dC5pX2RhdGEsCiAJCSAgICAgICBiaC0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCBmaWxlRW50cnkpLAotCQkgICAgICAgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gc2l6ZW9mKHN0cnVjdCBmaWxlRW50cnkpKTsKKwkJICAgICAgIGJzIC0gc2l6ZW9mKHN0cnVjdCBmaWxlRW50cnkpKTsKIAl9IGVsc2UgaWYgKGZlLT5kZXNjVGFnLnRhZ0lkZW50ID09IGNwdV90b19sZTE2KFRBR19JREVOVF9VU0UpKSB7CiAJCWlpbmZvLT5pX2VmZSA9IDA7CiAJCWlpbmZvLT5pX3VzZSA9IDE7CiAJCWlpbmZvLT5pX2xlbkFsbG9jID0gbGUzMl90b19jcHUoCiAJCQkJKChzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkgKiliaC0+Yl9kYXRhKS0+CiAJCQkJIGxlbmd0aEFsbG9jRGVzY3MpOwotCQlyZXQgPSB1ZGZfYWxsb2NfaV9kYXRhKGlub2RlLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLQorCQlyZXQgPSB1ZGZfYWxsb2NfaV9kYXRhKGlub2RlLCBicyAtCiAJCQkJCXNpemVvZihzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkpKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwogCQltZW1jcHkoaWluZm8tPmlfZXh0LmlfZGF0YSwKIAkJICAgICAgIGJoLT5iX2RhdGEgKyBzaXplb2Yoc3RydWN0IHVuYWxsb2NTcGFjZUVudHJ5KSwKLQkJICAgICAgIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtCi0JCQkJCXNpemVvZihzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkpKTsKKwkJICAgICAgIGJzIC0gc2l6ZW9mKHN0cnVjdCB1bmFsbG9jU3BhY2VFbnRyeSkpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE0ODksNiArMTQ4NywxNSBAQAogCX0KIAlpbm9kZS0+aV9nZW5lcmF0aW9uID0gaWluZm8tPmlfdW5pcXVlOwogCisJLyoKKwkgKiBTYW5pdHkgY2hlY2sgbGVuZ3RoIG9mIGFsbG9jYXRpb24gZGVzY3JpcHRvcnMgYW5kIGV4dGVuZGVkIGF0dHJzIHRvCisJICogYXZvaWQgaW50ZWdlciBvdmVyZmxvd3MKKwkgKi8KKwlpZiAoaWluZm8tPmlfbGVuRUF0dHIgPiBicyB8fCBpaW5mby0+aV9sZW5BbGxvYyA+IGJzKQorCQlnb3RvIG91dDsKKwkvKiBOb3cgZG8gZXhhY3QgY2hlY2tzICovCisJaWYgKHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSkgKyBpaW5mby0+aV9sZW5BbGxvYyA+IGJzKQorCQlnb3RvIG91dDsKIAkvKiBTYW5pdHkgY2hlY2tzIGZvciBmaWxlcyBpbiBJQ0Igc28gdGhhdCB3ZSBkb24ndCBnZXQgY29uZnVzZWQgbGF0ZXIgKi8KIAlpZiAoaWluZm8tPmlfYWxsb2NfdHlwZSA9PSBJQ0JUQUdfRkxBR19BRF9JTl9JQ0IpIHsKIAkJLyoKQEAgLTE0OTgsOCArMTUwNSw3IEBACiAJCWlmIChpaW5mby0+aV9sZW5BbGxvYyAhPSBpbm9kZS0+aV9zaXplKQogCQkJZ290byBvdXQ7CiAJCS8qIEZpbGUgaW4gSUNCIGhhcyB0byBmaXQgaW4gdGhlcmUuLi4gKi8KLQkJaWYgKGlub2RlLT5pX3NpemUgPiBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLQotCQkJCQl1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpKQorCQlpZiAoaW5vZGUtPmlfc2l6ZSA+IGJzIC0gdWRmX2ZpbGVfZW50cnlfYWxsb2Nfb2Zmc2V0KGlub2RlKSkKIAkJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvdWRmL3N1cGVyLmMgYi9mcy91ZGYvc3VwZXIuYwppbmRleCAzY2NiMmYxLi5mMTY5NDExIDEwMDY0NAotLS0gYS9mcy91ZGYvc3VwZXIuYworKysgYi9mcy91ZGYvc3VwZXIuYwpAQCAtMTU5OSw3ICsxNTk5LDcgQEAKIAlzdHJ1Y3QgdWRmX3Zkc19yZWNvcmQgKmN1cnI7CiAJc3RydWN0IGdlbmVyaWNfZGVzYyAqZ2Q7CiAJc3RydWN0IHZvbERlc2NQdHIgKnZkcDsKLQlpbnQgZG9uZSA9IDA7CisJYm9vbCBkb25lID0gZmFsc2U7CiAJdWludDMyX3QgdmRzbjsKIAl1aW50MTZfdCBpZGVudDsKIAlsb25nIG5leHRfcyA9IDAsIG5leHRfZSA9IDA7CkBAIC0xNjgwLDcgKzE2ODAsNyBAQAogCQkJCWxhc3RibG9jayA9IG5leHRfZTsKIAkJCQluZXh0X3MgPSBuZXh0X2UgPSAwOwogCQkJfSBlbHNlCi0JCQkJZG9uZSA9IDE7CisJCQkJZG9uZSA9IHRydWU7CiAJCQlicmVhazsKIAkJfQogCQlicmVsc2UoYmgpOwpAQCAtMjMwMCw2ICsyMzAwLDcgQEAKIAkJdWRmX2Nsb3NlX2x2aWQoc2IpOwogCWJyZWxzZShzYmktPnNfbHZpZF9iaCk7CiAJdWRmX3NiX2ZyZWVfcGFydGl0aW9ucyhzYik7CisJbXV0ZXhfZGVzdHJveSgmc2JpLT5zX2FsbG9jX211dGV4KTsKIAlrZnJlZShzYi0+c19mc19pbmZvKTsKIAlzYi0+c19mc19pbmZvID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9rbWVtLmMgYi9mcy94ZnMva21lbS5jCmluZGV4IDUzZTk1YjIuLmE3YTNhNjMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9rbWVtLmMKKysrIGIvZnMveGZzL2ttZW0uYwpAQCAtOTEsMTYgKzkxLDYgQEAKIAlyZXR1cm4gcHRyOwogfQogCi12b2lkCi1rbWVtX2ZyZWUoY29uc3Qgdm9pZCAqcHRyKQotewotCWlmICghaXNfdm1hbGxvY19hZGRyKHB0cikpIHsKLQkJa2ZyZWUocHRyKTsKLQl9IGVsc2UgewotCQl2ZnJlZShwdHIpOwotCX0KLX0KLQogdm9pZCAqCiBrbWVtX3JlYWxsb2MoY29uc3Qgdm9pZCAqcHRyLCBzaXplX3QgbmV3c2l6ZSwgc2l6ZV90IG9sZHNpemUsCiAJICAgICB4ZnNfa21fZmxhZ3NfdCBmbGFncykKZGlmZiAtLWdpdCBhL2ZzL3hmcy9rbWVtLmggYi9mcy94ZnMva21lbS5oCmluZGV4IDY0ZGIwZTUuLmNjNmI3NjggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9rbWVtLmgKKysrIGIvZnMveGZzL2ttZW0uaApAQCAtNjMsNyArNjMsMTAgQEAKIGV4dGVybiB2b2lkICprbWVtX2FsbG9jKHNpemVfdCwgeGZzX2ttX2ZsYWdzX3QpOwogZXh0ZXJuIHZvaWQgKmttZW1femFsbG9jX2xhcmdlKHNpemVfdCBzaXplLCB4ZnNfa21fZmxhZ3NfdCk7CiBleHRlcm4gdm9pZCAqa21lbV9yZWFsbG9jKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIHhmc19rbV9mbGFnc190KTsKLWV4dGVybiB2b2lkICBrbWVtX2ZyZWUoY29uc3Qgdm9pZCAqKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCAga21lbV9mcmVlKGNvbnN0IHZvaWQgKnB0cikKK3sKKwlrdmZyZWUocHRyKTsKK30KIAogCiBleHRlcm4gdm9pZCAqa21lbV96YWxsb2NfZ3JlZWR5KHNpemVfdCAqLCBzaXplX3QsIHNpemVfdCk7CmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19hdHRyX2xlYWYuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2F0dHJfbGVhZi5jCmluZGV4IDVkMzhlOGIuLjE1MTA1ZGIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2F0dHJfbGVhZi5jCisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2F0dHJfbGVhZi5jCkBAIC00MDMsNyArNDAzLDcgQEAKIAkJaWYgKCF4ZnNfc2JfdmVyc2lvbl9oYXNhdHRyMigmbXAtPm1fc2IpKSB7CiAJCQl4ZnNfc2JfdmVyc2lvbl9hZGRhdHRyMigmbXAtPm1fc2IpOwogCQkJc3Bpbl91bmxvY2soJm1wLT5tX3NiX2xvY2spOwotCQkJeGZzX21vZF9zYih0cCwgWEZTX1NCX1ZFUlNJT05OVU0gfCBYRlNfU0JfRkVBVFVSRVMyKTsKKwkJCXhmc19sb2dfc2IodHApOwogCQl9IGVsc2UKIAkJCXNwaW5fdW5sb2NrKCZtcC0+bV9zYl9sb2NrKTsKIAl9CmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmMKaW5kZXggYjVlYjQ3NC4uNjFlYzAxNSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5jCisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuYwpAQCAtOTczLDcgKzk3MywxMSBAQAogCSpmaXJzdGJsb2NrID0gYXJncy5mc2JubzsKIAlicCA9IHhmc19idHJlZV9nZXRfYnVmbChhcmdzLm1wLCB0cCwgYXJncy5mc2JubywgMCk7CiAKLQkvKiBpbml0aWFsaXNlIHRoZSBibG9jayBhbmQgY29weSB0aGUgZGF0YSAqLworCS8qCisJICogSW5pdGlhbGlzZSB0aGUgYmxvY2sgYW5kIGNvcHkgdGhlIGRhdGEKKwkgKgorCSAqIE5vdGU6IGluaXRfZm4gbXVzdCBzZXQgdGhlIGJ1ZmZlciBsb2cgaXRlbSB0eXBlIGNvcnJlY3RseSEKKwkgKi8KIAlpbml0X2ZuKHRwLCBicCwgaXAsIGlmcCk7CiAKIAkvKiBhY2NvdW50IGZvciB0aGUgY2hhbmdlIGluIGZvcmsgc2l6ZSBhbmQgbG9nIGV2ZXJ5dGhpbmcgKi8KQEAgLTEyMjEsMjIgKzEyMjUsMjAgQEAKIAkJZ290byBibWFwX2NhbmNlbDsKIAlpZiAoIXhmc19zYl92ZXJzaW9uX2hhc2F0dHIoJm1wLT5tX3NiKSB8fAogCSAgICgheGZzX3NiX3ZlcnNpb25faGFzYXR0cjIoJm1wLT5tX3NiKSAmJiB2ZXJzaW9uID09IDIpKSB7Ci0JCV9faW50NjRfdCBzYmZpZWxkcyA9IDA7CisJCWJvb2wgbG9nX3NiID0gZmFsc2U7CiAKIAkJc3Bpbl9sb2NrKCZtcC0+bV9zYl9sb2NrKTsKIAkJaWYgKCF4ZnNfc2JfdmVyc2lvbl9oYXNhdHRyKCZtcC0+bV9zYikpIHsKIAkJCXhmc19zYl92ZXJzaW9uX2FkZGF0dHIoJm1wLT5tX3NiKTsKLQkJCXNiZmllbGRzIHw9IFhGU19TQl9WRVJTSU9OTlVNOworCQkJbG9nX3NiID0gdHJ1ZTsKIAkJfQogCQlpZiAoIXhmc19zYl92ZXJzaW9uX2hhc2F0dHIyKCZtcC0+bV9zYikgJiYgdmVyc2lvbiA9PSAyKSB7CiAJCQl4ZnNfc2JfdmVyc2lvbl9hZGRhdHRyMigmbXAtPm1fc2IpOwotCQkJc2JmaWVsZHMgfD0gKFhGU19TQl9WRVJTSU9OTlVNIHwgWEZTX1NCX0ZFQVRVUkVTMik7CisJCQlsb2dfc2IgPSB0cnVlOwogCQl9Ci0JCWlmIChzYmZpZWxkcykgewotCQkJc3Bpbl91bmxvY2soJm1wLT5tX3NiX2xvY2spOwotCQkJeGZzX21vZF9zYih0cCwgc2JmaWVsZHMpOwotCQl9IGVsc2UKLQkJCXNwaW5fdW5sb2NrKCZtcC0+bV9zYl9sb2NrKTsKKwkJc3Bpbl91bmxvY2soJm1wLT5tX3NiX2xvY2spOworCQlpZiAobG9nX3NiKQorCQkJeGZzX2xvZ19zYih0cCk7CiAJfQogCiAJZXJyb3IgPSB4ZnNfYm1hcF9maW5pc2goJnRwLCAmZmxpc3QsICZjb21taXR0ZWQpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5oIGIvZnMveGZzL2xpYnhmcy94ZnNfYm1hcC5oCmluZGV4IDQ0ZGI2ZGIuLmI5ZDhhNDkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX2JtYXAuaAorKysgYi9mcy94ZnMvbGlieGZzL3hmc19ibWFwLmgKQEAgLTI4LDYgKzI4LDM3IEBACiBleHRlcm4ga21lbV96b25lX3QJKnhmc19ibWFwX2ZyZWVfaXRlbV96b25lOwogCiAvKgorICogQXJndW1lbnQgc3RydWN0dXJlIGZvciB4ZnNfYm1hcF9hbGxvYy4KKyAqLworc3RydWN0IHhmc19ibWFsbG9jYSB7CisJeGZzX2ZzYmxvY2tfdAkJKmZpcnN0YmxvY2s7IC8qIGkvbyBmaXJzdCBibG9jayBhbGxvY2F0ZWQgKi8KKwlzdHJ1Y3QgeGZzX2JtYXBfZnJlZQkqZmxpc3Q7CS8qIGJtYXAgZnJlZWxpc3QgKi8KKwlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsJLyogdHJhbnNhY3Rpb24gcG9pbnRlciAqLworCXN0cnVjdCB4ZnNfaW5vZGUJKmlwOwkvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLworCXN0cnVjdCB4ZnNfYm1idF9pcmVjCXByZXY7CS8qIGV4dGVudCBiZWZvcmUgdGhlIG5ldyBvbmUgKi8KKwlzdHJ1Y3QgeGZzX2JtYnRfaXJlYwlnb3Q7CS8qIGV4dGVudCBhZnRlciwgb3IgZGVsYXllZCAqLworCisJeGZzX2ZpbGVvZmZfdAkJb2Zmc2V0OwkvKiBvZmZzZXQgaW4gZmlsZSBmaWxsaW5nIGluICovCisJeGZzX2V4dGxlbl90CQlsZW5ndGg7CS8qIGkvbyBsZW5ndGggYXNrZWQvYWxsb2NhdGVkICovCisJeGZzX2ZzYmxvY2tfdAkJYmxrbm87CS8qIHN0YXJ0aW5nIGJsb2NrIG9mIG5ldyBleHRlbnQgKi8KKworCXN0cnVjdCB4ZnNfYnRyZWVfY3VyCSpjdXI7CS8qIGJ0cmVlIGN1cnNvciAqLworCXhmc19leHRudW1fdAkJaWR4OwkvKiBjdXJyZW50IGV4dGVudCBpbmRleCAqLworCWludAkJCW5hbGxvY3M7LyogbnVtYmVyIG9mIGV4dGVudHMgYWxsb2MnZCAqLworCWludAkJCWxvZ2ZsYWdzOy8qIGZsYWdzIGZvciB0cmFuc2FjdGlvbiBsb2dnaW5nICovCisKKwl4ZnNfZXh0bGVuX3QJCXRvdGFsOwkvKiB0b3RhbCBibG9ja3MgbmVlZGVkIGZvciB4YWN0aW9uICovCisJeGZzX2V4dGxlbl90CQltaW5sZW47CS8qIG1pbmltdW0gYWxsb2NhdGlvbiBzaXplIChibG9ja3MpICovCisJeGZzX2V4dGxlbl90CQltaW5sZWZ0OyAvKiBhbW91bnQgbXVzdCBiZSBsZWZ0IGFmdGVyIGFsbG9jICovCisJYm9vbAkJCWVvZjsJLyogc2V0IGlmIGFsbG9jYXRpbmcgcGFzdCBsYXN0IGV4dGVudCAqLworCWJvb2wJCQl3YXNkZWw7CS8qIHJlcGxhY2luZyBhIGRlbGF5ZWQgYWxsb2NhdGlvbiAqLworCWJvb2wJCQl1c2VyZGF0YTsvKiBzZXQgaWYgaXMgdXNlciBkYXRhICovCisJYm9vbAkJCWFlb2Y7CS8qIGFsbG9jYXRlZCBzcGFjZSBhdCBlb2YgKi8KKwlib29sCQkJY29udjsJLyogb3ZlcndyaXRpbmcgdW53cml0dGVuIGV4dGVudHMgKi8KKwlpbnQJCQlmbGFnczsKK307CisKKy8qCiAgKiBMaXN0IG9mIGV4dGVudHMgdG8gYmUgZnJlZSAibGF0ZXIiLgogICogVGhlIGxpc3QgaXMga2VwdCBzb3J0ZWQgb24geGJmX3N0YXJ0YmxvY2suCiAgKi8KQEAgLTE0OSw2ICsxODAsOCBAQAogdm9pZAl4ZnNfYm1hcF9hZGRfZnJlZSh4ZnNfZnNibG9ja190IGJubywgeGZzX2ZpbGJsa3NfdCBsZW4sCiAJCXN0cnVjdCB4ZnNfYm1hcF9mcmVlICpmbGlzdCwgc3RydWN0IHhmc19tb3VudCAqbXApOwogdm9pZAl4ZnNfYm1hcF9jYW5jZWwoc3RydWN0IHhmc19ibWFwX2ZyZWUgKmZsaXN0KTsKK2ludAl4ZnNfYm1hcF9maW5pc2goc3RydWN0IHhmc190cmFucyAqKnRwLCBzdHJ1Y3QgeGZzX2JtYXBfZnJlZSAqZmxpc3QsCisJCQlpbnQgKmNvbW1pdHRlZCk7CiB2b2lkCXhmc19ibWFwX2NvbXB1dGVfbWF4bGV2ZWxzKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBpbnQgd2hpY2hmb3JrKTsKIGludAl4ZnNfYm1hcF9maXJzdF91bnVzZWQoc3RydWN0IHhmc190cmFucyAqdHAsIHN0cnVjdCB4ZnNfaW5vZGUgKmlwLAogCQl4ZnNfZXh0bGVuX3QgbGVuLCB4ZnNfZmlsZW9mZl90ICp1bnVzZWQsIGludCB3aGljaGZvcmspOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfZm9ybWF0LmggYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaAppbmRleCBmYmQ2ZGEyLi44ZWI3MTg5IDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaAorKysgYi9mcy94ZnMvbGlieGZzL3hmc19mb3JtYXQuaApAQCAtMTUxLDEwICsxNTEsMTMgQEAKIAlfX3VpbnQzMl90CXNiX2ZlYXR1cmVzMjsJLyogYWRkaXRpb25hbCBmZWF0dXJlIGJpdHMgKi8KIAogCS8qCi0JICogYmFkIGZlYXR1cmVzMiBmaWVsZCBhcyBhIHJlc3VsdCBvZiBmYWlsaW5nIHRvIHBhZCB0aGUgc2IKLQkgKiBzdHJ1Y3R1cmUgdG8gNjQgYml0cy4gU29tZSBtYWNoaW5lcyB3aWxsIGJlIHVzaW5nIHRoaXMgZmllbGQKLQkgKiBmb3IgZmVhdHVyZXMyIGJpdHMuIEVhc2llc3QganVzdCB0byBtYXJrIGl0IGJhZCBhbmQgbm90IHVzZQotCSAqIGl0IGZvciBhbnl0aGluZyBlbHNlLgorCSAqIGJhZCBmZWF0dXJlczIgZmllbGQgYXMgYSByZXN1bHQgb2YgZmFpbGluZyB0byBwYWQgdGhlIHNiIHN0cnVjdHVyZSB0bworCSAqIDY0IGJpdHMuIFNvbWUgbWFjaGluZXMgd2lsbCBiZSB1c2luZyB0aGlzIGZpZWxkIGZvciBmZWF0dXJlczIgYml0cy4KKwkgKiBFYXNpZXN0IGp1c3QgdG8gbWFyayBpdCBiYWQgYW5kIG5vdCB1c2UgaXQgZm9yIGFueXRoaW5nIGVsc2UuCisJICoKKwkgKiBUaGlzIGlzIG5vdCBrZXB0IHVwIHRvIGRhdGUgaW4gbWVtb3J5OyBpdCBpcyBhbHdheXMgb3ZlcndyaXR0ZW4gYnkKKwkgKiB0aGUgdmFsdWUgaW4gc2JfZmVhdHVyZXMyIHdoZW4gZm9ybWF0dGluZyB0aGUgaW5jb3JlIHN1cGVyYmxvY2sgdG8KKwkgKiB0aGUgZGlzayBidWZmZXIuCiAJICovCiAJX191aW50MzJfdAlzYl9iYWRfZmVhdHVyZXMyOwogCkBAIC0zMDQsOCArMzA3LDggQEAKICNkZWZpbmUgWEZTX1NCX0lDT1VOVAkJWEZTX1NCX01WQUwoSUNPVU5UKQogI2RlZmluZSBYRlNfU0JfSUZSRUUJCVhGU19TQl9NVkFMKElGUkVFKQogI2RlZmluZSBYRlNfU0JfRkRCTE9DS1MJCVhGU19TQl9NVkFMKEZEQkxPQ0tTKQotI2RlZmluZSBYRlNfU0JfRkVBVFVSRVMyCVhGU19TQl9NVkFMKEZFQVRVUkVTMikKLSNkZWZpbmUgWEZTX1NCX0JBRF9GRUFUVVJFUzIJWEZTX1NCX01WQUwoQkFEX0ZFQVRVUkVTMikKKyNkZWZpbmUgWEZTX1NCX0ZFQVRVUkVTMgkoWEZTX1NCX01WQUwoRkVBVFVSRVMyKSB8IFwKKwkJCQkgWEZTX1NCX01WQUwoQkFEX0ZFQVRVUkVTMikpCiAjZGVmaW5lIFhGU19TQl9GRUFUVVJFU19DT01QQVQJWEZTX1NCX01WQUwoRkVBVFVSRVNfQ09NUEFUKQogI2RlZmluZSBYRlNfU0JfRkVBVFVSRVNfUk9fQ09NUEFUIFhGU19TQl9NVkFMKEZFQVRVUkVTX1JPX0NPTVBBVCkKICNkZWZpbmUgWEZTX1NCX0ZFQVRVUkVTX0lOQ09NUEFUIFhGU19TQl9NVkFMKEZFQVRVUkVTX0lOQ09NUEFUKQpAQCAtMzE5LDkgKzMyMiw5IEBACiAJIFhGU19TQl9WRVJTSU9OTlVNIHwgWEZTX1NCX1VRVU9USU5PIHwgWEZTX1NCX0dRVU9USU5PIHwgXAogCSBYRlNfU0JfUUZMQUdTIHwgWEZTX1NCX1NIQVJFRF9WTiB8IFhGU19TQl9VTklUIHwgWEZTX1NCX1dJRFRIIHwgXAogCSBYRlNfU0JfSUNPVU5UIHwgWEZTX1NCX0lGUkVFIHwgWEZTX1NCX0ZEQkxPQ0tTIHwgWEZTX1NCX0ZFQVRVUkVTMiB8IFwKLQkgWEZTX1NCX0JBRF9GRUFUVVJFUzIgfCBYRlNfU0JfRkVBVFVSRVNfQ09NUEFUIHwgXAotCSBYRlNfU0JfRkVBVFVSRVNfUk9fQ09NUEFUIHwgWEZTX1NCX0ZFQVRVUkVTX0lOQ09NUEFUIHwgXAotCSBYRlNfU0JfRkVBVFVSRVNfTE9HX0lOQ09NUEFUIHwgWEZTX1NCX1BRVU9USU5PKQorCSBYRlNfU0JfRkVBVFVSRVNfQ09NUEFUIHwgWEZTX1NCX0ZFQVRVUkVTX1JPX0NPTVBBVCB8IFwKKwkgWEZTX1NCX0ZFQVRVUkVTX0lOQ09NUEFUIHwgWEZTX1NCX0ZFQVRVUkVTX0xPR19JTkNPTVBBVCB8IFwKKwkgWEZTX1NCX1BRVU9USU5PKQogCiAKIC8qCkBAIC00NTMsMTMgKzQ1NiwxMSBAQAogewogCXNicC0+c2JfdmVyc2lvbm51bSB8PSBYRlNfU0JfVkVSU0lPTl9NT1JFQklUU0JJVDsKIAlzYnAtPnNiX2ZlYXR1cmVzMiB8PSBYRlNfU0JfVkVSU0lPTjJfQVRUUjJCSVQ7Ci0Jc2JwLT5zYl9iYWRfZmVhdHVyZXMyIHw9IFhGU19TQl9WRVJTSU9OMl9BVFRSMkJJVDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHhmc19zYl92ZXJzaW9uX3JlbW92ZWF0dHIyKHN0cnVjdCB4ZnNfc2IgKnNicCkKIHsKIAlzYnAtPnNiX2ZlYXR1cmVzMiAmPSB+WEZTX1NCX1ZFUlNJT04yX0FUVFIyQklUOwotCXNicC0+c2JfYmFkX2ZlYXR1cmVzMiAmPSB+WEZTX1NCX1ZFUlNJT04yX0FUVFIyQklUOwogCWlmICghc2JwLT5zYl9mZWF0dXJlczIpCiAJCXNicC0+c2JfdmVyc2lvbm51bSAmPSB+WEZTX1NCX1ZFUlNJT05fTU9SRUJJVFNCSVQ7CiB9CkBAIC00NzUsNyArNDc2LDYgQEAKIHsKIAlzYnAtPnNiX3ZlcnNpb25udW0gfD0gWEZTX1NCX1ZFUlNJT05fTU9SRUJJVFNCSVQ7CiAJc2JwLT5zYl9mZWF0dXJlczIgfD0gWEZTX1NCX1ZFUlNJT04yX1BST0pJRDMyQklUOwotCXNicC0+c2JfYmFkX2ZlYXR1cmVzMiB8PSBYRlNfU0JfVkVSU0lPTjJfUFJPSklEMzJCSVQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzLmggYi9mcy94ZnMvbGlieGZzL3hmc19mcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMveGZzX2ZzLmgKcmVuYW1lIHRvIGZzL3hmcy9saWJ4ZnMveGZzX2ZzLmgKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmMgYi9mcy94ZnMvbGlieGZzL3hmc19zYi5jCmluZGV4IDc1MjkxNWYuLmIwYTVmZTkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmMKKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfc2IuYwpAQCAtNDAsNjkgKzQwLDYgQEAKICAqIFBoeXNpY2FsIHN1cGVyYmxvY2sgYnVmZmVyIG1hbmlwdWxhdGlvbnMuIFNoYXJlZCB3aXRoIGxpYnhmcyBpbiB1c2Vyc3BhY2UuCiAgKi8KIAotc3RhdGljIGNvbnN0IHN0cnVjdCB7Ci0Jc2hvcnQgb2Zmc2V0OwotCXNob3J0IHR5cGU7CS8qIDAgPSBpbnRlZ2VyCi0JCQkgKiAxID0gYmluYXJ5IC8gc3RyaW5nIChubyB0cmFuc2xhdGlvbikKLQkJCSAqLwotfSB4ZnNfc2JfaW5mb1tdID0gewotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX21hZ2ljbnVtKSwJMCB9LAotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX2Jsb2Nrc2l6ZSksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9kYmxvY2tzKSwJMCB9LAotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX3JibG9ja3MpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfcmV4dGVudHMpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfdXVpZCksCQkxIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfbG9nc3RhcnQpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2Jfcm9vdGlubyksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9yYm1pbm8pLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfcnN1bWlubyksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9yZXh0c2l6ZSksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9hZ2Jsb2NrcyksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9hZ2NvdW50KSwJMCB9LAotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX3JibWJsb2NrcyksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9sb2dibG9ja3MpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfdmVyc2lvbm51bSksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9zZWN0c2l6ZSksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9pbm9kZXNpemUpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfaW5vcGJsb2NrKSwJMCB9LAotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX2ZuYW1lWzBdKSwJMSB9LAotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX2Jsb2NrbG9nKSwJMCB9LAotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX3NlY3Rsb2cpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfaW5vZGVsb2cpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfaW5vcGJsb2cpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfYWdibGtsb2cpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfcmV4dHNsb2cpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfaW5wcm9ncmVzcyksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9pbWF4X3BjdCksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9pY291bnQpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfaWZyZWUpLAkJMCB9LAotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX2ZkYmxvY2tzKSwJMCB9LAotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX2ZyZXh0ZW50cyksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl91cXVvdGlubyksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9ncXVvdGlubyksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9xZmxhZ3MpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfZmxhZ3MpLAkJMCB9LAotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX3NoYXJlZF92biksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9pbm9hbGlnbm10KSwJMCB9LAotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX3VuaXQpLAkJMCB9LAotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX3dpZHRoKSwJCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9kaXJibGtsb2cpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfbG9nc2VjdGxvZyksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9sb2dzZWN0c2l6ZSksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9sb2dzdW5pdCksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9mZWF0dXJlczIpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfYmFkX2ZlYXR1cmVzMiksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9mZWF0dXJlc19jb21wYXQpLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfZmVhdHVyZXNfcm9fY29tcGF0KSwJMCB9LAotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX2ZlYXR1cmVzX2luY29tcGF0KSwJMCB9LAotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX2ZlYXR1cmVzX2xvZ19pbmNvbXBhdCksCTAgfSwKLQl7IG9mZnNldG9mKHhmc19zYl90LCBzYl9jcmMpLAkJMCB9LAotCXsgb2Zmc2V0b2YoeGZzX3NiX3QsIHNiX3BhZCksCQkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfcHF1b3Rpbm8pLAkwIH0sCi0JeyBvZmZzZXRvZih4ZnNfc2JfdCwgc2JfbHNuKSwJCTAgfSwKLQl7IHNpemVvZih4ZnNfc2JfdCksCQkJMCB9Ci19OwotCiAvKgogICogUmVmZXJlbmNlIGNvdW50aW5nIGFjY2VzcyB3cmFwcGVycyB0byB0aGUgcGVyYWcgc3RydWN0dXJlcy4KICAqIEJlY2F1c2Ugd2UgbmV2ZXIgZnJlZSBwZXItYWcgc3RydWN0dXJlcywgdGhlIG9ubHkgdGhpbmcgd2UKQEAgLTQ2MSw1OCArMzk4LDQ5IEBACiAJX194ZnNfc2JfZnJvbV9kaXNrKHRvLCBmcm9tLCB0cnVlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgdm9pZAogeGZzX3NiX3F1b3RhX3RvX2Rpc2soCi0JeGZzX2RzYl90CSp0bywKLQl4ZnNfc2JfdAkqZnJvbSwKLQlfX2ludDY0X3QJKmZpZWxkcykKKwlzdHJ1Y3QgeGZzX2RzYgkqdG8sCisJc3RydWN0IHhmc19zYgkqZnJvbSkKIHsKIAlfX3VpbnQxNl90CXFmbGFncyA9IGZyb20tPnNiX3FmbGFnczsKIAotCS8qCi0JICogV2UgbmVlZCB0byBkbyB0aGVzZSBtYW5pcGlsYXRpb25zIG9ubHkgaWYgd2UgYXJlIHdvcmtpbmcKLQkgKiB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2Ygb24tZGlzayBzdXBlcmJsb2NrLgotCSAqLwotCWlmICh4ZnNfc2JfdmVyc2lvbl9oYXNfcHF1b3Rpbm8oZnJvbSkpCisJdG8tPnNiX3VxdW90aW5vID0gY3B1X3RvX2JlNjQoZnJvbS0+c2JfdXF1b3Rpbm8pOworCWlmICh4ZnNfc2JfdmVyc2lvbl9oYXNfcHF1b3Rpbm8oZnJvbSkpIHsKKwkJdG8tPnNiX3FmbGFncyA9IGNwdV90b19iZTE2KGZyb20tPnNiX3FmbGFncyk7CisJCXRvLT5zYl9ncXVvdGlubyA9IGNwdV90b19iZTY0KGZyb20tPnNiX2dxdW90aW5vKTsKKwkJdG8tPnNiX3BxdW90aW5vID0gY3B1X3RvX2JlNjQoZnJvbS0+c2JfcHF1b3Rpbm8pOwogCQlyZXR1cm47Ci0KLQlpZiAoKmZpZWxkcyAmIFhGU19TQl9RRkxBR1MpIHsKLQkJLyoKLQkJICogVGhlIGluLWNvcmUgdmVyc2lvbiBvZiBzYl9xZmxhZ3MgZG8gbm90IGhhdmUKLQkJICogWEZTX09RVU9UQV8qIGZsYWdzLCB3aGVyZWFzIHRoZSBvbi1kaXNrIHZlcnNpb24KLQkJICogZG9lcy4gIFNvLCBjb252ZXJ0IGluY29yZSBYRlNfe1BHfVFVT1RBXyogZmxhZ3MKLQkJICogdG8gb24tZGlzayBYRlNfT1FVT1RBXyogZmxhZ3MuCi0JCSAqLwotCQlxZmxhZ3MgJj0gfihYRlNfUFFVT1RBX0VORkQgfCBYRlNfUFFVT1RBX0NIS0QgfAotCQkJCVhGU19HUVVPVEFfRU5GRCB8IFhGU19HUVVPVEFfQ0hLRCk7Ci0KLQkJaWYgKGZyb20tPnNiX3FmbGFncyAmCi0JCQkJKFhGU19QUVVPVEFfRU5GRCB8IFhGU19HUVVPVEFfRU5GRCkpCi0JCQlxZmxhZ3MgfD0gWEZTX09RVU9UQV9FTkZEOwotCQlpZiAoZnJvbS0+c2JfcWZsYWdzICYKLQkJCQkoWEZTX1BRVU9UQV9DSEtEIHwgWEZTX0dRVU9UQV9DSEtEKSkKLQkJCXFmbGFncyB8PSBYRlNfT1FVT1RBX0NIS0Q7Ci0JCXRvLT5zYl9xZmxhZ3MgPSBjcHVfdG9fYmUxNihxZmxhZ3MpOwotCQkqZmllbGRzICY9IH5YRlNfU0JfUUZMQUdTOwogCX0KIAogCS8qCi0JICogR1FVT1RJTk8gYW5kIFBRVU9USU5PIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIGluIHZlcnNpb25zIG9mCi0JICogc3VwZXJibG9jayB0aGF0IGRvIG5vdCBoYXZlIHBxdW90aW5vLiBmcm9tLT5zYl9mbGFncyB0ZWxscyB1cyB3aGljaAotCSAqIHF1b3RhIGlzIGFjdGl2ZSBhbmQgc2hvdWxkIGJlIGNvcGllZCB0byBkaXNrLiBJZiBuZWl0aGVyIGFyZSBhY3RpdmUsCi0JICogbWFrZSBzdXJlIHdlIHdyaXRlIE5VTExGU0lOTyB0byB0aGUgc2JfZ3F1b3Rpbm8gZmllbGQgYXMgYSBxdW90YQotCSAqIGlub2RlIHZhbHVlIG9mICIwIiBpcyBpbnZhbGlkIHdoZW4gdGhlIFhGU19TQl9WRVJTSU9OX1FVT1RBIGZlYXR1cmUKLQkgKiBiaXQgaXMgc2V0LgotCSAqCi0JICogTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gaGFuZGxlIHRoZSBzYl91cXVvdGlubyBvciBzYl9wcXVvdGlubyBoZXJlCi0JICogYXMgdGhleSBkbyBub3QgcmVxdWlyZSBhbnkgdHJhbnNsYXRpb24uIEhlbmNlIHRoZSBtYWluIHNiIGZpZWxkIGxvb3AKLQkgKiB3aWxsIHdyaXRlIHRoZW0gYXBwcm9wcmlhdGVseSBmcm9tIHRoZSBpbi1jb3JlIHN1cGVyYmxvY2suCisJICogVGhlIGluLWNvcmUgdmVyc2lvbiBvZiBzYl9xZmxhZ3MgZG8gbm90IGhhdmUgWEZTX09RVU9UQV8qCisJICogZmxhZ3MsIHdoZXJlYXMgdGhlIG9uLWRpc2sgdmVyc2lvbiBkb2VzLiAgU28sIGNvbnZlcnQgaW5jb3JlCisJICogWEZTX3tQR31RVU9UQV8qIGZsYWdzIHRvIG9uLWRpc2sgWEZTX09RVU9UQV8qIGZsYWdzLgogCSAqLwotCWlmICgoKmZpZWxkcyAmIFhGU19TQl9HUVVPVElOTykgJiYKLQkJCQkoZnJvbS0+c2JfcWZsYWdzICYgWEZTX0dRVU9UQV9BQ0NUKSkKKwlxZmxhZ3MgJj0gfihYRlNfUFFVT1RBX0VORkQgfCBYRlNfUFFVT1RBX0NIS0QgfAorCQkJWEZTX0dRVU9UQV9FTkZEIHwgWEZTX0dRVU9UQV9DSEtEKTsKKworCWlmIChmcm9tLT5zYl9xZmxhZ3MgJgorCQkJKFhGU19QUVVPVEFfRU5GRCB8IFhGU19HUVVPVEFfRU5GRCkpCisJCXFmbGFncyB8PSBYRlNfT1FVT1RBX0VORkQ7CisJaWYgKGZyb20tPnNiX3FmbGFncyAmCisJCQkoWEZTX1BRVU9UQV9DSEtEIHwgWEZTX0dRVU9UQV9DSEtEKSkKKwkJcWZsYWdzIHw9IFhGU19PUVVPVEFfQ0hLRDsKKwl0by0+c2JfcWZsYWdzID0gY3B1X3RvX2JlMTYocWZsYWdzKTsKKworCS8qCisJICogR1FVT1RJTk8gYW5kIFBRVU9USU5PIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyIGluIHZlcnNpb25zCisJICogb2Ygc3VwZXJibG9jayB0aGF0IGRvIG5vdCBoYXZlIHBxdW90aW5vLiBmcm9tLT5zYl9mbGFncworCSAqIHRlbGxzIHVzIHdoaWNoIHF1b3RhIGlzIGFjdGl2ZSBhbmQgc2hvdWxkIGJlIGNvcGllZCB0bworCSAqIGRpc2suIElmIG5laXRoZXIgYXJlIGFjdGl2ZSwgd2Ugc2hvdWxkIE5VTEwgdGhlIGlub2RlLgorCSAqCisJICogSW4gYWxsIGNhc2VzLCB0aGUgc2VwYXJhdGUgcHF1b3Rpbm8gbXVzdCByZW1haW4gMCBiZWNhdXNlIGl0CisJICogaXQgYmV5b25kIHRoZSAiZW5kIiBvZiB0aGUgdmFsaWQgbm9uLXBxdW90aW5vIHN1cGVyYmxvY2suCisJICovCisJaWYgKGZyb20tPnNiX3FmbGFncyAmIFhGU19HUVVPVEFfQUNDVCkKIAkJdG8tPnNiX2dxdW90aW5vID0gY3B1X3RvX2JlNjQoZnJvbS0+c2JfZ3F1b3Rpbm8pOwotCWVsc2UgaWYgKCgqZmllbGRzICYgWEZTX1NCX1BRVU9USU5PKSAmJgotCQkJCShmcm9tLT5zYl9xZmxhZ3MgJiBYRlNfUFFVT1RBX0FDQ1QpKQorCWVsc2UgaWYgKGZyb20tPnNiX3FmbGFncyAmIFhGU19QUVVPVEFfQUNDVCkKIAkJdG8tPnNiX2dxdW90aW5vID0gY3B1X3RvX2JlNjQoZnJvbS0+c2JfcHF1b3Rpbm8pOwogCWVsc2UgewogCQkvKgpAQCAtNTI2LDYzICs0NTQsNzggQEAKIAkJCXRvLT5zYl9ncXVvdGlubyA9IGNwdV90b19iZTY0KE5VTExGU0lOTyk7CiAJfQogCi0JKmZpZWxkcyAmPSB+KFhGU19TQl9QUVVPVElOTyB8IFhGU19TQl9HUVVPVElOTyk7CisJdG8tPnNiX3BxdW90aW5vID0gMDsKIH0KIAotLyoKLSAqIENvcHkgaW4gY29yZSBzdXBlcmJsb2NrIHRvIG9uZGlzayBvbmUuCi0gKgotICogVGhlIGZpZWxkcyBhcmd1bWVudCBpcyBtYXNrIG9mIHN1cGVyYmxvY2sgZmllbGRzIHRvIGNvcHkuCi0gKi8KIHZvaWQKIHhmc19zYl90b19kaXNrKAotCXhmc19kc2JfdAkqdG8sCi0JeGZzX3NiX3QJKmZyb20sCi0JX19pbnQ2NF90CWZpZWxkcykKKwlzdHJ1Y3QgeGZzX2RzYgkqdG8sCisJc3RydWN0IHhmc19zYgkqZnJvbSkKIHsKLQl4ZnNfY2FkZHJfdAl0b19wdHIgPSAoeGZzX2NhZGRyX3QpdG87Ci0JeGZzX2NhZGRyX3QJZnJvbV9wdHIgPSAoeGZzX2NhZGRyX3QpZnJvbTsKLQl4ZnNfc2JfZmllbGRfdAlmOwotCWludAkJZmlyc3Q7Ci0JaW50CQlzaXplOworCXhmc19zYl9xdW90YV90b19kaXNrKHRvLCBmcm9tKTsKIAotCUFTU0VSVChmaWVsZHMpOwotCWlmICghZmllbGRzKQotCQlyZXR1cm47CisJdG8tPnNiX21hZ2ljbnVtID0gY3B1X3RvX2JlMzIoZnJvbS0+c2JfbWFnaWNudW0pOworCXRvLT5zYl9ibG9ja3NpemUgPSBjcHVfdG9fYmUzMihmcm9tLT5zYl9ibG9ja3NpemUpOworCXRvLT5zYl9kYmxvY2tzID0gY3B1X3RvX2JlNjQoZnJvbS0+c2JfZGJsb2Nrcyk7CisJdG8tPnNiX3JibG9ja3MgPSBjcHVfdG9fYmU2NChmcm9tLT5zYl9yYmxvY2tzKTsKKwl0by0+c2JfcmV4dGVudHMgPSBjcHVfdG9fYmU2NChmcm9tLT5zYl9yZXh0ZW50cyk7CisJbWVtY3B5KCZ0by0+c2JfdXVpZCwgJmZyb20tPnNiX3V1aWQsIHNpemVvZih0by0+c2JfdXVpZCkpOworCXRvLT5zYl9sb2dzdGFydCA9IGNwdV90b19iZTY0KGZyb20tPnNiX2xvZ3N0YXJ0KTsKKwl0by0+c2Jfcm9vdGlubyA9IGNwdV90b19iZTY0KGZyb20tPnNiX3Jvb3Rpbm8pOworCXRvLT5zYl9yYm1pbm8gPSBjcHVfdG9fYmU2NChmcm9tLT5zYl9yYm1pbm8pOworCXRvLT5zYl9yc3VtaW5vID0gY3B1X3RvX2JlNjQoZnJvbS0+c2JfcnN1bWlubyk7CisJdG8tPnNiX3JleHRzaXplID0gY3B1X3RvX2JlMzIoZnJvbS0+c2JfcmV4dHNpemUpOworCXRvLT5zYl9hZ2Jsb2NrcyA9IGNwdV90b19iZTMyKGZyb20tPnNiX2FnYmxvY2tzKTsKKwl0by0+c2JfYWdjb3VudCA9IGNwdV90b19iZTMyKGZyb20tPnNiX2FnY291bnQpOworCXRvLT5zYl9yYm1ibG9ja3MgPSBjcHVfdG9fYmUzMihmcm9tLT5zYl9yYm1ibG9ja3MpOworCXRvLT5zYl9sb2dibG9ja3MgPSBjcHVfdG9fYmUzMihmcm9tLT5zYl9sb2dibG9ja3MpOworCXRvLT5zYl92ZXJzaW9ubnVtID0gY3B1X3RvX2JlMTYoZnJvbS0+c2JfdmVyc2lvbm51bSk7CisJdG8tPnNiX3NlY3RzaXplID0gY3B1X3RvX2JlMTYoZnJvbS0+c2Jfc2VjdHNpemUpOworCXRvLT5zYl9pbm9kZXNpemUgPSBjcHVfdG9fYmUxNihmcm9tLT5zYl9pbm9kZXNpemUpOworCXRvLT5zYl9pbm9wYmxvY2sgPSBjcHVfdG9fYmUxNihmcm9tLT5zYl9pbm9wYmxvY2spOworCW1lbWNweSgmdG8tPnNiX2ZuYW1lLCAmZnJvbS0+c2JfZm5hbWUsIHNpemVvZih0by0+c2JfZm5hbWUpKTsKKwl0by0+c2JfYmxvY2tsb2cgPSBmcm9tLT5zYl9ibG9ja2xvZzsKKwl0by0+c2Jfc2VjdGxvZyA9IGZyb20tPnNiX3NlY3Rsb2c7CisJdG8tPnNiX2lub2RlbG9nID0gZnJvbS0+c2JfaW5vZGVsb2c7CisJdG8tPnNiX2lub3BibG9nID0gZnJvbS0+c2JfaW5vcGJsb2c7CisJdG8tPnNiX2FnYmxrbG9nID0gZnJvbS0+c2JfYWdibGtsb2c7CisJdG8tPnNiX3JleHRzbG9nID0gZnJvbS0+c2JfcmV4dHNsb2c7CisJdG8tPnNiX2lucHJvZ3Jlc3MgPSBmcm9tLT5zYl9pbnByb2dyZXNzOworCXRvLT5zYl9pbWF4X3BjdCA9IGZyb20tPnNiX2ltYXhfcGN0OworCXRvLT5zYl9pY291bnQgPSBjcHVfdG9fYmU2NChmcm9tLT5zYl9pY291bnQpOworCXRvLT5zYl9pZnJlZSA9IGNwdV90b19iZTY0KGZyb20tPnNiX2lmcmVlKTsKKwl0by0+c2JfZmRibG9ja3MgPSBjcHVfdG9fYmU2NChmcm9tLT5zYl9mZGJsb2Nrcyk7CisJdG8tPnNiX2ZyZXh0ZW50cyA9IGNwdV90b19iZTY0KGZyb20tPnNiX2ZyZXh0ZW50cyk7CiAKLQkvKiBXZSBzaG91bGQgbmV2ZXIgd3JpdGUgdGhlIGNyYyBoZXJlLCBpdCdzIHVwZGF0ZWQgaW4gdGhlIElPIHBhdGggKi8KLQlmaWVsZHMgJj0gflhGU19TQl9DUkM7CisJdG8tPnNiX2ZsYWdzID0gZnJvbS0+c2JfZmxhZ3M7CisJdG8tPnNiX3NoYXJlZF92biA9IGZyb20tPnNiX3NoYXJlZF92bjsKKwl0by0+c2JfaW5vYWxpZ25tdCA9IGNwdV90b19iZTMyKGZyb20tPnNiX2lub2FsaWdubXQpOworCXRvLT5zYl91bml0ID0gY3B1X3RvX2JlMzIoZnJvbS0+c2JfdW5pdCk7CisJdG8tPnNiX3dpZHRoID0gY3B1X3RvX2JlMzIoZnJvbS0+c2Jfd2lkdGgpOworCXRvLT5zYl9kaXJibGtsb2cgPSBmcm9tLT5zYl9kaXJibGtsb2c7CisJdG8tPnNiX2xvZ3NlY3Rsb2cgPSBmcm9tLT5zYl9sb2dzZWN0bG9nOworCXRvLT5zYl9sb2dzZWN0c2l6ZSA9IGNwdV90b19iZTE2KGZyb20tPnNiX2xvZ3NlY3RzaXplKTsKKwl0by0+c2JfbG9nc3VuaXQgPSBjcHVfdG9fYmUzMihmcm9tLT5zYl9sb2dzdW5pdCk7CiAKLQl4ZnNfc2JfcXVvdGFfdG9fZGlzayh0bywgZnJvbSwgJmZpZWxkcyk7Ci0Jd2hpbGUgKGZpZWxkcykgewotCQlmID0gKHhmc19zYl9maWVsZF90KXhmc19sb3diaXQ2NCgoX191aW50NjRfdClmaWVsZHMpOwotCQlmaXJzdCA9IHhmc19zYl9pbmZvW2ZdLm9mZnNldDsKLQkJc2l6ZSA9IHhmc19zYl9pbmZvW2YgKyAxXS5vZmZzZXQgLSBmaXJzdDsKKwkvKgorCSAqIFdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgYmFkX2ZlYXR1cmVzMiBhbHdheXMgbWF0Y2hlcyBmZWF0dXJlczIuCisJICogSGVuY2Ugd2UgZW5mb3JjZSB0aGF0IGhlcmUgcmF0aGVyIHRoYW4gaGF2aW5nIHRvIHJlbWVtYmVyIHRvIGRvIGl0CisJICogZXZlcnl3aGVyZSBlbHNlIHRoYXQgdXBkYXRlcyBmZWF0dXJlczIuCisJICovCisJZnJvbS0+c2JfYmFkX2ZlYXR1cmVzMiA9IGZyb20tPnNiX2ZlYXR1cmVzMjsKKwl0by0+c2JfZmVhdHVyZXMyID0gY3B1X3RvX2JlMzIoZnJvbS0+c2JfZmVhdHVyZXMyKTsKKwl0by0+c2JfYmFkX2ZlYXR1cmVzMiA9IGNwdV90b19iZTMyKGZyb20tPnNiX2JhZF9mZWF0dXJlczIpOwogCi0JCUFTU0VSVCh4ZnNfc2JfaW5mb1tmXS50eXBlID09IDAgfHwgeGZzX3NiX2luZm9bZl0udHlwZSA9PSAxKTsKLQotCQlpZiAoc2l6ZSA9PSAxIHx8IHhmc19zYl9pbmZvW2ZdLnR5cGUgPT0gMSkgewotCQkJbWVtY3B5KHRvX3B0ciArIGZpcnN0LCBmcm9tX3B0ciArIGZpcnN0LCBzaXplKTsKLQkJfSBlbHNlIHsKLQkJCXN3aXRjaCAoc2l6ZSkgewotCQkJY2FzZSAyOgotCQkJCSooX19iZTE2ICopKHRvX3B0ciArIGZpcnN0KSA9Ci0JCQkJICAgICAgY3B1X3RvX2JlMTYoKihfX3UxNiAqKShmcm9tX3B0ciArIGZpcnN0KSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDQ6Ci0JCQkJKihfX2JlMzIgKikodG9fcHRyICsgZmlyc3QpID0KLQkJCQkgICAgICBjcHVfdG9fYmUzMigqKF9fdTMyICopKGZyb21fcHRyICsgZmlyc3QpKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgODoKLQkJCQkqKF9fYmU2NCAqKSh0b19wdHIgKyBmaXJzdCkgPQotCQkJCSAgICAgIGNwdV90b19iZTY0KCooX191NjQgKikoZnJvbV9wdHIgKyBmaXJzdCkpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlBU1NFUlQoMCk7Ci0JCQl9Ci0JCX0KLQotCQlmaWVsZHMgJj0gfigxTEwgPDwgZik7CisJaWYgKHhmc19zYl92ZXJzaW9uX2hhc2NyYyhmcm9tKSkgeworCQl0by0+c2JfZmVhdHVyZXNfY29tcGF0ID0gY3B1X3RvX2JlMzIoZnJvbS0+c2JfZmVhdHVyZXNfY29tcGF0KTsKKwkJdG8tPnNiX2ZlYXR1cmVzX3JvX2NvbXBhdCA9CisJCQkJY3B1X3RvX2JlMzIoZnJvbS0+c2JfZmVhdHVyZXNfcm9fY29tcGF0KTsKKwkJdG8tPnNiX2ZlYXR1cmVzX2luY29tcGF0ID0KKwkJCQljcHVfdG9fYmUzMihmcm9tLT5zYl9mZWF0dXJlc19pbmNvbXBhdCk7CisJCXRvLT5zYl9mZWF0dXJlc19sb2dfaW5jb21wYXQgPQorCQkJCWNwdV90b19iZTMyKGZyb20tPnNiX2ZlYXR1cmVzX2xvZ19pbmNvbXBhdCk7CisJCXRvLT5zYl9wYWQgPSAwOworCQl0by0+c2JfbHNuID0gY3B1X3RvX2JlNjQoZnJvbS0+c2JfbHNuKTsKIAl9CiB9CiAKQEAgLTgxNiw0MiArNzU5LDUxIEBACiB9CiAKIC8qCi0gKiB4ZnNfbW9kX3NiKCkgY2FuIGJlIHVzZWQgdG8gY29weSBhcmJpdHJhcnkgY2hhbmdlcyB0byB0aGUKLSAqIGluLWNvcmUgc3VwZXJibG9jayBpbnRvIHRoZSBzdXBlcmJsb2NrIGJ1ZmZlciB0byBiZSBsb2dnZWQuCi0gKiBJdCBkb2VzIG5vdCBwcm92aWRlIHRoZSBoaWdoZXIgbGV2ZWwgb2YgbG9ja2luZyB0aGF0IGlzCi0gKiBuZWVkZWQgdG8gcHJvdGVjdCB0aGUgaW4tY29yZSBzdXBlcmJsb2NrIGZyb20gY29uY3VycmVudAotICogYWNjZXNzLgorICogeGZzX2xvZ19zYigpIGNhbiBiZSB1c2VkIHRvIGNvcHkgYXJiaXRyYXJ5IGNoYW5nZXMgdG8gdGhlIGluLWNvcmUgc3VwZXJibG9jaworICogaW50byB0aGUgc3VwZXJibG9jayBidWZmZXIgdG8gYmUgbG9nZ2VkLiAgSXQgZG9lcyBub3QgcHJvdmlkZSB0aGUgaGlnaGVyCisgKiBsZXZlbCBvZiBsb2NraW5nIHRoYXQgaXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGluLWNvcmUgc3VwZXJibG9jayBmcm9tCisgKiBjb25jdXJyZW50IGFjY2Vzcy4KICAqLwogdm9pZAoteGZzX21vZF9zYih4ZnNfdHJhbnNfdCAqdHAsIF9faW50NjRfdCBmaWVsZHMpCit4ZnNfbG9nX3NiKAorCXN0cnVjdCB4ZnNfdHJhbnMJKnRwKQogewotCXhmc19idWZfdAkqYnA7Ci0JaW50CQlmaXJzdDsKLQlpbnQJCWxhc3Q7Ci0JeGZzX21vdW50X3QJKm1wOwotCXhmc19zYl9maWVsZF90CWY7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSB0cC0+dF9tb3VudHA7CisJc3RydWN0IHhmc19idWYJCSpicCA9IHhmc190cmFuc19nZXRzYih0cCwgbXAsIDApOwogCi0JQVNTRVJUKGZpZWxkcyk7Ci0JaWYgKCFmaWVsZHMpCi0JCXJldHVybjsKLQltcCA9IHRwLT50X21vdW50cDsKLQlicCA9IHhmc190cmFuc19nZXRzYih0cCwgbXAsIDApOwotCWZpcnN0ID0gc2l6ZW9mKHhmc19zYl90KTsKLQlsYXN0ID0gMDsKLQotCS8qIHRyYW5zbGF0ZS9jb3B5ICovCi0KLQl4ZnNfc2JfdG9fZGlzayhYRlNfQlVGX1RPX1NCUChicCksICZtcC0+bV9zYiwgZmllbGRzKTsKLQotCS8qIGZpbmQgbW9kaWZpZWQgcmFuZ2UgKi8KLQlmID0gKHhmc19zYl9maWVsZF90KXhmc19oaWdoYml0NjQoKF9fdWludDY0X3QpZmllbGRzKTsKLQlBU1NFUlQoKDFMTCA8PCBmKSAmIFhGU19TQl9NT0RfQklUUyk7Ci0JbGFzdCA9IHhmc19zYl9pbmZvW2YgKyAxXS5vZmZzZXQgLSAxOwotCi0JZiA9ICh4ZnNfc2JfZmllbGRfdCl4ZnNfbG93Yml0NjQoKF9fdWludDY0X3QpZmllbGRzKTsKLQlBU1NFUlQoKDFMTCA8PCBmKSAmIFhGU19TQl9NT0RfQklUUyk7Ci0JZmlyc3QgPSB4ZnNfc2JfaW5mb1tmXS5vZmZzZXQ7Ci0KKwl4ZnNfc2JfdG9fZGlzayhYRlNfQlVGX1RPX1NCUChicCksICZtcC0+bV9zYik7CiAJeGZzX3RyYW5zX2J1Zl9zZXRfdHlwZSh0cCwgYnAsIFhGU19CTEZUX1NCX0JVRik7Ci0JeGZzX3RyYW5zX2xvZ19idWYodHAsIGJwLCBmaXJzdCwgbGFzdCk7CisJeGZzX3RyYW5zX2xvZ19idWYodHAsIGJwLCAwLCBzaXplb2Yoc3RydWN0IHhmc19kc2IpKTsKK30KKworLyoKKyAqIHhmc19zeW5jX3NiCisgKgorICogU3luYyB0aGUgc3VwZXJibG9jayB0byBkaXNrLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjaGVja2luZyB0aGUgZnJvemVuIHN0YXRlIG9mIHRoZQorICogZmlsZXN5c3RlbS4gVGhpcyBwcm9jZWR1cmUgdXNlcyB0aGUgbm9uLWJsb2NraW5nIHRyYW5zYWN0aW9uIGFsbG9jYXRvciBhbmQKKyAqIHRodXMgd2lsbCBhbGxvdyBtb2RpZmljYXRpb25zIHRvIGEgZnJvemVuIGZzLiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhpcworICogY29kZSBjYW4gYmUgY2FsbGVkIGR1cmluZyB0aGUgcHJvY2VzcyBvZiBmcmVlemluZyB3aGVyZSB1c2Ugb2YgdGhlIGhpZ2gtbGV2ZWwKKyAqIGFsbG9jYXRvciB3b3VsZCBkZWFkbG9jay4KKyAqLworaW50Cit4ZnNfc3luY19zYigKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCwKKwlib29sCQkJd2FpdCkKK3sKKwlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsKKwlpbnQJCQllcnJvcjsKKworCXRwID0gX3hmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX1NCX0NIQU5HRSwgS01fU0xFRVApOworCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsICZNX1JFUyhtcCktPnRyX3NiLCAwLCAwKTsKKwlpZiAoZXJyb3IpIHsKKwkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwl4ZnNfbG9nX3NiKHRwKTsKKwlpZiAod2FpdCkKKwkJeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKKwlyZXR1cm4geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19zYi5oIGIvZnMveGZzL2xpYnhmcy94ZnNfc2IuaAppbmRleCA4ZWIxYzU0Li5iMjViYjlhIDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19zYi5oCisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3NiLmgKQEAgLTI3LDExICsyNywxMiBAQAogZXh0ZXJuIHZvaWQJeGZzX3BlcmFnX3B1dChzdHJ1Y3QgeGZzX3BlcmFnICpwYWcpOwogZXh0ZXJuIGludAl4ZnNfaW5pdGlhbGl6ZV9wZXJhZ19kYXRhKHN0cnVjdCB4ZnNfbW91bnQgKiwgeGZzX2FnbnVtYmVyX3QpOwogCi1leHRlcm4gdm9pZAl4ZnNfc2JfY2FsY19jcmMoc3RydWN0IHhmc19idWYJKik7Ci1leHRlcm4gdm9pZAl4ZnNfbW9kX3NiKHN0cnVjdCB4ZnNfdHJhbnMgKiwgX19pbnQ2NF90KTsKLWV4dGVybiB2b2lkCXhmc19zYl9tb3VudF9jb21tb24oc3RydWN0IHhmc19tb3VudCAqLCBzdHJ1Y3QgeGZzX3NiICopOwotZXh0ZXJuIHZvaWQJeGZzX3NiX2Zyb21fZGlzayhzdHJ1Y3QgeGZzX3NiICosIHN0cnVjdCB4ZnNfZHNiICopOwotZXh0ZXJuIHZvaWQJeGZzX3NiX3RvX2Rpc2soc3RydWN0IHhmc19kc2IgKiwgc3RydWN0IHhmc19zYiAqLCBfX2ludDY0X3QpOworZXh0ZXJuIHZvaWQJeGZzX3NiX2NhbGNfY3JjKHN0cnVjdCB4ZnNfYnVmICpicCk7CitleHRlcm4gdm9pZAl4ZnNfbG9nX3NiKHN0cnVjdCB4ZnNfdHJhbnMgKnRwKTsKK2V4dGVybiBpbnQJeGZzX3N5bmNfc2Ioc3RydWN0IHhmc19tb3VudCAqbXAsIGJvb2wgd2FpdCk7CitleHRlcm4gdm9pZAl4ZnNfc2JfbW91bnRfY29tbW9uKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBzdHJ1Y3QgeGZzX3NiICpzYnApOworZXh0ZXJuIHZvaWQJeGZzX3NiX2Zyb21fZGlzayhzdHJ1Y3QgeGZzX3NiICp0bywgc3RydWN0IHhmc19kc2IgKmZyb20pOworZXh0ZXJuIHZvaWQJeGZzX3NiX3RvX2Rpc2soc3RydWN0IHhmc19kc2IgKnRvLCBzdHJ1Y3QgeGZzX3NiICpmcm9tKTsKIGV4dGVybiB2b2lkCXhmc19zYl9xdW90YV9mcm9tX2Rpc2soc3RydWN0IHhmc19zYiAqc2JwKTsKIAogI2VuZGlmCS8qIF9fWEZTX1NCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpYnhmcy94ZnNfc2hhcmVkLmggYi9mcy94ZnMvbGlieGZzL3hmc19zaGFyZWQuaAppbmRleCA4MjQwNGRhLi44ZGRhNGIzIDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19zaGFyZWQuaAorKysgYi9mcy94ZnMvbGlieGZzL3hmc19zaGFyZWQuaApAQCAtODIsNyArODIsNyBAQAogI2RlZmluZQlYRlNfVFJBTlNfQVRUUl9STQkJMjMKICNkZWZpbmUJWEZTX1RSQU5TX0FUVFJfRkxBRwkJMjQKICNkZWZpbmUJWEZTX1RSQU5TX0NMRUFSX0FHSV9CVUNLRVQJMjUKLSNkZWZpbmUgWEZTX1RSQU5TX1FNX1NCQ0hBTkdFCQkyNgorI2RlZmluZSBYRlNfVFJBTlNfU0JfQ0hBTkdFCQkyNgogLyoKICAqIER1bW15IGVudHJpZXMgc2luY2Ugd2UgdXNlIHRoZSB0cmFuc2FjdGlvbiB0eXBlIHRvIGluZGV4IGludG8gdGhlCiAgKiB0cmFuc190eXBlW10gaW4geGxvZ19yZWNvdmVyX3ByaW50X3RyYW5zX2hlYWQoKQpAQCAtOTUsMTcgKzk1LDE1IEBACiAjZGVmaW5lIFhGU19UUkFOU19RTV9EUUNMVVNURVIJCTMyCiAjZGVmaW5lIFhGU19UUkFOU19RTV9RSU5PQ1JFQVRFCQkzMwogI2RlZmluZSBYRlNfVFJBTlNfUU1fUVVPVEFPRkZfRU5ECTM0Ci0jZGVmaW5lIFhGU19UUkFOU19TQl9VTklUCQkzNQotI2RlZmluZSBYRlNfVFJBTlNfRlNZTkNfVFMJCTM2Ci0jZGVmaW5lCVhGU19UUkFOU19HUk9XRlNSVF9BTExPQwkzNwotI2RlZmluZQlYRlNfVFJBTlNfR1JPV0ZTUlRfWkVSTwkJMzgKLSNkZWZpbmUJWEZTX1RSQU5TX0dST1dGU1JUX0ZSRUUJCTM5Ci0jZGVmaW5lCVhGU19UUkFOU19TV0FQRVhUCQk0MAotI2RlZmluZQlYRlNfVFJBTlNfU0JfQ09VTlQJCTQxCi0jZGVmaW5lCVhGU19UUkFOU19DSEVDS1BPSU5UCQk0MgotI2RlZmluZQlYRlNfVFJBTlNfSUNSRUFURQkJNDMKLSNkZWZpbmUJWEZTX1RSQU5TX0NSRUFURV9UTVBGSUxFCTQ0Ci0jZGVmaW5lCVhGU19UUkFOU19UWVBFX01BWAkJNDQKKyNkZWZpbmUgWEZTX1RSQU5TX0ZTWU5DX1RTCQkzNQorI2RlZmluZQlYRlNfVFJBTlNfR1JPV0ZTUlRfQUxMT0MJMzYKKyNkZWZpbmUJWEZTX1RSQU5TX0dST1dGU1JUX1pFUk8JCTM3CisjZGVmaW5lCVhGU19UUkFOU19HUk9XRlNSVF9GUkVFCQkzOAorI2RlZmluZQlYRlNfVFJBTlNfU1dBUEVYVAkJMzkKKyNkZWZpbmUJWEZTX1RSQU5TX0NIRUNLUE9JTlQJCTQwCisjZGVmaW5lCVhGU19UUkFOU19JQ1JFQVRFCQk0MQorI2RlZmluZQlYRlNfVFJBTlNfQ1JFQVRFX1RNUEZJTEUJNDIKKyNkZWZpbmUJWEZTX1RSQU5TX1RZUEVfTUFYCQk0MwogLyogbmV3IHRyYW5zYWN0aW9uIHR5cGVzIG5lZWQgdG8gYmUgcmVmbGVjdGVkIGluIHhmc19sb2dwcmludCg4KSAqLwogCiAjZGVmaW5lIFhGU19UUkFOU19UWVBFUyBcCkBAIC0xMTMsNyArMTExLDYgQEAKIAl7IFhGU19UUkFOU19TRVRBVFRSX1NJWkUsCSJTRVRBVFRSX1NJWkUiIH0sIFwKIAl7IFhGU19UUkFOU19JTkFDVElWRSwJCSJJTkFDVElWRSIgfSwgXAogCXsgWEZTX1RSQU5TX0NSRUFURSwJCSJDUkVBVEUiIH0sIFwKLQl7IFhGU19UUkFOU19DUkVBVEVfVE1QRklMRSwJIkNSRUFURV9UTVBGSUxFIiB9LCBcCiAJeyBYRlNfVFJBTlNfQ1JFQVRFX1RSVU5DLAkiQ1JFQVRFX1RSVU5DIiB9LCBcCiAJeyBYRlNfVFJBTlNfVFJVTkNBVEVfRklMRSwJIlRSVU5DQVRFX0ZJTEUiIH0sIFwKIAl7IFhGU19UUkFOU19SRU1PVkUsCQkiUkVNT1ZFIiB9LCBcCkBAIC0xMzQsMjMgKzEzMSwyMyBAQAogCXsgWEZTX1RSQU5TX0FUVFJfUk0sCQkiQVRUUl9STSIgfSwgXAogCXsgWEZTX1RSQU5TX0FUVFJfRkxBRywJCSJBVFRSX0ZMQUciIH0sIFwKIAl7IFhGU19UUkFOU19DTEVBUl9BR0lfQlVDS0VULAkiQ0xFQVJfQUdJX0JVQ0tFVCIgfSwgXAotCXsgWEZTX1RSQU5TX1FNX1NCQ0hBTkdFLAkiUU1fU0JDSEFOR0UiIH0sIFwKKwl7IFhGU19UUkFOU19TQl9DSEFOR0UsCQkiU0JDSEFOR0UiIH0sIFwKKwl7IFhGU19UUkFOU19EVU1NWTEsCQkiRFVNTVkxIiB9LCBcCisJeyBYRlNfVFJBTlNfRFVNTVkyLAkJIkRVTU1ZMiIgfSwgXAogCXsgWEZTX1RSQU5TX1FNX1FVT1RBT0ZGLAkiUU1fUVVPVEFPRkYiIH0sIFwKIAl7IFhGU19UUkFOU19RTV9EUUFMTE9DLAkJIlFNX0RRQUxMT0MiIH0sIFwKIAl7IFhGU19UUkFOU19RTV9TRVRRTElNLAkJIlFNX1NFVFFMSU0iIH0sIFwKIAl7IFhGU19UUkFOU19RTV9EUUNMVVNURVIsCSJRTV9EUUNMVVNURVIiIH0sIFwKIAl7IFhGU19UUkFOU19RTV9RSU5PQ1JFQVRFLAkiUU1fUUlOT0NSRUFURSIgfSwgXAogCXsgWEZTX1RSQU5TX1FNX1FVT1RBT0ZGX0VORCwJIlFNX1FPRkZfRU5EIiB9LCBcCi0JeyBYRlNfVFJBTlNfU0JfVU5JVCwJCSJTQl9VTklUIiB9LCBcCiAJeyBYRlNfVFJBTlNfRlNZTkNfVFMsCQkiRlNZTkNfVFMiIH0sIFwKIAl7IFhGU19UUkFOU19HUk9XRlNSVF9BTExPQywJIkdST1dGU1JUX0FMTE9DIiB9LCBcCiAJeyBYRlNfVFJBTlNfR1JPV0ZTUlRfWkVSTywJIkdST1dGU1JUX1pFUk8iIH0sIFwKIAl7IFhGU19UUkFOU19HUk9XRlNSVF9GUkVFLAkiR1JPV0ZTUlRfRlJFRSIgfSwgXAogCXsgWEZTX1RSQU5TX1NXQVBFWFQsCQkiU1dBUEVYVCIgfSwgXAotCXsgWEZTX1RSQU5TX1NCX0NPVU5ULAkJIlNCX0NPVU5UIiB9LCBcCiAJeyBYRlNfVFJBTlNfQ0hFQ0tQT0lOVCwJCSJDSEVDS1BPSU5UIiB9LCBcCi0JeyBYRlNfVFJBTlNfRFVNTVkxLAkJIkRVTU1ZMSIgfSwgXAotCXsgWEZTX1RSQU5TX0RVTU1ZMiwJCSJEVU1NWTIiIH0sIFwKKwl7IFhGU19UUkFOU19JQ1JFQVRFLAkJIklDUkVBVEUiIH0sIFwKKwl7IFhGU19UUkFOU19DUkVBVEVfVE1QRklMRSwJIkNSRUFURV9UTVBGSUxFIiB9LCBcCiAJeyBYTE9HX1VOTU9VTlRfUkVDX1RZUEUsCSJVTk1PVU5UIiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc19zeW1saW5rX3JlbW90ZS5jIGIvZnMveGZzL2xpYnhmcy94ZnNfc3ltbGlua19yZW1vdGUuYwppbmRleCBjODBjNTIzLi5lN2UyNmJkIDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc19zeW1saW5rX3JlbW90ZS5jCisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3N5bWxpbmtfcmVtb3RlLmMKQEAgLTE3OCw2ICsxNzgsOCBAQAogCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtPmlfbW91bnQ7CiAJY2hhcgkJCSpidWY7CiAKKwl4ZnNfdHJhbnNfYnVmX3NldF90eXBlKHRwLCBicCwgWEZTX0JMRlRfU1lNTElOS19CVUYpOworCiAJaWYgKCF4ZnNfc2JfdmVyc2lvbl9oYXNjcmMoJm1wLT5tX3NiKSkgewogCQlicC0+Yl9vcHMgPSBOVUxMOwogCQltZW1jcHkoYnAtPmJfYWRkciwgaWZwLT5pZl91MS5pZl9kYXRhLCBpZnAtPmlmX2J5dGVzKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saWJ4ZnMveGZzX3RyYW5zX3Jlc3YuYyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3RyYW5zX3Jlc3YuYwppbmRleCA2YzEzMzBmLi42OGNiMWU3IDEwMDY0NAotLS0gYS9mcy94ZnMvbGlieGZzL3hmc190cmFuc19yZXN2LmMKKysrIGIvZnMveGZzL2xpYnhmcy94ZnNfdHJhbnNfcmVzdi5jCkBAIC03MTYsMTcgKzcxNiw2IEBACiB9CiAKIC8qCi0gKiBDbGVhcmluZyB0aGUgcXVvdGFmbGFncyBpbiB0aGUgc3VwZXJibG9jay4KLSAqCXRoZSBzdXBlciBibG9jayBmb3IgY2hhbmdpbmcgcXVvdGEgZmxhZ3M6IHNlY3RvciBzaXplCi0gKi8KLVNUQVRJQyB1aW50Ci14ZnNfY2FsY19xbV9zYmNoYW5nZV9yZXNlcnZhdGlvbigKLQlzdHJ1Y3QgeGZzX21vdW50CSptcCkKLXsKLQlyZXR1cm4geGZzX2NhbGNfYnVmX3JlcygxLCBtcC0+bV9zYi5zYl9zZWN0c2l6ZSk7Ci19Ci0KLS8qCiAgKiBBZGp1c3RpbmcgcXVvdGEgbGltaXRzLgogICogICAgdGhlIHhmc19kaXNrX2RxdW90X3Q6IHNpemVvZihzdHJ1Y3QgeGZzX2Rpc2tfZHF1b3QpCiAgKi8KQEAgLTg2NCw5ICs4NTMsNiBAQAogCSAqIFRoZSBmb2xsb3dpbmcgdHJhbnNhY3Rpb25zIGFyZSBsb2dnZWQgaW4gbG9naWNhbCBmb3JtYXQgd2l0aAogCSAqIGEgZGVmYXVsdCBsb2cgY291bnQuCiAJICovCi0JcmVzcC0+dHJfcW1fc2JjaGFuZ2UudHJfbG9ncmVzID0geGZzX2NhbGNfcW1fc2JjaGFuZ2VfcmVzZXJ2YXRpb24obXApOwotCXJlc3AtPnRyX3FtX3NiY2hhbmdlLnRyX2xvZ2NvdW50ID0gWEZTX0RFRkFVTFRfTE9HX0NPVU5UOwotCiAJcmVzcC0+dHJfcW1fc2V0cWxpbS50cl9sb2dyZXMgPSB4ZnNfY2FsY19xbV9zZXRxbGltX3Jlc2VydmF0aW9uKG1wKTsKIAlyZXNwLT50cl9xbV9zZXRxbGltLnRyX2xvZ2NvdW50ID0gWEZTX0RFRkFVTFRfTE9HX0NPVU5UOwogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGlieGZzL3hmc190cmFuc19yZXN2LmggYi9mcy94ZnMvbGlieGZzL3hmc190cmFuc19yZXN2LmgKaW5kZXggMTA5N2QxNC4uMmQ1YmRmYyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpYnhmcy94ZnNfdHJhbnNfcmVzdi5oCisrKyBiL2ZzL3hmcy9saWJ4ZnMveGZzX3RyYW5zX3Jlc3YuaApAQCAtNTYsNyArNTYsNiBAQAogCXN0cnVjdCB4ZnNfdHJhbnNfcmVzCXRyX2dyb3dydGFsbG9jOwkvKiBncm93IHJlYWx0aW1lIGFsbG9jYXRpb25zICovCiAJc3RydWN0IHhmc190cmFuc19yZXMJdHJfZ3Jvd3J0emVybzsJLyogZ3JvdyByZWFsdGltZSB6ZXJvaW5nICovCiAJc3RydWN0IHhmc190cmFuc19yZXMJdHJfZ3Jvd3J0ZnJlZTsJLyogZ3JvdyByZWFsdGltZSBmcmVlaW5nICovCi0Jc3RydWN0IHhmc190cmFuc19yZXMJdHJfcW1fc2JjaGFuZ2U7CS8qIGNoYW5nZSBxdW90YSBmbGFncyAqLwogCXN0cnVjdCB4ZnNfdHJhbnNfcmVzCXRyX3FtX3NldHFsaW07CS8qIGFkanVzdCBxdW90YSBsaW1pdHMgKi8KIAlzdHJ1Y3QgeGZzX3RyYW5zX3Jlcwl0cl9xbV9kcWFsbG9jOwkvKiBhbGxvY2F0ZSBxdW90YSBvbiBkaXNrICovCiAJc3RydWN0IHhmc190cmFuc19yZXMJdHJfcW1fcXVvdGFvZmY7CS8qIHR1cm4gcXVvdGEgb2ZmICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3R5cGVzLmggYi9mcy94ZnMvbGlieGZzL3hmc190eXBlcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBmcy94ZnMveGZzX3R5cGVzLmgKcmVuYW1lIHRvIGZzL3hmcy9saWJ4ZnMveGZzX3R5cGVzLmgKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYW9wcy5jIGIvZnMveGZzL3hmc19hb3BzLmMKaW5kZXggMThlMmYzYi4uM2E5YjdhMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hb3BzLmMKKysrIGIvZnMveGZzL3hmc19hb3BzLmMKQEAgLTEzNSwzMCArMTM1LDIyIEBACiAgKi8KIFNUQVRJQyBpbnQKIHhmc19zZXRmaWxlc2l6ZSgKLQlzdHJ1Y3QgeGZzX2lvZW5kCSppb2VuZCkKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKKwlzdHJ1Y3QgeGZzX3RyYW5zCSp0cCwKKwl4ZnNfb2ZmX3QJCW9mZnNldCwKKwlzaXplX3QJCQlzaXplKQogewotCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW9lbmQtPmlvX2lub2RlKTsKLQlzdHJ1Y3QgeGZzX3RyYW5zCSp0cCA9IGlvZW5kLT5pb19hcHBlbmRfdHJhbnM7CiAJeGZzX2ZzaXplX3QJCWlzaXplOwogCi0JLyoKLQkgKiBUaGUgdHJhbnNhY3Rpb24gbWF5IGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4gdGhlIEkvTyBzdWJtaXNzaW9uIHRocmVhZCwKLQkgKiB0aHVzIHdlIG5lZWQgdG8gbWFyayBvdXJzZWx2ZXMgYXMgYmVlaW5nIGluIGEgdHJhbnNhY3Rpb24gbWFudWFsbHkuCi0JICogU2ltaWxhcmx5IGZvciBmcmVlemUgcHJvdGVjdGlvbi4KLQkgKi8KLQljdXJyZW50X3NldF9mbGFnc19uZXN0ZWQoJnRwLT50X3BmbGFncywgUEZfRlNUUkFOUyk7Ci0JcndzZW1fYWNxdWlyZV9yZWFkKCZWRlNfSShpcCktPmlfc2ItPnNfd3JpdGVycy5sb2NrX21hcFtTQl9GUkVFWkVfRlMtMV0sCi0JCQkgICAwLCAxLCBfVEhJU19JUF8pOwotCiAJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JaXNpemUgPSB4ZnNfbmV3X2VvZihpcCwgaW9lbmQtPmlvX29mZnNldCArIGlvZW5kLT5pb19zaXplKTsKKwlpc2l6ZSA9IHhmc19uZXdfZW9mKGlwLCBvZmZzZXQgKyBzaXplKTsKIAlpZiAoIWlzaXplKSB7CiAJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CiAJCXhmc190cmFuc19jYW5jZWwodHAsIDApOwogCQlyZXR1cm4gMDsKIAl9CiAKLQl0cmFjZV94ZnNfc2V0ZmlsZXNpemUoaXAsIGlvZW5kLT5pb19vZmZzZXQsIGlvZW5kLT5pb19zaXplKTsKKwl0cmFjZV94ZnNfc2V0ZmlsZXNpemUoaXAsIG9mZnNldCwgc2l6ZSk7CiAKIAlpcC0+aV9kLmRpX3NpemUgPSBpc2l6ZTsKIAl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7CkBAIC0xNjcsNiArMTU5LDI1IEBACiAJcmV0dXJuIHhmc190cmFuc19jb21taXQodHAsIDApOwogfQogCitTVEFUSUMgaW50Cit4ZnNfc2V0ZmlsZXNpemVfaW9lbmQoCisJc3RydWN0IHhmc19pb2VuZAkqaW9lbmQpCit7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpb2VuZC0+aW9faW5vZGUpOworCXN0cnVjdCB4ZnNfdHJhbnMJKnRwID0gaW9lbmQtPmlvX2FwcGVuZF90cmFuczsKKworCS8qCisJICogVGhlIHRyYW5zYWN0aW9uIG1heSBoYXZlIGJlZW4gYWxsb2NhdGVkIGluIHRoZSBJL08gc3VibWlzc2lvbiB0aHJlYWQsCisJICogdGh1cyB3ZSBuZWVkIHRvIG1hcmsgb3Vyc2VsdmVzIGFzIGJlaW5nIGluIGEgdHJhbnNhY3Rpb24gbWFudWFsbHkuCisJICogU2ltaWxhcmx5IGZvciBmcmVlemUgcHJvdGVjdGlvbi4KKwkgKi8KKwljdXJyZW50X3NldF9mbGFnc19uZXN0ZWQoJnRwLT50X3BmbGFncywgUEZfRlNUUkFOUyk7CisJcndzZW1fYWNxdWlyZV9yZWFkKCZWRlNfSShpcCktPmlfc2ItPnNfd3JpdGVycy5sb2NrX21hcFtTQl9GUkVFWkVfRlMtMV0sCisJCQkgICAwLCAxLCBfVEhJU19JUF8pOworCisJcmV0dXJuIHhmc19zZXRmaWxlc2l6ZShpcCwgdHAsIGlvZW5kLT5pb19vZmZzZXQsIGlvZW5kLT5pb19zaXplKTsKK30KKwogLyoKICAqIFNjaGVkdWxlIElPIGNvbXBsZXRpb24gaGFuZGxpbmcgb24gdGhlIGZpbmFsIHB1dCBvZiBhbiBpb2VuZC4KICAqCkBAIC0xODIsOCArMTkzLDcgQEAKIAogCQlpZiAoaW9lbmQtPmlvX3R5cGUgPT0gWEZTX0lPX1VOV1JJVFRFTikKIAkJCXF1ZXVlX3dvcmsobXAtPm1fdW53cml0dGVuX3dvcmtxdWV1ZSwgJmlvZW5kLT5pb193b3JrKTsKLQkJZWxzZSBpZiAoaW9lbmQtPmlvX2FwcGVuZF90cmFucyB8fAotCQkJIChpb2VuZC0+aW9faXNkaXJlY3QgJiYgeGZzX2lvZW5kX2lzX2FwcGVuZChpb2VuZCkpKQorCQllbHNlIGlmIChpb2VuZC0+aW9fYXBwZW5kX3RyYW5zKQogCQkJcXVldWVfd29yayhtcC0+bV9kYXRhX3dvcmtxdWV1ZSwgJmlvZW5kLT5pb193b3JrKTsKIAkJZWxzZQogCQkJeGZzX2Rlc3Ryb3lfaW9lbmQoaW9lbmQpOwpAQCAtMjE1LDIyICsyMjUsOCBAQAogCWlmIChpb2VuZC0+aW9fdHlwZSA9PSBYRlNfSU9fVU5XUklUVEVOKSB7CiAJCWVycm9yID0geGZzX2lvbWFwX3dyaXRlX3Vud3JpdHRlbihpcCwgaW9lbmQtPmlvX29mZnNldCwKIAkJCQkJCSAgaW9lbmQtPmlvX3NpemUpOwotCX0gZWxzZSBpZiAoaW9lbmQtPmlvX2lzZGlyZWN0ICYmIHhmc19pb2VuZF9pc19hcHBlbmQoaW9lbmQpKSB7Ci0JCS8qCi0JCSAqIEZvciBkaXJlY3QgSS9PIHdlIGRvIG5vdCBrbm93IGlmIHdlIG5lZWQgdG8gYWxsb2NhdGUgYmxvY2tzCi0JCSAqIG9yIG5vdCBzbyB3ZSBjYW4ndCBwcmVhbGxvY2F0ZSBhbiBhcHBlbmQgdHJhbnNhY3Rpb24gYXMgdGhhdAotCQkgKiByZXN1bHRzIGluIG5lc3RlZCByZXNlcnZhdGlvbnMgYW5kIGxvZyBzcGFjZSBkZWFkbG9ja3MuIEhlbmNlCi0JCSAqIGFsbG9jYXRlIHRoZSB0cmFuc2FjdGlvbiBoZXJlLiBXaGlsZSB0aGlzIGlzIHN1Yi1vcHRpbWFsIGFuZAotCQkgKiBjYW4gYmxvY2sgSU8gY29tcGxldGlvbiBmb3Igc29tZSB0aW1lLCB3ZSdyZSBzdHVjayB3aXRoIGRvaW5nCi0JCSAqIGl0IHRoaXMgd2F5IHVudGlsIHdlIGNhbiBwYXNzIHRoZSBpb2VuZCB0byB0aGUgZGlyZWN0IElPCi0JCSAqIGFsbG9jYXRpb24gY2FsbGJhY2tzIGFuZCBhdm9pZCBuZXN0aW5nIHRoYXQgd2F5LgotCQkgKi8KLQkJZXJyb3IgPSB4ZnNfc2V0ZmlsZXNpemVfdHJhbnNfYWxsb2MoaW9lbmQpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIGRvbmU7Ci0JCWVycm9yID0geGZzX3NldGZpbGVzaXplKGlvZW5kKTsKIAl9IGVsc2UgaWYgKGlvZW5kLT5pb19hcHBlbmRfdHJhbnMpIHsKLQkJZXJyb3IgPSB4ZnNfc2V0ZmlsZXNpemUoaW9lbmQpOworCQllcnJvciA9IHhmc19zZXRmaWxlc2l6ZV9pb2VuZChpb2VuZCk7CiAJfSBlbHNlIHsKIAkJQVNTRVJUKCF4ZnNfaW9lbmRfaXNfYXBwZW5kKGlvZW5kKSk7CiAJfQpAQCAtMjQyLDE3ICsyMzgsNiBAQAogfQogCiAvKgotICogQ2FsbCBJTyBjb21wbGV0aW9uIGhhbmRsaW5nIGluIGNhbGxlciBjb250ZXh0IG9uIHRoZSBmaW5hbCBwdXQgb2YgYW4gaW9lbmQuCi0gKi8KLVNUQVRJQyB2b2lkCi14ZnNfZmluaXNoX2lvZW5kX3N5bmMoCi0Jc3RydWN0IHhmc19pb2VuZAkqaW9lbmQpCi17Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmlvZW5kLT5pb19yZW1haW5pbmcpKQotCQl4ZnNfZW5kX2lvKCZpb2VuZC0+aW9fd29yayk7Ci19Ci0KLS8qCiAgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGlzZSBhbiBJTyBjb21wbGV0aW9uIHN0cnVjdHVyZS4KICAqIFdlIG5lZWQgdG8gdHJhY2sgdW53cml0dGVuIGV4dGVudCB3cml0ZSBjb21wbGV0aW9uIGhlcmUgaW5pdGlhbGx5LgogICogV2UnbGwgbmVlZCB0byBleHRlbmQgdGhpcyBmb3IgdXBkYXRpbmcgdGhlIG9uZGlzayBpbm9kZSBzaXplIGxhdGVyCkBAIC0yNzMsNyArMjU4LDYgQEAKIAkgKiBhbGwgdGhlIEkvTyBmcm9tIGNhbGxpbmcgdGhlIGNvbXBsZXRpb24gcm91dGluZSB0b28gZWFybHkuCiAJICovCiAJYXRvbWljX3NldCgmaW9lbmQtPmlvX3JlbWFpbmluZywgMSk7Ci0JaW9lbmQtPmlvX2lzZGlyZWN0ID0gMDsKIAlpb2VuZC0+aW9fZXJyb3IgPSAwOwogCWlvZW5kLT5pb19saXN0ID0gTlVMTDsKIAlpb2VuZC0+aW9fdHlwZSA9IHR5cGU7CkBAIC0xNDU5LDExICsxNDQzLDcgQEAKICAqCiAgKiBJZiB0aGUgcHJpdmF0ZSBhcmd1bWVudCBpcyBub24tTlVMTCBfX3hmc19nZXRfYmxvY2tzIHNpZ25hbHMgdXMgdGhhdCB3ZQogICogbmVlZCB0byBpc3N1ZSBhIHRyYW5zYWN0aW9uIHRvIGNvbnZlcnQgdGhlIHJhbmdlIGZyb20gdW53cml0dGVuIHRvIHdyaXR0ZW4KLSAqIGV4dGVudHMuICBJbiBjYXNlIHRoaXMgaXMgcmVndWxhciBzeW5jaHJvbm91cyBJL08gd2UganVzdCBjYWxsIHhmc19lbmRfaW8KLSAqIHRvIGRvIHRoaXMgYW5kIHdlIGFyZSBkb25lLiAgQnV0IGluIGNhc2UgdGhpcyB3YXMgYSBzdWNjZXNzZnVsIEFJTwotICogcmVxdWVzdCB0aGlzIGhhbmRsZXIgaXMgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQsIGZyb20gd2hpY2ggd2UKLSAqIGNhbid0IHN0YXJ0IHRyYW5zYWN0aW9ucy4gIEluIHRoYXQgY2FzZSBvZmZsb2FkIHRoZSBJL08gY29tcGxldGlvbiB0bwotICogdGhlIHdvcmtxdWV1ZXMgd2UgYWxzbyB1c2UgZm9yIGJ1ZmZlcmVkIEkvTyBjb21wbGV0aW9uLgorICogZXh0ZW50cy4KICAqLwogU1RBVElDIHZvaWQKIHhmc19lbmRfaW9fZGlyZWN0X3dyaXRlKApAQCAtMTQ3Miw3ICsxNDUyLDEyIEBACiAJc3NpemVfdAkJCXNpemUsCiAJdm9pZAkJCSpwcml2YXRlKQogewotCXN0cnVjdCB4ZnNfaW9lbmQJKmlvZW5kID0gaW9jYi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0+a2lfZmlscCk7CisJc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpbm9kZSk7CisJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKKworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKKwkJcmV0dXJuOwogCiAJLyoKIAkgKiBXaGlsZSB0aGUgZ2VuZXJpYyBkaXJlY3QgSS9PIGNvZGUgdXBkYXRlcyB0aGUgaW5vZGUgc2l6ZSwgaXQgZG9lcwpAQCAtMTQ4MCwyMiArMTQ2NSwzMyBAQAogCSAqIGVuZF9pbyBoYW5kbGVyIHRoaW5rcyB0aGUgb24tZGlzayBzaXplIGlzIG91dHNpZGUgdGhlIGluLWNvcmUKIAkgKiBzaXplLiAgVG8gcHJldmVudCB0aGlzIGp1c3QgdXBkYXRlIGl0IGEgbGl0dGxlIGJpdCBlYXJsaWVyIGhlcmUuCiAJICovCi0JaWYgKG9mZnNldCArIHNpemUgPiBpX3NpemVfcmVhZChpb2VuZC0+aW9faW5vZGUpKQotCQlpX3NpemVfd3JpdGUoaW9lbmQtPmlvX2lub2RlLCBvZmZzZXQgKyBzaXplKTsKKwlpZiAob2Zmc2V0ICsgc2l6ZSA+IGlfc2l6ZV9yZWFkKGlub2RlKSkKKwkJaV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgKyBzaXplKTsKIAogCS8qCi0JICogYmxvY2tkZXZfZGlyZWN0X0lPIGNhbiByZXR1cm4gYW4gZXJyb3IgZXZlbiBhZnRlciB0aGUgSS9PCi0JICogY29tcGxldGlvbiBoYW5kbGVyIHdhcyBjYWxsZWQuICBUaHVzIHdlIG5lZWQgdG8gcHJvdGVjdAotCSAqIGFnYWluc3QgZG91YmxlLWZyZWVpbmcuCisJICogRm9yIGRpcmVjdCBJL08gd2UgZG8gbm90IGtub3cgaWYgd2UgbmVlZCB0byBhbGxvY2F0ZSBibG9ja3Mgb3Igbm90LAorCSAqIHNvIHdlIGNhbid0IHByZWFsbG9jYXRlIGFuIGFwcGVuZCB0cmFuc2FjdGlvbiwgYXMgdGhhdCByZXN1bHRzIGluCisJICogbmVzdGVkIHJlc2VydmF0aW9ucyBhbmQgbG9nIHNwYWNlIGRlYWRsb2Nrcy4gSGVuY2UgYWxsb2NhdGUgdGhlCisJICogdHJhbnNhY3Rpb24gaGVyZS4gV2hpbGUgdGhpcyBpcyBzdWItb3B0aW1hbCBhbmQgY2FuIGJsb2NrIElPCisJICogY29tcGxldGlvbiBmb3Igc29tZSB0aW1lLCB3ZSdyZSBzdHVjayB3aXRoIGRvaW5nIGl0IHRoaXMgd2F5IHVudGlsCisJICogd2UgY2FuIHBhc3MgdGhlIGlvZW5kIHRvIHRoZSBkaXJlY3QgSU8gYWxsb2NhdGlvbiBjYWxsYmFja3MgYW5kCisJICogYXZvaWQgbmVzdGluZyB0aGF0IHdheS4KIAkgKi8KLQlpb2NiLT5wcml2YXRlID0gTlVMTDsKKwlpZiAocHJpdmF0ZSAmJiBzaXplID4gMCkgeworCQl4ZnNfaW9tYXBfd3JpdGVfdW53cml0dGVuKGlwLCBvZmZzZXQsIHNpemUpOworCX0gZWxzZSBpZiAob2Zmc2V0ICsgc2l6ZSA+IGlwLT5pX2QuZGlfc2l6ZSkgeworCQlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsKKwkJaW50CQkJZXJyb3I7CiAKLQlpb2VuZC0+aW9fb2Zmc2V0ID0gb2Zmc2V0OwotCWlvZW5kLT5pb19zaXplID0gc2l6ZTsKLQlpZiAocHJpdmF0ZSAmJiBzaXplID4gMCkKLQkJaW9lbmQtPmlvX3R5cGUgPSBYRlNfSU9fVU5XUklUVEVOOworCQl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX0ZTWU5DX1RTKTsKKwkJZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgJk1fUkVTKG1wKS0+dHJfZnN5bmN0cywgMCwgMCk7CisJCWlmIChlcnJvcikgeworCQkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7CisJCQlyZXR1cm47CisJCX0KIAotCXhmc19maW5pc2hfaW9lbmRfc3luYyhpb2VuZCk7CisJCXhmc19zZXRmaWxlc2l6ZShpcCwgdHAsIG9mZnNldCwgc2l6ZSk7CisJfQogfQogCiBTVEFUSUMgc3NpemVfdApAQCAtMTUwNywzOSArMTUwMywxNiBAQAogewogCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9tYXBwaW5nLT5ob3N0OwogCXN0cnVjdCBibG9ja19kZXZpY2UJKmJkZXYgPSB4ZnNfZmluZF9iZGV2X2Zvcl9pbm9kZShpbm9kZSk7Ci0Jc3RydWN0IHhmc19pb2VuZAkqaW9lbmQgPSBOVUxMOwotCXNzaXplX3QJCQlyZXQ7CiAKIAlpZiAocncgJiBXUklURSkgewotCQlzaXplX3Qgc2l6ZSA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpOwotCi0JCS8qCi0JCSAqIFdlIGNhbm5vdCBwcmVhbGxvY2F0ZSBhIHNpemUgdXBkYXRlIHRyYW5zYWN0aW9uIGhlcmUgYXMgd2UKLQkJICogZG9uJ3Qga25vdyB3aGV0aGVyIGFsbG9jYXRpb24gaXMgbmVjZXNzYXJ5IG9yIG5vdC4gSGVuY2Ugd2UKLQkJICogY2FuIG9ubHkgdGVsbCBJTyBjb21wbGV0aW9uIHRoYXQgb25lIGlzIG5lY2Vzc2FyeSBpZiB3ZSBhcmUKLQkJICogbm90IGRvaW5nIHVud3JpdHRlbiBleHRlbnQgY29udmVyc2lvbi4KLQkJICovCi0JCWlvY2ItPnByaXZhdGUgPSBpb2VuZCA9IHhmc19hbGxvY19pb2VuZChpbm9kZSwgWEZTX0lPX0RJUkVDVCk7Ci0JCWlmIChvZmZzZXQgKyBzaXplID4gWEZTX0koaW5vZGUpLT5pX2QuZGlfc2l6ZSkKLQkJCWlvZW5kLT5pb19pc2RpcmVjdCA9IDE7Ci0KLQkJcmV0ID0gX19ibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLCBiZGV2LCBpdGVyLAorCQlyZXR1cm4gX19ibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLCBiZGV2LCBpdGVyLAogCQkJCQkgICAgb2Zmc2V0LCB4ZnNfZ2V0X2Jsb2Nrc19kaXJlY3QsCiAJCQkJCSAgICB4ZnNfZW5kX2lvX2RpcmVjdF93cml0ZSwgTlVMTCwKIAkJCQkJICAgIERJT19BU1lOQ19FWFRFTkQpOwotCQlpZiAocmV0ICE9IC1FSU9DQlFVRVVFRCAmJiBpb2NiLT5wcml2YXRlKQotCQkJZ290byBvdXRfZGVzdHJveV9pb2VuZDsKLQl9IGVsc2UgewotCQlyZXQgPSBfX2Jsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGJkZXYsIGl0ZXIsCi0JCQkJCSAgICBvZmZzZXQsIHhmc19nZXRfYmxvY2tzX2RpcmVjdCwKLQkJCQkJICAgIE5VTEwsIE5VTEwsIDApOwogCX0KLQotCXJldHVybiByZXQ7Ci0KLW91dF9kZXN0cm95X2lvZW5kOgotCXhmc19kZXN0cm95X2lvZW5kKGlvZW5kKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiBfX2Jsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGJkZXYsIGl0ZXIsCisJCQkJICAgIG9mZnNldCwgeGZzX2dldF9ibG9ja3NfZGlyZWN0LAorCQkJCSAgICBOVUxMLCBOVUxMLCAwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYW9wcy5oIGIvZnMveGZzL3hmc19hb3BzLmgKaW5kZXggZjk0ZGQ0NS4uYWM2NDRlMCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hb3BzLmgKKysrIGIvZnMveGZzL3hmc19hb3BzLmgKQEAgLTI0LDE0ICsyNCwxMiBAQAogICogVHlwZXMgb2YgSS9PIGZvciBibWFwIGNsdXN0ZXJpbmcgYW5kIEkvTyBjb21wbGV0aW9uIHRyYWNraW5nLgogICovCiBlbnVtIHsKLQlYRlNfSU9fRElSRUNUID0gMCwJLyogc3BlY2lhbCBjYXNlIGZvciBkaXJlY3QgSS9PIGlvZW5kcyAqLwogCVhGU19JT19ERUxBTExPQywJLyogY292ZXJzIGRlbGFsbG9jIHJlZ2lvbiAqLwogCVhGU19JT19VTldSSVRURU4sCS8qIGNvdmVycyBhbGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQgZGF0YSAqLwogCVhGU19JT19PVkVSV1JJVEUsCS8qIGNvdmVycyBhbHJlYWR5IGFsbG9jYXRlZCBleHRlbnQgKi8KIH07CiAKICNkZWZpbmUgWEZTX0lPX1RZUEVTIFwKLQl7IDAsCQkJIiIgfSwgXAogCXsgWEZTX0lPX0RFTEFMTE9DLAkJImRlbGFsbG9jIiB9LCBcCiAJeyBYRlNfSU9fVU5XUklUVEVOLAkJInVud3JpdHRlbiIgfSwgXAogCXsgWEZTX0lPX09WRVJXUklURSwJCSJvdmVyd3JpdGUiIH0KQEAgLTQ1LDcgKzQzLDYgQEAKIAl1bnNpZ25lZCBpbnQJCWlvX3R5cGU7CS8qIGRlbGFsbG9jIC8gdW53cml0dGVuICovCiAJaW50CQkJaW9fZXJyb3I7CS8qIEkvTyBlcnJvciBjb2RlICovCiAJYXRvbWljX3QJCWlvX3JlbWFpbmluZzsJLyogaG9sZCBjb3VudCAqLwotCXVuc2lnbmVkIGludAkJaW9faXNkaXJlY3QgOiAxOy8qIGRpcmVjdCBJL08gKi8KIAlzdHJ1Y3QgaW5vZGUJCSppb19pbm9kZTsJLyogZmlsZSBiZWluZyB3cml0dGVuIHRvICovCiAJc3RydWN0IGJ1ZmZlcl9oZWFkCSppb19idWZmZXJfaGVhZDsvKiBidWZmZXIgbGlua2VkIGxpc3QgaGVhZCAqLwogCXN0cnVjdCBidWZmZXJfaGVhZAkqaW9fYnVmZmVyX3RhaWw7LyogYnVmZmVyIGxpbmtlZCBsaXN0IHRhaWwgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmggYi9mcy94ZnMveGZzX2JtYXBfdXRpbC5oCmluZGV4IDJmZGI3MmQuLjczNjQyOWEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcF91dGlsLmgKKysrIGIvZnMveGZzL3hmc19ibWFwX3V0aWwuaApAQCAtMjYsNDMgKzI2LDggQEAKIHN0cnVjdCB4ZnNfaW5vZGU7CiBzdHJ1Y3QgeGZzX21vdW50Owogc3RydWN0IHhmc190cmFuczsKK3N0cnVjdCB4ZnNfYm1hbGxvY2E7CiAKLS8qCi0gKiBBcmd1bWVudCBzdHJ1Y3R1cmUgZm9yIHhmc19ibWFwX2FsbG9jLgotICovCi1zdHJ1Y3QgeGZzX2JtYWxsb2NhIHsKLQl4ZnNfZnNibG9ja190CQkqZmlyc3RibG9jazsgLyogaS9vIGZpcnN0IGJsb2NrIGFsbG9jYXRlZCAqLwotCXN0cnVjdCB4ZnNfYm1hcF9mcmVlCSpmbGlzdDsJLyogYm1hcCBmcmVlbGlzdCAqLwotCXN0cnVjdCB4ZnNfdHJhbnMJKnRwOwkvKiB0cmFuc2FjdGlvbiBwb2ludGVyICovCi0Jc3RydWN0IHhmc19pbm9kZQkqaXA7CS8qIGluY29yZSBpbm9kZSBwb2ludGVyICovCi0Jc3RydWN0IHhmc19ibWJ0X2lyZWMJcHJldjsJLyogZXh0ZW50IGJlZm9yZSB0aGUgbmV3IG9uZSAqLwotCXN0cnVjdCB4ZnNfYm1idF9pcmVjCWdvdDsJLyogZXh0ZW50IGFmdGVyLCBvciBkZWxheWVkICovCi0KLQl4ZnNfZmlsZW9mZl90CQlvZmZzZXQ7CS8qIG9mZnNldCBpbiBmaWxlIGZpbGxpbmcgaW4gKi8KLQl4ZnNfZXh0bGVuX3QJCWxlbmd0aDsJLyogaS9vIGxlbmd0aCBhc2tlZC9hbGxvY2F0ZWQgKi8KLQl4ZnNfZnNibG9ja190CQlibGtubzsJLyogc3RhcnRpbmcgYmxvY2sgb2YgbmV3IGV4dGVudCAqLwotCi0Jc3RydWN0IHhmc19idHJlZV9jdXIJKmN1cjsJLyogYnRyZWUgY3Vyc29yICovCi0JeGZzX2V4dG51bV90CQlpZHg7CS8qIGN1cnJlbnQgZXh0ZW50IGluZGV4ICovCi0JaW50CQkJbmFsbG9jczsvKiBudW1iZXIgb2YgZXh0ZW50cyBhbGxvYydkICovCi0JaW50CQkJbG9nZmxhZ3M7LyogZmxhZ3MgZm9yIHRyYW5zYWN0aW9uIGxvZ2dpbmcgKi8KLQotCXhmc19leHRsZW5fdAkJdG90YWw7CS8qIHRvdGFsIGJsb2NrcyBuZWVkZWQgZm9yIHhhY3Rpb24gKi8KLQl4ZnNfZXh0bGVuX3QJCW1pbmxlbjsJLyogbWluaW11bSBhbGxvY2F0aW9uIHNpemUgKGJsb2NrcykgKi8KLQl4ZnNfZXh0bGVuX3QJCW1pbmxlZnQ7IC8qIGFtb3VudCBtdXN0IGJlIGxlZnQgYWZ0ZXIgYWxsb2MgKi8KLQlib29sCQkJZW9mOwkvKiBzZXQgaWYgYWxsb2NhdGluZyBwYXN0IGxhc3QgZXh0ZW50ICovCi0JYm9vbAkJCXdhc2RlbDsJLyogcmVwbGFjaW5nIGEgZGVsYXllZCBhbGxvY2F0aW9uICovCi0JYm9vbAkJCXVzZXJkYXRhOy8qIHNldCBpZiBpcyB1c2VyIGRhdGEgKi8KLQlib29sCQkJYWVvZjsJLyogYWxsb2NhdGVkIHNwYWNlIGF0IGVvZiAqLwotCWJvb2wJCQljb252OwkvKiBvdmVyd3JpdGluZyB1bndyaXR0ZW4gZXh0ZW50cyAqLwotCWludAkJCWZsYWdzOwotCXN0cnVjdCBjb21wbGV0aW9uCSpkb25lOwotCXN0cnVjdCB3b3JrX3N0cnVjdAl3b3JrOwotCWludAkJCXJlc3VsdDsKLX07Ci0KLWludAl4ZnNfYm1hcF9maW5pc2goc3RydWN0IHhmc190cmFucyAqKnRwLCBzdHJ1Y3QgeGZzX2JtYXBfZnJlZSAqZmxpc3QsCi0JCQlpbnQgKmNvbW1pdHRlZCk7CiBpbnQJeGZzX2JtYXBfcnRhbGxvYyhzdHJ1Y3QgeGZzX2JtYWxsb2NhICphcCk7CiBpbnQJeGZzX2JtYXBfZW9mKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB4ZnNfZmlsZW9mZl90IGVuZG9mZiwKIAkJICAgICBpbnQgd2hpY2hmb3JrLCBpbnQgKmVvZik7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMgYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKaW5kZXggM2Y5YmQ1OC4uNTA3ZDk2YSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idWZfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwpAQCAtMzE5LDYgKzMxOSwxMCBAQAogCUFTU0VSVChhdG9taWNfcmVhZCgmYmlwLT5ibGlfcmVmY291bnQpID4gMCk7CiAJQVNTRVJUKChiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfTE9HR0VEKSB8fAogCSAgICAgICAoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSk7CisJQVNTRVJUKChiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfU1RBTEUpIHx8CisJICAgICAgICh4ZnNfYmxmdF9mcm9tX2ZsYWdzKCZiaXAtPl9fYmxpX2Zvcm1hdCkgPiBYRlNfQkxGVF9VTktOT1dOX0JVRgorCSAgICAgICAgJiYgeGZzX2JsZnRfZnJvbV9mbGFncygmYmlwLT5fX2JsaV9mb3JtYXQpIDwgWEZTX0JMRlRfTUFYX0JVRikpOworCiAKIAkvKgogCSAqIElmIGl0IGlzIGFuIGlub2RlIGJ1ZmZlciwgdHJhbnNmZXIgdGhlIGluLW1lbW9yeSBzdGF0ZSB0byB0aGUKQEAgLTUzNSw3ICs1MzksNyBAQAogCWlmICgoYnAtPmJfZmxhZ3MgJiBYQkZfV1JJVEVfRkFJTCkgJiYKIAkgICAgX19fcmF0ZWxpbWl0KCZ4ZnNfYnVmX3dyaXRlX2ZhaWxfcmxfc3RhdGUsICJYRlM6IikpIHsKIAkJeGZzX3dhcm4oYnAtPmJfdGFyZ2V0LT5idF9tb3VudCwKLSJEZXRlY3RlZCBmYWlsaW5nIGFzeW5jIHdyaXRlIG9uIGJ1ZmZlciBibG9jayAweCVsbHguIFJldHJ5aW5nIGFzeW5jIHdyaXRlLlxuIiwKKyJEZXRlY3RlZCBmYWlsaW5nIGFzeW5jIHdyaXRlIG9uIGJ1ZmZlciBibG9jayAweCVsbHguIFJldHJ5aW5nIGFzeW5jIHdyaXRlLiIsCiAJCQkgKGxvbmcgbG9uZylicC0+Yl9ibik7CiAJfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2RxdW90LmggYi9mcy94ZnMveGZzX2RxdW90LmgKaW5kZXggYzI0YzY3ZS4uMmY1MzZmMyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kcXVvdC5oCisrKyBiL2ZzL3hmcy94ZnNfZHF1b3QuaApAQCAtODYsNyArODYsNyBAQAogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRxcC0+cV9mbHVzaCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHhmc19kcWZsb2NrX25vd2FpdCh4ZnNfZHF1b3RfdCAqZHFwKQorc3RhdGljIGlubGluZSBib29sIHhmc19kcWZsb2NrX25vd2FpdCh4ZnNfZHF1b3RfdCAqZHFwKQogewogCXJldHVybiB0cnlfd2FpdF9mb3JfY29tcGxldGlvbigmZHFwLT5xX2ZsdXNoKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZmlsZS5jIGIvZnMveGZzL3hmc19maWxlLmMKaW5kZXggMTNlOTc0ZS4uZjJkMDVhMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19maWxlLmMKKysrIGIvZnMveGZzL3hmc19maWxlLmMKQEAgLTEyNyw2ICsxMjcsNDIgQEAKIAlyZXR1cm4gKC1zdGF0dXMpOwogfQogCitpbnQKK3hmc191cGRhdGVfcHJlYWxsb2NfZmxhZ3MoCisJc3RydWN0IHhmc19pbm9kZQkqaXAsCisJZW51bSB4ZnNfcHJlYWxsb2NfZmxhZ3MJZmxhZ3MpCit7CisJc3RydWN0IHhmc190cmFucwkqdHA7CisJaW50CQkJZXJyb3I7CisKKwl0cCA9IHhmc190cmFuc19hbGxvYyhpcC0+aV9tb3VudCwgWEZTX1RSQU5TX1dSSVRFSUQpOworCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsICZNX1JFUyhpcC0+aV9tb3VudCktPnRyX3dyaXRlaWQsIDAsIDApOworCWlmIChlcnJvcikgeworCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCXhmc190cmFuc19pam9pbih0cCwgaXAsIFhGU19JTE9DS19FWENMKTsKKworCWlmICghKGZsYWdzICYgWEZTX1BSRUFMTE9DX0lOVklTSUJMRSkpIHsKKwkJaXAtPmlfZC5kaV9tb2RlICY9IH5TX0lTVUlEOworCQlpZiAoaXAtPmlfZC5kaV9tb2RlICYgU19JWEdSUCkKKwkJCWlwLT5pX2QuZGlfbW9kZSAmPSB+U19JU0dJRDsKKwkJeGZzX3RyYW5zX2ljaGd0aW1lKHRwLCBpcCwgWEZTX0lDSEdUSU1FX01PRCB8IFhGU19JQ0hHVElNRV9DSEcpOworCX0KKworCWlmIChmbGFncyAmIFhGU19QUkVBTExPQ19TRVQpCisJCWlwLT5pX2QuZGlfZmxhZ3MgfD0gWEZTX0RJRkxBR19QUkVBTExPQzsKKwlpZiAoZmxhZ3MgJiBYRlNfUFJFQUxMT0NfQ0xFQVIpCisJCWlwLT5pX2QuZGlfZmxhZ3MgJj0gflhGU19ESUZMQUdfUFJFQUxMT0M7CisKKwl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7CisJaWYgKGZsYWdzICYgWEZTX1BSRUFMTE9DX1NZTkMpCisJCXhmc190cmFuc19zZXRfc3luYyh0cCk7CisJcmV0dXJuIHhmc190cmFuc19jb21taXQodHAsIDApOworfQorCiAvKgogICogRnN5bmMgb3BlcmF0aW9ucyBvbiBkaXJlY3RvcmllcyBhcmUgbXVjaCBzaW1wbGVyIHRoYW4gb24gcmVndWxhciBmaWxlcywKICAqIGFzIHRoZXJlIGlzIG5vIGZpbGUgZGF0YSB0byBmbHVzaCwgYW5kIHRodXMgYWxzbyBubyBuZWVkIGZvciBleHBsaWNpdApAQCAtNzg0LDggKzgyMCw4IEBACiB7CiAJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gWEZTX0koaW5vZGUpOwotCXN0cnVjdCB4ZnNfdHJhbnMJKnRwOwogCWxvbmcJCQllcnJvcjsKKwllbnVtIHhmc19wcmVhbGxvY19mbGFncwlmbGFncyA9IDA7CiAJbG9mZl90CQkJbmV3X3NpemUgPSAwOwogCiAJaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQpAQCAtODIyLDYgKzg1OCw4IEBACiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0X3VubG9jazsKIAl9IGVsc2UgeworCQlmbGFncyB8PSBYRlNfUFJFQUxMT0NfU0VUOworCiAJCWlmICghKG1vZGUgJiBGQUxMT0NfRkxfS0VFUF9TSVpFKSAmJgogCQkgICAgb2Zmc2V0ICsgbGVuID4gaV9zaXplX3JlYWQoaW5vZGUpKSB7CiAJCQluZXdfc2l6ZSA9IG9mZnNldCArIGxlbjsKQEAgLTgzOSwyOCArODc3LDEwIEBACiAJCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCi0JdHAgPSB4ZnNfdHJhbnNfYWxsb2MoaXAtPmlfbW91bnQsIFhGU19UUkFOU19XUklURUlEKTsKLQllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAmTV9SRVMoaXAtPmlfbW91bnQpLT50cl93cml0ZWlkLCAwLCAwKTsKLQlpZiAoZXJyb3IpIHsKLQkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JaXAtPmlfZC5kaV9tb2RlICY9IH5TX0lTVUlEOwotCWlmIChpcC0+aV9kLmRpX21vZGUgJiBTX0lYR1JQKQotCQlpcC0+aV9kLmRpX21vZGUgJj0gflNfSVNHSUQ7Ci0KLQlpZiAoIShtb2RlICYgKEZBTExPQ19GTF9QVU5DSF9IT0xFIHwgRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFKSkpCi0JCWlwLT5pX2QuZGlfZmxhZ3MgfD0gWEZTX0RJRkxBR19QUkVBTExPQzsKLQotCXhmc190cmFuc19pY2hndGltZSh0cCwgaXAsIFhGU19JQ0hHVElNRV9NT0QgfCBYRlNfSUNIR1RJTUVfQ0hHKTsKLQl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7Ci0KIAlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fRFNZTkMpCi0JCXhmc190cmFuc19zZXRfc3luYyh0cCk7Ci0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKKwkJZmxhZ3MgfD0gWEZTX1BSRUFMTE9DX1NZTkM7CisKKwllcnJvciA9IHhmc191cGRhdGVfcHJlYWxsb2NfZmxhZ3MoaXAsIGZsYWdzKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X3VubG9jazsKIApAQCAtMTM4NCw1ICsxNDA0LDQgQEAKIAkuZmF1bHQJCT0gZmlsZW1hcF9mYXVsdCwKIAkubWFwX3BhZ2VzCT0gZmlsZW1hcF9tYXBfcGFnZXMsCiAJLnBhZ2VfbWt3cml0ZQk9IHhmc192bV9wYWdlX21rd3JpdGUsCi0JLnJlbWFwX3BhZ2VzCT0gZ2VuZXJpY19maWxlX3JlbWFwX3BhZ2VzLAogfTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNvcHMuYyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwppbmRleCBmZGM2NDIyLi5mYmE2NTMyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Zzb3BzLmMKKysrIGIvZnMveGZzL3hmc19mc29wcy5jCkBAIC00ODgsNiArNDg4LDcgQEAKIAkJeGZzX3RyYW5zX21vZF9zYih0cCwgWEZTX1RSQU5TX1NCX0ZEQkxPQ0tTLCBuZnJlZSk7CiAJaWYgKGRwY3QpCiAJCXhmc190cmFuc19tb2Rfc2IodHAsIFhGU19UUkFOU19TQl9JTUFYUENULCBkcGN0KTsKKwl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwogCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CkBAIC01NDEsNyArNTQyLDcgQEAKIAkJCXNhdmVkX2Vycm9yID0gZXJyb3I7CiAJCQljb250aW51ZTsKIAkJfQotCQl4ZnNfc2JfdG9fZGlzayhYRlNfQlVGX1RPX1NCUChicCksICZtcC0+bV9zYiwgWEZTX1NCX0FMTF9CSVRTKTsKKwkJeGZzX3NiX3RvX2Rpc2soWEZTX0JVRl9UT19TQlAoYnApLCAmbXAtPm1fc2IpOwogCiAJCWVycm9yID0geGZzX2J3cml0ZShicCk7CiAJCXhmc19idWZfcmVsc2UoYnApOwpAQCAtNzU2LDM3ICs3NTcsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogRHVtcCBhIHRyYW5zYWN0aW9uIGludG8gdGhlIGxvZyB0aGF0IGNvbnRhaW5zIG5vIHJlYWwgY2hhbmdlLiBUaGlzIGlzIG5lZWRlZAotICogdG8gYmUgYWJsZSB0byBtYWtlIHRoZSBsb2cgZGlydHkgb3Igc3RhbXAgdGhlIGN1cnJlbnQgdGFpbCBMU04gaW50byB0aGUgbG9nCi0gKiBkdXJpbmcgdGhlIGNvdmVyaW5nIG9wZXJhdGlvbi4KLSAqCi0gKiBXZSBjYW5ub3QgdXNlIGFuIGlub2RlIGhlcmUgZm9yIHRoaXMgLSB0aGF0IHdpbGwgcHVzaCBkaXJ0eSBzdGF0ZSBiYWNrIHVwCi0gKiBpbnRvIHRoZSBWRlMgYW5kIHRoZW4gcGVyaW9kaWMgaW5vZGUgZmx1c2hpbmcgd2lsbCBwcmV2ZW50IGxvZyBjb3ZlcmluZyBmcm9tCi0gKiBtYWtpbmcgcHJvZ3Jlc3MuIEhlbmNlIHdlIGxvZyBhIGZpZWxkIGluIHRoZSBzdXBlcmJsb2NrIGluc3RlYWQgYW5kIHVzZSBhCi0gKiBzeW5jaHJvbm91cyB0cmFuc2FjdGlvbiB0byBlbnN1cmUgdGhlIHN1cGVyYmxvY2sgaXMgaW1tZWRpYXRlbHkgdW5waW5uZWQKLSAqIGFuZCBjYW4gYmUgd3JpdHRlbiBiYWNrLgotICovCi1pbnQKLXhmc19mc19sb2dfZHVtbXkoCi0JeGZzX21vdW50X3QJKm1wKQotewotCXhmc190cmFuc190CSp0cDsKLQlpbnQJCWVycm9yOwotCi0JdHAgPSBfeGZzX3RyYW5zX2FsbG9jKG1wLCBYRlNfVFJBTlNfRFVNTVkxLCBLTV9TTEVFUCk7Ci0JZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgJk1fUkVTKG1wKS0+dHJfc2IsIDAsIDApOwotCWlmIChlcnJvcikgewotCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQotCS8qIGxvZyB0aGUgVVVJRCBiZWNhdXNlIGl0IGlzIGFuIHVuY2hhbmdpbmcgZmllbGQgKi8KLQl4ZnNfbW9kX3NiKHRwLCBYRlNfU0JfVVVJRCk7Ci0JeGZzX3RyYW5zX3NldF9zeW5jKHRwKTsKLQlyZXR1cm4geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7Ci19Ci0KIGludAogeGZzX2ZzX2dvaW5nZG93bigKIAl4ZnNfbW91bnRfdAkqbXAsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmMgYi9mcy94ZnMveGZzX2lub2RlLmMKaW5kZXggNDFmODA0ZS4uZGFhZmExZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtMTk5NSw2ICsxOTk1LDcgQEAKIAlhZ2ktPmFnaV91bmxpbmtlZFtidWNrZXRfaW5kZXhdID0gY3B1X3RvX2JlMzIoYWdpbm8pOwogCW9mZnNldCA9IG9mZnNldG9mKHhmc19hZ2lfdCwgYWdpX3VubGlua2VkKSArCiAJCShzaXplb2YoeGZzX2FnaW5vX3QpICogYnVja2V0X2luZGV4KTsKKwl4ZnNfdHJhbnNfYnVmX3NldF90eXBlKHRwLCBhZ2licCwgWEZTX0JMRlRfQUdJX0JVRik7CiAJeGZzX3RyYW5zX2xvZ19idWYodHAsIGFnaWJwLCBvZmZzZXQsCiAJCQkgIChvZmZzZXQgKyBzaXplb2YoeGZzX2FnaW5vX3QpIC0gMSkpOwogCXJldHVybiAwOwpAQCAtMjA4Niw2ICsyMDg3LDcgQEAKIAkJYWdpLT5hZ2lfdW5saW5rZWRbYnVja2V0X2luZGV4XSA9IGNwdV90b19iZTMyKG5leHRfYWdpbm8pOwogCQlvZmZzZXQgPSBvZmZzZXRvZih4ZnNfYWdpX3QsIGFnaV91bmxpbmtlZCkgKwogCQkJKHNpemVvZih4ZnNfYWdpbm9fdCkgKiBidWNrZXRfaW5kZXgpOworCQl4ZnNfdHJhbnNfYnVmX3NldF90eXBlKHRwLCBhZ2licCwgWEZTX0JMRlRfQUdJX0JVRik7CiAJCXhmc190cmFuc19sb2dfYnVmKHRwLCBhZ2licCwgb2Zmc2V0LAogCQkJCSAgKG9mZnNldCArIHNpemVvZih4ZnNfYWdpbm9fdCkgLSAxKSk7CiAJfSBlbHNlIHsKQEAgLTI2NTYsNiArMjY1OCwxMjQgQEAKIH0KIAogLyoKKyAqIHhmc19jcm9zc19yZW5hbWUoKQorICoKKyAqIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBSRU5BTUVfRVhDSEFOR0UgZmxhZyBpbiByZW5hbWVhdDIoKSBzeXRlbWNhbGwKKyAqLworU1RBVElDIGludAoreGZzX2Nyb3NzX3JlbmFtZSgKKwlzdHJ1Y3QgeGZzX3RyYW5zCSp0cCwKKwlzdHJ1Y3QgeGZzX2lub2RlCSpkcDEsCisJc3RydWN0IHhmc19uYW1lCQkqbmFtZTEsCisJc3RydWN0IHhmc19pbm9kZQkqaXAxLAorCXN0cnVjdCB4ZnNfaW5vZGUJKmRwMiwKKwlzdHJ1Y3QgeGZzX25hbWUJCSpuYW1lMiwKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcDIsCisJc3RydWN0IHhmc19ibWFwX2ZyZWUJKmZyZWVfbGlzdCwKKwl4ZnNfZnNibG9ja190CQkqZmlyc3RfYmxvY2ssCisJaW50CQkJc3BhY2VyZXMpCit7CisJaW50CQllcnJvciA9IDA7CisJaW50CQlpcDFfZmxhZ3MgPSAwOworCWludAkJaXAyX2ZsYWdzID0gMDsKKwlpbnQJCWRwMl9mbGFncyA9IDA7CisKKwkvKiBTd2FwIGlub2RlIG51bWJlciBmb3IgZGlyZW50IGluIGZpcnN0IHBhcmVudCAqLworCWVycm9yID0geGZzX2Rpcl9yZXBsYWNlKHRwLCBkcDEsIG5hbWUxLAorCQkJCWlwMi0+aV9pbm8sCisJCQkJZmlyc3RfYmxvY2ssIGZyZWVfbGlzdCwgc3BhY2VyZXMpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisKKwkvKiBTd2FwIGlub2RlIG51bWJlciBmb3IgZGlyZW50IGluIHNlY29uZCBwYXJlbnQgKi8KKwllcnJvciA9IHhmc19kaXJfcmVwbGFjZSh0cCwgZHAyLCBuYW1lMiwKKwkJCQlpcDEtPmlfaW5vLAorCQkJCWZpcnN0X2Jsb2NrLCBmcmVlX2xpc3QsIHNwYWNlcmVzKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBJZiB3ZSdyZSByZW5hbWluZyBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyBhY3Jvc3MgZGlmZmVyZW50IHBhcmVudHMsCisJICogdXBkYXRlIHRoZSByZXNwZWN0aXZlICIuLiIgZW50cmllcyAoYW5kIGxpbmsgY291bnRzKSB0byBtYXRjaCB0aGUgbmV3CisJICogcGFyZW50cy4KKwkgKi8KKwlpZiAoZHAxICE9IGRwMikgeworCQlkcDJfZmxhZ3MgPSBYRlNfSUNIR1RJTUVfTU9EIHwgWEZTX0lDSEdUSU1FX0NIRzsKKworCQlpZiAoU19JU0RJUihpcDItPmlfZC5kaV9tb2RlKSkgeworCQkJZXJyb3IgPSB4ZnNfZGlyX3JlcGxhY2UodHAsIGlwMiwgJnhmc19uYW1lX2RvdGRvdCwKKwkJCQkJCWRwMS0+aV9pbm8sIGZpcnN0X2Jsb2NrLAorCQkJCQkJZnJlZV9saXN0LCBzcGFjZXJlcyk7CisJCQlpZiAoZXJyb3IpCisJCQkJZ290byBvdXQ7CisKKwkJCS8qIHRyYW5zZmVyIGlwMiAiLi4iIHJlZmVyZW5jZSB0byBkcDEgKi8KKwkJCWlmICghU19JU0RJUihpcDEtPmlfZC5kaV9tb2RlKSkgeworCQkJCWVycm9yID0geGZzX2Ryb3BsaW5rKHRwLCBkcDIpOworCQkJCWlmIChlcnJvcikKKwkJCQkJZ290byBvdXQ7CisJCQkJZXJyb3IgPSB4ZnNfYnVtcGxpbmsodHAsIGRwMSk7CisJCQkJaWYgKGVycm9yKQorCQkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJLyoKKwkJCSAqIEFsdGhvdWdoIGlwMSBpc24ndCBjaGFuZ2VkIGhlcmUsIHVzZXJzcGFjZSBuZWVkcworCQkJICogdG8gYmUgd2FybmVkIGFib3V0IHRoZSBjaGFuZ2UsIHNvIHRoYXQgYXBwbGljYXRpb25zCisJCQkgKiByZWx5aW5nIG9uIGl0IChsaWtlIGJhY2t1cCBvbmVzKSwgd2lsbCBwcm9wZXJseQorCQkJICogbm90aWZ5IHRoZSBjaGFuZ2UKKwkJCSAqLworCQkJaXAxX2ZsYWdzIHw9IFhGU19JQ0hHVElNRV9DSEc7CisJCQlpcDJfZmxhZ3MgfD0gWEZTX0lDSEdUSU1FX01PRCB8IFhGU19JQ0hHVElNRV9DSEc7CisJCX0KKworCQlpZiAoU19JU0RJUihpcDEtPmlfZC5kaV9tb2RlKSkgeworCQkJZXJyb3IgPSB4ZnNfZGlyX3JlcGxhY2UodHAsIGlwMSwgJnhmc19uYW1lX2RvdGRvdCwKKwkJCQkJCWRwMi0+aV9pbm8sIGZpcnN0X2Jsb2NrLAorCQkJCQkJZnJlZV9saXN0LCBzcGFjZXJlcyk7CisJCQlpZiAoZXJyb3IpCisJCQkJZ290byBvdXQ7CisKKwkJCS8qIHRyYW5zZmVyIGlwMSAiLi4iIHJlZmVyZW5jZSB0byBkcDIgKi8KKwkJCWlmICghU19JU0RJUihpcDItPmlfZC5kaV9tb2RlKSkgeworCQkJCWVycm9yID0geGZzX2Ryb3BsaW5rKHRwLCBkcDEpOworCQkJCWlmIChlcnJvcikKKwkJCQkJZ290byBvdXQ7CisJCQkJZXJyb3IgPSB4ZnNfYnVtcGxpbmsodHAsIGRwMik7CisJCQkJaWYgKGVycm9yKQorCQkJCQlnb3RvIG91dDsKKwkJCX0KKworCQkJLyoKKwkJCSAqIEFsdGhvdWdoIGlwMiBpc24ndCBjaGFuZ2VkIGhlcmUsIHVzZXJzcGFjZSBuZWVkcworCQkJICogdG8gYmUgd2FybmVkIGFib3V0IHRoZSBjaGFuZ2UsIHNvIHRoYXQgYXBwbGljYXRpb25zCisJCQkgKiByZWx5aW5nIG9uIGl0IChsaWtlIGJhY2t1cCBvbmVzKSwgd2lsbCBwcm9wZXJseQorCQkJICogbm90aWZ5IHRoZSBjaGFuZ2UKKwkJCSAqLworCQkJaXAxX2ZsYWdzIHw9IFhGU19JQ0hHVElNRV9NT0QgfCBYRlNfSUNIR1RJTUVfQ0hHOworCQkJaXAyX2ZsYWdzIHw9IFhGU19JQ0hHVElNRV9DSEc7CisJCX0KKwl9CisKKwlpZiAoaXAxX2ZsYWdzKSB7CisJCXhmc190cmFuc19pY2hndGltZSh0cCwgaXAxLCBpcDFfZmxhZ3MpOworCQl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcDEsIFhGU19JTE9HX0NPUkUpOworCX0KKwlpZiAoaXAyX2ZsYWdzKSB7CisJCXhmc190cmFuc19pY2hndGltZSh0cCwgaXAyLCBpcDJfZmxhZ3MpOworCQl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcDIsIFhGU19JTE9HX0NPUkUpOworCX0KKwlpZiAoZHAyX2ZsYWdzKSB7CisJCXhmc190cmFuc19pY2hndGltZSh0cCwgZHAyLCBkcDJfZmxhZ3MpOworCQl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBkcDIsIFhGU19JTE9HX0NPUkUpOworCX0KKwl4ZnNfdHJhbnNfaWNoZ3RpbWUodHAsIGRwMSwgWEZTX0lDSEdUSU1FX01PRCB8IFhGU19JQ0hHVElNRV9DSEcpOworCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGRwMSwgWEZTX0lMT0dfQ09SRSk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCisvKgogICogeGZzX3JlbmFtZQogICovCiBpbnQKQEAgLTI2NjUsNyArMjc4NSw4IEBACiAJeGZzX2lub2RlX3QJKnNyY19pcCwKIAl4ZnNfaW5vZGVfdAkqdGFyZ2V0X2RwLAogCXN0cnVjdCB4ZnNfbmFtZQkqdGFyZ2V0X25hbWUsCi0JeGZzX2lub2RlX3QJKnRhcmdldF9pcCkKKwl4ZnNfaW5vZGVfdAkqdGFyZ2V0X2lwLAorCXVuc2lnbmVkIGludAlmbGFncykKIHsKIAl4ZnNfdHJhbnNfdAkqdHAgPSBOVUxMOwogCXhmc19tb3VudF90CSptcCA9IHNyY19kcC0+aV9tb3VudDsKQEAgLTI3NDMsNiArMjg2NCwxOCBAQAogCX0KIAogCS8qCisJICogSGFuZGxlIFJFTkFNRV9FWENIQU5HRSBmbGFncworCSAqLworCWlmIChmbGFncyAmIFJFTkFNRV9FWENIQU5HRSkgeworCQllcnJvciA9IHhmc19jcm9zc19yZW5hbWUodHAsIHNyY19kcCwgc3JjX25hbWUsIHNyY19pcCwKKwkJCQkJIHRhcmdldF9kcCwgdGFyZ2V0X25hbWUsIHRhcmdldF9pcCwKKwkJCQkJICZmcmVlX2xpc3QsICZmaXJzdF9ibG9jaywgc3BhY2VyZXMpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGFib3J0X3JldHVybjsKKwkJZ290byBmaW5pc2hfcmVuYW1lOworCX0KKworCS8qCiAJICogU2V0IHVwIHRoZSB0YXJnZXQuCiAJICovCiAJaWYgKHRhcmdldF9pcCA9PSBOVUxMKSB7CkBAIC0yODgxLDYgKzMwMTQsNyBAQAogCWlmIChuZXdfcGFyZW50KQogCQl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCB0YXJnZXRfZHAsIFhGU19JTE9HX0NPUkUpOwogCitmaW5pc2hfcmVuYW1lOgogCS8qCiAJICogSWYgdGhpcyBpcyBhIHN5bmNocm9ub3VzIG1vdW50LCBtYWtlIHN1cmUgdGhhdCB0aGUKIAkgKiByZW5hbWUgdHJhbnNhY3Rpb24gZ29lcyB0byBkaXNrIGJlZm9yZSByZXR1cm5pbmcgdG8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaAppbmRleCA0ZWQyYmE5Li44NmNkNmIzIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlLmgKKysrIGIvZnMveGZzL3hmc19pbm9kZS5oCkBAIC0zMzgsNyArMzM4LDcgQEAKIGludAkJeGZzX3JlbmFtZShzdHJ1Y3QgeGZzX2lub2RlICpzcmNfZHAsIHN0cnVjdCB4ZnNfbmFtZSAqc3JjX25hbWUsCiAJCQkgICBzdHJ1Y3QgeGZzX2lub2RlICpzcmNfaXAsIHN0cnVjdCB4ZnNfaW5vZGUgKnRhcmdldF9kcCwKIAkJCSAgIHN0cnVjdCB4ZnNfbmFtZSAqdGFyZ2V0X25hbWUsCi0JCQkgICBzdHJ1Y3QgeGZzX2lub2RlICp0YXJnZXRfaXApOworCQkJICAgc3RydWN0IHhmc19pbm9kZSAqdGFyZ2V0X2lwLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogCiB2b2lkCQl4ZnNfaWxvY2soeGZzX2lub2RlX3QgKiwgdWludCk7CiBpbnQJCXhmc19pbG9ja19ub3dhaXQoeGZzX2lub2RlX3QgKiwgdWludCk7CkBAIC0zNzcsNiArMzc3LDE1IEBACiBpbnQJCXhmc19idW1wbGluayhzdHJ1Y3QgeGZzX3RyYW5zICosIHN0cnVjdCB4ZnNfaW5vZGUgKik7CiAKIC8qIGZyb20geGZzX2ZpbGUuYyAqLworZW51bSB4ZnNfcHJlYWxsb2NfZmxhZ3MgeworCVhGU19QUkVBTExPQ19TRVQJPSAoMSA8PCAxKSwKKwlYRlNfUFJFQUxMT0NfQ0xFQVIJPSAoMSA8PCAyKSwKKwlYRlNfUFJFQUxMT0NfU1lOQwk9ICgxIDw8IDMpLAorCVhGU19QUkVBTExPQ19JTlZJU0lCTEUJPSAoMSA8PCA0KSwKK307CisKK2ludAkJeGZzX3VwZGF0ZV9wcmVhbGxvY19mbGFncyhzdHJ1Y3QgeGZzX2lub2RlICosCisJCQllbnVtIHhmc19wcmVhbGxvY19mbGFncyk7CiBpbnQJCXhmc196ZXJvX2VvZihzdHJ1Y3QgeGZzX2lub2RlICosIHhmc19vZmZfdCwgeGZzX2ZzaXplX3QpOwogaW50CQl4ZnNfaW96ZXJvKHN0cnVjdCB4ZnNfaW5vZGUgKiwgbG9mZl90LCBzaXplX3QpOwogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvY3RsLmMgYi9mcy94ZnMveGZzX2lvY3RsLmMKaW5kZXggYTE4MzE5ODAuLmY3YWZiODYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9jdGwuYworKysgYi9mcy94ZnMveGZzX2lvY3RsLmMKQEAgLTYwNiwxMSArNjA2LDggQEAKIAl1bnNpZ25lZCBpbnQJCWNtZCwKIAl4ZnNfZmxvY2s2NF90CQkqYmYpCiB7Ci0Jc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKLQlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsKIAlzdHJ1Y3QgaWF0dHIJCWlhdHRyOwotCWJvb2wJCQlzZXRwcmVhbGxvYyA9IGZhbHNlOwotCWJvb2wJCQljbHJwcmVhbGxvYyA9IGZhbHNlOworCWVudW0geGZzX3ByZWFsbG9jX2ZsYWdzCWZsYWdzID0gMDsKIAlpbnQJCQllcnJvcjsKIAogCS8qCkBAIC02MzAsNiArNjI3LDExIEBACiAJaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChmaWxwLT5mX2ZsYWdzICYgT19EU1lOQykKKwkJZmxhZ3MgfD0gWEZTX1BSRUFMTE9DX1NZTkM7CisJaWYgKGlvZmxhZ3MgJiBYRlNfSU9fSU5WSVMpCQorCQlmbGFncyB8PSBYRlNfUFJFQUxMT0NfSU5WSVNJQkxFOworCiAJZXJyb3IgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwpAQCAtNjczLDI1ICs2NzUsMjMgQEAKIAl9CiAKIAlpZiAoYmYtPmxfc3RhcnQgPCAwIHx8Ci0JICAgIGJmLT5sX3N0YXJ0ID4gbXAtPm1fc3VwZXItPnNfbWF4Ynl0ZXMgfHwKKwkgICAgYmYtPmxfc3RhcnQgPiBpbm9kZS0+aV9zYi0+c19tYXhieXRlcyB8fAogCSAgICBiZi0+bF9zdGFydCArIGJmLT5sX2xlbiA8IDAgfHwKLQkgICAgYmYtPmxfc3RhcnQgKyBiZi0+bF9sZW4gPj0gbXAtPm1fc3VwZXItPnNfbWF4Ynl0ZXMpIHsKKwkgICAgYmYtPmxfc3RhcnQgKyBiZi0+bF9sZW4gPj0gaW5vZGUtPmlfc2ItPnNfbWF4Ynl0ZXMpIHsKIAkJZXJyb3IgPSAtRUlOVkFMOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFhGU19JT0NfWkVST19SQU5HRToKKwkJZmxhZ3MgfD0gWEZTX1BSRUFMTE9DX1NFVDsKIAkJZXJyb3IgPSB4ZnNfemVyb19maWxlX3NwYWNlKGlwLCBiZi0+bF9zdGFydCwgYmYtPmxfbGVuKTsKLQkJaWYgKCFlcnJvcikKLQkJCXNldHByZWFsbG9jID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBYRlNfSU9DX1JFU1ZTUDoKIAljYXNlIFhGU19JT0NfUkVTVlNQNjQ6CisJCWZsYWdzIHw9IFhGU19QUkVBTExPQ19TRVQ7CiAJCWVycm9yID0geGZzX2FsbG9jX2ZpbGVfc3BhY2UoaXAsIGJmLT5sX3N0YXJ0LCBiZi0+bF9sZW4sCiAJCQkJCQlYRlNfQk1BUElfUFJFQUxMT0MpOwotCQlpZiAoIWVycm9yKQotCQkJc2V0cHJlYWxsb2MgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFhGU19JT0NfVU5SRVNWU1A6CiAJY2FzZSBYRlNfSU9DX1VOUkVTVlNQNjQ6CkBAIC03MDEsNiArNzAxLDcgQEAKIAljYXNlIFhGU19JT0NfQUxMT0NTUDY0OgogCWNhc2UgWEZTX0lPQ19GUkVFU1A6CiAJY2FzZSBYRlNfSU9DX0ZSRUVTUDY0OgorCQlmbGFncyB8PSBYRlNfUFJFQUxMT0NfQ0xFQVI7CiAJCWlmIChiZi0+bF9zdGFydCA+IFhGU19JU0laRShpcCkpIHsKIAkJCWVycm9yID0geGZzX2FsbG9jX2ZpbGVfc3BhY2UoaXAsIFhGU19JU0laRShpcCksCiAJCQkJCWJmLT5sX3N0YXJ0IC0gWEZTX0lTSVpFKGlwKSwgMCk7CkBAIC03MTIsOCArNzEzLDYgQEAKIAkJaWF0dHIuaWFfc2l6ZSA9IGJmLT5sX3N0YXJ0OwogCiAJCWVycm9yID0geGZzX3NldGF0dHJfc2l6ZShpcCwgJmlhdHRyKTsKLQkJaWYgKCFlcnJvcikKLQkJCWNscnByZWFsbG9jID0gdHJ1ZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJQVNTRVJUKDApOwpAQCAtNzIzLDMyICs3MjIsNyBAQAogCWlmIChlcnJvcikKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19XUklURUlEKTsKLQllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAmTV9SRVMobXApLT50cl93cml0ZWlkLCAwLCAwKTsKLQlpZiAoZXJyb3IpIHsKLQkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0KLQlpZiAoIShpb2ZsYWdzICYgWEZTX0lPX0lOVklTKSkgewotCQlpcC0+aV9kLmRpX21vZGUgJj0gflNfSVNVSUQ7Ci0JCWlmIChpcC0+aV9kLmRpX21vZGUgJiBTX0lYR1JQKQotCQkJaXAtPmlfZC5kaV9tb2RlICY9IH5TX0lTR0lEOwotCQl4ZnNfdHJhbnNfaWNoZ3RpbWUodHAsIGlwLCBYRlNfSUNIR1RJTUVfTU9EIHwgWEZTX0lDSEdUSU1FX0NIRyk7Ci0JfQotCi0JaWYgKHNldHByZWFsbG9jKQotCQlpcC0+aV9kLmRpX2ZsYWdzIHw9IFhGU19ESUZMQUdfUFJFQUxMT0M7Ci0JZWxzZSBpZiAoY2xycHJlYWxsb2MpCi0JCWlwLT5pX2QuZGlfZmxhZ3MgJj0gflhGU19ESUZMQUdfUFJFQUxMT0M7Ci0KLQl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7Ci0JaWYgKGZpbHAtPmZfZmxhZ3MgJiBPX0RTWU5DKQotCQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwotCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CisJZXJyb3IgPSB4ZnNfdXBkYXRlX3ByZWFsbG9jX2ZsYWdzKGlwLCBmbGFncyk7CiAKIG91dF91bmxvY2s6CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7CkBAIC0xMDEzLDIwICs5ODcsMTgyIEBACiAJCWlub2RlLT5pX2ZsYWdzICY9IH5TX05PQVRJTUU7CiB9CiAKLSNkZWZpbmUgRlNYX1BST0pJRAkxCi0jZGVmaW5lIEZTWF9FWFRTSVpFCTIKLSNkZWZpbmUgRlNYX1hGTEFHUwk0Ci0jZGVmaW5lIEZTWF9OT05CTE9DSwk4CitzdGF0aWMgaW50Cit4ZnNfaW9jdGxfc2V0YXR0cl94ZmxhZ3MoCisJc3RydWN0IHhmc190cmFucwkqdHAsCisJc3RydWN0IHhmc19pbm9kZQkqaXAsCisJc3RydWN0IGZzeGF0dHIJCSpmYSkKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OworCisJLyogQ2FuJ3QgY2hhbmdlIHJlYWx0aW1lIGZsYWcgaWYgYW55IGV4dGVudHMgYXJlIGFsbG9jYXRlZC4gKi8KKwlpZiAoKGlwLT5pX2QuZGlfbmV4dGVudHMgfHwgaXAtPmlfZGVsYXllZF9ibGtzKSAmJgorCSAgICBYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApICE9IChmYS0+ZnN4X3hmbGFncyAmIFhGU19YRkxBR19SRUFMVElNRSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogSWYgcmVhbHRpbWUgZmxhZyBpcyBzZXQgdGhlbiBtdXN0IGhhdmUgcmVhbHRpbWUgZGV2aWNlICovCisJaWYgKGZhLT5mc3hfeGZsYWdzICYgWEZTX1hGTEFHX1JFQUxUSU1FKSB7CisJCWlmIChtcC0+bV9zYi5zYl9yYmxvY2tzID09IDAgfHwgbXAtPm1fc2Iuc2JfcmV4dHNpemUgPT0gMCB8fAorCQkgICAgKGlwLT5pX2QuZGlfZXh0c2l6ZSAlIG1wLT5tX3NiLnNiX3JleHRzaXplKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qCisJICogQ2FuJ3QgbW9kaWZ5IGFuIGltbXV0YWJsZS9hcHBlbmQtb25seSBmaWxlIHVubGVzcworCSAqIHdlIGhhdmUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbi4KKwkgKi8KKwlpZiAoKChpcC0+aV9kLmRpX2ZsYWdzICYgKFhGU19ESUZMQUdfSU1NVVRBQkxFIHwgWEZTX0RJRkxBR19BUFBFTkQpKSB8fAorCSAgICAgKGZhLT5mc3hfeGZsYWdzICYgKFhGU19YRkxBR19JTU1VVEFCTEUgfCBYRlNfWEZMQUdfQVBQRU5EKSkpICYmCisJICAgICFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKQorCQlyZXR1cm4gLUVQRVJNOworCisJeGZzX3NldF9kaWZsYWdzKGlwLCBmYS0+ZnN4X3hmbGFncyk7CisJeGZzX2RpZmxhZ3NfdG9fbGludXgoaXApOworCXhmc190cmFuc19pY2hndGltZSh0cCwgaXAsIFhGU19JQ0hHVElNRV9DSEcpOworCXhmc190cmFuc19sb2dfaW5vZGUodHAsIGlwLCBYRlNfSUxPR19DT1JFKTsKKwlYRlNfU1RBVFNfSU5DKHhzX2lnX2F0dHJjaGcpOworCXJldHVybiAwOworfQorCisvKgorICogU2V0IHVwIHRoZSB0cmFuc2FjdGlvbiBzdHJ1Y3R1cmUgZm9yIHRoZSBzZXRhdHRyIG9wZXJhdGlvbiwgY2hlY2tpbmcgdGhhdCB3ZQorICogaGF2ZSBwZXJtaXNzaW9uIHRvIGRvIHNvLiBPbiBzdWNjZXNzLCByZXR1cm4gYSBjbGVhbiB0cmFuc2FjdGlvbiBhbmQgdGhlCisgKiBpbm9kZSBsb2NrZWQgZXhjbHVzaXZlbHkgcmVhZHkgZm9yIGZ1cnRoZXIgb3BlcmF0aW9uIHNwZWNpZmljIGNoZWNrcy4gT24KKyAqIGZhaWx1cmUsIHJldHVybiBhbiBlcnJvciB3aXRob3V0IG1vZGlmeWluZyBvciBsb2NraW5nIHRoZSBpbm9kZS4KKyAqLworc3RhdGljIHN0cnVjdCB4ZnNfdHJhbnMgKgoreGZzX2lvY3RsX3NldGF0dHJfZ2V0X3RyYW5zKAorCXN0cnVjdCB4ZnNfaW5vZGUJKmlwKQoreworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtPmlfbW91bnQ7CisJc3RydWN0IHhmc190cmFucwkqdHA7CisJaW50CQkJZXJyb3I7CisKKwlpZiAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfUkRPTkxZKQorCQlyZXR1cm4gRVJSX1BUUigtRVJPRlMpOworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CisKKwl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX1NFVEFUVFJfTk9UX1NJWkUpOworCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsICZNX1JFUyhtcCktPnRyX2ljaGFuZ2UsIDAsIDApOworCWlmIChlcnJvcikKKwkJZ290byBvdXRfY2FuY2VsOworCisJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOworCisJLyoKKwkgKiBDQVBfRk9XTkVSIG92ZXJyaWRlcyB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKwkgKgorCSAqIFRoZSB1c2VyIElEIG9mIHRoZSBjYWxsaW5nIHByb2Nlc3MgbXVzdCBiZSBlcXVhbCB0byB0aGUgZmlsZSBvd25lcgorCSAqIElELCBleGNlcHQgaW4gY2FzZXMgd2hlcmUgdGhlIENBUF9GU0VUSUQgY2FwYWJpbGl0eSBpcyBhcHBsaWNhYmxlLgorCSAqLworCWlmICghaW5vZGVfb3duZXJfb3JfY2FwYWJsZShWRlNfSShpcCkpKSB7CisJCWVycm9yID0gLUVQRVJNOworCQlnb3RvIG91dF9jYW5jZWw7CisJfQorCisJaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1dTWU5DKQorCQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOworCisJcmV0dXJuIHRwOworCitvdXRfY2FuY2VsOgorCXhmc190cmFuc19jYW5jZWwodHAsIDApOworCXJldHVybiBFUlJfUFRSKGVycm9yKTsKK30KKworLyoKKyAqIGV4dGVudCBzaXplIGhpbnQgdmFsaWRhdGlvbiBpcyBzb21ld2hhdCBjdW1iZXJzb21lLiBSdWxlcyBhcmU6CisgKgorICogMS4gZXh0ZW50IHNpemUgaGludCBpcyBvbmx5IHZhbGlkIGZvciBkaXJlY3RvcmllcyBhbmQgcmVndWxhciBmaWxlcworICogMi4gWEZTX1hGTEFHX0VYVFNJWkUgaXMgb25seSB2YWxpZCBmb3IgcmVndWxhciBmaWxlcworICogMy4gWEZTX1hGTEFHX0VYVFNaSU5IRVJJVCBpcyBvbmx5IHZhbGlkIGZvciBkaXJlY3Rvcmllcy4KKyAqIDQuIGNhbiBvbmx5IGJlIGNoYW5nZWQgb24gcmVndWxhciBmaWxlcyBpZiBubyBleHRlbnRzIGFyZSBhbGxvY2F0ZWQKKyAqIDUuIGNhbiBiZSBjaGFuZ2VkIG9uIGRpcmVjdG9yaWVzIGF0IGFueSB0aW1lCisgKiA2LiBleHRzaXplIGhpbnQgb2YgMCB0dXJucyBvZmYgaGludHMsIGNsZWFycyBpbm9kZSBmbGFncy4KKyAqIDcuIEV4dGVudCBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgYXBwcm9wcmlhdGUgYmxvY2sgc2l6ZS4KKyAqIDguIGZvciBub24tcmVhbHRpbWUgZmlsZXMsIHRoZSBleHRlbnQgc2l6ZSBoaW50IG11c3QgYmUgbGltaXRlZAorICogICAgdG8gaGFsZiB0aGUgQUcgc2l6ZSB0byBhdm9pZCBhbGlnbm1lbnQgZXh0ZW5kaW5nIHRoZSBleHRlbnQgYmV5b25kIHRoZQorICogICAgbGltaXRzIG9mIHRoZSBBRy4KKyAqLworc3RhdGljIGludAoreGZzX2lvY3RsX3NldGF0dHJfY2hlY2tfZXh0c2l6ZSgKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCwKKwlzdHJ1Y3QgZnN4YXR0cgkJKmZhKQoreworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gaXAtPmlfbW91bnQ7CisKKwlpZiAoKGZhLT5mc3hfeGZsYWdzICYgWEZTX1hGTEFHX0VYVFNJWkUpICYmICFTX0lTUkVHKGlwLT5pX2QuZGlfbW9kZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChmYS0+ZnN4X3hmbGFncyAmIFhGU19YRkxBR19FWFRTWklOSEVSSVQpICYmCisJICAgICFTX0lTRElSKGlwLT5pX2QuZGlfbW9kZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKFNfSVNSRUcoaXAtPmlfZC5kaV9tb2RlKSAmJiBpcC0+aV9kLmRpX25leHRlbnRzICYmCisJICAgICgoaXAtPmlfZC5kaV9leHRzaXplIDw8IG1wLT5tX3NiLnNiX2Jsb2NrbG9nKSAhPSBmYS0+ZnN4X2V4dHNpemUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmYS0+ZnN4X2V4dHNpemUgIT0gMCkgeworCQl4ZnNfZXh0bGVuX3QgICAgc2l6ZTsKKwkJeGZzX2ZzYmxvY2tfdCAgIGV4dHNpemVfZnNiOworCisJCWV4dHNpemVfZnNiID0gWEZTX0JfVE9fRlNCKG1wLCBmYS0+ZnN4X2V4dHNpemUpOworCQlpZiAoZXh0c2l6ZV9mc2IgPiBNQVhFWFRMRU4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSB8fAorCQkgICAgKGZhLT5mc3hfeGZsYWdzICYgWEZTX1hGTEFHX1JFQUxUSU1FKSkgeworCQkJc2l6ZSA9IG1wLT5tX3NiLnNiX3JleHRzaXplIDw8IG1wLT5tX3NiLnNiX2Jsb2NrbG9nOworCQl9IGVsc2UgeworCQkJc2l6ZSA9IG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZTsKKwkJCWlmIChleHRzaXplX2ZzYiA+IG1wLT5tX3NiLnNiX2FnYmxvY2tzIC8gMikKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChmYS0+ZnN4X2V4dHNpemUgJSBzaXplKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlCisJCWZhLT5mc3hfeGZsYWdzICY9IH4oWEZTX1hGTEFHX0VYVFNJWkUgfCBYRlNfWEZMQUdfRVhUU1pJTkhFUklUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit4ZnNfaW9jdGxfc2V0YXR0cl9jaGVja19wcm9qaWQoCisJc3RydWN0IHhmc19pbm9kZQkqaXAsCisJc3RydWN0IGZzeGF0dHIJCSpmYSkKK3sKKwkvKiBEaXNhbGxvdyAzMmJpdCBwcm9qZWN0IGlkcyBpZiBwcm9qaWQzMmJpdCBmZWF0dXJlIGlzIG5vdCBlbmFibGVkLiAqLworCWlmIChmYS0+ZnN4X3Byb2ppZCA+IChfX3VpbnQxNl90KS0xICYmCisJICAgICF4ZnNfc2JfdmVyc2lvbl9oYXNwcm9qaWQzMmJpdCgmaXAtPmlfbW91bnQtPm1fc2IpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogUHJvamVjdCBRdW90YSBJRCBzdGF0ZSBpcyBvbmx5IGFsbG93ZWQgdG8gY2hhbmdlIGZyb20gd2l0aGluIHRoZSBpbml0CisJICogbmFtZXNwYWNlLiBFbmZvcmNlIHRoYXQgcmVzdHJpY3Rpb24gb25seSBpZiB3ZSBhcmUgdHJ5aW5nIHRvIGNoYW5nZQorCSAqIHRoZSBxdW90YSBJRCBzdGF0ZS4gRXZlcnl0aGluZyBlbHNlIGlzIGFsbG93ZWQgaW4gdXNlciBuYW1lc3BhY2VzLgorCSAqLworCWlmIChjdXJyZW50X3VzZXJfbnMoKSA9PSAmaW5pdF91c2VyX25zKQorCQlyZXR1cm4gMDsKKworCWlmICh4ZnNfZ2V0X3Byb2ppZChpcCkgIT0gZmEtPmZzeF9wcm9qaWQpCisJCXJldHVybiAtRUlOVkFMOworCWlmICgoZmEtPmZzeF94ZmxhZ3MgJiBYRlNfWEZMQUdfUFJPSklOSEVSSVQpICE9CisJICAgIChpcC0+aV9kLmRpX2ZsYWdzICYgWEZTX0RJRkxBR19QUk9KSU5IRVJJVCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CiAKIFNUQVRJQyBpbnQKIHhmc19pb2N0bF9zZXRhdHRyKAogCXhmc19pbm9kZV90CQkqaXAsCi0Jc3RydWN0IGZzeGF0dHIJCSpmYSwKLQlpbnQJCQltYXNrKQorCXN0cnVjdCBmc3hhdHRyCQkqZmEpCiB7CiAJc3RydWN0IHhmc19tb3VudAkqbXAgPSBpcC0+aV9tb3VudDsKIAlzdHJ1Y3QgeGZzX3RyYW5zCSp0cDsKLQl1bnNpZ25lZCBpbnQJCWxvY2tfZmxhZ3MgPSAwOwogCXN0cnVjdCB4ZnNfZHF1b3QJKnVkcXAgPSBOVUxMOwogCXN0cnVjdCB4ZnNfZHF1b3QJKnBkcXAgPSBOVUxMOwogCXN0cnVjdCB4ZnNfZHF1b3QJKm9sZGRxdW90ID0gTlVMTDsKQEAgLTEwMzQsMTcgKzExNzAsOSBAQAogCiAJdHJhY2VfeGZzX2lvY3RsX3NldGF0dHIoaXApOwogCi0JaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKLQkJcmV0dXJuIC1FUk9GUzsKLQlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCi0JCXJldHVybiAtRUlPOwotCi0JLyoKLQkgKiBEaXNhbGxvdyAzMmJpdCBwcm9qZWN0IGlkcyB3aGVuIHByb2ppZDMyYml0IGZlYXR1cmUgaXMgbm90IGVuYWJsZWQuCi0JICovCi0JaWYgKChtYXNrICYgRlNYX1BST0pJRCkgJiYgKGZhLT5mc3hfcHJvamlkID4gKF9fdWludDE2X3QpLTEpICYmCi0JCQkheGZzX3NiX3ZlcnNpb25faGFzcHJvamlkMzJiaXQoJmlwLT5pX21vdW50LT5tX3NiKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJY29kZSA9IHhmc19pb2N0bF9zZXRhdHRyX2NoZWNrX3Byb2ppZChpcCwgZmEpOworCWlmIChjb2RlKQorCQlyZXR1cm4gY29kZTsKIAogCS8qCiAJICogSWYgZGlzayBxdW90YXMgaXMgb24sIHdlIG1ha2Ugc3VyZSB0aGF0IHRoZSBkcXVvdHMgZG8gZXhpc3Qgb24gZGlzaywKQEAgLTEwNTQsNyArMTE4Miw3IEBACiAJICogSWYgdGhlIElEcyBkbyBjaGFuZ2UgYmVmb3JlIHdlIHRha2UgdGhlIGlsb2NrLCB3ZSdyZSBjb3ZlcmVkCiAJICogYmVjYXVzZSB0aGUgaV8qZHF1b3QgZmllbGRzIHdpbGwgZ2V0IHVwZGF0ZWQgYW55d2F5LgogCSAqLwotCWlmIChYRlNfSVNfUVVPVEFfT04obXApICYmIChtYXNrICYgRlNYX1BST0pJRCkpIHsKKwlpZiAoWEZTX0lTX1FVT1RBX09OKG1wKSkgewogCQljb2RlID0geGZzX3FtX3ZvcF9kcWFsbG9jKGlwLCBpcC0+aV9kLmRpX3VpZCwKIAkJCQkJIGlwLT5pX2QuZGlfZ2lkLCBmYS0+ZnN4X3Byb2ppZCwKIAkJCQkJIFhGU19RTU9QVF9QUVVPVEEsICZ1ZHFwLCBOVUxMLCAmcGRxcCk7CkBAIC0xMDYyLDE3NSArMTE5MCw0OSBAQAogCQkJcmV0dXJuIGNvZGU7CiAJfQogCi0JLyoKLQkgKiBGb3IgdGhlIG90aGVyIGF0dHJpYnV0ZXMsIHdlIGFjcXVpcmUgdGhlIGlub2RlIGxvY2sgYW5kCi0JICogZmlyc3QgZG8gYW4gZXJyb3IgY2hlY2tpbmcgcGFzcy4KLQkgKi8KLQl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX1NFVEFUVFJfTk9UX1NJWkUpOwotCWNvZGUgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgJk1fUkVTKG1wKS0+dHJfaWNoYW5nZSwgMCwgMCk7CisJdHAgPSB4ZnNfaW9jdGxfc2V0YXR0cl9nZXRfdHJhbnMoaXApOworCWlmIChJU19FUlIodHApKSB7CisJCWNvZGUgPSBQVFJfRVJSKHRwKTsKKwkJZ290byBlcnJvcl9mcmVlX2RxdW90czsKKwl9CisKKworCWlmIChYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkgJiYgWEZTX0lTX1BRVU9UQV9PTihtcCkgJiYKKwkgICAgeGZzX2dldF9wcm9qaWQoaXApICE9IGZhLT5mc3hfcHJvamlkKSB7CisJCWNvZGUgPSB4ZnNfcW1fdm9wX2Nob3duX3Jlc2VydmUodHAsIGlwLCB1ZHFwLCBOVUxMLCBwZHFwLAorCQkJCWNhcGFibGUoQ0FQX0ZPV05FUikgPyAgWEZTX1FNT1BUX0ZPUkNFX1JFUyA6IDApOworCQlpZiAoY29kZSkJLyogb3V0IG9mIHF1b3RhICovCisJCQlnb3RvIGVycm9yX3RyYW5zX2NhbmNlbDsKKwl9CisKKwljb2RlID0geGZzX2lvY3RsX3NldGF0dHJfY2hlY2tfZXh0c2l6ZShpcCwgZmEpOwogCWlmIChjb2RlKQotCQlnb3RvIGVycm9yX3JldHVybjsKKwkJZ290byBlcnJvcl90cmFuc19jYW5jZWw7CiAKLQlsb2NrX2ZsYWdzID0gWEZTX0lMT0NLX0VYQ0w7Ci0JeGZzX2lsb2NrKGlwLCBsb2NrX2ZsYWdzKTsKKwljb2RlID0geGZzX2lvY3RsX3NldGF0dHJfeGZsYWdzKHRwLCBpcCwgZmEpOworCWlmIChjb2RlKQorCQlnb3RvIGVycm9yX3RyYW5zX2NhbmNlbDsKIAogCS8qCi0JICogQ0FQX0ZPV05FUiBvdmVycmlkZXMgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisJICogQ2hhbmdlIGZpbGUgb3duZXJzaGlwLiAgTXVzdCBiZSB0aGUgb3duZXIgb3IgcHJpdmlsZWdlZC4gIENBUF9GU0VUSUQKKwkgKiBvdmVycmlkZXMgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CiAJICoKLQkgKiBUaGUgdXNlciBJRCBvZiB0aGUgY2FsbGluZyBwcm9jZXNzIG11c3QgYmUgZXF1YWwKLQkgKiB0byB0aGUgZmlsZSBvd25lciBJRCwgZXhjZXB0IGluIGNhc2VzIHdoZXJlIHRoZQotCSAqIENBUF9GU0VUSUQgY2FwYWJpbGl0eSBpcyBhcHBsaWNhYmxlLgorCSAqIFRoZSBzZXQtdXNlci1JRCBhbmQgc2V0LWdyb3VwLUlEIGJpdHMgb2YgYSBmaWxlIHdpbGwgYmUgY2xlYXJlZCB1cG9uCisJICogc3VjY2Vzc2Z1bCByZXR1cm4gZnJvbSBjaG93bigpCiAJICovCi0JaWYgKCFpbm9kZV9vd25lcl9vcl9jYXBhYmxlKFZGU19JKGlwKSkpIHsKLQkJY29kZSA9IC1FUEVSTTsKLQkJZ290byBlcnJvcl9yZXR1cm47Ci0JfQogCi0JLyoKLQkgKiBEbyBhIHF1b3RhIHJlc2VydmF0aW9uIG9ubHkgaWYgcHJvamlkIGlzIGFjdHVhbGx5IGdvaW5nIHRvIGNoYW5nZS4KLQkgKiBPbmx5IGFsbG93IGNoYW5naW5nIG9mIHByb2ppZCBmcm9tIGluaXRfdXNlcl9ucyBzaW5jZSBpdCBpcyBhCi0JICogbm9uIHVzZXIgbmFtZXNwYWNlIGF3YXJlIGlkZW50aWZpZXIuCi0JICovCi0JaWYgKG1hc2sgJiBGU1hfUFJPSklEKSB7Ci0JCWlmIChjdXJyZW50X3VzZXJfbnMoKSAhPSAmaW5pdF91c2VyX25zKSB7Ci0JCQljb2RlID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCWlmICgoaXAtPmlfZC5kaV9tb2RlICYgKFNfSVNVSUR8U19JU0dJRCkpICYmCisJICAgICFjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoVkZTX0koaXApLCBDQVBfRlNFVElEKSkKKwkJaXAtPmlfZC5kaV9tb2RlICY9IH4oU19JU1VJRHxTX0lTR0lEKTsKKworCS8qIENoYW5nZSB0aGUgb3duZXJzaGlwcyBhbmQgcmVnaXN0ZXIgcHJvamVjdCBxdW90YSBtb2RpZmljYXRpb25zICovCisJaWYgKHhmc19nZXRfcHJvamlkKGlwKSAhPSBmYS0+ZnN4X3Byb2ppZCkgeworCQlpZiAoWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApICYmIFhGU19JU19QUVVPVEFfT04obXApKSB7CisJCQlvbGRkcXVvdCA9IHhmc19xbV92b3BfY2hvd24odHAsIGlwLAorCQkJCQkJJmlwLT5pX3BkcXVvdCwgcGRxcCk7CiAJCX0KLQotCQlpZiAoWEZTX0lTX1FVT1RBX1JVTk5JTkcobXApICYmCi0JCSAgICBYRlNfSVNfUFFVT1RBX09OKG1wKSAmJgotCQkgICAgeGZzX2dldF9wcm9qaWQoaXApICE9IGZhLT5mc3hfcHJvamlkKSB7Ci0JCQlBU1NFUlQodHApOwotCQkJY29kZSA9IHhmc19xbV92b3BfY2hvd25fcmVzZXJ2ZSh0cCwgaXAsIHVkcXAsIE5VTEwsCi0JCQkJCQlwZHFwLCBjYXBhYmxlKENBUF9GT1dORVIpID8KLQkJCQkJCVhGU19RTU9QVF9GT1JDRV9SRVMgOiAwKTsKLQkJCWlmIChjb2RlKQkvKiBvdXQgb2YgcXVvdGEgKi8KLQkJCQlnb3RvIGVycm9yX3JldHVybjsKLQkJfQotCX0KLQotCWlmIChtYXNrICYgRlNYX0VYVFNJWkUpIHsKLQkJLyoKLQkJICogQ2FuJ3QgY2hhbmdlIGV4dGVudCBzaXplIGlmIGFueSBleHRlbnRzIGFyZSBhbGxvY2F0ZWQuCi0JCSAqLwotCQlpZiAoaXAtPmlfZC5kaV9uZXh0ZW50cyAmJgotCQkgICAgKChpcC0+aV9kLmRpX2V4dHNpemUgPDwgbXAtPm1fc2Iuc2JfYmxvY2tsb2cpICE9Ci0JCSAgICAgZmEtPmZzeF9leHRzaXplKSkgewotCQkJY29kZSA9IC1FSU5WQUw7CS8qIEVGQklHPyAqLwotCQkJZ290byBlcnJvcl9yZXR1cm47Ci0JCX0KLQotCQkvKgotCQkgKiBFeHRlbnQgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGFwcHJvcHJpYXRlIGJsb2NrCi0JCSAqIHNpemUsIGlmIHNldCBhdCBhbGwuIEl0IG11c3QgYWxzbyBiZSBzbWFsbGVyIHRoYW4gdGhlCi0JCSAqIG1heGltdW0gZXh0ZW50IHNpemUgc3VwcG9ydGVkIGJ5IHRoZSBmaWxlc3lzdGVtLgotCQkgKgotCQkgKiBBbHNvLCBmb3Igbm9uLXJlYWx0aW1lIGZpbGVzLCBsaW1pdCB0aGUgZXh0ZW50IHNpemUgaGludCB0bwotCQkgKiBoYWxmIHRoZSBzaXplIG9mIHRoZSBBR3MgaW4gdGhlIGZpbGVzeXN0ZW0gc28gYWxpZ25tZW50Ci0JCSAqIGRvZXNuJ3QgcmVzdWx0IGluIGV4dGVudHMgbGFyZ2VyIHRoYW4gYW4gQUcuCi0JCSAqLwotCQlpZiAoZmEtPmZzeF9leHRzaXplICE9IDApIHsKLQkJCXhmc19leHRsZW5fdCAgICBzaXplOwotCQkJeGZzX2ZzYmxvY2tfdCAgIGV4dHNpemVfZnNiOwotCi0JCQlleHRzaXplX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgZmEtPmZzeF9leHRzaXplKTsKLQkJCWlmIChleHRzaXplX2ZzYiA+IE1BWEVYVExFTikgewotCQkJCWNvZGUgPSAtRUlOVkFMOwotCQkJCWdvdG8gZXJyb3JfcmV0dXJuOwotCQkJfQotCi0JCQlpZiAoWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSB8fAotCQkJICAgICgobWFzayAmIEZTWF9YRkxBR1MpICYmCi0JCQkgICAgKGZhLT5mc3hfeGZsYWdzICYgWEZTX1hGTEFHX1JFQUxUSU1FKSkpIHsKLQkJCQlzaXplID0gbXAtPm1fc2Iuc2JfcmV4dHNpemUgPDwKLQkJCQkgICAgICAgbXAtPm1fc2Iuc2JfYmxvY2tsb2c7Ci0JCQl9IGVsc2UgewotCQkJCXNpemUgPSBtcC0+bV9zYi5zYl9ibG9ja3NpemU7Ci0JCQkJaWYgKGV4dHNpemVfZnNiID4gbXAtPm1fc2Iuc2JfYWdibG9ja3MgLyAyKSB7Ci0JCQkJCWNvZGUgPSAtRUlOVkFMOwotCQkJCQlnb3RvIGVycm9yX3JldHVybjsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChmYS0+ZnN4X2V4dHNpemUgJSBzaXplKSB7Ci0JCQkJY29kZSA9IC1FSU5WQUw7Ci0JCQkJZ290byBlcnJvcl9yZXR1cm47Ci0JCQl9Ci0JCX0KLQl9Ci0KLQotCWlmIChtYXNrICYgRlNYX1hGTEFHUykgewotCQkvKgotCQkgKiBDYW4ndCBjaGFuZ2UgcmVhbHRpbWUgZmxhZyBpZiBhbnkgZXh0ZW50cyBhcmUgYWxsb2NhdGVkLgotCQkgKi8KLQkJaWYgKChpcC0+aV9kLmRpX25leHRlbnRzIHx8IGlwLT5pX2RlbGF5ZWRfYmxrcykgJiYKLQkJICAgIChYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApKSAhPQotCQkgICAgKGZhLT5mc3hfeGZsYWdzICYgWEZTX1hGTEFHX1JFQUxUSU1FKSkgewotCQkJY29kZSA9IC1FSU5WQUw7CS8qIEVGQklHPyAqLwotCQkJZ290byBlcnJvcl9yZXR1cm47Ci0JCX0KLQotCQkvKgotCQkgKiBJZiByZWFsdGltZSBmbGFnIGlzIHNldCB0aGVuIG11c3QgaGF2ZSByZWFsdGltZSBkYXRhLgotCQkgKi8KLQkJaWYgKChmYS0+ZnN4X3hmbGFncyAmIFhGU19YRkxBR19SRUFMVElNRSkpIHsKLQkJCWlmICgobXAtPm1fc2Iuc2JfcmJsb2NrcyA9PSAwKSB8fAotCQkJICAgIChtcC0+bV9zYi5zYl9yZXh0c2l6ZSA9PSAwKSB8fAotCQkJICAgIChpcC0+aV9kLmRpX2V4dHNpemUgJSBtcC0+bV9zYi5zYl9yZXh0c2l6ZSkpIHsKLQkJCQljb2RlID0gLUVJTlZBTDsKLQkJCQlnb3RvIGVycm9yX3JldHVybjsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSAqIENhbid0IG1vZGlmeSBhbiBpbW11dGFibGUvYXBwZW5kLW9ubHkgZmlsZSB1bmxlc3MKLQkJICogd2UgaGF2ZSBhcHByb3ByaWF0ZSBwZXJtaXNzaW9uLgotCQkgKi8KLQkJaWYgKChpcC0+aV9kLmRpX2ZsYWdzICYKLQkJCQkoWEZTX0RJRkxBR19JTU1VVEFCTEV8WEZTX0RJRkxBR19BUFBFTkQpIHx8Ci0JCSAgICAgKGZhLT5mc3hfeGZsYWdzICYKLQkJCQkoWEZTX1hGTEFHX0lNTVVUQUJMRSB8IFhGU19YRkxBR19BUFBFTkQpKSkgJiYKLQkJICAgICFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKSB7Ci0JCQljb2RlID0gLUVQRVJNOwotCQkJZ290byBlcnJvcl9yZXR1cm47Ci0JCX0KLQl9Ci0KLQl4ZnNfdHJhbnNfaWpvaW4odHAsIGlwLCAwKTsKLQotCS8qCi0JICogQ2hhbmdlIGZpbGUgb3duZXJzaGlwLiAgTXVzdCBiZSB0aGUgb3duZXIgb3IgcHJpdmlsZWdlZC4KLQkgKi8KLQlpZiAobWFzayAmIEZTWF9QUk9KSUQpIHsKLQkJLyoKLQkJICogQ0FQX0ZTRVRJRCBvdmVycmlkZXMgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6Ci0JCSAqCi0JCSAqIFRoZSBzZXQtdXNlci1JRCBhbmQgc2V0LWdyb3VwLUlEIGJpdHMgb2YgYSBmaWxlIHdpbGwgYmUKLQkJICogY2xlYXJlZCB1cG9uIHN1Y2Nlc3NmdWwgcmV0dXJuIGZyb20gY2hvd24oKQotCQkgKi8KLQkJaWYgKChpcC0+aV9kLmRpX21vZGUgJiAoU19JU1VJRHxTX0lTR0lEKSkgJiYKLQkJICAgICFjYXBhYmxlX3dydF9pbm9kZV91aWRnaWQoVkZTX0koaXApLCBDQVBfRlNFVElEKSkKLQkJCWlwLT5pX2QuZGlfbW9kZSAmPSB+KFNfSVNVSUR8U19JU0dJRCk7Ci0KLQkJLyoKLQkJICogQ2hhbmdlIHRoZSBvd25lcnNoaXBzIGFuZCByZWdpc3RlciBxdW90YSBtb2RpZmljYXRpb25zCi0JCSAqIGluIHRoZSB0cmFuc2FjdGlvbi4KLQkJICovCi0JCWlmICh4ZnNfZ2V0X3Byb2ppZChpcCkgIT0gZmEtPmZzeF9wcm9qaWQpIHsKLQkJCWlmIChYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkgJiYgWEZTX0lTX1BRVU9UQV9PTihtcCkpIHsKLQkJCQlvbGRkcXVvdCA9IHhmc19xbV92b3BfY2hvd24odHAsIGlwLAotCQkJCQkJCSZpcC0+aV9wZHF1b3QsIHBkcXApOwotCQkJfQotCQkJQVNTRVJUKGlwLT5pX2QuZGlfdmVyc2lvbiA+IDEpOwotCQkJeGZzX3NldF9wcm9qaWQoaXAsIGZhLT5mc3hfcHJvamlkKTsKLQkJfQotCi0JfQotCi0JaWYgKG1hc2sgJiBGU1hfWEZMQUdTKSB7Ci0JCXhmc19zZXRfZGlmbGFncyhpcCwgZmEtPmZzeF94ZmxhZ3MpOwotCQl4ZnNfZGlmbGFnc190b19saW51eChpcCk7CisJCUFTU0VSVChpcC0+aV9kLmRpX3ZlcnNpb24gPiAxKTsKKwkJeGZzX3NldF9wcm9qaWQoaXAsIGZhLT5mc3hfcHJvamlkKTsKIAl9CiAKIAkvKgpAQCAtMTIzOCwzNCArMTI0MCwxMiBAQAogCSAqIGV4dGVudCBzaXplIGhpbnQgc2hvdWxkIGJlIHNldCBvbiB0aGUgaW5vZGUuIElmIG5vIGV4dGVudCBzaXplIGZsYWdzCiAJICogYXJlIHNldCBvbiB0aGUgaW5vZGUgdGhlbiB1bmNvbmRpdGlvbmFsbHkgY2xlYXIgdGhlIGV4dGVudCBzaXplIGhpbnQuCiAJICovCi0JaWYgKG1hc2sgJiBGU1hfRVhUU0laRSkgewotCQlpbnQJZXh0c2l6ZSA9IDA7CisJaWYgKGlwLT5pX2QuZGlfZmxhZ3MgJiAoWEZTX0RJRkxBR19FWFRTSVpFIHwgWEZTX0RJRkxBR19FWFRTWklOSEVSSVQpKQorCQlpcC0+aV9kLmRpX2V4dHNpemUgPSBmYS0+ZnN4X2V4dHNpemUgPj4gbXAtPm1fc2Iuc2JfYmxvY2tsb2c7CisJZWxzZQorCQlpcC0+aV9kLmRpX2V4dHNpemUgPSAwOwogCi0JCWlmIChpcC0+aV9kLmRpX2ZsYWdzICYKLQkJCQkoWEZTX0RJRkxBR19FWFRTSVpFIHwgWEZTX0RJRkxBR19FWFRTWklOSEVSSVQpKQotCQkJZXh0c2l6ZSA9IGZhLT5mc3hfZXh0c2l6ZSA+PiBtcC0+bV9zYi5zYl9ibG9ja2xvZzsKLQkJaXAtPmlfZC5kaV9leHRzaXplID0gZXh0c2l6ZTsKLQl9Ci0KLQl4ZnNfdHJhbnNfaWNoZ3RpbWUodHAsIGlwLCBYRlNfSUNIR1RJTUVfQ0hHKTsKLQl4ZnNfdHJhbnNfbG9nX2lub2RlKHRwLCBpcCwgWEZTX0lMT0dfQ09SRSk7Ci0KLQlYRlNfU1RBVFNfSU5DKHhzX2lnX2F0dHJjaGcpOwotCi0JLyoKLQkgKiBJZiB0aGlzIGlzIGEgc3luY2hyb25vdXMgbW91bnQsIG1ha2Ugc3VyZSB0aGF0IHRoZQotCSAqIHRyYW5zYWN0aW9uIGdvZXMgdG8gZGlzayBiZWZvcmUgcmV0dXJuaW5nIHRvIHRoZSB1c2VyLgotCSAqIFRoaXMgaXMgc2xpZ2h0bHkgc3ViLW9wdGltYWwgaW4gdGhhdCB0cnVuY2F0ZXMgcmVxdWlyZQotCSAqIHR3byBzeW5jIHRyYW5zYWN0aW9ucyBpbnN0ZWFkIG9mIG9uZSBmb3Igd3N5bmMgZmlsZXN5c3RlbXMuCi0JICogT25lIGZvciB0aGUgdHJ1bmNhdGUgYW5kIG9uZSBmb3IgdGhlIHRpbWVzdGFtcHMgc2luY2Ugd2UKLQkgKiBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgdGltZXN0YW1wcyB1bmxlc3Mgd2UncmUgc3VyZSB0aGUKLQkgKiB0cnVuY2F0ZSB3b3JrZWQuICBUcnVuY2F0ZXMgYXJlIGxlc3MgdGhhbiAxJSBvZiB0aGUgbGFkZGlzCi0JICogbWl4IHNvIHRoaXMgcHJvYmFibHkgaXNuJ3Qgd29ydGggdGhlIHRyb3VibGUgdG8gb3B0aW1pemUuCi0JICovCi0JaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1dTWU5DKQotCQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwogCWNvZGUgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKLQl4ZnNfaXVubG9jayhpcCwgbG9ja19mbGFncyk7CiAKIAkvKgogCSAqIFJlbGVhc2UgYW55IGRxdW90KHMpIHRoZSBpbm9kZSBoYWQga2VwdCBiZWZvcmUgY2hvd24uCkBAIC0xMjc2LDEyICsxMjU2LDExIEBACiAKIAlyZXR1cm4gY29kZTsKIAotIGVycm9yX3JldHVybjoKK2Vycm9yX3RyYW5zX2NhbmNlbDoKKwl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKK2Vycm9yX2ZyZWVfZHF1b3RzOgogCXhmc19xbV9kcXJlbGUodWRxcCk7CiAJeGZzX3FtX2RxcmVsZShwZHFwKTsKLQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKLQlpZiAobG9ja19mbGFncykKLQkJeGZzX2l1bmxvY2soaXAsIGxvY2tfZmxhZ3MpOwogCXJldHVybiBjb2RlOwogfQogCkBAIC0xMjkyLDIwICsxMjcxLDE1IEBACiAJdm9pZAkJCV9fdXNlciAqYXJnKQogewogCXN0cnVjdCBmc3hhdHRyCQlmYTsKLQl1bnNpZ25lZCBpbnQJCW1hc2s7CiAJaW50IGVycm9yOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZmYSwgYXJnLCBzaXplb2YoZmEpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQltYXNrID0gRlNYX1hGTEFHUyB8IEZTWF9FWFRTSVpFIHwgRlNYX1BST0pJRDsKLQlpZiAoZmlscC0+Zl9mbGFncyAmIChPX05ERUxBWXxPX05PTkJMT0NLKSkKLQkJbWFzayB8PSBGU1hfTk9OQkxPQ0s7Ci0KIAllcnJvciA9IG1udF93YW50X3dyaXRlX2ZpbGUoZmlscCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7Ci0JZXJyb3IgPSB4ZnNfaW9jdGxfc2V0YXR0cihpcCwgJmZhLCBtYXNrKTsKKwllcnJvciA9IHhmc19pb2N0bF9zZXRhdHRyKGlwLCAmZmEpOwogCW1udF9kcm9wX3dyaXRlX2ZpbGUoZmlscCk7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMTMyNSwxNCArMTI5OSwxNCBAQAogCiBTVEFUSUMgaW50CiB4ZnNfaW9jX3NldHhmbGFncygKLQl4ZnNfaW5vZGVfdAkJKmlwLAorCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAogCXN0cnVjdCBmaWxlCQkqZmlscCwKIAl2b2lkCQkJX191c2VyICphcmcpCiB7CisJc3RydWN0IHhmc190cmFucwkqdHA7CiAJc3RydWN0IGZzeGF0dHIJCWZhOwogCXVuc2lnbmVkIGludAkJZmxhZ3M7Ci0JdW5zaWduZWQgaW50CQltYXNrOwotCWludCBlcnJvcjsKKwlpbnQJCQllcnJvcjsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmZmxhZ3MsIGFyZywgc2l6ZW9mKGZsYWdzKSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTM0MiwxNSArMTMxNiwyNiBAQAogCQkgICAgICBGU19TWU5DX0ZMKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JbWFzayA9IEZTWF9YRkxBR1M7Ci0JaWYgKGZpbHAtPmZfZmxhZ3MgJiAoT19OREVMQVl8T19OT05CTE9DSykpCi0JCW1hc2sgfD0gRlNYX05PTkJMT0NLOwogCWZhLmZzeF94ZmxhZ3MgPSB4ZnNfbWVyZ2VfaW9jX3hmbGFncyhmbGFncywgeGZzX2lwMnhmbGFncyhpcCkpOwogCiAJZXJyb3IgPSBtbnRfd2FudF93cml0ZV9maWxlKGZpbHApOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCWVycm9yID0geGZzX2lvY3RsX3NldGF0dHIoaXAsICZmYSwgbWFzayk7CisKKwl0cCA9IHhmc19pb2N0bF9zZXRhdHRyX2dldF90cmFucyhpcCk7CisJaWYgKElTX0VSUih0cCkpIHsKKwkJZXJyb3IgPSBQVFJfRVJSKHRwKTsKKwkJZ290byBvdXRfZHJvcF93cml0ZTsKKwl9CisKKwllcnJvciA9IHhmc19pb2N0bF9zZXRhdHRyX3hmbGFncyh0cCwgaXAsICZmYSk7CisJaWYgKGVycm9yKSB7CisJCXhmc190cmFuc19jYW5jZWwodHAsIDApOworCQlnb3RvIG91dF9kcm9wX3dyaXRlOworCX0KKworCWVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgMCk7CitvdXRfZHJvcF93cml0ZToKIAltbnRfZHJvcF93cml0ZV9maWxlKGZpbHApOwogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9jdGwzMi5jIGIvZnMveGZzL3hmc19pb2N0bDMyLmMKaW5kZXggZWM2NzcyOC4uYmZjN2M3YyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb2N0bDMyLmMKKysrIGIvZnMveGZzL3hmc19pb2N0bDMyLmMKQEAgLTQyMyw3ICs0MjMsNyBAQAogCiAJb3BzID0gbWVtZHVwX3VzZXIoY29tcGF0X3B0cihhbV9ocmVxLm9wcyksIHNpemUpOwogCWlmIChJU19FUlIob3BzKSkgewotCQllcnJvciA9IC1QVFJfRVJSKG9wcyk7CisJCWVycm9yID0gUFRSX0VSUihvcHMpOwogCQlnb3RvIG91dF9kcHV0OwogCX0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5jIGIvZnMveGZzL3hmc19pb21hcC5jCmluZGV4IGM5ODBlMmEuLmNjYjFkZDAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuYworKysgYi9mcy94ZnMveGZzX2lvbWFwLmMKQEAgLTgwMiw3ICs4MDIsNyBAQAogeGZzX2lvbWFwX3dyaXRlX3Vud3JpdHRlbigKIAl4ZnNfaW5vZGVfdAkqaXAsCiAJeGZzX29mZl90CW9mZnNldCwKLQlzaXplX3QJCWNvdW50KQorCXhmc19vZmZfdAljb3VudCkKIHsKIAl4ZnNfbW91bnRfdAkqbXAgPSBpcC0+aV9tb3VudDsKIAl4ZnNfZmlsZW9mZl90CW9mZnNldF9mc2I7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lvbWFwLmggYi9mcy94ZnMveGZzX2lvbWFwLmgKaW5kZXggNDExZmJiOC4uODY4OGU2NiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb21hcC5oCisrKyBiL2ZzL3hmcy94ZnNfaW9tYXAuaApAQCAtMjcsNiArMjcsNiBAQAogCQkJc3RydWN0IHhmc19ibWJ0X2lyZWMgKik7CiBpbnQgeGZzX2lvbWFwX3dyaXRlX2FsbG9jYXRlKHN0cnVjdCB4ZnNfaW5vZGUgKiwgeGZzX29mZl90LAogCQkJc3RydWN0IHhmc19ibWJ0X2lyZWMgKik7Ci1pbnQgeGZzX2lvbWFwX3dyaXRlX3Vud3JpdHRlbihzdHJ1Y3QgeGZzX2lub2RlICosIHhmc19vZmZfdCwgc2l6ZV90KTsKK2ludCB4ZnNfaW9tYXBfd3JpdGVfdW53cml0dGVuKHN0cnVjdCB4ZnNfaW5vZGUgKiwgeGZzX29mZl90LCB4ZnNfb2ZmX3QpOwogCiAjZW5kaWYgLyogX19YRlNfSU9NQVBfSF9fKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW9wcy5jIGIvZnMveGZzL3hmc19pb3BzLmMKaW5kZXggYzUwMzExYy4uY2U4MGVlYiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pb3BzLmMKKysrIGIvZnMveGZzL3hmc19pb3BzLmMKQEAgLTM4MCwxOCArMzgwLDI3IEBACiAJc3RydWN0IGlub2RlCSpvZGlyLAogCXN0cnVjdCBkZW50cnkJKm9kZW50cnksCiAJc3RydWN0IGlub2RlCSpuZGlyLAotCXN0cnVjdCBkZW50cnkJKm5kZW50cnkpCisJc3RydWN0IGRlbnRyeQkqbmRlbnRyeSwKKwl1bnNpZ25lZCBpbnQJZmxhZ3MpCiB7CiAJc3RydWN0IGlub2RlCSpuZXdfaW5vZGUgPSBuZGVudHJ5LT5kX2lub2RlOworCWludAkJb21vZGUgPSAwOwogCXN0cnVjdCB4ZnNfbmFtZQlvbmFtZTsKIAlzdHJ1Y3QgeGZzX25hbWUJbm5hbWU7CiAKLQl4ZnNfZGVudHJ5X3RvX25hbWUoJm9uYW1lLCBvZGVudHJ5LCAwKTsKKwlpZiAoZmxhZ3MgJiB+KFJFTkFNRV9OT1JFUExBQ0UgfCBSRU5BTUVfRVhDSEFOR0UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGlmIHdlIGFyZSBleGNoYW5naW5nIGZpbGVzLCB3ZSBuZWVkIHRvIHNldCBpX21vZGUgb2YgYm90aCBmaWxlcyAqLworCWlmIChmbGFncyAmIFJFTkFNRV9FWENIQU5HRSkKKwkJb21vZGUgPSBuZGVudHJ5LT5kX2lub2RlLT5pX21vZGU7CisKKwl4ZnNfZGVudHJ5X3RvX25hbWUoJm9uYW1lLCBvZGVudHJ5LCBvbW9kZSk7CiAJeGZzX2RlbnRyeV90b19uYW1lKCZubmFtZSwgbmRlbnRyeSwgb2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKTsKIAogCXJldHVybiB4ZnNfcmVuYW1lKFhGU19JKG9kaXIpLCAmb25hbWUsIFhGU19JKG9kZW50cnktPmRfaW5vZGUpLAotCQkJICBYRlNfSShuZGlyKSwgJm5uYW1lLCBuZXdfaW5vZGUgPwotCQkJCQkJWEZTX0kobmV3X2lub2RlKSA6IE5VTEwpOworCQkJICBYRlNfSShuZGlyKSwgJm5uYW1lLAorCQkJICBuZXdfaW5vZGUgPyBYRlNfSShuZXdfaW5vZGUpIDogTlVMTCwgZmxhZ3MpOwogfQogCiAvKgpAQCAtMTE0NCw3ICsxMTUzLDcgQEAKIAkgKi8KIAkucm1kaXIJCQk9IHhmc192bl91bmxpbmssCiAJLm1rbm9kCQkJPSB4ZnNfdm5fbWtub2QsCi0JLnJlbmFtZQkJCT0geGZzX3ZuX3JlbmFtZSwKKwkucmVuYW1lMgkJPSB4ZnNfdm5fcmVuYW1lLAogCS5nZXRfYWNsCQk9IHhmc19nZXRfYWNsLAogCS5zZXRfYWNsCQk9IHhmc19zZXRfYWNsLAogCS5nZXRhdHRyCQk9IHhmc192bl9nZXRhdHRyLApAQCAtMTE3Miw3ICsxMTgxLDcgQEAKIAkgKi8KIAkucm1kaXIJCQk9IHhmc192bl91bmxpbmssCiAJLm1rbm9kCQkJPSB4ZnNfdm5fbWtub2QsCi0JLnJlbmFtZQkJCT0geGZzX3ZuX3JlbmFtZSwKKwkucmVuYW1lMgkJPSB4ZnNfdm5fcmVuYW1lLAogCS5nZXRfYWNsCQk9IHhmc19nZXRfYWNsLAogCS5zZXRfYWNsCQk9IHhmc19zZXRfYWNsLAogCS5nZXRhdHRyCQk9IHhmc192bl9nZXRhdHRyLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuYyBiL2ZzL3hmcy94ZnNfbG9nLmMKaW5kZXggZTQwOGJmNS4uYmNjN2NmYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuYworKysgYi9mcy94ZnMveGZzX2xvZy5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAieGZzX2Zzb3BzLmgiCiAjaW5jbHVkZSAieGZzX2Nrc3VtLmgiCiAjaW5jbHVkZSAieGZzX3N5c2ZzLmgiCisjaW5jbHVkZSAieGZzX3NiLmgiCiAKIGttZW1fem9uZV90CSp4ZnNfbG9nX3RpY2tldF96b25lOwogCkBAIC0xMjkwLDkgKzEyOTEsMjAgQEAKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGxvZy0+bF9tcDsKIAogCS8qIGRnYzogZXJyb3JzIGlnbm9yZWQgLSBub3QgZmF0YWwgYW5kIG5vd2hlcmUgdG8gcmVwb3J0IHRoZW0gKi8KLQlpZiAoeGZzX2xvZ19uZWVkX2NvdmVyZWQobXApKQotCQl4ZnNfZnNfbG9nX2R1bW15KG1wKTsKLQllbHNlCisJaWYgKHhmc19sb2dfbmVlZF9jb3ZlcmVkKG1wKSkgeworCQkvKgorCQkgKiBEdW1wIGEgdHJhbnNhY3Rpb24gaW50byB0aGUgbG9nIHRoYXQgY29udGFpbnMgbm8gcmVhbCBjaGFuZ2UuCisJCSAqIFRoaXMgaXMgbmVlZGVkIHRvIHN0YW1wIHRoZSBjdXJyZW50IHRhaWwgTFNOIGludG8gdGhlIGxvZworCQkgKiBkdXJpbmcgdGhlIGNvdmVyaW5nIG9wZXJhdGlvbi4KKwkJICoKKwkJICogV2UgY2Fubm90IHVzZSBhbiBpbm9kZSBoZXJlIGZvciB0aGlzIC0gdGhhdCB3aWxsIHB1c2ggZGlydHkKKwkJICogc3RhdGUgYmFjayB1cCBpbnRvIHRoZSBWRlMgYW5kIHRoZW4gcGVyaW9kaWMgaW5vZGUgZmx1c2hpbmcKKwkJICogd2lsbCBwcmV2ZW50IGxvZyBjb3ZlcmluZyBmcm9tIG1ha2luZyBwcm9ncmVzcy4gSGVuY2Ugd2UKKwkJICogc3luY2hyb25vdXNseSBsb2cgdGhlIHN1cGVyYmxvY2sgaW5zdGVhZCB0byBlbnN1cmUgdGhlCisJCSAqIHN1cGVyYmxvY2sgaXMgaW1tZWRpYXRlbHkgdW5waW5uZWQgYW5kIGNhbiBiZSB3cml0dGVuIGJhY2suCisJCSAqLworCQl4ZnNfc3luY19zYihtcCwgdHJ1ZSk7CisJfSBlbHNlCiAJCXhmc19sb2dfZm9yY2UobXAsIDApOwogCiAJLyogc3RhcnQgcHVzaGluZyBhbGwgdGhlIG1ldGFkYXRhIHRoYXQgaXMgY3VycmVudGx5IGRpcnR5ICovCkBAIC0xMzk1LDYgKzE0MDcsOCBAQAogCUFTU0VSVCh4ZnNfYnVmX2lzbG9ja2VkKGJwKSk7CiAJeGZzX2J1Zl91bmxvY2soYnApOwogCisJLyogdXNlIGhpZ2ggcHJpb3JpdHkgd3EgZm9yIGxvZyBJL08gY29tcGxldGlvbiAqLworCWJwLT5iX2lvZW5kX3dxID0gbXAtPm1fbG9nX3dvcmtxdWV1ZTsKIAlicC0+Yl9pb2RvbmUgPSB4bG9nX2lvZG9uZTsKIAlsb2ctPmxfeGJ1ZiA9IGJwOwogCkBAIC0xNDI3LDYgKzE0NDEsOCBAQAogCQlBU1NFUlQoeGZzX2J1Zl9pc2xvY2tlZChicCkpOwogCQl4ZnNfYnVmX3VubG9jayhicCk7CiAKKwkJLyogdXNlIGhpZ2ggcHJpb3JpdHkgd3EgZm9yIGxvZyBJL08gY29tcGxldGlvbiAqLworCQlicC0+Yl9pb2VuZF93cSA9IG1wLT5tX2xvZ193b3JrcXVldWU7CiAJCWJwLT5iX2lvZG9uZSA9IHhsb2dfaW9kb25lOwogCQlpY2xvZy0+aWNfYnAgPSBicDsKIAkJaWNsb2ctPmljX2RhdGEgPSBicC0+Yl9hZGRyOwpAQCAtMTgwNiw4ICsxODIyLDYgQEAKIAlYRlNfQlVGX1pFUk9GTEFHUyhicCk7CiAJWEZTX0JVRl9BU1lOQyhicCk7CiAJYnAtPmJfZmxhZ3MgfD0gWEJGX1NZTkNJTzsKLQkvKiB1c2UgaGlnaCBwcmlvcml0eSBjb21wbGV0aW9uIHdxICovCi0JYnAtPmJfaW9lbmRfd3EgPSBsb2ctPmxfbXAtPm1fbG9nX3dvcmtxdWV1ZTsKIAogCWlmIChsb2ctPmxfbXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfQkFSUklFUikgewogCQlicC0+Yl9mbGFncyB8PSBYQkZfRlVBOwpAQCAtMTg1Niw4ICsxODcwLDYgQEAKIAkJYnAtPmJfZmxhZ3MgfD0gWEJGX1NZTkNJTzsKIAkJaWYgKGxvZy0+bF9tcC0+bV9mbGFncyAmIFhGU19NT1VOVF9CQVJSSUVSKQogCQkJYnAtPmJfZmxhZ3MgfD0gWEJGX0ZVQTsKLQkJLyogdXNlIGhpZ2ggcHJpb3JpdHkgY29tcGxldGlvbiB3cSAqLwotCQlicC0+Yl9pb2VuZF93cSA9IGxvZy0+bF9tcC0+bV9sb2dfd29ya3F1ZXVlOwogCiAJCUFTU0VSVChYRlNfQlVGX0FERFIoYnApIDw9IGxvZy0+bF9sb2dCQnNpemUtMSk7CiAJCUFTU0VSVChYRlNfQlVGX0FERFIoYnApICsgQlRPQkIoY291bnQpIDw9IGxvZy0+bF9sb2dCQnNpemUpOwpAQCAtMjAyNyw3ICsyMDM5LDcgQEAKIAkJIiAgdG90YWwgcmVnICAgPSAldSBieXRlcyAoby9mbG93ID0gJXUgYnl0ZXMpXG4iCiAJCSIgIG9waGRycyAgICAgID0gJXUgKG9waGRyIHNwYWNlID0gJXUgYnl0ZXMpXG4iCiAJCSIgIG9waGRyICsgcmVnID0gJXUgYnl0ZXNcbiIKLQkJIiAgbnVtIHJlZ2lvbnMgPSAldVxuIiwKKwkJIiAgbnVtIHJlZ2lvbnMgPSAldSIsCiAJCSgodGlja2V0LT50X3RyYW5zX3R5cGUgPD0gMCB8fAogCQkgIHRpY2tldC0+dF90cmFuc190eXBlID4gWEZTX1RSQU5TX1RZUEVfTUFYKSA/CiAJCSAgImJhZC10cmFucy10eXBlIiA6IHRyYW5zX3R5cGVfc3RyW3RpY2tldC0+dF90cmFuc190eXBlLTFdKSwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuYyBiL2ZzL3hmcy94ZnNfbW91bnQuYwppbmRleCBkM2QzODgzLi40ZmE4MGU2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21vdW50LmMKKysrIGIvZnMveGZzL3hmc19tb3VudC5jCkBAIC00MDgsMTEgKzQwOCwxMSBAQAogCQlpZiAoeGZzX3NiX3ZlcnNpb25faGFzZGFsaWduKHNicCkpIHsKIAkJCWlmIChzYnAtPnNiX3VuaXQgIT0gbXAtPm1fZGFsaWduKSB7CiAJCQkJc2JwLT5zYl91bml0ID0gbXAtPm1fZGFsaWduOwotCQkJCW1wLT5tX3VwZGF0ZV9mbGFncyB8PSBYRlNfU0JfVU5JVDsKKwkJCQltcC0+bV91cGRhdGVfc2IgPSB0cnVlOwogCQkJfQogCQkJaWYgKHNicC0+c2Jfd2lkdGggIT0gbXAtPm1fc3dpZHRoKSB7CiAJCQkJc2JwLT5zYl93aWR0aCA9IG1wLT5tX3N3aWR0aDsKLQkJCQltcC0+bV91cGRhdGVfZmxhZ3MgfD0gWEZTX1NCX1dJRFRIOworCQkJCW1wLT5tX3VwZGF0ZV9zYiA9IHRydWU7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQl4ZnNfd2FybihtcCwKQEAgLTU4MywzOCArNTgzLDE5IEBACiB4ZnNfbW91bnRfcmVzZXRfc2JxZmxhZ3MoCiAJc3RydWN0IHhmc19tb3VudAkqbXApCiB7Ci0JaW50CQkJZXJyb3I7Ci0Jc3RydWN0IHhmc190cmFucwkqdHA7Ci0KIAltcC0+bV9xZmxhZ3MgPSAwOwogCi0JLyoKLQkgKiBJdCBpcyBPSyB0byBsb29rIGF0IHNiX3FmbGFncyBoZXJlIGluIG1vdW50IHBhdGgsCi0JICogd2l0aG91dCBtX3NiX2xvY2suCi0JICovCisJLyogSXQgaXMgT0sgdG8gbG9vayBhdCBzYl9xZmxhZ3MgaW4gdGhlIG1vdW50IHBhdGggd2l0aG91dCBtX3NiX2xvY2suICovCiAJaWYgKG1wLT5tX3NiLnNiX3FmbGFncyA9PSAwKQogCQlyZXR1cm4gMDsKIAlzcGluX2xvY2soJm1wLT5tX3NiX2xvY2spOwogCW1wLT5tX3NiLnNiX3FmbGFncyA9IDA7CiAJc3Bpbl91bmxvY2soJm1wLT5tX3NiX2xvY2spOwogCi0JLyoKLQkgKiBJZiB0aGUgZnMgaXMgcmVhZG9ubHksIGxldCB0aGUgaW5jb3JlIHN1cGVyYmxvY2sgcnVuCi0JICogd2l0aCBxdW90YXMgb2ZmIGJ1dCBkb24ndCBmbHVzaCB0aGUgdXBkYXRlIG91dCB0byBkaXNrCi0JICovCi0JaWYgKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkKKwlpZiAoIXhmc19mc193cml0YWJsZShtcCwgU0JfRlJFRVpFX1dSSVRFKSkKIAkJcmV0dXJuIDA7CiAKLQl0cCA9IHhmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX1FNX1NCQ0hBTkdFKTsKLQllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAmTV9SRVMobXApLT50cl9xbV9zYmNoYW5nZSwgMCwgMCk7Ci0JaWYgKGVycm9yKSB7Ci0JCXhmc190cmFuc19jYW5jZWwodHAsIDApOwotCQl4ZnNfYWxlcnQobXAsICIlczogU3VwZXJibG9jayB1cGRhdGUgZmFpbGVkISIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQotCXhmc19tb2Rfc2IodHAsIFhGU19TQl9RRkxBR1MpOwotCXJldHVybiB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKKwlyZXR1cm4geGZzX3N5bmNfc2IobXAsIGZhbHNlKTsKIH0KIAogX191aW50NjRfdApAQCAtNjU5LDI2ICs2NDAsMjUgQEAKIAl4ZnNfc2JfbW91bnRfY29tbW9uKG1wLCBzYnApOwogCiAJLyoKLQkgKiBDaGVjayBmb3IgYSBtaXNtYXRjaGVkIGZlYXR1cmVzMiB2YWx1ZXMuICBPbGRlciBrZXJuZWxzCi0JICogcmVhZCAmIHdyb3RlIGludG8gdGhlIHdyb25nIHNiIG9mZnNldCBmb3Igc2JfZmVhdHVyZXMyCi0JICogb24gc29tZSBwbGF0Zm9ybXMgZHVlIHRvIHhmc19zYl90IG5vdCBiZWluZyA2NGJpdCBzaXplIGFsaWduZWQKLQkgKiB3aGVuIHNiX2ZlYXR1cmVzMiB3YXMgYWRkZWQsIHdoaWNoIG1hZGUgb2xkZXIgc3VwZXJibG9jawotCSAqIHJlYWRpbmcvd3JpdGluZyByb3V0aW5lcyBzd2FwIGl0IGFzIGEgNjQtYml0IHZhbHVlLgorCSAqIENoZWNrIGZvciBhIG1pc21hdGNoZWQgZmVhdHVyZXMyIHZhbHVlcy4gIE9sZGVyIGtlcm5lbHMgcmVhZCAmIHdyb3RlCisJICogaW50byB0aGUgd3Jvbmcgc2Igb2Zmc2V0IGZvciBzYl9mZWF0dXJlczIgb24gc29tZSBwbGF0Zm9ybXMgZHVlIHRvCisJICogeGZzX3NiX3Qgbm90IGJlaW5nIDY0Yml0IHNpemUgYWxpZ25lZCB3aGVuIHNiX2ZlYXR1cmVzMiB3YXMgYWRkZWQsCisJICogd2hpY2ggbWFkZSBvbGRlciBzdXBlcmJsb2NrIHJlYWRpbmcvd3JpdGluZyByb3V0aW5lcyBzd2FwIGl0IGFzIGEKKwkgKiA2NC1iaXQgdmFsdWUuCiAJICoKIAkgKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHdlIG1ha2UgYm90aCBzbG90cyBlcXVhbC4KIAkgKgotCSAqIElmIHdlIGRldGVjdCBhIG1pc21hdGNoZWQgZmllbGQsIHdlIE9SIHRoZSBzZXQgYml0cyBpbnRvIHRoZQotCSAqIGV4aXN0aW5nIGZlYXR1cmVzMiBmaWVsZCBpbiBjYXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gbW9kaWZpZWQ7IHdlCi0JICogZG9uJ3Qgd2FudCB0byBsb3NlIGFueSBmZWF0dXJlcy4gIFdlIHRoZW4gdXBkYXRlIHRoZSBiYWQgbG9jYXRpb24KLQkgKiB3aXRoIHRoZSBPUmVkIHZhbHVlIHNvIHRoYXQgb2xkZXIga2VybmVscyB3aWxsIHNlZSBhbnkgZmVhdHVyZXMyCi0JICogZmxhZ3MsIGFuZCBtYXJrIHRoZSB0d28gZmllbGRzIGFzIG5lZWRpbmcgdXBkYXRlcyBvbmNlIHRoZQotCSAqIHRyYW5zYWN0aW9uIHN1YnN5c3RlbSBpcyBvbmxpbmUuCisJICogSWYgd2UgZGV0ZWN0IGEgbWlzbWF0Y2hlZCBmaWVsZCwgd2UgT1IgdGhlIHNldCBiaXRzIGludG8gdGhlIGV4aXN0aW5nCisJICogZmVhdHVyZXMyIGZpZWxkIGluIGNhc2UgaXQgaGFzIGFscmVhZHkgYmVlbiBtb2RpZmllZDsgd2UgZG9uJ3Qgd2FudAorCSAqIHRvIGxvc2UgYW55IGZlYXR1cmVzLiAgV2UgdGhlbiB1cGRhdGUgdGhlIGJhZCBsb2NhdGlvbiB3aXRoIHRoZSBPUmVkCisJICogdmFsdWUgc28gdGhhdCBvbGRlciBrZXJuZWxzIHdpbGwgc2VlIGFueSBmZWF0dXJlczIgZmxhZ3MuIFRoZQorCSAqIHN1cGVyYmxvY2sgd3JpdGViYWNrIGNvZGUgZW5zdXJlcyB0aGUgbmV3IHNiX2ZlYXR1cmVzMiBpcyBjb3BpZWQgdG8KKwkgKiBzYl9iYWRfZmVhdHVyZXMyIGJlZm9yZSBpdCBpcyBsb2dnZWQgb3Igd3JpdHRlbiB0byBkaXNrLgogCSAqLwogCWlmICh4ZnNfc2JfaGFzX21pc21hdGNoZWRfZmVhdHVyZXMyKHNicCkpIHsKIAkJeGZzX3dhcm4obXAsICJjb3JyZWN0aW5nIHNiX2ZlYXR1cmVzIGFsaWdubWVudCBwcm9ibGVtIik7CiAJCXNicC0+c2JfZmVhdHVyZXMyIHw9IHNicC0+c2JfYmFkX2ZlYXR1cmVzMjsKLQkJc2JwLT5zYl9iYWRfZmVhdHVyZXMyID0gc2JwLT5zYl9mZWF0dXJlczI7Ci0JCW1wLT5tX3VwZGF0ZV9mbGFncyB8PSBYRlNfU0JfRkVBVFVSRVMyIHwgWEZTX1NCX0JBRF9GRUFUVVJFUzI7CisJCW1wLT5tX3VwZGF0ZV9zYiA9IHRydWU7CiAKIAkJLyoKIAkJICogUmUtY2hlY2sgZm9yIEFUVFIyIGluIGNhc2UgaXQgd2FzIGZvdW5kIGluIGJhZF9mZWF0dXJlczIKQEAgLTY5MiwxNyArNjcyLDE3IEBACiAJaWYgKHhmc19zYl92ZXJzaW9uX2hhc2F0dHIyKCZtcC0+bV9zYikgJiYKIAkgICAobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfTk9BVFRSMikpIHsKIAkJeGZzX3NiX3ZlcnNpb25fcmVtb3ZlYXR0cjIoJm1wLT5tX3NiKTsKLQkJbXAtPm1fdXBkYXRlX2ZsYWdzIHw9IFhGU19TQl9GRUFUVVJFUzI7CisJCW1wLT5tX3VwZGF0ZV9zYiA9IHRydWU7CiAKIAkJLyogdXBkYXRlIHNiX3ZlcnNpb25udW0gZm9yIHRoZSBjbGVhcmluZyBvZiB0aGUgbW9yZWJpdHMgKi8KIAkJaWYgKCFzYnAtPnNiX2ZlYXR1cmVzMikKLQkJCW1wLT5tX3VwZGF0ZV9mbGFncyB8PSBYRlNfU0JfVkVSU0lPTk5VTTsKKwkJCW1wLT5tX3VwZGF0ZV9zYiA9IHRydWU7CiAJfQogCiAJLyogYWx3YXlzIHVzZSB2MiBpbm9kZXMgYnkgZGVmYXVsdCBub3cgKi8KIAlpZiAoIShtcC0+bV9zYi5zYl92ZXJzaW9ubnVtICYgWEZTX1NCX1ZFUlNJT05fTkxJTktCSVQpKSB7CiAJCW1wLT5tX3NiLnNiX3ZlcnNpb25udW0gfD0gWEZTX1NCX1ZFUlNJT05fTkxJTktCSVQ7Ci0JCW1wLT5tX3VwZGF0ZV9mbGFncyB8PSBYRlNfU0JfVkVSU0lPTk5VTTsKKwkJbXAtPm1fdXBkYXRlX3NiID0gdHJ1ZTsKIAl9CiAKIAkvKgpAQCAtODk1LDggKzg3NSw4IEBACiAJICogdGhlIG5leHQgcmVtb3VudCBpbnRvIHdyaXRlYWJsZSBtb2RlLiAgT3RoZXJ3aXNlIHdlIHdvdWxkIG5ldmVyCiAJICogcGVyZm9ybSB0aGUgdXBkYXRlIGUuZy4gZm9yIHRoZSByb290IGZpbGVzeXN0ZW0uCiAJICovCi0JaWYgKG1wLT5tX3VwZGF0ZV9mbGFncyAmJiAhKG1wLT5tX2ZsYWdzICYgWEZTX01PVU5UX1JET05MWSkpIHsKLQkJZXJyb3IgPSB4ZnNfbW91bnRfbG9nX3NiKG1wLCBtcC0+bV91cGRhdGVfZmxhZ3MpOworCWlmIChtcC0+bV91cGRhdGVfc2IgJiYgIShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpKSB7CisJCWVycm9yID0geGZzX3N5bmNfc2IobXAsIGZhbHNlKTsKIAkJaWYgKGVycm9yKSB7CiAJCQl4ZnNfd2FybihtcCwgImZhaWxlZCB0byB3cml0ZSBzYiBjaGFuZ2VzIik7CiAJCQlnb3RvIG91dF9ydHVubW91bnQ7CkBAIC0xMTAzLDkgKzEwODMsNiBAQAogaW50CiB4ZnNfbG9nX3NiY291bnQoeGZzX21vdW50X3QgKm1wKQogewotCXhmc190cmFuc190CSp0cDsKLQlpbnQJCWVycm9yOwotCiAJLyogYWxsb3cgdGhpcyB0byBwcm9jZWVkIGR1cmluZyB0aGUgZnJlZXplIHNlcXVlbmNlLi4uICovCiAJaWYgKCF4ZnNfZnNfd3JpdGFibGUobXAsIFNCX0ZSRUVaRV9DT01QTEVURSkpCiAJCXJldHVybiAwOwpAQCAtMTExOSwxNyArMTA5Niw3IEBACiAJaWYgKCF4ZnNfc2JfdmVyc2lvbl9oYXNsYXp5c2Jjb3VudCgmbXAtPm1fc2IpKQogCQlyZXR1cm4gMDsKIAotCXRwID0gX3hmc190cmFuc19hbGxvYyhtcCwgWEZTX1RSQU5TX1NCX0NPVU5ULCBLTV9TTEVFUCk7Ci0JZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgJk1fUkVTKG1wKS0+dHJfc2IsIDAsIDApOwotCWlmIChlcnJvcikgewotCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQotCXhmc19tb2Rfc2IodHAsIFhGU19TQl9JRlJFRSB8IFhGU19TQl9JQ09VTlQgfCBYRlNfU0JfRkRCTE9DS1MpOwotCXhmc190cmFuc19zZXRfc3luYyh0cCk7Ci0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIHhmc19zeW5jX3NiKG1wLCB0cnVlKTsKIH0KIAogLyoKQEAgLTE0MjMsMzQgKzEzOTAsNiBAQAogfQogCiAvKgotICogVXNlZCB0byBsb2cgY2hhbmdlcyB0byB0aGUgc3VwZXJibG9jayB1bml0IGFuZCB3aWR0aCBmaWVsZHMgd2hpY2ggY291bGQKLSAqIGJlIGFsdGVyZWQgYnkgdGhlIG1vdW50IG9wdGlvbnMsIGFzIHdlbGwgYXMgYW55IHBvdGVudGlhbCBzYl9mZWF0dXJlczIKLSAqIGZpeHVwLiBPbmx5IHRoZSBmaXJzdCBzdXBlcmJsb2NrIGlzIHVwZGF0ZWQuCi0gKi8KLWludAoteGZzX21vdW50X2xvZ19zYigKLQl4ZnNfbW91bnRfdAkqbXAsCi0JX19pbnQ2NF90CWZpZWxkcykKLXsKLQl4ZnNfdHJhbnNfdAkqdHA7Ci0JaW50CQllcnJvcjsKLQotCUFTU0VSVChmaWVsZHMgJiAoWEZTX1NCX1VOSVQgfCBYRlNfU0JfV0lEVEggfCBYRlNfU0JfVVVJRCB8Ci0JCQkgWEZTX1NCX0ZFQVRVUkVTMiB8IFhGU19TQl9CQURfRkVBVFVSRVMyIHwKLQkJCSBYRlNfU0JfVkVSU0lPTk5VTSkpOwotCi0JdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19TQl9VTklUKTsKLQllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAmTV9SRVMobXApLT50cl9zYiwgMCwgMCk7Ci0JaWYgKGVycm9yKSB7Ci0JCXhmc190cmFuc19jYW5jZWwodHAsIDApOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCXhmc19tb2Rfc2IodHAsIGZpZWxkcyk7Ci0JZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCAwKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qCiAgKiBJZiB0aGUgdW5kZXJseWluZyAoZGF0YS9sb2cvcnQpIGRldmljZSBpcyByZWFkb25seSwgdGhlcmUgYXJlIHNvbWUKICAqIG9wZXJhdGlvbnMgdGhhdCBjYW5ub3QgcHJvY2VlZC4KICAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19tb3VudC5oIGIvZnMveGZzL3hmc19tb3VudC5oCmluZGV4IDIyY2NmNjkuLmE1YjJmZjggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbW91bnQuaAorKysgYi9mcy94ZnMveGZzX21vdW50LmgKQEAgLTE2Miw4ICsxNjIsNyBAQAogCXN0cnVjdCBkZWxheWVkX3dvcmsJbV9yZWNsYWltX3dvcms7CS8qIGJhY2tncm91bmQgaW5vZGUgcmVjbGFpbSAqLwogCXN0cnVjdCBkZWxheWVkX3dvcmsJbV9lb2ZibG9ja3Nfd29yazsgLyogYmFja2dyb3VuZCBlb2YgYmxvY2tzCiAJCQkJCQkgICAgIHRyaW1taW5nICovCi0JX19pbnQ2NF90CQltX3VwZGF0ZV9mbGFnczsJLyogc2IgZmxhZ3Mgd2UgbmVlZCB0byB1cGRhdGUKLQkJCQkJCSAgIG9uIHRoZSBuZXh0IHJlbW91bnQscncgKi8KKwlib29sCQkJbV91cGRhdGVfc2I7CS8qIHNiIG5lZWRzIHVwZGF0ZSBpbiBtb3VudCAqLwogCWludDY0X3QJCQltX2xvd19zcGFjZVtYRlNfTE9XU1BfTUFYXTsKIAkJCQkJCS8qIGxvdyBmcmVlIHNwYWNlIHRocmVzaG9sZHMgKi8KIAlzdHJ1Y3QgeGZzX2tvYmoJCW1fa29iajsKQEAgLTM3OCw3ICszNzcsNyBAQAogZXh0ZXJuIGludAl4ZnNfbW9kX2luY29yZV9zYih4ZnNfbW91bnRfdCAqLCB4ZnNfc2JfZmllbGRfdCwgaW50NjRfdCwgaW50KTsKIGV4dGVybiBpbnQJeGZzX21vZF9pbmNvcmVfc2JfYmF0Y2goeGZzX21vdW50X3QgKiwgeGZzX21vZF9zYl90ICosCiAJCQl1aW50LCBpbnQpOwotZXh0ZXJuIGludAl4ZnNfbW91bnRfbG9nX3NiKHhmc19tb3VudF90ICosIF9faW50NjRfdCk7CitleHRlcm4gaW50CXhmc19tb3VudF9sb2dfc2IoeGZzX21vdW50X3QgKik7CiBleHRlcm4gc3RydWN0IHhmc19idWYgKnhmc19nZXRzYih4ZnNfbW91bnRfdCAqLCBpbnQpOwogZXh0ZXJuIGludAl4ZnNfcmVhZHNiKHhmc19tb3VudF90ICosIGludCk7CiBleHRlcm4gdm9pZAl4ZnNfZnJlZXNiKHhmc19tb3VudF90ICopOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19xbS5jIGIvZnMveGZzL3hmc19xbS5jCmluZGV4IDc5ZmIxOWQuLjNlODE4NjIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcW0uYworKysgYi9mcy94ZnMveGZzX3FtLmMKQEAgLTcxNCw3ICs3MTQsNiBAQAogeGZzX3FtX3Fpbm9fYWxsb2MoCiAJeGZzX21vdW50X3QJKm1wLAogCXhmc19pbm9kZV90CSoqaXAsCi0JX19pbnQ2NF90CXNiZmllbGRzLAogCXVpbnQJCWZsYWdzKQogewogCXhmc190cmFuc190CSp0cDsKQEAgLTc3NywxMSArNzc2LDYgQEAKIAlzcGluX2xvY2soJm1wLT5tX3NiX2xvY2spOwogCWlmIChmbGFncyAmIFhGU19RTU9QVF9TQlZFUlNJT04pIHsKIAkJQVNTRVJUKCF4ZnNfc2JfdmVyc2lvbl9oYXNxdW90YSgmbXAtPm1fc2IpKTsKLQkJQVNTRVJUKChzYmZpZWxkcyAmIChYRlNfU0JfVkVSU0lPTk5VTSB8IFhGU19TQl9VUVVPVElOTyB8Ci0JCQlYRlNfU0JfR1FVT1RJTk8gfCBYRlNfU0JfUFFVT1RJTk8gfCBYRlNfU0JfUUZMQUdTKSkgPT0KLQkJCQkoWEZTX1NCX1ZFUlNJT05OVU0gfCBYRlNfU0JfVVFVT1RJTk8gfAotCQkJCSBYRlNfU0JfR1FVT1RJTk8gfCBYRlNfU0JfUFFVT1RJTk8gfAotCQkJCSBYRlNfU0JfUUZMQUdTKSk7CiAKIAkJeGZzX3NiX3ZlcnNpb25fYWRkcXVvdGEoJm1wLT5tX3NiKTsKIAkJbXAtPm1fc2Iuc2JfdXF1b3Rpbm8gPSBOVUxMRlNJTk87CkBAIC03OTgsNyArNzkyLDcgQEAKIAllbHNlCiAJCW1wLT5tX3NiLnNiX3BxdW90aW5vID0gKCppcCktPmlfaW5vOwogCXNwaW5fdW5sb2NrKCZtcC0+bV9zYl9sb2NrKTsKLQl4ZnNfbW9kX3NiKHRwLCBzYmZpZWxkcyk7CisJeGZzX2xvZ19zYih0cCk7CiAKIAlpZiAoKGVycm9yID0geGZzX3RyYW5zX2NvbW1pdCh0cCwgWEZTX1RSQU5TX1JFTEVBU0VfTE9HX1JFUykpKSB7CiAJCXhmc19hbGVydChtcCwgIiVzIGZhaWxlZCAoZXJyb3IgJWQpISIsIF9fZnVuY19fLCBlcnJvcik7CkBAIC0xNDUxLDcgKzE0NDUsNyBAQAogCXNwaW5fdW5sb2NrKCZtcC0+bV9zYl9sb2NrKTsKIAogCWlmIChzYmYgIT0gKG1wLT5tX3FmbGFncyAmIFhGU19NT1VOVF9RVU9UQV9BTEwpKSB7Ci0JCWlmICh4ZnNfcW1fd3JpdGVfc2JfY2hhbmdlcyhtcCwgWEZTX1NCX1FGTEFHUykpIHsKKwkJaWYgKHhmc19zeW5jX3NiKG1wLCBmYWxzZSkpIHsKIAkJCS8qCiAJCQkgKiBXZSBjb3VsZCBvbmx5IGhhdmUgYmVlbiB0dXJuaW5nIHF1b3RhcyBvZmYuCiAJCQkgKiBXZSBhcmVuJ3QgaW4gdmVyeSBnb29kIHNoYXBlIGFjdHVhbGx5IGJlY2F1c2UKQEAgLTE0ODIsNyArMTQ3Niw2IEBACiAJc3RydWN0IHhmc19pbm9kZQkqZ2lwID0gTlVMTDsKIAlzdHJ1Y3QgeGZzX2lub2RlCSpwaXAgPSBOVUxMOwogCWludAkJCWVycm9yOwotCV9faW50NjRfdAkJc2JmbGFncyA9IDA7CiAJdWludAkJCWZsYWdzID0gMDsKIAogCUFTU0VSVChtcC0+bV9xdW90YWluZm8pOwpAQCAtMTUxNyw5ICsxNTEwLDYgQEAKIAkJfQogCX0gZWxzZSB7CiAJCWZsYWdzIHw9IFhGU19RTU9QVF9TQlZFUlNJT047Ci0JCXNiZmxhZ3MgfD0gKFhGU19TQl9WRVJTSU9OTlVNIHwgWEZTX1NCX1VRVU9USU5PIHwKLQkJCSAgICBYRlNfU0JfR1FVT1RJTk8gfCBYRlNfU0JfUFFVT1RJTk8gfAotCQkJICAgIFhGU19TQl9RRkxBR1MpOwogCX0KIAogCS8qCkBAIC0xNTMwLDcgKzE1MjAsNiBAQAogCSAqLwogCWlmIChYRlNfSVNfVVFVT1RBX09OKG1wKSAmJiB1aXAgPT0gTlVMTCkgewogCQllcnJvciA9IHhmc19xbV9xaW5vX2FsbG9jKG1wLCAmdWlwLAotCQkJCQkgICAgICBzYmZsYWdzIHwgWEZTX1NCX1VRVU9USU5PLAogCQkJCQkgICAgICBmbGFncyB8IFhGU19RTU9QVF9VUVVPVEEpOwogCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGVycm9yX3JlbGU7CkBAIC0xNTM5LDcgKzE1MjgsNiBAQAogCX0KIAlpZiAoWEZTX0lTX0dRVU9UQV9PTihtcCkgJiYgZ2lwID09IE5VTEwpIHsKIAkJZXJyb3IgPSB4ZnNfcW1fcWlub19hbGxvYyhtcCwgJmdpcCwKLQkJCQkJICBzYmZsYWdzIHwgWEZTX1NCX0dRVU9USU5PLAogCQkJCQkgIGZsYWdzIHwgWEZTX1FNT1BUX0dRVU9UQSk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gZXJyb3JfcmVsZTsKQEAgLTE1NDgsNyArMTUzNiw2IEBACiAJfQogCWlmIChYRlNfSVNfUFFVT1RBX09OKG1wKSAmJiBwaXAgPT0gTlVMTCkgewogCQllcnJvciA9IHhmc19xbV9xaW5vX2FsbG9jKG1wLCAmcGlwLAotCQkJCQkgIHNiZmxhZ3MgfCBYRlNfU0JfUFFVT1RJTk8sCiAJCQkJCSAgZmxhZ3MgfCBYRlNfUU1PUFRfUFFVT1RBKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBlcnJvcl9yZWxlOwpAQCAtMTU4NywzMiArMTU3NCw2IEBACiAJeGZzX3FtX2RxZGVzdHJveShkcXApOwogfQogCi0vKgotICogU3RhcnQgYSB0cmFuc2FjdGlvbiBhbmQgd3JpdGUgdGhlIGluY29yZSBzdXBlcmJsb2NrIGNoYW5nZXMgdG8KLSAqIGRpc2suIGZsYWdzIHBhcmFtZXRlciBpbmRpY2F0ZXMgd2hpY2ggZmllbGRzIGhhdmUgY2hhbmdlZC4KLSAqLwotaW50Ci14ZnNfcW1fd3JpdGVfc2JfY2hhbmdlcygKLQl4ZnNfbW91bnRfdAkqbXAsCi0JX19pbnQ2NF90CWZsYWdzKQotewotCXhmc190cmFuc190CSp0cDsKLQlpbnQJCWVycm9yOwotCi0JdHAgPSB4ZnNfdHJhbnNfYWxsb2MobXAsIFhGU19UUkFOU19RTV9TQkNIQU5HRSk7Ci0JZXJyb3IgPSB4ZnNfdHJhbnNfcmVzZXJ2ZSh0cCwgJk1fUkVTKG1wKS0+dHJfcW1fc2JjaGFuZ2UsIDAsIDApOwotCWlmIChlcnJvcikgewotCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQotCXhmc19tb2Rfc2IodHAsIGZsYWdzKTsKLQllcnJvciA9IHhmc190cmFuc19jb21taXQodHAsIDApOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi0KIC8qIC0tLS0tLS0tLS0tLS0tLSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3Igdm5vZGVvcHMgLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcW0uaCBiL2ZzL3hmcy94ZnNfcW0uaAppbmRleCAzYTA3YTkzLi4wZDRkMzU5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3FtLmgKKysrIGIvZnMveGZzL3hmc19xbS5oCkBAIC0xNTcsNyArMTU3LDYgQEAKICNkZWZpbmUgWEZTX1FNX1JUQldBUk5MSU1JVAk1CiAKIGV4dGVybiB2b2lkCQl4ZnNfcW1fZGVzdHJveV9xdW90YWluZm8oc3RydWN0IHhmc19tb3VudCAqKTsKLWV4dGVybiBpbnQJCXhmc19xbV93cml0ZV9zYl9jaGFuZ2VzKHN0cnVjdCB4ZnNfbW91bnQgKiwgX19pbnQ2NF90KTsKIAogLyogZHF1b3Qgc3R1ZmYgKi8KIGV4dGVybiB2b2lkCQl4ZnNfcW1fZHFwdXJnZV9hbGwoc3RydWN0IHhmc19tb3VudCAqLCB1aW50KTsKQEAgLTE2Niw5ICsxNjUsOSBAQAogLyogcXVvdGEgb3BzICovCiBleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfdHJ1bmNfcWZpbGVzKHN0cnVjdCB4ZnNfbW91bnQgKiwgdWludCk7CiBleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfZ2V0cXVvdGEoc3RydWN0IHhmc19tb3VudCAqLCB4ZnNfZHFpZF90LAotCQkJCQl1aW50LCBzdHJ1Y3QgZnNfZGlza19xdW90YSAqKTsKKwkJCQkJdWludCwgc3RydWN0IHFjX2RxYmxrICopOwogZXh0ZXJuIGludAkJeGZzX3FtX3NjYWxsX3NldHFsaW0oc3RydWN0IHhmc19tb3VudCAqLCB4ZnNfZHFpZF90LCB1aW50LAotCQkJCQlzdHJ1Y3QgZnNfZGlza19xdW90YSAqKTsKKwkJCQkJc3RydWN0IHFjX2RxYmxrICopOwogZXh0ZXJuIGludAkJeGZzX3FtX3NjYWxsX2dldHFzdGF0KHN0cnVjdCB4ZnNfbW91bnQgKiwKIAkJCQkJc3RydWN0IGZzX3F1b3RhX3N0YXQgKik7CiBleHRlcm4gaW50CQl4ZnNfcW1fc2NhbGxfZ2V0cXN0YXR2KHN0cnVjdCB4ZnNfbW91bnQgKiwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcW1fc3lzY2FsbHMuYyBiL2ZzL3hmcy94ZnNfcW1fc3lzY2FsbHMuYwppbmRleCA3NGZjYTY4Li45Yjk2NWRiNCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19xbV9zeXNjYWxscy5jCisrKyBiL2ZzL3hmcy94ZnNfcW1fc3lzY2FsbHMuYwpAQCAtMzksNyArMzksNiBAQAogU1RBVElDIGludAl4ZnNfcW1fbG9nX3F1b3Rhb2ZmX2VuZCh4ZnNfbW91bnRfdCAqLCB4ZnNfcW9mZl9sb2dpdGVtX3QgKiwKIAkJCQkJdWludCk7CiBTVEFUSUMgdWludAl4ZnNfcW1fZXhwb3J0X2ZsYWdzKHVpbnQpOwotU1RBVElDIHVpbnQJeGZzX3FtX2V4cG9ydF9xdHlwZV9mbGFncyh1aW50KTsKIAogLyoKICAqIFR1cm4gb2ZmIHF1b3RhIGFjY291bnRpbmcgYW5kL29yIGVuZm9yY2VtZW50IGZvciBhbGwgdWRxdW90cyBhbmQvb3IKQEAgLTkyLDggKzkxLDcgQEAKIAkJbXV0ZXhfdW5sb2NrKCZxLT5xaV9xdW90YW9mZmxvY2spOwogCiAJCS8qIFhYWCB3aGF0IHRvIGRvIGlmIGVycm9yID8gUmV2ZXJ0IGJhY2sgdG8gb2xkIHZhbHMgaW5jb3JlID8gKi8KLQkJZXJyb3IgPSB4ZnNfcW1fd3JpdGVfc2JfY2hhbmdlcyhtcCwgWEZTX1NCX1FGTEFHUyk7Ci0JCXJldHVybiBlcnJvcjsKKwkJcmV0dXJuIHhmc19zeW5jX3NiKG1wLCBmYWxzZSk7CiAJfQogCiAJZHF0eXBlID0gMDsKQEAgLTMxNCw3ICszMTIsNiBAQAogewogCWludAkJZXJyb3I7CiAJdWludAkJcWY7Ci0JX19pbnQ2NF90CXNiZmxhZ3M7CiAKIAlmbGFncyAmPSAoWEZTX0FMTF9RVU9UQV9BQ0NUIHwgWEZTX0FMTF9RVU9UQV9FTkZEKTsKIAkvKgpAQCAtMzIyLDMwICszMTksMjIgQEAKIAkgKi8KIAlmbGFncyAmPSB+KFhGU19BTExfUVVPVEFfQUNDVCk7CiAKLQlzYmZsYWdzID0gMDsKLQogCWlmIChmbGFncyA9PSAwKSB7CiAJCXhmc19kZWJ1ZyhtcCwgIiVzOiB6ZXJvIGZsYWdzLCBtX3FmbGFncz0leCIsCiAJCQlfX2Z1bmNfXywgbXAtPm1fcWZsYWdzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogTm8gZnMgY2FuIHR1cm4gb24gcXVvdGFzIHdpdGggYSBkZWxheWVkIGVmZmVjdCAqLwotCUFTU0VSVCgoZmxhZ3MgJiBYRlNfQUxMX1FVT1RBX0FDQ1QpID09IDApOwotCiAJLyoKIAkgKiBDYW4ndCBlbmZvcmNlIHdpdGhvdXQgYWNjb3VudGluZy4gV2UgY2hlY2sgdGhlIHN1cGVyYmxvY2sKIAkgKiBxZmxhZ3MgaGVyZSBpbnN0ZWFkIG9mIG1fcWZsYWdzIGJlY2F1c2Ugcm9vdGZzIGNhbiBoYXZlCiAJICogcXVvdGEgYWNjdCBvbiBvbmRpc2sgd2l0aG91dCBtX3FmbGFncycga25vd2luZy4KIAkgKi8KLQlpZiAoKChmbGFncyAmIFhGU19VUVVPVEFfQUNDVCkgPT0gMCAmJgotCSAgICAgKG1wLT5tX3NiLnNiX3FmbGFncyAmIFhGU19VUVVPVEFfQUNDVCkgPT0gMCAmJgorCWlmICgoKG1wLT5tX3NiLnNiX3FmbGFncyAmIFhGU19VUVVPVEFfQUNDVCkgPT0gMCAmJgogCSAgICAgKGZsYWdzICYgWEZTX1VRVU9UQV9FTkZEKSkgfHwKLQkgICAgKChmbGFncyAmIFhGU19HUVVPVEFfQUNDVCkgPT0gMCAmJgotCSAgICAgKG1wLT5tX3NiLnNiX3FmbGFncyAmIFhGU19HUVVPVEFfQUNDVCkgPT0gMCAmJgorCSAgICAoKG1wLT5tX3NiLnNiX3FmbGFncyAmIFhGU19HUVVPVEFfQUNDVCkgPT0gMCAmJgogCSAgICAgKGZsYWdzICYgWEZTX0dRVU9UQV9FTkZEKSkgfHwKLQkgICAgKChmbGFncyAmIFhGU19QUVVPVEFfQUNDVCkgPT0gMCAmJgotCSAgICAgKG1wLT5tX3NiLnNiX3FmbGFncyAmIFhGU19QUVVPVEFfQUNDVCkgPT0gMCAmJgorCSAgICAoKG1wLT5tX3NiLnNiX3FmbGFncyAmIFhGU19QUVVPVEFfQUNDVCkgPT0gMCAmJgogCSAgICAgKGZsYWdzICYgWEZTX1BRVU9UQV9FTkZEKSkpIHsKIAkJeGZzX2RlYnVnKG1wLAogCQkJIiVzOiBDYW4ndCBlbmZvcmNlIHdpdGhvdXQgYWNjdCwgZmxhZ3M9JXggc2JmbGFncz0leCIsCkBAIC0zNzAsMTEgKzM1OSwxMSBAQAogCS8qCiAJICogVGhlcmUncyBub3RoaW5nIHRvIGNoYW5nZSBpZiBpdCdzIHRoZSBzYW1lLgogCSAqLwotCWlmICgocWYgJiBmbGFncykgPT0gZmxhZ3MgJiYgc2JmbGFncyA9PSAwKQorCWlmICgocWYgJiBmbGFncykgPT0gZmxhZ3MpCiAJCXJldHVybiAtRUVYSVNUOwotCXNiZmxhZ3MgfD0gWEZTX1NCX1FGTEFHUzsKIAotCWlmICgoZXJyb3IgPSB4ZnNfcW1fd3JpdGVfc2JfY2hhbmdlcyhtcCwgc2JmbGFncykpKQorCWVycm9yID0geGZzX3N5bmNfc2IobXAsIGZhbHNlKTsKKwlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAkvKgogCSAqIElmIHdlIGFyZW4ndCB0cnlpbmcgdG8gc3dpdGNoIG9uIHF1b3RhIGVuZm9yY2VtZW50LCB3ZSBhcmUgZG9uZS4KQEAgLTM4NCw4ICszNzMsNyBAQAogCSAgICAgKChtcC0+bV9zYi5zYl9xZmxhZ3MgJiBYRlNfUFFVT1RBX0FDQ1QpICE9CiAJICAgICAobXAtPm1fcWZsYWdzICYgWEZTX1BRVU9UQV9BQ0NUKSkgfHwKIAkgICAgICgobXAtPm1fc2Iuc2JfcWZsYWdzICYgWEZTX0dRVU9UQV9BQ0NUKSAhPQotCSAgICAgKG1wLT5tX3FmbGFncyAmIFhGU19HUVVPVEFfQUNDVCkpIHx8Ci0JICAgIChmbGFncyAmIFhGU19BTExfUVVPVEFfRU5GRCkgPT0gMCkKKwkgICAgIChtcC0+bV9xZmxhZ3MgJiBYRlNfR1FVT1RBX0FDQ1QpKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoISBYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpCkBAIC00MjIsMjAgKzQxMCwxMiBAQAogCW1lbXNldChvdXQsIDAsIHNpemVvZihmc19xdW90YV9zdGF0X3QpKTsKIAogCW91dC0+cXNfdmVyc2lvbiA9IEZTX1FTVEFUX1ZFUlNJT047Ci0JaWYgKCF4ZnNfc2JfdmVyc2lvbl9oYXNxdW90YSgmbXAtPm1fc2IpKSB7Ci0JCW91dC0+cXNfdXF1b3RhLnFmc19pbm8gPSBOVUxMRlNJTk87Ci0JCW91dC0+cXNfZ3F1b3RhLnFmc19pbm8gPSBOVUxMRlNJTk87Ci0JCXJldHVybiAwOwotCX0KLQogCW91dC0+cXNfZmxhZ3MgPSAoX191aW50MTZfdCkgeGZzX3FtX2V4cG9ydF9mbGFncyhtcC0+bV9xZmxhZ3MgJgogCQkJCQkJCShYRlNfQUxMX1FVT1RBX0FDQ1R8CiAJCQkJCQkJIFhGU19BTExfUVVPVEFfRU5GRCkpOwotCWlmIChxKSB7Ci0JCXVpcCA9IHEtPnFpX3VxdW90YWlwOwotCQlnaXAgPSBxLT5xaV9ncXVvdGFpcDsKLQkJcGlwID0gcS0+cWlfcHF1b3RhaXA7Ci0JfQorCXVpcCA9IHEtPnFpX3VxdW90YWlwOworCWdpcCA9IHEtPnFpX2dxdW90YWlwOworCXBpcCA9IHEtPnFpX3BxdW90YWlwOwogCWlmICghdWlwICYmIG1wLT5tX3NiLnNiX3VxdW90aW5vICE9IE5VTExGU0lOTykgewogCQlpZiAoeGZzX2lnZXQobXAsIE5VTEwsIG1wLT5tX3NiLnNiX3VxdW90aW5vLAogCQkJCQkwLCAwLCAmdWlwKSA9PSAwKQpAQCAtNDgxLDE0ICs0NjEsMTMgQEAKIAkJaWYgKHRlbXBwcWlwKQogCQkJSVJFTEUocGlwKTsKIAl9Ci0JaWYgKHEpIHsKLQkJb3V0LT5xc19pbmNvcmVkcXMgPSBxLT5xaV9kcXVvdHM7Ci0JCW91dC0+cXNfYnRpbWVsaW1pdCA9IHEtPnFpX2J0aW1lbGltaXQ7Ci0JCW91dC0+cXNfaXRpbWVsaW1pdCA9IHEtPnFpX2l0aW1lbGltaXQ7Ci0JCW91dC0+cXNfcnRidGltZWxpbWl0ID0gcS0+cWlfcnRidGltZWxpbWl0OwotCQlvdXQtPnFzX2J3YXJubGltaXQgPSBxLT5xaV9id2FybmxpbWl0OwotCQlvdXQtPnFzX2l3YXJubGltaXQgPSBxLT5xaV9pd2FybmxpbWl0OwotCX0KKwlvdXQtPnFzX2luY29yZWRxcyA9IHEtPnFpX2RxdW90czsKKwlvdXQtPnFzX2J0aW1lbGltaXQgPSBxLT5xaV9idGltZWxpbWl0OworCW91dC0+cXNfaXRpbWVsaW1pdCA9IHEtPnFpX2l0aW1lbGltaXQ7CisJb3V0LT5xc19ydGJ0aW1lbGltaXQgPSBxLT5xaV9ydGJ0aW1lbGltaXQ7CisJb3V0LT5xc19id2FybmxpbWl0ID0gcS0+cWlfYndhcm5saW1pdDsKKwlvdXQtPnFzX2l3YXJubGltaXQgPSBxLT5xaV9pd2FybmxpbWl0OworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUwOSwxMyArNDg4LDYgQEAKIAlib29sICAgICAgICAgICAgICAgICAgICB0ZW1wZ3FpcCA9IGZhbHNlOwogCWJvb2wgICAgICAgICAgICAgICAgICAgIHRlbXBwcWlwID0gZmFsc2U7CiAKLQlpZiAoIXhmc19zYl92ZXJzaW9uX2hhc3F1b3RhKCZtcC0+bV9zYikpIHsKLQkJb3V0LT5xc191cXVvdGEucWZzX2lubyA9IE5VTExGU0lOTzsKLQkJb3V0LT5xc19ncXVvdGEucWZzX2lubyA9IE5VTExGU0lOTzsKLQkJb3V0LT5xc19wcXVvdGEucWZzX2lubyA9IE5VTExGU0lOTzsKLQkJcmV0dXJuIDA7Ci0JfQotCiAJb3V0LT5xc19mbGFncyA9IChfX3VpbnQxNl90KSB4ZnNfcW1fZXhwb3J0X2ZsYWdzKG1wLT5tX3FmbGFncyAmCiAJCQkJCQkJKFhGU19BTExfUVVPVEFfQUNDVHwKIAkJCQkJCQkgWEZTX0FMTF9RVU9UQV9FTkZEKSk7CkBAIC01MjMsMTEgKzQ5NSw5IEBACiAJb3V0LT5xc19ncXVvdGEucWZzX2lubyA9IG1wLT5tX3NiLnNiX2dxdW90aW5vOwogCW91dC0+cXNfcHF1b3RhLnFmc19pbm8gPSBtcC0+bV9zYi5zYl9wcXVvdGlubzsKIAotCWlmIChxKSB7Ci0JCXVpcCA9IHEtPnFpX3VxdW90YWlwOwotCQlnaXAgPSBxLT5xaV9ncXVvdGFpcDsKLQkJcGlwID0gcS0+cWlfcHF1b3RhaXA7Ci0JfQorCXVpcCA9IHEtPnFpX3VxdW90YWlwOworCWdpcCA9IHEtPnFpX2dxdW90YWlwOworCXBpcCA9IHEtPnFpX3BxdW90YWlwOwogCWlmICghdWlwICYmIG1wLT5tX3NiLnNiX3VxdW90aW5vICE9IE5VTExGU0lOTykgewogCQlpZiAoeGZzX2lnZXQobXAsIE5VTEwsIG1wLT5tX3NiLnNiX3VxdW90aW5vLAogCQkJCQkwLCAwLCAmdWlwKSA9PSAwKQpAQCAtNTYyLDE5ICs1MzIsMTggQEAKIAkJaWYgKHRlbXBwcWlwKQogCQkJSVJFTEUocGlwKTsKIAl9Ci0JaWYgKHEpIHsKLQkJb3V0LT5xc19pbmNvcmVkcXMgPSBxLT5xaV9kcXVvdHM7Ci0JCW91dC0+cXNfYnRpbWVsaW1pdCA9IHEtPnFpX2J0aW1lbGltaXQ7Ci0JCW91dC0+cXNfaXRpbWVsaW1pdCA9IHEtPnFpX2l0aW1lbGltaXQ7Ci0JCW91dC0+cXNfcnRidGltZWxpbWl0ID0gcS0+cWlfcnRidGltZWxpbWl0OwotCQlvdXQtPnFzX2J3YXJubGltaXQgPSBxLT5xaV9id2FybmxpbWl0OwotCQlvdXQtPnFzX2l3YXJubGltaXQgPSBxLT5xaV9pd2FybmxpbWl0OwotCX0KKwlvdXQtPnFzX2luY29yZWRxcyA9IHEtPnFpX2RxdW90czsKKwlvdXQtPnFzX2J0aW1lbGltaXQgPSBxLT5xaV9idGltZWxpbWl0OworCW91dC0+cXNfaXRpbWVsaW1pdCA9IHEtPnFpX2l0aW1lbGltaXQ7CisJb3V0LT5xc19ydGJ0aW1lbGltaXQgPSBxLT5xaV9ydGJ0aW1lbGltaXQ7CisJb3V0LT5xc19id2FybmxpbWl0ID0gcS0+cWlfYndhcm5saW1pdDsKKwlvdXQtPnFzX2l3YXJubGltaXQgPSBxLT5xaV9pd2FybmxpbWl0OworCiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgWEZTX0RRX01BU0sgXAotCShGU19EUV9MSU1JVF9NQVNLIHwgRlNfRFFfVElNRVJfTUFTSyB8IEZTX0RRX1dBUk5TX01BU0spCisjZGVmaW5lIFhGU19RQ19NQVNLIFwKKwkoUUNfTElNSVRfTUFTSyB8IFFDX1RJTUVSX01BU0sgfCBRQ19XQVJOU19NQVNLKQogCiAvKgogICogQWRqdXN0IHF1b3RhIGxpbWl0cywgYW5kIHN0YXJ0L3N0b3AgdGltZXJzIGFjY29yZGluZ2x5LgpAQCAtNTg0LDcgKzU1Myw3IEBACiAJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJeGZzX2RxaWRfdAkJaWQsCiAJdWludAkJCXR5cGUsCi0JZnNfZGlza19xdW90YV90CQkqbmV3bGltKQorCXN0cnVjdCBxY19kcWJsawkJKm5ld2xpbSkKIHsKIAlzdHJ1Y3QgeGZzX3F1b3RhaW5mbwkqcSA9IG1wLT5tX3F1b3RhaW5mbzsKIAlzdHJ1Y3QgeGZzX2Rpc2tfZHF1b3QJKmRkcTsKQEAgLTU5Myw5ICs1NjIsOSBAQAogCWludAkJCWVycm9yOwogCXhmc19xY250X3QJCWhhcmQsIHNvZnQ7CiAKLQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIH5YRlNfRFFfTUFTSykKKwlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIH5YRlNfUUNfTUFTSykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKChuZXdsaW0tPmRfZmllbGRtYXNrICYgWEZTX0RRX01BU0spID09IDApCisJaWYgKChuZXdsaW0tPmRfZmllbGRtYXNrICYgWEZTX1FDX01BU0spID09IDApCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTYzMywxMSArNjAyLDExIEBACiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhhdCBoYXJkbGltaXRzIGFyZSA+PSBzb2Z0IGxpbWl0cyBiZWZvcmUgY2hhbmdpbmcuCiAJICovCi0JaGFyZCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfQkhBUkQpID8KLQkJKHhmc19xY250X3QpIFhGU19CQl9UT19GU0IobXAsIG5ld2xpbS0+ZF9ibGtfaGFyZGxpbWl0KSA6CisJaGFyZCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgUUNfU1BDX0hBUkQpID8KKwkJKHhmc19xY250X3QpIFhGU19CX1RPX0ZTQihtcCwgbmV3bGltLT5kX3NwY19oYXJkbGltaXQpIDoKIAkJCWJlNjRfdG9fY3B1KGRkcS0+ZF9ibGtfaGFyZGxpbWl0KTsKLQlzb2Z0ID0gKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CU09GVCkgPwotCQkoeGZzX3FjbnRfdCkgWEZTX0JCX1RPX0ZTQihtcCwgbmV3bGltLT5kX2Jsa19zb2Z0bGltaXQpIDoKKwlzb2Z0ID0gKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfU09GVCkgPworCQkoeGZzX3FjbnRfdCkgWEZTX0JfVE9fRlNCKG1wLCBuZXdsaW0tPmRfc3BjX3NvZnRsaW1pdCkgOgogCQkJYmU2NF90b19jcHUoZGRxLT5kX2Jsa19zb2Z0bGltaXQpOwogCWlmIChoYXJkID09IDAgfHwgaGFyZCA+PSBzb2Z0KSB7CiAJCWRkcS0+ZF9ibGtfaGFyZGxpbWl0ID0gY3B1X3RvX2JlNjQoaGFyZCk7CkBAIC02NTAsMTEgKzYxOSwxMSBAQAogCX0gZWxzZSB7CiAJCXhmc19kZWJ1ZyhtcCwgImJsa2hhcmQgJUxkIDwgYmxrc29mdCAlTGQiLCBoYXJkLCBzb2Z0KTsKIAl9Ci0JaGFyZCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfUlRCSEFSRCkgPwotCQkoeGZzX3FjbnRfdCkgWEZTX0JCX1RPX0ZTQihtcCwgbmV3bGltLT5kX3J0Yl9oYXJkbGltaXQpIDoKKwloYXJkID0gKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19SVF9TUENfSEFSRCkgPworCQkoeGZzX3FjbnRfdCkgWEZTX0JfVE9fRlNCKG1wLCBuZXdsaW0tPmRfcnRfc3BjX2hhcmRsaW1pdCkgOgogCQkJYmU2NF90b19jcHUoZGRxLT5kX3J0Yl9oYXJkbGltaXQpOwotCXNvZnQgPSAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX1JUQlNPRlQpID8KLQkJKHhmc19xY250X3QpIFhGU19CQl9UT19GU0IobXAsIG5ld2xpbS0+ZF9ydGJfc29mdGxpbWl0KSA6CisJc29mdCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgUUNfUlRfU1BDX1NPRlQpID8KKwkJKHhmc19xY250X3QpIFhGU19CX1RPX0ZTQihtcCwgbmV3bGltLT5kX3J0X3NwY19zb2Z0bGltaXQpIDoKIAkJCWJlNjRfdG9fY3B1KGRkcS0+ZF9ydGJfc29mdGxpbWl0KTsKIAlpZiAoaGFyZCA9PSAwIHx8IGhhcmQgPj0gc29mdCkgewogCQlkZHEtPmRfcnRiX2hhcmRsaW1pdCA9IGNwdV90b19iZTY0KGhhcmQpOwpAQCAtNjY3LDEwICs2MzYsMTAgQEAKIAkJeGZzX2RlYnVnKG1wLCAicnRiaGFyZCAlTGQgPCBydGJzb2Z0ICVMZCIsIGhhcmQsIHNvZnQpOwogCX0KIAotCWhhcmQgPSAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0lIQVJEKSA/CisJaGFyZCA9IChuZXdsaW0tPmRfZmllbGRtYXNrICYgUUNfSU5PX0hBUkQpID8KIAkJKHhmc19xY250X3QpIG5ld2xpbS0+ZF9pbm9faGFyZGxpbWl0IDoKIAkJCWJlNjRfdG9fY3B1KGRkcS0+ZF9pbm9faGFyZGxpbWl0KTsKLQlzb2Z0ID0gKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9JU09GVCkgPworCXNvZnQgPSAobmV3bGltLT5kX2ZpZWxkbWFzayAmIFFDX0lOT19TT0ZUKSA/CiAJCSh4ZnNfcWNudF90KSBuZXdsaW0tPmRfaW5vX3NvZnRsaW1pdCA6CiAJCQliZTY0X3RvX2NwdShkZHEtPmRfaW5vX3NvZnRsaW1pdCk7CiAJaWYgKGhhcmQgPT0gMCB8fCBoYXJkID49IHNvZnQpIHsKQEAgLTY4NywxMiArNjU2LDEyIEBACiAJLyoKIAkgKiBVcGRhdGUgd2FybmluZ3MgY291bnRlcihzKSBpZiByZXF1ZXN0ZWQKIAkgKi8KLQlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIEZTX0RRX0JXQVJOUykKLQkJZGRxLT5kX2J3YXJucyA9IGNwdV90b19iZTE2KG5ld2xpbS0+ZF9id2FybnMpOwotCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfSVdBUk5TKQotCQlkZHEtPmRfaXdhcm5zID0gY3B1X3RvX2JlMTYobmV3bGltLT5kX2l3YXJucyk7Ci0JaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9SVEJXQVJOUykKLQkJZGRxLT5kX3J0Yndhcm5zID0gY3B1X3RvX2JlMTYobmV3bGltLT5kX3J0Yndhcm5zKTsKKwlpZiAobmV3bGltLT5kX2ZpZWxkbWFzayAmIFFDX1NQQ19XQVJOUykKKwkJZGRxLT5kX2J3YXJucyA9IGNwdV90b19iZTE2KG5ld2xpbS0+ZF9zcGNfd2FybnMpOworCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgUUNfSU5PX1dBUk5TKQorCQlkZHEtPmRfaXdhcm5zID0gY3B1X3RvX2JlMTYobmV3bGltLT5kX2lub193YXJucyk7CisJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19SVF9TUENfV0FSTlMpCisJCWRkcS0+ZF9ydGJ3YXJucyA9IGNwdV90b19iZTE2KG5ld2xpbS0+ZF9ydF9zcGNfd2FybnMpOwogCiAJaWYgKGlkID09IDApIHsKIAkJLyoKQEAgLTcwMiwyNCArNjcxLDI0IEBACiAJCSAqIHNvZnQgYW5kIGhhcmQgbGltaXQgdmFsdWVzIChhbHJlYWR5IGRvbmUsIGFib3ZlKSwgYW5kCiAJCSAqIGZvciB3YXJuaW5ncy4KIAkJICovCi0JCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfQlRJTUVSKSB7Ci0JCQlxLT5xaV9idGltZWxpbWl0ID0gbmV3bGltLT5kX2J0aW1lcjsKLQkJCWRkcS0+ZF9idGltZXIgPSBjcHVfdG9fYmUzMihuZXdsaW0tPmRfYnRpbWVyKTsKKwkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfVElNRVIpIHsKKwkJCXEtPnFpX2J0aW1lbGltaXQgPSBuZXdsaW0tPmRfc3BjX3RpbWVyOworCQkJZGRxLT5kX2J0aW1lciA9IGNwdV90b19iZTMyKG5ld2xpbS0+ZF9zcGNfdGltZXIpOwogCQl9Ci0JCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfSVRJTUVSKSB7Ci0JCQlxLT5xaV9pdGltZWxpbWl0ID0gbmV3bGltLT5kX2l0aW1lcjsKLQkJCWRkcS0+ZF9pdGltZXIgPSBjcHVfdG9fYmUzMihuZXdsaW0tPmRfaXRpbWVyKTsKKwkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19JTk9fVElNRVIpIHsKKwkJCXEtPnFpX2l0aW1lbGltaXQgPSBuZXdsaW0tPmRfaW5vX3RpbWVyOworCQkJZGRxLT5kX2l0aW1lciA9IGNwdV90b19iZTMyKG5ld2xpbS0+ZF9pbm9fdGltZXIpOwogCQl9Ci0JCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgRlNfRFFfUlRCVElNRVIpIHsKLQkJCXEtPnFpX3J0YnRpbWVsaW1pdCA9IG5ld2xpbS0+ZF9ydGJ0aW1lcjsKLQkJCWRkcS0+ZF9ydGJ0aW1lciA9IGNwdV90b19iZTMyKG5ld2xpbS0+ZF9ydGJ0aW1lcik7CisJCWlmIChuZXdsaW0tPmRfZmllbGRtYXNrICYgUUNfUlRfU1BDX1RJTUVSKSB7CisJCQlxLT5xaV9ydGJ0aW1lbGltaXQgPSBuZXdsaW0tPmRfcnRfc3BjX3RpbWVyOworCQkJZGRxLT5kX3J0YnRpbWVyID0gY3B1X3RvX2JlMzIobmV3bGltLT5kX3J0X3NwY190aW1lcik7CiAJCX0KLQkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9CV0FSTlMpCi0JCQlxLT5xaV9id2FybmxpbWl0ID0gbmV3bGltLT5kX2J3YXJuczsKLQkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9JV0FSTlMpCi0JCQlxLT5xaV9pd2FybmxpbWl0ID0gbmV3bGltLT5kX2l3YXJuczsKLQkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBGU19EUV9SVEJXQVJOUykKLQkJCXEtPnFpX3J0Yndhcm5saW1pdCA9IG5ld2xpbS0+ZF9ydGJ3YXJuczsKKwkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19TUENfV0FSTlMpCisJCQlxLT5xaV9id2FybmxpbWl0ID0gbmV3bGltLT5kX3NwY193YXJuczsKKwkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19JTk9fV0FSTlMpCisJCQlxLT5xaV9pd2FybmxpbWl0ID0gbmV3bGltLT5kX2lub193YXJuczsKKwkJaWYgKG5ld2xpbS0+ZF9maWVsZG1hc2sgJiBRQ19SVF9TUENfV0FSTlMpCisJCQlxLT5xaV9ydGJ3YXJubGltaXQgPSBuZXdsaW0tPmRfcnRfc3BjX3dhcm5zOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIElmIHRoZSB1c2VyIGlzIG5vdyBvdmVyIHF1b3RhLCBzdGFydCB0aGUgdGltZWxpbWl0LgpAQCAtODAxLDcgKzc3MCw3IEBACiAJbXAtPm1fc2Iuc2JfcWZsYWdzID0gKG1wLT5tX3FmbGFncyAmIH4oZmxhZ3MpKSAmIFhGU19NT1VOVF9RVU9UQV9BTEw7CiAJc3Bpbl91bmxvY2soJm1wLT5tX3NiX2xvY2spOwogCi0JeGZzX21vZF9zYih0cCwgWEZTX1NCX1FGTEFHUyk7CisJeGZzX2xvZ19zYih0cCk7CiAKIAkvKgogCSAqIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHRyYW5zYWN0aW9uIGlzIHNlY3VyZSBvbiBkaXNrIGJlZm9yZSB3ZQpAQCAtODI0LDcgKzc5Myw3IEBACiAJc3RydWN0IHhmc19tb3VudAkqbXAsCiAJeGZzX2RxaWRfdAkJaWQsCiAJdWludAkJCXR5cGUsCi0Jc3RydWN0IGZzX2Rpc2tfcXVvdGEJKmRzdCkKKwlzdHJ1Y3QgcWNfZHFibGsJCSpkc3QpCiB7CiAJc3RydWN0IHhmc19kcXVvdAkqZHFwOwogCWludAkJCWVycm9yOwpAQCAtODQ4LDI4ICs4MTcsMjUgQEAKIAl9CiAKIAltZW1zZXQoZHN0LCAwLCBzaXplb2YoKmRzdCkpOwotCWRzdC0+ZF92ZXJzaW9uID0gRlNfRFFVT1RfVkVSU0lPTjsKLQlkc3QtPmRfZmxhZ3MgPSB4ZnNfcW1fZXhwb3J0X3F0eXBlX2ZsYWdzKGRxcC0+cV9jb3JlLmRfZmxhZ3MpOwotCWRzdC0+ZF9pZCA9IGJlMzJfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaWQpOwotCWRzdC0+ZF9ibGtfaGFyZGxpbWl0ID0KLQkJWEZTX0ZTQl9UT19CQihtcCwgYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9ibGtfaGFyZGxpbWl0KSk7Ci0JZHN0LT5kX2Jsa19zb2Z0bGltaXQgPQotCQlYRlNfRlNCX1RPX0JCKG1wLCBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2Jsa19zb2Z0bGltaXQpKTsKKwlkc3QtPmRfc3BjX2hhcmRsaW1pdCA9CisJCVhGU19GU0JfVE9fQihtcCwgYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9ibGtfaGFyZGxpbWl0KSk7CisJZHN0LT5kX3NwY19zb2Z0bGltaXQgPQorCQlYRlNfRlNCX1RPX0IobXAsIGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYmxrX3NvZnRsaW1pdCkpOwogCWRzdC0+ZF9pbm9faGFyZGxpbWl0ID0gYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9pbm9faGFyZGxpbWl0KTsKIAlkc3QtPmRfaW5vX3NvZnRsaW1pdCA9IGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaW5vX3NvZnRsaW1pdCk7Ci0JZHN0LT5kX2Jjb3VudCA9IFhGU19GU0JfVE9fQkIobXAsIGRxcC0+cV9yZXNfYmNvdW50KTsKLQlkc3QtPmRfaWNvdW50ID0gZHFwLT5xX3Jlc19pY291bnQ7Ci0JZHN0LT5kX2J0aW1lciA9IGJlMzJfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYnRpbWVyKTsKLQlkc3QtPmRfaXRpbWVyID0gYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9pdGltZXIpOwotCWRzdC0+ZF9pd2FybnMgPSBiZTE2X3RvX2NwdShkcXAtPnFfY29yZS5kX2l3YXJucyk7Ci0JZHN0LT5kX2J3YXJucyA9IGJlMTZfdG9fY3B1KGRxcC0+cV9jb3JlLmRfYndhcm5zKTsKLQlkc3QtPmRfcnRiX2hhcmRsaW1pdCA9Ci0JCVhGU19GU0JfVE9fQkIobXAsIGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfcnRiX2hhcmRsaW1pdCkpOwotCWRzdC0+ZF9ydGJfc29mdGxpbWl0ID0KLQkJWEZTX0ZTQl9UT19CQihtcCwgYmU2NF90b19jcHUoZHFwLT5xX2NvcmUuZF9ydGJfc29mdGxpbWl0KSk7Ci0JZHN0LT5kX3J0YmNvdW50ID0gWEZTX0ZTQl9UT19CQihtcCwgZHFwLT5xX3Jlc19ydGJjb3VudCk7Ci0JZHN0LT5kX3J0YnRpbWVyID0gYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9ydGJ0aW1lcik7Ci0JZHN0LT5kX3J0Yndhcm5zID0gYmUxNl90b19jcHUoZHFwLT5xX2NvcmUuZF9ydGJ3YXJucyk7CisJZHN0LT5kX3NwYWNlID0gWEZTX0ZTQl9UT19CKG1wLCBkcXAtPnFfcmVzX2Jjb3VudCk7CisJZHN0LT5kX2lub19jb3VudCA9IGRxcC0+cV9yZXNfaWNvdW50OworCWRzdC0+ZF9zcGNfdGltZXIgPSBiZTMyX3RvX2NwdShkcXAtPnFfY29yZS5kX2J0aW1lcik7CisJZHN0LT5kX2lub190aW1lciA9IGJlMzJfdG9fY3B1KGRxcC0+cV9jb3JlLmRfaXRpbWVyKTsKKwlkc3QtPmRfaW5vX3dhcm5zID0gYmUxNl90b19jcHUoZHFwLT5xX2NvcmUuZF9pd2FybnMpOworCWRzdC0+ZF9zcGNfd2FybnMgPSBiZTE2X3RvX2NwdShkcXAtPnFfY29yZS5kX2J3YXJucyk7CisJZHN0LT5kX3J0X3NwY19oYXJkbGltaXQgPQorCQlYRlNfRlNCX1RPX0IobXAsIGJlNjRfdG9fY3B1KGRxcC0+cV9jb3JlLmRfcnRiX2hhcmRsaW1pdCkpOworCWRzdC0+ZF9ydF9zcGNfc29mdGxpbWl0ID0KKwkJWEZTX0ZTQl9UT19CKG1wLCBiZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX3J0Yl9zb2Z0bGltaXQpKTsKKwlkc3QtPmRfcnRfc3BhY2UgPSBYRlNfRlNCX1RPX0IobXAsIGRxcC0+cV9yZXNfcnRiY291bnQpOworCWRzdC0+ZF9ydF9zcGNfdGltZXIgPSBiZTMyX3RvX2NwdShkcXAtPnFfY29yZS5kX3J0YnRpbWVyKTsKKwlkc3QtPmRfcnRfc3BjX3dhcm5zID0gYmUxNl90b19jcHUoZHFwLT5xX2NvcmUuZF9ydGJ3YXJucyk7CiAKIAkvKgogCSAqIEludGVybmFsbHksIHdlIGRvbid0IHJlc2V0IGFsbCB0aGUgdGltZXJzIHdoZW4gcXVvdGEgZW5mb3JjZW1lbnQKQEAgLTg4MiwyMyArODQ4LDIzIEBACiAJICAgICBkcXAtPnFfY29yZS5kX2ZsYWdzID09IFhGU19EUV9HUk9VUCkgfHwKIAkgICAgKCFYRlNfSVNfUFFVT1RBX0VORk9SQ0VEKG1wKSAmJgogCSAgICAgZHFwLT5xX2NvcmUuZF9mbGFncyA9PSBYRlNfRFFfUFJPSikpIHsKLQkJZHN0LT5kX2J0aW1lciA9IDA7Ci0JCWRzdC0+ZF9pdGltZXIgPSAwOwotCQlkc3QtPmRfcnRidGltZXIgPSAwOworCQlkc3QtPmRfc3BjX3RpbWVyID0gMDsKKwkJZHN0LT5kX2lub190aW1lciA9IDA7CisJCWRzdC0+ZF9ydF9zcGNfdGltZXIgPSAwOwogCX0KIAogI2lmZGVmIERFQlVHCi0JaWYgKCgoWEZTX0lTX1VRVU9UQV9FTkZPUkNFRChtcCkgJiYgZHN0LT5kX2ZsYWdzID09IEZTX1VTRVJfUVVPVEEpIHx8Ci0JICAgICAoWEZTX0lTX0dRVU9UQV9FTkZPUkNFRChtcCkgJiYgZHN0LT5kX2ZsYWdzID09IEZTX0dST1VQX1FVT1RBKSB8fAotCSAgICAgKFhGU19JU19QUVVPVEFfRU5GT1JDRUQobXApICYmIGRzdC0+ZF9mbGFncyA9PSBGU19QUk9KX1FVT1RBKSkgJiYKLQkgICAgZHN0LT5kX2lkICE9IDApIHsKLQkJaWYgKChkc3QtPmRfYmNvdW50ID4gZHN0LT5kX2Jsa19zb2Z0bGltaXQpICYmCi0JCSAgICAoZHN0LT5kX2Jsa19zb2Z0bGltaXQgPiAwKSkgewotCQkJQVNTRVJUKGRzdC0+ZF9idGltZXIgIT0gMCk7CisJaWYgKCgoWEZTX0lTX1VRVU9UQV9FTkZPUkNFRChtcCkgJiYgdHlwZSA9PSBYRlNfRFFfVVNFUikgfHwKKwkgICAgIChYRlNfSVNfR1FVT1RBX0VORk9SQ0VEKG1wKSAmJiB0eXBlID09IFhGU19EUV9HUk9VUCkgfHwKKwkgICAgIChYRlNfSVNfUFFVT1RBX0VORk9SQ0VEKG1wKSAmJiB0eXBlID09IFhGU19EUV9QUk9KKSkgJiYKKwkgICAgaWQgIT0gMCkgeworCQlpZiAoKGRzdC0+ZF9zcGFjZSA+IGRzdC0+ZF9zcGNfc29mdGxpbWl0KSAmJgorCQkgICAgKGRzdC0+ZF9zcGNfc29mdGxpbWl0ID4gMCkpIHsKKwkJCUFTU0VSVChkc3QtPmRfc3BjX3RpbWVyICE9IDApOwogCQl9Ci0JCWlmICgoZHN0LT5kX2ljb3VudCA+IGRzdC0+ZF9pbm9fc29mdGxpbWl0KSAmJgorCQlpZiAoKGRzdC0+ZF9pbm9fY291bnQgPiBkc3QtPmRfaW5vX3NvZnRsaW1pdCkgJiYKIAkJICAgIChkc3QtPmRfaW5vX3NvZnRsaW1pdCA+IDApKSB7Ci0JCQlBU1NFUlQoZHN0LT5kX2l0aW1lciAhPSAwKTsKKwkJCUFTU0VSVChkc3QtPmRfaW5vX3RpbWVyICE9IDApOwogCQl9CiAJfQogI2VuZGlmCkBAIC05MDgsMjYgKzg3NCw2IEBACiB9CiAKIFNUQVRJQyB1aW50Ci14ZnNfcW1fZXhwb3J0X3F0eXBlX2ZsYWdzKAotCXVpbnQgZmxhZ3MpCi17Ci0JLyoKLQkgKiBDYW4ndCBiZSBtb3JlIHRoYW4gb25lLCBvciBub25lLgotCSAqLwotCUFTU0VSVCgoZmxhZ3MgJiAoRlNfUFJPSl9RVU9UQSB8IEZTX1VTRVJfUVVPVEEpKSAhPQotCQkoRlNfUFJPSl9RVU9UQSB8IEZTX1VTRVJfUVVPVEEpKTsKLQlBU1NFUlQoKGZsYWdzICYgKEZTX1BST0pfUVVPVEEgfCBGU19HUk9VUF9RVU9UQSkpICE9Ci0JCShGU19QUk9KX1FVT1RBIHwgRlNfR1JPVVBfUVVPVEEpKTsKLQlBU1NFUlQoKGZsYWdzICYgKEZTX1VTRVJfUVVPVEEgfCBGU19HUk9VUF9RVU9UQSkpICE9Ci0JCShGU19VU0VSX1FVT1RBIHwgRlNfR1JPVVBfUVVPVEEpKTsKLQlBU1NFUlQoKGZsYWdzICYgKEZTX1BST0pfUVVPVEF8RlNfVVNFUl9RVU9UQXxGU19HUk9VUF9RVU9UQSkpICE9IDApOwotCi0JcmV0dXJuIChmbGFncyAmIFhGU19EUV9VU0VSKSA/Ci0JCUZTX1VTRVJfUVVPVEEgOiAoZmxhZ3MgJiBYRlNfRFFfUFJPSikgPwotCQkJRlNfUFJPSl9RVU9UQSA6IEZTX0dST1VQX1FVT1RBOwotfQotCi1TVEFUSUMgdWludAogeGZzX3FtX2V4cG9ydF9mbGFncygKIAl1aW50IGZsYWdzKQogewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19xdW90YW9wcy5jIGIvZnMveGZzL3hmc19xdW90YW9wcy5jCmluZGV4IDc1NDJiYmUuLjY5MjM5MDUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcXVvdGFvcHMuYworKysgYi9mcy94ZnMveGZzX3F1b3Rhb3BzLmMKQEAgLTY0LDE5ICs2NCwxMCBAQAogCXJldHVybiB4ZnNfcW1fc2NhbGxfZ2V0cXN0YXR2KG1wLCBmcXMpOwogfQogCi1TVEFUSUMgaW50Ci14ZnNfZnNfc2V0X3hzdGF0ZSgKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiLAotCXVuc2lnbmVkIGludAkJdWZsYWdzLAotCWludAkJCW9wKQorc3RhdGljIHVuc2lnbmVkIGludAoreGZzX3F1b3RhX2ZsYWdzKHVuc2lnbmVkIGludCB1ZmxhZ3MpCiB7Ci0Jc3RydWN0IHhmc19tb3VudAkqbXAgPSBYRlNfTShzYik7Ci0JdW5zaWduZWQgaW50CQlmbGFncyA9IDA7Ci0KLQlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCi0JCXJldHVybiAtRVJPRlM7Ci0JaWYgKG9wICE9IFFfWFFVT1RBUk0gJiYgIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSkKLQkJcmV0dXJuIC1FTk9TWVM7CisJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKIAogCWlmICh1ZmxhZ3MgJiBGU19RVU9UQV9VRFFfQUNDVCkKIAkJZmxhZ3MgfD0gWEZTX1VRVU9UQV9BQ0NUOwpAQCAtOTEsMTYgKzgyLDM5IEBACiAJaWYgKHVmbGFncyAmIEZTX1FVT1RBX1BEUV9FTkZEKQogCQlmbGFncyB8PSBYRlNfUFFVT1RBX0VORkQ7CiAKLQlzd2l0Y2ggKG9wKSB7Ci0JY2FzZSBRX1hRVU9UQU9OOgotCQlyZXR1cm4geGZzX3FtX3NjYWxsX3F1b3Rhb24obXAsIGZsYWdzKTsKLQljYXNlIFFfWFFVT1RBT0ZGOgotCQlpZiAoIVhGU19JU19RVU9UQV9PTihtcCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIHhmc19xbV9zY2FsbF9xdW90YW9mZihtcCwgZmxhZ3MpOwotCX0KKwlyZXR1cm4gZmxhZ3M7Cit9CiAKLQlyZXR1cm4gLUVJTlZBTDsKK1NUQVRJQyBpbnQKK3hmc19xdW90YV9lbmFibGUoCisJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKKwl1bnNpZ25lZCBpbnQJCXVmbGFncykKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKKworCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKKwkJcmV0dXJuIC1FUk9GUzsKKwlpZiAoIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKKwlyZXR1cm4geGZzX3FtX3NjYWxsX3F1b3Rhb24obXAsIHhmc19xdW90YV9mbGFncyh1ZmxhZ3MpKTsKK30KKworU1RBVElDIGludAoreGZzX3F1b3RhX2Rpc2FibGUoCisJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKKwl1bnNpZ25lZCBpbnQJCXVmbGFncykKK3sKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKKworCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKKwkJcmV0dXJuIC1FUk9GUzsKKwlpZiAoIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKCFYRlNfSVNfUVVPVEFfT04obXApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB4ZnNfcW1fc2NhbGxfcXVvdGFvZmYobXAsIHhmc19xdW90YV9mbGFncyh1ZmxhZ3MpKTsKIH0KIAogU1RBVElDIGludApAQCAtMTMxLDcgKzE0NSw3IEBACiB4ZnNfZnNfZ2V0X2RxYmxrKAogCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCiAJc3RydWN0IGtxaWQJCXFpZCwKLQlzdHJ1Y3QgZnNfZGlza19xdW90YQkqZmRxKQorCXN0cnVjdCBxY19kcWJsawkJKnFkcSkKIHsKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKIApAQCAtMTQxLDE0ICsxNTUsMTQgQEAKIAkJcmV0dXJuIC1FU1JDSDsKIAogCXJldHVybiB4ZnNfcW1fc2NhbGxfZ2V0cXVvdGEobXAsIGZyb21fa3FpZCgmaW5pdF91c2VyX25zLCBxaWQpLAotCQkJCSAgICAgIHhmc19xdW90YV90eXBlKHFpZC50eXBlKSwgZmRxKTsKKwkJCQkgICAgICB4ZnNfcXVvdGFfdHlwZShxaWQudHlwZSksIHFkcSk7CiB9CiAKIFNUQVRJQyBpbnQKIHhmc19mc19zZXRfZHFibGsoCiAJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKIAlzdHJ1Y3Qga3FpZAkJcWlkLAotCXN0cnVjdCBmc19kaXNrX3F1b3RhCSpmZHEpCisJc3RydWN0IHFjX2RxYmxrCQkqcWRxKQogewogCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gWEZTX00oc2IpOwogCkBAIC0xNjAsMTMgKzE3NCwxNCBAQAogCQlyZXR1cm4gLUVTUkNIOwogCiAJcmV0dXJuIHhmc19xbV9zY2FsbF9zZXRxbGltKG1wLCBmcm9tX2txaWQoJmluaXRfdXNlcl9ucywgcWlkKSwKLQkJCQkgICAgIHhmc19xdW90YV90eXBlKHFpZC50eXBlKSwgZmRxKTsKKwkJCQkgICAgIHhmc19xdW90YV90eXBlKHFpZC50eXBlKSwgcWRxKTsKIH0KIAogY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcyB4ZnNfcXVvdGFjdGxfb3BlcmF0aW9ucyA9IHsKIAkuZ2V0X3hzdGF0ZXYJCT0geGZzX2ZzX2dldF94c3RhdGV2LAogCS5nZXRfeHN0YXRlCQk9IHhmc19mc19nZXRfeHN0YXRlLAotCS5zZXRfeHN0YXRlCQk9IHhmc19mc19zZXRfeHN0YXRlLAorCS5xdW90YV9lbmFibGUJCT0geGZzX3F1b3RhX2VuYWJsZSwKKwkucXVvdGFfZGlzYWJsZQkJPSB4ZnNfcXVvdGFfZGlzYWJsZSwKIAkucm1feHF1b3RhCQk9IHhmc19mc19ybV94cXVvdGEsCiAJLmdldF9kcWJsawkJPSB4ZnNfZnNfZ2V0X2RxYmxrLAogCS5zZXRfZHFibGsJCT0geGZzX2ZzX3NldF9kcWJsaywKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfc3VwZXIuYyBiL2ZzL3hmcy94ZnNfc3VwZXIuYwppbmRleCAxOWNiZGExLi5mMjQ0OWZkIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL3hmc19zdXBlci5jCkBAIC02ODUsNyArNjg1LDcgQEAKIAkJCQkgICAgbXApOwogCWlmIChJU19FUlIoKmJkZXZwKSkgewogCQllcnJvciA9IFBUUl9FUlIoKmJkZXZwKTsKLQkJeGZzX3dhcm4obXAsICJJbnZhbGlkIGRldmljZSBbJXNdLCBlcnJvcj0lZFxuIiwgbmFtZSwgZXJyb3IpOworCQl4ZnNfd2FybihtcCwgIkludmFsaWQgZGV2aWNlIFslc10sIGVycm9yPSVkIiwgbmFtZSwgZXJyb3IpOwogCX0KIAogCXJldHVybiBlcnJvcjsKQEAgLTExMTEsNiArMTExMSwxMSBAQAogCQkJCQlzdGF0cC0+Zl9maWxlcywKIAkJCQkJbXAtPm1fbWF4aWNvdW50KTsKIAorCS8qIElmIHNiX2ljb3VudCBvdmVyc2hvdCBtYXhpY291bnQsIHJlcG9ydCBhY3R1YWwgYWxsb2NhdGlvbiAqLworCXN0YXRwLT5mX2ZpbGVzID0gbWF4X3QodHlwZW9mKHN0YXRwLT5mX2ZpbGVzKSwKKwkJCQkJc3RhdHAtPmZfZmlsZXMsCisJCQkJCXNicC0+c2JfaWNvdW50KTsKKwogCS8qIG1ha2Ugc3VyZSBzdGF0cC0+Zl9mZnJlZSBkb2VzIG5vdCB1bmRlcmZsb3cgKi8KIAlmZnJlZSA9IHN0YXRwLT5mX2ZpbGVzIC0gKHNicC0+c2JfaWNvdW50IC0gc2JwLT5zYl9pZnJlZSk7CiAJc3RhdHAtPmZfZmZyZWUgPSBtYXhfdChfX2ludDY0X3QsIGZmcmVlLCAwKTsKQEAgLTEyNTcsMTMgKzEyNjIsMTMgQEAKIAkJICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgcmVtb3VudCB0byB3cml0ZWFibGUgc3RhdGUgd2UKIAkJICogbWlnaHQgaGF2ZSBzb21lIHN1cGVyYmxvY2sgY2hhbmdlcyB0byB1cGRhdGUuCiAJCSAqLwotCQlpZiAobXAtPm1fdXBkYXRlX2ZsYWdzKSB7Ci0JCQllcnJvciA9IHhmc19tb3VudF9sb2dfc2IobXAsIG1wLT5tX3VwZGF0ZV9mbGFncyk7CisJCWlmIChtcC0+bV91cGRhdGVfc2IpIHsKKwkJCWVycm9yID0geGZzX3N5bmNfc2IobXAsIGZhbHNlKTsKIAkJCWlmIChlcnJvcikgewogCQkJCXhmc193YXJuKG1wLCAiZmFpbGVkIHRvIHdyaXRlIHNiIGNoYW5nZXMiKTsKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCQl9Ci0JCQltcC0+bV91cGRhdGVfZmxhZ3MgPSAwOworCQkJbXAtPm1fdXBkYXRlX3NiID0gZmFsc2U7CiAJCX0KIAogCQkvKgpAQCAtMTI5Myw4ICsxMjk4LDkgQEAKIAogLyoKICAqIFNlY29uZCBzdGFnZSBvZiBhIGZyZWV6ZS4gVGhlIGRhdGEgaXMgYWxyZWFkeSBmcm96ZW4gc28gd2Ugb25seQotICogbmVlZCB0byB0YWtlIGNhcmUgb2YgdGhlIG1ldGFkYXRhLiBPbmNlIHRoYXQncyBkb25lIHdyaXRlIGEgZHVtbXkKLSAqIHJlY29yZCB0byBkaXJ0eSB0aGUgbG9nIGluIGNhc2Ugb2YgYSBjcmFzaCB3aGlsZSBmcm96ZW4uCisgKiBuZWVkIHRvIHRha2UgY2FyZSBvZiB0aGUgbWV0YWRhdGEuIE9uY2UgdGhhdCdzIGRvbmUgc3luYyB0aGUgc3VwZXJibG9jaworICogdG8gdGhlIGxvZyB0byBkaXJ0eSBpdCBpbiBjYXNlIG9mIGEgY3Jhc2ggd2hpbGUgZnJvemVuLiBUaGlzIGVuc3VyZXMgdGhhdCB3ZQorICogd2lsbCByZWNvdmVyIHRoZSB1bmxpbmtlZCBpbm9kZSBsaXN0cyBvbiB0aGUgbmV4dCBtb3VudC4KICAqLwogU1RBVElDIGludAogeGZzX2ZzX2ZyZWV6ZSgKQEAgLTEzMDQsNyArMTMxMCw3IEBACiAKIAl4ZnNfc2F2ZV9yZXN2YmxrcyhtcCk7CiAJeGZzX3F1aWVzY2VfYXR0cihtcCk7Ci0JcmV0dXJuIHhmc19mc19sb2dfZHVtbXkobXApOworCXJldHVybiB4ZnNfc3luY19zYihtcCwgdHJ1ZSk7CiB9CiAKIFNUQVRJQyBpbnQKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfc3lzY3RsLmMgYi9mcy94ZnMveGZzX3N5c2N0bC5jCmluZGV4IDE3NDNiOWYuLmEwYzgwNjcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfc3lzY3RsLmMKKysrIGIvZnMveGZzL3hmc19zeXNjdGwuYwpAQCAtMTQ5LDI0ICsxNDksNiBAQAogCQkuZXh0cmEyCQk9ICZ4ZnNfcGFyYW1zLmluaGVyaXRfbm9hdGltLm1heAogCX0sCiAJewotCQkucHJvY25hbWUJPSAieGZzYnVmZF9jZW50aXNlY3MiLAotCQkuZGF0YQkJPSAmeGZzX3BhcmFtcy54ZnNfYnVmX3RpbWVyLnZhbCwKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAotCQkuZXh0cmExCQk9ICZ4ZnNfcGFyYW1zLnhmc19idWZfdGltZXIubWluLAotCQkuZXh0cmEyCQk9ICZ4ZnNfcGFyYW1zLnhmc19idWZfdGltZXIubWF4Ci0JfSwKLQl7Ci0JCS5wcm9jbmFtZQk9ICJhZ2VfYnVmZmVyX2NlbnRpc2VjcyIsCi0JCS5kYXRhCQk9ICZ4ZnNfcGFyYW1zLnhmc19idWZfYWdlLnZhbCwKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWNfbWlubWF4LAotCQkuZXh0cmExCQk9ICZ4ZnNfcGFyYW1zLnhmc19idWZfYWdlLm1pbiwKLQkJLmV4dHJhMgkJPSAmeGZzX3BhcmFtcy54ZnNfYnVmX2FnZS5tYXgKLQl9LAotCXsKIAkJLnByb2NuYW1lCT0gImluaGVyaXRfbm9zeW1saW5rcyIsCiAJCS5kYXRhCQk9ICZ4ZnNfcGFyYW1zLmluaGVyaXRfbm9zeW0udmFsLAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5jIGIvZnMveGZzL3hmc190cmFucy5jCmluZGV4IGZhMzEzNWIuLmViOTBjZDUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuYworKysgYi9mcy94ZnMveGZzX3RyYW5zLmMKQEAgLTQ3Miw2ICs0NzIsNyBAQAogCQl3aG9sZSA9IDE7CiAJfQogCisJeGZzX3RyYW5zX2J1Zl9zZXRfdHlwZSh0cCwgYnAsIFhGU19CTEZUX1NCX0JVRik7CiAJaWYgKHdob2xlKQogCQkvKgogCQkgKiBMb2cgdGhlIHdob2xlIHRoaW5nLCB0aGUgZmllbGRzIGFyZSBub25jb250aWd1b3VzLgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19idWYuYyBiL2ZzL3hmcy94ZnNfdHJhbnNfYnVmLmMKaW5kZXggMGE0ZDRhYi4uNzU3OTg0MSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19idWYuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCkBAIC0zMjcsOSArMzI3LDEwIEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWlmICh0cCkKKwlpZiAodHApIHsKIAkJX3hmc190cmFuc19iam9pbih0cCwgYnAsIDEpOwotCXRyYWNlX3hmc190cmFuc19yZWFkX2J1ZihicC0+Yl9mc3ByaXYpOworCQl0cmFjZV94ZnNfdHJhbnNfcmVhZF9idWYoYnAtPmJfZnNwcml2KTsKKwl9CiAJKmJwcCA9IGJwOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNidWZmZXIuaCBiL2luY2x1ZGUvYWNwaS9hY2J1ZmZlci5oCmluZGV4IGQ1ZWM2YzguLjZiMDQwZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY2J1ZmZlci5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY2J1ZmZlci5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjY29uZmlnLmggYi9pbmNsdWRlL2FjcGkvYWNjb25maWcuaAppbmRleCA1YTBhM2U1Li4wM2FhY2ZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNjb25maWcuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNjb25maWcuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY2V4Y2VwLmggYi9pbmNsdWRlL2FjcGkvYWNleGNlcC5oCmluZGV4IDhiMDZlNGMuLjExYzNhMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY2V4Y2VwLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjZXhjZXAuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY25hbWVzLmggYi9pbmNsdWRlL2FjcGkvYWNuYW1lcy5oCmluZGV4IDc0NjEzMjcuLjI3M2RlNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY25hbWVzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjbmFtZXMuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY291dHB1dC5oIGIvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKaW5kZXggMWJhYWU2ZS4uOTMxOGE4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKKysrIGIvaW5jbHVkZS9hY3BpL2Fjb3V0cHV0LmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaS5oIGIvaW5jbHVkZS9hY3BpL2FjcGkuaAppbmRleCBhMDhlNTVhLi5iMGJiMzBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaS5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3BpLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWNwaW9zeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCmluZGV4IDAzYjNlNmQuLjBiYzc4ZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3Bpb3N4Zi5oCkBAIC03LDcgKzcsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oIGIvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCmluZGV4IDViYTc4NDYuLmQ1NmY1ZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3BpeGYuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00Niw3ICs0Niw3IEBACiAKIC8qIEN1cnJlbnQgQUNQSUNBIHN1YnN5c3RlbSB2ZXJzaW9uIGluIFlZWVlNTUREIGZvcm1hdCAqLwogCi0jZGVmaW5lIEFDUElfQ0FfVkVSU0lPTiAgICAgICAgICAgICAgICAgMHgyMDE0MTEwNworI2RlZmluZSBBQ1BJX0NBX1ZFUlNJT04gICAgICAgICAgICAgICAgIDB4MjAxNTAyMDQKIAogI2luY2x1ZGUgPGFjcGkvYWNjb25maWcuaD4KICNpbmNsdWRlIDxhY3BpL2FjdHlwZXMuaD4KQEAgLTU2OSw2ICs1NjksMTQgQEAKIAkJCQkJCQkgIGFkZHJlc3MsCiAJCQkJCQkJICB2b2lkICpjb250ZXh0KSkKIEFDUElfSFdfREVQRU5ERU5UX1JFVFVSTl9TVEFUVVMoYWNwaV9zdGF0dXMKKwkJCQkgYWNwaV9pbnN0YWxsX2dwZV9yYXdfaGFuZGxlcihhY3BpX2hhbmRsZQorCQkJCQkJCSAgICAgIGdwZV9kZXZpY2UsCisJCQkJCQkJICAgICAgdTMyIGdwZV9udW1iZXIsCisJCQkJCQkJICAgICAgdTMyIHR5cGUsCisJCQkJCQkJICAgICAgYWNwaV9ncGVfaGFuZGxlcgorCQkJCQkJCSAgICAgIGFkZHJlc3MsCisJCQkJCQkJICAgICAgdm9pZCAqY29udGV4dCkpCitBQ1BJX0hXX0RFUEVOREVOVF9SRVRVUk5fU1RBVFVTKGFjcGlfc3RhdHVzCiAJCQkJIGFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKGFjcGlfaGFuZGxlIGdwZV9kZXZpY2UsCiAJCQkJCQkJIHUzMiBncGVfbnVtYmVyLAogCQkJCQkJCSBhY3BpX2dwZV9oYW5kbGVyCkBAIC04OTEsMTIgKzg5OSw2IEBACiBBQ1BJX0dMT0JBTCh1OCwgYWNwaV9nYmxfcGVybWFuZW50X21tYXApOwogCiBBQ1BJX0VYVEVSTkFMX1JFVFVSTl9TVEFUVVMoYWNwaV9zdGF0dXMKLQkJCSAgICBhY3BpX2dldF9pZChhY3BpX2hhbmRsZSBvYmplY3QsCi0JCQkJCWFjcGlfb3duZXJfaWQgKiBvdXRfdHlwZSkpCi0KLUFDUElfRVhURVJOQUxfUkVUVVJOX1NUQVRVUyhhY3BpX3N0YXR1cyBhY3BpX3VubG9hZF90YWJsZV9pZChhY3BpX293bmVyX2lkIGlkKSkKLQotQUNQSV9FWFRFUk5BTF9SRVRVUk5fU1RBVFVTKGFjcGlfc3RhdHVzCiAJCQkgICAgYWNwaV9nZXRfdGFibGVfd2l0aF9zaXplKGFjcGlfc3RyaW5nIHNpZ25hdHVyZSwKIAkJCQkJCSAgICAgdTMyIGluc3RhbmNlLAogCQkJCQkJICAgICBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3Jlc3R5cC5oIGIvaW5jbHVkZS9hY3BpL2FjcmVzdHlwLmgKaW5kZXggZWI3NjBjYS4uZWJlMjQyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcmVzdHlwLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcmVzdHlwLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMDUsNDMgKzMwNSw1MSBAQAogCXU4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfYWRkcmVzc19maXhlZDsgXAogCXVuaW9uIGFjcGlfcmVzb3VyY2VfYXR0cmlidXRlICAgICAgICAgICBpbmZvOwogCi1zdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzIHsKLUFDUElfUkVTT1VSQ0VfQUREUkVTU19DT01NT059OwotCi1zdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzMTYgewotCUFDUElfUkVTT1VSQ0VfQUREUkVTU19DT01NT04gdTE2IGdyYW51bGFyaXR5Oworc3RydWN0IGFjcGlfYWRkcmVzczE2X2F0dHJpYnV0ZSB7CisJdTE2IGdyYW51bGFyaXR5OwogCXUxNiBtaW5pbXVtOwogCXUxNiBtYXhpbXVtOwogCXUxNiB0cmFuc2xhdGlvbl9vZmZzZXQ7CiAJdTE2IGFkZHJlc3NfbGVuZ3RoOwotCXN0cnVjdCBhY3BpX3Jlc291cmNlX3NvdXJjZSByZXNvdXJjZV9zb3VyY2U7CiB9OwogCi1zdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzMzIgewotCUFDUElfUkVTT1VSQ0VfQUREUkVTU19DT01NT04gdTMyIGdyYW51bGFyaXR5Oworc3RydWN0IGFjcGlfYWRkcmVzczMyX2F0dHJpYnV0ZSB7CisJdTMyIGdyYW51bGFyaXR5OwogCXUzMiBtaW5pbXVtOwogCXUzMiBtYXhpbXVtOwogCXUzMiB0cmFuc2xhdGlvbl9vZmZzZXQ7CiAJdTMyIGFkZHJlc3NfbGVuZ3RoOwotCXN0cnVjdCBhY3BpX3Jlc291cmNlX3NvdXJjZSByZXNvdXJjZV9zb3VyY2U7CiB9OwogCi1zdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzNjQgewotCUFDUElfUkVTT1VSQ0VfQUREUkVTU19DT01NT04gdTY0IGdyYW51bGFyaXR5OwotCXU2NCBtaW5pbXVtOwotCXU2NCBtYXhpbXVtOwotCXU2NCB0cmFuc2xhdGlvbl9vZmZzZXQ7Ci0JdTY0IGFkZHJlc3NfbGVuZ3RoOwotCXN0cnVjdCBhY3BpX3Jlc291cmNlX3NvdXJjZSByZXNvdXJjZV9zb3VyY2U7Ci19OwotCi1zdHJ1Y3QgYWNwaV9yZXNvdXJjZV9leHRlbmRlZF9hZGRyZXNzNjQgewotCUFDUElfUkVTT1VSQ0VfQUREUkVTU19DT01NT04gdTggcmV2aXNpb25fSUQ7CitzdHJ1Y3QgYWNwaV9hZGRyZXNzNjRfYXR0cmlidXRlIHsKIAl1NjQgZ3JhbnVsYXJpdHk7CiAJdTY0IG1pbmltdW07CiAJdTY0IG1heGltdW07CiAJdTY0IHRyYW5zbGF0aW9uX29mZnNldDsKIAl1NjQgYWRkcmVzc19sZW5ndGg7Cit9OworCitzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzIHsKK0FDUElfUkVTT1VSQ0VfQUREUkVTU19DT01NT059OworCitzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzMTYgeworCUFDUElfUkVTT1VSQ0VfQUREUkVTU19DT01NT04gc3RydWN0IGFjcGlfYWRkcmVzczE2X2F0dHJpYnV0ZSBhZGRyZXNzOworCXN0cnVjdCBhY3BpX3Jlc291cmNlX3NvdXJjZSByZXNvdXJjZV9zb3VyY2U7Cit9OworCitzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzMzIgeworCUFDUElfUkVTT1VSQ0VfQUREUkVTU19DT01NT04gc3RydWN0IGFjcGlfYWRkcmVzczMyX2F0dHJpYnV0ZSBhZGRyZXNzOworCXN0cnVjdCBhY3BpX3Jlc291cmNlX3NvdXJjZSByZXNvdXJjZV9zb3VyY2U7Cit9OworCitzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9hZGRyZXNzNjQgeworCUFDUElfUkVTT1VSQ0VfQUREUkVTU19DT01NT04gc3RydWN0IGFjcGlfYWRkcmVzczY0X2F0dHJpYnV0ZSBhZGRyZXNzOworCXN0cnVjdCBhY3BpX3Jlc291cmNlX3NvdXJjZSByZXNvdXJjZV9zb3VyY2U7Cit9OworCitzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9leHRlbmRlZF9hZGRyZXNzNjQgeworCUFDUElfUkVTT1VSQ0VfQUREUkVTU19DT01NT04gdTggcmV2aXNpb25fSUQ7CisJc3RydWN0IGFjcGlfYWRkcmVzczY0X2F0dHJpYnV0ZSBhZGRyZXNzOwogCXU2NCB0eXBlX3NwZWNpZmljOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwuaAppbmRleCBiZWUxOWQ4Li5kNDA4MWZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3RibDEuaCBiL2luY2x1ZGUvYWNwaS9hY3RibDEuaAppbmRleCAyOWU3OTM3Li5iODBiMGU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWN0YmwxLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjdGJsMS5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjdGJsMi5oIGIvaW5jbHVkZS9hY3BpL2FjdGJsMi5oCmluZGV4IGVjZmY2MjQuLmYwNmQ3NWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3RibDIuaAorKysgYi9pbmNsdWRlL2FjcGkvYWN0YmwyLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvYWN0YmwzLmggYi9pbmNsdWRlL2FjcGkvYWN0YmwzLmgKaW5kZXggNTQ4MGNiMi4uNDQwY2E4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjdGJsMy5oCisrKyBiL2luY2x1ZGUvYWNwaS9hY3RibDMuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmggYi9pbmNsdWRlL2FjcGkvYWN0eXBlcy5oCmluZGV4IGJiZWYxNzMuLmIwMzRmMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9hY3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjdHlwZXMuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTc0NCw3ICs3NDQsNyBAQAogLyoKICAqIEdQRSBpbmZvIGZsYWdzIC0gUGVyIEdQRQogICogKy0tLS0tLS0rLSstKy0tLSsKLSAqIHwgIDc6NCAgfDN8MnwxOjB8CisgKiB8ICA3OjUgIHw0fDN8MjowfAogICogKy0tLS0tLS0rLSstKy0tLSsKICAqICAgICB8ICAgIHwgfCAgfAogICogICAgIHwgICAgfCB8ICArLS0gVHlwZSBvZiBkaXNwYXRjaDp0byBtZXRob2QsIGhhbmRsZXIsIG5vdGlmeSwgb3Igbm9uZQpAQCAtNzU2LDEzICs3NTYsMTUgQEAKICNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfTUVUSE9EICAgICAgICAodTgpIDB4MDEKICNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfSEFORExFUiAgICAgICAodTgpIDB4MDIKICNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfTk9USUZZICAgICAgICAodTgpIDB4MDMKLSNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSyAgICAgICAgICAodTgpIDB4MDMKKyNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfUkFXX0hBTkRMRVIgICAodTgpIDB4MDQKKyNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSyAgICAgICAgICAodTgpIDB4MDcKKyNkZWZpbmUgQUNQSV9HUEVfRElTUEFUQ0hfVFlQRShmbGFncykgICAoKHU4KSAoKGZsYWdzKSAmIEFDUElfR1BFX0RJU1BBVENIX01BU0spKQogCi0jZGVmaW5lIEFDUElfR1BFX0xFVkVMX1RSSUdHRVJFRCAgICAgICAgKHU4KSAweDA0CisjZGVmaW5lIEFDUElfR1BFX0xFVkVMX1RSSUdHRVJFRCAgICAgICAgKHU4KSAweDA4CiAjZGVmaW5lIEFDUElfR1BFX0VER0VfVFJJR0dFUkVEICAgICAgICAgKHU4KSAweDAwCi0jZGVmaW5lIEFDUElfR1BFX1hSVVBUX1RZUEVfTUFTSyAgICAgICAgKHU4KSAweDA0CisjZGVmaW5lIEFDUElfR1BFX1hSVVBUX1RZUEVfTUFTSyAgICAgICAgKHU4KSAweDA4CiAKLSNkZWZpbmUgQUNQSV9HUEVfQ0FOX1dBS0UgICAgICAgICAgICAgICAodTgpIDB4MDgKKyNkZWZpbmUgQUNQSV9HUEVfQ0FOX1dBS0UgICAgICAgICAgICAgICAodTgpIDB4MTAKIAogLyoKICAqIEZsYWdzIGZvciBHUEUgYW5kIExvY2sgaW50ZXJmYWNlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZW52LmggYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNlbnYuaAppbmRleCA1ZjhjYzFmLi5hZDc0ZGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNlbnYuaAorKysgYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNlbnYuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2VudmV4LmggYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNlbnZleC5oCmluZGV4IDJiNjEyMzguLjcxZTVlYzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2VudmV4LmgKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZW52ZXguaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2djYy5oIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKaW5kZXggMzg0ODc1ZC4uZjU0ZGUwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKKysrIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjZ2NjLmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaAppbmRleCAxYmE3YzE5Li43NGJhNDZjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaAorKysgYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXhleC5oIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXhleC5oCmluZGV4IDU2OGQ0YjguLmFjZWRjM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4ZXguaAorKysgYi9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eGV4LmgKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaAppbmRleCA3N2ZmNTQ3Li41YmRhYjZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmgKQEAgLTQsNiArNCw3IEBACiAjZGVmaW5lIF9fQVJDSF9IQVNfNExFVkVMX0hBQ0sKICNkZWZpbmUgX19QQUdFVEFCTEVfUFVEX0ZPTERFRAogCisjZGVmaW5lIFBVRF9TSElGVAkJCVBHRElSX1NISUZUCiAjZGVmaW5lIFBVRF9TSVpFCQkJUEdESVJfU0laRQogI2RlZmluZSBQVURfTUFTSwkJCVBHRElSX01BU0sKICNkZWZpbmUgUFRSU19QRVJfUFVECQkJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaAppbmRleCAxNzdkNTk3Li4xMjlkZTkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaApAQCAtNDc0LDIxICs0NzQsNiBAQAogewogCXJldHVybiBwdGU7CiB9Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX2ZpbGVfY2xlYXJfc29mdF9kaXJ0eShwdGVfdCBwdGUpCi17Ci0gICAgICAgcmV0dXJuIHB0ZTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfZmlsZV9ta3NvZnRfZGlydHkocHRlX3QgcHRlKQotewotICAgICAgIHJldHVybiBwdGU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9maWxlX3NvZnRfZGlydHkocHRlX3QgcHRlKQotewotICAgICAgIHJldHVybiAwOwotfQogI2VuZGlmCiAKICNpZm5kZWYgX19IQVZFX1BGTk1BUF9UUkFDS0lORwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jbG9ja3NvdXJjZS9hcm1fYXJjaF90aW1lci5oIGIvaW5jbHVkZS9jbG9ja3NvdXJjZS9hcm1fYXJjaF90aW1lci5oCmluZGV4IDZkMjZiNDAuLjk5MTZkMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY2xvY2tzb3VyY2UvYXJtX2FyY2hfdGltZXIuaAorKysgYi9pbmNsdWRlL2Nsb2Nrc291cmNlL2FybV9hcmNoX3RpbWVyLmgKQEAgLTE2LDcgKzE2LDcgQEAKICNpZm5kZWYgX19DTEtTT1VSQ0VfQVJNX0FSQ0hfVElNRVJfSAogI2RlZmluZSBfX0NMS1NPVVJDRV9BUk1fQVJDSF9USU1FUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVjb3VudGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2RlZmluZSBBUkNIX1RJTUVSX0NUUkxfRU5BQkxFCQkoMSA8PCAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vaWZfYWxnLmggYi9pbmNsdWRlL2NyeXB0by9pZl9hbGcuaAppbmRleCBjZDYyYmY0Li44OGVhNjRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2NyeXB0by9pZl9hbGcuaAorKysgYi9pbmNsdWRlL2NyeXB0by9pZl9hbGcuaApAQCAtNjcsOCArNjcsNyBAQAogaW50IGFmX2FsZ19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spOwogaW50IGFmX2FsZ19hY2NlcHQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrKTsKIAotaW50IGFmX2FsZ19tYWtlX3NnKHN0cnVjdCBhZl9hbGdfc2dsICpzZ2wsIHZvaWQgX191c2VyICphZGRyLCBpbnQgbGVuLAotCQkgICBpbnQgd3JpdGUpOworaW50IGFmX2FsZ19tYWtlX3NnKHN0cnVjdCBhZl9hbGdfc2dsICpzZ2wsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwgaW50IGxlbik7CiB2b2lkIGFmX2FsZ19mcmVlX3NnKHN0cnVjdCBhZl9hbGdfc2dsICpzZ2wpOwogCiBpbnQgYWZfYWxnX2Ntc2dfc2VuZChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBhZl9hbGdfY29udHJvbCAqY29uKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2k5MTVfY29tcG9uZW50LmggYi9pbmNsdWRlL2RybS9pOTE1X2NvbXBvbmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmYyMmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9pOTE1X2NvbXBvbmVudC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIF9JOTE1X0NPTVBPTkVOVF9IXworI2RlZmluZSBfSTkxNV9DT01QT05FTlRfSF8KKworc3RydWN0IGk5MTVfYXVkaW9fY29tcG9uZW50IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwljb25zdCBzdHJ1Y3QgaTkxNV9hdWRpb19jb21wb25lbnRfb3BzIHsKKwkJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJCXZvaWQgKCpnZXRfcG93ZXIpKHN0cnVjdCBkZXZpY2UgKik7CisJCXZvaWQgKCpwdXRfcG93ZXIpKHN0cnVjdCBkZXZpY2UgKik7CisJCWludCAoKmdldF9jZGNsa19mcmVxKShzdHJ1Y3QgZGV2aWNlICopOworCX0gKm9wczsKK307CisKKyNlbmRpZiAvKiBfSTkxNV9DT01QT05FTlRfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2k5MTVfcG93ZXJ3ZWxsLmggYi9pbmNsdWRlL2RybS9pOTE1X3Bvd2Vyd2VsbC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYWE2ZjExLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfcG93ZXJ3ZWxsLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBDb3B5cmlnaHQgMjAxMyBJbnRlbCBJbmMuCi0gKiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCi0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCi0gKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCi0gKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCi0gKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCi0gKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KLSAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQotICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKLSAqIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKLSAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgotICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQotICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9JOTE1X1BPV0VSV0VMTF9IXwotI2RlZmluZSBfSTkxNV9QT1dFUldFTExfSF8KLQotLyogRm9yIHVzZSBieSBoZGFfaTkxNSBkcml2ZXIgKi8KLWV4dGVybiBpbnQgaTkxNV9yZXF1ZXN0X3Bvd2VyX3dlbGwodm9pZCk7Ci1leHRlcm4gaW50IGk5MTVfcmVsZWFzZV9wb3dlcl93ZWxsKHZvaWQpOwotZXh0ZXJuIGludCBpOTE1X2dldF9jZGNsa19mcmVxKHZvaWQpOwotCi0jZW5kaWYJCQkJLyogX0k5MTVfUE9XRVJXRUxMX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2Nsb2NrL3JrMzI4OC1jcnUuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcmszMjg4LWNydS5oCmluZGV4IGY2MGNlNzIuLjFjMzRjMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcmszMjg4LWNydS5oCisrKyBiL2luY2x1ZGUvZHQtYmluZGluZ3MvY2xvY2svcmszMjg4LWNydS5oCkBAIC04MSw2ICs4MSw5IEBACiAjZGVmaW5lIFNDTEtfU0RJTzFfU0FNUExFCTEyMAogI2RlZmluZSBTQ0xLX0VNTUNfU0FNUExFCTEyMQogCisjZGVmaW5lIFNDTEtfTUFDCQkxNTEKKyNkZWZpbmUgU0NMS19NQUNSRUZfT1VUCQkxNTIKKwogI2RlZmluZSBEQ0xLX1ZPUDAJCTE5MAogI2RlZmluZSBEQ0xLX1ZPUDEJCTE5MQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2R0LWJpbmRpbmdzL2dwaW8vbWVzb244LWdwaW8uaCBiL2luY2x1ZGUvZHQtYmluZGluZ3MvZ3Bpby9tZXNvbjgtZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYWViNWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2R0LWJpbmRpbmdzL2dwaW8vbWVzb244LWdwaW8uaApAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIEdQSU8gZGVmaW5pdGlvbnMgZm9yIEFtbG9naWMgTWVzb244IFNvQ3MKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQmVuaWFtaW5vIEdhbHZhbmkgPGIuZ2FsdmFuaUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIF9EVF9CSU5ESU5HU19NRVNPTjhfR1BJT19ICisjZGVmaW5lIF9EVF9CSU5ESU5HU19NRVNPTjhfR1BJT19ICisKKy8qIEZpcnN0IEdQSU8gY2hpcCAqLworI2RlZmluZSBHUElPWF8wCQkwCisjZGVmaW5lIEdQSU9YXzEJCTEKKyNkZWZpbmUgR1BJT1hfMgkJMgorI2RlZmluZSBHUElPWF8zCQkzCisjZGVmaW5lIEdQSU9YXzQJCTQKKyNkZWZpbmUgR1BJT1hfNQkJNQorI2RlZmluZSBHUElPWF82CQk2CisjZGVmaW5lIEdQSU9YXzcJCTcKKyNkZWZpbmUgR1BJT1hfOAkJOAorI2RlZmluZSBHUElPWF85CQk5CisjZGVmaW5lIEdQSU9YXzEwCTEwCisjZGVmaW5lIEdQSU9YXzExCTExCisjZGVmaW5lIEdQSU9YXzEyCTEyCisjZGVmaW5lIEdQSU9YXzEzCTEzCisjZGVmaW5lIEdQSU9YXzE0CTE0CisjZGVmaW5lIEdQSU9YXzE1CTE1CisjZGVmaW5lIEdQSU9YXzE2CTE2CisjZGVmaW5lIEdQSU9YXzE3CTE3CisjZGVmaW5lIEdQSU9YXzE4CTE4CisjZGVmaW5lIEdQSU9YXzE5CTE5CisjZGVmaW5lIEdQSU9YXzIwCTIwCisjZGVmaW5lIEdQSU9YXzIxCTIxCisjZGVmaW5lIEdQSU9ZXzAJCTIyCisjZGVmaW5lIEdQSU9ZXzEJCTIzCisjZGVmaW5lIEdQSU9ZXzIJCTI0CisjZGVmaW5lIEdQSU9ZXzMJCTI1CisjZGVmaW5lIEdQSU9ZXzQJCTI2CisjZGVmaW5lIEdQSU9ZXzUJCTI3CisjZGVmaW5lIEdQSU9ZXzYJCTI4CisjZGVmaW5lIEdQSU9ZXzcJCTI5CisjZGVmaW5lIEdQSU9ZXzgJCTMwCisjZGVmaW5lIEdQSU9ZXzkJCTMxCisjZGVmaW5lIEdQSU9ZXzEwCTMyCisjZGVmaW5lIEdQSU9ZXzExCTMzCisjZGVmaW5lIEdQSU9ZXzEyCTM0CisjZGVmaW5lIEdQSU9ZXzEzCTM1CisjZGVmaW5lIEdQSU9ZXzE0CTM2CisjZGVmaW5lIEdQSU9ZXzE1CTM3CisjZGVmaW5lIEdQSU9ZXzE2CTM4CisjZGVmaW5lIEdQSU9EVl8wCTM5CisjZGVmaW5lIEdQSU9EVl8xCTQwCisjZGVmaW5lIEdQSU9EVl8yCTQxCisjZGVmaW5lIEdQSU9EVl8zCTQyCisjZGVmaW5lIEdQSU9EVl80CTQzCisjZGVmaW5lIEdQSU9EVl81CTQ0CisjZGVmaW5lIEdQSU9EVl82CTQ1CisjZGVmaW5lIEdQSU9EVl83CTQ2CisjZGVmaW5lIEdQSU9EVl84CTQ3CisjZGVmaW5lIEdQSU9EVl85CTQ4CisjZGVmaW5lIEdQSU9EVl8xMAk0OQorI2RlZmluZSBHUElPRFZfMTEJNTAKKyNkZWZpbmUgR1BJT0RWXzEyCTUxCisjZGVmaW5lIEdQSU9EVl8xMwk1MgorI2RlZmluZSBHUElPRFZfMTQJNTMKKyNkZWZpbmUgR1BJT0RWXzE1CTU0CisjZGVmaW5lIEdQSU9EVl8xNgk1NQorI2RlZmluZSBHUElPRFZfMTcJNTYKKyNkZWZpbmUgR1BJT0RWXzE4CTU3CisjZGVmaW5lIEdQSU9EVl8xOQk1OAorI2RlZmluZSBHUElPRFZfMjAJNTkKKyNkZWZpbmUgR1BJT0RWXzIxCTYwCisjZGVmaW5lIEdQSU9EVl8yMgk2MQorI2RlZmluZSBHUElPRFZfMjMJNjIKKyNkZWZpbmUgR1BJT0RWXzI0CTYzCisjZGVmaW5lIEdQSU9EVl8yNQk2NAorI2RlZmluZSBHUElPRFZfMjYJNjUKKyNkZWZpbmUgR1BJT0RWXzI3CTY2CisjZGVmaW5lIEdQSU9EVl8yOAk2NworI2RlZmluZSBHUElPRFZfMjkJNjgKKyNkZWZpbmUgR1BJT0hfMAkJNjkKKyNkZWZpbmUgR1BJT0hfMQkJNzAKKyNkZWZpbmUgR1BJT0hfMgkJNzEKKyNkZWZpbmUgR1BJT0hfMwkJNzIKKyNkZWZpbmUgR1BJT0hfNAkJNzMKKyNkZWZpbmUgR1BJT0hfNQkJNzQKKyNkZWZpbmUgR1BJT0hfNgkJNzUKKyNkZWZpbmUgR1BJT0hfNwkJNzYKKyNkZWZpbmUgR1BJT0hfOAkJNzcKKyNkZWZpbmUgR1BJT0hfOQkJNzgKKyNkZWZpbmUgR1BJT1pfMAkJNzkKKyNkZWZpbmUgR1BJT1pfMQkJODAKKyNkZWZpbmUgR1BJT1pfMgkJODEKKyNkZWZpbmUgR1BJT1pfMwkJODIKKyNkZWZpbmUgR1BJT1pfNAkJODMKKyNkZWZpbmUgR1BJT1pfNQkJODQKKyNkZWZpbmUgR1BJT1pfNgkJODUKKyNkZWZpbmUgR1BJT1pfNwkJODYKKyNkZWZpbmUgR1BJT1pfOAkJODcKKyNkZWZpbmUgR1BJT1pfOQkJODgKKyNkZWZpbmUgR1BJT1pfMTAJODkKKyNkZWZpbmUgR1BJT1pfMTEJOTAKKyNkZWZpbmUgR1BJT1pfMTIJOTEKKyNkZWZpbmUgR1BJT1pfMTMJOTIKKyNkZWZpbmUgR1BJT1pfMTQJOTMKKyNkZWZpbmUgQ0FSRF8wCQk5NAorI2RlZmluZSBDQVJEXzEJCTk1CisjZGVmaW5lIENBUkRfMgkJOTYKKyNkZWZpbmUgQ0FSRF8zCQk5NworI2RlZmluZSBDQVJEXzQJCTk4CisjZGVmaW5lIENBUkRfNQkJOTkKKyNkZWZpbmUgQ0FSRF82CQkxMDAKKyNkZWZpbmUgQk9PVF8wCQkxMDEKKyNkZWZpbmUgQk9PVF8xCQkxMDIKKyNkZWZpbmUgQk9PVF8yCQkxMDMKKyNkZWZpbmUgQk9PVF8zCQkxMDQKKyNkZWZpbmUgQk9PVF80CQkxMDUKKyNkZWZpbmUgQk9PVF81CQkxMDYKKyNkZWZpbmUgQk9PVF82CQkxMDcKKyNkZWZpbmUgQk9PVF83CQkxMDgKKyNkZWZpbmUgQk9PVF84CQkxMDkKKyNkZWZpbmUgQk9PVF85CQkxMTAKKyNkZWZpbmUgQk9PVF8xMAkJMTExCisjZGVmaW5lIEJPT1RfMTEJCTExMgorI2RlZmluZSBCT09UXzEyCQkxMTMKKyNkZWZpbmUgQk9PVF8xMwkJMTE0CisjZGVmaW5lIEJPT1RfMTQJCTExNQorI2RlZmluZSBCT09UXzE1CQkxMTYKKyNkZWZpbmUgQk9PVF8xNgkJMTE3CisjZGVmaW5lIEJPT1RfMTcJCTExOAorI2RlZmluZSBCT09UXzE4CQkxMTkKKworLyogU2Vjb25kIEdQSU8gY2hpcCAqLworI2RlZmluZSBHUElPQU9fMAkwCisjZGVmaW5lIEdQSU9BT18xCTEKKyNkZWZpbmUgR1BJT0FPXzIJMgorI2RlZmluZSBHUElPQU9fMwkzCisjZGVmaW5lIEdQSU9BT180CTQKKyNkZWZpbmUgR1BJT0FPXzUJNQorI2RlZmluZSBHUElPQU9fNgk2CisjZGVmaW5lIEdQSU9BT183CTcKKyNkZWZpbmUgR1BJT0FPXzgJOAorI2RlZmluZSBHUElPQU9fOQk5CisjZGVmaW5lIEdQSU9BT18xMAkxMAorI2RlZmluZSBHUElPQU9fMTEJMTEKKyNkZWZpbmUgR1BJT0FPXzEyCTEyCisjZGVmaW5lIEdQSU9BT18xMwkxMworI2RlZmluZSBHUElPX0JTRF9FTgkxNAorI2RlZmluZSBHUElPX1RFU1RfTgkxNQorCisjZW5kaWYgLyogX0RUX0JJTkRJTkdTX01FU09OOF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHQtYmluZGluZ3Mvc291bmQvc2Ftc3VuZy1pMnMuaCBiL2luY2x1ZGUvZHQtYmluZGluZ3Mvc291bmQvc2Ftc3VuZy1pMnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzY5ODE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9kdC1iaW5kaW5ncy9zb3VuZC9zYW1zdW5nLWkycy5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBfRFRfQklORElOR1NfU0FNU1VOR19JMlNfSAorI2RlZmluZSBfRFRfQklORElOR1NfU0FNU1VOR19JMlNfSAorCisjZGVmaW5lIENMS19JMlNfQ0RDTEsJCTAKKyNkZWZpbmUgQ0xLX0kyU19SQ0xLX1NSQwkxCisjZGVmaW5lIENMS19JMlNfUkNMS19QU1IJMgorCisjZW5kaWYgLyogX0RUX0JJTkRJTkdTX1NBTVNVTkdfSTJTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWNwaS5oIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKaW5kZXggZDQ1OWNkMS4uMjRjN2FhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIGZvciBzdHJ1Y3QgcmVzb3VyY2UgKi8KKyNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZV9leHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9wZXJ0eS5oPgogCkBAIC0xNTEsNiArMTUyLDEwIEBACiBpbnQgYWNwaV91bm1hcF9jcHUoaW50IGNwdSk7CiAjZW5kaWYgLyogQ09ORklHX0FDUElfSE9UUExVR19DUFUgKi8KIAorI2lmZGVmIENPTkZJR19BQ1BJX0hPVFBMVUdfSU9BUElDCitpbnQgYWNwaV9nZXRfaW9hcGljX2lkKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGdzaV9iYXNlLCB1NjQgKnBoeXNfYWRkcik7CisjZW5kaWYKKwogaW50IGFjcGlfcmVnaXN0ZXJfaW9hcGljKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTY0IHBoeXNfYWRkciwgdTMyIGdzaV9iYXNlKTsKIGludCBhY3BpX3VucmVnaXN0ZXJfaW9hcGljKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGdzaV9iYXNlKTsKIGludCBhY3BpX2lvYXBpY19yZWdpc3RlcmVkKGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGdzaV9iYXNlKTsKQEAgLTI4OCwyMiArMjkzLDI1IEBACiBib29sIGFjcGlfZGV2X3Jlc291cmNlX21lbW9yeShzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqYXJlcywgc3RydWN0IHJlc291cmNlICpyZXMpOwogYm9vbCBhY3BpX2Rldl9yZXNvdXJjZV9pbyhzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqYXJlcywgc3RydWN0IHJlc291cmNlICpyZXMpOwogYm9vbCBhY3BpX2Rldl9yZXNvdXJjZV9hZGRyZXNzX3NwYWNlKHN0cnVjdCBhY3BpX3Jlc291cmNlICphcmVzLAotCQkJCSAgICAgc3RydWN0IHJlc291cmNlICpyZXMpOworCQkJCSAgICAgc3RydWN0IHJlc291cmNlX3dpbiAqd2luKTsKIGJvb2wgYWNwaV9kZXZfcmVzb3VyY2VfZXh0X2FkZHJlc3Nfc3BhY2Uoc3RydWN0IGFjcGlfcmVzb3VyY2UgKmFyZXMsCi0JCQkJCSBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CisJCQkJCSBzdHJ1Y3QgcmVzb3VyY2Vfd2luICp3aW4pOwogdW5zaWduZWQgbG9uZyBhY3BpX2Rldl9pcnFfZmxhZ3ModTggdHJpZ2dlcmluZywgdTggcG9sYXJpdHksIHU4IHNoYXJlYWJsZSk7CiBib29sIGFjcGlfZGV2X3Jlc291cmNlX2ludGVycnVwdChzdHJ1Y3QgYWNwaV9yZXNvdXJjZSAqYXJlcywgaW50IGluZGV4LAogCQkJCSBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CiAKLXN0cnVjdCByZXNvdXJjZV9saXN0X2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0Jc3RydWN0IHJlc291cmNlIHJlczsKLX07Ci0KIHZvaWQgYWNwaV9kZXZfZnJlZV9yZXNvdXJjZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpOwogaW50IGFjcGlfZGV2X2dldF9yZXNvdXJjZXMoc3RydWN0IGFjcGlfZGV2aWNlICphZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAogCQkJICAgaW50ICgqcHJlcHJvYykoc3RydWN0IGFjcGlfcmVzb3VyY2UgKiwgdm9pZCAqKSwKIAkJCSAgIHZvaWQgKnByZXByb2NfZGF0YSk7CitpbnQgYWNwaV9kZXZfZmlsdGVyX3Jlc291cmNlX3R5cGUoc3RydWN0IGFjcGlfcmVzb3VyY2UgKmFyZXMsCisJCQkJICB1bnNpZ25lZCBsb25nIHR5cGVzKTsKKworc3RhdGljIGlubGluZSBpbnQgYWNwaV9kZXZfZmlsdGVyX3Jlc291cmNlX3R5cGVfY2Ioc3RydWN0IGFjcGlfcmVzb3VyY2UgKmFyZXMsCisJCQkJCQkgICB2b2lkICphcmcpCit7CisJcmV0dXJuIGFjcGlfZGV2X2ZpbHRlcl9yZXNvdXJjZV90eXBlKGFyZXMsICh1bnNpZ25lZCBsb25nKWFyZyk7Cit9CiAKIGludCBhY3BpX2NoZWNrX3Jlc291cmNlX2NvbmZsaWN0KGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9haGNpX3BsYXRmb3JtLmggYi9pbmNsdWRlL2xpbnV4L2FoY2lfcGxhdGZvcm0uaAppbmRleCA2NDJkNmFlLi5hMjcwZjI1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9haGNpX3BsYXRmb3JtLmgKKysrIGIvaW5jbHVkZS9saW51eC9haGNpX3BsYXRmb3JtLmgKQEAgLTIxLDE2ICsyMSwyMCBAQAogc3RydWN0IGF0YV9wb3J0X2luZm87CiBzdHJ1Y3QgYWhjaV9ob3N0X3ByaXY7CiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOworc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZTsKIAogaW50IGFoY2lfcGxhdGZvcm1fZW5hYmxlX2Nsa3Moc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdik7CiB2b2lkIGFoY2lfcGxhdGZvcm1fZGlzYWJsZV9jbGtzKHN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYpOworaW50IGFoY2lfcGxhdGZvcm1fZW5hYmxlX3JlZ3VsYXRvcnMoc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdik7Cit2b2lkIGFoY2lfcGxhdGZvcm1fZGlzYWJsZV9yZWd1bGF0b3JzKHN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqaHByaXYpOwogaW50IGFoY2lfcGxhdGZvcm1fZW5hYmxlX3Jlc291cmNlcyhzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2KTsKIHZvaWQgYWhjaV9wbGF0Zm9ybV9kaXNhYmxlX3Jlc291cmNlcyhzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2KTsKIHN0cnVjdCBhaGNpX2hvc3RfcHJpdiAqYWhjaV9wbGF0Zm9ybV9nZXRfcmVzb3VyY2VzKAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogaW50IGFoY2lfcGxhdGZvcm1faW5pdF9ob3N0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCiAJCQkgICAgc3RydWN0IGFoY2lfaG9zdF9wcml2ICpocHJpdiwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcGlfdGVtcGxhdGUpOworCQkJICAgIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9pbmZvICpwaV90ZW1wbGF0ZSwKKwkJCSAgICBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQpOwogCiBpbnQgYWhjaV9wbGF0Zm9ybV9zdXNwZW5kX2hvc3Qoc3RydWN0IGRldmljZSAqZGV2KTsKIGludCBhaGNpX3BsYXRmb3JtX3Jlc3VtZV9ob3N0KHN0cnVjdCBkZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FtYmEvYnVzLmggYi9pbmNsdWRlL2xpbnV4L2FtYmEvYnVzLmgKaW5kZXggMmFmYzYxOC4uNTBmYzY2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hbWJhL2J1cy5oCisrKyBiL2luY2x1ZGUvbGludXgvYW1iYS9idXMuaApAQCAtMzMsNiArMzMsNyBAQAogCXN0cnVjdCBjbGsJCSpwY2xrOwogCXVuc2lnbmVkIGludAkJcGVyaXBoaWQ7CiAJdW5zaWduZWQgaW50CQlpcnFbQU1CQV9OUl9JUlFTXTsKKwljaGFyCQkJKmRyaXZlcl9vdmVycmlkZTsKIH07CiAKIHN0cnVjdCBhbWJhX2RyaXZlciB7CkBAIC05MiwxMSArOTMsMTUgQEAKIGludCBhbWJhX3JlcXVlc3RfcmVnaW9ucyhzdHJ1Y3QgYW1iYV9kZXZpY2UgKiwgY29uc3QgY2hhciAqKTsKIHZvaWQgYW1iYV9yZWxlYXNlX3JlZ2lvbnMoc3RydWN0IGFtYmFfZGV2aWNlICopOwogCi0jZGVmaW5lIGFtYmFfcGNsa19lbmFibGUoZCkJXAotCShJU19FUlIoKGQpLT5wY2xrKSA/IDAgOiBjbGtfZW5hYmxlKChkKS0+cGNsaykpCitzdGF0aWMgaW5saW5lIGludCBhbWJhX3BjbGtfZW5hYmxlKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2KQoreworCXJldHVybiBjbGtfZW5hYmxlKGRldi0+cGNsayk7Cit9CiAKLSNkZWZpbmUgYW1iYV9wY2xrX2Rpc2FibGUoZCkJXAotCWRvIHsgaWYgKCFJU19FUlIoKGQpLT5wY2xrKSkgY2xrX2Rpc2FibGUoKGQpLT5wY2xrKTsgfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBhbWJhX3BjbGtfZGlzYWJsZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldikKK3sKKwljbGtfZGlzYWJsZShkZXYtPnBjbGspOworfQogCiBzdGF0aWMgaW5saW5lIGludCBhbWJhX3BjbGtfcHJlcGFyZShzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRhLmggYi9pbmNsdWRlL2xpbnV4L2F0YS5oCmluZGV4IGYyZjRkOGQuLjE2NDgwMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdGEuaApAQCAtNTAzLDcgKzUwMyw3IEBACiAjZGVmaW5lIGF0YV9pZF9oYXNfZG1hKGlkKQkoKGlkKVtBVEFfSURfQ0FQQUJJTElUWV0gJiAoMSA8PCA4KSkKICNkZWZpbmUgYXRhX2lkX2hhc19uY3EoaWQpCSgoaWQpW0FUQV9JRF9TQVRBX0NBUEFCSUxJVFldICYgKDEgPDwgOCkpCiAjZGVmaW5lIGF0YV9pZF9xdWV1ZV9kZXB0aChpZCkJKCgoaWQpW0FUQV9JRF9RVUVVRV9ERVBUSF0gJiAweDFmKSArIDEpCi0jZGVmaW5lIGF0YV9pZF9yZW1vdmVhYmxlKGlkKQkoKGlkKVtBVEFfSURfQ09ORklHXSAmICgxIDw8IDcpKQorI2RlZmluZSBhdGFfaWRfcmVtb3ZhYmxlKGlkKQkoKGlkKVtBVEFfSURfQ09ORklHXSAmICgxIDw8IDcpKQogI2RlZmluZSBhdGFfaWRfaGFzX2F0YXBpX0FOKGlkKQlcCiAJKCgoKGlkKVtBVEFfSURfU0FUQV9DQVBBQklMSVRZXSAhPSAweDAwMDApICYmIFwKIAkgICgoaWQpW0FUQV9JRF9TQVRBX0NBUEFCSUxJVFldICE9IDB4ZmZmZikpICYmIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXRhX3BsYXRmb3JtLmggYi9pbmNsdWRlL2xpbnV4L2F0YV9wbGF0Zm9ybS5oCmluZGV4IDVjNjE4YTAuLjYxOWQ5ZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRhX3BsYXRmb3JtLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdGFfcGxhdGZvcm0uaApAQCAtMTAsMTIgKzEwLDE1IEBACiAJdW5zaWduZWQgaW50IGlvcG9ydF9zaGlmdDsKIH07CiAKK3N0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGU7CisKIGV4dGVybiBpbnQgX19wYXRhX3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IHJlc291cmNlICppb19yZXMsCiAJCQkJIHN0cnVjdCByZXNvdXJjZSAqY3RsX3JlcywKIAkJCQkgc3RydWN0IHJlc291cmNlICppcnFfcmVzLAogCQkJCSB1bnNpZ25lZCBpbnQgaW9wb3J0X3NoaWZ0LAotCQkJCSBpbnQgX19waW9fbWFzayk7CisJCQkJIGludCBfX3Bpb19tYXNrLAorCQkJCSBzdHJ1Y3Qgc2NzaV9ob3N0X3RlbXBsYXRlICpzaHQpOwogCiAvKgogICogTWFydmVsbCBTQVRBIHByaXZhdGUgZGF0YQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdWRpdC5oIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCmluZGV4IGFmODQyMzQuLjU5OWYzYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXVkaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKQEAgLTQ2LDcgKzQ2LDYgQEAKIHN0cnVjdCBza19idWZmOwogCiBzdHJ1Y3QgYXVkaXRfa3J1bGUgewotCWludAkJCXZlcnNfb3BzOwogCXUzMgkJCXBmbGFnczsKIAl1MzIJCQlmbGFnczsKIAl1MzIJCQlsaXN0bnI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYS5oIGIvaW5jbHVkZS9saW51eC9iY21hL2JjbWEuaAppbmRleCBlYjFjNmE0Li45OTQ3MzlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYS5oCisrKyBiL2luY2x1ZGUvbGludXgvYmNtYS9iY21hLmgKQEAgLTMxOCw2ICszMTgsNyBAQAogCWNvbnN0IHN0cnVjdCBiY21hX2hvc3Rfb3BzICpvcHM7CiAKIAllbnVtIGJjbWFfaG9zdHR5cGUgaG9zdHR5cGU7CisJYm9vbCBob3N0X2lzX3BjaWUyOyAvKiBVc2VkIGZvciBCQ01BX0hPU1RUWVBFX1BDSSBvbmx5ICovCiAJdW5pb24gewogCQkvKiBQb2ludGVyIHRvIHRoZSBQQ0kgYnVzIChvbmx5IGZvciBCQ01BX0hPU1RUWVBFX1BDSSkgKi8KIAkJc3RydWN0IHBjaV9kZXYgKmhvc3RfcGNpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iY21hL2JjbWFfZHJpdmVyX3BjaS5oIGIvaW5jbHVkZS9saW51eC9iY21hL2JjbWFfZHJpdmVyX3BjaS5oCmluZGV4IDAzMzNlNjAuLjNmODA5YWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmNtYS9iY21hX2RyaXZlcl9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYV9kcml2ZXJfcGNpLmgKQEAgLTIyMyw2ICsyMjMsNyBAQAogCiBzdHJ1Y3QgYmNtYV9kcnZfcGNpIHsKIAlzdHJ1Y3QgYmNtYV9kZXZpY2UgKmNvcmU7CisJdTggZWFybHlfc2V0dXBfZG9uZToxOwogCXU4IHNldHVwX2RvbmU6MTsKIAl1OCBob3N0bW9kZToxOwogCkBAIC0yMzcsNiArMjM4LDcgQEAKICNkZWZpbmUgcGNpY29yZV93cml0ZTE2KHBjLCBvZmZzZXQsIHZhbCkJYmNtYV93cml0ZTE2KChwYyktPmNvcmUsIG9mZnNldCwgdmFsKQogI2RlZmluZSBwY2ljb3JlX3dyaXRlMzIocGMsIG9mZnNldCwgdmFsKQliY21hX3dyaXRlMzIoKHBjKS0+Y29yZSwgb2Zmc2V0LCB2YWwpCiAKK2V4dGVybiB2b2lkIGJjbWFfY29yZV9wY2lfZWFybHlfaW5pdChzdHJ1Y3QgYmNtYV9kcnZfcGNpICpwYyk7CiBleHRlcm4gdm9pZCBiY21hX2NvcmVfcGNpX2luaXQoc3RydWN0IGJjbWFfZHJ2X3BjaSAqcGMpOwogZXh0ZXJuIGludCBiY21hX2NvcmVfcGNpX2lycV9jdGwoc3RydWN0IGJjbWFfZHJ2X3BjaSAqcGMsCiAJCQkJIHN0cnVjdCBiY21hX2RldmljZSAqY29yZSwgYm9vbCBlbmFibGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iY21hL2JjbWFfcmVncy5oIGIvaW5jbHVkZS9saW51eC9iY21hL2JjbWFfcmVncy5oCmluZGV4IGU2NGFlN2IuLmViZDVjMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmNtYS9iY21hX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYV9yZWdzLmgKQEAgLTY0LDYgKzY0LDggQEAKICNkZWZpbmUgIEJDTUFfUENJX0dQSU9fWFRBTAkJMHg0MAkvKiBQQ0kgY29uZmlnIHNwYWNlIEdQSU8gMTQgZm9yIFh0YWwgcG93ZXJ1cCAqLwogI2RlZmluZSAgQkNNQV9QQ0lfR1BJT19QTEwJCTB4ODAJLyogUENJIGNvbmZpZyBzcGFjZSBHUElPIDE1IGZvciBQTEwgcG93ZXJkb3duICovCiAKKyNkZWZpbmUgQkNNQV9QQ0lFMl9CQVIwX1dJTjIJCTB4NzAKKwogLyogU2lsaWNvbkJhY2twbGFuZSBBZGRyZXNzIE1hcC4KICAqIEFsbCByZWdpb25zIG1heSBub3QgZXhpc3Qgb24gYWxsIGNoaXBzLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JjbWEvYmNtYV9zb2MuaCBiL2luY2x1ZGUvbGludXgvYmNtYS9iY21hX3NvYy5oCmluZGV4IGYyNGQyNDUuLjFiNWZjMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmNtYS9iY21hX3NvYy5oCisrKyBiL2luY2x1ZGUvbGludXgvYmNtYS9iY21hX3NvYy5oCkBAIC01LDggKzUsNiBAQAogCiBzdHJ1Y3QgYmNtYV9zb2MgewogCXN0cnVjdCBiY21hX2J1cyBidXM7Ci0Jc3RydWN0IGJjbWFfZGV2aWNlIGNvcmVfY2M7Ci0Jc3RydWN0IGJjbWFfZGV2aWNlIGNvcmVfbWlwczsKIH07CiAKIGludCBfX2luaXQgYmNtYV9ob3N0X3NvY19yZWdpc3RlcihzdHJ1Y3QgYmNtYV9zb2MgKnNvYyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpdHJldi5oIGIvaW5jbHVkZS9saW51eC9iaXRyZXYuaAppbmRleCA3ZmZlMDNmLi5mYjc5MGI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2JpdHJldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYml0cmV2LmgKQEAgLTMsMTQgKzMsODMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLWV4dGVybiB1OCBjb25zdCBieXRlX3Jldl90YWJsZVsyNTZdOworI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfQklUUkVWRVJTRQorI2luY2x1ZGUgPGFzbS9iaXRyZXYuaD4KIAotc3RhdGljIGlubGluZSB1OCBiaXRyZXY4KHU4IGJ5dGUpCisjZGVmaW5lIF9fYml0cmV2MzIgX19hcmNoX2JpdHJldjMyCisjZGVmaW5lIF9fYml0cmV2MTYgX19hcmNoX2JpdHJldjE2CisjZGVmaW5lIF9fYml0cmV2OCBfX2FyY2hfYml0cmV2OAorCisjZWxzZQorZXh0ZXJuIHU4IGNvbnN0IGJ5dGVfcmV2X3RhYmxlWzI1Nl07CitzdGF0aWMgaW5saW5lIHU4IF9fYml0cmV2OCh1OCBieXRlKQogewogCXJldHVybiBieXRlX3Jldl90YWJsZVtieXRlXTsKIH0KIAotZXh0ZXJuIHUxNiBiaXRyZXYxNih1MTYgaW4pOwotZXh0ZXJuIHUzMiBiaXRyZXYzMih1MzIgaW4pOworc3RhdGljIGlubGluZSB1MTYgX19iaXRyZXYxNih1MTYgeCkKK3sKKwlyZXR1cm4gKF9fYml0cmV2OCh4ICYgMHhmZikgPDwgOCkgfCBfX2JpdHJldjgoeCA+PiA4KTsKK30KIAorc3RhdGljIGlubGluZSB1MzIgX19iaXRyZXYzMih1MzIgeCkKK3sKKwlyZXR1cm4gKF9fYml0cmV2MTYoeCAmIDB4ZmZmZikgPDwgMTYpIHwgX19iaXRyZXYxNih4ID4+IDE2KTsKK30KKworI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfQklUUkVWRVJTRSAqLworCisjZGVmaW5lIF9fY29uc3RhbnRfYml0cmV2MzIoeCkJXAorKHsJCQkJCVwKKwl1MzIgX194ID0geDsJCQlcCisJX194ID0gKF9feCA+PiAxNikgfCAoX194IDw8IDE2KTsJXAorCV9feCA9ICgoX194ICYgKHUzMikweEZGMDBGRjAwVUwpID4+IDgpIHwgKChfX3ggJiAodTMyKTB4MDBGRjAwRkZVTCkgPDwgOCk7CVwKKwlfX3ggPSAoKF9feCAmICh1MzIpMHhGMEYwRjBGMFVMKSA+PiA0KSB8ICgoX194ICYgKHUzMikweDBGMEYwRjBGVUwpIDw8IDQpOwlcCisJX194ID0gKChfX3ggJiAodTMyKTB4Q0NDQ0NDQ0NVTCkgPj4gMikgfCAoKF9feCAmICh1MzIpMHgzMzMzMzMzM1VMKSA8PCAyKTsJXAorCV9feCA9ICgoX194ICYgKHUzMikweEFBQUFBQUFBVUwpID4+IDEpIHwgKChfX3ggJiAodTMyKTB4NTU1NTU1NTVVTCkgPDwgMSk7CVwKKwlfX3g7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fY29uc3RhbnRfYml0cmV2MTYoeCkJXAorKHsJCQkJCVwKKwl1MTYgX194ID0geDsJCQlcCisJX194ID0gKF9feCA+PiA4KSB8IChfX3ggPDwgOCk7CVwKKwlfX3ggPSAoKF9feCAmICh1MTYpMHhGMEYwVSkgPj4gNCkgfCAoKF9feCAmICh1MTYpMHgwRjBGVSkgPDwgNCk7CVwKKwlfX3ggPSAoKF9feCAmICh1MTYpMHhDQ0NDVSkgPj4gMikgfCAoKF9feCAmICh1MTYpMHgzMzMzVSkgPDwgMik7CVwKKwlfX3ggPSAoKF9feCAmICh1MTYpMHhBQUFBVSkgPj4gMSkgfCAoKF9feCAmICh1MTYpMHg1NTU1VSkgPDwgMSk7CVwKKwlfX3g7CQkJCQkJCQlcCit9KQorCisjZGVmaW5lIF9fY29uc3RhbnRfYml0cmV2OCh4KQlcCisoewkJCQkJXAorCXU4IF9feCA9IHg7CQkJXAorCV9feCA9IChfX3ggPj4gNCkgfCAoX194IDw8IDQpOwlcCisJX194ID0gKChfX3ggJiAodTgpMHhDQ1UpID4+IDIpIHwgKChfX3ggJiAodTgpMHgzM1UpIDw8IDIpOwlcCisJX194ID0gKChfX3ggJiAodTgpMHhBQVUpID4+IDEpIHwgKChfX3ggJiAodTgpMHg1NVUpIDw8IDEpOwlcCisJX194OwkJCQkJCQkJXAorfSkKKworI2RlZmluZSBiaXRyZXYzMih4KSBcCisoewkJCVwKKwl1MzIgX194ID0geDsJXAorCV9fYnVpbHRpbl9jb25zdGFudF9wKF9feCkgPwlcCisJX19jb25zdGFudF9iaXRyZXYzMihfX3gpIDoJCQlcCisJX19iaXRyZXYzMihfX3gpOwkJCQlcCit9KQorCisjZGVmaW5lIGJpdHJldjE2KHgpIFwKKyh7CQkJXAorCXUxNiBfX3ggPSB4OwlcCisJX19idWlsdGluX2NvbnN0YW50X3AoX194KSA/CVwKKwlfX2NvbnN0YW50X2JpdHJldjE2KF9feCkgOgkJCVwKKwlfX2JpdHJldjE2KF9feCk7CQkJCVwKKyB9KQorCisjZGVmaW5lIGJpdHJldjgoeCkgXAorKHsJCQlcCisJdTggX194ID0geDsJXAorCV9fYnVpbHRpbl9jb25zdGFudF9wKF9feCkgPwlcCisJX19jb25zdGFudF9iaXRyZXY4KF9feCkgOgkJCVwKKwlfX2JpdHJldjgoX194KQk7CQkJXAorIH0pCiAjZW5kaWYgLyogX0xJTlVYX0JJVFJFVl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cC5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAppbmRleCBkYTBkYWUwLi5iOWNiOTRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwLmgKQEAgLTk0Myw2ICs5NDMsOCBAQAogCiAjZWxzZSAvKiAhQ09ORklHX0NHUk9VUFMgKi8KIAorc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGU7CisKIHN0YXRpYyBpbmxpbmUgaW50IGNncm91cF9pbml0X2Vhcmx5KHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGNncm91cF9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBjZ3JvdXBfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9CkBAIC05NTUsNiArOTU3LDggQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGNzc19wdXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykge30KKwogLyogTm8gY2dyb3VwcyAtIG5vdGhpbmcgdG8gZG8gKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNncm91cF9hdHRhY2hfdGFza19hbGwoc3RydWN0IHRhc2tfc3RydWN0ICpmcm9tLAogCQkJCQkgc3RydWN0IHRhc2tfc3RydWN0ICp0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jZ3JvdXBfc3Vic3lzLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaAppbmRleCA5OGM0ZjliLi5lNGE5NmZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cF9zdWJzeXMuaApAQCAtMTUsNiArMTUsMTAgQEAKIFNVQlNZUyhjcHVhY2N0KQogI2VuZGlmCiAKKyNpZiBJU19FTkFCTEVEKENPTkZJR19CTEtfQ0dST1VQKQorU1VCU1lTKGJsa2lvKQorI2VuZGlmCisKICNpZiBJU19FTkFCTEVEKENPTkZJR19NRU1DRykKIFNVQlNZUyhtZW1vcnkpCiAjZW5kaWYKQEAgLTMxLDEwICszNSw2IEBACiBTVUJTWVMobmV0X2NscykKICNlbmRpZgogCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfQkxLX0NHUk9VUCkKLVNVQlNZUyhibGtpbykKLSNlbmRpZgotCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQ0dST1VQX1BFUkYpCiBTVUJTWVMocGVyZl9ldmVudCkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCmluZGV4IGFiY2FmYWEuLjljNzhkMTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKQEAgLTE4LDggKzE4LDYgQEAKICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotLyogY2xvY2tzb3VyY2UgY3ljbGUgYmFzZSB0eXBlICovCi10eXBlZGVmIHU2NCBjeWNsZV90Owogc3RydWN0IGNsb2Nrc291cmNlOwogc3RydWN0IG1vZHVsZTsKIApAQCAtMjgsMTA2ICsyNiw2IEBACiAjZW5kaWYKIAogLyoqCi0gKiBzdHJ1Y3QgY3ljbGVjb3VudGVyIC0gaGFyZHdhcmUgYWJzdHJhY3Rpb24gZm9yIGEgZnJlZSBydW5uaW5nIGNvdW50ZXIKLSAqCVByb3ZpZGVzIGNvbXBsZXRlbHkgc3RhdGUtZnJlZSBhY2Nlc3NvcnMgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuCi0gKglEZXBlbmRpbmcgb24gd2hpY2ggaGFyZHdhcmUgaXQgcmVhZHMsIHRoZSBjeWNsZSBjb3VudGVyIG1heSB3cmFwCi0gKglhcm91bmQgcXVpY2tseS4gTG9ja2luZyBydWxlcyAoaWYgbmVjZXNzYXJ5KSBoYXZlIHRvIGJlIGRlZmluZWQKLSAqCWJ5IHRoZSBpbXBsZW1lbnRvciBhbmQgdXNlciBvZiBzcGVjaWZpYyBpbnN0YW5jZXMgb2YgdGhpcyBBUEkuCi0gKgotICogQHJlYWQ6CQlyZXR1cm5zIHRoZSBjdXJyZW50IGN5Y2xlIHZhbHVlCi0gKiBAbWFzazoJCWJpdG1hc2sgZm9yIHR3bydzIGNvbXBsZW1lbnQKLSAqCQkJc3VidHJhY3Rpb24gb2Ygbm9uIDY0IGJpdCBjb3VudGVycywKLSAqCQkJc2VlIENMT0NLU09VUkNFX01BU0soKSBoZWxwZXIgbWFjcm8KLSAqIEBtdWx0OgkJY3ljbGUgdG8gbmFub3NlY29uZCBtdWx0aXBsaWVyCi0gKiBAc2hpZnQ6CQljeWNsZSB0byBuYW5vc2Vjb25kIGRpdmlzb3IgKHBvd2VyIG9mIHR3bykKLSAqLwotc3RydWN0IGN5Y2xlY291bnRlciB7Ci0JY3ljbGVfdCAoKnJlYWQpKGNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjKTsKLQljeWNsZV90IG1hc2s7Ci0JdTMyIG11bHQ7Ci0JdTMyIHNoaWZ0OwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgdGltZWNvdW50ZXIgLSBsYXllciBhYm92ZSBhICVzdHJ1Y3QgY3ljbGVjb3VudGVyIHdoaWNoIGNvdW50cyBuYW5vc2Vjb25kcwotICoJQ29udGFpbnMgdGhlIHN0YXRlIG5lZWRlZCBieSB0aW1lY291bnRlcl9yZWFkKCkgdG8gZGV0ZWN0Ci0gKgljeWNsZSBjb3VudGVyIHdyYXAgYXJvdW5kLiBJbml0aWFsaXplIHdpdGgKLSAqCXRpbWVjb3VudGVyX2luaXQoKS4gQWxzbyB1c2VkIHRvIGNvbnZlcnQgY3ljbGUgY291bnRzIGludG8gdGhlCi0gKgljb3JyZXNwb25kaW5nIG5hbm9zZWNvbmQgY291bnRzIHdpdGggdGltZWNvdW50ZXJfY3ljMnRpbWUoKS4gVXNlcnMKLSAqCW9mIHRoaXMgY29kZSBhcmUgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgdW5kZXJseWluZwotICoJY3ljbGUgY291bnRlciBoYXJkd2FyZSwgbG9ja2luZyBpc3N1ZXMgYW5kIHJlYWRpbmcgdGhlIHRpbWUKLSAqCW1vcmUgb2Z0ZW4gdGhhbiB0aGUgY3ljbGUgY291bnRlciB3cmFwcyBhcm91bmQuIFRoZSBuYW5vc2Vjb25kCi0gKgljb3VudGVyIHdpbGwgb25seSB3cmFwIGFyb3VuZCBhZnRlciB+NTg1IHllYXJzLgotICoKLSAqIEBjYzoJCQl0aGUgY3ljbGUgY291bnRlciB1c2VkIGJ5IHRoaXMgaW5zdGFuY2UKLSAqIEBjeWNsZV9sYXN0OgkJbW9zdCByZWNlbnQgY3ljbGUgY291bnRlciB2YWx1ZSBzZWVuIGJ5Ci0gKgkJCXRpbWVjb3VudGVyX3JlYWQoKQotICogQG5zZWM6CQljb250aW51b3VzbHkgaW5jcmVhc2luZyBjb3VudAotICovCi1zdHJ1Y3QgdGltZWNvdW50ZXIgewotCWNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjOwotCWN5Y2xlX3QgY3ljbGVfbGFzdDsKLQl1NjQgbnNlYzsKLX07Ci0KLS8qKgotICogY3ljbGVjb3VudGVyX2N5YzJucyAtIGNvbnZlcnRzIGN5Y2xlIGNvdW50ZXIgY3ljbGVzIHRvIG5hbm9zZWNvbmRzCi0gKiBAY2M6CQlQb2ludGVyIHRvIGN5Y2xlIGNvdW50ZXIuCi0gKiBAY3ljbGVzOglDeWNsZXMKLSAqCi0gKiBYWFggLSBUaGlzIGNvdWxkIHVzZSBzb21lIG11bHRfbHhsX2xsKCkgYXNtIG9wdGltaXphdGlvbi4gU2FtZSBjb2RlCi0gKiBhcyBpbiBjeWMybnMsIGJ1dCB3aXRoIHVuc2lnbmVkIHJlc3VsdC4KLSAqLwotc3RhdGljIGlubGluZSB1NjQgY3ljbGVjb3VudGVyX2N5YzJucyhjb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICpjYywKLQkJCQkgICAgICBjeWNsZV90IGN5Y2xlcykKLXsKLQl1NjQgcmV0ID0gKHU2NCljeWNsZXM7Ci0JcmV0ID0gKHJldCAqIGNjLT5tdWx0KSA+PiBjYy0+c2hpZnQ7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiB0aW1lY291bnRlcl9pbml0IC0gaW5pdGlhbGl6ZSBhIHRpbWUgY291bnRlcgotICogQHRjOgkJCVBvaW50ZXIgdG8gdGltZSBjb3VudGVyIHdoaWNoIGlzIHRvIGJlIGluaXRpYWxpemVkL3Jlc2V0Ci0gKiBAY2M6CQkJQSBjeWNsZSBjb3VudGVyLCByZWFkeSB0byBiZSB1c2VkLgotICogQHN0YXJ0X3RzdGFtcDoJQXJiaXRyYXJ5IGluaXRpYWwgdGltZSBzdGFtcC4KLSAqCi0gKiBBZnRlciB0aGlzIGNhbGwgdGhlIGN1cnJlbnQgY3ljbGUgcmVnaXN0ZXIgKHJvdWdobHkpIGNvcnJlc3BvbmRzIHRvCi0gKiB0aGUgaW5pdGlhbCB0aW1lIHN0YW1wLiBFdmVyeSBjYWxsIHRvIHRpbWVjb3VudGVyX3JlYWQoKSBpbmNyZW1lbnRzCi0gKiB0aGUgdGltZSBzdGFtcCBjb3VudGVyIGJ5IHRoZSBudW1iZXIgb2YgZWxhcHNlZCBuYW5vc2Vjb25kcy4KLSAqLwotZXh0ZXJuIHZvaWQgdGltZWNvdW50ZXJfaW5pdChzdHJ1Y3QgdGltZWNvdW50ZXIgKnRjLAotCQkJICAgICBjb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICpjYywKLQkJCSAgICAgdTY0IHN0YXJ0X3RzdGFtcCk7Ci0KLS8qKgotICogdGltZWNvdW50ZXJfcmVhZCAtIHJldHVybiBuYW5vc2Vjb25kcyBlbGFwc2VkIHNpbmNlIHRpbWVjb3VudGVyX2luaXQoKQotICogICAgICAgICAgICAgICAgICAgIHBsdXMgdGhlIGluaXRpYWwgdGltZSBzdGFtcAotICogQHRjOiAgICAgICAgICBQb2ludGVyIHRvIHRpbWUgY291bnRlci4KLSAqCi0gKiBJbiBvdGhlciB3b3Jkcywga2VlcHMgdHJhY2sgb2YgdGltZSBzaW5jZSB0aGUgc2FtZSBlcG9jaCBhcwotICogdGhlIGZ1bmN0aW9uIHdoaWNoIGdlbmVyYXRlZCB0aGUgaW5pdGlhbCB0aW1lIHN0YW1wLgotICovCi1leHRlcm4gdTY0IHRpbWVjb3VudGVyX3JlYWQoc3RydWN0IHRpbWVjb3VudGVyICp0Yyk7Ci0KLS8qKgotICogdGltZWNvdW50ZXJfY3ljMnRpbWUgLSBjb252ZXJ0IGEgY3ljbGUgY291bnRlciB0byBzYW1lCi0gKiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgYmFzZSBhcyB2YWx1ZXMgcmV0dXJuZWQgYnkKLSAqICAgICAgICAgICAgICAgICAgICAgICAgdGltZWNvdW50ZXJfcmVhZCgpCi0gKiBAdGM6CQlQb2ludGVyIHRvIHRpbWUgY291bnRlci4KLSAqIEBjeWNsZV90c3RhbXA6CWEgdmFsdWUgcmV0dXJuZWQgYnkgdGMtPmNjLT5yZWFkKCkKLSAqCi0gKiBDeWNsZSBjb3VudHMgdGhhdCBhcmUgY29udmVydGVkIGNvcnJlY3RseSBhcyBsb25nIGFzIHRoZXkKLSAqIGZhbGwgaW50byB0aGUgaW50ZXJ2YWwgWy0xLzIgbWF4IGN5Y2xlIGNvdW50LCArMS8yIG1heCBjeWNsZSBjb3VudF0sCi0gKiB3aXRoICJtYXggY3ljbGUgY291bnQiID09IGNzLT5tYXNrKzEuCi0gKgotICogVGhpcyBhbGxvd3MgY29udmVyc2lvbiBvZiBjeWNsZSBjb3VudGVyIHZhbHVlcyB3aGljaCB3ZXJlIGdlbmVyYXRlZAotICogaW4gdGhlIHBhc3QuCi0gKi8KLWV4dGVybiB1NjQgdGltZWNvdW50ZXJfY3ljMnRpbWUoc3RydWN0IHRpbWVjb3VudGVyICp0YywKLQkJCQljeWNsZV90IGN5Y2xlX3RzdGFtcCk7Ci0KLS8qKgogICogc3RydWN0IGNsb2Nrc291cmNlIC0gaGFyZHdhcmUgYWJzdHJhY3Rpb24gZm9yIGEgZnJlZSBydW5uaW5nIGNvdW50ZXIKICAqCVByb3ZpZGVzIG1vc3RseSBzdGF0ZS1mcmVlIGFjY2Vzc29ycyB0byB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4KICAqCVRoaXMgaXMgdGhlIHN0cnVjdHVyZSB1c2VkIGZvciBzeXN0ZW0gdGltZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oIGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgKaW5kZXggMzIzOGZmYS4uYTAxNDU1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgKQEAgLTEyLDYgKzEyLDEwIEBACiAjZGVmaW5lIENPTVBBQ1RfUEFSVElBTAkJMwogLyogVGhlIGZ1bGwgem9uZSB3YXMgY29tcGFjdGVkICovCiAjZGVmaW5lIENPTVBBQ1RfQ09NUExFVEUJNAorLyogRm9yIG1vcmUgZGV0YWlsZWQgdHJhY2Vwb2ludCBvdXRwdXQgKi8KKyNkZWZpbmUgQ09NUEFDVF9OT19TVUlUQUJMRV9QQUdFCTUKKyNkZWZpbmUgQ09NUEFDVF9OT1RfU1VJVEFCTEVfWk9ORQk2CisvKiBXaGVuIGFkZGluZyBuZXcgc3RhdGUsIHBsZWFzZSBjaGFuZ2UgY29tcGFjdGlvbl9zdGF0dXNfc3RyaW5nLCB0b28gKi8KIAogLyogVXNlZCB0byBzaWduYWwgd2hldGhlciBjb21wYWN0aW9uIGRldGVjdGVkIG5lZWRfc2NoZWQoKSBvciBsb2NrIGNvbnRlbnRpb24gKi8KIC8qIE5vIGNvbnRlbnRpb24gZGV0ZWN0ZWQgKi8KQEAgLTIxLDYgKzI1LDggQEAKIC8qIFpvbmUgbG9jayBvciBscnVfbG9jayB3YXMgY29udGVuZGVkIGluIGFzeW5jIGNvbXBhY3Rpb24gKi8KICNkZWZpbmUgQ09NUEFDVF9DT05URU5ERURfTE9DSwkyCiAKK3N0cnVjdCBhbGxvY19jb250ZXh0OyAvKiBpbiBtbS9pbnRlcm5hbC5oICovCisKICNpZmRlZiBDT05GSUdfQ09NUEFDVElPTgogZXh0ZXJuIGludCBzeXNjdGxfY29tcGFjdF9tZW1vcnk7CiBleHRlcm4gaW50IHN5c2N0bF9jb21wYWN0aW9uX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKQEAgLTMwLDgxICszNiwyNSBAQAogCQkJdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5ndGgsIGxvZmZfdCAqcHBvcyk7CiAKIGV4dGVybiBpbnQgZnJhZ21lbnRhdGlvbl9pbmRleChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19jb21wYWN0X3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsCi0JCQlpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICptYXNrLAotCQkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50ICpjb250ZW5kZWQsCi0JCQlpbnQgYWxsb2NfZmxhZ3MsIGludCBjbGFzc3pvbmVfaWR4KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCisJCQlpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywKKwkJCWVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCAqY29udGVuZGVkKTsKIGV4dGVybiB2b2lkIGNvbXBhY3RfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyKTsKIGV4dGVybiB2b2lkIHJlc2V0X2lzb2xhdGlvbl9zdWl0YWJsZShwZ19kYXRhX3QgKnBnZGF0KTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKIAkJCQkJaW50IGFsbG9jX2ZsYWdzLCBpbnQgY2xhc3N6b25lX2lkeCk7CiAKLS8qIERvIG5vdCBza2lwIGNvbXBhY3Rpb24gbW9yZSB0aGFuIDY0IHRpbWVzICovCi0jZGVmaW5lIENPTVBBQ1RfTUFYX0RFRkVSX1NISUZUIDYKLQotLyoKLSAqIENvbXBhY3Rpb24gaXMgZGVmZXJyZWQgd2hlbiBjb21wYWN0aW9uIGZhaWxzIHRvIHJlc3VsdCBpbiBhIHBhZ2UKLSAqIGFsbG9jYXRpb24gc3VjY2Vzcy4gMSA8PCBjb21wYWN0X2RlZmVyX2xpbWl0IGNvbXBhY3Rpb25zIGFyZSBza2lwcGVkIHVwCi0gKiB0byBhIGxpbWl0IG9mIDEgPDwgQ09NUEFDVF9NQVhfREVGRVJfU0hJRlQKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGRlZmVyX2NvbXBhY3Rpb24oc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcikKLXsKLQl6b25lLT5jb21wYWN0X2NvbnNpZGVyZWQgPSAwOwotCXpvbmUtPmNvbXBhY3RfZGVmZXJfc2hpZnQrKzsKLQotCWlmIChvcmRlciA8IHpvbmUtPmNvbXBhY3Rfb3JkZXJfZmFpbGVkKQotCQl6b25lLT5jb21wYWN0X29yZGVyX2ZhaWxlZCA9IG9yZGVyOwotCi0JaWYgKHpvbmUtPmNvbXBhY3RfZGVmZXJfc2hpZnQgPiBDT01QQUNUX01BWF9ERUZFUl9TSElGVCkKLQkJem9uZS0+Y29tcGFjdF9kZWZlcl9zaGlmdCA9IENPTVBBQ1RfTUFYX0RFRkVSX1NISUZUOwotfQotCi0vKiBSZXR1cm5zIHRydWUgaWYgY29tcGFjdGlvbiBzaG91bGQgYmUgc2tpcHBlZCB0aGlzIHRpbWUgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYWN0aW9uX2RlZmVycmVkKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIpCi17Ci0JdW5zaWduZWQgbG9uZyBkZWZlcl9saW1pdCA9IDFVTCA8PCB6b25lLT5jb21wYWN0X2RlZmVyX3NoaWZ0OwotCi0JaWYgKG9yZGVyIDwgem9uZS0+Y29tcGFjdF9vcmRlcl9mYWlsZWQpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIEF2b2lkIHBvc3NpYmxlIG92ZXJmbG93ICovCi0JaWYgKCsrem9uZS0+Y29tcGFjdF9jb25zaWRlcmVkID4gZGVmZXJfbGltaXQpCi0JCXpvbmUtPmNvbXBhY3RfY29uc2lkZXJlZCA9IGRlZmVyX2xpbWl0OwotCi0JcmV0dXJuIHpvbmUtPmNvbXBhY3RfY29uc2lkZXJlZCA8IGRlZmVyX2xpbWl0OwotfQotCi0vKgotICogVXBkYXRlIGRlZmVyIHRyYWNraW5nIGNvdW50ZXJzIGFmdGVyIHN1Y2Nlc3NmdWwgY29tcGFjdGlvbiBvZiBnaXZlbiBvcmRlciwKLSAqIHdoaWNoIG1lYW5zIGFuIGFsbG9jYXRpb24gZWl0aGVyIHN1Y2NlZWRlZCAoYWxsb2Nfc3VjY2VzcyA9PSB0cnVlKSBvciBpcwotICogZXhwZWN0ZWQgdG8gc3VjY2VlZC4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKLQkJYm9vbCBhbGxvY19zdWNjZXNzKQotewotCWlmIChhbGxvY19zdWNjZXNzKSB7Ci0JCXpvbmUtPmNvbXBhY3RfY29uc2lkZXJlZCA9IDA7Ci0JCXpvbmUtPmNvbXBhY3RfZGVmZXJfc2hpZnQgPSAwOwotCX0KLQlpZiAob3JkZXIgPj0gem9uZS0+Y29tcGFjdF9vcmRlcl9mYWlsZWQpCi0JCXpvbmUtPmNvbXBhY3Rfb3JkZXJfZmFpbGVkID0gb3JkZXIgKyAxOwotfQotCi0vKiBSZXR1cm5zIHRydWUgaWYgcmVzdGFydGluZyBjb21wYWN0aW9uIGFmdGVyIG1hbnkgZmFpbHVyZXMgKi8KLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYWN0aW9uX3Jlc3RhcnRpbmcoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcikKLXsKLQlpZiAob3JkZXIgPCB6b25lLT5jb21wYWN0X29yZGVyX2ZhaWxlZCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHpvbmUtPmNvbXBhY3RfZGVmZXJfc2hpZnQgPT0gQ09NUEFDVF9NQVhfREVGRVJfU0hJRlQgJiYKLQkJem9uZS0+Y29tcGFjdF9jb25zaWRlcmVkID49IDFVTCA8PCB6b25lLT5jb21wYWN0X2RlZmVyX3NoaWZ0OwotfQorZXh0ZXJuIHZvaWQgZGVmZXJfY29tcGFjdGlvbihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyKTsKK2V4dGVybiBib29sIGNvbXBhY3Rpb25fZGVmZXJyZWQoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcik7CitleHRlcm4gdm9pZCBjb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsCisJCQkJYm9vbCBhbGxvY19zdWNjZXNzKTsKK2V4dGVybiBib29sIGNvbXBhY3Rpb25fcmVzdGFydGluZyhzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyKTsKIAogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0cnlfdG9fY29tcGFjdF9wYWdlcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LAotCQkJaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbm9kZW1hc2ssCi0JCQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgKmNvbnRlbmRlZCwKLQkJCWludCBhbGxvY19mbGFncywgaW50IGNsYXNzem9uZV9pZHgpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssCisJCQl1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBhbGxvY19mbGFncywKKwkJCWNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywKKwkJCWVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCAqY29udGVuZGVkKQogewogCXJldHVybiBDT01QQUNUX0NPTlRJTlVFOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYXQuaCBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKaW5kZXggNzQ1MGNhMi4uYWIyNTgxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCkBAIC02ODksNiArNjg5LDE1IEBACiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19zaWdhbHRzdGFjayhjb25zdCBjb21wYXRfc3RhY2tfdCBfX3VzZXIgKnVzc19wdHIsCiAJCQkJICAgICAgIGNvbXBhdF9zdGFja190IF9fdXNlciAqdW9zc19wdHIpOwogCisjaWZkZWYgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKK2FzbWxpbmthZ2UgbG9uZyBjb21wYXRfc3lzX3NpZ3BlbmRpbmcoY29tcGF0X29sZF9zaWdzZXRfdCBfX3VzZXIgKnNldCk7CisjZW5kaWYKKworI2lmZGVmIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSworYXNtbGlua2FnZSBsb25nIGNvbXBhdF9zeXNfc2lncHJvY21hc2soaW50IGhvdywgY29tcGF0X29sZF9zaWdzZXRfdCBfX3VzZXIgKm5zZXQsCisJCQkJICAgICAgIGNvbXBhdF9vbGRfc2lnc2V0X3QgX191c2VyICpvc2V0KTsKKyNlbmRpZgorCiBpbnQgY29tcGF0X3Jlc3RvcmVfYWx0c3RhY2soY29uc3QgY29tcGF0X3N0YWNrX3QgX191c2VyICp1c3MpOwogaW50IF9fY29tcGF0X3NhdmVfYWx0c3RhY2soY29tcGF0X3N0YWNrX3QgX191c2VyICosIHVuc2lnbmVkIGxvbmcpOwogI2RlZmluZSBjb21wYXRfc2F2ZV9hbHRzdGFja19leCh1c3MsIHNwKSBkbyB7IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAppbmRleCAzMzA2M2Y4Li4xN2Y2MjRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCkBAIC01NCw3ICs1NCwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLWdjYy5oPgogI2VuZGlmCiAKKyNpZmRlZiBDQ19VU0lOR19IT1RQQVRDSAorI2RlZmluZSBub3RyYWNlIF9fYXR0cmlidXRlX18oKGhvdHBhdGNoKDAsMCkpKQorI2Vsc2UKICNkZWZpbmUgbm90cmFjZSBfX2F0dHJpYnV0ZV9fKChub19pbnN0cnVtZW50X2Z1bmN0aW9uKSkKKyNlbmRpZgogCiAvKiBJbnRlbCBjb21waWxlciBkZWZpbmVzIF9fR05VQ19fLiBTbyB3ZSB3aWxsIG92ZXJ3cml0ZSBpbXBsZW1lbnRhdGlvbnMKICAqIGNvbWluZyBmcm9tIGFib3ZlIGhlYWRlciBmaWxlcyBoZXJlCkBAIC0zODUsNyArMzg5LDcgQEAKIAogLyogSXMgdGhpcyB0eXBlIGEgbmF0aXZlIHdvcmQgc2l6ZSAtLSB1c2VmdWwgZm9yIGF0b21pYyBvcGVyYXRpb25zICovCiAjaWZuZGVmIF9fbmF0aXZlX3dvcmQKLSMgZGVmaW5lIF9fbmF0aXZlX3dvcmQodCkgKHNpemVvZih0KSA9PSBzaXplb2YoaW50KSB8fCBzaXplb2YodCkgPT0gc2l6ZW9mKGxvbmcpKQorIyBkZWZpbmUgX19uYXRpdmVfd29yZCh0KSAoc2l6ZW9mKHQpID09IHNpemVvZihjaGFyKSB8fCBzaXplb2YodCkgPT0gc2l6ZW9mKHNob3J0KSB8fCBzaXplb2YodCkgPT0gc2l6ZW9mKGludCkgfHwgc2l6ZW9mKHQpID09IHNpemVvZihsb25nKSkKICNlbmRpZgogCiAvKiBDb21waWxlIHRpbWUgb2JqZWN0IHNpemUsIC0xIGZvciB1bmtub3duICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaCBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCmluZGV4IDRkMDc4Y2UuLjJlZTQ4ODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCkBAIC02Niw4ICs2Niw2IEBACiAJdW5zaWduZWQgaW50CQlzaGFyZWRfdHlwZTsgLyogQUNQSTogQU5ZIG9yIEFMTCBhZmZlY3RlZCBDUFVzCiAJCQkJCQlzaG91bGQgc2V0IGNwdWZyZXEgKi8KIAl1bnNpZ25lZCBpbnQJCWNwdTsgICAgLyogY3B1IG5yIG9mIENQVSBtYW5hZ2luZyB0aGlzIHBvbGljeSAqLwotCXVuc2lnbmVkIGludAkJbGFzdF9jcHU7IC8qIGNwdSBuciBvZiBwcmV2aW91cyBDUFUgdGhhdCBtYW5hZ2VkCi0JCQkJCSAgICogdGhpcyBwb2xpY3kgKi8KIAlzdHJ1Y3QgY2xrCQkqY2xrOwogCXN0cnVjdCBjcHVmcmVxX2NwdWluZm8JY3B1aW5mbzsvKiBzZWUgYWJvdmUgKi8KIApAQCAtMTEzLDYgKzExMSw5IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QJdHJhbnNpdGlvbl93YWl0OwogCXN0cnVjdCB0YXNrX3N0cnVjdAkqdHJhbnNpdGlvbl90YXNrOyAvKiBUYXNrIHdoaWNoIGlzIGRvaW5nIHRoZSB0cmFuc2l0aW9uICovCiAKKwkvKiBjcHVmcmVxLXN0YXRzICovCisJc3RydWN0IGNwdWZyZXFfc3RhdHMJKnN0YXRzOworCiAJLyogRm9yIGNwdWZyZXEgZHJpdmVyJ3MgaW50ZXJuYWwgdXNlICovCiAJdm9pZAkJCSpkcml2ZXJfZGF0YTsKIH07CkBAIC0zNjcsOSArMzY4LDggQEAKICNkZWZpbmUgQ1BVRlJFUV9JTkNPTVBBVElCTEUJCSgxKQogI2RlZmluZSBDUFVGUkVRX05PVElGWQkJCSgyKQogI2RlZmluZSBDUFVGUkVRX1NUQVJUCQkJKDMpCi0jZGVmaW5lIENQVUZSRVFfVVBEQVRFX1BPTElDWV9DUFUJKDQpCi0jZGVmaW5lIENQVUZSRVFfQ1JFQVRFX1BPTElDWQkJKDUpCi0jZGVmaW5lIENQVUZSRVFfUkVNT1ZFX1BPTElDWQkJKDYpCisjZGVmaW5lIENQVUZSRVFfQ1JFQVRFX1BPTElDWQkJKDQpCisjZGVmaW5lIENQVUZSRVFfUkVNT1ZFX1BPTElDWQkJKDUpCiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKIGludCBjcHVmcmVxX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGludCBsaXN0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2ZnJlcS1ldmVudC5oIGIvaW5jbHVkZS9saW51eC9kZXZmcmVxLWV2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAyZmJiZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvZGV2ZnJlcS1ldmVudC5oCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogZGV2ZnJlcS1ldmVudDogYSBmcmFtZXdvcmsgdG8gcHJvdmlkZSByYXcgZGF0YSBhbmQgZXZlbnRzIG9mIGRldmZyZXEgZGV2aWNlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBBdXRob3I6IENoYW53b28gQ2hvaSA8Y3cwMC5jaG9pQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX0RFVkZSRVFfRVZFTlRfSF9fCisjZGVmaW5lIF9fTElOVVhfREVWRlJFUV9FVkVOVF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisvKioKKyAqIHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAtIHRoZSBkZXZmcmVxLWV2ZW50IGRldmljZQorICoKKyAqIEBub2RlCTogQ29udGFpbiB0aGUgZGV2ZnJlcS1ldmVudCBkZXZpY2UgdGhhdCBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4KKyAqIEBkZXYJCTogdGhlIGRldmljZSByZWdpc3RlcmVkIGJ5IGRldmZyZXEtZXZlbnQgY2xhc3MuIGRldi5wYXJlbnQgaXMKKyAqCQkgIHRoZSBkZXZpY2UgdXNpbmcgZGV2ZnJlcS1ldmVudC4KKyAqIEBsb2NrCTogYSBtdXRleCB0byBwcm90ZWN0IGFjY2Vzc2luZyBkZXZmcmVxLWV2ZW50LgorICogQGVuYWJsZV9jb3VudDogdGhlIG51bWJlciBvZiBlbmFibGUgZnVuY3Rpb24gaGF2ZSBiZWVuIGNhbGxlZC4KKyAqIEBkZXNjCTogdGhlIGRlc2NyaXB0aW9uIGZvciBkZXZmcmVxLWV2ZW50IGRldmljZS4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBkZXZmcmVxLWV2ZW50IGRldmljZSBpbmZvcm1hdGlvbi4KKyAqLworc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisKKwlzdHJ1Y3QgZGV2aWNlIGRldjsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwl1MzIgZW5hYmxlX2NvdW50OworCisJY29uc3Qgc3RydWN0IGRldmZyZXFfZXZlbnRfZGVzYyAqZGVzYzsKK307CisKKy8qKgorICogc3RydWN0IGRldmZyZXFfZXZlbnRfZGF0YSAtIHRoZSBkZXZmcmVxLWV2ZW50IGRhdGEKKyAqCisgKiBAbG9hZF9jb3VudAk6IGxvYWQgY291bnQgb2YgZGV2ZnJlcS1ldmVudCBkZXZpY2UgZm9yIHRoZSBnaXZlbiBwZXJpb2QuCisgKiBAdG90YWxfY291bnQJOiB0b3RhbCBjb3VudCBvZiBkZXZmcmVxLWV2ZW50IGRldmljZSBmb3IgdGhlIGdpdmVuIHBlcmlvZC4KKyAqCQkgIGVhY2ggY291bnQgbWF5IHJlcHJlc2VudCBhIGNsb2NrIGN5Y2xlLCBhIHRpbWUgdW5pdAorICoJCSAgKG5zL3VzLy4uLiksIG9yIGFueXRoaW5nIHRoZSBkZXZpY2UgZHJpdmVyIHdhbnRzLgorICoJCSAgR2VuZXJhbGx5LCB1dGlsaXphdGlvbiBpcyBsb2FkX2NvdW50IC8gdG90YWxfY291bnQuCisgKgorICogVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGRhdGEgb2YgZGV2ZnJlcS1ldmVudCBkZXZpY2UgZm9yIHBvbGxpbmcgcGVyaW9kLgorICovCitzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kYXRhIHsKKwl1bnNpZ25lZCBsb25nIGxvYWRfY291bnQ7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9jb3VudDsKK307CisKKy8qKgorICogc3RydWN0IGRldmZyZXFfZXZlbnRfb3BzIC0gdGhlIG9wZXJhdGlvbnMgb2YgZGV2ZnJlcS1ldmVudCBkZXZpY2UKKyAqCisgKiBAZW5hYmxlCTogRW5hYmxlIHRoZSBkZXZmcmVxLWV2ZW50IGRldmljZS4KKyAqIEBkaXNhYmxlCTogRGlzYWJsZSB0aGUgZGV2ZnJlcS1ldmVudCBkZXZpY2UuCisgKiBAcmVzZXQJOiBSZXNldCBhbGwgc2V0dGluZyBvZiB0aGUgZGV2ZnJlcS1ldmVudCBkZXZpY2UuCisgKiBAc2V0X2V2ZW50CTogU2V0IHRoZSBzcGVjaWZpYyBldmVudCB0eXBlIGZvciB0aGUgZGV2ZnJlcS1ldmVudCBkZXZpY2UuCisgKiBAZ2V0X2V2ZW50CTogR2V0IHRoZSByZXN1bHQgb2YgdGhlIGRldmZyZXEtZXZlbnQgZGV2aWUgd2l0aCBzcGVjaWZpYworICoJCSAgZXZlbnQgdHlwZS4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBkZXZmcmVxLWV2ZW50IGRldmljZSBvcGVyYXRpb25zIHdoaWNoIGNhbiBiZQorICogaW1wbGVtZW50ZWQgYnkgZGV2ZnJlcS1ldmVudCBkZXZpY2UgZHJpdmVycy4KKyAqLworc3RydWN0IGRldmZyZXFfZXZlbnRfb3BzIHsKKwkvKiBPcHRpb25hbCBmdW5jdGlvbnMgKi8KKwlpbnQgKCplbmFibGUpKHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZWRldik7CisJaW50ICgqZGlzYWJsZSkoc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2KTsKKwlpbnQgKCpyZXNldCkoc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2KTsKKworCS8qIE1hbmRhdG9yeSBmdW5jdGlvbnMgKi8KKwlpbnQgKCpzZXRfZXZlbnQpKHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZWRldik7CisJaW50ICgqZ2V0X2V2ZW50KShzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKmVkZXYsCisJCQkgc3RydWN0IGRldmZyZXFfZXZlbnRfZGF0YSAqZWRhdGEpOworfTsKKworLyoqCisgKiBzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXNjIC0gdGhlIGRlc2NyaXB0b3Igb2YgZGV2ZnJlcS1ldmVudCBkZXZpY2UKKyAqCisgKiBAbmFtZQk6IHRoZSBuYW1lIG9mIGRldmZyZXEtZXZlbnQgZGV2aWNlLgorICogQGRyaXZlcl9kYXRhCTogdGhlIHByaXZhdGUgZGF0YSBmb3IgZGV2ZnJlcS1ldmVudCBkcml2ZXIuCisgKiBAb3BzCQk6IHRoZSBvcGVyYXRpb24gdG8gY29udHJvbCBkZXZmcmVxLWV2ZW50IGRldmljZS4KKyAqCisgKiBFYWNoIGRldmZyZXEtZXZlbnQgZGV2aWNlIGlzIGRlc2NyaWJlZCB3aXRoIGEgdGhpcyBzdHJ1Y3R1cmUuCisgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyB0aGUgdmFyaW91cyBkYXRhIGZvciBkZXZmcmVxLWV2ZW50IGRldmljZS4KKyAqLworc3RydWN0IGRldmZyZXFfZXZlbnRfZGVzYyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl2b2lkICpkcml2ZXJfZGF0YTsKKworCXN0cnVjdCBkZXZmcmVxX2V2ZW50X29wcyAqb3BzOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX1BNX0RFVkZSRVFfRVZFTlQpCitleHRlcm4gaW50IGRldmZyZXFfZXZlbnRfZW5hYmxlX2VkZXYoc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2KTsKK2V4dGVybiBpbnQgZGV2ZnJlcV9ldmVudF9kaXNhYmxlX2VkZXYoc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2KTsKK2V4dGVybiBib29sIGRldmZyZXFfZXZlbnRfaXNfZW5hYmxlZChzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKmVkZXYpOworZXh0ZXJuIGludCBkZXZmcmVxX2V2ZW50X3NldF9ldmVudChzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKmVkZXYpOworZXh0ZXJuIGludCBkZXZmcmVxX2V2ZW50X2dldF9ldmVudChzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKmVkZXYsCisJCQkJc3RydWN0IGRldmZyZXFfZXZlbnRfZGF0YSAqZWRhdGEpOworZXh0ZXJuIGludCBkZXZmcmVxX2V2ZW50X3Jlc2V0X2V2ZW50KHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZWRldik7CitleHRlcm4gc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICpkZXZmcmVxX2V2ZW50X2dldF9lZGV2X2J5X3BoYW5kbGUoCisJCQkJc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaW5kZXgpOworZXh0ZXJuIGludCBkZXZmcmVxX2V2ZW50X2dldF9lZGV2X2NvdW50KHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICpkZXZmcmVxX2V2ZW50X2FkZF9lZGV2KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXNjICpkZXNjKTsKK2V4dGVybiBpbnQgZGV2ZnJlcV9ldmVudF9yZW1vdmVfZWRldihzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKmVkZXYpOworZXh0ZXJuIHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZGV2bV9kZXZmcmVxX2V2ZW50X2FkZF9lZGV2KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXNjICpkZXNjKTsKK2V4dGVybiB2b2lkIGRldm1fZGV2ZnJlcV9ldmVudF9yZW1vdmVfZWRldihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZGV2ZnJlcV9ldmVudF9nZXRfZHJ2ZGF0YShzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKmVkZXYpCit7CisJcmV0dXJuIGVkZXYtPmRlc2MtPmRyaXZlcl9kYXRhOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGRldmZyZXFfZXZlbnRfZW5hYmxlX2VkZXYoc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2KQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZXZmcmVxX2V2ZW50X2Rpc2FibGVfZWRldihzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKmVkZXYpCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBkZXZmcmVxX2V2ZW50X2lzX2VuYWJsZWQoc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2KQoreworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGV2ZnJlcV9ldmVudF9zZXRfZXZlbnQoc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2KQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZXZmcmVxX2V2ZW50X2dldF9ldmVudChzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKmVkZXYsCisJCQkJCXN0cnVjdCBkZXZmcmVxX2V2ZW50X2RhdGEgKmVkYXRhKQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIGludCBkZXZmcmVxX2V2ZW50X3Jlc2V0X2V2ZW50KHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZWRldikKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpkZXZmcmVxX2V2ZW50X2dldF9kcnZkYXRhKHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZWRldikKK3sKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKmRldmZyZXFfZXZlbnRfZ2V0X2VkZXZfYnlfcGhhbmRsZSgKKwkJCQkJc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaW5kZXgpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRldmZyZXFfZXZlbnRfZ2V0X2VkZXZfY291bnQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZGV2ZnJlcV9ldmVudF9hZGRfZWRldihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZmcmVxX2V2ZW50X2Rlc2MgKmRlc2MpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRldmZyZXFfZXZlbnRfcmVtb3ZlX2VkZXYoc3RydWN0IGRldmZyZXFfZXZlbnRfZGV2ICplZGV2KQoreworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZmcmVxX2V2ZW50X2RldiAqZGV2bV9kZXZmcmVxX2V2ZW50X2FkZF9lZGV2KAorCQkJCQlzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZmcmVxX2V2ZW50X2Rlc2MgKmRlc2MpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZtX2RldmZyZXFfZXZlbnRfcmVtb3ZlX2VkZXYoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQlzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKmVkZXYpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZGV2ZnJlcV9ldmVudF9nZXRfZHJ2ZGF0YShzdHJ1Y3QgZGV2ZnJlcV9ldmVudF9kZXYgKmVkZXYpCit7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX1BNX0RFVkZSRVFfRVZFTlQgKi8KKworI2VuZGlmIC8qIF9fTElOVVhfREVWRlJFUV9FVkVOVF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZHFibGtfdjEuaCBiL2luY2x1ZGUvbGludXgvZHFibGtfdjEuaAppbmRleCAzNzEzYTcyLi5jMGQ0ZDFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RxYmxrX3YxLmgKKysrIGIvaW5jbHVkZS9saW51eC9kcWJsa192MS5oCkBAIC01LDkgKzUsNiBAQAogI2lmbmRlZiBfTElOVVhfRFFCTEtfVjFfSAogI2RlZmluZSBfTElOVVhfRFFCTEtfVjFfSAogCi0vKiBSb290IHNxdWFzaCB0dXJuZWQgb24gKi8KLSNkZWZpbmUgVjFfRFFGX1JTUVVBU0ggMQotCiAvKiBOdW1iZXJzIG9mIGJsb2NrcyBuZWVkZWQgZm9yIHVwZGF0ZXMgKi8KICNkZWZpbmUgVjFfSU5JVF9BTExPQyAxCiAjZGVmaW5lIFYxX0lOSVRfUkVXUklURSAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VmaS5oIGIvaW5jbHVkZS9saW51eC9lZmkuaAppbmRleCAwMjM4ZDYxLi5jZjdlNDMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2VmaS5oCisrKyBiL2luY2x1ZGUvbGludXgvZWZpLmgKQEAgLTg0OCw3ICs4NDgsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGNoYXIgKgotZWZpX2d1aWRfdW5wYXJzZShlZmlfZ3VpZF90ICpndWlkLCBjaGFyICpvdXQpCitlZmlfZ3VpZF90b19zdHIoZWZpX2d1aWRfdCAqZ3VpZCwgY2hhciAqb3V0KQogewogCXNwcmludGYob3V0LCAiJXBVbCIsIGd1aWQtPmIpOwogICAgICAgICByZXR1cm4gb3V0OwpAQCAtODc1LDYgKzg3NSw4IEBACiAjZW5kaWYKIGV4dGVybiB2b2lkIF9faW9tZW0gKmVmaV9sb29rdXBfbWFwcGVkX2FkZHIodTY0IHBoeXNfYWRkcik7CiBleHRlcm4gaW50IGVmaV9jb25maWdfaW5pdChlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCAqYXJjaF90YWJsZXMpOworZXh0ZXJuIGludCBlZmlfY29uZmlnX3BhcnNlX3RhYmxlcyh2b2lkICpjb25maWdfdGFibGVzLCBpbnQgY291bnQsIGludCBzeiwKKwkJCQkgICBlZmlfY29uZmlnX3RhYmxlX3R5cGVfdCAqYXJjaF90YWJsZXMpOwogZXh0ZXJuIHU2NCBlZmlfZ2V0X2lvYmFzZSAodm9pZCk7CiBleHRlcm4gdTMyIGVmaV9tZW1fdHlwZSAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIpOwogZXh0ZXJuIHU2NCBlZmlfbWVtX2F0dHJpYnV0ZXMgKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZW5jbG9zdXJlLmggYi9pbmNsdWRlL2xpbnV4L2VuY2xvc3VyZS5oCmluZGV4IDlhMzNjNWYuLjdiZTIyZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZW5jbG9zdXJlLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbmNsb3N1cmUuaApAQCAtNzksNiArNzksMTIgQEAKIAlpbnQgKCpzZXRfbG9jYXRlKShzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqLAogCQkJICBzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudCAqLAogCQkJICBlbnVtIGVuY2xvc3VyZV9jb21wb25lbnRfc2V0dGluZyk7CisJdm9pZCAoKmdldF9wb3dlcl9zdGF0dXMpKHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICosCisJCQkJIHN0cnVjdCBlbmNsb3N1cmVfY29tcG9uZW50ICopOworCWludCAoKnNldF9wb3dlcl9zdGF0dXMpKHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICosCisJCQkJc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKiwKKwkJCQlpbnQpOworCWludCAoKnNob3dfaWQpKHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICosIGNoYXIgKmJ1Zik7CiB9OwogCiAKQEAgLTkxLDcgKzk3LDkgQEAKIAlpbnQgZmF1bHQ7CiAJaW50IGFjdGl2ZTsKIAlpbnQgbG9jYXRlOworCWludCBzbG90OwogCWVudW0gZW5jbG9zdXJlX3N0YXR1cyBzdGF0dXM7CisJaW50IHBvd2VyX3N0YXR1czsKIH07CiAKIHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlIHsKQEAgLTEyMCw4ICsxMjgsOSBAQAogCQkgICBzdHJ1Y3QgZW5jbG9zdXJlX2NvbXBvbmVudF9jYWxsYmFja3MgKik7CiB2b2lkIGVuY2xvc3VyZV91bnJlZ2lzdGVyKHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICopOwogc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKgotZW5jbG9zdXJlX2NvbXBvbmVudF9yZWdpc3RlcihzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqLCB1bnNpZ25lZCBpbnQsCi0JCQkJIGVudW0gZW5jbG9zdXJlX2NvbXBvbmVudF90eXBlLCBjb25zdCBjaGFyICopOworZW5jbG9zdXJlX2NvbXBvbmVudF9hbGxvYyhzdHJ1Y3QgZW5jbG9zdXJlX2RldmljZSAqLCB1bnNpZ25lZCBpbnQsCisJCQkgIGVudW0gZW5jbG9zdXJlX2NvbXBvbmVudF90eXBlLCBjb25zdCBjaGFyICopOworaW50IGVuY2xvc3VyZV9jb21wb25lbnRfcmVnaXN0ZXIoc3RydWN0IGVuY2xvc3VyZV9jb21wb25lbnQgKik7CiBpbnQgZW5jbG9zdXJlX2FkZF9kZXZpY2Uoc3RydWN0IGVuY2xvc3VyZV9kZXZpY2UgKmVuY2xvc3VyZSwgaW50IGNvbXBvbmVudCwKIAkJCSBzdHJ1Y3QgZGV2aWNlICpkZXYpOwogaW50IGVuY2xvc3VyZV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBlbmNsb3N1cmVfZGV2aWNlICosIHN0cnVjdCBkZXZpY2UgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgKaW5kZXggNDFjODkxZC4uMWQ4NjlkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaApAQCAtNTIsNiArNTIsMTAgQEAKICNkZWZpbmUgYWxsb2NfZXRoZXJkZXYoc2l6ZW9mX3ByaXYpIGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZl9wcml2LCAxKQogI2RlZmluZSBhbGxvY19ldGhlcmRldl9tcShzaXplb2ZfcHJpdiwgY291bnQpIGFsbG9jX2V0aGVyZGV2X21xcyhzaXplb2ZfcHJpdiwgY291bnQsIGNvdW50KQogCitzdHJ1Y3Qgc2tfYnVmZiAqKmV0aF9ncm9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKmhlYWQsCisJCQkJIHN0cnVjdCBza19idWZmICpza2IpOworaW50IGV0aF9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ob2ZmKTsKKwogLyogUmVzZXJ2ZWQgRXRoZXJuZXQgQWRkcmVzc2VzIHBlciBJRUVFIDgwMi4xUSAqLwogc3RhdGljIGNvbnN0IHU4IGV0aF9yZXNlcnZlZF9hZGRyX2Jhc2VbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKSA9CiB7IDB4MDEsIDB4ODAsIDB4YzIsIDB4MDAsIDB4MDAsIDB4MDAgfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaAppbmRleCAwOWJiN2ExLi4wNDNmMzI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC03MjYsNyArNzI2LDkgQEAKIAkJCQkgICAgICAgc3RydWN0IGZiX3ZpZGVvbW9kZSAqZmJtb2RlKTsKIAogLyogZHJpdmVycy92aWRlby9tb2RlZGIuYyAqLwotI2RlZmluZSBWRVNBX01PREVEQl9TSVpFIDM0CisjZGVmaW5lIFZFU0FfTU9ERURCX1NJWkUgNDMKKyNkZWZpbmUgRE1UX1NJWkUgMHg1MAorCiBleHRlcm4gdm9pZCBmYl92YXJfdG9fdmlkZW9tb2RlKHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUsCiAJCQkJY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOwogZXh0ZXJuIHZvaWQgZmJfdmlkZW9tb2RlX3RvX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKQEAgLTc3Nyw5ICs3NzksMTcgQEAKIAl1MzIgZmxhZzsKIH07CiAKK3N0cnVjdCBkbXRfdmlkZW9tb2RlIHsKKwl1MzIgZG10X2lkOworCXUzMiBzdGRfMmJ5dGVfY29kZTsKKwl1MzIgY3Z0XzNieXRlX2NvZGU7CisJY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSAqbW9kZTsKK307CisKIGV4dGVybiBjb25zdCBjaGFyICpmYl9tb2RlX29wdGlvbjsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlIHZlc2FfbW9kZXNbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGNlYV9tb2Rlc1s2NF07CitleHRlcm4gY29uc3Qgc3RydWN0IGRtdF92aWRlb21vZGUgZG10X21vZGVzW107CiAKIHN0cnVjdCBmYl9tb2RlbGlzdCB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mZWMuaCBiL2luY2x1ZGUvbGludXgvZmVjLmgKaW5kZXggYmNmZjQ1NS4uMTQ1NGE1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mZWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZlYy5oCkBAIC0xOSw2ICsxOSw3IEBACiBzdHJ1Y3QgZmVjX3BsYXRmb3JtX2RhdGEgewogCXBoeV9pbnRlcmZhY2VfdCBwaHk7CiAJdW5zaWduZWQgY2hhciBtYWNbRVRIX0FMRU5dOworCXZvaWQgKCpzbGVlcF9tb2RlX2VuYWJsZSkoaW50IGVuYWJsZWQpOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmgKaW5kZXggNDJlZmUxMy4uZjEyNWI4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtNDAxLDcgKzQwMSw2IEBACiAJc3BpbmxvY2tfdAkJdHJlZV9sb2NrOwkvKiBhbmQgbG9jayBwcm90ZWN0aW5nIGl0ICovCiAJYXRvbWljX3QJCWlfbW1hcF93cml0YWJsZTsvKiBjb3VudCBWTV9TSEFSRUQgbWFwcGluZ3MgKi8KIAlzdHJ1Y3QgcmJfcm9vdAkJaV9tbWFwOwkJLyogdHJlZSBvZiBwcml2YXRlIGFuZCBzaGFyZWQgbWFwcGluZ3MgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCWlfbW1hcF9ub25saW5lYXI7LypsaXN0IFZNX05PTkxJTkVBUiBtYXBwaW5ncyAqLwogCXN0cnVjdCByd19zZW1hcGhvcmUJaV9tbWFwX3J3c2VtOwkvKiBwcm90ZWN0IHRyZWUsIGNvdW50LCBsaXN0ICovCiAJLyogUHJvdGVjdGVkIGJ5IHRyZWVfbG9jayB0b2dldGhlciB3aXRoIHRoZSByYWRpeCB0cmVlICovCiAJdW5zaWduZWQgbG9uZwkJbnJwYWdlczsJLyogbnVtYmVyIG9mIHRvdGFsIHBhZ2VzICovCkBAIC00OTMsOCArNDkyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgbWFwcGluZ19tYXBwZWQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCiB7Ci0JcmV0dXJuCSFSQl9FTVBUWV9ST09UKCZtYXBwaW5nLT5pX21tYXApIHx8Ci0JCSFsaXN0X2VtcHR5KCZtYXBwaW5nLT5pX21tYXBfbm9ubGluZWFyKTsKKwlyZXR1cm4JIVJCX0VNUFRZX1JPT1QoJm1hcHBpbmctPmlfbW1hcCk7CiB9CiAKIC8qCkBAIC02MjUsNyArNjIzLDcgQEAKIAlhdG9taWNfdAkJaV9yZWFkY291bnQ7IC8qIHN0cnVjdCBmaWxlcyBvcGVuIFJPICovCiAjZW5kaWYKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zCSppX2ZvcDsJLyogZm9ybWVyIC0+aV9vcC0+ZGVmYXVsdF9maWxlX29wcyAqLwotCXN0cnVjdCBmaWxlX2xvY2sJKmlfZmxvY2s7CisJc3RydWN0IGZpbGVfbG9ja19jb250ZXh0CSppX2ZsY3R4OwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlCWlfZGF0YTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWlfZGV2aWNlczsKIAl1bmlvbiB7CkBAIC04ODUsNiArODgzLDggQEAKIC8qIGxlZ2FjeSB0eXBlZGVmLCBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkICovCiB0eXBlZGVmIHZvaWQgKmZsX293bmVyX3Q7CiAKK3N0cnVjdCBmaWxlX2xvY2s7CisKIHN0cnVjdCBmaWxlX2xvY2tfb3BlcmF0aW9ucyB7CiAJdm9pZCAoKmZsX2NvcHlfbG9jaykoc3RydWN0IGZpbGVfbG9jayAqLCBzdHJ1Y3QgZmlsZV9sb2NrICopOwogCXZvaWQgKCpmbF9yZWxlYXNlX3ByaXZhdGUpKHN0cnVjdCBmaWxlX2xvY2sgKik7CkBAIC04OTgsNyArODk4LDcgQEAKIAl2b2lkICgqbG1fbm90aWZ5KShzdHJ1Y3QgZmlsZV9sb2NrICopOwkvKiB1bmJsb2NrIGNhbGxiYWNrICovCiAJaW50ICgqbG1fZ3JhbnQpKHN0cnVjdCBmaWxlX2xvY2sgKiwgaW50KTsKIAlib29sICgqbG1fYnJlYWspKHN0cnVjdCBmaWxlX2xvY2sgKik7Ci0JaW50ICgqbG1fY2hhbmdlKShzdHJ1Y3QgZmlsZV9sb2NrICoqLCBpbnQsIHN0cnVjdCBsaXN0X2hlYWQgKik7CisJaW50ICgqbG1fY2hhbmdlKShzdHJ1Y3QgZmlsZV9sb2NrICosIGludCwgc3RydWN0IGxpc3RfaGVhZCAqKTsKIAl2b2lkICgqbG1fc2V0dXApKHN0cnVjdCBmaWxlX2xvY2sgKiwgdm9pZCAqKik7CiB9OwogCkBAIC05MjMsMTcgKzkyMywxNyBAQAogICogRklYTUU6IHNob3VsZCB3ZSBjcmVhdGUgYSBzZXBhcmF0ZSAic3RydWN0IGxvY2tfcmVxdWVzdCIgdG8gaGVscCBkaXN0aW5ndWlzaAogICogdGhlc2UgdHdvIHVzZXM/CiAgKgotICogVGhlIGlfZmxvY2sgbGlzdCBpcyBvcmRlcmVkIGJ5OgorICogVGhlIHZhcm91cyBpX2ZsY3R4IGxpc3RzIGFyZSBvcmRlcmVkIGJ5OgogICoKLSAqIDEpIGxvY2sgdHlwZSAtLSBGTF9MRUFTRXMgZmlyc3QsIHRoZW4gRkxfRkxPQ0ssIGFuZCBmaW5hbGx5IEZMX1BPU0lYCi0gKiAyKSBsb2NrIG93bmVyCi0gKiAzKSBsb2NrIHJhbmdlIHN0YXJ0Ci0gKiA0KSBsb2NrIHJhbmdlIGVuZAorICogMSkgbG9jayBvd25lcgorICogMikgbG9jayByYW5nZSBzdGFydAorICogMykgbG9jayByYW5nZSBlbmQKICAqCiAgKiBPYnZpb3VzbHksIHRoZSBsYXN0IHR3byBjcml0ZXJpYSBvbmx5IG1hdHRlciBmb3IgUE9TSVggbG9ja3MuCiAgKi8KIHN0cnVjdCBmaWxlX2xvY2sgewogCXN0cnVjdCBmaWxlX2xvY2sgKmZsX25leHQ7CS8qIHNpbmdseSBsaW5rZWQgbGlzdCBmb3IgdGhpcyBpbm9kZSAgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGZsX2xpc3Q7CS8qIGxpbmsgaW50byBmaWxlX2xvY2tfY29udGV4dCAqLwogCXN0cnVjdCBobGlzdF9ub2RlIGZsX2xpbms7CS8qIG5vZGUgaW4gZ2xvYmFsIGxpc3RzICovCiAJc3RydWN0IGxpc3RfaGVhZCBmbF9ibG9jazsJLyogY2lyY3VsYXIgbGlzdCBvZiBibG9ja2VkIHByb2Nlc3NlcyAqLwogCWZsX293bmVyX3QgZmxfb3duZXI7CkBAIC05NjQsNiArOTY0LDE2IEBACiAJfSBmbF91OwogfTsKIAorc3RydWN0IGZpbGVfbG9ja19jb250ZXh0IHsKKwlzcGlubG9ja190CQlmbGNfbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZsY19mbG9jazsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZsY19wb3NpeDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWZsY19sZWFzZTsKKwlpbnQJCQlmbGNfZmxvY2tfY250OworCWludAkJCWZsY19wb3NpeF9jbnQ7CisJaW50CQkJZmxjX2xlYXNlX2NudDsKK307CisKIC8qIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgcmVmbGVjdHMgdGhlIHVwcGVyIGJvdW5kIG9mIHRoZSBmaWxlL2xvY2tpbmcgc3BhY2UgKi8KICNpZm5kZWYgT0ZGU0VUX01BWAogI2RlZmluZSBJTlRfTElNSVQoeCkJKH4oKHgpMSA8PCAoc2l6ZW9mKHgpKjggLSAxKSkpCkBAIC05OTAsNiArMTAwMCw3IEBACiBleHRlcm4gaW50IGZjbnRsX2dldGxlYXNlKHN0cnVjdCBmaWxlICpmaWxwKTsKIAogLyogZnMvbG9ja3MuYyAqLwordm9pZCBsb2Nrc19mcmVlX2xvY2tfY29udGV4dChzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmN0eCk7CiB2b2lkIGxvY2tzX2ZyZWVfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICpmbCk7CiBleHRlcm4gdm9pZCBsb2Nrc19pbml0X2xvY2soc3RydWN0IGZpbGVfbG9jayAqKTsKIGV4dGVybiBzdHJ1Y3QgZmlsZV9sb2NrICogbG9ja3NfYWxsb2NfbG9jayh2b2lkKTsKQEAgLTEwMTAsNyArMTAyMSw3IEBACiBleHRlcm4gdm9pZCBsZWFzZV9nZXRfbXRpbWUoc3RydWN0IGlub2RlICosIHN0cnVjdCB0aW1lc3BlYyAqdGltZSk7CiBleHRlcm4gaW50IGdlbmVyaWNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKiwgbG9uZywgc3RydWN0IGZpbGVfbG9jayAqKiwgdm9pZCAqKnByaXYpOwogZXh0ZXJuIGludCB2ZnNfc2V0bGVhc2Uoc3RydWN0IGZpbGUgKiwgbG9uZywgc3RydWN0IGZpbGVfbG9jayAqKiwgdm9pZCAqKik7Ci1leHRlcm4gaW50IGxlYXNlX21vZGlmeShzdHJ1Y3QgZmlsZV9sb2NrICoqLCBpbnQsIHN0cnVjdCBsaXN0X2hlYWQgKik7CitleHRlcm4gaW50IGxlYXNlX21vZGlmeShzdHJ1Y3QgZmlsZV9sb2NrICosIGludCwgc3RydWN0IGxpc3RfaGVhZCAqKTsKICNlbHNlIC8qICFDT05GSUdfRklMRV9MT0NLSU5HICovCiBzdGF0aWMgaW5saW5lIGludCBmY250bF9nZXRsayhzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICAgIHN0cnVjdCBmbG9jayBfX3VzZXIgKnVzZXIpCkBAIC0xMDQ3LDYgKzEwNTgsMTEgQEAKIAlyZXR1cm4gRl9VTkxDSzsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitsb2Nrc19mcmVlX2xvY2tfY29udGV4dChzdHJ1Y3QgZmlsZV9sb2NrX2NvbnRleHQgKmN0eCkKK3sKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGxvY2tzX2luaXRfbG9jayhzdHJ1Y3QgZmlsZV9sb2NrICpmbCkKIHsKIAlyZXR1cm47CkBAIC0xMTM3LDcgKzExNTMsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBsZWFzZV9tb2RpZnkoc3RydWN0IGZpbGVfbG9jayAqKmJlZm9yZSwgaW50IGFyZywKK3N0YXRpYyBpbmxpbmUgaW50IGxlYXNlX21vZGlmeShzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgaW50IGFyZywKIAkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpkaXNwb3NlKQogewogCXJldHVybiAtRUlOVkFMOwpAQCAtMTk1OSw3ICsxOTc1LDcgQEAKIAkJCQkgICAgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkJICAgIGxvZmZfdCBzaXplKQogewotCWlmIChpbm9kZS0+aV9mbG9jayAmJiBtYW5kYXRvcnlfbG9jayhpbm9kZSkpCisJaWYgKGlub2RlLT5pX2ZsY3R4ICYmIG1hbmRhdG9yeV9sb2NrKGlub2RlKSkKIAkJcmV0dXJuIGxvY2tzX21hbmRhdG9yeV9hcmVhKAogCQkJRkxPQ0tfVkVSSUZZX1dSSVRFLCBpbm9kZSwgZmlscCwKIAkJCXNpemUgPCBpbm9kZS0+aV9zaXplID8gc2l6ZSA6IGlub2RlLT5pX3NpemUsCkBAIC0xOTczLDExICsxOTg5LDEyIEBACiB7CiAJLyoKIAkgKiBTaW5jZSB0aGlzIGNoZWNrIGlzIGxvY2tsZXNzLCB3ZSBtdXN0IGVuc3VyZSB0aGF0IGFueSByZWZjb3VudHMKLQkgKiB0YWtlbiBhcmUgZG9uZSBiZWZvcmUgY2hlY2tpbmcgaW5vZGUtPmlfZmxvY2suIE90aGVyd2lzZSwgd2UgY291bGQKLQkgKiBlbmQgdXAgcmFjaW5nIHdpdGggdGFza3MgdHJ5aW5nIHRvIHNldCBhIG5ldyBsZWFzZSBvbiB0aGlzIGZpbGUuCisJICogdGFrZW4gYXJlIGRvbmUgYmVmb3JlIGNoZWNraW5nIGlfZmxjdHgtPmZsY19sZWFzZS4gT3RoZXJ3aXNlLCB3ZQorCSAqIGNvdWxkIGVuZCB1cCByYWNpbmcgd2l0aCB0YXNrcyB0cnlpbmcgdG8gc2V0IGEgbmV3IGxlYXNlIG9uIHRoaXMKKwkgKiBmaWxlLgogCSAqLwogCXNtcF9tYigpOwotCWlmIChpbm9kZS0+aV9mbG9jaykKKwlpZiAoaW5vZGUtPmlfZmxjdHggJiYgIWxpc3RfZW1wdHlfY2FyZWZ1bCgmaW5vZGUtPmlfZmxjdHgtPmZsY19sZWFzZSkpCiAJCXJldHVybiBfX2JyZWFrX2xlYXNlKGlub2RlLCBtb2RlLCBGTF9MRUFTRSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xOTg2LDExICsyMDAzLDEyIEBACiB7CiAJLyoKIAkgKiBTaW5jZSB0aGlzIGNoZWNrIGlzIGxvY2tsZXNzLCB3ZSBtdXN0IGVuc3VyZSB0aGF0IGFueSByZWZjb3VudHMKLQkgKiB0YWtlbiBhcmUgZG9uZSBiZWZvcmUgY2hlY2tpbmcgaW5vZGUtPmlfZmxvY2suIE90aGVyd2lzZSwgd2UgY291bGQKLQkgKiBlbmQgdXAgcmFjaW5nIHdpdGggdGFza3MgdHJ5aW5nIHRvIHNldCBhIG5ldyBsZWFzZSBvbiB0aGlzIGZpbGUuCisJICogdGFrZW4gYXJlIGRvbmUgYmVmb3JlIGNoZWNraW5nIGlfZmxjdHgtPmZsY19sZWFzZS4gT3RoZXJ3aXNlLCB3ZQorCSAqIGNvdWxkIGVuZCB1cCByYWNpbmcgd2l0aCB0YXNrcyB0cnlpbmcgdG8gc2V0IGEgbmV3IGxlYXNlIG9uIHRoaXMKKwkgKiBmaWxlLgogCSAqLwogCXNtcF9tYigpOwotCWlmIChpbm9kZS0+aV9mbG9jaykKKwlpZiAoaW5vZGUtPmlfZmxjdHggJiYgIWxpc3RfZW1wdHlfY2FyZWZ1bCgmaW5vZGUtPmlfZmxjdHgtPmZsY19sZWFzZSkpCiAJCXJldHVybiBfX2JyZWFrX2xlYXNlKGlub2RlLCBtb2RlLCBGTF9ERUxFRyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDgxLDggKzI0OTksNiBAQAogCiBleHRlcm4gaW50IGdlbmVyaWNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKIGV4dGVybiBpbnQgZ2VuZXJpY19maWxlX3JlYWRvbmx5X21tYXAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwotZXh0ZXJuIGludCBnZW5lcmljX2ZpbGVfcmVtYXBfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJdW5zaWduZWQgbG9uZyBzaXplLCBwZ29mZl90IHBnb2ZmKTsKIGludCBnZW5lcmljX3dyaXRlX2NoZWNrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90ICpwb3MsIHNpemVfdCAqY291bnQsIGludCBpc2Jsayk7CiBleHRlcm4gc3NpemVfdCBnZW5lcmljX2ZpbGVfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqLCBzdHJ1Y3QgaW92X2l0ZXIgKik7CiBleHRlcm4gc3NpemVfdCBfX2dlbmVyaWNfZmlsZV93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqLCBzdHJ1Y3QgaW92X2l0ZXIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmggYi9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgKaW5kZXggMWM4MDRiMC4uN2VlMTc3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNub3RpZnkuaApAQCAtMTAxLDggKzEwMSwxMCBAQAogCQluZXdfZGlyX21hc2sgfD0gRlNfSVNESVI7CiAJfQogCi0JZnNub3RpZnkob2xkX2Rpciwgb2xkX2Rpcl9tYXNrLCBvbGRfZGlyLCBGU05PVElGWV9FVkVOVF9JTk9ERSwgb2xkX25hbWUsIGZzX2Nvb2tpZSk7Ci0JZnNub3RpZnkobmV3X2RpciwgbmV3X2Rpcl9tYXNrLCBuZXdfZGlyLCBGU05PVElGWV9FVkVOVF9JTk9ERSwgbmV3X25hbWUsIGZzX2Nvb2tpZSk7CisJZnNub3RpZnkob2xkX2Rpciwgb2xkX2Rpcl9tYXNrLCBzb3VyY2UsIEZTTk9USUZZX0VWRU5UX0lOT0RFLCBvbGRfbmFtZSwKKwkJIGZzX2Nvb2tpZSk7CisJZnNub3RpZnkobmV3X2RpciwgbmV3X2Rpcl9tYXNrLCBzb3VyY2UsIEZTTk9USUZZX0VWRU5UX0lOT0RFLCBuZXdfbmFtZSwKKwkJIGZzX2Nvb2tpZSk7CiAKIAlpZiAodGFyZ2V0KQogCQlmc25vdGlmeV9saW5rX2NvdW50KHRhcmdldCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaAppbmRleCAwYmViYjVjLi5jNjc0ZWU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKQEAgLTQ0LDYgKzQ0LDEwIEBACiBjb25zdCBjaGFyICpmdHJhY2VfcHJpbnRfaGV4X3NlcShzdHJ1Y3QgdHJhY2Vfc2VxICpwLAogCQkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pOwogCitjb25zdCBjaGFyICpmdHJhY2VfcHJpbnRfYXJyYXlfc2VxKHN0cnVjdCB0cmFjZV9zZXEgKnAsCisJCQkJICAgY29uc3Qgdm9pZCAqYnVmLCBpbnQgYnVmX2xlbiwKKwkJCQkgICBzaXplX3QgZWxfc2l6ZSk7CisKIHN0cnVjdCB0cmFjZV9pdGVyYXRvcjsKIHN0cnVjdCB0cmFjZV9ldmVudDsKIApAQCAtNTk1LDcgKzU5OSw3IEBACiAJCQkJICAgICBjaGFyICpmaWx0ZXJfc3RyKTsKIGV4dGVybiB2b2lkIGZ0cmFjZV9wcm9maWxlX2ZyZWVfZmlsdGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCk7CiBleHRlcm4gdm9pZCAqcGVyZl90cmFjZV9idWZfcHJlcGFyZShpbnQgc2l6ZSwgdW5zaWduZWQgc2hvcnQgdHlwZSwKLQkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCAqcmN0eHApOworCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqKnJlZ3MsIGludCAqcmN0eHApOwogCiBzdGF0aWMgaW5saW5lIHZvaWQKIHBlcmZfdHJhY2VfYnVmX3N1Ym1pdCh2b2lkICpyYXdfZGF0YSwgaW50IHNpemUsIGludCByY3R4LCB1NjQgYWRkciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IGI4NDBlM2IuLjUxYmQxZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtMzM0LDE4ICszMzQsMjIgQEAKIH0KIGV4dGVybiBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfdm1hKGdmcF90IGdmcF9tYXNrLCBpbnQgb3JkZXIsCiAJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJaW50IG5vZGUpOworCQkJaW50IG5vZGUsIGJvb2wgaHVnZXBhZ2UpOworI2RlZmluZSBhbGxvY19odWdlcGFnZV92bWEoZ2ZwX21hc2ssIHZtYSwgYWRkciwgb3JkZXIpCVwKKwlhbGxvY19wYWdlc192bWEoZ2ZwX21hc2ssIG9yZGVyLCB2bWEsIGFkZHIsIG51bWFfbm9kZV9pZCgpLCB0cnVlKQogI2Vsc2UKICNkZWZpbmUgYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKSBcCiAJCWFsbG9jX3BhZ2VzX25vZGUobnVtYV9ub2RlX2lkKCksIGdmcF9tYXNrLCBvcmRlcikKLSNkZWZpbmUgYWxsb2NfcGFnZXNfdm1hKGdmcF9tYXNrLCBvcmRlciwgdm1hLCBhZGRyLCBub2RlKQlcCisjZGVmaW5lIGFsbG9jX3BhZ2VzX3ZtYShnZnBfbWFzaywgb3JkZXIsIHZtYSwgYWRkciwgbm9kZSwgZmFsc2UpXAorCWFsbG9jX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcikKKyNkZWZpbmUgYWxsb2NfaHVnZXBhZ2Vfdm1hKGdmcF9tYXNrLCB2bWEsIGFkZHIsIG9yZGVyKQlcCiAJYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKQogI2VuZGlmCiAjZGVmaW5lIGFsbG9jX3BhZ2UoZ2ZwX21hc2spIGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCAwKQogI2RlZmluZSBhbGxvY19wYWdlX3ZtYShnZnBfbWFzaywgdm1hLCBhZGRyKQkJCVwKLQlhbGxvY19wYWdlc192bWEoZ2ZwX21hc2ssIDAsIHZtYSwgYWRkciwgbnVtYV9ub2RlX2lkKCkpCisJYWxsb2NfcGFnZXNfdm1hKGdmcF9tYXNrLCAwLCB2bWEsIGFkZHIsIG51bWFfbm9kZV9pZCgpLCBmYWxzZSkKICNkZWZpbmUgYWxsb2NfcGFnZV92bWFfbm9kZShnZnBfbWFzaywgdm1hLCBhZGRyLCBub2RlKQkJXAotCWFsbG9jX3BhZ2VzX3ZtYShnZnBfbWFzaywgMCwgdm1hLCBhZGRyLCBub2RlKQorCWFsbG9jX3BhZ2VzX3ZtYShnZnBfbWFzaywgMCwgdm1hLCBhZGRyLCBub2RlLCBmYWxzZSkKIAogZXh0ZXJuIHN0cnVjdCBwYWdlICphbGxvY19rbWVtX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogZXh0ZXJuIHN0cnVjdCBwYWdlICphbGxvY19rbWVtX3BhZ2VzX25vZGUoaW50IG5pZCwgZ2ZwX3QgZ2ZwX21hc2ssCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dwaW8vY29uc3VtZXIuaCBiL2luY2x1ZGUvbGludXgvZ3Bpby9jb25zdW1lci5oCmluZGV4IGZkODVjYjEuLjQ1YWZjMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ3Bpby9jb25zdW1lci5oCisrKyBiL2luY2x1ZGUvbGludXgvZ3Bpby9jb25zdW1lci5oCkBAIC0zNDAsMzEgKzM0MCwzMiBAQAogICogZXRjLgogICovCiAjZGVmaW5lIF9fZ3Bpb2RfZ2V0KGRldiwgY29uX2lkLCBmbGFncywgLi4uKSBfX2dwaW9kX2dldChkZXYsIGNvbl9pZCwgZmxhZ3MpCi0jZGVmaW5lIGdwaW9kX2dldCh2YXJhcmdzLi4uKSBfX2dwaW9kX2dldCh2YXJhcmdzLCAwKQorI2RlZmluZSBncGlvZF9nZXQodmFyYXJncy4uLikgX19ncGlvZF9nZXQodmFyYXJncywgR1BJT0RfQVNJUykKICNkZWZpbmUgX19ncGlvZF9nZXRfaW5kZXgoZGV2LCBjb25faWQsIGluZGV4LCBmbGFncywgLi4uKQkJXAogCV9fZ3Bpb2RfZ2V0X2luZGV4KGRldiwgY29uX2lkLCBpbmRleCwgZmxhZ3MpCi0jZGVmaW5lIGdwaW9kX2dldF9pbmRleCh2YXJhcmdzLi4uKSBfX2dwaW9kX2dldF9pbmRleCh2YXJhcmdzLCAwKQorI2RlZmluZSBncGlvZF9nZXRfaW5kZXgodmFyYXJncy4uLikgX19ncGlvZF9nZXRfaW5kZXgodmFyYXJncywgR1BJT0RfQVNJUykKICNkZWZpbmUgX19ncGlvZF9nZXRfb3B0aW9uYWwoZGV2LCBjb25faWQsIGZsYWdzLCAuLi4pCQkJXAogCV9fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwgY29uX2lkLCBmbGFncykKLSNkZWZpbmUgZ3Bpb2RfZ2V0X29wdGlvbmFsKHZhcmFyZ3MuLi4pIF9fZ3Bpb2RfZ2V0X29wdGlvbmFsKHZhcmFyZ3MsIDApCisjZGVmaW5lIGdwaW9kX2dldF9vcHRpb25hbCh2YXJhcmdzLi4uKSBfX2dwaW9kX2dldF9vcHRpb25hbCh2YXJhcmdzLCBHUElPRF9BU0lTKQogI2RlZmluZSBfX2dwaW9kX2dldF9pbmRleF9vcHRpb25hbChkZXYsIGNvbl9pZCwgaW5kZXgsIGZsYWdzLCAuLi4pCVwKIAlfX2dwaW9kX2dldF9pbmRleF9vcHRpb25hbChkZXYsIGNvbl9pZCwgaW5kZXgsIGZsYWdzKQogI2RlZmluZSBncGlvZF9nZXRfaW5kZXhfb3B0aW9uYWwodmFyYXJncy4uLikJCQkJXAotCV9fZ3Bpb2RfZ2V0X2luZGV4X29wdGlvbmFsKHZhcmFyZ3MsIDApCisJX19ncGlvZF9nZXRfaW5kZXhfb3B0aW9uYWwodmFyYXJncywgR1BJT0RfQVNJUykKICNkZWZpbmUgX19kZXZtX2dwaW9kX2dldChkZXYsIGNvbl9pZCwgZmxhZ3MsIC4uLikJCQlcCiAJX19kZXZtX2dwaW9kX2dldChkZXYsIGNvbl9pZCwgZmxhZ3MpCi0jZGVmaW5lIGRldm1fZ3Bpb2RfZ2V0KHZhcmFyZ3MuLi4pIF9fZGV2bV9ncGlvZF9nZXQodmFyYXJncywgMCkKKyNkZWZpbmUgZGV2bV9ncGlvZF9nZXQodmFyYXJncy4uLikgX19kZXZtX2dwaW9kX2dldCh2YXJhcmdzLCBHUElPRF9BU0lTKQogI2RlZmluZSBfX2Rldm1fZ3Bpb2RfZ2V0X2luZGV4KGRldiwgY29uX2lkLCBpbmRleCwgZmxhZ3MsIC4uLikJCVwKIAlfX2Rldm1fZ3Bpb2RfZ2V0X2luZGV4KGRldiwgY29uX2lkLCBpbmRleCwgZmxhZ3MpCi0jZGVmaW5lIGRldm1fZ3Bpb2RfZ2V0X2luZGV4KHZhcmFyZ3MuLi4pIF9fZGV2bV9ncGlvZF9nZXRfaW5kZXgodmFyYXJncywgMCkKKyNkZWZpbmUgZGV2bV9ncGlvZF9nZXRfaW5kZXgodmFyYXJncy4uLikJCQkJXAorCV9fZGV2bV9ncGlvZF9nZXRfaW5kZXgodmFyYXJncywgR1BJT0RfQVNJUykKICNkZWZpbmUgX19kZXZtX2dwaW9kX2dldF9vcHRpb25hbChkZXYsIGNvbl9pZCwgZmxhZ3MsIC4uLikJCVwKIAlfX2Rldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKGRldiwgY29uX2lkLCBmbGFncykKICNkZWZpbmUgZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwodmFyYXJncy4uLikJCQkJXAotCV9fZGV2bV9ncGlvZF9nZXRfb3B0aW9uYWwodmFyYXJncywgMCkKKwlfX2Rldm1fZ3Bpb2RfZ2V0X29wdGlvbmFsKHZhcmFyZ3MsIEdQSU9EX0FTSVMpCiAjZGVmaW5lIF9fZGV2bV9ncGlvZF9nZXRfaW5kZXhfb3B0aW9uYWwoZGV2LCBjb25faWQsIGluZGV4LCBmbGFncywgLi4uKQlcCiAJX19kZXZtX2dwaW9kX2dldF9pbmRleF9vcHRpb25hbChkZXYsIGNvbl9pZCwgaW5kZXgsIGZsYWdzKQogI2RlZmluZSBkZXZtX2dwaW9kX2dldF9pbmRleF9vcHRpb25hbCh2YXJhcmdzLi4uKQkJCVwKLQlfX2Rldm1fZ3Bpb2RfZ2V0X2luZGV4X29wdGlvbmFsKHZhcmFyZ3MsIDApCisJX19kZXZtX2dwaW9kX2dldF9pbmRleF9vcHRpb25hbCh2YXJhcmdzLCBHUElPRF9BU0lTKQogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfR1BJT0xJQikgJiYgSVNfRU5BQkxFRChDT05GSUdfR1BJT19TWVNGUykKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZG1pLmggYi9pbmNsdWRlL2xpbnV4L2hkbWkuaAppbmRleCBjYmI1NzkwLi5lOTc0NDIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hkbWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hkbWkuaApAQCAtMjUsNiArMjUsNyBAQAogI2RlZmluZSBfX0xJTlVYX0hETUlfSF8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKIGVudW0gaGRtaV9pbmZvZnJhbWVfdHlwZSB7CiAJSERNSV9JTkZPRlJBTUVfVFlQRV9WRU5ET1IgPSAweDgxLApAQCAtNTIsMTIgKzUzLDE4IEBACiAJSERNSV9DT0xPUlNQQUNFX1JHQiwKIAlIRE1JX0NPTE9SU1BBQ0VfWVVWNDIyLAogCUhETUlfQ09MT1JTUEFDRV9ZVVY0NDQsCisJSERNSV9DT0xPUlNQQUNFX1lVVjQyMCwKKwlIRE1JX0NPTE9SU1BBQ0VfUkVTRVJWRUQ0LAorCUhETUlfQ09MT1JTUEFDRV9SRVNFUlZFRDUsCisJSERNSV9DT0xPUlNQQUNFX1JFU0VSVkVENiwKKwlIRE1JX0NPTE9SU1BBQ0VfSURPX0RFRklORUQsCiB9OwogCiBlbnVtIGhkbWlfc2Nhbl9tb2RlIHsKIAlIRE1JX1NDQU5fTU9ERV9OT05FLAogCUhETUlfU0NBTl9NT0RFX09WRVJTQ0FOLAogCUhETUlfU0NBTl9NT0RFX1VOREVSU0NBTiwKKwlIRE1JX1NDQU5fTU9ERV9SRVNFUlZFRCwKIH07CiAKIGVudW0gaGRtaV9jb2xvcmltZXRyeSB7CkBAIC03MSw2ICs3OCw3IEBACiAJSERNSV9QSUNUVVJFX0FTUEVDVF9OT05FLAogCUhETUlfUElDVFVSRV9BU1BFQ1RfNF8zLAogCUhETUlfUElDVFVSRV9BU1BFQ1RfMTZfOSwKKwlIRE1JX1BJQ1RVUkVfQVNQRUNUX1JFU0VSVkVELAogfTsKIAogZW51bSBoZG1pX2FjdGl2ZV9hc3BlY3QgewpAQCAtOTIsMTIgKzEwMCwxOCBAQAogCUhETUlfRVhURU5ERURfQ09MT1JJTUVUUllfU19ZQ0NfNjAxLAogCUhETUlfRVhURU5ERURfQ09MT1JJTUVUUllfQURPQkVfWUNDXzYwMSwKIAlIRE1JX0VYVEVOREVEX0NPTE9SSU1FVFJZX0FET0JFX1JHQiwKKworCS8qIFRoZSBmb2xsb3dpbmcgRUMgdmFsdWVzIGFyZSBvbmx5IGRlZmluZWQgaW4gQ0VBLTg2MS1GLiAqLworCUhETUlfRVhURU5ERURfQ09MT1JJTUVUUllfQlQyMDIwX0NPTlNUX0xVTSwKKwlIRE1JX0VYVEVOREVEX0NPTE9SSU1FVFJZX0JUMjAyMCwKKwlIRE1JX0VYVEVOREVEX0NPTE9SSU1FVFJZX1JFU0VSVkVELAogfTsKIAogZW51bSBoZG1pX3F1YW50aXphdGlvbl9yYW5nZSB7CiAJSERNSV9RVUFOVElaQVRJT05fUkFOR0VfREVGQVVMVCwKIAlIRE1JX1FVQU5USVpBVElPTl9SQU5HRV9MSU1JVEVELAogCUhETUlfUVVBTlRJWkFUSU9OX1JBTkdFX0ZVTEwsCisJSERNSV9RVUFOVElaQVRJT05fUkFOR0VfUkVTRVJWRUQsCiB9OwogCiAvKiBub24tdW5pZm9ybSBwaWN0dXJlIHNjYWxpbmcgKi8KQEAgLTExNCw3ICsxMjgsNyBAQAogfTsKIAogZW51bSBoZG1pX2NvbnRlbnRfdHlwZSB7Ci0JSERNSV9DT05URU5UX1RZUEVfTk9ORSwKKwlIRE1JX0NPTlRFTlRfVFlQRV9HUkFQSElDUywKIAlIRE1JX0NPTlRFTlRfVFlQRV9QSE9UTywKIAlIRE1JX0NPTlRFTlRfVFlQRV9DSU5FTUEsCiAJSERNSV9DT05URU5UX1RZUEVfR0FNRSwKQEAgLTE5NCw2ICsyMDgsNyBAQAogCUhETUlfQVVESU9fQ09ESU5HX1RZUEVfTUxQLAogCUhETUlfQVVESU9fQ09ESU5HX1RZUEVfRFNULAogCUhETUlfQVVESU9fQ09ESU5HX1RZUEVfV01BX1BSTywKKwlIRE1JX0FVRElPX0NPRElOR19UWVBFX0NYVCwKIH07CiAKIGVudW0gaGRtaV9hdWRpb19zYW1wbGVfc2l6ZSB7CkBAIC0yMTUsMTAgKzIzMCwyNSBAQAogfTsKIAogZW51bSBoZG1pX2F1ZGlvX2NvZGluZ190eXBlX2V4dCB7Ci0JSERNSV9BVURJT19DT0RJTkdfVFlQRV9FWFRfU1RSRUFNLAorCS8qIFJlZmVyIHRvIEF1ZGlvIENvZGluZyBUeXBlIChDVCkgZmllbGQgaW4gRGF0YSBCeXRlIDEgKi8KKwlIRE1JX0FVRElPX0NPRElOR19UWVBFX0VYVF9DVCwKKworCS8qCisJICogVGhlIG5leHQgdGhyZWUgQ1hUIHZhbHVlcyBhcmUgZGVmaW5lZCBpbiBDRUEtODYxLUUgb25seS4KKwkgKiBUaGV5IGRvIG5vdCBleGlzdCBpbiBvbGRlciB2ZXJzaW9ucywgYW5kIGluIENFQS04NjEtRiB0aGV5IGFyZQorCSAqIGRlZmluZWQgYXMgJ05vdCBpbiB1c2UnLgorCSAqLwogCUhETUlfQVVESU9fQ09ESU5HX1RZUEVfRVhUX0hFX0FBQywKIAlIRE1JX0FVRElPX0NPRElOR19UWVBFX0VYVF9IRV9BQUNfVjIsCiAJSERNSV9BVURJT19DT0RJTkdfVFlQRV9FWFRfTVBFR19TVVJST1VORCwKKworCS8qIFRoZSBmb2xsb3dpbmcgQ1hUIHZhbHVlcyBhcmUgb25seSBkZWZpbmVkIGluIENFQS04NjEtRi4gKi8KKwlIRE1JX0FVRElPX0NPRElOR19UWVBFX0VYVF9NUEVHNF9IRV9BQUMsCisJSERNSV9BVURJT19DT0RJTkdfVFlQRV9FWFRfTVBFRzRfSEVfQUFDX1YyLAorCUhETUlfQVVESU9fQ09ESU5HX1RZUEVfRVhUX01QRUc0X0FBQ19MQywKKwlIRE1JX0FVRElPX0NPRElOR19UWVBFX0VYVF9EUkEsCisJSERNSV9BVURJT19DT0RJTkdfVFlQRV9FWFRfTVBFRzRfSEVfQUFDX1NVUlJPVU5ELAorCUhETUlfQVVESU9fQ09ESU5HX1RZUEVfRVhUX01QRUc0X0FBQ19MQ19TVVJST1VORCA9IDEwLAogfTsKIAogc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lIHsKQEAgLTI5OSw1ICszMjksOCBAQAogCiBzc2l6ZV90CiBoZG1pX2luZm9mcmFtZV9wYWNrKHVuaW9uIGhkbWlfaW5mb2ZyYW1lICpmcmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CitpbnQgaGRtaV9pbmZvZnJhbWVfdW5wYWNrKHVuaW9uIGhkbWlfaW5mb2ZyYW1lICpmcmFtZSwgdm9pZCAqYnVmZmVyKTsKK3ZvaWQgaGRtaV9pbmZvZnJhbWVfbG9nKGNvbnN0IGNoYXIgKmxldmVsLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQl1bmlvbiBoZG1pX2luZm9mcmFtZSAqZnJhbWUpOwogCiAjZW5kaWYgLyogX0RSTV9IRE1JX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGlkLmggYi9pbmNsdWRlL2xpbnV4L2hpZC5oCmluZGV4IDA2YzQ2MDcuLmVmYzc3ODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlkLmgKKysrIGIvaW5jbHVkZS9saW51eC9oaWQuaApAQCAtNTc0LDcgKzU3NCw5IEBACiAjZGVmaW5lIEhJRF9HTE9CQUxfU1RBQ0tfU0laRSA0CiAjZGVmaW5lIEhJRF9DT0xMRUNUSU9OX1NUQUNLX1NJWkUgNAogCi0jZGVmaW5lIEhJRF9TQ0FOX0ZMQUdfTVRfV0lOXzgJCQkweDAwMDAwMDAxCisjZGVmaW5lIEhJRF9TQ0FOX0ZMQUdfTVRfV0lOXzgJCQlCSVQoMCkKKyNkZWZpbmUgSElEX1NDQU5fRkxBR19WRU5ET1JfU1BFQ0lGSUMJCUJJVCgxKQorI2RlZmluZSBISURfU0NBTl9GTEFHX0dEX1BPSU5URVIJCUJJVCgyKQogCiBzdHJ1Y3QgaGlkX3BhcnNlciB7CiAJc3RydWN0IGhpZF9nbG9iYWwgICAgIGdsb2JhbDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKaW5kZXggYTAzNmQwNS4uMDVmNmRmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9ocnRpbWVyLmgKQEAgLTE3MCw2ICsxNzAsNyBAQAogICogQGNsb2NrX3dhc19zZXQ6CUluZGljYXRlcyB0aGF0IGNsb2NrIHdhcyBzZXQgZnJvbSBpcnEgY29udGV4dC4KICAqIEBleHBpcmVzX25leHQ6CWFic29sdXRlIHRpbWUgb2YgdGhlIG5leHQgZXZlbnQgd2hpY2ggd2FzIHNjaGVkdWxlZAogICoJCQl2aWEgY2xvY2tfc2V0X25leHRfZXZlbnQoKQorICogQGluX2hydGlycToJCWhydGltZXJfaW50ZXJydXB0KCkgaXMgY3VycmVudGx5IGV4ZWN1dGluZwogICogQGhyZXNfYWN0aXZlOglTdGF0ZSBvZiBoaWdoIHJlc29sdXRpb24gbW9kZQogICogQGhhbmdfZGV0ZWN0ZWQ6CVRoZSBsYXN0IGhydGltZXIgaW50ZXJydXB0IGRldGVjdGVkIGEgaGFuZwogICogQG5yX2V2ZW50czoJCVRvdGFsIG51bWJlciBvZiBocnRpbWVyIGludGVycnVwdCBldmVudHMKQEAgLTE4NSw2ICsxODYsNyBAQAogCXVuc2lnbmVkIGludAkJCWNsb2NrX3dhc19zZXQ7CiAjaWZkZWYgQ09ORklHX0hJR0hfUkVTX1RJTUVSUwogCWt0aW1lX3QJCQkJZXhwaXJlc19uZXh0OworCWludAkJCQlpbl9ocnRpcnE7CiAJaW50CQkJCWhyZXNfYWN0aXZlOwogCWludAkJCQloYW5nX2RldGVjdGVkOwogCXVuc2lnbmVkIGxvbmcJCQlucl9ldmVudHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCmluZGV4IGFkOTA1MWIuLmYxMGIyMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCkBAIC0xNTcsNiArMTU3LDEzIEBACiBleHRlcm4gaW50IGRvX2h1Z2VfcG1kX251bWFfcGFnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCBwbWQsIHBtZF90ICpwbWRwKTsKIAorZXh0ZXJuIHN0cnVjdCBwYWdlICpodWdlX3plcm9fcGFnZTsKKworc3RhdGljIGlubGluZSBib29sIGlzX2h1Z2VfemVyb19wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiBBQ0NFU1NfT05DRShodWdlX3plcm9fcGFnZSkgPT0gcGFnZTsKK30KKwogI2Vsc2UgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCiAjZGVmaW5lIEhQQUdFX1BNRF9TSElGVCAoeyBCVUlMRF9CVUcoKTsgMDsgfSkKICNkZWZpbmUgSFBBR0VfUE1EX01BU0sgKHsgQlVJTERfQlVHKCk7IDA7IH0pCkBAIC0yMDYsNiArMjEzLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19odWdlX3plcm9fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi8KIAogI2VuZGlmIC8qIF9MSU5VWF9IVUdFX01NX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKaW5kZXggNDMxYjdmYy4uN2I1Nzg1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmgKKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgKQEAgLTg2LDcgKzg2LDcgQEAKIHB0ZV90ICpodWdlX3BtZF9zaGFyZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCAqcHVkKTsKICNlbmRpZgogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBodWdlcGFnZXNfdHJlYXRfYXNfbW92YWJsZTsKK2V4dGVybiBpbnQgaHVnZXBhZ2VzX3RyZWF0X2FzX21vdmFibGU7CiBleHRlcm4gaW50IHN5c2N0bF9odWdldGxiX3NobV9ncm91cDsKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGh1Z2VfYm9vdF9wYWdlczsKIApAQCAtOTksOSArOTksOSBAQAogc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX2FkZHIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKIAkJCSAgICAgIGludCB3cml0ZSk7CiBzdHJ1Y3QgcGFnZSAqZm9sbG93X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCQkJcG1kX3QgKnBtZCwgaW50IHdyaXRlKTsKKwkJCQlwbWRfdCAqcG1kLCBpbnQgZmxhZ3MpOwogc3RydWN0IHBhZ2UgKmZvbGxvd19odWdlX3B1ZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCQkJCXB1ZF90ICpwdWQsIGludCB3cml0ZSk7CisJCQkJcHVkX3QgKnB1ZCwgaW50IGZsYWdzKTsKIGludCBwbWRfaHVnZShwbWRfdCBwbWQpOwogaW50IHB1ZF9odWdlKHB1ZF90IHBtZCk7CiB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfY2hhbmdlX3Byb3RlY3Rpb24oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCkBAIC0xMzMsOCArMTMzLDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX3Nob3dfbWVtaW5mbyh2b2lkKQogewogfQotI2RlZmluZSBmb2xsb3dfaHVnZV9wbWQobW0sIGFkZHIsIHBtZCwgd3JpdGUpCU5VTEwKLSNkZWZpbmUgZm9sbG93X2h1Z2VfcHVkKG1tLCBhZGRyLCBwdWQsIHdyaXRlKQlOVUxMCisjZGVmaW5lIGZvbGxvd19odWdlX3BtZChtbSwgYWRkciwgcG1kLCBmbGFncykJTlVMTAorI2RlZmluZSBmb2xsb3dfaHVnZV9wdWQobW0sIGFkZHIsIHB1ZCwgZmxhZ3MpCU5VTEwKICNkZWZpbmUgcHJlcGFyZV9odWdlcGFnZV9yYW5nZShmaWxlLCBhZGRyLCBsZW4pCSgtRUlOVkFMKQogI2RlZmluZSBwbWRfaHVnZSh4KQkwCiAjZGVmaW5lIHB1ZF9odWdlKHgpCTAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IGUzYTE3MjEuLjdjNzY5NTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMuaApAQCAtMjI4LDcgKzIyOCw5IEBACiAJc3RydWN0IGRldmljZSBkZXY7CQkvKiB0aGUgZGV2aWNlIHN0cnVjdHVyZQkJKi8KIAlpbnQgaXJxOwkJCS8qIGlycSBpc3N1ZWQgYnkgZGV2aWNlCQkqLwogCXN0cnVjdCBsaXN0X2hlYWQgZGV0ZWN0ZWQ7CisjaWYgSVNfRU5BQkxFRChDT05GSUdfSTJDX1NMQVZFKQogCWkyY19zbGF2ZV9jYl90IHNsYXZlX2NiOwkvKiBjYWxsYmFjayBmb3Igc2xhdmUgbW9kZQkqLworI2VuZGlmCiB9OwogI2RlZmluZSB0b19pMmNfY2xpZW50KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgaTJjX2NsaWVudCwgZGV2KQogCkBAIC0yNTMsNiArMjU1LDcgQEAKIAogLyogSTJDIHNsYXZlIHN1cHBvcnQgKi8KIAorI2lmIElTX0VOQUJMRUQoQ09ORklHX0kyQ19TTEFWRSkKIGVudW0gaTJjX3NsYXZlX2V2ZW50IHsKIAlJMkNfU0xBVkVfUkVRX1JFQURfU1RBUlQsCiAJSTJDX1NMQVZFX1JFUV9SRUFEX0VORCwKQEAgLTI2OSw2ICsyNzIsNyBAQAogewogCXJldHVybiBjbGllbnQtPnNsYXZlX2NiKGNsaWVudCwgZXZlbnQsIHZhbCk7CiB9CisjZW5kaWYKIAogLyoqCiAgKiBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gLSB0ZW1wbGF0ZSBmb3IgZGV2aWNlIGNyZWF0aW9uCkBAIC00MDQsOCArNDA4LDEwIEBACiAJLyogVG8gZGV0ZXJtaW5lIHdoYXQgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgKi8KIAl1MzIgKCpmdW5jdGlvbmFsaXR5KSAoc3RydWN0IGkyY19hZGFwdGVyICopOwogCisjaWYgSVNfRU5BQkxFRChDT05GSUdfSTJDX1NMQVZFKQogCWludCAoKnJlZ19zbGF2ZSkoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7CiAJaW50ICgqdW5yZWdfc2xhdmUpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpOworI2VuZGlmCiB9OwogCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmggYi9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCmluZGV4IDRmNGVlYTguLmI5Yzc4OTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaApAQCAtMTAxNyw2ICsxMDE3LDE1IEBACiAJdTggbWljWzhdOwogfSBfX3BhY2tlZDsKIAorLyogTWFuYWdlbWVudCBNSUMgaW5mb3JtYXRpb24gZWxlbWVudCAoSUVFRSA4MDIuMTF3KSBmb3IgR01BQyBhbmQgQ01BQy0yNTYgKi8KK3N0cnVjdCBpZWVlODAyMTFfbW1pZV8xNiB7CisJdTggZWxlbWVudF9pZDsKKwl1OCBsZW5ndGg7CisJX19sZTE2IGtleV9pZDsKKwl1OCBzZXF1ZW5jZV9udW1iZXJbNl07CisJdTggbWljWzE2XTsKK30gX19wYWNrZWQ7CisKIHN0cnVjdCBpZWVlODAyMTFfdmVuZG9yX2llIHsKIAl1OCBlbGVtZW50X2lkOwogCXU4IGxlbjsKQEAgLTE5OTQsOSArMjAwMywxNSBAQAogCVdMQU5fS0VZX0xFTl9XRVA0MCA9IDUsCiAJV0xBTl9LRVlfTEVOX1dFUDEwNCA9IDEzLAogCVdMQU5fS0VZX0xFTl9DQ01QID0gMTYsCisJV0xBTl9LRVlfTEVOX0NDTVBfMjU2ID0gMzIsCiAJV0xBTl9LRVlfTEVOX1RLSVAgPSAzMiwKIAlXTEFOX0tFWV9MRU5fQUVTX0NNQUMgPSAxNiwKIAlXTEFOX0tFWV9MRU5fU01TNCA9IDMyLAorCVdMQU5fS0VZX0xFTl9HQ01QID0gMTYsCisJV0xBTl9LRVlfTEVOX0dDTVBfMjU2ID0gMzIsCisJV0xBTl9LRVlfTEVOX0JJUF9DTUFDXzI1NiA9IDMyLAorCVdMQU5fS0VZX0xFTl9CSVBfR01BQ18xMjggPSAxNiwKKwlXTEFOX0tFWV9MRU5fQklQX0dNQUNfMjU2ID0gMzIsCiB9OwogCiAjZGVmaW5lIElFRUU4MDIxMV9XRVBfSVZfTEVOCQk0CkBAIC0yMDA0LDkgKzIwMTksMTYgQEAKICNkZWZpbmUgSUVFRTgwMjExX0NDTVBfSERSX0xFTgkJOAogI2RlZmluZSBJRUVFODAyMTFfQ0NNUF9NSUNfTEVOCQk4CiAjZGVmaW5lIElFRUU4MDIxMV9DQ01QX1BOX0xFTgkJNgorI2RlZmluZSBJRUVFODAyMTFfQ0NNUF8yNTZfSERSX0xFTgk4CisjZGVmaW5lIElFRUU4MDIxMV9DQ01QXzI1Nl9NSUNfTEVOCTE2CisjZGVmaW5lIElFRUU4MDIxMV9DQ01QXzI1Nl9QTl9MRU4JNgogI2RlZmluZSBJRUVFODAyMTFfVEtJUF9JVl9MRU4JCTgKICNkZWZpbmUgSUVFRTgwMjExX1RLSVBfSUNWX0xFTgkJNAogI2RlZmluZSBJRUVFODAyMTFfQ01BQ19QTl9MRU4JCTYKKyNkZWZpbmUgSUVFRTgwMjExX0dNQUNfUE5fTEVOCQk2CisjZGVmaW5lIElFRUU4MDIxMV9HQ01QX0hEUl9MRU4JCTgKKyNkZWZpbmUgSUVFRTgwMjExX0dDTVBfTUlDX0xFTgkJMTYKKyNkZWZpbmUgSUVFRTgwMjExX0dDTVBfUE5fTEVOCQk2CiAKIC8qIFB1YmxpYyBhY3Rpb24gY29kZXMgKi8KIGVudW0gaWVlZTgwMjExX3B1Yl9hY3Rpb25jb2RlIHsKQEAgLTIyMzAsNiArMjI1MiwxMSBAQAogI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9XRVAxMDQJMHgwMDBGQUMwNQogI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQwkweDAwMEZBQzA2CiAjZGVmaW5lIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVAJCTB4MDAwRkFDMDgKKyNkZWZpbmUgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTYJMHgwMDBGQUMwOQorI2RlZmluZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QXzI1NgkweDAwMEZBQzBBCisjZGVmaW5lIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9HTUFDXzEyOAkweDAwMEZBQzBCCisjZGVmaW5lIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9HTUFDXzI1NgkweDAwMEZBQzBDCisjZGVmaW5lIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9DTUFDXzI1NgkweDAwMEZBQzBECiAKICNkZWZpbmUgV0xBTl9DSVBIRVJfU1VJVEVfU01TNAkJMHgwMDE0NzIwMQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oIGIvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaAppbmRleCAwYThjZTc2Li5hNTdiY2EyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmgKQEAgLTUwLDI0ICs1MCw2IEBACiB0eXBlZGVmIGludCBicl9zaG91bGRfcm91dGVfaG9va190KHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGJyX3Nob3VsZF9yb3V0ZV9ob29rX3QgX19yY3UgKmJyX3Nob3VsZF9yb3V0ZV9ob29rOwogCi0jaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFKQotaW50IGJyX2ZkYl9leHRlcm5hbF9sZWFybl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQpOwotaW50IGJyX2ZkYl9leHRlcm5hbF9sZWFybl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGJyX2ZkYl9leHRlcm5hbF9sZWFybl9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci1zdGF0aWMgaW5saW5lIGludCBicl9mZGJfZXh0ZXJuYWxfbGVhcm5fZGVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KICNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0UpICYmIElTX0VOQUJMRUQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKQogaW50IGJyX211bHRpY2FzdF9saXN0X2FkamFjZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqYnJfaXBfbGlzdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaCBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oCmluZGV4IDUxNWEzNWUyLi5iMTFiMjhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3ZsYW4uaApAQCAtNzgsOSArNzgsOSBAQAogICAgICAgICByZXR1cm4gZGV2LT5wcml2X2ZsYWdzICYgSUZGXzgwMl8xUV9WTEFOOwogfQogCi0jZGVmaW5lIHZsYW5fdHhfdGFnX3ByZXNlbnQoX19za2IpCSgoX19za2IpLT52bGFuX3RjaSAmIFZMQU5fVEFHX1BSRVNFTlQpCi0jZGVmaW5lIHZsYW5fdHhfdGFnX2dldChfX3NrYikJCSgoX19za2IpLT52bGFuX3RjaSAmIH5WTEFOX1RBR19QUkVTRU5UKQotI2RlZmluZSB2bGFuX3R4X3RhZ19nZXRfaWQoX19za2IpCSgoX19za2IpLT52bGFuX3RjaSAmIFZMQU5fVklEX01BU0spCisjZGVmaW5lIHNrYl92bGFuX3RhZ19wcmVzZW50KF9fc2tiKQkoKF9fc2tiKS0+dmxhbl90Y2kgJiBWTEFOX1RBR19QUkVTRU5UKQorI2RlZmluZSBza2Jfdmxhbl90YWdfZ2V0KF9fc2tiKQkJKChfX3NrYiktPnZsYW5fdGNpICYgflZMQU5fVEFHX1BSRVNFTlQpCisjZGVmaW5lIHNrYl92bGFuX3RhZ19nZXRfaWQoX19za2IpCSgoX19za2IpLT52bGFuX3RjaSAmIFZMQU5fVklEX01BU0spCiAKIC8qKgogICoJc3RydWN0IHZsYW5fcGNwdV9zdGF0cyAtIFZMQU4gcGVyY3B1IHJ4L3R4IHN0YXRzCkBAIC0zNzYsNyArMzc2LDcgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fdmxhbl9od2FjY2VsX3B1c2hfaW5zaWRlKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc2tiID0gdmxhbl9pbnNlcnRfdGFnX3NldF9wcm90byhza2IsIHNrYi0+dmxhbl9wcm90bywKLQkJCQkJdmxhbl90eF90YWdfZ2V0KHNrYikpOworCQkJCQlza2Jfdmxhbl90YWdfZ2V0KHNrYikpOwogCWlmIChsaWtlbHkoc2tiKSkKIAkJc2tiLT52bGFuX3RjaSA9IDA7CiAJcmV0dXJuIHNrYjsKQEAgLTM5Myw3ICszOTMsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp2bGFuX2h3YWNjZWxfcHVzaF9pbnNpZGUoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKQorCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKQogCQlza2IgPSBfX3ZsYW5faHdhY2NlbF9wdXNoX2luc2lkZShza2IpOwogCXJldHVybiBza2I7CiB9CkBAIC00NDIsOCArNDQyLDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IF9fdmxhbl9od2FjY2VsX2dldF90YWcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJIHUxNiAqdmxhbl90Y2kpCiB7Ci0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewotCQkqdmxhbl90Y2kgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgeworCQkqdmxhbl90Y2kgPSBza2Jfdmxhbl90YWdfZ2V0KHNrYik7CiAJCXJldHVybiAwOwogCX0gZWxzZSB7CiAJCSp2bGFuX3RjaSA9IDA7CkBAIC00NzIsMjcgKzQ3Miw1OSBAQAogLyoqCiAgKiB2bGFuX2dldF9wcm90b2NvbCAtIGdldCBwcm90b2NvbCBFdGhlclR5cGUuCiAgKiBAc2tiOiBza2J1ZmYgdG8gcXVlcnkKKyAqIEB0eXBlOiBmaXJzdCB2bGFuIHByb3RvY29sCisgKiBAZGVwdGg6IGJ1ZmZlciB0byBzdG9yZSBsZW5ndGggb2YgZXRoIGFuZCB2bGFuIHRhZ3MgaW4gYnl0ZXMKICAqCiAgKiBSZXR1cm5zIHRoZSBFdGhlclR5cGUgb2YgdGhlIHBhY2tldCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzCiAgKiB2bGFuIGVuY2Fwc3VsYXRlZCAobm9ybWFsIG9yIGhhcmR3YXJlIGFjY2VsZXJhdGVkKSBvciBub3QuCiAgKi8KLXN0YXRpYyBpbmxpbmUgX19iZTE2IHZsYW5fZ2V0X3Byb3RvY29sKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIF9fYmUxNiBfX3ZsYW5fZ2V0X3Byb3RvY29sKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiB0eXBlLAorCQkJCQkgaW50ICpkZXB0aCkKIHsKLQlfX2JlMTYgcHJvdG9jb2wgPSAwOworCXVuc2lnbmVkIGludCB2bGFuX2RlcHRoID0gc2tiLT5tYWNfbGVuOwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSB8fAotCSAgICAgc2tiLT5wcm90b2NvbCAhPSBjcHVfdG9fYmUxNihFVEhfUF84MDIxUSkpCi0JCXByb3RvY29sID0gc2tiLT5wcm90b2NvbDsKLQllbHNlIHsKLQkJX19iZTE2IHByb3RvLCAqcHJvdG9wOwotCQlwcm90b3AgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsCi0JCQkJCQloX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvKSwKLQkJCQkJCXNpemVvZihwcm90byksICZwcm90byk7Ci0JCWlmIChsaWtlbHkocHJvdG9wKSkKLQkJCXByb3RvY29sID0gKnByb3RvcDsKKwkvKiBpZiB0eXBlIGlzIDgwMi4xUS9BRCB0aGVuIHRoZSBoZWFkZXIgc2hvdWxkIGFscmVhZHkgYmUKKwkgKiBwcmVzZW50IGF0IG1hY19sZW4gLSBWTEFOX0hMRU4gKGlmIG1hY19sZW4gPiAwKSwgb3IgYXQKKwkgKiBFVEhfSExFTiBvdGhlcndpc2UKKwkgKi8KKwlpZiAodHlwZSA9PSBodG9ucyhFVEhfUF84MDIxUSkgfHwgdHlwZSA9PSBodG9ucyhFVEhfUF84MDIxQUQpKSB7CisJCWlmICh2bGFuX2RlcHRoKSB7CisJCQlpZiAoV0FSTl9PTih2bGFuX2RlcHRoIDwgVkxBTl9ITEVOKSkKKwkJCQlyZXR1cm4gMDsKKwkJCXZsYW5fZGVwdGggLT0gVkxBTl9ITEVOOworCQl9IGVsc2UgeworCQkJdmxhbl9kZXB0aCA9IEVUSF9ITEVOOworCQl9CisJCWRvIHsKKwkJCXN0cnVjdCB2bGFuX2hkciAqdmg7CisKKwkJCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsCisJCQkJCQkgICAgdmxhbl9kZXB0aCArIFZMQU5fSExFTikpKQorCQkJCXJldHVybiAwOworCisJCQl2aCA9IChzdHJ1Y3Qgdmxhbl9oZHIgKikoc2tiLT5kYXRhICsgdmxhbl9kZXB0aCk7CisJCQl0eXBlID0gdmgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87CisJCQl2bGFuX2RlcHRoICs9IFZMQU5fSExFTjsKKwkJfSB3aGlsZSAodHlwZSA9PSBodG9ucyhFVEhfUF84MDIxUSkgfHwKKwkJCSB0eXBlID09IGh0b25zKEVUSF9QXzgwMjFBRCkpOwogCX0KIAotCXJldHVybiBwcm90b2NvbDsKKwlpZiAoZGVwdGgpCisJCSpkZXB0aCA9IHZsYW5fZGVwdGg7CisKKwlyZXR1cm4gdHlwZTsKK30KKworLyoqCisgKiB2bGFuX2dldF9wcm90b2NvbCAtIGdldCBwcm90b2NvbCBFdGhlclR5cGUuCisgKiBAc2tiOiBza2J1ZmYgdG8gcXVlcnkKKyAqCisgKiBSZXR1cm5zIHRoZSBFdGhlclR5cGUgb2YgdGhlIHBhY2tldCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzCisgKiB2bGFuIGVuY2Fwc3VsYXRlZCAobm9ybWFsIG9yIGhhcmR3YXJlIGFjY2VsZXJhdGVkKSBvciBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgX19iZTE2IHZsYW5fZ2V0X3Byb3RvY29sKHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIF9fdmxhbl9nZXRfcHJvdG9jb2woc2tiLCBza2ItPnByb3RvY29sLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHZsYW5fc2V0X2VuY2FwX3Byb3RvKHN0cnVjdCBza19idWZmICpza2IsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0L210LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0L210LmgKaW5kZXggZjU4M2ZmNi4uZDcxODhkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC9tdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQvbXQuaApAQCAtMTE5LDcgKzExOSw4IEBACiB9OwogCiBpbnQgaW5wdXRfbXRfYXNzaWduX3Nsb3RzKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50ICpzbG90cywKLQkJCSAgY29uc3Qgc3RydWN0IGlucHV0X210X3BvcyAqcG9zLCBpbnQgbnVtX3Bvcyk7CisJCQkgIGNvbnN0IHN0cnVjdCBpbnB1dF9tdF9wb3MgKnBvcywgaW50IG51bV9wb3MsCisJCQkgIGludCBkbWF4KTsKIAogaW50IGlucHV0X210X2dldF9zbG90X2J5X2tleShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBrZXkpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwdjYuaCBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCmluZGV4IGM2OTRlN2IuLjRkNTE2OWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCkBAIC01Miw2ICs1Miw3IEBACiAJX19zMzIJCWZvcmNlX3RsbGFvOwogCV9fczMyICAgICAgICAgICBuZGlzY19ub3RpZnk7CiAJX19zMzIJCXN1cHByZXNzX2ZyYWdfbmRpc2M7CisJX19zMzIJCWFjY2VwdF9yYV9tdHU7CiAJdm9pZAkJKnN5c2N0bDsKIH07CiAKQEAgLTEyNCw2ICsxMjUsMTIgQEAKIHN0cnVjdCBpcHY2X2FjX3NvY2tsaXN0Owogc3RydWN0IGlwdjZfZmxfc29ja2xpc3Q7CiAKK3N0cnVjdCBpbmV0Nl9jb3JrIHsKKwlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdDsKKwl1OCBob3BfbGltaXQ7CisJdTggdGNsYXNzOworfTsKKwogLyoqCiAgKiBzdHJ1Y3QgaXB2Nl9waW5mbyAtIGlwdjYgcHJpdmF0ZSBhcmVhCiAgKgpAQCAtMjE2LDExICsyMjMsNyBAQAogCXN0cnVjdCBpcHY2X3R4b3B0aW9ucwkqb3B0OwogCXN0cnVjdCBza19idWZmCQkqcGt0b3B0aW9uczsKIAlzdHJ1Y3Qgc2tfYnVmZgkJKnJ4cG10dTsKLQlzdHJ1Y3QgewotCQlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdDsKLQkJdTggaG9wX2xpbWl0OwotCQl1OCB0Y2xhc3M7Ci0JfSBjb3JrOworCXN0cnVjdCBpbmV0Nl9jb3JrCWNvcms7CiB9OwogCiAvKiBXQVJOSU5HOiBkb24ndCBjaGFuZ2UgdGhlIGxheW91dCBvZiB0aGUgbWVtYmVycyBpbiB7cmF3LHVkcCx0Y3B9Nl9zb2NrISAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQuaCBiL2luY2x1ZGUvbGludXgvamJkLmgKaW5kZXggMzEyMjllMC4uZDMyNjE1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qYmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZC5oCkBAIC05NTYsMTUgKzk1Niw2IEBACiBleHRlcm4gdm9pZAlfX2pvdXJuYWxfZHJvcF90cmFuc2FjdGlvbihqb3VybmFsX3QgKiwgdHJhbnNhY3Rpb25fdCAqKTsKIGV4dGVybiBpbnQJY2xlYW51cF9qb3VybmFsX3RhaWwoam91cm5hbF90ICopOwogCi0vKiBEZWJ1Z2dpbmcgY29kZSBvbmx5OiAqLwotCi0jZGVmaW5lIGpiZF9FTk9TWVMoKSBcCi1kbyB7CQkJCQkJCQkgICAgICAgICAgIFwKLQlwcmludGsgKEtFUk5fRVJSICJKQkQgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbiAlc1xuIiwgX19mdW5jX18pOyBcCi0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsJCQkgICAgICAgICAgIFwKLQlzY2hlZHVsZSgpOwkJCQkJCSAgICAgICAgICAgXAotfSB3aGlsZSAoMSkKLQogLyoKICAqIGlzX2pvdXJuYWxfYWJvcnQKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZDIuaCBiL2luY2x1ZGUvbGludXgvamJkMi5oCmluZGV4IDcwNGI5YTUuLjIwZTdmNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkMi5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkMi5oCkBAIC0xMjUxLDE1ICsxMjUxLDYgQEAKIGV4dGVybiB2b2lkIF9famJkMl9qb3VybmFsX2Ryb3BfdHJhbnNhY3Rpb24oam91cm5hbF90ICosIHRyYW5zYWN0aW9uX3QgKik7CiBleHRlcm4gaW50IGpiZDJfY2xlYW51cF9qb3VybmFsX3RhaWwoam91cm5hbF90ICopOwogCi0vKiBEZWJ1Z2dpbmcgY29kZSBvbmx5OiAqLwotCi0jZGVmaW5lIGpiZF9FTk9TWVMoKSBcCi1kbyB7CQkJCQkJCQkgICAgICAgICAgIFwKLQlwcmludGsgKEtFUk5fRVJSICJKQkQgdW5pbXBsZW1lbnRlZCBmdW5jdGlvbiAlc1xuIiwgX19mdW5jX18pOyBcCi0JY3VycmVudC0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsJCQkgICAgICAgICAgIFwKLQlzY2hlZHVsZSgpOwkJCQkJCSAgICAgICAgICAgXAotfSB3aGlsZSAoMSkKLQogLyoKICAqIGlzX2pvdXJuYWxfYWJvcnQKICAqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCA1NDQ5ZDJmLi5lNDJlN2RjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTE3Niw3ICsxNzYsNyBAQAogICovCiAjIGRlZmluZSBtaWdodF9zbGVlcCgpIFwKIAlkbyB7IF9fbWlnaHRfc2xlZXAoX19GSUxFX18sIF9fTElORV9fLCAwKTsgbWlnaHRfcmVzY2hlZCgpOyB9IHdoaWxlICgwKQotIyBkZWZpbmUgc2NoZWRfYW5ub3RhdGVfc2xlZXAoKQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORykKKyMgZGVmaW5lIHNjaGVkX2Fubm90YXRlX3NsZWVwKCkJKGN1cnJlbnQtPnRhc2tfc3RhdGVfY2hhbmdlID0gMCkKICNlbHNlCiAgIHN0YXRpYyBpbmxpbmUgdm9pZCBfX19taWdodF9zbGVlcChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwKIAkJCQkgICBpbnQgcHJlZW1wdF9vZmZzZXQpIHsgfQpAQCAtNDcxLDYgKzQ3MSw3IEBACiAjZGVmaW5lIFRBSU5UX09PVF9NT0RVTEUJCTEyCiAjZGVmaW5lIFRBSU5UX1VOU0lHTkVEX01PRFVMRQkJMTMKICNkZWZpbmUgVEFJTlRfU09GVExPQ0tVUAkJMTQKKyNkZWZpbmUgVEFJTlRfTElWRVBBVENICQkJMTUKIAogZXh0ZXJuIGNvbnN0IGNoYXIgaGV4X2FzY1tdOwogI2RlZmluZSBoZXhfYXNjX2xvKHgpCWhleF9hc2NbKCh4KSAmIDB4MGYpXQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rcHJvYmVzLmggYi9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaAppbmRleCA1Mjk3ZjlmLi4xYWI1NDc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaApAQCAtMzA4LDcgKzMwOCw4IEBACiAvKiBBcmNoaXRlY3R1cmUgZGVwZW5kZW50IGZ1bmN0aW9ucyBmb3IgZGlyZWN0IGp1bXAgb3B0aW1pemF0aW9uICovCiBleHRlcm4gaW50IGFyY2hfcHJlcGFyZWRfb3B0aW5zbihzdHJ1Y3QgYXJjaF9vcHRpbWl6ZWRfaW5zbiAqb3B0aW5zbik7CiBleHRlcm4gaW50IGFyY2hfY2hlY2tfb3B0aW1pemVkX2twcm9iZShzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3ApOwotZXh0ZXJuIGludCBhcmNoX3ByZXBhcmVfb3B0aW1pemVkX2twcm9iZShzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3ApOworZXh0ZXJuIGludCBhcmNoX3ByZXBhcmVfb3B0aW1pemVkX2twcm9iZShzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3AsCisJCQkJCSBzdHJ1Y3Qga3Byb2JlICpvcmlnKTsKIGV4dGVybiB2b2lkIGFyY2hfcmVtb3ZlX29wdGltaXplZF9rcHJvYmUoc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wKTsKIGV4dGVybiB2b2lkIGFyY2hfb3B0aW1pemVfa3Byb2JlcyhzdHJ1Y3QgbGlzdF9oZWFkICpvcGxpc3QpOwogZXh0ZXJuIHZvaWQgYXJjaF91bm9wdGltaXplX2twcm9iZXMoc3RydWN0IGxpc3RfaGVhZCAqb3BsaXN0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdGltZS5oIGIvaW5jbHVkZS9saW51eC9rdGltZS5oCmluZGV4IGM5ZDY0NWEuLjVmYzNkMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3RpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t0aW1lLmgKQEAgLTE2Niw3ICsxNjYsMTcgQEAKIH0KIAogI2lmIEJJVFNfUEVSX0xPTkcgPCA2NAotZXh0ZXJuIHU2NCBrdGltZV9kaXZucyhjb25zdCBrdGltZV90IGt0LCBzNjQgZGl2KTsKK2V4dGVybiB1NjQgX19rdGltZV9kaXZucyhjb25zdCBrdGltZV90IGt0LCBzNjQgZGl2KTsKK3N0YXRpYyBpbmxpbmUgdTY0IGt0aW1lX2Rpdm5zKGNvbnN0IGt0aW1lX3Qga3QsIHM2NCBkaXYpCit7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKGRpdikgJiYgIShkaXYgPj4gMzIpKSB7CisJCXU2NCBucyA9IGt0LnR2NjQ7CisJCWRvX2RpdihucywgZGl2KTsKKwkJcmV0dXJuIG5zOworCX0gZWxzZSB7CisJCXJldHVybiBfX2t0aW1lX2Rpdm5zKGt0LCBkaXYpOworCX0KK30KICNlbHNlIC8qIEJJVFNfUEVSX0xPTkcgPCA2NCAqLwogIyBkZWZpbmUga3RpbWVfZGl2bnMoa3QsIGRpdikJCSh1NjQpKChrdCkudHY2NCAvIChkaXYpKQogI2VuZGlmCkBAIC0xODYsNiArMTk2LDExIEBACiAgICAgICAgcmV0dXJuIGt0aW1lX3RvX3VzKGt0aW1lX3N1YihsYXRlciwgZWFybGllcikpOwogfQogCitzdGF0aWMgaW5saW5lIHM2NCBrdGltZV9tc19kZWx0YShjb25zdCBrdGltZV90IGxhdGVyLCBjb25zdCBrdGltZV90IGVhcmxpZXIpCit7CisJcmV0dXJuIGt0aW1lX3RvX21zKGt0aW1lX3N1YihsYXRlciwgZWFybGllcikpOworfQorCiBzdGF0aWMgaW5saW5lIGt0aW1lX3Qga3RpbWVfYWRkX3VzKGNvbnN0IGt0aW1lX3Qga3QsIGNvbnN0IHU2NCB1c2VjKQogewogCXJldHVybiBrdGltZV9hZGRfbnMoa3QsIHVzZWMgKiBOU0VDX1BFUl9VU0VDKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaCBiL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAppbmRleCAyNmYxMDYwLi5kMTg5ZWUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCkBAIC0yMDAsMTcgKzIwMCw2IEBACiBpbnQga3ZtX2FzeW5jX3BmX3dha2V1cF9hbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKICNlbmRpZgogCi0vKgotICogQ2Fycnkgb3V0IGEgZ3VwIHRoYXQgcmVxdWlyZXMgSU8uIEFsbG93IHRoZSBtbSB0byByZWxpbnF1aXNoIHRoZSBtbWFwCi0gKiBzZW1hcGhvcmUgaWYgdGhlIGZpbGVtYXAvc3dhcCBoYXMgdG8gd2FpdCBvbiBhIHBhZ2UgbG9jay4gcGFnZXAgPT0gTlVMTAotICogY29udHJvbHMgd2hldGhlciB3ZSByZXRyeSB0aGUgZ3VwIG9uZSBtb3JlIHRpbWUgdG8gY29tcGxldGlvbiBpbiB0aGF0IGNhc2UuCi0gKiBUeXBpY2FsbHkgdGhpcyBpcyBjYWxsZWQgYWZ0ZXIgYSBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVCBpbiB0aGUgbWFpbiB0ZHAKLSAqIGhhbmRsZXIuCi0gKi8KLWludCBrdm1fZ2V0X3VzZXJfcGFnZV9pbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIHdyaXRlX2ZhdWx0LAotCQkJIHN0cnVjdCBwYWdlICoqcGFnZXApOwotCiBlbnVtIHsKIAlPVVRTSURFX0dVRVNUX01PREUsCiAJSU5fR1VFU1RfTU9ERSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IDkxZjcwNWQuLjYxZGY4MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtMTM0MCw2ICsxMzQwLDEyIEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgc2F0YV9wb3J0X29wczsKIGV4dGVybiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXRhX2NvbW1vbl9zZGV2X2F0dHJzW107CiAKKy8qCisgKiBBbGwgc2h0IGluaXRpYWxpemVycyAoQkFTRSwgUElPLCBCTURNQSwgTkNRKSBtdXN0IGJlIGluc3RhbnRpYXRlZAorICogYnkgdGhlIGVkZ2UgZHJpdmVycy4gIEJlY2F1c2UgdGhlICdtb2R1bGUnIGZpZWxkIG9mIHNodCBtdXN0IGJlIHRoZQorICogZWRnZSBkcml2ZXIncyBtb2R1bGUgcmVmZXJlbmNlLCBvdGhlcndpc2UgdGhlIGRyaXZlciBjYW4gYmUgdW5sb2FkZWQKKyAqIGV2ZW4gaWYgdGhlIHNjc2lfZGV2aWNlIGlzIGJlaW5nIGFjY2Vzc2VkLgorICovCiAjZGVmaW5lIEFUQV9CQVNFX1NIVChkcnZfbmFtZSkJCQkJCVwKIAkubW9kdWxlCQkJPSBUSElTX01PRFVMRSwJCQlcCiAJLm5hbWUJCQk9IGRydl9uYW1lLAkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlzdF9udWxscy5oIGIvaW5jbHVkZS9saW51eC9saXN0X251bGxzLmgKaW5kZXggNWQxMGFlMy4uZjI2NjY2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saXN0X251bGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9saXN0X251bGxzLmgKQEAgLTEsNiArMSw5IEBACiAjaWZuZGVmIF9MSU5VWF9MSVNUX05VTExTX0gKICNkZWZpbmUgX0xJTlVYX0xJU1RfTlVMTFNfSAogCisjaW5jbHVkZSA8bGludXgvcG9pc29uLmg+CisjaW5jbHVkZSA8bGludXgvY29uc3QuaD4KKwogLyoKICAqIFNwZWNpYWwgdmVyc2lvbiBvZiBsaXN0cywgd2hlcmUgZW5kIG9mIGxpc3QgaXMgbm90IGEgTlVMTCBwb2ludGVyLAogICogYnV0IGEgJ251bGxzJyBtYXJrZXIsIHdoaWNoIGNhbiBoYXZlIG1hbnkgZGlmZmVyZW50IHZhbHVlcy4KQEAgLTIxLDggKzI0LDkgQEAKIHN0cnVjdCBobGlzdF9udWxsc19ub2RlIHsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbmV4dCwgKipwcHJldjsKIH07CisjZGVmaW5lIE5VTExTX01BUktFUih2YWx1ZSkgKDFVTCB8ICgoKGxvbmcpdmFsdWUpIDw8IDEpKQogI2RlZmluZSBJTklUX0hMSVNUX05VTExTX0hFQUQocHRyLCBudWxscykgXAotCSgocHRyKS0+Zmlyc3QgPSAoc3RydWN0IGhsaXN0X251bGxzX25vZGUgKikgKDFVTCB8ICgoKGxvbmcpbnVsbHMpIDw8IDEpKSkKKwkoKHB0ciktPmZpcnN0ID0gKHN0cnVjdCBobGlzdF9udWxsc19ub2RlICopIE5VTExTX01BUktFUihudWxscykpCiAKICNkZWZpbmUgaGxpc3RfbnVsbHNfZW50cnkocHRyLCB0eXBlLCBtZW1iZXIpIGNvbnRhaW5lcl9vZihwdHIsdHlwZSxtZW1iZXIpCiAvKioKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGl2ZXBhdGNoLmggYi9pbmNsdWRlL2xpbnV4L2xpdmVwYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MDIzZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2xpdmVwYXRjaC5oCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogbGl2ZXBhdGNoLmggLSBLZXJuZWwgTGl2ZSBQYXRjaGluZyBDb3JlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNldGggSmVubmluZ3MgPHNqZW5uaW5nQHJlZGhhdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU1VTRQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9MSVZFUEFUQ0hfSF8KKyNkZWZpbmUgX0xJTlVYX0xJVkVQQVRDSF9IXworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CisKKyNpZiBJU19FTkFCTEVEKENPTkZJR19MSVZFUEFUQ0gpCisKKyNpbmNsdWRlIDxhc20vbGl2ZXBhdGNoLmg+CisKK2VudW0ga2xwX3N0YXRlIHsKKwlLTFBfRElTQUJMRUQsCisJS0xQX0VOQUJMRUQKK307CisKKy8qKgorICogc3RydWN0IGtscF9mdW5jIC0gZnVuY3Rpb24gc3RydWN0dXJlIGZvciBsaXZlIHBhdGNoaW5nCisgKiBAb2xkX25hbWU6CW5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIHBhdGNoZWQKKyAqIEBuZXdfZnVuYzoJcG9pbnRlciB0byB0aGUgcGF0Y2hlZCBmdW5jdGlvbiBjb2RlCisgKiBAb2xkX2FkZHI6CWEgaGludCBjb252ZXlpbmcgYXQgd2hhdCBhZGRyZXNzIHRoZSBvbGQgZnVuY3Rpb24KKyAqCQljYW4gYmUgZm91bmQgKG9wdGlvbmFsLCB2bWxpbnV4IHBhdGNoZXMgb25seSkKKyAqIEBrb2JqOglrb2JqZWN0IGZvciBzeXNmcyByZXNvdXJjZXMKKyAqIEBzdGF0ZToJdHJhY2tzIGZ1bmN0aW9uLWxldmVsIHBhdGNoIGFwcGxpY2F0aW9uIHN0YXRlCisgKiBAc3RhY2tfbm9kZToJbGlzdCBub2RlIGZvciBrbHBfb3BzIGZ1bmNfc3RhY2sgbGlzdAorICovCitzdHJ1Y3Qga2xwX2Z1bmMgeworCS8qIGV4dGVybmFsICovCisJY29uc3QgY2hhciAqb2xkX25hbWU7CisJdm9pZCAqbmV3X2Z1bmM7CisJLyoKKwkgKiBUaGUgb2xkX2FkZHIgZmllbGQgaXMgb3B0aW9uYWwgYW5kIGNhbiBiZSB1c2VkIHRvIHJlc29sdmUKKwkgKiBkdXBsaWNhdGUgc3ltYm9sIG5hbWVzIGluIHRoZSB2bWxpbnV4IG9iamVjdC4gIElmIHRoaXMKKwkgKiBpbmZvcm1hdGlvbiBpcyBub3QgcHJlc2VudCwgdGhlIHN5bWJvbCBpcyBsb2NhdGVkIGJ5IG5hbWUKKwkgKiB3aXRoIGthbGxzeW1zLiBJZiB0aGUgbmFtZSBpcyBub3QgdW5pcXVlIGFuZCBvbGRfYWRkciBpcworCSAqIG5vdCBwcm92aWRlZCwgdGhlIHBhdGNoIGFwcGxpY2F0aW9uIGZhaWxzIGFzIHRoZXJlIGlzIG5vCisJICogd2F5IHRvIHJlc29sdmUgdGhlIGFtYmlndWl0eS4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIG9sZF9hZGRyOworCisJLyogaW50ZXJuYWwgKi8KKwlzdHJ1Y3Qga29iamVjdCBrb2JqOworCWVudW0ga2xwX3N0YXRlIHN0YXRlOworCXN0cnVjdCBsaXN0X2hlYWQgc3RhY2tfbm9kZTsKK307CisKKy8qKgorICogc3RydWN0IGtscF9yZWxvYyAtIHJlbG9jYXRpb24gc3RydWN0dXJlIGZvciBsaXZlIHBhdGNoaW5nCisgKiBAbG9jOglhZGRyZXNzIHdoZXJlIHRoZSByZWxvY2F0aW9uIHdpbGwgYmUgd3JpdHRlbgorICogQHZhbDoJYWRkcmVzcyBvZiB0aGUgcmVmZXJlbmNlZCBzeW1ib2wgKG9wdGlvbmFsLAorICoJCXZtbGludXgJcGF0Y2hlcyBvbmx5KQorICogQHR5cGU6CUVMRiByZWxvY2F0aW9uIHR5cGUKKyAqIEBuYW1lOgluYW1lIG9mIHRoZSByZWZlcmVuY2VkIHN5bWJvbCAoZm9yIGxvb2t1cC92ZXJpZmljYXRpb24pCisgKiBAYWRkZW5kOglvZmZzZXQgZnJvbSB0aGUgcmVmZXJlbmNlZCBzeW1ib2wKKyAqIEBleHRlcm5hbDoJc3ltYm9sIGlzIGVpdGhlciBleHBvcnRlZCBvciB3aXRoaW4gdGhlIGxpdmUgcGF0Y2ggbW9kdWxlIGl0c2VsZgorICovCitzdHJ1Y3Qga2xwX3JlbG9jIHsKKwl1bnNpZ25lZCBsb25nIGxvYzsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIHR5cGU7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgYWRkZW5kOworCWludCBleHRlcm5hbDsKK307CisKKy8qKgorICogc3RydWN0IGtscF9vYmplY3QgLSBrZXJuZWwgb2JqZWN0IHN0cnVjdHVyZSBmb3IgbGl2ZSBwYXRjaGluZworICogQG5hbWU6CW1vZHVsZSBuYW1lIChvciBOVUxMIGZvciB2bWxpbnV4KQorICogQHJlbG9jczoJcmVsb2NhdGlvbiBlbnRyaWVzIHRvIGJlIGFwcGxpZWQgYXQgbG9hZCB0aW1lCisgKiBAZnVuY3M6CWZ1bmN0aW9uIGVudHJpZXMgZm9yIGZ1bmN0aW9ucyB0byBiZSBwYXRjaGVkIGluIHRoZSBvYmplY3QKKyAqIEBrb2JqOglrb2JqZWN0IGZvciBzeXNmcyByZXNvdXJjZXMKKyAqIEBtb2Q6CWtlcm5lbCBtb2R1bGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXRjaGVkIG9iamVjdAorICogCQkoTlVMTCBmb3Igdm1saW51eCkKKyAqIEBzdGF0ZToJdHJhY2tzIG9iamVjdC1sZXZlbCBwYXRjaCBhcHBsaWNhdGlvbiBzdGF0ZQorICovCitzdHJ1Y3Qga2xwX29iamVjdCB7CisJLyogZXh0ZXJuYWwgKi8KKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBrbHBfcmVsb2MgKnJlbG9jczsKKwlzdHJ1Y3Qga2xwX2Z1bmMgKmZ1bmNzOworCisJLyogaW50ZXJuYWwgKi8KKwlzdHJ1Y3Qga29iamVjdCAqa29iajsKKwlzdHJ1Y3QgbW9kdWxlICptb2Q7CisJZW51bSBrbHBfc3RhdGUgc3RhdGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBrbHBfcGF0Y2ggLSBwYXRjaCBzdHJ1Y3R1cmUgZm9yIGxpdmUgcGF0Y2hpbmcKKyAqIEBtb2Q6CXJlZmVyZW5jZSB0byB0aGUgbGl2ZSBwYXRjaCBtb2R1bGUKKyAqIEBvYmpzOglvYmplY3QgZW50cmllcyBmb3Iga2VybmVsIG9iamVjdHMgdG8gYmUgcGF0Y2hlZAorICogQGxpc3Q6CWxpc3Qgbm9kZSBmb3IgZ2xvYmFsIGxpc3Qgb2YgcmVnaXN0ZXJlZCBwYXRjaGVzCisgKiBAa29iajoJa29iamVjdCBmb3Igc3lzZnMgcmVzb3VyY2VzCisgKiBAc3RhdGU6CXRyYWNrcyBwYXRjaC1sZXZlbCBhcHBsaWNhdGlvbiBzdGF0ZQorICovCitzdHJ1Y3Qga2xwX3BhdGNoIHsKKwkvKiBleHRlcm5hbCAqLworCXN0cnVjdCBtb2R1bGUgKm1vZDsKKwlzdHJ1Y3Qga2xwX29iamVjdCAqb2JqczsKKworCS8qIGludGVybmFsICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBrb2JqZWN0IGtvYmo7CisJZW51bSBrbHBfc3RhdGUgc3RhdGU7Cit9OworCitleHRlcm4gaW50IGtscF9yZWdpc3Rlcl9wYXRjaChzdHJ1Y3Qga2xwX3BhdGNoICopOworZXh0ZXJuIGludCBrbHBfdW5yZWdpc3Rlcl9wYXRjaChzdHJ1Y3Qga2xwX3BhdGNoICopOworZXh0ZXJuIGludCBrbHBfZW5hYmxlX3BhdGNoKHN0cnVjdCBrbHBfcGF0Y2ggKik7CitleHRlcm4gaW50IGtscF9kaXNhYmxlX3BhdGNoKHN0cnVjdCBrbHBfcGF0Y2ggKik7CisKKyNlbmRpZiAvKiBDT05GSUdfTElWRVBBVENIICovCisKKyNlbmRpZiAvKiBfTElOVVhfTElWRVBBVENIX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaCBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCmluZGV4IDdjOTVhZjguLjZjZmQ5MzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oCkBAIC01Miw3ICs1MiwyNyBAQAogCXVuc2lnbmVkIGludCBnZW5lcmF0aW9uOwogfTsKIAorZW51bSBtZW1fY2dyb3VwX2V2ZW50c19pbmRleCB7CisJTUVNX0NHUk9VUF9FVkVOVFNfUEdQR0lOLAkvKiAjIG9mIHBhZ2VzIHBhZ2VkIGluICovCisJTUVNX0NHUk9VUF9FVkVOVFNfUEdQR09VVCwJLyogIyBvZiBwYWdlcyBwYWdlZCBvdXQgKi8KKwlNRU1fQ0dST1VQX0VWRU5UU19QR0ZBVUxULAkvKiAjIG9mIHBhZ2UtZmF1bHRzICovCisJTUVNX0NHUk9VUF9FVkVOVFNfUEdNQUpGQVVMVCwJLyogIyBvZiBtYWpvciBwYWdlLWZhdWx0cyAqLworCU1FTV9DR1JPVVBfRVZFTlRTX05TVEFUUywKKwkvKiBkZWZhdWx0IGhpZXJhcmNoeSBldmVudHMgKi8KKwlNRU1DR19MT1cgPSBNRU1fQ0dST1VQX0VWRU5UU19OU1RBVFMsCisJTUVNQ0dfSElHSCwKKwlNRU1DR19NQVgsCisJTUVNQ0dfT09NLAorCU1FTUNHX05SX0VWRU5UUywKK307CisKICNpZmRlZiBDT05GSUdfTUVNQ0cKK3ZvaWQgbWVtX2Nncm91cF9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAorCQkgICAgICAgZW51bSBtZW1fY2dyb3VwX2V2ZW50c19pbmRleCBpZHgsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgbnIpOworCitib29sIG1lbV9jZ3JvdXBfbG93KHN0cnVjdCBtZW1fY2dyb3VwICpyb290LCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOworCiBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCSAgZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2dwKTsKIHZvaWQgbWVtX2Nncm91cF9jb21taXRfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCkBAIC0xMDIsNiArMTIyLDcgQEAKICAqIEZvciBtZW1vcnkgcmVjbGFpbS4KICAqLwogaW50IG1lbV9jZ3JvdXBfaW5hY3RpdmVfYW5vbl9pc19sb3coc3RydWN0IGxydXZlYyAqbHJ1dmVjKTsKK2Jvb2wgbWVtX2Nncm91cF9scnV2ZWNfb25saW5lKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7CiBpbnQgbWVtX2Nncm91cF9zZWxlY3RfdmljdGltX25vZGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTsKIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9nZXRfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBlbnVtIGxydV9saXN0KTsKIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfbHJ1X3NpemUoc3RydWN0IGxydXZlYyAqLCBlbnVtIGxydV9saXN0LCBpbnQpOwpAQCAtMTM4LDEyICsxNTksMTAgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2JlZ2luX3BhZ2Vfc3RhdChzdHJ1Y3QgcGFnZSAqcGFnZSwgYm9vbCAqbG9ja2VkLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nICpmbGFncyk7Ci12b2lkIG1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZCwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKTsKK3N0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2JlZ2luX3BhZ2Vfc3RhdChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX3BhZ2Vfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkJIGVudW0gbWVtX2Nncm91cF9zdGF0X2luZGV4IGlkeCwgaW50IHZhbCk7Cit2b2lkIG1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9pbmNfcGFnZV9zdGF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQkJICAgIGVudW0gbWVtX2Nncm91cF9zdGF0X2luZGV4IGlkeCkKQEAgLTE3Niw2ICsxOTUsMTggQEAKICNlbHNlIC8qIENPTkZJR19NRU1DRyAqLwogc3RydWN0IG1lbV9jZ3JvdXA7CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCisJCQkJICAgICBlbnVtIG1lbV9jZ3JvdXBfZXZlbnRzX2luZGV4IGlkeCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBucikKK3sKK30KKworc3RhdGljIGlubGluZSBib29sIG1lbV9jZ3JvdXBfbG93KHN0cnVjdCBtZW1fY2dyb3VwICpyb290LAorCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQoreworCXJldHVybiBmYWxzZTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF90cnlfY2hhcmdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAkJCQkJZ2ZwX3QgZ2ZwX21hc2ssCiAJCQkJCXN0cnVjdCBtZW1fY2dyb3VwICoqbWVtY2dwKQpAQCAtMjY4LDYgKzI5OSwxMSBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9scnV2ZWNfb25saW5lKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCiBtZW1fY2dyb3VwX2dldF9scnVfc2l6ZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGVudW0gbHJ1X2xpc3QgbHJ1KQogewpAQCAtMjg1LDE0ICszMjEsMTIgQEAKIHsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9iZWdpbl9wYWdlX3N0YXQoc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkJCWJvb2wgKmxvY2tlZCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2JlZ2luX3BhZ2Vfc3RhdChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJCWJvb2wgKmxvY2tlZCwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCitzdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9lbmRfcGFnZV9zdGF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIHsKIH0KIApAQCAtNDAzLDEwICs0MzcsOSBAQAogc3RydWN0IGttZW1fY2FjaGUgKl9fbWVtY2dfa21lbV9nZXRfY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCk7CiB2b2lkIF9fbWVtY2dfa21lbV9wdXRfY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCk7CiAKLWludCBfX21lbWNnX2NoYXJnZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGdmcCwgaW50IG9yZGVyKTsKLXZvaWQgX19tZW1jZ191bmNoYXJnZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGludCBvcmRlcik7Ci0KLWludCBfX21lbWNnX2NsZWFudXBfY2FjaGVfcGFyYW1zKHN0cnVjdCBrbWVtX2NhY2hlICpzKTsKK2ludCBtZW1jZ19jaGFyZ2Vfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyk7Cit2b2lkIG1lbWNnX3VuY2hhcmdlX2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIAogLyoqCiAgKiBtZW1jZ19rbWVtX25ld3BhZ2VfY2hhcmdlOiB2ZXJpZnkgaWYgYSBuZXcga21lbSBhbGxvY2F0aW9uIGlzIGFsbG93ZWQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9hYng1MDAvYWI4NTAwLWJtLmggYi9pbmNsdWRlL2xpbnV4L21mZC9hYng1MDAvYWI4NTAwLWJtLmgKaW5kZXggY2M4OTJhOC4uMTJhNWIzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvYWJ4NTAwL2FiODUwMC1ibS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL2FieDUwMC9hYjg1MDAtYm0uaApAQCAtNDYxLDcgKzQ2MSw2IEBACiAjaWZkZWYgQ09ORklHX0FCODUwMF9CTQogZXh0ZXJuIHN0cnVjdCBhYng1MDBfYm1fZGF0YSBhYjg1MDBfYm1fZGF0YTsKIAotdm9pZCBhYjg1MDBfZmdfcmVpbml0KHZvaWQpOwogdm9pZCBhYjg1MDBfY2hhcmdlcl91c2Jfc3RhdGVfY2hhbmdlZCh1OCBibV91c2Jfc3RhdGUsIHUxNiBtQSk7CiBzdHJ1Y3QgYWI4NTAwX2J0ZW1wICphYjg1MDBfYnRlbXBfZ2V0KHZvaWQpOwogaW50IGFiODUwMF9idGVtcF9nZXRfYmF0Y3RybF90ZW1wKHN0cnVjdCBhYjg1MDBfYnRlbXAgKmJ0ZW1wKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL21heDc3NjkzLXByaXZhdGUuaCBiL2luY2x1ZGUvbGludXgvbWZkL21heDc3NjkzLXByaXZhdGUuaAppbmRleCAwOGRhZTAxLi45NTVkZDk5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9tYXg3NzY5My1wcml2YXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvbWF4Nzc2OTMtcHJpdmF0ZS5oCkBAIC0xNDMsMTAgKzE0MywxMTggQEAKICNkZWZpbmUgRkxBU0hfSU5UX0ZMRUQxX1NIT1JUCUJJVCgzKQogI2RlZmluZSBGTEFTSF9JTlRfT1ZFUl9DVVJSRU5UCUJJVCg0KQogCisvKiBGYXN0IGNoYXJnZSB0aW1lciBpbiBpbiBob3VycyAqLworI2RlZmluZSBERUZBVUxUX0ZBU1RfQ0hBUkdFX1RJTUVSCQk0CisvKiBtaWNyb2FtcHMgKi8KKyNkZWZpbmUgREVGQVVMVF9UT1BfT0ZGX1RIUkVTSE9MRF9DVVJSRU5UCTE1MDAwMAorLyogbWludXRlcyAqLworI2RlZmluZSBERUZBVUxUX1RPUF9PRkZfVElNRVIJCQkzMAorLyogbWljcm92b2x0cyAqLworI2RlZmluZSBERUZBVUxUX0NPTlNUQU5UX1ZPTFQJCQk0MjAwMDAwCisvKiBtaWNyb3ZvbHRzICovCisjZGVmaW5lIERFRkFVTFRfTUlOX1NZU1RFTV9WT0xUCQkJMzYwMDAwMAorLyogY2Vsc2l1cyAqLworI2RlZmluZSBERUZBVUxUX1RIRVJNQUxfUkVHVUxBVElPTl9URU1QCQkxMDAKKy8qIG1pY3JvYW1wcyAqLworI2RlZmluZSBERUZBVUxUX0JBVFRFUllfT1ZFUkNVUlJFTlQJCTM1MDAwMDAKKy8qIG1pY3Jvdm9sdHMgKi8KKyNkZWZpbmUgREVGQVVMVF9DSEFSR0VSX0lOUFVUX1RIUkVTSE9MRF9WT0xUCTQzMDAwMDAKKworLyogTUFYNzc2OTNfQ0hHX1JFR19DSEdfSU5UX09LIHJlZ2lzdGVyICovCisjZGVmaW5lIENIR19JTlRfT0tfQllQX1NISUZUCQkwCisjZGVmaW5lIENIR19JTlRfT0tfQkFUX1NISUZUCQkzCisjZGVmaW5lIENIR19JTlRfT0tfQ0hHX1NISUZUCQk0CisjZGVmaW5lIENIR19JTlRfT0tfQ0hHSU5fU0hJRlQJCTYKKyNkZWZpbmUgQ0hHX0lOVF9PS19ERVRCQVRfU0hJRlQJCTcKKyNkZWZpbmUgQ0hHX0lOVF9PS19CWVBfTUFTSwkJQklUKENIR19JTlRfT0tfQllQX1NISUZUKQorI2RlZmluZSBDSEdfSU5UX09LX0JBVF9NQVNLCQlCSVQoQ0hHX0lOVF9PS19CQVRfU0hJRlQpCisjZGVmaW5lIENIR19JTlRfT0tfQ0hHX01BU0sJCUJJVChDSEdfSU5UX09LX0NIR19TSElGVCkKKyNkZWZpbmUgQ0hHX0lOVF9PS19DSEdJTl9NQVNLCQlCSVQoQ0hHX0lOVF9PS19DSEdJTl9TSElGVCkKKyNkZWZpbmUgQ0hHX0lOVF9PS19ERVRCQVRfTUFTSwkJQklUKENIR19JTlRfT0tfREVUQkFUX1NISUZUKQorCisvKiBNQVg3NzY5M19DSEdfUkVHX0NIR19ERVRBSUxTXzAwIHJlZ2lzdGVyICovCisjZGVmaW5lIENIR19ERVRBSUxTXzAwX0NIR0lOX1NISUZUCTUKKyNkZWZpbmUgQ0hHX0RFVEFJTFNfMDBfQ0hHSU5fTUFTSwkoMHgzIDw8IENIR19ERVRBSUxTXzAwX0NIR0lOX1NISUZUKQorCisvKiBNQVg3NzY5M19DSEdfUkVHX0NIR19ERVRBSUxTXzAxIHJlZ2lzdGVyICovCisjZGVmaW5lIENIR19ERVRBSUxTXzAxX0NIR19TSElGVAkwCisjZGVmaW5lIENIR19ERVRBSUxTXzAxX0JBVF9TSElGVAk0CisjZGVmaW5lIENIR19ERVRBSUxTXzAxX1RSRUdfU0hJRlQJNworI2RlZmluZSBDSEdfREVUQUlMU18wMV9DSEdfTUFTSwkJKDB4ZiA8PCBDSEdfREVUQUlMU18wMV9DSEdfU0hJRlQpCisjZGVmaW5lIENIR19ERVRBSUxTXzAxX0JBVF9NQVNLCQkoMHg3IDw8IENIR19ERVRBSUxTXzAxX0JBVF9TSElGVCkKKyNkZWZpbmUgQ0hHX0RFVEFJTFNfMDFfVFJFR19NQVNLCUJJVCg3KQorCisvKiBNQVg3NzY5M19DSEdfUkVHX0NIR19ERVRBSUxTXzAxL0NIRyBmaWVsZCAqLworZW51bSBtYXg3NzY5M19jaGFyZ2VyX2NoYXJnaW5nX3N0YXRlIHsKKwlNQVg3NzY5M19DSEFSR0lOR19QUkVRVUFMSUZJQ0FUSU9OCT0gMHgwLAorCU1BWDc3NjkzX0NIQVJHSU5HX0ZBU1RfQ09OU1RfQ1VSUkVOVCwKKwlNQVg3NzY5M19DSEFSR0lOR19GQVNUX0NPTlNUX1ZPTFRBR0UsCisJTUFYNzc2OTNfQ0hBUkdJTkdfVE9QX09GRiwKKwlNQVg3NzY5M19DSEFSR0lOR19ET05FLAorCU1BWDc3NjkzX0NIQVJHSU5HX0hJR0hfVEVNUCwKKwlNQVg3NzY5M19DSEFSR0lOR19USU1FUl9FWFBJUkVELAorCU1BWDc3NjkzX0NIQVJHSU5HX1RIRVJNSVNUT1JfU1VTUEVORCwKKwlNQVg3NzY5M19DSEFSR0lOR19PRkYsCisJTUFYNzc2OTNfQ0hBUkdJTkdfUkVTRVJWRUQsCisJTUFYNzc2OTNfQ0hBUkdJTkdfT1ZFUl9URU1QLAorCU1BWDc3NjkzX0NIQVJHSU5HX1dBVENIRE9HX0VYUElSRUQsCit9OworCisvKiBNQVg3NzY5M19DSEdfUkVHX0NIR19ERVRBSUxTXzAxL0JBVCBmaWVsZCAqLworZW51bSBtYXg3NzY5M19jaGFyZ2VyX2JhdHRlcnlfc3RhdGUgeworCU1BWDc3NjkzX0JBVFRFUllfTk9CQVQJCQk9IDB4MCwKKwkvKiBEZWFkLWJhdHRlcnkgb3IgbG93LWJhdHRlcnkgcHJlcXVhbGlmaWNhdGlvbiAqLworCU1BWDc3NjkzX0JBVFRFUllfUFJFUVVBTElGSUNBVElPTiwKKwlNQVg3NzY5M19CQVRURVJZX1RJTUVSX0VYUElSRUQsCisJTUFYNzc2OTNfQkFUVEVSWV9HT09ELAorCU1BWDc3NjkzX0JBVFRFUllfTE9XVk9MVEFHRSwKKwlNQVg3NzY5M19CQVRURVJZX09WRVJWT0xUQUdFLAorCU1BWDc3NjkzX0JBVFRFUllfT1ZFUkNVUlJFTlQsCisJTUFYNzc2OTNfQkFUVEVSWV9SRVNFUlZFRCwKK307CisKKy8qIE1BWDc3NjkzX0NIR19SRUdfQ0hHX0RFVEFJTFNfMDIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0hHX0RFVEFJTFNfMDJfQllQX1NISUZUCTAKKyNkZWZpbmUgQ0hHX0RFVEFJTFNfMDJfQllQX01BU0sJCSgweGYgPDwgQ0hHX0RFVEFJTFNfMDJfQllQX1NISUZUKQorCiAvKiBNQVg3NzY5MyBDSEdfQ05GR18wMCByZWdpc3RlciAqLwogI2RlZmluZSBDSEdfQ05GR18wMF9DSEdfTUFTSwkJMHgxCiAjZGVmaW5lIENIR19DTkZHXzAwX0JVQ0tfTUFTSwkJMHg0CiAKKy8qIE1BWDc3NjkzX0NIR19SRUdfQ0hHX0NORkdfMDEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0hHX0NORkdfMDFfRkNIR1RJTUVfU0hJRlQJMAorI2RlZmluZSBDSEdfQ05GR18wMV9DSEdSU1RSVF9TSElGVAk0CisjZGVmaW5lIENIR19DTkZHXzAxX1BRRU5fU0hJRlQJCTcKKyNkZWZpbmUgQ0hHX0NORkdfMDFfRkNIR1RJTUVfTUFTSwkoMHg3IDw8IENIR19DTkZHXzAxX0ZDSEdUSU1FX1NISUZUKQorI2RlZmluZSBDSEdfQ05GR18wMV9DSEdSU1RSVF9NQVNLCSgweDMgPDwgQ0hHX0NORkdfMDFfQ0hHUlNUUlRfU0hJRlQpCisjZGVmaW5lIENIR19DTkZHXzAxX1BRRU5fTUFLUwkJQklUKENIR19DTkZHXzAxX1BRRU5fU0hJRlQpCisKKy8qIE1BWDc3NjkzX0NIR19SRUdfQ0hHX0NORkdfMDMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0hHX0NORkdfMDNfVE9JVEhfU0hJRlQJCTAKKyNkZWZpbmUgQ0hHX0NORkdfMDNfVE9USU1FX1NISUZUCTMKKyNkZWZpbmUgQ0hHX0NORkdfMDNfVE9JVEhfTUFTSwkJKDB4NyA8PCBDSEdfQ05GR18wM19UT0lUSF9TSElGVCkKKyNkZWZpbmUgQ0hHX0NORkdfMDNfVE9USU1FX01BU0sJCSgweDcgPDwgQ0hHX0NORkdfMDNfVE9USU1FX1NISUZUKQorCisvKiBNQVg3NzY5M19DSEdfUkVHX0NIR19DTkZHXzA0IHJlZ2lzdGVyICovCisjZGVmaW5lIENIR19DTkZHXzA0X0NIR0NWUFJNX1NISUZUCTAKKyNkZWZpbmUgQ0hHX0NORkdfMDRfTUlOVlNZU19TSElGVAk1CisjZGVmaW5lIENIR19DTkZHXzA0X0NIR0NWUFJNX01BU0sJKDB4MWYgPDwgQ0hHX0NORkdfMDRfQ0hHQ1ZQUk1fU0hJRlQpCisjZGVmaW5lIENIR19DTkZHXzA0X01JTlZTWVNfTUFTSwkoMHg3IDw8IENIR19DTkZHXzA0X01JTlZTWVNfU0hJRlQpCisKKy8qIE1BWDc3NjkzX0NIR19SRUdfQ0hHX0NORkdfMDYgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0hHX0NORkdfMDZfQ0hHUFJPVF9TSElGVAkyCisjZGVmaW5lIENIR19DTkZHXzA2X0NIR1BST1RfTUFTSwkoMHgzIDw8IENIR19DTkZHXzA2X0NIR1BST1RfU0hJRlQpCisKKy8qIE1BWDc3NjkzX0NIR19SRUdfQ0hHX0NORkdfMDcgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0hHX0NORkdfMDdfUkVHVEVNUF9TSElGVAk1CisjZGVmaW5lIENIR19DTkZHXzA3X1JFR1RFTVBfTUFTSwkoMHgzIDw8IENIR19DTkZHXzA3X1JFR1RFTVBfU0hJRlQpCisKKy8qIE1BWDc3NjkzX0NIR19SRUdfQ0hHX0NORkdfMTIgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgQ0hHX0NORkdfMTJfQjJTT1ZSQ19TSElGVAkwCisjZGVmaW5lIENIR19DTkZHXzEyX1ZDSEdJTlJFR19TSElGVAkzCisjZGVmaW5lIENIR19DTkZHXzEyX0IyU09WUkNfTUFTSwkoMHg3IDw8IENIR19DTkZHXzEyX0IyU09WUkNfU0hJRlQpCisjZGVmaW5lIENIR19DTkZHXzEyX1ZDSEdJTlJFR19NQVNLCSgweDMgPDwgQ0hHX0NORkdfMTJfVkNIR0lOUkVHX1NISUZUKQorCiAvKiBNQVg3NzY5MyBDSEdfQ05GR18wOSBSZWdpc3RlciAqLwogI2RlZmluZSBDSEdfQ05GR18wOV9DSEdJTl9JTElNX01BU0sJMHg3RgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9zYW1zdW5nL3MybXBzMTMuaCBiL2luY2x1ZGUvbGludXgvbWZkL3NhbXN1bmcvczJtcHMxMy5oCmluZGV4IGNlNWRkYTguLmIxZmQ2NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3NhbXN1bmcvczJtcHMxMy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3NhbXN1bmcvczJtcHMxMy5oCkBAIC01OSw2ICs1OSw3IEBACiAJUzJNUFMxM19SRUdfQjZDVFJMLAogCVMyTVBTMTNfUkVHX0I2T1VULAogCVMyTVBTMTNfUkVHX0I3Q1RSTCwKKwlTMk1QUzEzX1JFR19CN1NXLAogCVMyTVBTMTNfUkVHX0I3T1VULAogCVMyTVBTMTNfUkVHX0I4Q1RSTCwKIAlTMk1QUzEzX1JFR19COE9VVCwKQEAgLTEwMiw2ICsxMDMsNyBAQAogCVMyTVBTMTNfUkVHX0wyNkNUUkwsCiAJUzJNUFMxM19SRUdfTDI3Q1RSTCwKIAlTMk1QUzEzX1JFR19MMjhDVFJMLAorCVMyTVBTMTNfUkVHX0wyOUNUUkwsCiAJUzJNUFMxM19SRUdfTDMwQ1RSTCwKIAlTMk1QUzEzX1JFR19MMzFDVFJMLAogCVMyTVBTMTNfUkVHX0wzMkNUUkwsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC9zdG1wZS5oIGIvaW5jbHVkZS9saW51eC9tZmQvc3RtcGUuaAppbmRleCBmNzQyYjY3Li5jOWQ4NjkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9zdG1wZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3N0bXBlLmgKQEAgLTExOCwyMCArMTE4LDYgQEAKICNkZWZpbmUgU1RNUEVfR1BJT19OT1JFUV84MTFfVE9VQ0gJKDB4ZjApCiAKIC8qKgotICogc3RydWN0IHN0bXBlX2dwaW9fcGxhdGZvcm1fZGF0YSAtIFNUTVBFIEdQSU8gcGxhdGZvcm0gZGF0YQotICogQG5vcmVxdWVzdF9tYXNrOiBiaXRtYXNrIHNwZWNpZnlpbmcgd2hpY2ggR1BJT3Mgc2hvdWxkIF9ub3RfIGJlCi0gKgkJICAgIHJlcXVlc3RhYmxlIGR1ZSB0byBkaWZmZXJlbnQgdXNhZ2UgKGUuZy4gdG91Y2gsIGtleXBhZCkKLSAqCQkgICAgU1RNUEVfR1BJT19OT1JFUV8qIG1hY3JvcyBjYW4gYmUgdXNlZCBoZXJlLgotICogQHNldHVwOiBib2FyZCBzcGVjaWZpYyBzZXR1cCBjYWxsYmFjay4KLSAqIEByZW1vdmU6IGJvYXJkIHNwZWNpZmljIHJlbW92ZSBjYWxsYmFjawotICovCi1zdHJ1Y3Qgc3RtcGVfZ3Bpb19wbGF0Zm9ybV9kYXRhIHsKLQl1bnNpZ25lZCBub3JlcXVlc3RfbWFzazsKLQl2b2lkICgqc2V0dXApKHN0cnVjdCBzdG1wZSAqc3RtcGUsIHVuc2lnbmVkIGdwaW9fYmFzZSk7Ci0Jdm9pZCAoKnJlbW92ZSkoc3RydWN0IHN0bXBlICpzdG1wZSwgdW5zaWduZWQgZ3Bpb19iYXNlKTsKLX07Ci0KLS8qKgogICogc3RydWN0IHN0bXBlX3RzX3BsYXRmb3JtX2RhdGEgLSBzdG1wZTgxMSB0b3VjaCBzY3JlZW4gY29udHJvbGxlciBwbGF0Zm9ybQogICogZGF0YQogICogQHNhbXBsZV90aW1lOiBBREMgY29udmVyc3Rpb24gdGltZSBpbiBudW1iZXIgb2YgY2xvY2suCkBAIC0xODIsNyArMTY4LDYgQEAKICAqIEBpcnFfb3Zlcl9ncGlvOiB0cnVlIGlmIGdwaW8gaXMgdXNlZCB0byBnZXQgaXJxCiAgKiBAaXJxX2dwaW86IGdwaW8gbnVtYmVyIG92ZXIgd2hpY2ggaXJxIHdpbGwgYmUgcmVxdWVzdGVkIChzaWduaWZpY2FudCBvbmx5IGlmCiAgKgkgICAgICBpcnFfb3Zlcl9ncGlvIGlzIHRydWUpCi0gKiBAZ3BpbzogR1BJTy1zcGVjaWZpYyBwbGF0Zm9ybSBkYXRhCiAgKiBAdHM6IHRvdWNoc2NyZWVuLXNwZWNpZmljIHBsYXRmb3JtIGRhdGEKICAqLwogc3RydWN0IHN0bXBlX3BsYXRmb3JtX2RhdGEgewpAQCAtMTk0LDcgKzE3OSw2IEBACiAJaW50IGlycV9ncGlvOwogCWludCBhdXRvc2xlZXBfdGltZW91dDsKIAotCXN0cnVjdCBzdG1wZV9ncGlvX3BsYXRmb3JtX2RhdGEgKmdwaW87CiAJc3RydWN0IHN0bXBlX3RzX3BsYXRmb3JtX2RhdGEgKnRzOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvdGMzNTg5eC5oIGIvaW5jbHVkZS9saW51eC9tZmQvdGMzNTg5eC5oCmluZGV4IGUxYzEyZDguLmMyMDNjOWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWZkL3RjMzU4OXguaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC90YzM1ODl4LmgKQEAgLTE2MywyNCArMTYzLDEyIEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCB0YzM1ODl4X2dwaW9fcGxhdGZvcm1fZGF0YSAtIFRDMzU4OXggR1BJTyBwbGF0Zm9ybSBkYXRhCi0gKiBAc2V0dXA6IGNhbGxiYWNrIGZvciBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbgotICogQHJlbW92ZTogY2FsbGJhY2sgZm9yIGJvYXJkLXNwZWNpZmljIHRlYXJkb3duCi0gKi8KLXN0cnVjdCB0YzM1ODl4X2dwaW9fcGxhdGZvcm1fZGF0YSB7Ci0Jdm9pZCAoKnNldHVwKShzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCwgdW5zaWduZWQgZ3Bpb19iYXNlKTsKLQl2b2lkICgqcmVtb3ZlKShzdHJ1Y3QgdGMzNTg5eCAqdGMzNTg5eCwgdW5zaWduZWQgZ3Bpb19iYXNlKTsKLX07Ci0KLS8qKgogICogc3RydWN0IHRjMzU4OXhfcGxhdGZvcm1fZGF0YSAtIFRDMzU4OXggcGxhdGZvcm0gZGF0YQogICogQGJsb2NrOiBiaXRtYXNrIG9mIGJsb2NrcyB0byBlbmFibGUgKHVzZSBUQzM1ODl4X0JMT0NLXyopCi0gKiBAZ3BpbzogR1BJTy1zcGVjaWZpYyBwbGF0Zm9ybSBkYXRhCiAgKiBAa2V5cGFkOiBrZXlwYWQtc3BlY2lmaWMgcGxhdGZvcm0gZGF0YQogICovCiBzdHJ1Y3QgdGMzNTg5eF9wbGF0Zm9ybV9kYXRhIHsKIAl1bnNpZ25lZCBpbnQgYmxvY2s7Ci0Jc3RydWN0IHRjMzU4OXhfZ3Bpb19wbGF0Zm9ybV9kYXRhICpncGlvOwogCWNvbnN0IHN0cnVjdCB0YzM1ODl4X2tleXBhZF9wbGF0Zm9ybV9kYXRhICprZXlwYWQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90aV9hbTMzNXhfdHNjYWRjLmggYi9pbmNsdWRlL2xpbnV4L21mZC90aV9hbTMzNXhfdHNjYWRjLmgKaW5kZXggZTJlNzAwNS4uM2Y0ZTk5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvdGlfYW0zMzV4X3RzY2FkYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3RpX2FtMzM1eF90c2NhZGMuaApAQCAtNTIsNiArNTIsNyBAQAogCiAvKiBJUlEgZW5hYmxlICovCiAjZGVmaW5lIElSUUVOQl9IV19QRU4JCUJJVCgwKQorI2RlZmluZSBJUlFFTkJfRU9TCQlCSVQoMSkKICNkZWZpbmUgSVJRRU5CX0ZJRk8wVEhSRVMJQklUKDIpCiAjZGVmaW5lIElSUUVOQl9GSUZPME9WUlJVTglCSVQoMykKICNkZWZpbmUgSVJRRU5CX0ZJRk8wVU5EUkZMVwlCSVQoNCkKQEAgLTEwNyw3ICsxMDgsNyBAQAogLyogQ2hhcmdlIGRlbGF5ICovCiAjZGVmaW5lIENIQVJHRURMWV9PUEVOX01BU0sJKDB4M0ZGRkYgPDwgMCkKICNkZWZpbmUgQ0hBUkdFRExZX09QRU4odmFsKQkoKHZhbCkgPDwgMCkKLSNkZWZpbmUgQ0hBUkdFRExZX09QRU5ETFkJQ0hBUkdFRExZX09QRU4oMSkKKyNkZWZpbmUgQ0hBUkdFRExZX09QRU5ETFkJQ0hBUkdFRExZX09QRU4oMHg0MDApCiAKIC8qIENvbnRyb2wgcmVnaXN0ZXIgKi8KICNkZWZpbmUgQ05UUkxSRUdfVFNDU1NFTkIJQklUKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC90bWlvLmggYi9pbmNsdWRlL2xpbnV4L21mZC90bWlvLmgKaW5kZXggNTczODgxNy4uNjA1ODEyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvdG1pby5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3RtaW8uaApAQCAtOTYsMTEgKzk2LDYgQEAKICNkZWZpbmUgVE1JT19NTUNfU0RJT19TVEFUVVNfUVVJUksJKDEgPDwgOCkKIAogLyoKLSAqIFNvbWUgY29udHJvbGxlcnMgaGF2ZSBETUEgZW5hYmxlL2Rpc2FibGUgcmVnaXN0ZXIKLSAqLwotI2RlZmluZSBUTUlPX01NQ19IQVZFX0NUTF9ETUFfUkVHCSgxIDw8IDkpCi0KLS8qCiAgKiBTb21lIGNvbnRyb2xsZXJzIGFsbG93cyB0byBzZXQgU0R4IGFjdHVhbCBjbG9jawogICovCiAjZGVmaW5lIFRNSU9fTU1DX0NMS19BQ1RVQUwJCSgxIDw8IDEwKQpAQCAtMTEyLDE4ICsxMDcsNiBAQAogCiBzdHJ1Y3QgZG1hX2NoYW47CiAKLXN0cnVjdCB0bWlvX21tY19kbWEgewotCXZvaWQgKmNoYW5fcHJpdl90eDsKLQl2b2lkICpjaGFuX3ByaXZfcng7Ci0JaW50IHNsYXZlX2lkX3R4OwotCWludCBzbGF2ZV9pZF9yeDsKLQlpbnQgYWxpZ25tZW50X3NoaWZ0OwotCWRtYV9hZGRyX3QgZG1hX3J4X29mZnNldDsKLQlib29sICgqZmlsdGVyKShzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHZvaWQgKmFyZyk7Ci19OwotCi1zdHJ1Y3QgdG1pb19tbWNfaG9zdDsKLQogLyoKICAqIGRhdGEgZm9yIHRoZSBNTUMgY29udHJvbGxlcgogICovCkBAIC0xMzIsMTkgKzExNSwxMiBAQAogCXVuc2lnbmVkIGxvbmcJCQljYXBhYmlsaXRpZXM7CiAJdW5zaWduZWQgbG9uZwkJCWNhcGFiaWxpdGllczI7CiAJdW5zaWduZWQgbG9uZwkJCWZsYWdzOwotCXVuc2lnbmVkIGxvbmcJCQlidXNfc2hpZnQ7CiAJdTMyCQkJCW9jcl9tYXNrOwkvKiBhdmFpbGFibGUgdm9sdGFnZXMgKi8KLQlzdHJ1Y3QgdG1pb19tbWNfZG1hCQkqZG1hOwotCXN0cnVjdCBkZXZpY2UJCQkqZGV2OwogCXVuc2lnbmVkIGludAkJCWNkX2dwaW87CisJaW50CQkJCWFsaWdubWVudF9zaGlmdDsKKwlkbWFfYWRkcl90CQkJZG1hX3J4X29mZnNldDsKIAl2b2lkICgqc2V0X3B3cikoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaG9zdCwgaW50IHN0YXRlKTsKIAl2b2lkICgqc2V0X2Nsa19kaXYpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmhvc3QsIGludCBzdGF0ZSk7Ci0JaW50ICgqd3JpdGUxNl9ob29rKShzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCwgaW50IGFkZHIpOwotCS8qIGNsb2NrIG1hbmFnZW1lbnQgY2FsbGJhY2tzICovCi0JaW50ICgqY2xrX2VuYWJsZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdW5zaWduZWQgaW50ICpmKTsKLQl2b2lkICgqY2xrX2Rpc2FibGUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotCWludCAoKm11bHRpX2lvX3F1aXJrKShzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLCBpbnQgYmxrX3NpemUpOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9jbWQuaAppbmRleCA2NGQyNTk0Li43YjZkNGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21seDQvY21kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbHg0L2NtZC5oCkBAIC03MSw2ICs3MSw3IEBACiAKIAkvKm1hc3RlciBub3RpZnkgZncgb24gZmluaXNoIGZvciBzbGF2ZSdzIGZsciovCiAJTUxYNF9DTURfSU5GT1JNX0ZMUl9ET05FID0gMHg1YiwKKwlNTFg0X0NNRF9WSVJUX1BPUlRfTUFQICAgPSAweDVjLAogCU1MWDRfQ01EX0dFVF9PUF9SRVEgICAgICA9IDB4NTksCiAKIAkvKiBUUFQgY29tbWFuZHMgKi8KQEAgLTE2NSw5ICsxNjYsMTUgQEAKIH07CiAKIGVudW0gewotCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQQk9IDEwMDAwLAotCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQgk9IDEwMDAwLAotCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQwk9IDEwMDAwLAorCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQQk9IDYwMDAwLAorCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQgk9IDYwMDAwLAorCU1MWDRfQ01EX1RJTUVfQ0xBU1NfQwk9IDYwMDAwLAorfTsKKworZW51bSB7CisJLyogdmlydHVhbCB0byBwaHlzaWNhbCBwb3J0IG1hcHBpbmcgb3Bjb2RlIG1vZGlmaWVycyAqLworCU1MWDRfR0VUX1BPUlRfVklSVDJQSFkgPSAweDAsCisJTUxYNF9TRVRfUE9SVF9WSVJUMlBIWSA9IDB4MSwKIH07CiAKIGVudW0gewpAQCAtMjc5LDYgKzI4Niw4IEBACiBpbnQgbWx4NF9zZXRfdmZfbGlua19zdGF0ZShzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHBvcnQsIGludCB2ZiwgaW50IGxpbmtfc3RhdGUpOwogaW50IG1seDRfY29uZmlnX2Rldl9yZXRyaWV2YWwoc3RydWN0IG1seDRfZGV2ICpkZXYsCiAJCQkgICAgICBzdHJ1Y3QgbWx4NF9jb25maWdfZGV2X3BhcmFtcyAqcGFyYW1zKTsKK3ZvaWQgbWx4NF9jbWRfd2FrZV9jb21wbGV0aW9ucyhzdHJ1Y3QgbWx4NF9kZXYgKmRldik7Cit2b2lkIG1seDRfcmVwb3J0X2ludGVybmFsX2Vycl9jb21tX2V2ZW50KHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIC8qCiAgKiBtbHg0X2dldF9zbGF2ZV9kZWZhdWx0X3ZsYW4gLQogICogcmV0dXJuIHRydWUgaWYgVlNUICggZGVmYXVsdCB2bGFuKQpAQCAtMjg4LDUgKzI5Nyw2IEBACiAJCQkJIHUxNiAqdmxhbiwgdTggKnFvcyk7CiAKICNkZWZpbmUgTUxYNF9DT01NX0dFVF9JRl9SRVYoY21kX2NoYW5fdmVyKSAodTgpKChjbWRfY2hhbl92ZXIpID4+IDgpCisjZGVmaW5lIENPTU1fQ0hBTl9FVkVOVF9JTlRFUk5BTF9FUlIgKDEgPDwgMTcpCiAKICNlbmRpZiAvKiBNTFg0X0NNRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L21seDQvZGV2aWNlLmgKaW5kZXggMjVjNzkxZS4uZTRlYmZmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbHg0L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWx4NC9kZXZpY2UuaApAQCAtNDIsNyArNDIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVjb3VudGVyLmg+CiAKICNkZWZpbmUgTUFYX01TSVhfUF9QT1JUCQkxNwogI2RlZmluZSBNQVhfTVNJWAkJNjQKQEAgLTcwLDYgKzcwLDcgQEAKIAlNTFg0X0ZMQUdfU0xBVkUJCT0gMSA8PCAzLAogCU1MWDRfRkxBR19TUklPVgkJPSAxIDw8IDQsCiAJTUxYNF9GTEFHX09MRF9SRUdfTUFDCT0gMSA8PCA2LAorCU1MWDRfRkxBR19CT05ERUQJPSAxIDw8IDcKIH07CiAKIGVudW0gewpAQCAtOTcsNyArOTgsNyBAQAogCU1MWDRfTUFYX05VTV9QRgkJPSAxNiwKIAlNTFg0X01BWF9OVU1fVkYJCT0gMTI2LAogCU1MWDRfTUFYX05VTV9WRl9QX1BPUlQgID0gNjQsCi0JTUxYNF9NRlVOQ19NQVgJCT0gODAsCisJTUxYNF9NRlVOQ19NQVgJCT0gMTI4LAogCU1MWDRfTUFYX0VRX05VTQkJPSAxMDI0LAogCU1MWDRfTUZVTkNfRVFfTlVNCT0gNCwKIAlNTFg0X01GVU5DX01BWF9FUUVTICAgICA9IDgsCkBAIC0yMDAsNyArMjAxLDkgQEAKIAlNTFg0X0RFVl9DQVBfRkxBRzJfQ09ORklHX0RFVgkJPSAxTEwgPDwgIDE2LAogCU1MWDRfREVWX0NBUF9GTEFHMl9TWVNfRVFTCQk9IDFMTCA8PCAgMTcsCiAJTUxYNF9ERVZfQ0FQX0ZMQUcyXzgwX1ZGUwkJPSAxTEwgPDwgIDE4LAotCU1MWDRfREVWX0NBUF9GTEFHMl9GU19BMAkJPSAxTEwgPDwgIDE5CisJTUxYNF9ERVZfQ0FQX0ZMQUcyX0ZTX0EwCQk9IDFMTCA8PCAgMTksCisJTUxYNF9ERVZfQ0FQX0ZMQUcyX1JFQ09WRVJBQkxFX0VSUk9SX0VWRU5UID0gMUxMIDw8IDIwLAorCU1MWDRfREVWX0NBUF9GTEFHMl9QT1JUX1JFTUFQCQk9IDFMTCA8PCAgMjEKIH07CiAKIGVudW0gewpAQCAtMjA4LDYgKzIxMSwxMCBAQAogCU1MWDRfUVVFUllfRlVOQ19GTEFHU19BMF9SRVNfUVAJCT0gMUxMIDw8IDEKIH07CiAKK2VudW0geworCU1MWDRfVkZfQ0FQX0ZMQUdfUkVTRVQJCQk9IDEgPDwgMAorfTsKKwogLyogYml0IGVudW1zIGZvciBhbiA4LWJpdCBmbGFncyBmaWVsZCBpbmRpY2F0aW5nIHNwZWNpYWwgdXNlCiAgKiBRUHMgd2hpY2ggcmVxdWlyZSBzcGVjaWFsIGhhbmRsaW5nIGluIHFwX3Jlc2VydmVfcmFuZ2UuCiAgKiBDdXJyZW50bHksIHRoaXMgb25seSBpbmNsdWRlcyBRUHMgdXNlZCBieSB0aGUgRVRIIGludGVyZmFjZSwKQEAgLTI0OCw5ICsyNTUsMTQgQEAKIAlNTFg0X0JNTUVfRkxBR19UWVBFXzJfV0lOCT0gMSA8PCAgOSwKIAlNTFg0X0JNTUVfRkxBR19SRVNFUlZFRF9MS0VZCT0gMSA8PCAxMCwKIAlNTFg0X0JNTUVfRkxBR19GQVNUX1JFR19XUgk9IDEgPDwgMTEsCisJTUxYNF9CTU1FX0ZMQUdfUE9SVF9SRU1BUAk9IDEgPDwgMjQsCiAJTUxYNF9CTU1FX0ZMQUdfVlNEX0lOSVQyUlRSCT0gMSA8PCAyOCwKIH07CiAKK2VudW0geworCU1MWDRfRkxBR19QT1JUX1JFTUFQCQk9IE1MWDRfQk1NRV9GTEFHX1BPUlRfUkVNQVAKK307CisKIGVudW0gbWx4NF9ldmVudCB7CiAJTUxYNF9FVkVOVF9UWVBFX0NPTVAJCSAgID0gMHgwMCwKIAlNTFg0X0VWRU5UX1RZUEVfUEFUSF9NSUcJICAgPSAweDAxLApAQCAtMjc2LDYgKzI4OCw3IEBACiAJTUxYNF9FVkVOVF9UWVBFX0ZBVEFMX1dBUk5JTkcJICAgPSAweDFiLAogCU1MWDRfRVZFTlRfVFlQRV9GTFJfRVZFTlQJICAgPSAweDFjLAogCU1MWDRfRVZFTlRfVFlQRV9QT1JUX01OR19DSEdfRVZFTlQgPSAweDFkLAorCU1MWDRfRVZFTlRfVFlQRV9SRUNPVkVSQUJMRV9FUlJPUl9FVkVOVCAgPSAweDNlLAogCU1MWDRfRVZFTlRfVFlQRV9OT05FCQkgICA9IDB4ZmYsCiB9OwogCkBAIC0yODUsNiArMjk4LDExIEBACiB9OwogCiBlbnVtIHsKKwlNTFg0X1JFQ09WRVJBQkxFX0VSUk9SX0VWRU5UX1NVQlRZUEVfQkFEX0NBQkxFCQk9IDEsCisJTUxYNF9SRUNPVkVSQUJMRV9FUlJPUl9FVkVOVF9TVUJUWVBFX1VOU1VQUE9SVEVEX0NBQkxFCT0gMiwKK307CisKK2VudW0gewogCU1MWDRfRkFUQUxfV0FSTklOR19TVUJUWVBFX1dBUk1JTkcgPSAwLAogfTsKIApAQCAtNDExLDYgKzQyOSwxNiBAQAogCU1MWDRfRVFfUE9SVF9JTkZPX01TVFJfU01fU0xfQ0hBTkdFX01BU0sJPSAxIDw8IDQsCiB9OwogCitlbnVtIHsKKwlNTFg0X0RFVklDRV9TVEFURV9VUAkJCT0gMSA8PCAwLAorCU1MWDRfREVWSUNFX1NUQVRFX0lOVEVSTkFMX0VSUk9SCT0gMSA8PCAxLAorfTsKKworZW51bSB7CisJTUxYNF9JTlRFUkZBQ0VfU1RBVEVfVVAJCT0gMSA8PCAwLAorCU1MWDRfSU5URVJGQUNFX1NUQVRFX0RFTEVUSU9OCT0gMSA8PCAxLAorfTsKKwogI2RlZmluZSBNU1RSX1NNX0NIQU5HRV9NQVNLIChNTFg0X0VRX1BPUlRfSU5GT19NU1RSX1NNX1NMX0NIQU5HRV9NQVNLIHwgXAogCQkJICAgICBNTFg0X0VRX1BPUlRfSU5GT19NU1RSX1NNX0xJRF9DSEFOR0VfTUFTSykKIApAQCAtNTM1LDYgKzU2Myw3IEBACiAJdTgJCQlhbGxvY19yZXNfcXBfbWFzazsKIAl1MzIJCQlkbWZzX2hpZ2hfcmF0ZV9xcG5fYmFzZTsKIAl1MzIJCQlkbWZzX2hpZ2hfcmF0ZV9xcG5fcmFuZ2U7CisJdTMyCQkJdmZfY2FwczsKIH07CiAKIHN0cnVjdCBtbHg0X2J1Zl9saXN0IHsKQEAgLTY2MCw2ICs2ODksOCBAQAogCQl2b2lkICgqY29tcCkoc3RydWN0IG1seDRfY3EgKik7CiAJCXZvaWQJCSpwcml2OwogCX0gdGFza2xldF9jdHg7CisJaW50CQlyZXNldF9ub3RpZnlfYWRkZWQ7CisJc3RydWN0IGxpc3RfaGVhZAlyZXNldF9ub3RpZnk7CiB9OwogCiBzdHJ1Y3QgbWx4NF9xcCB7CkBAIC03NDQsOCArNzc1LDIzIEBACiAJdTgJCQluX3BvcnRzOwogfTsKIAotc3RydWN0IG1seDRfZGV2IHsKK3N0cnVjdCBtbHg0X2Rldl9wZXJzaXN0ZW50IHsKIAlzdHJ1Y3QgcGNpX2RldgkgICAgICAgKnBkZXY7CisJc3RydWN0IG1seDRfZGV2CSAgICAgICAqZGV2OworCWludCAgICAgICAgICAgICAgICAgICAgIG52ZnNbTUxYNF9NQVhfUE9SVFMgKyAxXTsKKwlpbnQJCQludW1fdmZzOworCWVudW0gbWx4NF9wb3J0X3R5cGUgY3Vycl9wb3J0X3R5cGVbTUxYNF9NQVhfUE9SVFMgKyAxXTsKKwllbnVtIG1seDRfcG9ydF90eXBlIGN1cnJfcG9ydF9wb3NzX3R5cGVbTUxYNF9NQVhfUE9SVFMgKyAxXTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICBjYXRhc193b3JrOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjYXRhc193cTsKKwlzdHJ1Y3QgbXV0ZXgJZGV2aWNlX3N0YXRlX211dGV4OyAvKiBwcm90ZWN0IEhXIHN0YXRlICovCisJdTgJCXN0YXRlOworCXN0cnVjdCBtdXRleAlpbnRlcmZhY2Vfc3RhdGVfbXV0ZXg7IC8qIHByb3RlY3QgU1cgc3RhdGUgKi8KKwl1OAlpbnRlcmZhY2Vfc3RhdGU7Cit9OworCitzdHJ1Y3QgbWx4NF9kZXYgeworCXN0cnVjdCBtbHg0X2Rldl9wZXJzaXN0ZW50ICpwZXJzaXN0OwogCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCXVuc2lnbmVkIGxvbmcJCW51bV9zbGF2ZXM7CiAJc3RydWN0IG1seDRfY2FwcwljYXBzOwpAQCAtNzU0LDEzICs4MDAsMTEgQEAKIAlzdHJ1Y3QgcmFkaXhfdHJlZV9yb290CXFwX3RhYmxlX3RyZWU7CiAJdTgJCQlyZXZfaWQ7CiAJY2hhcgkJCWJvYXJkX2lkW01MWDRfQk9BUkRfSURfTEVOXTsKLQlpbnQJCQludW1fdmZzOwogCWludAkJCW51bWFfbm9kZTsKIAlpbnQJCQlvcGVyX2xvZ19tZ21fZW50cnlfc2l6ZTsKIAl1NjQJCQlyZWdpZF9wcm9taXNjX2FycmF5W01MWDRfTUFYX1BPUlRTICsgMV07CiAJdTY0CQkJcmVnaWRfYWxsbXVsdGlfYXJyYXlbTUxYNF9NQVhfUE9SVFMgKyAxXTsKIAlzdHJ1Y3QgbWx4NF92Zl9kZXYgICAgICpkZXZfdmZzOwotCWludCAgICAgICAgICAgICAgICAgICAgIG52ZnNbTUxYNF9NQVhfUE9SVFMgKyAxXTsKIH07CiAKIHN0cnVjdCBtbHg0X2VxZSB7CkBAIC04MzIsNiArODc2LDExIEBACiAJCQkJfSBfX3BhY2tlZCB0YmxfY2hhbmdlX2luZm87CiAJCQl9IHBhcmFtczsKIAkJfSBfX3BhY2tlZCBwb3J0X21nbXRfY2hhbmdlOworCQlzdHJ1Y3QgeworCQkJdTggcmVzZXJ2ZWRbM107CisJCQl1OCBwb3J0OworCQkJdTMyIHJlc2VydmVkMVs1XTsKKwkJfSBfX3BhY2tlZCBiYWRfY2FibGU7CiAJfQkJCWV2ZW50OwogCXU4CQkJc2xhdmVfaWQ7CiAJdTgJCQlyZXNlcnZlZDNbMl07CkBAIC0xMzM4LDYgKzEzODcsOCBAQAogaW50IG1seDRfZ2V0X2Jhc2VfZ2lkX2l4KHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgc2xhdmUsIGludCBwb3J0KTsKIAogaW50IG1seDRfY29uZmlnX3Z4bGFuX3BvcnQoc3RydWN0IG1seDRfZGV2ICpkZXYsIF9fYmUxNiB1ZHBfcG9ydCk7CitpbnQgbWx4NF9kaXNhYmxlX3J4X3BvcnRfY2hlY2soc3RydWN0IG1seDRfZGV2ICpkZXYsIGJvb2wgZGlzKTsKK2ludCBtbHg0X3ZpcnQycGh5X3BvcnRfbWFwKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB1MzIgcG9ydDEsIHUzMiBwb3J0Mik7CiBpbnQgbWx4NF92Zl9zbWlfZW5hYmxlZChzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHNsYXZlLCBpbnQgcG9ydCk7CiBpbnQgbWx4NF92Zl9nZXRfZW5hYmxlX3NtaV9hZG1pbihzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHNsYXZlLCBpbnQgcG9ydCk7CiBpbnQgbWx4NF92Zl9zZXRfZW5hYmxlX3NtaV9hZG1pbihzdHJ1Y3QgbWx4NF9kZXYgKmRldiwgaW50IHNsYXZlLCBpbnQgcG9ydCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWx4NC9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9kcml2ZXIuaAppbmRleCAwMjIwNTVjLi45NTUzYTczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21seDQvZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbHg0L2RyaXZlci5oCkBAIC00OSw2ICs0OSwxMCBAQAogCU1MWDRfREVWX0VWRU5UX1NMQVZFX1NIVVRET1dOLAogfTsKIAorZW51bSB7CisJTUxYNF9JTlRGRl9CT05ESU5HCT0gMSA8PCAwCit9OworCiBzdHJ1Y3QgbWx4NF9pbnRlcmZhY2UgewogCXZvaWQgKgkJCSgqYWRkKQkgKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKIAl2b2lkCQkJKCpyZW1vdmUpKHN0cnVjdCBtbHg0X2RldiAqZGV2LCB2b2lkICpjb250ZXh0KTsKQEAgLTU3LDExICs2MSwyNiBAQAogCXZvaWQgKgkJCSgqZ2V0X2Rldikoc3RydWN0IG1seDRfZGV2ICpkZXYsIHZvaWQgKmNvbnRleHQsIHU4IHBvcnQpOwogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAllbnVtIG1seDRfcHJvdG9jb2wJcHJvdG9jb2w7CisJaW50CQkJZmxhZ3M7CiB9OwogCiBpbnQgbWx4NF9yZWdpc3Rlcl9pbnRlcmZhY2Uoc3RydWN0IG1seDRfaW50ZXJmYWNlICppbnRmKTsKIHZvaWQgbWx4NF91bnJlZ2lzdGVyX2ludGVyZmFjZShzdHJ1Y3QgbWx4NF9pbnRlcmZhY2UgKmludGYpOwogCitpbnQgbWx4NF9ib25kKHN0cnVjdCBtbHg0X2RldiAqZGV2KTsKK2ludCBtbHg0X3VuYm9uZChzdHJ1Y3QgbWx4NF9kZXYgKmRldik7CitzdGF0aWMgaW5saW5lIGludCBtbHg0X2lzX2JvbmRlZChzdHJ1Y3QgbWx4NF9kZXYgKmRldikKK3sKKwlyZXR1cm4gISEoZGV2LT5mbGFncyAmIE1MWDRfRkxBR19CT05ERUQpOworfQorCitzdHJ1Y3QgbWx4NF9wb3J0X21hcCB7CisJdTgJcG9ydDE7CisJdTgJcG9ydDI7Cit9OworCitpbnQgbWx4NF9wb3J0X21hcF9zZXQoc3RydWN0IG1seDRfZGV2ICpkZXYsIHN0cnVjdCBtbHg0X3BvcnRfbWFwICp2MnApOworCiB2b2lkICptbHg0X2dldF9wcm90b2NvbF9kZXYoc3RydWN0IG1seDRfZGV2ICpkZXYsIGVudW0gbWx4NF9wcm90b2NvbCBwcm90bywgaW50IHBvcnQpOwogCiBzdGF0aWMgaW5saW5lIHU2NCBtbHg0X21hY190b191NjQodTggKmFkZHIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21seDQvcXAuaCBiL2luY2x1ZGUvbGludXgvbWx4NC9xcC5oCmluZGV4IDQ2N2NjZGYuLjJiYmM2MmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWx4NC9xcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbWx4NC9xcC5oCkBAIC05Niw2ICs5Niw3IEBACiAJTUxYNF9RUF9CSVRfUlJFCQkJCT0gMSA8PCAxNSwKIAlNTFg0X1FQX0JJVF9SV0UJCQkJPSAxIDw8IDE0LAogCU1MWDRfUVBfQklUX1JBRQkJCQk9IDEgPDwgMTMsCisJTUxYNF9RUF9CSVRfRlBQCQkJCT0gMSA8PAkzLAogCU1MWDRfUVBfQklUX1JJQwkJCQk9IDEgPDwJNCwKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA4MGZjOTJhLi5hNGQyNGYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMzgsNyArMTM4LDYgQEAKICNkZWZpbmUgVk1fQUNDT1VOVAkweDAwMTAwMDAwCS8qIElzIGEgVk0gYWNjb3VudGVkIG9iamVjdCAqLwogI2RlZmluZSBWTV9OT1JFU0VSVkUJMHgwMDIwMDAwMAkvKiBzaG91bGQgdGhlIFZNIHN1cHByZXNzIGFjY291bnRpbmcgKi8KICNkZWZpbmUgVk1fSFVHRVRMQgkweDAwNDAwMDAwCS8qIEh1Z2UgVExCIFBhZ2UgVk0gKi8KLSNkZWZpbmUgVk1fTk9OTElORUFSCTB4MDA4MDAwMDAJLyogSXMgbm9uLWxpbmVhciAocmVtYXBfZmlsZV9wYWdlcykgKi8KICNkZWZpbmUgVk1fQVJDSF8xCTB4MDEwMDAwMDAJLyogQXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWcgKi8KICNkZWZpbmUgVk1fQVJDSF8yCTB4MDIwMDAwMDAKICNkZWZpbmUgVk1fRE9OVERVTVAJMHgwNDAwMDAwMAkvKiBEbyBub3QgaW5jbHVkZSBpbiB0aGUgY29yZSBkdW1wICovCkBAIC0yMDYsMjEgKzIwNSwxOSBAQAogZXh0ZXJuIHBncHJvdF90IHByb3RlY3Rpb25fbWFwWzE2XTsKIAogI2RlZmluZSBGQVVMVF9GTEFHX1dSSVRFCTB4MDEJLyogRmF1bHQgd2FzIGEgd3JpdGUgYWNjZXNzICovCi0jZGVmaW5lIEZBVUxUX0ZMQUdfTk9OTElORUFSCTB4MDIJLyogRmF1bHQgd2FzIHZpYSBhIG5vbmxpbmVhciBtYXBwaW5nICovCi0jZGVmaW5lIEZBVUxUX0ZMQUdfTUtXUklURQkweDA0CS8qIEZhdWx0IHdhcyBta3dyaXRlIG9mIGV4aXN0aW5nIHB0ZSAqLwotI2RlZmluZSBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZCTB4MDgJLyogUmV0cnkgZmF1bHQgaWYgYmxvY2tpbmcgKi8KLSNkZWZpbmUgRkFVTFRfRkxBR19SRVRSWV9OT1dBSVQJMHgxMAkvKiBEb24ndCBkcm9wIG1tYXBfc2VtIGFuZCB3YWl0IHdoZW4gcmV0cnlpbmcgKi8KLSNkZWZpbmUgRkFVTFRfRkxBR19LSUxMQUJMRQkweDIwCS8qIFRoZSBmYXVsdCB0YXNrIGlzIGluIFNJR0tJTEwga2lsbGFibGUgcmVnaW9uICovCi0jZGVmaW5lIEZBVUxUX0ZMQUdfVFJJRUQJMHg0MAkvKiBzZWNvbmQgdHJ5ICovCi0jZGVmaW5lIEZBVUxUX0ZMQUdfVVNFUgkJMHg4MAkvKiBUaGUgZmF1bHQgb3JpZ2luYXRlZCBpbiB1c2Vyc3BhY2UgKi8KKyNkZWZpbmUgRkFVTFRfRkxBR19NS1dSSVRFCTB4MDIJLyogRmF1bHQgd2FzIG1rd3JpdGUgb2YgZXhpc3RpbmcgcHRlICovCisjZGVmaW5lIEZBVUxUX0ZMQUdfQUxMT1dfUkVUUlkJMHgwNAkvKiBSZXRyeSBmYXVsdCBpZiBibG9ja2luZyAqLworI2RlZmluZSBGQVVMVF9GTEFHX1JFVFJZX05PV0FJVAkweDA4CS8qIERvbid0IGRyb3AgbW1hcF9zZW0gYW5kIHdhaXQgd2hlbiByZXRyeWluZyAqLworI2RlZmluZSBGQVVMVF9GTEFHX0tJTExBQkxFCTB4MTAJLyogVGhlIGZhdWx0IHRhc2sgaXMgaW4gU0lHS0lMTCBraWxsYWJsZSByZWdpb24gKi8KKyNkZWZpbmUgRkFVTFRfRkxBR19UUklFRAkweDIwCS8qIFNlY29uZCB0cnkgKi8KKyNkZWZpbmUgRkFVTFRfRkxBR19VU0VSCQkweDQwCS8qIFRoZSBmYXVsdCBvcmlnaW5hdGVkIGluIHVzZXJzcGFjZSAqLwogCiAvKgogICogdm1fZmF1bHQgaXMgZmlsbGVkIGJ5IHRoZSB0aGUgcGFnZWZhdWx0IGhhbmRsZXIgYW5kIHBhc3NlZCB0byB0aGUgdm1hJ3MKICAqIC0+ZmF1bHQgZnVuY3Rpb24uIFRoZSB2bWEncyAtPmZhdWx0IGlzIHJlc3BvbnNpYmxlIGZvciByZXR1cm5pbmcgYSBiaXRtYXNrCiAgKiBvZiBWTV9GQVVMVF94eHggZmxhZ3MgdGhhdCBnaXZlIGRldGFpbHMgYWJvdXQgaG93IHRoZSBmYXVsdCB3YXMgaGFuZGxlZC4KICAqCi0gKiBwZ29mZiBzaG91bGQgYmUgdXNlZCBpbiBmYXZvdXIgb2YgdmlydHVhbF9hZGRyZXNzLCBpZiBwb3NzaWJsZS4gSWYgcGdvZmYKLSAqIGlzIHVzZWQsIG9uZSBtYXkgaW1wbGVtZW50IC0+cmVtYXBfcGFnZXMgdG8gZ2V0IG5vbmxpbmVhciBtYXBwaW5nIHN1cHBvcnQuCisgKiBwZ29mZiBzaG91bGQgYmUgdXNlZCBpbiBmYXZvdXIgb2YgdmlydHVhbF9hZGRyZXNzLCBpZiBwb3NzaWJsZS4KICAqLwogc3RydWN0IHZtX2ZhdWx0IHsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CQkvKiBGQVVMVF9GTEFHX3h4eCBmbGFncyAqLwpAQCAtMjg3LDkgKzI4NCwxMyBAQAogCXN0cnVjdCBtZW1wb2xpY3kgKigqZ2V0X3BvbGljeSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJCXVuc2lnbmVkIGxvbmcgYWRkcik7CiAjZW5kaWYKLQkvKiBjYWxsZWQgYnkgc3lzX3JlbWFwX2ZpbGVfcGFnZXMoKSB0byBwb3B1bGF0ZSBub24tbGluZWFyIG1hcHBpbmcgKi8KLQlpbnQgKCpyZW1hcF9wYWdlcykoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdvZmZfdCBwZ29mZik7CisJLyoKKwkgKiBDYWxsZWQgYnkgdm1fbm9ybWFsX3BhZ2UoKSBmb3Igc3BlY2lhbCBQVEVzIHRvIGZpbmQgdGhlCisJICogcGFnZSBmb3IgQGFkZHIuICBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgZGVmYXVsdCBiZWhhdmlvcgorCSAqICh1c2luZyBwdGVfcGFnZSgpKSB3b3VsZCBub3QgZmluZCB0aGUgY29ycmVjdCBwYWdlLgorCSAqLworCXN0cnVjdCBwYWdlICooKmZpbmRfc3BlY2lhbF9wYWdlKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIpOwogfTsKIAogc3RydWN0IG1tdV9nYXRoZXI7CkBAIC00NDYsNiArNDQ3LDEyIEBACiAJcmV0dXJuIHRhaWw7CiB9CiAKKy8qCisgKiBTaW5jZSBlaXRoZXIgY29tcG91bmQgcGFnZSBjb3VsZCBiZSBkaXNtYW50bGVkIGFzeW5jaHJvbm91c2x5IGluIFRIUAorICogb3Igd2UgYWNjZXNzIGFzeW5jaHJvbm91c2x5IGFyYml0cmFyeSBwb3NpdGlvbmVkIHN0cnVjdCBwYWdlLCB0aGVyZQorICogd291bGQgYmUgdGFpbCBmbGFnIHJhY2UuIFRvIGhhbmRsZSB0aGlzIHJhY2UsIHdlIHNob3VsZCBjYWxsCisgKiBzbXBfcm1iKCkgYmVmb3JlIGNoZWNraW5nIHRhaWwgZmxhZy4gY29tcG91bmRfaGVhZF9ieV90YWlsKCkgZGlkIGl0LgorICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpjb21wb3VuZF9oZWFkKHN0cnVjdCBwYWdlICpwYWdlKQogewogCWlmICh1bmxpa2VseShQYWdlVGFpbChwYWdlKSkpCkBAIC00NTQsNiArNDYxLDE4IEBACiB9CiAKIC8qCisgKiBJZiB3ZSBhY2Nlc3MgY29tcG91bmQgcGFnZSBzeW5jaHJvbm91c2x5IHN1Y2ggYXMgYWNjZXNzIHRvCisgKiBhbGxvY2F0ZWQgcGFnZSwgdGhlcmUgaXMgbm8gbmVlZCB0byBoYW5kbGUgdGFpbCBmbGFnIHJhY2UsIHNvIHdlIGNhbgorICogY2hlY2sgdGFpbCBmbGFnIGRpcmVjdGx5IHdpdGhvdXQgYW55IHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmNvbXBvdW5kX2hlYWRfZmFzdChzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAodW5saWtlbHkoUGFnZVRhaWwocGFnZSkpKQorCQlyZXR1cm4gcGFnZS0+Zmlyc3RfcGFnZTsKKwlyZXR1cm4gcGFnZTsKK30KKworLyoKICAqIFRoZSBhdG9taWMgcGFnZS0+X21hcGNvdW50LCBzdGFydHMgZnJvbSAtMTogc28gdGhhdCB0cmFuc2l0aW9ucwogICogYm90aCBmcm9tIGl0IGFuZCB0byBpdCBjYW4gYmUgdHJhY2tlZCwgdXNpbmcgYXRvbWljX2luY19hbmRfdGVzdAogICogYW5kIGF0b21pY19hZGRfbmVnYXRpdmUoLTEpLgpAQCAtNDY1LDcgKzQ4NCw4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHBhZ2VfbWFwY291bnQoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcmV0dXJuIGF0b21pY19yZWFkKCYocGFnZSktPl9tYXBjb3VudCkgKyAxOworCVZNX0JVR19PTl9QQUdFKFBhZ2VTbGFiKHBhZ2UpLCBwYWdlKTsKKwlyZXR1cm4gYXRvbWljX3JlYWQoJnBhZ2UtPl9tYXBjb3VudCkgKyAxOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBwYWdlX2NvdW50KHN0cnVjdCBwYWdlICpwYWdlKQpAQCAtNTMxLDcgKzU1MSwxNCBAQAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqdmlydF90b19oZWFkX3BhZ2UoY29uc3Qgdm9pZCAqeCkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZSh4KTsKLQlyZXR1cm4gY29tcG91bmRfaGVhZChwYWdlKTsKKworCS8qCisJICogV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBzeW5jaHJvbml6YXRpb24gb2YgdGFpbCBmbGFnCisJICogd2hlbiB3ZSBjYWxsIHZpcnRfdG9faGVhZF9wYWdlKCkgc2luY2UgaXQgaXMgb25seSBjYWxsZWQgZm9yCisJICogYWxyZWFkeSBhbGxvY2F0ZWQgcGFnZSBhbmQgdGhpcyBwYWdlIHdvbid0IGJlIGZyZWVkIHVudGlsCisJICogdGhpcyB2aXJ0X3RvX2hlYWRfcGFnZSgpIGlzIGZpbmlzaGVkLiBTbyB1c2UgX2Zhc3QgdmFyaWFudC4KKwkgKi8KKwlyZXR1cm4gY29tcG91bmRfaGVhZF9mYXN0KHBhZ2UpOwogfQogCiAvKgpAQCAtNjAxLDI5ICs2MjgsMjggQEAKICAqIHByb3RvdHlwZSBmb3IgdGhhdCBmdW5jdGlvbiBhbmQgYWNjZXNzb3IgZnVuY3Rpb25zLgogICogVGhlc2UgYXJlIF9vbmx5XyB2YWxpZCBvbiB0aGUgaGVhZCBvZiBhIFBHX2NvbXBvdW5kIHBhZ2UuCiAgKi8KLXR5cGVkZWYgdm9pZCBjb21wb3VuZF9wYWdlX2R0b3Ioc3RydWN0IHBhZ2UgKik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfY29tcG91bmRfcGFnZV9kdG9yKHN0cnVjdCBwYWdlICpwYWdlLAogCQkJCQkJY29tcG91bmRfcGFnZV9kdG9yICpkdG9yKQogewotCXBhZ2VbMV0ubHJ1Lm5leHQgPSAodm9pZCAqKWR0b3I7CisJcGFnZVsxXS5jb21wb3VuZF9kdG9yID0gZHRvcjsKIH0KIAogc3RhdGljIGlubGluZSBjb21wb3VuZF9wYWdlX2R0b3IgKmdldF9jb21wb3VuZF9wYWdlX2R0b3Ioc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcmV0dXJuIChjb21wb3VuZF9wYWdlX2R0b3IgKilwYWdlWzFdLmxydS5uZXh0OworCXJldHVybiBwYWdlWzFdLmNvbXBvdW5kX2R0b3I7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNvbXBvdW5kX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlKQogewogCWlmICghUGFnZUhlYWQocGFnZSkpCiAJCXJldHVybiAwOwotCXJldHVybiAodW5zaWduZWQgbG9uZylwYWdlWzFdLmxydS5wcmV2OworCXJldHVybiBwYWdlWzFdLmNvbXBvdW5kX29yZGVyOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NvbXBvdW5kX29yZGVyKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9yZGVyKQogewotCXBhZ2VbMV0ubHJ1LnByZXYgPSAodm9pZCAqKW9yZGVyOworCXBhZ2VbMV0uY29tcG91bmRfb3JkZXIgPSBvcmRlcjsKIH0KIAogI2lmZGVmIENPTkZJR19NTVUKQEAgLTEwNzAsNiArMTA5Niw3IEBACiAjZGVmaW5lIFZNX0ZBVUxUX1dSSVRFCTB4MDAwOAkvKiBTcGVjaWFsIGNhc2UgZm9yIGdldF91c2VyX3BhZ2VzICovCiAjZGVmaW5lIFZNX0ZBVUxUX0hXUE9JU09OIDB4MDAxMAkvKiBIaXQgcG9pc29uZWQgc21hbGwgcGFnZSAqLwogI2RlZmluZSBWTV9GQVVMVF9IV1BPSVNPTl9MQVJHRSAweDAwMjAgIC8qIEhpdCBwb2lzb25lZCBsYXJnZSBwYWdlLiBJbmRleCBlbmNvZGVkIGluIHVwcGVyIGJpdHMgKi8KKyNkZWZpbmUgVk1fRkFVTFRfU0lHU0VHViAweDAwNDAKIAogI2RlZmluZSBWTV9GQVVMVF9OT1BBR0UJMHgwMTAwCS8qIC0+ZmF1bHQgaW5zdGFsbGVkIHRoZSBwdGUsIG5vdCByZXR1cm4gcGFnZSAqLwogI2RlZmluZSBWTV9GQVVMVF9MT0NLRUQJMHgwMjAwCS8qIC0+ZmF1bHQgbG9ja2VkIHRoZSByZXR1cm5lZCBwYWdlICovCkBAIC0xMDc4LDggKzExMDUsOSBAQAogCiAjZGVmaW5lIFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFX01BU0sgMHhmMDAwIC8qIGVuY29kZXMgaHBhZ2UgaW5kZXggZm9yIGxhcmdlIGh3cG9pc29uICovCiAKLSNkZWZpbmUgVk1fRkFVTFRfRVJST1IJKFZNX0ZBVUxUX09PTSB8IFZNX0ZBVUxUX1NJR0JVUyB8IFZNX0ZBVUxUX0hXUE9JU09OIHwgXAotCQkJIFZNX0ZBVUxUX0ZBTExCQUNLIHwgVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UpCisjZGVmaW5lIFZNX0ZBVUxUX0VSUk9SCShWTV9GQVVMVF9PT00gfCBWTV9GQVVMVF9TSUdCVVMgfCBWTV9GQVVMVF9TSUdTRUdWIHwgXAorCQkJIFZNX0ZBVUxUX0hXUE9JU09OIHwgVk1fRkFVTFRfSFdQT0lTT05fTEFSR0UgfCBcCisJCQkgVk1fRkFVTFRfRkFMTEJBQ0spCiAKIC8qIEVuY29kZSBoc3RhdGUgaW5kZXggZm9yIGEgaHdwb2lzb25lZCBsYXJnZSBwYWdlICovCiAjZGVmaW5lIFZNX0ZBVUxUX1NFVF9ISU5ERVgoeCkgKCh4KSA8PCAxMikKQEAgLTExMTksNyArMTE0Nyw2IEBACiAgKiBQYXJhbWV0ZXIgYmxvY2sgcGFzc2VkIGRvd24gdG8gemFwX3B0ZV9yYW5nZSBpbiBleGNlcHRpb25hbCBjYXNlcy4KICAqLwogc3RydWN0IHphcF9kZXRhaWxzIHsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5vbmxpbmVhcl92bWE7CS8qIENoZWNrIHBhZ2UtPmluZGV4IGlmIHNldCAqLwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICpjaGVja19tYXBwaW5nOwkvKiBDaGVjayBwYWdlLT5tYXBwaW5nIGlmIHNldCAqLwogCXBnb2ZmX3QJZmlyc3RfaW5kZXg7CQkJLyogTG93ZXN0IHBhZ2UtPmluZGV4IHRvIHVubWFwICovCiAJcGdvZmZfdCBsYXN0X2luZGV4OwkJCS8qIEhpZ2hlc3QgcGFnZS0+aW5kZXggdG8gdW5tYXAgKi8KQEAgLTExMzcsOCArMTE2NCw2IEBACiAKIC8qKgogICogbW1fd2FsayAtIGNhbGxiYWNrcyBmb3Igd2Fsa19wYWdlX3JhbmdlCi0gKiBAcGdkX2VudHJ5OiBpZiBzZXQsIGNhbGxlZCBmb3IgZWFjaCBub24tZW1wdHkgUEdEICh0b3AtbGV2ZWwpIGVudHJ5Ci0gKiBAcHVkX2VudHJ5OiBpZiBzZXQsIGNhbGxlZCBmb3IgZWFjaCBub24tZW1wdHkgUFVEICgybmQtbGV2ZWwpIGVudHJ5CiAgKiBAcG1kX2VudHJ5OiBpZiBzZXQsIGNhbGxlZCBmb3IgZWFjaCBub24tZW1wdHkgUE1EICgzcmQtbGV2ZWwpIGVudHJ5CiAgKgkgICAgICAgdGhpcyBoYW5kbGVyIGlzIHJlcXVpcmVkIHRvIGJlIGFibGUgdG8gaGFuZGxlCiAgKgkgICAgICAgcG1kX3RyYW5zX2h1Z2UoKSBwbWRzLiAgVGhleSBtYXkgc2ltcGx5IGNob29zZSB0bwpAQCAtMTE0NiwxNiArMTE3MSwxOCBAQAogICogQHB0ZV9lbnRyeTogaWYgc2V0LCBjYWxsZWQgZm9yIGVhY2ggbm9uLWVtcHR5IFBURSAoNHRoLWxldmVsKSBlbnRyeQogICogQHB0ZV9ob2xlOiBpZiBzZXQsIGNhbGxlZCBmb3IgZWFjaCBob2xlIGF0IGFsbCBsZXZlbHMKICAqIEBodWdldGxiX2VudHJ5OiBpZiBzZXQsIGNhbGxlZCBmb3IgZWFjaCBodWdldGxiIGVudHJ5Ci0gKgkJICAgKkNhdXRpb24qOiBUaGUgY2FsbGVyIG11c3QgaG9sZCBtbWFwX3NlbSgpIGlmIEBodWdldGxiX2VudHJ5Ci0gKiAJCQkgICAgICBpcyB1c2VkLgorICogQHRlc3Rfd2FsazogY2FsbGVyIHNwZWNpZmljIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyCisgKiAgICAgICAgICAgICB3ZSB3YWxrIG92ZXIgdGhlIGN1cnJlbnQgdm1hIG9yIG5vdC4gQSBwb3NpdGl2ZSByZXR1cm5lZAorICogICAgICAgICAgICAgdmFsdWUgbWVhbnMgImRvIHBhZ2UgdGFibGUgd2FsayBvdmVyIHRoZSBjdXJyZW50IHZtYSwiCisgKiAgICAgICAgICAgICBhbmQgYSBuZWdhdGl2ZSBvbmUgbWVhbnMgImFib3J0IGN1cnJlbnQgcGFnZSB0YWJsZSB3YWxrCisgKiAgICAgICAgICAgICByaWdodCBub3cuIiAwIG1lYW5zICJza2lwIHRoZSBjdXJyZW50IHZtYS4iCisgKiBAbW06ICAgICAgICBtbV9zdHJ1Y3QgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgcHJvY2VzcyBvZiBwYWdlIHRhYmxlIHdhbGsKKyAqIEB2bWE6ICAgICAgIHZtYSBjdXJyZW50bHkgd2Fsa2VkIChOVUxMIGlmIHdhbGtpbmcgb3V0c2lkZSB2bWFzKQorICogQHByaXZhdGU6ICAgcHJpdmF0ZSBkYXRhIGZvciBjYWxsYmFja3MnIHVzYWdlCiAgKgotICogKHNlZSB3YWxrX3BhZ2VfcmFuZ2UgZm9yIG1vcmUgZGV0YWlscykKKyAqIChzZWUgdGhlIGNvbW1lbnQgb24gd2Fsa19wYWdlX3JhbmdlKCkgZm9yIG1vcmUgZGV0YWlscykKICAqLwogc3RydWN0IG1tX3dhbGsgewotCWludCAoKnBnZF9lbnRyeSkocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJIHVuc2lnbmVkIGxvbmcgbmV4dCwgc3RydWN0IG1tX3dhbGsgKndhbGspOwotCWludCAoKnB1ZF9lbnRyeSkocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLAotCSAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2Fsayk7CiAJaW50ICgqcG1kX2VudHJ5KShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgdW5zaWduZWQgbG9uZyBuZXh0LCBzdHJ1Y3QgbW1fd2FsayAqd2Fsayk7CiAJaW50ICgqcHRlX2VudHJ5KShwdGVfdCAqcHRlLCB1bnNpZ25lZCBsb25nIGFkZHIsCkBAIC0xMTY1LDEyICsxMTkyLDE2IEBACiAJaW50ICgqaHVnZXRsYl9lbnRyeSkocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzaywKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIG5leHQsCiAJCQkgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKTsKKwlpbnQgKCp0ZXN0X3dhbGspKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBuZXh0LAorCQkJc3RydWN0IG1tX3dhbGsgKndhbGspOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCXZvaWQgKnByaXZhdGU7CiB9OwogCiBpbnQgd2Fsa19wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCXN0cnVjdCBtbV93YWxrICp3YWxrKTsKK2ludCB3YWxrX3BhZ2Vfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgbW1fd2FsayAqd2Fsayk7CiB2b2lkIGZyZWVfcGdkX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgZmxvb3IsIHVuc2lnbmVkIGxvbmcgY2VpbGluZyk7CiBpbnQgY29weV9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLApAQCAtMTIzNCw2ICsxMjY1LDE3IEBACiAJCSAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAogCQkgICAgaW50IHdyaXRlLCBpbnQgZm9yY2UsIHN0cnVjdCBwYWdlICoqcGFnZXMsCiAJCSAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKTsKK2xvbmcgZ2V0X3VzZXJfcGFnZXNfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCisJCSAgICBpbnQgd3JpdGUsIGludCBmb3JjZSwgc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJICAgIGludCAqbG9ja2VkKTsKK2xvbmcgX19nZXRfdXNlcl9wYWdlc191bmxvY2tlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJCSAgICAgICBpbnQgd3JpdGUsIGludCBmb3JjZSwgc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKTsKK2xvbmcgZ2V0X3VzZXJfcGFnZXNfdW5sb2NrZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJICAgIGludCB3cml0ZSwgaW50IGZvcmNlLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsKIGludCBnZXRfdXNlcl9wYWdlc19mYXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBucl9wYWdlcywgaW50IHdyaXRlLAogCQkJc3RydWN0IHBhZ2UgKipwYWdlcyk7CiBzdHJ1Y3Qga3ZlYzsKQEAgLTE0MTEsOCArMTQ1MywzMiBAQAogewogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fbnJfcG1kcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1tX2luY19ucl9wbWRzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7fQorc3RhdGljIGlubGluZSB2b2lkIG1tX2RlY19ucl9wbWRzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7fQorCiAjZWxzZQogaW50IF9fcG1kX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1fbnJfcG1kcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gYXRvbWljX2xvbmdfcmVhZCgmbW0tPm5yX3BtZHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbW1faW5jX25yX3BtZHMoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJYXRvbWljX2xvbmdfaW5jKCZtbS0+bnJfcG1kcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbV9kZWNfbnJfcG1kcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlhdG9taWNfbG9uZ19kZWMoJm1tLT5ucl9wbWRzKTsKK30KICNlbmRpZgogCiBpbnQgX19wdGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApAQCAtMTc3NSwxMiArMTg0MSw2IEBACiAJZm9yICh2bWEgPSB2bWFfaW50ZXJ2YWxfdHJlZV9pdGVyX2ZpcnN0KHJvb3QsIHN0YXJ0LCBsYXN0KTsJXAogCSAgICAgdm1hOyB2bWEgPSB2bWFfaW50ZXJ2YWxfdHJlZV9pdGVyX25leHQodm1hLCBzdGFydCwgbGFzdCkpCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB2bWFfbm9ubGluZWFyX2luc2VydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKLXsKLQlsaXN0X2FkZF90YWlsKCZ2bWEtPnNoYXJlZC5ub25saW5lYXIsIGxpc3QpOwotfQotCiB2b2lkIGFub25fdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqbm9kZSwKIAkJCQkgICBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCk7CiB2b2lkIGFub25fdm1hX2ludGVydmFsX3RyZWVfcmVtb3ZlKHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqbm9kZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCA2ZDM0YWEyLi4xOTlhMDNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCkBAIC0yOCw2ICsyOCw4IEBACiAJCUlTX0VOQUJMRUQoQ09ORklHX0FSQ0hfRU5BQkxFX1NQTElUX1BNRF9QVExPQ0spKQogI2RlZmluZSBBTExPQ19TUExJVF9QVExPQ0tTCShTUElOTE9DS19TSVpFID4gQklUU19QRVJfTE9ORy84KQogCit0eXBlZGVmIHZvaWQgY29tcG91bmRfcGFnZV9kdG9yKHN0cnVjdCBwYWdlICopOworCiAvKgogICogRWFjaCBwaHlzaWNhbCBwYWdlIGluIHRoZSBzeXN0ZW0gaGFzIGEgc3RydWN0IHBhZ2UgYXNzb2NpYXRlZCB3aXRoCiAgKiBpdCB0byBrZWVwIHRyYWNrIG9mIHdoYXRldmVyIGl0IGlzIHdlIGFyZSB1c2luZyB0aGUgcGFnZSBmb3IgYXQgdGhlCkBAIC0xNDIsNiArMTQ0LDEyIEBACiAJCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsJLyogVXNlZCBieSBTTEFCCiAJCQkJCQkgKiB3aGVuIGRlc3Ryb3lpbmcgdmlhIFJDVQogCQkJCQkJICovCisJCS8qIEZpcnN0IHRhaWwgcGFnZSBvZiBjb21wb3VuZCBwYWdlICovCisJCXN0cnVjdCB7CisJCQljb21wb3VuZF9wYWdlX2R0b3IgKmNvbXBvdW5kX2R0b3I7CisJCQl1bnNpZ25lZCBsb25nIGNvbXBvdW5kX29yZGVyOworCQl9OworCiAjaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYmIFVTRV9TUExJVF9QTURfUFRMT0NLUwogCQlwZ3RhYmxlX3QgcG1kX2h1Z2VfcHRlOyAvKiBwcm90ZWN0ZWQgYnkgcGFnZS0+cHRsICovCiAjZW5kaWYKQEAgLTI3MywxNSArMjgxLDExIEBACiAKIAkvKgogCSAqIEZvciBhcmVhcyB3aXRoIGFuIGFkZHJlc3Mgc3BhY2UgYW5kIGJhY2tpbmcgc3RvcmUsCi0JICogbGlua2FnZSBpbnRvIHRoZSBhZGRyZXNzX3NwYWNlLT5pX21tYXAgaW50ZXJ2YWwgdHJlZSwgb3IKLQkgKiBsaW5rYWdlIG9mIHZtYSBpbiB0aGUgYWRkcmVzc19zcGFjZS0+aV9tbWFwX25vbmxpbmVhciBsaXN0LgorCSAqIGxpbmthZ2UgaW50byB0aGUgYWRkcmVzc19zcGFjZS0+aV9tbWFwIGludGVydmFsIHRyZWUuCiAJICovCi0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJc3RydWN0IHJiX25vZGUgcmI7Ci0JCQl1bnNpZ25lZCBsb25nIHJiX3N1YnRyZWVfbGFzdDsKLQkJfSBsaW5lYXI7Ci0JCXN0cnVjdCBsaXN0X2hlYWQgbm9ubGluZWFyOworCXN0cnVjdCB7CisJCXN0cnVjdCByYl9ub2RlIHJiOworCQl1bnNpZ25lZCBsb25nIHJiX3N1YnRyZWVfbGFzdDsKIAl9IHNoYXJlZDsKIAogCS8qCkBAIC0zNTksNyArMzYzLDggQEAKIAlwZ2RfdCAqIHBnZDsKIAlhdG9taWNfdCBtbV91c2VyczsJCQkvKiBIb3cgbWFueSB1c2VycyB3aXRoIHVzZXIgc3BhY2U/ICovCiAJYXRvbWljX3QgbW1fY291bnQ7CQkJLyogSG93IG1hbnkgcmVmZXJlbmNlcyB0byAic3RydWN0IG1tX3N0cnVjdCIgKHVzZXJzIGNvdW50IGFzIDEpICovCi0JYXRvbWljX2xvbmdfdCBucl9wdGVzOwkJCS8qIFBhZ2UgdGFibGUgcGFnZXMgKi8KKwlhdG9taWNfbG9uZ190IG5yX3B0ZXM7CQkJLyogUFRFIHBhZ2UgdGFibGUgcGFnZXMgKi8KKwlhdG9taWNfbG9uZ190IG5yX3BtZHM7CQkJLyogUE1EIHBhZ2UgdGFibGUgcGFnZXMgKi8KIAlpbnQgbWFwX2NvdW50OwkJCQkvKiBudW1iZXIgb2YgVk1BcyAqLwogCiAJc3BpbmxvY2tfdCBwYWdlX3RhYmxlX2xvY2s7CQkvKiBQcm90ZWN0cyBwYWdlIHRhYmxlcyBhbmQgc29tZSBjb3VudGVycyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oIGIvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oCmluZGV4IDRkNjljMDAuLmE2Y2Y0YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmgKQEAgLTgzLDcgKzgzLDcgQEAKIAlib29sCQkJaHBpOwkJCS8qIEhQSSBzdXBwb3J0IGJpdCAqLwogCXVuc2lnbmVkIGludAkJaHBpX2NtZDsJCS8qIGNtZCB1c2VkIGFzIEhQSSAqLwogCWJvb2wJCQlia29wczsJCS8qIGJhY2tncm91bmQgc3VwcG9ydCBiaXQgKi8KLQlib29sCQkJYmtvcHNfZW47CS8qIGJhY2tncm91bmQgZW5hYmxlIGJpdCAqLworCWJvb2wJCQltYW5fYmtvcHNfZW47CS8qIG1hbnVhbCBia29wcyBlbmFibGUgYml0ICovCiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgZGF0YV9zZWN0b3Jfc2l6ZTsgICAgICAgLyogNTEyIGJ5dGVzIG9yIDRLQiAqLwogCXVuc2lnbmVkIGludCAgICAgICAgICAgIGRhdGFfdGFnX3VuaXRfc2l6ZTsgICAgIC8qIERBVEEgVEFHIFVOSVQgc2l6ZSAqLwogCXVuc2lnbmVkIGludAkJYm9vdF9yb19sb2NrOwkJLyogcm8gbG9jayBzdXBwb3J0ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L21tYy9jb3JlLmgKaW5kZXggY2IyYjA0MC4uMTYwNDQ4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2NvcmUuaApAQCAtMTgyLDcgKzE4Miw2IEBACiBleHRlcm4gaW50IG1tY19zZXRfYmxvY2tjb3VudChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGludCBibG9ja2NvdW50LAogCQkJICAgICAgYm9vbCBpc19yZWxfd3JpdGUpOwogZXh0ZXJuIGludCBtbWNfaHdfcmVzZXQoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKLWV4dGVybiBpbnQgbW1jX2h3X3Jlc2V0X2NoZWNrKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CiBleHRlcm4gaW50IG1tY19jYW5fcmVzZXQoc3RydWN0IG1tY19jYXJkICpjYXJkKTsKIAogZXh0ZXJuIHZvaWQgbW1jX3NldF9kYXRhX3RpbWVvdXQoc3RydWN0IG1tY19kYXRhICosIGNvbnN0IHN0cnVjdCBtbWNfY2FyZCAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2R3X21tYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmgKaW5kZXggNDJiNzI0ZS4uNDcxZmIzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvZHdfbW1jLmgKQEAgLTEwNiw2ICsxMDYsMTEgQEAKICAqIEBjdXJfc2xvdCwgQG1ycSBhbmQgQHN0YXRlLiBUaGVzZSBtdXN0IGFsd2F5cyBiZSB1cGRhdGVkCiAgKiBhdCB0aGUgc2FtZSB0aW1lIHdoaWxlIGhvbGRpbmcgQGxvY2suCiAgKgorICogQGlycV9sb2NrIGlzIGFuIGlycS1zYWZlIHNwaW5sb2NrIHByb3RlY3RpbmcgdGhlIElOVE1BU0sgcmVnaXN0ZXIKKyAqIHRvIGFsbG93IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0byBtb2RpZnkgaXQgZGlyZWN0bHkuICBIZWxkIGZvciBvbmx5IGxvbmcKKyAqIGVub3VnaCB0byByZWFkLW1vZGlmeS13cml0ZSBJTlRNQVNLIGFuZCBubyBvdGhlciBsb2NrcyBhcmUgZ3JhYmJlZCB3aGVuCisgKiBob2xkaW5nIHRoaXMgb25lLgorICoKICAqIFRoZSBAbXJxIGZpZWxkIG9mIHN0cnVjdCBkd19tY2lfc2xvdCBpcyBhbHNvIHByb3RlY3RlZCBieSBAbG9jaywKICAqIGFuZCBtdXN0IGFsd2F5cyBiZSB3cml0dGVuIGF0IHRoZSBzYW1lIHRpbWUgYXMgdGhlIHNsb3QgaXMgYWRkZWQgdG8KICAqIEBxdWV1ZS4KQEAgLTEyNSw2ICsxMzAsNyBAQAogICovCiBzdHJ1Y3QgZHdfbWNpIHsKIAlzcGlubG9ja190CQlsb2NrOworCXNwaW5sb2NrX3QJCWlycV9sb2NrOwogCXZvaWQgX19pb21lbQkJKnJlZ3M7CiAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNnOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oIGIvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCmluZGV4IDlmMzIyNzAuLjBjOGNiZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKQEAgLTE2Niw3ICsxNjYsNiBAQAogICogc3RydWN0IG1tY19zbG90IC0gTU1DIHNsb3QgZnVuY3Rpb25zCiAgKgogICogQGNkX2lycToJCU1NQy9TRC1jYXJkIHNsb3QgaG90cGx1ZyBkZXRlY3Rpb24gSVJRIG9yIC1FSU5WQUwKLSAqIEBsb2NrOgkJcHJvdGVjdCB0aGUgQGhhbmRsZXJfcHJpdiBwb2ludGVyCiAgKiBAaGFuZGxlcl9wcml2OglNTUMvU0QtY2FyZCBzbG90IGNvbnRleHQKICAqCiAgKiBTb21lIE1NQy9TRCBob3N0IGNvbnRyb2xsZXJzIGltcGxlbWVudCBzbG90LWZ1bmN0aW9ucyBsaWtlIGNhcmQgYW5kCkBAIC0xNzYsNyArMTc1LDYgQEAKICAqLwogc3RydWN0IG1tY19zbG90IHsKIAlpbnQgY2RfaXJxOwotCXN0cnVjdCBtdXRleCBsb2NrOwogCXZvaWQgKmhhbmRsZXJfcHJpdjsKIH07CiAKQEAgLTE5Nyw2ICsxOTUsNyBAQAogfTsKIAogc3RydWN0IHJlZ3VsYXRvcjsKK3N0cnVjdCBtbWNfcHdyc2VxOwogCiBzdHJ1Y3QgbW1jX3N1cHBseSB7CiAJc3RydWN0IHJlZ3VsYXRvciAqdm1tYzsJCS8qIENhcmQgcG93ZXIgc3VwcGx5ICovCkBAIC0yMDgsNiArMjA3LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlCQljbGFzc19kZXY7CiAJaW50CQkJaW5kZXg7CiAJY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyAqb3BzOworCXN0cnVjdCBtbWNfcHdyc2VxCSpwd3JzZXE7CiAJdW5zaWduZWQgaW50CQlmX21pbjsKIAl1bnNpZ25lZCBpbnQJCWZfbWF4OwogCXVuc2lnbmVkIGludAkJZl9pbml0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvbW1jLmggYi9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaAppbmRleCA0OWFkN2E5Li4xMjRmNTYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaApAQCAtNTMsMTEgKzUzLDYgQEAKICNkZWZpbmUgTU1DX1NFTkRfVFVOSU5HX0JMT0NLICAgIDE5ICAgLyogYWR0YyAgICAgICAgICAgICAgICAgICAgUjEgICovCiAjZGVmaW5lIE1NQ19TRU5EX1RVTklOR19CTE9DS19IUzIwMAkyMQkvKiBhZHRjIFIxICAqLwogCi0jZGVmaW5lIE1NQ19UVU5JTkdfQkxLX1BBVFRFUk5fNEJJVF9TSVpFCSA2NAotI2RlZmluZSBNTUNfVFVOSU5HX0JMS19QQVRURVJOXzhCSVRfU0laRQkxMjgKLWV4dGVybiBjb25zdCB1OCB0dW5pbmdfYmxrX3BhdHRlcm5fNGJpdFtNTUNfVFVOSU5HX0JMS19QQVRURVJOXzRCSVRfU0laRV07Ci1leHRlcm4gY29uc3QgdTggdHVuaW5nX2Jsa19wYXR0ZXJuXzhiaXRbTU1DX1RVTklOR19CTEtfUEFUVEVSTl84QklUX1NJWkVdOwotCiAgIC8qIGNsYXNzIDMgKi8KICNkZWZpbmUgTU1DX1dSSVRFX0RBVF9VTlRJTF9TVE9QIDIwICAgLyogYWR0YyBbMzE6MF0gZGF0YSBhZGRyICAgUjEgICovCiAKQEAgLTQzMyw2ICs0MjgsMTEgQEAKICNkZWZpbmUgRVhUX0NTRF9CS09QU19MRVZFTF8yCQkweDIKIAogLyoKKyAqIEJLT1BTIG1vZGVzCisgKi8KKyNkZWZpbmUgRVhUX0NTRF9NQU5VQUxfQktPUFNfTUFTSwkweDAxCisKKy8qCiAgKiBNTUNfU1dJVENIIGFjY2VzcyBtb2RlcwogICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3NkaGNpLmggYi9pbmNsdWRlL2xpbnV4L21tYy9zZGhjaS5oCmluZGV4IGY3NjdhMGQuLmMzZTNkYjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL3NkaGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvc2RoY2kuaApAQCAtMTcsNiArMTcsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAKK3N0cnVjdCBzZGhjaV9ob3N0X25leHQgeworCXVuc2lnbmVkIGludAlzZ19jb3VudDsKKwlzMzIJCWNvb2tpZTsKK307CisKIHN0cnVjdCBzZGhjaV9ob3N0IHsKIAkvKiBEYXRhIHNldCBieSBoYXJkd2FyZSBpbnRlcmZhY2UgZHJpdmVyICovCiAJY29uc3QgY2hhciAqaHdfbmFtZTsJLyogSGFyZHdhcmUgYnVzIG5hbWUgKi8KQEAgLTEwNiw2ICsxMTEsMTAgQEAKICNkZWZpbmUgU0RIQ0lfUVVJUksyX0NMRUFSX1RSQU5TRkVSTU9ERV9SRUdfQkVGT1JFX0NNRAkoMTw8MTApCiAvKiBDYXBhYmlsaXR5IHJlZ2lzdGVyIGJpdC02MyBpbmRpY2F0ZXMgSFM0MDAgc3VwcG9ydCAqLwogI2RlZmluZSBTREhDSV9RVUlSSzJfQ0FQU19CSVQ2M19GT1JfSFM0MDAJCSgxPDwxMSkKKy8qIGZvcmNlZCB0dW5lZCBjbG9jayAqLworI2RlZmluZSBTREhDSV9RVUlSSzJfVFVOSU5HX1dPUktfQVJPVU5ECQkJKDE8PDEyKQorLyogZGlzYWJsZSB0aGUgYmxvY2sgY291bnQgZm9yIHNpbmdsZSBibG9jayB0cmFuc2FjdGlvbnMgKi8KKyNkZWZpbmUgU0RIQ0lfUVVJUksyX1NVUFBPUlRfU0lOR0xFCQkJKDE8PDEzKQogCiAJaW50IGlycTsJCS8qIERldmljZSBJUlEgKi8KIAl2b2lkIF9faW9tZW0gKmlvYWRkcjsJLyogTWFwcGVkIGFkZHJlc3MgKi8KQEAgLTIwMyw2ICsyMTIsNyBAQAogI2RlZmluZSBTREhDSV9UVU5JTkdfTU9ERV8xCTAKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0dW5pbmdfdGltZXI7CS8qIFRpbWVyIGZvciB0dW5pbmcgKi8KIAorCXN0cnVjdCBzZGhjaV9ob3N0X25leHQJbmV4dF9kYXRhOwogCXVuc2lnbmVkIGxvbmcgcHJpdmF0ZVswXSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiB9OwogI2VuZGlmIC8qIExJTlVYX01NQ19TREhDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2lkcy5oIGIvaW5jbHVkZS9saW51eC9tbWMvc2Rpb19pZHMuaAppbmRleCAwZjAxZmUwLi45OTY4MDc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL3NkaW9faWRzLmgKQEAgLTI0LDEzICsyNCwxNSBAQAogICogVmVuZG9ycyBhbmQgZGV2aWNlcy4gIFNvcnQga2V5OiB2ZW5kb3IgZmlyc3QsIGRldmljZSBuZXh0LgogICovCiAjZGVmaW5lIFNESU9fVkVORE9SX0lEX0JST0FEQ09NCQkJMHgwMmQwCi0jZGVmaW5lIFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMTQzCQk0MzE0MworI2RlZmluZSBTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzE0MwkJMHhhODg3CiAjZGVmaW5lIFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMjQxCQkweDQzMjQKICNkZWZpbmUgU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMyOQkJMHg0MzI5CiAjZGVmaW5lIFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMzAJCTB4NDMzMAogI2RlZmluZSBTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzM0CQkweDQzMzQKKyNkZWZpbmUgU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMzNDAJCTB4YTk0YworI2RlZmluZSBTRElPX0RFVklDRV9JRF9CUk9BRENPTV80MzM0MQkJMHhhOTRkCiAjZGVmaW5lIFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMzVfNDMzOQkweDQzMzUKLSNkZWZpbmUgU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDMzNjIJCTQzMzYyCisjZGVmaW5lIFNESU9fREVWSUNFX0lEX0JST0FEQ09NXzQzMzYyCQkweGE5NjIKICNkZWZpbmUgU0RJT19ERVZJQ0VfSURfQlJPQURDT01fNDM1NAkJMHg0MzU0CiAKICNkZWZpbmUgU0RJT19WRU5ET1JfSURfSU5URUwJCQkweDAwODkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3NoX21vYmlsZV9zZGhpLmggYi9pbmNsdWRlL2xpbnV4L21tYy9zaF9tb2JpbGVfc2RoaS5oCmluZGV4IDY4OTI3YWUuLmRhNzdlNWUyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvc2hfbW9iaWxlX3NkaGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9zaF9tb2JpbGVfc2RoaS5oCkBAIC0zLDIwICszLDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwotCiAjZGVmaW5lIFNIX01PQklMRV9TREhJX0lSUV9DQVJEX0RFVEVDVAkiY2FyZF9kZXRlY3QiCiAjZGVmaW5lIFNIX01PQklMRV9TREhJX0lSUV9TRENBUkQJInNkY2FyZCIKICNkZWZpbmUgU0hfTU9CSUxFX1NESElfSVJRX1NESU8JCSJzZGlvIgogCi0vKioKLSAqIHN0cnVjdCBzaF9tb2JpbGVfc2RoaV9vcHMgLSBTREhJIGRyaXZlciBjYWxsYmFja3MKLSAqIEBjZF93YWtldXA6CQl0cmlnZ2VyIGEgY2FyZC1kZXRlY3Rpb24gcnVuCi0gKi8KLXN0cnVjdCBzaF9tb2JpbGVfc2RoaV9vcHMgewotCXZvaWQgKCpjZF93YWtldXApKGNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwotfTsKLQogc3RydWN0IHNoX21vYmlsZV9zZGhpX2luZm8gewogCWludCBkbWFfc2xhdmVfdHg7CiAJaW50IGRtYV9zbGF2ZV9yeDsKQEAgLTI1LDExICsxNSw2IEBACiAJdW5zaWduZWQgbG9uZyB0bWlvX2NhcHMyOwogCXUzMiB0bWlvX29jcl9tYXNrOwkvKiBhdmFpbGFibGUgTU1DIHZvbHRhZ2VzICovCiAJdW5zaWduZWQgaW50IGNkX2dwaW87Ci0KLQkvKiBjYWxsYmFja3MgZm9yIGJvYXJkIHNwZWNpZmljIHNldHVwIGNvZGUgKi8KLQlpbnQgKCppbml0KShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICAgY29uc3Qgc3RydWN0IHNoX21vYmlsZV9zZGhpX29wcyAqb3BzKTsKLQl2b2lkICgqY2xlYW51cCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiB9OwogCiAjZW5kaWYgLyogTElOVVhfTU1DX1NIX01PQklMRV9TREhJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3Nsb3QtZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9tbWMvc2xvdC1ncGlvLmgKaW5kZXggZTU2ZmEyNC4uMzk0NWE4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvc2xvdC1ncGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvc2xvdC1ncGlvLmgKQEAgLTE1LDEyICsxNSwxMCBAQAogCiBpbnQgbW1jX2dwaW9fZ2V0X3JvKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CiBpbnQgbW1jX2dwaW9fcmVxdWVzdF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBncGlvKTsKLXZvaWQgbW1jX2dwaW9fZnJlZV9ybyhzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwogCiBpbnQgbW1jX2dwaW9fZ2V0X2NkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CiBpbnQgbW1jX2dwaW9fcmVxdWVzdF9jZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGludCBncGlvLAogCQkJdW5zaWduZWQgaW50IGRlYm91bmNlKTsKLXZvaWQgbW1jX2dwaW9fZnJlZV9jZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOwogCiBpbnQgbW1jX2dwaW9kX3JlcXVlc3RfY2Qoc3RydWN0IG1tY19ob3N0ICpob3N0LCBjb25zdCBjaGFyICpjb25faWQsCiAJCQkgdW5zaWduZWQgaW50IGlkeCwgYm9vbCBvdmVycmlkZV9hY3RpdmVfbGV2ZWwsCkBAIC0yOCw3ICsyNiw4IEBACiBpbnQgbW1jX2dwaW9kX3JlcXVlc3Rfcm8oc3RydWN0IG1tY19ob3N0ICpob3N0LCBjb25zdCBjaGFyICpjb25faWQsCiAJCQkgdW5zaWduZWQgaW50IGlkeCwgYm9vbCBvdmVycmlkZV9hY3RpdmVfbGV2ZWwsCiAJCQkgdW5zaWduZWQgaW50IGRlYm91bmNlLCBib29sICpncGlvX2ludmVydCk7Ci12b2lkIG1tY19ncGlvZF9mcmVlX2NkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7Cit2b2lkIG1tY19ncGlvX3NldF9jZF9pc3Ioc3RydWN0IG1tY19ob3N0ICpob3N0LAorCQkJIGlycXJldHVybl90ICgqaXNyKShpbnQgaXJxLCB2b2lkICpkZXZfaWQpKTsKIHZvaWQgbW1jX2dwaW9kX3JlcXVlc3RfY2RfaXJxKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKaW5kZXggMmYwODU2ZC4uZjI3OWQ5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCkBAIC00MjYsNyArNDI2LDcgQEAKIAljb25zdCBjaGFyCQkqbmFtZTsKIAogCS8qCi0JICogTnVtYmVyIG9mIE1JR1JBVEVfUkVTRVZFIHBhZ2UgYmxvY2suIFRvIG1haW50YWluIGZvciBqdXN0CisJICogTnVtYmVyIG9mIE1JR1JBVEVfUkVTRVJWRSBwYWdlIGJsb2NrLiBUbyBtYWludGFpbiBmb3IganVzdAogCSAqIG9wdGltaXphdGlvbi4gUHJvdGVjdGVkIGJ5IHpvbmUtPmxvY2suCiAJICovCiAJaW50CQkJbnJfbWlncmF0ZV9yZXNlcnZlX2Jsb2NrOwpAQCAtOTcwLDcgKzk3MCw2IEBACiAgKiBAeiAtIFRoZSBjdXJzb3IgdXNlZCBhcyBhIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgc2VhcmNoCiAgKiBAaGlnaGVzdF96b25laWR4IC0gVGhlIHpvbmUgaW5kZXggb2YgdGhlIGhpZ2hlc3Qgem9uZSB0byByZXR1cm4KICAqIEBub2RlcyAtIEFuIG9wdGlvbmFsIG5vZGVtYXNrIHRvIGZpbHRlciB0aGUgem9uZWxpc3Qgd2l0aAotICogQHpvbmUgLSBUaGUgZmlyc3Qgc3VpdGFibGUgem9uZSBmb3VuZCBpcyByZXR1cm5lZCB2aWEgdGhpcyBwYXJhbWV0ZXIKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG5leHQgem9uZSBhdCBvciBiZWxvdyBhIGdpdmVuIHpvbmUgaW5kZXggdGhhdCBpcwogICogd2l0aGluIHRoZSBhbGxvd2VkIG5vZGVtYXNrIHVzaW5nIGEgY3Vyc29yIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdGhlCkBAIC05ODAsOCArOTc5LDcgQEAKICAqLwogc3RydWN0IHpvbmVyZWYgKm5leHRfem9uZXNfem9uZWxpc3Qoc3RydWN0IHpvbmVyZWYgKnosCiAJCQkJCWVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeCwKLQkJCQkJbm9kZW1hc2tfdCAqbm9kZXMsCi0JCQkJCXN0cnVjdCB6b25lICoqem9uZSk7CisJCQkJCW5vZGVtYXNrX3QgKm5vZGVzKTsKIAogLyoqCiAgKiBmaXJzdF96b25lc196b25lbGlzdCAtIFJldHVybnMgdGhlIGZpcnN0IHpvbmUgYXQgb3IgYmVsb3cgaGlnaGVzdF96b25laWR4IHdpdGhpbiB0aGUgYWxsb3dlZCBub2RlbWFzayBpbiBhIHpvbmVsaXN0CkBAIC0xMDAwLDggKzk5OCwxMCBAQAogCQkJCQlub2RlbWFza190ICpub2RlcywKIAkJCQkJc3RydWN0IHpvbmUgKip6b25lKQogewotCXJldHVybiBuZXh0X3pvbmVzX3pvbmVsaXN0KHpvbmVsaXN0LT5fem9uZXJlZnMsIGhpZ2hlc3Rfem9uZWlkeCwgbm9kZXMsCi0JCQkJCQkJCXpvbmUpOworCXN0cnVjdCB6b25lcmVmICp6ID0gbmV4dF96b25lc196b25lbGlzdCh6b25lbGlzdC0+X3pvbmVyZWZzLAorCQkJCQkJCWhpZ2hlc3Rfem9uZWlkeCwgbm9kZXMpOworCSp6b25lID0gem9uZWxpc3Rfem9uZSh6KTsKKwlyZXR1cm4gejsKIH0KIAogLyoqCkBAIC0xMDE4LDcgKzEwMTgsOCBAQAogI2RlZmluZSBmb3JfZWFjaF96b25lX3pvbmVsaXN0X25vZGVtYXNrKHpvbmUsIHosIHpsaXN0LCBoaWdoaWR4LCBub2RlbWFzaykgXAogCWZvciAoeiA9IGZpcnN0X3pvbmVzX3pvbmVsaXN0KHpsaXN0LCBoaWdoaWR4LCBub2RlbWFzaywgJnpvbmUpOwlcCiAJCXpvbmU7CQkJCQkJCVwKLQkJeiA9IG5leHRfem9uZXNfem9uZWxpc3QoKyt6LCBoaWdoaWR4LCBub2RlbWFzaywgJnpvbmUpKQlcCisJCXogPSBuZXh0X3pvbmVzX3pvbmVsaXN0KCsreiwgaGlnaGlkeCwgbm9kZW1hc2spLAlcCisJCQl6b25lID0gem9uZWxpc3Rfem9uZSh6KSkJCQlcCiAKIC8qKgogICogZm9yX2VhY2hfem9uZV96b25lbGlzdCAtIGhlbHBlciBtYWNybyB0byBpdGVyYXRlIG92ZXIgdmFsaWQgem9uZXMgaW4gYSB6b25lbGlzdCBhdCBvciBiZWxvdyBhIGdpdmVuIHpvbmUgaW5kZXgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2X2ZlYXR1cmVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldl9mZWF0dXJlcy5oCmluZGV4IDhlMzA2ODUuLjdkNTlkYzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2X2ZlYXR1cmVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZfZmVhdHVyZXMuaApAQCAtNjYsNiArNjYsNyBAQAogCU5FVElGX0ZfSFdfVkxBTl9TVEFHX0ZJTFRFUl9CSVQsLyogUmVjZWl2ZSBmaWx0ZXJpbmcgb24gVkxBTiBTVEFHcyAqLwogCU5FVElGX0ZfSFdfTDJGV19ET0ZGTE9BRF9CSVQsCS8qIEFsbG93IEwyIEZvcndhcmRpbmcgaW4gSGFyZHdhcmUgKi8KIAlORVRJRl9GX0JVU1lfUE9MTF9CSVQsCQkvKiBCdXN5IHBvbGwgKi8KKwlORVRJRl9GX0hXX1NXSVRDSF9PRkZMT0FEX0JJVCwgIC8qIEhXIHN3aXRjaCBvZmZsb2FkICovCiAKIAkvKgogCSAqIEFkZCB5b3VyIGZyZXNoIG5ldyBmZWF0dXJlIGFib3ZlIGFuZCByZW1lbWJlciB0byB1cGRhdGUKQEAgLTEyNCw2ICsxMjUsNyBAQAogI2RlZmluZSBORVRJRl9GX0hXX1ZMQU5fU1RBR19UWAlfX05FVElGX0YoSFdfVkxBTl9TVEFHX1RYKQogI2RlZmluZSBORVRJRl9GX0hXX0wyRldfRE9GRkxPQUQJX19ORVRJRl9GKEhXX0wyRldfRE9GRkxPQUQpCiAjZGVmaW5lIE5FVElGX0ZfQlVTWV9QT0xMCV9fTkVUSUZfRihCVVNZX1BPTEwpCisjZGVmaW5lIE5FVElGX0ZfSFdfU1dJVENIX09GRkxPQUQJX19ORVRJRl9GKEhXX1NXSVRDSF9PRkZMT0FEKQogCiAvKiBGZWF0dXJlcyB2YWxpZCBmb3IgZXRodG9vbCB0byBjaGFuZ2UgKi8KIC8qID0gYWxsIGRlZmluZWQgbWludXMgZHJpdmVyL2RldmljZS1jbGFzcy1yZWxhdGVkICovCkBAIC0xNTksNyArMTYxLDkgQEAKICAqLwogI2RlZmluZSBORVRJRl9GX09ORV9GT1JfQUxMCShORVRJRl9GX0dTT19TT0ZUV0FSRSB8IE5FVElGX0ZfR1NPX1JPQlVTVCB8IFwKIAkJCQkgTkVUSUZfRl9TRyB8IE5FVElGX0ZfSElHSERNQSB8CQlcCi0JCQkJIE5FVElGX0ZfRlJBR0xJU1QgfCBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRCkKKwkJCQkgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEIHwgXAorCQkJCSBORVRJRl9GX0hXX1NXSVRDSF9PRkZMT0FEKQorCiAvKgogICogSWYgb25lIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgb25lIG9mIHRoZXNlIGZlYXR1cmVzLCB0aGVuIGRpc2FibGUgaXQKICAqIGZvciBhbGwgaW4gbmV0ZGV2X2luY3JlbWVudF9mZWF0dXJlcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCmluZGV4IDUyZmQ4ZTguLmQxMTUyNTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldl9mZWF0dXJlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25laWdoYm91ci5oPgogI2luY2x1ZGUgPHVhcGkvbGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8dWFwaS9saW51eC9pZl9ib25kaW5nLmg+CiAKIHN0cnVjdCBuZXRwb2xsX2luZm87CiBzdHJ1Y3QgZGV2aWNlOwpAQCAtNjQzLDM5ICs2NDQsNDAgQEAKIC8qCiAgKiBUaGUgcnBzX3NvY2tfZmxvd190YWJsZSBjb250YWlucyBtYXBwaW5ncyBvZiBmbG93cyB0byB0aGUgbGFzdCBDUFUKICAqIG9uIHdoaWNoIHRoZXkgd2VyZSBwcm9jZXNzZWQgYnkgdGhlIGFwcGxpY2F0aW9uIChzZXQgaW4gcmVjdm1zZykuCisgKiBFYWNoIGVudHJ5IGlzIGEgMzJiaXQgdmFsdWUuIFVwcGVyIHBhcnQgaXMgdGhlIGhpZ2ggb3JkZXIgYml0cworICogb2YgZmxvdyBoYXNoLCBsb3dlciBwYXJ0IGlzIGNwdSBudW1iZXIuCisgKiBycHNfY3B1X21hc2sgaXMgdXNlZCB0byBwYXJ0aXRpb24gdGhlIHNwYWNlLCBkZXBlbmRpbmcgb24gbnVtYmVyIG9mCisgKiBwb3NzaWJsZSBjcHVzIDogcnBzX2NwdV9tYXNrID0gcm91bmR1cF9wb3dfb2ZfdHdvKG5yX2NwdV9pZHMpIC0gMQorICogRm9yIGV4YW1wbGUsIGlmIDY0IGNwdXMgYXJlIHBvc3NpYmxlLCBycHNfY3B1X21hc2sgPSAweDNmLAorICogbWVhbmluZyB3ZSB1c2UgMzItNj0yNiBiaXRzIGZvciB0aGUgaGFzaC4KICAqLwogc3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgewotCXVuc2lnbmVkIGludCBtYXNrOwotCXUxNiBlbnRzWzBdOworCXUzMgltYXNrOworCisJdTMyCWVudHNbMF0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIH07Ci0jZGVmaW5lCVJQU19TT0NLX0ZMT1dfVEFCTEVfU0laRShfbnVtKSAoc2l6ZW9mKHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlKSArIFwKLSAgICAoKF9udW0pICogc2l6ZW9mKHUxNikpKQorI2RlZmluZQlSUFNfU09DS19GTE9XX1RBQkxFX1NJWkUoX251bSkgKG9mZnNldG9mKHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlLCBlbnRzW19udW1dKSkKIAogI2RlZmluZSBSUFNfTk9fQ1BVIDB4ZmZmZgogCitleHRlcm4gdTMyIHJwc19jcHVfbWFzazsKK2V4dGVybiBzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSBfX3JjdSAqcnBzX3NvY2tfZmxvd190YWJsZTsKKwogc3RhdGljIGlubGluZSB2b2lkIHJwc19yZWNvcmRfc29ja19mbG93KHN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlICp0YWJsZSwKIAkJCQkJdTMyIGhhc2gpCiB7CiAJaWYgKHRhYmxlICYmIGhhc2gpIHsKLQkJdW5zaWduZWQgaW50IGNwdSwgaW5kZXggPSBoYXNoICYgdGFibGUtPm1hc2s7CisJCXVuc2lnbmVkIGludCBpbmRleCA9IGhhc2ggJiB0YWJsZS0+bWFzazsKKwkJdTMyIHZhbCA9IGhhc2ggJiB+cnBzX2NwdV9tYXNrOwogCiAJCS8qIFdlIG9ubHkgZ2l2ZSBhIGhpbnQsIHByZWVtcHRpb24gY2FuIGNoYW5nZSBjcHUgdW5kZXIgdXMgKi8KLQkJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKKwkJdmFsIHw9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7CiAKLQkJaWYgKHRhYmxlLT5lbnRzW2luZGV4XSAhPSBjcHUpCi0JCQl0YWJsZS0+ZW50c1tpbmRleF0gPSBjcHU7CisJCWlmICh0YWJsZS0+ZW50c1tpbmRleF0gIT0gdmFsKQorCQkJdGFibGUtPmVudHNbaW5kZXhdID0gdmFsOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJwc19yZXNldF9zb2NrX2Zsb3coc3RydWN0IHJwc19zb2NrX2Zsb3dfdGFibGUgKnRhYmxlLAotCQkJCSAgICAgICB1MzIgaGFzaCkKLXsKLQlpZiAodGFibGUgJiYgaGFzaCkKLQkJdGFibGUtPmVudHNbaGFzaCAmIHRhYmxlLT5tYXNrXSA9IFJQU19OT19DUFU7Ci19Ci0KLWV4dGVybiBzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSBfX3JjdSAqcnBzX3NvY2tfZmxvd190YWJsZTsKLQogI2lmZGVmIENPTkZJR19SRlNfQUNDRUwKIGJvb2wgcnBzX21heV9leHBpcmVfZmxvdyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcnhxX2luZGV4LCB1MzIgZmxvd19pZCwKIAkJCSB1MTYgZmlsdGVyX2lkKTsKQEAgLTExNTQsMTMgKzExNTYsMTUgQEAKIAkJCQkJCWludCBpZHgpOwogCiAJaW50CQkJKCpuZG9fYnJpZGdlX3NldGxpbmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCQkgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCk7CisJCQkJCQkgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJCQkJCSAgICAgIHUxNiBmbGFncyk7CiAJaW50CQkJKCpuZG9fYnJpZGdlX2dldGxpbmspKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCQkgICAgICB1MzIgcGlkLCB1MzIgc2VxLAogCQkJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCSAgICAgIHUzMiBmaWx0ZXJfbWFzayk7CiAJaW50CQkJKCpuZG9fYnJpZGdlX2RlbGxpbmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCQkgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCk7CisJCQkJCQkgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKKwkJCQkJCSAgICAgIHUxNiBmbGFncyk7CiAJaW50CQkJKCpuZG9fY2hhbmdlX2NhcnJpZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICAgICBib29sIG5ld19jYXJyaWVyKTsKIAlpbnQJCQkoKm5kb19nZXRfcGh5c19wb3J0X2lkKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMTUxNCw2ICsxNTE4LDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5hcGlfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXVucmVnX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAljbG9zZV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJcHR5cGVfYWxsOworCXN0cnVjdCBsaXN0X2hlYWQJcHR5cGVfc3BlY2lmaWM7CiAKIAlzdHJ1Y3QgewogCQlzdHJ1Y3QgbGlzdF9oZWFkIHVwcGVyOwpAQCAtMTk2OSw3ICsxOTc1LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZgkJKigqZ3NvX3NlZ21lbnQpKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCQluZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyk7CiAJc3RydWN0IHNrX2J1ZmYJCSoqKCpncm9fcmVjZWl2ZSkoc3RydWN0IHNrX2J1ZmYgKipoZWFkLAotCQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJaW50CQkJKCpncm9fY29tcGxldGUpKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaG9mZik7CiB9OwogCkBAIC0xOTc5LDEwICsxOTg1LDIxIEBACiAJc3RydWN0IGxpc3RfaGVhZAkgbGlzdDsKIH07CiAKK3N0cnVjdCB1ZHBfb2ZmbG9hZDsKKworc3RydWN0IHVkcF9vZmZsb2FkX2NhbGxiYWNrcyB7CisJc3RydWN0IHNrX2J1ZmYJCSoqKCpncm9fcmVjZWl2ZSkoc3RydWN0IHNrX2J1ZmYgKipoZWFkLAorCQkJCQkJIHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCQkgc3RydWN0IHVkcF9vZmZsb2FkICp1b2ZmKTsKKwlpbnQJCQkoKmdyb19jb21wbGV0ZSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJCWludCBuaG9mZiwKKwkJCQkJCXN0cnVjdCB1ZHBfb2ZmbG9hZCAqdW9mZik7Cit9OworCiBzdHJ1Y3QgdWRwX29mZmxvYWQgewogCV9fYmUxNgkJCSBwb3J0OwogCXU4CQkJIGlwcHJvdG87Ci0Jc3RydWN0IG9mZmxvYWRfY2FsbGJhY2tzIGNhbGxiYWNrczsKKwlzdHJ1Y3QgdWRwX29mZmxvYWRfY2FsbGJhY2tzIGNhbGxiYWNrczsKIH07CiAKIC8qIG9mdGVuIG1vZGlmaWVkIHN0YXRzIGFyZSBwZXIgY3B1LCBvdGhlciBhcmUgc2hhcmVkIChuZXRkZXYtPnN0YXRzKSAqLwpAQCAtMjA0MSw2ICsyMDU4LDcgQEAKICNkZWZpbmUgTkVUREVWX1JFU0VORF9JR01QCTB4MDAxNgogI2RlZmluZSBORVRERVZfUFJFQ0hBTkdFTVRVCTB4MDAxNyAvKiBub3RpZnkgYmVmb3JlIG10dSBjaGFuZ2UgaGFwcGVuZWQgKi8KICNkZWZpbmUgTkVUREVWX0NIQU5HRUlORk9EQVRBCTB4MDAxOAorI2RlZmluZSBORVRERVZfQk9ORElOR19JTkZPCTB4MDAxOQogCiBpbnQgcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogaW50IHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwpAQCAtMjMwMyw2ICsyMzIxLDIxIEBACiAJCQkJCSAgIGNvbXB1dGVfcHNldWRvKHNrYiwgcHJvdG8pKTsJXAogfSB3aGlsZSAoMCkKIAorc3RhdGljIGlubGluZSB2b2lkIHNrYl9ncm9fcmVtY3N1bV9wcm9jZXNzKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKnB0ciwKKwkJCQkJICAgaW50IHN0YXJ0LCBpbnQgb2Zmc2V0KQoreworCV9fd3N1bSBkZWx0YTsKKworCUJVR19PTighTkFQSV9HUk9fQ0Ioc2tiKS0+Y3N1bV92YWxpZCk7CisKKwlkZWx0YSA9IHJlbWNzdW1fYWRqdXN0KHB0ciwgTkFQSV9HUk9fQ0Ioc2tiKS0+Y3N1bSwgc3RhcnQsIG9mZnNldCk7CisKKwkvKiBBZGp1c3Qgc2tiLT5jc3VtIHNpbmNlIHdlIGNoYW5nZWQgdGhlIHBhY2tldCAqLworCXNrYi0+Y3N1bSA9IGNzdW1fYWRkKHNrYi0+Y3N1bSwgZGVsdGEpOworCU5BUElfR1JPX0NCKHNrYiktPmNzdW0gPSBjc3VtX2FkZChOQVBJX0dST19DQihza2IpLT5jc3VtLCBkZWx0YSk7Cit9CisKKwogc3RhdGljIGlubGluZSBpbnQgZGV2X2hhcmRfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICB1bnNpZ25lZCBzaG9ydCB0eXBlLAogCQkJCSAgY29uc3Qgdm9pZCAqZGFkZHIsIGNvbnN0IHZvaWQgKnNhZGRyLApAQCAtMzQ2NCw2ICszNDk3LDE5IEBACiBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX21hY19nc29fc2VnbWVudChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyk7CiAKK3N0cnVjdCBuZXRkZXZfYm9uZGluZ19pbmZvIHsKKwlpZnNsYXZlCXNsYXZlOworCWlmYm9uZAltYXN0ZXI7Cit9OworCitzdHJ1Y3QgbmV0ZGV2X25vdGlmaWVyX2JvbmRpbmdfaW5mbyB7CisJc3RydWN0IG5ldGRldl9ub3RpZmllcl9pbmZvIGluZm87IC8qIG11c3QgYmUgZmlyc3QgKi8KKwlzdHJ1Y3QgbmV0ZGV2X2JvbmRpbmdfaW5mbyAgYm9uZGluZ19pbmZvOworfTsKKwordm9pZCBuZXRkZXZfYm9uZGluZ19pbmZvX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBuZXRkZXZfYm9uZGluZ19pbmZvICpib25kaW5nX2luZm8pOworCiBzdGF0aWMgaW5saW5lCiBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2dzb19zZWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnM0LmggYi9pbmNsdWRlL2xpbnV4L25mczQuaAppbmRleCAwMjJiNzYxLi5kZTdjOTFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mczQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mczQuaApAQCAtNTE2LDYgKzUxNiw3IEBACiAJTEFZT1VUX05GU1Y0XzFfRklMRVMgID0gMSwKIAlMQVlPVVRfT1NEMl9PQkpFQ1RTID0gMiwKIAlMQVlPVVRfQkxPQ0tfVk9MVU1FID0gMywKKwlMQVlPVVRfRkxFWF9GSUxFUyA9IDQsCiB9OwogCiAvKiB1c2VkIGZvciBib3RoIGxheW91dCByZXR1cm4gYW5kIHJlY2FsbCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKaW5kZXggZGRlYTk4Mi4uNWUxMjczZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCkBAIC03NywxMCArNzcsNiBAQAogCS8qIENsaWVudCBvd25lciBpZGVudGlmaWVyICovCiAJY29uc3QgY2hhciAqCQljbF9vd25lcl9pZDsKIAotCS8qIE91ciBvd24gSVAgYWRkcmVzcywgYXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgotCSAqIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgbXYwIGNhbGxiYWNrIGFkZHJlc3MuCi0JICovCi0JY2hhcgkJCWNsX2lwYWRkcls0OF07CiAJdTMyCQkJY2xfY2JfaWRlbnQ7CS8qIHY0LjAgY2FsbGJhY2sgaWRlbnRpZmllciAqLwogCWNvbnN0IHN0cnVjdCBuZnM0X21pbm9yX3ZlcnNpb25fb3BzICpjbF9tdm9wczsKIAl1bnNpZ25lZCBsb25nCQljbF9taWdfZ2VuOwpAQCAtMTA4LDYgKzEwNCwxMSBAQAogI2RlZmluZSBORlNfU1A0X01BQ0hfQ1JFRF9DT01NSVQgICA2CS8qIENPTU1JVCAqLwogI2VuZGlmIC8qIENPTkZJR19ORlNfVjQgKi8KIAorCS8qIE91ciBvd24gSVAgYWRkcmVzcywgYXMgYSBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgorCSAqIFRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgbXYwIGNhbGxiYWNrIGFkZHJlc3MuCisJICovCisJY2hhcgkJCWNsX2lwYWRkcls0OF07CisKICNpZmRlZiBDT05GSUdfTkZTX0ZTQ0FDSEUKIAlzdHJ1Y3QgZnNjYWNoZV9jb29raWUJKmZzY2FjaGU7CS8qIGNsaWVudCBpbmRleCBjYWNoZSBjb29raWUgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfaWRtYXAuaCBiL2luY2x1ZGUvbGludXgvbmZzX2lkbWFwLmgKaW5kZXggMGY0Yjc5ZC4uMzMzODQ0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfaWRtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19pZG1hcC5oCkBAIC03Myw1ICs3Myw3IEBACiBpbnQgbmZzX21hcF91aWRfdG9fbmFtZShjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqLCBrdWlkX3QsIGNoYXIgKiwgc2l6ZV90KTsKIGludCBuZnNfbWFwX2dpZF90b19ncm91cChjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqLCBrZ2lkX3QsIGNoYXIgKiwgc2l6ZV90KTsKIAoraW50IG5mc19tYXBfc3RyaW5nX3RvX251bWVyaWMoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVsZW4sIF9fdTMyICpyZXMpOworCiBleHRlcm4gdW5zaWduZWQgaW50IG5mc19pZG1hcF9jYWNoZV90aW1lb3V0OwogI2VuZGlmIC8qIE5GU19JRE1BUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19wYWdlLmggYi9pbmNsdWRlL2xpbnV4L25mc19wYWdlLmgKaW5kZXggNmMzZTA2ZS4uM2ViMDcyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfcGFnZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX3BhZ2UuaApAQCAtNTgsNiArNTgsOSBAQAogCXNpemVfdAkoKnBnX3Rlc3QpKHN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3IgKiwgc3RydWN0IG5mc19wYWdlICosCiAJCQkgICBzdHJ1Y3QgbmZzX3BhZ2UgKik7CiAJaW50CSgqcGdfZG9pbykoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqKTsKKwl1bnNpZ25lZCBpbnQJKCpwZ19nZXRfbWlycm9yX2NvdW50KShzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yICosCisJCQkJICAgICAgIHN0cnVjdCBuZnNfcGFnZSAqKTsKKwl2b2lkCSgqcGdfY2xlYW51cCkoc3RydWN0IG5mc19wYWdlaW9fZGVzY3JpcHRvciAqKTsKIH07CiAKIHN0cnVjdCBuZnNfcndfb3BzIHsKQEAgLTY5LDE4ICs3MiwyMSBAQAogCQkJc3RydWN0IGlub2RlICopOwogCXZvaWQgKCpyd19yZXN1bHQpKHN0cnVjdCBycGNfdGFzayAqLCBzdHJ1Y3QgbmZzX3BnaW9faGVhZGVyICopOwogCXZvaWQgKCpyd19pbml0aWF0ZSkoc3RydWN0IG5mc19wZ2lvX2hlYWRlciAqLCBzdHJ1Y3QgcnBjX21lc3NhZ2UgKiwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmZzX3JwY19vcHMgKiwKIAkJCSAgICBzdHJ1Y3QgcnBjX3Rhc2tfc2V0dXAgKiwgaW50KTsKIH07CiAKLXN0cnVjdCBuZnNfcGFnZWlvX2Rlc2NyaXB0b3Igeworc3RydWN0IG5mc19wZ2lvX21pcnJvciB7CiAJc3RydWN0IGxpc3RfaGVhZAlwZ19saXN0OwogCXVuc2lnbmVkIGxvbmcJCXBnX2J5dGVzX3dyaXR0ZW47CiAJc2l6ZV90CQkJcGdfY291bnQ7CiAJc2l6ZV90CQkJcGdfYnNpemU7CiAJdW5zaWduZWQgaW50CQlwZ19iYXNlOwotCXVuc2lnbmVkIGNoYXIJCXBnX21vcmVpbyA6IDEsCi0JCQkJcGdfcmVjb2FsZXNjZSA6IDE7CisJdW5zaWduZWQgY2hhcgkJcGdfcmVjb2FsZXNjZSA6IDE7Cit9OwogCitzdHJ1Y3QgbmZzX3BhZ2Vpb19kZXNjcmlwdG9yIHsKKwl1bnNpZ25lZCBjaGFyCQlwZ19tb3JlaW8gOiAxOwogCXN0cnVjdCBpbm9kZQkJKnBnX2lub2RlOwogCWNvbnN0IHN0cnVjdCBuZnNfcGFnZWlvX29wcyAqcGdfb3BzOwogCWNvbnN0IHN0cnVjdCBuZnNfcndfb3BzICpwZ19yd19vcHM7CkBAIC05MSw4ICs5NywxOCBAQAogCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICpwZ19sc2VnOwogCXN0cnVjdCBuZnNfZGlyZWN0X3JlcQkqcGdfZHJlcTsKIAl2b2lkCQkJKnBnX2xheW91dF9wcml2YXRlOworCXVuc2lnbmVkIGludAkJcGdfYnNpemU7CS8qIGRlZmF1bHQgYnNpemUgZm9yIG1pcnJvcnMgKi8KKworCXUzMgkJCXBnX21pcnJvcl9jb3VudDsKKwlzdHJ1Y3QgbmZzX3BnaW9fbWlycm9yCSpwZ19taXJyb3JzOworCXN0cnVjdCBuZnNfcGdpb19taXJyb3IJcGdfbWlycm9yc19zdGF0aWNbMV07CisJc3RydWN0IG5mc19wZ2lvX21pcnJvcgkqcGdfbWlycm9yc19keW5hbWljOworCXUzMgkJCXBnX21pcnJvcl9pZHg7CS8qIGN1cnJlbnQgbWlycm9yICovCiB9OwogCisvKiBhcmJpdHJhcmlseSBzZWxlY3RlZCBsaW1pdCB0byBudW1iZXIgb2YgbWlycm9ycyAqLworI2RlZmluZSBORlNfUEFHRUlPX0RFU0NSSVBUT1JfTUlSUk9SX01BWCAxNgorCiAjZGVmaW5lIE5GU19XQkFDS19CVVNZKHJlcSkJKHRlc3RfYml0KFBHX0JVU1ksJihyZXEpLT53Yl9mbGFncykpCiAKIGV4dGVybglzdHJ1Y3QgbmZzX3BhZ2UgKm5mc19jcmVhdGVfcmVxdWVzdChzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmggYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaAppbmRleCA0NjdjODRlLi4zOGQ5NmJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc194ZHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaApAQCAtMjg1LDYgKzI4NSw3IEBACiAJc3RydWN0IG5mc19mYXR0ciBmYXR0cjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxzZWdfbGlzdDsKIAlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQ7CisJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgbmZzNF9sYXlvdXRjb21taXRfYXJncyBhcmdzOwogCXN0cnVjdCBuZnM0X2xheW91dGNvbW1pdF9yZXMgcmVzOwogfTsKQEAgLTI5Myw2ICsyOTQsNyBAQAogCXN0cnVjdCBuZnM0X3NlcXVlbmNlX2FyZ3Mgc2VxX2FyZ3M7CiAJc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbGF5b3V0OwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHBuZnNfbGF5b3V0X3JhbmdlIHJhbmdlOwogCW5mczRfc3RhdGVpZCBzdGF0ZWlkOwogCV9fdTMyICAgbGF5b3V0X3R5cGU7CiB9OwpAQCAtMzA4LDYgKzMxMCw3IEBACiAJc3RydWN0IG5mczRfbGF5b3V0cmV0dXJuX3JlcyByZXM7CiAJc3RydWN0IHJwY19jcmVkICpjcmVkOwogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7CisJc3RydWN0IGlub2RlICppbm9kZTsKIAlpbnQgcnBjX3N0YXR1czsKIH07CiAKQEAgLTMyNSw2ICszMjgsNyBAQAogCXN0cnVjdCBuZnNfc2VxaWQgKglzZXFpZDsKIAlpbnQJCQlvcGVuX2ZsYWdzOwogCWZtb2RlX3QJCQlmbW9kZTsKKwl1MzIJCQlzaGFyZV9hY2Nlc3M7CiAJdTMyCQkJYWNjZXNzOwogCV9fdTY0ICAgICAgICAgICAgICAgICAgIGNsaWVudGlkOwogCXN0cnVjdCBzdGF0ZW93bmVyX2lkCWlkOwpAQCAtMzg5LDkgKzM5MywxMCBAQAogc3RydWN0IG5mc19jbG9zZWFyZ3MgewogCXN0cnVjdCBuZnM0X3NlcXVlbmNlX2FyZ3MJc2VxX2FyZ3M7CiAJc3RydWN0IG5mc19maCAqICAgICAgICAgZmg7Ci0JbmZzNF9zdGF0ZWlkICoJCXN0YXRlaWQ7CisJbmZzNF9zdGF0ZWlkIAkJc3RhdGVpZDsKIAlzdHJ1Y3QgbmZzX3NlcWlkICoJc2VxaWQ7CiAJZm1vZGVfdAkJCWZtb2RlOworCXUzMgkJCXNoYXJlX2FjY2VzczsKIAljb25zdCB1MzIgKgkJYml0bWFzazsKIH07CiAKQEAgLTQxNiwxMiArNDIxLDEzIEBACiAJc3RydWN0IG5mc19maCAqCQlmaDsKIAlzdHJ1Y3QgZmlsZV9sb2NrICoJZmw7CiAJc3RydWN0IG5mc19zZXFpZCAqCWxvY2tfc2VxaWQ7Ci0JbmZzNF9zdGF0ZWlkICoJCWxvY2tfc3RhdGVpZDsKKwluZnM0X3N0YXRlaWQJCWxvY2tfc3RhdGVpZDsKIAlzdHJ1Y3QgbmZzX3NlcWlkICoJb3Blbl9zZXFpZDsKLQluZnM0X3N0YXRlaWQgKgkJb3Blbl9zdGF0ZWlkOworCW5mczRfc3RhdGVpZAkJb3Blbl9zdGF0ZWlkOwogCXN0cnVjdCBuZnNfbG93bmVyCWxvY2tfb3duZXI7CiAJdW5zaWduZWQgY2hhcgkJYmxvY2sgOiAxOwogCXVuc2lnbmVkIGNoYXIJCXJlY2xhaW0gOiAxOworCXVuc2lnbmVkIGNoYXIJCW5ld19sb2NrIDogMTsKIAl1bnNpZ25lZCBjaGFyCQluZXdfbG9ja19vd25lciA6IDE7CiB9OwogCkBAIC00MzcsNyArNDQzLDcgQEAKIAlzdHJ1Y3QgbmZzX2ZoICoJCWZoOwogCXN0cnVjdCBmaWxlX2xvY2sgKglmbDsKIAlzdHJ1Y3QgbmZzX3NlcWlkICoJc2VxaWQ7Ci0JbmZzNF9zdGF0ZWlkICoJCXN0YXRlaWQ7CisJbmZzNF9zdGF0ZWlkIAkJc3RhdGVpZDsKIH07CiAKIHN0cnVjdCBuZnNfbG9ja3VfcmVzIHsKQEAgLTUxMyw2ICs1MTksNyBAQAogCXN0cnVjdCBuZnM0X3NlcXVlbmNlX3JlcwlzZXFfcmVzOwogCXN0cnVjdCBuZnNfZmF0dHIgKglmYXR0cjsKIAlfX3UzMgkJCWNvdW50OworCV9fdTMyCQkJb3Bfc3RhdHVzOwogCWludAkJCWVvZjsJCS8qIHVzZWQgYnkgcmVhZCAqLwogCXN0cnVjdCBuZnNfd3JpdGV2ZXJmICoJdmVyZjsJCS8qIHVzZWQgYnkgd3JpdGUgKi8KIAljb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyOwkvKiB1c2VkIGJ5IHdyaXRlICovCkBAIC01MzIsNiArNTM5LDcgQEAKIAogc3RydWN0IG5mc19jb21taXRyZXMgewogCXN0cnVjdCBuZnM0X3NlcXVlbmNlX3JlcwlzZXFfcmVzOworCV9fdTMyCQkJb3Bfc3RhdHVzOwogCXN0cnVjdCBuZnNfZmF0dHIJKmZhdHRyOwogCXN0cnVjdCBuZnNfd3JpdGV2ZXJmCSp2ZXJmOwogCWNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXI7CkBAIC0xMzI1LDcgKzEzMzMsOCBAQAogCV9fdTY0CQkJbWRzX29mZnNldDsJLyogRmlsZWxheW91dCBkZW5zZSBzdHJpcGUgKi8KIAlzdHJ1Y3QgbmZzX3BhZ2VfYXJyYXkJcGFnZV9hcnJheTsKIAlzdHJ1Y3QgbmZzX2NsaWVudAkqZHNfY2xwOwkvKiBwTkZTIGRhdGEgc2VydmVyICovCi0JaW50CQkJZHNfaWR4OwkJLyogZHMgaW5kZXggaWYgZHNfY2xwIGlzIHNldCAqLworCWludAkJCWRzX2NvbW1pdF9pZHg7CS8qIGRzIGluZGV4IGlmIGRzX2NscCBpcyBzZXQgKi8KKwlpbnQJCQlwZ2lvX21pcnJvcl9pZHg7LyogbWlycm9yIGluZGV4IGluIHBnaW8gbGF5ZXIgKi8KIH07CiAKIHN0cnVjdCBuZnNfbWRzX2NvbW1pdF9pbmZvIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2ZfZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9vZl9ncGlvLmgKaW5kZXggMzhmYzA1MC4uNjlkYmUzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZl9ncGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9vZl9ncGlvLmgKQEAgLTUyLDYgKzUyLDcgQEAKIAogZXh0ZXJuIGludCBvZl9tbV9ncGlvY2hpcF9hZGQoc3RydWN0IGRldmljZV9ub2RlICpucCwKIAkJCSAgICAgIHN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djKTsKK2V4dGVybiB2b2lkIG9mX21tX2dwaW9jaGlwX3JlbW92ZShzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbV9nYyk7CiAKIGV4dGVybiB2b2lkIG9mX2dwaW9jaGlwX2FkZChzdHJ1Y3QgZ3Bpb19jaGlwICpnYyk7CiBleHRlcm4gdm9pZCBvZl9ncGlvY2hpcF9yZW1vdmUoc3RydWN0IGdwaW9fY2hpcCAqZ2MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vb20uaCBiL2luY2x1ZGUvbGludXgvb29tLmgKaW5kZXggODUzNjk4Yy4uZDU3NzFiZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb29tLmgKKysrIGIvaW5jbHVkZS9saW51eC9vb20uaApAQCAtNDcsNiArNDcsMTAgQEAKIAlyZXR1cm4gISEocC0+c2lnbmFsLT5vb21fZmxhZ3MgJiBPT01fRkxBR19PUklHSU4pOwogfQogCitleHRlcm4gdm9pZCBtYXJrX3Rza19vb21fdmljdGltKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKworZXh0ZXJuIHZvaWQgdW5tYXJrX29vbV92aWN0aW0odm9pZCk7CisKIGV4dGVybiB1bnNpZ25lZCBsb25nIG9vbV9iYWRuZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBjb25zdCBub2RlbWFza190ICpub2RlbWFzaywKIAkJdW5zaWduZWQgbG9uZyB0b3RhbHBhZ2VzKTsKQEAgLTY4LDI3ICs3MiwxNCBAQAogCQl1bnNpZ25lZCBsb25nIHRvdGFscGFnZXMsIGNvbnN0IG5vZGVtYXNrX3QgKm5vZGVtYXNrLAogCQlib29sIGZvcmNlX2tpbGwpOwogCi1leHRlcm4gdm9pZCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGdmcF90IGdmcF9tYXNrLAorZXh0ZXJuIGJvb2wgb3V0X29mX21lbW9yeShzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBnZnBfdCBnZnBfbWFzaywKIAkJaW50IG9yZGVyLCBub2RlbWFza190ICptYXNrLCBib29sIGZvcmNlX2tpbGwpOwogZXh0ZXJuIGludCByZWdpc3Rlcl9vb21fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiBleHRlcm4gaW50IHVucmVnaXN0ZXJfb29tX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogCiBleHRlcm4gYm9vbCBvb21fa2lsbGVyX2Rpc2FibGVkOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgb29tX2tpbGxlcl9kaXNhYmxlKHZvaWQpCi17Ci0Jb29tX2tpbGxlcl9kaXNhYmxlZCA9IHRydWU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBvb21fa2lsbGVyX2VuYWJsZSh2b2lkKQotewotCW9vbV9raWxsZXJfZGlzYWJsZWQgPSBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIG9vbV9nZnBfYWxsb3dlZChnZnBfdCBnZnBfbWFzaykKLXsKLQlyZXR1cm4gKGdmcF9tYXNrICYgX19HRlBfRlMpICYmICEoZ2ZwX21hc2sgJiBfX0dGUF9OT1JFVFJZKTsKLX0KK2V4dGVybiBib29sIG9vbV9raWxsZXJfZGlzYWJsZSh2b2lkKTsKK2V4dGVybiB2b2lkIG9vbV9raWxsZXJfZW5hYmxlKHZvaWQpOwogCiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX2xvY2tfdGFza19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29zcV9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L29zcV9sb2NrLmgKaW5kZXggOTAyMzBkNS4uM2E2NDkwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vc3FfbG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvb3NxX2xvY2suaApAQCAtNSw4ICs1LDExIEBACiAgKiBBbiBNQ1MgbGlrZSBsb2NrIGVzcGVjaWFsbHkgdGFpbG9yZWQgZm9yIG9wdGltaXN0aWMgc3Bpbm5pbmcgZm9yIHNsZWVwaW5nCiAgKiBsb2NrIGltcGxlbWVudGF0aW9ucyAobXV0ZXgsIHJ3c2VtLCBldGMpLgogICovCi0KLSNkZWZpbmUgT1NRX1VOTE9DS0VEX1ZBTCAoMCkKK3N0cnVjdCBvcHRpbWlzdGljX3NwaW5fbm9kZSB7CisJc3RydWN0IG9wdGltaXN0aWNfc3Bpbl9ub2RlICpuZXh0LCAqcHJldjsKKwlpbnQgbG9ja2VkOyAvKiAxIGlmIGxvY2sgYWNxdWlyZWQgKi8KKwlpbnQgY3B1OyAvKiBlbmNvZGVkIENQVSAjICsgMSB2YWx1ZSAqLworfTsKIAogc3RydWN0IG9wdGltaXN0aWNfc3Bpbl9xdWV1ZSB7CiAJLyoKQEAgLTE2LDYgKzE5LDggQEAKIAlhdG9taWNfdCB0YWlsOwogfTsKIAorI2RlZmluZSBPU1FfVU5MT0NLRURfVkFMICgwKQorCiAvKiBJbml0IG1hY3JvIGFuZCBmdW5jdGlvbi4gKi8KICNkZWZpbmUgT1NRX0xPQ0tfVU5MT0NLRUQgeyBBVE9NSUNfSU5JVChPU1FfVU5MT0NLRURfVkFMKSB9CiAKQEAgLTI0LDQgKzI5LDcgQEAKIAlhdG9taWNfc2V0KCZsb2NrLT50YWlsLCBPU1FfVU5MT0NLRURfVkFMKTsKIH0KIAorZXh0ZXJuIGJvb2wgb3NxX2xvY2soc3RydWN0IG9wdGltaXN0aWNfc3Bpbl9xdWV1ZSAqbG9jayk7CitleHRlcm4gdm9pZCBvc3FfdW5sb2NrKHN0cnVjdCBvcHRpbWlzdGljX3NwaW5fcXVldWUgKmxvY2spOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKaW5kZXggZTFmNWZjZC4uNWVkN2JkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmgKQEAgLTEyMSw4ICsxMjEsMTIgQEAKIAlQR19mc2NhY2hlID0gUEdfcHJpdmF0ZV8yLAkvKiBwYWdlIGJhY2tlZCBieSBjYWNoZSAqLwogCiAJLyogWEVOICovCisJLyogUGlubmVkIGluIFhlbiBhcyBhIHJlYWQtb25seSBwYWdldGFibGUgcGFnZS4gKi8KIAlQR19waW5uZWQgPSBQR19vd25lcl9wcml2XzEsCisJLyogUGlubmVkIGFzIHBhcnQgb2YgZG9tYWluIHNhdmUgKHNlZSB4ZW5fbW1fcGluX2FsbCgpKS4gKi8KIAlQR19zYXZlcGlubmVkID0gUEdfZGlydHksCisJLyogSGFzIGEgZ3JhbnQgbWFwcGluZyBvZiBhbm90aGVyIChmb3JlaWduKSBkb21haW4ncyBwYWdlLiAqLworCVBHX2ZvcmVpZ24gPSBQR19vd25lcl9wcml2XzEsCiAKIAkvKiBTTE9CICovCiAJUEdfc2xvYl9mcmVlID0gUEdfcHJpdmF0ZSwKQEAgLTIxNSw2ICsyMTksNyBAQAogUEFHRUZMQUcoQ2hlY2tlZCwgY2hlY2tlZCkJCS8qIFVzZWQgYnkgc29tZSBmaWxlc3lzdGVtcyAqLwogUEFHRUZMQUcoUGlubmVkLCBwaW5uZWQpIFRFU1RTQ0ZMQUcoUGlubmVkLCBwaW5uZWQpCS8qIFhlbiAqLwogUEFHRUZMQUcoU2F2ZVBpbm5lZCwgc2F2ZXBpbm5lZCk7CQkJLyogWGVuICovCitQQUdFRkxBRyhGb3JlaWduLCBmb3JlaWduKTsJCQkJLyogWGVuICovCiBQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQpIF9fQ0xFQVJQQUdFRkxBRyhSZXNlcnZlZCwgcmVzZXJ2ZWQpCiBQQUdFRkxBRyhTd2FwQmFja2VkLCBzd2FwYmFja2VkKSBfX0NMRUFSUEFHRUZMQUcoU3dhcEJhY2tlZCwgc3dhcGJhY2tlZCkKIAlfX1NFVFBBR0VGTEFHKFN3YXBCYWNrZWQsIHN3YXBiYWNrZWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2NvdW50ZXIuaAppbmRleCA5NTU0MjE1Li4xN2ZhNGY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY291bnRlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZV9jb3VudGVyLmgKQEAgLTQxLDcgKzQxLDggQEAKIAkJCSAgICBzdHJ1Y3QgcGFnZV9jb3VudGVyICoqZmFpbCk7CiB2b2lkIHBhZ2VfY291bnRlcl91bmNoYXJnZShzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKTsKIGludCBwYWdlX2NvdW50ZXJfbGltaXQoc3RydWN0IHBhZ2VfY291bnRlciAqY291bnRlciwgdW5zaWduZWQgbG9uZyBsaW1pdCk7Ci1pbnQgcGFnZV9jb3VudGVyX21lbXBhcnNlKGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyAqbnJfcGFnZXMpOworaW50IHBhZ2VfY291bnRlcl9tZW1wYXJzZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKm1heCwKKwkJCSAgdW5zaWduZWQgbG9uZyAqbnJfcGFnZXMpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9jb3VudGVyX3Jlc2V0X3dhdGVybWFyayhzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oIGIvaW5jbHVkZS9saW51eC9wYWdlX2V4dC5oCmluZGV4IGQyYTJjODQuLmM0Mjk4MWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZV9leHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhZ2VfZXh0LmgKQEAgLTQwLDcgKzQwLDcgQEAKICNpZmRlZiBDT05GSUdfUEFHRV9PV05FUgogCXVuc2lnbmVkIGludCBvcmRlcjsKIAlnZnBfdCBnZnBfbWFzazsKLQlzdHJ1Y3Qgc3RhY2tfdHJhY2UgdHJhY2U7CisJdW5zaWduZWQgaW50IG5yX2VudHJpZXM7CiAJdW5zaWduZWQgbG9uZyB0cmFjZV9lbnRyaWVzWzhdOwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggOTYwMzA5NC4uMjExZTlkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZV9leHQuaD4KICNpbmNsdWRlIDx1YXBpL2xpbnV4L3BjaS5oPgogCiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgpAQCAtMTc3LDYgKzE3OCw4IEBACiAJUENJX0RFVl9GTEFHX1BDSUVfQlJJREdFX0FMSUFTID0gKF9fZm9yY2UgcGNpX2Rldl9mbGFnc190KSAoMSA8PCA1KSwKIAkvKiBEbyBub3QgdXNlIGJ1cyByZXNldHMgZm9yIGRldmljZSAqLwogCVBDSV9ERVZfRkxBR1NfTk9fQlVTX1JFU0VUID0gKF9fZm9yY2UgcGNpX2Rldl9mbGFnc190KSAoMSA8PCA2KSwKKwkvKiBEbyBub3QgdXNlIFBNIHJlc2V0IGV2ZW4gaWYgZGV2aWNlIGFkdmVydGlzZXMgTm9Tb2Z0UnN0LSAqLworCVBDSV9ERVZfRkxBR1NfTk9fUE1fUkVTRVQgPSAoX19mb3JjZSBwY2lfZGV2X2ZsYWdzX3QpICgxIDw8IDcpLAogfTsKIAogZW51bSBwY2lfaXJxX3Jlcm91dGVfdmFyaWFudCB7CkBAIC0zOTcsMTYgKzQwMCwxMCBAQAogCXJldHVybiAocGRldi0+ZXJyb3Jfc3RhdGUgIT0gcGNpX2NoYW5uZWxfaW9fbm9ybWFsKTsKIH0KIAotc3RydWN0IHBjaV9ob3N0X2JyaWRnZV93aW5kb3cgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsJCS8qIGhvc3QgYnJpZGdlIGFwZXJ0dXJlIChDUFUgYWRkcmVzcykgKi8KLQlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0OwkJLyogYnVzIGFkZHJlc3MgKyBvZmZzZXQgPSBDUFUgYWRkcmVzcyAqLwotfTsKLQogc3RydWN0IHBjaV9ob3N0X2JyaWRnZSB7CiAJc3RydWN0IGRldmljZSBkZXY7CiAJc3RydWN0IHBjaV9idXMgKmJ1czsJCS8qIHJvb3QgYnVzICovCi0Jc3RydWN0IGxpc3RfaGVhZCB3aW5kb3dzOwkvKiBwY2lfaG9zdF9icmlkZ2Vfd2luZG93cyAqLworCXN0cnVjdCBsaXN0X2hlYWQgd2luZG93czsJLyogcmVzb3VyY2VfZW50cnkgKi8KIAl2b2lkICgqcmVsZWFzZV9mbikoc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqKTsKIAl2b2lkICpyZWxlYXNlX2RhdGE7CiB9OwpAQCAtNTYyLDYgKzU1OSw3IEBACiAvKiBMb3ctbGV2ZWwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCByb3V0aW5lcyAqLwogCiBzdHJ1Y3QgcGNpX29wcyB7CisJdm9pZCBfX2lvbWVtICooKm1hcF9idXMpKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlKTsKIAlpbnQgKCpyZWFkKShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKTsKIAlpbnQgKCp3cml0ZSkoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKTsKIH07CkBAIC04NTksNiArODU3LDE2IEBACiAJCQkgICAgICBpbnQgd2hlcmUsIHUxNiB2YWwpOwogaW50IHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKIAkJCSAgICAgICBpbnQgd2hlcmUsIHUzMiB2YWwpOworCitpbnQgcGNpX2dlbmVyaWNfY29uZmlnX3JlYWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKTsKK2ludCBwY2lfZ2VuZXJpY19jb25maWdfd3JpdGUoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpOworaW50IHBjaV9nZW5lcmljX2NvbmZpZ19yZWFkMzIoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJICAgICAgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpOworaW50IHBjaV9nZW5lcmljX2NvbmZpZ193cml0ZTMyKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgICAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKTsKKwogc3RydWN0IHBjaV9vcHMgKnBjaV9idXNfc2V0X29wcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGNpX29wcyAqb3BzKTsKIAogc3RhdGljIGlubGluZSBpbnQgcGNpX3JlYWRfY29uZmlnX2J5dGUoY29uc3Qgc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1OCAqdmFsKQpAQCAtMTg1MCw2ICsxODU4LDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfcmVsZWFzZV9vZl9ub2RlKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIHBjaV9zZXRfYnVzX29mX25vZGUoc3RydWN0IHBjaV9idXMgKmJ1cykgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3JlbGVhc2VfYnVzX29mX25vZGUoc3RydWN0IHBjaV9idXMgKmJ1cykgeyB9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqCitwY2lfZGV2aWNlX3RvX09GX25vZGUoY29uc3Qgc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgcmV0dXJuIE5VTEw7IH0KICNlbmRpZiAgLyogQ09ORklHX09GICovCiAKICNpZmRlZiBDT05GSUdfRUVICmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS1yZWZjb3VudC5oIGIvaW5jbHVkZS9saW51eC9wZXJjcHUtcmVmY291bnQuaAppbmRleCBiNDMzNzY0Li4xMmM5YjQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS1yZWZjb3VudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyY3B1LXJlZmNvdW50LmgKQEAgLTEyOCw4ICsxMjgsMjIgQEAKIHN0YXRpYyBpbmxpbmUgYm9vbCBfX3JlZl9pc19wZXJjcHUoc3RydWN0IHBlcmNwdV9yZWYgKnJlZiwKIAkJCQkJICB1bnNpZ25lZCBsb25nIF9fcGVyY3B1ICoqcGVyY3B1X2NvdW50cCkKIHsKLQkvKiBwYWlyZWQgd2l0aCBzbXBfc3RvcmVfcmVsZWFzZSgpIGluIHBlcmNwdV9yZWZfcmVpbml0KCkgKi8KLQl1bnNpZ25lZCBsb25nIHBlcmNwdV9wdHIgPSBsb2NrbGVzc19kZXJlZmVyZW5jZShyZWYtPnBlcmNwdV9jb3VudF9wdHIpOworCXVuc2lnbmVkIGxvbmcgcGVyY3B1X3B0cjsKKworCS8qCisJICogVGhlIHZhbHVlIG9mIEByZWYtPnBlcmNwdV9jb3VudF9wdHIgaXMgdGVzdGVkIGZvcgorCSAqICFfX1BFUkNQVV9SRUZfQVRPTUlDLCB3aGljaCBtYXkgYmUgc2V0IGFzeW5jaHJvbm91c2x5LCBhbmQgdGhlbgorCSAqIHVzZWQgYXMgYSBwb2ludGVyLiAgSWYgdGhlIGNvbXBpbGVyIGdlbmVyYXRlcyBhIHNlcGFyYXRlIGZldGNoCisJICogd2hlbiB1c2luZyBpdCBhcyBhIHBvaW50ZXIsIF9fUEVSQ1BVX1JFRl9BVE9NSUMgbWF5IGJlIHNldCBpbgorCSAqIGJldHdlZW4gY29udGFtaW5hdGluZyB0aGUgcG9pbnRlciB2YWx1ZSwgbWVhbmluZyB0aGF0CisJICogQUNDRVNTX09OQ0UoKSBpcyByZXF1aXJlZCB3aGVuIGZldGNoaW5nIGl0LgorCSAqCisJICogQWxzbywgd2UgbmVlZCBhIGRhdGEgZGVwZW5kZW5jeSBiYXJyaWVyIHRvIGJlIHBhaXJlZCB3aXRoCisJICogc21wX3N0b3JlX3JlbGVhc2UoKSBpbiBfX3BlcmNwdV9yZWZfc3dpdGNoX3RvX3BlcmNwdSgpLgorCSAqCisJICogVXNlIGxvY2tsZXNzIGRlcmVmIHdoaWNoIGNvbnRhaW5zIGJvdGguCisJICovCisJcGVyY3B1X3B0ciA9IGxvY2tsZXNzX2RlcmVmZXJlbmNlKHJlZi0+cGVyY3B1X2NvdW50X3B0cik7CiAKIAkvKgogCSAqIFRoZW9yZXRpY2FsbHksIHRoZSBmb2xsb3dpbmcgY291bGQgdGVzdCBqdXN0IEFUT01JQzsgaG93ZXZlciwKQEAgLTIzMyw3ICsyNDcsNyBAQAogCWlmIChfX3JlZl9pc19wZXJjcHUocmVmLCAmcGVyY3B1X2NvdW50KSkgewogCQl0aGlzX2NwdV9pbmMoKnBlcmNwdV9jb3VudCk7CiAJCXJldCA9IHRydWU7Ci0JfSBlbHNlIGlmICghKEFDQ0VTU19PTkNFKHJlZi0+cGVyY3B1X2NvdW50X3B0cikgJiBfX1BFUkNQVV9SRUZfREVBRCkpIHsKKwl9IGVsc2UgaWYgKCEocmVmLT5wZXJjcHVfY291bnRfcHRyICYgX19QRVJDUFVfUkVGX0RFQUQpKSB7CiAJCXJldCA9IGF0b21pY19sb25nX2luY19ub3RfemVybygmcmVmLT5jb3VudCk7CiAJfQogCkBAIC0yODEsNiArMjk1LDIwIEBACiB9CiAKIC8qKgorICogcGVyY3B1X3JlZl9pc19keWluZyAtIHRlc3Qgd2hldGhlciBhIHBlcmNwdSByZWZjb3VudCBpcyBkeWluZyBvciBkZWFkCisgKiBAcmVmOiBwZXJjcHVfcmVmIHRvIHRlc3QKKyAqCisgKiBSZXR1cm5zICV0cnVlIGlmIEByZWYgaXMgZHlpbmcgb3IgZGVhZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNhZmUgdG8gY2FsbCBhcyBsb25nIGFzIEByZWYgaXMgYmV0d2VlbiBpbml0IGFuZCBleGl0CisgKiBhbmQgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc3luY2hyb25pemluZyBhZ2FpbnN0IHN0YXRlIGNoYW5nZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBwZXJjcHVfcmVmX2lzX2R5aW5nKHN0cnVjdCBwZXJjcHVfcmVmICpyZWYpCit7CisJcmV0dXJuIHJlZi0+cGVyY3B1X2NvdW50X3B0ciAmIF9fUEVSQ1BVX1JFRl9ERUFEOworfQorCisvKioKICAqIHBlcmNwdV9yZWZfaXNfemVybyAtIHRlc3Qgd2hldGhlciBhIHBlcmNwdSByZWZjb3VudCByZWFjaGVkIHplcm8KICAqIEByZWY6IHBlcmNwdV9yZWYgdG8gdGVzdAogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKaW5kZXggNGY3YTYxYy4uMmNkYzlkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKQEAgLTQ1MCwxMSArNDUwLDYgQEAKICNlbmRpZiAvKiBDT05GSUdfUEVSRl9FVkVOVFMgKi8KIH07CiAKLWVudW0gcGVyZl9ldmVudF9jb250ZXh0X3R5cGUgewotCXRhc2tfY29udGV4dCwKLQljcHVfY29udGV4dCwKLX07Ci0KIC8qKgogICogc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAtIGV2ZW50IGNvbnRleHQgc3RydWN0dXJlCiAgKgpAQCAtNDYyLDcgKzQ1Nyw2IEBACiAgKi8KIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgewogCXN0cnVjdCBwbXUJCQkqcG11OwotCWVudW0gcGVyZl9ldmVudF9jb250ZXh0X3R5cGUJdHlwZTsKIAkvKgogCSAqIFByb3RlY3QgdGhlIHN0YXRlcyBvZiB0aGUgZXZlbnRzIGluIHRoZSBsaXN0LAogCSAqIG5yX2FjdGl2ZSwgYW5kIHRoZSBsaXN0OgpAQCAtNDc1LDYgKzQ2OSw3IEBACiAJICovCiAJc3RydWN0IG11dGV4CQkJbXV0ZXg7CiAKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlhY3RpdmVfY3R4X2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZAkJcGlubmVkX2dyb3VwczsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQlmbGV4aWJsZV9ncm91cHM7CiAJc3RydWN0IGxpc3RfaGVhZAkJZXZlbnRfbGlzdDsKQEAgLTUyNSw3ICs1MjAsNiBAQAogCWludAkJCQlleGNsdXNpdmU7CiAJc3RydWN0IGhydGltZXIJCQlocnRpbWVyOwogCWt0aW1lX3QJCQkJaHJ0aW1lcl9pbnRlcnZhbDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCQlyb3RhdGlvbl9saXN0OwogCXN0cnVjdCBwbXUJCQkqdW5pcXVlX3BtdTsKIAlzdHJ1Y3QgcGVyZl9jZ3JvdXAJCSpjZ3JwOwogfTsKQEAgLTY2NSw2ICs2NTksNyBAQAogCiBleHRlcm4gc3RydWN0IHN0YXRpY19rZXkgcGVyZl9zd2V2ZW50X2VuYWJsZWRbUEVSRl9DT1VOVF9TV19NQVhdOwogCitleHRlcm4gdm9pZCBfX19wZXJmX3N3X2V2ZW50KHUzMiwgdTY0LCBzdHJ1Y3QgcHRfcmVncyAqLCB1NjQpOwogZXh0ZXJuIHZvaWQgX19wZXJmX3N3X2V2ZW50KHUzMiwgdTY0LCBzdHJ1Y3QgcHRfcmVncyAqLCB1NjQpOwogCiAjaWZuZGVmIHBlcmZfYXJjaF9mZXRjaF9jYWxsZXJfcmVncwpAQCAtNjg5LDE0ICs2ODQsMjUgQEAKIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZAogcGVyZl9zd19ldmVudCh1MzIgZXZlbnRfaWQsIHU2NCBuciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCBhZGRyKQogewotCXN0cnVjdCBwdF9yZWdzIGhvdF9yZWdzOwotCi0JaWYgKHN0YXRpY19rZXlfZmFsc2UoJnBlcmZfc3dldmVudF9lbmFibGVkW2V2ZW50X2lkXSkpIHsKLQkJaWYgKCFyZWdzKSB7Ci0JCQlwZXJmX2ZldGNoX2NhbGxlcl9yZWdzKCZob3RfcmVncyk7Ci0JCQlyZWdzID0gJmhvdF9yZWdzOwotCQl9CisJaWYgKHN0YXRpY19rZXlfZmFsc2UoJnBlcmZfc3dldmVudF9lbmFibGVkW2V2ZW50X2lkXSkpCiAJCV9fcGVyZl9zd19ldmVudChldmVudF9pZCwgbnIsIHJlZ3MsIGFkZHIpOworfQorCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IHB0X3JlZ3MsIF9fcGVyZl9yZWdzWzRdKTsKKworLyoKKyAqICdTcGVjaWFsJyB2ZXJzaW9uIGZvciB0aGUgc2NoZWR1bGVyLCBpdCBoYXJkIGFzc3VtZXMgbm8gcmVjdXJzaW9uLAorICogd2hpY2ggaXMgZ3VhcmFudGVlZCBieSB1cyBub3QgYWN0dWFsbHkgc2NoZWR1bGluZyBpbnNpZGUgb3RoZXIgc3dldmVudHMKKyAqIGJlY2F1c2UgdGhvc2UgZGlzYWJsZSBwcmVlbXB0aW9uLgorICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKK3BlcmZfc3dfZXZlbnRfc2NoZWQodTMyIGV2ZW50X2lkLCB1NjQgbnIsIHU2NCBhZGRyKQoreworCWlmIChzdGF0aWNfa2V5X2ZhbHNlKCZwZXJmX3N3ZXZlbnRfZW5hYmxlZFtldmVudF9pZF0pKSB7CisJCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGhpc19jcHVfcHRyKCZfX3BlcmZfcmVnc1swXSk7CisKKwkJcGVyZl9mZXRjaF9jYWxsZXJfcmVncyhyZWdzKTsKKwkJX19fcGVyZl9zd19ldmVudChldmVudF9pZCwgbnIsIHJlZ3MsIGFkZHIpOwogCX0KIH0KIApAQCAtNzEyLDcgKzcxOCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsCiAJCQkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQogewotCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTLCAxLCBOVUxMLCAwKTsKKwlwZXJmX3N3X2V2ZW50X3NjaGVkKFBFUkZfQ09VTlRfU1dfQ09OVEVYVF9TV0lUQ0hFUywgMSwgMCk7CiAKIAlpZiAoc3RhdGljX2tleV9mYWxzZSgmcGVyZl9zY2hlZF9ldmVudHMua2V5KSkKIAkJX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHByZXYsIG5leHQpOwpAQCAtODIzLDYgKzgyOSw4IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHBlcmZfc3dfZXZlbnQodTMyIGV2ZW50X2lkLCB1NjQgbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1NjQgYWRkcikJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQKK3BlcmZfc3dfZXZlbnRfc2NoZWQodTMyIGV2ZW50X2lkLCB1NjQgbnIsIHU2NCBhZGRyKQkJCXsgfQorc3RhdGljIGlubGluZSB2b2lkCiBwZXJmX2JwX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkJCQl7IH0KIAogc3RhdGljIGlubGluZSBpbnQgcGVyZl9yZWdpc3Rlcl9ndWVzdF9pbmZvX2NhbGxiYWNrcwpAQCAtODk5LDEyICs5MDcsMjIgQEAKIAljb25zdCBjaGFyICpldmVudF9zdHI7CiB9OwogCitzc2l6ZV90IHBlcmZfZXZlbnRfc3lzZnNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY2hhciAqcGFnZSk7CisKICNkZWZpbmUgUE1VX0VWRU5UX0FUVFIoX25hbWUsIF92YXIsIF9pZCwgX3Nob3cpCQkJCVwKIHN0YXRpYyBzdHJ1Y3QgcGVyZl9wbXVfZXZlbnRzX2F0dHIgX3ZhciA9IHsJCQkJXAogCS5hdHRyID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBfc2hvdywgTlVMTCksCQkJXAogCS5pZCAgID0gIF9pZCwJCQkJCQkJXAogfTsKIAorI2RlZmluZSBQTVVfRVZFTlRfQVRUUl9TVFJJTkcoX25hbWUsIF92YXIsIF9zdHIpCQkJICAgIFwKK3N0YXRpYyBzdHJ1Y3QgcGVyZl9wbXVfZXZlbnRzX2F0dHIgX3ZhciA9IHsJCQkJICAgIFwKKwkuYXR0cgkJPSBfX0FUVFIoX25hbWUsIDA0NDQsIHBlcmZfZXZlbnRfc3lzZnNfc2hvdywgTlVMTCksIFwKKwkuaWQJCT0gMCwJCQkJCQkgICAgXAorCS5ldmVudF9zdHIJPSBfc3RyLAkJCQkJCSAgICBcCit9OworCiAjZGVmaW5lIFBNVV9GT1JNQVRfQVRUUihfbmFtZSwgX2Zvcm1hdCkJCQkJCVwKIHN0YXRpYyBzc2l6ZV90CQkJCQkJCQlcCiBfbmFtZSMjX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggMjJhZjhmOC4uNjg1ODA5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0zMjcsNiArMzI3LDggQEAKICAqIGM0NV9pZHM6IDgwMi4zLWM0NSBEZXZpY2UgSWRlbnRpZmVycyBpZiBpc19jNDUuCiAgKiBpc19jNDU6ICBTZXQgdG8gdHJ1ZSBpZiB0aGlzIHBoeSB1c2VzIGNsYXVzZSA0NSBhZGRyZXNzaW5nLgogICogaXNfaW50ZXJuYWw6IFNldCB0byB0cnVlIGlmIHRoaXMgcGh5IGlzIGludGVybmFsIHRvIGEgTUFDLgorICogaGFzX2ZpeHVwczogU2V0IHRvIHRydWUgaWYgdGhpcyBwaHkgaGFzIGZpeHVwcy9xdWlya3MuCisgKiBzdXNwZW5kZWQ6IFNldCB0byB0cnVlIGlmIHRoaXMgcGh5IGhhcyBiZWVuIHN1c3BlbmRlZCBzdWNjZXNzZnVsbHkuCiAgKiBzdGF0ZTogc3RhdGUgb2YgdGhlIFBIWSBmb3IgbWFuYWdlbWVudCBwdXJwb3NlcwogICogZGV2X2ZsYWdzOiBEZXZpY2Utc3BlY2lmaWMgZmxhZ3MgdXNlZCBieSB0aGUgUEhZIGRyaXZlci4KICAqIGFkZHI6IEJ1cyBhZGRyZXNzIG9mIFBIWQpAQCAtMzY0LDYgKzM2Niw3IEBACiAJYm9vbCBpc19jNDU7CiAJYm9vbCBpc19pbnRlcm5hbDsKIAlib29sIGhhc19maXh1cHM7CisJYm9vbCBzdXNwZW5kZWQ7CiAKIAllbnVtIHBoeV9zdGF0ZSBzdGF0ZTsKIApAQCAtNTY1LDYgKzU2OCwxNSBAQAogCXZvaWQgKCp3cml0ZV9tbWRfaW5kaXJlY3QpKHN0cnVjdCBwaHlfZGV2aWNlICpkZXYsIGludCBwdHJhZCwKIAkJCQkgICBpbnQgZGV2bnVtLCBpbnQgcmVnbnVtLCB1MzIgdmFsKTsKIAorCS8qIEdldCB0aGUgc2l6ZSBhbmQgdHlwZSBvZiB0aGUgZWVwcm9tIGNvbnRhaW5lZCB3aXRoaW4gYSBwbHVnLWluCisJICogbW9kdWxlICovCisJaW50ICgqbW9kdWxlX2luZm8pKHN0cnVjdCBwaHlfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgZXRodG9vbF9tb2RpbmZvICptb2RpbmZvKTsKKworCS8qIEdldCB0aGUgZWVwcm9tIGluZm9ybWF0aW9uIGZyb20gdGhlIHBsdWctaW4gbW9kdWxlICovCisJaW50ICgqbW9kdWxlX2VlcHJvbSkoc3RydWN0IHBoeV9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZSwgdTggKmRhdGEpOworCiAJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOwogfTsKICNkZWZpbmUgdG9fcGh5X2RyaXZlcihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHBoeV9kcml2ZXIsIGRyaXZlcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5L3BoeS1xY29tLXVmcy5oIGIvaW5jbHVkZS9saW51eC9waHkvcGh5LXFjb20tdWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQxOGU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGh5L3BoeS1xY29tLXVmcy5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMtMjAxNSwgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIFBIWV9RQ09NX1VGU19IXworI2RlZmluZSBQSFlfUUNPTV9VRlNfSF8KKworI2luY2x1ZGUgInBoeS5oIgorCisvKioKKyAqIHVmc19xY29tX3BoeV9lbmFibGVfcmVmX2NsaygpIC0gRW5hYmxlIHRoZSBwaHkKKyAqIHJlZiBjbG9jay4KKyAqIEBwaHk6IHJlZmVyZW5jZSB0byBhIGdlbmVyaWMgcGh5CisgKgorICogcmV0dXJucyAwIGZvciBzdWNjZXNzLCBhbmQgbm9uLXplcm8gZm9yIGVycm9yLgorICovCitpbnQgdWZzX3Fjb21fcGh5X2VuYWJsZV9yZWZfY2xrKHN0cnVjdCBwaHkgKnBoeSk7CisKKy8qKgorICogdWZzX3Fjb21fcGh5X2Rpc2FibGVfcmVmX2NsaygpIC0gRGlzYWJsZSB0aGUgcGh5CisgKiByZWYgY2xvY2suCisgKiBAcGh5OiByZWZlcmVuY2UgdG8gYSBnZW5lcmljIHBoeS4KKyAqLwordm9pZCB1ZnNfcWNvbV9waHlfZGlzYWJsZV9yZWZfY2xrKHN0cnVjdCBwaHkgKnBoeSk7CisKKy8qKgorICogdWZzX3Fjb21fcGh5X2VuYWJsZV9kZXZfcmVmX2NsaygpIC0gRW5hYmxlIHRoZSBkZXZpY2UKKyAqIHJlZiBjbG9jay4KKyAqIEBwaHk6IHJlZmVyZW5jZSB0byBhIGdlbmVyaWMgcGh5LgorICovCit2b2lkIHVmc19xY29tX3BoeV9lbmFibGVfZGV2X3JlZl9jbGsoc3RydWN0IHBoeSAqcGh5KTsKKworLyoqCisgKiB1ZnNfcWNvbV9waHlfZGlzYWJsZV9kZXZfcmVmX2NsaygpIC0gRGlzYWJsZSB0aGUgZGV2aWNlCisgKiByZWYgY2xvY2suCisgKiBAcGh5OiByZWZlcmVuY2UgdG8gYSBnZW5lcmljIHBoeS4KKyAqLwordm9pZCB1ZnNfcWNvbV9waHlfZGlzYWJsZV9kZXZfcmVmX2NsayhzdHJ1Y3QgcGh5ICpwaHkpOworCitpbnQgdWZzX3Fjb21fcGh5X2VuYWJsZV9pZmFjZV9jbGsoc3RydWN0IHBoeSAqcGh5KTsKK3ZvaWQgdWZzX3Fjb21fcGh5X2Rpc2FibGVfaWZhY2VfY2xrKHN0cnVjdCBwaHkgKnBoeSk7CitpbnQgdWZzX3Fjb21fcGh5X3N0YXJ0X3NlcmRlcyhzdHJ1Y3QgcGh5ICpwaHkpOworaW50IHVmc19xY29tX3BoeV9zZXRfdHhfbGFuZV9lbmFibGUoc3RydWN0IHBoeSAqcGh5LCB1MzIgdHhfbGFuZXMpOworaW50IHVmc19xY29tX3BoeV9jYWxpYnJhdGVfcGh5KHN0cnVjdCBwaHkgKnBoeSwgYm9vbCBpc19yYXRlX0IpOworaW50IHVmc19xY29tX3BoeV9pc19wY3NfcmVhZHkoc3RydWN0IHBoeSAqcGh5KTsKK3ZvaWQgdWZzX3Fjb21fcGh5X3NhdmVfY29udHJvbGxlcl92ZXJzaW9uKHN0cnVjdCBwaHkgKnBoeSwKKwkJCXU4IG1ham9yLCB1MTYgbWlub3IsIHUxNiBzdGVwKTsKKworI2VuZGlmIC8qIFBIWV9RQ09NX1VGU19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waW5jdHJsL2NvbnN1bWVyLmggYi9pbmNsdWRlL2xpbnV4L3BpbmN0cmwvY29uc3VtZXIuaAppbmRleCAxOGVjY2VmLi43MmMwNDE1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waW5jdHJsL2NvbnN1bWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9waW5jdHJsL2NvbnN1bWVyLmgKQEAgLTgyLDcgKzgyLDcgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGluY3RybCAqIF9fbXVzdF9jaGVjayBwaW5jdHJsX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwaW5jdHJsX3B1dChzdHJ1Y3QgcGluY3RybCAqcCkKQEAgLTkzLDcgKzkzLDcgQEAKIAkJCQkJCQlzdHJ1Y3QgcGluY3RybCAqcCwKIAkJCQkJCQljb25zdCBjaGFyICpuYW1lKQogewotCXJldHVybiBOVUxMOworCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBwaW5jdHJsX3NlbGVjdF9zdGF0ZShzdHJ1Y3QgcGluY3RybCAqcCwKQEAgLTEwNCw3ICsxMDQsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwaW5jdHJsICogX19tdXN0X2NoZWNrIGRldm1fcGluY3RybF9nZXQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiBOVUxMOworCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGV2bV9waW5jdHJsX3B1dChzdHJ1Y3QgcGluY3RybCAqcCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGluY3RybC9waW5jb25mLWdlbmVyaWMuaCBiL2luY2x1ZGUvbGludXgvcGluY3RybC9waW5jb25mLWdlbmVyaWMuaAppbmRleCBkNTc4YTYwLi5mZTY1OTYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BpbmN0cmwvcGluY29uZi1nZW5lcmljLmgKKysrIGIvaW5jbHVkZS9saW51eC9waW5jdHJsL3BpbmNvbmYtZ2VuZXJpYy5oCkBAIC0xMTUsNiArMTE1LDE4IEBACiAJUElOX0NPTkZJR19FTkQgPSAweDdGRkYsCiB9OwogCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisjZGVmaW5lIFBDT05GRFVNUChhLCBiLCBjLCBkKSB7IC5wYXJhbSA9IGEsIC5kaXNwbGF5ID0gYiwgLmZvcm1hdCA9IGMsIFwKKwkJCQkuaGFzX2FyZyA9IGQgfQorCitzdHJ1Y3QgcGluX2NvbmZpZ19pdGVtIHsKKwljb25zdCBlbnVtIHBpbl9jb25maWdfcGFyYW0gcGFyYW07CisJY29uc3QgY2hhciAqIGNvbnN0IGRpc3BsYXk7CisJY29uc3QgY2hhciAqIGNvbnN0IGZvcm1hdDsKKwlib29sIGhhc19hcmc7Cit9OworI2VuZGlmIC8qIENPTkZJR19ERUJVR19GUyAqLworCiAvKgogICogSGVscGZ1bCBjb25maWd1cmF0aW9uIG1hY3JvIHRvIGJlIHVzZWQgaW4gdGFibGVzIGV0Yy4KICAqLwpAQCAtMTUwLDYgKzE2MiwxMiBAQAogc3RydWN0IHBpbmN0cmxfZGV2Owogc3RydWN0IHBpbmN0cmxfbWFwOwogCitzdHJ1Y3QgcGluY29uZl9nZW5lcmljX3BhcmFtcyB7CisJY29uc3QgY2hhciAqIGNvbnN0IHByb3BlcnR5OworCWVudW0gcGluX2NvbmZpZ19wYXJhbSBwYXJhbTsKKwl1MzIgZGVmYXVsdF92YWx1ZTsKK307CisKIGludCBwaW5jb25mX2dlbmVyaWNfZHRfc3Vibm9kZV90b19tYXAoc3RydWN0IHBpbmN0cmxfZGV2ICpwY3RsZGV2LAogCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBzdHJ1Y3QgcGluY3RybF9tYXAgKiptYXAsCiAJCXVuc2lnbmVkICpyZXNlcnZlZF9tYXBzLCB1bnNpZ25lZCAqbnVtX21hcHMsCkBAIC0xNzQsNiArMTkyLDE3IEBACiAJCQlQSU5fTUFQX1RZUEVfQ09ORklHU19QSU4pOwogfQogCitzdGF0aWMgaW5saW5lIGludCBwaW5jb25mX2dlbmVyaWNfZHRfbm9kZV90b19tYXBfYWxsKAorCQlzdHJ1Y3QgcGluY3RybF9kZXYgKnBjdGxkZXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnBfY29uZmlnLAorCQlzdHJ1Y3QgcGluY3RybF9tYXAgKiptYXAsIHVuc2lnbmVkICpudW1fbWFwcykKK3sKKwkvKgorCSAqIHBhc3NpbmcgdGhlIHR5cGUgYXMgUElOX01BUF9UWVBFX0lOVkFMSUQgY2F1c2VzIHRoZSB1bmRlcmx5aW5nIHBhcnNlcgorCSAqIHRvIGluZmVyIHRoZSBtYXAgdHlwZSBmcm9tIHRoZSBEVCBwcm9wZXJ0aWVzIHVzZWQuCisJICovCisJcmV0dXJuIHBpbmNvbmZfZ2VuZXJpY19kdF9ub2RlX3RvX21hcChwY3RsZGV2LCBucF9jb25maWcsIG1hcCwgbnVtX21hcHMsCisJCQlQSU5fTUFQX1RZUEVfSU5WQUxJRCk7Cit9CiAjZW5kaWYKIAogI2VuZGlmIC8qIENPTkZJR19HRU5FUklDX1BJTkNPTkYgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGluY3RybC9waW5jdHJsLmggYi9pbmNsdWRlL2xpbnV4L3BpbmN0cmwvcGluY3RybC5oCmluZGV4IGNjOGUxYWYuLjY2ZTQ2OTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGluY3RybC9waW5jdHJsLmgKKysrIGIvaW5jbHVkZS9saW51eC9waW5jdHJsL3BpbmN0cmwuaApAQCAtMjQsNiArMjQsNyBAQAogc3RydWN0IHBpbmN0cmxfbWFwOwogc3RydWN0IHBpbm11eF9vcHM7CiBzdHJ1Y3QgcGluY29uZl9vcHM7CitzdHJ1Y3QgcGluX2NvbmZpZ19pdGVtOwogc3RydWN0IGdwaW9fY2hpcDsKIHN0cnVjdCBkZXZpY2Vfbm9kZTsKIApAQCAtMTE3LDYgKzExOCwxMiBAQAogICogQGNvbmZvcHM6IHBpbiBjb25maWcgb3BlcmF0aW9ucyB2dGFibGUsIGlmIHlvdSBzdXBwb3J0IHBpbiBjb25maWd1cmF0aW9uIGluCiAgKgl5b3VyIGRyaXZlcgogICogQG93bmVyOiBtb2R1bGUgcHJvdmlkaW5nIHRoZSBwaW4gY29udHJvbGxlciwgdXNlZCBmb3IgcmVmY291bnRpbmcKKyAqIEBudW1fY3VzdG9tX3BhcmFtczogTnVtYmVyIG9mIGRyaXZlci1zcGVjaWZpYyBjdXN0b20gcGFyYW1ldGVycyB0byBiZSBwYXJzZWQKKyAqCWZyb20gdGhlIGhhcmR3YXJlIGRlc2NyaXB0aW9uCisgKiBAY3VzdG9tX3BhcmFtczogTGlzdCBvZiBkcml2ZXJfc3BlY2lmaWMgY3VzdG9tIHBhcmFtZXRlcnMgdG8gYmUgcGFyc2VkIGZyb20KKyAqCXRoZSBoYXJkd2FyZSBkZXNjcmlwdGlvbgorICogQGN1c3RvbV9jb25mX2l0ZW1zOiBJbmZvcm1hdGlvbiBob3cgdG8gcHJpbnQgQHBhcmFtcyBpbiBkZWJ1Z2ZzLCBtdXN0IGJlCisgKgl0aGUgc2FtZSBzaXplIGFzIHRoZSBAY3VzdG9tX3BhcmFtcywgaS5lLiBAbnVtX2N1c3RvbV9wYXJhbXMKICAqLwogc3RydWN0IHBpbmN0cmxfZGVzYyB7CiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTEyNiw2ICsxMzMsMTEgQEAKIAljb25zdCBzdHJ1Y3QgcGlubXV4X29wcyAqcG14b3BzOwogCWNvbnN0IHN0cnVjdCBwaW5jb25mX29wcyAqY29uZm9wczsKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19QSU5DT05GCisJdW5zaWduZWQgaW50IG51bV9jdXN0b21fcGFyYW1zOworCWNvbnN0IHN0cnVjdCBwaW5jb25mX2dlbmVyaWNfcGFyYW1zICpjdXN0b21fcGFyYW1zOworCWNvbnN0IHN0cnVjdCBwaW5fY29uZmlnX2l0ZW0gKmN1c3RvbV9jb25mX2l0ZW1zOworI2VuZGlmCiB9OwogCiAvKiBFeHRlcm5hbCBpbnRlcmZhY2UgdG8gcGluIGNvbnRyb2xsZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvaXJkYS5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2lyZGEtc2ExMXgwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvaXJkYS5oCnJlbmFtZSB0byBpbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvaXJkYS1zYTExeDAuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL21tYy1vbWFwLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvbW1jLW9tYXAuaAppbmRleCA1YzE4OGY0Li45Mjk0NjkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvbW1jLW9tYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvbW1jLW9tYXAuaApAQCAtMzEsMTAgKzMxLDYgQEAKIAl2b2lkICgqY2xlYW51cCkoc3RydWN0IGRldmljZSAqZGV2KTsKIAl2b2lkICgqc2h1dGRvd24pKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKLQkvKiBUbyBoYW5kbGUgYm9hcmQgcmVsYXRlZCBzdXNwZW5kL3Jlc3VtZSBmdW5jdGlvbmFsaXR5IGZvciBNTUMgKi8KLQlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KTsKLQlpbnQgKCpyZXN1bWUpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpOwotCiAJLyogUmV0dXJuIGNvbnRleHQgbG9zcyBjb3VudCBkdWUgdG8gUE0gc3RhdGVzIGNoYW5naW5nICovCiAJaW50ICgqZ2V0X2NvbnRleHRfbG9zc19jb3VudCkoc3RydWN0IGRldmljZSAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3JlZ3VsYXRvci1oYXB0aWMuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9yZWd1bGF0b3ItaGFwdGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY1OGU1OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9yZWd1bGF0b3ItaGFwdGljLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIFJlZ3VsYXRvciBIYXB0aWMgUGxhdGZvcm0gRGF0YQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQXV0aG9yOiBKYWV3b24gS2ltIDxqYWV3b24wMi5raW1Ac2Ftc3VuZy5jb20+CisgKiBBdXRob3I6IEh5dW5oZWUgS2ltIDxoeXVuaGVlLmtpbUBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX1JFR1VMQVRPUl9IQVBUSUNfSAorI2RlZmluZSBfUkVHVUxBVE9SX0hBUFRJQ19ICisKKy8qCisgKiBzdHJ1Y3QgcmVndWxhdG9yX2hhcHRpY19kYXRhIC0gUGxhdGZvcm0gZGV2aWNlIGRhdGEKKyAqCisgKiBAbWF4X3ZvbHQ6IG1heGltdW0gdm9sdGFnZSB2YWx1ZSBzdXBwbGllZCB0byB0aGUgaGFwdGljIG1vdG9yLgorICoJCTxUaGUgdW5pdCBvZiB0aGUgdm9sdGFnZSBpcyBhIG1pY3JvPgorICogQG1pbl92b2x0OiBtaW5pbXVtIHZvbHRhZ2UgdmFsdWUgc3VwcGxpZWQgdG8gdGhlIGhhcHRpYyBtb3Rvci4KKyAqCQk8VGhlIHVuaXQgb2YgdGhlIHZvbHRhZ2UgaXMgYSBtaWNybz4KKyAqLworc3RydWN0IHJlZ3VsYXRvcl9oYXB0aWNfZGF0YSB7CisJdW5zaWduZWQgaW50IG1heF92b2x0OworCXVuc2lnbmVkIGludCBtaW5fdm9sdDsKK307CisKKyNlbmRpZiAvKiBfUkVHVUxBVE9SX0hBUFRJQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvc3QyMW5mY2EuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9zdDIxbmZjYS5oCmluZGV4IDUwODdmZmYuLmNjMmJkYWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9zdDIxbmZjYS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9zdDIxbmZjYS5oCkBAIC0yNiw2ICsyNiw4IEBACiBzdHJ1Y3Qgc3QyMW5mY2FfbmZjX3BsYXRmb3JtX2RhdGEgewogCXVuc2lnbmVkIGludCBncGlvX2VuYTsKIAl1bnNpZ25lZCBpbnQgaXJxX3BvbGFyaXR5OworCWJvb2wgaXNfZXNlX3ByZXNlbnQ7CisJYm9vbCBpc191aWNjX3ByZXNlbnQ7CiB9OwogCiAjZW5kaWYgLyogX1NUMjFORkNBX0hDSV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3N0MjFuZmNiLmggYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvc3QyMW5mY2IuaAppbmRleCBjM2I0MzJmLi5iMDIzMzczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvc3QyMW5mY2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvc3QyMW5mY2IuaApAQCAtMTksOCArMTksNiBAQAogI2lmbmRlZiBfU1QyMU5GQ0JfTkNJX0hfCiAjZGVmaW5lIF9TVDIxTkZDQl9OQ0lfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotCiAjZGVmaW5lIFNUMjFORkNCX05DSV9EUklWRVJfTkFNRSAic3QyMW5mY2JfbmNpIgogCiBzdHJ1Y3Qgc3QyMW5mY2JfbmZjX3BsYXRmb3JtX2RhdGEgewpAQCAtMjgsNCArMjYsNCBAQAogCXVuc2lnbmVkIGludCBpcnFfcG9sYXJpdHk7CiB9OwogCi0jZW5kaWYgLyogX1NUMjFORkNBX0hDSV9IXyAqLworI2VuZGlmIC8qIF9TVDIxTkZDQl9OQ0lfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS90cG1fc3RtX3N0MzMuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS90cG1fc3RtX3N0MzMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjc1MzEwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3RwbV9zdG1fc3QzMy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBTVE1pY3JvZWxlY3Ryb25pY3MgVFBNIEkyQyBMaW51eCBkcml2ZXIgZm9yIFRQTSBTVDMzWlAyNAorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwICBTVE1pY3JvZWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKgorICogU1RNaWNyb2VsZWN0cm9uaWNzIHZlcnNpb24gMS4yLjAsIENvcHlyaWdodCAoQykgMjAxMAorICogU1RNaWNyb2VsZWN0cm9uaWNzIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4KKyAqIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAqIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucy4KKyAqCisgKiBAQXV0aG9yOiBDaHJpc3RvcGhlIFJJQ0FSRCB0cG1zdXBwb3J0QHN0LmNvbQorICoKKyAqIEBGaWxlOiBzdG1fc3QzM190cG0uaAorICoKKyAqIEBEYXRlOiAwOS8xNS8yMDEwCisgKi8KKyNpZm5kZWYgX19TVE1fU1QzM19UUE1fSF9fCisjZGVmaW5lIF9fU1RNX1NUMzNfVFBNX0hfXworCisjZGVmaW5lIFRQTV9TVDMzX0kyQwkJCSJzdDMzenAyNC1pMmMiCisjZGVmaW5lIFRQTV9TVDMzX1NQSQkJCSJzdDMzenAyNC1zcGkiCisKK3N0cnVjdCBzdDMzenAyNF9wbGF0Zm9ybV9kYXRhIHsKKwlpbnQgaW9fbHBjcGQ7Cit9OworCisjZW5kaWYgLyogX19TVE1fU1QzM19UUE1fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvdnNwMS5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3ZzcDEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMxNzBlMjYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL3ZzcDEuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qCi0gKiB2c3AxLmggIC0tICBSLUNhciBWU1AxIFBsYXRmb3JtIERhdGEKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgUmVuZXNhcyBDb3Jwb3JhdGlvbgotICoKLSAqIENvbnRhY3Q6IExhdXJlbnQgUGluY2hhcnQgKGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICovCi0jaWZuZGVmIF9fUExBVEZPUk1fVlNQMV9IX18KLSNkZWZpbmUgX19QTEFURk9STV9WU1AxX0hfXwotCi0jZGVmaW5lIFZTUDFfSEFTX0xJRgkJKDEgPDwgMCkKLSNkZWZpbmUgVlNQMV9IQVNfTFVUCQkoMSA8PCAxKQotI2RlZmluZSBWU1AxX0hBU19TUlUJCSgxIDw8IDIpCi0KLXN0cnVjdCB2c3AxX3BsYXRmb3JtX2RhdGEgewotCXVuc2lnbmVkIGludCBmZWF0dXJlczsKLQl1bnNpZ25lZCBpbnQgcnBmX2NvdW50OwotCXVuc2lnbmVkIGludCB1ZHNfY291bnQ7Ci0JdW5zaWduZWQgaW50IHdwZl9jb3VudDsKLX07Ci0KLSNlbmRpZiAvKiBfX1BMQVRGT1JNX1ZTUDFfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggOGI1OTc2My4uZTJmMWJlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtNTk3LDcgKzU5Nyw3IEBACiAKIGV4dGVybiB2b2lkIHVwZGF0ZV9wbV9ydW50aW1lX2FjY291bnRpbmcoc3RydWN0IGRldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgZGV2X3BtX2dldF9zdWJzeXNfZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCBkZXZfcG1fcHV0X3N1YnN5c19kYXRhKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBkZXZfcG1fcHV0X3N1YnN5c19kYXRhKHN0cnVjdCBkZXZpY2UgKmRldik7CiAKIC8qCiAgKiBQb3dlciBkb21haW5zIHByb3ZpZGUgY2FsbGJhY2tzIHRoYXQgYXJlIGV4ZWN1dGVkIGR1cmluZyBzeXN0ZW0gc3VzcGVuZCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fZG9tYWluLmggYi9pbmNsdWRlL2xpbnV4L3BtX2RvbWFpbi5oCmluZGV4IGE5ZWRhYjIuLjA4MGU3NzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG1fZG9tYWluLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbV9kb21haW4uaApAQCAtMTEzLDggKzExMyw2IEBACiAJc3RydWN0IHBtX2RvbWFpbl9kYXRhIGJhc2U7CiAJc3RydWN0IGdwZF90aW1pbmdfZGF0YSB0ZDsKIAlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmI7Ci0Jc3RydWN0IG11dGV4IGxvY2s7Ci0JdW5zaWduZWQgaW50IHJlZmNvdW50OwogCWludCBuZWVkX3Jlc3RvcmU7CiB9OwogCkBAIC0xNDAsNyArMTM4LDYgQEAKIAogZXh0ZXJuIGludCBwbV9nZW5wZF9yZW1vdmVfZGV2aWNlKHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqZ2VucGQsCiAJCQkJICBzdHJ1Y3QgZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgcG1fZ2VucGRfZGV2X25lZWRfcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGJvb2wgdmFsKTsKIGV4dGVybiBpbnQgcG1fZ2VucGRfYWRkX3N1YmRvbWFpbihzdHJ1Y3QgZ2VuZXJpY19wbV9kb21haW4gKmdlbnBkLAogCQkJCSAgc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpuZXdfc3ViZG9tYWluKTsKIGV4dGVybiBpbnQgcG1fZ2VucGRfYWRkX3N1YmRvbWFpbl9uYW1lcyhjb25zdCBjaGFyICptYXN0ZXJfbmFtZSwKQEAgLTE4Nyw3ICsxODQsNiBAQAogewogCXJldHVybiAtRU5PU1lTOwogfQotc3RhdGljIGlubGluZSB2b2lkIHBtX2dlbnBkX2Rldl9uZWVkX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBib29sIHZhbCkge30KIHN0YXRpYyBpbmxpbmUgaW50IHBtX2dlbnBkX2FkZF9zdWJkb21haW4oc3RydWN0IGdlbmVyaWNfcG1fZG9tYWluICpnZW5wZCwKIAkJCQkJIHN0cnVjdCBnZW5lcmljX3BtX2RvbWFpbiAqbmV3X3NkKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb3dlci9jaGFyZ2VyLW1hbmFnZXIuaCBiL2luY2x1ZGUvbGludXgvcG93ZXIvY2hhcmdlci1tYW5hZ2VyLmgKaW5kZXggZTk3ZmM2NS4uNDE2ZWJlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wb3dlci9jaGFyZ2VyLW1hbmFnZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Bvd2VyL2NoYXJnZXItbWFuYWdlci5oCkBAIC0xNyw2ICsxNyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KICNpbmNsdWRlIDxsaW51eC9leHRjb24uaD4KKyNpbmNsdWRlIDxsaW51eC9hbGFybXRpbWVyLmg+CiAKIGVudW0gZGF0YV9zb3VyY2UgewogCUNNX0JBVFRFUllfUFJFU0VOVCwKQEAgLTQ1LDI5ICs0Niw2IEBACiB9OwogCiAvKioKLSAqIHN0cnVjdCBjaGFyZ2VyX2dsb2JhbF9kZXNjCi0gKiBAcnRjX25hbWU6IHRoZSBuYW1lIG9mIFJUQyB1c2VkIHRvIHdha2UgdXAgdGhlIHN5c3RlbSBmcm9tIHN1c3BlbmQuCi0gKiBAcnRjX29ubHlfd2FrZXVwOgotICoJSWYgdGhlIHN5c3RlbSBpcyB3b2tlbiB1cCBieSB3YWVrdXAtc291cmNlcyBvdGhlciB0aGFuIHRoZSBSVEMgb3IKLSAqCWNhbGxiYWNrcywgQ2hhcmdlciBNYW5hZ2VyIHNob3VsZCByZWNvZ25pemUgd2l0aAotICoJcnRjX29ubHlfd2FrZXVwKCkgcmV0dXJuaW5nIGZhbHNlLgotICoJSWYgdGhlIFJUQyBnaXZlbiB0byBDTSBpcyB0aGUgb25seSB3YWtldXAgcmVhc29uLAotICoJcnRjX29ubHlfd2FrZXVwIHNob3VsZCByZXR1cm4gdHJ1ZS4KLSAqIEBhc3N1bWVfdGltZXJfc3RvcHNfaW5fc3VzcGVuZDoKLSAqCUFzc3VtZSB0aGF0IHRoZSBqaWZmeSB0aW1lciBzdG9wcyBpbiBzdXNwZW5kLXRvLVJBTS4KLSAqCVdoZW4gZW5hYmxlZCwgQ00gZG9lcyBub3QgcmVseSBvbiBqaWZmaWVzIHZhbHVlIGluCi0gKglzdXNwZW5kX2FnYWluIGFuZCBhc3N1bWVzIHRoYXQgamlmZmllcyB2YWx1ZSBkb2VzIG5vdAotICoJY2hhbmdlIGR1cmluZyBzdXNwZW5kLgotICovCi1zdHJ1Y3QgY2hhcmdlcl9nbG9iYWxfZGVzYyB7Ci0JY2hhciAqcnRjX25hbWU7Ci0KLQlib29sICgqcnRjX29ubHlfd2FrZXVwKSh2b2lkKTsKLQotCWJvb2wgYXNzdW1lX3RpbWVyX3N0b3BzX2luX3N1c3BlbmQ7Ci19OwotCi0vKioKICAqIHN0cnVjdCBjaGFyZ2VyX2NhYmxlCiAgKiBAZXh0Y29uX25hbWU6IHRoZSBuYW1lIG9mIGV4dGNvbiBkZXZpY2UuCiAgKiBAbmFtZTogdGhlIG5hbWUgb2YgY2hhcmdlciBjYWJsZShleHRlcm5hbCBjb25uZWN0b3IpLgpAQCAtMjY2LDIyICsyNDQsMTQgQEAKIAljaGFyIHBzeV9uYW1lX2J1ZltQU1lfTkFNRV9NQVggKyAxXTsKIAlzdHJ1Y3QgcG93ZXJfc3VwcGx5IGNoYXJnZXJfcHN5OwogCi0JYm9vbCBzdGF0dXNfc2F2ZV9leHRfcHdyX2luc2VydGVkOwotCWJvb2wgc3RhdHVzX3NhdmVfYmF0dDsKLQogCXU2NCBjaGFyZ2luZ19zdGFydF90aW1lOwogCXU2NCBjaGFyZ2luZ19lbmRfdGltZTsKIH07CiAKICNpZmRlZiBDT05GSUdfQ0hBUkdFUl9NQU5BR0VSCi1leHRlcm4gaW50IHNldHVwX2NoYXJnZXJfbWFuYWdlcihzdHJ1Y3QgY2hhcmdlcl9nbG9iYWxfZGVzYyAqZ2QpOwotZXh0ZXJuIGJvb2wgY21fc3VzcGVuZF9hZ2Fpbih2b2lkKTsKIGV4dGVybiB2b2lkIGNtX25vdGlmeV9ldmVudChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCiAJCQkJZW51bSBjbV9ldmVudF90eXBlcyB0eXBlLCBjaGFyICptc2cpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHNldHVwX2NoYXJnZXJfbWFuYWdlcihzdHJ1Y3QgY2hhcmdlcl9nbG9iYWxfZGVzYyAqZ2QpCi17IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIGJvb2wgY21fc3VzcGVuZF9hZ2Fpbih2b2lkKSB7IHJldHVybiBmYWxzZTsgfQogc3RhdGljIGlubGluZSB2b2lkIGNtX25vdGlmeV9ldmVudChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCiAJCQkJZW51bSBjbV9ldmVudF90eXBlcyB0eXBlLCBjaGFyICptc2cpIHsgfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ByaW50ay5oIGIvaW5jbHVkZS9saW51eC9wcmludGsuaAppbmRleCBjOGYxNzAzLi40ZDViZjU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ByaW50ay5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJpbnRrLmgKQEAgLTEwLDkgKzEwLDYgQEAKIGV4dGVybiBjb25zdCBjaGFyIGxpbnV4X2Jhbm5lcltdOwogZXh0ZXJuIGNvbnN0IGNoYXIgbGludXhfcHJvY19iYW5uZXJbXTsKIAotZXh0ZXJuIGNoYXIgKmxvZ19idWZfYWRkcl9nZXQodm9pZCk7Ci1leHRlcm4gdTMyIGxvZ19idWZfbGVuX2dldCh2b2lkKTsKLQogc3RhdGljIGlubGluZSBpbnQgcHJpbnRrX2dldF9sZXZlbChjb25zdCBjaGFyICpidWZmZXIpCiB7CiAJaWYgKGJ1ZmZlclswXSA9PSBLRVJOX1NPSF9BU0NJSSAmJiBidWZmZXJbMV0pIHsKQEAgLTE2Myw2ICsxNjAsOCBAQAogCiBleHRlcm4gdm9pZCB3YWtlX3VwX2tsb2dkKHZvaWQpOwogCitjaGFyICpsb2dfYnVmX2FkZHJfZ2V0KHZvaWQpOwordTMyIGxvZ19idWZfbGVuX2dldCh2b2lkKTsKIHZvaWQgbG9nX2J1Zl9rZXhlY19zZXR1cCh2b2lkKTsKIHZvaWQgX19pbml0IHNldHVwX2xvZ19idWYoaW50IGVhcmx5KTsKIHZvaWQgZHVtcF9zdGFja19zZXRfYXJjaF9kZXNjKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKQEAgLTE5OCw2ICsxOTcsMTYgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSBjaGFyICpsb2dfYnVmX2FkZHJfZ2V0KHZvaWQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGxvZ19idWZfbGVuX2dldCh2b2lkKQoreworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9nX2J1Zl9rZXhlY19zZXR1cCh2b2lkKQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wc3RvcmUuaCBiL2luY2x1ZGUvbGludXgvcHN0b3JlLmgKaW5kZXggZWNlMGM2Yi4uODg4NGY2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wc3RvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BzdG9yZS5oCkBAIC0zOSw2ICszOSw3IEBACiAJUFNUT1JFX1RZUEVfUFBDX1JUQVMJPSA0LAogCVBTVE9SRV9UWVBFX1BQQ19PRgk9IDUsCiAJUFNUT1JFX1RZUEVfUFBDX0NPTU1PTgk9IDYsCisJUFNUT1JFX1RZUEVfUE1TRwk9IDcsCiAJUFNUT1JFX1RZUEVfVU5LTk9XTgk9IDI1NQogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wc3RvcmVfcmFtLmggYi9pbmNsdWRlL2xpbnV4L3BzdG9yZV9yYW0uaAppbmRleCA0YWYzZmRjLi45YzlkNmMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BzdG9yZV9yYW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BzdG9yZV9yYW0uaApAQCAtODEsNiArODEsNyBAQAogCXVuc2lnbmVkIGxvbmcJcmVjb3JkX3NpemU7CiAJdW5zaWduZWQgbG9uZwljb25zb2xlX3NpemU7CiAJdW5zaWduZWQgbG9uZwlmdHJhY2Vfc2l6ZTsKKwl1bnNpZ25lZCBsb25nCXBtc2dfc2l6ZTsKIAlpbnQJCWR1bXBfb29wczsKIAlzdHJ1Y3QgcGVyc2lzdGVudF9yYW1fZWNjX2luZm8gZWNjX2luZm87CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9weGEyeHhfc3NwLmggYi9pbmNsdWRlL2xpbnV4L3B4YTJ4eF9zc3AuaAppbmRleCA3N2FlZDllLi5kYWI1NDViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B4YTJ4eF9zc3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3B4YTJ4eF9zc3AuaApAQCAtMzcsNiArMzcsNyBAQAogI2RlZmluZSBTU0RSCQkoMHgxMCkgIC8qIFNTUCBEYXRhIFdyaXRlL0RhdGEgUmVhZCBSZWdpc3RlciAqLwogCiAjZGVmaW5lIFNTVE8JCSgweDI4KSAgLyogU1NQIFRpbWUgT3V0IFJlZ2lzdGVyICovCisjZGVmaW5lIEREU19SQVRFCSgweDI4KSAgLyogU1NQIEREUyBDbG9jayBSYXRlIFJlZ2lzdGVyIChJbnRlbCBRdWFyaykgKi8KICNkZWZpbmUgU1NQU1AJCSgweDJDKSAgLyogU1NQIFByb2dyYW1tYWJsZSBTZXJpYWwgUHJvdG9jb2wgKi8KICNkZWZpbmUgU1NUU0EJCSgweDMwKSAgLyogU1NQIFR4IFRpbWVzbG90IEFjdGl2ZSAqLwogI2RlZmluZSBTU1JTQQkJKDB4MzQpICAvKiBTU1AgUnggVGltZXNsb3QgQWN0aXZlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3RhLmggYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKaW5kZXggNTA5NzhiNy4uZDUzNGU4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9xdW90YS5oCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGEuaApAQCAtMjE2LDE5ICsyMTYsMjEgQEAKIAl1bnNpZ25lZCBsb25nIGRxaV9mbGFnczsKIAl1bnNpZ25lZCBpbnQgZHFpX2JncmFjZTsKIAl1bnNpZ25lZCBpbnQgZHFpX2lncmFjZTsKLQlxc2l6ZV90IGRxaV9tYXhibGltaXQ7Ci0JcXNpemVfdCBkcWlfbWF4aWxpbWl0OworCXFzaXplX3QgZHFpX21heF9zcGNfbGltaXQ7CisJcXNpemVfdCBkcWlfbWF4X2lub19saW1pdDsKIAl2b2lkICpkcWlfcHJpdjsKIH07CiAKIHN0cnVjdCBzdXBlcl9ibG9jazsKIAotI2RlZmluZSBEUUZfTUFTSyAweGZmZmYJCS8qIE1hc2sgZm9yIGZvcm1hdCBzcGVjaWZpYyBmbGFncyAqLwotI2RlZmluZSBEUUZfR0VUSU5GT19NQVNLIDB4MWZmZmYJLyogTWFzayBmb3IgZmxhZ3MgcGFzc2VkIHRvIHVzZXJzcGFjZSAqLwotI2RlZmluZSBEUUZfU0VUSU5GT19NQVNLIDB4ZmZmZgkJLyogTWFzayBmb3IgZmxhZ3MgbW9kaWZpYWJsZSBmcm9tIHVzZXJzcGFjZSAqLwotI2RlZmluZSBEUUZfU1lTX0ZJTEVfQgkJMTYKLSNkZWZpbmUgRFFGX1NZU19GSUxFICgxIDw8IERRRl9TWVNfRklMRV9CKQkvKiBRdW90YSBmaWxlIHN0b3JlZCBhcyBzeXN0ZW0gZmlsZSAqLwotI2RlZmluZSBEUUZfSU5GT19ESVJUWV9CCTMxCisvKiBNYXNrIGZvciBmbGFncyBwYXNzZWQgdG8gdXNlcnNwYWNlICovCisjZGVmaW5lIERRRl9HRVRJTkZPX01BU0sgKERRRl9ST09UX1NRVUFTSCB8IERRRl9TWVNfRklMRSkKKy8qIE1hc2sgZm9yIGZsYWdzIG1vZGlmaWFibGUgZnJvbSB1c2Vyc3BhY2UgKi8KKyNkZWZpbmUgRFFGX1NFVElORk9fTUFTSyBEUUZfUk9PVF9TUVVBU0gKKworZW51bSB7CisJRFFGX0lORk9fRElSVFlfQiA9IERRRl9QUklWQVRFLAorfTsKICNkZWZpbmUgRFFGX0lORk9fRElSVFkgKDEgPDwgRFFGX0lORk9fRElSVFlfQikJLyogSXMgaW5mbyBkaXJ0eT8gKi8KIAogZXh0ZXJuIHZvaWQgbWFya19pbmZvX2RpcnR5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsKQEAgLTMyMSwxOCArMzIzLDYxIEBACiAKIHN0cnVjdCBwYXRoOwogCisvKiBTdHJ1Y3R1cmUgZm9yIGNvbW11bmljYXRpbmcgdmlhIC0+Z2V0X2RxYmxrKCkgJiAtPnNldF9kcWJsaygpICovCitzdHJ1Y3QgcWNfZHFibGsgeworCWludCBkX2ZpZWxkbWFzazsJLyogbWFzayBvZiBmaWVsZHMgdG8gY2hhbmdlIGluIC0+c2V0X2RxYmxrKCkgKi8KKwl1NjQgZF9zcGNfaGFyZGxpbWl0OwkvKiBhYnNvbHV0ZSBsaW1pdCBvbiB1c2VkIHNwYWNlICovCisJdTY0IGRfc3BjX3NvZnRsaW1pdDsJLyogcHJlZmVycmVkIGxpbWl0IG9uIHVzZWQgc3BhY2UgKi8KKwl1NjQgZF9pbm9faGFyZGxpbWl0OwkvKiBtYXhpbXVtICMgYWxsb2NhdGVkIGlub2RlcyAqLworCXU2NCBkX2lub19zb2Z0bGltaXQ7CS8qIHByZWZlcnJlZCBpbm9kZSBsaW1pdCAqLworCXU2NCBkX3NwYWNlOwkJLyogU3BhY2Ugb3duZWQgYnkgdGhlIHVzZXIgKi8KKwl1NjQgZF9pbm9fY291bnQ7CS8qICMgaW5vZGVzIG93bmVkIGJ5IHRoZSB1c2VyICovCisJczY0IGRfaW5vX3RpbWVyOwkvKiB6ZXJvIGlmIHdpdGhpbiBpbm9kZSBsaW1pdHMgKi8KKwkJCQkvKiBpZiBub3QsIHdlIHJlZnVzZSBzZXJ2aWNlICovCisJczY0IGRfc3BjX3RpbWVyOwkvKiBzaW1pbGFyIHRvIGFib3ZlOyBmb3Igc3BhY2UgKi8KKwlpbnQgZF9pbm9fd2FybnM7CS8qICMgd2FybmluZ3MgaXNzdWVkIHdydCBudW0gaW5vZGVzICovCisJaW50IGRfc3BjX3dhcm5zOwkvKiAjIHdhcm5pbmdzIGlzc3VlZCB3cnQgdXNlZCBzcGFjZSAqLworCXU2NCBkX3J0X3NwY19oYXJkbGltaXQ7CS8qIGFic29sdXRlIGxpbWl0IG9uIHJlYWx0aW1lIHNwYWNlICovCisJdTY0IGRfcnRfc3BjX3NvZnRsaW1pdDsJLyogcHJlZmVycmVkIGxpbWl0IG9uIFJUIHNwYWNlICovCisJdTY0IGRfcnRfc3BhY2U7CQkvKiByZWFsdGltZSBzcGFjZSBvd25lZCAqLworCXM2NCBkX3J0X3NwY190aW1lcjsJLyogc2ltaWxhciB0byBhYm92ZTsgZm9yIFJUIHNwYWNlICovCisJaW50IGRfcnRfc3BjX3dhcm5zOwkvKiAjIHdhcm5pbmdzIGlzc3VlZCB3cnQgUlQgc3BhY2UgKi8KK307CisKKy8qIEZpZWxkIHNwZWNpZmllcnMgZm9yIC0+c2V0X2RxYmxrKCkgaW4gc3RydWN0IHFjX2RxYmxrICovCisjZGVmaW5lCVFDX0lOT19TT0ZUCSgxPDwwKQorI2RlZmluZQlRQ19JTk9fSEFSRAkoMTw8MSkKKyNkZWZpbmUJUUNfU1BDX1NPRlQJKDE8PDIpCisjZGVmaW5lCVFDX1NQQ19IQVJECSgxPDwzKQorI2RlZmluZQlRQ19SVF9TUENfU09GVAkoMTw8NCkKKyNkZWZpbmUJUUNfUlRfU1BDX0hBUkQJKDE8PDUpCisjZGVmaW5lIFFDX0xJTUlUX01BU0sgKFFDX0lOT19TT0ZUIHwgUUNfSU5PX0hBUkQgfCBRQ19TUENfU09GVCB8IFFDX1NQQ19IQVJEIHwgXAorCQkgICAgICAgUUNfUlRfU1BDX1NPRlQgfCBRQ19SVF9TUENfSEFSRCkKKyNkZWZpbmUJUUNfU1BDX1RJTUVSCSgxPDw2KQorI2RlZmluZQlRQ19JTk9fVElNRVIJKDE8PDcpCisjZGVmaW5lCVFDX1JUX1NQQ19USU1FUgkoMTw8OCkKKyNkZWZpbmUgUUNfVElNRVJfTUFTSyAoUUNfU1BDX1RJTUVSIHwgUUNfSU5PX1RJTUVSIHwgUUNfUlRfU1BDX1RJTUVSKQorI2RlZmluZQlRQ19TUENfV0FSTlMJKDE8PDkpCisjZGVmaW5lCVFDX0lOT19XQVJOUwkoMTw8MTApCisjZGVmaW5lCVFDX1JUX1NQQ19XQVJOUwkoMTw8MTEpCisjZGVmaW5lIFFDX1dBUk5TX01BU0sgKFFDX1NQQ19XQVJOUyB8IFFDX0lOT19XQVJOUyB8IFFDX1JUX1NQQ19XQVJOUykKKyNkZWZpbmUJUUNfU1BBQ0UJKDE8PDEyKQorI2RlZmluZQlRQ19JTk9fQ09VTlQJKDE8PDEzKQorI2RlZmluZQlRQ19SVF9TUEFDRQkoMTw8MTQpCisjZGVmaW5lIFFDX0FDQ1RfTUFTSyAoUUNfU1BBQ0UgfCBRQ19JTk9fQ09VTlQgfCBRQ19SVF9TUEFDRSkKKwogLyogT3BlcmF0aW9ucyBoYW5kbGluZyByZXF1ZXN0cyBmcm9tIHVzZXJzcGFjZSAqLwogc3RydWN0IHF1b3RhY3RsX29wcyB7CiAJaW50ICgqcXVvdGFfb24pKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIGludCwgc3RydWN0IHBhdGggKik7Ci0JaW50ICgqcXVvdGFfb25fbWV0YSkoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgaW50KTsKIAlpbnQgKCpxdW90YV9vZmYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOworCWludCAoKnF1b3RhX2VuYWJsZSkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGludCk7CisJaW50ICgqcXVvdGFfZGlzYWJsZSkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGludCk7CiAJaW50ICgqcXVvdGFfc3luYykoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCk7CiAJaW50ICgqZ2V0X2luZm8pKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIHN0cnVjdCBpZl9kcWluZm8gKik7CiAJaW50ICgqc2V0X2luZm8pKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIHN0cnVjdCBpZl9kcWluZm8gKik7Ci0JaW50ICgqZ2V0X2RxYmxrKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGtxaWQsIHN0cnVjdCBmc19kaXNrX3F1b3RhICopOwotCWludCAoKnNldF9kcWJsaykoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrcWlkLCBzdHJ1Y3QgZnNfZGlza19xdW90YSAqKTsKKwlpbnQgKCpnZXRfZHFibGspKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3Qga3FpZCwgc3RydWN0IHFjX2RxYmxrICopOworCWludCAoKnNldF9kcWJsaykoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBrcWlkLCBzdHJ1Y3QgcWNfZHFibGsgKik7CiAJaW50ICgqZ2V0X3hzdGF0ZSkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmc19xdW90YV9zdGF0ICopOwotCWludCAoKnNldF94c3RhdGUpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBpbnQsIGludCk7CiAJaW50ICgqZ2V0X3hzdGF0ZXYpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZnNfcXVvdGFfc3RhdHYgKik7CiAJaW50ICgqcm1feHF1b3RhKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgaW50KTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmggYi9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKaW5kZXggZjIzNTM4YS4uZGY3MzI1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaApAQCAtOTgsOSArOTgsOSBAQAogaW50IGRxdW90X2dldF9kcWluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHN0cnVjdCBpZl9kcWluZm8gKmlpKTsKIGludCBkcXVvdF9zZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgaWZfZHFpbmZvICppaSk7CiBpbnQgZHF1b3RfZ2V0X2RxYmxrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBrcWlkIGlkLAotCQlzdHJ1Y3QgZnNfZGlza19xdW90YSAqZGkpOworCQlzdHJ1Y3QgcWNfZHFibGsgKmRpKTsKIGludCBkcXVvdF9zZXRfZHFibGsoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGtxaWQgaWQsCi0JCXN0cnVjdCBmc19kaXNrX3F1b3RhICpkaSk7CisJCXN0cnVjdCBxY19kcWJsayAqZGkpOwogCiBpbnQgX19kcXVvdF90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZHF1b3QgKip0cmFuc2Zlcl90byk7CiBpbnQgZHF1b3RfdHJhbnNmZXIoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICppYXR0cik7CkBAIC0xNjYsNiArMTY2LDcgQEAKICAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcXVvdF9vcGVyYXRpb25zIGRxdW90X29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcyBkcXVvdF9xdW90YWN0bF9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IHF1b3RhY3RsX29wcyBkcXVvdF9xdW90YWN0bF9zeXNmaWxlX29wczsKIAogI2Vsc2UKIApAQCAtMzg2LDQgKzM4Nyw2IEBACiAJX19kcXVvdF9mcmVlX3NwYWNlKGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzLCBEUVVPVF9TUEFDRV9SRVNFUlZFKTsKIH0KIAordW5zaWduZWQgaW50IHF0eXBlX2VuZm9yY2VfZmxhZyhpbnQgdHlwZSk7CisKICNlbmRpZiAvKiBfTElOVVhfUVVPVEFPUFNfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdWxpc3QuaCBiL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oCmluZGV4IDUyOWJjOTQuLmExOGIxNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oCkBAIC01MjQsMTEgKzUyNCwxMSBAQAogICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGhsaXN0X25vZGUgd2l0aGluIHRoZSBzdHJ1Y3QuCiAgKi8KICNkZWZpbmUgaGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmN1KHBvcywgbWVtYmVyKQkJCVwKLQlmb3IgKHBvcyA9IGhsaXN0X2VudHJ5X3NhZmUocmN1X2RlcmVmZXJlbmNlKChwb3MpLT5tZW1iZXIubmV4dCksXAotCQkJdHlwZW9mKCoocG9zKSksIG1lbWJlcik7CQkJXAorCWZvciAocG9zID0gaGxpc3RfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X25leHRfcmN1KCBcCisJCQkmKHBvcyktPm1lbWJlcikpLCB0eXBlb2YoKihwb3MpKSwgbWVtYmVyKTsJXAogCSAgICAgcG9zOwkJCQkJCQlcCi0JICAgICBwb3MgPSBobGlzdF9lbnRyeV9zYWZlKHJjdV9kZXJlZmVyZW5jZSgocG9zKS0+bWVtYmVyLm5leHQpLFwKLQkJCXR5cGVvZigqKHBvcykpLCBtZW1iZXIpKQorCSAgICAgcG9zID0gaGxpc3RfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X25leHRfcmN1KAlcCisJCQkmKHBvcyktPm1lbWJlcikpLCB0eXBlb2YoKihwb3MpKSwgbWVtYmVyKSkKIAogLyoqCiAgKiBobGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3VfYmggLSBpdGVyYXRlIG92ZXIgYSBobGlzdCBjb250aW51aW5nIGFmdGVyIGN1cnJlbnQgcG9pbnQKQEAgLTUzNiwxMSArNTM2LDExIEBACiAgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgaGxpc3Rfbm9kZSB3aXRoaW4gdGhlIHN0cnVjdC4KICAqLwogI2RlZmluZSBobGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3VfYmgocG9zLCBtZW1iZXIpCQlcCi0JZm9yIChwb3MgPSBobGlzdF9lbnRyeV9zYWZlKHJjdV9kZXJlZmVyZW5jZV9iaCgocG9zKS0+bWVtYmVyLm5leHQpLFwKLQkJCXR5cGVvZigqKHBvcykpLCBtZW1iZXIpOwkJCVwKKwlmb3IgKHBvcyA9IGhsaXN0X2VudHJ5X3NhZmUocmN1X2RlcmVmZXJlbmNlX2JoKGhsaXN0X25leHRfcmN1KCAgXAorCQkJJihwb3MpLT5tZW1iZXIpKSwgdHlwZW9mKCoocG9zKSksIG1lbWJlcik7CVwKIAkgICAgIHBvczsJCQkJCQkJXAotCSAgICAgcG9zID0gaGxpc3RfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfYmgoKHBvcyktPm1lbWJlci5uZXh0KSxcCi0JCQl0eXBlb2YoKihwb3MpKSwgbWVtYmVyKSkKKwkgICAgIHBvcyA9IGhsaXN0X2VudHJ5X3NhZmUocmN1X2RlcmVmZXJlbmNlX2JoKGhsaXN0X25leHRfcmN1KAlcCisJCQkmKHBvcyktPm1lbWJlcikpLCB0eXBlb2YoKihwb3MpKSwgbWVtYmVyKSkKIAogLyoqCiAgKiBobGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JjdSAtIGl0ZXJhdGUgb3ZlciBhIGhsaXN0IGNvbnRpbnVpbmcgZnJvbSBjdXJyZW50IHBvaW50CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKaW5kZXggZWQ0ZjU5My4uNzgwOTc0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaApAQCAtMzMxLDEyICszMzEsMTMgQEAKIGV4dGVybiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgdGFza3NfcmN1X2V4aXRfc3JjdTsKICNkZWZpbmUgcmN1X25vdGVfdm9sdW50YXJ5X2NvbnRleHRfc3dpdGNoKHQpIFwKIAlkbyB7IFwKKwkJcmN1X2FsbF9xcygpOyBcCiAJCWlmIChBQ0NFU1NfT05DRSgodCktPnJjdV90YXNrc19ob2xkb3V0KSkgXAogCQkJQUNDRVNTX09OQ0UoKHQpLT5yY3VfdGFza3NfaG9sZG91dCkgPSBmYWxzZTsgXAogCX0gd2hpbGUgKDApCiAjZWxzZSAvKiAjaWZkZWYgQ09ORklHX1RBU0tTX1JDVSAqLwogI2RlZmluZSBUQVNLU19SQ1UoeCkgZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSByY3Vfbm90ZV92b2x1bnRhcnlfY29udGV4dF9zd2l0Y2godCkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByY3Vfbm90ZV92b2x1bnRhcnlfY29udGV4dF9zd2l0Y2godCkJcmN1X2FsbF9xcygpCiAjZW5kaWYgLyogI2Vsc2UgI2lmZGVmIENPTkZJR19UQVNLU19SQ1UgKi8KIAogLyoqCkBAIC01ODIsMTEgKzU4MywxMSBAQAogfSkKICNkZWZpbmUgX19yY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgYywgc3BhY2UpIFwKICh7IFwKLQl0eXBlb2YoKnApICpfX19fX19fX19wMSA9ICh0eXBlb2YoKnApICpfX2ZvcmNlKUFDQ0VTU19PTkNFKHApOyBcCisJLyogRGVwZW5kZW5jeSBvcmRlciB2cy4gcCBhYm92ZS4gKi8gXAorCXR5cGVvZigqcCkgKl9fX19fX19fcDEgPSAodHlwZW9mKCpwKSAqX19mb3JjZSlsb2NrbGVzc19kZXJlZmVyZW5jZShwKTsgXAogCXJjdV9sb2NrZGVwX2Fzc2VydChjLCAic3VzcGljaW91cyByY3VfZGVyZWZlcmVuY2VfY2hlY2soKSB1c2FnZSIpOyBcCiAJcmN1X2RlcmVmZXJlbmNlX3NwYXJzZShwLCBzcGFjZSk7IFwKLQlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsgLyogRGVwZW5kZW5jeSBvcmRlciB2cy4gcCBhYm92ZS4gKi8gXAotCSgodHlwZW9mKCpwKSBfX2ZvcmNlIF9fa2VybmVsICopKF9fX19fX19fX3AxKSk7IFwKKwkoKHR5cGVvZigqcCkgX19mb3JjZSBfX2tlcm5lbCAqKShfX19fX19fX3AxKSk7IFwKIH0pCiAjZGVmaW5lIF9fcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwLCBjLCBzcGFjZSkgXAogKHsgXApAQCAtNjAzLDEwICs2MDQsMTAgQEAKIH0pCiAjZGVmaW5lIF9fcmN1X2RlcmVmZXJlbmNlX2luZGV4X2NoZWNrKHAsIGMpIFwKICh7IFwKLQl0eXBlb2YocCkgX19fX19fX19fcDEgPSBBQ0NFU1NfT05DRShwKTsgXAorCS8qIERlcGVuZGVuY3kgb3JkZXIgdnMuIHAgYWJvdmUuICovIFwKKwl0eXBlb2YocCkgX19fX19fX19fcDEgPSBsb2NrbGVzc19kZXJlZmVyZW5jZShwKTsgXAogCXJjdV9sb2NrZGVwX2Fzc2VydChjLCBcCiAJCQkgICAic3VzcGljaW91cyByY3VfZGVyZWZlcmVuY2VfaW5kZXhfY2hlY2soKSB1c2FnZSIpOyBcCi0Jc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCk7IC8qIERlcGVuZGVuY3kgb3JkZXIgdnMuIHAgYWJvdmUuICovIFwKIAkoX19fX19fX19fcDEpOyBcCiB9KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXRpbnkuaCBiL2luY2x1ZGUvbGludXgvcmN1dGlueS5oCmluZGV4IDBlNTM2NjIuLjkzN2VkYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1dGlueS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1dGlueS5oCkBAIC05MiwxNyArOTIsNDkgQEAKIH0KIAogLyoKLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdyYWNlIHBlcmlvZHMuCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBncmFjZSBwZXJpb2RzIHN0YXJ0ZWQuCiAgKi8KLXN0YXRpYyBpbmxpbmUgbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByY3VfYmF0Y2hlc19zdGFydGVkKHZvaWQpCiB7CiAJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBib3R0b20taGFsZiBncmFjZSBwZXJpb2RzLgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYm90dG9tLWhhbGYgZ3JhY2UgcGVyaW9kcyBzdGFydGVkLgogICovCi1zdGF0aWMgaW5saW5lIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKHZvaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmN1X2JhdGNoZXNfc3RhcnRlZF9iaCh2b2lkKQoreworCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2NoZWQgZ3JhY2UgcGVyaW9kcyBzdGFydGVkLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmN1X2JhdGNoZXNfc3RhcnRlZF9zY2hlZCh2b2lkKQoreworCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZ3JhY2UgcGVyaW9kcyBjb21wbGV0ZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJvdHRvbS1oYWxmIGdyYWNlIHBlcmlvZHMgY29tcGxldGVkLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBzY2hlZCBncmFjZSBwZXJpb2RzIGNvbXBsZXRlZC4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9zY2hlZCh2b2lkKQogewogCXJldHVybiAwOwogfQpAQCAtMTU0LDcgKzE4NiwxMCBAQAogCXJldHVybiB0cnVlOwogfQogCi0KICNlbmRpZiAvKiAjZWxzZSBkZWZpbmVkKENPTkZJR19ERUJVR19MT0NLX0FMTE9DKSB8fCBkZWZpbmVkKENPTkZJR19SQ1VfVFJBQ0UpICovCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCByY3VfYWxsX3FzKHZvaWQpCit7Cit9CisKICNlbmRpZiAvKiBfX0xJTlVYX1JDVVRJTllfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yY3V0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAppbmRleCA1Mjk1Mzc5Li5kMmU1ODNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JjdXRyZWUuaApAQCAtODEsOSArODEsMTIgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmN1dG9ydHVyZV90ZXN0c2VxOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmN1dG9ydHVyZV92ZXJudW07Ci1sb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKTsKLWxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKHZvaWQpOwotbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfc2NoZWQodm9pZCk7Cit1bnNpZ25lZCBsb25nIHJjdV9iYXRjaGVzX3N0YXJ0ZWQodm9pZCk7Cit1bnNpZ25lZCBsb25nIHJjdV9iYXRjaGVzX3N0YXJ0ZWRfYmgodm9pZCk7Cit1bnNpZ25lZCBsb25nIHJjdV9iYXRjaGVzX3N0YXJ0ZWRfc2NoZWQodm9pZCk7Cit1bnNpZ25lZCBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKHZvaWQpOwordW5zaWduZWQgbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfc2NoZWQodm9pZCk7CiB2b2lkIHNob3dfcmN1X2dwX2t0aHJlYWRzKHZvaWQpOwogCiB2b2lkIHJjdV9mb3JjZV9xdWllc2NlbnRfc3RhdGUodm9pZCk7CkBAIC05Nyw0ICsxMDAsNiBAQAogCiBib29sIHJjdV9pc193YXRjaGluZyh2b2lkKTsKIAordm9pZCByY3VfYWxsX3FzKHZvaWQpOworCiAjZW5kaWYgLyogX19MSU5VWF9SQ1VUUkVFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVnbWFwLmggYi9pbmNsdWRlL2xpbnV4L3JlZ21hcC5oCmluZGV4IDQ0MTliOTkuLjExNjY1NWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVnbWFwLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWdtYXAuaApAQCAtNDY4LDcgKzQ2OCw3IEBACiAgKgogICogQHJlZzogT2Zmc2V0IG9mIHRoZSByZWdpc3RlciB3aXRoaW4gdGhlIHJlZ21hcCBiYW5rCiAgKiBAbHNiOiBsc2Igb2YgdGhlIHJlZ2lzdGVyIGZpZWxkLgotICogQHJlZzogbXNiIG9mIHRoZSByZWdpc3RlciBmaWVsZC4KKyAqIEBtc2I6IG1zYiBvZiB0aGUgcmVnaXN0ZXIgZmllbGQuCiAgKiBAaWRfc2l6ZTogcG9ydCBzaXplIGlmIGl0IGhhcyBzb21lIHBvcnRzCiAgKiBAaWRfb2Zmc2V0OiBhZGRyZXNzIG9mZnNldCBmb3IgZWFjaCBwb3J0cwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kYTkyMTEuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RhOTIxMS5oCmluZGV4IDU0NzkzOTQuLjVkZDY1YWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RhOTIxMS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RhOTIxMS5oCkBAIC0zMiw2ICszMiw4IEBACiAJICogMiA6IDIgcGhhc2UgMiBidWNrCiAJICovCiAJaW50IG51bV9idWNrOworCWludCBncGlvX3JlbltEQTkyMTFfTUFYX1JFR1VMQVRPUlNdOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVnX25vZGVbREE5MjExX01BWF9SRUdVTEFUT1JTXTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSAqaW5pdF9kYXRhW0RBOTIxMV9NQVhfUkVHVUxBVE9SU107CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCmluZGV4IDVmMWU5Y2EuLmQ0YWQ1YjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2RyaXZlci5oCkBAIC0yMSw2ICsyMSw3IEBACiAKIHN0cnVjdCByZWdtYXA7CiBzdHJ1Y3QgcmVndWxhdG9yX2RldjsKK3N0cnVjdCByZWd1bGF0b3JfY29uZmlnOwogc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGE7CiBzdHJ1Y3QgcmVndWxhdG9yX2VuYWJsZV9ncGlvOwogCkBAIC0yMDUsNiArMjA2LDE1IEBACiAgKiBAc3VwcGx5X25hbWU6IElkZW50aWZ5aW5nIHRoZSByZWd1bGF0b3Igc3VwcGx5CiAgKiBAb2ZfbWF0Y2g6IE5hbWUgdXNlZCB0byBpZGVudGlmeSByZWd1bGF0b3IgaW4gRFQuCiAgKiBAcmVndWxhdG9yc19ub2RlOiBOYW1lIG9mIG5vZGUgY29udGFpbmluZyByZWd1bGF0b3IgZGVmaW5pdGlvbnMgaW4gRFQuCisgKiBAb2ZfcGFyc2VfY2I6IE9wdGlvbmFsIGNhbGxiYWNrIGNhbGxlZCBvbmx5IGlmIG9mX21hdGNoIGlzIHByZXNlbnQuCisgKiAgICAgICAgICAgICAgIFdpbGwgYmUgY2FsbGVkIGZvciBlYWNoIHJlZ3VsYXRvciBwYXJzZWQgZnJvbSBEVCwgZHVyaW5nCisgKiAgICAgICAgICAgICAgIGluaXRfZGF0YSBwYXJzaW5nLgorICogICAgICAgICAgICAgICBUaGUgcmVndWxhdG9yX2NvbmZpZyBwYXNzZWQgYXMgYXJndW1lbnQgdG8gdGhlIGNhbGxiYWNrIHdpbGwKKyAqICAgICAgICAgICAgICAgYmUgYSBjb3B5IG9mIGNvbmZpZyBwYXNzZWQgdG8gcmVndWxhdG9yX3JlZ2lzdGVyLCB2YWxpZCBvbmx5CisgKiAgICAgICAgICAgICAgIGZvciB0aGlzIHBhcnRpY3VsYXIgY2FsbC4gQ2FsbGJhY2sgbWF5IGZyZWVseSBjaGFuZ2UgdGhlCisgKiAgICAgICAgICAgICAgIGNvbmZpZyBidXQgaXQgY2Fubm90IHN0b3JlIGl0IGZvciBsYXRlciB1c2FnZS4KKyAqICAgICAgICAgICAgICAgQ2FsbGJhY2sgc2hvdWxkIHJldHVybiAwIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgRVJSTk8KKyAqICAgICAgICAgICAgICAgaW5kaWNhdGluZyBmYWlsdXJlLgogICogQGlkOiBOdW1lcmljYWwgaWRlbnRpZmllciBmb3IgdGhlIHJlZ3VsYXRvci4KICAqIEBvcHM6IFJlZ3VsYXRvciBvcGVyYXRpb25zIHRhYmxlLgogICogQGlycTogSW50ZXJydXB0IG51bWJlciBmb3IgdGhlIHJlZ3VsYXRvci4KQEAgLTI1MSw2ICsyNjEsOSBAQAogCWNvbnN0IGNoYXIgKnN1cHBseV9uYW1lOwogCWNvbnN0IGNoYXIgKm9mX21hdGNoOwogCWNvbnN0IGNoYXIgKnJlZ3VsYXRvcnNfbm9kZTsKKwlpbnQgKCpvZl9wYXJzZV9jYikoc3RydWN0IGRldmljZV9ub2RlICosCisJCQkgICAgY29uc3Qgc3RydWN0IHJlZ3VsYXRvcl9kZXNjICosCisJCQkgICAgc3RydWN0IHJlZ3VsYXRvcl9jb25maWcgKik7CiAJaW50IGlkOwogCWJvb2wgY29udGludW91c192b2x0YWdlX3JhbmdlOwogCXVuc2lnbmVkIG5fdm9sdGFnZXM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmgKaW5kZXggMGIwOGQwNS4uYjA3NTYyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWFjaGluZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21hY2hpbmUuaApAQCAtMTkxLDE1ICsxOTEsMjIgQEAKIAl2b2lkICpkcml2ZXJfZGF0YTsJLyogY29yZSBkb2VzIG5vdCB0b3VjaCB0aGlzICovCiB9OwogCi1pbnQgcmVndWxhdG9yX3N1c3BlbmRfcHJlcGFyZShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpOwotaW50IHJlZ3VsYXRvcl9zdXNwZW5kX2ZpbmlzaCh2b2lkKTsKLQogI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKIHZvaWQgcmVndWxhdG9yX2hhc19mdWxsX2NvbnN0cmFpbnRzKHZvaWQpOworaW50IHJlZ3VsYXRvcl9zdXNwZW5kX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKK2ludCByZWd1bGF0b3Jfc3VzcGVuZF9maW5pc2godm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHJlZ3VsYXRvcl9oYXNfZnVsbF9jb25zdHJhaW50cyh2b2lkKQogewogfQorc3RhdGljIGlubGluZSBpbnQgcmVndWxhdG9yX3N1c3BlbmRfcHJlcGFyZShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCByZWd1bGF0b3Jfc3VzcGVuZF9maW5pc2godm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL210NjM5Ny1yZWd1bGF0b3IuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL210NjM5Ny1yZWd1bGF0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGNjNTk2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbXQ2Mzk3LXJlZ3VsYXRvci5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgTWVkaWFUZWsgSW5jLgorICogQXV0aG9yOiBGbG9yYSBGdSA8ZmxvcmEuZnVAbWVkaWF0ZWsuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfUkVHVUxBVE9SX01UNjM5N19ICisjZGVmaW5lIF9fTElOVVhfUkVHVUxBVE9SX01UNjM5N19ICisKK2VudW0geworCU1UNjM5N19JRF9WUENBMTUgPSAwLAorCU1UNjM5N19JRF9WUENBNywKKwlNVDYzOTdfSURfVlNSQU1DQTE1LAorCU1UNjM5N19JRF9WU1JBTUNBNywKKwlNVDYzOTdfSURfVkNPUkUsCisJTVQ2Mzk3X0lEX1ZHUFUsCisJTVQ2Mzk3X0lEX1ZEUk0sCisJTVQ2Mzk3X0lEX1ZJTzE4ID0gNywKKwlNVDYzOTdfSURfVlRDWE8sCisJTVQ2Mzk3X0lEX1ZBMjgsCisJTVQ2Mzk3X0lEX1ZDQU1BLAorCU1UNjM5N19JRF9WSU8yOCwKKwlNVDYzOTdfSURfVlVTQiwKKwlNVDYzOTdfSURfVk1DLAorCU1UNjM5N19JRF9WTUNILAorCU1UNjM5N19JRF9WRU1DM1YzLAorCU1UNjM5N19JRF9WR1AxLAorCU1UNjM5N19JRF9WR1AyLAorCU1UNjM5N19JRF9WR1AzLAorCU1UNjM5N19JRF9WR1A0LAorCU1UNjM5N19JRF9WR1A1LAorCU1UNjM5N19JRF9WR1A2LAorCU1UNjM5N19JRF9WSUJSLAorCU1UNjM5N19JRF9SR19NQVgsCit9OworCisjZGVmaW5lIE1UNjM5N19NQVhfUkVHVUxBVE9SCU1UNjM5N19JRF9SR19NQVgKKyNkZWZpbmUgTVQ2Mzk3X1JFR1VMQVRPUl9JRDk3CTB4OTcKKyNkZWZpbmUgTVQ2Mzk3X1JFR1VMQVRPUl9JRDkxCTB4OTEKKworI2VuZGlmIC8qIF9fTElOVVhfUkVHVUxBVE9SX01UNjM5N19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9wZnV6ZTEwMC5oIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvcGZ1emUxMDAuaAppbmRleCAzNjRmN2E3Li43MGM2YzY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9wZnV6ZTEwMC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL3BmdXplMTAwLmgKQEAgLTQ5LDYgKzQ5LDIwIEBACiAjZGVmaW5lIFBGVVpFMjAwX1ZHRU41CQkxMQogI2RlZmluZSBQRlVaRTIwMF9WR0VONgkJMTIKIAorI2RlZmluZSBQRlVaRTMwMDBfU1cxQQkJMAorI2RlZmluZSBQRlVaRTMwMDBfU1cxQgkJMQorI2RlZmluZSBQRlVaRTMwMDBfU1cyCQkyCisjZGVmaW5lIFBGVVpFMzAwMF9TVzMJCTMKKyNkZWZpbmUgUEZVWkUzMDAwX1NXQlNUCQk0CisjZGVmaW5lIFBGVVpFMzAwMF9WU05WUwkJNQorI2RlZmluZSBQRlVaRTMwMDBfVlJFRkREUgk2CisjZGVmaW5lIFBGVVpFMzAwMF9WTERPMQkJNworI2RlZmluZSBQRlVaRTMwMDBfVkxETzIJCTgKKyNkZWZpbmUgUEZVWkUzMDAwX1ZDQ1NECQk5CisjZGVmaW5lIFBGVVpFMzAwMF9WMzMJCTEwCisjZGVmaW5lIFBGVVpFMzAwMF9WTERPMwkJMTEKKyNkZWZpbmUgUEZVWkUzMDAwX1ZMRE80CQkxMgorCiBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YTsKIAogc3RydWN0IHBmdXplX3JlZ3VsYXRvcl9wbGF0Zm9ybV9kYXRhIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVzb3VyY2VfZXh0LmggYi9pbmNsdWRlL2xpbnV4L3Jlc291cmNlX2V4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYmY2M2QKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Jlc291cmNlX2V4dC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEludGVsIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IEppYW5nIExpdSA8amlhbmcubGl1QGxpbnV4LmludGVsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX0xJTlVYX1JFU09VUkNFX0VYVF9ICisjZGVmaW5lIF9MSU5VWF9SRVNPVVJDRV9FWFRfSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworLyogUmVwcmVzZW50IHJlc291cmNlIHdpbmRvdyBmb3IgYnJpZGdlIGRldmljZXMgKi8KK3N0cnVjdCByZXNvdXJjZV93aW4geworCXN0cnVjdCByZXNvdXJjZSByZXM7CQkvKiBJbiBtYXN0ZXIgKENQVSkgYWRkcmVzcyBzcGFjZSAqLworCXJlc291cmNlX3NpemVfdCBvZmZzZXQ7CQkvKiBUcmFuc2xhdGlvbiBvZmZzZXQgZm9yIGJyaWRnZSAqLworfTsKKworLyoKKyAqIENvbW1vbiByZXNvdXJjZSBsaXN0IG1hbmFnZW1lbnQgZGF0YSBzdHJ1Y3R1cmUgYW5kIGludGVyZmFjZXMgdG8gc3VwcG9ydAorICogQUNQSSwgUE5QIGFuZCBQQ0kgaG9zdCBicmlkZ2UgZXRjLgorICovCitzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSpyZXM7CS8qIEluIG1hc3RlciAoQ1BVKSBhZGRyZXNzIHNwYWNlICovCisJcmVzb3VyY2Vfc2l6ZV90CQlvZmZzZXQ7CS8qIFRyYW5zbGF0aW9uIG9mZnNldCBmb3IgYnJpZGdlICovCisJc3RydWN0IHJlc291cmNlCQlfX3JlczsJLyogRGVmYXVsdCBzdG9yYWdlIGZvciByZXMgKi8KK307CisKK2V4dGVybiBzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKgorcmVzb3VyY2VfbGlzdF9jcmVhdGVfZW50cnkoc3RydWN0IHJlc291cmNlICpyZXMsIHNpemVfdCBleHRyYV9zaXplKTsKK2V4dGVybiB2b2lkIHJlc291cmNlX2xpc3RfZnJlZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKKworc3RhdGljIGlubGluZSB2b2lkIHJlc291cmNlX2xpc3RfYWRkKHN0cnVjdCByZXNvdXJjZV9lbnRyeSAqZW50cnksCisJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCWxpc3RfYWRkKCZlbnRyeS0+bm9kZSwgaGVhZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXNvdXJjZV9saXN0X2FkZF90YWlsKHN0cnVjdCByZXNvdXJjZV9lbnRyeSAqZW50cnksCisJCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bm9kZSwgaGVhZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXNvdXJjZV9saXN0X2RlbChzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKmVudHJ5KQoreworCWxpc3RfZGVsKCZlbnRyeS0+bm9kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZXNvdXJjZV9saXN0X2ZyZWVfZW50cnkoc3RydWN0IHJlc291cmNlX2VudHJ5ICplbnRyeSkKK3sKKwlrZnJlZShlbnRyeSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcmVzb3VyY2VfbGlzdF9kZXN0cm95X2VudHJ5KHN0cnVjdCByZXNvdXJjZV9lbnRyeSAqZW50cnkpCit7CisJcmVzb3VyY2VfbGlzdF9kZWwoZW50cnkpOworCXJlc291cmNlX2xpc3RfZnJlZV9lbnRyeShlbnRyeSk7Cit9CisKKyNkZWZpbmUgcmVzb3VyY2VfbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbGlzdCkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoKGVudHJ5KSwgKGxpc3QpLCBub2RlKQorCisjZGVmaW5lIHJlc291cmNlX2xpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgdG1wLCBsaXN0KQlcCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKChlbnRyeSksICh0bXApLCAobGlzdCksIG5vZGUpCisKKyNlbmRpZiAvKiBfTElOVVhfUkVTT1VSQ0VfRVhUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmhhc2h0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgKaW5kZXggYjkzZmQ4OS4uNTg4NTEyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yaGFzaHRhYmxlLmgKQEAgLTE4LDE2ICsxOCw0NSBAQAogI2lmbmRlZiBfTElOVVhfUkhBU0hUQUJMRV9ICiAjZGVmaW5lIF9MSU5VWF9SSEFTSFRBQkxFX0gKIAotI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3RfbnVsbHMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisvKgorICogVGhlIGVuZCBvZiB0aGUgY2hhaW4gaXMgbWFya2VkIHdpdGggYSBzcGVjaWFsIG51bGxzIG1hcmtzIHdoaWNoIGhhcworICogdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgKgorICogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLSsKKyAqIHwgQmFzZSAgfCAgICAgICAgICAgICAgICAgICAgICBIYXNoICAgICAgICAgICAgICAgICAgICAgICAgICAgfDF8CisgKiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstKworICoKKyAqIEJhc2UgKDQgYml0cykgOiBSZXNlcnZlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIG11bHRpcGxlIHRhYmxlcy4KKyAqICAgICAgICAgICAgICAgICBTcGVjaWZpZWQgdmlhICZzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMubnVsbHNfYmFzZS4KKyAqIEhhc2ggKDI3IGJpdHMpOiBGdWxsIGhhc2ggKHVubWFza2VkKSBvZiBmaXJzdCBlbGVtZW50IGFkZGVkIHRvIGJ1Y2tldAorICogMSAoMSBiaXQpICAgICA6IE51bGxzIG1hcmtlciAoYWx3YXlzIHNldCkKKyAqCisgKiBUaGUgcmVtYWluaW5nIGJpdHMgb2YgdGhlIG5leHQgcG9pbnRlciByZW1haW4gdW51c2VkIGZvciBub3cuCisgKi8KKyNkZWZpbmUgUkhUX0JBU0VfQklUUwkJNAorI2RlZmluZSBSSFRfSEFTSF9CSVRTCQkyNworI2RlZmluZSBSSFRfQkFTRV9TSElGVAkJUkhUX0hBU0hfQklUUwogCiBzdHJ1Y3Qgcmhhc2hfaGVhZCB7CiAJc3RydWN0IHJoYXNoX2hlYWQgX19yY3UJCSpuZXh0OwogfTsKIAotI2RlZmluZSBJTklUX0hBU0hfSEVBRChwdHIpICgocHRyKS0+bmV4dCA9IE5VTEwpCi0KKy8qKgorICogc3RydWN0IGJ1Y2tldF90YWJsZSAtIFRhYmxlIG9mIGhhc2ggYnVja2V0cworICogQHNpemU6IE51bWJlciBvZiBoYXNoIGJ1Y2tldHMKKyAqIEBsb2Nrc19tYXNrOiBNYXNrIHRvIGFwcGx5IGJlZm9yZSBhY2Nlc3NpbmcgbG9ja3NbXQorICogQGxvY2tzOiBBcnJheSBvZiBzcGlubG9ja3MgcHJvdGVjdGluZyBpbmRpdmlkdWFsIGJ1Y2tldHMKKyAqIEBidWNrZXRzOiBzaXplICogaGFzaCBidWNrZXRzCisgKi8KIHN0cnVjdCBidWNrZXRfdGFibGUgewogCXNpemVfdAkJCQlzaXplOworCXVuc2lnbmVkIGludAkJCWxvY2tzX21hc2s7CisJc3BpbmxvY2tfdAkJCSpsb2NrczsKIAlzdHJ1Y3Qgcmhhc2hfaGVhZCBfX3JjdQkJKmJ1Y2tldHNbXTsKIH07CiAKQEAgLTQ1LDExICs3NCwxNiBAQAogICogQGhhc2hfcm5kOiBTZWVkIHRvIHVzZSB3aGlsZSBoYXNoaW5nCiAgKiBAbWF4X3NoaWZ0OiBNYXhpbXVtIG51bWJlciBvZiBzaGlmdHMgd2hpbGUgZXhwYW5kaW5nCiAgKiBAbWluX3NoaWZ0OiBNaW5pbXVtIG51bWJlciBvZiBzaGlmdHMgd2hpbGUgc2hyaW5raW5nCisgKiBAbnVsbHNfYmFzZTogQmFzZSB2YWx1ZSB0byBnZW5lcmF0ZSBudWxscyBtYXJrZXIKKyAqIEBsb2Nrc19tdWw6IE51bWJlciBvZiBidWNrZXQgbG9ja3MgdG8gYWxsb2NhdGUgcGVyIGNwdSAoZGVmYXVsdDogMTI4KQogICogQGhhc2hmbjogRnVuY3Rpb24gdG8gaGFzaCBrZXkKICAqIEBvYmpfaGFzaGZuOiBGdW5jdGlvbiB0byBoYXNoIG9iamVjdAogICogQGdyb3dfZGVjaXNpb246IElmIGRlZmluZWQsIG1heSByZXR1cm4gdHJ1ZSBpZiB0YWJsZSBzaG91bGQgZXhwYW5kCiAgKiBAc2hyaW5rX2RlY2lzaW9uOiBJZiBkZWZpbmVkLCBtYXkgcmV0dXJuIHRydWUgaWYgdGFibGUgc2hvdWxkIHNocmluawotICogQG11dGV4X2lzX2hlbGQ6IE11c3QgcmV0dXJuIHRydWUgaWYgcHJvdGVjdGluZyBtdXRleCBpcyBoZWxkCisgKgorICogTm90ZTogd2hlbiBpbXBsZW1lbnRpbmcgdGhlIGdyb3cgYW5kIHNocmluayBkZWNpc2lvbiBmdW5jdGlvbiwgbWluL21heAorICogc2hpZnQgbXVzdCBiZSBlbmZvcmNlZCwgb3RoZXJ3aXNlLCByZXNpemluZyB3YXRlcm1hcmtzIHRoZXkgc2V0IG1heSBiZQorICogdXNlbGVzcy4KICAqLwogc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHsKIAlzaXplX3QJCQluZWxlbV9oaW50OwpAQCAtNTksMzYgKzkzLDk1IEBACiAJdTMyCQkJaGFzaF9ybmQ7CiAJc2l6ZV90CQkJbWF4X3NoaWZ0OwogCXNpemVfdAkJCW1pbl9zaGlmdDsKKwl1MzIJCQludWxsc19iYXNlOworCXNpemVfdAkJCWxvY2tzX211bDsKIAlyaHRfaGFzaGZuX3QJCWhhc2hmbjsKIAlyaHRfb2JqX2hhc2hmbl90CW9ial9oYXNoZm47CiAJYm9vbAkJCSgqZ3Jvd19kZWNpc2lvbikoY29uc3Qgc3RydWN0IHJoYXNodGFibGUgKmh0LAogCQkJCQkJIHNpemVfdCBuZXdfc2l6ZSk7CiAJYm9vbAkJCSgqc2hyaW5rX2RlY2lzaW9uKShjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsCiAJCQkJCQkgICBzaXplX3QgbmV3X3NpemUpOwotI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCi0JaW50CQkJKCptdXRleF9pc19oZWxkKSh2b2lkICpwYXJlbnQpOwotCXZvaWQJCQkqcGFyZW50OwotI2VuZGlmCiB9OwogCiAvKioKICAqIHN0cnVjdCByaGFzaHRhYmxlIC0gSGFzaCB0YWJsZSBoYW5kbGUKICAqIEB0Ymw6IEJ1Y2tldCB0YWJsZQorICogQGZ1dHVyZV90Ymw6IFRhYmxlIHVuZGVyIGNvbnN0cnVjdGlvbiBkdXJpbmcgZXhwYW5zaW9uL3Nocmlua2luZwogICogQG5lbGVtczogTnVtYmVyIG9mIGVsZW1lbnRzIGluIHRhYmxlCiAgKiBAc2hpZnQ6IEN1cnJlbnQgc2l6ZSAoMSA8PCBzaGlmdCkKICAqIEBwOiBDb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKKyAqIEBydW5fd29yazogRGVmZXJyZWQgd29ya2VyIHRvIGV4cGFuZC9zaHJpbmsgYXN5bmNocm9ub3VzbHkKKyAqIEBtdXRleDogTXV0ZXggdG8gcHJvdGVjdCBjdXJyZW50L2Z1dHVyZSB0YWJsZSBzd2FwcGluZworICogQHdhbGtlcnM6IExpc3Qgb2YgYWN0aXZlIHdhbGtlcnMKKyAqIEBiZWluZ19kZXN0cm95ZWQ6IFRydWUgaWYgdGFibGUgaXMgc2V0IHVwIGZvciBkZXN0cnVjdGlvbgogICovCiBzdHJ1Y3Qgcmhhc2h0YWJsZSB7CiAJc3RydWN0IGJ1Y2tldF90YWJsZSBfX3JjdQkqdGJsOwotCXNpemVfdAkJCQluZWxlbXM7Ci0Jc2l6ZV90CQkJCXNoaWZ0OworCXN0cnVjdCBidWNrZXRfdGFibGUgX19yY3UgICAgICAgKmZ1dHVyZV90Ymw7CisJYXRvbWljX3QJCQluZWxlbXM7CisJYXRvbWljX3QJCQlzaGlmdDsKIAlzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMJcDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXJ1bl93b3JrOworCXN0cnVjdCBtdXRleCAgICAgICAgICAgICAgICAgICAgbXV0ZXg7CisJc3RydWN0IGxpc3RfaGVhZAkJd2Fsa2VyczsKKwlib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlaW5nX2Rlc3Ryb3llZDsKIH07CiAKKy8qKgorICogc3RydWN0IHJoYXNodGFibGVfd2Fsa2VyIC0gSGFzaCB0YWJsZSB3YWxrZXIKKyAqIEBsaXN0OiBMaXN0IGVudHJ5IG9uIGxpc3Qgb2Ygd2Fsa2VycworICogQHJlc2l6ZTogUmVzaXplIGV2ZW50IG9jY3VyZWQKKyAqLworc3RydWN0IHJoYXNodGFibGVfd2Fsa2VyIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJYm9vbCByZXNpemU7Cit9OworCisvKioKKyAqIHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgLSBIYXNoIHRhYmxlIGl0ZXJhdG9yLCBmaXRzIGludG8gbmV0bGluayBjYgorICogQGh0OiBUYWJsZSB0byBpdGVyYXRlIHRocm91Z2gKKyAqIEBwOiBDdXJyZW50IHBvaW50ZXIKKyAqIEB3YWxrZXI6IEFzc29jaWF0ZWQgcmhhc2h0YWJsZSB3YWxrZXIKKyAqIEBzbG90OiBDdXJyZW50IHNsb3QKKyAqIEBza2lwOiBOdW1iZXIgb2YgZW50cmllcyB0byBza2lwIGluIHNsb3QKKyAqLworc3RydWN0IHJoYXNodGFibGVfaXRlciB7CisJc3RydWN0IHJoYXNodGFibGUgKmh0OworCXN0cnVjdCByaGFzaF9oZWFkICpwOworCXN0cnVjdCByaGFzaHRhYmxlX3dhbGtlciAqd2Fsa2VyOworCXVuc2lnbmVkIGludCBzbG90OworCXVuc2lnbmVkIGludCBza2lwOworfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJodF9tYXJrZXIoY29uc3Qgc3RydWN0IHJoYXNodGFibGUgKmh0LCB1MzIgaGFzaCkKK3sKKwlyZXR1cm4gTlVMTFNfTUFSS0VSKGh0LT5wLm51bGxzX2Jhc2UgKyBoYXNoKTsKK30KKworI2RlZmluZSBJTklUX1JIVF9OVUxMU19IRUFEKHB0ciwgaHQsIGhhc2gpIFwKKwkoKHB0cikgPSAodHlwZW9mKHB0cikpIHJodF9tYXJrZXIoaHQsIGhhc2gpKQorCitzdGF0aWMgaW5saW5lIGJvb2wgcmh0X2lzX2FfbnVsbHMoY29uc3Qgc3RydWN0IHJoYXNoX2hlYWQgKnB0cikKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKSBwdHIgJiAxKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJodF9nZXRfbnVsbHNfdmFsdWUoY29uc3Qgc3RydWN0IHJoYXNoX2hlYWQgKnB0cikKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKSBwdHIpID4+IDE7Cit9CisKICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORwotaW50IGxvY2tkZXBfcmh0X211dGV4X2lzX2hlbGQoY29uc3Qgc3RydWN0IHJoYXNodGFibGUgKmh0KTsKK2ludCBsb2NrZGVwX3JodF9tdXRleF9pc19oZWxkKHN0cnVjdCByaGFzaHRhYmxlICpodCk7CitpbnQgbG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQoY29uc3Qgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLCB1MzIgaGFzaCk7CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgbG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZChjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQpCitzdGF0aWMgaW5saW5lIGludCBsb2NrZGVwX3JodF9tdXRleF9pc19oZWxkKHN0cnVjdCByaGFzaHRhYmxlICpodCkKK3sKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQoY29uc3Qgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLAorCQkJCQkgICAgIHUzMiBoYXNoKQogewogCXJldHVybiAxOwogfQpAQCAtOTYsMTMgKzE4OSw4IEBACiAKIGludCByaGFzaHRhYmxlX2luaXQoc3RydWN0IHJoYXNodGFibGUgKmh0LCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgKnBhcmFtcyk7CiAKLXUzMiByaGFzaHRhYmxlX2hhc2hmbihjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSwgdTMyIGxlbik7Ci11MzIgcmhhc2h0YWJsZV9vYmpfaGFzaGZuKGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlICpodCwgdm9pZCAqcHRyKTsKLQogdm9pZCByaGFzaHRhYmxlX2luc2VydChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIHN0cnVjdCByaGFzaF9oZWFkICpub2RlKTsKIGJvb2wgcmhhc2h0YWJsZV9yZW1vdmUoc3RydWN0IHJoYXNodGFibGUgKmh0LCBzdHJ1Y3Qgcmhhc2hfaGVhZCAqbm9kZSk7Ci12b2lkIHJoYXNodGFibGVfcmVtb3ZlX3BwcmV2KHN0cnVjdCByaGFzaHRhYmxlICpodCwgc3RydWN0IHJoYXNoX2hlYWQgKm9iaiwKLQkJCSAgICAgc3RydWN0IHJoYXNoX2hlYWQgX19yY3UgKipwcHJldik7CiAKIGJvb2wgcmh0X2dyb3dfYWJvdmVfNzUoY29uc3Qgc3RydWN0IHJoYXNodGFibGUgKmh0LCBzaXplX3QgbmV3X3NpemUpOwogYm9vbCByaHRfc2hyaW5rX2JlbG93XzMwKGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlICpodCwgc2l6ZV90IG5ld19zaXplKTsKQEAgLTExMCwxMSArMTk4LDIzIEBACiBpbnQgcmhhc2h0YWJsZV9leHBhbmQoc3RydWN0IHJoYXNodGFibGUgKmh0KTsKIGludCByaGFzaHRhYmxlX3NocmluayhzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQpOwogCi12b2lkICpyaGFzaHRhYmxlX2xvb2t1cChjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSk7Ci12b2lkICpyaGFzaHRhYmxlX2xvb2t1cF9jb21wYXJlKGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlICpodCwgdTMyIGhhc2gsCit2b2lkICpyaGFzaHRhYmxlX2xvb2t1cChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSk7Cit2b2lkICpyaGFzaHRhYmxlX2xvb2t1cF9jb21wYXJlKHN0cnVjdCByaGFzaHRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5LAogCQkJCWJvb2wgKCpjb21wYXJlKSh2b2lkICosIHZvaWQgKiksIHZvaWQgKmFyZyk7CiAKLXZvaWQgcmhhc2h0YWJsZV9kZXN0cm95KGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlICpodCk7Citib29sIHJoYXNodGFibGVfbG9va3VwX2luc2VydChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIHN0cnVjdCByaGFzaF9oZWFkICpvYmopOworYm9vbCByaGFzaHRhYmxlX2xvb2t1cF9jb21wYXJlX2luc2VydChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsCisJCQkJICAgICAgc3RydWN0IHJoYXNoX2hlYWQgKm9iaiwKKwkJCQkgICAgICBib29sICgqY29tcGFyZSkodm9pZCAqLCB2b2lkICopLAorCQkJCSAgICAgIHZvaWQgKmFyZyk7CisKK2ludCByaGFzaHRhYmxlX3dhbGtfaW5pdChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpOwordm9pZCByaGFzaHRhYmxlX3dhbGtfZXhpdChzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyICppdGVyKTsKK2ludCByaGFzaHRhYmxlX3dhbGtfc3RhcnQoc3RydWN0IHJoYXNodGFibGVfaXRlciAqaXRlcikgX19hY3F1aXJlcyhSQ1UpOwordm9pZCAqcmhhc2h0YWJsZV93YWxrX25leHQoc3RydWN0IHJoYXNodGFibGVfaXRlciAqaXRlcik7Cit2b2lkIHJoYXNodGFibGVfd2Fsa19zdG9wKHN0cnVjdCByaGFzaHRhYmxlX2l0ZXIgKml0ZXIpIF9fcmVsZWFzZXMoUkNVKTsKKwordm9pZCByaGFzaHRhYmxlX2Rlc3Ryb3koc3RydWN0IHJoYXNodGFibGUgKmh0KTsKIAogI2RlZmluZSByaHRfZGVyZWZlcmVuY2UocCwgaHQpIFwKIAlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHAsIGxvY2tkZXBfcmh0X211dGV4X2lzX2hlbGQoaHQpKQpAQCAtMTIyLDkyICsyMjIsMTQ2IEBACiAjZGVmaW5lIHJodF9kZXJlZmVyZW5jZV9yY3UocCwgaHQpIFwKIAlyY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgbG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZChodCkpCiAKLSNkZWZpbmUgcmh0X2VudHJ5KHB0ciwgdHlwZSwgbWVtYmVyKSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpCi0jZGVmaW5lIHJodF9lbnRyeV9zYWZlKHB0ciwgdHlwZSwgbWVtYmVyKSBcCi0oeyBcCi0JdHlwZW9mKHB0cikgX19wdHIgPSAocHRyKTsgXAotCSAgIF9fcHRyID8gcmh0X2VudHJ5KF9fcHRyLCB0eXBlLCBtZW1iZXIpIDogTlVMTDsgXAotfSkKKyNkZWZpbmUgcmh0X2RlcmVmZXJlbmNlX2J1Y2tldChwLCB0YmwsIGhhc2gpIFwKKwlyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHAsIGxvY2tkZXBfcmh0X2J1Y2tldF9pc19oZWxkKHRibCwgaGFzaCkpCiAKLSNkZWZpbmUgcmh0X25leHRfZW50cnlfc2FmZShwb3MsIGh0LCBtZW1iZXIpIFwKLSh7IFwKLQlwb3MgPyByaHRfZW50cnlfc2FmZShyaHRfZGVyZWZlcmVuY2UoKHBvcyktPm1lbWJlci5uZXh0LCBodCksIFwKLQkJCSAgICAgdHlwZW9mKCoocG9zKSksIG1lbWJlcikgOiBOVUxMOyBcCi19KQorI2RlZmluZSByaHRfZGVyZWZlcmVuY2VfYnVja2V0X3JjdShwLCB0YmwsIGhhc2gpIFwKKwlyY3VfZGVyZWZlcmVuY2VfY2hlY2socCwgbG9ja2RlcF9yaHRfYnVja2V0X2lzX2hlbGQodGJsLCBoYXNoKSkKKworI2RlZmluZSByaHRfZW50cnkodHBvcywgcG9zLCBtZW1iZXIpIFwKKwkoeyB0cG9zID0gY29udGFpbmVyX29mKHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTsgfSkKKworLyoqCisgKiByaHRfZm9yX2VhY2hfY29udGludWUgLSBjb250aW51ZSBpdGVyYXRpbmcgb3ZlciBoYXNoIGNoYWluCisgKiBAcG9zOgl0aGUgJnN0cnVjdCByaGFzaF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQGhlYWQ6CXRoZSBwcmV2aW91cyAmc3RydWN0IHJoYXNoX2hlYWQgdG8gY29udGludWUgZnJvbQorICogQHRibDoJdGhlICZzdHJ1Y3QgYnVja2V0X3RhYmxlCisgKiBAaGFzaDoJdGhlIGhhc2ggdmFsdWUgLyBidWNrZXQgaW5kZXgKKyAqLworI2RlZmluZSByaHRfZm9yX2VhY2hfY29udGludWUocG9zLCBoZWFkLCB0YmwsIGhhc2gpIFwKKwlmb3IgKHBvcyA9IHJodF9kZXJlZmVyZW5jZV9idWNrZXQoaGVhZCwgdGJsLCBoYXNoKTsgXAorCSAgICAgIXJodF9pc19hX251bGxzKHBvcyk7IFwKKwkgICAgIHBvcyA9IHJodF9kZXJlZmVyZW5jZV9idWNrZXQoKHBvcyktPm5leHQsIHRibCwgaGFzaCkpCiAKIC8qKgogICogcmh0X2Zvcl9lYWNoIC0gaXRlcmF0ZSBvdmVyIGhhc2ggY2hhaW4KLSAqIEBwb3M6CSZzdHJ1Y3Qgcmhhc2hfaGVhZCB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KLSAqIEBoZWFkOgloZWFkIG9mIHRoZSBoYXNoIGNoYWluIChzdHJ1Y3Qgcmhhc2hfaGVhZCAqKQotICogQGh0OgkJcG9pbnRlciB0byB5b3VyIHN0cnVjdCByaGFzaHRhYmxlCisgKiBAcG9zOgl0aGUgJnN0cnVjdCByaGFzaF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQHRibDoJdGhlICZzdHJ1Y3QgYnVja2V0X3RhYmxlCisgKiBAaGFzaDoJdGhlIGhhc2ggdmFsdWUgLyBidWNrZXQgaW5kZXgKICAqLwotI2RlZmluZSByaHRfZm9yX2VhY2gocG9zLCBoZWFkLCBodCkgXAotCWZvciAocG9zID0gcmh0X2RlcmVmZXJlbmNlKGhlYWQsIGh0KTsgXAotCSAgICAgcG9zOyBcCi0JICAgICBwb3MgPSByaHRfZGVyZWZlcmVuY2UoKHBvcyktPm5leHQsIGh0KSkKKyNkZWZpbmUgcmh0X2Zvcl9lYWNoKHBvcywgdGJsLCBoYXNoKSBcCisJcmh0X2Zvcl9lYWNoX2NvbnRpbnVlKHBvcywgKHRibCktPmJ1Y2tldHNbaGFzaF0sIHRibCwgaGFzaCkKKworLyoqCisgKiByaHRfZm9yX2VhY2hfZW50cnlfY29udGludWUgLSBjb250aW51ZSBpdGVyYXRpbmcgb3ZlciBoYXNoIGNoYWluCisgKiBAdHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBwb3M6CXRoZSAmc3RydWN0IHJoYXNoX2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAaGVhZDoJdGhlIHByZXZpb3VzICZzdHJ1Y3Qgcmhhc2hfaGVhZCB0byBjb250aW51ZSBmcm9tCisgKiBAdGJsOgl0aGUgJnN0cnVjdCBidWNrZXRfdGFibGUKKyAqIEBoYXNoOgl0aGUgaGFzaCB2YWx1ZSAvIGJ1Y2tldCBpbmRleAorICogQG1lbWJlcjoJbmFtZSBvZiB0aGUgJnN0cnVjdCByaGFzaF9oZWFkIHdpdGhpbiB0aGUgaGFzaGFibGUgc3RydWN0LgorICovCisjZGVmaW5lIHJodF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZSh0cG9zLCBwb3MsIGhlYWQsIHRibCwgaGFzaCwgbWVtYmVyKQlcCisJZm9yIChwb3MgPSByaHRfZGVyZWZlcmVuY2VfYnVja2V0KGhlYWQsIHRibCwgaGFzaCk7CQlcCisJICAgICAoIXJodF9pc19hX251bGxzKHBvcykpICYmIHJodF9lbnRyeSh0cG9zLCBwb3MsIG1lbWJlcik7CVwKKwkgICAgIHBvcyA9IHJodF9kZXJlZmVyZW5jZV9idWNrZXQoKHBvcyktPm5leHQsIHRibCwgaGFzaCkpCiAKIC8qKgogICogcmh0X2Zvcl9lYWNoX2VudHJ5IC0gaXRlcmF0ZSBvdmVyIGhhc2ggY2hhaW4gb2YgZ2l2ZW4gdHlwZQotICogQHBvczoJdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgotICogQGhlYWQ6CWhlYWQgb2YgdGhlIGhhc2ggY2hhaW4gKHN0cnVjdCByaGFzaF9oZWFkICopCi0gKiBAaHQ6CQlwb2ludGVyIHRvIHlvdXIgc3RydWN0IHJoYXNodGFibGUKLSAqIEBtZW1iZXI6CW5hbWUgb2YgdGhlIHJoYXNoX2hlYWQgd2l0aGluIHRoZSBoYXNoYWJsZSBzdHJ1Y3QuCisgKiBAdHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBwb3M6CXRoZSAmc3RydWN0IHJoYXNoX2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAdGJsOgl0aGUgJnN0cnVjdCBidWNrZXRfdGFibGUKKyAqIEBoYXNoOgl0aGUgaGFzaCB2YWx1ZSAvIGJ1Y2tldCBpbmRleAorICogQG1lbWJlcjoJbmFtZSBvZiB0aGUgJnN0cnVjdCByaGFzaF9oZWFkIHdpdGhpbiB0aGUgaGFzaGFibGUgc3RydWN0LgogICovCi0jZGVmaW5lIHJodF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIGh0LCBtZW1iZXIpIFwKLQlmb3IgKHBvcyA9IHJodF9lbnRyeV9zYWZlKHJodF9kZXJlZmVyZW5jZShoZWFkLCBodCksIFwKLQkJCQkgICB0eXBlb2YoKihwb3MpKSwgbWVtYmVyKTsgXAotCSAgICAgcG9zOyBcCi0JICAgICBwb3MgPSByaHRfbmV4dF9lbnRyeV9zYWZlKHBvcywgaHQsIG1lbWJlcikpCisjZGVmaW5lIHJodF9mb3JfZWFjaF9lbnRyeSh0cG9zLCBwb3MsIHRibCwgaGFzaCwgbWVtYmVyKQkJXAorCXJodF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZSh0cG9zLCBwb3MsICh0YmwpLT5idWNrZXRzW2hhc2hdLAlcCisJCQkJICAgIHRibCwgaGFzaCwgbWVtYmVyKQogCiAvKioKICAqIHJodF9mb3JfZWFjaF9lbnRyeV9zYWZlIC0gc2FmZWx5IGl0ZXJhdGUgb3ZlciBoYXNoIGNoYWluIG9mIGdpdmVuIHR5cGUKLSAqIEBwb3M6CXR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KLSAqIEBuOgkJdHlwZSAqIHRvIHVzZSBmb3IgdGVtcG9yYXJ5IG5leHQgb2JqZWN0IHN0b3JhZ2UKLSAqIEBoZWFkOgloZWFkIG9mIHRoZSBoYXNoIGNoYWluIChzdHJ1Y3Qgcmhhc2hfaGVhZCAqKQotICogQGh0OgkJcG9pbnRlciB0byB5b3VyIHN0cnVjdCByaGFzaHRhYmxlCi0gKiBAbWVtYmVyOgluYW1lIG9mIHRoZSByaGFzaF9oZWFkIHdpdGhpbiB0aGUgaGFzaGFibGUgc3RydWN0LgorICogQHRwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAcG9zOgl0aGUgJnN0cnVjdCByaGFzaF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQG5leHQ6CXRoZSAmc3RydWN0IHJoYXNoX2hlYWQgdG8gdXNlIGFzIG5leHQgaW4gbG9vcCBjdXJzb3IuCisgKiBAdGJsOgl0aGUgJnN0cnVjdCBidWNrZXRfdGFibGUKKyAqIEBoYXNoOgl0aGUgaGFzaCB2YWx1ZSAvIGJ1Y2tldCBpbmRleAorICogQG1lbWJlcjoJbmFtZSBvZiB0aGUgJnN0cnVjdCByaGFzaF9oZWFkIHdpdGhpbiB0aGUgaGFzaGFibGUgc3RydWN0LgogICoKICAqIFRoaXMgaGFzaCBjaGFpbiBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmUgYWxsb3dzIGZvciB0aGUgbG9vcGVkIGNvZGUgdG8KICAqIHJlbW92ZSB0aGUgbG9vcCBjdXJzb3IgZnJvbSB0aGUgbGlzdC4KICAqLwotI2RlZmluZSByaHRfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sIGhlYWQsIGh0LCBtZW1iZXIpCQlcCi0JZm9yIChwb3MgPSByaHRfZW50cnlfc2FmZShyaHRfZGVyZWZlcmVuY2UoaGVhZCwgaHQpLCBcCi0JCQkJICB0eXBlb2YoKihwb3MpKSwgbWVtYmVyKSwgXAotCSAgICAgbiA9IHJodF9uZXh0X2VudHJ5X3NhZmUocG9zLCBodCwgbWVtYmVyKTsgXAotCSAgICAgcG9zOyBcCi0JICAgICBwb3MgPSBuLCBcCi0JICAgICBuID0gcmh0X25leHRfZW50cnlfc2FmZShwb3MsIGh0LCBtZW1iZXIpKQorI2RlZmluZSByaHRfZm9yX2VhY2hfZW50cnlfc2FmZSh0cG9zLCBwb3MsIG5leHQsIHRibCwgaGFzaCwgbWVtYmVyKQkgICAgXAorCWZvciAocG9zID0gcmh0X2RlcmVmZXJlbmNlX2J1Y2tldCgodGJsKS0+YnVja2V0c1toYXNoXSwgdGJsLCBoYXNoKSwgXAorCSAgICAgbmV4dCA9ICFyaHRfaXNfYV9udWxscyhwb3MpID8JCQkJICAgIFwKKwkJICAgICAgIHJodF9kZXJlZmVyZW5jZV9idWNrZXQocG9zLT5uZXh0LCB0YmwsIGhhc2gpIDogTlVMTDsgXAorCSAgICAgKCFyaHRfaXNfYV9udWxscyhwb3MpKSAmJiByaHRfZW50cnkodHBvcywgcG9zLCBtZW1iZXIpOwkgICAgXAorCSAgICAgcG9zID0gbmV4dCwJCQkJCQkgICAgXAorCSAgICAgbmV4dCA9ICFyaHRfaXNfYV9udWxscyhwb3MpID8JCQkJICAgIFwKKwkJICAgICAgIHJodF9kZXJlZmVyZW5jZV9idWNrZXQocG9zLT5uZXh0LCB0YmwsIGhhc2gpIDogTlVMTCkKKworLyoqCisgKiByaHRfZm9yX2VhY2hfcmN1X2NvbnRpbnVlIC0gY29udGludWUgaXRlcmF0aW5nIG92ZXIgcmN1IGhhc2ggY2hhaW4KKyAqIEBwb3M6CXRoZSAmc3RydWN0IHJoYXNoX2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAaGVhZDoJdGhlIHByZXZpb3VzICZzdHJ1Y3Qgcmhhc2hfaGVhZCB0byBjb250aW51ZSBmcm9tCisgKiBAdGJsOgl0aGUgJnN0cnVjdCBidWNrZXRfdGFibGUKKyAqIEBoYXNoOgl0aGUgaGFzaCB2YWx1ZSAvIGJ1Y2tldCBpbmRleAorICoKKyAqIFRoaXMgaGFzaCBjaGFpbiBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmUgbWF5IHNhZmVseSBydW4gY29uY3VycmVudGx5IHdpdGgKKyAqIHRoZSBfcmN1IG11dGF0aW9uIHByaW1pdGl2ZXMgc3VjaCBhcyByaGFzaHRhYmxlX2luc2VydCgpIGFzIGxvbmcgYXMgdGhlCisgKiB0cmF2ZXJzYWwgaXMgZ3VhcmRlZCBieSByY3VfcmVhZF9sb2NrKCkuCisgKi8KKyNkZWZpbmUgcmh0X2Zvcl9lYWNoX3JjdV9jb250aW51ZShwb3MsIGhlYWQsIHRibCwgaGFzaCkJCQlcCisJZm9yICgoe2JhcnJpZXIoKTsgfSksCQkJCQkJXAorCSAgICAgcG9zID0gcmh0X2RlcmVmZXJlbmNlX2J1Y2tldF9yY3UoaGVhZCwgdGJsLCBoYXNoKTsJCVwKKwkgICAgICFyaHRfaXNfYV9udWxscyhwb3MpOwkJCQkJXAorCSAgICAgcG9zID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyhwb3MtPm5leHQpKQogCiAvKioKICAqIHJodF9mb3JfZWFjaF9yY3UgLSBpdGVyYXRlIG92ZXIgcmN1IGhhc2ggY2hhaW4KLSAqIEBwb3M6CSZzdHJ1Y3Qgcmhhc2hfaGVhZCB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KLSAqIEBoZWFkOgloZWFkIG9mIHRoZSBoYXNoIGNoYWluIChzdHJ1Y3Qgcmhhc2hfaGVhZCAqKQotICogQGh0OgkJcG9pbnRlciB0byB5b3VyIHN0cnVjdCByaGFzaHRhYmxlCisgKiBAcG9zOgl0aGUgJnN0cnVjdCByaGFzaF9oZWFkIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQHRibDoJdGhlICZzdHJ1Y3QgYnVja2V0X3RhYmxlCisgKiBAaGFzaDoJdGhlIGhhc2ggdmFsdWUgLyBidWNrZXQgaW5kZXgKICAqCiAgKiBUaGlzIGhhc2ggY2hhaW4gbGlzdC10cmF2ZXJzYWwgcHJpbWl0aXZlIG1heSBzYWZlbHkgcnVuIGNvbmN1cnJlbnRseSB3aXRoCi0gKiB0aGUgX3JjdSBma2h0IG11dGF0aW9uIHByaW1pdGl2ZXMgc3VjaCBhcyByaHRfaW5zZXJ0KCkgYXMgbG9uZyBhcyB0aGUKKyAqIHRoZSBfcmN1IG11dGF0aW9uIHByaW1pdGl2ZXMgc3VjaCBhcyByaGFzaHRhYmxlX2luc2VydCgpIGFzIGxvbmcgYXMgdGhlCiAgKiB0cmF2ZXJzYWwgaXMgZ3VhcmRlZCBieSByY3VfcmVhZF9sb2NrKCkuCiAgKi8KLSNkZWZpbmUgcmh0X2Zvcl9lYWNoX3JjdShwb3MsIGhlYWQsIGh0KSBcCi0JZm9yIChwb3MgPSByaHRfZGVyZWZlcmVuY2VfcmN1KGhlYWQsIGh0KTsgXAotCSAgICAgcG9zOyBcCi0JICAgICBwb3MgPSByaHRfZGVyZWZlcmVuY2VfcmN1KChwb3MpLT5uZXh0LCBodCkpCisjZGVmaW5lIHJodF9mb3JfZWFjaF9yY3UocG9zLCB0YmwsIGhhc2gpCQkJCVwKKwlyaHRfZm9yX2VhY2hfcmN1X2NvbnRpbnVlKHBvcywgKHRibCktPmJ1Y2tldHNbaGFzaF0sIHRibCwgaGFzaCkKKworLyoqCisgKiByaHRfZm9yX2VhY2hfZW50cnlfcmN1X2NvbnRpbnVlIC0gY29udGludWUgaXRlcmF0aW5nIG92ZXIgcmN1IGhhc2ggY2hhaW4KKyAqIEB0cG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQHBvczoJdGhlICZzdHJ1Y3Qgcmhhc2hfaGVhZCB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBoZWFkOgl0aGUgcHJldmlvdXMgJnN0cnVjdCByaGFzaF9oZWFkIHRvIGNvbnRpbnVlIGZyb20KKyAqIEB0Ymw6CXRoZSAmc3RydWN0IGJ1Y2tldF90YWJsZQorICogQGhhc2g6CXRoZSBoYXNoIHZhbHVlIC8gYnVja2V0IGluZGV4CisgKiBAbWVtYmVyOgluYW1lIG9mIHRoZSAmc3RydWN0IHJoYXNoX2hlYWQgd2l0aGluIHRoZSBoYXNoYWJsZSBzdHJ1Y3QuCisgKgorICogVGhpcyBoYXNoIGNoYWluIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZSBtYXkgc2FmZWx5IHJ1biBjb25jdXJyZW50bHkgd2l0aAorICogdGhlIF9yY3UgbXV0YXRpb24gcHJpbWl0aXZlcyBzdWNoIGFzIHJoYXNodGFibGVfaW5zZXJ0KCkgYXMgbG9uZyBhcyB0aGUKKyAqIHRyYXZlcnNhbCBpcyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KKyAqLworI2RlZmluZSByaHRfZm9yX2VhY2hfZW50cnlfcmN1X2NvbnRpbnVlKHRwb3MsIHBvcywgaGVhZCwgdGJsLCBoYXNoLCBtZW1iZXIpIFwKKwlmb3IgKCh7YmFycmllcigpOyB9KSwJCQkJCQkgICAgXAorCSAgICAgcG9zID0gcmh0X2RlcmVmZXJlbmNlX2J1Y2tldF9yY3UoaGVhZCwgdGJsLCBoYXNoKTsJCSAgICBcCisJICAgICAoIXJodF9pc19hX251bGxzKHBvcykpICYmIHJodF9lbnRyeSh0cG9zLCBwb3MsIG1lbWJlcik7CSAgICBcCisJICAgICBwb3MgPSByaHRfZGVyZWZlcmVuY2VfYnVja2V0X3JjdShwb3MtPm5leHQsIHRibCwgaGFzaCkpCiAKIC8qKgogICogcmh0X2Zvcl9lYWNoX2VudHJ5X3JjdSAtIGl0ZXJhdGUgb3ZlciByY3UgaGFzaCBjaGFpbiBvZiBnaXZlbiB0eXBlCi0gKiBAcG9zOgl0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCi0gKiBAaGVhZDoJaGVhZCBvZiB0aGUgaGFzaCBjaGFpbiAoc3RydWN0IHJoYXNoX2hlYWQgKikKLSAqIEBtZW1iZXI6CW5hbWUgb2YgdGhlIHJoYXNoX2hlYWQgd2l0aGluIHRoZSBoYXNoYWJsZSBzdHJ1Y3QuCisgKiBAdHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBwb3M6CXRoZSAmc3RydWN0IHJoYXNoX2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAdGJsOgl0aGUgJnN0cnVjdCBidWNrZXRfdGFibGUKKyAqIEBoYXNoOgl0aGUgaGFzaCB2YWx1ZSAvIGJ1Y2tldCBpbmRleAorICogQG1lbWJlcjoJbmFtZSBvZiB0aGUgJnN0cnVjdCByaGFzaF9oZWFkIHdpdGhpbiB0aGUgaGFzaGFibGUgc3RydWN0LgogICoKICAqIFRoaXMgaGFzaCBjaGFpbiBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmUgbWF5IHNhZmVseSBydW4gY29uY3VycmVudGx5IHdpdGgKLSAqIHRoZSBfcmN1IGZraHQgbXV0YXRpb24gcHJpbWl0aXZlcyBzdWNoIGFzIHJodF9pbnNlcnQoKSBhcyBsb25nIGFzIHRoZQorICogdGhlIF9yY3UgbXV0YXRpb24gcHJpbWl0aXZlcyBzdWNoIGFzIHJoYXNodGFibGVfaW5zZXJ0KCkgYXMgbG9uZyBhcyB0aGUKICAqIHRyYXZlcnNhbCBpcyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KICAqLwotI2RlZmluZSByaHRfZm9yX2VhY2hfZW50cnlfcmN1KHBvcywgaGVhZCwgbWVtYmVyKSBcCi0JZm9yIChwb3MgPSByaHRfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfcmF3KGhlYWQpLCBcCi0JCQkJICB0eXBlb2YoKihwb3MpKSwgbWVtYmVyKTsgXAotCSAgICAgcG9zOyBcCi0JICAgICBwb3MgPSByaHRfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfcmF3KChwb3MpLT5tZW1iZXIubmV4dCksIFwKLQkJCQkgIHR5cGVvZigqKHBvcykpLCBtZW1iZXIpKQorI2RlZmluZSByaHRfZm9yX2VhY2hfZW50cnlfcmN1KHRwb3MsIHBvcywgdGJsLCBoYXNoLCBtZW1iZXIpCQlcCisJcmh0X2Zvcl9lYWNoX2VudHJ5X3JjdV9jb250aW51ZSh0cG9zLCBwb3MsICh0YmwpLT5idWNrZXRzW2hhc2hdLFwKKwkJCQkJdGJsLCBoYXNoLCBtZW1iZXIpCiAKICNlbmRpZiAvKiBfTElOVVhfUkhBU0hUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JtYXAuaCBiL2luY2x1ZGUvbGludXgvcm1hcC5oCmluZGV4IGQ5ZDdlN2UuLmIzOGY1NTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcm1hcC5oCkBAIC0yNDYsNyArMjQ2LDYgQEAKICAqIGFyZzogcGFzc2VkIHRvIHJtYXBfb25lKCkgYW5kIGludmFsaWRfdm1hKCkKICAqIHJtYXBfb25lOiBleGVjdXRlZCBvbiBlYWNoIHZtYSB3aGVyZSBwYWdlIGlzIG1hcHBlZAogICogZG9uZTogZm9yIGNoZWNraW5nIHRyYXZlcnNpbmcgdGVybWluYXRpb24gY29uZGl0aW9uCi0gKiBmaWxlX25vbmxpbmVhcjogZm9yIGhhbmRsaW5nIGZpbGUgbm9ubGluZWFyIG1hcHBpbmcKICAqIGFub25fbG9jazogZm9yIGdldHRpbmcgYW5vbl9sb2NrIGJ5IG9wdGltaXplZCB3YXkgcmF0aGVyIHRoYW4gZGVmYXVsdAogICogaW52YWxpZF92bWE6IGZvciBza2lwcGluZyB1bmludGVyZXN0ZWQgdm1hCiAgKi8KQEAgLTI1NSw3ICsyNTQsNiBAQAogCWludCAoKnJtYXBfb25lKShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYXJnKTsKIAlpbnQgKCpkb25lKShzdHJ1Y3QgcGFnZSAqcGFnZSk7Ci0JaW50ICgqZmlsZV9ub25saW5lYXIpKHN0cnVjdCBwYWdlICosIHN0cnVjdCBhZGRyZXNzX3NwYWNlICosIHZvaWQgKmFyZyk7CiAJc3RydWN0IGFub25fdm1hICooKmFub25fbG9jaykoc3RydWN0IHBhZ2UgKnBhZ2UpOwogCWJvb2wgKCppbnZhbGlkX3ZtYSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZyk7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydGMuaCBiL2luY2x1ZGUvbGludXgvcnRjLmgKaW5kZXggNmQ2YmUwOS4uZGNhZDdlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCkBAIC0xNjEsNyArMTYxLDcgQEAKIGV4dGVybiBpbnQgcnRjX3JlYWRfdGltZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKTsKIGV4dGVybiBpbnQgcnRjX3NldF90aW1lKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZSAqdG0pOwogZXh0ZXJuIGludCBydGNfc2V0X21tc3Moc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywgdW5zaWduZWQgbG9uZyBzZWNzKTsKLWV4dGVybiBpbnQgcnRjX3NldF9udHBfdGltZShzdHJ1Y3QgdGltZXNwZWMgbm93KTsKK2V4dGVybiBpbnQgcnRjX3NldF9udHBfdGltZShzdHJ1Y3QgdGltZXNwZWM2NCBub3cpOwogaW50IF9fcnRjX3JlYWRfYWxhcm0oc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y193a2Fscm0gKmFsYXJtKTsKIGV4dGVybiBpbnQgcnRjX3JlYWRfYWxhcm0oc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywKIAkJCXN0cnVjdCBydGNfd2thbHJtICphbHJtKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IDg1YWI3ZDcuLjFiYjM2ZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtNjI2LDggKzYyNiwxMSBAQAogCV9fdTMyCQkJaGFzaDsKIAlfX2JlMTYJCQl2bGFuX3Byb3RvOwogCV9fdTE2CQkJdmxhbl90Y2k7Ci0jaWZkZWYgQ09ORklHX05FVF9SWF9CVVNZX1BPTEwKLQl1bnNpZ25lZCBpbnQJbmFwaV9pZDsKKyNpZiBkZWZpbmVkKENPTkZJR19ORVRfUlhfQlVTWV9QT0xMKSB8fCBkZWZpbmVkKENPTkZJR19YUFMpCisJdW5pb24geworCQl1bnNpZ25lZCBpbnQJbmFwaV9pZDsKKwkJdW5zaWduZWQgaW50CXNlbmRlcl9jcHU7CisJfTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRXT1JLX1NFQ01BUksKIAlfX3UzMgkJCXNlY21hcms7CkBAIC0yNDg0LDE5ICsyNDg3LDE4IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNrYl9hZGRfZGF0YShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJICAgICAgIGNoYXIgX191c2VyICpmcm9tLCBpbnQgY29weSkKKwkJCSAgICAgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGludCBjb3B5KQogewogCWNvbnN0IGludCBvZmYgPSBza2ItPmxlbjsKIAogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKSB7Ci0JCWludCBlcnIgPSAwOwotCQlfX3dzdW0gY3N1bSA9IGNzdW1fYW5kX2NvcHlfZnJvbV91c2VyKGZyb20sIHNrYl9wdXQoc2tiLCBjb3B5KSwKLQkJCQkJCQkgICAgY29weSwgMCwgJmVycik7Ci0JCWlmICghZXJyKSB7CisJCV9fd3N1bSBjc3VtID0gMDsKKwkJaWYgKGNzdW1fYW5kX2NvcHlfZnJvbV9pdGVyKHNrYl9wdXQoc2tiLCBjb3B5KSwgY29weSwKKwkJCQkJICAgICZjc3VtLCBmcm9tKSA9PSBjb3B5KSB7CiAJCQlza2ItPmNzdW0gPSBjc3VtX2Jsb2NrX2FkZChza2ItPmNzdW0sIGNzdW0sIG9mZik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCX0gZWxzZSBpZiAoIWNvcHlfZnJvbV91c2VyKHNrYl9wdXQoc2tiLCBjb3B5KSwgZnJvbSwgY29weSkpCisJfSBlbHNlIGlmIChjb3B5X2Zyb21faXRlcihza2JfcHV0KHNrYiwgY29weSksIGNvcHksIGZyb20pID09IGNvcHkpCiAJCXJldHVybiAwOwogCiAJX19za2JfdHJpbShza2IsIG9mZik7CkBAIC0yNjkzLDggKzI2OTUsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBtZW1jcHlfZnJvbV9tc2codm9pZCAqZGF0YSwgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuKQogewotCS8qIFhYWDogc3RyaXBwaW5nIGNvbnN0ICovCi0JcmV0dXJuIG1lbWNweV9mcm9taW92ZWMoZGF0YSwgKHN0cnVjdCBpb3ZlYyAqKW1zZy0+bXNnX2l0ZXIuaW92LCBsZW4pOworCXJldHVybiBjb3B5X2Zyb21faXRlcihkYXRhLCBsZW4sICZtc2ctPm1zZ19pdGVyKSA9PSBsZW4gPyAwIDogLUVGQVVMVDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbWVtY3B5X3RvX21zZyhzdHJ1Y3QgbXNnaGRyICptc2csIHZvaWQgKmRhdGEsIGludCBsZW4pCkBAIC0zMDcxLDcgKzMwNzIsNyBAQAogCiAjZGVmaW5lIHNrYl9jaGVja3N1bV92YWxpZGF0ZV96ZXJvX2NoZWNrKHNrYiwgcHJvdG8sIGNoZWNrLAkJXAogCQkJCQkgY29tcHV0ZV9wc2V1ZG8pCQlcCi0JX19za2JfY2hlY2tzdW1fdmFsaWRhdGVfKHNrYiwgcHJvdG8sIHRydWUsIHRydWUsIGNoZWNrLCBjb21wdXRlX3BzZXVkbykKKwlfX3NrYl9jaGVja3N1bV92YWxpZGF0ZShza2IsIHByb3RvLCB0cnVlLCB0cnVlLCBjaGVjaywgY29tcHV0ZV9wc2V1ZG8pCiAKICNkZWZpbmUgc2tiX2NoZWNrc3VtX3NpbXBsZV92YWxpZGF0ZShza2IpCQkJCVwKIAlfX3NrYl9jaGVja3N1bV92YWxpZGF0ZShza2IsIDAsIHRydWUsIGZhbHNlLCAwLCBudWxsX2NvbXB1dGVfcHNldWRvKQpAQCAtMzA5Niw2ICszMDk3LDI3IEBACiAJCQkJICAgICAgIGNvbXB1dGVfcHNldWRvKHNrYiwgcHJvdG8pKTsJXAogfSB3aGlsZSAoMCkKIAorLyogVXBkYXRlIHNrYnVmIGFuZCBwYWNrZXQgdG8gcmVmbGVjdCB0aGUgcmVtb3RlIGNoZWNrc3VtIG9mZmxvYWQgb3BlcmF0aW9uLgorICogV2hlbiBjYWxsZWQsIHB0ciBpbmRpY2F0ZXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBza2ItPmNzdW0gd2hlbgorICogaXBfc3VtbWVkIGlzIENIRUNLU1VNX0NPTVBMRVRFLiBJZiB3ZSBuZWVkIGNyZWF0ZSBjaGVja3N1bSBjb21wbGV0ZQorICogaGVyZSwgc2tiX3Bvc3RwdWxsX3Jjc3VtIGlzIGRvbmUgc28gc2tiLT5jc3VtIHN0YXJ0IGlzIHB0ci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHNrYl9yZW1jc3VtX3Byb2Nlc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdm9pZCAqcHRyLAorCQkJCSAgICAgICBpbnQgc3RhcnQsIGludCBvZmZzZXQpCit7CisJX193c3VtIGRlbHRhOworCisJIGlmICh1bmxpa2VseShza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9DT01QTEVURSkpIHsKKwkJX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKKwkJc2tiX3Bvc3RwdWxsX3Jjc3VtKHNrYiwgc2tiLT5kYXRhLCBwdHIgLSAodm9pZCAqKXNrYi0+ZGF0YSk7CisJfQorCisJZGVsdGEgPSByZW1jc3VtX2FkanVzdChwdHIsIHNrYi0+Y3N1bSwgc3RhcnQsIG9mZnNldCk7CisKKwkvKiBBZGp1c3Qgc2tiLT5jc3VtIHNpbmNlIHdlIGNoYW5nZWQgdGhlIHBhY2tldCAqLworCXNrYi0+Y3N1bSA9IGNzdW1fYWRkKHNrYi0+Y3N1bSwgZGVsdGEpOworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQogdm9pZCBuZl9jb25udHJhY2tfZGVzdHJveShzdHJ1Y3QgbmZfY29ubnRyYWNrICpuZmN0KTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBuZl9jb25udHJhY2tfcHV0KHN0cnVjdCBuZl9jb25udHJhY2sgKm5mY3QpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oCmluZGV4IDlhMTM5YjYuLjJlM2I0NDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oCkBAIC0xMTYsOSArMTE2LDggQEAKIAkJCXVuc2lnbmVkIGxvbmcsCiAJCQl2b2lkICgqKSh2b2lkICopKTsKICNpZmRlZiBDT05GSUdfTUVNQ0dfS01FTQotc3RydWN0IGttZW1fY2FjaGUgKm1lbWNnX2NyZWF0ZV9rbWVtX2NhY2hlKHN0cnVjdCBtZW1fY2dyb3VwICosCi0JCQkJCSAgIHN0cnVjdCBrbWVtX2NhY2hlICosCi0JCQkJCSAgIGNvbnN0IGNoYXIgKik7Cit2b2lkIG1lbWNnX2NyZWF0ZV9rbWVtX2NhY2hlKHN0cnVjdCBtZW1fY2dyb3VwICosIHN0cnVjdCBrbWVtX2NhY2hlICopOwordm9pZCBtZW1jZ19kZXN0cm95X2ttZW1fY2FjaGVzKHN0cnVjdCBtZW1fY2dyb3VwICopOwogI2VuZGlmCiB2b2lkIGttZW1fY2FjaGVfZGVzdHJveShzdHJ1Y3Qga21lbV9jYWNoZSAqKTsKIGludCBrbWVtX2NhY2hlX3NocmluayhzdHJ1Y3Qga21lbV9jYWNoZSAqKTsKQEAgLTQ5MSw3ICs0OTAsNiBAQAogICogQ2hpbGQgY2FjaGVzIHdpbGwgaG9sZCBleHRyYSBtZXRhZGF0YSBuZWVkZWQgZm9yIGl0cyBvcGVyYXRpb24uIEZpZWxkcyBhcmU6CiAgKgogICogQG1lbWNnOiBwb2ludGVyIHRvIHRoZSBtZW1jZyB0aGlzIGNhY2hlIGJlbG9uZ3MgdG8KLSAqIEBsaXN0OiBsaXN0X2hlYWQgZm9yIHRoZSBsaXN0IG9mIGFsbCBjYWNoZXMgaW4gdGhpcyBtZW1jZwogICogQHJvb3RfY2FjaGU6IHBvaW50ZXIgdG8gdGhlIGdsb2JhbCwgcm9vdCBjYWNoZSwgdGhpcyBjYWNoZSB3YXMgZGVyaXZlZCBmcm9tCiAgKi8KIHN0cnVjdCBtZW1jZ19jYWNoZV9wYXJhbXMgewpAQCAtNTAzLDcgKzUwMSw2IEBACiAJCX07CiAJCXN0cnVjdCB7CiAJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7Ci0JCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJCQlzdHJ1Y3Qga21lbV9jYWNoZSAqcm9vdF9jYWNoZTsKIAkJfTsKIAl9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXAuaCBiL2luY2x1ZGUvbGludXgvc21wLmgKaW5kZXggOTNkZmY1Zi4uYmU5MWRiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtcC5oCkBAIC0xNTEsNiArMTUxLDEzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQga2lja19hbGxfY3B1c19zeW5jKHZvaWQpIHsgIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB3YWtlX3VwX2FsbF9pZGxlX2NwdXModm9pZCkgeyAgfQogCisjaWZkZWYgQ09ORklHX1VQX0xBVEVfSU5JVAorZXh0ZXJuIHZvaWQgX19pbml0IHVwX2xhdGVfaW5pdCh2b2lkKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbXBfaW5pdCh2b2lkKSB7IHVwX2xhdGVfaW5pdCgpOyB9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNtcF9pbml0KHZvaWQpIHsgfQorI2VuZGlmCisKICNlbmRpZiAvKiAhU01QICovCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaAppbmRleCA2ZTQ5YTE0Li41YzE5Y2JhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCisrKyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKQEAgLTMxOCwxMyArMzE4LDYgQEAKIC8qIElQWCBvcHRpb25zICovCiAjZGVmaW5lIElQWF9UWVBFCTEKIAotZXh0ZXJuIGludCBjc3VtX3BhcnRpYWxfY29weV9mcm9taW92ZWNlbmQodW5zaWduZWQgY2hhciAqa2RhdGEsIAotCQkJCQkgIHN0cnVjdCBpb3ZlYyAqaW92LCAKLQkJCQkJICBpbnQgb2Zmc2V0LCAKLQkJCQkJICB1bnNpZ25lZCBpbnQgbGVuLCBfX3dzdW0gKmNzdW1wKTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGlvdl9wYWdlcyhjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IG9mZnNldCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MpOwotCiBleHRlcm4gaW50IG1vdmVfYWRkcl90b19rZXJuZWwodm9pZCBfX3VzZXIgKnVhZGRyLCBpbnQgdWxlbiwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmthZGRyKTsKIGV4dGVybiBpbnQgcHV0X2Ntc2coc3RydWN0IG1zZ2hkciosIGludCBsZXZlbCwgaW50IHR5cGUsIGludCBsZW4sIHZvaWQgKmRhdGEpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9hdDg2cmYyMzAuaCBiL2luY2x1ZGUvbGludXgvc3BpL2F0ODZyZjIzMC5oCmluZGV4IGIyYjFhZmIuLmNkNTE5YTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL2F0ODZyZjIzMC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL2F0ODZyZjIzMC5oCkBAIC0xMiwxMCArMTIsNiBAQAogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0gKgogICogV3JpdHRlbiBieToKICAqIERtaXRyeSBFcmVtaW4tU29sZW5pa292IDxkbWl0cnkuYmFyeXNoa292QHNpZW1lbnMuY29tPgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9sNGYwMDI0MnQwMy5oIGIvaW5jbHVkZS9saW51eC9zcGkvbDRmMDAyNDJ0MDMuaAppbmRleCBiYzg2NzdjLi5lNjllOWI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9sNGYwMDI0MnQwMy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL2w0ZjAwMjQydDAzLmgKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCiAKICNpZm5kZWYgX0lOQ0xVREVfTElOVVhfU1BJX0w0RjAwMjQyVDAzX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9sbXMyODNnZjA1LmggYi9pbmNsdWRlL2xpbnV4L3NwaS9sbXMyODNnZjA1LmgKaW5kZXggNTU1ZDI1NC4uZmRkMWQxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvbG1zMjgzZ2YwNS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL2xtczI4M2dmMDUuaApAQCAtMTEsMTAgKzExLDYgQEAKICAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogKi8KIAogI2lmbmRlZiBfSU5DTFVERV9MSU5VWF9TUElfTE1TMjgzR0YwNV9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvbXhzLXNwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkvbXhzLXNwaS5oCmluZGV4IDQ4MzU0ODYuLjM4MWQzNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL214cy1zcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9teHMtc3BpLmgKQEAgLTE1LDEwICsxNSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCiAgKi8KIAogI2lmbmRlZiBfX0xJTlVYX1NQSV9NWFNfU1BJX0hfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvcHhhMnh4X3NwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkvcHhhMnh4X3NwaS5oCmluZGV4IGQ1YTMxNjUuLjZkMzZkYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL3B4YTJ4eF9zcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9weGEyeHhfc3BpLmgKQEAgLTEwLDEwICsxMCw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAjaWZuZGVmIF9fbGludXhfcHhhMnh4X3NwaV9oCiAjZGVmaW5lIF9fbGludXhfcHhhMnh4X3NwaV9oCkBAIC01Nyw3ICs1Myw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9QWEEpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfTU1QKQogCiAjaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAogZXh0ZXJuIHZvaWQgcHhhMnh4X3NldF9zcGlfaW5mbyh1bnNpZ25lZCBpZCwgc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyICppbmZvKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvcnNwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkvcnNwaS5oCmluZGV4IGU1NDZiMmMuLmE2OTMxODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL3JzcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9yc3BpLmgKQEAgLTExLDExICsxMSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgogICovCiAKICNpZm5kZWYgX19MSU5VWF9TUElfUkVORVNBU19TUElfSF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaS9zaF9oc3BpLmggYi9pbmNsdWRlL2xpbnV4L3NwaS9zaF9oc3BpLmgKaW5kZXggYTExMjFmOC4uYWEwZDQ0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvc2hfaHNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpL3NoX2hzcGkuaApAQCAtOSwxMCArOSw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCiAgKi8KICNpZm5kZWYgU0hfSFNQSV9ICiAjZGVmaW5lIFNIX0hTUElfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvc2hfbXNpb2YuaCBiL2luY2x1ZGUvbGludXgvc3BpL3NoX21zaW9mLmgKaW5kZXggODhhMTRkOC4uYjA4N2E4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvc2hfbXNpb2YuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS9zaF9tc2lvZi5oCkBAIC03LDYgKzcsOCBAQAogCXUxNiBudW1fY2hpcHNlbGVjdDsKIAl1bnNpZ25lZCBpbnQgZG1hX3R4X2lkOwogCXVuc2lnbmVkIGludCBkbWFfcnhfaWQ7CisJdTMyIGR0ZGw7CisJdTMyIHN5bmNkbDsKIH07CiAKICNlbmRpZiAvKiBfX1NQSV9TSF9NU0lPRl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL3NwaS5oIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKaW5kZXggYTZlZjJhOC4uZWQ5NDg5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvc3BpLmgKQEAgLTEwLDEwICsxMCw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKICNpZm5kZWYgX19MSU5VWF9TUElfSApAQCAtMjYwLDYgKzI1Niw3IEBACiAgKiBAcHVtcF9tZXNzYWdlczogd29yayBzdHJ1Y3QgZm9yIHNjaGVkdWxpbmcgd29yayB0byB0aGUgbWVzc2FnZSBwdW1wCiAgKiBAcXVldWVfbG9jazogc3BpbmxvY2sgdG8gc3luY3JvbmlzZSBhY2Nlc3MgdG8gbWVzc2FnZSBxdWV1ZQogICogQHF1ZXVlOiBtZXNzYWdlIHF1ZXVlCisgKiBAaWRsaW5nOiB0aGUgZGV2aWNlIGlzIGVudGVyaW5nIGlkbGUgc3RhdGUKICAqIEBjdXJfbXNnOiB0aGUgY3VycmVudGx5IGluLWZsaWdodCBtZXNzYWdlCiAgKiBAY3VyX21zZ19wcmVwYXJlZDogc3BpX3ByZXBhcmVfbWVzc2FnZSB3YXMgY2FsbGVkIGZvciB0aGUgY3VycmVudGx5CiAgKiAgICAgICAgICAgICAgICAgICAgaW4tZmxpZ2h0IG1lc3NhZ2UKQEAgLTQyNSw2ICs0MjIsNyBAQAogCXNwaW5sb2NrX3QJCQlxdWV1ZV9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJCXF1ZXVlOwogCXN0cnVjdCBzcGlfbWVzc2FnZQkJKmN1cl9tc2c7CisJYm9vbAkJCQlpZGxpbmc7CiAJYm9vbAkJCQlidXN5OwogCWJvb2wJCQkJcnVubmluZzsKIAlib29sCQkJCXJ0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGkvdGxlNjJ4MC5oIGIvaW5jbHVkZS9saW51eC9zcGkvdGxlNjJ4MC5oCmluZGV4IDYwYjU5MTguLjQxNGM2ZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpL3RsZTYyeDAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaS90bGU2MngwLmgKQEAgLTEyLDEwICsxMiw2IEBACiAgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICovCiAKIHN0cnVjdCB0bGU2MngwX3BkYXRhIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL3RzYzIwMDUuaCBiL2luY2x1ZGUvbGludXgvc3BpL3RzYzIwMDUuaAppbmRleCA4ZjcyMWU0Li41NjNiM2IxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS90c2MyMDA1LmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvdHNjMjAwNS5oCkBAIC0xMiwxMSArMTIsNiBAQAogICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQogICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCi0gKgogICovCiAKICNpZm5kZWYgX0xJTlVYX1NQSV9UU0MyMDA1X0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaAppbmRleCAyNjJiYTRlLi4zZTE4Mzc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCkBAIC0xOTAsNiArMTkwLDggQEAKICNpZmRlZiBDT05GSUdfREVCVUdfTE9DS19BTExPQwogIyBkZWZpbmUgcmF3X3NwaW5fbG9ja19uZXN0ZWQobG9jaywgc3ViY2xhc3MpIFwKIAlfcmF3X3NwaW5fbG9ja19uZXN0ZWQobG9jaywgc3ViY2xhc3MpCisjIGRlZmluZSByYXdfc3Bpbl9sb2NrX2JoX25lc3RlZChsb2NrLCBzdWJjbGFzcykgXAorCV9yYXdfc3Bpbl9sb2NrX2JoX25lc3RlZChsb2NrLCBzdWJjbGFzcykKIAogIyBkZWZpbmUgcmF3X3NwaW5fbG9ja19uZXN0X2xvY2sobG9jaywgbmVzdF9sb2NrKQkJCVwKIAkgZG8gewkJCQkJCQkJXApAQCAtMjA1LDYgKzIwNyw3IEBACiAjIGRlZmluZSByYXdfc3Bpbl9sb2NrX25lc3RlZChsb2NrLCBzdWJjbGFzcykJCVwKIAlfcmF3X3NwaW5fbG9jaygoKHZvaWQpKHN1YmNsYXNzKSwgKGxvY2spKSkKICMgZGVmaW5lIHJhd19zcGluX2xvY2tfbmVzdF9sb2NrKGxvY2ssIG5lc3RfbG9jaykJX3Jhd19zcGluX2xvY2sobG9jaykKKyMgZGVmaW5lIHJhd19zcGluX2xvY2tfYmhfbmVzdGVkKGxvY2ssIHN1YmNsYXNzKQlfcmF3X3NwaW5fbG9ja19iaChsb2NrKQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKQpAQCAtMzI0LDYgKzMyNywxMSBAQAogCXJhd19zcGluX2xvY2tfbmVzdGVkKHNwaW5sb2NrX2NoZWNrKGxvY2spLCBzdWJjbGFzcyk7CVwKIH0gd2hpbGUgKDApCiAKKyNkZWZpbmUgc3Bpbl9sb2NrX2JoX25lc3RlZChsb2NrLCBzdWJjbGFzcykJCQlcCitkbyB7CQkJCQkJCQlcCisJcmF3X3NwaW5fbG9ja19iaF9uZXN0ZWQoc3BpbmxvY2tfY2hlY2sobG9jayksIHN1YmNsYXNzKTtcCit9IHdoaWxlICgwKQorCiAjZGVmaW5lIHNwaW5fbG9ja19uZXN0X2xvY2sobG9jaywgbmVzdF9sb2NrKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCXJhd19zcGluX2xvY2tfbmVzdF9sb2NrKHNwaW5sb2NrX2NoZWNrKGxvY2spLCBuZXN0X2xvY2spOwlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX2FwaV9zbXAuaCBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oCmluZGV4IDQyZGZhYjguLjUzNDQyNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oCkBAIC0yMiw2ICsyMiw4IEBACiB2b2lkIF9fbG9ja2Z1bmMgX3Jhd19zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKGxvY2spOwogdm9pZCBfX2xvY2tmdW5jIF9yYXdfc3Bpbl9sb2NrX25lc3RlZChyYXdfc3BpbmxvY2tfdCAqbG9jaywgaW50IHN1YmNsYXNzKQogCQkJCQkJCQlfX2FjcXVpcmVzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jIF9yYXdfc3Bpbl9sb2NrX2JoX25lc3RlZChyYXdfc3BpbmxvY2tfdCAqbG9jaywgaW50IHN1YmNsYXNzKQorCQkJCQkJCQlfX2FjcXVpcmVzKGxvY2spOwogdm9pZCBfX2xvY2tmdW5jCiBfcmF3X3NwaW5fbG9ja19uZXN0X2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2ssIHN0cnVjdCBsb2NrZGVwX21hcCAqbWFwKQogCQkJCQkJCQlfX2FjcXVpcmVzKGxvY2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfdXAuaCBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3VwLmgKaW5kZXggZDBkMTg4OC4uZDNhZmVmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrX2FwaV91cC5oCkBAIC01Nyw2ICs1Nyw3IEBACiAKICNkZWZpbmUgX3Jhd19zcGluX2xvY2sobG9jaykJCQlfX0xPQ0sobG9jaykKICNkZWZpbmUgX3Jhd19zcGluX2xvY2tfbmVzdGVkKGxvY2ssIHN1YmNsYXNzKQlfX0xPQ0sobG9jaykKKyNkZWZpbmUgX3Jhd19zcGluX2xvY2tfYmhfbmVzdGVkKGxvY2ssIHN1YmNsYXNzKSBfX0xPQ0sobG9jaykKICNkZWZpbmUgX3Jhd19yZWFkX2xvY2sobG9jaykJCQlfX0xPQ0sobG9jaykKICNkZWZpbmUgX3Jhd193cml0ZV9sb2NrKGxvY2spCQkJX19MT0NLKGxvY2spCiAjZGVmaW5lIF9yYXdfc3Bpbl9sb2NrX2JoKGxvY2spCQkJX19MT0NLX0JIKGxvY2spCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NyY3UuaCBiL2luY2x1ZGUvbGludXgvc3JjdS5oCmluZGV4IGEyNzgzY2IuLjljZmQ5NjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3JjdS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3JjdS5oCkBAIC00NSw3ICs0NSw3IEBACiAjZGVmaW5lIFJDVV9CQVRDSF9JTklUKG5hbWUpIHsgTlVMTCwgJihuYW1lLmhlYWQpIH0KIAogc3RydWN0IHNyY3Vfc3RydWN0IHsKLQl1bnNpZ25lZCBjb21wbGV0ZWQ7CisJdW5zaWduZWQgbG9uZyBjb21wbGV0ZWQ7CiAJc3RydWN0IHNyY3Vfc3RydWN0X2FycmF5IF9fcGVyY3B1ICpwZXJfY3B1X3JlZjsKIAlzcGlubG9ja190IHF1ZXVlX2xvY2s7IC8qIHByb3RlY3QgLT5iYXRjaF9xdWV1ZSwgLT5ydW5uaW5nICovCiAJYm9vbCBydW5uaW5nOwpAQCAtMTAyLDEzICsxMDIsMTEgQEAKICAqIGRlZmluZSBhbmQgaW5pdCBhIHNyY3Ugc3RydWN0IGF0IGJ1aWxkIHRpbWUuCiAgKiBkb250J3QgY2FsbCBpbml0X3NyY3Vfc3RydWN0KCkgbm9yIGNsZWFudXBfc3JjdV9zdHJ1Y3QoKSBvbiBpdC4KICAqLwotI2RlZmluZSBERUZJTkVfU1JDVShuYW1lKQkJCQkJCVwKKyNkZWZpbmUgX19ERUZJTkVfU1JDVShuYW1lLCBpc19zdGF0aWMpCQkJCQlcCiAJc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzcmN1X3N0cnVjdF9hcnJheSwgbmFtZSMjX3NyY3VfYXJyYXkpO1wKLQlzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgbmFtZSA9IF9fU1JDVV9TVFJVQ1RfSU5JVChuYW1lKTsKLQotI2RlZmluZSBERUZJTkVfU1RBVElDX1NSQ1UobmFtZSkJCQkJCVwKLQlzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHNyY3Vfc3RydWN0X2FycmF5LCBuYW1lIyNfc3JjdV9hcnJheSk7XAotCXN0YXRpYyBzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgbmFtZSA9IF9fU1JDVV9TVFJVQ1RfSU5JVChuYW1lKTsKKwlpc19zdGF0aWMgc3RydWN0IHNyY3Vfc3RydWN0IG5hbWUgPSBfX1NSQ1VfU1RSVUNUX0lOSVQobmFtZSkKKyNkZWZpbmUgREVGSU5FX1NSQ1UobmFtZSkJCV9fREVGSU5FX1NSQ1UobmFtZSwgLyogbm90IHN0YXRpYyAqLykKKyNkZWZpbmUgREVGSU5FX1NUQVRJQ19TUkNVKG5hbWUpCV9fREVGSU5FX1NSQ1UobmFtZSwgc3RhdGljKQogCiAvKioKICAqIGNhbGxfc3JjdSgpIC0gUXVldWUgYSBjYWxsYmFjayBmb3IgaW52b2NhdGlvbiBhZnRlciBhbiBTUkNVIGdyYWNlIHBlcmlvZApAQCAtMTM1LDcgKzEzMyw3IEBACiB2b2lkIF9fc3JjdV9yZWFkX3VubG9jayhzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwLCBpbnQgaWR4KSBfX3JlbGVhc2VzKHNwKTsKIHZvaWQgc3luY2hyb25pemVfc3JjdShzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTsKIHZvaWQgc3luY2hyb25pemVfc3JjdV9leHBlZGl0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCk7Ci1sb25nIHNyY3VfYmF0Y2hlc19jb21wbGV0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCk7Cit1bnNpZ25lZCBsb25nIHNyY3VfYmF0Y2hlc19jb21wbGV0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCk7CiB2b2lkIHNyY3VfYmFycmllcihzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgKnNwKTsKIAogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfcmVncy5oIGIvaW5jbHVkZS9saW51eC9zc2Ivc3NiX3JlZ3MuaAppbmRleCBmN2I5MTAwLi5jMGY3MDdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2JfcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3NiL3NzYl9yZWdzLmgKQEAgLTE3Myw2ICsxNzMsNyBAQAogI2RlZmluZSBTU0JfU1BST01TSVpFX0JZVEVTX1IxMjMJKFNTQl9TUFJPTVNJWkVfV09SRFNfUjEyMyAqIHNpemVvZih1MTYpKQogI2RlZmluZSBTU0JfU1BST01TSVpFX0JZVEVTX1I0CQkoU1NCX1NQUk9NU0laRV9XT1JEU19SNCAqIHNpemVvZih1MTYpKQogI2RlZmluZSBTU0JfU1BST01TSVpFX1dPUkRTX1IxMAkJMjMwCisjZGVmaW5lIFNTQl9TUFJPTVNJWkVfV09SRFNfUjExCQkyMzQKICNkZWZpbmUgU1NCX1NQUk9NX0JBU0UxCQkJMHgxMDAwCiAjZGVmaW5lIFNTQl9TUFJPTV9CQVNFMzEJCTB4MDgwMAogI2RlZmluZSBTU0JfU1BST01fUkVWSVNJT04JCTB4MDA3RQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvY2xudC5oCmluZGV4IGQ4NmFjYzYuLjU5OGJhODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL2NsbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9jbG50LmgKQEAgLTU3LDcgKzU3LDcgQEAKIAljb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgKmNsX3RpbWVvdXQ7CS8qIFRpbWVvdXQgc3RyYXRlZ3kgKi8KIAogCWludAkJCWNsX25vZGVsZW47CS8qIG5vZGVuYW1lIGxlbmd0aCAqLwotCWNoYXIgCQkJY2xfbm9kZW5hbWVbVU5YX01BWE5PREVOQU1FXTsKKwljaGFyIAkJCWNsX25vZGVuYW1lW1VOWF9NQVhOT0RFTkFNRSsxXTsKIAlzdHJ1Y3QgcnBjX3BpcGVfZGlyX2hlYWQgY2xfcGlwZWRpcl9vYmplY3RzOwogCXN0cnVjdCBycGNfY2xudCAqCWNsX3BhcmVudDsJLyogUG9pbnRzIHRvIHBhcmVudCBvZiBjbG9uZXMgKi8KIAlzdHJ1Y3QgcnBjX3J0dAkJY2xfcnR0X2RlZmF1bHQ7CkBAIC0xMTIsNiArMTEyLDcgQEAKIAlzdHJ1Y3Qgc29ja2FkZHIJCSpzYWRkcmVzczsKIAljb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgKnRpbWVvdXQ7CiAJY29uc3QgY2hhcgkJKnNlcnZlcm5hbWU7CisJY29uc3QgY2hhcgkJKm5vZGVuYW1lOwogCWNvbnN0IHN0cnVjdCBycGNfcHJvZ3JhbSAqcHJvZ3JhbTsKIAl1MzIJCQlwcm9nbnVtYmVyOwkvKiBvdmVycmlkZXMgcHJvZ3JhbS0+bnVtYmVyICovCiAJdTMyCQkJdmVyc2lvbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL21ldHJpY3MuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL21ldHJpY3MuaAppbmRleCBlZWNiNWE3Li43ZTYxYTE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tZXRyaWNzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvbWV0cmljcy5oCkBAIC03OSw2ICs3OSw4IEBACiBzdHJ1Y3QgcnBjX2lvc3RhdHMgKglycGNfYWxsb2NfaW9zdGF0cyhzdHJ1Y3QgcnBjX2NsbnQgKik7CiB2b2lkCQkJcnBjX2NvdW50X2lvc3RhdHMoY29uc3Qgc3RydWN0IHJwY190YXNrICosCiAJCQkJCSAgc3RydWN0IHJwY19pb3N0YXRzICopOwordm9pZAkJCXJwY19jb3VudF9pb3N0YXRzX21ldHJpY3MoY29uc3Qgc3RydWN0IHJwY190YXNrICosCisJCQkJCSAgc3RydWN0IHJwY19pb3N0YXRzICopOwogdm9pZAkJCXJwY19wcmludF9pb3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3QgcnBjX2NsbnQgKik7CiB2b2lkCQkJcnBjX2ZyZWVfaW9zdGF0cyhzdHJ1Y3QgcnBjX2lvc3RhdHMgKik7CiAKQEAgLTg3LDYgKzg5LDggQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHJwY19pb3N0YXRzICpycGNfYWxsb2NfaW9zdGF0cyhzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQpIHsgcmV0dXJuIE5VTEw7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBycGNfY291bnRfaW9zdGF0cyhjb25zdCBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssCiAJCQkJICAgICBzdHJ1Y3QgcnBjX2lvc3RhdHMgKnN0YXRzKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHJwY19jb3VudF9pb3N0YXRzX21ldHJpY3MoY29uc3Qgc3RydWN0IHJwY190YXNrICosCisJCQkJCSAgICAgc3RydWN0IHJwY19pb3N0YXRzICopIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgcnBjX3ByaW50X2lvc3RhdHMoc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBycGNfY2xudCAqY2xudCkge30KIHN0YXRpYyBpbmxpbmUgdm9pZCBycGNfZnJlZV9pb3N0YXRzKHN0cnVjdCBycGNfaW9zdGF0cyAqc3RhdHMpIHt9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3JwY19yZG1hLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9ycGNfcmRtYS5oCmluZGV4IGI3OGYxNmIuLmYzM2M1YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3JwY19yZG1hLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvcnBjX3JkbWEuaApAQCAtNDIsNiArNDIsOSBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorI2RlZmluZSBSUENSRE1BX1ZFUlNJT04JCTEKKyNkZWZpbmUgcnBjcmRtYV92ZXJzaW9uCQljcHVfdG9fYmUzMihSUENSRE1BX1ZFUlNJT04pCisKIHN0cnVjdCBycGNyZG1hX3NlZ21lbnQgewogCV9fYmUzMiByc19oYW5kbGU7CS8qIFJlZ2lzdGVyZWQgbWVtb3J5IGhhbmRsZSAqLwogCV9fYmUzMiByc19sZW5ndGg7CS8qIExlbmd0aCBvZiB0aGUgY2h1bmsgaW4gYnl0ZXMgKi8KQEAgLTk1LDcgKzk4LDEwIEBACiAJfSBybV9ib2R5OwogfTsKIAotI2RlZmluZSBSUENSRE1BX0hEUkxFTl9NSU4JMjgKKy8qCisgKiBTbWFsbGVzdCBSUEMvUkRNQSBoZWFkZXI6IHJtX3hpZCB0aHJvdWdoIHJtX3R5cGUsIHRoZW4gcm1fbm9jaHVua3MKKyAqLworI2RlZmluZSBSUENSRE1BX0hEUkxFTl9NSU4JKHNpemVvZihfX2JlMzIpICogNykKIAogZW51bSBycGNyZG1hX2VycmNvZGUgewogCUVSUl9WRVJTID0gMSwKQEAgLTExNSw0ICsxMjEsMTAgQEAKIAlSRE1BX0VSUk9SID0gNAkJLyogQW4gUlBDIFJETUEgZW5jb2RpbmcgZXJyb3IgKi8KIH07CiAKKyNkZWZpbmUgcmRtYV9tc2cJY3B1X3RvX2JlMzIoUkRNQV9NU0cpCisjZGVmaW5lIHJkbWFfbm9tc2cJY3B1X3RvX2JlMzIoUkRNQV9OT01TRykKKyNkZWZpbmUgcmRtYV9tc2dwCWNwdV90b19iZTMyKFJETUFfTVNHUCkKKyNkZWZpbmUgcmRtYV9kb25lCWNwdV90b19iZTMyKFJETUFfRE9ORSkKKyNkZWZpbmUgcmRtYV9lcnJvcgljcHVfdG9fYmUzMihSRE1BX0VSUk9SKQorCiAjZW5kaWYJCQkJLyogX0xJTlVYX1NVTlJQQ19SUENfUkRNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfcmRtYS5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3JkbWEuaAppbmRleCA5NzVkYTc1Li5kZGZlODhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfcmRtYS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y19yZG1hLmgKQEAgLTYzLDggKzYzLDYgQEAKIGV4dGVybiBhdG9taWNfdCByZG1hX3N0YXRfc3FfcG9sbDsKIGV4dGVybiBhdG9taWNfdCByZG1hX3N0YXRfc3FfcHJvZDsKIAotI2RlZmluZSBSUENSRE1BX1ZFUlNJT04gMQotCiAvKgogICogQ29udGV4dHMgYXJlIGJ1aWx0IHdoZW4gYW4gUkRNQSByZXF1ZXN0IGlzIGNyZWF0ZWQgYW5kIGFyZSBhCiAgKiByZWNvcmQgb2YgdGhlIHJlc291cmNlcyB0aGF0IGNhbiBiZSByZWNvdmVyZWQgd2hlbiB0aGUgcmVxdWVzdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCmluZGV4IDlkMjdhYzQuLjhiOTNlZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKQEAgLTM0Nyw2ICszNDcsOSBAQAogdm9pZAkJCXhwcnRfY29uZGl0aW9uYWxfZGlzY29ubmVjdChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHVuc2lnbmVkIGludCBjb29raWUpOwogaW50CQkJeHNfc3dhcHBlcihzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIGludCBlbmFibGUpOwogCitib29sCQkJeHBydF9sb2NrX2Nvbm5lY3Qoc3RydWN0IHJwY194cHJ0ICosIHN0cnVjdCBycGNfdGFzayAqLCB2b2lkICopOwordm9pZAkJCXhwcnRfdW5sb2NrX2Nvbm5lY3Qoc3RydWN0IHJwY194cHJ0ICosIHZvaWQgKik7CisKIC8qCiAgKiBSZXNlcnZlZCBiaXQgcG9zaXRpb25zIGluIHhwcnQtPnN0YXRlCiAgKi8KQEAgLTM1NywxMCArMzYwLDcgQEAKICNkZWZpbmUgWFBSVF9CT1VORAkJKDQpCiAjZGVmaW5lIFhQUlRfQklORElORwkJKDUpCiAjZGVmaW5lIFhQUlRfQ0xPU0lORwkJKDYpCi0jZGVmaW5lIFhQUlRfQ09OTkVDVElPTl9BQk9SVAkoNykKLSNkZWZpbmUgWFBSVF9DT05ORUNUSU9OX0NMT1NFCSg4KQogI2RlZmluZSBYUFJUX0NPTkdFU1RFRAkJKDkpCi0jZGVmaW5lIFhQUlRfQ09OTkVDVElPTl9SRVVTRQkoMTApCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB4cHJ0X3NldF9jb25uZWN0ZWQoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCAzNGU4YjYwLi43MDY3ZWNhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtNDM3LDE2ICs0MzcsNiBAQAogZXh0ZXJuIGludCB0cnlfdG9fZnJlZV9zd2FwKHN0cnVjdCBwYWdlICopOwogc3RydWN0IGJhY2tpbmdfZGV2X2luZm87CiAKLSNpZmRlZiBDT05GSUdfTUVNQ0cKLWV4dGVybiB2b2lkCi1tZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXBjYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3dwX2VudHJ5X3QgZW50LCBib29sIHN3YXBvdXQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZAotbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHN3cF9lbnRyeV90IGVudCwgYm9vbCBzd2Fwb3V0KQotewotfQotI2VuZGlmCi0KICNlbHNlIC8qIENPTkZJR19TV0FQICovCiAKICNkZWZpbmUgc3dhcF9hZGRyZXNzX3NwYWNlKGVudHJ5KQkJKE5VTEwpCkBAIC01NDcsMTEgKzUzNyw2IEBACiAJcmV0dXJuIGVudHJ5OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLW1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGNhY2hlKHN0cnVjdCBwYWdlICpwYWdlLCBzd3BfZW50cnlfdCBlbnQpCi17Ci19Ci0KICNlbmRpZiAvKiBDT05GSUdfU1dBUCAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18qLwogI2VuZGlmIC8qIF9MSU5VWF9TV0FQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcG9wcy5oIGIvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgKaW5kZXggNmFkZmI3Yi4uODMxYTMxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2Fwb3BzLmgKQEAgLTU0LDcgKzU0LDcgQEAKIC8qIGNoZWNrIHdoZXRoZXIgYSBwdGUgcG9pbnRzIHRvIGEgc3dhcCBlbnRyeSAqLwogc3RhdGljIGlubGluZSBpbnQgaXNfc3dhcF9wdGUocHRlX3QgcHRlKQogewotCXJldHVybiAhcHRlX25vbmUocHRlKSAmJiAhcHRlX3ByZXNlbnRfbm9udW1hKHB0ZSkgJiYgIXB0ZV9maWxlKHB0ZSk7CisJcmV0dXJuICFwdGVfbm9uZShwdGUpICYmICFwdGVfcHJlc2VudF9ub251bWEocHRlKTsKIH0KICNlbmRpZgogCkBAIC02Niw3ICs2Niw2IEBACiB7CiAJc3dwX2VudHJ5X3QgYXJjaF9lbnRyeTsKIAotCUJVR19PTihwdGVfZmlsZShwdGUpKTsKIAlpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KHB0ZSkpCiAJCXB0ZSA9IHB0ZV9zd3BfY2xlYXJfc29mdF9kaXJ0eShwdGUpOwogCWFyY2hfZW50cnkgPSBfX3B0ZV90b19zd3BfZW50cnkocHRlKTsKQEAgLTgyLDcgKzgxLDYgQEAKIAlzd3BfZW50cnlfdCBhcmNoX2VudHJ5OwogCiAJYXJjaF9lbnRyeSA9IF9fc3dwX2VudHJ5KHN3cF90eXBlKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpOwotCUJVR19PTihwdGVfZmlsZShfX3N3cF9lbnRyeV90b19wdGUoYXJjaF9lbnRyeSkpKTsKIAlyZXR1cm4gX19zd3BfZW50cnlfdG9fcHRlKGFyY2hfZW50cnkpOwogfQogCkBAIC0xMzcsNiArMTM1LDggQEAKIAkqZW50cnkgPSBzd3BfZW50cnkoU1dQX01JR1JBVElPTl9SRUFELCBzd3Bfb2Zmc2V0KCplbnRyeSkpOwogfQogCitleHRlcm4gdm9pZCBfX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdGVfdCAqcHRlcCwKKwkJCQkJc3BpbmxvY2tfdCAqcHRsKTsKIGV4dGVybiB2b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogCQkJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwogZXh0ZXJuIHZvaWQgbWlncmF0aW9uX2VudHJ5X3dhaXRfaHVnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKQEAgLTE1MCw2ICsxNTAsOCBAQAogfQogI2RlZmluZSBtaWdyYXRpb25fZW50cnlfdG9fcGFnZShzd3ApIE5VTEwKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYWtlX21pZ3JhdGlvbl9lbnRyeV9yZWFkKHN3cF9lbnRyeV90ICplbnRyeXApIHsgfQorc3RhdGljIGlubGluZSB2b2lkIF9fbWlncmF0aW9uX2VudHJ5X3dhaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHB0ZV90ICpwdGVwLAorCQkJCQlzcGlubG9ja190ICpwdGwpIHsgfQogc3RhdGljIGlubGluZSB2b2lkIG1pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLAogCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBtaWdyYXRpb25fZW50cnlfd2FpdF9odWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IDg1ODkzZDcuLjc2ZDFlMzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTQxMCwxMiArNDEwLDE2IEBACiAJCQkJc3RydWN0IHN0YXQgX191c2VyICpzdGF0YnVmKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbmV3ZnN0YXQodW5zaWduZWQgaW50IGZkLCBzdHJ1Y3Qgc3RhdCBfX3VzZXIgKnN0YXRidWYpOwogYXNtbGlua2FnZSBsb25nIHN5c191c3RhdCh1bnNpZ25lZCBkZXYsIHN0cnVjdCB1c3RhdCBfX3VzZXIgKnVidWYpOwotI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKKyNpZiBkZWZpbmVkKF9fQVJDSF9XQU5UX1NUQVQ2NCkgfHwgZGVmaW5lZChfX0FSQ0hfV0FOVF9DT01QQVRfU1RBVDY0KQogYXNtbGlua2FnZSBsb25nIHN5c19zdGF0NjQoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLAogCQkJCXN0cnVjdCBzdGF0NjQgX191c2VyICpzdGF0YnVmKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZnN0YXQ2NCh1bnNpZ25lZCBsb25nIGZkLCBzdHJ1Y3Qgc3RhdDY0IF9fdXNlciAqc3RhdGJ1Zik7CiBhc21saW5rYWdlIGxvbmcgc3lzX2xzdGF0NjQoY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLAogCQkJCXN0cnVjdCBzdGF0NjQgX191c2VyICpzdGF0YnVmKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZnN0YXRhdDY0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RhdDY0IF9fdXNlciAqc3RhdGJ1ZiwgaW50IGZsYWcpOworI2VuZGlmCisjaWYgQklUU19QRVJfTE9ORyA9PSAzMgogYXNtbGlua2FnZSBsb25nIHN5c190cnVuY2F0ZTY0KGNvbnN0IGNoYXIgX191c2VyICpwYXRoLCBsb2ZmX3QgbGVuZ3RoKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZnRydW5jYXRlNjQodW5zaWduZWQgaW50IGZkLCBsb2ZmX3QgbGVuZ3RoKTsKICNlbmRpZgpAQCAtNzcxLDggKzc3NSw2IEBACiAJCQkgICB1bW9kZV90IG1vZGUpOwogYXNtbGlua2FnZSBsb25nIHN5c19uZXdmc3RhdGF0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwKIAkJCSAgICAgICBzdHJ1Y3Qgc3RhdCBfX3VzZXIgKnN0YXRidWYsIGludCBmbGFnKTsKLWFzbWxpbmthZ2UgbG9uZyBzeXNfZnN0YXRhdDY0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwKLQkJCSAgICAgICBzdHJ1Y3Qgc3RhdDY0IF9fdXNlciAqc3RhdGJ1ZiwgaW50IGZsYWcpOwogYXNtbGlua2FnZSBsb25nIHN5c19yZWFkbGlua2F0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRoLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICAgICAgIGludCBidWZzaXopOwogYXNtbGlua2FnZSBsb25nIHN5c191dGltZW5zYXQoaW50IGRmZCwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKaW5kZXggNjczMDllYy4uMWE3YWRiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oCkBAIC0xMTUsNiArMTE1LDcgQEAKIAl1MzIJCQkJcmN2X2lzbjsKIAl1MzIJCQkJc250X2lzbjsKIAl1MzIJCQkJc250X3N5bmFjazsgLyogc3luYWNrIHNlbnQgdGltZSAqLworCXUzMgkJCQlsYXN0X29vd19hY2tfdGltZTsgLyogbGFzdCBTWU5BQ0sgKi8KIAl1MzIJCQkJcmN2X254dDsgLyogdGhlIGFjayAjIGJ5IFNZTkFDSy4gRm9yCiAJCQkJCQkgICogRmFzdE9wZW4gaXQncyB0aGUgc2VxIwogCQkJCQkJICAqIGFmdGVyIGRhdGEtaW4tU1lOLgpAQCAtMTUyLDYgKzE1Myw3IEBACiAgCXUzMglzbmRfc21sOwkvKiBMYXN0IGJ5dGUgb2YgdGhlIG1vc3QgcmVjZW50bHkgdHJhbnNtaXR0ZWQgc21hbGwgcGFja2V0ICovCiAJdTMyCXJjdl90c3RhbXA7CS8qIHRpbWVzdGFtcCBvZiBsYXN0IHJlY2VpdmVkIEFDSyAoZm9yIGtlZXBhbGl2ZXMpICovCiAJdTMyCWxzbmR0aW1lOwkvKiB0aW1lc3RhbXAgb2YgbGFzdCBzZW50IGRhdGEgcGFja2V0IChmb3IgcmVzdGFydCB3aW5kb3cpICovCisJdTMyCWxhc3Rfb293X2Fja190aW1lOyAgLyogdGltZXN0YW1wIG9mIGxhc3Qgb3V0LW9mLXdpbmRvdyBBQ0sgKi8KIAogCXUzMgl0c29mZnNldDsJLyogdGltZXN0YW1wIG9mZnNldCAqLwogCkBAIC0zNDAsNiArMzQyLDEwIEBACiAJdTMyCQkJICB0d19yY3Zfd25kOwogCXUzMgkJCSAgdHdfdHNfb2Zmc2V0OwogCXUzMgkJCSAgdHdfdHNfcmVjZW50OworCisJLyogVGhlIHRpbWUgd2Ugc2VudCB0aGUgbGFzdCBvdXQtb2Ytd2luZG93IEFDSzogKi8KKwl1MzIJCQkgIHR3X2xhc3Rfb293X2Fja190aW1lOworCiAJbG9uZwkJCSAgdHdfdHNfcmVjZW50X3N0YW1wOwogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCiAJc3RydWN0IHRjcF9tZDVzaWdfa2V5CSAgKnR3X21kNV9rZXk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVjb3VudGVyLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVjb3VudGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4MjAzNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdGltZWNvdW50ZXIuaApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvdGltZWNvdW50ZXIuaAorICoKKyAqIGJhc2VkIG9uIGNvZGUgdGhhdCBtaWdyYXRlZCBhd2F5IGZyb20KKyAqIGxpbnV4L2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBfTElOVVhfVElNRUNPVU5URVJfSAorI2RlZmluZSBfTElOVVhfVElNRUNPVU5URVJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogc2ltcGxpZnkgaW5pdGlhbGl6YXRpb24gb2YgbWFzayBmaWVsZCAqLworI2RlZmluZSBDWUNMRUNPVU5URVJfTUFTSyhiaXRzKSAoY3ljbGVfdCkoKGJpdHMpIDwgNjQgPyAoKDFVTEw8PChiaXRzKSktMSkgOiAtMSkKKworLyoqCisgKiBzdHJ1Y3QgY3ljbGVjb3VudGVyIC0gaGFyZHdhcmUgYWJzdHJhY3Rpb24gZm9yIGEgZnJlZSBydW5uaW5nIGNvdW50ZXIKKyAqCVByb3ZpZGVzIGNvbXBsZXRlbHkgc3RhdGUtZnJlZSBhY2Nlc3NvcnMgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuCisgKglEZXBlbmRpbmcgb24gd2hpY2ggaGFyZHdhcmUgaXQgcmVhZHMsIHRoZSBjeWNsZSBjb3VudGVyIG1heSB3cmFwCisgKglhcm91bmQgcXVpY2tseS4gTG9ja2luZyBydWxlcyAoaWYgbmVjZXNzYXJ5KSBoYXZlIHRvIGJlIGRlZmluZWQKKyAqCWJ5IHRoZSBpbXBsZW1lbnRvciBhbmQgdXNlciBvZiBzcGVjaWZpYyBpbnN0YW5jZXMgb2YgdGhpcyBBUEkuCisgKgorICogQHJlYWQ6CQlyZXR1cm5zIHRoZSBjdXJyZW50IGN5Y2xlIHZhbHVlCisgKiBAbWFzazoJCWJpdG1hc2sgZm9yIHR3bydzIGNvbXBsZW1lbnQKKyAqCQkJc3VidHJhY3Rpb24gb2Ygbm9uIDY0IGJpdCBjb3VudGVycywKKyAqCQkJc2VlIENZQ0xFQ09VTlRFUl9NQVNLKCkgaGVscGVyIG1hY3JvCisgKiBAbXVsdDoJCWN5Y2xlIHRvIG5hbm9zZWNvbmQgbXVsdGlwbGllcgorICogQHNoaWZ0OgkJY3ljbGUgdG8gbmFub3NlY29uZCBkaXZpc29yIChwb3dlciBvZiB0d28pCisgKi8KK3N0cnVjdCBjeWNsZWNvdW50ZXIgeworCWN5Y2xlX3QgKCpyZWFkKShjb25zdCBzdHJ1Y3QgY3ljbGVjb3VudGVyICpjYyk7CisJY3ljbGVfdCBtYXNrOworCXUzMiBtdWx0OworCXUzMiBzaGlmdDsKK307CisKKy8qKgorICogc3RydWN0IHRpbWVjb3VudGVyIC0gbGF5ZXIgYWJvdmUgYSAlc3RydWN0IGN5Y2xlY291bnRlciB3aGljaCBjb3VudHMgbmFub3NlY29uZHMKKyAqCUNvbnRhaW5zIHRoZSBzdGF0ZSBuZWVkZWQgYnkgdGltZWNvdW50ZXJfcmVhZCgpIHRvIGRldGVjdAorICoJY3ljbGUgY291bnRlciB3cmFwIGFyb3VuZC4gSW5pdGlhbGl6ZSB3aXRoCisgKgl0aW1lY291bnRlcl9pbml0KCkuIEFsc28gdXNlZCB0byBjb252ZXJ0IGN5Y2xlIGNvdW50cyBpbnRvIHRoZQorICoJY29ycmVzcG9uZGluZyBuYW5vc2Vjb25kIGNvdW50cyB3aXRoIHRpbWVjb3VudGVyX2N5YzJ0aW1lKCkuIFVzZXJzCisgKglvZiB0aGlzIGNvZGUgYXJlIHJlc3BvbnNpYmxlIGZvciBpbml0aWFsaXppbmcgdGhlIHVuZGVybHlpbmcKKyAqCWN5Y2xlIGNvdW50ZXIgaGFyZHdhcmUsIGxvY2tpbmcgaXNzdWVzIGFuZCByZWFkaW5nIHRoZSB0aW1lCisgKgltb3JlIG9mdGVuIHRoYW4gdGhlIGN5Y2xlIGNvdW50ZXIgd3JhcHMgYXJvdW5kLiBUaGUgbmFub3NlY29uZAorICoJY291bnRlciB3aWxsIG9ubHkgd3JhcCBhcm91bmQgYWZ0ZXIgfjU4NSB5ZWFycy4KKyAqCisgKiBAY2M6CQkJdGhlIGN5Y2xlIGNvdW50ZXIgdXNlZCBieSB0aGlzIGluc3RhbmNlCisgKiBAY3ljbGVfbGFzdDoJCW1vc3QgcmVjZW50IGN5Y2xlIGNvdW50ZXIgdmFsdWUgc2VlbiBieQorICoJCQl0aW1lY291bnRlcl9yZWFkKCkKKyAqIEBuc2VjOgkJY29udGludW91c2x5IGluY3JlYXNpbmcgY291bnQKKyAqIEBtYXNrOgkJYml0IG1hc2sgZm9yIG1haW50YWluaW5nIHRoZSAnZnJhYycgZmllbGQKKyAqIEBmcmFjOgkJYWNjdW11bGF0ZWQgZnJhY3Rpb25hbCBuYW5vc2Vjb25kcworICovCitzdHJ1Y3QgdGltZWNvdW50ZXIgeworCWNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjOworCWN5Y2xlX3QgY3ljbGVfbGFzdDsKKwl1NjQgbnNlYzsKKwl1NjQgbWFzazsKKwl1NjQgZnJhYzsKK307CisKKy8qKgorICogY3ljbGVjb3VudGVyX2N5YzJucyAtIGNvbnZlcnRzIGN5Y2xlIGNvdW50ZXIgY3ljbGVzIHRvIG5hbm9zZWNvbmRzCisgKiBAY2M6CQlQb2ludGVyIHRvIGN5Y2xlIGNvdW50ZXIuCisgKiBAY3ljbGVzOglDeWNsZXMKKyAqIEBtYXNrOgliaXQgbWFzayBmb3IgbWFpbnRhaW5pbmcgdGhlICdmcmFjJyBmaWVsZAorICogQGZyYWM6CXBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIGZyYWN0aW9uYWwgbmFub3NlY29uZHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTY0IGN5Y2xlY291bnRlcl9jeWMybnMoY29uc3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2MsCisJCQkJICAgICAgY3ljbGVfdCBjeWNsZXMsIHU2NCBtYXNrLCB1NjQgKmZyYWMpCit7CisJdTY0IG5zID0gKHU2NCkgY3ljbGVzOworCisJbnMgPSAobnMgKiBjYy0+bXVsdCkgKyAqZnJhYzsKKwkqZnJhYyA9IG5zICYgbWFzazsKKwlyZXR1cm4gbnMgPj4gY2MtPnNoaWZ0OworfQorCisvKioKKyAqIHRpbWVjb3VudGVyX2FkanRpbWUgLSBTaGlmdHMgdGhlIHRpbWUgb2YgdGhlIGNsb2NrLgorICogQGRlbHRhOglEZXNpcmVkIGNoYW5nZSBpbiBuYW5vc2Vjb25kcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRpbWVjb3VudGVyX2FkanRpbWUoc3RydWN0IHRpbWVjb3VudGVyICp0YywgczY0IGRlbHRhKQoreworCXRjLT5uc2VjICs9IGRlbHRhOworfQorCisvKioKKyAqIHRpbWVjb3VudGVyX2luaXQgLSBpbml0aWFsaXplIGEgdGltZSBjb3VudGVyCisgKiBAdGM6CQkJUG9pbnRlciB0byB0aW1lIGNvdW50ZXIgd2hpY2ggaXMgdG8gYmUgaW5pdGlhbGl6ZWQvcmVzZXQKKyAqIEBjYzoJCQlBIGN5Y2xlIGNvdW50ZXIsIHJlYWR5IHRvIGJlIHVzZWQuCisgKiBAc3RhcnRfdHN0YW1wOglBcmJpdHJhcnkgaW5pdGlhbCB0aW1lIHN0YW1wLgorICoKKyAqIEFmdGVyIHRoaXMgY2FsbCB0aGUgY3VycmVudCBjeWNsZSByZWdpc3RlciAocm91Z2hseSkgY29ycmVzcG9uZHMgdG8KKyAqIHRoZSBpbml0aWFsIHRpbWUgc3RhbXAuIEV2ZXJ5IGNhbGwgdG8gdGltZWNvdW50ZXJfcmVhZCgpIGluY3JlbWVudHMKKyAqIHRoZSB0aW1lIHN0YW1wIGNvdW50ZXIgYnkgdGhlIG51bWJlciBvZiBlbGFwc2VkIG5hbm9zZWNvbmRzLgorICovCitleHRlcm4gdm9pZCB0aW1lY291bnRlcl9pbml0KHN0cnVjdCB0aW1lY291bnRlciAqdGMsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjLAorCQkJICAgICB1NjQgc3RhcnRfdHN0YW1wKTsKKworLyoqCisgKiB0aW1lY291bnRlcl9yZWFkIC0gcmV0dXJuIG5hbm9zZWNvbmRzIGVsYXBzZWQgc2luY2UgdGltZWNvdW50ZXJfaW5pdCgpCisgKiAgICAgICAgICAgICAgICAgICAgcGx1cyB0aGUgaW5pdGlhbCB0aW1lIHN0YW1wCisgKiBAdGM6ICAgICAgICAgIFBvaW50ZXIgdG8gdGltZSBjb3VudGVyLgorICoKKyAqIEluIG90aGVyIHdvcmRzLCBrZWVwcyB0cmFjayBvZiB0aW1lIHNpbmNlIHRoZSBzYW1lIGVwb2NoIGFzCisgKiB0aGUgZnVuY3Rpb24gd2hpY2ggZ2VuZXJhdGVkIHRoZSBpbml0aWFsIHRpbWUgc3RhbXAuCisgKi8KK2V4dGVybiB1NjQgdGltZWNvdW50ZXJfcmVhZChzdHJ1Y3QgdGltZWNvdW50ZXIgKnRjKTsKKworLyoqCisgKiB0aW1lY291bnRlcl9jeWMydGltZSAtIGNvbnZlcnQgYSBjeWNsZSBjb3VudGVyIHRvIHNhbWUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgdGltZSBiYXNlIGFzIHZhbHVlcyByZXR1cm5lZCBieQorICogICAgICAgICAgICAgICAgICAgICAgICB0aW1lY291bnRlcl9yZWFkKCkKKyAqIEB0YzoJCVBvaW50ZXIgdG8gdGltZSBjb3VudGVyLgorICogQGN5Y2xlX3RzdGFtcDoJYSB2YWx1ZSByZXR1cm5lZCBieSB0Yy0+Y2MtPnJlYWQoKQorICoKKyAqIEN5Y2xlIGNvdW50cyB0aGF0IGFyZSBjb252ZXJ0ZWQgY29ycmVjdGx5IGFzIGxvbmcgYXMgdGhleQorICogZmFsbCBpbnRvIHRoZSBpbnRlcnZhbCBbLTEvMiBtYXggY3ljbGUgY291bnQsICsxLzIgbWF4IGN5Y2xlIGNvdW50XSwKKyAqIHdpdGggIm1heCBjeWNsZSBjb3VudCIgPT0gY3MtPm1hc2srMS4KKyAqCisgKiBUaGlzIGFsbG93cyBjb252ZXJzaW9uIG9mIGN5Y2xlIGNvdW50ZXIgdmFsdWVzIHdoaWNoIHdlcmUgZ2VuZXJhdGVkCisgKiBpbiB0aGUgcGFzdC4KKyAqLworZXh0ZXJuIHU2NCB0aW1lY291bnRlcl9jeWMydGltZShzdHJ1Y3QgdGltZWNvdW50ZXIgKnRjLAorCQkJCWN5Y2xlX3QgY3ljbGVfdHN0YW1wKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVrZWVwaW5nLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVrZWVwaW5nLmgKaW5kZXggOWI2M2QxMy4uM2VhYWU0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1la2VlcGluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZWtlZXBpbmcuaApAQCAtMzMsNiArMzMsNyBAQAogCiBleHRlcm4gaW50IF9fZ2V0bnN0aW1lb2ZkYXk2NChzdHJ1Y3QgdGltZXNwZWM2NCAqdHYpOwogZXh0ZXJuIHZvaWQgZ2V0bnN0aW1lb2ZkYXk2NChzdHJ1Y3QgdGltZXNwZWM2NCAqdHYpOworZXh0ZXJuIHZvaWQgZ2V0Ym9vdHRpbWU2NChzdHJ1Y3QgdGltZXNwZWM2NCAqdHMpOwogCiAjaWYgQklUU19QRVJfTE9ORyA9PSA2NAogLyoqCkBAIC03Miw2ICs3MywxMSBAQAogewogCXJldHVybiBnZXRfbW9ub3RvbmljX2NvYXJzZTY0KCk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRib290dGltZShzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCXJldHVybiBnZXRib290dGltZTY0KHRzKTsKK30KICNlbHNlCiAvKioKICAqIERlcHJlY2F0ZWQuIFVzZSBkb19zZXR0aW1lb2ZkYXk2NCgpLgpAQCAtMTI5LDkgKzEzNSwxNSBAQAogewogCXJldHVybiB0aW1lc3BlYzY0X3RvX3RpbWVzcGVjKGdldF9tb25vdG9uaWNfY29hcnNlNjQoKSk7CiB9Ci0jZW5kaWYKIAotZXh0ZXJuIHZvaWQgZ2V0Ym9vdHRpbWUoc3RydWN0IHRpbWVzcGVjICp0cyk7CitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0Ym9vdHRpbWUoc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlzdHJ1Y3QgdGltZXNwZWM2NCB0czY0OworCisJZ2V0Ym9vdHRpbWU2NCgmdHM2NCk7CisJKnRzID0gdGltZXNwZWM2NF90b190aW1lc3BlYyh0czY0KTsKK30KKyNlbmRpZgogCiAjZGVmaW5lIGRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKHRzKSBrdGltZV9nZXRfdHModHMpCiAjZGVmaW5lIGt0aW1lX2dldF9yZWFsX3RzNjQodHMpCWdldG5zdGltZW9mZGF5NjQodHMpCkBAIC0yMTcsNiArMjI5LDExIEBACiAJKnRzID0ga3RpbWVfdG9fdGltZXNwZWMoa3RpbWVfZ2V0X2Jvb3R0aW1lKCkpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X21vbm90b25pY19ib290dGltZTY0KHN0cnVjdCB0aW1lc3BlYzY0ICp0cykKK3sKKwkqdHMgPSBrdGltZV90b190aW1lc3BlYzY0KGt0aW1lX2dldF9ib290dGltZSgpKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHRpbWVrZWVwaW5nX2Nsb2NrdGFpKHN0cnVjdCB0aW1lc3BlYyAqdHMpCiB7CiAJKnRzID0ga3RpbWVfdG9fdGltZXNwZWMoa3RpbWVfZ2V0X2Nsb2NrdGFpKCkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaAppbmRleCBlMDhlMjFlLi5jNzI4NTEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaApAQCAtMTczLDcgKzE3Myw3IEBACiAJCQkJVFBfUFJPVE8oZGF0YV9wcm90byksCQkJXAogCQkJCVRQX0FSR1MoZGF0YV9hcmdzKSwJCQlcCiAJCQkJVFBfQ09ORElUSU9OKGNvbmQpLCwpOwkJCVwKLQkJaWYgKElTX0VOQUJMRUQoQ09ORklHX0xPQ0tERVApKSB7CQkJXAorCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfTE9DS0RFUCkgJiYgKGNvbmQpKSB7CQlcCiAJCQlyY3VfcmVhZF9sb2NrX3NjaGVkX25vdHJhY2UoKTsJCQlcCiAJCQlyY3VfZGVyZWZlcmVuY2Vfc2NoZWQoX190cmFjZXBvaW50XyMjbmFtZS5mdW5jcyk7XAogCQkJcmN1X3JlYWRfdW5sb2NrX3NjaGVkX25vdHJhY2UoKTsJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAppbmRleCBhMGJiNzA0Li42MjMyMzgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCkBAIC0yMTMsNSArMjEzLDggQEAKIH07CiAjZGVmaW5lIHJjdV9oZWFkIGNhbGxiYWNrX2hlYWQKIAorLyogY2xvY2tzb3VyY2UgY3ljbGUgYmFzZSB0eXBlICovCit0eXBlZGVmIHU2NCBjeWNsZV90OworCiAjZW5kaWYgLyogIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VkcC5oIGIvaW5jbHVkZS9saW51eC91ZHAuaAppbmRleCBlZTMyNzc1Li4yNDdjZmRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VkcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdWRwLmgKQEAgLTQ5LDExICs0OSw3IEBACiAJdW5zaWduZWQgaW50CSBjb3JrZmxhZzsJLyogQ29yayBpcyByZXF1aXJlZCAqLwogCV9fdTgJCSBlbmNhcF90eXBlOwkvKiBJcyB0aGlzIGFuIEVuY2Fwc3VsYXRpb24gc29ja2V0PyAqLwogCXVuc2lnbmVkIGNoYXIJIG5vX2NoZWNrNl90eDoxLC8qIFNlbmQgemVybyBVRFA2IGNoZWNrc3VtcyBvbiBUWD8gKi8KLQkJCSBub19jaGVjazZfcng6MSwvKiBBbGxvdyB6ZXJvIFVEUDYgY2hlY2tzdW1zIG9uIFJYPyAqLwotCQkJIGNvbnZlcnRfY3N1bToxOy8qIE9uIHJlY2VpdmUsIGNvbnZlcnQgY2hlY2tzdW0KLQkJCQkJICogdW5uZWNlc3NhcnkgdG8gY2hlY2tzdW0gY29tcGxldGUKLQkJCQkJICogaWYgcG9zc2libGUuCi0JCQkJCSAqLworCQkJIG5vX2NoZWNrNl9yeDoxOy8qIEFsbG93IHplcm8gVURQNiBjaGVja3N1bXMgb24gUlg/ICovCiAJLyoKIAkgKiBGb2xsb3dpbmcgbWVtYmVyIHJldGFpbnMgdGhlIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSBhIFVEUCBoZWFkZXIKIAkgKiB3aGVuIHRoZSBzb2NrZXQgaXMgdW5jb3JrZWQuCkBAIC0xMDIsMTYgKzk4LDYgQEAKIAlyZXR1cm4gdWRwX3NrKHNrKS0+bm9fY2hlY2s2X3J4OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdWRwX3NldF9jb252ZXJ0X2NzdW0oc3RydWN0IHNvY2sgKnNrLCBib29sIHZhbCkKLXsKLQl1ZHBfc2soc2spLT5jb252ZXJ0X2NzdW0gPSB2YWw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCB1ZHBfZ2V0X2NvbnZlcnRfY3N1bShzdHJ1Y3Qgc29jayAqc2spCi17Ci0JcmV0dXJuIHVkcF9zayhzayktPmNvbnZlcnRfY3N1bTsKLX0KLQogI2RlZmluZSB1ZHBfcG9ydGFkZHJfZm9yX2VhY2hfZW50cnkoX19zaywgbm9kZSwgbGlzdCkgXAogCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KF9fc2ssIG5vZGUsIGxpc3QsIF9fc2tfY29tbW9uLnNrY19wb3J0YWRkcl9ub2RlKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Vpby5oIGIvaW5jbHVkZS9saW51eC91aW8uaAppbmRleCAxYzVlNDUzLi4zZTBjYjRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Vpby5oCisrKyBiL2luY2x1ZGUvbGludXgvdWlvLmgKQEAgLTEzNSwxMCArMTM1LDQgQEAKIHNpemVfdCBjc3VtX2FuZF9jb3B5X3RvX2l0ZXIodm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVzLCBfX3dzdW0gKmNzdW0sIHN0cnVjdCBpb3ZfaXRlciAqaSk7CiBzaXplX3QgY3N1bV9hbmRfY29weV9mcm9tX2l0ZXIodm9pZCAqYWRkciwgc2l6ZV90IGJ5dGVzLCBfX3dzdW0gKmNzdW0sIHN0cnVjdCBpb3ZfaXRlciAqaSk7CiAKLWludCBtZW1jcHlfZnJvbWlvdmVjKHVuc2lnbmVkIGNoYXIgKmtkYXRhLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGxlbik7Ci1pbnQgbWVtY3B5X2Zyb21pb3ZlY2VuZCh1bnNpZ25lZCBjaGFyICprZGF0YSwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCi0JCQlpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKLWludCBtZW1jcHlfdG9pb3ZlY2VuZChjb25zdCBzdHJ1Y3QgaW92ZWMgKnYsIHVuc2lnbmVkIGNoYXIgKmtkYXRhLAotCQkgICAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Ztd192bWNpX2FwaS5oIGIvaW5jbHVkZS9saW51eC92bXdfdm1jaV9hcGkuaAppbmRleCA1NjkxZjc1Li42M2RmM2EyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bXdfdm1jaV9hcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Ztd192bWNpX2FwaS5oCkBAIC03NCw3ICs3NCw3IEBACiBzc2l6ZV90IHZtY2lfcXBhaXJfcGVlayhzdHJ1Y3Qgdm1jaV9xcCAqcXBhaXIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9zaXplLAogCQkJaW50IG1vZGUpOwogc3NpemVfdCB2bWNpX3FwYWlyX2VucXVldihzdHJ1Y3Qgdm1jaV9xcCAqcXBhaXIsCi0JCQkgIHZvaWQgKmlvdiwgc2l6ZV90IGlvdl9zaXplLCBpbnQgbW9kZSk7CisJCQkgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGlvdl9zaXplLCBpbnQgbW9kZSk7CiBzc2l6ZV90IHZtY2lfcXBhaXJfZGVxdWV2KHN0cnVjdCB2bWNpX3FwICpxcGFpciwKIAkJCSAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgaW92X3NpemUsIGludCBtb2RlKTsKIHNzaXplX3Qgdm1jaV9xcGFpcl9wZWVrdihzdHJ1Y3Qgdm1jaV9xcCAqcXBhaXIsIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGlvdl9zaXplLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93YWl0LmggYi9pbmNsdWRlL2xpbnV4L3dhaXQuaAppbmRleCAyMjMyZWQxLi41MzdkNThlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dhaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3dhaXQuaApAQCAtMzYzLDcgKzM2Myw2IEBACiAgKi8KICNkZWZpbmUgd2FpdF9ldmVudF9jbWQod3EsIGNvbmRpdGlvbiwgY21kMSwgY21kMikJCQlcCiBkbyB7CQkJCQkJCQkJXAotCW1pZ2h0X3NsZWVwKCk7CQkJCQkJCVwKIAlpZiAoY29uZGl0aW9uKQkJCQkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJX193YWl0X2V2ZW50X2NtZCh3cSwgY29uZGl0aW9uLCBjbWQxLCBjbWQyKTsJCQlcCkBAIC05OTEsNiArOTkwLDMyIEBACiB9CiAKIC8qKgorICogd2FpdF9vbl9iaXRfdGltZW91dCAtIHdhaXQgZm9yIGEgYml0IHRvIGJlIGNsZWFyZWQgb3IgYSB0aW1lb3V0IGVsYXBzZXMKKyAqIEB3b3JkOiB0aGUgd29yZCBiZWluZyB3YWl0ZWQgb24sIGEga2VybmVsIHZpcnR1YWwgYWRkcmVzcworICogQGJpdDogdGhlIGJpdCBvZiB0aGUgd29yZCBiZWluZyB3YWl0ZWQgb24KKyAqIEBtb2RlOiB0aGUgdGFzayBzdGF0ZSB0byBzbGVlcCBpbgorICogQHRpbWVvdXQ6IHRpbWVvdXQsIGluIGppZmZpZXMKKyAqCisgKiBVc2UgdGhlIHN0YW5kYXJkIGhhc2hlZCB3YWl0cXVldWUgdGFibGUgdG8gd2FpdCBmb3IgYSBiaXQKKyAqIHRvIGJlIGNsZWFyZWQuIFRoaXMgaXMgc2ltaWxhciB0byB3YWl0X29uX2JpdCgpLCBleGNlcHQgYWxzbyB0YWtlcyBhCisgKiB0aW1lb3V0IHBhcmFtZXRlci4KKyAqCisgKiBSZXR1cm5lZCB2YWx1ZSB3aWxsIGJlIHplcm8gaWYgdGhlIGJpdCB3YXMgY2xlYXJlZCBiZWZvcmUgdGhlCisgKiBAdGltZW91dCBlbGFwc2VkLCBvciBub24temVybyBpZiB0aGUgQHRpbWVvdXQgZWxhcHNlZCBvciBwcm9jZXNzCisgKiByZWNlaXZlZCBhIHNpZ25hbCBhbmQgdGhlIG1vZGUgcGVybWl0dGVkIHdha2V1cCBvbiB0aGF0IHNpZ25hbC4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3dhaXRfb25fYml0X3RpbWVvdXQodm9pZCAqd29yZCwgaW50IGJpdCwgdW5zaWduZWQgbW9kZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQoreworCW1pZ2h0X3NsZWVwKCk7CisJaWYgKCF0ZXN0X2JpdChiaXQsIHdvcmQpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gb3V0X29mX2xpbmVfd2FpdF9vbl9iaXRfdGltZW91dCh3b3JkLCBiaXQsCisJCQkJCSAgICAgICBiaXRfd2FpdF90aW1lb3V0LAorCQkJCQkgICAgICAgbW9kZSwgdGltZW91dCk7Cit9CisKKy8qKgogICogd2FpdF9vbl9iaXRfYWN0aW9uIC0gd2FpdCBmb3IgYSBiaXQgdG8gYmUgY2xlYXJlZAogICogQHdvcmQ6IHRoZSB3b3JkIGJlaW5nIHdhaXRlZCBvbiwgYSBrZXJuZWwgdmlydHVhbCBhZGRyZXNzCiAgKiBAYml0OiB0aGUgYml0IG9mIHRoZSB3b3JkIGJlaW5nIHdhaXRlZCBvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaCBiL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKaW5kZXggYjk5NmU2Y2QuLjc0ZGIxMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtMjIwLDE0ICsyMjAsMTAgQEAKICNlbmRpZgogCiAjZGVmaW5lIElOSVRfV09SSyhfd29yaywgX2Z1bmMpCQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJX19JTklUX1dPUksoKF93b3JrKSwgKF9mdW5jKSwgMCk7CQkJXAotCX0gd2hpbGUgKDApCisJX19JTklUX1dPUksoKF93b3JrKSwgKF9mdW5jKSwgMCkKIAogI2RlZmluZSBJTklUX1dPUktfT05TVEFDSyhfd29yaywgX2Z1bmMpCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlfX0lOSVRfV09SSygoX3dvcmspLCAoX2Z1bmMpLCAxKTsJCQlcCi0JfSB3aGlsZSAoMCkKKwlfX0lOSVRfV09SSygoX3dvcmspLCAoX2Z1bmMpLCAxKQogCiAjZGVmaW5lIF9fSU5JVF9ERUxBWUVEX1dPUksoX3dvcmssIF9mdW5jLCBfdGZsYWdzKQkJCVwKIAlkbyB7CQkJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NtaWFwcC5oIGIvaW5jbHVkZS9tZWRpYS9zbWlhcHAuaAppbmRleCAwYjhmMTI0Li4yNjhhM2NkIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3NtaWFwcC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc21pYXBwLmgKQEAgLTY1LDE5ICs2NSwxOSBAQAogCXVuc2lnbmVkIHNob3J0IGkyY19hZGRyX2RmbDsJLyogRGVmYXVsdCBpMmMgYWRkciAqLwogCXVuc2lnbmVkIHNob3J0IGkyY19hZGRyX2FsdDsJLyogQWx0ZXJuYXRlIGkyYyBhZGRyICovCiAKLQl1bnNpZ25lZCBpbnQgbnZtX3NpemU7CQkJLyogYnl0ZXMgKi8KLQl1bnNpZ25lZCBpbnQgZXh0X2NsazsJCQkvKiBzZW5zb3IgZXh0ZXJuYWwgY2xrICovCisJdWludDMyX3QgbnZtX3NpemU7CQkvKiBieXRlcyAqLworCXVpbnQzMl90IGV4dF9jbGs7CQkvKiBzZW5zb3IgZXh0ZXJuYWwgY2xrICovCiAKIAl1bnNpZ25lZCBpbnQgbGFuZXM7CQkvKiBOdW1iZXIgb2YgQ1NJLTIgbGFuZXMgKi8KLQl1OCBjc2lfc2lnbmFsbGluZ19tb2RlOwkJLyogU01JQVBQX0NTSV9TSUdOQUxMSU5HX01PREVfKiAqLwotCWNvbnN0IHM2NCAqb3Bfc3lzX2Nsb2NrOworCXVpbnQzMl90IGNzaV9zaWduYWxsaW5nX21vZGU7CS8qIFNNSUFQUF9DU0lfU0lHTkFMTElOR19NT0RFXyogKi8KKwl1aW50NjRfdCAqb3Bfc3lzX2Nsb2NrOwogCiAJZW51bSBzbWlhcHBfbW9kdWxlX2JvYXJkX29yaWVudCBtb2R1bGVfYm9hcmRfb3JpZW50OwogCiAJc3RydWN0IHNtaWFwcF9mbGFzaF9zdHJvYmVfcGFybXMgKnN0cm9iZV9zZXR1cDsKIAogCWludCAoKnNldF94Y2xrKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgaHopOwotCWludCB4c2h1dGRvd247CQkJLyogZ3BpbyBvciBTTUlBUFBfTk9fWFNIVVRET1dOICovCisJaW50MzJfdCB4c2h1dGRvd247CQkvKiBncGlvIG9yIFNNSUFQUF9OT19YU0hVVERPV04gKi8KIH07CiAKICNlbmRpZiAvKiBfX1NNSUFQUF9IXyAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdGVhNTc1eC5oIGIvaW5jbHVkZS9tZWRpYS90ZWE1NzV4LmgKaW5kZXggMmQ0ZmE1OS4uNWQwOTY1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS90ZWE1NzV4LmgKKysrIGIvaW5jbHVkZS9tZWRpYS90ZWE1NzV4LmgKQEAgLTcxLDYgKzcxLDExIEBACiAJaW50ICgqZXh0X2luaXQpKHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhKTsKIH07CiAKK2ludCBzbmRfdGVhNTc1eF9lbnVtX2ZyZXFfYmFuZHMoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEsCisJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeV9iYW5kICpiYW5kKTsKK2ludCBzbmRfdGVhNTc1eF9nX3R1bmVyKHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhLCBzdHJ1Y3QgdjRsMl90dW5lciAqdik7CitpbnQgc25kX3RlYTU3NXhfc19od19mcmVxX3NlZWsoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhLAorCQkJCWNvbnN0IHN0cnVjdCB2NGwyX2h3X2ZyZXFfc2VlayAqYSk7CiBpbnQgc25kX3RlYTU3NXhfaHdfaW5pdChzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSk7CiBpbnQgc25kX3RlYTU3NXhfaW5pdChzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSwgc3RydWN0IG1vZHVsZSAqb3duZXIpOwogdm9pZCBzbmRfdGVhNTc1eF9leGl0KHN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAppbmRleCBlYjc2Y2ZkLi4zZTRmZGRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCkBAIC0xMjQsNyArMTI0LDggQEAKIAlzcGlubG9ja190CQlmaF9sb2NrOyAvKiBMb2NrIGZvciBhbGwgdjRsMl9maHMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWZoX2xpc3Q7IC8qIExpc3Qgb2Ygc3RydWN0IHY0bDJfZmggKi8KIAotCWludCBkZWJ1ZzsJCQkvKiBBY3RpdmF0ZXMgZGVidWcgbGV2ZWwqLworCS8qIEludGVybmFsIGRldmljZSBkZWJ1ZyBmbGFncywgbm90IGZvciB1c2UgYnkgZHJpdmVycyAqLworCWludCBkZXZfZGVidWc7CiAKIAkvKiBWaWRlbyBzdGFuZGFyZCB2YXJzICovCiAJdjRsMl9zdGRfaWQgdHZub3JtczsJCS8qIFN1cHBvcnRlZCB0diBub3JtcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWlvY3RsLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaAppbmRleCA1MzYwNWYwLi44NTM3OTgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaApAQCAtMjkxLDkgKzI5MSwxOCBAQAogCiAvKiB2NGwgZGVidWdnaW5nIGFuZCBkaWFnbm9zdGljcyAqLwogCi0vKiBEZWJ1ZyBiaXRtYXNrIGZsYWdzIHRvIGJlIHVzZWQgb24gVjRMMiAqLwotI2RlZmluZSBWNEwyX0RFQlVHX0lPQ1RMICAgICAweDAxCi0jZGVmaW5lIFY0TDJfREVCVUdfSU9DVExfQVJHIDB4MDIKKy8qIERldmljZSBkZWJ1ZyBmbGFncyB0byBiZSB1c2VkIHdpdGggdGhlIHZpZGVvIGRldmljZSBkZWJ1ZyBhdHRyaWJ1dGUgKi8KKworLyogSnVzdCBsb2cgdGhlIGlvY3RsIG5hbWUgKyBlcnJvciBjb2RlICovCisjZGVmaW5lIFY0TDJfREVWX0RFQlVHX0lPQ1RMCQkweDAxCisvKiBMb2cgdGhlIGlvY3RsIG5hbWUgYXJndW1lbnRzICsgZXJyb3IgY29kZSAqLworI2RlZmluZSBWNEwyX0RFVl9ERUJVR19JT0NUTF9BUkcJMHgwMgorLyogTG9nIHRoZSBmaWxlIG9wZXJhdGlvbnMgb3BlbiwgcmVsZWFzZSwgbW1hcCBhbmQgZ2V0X3VubWFwcGVkX2FyZWEgKi8KKyNkZWZpbmUgVjRMMl9ERVZfREVCVUdfRk9QCQkweDA0CisvKiBMb2cgdGhlIHJlYWQgYW5kIHdyaXRlIGZpbGUgb3BlcmF0aW9ucyBhbmQgdGhlIFZJRElPQ18oRClRQlVGIGlvY3RscyAqLworI2RlZmluZSBWNEwyX0RFVl9ERUJVR19TVFJFQU1JTkcJMHgwOAorLyogTG9nIHBvbGwoKSAqLworI2RlZmluZSBWNEwyX0RFVl9ERUJVR19QT0xMCQkweDEwCiAKIC8qICBWaWRlbyBzdGFuZGFyZCBmdW5jdGlvbnMgICovCiBleHRlcm4gY29uc3QgY2hhciAqdjRsMl9ub3JtX3RvX25hbWUodjRsMl9zdGRfaWQgaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCmluZGV4IDU4NjAyOTIuLjViZWViODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKQEAgLTM0Miw4ICszNDIsNiBAQAogCQkJc3RydWN0IHY0bDJfZHZfdGltaW5ncyAqdGltaW5ncyk7CiAJaW50ICgqZW51bV9tYnVzX2ZtdCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgaW50IGluZGV4LAogCQkJICAgICB1MzIgKmNvZGUpOwotCWludCAoKmVudW1fbWJ1c19mc2l6ZXMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCi0JCQkgICAgIHN0cnVjdCB2NGwyX2ZybXNpemVlbnVtICpmc2l6ZSk7CiAJaW50ICgqZ19tYnVzX2ZtdCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJCSAgc3RydWN0IHY0bDJfbWJ1c19mcmFtZWZtdCAqZm10KTsKIAlpbnQgKCp0cnlfbWJ1c19mbXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCkBAIC01MDMsMTAgKzUwMSw2IEBACiAJCSAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmb3JtYXQpOwogCWludCAoKnNldF9mbXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCiAJCSAgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0ICpmb3JtYXQpOwotCWludCAoKnNldF9jcm9wKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdWJkZXZfZmggKmZoLAotCQkgICAgICAgc3RydWN0IHY0bDJfc3ViZGV2X2Nyb3AgKmNyb3ApOwotCWludCAoKmdldF9jcm9wKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdWJkZXZfZmggKmZoLAotCQkgICAgICAgc3RydWN0IHY0bDJfc3ViZGV2X2Nyb3AgKmNyb3ApOwogCWludCAoKmdldF9zZWxlY3Rpb24pKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3N1YmRldl9maCAqZmgsCiAJCQkgICAgIHN0cnVjdCB2NGwyX3N1YmRldl9zZWxlY3Rpb24gKnNlbCk7CiAJaW50ICgqc2V0X3NlbGVjdGlvbikoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3ViZGV2X2ZoICpmaCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtZG1hLXNnLmggYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oCmluZGV4IGZiNmZkNGQ4Li5kOGIyNzg1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kbWEtc2cuaAorKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oCkBAIC04NCwxNiArODQsOCBAQAogICogRGVzcGl0ZSB0aGUgbmFtZSwgdGhpcyBpcyB0b3RhbGx5IHVucmVsYXRlZCB0byB2aWRlb2J1ZiwgZXhjZXB0IHRoYXQKICAqIHZpZGVvYnVmLWRtYS1zZyB1c2VzIHRoZSBzYW1lIEFQSSBpbnRlcm5hbGx5LgogICovCi12b2lkIHZpZGVvYnVmX2RtYV9pbml0KHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSk7Ci1pbnQgdmlkZW9idWZfZG1hX2luaXRfdXNlcihzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEsIGludCBkaXJlY3Rpb24sCi0JCQkgICB1bnNpZ25lZCBsb25nIGRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci1pbnQgdmlkZW9idWZfZG1hX2luaXRfa2VybmVsKHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSwgaW50IGRpcmVjdGlvbiwKLQkJCSAgICAgaW50IG5yX3BhZ2VzKTsKLWludCB2aWRlb2J1Zl9kbWFfaW5pdF9vdmVybGF5KHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSwgaW50IGRpcmVjdGlvbiwKLQkJCSAgICAgIGRtYV9hZGRyX3QgYWRkciwgaW50IG5yX3BhZ2VzKTsKIGludCB2aWRlb2J1Zl9kbWFfZnJlZShzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICpkbWEpOwogCi1pbnQgdmlkZW9idWZfZG1hX21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKmRtYSk7CiBpbnQgdmlkZW9idWZfZG1hX3VubWFwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHZpZGVvYnVmX2RtYWJ1ZiAqZG1hKTsKIHN0cnVjdCB2aWRlb2J1Zl9kbWFidWYgKnZpZGVvYnVmX3RvX2RtYShzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICpidWYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWR2Yi5oIGIvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1kdmIuaAppbmRleCBkNjM5NjVhLi5jM2JmYTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWR2Yi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdmlkZW9idWYtZHZiLmgKQEAgLTU2LDkgKzU2LDMgQEAKIGludCB2aWRlb2J1Zl9kdmJfZmluZF9mcm9udGVuZChzdHJ1Y3QgdmlkZW9idWZfZHZiX2Zyb250ZW5kcyAqZiwgc3RydWN0IGR2Yl9mcm9udGVuZCAqcCk7CiAKICNlbmRpZgkJCS8qIF9WSURFT0JVRl9EVkJfSF8gKi8KLQotLyoKLSAqIExvY2FsIHZhcmlhYmxlczoKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmggYi9pbmNsdWRlL25ldC9hZGRyY29uZi5oCmluZGV4IGQxMzU3M2IuLjgwNDU2ZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKKysrIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaApAQCAtNjIsNiArNjIsOSBAQAogCiBpbnQgaXB2Nl9jaGtfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RyaWN0KTsKK2ludCBpcHY2X2Noa19hZGRyX2FuZF9mbGFncyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RyaWN0LAorCQkJICAgIHUzMiBiYW5uZWRfZmxhZ3MpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNl9NSVA2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01JUDZfTU9EVUxFKQogaW50IGlwdjZfY2hrX2hvbWVfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmgKaW5kZXggNTg2OTVmZi4uZTAwNDU1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9ibHVldG9vdGguaApAQCAtMjczLDcgKzI3Myw3IEBACiAKIHN0cnVjdCBoY2lfZGV2OwogCi10eXBlZGVmIHZvaWQgKCpoY2lfcmVxX2NvbXBsZXRlX3QpKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMpOwordHlwZWRlZiB2b2lkICgqaGNpX3JlcV9jb21wbGV0ZV90KShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzLCB1MTYgb3Bjb2RlKTsKIAogc3RydWN0IGhjaV9yZXFfY3RybCB7CiAJYm9vbAkJCXN0YXJ0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCmluZGV4IDQwMTI5YjMuLjhlNTRmODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKQEAgLTEwMiw2ICsxMDIsMjggQEAKIAkgKi8KIAlIQ0lfUVVJUktfRklYVVBfQlVGRkVSX1NJWkUsCiAKKwkvKiBXaGVuIHRoaXMgcXVpcmsgaXMgc2V0LCB0aGVuIGEgY29udHJvbGxlciB0aGF0IGRvZXMgbm90CisJICogaW5kaWNhdGUgc3VwcG9ydCBmb3IgSW5xdWlyeSBSZXN1bHQgd2l0aCBSU1NJIGlzIGFzc3VtZWQgdG8KKwkgKiBzdXBwb3J0IGl0IGFueXdheS4gU29tZSBlYXJseSBCbHVldG9vdGggMS4yIGNvbnRyb2xsZXJzIGhhZAorCSAqIHdyb25nbHkgY29uZmlndXJlZCBsb2NhbCBmZWF0dXJlcyB0aGF0IHdpbGwgcmVxdWlyZSBmb3JjaW5nCisJICogdGhlbSB0byBlbmFibGUgdGhpcyBtb2RlLiBHZXR0aW5nIFJTU0kgaW5mb3JtYXRpb24gd2l0aCB0aGUKKwkgKiBpbnF1aXJ5IHJlc3BvbnNlcyBpcyBwcmVmZXJyZWQgc2luY2UgaXQgYWxsb3dzIGZvciBhIGJldHRlcgorCSAqIHVzZXIgZXhwaWVyZW5jZS4KKwkgKgorCSAqIFRoaXMgcXVpcmsgbXVzdCBiZSBzZXQgYmVmb3JlIGhjaV9yZWdpc3Rlcl9kZXYgaXMgY2FsbGVkLgorCSAqLworCUhDSV9RVUlSS19GSVhVUF9JTlFVSVJZX01PREUsCisKKwkvKiBXaGVuIHRoaXMgcXVpcmsgaXMgc2V0LCB0aGVuIHRoZSBIQ0kgUmVhZCBMb2NhbCBTdXBwb3J0ZWQKKwkgKiBDb21tYW5kcyBjb21tYW5kIGlzIG5vdCBzdXBwb3J0ZWQuIEluIGdlbmVyYWwgQmx1ZXRvb3RoIDEuMgorCSAqIGFuZCBsYXRlciBjb250cm9sbGVycyBzaG91bGQgc3VwcG9ydCB0aGlzIGNvbW1hbmQuIEhvd2V2ZXIKKwkgKiBzb21lIGNvbnRyb2xsZXJzIGluZGljYXRlIEJsdWV0b290aCAxLjIgc3VwcG9ydCwgYnV0IGRvCisJICogbm90IHN1cHBvcnQgdGhpcyBjb21tYW5kLgorCSAqCisJICogVGhpcyBxdWlyayBtdXN0IGJlIHNldCBiZWZvcmUgaGNpX3JlZ2lzdGVyX2RldiBpcyBjYWxsZWQuCisJICovCisJSENJX1FVSVJLX0JST0tFTl9MT0NBTF9DT01NQU5EUywKKwogCS8qIFdoZW4gdGhpcyBxdWlyayBpcyBzZXQsIHRoZW4gbm8gc3RvcmVkIGxpbmsga2V5IGhhbmRsaW5nCiAJICogaXMgcGVyZm9ybWVkLiBUaGlzIGlzIG1haW5seSBkdWUgdG8gdGhlIGZhY3QgdGhhdCB0aGUKIAkgKiBIQ0kgRGVsZXRlIFN0b3JlZCBMaW5rIEtleSBjb21tYW5kIGlzIGFkdmVydGlzZWQsIGJ1dApAQCAtMTYyLDggKzE4NCw3IEBACiAgKi8KIGVudW0gewogCUhDSV9EVVRfTU9ERSwKLQlIQ0lfRk9SQ0VfU0MsCi0JSENJX0ZPUkNFX0xFU0MsCisJSENJX0ZPUkNFX0JSRURSX1NNUCwKIAlIQ0lfRk9SQ0VfU1RBVElDX0FERFIsCiB9OwogCkBAIC0zNDMsNiArMzY0LDcgQEAKICNkZWZpbmUgSENJX0xFX0VOQ1JZUFRJT04JCTB4MDEKICNkZWZpbmUgSENJX0xFX0NPTk5fUEFSQU1fUkVRX1BST0MJMHgwMgogI2RlZmluZSBIQ0lfTEVfUElORwkJCTB4MTAKKyNkZWZpbmUgSENJX0xFX0RBVEFfTEVOX0VYVAkJMHgyMAogI2RlZmluZSBIQ0lfTEVfRVhUX1NDQU5fUE9MSUNZCQkweDgwCiAKIC8qIENvbm5lY3Rpb24gbW9kZXMgKi8KQEAgLTgzMywxMSArODU1LDI2IEBACiAjZGVmaW5lIEhDSV9DT05OX1NFVFVQX0FVVE9fT0ZGCTB4MDEKICNkZWZpbmUgSENJX0NPTk5fU0VUVVBfQVVUT19PTgkweDAyCiAKKyNkZWZpbmUgSENJX09QX1JFQURfU1RPUkVEX0xJTktfS0VZCTB4MGMwZAorc3RydWN0IGhjaV9jcF9yZWFkX3N0b3JlZF9saW5rX2tleSB7CisJYmRhZGRyX3QgYmRhZGRyOworCV9fdTggICAgIHJlYWRfYWxsOworfSBfX3BhY2tlZDsKK3N0cnVjdCBoY2lfcnBfcmVhZF9zdG9yZWRfbGlua19rZXkgeworCV9fdTggICAgIHN0YXR1czsKKwlfX3U4ICAgICBtYXhfa2V5czsKKwlfX3U4ICAgICBudW1fa2V5czsKK30gX19wYWNrZWQ7CisKICNkZWZpbmUgSENJX09QX0RFTEVURV9TVE9SRURfTElOS19LRVkJMHgwYzEyCiBzdHJ1Y3QgaGNpX2NwX2RlbGV0ZV9zdG9yZWRfbGlua19rZXkgewogCWJkYWRkcl90IGJkYWRkcjsKIAlfX3U4ICAgICBkZWxldGVfYWxsOwogfSBfX3BhY2tlZDsKK3N0cnVjdCBoY2lfcnBfZGVsZXRlX3N0b3JlZF9saW5rX2tleSB7CisJX191OCAgICAgc3RhdHVzOworCV9fdTggICAgIG51bV9rZXlzOworfSBfX3BhY2tlZDsKIAogI2RlZmluZSBIQ0lfTUFYX05BTUVfTEVOR1RICQkyNDgKIApAQCAtMTM3MSw2ICsxNDA4LDM5IEBACiAJX191OAlyZWFzb247CiB9IF9fcGFja2VkOwogCisjZGVmaW5lIEhDSV9PUF9MRV9TRVRfREFUQV9MRU4JCTB4MjAyMgorc3RydWN0IGhjaV9jcF9sZV9zZXRfZGF0YV9sZW4geworCV9fbGUxNgloYW5kbGU7CisJX19sZTE2CXR4X2xlbjsKKwlfX2xlMTYJdHhfdGltZTsKK30gX19wYWNrZWQ7CitzdHJ1Y3QgaGNpX3JwX2xlX3NldF9kYXRhX2xlbiB7CisJX191OAlzdGF0dXM7CisJX19sZTE2CWhhbmRsZTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgSENJX09QX0xFX1JFQURfREVGX0RBVEFfTEVOCTB4MjAyMworc3RydWN0IGhjaV9ycF9sZV9yZWFkX2RlZl9kYXRhX2xlbiB7CisJX191OAlzdGF0dXM7CisJX19sZTE2CXR4X2xlbjsKKwlfX2xlMTYJdHhfdGltZTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgSENJX09QX0xFX1dSSVRFX0RFRl9EQVRBX0xFTgkweDIwMjQKK3N0cnVjdCBoY2lfY3BfbGVfd3JpdGVfZGVmX2RhdGFfbGVuIHsKKwlfX2xlMTYJdHhfbGVuOworCV9fbGUxNgl0eF90aW1lOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBIQ0lfT1BfTEVfUkVBRF9NQVhfREFUQV9MRU4JMHgyMDJmCitzdHJ1Y3QgaGNpX3JwX2xlX3JlYWRfbWF4X2RhdGFfbGVuIHsKKwlfX3U4CXN0YXR1czsKKwlfX2xlMTYJdHhfbGVuOworCV9fbGUxNgl0eF90aW1lOworCV9fbGUxNglyeF9sZW47CisJX19sZTE2CXJ4X3RpbWU7Cit9IF9fcGFja2VkOworCiAvKiAtLS0tIEhDSSBFdmVudHMgLS0tLSAqLwogI2RlZmluZSBIQ0lfRVZfSU5RVUlSWV9DT01QTEVURQkJMHgwMQogCkBAIC0xNzk2LDYgKzE4NjYsMTUgQEAKIAlfX2xlMTYgdGltZW91dDsKIH0gX19wYWNrZWQ7CiAKKyNkZWZpbmUgSENJX0VWX0xFX0RBVEFfTEVOX0NIQU5HRQkweDA3CitzdHJ1Y3QgaGNpX2V2X2xlX2RhdGFfbGVuX2NoYW5nZSB7CisJX19sZTE2CWhhbmRsZTsKKwlfX2xlMTYJdHhfbGVuOworCV9fbGUxNgl0eF90aW1lOworCV9fbGUxNglyeF9sZW47CisJX19sZTE2CXJ4X3RpbWU7Cit9IF9fcGFja2VkOworCiAjZGVmaW5lIEhDSV9FVl9MRV9ESVJFQ1RfQURWX1JFUE9SVAkweDBCCiBzdHJ1Y3QgaGNpX2V2X2xlX2RpcmVjdF9hZHZfaW5mbyB7CiAJX191OAkgZXZ0X3R5cGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IDNjNzgyNzAuLjUyODYzYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC03OSw2ICs3OSw4IEBACiAJczgJCQlyc3NpOwogCXUxNgkJCXV1aWRfY291bnQ7CiAJdTgJCQkoKnV1aWRzKVsxNl07CisJdW5zaWduZWQgbG9uZwkJc2Nhbl9zdGFydDsKKwl1bnNpZ25lZCBsb25nCQlzY2FuX2R1cmF0aW9uOwogfTsKIAogc3RydWN0IGhjaV9jb25uX2hhc2ggewpAQCAtMTQ1LDYgKzE0Nyw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWJkYWRkcl90IGJkYWRkcjsKIAl1OCBiZGFkZHJfdHlwZTsKKwl1OCBwcmVzZW50OwogCXU4IGhhc2gxOTJbMTZdOwogCXU4IHJhbmQxOTJbMTZdOwogCXU4IGhhc2gyNTZbMTZdOwpAQCAtMjA1LDYgKzIwOCw4IEBACiAJX191MTYJCWxtcF9zdWJ2ZXI7CiAJX191MTYJCXZvaWNlX3NldHRpbmc7CiAJX191OAkJbnVtX2lhYzsKKwlfX3U4CQlzdG9yZWRfbWF4X2tleXM7CisJX191OAkJc3RvcmVkX251bV9rZXlzOwogCV9fdTgJCWlvX2NhcGFiaWxpdHk7CiAJX19zOAkJaW5xX3R4X3Bvd2VyOwogCV9fdTE2CQlwYWdlX3NjYW5faW50ZXJ2YWw7CkBAIC0yMjAsMTAgKzIyNSwxNyBAQAogCV9fdTE2CQlsZV9jb25uX21heF9pbnRlcnZhbDsKIAlfX3UxNgkJbGVfY29ubl9sYXRlbmN5OwogCV9fdTE2CQlsZV9zdXB2X3RpbWVvdXQ7CisJX191MTYJCWxlX2RlZl90eF9sZW47CisJX191MTYJCWxlX2RlZl90eF90aW1lOworCV9fdTE2CQlsZV9tYXhfdHhfbGVuOworCV9fdTE2CQlsZV9tYXhfdHhfdGltZTsKKwlfX3UxNgkJbGVfbWF4X3J4X2xlbjsKKwlfX3UxNgkJbGVfbWF4X3J4X3RpbWU7CiAJX191MTYJCWRpc2Nvdl9pbnRlcmxlYXZlZF90aW1lb3V0OwogCV9fdTE2CQljb25uX2luZm9fbWluX2FnZTsKIAlfX3UxNgkJY29ubl9pbmZvX21heF9hZ2U7CiAJX191OAkJc3NwX2RlYnVnX21vZGU7CisJX191OAkJaHdfZXJyb3JfY29kZTsKIAlfX3UzMgkJY2xvY2s7CiAKIAlfX3UxNgkJZGV2aWRfc291cmNlOwpAQCAtMjg1LDYgKzI5Nyw3IEBACiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJcG93ZXJfb247CiAJc3RydWN0IGRlbGF5ZWRfd29yawlwb3dlcl9vZmY7CisJc3RydWN0IHdvcmtfc3RydWN0CWVycm9yX3Jlc2V0OwogCiAJX191MTYJCQlkaXNjb3ZfdGltZW91dDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCWRpc2Nvdl9vZmY7CkBAIC0zNDMsNiArMzU2LDcgQEAKIAl1bnNpZ25lZCBsb25nCQlkZXZfZmxhZ3M7CiAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCWxlX3NjYW5fZGlzYWJsZTsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWxlX3NjYW5fcmVzdGFydDsKIAogCV9fczgJCQlhZHZfdHhfcG93ZXI7CiAJX191OAkJCWFkdl9kYXRhW0hDSV9NQVhfQURfTEVOR1RIXTsKQEAgLTM2MSw2ICszNzUsNyBAQAogCWludCAoKnNldHVwKShzdHJ1Y3QgaGNpX2RldiAqaGRldik7CiAJaW50ICgqc2VuZCkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogCXZvaWQgKCpub3RpZnkpKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1bnNpZ25lZCBpbnQgZXZ0KTsKKwl2b2lkICgqaHdfZXJyb3IpKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBjb2RlKTsKIAlpbnQgKCpzZXRfYmRhZGRyKShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgY29uc3QgYmRhZGRyX3QgKmJkYWRkcik7CiB9OwogCkBAIC00MzQsNiArNDQ5LDcgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGxlX2Nvbm5fdGltZW91dDsKIAogCXN0cnVjdCBkZXZpY2UJZGV2OworCXN0cnVjdCBkZW50cnkJKmRlYnVnZnM7CiAKIAlzdHJ1Y3QgaGNpX2RldgkqaGRldjsKIAl2b2lkCQkqbDJjYXBfZGF0YTsKQEAgLTUxOCw2ICs1MzQsOCBAQAogCWhkZXYtPmRpc2NvdmVyeS51dWlkX2NvdW50ID0gMDsKIAlrZnJlZShoZGV2LT5kaXNjb3ZlcnkudXVpZHMpOwogCWhkZXYtPmRpc2NvdmVyeS51dWlkcyA9IE5VTEw7CisJaGRldi0+ZGlzY292ZXJ5LnNjYW5fc3RhcnQgPSAwOworCWhkZXYtPmRpc2NvdmVyeS5zY2FuX2R1cmF0aW9uID0gMDsKIH0KIAogYm9vbCBoY2lfZGlzY292ZXJ5X2FjdGl2ZShzdHJ1Y3QgaGNpX2RldiAqaGRldik7CkBAIC03NzIsNyArNzkwLDYgQEAKIGludCBoY2lfY29ubl9jaGVja19zZWN1cmUoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHNlY19sZXZlbCk7CiBpbnQgaGNpX2Nvbm5fc2VjdXJpdHkoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IHNlY19sZXZlbCwgX191OCBhdXRoX3R5cGUsCiAJCSAgICAgIGJvb2wgaW5pdGlhdG9yKTsKLWludCBoY2lfY29ubl9jaGFuZ2VfbGlua19rZXkoc3RydWN0IGhjaV9jb25uICpjb25uKTsKIGludCBoY2lfY29ubl9zd2l0Y2hfcm9sZShzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTggcm9sZSk7CiAKIHZvaWQgaGNpX2Nvbm5fZW50ZXJfYWN0aXZlX21vZGUoc3RydWN0IGhjaV9jb25uICpjb25uLCBfX3U4IGZvcmNlX2FjdGl2ZSk7CkBAIC05MjAsOCArOTM3LDYgQEAKIAkJCQkJICAgICAgIGJkYWRkcl90ICphZGRyLCB1OCBhZGRyX3R5cGUpOwogc3RydWN0IGhjaV9jb25uX3BhcmFtcyAqaGNpX2Nvbm5fcGFyYW1zX2FkZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwKIAkJCQkJICAgIGJkYWRkcl90ICphZGRyLCB1OCBhZGRyX3R5cGUpOwotaW50IGhjaV9jb25uX3BhcmFtc19zZXQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICphZGRyLCB1OCBhZGRyX3R5cGUsCi0JCQl1OCBhdXRvX2Nvbm5lY3QpOwogdm9pZCBoY2lfY29ubl9wYXJhbXNfZGVsKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYWRkciwgdTggYWRkcl90eXBlKTsKIHZvaWQgaGNpX2Nvbm5fcGFyYW1zX2NsZWFyX2FsbChzdHJ1Y3QgaGNpX2RldiAqaGRldik7CiB2b2lkIGhjaV9jb25uX3BhcmFtc19jbGVhcl9kaXNhYmxlZChzdHJ1Y3QgaGNpX2RldiAqaGRldik7CkBAIC05MzAsOCArOTQ1LDYgQEAKIAkJCQkJCSAgYmRhZGRyX3QgKmFkZHIsCiAJCQkJCQkgIHU4IGFkZHJfdHlwZSk7CiAKLXZvaWQgaGNpX3VwZGF0ZV9iYWNrZ3JvdW5kX3NjYW4oc3RydWN0IGhjaV9kZXYgKmhkZXYpOwotCiB2b2lkIGhjaV91dWlkc19jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldik7CiAKIHZvaWQgaGNpX2xpbmtfa2V5c19jbGVhcihzdHJ1Y3QgaGNpX2RldiAqaGRldik7CkBAIC0xMDE0LDggKzEwMjcsNyBAQAogCiAjZGVmaW5lIGhkZXZfaXNfcG93ZXJlZChoZGV2KSAodGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpICYmIFwKIAkJCQkhdGVzdF9iaXQoSENJX0FVVE9fT0ZGLCAmaGRldi0+ZGV2X2ZsYWdzKSkKLSNkZWZpbmUgYnJlZHJfc2NfZW5hYmxlZChkZXYpICgobG1wX3NjX2NhcGFibGUoZGV2KSB8fCBcCi0JCQkJdGVzdF9iaXQoSENJX0ZPUkNFX1NDLCAmKGRldiktPmRiZ19mbGFncykpICYmIFwKKyNkZWZpbmUgYnJlZHJfc2NfZW5hYmxlZChkZXYpIChsbXBfc2NfY2FwYWJsZShkZXYpICYmIFwKIAkJCSAgICAgICB0ZXN0X2JpdChIQ0lfU0NfRU5BQkxFRCwgJihkZXYpLT5kZXZfZmxhZ3MpKQogCiAvKiAtLS0tLSBIQ0kgcHJvdG9jb2xzIC0tLS0tICovCkBAIC0xMjg0LDMwICsxMjk2LDggQEAKIGludCBoY2lfcmVnaXN0ZXJfY2Ioc3RydWN0IGhjaV9jYiAqaGNiKTsKIGludCBoY2lfdW5yZWdpc3Rlcl9jYihzdHJ1Y3QgaGNpX2NiICpoY2IpOwogCi1zdHJ1Y3QgaGNpX3JlcXVlc3QgewotCXN0cnVjdCBoY2lfZGV2CQkqaGRldjsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCWNtZF9xOwotCi0JLyogSWYgc29tZXRoaW5nIGdvZXMgd3Jvbmcgd2hlbiBidWlsZGluZyB0aGUgSENJIHJlcXVlc3QsIHRoZSBlcnJvcgotCSAqIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGlzIGZpZWxkLgotCSAqLwotCWludAkJCWVycjsKLX07Ci0KLXZvaWQgaGNpX3JlcV9pbml0KHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgaGNpX2RldiAqaGRldik7Ci1pbnQgaGNpX3JlcV9ydW4oc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEsIGhjaV9yZXFfY29tcGxldGVfdCBjb21wbGV0ZSk7Ci12b2lkIGhjaV9yZXFfYWRkKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxLCB1MTYgb3Bjb2RlLCB1MzIgcGxlbiwKLQkJIGNvbnN0IHZvaWQgKnBhcmFtKTsKLXZvaWQgaGNpX3JlcV9hZGRfZXYoc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEsIHUxNiBvcGNvZGUsIHUzMiBwbGVuLAotCQkgICAgY29uc3Qgdm9pZCAqcGFyYW0sIHU4IGV2ZW50KTsKLXZvaWQgaGNpX3JlcV9jbWRfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHUxNiBvcGNvZGUsIHU4IHN0YXR1cyk7CiBib29sIGhjaV9yZXFfcGVuZGluZyhzdHJ1Y3QgaGNpX2RldiAqaGRldik7CiAKLXZvaWQgaGNpX3JlcV9hZGRfbGVfc2Nhbl9kaXNhYmxlKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxKTsKLXZvaWQgaGNpX3JlcV9hZGRfbGVfcGFzc2l2ZV9zY2FuKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxKTsKLQotdm9pZCBoY2lfdXBkYXRlX3BhZ2Vfc2NhbihzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEpOwotCiBzdHJ1Y3Qgc2tfYnVmZiAqX19oY2lfY21kX3N5bmMoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHUxNiBvcGNvZGUsIHUzMiBwbGVuLAogCQkJICAgICAgIGNvbnN0IHZvaWQgKnBhcmFtLCB1MzIgdGltZW91dCk7CiBzdHJ1Y3Qgc2tfYnVmZiAqX19oY2lfY21kX3N5bmNfZXYoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHUxNiBvcGNvZGUsIHUzMiBwbGVuLApAQCAtMTM0NCw2ICsxMzM0LDcgQEAKICNkZWZpbmUgRElTQ09WX0lOVEVSTEVBVkVEX1RJTUVPVVQJNTEyMAkvKiBtc2VjICovCiAjZGVmaW5lIERJU0NPVl9JTlRFUkxFQVZFRF9JTlFVSVJZX0xFTgkweDA0CiAjZGVmaW5lIERJU0NPVl9CUkVEUl9JTlFVSVJZX0xFTgkweDA4CisjZGVmaW5lIERJU0NPVl9MRV9SRVNUQVJUX0RFTEFZCQltc2Vjc190b19qaWZmaWVzKDIwMCkJLyogbXNlYyAqLwogCiBpbnQgbWdtdF9jb250cm9sKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuKTsKIGludCBtZ210X25ld19zZXR0aW5ncyhzdHJ1Y3QgaGNpX2RldiAqaGRldik7CkBAIC0xMzg4LDcgKzEzNzksNiBAQAogdm9pZCBtZ210X2F1dGhfZmFpbGVkKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgdTggc3RhdHVzKTsKIHZvaWQgbWdtdF9hdXRoX2VuYWJsZV9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzKTsKIHZvaWQgbWdtdF9zc3BfZW5hYmxlX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBlbmFibGUsIHU4IHN0YXR1cyk7Ci12b2lkIG1nbXRfc2NfZW5hYmxlX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBlbmFibGUsIHU4IHN0YXR1cyk7CiB2b2lkIG1nbXRfc2V0X2NsYXNzX29mX2Rldl9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggKmRldl9jbGFzcywKIAkJCQkgICAgdTggc3RhdHVzKTsKIHZvaWQgbWdtdF9zZXRfbG9jYWxfbmFtZV9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggKm5hbWUsIHU4IHN0YXR1cyk7CkBAIC0xNDE3LDggKzE0MDcsNiBAQAogdm9pZCBoY2lfbGVfc3RhcnRfZW5jKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX19sZTE2IGVkaXYsIF9fbGU2NCByYW5kLAogCQkJCQkJCV9fdTggbHRrWzE2XSk7CiAKLWludCBoY2lfdXBkYXRlX3JhbmRvbV9hZGRyZXNzKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxLCBib29sIHJlcXVpcmVfcHJpdmFjeSwKLQkJCSAgICAgIHU4ICpvd25fYWRkcl90eXBlKTsKIHZvaWQgaGNpX2NvcHlfaWRlbnRpdHlfYWRkcmVzcyhzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwKIAkJCSAgICAgICB1OCAqYmRhZGRyX3R5cGUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvbDJjYXAuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCmluZGV4IGQxYmIzNDIuLjIyMzlhMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9sMmNhcC5oCkBAIC0yNDgsNiArMjQ4LDcgQEAKICNkZWZpbmUgTDJDQVBfUFNNX1NEUAkJMHgwMDAxCiAjZGVmaW5lIEwyQ0FQX1BTTV9SRkNPTU0JMHgwMDAzCiAjZGVmaW5lIEwyQ0FQX1BTTV8zRFNQCQkweDAwMjEKKyNkZWZpbmUgTDJDQVBfUFNNX0lQU1AJCTB4MDAyMyAvKiA2TG9XUEFOICovCiAKIC8qIGNoYW5uZWwgaWRlbnRpZmllciAqLwogI2RlZmluZSBMMkNBUF9DSURfU0lHTkFMSU5HCTB4MDAwMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL21nbXQuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9tZ210LmgKaW5kZXggOTVjMzRkNS4uZTIxOGEzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL21nbXQuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvbWdtdC5oCkBAIC0zMDEsMTAgKzMwMSw2IEBACiAjZGVmaW5lIE1HTVRfT1BfUkVBRF9MT0NBTF9PT0JfREFUQQkweDAwMjAKICNkZWZpbmUgTUdNVF9SRUFEX0xPQ0FMX09PQl9EQVRBX1NJWkUJMAogc3RydWN0IG1nbXRfcnBfcmVhZF9sb2NhbF9vb2JfZGF0YSB7Ci0JX191OAloYXNoWzE2XTsKLQlfX3U4CXJhbmRbMTZdOwotfSBfX3BhY2tlZDsKLXN0cnVjdCBtZ210X3JwX3JlYWRfbG9jYWxfb29iX2V4dF9kYXRhIHsKIAlfX3U4CWhhc2gxOTJbMTZdOwogCV9fdTgJcmFuZDE5MlsxNl07CiAJX191OAloYXNoMjU2WzE2XTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9yZmNvbW0uaAppbmRleCA1NzhiODMxLi40MTkwYWY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvcmZjb21tLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL3JmY29tbS5oCkBAIC0yNCw4ICsyNCw2IEBACiAjaWZuZGVmIF9fUkZDT01NX0gKICNkZWZpbmUgX19SRkNPTU1fSAogCi0jZGVmaW5lIFJGQ09NTV9QU00gMwotCiAjZGVmaW5lIFJGQ09NTV9DT05OX1RJTUVPVVQgKEhaICogMzApCiAjZGVmaW5lIFJGQ09NTV9ESVNDX1RJTUVPVVQgKEhaICogMjApCiAjZGVmaW5lIFJGQ09NTV9BVVRIX1RJTUVPVVQgKEhaICogMjUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ib25kXzNhZC5oIGIvaW5jbHVkZS9uZXQvYm9uZF8zYWQuaAppbmRleCBlMDFkOTAzLi5mMDRjZGJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ib25kXzNhZC5oCisrKyBiL2luY2x1ZGUvbmV0L2JvbmRfM2FkLmgKQEAgLTI3NCw3ICsyNzQsNiBAQAogaW50ICBib25kXzNhZF9nZXRfYWN0aXZlX2FnZ19pbmZvKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3QgYWRfaW5mbyAqYWRfaW5mbyk7CiBpbnQgIF9fYm9uZF8zYWRfZ2V0X2FjdGl2ZV9hZ2dfaW5mbyhzdHJ1Y3QgYm9uZGluZyAqYm9uZCwKIAkJCQkgICAgc3RydWN0IGFkX2luZm8gKmFkX2luZm8pOwotaW50IGJvbmRfM2FkX3htaXRfeG9yKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IGJvbmRfM2FkX2xhY3BkdV9yZWN2KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLAogCQkJIHN0cnVjdCBzbGF2ZSAqc2xhdmUpOwogaW50IGJvbmRfM2FkX3NldF9jYXJyaWVyKHN0cnVjdCBib25kaW5nICpib25kKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2JvbmRpbmcuaCBiL2luY2x1ZGUvbmV0L2JvbmRpbmcuaAppbmRleCA5ODNhOTRiLi5mZGE2ZmVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ib25kaW5nLmgKKysrIGIvaW5jbHVkZS9uZXQvYm9uZGluZy5oCkBAIC0xNTAsNiArMTUwLDEyIEBACiAJaW50IG1vZGU7CiB9OwogCitzdHJ1Y3QgbmV0ZGV2X25vdGlmeV93b3JrIHsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCXdvcms7CisJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKKwlzdHJ1Y3QgbmV0ZGV2X2JvbmRpbmdfaW5mbyBib25kaW5nX2luZm87Cit9OworCiBzdHJ1Y3Qgc2xhdmUgewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7IC8qIGZpcnN0IC0gdXNlZnVsIGZvciBwYW5pYyBkZWJ1ZyAqLwogCXN0cnVjdCBib25kaW5nICpib25kOyAvKiBvdXIgbWFzdGVyICovCkBAIC0yNDMsNiArMjQ5LDggQEAKICNkZWZpbmUgYm9uZF9zbGF2ZV9nZXRfcnRubChkZXYpIFwKIAkoKHN0cnVjdCBzbGF2ZSAqKSBydG5sX2RlcmVmZXJlbmNlKGRldi0+cnhfaGFuZGxlcl9kYXRhKSkKIAordm9pZCBib25kX3F1ZXVlX3NsYXZlX2V2ZW50KHN0cnVjdCBzbGF2ZSAqc2xhdmUpOworCiBzdHJ1Y3QgYm9uZF92bGFuX3RhZyB7CiAJX19iZTE2CQl2bGFuX3Byb3RvOwogCXVuc2lnbmVkIHNob3J0CXZsYW5faWQ7CkBAIC0zMTUsNiArMzIzLDcgQEAKIHsKIAlpZiAoc2xhdmUtPmJhY2t1cCkgewogCQlzbGF2ZS0+YmFja3VwID0gMDsKKwkJYm9uZF9xdWV1ZV9zbGF2ZV9ldmVudChzbGF2ZSk7CiAJCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgc2xhdmUtPmRldiwgMCwgR0ZQX0FUT01JQyk7CiAJfQogfQpAQCAtMzIzLDYgKzMzMiw3IEBACiB7CiAJaWYgKCFzbGF2ZS0+YmFja3VwKSB7CiAJCXNsYXZlLT5iYWNrdXAgPSAxOworCQlib25kX3F1ZXVlX3NsYXZlX2V2ZW50KHNsYXZlKTsKIAkJcnRtc2dfaWZpbmZvKFJUTV9ORVdMSU5LLCBzbGF2ZS0+ZGV2LCAwLCBHRlBfQVRPTUlDKTsKIAl9CiB9CkBAIC0zMzYsNiArMzQ2LDcgQEAKIAlzbGF2ZS0+YmFja3VwID0gc2xhdmVfc3RhdGU7CiAJaWYgKG5vdGlmeSkgewogCQlydG1zZ19pZmluZm8oUlRNX05FV0xJTkssIHNsYXZlLT5kZXYsIDAsIEdGUF9BVE9NSUMpOworCQlib25kX3F1ZXVlX3NsYXZlX2V2ZW50KHNsYXZlKTsKIAkJc2xhdmUtPnNob3VsZF9ub3RpZnkgPSAwOwogCX0gZWxzZSB7CiAJCWlmIChzbGF2ZS0+c2hvdWxkX25vdGlmeSkKQEAgLTQ5MCw2ICs1MDEsMTIgQEAKIAlyZXR1cm4gc2xhdmUtPmluYWN0aXZlOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYm9uZF9zZXRfc2xhdmVfbGlua19zdGF0ZShzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCBpbnQgc3RhdGUpCit7CisJc2xhdmUtPmxpbmsgPSBzdGF0ZTsKKwlib25kX3F1ZXVlX3NsYXZlX2V2ZW50KHNsYXZlKTsKK30KKwogc3RhdGljIGlubGluZSBfX2JlMzIgYm9uZF9jb25maXJtX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyIGRzdCwgX19iZTMyIGxvY2FsKQogewogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKQEAgLTUyNSw2ICs1NDIsNyBAQAogaW50IGJvbmRfZW5zbGF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYpOwogaW50IGJvbmRfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpzbGF2ZV9kZXYpOwogdTMyIGJvbmRfeG1pdF9oYXNoKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBib25kX3NldF9jYXJyaWVyKHN0cnVjdCBib25kaW5nICpib25kKTsKIHZvaWQgYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKTsKIHZvaWQgYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKm5ld19hY3RpdmUpOwogdm9pZCBib25kX2NyZWF0ZV9kZWJ1Z2ZzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKaW5kZXggNGViYjgxNi4uNjRlMDllMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC01MjAsMzcgKzUyMCw0MSBAQAogICoKICAqIEBTVVJWRVlfSU5GT19OT0lTRV9EQk06IG5vaXNlIChpbiBkQm0pIHdhcyBmaWxsZWQgaW4KICAqIEBTVVJWRVlfSU5GT19JTl9VU0U6IGNoYW5uZWwgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQKLSAqIEBTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUU6IGNoYW5uZWwgYWN0aXZlIHRpbWUgKGluIG1zKSB3YXMgZmlsbGVkIGluCi0gKiBAU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX0JVU1k6IGNoYW5uZWwgYnVzeSB0aW1lIHdhcyBmaWxsZWQgaW4KLSAqIEBTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfRVhUX0JVU1k6IGV4dGVuc2lvbiBjaGFubmVsIGJ1c3kgdGltZSB3YXMgZmlsbGVkIGluCi0gKiBAU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1JYOiBjaGFubmVsIHJlY2VpdmUgdGltZSB3YXMgZmlsbGVkIGluCi0gKiBAU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1RYOiBjaGFubmVsIHRyYW5zbWl0IHRpbWUgd2FzIGZpbGxlZCBpbgorICogQFNVUlZFWV9JTkZPX1RJTUU6IGFjdGl2ZSB0aW1lIChpbiBtcykgd2FzIGZpbGxlZCBpbgorICogQFNVUlZFWV9JTkZPX1RJTUVfQlVTWTogYnVzeSB0aW1lIHdhcyBmaWxsZWQgaW4KKyAqIEBTVVJWRVlfSU5GT19USU1FX0VYVF9CVVNZOiBleHRlbnNpb24gY2hhbm5lbCBidXN5IHRpbWUgd2FzIGZpbGxlZCBpbgorICogQFNVUlZFWV9JTkZPX1RJTUVfUlg6IHJlY2VpdmUgdGltZSB3YXMgZmlsbGVkIGluCisgKiBAU1VSVkVZX0lORk9fVElNRV9UWDogdHJhbnNtaXQgdGltZSB3YXMgZmlsbGVkIGluCisgKiBAU1VSVkVZX0lORk9fVElNRV9TQ0FOOiBzY2FuIHRpbWUgd2FzIGZpbGxlZCBpbgogICoKICAqIFVzZWQgYnkgdGhlIGRyaXZlciB0byBpbmRpY2F0ZSB3aGljaCBpbmZvIGluICZzdHJ1Y3Qgc3VydmV5X2luZm8KICAqIGl0IGhhcyBmaWxsZWQgaW4gZHVyaW5nIHRoZSBnZXRfc3VydmV5KCkuCiAgKi8KIGVudW0gc3VydmV5X2luZm9fZmxhZ3MgewotCVNVUlZFWV9JTkZPX05PSVNFX0RCTSA9IDE8PDAsCi0JU1VSVkVZX0lORk9fSU5fVVNFID0gMTw8MSwKLQlTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUUgPSAxPDwyLAotCVNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRV9CVVNZID0gMTw8MywKLQlTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfRVhUX0JVU1kgPSAxPDw0LAotCVNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRV9SWCA9IDE8PDUsCi0JU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1RYID0gMTw8NiwKKwlTVVJWRVlfSU5GT19OT0lTRV9EQk0JCT0gQklUKDApLAorCVNVUlZFWV9JTkZPX0lOX1VTRQkJPSBCSVQoMSksCisJU1VSVkVZX0lORk9fVElNRQkJPSBCSVQoMiksCisJU1VSVkVZX0lORk9fVElNRV9CVVNZCQk9IEJJVCgzKSwKKwlTVVJWRVlfSU5GT19USU1FX0VYVF9CVVNZCT0gQklUKDQpLAorCVNVUlZFWV9JTkZPX1RJTUVfUlgJCT0gQklUKDUpLAorCVNVUlZFWV9JTkZPX1RJTUVfVFgJCT0gQklUKDYpLAorCVNVUlZFWV9JTkZPX1RJTUVfU0NBTgkJPSBCSVQoNyksCiB9OwogCiAvKioKICAqIHN0cnVjdCBzdXJ2ZXlfaW5mbyAtIGNoYW5uZWwgc3VydmV5IHJlc3BvbnNlCiAgKgotICogQGNoYW5uZWw6IHRoZSBjaGFubmVsIHRoaXMgc3VydmV5IHJlY29yZCByZXBvcnRzLCBtYW5kYXRvcnkKKyAqIEBjaGFubmVsOiB0aGUgY2hhbm5lbCB0aGlzIHN1cnZleSByZWNvcmQgcmVwb3J0cywgbWF5IGJlICVOVUxMIGZvciBhIHNpbmdsZQorICoJcmVjb3JkIHRvIHJlcG9ydCBnbG9iYWwgc3RhdGlzdGljcwogICogQGZpbGxlZDogYml0ZmxhZyBvZiBmbGFncyBmcm9tICZlbnVtIHN1cnZleV9pbmZvX2ZsYWdzCiAgKiBAbm9pc2U6IGNoYW5uZWwgbm9pc2UgaW4gZEJtLiBUaGlzIGFuZCBhbGwgZm9sbG93aW5nIGZpZWxkcyBhcmUKICAqCW9wdGlvbmFsCi0gKiBAY2hhbm5lbF90aW1lOiBhbW91bnQgb2YgdGltZSBpbiBtcyB0aGUgcmFkaW8gc3BlbnQgb24gdGhlIGNoYW5uZWwKLSAqIEBjaGFubmVsX3RpbWVfYnVzeTogYW1vdW50IG9mIHRpbWUgdGhlIHByaW1hcnkgY2hhbm5lbCB3YXMgc2Vuc2VkIGJ1c3kKLSAqIEBjaGFubmVsX3RpbWVfZXh0X2J1c3k6IGFtb3VudCBvZiB0aW1lIHRoZSBleHRlbnNpb24gY2hhbm5lbCB3YXMgc2Vuc2VkIGJ1c3kKLSAqIEBjaGFubmVsX3RpbWVfcng6IGFtb3VudCBvZiB0aW1lIHRoZSByYWRpbyBzcGVudCByZWNlaXZpbmcgZGF0YQotICogQGNoYW5uZWxfdGltZV90eDogYW1vdW50IG9mIHRpbWUgdGhlIHJhZGlvIHNwZW50IHRyYW5zbWl0dGluZyBkYXRhCisgKiBAdGltZTogYW1vdW50IG9mIHRpbWUgaW4gbXMgdGhlIHJhZGlvIHdhcyB0dXJuIG9uIChvbiB0aGUgY2hhbm5lbCkKKyAqIEB0aW1lX2J1c3k6IGFtb3VudCBvZiB0aW1lIHRoZSBwcmltYXJ5IGNoYW5uZWwgd2FzIHNlbnNlZCBidXN5CisgKiBAdGltZV9leHRfYnVzeTogYW1vdW50IG9mIHRpbWUgdGhlIGV4dGVuc2lvbiBjaGFubmVsIHdhcyBzZW5zZWQgYnVzeQorICogQHRpbWVfcng6IGFtb3VudCBvZiB0aW1lIHRoZSByYWRpbyBzcGVudCByZWNlaXZpbmcgZGF0YQorICogQHRpbWVfdHg6IGFtb3VudCBvZiB0aW1lIHRoZSByYWRpbyBzcGVudCB0cmFuc21pdHRpbmcgZGF0YQorICogQHRpbWVfc2NhbjogYW1vdW50IG9mIHRpbWUgdGhlIHJhZGlvIHNwZW50IGZvciBzY2FubmluZwogICoKICAqIFVzZWQgYnkgZHVtcF9zdXJ2ZXkoKSB0byByZXBvcnQgYmFjayBwZXItY2hhbm5lbCBzdXJ2ZXkgaW5mb3JtYXRpb24uCiAgKgpAQCAtNTU5LDExICs1NjMsMTIgQEAKICAqLwogc3RydWN0IHN1cnZleV9pbmZvIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7Ci0JdTY0IGNoYW5uZWxfdGltZTsKLQl1NjQgY2hhbm5lbF90aW1lX2J1c3k7Ci0JdTY0IGNoYW5uZWxfdGltZV9leHRfYnVzeTsKLQl1NjQgY2hhbm5lbF90aW1lX3J4OwotCXU2NCBjaGFubmVsX3RpbWVfdHg7CisJdTY0IHRpbWU7CisJdTY0IHRpbWVfYnVzeTsKKwl1NjQgdGltZV9leHRfYnVzeTsKKwl1NjQgdGltZV9yeDsKKwl1NjQgdGltZV90eDsKKwl1NjQgdGltZV9zY2FuOwogCXUzMiBmaWxsZWQ7CiAJczggbm9pc2U7CiB9OwpAQCAtODYxLDc1ICs4NjYsNiBAQAogCQkJCSAgZW51bSBjZmc4MDIxMV9zdGF0aW9uX3R5cGUgc3RhdHlwZSk7CiAKIC8qKgotICogZW51bSBzdGF0aW9uX2luZm9fZmxhZ3MgLSBzdGF0aW9uIGluZm9ybWF0aW9uIGZsYWdzCi0gKgotICogVXNlZCBieSB0aGUgZHJpdmVyIHRvIGluZGljYXRlIHdoaWNoIGluZm8gaW4gJnN0cnVjdCBzdGF0aW9uX2luZm8KLSAqIGl0IGhhcyBmaWxsZWQgaW4gZHVyaW5nIGdldF9zdGF0aW9uKCkgb3IgZHVtcF9zdGF0aW9uKCkuCi0gKgotICogQFNUQVRJT05fSU5GT19JTkFDVElWRV9USU1FOiBAaW5hY3RpdmVfdGltZSBmaWxsZWQKLSAqIEBTVEFUSU9OX0lORk9fUlhfQllURVM6IEByeF9ieXRlcyBmaWxsZWQKLSAqIEBTVEFUSU9OX0lORk9fVFhfQllURVM6IEB0eF9ieXRlcyBmaWxsZWQKLSAqIEBTVEFUSU9OX0lORk9fUlhfQllURVM2NDogQHJ4X2J5dGVzIGZpbGxlZCB3aXRoIDY0LWJpdCB2YWx1ZQotICogQFNUQVRJT05fSU5GT19UWF9CWVRFUzY0OiBAdHhfYnl0ZXMgZmlsbGVkIHdpdGggNjQtYml0IHZhbHVlCi0gKiBAU1RBVElPTl9JTkZPX0xMSUQ6IEBsbGlkIGZpbGxlZAotICogQFNUQVRJT05fSU5GT19QTElEOiBAcGxpZCBmaWxsZWQKLSAqIEBTVEFUSU9OX0lORk9fUExJTktfU1RBVEU6IEBwbGlua19zdGF0ZSBmaWxsZWQKLSAqIEBTVEFUSU9OX0lORk9fU0lHTkFMOiBAc2lnbmFsIGZpbGxlZAotICogQFNUQVRJT05fSU5GT19UWF9CSVRSQVRFOiBAdHhyYXRlIGZpZWxkcyBhcmUgZmlsbGVkCi0gKgkodHhfYml0cmF0ZSwgdHhfYml0cmF0ZV9mbGFncyBhbmQgdHhfYml0cmF0ZV9tY3MpCi0gKiBAU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFM6IEByeF9wYWNrZXRzIGZpbGxlZCB3aXRoIDMyLWJpdCB2YWx1ZQotICogQFNUQVRJT05fSU5GT19UWF9QQUNLRVRTOiBAdHhfcGFja2V0cyBmaWxsZWQgd2l0aCAzMi1iaXQgdmFsdWUKLSAqIEBTVEFUSU9OX0lORk9fVFhfUkVUUklFUzogQHR4X3JldHJpZXMgZmlsbGVkCi0gKiBAU1RBVElPTl9JTkZPX1RYX0ZBSUxFRDogQHR4X2ZhaWxlZCBmaWxsZWQKLSAqIEBTVEFUSU9OX0lORk9fUlhfRFJPUF9NSVNDOiBAcnhfZHJvcHBlZF9taXNjIGZpbGxlZAotICogQFNUQVRJT05fSU5GT19TSUdOQUxfQVZHOiBAc2lnbmFsX2F2ZyBmaWxsZWQKLSAqIEBTVEFUSU9OX0lORk9fUlhfQklUUkFURTogQHJ4cmF0ZSBmaWVsZHMgYXJlIGZpbGxlZAotICogQFNUQVRJT05fSU5GT19CU1NfUEFSQU06IEBic3NfcGFyYW0gZmlsbGVkCi0gKiBAU1RBVElPTl9JTkZPX0NPTk5FQ1RFRF9USU1FOiBAY29ubmVjdGVkX3RpbWUgZmlsbGVkCi0gKiBAU1RBVElPTl9JTkZPX0FTU09DX1JFUV9JRVM6IEBhc3NvY19yZXFfaWVzIGZpbGxlZAotICogQFNUQVRJT05fSU5GT19TVEFfRkxBR1M6IEBzdGFfZmxhZ3MgZmlsbGVkCi0gKiBAU1RBVElPTl9JTkZPX0JFQUNPTl9MT1NTX0NPVU5UOiBAYmVhY29uX2xvc3NfY291bnQgZmlsbGVkCi0gKiBAU1RBVElPTl9JTkZPX1RfT0ZGU0VUOiBAdF9vZmZzZXQgZmlsbGVkCi0gKiBAU1RBVElPTl9JTkZPX0xPQ0FMX1BNOiBAbG9jYWxfcG0gZmlsbGVkCi0gKiBAU1RBVElPTl9JTkZPX1BFRVJfUE06IEBwZWVyX3BtIGZpbGxlZAotICogQFNUQVRJT05fSU5GT19OT05QRUVSX1BNOiBAbm9ucGVlcl9wbSBmaWxsZWQKLSAqIEBTVEFUSU9OX0lORk9fQ0hBSU5fU0lHTkFMOiBAY2hhaW5fc2lnbmFsIGZpbGxlZAotICogQFNUQVRJT05fSU5GT19DSEFJTl9TSUdOQUxfQVZHOiBAY2hhaW5fc2lnbmFsX2F2ZyBmaWxsZWQKLSAqIEBTVEFUSU9OX0lORk9fRVhQRUNURURfVEhST1VHSFBVVDogQGV4cGVjdGVkX3Rocm91Z2hwdXQgZmlsbGVkCi0gKi8KLWVudW0gc3RhdGlvbl9pbmZvX2ZsYWdzIHsKLQlTVEFUSU9OX0lORk9fSU5BQ1RJVkVfVElNRQkJPSBCSVQoMCksCi0JU1RBVElPTl9JTkZPX1JYX0JZVEVTCQkJPSBCSVQoMSksCi0JU1RBVElPTl9JTkZPX1RYX0JZVEVTCQkJPSBCSVQoMiksCi0JU1RBVElPTl9JTkZPX0xMSUQJCQk9IEJJVCgzKSwKLQlTVEFUSU9OX0lORk9fUExJRAkJCT0gQklUKDQpLAotCVNUQVRJT05fSU5GT19QTElOS19TVEFURQkJPSBCSVQoNSksCi0JU1RBVElPTl9JTkZPX1NJR05BTAkJCT0gQklUKDYpLAotCVNUQVRJT05fSU5GT19UWF9CSVRSQVRFCQkJPSBCSVQoNyksCi0JU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFMJCQk9IEJJVCg4KSwKLQlTVEFUSU9OX0lORk9fVFhfUEFDS0VUUwkJCT0gQklUKDkpLAotCVNUQVRJT05fSU5GT19UWF9SRVRSSUVTCQkJPSBCSVQoMTApLAotCVNUQVRJT05fSU5GT19UWF9GQUlMRUQJCQk9IEJJVCgxMSksCi0JU1RBVElPTl9JTkZPX1JYX0RST1BfTUlTQwkJPSBCSVQoMTIpLAotCVNUQVRJT05fSU5GT19TSUdOQUxfQVZHCQkJPSBCSVQoMTMpLAotCVNUQVRJT05fSU5GT19SWF9CSVRSQVRFCQkJPSBCSVQoMTQpLAotCVNUQVRJT05fSU5GT19CU1NfUEFSQU0JCQk9IEJJVCgxNSksCi0JU1RBVElPTl9JTkZPX0NPTk5FQ1RFRF9USU1FCQk9IEJJVCgxNiksCi0JU1RBVElPTl9JTkZPX0FTU09DX1JFUV9JRVMJCT0gQklUKDE3KSwKLQlTVEFUSU9OX0lORk9fU1RBX0ZMQUdTCQkJPSBCSVQoMTgpLAotCVNUQVRJT05fSU5GT19CRUFDT05fTE9TU19DT1VOVAkJPSBCSVQoMTkpLAotCVNUQVRJT05fSU5GT19UX09GRlNFVAkJCT0gQklUKDIwKSwKLQlTVEFUSU9OX0lORk9fTE9DQUxfUE0JCQk9IEJJVCgyMSksCi0JU1RBVElPTl9JTkZPX1BFRVJfUE0JCQk9IEJJVCgyMiksCi0JU1RBVElPTl9JTkZPX05PTlBFRVJfUE0JCQk9IEJJVCgyMyksCi0JU1RBVElPTl9JTkZPX1JYX0JZVEVTNjQJCQk9IEJJVCgyNCksCi0JU1RBVElPTl9JTkZPX1RYX0JZVEVTNjQJCQk9IEJJVCgyNSksCi0JU1RBVElPTl9JTkZPX0NIQUlOX1NJR05BTAkJPSBCSVQoMjYpLAotCVNUQVRJT05fSU5GT19DSEFJTl9TSUdOQUxfQVZHCQk9IEJJVCgyNyksCi0JU1RBVElPTl9JTkZPX0VYUEVDVEVEX1RIUk9VR0hQVVQJPSBCSVQoMjgpLAotfTsKLQotLyoqCiAgKiBlbnVtIHN0YXRpb25faW5mb19yYXRlX2ZsYWdzIC0gYml0cmF0ZSBpbmZvIGZsYWdzCiAgKgogICogVXNlZCBieSB0aGUgZHJpdmVyIHRvIGluZGljYXRlIHRoZSBzcGVjaWZpYyByYXRlIHRyYW5zbWlzc2lvbgpAQCAtOTM3LDIyICs4NzMsMzUgQEAKICAqCiAgKiBAUkFURV9JTkZPX0ZMQUdTX01DUzogbWNzIGZpZWxkIGZpbGxlZCB3aXRoIEhUIE1DUwogICogQFJBVEVfSU5GT19GTEFHU19WSFRfTUNTOiBtY3MgZmllbGQgZmlsbGVkIHdpdGggVkhUIE1DUwotICogQFJBVEVfSU5GT19GTEFHU180MF9NSFpfV0lEVEg6IDQwIE1IeiB3aWR0aCB0cmFuc21pc3Npb24KLSAqIEBSQVRFX0lORk9fRkxBR1NfODBfTUhaX1dJRFRIOiA4MCBNSHogd2lkdGggdHJhbnNtaXNzaW9uCi0gKiBAUkFURV9JTkZPX0ZMQUdTXzgwUDgwX01IWl9XSURUSDogODArODAgTUh6IHdpZHRoIHRyYW5zbWlzc2lvbgotICogQFJBVEVfSU5GT19GTEFHU18xNjBfTUhaX1dJRFRIOiAxNjAgTUh6IHdpZHRoIHRyYW5zbWlzc2lvbgogICogQFJBVEVfSU5GT19GTEFHU19TSE9SVF9HSTogNDAwbnMgZ3VhcmQgaW50ZXJ2YWwKICAqIEBSQVRFX0lORk9fRkxBR1NfNjBHOiA2MEdIeiBNQ1MKICAqLwogZW51bSByYXRlX2luZm9fZmxhZ3MgewogCVJBVEVfSU5GT19GTEFHU19NQ1MJCQk9IEJJVCgwKSwKIAlSQVRFX0lORk9fRkxBR1NfVkhUX01DUwkJCT0gQklUKDEpLAotCVJBVEVfSU5GT19GTEFHU180MF9NSFpfV0lEVEgJCT0gQklUKDIpLAotCVJBVEVfSU5GT19GTEFHU184MF9NSFpfV0lEVEgJCT0gQklUKDMpLAotCVJBVEVfSU5GT19GTEFHU184MFA4MF9NSFpfV0lEVEgJCT0gQklUKDQpLAotCVJBVEVfSU5GT19GTEFHU18xNjBfTUhaX1dJRFRICQk9IEJJVCg1KSwKLQlSQVRFX0lORk9fRkxBR1NfU0hPUlRfR0kJCT0gQklUKDYpLAotCVJBVEVfSU5GT19GTEFHU182MEcJCQk9IEJJVCg3KSwKKwlSQVRFX0lORk9fRkxBR1NfU0hPUlRfR0kJCT0gQklUKDIpLAorCVJBVEVfSU5GT19GTEFHU182MEcJCQk9IEJJVCgzKSwKK307CisKKy8qKgorICogZW51bSByYXRlX2luZm9fYncgLSByYXRlIGJhbmR3aWR0aCBpbmZvcm1hdGlvbgorICoKKyAqIFVzZWQgYnkgdGhlIGRyaXZlciB0byBpbmRpY2F0ZSB0aGUgcmF0ZSBiYW5kd2lkdGguCisgKgorICogQFJBVEVfSU5GT19CV181OiA1IE1IeiBiYW5kd2lkdGgKKyAqIEBSQVRFX0lORk9fQldfMTA6IDEwIE1IeiBiYW5kd2lkdGgKKyAqIEBSQVRFX0lORk9fQldfMjA6IDIwIE1IeiBiYW5kd2lkdGgKKyAqIEBSQVRFX0lORk9fQldfNDA6IDQwIE1IeiBiYW5kd2lkdGgKKyAqIEBSQVRFX0lORk9fQldfODA6IDgwIE1IeiBiYW5kd2lkdGgKKyAqIEBSQVRFX0lORk9fQldfMTYwOiAxNjAgTUh6IGJhbmR3aWR0aAorICovCitlbnVtIHJhdGVfaW5mb19idyB7CisJUkFURV9JTkZPX0JXXzUsCisJUkFURV9JTkZPX0JXXzEwLAorCVJBVEVfSU5GT19CV18yMCwKKwlSQVRFX0lORk9fQldfNDAsCisJUkFURV9JTkZPX0JXXzgwLAorCVJBVEVfSU5GT19CV18xNjAsCiB9OwogCiAvKioKQEAgLTk2NCwxMiArOTEzLDE0IEBACiAgKiBAbWNzOiBtY3MgaW5kZXggaWYgc3RydWN0IGRlc2NyaWJlcyBhIDgwMi4xMW4gYml0cmF0ZQogICogQGxlZ2FjeTogYml0cmF0ZSBpbiAxMDBrYml0L3MgZm9yIDgwMi4xMWFiZwogICogQG5zczogbnVtYmVyIG9mIHN0cmVhbXMgKFZIVCBvbmx5KQorICogQGJ3OiBiYW5kd2lkdGggKGZyb20gJmVudW0gcmF0ZV9pbmZvX2J3KQogICovCiBzdHJ1Y3QgcmF0ZV9pbmZvIHsKIAl1OCBmbGFnczsKIAl1OCBtY3M7CiAJdTE2IGxlZ2FjeTsKIAl1OCBuc3M7CisJdTggYnc7CiB9OwogCiAvKioKQEAgLTEwMDMsNiArOTU0LDI0IEBACiAJdTE2IGJlYWNvbl9pbnRlcnZhbDsKIH07CiAKKy8qKgorICogc3RydWN0IGNmZzgwMjExX3RpZF9zdGF0cyAtIHBlci1USUQgc3RhdGlzdGljcworICogQGZpbGxlZDogYml0bWFwIG9mIGZsYWdzIHVzaW5nIHRoZSBiaXRzIG9mICZlbnVtIG5sODAyMTFfdGlkX3N0YXRzIHRvCisgKglpbmRpY2F0ZSB0aGUgcmVsZXZhbnQgdmFsdWVzIGluIHRoaXMgc3RydWN0IGFyZSBmaWxsZWQKKyAqIEByeF9tc2R1OiBudW1iZXIgb2YgcmVjZWl2ZWQgTVNEVXMKKyAqIEB0eF9tc2R1OiBudW1iZXIgb2YgKGF0dGVtcHRlZCkgdHJhbnNtaXR0ZWQgTVNEVXMKKyAqIEB0eF9tc2R1X3JldHJpZXM6IG51bWJlciBvZiByZXRyaWVzIChub3QgY291bnRpbmcgdGhlIGZpcnN0KSBmb3IKKyAqCXRyYW5zbWl0dGVkIE1TRFVzCisgKiBAdHhfbXNkdV9mYWlsZWQ6IG51bWJlciBvZiBmYWlsZWQgdHJhbnNtaXR0ZWQgTVNEVXMKKyAqLworc3RydWN0IGNmZzgwMjExX3RpZF9zdGF0cyB7CisJdTMyIGZpbGxlZDsKKwl1NjQgcnhfbXNkdTsKKwl1NjQgdHhfbXNkdTsKKwl1NjQgdHhfbXNkdV9yZXRyaWVzOworCXU2NCB0eF9tc2R1X2ZhaWxlZDsKK307CisKICNkZWZpbmUgSUVFRTgwMjExX01BWF9DSEFJTlMJNAogCiAvKioKQEAgLTEwMTAsMTEgKzk3OSwxMiBAQAogICoKICAqIFN0YXRpb24gaW5mb3JtYXRpb24gZmlsbGVkIGJ5IGRyaXZlciBmb3IgZ2V0X3N0YXRpb24oKSBhbmQgZHVtcF9zdGF0aW9uLgogICoKLSAqIEBmaWxsZWQ6IGJpdGZsYWcgb2YgZmxhZ3MgZnJvbSAmZW51bSBzdGF0aW9uX2luZm9fZmxhZ3MKKyAqIEBmaWxsZWQ6IGJpdGZsYWcgb2YgZmxhZ3MgdXNpbmcgdGhlIGJpdHMgb2YgJmVudW0gbmw4MDIxMV9zdGFfaW5mbyB0bworICoJaW5kaWNhdGUgdGhlIHJlbGV2YW50IHZhbHVlcyBpbiB0aGlzIHN0cnVjdCBmb3IgdGhlbQogICogQGNvbm5lY3RlZF90aW1lOiB0aW1lKGluIHNlY3MpIHNpbmNlIGEgc3RhdGlvbiBpcyBsYXN0IGNvbm5lY3RlZAogICogQGluYWN0aXZlX3RpbWU6IHRpbWUgc2luY2UgbGFzdCBzdGF0aW9uIGFjdGl2aXR5ICh0eC9yeCkgaW4gbWlsbGlzZWNvbmRzCi0gKiBAcnhfYnl0ZXM6IGJ5dGVzIHJlY2VpdmVkIGZyb20gdGhpcyBzdGF0aW9uCi0gKiBAdHhfYnl0ZXM6IGJ5dGVzIHRyYW5zbWl0dGVkIHRvIHRoaXMgc3RhdGlvbgorICogQHJ4X2J5dGVzOiBieXRlcyAoc2l6ZSBvZiBNUERVcykgcmVjZWl2ZWQgZnJvbSB0aGlzIHN0YXRpb24KKyAqIEB0eF9ieXRlczogYnl0ZXMgKHNpemUgb2YgTVBEVXMpIHRyYW5zbWl0dGVkIHRvIHRoaXMgc3RhdGlvbgogICogQGxsaWQ6IG1lc2ggbG9jYWwgbGluayBpZAogICogQHBsaWQ6IG1lc2ggcGVlciBsaW5rIGlkCiAgKiBAcGxpbmtfc3RhdGU6IG1lc2ggcGVlciBsaW5rIHN0YXRlCkBAIC0xMDI3LDEwICs5OTcsMTAgQEAKICAqIEBjaGFpbl9zaWduYWxfYXZnOiBwZXItY2hhaW4gc2lnbmFsIHN0cmVuZ3RoIGF2ZXJhZ2UgaW4gZEJtCiAgKiBAdHhyYXRlOiBjdXJyZW50IHVuaWNhc3QgYml0cmF0ZSBmcm9tIHRoaXMgc3RhdGlvbgogICogQHJ4cmF0ZTogY3VycmVudCB1bmljYXN0IGJpdHJhdGUgdG8gdGhpcyBzdGF0aW9uCi0gKiBAcnhfcGFja2V0czogcGFja2V0cyByZWNlaXZlZCBmcm9tIHRoaXMgc3RhdGlvbgotICogQHR4X3BhY2tldHM6IHBhY2tldHMgdHJhbnNtaXR0ZWQgdG8gdGhpcyBzdGF0aW9uCi0gKiBAdHhfcmV0cmllczogY3VtdWxhdGl2ZSByZXRyeSBjb3VudHMKLSAqIEB0eF9mYWlsZWQ6IG51bWJlciBvZiBmYWlsZWQgdHJhbnNtaXNzaW9ucyAocmV0cmllcyBleGNlZWRlZCwgbm8gQUNLKQorICogQHJ4X3BhY2tldHM6IHBhY2tldHMgKE1TRFVzICYgTU1QRFVzKSByZWNlaXZlZCBmcm9tIHRoaXMgc3RhdGlvbgorICogQHR4X3BhY2tldHM6IHBhY2tldHMgKE1TRFVzICYgTU1QRFVzKSB0cmFuc21pdHRlZCB0byB0aGlzIHN0YXRpb24KKyAqIEB0eF9yZXRyaWVzOiBjdW11bGF0aXZlIHJldHJ5IGNvdW50cyAoTVBEVXMpCisgKiBAdHhfZmFpbGVkOiBudW1iZXIgb2YgZmFpbGVkIHRyYW5zbWlzc2lvbnMgKE1QRFVzKSAocmV0cmllcyBleGNlZWRlZCwgbm8gQUNLKQogICogQHJ4X2Ryb3BwZWRfbWlzYzogIERyb3BwZWQgZm9yIHVuLXNwZWNpZmllZCByZWFzb24uCiAgKiBAYnNzX3BhcmFtOiBjdXJyZW50IEJTUyBwYXJhbWV0ZXJzCiAgKiBAZ2VuZXJhdGlvbjogZ2VuZXJhdGlvbiBudW1iZXIgZm9yIG5sODAyMTEgZHVtcHMuCkBAIC0xMDUwLDYgKzEwMjAsMTEgQEAKICAqIEBub25wZWVyX3BtOiBub24tcGVlciBtZXNoIFNUQSBwb3dlciBzYXZlIG1vZGUKICAqIEBleHBlY3RlZF90aHJvdWdocHV0OiBleHBlY3RlZCB0aHJvdWdocHV0IGluIGticHMgKGluY2x1ZGluZyA4MDIuMTEgaGVhZGVycykKICAqCXRvd2FyZHMgdGhpcyBzdGF0aW9uLgorICogQHJ4X2JlYWNvbjogbnVtYmVyIG9mIGJlYWNvbnMgcmVjZWl2ZWQgZnJvbSB0aGlzIHBlZXIKKyAqIEByeF9iZWFjb25fc2lnbmFsX2F2Zzogc2lnbmFsIHN0cmVuZ3RoIGF2ZXJhZ2UgKGluIGRCbSkgZm9yIGJlYWNvbnMgcmVjZWl2ZWQKKyAqCWZyb20gdGhpcyBwZWVyCisgKiBAcGVydGlkOiBwZXItVElEIHN0YXRpc3RpY3MsIHNlZSAmc3RydWN0IGNmZzgwMjExX3RpZF9zdGF0cywgdXNpbmcgdGhlIGxhc3QKKyAqCShJRUVFODAyMTFfTlVNX1RJRFMpIGluZGV4IGZvciBNU0RVcyBub3QgZW5jYXBzdWxhdGVkIGluIFFvUy1NUERVcy4KICAqLwogc3RydWN0IHN0YXRpb25faW5mbyB7CiAJdTMyIGZpbGxlZDsKQEAgLTEwOTAsMTAgKzEwNjUsOSBAQAogCiAJdTMyIGV4cGVjdGVkX3Rocm91Z2hwdXQ7CiAKLQkvKgotCSAqIE5vdGU6IEFkZCBhIG5ldyBlbnVtIHN0YXRpb25faW5mb19mbGFncyB2YWx1ZSBmb3IgZWFjaCBuZXcgZmllbGQgYW5kCi0JICogdXNlIGl0IHRvIGNoZWNrIHdoaWNoIGZpZWxkcyBhcmUgaW5pdGlhbGl6ZWQuCi0JICovCisJdTY0IHJ4X2JlYWNvbjsKKwl1OCByeF9iZWFjb25fc2lnbmFsX2F2ZzsKKwlzdHJ1Y3QgY2ZnODAyMTFfdGlkX3N0YXRzIHBlcnRpZFtJRUVFODAyMTFfTlVNX1RJRFMgKyAxXTsKIH07CiAKIC8qKgpAQCAtMTUxNiw2ICsxNDkwLDEzIEBACiAgKiBAbWFjX2FkZHJfbWFzazogTUFDIGFkZHJlc3MgbWFzayB1c2VkIHdpdGggcmFuZG9taXNhdGlvbiwgYml0cyB0aGF0CiAgKglhcmUgMCBpbiB0aGUgbWFzayBzaG91bGQgYmUgcmFuZG9taXNlZCwgYml0cyB0aGF0IGFyZSAxIHNob3VsZAogICoJYmUgdGFrZW4gZnJvbSB0aGUgQG1hY19hZGRyCisgKiBAcmN1X2hlYWQ6IFJDVSBjYWxsYmFjayB1c2VkIHRvIGZyZWUgdGhlIHN0cnVjdAorICogQG93bmVyX25scG9ydGlkOiBuZXRsaW5rIHBvcnRpZCBvZiBvd25lciAoaWYgdGhpcyBzaG91bGQgaXMgYSByZXF1ZXN0CisgKglvd25lZCBieSBhIHBhcnRpY3VsYXIgc29ja2V0KQorICogQGRlbGF5OiBkZWxheSBpbiBzZWNvbmRzIHRvIHVzZSBiZWZvcmUgc3RhcnRpbmcgdGhlIGZpcnN0IHNjYW4KKyAqCWN5Y2xlLiAgVGhlIGRyaXZlciBtYXkgaWdub3JlIHRoaXMgcGFyYW1ldGVyIGFuZCBzdGFydAorICoJaW1tZWRpYXRlbHkgKG9yIGF0IGFueSBvdGhlciB0aW1lKSwgaWYgdGhpcyBmZWF0dXJlIGlzIG5vdAorICoJc3VwcG9ydGVkLgogICovCiBzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0IHsKIAlzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqc3NpZHM7CkBAIC0xNTI5LDYgKzE1MTAsNyBAQAogCXN0cnVjdCBjZmc4MDIxMV9tYXRjaF9zZXQgKm1hdGNoX3NldHM7CiAJaW50IG5fbWF0Y2hfc2V0czsKIAlzMzIgbWluX3Jzc2lfdGhvbGQ7CisJdTMyIGRlbGF5OwogCiAJdTggbWFjX2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAl1OCBtYWNfYWRkcl9tYXNrW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7CkBAIC0xNTM3LDYgKzE1MTksOCBAQAogCXN0cnVjdCB3aXBoeSAqd2lwaHk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBsb25nIHNjYW5fc3RhcnQ7CisJc3RydWN0IHJjdV9oZWFkIHJjdV9oZWFkOworCXUzMiBvd25lcl9ubHBvcnRpZDsKIAogCS8qIGtlZXAgbGFzdCAqLwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHNbMF07CkBAIC0zMDExLDYgKzI5OTUsOCBAQAogICogQHJlZ3VsYXRvcnlfZmxhZ3M6IHdpcGh5IHJlZ3VsYXRvcnkgZmxhZ3MsIHNlZQogICoJJmVudW0gaWVlZTgwMjExX3JlZ3VsYXRvcnlfZmxhZ3MKICAqIEBmZWF0dXJlczogZmVhdHVyZXMgYWR2ZXJ0aXNlZCB0byBubDgwMjExLCBzZWUgJmVudW0gbmw4MDIxMV9mZWF0dXJlX2ZsYWdzLgorICogQGV4dF9mZWF0dXJlczogZXh0ZW5kZWQgZmVhdHVyZXMgYWR2ZXJ0aXNlZCB0byBubDgwMjExLCBzZWUKKyAqCSZlbnVtIG5sODAyMTFfZXh0X2ZlYXR1cmVfaW5kZXguCiAgKiBAYnNzX3ByaXZfc2l6ZTogZWFjaCBCU1Mgc3RydWN0IGhhcyBwcml2YXRlIGRhdGEgYWxsb2NhdGVkIHdpdGggaXQsCiAgKgl0aGlzIHZhcmlhYmxlIGRldGVybWluZXMgaXRzIHNpemUKICAqIEBtYXhfc2Nhbl9zc2lkczogbWF4aW11bSBudW1iZXIgb2YgU1NJRHMgdGhlIGRldmljZSBjYW4gc2NhbiBmb3IgaW4KQEAgLTMxMjAsNiArMzEwNiw3IEBACiAJdTE2IG1heF9hY2xfbWFjX2FkZHJzOwogCiAJdTMyIGZsYWdzLCByZWd1bGF0b3J5X2ZsYWdzLCBmZWF0dXJlczsKKwl1OCBleHRfZmVhdHVyZXNbRElWX1JPVU5EX1VQKE5VTV9OTDgwMjExX0VYVF9GRUFUVVJFUywgOCldOwogCiAJdTMyIGFwX3NtZV9jYXBhOwogCkBAIC0zODA4LDYgKzM3OTUsMzQgQEAKIGludCByZWd1bGF0b3J5X2hpbnQoc3RydWN0IHdpcGh5ICp3aXBoeSwgY29uc3QgY2hhciAqYWxwaGEyKTsKIAogLyoqCisgKiByZWd1bGF0b3J5X3NldF93aXBoeV9yZWdkIC0gc2V0IHJlZ2RvbSBpbmZvIGZvciBzZWxmIG1hbmFnZWQgZHJpdmVycworICogQHdpcGh5OiB0aGUgd2lyZWxlc3MgZGV2aWNlIHdlIHdhbnQgdG8gcHJvY2VzcyB0aGUgcmVndWxhdG9yeSBkb21haW4gb24KKyAqIEByZDogdGhlIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9ybWF0b2luIHRvIHVzZSBmb3IgdGhpcyB3aXBoeQorICoKKyAqIFNldCB0aGUgcmVndWxhdG9yeSBkb21haW4gaW5mb3JtYXRpb24gZm9yIHNlbGYtbWFuYWdlZCB3aXBoeXMsIG9ubHkgdGhleQorICogbWF5IHVzZSB0aGlzIGZ1bmN0aW9uLiBTZWUgJVJFR1VMQVRPUllfV0lQSFlfU0VMRl9NQU5BR0VEIGZvciBtb3JlCisgKiBpbmZvcm1hdGlvbi4KKyAqCisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcy4gLUVJTlZBTCwgLUVQRVJNCisgKi8KK2ludCByZWd1bGF0b3J5X3NldF93aXBoeV9yZWdkKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpOworCisvKioKKyAqIHJlZ3VsYXRvcnlfc2V0X3dpcGh5X3JlZ2Rfc3luY19ydG5sIC0gc2V0IHJlZ2RvbSBmb3Igc2VsZi1tYW5hZ2VkIGRyaXZlcnMKKyAqIEB3aXBoeTogdGhlIHdpcmVsZXNzIGRldmljZSB3ZSB3YW50IHRvIHByb2Nlc3MgdGhlIHJlZ3VsYXRvcnkgZG9tYWluIG9uCisgKiBAcmQ6IHRoZSByZWd1bGF0b3J5IGRvbWFpbiBpbmZvcm1hdGlvbiB0byB1c2UgZm9yIHRoaXMgd2lwaHkKKyAqCisgKiBUaGlzIGZ1bmN0aW9ucyByZXF1aXJlcyB0aGUgUlROTCB0byBiZSBoZWxkIGFuZCBhcHBsaWVzIHRoZSBuZXcgcmVnZG9tYWluCisgKiBzeW5jaHJvbm91c2x5IHRvIHRoaXMgd2lwaHkuIEZvciBtb3JlIGRldGFpbHMgc2VlCisgKiByZWd1bGF0b3J5X3NldF93aXBoeV9yZWdkKCkuCisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MuIC1FSU5WQUwsIC1FUEVSTQorICovCitpbnQgcmVndWxhdG9yeV9zZXRfd2lwaHlfcmVnZF9zeW5jX3J0bmwoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkKTsKKworLyoqCiAgKiB3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeSAtIGFwcGx5IGEgY3VzdG9tIGRyaXZlciByZWd1bGF0b3J5IGRvbWFpbgogICogQHdpcGh5OiB0aGUgd2lyZWxlc3MgZGV2aWNlIHdlIHdhbnQgdG8gcHJvY2VzcyB0aGUgcmVndWxhdG9yeSBkb21haW4gb24KICAqIEByZWdkOiB0aGUgY3VzdG9tIHJlZ3VsYXRvcnkgZG9tYWluIHRvIHVzZSBmb3IgdGhpcyB3aXBoeQpAQCAtNDU2NSwxMyArNDU4MCwyNyBAQAogCQkgICAgICBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbywgZ2ZwX3QgZ2ZwKTsKIAogLyoqCisgKiBjZmc4MDIxMV9kZWxfc3RhX3NpbmZvIC0gbm90aWZ5IHVzZXJzcGFjZSBhYm91dCBkZWxldGlvbiBvZiBhIHN0YXRpb24KKyAqIEBkZXY6IHRoZSBuZXRkZXYKKyAqIEBtYWNfYWRkcjogdGhlIHN0YXRpb24ncyBhZGRyZXNzCisgKiBAc2luZm86IHRoZSBzdGF0aW9uIGluZm9ybWF0aW9uL3N0YXRpc3RpY3MKKyAqIEBnZnA6IGFsbG9jYXRpb24gZmxhZ3MKKyAqLwordm9pZCBjZmc4MDIxMV9kZWxfc3RhX3NpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwKKwkJCSAgICBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbywgZ2ZwX3QgZ2ZwKTsKKworLyoqCiAgKiBjZmc4MDIxMV9kZWxfc3RhIC0gbm90aWZ5IHVzZXJzcGFjZSBhYm91dCBkZWxldGlvbiBvZiBhIHN0YXRpb24KICAqCiAgKiBAZGV2OiB0aGUgbmV0ZGV2CiAgKiBAbWFjX2FkZHI6IHRoZSBzdGF0aW9uJ3MgYWRkcmVzcwogICogQGdmcDogYWxsb2NhdGlvbiBmbGFncwogICovCi12b2lkIGNmZzgwMjExX2RlbF9zdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLCBnZnBfdCBnZnApOworc3RhdGljIGlubGluZSB2b2lkIGNmZzgwMjExX2RlbF9zdGEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgY29uc3QgdTggKm1hY19hZGRyLCBnZnBfdCBnZnApCit7CisJY2ZnODAyMTFfZGVsX3N0YV9zaW5mbyhkZXYsIG1hY19hZGRyLCBOVUxMLCBnZnApOworfQogCiAvKioKICAqIGNmZzgwMjExX2Nvbm5fZmFpbGVkIC0gY29ubmVjdGlvbiByZXF1ZXN0IGZhaWxlZCBub3RpZmljYXRpb24KQEAgLTUwMzMsNiArNTA2Miw0MiBAQAogICovCiB2b2lkIGNmZzgwMjExX3NodXRkb3duX2FsbF9pbnRlcmZhY2VzKHN0cnVjdCB3aXBoeSAqd2lwaHkpOwogCisvKioKKyAqIHdpcGh5X2V4dF9mZWF0dXJlX3NldCAtIHNldCB0aGUgZXh0ZW5kZWQgZmVhdHVyZSBmbGFnCisgKgorICogQHdpcGh5OiB0aGUgd2lwaHkgdG8gbW9kaWZ5LgorICogQGZ0aWR4OiBleHRlbmRlZCBmZWF0dXJlIGJpdCBpbmRleC4KKyAqCisgKiBUaGUgZXh0ZW5kZWQgZmVhdHVyZXMgYXJlIGZsYWdnZWQgaW4gbXVsdGlwbGUgYnl0ZXMgKHNlZQorICogJnN0cnVjdCB3aXBoeS5AZXh0X2ZlYXR1cmVzKQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgd2lwaHlfZXh0X2ZlYXR1cmVfc2V0KHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJCSBlbnVtIG5sODAyMTFfZXh0X2ZlYXR1cmVfaW5kZXggZnRpZHgpCit7CisJdTggKmZ0X2J5dGU7CisKKwlmdF9ieXRlID0gJndpcGh5LT5leHRfZmVhdHVyZXNbZnRpZHggLyA4XTsKKwkqZnRfYnl0ZSB8PSBCSVQoZnRpZHggJSA4KTsKK30KKworLyoqCisgKiB3aXBoeV9leHRfZmVhdHVyZV9pc3NldCAtIGNoZWNrIHRoZSBleHRlbmRlZCBmZWF0dXJlIGZsYWcKKyAqCisgKiBAd2lwaHk6IHRoZSB3aXBoeSB0byBtb2RpZnkuCisgKiBAZnRpZHg6IGV4dGVuZGVkIGZlYXR1cmUgYml0IGluZGV4LgorICoKKyAqIFRoZSBleHRlbmRlZCBmZWF0dXJlcyBhcmUgZmxhZ2dlZCBpbiBtdWx0aXBsZSBieXRlcyAoc2VlCisgKiAmc3RydWN0IHdpcGh5LkBleHRfZmVhdHVyZXMpCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAord2lwaHlfZXh0X2ZlYXR1cmVfaXNzZXQoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCWVudW0gbmw4MDIxMV9leHRfZmVhdHVyZV9pbmRleCBmdGlkeCkKK3sKKwl1OCBmdF9ieXRlOworCisJZnRfYnl0ZSA9IHdpcGh5LT5leHRfZmVhdHVyZXNbZnRpZHggLyA4XTsKKwlyZXR1cm4gKGZ0X2J5dGUgJiBCSVQoZnRpZHggJSA4KSkgIT0gMDsKK30KIAogLyogZXRodG9vbCBoZWxwZXIgKi8KIHZvaWQgY2ZnODAyMTFfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jZmc4MDIxNTQuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjE1NC5oCmluZGV4IDdmNzEzYWMuLmVlZGE2NzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NmZzgwMjE1NC5oCisrKyBiL2luY2x1ZGUvbmV0L2NmZzgwMjE1NC5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bmV0L25sODAyMTU0Lmg+CiAKIHN0cnVjdCB3cGFuX3BoeTsKK3N0cnVjdCB3cGFuX3BoeV9jY2E7CiAKIHN0cnVjdCBjZmc4MDIxNTRfb3BzIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqICgqYWRkX3ZpcnR1YWxfaW50Zl9kZXByZWNhdGVkKShzdHJ1Y3Qgd3Bhbl9waHkgKndwYW5fcGh5LApAQCAtMzksNiArNDAsOCBAQAogCWludAkoKmRlbF92aXJ0dWFsX2ludGYpKHN0cnVjdCB3cGFuX3BoeSAqd3Bhbl9waHksCiAJCQkJICAgIHN0cnVjdCB3cGFuX2RldiAqd3Bhbl9kZXYpOwogCWludAkoKnNldF9jaGFubmVsKShzdHJ1Y3Qgd3Bhbl9waHkgKndwYW5fcGh5LCB1OCBwYWdlLCB1OCBjaGFubmVsKTsKKwlpbnQJKCpzZXRfY2NhX21vZGUpKHN0cnVjdCB3cGFuX3BoeSAqd3Bhbl9waHksCisJCQkJY29uc3Qgc3RydWN0IHdwYW5fcGh5X2NjYSAqY2NhKTsKIAlpbnQJKCpzZXRfcGFuX2lkKShzdHJ1Y3Qgd3Bhbl9waHkgKndwYW5fcGh5LAogCQkJICAgICAgc3RydWN0IHdwYW5fZGV2ICp3cGFuX2RldiwgX19sZTE2IHBhbl9pZCk7CiAJaW50CSgqc2V0X3Nob3J0X2FkZHIpKHN0cnVjdCB3cGFuX3BoeSAqd3Bhbl9waHksCkBAIC01Niw2ICs1OSwxMSBAQAogCQkJCXN0cnVjdCB3cGFuX2RldiAqd3Bhbl9kZXYsIGJvb2wgbW9kZSk7CiB9OwogCitzdHJ1Y3Qgd3Bhbl9waHlfY2NhIHsKKwllbnVtIG5sODAyMTU0X2NjYV9tb2RlcyBtb2RlOworCWVudW0gbmw4MDIxNTRfY2NhX29wdHMgb3B0OworfTsKKwogc3RydWN0IHdwYW5fcGh5IHsKIAlzdHJ1Y3QgbXV0ZXggcGliX2xvY2s7CiAKQEAgLTc2LDcgKzg0LDcgQEAKIAl1OCBjdXJyZW50X3BhZ2U7CiAJdTMyIGNoYW5uZWxzX3N1cHBvcnRlZFtJRUVFODAyMTU0X01BWF9QQUdFICsgMV07CiAJczggdHJhbnNtaXRfcG93ZXI7Ci0JdTggY2NhX21vZGU7CisJc3RydWN0IHdwYW5fcGh5X2NjYSBjY2E7CiAKIAlfX2xlNjQgcGVybV9leHRlbmRlZF9hZGRyOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmggYi9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmgKaW5kZXggYTZmZDkzOS4uM2ViYjE2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2lwc29faXB2NC5oCisrKyBiL2luY2x1ZGUvbmV0L2NpcHNvX2lwdjQuaApAQCAtMTIxLDEzICsxMjEsNiBAQAogI2VuZGlmCiAKIC8qCi0gKiBIZWxwZXIgRnVuY3Rpb25zCi0gKi8KLQotI2RlZmluZSBDSVBTT19WNF9PUFRFWElTVCh4KSAoSVBDQih4KS0+b3B0LmNpcHNvICE9IDApCi0jZGVmaW5lIENJUFNPX1Y0X09QVFBUUih4KSAoc2tiX25ldHdvcmtfaGVhZGVyKHgpICsgSVBDQih4KS0+b3B0LmNpcHNvKQotCi0vKgogICogRE9JIExpc3QgRnVuY3Rpb25zCiAgKi8KIApAQCAtMTkwLDcgKzE4Myw3IEBACiAKICNpZmRlZiBDT05GSUdfTkVUTEFCRUwKIHZvaWQgY2lwc29fdjRfY2FjaGVfaW52YWxpZGF0ZSh2b2lkKTsKLWludCBjaXBzb192NF9jYWNoZV9hZGQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCBjaXBzb192NF9jYWNoZV9hZGQoY29uc3QgdW5zaWduZWQgY2hhciAqY2lwc29fcHRyLAogCQkgICAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGNpcHNvX3Y0X2NhY2hlX2ludmFsaWRhdGUodm9pZCkKQEAgLTE5OCw3ICsxOTEsNyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY2lwc29fdjRfY2FjaGVfYWRkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgaW5saW5lIGludCBjaXBzb192NF9jYWNoZV9hZGQoY29uc3QgdW5zaWduZWQgY2hhciAqY2lwc29fcHRyLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKIHsKIAlyZXR1cm4gMDsKQEAgLTIxMSw2ICsyMDQsOCBAQAogCiAjaWZkZWYgQ09ORklHX05FVExBQkVMCiB2b2lkIGNpcHNvX3Y0X2Vycm9yKHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnJvciwgdTMyIGdhdGV3YXkpOworaW50IGNpcHNvX3Y0X2dldGF0dHIoY29uc3QgdW5zaWduZWQgY2hhciAqY2lwc28sCisJCSAgICAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7CiBpbnQgY2lwc29fdjRfc29ja19zZXRhdHRyKHN0cnVjdCBzb2NrICpzaywKIAkJCSAgY29uc3Qgc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwKIAkJCSAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cik7CkBAIC0yMjYsNiArMjIxLDcgQEAKIGludCBjaXBzb192NF9za2J1ZmZfZGVsYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBjaXBzb192NF9za2J1ZmZfZ2V0YXR0cihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpOwordW5zaWduZWQgY2hhciAqY2lwc29fdjRfb3B0cHRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpOwogaW50IGNpcHNvX3Y0X3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGNoYXIgKipvcHRpb24pOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBjaXBzb192NF9lcnJvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtMjM1LDYgKzIzMSwxMiBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgY2lwc29fdjRfZ2V0YXR0cihjb25zdCB1bnNpZ25lZCBjaGFyICpjaXBzbywKKwkJCQkgICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQoreworCXJldHVybiAtRU5PU1lTOworfQorCiBzdGF0aWMgaW5saW5lIGludCBjaXBzb192NF9zb2NrX3NldGF0dHIoc3RydWN0IHNvY2sgKnNrLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWYsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKQEAgLTI4Miw2ICsyODQsMTEgQEAKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICpjaXBzb192NF9vcHRwdHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgY2lwc29fdjRfdmFsaWRhdGUoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgdW5zaWduZWQgY2hhciAqKm9wdGlvbikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2Zsb3dfa2V5cy5oIGIvaW5jbHVkZS9uZXQvZmxvd19rZXlzLmgKaW5kZXggN2VlMmRmMC4uZGM4ZmQ4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZmxvd19rZXlzLmgKKysrIGIvaW5jbHVkZS9uZXQvZmxvd19rZXlzLmgKQEAgLTIyLDkgKzIyLDkgQEAKIAkJX19iZTMyIHBvcnRzOwogCQlfX2JlMTYgcG9ydDE2WzJdOwogCX07Ci0JdTE2IHRob2ZmOwotCXUxNiBuX3Byb3RvOwotCXU4IGlwX3Byb3RvOworCXUxNgl0aG9mZjsKKwlfX2JlMTYJbl9wcm90bzsKKwl1OAlpcF9wcm90bzsKIH07CiAKIGJvb2wgX19za2JfZmxvd19kaXNzZWN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBmbG93X2tleXMgKmZsb3csCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCmluZGV4IDZjOTI0MTUuLjA1NzRhYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCisrKyBiL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oCkBAIC0yMTEsNiArMjExLDIzIEBACiB9CiAKIC8qKgorICogZ2VubG1zZ19wYXJzZSAtIHBhcnNlIGF0dHJpYnV0ZXMgb2YgYSBnZW5ldGxpbmsgbWVzc2FnZQorICogQG5saDogbmV0bGluayBtZXNzYWdlIGhlYWRlcgorICogQGZhbWlseTogZ2VuZXRsaW5rIG1lc3NhZ2UgZmFtaWx5CisgKiBAdGI6IGRlc3RpbmF0aW9uIGFycmF5IHdpdGggbWF4dHlwZSsxIGVsZW1lbnRzCisgKiBAbWF4dHlwZTogbWF4aW11bSBhdHRyaWJ1dGUgdHlwZSB0byBiZSBleHBlY3RlZAorICogQHBvbGljeTogdmFsaWRhdGlvbiBwb2xpY3kKKyAqICovCitzdGF0aWMgaW5saW5lIGludCBnZW5sbXNnX3BhcnNlKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJCWNvbnN0IHN0cnVjdCBnZW5sX2ZhbWlseSAqZmFtaWx5LAorCQkJCXN0cnVjdCBubGF0dHIgKnRiW10sIGludCBtYXh0eXBlLAorCQkJCWNvbnN0IHN0cnVjdCBubGFfcG9saWN5ICpwb2xpY3kpCit7CisJcmV0dXJuIG5sbXNnX3BhcnNlKG5saCwgZmFtaWx5LT5oZHJzaXplICsgR0VOTF9IRFJMRU4sIHRiLCBtYXh0eXBlLAorCQkJICAgcG9saWN5KTsKK30KKworLyoqCiAgKiBnZW5sX2R1bXBfY2hlY2tfY29uc2lzdGVudCAtIGNoZWNrIGlmIHNlcXVlbmNlIGlzIGNvbnNpc3RlbnQgYW5kIGFkdmVydGlzZSBpZiBub3QKICAqIEBjYjogbmV0bGluayBjYWxsYmFjayBzdHJ1Y3R1cmUgdGhhdCBzdG9yZXMgdGhlIHNlcXVlbmNlIG51bWJlcgogICogQHVzZXJfaGRyOiB1c2VyIGhlYWRlciBhcyByZXR1cm5lZCBmcm9tIGdlbmxtc2dfcHV0KCkKQEAgLTI1MCw5ICsyNjcsOSBAQAogICogQHNrYjogc29ja2V0IGJ1ZmZlciB0aGUgbWVzc2FnZSBpcyBzdG9yZWQgaW4KICAqIEBoZHI6IHVzZXIgc3BlY2lmaWMgaGVhZGVyCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGdlbmxtc2dfZW5kKHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKmhkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5sbXNnX2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIpCiB7Ci0JcmV0dXJuIG5sbXNnX2VuZChza2IsIGhkciAtIEdFTkxfSERSTEVOIC0gTkxNU0dfSERSTEVOKTsKKwlubG1zZ19lbmQoc2tiLCBoZHIgLSBHRU5MX0hEUkxFTiAtIE5MTVNHX0hEUkxFTik7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZ2VuZXZlLmggYi9pbmNsdWRlL25ldC9nZW5ldmUuaAppbmRleCAxMTIxMzJjLi4xNGZiOGQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9nZW5ldmUuaAorKysgYi9pbmNsdWRlL25ldC9nZW5ldmUuaApAQCAtNjgsMTMgKzY4LDEyIEBACiB0eXBlZGVmIHZvaWQgKGdlbmV2ZV9yY3ZfdCkoc3RydWN0IGdlbmV2ZV9zb2NrICpncywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIHN0cnVjdCBnZW5ldmVfc29jayB7Ci0Jc3RydWN0IGhsaXN0X25vZGUJaGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCWdlbmV2ZV9yY3ZfdAkJKnJjdjsKIAl2b2lkCQkJKnJjdl9kYXRhOwotCXN0cnVjdCB3b3JrX3N0cnVjdAlkZWxfd29yazsKIAlzdHJ1Y3Qgc29ja2V0CQkqc29jazsKIAlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKLQlhdG9taWNfdAkJcmVmY250OworCWludAkJCXJlZmNudDsKIAlzdHJ1Y3QgdWRwX29mZmxvYWQJdWRwX29mZmxvYWRzOwogfTsKIApAQCAtOTEsNyArOTAsNyBAQAogCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHNyYywgX19iZTMyIGRzdCwgX191OCB0b3MsCiAJCSAgICBfX3U4IHR0bCwgX19iZTE2IGRmLCBfX2JlMTYgc3JjX3BvcnQsIF9fYmUxNiBkc3RfcG9ydCwKIAkJICAgIF9fYmUxNiB0dW5fZmxhZ3MsIHU4IHZuaVszXSwgdTggb3B0X2xlbiwgdTggKm9wdCwKLQkJICAgIGJvb2wgeG5ldCk7CisJCSAgICBib29sIGNzdW0sIGJvb2wgeG5ldCk7CiAjZW5kaWYgLyppZmRlZiBDT05GSUdfSU5FVCAqLwogCiAjZW5kaWYgLyppZmRlZl9fTkVUX0dFTkVWRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ncm9fY2VsbHMuaCBiL2luY2x1ZGUvbmV0L2dyb19jZWxscy5oCmluZGV4IDczNGQ5YjUuLjBmNzEyYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2dyb19jZWxscy5oCisrKyBiL2luY2x1ZGUvbmV0L2dyb19jZWxscy5oCkBAIC04LDI1ICs4LDIzIEBACiBzdHJ1Y3QgZ3JvX2NlbGwgewogCXN0cnVjdCBza19idWZmX2hlYWQJbmFwaV9za2JzOwogCXN0cnVjdCBuYXBpX3N0cnVjdAluYXBpOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOworfTsKIAogc3RydWN0IGdyb19jZWxscyB7Ci0JdW5zaWduZWQgaW50CQlncm9fY2VsbHNfbWFzazsKLQlzdHJ1Y3QgZ3JvX2NlbGwJCSpjZWxsczsKKwlzdHJ1Y3QgZ3JvX2NlbGwgX19wZXJjcHUJKmNlbGxzOwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGdyb19jZWxsc19yZWNlaXZlKHN0cnVjdCBncm9fY2VsbHMgKmdjZWxscywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlzdHJ1Y3QgZ3JvX2NlbGwgKmNlbGwgPSBnY2VsbHMtPmNlbGxzOworCXN0cnVjdCBncm9fY2VsbCAqY2VsbDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CiAKLQlpZiAoIWNlbGwgfHwgc2tiX2Nsb25lZChza2IpIHx8ICEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfR1JPKSkgeworCWlmICghZ2NlbGxzLT5jZWxscyB8fCBza2JfY2xvbmVkKHNrYikgfHwgIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9HUk8pKSB7CiAJCW5ldGlmX3J4KHNrYik7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoc2tiX3J4X3F1ZXVlX3JlY29yZGVkKHNrYikpCi0JCWNlbGwgKz0gc2tiX2dldF9yeF9xdWV1ZShza2IpICYgZ2NlbGxzLT5ncm9fY2VsbHNfbWFzazsKKwljZWxsID0gdGhpc19jcHVfcHRyKGdjZWxscy0+Y2VsbHMpOwogCiAJaWYgKHNrYl9xdWV1ZV9sZW4oJmNlbGwtPm5hcGlfc2ticykgPiBuZXRkZXZfbWF4X2JhY2tsb2cpIHsKIAkJYXRvbWljX2xvbmdfaW5jKCZkZXYtPnJ4X2Ryb3BwZWQpOwpAQCAtNzIsMTUgKzcwLDEyIEBACiB7CiAJaW50IGk7CiAKLQlnY2VsbHMtPmdyb19jZWxsc19tYXNrID0gcm91bmR1cF9wb3dfb2ZfdHdvKG5ldGlmX2dldF9udW1fZGVmYXVsdF9yc3NfcXVldWVzKCkpIC0gMTsKLQlnY2VsbHMtPmNlbGxzID0ga2NhbGxvYyhnY2VsbHMtPmdyb19jZWxsc19tYXNrICsgMSwKLQkJCQlzaXplb2Yoc3RydWN0IGdyb19jZWxsKSwKLQkJCQlHRlBfS0VSTkVMKTsKKwlnY2VsbHMtPmNlbGxzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBncm9fY2VsbCk7CiAJaWYgKCFnY2VsbHMtPmNlbGxzKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvciAoaSA9IDA7IGkgPD0gZ2NlbGxzLT5ncm9fY2VsbHNfbWFzazsgaSsrKSB7Ci0JCXN0cnVjdCBncm9fY2VsbCAqY2VsbCA9IGdjZWxscy0+Y2VsbHMgKyBpOworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCXN0cnVjdCBncm9fY2VsbCAqY2VsbCA9IHBlcl9jcHVfcHRyKGdjZWxscy0+Y2VsbHMsIGkpOwogCiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNlbGwtPm5hcGlfc2ticyk7CiAJCW5ldGlmX25hcGlfYWRkKGRldiwgJmNlbGwtPm5hcGksIGdyb19jZWxsX3BvbGwsIDY0KTsKQEAgLTkxLDE2ICs4NiwxNiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3JvX2NlbGxzX2Rlc3Ryb3koc3RydWN0IGdyb19jZWxscyAqZ2NlbGxzKQogewotCXN0cnVjdCBncm9fY2VsbCAqY2VsbCA9IGdjZWxscy0+Y2VsbHM7CiAJaW50IGk7CiAKLQlpZiAoIWNlbGwpCisJaWYgKCFnY2VsbHMtPmNlbGxzKQogCQlyZXR1cm47Ci0JZm9yIChpID0gMDsgaSA8PSBnY2VsbHMtPmdyb19jZWxsc19tYXNrOyBpKyssY2VsbCsrKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKKwkJc3RydWN0IGdyb19jZWxsICpjZWxsID0gcGVyX2NwdV9wdHIoZ2NlbGxzLT5jZWxscywgaSk7CiAJCW5ldGlmX25hcGlfZGVsKCZjZWxsLT5uYXBpKTsKIAkJc2tiX3F1ZXVlX3B1cmdlKCZjZWxsLT5uYXBpX3NrYnMpOwogCX0KLQlrZnJlZShnY2VsbHMtPmNlbGxzKTsKKwlmcmVlX3BlcmNwdShnY2VsbHMtPmNlbGxzKTsKIAlnY2VsbHMtPmNlbGxzID0gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWVlZTgwMjE1NF9uZXRkZXYuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxNTRfbmV0ZGV2LmgKaW5kZXggODNiYjhhNzMuLjk0YTI5NzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2llZWU4MDIxNTRfbmV0ZGV2LmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjE1NF9uZXRkZXYuaApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxNTQuaD4KIAorI2luY2x1ZGUgPG5ldC9jZmc4MDIxNTQuaD4KKwogc3RydWN0IGllZWU4MDIxNTRfc2VjaGRyIHsKICNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKIAl1OCBsZXZlbDozLApAQCAtMzM3LDcgKzMzOSw3IEBACiAJczggZnJhbWVfcmV0cmllczsKIAogCWJvb2wgbGJ0OwotCXU4IGNjYV9tb2RlOworCXN0cnVjdCB3cGFuX3BoeV9jY2EgY2NhOwogCXMzMiBjY2FfZWRfbGV2ZWw7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaAppbmRleCA4NDhlODVjLi41OTc2YmRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfY29ubmVjdGlvbl9zb2NrLmgKQEAgLTk4LDcgKzk4LDggQEAKIAljb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICppY3NrX2NhX29wczsKIAljb25zdCBzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2tfYWZfb3BzICppY3NrX2FmX29wczsKIAl1bnNpZ25lZCBpbnQJCSAgKCppY3NrX3N5bmNfbXNzKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiBwbXR1KTsKLQlfX3U4CQkJICBpY3NrX2NhX3N0YXRlOworCV9fdTgJCQkgIGljc2tfY2Ffc3RhdGU6NywKKwkJCQkgIGljc2tfY2FfZHN0X2xvY2tlZDoxOwogCV9fdTgJCQkgIGljc2tfcmV0cmFuc21pdHM7CiAJX191OAkJCSAgaWNza19wZW5kaW5nOwogCV9fdTgJCQkgIGljc2tfYmFja29mZjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKaW5kZXggYTgyOWI3Ny4uZWIxNmM3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKQEAgLTE2LDcgKzE2LDcgQEAKICNpZm5kZWYgX0lORVRfU09DS19ICiAjZGVmaW5lIF9JTkVUX1NPQ0tfSAogCi0KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9rbWVtY2hlY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMTg0LDYgKzE4NCw3IEBACiAJCQkJbWNfYWxsOjEsCiAJCQkJbm9kZWZyYWc6MTsKIAlfX3U4CQkJcmN2X3RvczsKKwlfX3U4CQkJY29udmVydF9jc3VtOwogCWludAkJCXVjX2luZGV4OwogCWludAkJCW1jX2luZGV4OwogCV9fYmUzMgkJCW1jX2FkZHI7CkBAIC0xOTQsNiArMTk1LDE2IEBACiAjZGVmaW5lIElQQ09SS19PUFQJMQkvKiBpcC1vcHRpb25zIGhhcyBiZWVuIGhlbGQgaW4gaXBjb3JrLm9wdCAqLwogI2RlZmluZSBJUENPUktfQUxMRlJBRwkyCS8qIGFsd2F5cyBmcmFnbWVudCAoZm9yIGlwdjYgZm9yIG5vdykgKi8KIAorLyogY21zZyBmbGFncyBmb3IgaW5ldCAqLworI2RlZmluZSBJUF9DTVNHX1BLVElORk8JCUJJVCgwKQorI2RlZmluZSBJUF9DTVNHX1RUTAkJQklUKDEpCisjZGVmaW5lIElQX0NNU0dfVE9TCQlCSVQoMikKKyNkZWZpbmUgSVBfQ01TR19SRUNWT1BUUwlCSVQoMykKKyNkZWZpbmUgSVBfQ01TR19SRVRPUFRTCQlCSVQoNCkKKyNkZWZpbmUgSVBfQ01TR19QQVNTU0VDCQlCSVQoNSkKKyNkZWZpbmUgSVBfQ01TR19PUklHRFNUQUREUglCSVQoNikKKyNkZWZpbmUgSVBfQ01TR19DSEVDS1NVTQlCSVQoNykKKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0X3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKIAlyZXR1cm4gKHN0cnVjdCBpbmV0X3NvY2sgKilzazsKQEAgLTI1MCw0ICsyNjEsMjAgQEAKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmV0X2luY19jb252ZXJ0X2NzdW0oc3RydWN0IHNvY2sgKnNrKQoreworCWluZXRfc2soc2spLT5jb252ZXJ0X2NzdW0rKzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluZXRfZGVjX2NvbnZlcnRfY3N1bShzdHJ1Y3Qgc29jayAqc2spCit7CisJaWYgKGluZXRfc2soc2spLT5jb252ZXJ0X2NzdW0gPiAwKQorCQlpbmV0X3NrKHNrKS0+Y29udmVydF9jc3VtLS07Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpbmV0X2dldF9jb252ZXJ0X2NzdW0oc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiAhIWluZXRfc2soc2spLT5jb252ZXJ0X2NzdW07Cit9CisKICNlbmRpZgkvKiBfSU5FVF9TT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IDBiYjYyMDcuLjAyNWM2MWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtMzksMTEgKzM5LDEyIEBACiAJc3RydWN0IGlwX29wdGlvbnMJb3B0OwkJLyogQ29tcGlsZWQgSVAgb3B0aW9ucwkJKi8KIAl1bnNpZ25lZCBjaGFyCQlmbGFnczsKIAotI2RlZmluZSBJUFNLQl9GT1JXQVJERUQJCTEKLSNkZWZpbmUgSVBTS0JfWEZSTV9UVU5ORUxfU0laRQkyCi0jZGVmaW5lIElQU0tCX1hGUk1fVFJBTlNGT1JNRUQJNAotI2RlZmluZSBJUFNLQl9GUkFHX0NPTVBMRVRFCTgKLSNkZWZpbmUgSVBTS0JfUkVST1VURUQJCTE2CisjZGVmaW5lIElQU0tCX0ZPUldBUkRFRAkJQklUKDApCisjZGVmaW5lIElQU0tCX1hGUk1fVFVOTkVMX1NJWkUJQklUKDEpCisjZGVmaW5lIElQU0tCX1hGUk1fVFJBTlNGT1JNRUQJQklUKDIpCisjZGVmaW5lIElQU0tCX0ZSQUdfQ09NUExFVEUJQklUKDMpCisjZGVmaW5lIElQU0tCX1JFUk9VVEVECQlCSVQoNCkKKyNkZWZpbmUgSVBTS0JfRE9SRURJUkVDVAlCSVQoNSkKIAogCXUxNgkJCWZyYWdfbWF4X3NpemU7CiB9OwpAQCAtMTgwLDcgKzE4MSw3IEBACiAJcmV0dXJuIChhcmctPmZsYWdzICYgSVBfUkVQTFlfQVJHX05PU1JDQ0hFQ0spID8gRkxPV0lfRkxBR19BTllTUkMgOiAwOwogfQogCi12b2lkIGlwX3NlbmRfdW5pY2FzdF9yZXBseShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsCit2b2lkIGlwX3NlbmRfdW5pY2FzdF9yZXBseShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICBjb25zdCBzdHJ1Y3QgaXBfb3B0aW9ucyAqc29wdCwKIAkJCSAgIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLAogCQkJICAgY29uc3Qgc3RydWN0IGlwX3JlcGx5X2FyZyAqYXJnLApAQCAtNTM3LDcgKzUzOCw3IEBACiAgKi8KIAogdm9pZCBpcHY0X3BrdGluZm9fcHJlcGFyZShjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwotdm9pZCBpcF9jbXNnX3JlY3Yoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQpOwogaW50IGlwX2Ntc2dfc2VuZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBtc2doZHIgKm1zZywKIAkJIHN0cnVjdCBpcGNtX2Nvb2tpZSAqaXBjLCBib29sIGFsbG93X2lwdjYpOwogaW50IGlwX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLApAQCAtNTU3LDYgKzU1OCwxMSBAQAogdm9pZCBpcF9sb2NhbF9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIGludCBlcnIsIF9fYmUzMiBkYWRkciwgX19iZTE2IGRwb3J0LAogCQkgICAgdTMyIGluZm8pOwogCitzdGF0aWMgaW5saW5lIHZvaWQgaXBfY21zZ19yZWN2KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpcF9jbXNnX3JlY3Zfb2Zmc2V0KG1zZywgc2tiLCAwKTsKK30KKwogYm9vbCBpY21wX2dsb2JhbF9hbGxvdyh2b2lkKTsKIGV4dGVybiBpbnQgc3lzY3RsX2ljbXBfbXNnc19wZXJfc2VjOwogZXh0ZXJuIGludCBzeXNjdGxfaWNtcF9tc2dzX2J1cnN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCmluZGV4IDhlZWEzNWQuLjIwZTgwZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaAorKysgYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKQEAgLTc0LDYgKzc0LDExIEBACiAjZGVmaW5lIEZJQjZfU1VCVFJFRShmbikJKChmbiktPnN1YnRyZWUpCiAjZW5kaWYKIAorc3RydWN0IG14Nl9jb25maWcgeworCWNvbnN0IHUzMiAqbXg7CisJREVDTEFSRV9CSVRNQVAobXhfdmFsaWQsIFJUQVhfTUFYKTsKK307CisKIC8qCiAgKglyb3V0aW5nIGluZm9ybWF0aW9uCiAgKgpAQCAtMjkxLDkgKzI5Niw4IEBACiB2b2lkIGZpYjZfY2xlYW5fYWxsKHN0cnVjdCBuZXQgKm5ldCwgaW50ICgqZnVuYykoc3RydWN0IHJ0Nl9pbmZvICosIHZvaWQgKmFyZyksCiAJCSAgICB2b2lkICphcmcpOwogCi1pbnQgZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IG5sX2luZm8gKmluZm8sCi0JICAgICBzdHJ1Y3QgbmxhdHRyICpteCwgaW50IG14X2xlbik7Ci0KK2ludCBmaWI2X2FkZChzdHJ1Y3QgZmliNl9ub2RlICpyb290LCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LAorCSAgICAgc3RydWN0IG5sX2luZm8gKmluZm8sIHN0cnVjdCBteDZfY29uZmlnICpteGMpOwogaW50IGZpYjZfZGVsKHN0cnVjdCBydDZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvKTsKIAogdm9pZCBpbmV0Nl9ydF9ub3RpZnkoaW50IGV2ZW50LCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmggYi9pbmNsdWRlL25ldC9pcDZfdHVubmVsLmgKaW5kZXggOTMyNmM0MS4uNzZjMDkxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3R1bm5lbC5oCisrKyBiL2luY2x1ZGUvbmV0L2lwNl90dW5uZWwuaApAQCAtNzAsNiArNzAsNyBAQAogX191MTYgaXA2X3RubF9wYXJzZV90bHZfZW5jX2xpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3U4ICpyYXcpOwogX191MzIgaXA2X3RubF9nZXRfY2FwKHN0cnVjdCBpcDZfdG5sICp0LCBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmxhZGRyLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnJhZGRyKTsKK3N0cnVjdCBuZXQgKmlwNl90bmxfZ2V0X2xpbmtfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXA2dHVubmVsX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXBfZmliLmgKaW5kZXggMDlhODE5ZS4uNWJkMTIwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfZmliLmgKKysrIGIvaW5jbHVkZS9uZXQvaXBfZmliLmgKQEAgLTIyMiwxNiArMjIyLDE5IEBACiBzdGF0aWMgaW5saW5lIGludCBmaWJfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGZsb3dpNCAqZmxwLAogCQkJICAgICBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKQogewotCXN0cnVjdCBmaWJfdGFibGUgKnRhYmxlOworCWludCBlcnIgPSAtRU5FVFVOUkVBQ0g7CiAKLQl0YWJsZSA9IGZpYl9nZXRfdGFibGUobmV0LCBSVF9UQUJMRV9MT0NBTCk7Ci0JaWYgKCFmaWJfdGFibGVfbG9va3VwKHRhYmxlLCBmbHAsIHJlcywgRklCX0xPT0tVUF9OT1JFRikpCi0JCXJldHVybiAwOworCXJjdV9yZWFkX2xvY2soKTsKIAotCXRhYmxlID0gZmliX2dldF90YWJsZShuZXQsIFJUX1RBQkxFX01BSU4pOwotCWlmICghZmliX3RhYmxlX2xvb2t1cCh0YWJsZSwgZmxwLCByZXMsIEZJQl9MT09LVVBfTk9SRUYpKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gLUVORVRVTlJFQUNIOworCWlmICghZmliX3RhYmxlX2xvb2t1cChmaWJfZ2V0X3RhYmxlKG5ldCwgUlRfVEFCTEVfTE9DQUwpLCBmbHAsIHJlcywKKwkJCSAgICAgIEZJQl9MT09LVVBfTk9SRUYpIHx8CisJICAgICFmaWJfdGFibGVfbG9va3VwKGZpYl9nZXRfdGFibGUobmV0LCBSVF9UQUJMRV9NQUlOKSwgZmxwLCByZXMsCisJCQkgICAgICBGSUJfTE9PS1VQX05PUkVGKSkKKwkJZXJyID0gMDsKKworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIGVycjsKIH0KIAogI2Vsc2UgLyogQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUyAqLwpAQCAtMjQ3LDIwICsyNTAsMjUgQEAKIAkJCSAgICAgc3RydWN0IGZpYl9yZXN1bHQgKnJlcykKIHsKIAlpZiAoIW5ldC0+aXB2NC5maWJfaGFzX2N1c3RvbV9ydWxlcykgeworCQlpbnQgZXJyID0gLUVORVRVTlJFQUNIOworCisJCXJjdV9yZWFkX2xvY2soKTsKKwogCQlyZXMtPnRjbGFzc2lkID0gMDsKLQkJaWYgKG5ldC0+aXB2NC5maWJfbG9jYWwgJiYKLQkJICAgICFmaWJfdGFibGVfbG9va3VwKG5ldC0+aXB2NC5maWJfbG9jYWwsIGZscCwgcmVzLAotCQkJCSAgICAgIEZJQl9MT09LVVBfTk9SRUYpKQotCQkJcmV0dXJuIDA7Ci0JCWlmIChuZXQtPmlwdjQuZmliX21haW4gJiYKLQkJICAgICFmaWJfdGFibGVfbG9va3VwKG5ldC0+aXB2NC5maWJfbWFpbiwgZmxwLCByZXMsCi0JCQkJICAgICAgRklCX0xPT0tVUF9OT1JFRikpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKG5ldC0+aXB2NC5maWJfZGVmYXVsdCAmJgotCQkgICAgIWZpYl90YWJsZV9sb29rdXAobmV0LT5pcHY0LmZpYl9kZWZhdWx0LCBmbHAsIHJlcywKLQkJCQkgICAgICBGSUJfTE9PS1VQX05PUkVGKSkKLQkJCXJldHVybiAwOwotCQlyZXR1cm4gLUVORVRVTlJFQUNIOworCQlpZiAoKG5ldC0+aXB2NC5maWJfbG9jYWwgJiYKKwkJICAgICAhZmliX3RhYmxlX2xvb2t1cChuZXQtPmlwdjQuZmliX2xvY2FsLCBmbHAsIHJlcywKKwkJCQkgICAgICAgRklCX0xPT0tVUF9OT1JFRikpIHx8CisJCSAgICAobmV0LT5pcHY0LmZpYl9tYWluICYmCisJCSAgICAgIWZpYl90YWJsZV9sb29rdXAobmV0LT5pcHY0LmZpYl9tYWluLCBmbHAsIHJlcywKKwkJCQkgICAgICAgRklCX0xPT0tVUF9OT1JFRikpIHx8CisJCSAgICAobmV0LT5pcHY0LmZpYl9kZWZhdWx0ICYmCisJCSAgICAgIWZpYl90YWJsZV9sb29rdXAobmV0LT5pcHY0LmZpYl9kZWZhdWx0LCBmbHAsIHJlcywKKwkJCQkgICAgICAgRklCX0xPT0tVUF9OT1JFRikpKQorCQkJZXJyID0gMDsKKworCQlyY3VfcmVhZF91bmxvY2soKTsKKworCQlyZXR1cm4gZXJyOwogCX0KIAlyZXR1cm4gX19maWJfbG9va3VwKG5ldCwgZmxwLCByZXMpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oIGIvaW5jbHVkZS9uZXQvaXBfdHVubmVscy5oCmluZGV4IDI1YTU5ZWIuLjJjNDcwNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3R1bm5lbHMuaAorKysgYi9pbmNsdWRlL25ldC9pcF90dW5uZWxzLmgKQEAgLTk3LDcgKzk3LDEwIEBACiAjZGVmaW5lIFRVTk5FTF9ET05UX0ZSQUdNRU5UICAgIF9fY3B1X3RvX2JlMTYoMHgwMTAwKQogI2RlZmluZSBUVU5ORUxfT0FNCQlfX2NwdV90b19iZTE2KDB4MDIwMCkKICNkZWZpbmUgVFVOTkVMX0NSSVRfT1BUCQlfX2NwdV90b19iZTE2KDB4MDQwMCkKLSNkZWZpbmUgVFVOTkVMX09QVElPTlNfUFJFU0VOVAlfX2NwdV90b19iZTE2KDB4MDgwMCkKKyNkZWZpbmUgVFVOTkVMX0dFTkVWRV9PUFQJX19jcHVfdG9fYmUxNigweDA4MDApCisjZGVmaW5lIFRVTk5FTF9WWExBTl9PUFQJX19jcHVfdG9fYmUxNigweDEwMDApCisKKyNkZWZpbmUgVFVOTkVMX09QVElPTlNfUFJFU0VOVAkoVFVOTkVMX0dFTkVWRV9PUFQgfCBUVU5ORUxfVlhMQU5fT1BUKQogCiBzdHJ1Y3QgdG5sX3B0a19pbmZvIHsKIAlfX2JlMTYgZmxhZ3M7CkBAIC0xMzgsNiArMTQxLDcgQEAKIGludCBpcF90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgaXBfdHVubmVsX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHZvaWQgIGlwX3R1bm5lbF9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOworc3RydWN0IG5ldCAqaXBfdHVubmVsX2dldF9saW5rX25ldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGludCBpcF90dW5uZWxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBpbnQgaXBfdG5sX25ldF9pZCwKIAkJICAgICAgIHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMsIGNoYXIgKmRldm5hbWUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcHY2LmggYi9pbmNsdWRlL25ldC9pcHY2LmgKaW5kZXggNDI5MjkyOS4uNGM5ZmUyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2lwdjYuaApAQCAtNjcxLDYgKzY3MSw3IEBACiAJcmV0dXJuIF9faXB2Nl9hZGRyX2RpZmYoYTEsIGEyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CiB9CiAKK3ZvaWQgaXB2Nl9zZWxlY3RfaWRlbnQoc3RydWN0IGZyYWdfaGRyICpmaGRyLCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0KTsKIHZvaWQgaXB2Nl9wcm94eV9zZWxlY3RfaWRlbnQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIGludCBpcDZfZHN0X2hvcGxpbWl0KHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7CkBAIC03MDgsNyArNzA5LDcgQEAKIAkJCQkJX19iZTMyIGZsb3dsYWJlbCwgYm9vbCBhdXRvbGFiZWwpCiB7CiAJaWYgKCFmbG93bGFiZWwgJiYgKGF1dG9sYWJlbCB8fCBuZXQtPmlwdjYuc3lzY3RsLmF1dG9fZmxvd2xhYmVscykpIHsKLQkJX19iZTMyIGhhc2g7CisJCXUzMiBoYXNoOwogCiAJCWhhc2ggPSBza2JfZ2V0X2hhc2goc2tiKTsKIApAQCAtNzE4LDcgKzcxOSw3IEBACiAJCSAqLwogCQloYXNoIF49IGhhc2ggPj4gMTI7CiAKLQkJZmxvd2xhYmVsID0gaGFzaCAmIElQVjZfRkxPV0xBQkVMX01BU0s7CisJCWZsb3dsYWJlbCA9IChfX2ZvcmNlIF9fYmUzMiloYXNoICYgSVBWNl9GTE9XTEFCRUxfTUFTSzsKIAl9CiAKIAlyZXR1cm4gZmxvd2xhYmVsOwpAQCAtNzg4LDYgKzc4OSwyNSBAQAogCiB2b2lkIGlwNl9mbHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spOwogCitpbnQgaXA2X3NlbmRfc2tiKHN0cnVjdCBza19idWZmICpza2IpOworCitzdHJ1Y3Qgc2tfYnVmZiAqX19pcDZfbWFrZV9za2Ioc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSwKKwkJCSAgICAgICBzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgKmNvcmssCisJCQkgICAgICAgc3RydWN0IGluZXQ2X2NvcmsgKnY2X2NvcmspOworc3RydWN0IHNrX2J1ZmYgKmlwNl9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssCisJCQkgICAgIGludCBnZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LAorCQkJCQkgaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiksCisJCQkgICAgIHZvaWQgKmZyb20sIGludCBsZW5ndGgsIGludCB0cmFuc2hkcmxlbiwKKwkJCSAgICAgaW50IGhsaW1pdCwgaW50IHRjbGFzcywgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQsCisJCQkgICAgIHN0cnVjdCBmbG93aTYgKmZsNiwgc3RydWN0IHJ0Nl9pbmZvICpydCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgZG9udGZyYWcpOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICppcDZfZmluaXNoX3NrYihzdHJ1Y3Qgc29jayAqc2spCit7CisJcmV0dXJuIF9faXA2X21ha2Vfc2tiKHNrLCAmc2stPnNrX3dyaXRlX3F1ZXVlLCAmaW5ldF9zayhzayktPmNvcmssCisJCQkgICAgICAmaW5ldDZfc2soc2spLT5jb3JrKTsKK30KKwogaW50IGlwNl9kc3RfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqKmRzdCwgc3RydWN0IGZsb3dpNiAqZmw2KTsKIHN0cnVjdCBkc3RfZW50cnkgKmlwNl9kc3RfbG9va3VwX2Zsb3coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k2ICpmbDYsCiAJCQkJICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyICpmaW5hbF9kc3QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBiL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKaW5kZXggMjljN2JlOC4uZDUyOTE0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCkBAIC0zNzYsNiArMzc2LDEyIEBACiAgKiBAc3NpZF9sZW46IExlbmd0aCBvZiBTU0lEIGdpdmVuIGluIEBzc2lkLgogICogQGhpZGRlbl9zc2lkOiBUaGUgU1NJRCBvZiB0aGUgY3VycmVudCB2aWYgaXMgaGlkZGVuLiBPbmx5IHZhbGlkIGluIEFQLW1vZGUuCiAgKiBAdHhwb3dlcjogVFggcG93ZXIgaW4gZEJtCisgKiBAdHhwb3dlcl90eXBlOiBUWCBwb3dlciBhZGp1c3RtZW50IHVzZWQgdG8gY29udHJvbCBwZXIgcGFja2V0IFRyYW5zbWl0CisgKglQb3dlciBDb250cm9sIChUUEMpIGluIGxvd2VyIGRyaXZlciBmb3IgdGhlIGN1cnJlbnQgdmlmLiBJbiBwYXJ0aWN1bGFyCisgKglUUEMgaXMgZW5hYmxlZCBpZiB2YWx1ZSBwYXNzZWQgaW4gJXR4cG93ZXJfdHlwZSBpcworICoJTkw4MDIxMV9UWF9QT1dFUl9MSU1JVEVEIChhbGxvdyB1c2luZyBsZXNzIHRoYW4gc3BlY2lmaWVkIGZyb20KKyAqCXVzZXJzcGFjZSksIHdoZXJlYXMgVFBDIGlzIGRpc2FibGVkIGlmICV0eHBvd2VyX3R5cGUgaXMgc2V0IHRvCisgKglOTDgwMjExX1RYX1BPV0VSX0ZJWEVEICh1c2UgdmFsdWUgY29uZmlndXJlZCBmcm9tIHVzZXJzcGFjZSkKICAqIEBwMnBfbm9hX2F0dHI6IFAyUCBOb0EgYXR0cmlidXRlIGZvciBQMlAgcG93ZXJzYXZlCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgewpAQCAtNDExLDYgKzQxNyw3IEBACiAJc2l6ZV90IHNzaWRfbGVuOwogCWJvb2wgaGlkZGVuX3NzaWQ7CiAJaW50IHR4cG93ZXI7CisJZW51bSBubDgwMjExX3R4X3Bvd2VyX3NldHRpbmcgdHhwb3dlcl90eXBlOwogCXN0cnVjdCBpZWVlODAyMTFfcDJwX25vYV9hdHRyIHAycF9ub2FfYXR0cjsKIH07CiAKQEAgLTUwNSw4ICs1MTIsMTEgQEAKICAqIEBJRUVFODAyMTFfVFhfQ1RMX0RPTlRGUkFHOiBEb24ndCBmcmFnbWVudCB0aGlzIHBhY2tldCBldmVuIGlmIGl0CiAgKgl3b3VsZCBiZSBmcmFnbWVudGVkIGJ5IHNpemUgKHRoaXMgaXMgb3B0aW9uYWwsIG9ubHkgdXNlZCBmb3IKICAqCW1vbml0b3IgaW5qZWN0aW9uKS4KLSAqIEBJRUVFODAyMTFfVFhfQ1RMX1BTX1JFU1BPTlNFOiBUaGlzIGZyYW1lIGlzIGEgcmVzcG9uc2UgdG8gYSBwb2xsCi0gKglmcmFtZSAoUFMtUG9sbCBvciB1QVBTRCkuCisgKiBASUVFRTgwMjExX1RYX1NUQVRfTk9BQ0tfVFJBTlNNSVRURUQ6IEEgZnJhbWUgdGhhdCB3YXMgbWFya2VkIHdpdGgKKyAqCUlFRUU4MDIxMV9UWF9DVExfTk9fQUNLIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCB3aXRob3V0CisgKglhbnkgZXJyb3JzIChsaWtlIGlzc3VlcyBzcGVjaWZpYyB0byB0aGUgZHJpdmVyL0hXKS4KKyAqCVRoaXMgZmxhZyBtdXN0IG5vdCBiZSBzZXQgZm9yIGZyYW1lcyB0aGF0IGRvbid0IHJlcXVlc3Qgbm8tYWNrCisgKgliZWhhdmlvdXIgd2l0aCBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSy4KICAqCiAgKiBOb3RlOiBJZiB5b3UgaGF2ZSB0byBhZGQgbmV3IGZsYWdzIHRvIHRoZSBlbnVtZXJhdGlvbiwgdGhlbiBkb24ndAogICoJIGZvcmdldCB0byB1cGRhdGUgJUlFRUU4MDIxMV9UWF9URU1QT1JBUllfRkxBR1Mgd2hlbiBuZWNlc3NhcnkuCkBAIC01NDIsNyArNTUyLDcgQEAKIAlJRUVFODAyMTFfVFhfU1RBVFVTX0VPU1AJCT0gQklUKDI4KSwKIAlJRUVFODAyMTFfVFhfQ1RMX1VTRV9NSU5SQVRFCQk9IEJJVCgyOSksCiAJSUVFRTgwMjExX1RYX0NUTF9ET05URlJBRwkJPSBCSVQoMzApLAotCUlFRUU4MDIxMV9UWF9DVExfUFNfUkVTUE9OU0UJCT0gQklUKDMxKSwKKwlJRUVFODAyMTFfVFhfU1RBVF9OT0FDS19UUkFOU01JVFRFRAk9IEJJVCgzMSksCiB9OwogCiAjZGVmaW5lIElFRUU4MDIxMV9UWF9DVExfU1RCQ19TSElGVAkJMjMKQEAgLTU1MiwxMSArNTYyLDE0IEBACiAgKgogICogQElFRUU4MDIxMV9UWF9DVFJMX1BPUlRfQ1RSTF9QUk9UTzogdGhpcyBmcmFtZSBpcyBhIHBvcnQgY29udHJvbAogICoJcHJvdG9jb2wgZnJhbWUgKGUuZy4gRUFQKQorICogQElFRUU4MDIxMV9UWF9DVFJMX1BTX1JFU1BPTlNFOiBUaGlzIGZyYW1lIGlzIGEgcmVzcG9uc2UgdG8gYSBwb2xsCisgKglmcmFtZSAoUFMtUG9sbCBvciB1QVBTRCkuCiAgKgogICogVGhlc2UgZmxhZ3MgYXJlIHVzZWQgaW4gdHhfaW5mby0+Y29udHJvbC5mbGFncy4KICAqLwogZW51bSBtYWM4MDIxMV90eF9jb250cm9sX2ZsYWdzIHsKIAlJRUVFODAyMTFfVFhfQ1RSTF9QT1JUX0NUUkxfUFJPVE8JPSBCSVQoMCksCisJSUVFRTgwMjExX1RYX0NUUkxfUFNfUkVTUE9OU0UJCT0gQklUKDEpLAogfTsKIAogLyoKQEAgLTkyNSwxNSArOTM4LDEzIEBACiAgKiBUaGVzZSBmbGFncyBhcmUgdXNlZCB3aXRoIHRoZSBAdmh0X2ZsYWcgbWVtYmVyIG9mCiAgKgkmc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMuCiAgKiBAUlhfVkhUX0ZMQUdfODBNSFo6IDgwIE1IeiB3YXMgdXNlZAotICogQFJYX1ZIVF9GTEFHXzgwUDgwTUhaOiA4MCs4MCBNSHogd2FzIHVzZWQKICAqIEBSWF9WSFRfRkxBR18xNjBNSFo6IDE2MCBNSHogd2FzIHVzZWQKICAqIEBSWF9WSFRfRkxBR19CRjogcGFja2V0IHdhcyBiZWFtZm9ybWVkCiAgKi8KIGVudW0gbWFjODAyMTFfcnhfdmh0X2ZsYWdzIHsKIAlSWF9WSFRfRkxBR184ME1IWgkJPSBCSVQoMCksCi0JUlhfVkhUX0ZMQUdfODBQODBNSFoJCT0gQklUKDEpLAotCVJYX1ZIVF9GTEFHXzE2ME1IWgkJPSBCSVQoMiksCi0JUlhfVkhUX0ZMQUdfQkYJCQk9IEJJVCgzKSwKKwlSWF9WSFRfRkxBR18xNjBNSFoJCT0gQklUKDEpLAorCVJYX1ZIVF9GTEFHX0JGCQkJPSBCSVQoMiksCiB9OwogCiAvKioKQEAgLTExODEsMTAgKzExOTIsMTUgQEAKICAqCW1vbml0b3Jpbmcgb24gdGhpcyB2aXJ0dWFsIGludGVyZmFjZSAtLSBpLmUuIGl0IGNhbiBtb25pdG9yCiAgKgljb25uZWN0aW9uIHF1YWxpdHkgcmVsYXRlZCBwYXJhbWV0ZXJzLCBzdWNoIGFzIHRoZSBSU1NJIGxldmVsIGFuZAogICoJcHJvdmlkZSBub3RpZmljYXRpb25zIGlmIGNvbmZpZ3VyZWQgdHJpZ2dlciBsZXZlbHMgYXJlIHJlYWNoZWQuCisgKiBASUVFRTgwMjExX1ZJRl9TVVBQT1JUU19VQVBTRDogVGhlIGRldmljZSBjYW4gZG8gVS1BUFNEIGZvciB0aGlzCisgKglpbnRlcmZhY2UuIFRoaXMgZmxhZyBzaG91bGQgYmUgc2V0IGR1cmluZyBpbnRlcmZhY2UgYWRkaXRpb24sCisgKglidXQgbWF5IGJlIHNldC9jbGVhcmVkIGFzIGxhdGUgYXMgYXV0aGVudGljYXRpb24gdG8gYW4gQVAuIEl0IGlzCisgKglvbmx5IHZhbGlkIGZvciBtYW5hZ2VkL3N0YXRpb24gbW9kZSBpbnRlcmZhY2VzLgogICovCiBlbnVtIGllZWU4MDIxMV92aWZfZmxhZ3MgewogCUlFRUU4MDIxMV9WSUZfQkVBQ09OX0ZJTFRFUgkJPSBCSVQoMCksCiAJSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19DUU1fUlNTSQkJPSBCSVQoMSksCisJSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19VQVBTRAkJPSBCSVQoMiksCiB9OwogCiAvKioKQEAgLTEyNzAsMTkgKzEyODYsMjIgQEAKICAqCiAgKiBASUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWOiBUaGlzIGZsYWcgc2hvdWxkIGJlIHNldCBieSB0aGUKICAqCWRyaXZlciB0byBpbmRpY2F0ZSB0aGF0IGl0IHJlcXVpcmVzIElWIGdlbmVyYXRpb24gZm9yIHRoaXMKLSAqCXBhcnRpY3VsYXIga2V5LgorICoJcGFydGljdWxhciBrZXkuIFNldHRpbmcgdGhpcyBmbGFnIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCBTS0JzCisgKgl3aWxsIGhhdmUgc3VmZmljaWVudCB0YWlscm9vbSBmb3IgSUNWIG9yIE1JQy4KICAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQzogVGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgYnkKICAqCXRoZSBkcml2ZXIgZm9yIGEgVEtJUCBrZXkgaWYgaXQgcmVxdWlyZXMgTWljaGFlbCBNSUMKICAqCWdlbmVyYXRpb24gaW4gc29mdHdhcmUuCiAgKiBASUVFRTgwMjExX0tFWV9GTEFHX1BBSVJXSVNFOiBTZXQgYnkgbWFjODAyMTEsIHRoaXMgZmxhZyBpbmRpY2F0ZXMKICAqCXRoYXQgdGhlIGtleSBpcyBwYWlyd2lzZSByYXRoZXIgdGhlbiBhIHNoYXJlZCBrZXkuCiAgKiBASUVFRTgwMjExX0tFWV9GTEFHX1NXX01HTVRfVFg6IFRoaXMgZmxhZyBzaG91bGQgYmUgc2V0IGJ5IHRoZSBkcml2ZXIgZm9yIGEKLSAqCUNDTVAga2V5IGlmIGl0IHJlcXVpcmVzIENDTVAgZW5jcnlwdGlvbiBvZiBtYW5hZ2VtZW50IGZyYW1lcyAoTUZQKSB0bwotICoJYmUgZG9uZSBpbiBzb2Z0d2FyZS4KKyAqCUNDTVAvR0NNUCBrZXkgaWYgaXQgcmVxdWlyZXMgQ0NNUC9HQ01QIGVuY3J5cHRpb24gb2YgbWFuYWdlbWVudCBmcmFtZXMKKyAqCShNRlApIHRvIGJlIGRvbmUgaW4gc29mdHdhcmUuCiAgKiBASUVFRTgwMjExX0tFWV9GTEFHX1BVVF9JVl9TUEFDRTogVGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgYnkgdGhlIGRyaXZlcgogICoJaWYgc3BhY2Ugc2hvdWxkIGJlIHByZXBhcmVkIGZvciB0aGUgSVYsIGJ1dCB0aGUgSVYKICAqCWl0c2VsZiBzaG91bGQgbm90IGJlIGdlbmVyYXRlZC4gRG8gbm90IHNldCB0b2dldGhlciB3aXRoCi0gKglASUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWIG9uIHRoZSBzYW1lIGtleS4KKyAqCUBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYgb24gdGhlIHNhbWUga2V5LiBTZXR0aW5nIHRoaXMgZmxhZyBkb2VzCisgKglub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IFNLQnMgd2lsbCBoYXZlIHN1ZmZpY2llbnQgdGFpbHJvb20gZm9yIElDViBvcgorICoJTUlDLgogICogQElFRUU4MDIxMV9LRVlfRkxBR19SWF9NR01UOiBUaGlzIGtleSB3aWxsIGJlIHVzZWQgdG8gZGVjcnlwdCByZWNlaXZlZAogICoJbWFuYWdlbWVudCBmcmFtZXMuIFRoZSBmbGFnIGNhbiBoZWxwIGRyaXZlcnMgdGhhdCBoYXZlIGEgaGFyZHdhcmUKICAqCWNyeXB0byBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXNuJ3QgZGVhbCB3aXRoIG1hbmFnZW1lbnQgZnJhbWVzCkBAIC0xMjkxLDggKzEzMTAsMTEgQEAKICAqCVJYLCBpZiB5b3VyIGNyeXB0byBlbmdpbmUgY2FuJ3QgZGVhbCB3aXRoIFRYIHlvdSBjYW4gYWxzbyBzZXQgdGhlCiAgKgklSUVFRTgwMjExX0tFWV9GTEFHX1NXX01HTVRfVFggZmxhZyB0byBlbmNyeXB0IHN1Y2ggZnJhbWVzIGluIFNXLgogICogQElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVl9NR01UOiBUaGlzIGZsYWcgc2hvdWxkIGJlIHNldCBieSB0aGUKLSAqCWRyaXZlciBmb3IgYSBDQ01QIGtleSB0byBpbmRpY2F0ZSB0aGF0IGlzIHJlcXVpcmVzIElWIGdlbmVyYXRpb24KKyAqCWRyaXZlciBmb3IgYSBDQ01QL0dDTVAga2V5IHRvIGluZGljYXRlIHRoYXQgaXMgcmVxdWlyZXMgSVYgZ2VuZXJhdGlvbgogICoJb25seSBmb3IgbWFuYWdtZW50IGZyYW1lcyAoTUZQKS4KKyAqIEBJRUVFODAyMTFfS0VZX0ZMQUdfUkVTRVJWRV9UQUlMUk9PTTogVGhpcyBmbGFnIHNob3VsZCBiZSBzZXQgYnkgdGhlCisgKglkcml2ZXIgZm9yIGEga2V5IHRvIGluZGljYXRlIHRoYXQgc3VmZmljaWVudCB0YWlscm9vbSBtdXN0IGFsd2F5cworICoJYmUgcmVzZXJ2ZWQgZm9yIElDViBvciBNSUMsIGV2ZW4gd2hlbiBIVyBlbmNyeXB0aW9uIGlzIGVuYWJsZWQuCiAgKi8KIGVudW0gaWVlZTgwMjExX2tleV9mbGFncyB7CiAJSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWX01HTVQJPSBCSVQoMCksCkBAIC0xMzAyLDYgKzEzMjQsNyBAQAogCUlFRUU4MDIxMV9LRVlfRkxBR19TV19NR01UX1RYCQk9IEJJVCg0KSwKIAlJRUVFODAyMTFfS0VZX0ZMQUdfUFVUX0lWX1NQQUNFCQk9IEJJVCg1KSwKIAlJRUVFODAyMTFfS0VZX0ZMQUdfUlhfTUdNVAkJPSBCSVQoNiksCisJSUVFRTgwMjExX0tFWV9GTEFHX1JFU0VSVkVfVEFJTFJPT00JPSBCSVQoNyksCiB9OwogCiAvKioKQEAgLTE1ODAsMTEgKzE2MDMsNiBAQAogICogQElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRToKICAqCUhhcmR3YXJlIHN1cHBvcnRzIG1hbmFnZW1lbnQgZnJhbWUgcHJvdGVjdGlvbiAoTUZQLCBJRUVFIDgwMi4xMXcpLgogICoKLSAqIEBJRUVFODAyMTFfSFdfU1VQUE9SVFNfVUFQU0Q6Ci0gKglIYXJkd2FyZSBzdXBwb3J0cyBVbnNjaGVkdWxlZCBBdXRvbWF0aWMgUG93ZXIgU2F2ZSBEZWxpdmVyeQotICoJKFUtQVBTRCkgaW4gbWFuYWdlZCBtb2RlLiBUaGUgbW9kZSBpcyBjb25maWd1cmVkIHdpdGgKLSAqCWNvbmZfdHgoKSBvcGVyYXRpb24uCi0gKgogICogQElFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVM6CiAgKglIYXJkd2FyZSBjYW4gcHJvdmlkZSBhY2sgc3RhdHVzIHJlcG9ydHMgb2YgVHggZnJhbWVzIHRvCiAgKgl0aGUgc3RhY2suCkBAIC0xNjIzLDYgKzE2NDEsMTIgQEAKICAqCWJlIGNyZWF0ZWQuICBJdCBpcyBleHBlY3RlZCB1c2VyLXNwYWNlIHdpbGwgY3JlYXRlIHZpZnMgYXMKICAqCWRlc2lyZWQgKGFuZCB0aHVzIGhhdmUgdGhlbSBuYW1lZCBhcyBkZXNpcmVkKS4KICAqCisgKiBASUVFRTgwMjExX0hXX1NXX0NSWVBUT19DT05UUk9MOiBUaGUgZHJpdmVyIHdhbnRzIHRvIGNvbnRyb2wgd2hpY2ggb2YgdGhlCisgKgljcnlwdG8gYWxnb3JpdGhtcyBjYW4gYmUgZG9uZSBpbiBzb2Z0d2FyZSAtIHNvIGRvbid0IGF1dG9tYXRpY2FsbHkKKyAqCXRyeSB0byBmYWxsIGJhY2sgdG8gaXQgaWYgaGFyZHdhcmUgY3J5cHRvIGZhaWxzLCBidXQgZG8gc28gb25seSBpZgorICoJdGhlIGRyaXZlciByZXR1cm5zIDEuIFRoaXMgYWxzbyBmb3JjZXMgdGhlIGRyaXZlciB0byBhZHZlcnRpc2UgaXRzCisgKglzdXBwb3J0ZWQgY2lwaGVyIHN1aXRlcy4KKyAqCiAgKiBASUVFRTgwMjExX0hXX1FVRVVFX0NPTlRST0w6IFRoZSBkcml2ZXIgd2FudHMgdG8gY29udHJvbCBwZXItaW50ZXJmYWNlCiAgKglxdWV1ZSBtYXBwaW5nIGluIG9yZGVyIHRvIHVzZSBkaWZmZXJlbnQgcXVldWVzIChub3QganVzdCBvbmUgcGVyIEFDKQogICoJZm9yIGRpZmZlcmVudCB2aXJ0dWFsIGludGVyZmFjZXMuIFNlZSB0aGUgZG9jIHNlY3Rpb24gb24gSFcgcXVldWUKQEAgLTE2NzAsOCArMTY5NCw4IEBACiAJSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFCQkJPSAxPDwxMywKIAlJRUVFODAyMTFfSFdfV0FOVF9NT05JVE9SX1ZJRgkJCT0gMTw8MTQsCiAJSUVFRTgwMjExX0hXX05PX0FVVE9fVklGCQkJPSAxPDwxNSwKLQkvKiBmcmVlIHNsb3QgKi8KLQlJRUVFODAyMTFfSFdfU1VQUE9SVFNfVUFQU0QJCQk9IDE8PDE3LAorCUlFRUU4MDIxMV9IV19TV19DUllQVE9fQ09OVFJPTAkJCT0gMTw8MTYsCisJLyogZnJlZSBzbG90cyAqLwogCUlFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMJCT0gMTw8MTgsCiAJSUVFRTgwMjExX0hXX0NPTk5FQ1RJT05fTU9OSVRPUgkJCT0gMTw8MTksCiAJSUVFRTgwMjExX0hXX1FVRVVFX0NPTlRST0wJCQk9IDE8PDIwLApAQCAtMTk0NSw2ICsxOTY5LDExIEBACiAgKiBhZGRlZDsgaWYgeW91IHJldHVybiAwIHRoZW4gaHdfa2V5X2lkeCBtdXN0IGJlIGFzc2lnbmVkIHRvIHRoZQogICogaGFyZHdhcmUga2V5IGluZGV4LCB5b3UgYXJlIGZyZWUgdG8gdXNlIHRoZSBmdWxsIHU4IHJhbmdlLgogICoKKyAqIE5vdGUgdGhhdCBpbiB0aGUgY2FzZSB0aGF0IHRoZSBASUVFRTgwMjExX0hXX1NXX0NSWVBUT19DT05UUk9MIGZsYWcgaXMKKyAqIHNldCwgbWFjODAyMTEgd2lsbCBub3QgYXV0b21hdGljYWxseSBmYWxsIGJhY2sgdG8gc29mdHdhcmUgY3J5cHRvIGlmCisgKiBlbmFibGluZyBoYXJkd2FyZSBjcnlwdG8gZmFpbGVkLiBUaGUgc2V0X2tleSgpIGNhbGwgbWF5IGFsc28gcmV0dXJuIHRoZQorICogdmFsdWUgMSB0byBwZXJtaXQgdGhpcyBzcGVjaWZpYyBrZXkvYWxnb3JpdGhtIHRvIGJlIGRvbmUgaW4gc29mdHdhcmUuCisgKgogICogV2hlbiB0aGUgY21kIGlzICVESVNBQkxFX0tFWSB0aGVuIGl0IG11c3Qgc3VjY2VlZC4KICAqCiAgKiBOb3RlIHRoYXQgaXQgaXMgcGVybWlzc2libGUgdG8gbm90IGRlY3J5cHQgYSBmcmFtZSBldmVuIGlmIGEga2V5CkBAIC0yMDIzLDcgKzIwNTIsNyBAQAogICogZW5hYmxlZCB3aGVuZXZlciB1c2VyIGhhcyBlbmFibGVkIHBvd2Vyc2F2ZS4KICAqCiAgKiBEcml2ZXIgaW5mb3JtcyBVLUFQU0QgY2xpZW50IHN1cHBvcnQgYnkgZW5hYmxpbmcKLSAqICVJRUVFODAyMTFfSFdfU1VQUE9SVFNfVUFQU0QgZmxhZy4gVGhlIG1vZGUgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZQorICogJUlFRUU4MDIxMV9WSUZfU1VQUE9SVFNfVUFQU0QgZmxhZy4gVGhlIG1vZGUgaXMgY29uZmlndXJlZCB0aHJvdWdoIHRoZQogICogdWFwc2QgcGFyYW1ldGVyIGluIGNvbmZfdHgoKSBvcGVyYXRpb24uIEhhcmR3YXJlIG5lZWRzIHRvIHNlbmQgdGhlIFFvUwogICogTnVsbGZ1bmMgZnJhbWVzIGFuZCBzdGF5IGF3YWtlIHVudGlsIHRoZSBzZXJ2aWNlIHBlcmlvZCBoYXMgZW5kZWQuIFRvCiAgKiB1dGlsaXplIFUtQVBTRCwgZHluYW1pYyBwb3dlcnNhdmUgaXMgZGlzYWJsZWQgZm9yIHZvaXAgQUMgYW5kIGFsbCBmcmFtZXMKQEAgLTI2OTYsNiArMjcyNSwxNCBAQAogICoJaXMgb25seSB1c2VkIGlmIHRoZSBjb25maWd1cmVkIHJhdGUgY29udHJvbCBhbGdvcml0aG0gYWN0dWFsbHkgdXNlcwogICoJdGhlIG5ldyByYXRlIHRhYmxlIEFQSSwgYW5kIGlzIHRoZXJlZm9yZSBvcHRpb25hbC4gTXVzdCBiZSBhdG9taWMuCiAgKgorICogQHN0YV9zdGF0aXN0aWNzOiBHZXQgc3RhdGlzdGljcyBmb3IgdGhpcyBzdGF0aW9uLiBGb3IgZXhhbXBsZSB3aXRoIGJlYWNvbgorICoJZmlsdGVyaW5nLCB0aGUgc3RhdGlzdGljcyBrZXB0IGJ5IG1hYzgwMjExIG1pZ2h0IG5vdCBiZSBhY2N1cmF0ZSwgc28KKyAqCWxldCB0aGUgZHJpdmVyIHByZS1maWxsIHRoZSBzdGF0aXN0aWNzLiBUaGUgZHJpdmVyIGNhbiBmaWxsIG1vc3Qgb2YKKyAqCXRoZSB2YWx1ZXMgKGluZGljYXRpbmcgd2hpY2ggYnkgc2V0dGluZyB0aGUgZmlsbGVkIGJpdG1hcCksIGJ1dCBub3QKKyAqCWFsbCBvZiB0aGVtIG1ha2Ugc2Vuc2UgLSBzZWUgdGhlIHNvdXJjZSBmb3Igd2hpY2ggb25lcyBhcmUgcG9zc2libGUuCisgKglTdGF0aXN0aWNzIHRoYXQgdGhlIGRyaXZlciBkb2Vzbid0IGZpbGwgd2lsbCBiZSBmaWxsZWQgYnkgbWFjODAyMTEuCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgorICoKICAqIEBjb25mX3R4OiBDb25maWd1cmUgVFggcXVldWUgcGFyYW1ldGVycyAoRURDRiAoYWlmcywgY3dfbWluLCBjd19tYXgpLAogICoJYnVyc3RpbmcpIGZvciBhIGhhcmR3YXJlIFRYIHF1ZXVlLgogICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KQEAgLTI4NTYsOSArMjg5Myw2IEBACiAgKiBAZ2V0X2V0X3N0cmluZ3M6ICBFdGh0b29sIEFQSSB0byBnZXQgYSBzZXQgb2Ygc3RyaW5ncyB0byBkZXNjcmliZSBzdGF0cwogICoJYW5kIHBlcmhhcHMgb3RoZXIgc3VwcG9ydGVkIHR5cGVzIG9mIGV0aHRvb2wgZGF0YS1zZXRzLgogICoKLSAqIEBnZXRfcnNzaTogR2V0IGN1cnJlbnQgc2lnbmFsIHN0cmVuZ3RoIGluIGRCbSwgdGhlIGZ1bmN0aW9uIGlzIG9wdGlvbmFsCi0gKglhbmQgY2FuIHNsZWVwLgotICoKICAqIEBtZ2RfcHJlcGFyZV90eDogUHJlcGFyZSBmb3IgdHJhbnNtaXR0aW5nIGEgbWFuYWdlbWVudCBmcmFtZSBmb3IgYXNzb2NpYXRpb24KICAqCWJlZm9yZSBhc3NvY2lhdGVkLiBJbiBtdWx0aS1jaGFubmVsIHNjZW5hcmlvcywgYSB2aXJ0dWFsIGludGVyZmFjZSBpcwogICoJYm91bmQgdG8gYSBjaGFubmVsIGJlZm9yZSBpdCBpcyBhc3NvY2lhdGVkLCBidXQgYXMgaXQgaXNuJ3QgYXNzb2NpYXRlZApAQCAtMzA1OSw2ICszMDkzLDEwIEBACiAJdm9pZCAoKnN0YV9yYXRlX3RibF91cGRhdGUpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKKwl2b2lkICgqc3RhX3N0YXRpc3RpY3MpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCSAgICAgICBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbyk7CiAJaW50ICgqY29uZl90eCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1MTYgYWMsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKTsKQEAgLTMxMjYsOCArMzE2NCw2IEBACiAJdm9pZAkoKmdldF9ldF9zdHJpbmdzKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkJICB1MzIgc3NldCwgdTggKmRhdGEpOwotCWludAkoKmdldF9yc3NpKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBzOCAqcnNzaV9kYm0pOwogCiAJdm9pZAkoKm1nZF9wcmVwYXJlX3R4KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwpAQCAtNDA2Miw2ICs0MDk4LDEwIEBACiAgKglyZXZlcnNlIG9yZGVyIHRoYW4gaW4gcGFja2V0KQogICogQGFlc19jbWFjOiBQTiBkYXRhLCBtb3N0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKGJpZyBlbmRpYW4sCiAgKglyZXZlcnNlIG9yZGVyIHRoYW4gaW4gcGFja2V0KQorICogQGFlc19nbWFjOiBQTiBkYXRhLCBtb3N0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKGJpZyBlbmRpYW4sCisgKglyZXZlcnNlIG9yZGVyIHRoYW4gaW4gcGFja2V0KQorICogQGdjbXA6IFBOIGRhdGEsIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAoYmlnIGVuZGlhbiwKKyAqCXJldmVyc2Ugb3JkZXIgdGhhbiBpbiBwYWNrZXQpCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfa2V5X3NlcSB7CiAJdW5pb24gewpAQCAtNDA3NSw2ICs0MTE1LDEyIEBACiAJCXN0cnVjdCB7CiAJCQl1OCBwbls2XTsKIAkJfSBhZXNfY21hYzsKKwkJc3RydWN0IHsKKwkJCXU4IHBuWzZdOworCQl9IGFlc19nbWFjOworCQlzdHJ1Y3QgeworCQkJdTggcG5bNl07CisJCX0gZ2NtcDsKIAl9OwogfTsKIApAQCAtNDA5OSw3ICs0MTQ1LDcgQEAKICAqIGllZWU4MDIxMV9nZXRfa2V5X3J4X3NlcSAtIGdldCBrZXkgUlggc2VxdWVuY2UgY291bnRlcgogICoKICAqIEBrZXljb25mOiB0aGUgcGFyYW1ldGVyIHBhc3NlZCB3aXRoIHRoZSBzZXQga2V5Ci0gKiBAdGlkOiBUaGUgVElELCBvciAtMSBmb3IgdGhlIG1hbmFnZW1lbnQgZnJhbWUgdmFsdWUgKENDTVAgb25seSk7CisgKiBAdGlkOiBUaGUgVElELCBvciAtMSBmb3IgdGhlIG1hbmFnZW1lbnQgZnJhbWUgdmFsdWUgKENDTVAvR0NNUCBvbmx5KTsKICAqCXRoZSB2YWx1ZSBvbiBUSUQgMCBpcyBhbHNvIHVzZWQgZm9yIG5vbi1Rb1MgZnJhbWVzLiBGb3IKICAqCUNNQUMsIG9ubHkgVElEIDAgaXMgdmFsaWQuCiAgKiBAc2VxOiBidWZmZXIgdG8gcmVjZWl2ZSB0aGUgc2VxdWVuY2UgZGF0YQpAQCAtNDEzNSw3ICs0MTgxLDcgQEAKICAqIGllZWU4MDIxMV9zZXRfa2V5X3J4X3NlcSAtIHNldCBrZXkgUlggc2VxdWVuY2UgY291bnRlcgogICoKICAqIEBrZXljb25mOiB0aGUgcGFyYW1ldGVyIHBhc3NlZCB3aXRoIHRoZSBzZXQga2V5Ci0gKiBAdGlkOiBUaGUgVElELCBvciAtMSBmb3IgdGhlIG1hbmFnZW1lbnQgZnJhbWUgdmFsdWUgKENDTVAgb25seSk7CisgKiBAdGlkOiBUaGUgVElELCBvciAtMSBmb3IgdGhlIG1hbmFnZW1lbnQgZnJhbWUgdmFsdWUgKENDTVAvR0NNUCBvbmx5KTsKICAqCXRoZSB2YWx1ZSBvbiBUSUQgMCBpcyBhbHNvIHVzZWQgZm9yIG5vbi1Rb1MgZnJhbWVzLiBGb3IKICAqCUNNQUMsIG9ubHkgVElEIDAgaXMgdmFsaWQuCiAgKiBAc2VxOiBuZXcgc2VxdWVuY2UgZGF0YQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFjODAyMTU0LmggYi9pbmNsdWRlL25ldC9tYWM4MDIxNTQuaAppbmRleCBjODIzZDkxLi44NTA2NDc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxNTQuaAorKysgYi9pbmNsdWRlL25ldC9tYWM4MDIxNTQuaApAQCAtMjAsNiArMjAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxNTQuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAorI2luY2x1ZGUgPG5ldC9jZmc4MDIxNTQuaD4KKwogLyogR2VuZXJhbCBNQUMgZnJhbWUgZm9ybWF0OgogICogIDIgYnl0ZXM6IEZyYW1lIENvbnRyb2wKICAqICAxIGJ5dGU6ICBTZXF1ZW5jZSBOdW1iZXIKQEAgLTIxMiw3ICsyMTQsOCBAQAogCQkJCQkgICAgdW5zaWduZWQgbG9uZyBjaGFuZ2VkKTsKIAlpbnQJCSgqc2V0X3R4cG93ZXIpKHN0cnVjdCBpZWVlODAyMTU0X2h3ICpodywgaW50IGRiKTsKIAlpbnQJCSgqc2V0X2xidCkoc3RydWN0IGllZWU4MDIxNTRfaHcgKmh3LCBib29sIG9uKTsKLQlpbnQJCSgqc2V0X2NjYV9tb2RlKShzdHJ1Y3QgaWVlZTgwMjE1NF9odyAqaHcsIHU4IG1vZGUpOworCWludAkJKCpzZXRfY2NhX21vZGUpKHN0cnVjdCBpZWVlODAyMTU0X2h3ICpodywKKwkJCQkJY29uc3Qgc3RydWN0IHdwYW5fcGh5X2NjYSAqY2NhKTsKIAlpbnQJCSgqc2V0X2NjYV9lZF9sZXZlbCkoc3RydWN0IGllZWU4MDIxNTRfaHcgKmh3LAogCQkJCQkgICAgczMyIGxldmVsKTsKIAlpbnQJCSgqc2V0X2NzbWFfcGFyYW1zKShzdHJ1Y3QgaWVlZTgwMjE1NF9odyAqaHcsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKaW5kZXggMmU4NzU2YjguLjM2ZmFmNDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaAorKysgYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKQEAgLTYwLDYgKzYwLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWV4aXRfbGlzdDsJLyogVXNlIG9ubHkgbmV0X211dGV4ICovCiAKIAlzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgICAqdXNlcl9uczsJLyogT3duaW5nIHVzZXIgbmFtZXNwYWNlICovCisJc3RydWN0IGlkcgkJbmV0bnNfaWRzOwogCiAJc3RydWN0IG5zX2NvbW1vbgluczsKIApAQCAtMjkwLDYgKzI5MSw5IEBACiAjZGVmaW5lIF9fbmV0X2luaXRjb25zdAlfX2luaXRjb25zdAogI2VuZGlmCiAKK2ludCBwZWVybmV0MmlkKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldCAqcGVlcik7CitzdHJ1Y3QgbmV0ICpnZXRfbmV0X25zX2J5X2lkKHN0cnVjdCBuZXQgKm5ldCwgaW50IGlkKTsKKwogc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJaW50ICgqaW5pdCkoc3RydWN0IG5ldCAqbmV0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAppbmRleCBmMGRhZWQyLi43NGYyNzFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCkBAIC0xOTEsOCArMTkxLDYgQEAKIGludCBuZl9jb25udHJhY2tfaGFzaF9jaGVja19pbnNlcnQoc3RydWN0IG5mX2Nvbm4gKmN0KTsKIGJvb2wgbmZfY3RfZGVsZXRlKHN0cnVjdCBuZl9jb25uICpjdCwgdTMyIHBpZCwgaW50IHJlcG9ydCk7CiAKLXZvaWQgbmZfY29ubnRyYWNrX2ZsdXNoX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwb3J0aWQsIGludCByZXBvcnQpOwotCiBib29sIG5mX2N0X2dldF90dXBsZXByKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBuaG9mZiwKIAkJICAgICAgIHVfaW50MTZfdCBsM251bSwgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwogYm9vbCBuZl9jdF9pbnZlcnRfdHVwbGVwcihzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICppbnZlcnNlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlcy5oCmluZGV4IDNhZTk2OWUuLjllYWFhNzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90YWJsZXMuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzLmgKQEAgLTUzMCw2ICs1MzAsOCBAQAogCiBpbnQgbmZ0X2NoYWluX3ZhbGlkYXRlX2RlcGVuZGVuY3koY29uc3Qgc3RydWN0IG5mdF9jaGFpbiAqY2hhaW4sCiAJCQkJICBlbnVtIG5mdF9jaGFpbl90eXBlIHR5cGUpOworaW50IG5mdF9jaGFpbl92YWxpZGF0ZV9ob29rcyhjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhvb2tfZmxhZ3MpOwogCiBzdHJ1Y3QgbmZ0X3N0YXRzIHsKIAl1NjQJCQlieXRlczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L25ldGxpbmsuaAppbmRleCA2NDE1ODM1Li5lMDEwZWU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bGluay5oCkBAIC00OTAsMTQgKzQ5MCwxMCBAQAogICogQ29ycmVjdHMgdGhlIG5ldGxpbmsgbWVzc2FnZSBoZWFkZXIgdG8gaW5jbHVkZSB0aGUgYXBwZW5lZGVkCiAgKiBhdHRyaWJ1dGVzLiBPbmx5IG5lY2Vzc2FyeSBpZiBhdHRyaWJ1dGVzIGhhdmUgYmVlbiBhZGRlZCB0bwogICogdGhlIG1lc3NhZ2UuCi0gKgotICogUmV0dXJucyB0aGUgdG90YWwgZGF0YSBsZW5ndGggb2YgdGhlIHNrYi4KICAqLwotc3RhdGljIGlubGluZSBpbnQgbmxtc2dfZW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoKQorc3RhdGljIGlubGluZSB2b2lkIG5sbXNnX2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKIHsKIAlubGgtPm5sbXNnX2xlbiA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtICh1bnNpZ25lZCBjaGFyICopbmxoOwotCi0JcmV0dXJuIHNrYi0+bGVuOwogfQogCiAvKioKQEAgLTUyMCw4ICs1MTYsMTAgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIG5sbXNnX3RyaW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgdm9pZCAqbWFyaykKIHsKLQlpZiAobWFyaykKKwlpZiAobWFyaykgeworCQlXQVJOX09OKCh1bnNpZ25lZCBjaGFyICopIG1hcmsgPCBza2ItPmRhdGEpOwogCQlza2JfdHJpbShza2IsICh1bnNpZ25lZCBjaGFyICopIG1hcmsgLSBza2ItPmRhdGEpOworCX0KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmggYi9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKaW5kZXggMjQ5NDVjZS4uZGJlMjI1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaApAQCAtNDgsMTAgKzQ4LDEyIEBACiAJc3RydWN0IGhsaXN0X2hlYWQJKmZpYl90YWJsZV9oYXNoOwogCXN0cnVjdCBzb2NrCQkqZmlibmw7CiAKLQlzdHJ1Y3Qgc29jawkJKippY21wX3NrOworCXN0cnVjdCBzb2NrICAqIF9fcGVyY3B1CSppY21wX3NrOworCiAJc3RydWN0IGluZXRfcGVlcl9iYXNlCSpwZWVyczsKIAlzdHJ1Y3QgdGNwbV9oYXNoX2J1Y2tldAkqdGNwX21ldHJpY3NfaGFzaDsKIAl1bnNpZ25lZCBpbnQJCXRjcF9tZXRyaWNzX2hhc2hfbG9nOworCXN0cnVjdCBzb2NrICAqIF9fcGVyY3B1CSp0Y3Bfc2s7CiAJc3RydWN0IG5ldG5zX2ZyYWdzCWZyYWdzOwogI2lmZGVmIENPTkZJR19ORVRGSUxURVIKIAlzdHJ1Y3QgeHRfdGFibGUJCSppcHRhYmxlX2ZpbHRlcjsKQEAgLTgwLDYgKzgyLDggQEAKIAogCWludCBzeXNjdGxfZndtYXJrX3JlZmxlY3Q7CiAJaW50IHN5c2N0bF90Y3BfZndtYXJrX2FjY2VwdDsKKwlpbnQgc3lzY3RsX3RjcF9tdHVfcHJvYmluZzsKKwlpbnQgc3lzY3RsX3RjcF9iYXNlX21zczsKIAogCXN0cnVjdCBwaW5nX2dyb3VwX3JhbmdlIHBpbmdfZ3JvdXBfcmFuZ2U7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25mYy9oY2kuaCBiL2luY2x1ZGUvbmV0L25mYy9oY2kuaAppbmRleCAxNGJkMGUxLi5hYjY3MmI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZmMvaGNpLmgKKysrIGIvaW5jbHVkZS9uZXQvbmZjL2hjaS5oCkBAIC01MSw4ICs1MSwxMCBAQAogCWludCAoKnRtX3NlbmQpKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJaW50ICgqY2hlY2tfcHJlc2VuY2UpKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwKIAkJCSAgICAgIHN0cnVjdCBuZmNfdGFyZ2V0ICp0YXJnZXQpOwotCWludCAoKmV2ZW50X3JlY2VpdmVkKShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGUsIHU4IGV2ZW50LAorCWludCAoKmV2ZW50X3JlY2VpdmVkKShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IHBpcGUsIHU4IGV2ZW50LAogCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdm9pZCAoKmNtZF9yZWNlaXZlZCkoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlLCB1OCBjbWQsCisJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJaW50ICgqZndfZG93bmxvYWQpKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgY29uc3QgY2hhciAqZmlybXdhcmVfbmFtZSk7CiAJaW50ICgqZGlzY292ZXJfc2UpKHN0cnVjdCBuZmNfaGNpX2RldiAqZGV2KTsKIAlpbnQgKCplbmFibGVfc2UpKHN0cnVjdCBuZmNfaGNpX2RldiAqZGV2LCB1MzIgc2VfaWR4KTsKQEAgLTYzLDggKzY1LDEwIEBACiB9OwogCiAvKiBQaXBlcyAqLwotI2RlZmluZSBORkNfSENJX0lOVkFMSURfUElQRQkweDgwCiAjZGVmaW5lIE5GQ19IQ0lfRE9fTk9UX0NSRUFURV9QSVBFCTB4ODEKKyNkZWZpbmUgTkZDX0hDSV9JTlZBTElEX1BJUEUJMHg4MAorI2RlZmluZSBORkNfSENJX0lOVkFMSURfR0FURQkweEZGCisjZGVmaW5lIE5GQ19IQ0lfSU5WQUxJRF9IT1NUCTB4ODAKICNkZWZpbmUgTkZDX0hDSV9MSU5LX01HTVRfUElQRQkweDAwCiAjZGVmaW5lIE5GQ19IQ0lfQURNSU5fUElQRQkweDAxCiAKQEAgLTczLDcgKzc3LDEzIEBACiAJdTggcGlwZTsKIH07CiAKK3N0cnVjdCBuZmNfaGNpX3BpcGUgeworCXU4IGdhdGU7CisJdTggZGVzdF9ob3N0OworfTsKKwogI2RlZmluZSBORkNfSENJX01BWF9DVVNUT01fR0FURVMJNTAKKyNkZWZpbmUgTkZDX0hDSV9NQVhfUElQRVMJCTEyNwogc3RydWN0IG5mY19oY2lfaW5pdF9kYXRhIHsKIAl1OCBnYXRlX2NvdW50OwogCXN0cnVjdCBuZmNfaGNpX2dhdGUgZ2F0ZXNbTkZDX0hDSV9NQVhfQ1VTVE9NX0dBVEVTXTsKQEAgLTEyNSw2ICsxMzUsNyBAQAogCXZvaWQgKmNsaWVudGRhdGE7CiAKIAl1OCBnYXRlMnBpcGVbTkZDX0hDSV9NQVhfR0FURVNdOworCXN0cnVjdCBuZmNfaGNpX3BpcGUgcGlwZXNbTkZDX0hDSV9NQVhfUElQRVNdOwogCiAJdTggc3dfcm9tbGliOwogCXU4IHN3X3BhdGNoOwpAQCAtMTY3LDYgKzE3OCw4IEBACiB2b2lkIG5mY19oY2lfZHJpdmVyX2ZhaWx1cmUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCBpbnQgZXJyKTsKIAogaW50IG5mY19oY2lfcmVzdWx0X3RvX2Vycm5vKHU4IHJlc3VsdCk7Cit2b2lkIG5mY19oY2lfcmVzZXRfcGlwZXMoc3RydWN0IG5mY19oY2lfZGV2ICpkZXYpOwordm9pZCBuZmNfaGNpX3Jlc2V0X3BpcGVzX3Blcl9ob3N0KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggaG9zdCk7CiAKIC8qIEhvc3QgSURzICovCiAjZGVmaW5lIE5GQ19IQ0lfSE9TVF9DT05UUk9MTEVSX0lECTB4MDAKQEAgLTIxOSw2ICsyMzIsMTIgQEAKICNkZWZpbmUgTkZDX0hDSV9FVlRfUE9TVF9EQVRBCQkJMHgwMgogI2RlZmluZSBORkNfSENJX0VWVF9IT1RfUExVRwkJCTB4MDMKIAorLyogR2VuZXJpYyBjb21tYW5kcyAqLworI2RlZmluZSBORkNfSENJX0FOWV9TRVRfUEFSQU1FVEVSCTB4MDEKKyNkZWZpbmUgTkZDX0hDSV9BTllfR0VUX1BBUkFNRVRFUgkweDAyCisjZGVmaW5lIE5GQ19IQ0lfQU5ZX09QRU5fUElQRQkJMHgwMworI2RlZmluZSBORkNfSENJX0FOWV9DTE9TRV9QSVBFCQkweDA0CisKIC8qIFJlYWRlciBSRiBnYXRlcyBldmVudHMgKi8KICNkZWZpbmUgTkZDX0hDSV9FVlRfUkVBREVSX1JFUVVFU1RFRAkweDEwCiAjZGVmaW5lIE5GQ19IQ0lfRVZUX0VORF9PUEVSQVRJT04JMHgxMQpAQCAtMjQ5LDggKzI2OCw2IEBACiBpbnQgbmZjX2hjaV9zZW5kX2NtZF9hc3luYyhzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGUsIHU4IGNtZCwKIAkJCSAgIGNvbnN0IHU4ICpwYXJhbSwgc2l6ZV90IHBhcmFtX2xlbiwKIAkJCSAgIGRhdGFfZXhjaGFuZ2VfY2JfdCBjYiwgdm9pZCAqY2JfY29udGV4dCk7Ci1pbnQgbmZjX2hjaV9zZW5kX3Jlc3BvbnNlKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSwgdTggcmVzcG9uc2UsCi0JCQkgIGNvbnN0IHU4ICpwYXJhbSwgc2l6ZV90IHBhcmFtX2xlbik7CiBpbnQgbmZjX2hjaV9zZW5kX2V2ZW50KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggZ2F0ZSwgdTggZXZlbnQsCiAJCSAgICAgICBjb25zdCB1OCAqcGFyYW0sIHNpemVfdCBwYXJhbV9sZW4pOwogaW50IG5mY19oY2lfdGFyZ2V0X2Rpc2NvdmVyZWQoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBnYXRlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25mYy9uY2kuaCBiL2luY2x1ZGUvbmV0L25mYy9uY2kuaAppbmRleCBlNzI1N2E0Li5hMmYyZjNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZmMvbmNpLmgKKysrIGIvaW5jbHVkZS9uZXQvbmZjL25jaS5oCkBAIC02Miw2ICs2MiwyNSBAQAogI2RlZmluZSBOQ0lfU1RBVFVTX05GQ0VFX1BST1RPQ09MX0VSUk9SCQkJCTB4YzIKICNkZWZpbmUgTkNJX1NUQVRVU19ORkNFRV9USU1FT1VUX0VSUk9SCQkJCTB4YzMKIAorLyogTkZDRUUgSW50ZXJmYWNlL1Byb3RvY29scyAqLworI2RlZmluZSBOQ0lfTkZDRUVfSU5URVJGQUNFX0FQRFUgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgTkNJX05GQ0VFX0lOVEVSRkFDRV9IQ0lfQUNDRVNTICAgICAweDAxCisjZGVmaW5lIE5DSV9ORkNFRV9JTlRFUkZBQ0VfVFlQRTNfQ01EX1NFVCAgMHgwMgorI2RlZmluZSBOQ0lfTkZDRUVfSU5URVJGQUNFX1RSQU5TUEFSRU5UICAgICAgICAweDAzCisKKy8qIERlc3RpbmF0aW9uIHR5cGUgKi8KKyNkZWZpbmUgTkNJX0RFU1RJTkFUSU9OX05GQ0NfTE9PUEJBQ0sgICAgICAweDAxCisjZGVmaW5lIE5DSV9ERVNUSU5BVElPTl9SRU1PVEVfTkZDX0VORFBPSU5UICAgIDB4MDIKKyNkZWZpbmUgTkNJX0RFU1RJTkFUSU9OX05GQ0VFICAgICAgICAgICAgICAweDAzCisKKy8qIERlc3RpbmF0aW9uLXNwZWNpZmljIHBhcmFtZXRlcnMgdHlwZSAqLworI2RlZmluZSBOQ0lfREVTVElOQVRJT05fU1BFQ0lGSUNfUEFSQU1fUkZfVFlQRSAgICAgMHgwMAorI2RlZmluZSBOQ0lfREVTVElOQVRJT05fU1BFQ0lGSUNfUEFSQU1fTkZDRUVfVFlQRSAgMHgwMQorCisvKiBORkNFRSBEaXNjb3ZlcnkgQWN0aW9uICovCisjZGVmaW5lIE5DSV9ORkNFRV9ESVNDT1ZFUllfQUNUSU9OX0RJU0FCTEUJCQkweDAwCisjZGVmaW5lIE5DSV9ORkNFRV9ESVNDT1ZFUllfQUNUSU9OX0VOQUJMRQkJCTB4MDEKKwogLyogTkNJIFJGIFRlY2hub2xvZ3kgYW5kIE1vZGUgKi8KICNkZWZpbmUgTkNJX05GQ19BX1BBU1NJVkVfUE9MTF9NT0RFCQkJCTB4MDAKICNkZWZpbmUgTkNJX05GQ19CX1BBU1NJVkVfUE9MTF9NT0RFCQkJCTB4MDEKQEAgLTIyNCw2ICsyNDMsMjggQEAKIAlzdHJ1Y3QJc2V0X2NvbmZpZ19wYXJhbSBwYXJhbTsgLyogc3VwcG9ydCAxIHBhcmFtIHBlciBjbWQgaXMgZW5vdWdoICovCiB9IF9fcGFja2VkOwogCisjZGVmaW5lIE5DSV9PUF9DT1JFX0NPTk5fQ1JFQVRFX0NNRAluY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9DT1JFLCAweDA0KQorI2RlZmluZSBERVNUX1NQRUNfUEFSQU1TX0lEX0lOREVYCTAKKyNkZWZpbmUgREVTVF9TUEVDX1BBUkFNU19QUk9UT0NPTF9JTkRFWAkxCitzdHJ1Y3QgZGVzdF9zcGVjX3BhcmFtcyB7CisJX191OCAgICBpZDsKKwlfX3U4ICAgIHByb3RvY29sOworfSBfX3BhY2tlZDsKKworc3RydWN0IGNvcmVfY29ubl9jcmVhdGVfZGVzdF9zcGVjX3BhcmFtcyB7CisJX191OCAgICB0eXBlOworCV9fdTggICAgbGVuZ3RoOworCV9fdTggICAgdmFsdWVbMF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfY21kIHsKKwlfX3U4ICAgIGRlc3RpbmF0aW9uX3R5cGU7CisJX191OCAgICBudW1iZXJfZGVzdGluYXRpb25fcGFyYW1zOworCXN0cnVjdCBjb3JlX2Nvbm5fY3JlYXRlX2Rlc3Rfc3BlY19wYXJhbXMgcGFyYW1zWzBdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBOQ0lfT1BfQ09SRV9DT05OX0NMT1NFX0NNRAluY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9DT1JFLCAweDA1KQorCiAjZGVmaW5lIE5DSV9PUF9SRl9ESVNDT1ZFUl9NQVBfQ01ECW5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX1JGX01HTVQsIDB4MDApCiBzdHJ1Y3QgZGlzY19tYXBfY29uZmlnIHsKIAlfX3U4CXJmX3Byb3RvY29sOwpAQCAtMjYwLDYgKzMwMSwxOSBAQAogCV9fdTgJdHlwZTsKIH0gX19wYWNrZWQ7CiAKKyNkZWZpbmUgTkNJX09QX05GQ0VFX0RJU0NPVkVSX0NNRCBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9ORkNFRV9NR01ULCAweDAwKQorc3RydWN0IG5jaV9uZmNlZV9kaXNjb3Zlcl9jbWQgeworCV9fdTgJZGlzY292ZXJ5X2FjdGlvbjsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTkNJX09QX05GQ0VFX01PREVfU0VUX0NNRCBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9ORkNFRV9NR01ULCAweDAxKQorI2RlZmluZSBOQ0lfTkZDRUVfRElTQUJMRQkweDAwCisjZGVmaW5lIE5DSV9ORkNFRV9FTkFCTEUJMHgwMQorc3RydWN0IG5jaV9uZmNlZV9tb2RlX3NldF9jbWQgeworCV9fdTgJbmZjZWVfaWQ7CisJX191OAluZmNlZV9tb2RlOworfSBfX3BhY2tlZDsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIC0tLS0gTkNJIFJlc3BvbnNlcyAtLS0tICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMjk1LDYgKzM0OSwxNiBAQAogCV9fdTgJcGFyYW1zX2lkWzBdOwkvKiB2YXJpYWJsZSBzaXplIGFycmF5ICovCiB9IF9fcGFja2VkOwogCisjZGVmaW5lIE5DSV9PUF9DT1JFX0NPTk5fQ1JFQVRFX1JTUAluY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9DT1JFLCAweDA0KQorc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCB7CisJX191OAlzdGF0dXM7CisJX191OAltYXhfY3RybF9wa3RfcGF5bG9hZF9sZW47CisJX191OCAgICBjcmVkaXRzX2NudDsKKwlfX3U4CWNvbm5faWQ7Cit9IF9fcGFja2VkOworCisjZGVmaW5lIE5DSV9PUF9DT1JFX0NPTk5fQ0xPU0VfUlNQCW5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX0NPUkUsIDB4MDUpCisKICNkZWZpbmUgTkNJX09QX1JGX0RJU0NPVkVSX01BUF9SU1AJbmNpX29wY29kZV9wYWNrKE5DSV9HSURfUkZfTUdNVCwgMHgwMCkKIAogI2RlZmluZSBOQ0lfT1BfUkZfRElTQ09WRVJfUlNQCQluY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9SRl9NR01ULCAweDAzKQpAQCAtMzAzLDYgKzM2NywxMyBAQAogCiAjZGVmaW5lIE5DSV9PUF9SRl9ERUFDVElWQVRFX1JTUAluY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9SRl9NR01ULCAweDA2KQogCisjZGVmaW5lIE5DSV9PUF9ORkNFRV9ESVNDT1ZFUl9SU1AgbmNpX29wY29kZV9wYWNrKE5DSV9HSURfTkZDRUVfTUdNVCwgMHgwMCkKK3N0cnVjdCBuY2lfbmZjZWVfZGlzY292ZXJfcnNwIHsKKwlfX3U4CXN0YXR1czsKKwlfX3U4CW51bV9uZmNlZTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTkNJX09QX05GQ0VFX01PREVfU0VUX1JTUCBuY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9ORkNFRV9NR01ULCAweDAxKQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiAtLS0tIE5DSSBOb3RpZmljYXRpb25zIC0tLS0gKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNDMwLDQgKzUwMSwzMCBAQAogCV9fdTgJcmVhc29uOwogfSBfX3BhY2tlZDsKIAorI2RlZmluZSBOQ0lfT1BfUkZfTkZDRUVfQUNUSU9OX05URgluY2lfb3Bjb2RlX3BhY2soTkNJX0dJRF9SRl9NR01ULCAweDA5KQorc3RydWN0IG5jaV9yZl9uZmNlZV9hY3Rpb25fbnRmIHsKKwlfX3U4IG5mY2VlX2lkOworCV9fdTggdHJpZ2dlcjsKKwlfX3U4IHN1cHBvcnRlZF9kYXRhX2xlbmd0aDsKKwlfX3U4IHN1cHBvcnRlZF9kYXRhWzBdOworfSBfX3BhY2tlZDsKKworI2RlZmluZSBOQ0lfT1BfTkZDRUVfRElTQ09WRVJfTlRGIG5jaV9vcGNvZGVfcGFjayhOQ0lfR0lEX05GQ0VFX01HTVQsIDB4MDApCitzdHJ1Y3QgbmNpX25mY2VlX3N1cHBvcnRlZF9wcm90b2NvbCB7CisJX191OAludW1fcHJvdG9jb2w7CisJX191OAlzdXBwb3J0ZWRfcHJvdG9jb2xbMF07Cit9IF9fcGFja2VkOworCitzdHJ1Y3QgbmNpX25mY2VlX2luZm9ybWF0aW9uX3RsdiB7CisJX191OAludW1fdGx2OworCV9fdTgJaW5mb3JtYXRpb25fdGx2WzBdOworfSBfX3BhY2tlZDsKKworc3RydWN0IG5jaV9uZmNlZV9kaXNjb3Zlcl9udGYgeworCV9fdTgJbmZjZWVfaWQ7CisJX191OAluZmNlZV9zdGF0dXM7CisJc3RydWN0IG5jaV9uZmNlZV9zdXBwb3J0ZWRfcHJvdG9jb2wgc3VwcG9ydGVkX3Byb3RvY29sczsKKwlzdHJ1Y3QgbmNpX25mY2VlX2luZm9ybWF0aW9uX3RsdglpbmZvcm1hdGlvbl90bHY7Cit9IF9fcGFja2VkOworCiAjZW5kaWYgLyogX19OQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmZjL25jaV9jb3JlLmggYi9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaAppbmRleCA5ZTUxYmI0Li5mZjg3Zjg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaAorKysgYi9pbmNsdWRlL25ldC9uZmMvbmNpX2NvcmUuaApAQCAtNzgsMTUgKzc4LDEwNyBAQAogCWludCAgICgqc2VfaW8pKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1MzIgc2VfaWR4LAogCQkJCXU4ICphcGR1LCBzaXplX3QgYXBkdV9sZW5ndGgsCiAJCQkJc2VfaW9fY2JfdCBjYiwgdm9pZCAqY2JfY29udGV4dCk7CisJaW50ICAgKCpoY2lfbG9hZF9zZXNzaW9uKShzdHJ1Y3QgbmNpX2RldiAqbmRldik7CisJdm9pZCAgKCpoY2lfZXZlbnRfcmVjZWl2ZWQpKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBwaXBlLCB1OCBldmVudCwKKwkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisJdm9pZCAgKCpoY2lfY21kX3JlY2VpdmVkKShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSwgdTggY21kLAorCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB9OwogCiAjZGVmaW5lIE5DSV9NQVhfU1VQUE9SVEVEX1JGX0lOVEVSRkFDRVMJCTQKICNkZWZpbmUgTkNJX01BWF9ESVNDT1ZFUkVEX1RBUkdFVFMJCTEwCisjZGVmaW5lIE5DSV9NQVhfTlVNX05GQ0VFICAgMjU1CisjZGVmaW5lIE5DSV9NQVhfQ09OTl9JRAkJNworCitzdHJ1Y3QgbmNpX2Nvbm5faW5mbyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCV9fdTgJaWQ7IC8qIGNhbiBiZSBhbiBSRiBEaXNjb3ZlcnkgSUQgb3IgYW4gTkZDRUUgSUQgKi8KKwlfX3U4CWNvbm5faWQ7CisJX191OAltYXhfcGt0X3BheWxvYWRfbGVuOworCisJYXRvbWljX3QgY3JlZGl0c19jbnQ7CisJX191OAkgaW5pdGlhbF9udW1fY3JlZGl0czsKKworCWRhdGFfZXhjaGFuZ2VfY2JfdAlkYXRhX2V4Y2hhbmdlX2NiOworCXZvaWQgKmRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dDsKKworCXN0cnVjdCBza19idWZmICpyeF9za2I7Cit9OworCisjZGVmaW5lIE5DSV9JTlZBTElEX0NPTk5fSUQgMHg4MAorCisjZGVmaW5lIE5DSV9IQ0lfQU5ZX09QRU5fUElQRSAgICAgIDB4MDMKKworLyogR2F0ZXMgKi8KKyNkZWZpbmUgTkNJX0hDSV9BRE1JTl9HQVRFICAgICAgICAgMHgwMAorI2RlZmluZSBOQ0lfSENJX0xJTktfTUdNVF9HQVRFICAgICAweDA2CisKKy8qIFBpcGVzICovCisjZGVmaW5lIE5DSV9IQ0lfTElOS19NR01UX1BJUEUgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBOQ0lfSENJX0FETUlOX1BJUEUgICAgICAgICAgICAgICAgIDB4MDEKKworLyogR2VuZXJpYyByZXNwb25zZXMgKi8KKyNkZWZpbmUgTkNJX0hDSV9BTllfT0sgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIE5DSV9IQ0lfQU5ZX0VfTk9UX0NPTk5FQ1RFRCAgICAgICAgMHgwMQorI2RlZmluZSBOQ0lfSENJX0FOWV9FX0NNRF9QQVJfVU5LTk9XTiAgICAgIDB4MDIKKyNkZWZpbmUgTkNJX0hDSV9BTllfRV9OT0sgICAgICAgICAgICAgICAgICAweDAzCisjZGVmaW5lIE5DSV9IQ0lfQU5ZX0VfUElQRVNfRlVMTCAgICAgICAgICAgMHgwNAorI2RlZmluZSBOQ0lfSENJX0FOWV9FX1JFR19QQVJfVU5LTk9XTiAgICAgIDB4MDUKKyNkZWZpbmUgTkNJX0hDSV9BTllfRV9QSVBFX05PVF9PUEVORUQgICAgICAweDA2CisjZGVmaW5lIE5DSV9IQ0lfQU5ZX0VfQ01EX05PVF9TVVBQT1JURUQgICAgMHgwNworI2RlZmluZSBOQ0lfSENJX0FOWV9FX0lOSElCSVRFRCAgICAgICAgICAgIDB4MDgKKyNkZWZpbmUgTkNJX0hDSV9BTllfRV9USU1FT1VUICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIE5DSV9IQ0lfQU5ZX0VfUkVHX0FDQ0VTU19ERU5JRUQgICAgMHgwYQorI2RlZmluZSBOQ0lfSENJX0FOWV9FX1BJUEVfQUNDRVNTX0RFTklFRCAgIDB4MGIKKworI2RlZmluZSBOQ0lfSENJX0RPX05PVF9PUEVOX1BJUEUgICAgICAgICAgIDB4ODEKKyNkZWZpbmUgTkNJX0hDSV9JTlZBTElEX1BJUEUgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIE5DSV9IQ0lfSU5WQUxJRF9HQVRFICAgICAgICAgICAgICAgMHhGRgorI2RlZmluZSBOQ0lfSENJX0lOVkFMSURfSE9TVCAgICAgICAgICAgICAgIDB4ODAKKworI2RlZmluZSBOQ0lfSENJX01BWF9DVVNUT01fR0FURVMgICA1MAorI2RlZmluZSBOQ0lfSENJX01BWF9QSVBFUyAgICAgICAgICAxMjcKKworc3RydWN0IG5jaV9oY2lfZ2F0ZSB7CisJdTggZ2F0ZTsKKwl1OCBwaXBlOworCXU4IGRlc3RfaG9zdDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBuY2lfaGNpX3BpcGUgeworCXU4IGdhdGU7CisJdTggaG9zdDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBuY2lfaGNpX2luaXRfZGF0YSB7CisJdTggZ2F0ZV9jb3VudDsKKwlzdHJ1Y3QgbmNpX2hjaV9nYXRlIGdhdGVzW05DSV9IQ0lfTUFYX0NVU1RPTV9HQVRFU107CisJY2hhciBzZXNzaW9uX2lkWzldOworfTsKKworI2RlZmluZSBOQ0lfSENJX01BWF9HQVRFUyAgICAgICAgICAyNTYKKworc3RydWN0IG5jaV9oY2lfZGV2IHsKKwl1OCBuZmNlZV9pZDsKKwlzdHJ1Y3QgbmNpX2RldiAqbmRldjsKKwlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvOworCisJc3RydWN0IG5jaV9oY2lfaW5pdF9kYXRhIGluaXRfZGF0YTsKKwlzdHJ1Y3QgbmNpX2hjaV9waXBlIHBpcGVzW05DSV9IQ0lfTUFYX1BJUEVTXTsKKwl1OCBnYXRlMnBpcGVbTkNJX0hDSV9NQVhfR0FURVNdOworCWludCBleHBlY3RlZF9waXBlczsKKwlpbnQgY291bnRfcGlwZXM7CisKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJ4X2hjcF9mcmFnczsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbXNnX3J4X3dvcms7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBtc2dfcnhfcXVldWU7Cit9OwogCiAvKiBOQ0kgQ29yZSBzdHJ1Y3R1cmVzICovCiBzdHJ1Y3QgbmNpX2RldiB7CiAJc3RydWN0IG5mY19kZXYJCSpuZmNfZGV2OwogCXN0cnVjdCBuY2lfb3BzCQkqb3BzOworCXN0cnVjdCBuY2lfaGNpX2RldgkqaGNpX2RldjsKIAogCWludAkJCXR4X2hlYWRyb29tOwogCWludAkJCXR4X3RhaWxyb29tOwpAQCAtOTUsNyArMTg3LDEwIEBACiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAKIAlhdG9taWNfdAkJY21kX2NudDsKLQlhdG9taWNfdAkJY3JlZGl0c19jbnQ7CisJX191OAkJCWN1cl9jb25uX2lkOworCisJc3RydWN0IGxpc3RfaGVhZAljb25uX2luZm9fbGlzdDsKKwlzdHJ1Y3QgbmNpX2Nvbm5faW5mbwkqcmZfY29ubl9pbmZvOwogCiAJc3RydWN0IHRpbWVyX2xpc3QJY21kX3RpbWVyOwogCXN0cnVjdCB0aW1lcl9saXN0CWRhdGFfdGltZXI7CkBAIC0xNDEsMTMgKzIzNiwxMCBAQAogCV9fdTgJCQltYW51ZmFjdF9pZDsKIAlfX3UzMgkJCW1hbnVmYWN0X3NwZWNpZmljX2luZm87CiAKLQkvKiByZWNlaXZlZCBkdXJpbmcgTkNJX09QX1JGX0lOVEZfQUNUSVZBVEVEX05URiAqLwotCV9fdTgJCQltYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplOwotCV9fdTgJCQlpbml0aWFsX251bV9jcmVkaXRzOworCS8qIFNhdmUgUkYgRGlzY292ZXJ5IElEIG9yIE5GQ0VFIElEIHVuZGVyIGNvbm5fY3JlYXRlICovCisJX191OAkJCWN1cl9pZDsKIAogCS8qIHN0b3JlZCBkdXJpbmcgbmNpX2RhdGFfZXhjaGFuZ2UgKi8KLQlkYXRhX2V4Y2hhbmdlX2NiX3QJZGF0YV9leGNoYW5nZV9jYjsKLQl2b2lkCQkJKmRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dDsKIAlzdHJ1Y3Qgc2tfYnVmZgkJKnJ4X2RhdGFfcmVhc3NlbWJseTsKIAogCS8qIHN0b3JlZCBkdXJpbmcgaW50Zl9hY3RpdmF0ZWRfbnRmICovCkBAIC0xNjMsOSArMjU1LDM2IEBACiB2b2lkIG5jaV9mcmVlX2RldmljZShzdHJ1Y3QgbmNpX2RldiAqbmRldik7CiBpbnQgbmNpX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmNpX2RldiAqbmRldik7CiB2b2lkIG5jaV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbmNpX2RldiAqbmRldik7CitpbnQgbmNpX3JlcXVlc3Qoc3RydWN0IG5jaV9kZXYgKm5kZXYsCisJCXZvaWQgKCpyZXEpKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgb3B0KSwKKwkJdW5zaWduZWQgbG9uZyBvcHQsIF9fdTMyIHRpbWVvdXQpOwogaW50IG5jaV9yZWN2X2ZyYW1lKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGludCBuY2lfc2V0X2NvbmZpZyhzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191OCBpZCwgc2l6ZV90IGxlbiwgX191OCAqdmFsKTsKIAoraW50IG5jaV9uZmNlZV9kaXNjb3ZlcihzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggYWN0aW9uKTsKK2ludCBuY2lfbmZjZWVfbW9kZV9zZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IG5mY2VlX2lkLCB1OCBuZmNlZV9tb2RlKTsKK2ludCBuY2lfY29yZV9jb25uX2NyZWF0ZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZGVzdGluYXRpb25fdHlwZSwKKwkJCSB1OCBudW1iZXJfZGVzdGluYXRpb25fcGFyYW1zLAorCQkJIHNpemVfdCBwYXJhbXNfbGVuLAorCQkJIHN0cnVjdCBjb3JlX2Nvbm5fY3JlYXRlX2Rlc3Rfc3BlY19wYXJhbXMgKnBhcmFtcyk7CitpbnQgbmNpX2NvcmVfY29ubl9jbG9zZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggY29ubl9pZCk7CisKK3N0cnVjdCBuY2lfaGNpX2RldiAqbmNpX2hjaV9hbGxvY2F0ZShzdHJ1Y3QgbmNpX2RldiAqbmRldik7CitpbnQgbmNpX2hjaV9zZW5kX2V2ZW50KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBldmVudCwKKwkJICAgICAgIGNvbnN0IHU4ICpwYXJhbSwgc2l6ZV90IHBhcmFtX2xlbik7CitpbnQgbmNpX2hjaV9zZW5kX2NtZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwKKwkJICAgICB1OCBjbWQsIGNvbnN0IHU4ICpwYXJhbSwgc2l6ZV90IHBhcmFtX2xlbiwKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYik7CitpbnQgbmNpX2hjaV9vcGVuX3BpcGUoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUpOworaW50IG5jaV9oY2lfY29ubmVjdF9nYXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0X2hvc3QsCisJCQkgdTggZGVzdF9nYXRlLCB1OCBwaXBlKTsKK2ludCBuY2lfaGNpX3NldF9wYXJhbShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggaWR4LAorCQkgICAgICBjb25zdCB1OCAqcGFyYW0sIHNpemVfdCBwYXJhbV9sZW4pOworaW50IG5jaV9oY2lfZ2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsCisJCSAgICAgIHN0cnVjdCBza19idWZmICoqc2tiKTsKK2ludCBuY2lfaGNpX2Rldl9zZXNzaW9uX2luaXQoc3RydWN0IG5jaV9kZXYgKm5kZXYpOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpuY2lfc2tiX2FsbG9jKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogCQkJCQkgICAgdW5zaWduZWQgaW50IGxlbiwKIAkJCQkJICAgIGdmcF90IGhvdykKQEAgLTIwMCw3ICszMTksOSBAQAogaW50IG5jaV9zZW5kX2NtZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgX191MTYgb3Bjb2RlLCBfX3U4IHBsZW4sIHZvaWQgKnBheWxvYWQpOwogaW50IG5jaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIF9fdTggY29ubl9pZCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIG5jaV9kYXRhX2V4Y2hhbmdlX2NvbXBsZXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCWludCBlcnIpOworCQkJCV9fdTggY29ubl9pZCwgaW50IGVycik7Cit2b2lkIG5jaV9oY2lfZGF0YV9yZWNlaXZlZF9jYih2b2lkICpjb250ZXh0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyKTsKKwogdm9pZCBuY2lfY2xlYXJfdGFyZ2V0X2xpc3Qoc3RydWN0IG5jaV9kZXYgKm5kZXYpOwogCiAvKiAtLS0tLSBOQ0kgcmVxdWVzdHMgLS0tLS0gKi8KQEAgLTIwOSw2ICszMzAsOCBAQAogI2RlZmluZSBOQ0lfUkVRX0NBTkNFTEVECTIKIAogdm9pZCBuY2lfcmVxX2NvbXBsZXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBpbnQgcmVzdWx0KTsKK3N0cnVjdCBuY2lfY29ubl9pbmZvICpuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAorCQkJCQkJICAgaW50IGNvbm5faWQpOwogCiAvKiAtLS0tLSBOQ0kgc3RhdHVzIGNvZGUgLS0tLS0gKi8KIGludCBuY2lfdG9fZXJybm8oX191OCBjb2RlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25mYy9uZmMuaCBiL2luY2x1ZGUvbmV0L25mYy9uZmMuaAppbmRleCAxMmFkYjgxLi43MzE5MGU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZmMvbmZjLmgKKysrIGIvaW5jbHVkZS9uZXQvbmZjL25mYy5oCkBAIC0xMzUsNiArMTM1LDMxIEBACiAJdTE2IHN0YXRlOwogfTsKIAorLyoqCisgKiBuZmNfZXZ0X3RyYW5zYWN0aW9uIC0gQSBzdHJ1Y3QgZm9yIE5GQyBzZWN1cmUgZWxlbWVudCBldmVudCB0cmFuc2FjdGlvbi4KKyAqCisgKiBAYWlkOiBUaGUgYXBwbGljYXRpb24gaWRlbnRpZmllciB0cmlnZ2VyaW5nIHRoZSBldmVudAorICoKKyAqIEBhaWRfbGVuOiBUaGUgYXBwbGljYXRpb24gaWRlbnRpZmllciBsZW5ndGggWzU6MTZdCisgKgorICogQHBhcmFtczogVGhlIGFwcGxpY2F0aW9uIHBhcmFtZXRlcnMgdHJhbnNtaXR0ZWQgZHVyaW5nIHRoZSB0cmFuc2FjdGlvbgorICoKKyAqIEBwYXJhbXNfbGVuOiBUaGUgYXBwbGljYXRpb25zIHBhcmFtZXRlcnMgbGVuZ3RoIFswOjI1NV0KKyAqCisgKi8KKyNkZWZpbmUgTkZDX01JTl9BSURfTEVOR1RICTUKKyNkZWZpbmUJTkZDX01BWF9BSURfTEVOR1RICTE2CisjZGVmaW5lIE5GQ19NQVhfUEFSQU1TX0xFTkdUSAkyNTUKKworI2RlZmluZSBORkNfRVZUX1RSQU5TQUNUSU9OX0FJRF9UQUcJMHg4MQorI2RlZmluZSBORkNfRVZUX1RSQU5TQUNUSU9OX1BBUkFNU19UQUcJMHg4Mgorc3RydWN0IG5mY19ldnRfdHJhbnNhY3Rpb24geworCXUzMiBhaWRfbGVuOworCXU4IGFpZFtORkNfTUFYX0FJRF9MRU5HVEhdOworCXU4IHBhcmFtc19sZW47CisJdTggcGFyYW1zW05GQ19NQVhfUEFSQU1TX0xFTkdUSF07Cit9IF9fcGFja2VkOworCiBzdHJ1Y3QgbmZjX2dlbmxfZGF0YSB7CiAJdTMyIHBvbGxfcmVxX3BvcnRpZDsKIAlzdHJ1Y3QgbXV0ZXggZ2VubF9kYXRhX211dGV4OwpAQCAtMjYyLDYgKzI4Nyw4IEBACiAKIHZvaWQgbmZjX2RyaXZlcl9mYWlsdXJlKHN0cnVjdCBuZmNfZGV2ICpkZXYsIGludCBlcnIpOwogCitpbnQgbmZjX3NlX3RyYW5zYWN0aW9uKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHU4IHNlX2lkeCwKKwkJICAgICAgIHN0cnVjdCBuZmNfZXZ0X3RyYW5zYWN0aW9uICpldnRfdHJhbnNhY3Rpb24pOwogaW50IG5mY19hZGRfc2Uoc3RydWN0IG5mY19kZXYgKmRldiwgdTMyIHNlX2lkeCwgdTE2IHR5cGUpOwogaW50IG5mY19yZW1vdmVfc2Uoc3RydWN0IG5mY19kZXYgKmRldiwgdTMyIHNlX2lkeCk7CiBzdHJ1Y3QgbmZjX3NlICpuZmNfZmluZF9zZShzdHJ1Y3QgbmZjX2RldiAqZGV2LCB1MzIgc2VfaWR4KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25sODAyMTU0LmggYi9pbmNsdWRlL25ldC9ubDgwMjE1NC5oCmluZGV4IDZkYmQ0MDYuLmY4YjViYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25sODAyMTU0LmgKKysrIGIvaW5jbHVkZS9uZXQvbmw4MDIxNTQuaApAQCAtODIsNyArODIsNyBAQAogCU5MODAyMTU0X0FUVFJfVFhfUE9XRVIsCiAKIAlOTDgwMjE1NF9BVFRSX0NDQV9NT0RFLAotCU5MODAyMTU0X0FUVFJfQ0NBX01PREUzX0FORCwKKwlOTDgwMjE1NF9BVFRSX0NDQV9PUFQsCiAJTkw4MDIxNTRfQVRUUl9DQ0FfRURfTEVWRUwsCiAKIAlOTDgwMjE1NF9BVFRSX01BWF9GUkFNRV9SRVRSSUVTLApAQCAtMTE5LDQgKzExOSw0NyBAQAogCU5MODAyMTU0X0lGVFlQRV9NQVggPSBOVU1fTkw4MDIxNTRfSUZUWVBFUyAtIDEKIH07CiAKKy8qKgorICogZW51bSBubDgwMjE1NF9jY2FfbW9kZXMgLSBjY2EgbW9kZXMKKyAqCisgKiBAX19OTDgwMjE1NF9DQ0FfSU5WQUxJRDogY2NhIG1vZGUgbnVtYmVyIDAgaXMgcmVzZXJ2ZWQKKyAqIEBOTDgwMjE1NF9DQ0FfRU5FUkdZOiBFbmVyZ3kgYWJvdmUgdGhyZXNob2xkCisgKiBATkw4MDIxNTRfQ0NBX0NBUlJJRVI6IENhcnJpZXIgc2Vuc2Ugb25seQorICogQE5MODAyMTU0X0NDQV9FTkVSR1lfQ0FSUklFUjogQ2FycmllciBzZW5zZSB3aXRoIGVuZXJneSBhYm92ZSB0aHJlc2hvbGQKKyAqIEBOTDgwMjE1NF9DQ0FfQUxPSEE6IENDQSBzaGFsbCBhbHdheXMgcmVwb3J0IGFuIGlkbGUgbWVkaXVtCisgKiBATkw4MDIxNTRfQ0NBX1VXQl9TSFI6IFVXQiBwcmVhbWJsZSBzZW5zZSBiYXNlZCBvbiB0aGUgU0hSIG9mIGEgZnJhbWUKKyAqIEBOTDgwMjE1NF9DQ0FfVVdCX01VTFRJUEVYRUQ6IFVXQiBwcmVhbWJsZSBzZW5zZSBiYXNlZCBvbiB0aGUgcGFja2V0IHdpdGgKKyAqCXRoZSBtdWx0aXBsZXhlZCBwcmVhbWJsZQorICogQF9fTkw4MDIxNTRfQ0NBX0FUVFJfQUZURVJfTEFTVDogSW50ZXJuYWwKKyAqIEBOTDgwMjE1NF9DQ0FfQVRUUl9NQVg6IE1heGltdW0gQ0NBIGF0dHJpYnV0ZSBudW1iZXIKKyAqLworZW51bSBubDgwMjE1NF9jY2FfbW9kZXMgeworCV9fTkw4MDIxNTRfQ0NBX0lOVkFMSUQsCisJTkw4MDIxNTRfQ0NBX0VORVJHWSwKKwlOTDgwMjE1NF9DQ0FfQ0FSUklFUiwKKwlOTDgwMjE1NF9DQ0FfRU5FUkdZX0NBUlJJRVIsCisJTkw4MDIxNTRfQ0NBX0FMT0hBLAorCU5MODAyMTU0X0NDQV9VV0JfU0hSLAorCU5MODAyMTU0X0NDQV9VV0JfTVVMVElQRVhFRCwKKworCS8qIGtlZXAgbGFzdCAqLworCV9fTkw4MDIxNTRfQ0NBX0FUVFJfQUZURVJfTEFTVCwKKwlOTDgwMjE1NF9DQ0FfQVRUUl9NQVggPSBfX05MODAyMTU0X0NDQV9BVFRSX0FGVEVSX0xBU1QgLSAxCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxNTRfY2NhX29wdHMgLSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGNjYSBtb2RlcworICoKKyAqIEBOTDgwMjE1NF9DQ0FfT1BUX0VORVJHWV9DQVJSSUVSX09SOiBOTDgwMjE1NF9DQ0FfRU5FUkdZX0NBUlJJRVIgd2l0aCBPUgorICogQE5MODAyMTU0X0NDQV9PUFRfRU5FUkdZX0NBUlJJRVJfQU5EOiBOTDgwMjE1NF9DQ0FfRU5FUkdZX0NBUlJJRVIgd2l0aCBBTkQKKyAqLworZW51bSBubDgwMjE1NF9jY2Ffb3B0cyB7CisJTkw4MDIxNTRfQ0NBX09QVF9FTkVSR1lfQ0FSUklFUl9BTkQsCisJTkw4MDIxNTRfQ0NBX09QVF9FTkVSR1lfQ0FSUklFUl9PUiwKKworCS8qIGtlZXAgbGFzdCAqLworCV9fTkw4MDIxNTRfQ0NBX09QVF9BVFRSX0FGVEVSX0xBU1QsCisJTkw4MDIxNTRfQ0NBX09QVF9BVFRSX01BWCA9IF9fTkw4MDIxNTRfQ0NBX09QVF9BVFRSX0FGVEVSX0xBU1QgLSAxCit9OworCiAjZW5kaWYgLyogX19OTDgwMjE1NF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9waW5nLmggYi9pbmNsdWRlL25ldC9waW5nLmgKaW5kZXggZjA3NDA2MC4uY2MxNmQ0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcGluZy5oCisrKyBiL2luY2x1ZGUvbmV0L3BpbmcuaApAQCAtNTksNyArNTksNyBAQAogCiBzdHJ1Y3QgcGluZ2Zha2VoZHIgewogCXN0cnVjdCBpY21waGRyIGljbXBoOwotCXN0cnVjdCBpb3ZlYyAqaW92OworCXN0cnVjdCBtc2doZHIgKm1zZzsKIAlzYV9mYW1pbHlfdCBmYW1pbHk7CiAJX193c3VtIHdjaGVjazsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCmluZGV4IDI3YTMzODMuLjIzNDJiZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbmV0L3BrdF9zY2hlZC5oCkBAIC0zLDYgKzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgogI2luY2x1ZGUgPG5ldC9zY2hfZ2VuZXJpYy5oPgogCiBzdHJ1Y3QgcWRpc2Nfd2Fsa2VyIHsKQEAgLTExNCw2ICsxMTUsMTcgQEAKIGludCB0Y19jbGFzc2lmeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwKIAkJc3RydWN0IHRjZl9yZXN1bHQgKnJlcyk7CiAKK3N0YXRpYyBpbmxpbmUgX19iZTE2IHRjX3NrYl9wcm90b2NvbChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCS8qIFdlIG5lZWQgdG8gdGFrZSBleHRyYSBjYXJlIGluIGNhc2UgdGhlIHNrYiBjYW1lIHZpYQorCSAqIHZsYW4gYWNjZWxlcmF0ZWQgcGF0aC4gSW4gdGhhdCBjYXNlLCB1c2Ugc2tiLT52bGFuX3Byb3RvCisJICogYXMgdGhlIG9yaWdpbmFsIHZsYW4gaGVhZGVyIHdhcyBhbHJlYWR5IHN0cmlwcGVkLgorCSAqLworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKQorCQlyZXR1cm4gc2tiLT52bGFuX3Byb3RvOworCXJldHVybiBza2ItPnByb3RvY29sOworfQorCiAvKiBDYWxjdWxhdGUgbWF4aW1hbCBzaXplIG9mIHBhY2tldCBzZWVuIGJ5IGhhcmRfc3RhcnRfeG1pdAogICAgcm91dGluZSBvZiB0aGlzIGRldmljZS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcmVndWxhdG9yeS5oIGIvaW5jbHVkZS9uZXQvcmVndWxhdG9yeS5oCmluZGV4IGI3NzZkNzIuLmViYzVhMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3JlZ3VsYXRvcnkuaAorKysgYi9pbmNsdWRlL25ldC9yZWd1bGF0b3J5LmgKQEAgLTE0Nyw2ICsxNDcsMjQgQEAKICAqCU5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQsIE5MODAyMTFfSUZUWVBFX1AyUF9HTywKICAqCU5MODAyMTFfSUZUWVBFX1AyUF9ERVZJQ0UuIFRoZSBmbGFnIHdpbGwgYmUgc2V0IGJ5IGRlZmF1bHQgaWYgYSBkZXZpY2UKICAqCWluY2x1ZGVzIGFueSBtb2RlcyB1bnN1cHBvcnRlZCBmb3IgZW5mb3JjZW1lbnQgY2hlY2tpbmcuCisgKiBAUkVHVUxBVE9SWV9XSVBIWV9TRUxGX01BTkFHRUQ6IGZvciBkZXZpY2VzIHRoYXQgZW1wbG95IHdpcGh5LXNwZWNpZmljCisgKglyZWdkb20gbWFuYWdlbWVudC4gVGhlc2UgZGV2aWNlcyB3aWxsIGlnbm9yZSBhbGwgcmVnZG9tIGNoYW5nZXMgbm90CisgKglvcmlnaW5hdGluZyBmcm9tIHRoZWlyIG93biB3aXBoeS4KKyAqCUEgc2VsZi1tYW5hZ2VkIHdpcGh5cyBvbmx5IGVtcGxveXMgcmVndWxhdG9yeSBpbmZvcm1hdGlvbiBvYnRhaW5lZCBmcm9tCisgKgl0aGUgRlcgYW5kIGRyaXZlciBhbmQgZG9lcyBub3QgdXNlIG90aGVyIGNmZzgwMjExIHNvdXJjZXMgbGlrZQorICoJYmVhY29uLWhpbnRzLCBjb3VudHJ5LWNvZGUgSUVzIGFuZCBoaW50cyBmcm9tIG90aGVyIGRldmljZXMgb24gdGhlIHNhbWUKKyAqCXN5c3RlbS4gQ29udmVyc2VseSwgYSBzZWxmLW1hbmFnZWQgd2lwaHkgZG9lcyBub3Qgc2hhcmUgaXRzIHJlZ3VsYXRvcnkKKyAqCWhpbnRzIHdpdGggb3RoZXIgZGV2aWNlcyBpbiB0aGUgc3lzdGVtLiBJZiBhIHN5c3RlbSBjb250YWlucyBzZXZlcmFsCisgKglkZXZpY2VzLCBvbmUgb3IgbW9yZSBvZiB3aGljaCBhcmUgc2VsZi1tYW5hZ2VkLCB0aGVyZSBtaWdodCBiZQorICoJY29udHJhZGljdG9yeSByZWd1bGF0b3J5IHNldHRpbmdzIGJldHdlZW4gdGhlbS4gVXNhZ2Ugb2YgZmxhZyBpcworICoJZ2VuZXJhbGx5IGRpc2NvdXJhZ2VkLiBPbmx5IHVzZSBpdCBpZiB0aGUgRlcvZHJpdmVyIGlzIGluY29tcGF0aWJsZQorICoJd2l0aCBub24tbG9jYWxseSBvcmlnaW5hdGVkIGhpbnRzLgorICoJVGhpcyBmbGFnIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBmbGFnczogJVJFR1VMQVRPUllfQ1VTVE9NX1JFRywKKyAqCSVSRUdVTEFUT1JZX1NUUklDVF9SRUcsICVSRUdVTEFUT1JZX0NPVU5UUllfSUVfRk9MTE9XX1BPV0VSLAorICoJJVJFR1VMQVRPUllfQ09VTlRSWV9JRV9JR05PUkUgYW5kICVSRUdVTEFUT1JZX0RJU0FCTEVfQkVBQ09OX0hJTlRTLgorICoJTWl4aW5nIGFueSBvZiB0aGUgYWJvdmUgZmxhZ3Mgd2l0aCB0aGlzIGZsYWcgd2lsbCByZXN1bHQgaW4gYSBmYWlsdXJlCisgKgl0byByZWdpc3RlciB0aGUgd2lwaHkuIFRoaXMgZmxhZyBpbXBsaWVzCisgKgklUkVHVUxBVE9SWV9ESVNBQkxFX0JFQUNPTl9ISU5UUyBhbmQgJVJFR1VMQVRPUllfQ09VTlRSWV9JRV9JR05PUkUuCiAgKi8KIGVudW0gaWVlZTgwMjExX3JlZ3VsYXRvcnlfZmxhZ3MgewogCVJFR1VMQVRPUllfQ1VTVE9NX1JFRwkJCT0gQklUKDApLApAQCAtMTU2LDYgKzE3NCw3IEBACiAJUkVHVUxBVE9SWV9DT1VOVFJZX0lFX0lHTk9SRQkJPSBCSVQoNCksCiAJUkVHVUxBVE9SWV9FTkFCTEVfUkVMQVhfTk9fSVIgICAgICAgICAgID0gQklUKDUpLAogCVJFR1VMQVRPUllfSUdOT1JFX1NUQUxFX0tJQ0tPRkYgICAgICAgICA9IEJJVCg2KSwKKwlSRUdVTEFUT1JZX1dJUEhZX1NFTEZfTUFOQUdFRAkJPSBCSVQoNyksCiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2ZyZXFfcmFuZ2UgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm91dGUuaCBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKaW5kZXggYjE3Y2YyOC4uZmUyMmQwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcm91dGUuaAorKysgYi9pbmNsdWRlL25ldC9yb3V0ZS5oCkBAIC00Niw2ICs0Niw3IEBACiAKIHN0cnVjdCBmaWJfbmg7CiBzdHJ1Y3QgZmliX2luZm87CitzdHJ1Y3QgdW5jYWNoZWRfbGlzdDsKIHN0cnVjdCBydGFibGUgewogCXN0cnVjdCBkc3RfZW50cnkJZHN0OwogCkBAIC02NCw2ICs2NSw3IEBACiAJdTMyCQkJcnRfcG10dTsKIAogCXN0cnVjdCBsaXN0X2hlYWQJcnRfdW5jYWNoZWQ7CisJc3RydWN0IHVuY2FjaGVkX2xpc3QJKnJ0X3VuY2FjaGVkX2xpc3Q7CiB9OwogCiBzdGF0aWMgaW5saW5lIGJvb2wgcnRfaXNfaW5wdXRfcm91dGUoY29uc3Qgc3RydWN0IHJ0YWJsZSAqcnQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvbmV0L3J0bmV0bGluay5oCmluZGV4IGUyMWI5ZjkuLjZjNmQ1MzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3J0bmV0bGluay5oCisrKyBiL2luY2x1ZGUvbmV0L3J0bmV0bGluay5oCkBAIC00Niw2ICs0Niw3IEBACiAgKgkJCSAgICB0byBjcmVhdGUgd2hlbiBjcmVhdGluZyBhIG5ldyBkZXZpY2UuCiAgKglAZ2V0X251bV9yeF9xdWV1ZXM6IEZ1bmN0aW9uIHRvIGRldGVybWluZSBudW1iZXIgb2YgcmVjZWl2ZSBxdWV1ZXMKICAqCQkJICAgIHRvIGNyZWF0ZSB3aGVuIGNyZWF0aW5nIGEgbmV3IGRldmljZS4KKyAqCUBnZXRfbGlua19uZXQ6IEZ1bmN0aW9uIHRvIGdldCB0aGUgaS9vIG5ldG5zIG9mIHRoZSBkZXZpY2UKICAqLwogc3RydWN0IHJ0bmxfbGlua19vcHMgewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKQEAgLTkzLDYgKzk0LDcgQEAKIAlpbnQJCQkoKmZpbGxfc2xhdmVfaW5mbykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqc2xhdmVfZGV2KTsKKwlzdHJ1Y3QgbmV0CQkqKCpnZXRfbGlua19uZXQpKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogfTsKIAogaW50IF9fcnRubF9saW5rX3JlZ2lzdGVyKHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKaW5kZXggM2QyODJjYi4uYzYwNWQzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAorKysgYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCkBAIC03OSw2ICs3OSw5IEBACiAJc3RydWN0IG5ldGRldl9xdWV1ZQkqZGV2X3F1ZXVlOwogCiAJc3RydWN0IGduZXRfc3RhdHNfcmF0ZV9lc3Q2NAlyYXRlX2VzdDsKKwlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpY19jcHUgX19wZXJjcHUgKmNwdV9ic3RhdHM7CisJc3RydWN0IGduZXRfc3RhdHNfcXVldWUJX19wZXJjcHUgKmNwdV9xc3RhdHM7CisKIAlzdHJ1Y3QgUWRpc2MJCSpuZXh0X3NjaGVkOwogCXN0cnVjdCBza19idWZmCQkqZ3NvX3NrYjsKIAkvKgpAQCAtODYsMTUgKzg5LDkgQEAKIAkgKi8KIAl1bnNpZ25lZCBsb25nCQlzdGF0ZTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXE7Ci0JdW5pb24gewotCQlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpY19wYWNrZWQgYnN0YXRzOwotCQlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpY19jcHUgX19wZXJjcHUgKmNwdV9ic3RhdHM7Ci0JfSBfX3BhY2tlZDsKKwlzdHJ1Y3QgZ25ldF9zdGF0c19iYXNpY19wYWNrZWQgYnN0YXRzOwogCXVuc2lnbmVkIGludAkJX19zdGF0ZTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBnbmV0X3N0YXRzX3F1ZXVlCXFzdGF0czsKLQkJc3RydWN0IGduZXRfc3RhdHNfcXVldWUJX19wZXJjcHUgKmNwdV9xc3RhdHM7Ci0JfSBfX3BhY2tlZDsKKwlzdHJ1Y3QgZ25ldF9zdGF0c19xdWV1ZQlxc3RhdHM7CiAJc3RydWN0IHJjdV9oZWFkCQlyY3VfaGVhZDsKIAlpbnQJCQlwYWRkZWQ7CiAJYXRvbWljX3QJCXJlZmNudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCAyMjEwZmVjLi5lMTM4MjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC04NTcsMTggKzg1Nyw2IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX3Jlc2V0X2Zsb3dfaGFzaChfX3UzMiBoYXNoKQotewotI2lmZGVmIENPTkZJR19SUFMKLQlzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSAqc29ja19mbG93X3RhYmxlOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCXNvY2tfZmxvd190YWJsZSA9IHJjdV9kZXJlZmVyZW5jZShycHNfc29ja19mbG93X3RhYmxlKTsKLQlycHNfcmVzZXRfc29ja19mbG93KHNvY2tfZmxvd190YWJsZSwgaGFzaCk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0jZW5kaWYKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX3JlY29yZF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKICNpZmRlZiBDT05GSUdfUlBTCkBAIC04NzYsMjggKzg2NCwxOCBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19yZXNldF9mbG93KGNvbnN0IHN0cnVjdCBzb2NrICpzaykKLXsKLSNpZmRlZiBDT05GSUdfUlBTCi0Jc29ja19ycHNfcmVzZXRfZmxvd19oYXNoKHNrLT5za19yeGhhc2gpOwotI2VuZGlmCi19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzb2NrX3Jwc19zYXZlX3J4aGFzaChzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCWNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CiAjaWZkZWYgQ09ORklHX1JQUwotCWlmICh1bmxpa2VseShzay0+c2tfcnhoYXNoICE9IHNrYi0+aGFzaCkpIHsKLQkJc29ja19ycHNfcmVzZXRfZmxvdyhzayk7CisJaWYgKHVubGlrZWx5KHNrLT5za19yeGhhc2ggIT0gc2tiLT5oYXNoKSkKIAkJc2stPnNrX3J4aGFzaCA9IHNrYi0+aGFzaDsKLQl9CiAjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNvY2tfcnBzX3Jlc2V0X3J4aGFzaChzdHJ1Y3Qgc29jayAqc2spCiB7CiAjaWZkZWYgQ09ORklHX1JQUwotCXNvY2tfcnBzX3Jlc2V0X2Zsb3coc2spOwogCXNrLT5za19yeGhhc2ggPSAwOwogI2VuZGlmCiB9CkBAIC0xMzc0LDI5ICsxMzUyLDYgQEAKICNkZWZpbmUgU09DS19CSU5EQUREUl9MT0NLCTQKICNkZWZpbmUgU09DS19CSU5EUE9SVF9MT0NLCTgKIAotLyogc29ja19pb2NiOiB1c2VkIHRvIGtpY2sgb2ZmIGFzeW5jIHByb2Nlc3Npbmcgb2Ygc29ja2V0IGlvcyAqLwotc3RydWN0IHNvY2tfaW9jYiB7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCi0JaW50CQkJZmxhZ3M7Ci0JaW50CQkJc2l6ZTsKLQlzdHJ1Y3Qgc29ja2V0CQkqc29jazsKLQlzdHJ1Y3Qgc29jawkJKnNrOwotCXN0cnVjdCBzY21fY29va2llCSpzY207Ci0Jc3RydWN0IG1zZ2hkcgkJKm1zZywgYXN5bmNfbXNnOwotCXN0cnVjdCBraW9jYgkJKmtpb2NiOwotfTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29ja19pb2NiICpraW9jYl90b19zaW9jYihzdHJ1Y3Qga2lvY2IgKmlvY2IpCi17Ci0JcmV0dXJuIChzdHJ1Y3Qgc29ja19pb2NiICopaW9jYi0+cHJpdmF0ZTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qga2lvY2IgKnNpb2NiX3RvX2tpb2NiKHN0cnVjdCBzb2NrX2lvY2IgKnNpKQotewotCXJldHVybiBzaS0+a2lvY2I7Ci19Ci0KIHN0cnVjdCBzb2NrZXRfYWxsb2MgewogCXN0cnVjdCBzb2NrZXQgc29ja2V0OwogCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CkBAIC0xODI2LDI3ICsxNzgxLDI1IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNrYl9kb19jb3B5X2RhdGFfbm9jYWNoZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgIGNoYXIgX191c2VyICpmcm9tLCBjaGFyICp0bywKKwkJCQkJICAgc3RydWN0IGlvdl9pdGVyICpmcm9tLCBjaGFyICp0bywKIAkJCQkJICAgaW50IGNvcHksIGludCBvZmZzZXQpCiB7CiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX05PTkUpIHsKLQkJaW50IGVyciA9IDA7Ci0JCV9fd3N1bSBjc3VtID0gY3N1bV9hbmRfY29weV9mcm9tX3VzZXIoZnJvbSwgdG8sIGNvcHksIDAsICZlcnIpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKKwkJX193c3VtIGNzdW0gPSAwOworCQlpZiAoY3N1bV9hbmRfY29weV9mcm9tX2l0ZXIodG8sIGNvcHksICZjc3VtLCBmcm9tKSAhPSBjb3B5KQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXNrYi0+Y3N1bSA9IGNzdW1fYmxvY2tfYWRkKHNrYi0+Y3N1bSwgY3N1bSwgb2Zmc2V0KTsKIAl9IGVsc2UgaWYgKHNrLT5za19yb3V0ZV9jYXBzICYgTkVUSUZfRl9OT0NBQ0hFX0NPUFkpIHsKLQkJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGZyb20sIGNvcHkpIHx8Ci0JCSAgICBfX2NvcHlfZnJvbV91c2VyX25vY2FjaGUodG8sIGZyb20sIGNvcHkpKQorCQlpZiAoY29weV9mcm9tX2l0ZXJfbm9jYWNoZSh0bywgY29weSwgZnJvbSkgIT0gY29weSkKIAkJCXJldHVybiAtRUZBVUxUOwotCX0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIodG8sIGZyb20sIGNvcHkpKQorCX0gZWxzZSBpZiAoY29weV9mcm9tX2l0ZXIodG8sIGNvcHksIGZyb20pICE9IGNvcHkpCiAJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNrYl9hZGRfZGF0YV9ub2NhY2hlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICAgY2hhciBfX3VzZXIgKmZyb20sIGludCBjb3B5KQorCQkJCSAgICAgICBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20sIGludCBjb3B5KQogewogCWludCBlcnIsIG9mZnNldCA9IHNrYi0+bGVuOwogCkBAIC0xODU4LDcgKzE4MTEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNrYl9jb3B5X3RvX3BhZ2Vfbm9jYWNoZShzdHJ1Y3Qgc29jayAqc2ssIGNoYXIgX191c2VyICpmcm9tLAorc3RhdGljIGlubGluZSBpbnQgc2tiX2NvcHlfdG9fcGFnZV9ub2NhY2hlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlvdl9pdGVyICpmcm9tLAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkJICAgaW50IG9mZiwgaW50IGNvcHkpCkBAIC0yMjYyLDYgKzIyMTUsNyBAQAogZXh0ZXJuIF9fdTMyIHN5c2N0bF93bWVtX21heDsKIGV4dGVybiBfX3UzMiBzeXNjdGxfcm1lbV9tYXg7CiAKK2V4dGVybiBpbnQgc3lzY3RsX3RzdGFtcF9hbGxvd19kYXRhOwogZXh0ZXJuIGludCBzeXNjdGxfb3B0bWVtX21heDsKIAogZXh0ZXJuIF9fdTMyIHN5c2N0bF93bWVtX2RlZmF1bHQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zd2l0Y2hkZXYuaCBiL2luY2x1ZGUvbmV0L3N3aXRjaGRldi5oCmluZGV4IDhhNmQxNjQuLmNmY2RhYzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3N3aXRjaGRldi5oCisrKyBiL2luY2x1ZGUvbmV0L3N3aXRjaGRldi5oCkBAIC0xMSwxMyArMTEsNDYgQEAKICNkZWZpbmUgX0xJTlVYX1NXSVRDSERFVl9IXwogCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKworZW51bSBuZXRkZXZfc3dpdGNoX25vdGlmaWVyX3R5cGUgeworCU5FVERFVl9TV0lUQ0hfRkRCX0FERCA9IDEsCisJTkVUREVWX1NXSVRDSF9GREJfREVMLAorfTsKKworc3RydWN0IG5ldGRldl9zd2l0Y2hfbm90aWZpZXJfaW5mbyB7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKK307CisKK3N0cnVjdCBuZXRkZXZfc3dpdGNoX25vdGlmaWVyX2ZkYl9pbmZvIHsKKwlzdHJ1Y3QgbmV0ZGV2X3N3aXRjaF9ub3RpZmllcl9pbmZvIGluZm87IC8qIG11c3QgYmUgZmlyc3QgKi8KKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyOworCXUxNiB2aWQ7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICoKK25ldGRldl9zd2l0Y2hfbm90aWZpZXJfaW5mb190b19kZXYoY29uc3Qgc3RydWN0IG5ldGRldl9zd2l0Y2hfbm90aWZpZXJfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gaW5mby0+ZGV2OworfQogCiAjaWZkZWYgQ09ORklHX05FVF9TV0lUQ0hERVYKIAogaW50IG5ldGRldl9zd2l0Y2hfcGFyZW50X2lkX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCXN0cnVjdCBuZXRkZXZfcGh5c19pdGVtX2lkICpwc2lkKTsKIGludCBuZXRkZXZfc3dpdGNoX3BvcnRfc3RwX3VwZGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBzdGF0ZSk7Ci0KK2ludCByZWdpc3Rlcl9uZXRkZXZfc3dpdGNoX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworaW50IHVucmVnaXN0ZXJfbmV0ZGV2X3N3aXRjaF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2ludCBjYWxsX25ldGRldl9zd2l0Y2hfbm90aWZpZXJzKHVuc2lnbmVkIGxvbmcgdmFsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSBzdHJ1Y3QgbmV0ZGV2X3N3aXRjaF9ub3RpZmllcl9pbmZvICppbmZvKTsKK2ludCBuZXRkZXZfc3dpdGNoX3BvcnRfYnJpZGdlX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdTE2IGZsYWdzKTsKK2ludCBuZXRkZXZfc3dpdGNoX3BvcnRfYnJpZGdlX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdTE2IGZsYWdzKTsKK2ludCBuZG9fZGZsdF9uZXRkZXZfc3dpdGNoX3BvcnRfYnJpZGdlX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB1MTYgZmxhZ3MpOworaW50IG5kb19kZmx0X25ldGRldl9zd2l0Y2hfcG9ydF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IG5sbXNnaGRyICpubGgsIHUxNiBmbGFncyk7CiAjZWxzZQogCiBzdGF0aWMgaW5saW5lIGludCBuZXRkZXZfc3dpdGNoX3BhcmVudF9pZF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTMyLDYgKzY1LDUwIEBACiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCitzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl9uZXRkZXZfc3dpdGNoX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHVucmVnaXN0ZXJfbmV0ZGV2X3N3aXRjaF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBjYWxsX25ldGRldl9zd2l0Y2hfbm90aWZpZXJzKHVuc2lnbmVkIGxvbmcgdmFsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IG5ldGRldl9zd2l0Y2hfbm90aWZpZXJfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5ldGRldl9zd2l0Y2hfcG9ydF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJCQkJICAgIHUxNiBmbGFncykKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5ldGRldl9zd2l0Y2hfcG9ydF9icmlkZ2VfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJCQkJICAgIHUxNiBmbGFncykKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5kb19kZmx0X25ldGRldl9zd2l0Y2hfcG9ydF9icmlkZ2VfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJCXN0cnVjdCBubG1zZ2hkciAqbmxoLAorCQkJCQkJCXUxNiBmbGFncykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbmRvX2RmbHRfbmV0ZGV2X3N3aXRjaF9wb3J0X2JyaWRnZV9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkJc3RydWN0IG5sbXNnaGRyICpubGgsCisJCQkJCQkJdTE2IGZsYWdzKQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9MSU5VWF9TV0lUQ0hERVZfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjX2FjdC90Y19icGYuaCBiL2luY2x1ZGUvbmV0L3RjX2FjdC90Y19icGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmEwNzBmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2JwZi5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgSmlyaSBQaXJrbyA8amlyaUByZXNudWxsaS51cz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpZm5kZWYgX19ORVRfVENfQlBGX0gKKyNkZWZpbmUgX19ORVRfVENfQlBGX0gKKworI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgorI2luY2x1ZGUgPG5ldC9hY3RfYXBpLmg+CisKK3N0cnVjdCB0Y2ZfYnBmIHsKKwlzdHJ1Y3QgdGNmX2NvbW1vbgljb21tb247CisJc3RydWN0IGJwZl9wcm9nCQkqZmlsdGVyOworCXN0cnVjdCBzb2NrX2ZpbHRlcgkqYnBmX29wczsKKwl1MTYJCQlicGZfbnVtX29wczsKK307CisjZGVmaW5lIHRvX2JwZihhKSBcCisJY29udGFpbmVyX29mKGEtPnByaXYsIHN0cnVjdCB0Y2ZfYnBmLCBjb21tb24pCisKKyNlbmRpZiAvKiBfX05FVF9UQ19CUEZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2Nvbm5tYXJrLmggYi9pbmNsdWRlL25ldC90Y19hY3QvdGNfY29ubm1hcmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzExMDRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2Nvbm5tYXJrLmgKQEAgLTAsMCArMSwxNCBAQAorI2lmbmRlZiBfX05FVF9UQ19DT05OTUFSS19ICisjZGVmaW5lIF9fTkVUX1RDX0NPTk5NQVJLX0gKKworI2luY2x1ZGUgPG5ldC9hY3RfYXBpLmg+CisKK3N0cnVjdCB0Y2ZfY29ubm1hcmtfaW5mbyB7CisJc3RydWN0IHRjZl9jb21tb24gY29tbW9uOworCXUxNiB6b25lOworfTsKKworI2RlZmluZSB0b19jb25ubWFyayhhKSBcCisJY29udGFpbmVyX29mKGEtPnByaXYsIHN0cnVjdCB0Y2ZfY29ubm1hcmtfaW5mbywgY29tbW9uKQorCisjZW5kaWYgLyogX19ORVRfVENfQ09OTk1BUktfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCBmNTBmMjlmYWYuLjhkNmI5ODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC0yNjIsOCArMjYyLDYgQEAKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF9ub21ldHJpY3Nfc2F2ZTsKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF9tb2RlcmF0ZV9yY3ZidWY7CiBleHRlcm4gaW50IHN5c2N0bF90Y3BfdHNvX3dpbl9kaXZpc29yOwotZXh0ZXJuIGludCBzeXNjdGxfdGNwX210dV9wcm9iaW5nOwotZXh0ZXJuIGludCBzeXNjdGxfdGNwX2Jhc2VfbXNzOwogZXh0ZXJuIGludCBzeXNjdGxfdGNwX3dvcmthcm91bmRfc2lnbmVkX3dpbmRvd3M7CiBleHRlcm4gaW50IHN5c2N0bF90Y3Bfc2xvd19zdGFydF9hZnRlcl9pZGxlOwogZXh0ZXJuIGludCBzeXNjdGxfdGNwX3RoaW5fbGluZWFyX3RpbWVvdXRzOwpAQCAtMjc0LDYgKzI3Miw3IEBACiBleHRlcm4gdW5zaWduZWQgaW50IHN5c2N0bF90Y3Bfbm90c2VudF9sb3dhdDsKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF9taW5fdHNvX3NlZ3M7CiBleHRlcm4gaW50IHN5c2N0bF90Y3BfYXV0b2Nvcmtpbmc7CitleHRlcm4gaW50IHN5c2N0bF90Y3BfaW52YWxpZF9yYXRlbGltaXQ7CiAKIGV4dGVybiBhdG9taWNfbG9uZ190IHRjcF9tZW1vcnlfYWxsb2NhdGVkOwogZXh0ZXJuIHN0cnVjdCBwZXJjcHVfY291bnRlciB0Y3Bfc29ja2V0c19hbGxvY2F0ZWQ7CkBAIC00NDgsNiArNDQ3LDcgQEAKIHN0cnVjdCBzb2NrICp0Y3BfY3JlYXRlX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLAogCQkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAkJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3ZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpOwogc3RydWN0IHNvY2sgKnRjcF92NF9zeW5fcmVjdl9zb2NrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAkJCQkgIHN0cnVjdCBkc3RfZW50cnkgKmRzdCk7CkBAIC02MzYsNiArNjM2LDExIEBACiAJcmV0dXJuIGppZmZpZXNfdG9fdXNlY3ModGNwX3J0b19taW4oc2spKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIHRjcF9jYV9kc3RfbG9ja2VkKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3sKKwlyZXR1cm4gZHN0X21ldHJpY19sb2NrZWQoZHN0LCBSVEFYX0NDX0FMR08pOworfQorCiAvKiBDb21wdXRlIHRoZSBhY3R1YWwgcmVjZWl2ZSB3aW5kb3cgd2UgYXJlIGN1cnJlbnRseSBhZHZlcnRpc2luZy4KICAqIFJjdl9ueHQgY2FuIGJlIGFmdGVyIHRoZSB3aW5kb3cgaWYgb3VyIHBlZXIgcHVzaCBtb3JlIGRhdGEKICAqIHRoYW4gdGhlIG9mZmVyZWQgd2luZG93LgpAQCAtNzg3LDYgKzc5Miw4IEBACiAjZGVmaW5lIFRDUF9DQV9NQVgJMTI4CiAjZGVmaW5lIFRDUF9DQV9CVUZfTUFYCShUQ1BfQ0FfTkFNRV9NQVgqVENQX0NBX01BWCkKIAorI2RlZmluZSBUQ1BfQ0FfVU5TUEVDCTAKKwogLyogQWxnb3JpdGhtIGNhbiBiZSBzZXQgb24gc29ja2V0IHdpdGhvdXQgQ0FQX05FVF9BRE1JTiBwcml2aWxlZ2VzICovCiAjZGVmaW5lIFRDUF9DT05HX05PTl9SRVNUUklDVEVEIDB4MQogLyogUmVxdWlyZXMgRUNOL0VDVCBzZXQgb24gYWxsIHBhY2tldHMgKi8KQEAgLTc5NCw3ICs4MDEsOCBAQAogCiBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIga2V5OworCXUzMiBmbGFnczsKIAogCS8qIGluaXRpYWxpemUgcHJpdmF0ZSBkYXRhIChvcHRpb25hbCkgKi8KIAl2b2lkICgqaW5pdCkoc3RydWN0IHNvY2sgKnNrKTsKQEAgLTgzNCwxMyArODQyLDI0IEBACiB2b2lkIHRjcF9nZXRfYWxsb3dlZF9jb25nZXN0aW9uX2NvbnRyb2woY2hhciAqYnVmLCBzaXplX3QgbGVuKTsKIGludCB0Y3Bfc2V0X2FsbG93ZWRfY29uZ2VzdGlvbl9jb250cm9sKGNoYXIgKmFsbG93ZWQpOwogaW50IHRjcF9zZXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbmFtZSk7Ci12b2lkIHRjcF9zbG93X3N0YXJ0KHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiBhY2tlZCk7Ci12b2lkIHRjcF9jb25nX2F2b2lkX2FpKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiB3KTsKK3UzMiB0Y3Bfc2xvd19zdGFydChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgYWNrZWQpOwordm9pZCB0Y3BfY29uZ19hdm9pZF9haShzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgdywgdTMyIGFja2VkKTsKIAogdTMyIHRjcF9yZW5vX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzayk7CiB2b2lkIHRjcF9yZW5vX2NvbmdfYXZvaWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCB1MzIgYWNrZWQpOwogZXh0ZXJuIHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgdGNwX3Jlbm87CiAKK3N0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKnRjcF9jYV9maW5kX2tleSh1MzIga2V5KTsKK3UzMiB0Y3BfY2FfZ2V0X2tleV9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOworI2lmZGVmIENPTkZJR19JTkVUCitjaGFyICp0Y3BfY2FfZ2V0X25hbWVfYnlfa2V5KHUzMiBrZXksIGNoYXIgKmJ1ZmZlcik7CisjZWxzZQorc3RhdGljIGlubGluZSBjaGFyICp0Y3BfY2FfZ2V0X25hbWVfYnlfa2V5KHUzMiBrZXksIGNoYXIgKmJ1ZmZlcikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIGJvb2wgdGNwX2NhX25lZWRzX2Vjbihjb25zdCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwpAQCAtMTEyNCw2ICsxMTQzLDcgQEAKIAl0Y3BfcnNrKHJlcSktPnJjdl9pc24gPSBUQ1BfU0tCX0NCKHNrYiktPnNlcTsKIAl0Y3BfcnNrKHJlcSktPnJjdl9ueHQgPSBUQ1BfU0tCX0NCKHNrYiktPnNlcSArIDE7CiAJdGNwX3JzayhyZXEpLT5zbnRfc3luYWNrID0gdGNwX3RpbWVfc3RhbXA7CisJdGNwX3JzayhyZXEpLT5sYXN0X29vd19hY2tfdGltZSA9IDA7CiAJcmVxLT5tc3MgPSByeF9vcHQtPm1zc19jbGFtcDsKIAlyZXEtPnRzX3JlY2VudCA9IHJ4X29wdC0+c2F3X3RzdGFtcCA/IHJ4X29wdC0+cmN2X3RzdmFsIDogMDsKIAlpcmVxLT50c3RhbXBfb2sgPSByeF9vcHQtPnRzdGFtcF9vazsKQEAgLTEyMTYsNiArMTIzNiwzNyBAQAogCXJldHVybiB0cnVlOwogfQogCisvKiBSZXR1cm4gdHJ1ZSBpZiB3ZSdyZSBjdXJyZW50bHkgcmF0ZS1saW1pdGluZyBvdXQtb2Ytd2luZG93IEFDS3MgYW5kCisgKiB0aHVzIHNob3VsZG4ndCBzZW5kIGEgZHVwYWNrIHJpZ2h0IG5vdy4gV2UgcmF0ZS1saW1pdCBkdXBhY2tzIGluCisgKiByZXNwb25zZSB0byBvdXQtb2Ytd2luZG93IFNZTnMgb3IgQUNLcyB0byBtaXRpZ2F0ZSBBQ0sgbG9vcHMgb3IgRG9TCisgKiBhdHRhY2tzIHRoYXQgc2VuZCByZXBlYXRlZCBTWU5zIG9yIEFDS3MgZm9yIHRoZSBzYW1lIGNvbm5lY3Rpb24uIFRvCisgKiBkbyB0aGlzLCB3ZSBkbyBub3Qgc2VuZCBhIGR1cGxpY2F0ZSBTWU5BQ0sgb3IgQUNLIGlmIHRoZSByZW1vdGUKKyAqIGVuZHBvaW50IGlzIHNlbmRpbmcgb3V0LW9mLXdpbmRvdyBTWU5zIG9yIHB1cmUgQUNLcyBhdCBhIGhpZ2ggcmF0ZS4KKyAqLworc3RhdGljIGlubGluZSBib29sIHRjcF9vb3dfcmF0ZV9saW1pdGVkKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJaW50IG1pYl9pZHgsIHUzMiAqbGFzdF9vb3dfYWNrX3RpbWUpCit7CisJLyogRGF0YSBwYWNrZXRzIHdpdGhvdXQgU1lOcyBhcmUgbm90IGxpa2VseSBwYXJ0IG9mIGFuIEFDSyBsb29wLiAqLworCWlmICgoVENQX1NLQl9DQihza2IpLT5zZXEgIT0gVENQX1NLQl9DQihza2IpLT5lbmRfc2VxKSAmJgorCSAgICAhdGNwX2hkcihza2IpLT5zeW4pCisJCWdvdG8gbm90X3JhdGVfbGltaXRlZDsKKworCWlmICgqbGFzdF9vb3dfYWNrX3RpbWUpIHsKKwkJczMyIGVsYXBzZWQgPSAoczMyKSh0Y3BfdGltZV9zdGFtcCAtICpsYXN0X29vd19hY2tfdGltZSk7CisKKwkJaWYgKDAgPD0gZWxhcHNlZCAmJiBlbGFwc2VkIDwgc3lzY3RsX3RjcF9pbnZhbGlkX3JhdGVsaW1pdCkgeworCQkJTkVUX0lOQ19TVEFUU19CSChuZXQsIG1pYl9pZHgpOworCQkJcmV0dXJuIHRydWU7CS8qIHJhdGUtbGltaXRlZDogZG9uJ3Qgc2VuZCB5ZXQhICovCisJCX0KKwl9CisKKwkqbGFzdF9vb3dfYWNrX3RpbWUgPSB0Y3BfdGltZV9zdGFtcDsKKworbm90X3JhdGVfbGltaXRlZDoKKwlyZXR1cm4gZmFsc2U7CS8qIG5vdCByYXRlLWxpbWl0ZWQ6IGdvIGFoZWFkLCBzZW5kIGR1cGFjayBub3chICovCit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfbWliX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCS8qIFNlZSBSRkMgMjAxMiAqLwpAQCAtMTY5Myw0ICsxNzQ0LDE5IEBACiAJcmV0dXJuIGRvcHQ7CiB9CiAKKy8qIGxvY2FsbHkgZ2VuZXJhdGVkIFRDUCBwdXJlIEFDS3MgaGF2ZSBza2ItPnRydWVzaXplID09IDIKKyAqIChjaGVjayB0Y3Bfc2VuZF9hY2soKSBpbiBuZXQvaXB2NC90Y3Bfb3V0cHV0LmMgKQorICogVGhpcyBpcyBtdWNoIGZhc3RlciB0aGFuIGRpc3NlY3RpbmcgdGhlIHBhY2tldCB0byBmaW5kIG91dC4KKyAqIChUaGluayBvZiBHUkUgZW5jYXBzdWxhdGlvbnMsIElQdjQsIElQdjYsIC4uLikKKyAqLworc3RhdGljIGlubGluZSBib29sIHNrYl9pc190Y3BfcHVyZV9hY2soY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gc2tiLT50cnVlc2l6ZSA9PSAyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3NldF90Y3BfcHVyZV9hY2soc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlza2ItPnRydWVzaXplID0gMjsKK30KKwogI2VuZGlmCS8qIF9UQ1BfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdWRwX3R1bm5lbC5oIGIvaW5jbHVkZS9uZXQvdWRwX3R1bm5lbC5oCmluZGV4IDJhNTBhNzAuLjFhMjBkMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3VkcF90dW5uZWwuaAorKysgYi9pbmNsdWRlL25ldC91ZHBfdHVubmVsLmgKQEAgLTc3LDE3ICs3NywxNyBAQAogCQkJICAgc3RydWN0IHVkcF90dW5uZWxfc29ja19jZmcgKnNvY2tfY2ZnKTsKIAogLyogVHJhbnNtaXQgdGhlIHNrYiB1c2luZyBVRFAgZW5jYXBzdWxhdGlvbi4gKi8KLWludCB1ZHBfdHVubmVsX3htaXRfc2tiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBydGFibGUgKnJ0LAotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHNyYywgX19iZTMyIGRzdCwKLQkJCV9fdTggdG9zLCBfX3U4IHR0bCwgX19iZTE2IGRmLCBfX2JlMTYgc3JjX3BvcnQsCi0JCQlfX2JlMTYgZHN0X3BvcnQsIGJvb2wgeG5ldCk7CitpbnQgdWRwX3R1bm5lbF94bWl0X3NrYihzdHJ1Y3QgcnRhYmxlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCV9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsIF9fdTggdG9zLCBfX3U4IHR0bCwKKwkJCV9fYmUxNiBkZiwgX19iZTE2IHNyY19wb3J0LCBfX2JlMTYgZHN0X3BvcnQsCisJCQlib29sIHhuZXQsIGJvb2wgbm9jaGVjayk7CiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQotaW50IHVkcF90dW5uZWw2X3htaXRfc2tiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKLQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCitpbnQgdWRwX3R1bm5lbDZfeG1pdF9za2Ioc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkgc3RydWN0IGluNl9hZGRyICpkYWRkciwKIAkJCSBfX3U4IHByaW8sIF9fdTggdHRsLCBfX2JlMTYgc3JjX3BvcnQsCi0JCQkgX19iZTE2IGRzdF9wb3J0KTsKKwkJCSBfX2JlMTYgZHN0X3BvcnQsIGJvb2wgbm9jaGVjayk7CiAjZW5kaWYKIAogdm9pZCB1ZHBfdHVubmVsX3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3VkcGxpdGUuaCBiL2luY2x1ZGUvbmV0L3VkcGxpdGUuaAppbmRleCBhZTdjOGQxLi44MDc2MTkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC91ZHBsaXRlLmgKKysrIGIvaW5jbHVkZS9uZXQvdWRwbGl0ZS5oCkBAIC0yMCw4ICsyMCw3IEBACiAJCQkJICAgICAgaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbXNnaGRyICptc2cgPSBmcm9tOwotCS8qIFhYWDogc3RyaXBwaW5nIGNvbnN0ICovCi0JcmV0dXJuIG1lbWNweV9mcm9taW92ZWNlbmQodG8sIChzdHJ1Y3QgaW92ZWMgKiltc2ctPm1zZ19pdGVyLmlvdiwgb2Zmc2V0LCBsZW4pOworCXJldHVybiBjb3B5X2Zyb21faXRlcih0bywgbGVuLCAmbXNnLT5tc2dfaXRlcikgIT0gbGVuID8gLUVGQVVMVCA6IDA7CiB9CiAKIC8qIERlc2lnbmF0ZSBzayBhcyBVRFAtTGl0ZSBzb2NrZXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3Z4bGFuLmggYi9pbmNsdWRlL25ldC92eGxhbi5oCmluZGV4IDkwMzQ2MWEuLjI5MjdkNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Z4bGFuLmgKKysrIGIvaW5jbHVkZS9uZXQvdnhsYW4uaApAQCAtMTEsMTQgKzExLDk2IEBACiAjZGVmaW5lIFZOSV9IQVNIX0JJVFMJMTAKICNkZWZpbmUgVk5JX0hBU0hfU0laRQkoMTw8Vk5JX0hBU0hfQklUUykKIAotLyogVlhMQU4gcHJvdG9jb2wgaGVhZGVyICovCisvKgorICogVlhMQU4gR3JvdXAgQmFzZWQgUG9saWN5IEV4dGVuc2lvbjoKKyAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiB8MXwtfC18LXwxfC18LXwtfFJ8RHxSfFJ8QXxSfFJ8UnwgICAgICAgIEdyb3VwIFBvbGljeSBJRCAgICAgICAgfAorICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqIHwgICAgICAgICAgICAgICAgVlhMQU4gTmV0d29yayBJZGVudGlmaWVyIChWTkkpIHwgICBSZXNlcnZlZCAgICB8CisgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICoKKyAqIEQgPSBEb24ndCBMZWFybiBiaXQuIFdoZW4gc2V0LCB0aGlzIGJpdCBpbmRpY2F0ZXMgdGhhdCB0aGUgZWdyZXNzCisgKiAgICAgVlRFUCBNVVNUIE5PVCBsZWFybiB0aGUgc291cmNlIGFkZHJlc3Mgb2YgdGhlIGVuY2Fwc3VsYXRlZCBmcmFtZS4KKyAqCisgKiBBID0gSW5kaWNhdGVzIHRoYXQgdGhlIGdyb3VwIHBvbGljeSBoYXMgYWxyZWFkeSBiZWVuIGFwcGxpZWQgdG8KKyAqICAgICB0aGlzIHBhY2tldC4gUG9saWNpZXMgTVVTVCBOT1QgYmUgYXBwbGllZCBieSBkZXZpY2VzIHdoZW4gdGhlCisgKiAgICAgQSBiaXQgaXMgc2V0LgorICoKKyAqIFswXSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtc21pdGgtdnhsYW4tZ3JvdXAtcG9saWN5CisgKi8KK3N0cnVjdCB2eGxhbmhkcl9nYnAgeworCV9fdTgJdnhfZmxhZ3M7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECisJX191OAlyZXNlcnZlZF9mbGFnczE6MywKKwkJcG9saWN5X2FwcGxpZWQ6MSwKKwkJcmVzZXJ2ZWRfZmxhZ3MyOjIsCisJCWRvbnRfbGVhcm46MSwKKwkJcmVzZXJ2ZWRfZmxhZ3MzOjE7CisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwlfX3U4CXJlc2VydmVkX2ZsYWdzMToxLAorCQlkb250X2xlYXJuOjEsCisJCXJlc2VydmVkX2ZsYWdzMjoyLAorCQlwb2xpY3lfYXBwbGllZDoxLAorCQlyZXNlcnZlZF9mbGFnczM6MzsKKyNlbHNlCisjZXJyb3IJIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCisjZW5kaWYKKwlfX2JlMTYJcG9saWN5X2lkOworCV9fYmUzMgl2eF92bmk7Cit9OworCisjZGVmaW5lIFZYTEFOX0dCUF9VU0VEX0JJVFMgKFZYTEFOX0hGX0dCUCB8IDB4RkZGRkZGKQorCisvKiBza2ItPm1hcmsgbWFwcGluZworICoKKyAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiB8UnxSfFJ8UnxSfFJ8UnxSfFJ8RHxSfFJ8QXxSfFJ8UnwgICAgICAgIEdyb3VwIFBvbGljeSBJRCAgICAgICAgfAorICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqLworI2RlZmluZSBWWExBTl9HQlBfRE9OVF9MRUFSTgkJKEJJVCg2KSA8PCAxNikKKyNkZWZpbmUgVlhMQU5fR0JQX1BPTElDWV9BUFBMSUVECShCSVQoMykgPDwgMTYpCisjZGVmaW5lIFZYTEFOX0dCUF9JRF9NQVNLCQkoMHhGRkZGKQorCisvKiBWWExBTiBwcm90b2NvbCBoZWFkZXI6CisgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogfEd8UnxSfFJ8SXxSfFJ8Q3wgICAgICAgICAgICAgICBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiB8ICAgICAgICAgICAgICAgIFZYTEFOIE5ldHdvcmsgSWRlbnRpZmllciAoVk5JKSB8ICAgUmVzZXJ2ZWQgICAgfAorICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqCisgKiBHID0gMQlHcm91cCBQb2xpY3kgKFZYTEFOLUdCUCkKKyAqIEkgPSAxCVZYTEFOIE5ldHdvcmsgSWRlbnRpZmllciAoVk5JKSBwcmVzZW50CisgKiBDID0gMQlSZW1vdGUgY2hlY2tzdW0gb2ZmbG9hZCAoUkNPKQorICovCiBzdHJ1Y3QgdnhsYW5oZHIgewogCV9fYmUzMiB2eF9mbGFnczsKIAlfX2JlMzIgdnhfdm5pOwogfTsKIAorLyogVlhMQU4gaGVhZGVyIGZsYWdzLiAqLworI2RlZmluZSBWWExBTl9IRl9SQ08gQklUKDI0KQorI2RlZmluZSBWWExBTl9IRl9WTkkgQklUKDI3KQorI2RlZmluZSBWWExBTl9IRl9HQlAgQklUKDMxKQorCisvKiBSZW1vdGUgY2hlY2tzdW0gb2ZmbG9hZCBoZWFkZXIgb3B0aW9uICovCisjZGVmaW5lIFZYTEFOX1JDT19NQVNLICAweDdmICAgIC8qIExhc3QgYnl0ZSBvZiB2bmkgZmllbGQgKi8KKyNkZWZpbmUgVlhMQU5fUkNPX1VEUCAgIDB4ODAgICAgLyogSW5kaWNhdGUgVURQIFJDTyAoVENQIHdoZW4gbm90IHNldCAqKSAqLworI2RlZmluZSBWWExBTl9SQ09fU0hJRlQgMSAgICAgICAvKiBMZWZ0IHNoaWZ0IG9mIHN0YXJ0ICovCisjZGVmaW5lIFZYTEFOX1JDT19TSElGVF9NQVNLICgoMSA8PCBWWExBTl9SQ09fU0hJRlQpIC0gMSkKKyNkZWZpbmUgVlhMQU5fTUFYX1JFTUNTVU1fU1RBUlQgKFZYTEFOX1JDT19NQVNLIDw8IFZYTEFOX1JDT19TSElGVCkKKworI2RlZmluZSBWWExBTl9OX1ZJRCAgICAgKDF1IDw8IDI0KQorI2RlZmluZSBWWExBTl9WSURfTUFTSyAgKFZYTEFOX05fVklEIC0gMSkKKyNkZWZpbmUgVlhMQU5fSExFTiAoc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsgc2l6ZW9mKHN0cnVjdCB2eGxhbmhkcikpCisKK3N0cnVjdCB2eGxhbl9tZXRhZGF0YSB7CisJX19iZTMyCQl2bmk7CisJdTMyCQlnYnA7Cit9OworCiBzdHJ1Y3QgdnhsYW5fc29jazsKLXR5cGVkZWYgdm9pZCAodnhsYW5fcmN2X3QpKHN0cnVjdCB2eGxhbl9zb2NrICp2aCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGtleSk7Cit0eXBlZGVmIHZvaWQgKHZ4bGFuX3Jjdl90KShzdHJ1Y3QgdnhsYW5fc29jayAqdmgsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICBzdHJ1Y3QgdnhsYW5fbWV0YWRhdGEgKm1kKTsKIAogLyogcGVyIFVEUCBzb2NrZXQgaW5mb3JtYXRpb24gKi8KIHN0cnVjdCB2eGxhbl9zb2NrIHsKQEAgLTMxLDYgKzExMyw3IEBACiAJc3RydWN0IGhsaXN0X2hlYWQgdm5pX2xpc3RbVk5JX0hBU0hfU0laRV07CiAJYXRvbWljX3QJICByZWZjbnQ7CiAJc3RydWN0IHVkcF9vZmZsb2FkIHVkcF9vZmZsb2FkczsKKwl1MzIJCSAgZmxhZ3M7CiB9OwogCiAjZGVmaW5lIFZYTEFOX0ZfTEVBUk4JCQkweDAxCkBAIC00Miw2ICsxMjUsMTYgQEAKICNkZWZpbmUgVlhMQU5fRl9VRFBfQ1NVTQkJMHg0MAogI2RlZmluZSBWWExBTl9GX1VEUF9aRVJPX0NTVU02X1RYCTB4ODAKICNkZWZpbmUgVlhMQU5fRl9VRFBfWkVST19DU1VNNl9SWAkweDEwMAorI2RlZmluZSBWWExBTl9GX1JFTUNTVU1fVFgJCTB4MjAwCisjZGVmaW5lIFZYTEFOX0ZfUkVNQ1NVTV9SWAkJMHg0MDAKKyNkZWZpbmUgVlhMQU5fRl9HQlAJCQkweDgwMAorCisvKiBGbGFncyB0aGF0IGFyZSB1c2VkIGluIHRoZSByZWNlaXZlIHBhdGNoLiBUaGVzZSBmbGFncyBtdXN0IG1hdGNoIGluCisgKiBvcmRlciBmb3IgYSBzb2NrZXQgdG8gYmUgc2hhcmVhYmxlCisgKi8KKyNkZWZpbmUgVlhMQU5fRl9SQ1ZfRkxBR1MJCShWWExBTl9GX0dCUCB8CQkJXAorCQkJCQkgVlhMQU5fRl9VRFBfWkVST19DU1VNNl9SWCB8CVwKKwkJCQkJIFZYTEFOX0ZfUkVNQ1NVTV9SWCkKIAogc3RydWN0IHZ4bGFuX3NvY2sgKnZ4bGFuX3NvY2tfYWRkKHN0cnVjdCBuZXQgKm5ldCwgX19iZTE2IHBvcnQsCiAJCQkJICB2eGxhbl9yY3ZfdCAqcmN2LCB2b2lkICpkYXRhLApAQCAtNDksMTAgKzE0MiwxMCBAQAogCiB2b2lkIHZ4bGFuX3NvY2tfcmVsZWFzZShzdHJ1Y3QgdnhsYW5fc29jayAqdnMpOwogCi1pbnQgdnhsYW5feG1pdF9za2Ioc3RydWN0IHZ4bGFuX3NvY2sgKnZzLAotCQkgICBzdHJ1Y3QgcnRhYmxlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2ludCB2eGxhbl94bWl0X3NrYihzdHJ1Y3QgcnRhYmxlICpydCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJICAgX19iZTMyIHNyYywgX19iZTMyIGRzdCwgX191OCB0b3MsIF9fdTggdHRsLCBfX2JlMTYgZGYsCi0JCSAgIF9fYmUxNiBzcmNfcG9ydCwgX19iZTE2IGRzdF9wb3J0LCBfX2JlMzIgdm5pLCBib29sIHhuZXQpOworCQkgICBfX2JlMTYgc3JjX3BvcnQsIF9fYmUxNiBkc3RfcG9ydCwgc3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCwKKwkJICAgYm9vbCB4bmV0LCB1MzIgdnhmbGFncyk7CiAKIHN0YXRpYyBpbmxpbmUgbmV0ZGV2X2ZlYXR1cmVzX3QgdnhsYW5fZmVhdHVyZXNfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkJCSAgICAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaCBiL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCmluZGV4IDBkNzRmMWQuLjY1OTk0YTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oCkBAIC0xNzA3LDEwICsxNzA3LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgaWJfY29weV90b191ZGF0YShzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhLCB2b2lkICpzcmMsIHNpemVfdCBsZW4pCiB7Ci0Jc2l6ZV90IGNvcHlfc3o7Ci0KLQljb3B5X3N6ID0gbWluX3Qoc2l6ZV90LCBsZW4sIHVkYXRhLT5vdXRsZW4pOwotCXJldHVybiBjb3B5X3RvX3VzZXIodWRhdGEtPm91dGJ1Ziwgc3JjLCBjb3B5X3N6KSA/IC1FRkFVTFQgOiAwOworCXJldHVybiBjb3B5X3RvX3VzZXIodWRhdGEtPm91dGJ1Ziwgc3JjLCBsZW4pID8gLUVGQVVMVCA6IDA7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2kuaCBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKaW5kZXggOGE3ZjhhZC4uZDBhNjZhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpL3Njc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaS5oCkBAIC0xOTUsNiArMTk1LDkgQEAKICNkZWZpbmUJQVRBXzE2CQkgICAgICAweDg1CS8qIDE2LWJ5dGUgcGFzcy10aHJ1ICovCiAjZGVmaW5lCUFUQV8xMgkJICAgICAgMHhhMQkvKiAxMi1ieXRlIHBhc3MtdGhydSAqLwogCisvKiBWZW5kb3Igc3BlY2lmaWMgQ0RCcyBzdGFydCBoZXJlICovCisjZGVmaW5lIFZFTkRPUl9TUEVDSUZJQ19DREIgMHhjMAorCiAvKgogICoJU0NTSSBjb21tYW5kIGxlbmd0aHMKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGJnLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kYmcuaAppbmRleCA3OTgyNzk1Li5mODE3MGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kYmcuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kYmcuaApAQCAtNSw4ICs1LDExIEBACiBzdHJ1Y3Qgc2NzaV9kZXZpY2U7CiBzdHJ1Y3Qgc2NzaV9zZW5zZV9oZHI7CiAKKyNkZWZpbmUgU0NTSV9MT0dfQlVGU0laRSAxMjgKKwogZXh0ZXJuIHZvaWQgc2NzaV9wcmludF9jb21tYW5kKHN0cnVjdCBzY3NpX2NtbmQgKik7Ci1leHRlcm4gdm9pZCBfX3Njc2lfcHJpbnRfY29tbWFuZChjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gc2l6ZV90IF9fc2NzaV9mb3JtYXRfY29tbWFuZChjaGFyICosIHNpemVfdCwKKwkJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCk7CiBleHRlcm4gdm9pZCBzY3NpX3Nob3dfZXh0ZF9zZW5zZShjb25zdCBzdHJ1Y3Qgc2NzaV9kZXZpY2UgKiwgY29uc3QgY2hhciAqLAogCQkJCSB1bnNpZ25lZCBjaGFyLCB1bnNpZ25lZCBjaGFyKTsKIGV4dGVybiB2b2lkIHNjc2lfc2hvd19zZW5zZV9oZHIoY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICosIGNvbnN0IGNoYXIgKiwKQEAgLTE3LDEyICsyMCw3MyBAQAogZXh0ZXJuIHZvaWQgX19zY3NpX3ByaW50X3NlbnNlKGNvbnN0IHN0cnVjdCBzY3NpX2RldmljZSAqLCBjb25zdCBjaGFyICpuYW1lLAogCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlbnNlX2J1ZmZlciwKIAkJCSAgICAgICBpbnQgc2Vuc2VfbGVuKTsKLWV4dGVybiB2b2lkIHNjc2lfcHJpbnRfcmVzdWx0KHN0cnVjdCBzY3NpX2NtbmQgKiwgY29uc3QgY2hhciAqLCBpbnQpOwotZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfaG9zdGJ5dGVfc3RyaW5nKGludCk7Ci1leHRlcm4gY29uc3QgY2hhciAqc2NzaV9kcml2ZXJieXRlX3N0cmluZyhpbnQpOwotZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfbWxyZXR1cm5fc3RyaW5nKGludCk7CitleHRlcm4gdm9pZCBzY3NpX3ByaW50X3Jlc3VsdChjb25zdCBzdHJ1Y3Qgc2NzaV9jbW5kICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKworI2lmZGVmIENPTkZJR19TQ1NJX0NPTlNUQU5UUworZXh0ZXJuIGJvb2wgc2NzaV9vcGNvZGVfc2FfbmFtZShpbnQsIGludCwgY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqKik7CiBleHRlcm4gY29uc3QgY2hhciAqc2NzaV9zZW5zZV9rZXlfc3RyaW5nKHVuc2lnbmVkIGNoYXIpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfZXh0ZF9zZW5zZV9mb3JtYXQodW5zaWduZWQgY2hhciwgdW5zaWduZWQgY2hhciwKIAkJCQkJICBjb25zdCBjaGFyICoqKTsKK2V4dGVybiBjb25zdCBjaGFyICpzY3NpX21scmV0dXJuX3N0cmluZyhpbnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnNjc2lfaG9zdGJ5dGVfc3RyaW5nKGludCk7CitleHRlcm4gY29uc3QgY2hhciAqc2NzaV9kcml2ZXJieXRlX3N0cmluZyhpbnQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgYm9vbAorc2NzaV9vcGNvZGVfc2FfbmFtZShpbnQgY21kLCBpbnQgc2EsCisJCSAgICBjb25zdCBjaGFyICoqY2RiX25hbWUsIGNvbnN0IGNoYXIgKipzYV9uYW1lKQoreworCSpjZGJfbmFtZSA9IE5VTEw7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFZBUklBQkxFX0xFTkdUSF9DTUQ6CisJY2FzZSBNQUlOVEVOQU5DRV9JTjoKKwljYXNlIE1BSU5URU5BTkNFX09VVDoKKwljYXNlIFBFUlNJU1RFTlRfUkVTRVJWRV9JTjoKKwljYXNlIFBFUlNJU1RFTlRfUkVTRVJWRV9PVVQ6CisJY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xMjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX09VVF8xMjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX0JJRElSRUNUSU9OQUw6CisJY2FzZSBTRVJWSUNFX0FDVElPTl9JTl8xNjoKKwljYXNlIFNFUlZJQ0VfQUNUSU9OX09VVF8xNjoKKwljYXNlIEVYVEVOREVEX0NPUFk6CisJY2FzZSBSRUNFSVZFX0NPUFlfUkVTVUxUUzoKKwkJKnNhX25hbWUgPSBOVUxMOworCQlyZXR1cm4gdHJ1ZTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorc2NzaV9zZW5zZV9rZXlfc3RyaW5nKHVuc2lnbmVkIGNoYXIga2V5KQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorc2NzaV9leHRkX3NlbnNlX2Zvcm1hdCh1bnNpZ25lZCBjaGFyIGFzYywgdW5zaWduZWQgY2hhciBhc2NxLCBjb25zdCBjaGFyICoqZm10KQoreworCSpmbXQgPSBOVUxMOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKgorc2NzaV9tbHJldHVybl9zdHJpbmcoaW50IHJlc3VsdCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICoKK3Njc2lfaG9zdGJ5dGVfc3RyaW5nKGludCByZXN1bHQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqCitzY3NpX2RyaXZlcmJ5dGVfc3RyaW5nKGludCByZXN1bHQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKKyNlbmRpZgogCiAjZW5kaWYgLyogX1NDU0lfU0NTSV9EQkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAppbmRleCAzYTRlZGQxLi5hNGM5MzM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaApAQCAtMjMwLDkgKzIzMCw2IEBACiAjZGVmaW5lIHRyYW5zcG9ydF9jbGFzc190b19zZGV2KGNsYXNzX2RldikgXAogCXRvX3Njc2lfZGV2aWNlKGNsYXNzX2Rldi0+cGFyZW50KQogCi0jZGVmaW5lIHNkZXZfcHJpbnRrKHByZWZpeCwgc2RldiwgZm10LCBhLi4uKQlcCi0JZGV2X3ByaW50ayhwcmVmaXgsICYoc2RldiktPnNkZXZfZ2VuZGV2LCBmbXQsICMjYSkKLQogI2RlZmluZSBzZGV2X2RiZyhzZGV2LCBmbXQsIGEuLi4pIFwKIAlkZXZfZGJnKCYoc2RldiktPnNkZXZfZ2VuZGV2LCBmbXQsICMjYSkKIApAQCAtMjQwLDE2ICsyMzcsMTUgQEAKICAqIGxpa2Ugc2NtZF9wcmludGssIGJ1dCB0aGUgZGV2aWNlIG5hbWUgaXMgcGFzc2VkIGluCiAgKiBhcyBhIHN0cmluZyBwb2ludGVyCiAgKi8KLSNkZWZpbmUgc2Rldl9wcmVmaXhfcHJpbnRrKGwsIHNkZXYsIHAsIGZtdCwgYS4uLikJCQlcCi0JKHApID8JCQkJCQkJCVwKLQlzZGV2X3ByaW50ayhsLCBzZGV2LCAiWyVzXSAiIGZtdCwgcCwgIyNhKSA6CQkJXAotCXNkZXZfcHJpbnRrKGwsIHNkZXYsIGZtdCwgIyNhKQorX19wcmludGYoNCwgNSkgdm9pZAorc2Rldl9wcmVmaXhfcHJpbnRrKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHNjc2lfZGV2aWNlICosIGNvbnN0IGNoYXIgKiwKKwkJY29uc3QgY2hhciAqLCAuLi4pOwogCi0jZGVmaW5lIHNjbWRfcHJpbnRrKHByZWZpeCwgc2NtZCwgZm10LCBhLi4uKQkJCQlcCi0gICAgICAgIChzY21kKS0+cmVxdWVzdC0+cnFfZGlzayA/CQkJCQlcCi0Jc2Rldl9wcmludGsocHJlZml4LCAoc2NtZCktPmRldmljZSwgIlslc10gIiBmbXQsCQlcCi0JCSAgICAoc2NtZCktPnJlcXVlc3QtPnJxX2Rpc2stPmRpc2tfbmFtZSwgIyNhKSA6CQlcCi0Jc2Rldl9wcmludGsocHJlZml4LCAoc2NtZCktPmRldmljZSwgZm10LCAjI2EpCisjZGVmaW5lIHNkZXZfcHJpbnRrKGwsIHNkZXYsIGZtdCwgYS4uLikJCQkJXAorCXNkZXZfcHJlZml4X3ByaW50ayhsLCBzZGV2LCBOVUxMLCBmbXQsICMjYSkKKworX19wcmludGYoMywgNCkgdm9pZAorc2NtZF9wcmludGsoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3Qgc2NzaV9jbW5kICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIAogI2RlZmluZSBzY21kX2RiZyhzY21kLCBmbXQsIGEuLi4pCQkJCQkgICBcCiAJZG8gewkJCQkJCQkJICAgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9hZDE4MTZhLmggYi9pbmNsdWRlL3NvdW5kL2FkMTgxNmEuaAppbmRleCBhYmRmNjA5Li5mMmQzYTZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2FkMTgxNmEuaAorKysgYi9pbmNsdWRlL3NvdW5kL2FkMTgxNmEuaApAQCAtMTcwLDEwICsxNzAsOSBAQAogCQkJICAgICAgaW50IGlycSwgaW50IGRtYTEsIGludCBkbWEyLAogCQkJICAgICAgc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwKTsKIAotZXh0ZXJuIGludCBzbmRfYWQxODE2YV9wY20oc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOworZXh0ZXJuIGludCBzbmRfYWQxODE2YV9wY20oc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwLCBpbnQgZGV2aWNlKTsKIGV4dGVybiBpbnQgc25kX2FkMTgxNmFfbWl4ZXIoc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwKTsKLWV4dGVybiBpbnQgc25kX2FkMTgxNmFfdGltZXIoc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwLCBpbnQgZGV2aWNlLAotCQkJICAgICBzdHJ1Y3Qgc25kX3RpbWVyICoqcnRpbWVyKTsKK2V4dGVybiBpbnQgc25kX2FkMTgxNmFfdGltZXIoc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwLCBpbnQgZGV2aWNlKTsKICNpZmRlZiBDT05GSUdfUE0KIGV4dGVybiB2b2lkIHNuZF9hZDE4MTZhX3N1c3BlbmQoc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwKTsKIGV4dGVybiB2b2lkIHNuZF9hZDE4MTZhX3Jlc3VtZShzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9hazQxMTMuaCBiL2luY2x1ZGUvc291bmQvYWs0MTEzLmgKaW5kZXggMjYwOTA0OC4uNThjMTQ1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9hazQxMTMuaAorKysgYi9pbmNsdWRlL3NvdW5kL2FrNDExMy5oCkBAIC0yODYsNyArMjg2LDggQEAKIAlhazQxMTNfd3JpdGVfdCAqd3JpdGU7CiAJYWs0MTEzX3JlYWRfdCAqcmVhZDsKIAl2b2lkICpwcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgaW50IGluaXQ6MTsKKwlhdG9taWNfdCB3cV9wcm9jZXNzaW5nOworCXN0cnVjdCBtdXRleCByZWluaXRfbXV0ZXg7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXVuc2lnbmVkIGNoYXIgcmVnbWFwW0FLNDExM19XUklUQUJMRV9SRUdTXTsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3Rsc1tBSzQxMTNfQ09OVFJPTFNdOwpAQCAtMzE3LDUgKzMxOCwxMyBAQAogaW50IHNuZF9hazQxMTNfZXh0ZXJuYWxfcmF0ZShzdHJ1Y3QgYWs0MTEzICphazQxMTMpOwogaW50IHNuZF9hazQxMTNfY2hlY2tfcmF0ZV9hbmRfZXJyb3JzKHN0cnVjdCBhazQxMTMgKmFrNDExMywgdW5zaWduZWQgaW50IGZsYWdzKTsKIAorI2lmZGVmIENPTkZJR19QTQordm9pZCBzbmRfYWs0MTEzX3N1c3BlbmQoc3RydWN0IGFrNDExMyAqY2hpcCk7Cit2b2lkIHNuZF9hazQxMTNfcmVzdW1lKHN0cnVjdCBhazQxMTMgKmNoaXApOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfYWs0MTEzX3N1c3BlbmQoc3RydWN0IGFrNDExMyAqY2hpcCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBzbmRfYWs0MTEzX3Jlc3VtZShzdHJ1Y3QgYWs0MTEzICpjaGlwKSB7fQorI2VuZGlmCisKICNlbmRpZiAvKiBfX1NPVU5EX0FLNDExM19IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvYWs0MTE0LmggYi9pbmNsdWRlL3NvdW5kL2FrNDExNC5oCmluZGV4IDUyZjAyYTYuLmI2ZmViN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvYWs0MTE0LmgKKysrIGIvaW5jbHVkZS9zb3VuZC9hazQxMTQuaApAQCAtMTY4LDcgKzE2OCw4IEBACiAJYWs0MTE0X3dyaXRlX3QgKiB3cml0ZTsKIAlhazQxMTRfcmVhZF90ICogcmVhZDsKIAl2b2lkICogcHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGludCBpbml0OiAxOworCWF0b21pY190IHdxX3Byb2Nlc3Npbmc7CisJc3RydWN0IG11dGV4IHJlaW5pdF9tdXRleDsKIAlzcGlubG9ja190IGxvY2s7CiAJdW5zaWduZWQgY2hhciByZWdtYXBbNl07CiAJdW5zaWduZWQgY2hhciB0eGNzYls1XTsKQEAgLTE5OSw1ICsyMDAsMTMgQEAKIGludCBzbmRfYWs0MTE0X2V4dGVybmFsX3JhdGUoc3RydWN0IGFrNDExNCAqYWs0MTE0KTsKIGludCBzbmRfYWs0MTE0X2NoZWNrX3JhdGVfYW5kX2Vycm9ycyhzdHJ1Y3QgYWs0MTE0ICphazQxMTQsIHVuc2lnbmVkIGludCBmbGFncyk7CiAKKyNpZmRlZiBDT05GSUdfUE0KK3ZvaWQgc25kX2FrNDExNF9zdXNwZW5kKHN0cnVjdCBhazQxMTQgKmNoaXApOwordm9pZCBzbmRfYWs0MTE0X3Jlc3VtZShzdHJ1Y3QgYWs0MTE0ICpjaGlwKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc25kX2FrNDExNF9zdXNwZW5kKHN0cnVjdCBhazQxMTQgKmNoaXApIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgc25kX2FrNDExNF9yZXN1bWUoc3RydWN0IGFrNDExNCAqY2hpcCkge30KKyNlbmRpZgorCiAjZW5kaWYgLyogX19TT1VORF9BSzQxMTRfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvbXByZXNzX2RyaXZlci5oIGIvaW5jbHVkZS9zb3VuZC9jb21wcmVzc19kcml2ZXIuaAppbmRleCAzOTZlOGY3Li5mNDgwODlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NvbXByZXNzX2RyaXZlci5oCisrKyBiL2luY2x1ZGUvc291bmQvY29tcHJlc3NfZHJpdmVyLmgKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29tcHJlc3Nfb2ZmbG9hZC5oPgogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtMTM0LDcgKzEzNSw3IEBACiAvKioKICAqIHN0cnVjdCBzbmRfY29tcHI6IENvbXByZXNzZWQgZGV2aWNlCiAgKiBAbmFtZTogRFNQIGRldmljZSBuYW1lCi0gKiBAZGV2OiBEZXZpY2UgcG9pbnRlcgorICogQGRldjogYXNzb2NpYXRlZCBkZXZpY2UgaW5zdGFuY2UKICAqIEBvcHM6IHBvaW50ZXIgdG8gRFNQIGNhbGxiYWNrcwogICogQHByaXZhdGVfZGF0YTogcG9pbnRlciB0byBEU1AgcHZ0IGRhdGEKICAqIEBjYXJkOiBzb3VuZCBjYXJkIHBvaW50ZXIKQEAgLTE0NCw3ICsxNDUsNyBAQAogICovCiBzdHJ1Y3Qgc25kX2NvbXByIHsKIAljb25zdCBjaGFyICpuYW1lOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgZGV2aWNlIGRldjsKIAlzdHJ1Y3Qgc25kX2NvbXByX29wcyAqb3BzOwogCXZvaWQgKnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2NvbnRyb2wuaCBiL2luY2x1ZGUvc291bmQvY29udHJvbC5oCmluZGV4IDA0MjYxMzkuLjc1ZjMwNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvY29udHJvbC5oCisrKyBiL2luY2x1ZGUvc291bmQvY29udHJvbC5oCkBAIC05MywxMiArOTMsMTcgQEAKIAogc3RydWN0IHBpZDsKIAorZW51bSB7CisJU05EX0NUTF9TVUJERVZfUENNLAorCVNORF9DVExfU1VCREVWX1JBV01JREksCisJU05EX0NUTF9TVUJERVZfSVRFTVMsCit9OworCiBzdHJ1Y3Qgc25kX2N0bF9maWxlIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CQkvKiBsaXN0IG9mIGFsbCBjb250cm9sIGZpbGVzICovCiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBwaWQgKnBpZDsKLQlpbnQgcHJlZmVyX3BjbV9zdWJkZXZpY2U7Ci0JaW50IHByZWZlcl9yYXdtaWRpX3N1YmRldmljZTsKKwlpbnQgcHJlZmVycmVkX3N1YmRldmljZVtTTkRfQ1RMX1NVQkRFVl9JVEVNU107CiAJd2FpdF9xdWV1ZV9oZWFkX3QgY2hhbmdlX3NsZWVwOwogCXNwaW5sb2NrX3QgcmVhZF9sb2NrOwogCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CkBAIC0xMzgsNiArMTQzLDggQEAKICNkZWZpbmUgc25kX2N0bF91bnJlZ2lzdGVyX2lvY3RsX2NvbXBhdChmY24pCiAjZW5kaWYKIAoraW50IHNuZF9jdGxfZ2V0X3ByZWZlcnJlZF9zdWJkZXZpY2Uoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgdHlwZSk7CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNuZF9jdGxfZ2V0X2lvZmZudW0oc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwgc3RydWN0IHNuZF9jdGxfZWxlbV9pZCAqaWQpCiB7CiAJcmV0dXJuIGlkLT5udW1pZCAtIGtjdGwtPmlkLm51bWlkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9jb3JlLmggYi9pbmNsdWRlL3NvdW5kL2NvcmUuaAppbmRleCAxZGYzZjJmLi5kYTU3NDgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2NvcmUuaAorKysgYi9pbmNsdWRlL3NvdW5kL2NvcmUuaApAQCAtMTA5LDYgKzEwOSw3IEBACiAJCQkJCQkJCXByaXZhdGUgZGF0YSAqLwogCXN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlczsJLyogZGV2aWNlcyAqLwogCisJc3RydWN0IGRldmljZSBjdGxfZGV2OwkJLyogY29udHJvbCBkZXZpY2UgKi8KIAl1bnNpZ25lZCBpbnQgbGFzdF9udW1pZDsJLyogbGFzdCB1c2VkIG51bWVyaWMgSUQgKi8KIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIGNvbnRyb2xzX3J3c2VtOwkvKiBjb250cm9scyBsaXN0IGxvY2sgKi8KIAlyd2xvY2tfdCBjdGxfZmlsZXNfcndsb2NrOwkvKiBjdGxfZmlsZXMgbGlzdCBsb2NrICovCkBAIC0xMzEsNiArMTMyLDcgQEAKIAlzdHJ1Y3QgY29tcGxldGlvbiAqcmVsZWFzZV9jb21wbGV0aW9uOwogCXN0cnVjdCBkZXZpY2UgKmRldjsJCS8qIGRldmljZSBhc3NpZ25lZCB0byB0aGlzIGNhcmQgKi8KIAlzdHJ1Y3QgZGV2aWNlIGNhcmRfZGV2OwkJLyogY2FyZFggb2JqZWN0IGZvciBzeXNmcyAqLworCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmRldl9ncm91cHNbNF07IC8qIGFzc2lnbmVkIHN5c2ZzIGF0dHIgKi8KIAlib29sIHJlZ2lzdGVyZWQ7CQkvKiBjYXJkX2RldiBpcyByZWdpc3RlcmVkPyAqLwogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC0yMDYsNDMgKzIwOCwxMyBAQAogCiB2b2lkIHNuZF9yZXF1ZXN0X2NhcmQoaW50IGNhcmQpOwogCi1pbnQgc25kX3JlZ2lzdGVyX2RldmljZV9mb3JfZGV2KGludCB0eXBlLCBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCi0JCQkJaW50IGRldiwKLQkJCQljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmX29wcywKLQkJCQl2b2lkICpwcml2YXRlX2RhdGEsCi0JCQkJY29uc3QgY2hhciAqbmFtZSwKLQkJCQlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwordm9pZCBzbmRfZGV2aWNlX2luaXRpYWxpemUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQpOwogCi0vKioKLSAqIHNuZF9yZWdpc3Rlcl9kZXZpY2UgLSBSZWdpc3RlciB0aGUgQUxTQSBkZXZpY2UgZmlsZSBmb3IgdGhlIGNhcmQKLSAqIEB0eXBlOiB0aGUgZGV2aWNlIHR5cGUsIFNORFJWX0RFVklDRV9UWVBFX1hYWAotICogQGNhcmQ6IHRoZSBjYXJkIGluc3RhbmNlCi0gKiBAZGV2OiB0aGUgZGV2aWNlIGluZGV4Ci0gKiBAZl9vcHM6IHRoZSBmaWxlIG9wZXJhdGlvbnMKLSAqIEBwcml2YXRlX2RhdGE6IHVzZXIgcG9pbnRlciBmb3IgZl9vcHMtPm9wZW4oKQotICogQG5hbWU6IHRoZSBkZXZpY2UgZmlsZSBuYW1lCi0gKgotICogUmVnaXN0ZXJzIGFuIEFMU0EgZGV2aWNlIGZpbGUgZm9yIHRoZSBnaXZlbiBjYXJkLgotICogVGhlIG9wZXJhdG9ycyBoYXZlIHRvIGJlIHNldCBpbiByZWcgcGFyYW1ldGVyLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgY2FyZCdzIGRldmljZSBwb2ludGVyIHRvIGxpbmsgdG8gdGhlCi0gKiBjb3JyZWN0ICZzdHJ1Y3QgZGV2aWNlLgotICoKLSAqIFJldHVybjogWmVybyBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgc25kX3JlZ2lzdGVyX2RldmljZShpbnQgdHlwZSwgc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2LAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZfb3BzLAotCQkJCSAgICAgIHZvaWQgKnByaXZhdGVfZGF0YSwKLQkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lKQotewotCXJldHVybiBzbmRfcmVnaXN0ZXJfZGV2aWNlX2Zvcl9kZXYodHlwZSwgY2FyZCwgZGV2LCBmX29wcywKLQkJCQkJICAgcHJpdmF0ZV9kYXRhLCBuYW1lLAotCQkJCQkgICBzbmRfY2FyZF9nZXRfZGV2aWNlX2xpbmsoY2FyZCkpOwotfQotCi1pbnQgc25kX3VucmVnaXN0ZXJfZGV2aWNlKGludCB0eXBlLCBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpOworaW50IHNuZF9yZWdpc3Rlcl9kZXZpY2UoaW50IHR5cGUsIHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldiwKKwkJCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZfb3BzLAorCQkJdm9pZCAqcHJpdmF0ZV9kYXRhLCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOworaW50IHNuZF91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogdm9pZCAqc25kX2xvb2t1cF9taW5vcl9kYXRhKHVuc2lnbmVkIGludCBtaW5vciwgaW50IHR5cGUpOwotc3RydWN0IGRldmljZSAqc25kX2dldF9kZXZpY2UoaW50IHR5cGUsIHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldik7CiAKICNpZmRlZiBDT05GSUdfU05EX09TU0VNVUwKIGludCBzbmRfcmVnaXN0ZXJfb3NzX2RldmljZShpbnQgdHlwZSwgc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2LApAQCAtMjkxLDYgKzI2Myw4IEBACiBpbnQgc25kX2NhcmRfcmVnaXN0ZXIoc3RydWN0IHNuZF9jYXJkICpjYXJkKTsKIGludCBzbmRfY2FyZF9pbmZvX2luaXQodm9pZCk7CiBpbnQgc25kX2NhcmRfaW5mb19kb25lKHZvaWQpOworaW50IHNuZF9jYXJkX2FkZF9kZXZfYXR0cihzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCisJCQkgIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKmdyb3VwKTsKIGludCBzbmRfY29tcG9uZW50X2FkZChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGNvbnN0IGNoYXIgKmNvbXBvbmVudCk7CiBpbnQgc25kX2NhcmRfZmlsZV9hZGQoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBpbnQgc25kX2NhcmRfZmlsZV9yZW1vdmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2VtdTEwazEuaCBiL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCmluZGV4IGM0NjkwOGMuLjBkZTk1Y2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCisrKyBiL2luY2x1ZGUvc291bmQvZW11MTBrMS5oCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDx1YXBpL3NvdW5kL2VtdTEwazEuaD4KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLSBERUZJTkVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xODA5LDE3ICsxODA5LDE3IEBACiAJCSAgICAgICB1aW50IHN1YnN5c3RlbSwKIAkJICAgICAgIHN0cnVjdCBzbmRfZW11MTBrMSAqKiByZW11KTsKIAotaW50IHNuZF9lbXUxMGsxX3BjbShzdHJ1Y3Qgc25kX2VtdTEwazEgKiBlbXUsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqIHJwY20pOwotaW50IHNuZF9lbXUxMGsxX3BjbV9taWMoc3RydWN0IHNuZF9lbXUxMGsxICogZW11LCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKiBycGNtKTsKLWludCBzbmRfZW11MTBrMV9wY21fZWZ4KHN0cnVjdCBzbmRfZW11MTBrMSAqIGVtdSwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKiogcnBjbSk7Ci1pbnQgc25kX3AxNnZfcGNtKHN0cnVjdCBzbmRfZW11MTBrMSAqIGVtdSwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKiogcnBjbSk7CitpbnQgc25kX2VtdTEwazFfcGNtKHN0cnVjdCBzbmRfZW11MTBrMSAqZW11LCBpbnQgZGV2aWNlKTsKK2ludCBzbmRfZW11MTBrMV9wY21fbWljKHN0cnVjdCBzbmRfZW11MTBrMSAqZW11LCBpbnQgZGV2aWNlKTsKK2ludCBzbmRfZW11MTBrMV9wY21fZWZ4KHN0cnVjdCBzbmRfZW11MTBrMSAqZW11LCBpbnQgZGV2aWNlKTsKK2ludCBzbmRfcDE2dl9wY20oc3RydWN0IHNuZF9lbXUxMGsxICplbXUsIGludCBkZXZpY2UpOwogaW50IHNuZF9wMTZ2X2ZyZWUoc3RydWN0IHNuZF9lbXUxMGsxICogZW11KTsKIGludCBzbmRfcDE2dl9taXhlcihzdHJ1Y3Qgc25kX2VtdTEwazEgKiBlbXUpOwotaW50IHNuZF9lbXUxMGsxX3BjbV9tdWx0aShzdHJ1Y3Qgc25kX2VtdTEwazEgKiBlbXUsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqIHJwY20pOwotaW50IHNuZF9lbXUxMGsxX2Z4ODAxMF9wY20oc3RydWN0IHNuZF9lbXUxMGsxICogZW11LCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKiBycGNtKTsKK2ludCBzbmRfZW11MTBrMV9wY21fbXVsdGkoc3RydWN0IHNuZF9lbXUxMGsxICplbXUsIGludCBkZXZpY2UpOworaW50IHNuZF9lbXUxMGsxX2Z4ODAxMF9wY20oc3RydWN0IHNuZF9lbXUxMGsxICplbXUsIGludCBkZXZpY2UpOwogaW50IHNuZF9lbXUxMGsxX21peGVyKHN0cnVjdCBzbmRfZW11MTBrMSAqIGVtdSwgaW50IHBjbV9kZXZpY2UsIGludCBtdWx0aV9kZXZpY2UpOwogaW50IHNuZF9lbXUxMGsxX3RpbWVyKHN0cnVjdCBzbmRfZW11MTBrMSAqIGVtdSwgaW50IGRldmljZSk7Ci1pbnQgc25kX2VtdTEwazFfZng4MDEwX25ldyhzdHJ1Y3Qgc25kX2VtdTEwazEgKmVtdSwgaW50IGRldmljZSwgc3RydWN0IHNuZF9od2RlcCAqKiByaHdkZXApOworaW50IHNuZF9lbXUxMGsxX2Z4ODAxMF9uZXcoc3RydWN0IHNuZF9lbXUxMGsxICplbXUsIGludCBkZXZpY2UpOwogCiBpcnFyZXR1cm5fdCBzbmRfZW11MTBrMV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9lczE2ODguaCBiL2luY2x1ZGUvc291bmQvZXMxNjg4LmgKaW5kZXggMWQ2MzZhMi4uYjM0ZjIzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9lczE2ODguaAorKysgYi9pbmNsdWRlL3NvdW5kL2VzMTY4OC5oCkBAIC0xMTUsOCArMTE1LDcgQEAKIAkJICAgICAgaW50IG1wdV9pcnEsCiAJCSAgICAgIGludCBkbWE4LAogCQkgICAgICB1bnNpZ25lZCBzaG9ydCBoYXJkd2FyZSk7Ci1pbnQgc25kX2VzMTY4OF9wY20oc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX2VzMTY4OCAqY2hpcCwgaW50IGRldmljZSwKLQkJICAgc3RydWN0IHNuZF9wY20gKipycGNtKTsKK2ludCBzbmRfZXMxNjg4X3BjbShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBzbmRfZXMxNjg4ICpjaGlwLCBpbnQgZGV2aWNlKTsKIGludCBzbmRfZXMxNjg4X21peGVyKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgc3RydWN0IHNuZF9lczE2ODggKmNoaXApOwogaW50IHNuZF9lczE2ODhfcmVzZXQoc3RydWN0IHNuZF9lczE2ODggKmNoaXApOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL2d1cy5oIGIvaW5jbHVkZS9zb3VuZC9ndXMuaAppbmRleCA0MjkwNWQ4Li4wN2MxMTZmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9ndXMuaAorKysgYi9pbmNsdWRlL3NvdW5kL2d1cy5oCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSA8c291bmQvdGltZXIuaD4KICNpbmNsdWRlIDxzb3VuZC9zZXFfbWlkaV9lbXVsLmg+CiAjaW5jbHVkZSA8c291bmQvc2VxX2RldmljZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKIC8qIElPIHBvcnRzICovCiAKQEAgLTU5MSw3ICs1OTEsNyBAQAogCiAvKiBndXNfcGNtLmMgKi8KIAotaW50IHNuZF9nZjFfcGNtX25ldyhzdHJ1Y3Qgc25kX2d1c19jYXJkICogZ3VzLCBpbnQgcGNtX2RldiwgaW50IGNvbnRyb2xfaW5kZXgsIHN0cnVjdCBzbmRfcGNtICoqIHJwY20pOworaW50IHNuZF9nZjFfcGNtX25ldyhzdHJ1Y3Qgc25kX2d1c19jYXJkICpndXMsIGludCBwY21fZGV2LCBpbnQgY29udHJvbF9pbmRleCk7CiAKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHCiBleHRlcm4gdm9pZCBzbmRfZ2YxX3ByaW50X3ZvaWNlX3JlZ2lzdGVycyhzdHJ1Y3Qgc25kX2d1c19jYXJkICogZ3VzKTsKQEAgLTYyMCw3ICs2MjAsNyBAQAogCiAvKiBndXNfdWFydC5jICovCiAKLWludCBzbmRfZ2YxX3Jhd21pZGlfbmV3KHN0cnVjdCBzbmRfZ3VzX2NhcmQgKiBndXMsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcmF3bWlkaSAqKnJyYXdtaWRpKTsKK2ludCBzbmRfZ2YxX3Jhd21pZGlfbmV3KHN0cnVjdCBzbmRfZ3VzX2NhcmQgKmd1cywgaW50IGRldmljZSk7CiAKIC8qIGd1c19kcmFtLmMgKi8KIGludCBzbmRfZ3VzX2RyYW1fd3JpdGUoc3RydWN0IHNuZF9ndXNfY2FyZCAqZ3VzLCBjaGFyIF9fdXNlciAqcHRyLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9od2RlcC5oIGIvaW5jbHVkZS9zb3VuZC9od2RlcC5oCmluZGV4IGFlMDRhM2UuLmFiOWZjYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvaHdkZXAuaAorKysgYi9pbmNsdWRlL3NvdW5kL2h3ZGVwLmgKQEAgLTY4LDggKzY4LDcgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuX3dhaXQ7CiAJdm9pZCAqcHJpdmF0ZV9kYXRhOwogCXZvaWQgKCpwcml2YXRlX2ZyZWUpIChzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCk7Ci0Jc3RydWN0IGRldmljZSAqZGV2OwotCWNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKipncm91cHM7CisJc3RydWN0IGRldmljZSBkZXY7CiAKIAlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKIAlpbnQgdXNlZDsJCQkvKiByZWZlcmVuY2UgY291bnRlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9wY20uaCBiL2luY2x1ZGUvc291bmQvcGNtLmgKaW5kZXggYjQyOWI3My4uYzBkZGI3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY20uaAorKysgYi9pbmNsdWRlL3NvdW5kL3BjbS5oCkBAIC05NCw5ICs5NCw2IEBACiAjZGVmaW5lIFNORFJWX1BDTV9ERVZJQ0VTCTgKICNlbmRpZgogCi0jZGVmaW5lIFNORFJWX1BDTV9JT0NUTDFfRkFMU0UJCSgodm9pZCAqKTApCi0jZGVmaW5lIFNORFJWX1BDTV9JT0NUTDFfVFJVRQkJKCh2b2lkICopMSkKLQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVEwxX1JFU0VUCQkwCiAjZGVmaW5lIFNORFJWX1BDTV9JT0NUTDFfSU5GTwkJMQogI2RlZmluZSBTTkRSVl9QQ01fSU9DVEwxX0NIQU5ORUxfSU5GTwkyCkBAIC0xMDksNiArMTA2LDcgQEAKICNkZWZpbmUgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRQk0CiAjZGVmaW5lIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQJNQogI2RlZmluZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUUJNgorI2RlZmluZSBTTkRSVl9QQ01fVFJJR0dFUl9EUkFJTgkJNwogCiAjZGVmaW5lIFNORFJWX1BDTV9QT1NfWFJVTgkJKChzbmRfcGNtX3VmcmFtZXNfdCktMSkKIApAQCAtMjc1LDEyICsyNzMsMTkgQEAKIAl1bnNpZ25lZCBpbnQgbWFzazsKIH07CiAKK3N0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmFuZ2VzIHsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJY29uc3Qgc3RydWN0IHNuZF9pbnRlcnZhbCAqcmFuZ2VzOworCXVuc2lnbmVkIGludCBtYXNrOworfTsKKwogc3RydWN0IHNuZF9wY21faHdwdHJfbG9nOwogCiBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lIHsKIAkvKiAtLSBTdGF0dXMgLS0gKi8KIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnRyaWdnZXJfbWFzdGVyOwogCXN0cnVjdCB0aW1lc3BlYyB0cmlnZ2VyX3RzdGFtcDsJLyogdHJpZ2dlciB0aW1lc3RhbXAgKi8KKwlib29sIHRyaWdnZXJfdHN0YW1wX2xhdGNoZWQ7ICAgICAvKiB0cmlnZ2VyIHRpbWVzdGFtcCBsYXRjaGVkIGluIGxvdy1sZXZlbCBkcml2ZXIvaGFyZHdhcmUgKi8KIAlpbnQgb3ZlcnJhbmdlOwogCXNuZF9wY21fdWZyYW1lc190IGF2YWlsX21heDsKIAlzbmRfcGNtX3VmcmFtZXNfdCBod19wdHJfYmFzZTsJLyogUG9zaXRpb24gYXQgYnVmZmVyIHJlc3RhcnQgKi8KQEAgLTQ0OSw2ICs0NTQsNyBAQAogI2VuZGlmCiAjZW5kaWYKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICpjaG1hcF9rY3RsOyAvKiBjaGFubmVsLW1hcHBpbmcgY29udHJvbHMgKi8KKwlzdHJ1Y3QgZGV2aWNlIGRldjsKIH07CiAKIHN0cnVjdCBzbmRfcGNtIHsKQEAgLTQ2NSw3ICs0NzEsNiBAQAogCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKIAl2b2lkICpwcml2YXRlX2RhdGE7CiAJdm9pZCAoKnByaXZhdGVfZnJlZSkgKHN0cnVjdCBzbmRfcGNtICpwY20pOwotCXN0cnVjdCBkZXZpY2UgKmRldjsgLyogYWN0dWFsIGh3IGRldmljZSB0aGlzIGJlbG9uZ3MgdG8gKi8KIAlib29sIGludGVybmFsOyAvKiBwY20gaXMgZm9yIGludGVybmFsIHVzZSBvbmx5ICovCiAJYm9vbCBub25hdG9taWM7IC8qIHdob2xlIFBDTSBvcGVyYXRpb25zIGFyZSBpbiBub24tYXRvbWljIGNvbnRleHQgKi8KICNpZiBkZWZpbmVkKENPTkZJR19TTkRfUENNX09TUykgfHwgZGVmaW5lZChDT05GSUdfU05EX1BDTV9PU1NfTU9EVUxFKQpAQCAtNTIwLDcgKzUyNSw2IEBACiBpbnQgc25kX3BjbV9hdHRhY2hfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtICpwY20sIGludCBzdHJlYW0sIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKipyc3Vic3RyZWFtKTsKIHZvaWQgc25kX3BjbV9kZXRhY2hfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKLXZvaWQgc25kX3BjbV92bWFfbm90aWZ5X2RhdGEodm9pZCAqY2xpZW50LCB2b2lkICpkYXRhKTsKIGludCBzbmRfcGNtX21tYXBfZGF0YShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYXJlYSk7CiAKIApAQCAtOTEwLDYgKzkxNCw4IEBACiAJCQkgIGNvbnN0IHN0cnVjdCBzbmRfaW50ZXJ2YWwgKmIsIHN0cnVjdCBzbmRfaW50ZXJ2YWwgKmMpOwogaW50IHNuZF9pbnRlcnZhbF9saXN0KHN0cnVjdCBzbmRfaW50ZXJ2YWwgKmksIHVuc2lnbmVkIGludCBjb3VudCwKIAkJICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpsaXN0LCB1bnNpZ25lZCBpbnQgbWFzayk7CitpbnQgc25kX2ludGVydmFsX3JhbmdlcyhzdHJ1Y3Qgc25kX2ludGVydmFsICppLCB1bnNpZ25lZCBpbnQgY291bnQsCisJCQljb25zdCBzdHJ1Y3Qgc25kX2ludGVydmFsICpsaXN0LCB1bnNpZ25lZCBpbnQgbWFzayk7CiBpbnQgc25kX2ludGVydmFsX3JhdG51bShzdHJ1Y3Qgc25kX2ludGVydmFsICppLAogCQkJdW5zaWduZWQgaW50IHJhdHNfY291bnQsIHN0cnVjdCBzbmRfcmF0bnVtICpyYXRzLAogCQkJdW5zaWduZWQgaW50ICpudW1wLCB1bnNpZ25lZCBpbnQgKmRlbnApOwpAQCAtOTM0LDYgKzk0MCwxMCBAQAogCQkJICAgICAgIHVuc2lnbmVkIGludCBjb25kLAogCQkJICAgICAgIHNuZF9wY21faHdfcGFyYW1fdCB2YXIsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IHNuZF9wY21faHdfY29uc3RyYWludF9saXN0ICpsKTsKK2ludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmFuZ2VzKHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsCisJCQkJIHVuc2lnbmVkIGludCBjb25kLAorCQkJCSBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyLAorCQkJCSBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X3JhbmdlcyAqcik7CiBpbnQgc25kX3BjbV9od19jb25zdHJhaW50X3JhdG51bXMoc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSwgCiAJCQkJICB1bnNpZ25lZCBpbnQgY29uZCwKIAkJCQkgIHNuZF9wY21faHdfcGFyYW1fdCB2YXIsCkBAIC05ODYsMjEgKzk5NiwxNSBAQAogc3NpemVfdCBzbmRfcGNtX2Zvcm1hdF9zaXplKHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0LCBzaXplX3Qgc2FtcGxlcyk7CiBjb25zdCB1bnNpZ25lZCBjaGFyICpzbmRfcGNtX2Zvcm1hdF9zaWxlbmNlXzY0KHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KTsKIGludCBzbmRfcGNtX2Zvcm1hdF9zZXRfc2lsZW5jZShzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgZnJhbWVzKTsKLXNuZF9wY21fZm9ybWF0X3Qgc25kX3BjbV9idWlsZF9saW5lYXJfZm9ybWF0KGludCB3aWR0aCwgaW50IHVuc2lnbmVkLCBpbnQgYmlnX2VuZGlhbik7CiAKIHZvaWQgc25kX3BjbV9zZXRfb3BzKHN0cnVjdCBzbmRfcGNtICogcGNtLCBpbnQgZGlyZWN0aW9uLAogCQkgICAgIGNvbnN0IHN0cnVjdCBzbmRfcGNtX29wcyAqb3BzKTsKIHZvaWQgc25kX3BjbV9zZXRfc3luYyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7Ci1pbnQgc25kX3BjbV9saWJfaW50ZXJsZWF2ZV9sZW4oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwogaW50IHNuZF9wY21fbGliX2lvY3RsKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOyAgICAgICAgICAgICAgICAgICAgICAKIGludCBzbmRfcGNtX3VwZGF0ZV9zdGF0ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKTsKIGludCBzbmRfcGNtX3VwZGF0ZV9od19wdHIoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwotaW50IHNuZF9wY21fcGxheWJhY2tfeHJ1bl9jaGVjayhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7Ci1pbnQgc25kX3BjbV9jYXB0dXJlX3hydW5fY2hlY2soc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOwotaW50IHNuZF9wY21fcGxheWJhY2tfeHJ1bl9hc2FwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKLWludCBzbmRfcGNtX2NhcHR1cmVfeHJ1bl9hc2FwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKIHZvaWQgc25kX3BjbV9wbGF5YmFja19zaWxlbmNlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBzbmRfcGNtX3VmcmFtZXNfdCBuZXdfaHdfcHRyKTsKIHZvaWQgc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiBzbmRfcGNtX3NmcmFtZXNfdCBzbmRfcGNtX2xpYl93cml0ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcGNtX3BhcmFtcy5oIGIvaW5jbHVkZS9zb3VuZC9wY21fcGFyYW1zLmgKaW5kZXggNmIxYzc4Zi4uM2M0NWYzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9wY21fcGFyYW1zLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9wY21fcGFyYW1zLmgKQEAgLTM4LDMxICszOCw2IEBACiAjZGVmaW5lIE1BU0tfT0ZTKGkpCSgoaSkgPj4gNSkKICNkZWZpbmUgTUFTS19CSVQoaSkJKDFVIDw8ICgoaSkgJiAzMSkpCiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGxkMih1X2ludDMyX3QgdikKLXsKLSAgICAgICAgdW5zaWduZWQgciA9IDA7Ci0KLSAgICAgICAgaWYgKHYgPj0gMHgxMDAwMCkgewotICAgICAgICAgICAgICAgIHYgPj49IDE2OwotICAgICAgICAgICAgICAgIHIgKz0gMTY7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHYgPj0gMHgxMDApIHsKLSAgICAgICAgICAgICAgICB2ID4+PSA4OwotICAgICAgICAgICAgICAgIHIgKz0gODsKLSAgICAgICAgfQotICAgICAgICBpZiAodiA+PSAweDEwKSB7Ci0gICAgICAgICAgICAgICAgdiA+Pj0gNDsKLSAgICAgICAgICAgICAgICByICs9IDQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHYgPj0gNCkgewotICAgICAgICAgICAgICAgIHYgPj49IDI7Ci0gICAgICAgICAgICAgICAgciArPSAyOwotICAgICAgICB9Ci0gICAgICAgIGlmICh2ID49IDIpCi0gICAgICAgICAgICAgICAgcisrOwotICAgICAgICByZXR1cm4gcjsKLX0KLQogc3RhdGljIGlubGluZSBzaXplX3Qgc25kX21hc2tfc2l6ZW9mKHZvaWQpCiB7CiAJcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc25kX21hc2spOwpAQCAtOTIsNyArNjcsNyBAQAogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBTTkRSVl9NQVNLX1NJWkU7IGkrKykgewogCQlpZiAobWFzay0+Yml0c1tpXSkKLQkJCXJldHVybiBmZnMobWFzay0+Yml0c1tpXSkgLSAxICsgKGkgPDwgNSk7CisJCQlyZXR1cm4gX19mZnMobWFzay0+Yml0c1tpXSkgKyAoaSA8PCA1KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMDIsNyArNzcsNyBAQAogCWludCBpOwogCWZvciAoaSA9IFNORFJWX01BU0tfU0laRSAtIDE7IGkgPj0gMDsgaS0tKSB7CiAJCWlmIChtYXNrLT5iaXRzW2ldKQotCQkJcmV0dXJuIGxkMihtYXNrLT5iaXRzW2ldKSArIChpIDw8IDUpOworCQkJcmV0dXJuIF9fZmxzKG1hc2stPmJpdHNbaV0pICsgKGkgPDwgNSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMzI1LDQzICszMDAsNjggQEAKIAkJaTEtPm1heCA9PSBpMi0+bWF4ICYmIGkxLT5vcGVubWF4ID09IGkyLT5vcGVubWF4OwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhZGQodW5zaWduZWQgaW50IGEsIHVuc2lnbmVkIGludCBiKQorLyoqCisgKiBwYXJhbXNfYWNjZXNzIC0gZ2V0IHRoZSBhY2Nlc3MgdHlwZSBmcm9tIHRoZSBodyBwYXJhbXMKKyAqIEBwOiBodyBwYXJhbXMKKyAqLworc3RhdGljIGlubGluZSBzbmRfcGNtX2FjY2Vzc190IHBhcmFtc19hY2Nlc3MoY29uc3Qgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwKQogewotCWlmIChhID49IFVJTlRfTUFYIC0gYikKLQkJcmV0dXJuIFVJTlRfTUFYOwotCXJldHVybiBhICsgYjsKKwlyZXR1cm4gKF9fZm9yY2Ugc25kX3BjbV9hY2Nlc3NfdClzbmRfbWFza19taW4oaHdfcGFyYW1fbWFza19jKHAsCisJCVNORFJWX1BDTV9IV19QQVJBTV9BQ0NFU1MpKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc3ViKHVuc2lnbmVkIGludCBhLCB1bnNpZ25lZCBpbnQgYikKKy8qKgorICogcGFyYW1zX2Zvcm1hdCAtIGdldCB0aGUgc2FtcGxlIGZvcm1hdCBmcm9tIHRoZSBodyBwYXJhbXMKKyAqIEBwOiBodyBwYXJhbXMKKyAqLworc3RhdGljIGlubGluZSBzbmRfcGNtX2Zvcm1hdF90IHBhcmFtc19mb3JtYXQoY29uc3Qgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwKQogewotCWlmIChhID4gYikKLQkJcmV0dXJuIGEgLSBiOwotCXJldHVybiAwOworCXJldHVybiAoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KXNuZF9tYXNrX21pbihod19wYXJhbV9tYXNrX2MocCwKKwkJU05EUlZfUENNX0hXX1BBUkFNX0ZPUk1BVCkpOwogfQogCi0jZGVmaW5lIHBhcmFtc19hY2Nlc3MocCkgKChfX2ZvcmNlIHNuZF9wY21fYWNjZXNzX3QpXAotCQlzbmRfbWFza19taW4oaHdfcGFyYW1fbWFza19jKChwKSwgU05EUlZfUENNX0hXX1BBUkFNX0FDQ0VTUykpKQotI2RlZmluZSBwYXJhbXNfZm9ybWF0KHApICgoX19mb3JjZSBzbmRfcGNtX2Zvcm1hdF90KVwKLQkJc25kX21hc2tfbWluKGh3X3BhcmFtX21hc2tfYygocCksIFNORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQpKSkKLSNkZWZpbmUgcGFyYW1zX3N1YmZvcm1hdChwKSBcCi0Jc25kX21hc2tfbWluKGh3X3BhcmFtX21hc2tfYygocCksIFNORFJWX1BDTV9IV19QQVJBTV9TVUJGT1JNQVQpKQorLyoqCisgKiBwYXJhbXNfc3ViZm9ybWF0IC0gZ2V0IHRoZSBzYW1wbGUgc3ViZm9ybWF0IGZyb20gdGhlIGh3IHBhcmFtcworICogQHA6IGh3IHBhcmFtcworICovCitzdGF0aWMgaW5saW5lIHNuZF9wY21fc3ViZm9ybWF0X3QKK3BhcmFtc19zdWJmb3JtYXQoY29uc3Qgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwKQoreworCXJldHVybiAoX19mb3JjZSBzbmRfcGNtX3N1YmZvcm1hdF90KXNuZF9tYXNrX21pbihod19wYXJhbV9tYXNrX2MocCwKKwkJU05EUlZfUENNX0hXX1BBUkFNX1NVQkZPUk1BVCkpOworfQogCisvKioKKyAqIHBhcmFtc19wZXJpb2RfYnl0ZXMgLSBnZXQgdGhlIHBlcmlvZCBzaXplIChpbiBieXRlcykgZnJvbSB0aGUgaHcgcGFyYW1zCisgKiBAcDogaHcgcGFyYW1zCisgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBwYXJhbXNfcGVyaW9kX2J5dGVzKGNvbnN0IHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcCkKIHsKLQlyZXR1cm4gKHBhcmFtc19wZXJpb2Rfc2l6ZShwKSAqCi0JCXNuZF9wY21fZm9ybWF0X3BoeXNpY2FsX3dpZHRoKHBhcmFtc19mb3JtYXQocCkpICoKLQkJcGFyYW1zX2NoYW5uZWxzKHApKSAvIDg7CisJcmV0dXJuIGh3X3BhcmFtX2ludGVydmFsX2MocCwgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9CWVRFUyktPm1pbjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLXBhcmFtc193aWR0aChjb25zdCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnApCisvKioKKyAqIHBhcmFtc193aWR0aCAtIGdldCB0aGUgbnVtYmVyIG9mIGJpdHMgb2YgdGhlIHNhbXBsZSBmb3JtYXQgZnJvbSB0aGUgaHcgcGFyYW1zCisgKiBAcDogaHcgcGFyYW1zCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyBwZXIgc2FtcGxlIHRoYXQgdGhlIHNlbGVjdGVkIHNhbXBsZQorICogZm9ybWF0IG9mIHRoZSBodyBwYXJhbXMgaGFzLgorICovCitzdGF0aWMgaW5saW5lIGludCBwYXJhbXNfd2lkdGgoY29uc3Qgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwKQogewogCXJldHVybiBzbmRfcGNtX2Zvcm1hdF93aWR0aChwYXJhbXNfZm9ybWF0KHApKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLXBhcmFtc19waHlzaWNhbF93aWR0aChjb25zdCBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnApCisvKgorICogcGFyYW1zX3BoeXNpY2FsX3dpZHRoIC0gZ2V0IHRoZSBzdG9yYWdlIHNpemUgb2YgdGhlIHNhbXBsZSBmb3JtYXQgZnJvbSB0aGUgaHcgcGFyYW1zCisgKiBAcDogaHcgcGFyYW1zCisgKgorICogVGhpcyBmdW5jdGlvbnMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgcGVyIHNhbXBsZSB0aGF0IHRoZSBzZWxlY3RlZCBzYW1wbGUKKyAqIGZvcm1hdCBvZiB0aGUgaHcgcGFyYW1zIHRha2VzIHVwIGluIG1lbW9yeS4gVGhpcyB3aWxsIGJlIGVxdWFsIG9yIGxhcmdlciB0aGFuCisgKiBwYXJhbXNfd2lkdGgoKS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcGFyYW1zX3BoeXNpY2FsX3dpZHRoKGNvbnN0IHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcCkKIHsKIAlyZXR1cm4gc25kX3BjbV9mb3JtYXRfcGh5c2ljYWxfd2lkdGgocGFyYW1zX2Zvcm1hdChwKSk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3Jhd21pZGkuaCBiL2luY2x1ZGUvc291bmQvcmF3bWlkaS5oCmluZGV4IDMxMWRhZmUuLmY2Y2JlZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcmF3bWlkaS5oCisrKyBiL2luY2x1ZGUvc291bmQvcmF3bWlkaS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19TTkRfU0VRVUVOQ0VSKSB8fCBkZWZpbmVkKENPTkZJR19TTkRfU0VRVUVOQ0VSX01PRFVMRSkKICNpbmNsdWRlIDxzb3VuZC9zZXFfZGV2aWNlLmg+CkBAIC0xMzksNyArMTQwLDggQEAKIAlzdHJ1Y3QgbXV0ZXggb3Blbl9tdXRleDsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBvcGVuX3dhaXQ7CiAKLQlzdHJ1Y3Qgc25kX2luZm9fZW50cnkgKmRldjsKKwlzdHJ1Y3QgZGV2aWNlIGRldjsKKwogCXN0cnVjdCBzbmRfaW5mb19lbnRyeSAqcHJvY19lbnRyeTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NORF9TRVFVRU5DRVIpIHx8IGRlZmluZWQoQ09ORklHX1NORF9TRVFVRU5DRVJfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9yY2FyX3NuZC5oIGIvaW5jbHVkZS9zb3VuZC9yY2FyX3NuZC5oCmluZGV4IDgzMjg0Y2EuLjRjZWNkMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcmNhcl9zbmQuaAorKysgYi9pbmNsdWRlL3NvdW5kL3JjYXJfc25kLmgKQEAgLTU1LDYgKzU1LDcgQEAKIHN0cnVjdCByc25kX3NyY19wbGF0Zm9ybV9pbmZvIHsKIAl1MzIgY29udmVydF9yYXRlOyAvKiBzYW1wbGluZyByYXRlIGNvbnZlcnQgKi8KIAlpbnQgZG1hX2lkOyAvKiBmb3IgR2VuMiBTQ1UgKi8KKwlpbnQgaXJxOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvcnQ1Njc3LmggYi9pbmNsdWRlL3NvdW5kL3J0NTY3Ny5oCmluZGV4IGQ5ZWI3ZDguLmE2MjA3MDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvcnQ1Njc3LmgKKysrIGIvaW5jbHVkZS9zb3VuZC9ydDU2NzcuaApAQCAtMzcsNiArMzcsOSBAQAogCQlPRkYsIEdQSU80LCBHUElPNSBhbmQgR1BJTzYgcmVzcGVjdGl2ZWx5ICovCiAJdW5zaWduZWQgaW50IGpkMl9ncGlvOwogCXVuc2lnbmVkIGludCBqZDNfZ3BpbzsKKworCS8qIFNldCBNSUNCSUFTMSBWREQgMXY4IG9yIDN2MyAqLworCWJvb2wgbWljYmlhczFfdmRkXzN2MzsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9zYi5oIGIvaW5jbHVkZS9zb3VuZC9zYi5oCmluZGV4IGJhMzk2MDMuLmJhY2VmYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc2IuaAorKysgYi9pbmNsdWRlL3NvdW5kL3NiLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogZW51bSBzYl9od190eXBlIHsKIAlTQl9IV19BVVRPLApAQCAtMzA4LDcgKzMwOCw3IEBACiAjZW5kaWYKIAogLyogc2I4X2luaXQuYyAqLwotaW50IHNuZF9zYjhkc3BfcGNtKHN0cnVjdCBzbmRfc2IgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqIHJwY20pOworaW50IHNuZF9zYjhkc3BfcGNtKHN0cnVjdCBzbmRfc2IgKmNoaXAsIGludCBkZXZpY2UpOwogLyogc2I4LmMgKi8KIGlycXJldHVybl90IHNuZF9zYjhkc3BfaW50ZXJydXB0KHN0cnVjdCBzbmRfc2IgKmNoaXApOwogaW50IHNuZF9zYjhfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CkBAIC0zMTcsMTAgKzMxNywxMCBAQAogaW50IHNuZF9zYjhfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CiAvKiBtaWRpOC5jICovCiBpcnFyZXR1cm5fdCBzbmRfc2I4ZHNwX21pZGlfaW50ZXJydXB0KHN0cnVjdCBzbmRfc2IgKmNoaXApOwotaW50IHNuZF9zYjhkc3BfbWlkaShzdHJ1Y3Qgc25kX3NiICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3Jhd21pZGkgKiogcnJhd21pZGkpOworaW50IHNuZF9zYjhkc3BfbWlkaShzdHJ1Y3Qgc25kX3NiICpjaGlwLCBpbnQgZGV2aWNlKTsKIAogLyogc2IxNl9pbml0LmMgKi8KLWludCBzbmRfc2IxNmRzcF9wY20oc3RydWN0IHNuZF9zYiAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKiogcnBjbSk7CitpbnQgc25kX3NiMTZkc3BfcGNtKHN0cnVjdCBzbmRfc2IgKmNoaXAsIGludCBkZXZpY2UpOwogY29uc3Qgc3RydWN0IHNuZF9wY21fb3BzICpzbmRfc2IxNmRzcF9nZXRfcGNtX29wcyhpbnQgZGlyZWN0aW9uKTsKIGludCBzbmRfc2IxNmRzcF9jb25maWd1cmUoc3RydWN0IHNuZF9zYiAqY2hpcCk7CiAvKiBzYjE2LmMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc2VxX2tlcm5lbC5oIGIvaW5jbHVkZS9zb3VuZC9zZXFfa2VybmVsLmgKaW5kZXggZWVhNTQwMC4uMThhMmFjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zZXFfa2VybmVsLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zZXFfa2VybmVsLmgKQEAgLTI3LDExICsyNyw4IEBACiB0eXBlZGVmIHN0cnVjdCBzbmRfc2VxX3JlYWxfdGltZSBzbmRfc2VxX3JlYWxfdGltZV90OwogdHlwZWRlZiB1bmlvbiBzbmRfc2VxX3RpbWVzdGFtcCBzbmRfc2VxX3RpbWVzdGFtcF90OwogCi0vKiBtYXhpbXVtIG51bWJlciBvZiBldmVudHMgZGVxdWV1ZWQgcGVyIHNjaGVkdWxlIGludGVydmFsICovCi0jZGVmaW5lIFNORFJWX1NFUV9NQVhfREVRVUVVRQkJNTAKLQogLyogbWF4aW11bSBudW1iZXIgb2YgcXVldWVzICovCi0jZGVmaW5lIFNORFJWX1NFUV9NQVhfUVVFVUVTCQk4CisjZGVmaW5lIFNORFJWX1NFUV9NQVhfUVVFVUVTCQkzMgogCiAvKiBtYXggbnVtYmVyIG9mIGNvbmN1cnJlbnQgY2xpZW50cyAqLwogI2RlZmluZSBTTkRSVl9TRVFfTUFYX0NMSUVOVFMgCQkxOTIKQEAgLTQyLDkgKzM5LDYgQEAKIC8qIG1heCBudW1iZXIgb2YgZXZlbnRzIGluIG1lbW9yeSBwb29sICovCiAjZGVmaW5lIFNORFJWX1NFUV9NQVhfRVZFTlRTCQkyMDAwCiAKLS8qIGRlZmF1bHQgbnVtYmVyIG9mIGV2ZW50cyBpbiBtZW1vcnkgY2h1bmsgKi8KLSNkZWZpbmUgU05EUlZfU0VRX0RFRkFVTFRfQ0hVTktfRVZFTlRTCTY0Ci0KIC8qIGRlZmF1bHQgbnVtYmVyIG9mIGV2ZW50cyBpbiBtZW1vcnkgcG9vbCAqLwogI2RlZmluZSBTTkRSVl9TRVFfREVGQVVMVF9FVkVOVFMJNTAwCiAKQEAgLTcwLDcgKzY0LDYgQEAKIAlpbnQgKCp1bnVzZSkodm9pZCAqcHJpdmF0ZV9kYXRhLCBzdHJ1Y3Qgc25kX3NlcV9wb3J0X3N1YnNjcmliZSAqaW5mbyk7CiAJaW50ICgqZXZlbnRfaW5wdXQpKHN0cnVjdCBzbmRfc2VxX2V2ZW50ICpldiwgaW50IGRpcmVjdCwgdm9pZCAqcHJpdmF0ZV9kYXRhLCBpbnQgYXRvbWljLCBpbnQgaG9wKTsKIAl2b2lkICgqcHJpdmF0ZV9mcmVlKSh2b2lkICpwcml2YXRlX2RhdGEpOwotCXVuc2lnbmVkIGludCBjYWxsYmFja19hbGw7CS8qIGNhbGwgc3Vic2NyaWJlIGNhbGxiYWNrcyBhdCBlYWNoIGNvbm5lY3Rpb24vZGlzY29ubmVjdGlvbiAqLwogCS8qLi4uKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc2ltcGxlX2NhcmQuaCBiL2luY2x1ZGUvc291bmQvc2ltcGxlX2NhcmQuaAppbmRleCA5YjBhYzc3Li4xMjU1ZGRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3NpbXBsZV9jYXJkLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zaW1wbGVfY2FyZC5oCkBAIC0yMCw2ICsyMCw3IEBACiAJdW5zaWduZWQgaW50IHN5c2NsazsKIAlpbnQgc2xvdHM7CiAJaW50IHNsb3Rfd2lkdGg7CisJc3RydWN0IGNsayAqY2xrOwogfTsKIAogc3RydWN0IGFzb2Nfc2ltcGxlX2NhcmRfaW5mbyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmggYi9pbmNsdWRlL3NvdW5kL3NvYy1kYXBtLmgKaW5kZXggODk4MjNjZi4uOGQ3NDE2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9zb2MtZGFwbS5oCisrKyBiL2luY2x1ZGUvc291bmQvc29jLWRhcG0uaApAQCAtNDA1LDcgKzQwNSw3IEBACiAJCXN0cnVjdCBzbmRfc29jX2RhcG1fdXBkYXRlICp1cGRhdGUpOwogCiAvKiBkYXBtIHN5cyBmcyAtIHVzZWQgYnkgdGhlIGNvcmUgKi8KLWludCBzbmRfc29jX2RhcG1fc3lzX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIHN0cnVjdCBhdHRyaWJ1dGUgKnNvY19kYXBtX2Rldl9hdHRyc1tdOwogdm9pZCBzbmRfc29jX2RhcG1fZGVidWdmc19pbml0KHN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSwKIAkJCQlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQpOwogCkBAIC00MzEsNyArNDMxLDYgQEAKIAkJCQkJICAgY29uc3QgY2hhciAqcGluKTsKIGludCBzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtLAogCQkJCWNvbnN0IGNoYXIgKnBpbik7Ci12b2lkIHNuZF9zb2NfZGFwbV9hdXRvX25jX3BpbnMoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCk7CiB1bnNpZ25lZCBpbnQgZGFwbV9rY29udHJvbF9nZXRfdmFsdWUoY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wpOwogCiAvKiBNb3N0bHkgaW50ZXJuYWwgLSBzaG91bGQgbm90IG5vcm1hbGx5IGJlIHVzZWQgKi8KQEAgLTUyNiw3ICs1MjUsNiBAQAogCWVudW0gc25kX3NvY19kYXBtX3R5cGUgaWQ7CiAJY29uc3QgY2hhciAqbmFtZTsJCS8qIHdpZGdldCBuYW1lICovCiAJY29uc3QgY2hhciAqc25hbWU7CS8qIHN0cmVhbSBuYW1lICovCi0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvc29jLmggYi9pbmNsdWRlL3NvdW5kL3NvYy5oCmluZGV4IGI0ZmNhOWEuLjBkMWFkZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvc29jLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9zb2MuaApAQCAtNDI5LDYgKzQyOSw5IEBACiB2b2lkIHNuZF9zb2NfcnVudGltZV9hY3RpdmF0ZShzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkLCBpbnQgc3RyZWFtKTsKIHZvaWQgc25kX3NvY19ydW50aW1lX2RlYWN0aXZhdGUoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCwgaW50IHN0cmVhbSk7CiAKK2ludCBzbmRfc29jX3J1bnRpbWVfc2V0X2RhaV9mbXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCwKKwl1bnNpZ25lZCBpbnQgZGFpX2ZtdCk7CisKIC8qIFV0aWxpdHkgZnVuY3Rpb25zIHRvIGdldCBjbG9jayByYXRlcyBmcm9tIHZhcmlvdXMgdGhpbmdzICovCiBpbnQgc25kX3NvY19jYWxjX2ZyYW1lX3NpemUoaW50IHNhbXBsZV9zaXplLCBpbnQgY2hhbm5lbHMsIGludCB0ZG1fc2xvdHMpOwogaW50IHNuZF9zb2NfcGFyYW1zX3RvX2ZyYW1lX3NpemUoc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpOwpAQCAtNDk4LDYgKzUwMSw3IEBACiAJCQkJdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCB2YWx1ZSk7CiAKICNpZmRlZiBDT05GSUdfU05EX1NPQ19BQzk3X0JVUworc3RydWN0IHNuZF9hYzk3ICpzbmRfc29jX2FsbG9jX2FjOTdfY29kZWMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKTsKIHN0cnVjdCBzbmRfYWM5NyAqc25kX3NvY19uZXdfYWM5N19jb2RlYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpOwogdm9pZCBzbmRfc29jX2ZyZWVfYWM5N19jb2RlYyhzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3N0YTMyeC5oIGIvaW5jbHVkZS9zb3VuZC9zdGEzMnguaAppbmRleCA4ZDkzYjAzLi5hODk0ZjdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3N0YTMyeC5oCisrKyBiL2luY2x1ZGUvc291bmQvc3RhMzJ4LmgKQEAgLTI0LDEyICsyNCwyMCBAQAogI2RlZmluZSBTVEEzMlhfVEhFUk1BTF9SRUNPVkVSWV9FTkFCTEUJCTIKIAogc3RydWN0IHN0YTMyeF9wbGF0Zm9ybV9kYXRhIHsKLQlpbnQgb3V0cHV0X2NvbmY7Ci0JaW50IGNoMV9vdXRwdXRfbWFwcGluZzsKLQlpbnQgY2gyX291dHB1dF9tYXBwaW5nOwotCWludCBjaDNfb3V0cHV0X21hcHBpbmc7Ci0JaW50IHRoZXJtYWxfY29uZjsKKwl1OCBvdXRwdXRfY29uZjsKKwl1OCBjaDFfb3V0cHV0X21hcHBpbmc7CisJdTggY2gyX291dHB1dF9tYXBwaW5nOworCXU4IGNoM19vdXRwdXRfbWFwcGluZzsKIAlpbnQgbmVlZHNfZXNkX3dhdGNoZG9nOworCXU4IGRyb3BfY29tcGVuc2F0aW9uX25zOworCXVuc2lnbmVkIGludCB0aGVybWFsX3dhcm5pbmdfcmVjb3Zlcnk6MTsKKwl1bnNpZ25lZCBpbnQgdGhlcm1hbF93YXJuaW5nX2FkanVzdG1lbnQ6MTsKKwl1bnNpZ25lZCBpbnQgZmF1bHRfZGV0ZWN0X3JlY292ZXJ5OjE7CisJdW5zaWduZWQgaW50IG1heF9wb3dlcl91c2VfbXBjYzoxOworCXVuc2lnbmVkIGludCBtYXhfcG93ZXJfY29ycmVjdGlvbjoxOworCXVuc2lnbmVkIGludCBhbV9yZWR1Y3Rpb25fbW9kZToxOworCXVuc2lnbmVkIGludCBvZGRfcHdtX3NwZWVkX21vZGU6MTsKKwl1bnNpZ25lZCBpbnQgaW52YWxpZF9pbnB1dF9kZXRlY3RfbXV0ZToxOwogfTsKIAogI2VuZGlmIC8qIF9fTElOVVhfU05EX19TVEEzMlhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC93c3MuaCBiL2luY2x1ZGUvc291bmQvd3NzLmgKaW5kZXggMGM3ZjAzNC4uMTgyM2UzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC93c3MuaAorKysgYi9pbmNsdWRlL3NvdW5kL3dzcy5oCkBAIC0xNTQsOCArMTU0LDggQEAKIAkJICAgICAgdW5zaWduZWQgc2hvcnQgaGFyZHdhcmUsCiAJCSAgICAgIHVuc2lnbmVkIHNob3J0IGh3c2hhcmUsCiAJCSAgICAgIHN0cnVjdCBzbmRfd3NzICoqcmNoaXApOwotaW50IHNuZF93c3NfcGNtKHN0cnVjdCBzbmRfd3NzICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOwotaW50IHNuZF93c3NfdGltZXIoc3RydWN0IHNuZF93c3MgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfdGltZXIgKipydGltZXIpOworaW50IHNuZF93c3NfcGNtKHN0cnVjdCBzbmRfd3NzICpjaGlwLCBpbnQgZGV2aWNlKTsKK2ludCBzbmRfd3NzX3RpbWVyKHN0cnVjdCBzbmRfd3NzICpjaGlwLCBpbnQgZGV2aWNlKTsKIGludCBzbmRfd3NzX21peGVyKHN0cnVjdCBzbmRfd3NzICpjaGlwKTsKIAogY29uc3Qgc3RydWN0IHNuZF9wY21fb3BzICpzbmRfd3NzX2dldF9wY21fb3BzKGludCBkaXJlY3Rpb24pOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJCSAgICAgIHVuc2lnbmVkIHNob3J0IGhhcmR3YXJlLAogCQkgICAgICB1bnNpZ25lZCBzaG9ydCBod3NoYXJlLAogCQkgICAgICBzdHJ1Y3Qgc25kX3dzcyAqKnJjaGlwKTsKLWludCBzbmRfY3M0MjM2X3BjbShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKK2ludCBzbmRfY3M0MjM2X3BjbShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwgaW50IGRldmljZSk7CiBpbnQgc25kX2NzNDIzNl9taXhlcihzdHJ1Y3Qgc25kX3dzcyAqY2hpcCk7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgKaW5kZXggYzY4MTRiOS4uOWE2YTNmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaApAQCAtMTEsMzkgKzExLDU1IEBACiAKIERFQ0xBUkVfRVZFTlRfQ0xBU1MobW1fY29tcGFjdGlvbl9pc29sYXRlX3RlbXBsYXRlLAogCi0JVFBfUFJPVE8odW5zaWduZWQgbG9uZyBucl9zY2FubmVkLAorCVRQX1BST1RPKAorCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJdW5zaWduZWQgbG9uZyBlbmRfcGZuLAorCQl1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQsCiAJCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW4pLAogCi0JVFBfQVJHUyhucl9zY2FubmVkLCBucl90YWtlbiksCisJVFBfQVJHUyhzdGFydF9wZm4sIGVuZF9wZm4sIG5yX3NjYW5uZWQsIG5yX3Rha2VuKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgc3RhcnRfcGZuKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGVuZF9wZm4pCiAJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbnJfc2Nhbm5lZCkKIAkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBucl90YWtlbikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPnN0YXJ0X3BmbiA9IHN0YXJ0X3BmbjsKKwkJX19lbnRyeS0+ZW5kX3BmbiA9IGVuZF9wZm47CiAJCV9fZW50cnktPm5yX3NjYW5uZWQgPSBucl9zY2FubmVkOwogCQlfX2VudHJ5LT5ucl90YWtlbiA9IG5yX3Rha2VuOwogCSksCiAKLQlUUF9wcmludGsoIm5yX3NjYW5uZWQ9JWx1IG5yX3Rha2VuPSVsdSIsCisJVFBfcHJpbnRrKCJyYW5nZT0oMHglbHggfiAweCVseCkgbnJfc2Nhbm5lZD0lbHUgbnJfdGFrZW49JWx1IiwKKwkJX19lbnRyeS0+c3RhcnRfcGZuLAorCQlfX2VudHJ5LT5lbmRfcGZuLAogCQlfX2VudHJ5LT5ucl9zY2FubmVkLAogCQlfX2VudHJ5LT5ucl90YWtlbikKICk7CiAKIERFRklORV9FVkVOVChtbV9jb21wYWN0aW9uX2lzb2xhdGVfdGVtcGxhdGUsIG1tX2NvbXBhY3Rpb25faXNvbGF0ZV9taWdyYXRlcGFnZXMsCiAKLQlUUF9QUk9UTyh1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQsCisJVFBfUFJPVE8oCisJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4sCisJCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZCwKIAkJdW5zaWduZWQgbG9uZyBucl90YWtlbiksCiAKLQlUUF9BUkdTKG5yX3NjYW5uZWQsIG5yX3Rha2VuKQorCVRQX0FSR1Moc3RhcnRfcGZuLCBlbmRfcGZuLCBucl9zY2FubmVkLCBucl90YWtlbikKICk7CiAKIERFRklORV9FVkVOVChtbV9jb21wYWN0aW9uX2lzb2xhdGVfdGVtcGxhdGUsIG1tX2NvbXBhY3Rpb25faXNvbGF0ZV9mcmVlcGFnZXMsCi0JVFBfUFJPVE8odW5zaWduZWQgbG9uZyBucl9zY2FubmVkLAorCisJVFBfUFJPVE8oCisJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4sCisJCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZCwKIAkJdW5zaWduZWQgbG9uZyBucl90YWtlbiksCiAKLQlUUF9BUkdTKG5yX3NjYW5uZWQsIG5yX3Rha2VuKQorCVRQX0FSR1Moc3RhcnRfcGZuLCBlbmRfcGZuLCBucl9zY2FubmVkLCBucl90YWtlbikKICk7CiAKIFRSQUNFX0VWRU5UKG1tX2NvbXBhY3Rpb25fbWlncmF0ZXBhZ2VzLApAQCAtODUsNDggKzEwMSwxOTkgQEAKICk7CiAKIFRSQUNFX0VWRU5UKG1tX2NvbXBhY3Rpb25fYmVnaW4sCi0JVFBfUFJPVE8odW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0LCB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfc3RhcnQsCi0JCXVuc2lnbmVkIGxvbmcgZnJlZV9zdGFydCwgdW5zaWduZWQgbG9uZyB6b25lX2VuZCksCisJVFBfUFJPVE8odW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0LCB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfcGZuLAorCQl1bnNpZ25lZCBsb25nIGZyZWVfcGZuLCB1bnNpZ25lZCBsb25nIHpvbmVfZW5kLCBib29sIHN5bmMpLAogCi0JVFBfQVJHUyh6b25lX3N0YXJ0LCBtaWdyYXRlX3N0YXJ0LCBmcmVlX3N0YXJ0LCB6b25lX2VuZCksCisJVFBfQVJHUyh6b25lX3N0YXJ0LCBtaWdyYXRlX3BmbiwgZnJlZV9wZm4sIHpvbmVfZW5kLCBzeW5jKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCV9fZmllbGQodW5zaWduZWQgbG9uZywgem9uZV9zdGFydCkKLQkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBtaWdyYXRlX3N0YXJ0KQotCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsIGZyZWVfc3RhcnQpCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgbWlncmF0ZV9wZm4pCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgZnJlZV9wZm4pCiAJCV9fZmllbGQodW5zaWduZWQgbG9uZywgem9uZV9lbmQpCisJCV9fZmllbGQoYm9vbCwgc3luYykKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCV9fZW50cnktPnpvbmVfc3RhcnQgPSB6b25lX3N0YXJ0OwotCQlfX2VudHJ5LT5taWdyYXRlX3N0YXJ0ID0gbWlncmF0ZV9zdGFydDsKLQkJX19lbnRyeS0+ZnJlZV9zdGFydCA9IGZyZWVfc3RhcnQ7CisJCV9fZW50cnktPm1pZ3JhdGVfcGZuID0gbWlncmF0ZV9wZm47CisJCV9fZW50cnktPmZyZWVfcGZuID0gZnJlZV9wZm47CiAJCV9fZW50cnktPnpvbmVfZW5kID0gem9uZV9lbmQ7CisJCV9fZW50cnktPnN5bmMgPSBzeW5jOwogCSksCiAKLQlUUF9wcmludGsoInpvbmVfc3RhcnQ9JWx1IG1pZ3JhdGVfc3RhcnQ9JWx1IGZyZWVfc3RhcnQ9JWx1IHpvbmVfZW5kPSVsdSIsCisJVFBfcHJpbnRrKCJ6b25lX3N0YXJ0PTB4JWx4IG1pZ3JhdGVfcGZuPTB4JWx4IGZyZWVfcGZuPTB4JWx4IHpvbmVfZW5kPTB4JWx4LCBtb2RlPSVzIiwKIAkJX19lbnRyeS0+em9uZV9zdGFydCwKLQkJX19lbnRyeS0+bWlncmF0ZV9zdGFydCwKLQkJX19lbnRyeS0+ZnJlZV9zdGFydCwKLQkJX19lbnRyeS0+em9uZV9lbmQpCisJCV9fZW50cnktPm1pZ3JhdGVfcGZuLAorCQlfX2VudHJ5LT5mcmVlX3BmbiwKKwkJX19lbnRyeS0+em9uZV9lbmQsCisJCV9fZW50cnktPnN5bmMgPyAic3luYyIgOiAiYXN5bmMiKQogKTsKIAogVFJBQ0VfRVZFTlQobW1fY29tcGFjdGlvbl9lbmQsCi0JVFBfUFJPVE8oaW50IHN0YXR1cyksCisJVFBfUFJPVE8odW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0LCB1bnNpZ25lZCBsb25nIG1pZ3JhdGVfcGZuLAorCQl1bnNpZ25lZCBsb25nIGZyZWVfcGZuLCB1bnNpZ25lZCBsb25nIHpvbmVfZW5kLCBib29sIHN5bmMsCisJCWludCBzdGF0dXMpLAogCi0JVFBfQVJHUyhzdGF0dXMpLAorCVRQX0FSR1Moem9uZV9zdGFydCwgbWlncmF0ZV9wZm4sIGZyZWVfcGZuLCB6b25lX2VuZCwgc3luYywgc3RhdHVzKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQodW5zaWduZWQgbG9uZywgem9uZV9zdGFydCkKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBtaWdyYXRlX3BmbikKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCBmcmVlX3BmbikKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLCB6b25lX2VuZCkKKwkJX19maWVsZChib29sLCBzeW5jKQogCQlfX2ZpZWxkKGludCwgc3RhdHVzKQogCSksCiAKIAlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+em9uZV9zdGFydCA9IHpvbmVfc3RhcnQ7CisJCV9fZW50cnktPm1pZ3JhdGVfcGZuID0gbWlncmF0ZV9wZm47CisJCV9fZW50cnktPmZyZWVfcGZuID0gZnJlZV9wZm47CisJCV9fZW50cnktPnpvbmVfZW5kID0gem9uZV9lbmQ7CisJCV9fZW50cnktPnN5bmMgPSBzeW5jOwogCQlfX2VudHJ5LT5zdGF0dXMgPSBzdGF0dXM7CiAJKSwKIAotCVRQX3ByaW50aygic3RhdHVzPSVkIiwgX19lbnRyeS0+c3RhdHVzKQorCVRQX3ByaW50aygiem9uZV9zdGFydD0weCVseCBtaWdyYXRlX3Bmbj0weCVseCBmcmVlX3Bmbj0weCVseCB6b25lX2VuZD0weCVseCwgbW9kZT0lcyBzdGF0dXM9JXMiLAorCQlfX2VudHJ5LT56b25lX3N0YXJ0LAorCQlfX2VudHJ5LT5taWdyYXRlX3BmbiwKKwkJX19lbnRyeS0+ZnJlZV9wZm4sCisJCV9fZW50cnktPnpvbmVfZW5kLAorCQlfX2VudHJ5LT5zeW5jID8gInN5bmMiIDogImFzeW5jIiwKKwkJY29tcGFjdGlvbl9zdGF0dXNfc3RyaW5nW19fZW50cnktPnN0YXR1c10pCiApOwogCitUUkFDRV9FVkVOVChtbV9jb21wYWN0aW9uX3RyeV90b19jb21wYWN0X3BhZ2VzLAorCisJVFBfUFJPVE8oCisJCWludCBvcmRlciwKKwkJZ2ZwX3QgZ2ZwX21hc2ssCisJCWVudW0gbWlncmF0ZV9tb2RlIG1vZGUpLAorCisJVFBfQVJHUyhvcmRlciwgZ2ZwX21hc2ssIG1vZGUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChpbnQsIG9yZGVyKQorCQlfX2ZpZWxkKGdmcF90LCBnZnBfbWFzaykKKwkJX19maWVsZChlbnVtIG1pZ3JhdGVfbW9kZSwgbW9kZSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPm9yZGVyID0gb3JkZXI7CisJCV9fZW50cnktPmdmcF9tYXNrID0gZ2ZwX21hc2s7CisJCV9fZW50cnktPm1vZGUgPSBtb2RlOworCSksCisKKwlUUF9wcmludGsoIm9yZGVyPSVkIGdmcF9tYXNrPTB4JXggbW9kZT0lZCIsCisJCV9fZW50cnktPm9yZGVyLAorCQlfX2VudHJ5LT5nZnBfbWFzaywKKwkJKGludClfX2VudHJ5LT5tb2RlKQorKTsKKworREVDTEFSRV9FVkVOVF9DTEFTUyhtbV9jb21wYWN0aW9uX3N1aXRhYmxlX3RlbXBsYXRlLAorCisJVFBfUFJPVE8oc3RydWN0IHpvbmUgKnpvbmUsCisJCWludCBvcmRlciwKKwkJaW50IHJldCksCisKKwlUUF9BUkdTKHpvbmUsIG9yZGVyLCByZXQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZChpbnQsIG5pZCkKKwkJX19maWVsZChjaGFyICosIG5hbWUpCisJCV9fZmllbGQoaW50LCBvcmRlcikKKwkJX19maWVsZChpbnQsIHJldCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPm5pZCA9IHpvbmVfdG9fbmlkKHpvbmUpOworCQlfX2VudHJ5LT5uYW1lID0gKGNoYXIgKil6b25lLT5uYW1lOworCQlfX2VudHJ5LT5vcmRlciA9IG9yZGVyOworCQlfX2VudHJ5LT5yZXQgPSByZXQ7CisJKSwKKworCVRQX3ByaW50aygibm9kZT0lZCB6b25lPSUtOHMgb3JkZXI9JWQgcmV0PSVzIiwKKwkJX19lbnRyeS0+bmlkLAorCQlfX2VudHJ5LT5uYW1lLAorCQlfX2VudHJ5LT5vcmRlciwKKwkJY29tcGFjdGlvbl9zdGF0dXNfc3RyaW5nW19fZW50cnktPnJldF0pCispOworCitERUZJTkVfRVZFTlQobW1fY29tcGFjdGlvbl9zdWl0YWJsZV90ZW1wbGF0ZSwgbW1fY29tcGFjdGlvbl9maW5pc2hlZCwKKworCVRQX1BST1RPKHN0cnVjdCB6b25lICp6b25lLAorCQlpbnQgb3JkZXIsCisJCWludCByZXQpLAorCisJVFBfQVJHUyh6b25lLCBvcmRlciwgcmV0KQorKTsKKworREVGSU5FX0VWRU5UKG1tX2NvbXBhY3Rpb25fc3VpdGFibGVfdGVtcGxhdGUsIG1tX2NvbXBhY3Rpb25fc3VpdGFibGUsCisKKwlUUF9QUk9UTyhzdHJ1Y3Qgem9uZSAqem9uZSwKKwkJaW50IG9yZGVyLAorCQlpbnQgcmV0KSwKKworCVRQX0FSR1Moem9uZSwgb3JkZXIsIHJldCkKKyk7CisKKyNpZmRlZiBDT05GSUdfQ09NUEFDVElPTgorREVDTEFSRV9FVkVOVF9DTEFTUyhtbV9jb21wYWN0aW9uX2RlZmVyX3RlbXBsYXRlLAorCisJVFBfUFJPVE8oc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciksCisKKwlUUF9BUkdTKHpvbmUsIG9yZGVyKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoaW50LCBuaWQpCisJCV9fZmllbGQoY2hhciAqLCBuYW1lKQorCQlfX2ZpZWxkKGludCwgb3JkZXIpCisJCV9fZmllbGQodW5zaWduZWQgaW50LCBjb25zaWRlcmVkKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGludCwgZGVmZXJfc2hpZnQpCisJCV9fZmllbGQoaW50LCBvcmRlcl9mYWlsZWQpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5uaWQgPSB6b25lX3RvX25pZCh6b25lKTsKKwkJX19lbnRyeS0+bmFtZSA9IChjaGFyICopem9uZS0+bmFtZTsKKwkJX19lbnRyeS0+b3JkZXIgPSBvcmRlcjsKKwkJX19lbnRyeS0+Y29uc2lkZXJlZCA9IHpvbmUtPmNvbXBhY3RfY29uc2lkZXJlZDsKKwkJX19lbnRyeS0+ZGVmZXJfc2hpZnQgPSB6b25lLT5jb21wYWN0X2RlZmVyX3NoaWZ0OworCQlfX2VudHJ5LT5vcmRlcl9mYWlsZWQgPSB6b25lLT5jb21wYWN0X29yZGVyX2ZhaWxlZDsKKwkpLAorCisJVFBfcHJpbnRrKCJub2RlPSVkIHpvbmU9JS04cyBvcmRlcj0lZCBvcmRlcl9mYWlsZWQ9JWQgY29uc2lkZXI9JXUgbGltaXQ9JWx1IiwKKwkJX19lbnRyeS0+bmlkLAorCQlfX2VudHJ5LT5uYW1lLAorCQlfX2VudHJ5LT5vcmRlciwKKwkJX19lbnRyeS0+b3JkZXJfZmFpbGVkLAorCQlfX2VudHJ5LT5jb25zaWRlcmVkLAorCQkxVUwgPDwgX19lbnRyeS0+ZGVmZXJfc2hpZnQpCispOworCitERUZJTkVfRVZFTlQobW1fY29tcGFjdGlvbl9kZWZlcl90ZW1wbGF0ZSwgbW1fY29tcGFjdGlvbl9kZWZlcnJlZCwKKworCVRQX1BST1RPKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIpLAorCisJVFBfQVJHUyh6b25lLCBvcmRlcikKKyk7CisKK0RFRklORV9FVkVOVChtbV9jb21wYWN0aW9uX2RlZmVyX3RlbXBsYXRlLCBtbV9jb21wYWN0aW9uX2RlZmVyX2NvbXBhY3Rpb24sCisKKwlUUF9QUk9UTyhzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyKSwKKworCVRQX0FSR1Moem9uZSwgb3JkZXIpCispOworCitERUZJTkVfRVZFTlQobW1fY29tcGFjdGlvbl9kZWZlcl90ZW1wbGF0ZSwgbW1fY29tcGFjdGlvbl9kZWZlcl9yZXNldCwKKworCVRQX1BST1RPKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIpLAorCisJVFBfQVJHUyh6b25lLCBvcmRlcikKKyk7CisjZW5kaWYKKwogI2VuZGlmIC8qIF9UUkFDRV9DT01QQUNUSU9OX0ggKi8KIAogLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90ZWN0aW9uICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rbWVtLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rbWVtLmgKaW5kZXggYWVjZTEzNC4uNGFkMTBiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMva21lbS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2ttZW0uaApAQCAtMjY4LDExICsyNjgsMTEgQEAKIAogCVRQX1BST1RPKHN0cnVjdCBwYWdlICpwYWdlLAogCQlpbnQgYWxsb2Nfb3JkZXIsIGludCBmYWxsYmFja19vcmRlciwKLQkJaW50IGFsbG9jX21pZ3JhdGV0eXBlLCBpbnQgZmFsbGJhY2tfbWlncmF0ZXR5cGUsIGludCBuZXdfbWlncmF0ZXR5cGUpLAorCQlpbnQgYWxsb2NfbWlncmF0ZXR5cGUsIGludCBmYWxsYmFja19taWdyYXRldHlwZSksCiAKIAlUUF9BUkdTKHBhZ2UsCiAJCWFsbG9jX29yZGVyLCBmYWxsYmFja19vcmRlciwKLQkJYWxsb2NfbWlncmF0ZXR5cGUsIGZhbGxiYWNrX21pZ3JhdGV0eXBlLCBuZXdfbWlncmF0ZXR5cGUpLAorCQlhbGxvY19taWdyYXRldHlwZSwgZmFsbGJhY2tfbWlncmF0ZXR5cGUpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19maWVsZCgJc3RydWN0IHBhZ2UgKiwJcGFnZQkJCSkKQEAgLTI4OSw3ICsyODksOCBAQAogCQlfX2VudHJ5LT5mYWxsYmFja19vcmRlcgkJPSBmYWxsYmFja19vcmRlcjsKIAkJX19lbnRyeS0+YWxsb2NfbWlncmF0ZXR5cGUJPSBhbGxvY19taWdyYXRldHlwZTsKIAkJX19lbnRyeS0+ZmFsbGJhY2tfbWlncmF0ZXR5cGUJPSBmYWxsYmFja19taWdyYXRldHlwZTsKLQkJX19lbnRyeS0+Y2hhbmdlX293bmVyc2hpcAk9IChuZXdfbWlncmF0ZXR5cGUgPT0gYWxsb2NfbWlncmF0ZXR5cGUpOworCQlfX2VudHJ5LT5jaGFuZ2Vfb3duZXJzaGlwCT0gKGFsbG9jX21pZ3JhdGV0eXBlID09CisJCQkJCWdldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSkpOwogCSksCiAKIAlUUF9wcmludGsoInBhZ2U9JXAgcGZuPSVsdSBhbGxvY19vcmRlcj0lZCBmYWxsYmFja19vcmRlcj0lZCBwYWdlYmxvY2tfb3JkZXI9JWQgYWxsb2NfbWlncmF0ZXR5cGU9JWQgZmFsbGJhY2tfbWlncmF0ZXR5cGU9JWQgZnJhZ21lbnRpbmc9JWQgY2hhbmdlX293bmVyc2hpcD0lZCIsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9uZXQuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL25ldC5oCmluZGV4IDFkZTI1NmIuLjQ5Y2M3YzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL25ldC5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL25ldC5oCkBAIC00MCw5ICs0MCw5IEBACiAJCV9fYXNzaWduX3N0cihuYW1lLCBkZXYtPm5hbWUpOwogCQlfX2VudHJ5LT5xdWV1ZV9tYXBwaW5nID0gc2tiLT5xdWV1ZV9tYXBwaW5nOwogCQlfX2VudHJ5LT5za2JhZGRyID0gc2tiOwotCQlfX2VudHJ5LT52bGFuX3RhZ2dlZCA9IHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKTsKKwkJX19lbnRyeS0+dmxhbl90YWdnZWQgPSBza2Jfdmxhbl90YWdfcHJlc2VudChza2IpOwogCQlfX2VudHJ5LT52bGFuX3Byb3RvID0gbnRvaHMoc2tiLT52bGFuX3Byb3RvKTsKLQkJX19lbnRyeS0+dmxhbl90Y2kgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwkJX19lbnRyeS0+dmxhbl90Y2kgPSBza2Jfdmxhbl90YWdfZ2V0KHNrYik7CiAJCV9fZW50cnktPnByb3RvY29sID0gbnRvaHMoc2tiLT5wcm90b2NvbCk7CiAJCV9fZW50cnktPmlwX3N1bW1lZCA9IHNrYi0+aXBfc3VtbWVkOwogCQlfX2VudHJ5LT5sZW4gPSBza2ItPmxlbjsKQEAgLTE3NCw5ICsxNzQsOSBAQAogI2VuZGlmCiAJCV9fZW50cnktPnF1ZXVlX21hcHBpbmcgPSBza2ItPnF1ZXVlX21hcHBpbmc7CiAJCV9fZW50cnktPnNrYmFkZHIgPSBza2I7Ci0JCV9fZW50cnktPnZsYW5fdGFnZ2VkID0gdmxhbl90eF90YWdfcHJlc2VudChza2IpOworCQlfX2VudHJ5LT52bGFuX3RhZ2dlZCA9IHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYik7CiAJCV9fZW50cnktPnZsYW5fcHJvdG8gPSBudG9ocyhza2ItPnZsYW5fcHJvdG8pOwotCQlfX2VudHJ5LT52bGFuX3RjaSA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQlfX2VudHJ5LT52bGFuX3RjaSA9IHNrYl92bGFuX3RhZ19nZXQoc2tiKTsKIAkJX19lbnRyeS0+cHJvdG9jb2wgPSBudG9ocyhza2ItPnByb3RvY29sKTsKIAkJX19lbnRyeS0+aXBfc3VtbWVkID0gc2tiLT5pcF9zdW1tZWQ7CiAJCV9fZW50cnktPmhhc2ggPSBza2ItPmhhc2g7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy90bGIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RsYi5oCmluZGV4IDEzMzkxZDIuLjBlNzYzNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RsYi5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL3RsYi5oCkBAIC0xMywxMSArMTMsMTMgQEAKIAl7IFRMQl9MT0NBTF9TSE9PVERPV04sCQkibG9jYWwgc2hvb3Rkb3duIiB9LAkJXAogCXsgVExCX0xPQ0FMX01NX1NIT09URE9XTiwJImxvY2FsIG1tIHNob290ZG93biIgfQogCi1UUkFDRV9FVkVOVCh0bGJfZmx1c2gsCitUUkFDRV9FVkVOVF9DT05ESVRJT04odGxiX2ZsdXNoLAogCiAJVFBfUFJPVE8oaW50IHJlYXNvbiwgdW5zaWduZWQgbG9uZyBwYWdlcyksCiAJVFBfQVJHUyhyZWFzb24sIHBhZ2VzKSwKIAorCVRQX0NPTkRJVElPTihjcHVfb25saW5lKHNtcF9wcm9jZXNzb3JfaWQoKSkpLAorCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJX19maWVsZCgJICBpbnQsIHJlYXNvbikKIAkJX19maWVsZCh1bnNpZ25lZCBsb25nLCAgcGFnZXMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oIGIvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAppbmRleCAxMzliNTA2Li40MWJmNjVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKQEAgLTI2Myw2ICsyNjMsMTQgQEAKICN1bmRlZiBfX3ByaW50X2hleAogI2RlZmluZSBfX3ByaW50X2hleChidWYsIGJ1Zl9sZW4pIGZ0cmFjZV9wcmludF9oZXhfc2VxKHAsIGJ1ZiwgYnVmX2xlbikKIAorI3VuZGVmIF9fcHJpbnRfYXJyYXkKKyNkZWZpbmUgX19wcmludF9hcnJheShhcnJheSwgY291bnQsIGVsX3NpemUpCQkJCVwKKwkoewkJCQkJCQkJXAorCQlCVUlMRF9CVUdfT04oZWxfc2l6ZSAhPSAxICYmIGVsX3NpemUgIT0gMiAmJgkJXAorCQkJICAgICBlbF9zaXplICE9IDQgJiYgZWxfc2l6ZSAhPSA4KTsJCVwKKwkJZnRyYWNlX3ByaW50X2FycmF5X3NlcShwLCBhcnJheSwgY291bnQsIGVsX3NpemUpOwlcCisJfSkKKwogI3VuZGVmIERFQ0xBUkVfRVZFTlRfQ0xBU1MKICNkZWZpbmUgREVDTEFSRV9FVkVOVF9DTEFTUyhjYWxsLCBwcm90bywgYXJncywgdHN0cnVjdCwgYXNzaWduLCBwcmludCkJXAogc3RhdGljIG5vdHJhY2UgZW51bSBwcmludF9saW5lX3QJCQkJCVwKQEAgLTY3NCw2ICs2ODIsNyBAQAogI3VuZGVmIF9fZ2V0X2R5bmFtaWNfYXJyYXlfbGVuCiAjdW5kZWYgX19nZXRfc3RyCiAjdW5kZWYgX19nZXRfYml0bWFzaworI3VuZGVmIF9fcHJpbnRfYXJyYXkKIAogI3VuZGVmIFRQX3ByaW50awogI2RlZmluZSBUUF9wcmludGsoZm10LCBhcmdzLi4uKSAiXCIiIGZtdCAiXCIsICIgIF9fc3RyaW5naWZ5KGFyZ3MpCkBAIC03NjMsNyArNzcyLDcgQEAKIAlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKmV2ZW50X2NhbGwgPSBfX2RhdGE7CQkJXAogCXN0cnVjdCBmdHJhY2VfZGF0YV9vZmZzZXRzXyMjY2FsbCBfX21heWJlX3VudXNlZCBfX2RhdGFfb2Zmc2V0cztcCiAJc3RydWN0IGZ0cmFjZV9yYXdfIyNjYWxsICplbnRyeTsJCQkJXAotCXN0cnVjdCBwdF9yZWdzIF9fcmVnczsJCQkJCQlcCisJc3RydWN0IHB0X3JlZ3MgKl9fcmVnczsJCQkJCQlcCiAJdTY0IF9fYWRkciA9IDAsIF9fY291bnQgPSAxOwkJCQkJXAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqX190YXNrID0gTlVMTDsJCQkJXAogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwkJCQkJXApAQCAtNzgyLDE4ICs3OTEsMTkgQEAKIAkJCSAgICAgc2l6ZW9mKHU2NCkpOwkJCQlcCiAJX19lbnRyeV9zaXplIC09IHNpemVvZih1MzIpOwkJCQkJXAogCQkJCQkJCQkJXAotCXBlcmZfZmV0Y2hfY2FsbGVyX3JlZ3MoJl9fcmVncyk7CQkJCVwKIAllbnRyeSA9IHBlcmZfdHJhY2VfYnVmX3ByZXBhcmUoX19lbnRyeV9zaXplLAkJCVwKIAkJCWV2ZW50X2NhbGwtPmV2ZW50LnR5cGUsICZfX3JlZ3MsICZyY3R4KTsJXAogCWlmICghZW50cnkpCQkJCQkJCVwKIAkJcmV0dXJuOwkJCQkJCQlcCiAJCQkJCQkJCQlcCisJcGVyZl9mZXRjaF9jYWxsZXJfcmVncyhfX3JlZ3MpOwkJCQkJXAorCQkJCQkJCQkJXAogCXRzdHJ1Y3QJCQkJCQkJCVwKIAkJCQkJCQkJCVwKIAl7IGFzc2lnbjsgfQkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJcGVyZl90cmFjZV9idWZfc3VibWl0KGVudHJ5LCBfX2VudHJ5X3NpemUsIHJjdHgsIF9fYWRkciwJXAotCQlfX2NvdW50LCAmX19yZWdzLCBoZWFkLCBfX3Rhc2spOwkJCVwKKwkJX19jb3VudCwgX19yZWdzLCBoZWFkLCBfX3Rhc2spOwkJCQlcCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvS2J1aWxkIGIvaW5jbHVkZS91YXBpL2xpbnV4L0tidWlsZAppbmRleCAwMGIxMDAwMi4uN2I4MTQxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvS2J1aWxkCkBAIC0zNSw2ICszNSw3IEBACiBoZWFkZXIteSArPSBhZmZzX2hhcmRibG9ja3MuaAogaGVhZGVyLXkgKz0gYWdwZ2FydC5oCiBoZWFkZXIteSArPSBhaW9fYWJpLmgKK2hlYWRlci15ICs9IGFtNDM3eC12cGZlLmgKIGhlYWRlci15ICs9IGFwbV9iaW9zLmgKIGhlYWRlci15ICs9IGFyY2ZiLmgKIGhlYWRlci15ICs9IGF0YWxrLmgKQEAgLTI4Myw2ICsyODQsNyBAQAogaGVhZGVyLXkgKz0gbmV0bGlua19kaWFnLmgKIGhlYWRlci15ICs9IG5ldGxpbmsuaAogaGVhZGVyLXkgKz0gbmV0cm9tLmgKK2hlYWRlci15ICs9IG5ldF9uYW1lc3BhY2UuaAogaGVhZGVyLXkgKz0gbmV0X3RzdGFtcC5oCiBoZWFkZXIteSArPSBuZmMuaAogaGVhZGVyLXkgKz0gbmZzMi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYW00Mzd4LXZwZmUuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9hbTQzN3gtdnBmZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliMDMwMzNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2FtNDM3eC12cGZlLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE0IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKgorICogQmVub2l0IFBhcnJvdCA8YnBhcnJvdEB0aS5jb20+CisgKiBMYWQsIFByYWJoYWthciA8cHJhYmhha2FyLmNzZW5nZ0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBtYXkgcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIEFNNDM3WF9WUEZFX1VTRVJfSAorI2RlZmluZSBBTTQzN1hfVlBGRV9VU0VSX0gKKworZW51bSB2cGZlX2NjZGNfZGF0YV9zaXplIHsKKwlWUEZFX0NDRENfREFUQV8xNkJJVFMgPSAwLAorCVZQRkVfQ0NEQ19EQVRBXzE1QklUUywKKwlWUEZFX0NDRENfREFUQV8xNEJJVFMsCisJVlBGRV9DQ0RDX0RBVEFfMTNCSVRTLAorCVZQRkVfQ0NEQ19EQVRBXzEyQklUUywKKwlWUEZFX0NDRENfREFUQV8xMUJJVFMsCisJVlBGRV9DQ0RDX0RBVEFfMTBCSVRTLAorCVZQRkVfQ0NEQ19EQVRBXzhCSVRTLAorfTsKKworLyogZW51bSBmb3IgTm8gb2YgcGl4ZWwgcGVyIGxpbmUgdG8gYmUgYXZnLiBpbiBCbGFjayBDbGFtcGluZyovCitlbnVtIHZwZmVfY2NkY19zYW1wbGVfbGVuZ3RoIHsKKwlWUEZFX0NDRENfU0FNUExFXzFQSVhFTFMgPSAwLAorCVZQRkVfQ0NEQ19TQU1QTEVfMlBJWEVMUywKKwlWUEZFX0NDRENfU0FNUExFXzRQSVhFTFMsCisJVlBGRV9DQ0RDX1NBTVBMRV84UElYRUxTLAorCVZQRkVfQ0NEQ19TQU1QTEVfMTZQSVhFTFMsCit9OworCisvKiBlbnVtIGZvciBObyBvZiBsaW5lcyBpbiBCbGFjayBDbGFtcGluZyAqLworZW51bSB2cGZlX2NjZGNfc2FtcGxlX2xpbmUgeworCVZQRkVfQ0NEQ19TQU1QTEVfMUxJTkVTID0gMCwKKwlWUEZFX0NDRENfU0FNUExFXzJMSU5FUywKKwlWUEZFX0NDRENfU0FNUExFXzRMSU5FUywKKwlWUEZFX0NDRENfU0FNUExFXzhMSU5FUywKKwlWUEZFX0NDRENfU0FNUExFXzE2TElORVMsCit9OworCisvKiBlbnVtIGZvciBBbGF3IGdhbW1hIHdpZHRoICovCitlbnVtIHZwZmVfY2NkY19nYW1tYV93aWR0aCB7CisJVlBGRV9DQ0RDX0dBTU1BX0JJVFNfMTVfNiA9IDAsCS8qIHVzZSBiaXRzIDE1LTYgZm9yIGdhbW1hICovCisJVlBGRV9DQ0RDX0dBTU1BX0JJVFNfMTRfNSwKKwlWUEZFX0NDRENfR0FNTUFfQklUU18xM180LAorCVZQRkVfQ0NEQ19HQU1NQV9CSVRTXzEyXzMsCisJVlBGRV9DQ0RDX0dBTU1BX0JJVFNfMTFfMiwKKwlWUEZFX0NDRENfR0FNTUFfQklUU18xMF8xLAorCVZQRkVfQ0NEQ19HQU1NQV9CSVRTXzA5XzAsCS8qIHVzZSBiaXRzIDktMCBmb3IgZ2FtbWEgKi8KK307CisKKy8qIHN0cnVjdHVyZSBmb3IgQUxhdyAqLworc3RydWN0IHZwZmVfY2NkY19hX2xhdyB7CisJLyogRW5hYmxlL2Rpc2FibGUgQS1MYXcgKi8KKwl1bnNpZ25lZCBjaGFyIGVuYWJsZTsKKwkvKiBHYW1tYSBXaWR0aCBJbnB1dCAqLworCWVudW0gdnBmZV9jY2RjX2dhbW1hX3dpZHRoIGdhbW1hX3dkOworfTsKKworLyogc3RydWN0dXJlIGZvciBCbGFjayBDbGFtcGluZyAqLworc3RydWN0IHZwZmVfY2NkY19ibGFja19jbGFtcCB7CisJdW5zaWduZWQgY2hhciBlbmFibGU7CisJLyogb25seSBpZiBiQ2xhbXBFbmFibGUgaXMgVFJVRSAqLworCWVudW0gdnBmZV9jY2RjX3NhbXBsZV9sZW5ndGggc2FtcGxlX3BpeGVsOworCS8qIG9ubHkgaWYgYkNsYW1wRW5hYmxlIGlzIFRSVUUgKi8KKwllbnVtIHZwZmVfY2NkY19zYW1wbGVfbGluZSBzYW1wbGVfbG47CisJLyogb25seSBpZiBiQ2xhbXBFbmFibGUgaXMgVFJVRSAqLworCXVuc2lnbmVkIHNob3J0IHN0YXJ0X3BpeGVsOworCS8qIG9ubHkgaWYgYkNsYW1wRW5hYmxlIGlzIFRSVUUgKi8KKwl1bnNpZ25lZCBzaG9ydCBzZ2FpbjsKKwkvKiBvbmx5IGlmIGJDbGFtcEVuYWJsZSBpcyBGQUxTRSAqLworCXVuc2lnbmVkIHNob3J0IGRjX3N1YjsKK307CisKKy8qIHN0cnVjdHVyZSBmb3IgQmxhY2sgTGV2ZWwgQ29tcGVuc2F0aW9uICovCitzdHJ1Y3QgdnBmZV9jY2RjX2JsYWNrX2NvbXBlbnNhdGlvbiB7CisJLyogQ29uc3RhbnQgdmFsdWUgdG8gc3VidHJhY3QgZnJvbSBSZWQgY29tcG9uZW50ICovCisJY2hhciByOworCS8qIENvbnN0YW50IHZhbHVlIHRvIHN1YnRyYWN0IGZyb20gR3IgY29tcG9uZW50ICovCisJY2hhciBncjsKKwkvKiBDb25zdGFudCB2YWx1ZSB0byBzdWJ0cmFjdCBmcm9tIEJsdWUgY29tcG9uZW50ICovCisJY2hhciBiOworCS8qIENvbnN0YW50IHZhbHVlIHRvIHN1YnRyYWN0IGZyb20gR2IgY29tcG9uZW50ICovCisJY2hhciBnYjsKK307CisKKy8qIFN0cnVjdHVyZSBmb3IgQ0NEQyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZm9yIHJhdyBjYXB0dXJlIG1vZGUgcGFzc2VkCisgKiBieSBhcHBsaWNhdGlvbgorICovCitzdHJ1Y3QgdnBmZV9jY2RjX2NvbmZpZ19wYXJhbXNfcmF3IHsKKwkvKiBkYXRhIHNpemUgdmFsdWUgZnJvbSA4IHRvIDE2IGJpdHMgKi8KKwllbnVtIHZwZmVfY2NkY19kYXRhX3NpemUgZGF0YV9zejsKKwkvKiBTdHJ1Y3R1cmUgZm9yIE9wdGlvbmFsIEEtTGF3ICovCisJc3RydWN0IHZwZmVfY2NkY19hX2xhdyBhbGF3OworCS8qIFN0cnVjdHVyZSBmb3IgT3B0aWNhbCBCbGFjayBDbGFtcCAqLworCXN0cnVjdCB2cGZlX2NjZGNfYmxhY2tfY2xhbXAgYmxrX2NsYW1wOworCS8qIFN0cnVjdHVyZSBmb3IgQmxhY2sgQ29tcGVuc2F0aW9uICovCisJc3RydWN0IHZwZmVfY2NkY19ibGFja19jb21wZW5zYXRpb24gYmxrX2NvbXA7Cit9OworCisvKgorICogIFByaXZhdGUgSU9DVEwKKyAqIFZJRElPQ19BTTQzN1hfQ0NEQ19DRkcgLSBTZXQgQ0NEQyBjb25maWd1cmF0aW9uIGZvciByYXcgY2FwdHVyZQorICogVGhpcyBpcyBhbiBleHBlcmltZW50YWwgaW9jdGwgdGhhdCB3aWxsIGNoYW5nZSBpbiBmdXR1cmUga2VybmVscy4gU28gdXNlCisgKiB0aGlzIGlvY3RsIHdpdGggY2FyZSAhCisgKiovCisjZGVmaW5lIFZJRElPQ19BTTQzN1hfQ0NEQ19DRkcgXAorCV9JT1coJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFICsgMSwgdm9pZCAqKQorCisjZW5kaWYJCS8qIEFNNDM3WF9WUEZFX1VTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2wuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ldGh0b29sLmgKaW5kZXggNWY2NmQ5Yy4uMmU0OWZjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2V0aHRvb2wuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvZXRodG9vbC5oCkBAIC0xMzksNiArMTM5LDcgQEAKIAogI2RlZmluZSBFVEhUT09MX0ZXVkVSU19MRU4JMzIKICNkZWZpbmUgRVRIVE9PTF9CVVNJTkZPX0xFTgkzMgorI2RlZmluZSBFVEhUT09MX0VST01WRVJTX0xFTgkzMgogCiAvKioKICAqIHN0cnVjdCBldGh0b29sX2RydmluZm8gLSBnZW5lcmFsIGRyaXZlciBhbmQgZGV2aWNlIGluZm9ybWF0aW9uCkBAIC0xNDgsNiArMTQ5LDcgQEAKICAqCW5vdCBiZSBhbiBlbXB0eSBzdHJpbmcuCiAgKiBAdmVyc2lvbjogRHJpdmVyIHZlcnNpb24gc3RyaW5nOyBtYXkgYmUgYW4gZW1wdHkgc3RyaW5nCiAgKiBAZndfdmVyc2lvbjogRmlybXdhcmUgdmVyc2lvbiBzdHJpbmc7IG1heSBiZSBhbiBlbXB0eSBzdHJpbmcKKyAqIEBlcm9tX3ZlcnNpb246IEV4cGFuc2lvbiBST00gdmVyc2lvbiBzdHJpbmc7IG1heSBiZSBhbiBlbXB0eSBzdHJpbmcKICAqIEBidXNfaW5mbzogRGV2aWNlIGJ1cyBhZGRyZXNzLiAgVGhpcyBzaG91bGQgbWF0Y2ggdGhlIGRldl9uYW1lKCkKICAqCXN0cmluZyBmb3IgdGhlIHVuZGVybHlpbmcgYnVzIGRldmljZSwgaWYgdGhlcmUgaXMgb25lLiAgTWF5IGJlCiAgKglhbiBlbXB0eSBzdHJpbmcuCkBAIC0xNzYsNyArMTc4LDcgQEAKIAljaGFyCXZlcnNpb25bMzJdOwogCWNoYXIJZndfdmVyc2lvbltFVEhUT09MX0ZXVkVSU19MRU5dOwogCWNoYXIJYnVzX2luZm9bRVRIVE9PTF9CVVNJTkZPX0xFTl07Ci0JY2hhcglyZXNlcnZlZDFbMzJdOworCWNoYXIJZXJvbV92ZXJzaW9uW0VUSFRPT0xfRVJPTVZFUlNfTEVOXTsKIAljaGFyCXJlc2VydmVkMlsxMl07CiAJX191MzIJbl9wcml2X2ZsYWdzOwogCV9fdTMyCW5fc3RhdHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfYnJpZGdlLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYnJpZGdlLmgKaW5kZXggYjAzZWU4Zi4uZWFhZWE2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2JyaWRnZS5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9icmlkZ2UuaApAQCAtMTI1LDYgKzEyNSw4IEBACiAjZGVmaW5lIEJSSURHRV9WTEFOX0lORk9fTUFTVEVSCSgxPDwwKQkvKiBPcGVyYXRlIG9uIEJyaWRnZSBkZXZpY2UgYXMgd2VsbCAqLwogI2RlZmluZSBCUklER0VfVkxBTl9JTkZPX1BWSUQJKDE8PDEpCS8qIFZMQU4gaXMgUFZJRCwgaW5ncmVzcyB1bnRhZ2dlZCAqLwogI2RlZmluZSBCUklER0VfVkxBTl9JTkZPX1VOVEFHR0VECSgxPDwyKQkvKiBWTEFOIGVncmVzc2VzIHVudGFnZ2VkICovCisjZGVmaW5lIEJSSURHRV9WTEFOX0lORk9fUkFOR0VfQkVHSU4JKDE8PDMpIC8qIFZMQU4gaXMgc3RhcnQgb2YgdmxhbiByYW5nZSAqLworI2RlZmluZSBCUklER0VfVkxBTl9JTkZPX1JBTkdFX0VORAkoMTw8NCkgLyogVkxBTiBpcyBlbmQgb2YgdmxhbiByYW5nZSAqLwogCiBzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyB7CiAJX191MTYgZmxhZ3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfbGluay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2xpbmsuaAppbmRleCBmN2QwZDJkLi4wZGVlZTNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaWZfbGluay5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9saW5rLmgKQEAgLTE0Niw2ICsxNDYsNyBAQAogCUlGTEFfUEhZU19QT1JUX0lELAogCUlGTEFfQ0FSUklFUl9DSEFOR0VTLAogCUlGTEFfUEhZU19TV0lUQ0hfSUQsCisJSUZMQV9MSU5LX05FVE5TSUQsCiAJX19JRkxBX01BWAogfTsKIApAQCAtMzcwLDYgKzM3MSw5IEBACiAJSUZMQV9WWExBTl9VRFBfQ1NVTSwKIAlJRkxBX1ZYTEFOX1VEUF9aRVJPX0NTVU02X1RYLAogCUlGTEFfVlhMQU5fVURQX1pFUk9fQ1NVTTZfUlgsCisJSUZMQV9WWExBTl9SRU1DU1VNX1RYLAorCUlGTEFfVlhMQU5fUkVNQ1NVTV9SWCwKKwlJRkxBX1ZYTEFOX0dCUCwKIAlfX0lGTEFfVlhMQU5fTUFYCiB9OwogI2RlZmluZSBJRkxBX1ZYTEFOX01BWAkoX19JRkxBX1ZYTEFOX01BWCAtIDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvaW4uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oCmluZGV4IGMzM2E2NWUuLjU4OWNlZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pbi5oCkBAIC0xMDksNiArMTA5LDcgQEAKIAogI2RlZmluZSBJUF9NSU5UVEwgICAgICAgMjEKICNkZWZpbmUgSVBfTk9ERUZSQUcgICAgIDIyCisjZGVmaW5lIElQX0NIRUNLU1VNCTIzCiAKIC8qIElQX01UVV9ESVNDT1ZFUiB2YWx1ZXMgKi8KICNkZWZpbmUgSVBfUE1UVURJU0NfRE9OVAkJMAkvKiBOZXZlciBzZW5kIERGIGZyYW1lcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL3VhcGkvbGludXgvaW5wdXQuaAppbmRleCBhMWQ3ZTkzLi5iMGE4MTMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaW5wdXQuaApAQCAtMTY2LDYgKzE2Niw3IEBACiAjZGVmaW5lIElOUFVUX1BST1BfU0VNSV9NVAkJMHgwMwkvKiB0b3VjaCByZWN0YW5nbGUgb25seSAqLwogI2RlZmluZSBJTlBVVF9QUk9QX1RPUEJVVFRPTlBBRAkJMHgwNAkvKiBzb2Z0YnV0dG9ucyBhdCB0b3Agb2YgcGFkICovCiAjZGVmaW5lIElOUFVUX1BST1BfUE9JTlRJTkdfU1RJQ0sJMHgwNQkvKiBpcyBhIHBvaW50aW5nIHN0aWNrICovCisjZGVmaW5lIElOUFVUX1BST1BfQUNDRUxFUk9NRVRFUgkweDA2CS8qIGhhcyBhY2NlbGVyb21ldGVyICovCiAKICNkZWZpbmUgSU5QVVRfUFJPUF9NQVgJCQkweDFmCiAjZGVmaW5lIElOUFVUX1BST1BfQ05UCQkJKElOUFVUX1BST1BfTUFYICsgMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pcHY2LmggYi9pbmNsdWRlL3VhcGkvbGludXgvaXB2Ni5oCmluZGV4IGU4NjNkMDguLjQzN2E2YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pcHY2LmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2lwdjYuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX1VBUElfSVBWNl9ICiAjZGVmaW5lIF9VQVBJX0lQVjZfSAogCisjaW5jbHVkZSA8bGludXgvbGliYy1jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KQEAgLTE1LDE2ICsxNiwxOSBAQAogICoJKnVuZGVyIGNvbnN0cnVjdGlvbioKICAqLwogCi0KKyNpZiBfX1VBUElfREVGX0lONl9QS1RJTkZPCiBzdHJ1Y3QgaW42X3BrdGluZm8gewogCXN0cnVjdCBpbjZfYWRkcglpcGk2X2FkZHI7CiAJaW50CQlpcGk2X2lmaW5kZXg7CiB9OworI2VuZGlmCiAKKyNpZiBfX1VBUElfREVGX0lQNl9NVFVJTkZPCiBzdHJ1Y3QgaXA2X210dWluZm8gewogCXN0cnVjdCBzb2NrYWRkcl9pbjYJaXA2bV9hZGRyOwogCV9fdTMyCQkJaXA2bV9tdHU7CiB9OworI2VuZGlmCiAKIHN0cnVjdCBpbjZfaWZyZXEgewogCXN0cnVjdCBpbjZfYWRkcglpZnI2X2FkZHI7CkBAIC0xNjUsNiArMTY5LDcgQEAKIAlERVZDT05GX1NVUFBSRVNTX0ZSQUdfTkRJU0MsCiAJREVWQ09ORl9BQ0NFUFRfUkFfRlJPTV9MT0NBTCwKIAlERVZDT05GX1VTRV9PUFRJTUlTVElDLAorCURFVkNPTkZfQUNDRVBUX1JBX01UVSwKIAlERVZDT05GX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2tlcm5lbC1wYWdlLWZsYWdzLmggYi9pbmNsdWRlL3VhcGkvbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaAppbmRleCAyZjk2ZDIzLi5hNmM0OTYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgva2VybmVsLXBhZ2UtZmxhZ3MuaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBLUEZfS1NNCQkJMjEKICNkZWZpbmUgS1BGX1RIUAkJCTIyCiAjZGVmaW5lIEtQRl9CQUxMT09OCQkyMworI2RlZmluZSBLUEZfWkVST19QQUdFCQkyNAogCiAKICNlbmRpZiAvKiBfVUFQSUxJTlVYX0tFUk5FTF9QQUdFX0ZMQUdTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9sMnRwLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbDJ0cC5oCmluZGV4IDIxY2FhMjYuLjM0N2VmMjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9sMnRwLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2wydHAuaApAQCAtMTc4LDUgKzE3OCw2IEBACiAgKi8KICNkZWZpbmUgTDJUUF9HRU5MX05BTUUJCSJsMnRwIgogI2RlZmluZSBMMlRQX0dFTkxfVkVSU0lPTgkweDEKKyNkZWZpbmUgTDJUUF9HRU5MX01DR1JPVVAgICAgICAgImwydHAiCiAKICNlbmRpZiAvKiBfVUFQSV9MSU5VWF9MMlRQX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbGliYy1jb21wYXQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCmluZGV4IGUyODgwN2EuLmZhNjczZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9saWJjLWNvbXBhdC5oCkBAIC03MCw2ICs3MCw4IEBACiAjZGVmaW5lIF9fVUFQSV9ERUZfSVBWNl9NUkVRCQkwCiAjZGVmaW5lIF9fVUFQSV9ERUZfSVBQUk9UT19WNgkJMAogI2RlZmluZSBfX1VBUElfREVGX0lQVjZfT1BUSU9OUwkJMAorI2RlZmluZSBfX1VBUElfREVGX0lONl9QS1RJTkZPCQkwCisjZGVmaW5lIF9fVUFQSV9ERUZfSVA2X01UVUlORk8JCTAKIAogI2Vsc2UKIApAQCAtODQsNiArODYsOCBAQAogI2RlZmluZSBfX1VBUElfREVGX0lQVjZfTVJFUQkJMQogI2RlZmluZSBfX1VBUElfREVGX0lQUFJPVE9fVjYJCTEKICNkZWZpbmUgX19VQVBJX0RFRl9JUFY2X09QVElPTlMJCTEKKyNkZWZpbmUgX19VQVBJX0RFRl9JTjZfUEtUSU5GTwkJMQorI2RlZmluZSBfX1VBUElfREVGX0lQNl9NVFVJTkZPCQkxCiAKICNlbmRpZiAvKiBfTkVUSU5FVF9JTl9IICovCiAKQEAgLTEwNiw2ICsxMTAsOCBAQAogI2RlZmluZSBfX1VBUElfREVGX0lQVjZfTVJFUQkJMQogI2RlZmluZSBfX1VBUElfREVGX0lQUFJPVE9fVjYJCTEKICNkZWZpbmUgX19VQVBJX0RFRl9JUFY2X09QVElPTlMJCTEKKyNkZWZpbmUgX19VQVBJX0RFRl9JTjZfUEtUSU5GTwkJMQorI2RlZmluZSBfX1VBUElfREVGX0lQNl9NVFVJTkZPCQkxCiAKIC8qIERlZmluaXRpb25zIGZvciB4YXR0ci5oICovCiAjZGVmaW5lIF9fVUFQSV9ERUZfWEFUVFIJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tc2Rvc19mcy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21zZG9zX2ZzLmgKaW5kZXggZTI4NGZmOS4uZTk1NjcwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L21zZG9zX2ZzLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L21zZG9zX2ZzLmgKQEAgLTEzNCw3ICsxMzQsNyBAQAogCQkJX191OAl2b2xfaWRbNF07CS8qIHZvbHVtZSBJRCAqLwogCQkJX191OAl2b2xfbGFiZWxbMTFdOwkvKiB2b2x1bWUgbGFiZWwgKi8KIAkJCV9fdTgJZnNfdHlwZVs4XTsJCS8qIGZpbGUgc3lzdGVtIHR5cGUgKi8KLQkJCS8qIG90aGVyIGZpZWFsZHMgYXJlIG5vdCBhZGRlZCBoZXJlICovCisJCQkvKiBvdGhlciBmaWVsZHMgYXJlIG5vdCBhZGRlZCBoZXJlICovCiAJCX0gZmF0MTY7CiAKIAkJc3RydWN0IHsKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCQkJX191OAl2b2xfaWRbNF07CS8qIHZvbHVtZSBJRCAqLwogCQkJX191OAl2b2xfbGFiZWxbMTFdOwkvKiB2b2x1bWUgbGFiZWwgKi8KIAkJCV9fdTgJZnNfdHlwZVs4XTsJCS8qIGZpbGUgc3lzdGVtIHR5cGUgKi8KLQkJCS8qIG90aGVyIGZpZWFsZHMgYXJlIG5vdCBhZGRlZCBoZXJlICovCisJCQkvKiBvdGhlciBmaWVsZHMgYXJlIG5vdCBhZGRlZCBoZXJlICovCiAJCX0gZmF0MzI7CiAJfTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmVpZ2hib3VyLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmVpZ2hib3VyLmgKaW5kZXggZjNkNzdmOS4uMzg3M2EzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25laWdoYm91ci5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZWlnaGJvdXIuaApAQCAtMjUsNiArMjUsNyBAQAogCU5EQV9WTkksCiAJTkRBX0lGSU5ERVgsCiAJTkRBX01BU1RFUiwKKwlOREFfTElOS19ORVROU0lELAogCV9fTkRBX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L25ldF9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRfbmFtZXNwYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc4Y2QyYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRfbmFtZXNwYWNlLmgKQEAgLTAsMCArMSwyMyBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE1IDZXSU5EIFMuQS4KKyAqIEF1dGhvcjogTmljb2xhcyBEaWNodGVsIDxuaWNvbGFzLmRpY2h0ZWxANndpbmQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfVUFQSV9MSU5VWF9ORVRfTkFNRVNQQUNFX0hfCisjZGVmaW5lIF9VQVBJX0xJTlVYX05FVF9OQU1FU1BBQ0VfSF8KKworLyogQXR0cmlidXRlcyBvZiBSVE1fTkVXTlNJRC9SVE1fR0VUTlNJRCBtZXNzYWdlcyAqLworZW51bSB7CisJTkVUTlNBX05PTkUsCisjZGVmaW5lIE5FVE5TQV9OU0lEX05PVF9BU1NJR05FRCAtMQorCU5FVE5TQV9OU0lELAorCU5FVE5TQV9QSUQsCisJTkVUTlNBX0ZELAorCV9fTkVUTlNBX01BWCwKK307CisKKyNkZWZpbmUgTkVUTlNBX01BWAkJKF9fTkVUTlNBX01BWCAtIDEpCisKKyNlbmRpZiAvKiBfVUFQSV9MSU5VWF9ORVRfTkFNRVNQQUNFX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0X3RzdGFtcC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L25ldF90c3RhbXAuaAppbmRleCBlZGJjODg4Li42ZDFhYmVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvbmV0X3RzdGFtcC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZXRfdHN0YW1wLmgKQEAgLTI0LDggKzI0LDkgQEAKIAlTT0ZfVElNRVNUQU1QSU5HX1RYX1NDSEVEID0gKDE8PDgpLAogCVNPRl9USU1FU1RBTVBJTkdfVFhfQUNLID0gKDE8PDkpLAogCVNPRl9USU1FU1RBTVBJTkdfT1BUX0NNU0cgPSAoMTw8MTApLAorCVNPRl9USU1FU1RBTVBJTkdfT1BUX1RTT05MWSA9ICgxPDwxMSksCiAKLQlTT0ZfVElNRVNUQU1QSU5HX0xBU1QgPSBTT0ZfVElNRVNUQU1QSU5HX09QVF9DTVNHLAorCVNPRl9USU1FU1RBTVBJTkdfTEFTVCA9IFNPRl9USU1FU1RBTVBJTkdfT1BUX1RTT05MWSwKIAlTT0ZfVElNRVNUQU1QSU5HX01BU0sgPSAoU09GX1RJTUVTVEFNUElOR19MQVNUIC0gMSkgfAogCQkJCSBTT0ZfVElNRVNUQU1QSU5HX0xBU1QKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbmZjLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmZjLmgKaW5kZXggODExOTI1NS4uYzFlMmU2MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L25mYy5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9uZmMuaApAQCAtMTgzLDYgKzE4Myw3IEBACiAJTkZDX0FUVFJfU0VfQVBEVSwKIAlORkNfQVRUUl9UQVJHRVRfSVNPMTU2OTNfRFNGSUQsCiAJTkZDX0FUVFJfVEFSR0VUX0lTTzE1NjkzX1VJRCwKKwlORkNfQVRUUl9TRV9QQVJBTVMsCiAvKiBwcml2YXRlOiBpbnRlcm5hbCB1c2Ugb25seSAqLwogCV9fTkZDX0FUVFJfQUZURVJfTEFTVAogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbmw4MDIxMS5oCmluZGV4IGIzN2JkNWEuLjY4YjI5NGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9ubDgwMjExLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L25sODAyMTEuaApAQCAtMjksNiArMjksMTMgQEAKIAogI2RlZmluZSBOTDgwMjExX0dFTkxfTkFNRSAibmw4MDIxMSIKIAorI2RlZmluZSBOTDgwMjExX01VTFRJQ0FTVF9HUk9VUF9DT05GSUcJCSJjb25maWciCisjZGVmaW5lIE5MODAyMTFfTVVMVElDQVNUX0dST1VQX1NDQU4JCSJzY2FuIgorI2RlZmluZSBOTDgwMjExX01VTFRJQ0FTVF9HUk9VUF9SRUcJCSJyZWd1bGF0b3J5IgorI2RlZmluZSBOTDgwMjExX01VTFRJQ0FTVF9HUk9VUF9NTE1FCQkibWxtZSIKKyNkZWZpbmUgTkw4MDIxMV9NVUxUSUNBU1RfR1JPVVBfVkVORE9SCQkidmVuZG9yIgorI2RlZmluZSBOTDgwMjExX01VTFRJQ0FTVF9HUk9VUF9URVNUTU9ERQkidGVzdG1vZGUiCisKIC8qKgogICogRE9DOiBTdGF0aW9uIGhhbmRsaW5nCiAgKgpAQCAtMTczLDggKzE4MCw4IEBACiAgKgklTkw4MDIxMV9BVFRSX1dJUEhZIGFuZCAlTkw4MDIxMV9BVFRSX1dJUEhZX05BTUUuCiAgKgogICogQE5MODAyMTFfQ01EX0dFVF9JTlRFUkZBQ0U6IFJlcXVlc3QgYW4gaW50ZXJmYWNlJ3MgY29uZmlndXJhdGlvbjsKLSAqCWVpdGhlciBhIGR1bXAgcmVxdWVzdCBvbiBhICVOTDgwMjExX0FUVFJfV0lQSFkgb3IgYSBzcGVjaWZpYyBnZXQKLSAqCW9uIGFuICVOTDgwMjExX0FUVFJfSUZJTkRFWCBpcyBzdXBwb3J0ZWQuCisgKgllaXRoZXIgYSBkdW1wIHJlcXVlc3QgZm9yIGFsbCBpbnRlcmZhY2VzIG9yIGEgc3BlY2lmaWMgZ2V0IHdpdGggYQorICoJc2luZ2xlICVOTDgwMjExX0FUVFJfSUZJTkRFWCBpcyBzdXBwb3J0ZWQuCiAgKiBATkw4MDIxMV9DTURfU0VUX0lOVEVSRkFDRTogU2V0IHR5cGUgb2YgYSB2aXJ0dWFsIGludGVyZmFjZSwgcmVxdWlyZXMKICAqCSVOTDgwMjExX0FUVFJfSUZJTkRFWCBhbmQgJU5MODAyMTFfQVRUUl9JRlRZUEUuCiAgKiBATkw4MDIxMV9DTURfTkVXX0lOVEVSRkFDRTogTmV3bHkgY3JlYXRlZCB2aXJ0dWFsIGludGVyZmFjZSBvciByZXNwb25zZQpAQCAtMjUyLDcgKzI1OSwxOCBAQAogICoJJU5MODAyMTFfQVRUUl9JRklOREVYLgogICoKICAqIEBOTDgwMjExX0NNRF9HRVRfUkVHOiBhc2sgdGhlIHdpcmVsZXNzIGNvcmUgdG8gc2VuZCB1cyBpdHMgY3VycmVudGx5IHNldAotICogCXJlZ3VsYXRvcnkgZG9tYWluLgorICoJcmVndWxhdG9yeSBkb21haW4uIElmICVOTDgwMjExX0FUVFJfV0lQSFkgaXMgc3BlY2lmaWVkIGFuZCB0aGUgZGV2aWNlCisgKgloYXMgYSBwcml2YXRlIHJlZ3VsYXRvcnkgZG9tYWluLCBpdCB3aWxsIGJlIHJldHVybmVkLiBPdGhlcndpc2UsIHRoZQorICoJZ2xvYmFsIHJlZ2RvbWFpbiB3aWxsIGJlIHJldHVybmVkLgorICoJQSBkZXZpY2Ugd2lsbCBoYXZlIGEgcHJpdmF0ZSByZWd1bGF0b3J5IGRvbWFpbiBpZiBpdCB1c2VzIHRoZQorICoJcmVndWxhdG9yeV9oaW50KCkgQVBJLiBFdmVuIHdoZW4gYSBwcml2YXRlIHJlZ2RvbWFpbiBpcyB1c2VkIHRoZSBjaGFubmVsCisgKglpbmZvcm1hdGlvbiB3aWxsIHN0aWxsIGJlIG1lbmRlZCBhY2NvcmRpbmcgdG8gZnVydGhlciBoaW50cyBmcm9tCisgKgl0aGUgcmVndWxhdG9yeSBjb3JlIHRvIGhlbHAgd2l0aCBjb21wbGlhbmNlLiBBIGR1bXAgdmVyc2lvbiBvZiB0aGlzIEFQSQorICoJaXMgbm93IGF2YWlsYWJsZSB3aGljaCB3aWxsIHJldHVybnMgdGhlIGdsb2JhbCByZWdkb21haW4gYXMgd2VsbCBhcworICoJYWxsIHByaXZhdGUgcmVnZG9tYWlucyBvZiBwcmVzZW50IHdpcGh5cyAoZm9yIHRob3NlIHRoYXQgaGF2ZSBpdCkuCisgKglJZiBhIHdpcGh5IGlzIHNlbGYtbWFuYWdlZCAoJU5MODAyMTFfQVRUUl9XSVBIWV9TRUxGX01BTkFHRURfUkVHKSwgdGhlbgorICoJaXRzIHByaXZhdGUgcmVnZG9tYWluIGlzIHRoZSBvbmx5IHZhbGlkIG9uZSBmb3IgaXQuIFRoZSByZWd1bGF0b3J5CisgKgljb3JlIGlzIG5vdCB1c2VkIHRvIGhlbHAgd2l0aCBjb21wbGlhbmNlIGluIHRoaXMgY2FzZS4KICAqIEBOTDgwMjExX0NNRF9TRVRfUkVHOiBTZXQgY3VycmVudCByZWd1bGF0b3J5IGRvbWFpbi4gQ1JEQSBzZW5kcyB0aGlzIGNvbW1hbmQKICAqCWFmdGVyIGJlaW5nIHF1ZXJpZWQgYnkgdGhlIGtlcm5lbC4gQ1JEQSByZXBsaWVzIGJ5IHNlbmRpbmcgYSByZWd1bGF0b3J5CiAgKglkb21haW4gc3RydWN0dXJlIHdoaWNoIGNvbnNpc3RzIG9mICVOTDgwMjExX0FUVFJfUkVHX0FMUEhBIHNldCB0byBvdXIKQEAgLTMwNiw3ICszMjQsOSBAQAogICoJaWYgcGFzc2VkLCBkZWZpbmUgd2hpY2ggY2hhbm5lbHMgc2hvdWxkIGJlIHNjYW5uZWQ7IGlmIG5vdAogICoJcGFzc2VkLCBhbGwgY2hhbm5lbHMgYWxsb3dlZCBmb3IgdGhlIGN1cnJlbnQgcmVndWxhdG9yeSBkb21haW4KICAqCWFyZSB1c2VkLiAgRXh0cmEgSUVzIGNhbiBhbHNvIGJlIHBhc3NlZCBmcm9tIHRoZSB1c2Vyc3BhY2UgYnkKLSAqCXVzaW5nIHRoZSAlTkw4MDIxMV9BVFRSX0lFIGF0dHJpYnV0ZS4KKyAqCXVzaW5nIHRoZSAlTkw4MDIxMV9BVFRSX0lFIGF0dHJpYnV0ZS4gIFRoZSBmaXJzdCBjeWNsZSBvZiB0aGUKKyAqCXNjaGVkdWxlZCBzY2FuIGNhbiBiZSBkZWxheWVkIGJ5ICVOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9ERUxBWQorICoJaXMgc3VwcGxpZWQuCiAgKiBATkw4MDIxMV9DTURfU1RPUF9TQ0hFRF9TQ0FOOiBzdG9wIGEgc2NoZWR1bGVkIHNjYW4uIFJldHVybnMgLUVOT0VOVCBpZgogICoJc2NoZWR1bGVkIHNjYW4gaXMgbm90IHJ1bm5pbmcuIFRoZSBjYWxsZXIgbWF5IGFzc3VtZSB0aGF0IGFzIHNvb24KICAqCWFzIHRoZSBjYWxsIHJldHVybnMsIGl0IGlzIHNhZmUgdG8gc3RhcnQgYSBuZXcgc2NoZWR1bGVkIHNjYW4gYWdhaW4uCkBAIC03NzQsNiArNzk0LDEwIEBACiAgKglwZWVyIGdpdmVuIGJ5ICVOTDgwMjExX0FUVFJfTUFDLiBCb3RoIHBlZXJzIG11c3QgYmUgb24gdGhlIGJhc2UgY2hhbm5lbAogICoJd2hlbiB0aGlzIGNvbW1hbmQgY29tcGxldGVzLgogICoKKyAqIEBOTDgwMjExX0NNRF9XSVBIWV9SRUdfQ0hBTkdFOiBTaW1pbGFyIHRvICVOTDgwMjExX0NNRF9SRUdfQ0hBTkdFLCBidXQgdXNlZAorICoJYXMgYW4gZXZlbnQgdG8gaW5kaWNhdGUgY2hhbmdlcyBmb3IgZGV2aWNlcyB3aXRoIHdpcGh5LXNwZWNpZmljIHJlZ2RvbQorICoJbWFuYWdlbWVudC4KKyAqCiAgKiBATkw4MDIxMV9DTURfTUFYOiBoaWdoZXN0IHVzZWQgY29tbWFuZCBudW1iZXIKICAqIEBfX05MODAyMTFfQ01EX0FGVEVSX0xBU1Q6IGludGVybmFsIHVzZQogICovCkBAIC05NTgsNiArOTgyLDggQEAKIAlOTDgwMjExX0NNRF9URExTX0NIQU5ORUxfU1dJVENILAogCU5MODAyMTFfQ01EX1RETFNfQ0FOQ0VMX0NIQU5ORUxfU1dJVENILAogCisJTkw4MDIxMV9DTURfV0lQSFlfUkVHX0NIQU5HRSwKKwogCS8qIGFkZCBuZXcgY29tbWFuZHMgYWJvdmUgaGVyZSAqLwogCiAJLyogdXNlZCB0byBkZWZpbmUgTkw4MDIxMV9DTURfTUFYIGJlbG93ICovCkBAIC0xNjU1LDYgKzE2ODEsOSBAQAogICogQE5MODAyMTFfQVRUUl9TT0NLRVRfT1dORVI6IEZsYWcgYXR0cmlidXRlLCBpZiBzZXQgZHVyaW5nIGludGVyZmFjZQogICoJY3JlYXRpb24gdGhlbiB0aGUgbmV3IGludGVyZmFjZSB3aWxsIGJlIG93bmVkIGJ5IHRoZSBuZXRsaW5rIHNvY2tldAogICoJdGhhdCBjcmVhdGVkIGl0IGFuZCB3aWxsIGJlIGRlc3Ryb3llZCB3aGVuIHRoZSBzb2NrZXQgaXMgY2xvc2VkLgorICoJSWYgc2V0IGR1cmluZyBzY2hlZHVsZWQgc2NhbiBzdGFydCB0aGVuIHRoZSBuZXcgc2NhbiByZXEgd2lsbCBiZQorICoJb3duZWQgYnkgdGhlIG5ldGxpbmsgc29ja2V0IHRoYXQgY3JlYXRlZCBpdCBhbmQgdGhlIHNjaGVkdWxlZCBzY2FuIHdpbGwKKyAqCWJlIHN0b3BwZWQgd2hlbiB0aGUgc29ja2V0IGlzIGNsb3NlZC4KICAqCiAgKiBATkw4MDIxMV9BVFRSX1RETFNfSU5JVElBVE9SOiBmbGFnIGF0dHJpYnV0ZSBpbmRpY2F0aW5nIHRoZSBjdXJyZW50IGVuZCBpcwogICoJdGhlIFRETFMgbGluayBpbml0aWF0b3IuCkBAIC0xNjg4LDYgKzE3MTcsMjkgQEAKICAqCiAgKiBATkw4MDIxMV9BVFRSX01BQ19NQVNLOiBNQUMgYWRkcmVzcyBtYXNrCiAgKgorICogQE5MODAyMTFfQVRUUl9XSVBIWV9TRUxGX01BTkFHRURfUkVHOiBmbGFnIGF0dHJpYnV0ZSBpbmRpY2F0aW5nIHRoaXMgZGV2aWNlCisgKglpcyBzZWxmLW1hbmFnaW5nIGl0cyByZWd1bGF0b3J5IGluZm9ybWF0aW9uIGFuZCBhbnkgcmVndWxhdG9yeSBkb21haW4KKyAqCW9idGFpbmVkIGZyb20gaXQgaXMgY29taW5nIGZyb20gdGhlIGRldmljZSdzIHdpcGh5IGFuZCBub3QgdGhlIGdsb2JhbAorICoJY2ZnODAyMTEgcmVnZG9tYWluLgorICoKKyAqIEBOTDgwMjExX0FUVFJfRVhUX0ZFQVRVUkVTOiBleHRlbmRlZCBmZWF0dXJlIGZsYWdzIGNvbnRhaW5lZCBpbiBhIGJ5dGUKKyAqCWFycmF5LiBUaGUgZmVhdHVyZSBmbGFncyBhcmUgaWRlbnRpZmllZCBieSB0aGVpciBiaXQgaW5kZXggKHNlZSAmZW51bQorICoJbmw4MDIxMV9leHRfZmVhdHVyZV9pbmRleCkuIFRoZSBiaXQgaW5kZXggaXMgb3JkZXJlZCBzdGFydGluZyBhdCB0aGUKKyAqCWxlYXN0LXNpZ25pZmljYW50IGJpdCBvZiB0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgYXJyYXksIGllLiBiaXQgaW5kZXggMAorICoJaXMgbG9jYXRlZCBhdCBiaXQgMCBvZiBieXRlIDAuIGJpdCBpbmRleCAyNSB3b3VsZCBiZSBsb2NhdGVkIGF0IGJpdCAxCisgKglvZiBieXRlIDMgKHU4IGFycmF5KS4KKyAqCisgKiBATkw4MDIxMV9BVFRSX1NVUlZFWV9SQURJT19TVEFUUzogUmVxdWVzdCBvdmVyYWxsIHJhZGlvIHN0YXRpc3RpY3MgdG8gYmUKKyAqCXJldHVybmVkIGFsb25nIHdpdGggb3RoZXIgc3VydmV5IGRhdGEuIElmIHNldCwgQE5MODAyMTFfQ01EX0dFVF9TVVJWRVkKKyAqCW1heSByZXR1cm4gYSBzdXJ2ZXkgZW50cnkgd2l0aG91dCBhIGNoYW5uZWwgaW5kaWNhdGluZyBnbG9iYWwgcmFkaW8KKyAqCXN0YXRpc3RpY3MgKG9ubHkgc29tZSB2YWx1ZXMgYXJlIHZhbGlkIGFuZCBtYWtlIHNlbnNlLikKKyAqCUZvciBkZXZpY2VzIHRoYXQgZG9uJ3QgcmV0dXJuIHN1Y2ggYW4gZW50cnkgZXZlbiB0aGVuLCB0aGUgaW5mb3JtYXRpb24KKyAqCXNob3VsZCBiZSBjb250YWluZWQgaW4gdGhlIHJlc3VsdCBhcyB0aGUgc3VtIG9mIHRoZSByZXNwZWN0aXZlIGNvdW50ZXJzCisgKglvdmVyIGFsbCBjaGFubmVscy4KKyAqCisgKiBATkw4MDIxMV9BVFRSX1NDSEVEX1NDQU5fREVMQVk6IGRlbGF5IGJlZm9yZSBhIHNjaGVkdWxlZCBzY2FuIChvciBhCisgKglXb1dMQU4gbmV0LWRldGVjdCBzY2FuKSBpcyBzdGFydGVkLCB1MzIgaW4gc2Vjb25kcy4KKyAqCiAgKiBATlVNX05MODAyMTFfQVRUUjogdG90YWwgbnVtYmVyIG9mIG5sODAyMTFfYXR0cnMgYXZhaWxhYmxlCiAgKiBATkw4MDIxMV9BVFRSX01BWDogaGlnaGVzdCBhdHRyaWJ1dGUgbnVtYmVyIGN1cnJlbnRseSBkZWZpbmVkCiAgKiBAX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCkBAIC0yMDQ1LDYgKzIwOTcsMTYgQEAKIAogCU5MODAyMTFfQVRUUl9NQUNfTUFTSywKIAorCU5MODAyMTFfQVRUUl9XSVBIWV9TRUxGX01BTkFHRURfUkVHLAorCisJTkw4MDIxMV9BVFRSX0VYVF9GRUFUVVJFUywKKworCU5MODAyMTFfQVRUUl9TVVJWRVlfUkFESU9fU1RBVFMsCisKKwlOTDgwMjExX0FUVFJfTkVUTlNfRkQsCisKKwlOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9ERUxBWSwKKwogCS8qIGFkZCBhdHRyaWJ1dGVzIGhlcmUsIHVwZGF0ZSB0aGUgcG9saWN5IGluIG5sODAyMTEuYyAqLwogCiAJX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCwKQEAgLTIwODUsNyArMjE0Nyw3IEBACiAKICNkZWZpbmUgTkw4MDIxMV9NQVhfU1VQUF9SQVRFUwkJCTMyCiAjZGVmaW5lIE5MODAyMTFfTUFYX1NVUFBfSFRfUkFURVMJCTc3Ci0jZGVmaW5lIE5MODAyMTFfTUFYX1NVUFBfUkVHX1JVTEVTCQkzMgorI2RlZmluZSBOTDgwMjExX01BWF9TVVBQX1JFR19SVUxFUwkJNjQKICNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX0VOQ1JfS0VZCTAKICNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1RYX01JQ19LRVkJMTYKICNkZWZpbmUgTkw4MDIxMV9US0lQX0RBVEFfT0ZGU0VUX1JYX01JQ19LRVkJMjQKQEAgLTIyMjUsOCArMjI4NywxNSBAQAogICogQE5MODAyMTFfUkFURV9JTkZPX1ZIVF9NQ1M6IE1DUyBpbmRleCBmb3IgVkhUICh1OCkKICAqIEBOTDgwMjExX1JBVEVfSU5GT19WSFRfTlNTOiBudW1iZXIgb2Ygc3RyZWFtcyBpbiBWSFQgKHU4KQogICogQE5MODAyMTFfUkFURV9JTkZPXzgwX01IWl9XSURUSDogODAgTUh6IFZIVCByYXRlCi0gKiBATkw4MDIxMV9SQVRFX0lORk9fODBQODBfTUhaX1dJRFRIOiA4MCs4MCBNSHogVkhUIHJhdGUKKyAqIEBOTDgwMjExX1JBVEVfSU5GT184MFA4MF9NSFpfV0lEVEg6IHVudXNlZCAtIDgwKzgwIGlzIHRyZWF0ZWQgdGhlCisgKglzYW1lIGFzIDE2MCBmb3IgcHVycG9zZXMgb2YgdGhlIGJpdHJhdGVzCiAgKiBATkw4MDIxMV9SQVRFX0lORk9fMTYwX01IWl9XSURUSDogMTYwIE1IeiBWSFQgcmF0ZQorICogQE5MODAyMTFfUkFURV9JTkZPXzEwX01IWl9XSURUSDogMTAgTUh6IHdpZHRoIC0gbm90ZSB0aGF0IHRoaXMgaXMKKyAqCWEgbGVnYWN5IHJhdGUgYW5kIHdpbGwgYmUgcmVwb3J0ZWQgYXMgdGhlIGFjdHVhbCBiaXRyYXRlLCBpLmUuCisgKgloYWxmIHRoZSBiYXNlICgyMCBNSHopIHJhdGUKKyAqIEBOTDgwMjExX1JBVEVfSU5GT181X01IWl9XSURUSDogNSBNSHogd2lkdGggLSBub3RlIHRoYXQgdGhpcyBpcworICoJYSBsZWdhY3kgcmF0ZSBhbmQgd2lsbCBiZSByZXBvcnRlZCBhcyB0aGUgYWN0dWFsIGJpdHJhdGUsIGkuZS4KKyAqCWEgcXVhcnRlciBvZiB0aGUgYmFzZSAoMjAgTUh6KSByYXRlCiAgKiBAX19OTDgwMjExX1JBVEVfSU5GT19BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqLwogZW51bSBubDgwMjExX3JhdGVfaW5mbyB7CkBAIC0yMjQxLDYgKzIzMTAsOCBAQAogCU5MODAyMTFfUkFURV9JTkZPXzgwX01IWl9XSURUSCwKIAlOTDgwMjExX1JBVEVfSU5GT184MFA4MF9NSFpfV0lEVEgsCiAJTkw4MDIxMV9SQVRFX0lORk9fMTYwX01IWl9XSURUSCwKKwlOTDgwMjExX1JBVEVfSU5GT18xMF9NSFpfV0lEVEgsCisJTkw4MDIxMV9SQVRFX0lORk9fNV9NSFpfV0lEVEgsCiAKIAkvKiBrZWVwIGxhc3QgKi8KIAlfX05MODAyMTFfUkFURV9JTkZPX0FGVEVSX0xBU1QsCkBAIC0yMjg1LDE4ICsyMzU2LDI0IEBACiAgKgogICogQF9fTkw4MDIxMV9TVEFfSU5GT19JTlZBTElEOiBhdHRyaWJ1dGUgbnVtYmVyIDAgaXMgcmVzZXJ2ZWQKICAqIEBOTDgwMjExX1NUQV9JTkZPX0lOQUNUSVZFX1RJTUU6IHRpbWUgc2luY2UgbGFzdCBhY3Rpdml0eSAodTMyLCBtc2VjcykKLSAqIEBOTDgwMjExX1NUQV9JTkZPX1JYX0JZVEVTOiB0b3RhbCByZWNlaXZlZCBieXRlcyAodTMyLCBmcm9tIHRoaXMgc3RhdGlvbikKLSAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX0JZVEVTOiB0b3RhbCB0cmFuc21pdHRlZCBieXRlcyAodTMyLCB0byB0aGlzIHN0YXRpb24pCi0gKiBATkw4MDIxMV9TVEFfSU5GT19SWF9CWVRFUzY0OiB0b3RhbCByZWNlaXZlZCBieXRlcyAodTY0LCBmcm9tIHRoaXMgc3RhdGlvbikKLSAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX0JZVEVTNjQ6IHRvdGFsIHRyYW5zbWl0dGVkIGJ5dGVzICh1NjQsIHRvIHRoaXMgc3RhdGlvbikKKyAqIEBOTDgwMjExX1NUQV9JTkZPX1JYX0JZVEVTOiB0b3RhbCByZWNlaXZlZCBieXRlcyAoTVBEVSBsZW5ndGgpCisgKgkodTMyLCBmcm9tIHRoaXMgc3RhdGlvbikKKyAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX0JZVEVTOiB0b3RhbCB0cmFuc21pdHRlZCBieXRlcyAoTVBEVSBsZW5ndGgpCisgKgkodTMyLCB0byB0aGlzIHN0YXRpb24pCisgKiBATkw4MDIxMV9TVEFfSU5GT19SWF9CWVRFUzY0OiB0b3RhbCByZWNlaXZlZCBieXRlcyAoTVBEVSBsZW5ndGgpCisgKgkodTY0LCBmcm9tIHRoaXMgc3RhdGlvbikKKyAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX0JZVEVTNjQ6IHRvdGFsIHRyYW5zbWl0dGVkIGJ5dGVzIChNUERVIGxlbmd0aCkKKyAqCSh1NjQsIHRvIHRoaXMgc3RhdGlvbikKICAqIEBOTDgwMjExX1NUQV9JTkZPX1NJR05BTDogc2lnbmFsIHN0cmVuZ3RoIG9mIGxhc3QgcmVjZWl2ZWQgUFBEVSAodTgsIGRCbSkKICAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEU6IGN1cnJlbnQgdW5pY2FzdCB0eCByYXRlLCBuZXN0ZWQgYXR0cmlidXRlCiAgKiAJY29udGFpbmluZyBpbmZvIGFzIHBvc3NpYmxlLCBzZWUgJmVudW0gbmw4MDIxMV9yYXRlX2luZm8KLSAqIEBOTDgwMjExX1NUQV9JTkZPX1JYX1BBQ0tFVFM6IHRvdGFsIHJlY2VpdmVkIHBhY2tldCAodTMyLCBmcm9tIHRoaXMgc3RhdGlvbikKLSAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFM6IHRvdGFsIHRyYW5zbWl0dGVkIHBhY2tldHMgKHUzMiwgdG8gdGhpcwotICoJc3RhdGlvbikKLSAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX1JFVFJJRVM6IHRvdGFsIHJldHJpZXMgKHUzMiwgdG8gdGhpcyBzdGF0aW9uKQotICogQE5MODAyMTFfU1RBX0lORk9fVFhfRkFJTEVEOiB0b3RhbCBmYWlsZWQgcGFja2V0cyAodTMyLCB0byB0aGlzIHN0YXRpb24pCisgKiBATkw4MDIxMV9TVEFfSU5GT19SWF9QQUNLRVRTOiB0b3RhbCByZWNlaXZlZCBwYWNrZXQgKE1TRFVzIGFuZCBNTVBEVXMpCisgKgkodTMyLCBmcm9tIHRoaXMgc3RhdGlvbikKKyAqIEBOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFM6IHRvdGFsIHRyYW5zbWl0dGVkIHBhY2tldHMgKE1TRFVzIGFuZCBNTVBEVXMpCisgKgkodTMyLCB0byB0aGlzIHN0YXRpb24pCisgKiBATkw4MDIxMV9TVEFfSU5GT19UWF9SRVRSSUVTOiB0b3RhbCByZXRyaWVzIChNUERVcykgKHUzMiwgdG8gdGhpcyBzdGF0aW9uKQorICogQE5MODAyMTFfU1RBX0lORk9fVFhfRkFJTEVEOiB0b3RhbCBmYWlsZWQgcGFja2V0cyAoTVBEVXMpCisgKgkodTMyLCB0byB0aGlzIHN0YXRpb24pCiAgKiBATkw4MDIxMV9TVEFfSU5GT19TSUdOQUxfQVZHOiBzaWduYWwgc3RyZW5ndGggYXZlcmFnZSAodTgsIGRCbSkKICAqIEBOTDgwMjExX1NUQV9JTkZPX0xMSUQ6IHRoZSBzdGF0aW9uJ3MgbWVzaCBMTElECiAgKiBATkw4MDIxMV9TVEFfSU5GT19QTElEOiB0aGUgc3RhdGlvbidzIG1lc2ggUExJRApAQCAtMjMyMCw2ICsyMzk3LDE2IEBACiAgKglTYW1lIGZvcm1hdCBhcyBOTDgwMjExX1NUQV9JTkZPX0NIQUlOX1NJR05BTC4KICAqIEBOTDgwMjExX1NUQV9FWFBFQ1RFRF9USFJPVUdIUFVUOiBleHBlY3RlZCB0aHJvdWdocHV0IGNvbnNpZGVyaW5nIGFsc28gdGhlCiAgKgk4MDIuMTEgaGVhZGVyICh1MzIsIGticHMpCisgKiBATkw4MDIxMV9TVEFfSU5GT19SWF9EUk9QX01JU0M6IFJYIHBhY2tldHMgZHJvcHBlZCBmb3IgdW5zcGVjaWZpZWQgcmVhc29ucworICoJKHU2NCkKKyAqIEBOTDgwMjExX1NUQV9JTkZPX0JFQUNPTl9SWDogbnVtYmVyIG9mIGJlYWNvbnMgcmVjZWl2ZWQgZnJvbSB0aGlzIHBlZXIgKHU2NCkKKyAqIEBOTDgwMjExX1NUQV9JTkZPX0JFQUNPTl9TSUdOQUxfQVZHOiBzaWduYWwgc3RyZW5ndGggYXZlcmFnZQorICoJZm9yIGJlYWNvbnMgb25seSAodTgsIGRCbSkKKyAqIEBOTDgwMjExX1NUQV9JTkZPX1RJRF9TVEFUUzogcGVyLVRJRCBzdGF0aXN0aWNzIChzZWUgJmVudW0gbmw4MDIxMV90aWRfc3RhdHMpCisgKglUaGlzIGlzIGEgbmVzdGVkIGF0dHJpYnV0ZSB3aGVyZSBlYWNoIHRoZSBpbm5lciBhdHRyaWJ1dGUgbnVtYmVyIGlzIHRoZQorICoJVElEKzEgYW5kIHRoZSBzcGVjaWFsIFRJRCAxNiAoaS5lLiB2YWx1ZSAxNykgaXMgdXNlZCBmb3Igbm9uLVFvUyBmcmFtZXM7CisgKgllYWNoIG9uZSBvZiB0aG9zZSBpcyBhZ2FpbiBuZXN0ZWQgd2l0aCAmZW51bSBubDgwMjExX3RpZF9zdGF0cworICoJYXR0cmlidXRlcyBjYXJyeWluZyB0aGUgYWN0dWFsIHZhbHVlcy4KICAqIEBfX05MODAyMTFfU1RBX0lORk9fQUZURVJfTEFTVDogaW50ZXJuYWwKICAqIEBOTDgwMjExX1NUQV9JTkZPX01BWDogaGlnaGVzdCBwb3NzaWJsZSBzdGF0aW9uIGluZm8gYXR0cmlidXRlCiAgKi8KQEAgLTIzNTIsNiArMjQzOSwxMCBAQAogCU5MODAyMTFfU1RBX0lORk9fQ0hBSU5fU0lHTkFMLAogCU5MODAyMTFfU1RBX0lORk9fQ0hBSU5fU0lHTkFMX0FWRywKIAlOTDgwMjExX1NUQV9JTkZPX0VYUEVDVEVEX1RIUk9VR0hQVVQsCisJTkw4MDIxMV9TVEFfSU5GT19SWF9EUk9QX01JU0MsCisJTkw4MDIxMV9TVEFfSU5GT19CRUFDT05fUlgsCisJTkw4MDIxMV9TVEFfSU5GT19CRUFDT05fU0lHTkFMX0FWRywKKwlOTDgwMjExX1NUQV9JTkZPX1RJRF9TVEFUUywKIAogCS8qIGtlZXAgbGFzdCAqLwogCV9fTkw4MDIxMV9TVEFfSU5GT19BRlRFUl9MQVNULApAQCAtMjM1OSw2ICsyNDUwLDMxIEBACiB9OwogCiAvKioKKyAqIGVudW0gbmw4MDIxMV90aWRfc3RhdHMgLSBwZXIgVElEIHN0YXRpc3RpY3MgYXR0cmlidXRlcworICogQF9fTkw4MDIxMV9USURfU1RBVFNfSU5WQUxJRDogYXR0cmlidXRlIG51bWJlciAwIGlzIHJlc2VydmVkCisgKiBATkw4MDIxMV9USURfU1RBVFNfUlhfTVNEVTogbnVtYmVyIG9mIE1TRFVzIHJlY2VpdmVkICh1NjQpCisgKiBATkw4MDIxMV9USURfU1RBVFNfVFhfTVNEVTogbnVtYmVyIG9mIE1TRFVzIHRyYW5zbWl0dGVkIChvcgorICoJYXR0ZW1wdGVkIHRvIHRyYW5zbWl0OyB1NjQpCisgKiBATkw4MDIxMV9USURfU1RBVFNfVFhfTVNEVV9SRVRSSUVTOiBudW1iZXIgb2YgcmV0cmllcyBmb3IKKyAqCXRyYW5zbWl0dGVkIE1TRFVzIChub3QgY291bnRpbmcgdGhlIGZpcnN0IGF0dGVtcHQ7IHU2NCkKKyAqIEBOTDgwMjExX1RJRF9TVEFUU19UWF9NU0RVX0ZBSUxFRDogbnVtYmVyIG9mIGZhaWxlZCB0cmFuc21pdHRlZAorICoJTVNEVXMgKHU2NCkKKyAqIEBOVU1fTkw4MDIxMV9USURfU1RBVFM6IG51bWJlciBvZiBhdHRyaWJ1dGVzIGhlcmUKKyAqIEBOTDgwMjExX1RJRF9TVEFUU19NQVg6IGhpZ2hlc3QgbnVtYmVyZWQgYXR0cmlidXRlIGhlcmUKKyAqLworZW51bSBubDgwMjExX3RpZF9zdGF0cyB7CisJX19OTDgwMjExX1RJRF9TVEFUU19JTlZBTElELAorCU5MODAyMTFfVElEX1NUQVRTX1JYX01TRFUsCisJTkw4MDIxMV9USURfU1RBVFNfVFhfTVNEVSwKKwlOTDgwMjExX1RJRF9TVEFUU19UWF9NU0RVX1JFVFJJRVMsCisJTkw4MDIxMV9USURfU1RBVFNfVFhfTVNEVV9GQUlMRUQsCisKKwkvKiBrZWVwIGxhc3QgKi8KKwlOVU1fTkw4MDIxMV9USURfU1RBVFMsCisJTkw4MDIxMV9USURfU1RBVFNfTUFYID0gTlVNX05MODAyMTFfVElEX1NUQVRTIC0gMQorfTsKKworLyoqCiAgKiBlbnVtIG5sODAyMTFfbXBhdGhfZmxhZ3MgLSBubDgwMjExIG1lc2ggcGF0aCBmbGFncwogICoKICAqIEBOTDgwMjExX01QQVRIX0ZMQUdfQUNUSVZFOiB0aGUgbWVzaCBwYXRoIGlzIGFjdGl2ZQpAQCAtMjc3MiwxNiArMjg4OCwxOCBAQAogICogQE5MODAyMTFfU1VSVkVZX0lORk9fRlJFUVVFTkNZOiBjZW50ZXIgZnJlcXVlbmN5IG9mIGNoYW5uZWwKICAqIEBOTDgwMjExX1NVUlZFWV9JTkZPX05PSVNFOiBub2lzZSBsZXZlbCBvZiBjaGFubmVsICh1OCwgZEJtKQogICogQE5MODAyMTFfU1VSVkVZX0lORk9fSU5fVVNFOiBjaGFubmVsIGlzIGN1cnJlbnRseSBiZWluZyB1c2VkCi0gKiBATkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUU6IGFtb3VudCBvZiB0aW1lIChpbiBtcykgdGhhdCB0aGUgcmFkaW8KLSAqCXNwZW50IG9uIHRoaXMgY2hhbm5lbAotICogQE5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX0JVU1k6IGFtb3VudCBvZiB0aGUgdGltZSB0aGUgcHJpbWFyeQorICogQE5MODAyMTFfU1VSVkVZX0lORk9fVElNRTogYW1vdW50IG9mIHRpbWUgKGluIG1zKSB0aGF0IHRoZSByYWRpbworICoJd2FzIHR1cm5lZCBvbiAob24gY2hhbm5lbCBvciBnbG9iYWxseSkKKyAqIEBOTDgwMjExX1NVUlZFWV9JTkZPX1RJTUVfQlVTWTogYW1vdW50IG9mIHRoZSB0aW1lIHRoZSBwcmltYXJ5CiAgKgljaGFubmVsIHdhcyBzZW5zZWQgYnVzeSAoZWl0aGVyIGR1ZSB0byBhY3Rpdml0eSBvciBlbmVyZ3kgZGV0ZWN0KQotICogQE5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX0VYVF9CVVNZOiBhbW91bnQgb2YgdGltZSB0aGUgZXh0ZW5zaW9uCisgKiBATkw4MDIxMV9TVVJWRVlfSU5GT19USU1FX0VYVF9CVVNZOiBhbW91bnQgb2YgdGltZSB0aGUgZXh0ZW5zaW9uCiAgKgljaGFubmVsIHdhcyBzZW5zZWQgYnVzeQotICogQE5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1JYOiBhbW91bnQgb2YgdGltZSB0aGUgcmFkaW8gc3BlbnQKLSAqCXJlY2VpdmluZyBkYXRhCi0gKiBATkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfVFg6IGFtb3VudCBvZiB0aW1lIHRoZSByYWRpbyBzcGVudAotICoJdHJhbnNtaXR0aW5nIGRhdGEKKyAqIEBOTDgwMjExX1NVUlZFWV9JTkZPX1RJTUVfUlg6IGFtb3VudCBvZiB0aW1lIHRoZSByYWRpbyBzcGVudAorICoJcmVjZWl2aW5nIGRhdGEgKG9uIGNoYW5uZWwgb3IgZ2xvYmFsbHkpCisgKiBATkw4MDIxMV9TVVJWRVlfSU5GT19USU1FX1RYOiBhbW91bnQgb2YgdGltZSB0aGUgcmFkaW8gc3BlbnQKKyAqCXRyYW5zbWl0dGluZyBkYXRhIChvbiBjaGFubmVsIG9yIGdsb2JhbGx5KQorICogQE5MODAyMTFfU1VSVkVZX0lORk9fVElNRV9TQ0FOOiB0aW1lIHRoZSByYWRpbyBzcGVudCBmb3Igc2NhbgorICoJKG9uIHRoaXMgY2hhbm5lbCBvciBnbG9iYWxseSkKICAqIEBOTDgwMjExX1NVUlZFWV9JTkZPX01BWDogaGlnaGVzdCBzdXJ2ZXkgaW5mbyBhdHRyaWJ1dGUgbnVtYmVyCiAgKgljdXJyZW50bHkgZGVmaW5lZAogICogQF9fTkw4MDIxMV9TVVJWRVlfSU5GT19BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKQEAgLTI3OTEsMTcgKzI5MDksMjUgQEAKIAlOTDgwMjExX1NVUlZFWV9JTkZPX0ZSRVFVRU5DWSwKIAlOTDgwMjExX1NVUlZFWV9JTkZPX05PSVNFLAogCU5MODAyMTFfU1VSVkVZX0lORk9fSU5fVVNFLAotCU5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FLAotCU5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX0JVU1ksCi0JTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfRVhUX0JVU1ksCi0JTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfUlgsCi0JTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfVFgsCisJTkw4MDIxMV9TVVJWRVlfSU5GT19USU1FLAorCU5MODAyMTFfU1VSVkVZX0lORk9fVElNRV9CVVNZLAorCU5MODAyMTFfU1VSVkVZX0lORk9fVElNRV9FWFRfQlVTWSwKKwlOTDgwMjExX1NVUlZFWV9JTkZPX1RJTUVfUlgsCisJTkw4MDIxMV9TVVJWRVlfSU5GT19USU1FX1RYLAorCU5MODAyMTFfU1VSVkVZX0lORk9fVElNRV9TQ0FOLAogCiAJLyoga2VlcCBsYXN0ICovCiAJX19OTDgwMjExX1NVUlZFWV9JTkZPX0FGVEVSX0xBU1QsCiAJTkw4MDIxMV9TVVJWRVlfSU5GT19NQVggPSBfX05MODAyMTFfU1VSVkVZX0lORk9fQUZURVJfTEFTVCAtIDEKIH07CiAKKy8qIGtlZXAgb2xkIG5hbWVzIGZvciBjb21wYXRpYmlsaXR5ICovCisjZGVmaW5lIE5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FCQlOTDgwMjExX1NVUlZFWV9JTkZPX1RJTUUKKyNkZWZpbmUgTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfQlVTWQkJTkw4MDIxMV9TVVJWRVlfSU5GT19USU1FX0JVU1kKKyNkZWZpbmUgTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfRVhUX0JVU1kJTkw4MDIxMV9TVVJWRVlfSU5GT19USU1FX0VYVF9CVVNZCisjZGVmaW5lIE5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1JYCQlOTDgwMjExX1NVUlZFWV9JTkZPX1RJTUVfUlgKKyNkZWZpbmUgTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfVFgJCU5MODAyMTFfU1VSVkVZX0lORk9fVElNRV9UWAorCiAvKioKICAqIGVudW0gbmw4MDIxMV9tbnRyX2ZsYWdzIC0gbW9uaXRvciBjb25maWd1cmF0aW9uIGZsYWdzCiAgKgpAQCAtMzIzOCw2ICszMzY0LDkgQEAKIC8qKgogICogZW51bSBubDgwMjExX2Jzc19zdGF0dXMgLSBCU1MgInN0YXR1cyIKICAqIEBOTDgwMjExX0JTU19TVEFUVVNfQVVUSEVOVElDQVRFRDogQXV0aGVudGljYXRlZCB3aXRoIHRoaXMgQlNTLgorICoJTm90ZSB0aGF0IHRoaXMgaXMgbm8gbG9uZ2VyIHVzZWQgc2luY2UgY2ZnODAyMTEgbm8gbG9uZ2VyCisgKglrZWVwcyB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCBhdXRoZW50aWNhdGlvbiB3YXMgZG9uZSB3aXRoCisgKglhIGdpdmVuIEJTUy4KICAqIEBOTDgwMjExX0JTU19TVEFUVVNfQVNTT0NJQVRFRDogQXNzb2NpYXRlZCB3aXRoIHRoaXMgQlNTLgogICogQE5MODAyMTFfQlNTX1NUQVRVU19JQlNTX0pPSU5FRDogSm9pbmVkIHRvIHRoaXMgSUJTUy4KICAqCkBAIC0zNjIxLDkgKzM3NTAsMTIgQEAKICAqIEBOTDgwMjExX1dPV0xBTl9UUklHX05FVF9ERVRFQ1Q6IHdha2UgdXAgd2hlbiBhIGNvbmZpZ3VyZWQgbmV0d29yawogICoJaXMgZGV0ZWN0ZWQuICBUaGlzIGlzIGEgbmVzdGVkIGF0dHJpYnV0ZSB0aGF0IGNvbnRhaW5zIHRoZQogICoJc2FtZSBhdHRyaWJ1dGVzIHVzZWQgd2l0aCBATkw4MDIxMV9DTURfU1RBUlRfU0NIRURfU0NBTi4gIEl0Ci0gKglzcGVjaWZpZXMgaG93IHRoZSBzY2FuIGlzIHBlcmZvcm1lZCAoZS5nLiB0aGUgaW50ZXJ2YWwgYW5kIHRoZQotICoJY2hhbm5lbHMgdG8gc2NhbikgYXMgd2VsbCBhcyB0aGUgc2NhbiByZXN1bHRzIHRoYXQgd2lsbAotICoJdHJpZ2dlciBhIHdha2UgKGkuZS4gdGhlIG1hdGNoc2V0cykuCisgKglzcGVjaWZpZXMgaG93IHRoZSBzY2FuIGlzIHBlcmZvcm1lZCAoZS5nLiB0aGUgaW50ZXJ2YWwsIHRoZQorICoJY2hhbm5lbHMgdG8gc2NhbiBhbmQgdGhlIGluaXRpYWwgZGVsYXkpIGFzIHdlbGwgYXMgdGhlIHNjYW4KKyAqCXJlc3VsdHMgdGhhdCB3aWxsIHRyaWdnZXIgYSB3YWtlIChpLmUuIHRoZSBtYXRjaHNldHMpLiAgVGhpcworICoJYXR0cmlidXRlIGlzIGFsc28gc2VudCBpbiBhIHJlc3BvbnNlIHRvCisgKglATkw4MDIxMV9DTURfR0VUX1dJUEhZLCBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgbWF0Y2ggc2V0cworICoJc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKHUzMikuCiAgKiBATkw4MDIxMV9XT1dMQU5fVFJJR19ORVRfREVURUNUX1JFU1VMVFM6IG5lc3RlZCBhdHRyaWJ1dGUKICAqCWNvbnRhaW5pbmcgYW4gYXJyYXkgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRyaWdnZXJlZCB0aGUKICAqCXdha2UgdXAuICBJZiBubyBlbGVtZW50cyBhcmUgcHJlc2VudCBpbiB0aGUgYXJyYXksIGl0IG1lYW5zCkBAIC00MTk0LDYgKzQzMjYsMTkgQEAKIH07CiAKIC8qKgorICogZW51bSBubDgwMjExX2V4dF9mZWF0dXJlX2luZGV4IC0gYml0IGluZGV4IG9mIGV4dGVuZGVkIGZlYXR1cmVzLgorICoKKyAqIEBOVU1fTkw4MDIxMV9FWFRfRkVBVFVSRVM6IG51bWJlciBvZiBleHRlbmRlZCBmZWF0dXJlcy4KKyAqIEBNQVhfTkw4MDIxMV9FWFRfRkVBVFVSRVM6IGhpZ2hlc3QgZXh0ZW5kZWQgZmVhdHVyZSBpbmRleC4KKyAqLworZW51bSBubDgwMjExX2V4dF9mZWF0dXJlX2luZGV4IHsKKworCS8qIGFkZCBuZXcgZmVhdHVyZXMgYmVmb3JlIHRoZSBkZWZpbml0aW9uIGJlbG93ICovCisJTlVNX05MODAyMTFfRVhUX0ZFQVRVUkVTLAorCU1BWF9OTDgwMjExX0VYVF9GRUFUVVJFUyA9IE5VTV9OTDgwMjExX0VYVF9GRUFUVVJFUyAtIDEKK307CisKKy8qKgogICogZW51bSBubDgwMjExX3Byb2JlX3Jlc3Bfb2ZmbG9hZF9zdXBwb3J0X2F0dHIgLSBvcHRpb25hbCBzdXBwb3J0ZWQKICAqCXByb3RvY29scyBmb3IgcHJvYmUtcmVzcG9uc2Ugb2ZmbG9hZGluZyBieSB0aGUgZHJpdmVyL0ZXLgogICoJVG8gYmUgdXNlZCB3aXRoIHRoZSAlTkw4MDIxMV9BVFRSX1BST0JFX1JFU1BfT0ZGTE9BRCBhdHRyaWJ1dGUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0Y2guaCBiL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCmluZGV4IGY3MTRlODYuLmJiZDQ5YTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCkBAIC0yNTIsMTEgKzI1MiwyMSBAQAogCiAjZGVmaW5lIE9WU19WUE9SVF9BVFRSX01BWCAoX19PVlNfVlBPUlRfQVRUUl9NQVggLSAxKQogCitlbnVtIHsKKwlPVlNfVlhMQU5fRVhUX1VOU1BFQywKKwlPVlNfVlhMQU5fRVhUX0dCUCwJLyogRmxhZyBvciBfX3UzMiAqLworCV9fT1ZTX1ZYTEFOX0VYVF9NQVgsCit9OworCisjZGVmaW5lIE9WU19WWExBTl9FWFRfTUFYIChfX09WU19WWExBTl9FWFRfTUFYIC0gMSkKKworCiAvKiBPVlNfVlBPUlRfQVRUUl9PUFRJT05TIGF0dHJpYnV0ZXMgZm9yIHR1bm5lbHMuCiAgKi8KIGVudW0gewogCU9WU19UVU5ORUxfQVRUUl9VTlNQRUMsCiAJT1ZTX1RVTk5FTF9BVFRSX0RTVF9QT1JULCAvKiAxNi1iaXQgVURQIHBvcnQsIHVzZWQgYnkgTDQgdHVubmVscy4gKi8KKwlPVlNfVFVOTkVMX0FUVFJfRVhURU5TSU9OLAogCV9fT1ZTX1RVTk5FTF9BVFRSX01BWAogfTsKIApAQCAtMzI4LDYgKzMzOCw3IEBACiAJT1ZTX1RVTk5FTF9LRVlfQVRUUl9HRU5FVkVfT1BUUywgICAgICAgIC8qIEFycmF5IG9mIEdlbmV2ZSBvcHRpb25zLiAqLwogCU9WU19UVU5ORUxfS0VZX0FUVFJfVFBfU1JDLAkJLyogYmUxNiBzcmMgVHJhbnNwb3J0IFBvcnQuICovCiAJT1ZTX1RVTk5FTF9LRVlfQVRUUl9UUF9EU1QsCQkvKiBiZTE2IGRzdCBUcmFuc3BvcnQgUG9ydC4gKi8KKwlPVlNfVFVOTkVMX0tFWV9BVFRSX1ZYTEFOX09QVFMsCQkvKiBOZXN0ZWQgT1ZTX1ZYTEFOX0VYVF8qICovCiAJX19PVlNfVFVOTkVMX0tFWV9BVFRSX01BWAogfTsKIApAQCAtNDQ4LDYgKzQ1OSwxNCBAQAogICogYSB3aWxkY2FyZGVkIG1hdGNoLiBPbWl0dGluZyBhdHRyaWJ1dGUgaXMgdHJlYXRlZCBhcyB3aWxkY2FyZGluZyBhbGwKICAqIGNvcnJlc3BvbmRpbmcgZmllbGRzLiBPcHRpb25hbCBmb3IgYWxsIHJlcXVlc3RzLiBJZiBub3QgcHJlc2VudCwKICAqIGFsbCBmbG93IGtleSBiaXRzIGFyZSBleGFjdCBtYXRjaCBiaXRzLgorICogQE9WU19GTE9XX0FUVFJfVUZJRDogQSB2YWx1ZSBiZXR3ZWVuIDEtMTYgb2N0ZXRzIHNwZWNpZnlpbmcgYSB1bmlxdWUKKyAqIGlkZW50aWZpZXIgZm9yIHRoZSBmbG93LiBDYXVzZXMgdGhlIGZsb3cgdG8gYmUgaW5kZXhlZCBieSB0aGlzIHZhbHVlIHJhdGhlcgorICogdGhhbiB0aGUgdmFsdWUgb2YgdGhlICVPVlNfRkxPV19BVFRSX0tFWSBhdHRyaWJ1dGUuIE9wdGlvbmFsIGZvciBhbGwKKyAqIHJlcXVlc3RzLiBQcmVzZW50IGluIG5vdGlmaWNhdGlvbnMgaWYgdGhlIGZsb3cgd2FzIGNyZWF0ZWQgd2l0aCB0aGlzCisgKiBhdHRyaWJ1dGUuCisgKiBAT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTOiBBIDMyLWJpdCB2YWx1ZSBvZiBPUidkICVPVlNfVUZJRF9GXyoKKyAqIGZsYWdzIHRoYXQgcHJvdmlkZSBhbHRlcm5hdGl2ZSBzZW1hbnRpY3MgZm9yIGZsb3cgaW5zdGFsbGF0aW9uIGFuZAorICogcmV0cmlldmFsLiBPcHRpb25hbCBmb3IgYWxsIHJlcXVlc3RzLgogICoKICAqIFRoZXNlIGF0dHJpYnV0ZXMgZm9sbG93IHRoZSAmc3RydWN0IG92c19oZWFkZXIgd2l0aGluIHRoZSBHZW5lcmljIE5ldGxpbmsKICAqIHBheWxvYWQgZm9yICVPVlNfRkxPV18qIGNvbW1hbmRzLgpAQCAtNDYzLDEyICs0ODIsMjQgQEAKIAlPVlNfRkxPV19BVFRSX01BU0ssICAgICAgLyogU2VxdWVuY2Ugb2YgT1ZTX0tFWV9BVFRSXyogYXR0cmlidXRlcy4gKi8KIAlPVlNfRkxPV19BVFRSX1BST0JFLCAgICAgLyogRmxvdyBvcGVyYXRpb24gaXMgYSBmZWF0dXJlIHByb2JlLCBlcnJvcgogCQkJCSAgKiBsb2dnaW5nIHNob3VsZCBiZSBzdXBwcmVzc2VkLiAqLworCU9WU19GTE9XX0FUVFJfVUZJRCwgICAgICAvKiBWYXJpYWJsZSBsZW5ndGggdW5pcXVlIGZsb3cgaWRlbnRpZmllci4gKi8KKwlPVlNfRkxPV19BVFRSX1VGSURfRkxBR1MsLyogdTMyIG9mIE9WU19VRklEX0ZfKi4gKi8KIAlfX09WU19GTE9XX0FUVFJfTUFYCiB9OwogCiAjZGVmaW5lIE9WU19GTE9XX0FUVFJfTUFYIChfX09WU19GTE9XX0FUVFJfTUFYIC0gMSkKIAogLyoqCisgKiBPbWl0IGF0dHJpYnV0ZXMgZm9yIG5vdGlmaWNhdGlvbnMuCisgKgorICogSWYgYSBkYXRhcGF0aCByZXF1ZXN0IGNvbnRhaW5zIGFuICVPVlNfVUZJRF9GX09NSVRfKiBmbGFnLCB0aGVuIHRoZSBkYXRhcGF0aAorICogbWF5IG9taXQgdGhlIGNvcnJlc3BvbmRpbmcgJU9WU19GTE9XX0FUVFJfKiBmcm9tIHRoZSByZXNwb25zZS4KKyAqLworI2RlZmluZSBPVlNfVUZJRF9GX09NSVRfS0VZICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgT1ZTX1VGSURfRl9PTUlUX01BU0sgICAgICgxIDw8IDEpCisjZGVmaW5lIE9WU19VRklEX0ZfT01JVF9BQ1RJT05TICAoMSA8PCAyKQorCisvKioKICAqIGVudW0gb3ZzX3NhbXBsZV9hdHRyIC0gQXR0cmlidXRlcyBmb3IgJU9WU19BQ1RJT05fQVRUUl9TQU1QTEUgYWN0aW9uLgogICogQE9WU19TQU1QTEVfQVRUUl9QUk9CQUJJTElUWTogMzItYml0IGZyYWN0aW9uIG9mIHBhY2tldHMgdG8gc2FtcGxlIHdpdGgKICAqIEBPVlNfQUNUSU9OX0FUVFJfU0FNUExFLiAgQSB2YWx1ZSBvZiAwIHNhbXBsZXMgbm8gcGFja2V0cywgYSB2YWx1ZSBvZgpAQCAtNTY4LDYgKzU5OSwxMiBAQAogICogQE9WU19BQ1RJT05fQVRUUl9TRVQ6IFJlcGxhY2VzIHRoZSBjb250ZW50cyBvZiBhbiBleGlzdGluZyBoZWFkZXIuICBUaGUKICAqIHNpbmdsZSBuZXN0ZWQgJU9WU19LRVlfQVRUUl8qIGF0dHJpYnV0ZSBzcGVjaWZpZXMgYSBoZWFkZXIgdG8gbW9kaWZ5IGFuZCBpdHMKICAqIHZhbHVlLgorICogQE9WU19BQ1RJT05fQVRUUl9TRVRfTUFTS0VEOiBSZXBsYWNlcyB0aGUgY29udGVudHMgb2YgYW4gZXhpc3RpbmcgaGVhZGVyLiAgQQorICogbmVzdGVkICVPVlNfS0VZX0FUVFJfKiBhdHRyaWJ1dGUgc3BlY2lmaWVzIGEgaGVhZGVyIHRvIG1vZGlmeSwgaXRzIHZhbHVlLAorICogYW5kIGEgbWFzay4gIEZvciBldmVyeSBiaXQgc2V0IGluIHRoZSBtYXNrLCB0aGUgY29ycmVzcG9uZGluZyBiaXQgdmFsdWUKKyAqIGlzIGNvcGllZCBmcm9tIHRoZSB2YWx1ZSB0byB0aGUgcGFja2V0IGhlYWRlciBmaWVsZCwgcmVzdCBvZiB0aGUgYml0cyBhcmUKKyAqIGxlZnQgdW5jaGFuZ2VkLiAgVGhlIG5vbi1tYXNrZWQgdmFsdWUgYml0cyBtdXN0IGJlIHBhc3NlZCBpbiBhcyB6ZXJvZXMuCisgKiBNYXNraW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoZSAlT1ZTX0tFWV9BVFRSX1RVTk5FTCBhdHRyaWJ1dGUuCiAgKiBAT1ZTX0FDVElPTl9BVFRSX1BVU0hfVkxBTjogUHVzaCBhIG5ldyBvdXRlcm1vc3QgODAyLjFRIGhlYWRlciBvbnRvIHRoZQogICogcGFja2V0LgogICogQE9WU19BQ1RJT05fQVRUUl9QT1BfVkxBTjogUG9wIHRoZSBvdXRlcm1vc3QgODAyLjFRIGhlYWRlciBvZmYgdGhlIHBhY2tldC4KQEAgLTU4Niw2ICs2MjMsOSBAQAogICogT25seSBhIHNpbmdsZSBoZWFkZXIgY2FuIGJlIHNldCB3aXRoIGEgc2luZ2xlICVPVlNfQUNUSU9OX0FUVFJfU0VULiAgTm90IGFsbAogICogZmllbGRzIHdpdGhpbiBhIGhlYWRlciBhcmUgbW9kaWZpYWJsZSwgZS5nLiB0aGUgSVB2NCBwcm90b2NvbCBhbmQgZnJhZ21lbnQKICAqIHR5cGUgbWF5IG5vdCBiZSBjaGFuZ2VkLgorICoKKyAqIEBPVlNfQUNUSU9OX0FUVFJfU0VUX1RPX01BU0tFRDogS2VybmVsIGludGVybmFsIG1hc2tlZCBzZXQgYWN0aW9uIHRyYW5zbGF0ZWQKKyAqIGZyb20gdGhlIEBPVlNfQUNUSU9OX0FUVFJfU0VULgogICovCiAKIGVudW0gb3ZzX2FjdGlvbl9hdHRyIHsKQEAgLTYwMCw4ICs2NDAsMTkgQEAKIAlPVlNfQUNUSU9OX0FUVFJfSEFTSCwJICAgICAgLyogc3RydWN0IG92c19hY3Rpb25faGFzaC4gKi8KIAlPVlNfQUNUSU9OX0FUVFJfUFVTSF9NUExTLCAgICAvKiBzdHJ1Y3Qgb3ZzX2FjdGlvbl9wdXNoX21wbHMuICovCiAJT1ZTX0FDVElPTl9BVFRSX1BPUF9NUExTLCAgICAgLyogX19iZTE2IGV0aGVydHlwZS4gKi8KKwlPVlNfQUNUSU9OX0FUVFJfU0VUX01BU0tFRCwgICAvKiBPbmUgbmVzdGVkIE9WU19LRVlfQVRUUl8qIGluY2x1ZGluZworCQkJCSAgICAgICAqIGRhdGEgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSBtYXNrLgorCQkJCSAgICAgICAqIFRoZSBkYXRhIG11c3QgYmUgemVybyBmb3IgdGhlIHVubWFza2VkCisJCQkJICAgICAgICogYml0cy4gKi8KIAotCV9fT1ZTX0FDVElPTl9BVFRSX01BWAorCV9fT1ZTX0FDVElPTl9BVFRSX01BWCwJICAgICAgLyogTm90aGluZyBwYXN0IHRoaXMgd2lsbCBiZSBhY2NlcHRlZAorCQkJCSAgICAgICAqIGZyb20gdXNlcnNwYWNlLiAqLworCisjaWZkZWYgX19LRVJORUxfXworCU9WU19BQ1RJT05fQVRUUl9TRVRfVE9fTUFTS0VELCAvKiBLZXJuZWwgbW9kdWxlIGludGVybmFsIG1hc2tlZAorCQkJCQkqIHNldCBhY3Rpb24gY29udmVydGVkIGZyb20KKwkJCQkJKiBPVlNfQUNUSU9OX0FUVFJfU0VULiAqLworI2VuZGlmCiB9OwogCiAjZGVmaW5lIE9WU19BQ1RJT05fQVRUUl9NQVggKF9fT1ZTX0FDVElPTl9BVFRSX01BWCAtIDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvcGNpX3JlZ3MuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9wY2lfcmVncy5oCmluZGV4IDRhMWQwY2MuLmVmZTM0NDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9wY2lfcmVncy5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9wY2lfcmVncy5oCkBAIC00NTEsNiArNDUxLDEwIEBACiAjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9BVVhfUE1FCTB4MDQwMAkvKiBBdXhpbGlhcnkgUG93ZXIgUE0gRW5hYmxlICovCiAjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9OT1NOT09QX0VOIDB4MDgwMCAgLyogRW5hYmxlIE5vIFNub29wICovCiAjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9SRUFEUlEJMHg3MDAwCS8qIE1heF9SZWFkX1JlcXVlc3RfU2l6ZSAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDVExfUkVBRFJRXzEyOEIgIDB4MDAwMCAvKiAxMjggQnl0ZXMgKi8KKyNkZWZpbmUgIFBDSV9FWFBfREVWQ1RMX1JFQURSUV8yNTZCICAweDEwMDAgLyogMjU2IEJ5dGVzICovCisjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9SRUFEUlFfNTEyQiAgMHgyMDAwIC8qIDUxMiBCeXRlcyAqLworI2RlZmluZSAgUENJX0VYUF9ERVZDVExfUkVBRFJRXzEwMjRCIDB4MzAwMCAvKiAxMDI0IEJ5dGVzICovCiAjZGVmaW5lICBQQ0lfRVhQX0RFVkNUTF9CQ1JfRkxSIDB4ODAwMCAgLyogQnJpZGdlIENvbmZpZ3VyYXRpb24gUmV0cnkgLyBGTFIgKi8KICNkZWZpbmUgUENJX0VYUF9ERVZTVEEJCTEwCS8qIERldmljZSBTdGF0dXMgKi8KICNkZWZpbmUgIFBDSV9FWFBfREVWU1RBX0NFRAkweDAwMDEJLyogQ29ycmVjdGFibGUgRXJyb3IgRGV0ZWN0ZWQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9wa3Rfc2NoZWQuaAppbmRleCBkNjIzMTZiLi41MzRiODQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcGt0X3NjaGVkLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3BrdF9zY2hlZC5oCkBAIC03NzQsNiArNzc0LDggQEAKIAogCVRDQV9GUV9GTE9XX1JFRklMTF9ERUxBWSwJLyogZmxvdyBjcmVkaXQgcmVmaWxsIGRlbGF5IGluIHVzZWMgKi8KIAorCVRDQV9GUV9PUlBIQU5fTUFTSywJLyogbWFzayBhcHBsaWVkIHRvIG9ycGhhbmVkIHNrYiBoYXNoZXMgKi8KKwogCV9fVENBX0ZRX01BWAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3F1b3RhLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaAppbmRleCAzYjZjZmJlLi4xZjQ5YjgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcXVvdGEuaApAQCAtMTI2LDEwICsxMjYsMjIgQEAKICNkZWZpbmUgSUlGX0ZMQUdTCTQKICNkZWZpbmUgSUlGX0FMTAkJKElJRl9CR1JBQ0UgfCBJSUZfSUdSQUNFIHwgSUlGX0ZMQUdTKQogCitlbnVtIHsKKwlEUUZfUk9PVF9TUVVBU0hfQiA9IDAsCisJRFFGX1NZU19GSUxFX0IgPSAxNiwKKwkvKiBLZXJuZWwgaW50ZXJuYWwgZmxhZ3MgaW52aXNpYmxlIHRvIHVzZXJzcGFjZSAqLworCURRRl9QUklWQVRFCit9OworCisvKiBSb290IHNxdWFzaCBlbmFibGVkIChmb3IgdjEgcXVvdGEgZm9ybWF0KSAqLworI2RlZmluZSBEUUZfUk9PVF9TUVVBU0gJKDEgPDwgRFFGX1JPT1RfU1FVQVNIX0IpCisvKiBRdW90YSBzdG9yZWQgaW4gYSBzeXN0ZW0gZmlsZSAqLworI2RlZmluZSBEUUZfU1lTX0ZJTEUJKDEgPDwgRFFGX1NZU19GSUxFX0IpCisKIHN0cnVjdCBpZl9kcWluZm8gewogCV9fdTY0IGRxaV9iZ3JhY2U7CiAJX191NjQgZHFpX2lncmFjZTsKLQlfX3UzMiBkcWlfZmxhZ3M7CisJX191MzIgZHFpX2ZsYWdzOwkvKiBERlFfKiAqLwogCV9fdTMyIGRxaV92YWxpZDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9ydG5ldGxpbmsuaAppbmRleCA5YzliOGI0Li41Y2M1ZDY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oCkBAIC0xMzIsNiArMTMyLDExIEBACiAJUlRNX0dFVE1EQiA9IDg2LAogI2RlZmluZSBSVE1fR0VUTURCIFJUTV9HRVRNREIKIAorCVJUTV9ORVdOU0lEID0gODgsCisjZGVmaW5lIFJUTV9ORVdOU0lEIFJUTV9ORVdOU0lECisJUlRNX0dFVE5TSUQgPSA5MCwKKyNkZWZpbmUgUlRNX0dFVE5TSUQgUlRNX0dFVE5TSUQKKwogCV9fUlRNX01BWCwKICNkZWZpbmUgUlRNX01BWAkJKCgoX19SVE1fTUFYICsgMykgJiB+MykgLSAxKQogfTsKQEAgLTM4OSw2ICszOTQsOCBAQAogI2RlZmluZSBSVEFYX0lOSVRSV05EIFJUQVhfSU5JVFJXTkQKIAlSVEFYX1FVSUNLQUNLLAogI2RlZmluZSBSVEFYX1FVSUNLQUNLIFJUQVhfUVVJQ0tBQ0sKKwlSVEFYX0NDX0FMR08sCisjZGVmaW5lIFJUQVhfQ0NfQUxHTyBSVEFYX0NDX0FMR08KIAlfX1JUQVhfTUFYCiB9OwogCkBAIC02MzQsNiArNjQxLDcgQEAKIC8qIE5ldyBleHRlbmRlZCBpbmZvIGZpbHRlcnMgZm9yIElGTEFfRVhUX01BU0sgKi8KICNkZWZpbmUgUlRFWFRfRklMVEVSX1ZGCQkoMSA8PCAwKQogI2RlZmluZSBSVEVYVF9GSUxURVJfQlJWTEFOCSgxIDw8IDEpCisjZGVmaW5lIFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRAkoMSA8PCAyKQogCiAvKiBFbmQgb2YgaW5mb3JtYXRpb24gZXhwb3J0ZWQgdG8gdXNlciBsZXZlbCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvc25tcC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3NubXAuaAppbmRleCBiMjIyMjQxLi42YTZmYjc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvc25tcC5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9zbm1wLmgKQEAgLTI3MCw2ICsyNzAsMTIgQEAKIAlMSU5VWF9NSUJfVENQSFlTVEFSVFRSQUlOQ1dORCwJCS8qIFRDUEh5c3RhcnRUcmFpbkN3bmQgKi8KIAlMSU5VWF9NSUJfVENQSFlTVEFSVERFTEFZREVURUNULAkvKiBUQ1BIeXN0YXJ0RGVsYXlEZXRlY3QgKi8KIAlMSU5VWF9NSUJfVENQSFlTVEFSVERFTEFZQ1dORCwJCS8qIFRDUEh5c3RhcnREZWxheUN3bmQgKi8KKwlMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFNZTlJFQ1YsCQkvKiBUQ1BBQ0tTa2lwcGVkU3luUmVjdiAqLworCUxJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEUEFXUywJCS8qIFRDUEFDS1NraXBwZWRQQVdTICovCisJTElOVVhfTUlCX1RDUEFDS1NLSVBQRURTRVEsCQkvKiBUQ1BBQ0tTa2lwcGVkU2VxICovCisJTElOVVhfTUlCX1RDUEFDS1NLSVBQRURGSU5XQUlUMiwJLyogVENQQUNLU2tpcHBlZEZpbldhaXQyICovCisJTElOVVhfTUlCX1RDUEFDS1NLSVBQRURUSU1FV0FJVCwJLyogVENQQUNLU2tpcHBlZFRpbWVXYWl0ICovCisJTElOVVhfTUlCX1RDUEFDS1NLSVBQRURDSEFMTEVOR0UsCS8qIFRDUEFDS1NraXBwZWRDaGFsbGVuZ2UgKi8KIAlfX0xJTlVYX01JQl9NQVgKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC90Y19hY3QvS2J1aWxkIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC9LYnVpbGQKaW5kZXggYjA1N2RhMi4uMTlkNTIxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC9LYnVpbGQKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC9LYnVpbGQKQEAgLTgsMyArOCw0IEBACiBoZWFkZXIteSArPSB0Y19wZWRpdC5oCiBoZWFkZXIteSArPSB0Y19za2JlZGl0LmgKIGhlYWRlci15ICs9IHRjX3ZsYW4uaAoraGVhZGVyLXkgKz0gdGNfYnBmLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC90Y19hY3QvdGNfYnBmLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2JwZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyODhiZDc3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RjX2FjdC90Y19icGYuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDE1IEppcmkgUGlya28gPGppcmlAcmVzbnVsbGkudXM+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfVENfQlBGX0gKKyNkZWZpbmUgX19MSU5VWF9UQ19CUEZfSAorCisjaW5jbHVkZSA8bGludXgvcGt0X2Nscy5oPgorCisjZGVmaW5lIFRDQV9BQ1RfQlBGIDEzCisKK3N0cnVjdCB0Y19hY3RfYnBmIHsKKwl0Y19nZW47Cit9OworCitlbnVtIHsKKwlUQ0FfQUNUX0JQRl9VTlNQRUMsCisJVENBX0FDVF9CUEZfVE0sCisJVENBX0FDVF9CUEZfUEFSTVMsCisJVENBX0FDVF9CUEZfT1BTX0xFTiwKKwlUQ0FfQUNUX0JQRl9PUFMsCisJX19UQ0FfQUNUX0JQRl9NQVgsCit9OworI2RlZmluZSBUQ0FfQUNUX0JQRl9NQVggKF9fVENBX0FDVF9CUEZfTUFYIC0gMSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2Nvbm5tYXJrLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdGNfYWN0L3RjX2Nvbm5tYXJrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk0YjA5NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC90Y19hY3QvdGNfY29ubm1hcmsuaApAQCAtMCwwICsxLDIyIEBACisjaWZuZGVmIF9fVUFQSV9UQ19DT05OTUFSS19ICisjZGVmaW5lIF9fVUFQSV9UQ19DT05OTUFSS19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BrdF9jbHMuaD4KKworI2RlZmluZSBUQ0FfQUNUX0NPTk5NQVJLIDE0CisKK3N0cnVjdCB0Y19jb25ubWFyayB7CisJdGNfZ2VuOworCV9fdTE2IHpvbmU7Cit9OworCitlbnVtIHsKKwlUQ0FfQ09OTk1BUktfVU5TUEVDLAorCVRDQV9DT05OTUFSS19QQVJNUywKKwlUQ0FfQ09OTk1BUktfVE0sCisJX19UQ0FfQ09OTk1BUktfTUFYCit9OworI2RlZmluZSBUQ0FfQ09OTk1BUktfTUFYIChfX1RDQV9DT05OTUFSS19NQVggLSAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC90aXBjX2NvbmZpZy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RpcGNfY29uZmlnLmgKaW5kZXggODc2ZDBhMS4uMDg3YjBlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3RpcGNfY29uZmlnLmgKKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3RpcGNfY29uZmlnLmgKQEAgLTI3Miw2ICsyNzIsMjYgQEAKIAkJKG50b2hzKCgoc3RydWN0IHRsdl9kZXNjICopdGx2KS0+dGx2X3R5cGUpID09IGV4cF90eXBlKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgVExWX0dFVF9MRU4oc3RydWN0IHRsdl9kZXNjICp0bHYpCit7CisJcmV0dXJuIG50b2hzKHRsdi0+dGx2X2xlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBUTFZfU0VUX0xFTihzdHJ1Y3QgdGx2X2Rlc2MgKnRsdiwgX191MTYgbGVuKQoreworCXRsdi0+dGx2X2xlbiA9IGh0b25zKGxlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IFRMVl9DSEVDS19UWVBFKHN0cnVjdCB0bHZfZGVzYyAqdGx2LCAgX191MTYgdHlwZSkKK3sKKwlyZXR1cm4gKG50b2hzKHRsdi0+dGx2X3R5cGUpID09IHR5cGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgVExWX1NFVF9UWVBFKHN0cnVjdCB0bHZfZGVzYyAqdGx2LCBfX3UxNiB0eXBlKQoreworCXRsdi0+dGx2X3R5cGUgPSBodG9ucyh0eXBlKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgVExWX1NFVCh2b2lkICp0bHYsIF9fdTE2IHR5cGUsIHZvaWQgKmRhdGEsIF9fdTE2IGxlbikKIHsKIAlzdHJ1Y3QgdGx2X2Rlc2MgKnRsdl9wdHI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdjRsMi1jb250cm9scy5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3Y0bDItY29udHJvbHMuaAppbmRleCA2NjFmMTE5Li45ZjZlMTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdjRsMi1jb250cm9scy5oCisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92NGwyLWNvbnRyb2xzLmgKQEAgLTE3MCw2ICsxNzAsMTAgQEAKICAqIFdlIHJlc2VydmUgMTYgY29udHJvbHMgZm9yIHRoaXMgZHJpdmVyLiAqLwogI2RlZmluZSBWNEwyX0NJRF9VU0VSX1NBQTcxMzRfQkFTRQkJKFY0TDJfQ0lEX1VTRVJfQkFTRSArIDB4MTA2MCkKIAorLyogVGhlIGJhc2UgZm9yIHRoZSBhZHY3MTgwIGRyaXZlciBjb250cm9scy4KKyAqIFdlIHJlc2VydmUgMTYgY29udHJvbHMgZm9yIHRoaXMgZHJpdmVyLiAqLworI2RlZmluZSBWNEwyX0NJRF9VU0VSX0FEVjcxODBfQkFTRQkJKFY0TDJfQ0lEX1VTRVJfQkFTRSArIDB4MTA3MCkKKwogLyogTVBFRy1jbGFzcyBjb250cm9sIElEcyAqLwogLyogVGhlIE1QRUcgY29udHJvbHMgYXJlIGFwcGxpY2FibGUgdG8gYWxsIGNvZGVjIGNvbnRyb2xzCiAgKiBhbmQgdGhlICdNUEVHJyBwYXJ0IG9mIHRoZSBkZWZpbmUgaXMgaGlzdG9yaWNhbCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IGQyNzljMWIuLmZiZGMzNjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC92aWRlb2RldjIuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmlkZW9kZXYyLmgKQEAgLTQ2MywxMCArNDYzLDExIEBACiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TR0JSRzEwIHY0bDJfZm91cmNjKCdHJywgJ0InLCAnMScsICcwJykgLyogMTAgIEdCR0IuLiBSR1JHLi4gKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHUkJHMTAgdjRsMl9mb3VyY2MoJ0InLCAnQScsICcxJywgJzAnKSAvKiAxMCAgR1JHUi4uIEJHQkcuLiAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU1JHR0IxMCB2NGwyX2ZvdXJjYygnUicsICdHJywgJzEnLCAnMCcpIC8qIDEwICBSR1JHLi4gR0JHQi4uICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjEyIHY0bDJfZm91cmNjKCdCJywgJ0cnLCAnMScsICcyJykgLyogMTIgIEJHQkcuLiBHUkdSLi4gKi8KLSNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHQlJHMTIgdjRsMl9mb3VyY2MoJ0cnLCAnQicsICcxJywgJzInKSAvKiAxMiAgR0JHQi4uIFJHUkcuLiAqLwotI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkcxMiB2NGwyX2ZvdXJjYygnQicsICdBJywgJzEnLCAnMicpIC8qIDEyICBHUkdSLi4gQkdCRy4uICovCi0jZGVmaW5lIFY0TDJfUElYX0ZNVF9TUkdHQjEyIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnMScsICcyJykgLyogMTIgIFJHUkcuLiBHQkdCLi4gKi8KKwkvKiAxMGJpdCByYXcgYmF5ZXIgcGFja2VkLCA1IGJ5dGVzIGZvciBldmVyeSA0IHBpeGVscyAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1IxMFAgdjRsMl9mb3VyY2MoJ3AnLCAnQicsICdBJywgJ0EnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dCUkcxMFAgdjRsMl9mb3VyY2MoJ3AnLCAnRycsICdBJywgJ0EnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkcxMFAgdjRsMl9mb3VyY2MoJ3AnLCAnZycsICdBJywgJ0EnKQorI2RlZmluZSBWNEwyX1BJWF9GTVRfU1JHR0IxMFAgdjRsMl9mb3VyY2MoJ3AnLCAnUicsICdBJywgJ0EnKQogCS8qIDEwYml0IHJhdyBiYXllciBhLWxhdyBjb21wcmVzc2VkIHRvIDggYml0cyAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1IxMEFMQVc4IHY0bDJfZm91cmNjKCdhJywgJ0InLCAnQScsICc4JykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHQlJHMTBBTEFXOCB2NGwyX2ZvdXJjYygnYScsICdHJywgJ0EnLCAnOCcpCkBAIC00NzcsMTAgKzQ3OCwxMCBAQAogI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dCUkcxMERQQ004IHY0bDJfZm91cmNjKCdiJywgJ0cnLCAnQScsICc4JykKICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHUkJHMTBEUENNOCB2NGwyX2ZvdXJjYygnQicsICdEJywgJzEnLCAnMCcpCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUkdHQjEwRFBDTTggdjRsMl9mb3VyY2MoJ2InLCAnUicsICdBJywgJzgnKQotCS8qCi0JICogMTBiaXQgcmF3IGJheWVyLCBleHBhbmRlZCB0byAxNiBiaXRzCi0JICogeHh4eHJycnJycnJycnJ4eHh4Z2dnZ2dnZ2dnZyB4eHh4Z2dnZ2dnZ2dnZ3h4eHhiYmJiYmJiYmJiLi4uCi0JICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TQkdHUjEyIHY0bDJfZm91cmNjKCdCJywgJ0cnLCAnMScsICcyJykgLyogMTIgIEJHQkcuLiBHUkdSLi4gKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1NHQlJHMTIgdjRsMl9mb3VyY2MoJ0cnLCAnQicsICcxJywgJzInKSAvKiAxMiAgR0JHQi4uIFJHUkcuLiAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfU0dSQkcxMiB2NGwyX2ZvdXJjYygnQicsICdBJywgJzEnLCAnMicpIC8qIDEyICBHUkdSLi4gQkdCRy4uICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUkdHQjEyIHY0bDJfZm91cmNjKCdSJywgJ0cnLCAnMScsICcyJykgLyogMTIgIFJHUkcuLiBHQkdCLi4gKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1NCR0dSMTYgdjRsMl9mb3VyY2MoJ0InLCAnWScsICdSJywgJzInKSAvKiAxNiAgQkdCRy4uIEdSR1IuLiAqLwogCiAvKiBjb21wcmVzc2VkIGZvcm1hdHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9yZG1hL2liX3VzZXJfdmVyYnMuaCBiL2luY2x1ZGUvdWFwaS9yZG1hL2liX3VzZXJfdmVyYnMuaAppbmRleCA0Mjc1Yjk2Li44NjdjYzUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvcmRtYS9pYl91c2VyX3ZlcmJzLmgKKysrIGIvaW5jbHVkZS91YXBpL3JkbWEvaWJfdXNlcl92ZXJicy5oCkBAIC05MCw3ICs5MCw2IEBACiB9OwogCiBlbnVtIHsKLQlJQl9VU0VSX1ZFUkJTX0VYX0NNRF9RVUVSWV9ERVZJQ0UgPSBJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9ERVZJQ0UsCiAJSUJfVVNFUl9WRVJCU19FWF9DTURfQ1JFQVRFX0ZMT1cgPSBJQl9VU0VSX1ZFUkJTX0NNRF9USFJFU0hPTEQsCiAJSUJfVVNFUl9WRVJCU19FWF9DTURfREVTVFJPWV9GTE9XLAogfTsKQEAgLTIwMiwzMiArMjAxLDYgQEAKIAlfX3U4ICByZXNlcnZlZFs0XTsKIH07CiAKLWVudW0gewotCUlCX1VTRVJfVkVSQlNfRVhfUVVFUllfREVWSUNFX09EUCA9CQkxVUxMIDw8IDAsCi19OwotCi1zdHJ1Y3QgaWJfdXZlcmJzX2V4X3F1ZXJ5X2RldmljZSB7Ci0JX191MzIgY29tcF9tYXNrOwotCV9fdTMyIHJlc2VydmVkOwotfTsKLQotc3RydWN0IGliX3V2ZXJic19vZHBfY2FwcyB7Ci0JX191NjQgZ2VuZXJhbF9jYXBzOwotCXN0cnVjdCB7Ci0JCV9fdTMyIHJjX29kcF9jYXBzOwotCQlfX3UzMiB1Y19vZHBfY2FwczsKLQkJX191MzIgdWRfb2RwX2NhcHM7Ci0JfSBwZXJfdHJhbnNwb3J0X2NhcHM7Ci0JX191MzIgcmVzZXJ2ZWQ7Ci19OwotCi1zdHJ1Y3QgaWJfdXZlcmJzX2V4X3F1ZXJ5X2RldmljZV9yZXNwIHsKLQlzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X2RldmljZV9yZXNwIGJhc2U7Ci0JX191MzIgY29tcF9tYXNrOwotCV9fdTMyIHJlc2VydmVkOwotCXN0cnVjdCBpYl91dmVyYnNfb2RwX2NhcHMgb2RwX2NhcHM7Ci19OwotCiBzdHJ1Y3QgaWJfdXZlcmJzX3F1ZXJ5X3BvcnQgewogCV9fdTY0IHJlc3BvbnNlOwogCV9fdTggIHBvcnRfbnVtOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL3NvdW5kL2Fzb3VuZC5oIGIvaW5jbHVkZS91YXBpL3NvdW5kL2Fzb3VuZC5oCmluZGV4IDFmMjNjZDYuLjBlODhlN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9zb3VuZC9hc291bmQuaAorKysgYi9pbmNsdWRlL3VhcGkvc291bmQvYXNvdW5kLmgKQEAgLTI2OCw2ICsyNjgsNyBAQAogI2RlZmluZSBTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUCTB4MDA0MDAwMDAJLyogcGNtIHN1cHBvcnQgc29tZSBraW5kIG9mIHN5bmMgZ28gKi8KICNkZWZpbmUgU05EUlZfUENNX0lORk9fTk9fUEVSSU9EX1dBS0VVUAkweDAwODAwMDAwCS8qIHBlcmlvZCB3YWtldXAgY2FuIGJlIGRpc2FibGVkICovCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0hBU19XQUxMX0NMT0NLICAgMHgwMTAwMDAwMCAgICAgIC8qIGhhcyBhdWRpbyB3YWxsIGNsb2NrIGZvciBhdWRpby9zeXN0ZW0gdGltZSBzeW5jICovCisjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0RSQUlOX1RSSUdHRVIJMHg0MDAwMDAwMAkJLyogaW50ZXJuYWwga2VybmVsIGZsYWcgLSB0cmlnZ2VyIGluIGRyYWluICovCiAjZGVmaW5lIFNORFJWX1BDTV9JTkZPX0ZJRk9fSU5fRlJBTUVTCTB4ODAwMDAwMDAJLyogaW50ZXJuYWwga2VybmVsIGZsYWcgLSBGSUZPIHNpemUgaXMgaW4gZnJhbWVzICovCiAKIHR5cGVkZWYgaW50IF9fYml0d2lzZSBzbmRfcGNtX3N0YXRlX3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvc291bmQvdXNiX3N0cmVhbS5oIGIvaW5jbHVkZS91YXBpL3NvdW5kL3VzYl9zdHJlYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmU4ZmJhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS91YXBpL3NvdW5kL3VzYl9zdHJlYW0uaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEthcnN0ZW4gV2llc2UgPGZ6dUB3ZW1nZWhvZXJ0ZGVyc3RhYXQuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfVUFQSV9fU09VTkRfVVNCX1NUUkVBTV9ICisjZGVmaW5lIF9VQVBJX19TT1VORF9VU0JfU1RSRUFNX0gKKworI2RlZmluZSBVU0JfU1RSRUFNX0lOVEVSRkFDRV9WRVJTSU9OIDIKKworI2RlZmluZSBTTkRSVl9VU0JfU1RSRUFNX0lPQ1RMX1NFVF9QQVJBTVMgXAorCV9JT1coJ0gnLCAweDkwLCBzdHJ1Y3QgdXNiX3N0cmVhbV9jb25maWcpCisKK3N0cnVjdCB1c2Jfc3RyZWFtX3BhY2tldCB7CisJdW5zaWduZWQgb2Zmc2V0OworCXVuc2lnbmVkIGxlbmd0aDsKK307CisKKworc3RydWN0IHVzYl9zdHJlYW1fY29uZmlnIHsKKwl1bnNpZ25lZCB2ZXJzaW9uOworCXVuc2lnbmVkIHNhbXBsZV9yYXRlOworCXVuc2lnbmVkIHBlcmlvZF9mcmFtZXM7CisJdW5zaWduZWQgZnJhbWVfc2l6ZTsKK307CisKK3N0cnVjdCB1c2Jfc3RyZWFtIHsKKwlzdHJ1Y3QgdXNiX3N0cmVhbV9jb25maWcgY2ZnOworCXVuc2lnbmVkIHJlYWRfc2l6ZTsKKwl1bnNpZ25lZCB3cml0ZV9zaXplOworCisJaW50IHBlcmlvZF9zaXplOworCisJdW5zaWduZWQgc3RhdGU7CisKKwlpbnQgaWRsZV9pbnNpemU7CisJaW50IGlkbGVfb3V0c2l6ZTsKKwlpbnQgc3luY19wYWNrZXQ7CisJdW5zaWduZWQgaW5zaXplX2RvbmU7CisJdW5zaWduZWQgcGVyaW9kc19kb25lOworCXVuc2lnbmVkIHBlcmlvZHNfcG9sbGVkOworCisJc3RydWN0IHVzYl9zdHJlYW1fcGFja2V0IG91dHBhY2tldFsyXTsKKwl1bnNpZ25lZAkJIGlucGFja2V0czsKKwl1bnNpZ25lZAkJIGlucGFja2V0X2hlYWQ7CisJdW5zaWduZWQJCSBpbnBhY2tldF9zcGxpdDsKKwl1bnNpZ25lZAkJIGlucGFja2V0X3NwbGl0X2F0OworCXVuc2lnbmVkCQkgbmV4dF9pbnBhY2tldF9zcGxpdDsKKwl1bnNpZ25lZAkJIG5leHRfaW5wYWNrZXRfc3BsaXRfYXQ7CisJc3RydWN0IHVzYl9zdHJlYW1fcGFja2V0IGlucGFja2V0WzBdOworfTsKKworZW51bSB1c2Jfc3RyZWFtX3N0YXRlIHsKKwl1c2Jfc3RyZWFtX2ludmFsaWQsCisJdXNiX3N0cmVhbV9zdG9wcGVkLAorCXVzYl9zdHJlYW1fc3luYzAsCisJdXNiX3N0cmVhbV9zeW5jMSwKKwl1c2Jfc3RyZWFtX3JlYWR5LAorCXVzYl9zdHJlYW1fcnVubmluZywKKwl1c2Jfc3RyZWFtX3hydW4sCit9OworCisjZW5kaWYgLyogX1VBUElfX1NPVU5EX1VTQl9TVFJFQU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9vbWFwZHNzLmggYi9pbmNsdWRlL3ZpZGVvL29tYXBkc3MuaAppbmRleCA2YTg0NDk4Li42MGRlNjFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL29tYXBkc3MuaAorKysgYi9pbmNsdWRlL3ZpZGVvL29tYXBkc3MuaApAQCAtMzE0LDYgKzMxNCw3IEBACiAJT01BUERTU19WRVJfT01BUDQsCQkvKiBBbGwgb3RoZXIgT01BUDRzICovCiAJT01BUERTU19WRVJfT01BUDUsCiAJT01BUERTU19WRVJfQU00M3h4LAorCU9NQVBEU1NfVkVSX0RSQTd4eCwKIH07CiAKIC8qIEJvYXJkIHNwZWNpZmljIGRhdGEgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuL2dyYW50X3RhYmxlLmggYi9pbmNsdWRlL3hlbi9ncmFudF90YWJsZS5oCmluZGV4IDMzODc0NjUuLjE0M2NhNWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveGVuL2dyYW50X3RhYmxlLmgKKysrIGIvaW5jbHVkZS94ZW4vZ3JhbnRfdGFibGUuaApAQCAtNDUsNiArNDUsOCBAQAogI2luY2x1ZGUgPGFzbS94ZW4vaHlwZXJ2aXNvci5oPgogCiAjaW5jbHVkZSA8eGVuL2ZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bGludXgvbW1fdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CiAKICNkZWZpbmUgR05UVEFCX1JFU0VSVkVEX1hFTlNUT1JFIDEKIApAQCAtNTgsNiArNjAsMjIgQEAKIAl1MTYgY291bnQ7CiB9OwogCitzdHJ1Y3QgZ250YWJfdW5tYXBfcXVldWVfZGF0YTsKKwordHlwZWRlZiB2b2lkICgqZ250dGFiX3VubWFwX3JlZnNfZG9uZSkoaW50IHJlc3VsdCwgc3RydWN0IGdudGFiX3VubWFwX3F1ZXVlX2RhdGEgKmRhdGEpOworCitzdHJ1Y3QgZ250YWJfdW5tYXBfcXVldWVfZGF0YQoreworCXN0cnVjdCBkZWxheWVkX3dvcmsJZ250dGFiX3dvcms7CisJdm9pZCAqZGF0YTsKKwlnbnR0YWJfdW5tYXBfcmVmc19kb25lCWRvbmU7CisJc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgKnVubWFwX29wczsKKwlzdHJ1Y3QgZ250dGFiX3VubWFwX2dyYW50X3JlZiAqa3VubWFwX29wczsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCXVuc2lnbmVkIGludCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgYWdlOworfTsKKwogaW50IGdudHRhYl9pbml0KHZvaWQpOwogaW50IGdudHRhYl9zdXNwZW5kKHZvaWQpOwogaW50IGdudHRhYl9yZXN1bWUodm9pZCk7CkBAIC0xNjMsMTIgKzE4MSwxNyBAQAogCiAjZGVmaW5lIGdudHRhYl9tYXBfdmFkZHIobWFwKSAoKHZvaWQgKikobWFwLmhvc3RfdmlydF9hZGRyKSkKIAoraW50IGdudHRhYl9hbGxvY19wYWdlcyhpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZXMpOwordm9pZCBnbnR0YWJfZnJlZV9wYWdlcyhpbnQgbnJfcGFnZXMsIHN0cnVjdCBwYWdlICoqcGFnZXMpOworCiBpbnQgZ250dGFiX21hcF9yZWZzKHN0cnVjdCBnbnR0YWJfbWFwX2dyYW50X3JlZiAqbWFwX29wcywKIAkJICAgIHN0cnVjdCBnbnR0YWJfbWFwX2dyYW50X3JlZiAqa21hcF9vcHMsCiAJCSAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQpOwogaW50IGdudHRhYl91bm1hcF9yZWZzKHN0cnVjdCBnbnR0YWJfdW5tYXBfZ3JhbnRfcmVmICp1bm1hcF9vcHMsCi0JCSAgICAgIHN0cnVjdCBnbnR0YWJfbWFwX2dyYW50X3JlZiAqa3VubWFwX29wcywKKwkJICAgICAgc3RydWN0IGdudHRhYl91bm1hcF9ncmFudF9yZWYgKmt1bm1hcF9vcHMsCiAJCSAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCk7Cit2b2lkIGdudHRhYl91bm1hcF9yZWZzX2FzeW5jKHN0cnVjdCBnbnRhYl91bm1hcF9xdWV1ZV9kYXRhKiBpdGVtKTsKKwogCiAvKiBQZXJmb3JtIGEgYmF0Y2ggb2YgZ3JhbnQgbWFwL2NvcHkgb3BlcmF0aW9ucy4gUmV0cnkgZXZlcnkgYmF0Y2ggc2xvdAogICogZm9yIHdoaWNoIHRoZSBoeXBlcnZpc29yIHJldHVybnMgR05UU1RfZWFnYWluLiBUaGlzIGlzIHR5cGljYWxseSBkdWUKQEAgLTE4Miw0ICsyMDUsMjIgQEAKIHZvaWQgZ250dGFiX2JhdGNoX21hcChzdHJ1Y3QgZ250dGFiX21hcF9ncmFudF9yZWYgKmJhdGNoLCB1bnNpZ25lZCBjb3VudCk7CiB2b2lkIGdudHRhYl9iYXRjaF9jb3B5KHN0cnVjdCBnbnR0YWJfY29weSAqYmF0Y2gsIHVuc2lnbmVkIGNvdW50KTsKIAorCitzdHJ1Y3QgeGVuX3BhZ2VfZm9yZWlnbiB7CisJZG9taWRfdCBkb21pZDsKKwlncmFudF9yZWZfdCBncmVmOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgeGVuX3BhZ2VfZm9yZWlnbiAqeGVuX3BhZ2VfZm9yZWlnbihzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpZiAoIVBhZ2VGb3JlaWduKHBhZ2UpKQorCQlyZXR1cm4gTlVMTDsKKyNpZiBCSVRTX1BFUl9MT05HIDwgNjQKKwlyZXR1cm4gKHN0cnVjdCB4ZW5fcGFnZV9mb3JlaWduICopcGFnZS0+cHJpdmF0ZTsKKyNlbHNlCisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgeGVuX3BhZ2VfZm9yZWlnbikgPiBCSVRTX1BFUl9MT05HKTsKKwlyZXR1cm4gKHN0cnVjdCB4ZW5fcGFnZV9mb3JlaWduICopJnBhZ2UtPnByaXZhdGU7CisjZW5kaWYKK30KKwogI2VuZGlmIC8qIF9fQVNNX0dOVFRBQl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUveGVuL2ludGVyZmFjZS9mZWF0dXJlcy5oIGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2ZlYXR1cmVzLmgKaW5kZXggMTMxYTZjYy4uNmFkM2QxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2ZlYXR1cmVzLmgKKysrIGIvaW5jbHVkZS94ZW4vaW50ZXJmYWNlL2ZlYXR1cmVzLmgKQEAgLTQxLDYgKzQxLDEyIEBACiAvKiB4ODY6IERvZXMgdGhpcyBYZW4gaG9zdCBzdXBwb3J0IHRoZSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZFX0FEIGh5cGVyY2FsbD8gKi8KICNkZWZpbmUgWEVORkVBVF9tbXVfcHRfdXBkYXRlX3ByZXNlcnZlX2FkICA1CiAKKy8qCisgKiBJZiBzZXQsIEdOVFRBQk9QX21hcF9ncmFudF9yZWYgaG9ub3JzIGZsYWdzIHRvIGJlIHBsYWNlZCBpbnRvIGd1ZXN0IGtlcm5lbAorICogYXZhaWxhYmxlIHB0ZSBiaXRzLgorICovCisjZGVmaW5lIFhFTkZFQVRfZ250dGFiX21hcF9hdmFpbF9iaXRzICAgICAgNworCiAvKiB4ODY6IERvZXMgdGhpcyBYZW4gaG9zdCBzdXBwb3J0IHRoZSBIVk0gY2FsbGJhY2sgdmVjdG9yIHR5cGU/ICovCiAjZGVmaW5lIFhFTkZFQVRfaHZtX2NhbGxiYWNrX3ZlY3RvciAgICAgICAgOAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi9pbnRlcmZhY2UvZ3JhbnRfdGFibGUuaCBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9ncmFudF90YWJsZS5oCmluZGV4IGJjY2U1NjQuLjU2ODA2YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveGVuL2ludGVyZmFjZS9ncmFudF90YWJsZS5oCisrKyBiL2luY2x1ZGUveGVuL2ludGVyZmFjZS9ncmFudF90YWJsZS5oCkBAIC01MjYsNiArNTI2LDEzIEBACiAjZGVmaW5lIEdOVE1BUF9jb250YWluc19wdGUgICAgICgxPDxfR05UTUFQX2NvbnRhaW5zX3B0ZSkKIAogLyoKKyAqIEJpdHMgdG8gYmUgcGxhY2VkIGluIGd1ZXN0IGtlcm5lbCBhdmFpbGFibGUgUFRFIGJpdHMgKGFyY2hpdGVjdHVyZQorICogZGVwZW5kZW50OyBvbmx5IHN1cHBvcnRlZCB3aGVuIFhFTkZFQVRfZ250dGFiX21hcF9hdmFpbF9iaXRzIGlzIHNldCkuCisgKi8KKyNkZWZpbmUgX0dOVE1BUF9ndWVzdF9hdmFpbDAgICAgKDE2KQorI2RlZmluZSBHTlRNQVBfZ3Vlc3RfYXZhaWxfbWFzayAoKHVpbnQzMl90KX4wIDw8IF9HTlRNQVBfZ3Vlc3RfYXZhaWwwKQorCisvKgogICogVmFsdWVzIGZvciBlcnJvciBzdGF0dXMgcmV0dXJucy4gQWxsIGVycm9ycyBhcmUgLXZlLgogICovCiAjZGVmaW5lIEdOVFNUX29rYXkgICAgICAgICAgICAgKDApICAvKiBOb3JtYWwgcmV0dXJuLiAgICAgICAgICAgICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3hlbi9wYWdlLmggYi9pbmNsdWRlL3hlbi9wYWdlLmgKaW5kZXggMTI3NjViNi4uYzVlZDIwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS94ZW4vcGFnZS5oCisrKyBiL2luY2x1ZGUveGVuL3BhZ2UuaApAQCAtMyw2ICszLDExIEBACiAKICNpbmNsdWRlIDxhc20veGVuL3BhZ2UuaD4KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBhZ2VfdG9fbWZuKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXJldHVybiBwZm5fdG9fbWZuKHBhZ2VfdG9fcGZuKHBhZ2UpKTsKK30KKwogc3RydWN0IHhlbl9tZW1vcnlfcmVnaW9uIHsKIAlwaHlzX2FkZHJfdCBzdGFydDsKIAlwaHlzX2FkZHJfdCBzaXplOwpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDlhZmI5NzEuLjEzNTRhYzA5IDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC00NzAsNyArNDcwLDYgQEAKIGNvbmZpZyBUUkVFX1JDVQogCWJvb2wgIlRyZWUtYmFzZWQgaGllcmFyY2hpY2FsIFJDVSIKIAlkZXBlbmRzIG9uICFQUkVFTVBUICYmIFNNUAotCXNlbGVjdCBJUlFfV09SSwogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIFJDVSBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzCiAJICBkZXNpZ25lZCBmb3IgdmVyeSBsYXJnZSBTTVAgc3lzdGVtIHdpdGggaHVuZHJlZHMgb3IKQEAgLTQ4MCw3ICs0NzksNiBAQAogY29uZmlnIFBSRUVNUFRfUkNVCiAJYm9vbCAiUHJlZW1wdGlibGUgdHJlZS1iYXNlZCBoaWVyYXJjaGljYWwgUkNVIgogCWRlcGVuZHMgb24gUFJFRU1QVAotCXNlbGVjdCBJUlFfV09SSwogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHNlbGVjdHMgdGhlIFJDVSBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzCiAJICBkZXNpZ25lZCBmb3IgdmVyeSBsYXJnZSBTTVAgc3lzdGVtcyB3aXRoIGh1bmRyZWRzIG9yCkBAIC01MDEsOSArNDk5LDE3IEBACiAKIGVuZGNob2ljZQogCitjb25maWcgU1JDVQorCWJvb2wKKwloZWxwCisJICBUaGlzIG9wdGlvbiBzZWxlY3RzIHRoZSBzbGVlcGFibGUgdmVyc2lvbiBvZiBSQ1UuIFRoaXMgdmVyc2lvbgorCSAgcGVybWl0cyBhcmJpdHJhcnkgc2xlZXBpbmcgb3IgYmxvY2tpbmcgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKKwkgIHNlY3Rpb25zLgorCiBjb25maWcgVEFTS1NfUkNVCiAJYm9vbCAiVGFza19iYXNlZCBSQ1UgaW1wbGVtZW50YXRpb24gdXNpbmcgdm9sdW50YXJ5IGNvbnRleHQgc3dpdGNoIgogCWRlZmF1bHQgbgorCXNlbGVjdCBTUkNVCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIHRhc2stYmFzZWQgUkNVIGltcGxlbWVudGF0aW9uIHRoYXQgdXNlcwogCSAgb25seSB2b2x1bnRhcnkgY29udGV4dCBzd2l0Y2ggKG5vdCBwcmVlbXB0aW9uISksIGlkbGUsIGFuZApAQCAtNjY4LDkgKzY3NCwxMCBAQAogCiBjb25maWcgUkNVX0tUSFJFQURfUFJJTwogCWludCAiUmVhbC10aW1lIHByaW9yaXR5IHRvIHVzZSBmb3IgUkNVIHdvcmtlciB0aHJlYWRzIgotCXJhbmdlIDEgOTkKLQlkZXBlbmRzIG9uIFJDVV9CT09TVAotCWRlZmF1bHQgMQorCXJhbmdlIDEgOTkgaWYgUkNVX0JPT1NUCisJcmFuZ2UgMCA5OSBpZiAhUkNVX0JPT1NUCisJZGVmYXVsdCAxIGlmIFJDVV9CT09TVAorCWRlZmF1bHQgMCBpZiAhUkNVX0JPT1NUCiAJaGVscAogCSAgVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoZSBTQ0hFRF9GSUZPIHByaW9yaXR5IHZhbHVlIHRoYXQgd2lsbCBiZQogCSAgYXNzaWduZWQgdG8gdGhlIHJjdWMvbiBhbmQgcmN1Yi9uIHRocmVhZHMgYW5kIGlzIGFsc28gdGhlIHZhbHVlCkBAIC0xNTk1LDYgKzE2MDIsNyBAQAogCWRlcGVuZHMgb24gSEFWRV9QRVJGX0VWRU5UUwogCXNlbGVjdCBBTk9OX0lOT0RFUwogCXNlbGVjdCBJUlFfV09SSworCXNlbGVjdCBTUkNVCiAJaGVscAogCSAgRW5hYmxlIGtlcm5lbCBzdXBwb3J0IGZvciB2YXJpb3VzIHBlcmZvcm1hbmNlIGV2ZW50cyBwcm92aWRlZAogCSAgYnkgc29mdHdhcmUgYW5kIGhhcmR3YXJlLgpkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCA2MWI5OTM3Ni4uMTc5YWRhMSAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTg3LDEwICs4Nyw2IEBACiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNlbmRpZgotCiBzdGF0aWMgaW50IGtlcm5lbF9pbml0KHZvaWQgKik7CiAKIGV4dGVybiB2b2lkIGluaXRfSVJRKHZvaWQpOwpAQCAtMzUxLDE1ICszNDcsNiBAQAogCiAjaWZuZGVmIENPTkZJR19TTVAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2V0dXBfbWF4X2NwdXMgPSBOUl9DUFVTOwotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotc3RhdGljIHZvaWQgX19pbml0IHNtcF9pbml0KHZvaWQpCi17Ci0JQVBJQ19pbml0X3VuaXByb2Nlc3NvcigpOwotfQotI2Vsc2UKLSNkZWZpbmUgc21wX2luaXQoKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQogc3RhdGljIGlubGluZSB2b2lkIHNldHVwX25yX2NwdV9pZHModm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4Y3B1cykgeyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9LY29uZmlnLmxvY2tzIGIva2VybmVsL0tjb25maWcubG9ja3MKaW5kZXggNzY3NjhlZS4uMDg1NjFmMSAxMDA2NDQKLS0tIGEva2VybmVsL0tjb25maWcubG9ja3MKKysrIGIva2VybmVsL0tjb25maWcubG9ja3MKQEAgLTIzMSw2ICsyMzEsMTAgQEAKICAgICAgICBkZWZfYm9vbCB5CiAgICAgICAgZGVwZW5kcyBvbiBTTVAgJiYgUldTRU1fWENIR0FERF9BTEdPUklUSE0gJiYgQVJDSF9TVVBQT1JUU19BVE9NSUNfUk1XCiAKK2NvbmZpZyBMT0NLX1NQSU5fT05fT1dORVIKKyAgICAgICBkZWZfYm9vbCB5CisgICAgICAgZGVwZW5kcyBvbiBNVVRFWF9TUElOX09OX09XTkVSIHx8IFJXU0VNX1NQSU5fT05fT1dORVIKKwogY29uZmlnIEFSQ0hfVVNFX1FVRVVFX1JXTE9DSwogCWJvb2wKIApkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IGE1OTQ4MWEuLjE0MDhiMzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9rZXJuZWwvTWFrZWZpbGUKQEAgLTEzLDggKzEzLDggQEAKIAogaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogIyBEbyBub3QgdHJhY2UgZGVidWcgZmlsZXMgYW5kIGludGVybmFsIGZ0cmFjZSBmaWxlcwotQ0ZMQUdTX1JFTU9WRV9jZ3JvdXAtZGVidWcubyA9IC1wZwotQ0ZMQUdTX1JFTU9WRV9pcnFfd29yay5vID0gLXBnCitDRkxBR1NfUkVNT1ZFX2Nncm91cC1kZWJ1Zy5vID0gJChDQ19GTEFHU19GVFJBQ0UpCitDRkxBR1NfUkVNT1ZFX2lycV93b3JrLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSkKIGVuZGlmCiAKICMgY29uZF9zeXNjYWxsIGlzIGN1cnJlbnRseSBub3QgTFRPIGNvbXBhdGlibGUKQEAgLTI2LDYgKzI2LDcgQEAKIG9iai15ICs9IHByaW50ay8KIG9iai15ICs9IGlycS8KIG9iai15ICs9IHJjdS8KK29iai15ICs9IGxpdmVwYXRjaC8KIAogb2JqLSQoQ09ORklHX0NIRUNLUE9JTlRfUkVTVE9SRSkgKz0ga2NtcC5vCiBvYmotJChDT05GSUdfRlJFRVpFUikgKz0gZnJlZXplci5vCkBAIC0xNDIsNyArMTQzLDcgQEAKIGtlcm5lbC9zeXN0ZW1fY2VydGlmaWNhdGVzLm86ICQob2JqKS94NTA5X2NlcnRpZmljYXRlX2xpc3QKIAogcXVpZXRfY21kX3g1MDljZXJ0cyAgPSBDRVJUUyAgICRACi0gICAgICBjbWRfeDUwOWNlcnRzICA9IGNhdCAkKFg1MDlfQ0VSVElGSUNBVEVTKSAvZGV2L251bGwgPiRAICQoZm9yZWFjaCBYNTA5LCQoWDUwOV9DRVJUSUZJQ0FURVMpLDsgZWNobyAiICAtIEluY2x1ZGluZyBjZXJ0ICQoWDUwOSkiKQorICAgICAgY21kX3g1MDljZXJ0cyAgPSBjYXQgJChYNTA5X0NFUlRJRklDQVRFUykgL2Rldi9udWxsID4kQCAkKGZvcmVhY2ggWDUwOSwkKFg1MDlfQ0VSVElGSUNBVEVTKSw7ICQoa2VjaG8pICIgIC0gSW5jbHVkaW5nIGNlcnQgJChYNTA5KSIpCiAKIHRhcmdldHMgKz0gJChvYmopL3g1MDlfY2VydGlmaWNhdGVfbGlzdAogJChvYmopL3g1MDlfY2VydGlmaWNhdGVfbGlzdDogJChYNTA5X0NFUlRJRklDQVRFUykgJChvYmopLy54NTA5Lmxpc3QKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdGZpbHRlci5jIGIva2VybmVsL2F1ZGl0ZmlsdGVyLmMKaW5kZXggNGY2OGEzMi4uNzJlMTY2MGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdGZpbHRlci5jCisrKyBiL2tlcm5lbC9hdWRpdGZpbHRlci5jCkBAIC00MjUsNyArNDI1LDYgQEAKIAkJZ290byBleGl0X25vZnJlZTsKIAogCWJ1ZnAgPSBkYXRhLT5idWY7Ci0JZW50cnktPnJ1bGUudmVyc19vcHMgPSAyOwogCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5maWVsZF9jb3VudDsgaSsrKSB7CiAJCXN0cnVjdCBhdWRpdF9maWVsZCAqZiA9ICZlbnRyeS0+cnVsZS5maWVsZHNbaV07CiAKQEAgLTc1OCw3ICs3NTcsNiBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCW5ldyA9ICZlbnRyeS0+cnVsZTsKLQluZXctPnZlcnNfb3BzID0gb2xkLT52ZXJzX29wczsKIAluZXctPmZsYWdzID0gb2xkLT5mbGFnczsKIAluZXctPnBmbGFncyA9IG9sZC0+cGZsYWdzOwogCW5ldy0+bGlzdG5yID0gb2xkLT5saXN0bnI7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3N5c2NhbGwuYyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCmluZGV4IDA4OGFjMGIuLjUzNmVkYzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvc3lzY2FsbC5jCisrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAlpbnQgdWZkID0gYXR0ci0+bWFwX2ZkOwogCXN0cnVjdCBmZCBmID0gZmRnZXQodWZkKTsKIAlzdHJ1Y3QgYnBmX21hcCAqbWFwOwotCXZvaWQgKmtleSwgKnZhbHVlOworCXZvaWQgKmtleSwgKnZhbHVlLCAqcHRyOwogCWludCBlcnI7CiAKIAlpZiAoQ0hFQ0tfQVRUUihCUEZfTUFQX0xPT0tVUF9FTEVNKSkKQEAgLTE2OSwyMCArMTY5LDI5IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKGtleSwgdWtleSwgbWFwLT5rZXlfc2l6ZSkgIT0gMCkKIAkJZ290byBmcmVlX2tleTsKIAotCWVyciA9IC1FTk9FTlQ7Ci0JcmN1X3JlYWRfbG9jaygpOwotCXZhbHVlID0gbWFwLT5vcHMtPm1hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7CisJZXJyID0gLUVOT01FTTsKKwl2YWx1ZSA9IGttYWxsb2MobWFwLT52YWx1ZV9zaXplLCBHRlBfVVNFUik7CiAJaWYgKCF2YWx1ZSkKLQkJZ290byBlcnJfdW5sb2NrOworCQlnb3RvIGZyZWVfa2V5OworCisJcmN1X3JlYWRfbG9jaygpOworCXB0ciA9IG1hcC0+b3BzLT5tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpOworCWlmIChwdHIpCisJCW1lbWNweSh2YWx1ZSwgcHRyLCBtYXAtPnZhbHVlX3NpemUpOworCXJjdV9yZWFkX3VubG9jaygpOworCisJZXJyID0gLUVOT0VOVDsKKwlpZiAoIXB0cikKKwkJZ290byBmcmVlX3ZhbHVlOwogCiAJZXJyID0gLUVGQVVMVDsKIAlpZiAoY29weV90b191c2VyKHV2YWx1ZSwgdmFsdWUsIG1hcC0+dmFsdWVfc2l6ZSkgIT0gMCkKLQkJZ290byBlcnJfdW5sb2NrOworCQlnb3RvIGZyZWVfdmFsdWU7CiAKIAllcnIgPSAwOwogCi1lcnJfdW5sb2NrOgotCXJjdV9yZWFkX3VubG9jaygpOworZnJlZV92YWx1ZToKKwlrZnJlZSh2YWx1ZSk7CiBmcmVlX2tleToKIAlrZnJlZShrZXkpOwogZXJyX3B1dDoKZGlmZiAtLWdpdCBhL2tlcm5lbC9jZ3JvdXAuYyBiL2tlcm5lbC9jZ3JvdXAuYwppbmRleCBiYjI2M2QwLi4wNGNmZThhIDEwMDY0NAotLS0gYS9rZXJuZWwvY2dyb3VwLmMKKysrIGIva2VybmVsL2Nncm91cC5jCkBAIC0xOTA5LDcgKzE5MDksNyBAQAogCSAqCiAJICogQW5kIGRvbid0IGtpbGwgdGhlIGRlZmF1bHQgcm9vdC4KIAkgKi8KLQlpZiAoY3NzX2hhc19vbmxpbmVfY2hpbGRyZW4oJnJvb3QtPmNncnAuc2VsZikgfHwKKwlpZiAoIWxpc3RfZW1wdHkoJnJvb3QtPmNncnAuc2VsZi5jaGlsZHJlbikgfHwKIAkgICAgcm9vdCA9PSAmY2dycF9kZmxfcm9vdCkKIAkJY2dyb3VwX3B1dCgmcm9vdC0+Y2dycCk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IDVkMjIwMjMuLjE5NzJiMTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYworKysgYi9rZXJuZWwvY3B1LmMKQEAgLTU4LDIyICs1OCwyMyBAQAogCiBzdGF0aWMgc3RydWN0IHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFjdGl2ZV93cml0ZXI7Ci0Jc3RydWN0IG11dGV4IGxvY2s7IC8qIFN5bmNocm9uaXplcyBhY2Nlc3NlcyB0byByZWZjb3VudCwgKi8KKwkvKiB3YWl0IHF1ZXVlIHRvIHdha2UgdXAgdGhlIGFjdGl2ZV93cml0ZXIgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKKwkvKiB2ZXJpZmllcyB0aGF0IG5vIHdyaXRlciB3aWxsIGdldCBhY3RpdmUgd2hpbGUgcmVhZGVycyBhcmUgYWN0aXZlICovCisJc3RydWN0IG11dGV4IGxvY2s7CiAJLyoKIAkgKiBBbHNvIGJsb2NrcyB0aGUgbmV3IHJlYWRlcnMgZHVyaW5nCiAJICogYW4gb25nb2luZyBjcHUgaG90cGx1ZyBvcGVyYXRpb24uCiAJICovCi0JaW50IHJlZmNvdW50OwotCS8qIEFuZCBhbGxvd3MgbG9ja2xlc3MgcHV0X29ubGluZV9jcHVzKCkuICovCi0JYXRvbWljX3QgcHV0c19wZW5kaW5nOworCWF0b21pY190IHJlZmNvdW50OwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIAlzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDsKICNlbmRpZgogfSBjcHVfaG90cGx1ZyA9IHsKIAkuYWN0aXZlX3dyaXRlciA9IE5VTEwsCisJLndxID0gX19XQUlUX1FVRVVFX0hFQURfSU5JVElBTElaRVIoY3B1X2hvdHBsdWcud3EpLAogCS5sb2NrID0gX19NVVRFWF9JTklUSUFMSVpFUihjcHVfaG90cGx1Zy5sb2NrKSwKLQkucmVmY291bnQgPSAwLAogI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCiAJLmRlcF9tYXAgPSB7Lm5hbWUgPSAiY3B1X2hvdHBsdWcubG9jayIgfSwKICNlbmRpZgpAQCAtODYsMTUgKzg3LDYgQEAKICNkZWZpbmUgY3B1aHBfbG9ja19hY3F1aXJlKCkgICAgICBsb2NrX21hcF9hY3F1aXJlKCZjcHVfaG90cGx1Zy5kZXBfbWFwKQogI2RlZmluZSBjcHVocF9sb2NrX3JlbGVhc2UoKSAgICAgIGxvY2tfbWFwX3JlbGVhc2UoJmNwdV9ob3RwbHVnLmRlcF9tYXApCiAKLXN0YXRpYyB2b2lkIGFwcGx5X3B1dHNfcGVuZGluZyhpbnQgbWF4KQotewotCWludCBkZWx0YTsKLQotCWlmIChhdG9taWNfcmVhZCgmY3B1X2hvdHBsdWcucHV0c19wZW5kaW5nKSA+PSBtYXgpIHsKLQkJZGVsdGEgPSBhdG9taWNfeGNoZygmY3B1X2hvdHBsdWcucHV0c19wZW5kaW5nLCAwKTsKLQkJY3B1X2hvdHBsdWcucmVmY291bnQgLT0gZGVsdGE7Ci0JfQotfQogCiB2b2lkIGdldF9vbmxpbmVfY3B1cyh2b2lkKQogewpAQCAtMTAzLDggKzk1LDcgQEAKIAkJcmV0dXJuOwogCWNwdWhwX2xvY2tfYWNxdWlyZV9yZWFkKCk7CiAJbXV0ZXhfbG9jaygmY3B1X2hvdHBsdWcubG9jayk7Ci0JYXBwbHlfcHV0c19wZW5kaW5nKDY1NTM2KTsKLQljcHVfaG90cGx1Zy5yZWZjb3VudCsrOworCWF0b21pY19pbmMoJmNwdV9ob3RwbHVnLnJlZmNvdW50KTsKIAltdXRleF91bmxvY2soJmNwdV9ob3RwbHVnLmxvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2V0X29ubGluZV9jcHVzKTsKQEAgLTExNiw4ICsxMDcsNyBAQAogCWlmICghbXV0ZXhfdHJ5bG9jaygmY3B1X2hvdHBsdWcubG9jaykpCiAJCXJldHVybiBmYWxzZTsKIAljcHVocF9sb2NrX2FjcXVpcmVfdHJ5cmVhZCgpOwotCWFwcGx5X3B1dHNfcGVuZGluZyg2NTUzNik7Ci0JY3B1X2hvdHBsdWcucmVmY291bnQrKzsKKwlhdG9taWNfaW5jKCZjcHVfaG90cGx1Zy5yZWZjb3VudCk7CiAJbXV0ZXhfdW5sb2NrKCZjcHVfaG90cGx1Zy5sb2NrKTsKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTEyNSwyMCArMTE1LDE4IEBACiAKIHZvaWQgcHV0X29ubGluZV9jcHVzKHZvaWQpCiB7CisJaW50IHJlZmNvdW50OworCiAJaWYgKGNwdV9ob3RwbHVnLmFjdGl2ZV93cml0ZXIgPT0gY3VycmVudCkKIAkJcmV0dXJuOwotCWlmICghbXV0ZXhfdHJ5bG9jaygmY3B1X2hvdHBsdWcubG9jaykpIHsKLQkJYXRvbWljX2luYygmY3B1X2hvdHBsdWcucHV0c19wZW5kaW5nKTsKLQkJY3B1aHBfbG9ja19yZWxlYXNlKCk7Ci0JCXJldHVybjsKLQl9CiAKLQlpZiAoV0FSTl9PTighY3B1X2hvdHBsdWcucmVmY291bnQpKQotCQljcHVfaG90cGx1Zy5yZWZjb3VudCsrOyAvKiB0cnkgdG8gZml4IHRoaW5ncyB1cCAqLworCXJlZmNvdW50ID0gYXRvbWljX2RlY19yZXR1cm4oJmNwdV9ob3RwbHVnLnJlZmNvdW50KTsKKwlpZiAoV0FSTl9PTihyZWZjb3VudCA8IDApKSAvKiB0cnkgdG8gZml4IHRoaW5ncyB1cCAqLworCQlhdG9taWNfaW5jKCZjcHVfaG90cGx1Zy5yZWZjb3VudCk7CiAKLQlpZiAoIS0tY3B1X2hvdHBsdWcucmVmY291bnQgJiYgdW5saWtlbHkoY3B1X2hvdHBsdWcuYWN0aXZlX3dyaXRlcikpCi0JCXdha2VfdXBfcHJvY2VzcyhjcHVfaG90cGx1Zy5hY3RpdmVfd3JpdGVyKTsKLQltdXRleF91bmxvY2soJmNwdV9ob3RwbHVnLmxvY2spOworCWlmIChyZWZjb3VudCA8PSAwICYmIHdhaXRxdWV1ZV9hY3RpdmUoJmNwdV9ob3RwbHVnLndxKSkKKwkJd2FrZV91cCgmY3B1X2hvdHBsdWcud3EpOworCiAJY3B1aHBfbG9ja19yZWxlYXNlKCk7CiAKIH0KQEAgLTE2OCwxOCArMTU2LDIwIEBACiAgKi8KIHZvaWQgY3B1X2hvdHBsdWdfYmVnaW4odm9pZCkKIHsKLQljcHVfaG90cGx1Zy5hY3RpdmVfd3JpdGVyID0gY3VycmVudDsKKwlERUZJTkVfV0FJVCh3YWl0KTsKIAorCWNwdV9ob3RwbHVnLmFjdGl2ZV93cml0ZXIgPSBjdXJyZW50OwogCWNwdWhwX2xvY2tfYWNxdWlyZSgpOworCiAJZm9yICg7OykgewogCQltdXRleF9sb2NrKCZjcHVfaG90cGx1Zy5sb2NrKTsKLQkJYXBwbHlfcHV0c19wZW5kaW5nKDEpOwotCQlpZiAobGlrZWx5KCFjcHVfaG90cGx1Zy5yZWZjb3VudCkpCi0JCQlicmVhazsKLQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXByZXBhcmVfdG9fd2FpdCgmY3B1X2hvdHBsdWcud3EsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCWlmIChsaWtlbHkoIWF0b21pY19yZWFkKCZjcHVfaG90cGx1Zy5yZWZjb3VudCkpKQorCQkJCWJyZWFrOwogCQltdXRleF91bmxvY2soJmNwdV9ob3RwbHVnLmxvY2spOwogCQlzY2hlZHVsZSgpOwogCX0KKwlmaW5pc2hfd2FpdCgmY3B1X2hvdHBsdWcud3EsICZ3YWl0KTsKIH0KIAogdm9pZCBjcHVfaG90cGx1Z19kb25lKHZvaWQpCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL01ha2VmaWxlIGIva2VybmVsL2V2ZW50cy9NYWtlZmlsZQppbmRleCAxMDNmNWQxLi4yOTI1MTg4IDEwMDY0NAotLS0gYS9rZXJuZWwvZXZlbnRzL01ha2VmaWxlCisrKyBiL2tlcm5lbC9ldmVudHMvTWFrZWZpbGUKQEAgLTEsNSArMSw1IEBACiBpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCi1DRkxBR1NfUkVNT1ZFX2NvcmUubyA9IC1wZworQ0ZMQUdTX1JFTU9WRV9jb3JlLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSkKIGVuZGlmCiAKIG9iai15IDo9IGNvcmUubyByaW5nX2J1ZmZlci5vIGNhbGxjaGFpbi5vCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL2NvcmUuYyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCmluZGV4IDg4MmY4MzUuLjg4MTJkOGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvY29yZS5jCisrKyBiL2tlcm5lbC9ldmVudHMvY29yZS5jCkBAIC04NzIsMjIgKzg3MiwzMiBAQAogCQlwbXUtPnBtdV9lbmFibGUocG11KTsKIH0KIAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsaXN0X2hlYWQsIHJvdGF0aW9uX2xpc3QpOworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsaXN0X2hlYWQsIGFjdGl2ZV9jdHhfbGlzdCk7CiAKIC8qCi0gKiBwZXJmX3BtdV9yb3RhdGVfc3RhcnQoKSBhbmQgcGVyZl9yb3RhdGVfY29udGV4dCgpIGFyZSBmdWxseSBzZXJpYWxpemVkCi0gKiBiZWNhdXNlIHRoZXkncmUgc3RyaWN0bHkgY3B1IGFmZmluZSBhbmQgcm90YXRlX3N0YXJ0IGlzIGNhbGxlZCB3aXRoIElSUXMKLSAqIGRpc2FibGVkLCB3aGlsZSByb3RhdGVfY29udGV4dCBpcyBjYWxsZWQgZnJvbSBJUlEgY29udGV4dC4KKyAqIHBlcmZfZXZlbnRfY3R4X2FjdGl2YXRlKCksIHBlcmZfZXZlbnRfY3R4X2RlYWN0aXZhdGUoKSwgYW5kCisgKiBwZXJmX2V2ZW50X3Rhc2tfdGljaygpIGFyZSBmdWxseSBzZXJpYWxpemVkIGJlY2F1c2UgdGhleSdyZSBzdHJpY3RseSBjcHUKKyAqIGFmZmluZSBhbmQgcGVyZl9ldmVudF9jdHh7YWN0aXZhdGUsZGVhY3RpdmF0ZX0gYXJlIGNhbGxlZCB3aXRoIElSUXMKKyAqIGRpc2FibGVkLCB3aGlsZSBwZXJmX2V2ZW50X3Rhc2tfdGljayBpcyBjYWxsZWQgZnJvbSBJUlEgY29udGV4dC4KICAqLwotc3RhdGljIHZvaWQgcGVyZl9wbXVfcm90YXRlX3N0YXJ0KHN0cnVjdCBwbXUgKnBtdSkKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfY3R4X2FjdGl2YXRlKHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKLQlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4ID0gdGhpc19jcHVfcHRyKHBtdS0+cG11X2NwdV9jb250ZXh0KTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gdGhpc19jcHVfcHRyKCZyb3RhdGlvbl9saXN0KTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gdGhpc19jcHVfcHRyKCZhY3RpdmVfY3R4X2xpc3QpOwogCiAJV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsKIAotCWlmIChsaXN0X2VtcHR5KCZjcHVjdHgtPnJvdGF0aW9uX2xpc3QpKQotCQlsaXN0X2FkZCgmY3B1Y3R4LT5yb3RhdGlvbl9saXN0LCBoZWFkKTsKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZjdHgtPmFjdGl2ZV9jdHhfbGlzdCkpOworCisJbGlzdF9hZGQoJmN0eC0+YWN0aXZlX2N0eF9saXN0LCBoZWFkKTsKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9jdHhfZGVhY3RpdmF0ZShzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsKKworCVdBUk5fT04obGlzdF9lbXB0eSgmY3R4LT5hY3RpdmVfY3R4X2xpc3QpKTsKKworCWxpc3RfZGVsX2luaXQoJmN0eC0+YWN0aXZlX2N0eF9saXN0KTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0X2N0eChzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCkBAIC05MDcsNiArOTE3LDg0IEBACiB9CiAKIC8qCisgKiBCZWNhdXNlIG9mIHBlcmZfZXZlbnQ6OmN0eCBtaWdyYXRpb24gaW4gc3lzX3BlcmZfZXZlbnRfb3Blbjo6bW92ZV9ncm91cCBhbmQKKyAqIHBlcmZfcG11X21pZ3JhdGVfY29udGV4dCgpIHdlIG5lZWQgc29tZSBtYWdpYy4KKyAqCisgKiBUaG9zZSBwbGFjZXMgdGhhdCBjaGFuZ2UgcGVyZl9ldmVudDo6Y3R4IHdpbGwgaG9sZCBib3RoCisgKiBwZXJmX2V2ZW50X2N0eDo6bXV0ZXggb2YgdGhlICdvbGQnIGFuZCAnbmV3JyBjdHggdmFsdWUuCisgKgorICogTG9jayBvcmRlcmluZyBpcyBieSBtdXRleCBhZGRyZXNzLiBUaGVyZSBpcyBvbmUgb3RoZXIgc2l0ZSB3aGVyZQorICogcGVyZl9ldmVudF9jb250ZXh0OjptdXRleCBuZXN0cyBhbmQgdGhhdCBpcyBwdXRfZXZlbnQoKS4gQnV0IHJlbWVtYmVyIHRoYXQKKyAqIHRoYXQgaXMgYSBwYXJlbnQ8LT5jaGlsZCBjb250ZXh0IHJlbGF0aW9uLCBhbmQgbWlncmF0aW9uIGRvZXMgbm90IGFmZmVjdAorICogY2hpbGRyZW4sIHRoZXJlZm9yZSB0aGVzZSB0d28gb3JkZXJpbmdzIHNob3VsZCBub3QgaW50ZXJhY3QuCisgKgorICogVGhlIGNoYW5nZSBpbiBwZXJmX2V2ZW50OjpjdHggZG9lcyBub3QgYWZmZWN0IGNoaWxkcmVuIChhcyBjbGFpbWVkIGFib3ZlKQorICogYmVjYXVzZSB0aGUgc3lzX3BlcmZfZXZlbnRfb3BlbigpIGNhc2Ugd2lsbCBpbnN0YWxsIGEgbmV3IGV2ZW50IGFuZCBicmVhaworICogdGhlIGN0eCBwYXJlbnQ8LT5jaGlsZCByZWxhdGlvbiwgYW5kIHBlcmZfcG11X21pZ3JhdGVfY29udGV4dCgpIGlzIG9ubHkKKyAqIGNvbmNlcm5lZCB3aXRoIGNwdWN0eCBhbmQgdGhhdCBkb2Vzbid0IGhhdmUgY2hpbGRyZW4uCisgKgorICogVGhlIHBsYWNlcyB0aGF0IGNoYW5nZSBwZXJmX2V2ZW50OjpjdHggd2lsbCBpc3N1ZToKKyAqCisgKiAgIHBlcmZfcmVtb3ZlX2Zyb21fY29udGV4dCgpOworICogICBzeW5jaHJvbml6ZV9yY3UoKTsKKyAqICAgcGVyZl9pbnN0YWxsX2luX2NvbnRleHQoKTsKKyAqCisgKiB0byBhZmZlY3QgdGhlIGNoYW5nZS4gVGhlIHJlbW92ZV9mcm9tX2NvbnRleHQoKSArIHN5bmNocm9uaXplX3JjdSgpIHNob3VsZAorICogcXVpZXNjZSB0aGUgZXZlbnQsIGFmdGVyIHdoaWNoIHdlIGNhbiBpbnN0YWxsIGl0IGluIHRoZSBuZXcgbG9jYXRpb24uIFRoaXMKKyAqIG1lYW5zIHRoYXQgb25seSBleHRlcm5hbCB2ZWN0b3JzIChwZXJmX2ZvcHMsIHByY3RsKSBjYW4gcGVydHVyYiB0aGUgZXZlbnQKKyAqIHdoaWxlIGluIHRyYW5zaXQuIFRoZXJlZm9yZSBhbGwgc3VjaCBhY2Nlc3NvcnMgc2hvdWxkIGFsc28gYWNxdWlyZQorICogcGVyZl9ldmVudF9jb250ZXh0OjptdXRleCB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGlzLgorICoKKyAqIEhvd2V2ZXI7IGJlY2F1c2UgZXZlbnQtPmN0eCBjYW4gY2hhbmdlIHdoaWxlIHdlJ3JlIHdhaXRpbmcgdG8gYWNxdWlyZQorICogY3R4LT5tdXRleCB3ZSBtdXN0IGJlIGNhcmVmdWwgYW5kIHVzZSB0aGUgYmVsb3cgcGVyZl9ldmVudF9jdHhfbG9jaygpCisgKiBmdW5jdGlvbi4KKyAqCisgKiBMb2NrIG9yZGVyOgorICoJdGFza19zdHJ1Y3Q6OnBlcmZfZXZlbnRfbXV0ZXgKKyAqCSAgcGVyZl9ldmVudF9jb250ZXh0OjptdXRleAorICoJICAgIHBlcmZfZXZlbnRfY29udGV4dDo6bG9jaworICoJICAgIHBlcmZfZXZlbnQ6OmNoaWxkX211dGV4OworICoJICAgIHBlcmZfZXZlbnQ6Om1tYXBfbXV0ZXgKKyAqCSAgICBtbWFwX3NlbQorICovCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqCitwZXJmX2V2ZW50X2N0eF9sb2NrX25lc3RlZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCBuZXN0aW5nKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eDsKKworYWdhaW46CisJcmN1X3JlYWRfbG9jaygpOworCWN0eCA9IEFDQ0VTU19PTkNFKGV2ZW50LT5jdHgpOworCWlmICghYXRvbWljX2luY19ub3RfemVybygmY3R4LT5yZWZjb3VudCkpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCWdvdG8gYWdhaW47CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJbXV0ZXhfbG9ja19uZXN0ZWQoJmN0eC0+bXV0ZXgsIG5lc3RpbmcpOworCWlmIChldmVudC0+Y3R4ICE9IGN0eCkgeworCQltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOworCQlwdXRfY3R4KGN0eCk7CisJCWdvdG8gYWdhaW47CisJfQorCisJcmV0dXJuIGN0eDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICoKK3BlcmZfZXZlbnRfY3R4X2xvY2soc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBwZXJmX2V2ZW50X2N0eF9sb2NrX25lc3RlZChldmVudCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfY3R4X3VubG9jayhzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsCisJCQkJICBzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgpCit7CisJbXV0ZXhfdW5sb2NrKCZjdHgtPm11dGV4KTsKKwlwdXRfY3R4KGN0eCk7Cit9CisKKy8qCiAgKiBUaGlzIG11c3QgYmUgZG9uZSB1bmRlciB0aGUgY3R4LT5sb2NrLCBzdWNoIGFzIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0CiAgKiBjb250ZXh0X2VxdWl2KCksIHRoZXJlZm9yZSB3ZSBjYW5ub3QgY2FsbCBwdXRfY3R4KCkgc2luY2UgdGhhdCBtaWdodCBlbmQgdXAKICAqIGNhbGxpbmcgc2NoZWR1bGVyIHJlbGF0ZWQgbG9ja3MgYW5kIGN0eC0+bG9jayBuZXN0cyBpbnNpZGUgdGhvc2UuCkBAIC0xMTU1LDggKzEyNDMsNiBAQAogCQljdHgtPm5yX2JyYW5jaF9zdGFjaysrOwogCiAJbGlzdF9hZGRfcmN1KCZldmVudC0+ZXZlbnRfZW50cnksICZjdHgtPmV2ZW50X2xpc3QpOwotCWlmICghY3R4LT5ucl9ldmVudHMpCi0JCXBlcmZfcG11X3JvdGF0ZV9zdGFydChjdHgtPnBtdSk7CiAJY3R4LT5ucl9ldmVudHMrKzsKIAlpZiAoZXZlbnQtPmF0dHIuaW5oZXJpdF9zdGF0KQogCQljdHgtPm5yX3N0YXQrKzsKQEAgLTEyNzUsNiArMTM2MSw4IEBACiAJaWYgKGdyb3VwX2xlYWRlciA9PSBldmVudCkKIAkJcmV0dXJuOwogCisJV0FSTl9PTl9PTkNFKGdyb3VwX2xlYWRlci0+Y3R4ICE9IGV2ZW50LT5jdHgpOworCiAJaWYgKGdyb3VwX2xlYWRlci0+Z3JvdXBfZmxhZ3MgJiBQRVJGX0dST1VQX1NPRlRXQVJFICYmCiAJCQkhaXNfc29mdHdhcmVfZXZlbnQoZXZlbnQpKQogCQlncm91cF9sZWFkZXItPmdyb3VwX2ZsYWdzICY9IH5QRVJGX0dST1VQX1NPRlRXQVJFOwpAQCAtMTI5Niw2ICsxMzg0LDEwIEBACiBsaXN0X2RlbF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIHN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eCkKIHsKIAlzdHJ1Y3QgcGVyZl9jcHVfY29udGV4dCAqY3B1Y3R4OworCisJV0FSTl9PTl9PTkNFKGV2ZW50LT5jdHggIT0gY3R4KTsKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZjdHgtPmxvY2spOworCiAJLyoKIAkgKiBXZSBjYW4gaGF2ZSBkb3VibGUgZGV0YWNoIGR1ZSB0byBleGl0L2hvdC11bnBsdWcgKyBjbG9zZS4KIAkgKi8KQEAgLTEzODAsNiArMTQ3Miw4IEBACiAKIAkJLyogSW5oZXJpdCBncm91cCBmbGFncyBmcm9tIHRoZSBwcmV2aW91cyBsZWFkZXIgKi8KIAkJc2libGluZy0+Z3JvdXBfZmxhZ3MgPSBldmVudC0+Z3JvdXBfZmxhZ3M7CisKKwkJV0FSTl9PTl9PTkNFKHNpYmxpbmctPmN0eCAhPSBldmVudC0+Y3R4KTsKIAl9CiAKIG91dDoKQEAgLTE0NDIsNiArMTUzNiwxMCBAQAogewogCXU2NCB0c3RhbXAgPSBwZXJmX2V2ZW50X3RpbWUoZXZlbnQpOwogCXU2NCBkZWx0YTsKKworCVdBUk5fT05fT05DRShldmVudC0+Y3R4ICE9IGN0eCk7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmY3R4LT5sb2NrKTsKKwogCS8qCiAJICogQW4gZXZlbnQgd2hpY2ggY291bGQgbm90IGJlIGFjdGl2YXRlZCBiZWNhdXNlIG9mCiAJICogZmlsdGVyIG1pc21hdGNoIHN0aWxsIG5lZWRzIHRvIGhhdmUgaXRzIHRpbWluZ3MKQEAgLTE0NzEsNyArMTU2OSw4IEBACiAKIAlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSkKIAkJY3B1Y3R4LT5hY3RpdmVfb25jcHUtLTsKLQljdHgtPm5yX2FjdGl2ZS0tOworCWlmICghLS1jdHgtPm5yX2FjdGl2ZSkKKwkJcGVyZl9ldmVudF9jdHhfZGVhY3RpdmF0ZShjdHgpOwogCWlmIChldmVudC0+YXR0ci5mcmVxICYmIGV2ZW50LT5hdHRyLnNhbXBsZV9mcmVxKQogCQljdHgtPm5yX2ZyZXEtLTsKIAlpZiAoZXZlbnQtPmF0dHIuZXhjbHVzaXZlIHx8ICFjcHVjdHgtPmFjdGl2ZV9vbmNwdSkKQEAgLTE2NTQsNyArMTc1Myw3IEBACiAgKiBpcyB0aGUgY3VycmVudCBjb250ZXh0IG9uIHRoaXMgQ1BVIGFuZCBwcmVlbXB0aW9uIGlzIGRpc2FibGVkLAogICogaGVuY2Ugd2UgY2FuJ3QgZ2V0IGludG8gcGVyZl9ldmVudF90YXNrX3NjaGVkX291dCBmb3IgdGhpcyBjb250ZXh0LgogICovCi12b2lkIHBlcmZfZXZlbnRfZGlzYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCitzdGF0aWMgdm9pZCBfcGVyZl9ldmVudF9kaXNhYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBldmVudC0+Y3R4OwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGN0eC0+dGFzazsKQEAgLTE2OTUsNiArMTc5NCwxOSBAQAogCX0KIAlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwogfQorCisvKgorICogU3RyaWN0bHkgc3BlYWtpbmcga2VybmVsIHVzZXJzIGNhbm5vdCBjcmVhdGUgZ3JvdXBzIGFuZCB0aGVyZWZvcmUgdGhpcworICogaW50ZXJmYWNlIGRvZXMgbm90IG5lZWQgdGhlIHBlcmZfZXZlbnRfY3R4X2xvY2soKSBtYWdpYy4KKyAqLwordm9pZCBwZXJmX2V2ZW50X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eDsKKworCWN0eCA9IHBlcmZfZXZlbnRfY3R4X2xvY2soZXZlbnQpOworCV9wZXJmX2V2ZW50X2Rpc2FibGUoZXZlbnQpOworCXBlcmZfZXZlbnRfY3R4X3VubG9jayhldmVudCwgY3R4KTsKK30KIEVYUE9SVF9TWU1CT0xfR1BMKHBlcmZfZXZlbnRfZGlzYWJsZSk7CiAKIHN0YXRpYyB2b2lkIHBlcmZfc2V0X3NoYWRvd190aW1lKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwKQEAgLTE3ODIsNyArMTg5NCw4IEBACiAKIAlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGV2ZW50KSkKIAkJY3B1Y3R4LT5hY3RpdmVfb25jcHUrKzsKLQljdHgtPm5yX2FjdGl2ZSsrOworCWlmICghY3R4LT5ucl9hY3RpdmUrKykKKwkJcGVyZl9ldmVudF9jdHhfYWN0aXZhdGUoY3R4KTsKIAlpZiAoZXZlbnQtPmF0dHIuZnJlcSAmJiBldmVudC0+YXR0ci5zYW1wbGVfZnJlcSkKIAkJY3R4LT5ucl9mcmVxKys7CiAKQEAgLTIxNTgsNyArMjI3MSw3IEBACiAgKiBwZXJmX2V2ZW50X2Zvcl9lYWNoX2NoaWxkIG9yIHBlcmZfZXZlbnRfZm9yX2VhY2ggYXMgZGVzY3JpYmVkCiAgKiBmb3IgcGVyZl9ldmVudF9kaXNhYmxlLgogICovCi12b2lkIHBlcmZfZXZlbnRfZW5hYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3N0YXRpYyB2b2lkIF9wZXJmX2V2ZW50X2VuYWJsZShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gZXZlbnQtPmN0eDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBjdHgtPnRhc2s7CkBAIC0yMjE0LDkgKzIzMjcsMjEgQEAKIG91dDoKIAlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwogfQorCisvKgorICogU2VlIHBlcmZfZXZlbnRfZGlzYWJsZSgpOworICovCit2b2lkIHBlcmZfZXZlbnRfZW5hYmxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHg7CisKKwljdHggPSBwZXJmX2V2ZW50X2N0eF9sb2NrKGV2ZW50KTsKKwlfcGVyZl9ldmVudF9lbmFibGUoZXZlbnQpOworCXBlcmZfZXZlbnRfY3R4X3VubG9jayhldmVudCwgY3R4KTsKK30KIEVYUE9SVF9TWU1CT0xfR1BMKHBlcmZfZXZlbnRfZW5hYmxlKTsKIAotaW50IHBlcmZfZXZlbnRfcmVmcmVzaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCByZWZyZXNoKQorc3RhdGljIGludCBfcGVyZl9ldmVudF9yZWZyZXNoKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IHJlZnJlc2gpCiB7CiAJLyoKIAkgKiBub3Qgc3VwcG9ydGVkIG9uIGluaGVyaXRlZCBldmVudHMKQEAgLTIyMjUsMTAgKzIzNTAsMjUgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhdG9taWNfYWRkKHJlZnJlc2gsICZldmVudC0+ZXZlbnRfbGltaXQpOwotCXBlcmZfZXZlbnRfZW5hYmxlKGV2ZW50KTsKKwlfcGVyZl9ldmVudF9lbmFibGUoZXZlbnQpOwogCiAJcmV0dXJuIDA7CiB9CisKKy8qCisgKiBTZWUgcGVyZl9ldmVudF9kaXNhYmxlKCkKKyAqLworaW50IHBlcmZfZXZlbnRfcmVmcmVzaChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQsIGludCByZWZyZXNoKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eDsKKwlpbnQgcmV0OworCisJY3R4ID0gcGVyZl9ldmVudF9jdHhfbG9jayhldmVudCk7CisJcmV0ID0gX3BlcmZfZXZlbnRfcmVmcmVzaChldmVudCwgcmVmcmVzaCk7CisJcGVyZl9ldmVudF9jdHhfdW5sb2NrKGV2ZW50LCBjdHgpOworCisJcmV0dXJuIHJldDsKK30KIEVYUE9SVF9TWU1CT0xfR1BMKHBlcmZfZXZlbnRfcmVmcmVzaCk7CiAKIHN0YXRpYyB2b2lkIGN0eF9zY2hlZF9vdXQoc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LApAQCAtMjYxMiwxMiArMjc1Miw2IEBACiAKIAlwZXJmX3BtdV9lbmFibGUoY3R4LT5wbXUpOwogCXBlcmZfY3R4X3VubG9jayhjcHVjdHgsIGN0eCk7Ci0KLQkvKgotCSAqIFNpbmNlIHRoZXNlIHJvdGF0aW9ucyBhcmUgcGVyLWNwdSwgd2UgbmVlZCB0byBlbnN1cmUgdGhlCi0JICogY3B1LWNvbnRleHQgd2UgZ290IHNjaGVkdWxlZCBvbiBpcyBhY3R1YWxseSByb3RhdGluZy4KLQkgKi8KLQlwZXJmX3BtdV9yb3RhdGVfc3RhcnQoY3R4LT5wbXUpOwogfQogCiAvKgpAQCAtMjkwNSwyNSArMzAzOSwxOCBAQAogCQlsaXN0X3JvdGF0ZV9sZWZ0KCZjdHgtPmZsZXhpYmxlX2dyb3Vwcyk7CiB9CiAKLS8qCi0gKiBwZXJmX3BtdV9yb3RhdGVfc3RhcnQoKSBhbmQgcGVyZl9yb3RhdGVfY29udGV4dCgpIGFyZSBmdWxseSBzZXJpYWxpemVkCi0gKiBiZWNhdXNlIHRoZXkncmUgc3RyaWN0bHkgY3B1IGFmZmluZSBhbmQgcm90YXRlX3N0YXJ0IGlzIGNhbGxlZCB3aXRoIElSUXMKLSAqIGRpc2FibGVkLCB3aGlsZSByb3RhdGVfY29udGV4dCBpcyBjYWxsZWQgZnJvbSBJUlEgY29udGV4dC4KLSAqLwogc3RhdGljIGludCBwZXJmX3JvdGF0ZV9jb250ZXh0KHN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgpCiB7CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gTlVMTDsKLQlpbnQgcm90YXRlID0gMCwgcmVtb3ZlID0gMTsKKwlpbnQgcm90YXRlID0gMDsKIAogCWlmIChjcHVjdHgtPmN0eC5ucl9ldmVudHMpIHsKLQkJcmVtb3ZlID0gMDsKIAkJaWYgKGNwdWN0eC0+Y3R4Lm5yX2V2ZW50cyAhPSBjcHVjdHgtPmN0eC5ucl9hY3RpdmUpCiAJCQlyb3RhdGUgPSAxOwogCX0KIAogCWN0eCA9IGNwdWN0eC0+dGFza19jdHg7CiAJaWYgKGN0eCAmJiBjdHgtPm5yX2V2ZW50cykgewotCQlyZW1vdmUgPSAwOwogCQlpZiAoY3R4LT5ucl9ldmVudHMgIT0gY3R4LT5ucl9hY3RpdmUpCiAJCQlyb3RhdGUgPSAxOwogCX0KQEAgLTI5NDcsOCArMzA3NCw2IEBACiAJcGVyZl9wbXVfZW5hYmxlKGNwdWN0eC0+Y3R4LnBtdSk7CiAJcGVyZl9jdHhfdW5sb2NrKGNwdWN0eCwgY3B1Y3R4LT50YXNrX2N0eCk7CiBkb25lOgotCWlmIChyZW1vdmUpCi0JCWxpc3RfZGVsX2luaXQoJmNwdWN0eC0+cm90YXRpb25fbGlzdCk7CiAKIAlyZXR1cm4gcm90YXRlOwogfQpAQCAtMjk2Niw5ICszMDkxLDggQEAKIAogdm9pZCBwZXJmX2V2ZW50X3Rhc2tfdGljayh2b2lkKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSB0aGlzX2NwdV9wdHIoJnJvdGF0aW9uX2xpc3QpOwotCXN0cnVjdCBwZXJmX2NwdV9jb250ZXh0ICpjcHVjdHgsICp0bXA7Ci0Jc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSB0aGlzX2NwdV9wdHIoJmFjdGl2ZV9jdHhfbGlzdCk7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4LCAqdG1wOwogCWludCB0aHJvdHRsZWQ7CiAKIAlXQVJOX09OKCFpcnFzX2Rpc2FibGVkKCkpOwpAQCAtMjk3NiwxNCArMzEwMCw4IEBACiAJX190aGlzX2NwdV9pbmMocGVyZl90aHJvdHRsZWRfc2VxKTsKIAl0aHJvdHRsZWQgPSBfX3RoaXNfY3B1X3hjaGcocGVyZl90aHJvdHRsZWRfY291bnQsIDApOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNwdWN0eCwgdG1wLCBoZWFkLCByb3RhdGlvbl9saXN0KSB7Ci0JCWN0eCA9ICZjcHVjdHgtPmN0eDsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3R4LCB0bXAsIGhlYWQsIGFjdGl2ZV9jdHhfbGlzdCkKIAkJcGVyZl9hZGp1c3RfZnJlcV91bnRocl9jb250ZXh0KGN0eCwgdGhyb3R0bGVkKTsKLQotCQljdHggPSBjcHVjdHgtPnRhc2tfY3R4OwotCQlpZiAoY3R4KQotCQkJcGVyZl9hZGp1c3RfZnJlcV91bnRocl9jb250ZXh0KGN0eCwgdGhyb3R0bGVkKTsKLQl9CiB9CiAKIHN0YXRpYyBpbnQgZXZlbnRfZW5hYmxlX29uX2V4ZWMoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LApAQCAtMzE0Miw2ICszMjYwLDcgQEAKIHsKIAlyYXdfc3Bpbl9sb2NrX2luaXQoJmN0eC0+bG9jayk7CiAJbXV0ZXhfaW5pdCgmY3R4LT5tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmN0eC0+YWN0aXZlX2N0eF9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmY3R4LT5waW5uZWRfZ3JvdXBzKTsKIAlJTklUX0xJU1RfSEVBRCgmY3R4LT5mbGV4aWJsZV9ncm91cHMpOwogCUlOSVRfTElTVF9IRUFEKCZjdHgtPmV2ZW50X2xpc3QpOwpAQCAtMzQyMSw3ICszNTQwLDE2IEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAob3duZXIpIHsKLQkJbXV0ZXhfbG9jaygmb3duZXItPnBlcmZfZXZlbnRfbXV0ZXgpOworCQkvKgorCQkgKiBJZiB3ZSdyZSBoZXJlIHRocm91Z2ggcGVyZl9ldmVudF9leGl0X3Rhc2soKSB3ZSdyZSBhbHJlYWR5CisJCSAqIGhvbGRpbmcgY3R4LT5tdXRleCB3aGljaCB3b3VsZCBiZSBhbiBpbnZlcnNpb24gd3J0LiB0aGUKKwkJICogbm9ybWFsIGxvY2sgb3JkZXIuCisJCSAqCisJCSAqIEhvd2V2ZXIgd2UgY2FuIHNhZmVseSB0YWtlIHRoaXMgbG9jayBiZWNhdXNlIGl0cyB0aGUgY2hpbGQKKwkJICogY3R4LT5tdXRleC4KKwkJICovCisJCW11dGV4X2xvY2tfbmVzdGVkKCZvd25lci0+cGVyZl9ldmVudF9tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCiAJCS8qCiAJCSAqIFdlIGhhdmUgdG8gcmUtY2hlY2sgdGhlIGV2ZW50LT5vd25lciBmaWVsZCwgaWYgaXQgaXMgY2xlYXJlZAogCQkgKiB3ZSByYWNlZCB3aXRoIHBlcmZfZXZlbnRfZXhpdF90YXNrKCksIGFjcXVpcmluZyB0aGUgbXV0ZXgKQEAgLTM0NDAsNyArMzU2OCw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHB1dF9ldmVudChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7Ci0Jc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gZXZlbnQtPmN0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHg7CiAKIAlpZiAoIWF0b21pY19sb25nX2RlY19hbmRfdGVzdCgmZXZlbnQtPnJlZmNvdW50KSkKIAkJcmV0dXJuOwpAQCAtMzQ0OCw3ICszNTc2LDYgQEAKIAlpZiAoIWlzX2tlcm5lbF9ldmVudChldmVudCkpCiAJCXBlcmZfcmVtb3ZlX2Zyb21fb3duZXIoZXZlbnQpOwogCi0JV0FSTl9PTl9PTkNFKGN0eC0+cGFyZW50X2N0eCk7CiAJLyoKIAkgKiBUaGVyZSBhcmUgdHdvIHdheXMgdGhpcyBhbm5vdGF0aW9uIGlzIHVzZWZ1bDoKIAkgKgpAQCAtMzQ2MSw3ICszNTg4LDggQEAKIAkgKiAgICAgdGhlIGxhc3QgZmlsZWRlc2MgZGllZCwgc28gdGhlcmUgaXMgbm8gcG9zc2liaWxpdHkKIAkgKiAgICAgdG8gdHJpZ2dlciB0aGUgQUItQkEgY2FzZS4KIAkgKi8KLQltdXRleF9sb2NrX25lc3RlZCgmY3R4LT5tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCWN0eCA9IHBlcmZfZXZlbnRfY3R4X2xvY2tfbmVzdGVkKGV2ZW50LCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJV0FSTl9PTl9PTkNFKGN0eC0+cGFyZW50X2N0eCk7CiAJcGVyZl9yZW1vdmVfZnJvbV9jb250ZXh0KGV2ZW50LCB0cnVlKTsKIAltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOwogCkBAIC0zNTQ3LDEyICszNjc1LDEzIEBACiAJCQkJICAgdTY0IHJlYWRfZm9ybWF0LCBjaGFyIF9fdXNlciAqYnVmKQogewogCXN0cnVjdCBwZXJmX2V2ZW50ICpsZWFkZXIgPSBldmVudC0+Z3JvdXBfbGVhZGVyLCAqc3ViOwotCWludCBuID0gMCwgc2l6ZSA9IDAsIHJldCA9IC1FRkFVTFQ7CiAJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4ID0gbGVhZGVyLT5jdHg7Ci0JdTY0IHZhbHVlc1s1XTsKKwlpbnQgbiA9IDAsIHNpemUgPSAwLCByZXQ7CiAJdTY0IGNvdW50LCBlbmFibGVkLCBydW5uaW5nOworCXU2NCB2YWx1ZXNbNV07CiAKLQltdXRleF9sb2NrKCZjdHgtPm11dGV4KTsKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZjdHgtPm11dGV4KTsKKwogCWNvdW50ID0gcGVyZl9ldmVudF9yZWFkX3ZhbHVlKGxlYWRlciwgJmVuYWJsZWQsICZydW5uaW5nKTsKIAogCXZhbHVlc1tuKytdID0gMSArIGxlYWRlci0+bnJfc2libGluZ3M7CkBAIC0zNTY3LDcgKzM2OTYsNyBAQAogCXNpemUgPSBuICogc2l6ZW9mKHU2NCk7CiAKIAlpZiAoY29weV90b191c2VyKGJ1ZiwgdmFsdWVzLCBzaXplKSkKLQkJZ290byB1bmxvY2s7CisJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0ID0gc2l6ZTsKIApAQCAtMzU4MSwxNCArMzcxMCwxMSBAQAogCQlzaXplID0gbiAqIHNpemVvZih1NjQpOwogCiAJCWlmIChjb3B5X3RvX3VzZXIoYnVmICsgcmV0LCB2YWx1ZXMsIHNpemUpKSB7Ci0JCQlyZXQgPSAtRUZBVUxUOwotCQkJZ290byB1bmxvY2s7CisJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCiAJCXJldCArPSBzaXplOwogCX0KLXVubG9jazoKLQltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTM2NjAsOCArMzc4NiwxNCBAQAogcGVyZl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHBlcmZfZXZlbnRfY29udGV4dCAqY3R4OworCWludCByZXQ7CiAKLQlyZXR1cm4gcGVyZl9yZWFkX2h3KGV2ZW50LCBidWYsIGNvdW50KTsKKwljdHggPSBwZXJmX2V2ZW50X2N0eF9sb2NrKGV2ZW50KTsKKwlyZXQgPSBwZXJmX3JlYWRfaHcoZXZlbnQsIGJ1ZiwgY291bnQpOworCXBlcmZfZXZlbnRfY3R4X3VubG9jayhldmVudCwgY3R4KTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGVyZl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQpAQCAtMzY4Nyw3ICszODE5LDcgQEAKIAlyZXR1cm4gZXZlbnRzOwogfQogCi1zdGF0aWMgdm9pZCBwZXJmX2V2ZW50X3Jlc2V0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3N0YXRpYyB2b2lkIF9wZXJmX2V2ZW50X3Jlc2V0KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAkodm9pZClwZXJmX2V2ZW50X3JlYWQoZXZlbnQpOwogCWxvY2FsNjRfc2V0KCZldmVudC0+Y291bnQsIDApOwpAQCAtMzcwNiw2ICszODM4LDcgQEAKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqY2hpbGQ7CiAKIAlXQVJOX09OX09OQ0UoZXZlbnQtPmN0eC0+cGFyZW50X2N0eCk7CisKIAltdXRleF9sb2NrKCZldmVudC0+Y2hpbGRfbXV0ZXgpOwogCWZ1bmMoZXZlbnQpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZldmVudC0+Y2hpbGRfbGlzdCwgY2hpbGRfbGlzdCkKQEAgLTM3MTksMTQgKzM4NTIsMTMgQEAKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBldmVudC0+Y3R4OwogCXN0cnVjdCBwZXJmX2V2ZW50ICpzaWJsaW5nOwogCi0JV0FSTl9PTl9PTkNFKGN0eC0+cGFyZW50X2N0eCk7Ci0JbXV0ZXhfbG9jaygmY3R4LT5tdXRleCk7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmY3R4LT5tdXRleCk7CisKIAlldmVudCA9IGV2ZW50LT5ncm91cF9sZWFkZXI7CiAKIAlwZXJmX2V2ZW50X2Zvcl9lYWNoX2NoaWxkKGV2ZW50LCBmdW5jKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNpYmxpbmcsICZldmVudC0+c2libGluZ19saXN0LCBncm91cF9lbnRyeSkKIAkJcGVyZl9ldmVudF9mb3JfZWFjaF9jaGlsZChzaWJsaW5nLCBmdW5jKTsKLQltdXRleF91bmxvY2soJmN0eC0+bXV0ZXgpOwogfQogCiBzdGF0aWMgaW50IHBlcmZfZXZlbnRfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IF9fdXNlciAqYXJnKQpAQCAtMzc5NiwyNSArMzkyOCwyNCBAQAogCQkJCSBzdHJ1Y3QgcGVyZl9ldmVudCAqb3V0cHV0X2V2ZW50KTsKIHN0YXRpYyBpbnQgcGVyZl9ldmVudF9zZXRfZmlsdGVyKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdm9pZCBfX3VzZXIgKmFyZyk7CiAKLXN0YXRpYyBsb25nIHBlcmZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGxvbmcgX3BlcmZfaW9jdGwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJdm9pZCAoKmZ1bmMpKHN0cnVjdCBwZXJmX2V2ZW50ICopOwogCXUzMiBmbGFncyA9IGFyZzsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBQRVJGX0VWRU5UX0lPQ19FTkFCTEU6Ci0JCWZ1bmMgPSBwZXJmX2V2ZW50X2VuYWJsZTsKKwkJZnVuYyA9IF9wZXJmX2V2ZW50X2VuYWJsZTsKIAkJYnJlYWs7CiAJY2FzZSBQRVJGX0VWRU5UX0lPQ19ESVNBQkxFOgotCQlmdW5jID0gcGVyZl9ldmVudF9kaXNhYmxlOworCQlmdW5jID0gX3BlcmZfZXZlbnRfZGlzYWJsZTsKIAkJYnJlYWs7CiAJY2FzZSBQRVJGX0VWRU5UX0lPQ19SRVNFVDoKLQkJZnVuYyA9IHBlcmZfZXZlbnRfcmVzZXQ7CisJCWZ1bmMgPSBfcGVyZl9ldmVudF9yZXNldDsKIAkJYnJlYWs7CiAKIAljYXNlIFBFUkZfRVZFTlRfSU9DX1JFRlJFU0g6Ci0JCXJldHVybiBwZXJmX2V2ZW50X3JlZnJlc2goZXZlbnQsIGFyZyk7CisJCXJldHVybiBfcGVyZl9ldmVudF9yZWZyZXNoKGV2ZW50LCBhcmcpOwogCiAJY2FzZSBQRVJGX0VWRU5UX0lPQ19QRVJJT0Q6CiAJCXJldHVybiBwZXJmX2V2ZW50X3BlcmlvZChldmVudCwgKHU2NCBfX3VzZXIgKilhcmcpOwpAQCAtMzg2MSw2ICszOTkyLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBsb25nIHBlcmZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHg7CisJbG9uZyByZXQ7CisKKwljdHggPSBwZXJmX2V2ZW50X2N0eF9sb2NrKGV2ZW50KTsKKwlyZXQgPSBfcGVyZl9pb2N0bChldmVudCwgY21kLCBhcmcpOworCXBlcmZfZXZlbnRfY3R4X3VubG9jayhldmVudCwgY3R4KTsKKworCXJldHVybiByZXQ7Cit9CisKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBzdGF0aWMgbG9uZyBwZXJmX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJCQl1bnNpZ25lZCBsb25nIGFyZykKQEAgLTM4ODMsMTEgKzQwMjcsMTUgQEAKIAogaW50IHBlcmZfZXZlbnRfdGFza19lbmFibGUodm9pZCkKIHsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHg7CiAJc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50OwogCiAJbXV0ZXhfbG9jaygmY3VycmVudC0+cGVyZl9ldmVudF9tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShldmVudCwgJmN1cnJlbnQtPnBlcmZfZXZlbnRfbGlzdCwgb3duZXJfZW50cnkpCi0JCXBlcmZfZXZlbnRfZm9yX2VhY2hfY2hpbGQoZXZlbnQsIHBlcmZfZXZlbnRfZW5hYmxlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3VycmVudC0+cGVyZl9ldmVudF9saXN0LCBvd25lcl9lbnRyeSkgeworCQljdHggPSBwZXJmX2V2ZW50X2N0eF9sb2NrKGV2ZW50KTsKKwkJcGVyZl9ldmVudF9mb3JfZWFjaF9jaGlsZChldmVudCwgX3BlcmZfZXZlbnRfZW5hYmxlKTsKKwkJcGVyZl9ldmVudF9jdHhfdW5sb2NrKGV2ZW50LCBjdHgpOworCX0KIAltdXRleF91bmxvY2soJmN1cnJlbnQtPnBlcmZfZXZlbnRfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC0zODk1LDExICs0MDQzLDE1IEBACiAKIGludCBwZXJmX2V2ZW50X3Rhc2tfZGlzYWJsZSh2b2lkKQogeworCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eDsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CiAKIAltdXRleF9sb2NrKCZjdXJyZW50LT5wZXJmX2V2ZW50X211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3VycmVudC0+cGVyZl9ldmVudF9saXN0LCBvd25lcl9lbnRyeSkKLQkJcGVyZl9ldmVudF9mb3JfZWFjaF9jaGlsZChldmVudCwgcGVyZl9ldmVudF9kaXNhYmxlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmY3VycmVudC0+cGVyZl9ldmVudF9saXN0LCBvd25lcl9lbnRyeSkgeworCQljdHggPSBwZXJmX2V2ZW50X2N0eF9sb2NrKGV2ZW50KTsKKwkJcGVyZl9ldmVudF9mb3JfZWFjaF9jaGlsZChldmVudCwgX3BlcmZfZXZlbnRfZGlzYWJsZSk7CisJCXBlcmZfZXZlbnRfY3R4X3VubG9jayhldmVudCwgY3R4KTsKKwl9CiAJbXV0ZXhfdW5sb2NrKCZjdXJyZW50LT5wZXJmX2V2ZW50X211dGV4KTsKIAogCXJldHVybiAwOwpAQCAtNTg4OSw2ICs2MDQxLDggQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAorREVGSU5FX1BFUl9DUFUoc3RydWN0IHB0X3JlZ3MsIF9fcGVyZl9yZWdzWzRdKTsKKwogaW50IHBlcmZfc3dldmVudF9nZXRfcmVjdXJzaW9uX2NvbnRleHQodm9pZCkKIHsKIAlzdHJ1Y3Qgc3dldmVudF9odGFibGUgKnN3aGFzaCA9IHRoaXNfY3B1X3B0cigmc3dldmVudF9odGFibGUpOwpAQCAtNTkwNCwyMSArNjA1OCwzMCBAQAogCXB1dF9yZWN1cnNpb25fY29udGV4dChzd2hhc2gtPnJlY3Vyc2lvbiwgcmN0eCk7CiB9CiAKLXZvaWQgX19wZXJmX3N3X2V2ZW50KHUzMiBldmVudF9pZCwgdTY0IG5yLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTY0IGFkZHIpCit2b2lkIF9fX3BlcmZfc3dfZXZlbnQodTMyIGV2ZW50X2lkLCB1NjQgbnIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1NjQgYWRkcikKIHsKIAlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhOworCisJaWYgKFdBUk5fT05fT05DRSghcmVncykpCisJCXJldHVybjsKKworCXBlcmZfc2FtcGxlX2RhdGFfaW5pdCgmZGF0YSwgYWRkciwgMCk7CisJZG9fcGVyZl9zd19ldmVudChQRVJGX1RZUEVfU09GVFdBUkUsIGV2ZW50X2lkLCBuciwgJmRhdGEsIHJlZ3MpOworfQorCit2b2lkIF9fcGVyZl9zd19ldmVudCh1MzIgZXZlbnRfaWQsIHU2NCBuciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHU2NCBhZGRyKQorewogCWludCByY3R4OwogCiAJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKIAlyY3R4ID0gcGVyZl9zd2V2ZW50X2dldF9yZWN1cnNpb25fY29udGV4dCgpOwotCWlmIChyY3R4IDwgMCkKLQkJcmV0dXJuOworCWlmICh1bmxpa2VseShyY3R4IDwgMCkpCisJCWdvdG8gZmFpbDsKIAotCXBlcmZfc2FtcGxlX2RhdGFfaW5pdCgmZGF0YSwgYWRkciwgMCk7Ci0KLQlkb19wZXJmX3N3X2V2ZW50KFBFUkZfVFlQRV9TT0ZUV0FSRSwgZXZlbnRfaWQsIG5yLCAmZGF0YSwgcmVncyk7CisJX19fcGVyZl9zd19ldmVudChldmVudF9pZCwgbnIsIHJlZ3MsIGFkZHIpOwogCiAJcGVyZl9zd2V2ZW50X3B1dF9yZWN1cnNpb25fY29udGV4dChyY3R4KTsKK2ZhaWw6CiAJcHJlZW1wdF9lbmFibGVfbm90cmFjZSgpOwogfQogCkBAIC02Nzc2LDEyICs2OTM5LDEwIEBACiAJCV9fcGVyZl9ldmVudF9pbml0X2NvbnRleHQoJmNwdWN0eC0+Y3R4KTsKIAkJbG9ja2RlcF9zZXRfY2xhc3MoJmNwdWN0eC0+Y3R4Lm11dGV4LCAmY3B1Y3R4X211dGV4KTsKIAkJbG9ja2RlcF9zZXRfY2xhc3MoJmNwdWN0eC0+Y3R4LmxvY2ssICZjcHVjdHhfbG9jayk7Ci0JCWNwdWN0eC0+Y3R4LnR5cGUgPSBjcHVfY29udGV4dDsKIAkJY3B1Y3R4LT5jdHgucG11ID0gcG11OwogCiAJCV9fcGVyZl9jcHVfaHJ0aW1lcl9pbml0KGNwdWN0eCwgY3B1KTsKIAotCQlJTklUX0xJU1RfSEVBRCgmY3B1Y3R4LT5yb3RhdGlvbl9saXN0KTsKIAkJY3B1Y3R4LT51bmlxdWVfcG11ID0gcG11OwogCX0KIApAQCAtNjg1NCw2ICs3MDE1LDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwZXJmX3BtdV91bnJlZ2lzdGVyKTsKIAorc3RhdGljIGludCBwZXJmX3RyeV9pbml0X2V2ZW50KHN0cnVjdCBwbXUgKnBtdSwgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCWludCByZXQ7CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHBtdS0+bW9kdWxlKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZXZlbnQtPnBtdSA9IHBtdTsKKwlyZXQgPSBwbXUtPmV2ZW50X2luaXQoZXZlbnQpOworCWlmIChyZXQpCisJCW1vZHVsZV9wdXQocG11LT5tb2R1bGUpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RydWN0IHBtdSAqcGVyZl9pbml0X2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzdHJ1Y3QgcG11ICpwbXUgPSBOVUxMOwpAQCAtNjg2NiwyNCArNzA0MSwxNCBAQAogCXBtdSA9IGlkcl9maW5kKCZwbXVfaWRyLCBldmVudC0+YXR0ci50eXBlKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlpZiAocG11KSB7Ci0JCWlmICghdHJ5X21vZHVsZV9nZXQocG11LT5tb2R1bGUpKSB7Ci0JCQlwbXUgPSBFUlJfUFRSKC1FTk9ERVYpOwotCQkJZ290byB1bmxvY2s7Ci0JCX0KLQkJZXZlbnQtPnBtdSA9IHBtdTsKLQkJcmV0ID0gcG11LT5ldmVudF9pbml0KGV2ZW50KTsKKwkJcmV0ID0gcGVyZl90cnlfaW5pdF9ldmVudChwbXUsIGV2ZW50KTsKIAkJaWYgKHJldCkKIAkJCXBtdSA9IEVSUl9QVFIocmV0KTsKIAkJZ290byB1bmxvY2s7CiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG11LCAmcG11cywgZW50cnkpIHsKLQkJaWYgKCF0cnlfbW9kdWxlX2dldChwbXUtPm1vZHVsZSkpIHsKLQkJCXBtdSA9IEVSUl9QVFIoLUVOT0RFVik7Ci0JCQlnb3RvIHVubG9jazsKLQkJfQotCQlldmVudC0+cG11ID0gcG11OwotCQlyZXQgPSBwbXUtPmV2ZW50X2luaXQoZXZlbnQpOworCQlyZXQgPSBwZXJmX3RyeV9pbml0X2V2ZW50KHBtdSwgZXZlbnQpOwogCQlpZiAoIXJldCkKIAkJCWdvdG8gdW5sb2NrOwogCkBAIC03MjQ3LDYgKzc0MTIsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBtdXRleF9sb2NrX2RvdWJsZShzdHJ1Y3QgbXV0ZXggKmEsIHN0cnVjdCBtdXRleCAqYikKK3sKKwlpZiAoYiA8IGEpCisJCXN3YXAoYSwgYik7CisKKwltdXRleF9sb2NrKGEpOworCW11dGV4X2xvY2tfbmVzdGVkKGIsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKK30KKwogLyoqCiAgKiBzeXNfcGVyZl9ldmVudF9vcGVuIC0gb3BlbiBhIHBlcmZvcm1hbmNlIGV2ZW50LCBhc3NvY2lhdGUgaXQgdG8gYSB0YXNrL2NwdQogICoKQEAgLTcyNjIsNyArNzQzNiw3IEBACiAJc3RydWN0IHBlcmZfZXZlbnQgKmdyb3VwX2xlYWRlciA9IE5VTEwsICpvdXRwdXRfZXZlbnQgPSBOVUxMOwogCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgKnNpYmxpbmc7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOwotCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmN0eDsKKwlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHgsICp1bmluaXRpYWxpemVkX3ZhcihnY3R4KTsKIAlzdHJ1Y3QgZmlsZSAqZXZlbnRfZmlsZSA9IE5VTEw7CiAJc3RydWN0IGZkIGdyb3VwID0ge05VTEwsIDB9OwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IE5VTEw7CkBAIC03NDIwLDcgKzc1OTQsMTkgQEAKIAkJICogdGFzayBvciBDUFUgY29udGV4dDoKIAkJICovCiAJCWlmIChtb3ZlX2dyb3VwKSB7Ci0JCQlpZiAoZ3JvdXBfbGVhZGVyLT5jdHgtPnR5cGUgIT0gY3R4LT50eXBlKQorCQkJLyoKKwkJCSAqIE1ha2Ugc3VyZSB3ZSdyZSBib3RoIG9uIHRoZSBzYW1lIHRhc2ssIG9yIGJvdGgKKwkJCSAqIHBlci1jcHUgZXZlbnRzLgorCQkJICovCisJCQlpZiAoZ3JvdXBfbGVhZGVyLT5jdHgtPnRhc2sgIT0gY3R4LT50YXNrKQorCQkJCWdvdG8gZXJyX2NvbnRleHQ7CisKKwkJCS8qCisJCQkgKiBNYWtlIHN1cmUgd2UncmUgYm90aCBldmVudHMgZm9yIHRoZSBzYW1lIENQVTsKKwkJCSAqIGdyb3VwaW5nIGV2ZW50cyBmb3IgZGlmZmVyZW50IENQVXMgaXMgYnJva2VuOyBzaW5jZQorCQkJICogeW91IGNhbiBuZXZlciBjb25jdXJyZW50bHkgc2NoZWR1bGUgdGhlbSBhbnlob3cuCisJCQkgKi8KKwkJCWlmIChncm91cF9sZWFkZXItPmNwdSAhPSBldmVudC0+Y3B1KQogCQkJCWdvdG8gZXJyX2NvbnRleHQ7CiAJCX0gZWxzZSB7CiAJCQlpZiAoZ3JvdXBfbGVhZGVyLT5jdHggIT0gY3R4KQpAQCAtNzQ0OCw0MyArNzYzNCw2OCBAQAogCX0KIAogCWlmIChtb3ZlX2dyb3VwKSB7Ci0JCXN0cnVjdCBwZXJmX2V2ZW50X2NvbnRleHQgKmdjdHggPSBncm91cF9sZWFkZXItPmN0eDsKKwkJZ2N0eCA9IGdyb3VwX2xlYWRlci0+Y3R4OwogCi0JCW11dGV4X2xvY2soJmdjdHgtPm11dGV4KTsKKwkJLyoKKwkJICogU2VlIHBlcmZfZXZlbnRfY3R4X2xvY2soKSBmb3IgY29tbWVudHMgb24gdGhlIGRldGFpbHMKKwkJICogb2Ygc3dpenpsaW5nIHBlcmZfZXZlbnQ6OmN0eC4KKwkJICovCisJCW11dGV4X2xvY2tfZG91YmxlKCZnY3R4LT5tdXRleCwgJmN0eC0+bXV0ZXgpOworCiAJCXBlcmZfcmVtb3ZlX2Zyb21fY29udGV4dChncm91cF9sZWFkZXIsIGZhbHNlKTsKIAorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNpYmxpbmcsICZncm91cF9sZWFkZXItPnNpYmxpbmdfbGlzdCwKKwkJCQkgICAgZ3JvdXBfZW50cnkpIHsKKwkJCXBlcmZfcmVtb3ZlX2Zyb21fY29udGV4dChzaWJsaW5nLCBmYWxzZSk7CisJCQlwdXRfY3R4KGdjdHgpOworCQl9CisJfSBlbHNlIHsKKwkJbXV0ZXhfbG9jaygmY3R4LT5tdXRleCk7CisJfQorCisJV0FSTl9PTl9PTkNFKGN0eC0+cGFyZW50X2N0eCk7CisKKwlpZiAobW92ZV9ncm91cCkgeworCQkvKgorCQkgKiBXYWl0IGZvciBldmVyeWJvZHkgdG8gc3RvcCByZWZlcmVuY2luZyB0aGUgZXZlbnRzIHRocm91Z2gKKwkJICogdGhlIG9sZCBsaXN0cywgYmVmb3JlIGluc3RhbGxpbmcgaXQgb24gbmV3IGxpc3RzLgorCQkgKi8KKwkJc3luY2hyb25pemVfcmN1KCk7CisKKwkJLyoKKwkJICogSW5zdGFsbCB0aGUgZ3JvdXAgc2libGluZ3MgYmVmb3JlIHRoZSBncm91cCBsZWFkZXIuCisJCSAqCisJCSAqIEJlY2F1c2UgYSBncm91cCBsZWFkZXIgd2lsbCB0cnkgYW5kIGluc3RhbGwgdGhlIGVudGlyZSBncm91cAorCQkgKiAodGhyb3VnaCB0aGUgc2libGluZyBsaXN0LCB3aGljaCBpcyBzdGlsbCBpbi10YWN0KSwgd2UgY2FuCisJCSAqIGVuZCB1cCB3aXRoIHNpYmxpbmdzIGluc3RhbGxlZCBpbiB0aGUgd3JvbmcgY29udGV4dC4KKwkJICoKKwkJICogQnkgaW5zdGFsbGluZyBzaWJsaW5ncyBmaXJzdCB3ZSBOTy1PUCBiZWNhdXNlIHRoZXkncmUgbm90CisJCSAqIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBncm91cCBsaXN0cy4KKwkJICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc2libGluZywgJmdyb3VwX2xlYWRlci0+c2libGluZ19saXN0LAorCQkJCSAgICBncm91cF9lbnRyeSkgeworCQkJcGVyZl9ldmVudF9fc3RhdGVfaW5pdChzaWJsaW5nKTsKKwkJCXBlcmZfaW5zdGFsbF9pbl9jb250ZXh0KGN0eCwgc2libGluZywgc2libGluZy0+Y3B1KTsKKwkJCWdldF9jdHgoY3R4KTsKKwkJfQorCiAJCS8qCiAJCSAqIFJlbW92aW5nIGZyb20gdGhlIGNvbnRleHQgZW5kcyB1cCB3aXRoIGRpc2FibGVkCiAJCSAqIGV2ZW50LiBXaGF0IHdlIHdhbnQgaGVyZSBpcyBldmVudCBpbiB0aGUgaW5pdGlhbAogCQkgKiBzdGFydHVwIHN0YXRlLCByZWFkeSB0byBiZSBhZGQgaW50byBuZXcgY29udGV4dC4KIAkJICovCiAJCXBlcmZfZXZlbnRfX3N0YXRlX2luaXQoZ3JvdXBfbGVhZGVyKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzaWJsaW5nLCAmZ3JvdXBfbGVhZGVyLT5zaWJsaW5nX2xpc3QsCi0JCQkJICAgIGdyb3VwX2VudHJ5KSB7Ci0JCQlwZXJmX3JlbW92ZV9mcm9tX2NvbnRleHQoc2libGluZywgZmFsc2UpOwotCQkJcGVyZl9ldmVudF9fc3RhdGVfaW5pdChzaWJsaW5nKTsKLQkJCXB1dF9jdHgoZ2N0eCk7Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZnY3R4LT5tdXRleCk7Ci0JCXB1dF9jdHgoZ2N0eCk7Ci0JfQotCi0JV0FSTl9PTl9PTkNFKGN0eC0+cGFyZW50X2N0eCk7Ci0JbXV0ZXhfbG9jaygmY3R4LT5tdXRleCk7Ci0KLQlpZiAobW92ZV9ncm91cCkgewotCQlzeW5jaHJvbml6ZV9yY3UoKTsKIAkJcGVyZl9pbnN0YWxsX2luX2NvbnRleHQoY3R4LCBncm91cF9sZWFkZXIsIGdyb3VwX2xlYWRlci0+Y3B1KTsKIAkJZ2V0X2N0eChjdHgpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNpYmxpbmcsICZncm91cF9sZWFkZXItPnNpYmxpbmdfbGlzdCwKLQkJCQkgICAgZ3JvdXBfZW50cnkpIHsKLQkJCXBlcmZfaW5zdGFsbF9pbl9jb250ZXh0KGN0eCwgc2libGluZywgc2libGluZy0+Y3B1KTsKLQkJCWdldF9jdHgoY3R4KTsKLQkJfQogCX0KIAogCXBlcmZfaW5zdGFsbF9pbl9jb250ZXh0KGN0eCwgZXZlbnQsIGV2ZW50LT5jcHUpOwogCXBlcmZfdW5waW5fY29udGV4dChjdHgpOworCisJaWYgKG1vdmVfZ3JvdXApIHsKKwkJbXV0ZXhfdW5sb2NrKCZnY3R4LT5tdXRleCk7CisJCXB1dF9jdHgoZ2N0eCk7CisJfQogCW11dGV4X3VubG9jaygmY3R4LT5tdXRleCk7CiAKIAlwdXRfb25saW5lX2NwdXMoKTsKQEAgLTc1OTIsNyArNzgwMywxMSBAQAogCXNyY19jdHggPSAmcGVyX2NwdV9wdHIocG11LT5wbXVfY3B1X2NvbnRleHQsIHNyY19jcHUpLT5jdHg7CiAJZHN0X2N0eCA9ICZwZXJfY3B1X3B0cihwbXUtPnBtdV9jcHVfY29udGV4dCwgZHN0X2NwdSktPmN0eDsKIAotCW11dGV4X2xvY2soJnNyY19jdHgtPm11dGV4KTsKKwkvKgorCSAqIFNlZSBwZXJmX2V2ZW50X2N0eF9sb2NrKCkgZm9yIGNvbW1lbnRzIG9uIHRoZSBkZXRhaWxzCisJICogb2Ygc3dpenpsaW5nIHBlcmZfZXZlbnQ6OmN0eC4KKwkgKi8KKwltdXRleF9sb2NrX2RvdWJsZSgmc3JjX2N0eC0+bXV0ZXgsICZkc3RfY3R4LT5tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZzcmNfY3R4LT5ldmVudF9saXN0LAogCQkJCSBldmVudF9lbnRyeSkgewogCQlwZXJmX3JlbW92ZV9mcm9tX2NvbnRleHQoZXZlbnQsIGZhbHNlKTsKQEAgLTc2MDAsMTEgKzc4MTUsMzYgQEAKIAkJcHV0X2N0eChzcmNfY3R4KTsKIAkJbGlzdF9hZGQoJmV2ZW50LT5taWdyYXRlX2VudHJ5LCAmZXZlbnRzKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZzcmNfY3R4LT5tdXRleCk7CiAKKwkvKgorCSAqIFdhaXQgZm9yIHRoZSBldmVudHMgdG8gcXVpZXNjZSBiZWZvcmUgcmUtaW5zdGF0aW5nIHRoZW0uCisJICovCiAJc3luY2hyb25pemVfcmN1KCk7CiAKLQltdXRleF9sb2NrKCZkc3RfY3R4LT5tdXRleCk7CisJLyoKKwkgKiBSZS1pbnN0YXRlIGV2ZW50cyBpbiAyIHBhc3Nlcy4KKwkgKgorCSAqIFNraXAgb3ZlciBncm91cCBsZWFkZXJzIGFuZCBvbmx5IGluc3RhbGwgc2libGluZ3Mgb24gdGhpcyBmaXJzdAorCSAqIHBhc3MsIHNpYmxpbmdzIHdpbGwgbm90IGdldCBlbmFibGVkIHdpdGhvdXQgYSBsZWFkZXIsIGhvd2V2ZXIgYQorCSAqIGxlYWRlciB3aWxsIGVuYWJsZSBpdHMgc2libGluZ3MsIGV2ZW4gaWYgdGhvc2UgYXJlIHN0aWxsIG9uIHRoZSBvbGQKKwkgKiBjb250ZXh0LgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldmVudCwgdG1wLCAmZXZlbnRzLCBtaWdyYXRlX2VudHJ5KSB7CisJCWlmIChldmVudC0+Z3JvdXBfbGVhZGVyID09IGV2ZW50KQorCQkJY29udGludWU7CisKKwkJbGlzdF9kZWwoJmV2ZW50LT5taWdyYXRlX2VudHJ5KTsKKwkJaWYgKGV2ZW50LT5zdGF0ZSA+PSBQRVJGX0VWRU5UX1NUQVRFX09GRikKKwkJCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfSU5BQ1RJVkU7CisJCWFjY291bnRfZXZlbnRfY3B1KGV2ZW50LCBkc3RfY3B1KTsKKwkJcGVyZl9pbnN0YWxsX2luX2NvbnRleHQoZHN0X2N0eCwgZXZlbnQsIGRzdF9jcHUpOworCQlnZXRfY3R4KGRzdF9jdHgpOworCX0KKworCS8qCisJICogT25jZSBhbGwgdGhlIHNpYmxpbmdzIGFyZSBzZXR1cCBwcm9wZXJseSwgaW5zdGFsbCB0aGUgZ3JvdXAgbGVhZGVycworCSAqIHRvIG1ha2UgaXQgZ28uCisJICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZldmVudHMsIG1pZ3JhdGVfZW50cnkpIHsKIAkJbGlzdF9kZWwoJmV2ZW50LT5taWdyYXRlX2VudHJ5KTsKIAkJaWYgKGV2ZW50LT5zdGF0ZSA+PSBQRVJGX0VWRU5UX1NUQVRFX09GRikKQEAgLTc2MTQsNiArNzg1NCw3IEBACiAJCWdldF9jdHgoZHN0X2N0eCk7CiAJfQogCW11dGV4X3VubG9jaygmZHN0X2N0eC0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmc3JjX2N0eC0+bXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocGVyZl9wbXVfbWlncmF0ZV9jb250ZXh0KTsKIApAQCAtNzgwMCwxNCArODA0MSwxOSBAQAogCiAJcHV0X2V2ZW50KHBhcmVudCk7CiAKKwlyYXdfc3Bpbl9sb2NrX2lycSgmY3R4LT5sb2NrKTsKIAlwZXJmX2dyb3VwX2RldGFjaChldmVudCk7CiAJbGlzdF9kZWxfZXZlbnQoZXZlbnQsIGN0eCk7CisJcmF3X3NwaW5fdW5sb2NrX2lycSgmY3R4LT5sb2NrKTsKIAlmcmVlX2V2ZW50KGV2ZW50KTsKIH0KIAogLyoKLSAqIGZyZWUgYW4gdW5leHBvc2VkLCB1bnVzZWQgY29udGV4dCBhcyBjcmVhdGVkIGJ5IGluaGVyaXRhbmNlIGJ5CisgKiBGcmVlIGFuIHVuZXhwb3NlZCwgdW51c2VkIGNvbnRleHQgYXMgY3JlYXRlZCBieSBpbmhlcml0YW5jZSBieQogICogcGVyZl9ldmVudF9pbml0X3Rhc2sgYmVsb3csIHVzZWQgYnkgZm9yaygpIGluIGNhc2Ugb2YgZmFpbC4KKyAqCisgKiBOb3QgYWxsIGxvY2tzIGFyZSBzdHJpY3RseSByZXF1aXJlZCwgYnV0IHRha2UgdGhlbSBhbnl3YXkgdG8gYmUgbmljZSBhbmQKKyAqIGhlbHAgb3V0IHdpdGggdGhlIGxvY2tkZXAgYXNzZXJ0aW9ucy4KICAqLwogdm9pZCBwZXJmX2V2ZW50X2ZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CkBAIC04MTI2LDcgKzgzNzIsNyBAQAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJc3doYXNoID0gJnBlcl9jcHUoc3dldmVudF9odGFibGUsIGNwdSk7CiAJCW11dGV4X2luaXQoJnN3aGFzaC0+aGxpc3RfbXV0ZXgpOwotCQlJTklUX0xJU1RfSEVBRCgmcGVyX2NwdShyb3RhdGlvbl9saXN0LCBjcHUpKTsKKwkJSU5JVF9MSVNUX0hFQUQoJnBlcl9jcHUoYWN0aXZlX2N0eF9saXN0LCBjcHUpKTsKIAl9CiB9CiAKQEAgLTgxNDcsMjIgKzgzOTMsMTEgQEAKIH0KIAogI2lmIGRlZmluZWQgQ09ORklHX0hPVFBMVUdfQ1BVIHx8IGRlZmluZWQgQ09ORklHX0tFWEVDCi1zdGF0aWMgdm9pZCBwZXJmX3BtdV9yb3RhdGVfc3RvcChzdHJ1Y3QgcG11ICpwbXUpCi17Ci0Jc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCA9IHRoaXNfY3B1X3B0cihwbXUtPnBtdV9jcHVfY29udGV4dCk7Ci0KLQlXQVJOX09OKCFpcnFzX2Rpc2FibGVkKCkpOwotCi0JbGlzdF9kZWxfaW5pdCgmY3B1Y3R4LT5yb3RhdGlvbl9saXN0KTsKLX0KLQogc3RhdGljIHZvaWQgX19wZXJmX2V2ZW50X2V4aXRfY29udGV4dCh2b2lkICpfX2luZm8pCiB7CiAJc3RydWN0IHJlbW92ZV9ldmVudCByZSA9IHsgLmRldGFjaF9ncm91cCA9IHRydWUgfTsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9jb250ZXh0ICpjdHggPSBfX2luZm87CiAKLQlwZXJmX3BtdV9yb3RhdGVfc3RvcChjdHgtPnBtdSk7Ci0KIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmUuZXZlbnQsICZjdHgtPmV2ZW50X2xpc3QsIGV2ZW50X2VudHJ5KQogCQlfX3BlcmZfcmVtb3ZlX2Zyb21fY29udGV4dCgmcmUpOwpAQCAtODI3Myw2ICs4NTA4LDE4IEBACiAJCSAgICAgIT0gMTAyNCk7CiB9CiAKK3NzaXplX3QgcGVyZl9ldmVudF9zeXNmc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjaGFyICpwYWdlKQoreworCXN0cnVjdCBwZXJmX3BtdV9ldmVudHNfYXR0ciAqcG11X2F0dHIgPQorCQljb250YWluZXJfb2YoYXR0ciwgc3RydWN0IHBlcmZfcG11X2V2ZW50c19hdHRyLCBhdHRyKTsKKworCWlmIChwbXVfYXR0ci0+ZXZlbnRfc3RyKQorCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXNcbiIsIHBtdV9hdHRyLT5ldmVudF9zdHIpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHBlcmZfZXZlbnRfc3lzZnNfaW5pdCh2b2lkKQogewogCXN0cnVjdCBwbXUgKnBtdTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvcmluZ19idWZmZXIuYyBiL2tlcm5lbC9ldmVudHMvcmluZ19idWZmZXIuYwppbmRleCAxNDZhNTc5Li5lYWRiOTVjIDEwMDY0NAotLS0gYS9rZXJuZWwvZXZlbnRzL3JpbmdfYnVmZmVyLmMKKysrIGIva2VybmVsL2V2ZW50cy9yaW5nX2J1ZmZlci5jCkBAIC0xMywxMiArMTMsMTMgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogc3RhdGljIHZvaWQgcGVyZl9vdXRwdXRfd2FrZXVwKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSkKIHsKLQlhdG9taWNfc2V0KCZoYW5kbGUtPnJiLT5wb2xsLCBQT0xMX0lOKTsKKwlhdG9taWNfc2V0KCZoYW5kbGUtPnJiLT5wb2xsLCBQT0xMSU4pOwogCiAJaGFuZGxlLT5ldmVudC0+cGVuZGluZ193YWtldXAgPSAxOwogCWlycV93b3JrX3F1ZXVlKCZoYW5kbGUtPmV2ZW50LT5wZW5kaW5nKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDY4MDZjNTUuLmZlZmYxMGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtNDM1LDcgKzQzNSw4IEBACiAJdGFza191bmxvY2sodHNrKTsKIAltbV91cGRhdGVfbmV4dF9vd25lcihtbSk7CiAJbW1wdXQobW0pOwotCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpOworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpKQorCQl1bm1hcmtfb29tX3ZpY3RpbSgpOwogfQogCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX2FsaXZlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCA0ZGMyZGRhLi42NmUxOWMyIDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTQzOCwxMiArNDM4LDggQEAKIAkJCQlhdG9taWNfaW5jKCZtYXBwaW5nLT5pX21tYXBfd3JpdGFibGUpOwogCQkJZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKTsKIAkJCS8qIGluc2VydCB0bXAgaW50byB0aGUgc2hhcmUgbGlzdCwganVzdCBhZnRlciBtcG50ICovCi0JCQlpZiAodW5saWtlbHkodG1wLT52bV9mbGFncyAmIFZNX05PTkxJTkVBUikpCi0JCQkJdm1hX25vbmxpbmVhcl9pbnNlcnQodG1wLAotCQkJCQkJJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIpOwotCQkJZWxzZQotCQkJCXZtYV9pbnRlcnZhbF90cmVlX2luc2VydF9hZnRlcih0bXAsIG1wbnQsCi0JCQkJCQkJJm1hcHBpbmctPmlfbW1hcCk7CisJCQl2bWFfaW50ZXJ2YWxfdHJlZV9pbnNlcnRfYWZ0ZXIodG1wLCBtcG50LAorCQkJCQkmbWFwcGluZy0+aV9tbWFwKTsKIAkJCWZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKTsKIAkJCWlfbW1hcF91bmxvY2tfd3JpdGUobWFwcGluZyk7CiAJCX0KQEAgLTU1OSw2ICs1NTUsOSBAQAogCUlOSVRfTElTVF9IRUFEKCZtbS0+bW1saXN0KTsKIAltbS0+Y29yZV9zdGF0ZSA9IE5VTEw7CiAJYXRvbWljX2xvbmdfc2V0KCZtbS0+bnJfcHRlcywgMCk7CisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKKwlhdG9taWNfbG9uZ19zZXQoJm1tLT5ucl9wbWRzLCAwKTsKKyNlbmRpZgogCW1tLT5tYXBfY291bnQgPSAwOwogCW1tLT5sb2NrZWRfdm0gPSAwOwogCW1tLT5waW5uZWRfdm0gPSAwOwpAQCAtNjA3LDYgKzYwNiwxNCBAQAogCQkJcHJpbnRrKEtFUk5fQUxFUlQgIkJVRzogQmFkIHJzcy1jb3VudGVyIHN0YXRlICIKIAkJCQkJICAibW06JXAgaWR4OiVkIHZhbDolbGRcbiIsIG1tLCBpLCB4KTsKIAl9CisKKwlpZiAoYXRvbWljX2xvbmdfcmVhZCgmbW0tPm5yX3B0ZXMpKQorCQlwcl9hbGVydCgiQlVHOiBub24temVybyBucl9wdGVzIG9uIGZyZWVpbmcgbW06ICVsZFxuIiwKKwkJCQlhdG9taWNfbG9uZ19yZWFkKCZtbS0+bnJfcHRlcykpOworCWlmIChtbV9ucl9wbWRzKG1tKSkKKwkJcHJfYWxlcnQoIkJVRzogbm9uLXplcm8gbnJfcG1kcyBvbiBmcmVlaW5nIG1tOiAlbGRcbiIsCisJCQkJbW1fbnJfcG1kcyhtbSkpOworCiAjaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpICYmICFVU0VfU1BMSVRfUE1EX1BUTE9DS1MKIAlWTV9CVUdfT05fTU0obW0tPnBtZF9odWdlX3B0ZSwgbW0pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IDYzNjc4YjUuLjRlZWI2M2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC5jCisrKyBiL2tlcm5lbC9mdXRleC5jCkBAIC0yMjU4LDcgKzIyNTgsNyBAQAogICogaWYgdGhlcmUgYXJlIHdhaXRlcnMgdGhlbiBpdCB3aWxsIGJsb2NrLCBpdCBkb2VzIFBJLCBldGMuIChEdWUgdG8KICAqIHJhY2VzIHRoZSBrZXJuZWwgbWlnaHQgc2VlIGEgMCB2YWx1ZSBvZiB0aGUgZnV0ZXggdG9vLikKICAqLwotc3RhdGljIGludCBmdXRleF9sb2NrX3BpKHUzMiBfX3VzZXIgKnVhZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBkZXRlY3QsCitzdGF0aWMgaW50IGZ1dGV4X2xvY2tfcGkodTMyIF9fdXNlciAqdWFkZHIsIHVuc2lnbmVkIGludCBmbGFncywKIAkJCSBrdGltZV90ICp0aW1lLCBpbnQgdHJ5bG9jaykKIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyIHRpbWVvdXQsICp0byA9IE5VTEw7CkBAIC0yOTUzLDExICsyOTUzLDExIEBACiAJY2FzZSBGVVRFWF9XQUtFX09QOgogCQlyZXR1cm4gZnV0ZXhfd2FrZV9vcCh1YWRkciwgZmxhZ3MsIHVhZGRyMiwgdmFsLCB2YWwyLCB2YWwzKTsKIAljYXNlIEZVVEVYX0xPQ0tfUEk6Ci0JCXJldHVybiBmdXRleF9sb2NrX3BpKHVhZGRyLCBmbGFncywgdmFsLCB0aW1lb3V0LCAwKTsKKwkJcmV0dXJuIGZ1dGV4X2xvY2tfcGkodWFkZHIsIGZsYWdzLCB0aW1lb3V0LCAwKTsKIAljYXNlIEZVVEVYX1VOTE9DS19QSToKIAkJcmV0dXJuIGZ1dGV4X3VubG9ja19waSh1YWRkciwgZmxhZ3MpOwogCWNhc2UgRlVURVhfVFJZTE9DS19QSToKLQkJcmV0dXJuIGZ1dGV4X2xvY2tfcGkodWFkZHIsIGZsYWdzLCAwLCB0aW1lb3V0LCAxKTsKKwkJcmV0dXJuIGZ1dGV4X2xvY2tfcGkodWFkZHIsIGZsYWdzLCBOVUxMLCAxKTsKIAljYXNlIEZVVEVYX1dBSVRfUkVRVUVVRV9QSToKIAkJdmFsMyA9IEZVVEVYX0JJVFNFVF9NQVRDSF9BTlk7CiAJCXJldHVybiBmdXRleF93YWl0X3JlcXVldWVfcGkodWFkZHIsIGZsYWdzLCB2YWwsIHRpbWVvdXQsIHZhbDMsCmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWMuYyBiL2tlcm5lbC9rZXhlYy5jCmluZGV4IDlhOGEwMWEuLmM4NTI3NzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlYy5jCisrKyBiL2tlcm5lbC9rZXhlYy5jCkBAIC0yNTEyLDcgKzI1MTIsNyBAQAogCQkJY29udGludWU7CiAKIAkJLyoKLQkJICogUmVzcGVjdGl2ZSBhcmNoaWN0dXJlIG5lZWRzIHRvIHByb3ZpZGUgc3VwcG9ydCBmb3IgYXBwbHlpbmcKKwkJICogUmVzcGVjdGl2ZSBhcmNoaXRlY3R1cmUgbmVlZHMgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBhcHBseWluZwogCQkgKiByZWxvY2F0aW9ucyBvZiB0eXBlIFNIVF9SRUxBL1NIVF9SRUwuCiAJCSAqLwogCQlpZiAoc2VjaGRyc1tpXS5zaF90eXBlID09IFNIVF9SRUxBKQpkaWZmIC0tZ2l0IGEva2VybmVsL2twcm9iZXMuYyBiL2tlcm5lbC9rcHJvYmVzLmMKaW5kZXggZWU2MTk5Mi4uMmNhMjcyZiAxMDA2NDQKLS0tIGEva2VybmVsL2twcm9iZXMuYworKysgYi9rZXJuZWwva3Byb2Jlcy5jCkBAIC03MTcsNyArNzE3LDcgQEAKIAlzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3A7CiAKIAlvcCA9IGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSwga3ApOwotCWFyY2hfcHJlcGFyZV9vcHRpbWl6ZWRfa3Byb2JlKG9wKTsKKwlhcmNoX3ByZXBhcmVfb3B0aW1pemVkX2twcm9iZShvcCwgcCk7CiB9CiAKIC8qIEFsbG9jYXRlIG5ldyBvcHRpbWl6ZWRfa3Byb2JlIGFuZCB0cnkgdG8gcHJlcGFyZSBvcHRpbWl6ZWQgaW5zdHJ1Y3Rpb25zICovCkBAIC03MzEsNyArNzMxLDcgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZvcC0+bGlzdCk7CiAJb3AtPmtwLmFkZHIgPSBwLT5hZGRyOwotCWFyY2hfcHJlcGFyZV9vcHRpbWl6ZWRfa3Byb2JlKG9wKTsKKwlhcmNoX3ByZXBhcmVfb3B0aW1pemVkX2twcm9iZShvcCwgcCk7CiAKIAlyZXR1cm4gJm9wLT5rcDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZlcGF0Y2gvS2NvbmZpZyBiL2tlcm5lbC9saXZlcGF0Y2gvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDUwMjI1Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2xpdmVwYXRjaC9LY29uZmlnCkBAIC0wLDAgKzEsMTggQEAKK2NvbmZpZyBIQVZFX0xJVkVQQVRDSAorCWJvb2wKKwloZWxwCisJICBBcmNoIHN1cHBvcnRzIGtlcm5lbCBsaXZlIHBhdGNoaW5nCisKK2NvbmZpZyBMSVZFUEFUQ0gKKwlib29sICJLZXJuZWwgTGl2ZSBQYXRjaGluZyIKKwlkZXBlbmRzIG9uIERZTkFNSUNfRlRSQUNFX1dJVEhfUkVHUworCWRlcGVuZHMgb24gTU9EVUxFUworCWRlcGVuZHMgb24gU1lTRlMKKwlkZXBlbmRzIG9uIEtBTExTWU1TX0FMTAorCWRlcGVuZHMgb24gSEFWRV9MSVZFUEFUQ0gKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQga2VybmVsIGxpdmUgcGF0Y2hpbmcuCisJICBUaGlzIG9wdGlvbiBoYXMgbm8gcnVudGltZSBpbXBhY3QgdW50aWwgYSBrZXJuZWwgInBhdGNoIgorCSAgbW9kdWxlIHVzZXMgdGhlIGludGVyZmFjZSBwcm92aWRlZCBieSB0aGlzIG9wdGlvbiB0byByZWdpc3RlcgorCSAgYSBwYXRjaCwgY2F1c2luZyBjYWxscyB0byBwYXRjaGVkIGZ1bmN0aW9ucyB0byBiZSByZWRpcmVjdGVkCisJICB0byBuZXcgZnVuY3Rpb24gY29kZSBjb250YWluZWQgaW4gdGhlIHBhdGNoIG1vZHVsZS4KZGlmZiAtLWdpdCBhL2tlcm5lbC9saXZlcGF0Y2gvTWFrZWZpbGUgYi9rZXJuZWwvbGl2ZXBhdGNoL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4NzgwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvbGl2ZXBhdGNoL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorb2JqLSQoQ09ORklHX0xJVkVQQVRDSCkgKz0gbGl2ZXBhdGNoLm8KKworbGl2ZXBhdGNoLW9ianMgOj0gY29yZS5vCmRpZmYgLS1naXQgYS9rZXJuZWwvbGl2ZXBhdGNoL2NvcmUuYyBiL2tlcm5lbC9saXZlcGF0Y2gvY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmN2Y0N2QKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvbGl2ZXBhdGNoL2NvcmUuYwpAQCAtMCwwICsxLDEwMTUgQEAKKy8qCisgKiBjb3JlLmMgLSBLZXJuZWwgTGl2ZSBQYXRjaGluZyBDb3JlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFNldGggSmVubmluZ3MgPHNqZW5uaW5nQHJlZGhhdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU1VTRQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXZlcGF0Y2guaD4KKworLyoqCisgKiBzdHJ1Y3Qga2xwX29wcyAtIHN0cnVjdHVyZSBmb3IgdHJhY2tpbmcgcmVnaXN0ZXJlZCBmdHJhY2Ugb3BzIHN0cnVjdHMKKyAqCisgKiBBIHNpbmdsZSBmdHJhY2Vfb3BzIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBlbmFibGVkIHJlcGxhY2VtZW50IGZ1bmN0aW9ucworICogKGtscF9mdW5jIHN0cnVjdHMpIHdoaWNoIGhhdmUgdGhlIHNhbWUgb2xkX2FkZHIuICBUaGlzIGFsbG93cyB0aGUgc3dpdGNoCisgKiBiZXR3ZWVuIGZ1bmN0aW9uIHZlcnNpb25zIHRvIGhhcHBlbiBpbnN0YW50YW5lb3VzbHkgYnkgdXBkYXRpbmcgdGhlIGtscF9vcHMKKyAqIHN0cnVjdCdzIGZ1bmNfc3RhY2sgbGlzdC4gIFRoZSB3aW5uZXIgaXMgdGhlIGtscF9mdW5jIGF0IHRoZSB0b3Agb2YgdGhlCisgKiBmdW5jX3N0YWNrIChmcm9udCBvZiB0aGUgbGlzdCkuCisgKgorICogQG5vZGU6CW5vZGUgZm9yIHRoZSBnbG9iYWwga2xwX29wcyBsaXN0CisgKiBAZnVuY19zdGFjazoJbGlzdCBoZWFkIGZvciB0aGUgc3RhY2sgb2Yga2xwX2Z1bmMncyAoYWN0aXZlIGZ1bmMgaXMgb24gdG9wKQorICogQGZvcHM6CXJlZ2lzdGVyZWQgZnRyYWNlIG9wcyBzdHJ1Y3QKKyAqLworc3RydWN0IGtscF9vcHMgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZ1bmNfc3RhY2s7CisJc3RydWN0IGZ0cmFjZV9vcHMgZm9wczsKK307CisKKy8qCisgKiBUaGUga2xwX211dGV4IHByb3RlY3RzIHRoZSBnbG9iYWwgbGlzdHMgYW5kIHN0YXRlIHRyYW5zaXRpb25zIG9mIGFueQorICogc3RydWN0dXJlIHJlYWNoYWJsZSBmcm9tIHRoZW0uICBSZWZlcmVuY2VzIHRvIGFueSBzdHJ1Y3R1cmUgbXVzdCBiZSBvYnRhaW5lZAorICogdW5kZXIgbXV0ZXggcHJvdGVjdGlvbiAoZXhjZXB0IGluIGtscF9mdHJhY2VfaGFuZGxlcigpLCB3aGljaCB1c2VzIFJDVSB0bworICogZW5zdXJlIGl0IGdldHMgY29uc2lzdGVudCBkYXRhKS4KKyAqLworc3RhdGljIERFRklORV9NVVRFWChrbHBfbXV0ZXgpOworCitzdGF0aWMgTElTVF9IRUFEKGtscF9wYXRjaGVzKTsKK3N0YXRpYyBMSVNUX0hFQUQoa2xwX29wcyk7CisKK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqa2xwX3Jvb3Rfa29iajsKKworc3RhdGljIHN0cnVjdCBrbHBfb3BzICprbHBfZmluZF9vcHModW5zaWduZWQgbG9uZyBvbGRfYWRkcikKK3sKKwlzdHJ1Y3Qga2xwX29wcyAqb3BzOworCXN0cnVjdCBrbHBfZnVuYyAqZnVuYzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkob3BzLCAma2xwX29wcywgbm9kZSkgeworCQlmdW5jID0gbGlzdF9maXJzdF9lbnRyeSgmb3BzLT5mdW5jX3N0YWNrLCBzdHJ1Y3Qga2xwX2Z1bmMsCisJCQkJCXN0YWNrX25vZGUpOworCQlpZiAoZnVuYy0+b2xkX2FkZHIgPT0gb2xkX2FkZHIpCisJCQlyZXR1cm4gb3BzOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgYm9vbCBrbHBfaXNfbW9kdWxlKHN0cnVjdCBrbHBfb2JqZWN0ICpvYmopCit7CisJcmV0dXJuIG9iai0+bmFtZTsKK30KKworc3RhdGljIGJvb2wga2xwX2lzX29iamVjdF9sb2FkZWQoc3RydWN0IGtscF9vYmplY3QgKm9iaikKK3sKKwlyZXR1cm4gIW9iai0+bmFtZSB8fCBvYmotPm1vZDsKK30KKworLyogc2V0cyBvYmotPm1vZCBpZiBvYmplY3QgaXMgbm90IHZtbGludXggYW5kIG1vZHVsZSBpcyBmb3VuZCAqLworc3RhdGljIHZvaWQga2xwX2ZpbmRfb2JqZWN0X21vZHVsZShzdHJ1Y3Qga2xwX29iamVjdCAqb2JqKQoreworCWlmICgha2xwX2lzX21vZHVsZShvYmopKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOworCS8qCisJICogV2UgZG9uJ3QgbmVlZCB0byB0YWtlIGEgcmVmZXJlbmNlIG9uIHRoZSBtb2R1bGUgaGVyZSBiZWNhdXNlIHdlIGhhdmUKKwkgKiB0aGUga2xwX211dGV4LCB3aGljaCBpcyBhbHNvIHRha2VuIGJ5IHRoZSBtb2R1bGUgbm90aWZpZXIuICBUaGlzCisJICogcHJldmVudHMgYW55IG1vZHVsZSBmcm9tIHVubG9hZGluZyB1bnRpbCB3ZSByZWxlYXNlIHRoZSBrbHBfbXV0ZXguCisJICovCisJb2JqLT5tb2QgPSBmaW5kX21vZHVsZShvYmotPm5hbWUpOworCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKK30KKworLyoga2xwX211dGV4IG11c3QgYmUgaGVsZCBieSBjYWxsZXIgKi8KK3N0YXRpYyBib29sIGtscF9pc19wYXRjaF9yZWdpc3RlcmVkKHN0cnVjdCBrbHBfcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBrbHBfcGF0Y2ggKm15cGF0Y2g7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG15cGF0Y2gsICZrbHBfcGF0Y2hlcywgbGlzdCkKKwkJaWYgKG15cGF0Y2ggPT0gcGF0Y2gpCisJCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wga2xwX2luaXRpYWxpemVkKHZvaWQpCit7CisJcmV0dXJuIGtscF9yb290X2tvYmo7Cit9CisKK3N0cnVjdCBrbHBfZmluZF9hcmcgeworCWNvbnN0IGNoYXIgKm9iam5hbWU7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJLyoKKwkgKiBJZiBjb3VudCA9PSAwLCB0aGUgc3ltYm9sIHdhcyBub3QgZm91bmQuIElmIGNvdW50ID09IDEsIGEgdW5pcXVlCisJICogbWF0Y2ggd2FzIGZvdW5kIGFuZCBhZGRyIGlzIHNldC4gIElmIGNvdW50ID4gMSwgdGhlcmUgaXMKKwkgKiB1bnJlc29sdmFibGUgYW1iaWd1aXR5IGFtb25nICJjb3VudCIgbnVtYmVyIG9mIHN5bWJvbHMgd2l0aCB0aGUgc2FtZQorCSAqIG5hbWUgaW4gdGhlIHNhbWUgb2JqZWN0LgorCSAqLworCXVuc2lnbmVkIGxvbmcgY291bnQ7Cit9OworCitzdGF0aWMgaW50IGtscF9maW5kX2NhbGxiYWNrKHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgIHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXN0cnVjdCBrbHBfZmluZF9hcmcgKmFyZ3MgPSBkYXRhOworCisJaWYgKChtb2QgJiYgIWFyZ3MtPm9iam5hbWUpIHx8ICghbW9kICYmIGFyZ3MtPm9iam5hbWUpKQorCQlyZXR1cm4gMDsKKworCWlmIChzdHJjbXAoYXJncy0+bmFtZSwgbmFtZSkpCisJCXJldHVybiAwOworCisJaWYgKGFyZ3MtPm9iam5hbWUgJiYgc3RyY21wKGFyZ3MtPm9iam5hbWUsIG1vZC0+bmFtZSkpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBhcmdzLT5hZGRyIG1pZ2h0IGJlIG92ZXJ3cml0dGVuIGlmIGFub3RoZXIgbWF0Y2ggaXMgZm91bmQKKwkgKiBidXQga2xwX2ZpbmRfb2JqZWN0X3N5bWJvbCgpIGhhbmRsZXMgdGhpcyBhbmQgb25seSByZXR1cm5zIHRoZQorCSAqIGFkZHIgaWYgY291bnQgPT0gMS4KKwkgKi8KKwlhcmdzLT5hZGRyID0gYWRkcjsKKwlhcmdzLT5jb3VudCsrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga2xwX2ZpbmRfb2JqZWN0X3N5bWJvbChjb25zdCBjaGFyICpvYmpuYW1lLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKwlzdHJ1Y3Qga2xwX2ZpbmRfYXJnIGFyZ3MgPSB7CisJCS5vYmpuYW1lID0gb2JqbmFtZSwKKwkJLm5hbWUgPSBuYW1lLAorCQkuYWRkciA9IDAsCisJCS5jb3VudCA9IDAKKwl9OworCisJa2FsbHN5bXNfb25fZWFjaF9zeW1ib2woa2xwX2ZpbmRfY2FsbGJhY2ssICZhcmdzKTsKKworCWlmIChhcmdzLmNvdW50ID09IDApCisJCXByX2Vycigic3ltYm9sICclcycgbm90IGZvdW5kIGluIHN5bWJvbCB0YWJsZVxuIiwgbmFtZSk7CisJZWxzZSBpZiAoYXJncy5jb3VudCA+IDEpCisJCXByX2VycigidW5yZXNvbHZhYmxlIGFtYmlndWl0eSAoJWx1IG1hdGNoZXMpIG9uIHN5bWJvbCAnJXMnIGluIG9iamVjdCAnJXMnXG4iLAorCQkgICAgICAgYXJncy5jb3VudCwgbmFtZSwgb2JqbmFtZSk7CisJZWxzZSB7CisJCSphZGRyID0gYXJncy5hZGRyOworCQlyZXR1cm4gMDsKKwl9CisKKwkqYWRkciA9IDA7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0cnVjdCBrbHBfdmVyaWZ5X2FyZ3MgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyOworfTsKKworc3RhdGljIGludCBrbHBfdmVyaWZ5X2NhbGxiYWNrKHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgICAgICAgc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IGtscF92ZXJpZnlfYXJncyAqYXJncyA9IGRhdGE7CisKKwlpZiAoIW1vZCAmJgorCSAgICAhc3RyY21wKGFyZ3MtPm5hbWUsIG5hbWUpICYmCisJICAgIGFyZ3MtPmFkZHIgPT0gYWRkcikKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrbHBfdmVyaWZ5X3ZtbGludXhfc3ltYm9sKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3Qga2xwX3ZlcmlmeV9hcmdzIGFyZ3MgPSB7CisJCS5uYW1lID0gbmFtZSwKKwkJLmFkZHIgPSBhZGRyLAorCX07CisKKwlpZiAoa2FsbHN5bXNfb25fZWFjaF9zeW1ib2woa2xwX3ZlcmlmeV9jYWxsYmFjaywgJmFyZ3MpKQorCQlyZXR1cm4gMDsKKworCXByX2Vycigic3ltYm9sICclcycgbm90IGZvdW5kIGF0IHNwZWNpZmllZCBhZGRyZXNzIDB4JTAxNmx4LCBrZXJuZWwgbWlzbWF0Y2g/XG4iLAorCQluYW1lLCBhZGRyKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBrbHBfZmluZF92ZXJpZnlfZnVuY19hZGRyKHN0cnVjdCBrbHBfb2JqZWN0ICpvYmosCisJCQkJICAgICBzdHJ1Y3Qga2xwX2Z1bmMgKmZ1bmMpCit7CisJaW50IHJldDsKKworI2lmIGRlZmluZWQoQ09ORklHX1JBTkRPTUlaRV9CQVNFKQorCS8qIEtBU0xSIGlzIGVuYWJsZWQsIGRpc3JlZ2FyZCBvbGRfYWRkciBmcm9tIHVzZXIgKi8KKwlmdW5jLT5vbGRfYWRkciA9IDA7CisjZW5kaWYKKworCWlmICghZnVuYy0+b2xkX2FkZHIgfHwga2xwX2lzX21vZHVsZShvYmopKQorCQlyZXQgPSBrbHBfZmluZF9vYmplY3Rfc3ltYm9sKG9iai0+bmFtZSwgZnVuYy0+b2xkX25hbWUsCisJCQkJCSAgICAgJmZ1bmMtPm9sZF9hZGRyKTsKKwllbHNlCisJCXJldCA9IGtscF92ZXJpZnlfdm1saW51eF9zeW1ib2woZnVuYy0+b2xkX25hbWUsCisJCQkJCQlmdW5jLT5vbGRfYWRkcik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogZXh0ZXJuYWwgc3ltYm9scyBhcmUgbG9jYXRlZCBvdXRzaWRlIHRoZSBwYXJlbnQgb2JqZWN0ICh3aGVyZSB0aGUgcGFyZW50CisgKiBvYmplY3QgaXMgZWl0aGVyIHZtbGludXggb3IgdGhlIGttb2QgYmVpbmcgcGF0Y2hlZCkuCisgKi8KK3N0YXRpYyBpbnQga2xwX2ZpbmRfZXh0ZXJuYWxfc3ltYm9sKHN0cnVjdCBtb2R1bGUgKnBtb2QsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKnN5bTsKKworCS8qIGZpcnN0LCBjaGVjayBpZiBpdCdzIGFuIGV4cG9ydGVkIHN5bWJvbCAqLworCXByZWVtcHRfZGlzYWJsZSgpOworCXN5bSA9IGZpbmRfc3ltYm9sKG5hbWUsIE5VTEwsIE5VTEwsIHRydWUsIHRydWUpOworCXByZWVtcHRfZW5hYmxlKCk7CisJaWYgKHN5bSkgeworCQkqYWRkciA9IHN5bS0+dmFsdWU7CisJCXJldHVybiAwOworCX0KKworCS8qIG90aGVyd2lzZSBjaGVjayBpZiBpdCdzIGluIGFub3RoZXIgLm8gd2l0aGluIHRoZSBwYXRjaCBtb2R1bGUgKi8KKwlyZXR1cm4ga2xwX2ZpbmRfb2JqZWN0X3N5bWJvbChwbW9kLT5uYW1lLCBuYW1lLCBhZGRyKTsKK30KKworc3RhdGljIGludCBrbHBfd3JpdGVfb2JqZWN0X3JlbG9jYXRpb25zKHN0cnVjdCBtb2R1bGUgKnBtb2QsCisJCQkJCXN0cnVjdCBrbHBfb2JqZWN0ICpvYmopCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qga2xwX3JlbG9jICpyZWxvYzsKKworCWlmIChXQVJOX09OKCFrbHBfaXNfb2JqZWN0X2xvYWRlZChvYmopKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoV0FSTl9PTighb2JqLT5yZWxvY3MpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAocmVsb2MgPSBvYmotPnJlbG9jczsgcmVsb2MtPm5hbWU7IHJlbG9jKyspIHsKKwkJaWYgKCFrbHBfaXNfbW9kdWxlKG9iaikpIHsKKwkJCXJldCA9IGtscF92ZXJpZnlfdm1saW51eF9zeW1ib2wocmVsb2MtPm5hbWUsCisJCQkJCQkJcmVsb2MtPnZhbCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0gZWxzZSB7CisJCQkvKiBtb2R1bGUsIHJlbG9jLT52YWwgbmVlZHMgdG8gYmUgZGlzY292ZXJlZCAqLworCQkJaWYgKHJlbG9jLT5leHRlcm5hbCkKKwkJCQlyZXQgPSBrbHBfZmluZF9leHRlcm5hbF9zeW1ib2wocG1vZCwKKwkJCQkJCQkgICAgICAgcmVsb2MtPm5hbWUsCisJCQkJCQkJICAgICAgICZyZWxvYy0+dmFsKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSBrbHBfZmluZF9vYmplY3Rfc3ltYm9sKG9iai0+bW9kLT5uYW1lLAorCQkJCQkJCSAgICAgcmVsb2MtPm5hbWUsCisJCQkJCQkJICAgICAmcmVsb2MtPnZhbCk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJcmV0ID0ga2xwX3dyaXRlX21vZHVsZV9yZWxvYyhwbW9kLCByZWxvYy0+dHlwZSwgcmVsb2MtPmxvYywKKwkJCQkJICAgICByZWxvYy0+dmFsICsgcmVsb2MtPmFkZGVuZCk7CisJCWlmIChyZXQpIHsKKwkJCXByX2VycigicmVsb2NhdGlvbiBmYWlsZWQgZm9yIHN5bWJvbCAnJXMnIGF0IDB4JTAxNmx4ICglZClcbiIsCisJCQkgICAgICAgcmVsb2MtPm5hbWUsIHJlbG9jLT52YWwsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5vdHJhY2Uga2xwX2Z0cmFjZV9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgaXAsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X2lwLAorCQkJCSAgICAgICBzdHJ1Y3QgZnRyYWNlX29wcyAqZm9wcywKKwkJCQkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtscF9vcHMgKm9wczsKKwlzdHJ1Y3Qga2xwX2Z1bmMgKmZ1bmM7CisKKwlvcHMgPSBjb250YWluZXJfb2YoZm9wcywgc3RydWN0IGtscF9vcHMsIGZvcHMpOworCisJcmN1X3JlYWRfbG9jaygpOworCWZ1bmMgPSBsaXN0X2ZpcnN0X29yX251bGxfcmN1KCZvcHMtPmZ1bmNfc3RhY2ssIHN0cnVjdCBrbHBfZnVuYywKKwkJCQkgICAgICBzdGFja19ub2RlKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCWlmIChXQVJOX09OX09OQ0UoIWZ1bmMpKQorCQlyZXR1cm47CisKKwlrbHBfYXJjaF9zZXRfcGMocmVncywgKHVuc2lnbmVkIGxvbmcpZnVuYy0+bmV3X2Z1bmMpOworfQorCitzdGF0aWMgaW50IGtscF9kaXNhYmxlX2Z1bmMoc3RydWN0IGtscF9mdW5jICpmdW5jKQoreworCXN0cnVjdCBrbHBfb3BzICpvcHM7CisJaW50IHJldDsKKworCWlmIChXQVJOX09OKGZ1bmMtPnN0YXRlICE9IEtMUF9FTkFCTEVEKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoV0FSTl9PTighZnVuYy0+b2xkX2FkZHIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW9wcyA9IGtscF9maW5kX29wcyhmdW5jLT5vbGRfYWRkcik7CisJaWYgKFdBUk5fT04oIW9wcykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGxpc3RfaXNfc2luZ3VsYXIoJm9wcy0+ZnVuY19zdGFjaykpIHsKKwkJcmV0ID0gdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJm9wcy0+Zm9wcyk7CisJCWlmIChyZXQpIHsKKwkJCXByX2VycigiZmFpbGVkIHRvIHVucmVnaXN0ZXIgZnRyYWNlIGhhbmRsZXIgZm9yIGZ1bmN0aW9uICclcycgKCVkKVxuIiwKKwkJCSAgICAgICBmdW5jLT5vbGRfbmFtZSwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSBmdHJhY2Vfc2V0X2ZpbHRlcl9pcCgmb3BzLT5mb3BzLCBmdW5jLT5vbGRfYWRkciwgMSwgMCk7CisJCWlmIChyZXQpCisJCQlwcl93YXJuKCJmdW5jdGlvbiB1bnJlZ2lzdGVyIHN1Y2NlZWRlZCBidXQgZmFpbGVkIHRvIGNsZWFyIHRoZSBmaWx0ZXJcbiIpOworCisJCWxpc3RfZGVsX3JjdSgmZnVuYy0+c3RhY2tfbm9kZSk7CisJCWxpc3RfZGVsKCZvcHMtPm5vZGUpOworCQlrZnJlZShvcHMpOworCX0gZWxzZSB7CisJCWxpc3RfZGVsX3JjdSgmZnVuYy0+c3RhY2tfbm9kZSk7CisJfQorCisJZnVuYy0+c3RhdGUgPSBLTFBfRElTQUJMRUQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBrbHBfZW5hYmxlX2Z1bmMoc3RydWN0IGtscF9mdW5jICpmdW5jKQoreworCXN0cnVjdCBrbHBfb3BzICpvcHM7CisJaW50IHJldDsKKworCWlmIChXQVJOX09OKCFmdW5jLT5vbGRfYWRkcikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKFdBUk5fT04oZnVuYy0+c3RhdGUgIT0gS0xQX0RJU0FCTEVEKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvcHMgPSBrbHBfZmluZF9vcHMoZnVuYy0+b2xkX2FkZHIpOworCWlmICghb3BzKSB7CisJCW9wcyA9IGt6YWxsb2Moc2l6ZW9mKCpvcHMpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFvcHMpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlvcHMtPmZvcHMuZnVuYyA9IGtscF9mdHJhY2VfaGFuZGxlcjsKKwkJb3BzLT5mb3BzLmZsYWdzID0gRlRSQUNFX09QU19GTF9TQVZFX1JFR1MgfAorCQkJCSAgRlRSQUNFX09QU19GTF9EWU5BTUlDIHwKKwkJCQkgIEZUUkFDRV9PUFNfRkxfSVBNT0RJRlk7CisKKwkJbGlzdF9hZGQoJm9wcy0+bm9kZSwgJmtscF9vcHMpOworCisJCUlOSVRfTElTVF9IRUFEKCZvcHMtPmZ1bmNfc3RhY2spOworCQlsaXN0X2FkZF9yY3UoJmZ1bmMtPnN0YWNrX25vZGUsICZvcHMtPmZ1bmNfc3RhY2spOworCisJCXJldCA9IGZ0cmFjZV9zZXRfZmlsdGVyX2lwKCZvcHMtPmZvcHMsIGZ1bmMtPm9sZF9hZGRyLCAwLCAwKTsKKwkJaWYgKHJldCkgeworCQkJcHJfZXJyKCJmYWlsZWQgdG8gc2V0IGZ0cmFjZSBmaWx0ZXIgZm9yIGZ1bmN0aW9uICclcycgKCVkKVxuIiwKKwkJCSAgICAgICBmdW5jLT5vbGRfbmFtZSwgcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJcmV0ID0gcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZvcHMtPmZvcHMpOworCQlpZiAocmV0KSB7CisJCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBmdHJhY2UgaGFuZGxlciBmb3IgZnVuY3Rpb24gJyVzJyAoJWQpXG4iLAorCQkJICAgICAgIGZ1bmMtPm9sZF9uYW1lLCByZXQpOworCQkJZnRyYWNlX3NldF9maWx0ZXJfaXAoJm9wcy0+Zm9wcywgZnVuYy0+b2xkX2FkZHIsIDEsIDApOworCQkJZ290byBlcnI7CisJCX0KKworCisJfSBlbHNlIHsKKwkJbGlzdF9hZGRfcmN1KCZmdW5jLT5zdGFja19ub2RlLCAmb3BzLT5mdW5jX3N0YWNrKTsKKwl9CisKKwlmdW5jLT5zdGF0ZSA9IEtMUF9FTkFCTEVEOworCisJcmV0dXJuIDA7CisKK2VycjoKKwlsaXN0X2RlbF9yY3UoJmZ1bmMtPnN0YWNrX25vZGUpOworCWxpc3RfZGVsKCZvcHMtPm5vZGUpOworCWtmcmVlKG9wcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBrbHBfZGlzYWJsZV9vYmplY3Qoc3RydWN0IGtscF9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3Qga2xwX2Z1bmMgKmZ1bmM7CisJaW50IHJldDsKKworCWZvciAoZnVuYyA9IG9iai0+ZnVuY3M7IGZ1bmMtPm9sZF9uYW1lOyBmdW5jKyspIHsKKwkJaWYgKGZ1bmMtPnN0YXRlICE9IEtMUF9FTkFCTEVEKQorCQkJY29udGludWU7CisKKwkJcmV0ID0ga2xwX2Rpc2FibGVfZnVuYyhmdW5jKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJb2JqLT5zdGF0ZSA9IEtMUF9ESVNBQkxFRDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtscF9lbmFibGVfb2JqZWN0KHN0cnVjdCBrbHBfb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGtscF9mdW5jICpmdW5jOworCWludCByZXQ7CisKKwlpZiAoV0FSTl9PTihvYmotPnN0YXRlICE9IEtMUF9ESVNBQkxFRCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKFdBUk5fT04oIWtscF9pc19vYmplY3RfbG9hZGVkKG9iaikpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoZnVuYyA9IG9iai0+ZnVuY3M7IGZ1bmMtPm9sZF9uYW1lOyBmdW5jKyspIHsKKwkJcmV0ID0ga2xwX2VuYWJsZV9mdW5jKGZ1bmMpOworCQlpZiAocmV0KQorCQkJZ290byB1bnJlZ2lzdGVyOworCX0KKwlvYmotPnN0YXRlID0gS0xQX0VOQUJMRUQ7CisKKwlyZXR1cm4gMDsKKwordW5yZWdpc3RlcjoKKwlXQVJOX09OKGtscF9kaXNhYmxlX29iamVjdChvYmopKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fa2xwX2Rpc2FibGVfcGF0Y2goc3RydWN0IGtscF9wYXRjaCAqcGF0Y2gpCit7CisJc3RydWN0IGtscF9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJLyogZW5mb3JjZSBzdGFja2luZzogb25seSB0aGUgbGFzdCBlbmFibGVkIHBhdGNoIGNhbiBiZSBkaXNhYmxlZCAqLworCWlmICghbGlzdF9pc19sYXN0KCZwYXRjaC0+bGlzdCwgJmtscF9wYXRjaGVzKSAmJgorCSAgICBsaXN0X25leHRfZW50cnkocGF0Y2gsIGxpc3QpLT5zdGF0ZSA9PSBLTFBfRU5BQkxFRCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByX25vdGljZSgiZGlzYWJsaW5nIHBhdGNoICclcydcbiIsIHBhdGNoLT5tb2QtPm5hbWUpOworCisJZm9yIChvYmogPSBwYXRjaC0+b2Jqczsgb2JqLT5mdW5jczsgb2JqKyspIHsKKwkJaWYgKG9iai0+c3RhdGUgIT0gS0xQX0VOQUJMRUQpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBrbHBfZGlzYWJsZV9vYmplY3Qob2JqKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcGF0Y2gtPnN0YXRlID0gS0xQX0RJU0FCTEVEOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICoga2xwX2Rpc2FibGVfcGF0Y2goKSAtIGRpc2FibGVzIGEgcmVnaXN0ZXJlZCBwYXRjaAorICogQHBhdGNoOglUaGUgcmVnaXN0ZXJlZCwgZW5hYmxlZCBwYXRjaCB0byBiZSBkaXNhYmxlZAorICoKKyAqIFVucmVnaXN0ZXJzIHRoZSBwYXRjaGVkIGZ1bmN0aW9ucyBmcm9tIGZ0cmFjZS4KKyAqCisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGVycm9yCisgKi8KK2ludCBrbHBfZGlzYWJsZV9wYXRjaChzdHJ1Y3Qga2xwX3BhdGNoICpwYXRjaCkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygma2xwX211dGV4KTsKKworCWlmICgha2xwX2lzX3BhdGNoX3JlZ2lzdGVyZWQocGF0Y2gpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCWlmIChwYXRjaC0+c3RhdGUgPT0gS0xQX0RJU0FCTEVEKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IF9fa2xwX2Rpc2FibGVfcGF0Y2gocGF0Y2gpOworCitlcnI6CisJbXV0ZXhfdW5sb2NrKCZrbHBfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrbHBfZGlzYWJsZV9wYXRjaCk7CisKK3N0YXRpYyBpbnQgX19rbHBfZW5hYmxlX3BhdGNoKHN0cnVjdCBrbHBfcGF0Y2ggKnBhdGNoKQoreworCXN0cnVjdCBrbHBfb2JqZWN0ICpvYmo7CisJaW50IHJldDsKKworCWlmIChXQVJOX09OKHBhdGNoLT5zdGF0ZSAhPSBLTFBfRElTQUJMRUQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGVuZm9yY2Ugc3RhY2tpbmc6IG9ubHkgdGhlIGZpcnN0IGRpc2FibGVkIHBhdGNoIGNhbiBiZSBlbmFibGVkICovCisJaWYgKHBhdGNoLT5saXN0LnByZXYgIT0gJmtscF9wYXRjaGVzICYmCisJICAgIGxpc3RfcHJldl9lbnRyeShwYXRjaCwgbGlzdCktPnN0YXRlID09IEtMUF9ESVNBQkxFRCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCXByX25vdGljZV9vbmNlKCJ0YWludGluZyBrZXJuZWwgd2l0aCBUQUlOVF9MSVZFUEFUQ0hcbiIpOworCWFkZF90YWludChUQUlOVF9MSVZFUEFUQ0gsIExPQ0tERVBfU1RJTExfT0spOworCisJcHJfbm90aWNlKCJlbmFibGluZyBwYXRjaCAnJXMnXG4iLCBwYXRjaC0+bW9kLT5uYW1lKTsKKworCWZvciAob2JqID0gcGF0Y2gtPm9ianM7IG9iai0+ZnVuY3M7IG9iaisrKSB7CisJCWtscF9maW5kX29iamVjdF9tb2R1bGUob2JqKTsKKworCQlpZiAoIWtscF9pc19vYmplY3RfbG9hZGVkKG9iaikpCisJCQljb250aW51ZTsKKworCQlyZXQgPSBrbHBfZW5hYmxlX29iamVjdChvYmopOworCQlpZiAocmV0KQorCQkJZ290byB1bnJlZ2lzdGVyOworCX0KKworCXBhdGNoLT5zdGF0ZSA9IEtMUF9FTkFCTEVEOworCisJcmV0dXJuIDA7CisKK3VucmVnaXN0ZXI6CisJV0FSTl9PTihfX2tscF9kaXNhYmxlX3BhdGNoKHBhdGNoKSk7CisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBrbHBfZW5hYmxlX3BhdGNoKCkgLSBlbmFibGVzIGEgcmVnaXN0ZXJlZCBwYXRjaAorICogQHBhdGNoOglUaGUgcmVnaXN0ZXJlZCwgZGlzYWJsZWQgcGF0Y2ggdG8gYmUgZW5hYmxlZAorICoKKyAqIFBlcmZvcm1zIHRoZSBuZWVkZWQgc3ltYm9sIGxvb2t1cHMgYW5kIGNvZGUgcmVsb2NhdGlvbnMsCisgKiB0aGVuIHJlZ2lzdGVycyB0aGUgcGF0Y2hlZCBmdW5jdGlvbnMgd2l0aCBmdHJhY2UuCisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBlcnJvcgorICovCitpbnQga2xwX2VuYWJsZV9wYXRjaChzdHJ1Y3Qga2xwX3BhdGNoICpwYXRjaCkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygma2xwX211dGV4KTsKKworCWlmICgha2xwX2lzX3BhdGNoX3JlZ2lzdGVyZWQocGF0Y2gpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCXJldCA9IF9fa2xwX2VuYWJsZV9wYXRjaChwYXRjaCk7CisKK2VycjoKKwltdXRleF91bmxvY2soJmtscF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGtscF9lbmFibGVfcGF0Y2gpOworCisvKgorICogU3lzZnMgSW50ZXJmYWNlCisgKgorICogL3N5cy9rZXJuZWwvbGl2ZXBhdGNoCisgKiAvc3lzL2tlcm5lbC9saXZlcGF0Y2gvPHBhdGNoPgorICogL3N5cy9rZXJuZWwvbGl2ZXBhdGNoLzxwYXRjaD4vZW5hYmxlZAorICogL3N5cy9rZXJuZWwvbGl2ZXBhdGNoLzxwYXRjaD4vPG9iamVjdD4KKyAqIC9zeXMva2VybmVsL2xpdmVwYXRjaC88cGF0Y2g+LzxvYmplY3Q+LzxmdW5jPgorICovCisKK3N0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGtscF9wYXRjaCAqcGF0Y2g7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCXJldCA9IGtzdHJ0b3VsKGJ1ZiwgMTAsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbCAhPSBLTFBfRElTQUJMRUQgJiYgdmFsICE9IEtMUF9FTkFCTEVEKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBhdGNoID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBrbHBfcGF0Y2gsIGtvYmopOworCisJbXV0ZXhfbG9jaygma2xwX211dGV4KTsKKworCWlmICh2YWwgPT0gcGF0Y2gtPnN0YXRlKSB7CisJCS8qIGFscmVhZHkgaW4gcmVxdWVzdGVkIHN0YXRlICovCisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyOworCX0KKworCWlmICh2YWwgPT0gS0xQX0VOQUJMRUQpIHsKKwkJcmV0ID0gX19rbHBfZW5hYmxlX3BhdGNoKHBhdGNoKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyOworCX0gZWxzZSB7CisJCXJldCA9IF9fa2xwX2Rpc2FibGVfcGF0Y2gocGF0Y2gpOworCQlpZiAocmV0KQorCQkJZ290byBlcnI7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZrbHBfbXV0ZXgpOworCisJcmV0dXJuIGNvdW50OworCitlcnI6CisJbXV0ZXhfdW5sb2NrKCZrbHBfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCSAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qga2xwX3BhdGNoICpwYXRjaDsKKworCXBhdGNoID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBrbHBfcGF0Y2gsIGtvYmopOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRS0xLCAiJWRcbiIsIHBhdGNoLT5zdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZW5hYmxlZF9rb2JqX2F0dHIgPSBfX0FUVFJfUlcoZW5hYmxlZCk7CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqa2xwX3BhdGNoX2F0dHJzW10gPSB7CisJJmVuYWJsZWRfa29ial9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHZvaWQga2xwX2tvYmpfcmVsZWFzZV9wYXRjaChzdHJ1Y3Qga29iamVjdCAqa29iaikKK3sKKwkvKgorCSAqIE9uY2Ugd2UgaGF2ZSBhIGNvbnNpc3RlbmN5IG1vZGVsIHdlJ2xsIG5lZWQgdG8gbW9kdWxlX3B1dCgpIHRoZQorCSAqIHBhdGNoIG1vZHVsZSBoZXJlLiAgU2VlIGtscF9yZWdpc3Rlcl9wYXRjaCgpIGZvciBtb3JlIGRldGFpbHMuCisJICovCit9CisKK3N0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGtscF9rdHlwZV9wYXRjaCA9IHsKKwkucmVsZWFzZSA9IGtscF9rb2JqX3JlbGVhc2VfcGF0Y2gsCisJLnN5c2ZzX29wcyA9ICZrb2JqX3N5c2ZzX29wcywKKwkuZGVmYXVsdF9hdHRycyA9IGtscF9wYXRjaF9hdHRycywKK307CisKK3N0YXRpYyB2b2lkIGtscF9rb2JqX3JlbGVhc2VfZnVuYyhzdHJ1Y3Qga29iamVjdCAqa29iaikKK3sKK30KKworc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUga2xwX2t0eXBlX2Z1bmMgPSB7CisJLnJlbGVhc2UgPSBrbHBfa29ial9yZWxlYXNlX2Z1bmMsCisJLnN5c2ZzX29wcyA9ICZrb2JqX3N5c2ZzX29wcywKK307CisKKy8qCisgKiBGcmVlIGFsbCBmdW5jdGlvbnMnIGtvYmplY3RzIGluIHRoZSBhcnJheSB1cCB0byBzb21lIGxpbWl0LiBXaGVuIGxpbWl0IGlzCisgKiBOVUxMLCBhbGwga29iamVjdHMgYXJlIGZyZWVkLgorICovCitzdGF0aWMgdm9pZCBrbHBfZnJlZV9mdW5jc19saW1pdGVkKHN0cnVjdCBrbHBfb2JqZWN0ICpvYmosCisJCQkJICAgc3RydWN0IGtscF9mdW5jICpsaW1pdCkKK3sKKwlzdHJ1Y3Qga2xwX2Z1bmMgKmZ1bmM7CisKKwlmb3IgKGZ1bmMgPSBvYmotPmZ1bmNzOyBmdW5jLT5vbGRfbmFtZSAmJiBmdW5jICE9IGxpbWl0OyBmdW5jKyspCisJCWtvYmplY3RfcHV0KCZmdW5jLT5rb2JqKTsKK30KKworLyogQ2xlYW4gdXAgd2hlbiBhIHBhdGNoZWQgb2JqZWN0IGlzIHVubG9hZGVkICovCitzdGF0aWMgdm9pZCBrbHBfZnJlZV9vYmplY3RfbG9hZGVkKHN0cnVjdCBrbHBfb2JqZWN0ICpvYmopCit7CisJc3RydWN0IGtscF9mdW5jICpmdW5jOworCisJb2JqLT5tb2QgPSBOVUxMOworCisJZm9yIChmdW5jID0gb2JqLT5mdW5jczsgZnVuYy0+b2xkX25hbWU7IGZ1bmMrKykKKwkJZnVuYy0+b2xkX2FkZHIgPSAwOworfQorCisvKgorICogRnJlZSBhbGwgb2JqZWN0cycga29iamVjdHMgaW4gdGhlIGFycmF5IHVwIHRvIHNvbWUgbGltaXQuIFdoZW4gbGltaXQgaXMKKyAqIE5VTEwsIGFsbCBrb2JqZWN0cyBhcmUgZnJlZWQuCisgKi8KK3N0YXRpYyB2b2lkIGtscF9mcmVlX29iamVjdHNfbGltaXRlZChzdHJ1Y3Qga2xwX3BhdGNoICpwYXRjaCwKKwkJCQkgICAgIHN0cnVjdCBrbHBfb2JqZWN0ICpsaW1pdCkKK3sKKwlzdHJ1Y3Qga2xwX29iamVjdCAqb2JqOworCisJZm9yIChvYmogPSBwYXRjaC0+b2Jqczsgb2JqLT5mdW5jcyAmJiBvYmogIT0gbGltaXQ7IG9iaisrKSB7CisJCWtscF9mcmVlX2Z1bmNzX2xpbWl0ZWQob2JqLCBOVUxMKTsKKwkJa29iamVjdF9wdXQob2JqLT5rb2JqKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGtscF9mcmVlX3BhdGNoKHN0cnVjdCBrbHBfcGF0Y2ggKnBhdGNoKQoreworCWtscF9mcmVlX29iamVjdHNfbGltaXRlZChwYXRjaCwgTlVMTCk7CisJaWYgKCFsaXN0X2VtcHR5KCZwYXRjaC0+bGlzdCkpCisJCWxpc3RfZGVsKCZwYXRjaC0+bGlzdCk7CisJa29iamVjdF9wdXQoJnBhdGNoLT5rb2JqKTsKK30KKworc3RhdGljIGludCBrbHBfaW5pdF9mdW5jKHN0cnVjdCBrbHBfb2JqZWN0ICpvYmosIHN0cnVjdCBrbHBfZnVuYyAqZnVuYykKK3sKKwlJTklUX0xJU1RfSEVBRCgmZnVuYy0+c3RhY2tfbm9kZSk7CisJZnVuYy0+c3RhdGUgPSBLTFBfRElTQUJMRUQ7CisKKwlyZXR1cm4ga29iamVjdF9pbml0X2FuZF9hZGQoJmZ1bmMtPmtvYmosICZrbHBfa3R5cGVfZnVuYywKKwkJCQkgICAgb2JqLT5rb2JqLCBmdW5jLT5vbGRfbmFtZSk7Cit9CisKKy8qIHBhcnRzIG9mIHRoZSBpbml0aWFsaXphdGlvbiB0aGF0IGlzIGRvbmUgb25seSB3aGVuIHRoZSBvYmplY3QgaXMgbG9hZGVkICovCitzdGF0aWMgaW50IGtscF9pbml0X29iamVjdF9sb2FkZWQoc3RydWN0IGtscF9wYXRjaCAqcGF0Y2gsCisJCQkJICBzdHJ1Y3Qga2xwX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBrbHBfZnVuYyAqZnVuYzsKKwlpbnQgcmV0OworCisJaWYgKG9iai0+cmVsb2NzKSB7CisJCXJldCA9IGtscF93cml0ZV9vYmplY3RfcmVsb2NhdGlvbnMocGF0Y2gtPm1vZCwgb2JqKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChmdW5jID0gb2JqLT5mdW5jczsgZnVuYy0+b2xkX25hbWU7IGZ1bmMrKykgeworCQlyZXQgPSBrbHBfZmluZF92ZXJpZnlfZnVuY19hZGRyKG9iaiwgZnVuYyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGtscF9pbml0X29iamVjdChzdHJ1Y3Qga2xwX3BhdGNoICpwYXRjaCwgc3RydWN0IGtscF9vYmplY3QgKm9iaikKK3sKKwlzdHJ1Y3Qga2xwX2Z1bmMgKmZ1bmM7CisJaW50IHJldDsKKwljb25zdCBjaGFyICpuYW1lOworCisJaWYgKCFvYmotPmZ1bmNzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW9iai0+c3RhdGUgPSBLTFBfRElTQUJMRUQ7CisKKwlrbHBfZmluZF9vYmplY3RfbW9kdWxlKG9iaik7CisKKwluYW1lID0ga2xwX2lzX21vZHVsZShvYmopID8gb2JqLT5uYW1lIDogInZtbGludXgiOworCW9iai0+a29iaiA9IGtvYmplY3RfY3JlYXRlX2FuZF9hZGQobmFtZSwgJnBhdGNoLT5rb2JqKTsKKwlpZiAoIW9iai0+a29iaikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3IgKGZ1bmMgPSBvYmotPmZ1bmNzOyBmdW5jLT5vbGRfbmFtZTsgZnVuYysrKSB7CisJCXJldCA9IGtscF9pbml0X2Z1bmMob2JqLCBmdW5jKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZnJlZTsKKwl9CisKKwlpZiAoa2xwX2lzX29iamVjdF9sb2FkZWQob2JqKSkgeworCQlyZXQgPSBrbHBfaW5pdF9vYmplY3RfbG9hZGVkKHBhdGNoLCBvYmopOworCQlpZiAocmV0KQorCQkJZ290byBmcmVlOworCX0KKworCXJldHVybiAwOworCitmcmVlOgorCWtscF9mcmVlX2Z1bmNzX2xpbWl0ZWQob2JqLCBmdW5jKTsKKwlrb2JqZWN0X3B1dChvYmotPmtvYmopOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQga2xwX2luaXRfcGF0Y2goc3RydWN0IGtscF9wYXRjaCAqcGF0Y2gpCit7CisJc3RydWN0IGtscF9vYmplY3QgKm9iajsKKwlpbnQgcmV0OworCisJaWYgKCFwYXRjaC0+b2JqcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZrbHBfbXV0ZXgpOworCisJcGF0Y2gtPnN0YXRlID0gS0xQX0RJU0FCTEVEOworCisJcmV0ID0ga29iamVjdF9pbml0X2FuZF9hZGQoJnBhdGNoLT5rb2JqLCAma2xwX2t0eXBlX3BhdGNoLAorCQkJCSAgIGtscF9yb290X2tvYmosIHBhdGNoLT5tb2QtPm5hbWUpOworCWlmIChyZXQpCisJCWdvdG8gdW5sb2NrOworCisJZm9yIChvYmogPSBwYXRjaC0+b2Jqczsgb2JqLT5mdW5jczsgb2JqKyspIHsKKwkJcmV0ID0ga2xwX2luaXRfb2JqZWN0KHBhdGNoLCBvYmopOworCQlpZiAocmV0KQorCQkJZ290byBmcmVlOworCX0KKworCWxpc3RfYWRkX3RhaWwoJnBhdGNoLT5saXN0LCAma2xwX3BhdGNoZXMpOworCisJbXV0ZXhfdW5sb2NrKCZrbHBfbXV0ZXgpOworCisJcmV0dXJuIDA7CisKK2ZyZWU6CisJa2xwX2ZyZWVfb2JqZWN0c19saW1pdGVkKHBhdGNoLCBvYmopOworCWtvYmplY3RfcHV0KCZwYXRjaC0+a29iaik7Cit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZrbHBfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICoga2xwX3VucmVnaXN0ZXJfcGF0Y2goKSAtIHVucmVnaXN0ZXJzIGEgcGF0Y2gKKyAqIEBwYXRjaDoJRGlzYWJsZWQgcGF0Y2ggdG8gYmUgdW5yZWdpc3RlcmVkCisgKgorICogRnJlZXMgdGhlIGRhdGEgc3RydWN0dXJlcyBhbmQgcmVtb3ZlcyB0aGUgc3lzZnMgaW50ZXJmYWNlLgorICoKKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgZXJyb3IKKyAqLworaW50IGtscF91bnJlZ2lzdGVyX3BhdGNoKHN0cnVjdCBrbHBfcGF0Y2ggKnBhdGNoKQoreworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygma2xwX211dGV4KTsKKworCWlmICgha2xwX2lzX3BhdGNoX3JlZ2lzdGVyZWQocGF0Y2gpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwYXRjaC0+c3RhdGUgPT0gS0xQX0VOQUJMRUQpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlrbHBfZnJlZV9wYXRjaChwYXRjaCk7CisKK291dDoKKwltdXRleF91bmxvY2soJmtscF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGtscF91bnJlZ2lzdGVyX3BhdGNoKTsKKworLyoqCisgKiBrbHBfcmVnaXN0ZXJfcGF0Y2goKSAtIHJlZ2lzdGVycyBhIHBhdGNoCisgKiBAcGF0Y2g6CVBhdGNoIHRvIGJlIHJlZ2lzdGVyZWQKKyAqCisgKiBJbml0aWFsaXplcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwYXRjaCBhbmQKKyAqIGNyZWF0ZXMgdGhlIHN5c2ZzIGludGVyZmFjZS4KKyAqCisgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIGVycm9yCisgKi8KK2ludCBrbHBfcmVnaXN0ZXJfcGF0Y2goc3RydWN0IGtscF9wYXRjaCAqcGF0Y2gpCit7CisJaW50IHJldDsKKworCWlmICgha2xwX2luaXRpYWxpemVkKCkpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFwYXRjaCB8fCAhcGF0Y2gtPm1vZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIEEgcmVmZXJlbmNlIGlzIHRha2VuIG9uIHRoZSBwYXRjaCBtb2R1bGUgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nCisJICogdW5sb2FkZWQuICBSaWdodCBub3csIHdlIGRvbid0IGFsbG93IHBhdGNoIG1vZHVsZXMgdG8gdW5sb2FkIHNpbmNlCisJICogdGhlcmUgaXMgY3VycmVudGx5IG5vIG1ldGhvZCB0byBkZXRlcm1pbmUgaWYgYSB0aHJlYWQgaXMgc3RpbGwKKwkgKiBydW5uaW5nIGluIHRoZSBwYXRjaGVkIGNvZGUgY29udGFpbmVkIGluIHRoZSBwYXRjaCBtb2R1bGUgb25jZQorCSAqIHRoZSBmdHJhY2UgcmVnaXN0cmF0aW9uIGlzIHN1Y2Nlc3NmdWwuCisJICovCisJaWYgKCF0cnlfbW9kdWxlX2dldChwYXRjaC0+bW9kKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXQgPSBrbHBfaW5pdF9wYXRjaChwYXRjaCk7CisJaWYgKHJldCkKKwkJbW9kdWxlX3B1dChwYXRjaC0+bW9kKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChrbHBfcmVnaXN0ZXJfcGF0Y2gpOworCitzdGF0aWMgdm9pZCBrbHBfbW9kdWxlX25vdGlmeV9jb21pbmcoc3RydWN0IGtscF9wYXRjaCAqcGF0Y2gsCisJCQkJICAgICBzdHJ1Y3Qga2xwX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBtb2R1bGUgKnBtb2QgPSBwYXRjaC0+bW9kOworCXN0cnVjdCBtb2R1bGUgKm1vZCA9IG9iai0+bW9kOworCWludCByZXQ7CisKKwlyZXQgPSBrbHBfaW5pdF9vYmplY3RfbG9hZGVkKHBhdGNoLCBvYmopOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJaWYgKHBhdGNoLT5zdGF0ZSA9PSBLTFBfRElTQUJMRUQpCisJCXJldHVybjsKKworCXByX25vdGljZSgiYXBwbHlpbmcgcGF0Y2ggJyVzJyB0byBsb2FkaW5nIG1vZHVsZSAnJXMnXG4iLAorCQkgIHBtb2QtPm5hbWUsIG1vZC0+bmFtZSk7CisKKwlyZXQgPSBrbHBfZW5hYmxlX29iamVjdChvYmopOworCWlmICghcmV0KQorCQlyZXR1cm47CisKK2VycjoKKwlwcl93YXJuKCJmYWlsZWQgdG8gYXBwbHkgcGF0Y2ggJyVzJyB0byBtb2R1bGUgJyVzJyAoJWQpXG4iLAorCQlwbW9kLT5uYW1lLCBtb2QtPm5hbWUsIHJldCk7Cit9CisKK3N0YXRpYyB2b2lkIGtscF9tb2R1bGVfbm90aWZ5X2dvaW5nKHN0cnVjdCBrbHBfcGF0Y2ggKnBhdGNoLAorCQkJCSAgICBzdHJ1Y3Qga2xwX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBtb2R1bGUgKnBtb2QgPSBwYXRjaC0+bW9kOworCXN0cnVjdCBtb2R1bGUgKm1vZCA9IG9iai0+bW9kOworCWludCByZXQ7CisKKwlpZiAocGF0Y2gtPnN0YXRlID09IEtMUF9ESVNBQkxFRCkKKwkJZ290byBkaXNhYmxlZDsKKworCXByX25vdGljZSgicmV2ZXJ0aW5nIHBhdGNoICclcycgb24gdW5sb2FkaW5nIG1vZHVsZSAnJXMnXG4iLAorCQkgIHBtb2QtPm5hbWUsIG1vZC0+bmFtZSk7CisKKwlyZXQgPSBrbHBfZGlzYWJsZV9vYmplY3Qob2JqKTsKKwlpZiAocmV0KQorCQlwcl93YXJuKCJmYWlsZWQgdG8gcmV2ZXJ0IHBhdGNoICclcycgb24gbW9kdWxlICclcycgKCVkKVxuIiwKKwkJCXBtb2QtPm5hbWUsIG1vZC0+bmFtZSwgcmV0KTsKKworZGlzYWJsZWQ6CisJa2xwX2ZyZWVfb2JqZWN0X2xvYWRlZChvYmopOworfQorCitzdGF0aWMgaW50IGtscF9tb2R1bGVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCQkJICAgICB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtb2R1bGUgKm1vZCA9IGRhdGE7CisJc3RydWN0IGtscF9wYXRjaCAqcGF0Y2g7CisJc3RydWN0IGtscF9vYmplY3QgKm9iajsKKworCWlmIChhY3Rpb24gIT0gTU9EVUxFX1NUQVRFX0NPTUlORyAmJiBhY3Rpb24gIT0gTU9EVUxFX1NUQVRFX0dPSU5HKQorCQlyZXR1cm4gMDsKKworCW11dGV4X2xvY2soJmtscF9tdXRleCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdGNoLCAma2xwX3BhdGNoZXMsIGxpc3QpIHsKKwkJZm9yIChvYmogPSBwYXRjaC0+b2Jqczsgb2JqLT5mdW5jczsgb2JqKyspIHsKKwkJCWlmICgha2xwX2lzX21vZHVsZShvYmopIHx8IHN0cmNtcChvYmotPm5hbWUsIG1vZC0+bmFtZSkpCisJCQkJY29udGludWU7CisKKwkJCWlmIChhY3Rpb24gPT0gTU9EVUxFX1NUQVRFX0NPTUlORykgeworCQkJCW9iai0+bW9kID0gbW9kOworCQkJCWtscF9tb2R1bGVfbm90aWZ5X2NvbWluZyhwYXRjaCwgb2JqKTsKKwkJCX0gZWxzZSAvKiBNT0RVTEVfU1RBVEVfR09JTkcgKi8KKwkJCQlrbHBfbW9kdWxlX25vdGlmeV9nb2luZyhwYXRjaCwgb2JqKTsKKworCQkJYnJlYWs7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJmtscF9tdXRleCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBrbHBfbW9kdWxlX25iID0geworCS5ub3RpZmllcl9jYWxsID0ga2xwX21vZHVsZV9ub3RpZnksCisJLnByaW9yaXR5ID0gSU5UX01JTisxLCAvKiBjYWxsZWQgbGF0ZSBidXQgYmVmb3JlIGZ0cmFjZSBub3RpZmllciAqLworfTsKKworc3RhdGljIGludCBrbHBfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBrbHBfY2hlY2tfY29tcGlsZXJfc3VwcG9ydCgpOworCWlmIChyZXQpIHsKKwkJcHJfaW5mbygiWW91ciBjb21waWxlciBpcyB0b28gb2xkOyB0dXJuaW5nIG9mZi5cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSByZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoJmtscF9tb2R1bGVfbmIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlrbHBfcm9vdF9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgibGl2ZXBhdGNoIiwga2VybmVsX2tvYmopOworCWlmICgha2xwX3Jvb3Rfa29iaikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHVucmVnaXN0ZXI7CisJfQorCisJcmV0dXJuIDA7CisKK3VucmVnaXN0ZXI6CisJdW5yZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoJmtscF9tb2R1bGVfbmIpOworCXJldHVybiByZXQ7Cit9CisKK21vZHVsZV9pbml0KGtscF9pbml0KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL01ha2VmaWxlIGIva2VybmVsL2xvY2tpbmcvTWFrZWZpbGUKaW5kZXggODU0MWJmZC4uZGU3YTQxNiAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvTWFrZWZpbGUKKysrIGIva2VybmVsL2xvY2tpbmcvTWFrZWZpbGUKQEAgLTEsMTEgKzEsMTEgQEAKIAotb2JqLXkgKz0gbXV0ZXgubyBzZW1hcGhvcmUubyByd3NlbS5vIG1jc19zcGlubG9jay5vCitvYmoteSArPSBtdXRleC5vIHNlbWFwaG9yZS5vIHJ3c2VtLm8KIAogaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgotQ0ZMQUdTX1JFTU9WRV9sb2NrZGVwLm8gPSAtcGcKLUNGTEFHU19SRU1PVkVfbG9ja2RlcF9wcm9jLm8gPSAtcGcKLUNGTEFHU19SRU1PVkVfbXV0ZXgtZGVidWcubyA9IC1wZwotQ0ZMQUdTX1JFTU9WRV9ydG11dGV4LWRlYnVnLm8gPSAtcGcKK0NGTEFHU19SRU1PVkVfbG9ja2RlcC5vID0gJChDQ19GTEFHU19GVFJBQ0UpCitDRkxBR1NfUkVNT1ZFX2xvY2tkZXBfcHJvYy5vID0gJChDQ19GTEFHU19GVFJBQ0UpCitDRkxBR1NfUkVNT1ZFX211dGV4LWRlYnVnLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSkKK0NGTEFHU19SRU1PVkVfcnRtdXRleC1kZWJ1Zy5vID0gJChDQ19GTEFHU19GVFJBQ0UpCiBlbmRpZgogCiBvYmotJChDT05GSUdfREVCVUdfTVVURVhFUykgKz0gbXV0ZXgtZGVidWcubwpAQCAtMTQsNiArMTQsNyBAQAogb2JqLSQoQ09ORklHX0xPQ0tERVApICs9IGxvY2tkZXBfcHJvYy5vCiBlbmRpZgogb2JqLSQoQ09ORklHX1NNUCkgKz0gc3BpbmxvY2subworb2JqLSQoQ09ORklHX0xPQ0tfU1BJTl9PTl9PV05FUikgKz0gb3NxX2xvY2subwogb2JqLSQoQ09ORklHX1NNUCkgKz0gbGdsb2NrLm8KIG9iai0kKENPTkZJR19QUk9WRV9MT0NLSU5HKSArPSBzcGlubG9jay5vCiBvYmotJChDT05GSUdfUlRfTVVURVhFUykgKz0gcnRtdXRleC5vCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9tY3Nfc3BpbmxvY2suaCBiL2tlcm5lbC9sb2NraW5nL21jc19zcGlubG9jay5oCmluZGV4IDRkNjA5ODYuLmQxZmUyYmEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NraW5nL21jc19zcGlubG9jay5oCisrKyBiL2tlcm5lbC9sb2NraW5nL21jc19zcGlubG9jay5oCkBAIC0xMDgsMjAgKzEwOCw0IEBACiAJYXJjaF9tY3Nfc3Bpbl91bmxvY2tfY29udGVuZGVkKCZuZXh0LT5sb2NrZWQpOwogfQogCi0vKgotICogQ2FuY2VsbGFibGUgdmVyc2lvbiBvZiB0aGUgTUNTIGxvY2sgYWJvdmUuCi0gKgotICogSW50ZW5kZWQgZm9yIGFkYXB0aXZlIHNwaW5uaW5nIG9mIHNsZWVwaW5nIGxvY2tzOgotICogbXV0ZXhfbG9jaygpL3J3c2VtX2Rvd25fe3JlYWQsd3JpdGV9KCkgZXRjLgotICovCi0KLXN0cnVjdCBvcHRpbWlzdGljX3NwaW5fbm9kZSB7Ci0Jc3RydWN0IG9wdGltaXN0aWNfc3Bpbl9ub2RlICpuZXh0LCAqcHJldjsKLQlpbnQgbG9ja2VkOyAvKiAxIGlmIGxvY2sgYWNxdWlyZWQgKi8KLQlpbnQgY3B1OyAvKiBlbmNvZGVkIENQVSAjIHZhbHVlICovCi19OwotCi1leHRlcm4gYm9vbCBvc3FfbG9jayhzdHJ1Y3Qgb3B0aW1pc3RpY19zcGluX3F1ZXVlICpsb2NrKTsKLWV4dGVybiB2b2lkIG9zcV91bmxvY2soc3RydWN0IG9wdGltaXN0aWNfc3Bpbl9xdWV1ZSAqbG9jayk7Ci0KICNlbmRpZiAvKiBfX0xJTlVYX01DU19TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9tdXRleC5jIGIva2VybmVsL2xvY2tpbmcvbXV0ZXguYwppbmRleCA0NTQxOTUxLi45NDY3NGU1IDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2luZy9tdXRleC5jCisrKyBiL2tlcm5lbC9sb2NraW5nL211dGV4LmMKQEAgLTgxLDcgKzgxLDcgQEAKICAqIFRoZSBtdXRleCBtdXN0IGxhdGVyIG9uIGJlIHJlbGVhc2VkIGJ5IHRoZSBzYW1lIHRhc2sgdGhhdAogICogYWNxdWlyZWQgaXQuIFJlY3Vyc2l2ZSBsb2NraW5nIGlzIG5vdCBhbGxvd2VkLiBUaGUgdGFzawogICogbWF5IG5vdCBleGl0IHdpdGhvdXQgZmlyc3QgdW5sb2NraW5nIHRoZSBtdXRleC4gQWxzbywga2VybmVsCi0gKiBtZW1vcnkgd2hlcmUgdGhlIG11dGV4IHJlc2lkZXMgbXV0ZXggbXVzdCBub3QgYmUgZnJlZWQgd2l0aAorICogbWVtb3J5IHdoZXJlIHRoZSBtdXRleCByZXNpZGVzIG11c3Qgbm90IGJlIGZyZWVkIHdpdGgKICAqIHRoZSBtdXRleCBzdGlsbCBsb2NrZWQuIFRoZSBtdXRleCBtdXN0IGZpcnN0IGJlIGluaXRpYWxpemVkCiAgKiAob3Igc3RhdGljYWxseSBkZWZpbmVkKSBiZWZvcmUgaXQgY2FuIGJlIGxvY2tlZC4gbWVtc2V0KCktaW5nCiAgKiB0aGUgbXV0ZXggdG8gMCBpcyBub3QgYWxsb3dlZC4KQEAgLTE0Nyw3ICsxNDcsNyBAQAogfQogCiAvKgotICogYWZ0ZXIgYWNxdWlyaW5nIGxvY2sgd2l0aCBmYXN0cGF0aCBvciB3aGVuIHdlIGxvc3Qgb3V0IGluIGNvbnRlc3RlZAorICogQWZ0ZXIgYWNxdWlyaW5nIGxvY2sgd2l0aCBmYXN0cGF0aCBvciB3aGVuIHdlIGxvc3Qgb3V0IGluIGNvbnRlc3RlZAogICogc2xvd3BhdGgsIHNldCBjdHggYW5kIHdha2UgdXAgYW55IHdhaXRlcnMgc28gdGhleSBjYW4gcmVjaGVjay4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZCB3aGVuIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIHNldCwKQEAgLTE5MSwxOSArMTkxLDMyIEBACiAJc3Bpbl91bmxvY2tfbXV0ZXgoJmxvY2stPmJhc2Uud2FpdF9sb2NrLCBmbGFncyk7CiB9CiAKKy8qCisgKiBBZnRlciBhY3F1aXJpbmcgbG9jayBpbiB0aGUgc2xvd3BhdGggc2V0IGN0eCBhbmQgd2FrZSB1cCBhbnkKKyAqIHdhaXRlcnMgc28gdGhleSBjYW4gcmVjaGVjay4KKyAqCisgKiBDYWxsZXJzIG11c3QgaG9sZCB0aGUgbXV0ZXggd2FpdF9sb2NrLgorICovCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQKK3d3X211dGV4X3NldF9jb250ZXh0X3Nsb3dwYXRoKHN0cnVjdCB3d19tdXRleCAqbG9jaywKKwkJCSAgICAgIHN0cnVjdCB3d19hY3F1aXJlX2N0eCAqY3R4KQoreworCXN0cnVjdCBtdXRleF93YWl0ZXIgKmN1cjsKKworCXd3X211dGV4X2xvY2tfYWNxdWlyZWQobG9jaywgY3R4KTsKKwlsb2NrLT5jdHggPSBjdHg7CisKKwkvKgorCSAqIEdpdmUgYW55IHBvc3NpYmxlIHNsZWVwaW5nIHByb2Nlc3NlcyB0aGUgY2hhbmNlIHRvIHdha2UgdXAsCisJICogc28gdGhleSBjYW4gcmVjaGVjayBpZiB0aGV5IGhhdmUgdG8gYmFjayBvZmYuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjdXIsICZsb2NrLT5iYXNlLndhaXRfbGlzdCwgbGlzdCkgeworCQlkZWJ1Z19tdXRleF93YWtlX3dhaXRlcigmbG9jay0+YmFzZSwgY3VyKTsKKwkJd2FrZV91cF9wcm9jZXNzKGN1ci0+dGFzayk7CisJfQorfQogCiAjaWZkZWYgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIKLS8qCi0gKiBJbiBvcmRlciB0byBhdm9pZCBhIHN0YW1wZWRlIG9mIG11dGV4IHNwaW5uZXJzIGZyb20gYWNxdWlyaW5nIHRoZSBtdXRleAotICogbW9yZSBvciBsZXNzIHNpbXVsdGFuZW91c2x5LCB0aGUgc3Bpbm5lcnMgbmVlZCB0byBhY3F1aXJlIGEgTUNTIGxvY2sKLSAqIGZpcnN0IGJlZm9yZSBzcGlubmluZyBvbiB0aGUgb3duZXIgZmllbGQuCi0gKgotICovCi0KLS8qCi0gKiBNdXRleCBzcGlubmluZyBjb2RlIG1pZ3JhdGVkIGZyb20ga2VybmVsL3NjaGVkL2NvcmUuYwotICovCi0KIHN0YXRpYyBpbmxpbmUgYm9vbCBvd25lcl9ydW5uaW5nKHN0cnVjdCBtdXRleCAqbG9jaywgc3RydWN0IHRhc2tfc3RydWN0ICpvd25lcikKIHsKIAlpZiAobG9jay0+b3duZXIgIT0gb3duZXIpCkBAIC0zMDcsNiArMzIwLDExIEBACiAJaWYgKCFtdXRleF9jYW5fc3Bpbl9vbl9vd25lcihsb2NrKSkKIAkJZ290byBkb25lOwogCisJLyoKKwkgKiBJbiBvcmRlciB0byBhdm9pZCBhIHN0YW1wZWRlIG9mIG11dGV4IHNwaW5uZXJzIHRyeWluZyB0bworCSAqIGFjcXVpcmUgdGhlIG11dGV4IGFsbCBhdCBvbmNlLCB0aGUgc3Bpbm5lcnMgbmVlZCB0byB0YWtlIGEKKwkgKiBNQ1MgKHF1ZXVlZCkgbG9jayBmaXJzdCBiZWZvcmUgc3Bpbm5pbmcgb24gdGhlIG93bmVyIGZpZWxkLgorCSAqLwogCWlmICghb3NxX2xvY2soJmxvY2stPm9zcSkpCiAJCWdvdG8gZG9uZTsKIApAQCAtNDY5LDcgKzQ4Nyw3IEBACiBFWFBPUlRfU1lNQk9MKHd3X211dGV4X3VubG9jayk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IF9fc2NoZWQKLV9fbXV0ZXhfbG9ja19jaGVja19zdGFtcChzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCB3d19hY3F1aXJlX2N0eCAqY3R4KQorX193d19tdXRleF9sb2NrX2NoZWNrX3N0YW1wKHN0cnVjdCBtdXRleCAqbG9jaywgc3RydWN0IHd3X2FjcXVpcmVfY3R4ICpjdHgpCiB7CiAJc3RydWN0IHd3X211dGV4ICp3dyA9IGNvbnRhaW5lcl9vZihsb2NrLCBzdHJ1Y3Qgd3dfbXV0ZXgsIGJhc2UpOwogCXN0cnVjdCB3d19hY3F1aXJlX2N0eCAqaG9sZF9jdHggPSBBQ0NFU1NfT05DRSh3dy0+Y3R4KTsKQEAgLTU1Nyw3ICs1NzUsNyBAQAogCQl9CiAKIAkJaWYgKHVzZV93d19jdHggJiYgd3dfY3R4LT5hY3F1aXJlZCA+IDApIHsKLQkJCXJldCA9IF9fbXV0ZXhfbG9ja19jaGVja19zdGFtcChsb2NrLCB3d19jdHgpOworCQkJcmV0ID0gX193d19tdXRleF9sb2NrX2NoZWNrX3N0YW1wKGxvY2ssIHd3X2N0eCk7CiAJCQlpZiAocmV0KQogCQkJCWdvdG8gZXJyOwogCQl9CkBAIC01NjksNiArNTg3LDggQEAKIAkJc2NoZWR1bGVfcHJlZW1wdF9kaXNhYmxlZCgpOwogCQlzcGluX2xvY2tfbXV0ZXgoJmxvY2stPndhaXRfbG9jaywgZmxhZ3MpOwogCX0KKwlfX3NldF90YXNrX3N0YXRlKHRhc2ssIFRBU0tfUlVOTklORyk7CisKIAltdXRleF9yZW1vdmVfd2FpdGVyKGxvY2ssICZ3YWl0ZXIsIGN1cnJlbnRfdGhyZWFkX2luZm8oKSk7CiAJLyogc2V0IGl0IHRvIDAgaWYgdGhlcmUgYXJlIG5vIHdhaXRlcnMgbGVmdDogKi8KIAlpZiAobGlrZWx5KGxpc3RfZW1wdHkoJmxvY2stPndhaXRfbGlzdCkpKQpAQCAtNTgyLDIzICs2MDIsNyBAQAogCiAJaWYgKHVzZV93d19jdHgpIHsKIAkJc3RydWN0IHd3X211dGV4ICp3dyA9IGNvbnRhaW5lcl9vZihsb2NrLCBzdHJ1Y3Qgd3dfbXV0ZXgsIGJhc2UpOwotCQlzdHJ1Y3QgbXV0ZXhfd2FpdGVyICpjdXI7Ci0KLQkJLyoKLQkJICogVGhpcyBicmFuY2ggZ2V0cyBvcHRpbWl6ZWQgb3V0IGZvciB0aGUgY29tbW9uIGNhc2UsCi0JCSAqIGFuZCBpcyBvbmx5IGltcG9ydGFudCBmb3Igd3dfbXV0ZXhfbG9jay4KLQkJICovCi0JCXd3X211dGV4X2xvY2tfYWNxdWlyZWQod3csIHd3X2N0eCk7Ci0JCXd3LT5jdHggPSB3d19jdHg7Ci0KLQkJLyoKLQkJICogR2l2ZSBhbnkgcG9zc2libGUgc2xlZXBpbmcgcHJvY2Vzc2VzIHRoZSBjaGFuY2UgdG8gd2FrZSB1cCwKLQkJICogc28gdGhleSBjYW4gcmVjaGVjayBpZiB0aGV5IGhhdmUgdG8gYmFjayBvZmYuCi0JCSAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1ciwgJmxvY2stPndhaXRfbGlzdCwgbGlzdCkgewotCQkJZGVidWdfbXV0ZXhfd2FrZV93YWl0ZXIobG9jaywgY3VyKTsKLQkJCXdha2VfdXBfcHJvY2VzcyhjdXItPnRhc2spOwotCQl9CisJCXd3X211dGV4X3NldF9jb250ZXh0X3Nsb3dwYXRoKHd3LCB3d19jdHgpOwogCX0KIAogCXNwaW5fdW5sb2NrX211dGV4KCZsb2NrLT53YWl0X2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL21jc19zcGlubG9jay5jIGIva2VybmVsL2xvY2tpbmcvb3NxX2xvY2suYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBrZXJuZWwvbG9ja2luZy9tY3Nfc3BpbmxvY2suYwpyZW5hbWUgdG8ga2VybmVsL2xvY2tpbmcvb3NxX2xvY2suYwppbmRleCA5ODg3YTkwLi5jMTEyZDAwIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2luZy9tY3Nfc3BpbmxvY2suYworKysgYi9rZXJuZWwvbG9ja2luZy9vc3FfbG9jay5jCkBAIC0xLDggKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSAibWNzX3NwaW5sb2NrLmgiCi0KLSNpZmRlZiBDT05GSUdfU01QCisjaW5jbHVkZSA8bGludXgvb3NxX2xvY2suaD4KIAogLyoKICAqIEFuIE1DUyBsaWtlIGxvY2sgZXNwZWNpYWxseSB0YWlsb3JlZCBmb3Igb3B0aW1pc3RpYyBzcGlubmluZyBmb3Igc2xlZXBpbmcKQEAgLTExMSw3ICsxMDksNyBAQAogCSAqIGNtcHhjaGcgaW4gYW4gYXR0ZW1wdCB0byB1bmRvIG91ciBxdWV1ZWluZy4KIAkgKi8KIAotCXdoaWxlICghc21wX2xvYWRfYWNxdWlyZSgmbm9kZS0+bG9ja2VkKSkgeworCXdoaWxlICghQUNDRVNTX09OQ0Uobm9kZS0+bG9ja2VkKSkgewogCQkvKgogCQkgKiBJZiB3ZSBuZWVkIHRvIHJlc2NoZWR1bGUgYmFpbC4uLiBzbyB3ZSBjYW4gYmxvY2suCiAJCSAqLwpAQCAtMjAzLDYgKzIwMSwzIEBACiAJaWYgKG5leHQpCiAJCUFDQ0VTU19PTkNFKG5leHQtPmxvY2tlZCkgPSAxOwogfQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvcnRtdXRleC5jIGIva2VybmVsL2xvY2tpbmcvcnRtdXRleC5jCmluZGV4IDdjOTg4NzMuLjMwNTliYzJmIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2luZy9ydG11dGV4LmMKKysrIGIva2VybmVsL2xvY2tpbmcvcnRtdXRleC5jCkBAIC0xMTMwLDYgKzExMzAsNyBAQAogCQlzZXRfY3VycmVudF9zdGF0ZShzdGF0ZSk7CiAJfQogCisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTExODgsMTAgKzExODksOSBAQAogCXJldCA9IHRhc2tfYmxvY2tzX29uX3J0X211dGV4KGxvY2ssICZ3YWl0ZXIsIGN1cnJlbnQsIGNod2Fsayk7CiAKIAlpZiAobGlrZWx5KCFyZXQpKQorCQkvKiBzbGVlcCBvbiB0aGUgbXV0ZXggKi8KIAkJcmV0ID0gX19ydF9tdXRleF9zbG93bG9jayhsb2NrLCBzdGF0ZSwgdGltZW91dCwgJndhaXRlcik7CiAKLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotCiAJaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJcmVtb3ZlX3dhaXRlcihsb2NrLCAmd2FpdGVyKTsKIAkJcnRfbXV0ZXhfaGFuZGxlX2RlYWRsb2NrKHJldCwgY2h3YWxrLCAmd2FpdGVyKTsKQEAgLTE2MjYsMTAgKzE2MjYsOSBAQAogCiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAorCS8qIHNsZWVwIG9uIHRoZSBtdXRleCAqLwogCXJldCA9IF9fcnRfbXV0ZXhfc2xvd2xvY2sobG9jaywgVEFTS19JTlRFUlJVUFRJQkxFLCB0bywgd2FpdGVyKTsKIAotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0KIAlpZiAodW5saWtlbHkocmV0KSkKIAkJcmVtb3ZlX3dhaXRlcihsb2NrLCB3YWl0ZXIpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9yd3NlbS1zcGlubG9jay5jIGIva2VybmVsL2xvY2tpbmcvcndzZW0tc3BpbmxvY2suYwppbmRleCAyYzkzNTcxLi4yNTU1YWUxIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2luZy9yd3NlbS1zcGlubG9jay5jCisrKyBiL2tlcm5lbC9sb2NraW5nL3J3c2VtLXNwaW5sb2NrLmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCQlzZXRfdGFza19zdGF0ZSh0c2ssIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAl9CiAKLQl0c2stPnN0YXRlID0gVEFTS19SVU5OSU5HOworCV9fc2V0X3Rhc2tfc3RhdGUodHNrLCBUQVNLX1JVTk5JTkcpOwogIG91dDoKIAk7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9yd3NlbS14YWRkLmMgYi9rZXJuZWwvbG9ja2luZy9yd3NlbS14YWRkLmMKaW5kZXggNzYyOGMzZi4uMmY3Y2M0MCAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvcndzZW0teGFkZC5jCisrKyBiL2tlcm5lbC9sb2NraW5nL3J3c2VtLXhhZGQuYwpAQCAtMjQyLDggKzI0Miw3IEBACiAJCXNjaGVkdWxlKCk7CiAJfQogCi0JdHNrLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQorCV9fc2V0X3Rhc2tfc3RhdGUodHNrLCBUQVNLX1JVTk5JTkcpOwogCXJldHVybiBzZW07CiB9CiBFWFBPUlRfU1lNQk9MKHJ3c2VtX2Rvd25fcmVhZF9mYWlsZWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvc3BpbmxvY2suYyBiL2tlcm5lbC9sb2NraW5nL3NwaW5sb2NrLmMKaW5kZXggNGIwODJiNS4uZGIzY2NiMSAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tpbmcvc3BpbmxvY2suYworKysgYi9rZXJuZWwvbG9ja2luZy9zcGlubG9jay5jCkBAIC0zNjMsNiArMzYzLDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MKF9yYXdfc3Bpbl9sb2NrX25lc3RlZCk7CiAKK3ZvaWQgX19sb2NrZnVuYyBfcmF3X3NwaW5fbG9ja19iaF9uZXN0ZWQocmF3X3NwaW5sb2NrX3QgKmxvY2ssIGludCBzdWJjbGFzcykKK3sKKwlfX2xvY2FsX2JoX2Rpc2FibGVfaXAoX1JFVF9JUF8sIFNPRlRJUlFfTE9DS19PRkZTRVQpOworCXNwaW5fYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgc3ViY2xhc3MsIDAsIF9SRVRfSVBfKTsKKwlMT0NLX0NPTlRFTkRFRChsb2NrLCBkb19yYXdfc3Bpbl90cnlsb2NrLCBkb19yYXdfc3Bpbl9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0woX3Jhd19zcGluX2xvY2tfYmhfbmVzdGVkKTsKKwogdW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF9yYXdfc3Bpbl9sb2NrX2lycXNhdmVfbmVzdGVkKHJhd19zcGlubG9ja190ICpsb2NrLAogCQkJCQkJICAgaW50IHN1YmNsYXNzKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL25vdGlmaWVyLmMgYi9rZXJuZWwvbm90aWZpZXIuYwppbmRleCA0ODAzZGE2Li5hZTlmYzdjIDEwMDY0NAotLS0gYS9rZXJuZWwvbm90aWZpZXIuYworKysgYi9rZXJuZWwvbm90aWZpZXIuYwpAQCAtNDAyLDYgKzQwMiw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyYXdfbm90aWZpZXJfY2FsbF9jaGFpbik7CiAKKyNpZmRlZiBDT05GSUdfU1JDVQogLyoKICAqCVNSQ1Ugbm90aWZpZXIgY2hhaW4gcm91dGluZXMuICAgIFJlZ2lzdHJhdGlvbiBhbmQgdW5yZWdpc3RyYXRpb24KICAqCXVzZSBhIG11dGV4LCBhbmQgY2FsbF9jaGFpbiBpcyBzeW5jaHJvbml6ZWQgYnkgU1JDVSAobm8gbG9ja3MpLgpAQCAtNTI4LDYgKzUyOSw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcmN1X2luaXRfbm90aWZpZXJfaGVhZCk7CiAKKyNlbmRpZiAvKiBDT05GSUdfU1JDVSAqLworCiBzdGF0aWMgQVRPTUlDX05PVElGSUVSX0hFQUQoZGllX2NoYWluKTsKIAogaW50IG5vdHJhY2Ugbm90aWZ5X2RpZShlbnVtIGRpZV92YWwgdmFsLCBjb25zdCBjaGFyICpzdHIsCmRpZmYgLS1naXQgYS9rZXJuZWwvcGFuaWMuYyBiL2tlcm5lbC9wYW5pYy5jCmluZGV4IDRkOGQ2ZjkuLjgxMzZhZDcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYW5pYy5jCisrKyBiL2tlcm5lbC9wYW5pYy5jCkBAIC0yMjYsNiArMjI2LDcgQEAKIAl7IFRBSU5UX09PVF9NT0RVTEUsCQknTycsICcgJyB9LAogCXsgVEFJTlRfVU5TSUdORURfTU9EVUxFLAknRScsICcgJyB9LAogCXsgVEFJTlRfU09GVExPQ0tVUCwJCSdMJywgJyAnIH0sCisJeyBUQUlOVF9MSVZFUEFUQ0gsCQknSycsICcgJyB9LAogfTsKIAogLyoqCkBAIC0yNDYsNiArMjQ3LDcgQEAKICAqICAnTycgLSBPdXQtb2YtdHJlZSBtb2R1bGUgaGFzIGJlZW4gbG9hZGVkLgogICogICdFJyAtIFVuc2lnbmVkIG1vZHVsZSBoYXMgYmVlbiBsb2FkZWQuCiAgKiAgJ0wnIC0gQSBzb2Z0IGxvY2t1cCBoYXMgcHJldmlvdXNseSBvY2N1cnJlZC4KKyAqICAnSycgLSBLZXJuZWwgaGFzIGJlZW4gbGl2ZSBwYXRjaGVkLgogICoKICAqCVRoZSBzdHJpbmcgaXMgb3ZlcndyaXR0ZW4gYnkgdGhlIG5leHQgY2FsbCB0byBwcmludF90YWludGVkKCkuCiAgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9LY29uZmlnIGIva2VybmVsL3Bvd2VyL0tjb25maWcKaW5kZXggNDhiMjhkMy4uN2UwMWY3OCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL0tjb25maWcKKysrIGIva2VybmVsL3Bvd2VyL0tjb25maWcKQEAgLTI1MSw2ICsyNTEsNyBAQAogCiBjb25maWcgUE1fT1BQCiAJYm9vbAorCXNlbGVjdCBTUkNVCiAJLS0taGVscC0tLQogCSAgU09DcyBoYXZlIGEgc3RhbmRhcmQgc2V0IG9mIHR1cGxlcyBjb25zaXN0aW5nIG9mIGZyZXF1ZW5jeSBhbmQKIAkgIHZvbHRhZ2UgcGFpcnMgdGhhdCB0aGUgZGV2aWNlIHdpbGwgc3VwcG9ydCBwZXIgdm9sdGFnZSBkb21haW4uIFRoaXMKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMgYi9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCmluZGV4IDVhNmVjODYuLjU2NGY3ODYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKKysrIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwpAQCAtODQsOCArODQsOCBAQAogCWVsYXBzZWRfbXNlY3MgPSBlbGFwc2VkX21zZWNzNjQ7CiAKIAlpZiAodG9kbykgewotCQlwcmludGsoIlxuIik7Ci0JCXByaW50ayhLRVJOX0VSUiAiRnJlZXppbmcgb2YgdGFza3MgJXMgYWZ0ZXIgJWQuJTAzZCBzZWNvbmRzICIKKwkJcHJfY29udCgiXG4iKTsKKwkJcHJfZXJyKCJGcmVlemluZyBvZiB0YXNrcyAlcyBhZnRlciAlZC4lMDNkIHNlY29uZHMgIgogCQkgICAgICAgIiglZCB0YXNrcyByZWZ1c2luZyB0byBmcmVlemUsIHdxX2J1c3k9JWQpOlxuIiwKIAkJICAgICAgIHdha2V1cCA/ICJhYm9ydGVkIiA6ICJmYWlsZWQiLAogCQkgICAgICAgZWxhcHNlZF9tc2VjcyAvIDEwMDAsIGVsYXBzZWRfbXNlY3MgJSAxMDAwLApAQCAtMTAxLDM3ICsxMDEsMTMgQEAKIAkJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJfQogCX0gZWxzZSB7Ci0JCXByaW50aygiKGVsYXBzZWQgJWQuJTAzZCBzZWNvbmRzKSAiLCBlbGFwc2VkX21zZWNzIC8gMTAwMCwKKwkJcHJfY29udCgiKGVsYXBzZWQgJWQuJTAzZCBzZWNvbmRzKSAiLCBlbGFwc2VkX21zZWNzIC8gMTAwMCwKIAkJCWVsYXBzZWRfbXNlY3MgJSAxMDAwKTsKIAl9CiAKIAlyZXR1cm4gdG9kbyA/IC1FQlVTWSA6IDA7CiB9CiAKLXN0YXRpYyBib29sIF9fY2hlY2tfZnJvemVuX3Byb2Nlc3Nlcyh2b2lkKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7Ci0KLQlmb3JfZWFjaF9wcm9jZXNzX3RocmVhZChnLCBwKQotCQlpZiAocCAhPSBjdXJyZW50ICYmICFmcmVlemVyX3Nob3VsZF9za2lwKHApICYmICFmcm96ZW4ocCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFJldHVybnMgdHJ1ZSBpZiBhbGwgZnJlZXphYmxlIHRhc2tzIChleGNlcHQgZm9yIGN1cnJlbnQpIGFyZSBmcm96ZW4gYWxyZWFkeQotICovCi1zdGF0aWMgYm9vbCBjaGVja19mcm96ZW5fcHJvY2Vzc2VzKHZvaWQpCi17Ci0JYm9vbCByZXQ7Ci0KLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwotCXJldCA9IF9fY2hlY2tfZnJvemVuX3Byb2Nlc3NlcygpOwotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCiAvKioKICAqIGZyZWV6ZV9wcm9jZXNzZXMgLSBTaWduYWwgdXNlciBzcGFjZSBwcm9jZXNzZXMgdG8gZW50ZXIgdGhlIHJlZnJpZ2VyYXRvci4KICAqIFRoZSBjdXJyZW50IHRocmVhZCB3aWxsIG5vdCBiZSBmcm96ZW4uICBUaGUgc2FtZSBwcm9jZXNzIHRoYXQgY2FsbHMKQEAgLTE0Miw3ICsxMTgsNiBAQAogaW50IGZyZWV6ZV9wcm9jZXNzZXModm9pZCkKIHsKIAlpbnQgZXJyb3I7Ci0JaW50IG9vbV9raWxsc19zYXZlZDsKIAogCWVycm9yID0gX191c2VybW9kZWhlbHBlcl9kaXNhYmxlKFVNSF9GUkVFWklORyk7CiAJaWYgKGVycm9yKQpAQCAtMTU1LDMxICsxMzAsMjQgQEAKIAkJYXRvbWljX2luYygmc3lzdGVtX2ZyZWV6aW5nX2NudCk7CiAKIAlwbV93YWtldXBfY2xlYXIoKTsKLQlwcmludGsoIkZyZWV6aW5nIHVzZXIgc3BhY2UgcHJvY2Vzc2VzIC4uLiAiKTsKKwlwcl9pbmZvKCJGcmVlemluZyB1c2VyIHNwYWNlIHByb2Nlc3NlcyAuLi4gIik7CiAJcG1fZnJlZXppbmcgPSB0cnVlOwotCW9vbV9raWxsc19zYXZlZCA9IG9vbV9raWxsc19jb3VudCgpOwogCWVycm9yID0gdHJ5X3RvX2ZyZWV6ZV90YXNrcyh0cnVlKTsKIAlpZiAoIWVycm9yKSB7CiAJCV9fdXNlcm1vZGVoZWxwZXJfc2V0X2Rpc2FibGVfZGVwdGgoVU1IX0RJU0FCTEVEKTsKLQkJb29tX2tpbGxlcl9kaXNhYmxlKCk7Ci0KLQkJLyoKLQkJICogVGhlcmUgbWlnaHQgaGF2ZSBiZWVuIGFuIE9PTSBraWxsIHdoaWxlIHdlIHdlcmUKLQkJICogZnJlZXppbmcgdGFza3MgYW5kIHRoZSBraWxsZWQgdGFzayBtaWdodCBiZSBzdGlsbAotCQkgKiBvbiB0aGUgd2F5IG91dCBzbyB3ZSBoYXZlIHRvIGRvdWJsZSBjaGVjayBmb3IgcmFjZS4KLQkJICovCi0JCWlmIChvb21fa2lsbHNfY291bnQoKSAhPSBvb21fa2lsbHNfc2F2ZWQgJiYKLQkJICAgICFjaGVja19mcm96ZW5fcHJvY2Vzc2VzKCkpIHsKLQkJCV9fdXNlcm1vZGVoZWxwZXJfc2V0X2Rpc2FibGVfZGVwdGgoVU1IX0VOQUJMRUQpOwotCQkJcHJpbnRrKCJPT00gaW4gcHJvZ3Jlc3MuIik7Ci0JCQllcnJvciA9IC1FQlVTWTsKLQkJfSBlbHNlIHsKLQkJCXByaW50aygiZG9uZS4iKTsKLQkJfQorCQlwcl9jb250KCJkb25lLiIpOwogCX0KLQlwcmludGsoIlxuIik7CisJcHJfY29udCgiXG4iKTsKIAlCVUdfT04oaW5fYXRvbWljKCkpOwogCisJLyoKKwkgKiBOb3cgdGhhdCB0aGUgd2hvbGUgdXNlcnNwYWNlIGlzIGZyb3plbiB3ZSBuZWVkIHRvIGRpc2JhbGUKKwkgKiB0aGUgT09NIGtpbGxlciB0byBkaXNhbGxvdyBhbnkgZnVydGhlciBpbnRlcmZlcmVuY2Ugd2l0aAorCSAqIGtpbGxhYmxlIHRhc2tzLgorCSAqLworCWlmICghZXJyb3IgJiYgIW9vbV9raWxsZXJfZGlzYWJsZSgpKQorCQllcnJvciA9IC1FQlVTWTsKKwogCWlmIChlcnJvcikKIAkJdGhhd19wcm9jZXNzZXMoKTsKIAlyZXR1cm4gZXJyb3I7CkBAIC0xOTcsMTMgKzE2NSwxNCBAQAogewogCWludCBlcnJvcjsKIAotCXByaW50aygiRnJlZXppbmcgcmVtYWluaW5nIGZyZWV6YWJsZSB0YXNrcyAuLi4gIik7CisJcHJfaW5mbygiRnJlZXppbmcgcmVtYWluaW5nIGZyZWV6YWJsZSB0YXNrcyAuLi4gIik7CisKIAlwbV9ub3NpZ19mcmVlemluZyA9IHRydWU7CiAJZXJyb3IgPSB0cnlfdG9fZnJlZXplX3Rhc2tzKGZhbHNlKTsKIAlpZiAoIWVycm9yKQotCQlwcmludGsoImRvbmUuIik7CisJCXByX2NvbnQoImRvbmUuIik7CiAKLQlwcmludGsoIlxuIik7CisJcHJfY29udCgiXG4iKTsKIAlCVUdfT04oaW5fYXRvbWljKCkpOwogCiAJaWYgKGVycm9yKQpAQCAtMjI0LDcgKzE5Myw3IEBACiAKIAlvb21fa2lsbGVyX2VuYWJsZSgpOwogCi0JcHJpbnRrKCJSZXN0YXJ0aW5nIHRhc2tzIC4uLiAiKTsKKwlwcl9pbmZvKCJSZXN0YXJ0aW5nIHRhc2tzIC4uLiAiKTsKIAogCV9fdXNlcm1vZGVoZWxwZXJfc2V0X2Rpc2FibGVfZGVwdGgoVU1IX0ZSRUVaSU5HKTsKIAl0aGF3X3dvcmtxdWV1ZXMoKTsKQEAgLTI0Myw3ICsyMTIsNyBAQAogCXVzZXJtb2RlaGVscGVyX2VuYWJsZSgpOwogCiAJc2NoZWR1bGUoKTsKLQlwcmludGsoImRvbmUuXG4iKTsKKwlwcl9jb250KCJkb25lLlxuIik7CiAJdHJhY2Vfc3VzcGVuZF9yZXN1bWUoVFBTKCJ0aGF3X3Byb2Nlc3NlcyIpLCAwLCBmYWxzZSk7CiB9CiAKQEAgLTI1Miw3ICsyMjEsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7CiAKIAlwbV9ub3NpZ19mcmVlemluZyA9IGZhbHNlOwotCXByaW50aygiUmVzdGFydGluZyBrZXJuZWwgdGhyZWFkcyAuLi4gIik7CisJcHJfaW5mbygiUmVzdGFydGluZyBrZXJuZWwgdGhyZWFkcyAuLi4gIik7CiAKIAl0aGF3X3dvcmtxdWV1ZXMoKTsKIApAQCAtMjY0LDUgKzIzMyw1IEBACiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCiAJc2NoZWR1bGUoKTsKLQlwcmludGsoImRvbmUuXG4iKTsKKwlwcl9jb250KCJkb25lLlxuIik7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcW9zLmMgYi9rZXJuZWwvcG93ZXIvcW9zLmMKaW5kZXggNWY0YzAwNi4uOTdiMGRmNyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3Fvcy5jCisrKyBiL2tlcm5lbC9wb3dlci9xb3MuYwpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KQEAgLTE4Miw2ICsxODQsODEgQEAKIAljLT50YXJnZXRfdmFsdWUgPSB2YWx1ZTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgcG1fcW9zX2dldF92YWx1ZShzdHJ1Y3QgcG1fcW9zX2NvbnN0cmFpbnRzICpjKTsKK3N0YXRpYyBpbnQgcG1fcW9zX2RiZ19zaG93X3JlcXVlc3RzKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBwbV9xb3Nfb2JqZWN0ICpxb3MgPSAoc3RydWN0IHBtX3Fvc19vYmplY3QgKilzLT5wcml2YXRlOworCXN0cnVjdCBwbV9xb3NfY29uc3RyYWludHMgKmM7CisJc3RydWN0IHBtX3Fvc19yZXF1ZXN0ICpyZXE7CisJY2hhciAqdHlwZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB0b3RfcmVxcyA9IDA7CisJaW50IGFjdGl2ZV9yZXFzID0gMDsKKworCWlmIChJU19FUlJfT1JfTlVMTChxb3MpKSB7CisJCXByX2VycigiJXM6IGJhZCBxb3MgcGFyYW0hXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljID0gcW9zLT5jb25zdHJhaW50czsKKwlpZiAoSVNfRVJSX09SX05VTEwoYykpIHsKKwkJcHJfZXJyKCIlczogQmFkIGNvbnN0cmFpbnRzIG9uIHFvcz9cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogTG9jayB0byBlbnN1cmUgd2UgaGF2ZSBhIHNuYXBzaG90ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtX3Fvc19sb2NrLCBmbGFncyk7CisJaWYgKHBsaXN0X2hlYWRfZW1wdHkoJmMtPmxpc3QpKSB7CisJCXNlcV9wdXRzKHMsICJFbXB0eSFcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2l0Y2ggKGMtPnR5cGUpIHsKKwljYXNlIFBNX1FPU19NSU46CisJCXR5cGUgPSAiTWluaW11bSI7CisJCWJyZWFrOworCWNhc2UgUE1fUU9TX01BWDoKKwkJdHlwZSA9ICJNYXhpbXVtIjsKKwkJYnJlYWs7CisJY2FzZSBQTV9RT1NfU1VNOgorCQl0eXBlID0gIlN1bSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXR5cGUgPSAiVW5rbm93biI7CisJfQorCisJcGxpc3RfZm9yX2VhY2hfZW50cnkocmVxLCAmYy0+bGlzdCwgbm9kZSkgeworCQljaGFyICpzdGF0ZSA9ICJEZWZhdWx0IjsKKworCQlpZiAoKHJlcS0+bm9kZSkucHJpbyAhPSBjLT5kZWZhdWx0X3ZhbHVlKSB7CisJCQlhY3RpdmVfcmVxcysrOworCQkJc3RhdGUgPSAiQWN0aXZlIjsKKwkJfQorCQl0b3RfcmVxcysrOworCQlzZXFfcHJpbnRmKHMsICIlZDogJWQ6ICVzXG4iLCB0b3RfcmVxcywKKwkJCSAgIChyZXEtPm5vZGUpLnByaW8sIHN0YXRlKTsKKwl9CisKKwlzZXFfcHJpbnRmKHMsICJUeXBlPSVzLCBWYWx1ZT0lZCwgUmVxdWVzdHM6IGFjdGl2ZT0lZCAvIHRvdGFsPSVkXG4iLAorCQkgICB0eXBlLCBwbV9xb3NfZ2V0X3ZhbHVlKGMpLCBhY3RpdmVfcmVxcywgdG90X3JlcXMpOworCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG1fcW9zX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwbV9xb3NfZGJnX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHBtX3Fvc19kYmdfc2hvd19yZXF1ZXN0cywKKwkJCSAgIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwbV9xb3NfZGVidWdfZm9wcyA9IHsKKwkub3BlbiAgICAgICAgICAgPSBwbV9xb3NfZGJnX29wZW4sCisJLnJlYWQgICAgICAgICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgICAgICAgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlICAgICAgICA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogLyoqCiAgKiBwbV9xb3NfdXBkYXRlX3RhcmdldCAtIG1hbmFnZXMgdGhlIGNvbnN0cmFpbnRzIGxpc3QgYW5kIGNhbGxzIHRoZSBub3RpZmllcnMKICAqICBpZiBuZWVkZWQKQEAgLTUwOSwxMiArNTg2LDE3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChwbV9xb3NfcmVtb3ZlX25vdGlmaWVyKTsKIAogLyogVXNlciBzcGFjZSBpbnRlcmZhY2UgdG8gUE0gUW9TIGNsYXNzZXMgdmlhIG1pc2MgZGV2aWNlcyAqLwotc3RhdGljIGludCByZWdpc3Rlcl9wbV9xb3NfbWlzYyhzdHJ1Y3QgcG1fcW9zX29iamVjdCAqcW9zKQorc3RhdGljIGludCByZWdpc3Rlcl9wbV9xb3NfbWlzYyhzdHJ1Y3QgcG1fcW9zX29iamVjdCAqcW9zLCBzdHJ1Y3QgZGVudHJ5ICpkKQogewogCXFvcy0+cG1fcW9zX3Bvd2VyX21pc2NkZXYubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1I7CiAJcW9zLT5wbV9xb3NfcG93ZXJfbWlzY2Rldi5uYW1lID0gcW9zLT5uYW1lOwogCXFvcy0+cG1fcW9zX3Bvd2VyX21pc2NkZXYuZm9wcyA9ICZwbV9xb3NfcG93ZXJfZm9wczsKIAorCWlmIChkKSB7CisJCSh2b2lkKWRlYnVnZnNfY3JlYXRlX2ZpbGUocW9zLT5uYW1lLCBTX0lSVUdPLCBkLAorCQkJCQkgICh2b2lkICopcW9zLCAmcG1fcW9zX2RlYnVnX2ZvcHMpOworCX0KKwogCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZxb3MtPnBtX3Fvc19wb3dlcl9taXNjZGV2KTsKIH0KIApAQCAtNjA4LDExICs2OTAsMTYgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgaTsKKwlzdHJ1Y3QgZGVudHJ5ICpkOwogCiAJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUocG1fcW9zX2FycmF5KSAhPSBQTV9RT1NfTlVNX0NMQVNTRVMpOwogCisJZCA9IGRlYnVnZnNfY3JlYXRlX2RpcigicG1fcW9zIiwgTlVMTCk7CisJaWYgKElTX0VSUl9PUl9OVUxMKGQpKQorCQlkID0gTlVMTDsKKwogCWZvciAoaSA9IFBNX1FPU19DUFVfRE1BX0xBVEVOQ1k7IGkgPCBQTV9RT1NfTlVNX0NMQVNTRVM7IGkrKykgewotCQlyZXQgPSByZWdpc3Rlcl9wbV9xb3NfbWlzYyhwbV9xb3NfYXJyYXlbaV0pOworCQlyZXQgPSByZWdpc3Rlcl9wbV9xb3NfbWlzYyhwbV9xb3NfYXJyYXlbaV0sIGQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJwbV9xb3NfcGFyYW06ICVzIHNldHVwIGZhaWxlZFxuIiwKIAkJCSAgICAgICBwbV9xb3NfYXJyYXlbaV0tPm5hbWUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwppbmRleCAwYzQwYzE2Li5jMjRkNWEyIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYworKysgYi9rZXJuZWwvcG93ZXIvc25hcHNob3QuYwpAQCAtMTQ3Miw5ICsxNDcyLDkgQEAKIC8qKgogICogZnJlZV91bm5lY2Vzc2FyeV9wYWdlcyAtIFJlbGVhc2UgcHJlYWxsb2NhdGVkIHBhZ2VzIG5vdCBuZWVkZWQgZm9yIHRoZSBpbWFnZQogICovCi1zdGF0aWMgdm9pZCBmcmVlX3VubmVjZXNzYXJ5X3BhZ2VzKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBmcmVlX3VubmVjZXNzYXJ5X3BhZ2VzKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBzYXZlLCB0b19mcmVlX25vcm1hbCwgdG9fZnJlZV9oaWdobWVtOworCXVuc2lnbmVkIGxvbmcgc2F2ZSwgdG9fZnJlZV9ub3JtYWwsIHRvX2ZyZWVfaGlnaG1lbSwgZnJlZTsKIAogCXNhdmUgPSBjb3VudF9kYXRhX3BhZ2VzKCk7CiAJaWYgKGFsbG9jX25vcm1hbCA+PSBzYXZlKSB7CkBAIC0xNDk1LDYgKzE0OTUsNyBAQAogCQllbHNlCiAJCQl0b19mcmVlX25vcm1hbCA9IDA7CiAJfQorCWZyZWUgPSB0b19mcmVlX25vcm1hbCArIHRvX2ZyZWVfaGlnaG1lbTsKIAogCW1lbW9yeV9ibV9wb3NpdGlvbl9yZXNldCgmY29weV9ibSk7CiAKQEAgLTE1MTgsNiArMTUxOSw4IEBACiAJCXN3c3VzcF91bnNldF9wYWdlX2ZyZWUocGFnZSk7CiAJCV9fZnJlZV9wYWdlKHBhZ2UpOwogCX0KKworCXJldHVybiBmcmVlOwogfQogCiAvKioKQEAgLTE3MDcsNyArMTcxMCw3IEBACiAJICogcGFnZXMgaW4gbWVtb3J5LCBidXQgd2UgaGF2ZSBhbGxvY2F0ZWQgbW9yZS4gIFJlbGVhc2UgdGhlIGV4Y2Vzc2l2ZQogCSAqIG9uZXMgbm93LgogCSAqLwotCWZyZWVfdW5uZWNlc3NhcnlfcGFnZXMoKTsKKwlwYWdlcyAtPSBmcmVlX3VubmVjZXNzYXJ5X3BhZ2VzKCk7CiAKICBvdXQ6CiAJc3RvcCA9IGt0aW1lX2dldCgpOwpAQCAtMjMxMCw4ICsyMzEzLDYgQEAKIAkJZnJlZV9pbWFnZV9wYWdlKGJ1ZmZlciwgUEdfVU5TQUZFX0NMRUFSKTsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBnZXRfc2FmZV93cml0ZV9idWZmZXIodm9pZCkgeyByZXR1cm4gMDsgfQotCiBzdGF0aWMgdW5zaWduZWQgaW50CiBjb3VudF9oaWdobWVtX2ltYWdlX3BhZ2VzKHN0cnVjdCBtZW1vcnlfYml0bWFwICpibSkgeyByZXR1cm4gMDsgfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L01ha2VmaWxlIGIva2VybmVsL3JjdS9NYWtlZmlsZQppbmRleCBlNmZhZTUwLi41MGE4MDg0IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L01ha2VmaWxlCisrKyBiL2tlcm5lbC9yY3UvTWFrZWZpbGUKQEAgLTEsNCArMSw1IEBACi1vYmoteSArPSB1cGRhdGUubyBzcmN1Lm8KK29iai15ICs9IHVwZGF0ZS5vCitvYmotJChDT05GSUdfU1JDVSkgKz0gc3JjdS5vCiBvYmotJChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCkgKz0gcmN1dG9ydHVyZS5vCiBvYmotJChDT05GSUdfVFJFRV9SQ1UpICs9IHRyZWUubwogb2JqLSQoQ09ORklHX1BSRUVNUFRfUkNVKSArPSB0cmVlLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvcmN1LmggYi9rZXJuZWwvcmN1L3JjdS5oCmluZGV4IDA3YmIwMmUuLjgwYWRlZjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvcmN1LmgKKysrIGIva2VybmVsL3JjdS9yY3UuaApAQCAtMTM3LDQgKzEzNywxMCBAQAogCiB2b2lkIHJjdV9lYXJseV9ib290X3Rlc3RzKHZvaWQpOwogCisvKgorICogVGhpcyBmdW5jdGlvbiByZWFsbHkgaXNuJ3QgZm9yIHB1YmxpYyBjb25zdW1wdGlvbiwgYnV0IFJDVSBpcyBzcGVjaWFsIGluCisgKiB0aGF0IGNvbnRleHQgc3dpdGNoZXMgY2FuIGFsbG93IHRoZSBzdGF0ZSBtYWNoaW5lIHRvIG1ha2UgcHJvZ3Jlc3MuCisgKi8KK2V4dGVybiB2b2lkIHJlc2NoZWRfY3B1KGludCBjcHUpOworCiAjZW5kaWYgLyogX19MSU5VWF9SQ1VfSCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS9yY3V0b3J0dXJlLmMgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwppbmRleCA0ZDU1OWJhLi4zMGQ0MmFhIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1L3JjdXRvcnR1cmUuYwpAQCAtMjQ0LDcgKzI0NCw4IEBACiAJaW50ICgqcmVhZGxvY2spKHZvaWQpOwogCXZvaWQgKCpyZWFkX2RlbGF5KShzdHJ1Y3QgdG9ydHVyZV9yYW5kb21fc3RhdGUgKnJyc3ApOwogCXZvaWQgKCpyZWFkdW5sb2NrKShpbnQgaWR4KTsKLQlpbnQgKCpjb21wbGV0ZWQpKHZvaWQpOworCXVuc2lnbmVkIGxvbmcgKCpzdGFydGVkKSh2b2lkKTsKKwl1bnNpZ25lZCBsb25nICgqY29tcGxldGVkKSh2b2lkKTsKIAl2b2lkICgqZGVmZXJyZWRfZnJlZSkoc3RydWN0IHJjdV90b3J0dXJlICpwKTsKIAl2b2lkICgqc3luYykodm9pZCk7CiAJdm9pZCAoKmV4cF9zeW5jKSh2b2lkKTsKQEAgLTI5NiwxMSArMjk3LDYgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAotc3RhdGljIGludCByY3VfdG9ydHVyZV9jb21wbGV0ZWQodm9pZCkKLXsKLQlyZXR1cm4gcmN1X2JhdGNoZXNfY29tcGxldGVkKCk7Ci19Ci0KIC8qCiAgKiBVcGRhdGUgY2FsbGJhY2sgaW4gdGhlIHBpcGUuICBUaGlzIHNob3VsZCBiZSBpbnZva2VkIGFmdGVyIGEgZ3JhY2UgcGVyaW9kLgogICovCkBAIC0zNTYsNyArMzUyLDcgQEAKIAkJY3VyX29wcy0+ZGVmZXJyZWRfZnJlZShycCk7CiB9CiAKLXN0YXRpYyBpbnQgcmN1X25vX2NvbXBsZXRlZCh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcmN1X25vX2NvbXBsZXRlZCh2b2lkKQogewogCXJldHVybiAwOwogfQpAQCAtMzc3LDcgKzM3Myw4IEBACiAJLnJlYWRsb2NrCT0gcmN1X3RvcnR1cmVfcmVhZF9sb2NrLAogCS5yZWFkX2RlbGF5CT0gcmN1X3JlYWRfZGVsYXksCiAJLnJlYWR1bmxvY2sJPSByY3VfdG9ydHVyZV9yZWFkX3VubG9jaywKLQkuY29tcGxldGVkCT0gcmN1X3RvcnR1cmVfY29tcGxldGVkLAorCS5zdGFydGVkCT0gcmN1X2JhdGNoZXNfc3RhcnRlZCwKKwkuY29tcGxldGVkCT0gcmN1X2JhdGNoZXNfY29tcGxldGVkLAogCS5kZWZlcnJlZF9mcmVlCT0gcmN1X3RvcnR1cmVfZGVmZXJyZWRfZnJlZSwKIAkuc3luYwkJPSBzeW5jaHJvbml6ZV9yY3UsCiAJLmV4cF9zeW5jCT0gc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCwKQEAgLTQwNywxMSArNDA0LDYgQEAKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIH0KIAotc3RhdGljIGludCByY3VfYmhfdG9ydHVyZV9jb21wbGV0ZWQodm9pZCkKLXsKLQlyZXR1cm4gcmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHJjdV9iaF90b3J0dXJlX2RlZmVycmVkX2ZyZWUoc3RydWN0IHJjdV90b3J0dXJlICpwKQogewogCWNhbGxfcmN1X2JoKCZwLT5ydG9ydF9yY3UsIHJjdV90b3J0dXJlX2NiKTsKQEAgLTQyMyw3ICs0MTUsOCBAQAogCS5yZWFkbG9jawk9IHJjdV9iaF90b3J0dXJlX3JlYWRfbG9jaywKIAkucmVhZF9kZWxheQk9IHJjdV9yZWFkX2RlbGF5LCAgLyoganVzdCByZXVzZSByY3UncyB2ZXJzaW9uLiAqLwogCS5yZWFkdW5sb2NrCT0gcmN1X2JoX3RvcnR1cmVfcmVhZF91bmxvY2ssCi0JLmNvbXBsZXRlZAk9IHJjdV9iaF90b3J0dXJlX2NvbXBsZXRlZCwKKwkuc3RhcnRlZAk9IHJjdV9iYXRjaGVzX3N0YXJ0ZWRfYmgsCisJLmNvbXBsZXRlZAk9IHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9iaCwKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9iaF90b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc3luY2hyb25pemVfcmN1X2JoLAogCS5leHBfc3luYwk9IHN5bmNocm9uaXplX3JjdV9iaF9leHBlZGl0ZWQsCkBAIC00NjYsNiArNDU5LDcgQEAKIAkucmVhZGxvY2sJPSByY3VfdG9ydHVyZV9yZWFkX2xvY2ssCiAJLnJlYWRfZGVsYXkJPSByY3VfcmVhZF9kZWxheSwgIC8qIGp1c3QgcmV1c2UgcmN1J3MgdmVyc2lvbi4gKi8KIAkucmVhZHVubG9jawk9IHJjdV90b3J0dXJlX3JlYWRfdW5sb2NrLAorCS5zdGFydGVkCT0gcmN1X25vX2NvbXBsZXRlZCwKIAkuY29tcGxldGVkCT0gcmN1X25vX2NvbXBsZXRlZCwKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV9idXN0ZWRfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAogCS5zeW5jCQk9IHN5bmNocm9uaXplX3JjdV9idXN0ZWQsCkBAIC01MTAsNyArNTA0LDcgQEAKIAlzcmN1X3JlYWRfdW5sb2NrKCZzcmN1X2N0bCwgaWR4KTsKIH0KIAotc3RhdGljIGludCBzcmN1X3RvcnR1cmVfY29tcGxldGVkKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzcmN1X3RvcnR1cmVfY29tcGxldGVkKHZvaWQpCiB7CiAJcmV0dXJuIHNyY3VfYmF0Y2hlc19jb21wbGV0ZWQoJnNyY3VfY3RsKTsKIH0KQEAgLTU2NCw2ICs1NTgsNyBAQAogCS5yZWFkbG9jawk9IHNyY3VfdG9ydHVyZV9yZWFkX2xvY2ssCiAJLnJlYWRfZGVsYXkJPSBzcmN1X3JlYWRfZGVsYXksCiAJLnJlYWR1bmxvY2sJPSBzcmN1X3RvcnR1cmVfcmVhZF91bmxvY2ssCisJLnN0YXJ0ZWQJPSBOVUxMLAogCS5jb21wbGV0ZWQJPSBzcmN1X3RvcnR1cmVfY29tcGxldGVkLAogCS5kZWZlcnJlZF9mcmVlCT0gc3JjdV90b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc3JjdV90b3J0dXJlX3N5bmNocm9uaXplLApAQCAtNjAwLDcgKzU5NSw4IEBACiAJLnJlYWRsb2NrCT0gc2NoZWRfdG9ydHVyZV9yZWFkX2xvY2ssCiAJLnJlYWRfZGVsYXkJPSByY3VfcmVhZF9kZWxheSwgIC8qIGp1c3QgcmV1c2UgcmN1J3MgdmVyc2lvbi4gKi8KIAkucmVhZHVubG9jawk9IHNjaGVkX3RvcnR1cmVfcmVhZF91bmxvY2ssCi0JLmNvbXBsZXRlZAk9IHJjdV9ub19jb21wbGV0ZWQsCisJLnN0YXJ0ZWQJPSByY3VfYmF0Y2hlc19zdGFydGVkX3NjaGVkLAorCS5jb21wbGV0ZWQJPSByY3VfYmF0Y2hlc19jb21wbGV0ZWRfc2NoZWQsCiAJLmRlZmVycmVkX2ZyZWUJPSByY3Vfc2NoZWRfdG9ydHVyZV9kZWZlcnJlZF9mcmVlLAogCS5zeW5jCQk9IHN5bmNocm9uaXplX3NjaGVkLAogCS5leHBfc3luYwk9IHN5bmNocm9uaXplX3NjaGVkX2V4cGVkaXRlZCwKQEAgLTYzOCw2ICs2MzQsNyBAQAogCS5yZWFkbG9jawk9IHRhc2tzX3RvcnR1cmVfcmVhZF9sb2NrLAogCS5yZWFkX2RlbGF5CT0gcmN1X3JlYWRfZGVsYXksICAvKiBqdXN0IHJldXNlIHJjdSdzIHZlcnNpb24uICovCiAJLnJlYWR1bmxvY2sJPSB0YXNrc190b3J0dXJlX3JlYWRfdW5sb2NrLAorCS5zdGFydGVkCT0gcmN1X25vX2NvbXBsZXRlZCwKIAkuY29tcGxldGVkCT0gcmN1X25vX2NvbXBsZXRlZCwKIAkuZGVmZXJyZWRfZnJlZQk9IHJjdV90YXNrc190b3J0dXJlX2RlZmVycmVkX2ZyZWUsCiAJLnN5bmMJCT0gc3luY2hyb25pemVfcmN1X3Rhc2tzLApAQCAtMTAxNSw4ICsxMDEyLDggQEAKIHN0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3RpbWVyKHVuc2lnbmVkIGxvbmcgdW51c2VkKQogewogCWludCBpZHg7Ci0JaW50IGNvbXBsZXRlZDsKLQlpbnQgY29tcGxldGVkX2VuZDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0ZWQ7CisJdW5zaWduZWQgbG9uZyBjb21wbGV0ZWQ7CiAJc3RhdGljIERFRklORV9UT1JUVVJFX1JBTkRPTShyYW5kKTsKIAlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJhbmRfbG9jayk7CiAJc3RydWN0IHJjdV90b3J0dXJlICpwOwpAQCAtMTAyNCw3ICsxMDIxLDEwIEBACiAJdW5zaWduZWQgbG9uZyBsb25nIHRzOwogCiAJaWR4ID0gY3VyX29wcy0+cmVhZGxvY2soKTsKLQljb21wbGV0ZWQgPSBjdXJfb3BzLT5jb21wbGV0ZWQoKTsKKwlpZiAoY3VyX29wcy0+c3RhcnRlZCkKKwkJc3RhcnRlZCA9IGN1cl9vcHMtPnN0YXJ0ZWQoKTsKKwllbHNlCisJCXN0YXJ0ZWQgPSBjdXJfb3BzLT5jb21wbGV0ZWQoKTsKIAl0cyA9IHJjdV90cmFjZV9jbG9ja19sb2NhbCgpOwogCXAgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2socmN1X3RvcnR1cmVfY3VycmVudCwKIAkJCQkgIHJjdV9yZWFkX2xvY2tfYmhfaGVsZCgpIHx8CkBAIC0xMDQ3LDE0ICsxMDQ3LDE2IEBACiAJCS8qIFNob3VsZCBub3QgaGFwcGVuLCBidXQuLi4gKi8KIAkJcGlwZV9jb3VudCA9IFJDVV9UT1JUVVJFX1BJUEVfTEVOOwogCX0KLQljb21wbGV0ZWRfZW5kID0gY3VyX29wcy0+Y29tcGxldGVkKCk7CisJY29tcGxldGVkID0gY3VyX29wcy0+Y29tcGxldGVkKCk7CiAJaWYgKHBpcGVfY291bnQgPiAxKSB7CiAJCWRvX3RyYWNlX3JjdV90b3J0dXJlX3JlYWQoY3VyX29wcy0+bmFtZSwgJnAtPnJ0b3J0X3JjdSwgdHMsCi0JCQkJCSAgY29tcGxldGVkLCBjb21wbGV0ZWRfZW5kKTsKKwkJCQkJICBzdGFydGVkLCBjb21wbGV0ZWQpOwogCQlyY3V0b3J0dXJlX3RyYWNlX2R1bXAoKTsKIAl9CiAJX190aGlzX2NwdV9pbmMocmN1X3RvcnR1cmVfY291bnRbcGlwZV9jb3VudF0pOwotCWNvbXBsZXRlZCA9IGNvbXBsZXRlZF9lbmQgLSBjb21wbGV0ZWQ7CisJY29tcGxldGVkID0gY29tcGxldGVkIC0gc3RhcnRlZDsKKwlpZiAoY3VyX29wcy0+c3RhcnRlZCkKKwkJY29tcGxldGVkKys7CiAJaWYgKGNvbXBsZXRlZCA+IFJDVV9UT1JUVVJFX1BJUEVfTEVOKSB7CiAJCS8qIFNob3VsZCBub3QgaGFwcGVuLCBidXQuLi4gKi8KIAkJY29tcGxldGVkID0gUkNVX1RPUlRVUkVfUElQRV9MRU47CkBAIC0xMDczLDggKzEwNzUsOCBAQAogc3RhdGljIGludAogcmN1X3RvcnR1cmVfcmVhZGVyKHZvaWQgKmFyZykKIHsKLQlpbnQgY29tcGxldGVkOwotCWludCBjb21wbGV0ZWRfZW5kOworCXVuc2lnbmVkIGxvbmcgc3RhcnRlZDsKKwl1bnNpZ25lZCBsb25nIGNvbXBsZXRlZDsKIAlpbnQgaWR4OwogCURFRklORV9UT1JUVVJFX1JBTkRPTShyYW5kKTsKIAlzdHJ1Y3QgcmN1X3RvcnR1cmUgKnA7CkBAIC0xMDkzLDcgKzEwOTUsMTAgQEAKIAkJCQltb2RfdGltZXIoJnQsIGppZmZpZXMgKyAxKTsKIAkJfQogCQlpZHggPSBjdXJfb3BzLT5yZWFkbG9jaygpOwotCQljb21wbGV0ZWQgPSBjdXJfb3BzLT5jb21wbGV0ZWQoKTsKKwkJaWYgKGN1cl9vcHMtPnN0YXJ0ZWQpCisJCQlzdGFydGVkID0gY3VyX29wcy0+c3RhcnRlZCgpOworCQllbHNlCisJCQlzdGFydGVkID0gY3VyX29wcy0+Y29tcGxldGVkKCk7CiAJCXRzID0gcmN1X3RyYWNlX2Nsb2NrX2xvY2FsKCk7CiAJCXAgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2socmN1X3RvcnR1cmVfY3VycmVudCwKIAkJCQkJICByY3VfcmVhZF9sb2NrX2JoX2hlbGQoKSB8fApAQCAtMTExNCwxNCArMTExOSwxNiBAQAogCQkJLyogU2hvdWxkIG5vdCBoYXBwZW4sIGJ1dC4uLiAqLwogCQkJcGlwZV9jb3VudCA9IFJDVV9UT1JUVVJFX1BJUEVfTEVOOwogCQl9Ci0JCWNvbXBsZXRlZF9lbmQgPSBjdXJfb3BzLT5jb21wbGV0ZWQoKTsKKwkJY29tcGxldGVkID0gY3VyX29wcy0+Y29tcGxldGVkKCk7CiAJCWlmIChwaXBlX2NvdW50ID4gMSkgewogCQkJZG9fdHJhY2VfcmN1X3RvcnR1cmVfcmVhZChjdXJfb3BzLT5uYW1lLCAmcC0+cnRvcnRfcmN1LAotCQkJCQkJICB0cywgY29tcGxldGVkLCBjb21wbGV0ZWRfZW5kKTsKKwkJCQkJCSAgdHMsIHN0YXJ0ZWQsIGNvbXBsZXRlZCk7CiAJCQlyY3V0b3J0dXJlX3RyYWNlX2R1bXAoKTsKIAkJfQogCQlfX3RoaXNfY3B1X2luYyhyY3VfdG9ydHVyZV9jb3VudFtwaXBlX2NvdW50XSk7Ci0JCWNvbXBsZXRlZCA9IGNvbXBsZXRlZF9lbmQgLSBjb21wbGV0ZWQ7CisJCWNvbXBsZXRlZCA9IGNvbXBsZXRlZCAtIHN0YXJ0ZWQ7CisJCWlmIChjdXJfb3BzLT5zdGFydGVkKQorCQkJY29tcGxldGVkKys7CiAJCWlmIChjb21wbGV0ZWQgPiBSQ1VfVE9SVFVSRV9QSVBFX0xFTikgewogCQkJLyogU2hvdWxkIG5vdCBoYXBwZW4sIGJ1dC4uLiAqLwogCQkJY29tcGxldGVkID0gUkNVX1RPUlRVUkVfUElQRV9MRU47CkBAIC0xNDIwLDYgKzE0MjcsOSBAQAogCQljdXJfb3BzLT5jYl9iYXJyaWVyKCk7IC8qIEltcGxpZXMgc21wX21iKCkgZm9yIHdhaXRfZXZlbnQoKS4gKi8KIAkJaWYgKGF0b21pY19yZWFkKCZiYXJyaWVyX2Nic19pbnZva2VkKSAhPSBuX2JhcnJpZXJfY2JzKSB7CiAJCQluX3JjdV90b3J0dXJlX2JhcnJpZXJfZXJyb3IrKzsKKwkJCXByX2VycigiYmFycmllcl9jYnNfaW52b2tlZCA9ICVkLCBuX2JhcnJpZXJfY2JzID0gJWRcbiIsCisJCQkgICAgICAgYXRvbWljX3JlYWQoJmJhcnJpZXJfY2JzX2ludm9rZWQpLAorCQkJICAgICAgIG5fYmFycmllcl9jYnMpOwogCQkJV0FSTl9PTl9PTkNFKDEpOwogCQl9CiAJCW5fYmFycmllcl9zdWNjZXNzZXMrKzsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3Uvc3JjdS5jIGIva2VybmVsL3JjdS9zcmN1LmMKaW5kZXggZTAzN2YzZS4uNDQ1YmY4ZiAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS9zcmN1LmMKKysrIGIva2VybmVsL3JjdS9zcmN1LmMKQEAgLTU0Niw3ICs1NDYsNyBAQAogICogUmVwb3J0IHRoZSBudW1iZXIgb2YgYmF0Y2hlcywgY29ycmVsYXRlZCB3aXRoLCBidXQgbm90IG5lY2Vzc2FyaWx5CiAgKiBwcmVjaXNlbHkgdGhlIHNhbWUgYXMsIHRoZSBudW1iZXIgb2YgZ3JhY2UgcGVyaW9kcyB0aGF0IGhhdmUgZWxhcHNlZC4KICAqLwotbG9uZyBzcmN1X2JhdGNoZXNfY29tcGxldGVkKHN0cnVjdCBzcmN1X3N0cnVjdCAqc3ApCit1bnNpZ25lZCBsb25nIHNyY3VfYmF0Y2hlc19jb21wbGV0ZWQoc3RydWN0IHNyY3Vfc3RydWN0ICpzcCkKIHsKIAlyZXR1cm4gc3AtPmNvbXBsZXRlZDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9yY3UvdGlueS5jIGIva2VybmVsL3JjdS90aW55LmMKaW5kZXggMGRiNTY0OS4uY2M5Y2VjYSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90aW55LmMKKysrIGIva2VybmVsL3JjdS90aW55LmMKQEAgLTQ3LDU0ICs0NywxNCBAQAogCQkgICAgICAgdm9pZCAoKmZ1bmMpKHN0cnVjdCByY3VfaGVhZCAqcmN1KSwKIAkJICAgICAgIHN0cnVjdCByY3VfY3RybGJsayAqcmNwKTsKIAotc3RhdGljIGxvbmcgbG9uZyByY3VfZHludGlja3NfbmVzdGluZyA9IERZTlRJQ0tfVEFTS19FWElUX0lETEU7Ci0KICNpbmNsdWRlICJ0aW55X3BsdWdpbi5oIgogCi0vKiBDb21tb24gY29kZSBmb3IgcmN1X2lkbGVfZW50ZXIoKSBhbmQgcmN1X2lycV9leGl0KCksIHNlZSBrZXJuZWwvcmN1L3RyZWUuYy4gKi8KLXN0YXRpYyB2b2lkIHJjdV9pZGxlX2VudGVyX2NvbW1vbihsb25nIGxvbmcgbmV3dmFsKQotewotCWlmIChuZXd2YWwpIHsKLQkJUkNVX1RSQUNFKHRyYWNlX3JjdV9keW50aWNrKFRQUygiLS09IiksCi0JCQkJCSAgICByY3VfZHludGlja3NfbmVzdGluZywgbmV3dmFsKSk7Ci0JCXJjdV9keW50aWNrc19uZXN0aW5nID0gbmV3dmFsOwotCQlyZXR1cm47Ci0JfQotCVJDVV9UUkFDRSh0cmFjZV9yY3VfZHludGljayhUUFMoIlN0YXJ0IiksCi0JCQkJICAgIHJjdV9keW50aWNrc19uZXN0aW5nLCBuZXd2YWwpKTsKLQlpZiAoSVNfRU5BQkxFRChDT05GSUdfUkNVX1RSQUNFKSAmJiAhaXNfaWRsZV90YXNrKGN1cnJlbnQpKSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSBfX21heWJlX3VudXNlZCA9IGlkbGVfdGFzayhzbXBfcHJvY2Vzc29yX2lkKCkpOwotCi0JCVJDVV9UUkFDRSh0cmFjZV9yY3VfZHludGljayhUUFMoIkVudHJ5IGVycm9yOiBub3QgaWRsZSB0YXNrIiksCi0JCQkJCSAgICByY3VfZHludGlja3NfbmVzdGluZywgbmV3dmFsKSk7Ci0JCWZ0cmFjZV9kdW1wKERVTVBfQUxMKTsKLQkJV0FSTl9PTkNFKDEsICJDdXJyZW50IHBpZDogJWQgY29tbTogJXMgLyBJZGxlIHBpZDogJWQgY29tbTogJXMiLAotCQkJICBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sCi0JCQkgIGlkbGUtPnBpZCwgaWRsZS0+Y29tbSk7IC8qIG11c3QgYmUgaWRsZSB0YXNrISAqLwotCX0KLQlyY3Vfc2NoZWRfcXMoKTsgLyogaW1wbGllcyByY3VfYmhfaW5jKCkgKi8KLQliYXJyaWVyKCk7Ci0JcmN1X2R5bnRpY2tzX25lc3RpbmcgPSBuZXd2YWw7Ci19Ci0KIC8qCiAgKiBFbnRlciBpZGxlLCB3aGljaCBpcyBhbiBleHRlbmRlZCBxdWllc2NlbnQgc3RhdGUgaWYgd2UgaGF2ZSBmdWxseQotICogZW50ZXJlZCB0aGF0IG1vZGUgKGkuZS4sIGlmIHRoZSBuZXcgdmFsdWUgb2YgZHludGlja3NfbmVzdGluZyBpcyB6ZXJvKS4KKyAqIGVudGVyZWQgdGhhdCBtb2RlLgogICovCiB2b2lkIHJjdV9pZGxlX2VudGVyKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlsb25nIGxvbmcgbmV3dmFsOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCVdBUk5fT05fT05DRSgocmN1X2R5bnRpY2tzX25lc3RpbmcgJiBEWU5USUNLX1RBU0tfTkVTVF9NQVNLKSA9PSAwKTsKLQlpZiAoKHJjdV9keW50aWNrc19uZXN0aW5nICYgRFlOVElDS19UQVNLX05FU1RfTUFTSykgPT0KLQkgICAgRFlOVElDS19UQVNLX05FU1RfVkFMVUUpCi0JCW5ld3ZhbCA9IDA7Ci0JZWxzZQotCQluZXd2YWwgPSByY3VfZHludGlja3NfbmVzdGluZyAtIERZTlRJQ0tfVEFTS19ORVNUX1ZBTFVFOwotCXJjdV9pZGxlX2VudGVyX2NvbW1vbihuZXd2YWwpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9pZGxlX2VudGVyKTsKIApAQCAtMTAzLDU1ICs2MywxNCBAQAogICovCiB2b2lkIHJjdV9pcnFfZXhpdCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9uZyBsb25nIG5ld3ZhbDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQluZXd2YWwgPSByY3VfZHludGlja3NfbmVzdGluZyAtIDE7Ci0JV0FSTl9PTl9PTkNFKG5ld3ZhbCA8IDApOwotCXJjdV9pZGxlX2VudGVyX2NvbW1vbihuZXd2YWwpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9pcnFfZXhpdCk7CiAKLS8qIENvbW1vbiBjb2RlIGZvciByY3VfaWRsZV9leGl0KCkgYW5kIHJjdV9pcnFfZW50ZXIoKSwgc2VlIGtlcm5lbC9yY3UvdHJlZS5jLiAqLwotc3RhdGljIHZvaWQgcmN1X2lkbGVfZXhpdF9jb21tb24obG9uZyBsb25nIG9sZHZhbCkKLXsKLQlpZiAob2xkdmFsKSB7Ci0JCVJDVV9UUkFDRSh0cmFjZV9yY3VfZHludGljayhUUFMoIisrPSIpLAotCQkJCQkgICAgb2xkdmFsLCByY3VfZHludGlja3NfbmVzdGluZykpOwotCQlyZXR1cm47Ci0JfQotCVJDVV9UUkFDRSh0cmFjZV9yY3VfZHludGljayhUUFMoIkVuZCIpLCBvbGR2YWwsIHJjdV9keW50aWNrc19uZXN0aW5nKSk7Ci0JaWYgKElTX0VOQUJMRUQoQ09ORklHX1JDVV9UUkFDRSkgJiYgIWlzX2lkbGVfdGFzayhjdXJyZW50KSkgewotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUgX19tYXliZV91bnVzZWQgPSBpZGxlX3Rhc2soc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQotCQlSQ1VfVFJBQ0UodHJhY2VfcmN1X2R5bnRpY2soVFBTKCJFeGl0IGVycm9yOiBub3QgaWRsZSB0YXNrIiksCi0JCQkgIG9sZHZhbCwgcmN1X2R5bnRpY2tzX25lc3RpbmcpKTsKLQkJZnRyYWNlX2R1bXAoRFVNUF9BTEwpOwotCQlXQVJOX09OQ0UoMSwgIkN1cnJlbnQgcGlkOiAlZCBjb21tOiAlcyAvIElkbGUgcGlkOiAlZCBjb21tOiAlcyIsCi0JCQkgIGN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSwKLQkJCSAgaWRsZS0+cGlkLCBpZGxlLT5jb21tKTsgLyogbXVzdCBiZSBpZGxlIHRhc2shICovCi0JfQotfQotCiAvKgogICogRXhpdCBpZGxlLCBzbyB0aGF0IHdlIGFyZSBubyBsb25nZXIgaW4gYW4gZXh0ZW5kZWQgcXVpZXNjZW50IHN0YXRlLgogICovCiB2b2lkIHJjdV9pZGxlX2V4aXQodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvbmcgbG9uZyBvbGR2YWw7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0Jb2xkdmFsID0gcmN1X2R5bnRpY2tzX25lc3Rpbmc7Ci0JV0FSTl9PTl9PTkNFKHJjdV9keW50aWNrc19uZXN0aW5nIDwgMCk7Ci0JaWYgKHJjdV9keW50aWNrc19uZXN0aW5nICYgRFlOVElDS19UQVNLX05FU1RfTUFTSykKLQkJcmN1X2R5bnRpY2tzX25lc3RpbmcgKz0gRFlOVElDS19UQVNLX05FU1RfVkFMVUU7Ci0JZWxzZQotCQlyY3VfZHludGlja3NfbmVzdGluZyA9IERZTlRJQ0tfVEFTS19FWElUX0lETEU7Ci0JcmN1X2lkbGVfZXhpdF9jb21tb24ob2xkdmFsKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyY3VfaWRsZV9leGl0KTsKIApAQCAtMTYwLDE1ICs3OSw2IEBACiAgKi8KIHZvaWQgcmN1X2lycV9lbnRlcih2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9uZyBsb25nIG9sZHZhbDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlvbGR2YWwgPSByY3VfZHludGlja3NfbmVzdGluZzsKLQlyY3VfZHludGlja3NfbmVzdGluZysrOwotCVdBUk5fT05fT05DRShyY3VfZHludGlja3NfbmVzdGluZyA9PSAwKTsKLQlyY3VfaWRsZV9leGl0X2NvbW1vbihvbGR2YWwpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9pcnFfZW50ZXIpOwogCkBAIC0xNzksMjMgKzg5LDEzIEBACiAgKi8KIGJvb2wgbm90cmFjZSBfX3JjdV9pc193YXRjaGluZyh2b2lkKQogewotCXJldHVybiByY3VfZHludGlja3NfbmVzdGluZzsKKwlyZXR1cm4gdHJ1ZTsKIH0KIEVYUE9SVF9TWU1CT0woX19yY3VfaXNfd2F0Y2hpbmcpOwogCiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfREVCVUdfTE9DS19BTExPQykgfHwgZGVmaW5lZChDT05GSUdfUkNVX1RSQUNFKSAqLwogCiAvKgotICogVGVzdCB3aGV0aGVyIHRoZSBjdXJyZW50IENQVSB3YXMgaW50ZXJydXB0ZWQgZnJvbSBpZGxlLiAgTmVzdGVkCi0gKiBpbnRlcnJ1cHRzIGRvbid0IGNvdW50LCB3ZSBtdXN0IGJlIHJ1bm5pbmcgYXQgdGhlIGZpcnN0IGludGVycnVwdAotICogbGV2ZWwuCi0gKi8KLXN0YXRpYyBpbnQgcmN1X2lzX2NwdV9ycnVwdF9mcm9tX2lkbGUodm9pZCkKLXsKLQlyZXR1cm4gcmN1X2R5bnRpY2tzX25lc3RpbmcgPD0gMTsKLX0KLQotLyoKICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgcmN1X3NjaGVkX3FzKCkgYW5kIHJjdV9iaF9xcygpLgogICogQWxzbyBpcnFzIGFyZSBkaXNhYmxlZCB0byBhdm9pZCBjb25mdXNpb24gZHVlIHRvIGludGVycnVwdCBoYW5kbGVycwogICogaW52b2tpbmcgY2FsbF9yY3UoKS4KQEAgLTI1MCw3ICsxNTAsNyBAQAogdm9pZCByY3VfY2hlY2tfY2FsbGJhY2tzKGludCB1c2VyKQogewogCVJDVV9UUkFDRShjaGVja19jcHVfc3RhbGxzKCkpOwotCWlmICh1c2VyIHx8IHJjdV9pc19jcHVfcnJ1cHRfZnJvbV9pZGxlKCkpCisJaWYgKHVzZXIpCiAJCXJjdV9zY2hlZF9xcygpOwogCWVsc2UgaWYgKCFpbl9zb2Z0aXJxKCkpCiAJCXJjdV9iaF9xcygpOwpAQCAtMzU3LDYgKzI1NywxMSBAQAogCXJjcC0+Y3VydGFpbCA9ICZoZWFkLT5uZXh0OwogCVJDVV9UUkFDRShyY3AtPnFsZW4rKyk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJaWYgKHVubGlrZWx5KGlzX2lkbGVfdGFzayhjdXJyZW50KSkpIHsKKwkJLyogZm9yY2Ugc2NoZWR1bGluZyBmb3IgcmN1X3NjaGVkX3FzKCkgKi8KKwkJcmVzY2hlZF9jcHUoMCk7CisJfQogfQogCiAvKgpAQCAtMzgzLDYgKzI4OCw4IEBACiB2b2lkIF9faW5pdCByY3VfaW5pdCh2b2lkKQogewogCW9wZW5fc29mdGlycShSQ1VfU09GVElSUSwgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzKTsKKwlSQ1VfVFJBQ0UocmVzZXRfY3B1X3N0YWxsX3RpY2tzKCZyY3Vfc2NoZWRfY3RybGJsaykpOworCVJDVV9UUkFDRShyZXNldF9jcHVfc3RhbGxfdGlja3MoJnJjdV9iaF9jdHJsYmxrKSk7CiAKIAlyY3VfZWFybHlfYm9vdF90ZXN0cygpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90aW55X3BsdWdpbi5oIGIva2VybmVsL3JjdS90aW55X3BsdWdpbi5oCmluZGV4IDg1OGM1NjUuLmY5NGUyMDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdGlueV9wbHVnaW4uaAorKysgYi9rZXJuZWwvcmN1L3RpbnlfcGx1Z2luLmgKQEAgLTE0NSwxNyArMTQ1LDE2IEBACiAJcmNwLT50aWNrc190aGlzX2dwKys7CiAJaiA9IGppZmZpZXM7CiAJanMgPSBBQ0NFU1NfT05DRShyY3AtPmppZmZpZXNfc3RhbGwpOwotCWlmICgqcmNwLT5jdXJ0YWlsICYmIFVMT05HX0NNUF9HRShqLCBqcykpIHsKKwlpZiAocmNwLT5yY3VjYmxpc3QgJiYgVUxPTkdfQ01QX0dFKGosIGpzKSkgewogCQlwcl9lcnIoIklORk86ICVzIHN0YWxsIG9uIENQVSAoJWx1IHRpY2tzIHRoaXMgR1ApIGlkbGU9JWxseCAodD0lbHUgamlmZmllcyBxPSVsZClcbiIsCi0JCSAgICAgICByY3AtPm5hbWUsIHJjcC0+dGlja3NfdGhpc19ncCwgcmN1X2R5bnRpY2tzX25lc3RpbmcsCisJCSAgICAgICByY3AtPm5hbWUsIHJjcC0+dGlja3NfdGhpc19ncCwgRFlOVElDS19UQVNLX0VYSVRfSURMRSwKIAkJICAgICAgIGppZmZpZXMgLSByY3AtPmdwX3N0YXJ0LCByY3AtPnFsZW4pOwogCQlkdW1wX3N0YWNrKCk7Ci0JfQotCWlmICgqcmNwLT5jdXJ0YWlsICYmIFVMT05HX0NNUF9HRShqLCBqcykpCiAJCUFDQ0VTU19PTkNFKHJjcC0+amlmZmllc19zdGFsbCkgPSBqaWZmaWVzICsKIAkJCTMgKiByY3VfamlmZmllc190aWxsX3N0YWxsX2NoZWNrKCkgKyAzOwotCWVsc2UgaWYgKFVMT05HX0NNUF9HRShqLCBqcykpCisJfSBlbHNlIGlmIChVTE9OR19DTVBfR0UoaiwganMpKSB7CiAJCUFDQ0VTU19PTkNFKHJjcC0+amlmZmllc19zdGFsbCkgPSBqaWZmaWVzICsgcmN1X2ppZmZpZXNfdGlsbF9zdGFsbF9jaGVjaygpOworCX0KIH0KIAogc3RhdGljIHZvaWQgcmVzZXRfY3B1X3N0YWxsX3RpY2tzKHN0cnVjdCByY3VfY3RybGJsayAqcmNwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmMgYi9rZXJuZWwvcmN1L3RyZWUuYwppbmRleCA3NjgwZmMyLi40OGQ2NDBjIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3RyZWUuYworKysgYi9rZXJuZWwvcmN1L3RyZWUuYwpAQCAtMTU2LDYgKzE1NiwxMCBAQAogc3RhdGljIHZvaWQgaW52b2tlX3JjdV9jb3JlKHZvaWQpOwogc3RhdGljIHZvaWQgaW52b2tlX3JjdV9jYWxsYmFja3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCk7CiAKKy8qIHJjdWMvcmN1YiBrdGhyZWFkIHJlYWx0aW1lIHByaW9yaXR5ICovCitzdGF0aWMgaW50IGt0aHJlYWRfcHJpbyA9IENPTkZJR19SQ1VfS1RIUkVBRF9QUklPOworbW9kdWxlX3BhcmFtKGt0aHJlYWRfcHJpbywgaW50LCAwNjQ0KTsKKwogLyoKICAqIFRyYWNrIHRoZSByY3V0b3J0dXJlIHRlc3Qgc2VxdWVuY2UgbnVtYmVyIGFuZCB0aGUgdXBkYXRlIHZlcnNpb24KICAqIG51bWJlciB3aXRoaW4gYSBnaXZlbiB0ZXN0LiAgVGhlIHJjdXRvcnR1cmVfdGVzdHNlcSBpcyBpbmNyZW1lbnRlZApAQCAtMjE1LDYgKzIxOSw5IEBACiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19OT19IWl9GVUxMX1NZU0lETEUgKi8KIH07CiAKK0RFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHVuc2lnbmVkIGxvbmcsIHJjdV9xc19jdHIpOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTChyY3VfcXNfY3RyKTsKKwogLyoKICAqIExldCB0aGUgUkNVIGNvcmUga25vdyB0aGF0IHRoaXMgQ1BVIGhhcyBnb25lIHRocm91Z2ggdGhlIHNjaGVkdWxlciwKICAqIHdoaWNoIGlzIGEgcXVpZXNjZW50IHN0YXRlLiAgVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgbmVlZCBmb3IgYQpAQCAtMjg0LDYgKzI5MSwyMiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmN1X25vdGVfY29udGV4dF9zd2l0Y2gpOwogCisvKgorICogUmVnaXN0ZXIgYSBxdWllc2VjZW50IHN0YXRlIGZvciBhbGwgUkNVIGZsYXZvcnMuICBJZiB0aGVyZSBpcyBhbgorICogZW1lcmdlbmN5LCBpbnZva2UgcmN1X21vbWVudGFyeV9keW50aWNrX2lkbGUoKSB0byBkbyBhIGhlYXZ5LXdlaWdodAorICogZHludGljay1pZGxlIHF1aWVzY2VudCBzdGF0ZSB2aXNpYmxlIHRvIG90aGVyIENQVXMgKGJ1dCBvbmx5IGZvciB0aG9zZQorICogUkNVIGZsYXZvcnMgaW4gZGVzcGFyYXRlIG5lZWQgb2YgYSBxdWllc2NlbnQgc3RhdGUsIHdoaWNoIHdpbGwgbm9ybWFsbHkKKyAqIGJlIG5vbmUgb2YgdGhlbSkuICBFaXRoZXIgd2F5LCBkbyBhIGxpZ2h0d2VpZ2h0IHF1aWVzY2VudCBzdGF0ZSBmb3IKKyAqIGFsbCBSQ1UgZmxhdm9ycy4KKyAqLwordm9pZCByY3VfYWxsX3FzKHZvaWQpCit7CisJaWYgKHVubGlrZWx5KHJhd19jcHVfcmVhZChyY3Vfc2NoZWRfcXNfbWFzaykpKQorCQlyY3VfbW9tZW50YXJ5X2R5bnRpY2tfaWRsZSgpOworCXRoaXNfY3B1X2luYyhyY3VfcXNfY3RyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9hbGxfcXMpOworCiBzdGF0aWMgbG9uZyBibGltaXQgPSAxMDsJLyogTWF4aW11bSBjYWxsYmFja3MgcGVyIHJjdV9kb19iYXRjaC4gKi8KIHN0YXRpYyBsb25nIHFoaW1hcmsgPSAxMDAwMDsJLyogSWYgdGhpcyBtYW55IHBlbmRpbmcsIGlnbm9yZSBibGltaXQuICovCiBzdGF0aWMgbG9uZyBxbG93bWFyayA9IDEwMDsJLyogT25jZSBvbmx5IHRoaXMgbWFueSBwZW5kaW5nLCB1c2UgYmxpbWl0LiAqLwpAQCAtMzE1LDE4ICszMzgsNTQgQEAKIHN0YXRpYyBpbnQgcmN1X3BlbmRpbmcodm9pZCk7CiAKIC8qCi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBSQ1Utc2NoZWQgYmF0Y2hlcyBwcm9jZXNzZWQgdGh1cyBmYXIgZm9yIGRlYnVnICYgc3RhdHMuCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBSQ1UgYmF0Y2hlcyBzdGFydGVkIHRodXMgZmFyIGZvciBkZWJ1ZyAmIHN0YXRzLgogICovCi1sb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9zY2hlZCh2b2lkKQordW5zaWduZWQgbG9uZyByY3VfYmF0Y2hlc19zdGFydGVkKHZvaWQpCit7CisJcmV0dXJuIHJjdV9zdGF0ZV9wLT5ncG51bTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX3N0YXJ0ZWQpOworCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgUkNVLXNjaGVkIGJhdGNoZXMgc3RhcnRlZCB0aHVzIGZhciBmb3IgZGVidWcgJiBzdGF0cy4KKyAqLwordW5zaWduZWQgbG9uZyByY3VfYmF0Y2hlc19zdGFydGVkX3NjaGVkKHZvaWQpCit7CisJcmV0dXJuIHJjdV9zY2hlZF9zdGF0ZS5ncG51bTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX3N0YXJ0ZWRfc2NoZWQpOworCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgUkNVIEJIIGJhdGNoZXMgc3RhcnRlZCB0aHVzIGZhciBmb3IgZGVidWcgJiBzdGF0cy4KKyAqLwordW5zaWduZWQgbG9uZyByY3VfYmF0Y2hlc19zdGFydGVkX2JoKHZvaWQpCit7CisJcmV0dXJuIHJjdV9iaF9zdGF0ZS5ncG51bTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX3N0YXJ0ZWRfYmgpOworCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgUkNVIGJhdGNoZXMgY29tcGxldGVkIHRodXMgZmFyIGZvciBkZWJ1ZyAmIHN0YXRzLgorICovCit1bnNpZ25lZCBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKQoreworCXJldHVybiByY3Vfc3RhdGVfcC0+Y29tcGxldGVkOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmN1X2JhdGNoZXNfY29tcGxldGVkKTsKKworLyoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIFJDVS1zY2hlZCBiYXRjaGVzIGNvbXBsZXRlZCB0aHVzIGZhciBmb3IgZGVidWcgJiBzdGF0cy4KKyAqLwordW5zaWduZWQgbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWRfc2NoZWQodm9pZCkKIHsKIAlyZXR1cm4gcmN1X3NjaGVkX3N0YXRlLmNvbXBsZXRlZDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9zY2hlZCk7CiAKIC8qCi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBSQ1UgQkggYmF0Y2hlcyBwcm9jZXNzZWQgdGh1cyBmYXIgZm9yIGRlYnVnICYgc3RhdHMuCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBSQ1UgQkggYmF0Y2hlcyBjb21wbGV0ZWQgdGh1cyBmYXIgZm9yIGRlYnVnICYgc3RhdHMuCiAgKi8KLWxvbmcgcmN1X2JhdGNoZXNfY29tcGxldGVkX2JoKHZvaWQpCit1bnNpZ25lZCBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9iaCh2b2lkKQogewogCXJldHVybiByY3VfYmhfc3RhdGUuY29tcGxldGVkOwogfQpAQCAtNzU5LDM5ICs4MTgsNzEgQEAKIC8qKgogICogcmN1X25taV9lbnRlciAtIGluZm9ybSBSQ1Ugb2YgZW50cnkgdG8gTk1JIGNvbnRleHQKICAqCi0gKiBJZiB0aGUgQ1BVIHdhcyBpZGxlIHdpdGggZHluYW1pYyB0aWNrcyBhY3RpdmUsIGFuZCB0aGVyZSBpcyBubwotICogaXJxIGhhbmRsZXIgcnVubmluZywgdGhpcyB1cGRhdGVzIHJkdHAtPmR5bnRpY2tzX25taSB0byBsZXQgdGhlCi0gKiBSQ1UgZ3JhY2UtcGVyaW9kIGhhbmRsaW5nIGtub3cgdGhhdCB0aGUgQ1BVIGlzIGFjdGl2ZS4KKyAqIElmIHRoZSBDUFUgd2FzIGlkbGUgZnJvbSBSQ1UncyB2aWV3cG9pbnQsIHVwZGF0ZSByZHRwLT5keW50aWNrcyBhbmQKKyAqIHJkdHAtPmR5bnRpY2tzX25taV9uZXN0aW5nIHRvIGxldCB0aGUgUkNVIGdyYWNlLXBlcmlvZCBoYW5kbGluZyBrbm93CisgKiB0aGF0IHRoZSBDUFUgaXMgYWN0aXZlLiAgVGhpcyBpbXBsZW1lbnRhdGlvbiBwZXJtaXRzIG5lc3RlZCBOTUlzLCBhcworICogbG9uZyBhcyB0aGUgbmVzdGluZyBsZXZlbCBkb2VzIG5vdCBvdmVyZmxvdyBhbiBpbnQuICAoWW91IHdpbGwgcHJvYmFibHkKKyAqIHJ1biBvdXQgb2Ygc3RhY2sgc3BhY2UgZmlyc3QuKQogICovCiB2b2lkIHJjdV9ubWlfZW50ZXIodm9pZCkKIHsKIAlzdHJ1Y3QgcmN1X2R5bnRpY2tzICpyZHRwID0gdGhpc19jcHVfcHRyKCZyY3VfZHludGlja3MpOworCWludCBpbmNieSA9IDI7CiAKLQlpZiAocmR0cC0+ZHludGlja3Nfbm1pX25lc3RpbmcgPT0gMCAmJgotCSAgICAoYXRvbWljX3JlYWQoJnJkdHAtPmR5bnRpY2tzKSAmIDB4MSkpCi0JCXJldHVybjsKLQlyZHRwLT5keW50aWNrc19ubWlfbmVzdGluZysrOwotCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOyAgLyogRm9yY2UgZGVsYXkgZnJvbSBwcmlvciB3cml0ZS4gKi8KLQlhdG9taWNfaW5jKCZyZHRwLT5keW50aWNrcyk7Ci0JLyogQ1BVcyBzZWVpbmcgYXRvbWljX2luYygpIG11c3Qgc2VlIGxhdGVyIFJDVSByZWFkLXNpZGUgY3JpdCBzZWN0cyAqLwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7ICAvKiBTZWUgYWJvdmUuICovCi0JV0FSTl9PTl9PTkNFKCEoYXRvbWljX3JlYWQoJnJkdHAtPmR5bnRpY2tzKSAmIDB4MSkpOworCS8qIENvbXBsYWluIGFib3V0IHVuZGVyZmxvdy4gKi8KKwlXQVJOX09OX09OQ0UocmR0cC0+ZHludGlja3Nfbm1pX25lc3RpbmcgPCAwKTsKKworCS8qCisJICogSWYgaWRsZSBmcm9tIFJDVSB2aWV3cG9pbnQsIGF0b21pY2FsbHkgaW5jcmVtZW50IC0+ZHludGlja3MKKwkgKiB0byBtYXJrIG5vbi1pZGxlIGFuZCBpbmNyZW1lbnQgLT5keW50aWNrc19ubWlfbmVzdGluZyBieSBvbmUuCisJICogT3RoZXJ3aXNlLCBpbmNyZW1lbnQgLT5keW50aWNrc19ubWlfbmVzdGluZyBieSB0d28uICBUaGlzIG1lYW5zCisJICogaWYgLT5keW50aWNrc19ubWlfbmVzdGluZyBpcyBlcXVhbCB0byBvbmUsIHdlIGFyZSBndWFyYW50ZWVkCisJICogdG8gYmUgaW4gdGhlIG91dGVybW9zdCBOTUkgaGFuZGxlciB0aGF0IGludGVycnVwdGVkIGFuIFJDVS1pZGxlCisJICogcGVyaW9kIChvYnNlcnZhdGlvbiBkdWUgdG8gQW5keSBMdXRvbWlyc2tpKS4KKwkgKi8KKwlpZiAoIShhdG9taWNfcmVhZCgmcmR0cC0+ZHludGlja3MpICYgMHgxKSkgeworCQlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsgIC8qIEZvcmNlIGRlbGF5IGZyb20gcHJpb3Igd3JpdGUuICovCisJCWF0b21pY19pbmMoJnJkdHAtPmR5bnRpY2tzKTsKKwkJLyogYXRvbWljX2luYygpIGJlZm9yZSBsYXRlciBSQ1UgcmVhZC1zaWRlIGNyaXQgc2VjdHMgKi8KKwkJc21wX21iX19hZnRlcl9hdG9taWMoKTsgIC8qIFNlZSBhYm92ZS4gKi8KKwkJV0FSTl9PTl9PTkNFKCEoYXRvbWljX3JlYWQoJnJkdHAtPmR5bnRpY2tzKSAmIDB4MSkpOworCQlpbmNieSA9IDE7CisJfQorCXJkdHAtPmR5bnRpY2tzX25taV9uZXN0aW5nICs9IGluY2J5OworCWJhcnJpZXIoKTsKIH0KIAogLyoqCiAgKiByY3Vfbm1pX2V4aXQgLSBpbmZvcm0gUkNVIG9mIGV4aXQgZnJvbSBOTUkgY29udGV4dAogICoKLSAqIElmIHRoZSBDUFUgd2FzIGlkbGUgd2l0aCBkeW5hbWljIHRpY2tzIGFjdGl2ZSwgYW5kIHRoZXJlIGlzIG5vCi0gKiBpcnEgaGFuZGxlciBydW5uaW5nLCB0aGlzIHVwZGF0ZXMgcmR0cC0+ZHludGlja3Nfbm1pIHRvIGxldCB0aGUKLSAqIFJDVSBncmFjZS1wZXJpb2QgaGFuZGxpbmcga25vdyB0aGF0IHRoZSBDUFUgaXMgbm8gbG9uZ2VyIGFjdGl2ZS4KKyAqIElmIHdlIGFyZSByZXR1cm5pbmcgZnJvbSB0aGUgb3V0ZXJtb3N0IE5NSSBoYW5kbGVyIHRoYXQgaW50ZXJydXB0ZWQgYW4KKyAqIFJDVS1pZGxlIHBlcmlvZCwgdXBkYXRlIHJkdHAtPmR5bnRpY2tzIGFuZCByZHRwLT5keW50aWNrc19ubWlfbmVzdGluZworICogdG8gbGV0IHRoZSBSQ1UgZ3JhY2UtcGVyaW9kIGhhbmRsaW5nIGtub3cgdGhhdCB0aGUgQ1BVIGlzIGJhY2sgdG8KKyAqIGJlaW5nIFJDVS1pZGxlLgogICovCiB2b2lkIHJjdV9ubWlfZXhpdCh2b2lkKQogewogCXN0cnVjdCByY3VfZHludGlja3MgKnJkdHAgPSB0aGlzX2NwdV9wdHIoJnJjdV9keW50aWNrcyk7CiAKLQlpZiAocmR0cC0+ZHludGlja3Nfbm1pX25lc3RpbmcgPT0gMCB8fAotCSAgICAtLXJkdHAtPmR5bnRpY2tzX25taV9uZXN0aW5nICE9IDApCisJLyoKKwkgKiBDaGVjayBmb3IgLT5keW50aWNrc19ubWlfbmVzdGluZyB1bmRlcmZsb3cgYW5kIGJhZCAtPmR5bnRpY2tzLgorCSAqIChXZSBhcmUgZXhpdGluZyBhbiBOTUkgaGFuZGxlciwgc28gUkNVIGJldHRlciBiZSBwYXlpbmcgYXR0ZW50aW9uCisJICogdG8gdXMhKQorCSAqLworCVdBUk5fT05fT05DRShyZHRwLT5keW50aWNrc19ubWlfbmVzdGluZyA8PSAwKTsKKwlXQVJOX09OX09OQ0UoIShhdG9taWNfcmVhZCgmcmR0cC0+ZHludGlja3MpICYgMHgxKSk7CisKKwkvKgorCSAqIElmIHRoZSBuZXN0aW5nIGxldmVsIGlzIG5vdCAxLCB0aGUgQ1BVIHdhc24ndCBSQ1UtaWRsZSwgc28KKwkgKiBsZWF2ZSBpdCBpbiBub24tUkNVLWlkbGUgc3RhdGUuCisJICovCisJaWYgKHJkdHAtPmR5bnRpY2tzX25taV9uZXN0aW5nICE9IDEpIHsKKwkJcmR0cC0+ZHludGlja3Nfbm1pX25lc3RpbmcgLT0gMjsKIAkJcmV0dXJuOworCX0KKworCS8qIFRoaXMgTk1JIGludGVycnVwdGVkIGFuIFJDVS1pZGxlIENQVSwgcmVzdG9yZSBSQ1UtaWRsZW5lc3MuICovCisJcmR0cC0+ZHludGlja3Nfbm1pX25lc3RpbmcgPSAwOwogCS8qIENQVXMgc2VlaW5nIGF0b21pY19pbmMoKSBtdXN0IHNlZSBwcmlvciBSQ1UgcmVhZC1zaWRlIGNyaXQgc2VjdHMgKi8KIAlzbXBfbWJfX2JlZm9yZV9hdG9taWMoKTsgIC8qIFNlZSBhYm92ZS4gKi8KIAlhdG9taWNfaW5jKCZyZHRwLT5keW50aWNrcyk7CkBAIC04OTgsMTcgKzk4OSwxNCBAQAogCQl0cmFjZV9yY3VfZnFzKHJkcC0+cnNwLT5uYW1lLCByZHAtPmdwbnVtLCByZHAtPmNwdSwgVFBTKCJkdGkiKSk7CiAJCXJldHVybiAxOwogCX0gZWxzZSB7CisJCWlmIChVTE9OR19DTVBfTFQoQUNDRVNTX09OQ0UocmRwLT5ncG51bSkgKyBVTE9OR19NQVggLyA0LAorCQkJCSByZHAtPm15bm9kZS0+Z3BudW0pKQorCQkJQUNDRVNTX09OQ0UocmRwLT5ncHdyYXApID0gdHJ1ZTsKIAkJcmV0dXJuIDA7CiAJfQogfQogCiAvKgotICogVGhpcyBmdW5jdGlvbiByZWFsbHkgaXNuJ3QgZm9yIHB1YmxpYyBjb25zdW1wdGlvbiwgYnV0IFJDVSBpcyBzcGVjaWFsIGluCi0gKiB0aGF0IGNvbnRleHQgc3dpdGNoZXMgY2FuIGFsbG93IHRoZSBzdGF0ZSBtYWNoaW5lIHRvIG1ha2UgcHJvZ3Jlc3MuCi0gKi8KLWV4dGVybiB2b2lkIHJlc2NoZWRfY3B1KGludCBjcHUpOwotCi0vKgogICogUmV0dXJuIHRydWUgaWYgdGhlIHNwZWNpZmllZCBDUFUgaGFzIHBhc3NlZCB0aHJvdWdoIGEgcXVpZXNjZW50CiAgKiBzdGF0ZSBieSB2aXJ0dWUgb2YgYmVpbmcgaW4gb3IgaGF2aW5nIHBhc3NlZCB0aHJvdWdoIGFuIGR5bnRpY2tzCiAgKiBpZGxlIHN0YXRlIHNpbmNlIHRoZSBsYXN0IGNhbGwgdG8gZHludGlja19zYXZlX3Byb2dyZXNzX2NvdW50ZXIoKQpAQCAtMTAxMSw2ICsxMDk5LDIyIEBACiAJajEgPSByY3VfamlmZmllc190aWxsX3N0YWxsX2NoZWNrKCk7CiAJQUNDRVNTX09OQ0UocnNwLT5qaWZmaWVzX3N0YWxsKSA9IGogKyBqMTsKIAlyc3AtPmppZmZpZXNfcmVzY2hlZCA9IGogKyBqMSAvIDI7CisJcnNwLT5uX2ZvcmNlX3FzX2dwc3RhcnQgPSBBQ0NFU1NfT05DRShyc3AtPm5fZm9yY2VfcXMpOworfQorCisvKgorICogQ29tcGxhaW4gYWJvdXQgc3RhcnZhdGlvbiBvZiBncmFjZS1wZXJpb2Qga3RocmVhZC4KKyAqLworc3RhdGljIHZvaWQgcmN1X2NoZWNrX2dwX2t0aHJlYWRfc3RhcnZhdGlvbihzdHJ1Y3QgcmN1X3N0YXRlICpyc3ApCit7CisJdW5zaWduZWQgbG9uZyBncGE7CisJdW5zaWduZWQgbG9uZyBqOworCisJaiA9IGppZmZpZXM7CisJZ3BhID0gQUNDRVNTX09OQ0UocnNwLT5ncF9hY3Rpdml0eSk7CisJaWYgKGogLSBncGEgPiAyICogSFopCisJCXByX2VycigiJXMga3RocmVhZCBzdGFydmVkIGZvciAlbGQgamlmZmllcyFcbiIsCisJCSAgICAgICByc3AtPm5hbWUsIGogLSBncGEpOwogfQogCiAvKgpAQCAtMTAzMywxMSArMTEzNywxMyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcHJpbnRfb3RoZXJfY3B1X3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKK3N0YXRpYyB2b2lkIHByaW50X290aGVyX2NwdV9zdGFsbChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHVuc2lnbmVkIGxvbmcgZ3BudW0pCiB7CiAJaW50IGNwdTsKIAlsb25nIGRlbHRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBncGE7CisJdW5zaWduZWQgbG9uZyBqOwogCWludCBuZGV0ZWN0ZWQgPSAwOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7CiAJbG9uZyB0b3RxbGVuID0gMDsKQEAgLTEwNzUsMzAgKzExODEsMzQgQEAKIAkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCX0KIAotCS8qCi0JICogTm93IHJhdCBvbiBhbnkgdGFza3MgdGhhdCBnb3Qga2lja2VkIHVwIHRvIHRoZSByb290IHJjdV9ub2RlCi0JICogZHVlIHRvIENQVSBvZmZsaW5pbmcuCi0JICovCi0Jcm5wID0gcmN1X2dldF9yb290KHJzcCk7Ci0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQluZGV0ZWN0ZWQgKz0gcmN1X3ByaW50X3Rhc2tfc3RhbGwocm5wKTsKLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcm5wLT5sb2NrLCBmbGFncyk7Ci0KIAlwcmludF9jcHVfc3RhbGxfaW5mb19lbmQoKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQogCQl0b3RxbGVuICs9IHBlcl9jcHVfcHRyKHJzcC0+cmRhLCBjcHUpLT5xbGVuOwogCXByX2NvbnQoIihkZXRlY3RlZCBieSAlZCwgdD0lbGQgamlmZmllcywgZz0lbGQsIGM9JWxkLCBxPSVsdSlcbiIsCiAJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgKGxvbmcpKGppZmZpZXMgLSByc3AtPmdwX3N0YXJ0KSwKIAkgICAgICAgKGxvbmcpcnNwLT5ncG51bSwgKGxvbmcpcnNwLT5jb21wbGV0ZWQsIHRvdHFsZW4pOwotCWlmIChuZGV0ZWN0ZWQgPT0gMCkKLQkJcHJfZXJyKCJJTkZPOiBTdGFsbCBlbmRlZCBiZWZvcmUgc3RhdGUgZHVtcCBzdGFydFxuIik7Ci0JZWxzZQorCWlmIChuZGV0ZWN0ZWQpIHsKIAkJcmN1X2R1bXBfY3B1X3N0YWNrcyhyc3ApOworCX0gZWxzZSB7CisJCWlmIChBQ0NFU1NfT05DRShyc3AtPmdwbnVtKSAhPSBncG51bSB8fAorCQkgICAgQUNDRVNTX09OQ0UocnNwLT5jb21wbGV0ZWQpID09IGdwbnVtKSB7CisJCQlwcl9lcnIoIklORk86IFN0YWxsIGVuZGVkIGJlZm9yZSBzdGF0ZSBkdW1wIHN0YXJ0XG4iKTsKKwkJfSBlbHNlIHsKKwkJCWogPSBqaWZmaWVzOworCQkJZ3BhID0gQUNDRVNTX09OQ0UocnNwLT5ncF9hY3Rpdml0eSk7CisJCQlwcl9lcnIoIkFsbCBRU2VzIHNlZW4sIGxhc3QgJXMga3RocmVhZCBhY3Rpdml0eSAlbGQgKCVsZC0lbGQpLCBqaWZmaWVzX3RpbGxfbmV4dF9mcXM9JWxkXG4iLAorCQkJICAgICAgIHJzcC0+bmFtZSwgaiAtIGdwYSwgaiwgZ3BhLAorCQkJICAgICAgIGppZmZpZXNfdGlsbF9uZXh0X2Zxcyk7CisJCQkvKiBJbiB0aGlzIGNhc2UsIHRoZSBjdXJyZW50IENQVSBtaWdodCBiZSBhdCBmYXVsdC4gKi8KKwkJCXNjaGVkX3Nob3dfdGFzayhjdXJyZW50KTsKKwkJfQorCX0KIAogCS8qIENvbXBsYWluIGFib3V0IHRhc2tzIGJsb2NraW5nIHRoZSBncmFjZSBwZXJpb2QuICovCi0KIAlyY3VfcHJpbnRfZGV0YWlsX3Rhc2tfc3RhbGwocnNwKTsKIAorCXJjdV9jaGVja19ncF9rdGhyZWFkX3N0YXJ2YXRpb24ocnNwKTsKKwogCWZvcmNlX3F1aWVzY2VudF9zdGF0ZShyc3ApOyAgLyogS2ljayB0aGVtIGFsbC4gKi8KIH0KIApAQCAtMTEyMyw2ICsxMjMzLDkgQEAKIAlwcl9jb250KCIgKHQ9JWx1IGppZmZpZXMgZz0lbGQgYz0lbGQgcT0lbHUpXG4iLAogCQlqaWZmaWVzIC0gcnNwLT5ncF9zdGFydCwKIAkJKGxvbmcpcnNwLT5ncG51bSwgKGxvbmcpcnNwLT5jb21wbGV0ZWQsIHRvdHFsZW4pOworCisJcmN1X2NoZWNrX2dwX2t0aHJlYWRfc3RhcnZhdGlvbihyc3ApOworCiAJcmN1X2R1bXBfY3B1X3N0YWNrcyhyc3ApOwogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKQEAgLTExOTMsNyArMTMwNiw3IEBACiAJCSAgIFVMT05HX0NNUF9HRShqLCBqcyArIFJDVV9TVEFMTF9SQVRfREVMQVkpKSB7CiAKIAkJLyogVGhleSBoYWQgYSBmZXcgdGltZSB1bml0cyB0byBkdW1wIHN0YWNrLCBzbyBjb21wbGFpbi4gKi8KLQkJcHJpbnRfb3RoZXJfY3B1X3N0YWxsKHJzcCk7CisJCXByaW50X290aGVyX2NwdV9zdGFsbChyc3AsIGdwbnVtKTsKIAl9CiB9CiAKQEAgLTE1MzAsNyArMTY0Myw4IEBACiAJYm9vbCByZXQ7CiAKIAkvKiBIYW5kbGUgdGhlIGVuZHMgb2YgYW55IHByZWNlZGluZyBncmFjZSBwZXJpb2RzIGZpcnN0LiAqLwotCWlmIChyZHAtPmNvbXBsZXRlZCA9PSBybnAtPmNvbXBsZXRlZCkgeworCWlmIChyZHAtPmNvbXBsZXRlZCA9PSBybnAtPmNvbXBsZXRlZCAmJgorCSAgICAhdW5saWtlbHkoQUNDRVNTX09OQ0UocmRwLT5ncHdyYXApKSkgewogCiAJCS8qIE5vIGdyYWNlIHBlcmlvZCBlbmQsIHNvIGp1c3QgYWNjZWxlcmF0ZSByZWNlbnQgY2FsbGJhY2tzLiAqLwogCQlyZXQgPSByY3VfYWNjZWxlcmF0ZV9jYnMocnNwLCBybnAsIHJkcCk7CkBAIC0xNTQ1LDcgKzE2NTksNyBAQAogCQl0cmFjZV9yY3VfZ3JhY2VfcGVyaW9kKHJzcC0+bmFtZSwgcmRwLT5ncG51bSwgVFBTKCJjcHVlbmQiKSk7CiAJfQogCi0JaWYgKHJkcC0+Z3BudW0gIT0gcm5wLT5ncG51bSkgeworCWlmIChyZHAtPmdwbnVtICE9IHJucC0+Z3BudW0gfHwgdW5saWtlbHkoQUNDRVNTX09OQ0UocmRwLT5ncHdyYXApKSkgewogCQkvKgogCQkgKiBJZiB0aGUgY3VycmVudCBncmFjZSBwZXJpb2QgaXMgd2FpdGluZyBmb3IgdGhpcyBDUFUsCiAJCSAqIHNldCB1cCB0byBkZXRlY3QgYSBxdWllc2NlbnQgc3RhdGUsIG90aGVyd2lzZSBkb24ndApAQCAtMTU1NCw4ICsxNjY4LDEwIEBACiAJCXJkcC0+Z3BudW0gPSBybnAtPmdwbnVtOwogCQl0cmFjZV9yY3VfZ3JhY2VfcGVyaW9kKHJzcC0+bmFtZSwgcmRwLT5ncG51bSwgVFBTKCJjcHVzdGFydCIpKTsKIAkJcmRwLT5wYXNzZWRfcXVpZXNjZSA9IDA7CisJCXJkcC0+cmN1X3FzX2N0cl9zbmFwID0gX190aGlzX2NwdV9yZWFkKHJjdV9xc19jdHIpOwogCQlyZHAtPnFzX3BlbmRpbmcgPSAhIShybnAtPnFzbWFzayAmIHJkcC0+Z3JwbWFzayk7CiAJCXplcm9fY3B1X3N0YWxsX3RpY2tzKHJkcCk7CisJCUFDQ0VTU19PTkNFKHJkcC0+Z3B3cmFwKSA9IGZhbHNlOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMTU2OSw3ICsxNjg1LDggQEAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcm5wID0gcmRwLT5teW5vZGU7CiAJaWYgKChyZHAtPmdwbnVtID09IEFDQ0VTU19PTkNFKHJucC0+Z3BudW0pICYmCi0JICAgICByZHAtPmNvbXBsZXRlZCA9PSBBQ0NFU1NfT05DRShybnAtPmNvbXBsZXRlZCkpIHx8IC8qIHcvb3V0IGxvY2suICovCisJICAgICByZHAtPmNvbXBsZXRlZCA9PSBBQ0NFU1NfT05DRShybnAtPmNvbXBsZXRlZCkgJiYKKwkgICAgICF1bmxpa2VseShBQ0NFU1NfT05DRShyZHAtPmdwd3JhcCkpKSB8fCAvKiB3L291dCBsb2NrLiAqLwogCSAgICAhcmF3X3NwaW5fdHJ5bG9jaygmcm5wLT5sb2NrKSkgeyAvKiBpcnFzIGFscmVhZHkgb2ZmLCBzbyBsYXRlci4gKi8KIAkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlyZXR1cm47CkBAIC0xNTg5LDYgKzE3MDYsNyBAQAogCXN0cnVjdCByY3VfZGF0YSAqcmRwOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7CiAKKwlBQ0NFU1NfT05DRShyc3AtPmdwX2FjdGl2aXR5KSA9IGppZmZpZXM7CiAJcmN1X2JpbmRfZ3Bfa3RocmVhZCgpOwogCXJhd19zcGluX2xvY2tfaXJxKCZybnAtPmxvY2spOwogCXNtcF9tYl9fYWZ0ZXJfdW5sb2NrX2xvY2soKTsKQEAgLTE2NDksNiArMTc2Nyw3IEBACiAJCQkJCSAgICBybnAtPmdycGhpLCBybnAtPnFzbWFzayk7CiAJCXJhd19zcGluX3VubG9ja19pcnEoJnJucC0+bG9jayk7CiAJCWNvbmRfcmVzY2hlZF9yY3VfcXMoKTsKKwkJQUNDRVNTX09OQ0UocnNwLT5ncF9hY3Rpdml0eSkgPSBqaWZmaWVzOwogCX0KIAogCW11dGV4X3VubG9jaygmcnNwLT5vbm9mZl9tdXRleCk7CkBAIC0xNjY1LDYgKzE3ODQsNyBAQAogCXVuc2lnbmVkIGxvbmcgbWF4ajsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucCA9IHJjdV9nZXRfcm9vdChyc3ApOwogCisJQUNDRVNTX09OQ0UocnNwLT5ncF9hY3Rpdml0eSkgPSBqaWZmaWVzOwogCXJzcC0+bl9mb3JjZV9xcysrOwogCWlmIChmcXNfc3RhdGUgPT0gUkNVX1NBVkVfRFlOVElDSykgewogCQkvKiBDb2xsZWN0IGR5bnRpY2staWRsZSBzbmFwc2hvdHMuICovCkBAIC0xNzAzLDYgKzE4MjMsNyBAQAogCXN0cnVjdCByY3VfZGF0YSAqcmRwOwogCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcmN1X2dldF9yb290KHJzcCk7CiAKKwlBQ0NFU1NfT05DRShyc3AtPmdwX2FjdGl2aXR5KSA9IGppZmZpZXM7CiAJcmF3X3NwaW5fbG9ja19pcnEoJnJucC0+bG9jayk7CiAJc21wX21iX19hZnRlcl91bmxvY2tfbG9jaygpOwogCWdwX2R1cmF0aW9uID0gamlmZmllcyAtIHJzcC0+Z3Bfc3RhcnQ7CkBAIC0xNzM5LDYgKzE4NjAsNyBAQAogCQlub2NiICs9IHJjdV9mdXR1cmVfZ3BfY2xlYW51cChyc3AsIHJucCk7CiAJCXJhd19zcGluX3VubG9ja19pcnEoJnJucC0+bG9jayk7CiAJCWNvbmRfcmVzY2hlZF9yY3VfcXMoKTsKKwkJQUNDRVNTX09OQ0UocnNwLT5ncF9hY3Rpdml0eSkgPSBqaWZmaWVzOwogCX0KIAlybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIAlyYXdfc3Bpbl9sb2NrX2lycSgmcm5wLT5sb2NrKTsKQEAgLTE3ODgsNiArMTkxMCw3IEBACiAJCQlpZiAocmN1X2dwX2luaXQocnNwKSkKIAkJCQlicmVhazsKIAkJCWNvbmRfcmVzY2hlZF9yY3VfcXMoKTsKKwkJCUFDQ0VTU19PTkNFKHJzcC0+Z3BfYWN0aXZpdHkpID0gamlmZmllczsKIAkJCVdBUk5fT04oc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpOwogCQkJdHJhY2VfcmN1X2dyYWNlX3BlcmlvZChyc3AtPm5hbWUsCiAJCQkJCSAgICAgICBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKSwKQEAgLTE4MzEsOSArMTk1NCwxMSBAQAogCQkJCQkJICAgICAgIEFDQ0VTU19PTkNFKHJzcC0+Z3BudW0pLAogCQkJCQkJICAgICAgIFRQUygiZnFzZW5kIikpOwogCQkJCWNvbmRfcmVzY2hlZF9yY3VfcXMoKTsKKwkJCQlBQ0NFU1NfT05DRShyc3AtPmdwX2FjdGl2aXR5KSA9IGppZmZpZXM7CiAJCQl9IGVsc2UgewogCQkJCS8qIERlYWwgd2l0aCBzdHJheSBzaWduYWwuICovCiAJCQkJY29uZF9yZXNjaGVkX3JjdV9xcygpOworCQkJCUFDQ0VTU19PTkNFKHJzcC0+Z3BfYWN0aXZpdHkpID0gamlmZmllczsKIAkJCQlXQVJOX09OKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKIAkJCQl0cmFjZV9yY3VfZ3JhY2VfcGVyaW9kKHJzcC0+bmFtZSwKIAkJCQkJCSAgICAgICBBQ0NFU1NfT05DRShyc3AtPmdwbnVtKSwKQEAgLTIwMTAsOCArMjEzNSwxMCBAQAogCXJucCA9IHJkcC0+bXlub2RlOwogCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcm5wLT5sb2NrLCBmbGFncyk7CiAJc21wX21iX19hZnRlcl91bmxvY2tfbG9jaygpOwotCWlmIChyZHAtPnBhc3NlZF9xdWllc2NlID09IDAgfHwgcmRwLT5ncG51bSAhPSBybnAtPmdwbnVtIHx8Ci0JICAgIHJucC0+Y29tcGxldGVkID09IHJucC0+Z3BudW0pIHsKKwlpZiAoKHJkcC0+cGFzc2VkX3F1aWVzY2UgPT0gMCAmJgorCSAgICAgcmRwLT5yY3VfcXNfY3RyX3NuYXAgPT0gX190aGlzX2NwdV9yZWFkKHJjdV9xc19jdHIpKSB8fAorCSAgICByZHAtPmdwbnVtICE9IHJucC0+Z3BudW0gfHwgcm5wLT5jb21wbGV0ZWQgPT0gcm5wLT5ncG51bSB8fAorCSAgICByZHAtPmdwd3JhcCkgewogCiAJCS8qCiAJCSAqIFRoZSBncmFjZSBwZXJpb2QgaW4gd2hpY2ggdGhpcyBxdWllc2NlbnQgc3RhdGUgd2FzCkBAIC0yMDIwLDYgKzIxNDcsNyBAQAogCQkgKiB3aXRoaW4gdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kLgogCQkgKi8KIAkJcmRwLT5wYXNzZWRfcXVpZXNjZSA9IDA7CS8qIG5lZWQgcXMgZm9yIG5ldyBncC4gKi8KKwkJcmRwLT5yY3VfcXNfY3RyX3NuYXAgPSBfX3RoaXNfY3B1X3JlYWQocmN1X3FzX2N0cik7CiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTIwNjQsNyArMjE5Miw4IEBACiAJICogV2FzIHRoZXJlIGEgcXVpZXNjZW50IHN0YXRlIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGdyYWNlCiAJICogcGVyaW9kPyBJZiBubywgdGhlbiBleGl0IGFuZCB3YWl0IGZvciB0aGUgbmV4dCBjYWxsLgogCSAqLwotCWlmICghcmRwLT5wYXNzZWRfcXVpZXNjZSkKKwlpZiAoIXJkcC0+cGFzc2VkX3F1aWVzY2UgJiYKKwkgICAgcmRwLT5yY3VfcXNfY3RyX3NuYXAgPT0gX190aGlzX2NwdV9yZWFkKHJjdV9xc19jdHIpKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtMjE5NSw2ICsyMzI0LDQ2IEBACiB9CiAKIC8qCisgKiBBbGwgQ1BVcyBmb3IgdGhlIHNwZWNpZmllZCByY3Vfbm9kZSBzdHJ1Y3R1cmUgaGF2ZSBnb25lIG9mZmxpbmUsCisgKiBhbmQgYWxsIHRhc2tzIHRoYXQgd2VyZSBwcmVlbXB0ZWQgd2l0aGluIGFuIFJDVSByZWFkLXNpZGUgY3JpdGljYWwKKyAqIHNlY3Rpb24gd2hpbGUgcnVubmluZyBvbiBvbmUgb2YgdGhvc2UgQ1BVcyBoYXZlIHNpbmNlIGV4aXRlZCB0aGVpciBSQ1UKKyAqIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiAgU29tZSBvdGhlciBDUFUgaXMgcmVwb3J0aW5nIHRoaXMgZmFjdCB3aXRoCisgKiB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZSdzIC0+bG9jayBoZWxkIGFuZCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICogVGhpcyBmdW5jdGlvbiB0aGVyZWZvcmUgZ29lcyB1cCB0aGUgdHJlZSBvZiByY3Vfbm9kZSBzdHJ1Y3R1cmVzLAorICogY2xlYXJpbmcgdGhlIGNvcnJlc3BvbmRpbmcgYml0cyBpbiB0aGUgLT5xc21hc2tpbml0IGZpZWxkcy4gIE5vdGUgdGhhdAorICogdGhlIGxlYWYgcmN1X25vZGUgc3RydWN0dXJlJ3MgLT5xc21hc2tpbml0IGZpZWxkIGhhcyBhbHJlYWR5IGJlZW4KKyAqIHVwZGF0ZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgY2hlY2sgdGhhdCB0aGUgc3BlY2lmaWVkIHJjdV9ub2RlIHN0cnVjdHVyZSBoYXMKKyAqIGFsbCBDUFVzIG9mZmxpbmUgYW5kIG5vIGJsb2NrZWQgdGFza3MsIHNvIGl0IGlzIE9LIHRvIGludm9rZSBpdAorICogcHJlbWF0dXJlbHkuICBUaGF0IHNhaWQsIGludm9raW5nIGl0IGFmdGVyIHRoZSBmYWN0IHdpbGwgY29zdCB5b3UKKyAqIGEgbmVlZGxlc3MgbG9jayBhY3F1aXNpdGlvbi4gIFNvIG9uY2UgaXQgaGFzIGRvbmUgaXRzIHdvcmssIGRvbid0CisgKiBpbnZva2UgaXQgYWdhaW4uCisgKi8KK3N0YXRpYyB2b2lkIHJjdV9jbGVhbnVwX2RlYWRfcm5wKHN0cnVjdCByY3Vfbm9kZSAqcm5wX2xlYWYpCit7CisJbG9uZyBtYXNrOworCXN0cnVjdCByY3Vfbm9kZSAqcm5wID0gcm5wX2xlYWY7CisKKwlpZiAocm5wLT5xc21hc2tpbml0IHx8IHJjdV9wcmVlbXB0X2hhc190YXNrcyhybnApKQorCQlyZXR1cm47CisJZm9yICg7OykgeworCQltYXNrID0gcm5wLT5ncnBtYXNrOworCQlybnAgPSBybnAtPnBhcmVudDsKKwkJaWYgKCFybnApCisJCQlicmVhazsKKwkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLworCQlzbXBfbWJfX2FmdGVyX3VubG9ja19sb2NrKCk7IC8qIEdQIG1lbW9yeSBvcmRlcmluZy4gKi8KKwkJcm5wLT5xc21hc2tpbml0ICY9IH5tYXNrOworCQlpZiAocm5wLT5xc21hc2tpbml0KSB7CisJCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLworCQkJcmV0dXJuOworCQl9CisJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCisJfQorfQorCisvKgogICogVGhlIENQVSBoYXMgYmVlbiBjb21wbGV0ZWx5IHJlbW92ZWQsIGFuZCBzb21lIG90aGVyIENQVSBpcyByZXBvcnRpbmcKICAqIHRoaXMgZmFjdCBmcm9tIHByb2Nlc3MgY29udGV4dC4gIERvIHRoZSByZW1haW5kZXIgb2YgdGhlIGNsZWFudXAsCiAgKiBpbmNsdWRpbmcgb3JwaGFuaW5nIHRoZSBvdXRnb2luZyBDUFUncyBSQ1UgY2FsbGJhY2tzLCBhbmQgYWxzbwpAQCAtMjIwNCw4ICsyMzczLDYgQEAKIHN0YXRpYyB2b2lkIHJjdV9jbGVhbnVwX2RlYWRfY3B1KGludCBjcHUsIHN0cnVjdCByY3Vfc3RhdGUgKnJzcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgbWFzazsKLQlpbnQgbmVlZF9yZXBvcnQgPSAwOwogCXN0cnVjdCByY3VfZGF0YSAqcmRwID0gcGVyX2NwdV9wdHIocnNwLT5yZGEsIGNwdSk7CiAJc3RydWN0IHJjdV9ub2RlICpybnAgPSByZHAtPm15bm9kZTsgIC8qIE91dGdvaW5nIENQVSdzIHJkcCAmIHJucC4gKi8KIApAQCAtMjIxOSw0MCArMjM4NiwxNSBAQAogCS8qIE9ycGhhbiB0aGUgZGVhZCBDUFUncyBjYWxsYmFja3MsIGFuZCBhZG9wdCB0aGVtIGlmIGFwcHJvcHJpYXRlLiAqLwogCXJjdV9zZW5kX2Nic190b19vcnBoYW5hZ2UoY3B1LCByc3AsIHJucCwgcmRwKTsKIAlyY3VfYWRvcHRfb3JwaGFuX2Nicyhyc3AsIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnNwLT5vcnBoYW5fbG9jaywgZmxhZ3MpOwogCi0JLyogUmVtb3ZlIHRoZSBvdXRnb2luZyBDUFUgZnJvbSB0aGUgbWFza3MgaW4gdGhlIHJjdV9ub2RlIGhpZXJhcmNoeS4gKi8KLQltYXNrID0gcmRwLT5ncnBtYXNrOwkvKiBybnAtPmdycGxvIGlzIGNvbnN0YW50LiAqLwotCWRvIHsKLQkJcmF3X3NwaW5fbG9jaygmcm5wLT5sb2NrKTsJLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkLiAqLwotCQlzbXBfbWJfX2FmdGVyX3VubG9ja19sb2NrKCk7Ci0JCXJucC0+cXNtYXNraW5pdCAmPSB+bWFzazsKLQkJaWYgKHJucC0+cXNtYXNraW5pdCAhPSAwKSB7Ci0JCQlpZiAocm5wICE9IHJkcC0+bXlub2RlKQotCQkJCXJhd19zcGluX3VubG9jaygmcm5wLT5sb2NrKTsgLyogaXJxcyByZW1haW4gZGlzYWJsZWQuICovCi0JCQlicmVhazsKLQkJfQotCQlpZiAocm5wID09IHJkcC0+bXlub2RlKQotCQkJbmVlZF9yZXBvcnQgPSByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHJzcCwgcm5wLCByZHApOwotCQllbHNlCi0JCQlyYXdfc3Bpbl91bmxvY2soJnJucC0+bG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwotCQltYXNrID0gcm5wLT5ncnBtYXNrOwotCQlybnAgPSBybnAtPnBhcmVudDsKLQl9IHdoaWxlIChybnAgIT0gTlVMTCk7Ci0KLQkvKgotCSAqIFdlIHN0aWxsIGhvbGQgdGhlIGxlYWYgcmN1X25vZGUgc3RydWN0dXJlIGxvY2sgaGVyZSwgYW5kCi0JICogaXJxcyBhcmUgc3RpbGwgZGlzYWJsZWQuICBUaGUgcmVhc29uIGZvciB0aGlzIHN1YnRlcmZ1Z2UgaXMKLQkgKiBiZWNhdXNlIGludm9raW5nIHJjdV9yZXBvcnRfdW5ibG9ja19xc19ybnAoKSB3aXRoIC0+b3JwaGFuX2xvY2sKLQkgKiBoZWxkIGxlYWRzIHRvIGRlYWRsb2NrLgotCSAqLwotCXJhd19zcGluX3VubG9jaygmcnNwLT5vcnBoYW5fbG9jayk7IC8qIGlycXMgcmVtYWluIGRpc2FibGVkLiAqLwotCXJucCA9IHJkcC0+bXlub2RlOwotCWlmIChuZWVkX3JlcG9ydCAmIFJDVV9PRkxfVEFTS1NfTk9STV9HUCkKLQkJcmN1X3JlcG9ydF91bmJsb2NrX3FzX3JucChybnAsIGZsYWdzKTsKLQllbHNlCi0JCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKLQlpZiAobmVlZF9yZXBvcnQgJiBSQ1VfT0ZMX1RBU0tTX0VYUF9HUCkKLQkJcmN1X3JlcG9ydF9leHBfcm5wKHJzcCwgcm5wLCB0cnVlKTsKKwkvKiBSZW1vdmUgb3V0Z29pbmcgQ1BVIGZyb20gbWFzayBpbiB0aGUgbGVhZiByY3Vfbm9kZSBzdHJ1Y3R1cmUuICovCisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKKwlzbXBfbWJfX2FmdGVyX3VubG9ja19sb2NrKCk7CS8qIEVuZm9yY2UgR1AgbWVtb3J5LW9yZGVyIGd1YXJhbnRlZS4gKi8KKwlybnAtPnFzbWFza2luaXQgJj0gfnJkcC0+Z3JwbWFzazsKKwlpZiAocm5wLT5xc21hc2tpbml0ID09IDAgJiYgIXJjdV9wcmVlbXB0X2hhc190YXNrcyhybnApKQorCQlyY3VfY2xlYW51cF9kZWFkX3JucChybnApOworCXJjdV9yZXBvcnRfcXNfcm5wKHJkcC0+Z3JwbWFzaywgcnNwLCBybnAsIGZsYWdzKTsgLyogUmxzZXMgcm5wLT5sb2NrLiAqLwogCVdBUk5fT05DRShyZHAtPnFsZW4gIT0gMCB8fCByZHAtPm54dGxpc3QgIT0gTlVMTCwKIAkJICAicmN1X2NsZWFudXBfZGVhZF9jcHU6IENhbGxiYWNrcyBvbiBvZmZsaW5lIENQVSAlZDogcWxlbj0lbHUsIG54dGxpc3Q9JXBcbiIsCiAJCSAgY3B1LCByZHAtPnFsZW4sIHJkcC0+bnh0bGlzdCk7CkBAIC0yMjY4LDYgKzI0MTAsMTAgQEAKIHsKIH0KIAorc3RhdGljIHZvaWQgX19tYXliZV91bnVzZWQgcmN1X2NsZWFudXBfZGVhZF9ybnAoc3RydWN0IHJjdV9ub2RlICpybnBfbGVhZikKK3sKK30KKwogc3RhdGljIHZvaWQgcmN1X2NsZWFudXBfZGVhZF9jcHUoaW50IGNwdSwgc3RydWN0IHJjdV9zdGF0ZSAqcnNwKQogewogfQpAQCAtMjQ2NCwxMiArMjYxMCw2IEBACiAJCX0KIAkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCX0KLQlybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKLQlpZiAocm5wLT5xc21hc2sgPT0gMCkgewotCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwotCQlzbXBfbWJfX2FmdGVyX3VubG9ja19sb2NrKCk7Ci0JCXJjdV9pbml0aWF0ZV9ib29zdChybnAsIGZsYWdzKTsgLyogcmVsZWFzZXMgcm5wLT5sb2NrLiAqLwotCX0KIH0KIAogLyoKQEAgLTI1NjksNyArMjcwOSw3IEBACiAgKiBTY2hlZHVsZSBSQ1UgY2FsbGJhY2sgaW52b2NhdGlvbi4gIElmIHRoZSBzcGVjaWZpZWQgdHlwZSBvZiBSQ1UKICAqIGRvZXMgbm90IHN1cHBvcnQgUkNVIHByaW9yaXR5IGJvb3N0aW5nLCBqdXN0IGRvIGEgZGlyZWN0IGNhbGwsCiAgKiBvdGhlcndpc2Ugd2FrZSB1cCB0aGUgcGVyLUNQVSBrZXJuZWwga3RocmVhZC4gIE5vdGUgdGhhdCBiZWNhdXNlIHdlCi0gKiBhcmUgcnVubmluZyBvbiB0aGUgY3VycmVudCBDUFUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCB0aGUKKyAqIGFyZSBydW5uaW5nIG9uIHRoZSBjdXJyZW50IENQVSB3aXRoIHNvZnRpcnFzIGRpc2FibGVkLCB0aGUKICAqIHJjdV9jcHVfa3RocmVhZF90YXNrIGNhbm5vdCBkaXNhcHBlYXIgb3V0IGZyb20gdW5kZXIgdXMuCiAgKi8KIHN0YXRpYyB2b2lkIGludm9rZV9yY3VfY2FsbGJhY2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgc3RydWN0IHJjdV9kYXRhICpyZHApCkBAIC0zMTA5LDkgKzMyNDksMTIgQEAKIAogCS8qIElzIHRoZSBSQ1UgY29yZSB3YWl0aW5nIGZvciBhIHF1aWVzY2VudCBzdGF0ZSBmcm9tIHRoaXMgQ1BVPyAqLwogCWlmIChyY3Vfc2NoZWR1bGVyX2Z1bGx5X2FjdGl2ZSAmJgotCSAgICByZHAtPnFzX3BlbmRpbmcgJiYgIXJkcC0+cGFzc2VkX3F1aWVzY2UpIHsKKwkgICAgcmRwLT5xc19wZW5kaW5nICYmICFyZHAtPnBhc3NlZF9xdWllc2NlICYmCisJICAgIHJkcC0+cmN1X3FzX2N0cl9zbmFwID09IF9fdGhpc19jcHVfcmVhZChyY3VfcXNfY3RyKSkgewogCQlyZHAtPm5fcnBfcXNfcGVuZGluZysrOwotCX0gZWxzZSBpZiAocmRwLT5xc19wZW5kaW5nICYmIHJkcC0+cGFzc2VkX3F1aWVzY2UpIHsKKwl9IGVsc2UgaWYgKHJkcC0+cXNfcGVuZGluZyAmJgorCQkgICAocmRwLT5wYXNzZWRfcXVpZXNjZSB8fAorCQkgICAgcmRwLT5yY3VfcXNfY3RyX3NuYXAgIT0gX190aGlzX2NwdV9yZWFkKHJjdV9xc19jdHIpKSkgewogCQlyZHAtPm5fcnBfcmVwb3J0X3FzKys7CiAJCXJldHVybiAxOwogCX0KQEAgLTMxMzUsNyArMzI3OCw4IEBACiAJfQogCiAJLyogSGFzIGEgbmV3IFJDVSBncmFjZSBwZXJpb2Qgc3RhcnRlZD8gKi8KLQlpZiAoQUNDRVNTX09OQ0Uocm5wLT5ncG51bSkgIT0gcmRwLT5ncG51bSkgeyAvKiBvdXRzaWRlIGxvY2sgKi8KKwlpZiAoQUNDRVNTX09OQ0Uocm5wLT5ncG51bSkgIT0gcmRwLT5ncG51bSB8fAorCSAgICB1bmxpa2VseShBQ0NFU1NfT05DRShyZHAtPmdwd3JhcCkpKSB7IC8qIG91dHNpZGUgbG9jayAqLwogCQlyZHAtPm5fcnBfZ3Bfc3RhcnRlZCsrOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0zMzE4LDYgKzM0NjIsNyBAQAogCQkJfSBlbHNlIHsKIAkJCQlfcmN1X2JhcnJpZXJfdHJhY2UocnNwLCAiT25saW5lTm9DQiIsIGNwdSwKIAkJCQkJCSAgIHJzcC0+bl9iYXJyaWVyX2RvbmUpOworCQkJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCQkJCWF0b21pY19pbmMoJnJzcC0+YmFycmllcl9jcHVfY291bnQpOwogCQkJCV9fY2FsbF9yY3UoJnJkcC0+YmFycmllcl9oZWFkLAogCQkJCQkgICByY3VfYmFycmllcl9jYWxsYmFjaywgcnNwLCBjcHUsIDApOwpAQCAtMzM4NSw5ICszNTMwLDYgQEAKIAkvKiBTZXQgdXAgbG9jYWwgc3RhdGUsIGVuc3VyaW5nIGNvbnNpc3RlbnQgdmlldyBvZiBnbG9iYWwgc3RhdGUuICovCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlyZHAtPmdycG1hc2sgPSAxVUwgPDwgKGNwdSAtIHJkcC0+bXlub2RlLT5ncnBsbyk7Ci0JaW5pdF9jYWxsYmFja19saXN0KHJkcCk7Ci0JcmRwLT5xbGVuX2xhenkgPSAwOwotCUFDQ0VTU19PTkNFKHJkcC0+cWxlbikgPSAwOwogCXJkcC0+ZHludGlja3MgPSAmcGVyX2NwdShyY3VfZHludGlja3MsIGNwdSk7CiAJV0FSTl9PTl9PTkNFKHJkcC0+ZHludGlja3MtPmR5bnRpY2tzX25lc3RpbmcgIT0gRFlOVElDS19UQVNLX0VYSVRfSURMRSk7CiAJV0FSTl9PTl9PTkNFKGF0b21pY19yZWFkKCZyZHAtPmR5bnRpY2tzLT5keW50aWNrcykgIT0gMSk7CkBAIC0zNDQ0LDYgKzM1ODYsNyBAQAogCQkJcmRwLT5ncG51bSA9IHJucC0+Y29tcGxldGVkOwogCQkJcmRwLT5jb21wbGV0ZWQgPSBybnAtPmNvbXBsZXRlZDsKIAkJCXJkcC0+cGFzc2VkX3F1aWVzY2UgPSAwOworCQkJcmRwLT5yY3VfcXNfY3RyX3NuYXAgPSBfX3RoaXNfY3B1X3JlYWQocmN1X3FzX2N0cik7CiAJCQlyZHAtPnFzX3BlbmRpbmcgPSAwOwogCQkJdHJhY2VfcmN1X2dyYWNlX3BlcmlvZChyc3AtPm5hbWUsIHJkcC0+Z3BudW0sIFRQUygiY3B1b25sIikpOwogCQl9CkBAIC0zNTM1LDE3ICszNjc4LDM1IEBACiBzdGF0aWMgaW50IF9faW5pdCByY3Vfc3Bhd25fZ3Bfa3RocmVhZCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGt0aHJlYWRfcHJpb19pbiA9IGt0aHJlYWRfcHJpbzsKIAlzdHJ1Y3QgcmN1X25vZGUgKnJucDsKIAlzdHJ1Y3QgcmN1X3N0YXRlICpyc3A7CisJc3RydWN0IHNjaGVkX3BhcmFtIHNwOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAorCS8qIEZvcmNlIHByaW9yaXR5IGludG8gcmFuZ2UuICovCisJaWYgKElTX0VOQUJMRUQoQ09ORklHX1JDVV9CT09TVCkgJiYga3RocmVhZF9wcmlvIDwgMSkKKwkJa3RocmVhZF9wcmlvID0gMTsKKwllbHNlIGlmIChrdGhyZWFkX3ByaW8gPCAwKQorCQlrdGhyZWFkX3ByaW8gPSAwOworCWVsc2UgaWYgKGt0aHJlYWRfcHJpbyA+IDk5KQorCQlrdGhyZWFkX3ByaW8gPSA5OTsKKwlpZiAoa3RocmVhZF9wcmlvICE9IGt0aHJlYWRfcHJpb19pbikKKwkJcHJfYWxlcnQoInJjdV9zcGF3bl9ncF9rdGhyZWFkKCk6IExpbWl0ZWQgcHJpbyB0byAlZCBmcm9tICVkXG4iLAorCQkJIGt0aHJlYWRfcHJpbywga3RocmVhZF9wcmlvX2luKTsKKwogCXJjdV9zY2hlZHVsZXJfZnVsbHlfYWN0aXZlID0gMTsKIAlmb3JfZWFjaF9yY3VfZmxhdm9yKHJzcCkgewotCQl0ID0ga3RocmVhZF9ydW4ocmN1X2dwX2t0aHJlYWQsIHJzcCwgIiVzIiwgcnNwLT5uYW1lKTsKKwkJdCA9IGt0aHJlYWRfY3JlYXRlKHJjdV9ncF9rdGhyZWFkLCByc3AsICIlcyIsIHJzcC0+bmFtZSk7CiAJCUJVR19PTihJU19FUlIodCkpOwogCQlybnAgPSByY3VfZ2V0X3Jvb3QocnNwKTsKIAkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkJcnNwLT5ncF9rdGhyZWFkID0gdDsKKwkJaWYgKGt0aHJlYWRfcHJpbykgeworCQkJc3Auc2NoZWRfcHJpb3JpdHkgPSBrdGhyZWFkX3ByaW87CisJCQlzY2hlZF9zZXRzY2hlZHVsZXJfbm9jaGVjayh0LCBTQ0hFRF9GSUZPLCAmc3ApOworCQl9CisJCXdha2VfdXBfcHJvY2Vzcyh0KTsKIAkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOwogCX0KIAlyY3Vfc3Bhd25fbm9jYl9rdGhyZWFkcygpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdS90cmVlLmggYi9rZXJuZWwvcmN1L3RyZWUuaAppbmRleCA4ZTdiMTg0Li4xMTlkZTM5IDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1L3RyZWUuaAorKysgYi9rZXJuZWwvcmN1L3RyZWUuaApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2lycV93b3JrLmg+CiAKIC8qCiAgKiBEZWZpbmUgc2hhcGUgb2YgaGllcmFyY2h5IGJhc2VkIG9uIE5SX0NQVVMsIENPTkZJR19SQ1VfRkFOT1VULCBhbmQKQEAgLTE3MiwxMSArMTcxLDYgQEAKIAkJCQkvKiAgcXVldWVkIG9uIHRoaXMgcmN1X25vZGUgc3RydWN0dXJlIHRoYXQgKi8KIAkJCQkvKiAgYXJlIGJsb2NraW5nIHRoZSBjdXJyZW50IGdyYWNlIHBlcmlvZCwgKi8KIAkJCQkvKiAgdGhlcmUgY2FuIGJlIG5vIHN1Y2ggdGFzay4gKi8KLQlzdHJ1Y3QgY29tcGxldGlvbiBib29zdF9jb21wbGV0aW9uOwotCQkJCS8qIFVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHJ0X211dGV4IHVzZWQgKi8KLQkJCQkvKiAgdG8gY2Fycnkgb3V0IHRoZSBib29zdGluZyBpcyBmdWxseSAqLwotCQkJCS8qICByZWxlYXNlZCB3aXRoIG5vIGZ1dHVyZSBib29zdGVlIGFjY2Vzc2VzICovCi0JCQkJLyogIGJlZm9yZSB0aGF0IHJ0X211dGV4IGlzIHJlLWluaXRpYWxpemVkLiAqLwogCXN0cnVjdCBydF9tdXRleCBib29zdF9tdHg7CiAJCQkJLyogVXNlZCBvbmx5IGZvciB0aGUgcHJpb3JpdHktYm9vc3RpbmcgKi8KIAkJCQkvKiAgc2lkZSBlZmZlY3QsIG5vdCBhcyBhIGxvY2suICovCkBAIC0yNTcsOSArMjUxLDEyIEBACiAJCQkJCS8qICBpbiBvcmRlciB0byBkZXRlY3QgR1AgZW5kLiAqLwogCXVuc2lnbmVkIGxvbmcJZ3BudW07CQkvKiBIaWdoZXN0IGdwIG51bWJlciB0aGF0IHRoaXMgQ1BVICovCiAJCQkJCS8qICBpcyBhd2FyZSBvZiBoYXZpbmcgc3RhcnRlZC4gKi8KKwl1bnNpZ25lZCBsb25nCXJjdV9xc19jdHJfc25hcDsvKiBTbmFwc2hvdCBvZiByY3VfcXNfY3RyIHRvIGNoZWNrICovCisJCQkJCS8qICBmb3IgcmN1X2FsbF9xcygpIGludm9jYXRpb25zLiAqLwogCWJvb2wJCXBhc3NlZF9xdWllc2NlOwkvKiBVc2VyLW1vZGUvaWRsZSBsb29wIGV0Yy4gKi8KIAlib29sCQlxc19wZW5kaW5nOwkvKiBDb3JlIHdhaXRzIGZvciBxdWllc2Mgc3RhdGUuICovCiAJYm9vbAkJYmVlbm9ubGluZTsJLyogQ1BVIG9ubGluZSBhdCBsZWFzdCBvbmNlLiAqLworCWJvb2wJCWdwd3JhcDsJCS8qIFBvc3NpYmxlIGdwbnVtL2NvbXBsZXRlZCB3cmFwLiAqLwogCXN0cnVjdCByY3Vfbm9kZSAqbXlub2RlOwkvKiBUaGlzIENQVSdzIGxlYWYgb2YgaGllcmFyY2h5ICovCiAJdW5zaWduZWQgbG9uZyBncnBtYXNrOwkJLyogTWFzayB0byBhcHBseSB0byBsZWFmIHFzbWFzay4gKi8KICNpZmRlZiBDT05GSUdfUkNVX0NQVV9TVEFMTF9JTkZPCkBAIC0zNDAsMTQgKzMzNywxMCBAQAogI2lmZGVmIENPTkZJR19SQ1VfTk9DQl9DUFUKIAlzdHJ1Y3QgcmN1X2hlYWQgKm5vY2JfaGVhZDsJLyogQ0JzIHdhaXRpbmcgZm9yIGt0aHJlYWQuICovCiAJc3RydWN0IHJjdV9oZWFkICoqbm9jYl90YWlsOwotCWF0b21pY19sb25nX3Qgbm9jYl9xX2NvdW50OwkvKiAjIENCcyB3YWl0aW5nIGZvciBrdGhyZWFkICovCi0JYXRvbWljX2xvbmdfdCBub2NiX3FfY291bnRfbGF6eTsgLyogIChhcHByb3hpbWF0ZSkuICovCisJYXRvbWljX2xvbmdfdCBub2NiX3FfY291bnQ7CS8qICMgQ0JzIHdhaXRpbmcgZm9yIG5vY2IgKi8KKwlhdG9taWNfbG9uZ190IG5vY2JfcV9jb3VudF9sYXp5OyAvKiAgaW52b2NhdGlvbiAoYWxsIHN0YWdlcykuICovCiAJc3RydWN0IHJjdV9oZWFkICpub2NiX2ZvbGxvd2VyX2hlYWQ7IC8qIENCcyByZWFkeSB0byBpbnZva2UuICovCiAJc3RydWN0IHJjdV9oZWFkICoqbm9jYl9mb2xsb3dlcl90YWlsOwotCWF0b21pY19sb25nX3Qgbm9jYl9mb2xsb3dlcl9jb3VudDsgLyogIyBDQnMgcmVhZHkgdG8gaW52b2tlLiAqLwotCWF0b21pY19sb25nX3Qgbm9jYl9mb2xsb3dlcl9jb3VudF9sYXp5OyAvKiAgKGFwcHJveGltYXRlKS4gKi8KLQlpbnQgbm9jYl9wX2NvdW50OwkJLyogIyBDQnMgYmVpbmcgaW52b2tlZCBieSBrdGhyZWFkICovCi0JaW50IG5vY2JfcF9jb3VudF9sYXp5OwkJLyogIChhcHByb3hpbWF0ZSkuICovCiAJd2FpdF9xdWV1ZV9oZWFkX3Qgbm9jYl93cTsJLyogRm9yIG5vY2Iga3RocmVhZHMgdG8gc2xlZXAgb24uICovCiAJc3RydWN0IHRhc2tfc3RydWN0ICpub2NiX2t0aHJlYWQ7CiAJaW50IG5vY2JfZGVmZXJfd2FrZXVwOwkJLyogRGVmZXIgd2FrZXVwIG9mIG5vY2Jfa3RocmVhZC4gKi8KQEAgLTM1Niw4ICszNDksNiBAQAogCXN0cnVjdCByY3VfaGVhZCAqbm9jYl9ncF9oZWFkIF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXA7CiAJCQkJCS8qIENCcyB3YWl0aW5nIGZvciBHUC4gKi8KIAlzdHJ1Y3QgcmN1X2hlYWQgKipub2NiX2dwX3RhaWw7Ci0JbG9uZyBub2NiX2dwX2NvdW50OwotCWxvbmcgbm9jYl9ncF9jb3VudF9sYXp5OwogCWJvb2wgbm9jYl9sZWFkZXJfc2xlZXA7CQkvKiBJcyB0aGUgbm9jYiBsZWFkZXIgdGhyZWFkIGFzbGVlcD8gKi8KIAlzdHJ1Y3QgcmN1X2RhdGEgKm5vY2JfbmV4dF9mb2xsb3dlcjsKIAkJCQkJLyogTmV4dCBmb2xsb3dlciBpbiB3YWtldXAgY2hhaW4uICovCkBAIC00ODgsMTAgKzQ3OSwxNCBAQAogCQkJCQkJLyogIGR1ZSB0byBubyBHUCBhY3RpdmUuICovCiAJdW5zaWduZWQgbG9uZyBncF9zdGFydDsJCQkvKiBUaW1lIGF0IHdoaWNoIEdQIHN0YXJ0ZWQsICovCiAJCQkJCQkvKiAgYnV0IGluIGppZmZpZXMuICovCisJdW5zaWduZWQgbG9uZyBncF9hY3Rpdml0eTsJCS8qIFRpbWUgb2YgbGFzdCBHUCBrdGhyZWFkICovCisJCQkJCQkvKiAgYWN0aXZpdHkgaW4gamlmZmllcy4gKi8KIAl1bnNpZ25lZCBsb25nIGppZmZpZXNfc3RhbGw7CQkvKiBUaW1lIGF0IHdoaWNoIHRvIGNoZWNrICovCiAJCQkJCQkvKiAgZm9yIENQVSBzdGFsbHMuICovCiAJdW5zaWduZWQgbG9uZyBqaWZmaWVzX3Jlc2NoZWQ7CQkvKiBUaW1lIGF0IHdoaWNoIHRvIHJlc2NoZWQgKi8KIAkJCQkJCS8qICBhIHJlbHVjdGFudCBDUFUuICovCisJdW5zaWduZWQgbG9uZyBuX2ZvcmNlX3FzX2dwc3RhcnQ7CS8qIFNuYXBzaG90IG9mIG5fZm9yY2VfcXMgYXQgKi8KKwkJCQkJCS8qICBHUCBzdGFydC4gKi8KIAl1bnNpZ25lZCBsb25nIGdwX21heDsJCQkvKiBNYXhpbXVtIEdQIGR1cmF0aW9uIGluICovCiAJCQkJCQkvKiAgamlmZmllcy4gKi8KIAljb25zdCBjaGFyICpuYW1lOwkJCS8qIE5hbWUgb2Ygc3RydWN0dXJlLiAqLwpAQCAtNTE0LDEzICs1MDksNiBAQAogI2RlZmluZSBmb3JfZWFjaF9yY3VfZmxhdm9yKHJzcCkgXAogCWxpc3RfZm9yX2VhY2hfZW50cnkoKHJzcCksICZyY3Vfc3RydWN0X2ZsYXZvcnMsIGZsYXZvcnMpCiAKLS8qIFJldHVybiB2YWx1ZXMgZm9yIHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3MoKS4gKi8KLQotI2RlZmluZSBSQ1VfT0ZMX1RBU0tTX05PUk1fR1AJMHgxCQkvKiBUYXNrcyBibG9ja2luZyBub3JtYWwgKi8KLQkJCQkJCS8qICBHUCB3ZXJlIG1vdmVkIHRvIHJvb3QuICovCi0jZGVmaW5lIFJDVV9PRkxfVEFTS1NfRVhQX0dQCTB4MgkJLyogVGFza3MgYmxvY2tpbmcgZXhwZWRpdGVkICovCi0JCQkJCQkvKiAgR1Agd2VyZSBtb3ZlZCB0byByb290LiAqLwotCiAvKgogICogUkNVIGltcGxlbWVudGF0aW9uIGludGVybmFsIGRlY2xhcmF0aW9uczoKICAqLwpAQCAtNTQ2LDI3ICs1MzQsMTYgQEAKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIHJjdXRyZWVfcGx1Z2luLmggKi8KIHN0YXRpYyB2b2lkIHJjdV9ib290dXBfYW5ub3VuY2Uodm9pZCk7Ci1sb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKTsKIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X25vdGVfY29udGV4dF9zd2l0Y2godm9pZCk7CiBzdGF0aWMgaW50IHJjdV9wcmVlbXB0X2Jsb2NrZWRfcmVhZGVyc19jZ3Aoc3RydWN0IHJjdV9ub2RlICpybnApOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotc3RhdGljIHZvaWQgcmN1X3JlcG9ydF91bmJsb2NrX3FzX3JucChzdHJ1Y3QgcmN1X25vZGUgKnJucCwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK3N0YXRpYyBib29sIHJjdV9wcmVlbXB0X2hhc190YXNrcyhzdHJ1Y3QgcmN1X25vZGUgKnJucCk7CiAjZW5kaWYgLyogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVSAqLwogc3RhdGljIHZvaWQgcmN1X3ByaW50X2RldGFpbF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCk7CiBzdGF0aWMgaW50IHJjdV9wcmludF90YXNrX3N0YWxsKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2Jsb2NrZWRfdGFza3Moc3RydWN0IHJjdV9ub2RlICpybnApOwotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQotc3RhdGljIGludCByY3VfcHJlZW1wdF9vZmZsaW5lX3Rhc2tzKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwKLQkJCQkgICAgIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAotCQkJCSAgICAgc3RydWN0IHJjdV9kYXRhICpyZHApOwotI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2NoZWNrX2NhbGxiYWNrcyh2b2lkKTsKIHZvaWQgY2FsbF9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkLCB2b2lkICgqZnVuYykoc3RydWN0IHJjdV9oZWFkICpyY3UpKTsKLSNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVF9SQ1UpCi1zdGF0aWMgdm9pZCByY3VfcmVwb3J0X2V4cF9ybnAoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKLQkJCSAgICAgICBib29sIHdha2UpOwotI2VuZGlmIC8qICNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX0NQVSkgfHwgZGVmaW5lZChDT05GSUdfUFJFRU1QVF9SQ1UpICovCiBzdGF0aWMgdm9pZCBfX2luaXQgX19yY3VfaW5pdF9wcmVlbXB0KHZvaWQpOwogc3RhdGljIHZvaWQgcmN1X2luaXRpYXRlX2Jvb3N0KHN0cnVjdCByY3Vfbm9kZSAqcm5wLCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIHN0YXRpYyB2b2lkIHJjdV9wcmVlbXB0X2Jvb3N0X3N0YXJ0X2dwKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKQEAgLTYyMiwyNCArNTk5LDE1IEBACiAjZW5kaWYgLyogI2lmbmRlZiBSQ1VfVFJFRV9OT05DT1JFICovCiAKICNpZmRlZiBDT05GSUdfUkNVX1RSQUNFCisvKiBSZWFkIG91dCBxdWV1ZSBsZW5ndGhzIGZvciB0cmFjaW5nLiAqLworc3RhdGljIGlubGluZSB2b2lkIHJjdV9ub2NiX3FfbGVuZ3RocyhzdHJ1Y3QgcmN1X2RhdGEgKnJkcCwgbG9uZyAqcWwsIGxvbmcgKnFsbCkKK3sKICNpZmRlZiBDT05GSUdfUkNVX05PQ0JfQ1BVCi0vKiBTdW0gdXAgcXVldWUgbGVuZ3RocyBmb3IgdHJhY2luZy4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByY3Vfbm9jYl9xX2xlbmd0aHMoc3RydWN0IHJjdV9kYXRhICpyZHAsIGxvbmcgKnFsLCBsb25nICpxbGwpCi17Ci0JKnFsID0gYXRvbWljX2xvbmdfcmVhZCgmcmRwLT5ub2NiX3FfY291bnQpICsKLQkgICAgICByZHAtPm5vY2JfcF9jb3VudCArCi0JICAgICAgYXRvbWljX2xvbmdfcmVhZCgmcmRwLT5ub2NiX2ZvbGxvd2VyX2NvdW50KSArCi0JICAgICAgcmRwLT5ub2NiX3BfY291bnQgKyByZHAtPm5vY2JfZ3BfY291bnQ7Ci0JKnFsbCA9IGF0b21pY19sb25nX3JlYWQoJnJkcC0+bm9jYl9xX2NvdW50X2xhenkpICsKLQkgICAgICAgcmRwLT5ub2NiX3BfY291bnRfbGF6eSArCi0JICAgICAgIGF0b21pY19sb25nX3JlYWQoJnJkcC0+bm9jYl9mb2xsb3dlcl9jb3VudF9sYXp5KSArCi0JICAgICAgIHJkcC0+bm9jYl9wX2NvdW50X2xhenkgKyByZHAtPm5vY2JfZ3BfY291bnRfbGF6eTsKLX0KKwkqcWwgPSBhdG9taWNfbG9uZ19yZWFkKCZyZHAtPm5vY2JfcV9jb3VudCk7CisJKnFsbCA9IGF0b21pY19sb25nX3JlYWQoJnJkcC0+bm9jYl9xX2NvdW50X2xhenkpOwogI2Vsc2UgLyogI2lmZGVmIENPTkZJR19SQ1VfTk9DQl9DUFUgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCByY3Vfbm9jYl9xX2xlbmd0aHMoc3RydWN0IHJjdV9kYXRhICpyZHAsIGxvbmcgKnFsLCBsb25nICpxbGwpCi17CiAJKnFsID0gMDsKIAkqcWxsID0gMDsKLX0KICNlbmRpZiAvKiAjZWxzZSAjaWZkZWYgQ09ORklHX1JDVV9OT0NCX0NQVSAqLworfQogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX1RSQUNFICovCmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWVfcGx1Z2luLmggYi9rZXJuZWwvcmN1L3RyZWVfcGx1Z2luLmgKaW5kZXggM2VjODVjYi4uMmU4NTBhNSAxMDA2NDQKLS0tIGEva2VybmVsL3JjdS90cmVlX3BsdWdpbi5oCisrKyBiL2tlcm5lbC9yY3UvdHJlZV9wbHVnaW4uaApAQCAtMzQsMTAgKzM0LDYgQEAKIAogI2luY2x1ZGUgIi4uL2xvY2tpbmcvcnRtdXRleF9jb21tb24uaCIKIAotLyogcmN1Yy9yY3ViIGt0aHJlYWQgcmVhbHRpbWUgcHJpb3JpdHkgKi8KLXN0YXRpYyBpbnQga3RocmVhZF9wcmlvID0gQ09ORklHX1JDVV9LVEhSRUFEX1BSSU87Ci1tb2R1bGVfcGFyYW0oa3RocmVhZF9wcmlvLCBpbnQsIDA2NDQpOwotCiAvKgogICogQ29udHJvbCB2YXJpYWJsZXMgZm9yIHBlci1DUFUgYW5kIHBlci1yY3Vfbm9kZSBrdGhyZWFkcy4gIFRoZXNlCiAgKiBoYW5kbGUgYWxsIGZsYXZvcnMgb2YgUkNVLgpAQCAtMTAzLDYgKzk5LDggQEAKIHN0YXRpYyBzdHJ1Y3QgcmN1X3N0YXRlICpyY3Vfc3RhdGVfcCA9ICZyY3VfcHJlZW1wdF9zdGF0ZTsKIAogc3RhdGljIGludCByY3VfcHJlZW1wdGVkX3JlYWRlcnNfZXhwKHN0cnVjdCByY3Vfbm9kZSAqcm5wKTsKK3N0YXRpYyB2b2lkIHJjdV9yZXBvcnRfZXhwX3JucChzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsIHN0cnVjdCByY3Vfbm9kZSAqcm5wLAorCQkJICAgICAgIGJvb2wgd2FrZSk7CiAKIC8qCiAgKiBUZWxsIHRoZW0gd2hhdCBSQ1UgdGhleSBhcmUgcnVubmluZy4KQEAgLTExNCwyNSArMTEyLDYgQEAKIH0KIAogLyoKLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIFJDVS1wcmVlbXB0IGJhdGNoZXMgcHJvY2Vzc2VkIHRodXMgZmFyCi0gKiBmb3IgZGVidWcgYW5kIHN0YXRpc3RpY3MuCi0gKi8KLXN0YXRpYyBsb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9wcmVlbXB0KHZvaWQpCi17Ci0JcmV0dXJuIHJjdV9wcmVlbXB0X3N0YXRlLmNvbXBsZXRlZDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX2NvbXBsZXRlZF9wcmVlbXB0KTsKLQotLyoKLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIFJDVSBiYXRjaGVzIHByb2Nlc3NlZCB0aHVzIGZhciBmb3IgZGVidWcgJiBzdGF0cy4KLSAqLwotbG9uZyByY3VfYmF0Y2hlc19jb21wbGV0ZWQodm9pZCkKLXsKLQlyZXR1cm4gcmN1X2JhdGNoZXNfY29tcGxldGVkX3ByZWVtcHQoKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX2NvbXBsZXRlZCk7Ci0KLS8qCiAgKiBSZWNvcmQgYSBwcmVlbXB0aWJsZS1SQ1UgcXVpZXNjZW50IHN0YXRlIGZvciB0aGUgc3BlY2lmaWVkIENQVS4gIE5vdGUKICAqIHRoYXQgdGhpcyBqdXN0IG1lYW5zIHRoYXQgdGhlIHRhc2sgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhlIENQVSBpcwogICogbm90IGluIGEgcXVpZXNjZW50IHN0YXRlLiAgVGhlcmUgbWlnaHQgYmUgYW55IG51bWJlciBvZiB0YXNrcyBibG9ja2VkCkBAIC0zMDcsMTUgKzI4NiwyNSBAQAogfQogCiAvKgorICogUmV0dXJuIHRydWUgaWYgdGhlIHNwZWNpZmllZCByY3Vfbm9kZSBzdHJ1Y3R1cmUgaGFzIHRhc2tzIHRoYXQgd2VyZQorICogcHJlZW1wdGVkIHdpdGhpbiBhbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCisgKi8KK3N0YXRpYyBib29sIHJjdV9wcmVlbXB0X2hhc190YXNrcyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKK3sKKwlyZXR1cm4gIWxpc3RfZW1wdHkoJnJucC0+YmxrZF90YXNrcyk7Cit9CisKKy8qCiAgKiBIYW5kbGUgc3BlY2lhbCBjYXNlcyBkdXJpbmcgcmN1X3JlYWRfdW5sb2NrKCksIHN1Y2ggYXMgbmVlZGluZyB0bwogICogbm90aWZ5IFJDVSBjb3JlIHByb2Nlc3Npbmcgb3IgdGFzayBoYXZpbmcgYmxvY2tlZCBkdXJpbmcgdGhlIFJDVQogICogcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb24uCiAgKi8KIHZvaWQgcmN1X3JlYWRfdW5sb2NrX3NwZWNpYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0KQogewotCWludCBlbXB0eTsKLQlpbnQgZW1wdHlfZXhwOwotCWludCBlbXB0eV9leHBfbm93OworCWJvb2wgZW1wdHk7CisJYm9vbCBlbXB0eV9leHA7CisJYm9vbCBlbXB0eV9ub3JtOworCWJvb2wgZW1wdHlfZXhwX25vdzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBsaXN0X2hlYWQgKm5wOwogI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKQEAgLTM2Nyw3ICszNTYsOCBAQAogCQkJCWJyZWFrOwogCQkJcmF3X3NwaW5fdW5sb2NrKCZybnAtPmxvY2spOyAvKiBpcnFzIHJlbWFpbiBkaXNhYmxlZC4gKi8KIAkJfQotCQllbXB0eSA9ICFyY3VfcHJlZW1wdF9ibG9ja2VkX3JlYWRlcnNfY2dwKHJucCk7CisJCWVtcHR5ID0gIXJjdV9wcmVlbXB0X2hhc190YXNrcyhybnApOworCQllbXB0eV9ub3JtID0gIXJjdV9wcmVlbXB0X2Jsb2NrZWRfcmVhZGVyc19jZ3Aocm5wKTsKIAkJZW1wdHlfZXhwID0gIXJjdV9wcmVlbXB0ZWRfcmVhZGVyc19leHAocm5wKTsKIAkJc21wX21iKCk7IC8qIGVuc3VyZSBleHBlZGl0ZWQgZmFzdHBhdGggc2VlcyBlbmQgb2YgUkNVIGMtcy4gKi8KIAkJbnAgPSByY3VfbmV4dF9ub2RlX2VudHJ5KHQsIHJucCk7CkBAIC0zODcsMTMgKzM3NywyMSBAQAogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUICovCiAKIAkJLyoKKwkJICogSWYgdGhpcyB3YXMgdGhlIGxhc3QgdGFzayBvbiB0aGUgbGlzdCwgZ28gc2VlIGlmIHdlCisJCSAqIG5lZWQgdG8gcHJvcGFnYXRlIC0+cXNtYXNraW5pdCBiaXQgY2xlYXJpbmcgdXAgdGhlCisJCSAqIHJjdV9ub2RlIHRyZWUuCisJCSAqLworCQlpZiAoIWVtcHR5ICYmICFyY3VfcHJlZW1wdF9oYXNfdGFza3Mocm5wKSkKKwkJCXJjdV9jbGVhbnVwX2RlYWRfcm5wKHJucCk7CisKKwkJLyoKIAkJICogSWYgdGhpcyB3YXMgdGhlIGxhc3QgdGFzayBvbiB0aGUgY3VycmVudCBsaXN0LCBhbmQgaWYKIAkJICogd2UgYXJlbid0IHdhaXRpbmcgb24gYW55IENQVXMsIHJlcG9ydCB0aGUgcXVpZXNjZW50IHN0YXRlLgogCQkgKiBOb3RlIHRoYXQgcmN1X3JlcG9ydF91bmJsb2NrX3FzX3JucCgpIHJlbGVhc2VzIHJucC0+bG9jaywKIAkJICogc28gd2UgbXVzdCB0YWtlIGEgc25hcHNob3Qgb2YgdGhlIGV4cGVkaXRlZCBzdGF0ZS4KIAkJICovCiAJCWVtcHR5X2V4cF9ub3cgPSAhcmN1X3ByZWVtcHRlZF9yZWFkZXJzX2V4cChybnApOwotCQlpZiAoIWVtcHR5ICYmICFyY3VfcHJlZW1wdF9ibG9ja2VkX3JlYWRlcnNfY2dwKHJucCkpIHsKKwkJaWYgKCFlbXB0eV9ub3JtICYmICFyY3VfcHJlZW1wdF9ibG9ja2VkX3JlYWRlcnNfY2dwKHJucCkpIHsKIAkJCXRyYWNlX3JjdV9xdWllc2NlbnRfc3RhdGVfcmVwb3J0KFRQUygicHJlZW1wdF9yY3UiKSwKIAkJCQkJCQkgcm5wLT5ncG51bSwKIAkJCQkJCQkgMCwgcm5wLT5xc21hc2ssCkBAIC00MDgsMTAgKzQwNiw4IEBACiAKICNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCiAJCS8qIFVuYm9vc3QgaWYgd2Ugd2VyZSBib29zdGVkLiAqLwotCQlpZiAoZHJvcF9ib29zdF9tdXRleCkgeworCQlpZiAoZHJvcF9ib29zdF9tdXRleCkKIAkJCXJ0X211dGV4X3VubG9jaygmcm5wLT5ib29zdF9tdHgpOwotCQkJY29tcGxldGUoJnJucC0+Ym9vc3RfY29tcGxldGlvbik7Ci0JCX0KICNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLwogCiAJCS8qCkBAIC01MTksOTkgKzUxNSwxMyBAQAogc3RhdGljIHZvaWQgcmN1X3ByZWVtcHRfY2hlY2tfYmxvY2tlZF90YXNrcyhzdHJ1Y3QgcmN1X25vZGUgKnJucCkKIHsKIAlXQVJOX09OX09OQ0UocmN1X3ByZWVtcHRfYmxvY2tlZF9yZWFkZXJzX2NncChybnApKTsKLQlpZiAoIWxpc3RfZW1wdHkoJnJucC0+YmxrZF90YXNrcykpCisJaWYgKHJjdV9wcmVlbXB0X2hhc190YXNrcyhybnApKQogCQlybnAtPmdwX3Rhc2tzID0gcm5wLT5ibGtkX3Rhc2tzLm5leHQ7CiAJV0FSTl9PTl9PTkNFKHJucC0+cXNtYXNrKTsKIH0KIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCi0vKgotICogSGFuZGxlIHRhc2tsaXN0IG1pZ3JhdGlvbiBmb3IgY2FzZSBpbiB3aGljaCBhbGwgQ1BVcyBjb3ZlcmVkIGJ5IHRoZQotICogc3BlY2lmaWVkIHJjdV9ub2RlIGhhdmUgZ29uZSBvZmZsaW5lLiAgTW92ZSB0aGVtIHVwIHRvIHRoZSByb290Ci0gKiByY3Vfbm9kZS4gIFRoZSByZWFzb24gZm9yIG5vdCBqdXN0IG1vdmluZyB0aGVtIHRvIHRoZSBpbW1lZGlhdGUKLSAqIHBhcmVudCBpcyB0byByZW1vdmUgdGhlIG5lZWQgZm9yIHJjdV9yZWFkX3VubG9ja19zcGVjaWFsKCkgdG8KLSAqIG1ha2UgbW9yZSB0aGFuIHR3byBhdHRlbXB0cyB0byBhY3F1aXJlIHRoZSB0YXJnZXQgcmN1X25vZGUncyBsb2NrLgotICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIHdlcmUgdGFza3MgYmxvY2tpbmcgdGhlIGN1cnJlbnQgUkNVIGdyYWNlCi0gKiBwZXJpb2QuCi0gKgotICogUmV0dXJucyAxIGlmIHRoZXJlIHdhcyBwcmV2aW91c2x5IGEgdGFzayBibG9ja2luZyB0aGUgY3VycmVudCBncmFjZQotICogcGVyaW9kIG9uIHRoZSBzcGVjaWZpZWQgcmN1X25vZGUgc3RydWN0dXJlLgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHJucC0+bG9jayB3aXRoIGlycXMgZGlzYWJsZWQuCi0gKi8KLXN0YXRpYyBpbnQgcmN1X3ByZWVtcHRfb2ZmbGluZV90YXNrcyhzdHJ1Y3QgcmN1X3N0YXRlICpyc3AsCi0JCQkJICAgICBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKLQkJCQkgICAgIHN0cnVjdCByY3VfZGF0YSAqcmRwKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmxwOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxwX3Jvb3Q7Ci0JaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IHJjdV9ub2RlICpybnBfcm9vdCA9IHJjdV9nZXRfcm9vdChyc3ApOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKLQotCWlmIChybnAgPT0gcm5wX3Jvb3QpIHsKLQkJV0FSTl9PTkNFKDEsICJMYXN0IENQVSB0aG91Z2h0IHRvIGJlIG9mZmxpbmVkPyIpOwotCQlyZXR1cm4gMDsgIC8qIFNob3VsZG4ndCBoYXBwZW46IGF0IGxlYXN0IG9uZSBDUFUgb25saW5lLiAqLwotCX0KLQotCS8qIElmIHdlIGFyZSBvbiBhbiBpbnRlcm5hbCBub2RlLCBjb21wbGFpbiBiaXR0ZXJseS4gKi8KLQlXQVJOX09OX09OQ0Uocm5wICE9IHJkcC0+bXlub2RlKTsKLQotCS8qCi0JICogTW92ZSB0YXNrcyB1cCB0byByb290IHJjdV9ub2RlLiAgRG9uJ3QgdHJ5IHRvIGdldCBmYW5jeSBmb3IKLQkgKiB0aGlzIGNvcm5lci1jYXNlIG9wZXJhdGlvbiAtLSBqdXN0IHB1dCB0aGlzIG5vZGUncyB0YXNrcwotCSAqIGF0IHRoZSBoZWFkIG9mIHRoZSByb290IG5vZGUncyBsaXN0LCBhbmQgdXBkYXRlIHRoZSByb290IG5vZGUncwotCSAqIC0+Z3BfdGFza3MgYW5kIC0+ZXhwX3Rhc2tzIHBvaW50ZXJzIHRvIHRob3NlIG9mIHRoaXMgbm9kZSdzLAotCSAqIGlmIG5vbi1OVUxMLiAgVGhpcyBtaWdodCByZXN1bHQgaW4gd2FpdGluZyBmb3IgbW9yZSB0YXNrcyB0aGFuCi0JICogYWJzb2x1dGVseSBuZWNlc3NhcnksIGJ1dCB0aGlzIGlzIGEgZ29vZCBwZXJmb3JtYW5jZS9jb21wbGV4aXR5Ci0JICogdHJhZGVvZmYuCi0JICovCi0JaWYgKHJjdV9wcmVlbXB0X2Jsb2NrZWRfcmVhZGVyc19jZ3Aocm5wKSAmJiBybnAtPnFzbWFzayA9PSAwKQotCQlyZXR2YWwgfD0gUkNVX09GTF9UQVNLU19OT1JNX0dQOwotCWlmIChyY3VfcHJlZW1wdGVkX3JlYWRlcnNfZXhwKHJucCkpCi0JCXJldHZhbCB8PSBSQ1VfT0ZMX1RBU0tTX0VYUF9HUDsKLQlscCA9ICZybnAtPmJsa2RfdGFza3M7Ci0JbHBfcm9vdCA9ICZybnBfcm9vdC0+YmxrZF90YXNrczsKLQl3aGlsZSAoIWxpc3RfZW1wdHkobHApKSB7Ci0JCXQgPSBsaXN0X2VudHJ5KGxwLT5uZXh0LCB0eXBlb2YoKnQpLCByY3Vfbm9kZV9lbnRyeSk7Ci0JCXJhd19zcGluX2xvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCi0JCXNtcF9tYl9fYWZ0ZXJfdW5sb2NrX2xvY2soKTsKLQkJbGlzdF9kZWwoJnQtPnJjdV9ub2RlX2VudHJ5KTsKLQkJdC0+cmN1X2Jsb2NrZWRfbm9kZSA9IHJucF9yb290OwotCQlsaXN0X2FkZCgmdC0+cmN1X25vZGVfZW50cnksIGxwX3Jvb3QpOwotCQlpZiAoJnQtPnJjdV9ub2RlX2VudHJ5ID09IHJucC0+Z3BfdGFza3MpCi0JCQlybnBfcm9vdC0+Z3BfdGFza3MgPSBybnAtPmdwX3Rhc2tzOwotCQlpZiAoJnQtPnJjdV9ub2RlX2VudHJ5ID09IHJucC0+ZXhwX3Rhc2tzKQotCQkJcm5wX3Jvb3QtPmV4cF90YXNrcyA9IHJucC0+ZXhwX3Rhc2tzOwotI2lmZGVmIENPTkZJR19SQ1VfQk9PU1QKLQkJaWYgKCZ0LT5yY3Vfbm9kZV9lbnRyeSA9PSBybnAtPmJvb3N0X3Rhc2tzKQotCQkJcm5wX3Jvb3QtPmJvb3N0X3Rhc2tzID0gcm5wLT5ib29zdF90YXNrczsKLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLwotCQlyYXdfc3Bpbl91bmxvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyBzdGlsbCBkaXNhYmxlZCAqLwotCX0KLQotCXJucC0+Z3BfdGFza3MgPSBOVUxMOwotCXJucC0+ZXhwX3Rhc2tzID0gTlVMTDsKLSNpZmRlZiBDT05GSUdfUkNVX0JPT1NUCi0Jcm5wLT5ib29zdF90YXNrcyA9IE5VTEw7Ci0JLyoKLQkgKiBJbiBjYXNlIHJvb3QgaXMgYmVpbmcgYm9vc3RlZCBhbmQgbGVhZiB3YXMgbm90LiAgTWFrZSBzdXJlCi0JICogdGhhdCB3ZSBib29zdCB0aGUgdGFza3MgYmxvY2tpbmcgdGhlIGN1cnJlbnQgZ3JhY2UgcGVyaW9kCi0JICogaW4gdGhpcyBjYXNlLgotCSAqLwotCXJhd19zcGluX2xvY2soJnJucF9yb290LT5sb2NrKTsgLyogaXJxcyBhbHJlYWR5IGRpc2FibGVkICovCi0Jc21wX21iX19hZnRlcl91bmxvY2tfbG9jaygpOwotCWlmIChybnBfcm9vdC0+Ym9vc3RfdGFza3MgIT0gTlVMTCAmJgotCSAgICBybnBfcm9vdC0+Ym9vc3RfdGFza3MgIT0gcm5wX3Jvb3QtPmdwX3Rhc2tzICYmCi0JICAgIHJucF9yb290LT5ib29zdF90YXNrcyAhPSBybnBfcm9vdC0+ZXhwX3Rhc2tzKQotCQlybnBfcm9vdC0+Ym9vc3RfdGFza3MgPSBybnBfcm9vdC0+Z3BfdGFza3M7Ci0JcmF3X3NwaW5fdW5sb2NrKCZybnBfcm9vdC0+bG9jayk7IC8qIGlycXMgc3RpbGwgZGlzYWJsZWQgKi8KLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9CT09TVCAqLwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogLyoKQEAgLTc3MSw3ICs2ODEsNyBAQAogCiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAlzbXBfbWJfX2FmdGVyX3VubG9ja19sb2NrKCk7Ci0JaWYgKGxpc3RfZW1wdHkoJnJucC0+YmxrZF90YXNrcykpIHsKKwlpZiAoIXJjdV9wcmVlbXB0X2hhc190YXNrcyhybnApKSB7CiAJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAl9IGVsc2UgewogCQlybnAtPmV4cF90YXNrcyA9IHJucC0+YmxrZF90YXNrcy5uZXh0OwpAQCAtOTMzLDE1ICs4NDMsNiBAQAogfQogCiAvKgotICogUmV0dXJuIHRoZSBudW1iZXIgb2YgUkNVIGJhdGNoZXMgcHJvY2Vzc2VkIHRodXMgZmFyIGZvciBkZWJ1ZyAmIHN0YXRzLgotICovCi1sb25nIHJjdV9iYXRjaGVzX2NvbXBsZXRlZCh2b2lkKQotewotCXJldHVybiByY3VfYmF0Y2hlc19jb21wbGV0ZWRfc2NoZWQoKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHJjdV9iYXRjaGVzX2NvbXBsZXRlZCk7Ci0KLS8qCiAgKiBCZWNhdXNlIHByZWVtcHRpYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgd2UgbmV2ZXIgaGF2ZSB0byBjaGVjayBmb3IKICAqIENQVXMgYmVpbmcgaW4gcXVpZXNjZW50IHN0YXRlcy4KICAqLwpAQCAtOTYwLDExICs4NjEsMTIgQEAKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCi0vKiBCZWNhdXNlIHByZWVtcHRpYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgbm8gcXVpZXRpbmcgb2YgdGFza3MuICovCi1zdGF0aWMgdm9pZCByY3VfcmVwb3J0X3VuYmxvY2tfcXNfcm5wKHN0cnVjdCByY3Vfbm9kZSAqcm5wLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotCV9fcmVsZWFzZXMocm5wLT5sb2NrKQorLyoKKyAqIEJlY2F1c2UgdGhlcmUgaXMgbm8gcHJlZW1wdGlibGUgUkNVLCB0aGVyZSBjYW4gYmUgbm8gcmVhZGVycyBibG9ja2VkLgorICovCitzdGF0aWMgYm9vbCByY3VfcHJlZW1wdF9oYXNfdGFza3Moc3RydWN0IHJjdV9ub2RlICpybnApCiB7Ci0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJucC0+bG9jaywgZmxhZ3MpOworCXJldHVybiBmYWxzZTsKIH0KIAogI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KQEAgLTk5NiwyMyArODk4LDYgQEAKIAlXQVJOX09OX09OQ0Uocm5wLT5xc21hc2spOwogfQogCi0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCi0KLS8qCi0gKiBCZWNhdXNlIHByZWVtcHRpYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgaXQgbmV2ZXIgbmVlZHMgdG8gbWlncmF0ZQotICogdGFza3MgdGhhdCB3ZXJlIGJsb2NrZWQgd2l0aGluIFJDVSByZWFkLXNpZGUgY3JpdGljYWwgc2VjdGlvbnMsIGFuZAotICogc3VjaCBub24tZXhpc3RlbnQgdGFza3MgY2Fubm90IHBvc3NpYmx5IGhhdmUgYmVlbiBibG9ja2luZyB0aGUgY3VycmVudAotICogZ3JhY2UgcGVyaW9kLgotICovCi1zdGF0aWMgaW50IHJjdV9wcmVlbXB0X29mZmxpbmVfdGFza3Moc3RydWN0IHJjdV9zdGF0ZSAqcnNwLAotCQkJCSAgICAgc3RydWN0IHJjdV9ub2RlICpybnAsCi0JCQkJICAgICBzdHJ1Y3QgcmN1X2RhdGEgKnJkcCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUgKi8KLQogLyoKICAqIEJlY2F1c2UgcHJlZW1wdGlibGUgUkNVIGRvZXMgbm90IGV4aXN0LCBpdCBuZXZlciBoYXMgYW55IGNhbGxiYWNrcwogICogdG8gY2hlY2suCkBAIC0xMDMxLDIwICs5MTYsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3luY2hyb25pemVfcmN1X2V4cGVkaXRlZCk7CiAKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLQotLyoKLSAqIEJlY2F1c2UgcHJlZW1wdGlibGUgUkNVIGRvZXMgbm90IGV4aXN0LCB0aGVyZSBpcyBuZXZlciBhbnkgbmVlZCB0bwotICogcmVwb3J0IG9uIHRhc2tzIHByZWVtcHRlZCBpbiBSQ1UgcmVhZC1zaWRlIGNyaXRpY2FsIHNlY3Rpb25zIGR1cmluZwotICogZXhwZWRpdGVkIFJDVSBncmFjZSBwZXJpb2RzLgotICovCi1zdGF0aWMgdm9pZCByY3VfcmVwb3J0X2V4cF9ybnAoc3RydWN0IHJjdV9zdGF0ZSAqcnNwLCBzdHJ1Y3QgcmN1X25vZGUgKnJucCwKLQkJCSAgICAgICBib29sIHdha2UpCi17Ci19Ci0KLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVICovCi0KIC8qCiAgKiBCZWNhdXNlIHByZWVtcHRpYmxlIFJDVSBkb2VzIG5vdCBleGlzdCwgcmN1X2JhcnJpZXIoKSBpcyBqdXN0CiAgKiBhbm90aGVyIG5hbWUgZm9yIHJjdV9iYXJyaWVyX3NjaGVkKCkuCkBAIC0xMDgwLDcgKzk1MSw3IEBACiAKIHN0YXRpYyB2b2lkIHJjdV9pbml0aWF0ZV9ib29zdF90cmFjZShzdHJ1Y3QgcmN1X25vZGUgKnJucCkKIHsKLQlpZiAobGlzdF9lbXB0eSgmcm5wLT5ibGtkX3Rhc2tzKSkKKwlpZiAoIXJjdV9wcmVlbXB0X2hhc190YXNrcyhybnApKQogCQlybnAtPm5fYmFsa19ibGtkX3Rhc2tzKys7CiAJZWxzZSBpZiAocm5wLT5leHBfdGFza3MgPT0gTlVMTCAmJiBybnAtPmdwX3Rhc2tzID09IE5VTEwpCiAJCXJucC0+bl9iYWxrX2V4cF9ncF90YXNrcysrOwpAQCAtMTEyNyw3ICs5OTgsOCBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICp0YjsKIAotCWlmIChybnAtPmV4cF90YXNrcyA9PSBOVUxMICYmIHJucC0+Ym9vc3RfdGFza3MgPT0gTlVMTCkKKwlpZiAoQUNDRVNTX09OQ0Uocm5wLT5leHBfdGFza3MpID09IE5VTEwgJiYKKwkgICAgQUNDRVNTX09OQ0Uocm5wLT5ib29zdF90YXNrcykgPT0gTlVMTCkKIAkJcmV0dXJuIDA7ICAvKiBOb3RoaW5nIGxlZnQgdG8gYm9vc3QuICovCiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnJucC0+bG9jaywgZmxhZ3MpOwpAQCAtMTE3NSwxNSArMTA0NywxMSBAQAogCSAqLwogCXQgPSBjb250YWluZXJfb2YodGIsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcmN1X25vZGVfZW50cnkpOwogCXJ0X211dGV4X2luaXRfcHJveHlfbG9ja2VkKCZybnAtPmJvb3N0X210eCwgdCk7Ci0JaW5pdF9jb21wbGV0aW9uKCZybnAtPmJvb3N0X2NvbXBsZXRpb24pOwogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZybnAtPmxvY2ssIGZsYWdzKTsKIAkvKiBMb2NrIG9ubHkgZm9yIHNpZGUgZWZmZWN0OiBib29zdHMgdGFzayB0J3MgcHJpb3JpdHkuICovCiAJcnRfbXV0ZXhfbG9jaygmcm5wLT5ib29zdF9tdHgpOwogCXJ0X211dGV4X3VubG9jaygmcm5wLT5ib29zdF9tdHgpOyAgLyogVGhlbiBrZWVwIGxvY2tkZXAgaGFwcHkuICovCiAKLQkvKiBXYWl0IGZvciBib29zdGVlIHRvIGJlIGRvbmUgdy9ib29zdF9tdHggYmVmb3JlIHJlaW5pdGlhbGl6aW5nLiAqLwotCXdhaXRfZm9yX2NvbXBsZXRpb24oJnJucC0+Ym9vc3RfY29tcGxldGlvbik7Ci0KIAlyZXR1cm4gQUNDRVNTX09OQ0Uocm5wLT5leHBfdGFza3MpICE9IE5VTEwgfHwKIAkgICAgICAgQUNDRVNTX09OQ0Uocm5wLT5ib29zdF90YXNrcykgIT0gTlVMTDsKIH0KQEAgLTE0MTYsMTIgKzEyODQsOCBAQAogCWZvciAoY3B1ID0gcm5wLT5ncnBsbzsgY3B1IDw9IHJucC0+Z3JwaGk7IGNwdSsrLCBtYXNrID4+PSAxKQogCQlpZiAoKG1hc2sgJiAweDEpICYmIGNwdSAhPSBvdXRnb2luZ2NwdSkKIAkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIGNtKTsKLQlpZiAoY3B1bWFza193ZWlnaHQoY20pID09IDApIHsKKwlpZiAoY3B1bWFza193ZWlnaHQoY20pID09IDApCiAJCWNwdW1hc2tfc2V0YWxsKGNtKTsKLQkJZm9yIChjcHUgPSBybnAtPmdycGxvOyBjcHUgPD0gcm5wLT5ncnBoaTsgY3B1KyspCi0JCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIGNtKTsKLQkJV0FSTl9PTl9PTkNFKGNwdW1hc2tfd2VpZ2h0KGNtKSA9PSAwKTsKLQl9CiAJc2V0X2NwdXNfYWxsb3dlZF9wdHIodCwgY20pOwogCWZyZWVfY3B1bWFza192YXIoY20pOwogfQpAQCAtMTQ0NiwxMiArMTMxMCw4IEBACiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJcGVyX2NwdShyY3VfY3B1X2hhc193b3JrLCBjcHUpID0gMDsKIAlCVUdfT04oc21wYm9vdF9yZWdpc3Rlcl9wZXJjcHVfdGhyZWFkKCZyY3VfY3B1X3RocmVhZF9zcGVjKSk7Ci0Jcm5wID0gcmN1X2dldF9yb290KHJjdV9zdGF0ZV9wKTsKLQkodm9pZClyY3Vfc3Bhd25fb25lX2Jvb3N0X2t0aHJlYWQocmN1X3N0YXRlX3AsIHJucCk7Ci0JaWYgKE5VTV9SQ1VfTk9ERVMgPiAxKSB7Ci0JCXJjdV9mb3JfZWFjaF9sZWFmX25vZGUocmN1X3N0YXRlX3AsIHJucCkKLQkJCSh2b2lkKXJjdV9zcGF3bl9vbmVfYm9vc3Rfa3RocmVhZChyY3Vfc3RhdGVfcCwgcm5wKTsKLQl9CisJcmN1X2Zvcl9lYWNoX2xlYWZfbm9kZShyY3Vfc3RhdGVfcCwgcm5wKQorCQkodm9pZClyY3Vfc3Bhd25fb25lX2Jvb3N0X2t0aHJlYWQocmN1X3N0YXRlX3AsIHJucCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJjdV9wcmVwYXJlX2t0aHJlYWRzKGludCBjcHUpCkBAIC0xNjA1LDcgKzE0NjUsOCBAQAogCQkgKiBjb21wbGV0ZWQgc2luY2Ugd2UgbGFzdCBjaGVja2VkIGFuZCB0aGVyZSBhcmUKIAkJICogY2FsbGJhY2tzIG5vdCB5ZXQgcmVhZHkgdG8gaW52b2tlLgogCQkgKi8KLQkJaWYgKHJkcC0+Y29tcGxldGVkICE9IHJucC0+Y29tcGxldGVkICYmCisJCWlmICgocmRwLT5jb21wbGV0ZWQgIT0gcm5wLT5jb21wbGV0ZWQgfHwKKwkJICAgICB1bmxpa2VseShBQ0NFU1NfT05DRShyZHAtPmdwd3JhcCkpKSAmJgogCQkgICAgcmRwLT5ueHR0YWlsW1JDVV9ET05FX1RBSUxdICE9IHJkcC0+bnh0dGFpbFtSQ1VfTkVYVF9UQUlMXSkKIAkJCW5vdGVfZ3BfY2hhbmdlcyhyc3AsIHJkcCk7CiAKQEAgLTE4OTgsMTEgKzE3NTksMTIgQEAKIAkJdGlja3NfdmFsdWUgPSByc3AtPmdwbnVtIC0gcmRwLT5ncG51bTsKIAl9CiAJcHJpbnRfY3B1X3N0YWxsX2Zhc3Rfbm9faHooZmFzdF9ub19oeiwgY3B1KTsKLQlwcl9lcnIoIlx0JWQ6ICglbHUgJXMpIGlkbGU9JTAzeC8lbGx4LyVkIHNvZnRpcnE9JXUvJXUgJXNcbiIsCisJcHJfZXJyKCJcdCVkOiAoJWx1ICVzKSBpZGxlPSUwM3gvJWxseC8lZCBzb2Z0aXJxPSV1LyV1IGZxcz0lbGQgJXNcbiIsCiAJICAgICAgIGNwdSwgdGlja3NfdmFsdWUsIHRpY2tzX3RpdGxlLAogCSAgICAgICBhdG9taWNfcmVhZCgmcmR0cC0+ZHludGlja3MpICYgMHhmZmYsCiAJICAgICAgIHJkdHAtPmR5bnRpY2tzX25lc3RpbmcsIHJkdHAtPmR5bnRpY2tzX25taV9uZXN0aW5nLAogCSAgICAgICByZHAtPnNvZnRpcnFfc25hcCwga3N0YXRfc29mdGlycXNfY3B1KFJDVV9TT0ZUSVJRLCBjcHUpLAorCSAgICAgICBBQ0NFU1NfT05DRShyc3AtPm5fZm9yY2VfcXMpIC0gcnNwLT5uX2ZvcmNlX3FzX2dwc3RhcnQsCiAJICAgICAgIGZhc3Rfbm9faHopOwogfQogCkBAIC0yMDU2LDkgKzE5MTgsMjYgQEAKIHN0YXRpYyBib29sIHJjdV9ub2NiX2NwdV9uZWVkc19iYXJyaWVyKHN0cnVjdCByY3Vfc3RhdGUgKnJzcCwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgcmN1X2RhdGEgKnJkcCA9IHBlcl9jcHVfcHRyKHJzcC0+cmRhLCBjcHUpOworCXVuc2lnbmVkIGxvbmcgcmV0OworI2lmZGVmIENPTkZJR19QUk9WRV9SQ1UKIAlzdHJ1Y3QgcmN1X2hlYWQgKnJocDsKKyNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1BST1ZFX1JDVSAqLwogCi0JLyogTm8tQ0JzIENQVXMgbWlnaHQgaGF2ZSBjYWxsYmFja3Mgb24gYW55IG9mIHRocmVlIGxpc3RzLiAqLworCS8qCisJICogQ2hlY2sgY291bnQgb2YgYWxsIG5vLUNCcyBjYWxsYmFja3MgYXdhaXRpbmcgaW52b2NhdGlvbi4KKwkgKiBUaGVyZSBuZWVkcyB0byBiZSBhIGJhcnJpZXIgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLAorCSAqIGJ1dCBhc3NvY2lhdGVkIHdpdGggYSBwcmlvciBkZXRlcm1pbmF0aW9uIHRoYXQgbm8gbW9yZQorCSAqIGNhbGxiYWNrcyB3b3VsZCBiZSBwb3N0ZWQuICBJbiB0aGUgd29yc3QgY2FzZSwgdGhlIGZpcnN0CisJICogYmFycmllciBpbiBfcmN1X2JhcnJpZXIoKSBzdWZmaWNlcyAoYnV0IHRoZSBjYWxsZXIgY2Fubm90CisJICogbmVjZXNzYXJpbHkgcmVseSBvbiB0aGlzLCBub3QgYSBzdWJzdGl0dXRlIGZvciB0aGUgY2FsbGVyCisJICogZ2V0dGluZyB0aGUgY29uY3VycmVuY3kgZGVzaWduIHJpZ2h0ISkuICBUaGVyZSBtdXN0IGFsc28gYmUKKwkgKiBhIGJhcnJpZXIgYmV0d2VlbiB0aGUgZm9sbG93aW5nIGxvYWQgYW4gcG9zdGluZyBvZiBhIGNhbGxiYWNrCisJICogKGlmIGEgY2FsbGJhY2sgaXMgaW4gZmFjdCBuZWVkZWQpLiAgVGhpcyBpcyBhc3NvY2lhdGVkIHdpdGggYW4KKwkgKiBhdG9taWNfaW5jKCkgaW4gdGhlIGNhbGxlci4KKwkgKi8KKwlyZXQgPSBhdG9taWNfbG9uZ19yZWFkKCZyZHAtPm5vY2JfcV9jb3VudCk7CisKKyNpZmRlZiBDT05GSUdfUFJPVkVfUkNVCiAJcmhwID0gQUNDRVNTX09OQ0UocmRwLT5ub2NiX2hlYWQpOwogCWlmICghcmhwKQogCQlyaHAgPSBBQ0NFU1NfT05DRShyZHAtPm5vY2JfZ3BfaGVhZCk7CkBAIC0yMDcyLDggKzE5NTEsOSBAQAogCQkgICAgICAgY3B1LCByaHAtPmZ1bmMpOwogCQlXQVJOX09OX09OQ0UoMSk7CiAJfQorI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUFJPVkVfUkNVICovCiAKLQlyZXR1cm4gISFyaHA7CisJcmV0dXJuICEhcmV0OwogfQogCiAvKgpAQCAtMjA5NSw5ICsxOTc1LDEwIEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0OwogCiAJLyogRW5xdWV1ZSB0aGUgY2FsbGJhY2sgb24gdGhlIG5vY2IgbGlzdCBhbmQgdXBkYXRlIGNvdW50cy4gKi8KKwlhdG9taWNfbG9uZ19hZGQocmhjb3VudCwgJnJkcC0+bm9jYl9xX2NvdW50KTsKKwkvKiByY3VfYmFycmllcigpIHJlbGllcyBvbiAtPm5vY2JfcV9jb3VudCBhZGQgYmVmb3JlIHhjaGcuICovCiAJb2xkX3JocHAgPSB4Y2hnKCZyZHAtPm5vY2JfdGFpbCwgcmh0cCk7CiAJQUNDRVNTX09OQ0UoKm9sZF9yaHBwKSA9IHJocDsKLQlhdG9taWNfbG9uZ19hZGQocmhjb3VudCwgJnJkcC0+bm9jYl9xX2NvdW50KTsKIAlhdG9taWNfbG9uZ19hZGQocmhjb3VudF9sYXp5LCAmcmRwLT5ub2NiX3FfY291bnRfbGF6eSk7CiAJc21wX21iX19hZnRlcl9hdG9taWMoKTsgLyogU3RvcmUgKm9sZF9yaHBwIGJlZm9yZSBfd2FrZSB0ZXN0LiAqLwogCkBAIC0yMjg4LDkgKzIxNjksNiBAQAogCQkvKiBNb3ZlIGNhbGxiYWNrcyB0byB3YWl0LWZvci1HUCBsaXN0LCB3aGljaCBpcyBlbXB0eS4gKi8KIAkJQUNDRVNTX09OQ0UocmRwLT5ub2NiX2hlYWQpID0gTlVMTDsKIAkJcmRwLT5ub2NiX2dwX3RhaWwgPSB4Y2hnKCZyZHAtPm5vY2JfdGFpbCwgJnJkcC0+bm9jYl9oZWFkKTsKLQkJcmRwLT5ub2NiX2dwX2NvdW50ID0gYXRvbWljX2xvbmdfeGNoZygmcmRwLT5ub2NiX3FfY291bnQsIDApOwotCQlyZHAtPm5vY2JfZ3BfY291bnRfbGF6eSA9Ci0JCQlhdG9taWNfbG9uZ194Y2hnKCZyZHAtPm5vY2JfcV9jb3VudF9sYXp5LCAwKTsKIAkJZ290Y2JzID0gdHJ1ZTsKIAl9CiAKQEAgLTIzMzgsOSArMjIxNiw2IEBACiAJCS8qIEFwcGVuZCBjYWxsYmFja3MgdG8gZm9sbG93ZXIncyAiZG9uZSIgbGlzdC4gKi8KIAkJdGFpbCA9IHhjaGcoJnJkcC0+bm9jYl9mb2xsb3dlcl90YWlsLCByZHAtPm5vY2JfZ3BfdGFpbCk7CiAJCSp0YWlsID0gcmRwLT5ub2NiX2dwX2hlYWQ7Ci0JCWF0b21pY19sb25nX2FkZChyZHAtPm5vY2JfZ3BfY291bnQsICZyZHAtPm5vY2JfZm9sbG93ZXJfY291bnQpOwotCQlhdG9taWNfbG9uZ19hZGQocmRwLT5ub2NiX2dwX2NvdW50X2xhenksCi0JCQkJJnJkcC0+bm9jYl9mb2xsb3dlcl9jb3VudF9sYXp5KTsKIAkJc21wX21iX19hZnRlcl9hdG9taWMoKTsgLyogU3RvcmUgKnRhaWwgYmVmb3JlIHdha2V1cC4gKi8KIAkJaWYgKHJkcCAhPSBteV9yZHAgJiYgdGFpbCA9PSAmcmRwLT5ub2NiX2ZvbGxvd2VyX2hlYWQpIHsKIAkJCS8qCkBAIC0yNDE1LDEzICsyMjkwLDExIEBACiAJCXRyYWNlX3JjdV9ub2NiX3dha2UocmRwLT5yc3AtPm5hbWUsIHJkcC0+Y3B1LCAiV29rZU5vbkVtcHR5Iik7CiAJCUFDQ0VTU19PTkNFKHJkcC0+bm9jYl9mb2xsb3dlcl9oZWFkKSA9IE5VTEw7CiAJCXRhaWwgPSB4Y2hnKCZyZHAtPm5vY2JfZm9sbG93ZXJfdGFpbCwgJnJkcC0+bm9jYl9mb2xsb3dlcl9oZWFkKTsKLQkJYyA9IGF0b21pY19sb25nX3hjaGcoJnJkcC0+bm9jYl9mb2xsb3dlcl9jb3VudCwgMCk7Ci0JCWNsID0gYXRvbWljX2xvbmdfeGNoZygmcmRwLT5ub2NiX2ZvbGxvd2VyX2NvdW50X2xhenksIDApOwotCQlyZHAtPm5vY2JfcF9jb3VudCArPSBjOwotCQlyZHAtPm5vY2JfcF9jb3VudF9sYXp5ICs9IGNsOwogCiAJCS8qIEVhY2ggcGFzcyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgbG9vcCBpbnZva2VzIGEgY2FsbGJhY2suICovCi0JCXRyYWNlX3JjdV9iYXRjaF9zdGFydChyZHAtPnJzcC0+bmFtZSwgY2wsIGMsIC0xKTsKKwkJdHJhY2VfcmN1X2JhdGNoX3N0YXJ0KHJkcC0+cnNwLT5uYW1lLAorCQkJCSAgICAgIGF0b21pY19sb25nX3JlYWQoJnJkcC0+bm9jYl9xX2NvdW50X2xhenkpLAorCQkJCSAgICAgIGF0b21pY19sb25nX3JlYWQoJnJkcC0+bm9jYl9xX2NvdW50KSwgLTEpOwogCQljID0gY2wgPSAwOwogCQl3aGlsZSAobGlzdCkgewogCQkJbmV4dCA9IGxpc3QtPm5leHQ7CkBAIC0yNDQzLDkgKzIzMTYsOSBAQAogCQkJbGlzdCA9IG5leHQ7CiAJCX0KIAkJdHJhY2VfcmN1X2JhdGNoX2VuZChyZHAtPnJzcC0+bmFtZSwgYywgISFsaXN0LCAwLCAwLCAxKTsKLQkJQUNDRVNTX09OQ0UocmRwLT5ub2NiX3BfY291bnQpID0gcmRwLT5ub2NiX3BfY291bnQgLSBjOwotCQlBQ0NFU1NfT05DRShyZHAtPm5vY2JfcF9jb3VudF9sYXp5KSA9Ci0JCQkJCQlyZHAtPm5vY2JfcF9jb3VudF9sYXp5IC0gY2w7CisJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOyAgLyogX2FkZCBhZnRlciBDQiBpbnZvY2F0aW9uLiAqLworCQlhdG9taWNfbG9uZ19hZGQoLWMsICZyZHAtPm5vY2JfcV9jb3VudCk7CisJCWF0b21pY19sb25nX2FkZCgtY2wsICZyZHAtPm5vY2JfcV9jb3VudF9sYXp5KTsKIAkJcmRwLT5uX25vY2JzX2ludm9rZWQgKz0gYzsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1L3RyZWVfdHJhY2UuYyBiL2tlcm5lbC9yY3UvdHJlZV90cmFjZS5jCmluZGV4IDVjZGM2MmUuLmZiYjYyNDAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3UvdHJlZV90cmFjZS5jCisrKyBiL2tlcm5lbC9yY3UvdHJlZV90cmFjZS5jCkBAIC00Niw2ICs0Niw4IEBACiAjZGVmaW5lIFJDVV9UUkVFX05PTkNPUkUKICNpbmNsdWRlICJ0cmVlLmgiCiAKK0RFQ0xBUkVfUEVSX0NQVV9TSEFSRURfQUxJR05FRCh1bnNpZ25lZCBsb25nLCByY3VfcXNfY3RyKTsKKwogc3RhdGljIGludCByX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCWNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyAqb3ApCiB7CkBAIC0xMTUsMTEgKzExNywxMyBAQAogCiAJaWYgKCFyZHAtPmJlZW5vbmxpbmUpCiAJCXJldHVybjsKLQlzZXFfcHJpbnRmKG0sICIlM2QlY2M9JWxkIGc9JWxkIHBxPSVkIHFwPSVkIiwKKwlzZXFfcHJpbnRmKG0sICIlM2QlY2M9JWxkIGc9JWxkIHBxPSVkLyVkIHFwPSVkIiwKIAkJICAgcmRwLT5jcHUsCiAJCSAgIGNwdV9pc19vZmZsaW5lKHJkcC0+Y3B1KSA/ICchJyA6ICcgJywKIAkJICAgdWxvbmcybG9uZyhyZHAtPmNvbXBsZXRlZCksIHVsb25nMmxvbmcocmRwLT5ncG51bSksCi0JCSAgIHJkcC0+cGFzc2VkX3F1aWVzY2UsIHJkcC0+cXNfcGVuZGluZyk7CisJCSAgIHJkcC0+cGFzc2VkX3F1aWVzY2UsCisJCSAgIHJkcC0+cmN1X3FzX2N0cl9zbmFwID09IHBlcl9jcHUocmN1X3FzX2N0ciwgcmRwLT5jcHUpLAorCQkgICByZHAtPnFzX3BlbmRpbmcpOwogCXNlcV9wcmludGYobSwgIiBkdD0lZC8lbGx4LyVkIGRmPSVsdSIsCiAJCSAgIGF0b21pY19yZWFkKCZyZHAtPmR5bnRpY2tzLT5keW50aWNrcyksCiAJCSAgIHJkcC0+ZHludGlja3MtPmR5bnRpY2tzX25lc3RpbmcsCmRpZmYgLS1naXQgYS9rZXJuZWwvcmVzb3VyY2UuYyBiL2tlcm5lbC9yZXNvdXJjZS5jCmluZGV4IDBiY2ViZmYuLjE5ZjIzNTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yZXNvdXJjZS5jCisrKyBiL2tlcm5lbC9yZXNvdXJjZS5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZV9leHQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogCkBAIC0xNTI5LDYgKzE1MzAsMzAgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKnJlc291cmNlX2xpc3RfY3JlYXRlX2VudHJ5KHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCQkJICBzaXplX3QgZXh0cmFfc2l6ZSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKmVudHJ5OworCisJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpICsgZXh0cmFfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKGVudHJ5KSB7CisJCUlOSVRfTElTVF9IRUFEKCZlbnRyeS0+bm9kZSk7CisJCWVudHJ5LT5yZXMgPSByZXMgPyByZXMgOiAmZW50cnktPl9fcmVzOworCX0KKworCXJldHVybiBlbnRyeTsKK30KK0VYUE9SVF9TWU1CT0wocmVzb3VyY2VfbGlzdF9jcmVhdGVfZW50cnkpOworCit2b2lkIHJlc291cmNlX2xpc3RfZnJlZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCByZXNvdXJjZV9lbnRyeSAqZW50cnksICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgaGVhZCwgbm9kZSkKKwkJcmVzb3VyY2VfbGlzdF9kZXN0cm95X2VudHJ5KGVudHJ5KTsKK30KK0VYUE9SVF9TWU1CT0wocmVzb3VyY2VfbGlzdF9mcmVlKTsKKwogc3RhdGljIGludCBfX2luaXQgc3RyaWN0X2lvbWVtKGNoYXIgKnN0cikKIHsKIAlpZiAoc3Ryc3RyKHN0ciwgInJlbGF4ZWQiKSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9NYWtlZmlsZSBiL2tlcm5lbC9zY2hlZC9NYWtlZmlsZQppbmRleCBhYjMyYjdiLi40NmJlODcwIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvTWFrZWZpbGUKKysrIGIva2VybmVsL3NjaGVkL01ha2VmaWxlCkBAIC0xLDUgKzEsNSBAQAogaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgotQ0ZMQUdTX1JFTU9WRV9jbG9jay5vID0gLXBnCitDRkxBR1NfUkVNT1ZFX2Nsb2NrLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSkKIGVuZGlmCiAKIGlmbmVxICgkKENPTkZJR19TQ0hFRF9PTUlUX0ZSQU1FX1BPSU5URVIpLHkpCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29tcGxldGlvbi5jIGIva2VybmVsL3NjaGVkL2NvbXBsZXRpb24uYwppbmRleCA2MDdmODUyLi43MDUyZDNmIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29tcGxldGlvbi5jCisrKyBiL2tlcm5lbC9zY2hlZC9jb21wbGV0aW9uLmMKQEAgLTI2OCw2ICsyNjgsMTUgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAxOwogCisJLyoKKwkgKiBTaW5jZSB4LT5kb25lIHdpbGwgbmVlZCB0byBiZSBsb2NrZWQgb25seQorCSAqIGluIHRoZSBub24tYmxvY2tpbmcgY2FzZSwgd2UgY2hlY2sgeC0+ZG9uZQorCSAqIGZpcnN0IHdpdGhvdXQgdGFraW5nIHRoZSBsb2NrIHNvIHdlIGNhbgorCSAqIHJldHVybiBlYXJseSBpbiB0aGUgYmxvY2tpbmcgY2FzZS4KKwkgKi8KKwlpZiAoIUFDQ0VTU19PTkNFKHgtPmRvbmUpKQorCQlyZXR1cm4gMDsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZ4LT53YWl0LmxvY2ssIGZsYWdzKTsKIAlpZiAoIXgtPmRvbmUpCiAJCXJldCA9IDA7CkBAIC0yODgsMTMgKzI5Nyw2IEBACiAgKi8KIGJvb2wgY29tcGxldGlvbl9kb25lKHN0cnVjdCBjb21wbGV0aW9uICp4KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDE7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmeC0+d2FpdC5sb2NrLCBmbGFncyk7Ci0JaWYgKCF4LT5kb25lKQotCQlyZXQgPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJngtPndhaXQubG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7CisJcmV0dXJuICEhQUNDRVNTX09OQ0UoeC0+ZG9uZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGNvbXBsZXRpb25fZG9uZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCBjMGFjY2MwLi4xZjM3ZmU3IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCisrKyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKQEAgLTExOSw3ICsxMTksOSBAQAogewogCXM2NCBkZWx0YTsKIAotCWlmIChycS0+c2tpcF9jbG9ja191cGRhdGUgPiAwKQorCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJxLT5sb2NrKTsKKworCWlmIChycS0+Y2xvY2tfc2tpcF91cGRhdGUgJiBSUUNGX0FDVF9TS0lQKQogCQlyZXR1cm47CiAKIAlkZWx0YSA9IHNjaGVkX2Nsb2NrX2NwdShjcHVfb2YocnEpKSAtIHJxLT5jbG9jazsKQEAgLTQ5MCw2ICs0OTIsMTEgQEAKICAqLwogdm9pZCBocnRpY2tfc3RhcnQoc3RydWN0IHJxICpycSwgdTY0IGRlbGF5KQogeworCS8qCisJICogRG9uJ3Qgc2NoZWR1bGUgc2xpY2VzIHNob3J0ZXIgdGhhbiAxMDAwMG5zLCB0aGF0IGp1c3QKKwkgKiBkb2Vzbid0IG1ha2Ugc2Vuc2UuIFJlbHkgb24gdnJ1bnRpbWUgZm9yIGZhaXJuZXNzLgorCSAqLworCWRlbGF5ID0gbWF4X3QodTY0LCBkZWxheSwgMTAwMDBMTCk7CiAJX19ocnRpbWVyX3N0YXJ0X3JhbmdlX25zKCZycS0+aHJ0aWNrX3RpbWVyLCBuc190b19rdGltZShkZWxheSksIDAsCiAJCQlIUlRJTUVSX01PREVfUkVMX1BJTk5FRCwgMCk7CiB9CkBAIC0xMDQ2LDcgKzEwNTMsNyBAQAogCSAqIHRoaXMgY2FzZSwgd2UgY2FuIHNhdmUgYSB1c2VsZXNzIGJhY2sgdG8gYmFjayBjbG9jayB1cGRhdGUuCiAJICovCiAJaWYgKHRhc2tfb25fcnFfcXVldWVkKHJxLT5jdXJyKSAmJiB0ZXN0X3Rza19uZWVkX3Jlc2NoZWQocnEtPmN1cnIpKQotCQlycS0+c2tpcF9jbG9ja191cGRhdGUgPSAxOworCQlycV9jbG9ja19za2lwX3VwZGF0ZShycSwgdHJ1ZSk7CiB9CiAKICNpZmRlZiBDT05GSUdfU01QCkBAIC0xMDgyLDcgKzEwODksNyBAQAogCQlpZiAocC0+c2NoZWRfY2xhc3MtPm1pZ3JhdGVfdGFza19ycSkKIAkJCXAtPnNjaGVkX2NsYXNzLT5taWdyYXRlX3Rhc2tfcnEocCwgbmV3X2NwdSk7CiAJCXAtPnNlLm5yX21pZ3JhdGlvbnMrKzsKLQkJcGVyZl9zd19ldmVudChQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TLCAxLCBOVUxMLCAwKTsKKwkJcGVyZl9zd19ldmVudF9zY2hlZChQRVJGX0NPVU5UX1NXX0NQVV9NSUdSQVRJT05TLCAxLCAwKTsKIAl9CiAKIAlfX3NldF90YXNrX2NwdShwLCBuZXdfY3B1KTsKQEAgLTE4MTQsNiArMTgyMSwxMCBAQAogCWRsX3NlLT5kbF9wZXJpb2QgPSAwOwogCWRsX3NlLT5mbGFncyA9IDA7CiAJZGxfc2UtPmRsX2J3ID0gMDsKKworCWRsX3NlLT5kbF90aHJvdHRsZWQgPSAwOworCWRsX3NlLT5kbF9uZXcgPSAxOworCWRsX3NlLT5kbF95aWVsZGVkID0gMDsKIH0KIAogLyoKQEAgLTE4MzIsNiArMTg0Myw5IEBACiAJcC0+c2UucHJldl9zdW1fZXhlY19ydW50aW1lCT0gMDsKIAlwLT5zZS5ucl9taWdyYXRpb25zCQk9IDA7CiAJcC0+c2UudnJ1bnRpbWUJCQk9IDA7CisjaWZkZWYgQ09ORklHX1NNUAorCXAtPnNlLmF2Zy5kZWNheV9jb3VudAkJPSAwOworI2VuZGlmCiAJSU5JVF9MSVNUX0hFQUQoJnAtPnNlLmdyb3VwX25vZGUpOwogCiAjaWZkZWYgQ09ORklHX1NDSEVEU1RBVFMKQEAgLTE4MzksNyArMTg1Myw3IEBACiAjZW5kaWYKIAogCVJCX0NMRUFSX05PREUoJnAtPmRsLnJiX25vZGUpOwotCWhydGltZXJfaW5pdCgmcC0+ZGwuZGxfdGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CisJaW5pdF9kbF90YXNrX3RpbWVyKCZwLT5kbCk7CiAJX19kbF9jbGVhcl9wYXJhbXMocCk7CiAKIAlJTklUX0xJU1RfSEVBRCgmcC0+cnQucnVuX2xpc3QpOwpAQCAtMjA0OSw2ICsyMDYzLDkgQEAKICAqIGFsbG9jYXRlZCBiYW5kd2lkdGggdG8gcmVmbGVjdCB0aGUgbmV3IHNpdHVhdGlvbi4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHAncyBycS0+bG9jay4KKyAqCisgKiBYWFggd2Ugc2hvdWxkIGRlbGF5IGJ3IGNoYW5nZSB1bnRpbCB0aGUgdGFzaydzIDAtbGFnIHBvaW50LCBzZWUKKyAqIF9fc2V0cGFyYW1fZGwoKS4KICAqLwogc3RhdGljIGludCBkbF9vdmVyZmxvdyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwb2xpY3ksCiAJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc2NoZWRfYXR0ciAqYXR0cikKQEAgLTI3NDgsNiArMjc2NSwxMCBAQAogICogICAgICAgICAgLSBleHBsaWNpdCBzY2hlZHVsZSgpIGNhbGwKICAqICAgICAgICAgIC0gcmV0dXJuIGZyb20gc3lzY2FsbCBvciBleGNlcHRpb24gdG8gdXNlci1zcGFjZQogICogICAgICAgICAgLSByZXR1cm4gZnJvbSBpbnRlcnJ1cHQtaGFuZGxlciB0byB1c2VyLXNwYWNlCisgKgorICogV0FSTklORzogYWxsIGNhbGxlcnMgbXVzdCByZS1jaGVjayBuZWVkX3Jlc2NoZWQoKSBhZnRlcndhcmQgYW5kIHJlc2NoZWR1bGUKKyAqIGFjY29yZGluZ2x5IGluIGNhc2UgYW4gZXZlbnQgdHJpZ2dlcmVkIHRoZSBuZWVkIGZvciByZXNjaGVkdWxpbmcgKHN1Y2ggYXMKKyAqIGFuIGludGVycnVwdCB3YWtpbmcgdXAgYSB0YXNrKSB3aGlsZSBwcmVlbXB0aW9uIHdhcyBkaXNhYmxlZCBpbiBfX3NjaGVkdWxlKCkuCiAgKi8KIHN0YXRpYyB2b2lkIF9fc2NoZWQgX19zY2hlZHVsZSh2b2lkKQogewpAQCAtMjc1Niw3ICsyNzc3LDYgQEAKIAlzdHJ1Y3QgcnEgKnJxOwogCWludCBjcHU7CiAKLW5lZWRfcmVzY2hlZDoKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJcnEgPSBjcHVfcnEoY3B1KTsKQEAgLTI3NzYsNiArMjc5Niw4IEBACiAJc21wX21iX19iZWZvcmVfc3BpbmxvY2soKTsKIAlyYXdfc3Bpbl9sb2NrX2lycSgmcnEtPmxvY2spOwogCisJcnEtPmNsb2NrX3NraXBfdXBkYXRlIDw8PSAxOyAvKiBwcm9tb3RlIFJFUSB0byBBQ1QgKi8KKwogCXN3aXRjaF9jb3VudCA9ICZwcmV2LT5uaXZjc3c7CiAJaWYgKHByZXYtPnN0YXRlICYmICEocHJlZW1wdF9jb3VudCgpICYgUFJFRU1QVF9BQ1RJVkUpKSB7CiAJCWlmICh1bmxpa2VseShzaWduYWxfcGVuZGluZ19zdGF0ZShwcmV2LT5zdGF0ZSwgcHJldikpKSB7CkBAIC0yODAwLDEzICsyODIyLDEzIEBACiAJCXN3aXRjaF9jb3VudCA9ICZwcmV2LT5udmNzdzsKIAl9CiAKLQlpZiAodGFza19vbl9ycV9xdWV1ZWQocHJldikgfHwgcnEtPnNraXBfY2xvY2tfdXBkYXRlIDwgMCkKKwlpZiAodGFza19vbl9ycV9xdWV1ZWQocHJldikpCiAJCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAKIAluZXh0ID0gcGlja19uZXh0X3Rhc2socnEsIHByZXYpOwogCWNsZWFyX3Rza19uZWVkX3Jlc2NoZWQocHJldik7CiAJY2xlYXJfcHJlZW1wdF9uZWVkX3Jlc2NoZWQoKTsKLQlycS0+c2tpcF9jbG9ja191cGRhdGUgPSAwOworCXJxLT5jbG9ja19za2lwX3VwZGF0ZSA9IDA7CiAKIAlpZiAobGlrZWx5KHByZXYgIT0gbmV4dCkpIHsKIAkJcnEtPm5yX3N3aXRjaGVzKys7CkBAIC0yODIxLDggKzI4NDMsNiBAQAogCXBvc3Rfc2NoZWR1bGUocnEpOwogCiAJc2NoZWRfcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwotCWlmIChuZWVkX3Jlc2NoZWQoKSkKLQkJZ290byBuZWVkX3Jlc2NoZWQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzY2hlZF9zdWJtaXRfd29yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKQEAgLTI4NDIsNyArMjg2Miw5IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCiAJc2NoZWRfc3VibWl0X3dvcmsodHNrKTsKLQlfX3NjaGVkdWxlKCk7CisJZG8geworCQlfX3NjaGVkdWxlKCk7CisJfSB3aGlsZSAobmVlZF9yZXNjaGVkKCkpOwogfQogRVhQT1JUX1NZTUJPTChzY2hlZHVsZSk7CiAKQEAgLTI4NzcsNiArMjg5OSwyMSBAQAogCXByZWVtcHRfZGlzYWJsZSgpOwogfQogCitzdGF0aWMgdm9pZCBwcmVlbXB0X3NjaGVkdWxlX2NvbW1vbih2b2lkKQoreworCWRvIHsKKwkJX19wcmVlbXB0X2NvdW50X2FkZChQUkVFTVBUX0FDVElWRSk7CisJCV9fc2NoZWR1bGUoKTsKKwkJX19wcmVlbXB0X2NvdW50X3N1YihQUkVFTVBUX0FDVElWRSk7CisKKwkJLyoKKwkJICogQ2hlY2sgYWdhaW4gaW4gY2FzZSB3ZSBtaXNzZWQgYSBwcmVlbXB0aW9uIG9wcG9ydHVuaXR5CisJCSAqIGJldHdlZW4gc2NoZWR1bGUgYW5kIG5vdy4KKwkJICovCisJCWJhcnJpZXIoKTsKKwl9IHdoaWxlIChuZWVkX3Jlc2NoZWQoKSk7Cit9CisKICNpZmRlZiBDT05GSUdfUFJFRU1QVAogLyoKICAqIHRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IHRvIHNjaGVkdWxlKCkgZnJvbSBpbi1rZXJuZWwgcHJlZW1wdGlvbgpAQCAtMjg5MiwxNyArMjkyOSw3IEBACiAJaWYgKGxpa2VseSghcHJlZW1wdGlibGUoKSkpCiAJCXJldHVybjsKIAotCWRvIHsKLQkJX19wcmVlbXB0X2NvdW50X2FkZChQUkVFTVBUX0FDVElWRSk7Ci0JCV9fc2NoZWR1bGUoKTsKLQkJX19wcmVlbXB0X2NvdW50X3N1YihQUkVFTVBUX0FDVElWRSk7Ci0KLQkJLyoKLQkJICogQ2hlY2sgYWdhaW4gaW4gY2FzZSB3ZSBtaXNzZWQgYSBwcmVlbXB0aW9uIG9wcG9ydHVuaXR5Ci0JCSAqIGJldHdlZW4gc2NoZWR1bGUgYW5kIG5vdy4KLQkJICovCi0JCWJhcnJpZXIoKTsKLQl9IHdoaWxlIChuZWVkX3Jlc2NoZWQoKSk7CisJcHJlZW1wdF9zY2hlZHVsZV9jb21tb24oKTsKIH0KIE5PS1BST0JFX1NZTUJPTChwcmVlbXB0X3NjaGVkdWxlKTsKIEVYUE9SVF9TWU1CT0wocHJlZW1wdF9zY2hlZHVsZSk7CkBAIC0zMjUxLDE1ICszMjc4LDMxIEBACiB7CiAJc3RydWN0IHNjaGVkX2RsX2VudGl0eSAqZGxfc2UgPSAmcC0+ZGw7CiAKLQlpbml0X2RsX3Rhc2tfdGltZXIoZGxfc2UpOwogCWRsX3NlLT5kbF9ydW50aW1lID0gYXR0ci0+c2NoZWRfcnVudGltZTsKIAlkbF9zZS0+ZGxfZGVhZGxpbmUgPSBhdHRyLT5zY2hlZF9kZWFkbGluZTsKIAlkbF9zZS0+ZGxfcGVyaW9kID0gYXR0ci0+c2NoZWRfcGVyaW9kID86IGRsX3NlLT5kbF9kZWFkbGluZTsKIAlkbF9zZS0+ZmxhZ3MgPSBhdHRyLT5zY2hlZF9mbGFnczsKIAlkbF9zZS0+ZGxfYncgPSB0b19yYXRpbyhkbF9zZS0+ZGxfcGVyaW9kLCBkbF9zZS0+ZGxfcnVudGltZSk7Ci0JZGxfc2UtPmRsX3Rocm90dGxlZCA9IDA7Ci0JZGxfc2UtPmRsX25ldyA9IDE7Ci0JZGxfc2UtPmRsX3lpZWxkZWQgPSAwOworCisJLyoKKwkgKiBDaGFuZ2luZyB0aGUgcGFyYW1ldGVycyBvZiBhIHRhc2sgaXMgJ3RyaWNreScgYW5kIHdlJ3JlIG5vdCBkb2luZworCSAqIHRoZSBjb3JyZWN0IHRoaW5nIC0tIGFsc28gc2VlIHRhc2tfZGVhZF9kbCgpIGFuZCBzd2l0Y2hlZF9mcm9tX2RsKCkuCisJICoKKwkgKiBXaGF0IHdlIFNIT1VMRCBkbyBpcyBkZWxheSB0aGUgYmFuZHdpZHRoIHJlbGVhc2UgdW50aWwgdGhlIDAtbGFnCisJICogcG9pbnQuIFRoaXMgd291bGQgaW5jbHVkZSByZXRhaW5pbmcgdGhlIHRhc2tfc3RydWN0IHVudGlsIHRoYXQgdGltZQorCSAqIGFuZCBjaGFuZ2UgZGxfb3ZlcmZsb3coKSB0byBub3QgaW1tZWRpYXRlbHkgZGVjcmVtZW50IHRoZSBjdXJyZW50CisJICogYW1vdW50LgorCSAqCisJICogSW5zdGVhZCB3ZSByZXRhaW4gdGhlIGN1cnJlbnQgcnVudGltZS9kZWFkbGluZSBhbmQgbGV0IHRoZSBuZXcKKwkgKiBwYXJhbWV0ZXJzIHRha2UgZWZmZWN0IGFmdGVyIHRoZSBjdXJyZW50IHJlc2VydmF0aW9uIHBlcmlvZCBsYXBzZXMuCisJICogVGhpcyBpcyBzYWZlIChhbGJlaXQgcGVzc2ltaXN0aWMpIGJlY2F1c2UgdGhlIDAtbGFnIHBvaW50IGlzIGFsd2F5cworCSAqIGJlZm9yZSB0aGUgY3VycmVudCBzY2hlZHVsaW5nIGRlYWRsaW5lLgorCSAqCisJICogV2UgY2FuIHN0aWxsIGhhdmUgdGVtcG9yYXJ5IG92ZXJsb2FkcyBiZWNhdXNlIHdlIGRvIG5vdCBkZWxheSB0aGUKKwkgKiBjaGFuZ2UgaW4gYmFuZHdpZHRoIHVudGlsIHRoYXQgdGltZTsgc28gYWRtaXNzaW9uIGNvbnRyb2wgaXMKKwkgKiBub3Qgb24gdGhlIHNhZmUgc2lkZS4gSXQgZG9lcyBob3dldmVyIGd1YXJhbnRlZSB0YXNrcyB3aWxsIG5ldmVyCisJICogY29uc3VtZSBtb3JlIHRoYW4gcHJvbWlzZWQuCisJICovCiB9CiAKIC8qCkBAIC0zMzgyLDYgKzM0MjUsMjAgQEAKIAlyZXR1cm4gbWF0Y2g7CiB9CiAKK3N0YXRpYyBib29sIGRsX3BhcmFtX2NoYW5nZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLAorCQljb25zdCBzdHJ1Y3Qgc2NoZWRfYXR0ciAqYXR0cikKK3sKKwlzdHJ1Y3Qgc2NoZWRfZGxfZW50aXR5ICpkbF9zZSA9ICZwLT5kbDsKKworCWlmIChkbF9zZS0+ZGxfcnVudGltZSAhPSBhdHRyLT5zY2hlZF9ydW50aW1lIHx8CisJCWRsX3NlLT5kbF9kZWFkbGluZSAhPSBhdHRyLT5zY2hlZF9kZWFkbGluZSB8fAorCQlkbF9zZS0+ZGxfcGVyaW9kICE9IGF0dHItPnNjaGVkX3BlcmlvZCB8fAorCQlkbF9zZS0+ZmxhZ3MgIT0gYXR0ci0+c2NoZWRfZmxhZ3MpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCiBzdGF0aWMgaW50IF9fc2NoZWRfc2V0c2NoZWR1bGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCQljb25zdCBzdHJ1Y3Qgc2NoZWRfYXR0ciAqYXR0ciwKIAkJCQlib29sIHVzZXIpCkBAIC0zNTEwLDcgKzM1NjcsNyBAQAogCQkJZ290byBjaGFuZ2U7CiAJCWlmIChydF9wb2xpY3kocG9saWN5KSAmJiBhdHRyLT5zY2hlZF9wcmlvcml0eSAhPSBwLT5ydF9wcmlvcml0eSkKIAkJCWdvdG8gY2hhbmdlOwotCQlpZiAoZGxfcG9saWN5KHBvbGljeSkpCisJCWlmIChkbF9wb2xpY3kocG9saWN5KSAmJiBkbF9wYXJhbV9jaGFuZ2VkKHAsIGF0dHIpKQogCQkJZ290byBjaGFuZ2U7CiAKIAkJcC0+c2NoZWRfcmVzZXRfb25fZm9yayA9IHJlc2V0X29uX2Zvcms7CkBAIC00MjAyLDE3ICs0MjU5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY29uZF9yZXNjaGVkKHZvaWQpCi17Ci0JX19wcmVlbXB0X2NvdW50X2FkZChQUkVFTVBUX0FDVElWRSk7Ci0JX19zY2hlZHVsZSgpOwotCV9fcHJlZW1wdF9jb3VudF9zdWIoUFJFRU1QVF9BQ1RJVkUpOwotfQotCiBpbnQgX19zY2hlZCBfY29uZF9yZXNjaGVkKHZvaWQpCiB7CiAJaWYgKHNob3VsZF9yZXNjaGVkKCkpIHsKLQkJX19jb25kX3Jlc2NoZWQoKTsKKwkJcHJlZW1wdF9zY2hlZHVsZV9jb21tb24oKTsKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtNDIzNyw3ICs0Mjg3LDcgQEAKIAlpZiAoc3Bpbl9uZWVkYnJlYWsobG9jaykgfHwgcmVzY2hlZCkgewogCQlzcGluX3VubG9jayhsb2NrKTsKIAkJaWYgKHJlc2NoZWQpCi0JCQlfX2NvbmRfcmVzY2hlZCgpOworCQkJcHJlZW1wdF9zY2hlZHVsZV9jb21tb24oKTsKIAkJZWxzZQogCQkJY3B1X3JlbGF4KCk7CiAJCXJldCA9IDE7CkBAIC00MjUzLDcgKzQzMDMsNyBAQAogCiAJaWYgKHNob3VsZF9yZXNjaGVkKCkpIHsKIAkJbG9jYWxfYmhfZW5hYmxlKCk7Ci0JCV9fY29uZF9yZXNjaGVkKCk7CisJCXByZWVtcHRfc2NoZWR1bGVfY29tbW9uKCk7CiAJCWxvY2FsX2JoX2Rpc2FibGUoKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNDUwOCw5ICs0NTU4LDEwIEBACiB7CiAJdW5zaWduZWQgbG9uZyBmcmVlID0gMDsKIAlpbnQgcHBpZDsKLQl1bnNpZ25lZCBzdGF0ZTsKKwl1bnNpZ25lZCBsb25nIHN0YXRlID0gcC0+c3RhdGU7CiAKLQlzdGF0ZSA9IHAtPnN0YXRlID8gX19mZnMocC0+c3RhdGUpICsgMSA6IDA7CisJaWYgKHN0YXRlKQorCQlzdGF0ZSA9IF9fZmZzKHN0YXRlKSArIDE7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJS0xNS4xNXMgJWMiLCBwLT5jb21tLAogCQlzdGF0ZSA8IHNpemVvZihzdGF0X25hbSkgLSAxID8gc3RhdF9uYW1bc3RhdGVdIDogJz8nKTsKICNpZiBCSVRTX1BFUl9MT05HID09IDMyCkBAIC00NjQyLDYgKzQ2OTMsOSBAQAogCXN0cnVjdCBkbF9idyAqY3VyX2RsX2I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmICghY3B1bWFza193ZWlnaHQoY3VyKSkKKwkJcmV0dXJuIHJldDsKKwogCXJjdV9yZWFkX2xvY2tfc2NoZWQoKTsKIAljdXJfZGxfYiA9IGRsX2J3X29mKGNwdW1hc2tfYW55KGN1cikpOwogCXRyaWFsX2NwdXMgPSBjcHVtYXNrX3dlaWdodCh0cmlhbCk7CkBAIC00NzQwLDcgKzQ3OTQsNyBAQAogCiB2b2lkIGRvX3NldF9jcHVzX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbmV3X21hc2spCiB7Ci0JaWYgKHAtPnNjaGVkX2NsYXNzICYmIHAtPnNjaGVkX2NsYXNzLT5zZXRfY3B1c19hbGxvd2VkKQorCWlmIChwLT5zY2hlZF9jbGFzcy0+c2V0X2NwdXNfYWxsb3dlZCkKIAkJcC0+c2NoZWRfY2xhc3MtPnNldF9jcHVzX2FsbG93ZWQocCwgbmV3X21hc2spOwogCiAJY3B1bWFza19jb3B5KCZwLT5jcHVzX2FsbG93ZWQsIG5ld19tYXNrKTsKQEAgLTcyNTAsNiArNzMwNCwxMSBAQAogCWVudGVyX2xhenlfdGxiKCZpbml0X21tLCBjdXJyZW50KTsKIAogCS8qCisJICogRHVyaW5nIGVhcmx5IGJvb3R1cCB3ZSBwcmV0ZW5kIHRvIGJlIGEgbm9ybWFsIHRhc2s6CisJICovCisJY3VycmVudC0+c2NoZWRfY2xhc3MgPSAmZmFpcl9zY2hlZF9jbGFzczsKKworCS8qCiAJICogTWFrZSB1cyB0aGUgaWRsZSB0aHJlYWQuIFRlY2huaWNhbGx5LCBzY2hlZHVsZSgpIHNob3VsZCBub3QgYmUKIAkgKiBjYWxsZWQgZnJvbSB0aGlzIHRocmVhZCwgaG93ZXZlciBzb21ld2hlcmUgYmVsb3cgaXQgbWlnaHQgYmUsCiAJICogYnV0IGJlY2F1c2Ugd2UgYXJlIHRoZSBpZGxlIHRocmVhZCwgd2UganVzdCBwaWNrIHVwIHJ1bm5pbmcgYWdhaW4KQEAgLTcyNTksMTEgKzczMTgsNiBAQAogCiAJY2FsY19sb2FkX3VwZGF0ZSA9IGppZmZpZXMgKyBMT0FEX0ZSRVE7CiAKLQkvKgotCSAqIER1cmluZyBlYXJseSBib290dXAgd2UgcHJldGVuZCB0byBiZSBhIG5vcm1hbCB0YXNrOgotCSAqLwotCWN1cnJlbnQtPnNjaGVkX2NsYXNzID0gJmZhaXJfc2NoZWRfY2xhc3M7Ci0KICNpZmRlZiBDT05GSUdfU01QCiAJemFsbG9jX2NwdW1hc2tfdmFyKCZzY2hlZF9kb21haW5zX3RtcG1hc2ssIEdGUF9OT1dBSVQpOwogCS8qIE1heSBiZSBhbGxvY2F0ZWQgYXQgaXNvbGNwdXMgY21kbGluZSBwYXJzZSB0aW1lICovCkBAIC03MjkyLDEzICs3MzQ2LDEyIEBACiAJICogc2luY2Ugd2Ugd2lsbCBleGl0IHdpdGggVEFTS19SVU5OSU5HIG1ha2Ugc3VyZSB3ZSBlbnRlciB3aXRoIGl0LAogCSAqIG90aGVyd2lzZSB3ZSB3aWxsIGRlc3Ryb3kgc3RhdGUuCiAJICovCi0JaWYgKFdBUk5fT05DRShjdXJyZW50LT5zdGF0ZSAhPSBUQVNLX1JVTk5JTkcsCisJV0FSTl9PTkNFKGN1cnJlbnQtPnN0YXRlICE9IFRBU0tfUlVOTklORyAmJiBjdXJyZW50LT50YXNrX3N0YXRlX2NoYW5nZSwKIAkJCSJkbyBub3QgY2FsbCBibG9ja2luZyBvcHMgd2hlbiAhVEFTS19SVU5OSU5HOyAiCiAJCQkic3RhdGU9JWx4IHNldCBhdCBbPCVwPl0gJXBTXG4iLAogCQkJY3VycmVudC0+c3RhdGUsCiAJCQkodm9pZCAqKWN1cnJlbnQtPnRhc2tfc3RhdGVfY2hhbmdlLAotCQkJKHZvaWQgKiljdXJyZW50LT50YXNrX3N0YXRlX2NoYW5nZSkpCi0JCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwkJCSh2b2lkICopY3VycmVudC0+dGFza19zdGF0ZV9jaGFuZ2UpOwogCiAJX19fbWlnaHRfc2xlZXAoZmlsZSwgbGluZSwgcHJlZW1wdF9vZmZzZXQpOwogfQpAQCAtNzMyNSw2ICs3Mzc4LDkgQEAKIAkJCWluX2F0b21pYygpLCBpcnFzX2Rpc2FibGVkKCksCiAJCQljdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0pOwogCisJaWYgKHRhc2tfc3RhY2tfZW5kX2NvcnJ1cHRlZChjdXJyZW50KSkKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIlRocmVhZCBvdmVycmFuIHN0YWNrLCBvciBzdGFjayBjb3JydXB0ZWRcbiIpOworCiAJZGVidWdfc2hvd19oZWxkX2xvY2tzKGN1cnJlbnQpOwogCWlmIChpcnFzX2Rpc2FibGVkKCkpCiAJCXByaW50X2lycXRyYWNlX2V2ZW50cyhjdXJyZW50KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jcHVkZWFkbGluZS5jIGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmMKaW5kZXggNTM5Y2EzYy4uYzZhY2IwNyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmMKKysrIGIva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmMKQEAgLTEwNyw3ICsxMDcsOCBAQAogCWludCBiZXN0X2NwdSA9IC0xOwogCWNvbnN0IHN0cnVjdCBzY2hlZF9kbF9lbnRpdHkgKmRsX3NlID0gJnAtPmRsOwogCi0JaWYgKGxhdGVyX21hc2sgJiYgY3B1bWFza19hbmQobGF0ZXJfbWFzaywgbGF0ZXJfbWFzaywgY3AtPmZyZWVfY3B1cykpIHsKKwlpZiAobGF0ZXJfbWFzayAmJgorCSAgICBjcHVtYXNrX2FuZChsYXRlcl9tYXNrLCBjcC0+ZnJlZV9jcHVzLCAmcC0+Y3B1c19hbGxvd2VkKSkgewogCQliZXN0X2NwdSA9IGNwdW1hc2tfYW55KGxhdGVyX21hc2spOwogCQlnb3RvIG91dDsKIAl9IGVsc2UgaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1ZGxfbWF4aW11bShjcCksICZwLT5jcHVzX2FsbG93ZWQpICYmCkBAIC0xODYsNiArMTg3LDI2IEBACiB9CiAKIC8qCisgKiBjcHVkbF9zZXRfZnJlZWNwdSAtIFNldCB0aGUgY3B1ZGwuZnJlZV9jcHVzCisgKiBAY3A6IHRoZSBjcHVkbCBtYXgtaGVhcCBjb250ZXh0CisgKiBAY3B1OiByZCBhdHRhY2hlZCBjcHUKKyAqLwordm9pZCBjcHVkbF9zZXRfZnJlZWNwdShzdHJ1Y3QgY3B1ZGwgKmNwLCBpbnQgY3B1KQoreworCWNwdW1hc2tfc2V0X2NwdShjcHUsIGNwLT5mcmVlX2NwdXMpOworfQorCisvKgorICogY3B1ZGxfY2xlYXJfZnJlZWNwdSAtIENsZWFyIHRoZSBjcHVkbC5mcmVlX2NwdXMKKyAqIEBjcDogdGhlIGNwdWRsIG1heC1oZWFwIGNvbnRleHQKKyAqIEBjcHU6IHJkIGF0dGFjaGVkIGNwdQorICovCit2b2lkIGNwdWRsX2NsZWFyX2ZyZWVjcHUoc3RydWN0IGNwdWRsICpjcCwgaW50IGNwdSkKK3sKKwljcHVtYXNrX2NsZWFyX2NwdShjcHUsIGNwLT5mcmVlX2NwdXMpOworfQorCisvKgogICogY3B1ZGxfaW5pdCAtIGluaXRpYWxpemUgdGhlIGNwdWRsIHN0cnVjdHVyZQogICogQGNwOiB0aGUgY3B1ZGwgbWF4LWhlYXAgY29udGV4dAogICovCkBAIC0yMDMsNyArMjI0LDcgQEAKIAlpZiAoIWNwLT5lbGVtZW50cykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZjcC0+ZnJlZV9jcHVzLCBHRlBfS0VSTkVMKSkgeworCWlmICghemFsbG9jX2NwdW1hc2tfdmFyKCZjcC0+ZnJlZV9jcHVzLCBHRlBfS0VSTkVMKSkgewogCQlrZnJlZShjcC0+ZWxlbWVudHMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0yMTEsOCArMjMyLDYgQEAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKIAkJY3AtPmVsZW1lbnRzW2ldLmlkeCA9IElEWF9JTlZBTElEOwogCi0JY3B1bWFza19zZXRhbGwoY3AtPmZyZWVfY3B1cyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2NwdWRlYWRsaW5lLmggYi9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuaAppbmRleCAwMjAwMzliLi4xYTBhNmVmIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuaAorKysgYi9rZXJuZWwvc2NoZWQvY3B1ZGVhZGxpbmUuaApAQCAtMjQsNiArMjQsOCBAQAogCSAgICAgICBzdHJ1Y3QgY3B1bWFzayAqbGF0ZXJfbWFzayk7CiB2b2lkIGNwdWRsX3NldChzdHJ1Y3QgY3B1ZGwgKmNwLCBpbnQgY3B1LCB1NjQgZGwsIGludCBpc192YWxpZCk7CiBpbnQgY3B1ZGxfaW5pdChzdHJ1Y3QgY3B1ZGwgKmNwKTsKK3ZvaWQgY3B1ZGxfc2V0X2ZyZWVjcHUoc3RydWN0IGNwdWRsICpjcCwgaW50IGNwdSk7Cit2b2lkIGNwdWRsX2NsZWFyX2ZyZWVjcHUoc3RydWN0IGNwdWRsICpjcCwgaW50IGNwdSk7CiB2b2lkIGNwdWRsX2NsZWFudXAoc3RydWN0IGNwdWRsICpjcCk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZGVhZGxpbmUuYyBiL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jCmluZGV4IGI1MjA5MmYuLmEwMjc3OTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jCisrKyBiL2tlcm5lbC9zY2hlZC9kZWFkbGluZS5jCkBAIC0zNTAsNiArMzUwLDExIEBACiAJCWRsX3NlLT5kZWFkbGluZSA9IHJxX2Nsb2NrKHJxKSArIHBpX3NlLT5kbF9kZWFkbGluZTsKIAkJZGxfc2UtPnJ1bnRpbWUgPSBwaV9zZS0+ZGxfcnVudGltZTsKIAl9CisKKwlpZiAoZGxfc2UtPmRsX3lpZWxkZWQpCisJCWRsX3NlLT5kbF95aWVsZGVkID0gMDsKKwlpZiAoZGxfc2UtPmRsX3Rocm90dGxlZCkKKwkJZGxfc2UtPmRsX3Rocm90dGxlZCA9IDA7CiB9CiAKIC8qCkBAIC01MzYsMjMgKzU0MSwxOSBAQAogCiAJc2NoZWRfY2xvY2tfdGljaygpOwogCXVwZGF0ZV9ycV9jbG9jayhycSk7Ci0JZGxfc2UtPmRsX3Rocm90dGxlZCA9IDA7Ci0JZGxfc2UtPmRsX3lpZWxkZWQgPSAwOwotCWlmICh0YXNrX29uX3JxX3F1ZXVlZChwKSkgewotCQllbnF1ZXVlX3Rhc2tfZGwocnEsIHAsIEVOUVVFVUVfUkVQTEVOSVNIKTsKLQkJaWYgKGRsX3Rhc2socnEtPmN1cnIpKQotCQkJY2hlY2tfcHJlZW1wdF9jdXJyX2RsKHJxLCBwLCAwKTsKLQkJZWxzZQotCQkJcmVzY2hlZF9jdXJyKHJxKTsKKwllbnF1ZXVlX3Rhc2tfZGwocnEsIHAsIEVOUVVFVUVfUkVQTEVOSVNIKTsKKwlpZiAoZGxfdGFzayhycS0+Y3VycikpCisJCWNoZWNrX3ByZWVtcHRfY3Vycl9kbChycSwgcCwgMCk7CisJZWxzZQorCQlyZXNjaGVkX2N1cnIocnEpOwogI2lmZGVmIENPTkZJR19TTVAKLQkJLyoKLQkJICogUXVldWVpbmcgdGhpcyB0YXNrIGJhY2sgbWlnaHQgaGF2ZSBvdmVybG9hZGVkIHJxLAotCQkgKiBjaGVjayBpZiB3ZSBuZWVkIHRvIGtpY2sgc29tZW9uZSBhd2F5LgotCQkgKi8KLQkJaWYgKGhhc19wdXNoYWJsZV9kbF90YXNrcyhycSkpCi0JCQlwdXNoX2RsX3Rhc2socnEpOworCS8qCisJICogUXVldWVpbmcgdGhpcyB0YXNrIGJhY2sgbWlnaHQgaGF2ZSBvdmVybG9hZGVkIHJxLAorCSAqIGNoZWNrIGlmIHdlIG5lZWQgdG8ga2ljayBzb21lb25lIGF3YXkuCisJICovCisJaWYgKGhhc19wdXNoYWJsZV9kbF90YXNrcyhycSkpCisJCXB1c2hfZGxfdGFzayhycSk7CiAjZW5kaWYKLQl9CiB1bmxvY2s6CiAJcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7CiAKQEAgLTYxMywxMCArNjE0LDkgQEAKIAogCWRsX3NlLT5ydW50aW1lIC09IGRsX3NlLT5kbF95aWVsZGVkID8gMCA6IGRlbHRhX2V4ZWM7CiAJaWYgKGRsX3J1bnRpbWVfZXhjZWVkZWQocnEsIGRsX3NlKSkgeworCQlkbF9zZS0+ZGxfdGhyb3R0bGVkID0gMTsKIAkJX19kZXF1ZXVlX3Rhc2tfZGwocnEsIGN1cnIsIDApOwotCQlpZiAobGlrZWx5KHN0YXJ0X2RsX3RpbWVyKGRsX3NlLCBjdXJyLT5kbC5kbF9ib29zdGVkKSkpCi0JCQlkbF9zZS0+ZGxfdGhyb3R0bGVkID0gMTsKLQkJZWxzZQorCQlpZiAodW5saWtlbHkoIXN0YXJ0X2RsX3RpbWVyKGRsX3NlLCBjdXJyLT5kbC5kbF9ib29zdGVkKSkpCiAJCQllbnF1ZXVlX3Rhc2tfZGwocnEsIGN1cnIsIEVOUVVFVUVfUkVQTEVOSVNIKTsKIAogCQlpZiAoIWlzX2xlZnRtb3N0KGN1cnIsICZycS0+ZGwpKQpAQCAtODUzLDcgKzg1Myw3IEBACiAJICogaXRzIHJxLCB0aGUgYmFuZHdpZHRoIHRpbWVyIGNhbGxiYWNrICh3aGljaCBjbGVhcmx5IGhhcyBub3QKIAkgKiBydW4geWV0KSB3aWxsIHRha2UgY2FyZSBvZiB0aGlzLgogCSAqLwotCWlmIChwLT5kbC5kbF90aHJvdHRsZWQpCisJaWYgKHAtPmRsLmRsX3Rocm90dGxlZCAmJiAhKGZsYWdzICYgRU5RVUVVRV9SRVBMRU5JU0gpKQogCQlyZXR1cm47CiAKIAllbnF1ZXVlX2RsX2VudGl0eSgmcC0+ZGwsIHBpX3NlLCBmbGFncyk7CkBAIC0xMDczLDcgKzEwNzMsMTMgQEAKIHsKIAl1cGRhdGVfY3Vycl9kbChycSk7CiAKLQlpZiAoaHJ0aWNrX2VuYWJsZWQocnEpICYmIHF1ZXVlZCAmJiBwLT5kbC5ydW50aW1lID4gMCkKKwkvKgorCSAqIEV2ZW4gd2hlbiB3ZSBoYXZlIHJ1bnRpbWUsIHVwZGF0ZV9jdXJyX2RsKCkgbWlnaHQgaGF2ZSByZXN1bHRlZCBpbiB1cworCSAqIG5vdCBiZWluZyB0aGUgbGVmdG1vc3QgdGFzayBhbnltb3JlLiBJbiB0aGF0IGNhc2UgTkVFRF9SRVNDSEVEIHdpbGwKKwkgKiBiZSBzZXQgYW5kIHNjaGVkdWxlKCkgd2lsbCBzdGFydCBhIG5ldyBocnRpY2sgZm9yIHRoZSBuZXh0IHRhc2suCisJICovCisJaWYgKGhydGlja19lbmFibGVkKHJxKSAmJiBxdWV1ZWQgJiYgcC0+ZGwucnVudGltZSA+IDAgJiYKKwkgICAgaXNfbGVmdG1vc3QocCwgJnJxLT5kbCkpCiAJCXN0YXJ0X2hydGlja19kbChycSwgcCk7CiB9CiAKQEAgLTEwOTQsNiArMTEwMCw3IEBACiAJICogU2luY2Ugd2UgYXJlIFRBU0tfREVBRCB3ZSB3b24ndCBzbGlwIG91dCBvZiB0aGUgZG9tYWluIQogCSAqLwogCXJhd19zcGluX2xvY2tfaXJxKCZkbF9iLT5sb2NrKTsKKwkvKiBYWFggd2Ugc2hvdWxkIHJldGFpbiB0aGUgYncgdW50aWwgMC1sYWcgKi8KIAlkbF9iLT50b3RhbF9idyAtPSBwLT5kbC5kbF9idzsKIAlyYXdfc3Bpbl91bmxvY2tfaXJxKCZkbF9iLT5sb2NrKTsKIApAQCAtMTE2NSw5ICsxMTcyLDYgQEAKIAkgKiBXZSBoYXZlIHRvIGNvbnNpZGVyIHN5c3RlbSB0b3BvbG9neSBhbmQgdGFzayBhZmZpbml0eQogCSAqIGZpcnN0LCB0aGVuIHdlIGNhbiBsb29rIGZvciBhIHN1aXRhYmxlIGNwdS4KIAkgKi8KLQljcHVtYXNrX2NvcHkobGF0ZXJfbWFzaywgdGFza19ycSh0YXNrKS0+cmQtPnNwYW4pOwotCWNwdW1hc2tfYW5kKGxhdGVyX21hc2ssIGxhdGVyX21hc2ssIGNwdV9hY3RpdmVfbWFzayk7Ci0JY3B1bWFza19hbmQobGF0ZXJfbWFzaywgbGF0ZXJfbWFzaywgJnRhc2stPmNwdXNfYWxsb3dlZCk7CiAJYmVzdF9jcHUgPSBjcHVkbF9maW5kKCZ0YXNrX3JxKHRhc2spLT5yZC0+Y3B1ZGwsCiAJCQl0YXNrLCBsYXRlcl9tYXNrKTsKIAlpZiAoYmVzdF9jcHUgPT0gLTEpCkBAIC0xNTYyLDYgKzE1NjYsNyBAQAogCWlmIChycS0+ZGwub3ZlcmxvYWRlZCkKIAkJZGxfc2V0X292ZXJsb2FkKHJxKTsKIAorCWNwdWRsX3NldF9mcmVlY3B1KCZycS0+cmQtPmNwdWRsLCBycS0+Y3B1KTsKIAlpZiAocnEtPmRsLmRsX25yX3J1bm5pbmcgPiAwKQogCQljcHVkbF9zZXQoJnJxLT5yZC0+Y3B1ZGwsIHJxLT5jcHUsIHJxLT5kbC5lYXJsaWVzdF9kbC5jdXJyLCAxKTsKIH0KQEAgLTE1NzMsNiArMTU3OCw3IEBACiAJCWRsX2NsZWFyX292ZXJsb2FkKHJxKTsKIAogCWNwdWRsX3NldCgmcnEtPnJkLT5jcHVkbCwgcnEtPmNwdSwgMCwgMCk7CisJY3B1ZGxfY2xlYXJfZnJlZWNwdSgmcnEtPnJkLT5jcHVkbCwgcnEtPmNwdSk7CiB9CiAKIHZvaWQgaW5pdF9zY2hlZF9kbF9jbGFzcyh2b2lkKQpAQCAtMTYxNCw4ICsxNjIwLDggQEAKIAogc3RhdGljIHZvaWQgc3dpdGNoZWRfZnJvbV9kbChzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CisJLyogWFhYIHdlIHNob3VsZCByZXRhaW4gdGhlIGJ3IHVudGlsIDAtbGFnICovCiAJY2FuY2VsX2RsX3RpbWVyKHJxLCBwKTsKLQogCV9fZGxfY2xlYXJfcGFyYW1zKHApOwogCiAJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9kZWJ1Zy5jIGIva2VybmVsL3NjaGVkL2RlYnVnLmMKaW5kZXggOTJjYzUyMC4uOGJhYWY4NSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL2RlYnVnLmMKKysrIGIva2VybmVsL3NjaGVkL2RlYnVnLmMKQEAgLTMwNSw2ICszMDUsNyBAQAogCVBOKG5leHRfYmFsYW5jZSk7CiAJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsZFxuIiwgImN1cnItPnBpZCIsIChsb25nKSh0YXNrX3BpZF9ucihycS0+Y3VycikpKTsKIAlQTihjbG9jayk7CisJUE4oY2xvY2tfdGFzayk7CiAJUChjcHVfbG9hZFswXSk7CiAJUChjcHVfbG9hZFsxXSk7CiAJUChjcHVfbG9hZFsyXSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuYwppbmRleCA0MDY2N2NiLi43Y2UxOGYzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZmFpci5jCisrKyBiL2tlcm5lbC9zY2hlZC9mYWlyLmMKQEAgLTY3Niw3ICs2NzYsNiBAQAogewogCXUzMiBzbGljZTsKIAotCXAtPnNlLmF2Zy5kZWNheV9jb3VudCA9IDA7CiAJc2xpY2UgPSBzY2hlZF9zbGljZSh0YXNrX2Nmc19ycShwKSwgJnAtPnNlKSA+PiAxMDsKIAlwLT5zZS5hdmcucnVubmFibGVfYXZnX3N1bSA9IHNsaWNlOwogCXAtPnNlLmF2Zy5ydW5uYWJsZV9hdmdfcGVyaW9kID0gc2xpY2U7CkBAIC0xNzMwLDcgKzE3MjksNyBAQAogCW5vZGVzID0gbm9kZV9vbmxpbmVfbWFwOwogCWZvciAoZGlzdCA9IHNjaGVkX21heF9udW1hX2Rpc3RhbmNlOyBkaXN0ID4gTE9DQUxfRElTVEFOQ0U7IGRpc3QtLSkgewogCQl1bnNpZ25lZCBsb25nIG1heF9mYXVsdHMgPSAwOwotCQlub2RlbWFza190IG1heF9ncm91cDsKKwkJbm9kZW1hc2tfdCBtYXhfZ3JvdXAgPSBOT0RFX01BU0tfTk9ORTsKIAkJaW50IGEsIGI7CiAKIAkJLyogQXJlIHRoZXJlIG5vZGVzIGF0IHRoaXMgZGlzdGFuY2UgZnJvbSBlYWNoIG90aGVyPyAqLwpAQCAtMjU3NCwxMSArMjU3MywxMSBAQAogCXU2NCBkZWNheXMgPSBhdG9taWM2NF9yZWFkKCZjZnNfcnEtPmRlY2F5X2NvdW50ZXIpOwogCiAJZGVjYXlzIC09IHNlLT5hdmcuZGVjYXlfY291bnQ7CisJc2UtPmF2Zy5kZWNheV9jb3VudCA9IDA7CiAJaWYgKCFkZWNheXMpCiAJCXJldHVybiAwOwogCiAJc2UtPmF2Zy5sb2FkX2F2Z19jb250cmliID0gZGVjYXlfbG9hZChzZS0+YXZnLmxvYWRfYXZnX2NvbnRyaWIsIGRlY2F5cyk7Ci0Jc2UtPmF2Zy5kZWNheV9jb3VudCA9IDA7CiAKIAlyZXR1cm4gZGVjYXlzOwogfQpAQCAtNTE1Nyw3ICs1MTU2LDcgQEAKIAkJICogc28gd2UgZG9uJ3QgZG8gbWljcm9zY29waWMgdXBkYXRlIGluIHNjaGVkdWxlKCkKIAkJICogYW5kIGRvdWJsZSB0aGUgZmFzdHBhdGggY29zdC4KIAkJICovCi0JCSBycS0+c2tpcF9jbG9ja191cGRhdGUgPSAxOworCQlycV9jbG9ja19za2lwX3VwZGF0ZShycSwgdHJ1ZSk7CiAJfQogCiAJc2V0X3NraXBfYnVkZHkoc2UpOwpAQCAtNTk0OSw4ICs1OTQ4LDggQEAKIAkgKi8KIAlhZ2Vfc3RhbXAgPSBBQ0NFU1NfT05DRShycS0+YWdlX3N0YW1wKTsKIAlhdmcgPSBBQ0NFU1NfT05DRShycS0+cnRfYXZnKTsKKwlkZWx0YSA9IF9fcnFfY2xvY2tfYnJva2VuKHJxKSAtIGFnZV9zdGFtcDsKIAotCWRlbHRhID0gcnFfY2xvY2socnEpIC0gYWdlX3N0YW1wOwogCWlmICh1bmxpa2VseShkZWx0YSA8IDApKQogCQlkZWx0YSA9IDA7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9pZGxlLmMgYi9rZXJuZWwvc2NoZWQvaWRsZS5jCmluZGV4IGM0N2ZjZTcuLmFhZjFjMWQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZC9pZGxlLmMKKysrIGIva2VybmVsL3NjaGVkL2lkbGUuYwpAQCAtNDcsNyArNDcsOCBAQAogCXJjdV9pZGxlX2VudGVyKCk7CiAJdHJhY2VfY3B1X2lkbGVfcmN1aWRsZSgwLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKLQl3aGlsZSAoIXRpZl9uZWVkX3Jlc2NoZWQoKSkKKwl3aGlsZSAoIXRpZl9uZWVkX3Jlc2NoZWQoKSAmJgorCQkoY3B1X2lkbGVfZm9yY2VfcG9sbCB8fCB0aWNrX2NoZWNrX2Jyb2FkY2FzdF9leHBpcmVkKCkpKQogCQljcHVfcmVsYXgoKTsKIAl0cmFjZV9jcHVfaWRsZV9yY3VpZGxlKFBXUl9FVkVOVF9FWElULCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXJjdV9pZGxlX2V4aXQoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9ydC5jIGIva2VybmVsL3NjaGVkL3J0LmMKaW5kZXggZWUxNWY1YS4uZjRkNGIwNyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL3J0LmMKKysrIGIva2VybmVsL3NjaGVkL3J0LmMKQEAgLTgzMSwxMSArODMxLDE0IEBACiAJCQkJZW5xdWV1ZSA9IDE7CiAKIAkJCQkvKgotCQkJCSAqIEZvcmNlIGEgY2xvY2sgdXBkYXRlIGlmIHRoZSBDUFUgd2FzIGlkbGUsCi0JCQkJICogbGVzdCB3YWtldXAgLT4gdW50aHJvdHRsZSB0aW1lIGFjY3VtdWxhdGUuCisJCQkJICogV2hlbiB3ZSdyZSBpZGxlIGFuZCBhIHdva2VuIChydCkgdGFzayBpcworCQkJCSAqIHRocm90dGxlZCBjaGVja19wcmVlbXB0X2N1cnIoKSB3aWxsIHNldAorCQkJCSAqIHNraXBfdXBkYXRlIGFuZCB0aGUgdGltZSBiZXR3ZWVuIHRoZSB3YWtldXAKKwkJCQkgKiBhbmQgdGhpcyB1bnRocm90dGxlIHdpbGwgZ2V0IGFjY291bnRlZCBhcworCQkJCSAqICdydW50aW1lJy4KIAkJCQkgKi8KIAkJCQlpZiAocnRfcnEtPnJ0X25yX3J1bm5pbmcgJiYgcnEtPmN1cnIgPT0gcnEtPmlkbGUpCi0JCQkJCXJxLT5za2lwX2Nsb2NrX3VwZGF0ZSA9IC0xOworCQkJCQlycV9jbG9ja19za2lwX3VwZGF0ZShycSwgZmFsc2UpOwogCQkJfQogCQkJaWYgKHJ0X3JxLT5ydF90aW1lIHx8IHJ0X3JxLT5ydF9ucl9ydW5uaW5nKQogCQkJCWlkbGUgPSAwOwpAQCAtMTMzNyw3ICsxMzQwLDEyIEBACiAJICAgICBjdXJyLT5wcmlvIDw9IHAtPnByaW8pKSB7CiAJCWludCB0YXJnZXQgPSBmaW5kX2xvd2VzdF9ycShwKTsKIAotCQlpZiAodGFyZ2V0ICE9IC0xKQorCQkvKgorCQkgKiBEb24ndCBib3RoZXIgbW92aW5nIGl0IGlmIHRoZSBkZXN0aW5hdGlvbiBDUFUgaXMKKwkJICogbm90IHJ1bm5pbmcgYSBsb3dlciBwcmlvcml0eSB0YXNrLgorCQkgKi8KKwkJaWYgKHRhcmdldCAhPSAtMSAmJgorCQkgICAgcC0+cHJpbyA8IGNwdV9ycSh0YXJnZXQpLT5ydC5oaWdoZXN0X3ByaW8uY3VycikKIAkJCWNwdSA9IHRhcmdldDsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0xNjE0LDYgKzE2MjIsMTYgQEAKIAogCQlsb3dlc3RfcnEgPSBjcHVfcnEoY3B1KTsKIAorCQlpZiAobG93ZXN0X3JxLT5ydC5oaWdoZXN0X3ByaW8uY3VyciA8PSB0YXNrLT5wcmlvKSB7CisJCQkvKgorCQkJICogVGFyZ2V0IHJxIGhhcyB0YXNrcyBvZiBlcXVhbCBvciBoaWdoZXIgcHJpb3JpdHksCisJCQkgKiByZXRyeWluZyBkb2VzIG5vdCByZWxlYXNlIGFueSBsb2NrIGFuZCBpcyB1bmxpa2VseQorCQkJICogdG8geWllbGQgYSBkaWZmZXJlbnQgcmVzdWx0LgorCQkJICovCisJCQlsb3dlc3RfcnEgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwogCQkvKiBpZiB0aGUgcHJpbyBvZiB0aGlzIHJ1bnF1ZXVlIGNoYW5nZWQsIHRyeSBhZ2FpbiAqLwogCQlpZiAoZG91YmxlX2xvY2tfYmFsYW5jZShycSwgbG93ZXN0X3JxKSkgewogCQkJLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9zY2hlZC5oIGIva2VybmVsL3NjaGVkL3NjaGVkLmgKaW5kZXggOWEyYTQ1Yy4uMDg3MGRiMiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkL3NjaGVkLmgKKysrIGIva2VybmVsL3NjaGVkL3NjaGVkLmgKQEAgLTU1OCw4ICs1NTgsNiBAQAogI2lmZGVmIENPTkZJR19OT19IWl9GVUxMCiAJdW5zaWduZWQgbG9uZyBsYXN0X3NjaGVkX3RpY2s7CiAjZW5kaWYKLQlpbnQgc2tpcF9jbG9ja191cGRhdGU7Ci0KIAkvKiBjYXB0dXJlIGxvYWQgZnJvbSAqYWxsKiB0YXNrcyBvbiB0aGlzIGNwdTogKi8KIAlzdHJ1Y3QgbG9hZF93ZWlnaHQgbG9hZDsKIAl1bnNpZ25lZCBsb25nIG5yX2xvYWRfdXBkYXRlczsKQEAgLTU4OCw2ICs1ODYsNyBAQAogCXVuc2lnbmVkIGxvbmcgbmV4dF9iYWxhbmNlOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKnByZXZfbW07CiAKKwl1bnNpZ25lZCBpbnQgY2xvY2tfc2tpcF91cGRhdGU7CiAJdTY0IGNsb2NrOwogCXU2NCBjbG9ja190YXNrOwogCkBAIC02ODcsMTYgKzY4NiwzNSBAQAogI2RlZmluZSBjcHVfY3VycihjcHUpCQkoY3B1X3JxKGNwdSktPmN1cnIpCiAjZGVmaW5lIHJhd19ycSgpCQlyYXdfY3B1X3B0cigmcnVucXVldWVzKQogCitzdGF0aWMgaW5saW5lIHU2NCBfX3JxX2Nsb2NrX2Jyb2tlbihzdHJ1Y3QgcnEgKnJxKQoreworCXJldHVybiBBQ0NFU1NfT05DRShycS0+Y2xvY2spOworfQorCiBzdGF0aWMgaW5saW5lIHU2NCBycV9jbG9jayhzdHJ1Y3QgcnEgKnJxKQogeworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJxLT5sb2NrKTsKIAlyZXR1cm4gcnEtPmNsb2NrOwogfQogCiBzdGF0aWMgaW5saW5lIHU2NCBycV9jbG9ja190YXNrKHN0cnVjdCBycSAqcnEpCiB7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcnEtPmxvY2spOwogCXJldHVybiBycS0+Y2xvY2tfdGFzazsKIH0KIAorI2RlZmluZSBSUUNGX1JFUV9TS0lQCTB4MDEKKyNkZWZpbmUgUlFDRl9BQ1RfU0tJUAkweDAyCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBycV9jbG9ja19za2lwX3VwZGF0ZShzdHJ1Y3QgcnEgKnJxLCBib29sIHNraXApCit7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmcnEtPmxvY2spOworCWlmIChza2lwKQorCQlycS0+Y2xvY2tfc2tpcF91cGRhdGUgfD0gUlFDRl9SRVFfU0tJUDsKKwllbHNlCisJCXJxLT5jbG9ja19za2lwX3VwZGF0ZSAmPSB+UlFDRl9SRVFfU0tJUDsKK30KKwogI2lmZGVmIENPTkZJR19OVU1BCiBlbnVtIG51bWFfdG9wb2xvZ3lfdHlwZSB7CiAJTlVNQV9ESVJFQ1QsCmRpZmYgLS1naXQgYS9rZXJuZWwvc21wYm9vdC5jIGIva2VybmVsL3NtcGJvb3QuYwppbmRleCBmMDMyZmI1Li40MDE5MGYyIDEwMDY0NAotLS0gYS9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2tlcm5lbC9zbXBib290LmMKQEAgLTI4MCw2ICsyODAsNyBAQAogCXVuc2lnbmVkIGludCBjcHU7CiAJaW50IHJldCA9IDA7CiAKKwlnZXRfb25saW5lX2NwdXMoKTsKIAltdXRleF9sb2NrKCZzbXBib290X3RocmVhZHNfbG9jayk7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJcmV0ID0gX19zbXBib290X2NyZWF0ZV90aHJlYWQocGx1Z190aHJlYWQsIGNwdSk7CkBAIC0yOTIsNiArMjkzLDcgQEAKIAlsaXN0X2FkZCgmcGx1Z190aHJlYWQtPmxpc3QsICZob3RwbHVnX3RocmVhZHMpOwogb3V0OgogCW11dGV4X3VubG9jaygmc21wYm9vdF90aHJlYWRzX2xvY2spOworCXB1dF9vbmxpbmVfY3B1cygpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbXBib290X3JlZ2lzdGVyX3BlcmNwdV90aHJlYWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRpcnEuYyBiL2tlcm5lbC9zb2Z0aXJxLmMKaW5kZXggNTAxYmFhOS4uNDc5ZTQ0MyAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRpcnEuYworKysgYi9rZXJuZWwvc29mdGlycS5jCkBAIC0xMTQsOCArMTE0LDEyIEBACiAJCXRyYWNlX3NvZnRpcnFzX29mZihpcCk7CiAJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAotCWlmIChwcmVlbXB0X2NvdW50KCkgPT0gY250KQorCWlmIChwcmVlbXB0X2NvdW50KCkgPT0gY250KSB7CisjaWZkZWYgQ09ORklHX0RFQlVHX1BSRUVNUFQKKwkJY3VycmVudC0+cHJlZW1wdF9kaXNhYmxlX2lwID0gZ2V0X3BhcmVudF9pcChDQUxMRVJfQUREUjEpOworI2VuZGlmCiAJCXRyYWNlX3ByZWVtcHRfb2ZmKENBTExFUl9BRERSMCwgZ2V0X3BhcmVudF9pcChDQUxMRVJfQUREUjEpKTsKKwl9CiB9CiBFWFBPUlRfU1lNQk9MKF9fbG9jYWxfYmhfZGlzYWJsZV9pcCk7CiAjZW5kaWYgLyogQ09ORklHX1RSQUNFX0lSUUZMQUdTICovCkBAIC02NTYsOSArNjYwLDggQEAKIAkJICogaW4gdGhlIHRhc2sgc3RhY2sgaGVyZS4KIAkJICovCiAJCV9fZG9fc29mdGlycSgpOwotCQlyY3Vfbm90ZV9jb250ZXh0X3N3aXRjaCgpOwogCQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JCWNvbmRfcmVzY2hlZCgpOworCQljb25kX3Jlc2NoZWRfcmN1X3FzKCk7CiAJCXJldHVybjsKIAl9CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDEzN2M3ZjYuLjg4ZWEyZDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTEyNDgsNyArMTI0OCw2IEBACiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gaHVnZXRsYl9zeXNjdGxfaGFuZGxlciwKLQkJLmV4dHJhMQkJPSAmemVybywKIAl9LAogI2lmZGVmIENPTkZJR19OVU1BCiAJewpAQCAtMTI1Nyw3ICsxMjU2LDYgQEAKIAkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAogCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyICAgPSAmaHVnZXRsYl9tZW1wb2xpY3lfc3lzY3RsX2hhbmRsZXIsCi0JCS5leHRyYTEJCT0gJnplcm8sCiAJfSwKICNlbmRpZgogCSB7CkBAIC0xMjgwLDcgKzEyNzgsNiBAQAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IGh1Z2V0bGJfb3ZlcmNvbW1pdF9oYW5kbGVyLAotCQkuZXh0cmExCQk9ICZ6ZXJvLAogCX0sCiAjZW5kaWYKIAl7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGFza3N0YXRzLmMgYi9rZXJuZWwvdGFza3N0YXRzLmMKaW5kZXggNjcwZmZmOC4uMjFmODJjMiAxMDA2NDQKLS0tIGEva2VybmVsL3Rhc2tzdGF0cy5jCisrKyBiL2tlcm5lbC90YXNrc3RhdHMuYwpAQCAtMTExLDEzICsxMTEsOCBAQAogewogCXN0cnVjdCBnZW5sbXNnaGRyICpnZW5saGRyID0gbmxtc2dfZGF0YShubG1zZ19oZHIoc2tiKSk7CiAJdm9pZCAqcmVwbHkgPSBnZW5sbXNnX2RhdGEoZ2VubGhkcik7Ci0JaW50IHJjOwogCi0JcmMgPSBnZW5sbXNnX2VuZChza2IsIHJlcGx5KTsKLQlpZiAocmMgPCAwKSB7Ci0JCW5sbXNnX2ZyZWUoc2tiKTsKLQkJcmV0dXJuIHJjOwotCX0KKwlnZW5sbXNnX2VuZChza2IsIHJlcGx5KTsKIAogCXJldHVybiBnZW5sbXNnX3JlcGx5KHNrYiwgaW5mbyk7CiB9CkBAIC0xMzQsMTEgKzEyOSw3IEBACiAJdm9pZCAqcmVwbHkgPSBnZW5sbXNnX2RhdGEoZ2VubGhkcik7CiAJaW50IHJjLCBkZWxjb3VudCA9IDA7CiAKLQlyYyA9IGdlbmxtc2dfZW5kKHNrYiwgcmVwbHkpOwotCWlmIChyYyA8IDApIHsKLQkJbmxtc2dfZnJlZShza2IpOwotCQlyZXR1cm47Ci0JfQorCWdlbmxtc2dfZW5kKHNrYiwgcmVwbHkpOwogCiAJcmMgPSAwOwogCWRvd25fcmVhZCgmbGlzdGVuZXJzLT5zZW0pOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvTWFrZWZpbGUgYi9rZXJuZWwvdGltZS9NYWtlZmlsZQppbmRleCBmNjIyY2YyLi5jMDljMDc4IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9NYWtlZmlsZQorKysgYi9rZXJuZWwvdGltZS9NYWtlZmlsZQpAQCAtMSw2ICsxLDYgQEAKIG9iai15ICs9IHRpbWUubyB0aW1lci5vIGhydGltZXIubyBpdGltZXIubyBwb3NpeC10aW1lcnMubyBwb3NpeC1jcHUtdGltZXJzLm8KIG9iai15ICs9IHRpbWVrZWVwaW5nLm8gbnRwLm8gY2xvY2tzb3VyY2UubyBqaWZmaWVzLm8gdGltZXJfbGlzdC5vCi1vYmoteSArPSB0aW1lY29udi5vIHBvc2l4LWNsb2NrLm8gYWxhcm10aW1lci5vCitvYmoteSArPSB0aW1lY29udi5vIHRpbWVjb3VudGVyLm8gcG9zaXgtY2xvY2subyBhbGFybXRpbWVyLm8KIAogb2JqLSQoQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQpCQkrPSBjbG9ja2V2ZW50cy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUykJCSs9IHRpY2stY29tbW9uLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCmluZGV4IGI3OWYzOWIuLjQ4OTIzNTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKKysrIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwpAQCAtMzQsODIgKzM0LDYgQEAKICNpbmNsdWRlICJ0aWNrLWludGVybmFsLmgiCiAjaW5jbHVkZSAidGltZWtlZXBpbmdfaW50ZXJuYWwuaCIKIAotdm9pZCB0aW1lY291bnRlcl9pbml0KHN0cnVjdCB0aW1lY291bnRlciAqdGMsCi0JCSAgICAgIGNvbnN0IHN0cnVjdCBjeWNsZWNvdW50ZXIgKmNjLAotCQkgICAgICB1NjQgc3RhcnRfdHN0YW1wKQotewotCXRjLT5jYyA9IGNjOwotCXRjLT5jeWNsZV9sYXN0ID0gY2MtPnJlYWQoY2MpOwotCXRjLT5uc2VjID0gc3RhcnRfdHN0YW1wOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodGltZWNvdW50ZXJfaW5pdCk7Ci0KLS8qKgotICogdGltZWNvdW50ZXJfcmVhZF9kZWx0YSAtIGdldCBuYW5vc2Vjb25kcyBzaW5jZSBsYXN0IGNhbGwgb2YgdGhpcyBmdW5jdGlvbgotICogQHRjOiAgICAgICAgIFBvaW50ZXIgdG8gdGltZSBjb3VudGVyCi0gKgotICogV2hlbiB0aGUgdW5kZXJseWluZyBjeWNsZSBjb3VudGVyIHJ1bnMgb3ZlciwgdGhpcyB3aWxsIGJlIGhhbmRsZWQKLSAqIGNvcnJlY3RseSBhcyBsb25nIGFzIGl0IGRvZXMgbm90IHJ1biBvdmVyIG1vcmUgdGhhbiBvbmNlIGJldHdlZW4KLSAqIGNhbGxzLgotICoKLSAqIFRoZSBmaXJzdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gZm9yIGEgbmV3IHRpbWUgY291bnRlciBpbml0aWFsaXplcwotICogdGhlIHRpbWUgdHJhY2tpbmcgYW5kIHJldHVybnMgYW4gdW5kZWZpbmVkIHJlc3VsdC4KLSAqLwotc3RhdGljIHU2NCB0aW1lY291bnRlcl9yZWFkX2RlbHRhKHN0cnVjdCB0aW1lY291bnRlciAqdGMpCi17Ci0JY3ljbGVfdCBjeWNsZV9ub3csIGN5Y2xlX2RlbHRhOwotCXU2NCBuc19vZmZzZXQ7Ci0KLQkvKiByZWFkIGN5Y2xlIGNvdW50ZXI6ICovCi0JY3ljbGVfbm93ID0gdGMtPmNjLT5yZWFkKHRjLT5jYyk7Ci0KLQkvKiBjYWxjdWxhdGUgdGhlIGRlbHRhIHNpbmNlIHRoZSBsYXN0IHRpbWVjb3VudGVyX3JlYWRfZGVsdGEoKTogKi8KLQljeWNsZV9kZWx0YSA9IChjeWNsZV9ub3cgLSB0Yy0+Y3ljbGVfbGFzdCkgJiB0Yy0+Y2MtPm1hc2s7Ci0KLQkvKiBjb252ZXJ0IHRvIG5hbm9zZWNvbmRzOiAqLwotCW5zX29mZnNldCA9IGN5Y2xlY291bnRlcl9jeWMybnModGMtPmNjLCBjeWNsZV9kZWx0YSk7Ci0KLQkvKiB1cGRhdGUgdGltZSBzdGFtcCBvZiB0aW1lY291bnRlcl9yZWFkX2RlbHRhKCkgY2FsbDogKi8KLQl0Yy0+Y3ljbGVfbGFzdCA9IGN5Y2xlX25vdzsKLQotCXJldHVybiBuc19vZmZzZXQ7Ci19Ci0KLXU2NCB0aW1lY291bnRlcl9yZWFkKHN0cnVjdCB0aW1lY291bnRlciAqdGMpCi17Ci0JdTY0IG5zZWM7Ci0KLQkvKiBpbmNyZW1lbnQgdGltZSBieSBuYW5vc2Vjb25kcyBzaW5jZSBsYXN0IGNhbGwgKi8KLQluc2VjID0gdGltZWNvdW50ZXJfcmVhZF9kZWx0YSh0Yyk7Ci0JbnNlYyArPSB0Yy0+bnNlYzsKLQl0Yy0+bnNlYyA9IG5zZWM7Ci0KLQlyZXR1cm4gbnNlYzsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHRpbWVjb3VudGVyX3JlYWQpOwotCi11NjQgdGltZWNvdW50ZXJfY3ljMnRpbWUoc3RydWN0IHRpbWVjb3VudGVyICp0YywKLQkJCSBjeWNsZV90IGN5Y2xlX3RzdGFtcCkKLXsKLQl1NjQgY3ljbGVfZGVsdGEgPSAoY3ljbGVfdHN0YW1wIC0gdGMtPmN5Y2xlX2xhc3QpICYgdGMtPmNjLT5tYXNrOwotCXU2NCBuc2VjOwotCi0JLyoKLQkgKiBJbnN0ZWFkIG9mIGFsd2F5cyB0cmVhdGluZyBjeWNsZV90c3RhbXAgYXMgbW9yZSByZWNlbnQKLQkgKiB0aGFuIHRjLT5jeWNsZV9sYXN0LCBkZXRlY3Qgd2hlbiBpdCBpcyB0b28gZmFyIGluIHRoZQotCSAqIGZ1dHVyZSBhbmQgdHJlYXQgaXQgYXMgb2xkIHRpbWUgc3RhbXAgaW5zdGVhZC4KLQkgKi8KLQlpZiAoY3ljbGVfZGVsdGEgPiB0Yy0+Y2MtPm1hc2sgLyAyKSB7Ci0JCWN5Y2xlX2RlbHRhID0gKHRjLT5jeWNsZV9sYXN0IC0gY3ljbGVfdHN0YW1wKSAmIHRjLT5jYy0+bWFzazsKLQkJbnNlYyA9IHRjLT5uc2VjIC0gY3ljbGVjb3VudGVyX2N5YzJucyh0Yy0+Y2MsIGN5Y2xlX2RlbHRhKTsKLQl9IGVsc2UgewotCQluc2VjID0gY3ljbGVjb3VudGVyX2N5YzJucyh0Yy0+Y2MsIGN5Y2xlX2RlbHRhKSArIHRjLT5uc2VjOwotCX0KLQotCXJldHVybiBuc2VjOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodGltZWNvdW50ZXJfY3ljMnRpbWUpOwotCiAvKioKICAqIGNsb2Nrc19jYWxjX211bHRfc2hpZnQgLSBjYWxjdWxhdGUgbXVsdC9zaGlmdCBmYWN0b3JzIGZvciBzY2FsZWQgbWF0aCBvZiBjbG9ja3MKICAqIEBtdWx0Oglwb2ludGVyIHRvIG11bHQgdmFyaWFibGUKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL2hydGltZXIuYyBiL2tlcm5lbC90aW1lL2hydGltZXIuYwppbmRleCAzN2U1MGFhLi4zZjVlMTgzIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9ocnRpbWVyLmMKKysrIGIva2VybmVsL3RpbWUvaHJ0aW1lci5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAltb25vID0ga3RpbWVfZ2V0X3VwZGF0ZV9vZmZzZXRzX3RpY2soJm9mZl9yZWFsLCAmb2ZmX2Jvb3QsICZvZmZfdGFpKTsKIAlib290ID0ga3RpbWVfYWRkKG1vbm8sIG9mZl9ib290KTsKIAl4dGltID0ga3RpbWVfYWRkKG1vbm8sIG9mZl9yZWFsKTsKLQl0YWkgPSBrdGltZV9hZGQoeHRpbSwgb2ZmX3RhaSk7CisJdGFpID0ga3RpbWVfYWRkKG1vbm8sIG9mZl90YWkpOwogCiAJYmFzZS0+Y2xvY2tfYmFzZVtIUlRJTUVSX0JBU0VfUkVBTFRJTUVdLnNvZnRpcnFfdGltZSA9IHh0aW07CiAJYmFzZS0+Y2xvY2tfYmFzZVtIUlRJTUVSX0JBU0VfTU9OT1RPTklDXS5zb2Z0aXJxX3RpbWUgPSBtb25vOwpAQCAtMjY2LDcgKzI2Niw3IEBACiAvKgogICogRGl2aWRlIGEga3RpbWUgdmFsdWUgYnkgYSBuYW5vc2Vjb25kIHZhbHVlCiAgKi8KLXU2NCBrdGltZV9kaXZucyhjb25zdCBrdGltZV90IGt0LCBzNjQgZGl2KQordTY0IF9fa3RpbWVfZGl2bnMoY29uc3Qga3RpbWVfdCBrdCwgczY0IGRpdikKIHsKIAl1NjQgZGNsYzsKIAlpbnQgc2Z0ID0gMDsKQEAgLTI4Miw3ICsyODIsNyBAQAogCiAJcmV0dXJuIGRjbGM7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrdGltZV9kaXZucyk7CitFWFBPUlRfU1lNQk9MX0dQTChfX2t0aW1lX2Rpdm5zKTsKICNlbmRpZiAvKiBCSVRTX1BFUl9MT05HID49IDY0ICovCiAKIC8qCkBAIC00NDAsNiArNDQwLDM3IEBACiAJdHJhY2VfaHJ0aW1lcl9jYW5jZWwodGltZXIpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfTk9fSFpfQ09NTU9OKSB8fCBkZWZpbmVkKENPTkZJR19ISUdIX1JFU19USU1FUlMpCitzdGF0aWMga3RpbWVfdCBfX2hydGltZXJfZ2V0X25leHRfZXZlbnQoc3RydWN0IGhydGltZXJfY3B1X2Jhc2UgKmNwdV9iYXNlKQoreworCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UgPSBjcHVfYmFzZS0+Y2xvY2tfYmFzZTsKKwlrdGltZV90IGV4cGlyZXMsIGV4cGlyZXNfbmV4dCA9IHsgLnR2NjQgPSBLVElNRV9NQVggfTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBIUlRJTUVSX01BWF9DTE9DS19CQVNFUzsgaSsrLCBiYXNlKyspIHsKKwkJc3RydWN0IHRpbWVycXVldWVfbm9kZSAqbmV4dDsKKwkJc3RydWN0IGhydGltZXIgKnRpbWVyOworCisJCW5leHQgPSB0aW1lcnF1ZXVlX2dldG5leHQoJmJhc2UtPmFjdGl2ZSk7CisJCWlmICghbmV4dCkKKwkJCWNvbnRpbnVlOworCisJCXRpbWVyID0gY29udGFpbmVyX29mKG5leHQsIHN0cnVjdCBocnRpbWVyLCBub2RlKTsKKwkJZXhwaXJlcyA9IGt0aW1lX3N1YihocnRpbWVyX2dldF9leHBpcmVzKHRpbWVyKSwgYmFzZS0+b2Zmc2V0KTsKKwkJaWYgKGV4cGlyZXMudHY2NCA8IGV4cGlyZXNfbmV4dC50djY0KQorCQkJZXhwaXJlc19uZXh0ID0gZXhwaXJlczsKKwl9CisJLyoKKwkgKiBjbG9ja193YXNfc2V0KCkgbWlnaHQgaGF2ZSBjaGFuZ2VkIGJhc2UtPm9mZnNldCBvZiBhbnkgb2YKKwkgKiB0aGUgY2xvY2sgYmFzZXMgc28gdGhlIHJlc3VsdCBtaWdodCBiZSBuZWdhdGl2ZS4gRml4IGl0IHVwCisJICogdG8gcHJldmVudCBhIGZhbHNlIHBvc2l0aXZlIGluIGNsb2NrZXZlbnRzX3Byb2dyYW1fZXZlbnQoKS4KKwkgKi8KKwlpZiAoZXhwaXJlc19uZXh0LnR2NjQgPCAwKQorCQlleHBpcmVzX25leHQudHY2NCA9IDA7CisJcmV0dXJuIGV4cGlyZXNfbmV4dDsKK30KKyNlbmRpZgorCiAvKiBIaWdoIHJlc29sdXRpb24gdGltZXIgcmVsYXRlZCBmdW5jdGlvbnMgKi8KICNpZmRlZiBDT05GSUdfSElHSF9SRVNfVElNRVJTCiAKQEAgLTQ4OCwzMiArNTE5LDcgQEAKIHN0YXRpYyB2b2lkCiBocnRpbWVyX2ZvcmNlX3JlcHJvZ3JhbShzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqY3B1X2Jhc2UsIGludCBza2lwX2VxdWFsKQogewotCWludCBpOwotCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UgPSBjcHVfYmFzZS0+Y2xvY2tfYmFzZTsKLQlrdGltZV90IGV4cGlyZXMsIGV4cGlyZXNfbmV4dDsKLQotCWV4cGlyZXNfbmV4dC50djY0ID0gS1RJTUVfTUFYOwotCi0JZm9yIChpID0gMDsgaSA8IEhSVElNRVJfTUFYX0NMT0NLX0JBU0VTOyBpKyssIGJhc2UrKykgewotCQlzdHJ1Y3QgaHJ0aW1lciAqdGltZXI7Ci0JCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5leHQ7Ci0KLQkJbmV4dCA9IHRpbWVycXVldWVfZ2V0bmV4dCgmYmFzZS0+YWN0aXZlKTsKLQkJaWYgKCFuZXh0KQotCQkJY29udGludWU7Ci0JCXRpbWVyID0gY29udGFpbmVyX29mKG5leHQsIHN0cnVjdCBocnRpbWVyLCBub2RlKTsKLQotCQlleHBpcmVzID0ga3RpbWVfc3ViKGhydGltZXJfZ2V0X2V4cGlyZXModGltZXIpLCBiYXNlLT5vZmZzZXQpOwotCQkvKgotCQkgKiBjbG9ja193YXNfc2V0KCkgaGFzIGNoYW5nZWQgYmFzZS0+b2Zmc2V0IHNvIHRoZQotCQkgKiByZXN1bHQgbWlnaHQgYmUgbmVnYXRpdmUuIEZpeCBpdCB1cCB0byBwcmV2ZW50IGEKLQkJICogZmFsc2UgcG9zaXRpdmUgaW4gY2xvY2tldmVudHNfcHJvZ3JhbV9ldmVudCgpCi0JCSAqLwotCQlpZiAoZXhwaXJlcy50djY0IDwgMCkKLQkJCWV4cGlyZXMudHY2NCA9IDA7Ci0JCWlmIChleHBpcmVzLnR2NjQgPCBleHBpcmVzX25leHQudHY2NCkKLQkJCWV4cGlyZXNfbmV4dCA9IGV4cGlyZXM7Ci0JfQorCWt0aW1lX3QgZXhwaXJlc19uZXh0ID0gX19ocnRpbWVyX2dldF9uZXh0X2V2ZW50KGNwdV9iYXNlKTsKIAogCWlmIChza2lwX2VxdWFsICYmIGV4cGlyZXNfbmV4dC50djY0ID09IGNwdV9iYXNlLT5leHBpcmVzX25leHQudHY2NCkKIAkJcmV0dXJuOwpAQCAtNTg3LDYgKzU5MywxNSBAQAogCQlyZXR1cm4gMDsKIAogCS8qCisJICogV2hlbiB0aGUgdGFyZ2V0IGNwdSBvZiB0aGUgdGltZXIgaXMgY3VycmVudGx5IGV4ZWN1dGluZworCSAqIGhydGltZXJfaW50ZXJydXB0KCksIHRoZW4gd2UgZG8gbm90IHRvdWNoIHRoZSBjbG9jayBldmVudAorCSAqIGRldmljZS4gaHJ0aW1lcl9pbnRlcnJ1cHQoKSB3aWxsIHJlZXZhbHVhdGUgYWxsIGNsb2NrIGJhc2VzCisJICogYmVmb3JlIHJlcHJvZ3JhbW1pbmcgdGhlIGRldmljZS4KKwkgKi8KKwlpZiAoY3B1X2Jhc2UtPmluX2hydGlycSkKKwkJcmV0dXJuIDA7CisKKwkvKgogCSAqIElmIGEgaGFuZyB3YXMgZGV0ZWN0ZWQgaW4gdGhlIGxhc3QgdGltZXIgaW50ZXJydXB0IHRoZW4gd2UKIAkgKiBkbyBub3Qgc2NoZWR1bGUgYSB0aW1lciB3aGljaCBpcyBlYXJsaWVyIHRoYW4gdGhlIGV4cGlyeQogCSAqIHdoaWNoIHdlIGVuZm9yY2VkIGluIHRoZSBoYW5nIGRldGVjdGlvbi4gV2Ugd2FudCB0aGUgc3lzdGVtCkBAIC0xMTA0LDI5ICsxMTE5LDE0IEBACiBrdGltZV90IGhydGltZXJfZ2V0X25leHRfZXZlbnQodm9pZCkKIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9jcHVfYmFzZSAqY3B1X2Jhc2UgPSB0aGlzX2NwdV9wdHIoJmhydGltZXJfYmFzZXMpOwotCXN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UgPSBjcHVfYmFzZS0+Y2xvY2tfYmFzZTsKLQlrdGltZV90IGRlbHRhLCBtaW5kZWx0YSA9IHsgLnR2NjQgPSBLVElNRV9NQVggfTsKKwlrdGltZV90IG1pbmRlbHRhID0geyAudHY2NCA9IEtUSU1FX01BWCB9OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmNwdV9iYXNlLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIWhydGltZXJfaHJlc19hY3RpdmUoKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgSFJUSU1FUl9NQVhfQ0xPQ0tfQkFTRVM7IGkrKywgYmFzZSsrKSB7Ci0JCQlzdHJ1Y3QgaHJ0aW1lciAqdGltZXI7Ci0JCQlzdHJ1Y3QgdGltZXJxdWV1ZV9ub2RlICpuZXh0OwotCi0JCQluZXh0ID0gdGltZXJxdWV1ZV9nZXRuZXh0KCZiYXNlLT5hY3RpdmUpOwotCQkJaWYgKCFuZXh0KQotCQkJCWNvbnRpbnVlOwotCi0JCQl0aW1lciA9IGNvbnRhaW5lcl9vZihuZXh0LCBzdHJ1Y3QgaHJ0aW1lciwgbm9kZSk7Ci0JCQlkZWx0YS50djY0ID0gaHJ0aW1lcl9nZXRfZXhwaXJlc190djY0KHRpbWVyKTsKLQkJCWRlbHRhID0ga3RpbWVfc3ViKGRlbHRhLCBiYXNlLT5nZXRfdGltZSgpKTsKLQkJCWlmIChkZWx0YS50djY0IDwgbWluZGVsdGEudHY2NCkKLQkJCQltaW5kZWx0YS50djY0ID0gZGVsdGEudHY2NDsKLQkJfQotCX0KKwlpZiAoIWhydGltZXJfaHJlc19hY3RpdmUoKSkKKwkJbWluZGVsdGEgPSBrdGltZV9zdWIoX19ocnRpbWVyX2dldF9uZXh0X2V2ZW50KGNwdV9iYXNlKSwKKwkJCQkgICAgIGt0aW1lX2dldCgpKTsKIAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVfYmFzZS0+bG9jaywgZmxhZ3MpOwogCkBAIC0xMjUzLDcgKzEyNTMsNyBAQAogCXJhd19zcGluX2xvY2soJmNwdV9iYXNlLT5sb2NrKTsKIAllbnRyeV90aW1lID0gbm93ID0gaHJ0aW1lcl91cGRhdGVfYmFzZShjcHVfYmFzZSk7CiByZXRyeToKLQlleHBpcmVzX25leHQudHY2NCA9IEtUSU1FX01BWDsKKwljcHVfYmFzZS0+aW5faHJ0aXJxID0gMTsKIAkvKgogCSAqIFdlIHNldCBleHBpcmVzX25leHQgdG8gS1RJTUVfTUFYIGhlcmUgd2l0aCBjcHVfYmFzZS0+bG9jawogCSAqIGhlbGQgdG8gcHJldmVudCB0aGF0IGEgdGltZXIgaXMgZW5xdWV1ZWQgaW4gb3VyIHF1ZXVlIHZpYQpAQCAtMTI5MSwyOCArMTI5MSwyMCBAQAogCQkJICogYXJlIHJpZ2h0LW9mIGEgbm90IHlldCBleHBpcmVkIHRpbWVyLCBiZWNhdXNlIHRoYXQKIAkJCSAqIHRpbWVyIHdpbGwgaGF2ZSB0byB0cmlnZ2VyIGEgd2FrZXVwIGFueXdheS4KIAkJCSAqLwotCi0JCQlpZiAoYmFzZW5vdy50djY0IDwgaHJ0aW1lcl9nZXRfc29mdGV4cGlyZXNfdHY2NCh0aW1lcikpIHsKLQkJCQlrdGltZV90IGV4cGlyZXM7Ci0KLQkJCQlleHBpcmVzID0ga3RpbWVfc3ViKGhydGltZXJfZ2V0X2V4cGlyZXModGltZXIpLAotCQkJCQkJICAgIGJhc2UtPm9mZnNldCk7Ci0JCQkJaWYgKGV4cGlyZXMudHY2NCA8IDApCi0JCQkJCWV4cGlyZXMudHY2NCA9IEtUSU1FX01BWDsKLQkJCQlpZiAoZXhwaXJlcy50djY0IDwgZXhwaXJlc19uZXh0LnR2NjQpCi0JCQkJCWV4cGlyZXNfbmV4dCA9IGV4cGlyZXM7CisJCQlpZiAoYmFzZW5vdy50djY0IDwgaHJ0aW1lcl9nZXRfc29mdGV4cGlyZXNfdHY2NCh0aW1lcikpCiAJCQkJYnJlYWs7Ci0JCQl9CiAKIAkJCV9fcnVuX2hydGltZXIodGltZXIsICZiYXNlbm93KTsKIAkJfQogCX0KLQorCS8qIFJlZXZhbHVhdGUgdGhlIGNsb2NrIGJhc2VzIGZvciB0aGUgbmV4dCBleHBpcnkgKi8KKwlleHBpcmVzX25leHQgPSBfX2hydGltZXJfZ2V0X25leHRfZXZlbnQoY3B1X2Jhc2UpOwogCS8qCiAJICogU3RvcmUgdGhlIG5ldyBleHBpcnkgdmFsdWUgc28gdGhlIG1pZ3JhdGlvbiBjb2RlIGNhbiB2ZXJpZnkKIAkgKiBhZ2FpbnN0IGl0LgogCSAqLwogCWNwdV9iYXNlLT5leHBpcmVzX25leHQgPSBleHBpcmVzX25leHQ7CisJY3B1X2Jhc2UtPmluX2hydGlycSA9IDA7CiAJcmF3X3NwaW5fdW5sb2NrKCZjcHVfYmFzZS0+bG9jayk7CiAKIAkvKiBSZXByb2dyYW1taW5nIG5lY2Vzc2FyeSA/ICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9udHAuYyBiL2tlcm5lbC90aW1lL250cC5jCmluZGV4IDI4YmY5MWMuLjRiNTg1ZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL250cC5jCisrKyBiL2tlcm5lbC90aW1lL250cC5jCkBAIC00ODgsMTMgKzQ4OCwxMyBAQAogCiAJZ2V0bnN0aW1lb2ZkYXk2NCgmbm93KTsKIAlpZiAoYWJzKG5vdy50dl9uc2VjIC0gKE5TRUNfUEVSX1NFQyAvIDIpKSA8PSB0aWNrX25zZWMgKiA1KSB7Ci0JCXN0cnVjdCB0aW1lc3BlYyBhZGp1c3QgPSB0aW1lc3BlYzY0X3RvX3RpbWVzcGVjKG5vdyk7CisJCXN0cnVjdCB0aW1lc3BlYzY0IGFkanVzdCA9IG5vdzsKIAogCQlmYWlsID0gLUVOT0RFVjsKIAkJaWYgKHBlcnNpc3RlbnRfY2xvY2tfaXNfbG9jYWwpCiAJCQlhZGp1c3QudHZfc2VjIC09IChzeXNfdHoudHpfbWludXRlc3dlc3QgKiA2MCk7CiAjaWZkZWYgQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEUKLQkJZmFpbCA9IHVwZGF0ZV9wZXJzaXN0ZW50X2Nsb2NrKGFkanVzdCk7CisJCWZhaWwgPSB1cGRhdGVfcGVyc2lzdGVudF9jbG9jayh0aW1lc3BlYzY0X3RvX3RpbWVzcGVjKGFkanVzdCkpOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1JUQ19TWVNUT0hDCiAJCWlmIChmYWlsID09IC1FTk9ERVYpCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lY291bnRlci5jIGIva2VybmVsL3RpbWUvdGltZWNvdW50ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njg3YjMxCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RpbWUvdGltZWNvdW50ZXIuYwpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIGxpbnV4L2tlcm5lbC90aW1lL3RpbWVjb3VudGVyLmMKKyAqCisgKiBiYXNlZCBvbiBjb2RlIHRoYXQgbWlncmF0ZWQgYXdheSBmcm9tCisgKiBsaW51eC9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lY291bnRlci5oPgorCit2b2lkIHRpbWVjb3VudGVyX2luaXQoc3RydWN0IHRpbWVjb3VudGVyICp0YywKKwkJICAgICAgY29uc3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2MsCisJCSAgICAgIHU2NCBzdGFydF90c3RhbXApCit7CisJdGMtPmNjID0gY2M7CisJdGMtPmN5Y2xlX2xhc3QgPSBjYy0+cmVhZChjYyk7CisJdGMtPm5zZWMgPSBzdGFydF90c3RhbXA7CisJdGMtPm1hc2sgPSAoMVVMTCA8PCBjYy0+c2hpZnQpIC0gMTsKKwl0Yy0+ZnJhYyA9IDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0aW1lY291bnRlcl9pbml0KTsKKworLyoqCisgKiB0aW1lY291bnRlcl9yZWFkX2RlbHRhIC0gZ2V0IG5hbm9zZWNvbmRzIHNpbmNlIGxhc3QgY2FsbCBvZiB0aGlzIGZ1bmN0aW9uCisgKiBAdGM6ICAgICAgICAgUG9pbnRlciB0byB0aW1lIGNvdW50ZXIKKyAqCisgKiBXaGVuIHRoZSB1bmRlcmx5aW5nIGN5Y2xlIGNvdW50ZXIgcnVucyBvdmVyLCB0aGlzIHdpbGwgYmUgaGFuZGxlZAorICogY29ycmVjdGx5IGFzIGxvbmcgYXMgaXQgZG9lcyBub3QgcnVuIG92ZXIgbW9yZSB0aGFuIG9uY2UgYmV0d2VlbgorICogY2FsbHMuCisgKgorICogVGhlIGZpcnN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBmb3IgYSBuZXcgdGltZSBjb3VudGVyIGluaXRpYWxpemVzCisgKiB0aGUgdGltZSB0cmFja2luZyBhbmQgcmV0dXJucyBhbiB1bmRlZmluZWQgcmVzdWx0LgorICovCitzdGF0aWMgdTY0IHRpbWVjb3VudGVyX3JlYWRfZGVsdGEoc3RydWN0IHRpbWVjb3VudGVyICp0YykKK3sKKwljeWNsZV90IGN5Y2xlX25vdywgY3ljbGVfZGVsdGE7CisJdTY0IG5zX29mZnNldDsKKworCS8qIHJlYWQgY3ljbGUgY291bnRlcjogKi8KKwljeWNsZV9ub3cgPSB0Yy0+Y2MtPnJlYWQodGMtPmNjKTsKKworCS8qIGNhbGN1bGF0ZSB0aGUgZGVsdGEgc2luY2UgdGhlIGxhc3QgdGltZWNvdW50ZXJfcmVhZF9kZWx0YSgpOiAqLworCWN5Y2xlX2RlbHRhID0gKGN5Y2xlX25vdyAtIHRjLT5jeWNsZV9sYXN0KSAmIHRjLT5jYy0+bWFzazsKKworCS8qIGNvbnZlcnQgdG8gbmFub3NlY29uZHM6ICovCisJbnNfb2Zmc2V0ID0gY3ljbGVjb3VudGVyX2N5YzJucyh0Yy0+Y2MsIGN5Y2xlX2RlbHRhLAorCQkJCQl0Yy0+bWFzaywgJnRjLT5mcmFjKTsKKworCS8qIHVwZGF0ZSB0aW1lIHN0YW1wIG9mIHRpbWVjb3VudGVyX3JlYWRfZGVsdGEoKSBjYWxsOiAqLworCXRjLT5jeWNsZV9sYXN0ID0gY3ljbGVfbm93OworCisJcmV0dXJuIG5zX29mZnNldDsKK30KKwordTY0IHRpbWVjb3VudGVyX3JlYWQoc3RydWN0IHRpbWVjb3VudGVyICp0YykKK3sKKwl1NjQgbnNlYzsKKworCS8qIGluY3JlbWVudCB0aW1lIGJ5IG5hbm9zZWNvbmRzIHNpbmNlIGxhc3QgY2FsbCAqLworCW5zZWMgPSB0aW1lY291bnRlcl9yZWFkX2RlbHRhKHRjKTsKKwluc2VjICs9IHRjLT5uc2VjOworCXRjLT5uc2VjID0gbnNlYzsKKworCXJldHVybiBuc2VjOworfQorRVhQT1JUX1NZTUJPTF9HUEwodGltZWNvdW50ZXJfcmVhZCk7CisKKy8qCisgKiBUaGlzIGlzIGxpa2UgY3ljbGVjb3VudGVyX2N5YzJucygpLCBidXQgaXQgaXMgdXNlZCBmb3IgY29tcHV0aW5nIGEKKyAqIHRpbWUgcHJldmlvdXMgdG8gdGhlIHRpbWUgc3RvcmVkIGluIHRoZSBjeWNsZSBjb3VudGVyLgorICovCitzdGF0aWMgdTY0IGNjX2N5YzJuc19iYWNrd2FyZHMoY29uc3Qgc3RydWN0IGN5Y2xlY291bnRlciAqY2MsCisJCQkgICAgICAgY3ljbGVfdCBjeWNsZXMsIHU2NCBtYXNrLCB1NjQgZnJhYykKK3sKKwl1NjQgbnMgPSAodTY0KSBjeWNsZXM7CisKKwlucyA9ICgobnMgKiBjYy0+bXVsdCkgLSBmcmFjKSA+PiBjYy0+c2hpZnQ7CisKKwlyZXR1cm4gbnM7Cit9CisKK3U2NCB0aW1lY291bnRlcl9jeWMydGltZShzdHJ1Y3QgdGltZWNvdW50ZXIgKnRjLAorCQkJIGN5Y2xlX3QgY3ljbGVfdHN0YW1wKQoreworCXU2NCBkZWx0YSA9IChjeWNsZV90c3RhbXAgLSB0Yy0+Y3ljbGVfbGFzdCkgJiB0Yy0+Y2MtPm1hc2s7CisJdTY0IG5zZWMgPSB0Yy0+bnNlYywgZnJhYyA9IHRjLT5mcmFjOworCisJLyoKKwkgKiBJbnN0ZWFkIG9mIGFsd2F5cyB0cmVhdGluZyBjeWNsZV90c3RhbXAgYXMgbW9yZSByZWNlbnQKKwkgKiB0aGFuIHRjLT5jeWNsZV9sYXN0LCBkZXRlY3Qgd2hlbiBpdCBpcyB0b28gZmFyIGluIHRoZQorCSAqIGZ1dHVyZSBhbmQgdHJlYXQgaXQgYXMgb2xkIHRpbWUgc3RhbXAgaW5zdGVhZC4KKwkgKi8KKwlpZiAoZGVsdGEgPiB0Yy0+Y2MtPm1hc2sgLyAyKSB7CisJCWRlbHRhID0gKHRjLT5jeWNsZV9sYXN0IC0gY3ljbGVfdHN0YW1wKSAmIHRjLT5jYy0+bWFzazsKKwkJbnNlYyAtPSBjY19jeWMybnNfYmFja3dhcmRzKHRjLT5jYywgZGVsdGEsIHRjLT5tYXNrLCBmcmFjKTsKKwl9IGVsc2UgeworCQluc2VjICs9IGN5Y2xlY291bnRlcl9jeWMybnModGMtPmNjLCBkZWx0YSwgdGMtPm1hc2ssICZmcmFjKTsKKwl9CisKKwlyZXR1cm4gbnNlYzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRpbWVjb3VudGVyX2N5YzJ0aW1lKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IDZhOTMxODUuLmIxMjRhZjIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwpAQCAtMTY1OSwyNCArMTY1OSwyNCBAQAogfQogCiAvKioKLSAqIGdldGJvb3R0aW1lIC0gUmV0dXJuIHRoZSByZWFsIHRpbWUgb2Ygc3lzdGVtIGJvb3QuCi0gKiBAdHM6CQlwb2ludGVyIHRvIHRoZSB0aW1lc3BlYyB0byBiZSBzZXQKKyAqIGdldGJvb3R0aW1lNjQgLSBSZXR1cm4gdGhlIHJlYWwgdGltZSBvZiBzeXN0ZW0gYm9vdC4KKyAqIEB0czoJCXBvaW50ZXIgdG8gdGhlIHRpbWVzcGVjNjQgdG8gYmUgc2V0CiAgKgotICogUmV0dXJucyB0aGUgd2FsbC10aW1lIG9mIGJvb3QgaW4gYSB0aW1lc3BlYy4KKyAqIFJldHVybnMgdGhlIHdhbGwtdGltZSBvZiBib290IGluIGEgdGltZXNwZWM2NC4KICAqCiAgKiBUaGlzIGlzIGJhc2VkIG9uIHRoZSB3YWxsX3RvX21vbm90b25pYyBvZmZzZXQgYW5kIHRoZSB0b3RhbCBzdXNwZW5kCiAgKiB0aW1lLiBDYWxscyB0byBzZXR0aW1lb2ZkYXkgd2lsbCBhZmZlY3QgdGhlIHZhbHVlIHJldHVybmVkICh3aGljaAogICogYmFzaWNhbGx5IG1lYW5zIHRoYXQgaG93ZXZlciB3cm9uZyB5b3VyIHJlYWwgdGltZSBjbG9jayBpcyBhdCBib290IHRpbWUsCiAgKiB5b3UgZ2V0IHRoZSByaWdodCB0aW1lIGhlcmUpLgogICovCi12b2lkIGdldGJvb3R0aW1lKHN0cnVjdCB0aW1lc3BlYyAqdHMpCit2b2lkIGdldGJvb3R0aW1lNjQoc3RydWN0IHRpbWVzcGVjNjQgKnRzKQogewogCXN0cnVjdCB0aW1la2VlcGVyICp0ayA9ICZ0a19jb3JlLnRpbWVrZWVwZXI7CiAJa3RpbWVfdCB0ID0ga3RpbWVfc3ViKHRrLT5vZmZzX3JlYWwsIHRrLT5vZmZzX2Jvb3QpOwogCi0JKnRzID0ga3RpbWVfdG9fdGltZXNwZWModCk7CisJKnRzID0ga3RpbWVfdG9fdGltZXNwZWM2NCh0KTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGdldGJvb3R0aW1lKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGdldGJvb3R0aW1lNjQpOwogCiB1bnNpZ25lZCBsb25nIGdldF9zZWNvbmRzKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvTWFrZWZpbGUgYi9rZXJuZWwvdHJhY2UvTWFrZWZpbGUKaW5kZXggOTc5Y2NkZS4uOThmMjY1OCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL01ha2VmaWxlCisrKyBiL2tlcm5lbC90cmFjZS9NYWtlZmlsZQpAQCAtMywxMSArMywxMSBAQAogCiBpZmRlZiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSCiBPUklHX0NGTEFHUyA6PSAkKEtCVUlMRF9DRkxBR1MpCi1LQlVJTERfQ0ZMQUdTID0gJChzdWJzdCAtcGcsLCQoT1JJR19DRkxBR1MpKQorS0JVSUxEX0NGTEFHUyA9ICQoc3Vic3QgJChDQ19GTEFHU19GVFJBQ0UpLCwkKE9SSUdfQ0ZMQUdTKSkKIAogaWZkZWYgQ09ORklHX0ZUUkFDRV9TRUxGVEVTVAogIyBzZWxmdGVzdCBuZWVkcyBpbnN0cnVtZW50YXRpb24KLUNGTEFHU190cmFjZV9zZWxmdGVzdF9keW5hbWljLm8gPSAtcGcKK0NGTEFHU190cmFjZV9zZWxmdGVzdF9keW5hbWljLm8gPSAkKENDX0ZMQUdTX0ZUUkFDRSkKIG9iai15ICs9IHRyYWNlX3NlbGZ0ZXN0X2R5bmFtaWMubwogZW5kaWYKIGVuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggMjI0ZTc2OC4uNDVlNWNiMSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtNTQ1Niw3ICs1NDU2LDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKIAogCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOwotCWlmICghZF90cmFjZXIpCisJaWYgKElTX0VSUihkX3RyYWNlcikpCiAJCXJldHVybiAwOwogCiAJZnRyYWNlX2luaXRfZHluX2RlYnVnZnMoZF90cmFjZXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3Bvd2VyLXRyYWNlcy5jIGIva2VybmVsL3RyYWNlL3Bvd2VyLXRyYWNlcy5jCmluZGV4IDFjNzEzODIuLmViNDIyMGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9wb3dlci10cmFjZXMuYworKysgYi9rZXJuZWwvdHJhY2UvcG93ZXItdHJhY2VzLmMKQEAgLTEzLDUgKzEzLDYgQEAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgogCitFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0xfR1BMKHN1c3BlbmRfcmVzdW1lKTsKIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTF9HUEwoY3B1X2lkbGUpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCmluZGV4IDdhNDEwNGMuLjUwNDBkNDQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jCkBAIC05LDcgKzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3RyYWNlX3NlcS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxX3dvcmsuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CS8qIGZvciBzZWxmIHRlc3QgKi8KQEAgLTIzLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKICNpbmNsdWRlIDxhc20vbG9jYWwuaD4KIApAQCAtNDQ3LDcgKzQ0NSwxMCBAQAogc3RydWN0IHJiX2lycV93b3JrIHsKIAlzdHJ1Y3QgaXJxX3dvcmsJCQl3b3JrOwogCXdhaXRfcXVldWVfaGVhZF90CQl3YWl0ZXJzOworCXdhaXRfcXVldWVfaGVhZF90CQlmdWxsX3dhaXRlcnM7CiAJYm9vbAkJCQl3YWl0ZXJzX3BlbmRpbmc7CisJYm9vbAkJCQlmdWxsX3dhaXRlcnNfcGVuZGluZzsKKwlib29sCQkJCXdha2V1cF9mdWxsOwogfTsKIAogLyoKQEAgLTUyOSw2ICs1MzAsMTAgQEAKIAlzdHJ1Y3QgcmJfaXJxX3dvcmsgKnJid29yayA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmJfaXJxX3dvcmssIHdvcmspOwogCiAJd2FrZV91cF9hbGwoJnJid29yay0+d2FpdGVycyk7CisJaWYgKHJid29yay0+d2FrZXVwX2Z1bGwpIHsKKwkJcmJ3b3JrLT53YWtldXBfZnVsbCA9IGZhbHNlOworCQl3YWtlX3VwX2FsbCgmcmJ3b3JrLT5mdWxsX3dhaXRlcnMpOworCX0KIH0KIAogLyoqCkBAIC01NTMsOSArNTU4LDExIEBACiAJICogZGF0YSBpbiBhbnkgY3B1IGJ1ZmZlciwgb3IgYSBzcGVjaWZpYyBidWZmZXIsIHB1dCB0aGUKIAkgKiBjYWxsZXIgb24gdGhlIGFwcHJvcHJpYXRlIHdhaXQgcXVldWUuCiAJICovCi0JaWYgKGNwdSA9PSBSSU5HX0JVRkZFUl9BTExfQ1BVUykKKwlpZiAoY3B1ID09IFJJTkdfQlVGRkVSX0FMTF9DUFVTKSB7CiAJCXdvcmsgPSAmYnVmZmVyLT5pcnFfd29yazsKLQllbHNlIHsKKwkJLyogRnVsbCBvbmx5IG1ha2VzIHNlbnNlIG9uIHBlciBjcHUgcmVhZHMgKi8KKwkJZnVsbCA9IGZhbHNlOworCX0gZWxzZSB7CiAJCWlmICghY3B1bWFza190ZXN0X2NwdShjcHUsIGJ1ZmZlci0+Y3B1bWFzaykpCiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJY3B1X2J1ZmZlciA9IGJ1ZmZlci0+YnVmZmVyc1tjcHVdOwpAQCAtNTY0LDcgKzU3MSwxMCBAQAogCiAKIAl3aGlsZSAodHJ1ZSkgewotCQlwcmVwYXJlX3RvX3dhaXQoJndvcmstPndhaXRlcnMsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAoZnVsbCkKKwkJCXByZXBhcmVfdG9fd2FpdCgmd29yay0+ZnVsbF93YWl0ZXJzLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJZWxzZQorCQkJcHJlcGFyZV90b193YWl0KCZ3b3JrLT53YWl0ZXJzLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAogCQkvKgogCQkgKiBUaGUgZXZlbnRzIGNhbiBoYXBwZW4gaW4gY3JpdGljYWwgc2VjdGlvbnMgd2hlcmUKQEAgLTU4Niw3ICs1OTYsMTAgQEAKIAkJICogdGhhdCBpcyBuZWNlc3NhcnkgaXMgdGhhdCB0aGUgd2FrZSB1cCBoYXBwZW5zIGFmdGVyCiAJCSAqIGEgdGFzayBoYXMgYmVlbiBxdWV1ZWQuIEl0J3MgT0sgZm9yIHNwdXJpb3VzIHdha2UgdXBzLgogCQkgKi8KLQkJd29yay0+d2FpdGVyc19wZW5kaW5nID0gdHJ1ZTsKKwkJaWYgKGZ1bGwpCisJCQl3b3JrLT5mdWxsX3dhaXRlcnNfcGVuZGluZyA9IHRydWU7CisJCWVsc2UKKwkJCXdvcmstPndhaXRlcnNfcGVuZGluZyA9IHRydWU7CiAKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCQlyZXQgPSAtRUlOVFI7CkBAIC02MTUsNyArNjI4LDEwIEBACiAJCXNjaGVkdWxlKCk7CiAJfQogCi0JZmluaXNoX3dhaXQoJndvcmstPndhaXRlcnMsICZ3YWl0KTsKKwlpZiAoZnVsbCkKKwkJZmluaXNoX3dhaXQoJndvcmstPmZ1bGxfd2FpdGVycywgJndhaXQpOworCWVsc2UKKwkJZmluaXNoX3dhaXQoJndvcmstPndhaXRlcnMsICZ3YWl0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMjMwLDYgKzEyNDYsNyBAQAogCWluaXRfY29tcGxldGlvbigmY3B1X2J1ZmZlci0+dXBkYXRlX2RvbmUpOwogCWluaXRfaXJxX3dvcmsoJmNwdV9idWZmZXItPmlycV93b3JrLndvcmssIHJiX3dha2VfdXBfd2FpdGVycyk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY3B1X2J1ZmZlci0+aXJxX3dvcmsud2FpdGVycyk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY3B1X2J1ZmZlci0+aXJxX3dvcmsuZnVsbF93YWl0ZXJzKTsKIAogCWJwYWdlID0ga3phbGxvY19ub2RlKEFMSUdOKHNpemVvZigqYnBhZ2UpLCBjYWNoZV9saW5lX3NpemUoKSksCiAJCQkgICAgR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUoY3B1KSk7CkBAIC0yODAxLDYgKzI4MTgsOCBAQAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkCiByYl93YWtldXBzKHN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyLCBzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcikKIHsKKwlib29sIHBhZ2VidXN5OworCiAJaWYgKGJ1ZmZlci0+aXJxX3dvcmsud2FpdGVyc19wZW5kaW5nKSB7CiAJCWJ1ZmZlci0+aXJxX3dvcmsud2FpdGVyc19wZW5kaW5nID0gZmFsc2U7CiAJCS8qIGlycV93b3JrX3F1ZXVlKCkgc3VwcGxpZXMgaXQncyBvd24gbWVtb3J5IGJhcnJpZXJzICovCkBAIC0yODEyLDYgKzI4MzEsMTUgQEAKIAkJLyogaXJxX3dvcmtfcXVldWUoKSBzdXBwbGllcyBpdCdzIG93biBtZW1vcnkgYmFycmllcnMgKi8KIAkJaXJxX3dvcmtfcXVldWUoJmNwdV9idWZmZXItPmlycV93b3JrLndvcmspOwogCX0KKworCXBhZ2VidXN5ID0gY3B1X2J1ZmZlci0+cmVhZGVyX3BhZ2UgPT0gY3B1X2J1ZmZlci0+Y29tbWl0X3BhZ2U7CisKKwlpZiAoIXBhZ2VidXN5ICYmIGNwdV9idWZmZXItPmlycV93b3JrLmZ1bGxfd2FpdGVyc19wZW5kaW5nKSB7CisJCWNwdV9idWZmZXItPmlycV93b3JrLndha2V1cF9mdWxsID0gdHJ1ZTsKKwkJY3B1X2J1ZmZlci0+aXJxX3dvcmsuZnVsbF93YWl0ZXJzX3BlbmRpbmcgPSBmYWxzZTsKKwkJLyogaXJxX3dvcmtfcXVldWUoKSBzdXBwbGllcyBpdCdzIG93biBtZW1vcnkgYmFycmllcnMgKi8KKwkJaXJxX3dvcmtfcXVldWUoJmNwdV9idWZmZXItPmlycV93b3JrLndvcmspOworCX0KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmMKaW5kZXggM2Y5ZTMyOC4uMTNkOTQ1YyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jCisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlcl9iZW5jaG1hcmsuYwpAQCAtNyw3ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgogI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgogCiBzdHJ1Y3QgcmJfcGFnZSB7CkBAIC0xNyw3ICsxNyw3IEBACiB9OwogCiAvKiBydW4gdGltZSBhbmQgc2xlZXAgdGltZSBpbiBzZWNvbmRzICovCi0jZGVmaW5lIFJVTl9USU1FCTEwCisjZGVmaW5lIFJVTl9USU1FCTEwVUxMCiAjZGVmaW5lIFNMRUVQX1RJTUUJMTAKIAogLyogbnVtYmVyIG9mIGV2ZW50cyBmb3Igd3JpdGVyIHRvIHdha2UgdXAgdGhlIHJlYWRlciAqLwpAQCAtMjEyLDggKzIxMiw3IEBACiAKIHN0YXRpYyB2b2lkIHJpbmdfYnVmZmVyX3Byb2R1Y2VyKHZvaWQpCiB7Ci0Jc3RydWN0IHRpbWV2YWwgc3RhcnRfdHY7Ci0Jc3RydWN0IHRpbWV2YWwgZW5kX3R2OworCWt0aW1lX3Qgc3RhcnRfdGltZSwgZW5kX3RpbWUsIHRpbWVvdXQ7CiAJdW5zaWduZWQgbG9uZyBsb25nIHRpbWU7CiAJdW5zaWduZWQgbG9uZyBsb25nIGVudHJpZXM7CiAJdW5zaWduZWQgbG9uZyBsb25nIG92ZXJydW5zOwpAQCAtMjI3LDcgKzIyNiw4IEBACiAJICogbWFrZSB0aGUgc3lzdGVtIHN0YWxsKQogCSAqLwogCXRyYWNlX3ByaW50aygiU3RhcnRpbmcgcmluZyBidWZmZXIgaGFtbWVyXG4iKTsKLQlkb19nZXR0aW1lb2ZkYXkoJnN0YXJ0X3R2KTsKKwlzdGFydF90aW1lID0ga3RpbWVfZ2V0KCk7CisJdGltZW91dCA9IGt0aW1lX2FkZF9ucyhzdGFydF90aW1lLCBSVU5fVElNRSAqIE5TRUNfUEVSX1NFQyk7CiAJZG8gewogCQlzdHJ1Y3QgcmluZ19idWZmZXJfZXZlbnQgKmV2ZW50OwogCQlpbnQgKmVudHJ5OwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAJCQkJcmluZ19idWZmZXJfdW5sb2NrX2NvbW1pdChidWZmZXIsIGV2ZW50KTsKIAkJCX0KIAkJfQotCQlkb19nZXR0aW1lb2ZkYXkoJmVuZF90dik7CisJCWVuZF90aW1lID0ga3RpbWVfZ2V0KCk7CiAKIAkJY250Kys7CiAJCWlmIChjb25zdW1lciAmJiAhKGNudCAlIHdha2V1cF9pbnRlcnZhbCkpCkBAIC0yNjQsNyArMjY0LDcgQEAKIAkJCWNvbmRfcmVzY2hlZCgpOwogI2VuZGlmCiAKLQl9IHdoaWxlIChlbmRfdHYudHZfc2VjIDwgKHN0YXJ0X3R2LnR2X3NlYyArIFJVTl9USU1FKSAmJiAha2lsbF90ZXN0KTsKKwl9IHdoaWxlIChrdGltZV9iZWZvcmUoZW5kX3RpbWUsIHRpbWVvdXQpICYmICFraWxsX3Rlc3QpOwogCXRyYWNlX3ByaW50aygiRW5kIHJpbmcgYnVmZmVyIGhhbW1lclxuIik7CiAKIAlpZiAoY29uc3VtZXIpIHsKQEAgLTI4MCw5ICsyODAsNyBAQAogCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyZWFkX2RvbmUpOwogCX0KIAotCXRpbWUgPSBlbmRfdHYudHZfc2VjIC0gc3RhcnRfdHYudHZfc2VjOwotCXRpbWUgKj0gVVNFQ19QRVJfU0VDOwotCXRpbWUgKz0gKGxvbmcgbG9uZykoKGxvbmcpZW5kX3R2LnR2X3VzZWMgLSAobG9uZylzdGFydF90di50dl91c2VjKTsKKwl0aW1lID0ga3RpbWVfdXNfZGVsdGEoZW5kX3RpbWUsIHN0YXJ0X3RpbWUpOwogCiAJZW50cmllcyA9IHJpbmdfYnVmZmVyX2VudHJpZXMoYnVmZmVyKTsKIAlvdmVycnVucyA9IHJpbmdfYnVmZmVyX292ZXJydW5zKGJ1ZmZlcik7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuYyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCmluZGV4IDRhOTA3OWIuLjc3YjhkYzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5jCkBAIC0yMDM2LDcgKzIwMzYsOCBAQAogCiAJLyogdHJhY2VfcHJpbnRrKCkgaXMgZm9yIGRlYnVnIHVzZSBvbmx5LiBEb24ndCB1c2UgaXQgaW4gcHJvZHVjdGlvbi4gKi8KIAotCXByX3dhcm5pbmcoIlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIik7CisJcHJfd2FybmluZygiXG4iKTsKKwlwcl93YXJuaW5nKCIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKIAlwcl93YXJuaW5nKCIqKiAgIE5PVElDRSBOT1RJQ0UgTk9USUNFIE5PVElDRSBOT1RJQ0UgTk9USUNFIE5PVElDRSAgICoqXG4iKTsKIAlwcl93YXJuaW5nKCIqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqXG4iKTsKIAlwcl93YXJuaW5nKCIqKiB0cmFjZV9wcmludGsoKSBiZWluZyB1c2VkLiBBbGxvY2F0aW5nIGV4dHJhIG1lbW9yeS4gICoqXG4iKTsKQEAgLTQxNDAsNiArNDE0MSwxMiBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwkvKiBJZiB0cmFjZSBwaXBlIGZpbGVzIGFyZSBiZWluZyByZWFkLCB3ZSBjYW4ndCBjaGFuZ2UgdGhlIHRyYWNlciAqLworCWlmICh0ci0+Y3VycmVudF90cmFjZS0+cmVmKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCiAJdHJhY2VfYnJhbmNoX2Rpc2FibGUoKTsKIAogCXRyLT5jdXJyZW50X3RyYWNlLT5lbmFibGVkLS07CkBAIC00MzI2LDE3ICs0MzMzLDcgQEAKIAl9CiAKIAl0cmFjZV9zZXFfaW5pdCgmaXRlci0+c2VxKTsKLQotCS8qCi0JICogV2UgbWFrZSBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgdHJhY2VyIHRvIGF2b2lkIGNvbmN1cnJlbnQKLQkgKiBjaGFuZ2VzIG9uIGl0IHdoaWxlIHdlIGFyZSByZWFkaW5nLgotCSAqLwotCWl0ZXItPnRyYWNlID0ga21hbGxvYyhzaXplb2YoKml0ZXItPnRyYWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpdGVyLT50cmFjZSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7Ci0JfQotCSppdGVyLT50cmFjZSA9ICp0ci0+Y3VycmVudF90cmFjZTsKKwlpdGVyLT50cmFjZSA9IHRyLT5jdXJyZW50X3RyYWNlOwogCiAJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmaXRlci0+c3RhcnRlZCwgR0ZQX0tFUk5FTCkpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTQzNjMsNiArNDM2MCw4IEBACiAJCWl0ZXItPnRyYWNlLT5waXBlX29wZW4oaXRlcik7CiAKIAlub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxwKTsKKworCXRyLT5jdXJyZW50X3RyYWNlLT5yZWYrKzsKIG91dDoKIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCXJldHVybiByZXQ7CkBAIC00MzgyLDYgKzQzODEsOCBAQAogCiAJbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7CiAKKwl0ci0+Y3VycmVudF90cmFjZS0+cmVmLS07CisKIAlpZiAoaXRlci0+dHJhY2UtPnBpcGVfY2xvc2UpCiAJCWl0ZXItPnRyYWNlLT5waXBlX2Nsb3NlKGl0ZXIpOwogCkBAIC00Mzg5LDcgKzQzOTAsNiBAQAogCiAJZnJlZV9jcHVtYXNrX3ZhcihpdGVyLT5zdGFydGVkKTsKIAltdXRleF9kZXN0cm95KCZpdGVyLT5tdXRleCk7Ci0Ja2ZyZWUoaXRlci0+dHJhY2UpOwogCWtmcmVlKGl0ZXIpOwogCiAJdHJhY2VfYXJyYXlfcHV0KHRyKTsKQEAgLTQ0MjIsNyArNDQyMiw3IEBACiAJcmV0dXJuIHRyYWNlX3BvbGwoaXRlciwgZmlscCwgcG9sbF90YWJsZSk7CiB9CiAKLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggdHJhY2VfdHlwZXNfbG9jayBtdXRleCBoZWxkLiAqLworLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBpdGVyLT5tdXRleCBoZWxkLiAqLwogc3RhdGljIGludCB0cmFjaW5nX3dhaXRfcGlwZShzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBmaWxwLT5wcml2YXRlX2RhdGE7CkBAIC00NDY3LDcgKzQ0NjcsNiBAQAogCQkgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHRyYWNlX2FycmF5ICp0ciA9IGl0ZXItPnRyOwogCXNzaXplX3Qgc3JldDsKIAogCS8qIHJldHVybiBhbnkgbGVmdG92ZXIgZGF0YSAqLwpAQCAtNDQ3NywxMiArNDQ3Niw2IEBACiAKIAl0cmFjZV9zZXFfaW5pdCgmaXRlci0+c2VxKTsKIAotCS8qIGNvcHkgdGhlIHRyYWNlciB0byBhdm9pZCB1c2luZyBhIGdsb2JhbCBsb2NrIGFsbCBhcm91bmQgKi8KLQltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLQlpZiAodW5saWtlbHkoaXRlci0+dHJhY2UtPm5hbWUgIT0gdHItPmN1cnJlbnRfdHJhY2UtPm5hbWUpKQotCQkqaXRlci0+dHJhY2UgPSAqdHItPmN1cnJlbnRfdHJhY2U7Ci0JbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLQogCS8qCiAJICogQXZvaWQgbW9yZSB0aGFuIG9uZSBjb25zdW1lciBvbiBhIHNpbmdsZSBmaWxlIGRlc2NyaXB0b3IKIAkgKiBUaGlzIGlzIGp1c3QgYSBtYXR0ZXIgb2YgdHJhY2VzIGNvaGVyZW5jeSwgdGhlIHJpbmcgYnVmZmVyIGl0c2VsZgpAQCAtNDY0Miw3ICs0NjM1LDYgQEAKIAkJLm9wcwkJPSAmdHJhY2luZ19waXBlX2J1Zl9vcHMsCiAJCS5zcGRfcmVsZWFzZQk9IHRyYWNpbmdfc3BkX3JlbGVhc2VfcGlwZSwKIAl9OwotCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSBpdGVyLT50cjsKIAlzc2l6ZV90IHJldDsKIAlzaXplX3QgcmVtOwogCXVuc2lnbmVkIGludCBpOwpAQCAtNDY1MCwxMiArNDY0Miw2IEBACiAJaWYgKHNwbGljZV9ncm93X3NwZChwaXBlLCAmc3BkKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBjb3B5IHRoZSB0cmFjZXIgdG8gYXZvaWQgdXNpbmcgYSBnbG9iYWwgbG9jayBhbGwgYXJvdW5kICovCi0JbXV0ZXhfbG9jaygmdHJhY2VfdHlwZXNfbG9jayk7Ci0JaWYgKHVubGlrZWx5KGl0ZXItPnRyYWNlLT5uYW1lICE9IHRyLT5jdXJyZW50X3RyYWNlLT5uYW1lKSkKLQkJKml0ZXItPnRyYWNlID0gKnRyLT5jdXJyZW50X3RyYWNlOwotCW11dGV4X3VubG9jaygmdHJhY2VfdHlwZXNfbG9jayk7Ci0KIAltdXRleF9sb2NrKCZpdGVyLT5tdXRleCk7CiAKIAlpZiAoaXRlci0+dHJhY2UtPnNwbGljZV9yZWFkKSB7CkBAIC00OTQyLDcgKzQ5MjgsNyBAQAogCSpmcG9zICs9IHdyaXR0ZW47CiAKICBvdXRfdW5sb2NrOgotCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKXsKKwlmb3IgKGkgPSBucl9wYWdlcyAtIDE7IGkgPj0gMDsgaS0tKSB7CiAJCWt1bm1hcF9hdG9taWMobWFwX3BhZ2VbaV0pOwogCQlwdXRfcGFnZShwYWdlc1tpXSk7CiAJfQpAQCAtNTMzMSw2ICs1MzE3LDggQEAKIAogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGluZm87CiAKKwl0ci0+Y3VycmVudF90cmFjZS0+cmVmKys7CisKIAltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCiAJcmV0ID0gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlscCk7CkBAIC01MzYxLDIxICs1MzQ5LDE2IEBACiAJaWYgKCFjb3VudCkKIAkJcmV0dXJuIDA7CiAKLQltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLQogI2lmZGVmIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFCi0JaWYgKGl0ZXItPnNuYXBzaG90ICYmIGl0ZXItPnRyLT5jdXJyZW50X3RyYWNlLT51c2VfbWF4X3RyKSB7Ci0JCXNpemUgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9CisJaWYgKGl0ZXItPnNuYXBzaG90ICYmIGl0ZXItPnRyLT5jdXJyZW50X3RyYWNlLT51c2VfbWF4X3RyKQorCQlyZXR1cm4gLUVCVVNZOwogI2VuZGlmCiAKIAlpZiAoIWluZm8tPnNwYXJlKQogCQlpbmZvLT5zcGFyZSA9IHJpbmdfYnVmZmVyX2FsbG9jX3JlYWRfcGFnZShpdGVyLT50cmFjZV9idWZmZXItPmJ1ZmZlciwKIAkJCQkJCQkgIGl0ZXItPmNwdV9maWxlKTsKLQlzaXplID0gLUVOT01FTTsKIAlpZiAoIWluZm8tPnNwYXJlKQotCQlnb3RvIG91dF91bmxvY2s7CisJCXJldHVybiAtRU5PTUVNOwogCiAJLyogRG8gd2UgaGF2ZSBwcmV2aW91cyByZWFkIGRhdGEgdG8gcmVhZD8gKi8KIAlpZiAoaW5mby0+cmVhZCA8IFBBR0VfU0laRSkKQEAgLTUzOTEsMjEgKzUzNzQsMTYgQEAKIAogCWlmIChyZXQgPCAwKSB7CiAJCWlmICh0cmFjZV9lbXB0eShpdGVyKSkgewotCQkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIHsKLQkJCQlzaXplID0gLUVBR0FJTjsKLQkJCQlnb3RvIG91dF91bmxvY2s7Ci0JCQl9Ci0JCQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCQkJaWYgKChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSykpCisJCQkJcmV0dXJuIC1FQUdBSU47CisKIAkJCXJldCA9IHdhaXRfb25fcGlwZShpdGVyLCBmYWxzZSk7Ci0JCQltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLQkJCWlmIChyZXQpIHsKLQkJCQlzaXplID0gcmV0OwotCQkJCWdvdG8gb3V0X3VubG9jazsKLQkJCX0KKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwogCQkJZ290byBhZ2FpbjsKIAkJfQotCQlzaXplID0gMDsKLQkJZ290byBvdXRfdW5sb2NrOworCQlyZXR1cm4gMDsKIAl9CiAKIAlpbmZvLT5yZWFkID0gMDsKQEAgLTU0MTUsMTggKzUzOTMsMTQgQEAKIAkJc2l6ZSA9IGNvdW50OwogCiAJcmV0ID0gY29weV90b191c2VyKHVidWYsIGluZm8tPnNwYXJlICsgaW5mby0+cmVhZCwgc2l6ZSk7Ci0JaWYgKHJldCA9PSBzaXplKSB7Ci0JCXNpemUgPSAtRUZBVUxUOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQorCWlmIChyZXQgPT0gc2l6ZSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKIAlzaXplIC09IHJldDsKIAogCSpwcG9zICs9IHNpemU7CiAJaW5mby0+cmVhZCArPSBzaXplOwogCi0gb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOwotCiAJcmV0dXJuIHNpemU7CiB9CiAKQEAgLTU0MzcsNiArNTQxMSw4IEBACiAKIAltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAorCWl0ZXItPnRyLT5jdXJyZW50X3RyYWNlLT5yZWYtLTsKKwogCV9fdHJhY2VfYXJyYXlfcHV0KGl0ZXItPnRyKTsKIAogCWlmIChpbmZvLT5zcGFyZSkKQEAgLTU1MjIsMzAgKzU0OTgsMjAgQEAKIAlpbnQgZW50cmllcywgc2l6ZSwgaTsKIAlzc2l6ZV90IHJldCA9IDA7CiAKLQltdXRleF9sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKLQogI2lmZGVmIENPTkZJR19UUkFDRVJfTUFYX1RSQUNFCi0JaWYgKGl0ZXItPnNuYXBzaG90ICYmIGl0ZXItPnRyLT5jdXJyZW50X3RyYWNlLT51c2VfbWF4X3RyKSB7Ci0JCXJldCA9IC1FQlVTWTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChpdGVyLT5zbmFwc2hvdCAmJiBpdGVyLT50ci0+Y3VycmVudF90cmFjZS0+dXNlX21heF90cikKKwkJcmV0dXJuIC1FQlVTWTsKICNlbmRpZgogCi0JaWYgKHNwbGljZV9ncm93X3NwZChwaXBlLCAmc3BkKSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKLQl9CisJaWYgKHNwbGljZV9ncm93X3NwZChwaXBlLCAmc3BkKSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoKnBwb3MgJiAoUEFHRV9TSVpFIC0gMSkpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICgqcHBvcyAmIChQQUdFX1NJWkUgLSAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAobGVuICYgKFBBR0VfU0laRSAtIDEpKSB7Ci0JCWlmIChsZW4gPCBQQUdFX1NJWkUpIHsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQorCQlpZiAobGVuIDwgUEFHRV9TSVpFKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWxlbiAmPSBQQUdFX01BU0s7CiAJfQogCkBAIC01NjA2LDI1ICs1NTcyLDIwIEBACiAJLyogZGlkIHdlIHJlYWQgYW55dGhpbmc/ICovCiAJaWYgKCFzcGQubnJfcGFnZXMpIHsKIAkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OworCQkJcmV0dXJuIHJldDsKIAotCQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fCAoZmxhZ3MgJiBTUExJQ0VfRl9OT05CTE9DSykpIHsKLQkJCXJldCA9IC1FQUdBSU47Ci0JCQlnb3RvIG91dDsKLQkJfQotCQltdXRleF91bmxvY2soJnRyYWNlX3R5cGVzX2xvY2spOworCQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB8fCAoZmxhZ3MgJiBTUExJQ0VfRl9OT05CTE9DSykpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwogCQlyZXQgPSB3YWl0X29uX3BpcGUoaXRlciwgdHJ1ZSk7Ci0JCW11dGV4X2xvY2soJnRyYWNlX3R5cGVzX2xvY2spOwogCQlpZiAocmV0KQotCQkJZ290byBvdXQ7CisJCQlyZXR1cm4gcmV0OwogCiAJCWdvdG8gYWdhaW47CiAJfQogCiAJcmV0ID0gc3BsaWNlX3RvX3BpcGUocGlwZSwgJnNwZCk7CiAJc3BsaWNlX3Nocmlua19zcGQoJnNwZCk7Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZ0cmFjZV90eXBlc19sb2NrKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01ODU0LDI4ICs1ODE1LDExIEBACiBzdGF0aWMgaW5saW5lIF9faW5pdCBpbnQgcmVnaXN0ZXJfc25hcHNob3RfY21kKHZvaWQpIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19UUkFDRVJfU05BUFNIT1QpICYmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKSAqLwogCi1zdHJ1Y3QgZGVudHJ5ICp0cmFjaW5nX2luaXRfZGVudHJ5X3RyKHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqdHJhY2luZ19nZXRfZGVudHJ5KHN0cnVjdCB0cmFjZV9hcnJheSAqdHIpCiB7Ci0JaWYgKHRyLT5kaXIpCi0JCXJldHVybiB0ci0+ZGlyOwotCi0JaWYgKCFkZWJ1Z2ZzX2luaXRpYWxpemVkKCkpCi0JCXJldHVybiBOVUxMOwotCi0JaWYgKHRyLT5mbGFncyAmIFRSQUNFX0FSUkFZX0ZMX0dMT0JBTCkKLQkJdHItPmRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigidHJhY2luZyIsIE5VTEwpOwotCi0JaWYgKCF0ci0+ZGlyKQotCQlwcl93YXJuX29uY2UoIkNvdWxkIG5vdCBjcmVhdGUgZGVidWdmcyBkaXJlY3RvcnkgJ3RyYWNpbmcnXG4iKTsKLQogCXJldHVybiB0ci0+ZGlyOwogfQogCi1zdHJ1Y3QgZGVudHJ5ICp0cmFjaW5nX2luaXRfZGVudHJ5KHZvaWQpCi17Ci0JcmV0dXJuIHRyYWNpbmdfaW5pdF9kZW50cnlfdHIoJmdsb2JhbF90cmFjZSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp0cmFjaW5nX2RlbnRyeV9wZXJjcHUoc3RydWN0IHRyYWNlX2FycmF5ICp0ciwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKQEAgLTU4ODMsOCArNTgyNyw4IEBACiAJaWYgKHRyLT5wZXJjcHVfZGlyKQogCQlyZXR1cm4gdHItPnBlcmNwdV9kaXI7CiAKLQlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnlfdHIodHIpOwotCWlmICghZF90cmFjZXIpCisJZF90cmFjZXIgPSB0cmFjaW5nX2dldF9kZW50cnkodHIpOworCWlmIChJU19FUlIoZF90cmFjZXIpKQogCQlyZXR1cm4gTlVMTDsKIAogCXRyLT5wZXJjcHVfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJwZXJfY3B1IiwgZF90cmFjZXIpOwpAQCAtNjA4Niw4ICs2MDMwLDggQEAKIAlpZiAodHItPm9wdGlvbnMpCiAJCXJldHVybiB0ci0+b3B0aW9uczsKIAotCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeV90cih0cik7Ci0JaWYgKCFkX3RyYWNlcikKKwlkX3RyYWNlciA9IHRyYWNpbmdfZ2V0X2RlbnRyeSh0cik7CisJaWYgKElTX0VSUihkX3RyYWNlcikpCiAJCXJldHVybiBOVUxMOwogCiAJdHItPm9wdGlvbnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoIm9wdGlvbnMiLCBkX3RyYWNlcik7CkBAIC02NDE2LDcgKzYzNjAsNyBAQAogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlyZXQgPSAtRUJVU1k7Ci0JaWYgKHRyLT5yZWYpCisJaWYgKHRyLT5yZWYgfHwgKHRyLT5jdXJyZW50X3RyYWNlICYmIHRyLT5jdXJyZW50X3RyYWNlLT5yZWYpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlsaXN0X2RlbCgmdHItPmxpc3QpOwpAQCAtNjU3MSw2ICs2NTE1LDMzIEBACiAKIH0KIAorLyoqCisgKiB0cmFjaW5nX2luaXRfZGVudHJ5IC0gaW5pdGlhbGl6ZSB0b3AgbGV2ZWwgdHJhY2UgYXJyYXkKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIGNyZWF0aW5nIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGluIHRoZSB0cmFjaW5nCisgKiBkaXJlY3RvcnkuIEl0IGlzIGNhbGxlZCB2aWEgZnNfaW5pdGNhbGwoKSBieSBhbnkgb2YgdGhlIGJvb3QgdXAgY29kZQorICogYW5kIGV4cGVjdHMgdG8gcmV0dXJuIHRoZSBkZW50cnkgb2YgdGhlIHRvcCBsZXZlbCB0cmFjaW5nIGRpcmVjdG9yeS4KKyAqLworc3RydWN0IGRlbnRyeSAqdHJhY2luZ19pbml0X2RlbnRyeSh2b2lkKQoreworCXN0cnVjdCB0cmFjZV9hcnJheSAqdHIgPSAmZ2xvYmFsX3RyYWNlOworCisJaWYgKHRyLT5kaXIpCisJCXJldHVybiB0ci0+ZGlyOworCisJaWYgKFdBUk5fT04oIWRlYnVnZnNfaW5pdGlhbGl6ZWQoKSkpCisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworCisJdHItPmRpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigidHJhY2luZyIsIE5VTEwpOworCisJaWYgKCF0ci0+ZGlyKSB7CisJCXByX3dhcm5fb25jZSgiQ291bGQgbm90IGNyZWF0ZSBkZWJ1Z2ZzIGRpcmVjdG9yeSAndHJhY2luZydcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlyZXR1cm4gdHItPmRpcjsKK30KKwogc3RhdGljIF9faW5pdCBpbnQgdHJhY2VyX2luaXRfZGVidWdmcyh2b2lkKQogewogCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOwpAQCAtNjU3OCw3ICs2NTQ5LDcgQEAKIAl0cmFjZV9hY2Nlc3NfbG9ja19pbml0KCk7CiAKIAlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKLQlpZiAoIWRfdHJhY2VyKQorCWlmIChJU19FUlIoZF90cmFjZXIpKQogCQlyZXR1cm4gMDsKIAogCWluaXRfdHJhY2VyX2RlYnVnZnMoJmdsb2JhbF90cmFjZSwgZF90cmFjZXIpOwpAQCAtNjgxMSw3ICs2NzgyLDYgQEAKIAlpbnQgcmluZ19idWZfc2l6ZTsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAotCiAJaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmdHJhY2luZ19idWZmZXJfbWFzaywgR0ZQX0tFUk5FTCkpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuaCBiL2tlcm5lbC90cmFjZS90cmFjZS5oCmluZGV4IDhkZTQ4YmEuLmRkODIwNWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5oCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5oCkBAIC0zODgsNiArMzg4LDcgQEAKIAlzdHJ1Y3QgdHJhY2VyCQkqbmV4dDsKIAlzdHJ1Y3QgdHJhY2VyX2ZsYWdzCSpmbGFnczsKIAlpbnQJCQllbmFibGVkOworCWludAkJCXJlZjsKIAlib29sCQkJcHJpbnRfbWF4OwogCWJvb2wJCQlhbGxvd19pbnN0YW5jZXM7CiAjaWZkZWYgQ09ORklHX1RSQUNFUl9NQVhfVFJBQ0UKQEAgLTU0MSw3ICs1NDIsNiBAQAogCQkJCSB2b2lkICpkYXRhLAogCQkJCSBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKTsKIAotc3RydWN0IGRlbnRyeSAqdHJhY2luZ19pbml0X2RlbnRyeV90cihzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKTsKIHN0cnVjdCBkZW50cnkgKnRyYWNpbmdfaW5pdF9kZW50cnkodm9pZCk7CiAKIHN0cnVjdCByaW5nX2J1ZmZlcl9ldmVudDsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYyBiL2tlcm5lbC90cmFjZS90cmFjZV9icmFuY2guYwppbmRleCA3ZDZlMmFmLi41N2NiZjFlIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfYnJhbmNoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2JyYW5jaC5jCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcGVyZi5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50X3BlcmYuYwppbmRleCA0YjljMTE0Li42ZmE0ODRkIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRfcGVyZi5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudF9wZXJmLmMKQEAgLTI2MSw3ICsyNjEsNyBAQAogfQogCiB2b2lkICpwZXJmX3RyYWNlX2J1Zl9wcmVwYXJlKGludCBzaXplLCB1bnNpZ25lZCBzaG9ydCB0eXBlLAotCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50ICpyY3R4cCkKKwkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKipyZWdzLCBpbnQgKnJjdHhwKQogewogCXN0cnVjdCB0cmFjZV9lbnRyeSAqZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTI4MCw2ICsyODAsOCBAQAogCWlmICgqcmN0eHAgPCAwKQogCQlyZXR1cm4gTlVMTDsKIAorCWlmIChyZWdzKQorCQkqcmVncyA9IHRoaXNfY3B1X3B0cigmX19wZXJmX3JlZ3NbKnJjdHhwXSk7CiAJcmF3X2RhdGEgPSB0aGlzX2NwdV9wdHIocGVyZl90cmFjZV9idWZbKnJjdHhwXSk7CiAKIAkvKiB6ZXJvIHRoZSBkZWFkIGJ5dGVzIGZyb20gYWxpZ24gdG8gbm90IGxlYWsgc3RhY2sgdG8gdXNlciAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCmluZGV4IGIwM2EwZWEuLmRiNTRkZGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKQEAgLTI1MzEsNyArMjUzMSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7Ci0JaWYgKCFkX3RyYWNlcikKKwlpZiAoSVNfRVJSKGRfdHJhY2VyKSkKIAkJcmV0dXJuIDA7CiAKIAllbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImF2YWlsYWJsZV9ldmVudHMiLCAwNDQ0LCBkX3RyYWNlciwKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwppbmRleCBkNGRkZGUyLi4xMmUyYjk5IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCkBAIC02LDEyICs2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKICNpbmNsdWRlICJ0cmFjZV9vdXRwdXQuaCIKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCmluZGV4IGJhNDc2MDAuLjJkMjVhZDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKQEAgLTE0MzcsNyArMTQzNyw3IEBACiAJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CiAKIAlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKLQlpZiAoIWRfdHJhY2VyKQorCWlmIChJU19FUlIoZF90cmFjZXIpKQogCQlyZXR1cm4gMDsKIAogCXRyYWNlX2NyZWF0ZV9maWxlKCJtYXhfZ3JhcGhfZGVwdGgiLCAwNjQ0LCBkX3RyYWNlciwKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCmluZGV4IDliYjEwNGY3Li44NTIzZWEzIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKQEAgLTEwLDExICsxMCw5IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IE5hZGlhIFl2ZXR0ZSBDaGFtYmVycwogICovCiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKICNpbmNsdWRlICJ0cmFjZS5oIgogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKaW5kZXggNWVkYjUxOC4uZDczZjU2NSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwpAQCAtMTE0OCw3ICsxMTQ4LDcgQEAKIAlzaXplID0gQUxJR04oX19zaXplICsgc2l6ZW9mKHUzMiksIHNpemVvZih1NjQpKTsKIAlzaXplIC09IHNpemVvZih1MzIpOwogCi0JZW50cnkgPSBwZXJmX3RyYWNlX2J1Zl9wcmVwYXJlKHNpemUsIGNhbGwtPmV2ZW50LnR5cGUsIHJlZ3MsICZyY3R4KTsKKwllbnRyeSA9IHBlcmZfdHJhY2VfYnVmX3ByZXBhcmUoc2l6ZSwgY2FsbC0+ZXZlbnQudHlwZSwgTlVMTCwgJnJjdHgpOwogCWlmICghZW50cnkpCiAJCXJldHVybjsKIApAQCAtMTE3OSw3ICsxMTc5LDcgQEAKIAlzaXplID0gQUxJR04oX19zaXplICsgc2l6ZW9mKHUzMiksIHNpemVvZih1NjQpKTsKIAlzaXplIC09IHNpemVvZih1MzIpOwogCi0JZW50cnkgPSBwZXJmX3RyYWNlX2J1Zl9wcmVwYXJlKHNpemUsIGNhbGwtPmV2ZW50LnR5cGUsIHJlZ3MsICZyY3R4KTsKKwllbnRyeSA9IHBlcmZfdHJhY2VfYnVmX3ByZXBhcmUoc2l6ZSwgY2FsbC0+ZXZlbnQudHlwZSwgTlVMTCwgJnJjdHgpOwogCWlmICghZW50cnkpCiAJCXJldHVybjsKIApAQCAtMTMyMCw3ICsxMzIwLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKLQlpZiAoIWRfdHJhY2VyKQorCWlmIChJU19FUlIoZF90cmFjZXIpKQogCQlyZXR1cm4gMDsKIAogCWVudHJ5ID0gZGVidWdmc19jcmVhdGVfZmlsZSgia3Byb2JlX2V2ZW50cyIsIDA2NDQsIGRfdHJhY2VyLApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX25vcC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX25vcC5jCmluZGV4IGZjZjBhOWUuLjhiYjIwNzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ub3AuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfbm9wLmMKQEAgLTYsOCArNiw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogCiAjaW5jbHVkZSAidHJhY2UuaCIKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYwppbmRleCBiNzdiOWE2Li42OTJiZjcxIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCkBAIC0xNzcsNiArMTc3LDUwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ0cmFjZV9wcmludF9oZXhfc2VxKTsKIAorY29uc3QgY2hhciAqCitmdHJhY2VfcHJpbnRfYXJyYXlfc2VxKHN0cnVjdCB0cmFjZV9zZXEgKnAsIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IGJ1Zl9sZW4sCisJCSAgICAgICBzaXplX3QgZWxfc2l6ZSkKK3sKKwljb25zdCBjaGFyICpyZXQgPSB0cmFjZV9zZXFfYnVmZmVyX3B0cihwKTsKKwljb25zdCBjaGFyICpwcmVmaXggPSAiIjsKKwl2b2lkICpwdHIgPSAodm9pZCAqKWJ1ZjsKKworCXRyYWNlX3NlcV9wdXRjKHAsICd7Jyk7CisKKwl3aGlsZSAocHRyIDwgYnVmICsgYnVmX2xlbikgeworCQlzd2l0Y2ggKGVsX3NpemUpIHsKKwkJY2FzZSAxOgorCQkJdHJhY2Vfc2VxX3ByaW50ZihwLCAiJXMweCV4IiwgcHJlZml4LAorCQkJCQkgKih1OCAqKXB0cik7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJdHJhY2Vfc2VxX3ByaW50ZihwLCAiJXMweCV4IiwgcHJlZml4LAorCQkJCQkgKih1MTYgKilwdHIpOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCXRyYWNlX3NlcV9wcmludGYocCwgIiVzMHgleCIsIHByZWZpeCwKKwkJCQkJICoodTMyICopcHRyKTsKKwkJCWJyZWFrOworCQljYXNlIDg6CisJCQl0cmFjZV9zZXFfcHJpbnRmKHAsICIlczB4JWxseCIsIHByZWZpeCwKKwkJCQkJICoodTY0ICopcHRyKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdHJhY2Vfc2VxX3ByaW50ZihwLCAiQkFEIFNJWkU6JXp1IDB4JXgiLCBlbF9zaXplLAorCQkJCQkgKih1OCAqKXB0cik7CisJCQllbF9zaXplID0gMTsKKwkJfQorCQlwcmVmaXggPSAiLCI7CisJCXB0ciArPSBlbF9zaXplOworCX0KKworCXRyYWNlX3NlcV9wdXRjKHAsICd9Jyk7CisJdHJhY2Vfc2VxX3B1dGMocCwgMCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChmdHJhY2VfcHJpbnRfYXJyYXlfc2VxKTsKKwogaW50IGZ0cmFjZV9yYXdfb3V0cHV0X3ByZXAoc3RydWN0IHRyYWNlX2l0ZXJhdG9yICppdGVyLAogCQkJICAgc3RydWN0IHRyYWNlX2V2ZW50ICp0cmFjZV9ldmVudCkKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9wcmludGsuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9wcmludGsuYwppbmRleCBjNGU3MGI2Li4zNmMxNDU1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfcHJpbnRrLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3ByaW50ay5jCkBAIC01LDcgKzUsNiBAQAogICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KQEAgLTE1LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KIAogI2luY2x1ZGUgInRyYWNlLmgiCiAKQEAgLTM0OSw3ICszNDcsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOwogCiAJZF90cmFjZXIgPSB0cmFjaW5nX2luaXRfZGVudHJ5KCk7Ci0JaWYgKCFkX3RyYWNlcikKKwlpZiAoSVNfRVJSKGRfdHJhY2VyKSkKIAkJcmV0dXJuIDA7CiAKIAl0cmFjZV9jcmVhdGVfZmlsZSgicHJpbnRrX2Zvcm1hdHMiLCAwNDQ0LCBkX3RyYWNlciwKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF9zd2l0Y2guYyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF9zd2l0Y2guYwppbmRleCAyZTI5M2JlLi40MTljYTM3IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfc3dpdGNoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3N3aXRjaC5jCkBAIC01LDggKzUsNiBAQAogICoKICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jCmluZGV4IDhmYjg0YjMuLmQ2ZTEwMDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMKQEAgLTEwLDggKzEwLDYgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTmFkaWEgWXZldHRlIENoYW1iZXJzCiAgKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zdGFjay5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMKaW5kZXggMTZlZGRiMy4uYzNlNGZjZiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMKQEAgLTcsMTIgKzcsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCkBAIC00NjIsNyArNDYwLDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkX3RyYWNlcjsKIAogCWRfdHJhY2VyID0gdHJhY2luZ19pbml0X2RlbnRyeSgpOwotCWlmICghZF90cmFjZXIpCisJaWYgKElTX0VSUihkX3RyYWNlcikpCiAJCXJldHVybiAwOwogCiAJdHJhY2VfY3JlYXRlX2ZpbGUoInN0YWNrX21heF9zaXplIiwgMDY0NCwgZF90cmFjZXIsCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhdC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3N0YXQuYwppbmRleCA3YWY2NzM2Li43NWUxOWU4IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhdC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zdGF0LmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRfdHJhY2luZzsKIAogCWRfdHJhY2luZyA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKLQlpZiAoIWRfdHJhY2luZykKKwlpZiAoSVNfRVJSKGRfdHJhY2luZykpCiAJCXJldHVybiAwOwogCiAJc3RhdF9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInRyYWNlX3N0YXQiLCBkX3RyYWNpbmcpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCBjNmVlMzZmLi5mOTdmNmUzIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtNTc0LDcgKzU3NCw3IEBACiAJc2l6ZSAtPSBzaXplb2YodTMyKTsKIAogCXJlYyA9IChzdHJ1Y3Qgc3lzY2FsbF90cmFjZV9lbnRlciAqKXBlcmZfdHJhY2VfYnVmX3ByZXBhcmUoc2l6ZSwKLQkJCQlzeXNfZGF0YS0+ZW50ZXJfZXZlbnQtPmV2ZW50LnR5cGUsIHJlZ3MsICZyY3R4KTsKKwkJCQlzeXNfZGF0YS0+ZW50ZXJfZXZlbnQtPmV2ZW50LnR5cGUsIE5VTEwsICZyY3R4KTsKIAlpZiAoIXJlYykKIAkJcmV0dXJuOwogCkBAIC02NDcsNyArNjQ3LDcgQEAKIAlzaXplIC09IHNpemVvZih1MzIpOwogCiAJcmVjID0gKHN0cnVjdCBzeXNjYWxsX3RyYWNlX2V4aXQgKilwZXJmX3RyYWNlX2J1Zl9wcmVwYXJlKHNpemUsCi0JCQkJc3lzX2RhdGEtPmV4aXRfZXZlbnQtPmV2ZW50LnR5cGUsIHJlZ3MsICZyY3R4KTsKKwkJCQlzeXNfZGF0YS0+ZXhpdF9ldmVudC0+ZXZlbnQudHlwZSwgTlVMTCwgJnJjdHgpOwogCWlmICghcmVjKQogCQlyZXR1cm47CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV91cHJvYmUuYyBiL2tlcm5lbC90cmFjZS90cmFjZV91cHJvYmUuYwppbmRleCA4NTIwYWNjLi43ZGMxYzhhIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfdXByb2JlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3Vwcm9iZS5jCkBAIC0xMTExLDcgKzExMTEsNyBAQAogCWlmIChobGlzdF9lbXB0eShoZWFkKSkKIAkJZ290byBvdXQ7CiAKLQllbnRyeSA9IHBlcmZfdHJhY2VfYnVmX3ByZXBhcmUoc2l6ZSwgY2FsbC0+ZXZlbnQudHlwZSwgcmVncywgJnJjdHgpOworCWVudHJ5ID0gcGVyZl90cmFjZV9idWZfcHJlcGFyZShzaXplLCBjYWxsLT5ldmVudC50eXBlLCBOVUxMLCAmcmN0eCk7CiAJaWYgKCFlbnRyeSkKIAkJZ290byBvdXQ7CiAKQEAgLTEzMjEsNyArMTMyMSw3IEBACiAJc3RydWN0IGRlbnRyeSAqZF90cmFjZXI7CiAKIAlkX3RyYWNlciA9IHRyYWNpbmdfaW5pdF9kZW50cnkoKTsKLQlpZiAoIWRfdHJhY2VyKQorCWlmIChJU19FUlIoZF90cmFjZXIpKQogCQlyZXR1cm4gMDsKIAogCXRyYWNlX2NyZWF0ZV9maWxlKCJ1cHJvYmVfZXZlbnRzIiwgMDY0NCwgZF90cmFjZXIsCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmlnCmluZGV4IDU0Y2YzMDkuLmNkMTc3Y2EgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnCisrKyBiL2xpYi9LY29uZmlnCkBAIC0xMyw2ICsxMywxNSBAQAogY29uZmlnIEJJVFJFVkVSU0UKIAl0cmlzdGF0ZQogCitjb25maWcgSEFWRV9BUkNIX0JJVFJFVkVSU0UKKwlib29sZWFuCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBCSVRSRVZFUlNFCisJaGVscAorCSAgVGhpcyBvcHRpb24gcHJvdmlkZXMgYW4gY29uZmlnIGZvciB0aGUgYXJjaGl0ZWN0dXJlIHdoaWNoIGhhdmUgaW5zdHJ1Y3Rpb24KKwkgIGNhbiBkbyBiaXRyZXZlcnNlIG9wZXJhdGlvbiwgd2UgdXNlIHRoZSBoYXJkd2FyZSBpbnN0cnVjdGlvbiBpZiB0aGUgYXJjaGl0ZWN0dXJlCisJICBoYXZlIHRoaXMgY2FwYWJpbGl0eS4KKwogY29uZmlnIFJBVElPTkFMCiAJYm9vbGVhbgogCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDVmMmNlNjEuLmU1ZWEzYWIgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCisrKyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC02MzYsNyArNjM2LDcgQEAKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBIQVZFX0RFQlVHX1NUQUNLT1ZFUkZMT1cKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNoZWNrIGZvciBvdmVyZmxvd3Mgb2Yga2VybmVsLCBJUlEKLQkgIGFuZCBleGNlcHRpb24gc3RhY2tzIChpZiB5b3VyIGFyY2hpY3R1cmUgdXNlcyB0aGVtKS4gVGhpcworCSAgYW5kIGV4Y2VwdGlvbiBzdGFja3MgKGlmIHlvdXIgYXJjaGl0ZWN0dXJlIHVzZXMgdGhlbSkuIFRoaXMKIAkgIG9wdGlvbiB3aWxsIHNob3cgZGV0YWlsZWQgbWVzc2FnZXMgaWYgZnJlZSBzdGFjayBzcGFjZSBkcm9wcwogCSAgYmVsb3cgYSBjZXJ0YWluIGxpbWl0LgogCkBAIC0xMjE1LDYgKzEyMTUsNyBAQAogCXRyaXN0YXRlICJ0b3J0dXJlIHRlc3RzIGZvciBSQ1UiCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKIAlzZWxlY3QgVE9SVFVSRV9URVNUCisJc2VsZWN0IFNSQ1UKIAlkZWZhdWx0IG4KIAloZWxwCiAJICBUaGlzIG9wdGlvbiBwcm92aWRlcyBhIGtlcm5lbCBtb2R1bGUgdGhhdCBydW5zIHRvcnR1cmUgdGVzdHMKQEAgLTEyNTcsNyArMTI1OCw3IEBACiBjb25maWcgUkNVX0NQVV9TVEFMTF9JTkZPCiAJYm9vbCAiUHJpbnQgYWRkaXRpb25hbCBkaWFnbm9zdGljcyBvbiBSQ1UgQ1BVIHN0YWxsIgogCWRlcGVuZHMgb24gKFRSRUVfUkNVIHx8IFBSRUVNUFRfUkNVKSAmJiBERUJVR19LRVJORUwKLQlkZWZhdWx0IG4KKwlkZWZhdWx0IHkKIAloZWxwCiAJICBGb3IgZWFjaCBzdGFsbGVkIENQVSB0aGF0IGlzIGF3YXJlIG9mIHRoZSBjdXJyZW50IFJDVSBncmFjZQogCSAgcGVyaW9kLCBwcmludCBvdXQgYWRkaXRpb25hbCBwZXItQ1BVIGRpYWdub3N0aWMgaW5mb3JtYXRpb24KQEAgLTE1ODYsNyArMTU4Nyw3IEBACiAJdHJpc3RhdGUgIlRlc3Qga3N0cnRvKigpIGZhbWlseSBvZiBmdW5jdGlvbnMgYXQgcnVudGltZSIKIAogY29uZmlnIFRFU1RfUkhBU0hUQUJMRQotCWJvb2wgIlBlcmZvcm0gc2VsZnRlc3Qgb24gcmVzaXphYmxlIGhhc2ggdGFibGUiCisJdHJpc3RhdGUgIlBlcmZvcm0gc2VsZnRlc3Qgb24gcmVzaXphYmxlIGhhc2ggdGFibGUiCiAJZGVmYXVsdCBuCiAJaGVscAogCSAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIHRlc3QgdGhlIHJoYXNodGFibGUgZnVuY3Rpb25zIGF0IGJvb3QuCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggM2MzYjMwYi4uMjVjMDYxZiAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlCisrKyBiL2xpYi9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogaWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgogT1JJR19DRkxBR1MgOj0gJChLQlVJTERfQ0ZMQUdTKQotS0JVSUxEX0NGTEFHUyA9ICQoc3Vic3QgLXBnLCwkKE9SSUdfQ0ZMQUdTKSkKK0tCVUlMRF9DRkxBR1MgPSAkKHN1YnN0ICQoQ0NfRkxBR1NfRlRSQUNFKSwsJChPUklHX0NGTEFHUykpCiBlbmRpZgogCiBsaWIteSA6PSBjdHlwZS5vIHN0cmluZy5vIHZzcHJpbnRmLm8gY21kbGluZS5vIFwKQEAgLTI0LDcgKzI0LDcgQEAKIAogb2JqLXkgKz0gYmNkLm8gZGl2NjQubyBzb3J0Lm8gcGFyc2VyLm8gaGFsZm1kNC5vIGRlYnVnX2xvY2tzLm8gcmFuZG9tMzIubyBcCiAJIGJ1c3Rfc3BpbmxvY2tzLm8gaGV4ZHVtcC5vIGthc3ByaW50Zi5vIGJpdG1hcC5vIHNjYXR0ZXJsaXN0Lm8gXAotCSBnY2QubyBsY20ubyBsaXN0X3NvcnQubyB1dWlkLm8gZmxleF9hcnJheS5vIGlvdmVjLm8gY2x6X2N0ei5vIFwKKwkgZ2NkLm8gbGNtLm8gbGlzdF9zb3J0Lm8gdXVpZC5vIGZsZXhfYXJyYXkubyBjbHpfY3R6Lm8gXAogCSBic2VhcmNoLm8gZmluZF9sYXN0X2JpdC5vIGZpbmRfbmV4dF9iaXQubyBsbGlzdC5vIG1lbXdlaWdodC5vIGtmaWZvLm8gXAogCSBwZXJjcHUtcmVmY291bnQubyBwZXJjcHVfaWRhLm8gcmhhc2h0YWJsZS5vIHJlY2lwcm9jYWxfZGl2Lm8KIG9iai15ICs9IHN0cmluZ19oZWxwZXJzLm8KQEAgLTM1LDYgKzM1LDcgQEAKIG9iai0kKENPTkZJR19URVNUX1VTRVJfQ09QWSkgKz0gdGVzdF91c2VyX2NvcHkubwogb2JqLSQoQ09ORklHX1RFU1RfQlBGKSArPSB0ZXN0X2JwZi5vCiBvYmotJChDT05GSUdfVEVTVF9GSVJNV0FSRSkgKz0gdGVzdF9maXJtd2FyZS5vCitvYmotJChDT05GSUdfVEVTVF9SSEFTSFRBQkxFKSArPSB0ZXN0X3JoYXNodGFibGUubwogCiBpZmVxICgkKENPTkZJR19ERUJVR19LT0JKRUNUKSx5KQogQ0ZMQUdTX2tvYmplY3QubyArPSAtRERFQlVHCmRpZmYgLS1naXQgYS9saWIvYml0cmV2LmMgYi9saWIvYml0cmV2LmMKaW5kZXggMzk1NjIwMy4uNDBmZmRhOSAxMDA2NDQKLS0tIGEvbGliL2JpdHJldi5jCisrKyBiL2xpYi9iaXRyZXYuYwpAQCAtMSwzICsxLDQgQEAKKyNpZm5kZWYgQ09ORklHX0hBVkVfQVJDSF9CSVRSRVZFUlNFCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KQEAgLTQyLDE4ICs0Myw0IEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYnl0ZV9yZXZfdGFibGUpOwogCi11MTYgYml0cmV2MTYodTE2IHgpCi17Ci0JcmV0dXJuIChiaXRyZXY4KHggJiAweGZmKSA8PCA4KSB8IGJpdHJldjgoeCA+PiA4KTsKLX0KLUVYUE9SVF9TWU1CT0woYml0cmV2MTYpOwotCi0vKioKLSAqIGJpdHJldjMyIC0gcmV2ZXJzZSB0aGUgb3JkZXIgb2YgYml0cyBpbiBhIHUzMiB2YWx1ZQotICogQHg6IHZhbHVlIHRvIGJlIGJpdC1yZXZlcnNlZAotICovCi11MzIgYml0cmV2MzIodTMyIHgpCi17Ci0JcmV0dXJuIChiaXRyZXYxNih4ICYgMHhmZmZmKSA8PCAxNikgfCBiaXRyZXYxNih4ID4+IDE2KTsKLX0KLUVYUE9SVF9TWU1CT0woYml0cmV2MzIpOworI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfQklUUkVWRVJTRSAqLwpkaWZmIC0tZ2l0IGEvbGliL2NoZWNrc3VtLmMgYi9saWIvY2hlY2tzdW0uYwppbmRleCAxMjk3NzVlLi44YjM5ZTg2IDEwMDY0NAotLS0gYS9saWIvY2hlY2tzdW0uYworKysgYi9saWIvY2hlY2tzdW0uYwpAQCAtMTgxLDYgKzE4MSwxNSBAQAogRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWxfY29weSk7CiAKICNpZm5kZWYgY3N1bV90Y3B1ZHBfbm9mb2xkCitzdGF0aWMgaW5saW5lIHUzMiBmcm9tNjR0bzMyKHU2NCB4KQoreworCS8qIGFkZCB1cCAzMi1iaXQgYW5kIDMyLWJpdCBmb3IgMzIrYyBiaXQgKi8KKwl4ID0gKHggJiAweGZmZmZmZmZmKSArICh4ID4+IDMyKTsKKwkvKiBhZGQgdXAgY2FycnkuLiAqLworCXggPSAoeCAmIDB4ZmZmZmZmZmYpICsgKHggPj4gMzIpOworCXJldHVybiAodTMyKXg7Cit9CisKIF9fd3N1bSBjc3VtX3RjcHVkcF9ub2ZvbGQoX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsCiAJCQl1bnNpZ25lZCBzaG9ydCBsZW4sCiAJCQl1bnNpZ25lZCBzaG9ydCBwcm90bywKQEAgLTE5NSw4ICsyMDQsNyBAQAogI2Vsc2UKIAlzICs9IChwcm90byArIGxlbikgPDwgODsKICNlbmRpZgotCXMgKz0gKHMgPj4gMzIpOwotCXJldHVybiAoX19mb3JjZSBfX3dzdW0pczsKKwlyZXR1cm4gKF9fZm9yY2UgX193c3VtKWZyb202NHRvMzIocyk7CiB9CiBFWFBPUlRfU1lNQk9MKGNzdW1fdGNwdWRwX25vZm9sZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9keW5hbWljX2RlYnVnLmMgYi9saWIvZHluYW1pY19kZWJ1Zy5jCmluZGV4IDUyNzc5OWQuLmQ4ZjNkMzEgMTAwNjQ0Ci0tLSBhL2xpYi9keW5hbWljX2RlYnVnLmMKKysrIGIvbGliL2R5bmFtaWNfZGVidWcuYwpAQCAtNjQxLDcgKzY0MSw3IEBACiBfX3NldHVwKCJkZGVidWdfcXVlcnk9IiwgZGRlYnVnX3NldHVwX3F1ZXJ5KTsKIAogLyoKLSAqIEZpbGVfb3BzLT53cml0ZSBtZXRob2QgZm9yIDxkZWJ1Z2ZzPi9keW5hbWljX2RlYnVnL2NvbnJvbC4gIEdhdGhlcnMgdGhlCisgKiBGaWxlX29wcy0+d3JpdGUgbWV0aG9kIGZvciA8ZGVidWdmcz4vZHluYW1pY19kZWJ1Zy9jb250cm9sLiAgR2F0aGVycyB0aGUKICAqIGNvbW1hbmQgdGV4dCBmcm9tIHVzZXJzcGFjZSwgcGFyc2VzIGFuZCBleGVjdXRlcyBpdC4KICAqLwogI2RlZmluZSBVU0VSX0JVRl9QQUdFIDQwOTYKZGlmZiAtLWdpdCBhL2xpYi9pb3ZlYy5jIGIvbGliL2lvdmVjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkOTljYjQuLjAwMDAwMDAKLS0tIGEvbGliL2lvdmVjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgotCi0vKgotICoJQ29weSBpb3ZlYyB0byBrZXJuZWwuIFJldHVybnMgLUVGQVVMVCBvbiBlcnJvci4KLSAqCi0gKglOb3RlOiB0aGlzIG1vZGlmaWVzIHRoZSBvcmlnaW5hbCBpb3ZlYy4KLSAqLwotCi1pbnQgbWVtY3B5X2Zyb21pb3ZlYyh1bnNpZ25lZCBjaGFyICprZGF0YSwgc3RydWN0IGlvdmVjICppb3YsIGludCBsZW4pCi17Ci0Jd2hpbGUgKGxlbiA+IDApIHsKLQkJaWYgKGlvdi0+aW92X2xlbikgewotCQkJaW50IGNvcHkgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgaW92LT5pb3ZfbGVuKTsKLQkJCWlmIChjb3B5X2Zyb21fdXNlcihrZGF0YSwgaW92LT5pb3ZfYmFzZSwgY29weSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlsZW4gLT0gY29weTsKLQkJCWtkYXRhICs9IGNvcHk7Ci0JCQlpb3YtPmlvdl9iYXNlICs9IGNvcHk7Ci0JCQlpb3YtPmlvdl9sZW4gLT0gY29weTsKLQkJfQotCQlpb3YrKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0wobWVtY3B5X2Zyb21pb3ZlYyk7Ci0KLS8qCi0gKglDb3B5IGtlcm5lbCB0byBpb3ZlYy4gUmV0dXJucyAtRUZBVUxUIG9uIGVycm9yLgotICovCi0KLWludCBtZW1jcHlfdG9pb3ZlY2VuZChjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgY2hhciAqa2RhdGEsCi0JCSAgICAgIGludCBvZmZzZXQsIGludCBsZW4pCi17Ci0JaW50IGNvcHk7Ci0JZm9yICg7IGxlbiA+IDA7ICsraW92KSB7Ci0JCS8qIFNraXAgb3ZlciB0aGUgZmluaXNoZWQgaW92ZWNzICovCi0JCWlmICh1bmxpa2VseShvZmZzZXQgPj0gaW92LT5pb3ZfbGVuKSkgewotCQkJb2Zmc2V0IC09IGlvdi0+aW92X2xlbjsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWNvcHkgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGlvdi0+aW92X2xlbiAtIG9mZnNldCwgbGVuKTsKLQkJaWYgKGNvcHlfdG9fdXNlcihpb3YtPmlvdl9iYXNlICsgb2Zmc2V0LCBrZGF0YSwgY29weSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJb2Zmc2V0ID0gMDsKLQkJa2RhdGEgKz0gY29weTsKLQkJbGVuIC09IGNvcHk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKG1lbWNweV90b2lvdmVjZW5kKTsKLQotLyoKLSAqCUNvcHkgaW92ZWMgdG8ga2VybmVsLiBSZXR1cm5zIC1FRkFVTFQgb24gZXJyb3IuCi0gKi8KLQotaW50IG1lbWNweV9mcm9taW92ZWNlbmQodW5zaWduZWQgY2hhciAqa2RhdGEsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQkJaW50IG9mZnNldCwgaW50IGxlbikKLXsKLQkvKiBObyBkYXRhPyBEb25lISAqLwotCWlmIChsZW4gPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBTa2lwIG92ZXIgdGhlIGZpbmlzaGVkIGlvdmVjcyAqLwotCXdoaWxlIChvZmZzZXQgPj0gaW92LT5pb3ZfbGVuKSB7Ci0JCW9mZnNldCAtPSBpb3YtPmlvdl9sZW47Ci0JCWlvdisrOwotCX0KLQotCXdoaWxlIChsZW4gPiAwKSB7Ci0JCXU4IF9fdXNlciAqYmFzZSA9IGlvdi0+aW92X2Jhc2UgKyBvZmZzZXQ7Ci0JCWludCBjb3B5ID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIGlvdi0+aW92X2xlbiAtIG9mZnNldCk7Ci0KLQkJb2Zmc2V0ID0gMDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGtkYXRhLCBiYXNlLCBjb3B5KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlsZW4gLT0gY29weTsKLQkJa2RhdGEgKz0gY29weTsKLQkJaW92Kys7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKG1lbWNweV9mcm9taW92ZWNlbmQpOwpkaWZmIC0tZ2l0IGEvbGliL21waS9tcGktY21wLmMgYi9saWIvbXBpL21waS1jbXAuYwppbmRleCAxODcxZTdiLi5kMjVlOWU5IDEwMDY0NAotLS0gYS9saWIvbXBpL21waS1jbXAuYworKysgYi9saWIvbXBpL21waS1jbXAuYwpAQCAtNTcsMTQgKzU3LDEyIEBACiAJaWYgKHVzaXplICE9IHZzaXplICYmICF1LT5zaWduICYmICF2LT5zaWduKQogCQlyZXR1cm4gdXNpemUgLSB2c2l6ZTsKIAlpZiAodXNpemUgIT0gdnNpemUgJiYgdS0+c2lnbiAmJiB2LT5zaWduKQotCQlyZXR1cm4gdnNpemUgKyB1c2l6ZTsKKwkJcmV0dXJuIHZzaXplIC0gdXNpemU7CiAJaWYgKCF1c2l6ZSkKIAkJcmV0dXJuIDA7CiAJY21wID0gbXBpaGVscF9jbXAodS0+ZCwgdi0+ZCwgdXNpemUpOwotCWlmICghY21wKQotCQlyZXR1cm4gMDsKLQlpZiAoKGNtcCA8IDAgPyAxIDogMCkgPT0gKHUtPnNpZ24gPyAxIDogMCkpCi0JCXJldHVybiAxOwotCXJldHVybiAtMTsKKwlpZiAodS0+c2lnbikKKwkJcmV0dXJuIC1jbXA7CisJcmV0dXJuIGNtcDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG1waV9jbXApOwpkaWZmIC0tZ2l0IGEvbGliL21waS9tcGktaW50ZXJuYWwuaCBiL2xpYi9tcGkvbXBpLWludGVybmFsLmgKaW5kZXggNjBjZjc2NS4uYzY1ZGQxYiAxMDA2NDQKLS0tIGEvbGliL21waS9tcGktaW50ZXJuYWwuaAorKysgYi9saWIvbXBpL21waS1pbnRlcm5hbC5oCkBAIC04NCw3ICs4NCw3IEBACiAJZG8gewkJCQkJXAogCQltcGlfc2l6ZV90IF9pOwkJCVwKIAkJZm9yIChfaSA9IDA7IF9pIDwgKG4pOyBfaSsrKQlcCi0JCQkoZClbX2ldID0gKGQpW19pXTsJXAorCQkJKGQpW19pXSA9IChzKVtfaV07CVwKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIE1QTl9DT1BZX0RFQ1IoZCwgcywgbikgXApkaWZmIC0tZ2l0IGEvbGliL3JoYXNodGFibGUuYyBiL2xpYi9yaGFzaHRhYmxlLmMKaW5kZXggNmMzYzcyMy4uOWNjNGM0YSAxMDA2NDQKLS0tIGEvbGliL3JoYXNodGFibGUuYworKysgYi9saWIvcmhhc2h0YWJsZS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFJlc2l6YWJsZSwgU2NhbGFibGUsIENvbmN1cnJlbnQgSGFzaCBUYWJsZQogICoKLSAqIENvcHlyaWdodCAoYykgMjAxNCBUaG9tYXMgR3JhZiA8dGdyYWZAc3V1Zy5jaD4KKyAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1IFRob21hcyBHcmFmIDx0Z3JhZkBzdXVnLmNoPgogICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTQgUGF0cmljayBNY0hhcmR5IDxrYWJlckB0cmFzaC5uZXQ+CiAgKgogICogQmFzZWQgb24gdGhlIGZvbGxvd2luZyBwYXBlcjoKQEAgLTIzLDk0ICsyMywyMDMgQEAKICNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3JoYXNodGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAogI2RlZmluZSBIQVNIX0RFRkFVTFRfU0laRQk2NFVMCiAjZGVmaW5lIEhBU0hfTUlOX1NJWkUJCTRVTAorI2RlZmluZSBCVUNLRVRfTE9DS1NfUEVSX0NQVSAgIDEyOFVMCiAKLSNkZWZpbmUgQVNTRVJUX1JIVF9NVVRFWChIVCkgQlVHX09OKCFsb2NrZGVwX3JodF9tdXRleF9pc19oZWxkKEhUKSkKKy8qIEJhc2UgYml0cyBwbHVzIDEgYml0IGZvciBudWxscyBtYXJrZXIgKi8KKyNkZWZpbmUgSEFTSF9SRVNFUlZFRF9TUEFDRQkoUkhUX0JBU0VfQklUUyArIDEpCiAKLSNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORwotaW50IGxvY2tkZXBfcmh0X211dGV4X2lzX2hlbGQoY29uc3Qgc3RydWN0IHJoYXNodGFibGUgKmh0KQorZW51bSB7CisJUkhUX0xPQ0tfTk9STUFMLAorCVJIVF9MT0NLX05FU1RFRCwKK307CisKKy8qIFRoZSBidWNrZXQgbG9jayBpcyBzZWxlY3RlZCBiYXNlZCBvbiB0aGUgaGFzaCBhbmQgcHJvdGVjdHMgbXV0YXRpb25zCisgKiBvbiBhIGdyb3VwIG9mIGhhc2ggYnVja2V0cy4KKyAqCisgKiBBIG1heGltdW0gb2YgdGJsLT5zaXplLzIgYnVja2V0IGxvY2tzIGlzIGFsbG9jYXRlZC4gVGhpcyBlbnN1cmVzIHRoYXQKKyAqIGEgc2luZ2xlIGxvY2sgYWx3YXlzIGNvdmVycyBib3RoIGJ1Y2tldHMgd2hpY2ggbWF5IGJvdGggY29udGFpbnMKKyAqIGVudHJpZXMgd2hpY2ggbGluayB0byB0aGUgc2FtZSBidWNrZXQgb2YgdGhlIG9sZCB0YWJsZSBkdXJpbmcgcmVzaXppbmcuCisgKiBUaGlzIGFsbG93cyB0byBzaW1wbGlmeSB0aGUgbG9ja2luZyBhcyBsb2NraW5nIHRoZSBidWNrZXQgaW4gYm90aAorICogdGFibGVzIGR1cmluZyByZXNpemUgYWx3YXlzIGd1YXJhbnRlZSBwcm90ZWN0aW9uLgorICoKKyAqIElNUE9SVEFOVDogV2hlbiBob2xkaW5nIHRoZSBidWNrZXQgbG9jayBvZiBib3RoIHRoZSBvbGQgYW5kIG5ldyB0YWJsZQorICogZHVyaW5nIGV4cGFuc2lvbnMgYW5kIHNocmlua2luZywgdGhlIG9sZCBidWNrZXQgbG9jayBtdXN0IGFsd2F5cyBiZQorICogYWNxdWlyZWQgZmlyc3QuCisgKi8KK3N0YXRpYyBzcGlubG9ja190ICpidWNrZXRfbG9jayhjb25zdCBzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsIHUzMiBoYXNoKQogewotCXJldHVybiBodC0+cC5tdXRleF9pc19oZWxkKGh0LT5wLnBhcmVudCk7CisJcmV0dXJuICZ0YmwtPmxvY2tzW2hhc2ggJiB0YmwtPmxvY2tzX21hc2tdOwogfQotRVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZCk7Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgKnJodF9vYmooY29uc3Qgc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCBzdHJ1Y3Qgcmhhc2hfaGVhZCAqaGUpCiB7CiAJcmV0dXJuICh2b2lkICopIGhlIC0gaHQtPnAuaGVhZF9vZmZzZXQ7CiB9CiAKLXN0YXRpYyB1MzIgX19oYXNoZm4oY29uc3Qgc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICprZXksCi0JCSAgICAgIHUzMiBsZW4sIHUzMiBoc2l6ZSkKK3N0YXRpYyB1MzIgcmh0X2J1Y2tldF9pbmRleChjb25zdCBzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsIHUzMiBoYXNoKQogewotCXUzMiBoOwotCi0JaCA9IGh0LT5wLmhhc2hmbihrZXksIGxlbiwgaHQtPnAuaGFzaF9ybmQpOwotCi0JcmV0dXJuIGggJiAoaHNpemUgLSAxKTsKKwlyZXR1cm4gaGFzaCAmICh0YmwtPnNpemUgLSAxKTsKIH0KIAotLyoqCi0gKiByaGFzaHRhYmxlX2hhc2hmbiAtIGNvbXB1dGUgaGFzaCBmb3Iga2V5IG9mIGdpdmVuIGxlbmd0aAotICogQGh0OgkJaGFzaCB0YWJsZSB0byBjb21wdXRlIGZvcgotICogQGtleToJcG9pbnRlciB0byBrZXkKLSAqIEBsZW46CWxlbmd0aCBvZiBrZXkKLSAqCi0gKiBDb21wdXRlcyB0aGUgaGFzaCB2YWx1ZSB1c2luZyB0aGUgaGFzaCBmdW5jdGlvbiBwcm92aWRlZCBpbiB0aGUgJ2hhc2hmbicKLSAqIG9mIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcy4gVGhlIHJldHVybmVkIHZhbHVlIGlzIGd1YXJhbnRlZWQgdG8gYmUKLSAqIHNtYWxsZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGJ1Y2tldHMgaW4gdGhlIGhhc2ggdGFibGUuCi0gKi8KLXUzMiByaGFzaHRhYmxlX2hhc2hmbihjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSwgdTMyIGxlbikKK3N0YXRpYyB1MzIgb2JqX3Jhd19oYXNoZm4oY29uc3Qgc3RydWN0IHJoYXNodGFibGUgKmh0LCBjb25zdCB2b2lkICpwdHIpCiB7Ci0Jc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsID0gcmh0X2RlcmVmZXJlbmNlX3JjdShodC0+dGJsLCBodCk7CisJdTMyIGhhc2g7CiAKLQlyZXR1cm4gX19oYXNoZm4oaHQsIGtleSwgbGVuLCB0YmwtPnNpemUpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9oYXNoZm4pOworCWlmICh1bmxpa2VseSghaHQtPnAua2V5X2xlbikpCisJCWhhc2ggPSBodC0+cC5vYmpfaGFzaGZuKHB0ciwgaHQtPnAuaGFzaF9ybmQpOworCWVsc2UKKwkJaGFzaCA9IGh0LT5wLmhhc2hmbihwdHIgKyBodC0+cC5rZXlfb2Zmc2V0LCBodC0+cC5rZXlfbGVuLAorCQkJCSAgICBodC0+cC5oYXNoX3JuZCk7CiAKLXN0YXRpYyB1MzIgb2JqX2hhc2hmbihjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKnB0ciwgdTMyIGhzaXplKQotewotCWlmICh1bmxpa2VseSghaHQtPnAua2V5X2xlbikpIHsKLQkJdTMyIGg7Ci0KLQkJaCA9IGh0LT5wLm9ial9oYXNoZm4ocHRyLCBodC0+cC5oYXNoX3JuZCk7Ci0KLQkJcmV0dXJuIGggJiAoaHNpemUgLSAxKTsKLQl9Ci0KLQlyZXR1cm4gX19oYXNoZm4oaHQsIHB0ciArIGh0LT5wLmtleV9vZmZzZXQsIGh0LT5wLmtleV9sZW4sIGhzaXplKTsKKwlyZXR1cm4gaGFzaCA+PiBIQVNIX1JFU0VSVkVEX1NQQUNFOwogfQogCi0vKioKLSAqIHJoYXNodGFibGVfb2JqX2hhc2hmbiAtIGNvbXB1dGUgaGFzaCBmb3IgaGFzaGVkIG9iamVjdAotICogQGh0OgkJaGFzaCB0YWJsZSB0byBjb21wdXRlIGZvcgotICogQHB0cjoJcG9pbnRlciB0byBoYXNoZWQgb2JqZWN0Ci0gKgotICogQ29tcHV0ZXMgdGhlIGhhc2ggdmFsdWUgdXNpbmcgdGhlIGhhc2ggZnVuY3Rpb24gYGhhc2hmbmAgcmVzcGVjdGl2ZWx5Ci0gKiAnb2JqX2hhc2hmbicgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGhhc2ggdGFibGUgaXMgc2V0IHVwIHRvIHdvcmsgd2l0aAotICogYSBmaXhlZCBsZW5ndGgga2V5LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgZ3VhcmFudGVlZCB0byBiZSBzbWFsbGVyIHRoYW4KLSAqIHRoZSBudW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgaGFzaCB0YWJsZS4KLSAqLwotdTMyIHJoYXNodGFibGVfb2JqX2hhc2hmbihjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIHZvaWQgKnB0cikKK3N0YXRpYyB1MzIga2V5X2hhc2hmbihzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSwgdTMyIGxlbikKIHsKLQlzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwgPSByaHRfZGVyZWZlcmVuY2VfcmN1KGh0LT50YmwsIGh0KTsKLQotCXJldHVybiBvYmpfaGFzaGZuKGh0LCBwdHIsIHRibC0+c2l6ZSk7CisJcmV0dXJuIGh0LT5wLmhhc2hmbihrZXksIGxlbiwgaHQtPnAuaGFzaF9ybmQpID4+IEhBU0hfUkVTRVJWRURfU1BBQ0U7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX29ial9oYXNoZm4pOwogCiBzdGF0aWMgdTMyIGhlYWRfaGFzaGZuKGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlICpodCwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCByaGFzaF9oZWFkICpoZSwgdTMyIGhzaXplKQorCQkgICAgICAgY29uc3Qgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLAorCQkgICAgICAgY29uc3Qgc3RydWN0IHJoYXNoX2hlYWQgKmhlKQogewotCXJldHVybiBvYmpfaGFzaGZuKGh0LCByaHRfb2JqKGh0LCBoZSksIGhzaXplKTsKKwlyZXR1cm4gcmh0X2J1Y2tldF9pbmRleCh0YmwsIG9ial9yYXdfaGFzaGZuKGh0LCByaHRfb2JqKGh0LCBoZSkpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBidWNrZXRfdGFibGUgKmJ1Y2tldF90YWJsZV9hbGxvYyhzaXplX3QgbmJ1Y2tldHMpCisjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKK3N0YXRpYyB2b2lkIGRlYnVnX2R1bXBfYnVja2V0cyhjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsKQoreworCXN0cnVjdCByaGFzaF9oZWFkICpoZTsKKwl1bnNpZ25lZCBpbnQgaSwgaGFzaDsKKworCWZvciAoaSA9IDA7IGkgPCB0YmwtPnNpemU7IGkrKykgeworCQlwcl93YXJuKCIgW0J1Y2tldCAlZF0gIiwgaSk7CisJCXJodF9mb3JfZWFjaF9yY3UoaGUsIHRibCwgaSkgeworCQkJaGFzaCA9IGhlYWRfaGFzaGZuKGh0LCB0YmwsIGhlKTsKKwkJCXByX2NvbnQoIltoYXNoID0gJSN4LCBsb2NrID0gJXBdICIsCisJCQkJaGFzaCwgYnVja2V0X2xvY2sodGJsLCBoYXNoKSk7CisJCX0KKwkJcHJfY29udCgiXG4iKTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgZGVidWdfZHVtcF90YWJsZShzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGhhc2gpCit7CisJc3RydWN0IGJ1Y2tldF90YWJsZSAqb2xkX3RibCwgKmZ1dHVyZV90Ymw7CisKKwlwcl9lbWVyZygiQlVHOiBsb2NrIGZvciBoYXNoICUjeCBpbiB0YWJsZSAlcCBub3QgaGVsZFxuIiwKKwkJIGhhc2gsIHRibCk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJZnV0dXJlX3RibCA9IHJodF9kZXJlZmVyZW5jZV9yY3UoaHQtPmZ1dHVyZV90YmwsIGh0KTsKKwlvbGRfdGJsID0gcmh0X2RlcmVmZXJlbmNlX3JjdShodC0+dGJsLCBodCk7CisJaWYgKGZ1dHVyZV90YmwgIT0gb2xkX3RibCkgeworCQlwcl93YXJuKCJGdXR1cmUgdGFibGUgJXAgKHNpemU6ICV6ZClcbiIsCisJCQlmdXR1cmVfdGJsLCBmdXR1cmVfdGJsLT5zaXplKTsKKwkJZGVidWdfZHVtcF9idWNrZXRzKGh0LCBmdXR1cmVfdGJsKTsKKwl9CisKKwlwcl93YXJuKCJUYWJsZSAlcCAoc2l6ZTogJXpkKVxuIiwgb2xkX3RibCwgb2xkX3RibC0+c2l6ZSk7CisJZGVidWdfZHVtcF9idWNrZXRzKGh0LCBvbGRfdGJsKTsKKworCXJjdV9yZWFkX3VubG9jaygpOworfQorCisjZGVmaW5lIEFTU0VSVF9SSFRfTVVURVgoSFQpIEJVR19PTighbG9ja2RlcF9yaHRfbXV0ZXhfaXNfaGVsZChIVCkpCisjZGVmaW5lIEFTU0VSVF9CVUNLRVRfTE9DSyhIVCwgVEJMLCBIQVNIKQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlpZiAodW5saWtlbHkoIWxvY2tkZXBfcmh0X2J1Y2tldF9pc19oZWxkKFRCTCwgSEFTSCkpKSB7CVwKKwkJCWRlYnVnX2R1bXBfdGFibGUoSFQsIFRCTCwgSEFTSCk7CQlcCisJCQlCVUcoKTsJCQkJCQlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKK2ludCBsb2NrZGVwX3JodF9tdXRleF9pc19oZWxkKHN0cnVjdCByaGFzaHRhYmxlICpodCkKK3sKKwlyZXR1cm4gKGRlYnVnX2xvY2tzKSA/IGxvY2tkZXBfaXNfaGVsZCgmaHQtPm11dGV4KSA6IDE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsb2NrZGVwX3JodF9tdXRleF9pc19oZWxkKTsKKworaW50IGxvY2tkZXBfcmh0X2J1Y2tldF9pc19oZWxkKGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCwgdTMyIGhhc2gpCit7CisJc3BpbmxvY2tfdCAqbG9jayA9IGJ1Y2tldF9sb2NrKHRibCwgaGFzaCk7CisKKwlyZXR1cm4gKGRlYnVnX2xvY2tzKSA/IGxvY2tkZXBfaXNfaGVsZChsb2NrKSA6IDE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsb2NrZGVwX3JodF9idWNrZXRfaXNfaGVsZCk7CisjZWxzZQorI2RlZmluZSBBU1NFUlRfUkhUX01VVEVYKEhUKQorI2RlZmluZSBBU1NFUlRfQlVDS0VUX0xPQ0soSFQsIFRCTCwgSEFTSCkKKyNlbmRpZgorCisKK3N0YXRpYyBzdHJ1Y3Qgcmhhc2hfaGVhZCBfX3JjdSAqKmJ1Y2tldF90YWlsKHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCwgdTMyIG4pCit7CisJc3RydWN0IHJoYXNoX2hlYWQgX19yY3UgKipwcHJldjsKKworCWZvciAocHByZXYgPSAmdGJsLT5idWNrZXRzW25dOworCSAgICAgIXJodF9pc19hX251bGxzKHJodF9kZXJlZmVyZW5jZV9idWNrZXQoKnBwcmV2LCB0YmwsIG4pKTsKKwkgICAgIHBwcmV2ID0gJnJodF9kZXJlZmVyZW5jZV9idWNrZXQoKnBwcmV2LCB0YmwsIG4pLT5uZXh0KQorCQk7CisKKwlyZXR1cm4gcHByZXY7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfYnVja2V0X2xvY2tzKHN0cnVjdCByaGFzaHRhYmxlICpodCwgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsKQoreworCXVuc2lnbmVkIGludCBpLCBzaXplOworI2lmIGRlZmluZWQoQ09ORklHX1BST1ZFX0xPQ0tJTkcpCisJdW5zaWduZWQgaW50IG5yX3BjcHVzID0gMjsKKyNlbHNlCisJdW5zaWduZWQgaW50IG5yX3BjcHVzID0gbnVtX3Bvc3NpYmxlX2NwdXMoKTsKKyNlbmRpZgorCisJbnJfcGNwdXMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIG5yX3BjcHVzLCAzMlVMKTsKKwlzaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKG5yX3BjcHVzICogaHQtPnAubG9ja3NfbXVsKTsKKworCS8qIE5ldmVyIGFsbG9jYXRlIG1vcmUgdGhhbiAwLjUgbG9ja3MgcGVyIGJ1Y2tldCAqLworCXNpemUgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHNpemUsIHRibC0+c2l6ZSA+PiAxKTsKKworCWlmIChzaXplb2Yoc3BpbmxvY2tfdCkgIT0gMCkgeworI2lmZGVmIENPTkZJR19OVU1BCisJCWlmIChzaXplICogc2l6ZW9mKHNwaW5sb2NrX3QpID4gUEFHRV9TSVpFKQorCQkJdGJsLT5sb2NrcyA9IHZtYWxsb2Moc2l6ZSAqIHNpemVvZihzcGlubG9ja190KSk7CisJCWVsc2UKKyNlbmRpZgorCQl0YmwtPmxvY2tzID0ga21hbGxvY19hcnJheShzaXplLCBzaXplb2Yoc3BpbmxvY2tfdCksCisJCQkJCSAgIEdGUF9LRVJORUwpOworCQlpZiAoIXRibC0+bG9ja3MpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJCXNwaW5fbG9ja19pbml0KCZ0YmwtPmxvY2tzW2ldKTsKKwl9CisJdGJsLT5sb2Nrc19tYXNrID0gc2l6ZSAtIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYnVja2V0X3RhYmxlX2ZyZWUoY29uc3Qgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsKQoreworCWlmICh0YmwpCisJCWt2ZnJlZSh0YmwtPmxvY2tzKTsKKworCWt2ZnJlZSh0YmwpOworfQorCitzdGF0aWMgc3RydWN0IGJ1Y2tldF90YWJsZSAqYnVja2V0X3RhYmxlX2FsbG9jKHN0cnVjdCByaGFzaHRhYmxlICpodCwKKwkJCQkJICAgICAgIHNpemVfdCBuYnVja2V0cykKIHsKIAlzdHJ1Y3QgYnVja2V0X3RhYmxlICp0Ymw7CiAJc2l6ZV90IHNpemU7CisJaW50IGk7CiAKIAlzaXplID0gc2l6ZW9mKCp0YmwpICsgbmJ1Y2tldHMgKiBzaXplb2YodGJsLT5idWNrZXRzWzBdKTsKIAl0YmwgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwgfCBfX0dGUF9OT1dBUk4pOwpAQCAtMTIyLDEyICsyMzEsMTUgQEAKIAogCXRibC0+c2l6ZSA9IG5idWNrZXRzOwogCi0JcmV0dXJuIHRibDsKLX0KKwlpZiAoYWxsb2NfYnVja2V0X2xvY2tzKGh0LCB0YmwpIDwgMCkgeworCQlidWNrZXRfdGFibGVfZnJlZSh0YmwpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLXN0YXRpYyB2b2lkIGJ1Y2tldF90YWJsZV9mcmVlKGNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCkKLXsKLQlrdmZyZWUodGJsKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmJ1Y2tldHM7IGkrKykKKwkJSU5JVF9SSFRfTlVMTFNfSEVBRCh0YmwtPmJ1Y2tldHNbaV0sIGh0LCBpKTsKKworCXJldHVybiB0Ymw7CiB9CiAKIC8qKgpAQCAtMTM4LDcgKzI1MCw4IEBACiBib29sIHJodF9ncm93X2Fib3ZlXzc1KGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlICpodCwgc2l6ZV90IG5ld19zaXplKQogewogCS8qIEV4cGFuZCB0YWJsZSB3aGVuIGV4Y2VlZGluZyA3NSUgbG9hZCAqLwotCXJldHVybiBodC0+bmVsZW1zID4gKG5ld19zaXplIC8gNCAqIDMpOworCXJldHVybiBhdG9taWNfcmVhZCgmaHQtPm5lbGVtcykgPiAobmV3X3NpemUgLyA0ICogMykgJiYKKwkgICAgICAgKGh0LT5wLm1heF9zaGlmdCAmJiBhdG9taWNfcmVhZCgmaHQtPnNoaWZ0KSA8IGh0LT5wLm1heF9zaGlmdCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaHRfZ3Jvd19hYm92ZV83NSk7CiAKQEAgLTE1MCw0MSArMjYzLDc1IEBACiBib29sIHJodF9zaHJpbmtfYmVsb3dfMzAoY29uc3Qgc3RydWN0IHJoYXNodGFibGUgKmh0LCBzaXplX3QgbmV3X3NpemUpCiB7CiAJLyogU2hyaW5rIHRhYmxlIGJlbmVhdGggMzAlIGxvYWQgKi8KLQlyZXR1cm4gaHQtPm5lbGVtcyA8IChuZXdfc2l6ZSAqIDMgLyAxMCk7CisJcmV0dXJuIGF0b21pY19yZWFkKCZodC0+bmVsZW1zKSA8IChuZXdfc2l6ZSAqIDMgLyAxMCkgJiYKKwkgICAgICAgKGF0b21pY19yZWFkKCZodC0+c2hpZnQpID4gaHQtPnAubWluX3NoaWZ0KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJodF9zaHJpbmtfYmVsb3dfMzApOwogCi1zdGF0aWMgdm9pZCBoYXNodGFibGVfY2hhaW5fdW56aXAoY29uc3Qgc3RydWN0IHJoYXNodGFibGUgKmh0LAorc3RhdGljIHZvaWQgbG9ja19idWNrZXRzKHN0cnVjdCBidWNrZXRfdGFibGUgKm5ld190YmwsCisJCQkgc3RydWN0IGJ1Y2tldF90YWJsZSAqb2xkX3RibCwgdW5zaWduZWQgaW50IGhhc2gpCisJX19hY3F1aXJlcyhvbGRfYnVja2V0X2xvY2spCit7CisJc3Bpbl9sb2NrX2JoKGJ1Y2tldF9sb2NrKG9sZF90YmwsIGhhc2gpKTsKKwlpZiAobmV3X3RibCAhPSBvbGRfdGJsKQorCQlzcGluX2xvY2tfYmhfbmVzdGVkKGJ1Y2tldF9sb2NrKG5ld190YmwsIGhhc2gpLAorCQkJCSAgICBSSFRfTE9DS19ORVNURUQpOworfQorCitzdGF0aWMgdm9pZCB1bmxvY2tfYnVja2V0cyhzdHJ1Y3QgYnVja2V0X3RhYmxlICpuZXdfdGJsLAorCQkJICAgc3RydWN0IGJ1Y2tldF90YWJsZSAqb2xkX3RibCwgdW5zaWduZWQgaW50IGhhc2gpCisJX19yZWxlYXNlcyhvbGRfYnVja2V0X2xvY2spCit7CisJaWYgKG5ld190YmwgIT0gb2xkX3RibCkKKwkJc3Bpbl91bmxvY2tfYmgoYnVja2V0X2xvY2sobmV3X3RibCwgaGFzaCkpOworCXNwaW5fdW5sb2NrX2JoKGJ1Y2tldF9sb2NrKG9sZF90YmwsIGhhc2gpKTsKK30KKworLyoqCisgKiBVbmxpbmsgZW50cmllcyBvbiBidWNrZXQgd2hpY2ggaGFzaCB0byBkaWZmZXJlbnQgYnVja2V0LgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBubyBtb3JlIHdvcmsgbmVlZHMgdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSBidWNrZXQuCisgKi8KK3N0YXRpYyBib29sIGhhc2h0YWJsZV9jaGFpbl91bnppcChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsCiAJCQkJICBjb25zdCBzdHJ1Y3QgYnVja2V0X3RhYmxlICpuZXdfdGJsLAotCQkJCSAgc3RydWN0IGJ1Y2tldF90YWJsZSAqb2xkX3RibCwgc2l6ZV90IG4pCisJCQkJICBzdHJ1Y3QgYnVja2V0X3RhYmxlICpvbGRfdGJsLAorCQkJCSAgc2l6ZV90IG9sZF9oYXNoKQogewogCXN0cnVjdCByaGFzaF9oZWFkICpoZSwgKnAsICpuZXh0OwotCXVuc2lnbmVkIGludCBoOworCXVuc2lnbmVkIGludCBuZXdfaGFzaCwgbmV3X2hhc2gyOworCisJQVNTRVJUX0JVQ0tFVF9MT0NLKGh0LCBvbGRfdGJsLCBvbGRfaGFzaCk7CiAKIAkvKiBPbGQgYnVja2V0IGVtcHR5LCBubyB3b3JrIG5lZWRlZC4gKi8KLQlwID0gcmh0X2RlcmVmZXJlbmNlKG9sZF90YmwtPmJ1Y2tldHNbbl0sIGh0KTsKLQlpZiAoIXApCi0JCXJldHVybjsKKwlwID0gcmh0X2RlcmVmZXJlbmNlX2J1Y2tldChvbGRfdGJsLT5idWNrZXRzW29sZF9oYXNoXSwgb2xkX3RibCwKKwkJCQkgICBvbGRfaGFzaCk7CisJaWYgKHJodF9pc19hX251bGxzKHApKQorCQlyZXR1cm4gZmFsc2U7CisKKwluZXdfaGFzaCA9IGhlYWRfaGFzaGZuKGh0LCBuZXdfdGJsLCBwKTsKKwlBU1NFUlRfQlVDS0VUX0xPQ0soaHQsIG5ld190YmwsIG5ld19oYXNoKTsKIAogCS8qIEFkdmFuY2UgdGhlIG9sZCBidWNrZXQgcG9pbnRlciBvbmUgb3IgbW9yZSB0aW1lcyB1bnRpbCBpdAogCSAqIHJlYWNoZXMgYSBub2RlIHRoYXQgZG9lc24ndCBoYXNoIHRvIHRoZSBzYW1lIGJ1Y2tldCBhcyB0aGUKIAkgKiBwcmV2aW91cyBub2RlIHAuIENhbGwgdGhlIHByZXZpb3VzIG5vZGUgcDsKIAkgKi8KLQloID0gaGVhZF9oYXNoZm4oaHQsIHAsIG5ld190YmwtPnNpemUpOwotCXJodF9mb3JfZWFjaChoZSwgcC0+bmV4dCwgaHQpIHsKLQkJaWYgKGhlYWRfaGFzaGZuKGh0LCBoZSwgbmV3X3RibC0+c2l6ZSkgIT0gaCkKKwlyaHRfZm9yX2VhY2hfY29udGludWUoaGUsIHAtPm5leHQsIG9sZF90YmwsIG9sZF9oYXNoKSB7CisJCW5ld19oYXNoMiA9IGhlYWRfaGFzaGZuKGh0LCBuZXdfdGJsLCBoZSk7CisJCUFTU0VSVF9CVUNLRVRfTE9DSyhodCwgbmV3X3RibCwgbmV3X2hhc2gyKTsKKworCQlpZiAobmV3X2hhc2ggIT0gbmV3X2hhc2gyKQogCQkJYnJlYWs7CiAJCXAgPSBoZTsKIAl9Ci0JUkNVX0lOSVRfUE9JTlRFUihvbGRfdGJsLT5idWNrZXRzW25dLCBwLT5uZXh0KTsKKwlyY3VfYXNzaWduX3BvaW50ZXIob2xkX3RibC0+YnVja2V0c1tvbGRfaGFzaF0sIHAtPm5leHQpOwogCiAJLyogRmluZCB0aGUgc3Vic2VxdWVudCBub2RlIHdoaWNoIGRvZXMgaGFzaCB0byB0aGUgc2FtZQogCSAqIGJ1Y2tldCBhcyBub2RlIFAsIG9yIE5VTEwgaWYgbm8gc3VjaCBub2RlIGV4aXN0cy4KIAkgKi8KLQluZXh0ID0gTlVMTDsKLQlpZiAoaGUpIHsKLQkJcmh0X2Zvcl9lYWNoKGhlLCBoZS0+bmV4dCwgaHQpIHsKLQkJCWlmIChoZWFkX2hhc2hmbihodCwgaGUsIG5ld190YmwtPnNpemUpID09IGgpIHsKKwlJTklUX1JIVF9OVUxMU19IRUFEKG5leHQsIGh0LCBvbGRfaGFzaCk7CisJaWYgKCFyaHRfaXNfYV9udWxscyhoZSkpIHsKKwkJcmh0X2Zvcl9lYWNoX2NvbnRpbnVlKGhlLCBoZS0+bmV4dCwgb2xkX3RibCwgb2xkX2hhc2gpIHsKKwkJCWlmIChoZWFkX2hhc2hmbihodCwgbmV3X3RibCwgaGUpID09IG5ld19oYXNoKSB7CiAJCQkJbmV4dCA9IGhlOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTk0LDcgKzM0MSwyMCBAQAogCS8qIFNldCBwJ3MgbmV4dCBwb2ludGVyIHRvIHRoYXQgc3Vic2VxdWVudCBub2RlIHBvaW50ZXIsCiAJICogYnlwYXNzaW5nIHRoZSBub2RlcyB3aGljaCBkbyBub3QgaGFzaCB0byBwJ3MgYnVja2V0CiAJICovCi0JUkNVX0lOSVRfUE9JTlRFUihwLT5uZXh0LCBuZXh0KTsKKwlyY3VfYXNzaWduX3BvaW50ZXIocC0+bmV4dCwgbmV4dCk7CisKKwlwID0gcmh0X2RlcmVmZXJlbmNlX2J1Y2tldChvbGRfdGJsLT5idWNrZXRzW29sZF9oYXNoXSwgb2xkX3RibCwKKwkJCQkgICBvbGRfaGFzaCk7CisKKwlyZXR1cm4gIXJodF9pc19hX251bGxzKHApOworfQorCitzdGF0aWMgdm9pZCBsaW5rX29sZF90b19uZXcoc3RydWN0IHJoYXNodGFibGUgKmh0LCBzdHJ1Y3QgYnVja2V0X3RhYmxlICpuZXdfdGJsLAorCQkJICAgIHVuc2lnbmVkIGludCBuZXdfaGFzaCwgc3RydWN0IHJoYXNoX2hlYWQgKmVudHJ5KQoreworCUFTU0VSVF9CVUNLRVRfTE9DSyhodCwgbmV3X3RibCwgbmV3X2hhc2gpOworCisJcmN1X2Fzc2lnbl9wb2ludGVyKCpidWNrZXRfdGFpbChuZXdfdGJsLCBuZXdfaGFzaCksIGVudHJ5KTsKIH0KIAogLyoqCkBAIC0yMDcsNTMgKzM2Nyw1NyBAQAogICogVGhpcyBmdW5jdGlvbiBtYXkgb25seSBiZSBjYWxsZWQgaW4gYSBjb250ZXh0IHdoZXJlIGl0IGlzIHNhZmUgdG8gY2FsbAogICogc3luY2hyb25pemVfcmN1KCksIGUuZy4gbm90IHdpdGhpbiBhIHJjdV9yZWFkX2xvY2soKSBzZWN0aW9uLgogICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCBubyBjb25jdXJyZW50IHRhYmxlIG11dGF0aW9ucyB0YWtlIHBsYWNlLgotICogSXQgaXMgaG93ZXZlciB2YWxpZCB0byBoYXZlIGNvbmN1cnJlbnQgbG9va3VwcyBpZiB0aGV5IGFyZSBSQ1UgcHJvdGVjdGVkLgorICogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IG5vIGNvbmN1cnJlbnQgcmVzaXppbmcgb2NjdXJzIGJ5IGhvbGRpbmcKKyAqIGh0LT5tdXRleC4KKyAqCisgKiBJdCBpcyB2YWxpZCB0byBoYXZlIGNvbmN1cnJlbnQgaW5zZXJ0aW9ucyBhbmQgZGVsZXRpb25zIHByb3RlY3RlZCBieSBwZXIKKyAqIGJ1Y2tldCBsb2NrcyBvciBjb25jdXJyZW50IFJDVSBwcm90ZWN0ZWQgbG9va3VwcyBhbmQgdHJhdmVyc2Fscy4KICAqLwogaW50IHJoYXNodGFibGVfZXhwYW5kKHN0cnVjdCByaGFzaHRhYmxlICpodCkKIHsKIAlzdHJ1Y3QgYnVja2V0X3RhYmxlICpuZXdfdGJsLCAqb2xkX3RibCA9IHJodF9kZXJlZmVyZW5jZShodC0+dGJsLCBodCk7CiAJc3RydWN0IHJoYXNoX2hlYWQgKmhlOwotCXVuc2lnbmVkIGludCBpLCBoOwotCWJvb2wgY29tcGxldGU7CisJdW5zaWduZWQgaW50IG5ld19oYXNoLCBvbGRfaGFzaDsKKwlib29sIGNvbXBsZXRlID0gZmFsc2U7CiAKIAlBU1NFUlRfUkhUX01VVEVYKGh0KTsKIAotCWlmIChodC0+cC5tYXhfc2hpZnQgJiYgaHQtPnNoaWZ0ID49IGh0LT5wLm1heF9zaGlmdCkKLQkJcmV0dXJuIDA7Ci0KLQluZXdfdGJsID0gYnVja2V0X3RhYmxlX2FsbG9jKG9sZF90YmwtPnNpemUgKiAyKTsKKwluZXdfdGJsID0gYnVja2V0X3RhYmxlX2FsbG9jKGh0LCBvbGRfdGJsLT5zaXplICogMik7CiAJaWYgKG5ld190YmwgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlodC0+c2hpZnQrKzsKKwlhdG9taWNfaW5jKCZodC0+c2hpZnQpOwogCi0JLyogRm9yIGVhY2ggbmV3IGJ1Y2tldCwgc2VhcmNoIHRoZSBjb3JyZXNwb25kaW5nIG9sZCBidWNrZXQKLQkgKiBmb3IgdGhlIGZpcnN0IGVudHJ5IHRoYXQgaGFzaGVzIHRvIHRoZSBuZXcgYnVja2V0LCBhbmQKLQkgKiBsaW5rIHRoZSBuZXcgYnVja2V0IHRvIHRoYXQgZW50cnkuIFNpbmNlIGFsbCB0aGUgZW50cmllcwotCSAqIHdoaWNoIHdpbGwgZW5kIHVwIGluIHRoZSBuZXcgYnVja2V0IGFwcGVhciBpbiB0aGUgc2FtZQotCSAqIG9sZCBidWNrZXQsIHRoaXMgY29uc3RydWN0cyBhbiBlbnRpcmVseSB2YWxpZCBuZXcgaGFzaAotCSAqIHRhYmxlLCBidXQgd2l0aCBtdWx0aXBsZSBidWNrZXRzICJ6aXBwZWQiIHRvZ2V0aGVyIGludG8gYQotCSAqIHNpbmdsZSBpbXByZWNpc2UgY2hhaW4uCisJLyogTWFrZSBpbnNlcnRpb25zIGdvIGludG8gdGhlIG5ldywgZW1wdHkgdGFibGUgcmlnaHQgYXdheS4gRGVsZXRpb25zCisJICogYW5kIGxvb2t1cHMgd2lsbCBiZSBhdHRlbXB0ZWQgaW4gYm90aCB0YWJsZXMgdW50aWwgd2Ugc3luY2hyb25pemUuCisJICogVGhlIHN5bmNocm9uaXplX3JjdSgpIGd1YXJhbnRlZXMgZm9yIHRoZSBuZXcgdGFibGUgdG8gYmUgcGlja2VkIHVwCisJICogc28gbm8gbmV3IGFkZGl0aW9ucyBnbyBpbnRvIHRoZSBvbGQgdGFibGUgd2hpbGUgd2UgcmVsaW5rLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBuZXdfdGJsLT5zaXplOyBpKyspIHsKLQkJaCA9IGkgJiAob2xkX3RibC0+c2l6ZSAtIDEpOwotCQlyaHRfZm9yX2VhY2goaGUsIG9sZF90YmwtPmJ1Y2tldHNbaF0sIGh0KSB7Ci0JCQlpZiAoaGVhZF9oYXNoZm4oaHQsIGhlLCBuZXdfdGJsLT5zaXplKSA9PSBpKSB7Ci0JCQkJUkNVX0lOSVRfUE9JTlRFUihuZXdfdGJsLT5idWNrZXRzW2ldLCBoZSk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGh0LT5mdXR1cmVfdGJsLCBuZXdfdGJsKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKworCS8qIEZvciBlYWNoIG5ldyBidWNrZXQsIHNlYXJjaCB0aGUgY29ycmVzcG9uZGluZyBvbGQgYnVja2V0IGZvciB0aGUKKwkgKiBmaXJzdCBlbnRyeSB0aGF0IGhhc2hlcyB0byB0aGUgbmV3IGJ1Y2tldCwgYW5kIGxpbmsgdGhlIGVuZCBvZgorCSAqIG5ld2x5IGZvcm1lZCBidWNrZXQgY2hhaW4gKGNvbnRhaW5pbmcgZW50cmllcyBhZGRlZCB0byBmdXR1cmUKKwkgKiB0YWJsZSkgdG8gdGhhdCBlbnRyeS4gU2luY2UgYWxsIHRoZSBlbnRyaWVzIHdoaWNoIHdpbGwgZW5kIHVwIGluCisJICogdGhlIG5ldyBidWNrZXQgYXBwZWFyIGluIHRoZSBzYW1lIG9sZCBidWNrZXQsIHRoaXMgY29uc3RydWN0cyBhbgorCSAqIGVudGlyZWx5IHZhbGlkIG5ldyBoYXNoIHRhYmxlLCBidXQgd2l0aCBtdWx0aXBsZSBidWNrZXRzCisJICogInppcHBlZCIgdG9nZXRoZXIgaW50byBhIHNpbmdsZSBpbXByZWNpc2UgY2hhaW4uCisJICovCisJZm9yIChuZXdfaGFzaCA9IDA7IG5ld19oYXNoIDwgbmV3X3RibC0+c2l6ZTsgbmV3X2hhc2grKykgeworCQlvbGRfaGFzaCA9IHJodF9idWNrZXRfaW5kZXgob2xkX3RibCwgbmV3X2hhc2gpOworCQlsb2NrX2J1Y2tldHMobmV3X3RibCwgb2xkX3RibCwgbmV3X2hhc2gpOworCQlyaHRfZm9yX2VhY2goaGUsIG9sZF90YmwsIG9sZF9oYXNoKSB7CisJCQlpZiAoaGVhZF9oYXNoZm4oaHQsIG5ld190YmwsIGhlKSA9PSBuZXdfaGFzaCkgeworCQkJCWxpbmtfb2xkX3RvX25ldyhodCwgbmV3X3RibCwgbmV3X2hhc2gsIGhlKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQorCQl1bmxvY2tfYnVja2V0cyhuZXdfdGJsLCBvbGRfdGJsLCBuZXdfaGFzaCk7CiAJfQogCi0JLyogUHVibGlzaCB0aGUgbmV3IHRhYmxlIHBvaW50ZXIuIExvb2t1cHMgbWF5IG5vdyB0cmF2ZXJzZQotCSAqIHRoZSBuZXcgdGFibGUsIGJ1dCB0aGV5IHdpbGwgbm90IGJlbmVmaXQgZnJvbSBhbnkKLQkgKiBhZGRpdGlvbmFsIGVmZmljaWVuY3kgdW50aWwgbGF0ZXIgc3RlcHMgdW56aXAgdGhlIGJ1Y2tldHMuCi0JICovCi0JcmN1X2Fzc2lnbl9wb2ludGVyKGh0LT50YmwsIG5ld190YmwpOwotCiAJLyogVW56aXAgaW50ZXJsZWF2ZWQgaGFzaCBjaGFpbnMgKi8KLQlkbyB7CisJd2hpbGUgKCFjb21wbGV0ZSAmJiAhaHQtPmJlaW5nX2Rlc3Ryb3llZCkgewogCQkvKiBXYWl0IGZvciByZWFkZXJzLiBBbGwgbmV3IHJlYWRlcnMgd2lsbCBzZWUgdGhlIG5ldwogCQkgKiB0YWJsZSwgYW5kIHRodXMgbm8gcmVmZXJlbmNlcyB0byB0aGUgb2xkIHRhYmxlIHdpbGwKIAkJICogcmVtYWluLgpAQCAtMjY1LDEyICs0MjksMTkgQEAKIAkJICogdGFibGUpOiAuLi4KIAkJICovCiAJCWNvbXBsZXRlID0gdHJ1ZTsKLQkJZm9yIChpID0gMDsgaSA8IG9sZF90YmwtPnNpemU7IGkrKykgewotCQkJaGFzaHRhYmxlX2NoYWluX3VuemlwKGh0LCBuZXdfdGJsLCBvbGRfdGJsLCBpKTsKLQkJCWlmIChvbGRfdGJsLT5idWNrZXRzW2ldICE9IE5VTEwpCisJCWZvciAob2xkX2hhc2ggPSAwOyBvbGRfaGFzaCA8IG9sZF90YmwtPnNpemU7IG9sZF9oYXNoKyspIHsKKwkJCWxvY2tfYnVja2V0cyhuZXdfdGJsLCBvbGRfdGJsLCBvbGRfaGFzaCk7CisKKwkJCWlmIChoYXNodGFibGVfY2hhaW5fdW56aXAoaHQsIG5ld190YmwsIG9sZF90YmwsCisJCQkJCQkgIG9sZF9oYXNoKSkKIAkJCQljb21wbGV0ZSA9IGZhbHNlOworCisJCQl1bmxvY2tfYnVja2V0cyhuZXdfdGJsLCBvbGRfdGJsLCBvbGRfaGFzaCk7CiAJCX0KLQl9IHdoaWxlICghY29tcGxldGUpOworCX0KKworCXJjdV9hc3NpZ25fcG9pbnRlcihodC0+dGJsLCBuZXdfdGJsKTsKKwlzeW5jaHJvbml6ZV9yY3UoKTsKIAogCWJ1Y2tldF90YWJsZV9mcmVlKG9sZF90YmwpOwogCXJldHVybiAwOwpAQCAtMjg0LDQ1ICs0NTUsNTEgQEAKICAqIFRoaXMgZnVuY3Rpb24gbWF5IG9ubHkgYmUgY2FsbGVkIGluIGEgY29udGV4dCB3aGVyZSBpdCBpcyBzYWZlIHRvIGNhbGwKICAqIHN5bmNocm9uaXplX3JjdSgpLCBlLmcuIG5vdCB3aXRoaW4gYSByY3VfcmVhZF9sb2NrKCkgc2VjdGlvbi4KICAqCisgKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgbm8gY29uY3VycmVudCByZXNpemluZyBvY2N1cnMgYnkgaG9sZGluZworICogaHQtPm11dGV4LgorICoKICAqIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCBubyBjb25jdXJyZW50IHRhYmxlIG11dGF0aW9ucyB0YWtlIHBsYWNlLgogICogSXQgaXMgaG93ZXZlciB2YWxpZCB0byBoYXZlIGNvbmN1cnJlbnQgbG9va3VwcyBpZiB0aGV5IGFyZSBSQ1UgcHJvdGVjdGVkLgorICoKKyAqIEl0IGlzIHZhbGlkIHRvIGhhdmUgY29uY3VycmVudCBpbnNlcnRpb25zIGFuZCBkZWxldGlvbnMgcHJvdGVjdGVkIGJ5IHBlcgorICogYnVja2V0IGxvY2tzIG9yIGNvbmN1cnJlbnQgUkNVIHByb3RlY3RlZCBsb29rdXBzIGFuZCB0cmF2ZXJzYWxzLgogICovCiBpbnQgcmhhc2h0YWJsZV9zaHJpbmsoc3RydWN0IHJoYXNodGFibGUgKmh0KQogewotCXN0cnVjdCBidWNrZXRfdGFibGUgKm50YmwsICp0YmwgPSByaHRfZGVyZWZlcmVuY2UoaHQtPnRibCwgaHQpOwotCXN0cnVjdCByaGFzaF9oZWFkIF9fcmN1ICoqcHByZXY7Ci0JdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGJ1Y2tldF90YWJsZSAqbmV3X3RibCwgKnRibCA9IHJodF9kZXJlZmVyZW5jZShodC0+dGJsLCBodCk7CisJdW5zaWduZWQgaW50IG5ld19oYXNoOwogCiAJQVNTRVJUX1JIVF9NVVRFWChodCk7CiAKLQlpZiAoaHQtPnNoaWZ0IDw9IGh0LT5wLm1pbl9zaGlmdCkKLQkJcmV0dXJuIDA7Ci0KLQludGJsID0gYnVja2V0X3RhYmxlX2FsbG9jKHRibC0+c2l6ZSAvIDIpOwotCWlmIChudGJsID09IE5VTEwpCisJbmV3X3RibCA9IGJ1Y2tldF90YWJsZV9hbGxvYyhodCwgdGJsLT5zaXplIC8gMik7CisJaWYgKG5ld190YmwgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlodC0+c2hpZnQtLTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoaHQtPmZ1dHVyZV90YmwsIG5ld190YmwpOworCXN5bmNocm9uaXplX3JjdSgpOwogCi0JLyogTGluayBlYWNoIGJ1Y2tldCBpbiB0aGUgbmV3IHRhYmxlIHRvIHRoZSBmaXJzdCBidWNrZXQKLQkgKiBpbiB0aGUgb2xkIHRhYmxlIHRoYXQgY29udGFpbnMgZW50cmllcyB3aGljaCB3aWxsIGhhc2gKLQkgKiB0byB0aGUgbmV3IGJ1Y2tldC4KKwkvKiBMaW5rIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgb2xkIGJ1Y2tldCB0byB0aGUgZW5kIG9mIHRoZQorCSAqIGJ1Y2tldCBpbiB0aGUgbmV3IHRhYmxlLiBBcyBlbnRyaWVzIGFyZSBjb25jdXJyZW50bHkgYmVpbmcKKwkgKiBhZGRlZCB0byB0aGUgbmV3IHRhYmxlLCBsb2NrIGRvd24gdGhlIG5ldyBidWNrZXQuIEFzIHdlCisJICogYWx3YXlzIGRpdmlkZSB0aGUgc2l6ZSBpbiBoYWxmIHdoZW4gc2hyaW5raW5nLCBlYWNoIGJ1Y2tldAorCSAqIGluIHRoZSBuZXcgdGFibGUgbWFwcyB0byBleGFjdGx5IHR3byBidWNrZXRzIGluIHRoZSBvbGQKKwkgKiB0YWJsZS4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnRibC0+c2l6ZTsgaSsrKSB7Ci0JCW50YmwtPmJ1Y2tldHNbaV0gPSB0YmwtPmJ1Y2tldHNbaV07CisJZm9yIChuZXdfaGFzaCA9IDA7IG5ld19oYXNoIDwgbmV3X3RibC0+c2l6ZTsgbmV3X2hhc2grKykgeworCQlsb2NrX2J1Y2tldHMobmV3X3RibCwgdGJsLCBuZXdfaGFzaCk7CiAKLQkJLyogTGluayBlYWNoIGJ1Y2tldCBpbiB0aGUgbmV3IHRhYmxlIHRvIHRoZSBmaXJzdCBidWNrZXQKLQkJICogaW4gdGhlIG9sZCB0YWJsZSB0aGF0IGNvbnRhaW5zIGVudHJpZXMgd2hpY2ggd2lsbCBoYXNoCi0JCSAqIHRvIHRoZSBuZXcgYnVja2V0LgotCQkgKi8KLQkJZm9yIChwcHJldiA9ICZudGJsLT5idWNrZXRzW2ldOyAqcHByZXYgIT0gTlVMTDsKLQkJICAgICBwcHJldiA9ICZyaHRfZGVyZWZlcmVuY2UoKnBwcmV2LCBodCktPm5leHQpCi0JCQk7Ci0JCVJDVV9JTklUX1BPSU5URVIoKnBwcmV2LCB0YmwtPmJ1Y2tldHNbaSArIG50YmwtPnNpemVdKTsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKCpidWNrZXRfdGFpbChuZXdfdGJsLCBuZXdfaGFzaCksCisJCQkJICAgdGJsLT5idWNrZXRzW25ld19oYXNoXSk7CisJCUFTU0VSVF9CVUNLRVRfTE9DSyhodCwgdGJsLCBuZXdfaGFzaCArIG5ld190YmwtPnNpemUpOworCQlyY3VfYXNzaWduX3BvaW50ZXIoKmJ1Y2tldF90YWlsKG5ld190YmwsIG5ld19oYXNoKSwKKwkJCQkgICB0YmwtPmJ1Y2tldHNbbmV3X2hhc2ggKyBuZXdfdGJsLT5zaXplXSk7CisKKwkJdW5sb2NrX2J1Y2tldHMobmV3X3RibCwgdGJsLCBuZXdfaGFzaCk7CiAJfQogCiAJLyogUHVibGlzaCB0aGUgbmV3LCB2YWxpZCBoYXNoIHRhYmxlICovCi0JcmN1X2Fzc2lnbl9wb2ludGVyKGh0LT50YmwsIG50YmwpOworCXJjdV9hc3NpZ25fcG9pbnRlcihodC0+dGJsLCBuZXdfdGJsKTsKKwlhdG9taWNfZGVjKCZodC0+c2hpZnQpOwogCiAJLyogV2FpdCBmb3IgcmVhZGVycy4gTm8gbmV3IHJlYWRlcnMgd2lsbCBoYXZlIHJlZmVyZW5jZXMgdG8gdGhlCiAJICogb2xkIGhhc2ggdGFibGUuCkBAIC0zMzUsNTkgKzUxMiw5OSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9zaHJpbmspOwogCi0vKioKLSAqIHJoYXNodGFibGVfaW5zZXJ0IC0gaW5zZXJ0IG9iamVjdCBpbnRvIGhhc2ggaGFzaCB0YWJsZQotICogQGh0OgkJaGFzaCB0YWJsZQotICogQG9iajoJcG9pbnRlciB0byBoYXNoIGhlYWQgaW5zaWRlIG9iamVjdAotICoKLSAqIFdpbGwgYXV0b21hdGljYWxseSBncm93IHRoZSB0YWJsZSB2aWEgcmhhc2h0YWJsZV9leHBhbmQoKSBpZiB0aGUgdGhlCi0gKiBncm93X2RlY2lzaW9uIGZ1bmN0aW9uIHNwZWNpZmllZCBhdCByaGFzaHRhYmxlX2luaXQoKSByZXR1cm5zIHRydWUuCi0gKgotICogVGhlIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IG5vIGNvbmN1cnJlbnQgdGFibGUgbXV0YXRpb25zIG9jY3VyLiBJdCBpcwotICogaG93ZXZlciB2YWxpZCB0byBoYXZlIGNvbmN1cnJlbnQgbG9va3VwcyBpZiB0aGV5IGFyZSBSQ1UgcHJvdGVjdGVkLgotICovCi12b2lkIHJoYXNodGFibGVfaW5zZXJ0KHN0cnVjdCByaGFzaHRhYmxlICpodCwgc3RydWN0IHJoYXNoX2hlYWQgKm9iaikKK3N0YXRpYyB2b2lkIHJodF9kZWZlcnJlZF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBidWNrZXRfdGFibGUgKnRibCA9IHJodF9kZXJlZmVyZW5jZShodC0+dGJsLCBodCk7Ci0JdTMyIGhhc2g7CisJc3RydWN0IHJoYXNodGFibGUgKmh0OworCXN0cnVjdCBidWNrZXRfdGFibGUgKnRibDsKKwlzdHJ1Y3Qgcmhhc2h0YWJsZV93YWxrZXIgKndhbGtlcjsKIAotCUFTU0VSVF9SSFRfTVVURVgoaHQpOworCWh0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByaGFzaHRhYmxlLCBydW5fd29yayk7CisJbXV0ZXhfbG9jaygmaHQtPm11dGV4KTsKKwlpZiAoaHQtPmJlaW5nX2Rlc3Ryb3llZCkKKwkJZ290byB1bmxvY2s7CiAKLQloYXNoID0gaGVhZF9oYXNoZm4oaHQsIG9iaiwgdGJsLT5zaXplKTsKLQlSQ1VfSU5JVF9QT0lOVEVSKG9iai0+bmV4dCwgdGJsLT5idWNrZXRzW2hhc2hdKTsKLQlyY3VfYXNzaWduX3BvaW50ZXIodGJsLT5idWNrZXRzW2hhc2hdLCBvYmopOwotCWh0LT5uZWxlbXMrKzsKKwl0YmwgPSByaHRfZGVyZWZlcmVuY2UoaHQtPnRibCwgaHQpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3YWxrZXIsICZodC0+d2Fsa2VycywgbGlzdCkKKwkJd2Fsa2VyLT5yZXNpemUgPSB0cnVlOwogCiAJaWYgKGh0LT5wLmdyb3dfZGVjaXNpb24gJiYgaHQtPnAuZ3Jvd19kZWNpc2lvbihodCwgdGJsLT5zaXplKSkKIAkJcmhhc2h0YWJsZV9leHBhbmQoaHQpOworCWVsc2UgaWYgKGh0LT5wLnNocmlua19kZWNpc2lvbiAmJiBodC0+cC5zaHJpbmtfZGVjaXNpb24oaHQsIHRibC0+c2l6ZSkpCisJCXJoYXNodGFibGVfc2hyaW5rKGh0KTsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmaHQtPm11dGV4KTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHJoYXNodGFibGVfaW5zZXJ0KTsKKworc3RhdGljIHZvaWQgcmhhc2h0YWJsZV93YWtldXBfd29ya2VyKHN0cnVjdCByaGFzaHRhYmxlICpodCkKK3sKKwlzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwgPSByaHRfZGVyZWZlcmVuY2VfcmN1KGh0LT50YmwsIGh0KTsKKwlzdHJ1Y3QgYnVja2V0X3RhYmxlICpuZXdfdGJsID0gcmh0X2RlcmVmZXJlbmNlX3JjdShodC0+ZnV0dXJlX3RibCwgaHQpOworCXNpemVfdCBzaXplID0gdGJsLT5zaXplOworCisJLyogT25seSBhZGp1c3QgdGhlIHRhYmxlIGlmIG5vIHJlc2l6aW5nIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4gKi8KKwlpZiAodGJsID09IG5ld190YmwgJiYKKwkgICAgKChodC0+cC5ncm93X2RlY2lzaW9uICYmIGh0LT5wLmdyb3dfZGVjaXNpb24oaHQsIHNpemUpKSB8fAorCSAgICAgKGh0LT5wLnNocmlua19kZWNpc2lvbiAmJiBodC0+cC5zaHJpbmtfZGVjaXNpb24oaHQsIHNpemUpKSkpCisJCXNjaGVkdWxlX3dvcmsoJmh0LT5ydW5fd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIF9fcmhhc2h0YWJsZV9pbnNlcnQoc3RydWN0IHJoYXNodGFibGUgKmh0LCBzdHJ1Y3Qgcmhhc2hfaGVhZCAqb2JqLAorCQkJCXN0cnVjdCBidWNrZXRfdGFibGUgKnRibCwgdTMyIGhhc2gpCit7CisJc3RydWN0IHJoYXNoX2hlYWQgKmhlYWQ7CisKKwloYXNoID0gcmh0X2J1Y2tldF9pbmRleCh0YmwsIGhhc2gpOworCWhlYWQgPSByaHRfZGVyZWZlcmVuY2VfYnVja2V0KHRibC0+YnVja2V0c1toYXNoXSwgdGJsLCBoYXNoKTsKKworCUFTU0VSVF9CVUNLRVRfTE9DSyhodCwgdGJsLCBoYXNoKTsKKworCWlmIChyaHRfaXNfYV9udWxscyhoZWFkKSkKKwkJSU5JVF9SSFRfTlVMTFNfSEVBRChvYmotPm5leHQsIGh0LCBoYXNoKTsKKwllbHNlCisJCVJDVV9JTklUX1BPSU5URVIob2JqLT5uZXh0LCBoZWFkKTsKKworCXJjdV9hc3NpZ25fcG9pbnRlcih0YmwtPmJ1Y2tldHNbaGFzaF0sIG9iaik7CisKKwlhdG9taWNfaW5jKCZodC0+bmVsZW1zKTsKKworCXJoYXNodGFibGVfd2FrZXVwX3dvcmtlcihodCk7Cit9CiAKIC8qKgotICogcmhhc2h0YWJsZV9yZW1vdmVfcHByZXYgLSByZW1vdmUgb2JqZWN0IGZyb20gaGFzaCB0YWJsZSBnaXZlbiBwcmV2aW91cyBlbGVtZW50CisgKiByaGFzaHRhYmxlX2luc2VydCAtIGluc2VydCBvYmplY3QgaW50byBoYXNoIHRhYmxlCiAgKiBAaHQ6CQloYXNoIHRhYmxlCiAgKiBAb2JqOglwb2ludGVyIHRvIGhhc2ggaGVhZCBpbnNpZGUgb2JqZWN0Ci0gKiBAcHByZXY6CXBvaW50ZXIgdG8gcHJldmlvdXMgZWxlbWVudAogICoKLSAqIElkZW50aWNhbCB0byByaGFzaHRhYmxlX3JlbW92ZSgpIGJ1dCBjYWxsZXIgaXMgYWxyZWF5ZCBhd2FyZSBvZiB0aGUgZWxlbWVudAotICogaW4gZnJvbnQgb2YgdGhlIGVsZW1lbnQgdG8gYmUgZGVsZXRlZC4gVGhpcyBpcyBpbiBwYXJ0aWN1bGFyIHVzZWZ1bCBmb3IKLSAqIGRlbGV0aW9uIHdoZW4gY29tYmluZWQgd2l0aCB3YWxraW5nIG9yIGxvb2t1cC4KKyAqIFdpbGwgdGFrZSBhIHBlciBidWNrZXQgc3BpbmxvY2sgdG8gcHJvdGVjdCBhZ2FpbnN0IG11dHVhbCBtdXRhdGlvbnMKKyAqIG9uIHRoZSBzYW1lIGJ1Y2tldC4gTXVsdGlwbGUgaW5zZXJ0aW9ucyBtYXkgb2NjdXIgaW4gcGFyYWxsZWwgdW5sZXNzCisgKiB0aGV5IG1hcCB0byB0aGUgc2FtZSBidWNrZXQgbG9jay4KKyAqCisgKiBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBmcm9tIGF0b21pYyBjb250ZXh0LgorICoKKyAqIFdpbGwgdHJpZ2dlciBhbiBhdXRvbWF0aWMgZGVmZXJyZWQgdGFibGUgcmVzaXppbmcgaWYgdGhlIHNpemUgZ3Jvd3MKKyAqIGJleW9uZCB0aGUgd2F0ZXJtYXJrIGluZGljYXRlZCBieSBncm93X2RlY2lzaW9uKCkgd2hpY2ggY2FuIGJlIHBhc3NlZAorICogdG8gcmhhc2h0YWJsZV9pbml0KCkuCiAgKi8KLXZvaWQgcmhhc2h0YWJsZV9yZW1vdmVfcHByZXYoc3RydWN0IHJoYXNodGFibGUgKmh0LCBzdHJ1Y3Qgcmhhc2hfaGVhZCAqb2JqLAotCQkJICAgICBzdHJ1Y3Qgcmhhc2hfaGVhZCBfX3JjdSAqKnBwcmV2KQordm9pZCByaGFzaHRhYmxlX2luc2VydChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIHN0cnVjdCByaGFzaF9oZWFkICpvYmopCiB7Ci0Jc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsID0gcmh0X2RlcmVmZXJlbmNlKGh0LT50YmwsIGh0KTsKKwlzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwsICpvbGRfdGJsOworCXVuc2lnbmVkIGhhc2g7CiAKLQlBU1NFUlRfUkhUX01VVEVYKGh0KTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAKLQlSQ1VfSU5JVF9QT0lOVEVSKCpwcHJldiwgb2JqLT5uZXh0KTsKLQlodC0+bmVsZW1zLS07CisJdGJsID0gcmh0X2RlcmVmZXJlbmNlX3JjdShodC0+ZnV0dXJlX3RibCwgaHQpOworCW9sZF90YmwgPSByaHRfZGVyZWZlcmVuY2VfcmN1KGh0LT50YmwsIGh0KTsKKwloYXNoID0gb2JqX3Jhd19oYXNoZm4oaHQsIHJodF9vYmooaHQsIG9iaikpOwogCi0JaWYgKGh0LT5wLnNocmlua19kZWNpc2lvbiAmJgotCSAgICBodC0+cC5zaHJpbmtfZGVjaXNpb24oaHQsIHRibC0+c2l6ZSkpCi0JCXJoYXNodGFibGVfc2hyaW5rKGh0KTsKKwlsb2NrX2J1Y2tldHModGJsLCBvbGRfdGJsLCBoYXNoKTsKKwlfX3JoYXNodGFibGVfaW5zZXJ0KGh0LCBvYmosIHRibCwgaGFzaCk7CisJdW5sb2NrX2J1Y2tldHModGJsLCBvbGRfdGJsLCBoYXNoKTsKKworCXJjdV9yZWFkX3VubG9jaygpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9yZW1vdmVfcHByZXYpOworRVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9pbnNlcnQpOwogCiAvKioKICAqIHJoYXNodGFibGVfcmVtb3ZlIC0gcmVtb3ZlIG9iamVjdCBmcm9tIGhhc2ggdGFibGUKQEAgLTM5OCw3ICs2MTUsNyBAQAogICogd2FsayB0aGUgYnVja2V0IGNoYWluIHVwb24gcmVtb3ZhbC4gVGhlIHJlbW92YWwgb3BlcmF0aW9uIGlzIHRodXMKICAqIGNvbnNpZGVyYWJsZSBzbG93IGlmIHRoZSBoYXNoIHRhYmxlIGlzIG5vdCBjb3JyZWN0bHkgc2l6ZWQuCiAgKgotICogV2lsbCBhdXRvbWF0aWNhbGx5IHNocmluayB0aGUgdGFibGUgdmlhIHJoYXNodGFibGVfZXhwYW5kKCkgaWYgdGhlIHRoZQorICogV2lsbCBhdXRvbWF0aWNhbGx5IHNocmluayB0aGUgdGFibGUgdmlhIHJoYXNodGFibGVfZXhwYW5kKCkgaWYgdGhlCiAgKiBzaHJpbmtfZGVjaXNpb24gZnVuY3Rpb24gc3BlY2lmaWVkIGF0IHJoYXNodGFibGVfaW5pdCgpIHJldHVybnMgdHJ1ZS4KICAqCiAgKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgbm8gY29uY3VycmVudCB0YWJsZSBtdXRhdGlvbnMgb2NjdXIuIEl0IGlzCkBAIC00MDYsMzAgKzYyMyw4NyBAQAogICovCiBib29sIHJoYXNodGFibGVfcmVtb3ZlKHN0cnVjdCByaGFzaHRhYmxlICpodCwgc3RydWN0IHJoYXNoX2hlYWQgKm9iaikKIHsKLQlzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwgPSByaHRfZGVyZWZlcmVuY2UoaHQtPnRibCwgaHQpOworCXN0cnVjdCBidWNrZXRfdGFibGUgKnRibCwgKm5ld190YmwsICpvbGRfdGJsOwogCXN0cnVjdCByaGFzaF9oZWFkIF9fcmN1ICoqcHByZXY7Ci0Jc3RydWN0IHJoYXNoX2hlYWQgKmhlOwotCXUzMiBoOworCXN0cnVjdCByaGFzaF9oZWFkICpoZSwgKmhlMjsKKwl1bnNpZ25lZCBpbnQgaGFzaCwgbmV3X2hhc2g7CisJYm9vbCByZXQgPSBmYWxzZTsKIAotCUFTU0VSVF9SSFRfTVVURVgoaHQpOworCXJjdV9yZWFkX2xvY2soKTsKKwlvbGRfdGJsID0gcmh0X2RlcmVmZXJlbmNlX3JjdShodC0+dGJsLCBodCk7CisJdGJsID0gbmV3X3RibCA9IHJodF9kZXJlZmVyZW5jZV9yY3UoaHQtPmZ1dHVyZV90YmwsIGh0KTsKKwluZXdfaGFzaCA9IG9ial9yYXdfaGFzaGZuKGh0LCByaHRfb2JqKGh0LCBvYmopKTsKIAotCWggPSBoZWFkX2hhc2hmbihodCwgb2JqLCB0YmwtPnNpemUpOwotCi0JcHByZXYgPSAmdGJsLT5idWNrZXRzW2hdOwotCXJodF9mb3JfZWFjaChoZSwgdGJsLT5idWNrZXRzW2hdLCBodCkgeworCWxvY2tfYnVja2V0cyhuZXdfdGJsLCBvbGRfdGJsLCBuZXdfaGFzaCk7CityZXN0YXJ0OgorCWhhc2ggPSByaHRfYnVja2V0X2luZGV4KHRibCwgbmV3X2hhc2gpOworCXBwcmV2ID0gJnRibC0+YnVja2V0c1toYXNoXTsKKwlyaHRfZm9yX2VhY2goaGUsIHRibCwgaGFzaCkgewogCQlpZiAoaGUgIT0gb2JqKSB7CiAJCQlwcHJldiA9ICZoZS0+bmV4dDsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJcmhhc2h0YWJsZV9yZW1vdmVfcHByZXYoaHQsIGhlLCBwcHJldik7Ci0JCXJldHVybiB0cnVlOworCQlBU1NFUlRfQlVDS0VUX0xPQ0soaHQsIHRibCwgaGFzaCk7CisKKwkJaWYgKG9sZF90YmwtPnNpemUgPiBuZXdfdGJsLT5zaXplICYmIHRibCA9PSBvbGRfdGJsICYmCisJCSAgICAhcmh0X2lzX2FfbnVsbHMob2JqLT5uZXh0KSAmJgorCQkgICAgaGVhZF9oYXNoZm4oaHQsIHRibCwgb2JqLT5uZXh0KSAhPSBoYXNoKSB7CisJCQlyY3VfYXNzaWduX3BvaW50ZXIoKnBwcmV2LCAoc3RydWN0IHJoYXNoX2hlYWQgKikgcmh0X21hcmtlcihodCwgaGFzaCkpOworCQl9IGVsc2UgaWYgKHVubGlrZWx5KG9sZF90YmwtPnNpemUgPCBuZXdfdGJsLT5zaXplICYmIHRibCA9PSBuZXdfdGJsKSkgeworCQkJcmh0X2Zvcl9lYWNoX2NvbnRpbnVlKGhlMiwgb2JqLT5uZXh0LCB0YmwsIGhhc2gpIHsKKwkJCQlpZiAoaGVhZF9oYXNoZm4oaHQsIHRibCwgaGUyKSA9PSBoYXNoKSB7CisJCQkJCXJjdV9hc3NpZ25fcG9pbnRlcigqcHByZXYsIGhlMik7CisJCQkJCWdvdG8gZm91bmQ7CisJCQkJfQorCQkJfQorCisJCQlyY3VfYXNzaWduX3BvaW50ZXIoKnBwcmV2LCAoc3RydWN0IHJoYXNoX2hlYWQgKikgcmh0X21hcmtlcihodCwgaGFzaCkpOworCQl9IGVsc2UgeworCQkJcmN1X2Fzc2lnbl9wb2ludGVyKCpwcHJldiwgb2JqLT5uZXh0KTsKKwkJfQorCitmb3VuZDoKKwkJcmV0ID0gdHJ1ZTsKKwkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIGZhbHNlOworCS8qIFRoZSBlbnRyeSBtYXkgYmUgbGlua2VkIGluIGVpdGhlciAndGJsJywgJ2Z1dHVyZV90YmwnLCBvciBib3RoLgorCSAqICdmdXR1cmVfdGJsJyBvbmx5IGV4aXN0cyBmb3IgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZSBkdXJpbmcKKwkgKiByZXNpemluZy4gVGh1cyB0cmF2ZXJzaW5nIGJvdGggaXMgZmluZSBhbmQgdGhlIGFkZGVkIGNvc3QgaXMKKwkgKiB2ZXJ5IHJhcmUuCisJICovCisJaWYgKHRibCAhPSBvbGRfdGJsKSB7CisJCXRibCA9IG9sZF90Ymw7CisJCWdvdG8gcmVzdGFydDsKKwl9CisKKwl1bmxvY2tfYnVja2V0cyhuZXdfdGJsLCBvbGRfdGJsLCBuZXdfaGFzaCk7CisKKwlpZiAocmV0KSB7CisJCWF0b21pY19kZWMoJmh0LT5uZWxlbXMpOworCQlyaGFzaHRhYmxlX3dha2V1cF93b3JrZXIoaHQpOworCX0KKworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJoYXNodGFibGVfcmVtb3ZlKTsKIAorc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgeworCXN0cnVjdCByaGFzaHRhYmxlICpodDsKKwljb25zdCB2b2lkICprZXk7Cit9OworCitzdGF0aWMgYm9vbCByaGFzaHRhYmxlX2NvbXBhcmUodm9pZCAqcHRyLCB2b2lkICphcmcpCit7CisJc3RydWN0IHJoYXNodGFibGVfY29tcGFyZV9hcmcgKnggPSBhcmc7CisJc3RydWN0IHJoYXNodGFibGUgKmh0ID0geC0+aHQ7CisKKwlyZXR1cm4gIW1lbWNtcChwdHIgKyBodC0+cC5rZXlfb2Zmc2V0LCB4LT5rZXksIGh0LT5wLmtleV9sZW4pOworfQorCiAvKioKICAqIHJoYXNodGFibGVfbG9va3VwIC0gbG9va3VwIGtleSBpbiBoYXNoIHRhYmxlCiAgKiBAaHQ6CQloYXNoIHRhYmxlCkBAIC00MzksNjUgKzcxMywzMTMgQEAKICAqIGZvciBhIGVudHJ5IHdpdGggYW4gaWRlbnRpY2FsIGtleS4gVGhlIGZpcnN0IG1hdGNoaW5nIGVudHJ5IGlzIHJldHVybmVkLgogICoKICAqIFRoaXMgbG9va3VwIGZ1bmN0aW9uIG1heSBvbmx5IGJlIHVzZWQgZm9yIGZpeGVkIGtleSBoYXNoIHRhYmxlIChrZXlfbGVuCi0gKiBwYXJhbXRlciBzZXQpLiBJdCB3aWxsIEJVRygpIGlmIHVzZWQgaW5hcHByb3ByaWF0ZWx5LgorICogcGFyYW1ldGVyIHNldCkuIEl0IHdpbGwgQlVHKCkgaWYgdXNlZCBpbmFwcHJvcHJpYXRlbHkuCiAgKgotICogTG9va3VwcyBtYXkgb2NjdXIgaW4gcGFyYWxsZWwgd2l0aCBoYXNoIG11dGF0aW9ucyBhcyBsb25nIGFzIHRoZSBsb29rdXAgaXMKLSAqIGd1YXJkZWQgYnkgcmN1X3JlYWRfbG9jaygpLiBUaGUgY2FsbGVyIG11c3QgdGFrZSBjYXJlIG9mIHRoaXMuCisgKiBMb29rdXBzIG1heSBvY2N1ciBpbiBwYXJhbGxlbCB3aXRoIGhhc2h0YWJsZSBtdXRhdGlvbnMgYW5kIHJlc2l6aW5nLgogICovCi12b2lkICpyaGFzaHRhYmxlX2xvb2t1cChjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSkKK3ZvaWQgKnJoYXNodGFibGVfbG9va3VwKHN0cnVjdCByaGFzaHRhYmxlICpodCwgY29uc3Qgdm9pZCAqa2V5KQogewotCWNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCA9IHJodF9kZXJlZmVyZW5jZV9yY3UoaHQtPnRibCwgaHQpOwotCXN0cnVjdCByaGFzaF9oZWFkICpoZTsKLQl1MzIgaDsKKwlzdHJ1Y3Qgcmhhc2h0YWJsZV9jb21wYXJlX2FyZyBhcmcgPSB7CisJCS5odCA9IGh0LAorCQkua2V5ID0ga2V5LAorCX07CiAKIAlCVUdfT04oIWh0LT5wLmtleV9sZW4pOwogCi0JaCA9IF9faGFzaGZuKGh0LCBrZXksIGh0LT5wLmtleV9sZW4sIHRibC0+c2l6ZSk7Ci0Jcmh0X2Zvcl9lYWNoX3JjdShoZSwgdGJsLT5idWNrZXRzW2hdLCBodCkgewotCQlpZiAobWVtY21wKHJodF9vYmooaHQsIGhlKSArIGh0LT5wLmtleV9vZmZzZXQsIGtleSwKLQkJCSAgIGh0LT5wLmtleV9sZW4pKQotCQkJY29udGludWU7Ci0JCXJldHVybiAodm9pZCAqKSBoZSAtIGh0LT5wLmhlYWRfb2Zmc2V0OwotCX0KLQotCXJldHVybiBOVUxMOworCXJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9jb21wYXJlKGh0LCBrZXksICZyaGFzaHRhYmxlX2NvbXBhcmUsICZhcmcpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9sb29rdXApOwogCiAvKioKICAqIHJoYXNodGFibGVfbG9va3VwX2NvbXBhcmUgLSBzZWFyY2ggaGFzaCB0YWJsZSB3aXRoIGNvbXBhcmUgZnVuY3Rpb24KICAqIEBodDoJCWhhc2ggdGFibGUKLSAqIEBoYXNoOgloYXNoIHZhbHVlIG9mIGRlc2lyZWQgZW50cnkKKyAqIEBrZXk6CXRoZSBwb2ludGVyIHRvIHRoZSBrZXkKICAqIEBjb21wYXJlOgljb21wYXJlIGZ1bmN0aW9uLCBtdXN0IHJldHVybiB0cnVlIG9uIG1hdGNoCiAgKiBAYXJnOglhcmd1bWVudCBwYXNzZWQgb24gdG8gY29tcGFyZSBmdW5jdGlvbgogICoKICAqIFRyYXZlcnNlcyB0aGUgYnVja2V0IGNoYWluIGJlaGluZCB0aGUgcHJvdmlkZWQgaGFzaCB2YWx1ZSBhbmQgY2FsbHMgdGhlCiAgKiBzcGVjaWZpZWQgY29tcGFyZSBmdW5jdGlvbiBmb3IgZWFjaCBlbnRyeS4KICAqCi0gKiBMb29rdXBzIG1heSBvY2N1ciBpbiBwYXJhbGxlbCB3aXRoIGhhc2ggbXV0YXRpb25zIGFzIGxvbmcgYXMgdGhlIGxvb2t1cCBpcwotICogZ3VhcmRlZCBieSByY3VfcmVhZF9sb2NrKCkuIFRoZSBjYWxsZXIgbXVzdCB0YWtlIGNhcmUgb2YgdGhpcy4KKyAqIExvb2t1cHMgbWF5IG9jY3VyIGluIHBhcmFsbGVsIHdpdGggaGFzaHRhYmxlIG11dGF0aW9ucyBhbmQgcmVzaXppbmcuCiAgKgogICogUmV0dXJucyB0aGUgZmlyc3QgZW50cnkgb24gd2hpY2ggdGhlIGNvbXBhcmUgZnVuY3Rpb24gcmV0dXJuZWQgdHJ1ZS4KICAqLwotdm9pZCAqcmhhc2h0YWJsZV9sb29rdXBfY29tcGFyZShjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIHUzMiBoYXNoLAordm9pZCAqcmhhc2h0YWJsZV9sb29rdXBfY29tcGFyZShzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGNvbnN0IHZvaWQgKmtleSwKIAkJCQlib29sICgqY29tcGFyZSkodm9pZCAqLCB2b2lkICopLCB2b2lkICphcmcpCiB7Ci0JY29uc3Qgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsID0gcmh0X2RlcmVmZXJlbmNlX3JjdShodC0+dGJsLCBodCk7CisJY29uc3Qgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsLCAqb2xkX3RibDsKIAlzdHJ1Y3Qgcmhhc2hfaGVhZCAqaGU7CisJdTMyIGhhc2g7CiAKLQlpZiAodW5saWtlbHkoaGFzaCA+PSB0YmwtPnNpemUpKQotCQlyZXR1cm4gTlVMTDsKKwlyY3VfcmVhZF9sb2NrKCk7CiAKLQlyaHRfZm9yX2VhY2hfcmN1KGhlLCB0YmwtPmJ1Y2tldHNbaGFzaF0sIGh0KSB7CisJb2xkX3RibCA9IHJodF9kZXJlZmVyZW5jZV9yY3UoaHQtPnRibCwgaHQpOworCXRibCA9IHJodF9kZXJlZmVyZW5jZV9yY3UoaHQtPmZ1dHVyZV90YmwsIGh0KTsKKwloYXNoID0ga2V5X2hhc2hmbihodCwga2V5LCBodC0+cC5rZXlfbGVuKTsKK3Jlc3RhcnQ6CisJcmh0X2Zvcl9lYWNoX3JjdShoZSwgdGJsLCByaHRfYnVja2V0X2luZGV4KHRibCwgaGFzaCkpIHsKIAkJaWYgKCFjb21wYXJlKHJodF9vYmooaHQsIGhlKSwgYXJnKSkKIAkJCWNvbnRpbnVlOwotCQlyZXR1cm4gKHZvaWQgKikgaGUgLSBodC0+cC5oZWFkX29mZnNldDsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiByaHRfb2JqKGh0LCBoZSk7CiAJfQogCisJaWYgKHVubGlrZWx5KHRibCAhPSBvbGRfdGJsKSkgeworCQl0YmwgPSBvbGRfdGJsOworCQlnb3RvIHJlc3RhcnQ7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCiAJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX2xvb2t1cF9jb21wYXJlKTsKIAorLyoqCisgKiByaGFzaHRhYmxlX2xvb2t1cF9pbnNlcnQgLSBsb29rdXAgYW5kIGluc2VydCBvYmplY3QgaW50byBoYXNoIHRhYmxlCisgKiBAaHQ6CQloYXNoIHRhYmxlCisgKiBAb2JqOglwb2ludGVyIHRvIGhhc2ggaGVhZCBpbnNpZGUgb2JqZWN0CisgKgorICogTG9ja3MgZG93biB0aGUgYnVja2V0IGNoYWluIGluIGJvdGggdGhlIG9sZCBhbmQgbmV3IHRhYmxlIGlmIGEgcmVzaXplCisgKiBpcyBpbiBwcm9ncmVzcyB0byBlbnN1cmUgdGhhdCB3cml0ZXJzIGNhbid0IHJlbW92ZSBmcm9tIHRoZSBvbGQgdGFibGUKKyAqIGFuZCBjYW4ndCBpbnNlcnQgdG8gdGhlIG5ldyB0YWJsZSBkdXJpbmcgdGhlIGF0b21pYyBvcGVyYXRpb24gb2Ygc2VhcmNoCisgKiBhbmQgaW5zZXJ0aW9uLiBTZWFyY2hlcyBmb3IgZHVwbGljYXRlcyBpbiBib3RoIHRoZSBvbGQgYW5kIG5ldyB0YWJsZSBpZgorICogYSByZXNpemUgaXMgaW4gcHJvZ3Jlc3MuCisgKgorICogVGhpcyBsb29rdXAgZnVuY3Rpb24gbWF5IG9ubHkgYmUgdXNlZCBmb3IgZml4ZWQga2V5IGhhc2ggdGFibGUgKGtleV9sZW4KKyAqIHBhcmFtZXRlciBzZXQpLiBJdCB3aWxsIEJVRygpIGlmIHVzZWQgaW5hcHByb3ByaWF0ZWx5LgorICoKKyAqIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gYXRvbWljIGNvbnRleHQuCisgKgorICogV2lsbCB0cmlnZ2VyIGFuIGF1dG9tYXRpYyBkZWZlcnJlZCB0YWJsZSByZXNpemluZyBpZiB0aGUgc2l6ZSBncm93cworICogYmV5b25kIHRoZSB3YXRlcm1hcmsgaW5kaWNhdGVkIGJ5IGdyb3dfZGVjaXNpb24oKSB3aGljaCBjYW4gYmUgcGFzc2VkCisgKiB0byByaGFzaHRhYmxlX2luaXQoKS4KKyAqLworYm9vbCByaGFzaHRhYmxlX2xvb2t1cF9pbnNlcnQoc3RydWN0IHJoYXNodGFibGUgKmh0LCBzdHJ1Y3Qgcmhhc2hfaGVhZCAqb2JqKQoreworCXN0cnVjdCByaGFzaHRhYmxlX2NvbXBhcmVfYXJnIGFyZyA9IHsKKwkJLmh0ID0gaHQsCisJCS5rZXkgPSByaHRfb2JqKGh0LCBvYmopICsgaHQtPnAua2V5X29mZnNldCwKKwl9OworCisJQlVHX09OKCFodC0+cC5rZXlfbGVuKTsKKworCXJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9jb21wYXJlX2luc2VydChodCwgb2JqLCAmcmhhc2h0YWJsZV9jb21wYXJlLAorCQkJCQkJJmFyZyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyaGFzaHRhYmxlX2xvb2t1cF9pbnNlcnQpOworCisvKioKKyAqIHJoYXNodGFibGVfbG9va3VwX2NvbXBhcmVfaW5zZXJ0IC0gc2VhcmNoIGFuZCBpbnNlcnQgb2JqZWN0IHRvIGhhc2ggdGFibGUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBjb21wYXJlIGZ1bmN0aW9uCisgKiBAaHQ6CQloYXNoIHRhYmxlCisgKiBAb2JqOglwb2ludGVyIHRvIGhhc2ggaGVhZCBpbnNpZGUgb2JqZWN0CisgKiBAY29tcGFyZToJY29tcGFyZSBmdW5jdGlvbiwgbXVzdCByZXR1cm4gdHJ1ZSBvbiBtYXRjaAorICogQGFyZzoJYXJndW1lbnQgcGFzc2VkIG9uIHRvIGNvbXBhcmUgZnVuY3Rpb24KKyAqCisgKiBMb2NrcyBkb3duIHRoZSBidWNrZXQgY2hhaW4gaW4gYm90aCB0aGUgb2xkIGFuZCBuZXcgdGFibGUgaWYgYSByZXNpemUKKyAqIGlzIGluIHByb2dyZXNzIHRvIGVuc3VyZSB0aGF0IHdyaXRlcnMgY2FuJ3QgcmVtb3ZlIGZyb20gdGhlIG9sZCB0YWJsZQorICogYW5kIGNhbid0IGluc2VydCB0byB0aGUgbmV3IHRhYmxlIGR1cmluZyB0aGUgYXRvbWljIG9wZXJhdGlvbiBvZiBzZWFyY2gKKyAqIGFuZCBpbnNlcnRpb24uIFNlYXJjaGVzIGZvciBkdXBsaWNhdGVzIGluIGJvdGggdGhlIG9sZCBhbmQgbmV3IHRhYmxlIGlmCisgKiBhIHJlc2l6ZSBpcyBpbiBwcm9ncmVzcy4KKyAqCisgKiBMb29rdXBzIG1heSBvY2N1ciBpbiBwYXJhbGxlbCB3aXRoIGhhc2h0YWJsZSBtdXRhdGlvbnMgYW5kIHJlc2l6aW5nLgorICoKKyAqIFdpbGwgdHJpZ2dlciBhbiBhdXRvbWF0aWMgZGVmZXJyZWQgdGFibGUgcmVzaXppbmcgaWYgdGhlIHNpemUgZ3Jvd3MKKyAqIGJleW9uZCB0aGUgd2F0ZXJtYXJrIGluZGljYXRlZCBieSBncm93X2RlY2lzaW9uKCkgd2hpY2ggY2FuIGJlIHBhc3NlZAorICogdG8gcmhhc2h0YWJsZV9pbml0KCkuCisgKi8KK2Jvb2wgcmhhc2h0YWJsZV9sb29rdXBfY29tcGFyZV9pbnNlcnQoc3RydWN0IHJoYXNodGFibGUgKmh0LAorCQkJCSAgICAgIHN0cnVjdCByaGFzaF9oZWFkICpvYmosCisJCQkJICAgICAgYm9vbCAoKmNvbXBhcmUpKHZvaWQgKiwgdm9pZCAqKSwKKwkJCQkgICAgICB2b2lkICphcmcpCit7CisJc3RydWN0IGJ1Y2tldF90YWJsZSAqbmV3X3RibCwgKm9sZF90Ymw7CisJdTMyIG5ld19oYXNoOworCWJvb2wgc3VjY2VzcyA9IHRydWU7CisKKwlCVUdfT04oIWh0LT5wLmtleV9sZW4pOworCisJcmN1X3JlYWRfbG9jaygpOworCW9sZF90YmwgPSByaHRfZGVyZWZlcmVuY2VfcmN1KGh0LT50YmwsIGh0KTsKKwluZXdfdGJsID0gcmh0X2RlcmVmZXJlbmNlX3JjdShodC0+ZnV0dXJlX3RibCwgaHQpOworCW5ld19oYXNoID0gb2JqX3Jhd19oYXNoZm4oaHQsIHJodF9vYmooaHQsIG9iaikpOworCisJbG9ja19idWNrZXRzKG5ld190YmwsIG9sZF90YmwsIG5ld19oYXNoKTsKKworCWlmIChyaGFzaHRhYmxlX2xvb2t1cF9jb21wYXJlKGh0LCByaHRfb2JqKGh0LCBvYmopICsgaHQtPnAua2V5X29mZnNldCwKKwkJCQkgICAgICBjb21wYXJlLCBhcmcpKSB7CisJCXN1Y2Nlc3MgPSBmYWxzZTsKKwkJZ290byBleGl0OworCX0KKworCV9fcmhhc2h0YWJsZV9pbnNlcnQoaHQsIG9iaiwgbmV3X3RibCwgbmV3X2hhc2gpOworCitleGl0OgorCXVubG9ja19idWNrZXRzKG5ld190YmwsIG9sZF90YmwsIG5ld19oYXNoKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiBzdWNjZXNzOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9sb29rdXBfY29tcGFyZV9pbnNlcnQpOworCisvKioKKyAqIHJoYXNodGFibGVfd2Fsa19pbml0IC0gSW5pdGlhbGlzZSBhbiBpdGVyYXRvcgorICogQGh0OgkJVGFibGUgdG8gd2FsayBvdmVyCisgKiBAaXRlcjoJSGFzaCB0YWJsZSBJdGVyYXRvcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcHJlcGFyZXMgYSBoYXNoIHRhYmxlIHdhbGsuCisgKgorICogTm90ZSB0aGF0IGlmIHlvdSByZXN0YXJ0IGEgd2FsayBhZnRlciByaGFzaHRhYmxlX3dhbGtfc3RvcCB5b3UKKyAqIG1heSBzZWUgdGhlIHNhbWUgb2JqZWN0IHR3aWNlLiAgQWxzbywgeW91IG1heSBtaXNzIG9iamVjdHMgaWYKKyAqIHRoZXJlIGFyZSByZW1vdmFscyBpbiBiZXR3ZWVuIHJoYXNodGFibGVfd2Fsa19zdG9wIGFuZCB0aGUgbmV4dAorICogY2FsbCB0byByaGFzaHRhYmxlX3dhbGtfc3RhcnQuCisgKgorICogRm9yIGEgY29tcGxldGVseSBzdGFibGUgd2FsayB5b3Ugc2hvdWxkIGNvbnN0cnVjdCB5b3VyIG93biBkYXRhCisgKiBzdHJ1Y3R1cmUgb3V0c2lkZSB0aGUgaGFzaCB0YWJsZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCBzbyB5b3UgbXVzdCBub3QgY2FsbCBpdCBmcm9tIGludGVycnVwdAorICogY29udGV4dCBvciB3aXRoIHNwaW4gbG9ja3MgaGVsZC4KKyAqCisgKiBZb3UgbXVzdCBjYWxsIHJoYXNodGFibGVfd2Fsa19leGl0IGlmIHRoaXMgZnVuY3Rpb24gcmV0dXJucworICogc3VjY2Vzc2Z1bGx5LgorICovCitpbnQgcmhhc2h0YWJsZV93YWxrX2luaXQoc3RydWN0IHJoYXNodGFibGUgKmh0LCBzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyICppdGVyKQoreworCWl0ZXItPmh0ID0gaHQ7CisJaXRlci0+cCA9IE5VTEw7CisJaXRlci0+c2xvdCA9IDA7CisJaXRlci0+c2tpcCA9IDA7CisKKwlpdGVyLT53YWxrZXIgPSBrbWFsbG9jKHNpemVvZigqaXRlci0+d2Fsa2VyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpdGVyLT53YWxrZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfbG9jaygmaHQtPm11dGV4KTsKKwlsaXN0X2FkZCgmaXRlci0+d2Fsa2VyLT5saXN0LCAmaHQtPndhbGtlcnMpOworCW11dGV4X3VubG9jaygmaHQtPm11dGV4KTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX2luaXQpOworCisvKioKKyAqIHJoYXNodGFibGVfd2Fsa19leGl0IC0gRnJlZSBhbiBpdGVyYXRvcgorICogQGl0ZXI6CUhhc2ggdGFibGUgSXRlcmF0b3IKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgcmhhc2h0YWJsZV93YWxrX2luaXQuCisgKi8KK3ZvaWQgcmhhc2h0YWJsZV93YWxrX2V4aXQoc3RydWN0IHJoYXNodGFibGVfaXRlciAqaXRlcikKK3sKKwltdXRleF9sb2NrKCZpdGVyLT5odC0+bXV0ZXgpOworCWxpc3RfZGVsKCZpdGVyLT53YWxrZXItPmxpc3QpOworCW11dGV4X3VubG9jaygmaXRlci0+aHQtPm11dGV4KTsKKwlrZnJlZShpdGVyLT53YWxrZXIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX2V4aXQpOworCisvKioKKyAqIHJoYXNodGFibGVfd2Fsa19zdGFydCAtIFN0YXJ0IGEgaGFzaCB0YWJsZSB3YWxrCisgKiBAaXRlcjoJSGFzaCB0YWJsZSBpdGVyYXRvcgorICoKKyAqIFN0YXJ0IGEgaGFzaCB0YWJsZSB3YWxrLiAgTm90ZSB0aGF0IHdlIHRha2UgdGhlIFJDVSBsb2NrIGluIGFsbAorICogY2FzZXMgaW5jbHVkaW5nIHdoZW4gd2UgcmV0dXJuIGFuIGVycm9yLiAgU28geW91IG11c3QgYWx3YXlzIGNhbGwKKyAqIHJoYXNodGFibGVfd2Fsa19zdG9wIHRvIGNsZWFuIHVwLgorICoKKyAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLgorICoKKyAqIFJldHVybnMgLUVBR0FJTiBpZiByZXNpemUgZXZlbnQgb2NjdXJlZC4gIE5vdGUgdGhhdCB0aGUgaXRlcmF0b3IKKyAqIHdpbGwgcmV3aW5kIGJhY2sgdG8gdGhlIGJlZ2lubmluZyBhbmQgeW91IG1heSB1c2UgaXQgaW1tZWRpYXRlbHkKKyAqIGJ5IGNhbGxpbmcgcmhhc2h0YWJsZV93YWxrX25leHQuCisgKi8KK2ludCByaGFzaHRhYmxlX3dhbGtfc3RhcnQoc3RydWN0IHJoYXNodGFibGVfaXRlciAqaXRlcikKK3sKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlpZiAoaXRlci0+d2Fsa2VyLT5yZXNpemUpIHsKKwkJaXRlci0+c2xvdCA9IDA7CisJCWl0ZXItPnNraXAgPSAwOworCQlpdGVyLT53YWxrZXItPnJlc2l6ZSA9IGZhbHNlOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJoYXNodGFibGVfd2Fsa19zdGFydCk7CisKKy8qKgorICogcmhhc2h0YWJsZV93YWxrX25leHQgLSBSZXR1cm4gdGhlIG5leHQgb2JqZWN0IGFuZCBhZHZhbmNlIHRoZSBpdGVyYXRvcgorICogQGl0ZXI6CUhhc2ggdGFibGUgaXRlcmF0b3IKKyAqCisgKiBOb3RlIHRoYXQgeW91IG11c3QgY2FsbCByaGFzaHRhYmxlX3dhbGtfc3RvcCB3aGVuIHlvdSBhcmUgZmluaXNoZWQKKyAqIHdpdGggdGhlIHdhbGsuCisgKgorICogUmV0dXJucyB0aGUgbmV4dCBvYmplY3Qgb3IgTlVMTCB3aGVuIHRoZSBlbmQgb2YgdGhlIHRhYmxlIGlzIHJlYWNoZWQuCisgKgorICogUmV0dXJucyAtRUFHQUlOIGlmIHJlc2l6ZSBldmVudCBvY2N1cmVkLiAgTm90ZSB0aGF0IHRoZSBpdGVyYXRvcgorICogd2lsbCByZXdpbmQgYmFjayB0byB0aGUgYmVnaW5uaW5nIGFuZCB5b3UgbWF5IGNvbnRpbnVlIHRvIHVzZSBpdC4KKyAqLwordm9pZCAqcmhhc2h0YWJsZV93YWxrX25leHQoc3RydWN0IHJoYXNodGFibGVfaXRlciAqaXRlcikKK3sKKwljb25zdCBzdHJ1Y3QgYnVja2V0X3RhYmxlICp0Ymw7CisJc3RydWN0IHJoYXNodGFibGUgKmh0ID0gaXRlci0+aHQ7CisJc3RydWN0IHJoYXNoX2hlYWQgKnAgPSBpdGVyLT5wOworCXZvaWQgKm9iaiA9IE5VTEw7CisKKwl0YmwgPSByaHRfZGVyZWZlcmVuY2VfcmN1KGh0LT50YmwsIGh0KTsKKworCWlmIChwKSB7CisJCXAgPSByaHRfZGVyZWZlcmVuY2VfYnVja2V0X3JjdShwLT5uZXh0LCB0YmwsIGl0ZXItPnNsb3QpOworCQlnb3RvIG5leHQ7CisJfQorCisJZm9yICg7IGl0ZXItPnNsb3QgPCB0YmwtPnNpemU7IGl0ZXItPnNsb3QrKykgeworCQlpbnQgc2tpcCA9IGl0ZXItPnNraXA7CisKKwkJcmh0X2Zvcl9lYWNoX3JjdShwLCB0YmwsIGl0ZXItPnNsb3QpIHsKKwkJCWlmICghc2tpcCkKKwkJCQlicmVhazsKKwkJCXNraXAtLTsKKwkJfQorCituZXh0OgorCQlpZiAoIXJodF9pc19hX251bGxzKHApKSB7CisJCQlpdGVyLT5za2lwKys7CisJCQlpdGVyLT5wID0gcDsKKwkJCW9iaiA9IHJodF9vYmooaHQsIHApOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpdGVyLT5za2lwID0gMDsKKwl9CisKKwlpdGVyLT5wID0gTlVMTDsKKworb3V0OgorCWlmIChpdGVyLT53YWxrZXItPnJlc2l6ZSkgeworCQlpdGVyLT5wID0gTlVMTDsKKwkJaXRlci0+c2xvdCA9IDA7CisJCWl0ZXItPnNraXAgPSAwOworCQlpdGVyLT53YWxrZXItPnJlc2l6ZSA9IGZhbHNlOworCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwl9CisKKwlyZXR1cm4gb2JqOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX25leHQpOworCisvKioKKyAqIHJoYXNodGFibGVfd2Fsa19zdG9wIC0gRmluaXNoIGEgaGFzaCB0YWJsZSB3YWxrCisgKiBAaXRlcjoJSGFzaCB0YWJsZSBpdGVyYXRvcgorICoKKyAqIEZpbmlzaCBhIGhhc2ggdGFibGUgd2Fsay4KKyAqLwordm9pZCByaGFzaHRhYmxlX3dhbGtfc3RvcChzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyICppdGVyKQoreworCXJjdV9yZWFkX3VubG9jaygpOworCWl0ZXItPnAgPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV93YWxrX3N0b3ApOworCiBzdGF0aWMgc2l6ZV90IHJvdW5kZWRfaGFzaHRhYmxlX3NpemUoc3RydWN0IHJoYXNodGFibGVfcGFyYW1zICpwYXJhbXMpCiB7CiAJcmV0dXJuIG1heChyb3VuZHVwX3Bvd19vZl90d28ocGFyYW1zLT5uZWxlbV9oaW50ICogNCAvIDMpLApAQCAtNTI1LDkgKzEwNDcsNyBAQAogICoJLmtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIGtleSksCiAgKgkua2V5X2xlbiA9IHNpemVvZihpbnQpLAogICoJLmhhc2hmbiA9IGpoYXNoLAotICogI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCi0gKgkubXV0ZXhfaXNfaGVsZCA9ICZteV9tdXRleF9pc19oZWxkLAotICogI2VuZGlmCisgKgkubnVsbHNfYmFzZSA9ICgxVSA8PCBSSFRfQkFTRV9TSElGVCksCiAgKiB9OwogICoKICAqIENvbmZpZ3VyYXRpb24gRXhhbXBsZSAyOiBWYXJpYWJsZSBsZW5ndGgga2V5cwpAQCAtNTQ3LDkgKzEwNjcsNiBAQAogICoJLmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSwKICAqCS5oYXNoZm4gPSBqaGFzaCwKICAqCS5vYmpfaGFzaGZuID0gbXlfaGFzaF9mbiwKLSAqICNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORwotICoJLm11dGV4X2lzX2hlbGQgPSAmbXlfbXV0ZXhfaXNfaGVsZCwKLSAqICNlbmRpZgogICogfTsKICAqLwogaW50IHJoYXNodGFibGVfaW5pdChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyAqcGFyYW1zKQpAQCAtNTYzLDI0ICsxMDgwLDQwIEBACiAJICAgICghcGFyYW1zLT5rZXlfbGVuICYmICFwYXJhbXMtPm9ial9oYXNoZm4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmIChwYXJhbXMtPm51bGxzX2Jhc2UgJiYgcGFyYW1zLT5udWxsc19iYXNlIDwgKDFVIDw8IFJIVF9CQVNFX1NISUZUKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlwYXJhbXMtPm1pbl9zaGlmdCA9IG1heF90KHNpemVfdCwgcGFyYW1zLT5taW5fc2hpZnQsCiAJCQkJICBpbG9nMihIQVNIX01JTl9TSVpFKSk7CiAKIAlpZiAocGFyYW1zLT5uZWxlbV9oaW50KQogCQlzaXplID0gcm91bmRlZF9oYXNodGFibGVfc2l6ZShwYXJhbXMpOwogCi0JdGJsID0gYnVja2V0X3RhYmxlX2FsbG9jKHNpemUpOworCW1lbXNldChodCwgMCwgc2l6ZW9mKCpodCkpOworCW11dGV4X2luaXQoJmh0LT5tdXRleCk7CisJbWVtY3B5KCZodC0+cCwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpOworCUlOSVRfTElTVF9IRUFEKCZodC0+d2Fsa2Vycyk7CisKKwlpZiAocGFyYW1zLT5sb2Nrc19tdWwpCisJCWh0LT5wLmxvY2tzX211bCA9IHJvdW5kdXBfcG93X29mX3R3byhwYXJhbXMtPmxvY2tzX211bCk7CisJZWxzZQorCQlodC0+cC5sb2Nrc19tdWwgPSBCVUNLRVRfTE9DS1NfUEVSX0NQVTsKKworCXRibCA9IGJ1Y2tldF90YWJsZV9hbGxvYyhodCwgc2l6ZSk7CiAJaWYgKHRibCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCW1lbXNldChodCwgMCwgc2l6ZW9mKCpodCkpOwotCWh0LT5zaGlmdCA9IGlsb2cyKHRibC0+c2l6ZSk7Ci0JbWVtY3B5KCZodC0+cCwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpOworCWF0b21pY19zZXQoJmh0LT5uZWxlbXMsIDApOworCWF0b21pY19zZXQoJmh0LT5zaGlmdCwgaWxvZzIodGJsLT5zaXplKSk7CiAJUkNVX0lOSVRfUE9JTlRFUihodC0+dGJsLCB0YmwpOworCVJDVV9JTklUX1BPSU5URVIoaHQtPmZ1dHVyZV90YmwsIHRibCk7CiAKIAlpZiAoIWh0LT5wLmhhc2hfcm5kKQogCQlnZXRfcmFuZG9tX2J5dGVzKCZodC0+cC5oYXNoX3JuZCwgc2l6ZW9mKGh0LT5wLmhhc2hfcm5kKSk7CiAKKwlpZiAoaHQtPnAuZ3Jvd19kZWNpc2lvbiB8fCBodC0+cC5zaHJpbmtfZGVjaXNpb24pCisJCUlOSVRfV09SSygmaHQtPnJ1bl93b3JrLCByaHRfZGVmZXJyZWRfd29ya2VyKTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9pbml0KTsKQEAgLTU5MywyMTYgKzExMjYsMTUgQEAKICAqIGhhcyB0byBtYWtlIHN1cmUgdGhhdCBubyByZXNpemluZyBtYXkgaGFwcGVuIGJ5IHVucHVibGlzaGluZyB0aGUgaGFzaHRhYmxlCiAgKiBhbmQgd2FpdGluZyBmb3IgdGhlIHF1aWVzY2VudCBjeWNsZSBiZWZvcmUgcmVsZWFzaW5nIHRoZSBidWNrZXQgYXJyYXkuCiAgKi8KLXZvaWQgcmhhc2h0YWJsZV9kZXN0cm95KGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlICpodCkKK3ZvaWQgcmhhc2h0YWJsZV9kZXN0cm95KHN0cnVjdCByaGFzaHRhYmxlICpodCkKIHsKLQlidWNrZXRfdGFibGVfZnJlZShodC0+dGJsKTsKKwlodC0+YmVpbmdfZGVzdHJveWVkID0gdHJ1ZTsKKworCWlmIChodC0+cC5ncm93X2RlY2lzaW9uIHx8IGh0LT5wLnNocmlua19kZWNpc2lvbikKKwkJY2FuY2VsX3dvcmtfc3luYygmaHQtPnJ1bl93b3JrKTsKKworCW11dGV4X2xvY2soJmh0LT5tdXRleCk7CisJYnVja2V0X3RhYmxlX2ZyZWUocmh0X2RlcmVmZXJlbmNlKGh0LT50YmwsIGh0KSk7CisJbXV0ZXhfdW5sb2NrKCZodC0+bXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocmhhc2h0YWJsZV9kZXN0cm95KTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTZWxmIFRlc3QKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIENPTkZJR19URVNUX1JIQVNIVEFCTEUKLQotI2RlZmluZSBURVNUX0hUX1NJWkUJOAotI2RlZmluZSBURVNUX0VOVFJJRVMJMjA0OAotI2RlZmluZSBURVNUX1BUUgkoKHZvaWQgKikgMHhkZWFkYmVlZikKLSNkZWZpbmUgVEVTVF9ORVhQQU5EUwk0Ci0KLSNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORwotc3RhdGljIGludCB0ZXN0X211dGV4X2lzX2hlbGQodm9pZCAqcGFyZW50KQotewotCXJldHVybiAxOwotfQotI2VuZGlmCi0KLXN0cnVjdCB0ZXN0X29iaiB7Ci0Jdm9pZAkJCSpwdHI7Ci0JaW50CQkJdmFsdWU7Ci0Jc3RydWN0IHJoYXNoX2hlYWQJbm9kZTsKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHRlc3Rfcmh0X2xvb2t1cChzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgVEVTVF9FTlRSSUVTICogMjsgaSsrKSB7Ci0JCXN0cnVjdCB0ZXN0X29iaiAqb2JqOwotCQlib29sIGV4cGVjdGVkID0gIShpICUgMik7Ci0JCXUzMiBrZXkgPSBpOwotCi0JCW9iaiA9IHJoYXNodGFibGVfbG9va3VwKGh0LCAma2V5KTsKLQotCQlpZiAoZXhwZWN0ZWQgJiYgIW9iaikgewotCQkJcHJfd2FybigiVGVzdCBmYWlsZWQ6IENvdWxkIG5vdCBmaW5kIGtleSAldVxuIiwga2V5KTsKLQkJCXJldHVybiAtRU5PRU5UOwotCQl9IGVsc2UgaWYgKCFleHBlY3RlZCAmJiBvYmopIHsKLQkJCXByX3dhcm4oIlRlc3QgZmFpbGVkOiBVbmV4cGVjdGVkIGVudHJ5IGZvdW5kIGZvciBrZXkgJXVcbiIsCi0JCQkJa2V5KTsKLQkJCXJldHVybiAtRUVYSVNUOwotCQl9IGVsc2UgaWYgKGV4cGVjdGVkICYmIG9iaikgewotCQkJaWYgKG9iai0+cHRyICE9IFRFU1RfUFRSIHx8IG9iai0+dmFsdWUgIT0gaSkgewotCQkJCXByX3dhcm4oIlRlc3QgZmFpbGVkOiBMb29rdXAgdmFsdWUgbWlzbWF0Y2ggJXAhPSVwLCAldSE9JXVcbiIsCi0JCQkJCW9iai0+cHRyLCBURVNUX1BUUiwgb2JqLT52YWx1ZSwgaSk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgdGVzdF9idWNrZXRfc3RhdHMoc3RydWN0IHJoYXNodGFibGUgKmh0LCBib29sIHF1aWV0KQotewotCXVuc2lnbmVkIGludCBjbnQsIHJjdV9jbnQsIGksIHRvdGFsID0gMDsKLQlzdHJ1Y3QgdGVzdF9vYmogKm9iajsKLQlzdHJ1Y3QgYnVja2V0X3RhYmxlICp0Ymw7Ci0KLQl0YmwgPSByaHRfZGVyZWZlcmVuY2VfcmN1KGh0LT50YmwsIGh0KTsKLQlmb3IgKGkgPSAwOyBpIDwgdGJsLT5zaXplOyBpKyspIHsKLQkJcmN1X2NudCA9IGNudCA9IDA7Ci0KLQkJaWYgKCFxdWlldCkKLQkJCXByX2luZm8oIiBbJSM0eC8lenVdIiwgaSwgdGJsLT5zaXplKTsKLQotCQlyaHRfZm9yX2VhY2hfZW50cnlfcmN1KG9iaiwgdGJsLT5idWNrZXRzW2ldLCBub2RlKSB7Ci0JCQljbnQrKzsKLQkJCXRvdGFsKys7Ci0JCQlpZiAoIXF1aWV0KQotCQkJCXByX2NvbnQoIiBbJXBdLCIsIG9iaik7Ci0JCX0KLQotCQlyaHRfZm9yX2VhY2hfZW50cnlfcmN1KG9iaiwgdGJsLT5idWNrZXRzW2ldLCBub2RlKQotCQkJcmN1X2NudCsrOwotCi0JCWlmIChyY3VfY250ICE9IGNudCkKLQkJCXByX3dhcm4oIlRlc3QgZmFpbGVkOiBDaGFpbiBjb3VudCBtaXNtYWNoICVkICE9ICVkIiwKLQkJCQljbnQsIHJjdV9jbnQpOwotCi0JCWlmICghcXVpZXQpCi0JCQlwcl9jb250KCJcbiAgWyUjeF0gZmlyc3QgZWxlbWVudDogJXAsIGNoYWluIGxlbmd0aDogJXVcbiIsCi0JCQkJaSwgdGJsLT5idWNrZXRzW2ldLCBjbnQpOwotCX0KLQotCXByX2luZm8oIiAgVHJhdmVyc2FsIGNvbXBsZXRlOiBjb3VudGVkPSV1LCBuZWxlbXM9JXp1LCBlbnRyaWVzPSVkXG4iLAotCQl0b3RhbCwgaHQtPm5lbGVtcywgVEVTVF9FTlRSSUVTKTsKLQotCWlmICh0b3RhbCAhPSBodC0+bmVsZW1zIHx8IHRvdGFsICE9IFRFU1RfRU5UUklFUykKLQkJcHJfd2FybigiVGVzdCBmYWlsZWQ6IFRvdGFsIGNvdW50IG1pc21hdGNoIF5eXiIpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCB0ZXN0X3JoYXNodGFibGUoc3RydWN0IHJoYXNodGFibGUgKmh0KQotewotCXN0cnVjdCBidWNrZXRfdGFibGUgKnRibDsKLQlzdHJ1Y3QgdGVzdF9vYmogKm9iaiwgKm5leHQ7Ci0JaW50IGVycjsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCS8qCi0JICogSW5zZXJ0aW9uIFRlc3Q6Ci0JICogSW5zZXJ0IFRFU1RfRU5UUklFUyBpbnRvIHRhYmxlIHdpdGggYWxsIGtleXMgZXZlbiBudW1iZXJzCi0JICovCi0JcHJfaW5mbygiICBBZGRpbmcgJWQga2V5c1xuIiwgVEVTVF9FTlRSSUVTKTsKLQlmb3IgKGkgPSAwOyBpIDwgVEVTVF9FTlRSSUVTOyBpKyspIHsKLQkJc3RydWN0IHRlc3Rfb2JqICpvYmo7Ci0KLQkJb2JqID0ga3phbGxvYyhzaXplb2YoKm9iaiksIEdGUF9LRVJORUwpOwotCQlpZiAoIW9iaikgewotCQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gZXJyb3I7Ci0JCX0KLQotCQlvYmotPnB0ciA9IFRFU1RfUFRSOwotCQlvYmotPnZhbHVlID0gaSAqIDI7Ci0KLQkJcmhhc2h0YWJsZV9pbnNlcnQoaHQsICZvYmotPm5vZGUpOwotCX0KLQotCXJjdV9yZWFkX2xvY2soKTsKLQl0ZXN0X2J1Y2tldF9zdGF0cyhodCwgdHJ1ZSk7Ci0JdGVzdF9yaHRfbG9va3VwKGh0KTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCWZvciAoaSA9IDA7IGkgPCBURVNUX05FWFBBTkRTOyBpKyspIHsKLQkJcHJfaW5mbygiICBUYWJsZSBleHBhbnNpb24gaXRlcmF0aW9uICV1Li4uXG4iLCBpKTsKLQkJcmhhc2h0YWJsZV9leHBhbmQoaHQpOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJcHJfaW5mbygiICBWZXJpZnlpbmcgbG9va3Vwcy4uLlxuIik7Ci0JCXRlc3Rfcmh0X2xvb2t1cChodCk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBURVNUX05FWFBBTkRTOyBpKyspIHsKLQkJcHJfaW5mbygiICBUYWJsZSBzaHJpbmthZ2UgaXRlcmF0aW9uICV1Li4uXG4iLCBpKTsKLQkJcmhhc2h0YWJsZV9zaHJpbmsoaHQpOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKLQkJcHJfaW5mbygiICBWZXJpZnlpbmcgbG9va3Vwcy4uLlxuIik7Ci0JCXRlc3Rfcmh0X2xvb2t1cChodCk7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCX0KLQotCXJjdV9yZWFkX2xvY2soKTsKLQl0ZXN0X2J1Y2tldF9zdGF0cyhodCwgdHJ1ZSk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQlwcl9pbmZvKCIgIERlbGV0aW5nICVkIGtleXNcbiIsIFRFU1RfRU5UUklFUyk7Ci0JZm9yIChpID0gMDsgaSA8IFRFU1RfRU5UUklFUzsgaSsrKSB7Ci0JCXUzMiBrZXkgPSBpICogMjsKLQotCQlvYmogPSByaGFzaHRhYmxlX2xvb2t1cChodCwgJmtleSk7Ci0JCUJVR19PTighb2JqKTsKLQotCQlyaGFzaHRhYmxlX3JlbW92ZShodCwgJm9iai0+bm9kZSk7Ci0JCWtmcmVlKG9iaik7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycm9yOgotCXRibCA9IHJodF9kZXJlZmVyZW5jZV9yY3UoaHQtPnRibCwgaHQpOwotCWZvciAoaSA9IDA7IGkgPCB0YmwtPnNpemU7IGkrKykKLQkJcmh0X2Zvcl9lYWNoX2VudHJ5X3NhZmUob2JqLCBuZXh0LCB0YmwtPmJ1Y2tldHNbaV0sIGh0LCBub2RlKQotCQkJa2ZyZWUob2JqKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHRlc3Rfcmh0X2luaXQodm9pZCkKLXsKLQlzdHJ1Y3Qgcmhhc2h0YWJsZSBodDsKLQlzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zID0gewotCQkubmVsZW1faGludCA9IFRFU1RfSFRfU0laRSwKLQkJLmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSwKLQkJLmtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIHZhbHVlKSwKLQkJLmtleV9sZW4gPSBzaXplb2YoaW50KSwKLQkJLmhhc2hmbiA9IGpoYXNoLAotI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCi0JCS5tdXRleF9pc19oZWxkID0gJnRlc3RfbXV0ZXhfaXNfaGVsZCwKLSNlbmRpZgotCQkuZ3Jvd19kZWNpc2lvbiA9IHJodF9ncm93X2Fib3ZlXzc1LAotCQkuc2hyaW5rX2RlY2lzaW9uID0gcmh0X3Nocmlua19iZWxvd18zMCwKLQl9OwotCWludCBlcnI7Ci0KLQlwcl9pbmZvKCJSdW5uaW5nIHJlc2l6YWJsZSBoYXNodGFibGUgdGVzdHMuLi5cbiIpOwotCi0JZXJyID0gcmhhc2h0YWJsZV9pbml0KCZodCwgJnBhcmFtcyk7Ci0JaWYgKGVyciA8IDApIHsKLQkJcHJfd2FybigiVGVzdCBmYWlsZWQ6IFVuYWJsZSB0byBpbml0aWFsaXplIGhhc2h0YWJsZTogJWRcbiIsCi0JCQllcnIpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IHRlc3Rfcmhhc2h0YWJsZSgmaHQpOwotCi0Jcmhhc2h0YWJsZV9kZXN0cm95KCZodCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdWJzeXNfaW5pdGNhbGwodGVzdF9yaHRfaW5pdCk7Ci0KLSNlbmRpZiAvKiBDT05GSUdfVEVTVF9SSEFTSFRBQkxFICovCmRpZmYgLS1naXQgYS9saWIvdGVzdF9yaGFzaHRhYmxlLmMgYi9saWIvdGVzdF9yaGFzaHRhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRmZWJhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi90ZXN0X3JoYXNodGFibGUuYwpAQCAtMCwwICsxLDIyNyBAQAorLyoKKyAqIFJlc2l6YWJsZSwgU2NhbGFibGUsIENvbmN1cnJlbnQgSGFzaCBUYWJsZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBUaG9tYXMgR3JhZiA8dGdyYWZAc3V1Zy5jaD4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDE0IFBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgorICoKKyAqIEJhc2VkIG9uIHRoZSBmb2xsb3dpbmcgcGFwZXI6CisgKiBodHRwczovL3d3dy51c2VuaXgub3JnL2xlZ2FjeS9ldmVudC9hdGMxMS90ZWNoL2ZpbmFsX2ZpbGVzL1RyaXBsZXR0LnBkZgorICoKKyAqIENvZGUgcGFydGlhbGx5IGRlcml2ZWQgZnJvbSBuZnRfaGFzaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTZWxmIFRlc3QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvcmhhc2h0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworCisjZGVmaW5lIFRFU1RfSFRfU0laRQk4CisjZGVmaW5lIFRFU1RfRU5UUklFUwkyMDQ4CisjZGVmaW5lIFRFU1RfUFRSCSgodm9pZCAqKSAweGRlYWRiZWVmKQorI2RlZmluZSBURVNUX05FWFBBTkRTCTQKKworc3RydWN0IHRlc3Rfb2JqIHsKKwl2b2lkCQkJKnB0cjsKKwlpbnQJCQl2YWx1ZTsKKwlzdHJ1Y3Qgcmhhc2hfaGVhZAlub2RlOworfTsKKworc3RhdGljIGludCBfX2luaXQgdGVzdF9yaHRfbG9va3VwKHN0cnVjdCByaGFzaHRhYmxlICpodCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBURVNUX0VOVFJJRVMgKiAyOyBpKyspIHsKKwkJc3RydWN0IHRlc3Rfb2JqICpvYmo7CisJCWJvb2wgZXhwZWN0ZWQgPSAhKGkgJSAyKTsKKwkJdTMyIGtleSA9IGk7CisKKwkJb2JqID0gcmhhc2h0YWJsZV9sb29rdXAoaHQsICZrZXkpOworCisJCWlmIChleHBlY3RlZCAmJiAhb2JqKSB7CisJCQlwcl93YXJuKCJUZXN0IGZhaWxlZDogQ291bGQgbm90IGZpbmQga2V5ICV1XG4iLCBrZXkpOworCQkJcmV0dXJuIC1FTk9FTlQ7CisJCX0gZWxzZSBpZiAoIWV4cGVjdGVkICYmIG9iaikgeworCQkJcHJfd2FybigiVGVzdCBmYWlsZWQ6IFVuZXhwZWN0ZWQgZW50cnkgZm91bmQgZm9yIGtleSAldVxuIiwKKwkJCQlrZXkpOworCQkJcmV0dXJuIC1FRVhJU1Q7CisJCX0gZWxzZSBpZiAoZXhwZWN0ZWQgJiYgb2JqKSB7CisJCQlpZiAob2JqLT5wdHIgIT0gVEVTVF9QVFIgfHwgb2JqLT52YWx1ZSAhPSBpKSB7CisJCQkJcHJfd2FybigiVGVzdCBmYWlsZWQ6IExvb2t1cCB2YWx1ZSBtaXNtYXRjaCAlcCE9JXAsICV1IT0ldVxuIiwKKwkJCQkJb2JqLT5wdHIsIFRFU1RfUFRSLCBvYmotPnZhbHVlLCBpKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2J1Y2tldF9zdGF0cyhzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQsIGJvb2wgcXVpZXQpCit7CisJdW5zaWduZWQgaW50IGNudCwgcmN1X2NudCwgaSwgdG90YWwgPSAwOworCXN0cnVjdCByaGFzaF9oZWFkICpwb3M7CisJc3RydWN0IHRlc3Rfb2JqICpvYmo7CisJc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsOworCisJdGJsID0gcmh0X2RlcmVmZXJlbmNlX3JjdShodC0+dGJsLCBodCk7CisJZm9yIChpID0gMDsgaSA8IHRibC0+c2l6ZTsgaSsrKSB7CisJCXJjdV9jbnQgPSBjbnQgPSAwOworCisJCWlmICghcXVpZXQpCisJCQlwcl9pbmZvKCIgWyUjNHgvJXp1XSIsIGksIHRibC0+c2l6ZSk7CisKKwkJcmh0X2Zvcl9lYWNoX2VudHJ5X3JjdShvYmosIHBvcywgdGJsLCBpLCBub2RlKSB7CisJCQljbnQrKzsKKwkJCXRvdGFsKys7CisJCQlpZiAoIXF1aWV0KQorCQkJCXByX2NvbnQoIiBbJXBdLCIsIG9iaik7CisJCX0KKworCQlyaHRfZm9yX2VhY2hfZW50cnlfcmN1KG9iaiwgcG9zLCB0YmwsIGksIG5vZGUpCisJCQlyY3VfY250Kys7CisKKwkJaWYgKHJjdV9jbnQgIT0gY250KQorCQkJcHJfd2FybigiVGVzdCBmYWlsZWQ6IENoYWluIGNvdW50IG1pc21hY2ggJWQgIT0gJWQiLAorCQkJCWNudCwgcmN1X2NudCk7CisKKwkJaWYgKCFxdWlldCkKKwkJCXByX2NvbnQoIlxuICBbJSN4XSBmaXJzdCBlbGVtZW50OiAlcCwgY2hhaW4gbGVuZ3RoOiAldVxuIiwKKwkJCQlpLCB0YmwtPmJ1Y2tldHNbaV0sIGNudCk7CisJfQorCisJcHJfaW5mbygiICBUcmF2ZXJzYWwgY29tcGxldGU6IGNvdW50ZWQ9JXUsIG5lbGVtcz0ldSwgZW50cmllcz0lZFxuIiwKKwkJdG90YWwsIGF0b21pY19yZWFkKCZodC0+bmVsZW1zKSwgVEVTVF9FTlRSSUVTKTsKKworCWlmICh0b3RhbCAhPSBhdG9taWNfcmVhZCgmaHQtPm5lbGVtcykgfHwgdG90YWwgIT0gVEVTVF9FTlRSSUVTKQorCQlwcl93YXJuKCJUZXN0IGZhaWxlZDogVG90YWwgY291bnQgbWlzbWF0Y2ggXl5eIik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHRlc3Rfcmhhc2h0YWJsZShzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQpCit7CisJc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsOworCXN0cnVjdCB0ZXN0X29iaiAqb2JqOworCXN0cnVjdCByaGFzaF9oZWFkICpwb3MsICpuZXh0OworCWludCBlcnI7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKgorCSAqIEluc2VydGlvbiBUZXN0OgorCSAqIEluc2VydCBURVNUX0VOVFJJRVMgaW50byB0YWJsZSB3aXRoIGFsbCBrZXlzIGV2ZW4gbnVtYmVycworCSAqLworCXByX2luZm8oIiAgQWRkaW5nICVkIGtleXNcbiIsIFRFU1RfRU5UUklFUyk7CisJZm9yIChpID0gMDsgaSA8IFRFU1RfRU5UUklFUzsgaSsrKSB7CisJCXN0cnVjdCB0ZXN0X29iaiAqb2JqOworCisJCW9iaiA9IGt6YWxsb2Moc2l6ZW9mKCpvYmopLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFvYmopIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJb2JqLT5wdHIgPSBURVNUX1BUUjsKKwkJb2JqLT52YWx1ZSA9IGkgKiAyOworCisJCXJoYXNodGFibGVfaW5zZXJ0KGh0LCAmb2JqLT5ub2RlKTsKKwl9CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJdGVzdF9idWNrZXRfc3RhdHMoaHQsIHRydWUpOworCXRlc3Rfcmh0X2xvb2t1cChodCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVEVTVF9ORVhQQU5EUzsgaSsrKSB7CisJCXByX2luZm8oIiAgVGFibGUgZXhwYW5zaW9uIGl0ZXJhdGlvbiAldS4uLlxuIiwgaSk7CisJCW11dGV4X2xvY2soJmh0LT5tdXRleCk7CisJCXJoYXNodGFibGVfZXhwYW5kKGh0KTsKKwkJbXV0ZXhfdW5sb2NrKCZodC0+bXV0ZXgpOworCisJCXJjdV9yZWFkX2xvY2soKTsKKwkJcHJfaW5mbygiICBWZXJpZnlpbmcgbG9va3Vwcy4uLlxuIik7CisJCXRlc3Rfcmh0X2xvb2t1cChodCk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBURVNUX05FWFBBTkRTOyBpKyspIHsKKwkJcHJfaW5mbygiICBUYWJsZSBzaHJpbmthZ2UgaXRlcmF0aW9uICV1Li4uXG4iLCBpKTsKKwkJbXV0ZXhfbG9jaygmaHQtPm11dGV4KTsKKwkJcmhhc2h0YWJsZV9zaHJpbmsoaHQpOworCQltdXRleF91bmxvY2soJmh0LT5tdXRleCk7CisKKwkJcmN1X3JlYWRfbG9jaygpOworCQlwcl9pbmZvKCIgIFZlcmlmeWluZyBsb29rdXBzLi4uXG4iKTsKKwkJdGVzdF9yaHRfbG9va3VwKGh0KTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJfQorCisJcmN1X3JlYWRfbG9jaygpOworCXRlc3RfYnVja2V0X3N0YXRzKGh0LCB0cnVlKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXByX2luZm8oIiAgRGVsZXRpbmcgJWQga2V5c1xuIiwgVEVTVF9FTlRSSUVTKTsKKwlmb3IgKGkgPSAwOyBpIDwgVEVTVF9FTlRSSUVTOyBpKyspIHsKKwkJdTMyIGtleSA9IGkgKiAyOworCisJCW9iaiA9IHJoYXNodGFibGVfbG9va3VwKGh0LCAma2V5KTsKKwkJQlVHX09OKCFvYmopOworCisJCXJoYXNodGFibGVfcmVtb3ZlKGh0LCAmb2JqLT5ub2RlKTsKKwkJa2ZyZWUob2JqKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyb3I6CisJdGJsID0gcmh0X2RlcmVmZXJlbmNlX3JjdShodC0+dGJsLCBodCk7CisJZm9yIChpID0gMDsgaSA8IHRibC0+c2l6ZTsgaSsrKQorCQlyaHRfZm9yX2VhY2hfZW50cnlfc2FmZShvYmosIHBvcywgbmV4dCwgdGJsLCBpLCBub2RlKQorCQkJa2ZyZWUob2JqKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHRlc3Rfcmh0X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3Qgcmhhc2h0YWJsZSBodDsKKwlzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcGFyYW1zID0geworCQkubmVsZW1faGludCA9IFRFU1RfSFRfU0laRSwKKwkJLmhlYWRfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHRlc3Rfb2JqLCBub2RlKSwKKwkJLmtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGVzdF9vYmosIHZhbHVlKSwKKwkJLmtleV9sZW4gPSBzaXplb2YoaW50KSwKKwkJLmhhc2hmbiA9IGpoYXNoLAorCQkubnVsbHNfYmFzZSA9ICgzVSA8PCBSSFRfQkFTRV9TSElGVCksCisJCS5ncm93X2RlY2lzaW9uID0gcmh0X2dyb3dfYWJvdmVfNzUsCisJCS5zaHJpbmtfZGVjaXNpb24gPSByaHRfc2hyaW5rX2JlbG93XzMwLAorCX07CisJaW50IGVycjsKKworCXByX2luZm8oIlJ1bm5pbmcgcmVzaXphYmxlIGhhc2h0YWJsZSB0ZXN0cy4uLlxuIik7CisKKwllcnIgPSByaGFzaHRhYmxlX2luaXQoJmh0LCAmcGFyYW1zKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwcl93YXJuKCJUZXN0IGZhaWxlZDogVW5hYmxlIHRvIGluaXRpYWxpemUgaGFzaHRhYmxlOiAlZFxuIiwKKwkJCWVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gdGVzdF9yaGFzaHRhYmxlKCZodCk7CisKKwlyaGFzaHRhYmxlX2Rlc3Ryb3koJmh0KTsKKworCXJldHVybiBlcnI7Cit9CisKK21vZHVsZV9pbml0KHRlc3Rfcmh0X2luaXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCAxZDFhZTZiLi40Mzk1YjEyIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTMyNSw2ICszMjUsNyBAQAogCiBjb25maWcgTU1VX05PVElGSUVSCiAJYm9vbAorCXNlbGVjdCBTUkNVCiAKIGNvbmZpZyBLU00KIAlib29sICJFbmFibGUgS1NNIGZvciBwYWdlIG1lcmdpbmciCmRpZmYgLS1naXQgYS9tbS9NYWtlZmlsZSBiL21tL01ha2VmaWxlCmluZGV4IDRiZjU4NmUuLjM1NDg0NjAgMTAwNjQ0Ci0tLSBhL21tL01ha2VmaWxlCisrKyBiL21tL01ha2VmaWxlCkBAIC0zLDcgKzMsNyBAQAogIwogCiBtbXUteQkJCTo9IG5vbW11Lm8KLW1tdS0kKENPTkZJR19NTVUpCTo9IGZyZW1hcC5vIGd1cC5vIGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXAorbW11LSQoQ09ORklHX01NVSkJOj0gZ3VwLm8gaGlnaG1lbS5vIG1lbW9yeS5vIG1pbmNvcmUubyBcCiAJCQkgICBtbG9jay5vIG1tYXAubyBtcHJvdGVjdC5vIG1yZW1hcC5vIG1zeW5jLm8gcm1hcC5vIFwKIAkJCSAgIHZtYWxsb2MubyBwYWdld2Fsay5vIHBndGFibGUtZ2VuZXJpYy5vCiAKZGlmZiAtLWdpdCBhL21tL2NsZWFuY2FjaGUuYyBiL21tL2NsZWFuY2FjaGUuYwppbmRleCBkMGVhYzQzLi4wNTNiY2Q4IDEwMDY0NAotLS0gYS9tbS9jbGVhbmNhY2hlLmMKKysrIGIvbW0vY2xlYW5jYWNoZS5jCkBAIC0yNSw3ICsyNSw3IEBACiBzdGF0aWMgc3RydWN0IGNsZWFuY2FjaGVfb3BzICpjbGVhbmNhY2hlX29wcyBfX3JlYWRfbW9zdGx5OwogCiAvKgotICogQ291bnRlcnMgYXZhaWxhYmxlIHZpYSAvc3lzL2tlcm5lbC9kZWJ1Zy9mcm9udHN3YXAgKGlmIGRlYnVnZnMgaXMKKyAqIENvdW50ZXJzIGF2YWlsYWJsZSB2aWEgL3N5cy9rZXJuZWwvZGVidWcvY2xlYW5jYWNoZSAoaWYgZGVidWdmcyBpcwogICogcHJvcGVybHkgY29uZmlndXJlZC4gIFRoZXNlIGFyZSBmb3IgaW5mb3JtYXRpb24gb25seSBzbyBhcmUgbm90IHByb3RlY3RlZAogICogYWdhaW5zdCBpbmNyZW1lbnQgcmFjZXMuCiAgKi8KZGlmZiAtLWdpdCBhL21tL2NtYS5jIGIvbW0vY21hLmMKaW5kZXggYTg1YWUyOC4uNzUwMTZmZCAxMDA2NDQKLS0tIGEvbW0vY21hLmMKKysrIGIvbW0vY21hLmMKQEAgLTE5OSw2ICsxOTksNyBAQAogCWNtYS0+b3JkZXJfcGVyX2JpdCA9IG9yZGVyX3Blcl9iaXQ7CiAJKnJlc19jbWEgPSBjbWE7CiAJY21hX2FyZWFfY291bnQrKzsKKwl0b3RhbGNtYV9wYWdlcyArPSAoc2l6ZSAvIFBBR0VfU0laRSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzNyw3ICszMzgsNiBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCi0JdG90YWxjbWFfcGFnZXMgKz0gKHNpemUgLyBQQUdFX1NJWkUpOwogCXByX2luZm8oIlJlc2VydmVkICVsZCBNaUIgYXQgJXBhXG4iLCAodW5zaWduZWQgbG9uZylzaXplIC8gU1pfMU0sCiAJCSZiYXNlKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uYwppbmRleCA1NDZlNTcxLi5iNjg3MzZjIDEwMDY0NAotLS0gYS9tbS9jb21wYWN0aW9uLmMKKysrIGIvbW0vY29tcGFjdGlvbi5jCkBAIC0zNCw2ICszNCwxNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQQorI2lmZGVmIENPTkZJR19UUkFDRVBPSU5UUworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNvbXBhY3Rpb25fc3RhdHVzX3N0cmluZ1tdID0geworCSJkZWZlcnJlZCIsCisJInNraXBwZWQiLAorCSJjb250aW51ZSIsCisJInBhcnRpYWwiLAorCSJjb21wbGV0ZSIsCisJIm5vX3N1aXRhYmxlX3BhZ2UiLAorCSJub3Rfc3VpdGFibGVfem9uZSIsCit9OworI2VuZGlmCiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg+CkBAIC0xMTMsNiArMTI0LDc3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFDVElPTgorCisvKiBEbyBub3Qgc2tpcCBjb21wYWN0aW9uIG1vcmUgdGhhbiA2NCB0aW1lcyAqLworI2RlZmluZSBDT01QQUNUX01BWF9ERUZFUl9TSElGVCA2CisKKy8qCisgKiBDb21wYWN0aW9uIGlzIGRlZmVycmVkIHdoZW4gY29tcGFjdGlvbiBmYWlscyB0byByZXN1bHQgaW4gYSBwYWdlCisgKiBhbGxvY2F0aW9uIHN1Y2Nlc3MuIDEgPDwgY29tcGFjdF9kZWZlcl9saW1pdCBjb21wYWN0aW9ucyBhcmUgc2tpcHBlZCB1cAorICogdG8gYSBsaW1pdCBvZiAxIDw8IENPTVBBQ1RfTUFYX0RFRkVSX1NISUZUCisgKi8KK3ZvaWQgZGVmZXJfY29tcGFjdGlvbihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyKQoreworCXpvbmUtPmNvbXBhY3RfY29uc2lkZXJlZCA9IDA7CisJem9uZS0+Y29tcGFjdF9kZWZlcl9zaGlmdCsrOworCisJaWYgKG9yZGVyIDwgem9uZS0+Y29tcGFjdF9vcmRlcl9mYWlsZWQpCisJCXpvbmUtPmNvbXBhY3Rfb3JkZXJfZmFpbGVkID0gb3JkZXI7CisKKwlpZiAoem9uZS0+Y29tcGFjdF9kZWZlcl9zaGlmdCA+IENPTVBBQ1RfTUFYX0RFRkVSX1NISUZUKQorCQl6b25lLT5jb21wYWN0X2RlZmVyX3NoaWZ0ID0gQ09NUEFDVF9NQVhfREVGRVJfU0hJRlQ7CisKKwl0cmFjZV9tbV9jb21wYWN0aW9uX2RlZmVyX2NvbXBhY3Rpb24oem9uZSwgb3JkZXIpOworfQorCisvKiBSZXR1cm5zIHRydWUgaWYgY29tcGFjdGlvbiBzaG91bGQgYmUgc2tpcHBlZCB0aGlzIHRpbWUgKi8KK2Jvb2wgY29tcGFjdGlvbl9kZWZlcnJlZChzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyKQoreworCXVuc2lnbmVkIGxvbmcgZGVmZXJfbGltaXQgPSAxVUwgPDwgem9uZS0+Y29tcGFjdF9kZWZlcl9zaGlmdDsKKworCWlmIChvcmRlciA8IHpvbmUtPmNvbXBhY3Rfb3JkZXJfZmFpbGVkKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBBdm9pZCBwb3NzaWJsZSBvdmVyZmxvdyAqLworCWlmICgrK3pvbmUtPmNvbXBhY3RfY29uc2lkZXJlZCA+IGRlZmVyX2xpbWl0KQorCQl6b25lLT5jb21wYWN0X2NvbnNpZGVyZWQgPSBkZWZlcl9saW1pdDsKKworCWlmICh6b25lLT5jb21wYWN0X2NvbnNpZGVyZWQgPj0gZGVmZXJfbGltaXQpCisJCXJldHVybiBmYWxzZTsKKworCXRyYWNlX21tX2NvbXBhY3Rpb25fZGVmZXJyZWQoem9uZSwgb3JkZXIpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBVcGRhdGUgZGVmZXIgdHJhY2tpbmcgY291bnRlcnMgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21wYWN0aW9uIG9mIGdpdmVuIG9yZGVyLAorICogd2hpY2ggbWVhbnMgYW4gYWxsb2NhdGlvbiBlaXRoZXIgc3VjY2VlZGVkIChhbGxvY19zdWNjZXNzID09IHRydWUpIG9yIGlzCisgKiBleHBlY3RlZCB0byBzdWNjZWVkLgorICovCit2b2lkIGNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKKwkJYm9vbCBhbGxvY19zdWNjZXNzKQoreworCWlmIChhbGxvY19zdWNjZXNzKSB7CisJCXpvbmUtPmNvbXBhY3RfY29uc2lkZXJlZCA9IDA7CisJCXpvbmUtPmNvbXBhY3RfZGVmZXJfc2hpZnQgPSAwOworCX0KKwlpZiAob3JkZXIgPj0gem9uZS0+Y29tcGFjdF9vcmRlcl9mYWlsZWQpCisJCXpvbmUtPmNvbXBhY3Rfb3JkZXJfZmFpbGVkID0gb3JkZXIgKyAxOworCisJdHJhY2VfbW1fY29tcGFjdGlvbl9kZWZlcl9yZXNldCh6b25lLCBvcmRlcik7Cit9CisKKy8qIFJldHVybnMgdHJ1ZSBpZiByZXN0YXJ0aW5nIGNvbXBhY3Rpb24gYWZ0ZXIgbWFueSBmYWlsdXJlcyAqLworYm9vbCBjb21wYWN0aW9uX3Jlc3RhcnRpbmcoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcikKK3sKKwlpZiAob3JkZXIgPCB6b25lLT5jb21wYWN0X29yZGVyX2ZhaWxlZCkKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuIHpvbmUtPmNvbXBhY3RfZGVmZXJfc2hpZnQgPT0gQ09NUEFDVF9NQVhfREVGRVJfU0hJRlQgJiYKKwkJem9uZS0+Y29tcGFjdF9jb25zaWRlcmVkID49IDFVTCA8PCB6b25lLT5jb21wYWN0X2RlZmVyX3NoaWZ0OworfQorCiAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhZ2VibG9jayBzaG91bGQgYmUgc2Nhbm5lZCBmb3IgcGFnZXMgdG8gaXNvbGF0ZS4gKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc29sYXRpb25fc3VpdGFibGUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsCiAJCQkJCXN0cnVjdCBwYWdlICpwYWdlKQpAQCAtNDIxLDExICs1MDMsMTIgQEAKIAogCX0KIAorCXRyYWNlX21tX2NvbXBhY3Rpb25faXNvbGF0ZV9mcmVlcGFnZXMoKnN0YXJ0X3BmbiwgYmxvY2twZm4sCisJCQkJCW5yX3NjYW5uZWQsIHRvdGFsX2lzb2xhdGVkKTsKKwogCS8qIFJlY29yZCBob3cgZmFyIHdlIGhhdmUgZ290IHdpdGhpbiB0aGUgYmxvY2sgKi8KIAkqc3RhcnRfcGZuID0gYmxvY2twZm47CiAKLQl0cmFjZV9tbV9jb21wYWN0aW9uX2lzb2xhdGVfZnJlZXBhZ2VzKG5yX3NjYW5uZWQsIHRvdGFsX2lzb2xhdGVkKTsKLQogCS8qCiAJICogSWYgc3RyaWN0IGlzb2xhdGlvbiBpcyByZXF1ZXN0ZWQgYnkgQ01BIHRoZW4gY2hlY2sgdGhhdCBhbGwgdGhlCiAJICogcGFnZXMgcmVxdWVzdGVkIHdlcmUgaXNvbGF0ZWQuIElmIHRoZXJlIHdlcmUgYW55IGZhaWx1cmVzLCAwIGlzCkBAIC01ODEsNiArNjY0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlib29sIGxvY2tlZCA9IGZhbHNlOwogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTCwgKnZhbGlkX3BhZ2UgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuID0gbG93X3BmbjsKIAogCS8qCiAJICogRW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vdCB0b28gbWFueSBwYWdlcyBpc29sYXRlZCBmcm9tIHRoZSBMUlUKQEAgLTc0MSw3ICs4MjUsOCBAQAogCWlmIChsb3dfcGZuID09IGVuZF9wZm4pCiAJCXVwZGF0ZV9wYWdlYmxvY2tfc2tpcChjYywgdmFsaWRfcGFnZSwgbnJfaXNvbGF0ZWQsIHRydWUpOwogCi0JdHJhY2VfbW1fY29tcGFjdGlvbl9pc29sYXRlX21pZ3JhdGVwYWdlcyhucl9zY2FubmVkLCBucl9pc29sYXRlZCk7CisJdHJhY2VfbW1fY29tcGFjdGlvbl9pc29sYXRlX21pZ3JhdGVwYWdlcyhzdGFydF9wZm4sIGxvd19wZm4sCisJCQkJCQlucl9zY2FubmVkLCBucl9pc29sYXRlZCk7CiAKIAljb3VudF9jb21wYWN0X2V2ZW50cyhDT01QQUNUTUlHUkFURV9TQ0FOTkVELCBucl9zY2FubmVkKTsKIAlpZiAobnJfaXNvbGF0ZWQpCkBAIC0xMDM3LDcgKzExMjIsNyBAQAogCXJldHVybiBjYy0+bnJfbWlncmF0ZXBhZ2VzID8gSVNPTEFURV9TVUNDRVNTIDogSVNPTEFURV9OT05FOwogfQogCi1zdGF0aWMgaW50IGNvbXBhY3RfZmluaXNoZWQoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLAorc3RhdGljIGludCBfX2NvbXBhY3RfZmluaXNoZWQoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLAogCQkJICAgIGNvbnN0IGludCBtaWdyYXRldHlwZSkKIHsKIAl1bnNpZ25lZCBpbnQgb3JkZXI7CkBAIC0xMDkyLDcgKzExNzcsMjAgQEAKIAkJCXJldHVybiBDT01QQUNUX1BBUlRJQUw7CiAJfQogCi0JcmV0dXJuIENPTVBBQ1RfQ09OVElOVUU7CisJcmV0dXJuIENPTVBBQ1RfTk9fU1VJVEFCTEVfUEFHRTsKK30KKworc3RhdGljIGludCBjb21wYWN0X2ZpbmlzaGVkKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywKKwkJCSAgICBjb25zdCBpbnQgbWlncmF0ZXR5cGUpCit7CisJaW50IHJldDsKKworCXJldCA9IF9fY29tcGFjdF9maW5pc2hlZCh6b25lLCBjYywgbWlncmF0ZXR5cGUpOworCXRyYWNlX21tX2NvbXBhY3Rpb25fZmluaXNoZWQoem9uZSwgY2MtPm9yZGVyLCByZXQpOworCWlmIChyZXQgPT0gQ09NUEFDVF9OT19TVUlUQUJMRV9QQUdFKQorCQlyZXQgPSBDT01QQUNUX0NPTlRJTlVFOworCisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTExMDIsNyArMTIwMCw3IEBACiAgKiAgIENPTVBBQ1RfUEFSVElBTCAgLSBJZiB0aGUgYWxsb2NhdGlvbiB3b3VsZCBzdWNjZWVkIHdpdGhvdXQgY29tcGFjdGlvbgogICogICBDT01QQUNUX0NPTlRJTlVFIC0gSWYgY29tcGFjdGlvbiBzaG91bGQgcnVuIG5vdwogICovCi11bnNpZ25lZCBsb25nIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlciwKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLAogCQkJCQlpbnQgYWxsb2NfZmxhZ3MsIGludCBjbGFzc3pvbmVfaWR4KQogewogCWludCBmcmFnaW5kZXg7CkBAIC0xMTQ2LDExICsxMjQ0LDI0IEBACiAJICovCiAJZnJhZ2luZGV4ID0gZnJhZ21lbnRhdGlvbl9pbmRleCh6b25lLCBvcmRlcik7CiAJaWYgKGZyYWdpbmRleCA+PSAwICYmIGZyYWdpbmRleCA8PSBzeXNjdGxfZXh0ZnJhZ190aHJlc2hvbGQpCi0JCXJldHVybiBDT01QQUNUX1NLSVBQRUQ7CisJCXJldHVybiBDT01QQUNUX05PVF9TVUlUQUJMRV9aT05FOwogCiAJcmV0dXJuIENPTVBBQ1RfQ09OVElOVUU7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLAorCQkJCQlpbnQgYWxsb2NfZmxhZ3MsIGludCBjbGFzc3pvbmVfaWR4KQoreworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJcmV0ID0gX19jb21wYWN0aW9uX3N1aXRhYmxlKHpvbmUsIG9yZGVyLCBhbGxvY19mbGFncywgY2xhc3N6b25lX2lkeCk7CisJdHJhY2VfbW1fY29tcGFjdGlvbl9zdWl0YWJsZSh6b25lLCBvcmRlciwgcmV0KTsKKwlpZiAocmV0ID09IENPTVBBQ1RfTk9UX1NVSVRBQkxFX1pPTkUpCisJCXJldCA9IENPTVBBQ1RfU0tJUFBFRDsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgY29tcGFjdF96b25lKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYykKIHsKIAlpbnQgcmV0OwpAQCAtMTE5Nyw3ICsxMzA4LDggQEAKIAkJem9uZS0+Y29tcGFjdF9jYWNoZWRfbWlncmF0ZV9wZm5bMV0gPSBjYy0+bWlncmF0ZV9wZm47CiAJfQogCi0JdHJhY2VfbW1fY29tcGFjdGlvbl9iZWdpbihzdGFydF9wZm4sIGNjLT5taWdyYXRlX3BmbiwgY2MtPmZyZWVfcGZuLCBlbmRfcGZuKTsKKwl0cmFjZV9tbV9jb21wYWN0aW9uX2JlZ2luKHN0YXJ0X3BmbiwgY2MtPm1pZ3JhdGVfcGZuLAorCQkJCWNjLT5mcmVlX3BmbiwgZW5kX3Bmbiwgc3luYyk7CiAKIAltaWdyYXRlX3ByZXBfbG9jYWwoKTsKIApAQCAtMTI5OSw3ICsxNDExLDggQEAKIAkJCXpvbmUtPmNvbXBhY3RfY2FjaGVkX2ZyZWVfcGZuID0gZnJlZV9wZm47CiAJfQogCi0JdHJhY2VfbW1fY29tcGFjdGlvbl9lbmQocmV0KTsKKwl0cmFjZV9tbV9jb21wYWN0aW9uX2VuZChzdGFydF9wZm4sIGNjLT5taWdyYXRlX3BmbiwKKwkJCQljYy0+ZnJlZV9wZm4sIGVuZF9wZm4sIHN5bmMsIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTMzNSwyMiArMTQ0OCwyMCBAQAogCiAvKioKICAqIHRyeV90b19jb21wYWN0X3BhZ2VzIC0gRGlyZWN0IGNvbXBhY3QgdG8gc2F0aXNmeSBhIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbgotICogQHpvbmVsaXN0OiBUaGUgem9uZWxpc3QgdXNlZCBmb3IgdGhlIGN1cnJlbnQgYWxsb2NhdGlvbgotICogQG9yZGVyOiBUaGUgb3JkZXIgb2YgdGhlIGN1cnJlbnQgYWxsb2NhdGlvbgogICogQGdmcF9tYXNrOiBUaGUgR0ZQIG1hc2sgb2YgdGhlIGN1cnJlbnQgYWxsb2NhdGlvbgotICogQG5vZGVtYXNrOiBUaGUgYWxsb3dlZCBub2RlcyB0byBhbGxvY2F0ZSBmcm9tCisgKiBAb3JkZXI6IFRoZSBvcmRlciBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uCisgKiBAYWxsb2NfZmxhZ3M6IFRoZSBhbGxvY2F0aW9uIGZsYWdzIG9mIHRoZSBjdXJyZW50IGFsbG9jYXRpb24KKyAqIEBhYzogVGhlIGNvbnRleHQgb2YgY3VycmVudCBhbGxvY2F0aW9uCiAgKiBAbW9kZTogVGhlIG1pZ3JhdGlvbiBtb2RlIGZvciBhc3luYywgc3luYyBsaWdodCwgb3Igc3luYyBtaWdyYXRpb24KICAqIEBjb250ZW5kZWQ6IFJldHVybiB2YWx1ZSB0aGF0IGRldGVybWluZXMgaWYgY29tcGFjdGlvbiB3YXMgYWJvcnRlZCBkdWUgdG8KICAqCSAgICAgICBuZWVkX3Jlc2NoZWQoKSBvciBsb2NrIGNvbnRlbnRpb24KICAqCiAgKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBkaXJlY3QgcGFnZSBjb21wYWN0aW9uLgogICovCi11bnNpZ25lZCBsb25nIHRyeV90b19jb21wYWN0X3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsCi0JCQlpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLCBub2RlbWFza190ICpub2RlbWFzaywKLQkJCWVudW0gbWlncmF0ZV9tb2RlIG1vZGUsIGludCAqY29udGVuZGVkLAotCQkJaW50IGFsbG9jX2ZsYWdzLCBpbnQgY2xhc3N6b25lX2lkeCkKK3Vuc2lnbmVkIGxvbmcgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKKwkJCWludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLAorCQkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50ICpjb250ZW5kZWQpCiB7Ci0JZW51bSB6b25lX3R5cGUgaGlnaF96b25laWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spOwogCWludCBtYXlfZW50ZXJfZnMgPSBnZnBfbWFzayAmIF9fR0ZQX0ZTOwogCWludCBtYXlfcGVyZm9ybV9pbyA9IGdmcF9tYXNrICYgX19HRlBfSU87CiAJc3RydWN0IHpvbmVyZWYgKno7CkBAIC0xMzY0LDkgKzE0NzUsMTEgQEAKIAlpZiAoIW9yZGVyIHx8ICFtYXlfZW50ZXJfZnMgfHwgIW1heV9wZXJmb3JtX2lvKQogCQlyZXR1cm4gQ09NUEFDVF9TS0lQUEVEOwogCisJdHJhY2VfbW1fY29tcGFjdGlvbl90cnlfdG9fY29tcGFjdF9wYWdlcyhvcmRlciwgZ2ZwX21hc2ssIG1vZGUpOworCiAJLyogQ29tcGFjdCBlYWNoIHpvbmUgaW4gdGhlIGxpc3QgKi8KLQlmb3JfZWFjaF96b25lX3pvbmVsaXN0X25vZGVtYXNrKHpvbmUsIHosIHpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsCi0JCQkJCQkJCW5vZGVtYXNrKSB7CisJZm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy0+em9uZWxpc3QsIGFjLT5oaWdoX3pvbmVpZHgsCisJCQkJCQkJCWFjLT5ub2RlbWFzaykgewogCQlpbnQgc3RhdHVzOwogCQlpbnQgem9uZV9jb250ZW5kZWQ7CiAKQEAgLTEzNzQsNyArMTQ4Nyw4IEBACiAJCQljb250aW51ZTsKIAogCQlzdGF0dXMgPSBjb21wYWN0X3pvbmVfb3JkZXIoem9uZSwgb3JkZXIsIGdmcF9tYXNrLCBtb2RlLAotCQkJCSZ6b25lX2NvbnRlbmRlZCwgYWxsb2NfZmxhZ3MsIGNsYXNzem9uZV9pZHgpOworCQkJCSZ6b25lX2NvbnRlbmRlZCwgYWxsb2NfZmxhZ3MsCisJCQkJYWMtPmNsYXNzem9uZV9pZHgpOwogCQlyYyA9IG1heChzdGF0dXMsIHJjKTsKIAkJLyoKIAkJICogSXQgdGFrZXMgYXQgbGVhc3Qgb25lIHpvbmUgdGhhdCB3YXNuJ3QgbG9jayBjb250ZW5kZWQKQEAgLTEzODQsNyArMTQ5OCw3IEBACiAKIAkJLyogSWYgYSBub3JtYWwgYWxsb2NhdGlvbiB3b3VsZCBzdWNjZWVkLCBzdG9wIGNvbXBhY3RpbmcgKi8KIAkJaWYgKHpvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLCBsb3dfd21hcmtfcGFnZXMoem9uZSksCi0JCQkJCWNsYXNzem9uZV9pZHgsIGFsbG9jX2ZsYWdzKSkgeworCQkJCQlhYy0+Y2xhc3N6b25lX2lkeCwgYWxsb2NfZmxhZ3MpKSB7CiAJCQkvKgogCQkJICogV2UgdGhpbmsgdGhlIGFsbG9jYXRpb24gd2lsbCBzdWNjZWVkIGluIHRoaXMgem9uZSwKIAkJCSAqIGJ1dCBpdCBpcyBub3QgY2VydGFpbiwgaGVuY2UgdGhlIGZhbHNlLiBUaGUgY2FsbGVyCmRpZmYgLS1naXQgYS9tbS9kZWJ1Zy5jIGIvbW0vZGVidWcuYwppbmRleCAwZTU4ZjMyLi4zZWIzYWMyIDEwMDY0NAotLS0gYS9tbS9kZWJ1Zy5jCisrKyBiL21tL2RlYnVnLmMKQEAgLTEzMCw3ICsxMzAsNiBAQAogCXtWTV9BQ0NPVU5ULAkJCSJhY2NvdW50Igl9LAogCXtWTV9OT1JFU0VSVkUsCQkJIm5vcmVzZXJ2ZSIJfSwKIAl7Vk1fSFVHRVRMQiwJCQkiaHVnZXRsYiIJfSwKLQl7Vk1fTk9OTElORUFSLAkJCSJub25saW5lYXIiCX0sCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2KQogCXtWTV9QQVQsCQkJInBhdCIJCX0sCiAjZWxpZiBkZWZpbmVkKENPTkZJR19QUEMpCkBAIC0xNzQsNyArMTczLDcgQEAKIAkJImdldF91bm1hcHBlZF9hcmVhICVwXG4iCiAjZW5kaWYKIAkJIm1tYXBfYmFzZSAlbHUgbW1hcF9sZWdhY3lfYmFzZSAlbHUgaGlnaGVzdF92bV9lbmQgJWx1XG4iCi0JCSJwZ2QgJXAgbW1fdXNlcnMgJWQgbW1fY291bnQgJWQgbnJfcHRlcyAlbHUgbWFwX2NvdW50ICVkXG4iCisJCSJwZ2QgJXAgbW1fdXNlcnMgJWQgbW1fY291bnQgJWQgbnJfcHRlcyAlbHUgbnJfcG1kcyAlbHUgbWFwX2NvdW50ICVkXG4iCiAJCSJoaXdhdGVyX3JzcyAlbHggaGl3YXRlcl92bSAlbHggdG90YWxfdm0gJWx4IGxvY2tlZF92bSAlbHhcbiIKIAkJInBpbm5lZF92bSAlbHggc2hhcmVkX3ZtICVseCBleGVjX3ZtICVseCBzdGFja192bSAlbHhcbiIKIAkJInN0YXJ0X2NvZGUgJWx4IGVuZF9jb2RlICVseCBzdGFydF9kYXRhICVseCBlbmRfZGF0YSAlbHhcbiIKQEAgLTIwNyw2ICsyMDYsNyBAQAogCQltbS0+cGdkLCBhdG9taWNfcmVhZCgmbW0tPm1tX3VzZXJzKSwKIAkJYXRvbWljX3JlYWQoJm1tLT5tbV9jb3VudCksCiAJCWF0b21pY19sb25nX3JlYWQoKGF0b21pY19sb25nX3QgKikmbW0tPm5yX3B0ZXMpLAorCQltbV9ucl9wbWRzKChzdHJ1Y3QgbW1fc3RydWN0ICopbW0pLAogCQltbS0+bWFwX2NvdW50LAogCQltbS0+aGl3YXRlcl9yc3MsIG1tLT5oaXdhdGVyX3ZtLCBtbS0+dG90YWxfdm0sIG1tLT5sb2NrZWRfdm0sCiAJCW1tLT5waW5uZWRfdm0sIG1tLT5zaGFyZWRfdm0sIG1tLT5leGVjX3ZtLCBtbS0+c3RhY2tfdm0sCmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNjczZTQ1OC4uYmY3YTI3MSAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCisrKyBiL21tL2ZpbGVtYXAuYwpAQCAtMjA4Nyw3ICsyMDg3LDYgQEAKIAkuZmF1bHQJCT0gZmlsZW1hcF9mYXVsdCwKIAkubWFwX3BhZ2VzCT0gZmlsZW1hcF9tYXBfcGFnZXMsCiAJLnBhZ2VfbWt3cml0ZQk9IGZpbGVtYXBfcGFnZV9ta3dyaXRlLAotCS5yZW1hcF9wYWdlcwk9IGdlbmVyaWNfZmlsZV9yZW1hcF9wYWdlcywKIH07CiAKIC8qIFRoaXMgaXMgdXNlZCBmb3IgYSBnZW5lcmFsIG1tYXAgb2YgYSBkaXNrIGZpbGUgKi8KZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXBfeGlwLmMgYi9tbS9maWxlbWFwX3hpcC5jCmluZGV4IDBkMTA1YWUuLjcwYzA5ZGEgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXBfeGlwLmMKKysrIGIvbW0vZmlsZW1hcF94aXAuYwpAQCAtMzAxLDcgKzMwMSw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhpcF9maWxlX3ZtX29wcyA9IHsKIAkuZmF1bHQJPSB4aXBfZmlsZV9mYXVsdCwKIAkucGFnZV9ta3dyaXRlCT0gZmlsZW1hcF9wYWdlX21rd3JpdGUsCi0JLnJlbWFwX3BhZ2VzID0gZ2VuZXJpY19maWxlX3JlbWFwX3BhZ2VzLAogfTsKIAogaW50IHhpcF9maWxlX21tYXAoc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCmRpZmYgLS1naXQgYS9tbS9mcmVtYXAuYyBiL21tL2ZyZW1hcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODA1ZDcxLi4wMDAwMDAwCi0tLSBhL21tL2ZyZW1hcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLS8qCi0gKiAgIGxpbnV4L21tL2ZyZW1hcC5jCi0gKiAKLSAqIEV4cGxpY2l0IHBhZ2V0YWJsZSBwb3B1bGF0aW9uIGFuZCBub25saW5lYXIgKHJhbmRvbSkgbWFwcGluZ3Mgc3VwcG9ydC4KLSAqCi0gKiBzdGFydGVkIGJ5IEluZ28gTW9sbmFyLCBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zd2FwLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgPGxpbnV4L21tdV9ub3RpZmllci5oPgotCi0jaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KLQotI2luY2x1ZGUgImludGVybmFsLmgiCi0KLXN0YXRpYyBpbnQgbW1fY291bnRlcihzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gUGFnZUFub24ocGFnZSkgPyBNTV9BTk9OUEFHRVMgOiBNTV9GSUxFUEFHRVM7Ci19Ci0KLXN0YXRpYyB2b2lkIHphcF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKLXsKLQlwdGVfdCBwdGUgPSAqcHRlcDsKLQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlzd3BfZW50cnlfdCBlbnRyeTsKLQotCWlmIChwdGVfcHJlc2VudChwdGUpKSB7Ci0JCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwdGVfcGZuKHB0ZSkpOwotCQlwdGUgPSBwdGVwX2NsZWFyX2ZsdXNoX25vdGlmeSh2bWEsIGFkZHIsIHB0ZXApOwotCQlwYWdlID0gdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyLCBwdGUpOwotCQlpZiAocGFnZSkgewotCQkJaWYgKHB0ZV9kaXJ0eShwdGUpKQotCQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQkJdXBkYXRlX2hpd2F0ZXJfcnNzKG1tKTsKLQkJCWRlY19tbV9jb3VudGVyKG1tLCBtbV9jb3VudGVyKHBhZ2UpKTsKLQkJCXBhZ2VfcmVtb3ZlX3JtYXAocGFnZSk7Ci0JCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCX0KLQl9IGVsc2UgewkvKiB6YXBfcHRlKCkgaXMgbm90IGNhbGxlZCB3aGVuIHB0ZV9ub25lKCkgKi8KLQkJaWYgKCFwdGVfZmlsZShwdGUpKSB7Ci0JCQl1cGRhdGVfaGl3YXRlcl9yc3MobW0pOwotCQkJZW50cnkgPSBwdGVfdG9fc3dwX2VudHJ5KHB0ZSk7Ci0JCQlpZiAobm9uX3N3YXBfZW50cnkoZW50cnkpKSB7Ci0JCQkJaWYgKGlzX21pZ3JhdGlvbl9lbnRyeShlbnRyeSkpIHsKLQkJCQkJcGFnZSA9IG1pZ3JhdGlvbl9lbnRyeV90b19wYWdlKGVudHJ5KTsKLQkJCQkJZGVjX21tX2NvdW50ZXIobW0sIG1tX2NvdW50ZXIocGFnZSkpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJZnJlZV9zd2FwX2FuZF9jYWNoZShlbnRyeSk7Ci0JCQkJZGVjX21tX2NvdW50ZXIobW0sIE1NX1NXQVBFTlRTKTsKLQkJCX0KLQkJfQotCQlwdGVfY2xlYXJfbm90X3ByZXNlbnRfZnVsbChtbSwgYWRkciwgcHRlcCwgMCk7Ci0JfQotfQotCi0vKgotICogSW5zdGFsbCBhIGZpbGUgcHRlIHRvIGEgZ2l2ZW4gdmlydHVhbCBtZW1vcnkgYWRkcmVzcywgcmVsZWFzZSBhbnkKLSAqIHByZXZpb3VzbHkgZXhpc3RpbmcgbWFwcGluZy4KLSAqLwotc3RhdGljIGludCBpbnN0YWxsX2ZpbGVfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCBwZ3Byb3RfdCBwcm90KQotewotCWludCBlcnIgPSAtRU5PTUVNOwotCXB0ZV90ICpwdGUsIHB0ZmlsZTsKLQlzcGlubG9ja190ICpwdGw7Ci0KLQlwdGUgPSBnZXRfbG9ja2VkX3B0ZShtbSwgYWRkciwgJnB0bCk7Ci0JaWYgKCFwdGUpCi0JCWdvdG8gb3V0OwotCi0JcHRmaWxlID0gcGdvZmZfdG9fcHRlKHBnb2ZmKTsKLQotCWlmICghcHRlX25vbmUoKnB0ZSkpCi0JCXphcF9wdGUobW0sIHZtYSwgYWRkciwgcHRlKTsKLQotCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgcHRlX2ZpbGVfbWtzb2Z0X2RpcnR5KHB0ZmlsZSkpOwotCS8qCi0JICogV2UgZG9uJ3QgbmVlZCB0byBydW4gdXBkYXRlX21tdV9jYWNoZSgpIGhlcmUgYmVjYXVzZSB0aGUgImZpbGUgcHRlIgotCSAqIGJlaW5nIGluc3RhbGxlZCBieSBpbnN0YWxsX2ZpbGVfcHRlKCkgaXMgbm90IGEgcmVhbCBwdGUgLSBpdCdzIGEKLQkgKiBub24tcHJlc2VudCBlbnRyeSAobGlrZSBhIHN3YXAgZW50cnkpLCBub3Rpbmcgd2hhdCBmaWxlIG9mZnNldCBzaG91bGQKLQkgKiBiZSBtYXBwZWQgdGhlcmUgd2hlbiB0aGVyZSdzIGEgZmF1bHQgKGluIGEgbm9uLWxpbmVhciB2bWEgd2hlcmUKLQkgKiB0aGF0J3Mgbm90IG9idmlvdXMpLgotCSAqLwotCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOwotCWVyciA9IDA7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotaW50IGdlbmVyaWNfZmlsZV9yZW1hcF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBnb2ZmX3QgcGdvZmYpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwotCWludCBlcnI7Ci0KLQlkbyB7Ci0JCWVyciA9IGluc3RhbGxfZmlsZV9wdGUobW0sIHZtYSwgYWRkciwgcGdvZmYsIHZtYS0+dm1fcGFnZV9wcm90KTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0KLQkJc2l6ZSAtPSBQQUdFX1NJWkU7Ci0JCWFkZHIgKz0gUEFHRV9TSVpFOwotCQlwZ29mZisrOwotCX0gd2hpbGUgKHNpemUpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV9yZW1hcF9wYWdlcyk7Ci0KLS8qKgotICogc3lzX3JlbWFwX2ZpbGVfcGFnZXMgLSByZW1hcCBhcmJpdHJhcnkgcGFnZXMgb2YgYW4gZXhpc3RpbmcgVk1fU0hBUkVEIHZtYQotICogQHN0YXJ0OiBzdGFydCBvZiB0aGUgcmVtYXBwZWQgdmlydHVhbCBtZW1vcnkgcmFuZ2UKLSAqIEBzaXplOiBzaXplIG9mIHRoZSByZW1hcHBlZCB2aXJ0dWFsIG1lbW9yeSByYW5nZQotICogQHByb3Q6IG5ldyBwcm90ZWN0aW9uIGJpdHMgb2YgdGhlIHJhbmdlIChzZWUgTk9URSkKLSAqIEBwZ29mZjogdG8tYmUtbWFwcGVkIHBhZ2Ugb2YgdGhlIGJhY2tpbmcgc3RvcmUgZmlsZQotICogQGZsYWdzOiAwIG9yIE1BUF9OT05CTE9DS0VEIC0gdGhlIGxhdGVyIHdpbGwgY2F1c2Ugbm8gSU8uCi0gKgotICogc3lzX3JlbWFwX2ZpbGVfcGFnZXMgcmVtYXBzIGFyYml0cmFyeSBwYWdlcyBvZiBhbiBleGlzdGluZyBWTV9TSEFSRUQgdm1hCi0gKiAoc2hhcmVkIGJhY2tpbmcgc3RvcmUgZmlsZSkuCi0gKgotICogVGhpcyBzeXNjYWxsIHdvcmtzIHB1cmVseSB2aWEgcGFnZXRhYmxlcywgc28gaXQncyB0aGUgbW9zdCBlZmZpY2llbnQKLSAqIHdheSB0byBtYXAgdGhlIHNhbWUgKGxhcmdlKSBmaWxlIGludG8gYSBnaXZlbiB2aXJ0dWFsIHdpbmRvdy4gVW5saWtlCi0gKiBtbWFwKCkvbXJlbWFwKCkgaXQgZG9lcyBub3QgY3JlYXRlIGFueSBuZXcgdm1hcy4gVGhlIG5ldyBtYXBwaW5ncyBhcmUKLSAqIGFsc28gc2FmZSBhY3Jvc3Mgc3dhcG91dC4KLSAqCi0gKiBOT1RFOiB0aGUgQHByb3QgcGFyYW1ldGVyIHJpZ2h0IG5vdyBpcyBpZ25vcmVkIChidXQgbXVzdCBiZSB6ZXJvKSwKLSAqIGFuZCB0aGUgdm1hJ3MgZGVmYXVsdCBwcm90ZWN0aW9uIGlzIHVzZWQuIEFyYml0cmFyeSBwcm90ZWN0aW9ucwotICogbWlnaHQgYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGZ1dHVyZS4KLSAqLwotU1lTQ0FMTF9ERUZJTkU1KHJlbWFwX2ZpbGVfcGFnZXMsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBzaXplLAotCQl1bnNpZ25lZCBsb25nLCBwcm90LCB1bnNpZ25lZCBsb25nLCBwZ29mZiwgdW5zaWduZWQgbG9uZywgZmxhZ3MpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQlpbnQgaGFzX3dyaXRlX2xvY2sgPSAwOwotCXZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSAwOwotCi0JcHJfd2Fybl9vbmNlKCIlcyAoJWQpIHVzZXMgZGVwcmVjYXRlZCByZW1hcF9maWxlX3BhZ2VzKCkgc3lzY2FsbC4gIgotCQkJIlNlZSBEb2N1bWVudGF0aW9uL3ZtL3JlbWFwX2ZpbGVfcGFnZXMudHh0LlxuIiwKLQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7Ci0KLQlpZiAocHJvdCkKLQkJcmV0dXJuIGVycjsKLQkvKgotCSAqIFNhbml0aXplIHRoZSBzeXNjYWxsIHBhcmFtZXRlcnM6Ci0JICovCi0Jc3RhcnQgPSBzdGFydCAmIFBBR0VfTUFTSzsKLQlzaXplID0gc2l6ZSAmIFBBR0VfTUFTSzsKLQotCS8qIERvZXMgdGhlIGFkZHJlc3MgcmFuZ2Ugd3JhcCwgb3IgaXMgdGhlIHNwYW4gemVyby1zaXplZD8gKi8KLQlpZiAoc3RhcnQgKyBzaXplIDw9IHN0YXJ0KQotCQlyZXR1cm4gZXJyOwotCi0JLyogRG9lcyBwZ29mZiB3cmFwPyAqLwotCWlmIChwZ29mZiArIChzaXplID4+IFBBR0VfU0hJRlQpIDwgcGdvZmYpCi0JCXJldHVybiBlcnI7Ci0KLQkvKiBDYW4gd2UgcmVwcmVzZW50IHRoaXMgb2Zmc2V0IGluc2lkZSB0aGlzIGFyY2hpdGVjdHVyZSdzIHB0ZSdzPyAqLwotI2lmIFBURV9GSUxFX01BWF9CSVRTIDwgQklUU19QRVJfTE9ORwotCWlmIChwZ29mZiArIChzaXplID4+IFBBR0VfU0hJRlQpID49ICgxVUwgPDwgUFRFX0ZJTEVfTUFYX0JJVFMpKQotCQlyZXR1cm4gZXJyOwotI2VuZGlmCi0KLQkvKiBXZSBuZWVkIGRvd25fd3JpdGUoKSB0byBjaGFuZ2Ugdm1hLT52bV9mbGFncy4gKi8KLQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0gcmV0cnk6Ci0Jdm1hID0gZmluZF92bWEobW0sIHN0YXJ0KTsKLQotCS8qCi0JICogTWFrZSBzdXJlIHRoZSB2bWEgaXMgc2hhcmVkLCB0aGF0IGl0IHN1cHBvcnRzIHByZWZhdWx0aW5nLAotCSAqIGFuZCB0aGF0IHRoZSByZW1hcHBlZCByYW5nZSBpcyB2YWxpZCBhbmQgZnVsbHkgd2l0aGluCi0JICogdGhlIHNpbmdsZSBleGlzdGluZyB2bWEuCi0JICovCi0JaWYgKCF2bWEgfHwgISh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoIXZtYS0+dm1fb3BzIHx8ICF2bWEtPnZtX29wcy0+cmVtYXBfcGFnZXMpCi0JCWdvdG8gb3V0OwotCi0JaWYgKHN0YXJ0IDwgdm1hLT52bV9zdGFydCB8fCBzdGFydCArIHNpemUgPiB2bWEtPnZtX2VuZCkKLQkJZ290byBvdXQ7Ci0KLQkvKiBNdXN0IHNldCBWTV9OT05MSU5FQVIgYmVmb3JlIGFueSBwYWdlcyBhcmUgcG9wdWxhdGVkLiAqLwotCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9OT05MSU5FQVIpKSB7Ci0JCS8qCi0JCSAqIHZtX3ByaXZhdGVfZGF0YSBpcyB1c2VkIGFzIGEgc3dhcG91dCBjdXJzb3IKLQkJICogaW4gYSBWTV9OT05MSU5FQVIgdm1hLgotCQkgKi8KLQkJaWYgKHZtYS0+dm1fcHJpdmF0ZV9kYXRhKQotCQkJZ290byBvdXQ7Ci0KLQkJLyogRG9uJ3QgbmVlZCBhIG5vbmxpbmVhciBtYXBwaW5nLCBleGl0IHN1Y2Nlc3MgKi8KLQkJaWYgKHBnb2ZmID09IGxpbmVhcl9wYWdlX2luZGV4KHZtYSwgc3RhcnQpKSB7Ci0JCQllcnIgPSAwOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlpZiAoIWhhc193cml0ZV9sb2NrKSB7Ci1nZXRfd3JpdGVfbG9jazoKLQkJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JCQlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwotCQkJaGFzX3dyaXRlX2xvY2sgPSAxOwotCQkJZ290byByZXRyeTsKLQkJfQotCQltYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7Ci0JCS8qCi0JCSAqIHBhZ2VfbWtjbGVhbiBkb2Vzbid0IHdvcmsgb24gbm9ubGluZWFyIHZtYXMsIHNvIGlmCi0JCSAqIGRpcnR5IHBhZ2VzIG5lZWQgdG8gYmUgYWNjb3VudGVkLCBlbXVsYXRlIHdpdGggbGluZWFyCi0JCSAqIHZtYXMuCi0JCSAqLwotCQlpZiAobWFwcGluZ19jYXBfYWNjb3VudF9kaXJ0eShtYXBwaW5nKSkgewotCQkJdW5zaWduZWQgbG9uZyBhZGRyOwotCQkJc3RydWN0IGZpbGUgKmZpbGUgPSBnZXRfZmlsZSh2bWEtPnZtX2ZpbGUpOwotCQkJLyogbW1hcF9yZWdpb24gbWF5IGZyZWUgdm1hOyBncmFiIHRoZSBpbmZvIG5vdyAqLwotCQkJdm1fZmxhZ3MgPSB2bWEtPnZtX2ZsYWdzOwotCi0JCQlhZGRyID0gbW1hcF9yZWdpb24oZmlsZSwgc3RhcnQsIHNpemUsIHZtX2ZsYWdzLCBwZ29mZik7Ci0JCQlmcHV0KGZpbGUpOwotCQkJaWYgKElTX0VSUl9WQUxVRShhZGRyKSkgewotCQkJCWVyciA9IGFkZHI7Ci0JCQl9IGVsc2UgewotCQkJCUJVR19PTihhZGRyICE9IHN0YXJ0KTsKLQkJCQllcnIgPSAwOwotCQkJfQotCQkJZ290byBvdXRfZnJlZWQ7Ci0JCX0KLQkJaV9tbWFwX2xvY2tfd3JpdGUobWFwcGluZyk7Ci0JCWZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZyk7Ci0JCXZtYS0+dm1fZmxhZ3MgfD0gVk1fTk9OTElORUFSOwotCQl2bWFfaW50ZXJ2YWxfdHJlZV9yZW1vdmUodm1hLCAmbWFwcGluZy0+aV9tbWFwKTsKLQkJdm1hX25vbmxpbmVhcl9pbnNlcnQodm1hLCAmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhcik7Ci0JCWZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKTsKLQkJaV9tbWFwX3VubG9ja193cml0ZShtYXBwaW5nKTsKLQl9Ci0KLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkgewotCQkvKgotCQkgKiBkcm9wIFBHX01sb2NrZWQgZmxhZyBmb3Igb3Zlci1tYXBwZWQgcmFuZ2UKLQkJICovCi0JCWlmICghaGFzX3dyaXRlX2xvY2spCi0JCQlnb3RvIGdldF93cml0ZV9sb2NrOwotCQl2bV9mbGFncyA9IHZtYS0+dm1fZmxhZ3M7Ci0JCW11bmxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7Ci0JCXZtYS0+dm1fZmxhZ3MgPSB2bV9mbGFnczsKLQl9Ci0KLQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChtbSwgc3RhcnQsIHN0YXJ0ICsgc2l6ZSk7Ci0JZXJyID0gdm1hLT52bV9vcHMtPnJlbWFwX3BhZ2VzKHZtYSwgc3RhcnQsIHNpemUsIHBnb2ZmKTsKLQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQobW0sIHN0YXJ0LCBzdGFydCArIHNpemUpOwotCi0JLyoKLQkgKiBXZSBjYW4ndCBjbGVhciBWTV9OT05MSU5FQVIgYmVjYXVzZSB3ZSdkIGhhdmUgdG8gZG8KLQkgKiBpdCBhZnRlciAtPnBvcHVsYXRlIGNvbXBsZXRlcywgYW5kIHRoYXQgd291bGQgcHJldmVudAotCSAqIGRvd25ncmFkaW5nIHRoZSBsb2NrLiAgKExvY2tzIGNhbid0IGJlIHVwZ3JhZGVkKS4KLQkgKi8KLQotb3V0OgotCWlmICh2bWEpCi0JCXZtX2ZsYWdzID0gdm1hLT52bV9mbGFnczsKLW91dF9mcmVlZDoKLQlpZiAobGlrZWx5KCFoYXNfd3JpdGVfbG9jaykpCi0JCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JZWxzZQotCQl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKLQlpZiAoIWVyciAmJiAoKHZtX2ZsYWdzICYgVk1fTE9DS0VEKSB8fCAhKGZsYWdzICYgTUFQX05PTkJMT0NLKSkpCi0JCW1tX3BvcHVsYXRlKHN0YXJ0LCBzaXplKTsKLQotCXJldHVybiBlcnI7Ci19CmRpZmYgLS1naXQgYS9tbS9ndXAuYyBiL21tL2d1cC5jCmluZGV4IGE5MDA3NTkuLmMyZGExMTYgMTAwNjQ0Ci0tLSBhL21tL2d1cC5jCisrKyBiL21tL2d1cC5jCkBAIC01NSw3ICs1NSw3IEBACiAJCSAqLwogCQlpZiAobGlrZWx5KCEoZmxhZ3MgJiBGT0xMX01JR1JBVElPTikpKQogCQkJZ290byBub19wYWdlOwotCQlpZiAocHRlX25vbmUocHRlKSB8fCBwdGVfZmlsZShwdGUpKQorCQlpZiAocHRlX25vbmUocHRlKSkKIAkJCWdvdG8gbm9fcGFnZTsKIAkJZW50cnkgPSBwdGVfdG9fc3dwX2VudHJ5KHB0ZSk7CiAJCWlmICghaXNfbWlncmF0aW9uX2VudHJ5KGVudHJ5KSkKQEAgLTE2NywxMCArMTY3LDEwIEBACiAJaWYgKHB1ZF9ub25lKCpwdWQpKQogCQlyZXR1cm4gbm9fcGFnZV90YWJsZSh2bWEsIGZsYWdzKTsKIAlpZiAocHVkX2h1Z2UoKnB1ZCkgJiYgdm1hLT52bV9mbGFncyAmIFZNX0hVR0VUTEIpIHsKLQkJaWYgKGZsYWdzICYgRk9MTF9HRVQpCi0JCQlyZXR1cm4gTlVMTDsKLQkJcGFnZSA9IGZvbGxvd19odWdlX3B1ZChtbSwgYWRkcmVzcywgcHVkLCBmbGFncyAmIEZPTExfV1JJVEUpOwotCQlyZXR1cm4gcGFnZTsKKwkJcGFnZSA9IGZvbGxvd19odWdlX3B1ZChtbSwgYWRkcmVzcywgcHVkLCBmbGFncyk7CisJCWlmIChwYWdlKQorCQkJcmV0dXJuIHBhZ2U7CisJCXJldHVybiBub19wYWdlX3RhYmxlKHZtYSwgZmxhZ3MpOwogCX0KIAlpZiAodW5saWtlbHkocHVkX2JhZCgqcHVkKSkpCiAJCXJldHVybiBub19wYWdlX3RhYmxlKHZtYSwgZmxhZ3MpOwpAQCAtMTc5LDE5ICsxNzksMTAgQEAKIAlpZiAocG1kX25vbmUoKnBtZCkpCiAJCXJldHVybiBub19wYWdlX3RhYmxlKHZtYSwgZmxhZ3MpOwogCWlmIChwbWRfaHVnZSgqcG1kKSAmJiB2bWEtPnZtX2ZsYWdzICYgVk1fSFVHRVRMQikgewotCQlwYWdlID0gZm9sbG93X2h1Z2VfcG1kKG1tLCBhZGRyZXNzLCBwbWQsIGZsYWdzICYgRk9MTF9XUklURSk7Ci0JCWlmIChmbGFncyAmIEZPTExfR0VUKSB7Ci0JCQkvKgotCQkJICogUmVmY291bnQgb24gdGFpbCBwYWdlcyBhcmUgbm90IHdlbGwtZGVmaW5lZCBhbmQKLQkJCSAqIHNob3VsZG4ndCBiZSB0YWtlbi4gVGhlIGNhbGxlciBzaG91bGQgaGFuZGxlIGEgTlVMTAotCQkJICogcmV0dXJuIHdoZW4gdHJ5aW5nIHRvIGZvbGxvdyB0YWlsIHBhZ2VzLgotCQkJICovCi0JCQlpZiAoUGFnZUhlYWQocGFnZSkpCi0JCQkJZ2V0X3BhZ2UocGFnZSk7Ci0JCQllbHNlCi0JCQkJcGFnZSA9IE5VTEw7Ci0JCX0KLQkJcmV0dXJuIHBhZ2U7CisJCXBhZ2UgPSBmb2xsb3dfaHVnZV9wbWQobW0sIGFkZHJlc3MsIHBtZCwgZmxhZ3MpOworCQlpZiAocGFnZSkKKwkJCXJldHVybiBwYWdlOworCQlyZXR1cm4gbm9fcGFnZV90YWJsZSh2bWEsIGZsYWdzKTsKIAl9CiAJaWYgKChmbGFncyAmIEZPTExfTlVNQSkgJiYgcG1kX251bWEoKnBtZCkpCiAJCXJldHVybiBub19wYWdlX3RhYmxlKHZtYSwgZmxhZ3MpOwpAQCAtMjk2LDcgKzI4Nyw3IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJaWYgKHJldCAmIChWTV9GQVVMVF9IV1BPSVNPTiB8IFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFKSkKIAkJCXJldHVybiAqZmxhZ3MgJiBGT0xMX0hXUE9JU09OID8gLUVIV1BPSVNPTiA6IC1FRkFVTFQ7Ci0JCWlmIChyZXQgJiBWTV9GQVVMVF9TSUdCVVMpCisJCWlmIChyZXQgJiAoVk1fRkFVTFRfU0lHQlVTIHwgVk1fRkFVTFRfU0lHU0VHVikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJQlVHKCk7CiAJfQpAQCAtNTcxLDcgKzU2Miw3IEBACiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJaWYgKHJldCAmIChWTV9GQVVMVF9IV1BPSVNPTiB8IFZNX0ZBVUxUX0hXUE9JU09OX0xBUkdFKSkKIAkJCXJldHVybiAtRUhXUE9JU09OOwotCQlpZiAocmV0ICYgVk1fRkFVTFRfU0lHQlVTKQorCQlpZiAocmV0ICYgKFZNX0ZBVUxUX1NJR0JVUyB8IFZNX0ZBVUxUX1NJR1NFR1YpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCUJVRygpOwogCX0KQEAgLTU4NCw2ICs1NzUsMTg1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgbG9uZyBfX2dldF91c2VyX3BhZ2VzX2xvY2tlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKKwkJCQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkJdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCisJCQkJCQlpbnQgd3JpdGUsIGludCBmb3JjZSwKKwkJCQkJCXN0cnVjdCBwYWdlICoqcGFnZXMsCisJCQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzLAorCQkJCQkJaW50ICpsb2NrZWQsIGJvb2wgbm90aWZ5X2Ryb3AsCisJCQkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJbG9uZyByZXQsIHBhZ2VzX2RvbmU7CisJYm9vbCBsb2NrX2Ryb3BwZWQ7CisKKwlpZiAobG9ja2VkKSB7CisJCS8qIGlmIFZNX0ZBVUxUX1JFVFJZIGNhbiBiZSByZXR1cm5lZCwgdm1hcyBiZWNvbWUgaW52YWxpZCAqLworCQlCVUdfT04odm1hcyk7CisJCS8qIGNoZWNrIGNhbGxlciBpbml0aWFsaXplZCBsb2NrZWQgKi8KKwkJQlVHX09OKCpsb2NrZWQgIT0gMSk7CisJfQorCisJaWYgKHBhZ2VzKQorCQlmbGFncyB8PSBGT0xMX0dFVDsKKwlpZiAod3JpdGUpCisJCWZsYWdzIHw9IEZPTExfV1JJVEU7CisJaWYgKGZvcmNlKQorCQlmbGFncyB8PSBGT0xMX0ZPUkNFOworCisJcGFnZXNfZG9uZSA9IDA7CisJbG9ja19kcm9wcGVkID0gZmFsc2U7CisJZm9yICg7OykgeworCQlyZXQgPSBfX2dldF91c2VyX3BhZ2VzKHRzaywgbW0sIHN0YXJ0LCBucl9wYWdlcywgZmxhZ3MsIHBhZ2VzLAorCQkJCSAgICAgICB2bWFzLCBsb2NrZWQpOworCQlpZiAoIWxvY2tlZCkKKwkJCS8qIFZNX0ZBVUxUX1JFVFJZIGNvdWxkbid0IHRyaWdnZXIsIGJ5cGFzcyAqLworCQkJcmV0dXJuIHJldDsKKworCQkvKiBWTV9GQVVMVF9SRVRSWSBjYW5ub3QgcmV0dXJuIGVycm9ycyAqLworCQlpZiAoISpsb2NrZWQpIHsKKwkJCUJVR19PTihyZXQgPCAwKTsKKwkJCUJVR19PTihyZXQgPj0gbnJfcGFnZXMpOworCQl9CisKKwkJaWYgKCFwYWdlcykKKwkJCS8qIElmIGl0J3MgYSBwcmVmYXVsdCBkb24ndCBpbnNpc3QgaGFyZGVyICovCisJCQlyZXR1cm4gcmV0OworCisJCWlmIChyZXQgPiAwKSB7CisJCQlucl9wYWdlcyAtPSByZXQ7CisJCQlwYWdlc19kb25lICs9IHJldDsKKwkJCWlmICghbnJfcGFnZXMpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKCpsb2NrZWQpIHsKKwkJCS8qIFZNX0ZBVUxUX1JFVFJZIGRpZG4ndCB0cmlnZ2VyICovCisJCQlpZiAoIXBhZ2VzX2RvbmUpCisJCQkJcGFnZXNfZG9uZSA9IHJldDsKKwkJCWJyZWFrOworCQl9CisJCS8qIFZNX0ZBVUxUX1JFVFJZIHRyaWdnZXJlZCwgc28gc2VlayB0byB0aGUgZmF1bHRpbmcgb2Zmc2V0ICovCisJCXBhZ2VzICs9IHJldDsKKwkJc3RhcnQgKz0gcmV0IDw8IFBBR0VfU0hJRlQ7CisKKwkJLyoKKwkJICogUmVwZWF0IG9uIHRoZSBhZGRyZXNzIHRoYXQgZmlyZWQgVk1fRkFVTFRfUkVUUlkKKwkJICogd2l0aG91dCBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZIGJ1dCB3aXRoCisJCSAqIEZBVUxUX0ZMQUdfVFJJRUQuCisJCSAqLworCQkqbG9ja2VkID0gMTsKKwkJbG9ja19kcm9wcGVkID0gdHJ1ZTsKKwkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCQlyZXQgPSBfX2dldF91c2VyX3BhZ2VzKHRzaywgbW0sIHN0YXJ0LCAxLCBmbGFncyB8IEZPTExfVFJJRUQsCisJCQkJICAgICAgIHBhZ2VzLCBOVUxMLCBOVUxMKTsKKwkJaWYgKHJldCAhPSAxKSB7CisJCQlCVUdfT04ocmV0ID4gMSk7CisJCQlpZiAoIXBhZ2VzX2RvbmUpCisJCQkJcGFnZXNfZG9uZSA9IHJldDsKKwkJCWJyZWFrOworCQl9CisJCW5yX3BhZ2VzLS07CisJCXBhZ2VzX2RvbmUrKzsKKwkJaWYgKCFucl9wYWdlcykKKwkJCWJyZWFrOworCQlwYWdlcysrOworCQlzdGFydCArPSBQQUdFX1NJWkU7CisJfQorCWlmIChub3RpZnlfZHJvcCAmJiBsb2NrX2Ryb3BwZWQgJiYgKmxvY2tlZCkgeworCQkvKgorCQkgKiBXZSBtdXN0IGxldCB0aGUgY2FsbGVyIGtub3cgd2UgdGVtcG9yYXJpbHkgZHJvcHBlZCB0aGUgbG9jaworCQkgKiBhbmQgc28gdGhlIGNyaXRpY2FsIHNlY3Rpb24gcHJvdGVjdGVkIGJ5IGl0IHdhcyBsb3N0LgorCQkgKi8KKwkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJKmxvY2tlZCA9IDA7CisJfQorCXJldHVybiBwYWdlc19kb25lOworfQorCisvKgorICogV2UgY2FuIGxldmVyYWdlIHRoZSBWTV9GQVVMVF9SRVRSWSBmdW5jdGlvbmFsaXR5IGluIHRoZSBwYWdlIGZhdWx0CisgKiBwYXRocyBiZXR0ZXIgYnkgdXNpbmcgZWl0aGVyIGdldF91c2VyX3BhZ2VzX2xvY2tlZCgpIG9yCisgKiBnZXRfdXNlcl9wYWdlc191bmxvY2tlZCgpLgorICoKKyAqIGdldF91c2VyX3BhZ2VzX2xvY2tlZCgpIGlzIHN1aXRhYmxlIHRvIHJlcGxhY2UgdGhlIGZvcm06CisgKgorICogICAgICBkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisgKiAgICAgIGRvX3NvbWV0aGluZygpCisgKiAgICAgIGdldF91c2VyX3BhZ2VzKHRzaywgbW0sIC4uLiwgcGFnZXMsIE5VTEwpOworICogICAgICB1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworICoKKyAqICB0bzoKKyAqCisgKiAgICAgIGludCBsb2NrZWQgPSAxOworICogICAgICBkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisgKiAgICAgIGRvX3NvbWV0aGluZygpCisgKiAgICAgIGdldF91c2VyX3BhZ2VzX2xvY2tlZCh0c2ssIG1tLCAuLi4sIHBhZ2VzLCAmbG9ja2VkKTsKKyAqICAgICAgaWYgKGxvY2tlZCkKKyAqICAgICAgICAgIHVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisgKi8KK2xvbmcgZ2V0X3VzZXJfcGFnZXNfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCisJCQkgICBpbnQgd3JpdGUsIGludCBmb3JjZSwgc3RydWN0IHBhZ2UgKipwYWdlcywKKwkJCSAgIGludCAqbG9ja2VkKQoreworCXJldHVybiBfX2dldF91c2VyX3BhZ2VzX2xvY2tlZCh0c2ssIG1tLCBzdGFydCwgbnJfcGFnZXMsIHdyaXRlLCBmb3JjZSwKKwkJCQkgICAgICAgcGFnZXMsIE5VTEwsIGxvY2tlZCwgdHJ1ZSwgRk9MTF9UT1VDSCk7Cit9CitFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzX2xvY2tlZCk7CisKKy8qCisgKiBTYW1lIGFzIGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKC4uLi4sIEZPTExfVE9VQ0gpIGJ1dCBpdCBhbGxvd3MgdG8KKyAqIHBhc3MgYWRkaXRpb25hbCBndXBfZmxhZ3MgYXMgbGFzdCBwYXJhbWV0ZXIgKGxpa2UgRk9MTF9IV1BPSVNPTikuCisgKgorICogTk9URTogaGVyZSBGT0xMX1RPVUNIIGlzIG5vdCBzZXQgaW1wbGljaXRseSBhbmQgbXVzdCBiZSBzZXQgYnkgdGhlCisgKiBjYWxsZXIgaWYgcmVxdWlyZWQgKGp1c3QgbGlrZSB3aXRoIF9fZ2V0X3VzZXJfcGFnZXMpLiAiRk9MTF9HRVQiLAorICogIkZPTExfV1JJVEUiIGFuZCAiRk9MTF9GT1JDRSIgYXJlIHNldCBpbXBsaWNpdGx5IGFzIG5lZWRlZAorICogYWNjb3JkaW5nIHRvIHRoZSBwYXJhbWV0ZXJzICJwYWdlcyIsICJ3cml0ZSIsICJmb3JjZSIKKyAqIHJlc3BlY3RpdmVseS4KKyAqLworX19hbHdheXNfaW5saW5lIGxvbmcgX19nZXRfdXNlcl9wYWdlc191bmxvY2tlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAorCQkJCQkgICAgICAgaW50IHdyaXRlLCBpbnQgZm9yY2UsIHN0cnVjdCBwYWdlICoqcGFnZXMsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzKQoreworCWxvbmcgcmV0OworCWludCBsb2NrZWQgPSAxOworCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlyZXQgPSBfX2dldF91c2VyX3BhZ2VzX2xvY2tlZCh0c2ssIG1tLCBzdGFydCwgbnJfcGFnZXMsIHdyaXRlLCBmb3JjZSwKKwkJCQkgICAgICBwYWdlcywgTlVMTCwgJmxvY2tlZCwgZmFsc2UsIGd1cF9mbGFncyk7CisJaWYgKGxvY2tlZCkKKwkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChfX2dldF91c2VyX3BhZ2VzX3VubG9ja2VkKTsKKworLyoKKyAqIGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKCkgaXMgc3VpdGFibGUgdG8gcmVwbGFjZSB0aGUgZm9ybToKKyAqCisgKiAgICAgIGRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKyAqICAgICAgZ2V0X3VzZXJfcGFnZXModHNrLCBtbSwgLi4uLCBwYWdlcywgTlVMTCk7CisgKiAgICAgIHVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisgKgorICogIHdpdGg6CisgKgorICogICAgICBnZXRfdXNlcl9wYWdlc191bmxvY2tlZCh0c2ssIG1tLCAuLi4sIHBhZ2VzKTsKKyAqCisgKiBJdCBpcyBmdW5jdGlvbmFsbHkgZXF1aXZhbGVudCB0byBnZXRfdXNlcl9wYWdlc19mYXN0IHNvCisgKiBnZXRfdXNlcl9wYWdlc19mYXN0IHNob3VsZCBiZSB1c2VkIGluc3RlYWQsIGlmIHRoZSB0d28gcGFyYW1ldGVycworICogInRzayIgYW5kICJtbSIgYXJlIHJlc3BlY3RpdmVseSBlcXVhbCB0byBjdXJyZW50IGFuZCBjdXJyZW50LT5tbSwKKyAqIG9yIGlmICJmb3JjZSIgc2hhbGwgYmUgc2V0IHRvIDEgKGdldF91c2VyX3BhZ2VzX2Zhc3QgbWlzc2VzIHRoZQorICogImZvcmNlIiBwYXJhbWV0ZXIpLgorICovCitsb25nIGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJCSAgICAgaW50IHdyaXRlLCBpbnQgZm9yY2UsIHN0cnVjdCBwYWdlICoqcGFnZXMpCit7CisJcmV0dXJuIF9fZ2V0X3VzZXJfcGFnZXNfdW5sb2NrZWQodHNrLCBtbSwgc3RhcnQsIG5yX3BhZ2VzLCB3cml0ZSwKKwkJCQkJIGZvcmNlLCBwYWdlcywgRk9MTF9UT1VDSCk7Cit9CitFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKTsKKwogLyoKICAqIGdldF91c2VyX3BhZ2VzKCkgLSBwaW4gdXNlciBwYWdlcyBpbiBtZW1vcnkKICAqIEB0c2s6CXRoZSB0YXNrX3N0cnVjdCB0byB1c2UgZm9yIHBhZ2UgZmF1bHQgYWNjb3VudGluZywgb3IKQEAgLTYzMywyMiArODAzLDE4IEBACiAgKiB1c2UgdGhlIGNvcnJlY3QgY2FjaGUgZmx1c2hpbmcgQVBJcy4KICAqCiAgKiBTZWUgYWxzbyBnZXRfdXNlcl9wYWdlc19mYXN0LCBmb3IgcGVyZm9ybWFuY2UgY3JpdGljYWwgYXBwbGljYXRpb25zLgorICoKKyAqIGdldF91c2VyX3BhZ2VzIHNob3VsZCBiZSBwaGFzZWQgb3V0IGluIGZhdm9yIG9mCisgKiBnZXRfdXNlcl9wYWdlc19sb2NrZWR8dW5sb2NrZWQgb3IgZ2V0X3VzZXJfcGFnZXNfZmFzdC4gTm90aGluZworICogc2hvdWxkIHVzZSBnZXRfdXNlcl9wYWdlcyBiZWNhdXNlIGl0IGNhbm5vdCBwYXNzCisgKiBGQVVMVF9GTEFHX0FMTE9XX1JFVFJZIHRvIGhhbmRsZV9tbV9mYXVsdC4KICAqLwogbG9uZyBnZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsIGludCB3cml0ZSwKIAkJaW50IGZvcmNlLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKQogewotCWludCBmbGFncyA9IEZPTExfVE9VQ0g7Ci0KLQlpZiAocGFnZXMpCi0JCWZsYWdzIHw9IEZPTExfR0VUOwotCWlmICh3cml0ZSkKLQkJZmxhZ3MgfD0gRk9MTF9XUklURTsKLQlpZiAoZm9yY2UpCi0JCWZsYWdzIHw9IEZPTExfRk9SQ0U7Ci0KLQlyZXR1cm4gX19nZXRfdXNlcl9wYWdlcyh0c2ssIG1tLCBzdGFydCwgbnJfcGFnZXMsIGZsYWdzLCBwYWdlcywgdm1hcywKLQkJCQlOVUxMKTsKKwlyZXR1cm4gX19nZXRfdXNlcl9wYWdlc19sb2NrZWQodHNrLCBtbSwgc3RhcnQsIG5yX3BhZ2VzLCB3cml0ZSwgZm9yY2UsCisJCQkJICAgICAgIHBhZ2VzLCB2bWFzLCBOVUxMLCBmYWxzZSwgRk9MTF9UT1VDSCk7CiB9CiBFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzKTsKIApAQCAtMTA3NywxMCArMTI0Myw4IEBACiAJCXN0YXJ0ICs9IG5yIDw8IFBBR0VfU0hJRlQ7CiAJCXBhZ2VzICs9IG5yOwogCi0JCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkJcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgbW0sIHN0YXJ0LAotCQkJCSAgICAgbnJfcGFnZXMgLSBuciwgd3JpdGUsIDAsIHBhZ2VzLCBOVUxMKTsKLQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwkJcmV0ID0gZ2V0X3VzZXJfcGFnZXNfdW5sb2NrZWQoY3VycmVudCwgbW0sIHN0YXJ0LAorCQkJCQkgICAgICBucl9wYWdlcyAtIG5yLCB3cml0ZSwgMCwgcGFnZXMpOwogCiAJCS8qIEhhdmUgdG8gYmUgYSBiaXQgY2FyZWZ1bCB3aXRoIHJldHVybiB2YWx1ZXMgKi8KIAkJaWYgKG5yID4gMCkgewpkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggODE3YTg3NS4uY2I3YmUxMSAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYworKysgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xNzEsMTIgKzE3MSw3IEBACiB9CiAKIHN0YXRpYyBhdG9taWNfdCBodWdlX3plcm9fcmVmY291bnQ7Ci1zdGF0aWMgc3RydWN0IHBhZ2UgKmh1Z2VfemVyb19wYWdlIF9fcmVhZF9tb3N0bHk7Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19odWdlX3plcm9fcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKLXsKLQlyZXR1cm4gQUNDRVNTX09OQ0UoaHVnZV96ZXJvX3BhZ2UpID09IHBhZ2U7Ci19CitzdHJ1Y3QgcGFnZSAqaHVnZV96ZXJvX3BhZ2UgX19yZWFkX21vc3RseTsKIAogc3RhdGljIGlubGluZSBib29sIGlzX2h1Z2VfemVyb19wbWQocG1kX3QgcG1kKQogewpAQCAtNzY2LDE1ICs3NjEsNiBAQAogCXJldHVybiAoR0ZQX1RSQU5TSFVHRSAmIH4oZGVmcmFnID8gMCA6IF9fR0ZQX1dBSVQpKSB8IGV4dHJhX2dmcDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqYWxsb2NfaHVnZXBhZ2Vfdm1hKGludCBkZWZyYWcsCi0JCQkJCSAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIGhhZGRyLCBpbnQgbmQsCi0JCQkJCSAgICAgIGdmcF90IGV4dHJhX2dmcCkKLXsKLQlyZXR1cm4gYWxsb2NfcGFnZXNfdm1hKGFsbG9jX2h1Z2VwYWdlX2dmcG1hc2soZGVmcmFnLCBleHRyYV9nZnApLAotCQkJICAgICAgIEhQQUdFX1BNRF9PUkRFUiwgdm1hLCBoYWRkciwgbmQpOwotfQotCiAvKiBDYWxsZXIgbXVzdCBob2xkIHBhZ2UgdGFibGUgbG9jay4gKi8KIHN0YXRpYyBib29sIHNldF9odWdlX3plcm9fcGFnZShwZ3RhYmxlX3QgcGd0YWJsZSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGhhZGRyLCBwbWRfdCAqcG1kLApAQCAtNzk1LDYgKzc4MSw3IEBACiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwbWRfdCAqcG1kLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKKwlnZnBfdCBnZnA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgbG9uZyBoYWRkciA9IGFkZHJlc3MgJiBIUEFHRV9QTURfTUFTSzsKIApAQCAtODI5LDggKzgxNiw4IEBACiAJCX0KIAkJcmV0dXJuIDA7CiAJfQotCXBhZ2UgPSBhbGxvY19odWdlcGFnZV92bWEodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZGVmcmFnKHZtYSksCi0JCQl2bWEsIGhhZGRyLCBudW1hX25vZGVfaWQoKSwgMCk7CisJZ2ZwID0gYWxsb2NfaHVnZXBhZ2VfZ2ZwbWFzayh0cmFuc3BhcmVudF9odWdlcGFnZV9kZWZyYWcodm1hKSwgMCk7CisJcGFnZSA9IGFsbG9jX2h1Z2VwYWdlX3ZtYShnZnAsIHZtYSwgaGFkZHIsIEhQQUdFX1BNRF9PUkRFUik7CiAJaWYgKHVubGlrZWx5KCFwYWdlKSkgewogCQljb3VudF92bV9ldmVudChUSFBfRkFVTFRfRkFMTEJBQ0spOwogCQlyZXR1cm4gVk1fRkFVTFRfRkFMTEJBQ0s7CkBAIC0xMTE4LDEwICsxMTA1LDEyIEBACiAJc3Bpbl91bmxvY2socHRsKTsKIGFsbG9jOgogCWlmICh0cmFuc3BhcmVudF9odWdlcGFnZV9lbmFibGVkKHZtYSkgJiYKLQkgICAgIXRyYW5zcGFyZW50X2h1Z2VwYWdlX2RlYnVnX2NvdygpKQotCQluZXdfcGFnZSA9IGFsbG9jX2h1Z2VwYWdlX3ZtYSh0cmFuc3BhcmVudF9odWdlcGFnZV9kZWZyYWcodm1hKSwKLQkJCQkJICAgICAgdm1hLCBoYWRkciwgbnVtYV9ub2RlX2lkKCksIDApOwotCWVsc2UKKwkgICAgIXRyYW5zcGFyZW50X2h1Z2VwYWdlX2RlYnVnX2NvdygpKSB7CisJCWdmcF90IGdmcDsKKworCQlnZnAgPSBhbGxvY19odWdlcGFnZV9nZnBtYXNrKHRyYW5zcGFyZW50X2h1Z2VwYWdlX2RlZnJhZyh2bWEpLCAwKTsKKwkJbmV3X3BhZ2UgPSBhbGxvY19odWdlcGFnZV92bWEoZ2ZwLCB2bWEsIGhhZGRyLCBIUEFHRV9QTURfT1JERVIpOworCX0gZWxzZQogCQluZXdfcGFnZSA9IE5VTEw7CiAKIAlpZiAodW5saWtlbHkoIW5ld19wYWdlKSkgewpAQCAtMTQyMywyNiArMTQxMiw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IG1pbmNvcmVfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCXVuc2lnbmVkIGNoYXIgKnZlYykKLXsKLQlzcGlubG9ja190ICpwdGw7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoX19wbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hLCAmcHRsKSA9PSAxKSB7Ci0JCS8qCi0JCSAqIEFsbCBsb2dpY2FsIHBhZ2VzIGluIHRoZSByYW5nZSBhcmUgcHJlc2VudAotCQkgKiBpZiBiYWNrZWQgYnkgYSBodWdlIHBhZ2UuCi0JCSAqLwotCQlzcGluX3VubG9jayhwdGwpOwotCQltZW1zZXQodmVjLCAxLCAoZW5kIC0gYWRkcikgPj4gUEFHRV9TSElGVCk7Ci0JCXJldCA9IDE7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQogaW50IG1vdmVfaHVnZV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV3X3ZtYSwKIAkJICB1bnNpZ25lZCBsb25nIG9sZF9hZGRyLAogCQkgIHVuc2lnbmVkIGxvbmcgbmV3X2FkZHIsIHVuc2lnbmVkIGxvbmcgb2xkX2VuZCwKQEAgLTIxNDgsNyArMjExNyw4IEBACiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJcHRlX3QgKl9wdGU7Ci0JaW50IHJlZmVyZW5jZWQgPSAwLCBub25lID0gMDsKKwlpbnQgbm9uZSA9IDA7CisJYm9vbCByZWZlcmVuY2VkID0gZmFsc2UsIHdyaXRhYmxlID0gZmFsc2U7CiAJZm9yIChfcHRlID0gcHRlOyBfcHRlIDwgcHRlK0hQQUdFX1BNRF9OUjsKIAkgICAgIF9wdGUrKywgYWRkcmVzcyArPSBQQUdFX1NJWkUpIHsKIAkJcHRlX3QgcHRldmFsID0gKl9wdGU7CkBAIC0yMTU4LDcgKzIxMjgsNyBAQAogCQkJZWxzZQogCQkJCWdvdG8gb3V0OwogCQl9Ci0JCWlmICghcHRlX3ByZXNlbnQocHRldmFsKSB8fCAhcHRlX3dyaXRlKHB0ZXZhbCkpCisJCWlmICghcHRlX3ByZXNlbnQocHRldmFsKSkKIAkJCWdvdG8gb3V0OwogCQlwYWdlID0gdm1fbm9ybWFsX3BhZ2Uodm1hLCBhZGRyZXNzLCBwdGV2YWwpOwogCQlpZiAodW5saWtlbHkoIXBhZ2UpKQpAQCAtMjE2OCw5ICsyMTM4LDYgQEAKIAkJVk1fQlVHX09OX1BBR0UoIVBhZ2VBbm9uKHBhZ2UpLCBwYWdlKTsKIAkJVk1fQlVHX09OX1BBR0UoIVBhZ2VTd2FwQmFja2VkKHBhZ2UpLCBwYWdlKTsKIAotCQkvKiBjYW5ub3QgdXNlIG1hcGNvdW50OiBjYW4ndCBjb2xsYXBzZSBpZiB0aGVyZSdzIGEgZ3VwIHBpbiAqLwotCQlpZiAocGFnZV9jb3VudChwYWdlKSAhPSAxKQotCQkJZ290byBvdXQ7CiAJCS8qCiAJCSAqIFdlIGNhbiBkbyBpdCBiZWZvcmUgaXNvbGF0ZV9scnVfcGFnZSBiZWNhdXNlIHRoZQogCQkgKiBwYWdlIGNhbid0IGJlIGZyZWVkIGZyb20gdW5kZXIgdXMuIE5PVEU6IFBHX2xvY2sKQEAgLTIxNzksNiArMjE0NiwyOSBAQAogCQkgKi8KIAkJaWYgKCF0cnlsb2NrX3BhZ2UocGFnZSkpCiAJCQlnb3RvIG91dDsKKworCQkvKgorCQkgKiBjYW5ub3QgdXNlIG1hcGNvdW50OiBjYW4ndCBjb2xsYXBzZSBpZiB0aGVyZSdzIGEgZ3VwIHBpbi4KKwkJICogVGhlIHBhZ2UgbXVzdCBvbmx5IGJlIHJlZmVyZW5jZWQgYnkgdGhlIHNjYW5uZWQgcHJvY2VzcworCQkgKiBhbmQgcGFnZSBzd2FwIGNhY2hlLgorCQkgKi8KKwkJaWYgKHBhZ2VfY291bnQocGFnZSkgIT0gMSArICEhUGFnZVN3YXBDYWNoZShwYWdlKSkgeworCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAocHRlX3dyaXRlKHB0ZXZhbCkpIHsKKwkJCXdyaXRhYmxlID0gdHJ1ZTsKKwkJfSBlbHNlIHsKKwkJCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpICYmICFyZXVzZV9zd2FwX3BhZ2UocGFnZSkpIHsKKwkJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCS8qCisJCQkgKiBQYWdlIGlzIG5vdCBpbiB0aGUgc3dhcCBjYWNoZS4gSXQgY2FuIGJlIGNvbGxhcHNlZAorCQkJICogaW50byBhIFRIUC4KKwkJCSAqLworCQl9CisKIAkJLyoKIAkJICogSXNvbGF0ZSB0aGUgcGFnZSB0byBhdm9pZCBjb2xsYXBzaW5nIGFuIGh1Z2VwYWdlCiAJCSAqIGN1cnJlbnRseSBpbiB1c2UgYnkgdGhlIFZNLgpAQCAtMjE5NSw5ICsyMTg1LDkgQEAKIAkJLyogSWYgdGhlcmUgaXMgbm8gbWFwcGVkIHB0ZSB5b3VuZyBkb24ndCBjb2xsYXBzZSB0aGUgcGFnZSAqLwogCQlpZiAocHRlX3lvdW5nKHB0ZXZhbCkgfHwgUGFnZVJlZmVyZW5jZWQocGFnZSkgfHwKIAkJICAgIG1tdV9ub3RpZmllcl90ZXN0X3lvdW5nKHZtYS0+dm1fbW0sIGFkZHJlc3MpKQotCQkJcmVmZXJlbmNlZCA9IDE7CisJCQlyZWZlcmVuY2VkID0gdHJ1ZTsKIAl9Ci0JaWYgKGxpa2VseShyZWZlcmVuY2VkKSkKKwlpZiAobGlrZWx5KHJlZmVyZW5jZWQgJiYgd3JpdGFibGUpKQogCQlyZXR1cm4gMTsKIG91dDoKIAlyZWxlYXNlX3B0ZV9wYWdlcyhwdGUsIF9wdGUpOwpAQCAtMjU1MCwxMSArMjU0MCwxMiBAQAogewogCXBtZF90ICpwbWQ7CiAJcHRlX3QgKnB0ZSwgKl9wdGU7Ci0JaW50IHJldCA9IDAsIHJlZmVyZW5jZWQgPSAwLCBub25lID0gMDsKKwlpbnQgcmV0ID0gMCwgbm9uZSA9IDA7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgbG9uZyBfYWRkcmVzczsKIAlzcGlubG9ja190ICpwdGw7CiAJaW50IG5vZGUgPSBOVU1BX05PX05PREU7CisJYm9vbCB3cml0YWJsZSA9IGZhbHNlLCByZWZlcmVuY2VkID0gZmFsc2U7CiAKIAlWTV9CVUdfT04oYWRkcmVzcyAmIH5IUEFHRV9QTURfTUFTSyk7CiAKQEAgLTI1NzMsOCArMjU2NCwxMSBAQAogCQkJZWxzZQogCQkJCWdvdG8gb3V0X3VubWFwOwogCQl9Ci0JCWlmICghcHRlX3ByZXNlbnQocHRldmFsKSB8fCAhcHRlX3dyaXRlKHB0ZXZhbCkpCisJCWlmICghcHRlX3ByZXNlbnQocHRldmFsKSkKIAkJCWdvdG8gb3V0X3VubWFwOworCQlpZiAocHRlX3dyaXRlKHB0ZXZhbCkpCisJCQl3cml0YWJsZSA9IHRydWU7CisKIAkJcGFnZSA9IHZtX25vcm1hbF9wYWdlKHZtYSwgX2FkZHJlc3MsIHB0ZXZhbCk7CiAJCWlmICh1bmxpa2VseSghcGFnZSkpCiAJCQlnb3RvIG91dF91bm1hcDsKQEAgLTI1OTEsMTQgKzI1ODUsMTggQEAKIAkJVk1fQlVHX09OX1BBR0UoUGFnZUNvbXBvdW5kKHBhZ2UpLCBwYWdlKTsKIAkJaWYgKCFQYWdlTFJVKHBhZ2UpIHx8IFBhZ2VMb2NrZWQocGFnZSkgfHwgIVBhZ2VBbm9uKHBhZ2UpKQogCQkJZ290byBvdXRfdW5tYXA7Ci0JCS8qIGNhbm5vdCB1c2UgbWFwY291bnQ6IGNhbid0IGNvbGxhcHNlIGlmIHRoZXJlJ3MgYSBndXAgcGluICovCi0JCWlmIChwYWdlX2NvdW50KHBhZ2UpICE9IDEpCisJCS8qCisJCSAqIGNhbm5vdCB1c2UgbWFwY291bnQ6IGNhbid0IGNvbGxhcHNlIGlmIHRoZXJlJ3MgYSBndXAgcGluLgorCQkgKiBUaGUgcGFnZSBtdXN0IG9ubHkgYmUgcmVmZXJlbmNlZCBieSB0aGUgc2Nhbm5lZCBwcm9jZXNzCisJCSAqIGFuZCBwYWdlIHN3YXAgY2FjaGUuCisJCSAqLworCQlpZiAocGFnZV9jb3VudChwYWdlKSAhPSAxICsgISFQYWdlU3dhcENhY2hlKHBhZ2UpKQogCQkJZ290byBvdXRfdW5tYXA7CiAJCWlmIChwdGVfeW91bmcocHRldmFsKSB8fCBQYWdlUmVmZXJlbmNlZChwYWdlKSB8fAogCQkgICAgbW11X25vdGlmaWVyX3Rlc3RfeW91bmcodm1hLT52bV9tbSwgYWRkcmVzcykpCi0JCQlyZWZlcmVuY2VkID0gMTsKKwkJCXJlZmVyZW5jZWQgPSB0cnVlOwogCX0KLQlpZiAocmVmZXJlbmNlZCkKKwlpZiAocmVmZXJlbmNlZCAmJiB3cml0YWJsZSkKIAkJcmV0ID0gMTsKIG91dF91bm1hcDoKIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA4NTAzMmRlLi4wYTlhYzZjIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKKysrIGIvbW0vaHVnZXRsYi5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbm9kZS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKLXVuc2lnbmVkIGxvbmcgaHVnZXBhZ2VzX3RyZWF0X2FzX21vdmFibGU7CitpbnQgaHVnZXBhZ2VzX3RyZWF0X2FzX21vdmFibGU7CiAKIGludCBodWdldGxiX21heF9oc3RhdGUgX19yZWFkX21vc3RseTsKIHVuc2lnbmVkIGludCBkZWZhdWx0X2hzdGF0ZV9pZHg7CkBAIC0yNjU3LDkgKzI2NTcsMTAgQEAKIAkJCWdvdG8gdW5sb2NrOwogCiAJCS8qCi0JCSAqIEhXUG9pc29uZWQgaHVnZXBhZ2UgaXMgYWxyZWFkeSB1bm1hcHBlZCBhbmQgZHJvcHBlZCByZWZlcmVuY2UKKwkJICogTWlncmF0aW5nIGh1Z2VwYWdlIG9yIEhXUG9pc29uZWQgaHVnZXBhZ2UgaXMgYWxyZWFkeQorCQkgKiB1bm1hcHBlZCBhbmQgaXRzIHJlZmNvdW50IGlzIGRyb3BwZWQsIHNvIGp1c3QgY2xlYXIgcHRlIGhlcmUuCiAJCSAqLwotCQlpZiAodW5saWtlbHkoaXNfaHVnZXRsYl9lbnRyeV9od3BvaXNvbmVkKHB0ZSkpKSB7CisJCWlmICh1bmxpa2VseSghcHRlX3ByZXNlbnQocHRlKSkpIHsKIAkJCWh1Z2VfcHRlX2NsZWFyKG1tLCBhZGRyZXNzLCBwdGVwKTsKIAkJCWdvdG8gdW5sb2NrOwogCQl9CkBAIC0zMTM0LDYgKzMxMzUsNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlY2FjaGVfcGFnZSA9IE5VTEw7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKKwlpbnQgbmVlZF93YWl0X2xvY2sgPSAwOwogCiAJYWRkcmVzcyAmPSBodWdlX3BhZ2VfbWFzayhoKTsKIApAQCAtMzE3Miw2ICszMTc0LDE2IEBACiAJcmV0ID0gMDsKIAogCS8qCisJICogZW50cnkgY291bGQgYmUgYSBtaWdyYXRpb24vaHdwb2lzb24gZW50cnkgYXQgdGhpcyBwb2ludCwgc28gdGhpcworCSAqIGNoZWNrIHByZXZlbnRzIHRoZSBrZXJuZWwgZnJvbSBnb2luZyBiZWxvdyBhc3N1bWluZyB0aGF0IHdlIGhhdmUKKwkgKiBhIGFjdGl2ZSBodWdlcGFnZSBpbiBwYWdlY2FjaGUuIFRoaXMgZ290byBleHBlY3RzIHRoZSAybmQgcGFnZSBmYXVsdCwKKwkgKiBhbmQgaXNfaHVnZXRsYl9lbnRyeV8obWlncmF0aW9ufGh3cG9pc29uZWQpIGNoZWNrIHdpbGwgcHJvcGVybHkKKwkgKiBoYW5kbGUgaXQuCisJICovCisJaWYgKCFwdGVfcHJlc2VudChlbnRyeSkpCisJCWdvdG8gb3V0X211dGV4OworCisJLyoKIAkgKiBJZiB3ZSBhcmUgZ29pbmcgdG8gQ09XIHRoZSBtYXBwaW5nIGxhdGVyLCB3ZSBleGFtaW5lIHRoZSBwZW5kaW5nCiAJICogcmVzZXJ2YXRpb25zIGZvciB0aGlzIHBhZ2Ugbm93LiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgYW55CiAJICogYWxsb2NhdGlvbnMgbmVjZXNzYXJ5IHRvIHJlY29yZCB0aGF0IHJlc2VydmF0aW9uIG9jY3VyIG91dHNpZGUgdGhlCkBAIC0zMTkwLDMwICszMjAyLDMxIEBACiAJCQkJCQkJCXZtYSwgYWRkcmVzcyk7CiAJfQogCi0JLyoKLQkgKiBodWdldGxiX2NvdygpIHJlcXVpcmVzIHBhZ2UgbG9ja3Mgb2YgcHRlX3BhZ2UoZW50cnkpIGFuZAotCSAqIHBhZ2VjYWNoZV9wYWdlLCBzbyBoZXJlIHdlIG5lZWQgdGFrZSB0aGUgZm9ybWVyIG9uZQotCSAqIHdoZW4gcGFnZSAhPSBwYWdlY2FjaGVfcGFnZSBvciAhcGFnZWNhY2hlX3BhZ2UuCi0JICogTm90ZSB0aGF0IGxvY2tpbmcgb3JkZXIgaXMgYWx3YXlzIHBhZ2VjYWNoZV9wYWdlIC0+IHBhZ2UsCi0JICogc28gbm8gd29ycnkgYWJvdXQgZGVhZGxvY2suCi0JICovCi0JcGFnZSA9IHB0ZV9wYWdlKGVudHJ5KTsKLQlnZXRfcGFnZShwYWdlKTsKLQlpZiAocGFnZSAhPSBwYWdlY2FjaGVfcGFnZSkKLQkJbG9ja19wYWdlKHBhZ2UpOworCXB0bCA9IGh1Z2VfcHRlX2xvY2soaCwgbW0sIHB0ZXApOwogCi0JcHRsID0gaHVnZV9wdGVfbG9ja3B0cihoLCBtbSwgcHRlcCk7Ci0Jc3Bpbl9sb2NrKHB0bCk7CiAJLyogQ2hlY2sgZm9yIGEgcmFjaW5nIHVwZGF0ZSBiZWZvcmUgY2FsbGluZyBodWdldGxiX2NvdyAqLwogCWlmICh1bmxpa2VseSghcHRlX3NhbWUoZW50cnksIGh1Z2VfcHRlcF9nZXQocHRlcCkpKSkKIAkJZ290byBvdXRfcHRsOwogCisJLyoKKwkgKiBodWdldGxiX2NvdygpIHJlcXVpcmVzIHBhZ2UgbG9ja3Mgb2YgcHRlX3BhZ2UoZW50cnkpIGFuZAorCSAqIHBhZ2VjYWNoZV9wYWdlLCBzbyBoZXJlIHdlIG5lZWQgdGFrZSB0aGUgZm9ybWVyIG9uZQorCSAqIHdoZW4gcGFnZSAhPSBwYWdlY2FjaGVfcGFnZSBvciAhcGFnZWNhY2hlX3BhZ2UuCisJICovCisJcGFnZSA9IHB0ZV9wYWdlKGVudHJ5KTsKKwlpZiAocGFnZSAhPSBwYWdlY2FjaGVfcGFnZSkKKwkJaWYgKCF0cnlsb2NrX3BhZ2UocGFnZSkpIHsKKwkJCW5lZWRfd2FpdF9sb2NrID0gMTsKKwkJCWdvdG8gb3V0X3B0bDsKKwkJfQorCisJZ2V0X3BhZ2UocGFnZSk7CiAKIAlpZiAoZmxhZ3MgJiBGQVVMVF9GTEFHX1dSSVRFKSB7CiAJCWlmICghaHVnZV9wdGVfd3JpdGUoZW50cnkpKSB7CiAJCQlyZXQgPSBodWdldGxiX2NvdyhtbSwgdm1hLCBhZGRyZXNzLCBwdGVwLCBlbnRyeSwKIAkJCQkJcGFnZWNhY2hlX3BhZ2UsIHB0bCk7Ci0JCQlnb3RvIG91dF9wdGw7CisJCQlnb3RvIG91dF9wdXRfcGFnZTsKIAkJfQogCQllbnRyeSA9IGh1Z2VfcHRlX21rZGlydHkoZW50cnkpOwogCX0KQEAgLTMyMjEsNyArMzIzNCwxMCBAQAogCWlmIChodWdlX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyh2bWEsIGFkZHJlc3MsIHB0ZXAsIGVudHJ5LAogCQkJCQkJZmxhZ3MgJiBGQVVMVF9GTEFHX1dSSVRFKSkKIAkJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIHB0ZXApOwotCitvdXRfcHV0X3BhZ2U6CisJaWYgKHBhZ2UgIT0gcGFnZWNhY2hlX3BhZ2UpCisJCXVubG9ja19wYWdlKHBhZ2UpOworCXB1dF9wYWdlKHBhZ2UpOwogb3V0X3B0bDoKIAlzcGluX3VubG9jayhwdGwpOwogCkBAIC0zMjI5LDEyICszMjQ1LDE3IEBACiAJCXVubG9ja19wYWdlKHBhZ2VjYWNoZV9wYWdlKTsKIAkJcHV0X3BhZ2UocGFnZWNhY2hlX3BhZ2UpOwogCX0KLQlpZiAocGFnZSAhPSBwYWdlY2FjaGVfcGFnZSkKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JcHV0X3BhZ2UocGFnZSk7Ci0KIG91dF9tdXRleDoKIAltdXRleF91bmxvY2soJmh0bGJfZmF1bHRfbXV0ZXhfdGFibGVbaGFzaF0pOworCS8qCisJICogR2VuZXJhbGx5IGl0J3Mgc2FmZSB0byBob2xkIHJlZmNvdW50IGR1cmluZyB3YWl0aW5nIHBhZ2UgbG9jay4gQnV0CisJICogaGVyZSB3ZSBqdXN0IHdhaXQgdG8gZGVmZXIgdGhlIG5leHQgcGFnZSBmYXVsdCB0byBhdm9pZCBidXN5IGxvb3AgYW5kCisJICogdGhlIHBhZ2UgaXMgbm90IHVzZWQgYWZ0ZXIgdW5sb2NrZWQgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoZSBjdXJyZW50CisJICogcGFnZSBmYXVsdC4gU28gd2UgYXJlIHNhZmUgZnJvbSBhY2Nlc3NpbmcgZnJlZWQgcGFnZSwgZXZlbiBpZiB3ZSB3YWl0CisJICogaGVyZSB3aXRob3V0IHRha2luZyByZWZjb3VudC4KKwkgKi8KKwlpZiAobmVlZF93YWl0X2xvY2spCisJCXdhaXRfb25fcGFnZV9sb2NrZWQocGFnZSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzM2NCw3ICszMzg1LDI2IEBACiAJCQlzcGluX3VubG9jayhwdGwpOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCFodWdlX3B0ZV9ub25lKGh1Z2VfcHRlcF9nZXQocHRlcCkpKSB7CisJCXB0ZSA9IGh1Z2VfcHRlcF9nZXQocHRlcCk7CisJCWlmICh1bmxpa2VseShpc19odWdldGxiX2VudHJ5X2h3cG9pc29uZWQocHRlKSkpIHsKKwkJCXNwaW5fdW5sb2NrKHB0bCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodW5saWtlbHkoaXNfaHVnZXRsYl9lbnRyeV9taWdyYXRpb24ocHRlKSkpIHsKKwkJCXN3cF9lbnRyeV90IGVudHJ5ID0gcHRlX3RvX3N3cF9lbnRyeShwdGUpOworCisJCQlpZiAoaXNfd3JpdGVfbWlncmF0aW9uX2VudHJ5KGVudHJ5KSkgeworCQkJCXB0ZV90IG5ld3B0ZTsKKworCQkJCW1ha2VfbWlncmF0aW9uX2VudHJ5X3JlYWQoJmVudHJ5KTsKKwkJCQluZXdwdGUgPSBzd3BfZW50cnlfdG9fcHRlKGVudHJ5KTsKKwkJCQlzZXRfaHVnZV9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZXAsIG5ld3B0ZSk7CisJCQkJcGFnZXMrKzsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrKHB0bCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIWh1Z2VfcHRlX25vbmUocHRlKSkgewogCQkJcHRlID0gaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIobW0sIGFkZHJlc3MsIHB0ZXApOwogCQkJcHRlID0gcHRlX21raHVnZShodWdlX3B0ZV9tb2RpZnkocHRlLCBuZXdwcm90KSk7CiAJCQlwdGUgPSBhcmNoX21ha2VfaHVnZV9wdGUocHRlLCB2bWEsIE5VTEwsIDApOwpAQCAtMzU1OCw2ICszNTk4LDcgQEAKIAkJaWYgKHNhZGRyKSB7CiAJCQlzcHRlID0gaHVnZV9wdGVfb2Zmc2V0KHN2bWEtPnZtX21tLCBzYWRkcik7CiAJCQlpZiAoc3B0ZSkgeworCQkJCW1tX2luY19ucl9wbWRzKG1tKTsKIAkJCQlnZXRfcGFnZSh2aXJ0X3RvX3BhZ2Uoc3B0ZSkpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzU2OSwxMSArMzYxMCwxMyBAQAogCiAJcHRsID0gaHVnZV9wdGVfbG9ja3B0cihoc3RhdGVfdm1hKHZtYSksIG1tLCBzcHRlKTsKIAlzcGluX2xvY2socHRsKTsKLQlpZiAocHVkX25vbmUoKnB1ZCkpCisJaWYgKHB1ZF9ub25lKCpwdWQpKSB7CiAJCXB1ZF9wb3B1bGF0ZShtbSwgcHVkLAogCQkJCShwbWRfdCAqKSgodW5zaWduZWQgbG9uZylzcHRlICYgUEFHRV9NQVNLKSk7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCXB1dF9wYWdlKHZpcnRfdG9fcGFnZShzcHRlKSk7CisJCW1tX2luY19ucl9wbWRzKG1tKTsKKwl9CiAJc3Bpbl91bmxvY2socHRsKTsKIG91dDoKIAlwdGUgPSAocHRlX3QgKilwbWRfYWxsb2MobW0sIHB1ZCwgYWRkcik7CkBAIC0zNjA0LDYgKzM2NDcsNyBAQAogCiAJcHVkX2NsZWFyKHB1ZCk7CiAJcHV0X3BhZ2UodmlydF90b19wYWdlKHB0ZXApKTsKKwltbV9kZWNfbnJfcG1kcyhtbSk7CiAJKmFkZHIgPSBBTElHTigqYWRkciwgSFBBR0VfU0laRSAqIFBUUlNfUEVSX1BURSkgLSBIUEFHRV9TSVpFOwogCXJldHVybiAxOwogfQpAQCAtMzY2MCw0MiArMzcwNCw2NCBAQAogCXJldHVybiAocHRlX3QgKikgcG1kOwogfQogCi1zdHJ1Y3QgcGFnZSAqCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEIgKi8KKworLyoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb3ZlcndyaXRhYmxlIGlmIHlvdXIgYXJjaGl0ZWN0dXJlIG5lZWRzIGl0cyBvd24KKyAqIGJlaGF2aW9yLgorICovCitzdHJ1Y3QgcGFnZSAqIF9fd2VhaworZm9sbG93X2h1Z2VfYWRkcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkJICAgICAgaW50IHdyaXRlKQoreworCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworfQorCitzdHJ1Y3QgcGFnZSAqIF9fd2VhawogZm9sbG93X2h1Z2VfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCi0JCXBtZF90ICpwbWQsIGludCB3cml0ZSkKKwkJcG1kX3QgKnBtZCwgaW50IGZsYWdzKQogewotCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JcGFnZSA9IHB0ZV9wYWdlKCoocHRlX3QgKilwbWQpOwotCWlmIChwYWdlKQotCQlwYWdlICs9ICgoYWRkcmVzcyAmIH5QTURfTUFTSykgPj4gUEFHRV9TSElGVCk7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOworCXNwaW5sb2NrX3QgKnB0bDsKK3JldHJ5OgorCXB0bCA9IHBtZF9sb2NrcHRyKG1tLCBwbWQpOworCXNwaW5fbG9jayhwdGwpOworCS8qCisJICogbWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJlc3MgcmFuZ2UgY292ZXJlZCBieSB0aGlzIHBtZCBpcyBub3QKKwkgKiB1bm1hcHBlZCBmcm9tIG90aGVyIHRocmVhZHMuCisJICovCisJaWYgKCFwbWRfaHVnZSgqcG1kKSkKKwkJZ290byBvdXQ7CisJaWYgKHBtZF9wcmVzZW50KCpwbWQpKSB7CisJCXBhZ2UgPSBwdGVfcGFnZSgqKHB0ZV90ICopcG1kKSArCisJCQkoKGFkZHJlc3MgJiB+UE1EX01BU0spID4+IFBBR0VfU0hJRlQpOworCQlpZiAoZmxhZ3MgJiBGT0xMX0dFVCkKKwkJCWdldF9wYWdlKHBhZ2UpOworCX0gZWxzZSB7CisJCWlmIChpc19odWdldGxiX2VudHJ5X21pZ3JhdGlvbihodWdlX3B0ZXBfZ2V0KChwdGVfdCAqKXBtZCkpKSB7CisJCQlzcGluX3VubG9jayhwdGwpOworCQkJX19taWdyYXRpb25fZW50cnlfd2FpdChtbSwgKHB0ZV90ICopcG1kLCBwdGwpOworCQkJZ290byByZXRyeTsKKwkJfQorCQkvKgorCQkgKiBod3BvaXNvbmVkIGVudHJ5IGlzIHRyZWF0ZWQgYXMgbm9fcGFnZV90YWJsZSBpbgorCQkgKiBmb2xsb3dfcGFnZV9tYXNrKCkuCisJCSAqLworCX0KK291dDoKKwlzcGluX3VubG9jayhwdGwpOwogCXJldHVybiBwYWdlOwogfQogCi1zdHJ1Y3QgcGFnZSAqCi1mb2xsb3dfaHVnZV9wdWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJcHVkX3QgKnB1ZCwgaW50IHdyaXRlKQotewotCXN0cnVjdCBwYWdlICpwYWdlOwotCi0JcGFnZSA9IHB0ZV9wYWdlKCoocHRlX3QgKilwdWQpOwotCWlmIChwYWdlKQotCQlwYWdlICs9ICgoYWRkcmVzcyAmIH5QVURfTUFTSykgPj4gUEFHRV9TSElGVCk7Ci0JcmV0dXJuIHBhZ2U7Ci19Ci0KLSNlbHNlIC8qICFDT05GSUdfQVJDSF9XQU5UX0dFTkVSQUxfSFVHRVRMQiAqLwotCi0vKiBDYW4gYmUgb3ZlcnJpZGVuIGJ5IGFyY2hpdGVjdHVyZXMgKi8KIHN0cnVjdCBwYWdlICogX193ZWFrCiBmb2xsb3dfaHVnZV9wdWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkgICAgICAgcHVkX3QgKnB1ZCwgaW50IHdyaXRlKQorCQlwdWRfdCAqcHVkLCBpbnQgZmxhZ3MpCiB7Ci0JQlVHKCk7Ci0JcmV0dXJuIE5VTEw7Ci19CisJaWYgKGZsYWdzICYgRk9MTF9HRVQpCisJCXJldHVybiBOVUxMOwogCi0jZW5kaWYgLyogQ09ORklHX0FSQ0hfV0FOVF9HRU5FUkFMX0hVR0VUTEIgKi8KKwlyZXR1cm4gcHRlX3BhZ2UoKihwdGVfdCAqKXB1ZCkgKyAoKGFkZHJlc3MgJiB+UFVEX01BU0spID4+IFBBR0VfU0hJRlQpOworfQogCiAjaWZkZWYgQ09ORklHX01FTU9SWV9GQUlMVVJFCiAKZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGJfY2dyb3VwLmMgYi9tbS9odWdldGxiX2Nncm91cC5jCmluZGV4IDAzN2UxYzAuLjZlMDA1NzQgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGJfY2dyb3VwLmMKKysrIGIvbW0vaHVnZXRsYl9jZ3JvdXAuYwpAQCAtMjc5LDcgKzI3OSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJYnVmID0gc3Ryc3RyaXAoYnVmKTsKLQlyZXQgPSBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoYnVmLCAmbnJfcGFnZXMpOworCXJldCA9IHBhZ2VfY291bnRlcl9tZW1wYXJzZShidWYsICItMSIsICZucl9wYWdlcyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggZWZhZDI0MS4uYzRkNmM5YiAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAorKysgYi9tbS9pbnRlcm5hbC5oCkBAIC0xMTAsNiArMTEwLDI4IEBACiAgKi8KIAogLyoKKyAqIFN0cnVjdHVyZSBmb3IgaG9sZGluZyB0aGUgbW9zdGx5IGltbXV0YWJsZSBhbGxvY2F0aW9uIHBhcmFtZXRlcnMgcGFzc2VkCisgKiBiZXR3ZWVuIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiBhbGxvY2F0aW9ucywgaW5jbHVkaW5nIHRoZSBhbGxvY19wYWdlcyoKKyAqIGZhbWlseSBvZiBmdW5jdGlvbnMuCisgKgorICogbm9kZW1hc2ssIG1pZ3JhdGV0eXBlIGFuZCBoaWdoX3pvbmVpZHggYXJlIGluaXRpYWxpemVkIG9ubHkgb25jZSBpbgorICogX19hbGxvY19wYWdlc19ub2RlbWFzaygpIGFuZCB0aGVuIG5ldmVyIGNoYW5nZS4KKyAqCisgKiB6b25lbGlzdCwgcHJlZmVycmVkX3pvbmUgYW5kIGNsYXNzem9uZV9pZHggYXJlIHNldCBmaXJzdCBpbgorICogX19hbGxvY19wYWdlc19ub2RlbWFzaygpIGZvciB0aGUgZmFzdCBwYXRoLCBhbmQgbWlnaHQgYmUgbGF0ZXIgY2hhbmdlZAorICogaW4gX19hbGxvY19wYWdlc19zbG93cGF0aCgpLiBBbGwgb3RoZXIgZnVuY3Rpb25zIHBhc3MgdGhlIHdob2xlIHN0cnVjdXJlCisgKiBieSBhIGNvbnN0IHBvaW50ZXIuCisgKi8KK3N0cnVjdCBhbGxvY19jb250ZXh0IHsKKwlzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0OworCW5vZGVtYXNrX3QgKm5vZGVtYXNrOworCXN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZTsKKwlpbnQgY2xhc3N6b25lX2lkeDsKKwlpbnQgbWlncmF0ZXR5cGU7CisJZW51bSB6b25lX3R5cGUgaGlnaF96b25laWR4OworfTsKKworLyoKICAqIExvY2F0ZSB0aGUgc3RydWN0IHBhZ2UgZm9yIGJvdGggdGhlIG1hdGNoaW5nIGJ1ZGR5IGluIG91cgogICogcGFpciAoYnVkZHkxKSBhbmQgdGhlIGNvbWJpbmVkIE8obisxKSBwYWdlIHRoZXkgZm9ybSAocGFnZSkuCiAgKgpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJ2YWxfdHJlZS5jIGIvbW0vaW50ZXJ2YWxfdHJlZS5jCmluZGV4IDhkYTU4MWYuLmYyYzI0OTIgMTAwNjQ0Ci0tLSBhL21tL2ludGVydmFsX3RyZWUuYworKysgYi9tbS9pbnRlcnZhbF90cmVlLmMKQEAgLTIxLDggKzIxLDggQEAKIAlyZXR1cm4gdi0+dm1fcGdvZmYgKyAoKHYtPnZtX2VuZCAtIHYtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUKSAtIDE7CiB9CiAKLUlOVEVSVkFMX1RSRUVfREVGSU5FKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCwgc2hhcmVkLmxpbmVhci5yYiwKLQkJICAgICB1bnNpZ25lZCBsb25nLCBzaGFyZWQubGluZWFyLnJiX3N1YnRyZWVfbGFzdCwKK0lOVEVSVkFMX1RSRUVfREVGSU5FKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCwgc2hhcmVkLnJiLAorCQkgICAgIHVuc2lnbmVkIGxvbmcsIHNoYXJlZC5yYl9zdWJ0cmVlX2xhc3QsCiAJCSAgICAgdm1hX3N0YXJ0X3Bnb2ZmLCB2bWFfbGFzdF9wZ29mZiwsIHZtYV9pbnRlcnZhbF90cmVlKQogCiAvKiBJbnNlcnQgbm9kZSBpbW1lZGlhdGVseSBhZnRlciBwcmV2IGluIHRoZSBpbnRlcnZhbCB0cmVlICovCkBAIC0zNiwyNiArMzYsMjYgQEAKIAogCVZNX0JVR19PTl9WTUEodm1hX3N0YXJ0X3Bnb2ZmKG5vZGUpICE9IHZtYV9zdGFydF9wZ29mZihwcmV2KSwgbm9kZSk7CiAKLQlpZiAoIXByZXYtPnNoYXJlZC5saW5lYXIucmIucmJfcmlnaHQpIHsKKwlpZiAoIXByZXYtPnNoYXJlZC5yYi5yYl9yaWdodCkgewogCQlwYXJlbnQgPSBwcmV2OwotCQlsaW5rID0gJnByZXYtPnNoYXJlZC5saW5lYXIucmIucmJfcmlnaHQ7CisJCWxpbmsgPSAmcHJldi0+c2hhcmVkLnJiLnJiX3JpZ2h0OwogCX0gZWxzZSB7Ci0JCXBhcmVudCA9IHJiX2VudHJ5KHByZXYtPnNoYXJlZC5saW5lYXIucmIucmJfcmlnaHQsCi0JCQkJICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QsIHNoYXJlZC5saW5lYXIucmIpOwotCQlpZiAocGFyZW50LT5zaGFyZWQubGluZWFyLnJiX3N1YnRyZWVfbGFzdCA8IGxhc3QpCi0JCQlwYXJlbnQtPnNoYXJlZC5saW5lYXIucmJfc3VidHJlZV9sYXN0ID0gbGFzdDsKLQkJd2hpbGUgKHBhcmVudC0+c2hhcmVkLmxpbmVhci5yYi5yYl9sZWZ0KSB7Ci0JCQlwYXJlbnQgPSByYl9lbnRyeShwYXJlbnQtPnNoYXJlZC5saW5lYXIucmIucmJfbGVmdCwKLQkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QsIHNoYXJlZC5saW5lYXIucmIpOwotCQkJaWYgKHBhcmVudC0+c2hhcmVkLmxpbmVhci5yYl9zdWJ0cmVlX2xhc3QgPCBsYXN0KQotCQkJCXBhcmVudC0+c2hhcmVkLmxpbmVhci5yYl9zdWJ0cmVlX2xhc3QgPSBsYXN0OworCQlwYXJlbnQgPSByYl9lbnRyeShwcmV2LT5zaGFyZWQucmIucmJfcmlnaHQsCisJCQkJICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QsIHNoYXJlZC5yYik7CisJCWlmIChwYXJlbnQtPnNoYXJlZC5yYl9zdWJ0cmVlX2xhc3QgPCBsYXN0KQorCQkJcGFyZW50LT5zaGFyZWQucmJfc3VidHJlZV9sYXN0ID0gbGFzdDsKKwkJd2hpbGUgKHBhcmVudC0+c2hhcmVkLnJiLnJiX2xlZnQpIHsKKwkJCXBhcmVudCA9IHJiX2VudHJ5KHBhcmVudC0+c2hhcmVkLnJiLnJiX2xlZnQsCisJCQkJc3RydWN0IHZtX2FyZWFfc3RydWN0LCBzaGFyZWQucmIpOworCQkJaWYgKHBhcmVudC0+c2hhcmVkLnJiX3N1YnRyZWVfbGFzdCA8IGxhc3QpCisJCQkJcGFyZW50LT5zaGFyZWQucmJfc3VidHJlZV9sYXN0ID0gbGFzdDsKIAkJfQotCQlsaW5rID0gJnBhcmVudC0+c2hhcmVkLmxpbmVhci5yYi5yYl9sZWZ0OworCQlsaW5rID0gJnBhcmVudC0+c2hhcmVkLnJiLnJiX2xlZnQ7CiAJfQogCi0Jbm9kZS0+c2hhcmVkLmxpbmVhci5yYl9zdWJ0cmVlX2xhc3QgPSBsYXN0OwotCXJiX2xpbmtfbm9kZSgmbm9kZS0+c2hhcmVkLmxpbmVhci5yYiwgJnBhcmVudC0+c2hhcmVkLmxpbmVhci5yYiwgbGluayk7Ci0JcmJfaW5zZXJ0X2F1Z21lbnRlZCgmbm9kZS0+c2hhcmVkLmxpbmVhci5yYiwgcm9vdCwKKwlub2RlLT5zaGFyZWQucmJfc3VidHJlZV9sYXN0ID0gbGFzdDsKKwlyYl9saW5rX25vZGUoJm5vZGUtPnNoYXJlZC5yYiwgJnBhcmVudC0+c2hhcmVkLnJiLCBsaW5rKTsKKwlyYl9pbnNlcnRfYXVnbWVudGVkKCZub2RlLT5zaGFyZWQucmIsIHJvb3QsCiAJCQkgICAgJnZtYV9pbnRlcnZhbF90cmVlX2F1Z21lbnQpOwogfQogCmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jCmluZGV4IGQyNDdlZmEuLjQxNjJkY2UgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCisrKyBiL21tL2tzbS5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIAkJZWxzZQogCQkJcmV0ID0gVk1fRkFVTFRfV1JJVEU7CiAJCXB1dF9wYWdlKHBhZ2UpOwotCX0gd2hpbGUgKCEocmV0ICYgKFZNX0ZBVUxUX1dSSVRFIHwgVk1fRkFVTFRfU0lHQlVTIHwgVk1fRkFVTFRfT09NKSkpOworCX0gd2hpbGUgKCEocmV0ICYgKFZNX0ZBVUxUX1dSSVRFIHwgVk1fRkFVTFRfU0lHQlVTIHwgVk1fRkFVTFRfU0lHU0VHViB8IFZNX0ZBVUxUX09PTSkpKTsKIAkvKgogCSAqIFdlIG11c3QgbG9vcCBiZWNhdXNlIGhhbmRsZV9tbV9mYXVsdCgpIG1heSBiYWNrIG91dCBpZiB0aGVyZSdzCiAJICogYW55IGRpZmZpY3VsdHkgZS5nLiBpZiBwdGUgYWNjZXNzZWQgYml0IGdldHMgdXBkYXRlZCBjb25jdXJyZW50bHkuCkBAIC0xNzQ4LDcgKzE3NDgsNyBAQAogCQkgKi8KIAkJaWYgKCp2bV9mbGFncyAmIChWTV9NRVJHRUFCTEUgfCBWTV9TSEFSRUQgIHwgVk1fTUFZU0hBUkUgICB8CiAJCQkJIFZNX1BGTk1BUCAgICB8IFZNX0lPICAgICAgfCBWTV9ET05URVhQQU5EIHwKLQkJCQkgVk1fSFVHRVRMQiB8IFZNX05PTkxJTkVBUiB8IFZNX01JWEVETUFQKSkKKwkJCQkgVk1fSFVHRVRMQiB8IFZNX01JWEVETUFQKSkKIAkJCXJldHVybiAwOwkJLyoganVzdCBpZ25vcmUgdGhlIGFkdmljZSAqLwogCiAjaWZkZWYgVk1fU0FPCmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmMKaW5kZXggYTI3MWFkYy4uZDc5ZmI1ZSAxMDA2NDQKLS0tIGEvbW0vbWFkdmlzZS5jCisrKyBiL21tL21hZHZpc2UuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiAJCXB0ZSA9ICoob3JpZ19wdGUgKyAoKGluZGV4IC0gc3RhcnQpIC8gUEFHRV9TSVpFKSk7CiAJCXB0ZV91bm1hcF91bmxvY2sob3JpZ19wdGUsIHB0bCk7CiAKLQkJaWYgKHB0ZV9wcmVzZW50KHB0ZSkgfHwgcHRlX25vbmUocHRlKSB8fCBwdGVfZmlsZShwdGUpKQorCQlpZiAocHRlX3ByZXNlbnQocHRlKSB8fCBwdGVfbm9uZShwdGUpKQogCQkJY29udGludWU7CiAJCWVudHJ5ID0gcHRlX3RvX3N3cF9lbnRyeShwdGUpOwogCQlpZiAodW5saWtlbHkobm9uX3N3YXBfZW50cnkoZW50cnkpKSkKQEAgLTI3OCwxNCArMjc4LDcgQEAKIAlpZiAodm1hLT52bV9mbGFncyAmIChWTV9MT0NLRUR8Vk1fSFVHRVRMQnxWTV9QRk5NQVApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICh1bmxpa2VseSh2bWEtPnZtX2ZsYWdzICYgVk1fTk9OTElORUFSKSkgewotCQlzdHJ1Y3QgemFwX2RldGFpbHMgZGV0YWlscyA9IHsKLQkJCS5ub25saW5lYXJfdm1hID0gdm1hLAotCQkJLmxhc3RfaW5kZXggPSBVTE9OR19NQVgsCi0JCX07Ci0JCXphcF9wYWdlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCAtIHN0YXJ0LCAmZGV0YWlscyk7Ci0JfSBlbHNlCi0JCXphcF9wYWdlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCAtIHN0YXJ0LCBOVUxMKTsKKwl6YXBfcGFnZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQgLSBzdGFydCwgTlVMTCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwMyw3ICsyOTYsNyBAQAogCiAJKnByZXYgPSBOVUxMOwkvKiB0ZWxsIHN5c19tYWR2aXNlIHdlIGRyb3AgbW1hcF9zZW0gKi8KIAotCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX0xPQ0tFRHxWTV9OT05MSU5FQVJ8Vk1fSFVHRVRMQikpCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fTE9DS0VEIHwgVk1fSFVHRVRMQikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZiA9IHZtYS0+dm1fZmlsZTsKZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuYwppbmRleCA4NTE5MjRmLi4wOTVjMWY5IDEwMDY0NAotLS0gYS9tbS9tZW1jb250cm9sLmMKKysrIGIvbW0vbWVtY29udHJvbC5jCkBAIC03MiwyMiArNzIsMTMgQEAKICNkZWZpbmUgTUVNX0NHUk9VUF9SRUNMQUlNX1JFVFJJRVMJNQogc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbV9jZ3JvdXAgX19yZWFkX21vc3RseTsKIAorLyogV2hldGhlciB0aGUgc3dhcCBjb250cm9sbGVyIGlzIGFjdGl2ZSAqLwogI2lmZGVmIENPTkZJR19NRU1DR19TV0FQCi0vKiBUdXJuZWQgb24gb25seSB3aGVuIG1lbW9yeSBjZ3JvdXAgaXMgZW5hYmxlZCAmJiByZWFsbHlfZG9fc3dhcF9hY2NvdW50ID0gMSAqLwogaW50IGRvX3N3YXBfYWNjb3VudCBfX3JlYWRfbW9zdGx5OwotCi0vKiBmb3IgcmVtZW1iZXIgYm9vdCBvcHRpb24qLwotI2lmZGVmIENPTkZJR19NRU1DR19TV0FQX0VOQUJMRUQKLXN0YXRpYyBpbnQgcmVhbGx5X2RvX3N3YXBfYWNjb3VudCBfX2luaXRkYXRhID0gMTsKLSNlbHNlCi1zdGF0aWMgaW50IHJlYWxseV9kb19zd2FwX2FjY291bnQgX19pbml0ZGF0YTsKLSNlbmRpZgotCiAjZWxzZQogI2RlZmluZSBkb19zd2FwX2FjY291bnQJCTAKICNlbmRpZgogCi0KIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWVtX2Nncm91cF9zdGF0X25hbWVzW10gPSB7CiAJImNhY2hlIiwKIAkicnNzIiwKQEAgLTk3LDE0ICs4OCw2IEBACiAJInN3YXAiLAogfTsKIAotZW51bSBtZW1fY2dyb3VwX2V2ZW50c19pbmRleCB7Ci0JTUVNX0NHUk9VUF9FVkVOVFNfUEdQR0lOLAkvKiAjIG9mIHBhZ2VzIHBhZ2VkIGluICovCi0JTUVNX0NHUk9VUF9FVkVOVFNfUEdQR09VVCwJLyogIyBvZiBwYWdlcyBwYWdlZCBvdXQgKi8KLQlNRU1fQ0dST1VQX0VWRU5UU19QR0ZBVUxULAkvKiAjIG9mIHBhZ2UtZmF1bHRzICovCi0JTUVNX0NHUk9VUF9FVkVOVFNfUEdNQUpGQVVMVCwJLyogIyBvZiBtYWpvciBwYWdlLWZhdWx0cyAqLwotCU1FTV9DR1JPVVBfRVZFTlRTX05TVEFUUywKLX07Ci0KIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbWVtX2Nncm91cF9ldmVudHNfbmFtZXNbXSA9IHsKIAkicGdwZ2luIiwKIAkicGdwZ291dCIsCkBAIC0xMzgsNyArMTIxLDcgQEAKIAogc3RydWN0IG1lbV9jZ3JvdXBfc3RhdF9jcHUgewogCWxvbmcgY291bnRbTUVNX0NHUk9VUF9TVEFUX05TVEFUU107Ci0JdW5zaWduZWQgbG9uZyBldmVudHNbTUVNX0NHUk9VUF9FVkVOVFNfTlNUQVRTXTsKKwl1bnNpZ25lZCBsb25nIGV2ZW50c1tNRU1DR19OUl9FVkVOVFNdOwogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZV9ldmVudHM7CiAJdW5zaWduZWQgbG9uZyB0YXJnZXRzW01FTV9DR1JPVVBfTlRBUkdFVFNdOwogfTsKQEAgLTI4NCw2ICsyNjcsMTAgQEAKIAlzdHJ1Y3QgcGFnZV9jb3VudGVyIG1lbXN3OwogCXN0cnVjdCBwYWdlX2NvdW50ZXIga21lbTsKIAorCS8qIE5vcm1hbCBtZW1vcnkgY29uc3VtcHRpb24gcmFuZ2UgKi8KKwl1bnNpZ25lZCBsb25nIGxvdzsKKwl1bnNpZ25lZCBsb25nIGhpZ2g7CisKIAl1bnNpZ25lZCBsb25nIHNvZnRfbGltaXQ7CiAKIAkvKiB2bXByZXNzdXJlIG5vdGlmaWNhdGlvbnMgKi8KQEAgLTMyNSw5ICszMTIsMTEgQEAKIAkvKgogCSAqIHNldCA+IDAgaWYgcGFnZXMgdW5kZXIgdGhpcyBjZ3JvdXAgYXJlIG1vdmluZyB0byBvdGhlciBjZ3JvdXAuCiAJICovCi0JYXRvbWljX3QJbW92aW5nX2FjY291bnQ7CisJYXRvbWljX3QJCW1vdmluZ19hY2NvdW50OwogCS8qIHRha2VuIG9ubHkgd2hpbGUgbW92aW5nX2FjY291bnQgPiAwICovCi0Jc3BpbmxvY2tfdAltb3ZlX2xvY2s7CisJc3BpbmxvY2tfdAkJbW92ZV9sb2NrOworCXN0cnVjdCB0YXNrX3N0cnVjdAkqbW92ZV9sb2NrX3Rhc2s7CisJdW5zaWduZWQgbG9uZwkJbW92ZV9sb2NrX2ZsYWdzOwogCS8qCiAJICogcGVyY3B1IGNvdW50ZXIuCiAJICovCkBAIC0zNDMsOSArMzMyLDYgQEAKIAlzdHJ1Y3QgY2dfcHJvdG8gdGNwX21lbTsKICNlbmRpZgogI2lmIGRlZmluZWQoQ09ORklHX01FTUNHX0tNRU0pCi0JLyogYW5hbG9nb3VzIHRvIHNsYWJfY29tbW9uJ3Mgc2xhYl9jYWNoZXMgbGlzdCwgYnV0IHBlci1tZW1jZzsKLQkgKiBwcm90ZWN0ZWQgYnkgbWVtY2dfc2xhYl9tdXRleCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbWVtY2dfc2xhYl9jYWNoZXM7CiAgICAgICAgIC8qIEluZGV4IGluIHRoZSBrbWVtX2NhY2hlLT5tZW1jZ19wYXJhbXMtPm1lbWNnX2NhY2hlcyBhcnJheSAqLwogCWludCBrbWVtY2dfaWQ7CiAjZW5kaWYKQEAgLTM3NCwyMSArMzYwLDE4IEBACiAKIC8qIFN0dWZmcyBmb3IgbW92ZSBjaGFyZ2VzIGF0IHRhc2sgbWlncmF0aW9uLiAqLwogLyoKLSAqIFR5cGVzIG9mIGNoYXJnZXMgdG8gYmUgbW92ZWQuICJtb3ZlX2NoYXJnZV9hdF9pbW1pdGdyYXRlIiBhbmQKLSAqICJpbW1pZ3JhdGVfZmxhZ3MiIGFyZSB0cmVhdGVkIGFzIGEgbGVmdC1zaGlmdGVkIGJpdG1hcCBvZiB0aGVzZSB0eXBlcy4KKyAqIFR5cGVzIG9mIGNoYXJnZXMgdG8gYmUgbW92ZWQuCiAgKi8KLWVudW0gbW92ZV90eXBlIHsKLQlNT1ZFX0NIQVJHRV9UWVBFX0FOT04sCS8qIHByaXZhdGUgYW5vbnltb3VzIHBhZ2UgYW5kIHN3YXAgb2YgaXQgKi8KLQlNT1ZFX0NIQVJHRV9UWVBFX0ZJTEUsCS8qIGZpbGUgcGFnZShpbmNsdWRpbmcgdG1wZnMpIGFuZCBzd2FwIG9mIGl0ICovCi0JTlJfTU9WRV9UWVBFLAotfTsKKyNkZWZpbmUgTU9WRV9BTk9OCTB4MVUKKyNkZWZpbmUgTU9WRV9GSUxFCTB4MlUKKyNkZWZpbmUgTU9WRV9NQVNLCShNT1ZFX0FOT04gfCBNT1ZFX0ZJTEUpCiAKIC8qICJtYyIgYW5kIGl0cyBtZW1iZXJzIGFyZSBwcm90ZWN0ZWQgYnkgY2dyb3VwX211dGV4ICovCiBzdGF0aWMgc3RydWN0IG1vdmVfY2hhcmdlX3N0cnVjdCB7CiAJc3BpbmxvY2tfdAkgIGxvY2s7IC8qIGZvciBmcm9tLCB0byAqLwogCXN0cnVjdCBtZW1fY2dyb3VwICpmcm9tOwogCXN0cnVjdCBtZW1fY2dyb3VwICp0bzsKLQl1bnNpZ25lZCBsb25nIGltbWlncmF0ZV9mbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgcHJlY2hhcmdlOwogCXVuc2lnbmVkIGxvbmcgbW92ZWRfY2hhcmdlOwogCXVuc2lnbmVkIGxvbmcgbW92ZWRfc3dhcDsKQEAgLTM5OSwxNiArMzgyLDYgQEAKIAkud2FpdHEgPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUihtYy53YWl0cSksCiB9OwogCi1zdGF0aWMgYm9vbCBtb3ZlX2Fub24odm9pZCkKLXsKLQlyZXR1cm4gdGVzdF9iaXQoTU9WRV9DSEFSR0VfVFlQRV9BTk9OLCAmbWMuaW1taWdyYXRlX2ZsYWdzKTsKLX0KLQotc3RhdGljIGJvb2wgbW92ZV9maWxlKHZvaWQpCi17Ci0JcmV0dXJuIHRlc3RfYml0KE1PVkVfQ0hBUkdFX1RZUEVfRklMRSwgJm1jLmltbWlncmF0ZV9mbGFncyk7Ci19Ci0KIC8qCiAgKiBNYXhpbXVtIGxvb3BzIGluIG1lbV9jZ3JvdXBfaGllcmFyY2hpY2FsX3JlY2xhaW0oKSwgdXNlZCBmb3Igc29mdAogICogbGltaXQgcmVjbGFpbSB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLCBpZiB0aGV5IGV2ZXIgb2NjdXIuCkBAIC0xMzY4LDYgKzEzNDEsMjAgQEAKIAlyZXR1cm4gaW5hY3RpdmUgKiBpbmFjdGl2ZV9yYXRpbyA8IGFjdGl2ZTsKIH0KIAorYm9vbCBtZW1fY2dyb3VwX2xydXZlY19vbmxpbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQoreworCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl96b25lICptejsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CisKKwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQorCQlyZXR1cm4gdHJ1ZTsKKworCW16ID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX3pvbmUsIGxydXZlYyk7CisJbWVtY2cgPSBtei0+bWVtY2c7CisKKwlyZXR1cm4gISEobWVtY2ctPmNzcy5mbGFncyAmIENTU19PTkxJTkUpOworfQorCiAjZGVmaW5lIG1lbV9jZ3JvdXBfZnJvbV9jb3VudGVyKGNvdW50ZXIsIG1lbWJlcikJXAogCWNvbnRhaW5lcl9vZihjb3VudGVyLCBzdHJ1Y3QgbWVtX2Nncm91cCwgbWVtYmVyKQogCkBAIC0xNDc3LDkgKzE0NjQsOSBAQAogCiAJcHJfaW5mbygiVGFzayBpbiAiKTsKIAlwcl9jb250X2Nncm91cF9wYXRoKHRhc2tfY2dyb3VwKHAsIG1lbW9yeV9jZ3JwX2lkKSk7Ci0JcHJfaW5mbygiIGtpbGxlZCBhcyBhIHJlc3VsdCBvZiBsaW1pdCBvZiAiKTsKKwlwcl9jb250KCIga2lsbGVkIGFzIGEgcmVzdWx0IG9mIGxpbWl0IG9mICIpOwogCXByX2NvbnRfY2dyb3VwX3BhdGgobWVtY2ctPmNzcy5jZ3JvdXApOwotCXByX2luZm8oIlxuIik7CisJcHJfY29udCgiXG4iKTsKIAogCXJjdV9yZWFkX3VubG9jaygpOwogCkBAIC0xNTYwLDcgKzE1NDcsNyBAQAogCSAqIHF1aWNrbHkgZXhpdCBhbmQgZnJlZSBpdHMgbWVtb3J5LgogCSAqLwogCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fCB0YXNrX3dpbGxfZnJlZV9tZW0oY3VycmVudCkpIHsKLQkJc2V0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpOworCQltYXJrX3Rza19vb21fdmljdGltKGN1cnJlbnQpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xOTM0LDcgKzE5MjEsNyBAQAogCWlmICghbWVtY2cpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmICghaGFuZGxlKQorCWlmICghaGFuZGxlIHx8IG9vbV9raWxsZXJfZGlzYWJsZWQpCiAJCWdvdG8gY2xlYW51cDsKIAogCW93YWl0Lm1lbWNnID0gbWVtY2c7CkBAIC0xOTgwLDM0ICsxOTY3LDMzIEBACiAvKioKICAqIG1lbV9jZ3JvdXBfYmVnaW5fcGFnZV9zdGF0IC0gYmVnaW4gYSBwYWdlIHN0YXRlIHN0YXRpc3RpY3MgdHJhbnNhY3Rpb24KICAqIEBwYWdlOiBwYWdlIHRoYXQgaXMgZ29pbmcgdG8gY2hhbmdlIGFjY291bnRlZCBzdGF0ZQotICogQGxvY2tlZDogJm1lbWNnLT5tb3ZlX2xvY2sgc2xvd3BhdGggd2FzIHRha2VuCi0gKiBAZmxhZ3M6IElSUS1zdGF0ZSBmbGFncyBmb3IgJm1lbWNnLT5tb3ZlX2xvY2sKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIG11c3QgbWFyayB0aGUgYmVnaW5uaW5nIG9mIGFuIGFjY291bnRlZCBwYWdlIHN0YXRlCiAgKiBjaGFuZ2UgdG8gcHJldmVudCBkb3VibGUgYWNjb3VudGluZyB3aGVuIHRoZSBwYWdlIGlzIGNvbmN1cnJlbnRseQogICogYmVpbmcgbW92ZWQgdG8gYW5vdGhlciBtZW1jZzoKICAqCi0gKiAgIG1lbWNnID0gbWVtX2Nncm91cF9iZWdpbl9wYWdlX3N0YXQocGFnZSwgJmxvY2tlZCwgJmZsYWdzKTsKKyAqICAgbWVtY2cgPSBtZW1fY2dyb3VwX2JlZ2luX3BhZ2Vfc3RhdChwYWdlKTsKICAqICAgaWYgKFRlc3RDbGVhclBhZ2VTdGF0ZShwYWdlKSkKICAqICAgICBtZW1fY2dyb3VwX3VwZGF0ZV9wYWdlX3N0YXQobWVtY2csIHN0YXRlLCAtMSk7Ci0gKiAgIG1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChtZW1jZywgbG9ja2VkLCBmbGFncyk7Ci0gKgotICogVGhlIFJDVSBsb2NrIGlzIGhlbGQgdGhyb3VnaG91dCB0aGUgdHJhbnNhY3Rpb24uICBUaGUgZmFzdCBwYXRoIGNhbgotICogZ2V0IGF3YXkgd2l0aG91dCBhY3F1aXJpbmcgdGhlIG1lbWNnLT5tb3ZlX2xvY2sgKEBsb2NrZWQgaXMgZmFsc2UpCi0gKiBiZWNhdXNlIHBhZ2UgbW92aW5nIHN0YXJ0cyB3aXRoIGFuIFJDVSBncmFjZSBwZXJpb2QuCi0gKgotICogVGhlIFJDVSBsb2NrIGFsc28gcHJvdGVjdHMgdGhlIG1lbWNnIGZyb20gYmVpbmcgZnJlZWQgd2hlbiB0aGUgcGFnZQotICogc3RhdGUgdGhhdCBpcyBnb2luZyB0byBjaGFuZ2UgaXMgdGhlIG9ubHkgdGhpbmcgcHJldmVudGluZyB0aGUgcGFnZQotICogZnJvbSBiZWluZyB1bmNoYXJnZWQuICBFLmcuIGVuZC13cml0ZWJhY2sgY2xlYXJpbmcgUGFnZVdyaXRlYmFjaygpLAotICogd2hpY2ggYWxsb3dzIG1pZ3JhdGlvbiB0byBnbyBhaGVhZCBhbmQgdW5jaGFyZ2UgdGhlIHBhZ2UgYmVmb3JlIHRoZQotICogYWNjb3VudCB0cmFuc2FjdGlvbiBtaWdodCBiZSBjb21wbGV0ZS4KKyAqICAgbWVtX2Nncm91cF9lbmRfcGFnZV9zdGF0KG1lbWNnKTsKICAqLwotc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYmVnaW5fcGFnZV9zdGF0KHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCQkgICAgICBib29sICpsb2NrZWQsCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQorc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYmVnaW5fcGFnZV9zdGF0KHN0cnVjdCBwYWdlICpwYWdlKQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJLyoKKwkgKiBUaGUgUkNVIGxvY2sgaXMgaGVsZCB0aHJvdWdob3V0IHRoZSB0cmFuc2FjdGlvbi4gIFRoZSBmYXN0CisJICogcGF0aCBjYW4gZ2V0IGF3YXkgd2l0aG91dCBhY3F1aXJpbmcgdGhlIG1lbWNnLT5tb3ZlX2xvY2sKKwkgKiBiZWNhdXNlIHBhZ2UgbW92aW5nIHN0YXJ0cyB3aXRoIGFuIFJDVSBncmFjZSBwZXJpb2QuCisJICoKKwkgKiBUaGUgUkNVIGxvY2sgYWxzbyBwcm90ZWN0cyB0aGUgbWVtY2cgZnJvbSBiZWluZyBmcmVlZCB3aGVuCisJICogdGhlIHBhZ2Ugc3RhdGUgdGhhdCBpcyBnb2luZyB0byBjaGFuZ2UgaXMgdGhlIG9ubHkgdGhpbmcKKwkgKiBwcmV2ZW50aW5nIHRoZSBwYWdlIGZyb20gYmVpbmcgdW5jaGFyZ2VkLgorCSAqIEUuZy4gZW5kLXdyaXRlYmFjayBjbGVhcmluZyBQYWdlV3JpdGViYWNrKCksIHdoaWNoIGFsbG93cworCSAqIG1pZ3JhdGlvbiB0byBnbyBhaGVhZCBhbmQgdW5jaGFyZ2UgdGhlIHBhZ2UgYmVmb3JlIHRoZQorCSAqIGFjY291bnQgdHJhbnNhY3Rpb24gbWlnaHQgYmUgY29tcGxldGUuCisJICovCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJaWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSkKQEAgLTIwMTcsMTYgKzIwMDMsMjIgQEAKIAlpZiAodW5saWtlbHkoIW1lbWNnKSkKIAkJcmV0dXJuIE5VTEw7CiAKLQkqbG9ja2VkID0gZmFsc2U7CiAJaWYgKGF0b21pY19yZWFkKCZtZW1jZy0+bW92aW5nX2FjY291bnQpIDw9IDApCiAJCXJldHVybiBtZW1jZzsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtZW1jZy0+bW92ZV9sb2NrLCAqZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZtZW1jZy0+bW92ZV9sb2NrLCBmbGFncyk7CiAJaWYgKG1lbWNnICE9IHBhZ2UtPm1lbV9jZ3JvdXApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWVtY2ctPm1vdmVfbG9jaywgKmZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWVtY2ctPm1vdmVfbG9jaywgZmxhZ3MpOwogCQlnb3RvIGFnYWluOwogCX0KLQkqbG9ja2VkID0gdHJ1ZTsKKworCS8qCisJICogV2hlbiBjaGFyZ2UgbWlncmF0aW9uIGZpcnN0IGJlZ2lucywgd2UgY2FuIGhhdmUgbG9ja2VkIGFuZAorCSAqIHVubG9ja2VkIHBhZ2Ugc3RhdCB1cGRhdGVzIGhhcHBlbmluZyBjb25jdXJyZW50bHkuICBUcmFjaworCSAqIHRoZSB0YXNrIHdobyBoYXMgdGhlIGxvY2sgZm9yIG1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdCgpLgorCSAqLworCW1lbWNnLT5tb3ZlX2xvY2tfdGFzayA9IGN1cnJlbnQ7CisJbWVtY2ctPm1vdmVfbG9ja19mbGFncyA9IGZsYWdzOwogCiAJcmV0dXJuIG1lbWNnOwogfQpAQCAtMjAzNCwxNCArMjAyNiwxNyBAQAogLyoqCiAgKiBtZW1fY2dyb3VwX2VuZF9wYWdlX3N0YXQgLSBmaW5pc2ggYSBwYWdlIHN0YXRlIHN0YXRpc3RpY3MgdHJhbnNhY3Rpb24KICAqIEBtZW1jZzogdGhlIG1lbWNnIHRoYXQgd2FzIGFjY291bnRlZCBhZ2FpbnN0Ci0gKiBAbG9ja2VkOiB2YWx1ZSByZWNlaXZlZCBmcm9tIG1lbV9jZ3JvdXBfYmVnaW5fcGFnZV9zdGF0KCkKLSAqIEBmbGFnczogdmFsdWUgcmVjZWl2ZWQgZnJvbSBtZW1fY2dyb3VwX2JlZ2luX3BhZ2Vfc3RhdCgpCiAgKi8KLXZvaWQgbWVtX2Nncm91cF9lbmRfcGFnZV9zdGF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqbG9ja2VkLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit2b2lkIG1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7Ci0JaWYgKG1lbWNnICYmICpsb2NrZWQpCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1lbWNnLT5tb3ZlX2xvY2ssICpmbGFncyk7CisJaWYgKG1lbWNnICYmIG1lbWNnLT5tb3ZlX2xvY2tfdGFzayA9PSBjdXJyZW50KSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBtZW1jZy0+bW92ZV9sb2NrX2ZsYWdzOworCisJCW1lbWNnLT5tb3ZlX2xvY2tfdGFzayA9IE5VTEw7CisJCW1lbWNnLT5tb3ZlX2xvY2tfZmxhZ3MgPSAwOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1lbWNnLT5tb3ZlX2xvY2ssIGZsYWdzKTsKKwl9CiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTIxMzQsMTcgKzIxMjksNiBAQAogCWNsZWFyX2JpdChGTFVTSElOR19DQUNIRURfQ0hBUkdFLCAmc3RvY2stPmZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IG1lbWNnX3N0b2NrX2luaXQodm9pZCkKLXsKLQlpbnQgY3B1OwotCi0JZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgbWVtY2dfc3RvY2tfcGNwICpzdG9jayA9Ci0JCQkJCSZwZXJfY3B1KG1lbWNnX3N0b2NrLCBjcHUpOwotCQlJTklUX1dPUksoJnN0b2NrLT53b3JrLCBkcmFpbl9sb2NhbF9zdG9jayk7Ci0JfQotfQotCiAvKgogICogQ2FjaGUgY2hhcmdlcyh2YWwpIHRvIGxvY2FsIHBlcl9jcHUgYXJlYS4KICAqIFRoaXMgd2lsbCBiZSBjb25zdW1lZCBieSBjb25zdW1lX3N0b2NrKCkgZnVuY3Rpb24sIGxhdGVyLgpAQCAtMjI5NCw2ICsyMjc4LDggQEAKIAlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX1dBSVQpKQogCQlnb3RvIG5vbWVtOwogCisJbWVtX2Nncm91cF9ldmVudHMobWVtX292ZXJfbGltaXQsIE1FTUNHX01BWCwgMSk7CisKIAlucl9yZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbV9vdmVyX2xpbWl0LCBucl9wYWdlcywKIAkJCQkJCSAgICBnZnBfbWFzaywgbWF5X3N3YXApOwogCkBAIC0yMzM1LDYgKzIzMjEsOCBAQAogCWlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJZ290byBieXBhc3M7CiAKKwltZW1fY2dyb3VwX2V2ZW50cyhtZW1fb3Zlcl9saW1pdCwgTUVNQ0dfT09NLCAxKTsKKwogCW1lbV9jZ3JvdXBfb29tKG1lbV9vdmVyX2xpbWl0LCBnZnBfbWFzaywgZ2V0X29yZGVyKG5yX3BhZ2VzKSk7CiBub21lbToKIAlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX05PRkFJTCkpCkBAIC0yMzQ2LDYgKzIzMzQsMTYgQEAKIAljc3NfZ2V0X21hbnkoJm1lbWNnLT5jc3MsIGJhdGNoKTsKIAlpZiAoYmF0Y2ggPiBucl9wYWdlcykKIAkJcmVmaWxsX3N0b2NrKG1lbWNnLCBiYXRjaCAtIG5yX3BhZ2VzKTsKKwkvKgorCSAqIElmIHRoZSBoaWVyYXJjaHkgaXMgYWJvdmUgdGhlIG5vcm1hbCBjb25zdW1wdGlvbiByYW5nZSwKKwkgKiBtYWtlIHRoZSBjaGFyZ2luZyB0YXNrIHRyaW0gdGhlaXIgZXhjZXNzIGNvbnRyaWJ1dGlvbi4KKwkgKi8KKwlkbyB7CisJCWlmIChwYWdlX2NvdW50ZXJfcmVhZCgmbWVtY2ctPm1lbW9yeSkgPD0gbWVtY2ctPmhpZ2gpCisJCQljb250aW51ZTsKKwkJbWVtX2Nncm91cF9ldmVudHMobWVtY2csIE1FTUNHX0hJR0gsIDEpOworCQl0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLCBucl9wYWdlcywgZ2ZwX21hc2ssIHRydWUpOworCX0gd2hpbGUgKChtZW1jZyA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKSkpOwogZG9uZToKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjQ3NiwyNyArMjQ3NCw4IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTUVNQ0dfS01FTQotLyoKLSAqIFRoZSBtZW1jZ19zbGFiX211dGV4IGlzIGhlbGQgd2hlbmV2ZXIgYSBwZXIgbWVtY2cga21lbSBjYWNoZSBpcyBjcmVhdGVkIG9yCi0gKiBkZXN0cm95ZWQuIEl0IHByb3RlY3RzIG1lbWNnX2NhY2hlcyBhcnJheXMgYW5kIG1lbWNnX3NsYWJfY2FjaGVzIGxpc3RzLgotICovCi1zdGF0aWMgREVGSU5FX01VVEVYKG1lbWNnX3NsYWJfbXV0ZXgpOwotCi0vKgotICogVGhpcyBpcyBhIGJpdCBjdW1iZXJzb21lLCBidXQgaXQgaXMgcmFyZWx5IHVzZWQgYW5kIGF2b2lkcyBhIGJhY2twb2ludGVyCi0gKiBpbiB0aGUgbWVtY2dfY2FjaGVfcGFyYW1zIHN0cnVjdC4KLSAqLwotc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptZW1jZ19wYXJhbXNfdG9fY2FjaGUoc3RydWN0IG1lbWNnX2NhY2hlX3BhcmFtcyAqcCkKLXsKLQlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOwotCi0JVk1fQlVHX09OKHAtPmlzX3Jvb3RfY2FjaGUpOwotCWNhY2hlcCA9IHAtPnJvb3RfY2FjaGU7Ci0JcmV0dXJuIGNhY2hlX2Zyb21fbWVtY2dfaWR4KGNhY2hlcCwgbWVtY2dfY2FjaGVfaWQocC0+bWVtY2cpKTsKLX0KLQotc3RhdGljIGludCBtZW1jZ19jaGFyZ2Vfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcCwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKK2ludCBtZW1jZ19jaGFyZ2Vfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGdmcF90IGdmcCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKIHsKIAlzdHJ1Y3QgcGFnZV9jb3VudGVyICpjb3VudGVyOwogCWludCByZXQgPSAwOwpAQCAtMjUzMyw4ICsyNTEyLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBtZW1jZ191bmNoYXJnZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzKQordm9pZCBtZW1jZ191bmNoYXJnZV9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyBucl9wYWdlcykKIHsKIAlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5tZW1vcnksIG5yX3BhZ2VzKTsKIAlpZiAoZG9fc3dhcF9hY2NvdW50KQpAQCAtMjU3OSwxMCArMjU1Nyw3IEBACiAJZWxzZSBpZiAoc2l6ZSA+IE1FTUNHX0NBQ0hFU19NQVhfU0laRSkKIAkJc2l6ZSA9IE1FTUNHX0NBQ0hFU19NQVhfU0laRTsKIAotCW11dGV4X2xvY2soJm1lbWNnX3NsYWJfbXV0ZXgpOwogCWVyciA9IG1lbWNnX3VwZGF0ZV9hbGxfY2FjaGVzKHNpemUpOwotCW11dGV4X3VubG9jaygmbWVtY2dfc2xhYl9tdXRleCk7Ci0KIAlpZiAoZXJyKSB7CiAJCWlkYV9zaW1wbGVfcmVtb3ZlKCZrbWVtX2xpbWl0ZWRfZ3JvdXBzLCBpZCk7CiAJCXJldHVybiBlcnI7CkBAIC0yNjA1LDEyMyArMjU4MCwyMCBAQAogCW1lbWNnX2xpbWl0ZWRfZ3JvdXBzX2FycmF5X3NpemUgPSBudW07CiB9CiAKLXN0YXRpYyB2b2lkIG1lbWNnX3JlZ2lzdGVyX2NhY2hlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkgc3RydWN0IGttZW1fY2FjaGUgKnJvb3RfY2FjaGUpCi17Ci0Jc3RhdGljIGNoYXIgbWVtY2dfbmFtZV9idWZbTkFNRV9NQVggKyAxXTsgLyogcHJvdGVjdGVkIGJ5Ci0JCQkJCQkgICAgIG1lbWNnX3NsYWJfbXV0ZXggKi8KLQlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOwotCWludCBpZDsKLQotCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJm1lbWNnX3NsYWJfbXV0ZXgpOwotCi0JaWQgPSBtZW1jZ19jYWNoZV9pZChtZW1jZyk7Ci0KLQkvKgotCSAqIFNpbmNlIHBlci1tZW1jZyBjYWNoZXMgYXJlIGNyZWF0ZWQgYXN5bmNocm9ub3VzbHkgb24gZmlyc3QKLQkgKiBhbGxvY2F0aW9uIChzZWUgbWVtY2dfa21lbV9nZXRfY2FjaGUoKSksIHNldmVyYWwgdGhyZWFkcyBjYW4gdHJ5IHRvCi0JICogY3JlYXRlIHRoZSBzYW1lIGNhY2hlLCBidXQgb25seSBvbmUgb2YgdGhlbSBtYXkgc3VjY2VlZC4KLQkgKi8KLQlpZiAoY2FjaGVfZnJvbV9tZW1jZ19pZHgocm9vdF9jYWNoZSwgaWQpKQotCQlyZXR1cm47Ci0KLQljZ3JvdXBfbmFtZShtZW1jZy0+Y3NzLmNncm91cCwgbWVtY2dfbmFtZV9idWYsIE5BTUVfTUFYICsgMSk7Ci0JY2FjaGVwID0gbWVtY2dfY3JlYXRlX2ttZW1fY2FjaGUobWVtY2csIHJvb3RfY2FjaGUsIG1lbWNnX25hbWVfYnVmKTsKLQkvKgotCSAqIElmIHdlIGNvdWxkIG5vdCBjcmVhdGUgYSBtZW1jZyBjYWNoZSwgZG8gbm90IGNvbXBsYWluLCBiZWNhdXNlCi0JICogdGhhdCdzIG5vdCBjcml0aWNhbCBhdCBhbGwgYXMgd2UgY2FuIGFsd2F5cyBwcm9jZWVkIHdpdGggdGhlIHJvb3QKLQkgKiBjYWNoZS4KLQkgKi8KLQlpZiAoIWNhY2hlcCkKLQkJcmV0dXJuOwotCi0JbGlzdF9hZGQoJmNhY2hlcC0+bWVtY2dfcGFyYW1zLT5saXN0LCAmbWVtY2ctPm1lbWNnX3NsYWJfY2FjaGVzKTsKLQotCS8qCi0JICogU2luY2UgcmVhZGVycyB3b24ndCBsb2NrIChzZWUgY2FjaGVfZnJvbV9tZW1jZ19pZHgoKSksIHdlIG5lZWQgYQotCSAqIGJhcnJpZXIgaGVyZSB0byBlbnN1cmUgbm9ib2R5IHdpbGwgc2VlIHRoZSBrbWVtX2NhY2hlIHBhcnRpYWxseQotCSAqIGluaXRpYWxpemVkLgotCSAqLwotCXNtcF93bWIoKTsKLQotCUJVR19PTihyb290X2NhY2hlLT5tZW1jZ19wYXJhbXMtPm1lbWNnX2NhY2hlc1tpZF0pOwotCXJvb3RfY2FjaGUtPm1lbWNnX3BhcmFtcy0+bWVtY2dfY2FjaGVzW2lkXSA9IGNhY2hlcDsKLX0KLQotc3RhdGljIHZvaWQgbWVtY2dfdW5yZWdpc3Rlcl9jYWNoZShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKQotewotCXN0cnVjdCBrbWVtX2NhY2hlICpyb290X2NhY2hlOwotCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKLQlpbnQgaWQ7Ci0KLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZtZW1jZ19zbGFiX211dGV4KTsKLQotCUJVR19PTihpc19yb290X2NhY2hlKGNhY2hlcCkpOwotCi0Jcm9vdF9jYWNoZSA9IGNhY2hlcC0+bWVtY2dfcGFyYW1zLT5yb290X2NhY2hlOwotCW1lbWNnID0gY2FjaGVwLT5tZW1jZ19wYXJhbXMtPm1lbWNnOwotCWlkID0gbWVtY2dfY2FjaGVfaWQobWVtY2cpOwotCi0JQlVHX09OKHJvb3RfY2FjaGUtPm1lbWNnX3BhcmFtcy0+bWVtY2dfY2FjaGVzW2lkXSAhPSBjYWNoZXApOwotCXJvb3RfY2FjaGUtPm1lbWNnX3BhcmFtcy0+bWVtY2dfY2FjaGVzW2lkXSA9IE5VTEw7Ci0KLQlsaXN0X2RlbCgmY2FjaGVwLT5tZW1jZ19wYXJhbXMtPmxpc3QpOwotCi0Ja21lbV9jYWNoZV9kZXN0cm95KGNhY2hlcCk7Ci19Ci0KLWludCBfX21lbWNnX2NsZWFudXBfY2FjaGVfcGFyYW1zKHN0cnVjdCBrbWVtX2NhY2hlICpzKQotewotCXN0cnVjdCBrbWVtX2NhY2hlICpjOwotCWludCBpLCBmYWlsZWQgPSAwOwotCi0JbXV0ZXhfbG9jaygmbWVtY2dfc2xhYl9tdXRleCk7Ci0JZm9yX2VhY2hfbWVtY2dfY2FjaGVfaW5kZXgoaSkgewotCQljID0gY2FjaGVfZnJvbV9tZW1jZ19pZHgocywgaSk7Ci0JCWlmICghYykKLQkJCWNvbnRpbnVlOwotCi0JCW1lbWNnX3VucmVnaXN0ZXJfY2FjaGUoYyk7Ci0KLQkJaWYgKGNhY2hlX2Zyb21fbWVtY2dfaWR4KHMsIGkpKQotCQkJZmFpbGVkKys7Ci0JfQotCW11dGV4X3VubG9jaygmbWVtY2dfc2xhYl9tdXRleCk7Ci0JcmV0dXJuIGZhaWxlZDsKLX0KLQotc3RhdGljIHZvaWQgbWVtY2dfdW5yZWdpc3Rlcl9hbGxfY2FjaGVzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKLXsKLQlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOwotCXN0cnVjdCBtZW1jZ19jYWNoZV9wYXJhbXMgKnBhcmFtcywgKnRtcDsKLQotCWlmICghbWVtY2dfa21lbV9pc19hY3RpdmUobWVtY2cpKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZtZW1jZ19zbGFiX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocGFyYW1zLCB0bXAsICZtZW1jZy0+bWVtY2dfc2xhYl9jYWNoZXMsIGxpc3QpIHsKLQkJY2FjaGVwID0gbWVtY2dfcGFyYW1zX3RvX2NhY2hlKHBhcmFtcyk7Ci0JCW1lbWNnX3VucmVnaXN0ZXJfY2FjaGUoY2FjaGVwKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZtZW1jZ19zbGFiX211dGV4KTsKLX0KLQotc3RydWN0IG1lbWNnX3JlZ2lzdGVyX2NhY2hlX3dvcmsgeworc3RydWN0IG1lbWNnX2ttZW1fY2FjaGVfY3JlYXRlX3dvcmsgewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogfTsKIAotc3RhdGljIHZvaWQgbWVtY2dfcmVnaXN0ZXJfY2FjaGVfZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKncpCitzdGF0aWMgdm9pZCBtZW1jZ19rbWVtX2NhY2hlX2NyZWF0ZV9mdW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykKIHsKLQlzdHJ1Y3QgbWVtY2dfcmVnaXN0ZXJfY2FjaGVfd29yayAqY3cgPQotCQljb250YWluZXJfb2Yodywgc3RydWN0IG1lbWNnX3JlZ2lzdGVyX2NhY2hlX3dvcmssIHdvcmspOworCXN0cnVjdCBtZW1jZ19rbWVtX2NhY2hlX2NyZWF0ZV93b3JrICpjdyA9CisJCWNvbnRhaW5lcl9vZih3LCBzdHJ1Y3QgbWVtY2dfa21lbV9jYWNoZV9jcmVhdGVfd29yaywgd29yayk7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gY3ctPm1lbWNnOwogCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAgPSBjdy0+Y2FjaGVwOwogCi0JbXV0ZXhfbG9jaygmbWVtY2dfc2xhYl9tdXRleCk7Ci0JbWVtY2dfcmVnaXN0ZXJfY2FjaGUobWVtY2csIGNhY2hlcCk7Ci0JbXV0ZXhfdW5sb2NrKCZtZW1jZ19zbGFiX211dGV4KTsKKwltZW1jZ19jcmVhdGVfa21lbV9jYWNoZShtZW1jZywgY2FjaGVwKTsKIAogCWNzc19wdXQoJm1lbWNnLT5jc3MpOwogCWtmcmVlKGN3KTsKQEAgLTI3MzAsMTAgKzI2MDIsMTAgQEAKIC8qCiAgKiBFbnF1ZXVlIHRoZSBjcmVhdGlvbiBvZiBhIHBlci1tZW1jZyBrbWVtX2NhY2hlLgogICovCi1zdGF0aWMgdm9pZCBfX21lbWNnX3NjaGVkdWxlX3JlZ2lzdGVyX2NhY2hlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkJICAgIHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApCitzdGF0aWMgdm9pZCBfX21lbWNnX3NjaGVkdWxlX2ttZW1fY2FjaGVfY3JlYXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKKwkJCQkJICAgICAgIHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApCiB7Ci0Jc3RydWN0IG1lbWNnX3JlZ2lzdGVyX2NhY2hlX3dvcmsgKmN3OworCXN0cnVjdCBtZW1jZ19rbWVtX2NhY2hlX2NyZWF0ZV93b3JrICpjdzsKIAogCWN3ID0ga21hbGxvYyhzaXplb2YoKmN3KSwgR0ZQX05PV0FJVCk7CiAJaWYgKCFjdykKQEAgLTI3NDMsMTggKzI2MTUsMTggQEAKIAogCWN3LT5tZW1jZyA9IG1lbWNnOwogCWN3LT5jYWNoZXAgPSBjYWNoZXA7CisJSU5JVF9XT1JLKCZjdy0+d29yaywgbWVtY2dfa21lbV9jYWNoZV9jcmVhdGVfZnVuYyk7CiAKLQlJTklUX1dPUksoJmN3LT53b3JrLCBtZW1jZ19yZWdpc3Rlcl9jYWNoZV9mdW5jKTsKIAlzY2hlZHVsZV93b3JrKCZjdy0+d29yayk7CiB9CiAKLXN0YXRpYyB2b2lkIG1lbWNnX3NjaGVkdWxlX3JlZ2lzdGVyX2NhY2hlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkJICBzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKQorc3RhdGljIHZvaWQgbWVtY2dfc2NoZWR1bGVfa21lbV9jYWNoZV9jcmVhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAorCQkJCQkgICAgIHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApCiB7CiAJLyoKIAkgKiBXZSBuZWVkIHRvIHN0b3AgYWNjb3VudGluZyB3aGVuIHdlIGttYWxsb2MsIGJlY2F1c2UgaWYgdGhlCiAJICogY29ycmVzcG9uZGluZyBrbWFsbG9jIGNhY2hlIGlzIG5vdCB5ZXQgY3JlYXRlZCwgdGhlIGZpcnN0IGFsbG9jYXRpb24KLQkgKiBpbiBfX21lbWNnX3NjaGVkdWxlX3JlZ2lzdGVyX2NhY2hlIHdpbGwgcmVjdXJzZS4KKwkgKiBpbiBfX21lbWNnX3NjaGVkdWxlX2ttZW1fY2FjaGVfY3JlYXRlIHdpbGwgcmVjdXJzZS4KIAkgKgogCSAqIEhvd2V2ZXIsIGl0IGlzIGJldHRlciB0byBlbmNsb3NlIHRoZSB3aG9sZSBmdW5jdGlvbi4gRGVwZW5kaW5nIG9uCiAJICogdGhlIGRlYnVnZ2luZyBvcHRpb25zIGVuYWJsZWQsIElOSVRfV09SSygpLCBmb3IgaW5zdGFuY2UsIGNhbgpAQCAtMjc2MywyNCArMjYzNSwxMCBAQAogCSAqIHRoZSBzYWZlc3QgY2hvaWNlIGlzIHRvIGRvIGl0IGxpa2UgdGhpcywgd3JhcHBpbmcgdGhlIHdob2xlIGZ1bmN0aW9uLgogCSAqLwogCWN1cnJlbnQtPm1lbWNnX2ttZW1fc2tpcF9hY2NvdW50ID0gMTsKLQlfX21lbWNnX3NjaGVkdWxlX3JlZ2lzdGVyX2NhY2hlKG1lbWNnLCBjYWNoZXApOworCV9fbWVtY2dfc2NoZWR1bGVfa21lbV9jYWNoZV9jcmVhdGUobWVtY2csIGNhY2hlcCk7CiAJY3VycmVudC0+bWVtY2dfa21lbV9za2lwX2FjY291bnQgPSAwOwogfQogCi1pbnQgX19tZW1jZ19jaGFyZ2Vfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwLCBnZnBfdCBnZnAsIGludCBvcmRlcikKLXsKLQl1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSAxIDw8IG9yZGVyOwotCi0JcmV0dXJuIG1lbWNnX2NoYXJnZV9rbWVtKGNhY2hlcC0+bWVtY2dfcGFyYW1zLT5tZW1jZywgZ2ZwLCBucl9wYWdlcyk7Ci19Ci0KLXZvaWQgX19tZW1jZ191bmNoYXJnZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGludCBvcmRlcikKLXsKLQl1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSAxIDw8IG9yZGVyOwotCi0JbWVtY2dfdW5jaGFyZ2Vfa21lbShjYWNoZXAtPm1lbWNnX3BhcmFtcy0+bWVtY2csIG5yX3BhZ2VzKTsKLX0KLQogLyoKICAqIFJldHVybiB0aGUga21lbV9jYWNoZSB3ZSdyZSBzdXBwb3NlZCB0byB1c2UgZm9yIGEgc2xhYiBhbGxvY2F0aW9uLgogICogV2UgdHJ5IHRvIHVzZSB0aGUgY3VycmVudCBtZW1jZydzIHZlcnNpb24gb2YgdGhlIGNhY2hlLgpAQCAtMjgyNSw3ICsyNjgzLDcgQEAKIAkgKiBjb3VsZCBoYXBwZW4gd2l0aCB0aGUgc2xhYl9tdXRleCBoZWxkLiBTbyBpdCdzIGJldHRlciB0bwogCSAqIGRlZmVyIGV2ZXJ5dGhpbmcuCiAJICovCi0JbWVtY2dfc2NoZWR1bGVfcmVnaXN0ZXJfY2FjaGUobWVtY2csIGNhY2hlcCk7CisJbWVtY2dfc2NoZWR1bGVfa21lbV9jYWNoZV9jcmVhdGUobWVtY2csIGNhY2hlcCk7CiBvdXQ6CiAJY3NzX3B1dCgmbWVtY2ctPmNzcyk7CiAJcmV0dXJuIGNhY2hlcDsKQEAgLTM1MzMsNyArMzM5MSw3IEBACiAJaW50IHJldDsKIAogCWJ1ZiA9IHN0cnN0cmlwKGJ1Zik7Ci0JcmV0ID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGJ1ZiwgJm5yX3BhZ2VzKTsKKwlyZXQgPSBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoYnVmLCAiLTEiLCAmbnJfcGFnZXMpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTM2MDksNyArMzQ2Nyw3IEBACiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2Nzcyhjc3MpOwogCi0JaWYgKHZhbCA+PSAoMSA8PCBOUl9NT1ZFX1RZUEUpKQorCWlmICh2YWwgJiB+TU9WRV9NQVNLKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCkBAIC0zNjg3LDYgKzM1NDUsMTAgQEAKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWk7CiAJdW5zaWduZWQgaW50IGk7CiAKKwlCVUlMRF9CVUdfT04oQVJSQVlfU0laRShtZW1fY2dyb3VwX3N0YXRfbmFtZXMpICE9CisJCSAgICAgTUVNX0NHUk9VUF9TVEFUX05TVEFUUyk7CisJQlVJTERfQlVHX09OKEFSUkFZX1NJWkUobWVtX2Nncm91cF9ldmVudHNfbmFtZXMpICE9CisJCSAgICAgTUVNX0NHUk9VUF9FVkVOVFNfTlNUQVRTKTsKIAlCVUlMRF9CVUdfT04oQVJSQVlfU0laRShtZW1fY2dyb3VwX2xydV9uYW1lcykgIT0gTlJfTFJVX0xJU1RTKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNRU1fQ0dST1VQX1NUQVRfTlNUQVRTOyBpKyspIHsKQEAgLTM5MDEsNyArMzc2Myw3IEBACiAJdW5zaWduZWQgbG9uZyB1c2FnZTsKIAlpbnQgaSwgc2l6ZSwgcmV0OwogCi0JcmV0ID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGFyZ3MsICZ0aHJlc2hvbGQpOworCXJldCA9IHBhZ2VfY291bnRlcl9tZW1wYXJzZShhcmdzLCAiLTEiLCAmdGhyZXNob2xkKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC00MTU0LDcgKzQwMTYsNyBAQAogCiBzdGF0aWMgdm9pZCBtZW1jZ19kZXN0cm95X2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewotCW1lbWNnX3VucmVnaXN0ZXJfYWxsX2NhY2hlcyhtZW1jZyk7CisJbWVtY2dfZGVzdHJveV9rbWVtX2NhY2hlcyhtZW1jZyk7CiAJbWVtX2Nncm91cF9zb2NrZXRzX2Rlc3Ryb3kobWVtY2cpOwogfQogI2Vsc2UKQEAgLTQzOTEsNyArNDI1Myw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtX2Nncm91cF9maWxlc1tdID0geworc3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtX2Nncm91cF9sZWdhY3lfZmlsZXNbXSA9IHsKIAl7CiAJCS5uYW1lID0gInVzYWdlX2luX2J5dGVzIiwKIAkJLnByaXZhdGUgPSBNRU1GSUxFX1BSSVZBVEUoX01FTSwgUkVTX1VTQUdFKSwKQEAgLTQ1MDIsMzQgKzQzNjQsNiBAQAogCXsgfSwJLyogdGVybWluYXRlICovCiB9OwogCi0jaWZkZWYgQ09ORklHX01FTUNHX1NXQVAKLXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbXN3X2Nncm91cF9maWxlc1tdID0gewotCXsKLQkJLm5hbWUgPSAibWVtc3cudXNhZ2VfaW5fYnl0ZXMiLAotCQkucHJpdmF0ZSA9IE1FTUZJTEVfUFJJVkFURShfTUVNU1dBUCwgUkVTX1VTQUdFKSwKLQkJLnJlYWRfdTY0ID0gbWVtX2Nncm91cF9yZWFkX3U2NCwKLQl9LAotCXsKLQkJLm5hbWUgPSAibWVtc3cubWF4X3VzYWdlX2luX2J5dGVzIiwKLQkJLnByaXZhdGUgPSBNRU1GSUxFX1BSSVZBVEUoX01FTVNXQVAsIFJFU19NQVhfVVNBR0UpLAotCQkud3JpdGUgPSBtZW1fY2dyb3VwX3Jlc2V0LAotCQkucmVhZF91NjQgPSBtZW1fY2dyb3VwX3JlYWRfdTY0LAotCX0sCi0JewotCQkubmFtZSA9ICJtZW1zdy5saW1pdF9pbl9ieXRlcyIsCi0JCS5wcml2YXRlID0gTUVNRklMRV9QUklWQVRFKF9NRU1TV0FQLCBSRVNfTElNSVQpLAotCQkud3JpdGUgPSBtZW1fY2dyb3VwX3dyaXRlLAotCQkucmVhZF91NjQgPSBtZW1fY2dyb3VwX3JlYWRfdTY0LAotCX0sCi0JewotCQkubmFtZSA9ICJtZW1zdy5mYWlsY250IiwKLQkJLnByaXZhdGUgPSBNRU1GSUxFX1BSSVZBVEUoX01FTVNXQVAsIFJFU19GQUlMQ05UKSwKLQkJLndyaXRlID0gbWVtX2Nncm91cF9yZXNldCwKLQkJLnJlYWRfdTY0ID0gbWVtX2Nncm91cF9yZWFkX3U2NCwKLQl9LAotCXsgfSwJLyogdGVybWluYXRlICovCi19OwotI2VuZGlmCiBzdGF0aWMgaW50IGFsbG9jX21lbV9jZ3JvdXBfcGVyX3pvbmVfaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBub2RlKQogewogCXN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbjsKQEAgLTQ2MjUsMjkgKzQ0NTksNiBAQAogfQogRVhQT1JUX1NZTUJPTChwYXJlbnRfbWVtX2Nncm91cCk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBtZW1fY2dyb3VwX3NvZnRfbGltaXRfdHJlZV9pbml0KHZvaWQpCi17Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfdHJlZV9wZXJfbm9kZSAqcnRwbjsKLQlzdHJ1Y3QgbWVtX2Nncm91cF90cmVlX3Blcl96b25lICpydHB6OwotCWludCB0bXAsIG5vZGUsIHpvbmU7Ci0KLQlmb3JfZWFjaF9ub2RlKG5vZGUpIHsKLQkJdG1wID0gbm9kZTsKLQkJaWYgKCFub2RlX3N0YXRlKG5vZGUsIE5fTk9STUFMX01FTU9SWSkpCi0JCQl0bXAgPSAtMTsKLQkJcnRwbiA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKnJ0cG4pLCBHRlBfS0VSTkVMLCB0bXApOwotCQlCVUdfT04oIXJ0cG4pOwotCi0JCXNvZnRfbGltaXRfdHJlZS5yYl90cmVlX3Blcl9ub2RlW25vZGVdID0gcnRwbjsKLQotCQlmb3IgKHpvbmUgPSAwOyB6b25lIDwgTUFYX05SX1pPTkVTOyB6b25lKyspIHsKLQkJCXJ0cHogPSAmcnRwbi0+cmJfdHJlZV9wZXJfem9uZVt6b25lXTsKLQkJCXJ0cHotPnJiX3Jvb3QgPSBSQl9ST09UOwotCQkJc3Bpbl9sb2NrX2luaXQoJnJ0cHotPmxvY2spOwotCQl9Ci0JfQotfQotCiBzdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKiBfX3JlZgogbWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpCiB7CkBAIC00NjY3LDYgKzQ0NzgsNyBAQAogCWlmIChwYXJlbnRfY3NzID09IE5VTEwpIHsKIAkJcm9vdF9tZW1fY2dyb3VwID0gbWVtY2c7CiAJCXBhZ2VfY291bnRlcl9pbml0KCZtZW1jZy0+bWVtb3J5LCBOVUxMKTsKKwkJbWVtY2ctPmhpZ2ggPSBQQUdFX0NPVU5URVJfTUFYOwogCQltZW1jZy0+c29mdF9saW1pdCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJCXBhZ2VfY291bnRlcl9pbml0KCZtZW1jZy0+bWVtc3csIE5VTEwpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmbWVtY2ctPmttZW0sIE5VTEwpOwpAQCAtNDY4Miw3ICs0NDk0LDYgQEAKIAlzcGluX2xvY2tfaW5pdCgmbWVtY2ctPmV2ZW50X2xpc3RfbG9jayk7CiAjaWZkZWYgQ09ORklHX01FTUNHX0tNRU0KIAltZW1jZy0+a21lbWNnX2lkID0gLTE7Ci0JSU5JVF9MSVNUX0hFQUQoJm1lbWNnLT5tZW1jZ19zbGFiX2NhY2hlcyk7CiAjZW5kaWYKIAogCXJldHVybiAmbWVtY2ctPmNzczsKQEAgLTQ3MTMsNiArNDUyNCw3IEBACiAKIAlpZiAocGFyZW50LT51c2VfaGllcmFyY2h5KSB7CiAJCXBhZ2VfY291bnRlcl9pbml0KCZtZW1jZy0+bWVtb3J5LCAmcGFyZW50LT5tZW1vcnkpOworCQltZW1jZy0+aGlnaCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJCW1lbWNnLT5zb2Z0X2xpbWl0ID0gUEFHRV9DT1VOVEVSX01BWDsKIAkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5tZW1zdywgJnBhcmVudC0+bWVtc3cpOwogCQlwYWdlX2NvdW50ZXJfaW5pdCgmbWVtY2ctPmttZW0sICZwYXJlbnQtPmttZW0pOwpAQCAtNDcyMyw2ICs0NTM1LDcgQEAKIAkJICovCiAJfSBlbHNlIHsKIAkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5tZW1vcnksIE5VTEwpOworCQltZW1jZy0+aGlnaCA9IFBBR0VfQ09VTlRFUl9NQVg7CiAJCW1lbWNnLT5zb2Z0X2xpbWl0ID0gUEFHRV9DT1VOVEVSX01BWDsKIAkJcGFnZV9jb3VudGVyX2luaXQoJm1lbWNnLT5tZW1zdywgTlVMTCk7CiAJCXBhZ2VfY291bnRlcl9pbml0KCZtZW1jZy0+a21lbSwgTlVMTCk7CkBAIC00Nzk4LDYgKzQ2MTEsOCBAQAogCW1lbV9jZ3JvdXBfcmVzaXplX2xpbWl0KG1lbWNnLCBQQUdFX0NPVU5URVJfTUFYKTsKIAltZW1fY2dyb3VwX3Jlc2l6ZV9tZW1zd19saW1pdChtZW1jZywgUEFHRV9DT1VOVEVSX01BWCk7CiAJbWVtY2dfdXBkYXRlX2ttZW1fbGltaXQobWVtY2csIFBBR0VfQ09VTlRFUl9NQVgpOworCW1lbWNnLT5sb3cgPSAwOworCW1lbWNnLT5oaWdoID0gUEFHRV9DT1VOVEVSX01BWDsKIAltZW1jZy0+c29mdF9saW1pdCA9IFBBR0VfQ09VTlRFUl9NQVg7CiB9CiAKQEAgLTQ4NzQsMTIgKzQ2ODksMTIgQEAKIAlpZiAoIXBhZ2UgfHwgIXBhZ2VfbWFwcGVkKHBhZ2UpKQogCQlyZXR1cm4gTlVMTDsKIAlpZiAoUGFnZUFub24ocGFnZSkpIHsKLQkJLyogd2UgZG9uJ3QgbW92ZSBzaGFyZWQgYW5vbiAqLwotCQlpZiAoIW1vdmVfYW5vbigpKQorCQlpZiAoIShtYy5mbGFncyAmIE1PVkVfQU5PTikpCiAJCQlyZXR1cm4gTlVMTDsKLQl9IGVsc2UgaWYgKCFtb3ZlX2ZpbGUoKSkKLQkJLyogd2UgaWdub3JlIG1hcGNvdW50IGZvciBmaWxlIHBhZ2VzICovCi0JCXJldHVybiBOVUxMOworCX0gZWxzZSB7CisJCWlmICghKG1jLmZsYWdzICYgTU9WRV9GSUxFKSkKKwkJCXJldHVybiBOVUxMOworCX0KIAlpZiAoIWdldF9wYWdlX3VubGVzc196ZXJvKHBhZ2UpKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtNDg5Myw3ICs0NzA4LDcgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJc3dwX2VudHJ5X3QgZW50ID0gcHRlX3RvX3N3cF9lbnRyeShwdGVudCk7CiAKLQlpZiAoIW1vdmVfYW5vbigpIHx8IG5vbl9zd2FwX2VudHJ5KGVudCkpCisJaWYgKCEobWMuZmxhZ3MgJiBNT1ZFX0FOT04pIHx8IG5vbl9zd2FwX2VudHJ5KGVudCkpCiAJCXJldHVybiBOVUxMOwogCS8qCiAJICogQmVjYXVzZSBsb29rdXBfc3dhcF9jYWNoZSgpIHVwZGF0ZXMgc29tZSBzdGF0aXN0aWNzIGNvdW50ZXIsCkBAIC00OTIyLDE0ICs0NzM3LDExIEBACiAKIAlpZiAoIXZtYS0+dm1fZmlsZSkgLyogYW5vbnltb3VzIHZtYSAqLwogCQlyZXR1cm4gTlVMTDsKLQlpZiAoIW1vdmVfZmlsZSgpKQorCWlmICghKG1jLmZsYWdzICYgTU9WRV9GSUxFKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAltYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7Ci0JaWYgKHB0ZV9ub25lKHB0ZW50KSkKLQkJcGdvZmYgPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHIpOwotCWVsc2UgLyogcHRlX2ZpbGUocHRlbnQpIGlzIHRydWUgKi8KLQkJcGdvZmYgPSBwdGVfdG9fcGdvZmYocHRlbnQpOworCXBnb2ZmID0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyKTsKIAogCS8qIHBhZ2UgaXMgbW92ZWQgZXZlbiBpZiBpdCdzIG5vdCBSU1Mgb2YgdGhpcyB0YXNrKHBhZ2UtZmF1bHRlZCkuICovCiAjaWZkZWYgQ09ORklHX1NXQVAKQEAgLTQ5NjEsNyArNDc3Myw3IEBACiAJCXBhZ2UgPSBtY19oYW5kbGVfcHJlc2VudF9wdGUodm1hLCBhZGRyLCBwdGVudCk7CiAJZWxzZSBpZiAoaXNfc3dhcF9wdGUocHRlbnQpKQogCQlwYWdlID0gbWNfaGFuZGxlX3N3YXBfcHRlKHZtYSwgYWRkciwgcHRlbnQsICZlbnQpOwotCWVsc2UgaWYgKHB0ZV9ub25lKHB0ZW50KSB8fCBwdGVfZmlsZShwdGVudCkpCisJZWxzZSBpZiAocHRlX25vbmUocHRlbnQpKQogCQlwYWdlID0gbWNfaGFuZGxlX2ZpbGVfcHRlKHZtYSwgYWRkciwgcHRlbnQsICZlbnQpOwogCiAJaWYgKCFwYWdlICYmICFlbnQudmFsKQpAQCAtNTAwNCw3ICs0ODE2LDcgQEAKIAogCXBhZ2UgPSBwbWRfcGFnZShwbWQpOwogCVZNX0JVR19PTl9QQUdFKCFwYWdlIHx8ICFQYWdlSGVhZChwYWdlKSwgcGFnZSk7Ci0JaWYgKCFtb3ZlX2Fub24oKSkKKwlpZiAoIShtYy5mbGFncyAmIE1PVkVfQU5PTikpCiAJCXJldHVybiByZXQ7CiAJaWYgKHBhZ2UtPm1lbV9jZ3JvdXAgPT0gbWMuZnJvbSkgewogCQlyZXQgPSBNQ19UQVJHRVRfUEFHRTsKQEAgLTUwMjcsNyArNDgzOSw3IEBACiAJCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQkJCXN0cnVjdCBtbV93YWxrICp3YWxrKQogewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnZtYTsKIAlwdGVfdCAqcHRlOwogCXNwaW5sb2NrX3QgKnB0bDsKIApAQCAtNTA1MywyMCArNDg2NSwxMyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9jb3VudF9wcmVjaGFyZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7CiAJdW5zaWduZWQgbG9uZyBwcmVjaGFyZ2U7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKKwlzdHJ1Y3QgbW1fd2FsayBtZW1fY2dyb3VwX2NvdW50X3ByZWNoYXJnZV93YWxrID0geworCQkucG1kX2VudHJ5ID0gbWVtX2Nncm91cF9jb3VudF9wcmVjaGFyZ2VfcHRlX3JhbmdlLAorCQkubW0gPSBtbSwKKwl9OwogCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlmb3IgKHZtYSA9IG1tLT5tbWFwOyB2bWE7IHZtYSA9IHZtYS0+dm1fbmV4dCkgewotCQlzdHJ1Y3QgbW1fd2FsayBtZW1fY2dyb3VwX2NvdW50X3ByZWNoYXJnZV93YWxrID0gewotCQkJLnBtZF9lbnRyeSA9IG1lbV9jZ3JvdXBfY291bnRfcHJlY2hhcmdlX3B0ZV9yYW5nZSwKLQkJCS5tbSA9IG1tLAotCQkJLnByaXZhdGUgPSB2bWEsCi0JCX07Ci0JCWlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSkKLQkJCWNvbnRpbnVlOwotCQl3YWxrX3BhZ2VfcmFuZ2Uodm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsCi0JCQkJCSZtZW1fY2dyb3VwX2NvdW50X3ByZWNoYXJnZV93YWxrKTsKLQl9CisJd2Fsa19wYWdlX3JhbmdlKDAsIH4wVUwsICZtZW1fY2dyb3VwX2NvdW50X3ByZWNoYXJnZV93YWxrKTsKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCiAJcHJlY2hhcmdlID0gbWMucHJlY2hhcmdlOwpAQCAtNTE0NiwxNSArNDk1MSwxNSBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IGNncm91cF90YXNrc2V0X2ZpcnN0KHRzZXQpOwogCWludCByZXQgPSAwOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3MoY3NzKTsKLQl1bnNpZ25lZCBsb25nIG1vdmVfY2hhcmdlX2F0X2ltbWlncmF0ZTsKKwl1bnNpZ25lZCBsb25nIG1vdmVfZmxhZ3M7CiAKIAkvKgogCSAqIFdlIGFyZSBub3cgY29tbWl0ZWQgdG8gdGhpcyB2YWx1ZSB3aGF0ZXZlciBpdCBpcy4gQ2hhbmdlcyBpbiB0aGlzCiAJICogdHVuYWJsZSB3aWxsIG9ubHkgYWZmZWN0IHVwY29taW5nIG1pZ3JhdGlvbnMsIG5vdCB0aGUgY3VycmVudCBvbmUuCiAJICogU28gd2UgbmVlZCB0byBzYXZlIGl0LCBhbmQga2VlcCBpdCBnb2luZy4KIAkgKi8KLQltb3ZlX2NoYXJnZV9hdF9pbW1pZ3JhdGUgID0gbWVtY2ctPm1vdmVfY2hhcmdlX2F0X2ltbWlncmF0ZTsKLQlpZiAobW92ZV9jaGFyZ2VfYXRfaW1taWdyYXRlKSB7CisJbW92ZV9mbGFncyA9IEFDQ0VTU19PTkNFKG1lbWNnLT5tb3ZlX2NoYXJnZV9hdF9pbW1pZ3JhdGUpOworCWlmIChtb3ZlX2ZsYWdzKSB7CiAJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCQlzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbSA9IG1lbV9jZ3JvdXBfZnJvbV90YXNrKHApOwogCkBAIC01MTc0LDcgKzQ5NzksNyBAQAogCQkJc3Bpbl9sb2NrKCZtYy5sb2NrKTsKIAkJCW1jLmZyb20gPSBmcm9tOwogCQkJbWMudG8gPSBtZW1jZzsKLQkJCW1jLmltbWlncmF0ZV9mbGFncyA9IG1vdmVfY2hhcmdlX2F0X2ltbWlncmF0ZTsKKwkJCW1jLmZsYWdzID0gbW92ZV9mbGFnczsKIAkJCXNwaW5fdW5sb2NrKCZtYy5sb2NrKTsKIAkJCS8qIFdlIHNldCBtYy5tb3ZpbmdfdGFzayBsYXRlciAqLwogCkBAIC01MTk5LDcgKzUwMDQsNyBAQAogCQkJCXN0cnVjdCBtbV93YWxrICp3YWxrKQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay0+cHJpdmF0ZTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnZtYTsKIAlwdGVfdCAqcHRlOwogCXNwaW5sb2NrX3QgKnB0bDsKIAllbnVtIG1jX3RhcmdldF90eXBlIHRhcmdldF90eXBlOwpAQCAtNTI5NSw3ICs1MTAwLDEwIEBACiAKIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiB7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc3RydWN0IG1tX3dhbGsgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV93YWxrID0geworCQkucG1kX2VudHJ5ID0gbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9wdGVfcmFuZ2UsCisJCS5tbSA9IG1tLAorCX07CiAKIAlscnVfYWRkX2RyYWluX2FsbCgpOwogCS8qCkBAIC01MzE4LDI0ICs1MTI2LDExIEBACiAJCWNvbmRfcmVzY2hlZCgpOwogCQlnb3RvIHJldHJ5OwogCX0KLQlmb3IgKHZtYSA9IG1tLT5tbWFwOyB2bWE7IHZtYSA9IHZtYS0+dm1fbmV4dCkgewotCQlpbnQgcmV0OwotCQlzdHJ1Y3QgbW1fd2FsayBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3dhbGsgPSB7Ci0JCQkucG1kX2VudHJ5ID0gbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9wdGVfcmFuZ2UsCi0JCQkubW0gPSBtbSwKLQkJCS5wcml2YXRlID0gdm1hLAotCQl9OwotCQlpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpCi0JCQljb250aW51ZTsKLQkJcmV0ID0gd2Fsa19wYWdlX3JhbmdlKHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLAotCQkJCQkJJm1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2Vfd2Fsayk7Ci0JCWlmIChyZXQpCi0JCQkvKgotCQkJICogbWVhbnMgd2UgaGF2ZSBjb25zdW1lZCBhbGwgcHJlY2hhcmdlcyBhbmQgZmFpbGVkIGluCi0JCQkgKiBkb2luZyBhZGRpdGlvbmFsIGNoYXJnZS4gSnVzdCBhYmFuZG9uIGhlcmUuCi0JCQkgKi8KLQkJCWJyZWFrOwotCX0KKwkvKgorCSAqIFdoZW4gd2UgaGF2ZSBjb25zdW1lZCBhbGwgcHJlY2hhcmdlcyBhbmQgZmFpbGVkIGluIGRvaW5nCisJICogYWRkaXRpb25hbCBjaGFyZ2UsIHRoZSBwYWdlIHdhbGsganVzdCBhYm9ydHMuCisJICovCisJd2Fsa19wYWdlX3JhbmdlKDAsIH4wVUwsICZtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3dhbGspOwogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJYXRvbWljX2RlYygmbWMuZnJvbS0+bW92aW5nX2FjY291bnQpOwogfQpAQCAtNTM4Niw2ICs1MTgxLDE0NyBAQAogCQltZW1fY2dyb3VwX2Zyb21fY3NzKHJvb3RfY3NzKS0+dXNlX2hpZXJhcmNoeSA9IHRydWU7CiB9CiAKK3N0YXRpYyB1NjQgbWVtb3J5X2N1cnJlbnRfcmVhZChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLAorCQkJICAgICAgIHN0cnVjdCBjZnR5cGUgKmNmdCkKK3sKKwlyZXR1cm4gbWVtX2Nncm91cF91c2FnZShtZW1fY2dyb3VwX2Zyb21fY3NzKGNzcyksIGZhbHNlKTsKK30KKworc3RhdGljIGludCBtZW1vcnlfbG93X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Moc2VxX2NzcyhtKSk7CisJdW5zaWduZWQgbG9uZyBsb3cgPSBBQ0NFU1NfT05DRShtZW1jZy0+bG93KTsKKworCWlmIChsb3cgPT0gUEFHRV9DT1VOVEVSX01BWCkKKwkJc2VxX3B1dHMobSwgImluZmluaXR5XG4iKTsKKwllbHNlCisJCXNlcV9wcmludGYobSwgIiVsbHVcbiIsICh1NjQpbG93ICogUEFHRV9TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBtZW1vcnlfbG93X3dyaXRlKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwKKwkJCQljaGFyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCBvZmYpCit7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhvZl9jc3Mob2YpKTsKKwl1bnNpZ25lZCBsb25nIGxvdzsKKwlpbnQgZXJyOworCisJYnVmID0gc3Ryc3RyaXAoYnVmKTsKKwllcnIgPSBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoYnVmLCAiaW5maW5pdHkiLCAmbG93KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJbWVtY2ctPmxvdyA9IGxvdzsKKworCXJldHVybiBuYnl0ZXM7Cit9CisKK3N0YXRpYyBpbnQgbWVtb3J5X2hpZ2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKG0pKTsKKwl1bnNpZ25lZCBsb25nIGhpZ2ggPSBBQ0NFU1NfT05DRShtZW1jZy0+aGlnaCk7CisKKwlpZiAoaGlnaCA9PSBQQUdFX0NPVU5URVJfTUFYKQorCQlzZXFfcHV0cyhtLCAiaW5maW5pdHlcbiIpOworCWVsc2UKKwkJc2VxX3ByaW50ZihtLCAiJWxsdVxuIiwgKHU2NCloaWdoICogUEFHRV9TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBtZW1vcnlfaGlnaF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsCisJCQkJIGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90IG9mZikKK3sKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKG9mX2NzcyhvZikpOworCXVuc2lnbmVkIGxvbmcgaGlnaDsKKwlpbnQgZXJyOworCisJYnVmID0gc3Ryc3RyaXAoYnVmKTsKKwllcnIgPSBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoYnVmLCAiaW5maW5pdHkiLCAmaGlnaCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCW1lbWNnLT5oaWdoID0gaGlnaDsKKworCXJldHVybiBuYnl0ZXM7Cit9CisKK3N0YXRpYyBpbnQgbWVtb3J5X21heF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKHNlcV9jc3MobSkpOworCXVuc2lnbmVkIGxvbmcgbWF4ID0gQUNDRVNTX09OQ0UobWVtY2ctPm1lbW9yeS5saW1pdCk7CisKKwlpZiAobWF4ID09IFBBR0VfQ09VTlRFUl9NQVgpCisJCXNlcV9wdXRzKG0sICJpbmZpbml0eVxuIik7CisJZWxzZQorCQlzZXFfcHJpbnRmKG0sICIlbGx1XG4iLCAodTY0KW1heCAqIFBBR0VfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgbWVtb3J5X21heF93cml0ZShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsCisJCQkJY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3Qgb2ZmKQoreworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jc3Mob2ZfY3NzKG9mKSk7CisJdW5zaWduZWQgbG9uZyBtYXg7CisJaW50IGVycjsKKworCWJ1ZiA9IHN0cnN0cmlwKGJ1Zik7CisJZXJyID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGJ1ZiwgImluZmluaXR5IiwgJm1heCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IG1lbV9jZ3JvdXBfcmVzaXplX2xpbWl0KG1lbWNnLCBtYXgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gbmJ5dGVzOworfQorCitzdGF0aWMgaW50IG1lbW9yeV9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NzcyhzZXFfY3NzKG0pKTsKKworCXNlcV9wcmludGYobSwgImxvdyAlbHVcbiIsIG1lbV9jZ3JvdXBfcmVhZF9ldmVudHMobWVtY2csIE1FTUNHX0xPVykpOworCXNlcV9wcmludGYobSwgImhpZ2ggJWx1XG4iLCBtZW1fY2dyb3VwX3JlYWRfZXZlbnRzKG1lbWNnLCBNRU1DR19ISUdIKSk7CisJc2VxX3ByaW50ZihtLCAibWF4ICVsdVxuIiwgbWVtX2Nncm91cF9yZWFkX2V2ZW50cyhtZW1jZywgTUVNQ0dfTUFYKSk7CisJc2VxX3ByaW50ZihtLCAib29tICVsdVxuIiwgbWVtX2Nncm91cF9yZWFkX2V2ZW50cyhtZW1jZywgTUVNQ0dfT09NKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7CisJeworCQkubmFtZSA9ICJjdXJyZW50IiwKKwkJLnJlYWRfdTY0ID0gbWVtb3J5X2N1cnJlbnRfcmVhZCwKKwl9LAorCXsKKwkJLm5hbWUgPSAibG93IiwKKwkJLmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULAorCQkuc2VxX3Nob3cgPSBtZW1vcnlfbG93X3Nob3csCisJCS53cml0ZSA9IG1lbW9yeV9sb3dfd3JpdGUsCisJfSwKKwl7CisJCS5uYW1lID0gImhpZ2giLAorCQkuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsCisJCS5zZXFfc2hvdyA9IG1lbW9yeV9oaWdoX3Nob3csCisJCS53cml0ZSA9IG1lbW9yeV9oaWdoX3dyaXRlLAorCX0sCisJeworCQkubmFtZSA9ICJtYXgiLAorCQkuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsCisJCS5zZXFfc2hvdyA9IG1lbW9yeV9tYXhfc2hvdywKKwkJLndyaXRlID0gbWVtb3J5X21heF93cml0ZSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiZXZlbnRzIiwKKwkJLmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULAorCQkuc2VxX3Nob3cgPSBtZW1vcnlfZXZlbnRzX3Nob3csCisJfSwKKwl7IH0JLyogdGVybWluYXRlICovCit9OworCiBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7CiAJLmNzc19hbGxvYyA9IG1lbV9jZ3JvdXBfY3NzX2FsbG9jLAogCS5jc3Nfb25saW5lID0gbWVtX2Nncm91cF9jc3Nfb25saW5lLApAQCAtNTM5NiwxMDggKzUzMzIsNjAgQEAKIAkuY2FuY2VsX2F0dGFjaCA9IG1lbV9jZ3JvdXBfY2FuY2VsX2F0dGFjaCwKIAkuYXR0YWNoID0gbWVtX2Nncm91cF9tb3ZlX3Rhc2ssCiAJLmJpbmQgPSBtZW1fY2dyb3VwX2JpbmQsCi0JLmxlZ2FjeV9jZnR5cGVzID0gbWVtX2Nncm91cF9maWxlcywKKwkuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsCisJLmxlZ2FjeV9jZnR5cGVzID0gbWVtX2Nncm91cF9sZWdhY3lfZmlsZXMsCiAJLmVhcmx5X2luaXQgPSAwLAogfTsKIAotI2lmZGVmIENPTkZJR19NRU1DR19TV0FQCi1zdGF0aWMgaW50IF9faW5pdCBlbmFibGVfc3dhcF9hY2NvdW50KGNoYXIgKnMpCi17Ci0JaWYgKCFzdHJjbXAocywgIjEiKSkKLQkJcmVhbGx5X2RvX3N3YXBfYWNjb3VudCA9IDE7Ci0JZWxzZSBpZiAoIXN0cmNtcChzLCAiMCIpKQotCQlyZWFsbHlfZG9fc3dhcF9hY2NvdW50ID0gMDsKLQlyZXR1cm4gMTsKLX0KLV9fc2V0dXAoInN3YXBhY2NvdW50PSIsIGVuYWJsZV9zd2FwX2FjY291bnQpOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgbWVtc3dfZmlsZV9pbml0KHZvaWQpCi17Ci0JV0FSTl9PTihjZ3JvdXBfYWRkX2xlZ2FjeV9jZnR5cGVzKCZtZW1vcnlfY2dycF9zdWJzeXMsCi0JCQkJCSAgbWVtc3dfY2dyb3VwX2ZpbGVzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBlbmFibGVfc3dhcF9jZ3JvdXAodm9pZCkKLXsKLQlpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSAmJiByZWFsbHlfZG9fc3dhcF9hY2NvdW50KSB7Ci0JCWRvX3N3YXBfYWNjb3VudCA9IDE7Ci0JCW1lbXN3X2ZpbGVfaW5pdCgpOwotCX0KLX0KLQotI2Vsc2UKLXN0YXRpYyB2b2lkIF9faW5pdCBlbmFibGVfc3dhcF9jZ3JvdXAodm9pZCkKLXsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX01FTUNHX1NXQVAKIC8qKgotICogbWVtX2Nncm91cF9zd2Fwb3V0IC0gdHJhbnNmZXIgYSBtZW1zdyBjaGFyZ2UgdG8gc3dhcAotICogQHBhZ2U6IHBhZ2Ugd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyCi0gKiBAZW50cnk6IHN3YXAgZW50cnkgdG8gbW92ZSB0aGUgY2hhcmdlIHRvCi0gKgotICogVHJhbnNmZXIgdGhlIG1lbXN3IGNoYXJnZSBvZiBAcGFnZSB0byBAZW50cnkuCisgKiBtZW1fY2dyb3VwX2V2ZW50cyAtIGNvdW50IG1lbW9yeSBldmVudHMgYWdhaW5zdCBhIGNncm91cAorICogQG1lbWNnOiB0aGUgbWVtb3J5IGNncm91cAorICogQGlkeDogdGhlIGV2ZW50IGluZGV4CisgKiBAbnI6IHRoZSBudW1iZXIgb2YgZXZlbnRzIHRvIGFjY291bnQgZm9yCiAgKi8KLXZvaWQgbWVtX2Nncm91cF9zd2Fwb3V0KHN0cnVjdCBwYWdlICpwYWdlLCBzd3BfZW50cnlfdCBlbnRyeSkKK3ZvaWQgbWVtX2Nncm91cF9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAorCQkgICAgICAgZW51bSBtZW1fY2dyb3VwX2V2ZW50c19pbmRleCBpZHgsCisJCSAgICAgICB1bnNpZ25lZCBpbnQgbnIpCiB7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwotCXVuc2lnbmVkIHNob3J0IG9sZGlkOwotCi0JVk1fQlVHX09OX1BBR0UoUGFnZUxSVShwYWdlKSwgcGFnZSk7Ci0JVk1fQlVHX09OX1BBR0UocGFnZV9jb3VudChwYWdlKSwgcGFnZSk7Ci0KLQlpZiAoIWRvX3N3YXBfYWNjb3VudCkKLQkJcmV0dXJuOwotCi0JbWVtY2cgPSBwYWdlLT5tZW1fY2dyb3VwOwotCi0JLyogUmVhZGFoZWFkIHBhZ2UsIG5ldmVyIGNoYXJnZWQgKi8KLQlpZiAoIW1lbWNnKQotCQlyZXR1cm47Ci0KLQlvbGRpZCA9IHN3YXBfY2dyb3VwX3JlY29yZChlbnRyeSwgbWVtX2Nncm91cF9pZChtZW1jZykpOwotCVZNX0JVR19PTl9QQUdFKG9sZGlkLCBwYWdlKTsKLQltZW1fY2dyb3VwX3N3YXBfc3RhdGlzdGljcyhtZW1jZywgdHJ1ZSk7Ci0KLQlwYWdlLT5tZW1fY2dyb3VwID0gTlVMTDsKLQotCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkKLQkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+bWVtb3J5LCAxKTsKLQotCS8qIFhYWDogY2FsbGVyIGhvbGRzIElSUS1zYWZlIG1hcHBpbmctPnRyZWVfbG9jayAqLwotCVZNX0JVR19PTighaXJxc19kaXNhYmxlZCgpKTsKLQotCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3MobWVtY2csIHBhZ2UsIC0xKTsKLQltZW1jZ19jaGVja19ldmVudHMobWVtY2csIHBhZ2UpOworCXRoaXNfY3B1X2FkZChtZW1jZy0+c3RhdC0+ZXZlbnRzW2lkeF0sIG5yKTsKIH0KIAogLyoqCi0gKiBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAgLSB1bmNoYXJnZSBhIHN3YXAgZW50cnkKLSAqIEBlbnRyeTogc3dhcCBlbnRyeSB0byB1bmNoYXJnZQorICogbWVtX2Nncm91cF9sb3cgLSBjaGVjayBpZiBtZW1vcnkgY29uc3VtcHRpb24gaXMgYmVsb3cgdGhlIG5vcm1hbCByYW5nZQorICogQHJvb3Q6IHRoZSBoaWdoZXN0IGFuY2VzdG9yIHRvIGNvbnNpZGVyCisgKiBAbWVtY2c6IHRoZSBtZW1vcnkgY2dyb3VwIHRvIGNoZWNrCiAgKgotICogRHJvcCB0aGUgbWVtc3cgY2hhcmdlIGFzc29jaWF0ZWQgd2l0aCBAZW50cnkuCisgKiBSZXR1cm5zICV0cnVlIGlmIG1lbW9yeSBjb25zdW1wdGlvbiBvZiBAbWVtY2csIGFuZCB0aGF0IG9mIGFsbAorICogY29uZmlndXJhYmxlIGFuY2VzdG9ycyB1cCB0byBAcm9vdCwgaXMgYmVsb3cgdGhlIG5vcm1hbCByYW5nZS4KICAqLwotdm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoc3dwX2VudHJ5X3QgZW50cnkpCitib29sIG1lbV9jZ3JvdXBfbG93KHN0cnVjdCBtZW1fY2dyb3VwICpyb290LCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiB7Ci0Jc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwotCXVuc2lnbmVkIHNob3J0IGlkOworCWlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpCisJCXJldHVybiBmYWxzZTsKIAotCWlmICghZG9fc3dhcF9hY2NvdW50KQotCQlyZXR1cm47CisJLyoKKwkgKiBUaGUgdG9wbGV2ZWwgZ3JvdXAgZG9lc24ndCBoYXZlIGEgY29uZmlndXJhYmxlIHJhbmdlLCBzbworCSAqIGl0J3MgbmV2ZXIgbG93IHdoZW4gbG9va2VkIGF0IGRpcmVjdGx5LCBhbmQgaXQgaXMgbm90CisJICogY29uc2lkZXJlZCBhbiBhbmNlc3RvciB3aGVuIGFzc2Vzc2luZyB0aGUgaGllcmFyY2h5LgorCSAqLwogCi0JaWQgPSBzd2FwX2Nncm91cF9yZWNvcmQoZW50cnksIDApOwotCXJjdV9yZWFkX2xvY2soKTsKLQltZW1jZyA9IG1lbV9jZ3JvdXBfbG9va3VwKGlkKTsKLQlpZiAobWVtY2cpIHsKLQkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKQotCQkJcGFnZV9jb3VudGVyX3VuY2hhcmdlKCZtZW1jZy0+bWVtc3csIDEpOwotCQltZW1fY2dyb3VwX3N3YXBfc3RhdGlzdGljcyhtZW1jZywgZmFsc2UpOwotCQljc3NfcHV0KCZtZW1jZy0+Y3NzKTsKKwlpZiAobWVtY2cgPT0gcm9vdF9tZW1fY2dyb3VwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAocGFnZV9jb3VudGVyX3JlYWQoJm1lbWNnLT5tZW1vcnkpID4gbWVtY2ctPmxvdykKKwkJcmV0dXJuIGZhbHNlOworCisJd2hpbGUgKG1lbWNnICE9IHJvb3QpIHsKKwkJbWVtY2cgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7CisKKwkJaWYgKG1lbWNnID09IHJvb3RfbWVtX2Nncm91cCkKKwkJCWJyZWFrOworCisJCWlmIChwYWdlX2NvdW50ZXJfcmVhZCgmbWVtY2ctPm1lbW9yeSkgPiBtZW1jZy0+bG93KQorCQkJcmV0dXJuIGZhbHNlOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gdHJ1ZTsKIH0KLSNlbmRpZgogCiAvKioKICAqIG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZSAtIHRyeSBjaGFyZ2luZyBhIHBhZ2UKQEAgLTU3NzMsNyArNTY2MSw3IEBACiAgKiBtZW1fY2dyb3VwX21pZ3JhdGUgLSBtaWdyYXRlIGEgY2hhcmdlIHRvIGFub3RoZXIgcGFnZQogICogQG9sZHBhZ2U6IGN1cnJlbnRseSBjaGFyZ2VkIHBhZ2UKICAqIEBuZXdwYWdlOiBwYWdlIHRvIHRyYW5zZmVyIHRoZSBjaGFyZ2UgdG8KLSAqIEBscnVjYXJlOiBib3RoIHBhZ2VzIG1pZ2h0IGJlIG9uIHRoZSBMUlUgYWxyZWFkeQorICogQGxydWNhcmU6IGVpdGhlciBvciBib3RoIHBhZ2VzIG1pZ2h0IGJlIG9uIHRoZSBMUlUgYWxyZWFkeQogICoKICAqIE1pZ3JhdGUgdGhlIGNoYXJnZSBmcm9tIEBvbGRwYWdlIHRvIEBuZXdwYWdlLgogICoKQEAgLTU4MzEsMTAgKzU3MTksMTU1IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKQogeworCWludCBjcHUsIG5vZGU7CisKIAlob3RjcHVfbm90aWZpZXIobWVtY2dfY3B1X2hvdHBsdWdfY2FsbGJhY2ssIDApOwotCWVuYWJsZV9zd2FwX2Nncm91cCgpOwotCW1lbV9jZ3JvdXBfc29mdF9saW1pdF90cmVlX2luaXQoKTsKLQltZW1jZ19zdG9ja19pbml0KCk7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQorCQlJTklUX1dPUksoJnBlcl9jcHVfcHRyKCZtZW1jZ19zdG9jaywgY3B1KS0+d29yaywKKwkJCSAgZHJhaW5fbG9jYWxfc3RvY2spOworCisJZm9yX2VhY2hfbm9kZShub2RlKSB7CisJCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX25vZGUgKnJ0cG47CisJCWludCB6b25lOworCisJCXJ0cG4gPSBremFsbG9jX25vZGUoc2l6ZW9mKCpydHBuKSwgR0ZQX0tFUk5FTCwKKwkJCQkgICAgbm9kZV9vbmxpbmUobm9kZSkgPyBub2RlIDogTlVNQV9OT19OT0RFKTsKKworCQlmb3IgKHpvbmUgPSAwOyB6b25lIDwgTUFYX05SX1pPTkVTOyB6b25lKyspIHsKKwkJCXN0cnVjdCBtZW1fY2dyb3VwX3RyZWVfcGVyX3pvbmUgKnJ0cHo7CisKKwkJCXJ0cHogPSAmcnRwbi0+cmJfdHJlZV9wZXJfem9uZVt6b25lXTsKKwkJCXJ0cHotPnJiX3Jvb3QgPSBSQl9ST09UOworCQkJc3Bpbl9sb2NrX2luaXQoJnJ0cHotPmxvY2spOworCQl9CisJCXNvZnRfbGltaXRfdHJlZS5yYl90cmVlX3Blcl9ub2RlW25vZGVdID0gcnRwbjsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIHN1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX2luaXQpOworCisjaWZkZWYgQ09ORklHX01FTUNHX1NXQVAKKy8qKgorICogbWVtX2Nncm91cF9zd2Fwb3V0IC0gdHJhbnNmZXIgYSBtZW1zdyBjaGFyZ2UgdG8gc3dhcAorICogQHBhZ2U6IHBhZ2Ugd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyCisgKiBAZW50cnk6IHN3YXAgZW50cnkgdG8gbW92ZSB0aGUgY2hhcmdlIHRvCisgKgorICogVHJhbnNmZXIgdGhlIG1lbXN3IGNoYXJnZSBvZiBAcGFnZSB0byBAZW50cnkuCisgKi8KK3ZvaWQgbWVtX2Nncm91cF9zd2Fwb3V0KHN0cnVjdCBwYWdlICpwYWdlLCBzd3BfZW50cnlfdCBlbnRyeSkKK3sKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7CisJdW5zaWduZWQgc2hvcnQgb2xkaWQ7CisKKwlWTV9CVUdfT05fUEFHRShQYWdlTFJVKHBhZ2UpLCBwYWdlKTsKKwlWTV9CVUdfT05fUEFHRShwYWdlX2NvdW50KHBhZ2UpLCBwYWdlKTsKKworCWlmICghZG9fc3dhcF9hY2NvdW50KQorCQlyZXR1cm47CisKKwltZW1jZyA9IHBhZ2UtPm1lbV9jZ3JvdXA7CisKKwkvKiBSZWFkYWhlYWQgcGFnZSwgbmV2ZXIgY2hhcmdlZCAqLworCWlmICghbWVtY2cpCisJCXJldHVybjsKKworCW9sZGlkID0gc3dhcF9jZ3JvdXBfcmVjb3JkKGVudHJ5LCBtZW1fY2dyb3VwX2lkKG1lbWNnKSk7CisJVk1fQlVHX09OX1BBR0Uob2xkaWQsIHBhZ2UpOworCW1lbV9jZ3JvdXBfc3dhcF9zdGF0aXN0aWNzKG1lbWNnLCB0cnVlKTsKKworCXBhZ2UtPm1lbV9jZ3JvdXAgPSBOVUxMOworCisJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWVtY2cpKQorCQlwYWdlX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbWNnLT5tZW1vcnksIDEpOworCisJLyogWFhYOiBjYWxsZXIgaG9sZHMgSVJRLXNhZmUgbWFwcGluZy0+dHJlZV9sb2NrICovCisJVk1fQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCisJbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhtZW1jZywgcGFnZSwgLTEpOworCW1lbWNnX2NoZWNrX2V2ZW50cyhtZW1jZywgcGFnZSk7Cit9CisKKy8qKgorICogbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwIC0gdW5jaGFyZ2UgYSBzd2FwIGVudHJ5CisgKiBAZW50cnk6IHN3YXAgZW50cnkgdG8gdW5jaGFyZ2UKKyAqCisgKiBEcm9wIHRoZSBtZW1zdyBjaGFyZ2UgYXNzb2NpYXRlZCB3aXRoIEBlbnRyeS4KKyAqLwordm9pZCBtZW1fY2dyb3VwX3VuY2hhcmdlX3N3YXAoc3dwX2VudHJ5X3QgZW50cnkpCit7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOworCXVuc2lnbmVkIHNob3J0IGlkOworCisJaWYgKCFkb19zd2FwX2FjY291bnQpCisJCXJldHVybjsKKworCWlkID0gc3dhcF9jZ3JvdXBfcmVjb3JkKGVudHJ5LCAwKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJbWVtY2cgPSBtZW1fY2dyb3VwX2xvb2t1cChpZCk7CisJaWYgKG1lbWNnKSB7CisJCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbWNnKSkKKwkJCXBhZ2VfY291bnRlcl91bmNoYXJnZSgmbWVtY2ctPm1lbXN3LCAxKTsKKwkJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3MobWVtY2csIGZhbHNlKTsKKwkJY3NzX3B1dCgmbWVtY2ctPmNzcyk7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworfQorCisvKiBmb3IgcmVtZW1iZXIgYm9vdCBvcHRpb24qLworI2lmZGVmIENPTkZJR19NRU1DR19TV0FQX0VOQUJMRUQKK3N0YXRpYyBpbnQgcmVhbGx5X2RvX3N3YXBfYWNjb3VudCBfX2luaXRkYXRhID0gMTsKKyNlbHNlCitzdGF0aWMgaW50IHJlYWxseV9kb19zd2FwX2FjY291bnQgX19pbml0ZGF0YTsKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCBlbmFibGVfc3dhcF9hY2NvdW50KGNoYXIgKnMpCit7CisJaWYgKCFzdHJjbXAocywgIjEiKSkKKwkJcmVhbGx5X2RvX3N3YXBfYWNjb3VudCA9IDE7CisJZWxzZSBpZiAoIXN0cmNtcChzLCAiMCIpKQorCQlyZWFsbHlfZG9fc3dhcF9hY2NvdW50ID0gMDsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInN3YXBhY2NvdW50PSIsIGVuYWJsZV9zd2FwX2FjY291bnQpOworCitzdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1zd19jZ3JvdXBfZmlsZXNbXSA9IHsKKwl7CisJCS5uYW1lID0gIm1lbXN3LnVzYWdlX2luX2J5dGVzIiwKKwkJLnByaXZhdGUgPSBNRU1GSUxFX1BSSVZBVEUoX01FTVNXQVAsIFJFU19VU0FHRSksCisJCS5yZWFkX3U2NCA9IG1lbV9jZ3JvdXBfcmVhZF91NjQsCisJfSwKKwl7CisJCS5uYW1lID0gIm1lbXN3Lm1heF91c2FnZV9pbl9ieXRlcyIsCisJCS5wcml2YXRlID0gTUVNRklMRV9QUklWQVRFKF9NRU1TV0FQLCBSRVNfTUFYX1VTQUdFKSwKKwkJLndyaXRlID0gbWVtX2Nncm91cF9yZXNldCwKKwkJLnJlYWRfdTY0ID0gbWVtX2Nncm91cF9yZWFkX3U2NCwKKwl9LAorCXsKKwkJLm5hbWUgPSAibWVtc3cubGltaXRfaW5fYnl0ZXMiLAorCQkucHJpdmF0ZSA9IE1FTUZJTEVfUFJJVkFURShfTUVNU1dBUCwgUkVTX0xJTUlUKSwKKwkJLndyaXRlID0gbWVtX2Nncm91cF93cml0ZSwKKwkJLnJlYWRfdTY0ID0gbWVtX2Nncm91cF9yZWFkX3U2NCwKKwl9LAorCXsKKwkJLm5hbWUgPSAibWVtc3cuZmFpbGNudCIsCisJCS5wcml2YXRlID0gTUVNRklMRV9QUklWQVRFKF9NRU1TV0FQLCBSRVNfRkFJTENOVCksCisJCS53cml0ZSA9IG1lbV9jZ3JvdXBfcmVzZXQsCisJCS5yZWFkX3U2NCA9IG1lbV9jZ3JvdXBfcmVhZF91NjQsCisJfSwKKwl7IH0sCS8qIHRlcm1pbmF0ZSAqLworfTsKKworc3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZCkKK3sKKwlpZiAoIW1lbV9jZ3JvdXBfZGlzYWJsZWQoKSAmJiByZWFsbHlfZG9fc3dhcF9hY2NvdW50KSB7CisJCWRvX3N3YXBfYWNjb3VudCA9IDE7CisJCVdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcygmbWVtb3J5X2NncnBfc3Vic3lzLAorCQkJCQkJICBtZW1zd19jZ3JvdXBfZmlsZXMpKTsKKwl9CisJcmV0dXJuIDA7Cit9CitzdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9zd2FwX2luaXQpOworCisjZW5kaWYgLyogQ09ORklHX01FTUNHX1NXQVAgKi8KZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggNTRmM2E5Yi4uYmJlNmE3MyAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTQyOCw2ICs0MjgsNyBAQAogCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBzdGFydCk7CiAJcHVkX2NsZWFyKHB1ZCk7CiAJcG1kX2ZyZWVfdGxiKHRsYiwgcG1kLCBzdGFydCk7CisJbW1fZGVjX25yX3BtZHModGxiLT5tbSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3B1ZF9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBwZ2RfdCAqcGdkLApAQCAtNzU0LDYgKzc1NSw4IEBACiAJaWYgKEhBVkVfUFRFX1NQRUNJQUwpIHsKIAkJaWYgKGxpa2VseSghcHRlX3NwZWNpYWwocHRlKSkpCiAJCQlnb3RvIGNoZWNrX3BmbjsKKwkJaWYgKHZtYS0+dm1fb3BzICYmIHZtYS0+dm1fb3BzLT5maW5kX3NwZWNpYWxfcGFnZSkKKwkJCXJldHVybiB2bWEtPnZtX29wcy0+ZmluZF9zcGVjaWFsX3BhZ2Uodm1hLCBhZGRyKTsKIAkJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUEZOTUFQIHwgVk1fTUlYRURNQVApKQogCQkJcmV0dXJuIE5VTEw7CiAJCWlmICghaXNfemVyb19wZm4ocGZuKSkKQEAgLTgxMSw0MiArODE0LDQwIEBACiAKIAkvKiBwdGUgY29udGFpbnMgcG9zaXRpb24gaW4gc3dhcCBvciBmaWxlLCBzbyBjb3B5LiAqLwogCWlmICh1bmxpa2VseSghcHRlX3ByZXNlbnQocHRlKSkpIHsKLQkJaWYgKCFwdGVfZmlsZShwdGUpKSB7Ci0JCQlzd3BfZW50cnlfdCBlbnRyeSA9IHB0ZV90b19zd3BfZW50cnkocHRlKTsKKwkJc3dwX2VudHJ5X3QgZW50cnkgPSBwdGVfdG9fc3dwX2VudHJ5KHB0ZSk7CiAKLQkJCWlmIChsaWtlbHkoIW5vbl9zd2FwX2VudHJ5KGVudHJ5KSkpIHsKLQkJCQlpZiAoc3dhcF9kdXBsaWNhdGUoZW50cnkpIDwgMCkKLQkJCQkJcmV0dXJuIGVudHJ5LnZhbDsKKwkJaWYgKGxpa2VseSghbm9uX3N3YXBfZW50cnkoZW50cnkpKSkgeworCQkJaWYgKHN3YXBfZHVwbGljYXRlKGVudHJ5KSA8IDApCisJCQkJcmV0dXJuIGVudHJ5LnZhbDsKIAotCQkJCS8qIG1ha2Ugc3VyZSBkc3RfbW0gaXMgb24gc3dhcG9mZidzIG1tbGlzdC4gKi8KLQkJCQlpZiAodW5saWtlbHkobGlzdF9lbXB0eSgmZHN0X21tLT5tbWxpc3QpKSkgewotCQkJCQlzcGluX2xvY2soJm1tbGlzdF9sb2NrKTsKLQkJCQkJaWYgKGxpc3RfZW1wdHkoJmRzdF9tbS0+bW1saXN0KSkKLQkJCQkJCWxpc3RfYWRkKCZkc3RfbW0tPm1tbGlzdCwKLQkJCQkJCQkgJnNyY19tbS0+bW1saXN0KTsKLQkJCQkJc3Bpbl91bmxvY2soJm1tbGlzdF9sb2NrKTsKLQkJCQl9Ci0JCQkJcnNzW01NX1NXQVBFTlRTXSsrOwotCQkJfSBlbHNlIGlmIChpc19taWdyYXRpb25fZW50cnkoZW50cnkpKSB7Ci0JCQkJcGFnZSA9IG1pZ3JhdGlvbl9lbnRyeV90b19wYWdlKGVudHJ5KTsKKwkJCS8qIG1ha2Ugc3VyZSBkc3RfbW0gaXMgb24gc3dhcG9mZidzIG1tbGlzdC4gKi8KKwkJCWlmICh1bmxpa2VseShsaXN0X2VtcHR5KCZkc3RfbW0tPm1tbGlzdCkpKSB7CisJCQkJc3Bpbl9sb2NrKCZtbWxpc3RfbG9jayk7CisJCQkJaWYgKGxpc3RfZW1wdHkoJmRzdF9tbS0+bW1saXN0KSkKKwkJCQkJbGlzdF9hZGQoJmRzdF9tbS0+bW1saXN0LAorCQkJCQkJCSZzcmNfbW0tPm1tbGlzdCk7CisJCQkJc3Bpbl91bmxvY2soJm1tbGlzdF9sb2NrKTsKKwkJCX0KKwkJCXJzc1tNTV9TV0FQRU5UU10rKzsKKwkJfSBlbHNlIGlmIChpc19taWdyYXRpb25fZW50cnkoZW50cnkpKSB7CisJCQlwYWdlID0gbWlncmF0aW9uX2VudHJ5X3RvX3BhZ2UoZW50cnkpOwogCi0JCQkJaWYgKFBhZ2VBbm9uKHBhZ2UpKQotCQkJCQlyc3NbTU1fQU5PTlBBR0VTXSsrOwotCQkJCWVsc2UKLQkJCQkJcnNzW01NX0ZJTEVQQUdFU10rKzsKKwkJCWlmIChQYWdlQW5vbihwYWdlKSkKKwkJCQlyc3NbTU1fQU5PTlBBR0VTXSsrOworCQkJZWxzZQorCQkJCXJzc1tNTV9GSUxFUEFHRVNdKys7CiAKLQkJCQlpZiAoaXNfd3JpdGVfbWlncmF0aW9uX2VudHJ5KGVudHJ5KSAmJgotCQkJCSAgICBpc19jb3dfbWFwcGluZyh2bV9mbGFncykpIHsKLQkJCQkJLyoKLQkJCQkJICogQ09XIG1hcHBpbmdzIHJlcXVpcmUgcGFnZXMgaW4gYm90aAotCQkJCQkgKiBwYXJlbnQgYW5kIGNoaWxkIHRvIGJlIHNldCB0byByZWFkLgotCQkJCQkgKi8KLQkJCQkJbWFrZV9taWdyYXRpb25fZW50cnlfcmVhZCgmZW50cnkpOwotCQkJCQlwdGUgPSBzd3BfZW50cnlfdG9fcHRlKGVudHJ5KTsKLQkJCQkJaWYgKHB0ZV9zd3Bfc29mdF9kaXJ0eSgqc3JjX3B0ZSkpCi0JCQkJCQlwdGUgPSBwdGVfc3dwX21rc29mdF9kaXJ0eShwdGUpOwotCQkJCQlzZXRfcHRlX2F0KHNyY19tbSwgYWRkciwgc3JjX3B0ZSwgcHRlKTsKLQkJCQl9CisJCQlpZiAoaXNfd3JpdGVfbWlncmF0aW9uX2VudHJ5KGVudHJ5KSAmJgorCQkJCQlpc19jb3dfbWFwcGluZyh2bV9mbGFncykpIHsKKwkJCQkvKgorCQkJCSAqIENPVyBtYXBwaW5ncyByZXF1aXJlIHBhZ2VzIGluIGJvdGgKKwkJCQkgKiBwYXJlbnQgYW5kIGNoaWxkIHRvIGJlIHNldCB0byByZWFkLgorCQkJCSAqLworCQkJCW1ha2VfbWlncmF0aW9uX2VudHJ5X3JlYWQoJmVudHJ5KTsKKwkJCQlwdGUgPSBzd3BfZW50cnlfdG9fcHRlKGVudHJ5KTsKKwkJCQlpZiAocHRlX3N3cF9zb2Z0X2RpcnR5KCpzcmNfcHRlKSkKKwkJCQkJcHRlID0gcHRlX3N3cF9ta3NvZnRfZGlydHkocHRlKTsKKwkJCQlzZXRfcHRlX2F0KHNyY19tbSwgYWRkciwgc3JjX3B0ZSwgcHRlKTsKIAkJCX0KIAkJfQogCQlnb3RvIG91dF9zZXRfcHRlOwpAQCAtMTAyMCwxMSArMTAyMSw5IEBACiAJICogcmVhZG9ubHkgbWFwcGluZ3MuIFRoZSB0cmFkZW9mZiBpcyB0aGF0IGNvcHlfcGFnZV9yYW5nZSBpcyBtb3JlCiAJICogZWZmaWNpZW50IHRoYW4gZmF1bHRpbmcuCiAJICovCi0JaWYgKCEodm1hLT52bV9mbGFncyAmIChWTV9IVUdFVExCIHwgVk1fTk9OTElORUFSIHwKLQkJCSAgICAgICBWTV9QRk5NQVAgfCBWTV9NSVhFRE1BUCkpKSB7Ci0JCWlmICghdm1hLT5hbm9uX3ZtYSkKLQkJCXJldHVybiAwOwotCX0KKwlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX0hVR0VUTEIgfCBWTV9QRk5NQVAgfCBWTV9NSVhFRE1BUCkpICYmCisJCQkhdm1hLT5hbm9uX3ZtYSkKKwkJcmV0dXJuIDA7CiAKIAlpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpCiAJCXJldHVybiBjb3B5X2h1Z2V0bGJfcGFnZV9yYW5nZShkc3RfbW0sIHNyY19tbSwgdm1hKTsKQEAgLTEwODIsNiArMTA4MSw3IEBACiAJc3BpbmxvY2tfdCAqcHRsOwogCXB0ZV90ICpzdGFydF9wdGU7CiAJcHRlX3QgKnB0ZTsKKwlzd3BfZW50cnlfdCBlbnRyeTsKIAogYWdhaW46CiAJaW5pdF9yc3NfdmVjKHJzcyk7CkBAIC0xMTA3LDI4ICsxMTA3LDEyIEBACiAJCQkJaWYgKGRldGFpbHMtPmNoZWNrX21hcHBpbmcgJiYKIAkJCQkgICAgZGV0YWlscy0+Y2hlY2tfbWFwcGluZyAhPSBwYWdlLT5tYXBwaW5nKQogCQkJCQljb250aW51ZTsKLQkJCQkvKgotCQkJCSAqIEVhY2ggcGFnZS0+aW5kZXggbXVzdCBiZSBjaGVja2VkIHdoZW4KLQkJCQkgKiBpbnZhbGlkYXRpbmcgb3IgdHJ1bmNhdGluZyBub25saW5lYXIuCi0JCQkJICovCi0JCQkJaWYgKGRldGFpbHMtPm5vbmxpbmVhcl92bWEgJiYKLQkJCQkgICAgKHBhZ2UtPmluZGV4IDwgZGV0YWlscy0+Zmlyc3RfaW5kZXggfHwKLQkJCQkgICAgIHBhZ2UtPmluZGV4ID4gZGV0YWlscy0+bGFzdF9pbmRleCkpCi0JCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJcHRlbnQgPSBwdGVwX2dldF9hbmRfY2xlYXJfZnVsbChtbSwgYWRkciwgcHRlLAogCQkJCQkJCXRsYi0+ZnVsbG1tKTsKIAkJCXRsYl9yZW1vdmVfdGxiX2VudHJ5KHRsYiwgcHRlLCBhZGRyKTsKIAkJCWlmICh1bmxpa2VseSghcGFnZSkpCiAJCQkJY29udGludWU7Ci0JCQlpZiAodW5saWtlbHkoZGV0YWlscykgJiYgZGV0YWlscy0+bm9ubGluZWFyX3ZtYQotCQkJICAgICYmIGxpbmVhcl9wYWdlX2luZGV4KGRldGFpbHMtPm5vbmxpbmVhcl92bWEsCi0JCQkJCQlhZGRyKSAhPSBwYWdlLT5pbmRleCkgewotCQkJCXB0ZV90IHB0ZmlsZSA9IHBnb2ZmX3RvX3B0ZShwYWdlLT5pbmRleCk7Ci0JCQkJaWYgKHB0ZV9zb2Z0X2RpcnR5KHB0ZW50KSkKLQkJCQkJcHRmaWxlID0gcHRlX2ZpbGVfbWtzb2Z0X2RpcnR5KHB0ZmlsZSk7Ci0JCQkJc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlLCBwdGZpbGUpOwotCQkJfQogCQkJaWYgKFBhZ2VBbm9uKHBhZ2UpKQogCQkJCXJzc1tNTV9BTk9OUEFHRVNdLS07CiAJCQllbHNlIHsKQEAgLTExNTEsMzMgKzExMzUsMjUgQEAKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9Ci0JCS8qCi0JCSAqIElmIGRldGFpbHMtPmNoZWNrX21hcHBpbmcsIHdlIGxlYXZlIHN3YXAgZW50cmllczsKLQkJICogaWYgZGV0YWlscy0+bm9ubGluZWFyX3ZtYSwgd2UgbGVhdmUgZmlsZSBlbnRyaWVzLgotCQkgKi8KKwkJLyogSWYgZGV0YWlscy0+Y2hlY2tfbWFwcGluZywgd2UgbGVhdmUgc3dhcCBlbnRyaWVzLiAqLwogCQlpZiAodW5saWtlbHkoZGV0YWlscykpCiAJCQljb250aW51ZTsKLQkJaWYgKHB0ZV9maWxlKHB0ZW50KSkgewotCQkJaWYgKHVubGlrZWx5KCEodm1hLT52bV9mbGFncyAmIFZNX05PTkxJTkVBUikpKQotCQkJCXByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGVudCwgTlVMTCk7Ci0JCX0gZWxzZSB7Ci0JCQlzd3BfZW50cnlfdCBlbnRyeSA9IHB0ZV90b19zd3BfZW50cnkocHRlbnQpOwogCi0JCQlpZiAoIW5vbl9zd2FwX2VudHJ5KGVudHJ5KSkKLQkJCQlyc3NbTU1fU1dBUEVOVFNdLS07Ci0JCQllbHNlIGlmIChpc19taWdyYXRpb25fZW50cnkoZW50cnkpKSB7Ci0JCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCWVudHJ5ID0gcHRlX3RvX3N3cF9lbnRyeShwdGVudCk7CisJCWlmICghbm9uX3N3YXBfZW50cnkoZW50cnkpKQorCQkJcnNzW01NX1NXQVBFTlRTXS0tOworCQllbHNlIGlmIChpc19taWdyYXRpb25fZW50cnkoZW50cnkpKSB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCQkJCXBhZ2UgPSBtaWdyYXRpb25fZW50cnlfdG9fcGFnZShlbnRyeSk7CisJCQlwYWdlID0gbWlncmF0aW9uX2VudHJ5X3RvX3BhZ2UoZW50cnkpOwogCi0JCQkJaWYgKFBhZ2VBbm9uKHBhZ2UpKQotCQkJCQlyc3NbTU1fQU5PTlBBR0VTXS0tOwotCQkJCWVsc2UKLQkJCQkJcnNzW01NX0ZJTEVQQUdFU10tLTsKLQkJCX0KLQkJCWlmICh1bmxpa2VseSghZnJlZV9zd2FwX2FuZF9jYWNoZShlbnRyeSkpKQotCQkJCXByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGVudCwgTlVMTCk7CisJCQlpZiAoUGFnZUFub24ocGFnZSkpCisJCQkJcnNzW01NX0FOT05QQUdFU10tLTsKKwkJCWVsc2UKKwkJCQlyc3NbTU1fRklMRVBBR0VTXS0tOwogCQl9CisJCWlmICh1bmxpa2VseSghZnJlZV9zd2FwX2FuZF9jYWNoZShlbnRyeSkpKQorCQkJcHJpbnRfYmFkX3B0ZSh2bWEsIGFkZHIsIHB0ZW50LCBOVUxMKTsKIAkJcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwobW0sIGFkZHIsIHB0ZSwgdGxiLT5mdWxsbW0pOwogCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwogCkBAIC0xMjc3LDcgKzEyNTMsNyBAQAogCXBnZF90ICpwZ2Q7CiAJdW5zaWduZWQgbG9uZyBuZXh0OwogCi0JaWYgKGRldGFpbHMgJiYgIWRldGFpbHMtPmNoZWNrX21hcHBpbmcgJiYgIWRldGFpbHMtPm5vbmxpbmVhcl92bWEpCisJaWYgKGRldGFpbHMgJiYgIWRldGFpbHMtPmNoZWNrX21hcHBpbmcpCiAJCWRldGFpbHMgPSBOVUxMOwogCiAJQlVHX09OKGFkZHIgPj0gZW5kKTsKQEAgLTEzNzEsNyArMTM0Nyw3IEBACiAgKiBAdm1hOiB2bV9hcmVhX3N0cnVjdCBob2xkaW5nIHRoZSBhcHBsaWNhYmxlIHBhZ2VzCiAgKiBAc3RhcnQ6IHN0YXJ0aW5nIGFkZHJlc3Mgb2YgcGFnZXMgdG8gemFwCiAgKiBAc2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHRvIHphcAotICogQGRldGFpbHM6IGRldGFpbHMgb2Ygbm9ubGluZWFyIHRydW5jYXRpb24gb3Igc2hhcmVkIGNhY2hlIGludmFsaWRhdGlvbgorICogQGRldGFpbHM6IGRldGFpbHMgb2Ygc2hhcmVkIGNhY2hlIGludmFsaWRhdGlvbgogICoKICAqIENhbGxlciBtdXN0IHByb3RlY3QgdGhlIFZNQSBsaXN0CiAgKi8KQEAgLTEzOTcsNyArMTM3Myw3IEBACiAgKiBAdm1hOiB2bV9hcmVhX3N0cnVjdCBob2xkaW5nIHRoZSBhcHBsaWNhYmxlIHBhZ2VzCiAgKiBAYWRkcmVzczogc3RhcnRpbmcgYWRkcmVzcyBvZiBwYWdlcyB0byB6YXAKICAqIEBzaXplOiBudW1iZXIgb2YgYnl0ZXMgdG8gemFwCi0gKiBAZGV0YWlsczogZGV0YWlscyBvZiBub25saW5lYXIgdHJ1bmNhdGlvbiBvciBzaGFyZWQgY2FjaGUgaW52YWxpZGF0aW9uCisgKiBAZGV0YWlsczogZGV0YWlscyBvZiBzaGFyZWQgY2FjaGUgaW52YWxpZGF0aW9uCiAgKgogICogVGhlIHJhbmdlIG11c3QgZml0IGludG8gb25lIFZNQS4KICAqLwpAQCAtMTkyMiwxMiArMTg5OCwxMSBAQAogRVhQT1JUX1NZTUJPTF9HUEwoYXBwbHlfdG9fcGFnZV9yYW5nZSk7CiAKIC8qCi0gKiBoYW5kbGVfcHRlX2ZhdWx0IGNob29zZXMgcGFnZSBmYXVsdCBoYW5kbGVyIGFjY29yZGluZyB0byBhbiBlbnRyeQotICogd2hpY2ggd2FzIHJlYWQgbm9uLWF0b21pY2FsbHkuICBCZWZvcmUgbWFraW5nIGFueSBjb21taXRtZW50LCBvbgotICogdGhvc2UgYXJjaGl0ZWN0dXJlcyBvciBjb25maWd1cmF0aW9ucyAoZS5nLiBpMzg2IHdpdGggUEFFKSB3aGljaAotICogbWlnaHQgZ2l2ZSBhIG1peCBvZiB1bm1hdGNoZWQgcGFydHMsIGRvX3N3YXBfcGFnZSBhbmQgZG9fbm9ubGluZWFyX2ZhdWx0Ci0gKiBtdXN0IGNoZWNrIHVuZGVyIGxvY2sgYmVmb3JlIHVubWFwcGluZyB0aGUgcHRlIGFuZCBwcm9jZWVkaW5nCi0gKiAoYnV0IGRvX3dwX3BhZ2UgaXMgb25seSBjYWxsZWQgYWZ0ZXIgYWxyZWFkeSBtYWtpbmcgc3VjaCBhIGNoZWNrOworICogaGFuZGxlX3B0ZV9mYXVsdCBjaG9vc2VzIHBhZ2UgZmF1bHQgaGFuZGxlciBhY2NvcmRpbmcgdG8gYW4gZW50cnkgd2hpY2ggd2FzCisgKiByZWFkIG5vbi1hdG9taWNhbGx5LiAgQmVmb3JlIG1ha2luZyBhbnkgY29tbWl0bWVudCwgb24gdGhvc2UgYXJjaGl0ZWN0dXJlcworICogb3IgY29uZmlndXJhdGlvbnMgKGUuZy4gaTM4NiB3aXRoIFBBRSkgd2hpY2ggbWlnaHQgZ2l2ZSBhIG1peCBvZiB1bm1hdGNoZWQKKyAqIHBhcnRzLCBkb19zd2FwX3BhZ2UgbXVzdCBjaGVjayB1bmRlciBsb2NrIGJlZm9yZSB1bm1hcHBpbmcgdGhlIHB0ZSBhbmQKKyAqIHByb2NlZWRpbmcgKGJ1dCBkb193cF9wYWdlIGlzIG9ubHkgY2FsbGVkIGFmdGVyIGFscmVhZHkgbWFraW5nIHN1Y2ggYSBjaGVjazsKICAqIGFuZCBkb19hbm9ueW1vdXNfcGFnZSBjYW4gc2FmZWx5IGNoZWNrIGxhdGVyIG9uKS4KICAqLwogc3RhdGljIGlubGluZSBpbnQgcHRlX3VubWFwX3NhbWUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBtZF90ICpwbWQsCkBAIC0yMDMzLDcgKzIwMDgsNyBAQAogCXB0ZV90IGVudHJ5OwogCWludCByZXQgPSAwOwogCWludCBwYWdlX21rd3JpdGUgPSAwOwotCXN0cnVjdCBwYWdlICpkaXJ0eV9wYWdlID0gTlVMTDsKKwlib29sIGRpcnR5X3NoYXJlZCA9IGZhbHNlOwogCXVuc2lnbmVkIGxvbmcgbW11bl9zdGFydCA9IDA7CS8qIEZvciBtbXVfbm90aWZpZXJzICovCiAJdW5zaWduZWQgbG9uZyBtbXVuX2VuZCA9IDA7CS8qIEZvciBtbXVfbm90aWZpZXJzICovCiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwpAQCAtMjA4NCw2ICsyMDU5LDcgQEAKIAkJdW5sb2NrX3BhZ2Uob2xkX3BhZ2UpOwogCX0gZWxzZSBpZiAodW5saWtlbHkoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fV1JJVEV8Vk1fU0hBUkVEKSkgPT0KIAkJCQkJKFZNX1dSSVRFfFZNX1NIQVJFRCkpKSB7CisJCXBhZ2VfY2FjaGVfZ2V0KG9sZF9wYWdlKTsKIAkJLyoKIAkJICogT25seSBjYXRjaCB3cml0ZS1mYXVsdHMgb24gc2hhcmVkIHdyaXRhYmxlIHBhZ2VzLAogCQkgKiByZWFkLW9ubHkgc2hhcmVkIHBhZ2VzIGNhbiBnZXQgQ09XZWQgYnkKQEAgLTIwOTEsNyArMjA2Nyw3IEBACiAJCSAqLwogCQlpZiAodm1hLT52bV9vcHMgJiYgdm1hLT52bV9vcHMtPnBhZ2VfbWt3cml0ZSkgewogCQkJaW50IHRtcDsKLQkJCXBhZ2VfY2FjaGVfZ2V0KG9sZF9wYWdlKTsKKwogCQkJcHRlX3VubWFwX3VubG9jayhwYWdlX3RhYmxlLCBwdGwpOwogCQkJdG1wID0gZG9fcGFnZV9ta3dyaXRlKHZtYSwgb2xkX3BhZ2UsIGFkZHJlc3MpOwogCQkJaWYgKHVubGlrZWx5KCF0bXAgfHwgKHRtcCAmCkBAIC0yMTExLDExICsyMDg3LDEwIEBACiAJCQkJdW5sb2NrX3BhZ2Uob2xkX3BhZ2UpOwogCQkJCWdvdG8gdW5sb2NrOwogCQkJfQotCiAJCQlwYWdlX21rd3JpdGUgPSAxOwogCQl9Ci0JCWRpcnR5X3BhZ2UgPSBvbGRfcGFnZTsKLQkJZ2V0X3BhZ2UoZGlydHlfcGFnZSk7CisKKwkJZGlydHlfc2hhcmVkID0gdHJ1ZTsKIAogcmV1c2U6CiAJCS8qCkBAIC0yMTM0LDIwICsyMTA5LDIwIEBACiAJCXB0ZV91bm1hcF91bmxvY2socGFnZV90YWJsZSwgcHRsKTsKIAkJcmV0IHw9IFZNX0ZBVUxUX1dSSVRFOwogCi0JCWlmICghZGlydHlfcGFnZSkKLQkJCXJldHVybiByZXQ7Ci0KLQkJaWYgKCFwYWdlX21rd3JpdGUpIHsKKwkJaWYgKGRpcnR5X3NoYXJlZCkgewogCQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAJCQlpbnQgZGlydGllZDsKIAotCQkJbG9ja19wYWdlKGRpcnR5X3BhZ2UpOwotCQkJZGlydGllZCA9IHNldF9wYWdlX2RpcnR5KGRpcnR5X3BhZ2UpOwotCQkJVk1fQlVHX09OX1BBR0UoUGFnZUFub24oZGlydHlfcGFnZSksIGRpcnR5X3BhZ2UpOwotCQkJbWFwcGluZyA9IGRpcnR5X3BhZ2UtPm1hcHBpbmc7Ci0JCQl1bmxvY2tfcGFnZShkaXJ0eV9wYWdlKTsKKwkJCWlmICghcGFnZV9ta3dyaXRlKQorCQkJCWxvY2tfcGFnZShvbGRfcGFnZSk7CiAKLQkJCWlmIChkaXJ0aWVkICYmIG1hcHBpbmcpIHsKKwkJCWRpcnRpZWQgPSBzZXRfcGFnZV9kaXJ0eShvbGRfcGFnZSk7CisJCQlWTV9CVUdfT05fUEFHRShQYWdlQW5vbihvbGRfcGFnZSksIG9sZF9wYWdlKTsKKwkJCW1hcHBpbmcgPSBvbGRfcGFnZS0+bWFwcGluZzsKKwkJCXVubG9ja19wYWdlKG9sZF9wYWdlKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShvbGRfcGFnZSk7CisKKwkJCWlmICgoZGlydGllZCB8fCBwYWdlX21rd3JpdGUpICYmIG1hcHBpbmcpIHsKIAkJCQkvKgogCQkJCSAqIFNvbWUgZGV2aWNlIGRyaXZlcnMgZG8gbm90IHNldCBwYWdlLm1hcHBpbmcKIAkJCQkgKiBidXQgc3RpbGwgZGlydHkgdGhlaXIgcGFnZXMKQEAgLTIxNTUsMjUgKzIxMzAsOSBAQAogCQkJCWJhbGFuY2VfZGlydHlfcGFnZXNfcmF0ZWxpbWl0ZWQobWFwcGluZyk7CiAJCQl9CiAKLQkJCS8qIGZpbGVfdXBkYXRlX3RpbWUgb3V0c2lkZSBwYWdlX2xvY2sgKi8KLQkJCWlmICh2bWEtPnZtX2ZpbGUpCisJCQlpZiAoIXBhZ2VfbWt3cml0ZSkKIAkJCQlmaWxlX3VwZGF0ZV90aW1lKHZtYS0+dm1fZmlsZSk7CiAJCX0KLQkJcHV0X3BhZ2UoZGlydHlfcGFnZSk7Ci0JCWlmIChwYWdlX21rd3JpdGUpIHsKLQkJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZGlydHlfcGFnZS0+bWFwcGluZzsKLQotCQkJc2V0X3BhZ2VfZGlydHkoZGlydHlfcGFnZSk7Ci0JCQl1bmxvY2tfcGFnZShkaXJ0eV9wYWdlKTsKLQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShkaXJ0eV9wYWdlKTsKLQkJCWlmIChtYXBwaW5nKQl7Ci0JCQkJLyoKLQkJCQkgKiBTb21lIGRldmljZSBkcml2ZXJzIGRvIG5vdCBzZXQgcGFnZS5tYXBwaW5nCi0JCQkJICogYnV0IHN0aWxsIGRpcnR5IHRoZWlyIHBhZ2VzCi0JCQkJICovCi0JCQkJYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZChtYXBwaW5nKTsKLQkJCX0KLQkJfQogCiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMjMzMSwyNSArMjI5MCwxMSBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHVubWFwX21hcHBpbmdfcmFuZ2VfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLAotCQkJCQkgICAgc3RydWN0IHphcF9kZXRhaWxzICpkZXRhaWxzKQotewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCi0JLyoKLQkgKiBJbiBub25saW5lYXIgVk1BcyB0aGVyZSBpcyBubyBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIHZpcnR1YWwgYWRkcmVzcwotCSAqIG9mZnNldCBhbmQgZmlsZSBvZmZzZXQuICBTbyB3ZSBtdXN0IHBlcmZvcm0gYW4gZXhoYXVzdGl2ZSBzZWFyY2gKLQkgKiBhY3Jvc3MgKmFsbCogdGhlIHBhZ2VzIGluIGVhY2ggbm9ubGluZWFyIFZNQSwgbm90IGp1c3QgdGhlIHBhZ2VzCi0JICogd2hvc2UgdmlydHVhbCBhZGRyZXNzIGxpZXMgb3V0c2lkZSB0aGUgZmlsZSB0cnVuY2F0aW9uIHBvaW50LgotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCBoZWFkLCBzaGFyZWQubm9ubGluZWFyKSB7Ci0JCWRldGFpbHMtPm5vbmxpbmVhcl92bWEgPSB2bWE7Ci0JCXVubWFwX21hcHBpbmdfcmFuZ2Vfdm1hKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsIGRldGFpbHMpOwotCX0KLX0KLQogLyoqCi0gKiB1bm1hcF9tYXBwaW5nX3JhbmdlIC0gdW5tYXAgdGhlIHBvcnRpb24gb2YgYWxsIG1tYXBzIGluIHRoZSBzcGVjaWZpZWQgYWRkcmVzc19zcGFjZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWQgcGFnZSByYW5nZSBpbiB0aGUgdW5kZXJseWluZyBmaWxlLgorICogdW5tYXBfbWFwcGluZ19yYW5nZSAtIHVubWFwIHRoZSBwb3J0aW9uIG9mIGFsbCBtbWFwcyBpbiB0aGUgc3BlY2lmaWVkCisgKiBhZGRyZXNzX3NwYWNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwYWdlIHJhbmdlIGluIHRoZSB1bmRlcmx5aW5nCisgKiBmaWxlLgorICoKICAqIEBtYXBwaW5nOiB0aGUgYWRkcmVzcyBzcGFjZSBjb250YWluaW5nIG1tYXBzIHRvIGJlIHVubWFwcGVkLgogICogQGhvbGViZWdpbjogYnl0ZSBpbiBmaXJzdCBwYWdlIHRvIHVubWFwLCByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YKICAqIHRoZSB1bmRlcmx5aW5nIGZpbGUuICBUaGlzIHdpbGwgYmUgcm91bmRlZCBkb3duIHRvIGEgUEFHRV9TSVpFCkBAIC0yMzc4LDcgKzIzMjMsNiBAQAogCX0KIAogCWRldGFpbHMuY2hlY2tfbWFwcGluZyA9IGV2ZW5fY293cz8gTlVMTDogbWFwcGluZzsKLQlkZXRhaWxzLm5vbmxpbmVhcl92bWEgPSBOVUxMOwogCWRldGFpbHMuZmlyc3RfaW5kZXggPSBoYmE7CiAJZGV0YWlscy5sYXN0X2luZGV4ID0gaGJhICsgaGxlbiAtIDE7CiAJaWYgKGRldGFpbHMubGFzdF9pbmRleCA8IGRldGFpbHMuZmlyc3RfaW5kZXgpCkBAIC0yMzg4LDggKzIzMzIsNiBAQAogCWlfbW1hcF9sb2NrX3dyaXRlKG1hcHBpbmcpOwogCWlmICh1bmxpa2VseSghUkJfRU1QVFlfUk9PVCgmbWFwcGluZy0+aV9tbWFwKSkpCiAJCXVubWFwX21hcHBpbmdfcmFuZ2VfdHJlZSgmbWFwcGluZy0+aV9tbWFwLCAmZGV0YWlscyk7Ci0JaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZtYXBwaW5nLT5pX21tYXBfbm9ubGluZWFyKSkpCi0JCXVubWFwX21hcHBpbmdfcmFuZ2VfbGlzdCgmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhciwgJmRldGFpbHMpOwogCWlfbW1hcF91bmxvY2tfd3JpdGUobWFwcGluZyk7CiB9CiBFWFBPUlRfU1lNQk9MKHVubWFwX21hcHBpbmdfcmFuZ2UpOwpAQCAtMjYzMiw3ICsyNTc0LDcgQEAKIAogCS8qIENoZWNrIGlmIHdlIG5lZWQgdG8gYWRkIGEgZ3VhcmQgcGFnZSB0byB0aGUgc3RhY2sgKi8KIAlpZiAoY2hlY2tfc3RhY2tfZ3VhcmRfcGFnZSh2bWEsIGFkZHJlc3MpIDwgMCkKLQkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKKwkJcmV0dXJuIFZNX0ZBVUxUX1NJR1NFR1Y7CiAKIAkvKiBVc2UgdGhlIHplcm8tcGFnZSBmb3IgcmVhZHMgKi8KIAlpZiAoIShmbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpICYmICFtbV9mb3JiaWRzX3plcm9wYWdlKG1tKSkgewpAQCAtMjc1MCw4ICsyNjkyLDYgQEAKIAllbnRyeSA9IG1rX3B0ZShwYWdlLCB2bWEtPnZtX3BhZ2VfcHJvdCk7CiAJaWYgKHdyaXRlKQogCQllbnRyeSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpOwotCWVsc2UgaWYgKHB0ZV9maWxlKCpwdGUpICYmIHB0ZV9maWxlX3NvZnRfZGlydHkoKnB0ZSkpCi0JCWVudHJ5ID0gcHRlX21rc29mdF9kaXJ0eShlbnRyeSk7CiAJaWYgKGFub24pIHsKIAkJaW5jX21tX2NvdW50ZXJfZmFzdCh2bWEtPnZtX21tLCBNTV9BTk9OUEFHRVMpOwogCQlwYWdlX2FkZF9uZXdfYW5vbl9ybWFwKHBhZ2UsIHZtYSwgYWRkcmVzcyk7CkBAIC0yODg2LDggKzI4MjYsNyBAQAogCSAqIGlmIHBhZ2UgYnkgdGhlIG9mZnNldCBpcyBub3QgcmVhZHkgdG8gYmUgbWFwcGVkIChjb2xkIGNhY2hlIG9yCiAJICogc29tZXRoaW5nKS4KIAkgKi8KLQlpZiAodm1hLT52bV9vcHMtPm1hcF9wYWdlcyAmJiAhKGZsYWdzICYgRkFVTFRfRkxBR19OT05MSU5FQVIpICYmCi0JICAgIGZhdWx0X2Fyb3VuZF9ieXRlcyA+PiBQQUdFX1NISUZUID4gMSkgeworCWlmICh2bWEtPnZtX29wcy0+bWFwX3BhZ2VzICYmIGZhdWx0X2Fyb3VuZF9ieXRlcyA+PiBQQUdFX1NISUZUID4gMSkgewogCQlwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWQsIGFkZHJlc3MsICZwdGwpOwogCQlkb19mYXVsdF9hcm91bmQodm1hLCBhZGRyZXNzLCBwdGUsIHBnb2ZmLCBmbGFncyk7CiAJCWlmICghcHRlX3NhbWUoKnB0ZSwgb3JpZ19wdGUpKQpAQCAtMzAxOSw4ICsyOTU4LDcgQEAKIAkJYmFsYW5jZV9kaXJ0eV9wYWdlc19yYXRlbGltaXRlZChtYXBwaW5nKTsKIAl9CiAKLQkvKiBmaWxlX3VwZGF0ZV90aW1lIG91dHNpZGUgcGFnZV9sb2NrICovCi0JaWYgKHZtYS0+dm1fZmlsZSAmJiAhdm1hLT52bV9vcHMtPnBhZ2VfbWt3cml0ZSkKKwlpZiAoIXZtYS0+dm1fb3BzLT5wYWdlX21rd3JpdGUpCiAJCWZpbGVfdXBkYXRlX3RpbWUodm1hLT52bV9maWxlKTsKIAogCXJldHVybiByZXQ7CkBAIC0zMDMyLDcgKzI5NzAsNyBAQAogICogVGhlIG1tYXBfc2VtIG1heSBoYXZlIGJlZW4gcmVsZWFzZWQgZGVwZW5kaW5nIG9uIGZsYWdzIGFuZCBvdXIKICAqIHJldHVybiB2YWx1ZS4gIFNlZSBmaWxlbWFwX2ZhdWx0KCkgYW5kIF9fbG9ja19wYWdlX29yX3JldHJ5KCkuCiAgKi8KLXN0YXRpYyBpbnQgZG9fbGluZWFyX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKK3N0YXRpYyBpbnQgZG9fZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90ICpwYWdlX3RhYmxlLCBwbWRfdCAqcG1kLAogCQl1bnNpZ25lZCBpbnQgZmxhZ3MsIHB0ZV90IG9yaWdfcHRlKQogewpAQCAtMzA0OSw0NiArMjk4Nyw2IEBACiAJcmV0dXJuIGRvX3NoYXJlZF9mYXVsdChtbSwgdm1hLCBhZGRyZXNzLCBwbWQsIHBnb2ZmLCBmbGFncywgb3JpZ19wdGUpOwogfQogCi0vKgotICogRmF1bHQgb2YgYSBwcmV2aW91c2x5IGV4aXN0aW5nIG5hbWVkIG1hcHBpbmcuIFJlcG9wdWxhdGUgdGhlIHB0ZQotICogZnJvbSB0aGUgZW5jb2RlZCBmaWxlX3B0ZSBpZiBwb3NzaWJsZS4gVGhpcyBlbmFibGVzIHN3YXBwYWJsZQotICogbm9ubGluZWFyIHZtYXMuCi0gKgotICogV2UgZW50ZXIgd2l0aCBub24tZXhjbHVzaXZlIG1tYXBfc2VtICh0byBleGNsdWRlIHZtYSBjaGFuZ2VzLAotICogYnV0IGFsbG93IGNvbmN1cnJlbnQgZmF1bHRzKSwgYW5kIHB0ZSBtYXBwZWQgYnV0IG5vdCB5ZXQgbG9ja2VkLgotICogV2UgcmV0dXJuIHdpdGggcHRlIHVubWFwcGVkIGFuZCB1bmxvY2tlZC4KLSAqIFRoZSBtbWFwX3NlbSBtYXkgaGF2ZSBiZWVuIHJlbGVhc2VkIGRlcGVuZGluZyBvbiBmbGFncyBhbmQgb3VyCi0gKiByZXR1cm4gdmFsdWUuICBTZWUgZmlsZW1hcF9mYXVsdCgpIGFuZCBfX2xvY2tfcGFnZV9vcl9yZXRyeSgpLgotICovCi1zdGF0aWMgaW50IGRvX25vbmxpbmVhcl9mYXVsdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnBhZ2VfdGFibGUsIHBtZF90ICpwbWQsCi0JCXVuc2lnbmVkIGludCBmbGFncywgcHRlX3Qgb3JpZ19wdGUpCi17Ci0JcGdvZmZfdCBwZ29mZjsKLQotCWZsYWdzIHw9IEZBVUxUX0ZMQUdfTk9OTElORUFSOwotCi0JaWYgKCFwdGVfdW5tYXBfc2FtZShtbSwgcG1kLCBwYWdlX3RhYmxlLCBvcmlnX3B0ZSkpCi0JCXJldHVybiAwOwotCi0JaWYgKHVubGlrZWx5KCEodm1hLT52bV9mbGFncyAmIFZNX05PTkxJTkVBUikpKSB7Ci0JCS8qCi0JCSAqIFBhZ2UgdGFibGUgY29ycnVwdGVkOiBzaG93IHB0ZSBhbmQga2lsbCBwcm9jZXNzLgotCQkgKi8KLQkJcHJpbnRfYmFkX3B0ZSh2bWEsIGFkZHJlc3MsIG9yaWdfcHRlLCBOVUxMKTsKLQkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKLQl9Ci0KLQlwZ29mZiA9IHB0ZV90b19wZ29mZihvcmlnX3B0ZSk7Ci0JaWYgKCEoZmxhZ3MgJiBGQVVMVF9GTEFHX1dSSVRFKSkKLQkJcmV0dXJuIGRvX3JlYWRfZmF1bHQobW0sIHZtYSwgYWRkcmVzcywgcG1kLCBwZ29mZiwgZmxhZ3MsCi0JCQkJb3JpZ19wdGUpOwotCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpKQotCQlyZXR1cm4gZG9fY293X2ZhdWx0KG1tLCB2bWEsIGFkZHJlc3MsIHBtZCwgcGdvZmYsIGZsYWdzLAotCQkJCW9yaWdfcHRlKTsKLQlyZXR1cm4gZG9fc2hhcmVkX2ZhdWx0KG1tLCB2bWEsIGFkZHJlc3MsIHBtZCwgcGdvZmYsIGZsYWdzLCBvcmlnX3B0ZSk7Ci19Ci0KIHN0YXRpYyBpbnQgbnVtYV9taWdyYXRlX3ByZXAoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgaW50IHBhZ2VfbmlkLAogCQkJCWludCAqZmxhZ3MpCkBAIC0zMjE2LDE1ICszMTE0LDEyIEBACiAJCWlmIChwdGVfbm9uZShlbnRyeSkpIHsKIAkJCWlmICh2bWEtPnZtX29wcykgewogCQkJCWlmIChsaWtlbHkodm1hLT52bV9vcHMtPmZhdWx0KSkKLQkJCQkJcmV0dXJuIGRvX2xpbmVhcl9mYXVsdChtbSwgdm1hLCBhZGRyZXNzLAotCQkJCQkJcHRlLCBwbWQsIGZsYWdzLCBlbnRyeSk7CisJCQkJCXJldHVybiBkb19mYXVsdChtbSwgdm1hLCBhZGRyZXNzLCBwdGUsCisJCQkJCQkJcG1kLCBmbGFncywgZW50cnkpOwogCQkJfQogCQkJcmV0dXJuIGRvX2Fub255bW91c19wYWdlKG1tLCB2bWEsIGFkZHJlc3MsCiAJCQkJCQkgcHRlLCBwbWQsIGZsYWdzKTsKIAkJfQotCQlpZiAocHRlX2ZpbGUoZW50cnkpKQotCQkJcmV0dXJuIGRvX25vbmxpbmVhcl9mYXVsdChtbSwgdm1hLCBhZGRyZXNzLAotCQkJCQlwdGUsIHBtZCwgZmxhZ3MsIGVudHJ5KTsKIAkJcmV0dXJuIGRvX3N3YXBfcGFnZShtbSwgdm1hLCBhZGRyZXNzLAogCQkJCQlwdGUsIHBtZCwgZmxhZ3MsIGVudHJ5KTsKIAl9CkBAIC0zNDI4LDE1ICszMzIzLDE3IEBACiAKIAlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogI2lmbmRlZiBfX0FSQ0hfSEFTXzRMRVZFTF9IQUNLCi0JaWYgKHB1ZF9wcmVzZW50KCpwdWQpKQkJLyogQW5vdGhlciBoYXMgcG9wdWxhdGVkIGl0ICovCi0JCXBtZF9mcmVlKG1tLCBuZXcpOwotCWVsc2UKKwlpZiAoIXB1ZF9wcmVzZW50KCpwdWQpKSB7CisJCW1tX2luY19ucl9wbWRzKG1tKTsKIAkJcHVkX3BvcHVsYXRlKG1tLCBwdWQsIG5ldyk7Ci0jZWxzZQotCWlmIChwZ2RfcHJlc2VudCgqcHVkKSkJCS8qIEFub3RoZXIgaGFzIHBvcHVsYXRlZCBpdCAqLworCX0gZWxzZQkvKiBBbm90aGVyIGhhcyBwb3B1bGF0ZWQgaXQgKi8KIAkJcG1kX2ZyZWUobW0sIG5ldyk7Ci0JZWxzZQorI2Vsc2UKKwlpZiAoIXBnZF9wcmVzZW50KCpwdWQpKSB7CisJCW1tX2luY19ucl9wbWRzKG1tKTsKIAkJcGdkX3BvcHVsYXRlKG1tLCBwdWQsIG5ldyk7CisJfSBlbHNlIC8qIEFub3RoZXIgaGFzIHBvcHVsYXRlZCBpdCAqLworCQlwbWRfZnJlZShtbSwgbmV3KTsKICNlbmRpZiAvKiBfX0FSQ0hfSEFTXzRMRVZFTF9IQUNLICovCiAJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCAwZTA5NjFiLi5mMWJkMjM4IDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYworKysgYi9tbS9tZW1wb2xpY3kuYwpAQCAtNDcxLDI0ICs0NzEsMzQgQEAKIHN0YXRpYyB2b2lkIG1pZ3JhdGVfcGFnZV9hZGQoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0LAogCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogCitzdHJ1Y3QgcXVldWVfcGFnZXMgeworCXN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbm9kZW1hc2tfdCAqbm1hc2s7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2OworfTsKKwogLyoKICAqIFNjYW4gdGhyb3VnaCBwYWdlcyBjaGVja2luZyBpZiBwYWdlcyBmb2xsb3cgY2VydGFpbiBjb25kaXRpb25zLAogICogYW5kIG1vdmUgdGhlbSB0byB0aGUgcGFnZWxpc3QgaWYgdGhleSBkby4KICAqLwotc3RhdGljIGludCBxdWV1ZV9wYWdlc19wdGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCWNvbnN0IG5vZGVtYXNrX3QgKm5vZGVzLCB1bnNpZ25lZCBsb25nIGZsYWdzLAotCQl2b2lkICpwcml2YXRlKQorc3RhdGljIGludCBxdWV1ZV9wYWdlc19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtbV93YWxrICp3YWxrKQogewotCXB0ZV90ICpvcmlnX3B0ZTsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnZtYTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgcXVldWVfcGFnZXMgKnFwID0gd2Fsay0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gcXAtPmZsYWdzOworCWludCBuaWQ7CiAJcHRlX3QgKnB0ZTsKIAlzcGlubG9ja190ICpwdGw7CiAKLQlvcmlnX3B0ZSA9IHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLT52bV9tbSwgcG1kLCBhZGRyLCAmcHRsKTsKLQlkbyB7Ci0JCXN0cnVjdCBwYWdlICpwYWdlOwotCQlpbnQgbmlkOworCXNwbGl0X2h1Z2VfcGFnZV9wbWQodm1hLCBhZGRyLCBwbWQpOworCWlmIChwbWRfdHJhbnNfdW5zdGFibGUocG1kKSkKKwkJcmV0dXJuIDA7CiAKKwlwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHdhbGstPm1tLCBwbWQsIGFkZHIsICZwdGwpOworCWZvciAoOyBhZGRyICE9IGVuZDsgcHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFKSB7CiAJCWlmICghcHRlX3ByZXNlbnQoKnB0ZSkpCiAJCQljb250aW51ZTsKIAkJcGFnZSA9IHZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgKnB0ZSk7CkBAIC01MDEsMTE0ICs1MTEsNDYgQEAKIAkJaWYgKFBhZ2VSZXNlcnZlZChwYWdlKSkKIAkJCWNvbnRpbnVlOwogCQluaWQgPSBwYWdlX3RvX25pZChwYWdlKTsKLQkJaWYgKG5vZGVfaXNzZXQobmlkLCAqbm9kZXMpID09ICEhKGZsYWdzICYgTVBPTF9NRl9JTlZFUlQpKQorCQlpZiAobm9kZV9pc3NldChuaWQsICpxcC0+bm1hc2spID09ICEhKGZsYWdzICYgTVBPTF9NRl9JTlZFUlQpKQogCQkJY29udGludWU7CiAKIAkJaWYgKGZsYWdzICYgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKQotCQkJbWlncmF0ZV9wYWdlX2FkZChwYWdlLCBwcml2YXRlLCBmbGFncyk7Ci0JCWVsc2UKLQkJCWJyZWFrOwotCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOwotCXB0ZV91bm1hcF91bmxvY2sob3JpZ19wdGUsIHB0bCk7Ci0JcmV0dXJuIGFkZHIgIT0gZW5kOworCQkJbWlncmF0ZV9wYWdlX2FkZChwYWdlLCBxcC0+cGFnZWxpc3QsIGZsYWdzKTsKKwl9CisJcHRlX3VubWFwX3VubG9jayhwdGUgLSAxLCBwdGwpOworCWNvbmRfcmVzY2hlZCgpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBxdWV1ZV9wYWdlc19odWdldGxiX3BtZF9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJcG1kX3QgKnBtZCwgY29uc3Qgbm9kZW1hc2tfdCAqbm9kZXMsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCQkJICAgIHZvaWQgKnByaXZhdGUpCitzdGF0aWMgaW50IHF1ZXVlX3BhZ2VzX2h1Z2V0bGIocHRlX3QgKnB0ZSwgdW5zaWduZWQgbG9uZyBobWFzaywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJICAgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKQogewogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKKwlzdHJ1Y3QgcXVldWVfcGFnZXMgKnFwID0gd2Fsay0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gcXAtPmZsYWdzOwogCWludCBuaWQ7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3BpbmxvY2tfdCAqcHRsOwogCXB0ZV90IGVudHJ5OwogCi0JcHRsID0gaHVnZV9wdGVfbG9jayhoc3RhdGVfdm1hKHZtYSksIHZtYS0+dm1fbW0sIChwdGVfdCAqKXBtZCk7Ci0JZW50cnkgPSBodWdlX3B0ZXBfZ2V0KChwdGVfdCAqKXBtZCk7CisJcHRsID0gaHVnZV9wdGVfbG9jayhoc3RhdGVfdm1hKHdhbGstPnZtYSksIHdhbGstPm1tLCBwdGUpOworCWVudHJ5ID0gaHVnZV9wdGVwX2dldChwdGUpOwogCWlmICghcHRlX3ByZXNlbnQoZW50cnkpKQogCQlnb3RvIHVubG9jazsKIAlwYWdlID0gcHRlX3BhZ2UoZW50cnkpOwogCW5pZCA9IHBhZ2VfdG9fbmlkKHBhZ2UpOwotCWlmIChub2RlX2lzc2V0KG5pZCwgKm5vZGVzKSA9PSAhIShmbGFncyAmIE1QT0xfTUZfSU5WRVJUKSkKKwlpZiAobm9kZV9pc3NldChuaWQsICpxcC0+bm1hc2spID09ICEhKGZsYWdzICYgTVBPTF9NRl9JTlZFUlQpKQogCQlnb3RvIHVubG9jazsKIAkvKiBXaXRoIE1QT0xfTUZfTU9WRSwgd2UgbWlncmF0ZSBvbmx5IHVuc2hhcmVkIGh1Z2VwYWdlLiAqLwogCWlmIChmbGFncyAmIChNUE9MX01GX01PVkVfQUxMKSB8fAogCSAgICAoZmxhZ3MgJiBNUE9MX01GX01PVkUgJiYgcGFnZV9tYXBjb3VudChwYWdlKSA9PSAxKSkKLQkJaXNvbGF0ZV9odWdlX3BhZ2UocGFnZSwgcHJpdmF0ZSk7CisJCWlzb2xhdGVfaHVnZV9wYWdlKHBhZ2UsIHFwLT5wYWdlbGlzdCk7CiB1bmxvY2s6CiAJc3Bpbl91bmxvY2socHRsKTsKICNlbHNlCiAJQlVHKCk7CiAjZW5kaWYKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcXVldWVfcGFnZXNfcG1kX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdWRfdCAqcHVkLAotCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQljb25zdCBub2RlbWFza190ICpub2RlcywgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJdm9pZCAqcHJpdmF0ZSkKLXsKLQlwbWRfdCAqcG1kOwotCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQotCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKLQlkbyB7Ci0JCW5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAocG1kX2h1Z2UoKnBtZCkgJiYgaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpIHsKLQkJCXF1ZXVlX3BhZ2VzX2h1Z2V0bGJfcG1kX3JhbmdlKHZtYSwgcG1kLCBub2RlcywKLQkJCQkJCWZsYWdzLCBwcml2YXRlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNwbGl0X2h1Z2VfcGFnZV9wbWQodm1hLCBhZGRyLCBwbWQpOwotCQlpZiAocG1kX25vbmVfb3JfdHJhbnNfaHVnZV9vcl9jbGVhcl9iYWQocG1kKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAocXVldWVfcGFnZXNfcHRlX3JhbmdlKHZtYSwgcG1kLCBhZGRyLCBuZXh0LCBub2RlcywKLQkJCQkgICAgZmxhZ3MsIHByaXZhdGUpKQotCQkJcmV0dXJuIC1FSU87Ci0JfSB3aGlsZSAocG1kKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHF1ZXVlX3BhZ2VzX3B1ZF9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcGdkX3QgKnBnZCwKLQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKLQkJY29uc3Qgbm9kZW1hc2tfdCAqbm9kZXMsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCXZvaWQgKnByaXZhdGUpCi17Ci0JcHVkX3QgKnB1ZDsKLQl1bnNpZ25lZCBsb25nIG5leHQ7Ci0KLQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgYWRkcik7Ci0JZG8gewotCQluZXh0ID0gcHVkX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmIChwdWRfaHVnZSgqcHVkKSAmJiBpc192bV9odWdldGxiX3BhZ2Uodm1hKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAocHVkX25vbmVfb3JfY2xlYXJfYmFkKHB1ZCkpCi0JCQljb250aW51ZTsKLQkJaWYgKHF1ZXVlX3BhZ2VzX3BtZF9yYW5nZSh2bWEsIHB1ZCwgYWRkciwgbmV4dCwgbm9kZXMsCi0JCQkJICAgIGZsYWdzLCBwcml2YXRlKSkKLQkJCXJldHVybiAtRUlPOwotCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBxdWV1ZV9wYWdlc19wZ2RfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCWNvbnN0IG5vZGVtYXNrX3QgKm5vZGVzLCB1bnNpZ25lZCBsb25nIGZsYWdzLAotCQl2b2lkICpwcml2YXRlKQotewotCXBnZF90ICpwZ2Q7Ci0JdW5zaWduZWQgbG9uZyBuZXh0OwotCi0JcGdkID0gcGdkX29mZnNldCh2bWEtPnZtX21tLCBhZGRyKTsKLQlkbyB7Ci0JCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJaWYgKHBnZF9ub25lX29yX2NsZWFyX2JhZChwZ2QpKQotCQkJY29udGludWU7Ci0JCWlmIChxdWV1ZV9wYWdlc19wdWRfcmFuZ2Uodm1hLCBwZ2QsIGFkZHIsIG5leHQsIG5vZGVzLAotCQkJCSAgICBmbGFncywgcHJpdmF0ZSkpCi0JCQlyZXR1cm4gLUVJTzsKLQl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjQxLDYgKzU4Myw0OSBAQAogfQogI2VuZGlmIC8qIENPTkZJR19OVU1BX0JBTEFOQ0lORyAqLwogCitzdGF0aWMgaW50IHF1ZXVlX3BhZ2VzX3Rlc3Rfd2Fsayh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCQlzdHJ1Y3QgbW1fd2FsayAqd2FsaykKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnZtYTsKKwlzdHJ1Y3QgcXVldWVfcGFnZXMgKnFwID0gd2Fsay0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGVuZHZtYSA9IHZtYS0+dm1fZW5kOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBxcC0+ZmxhZ3M7CisKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX1BGTk1BUCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoZW5kdm1hID4gZW5kKQorCQllbmR2bWEgPSBlbmQ7CisJaWYgKHZtYS0+dm1fc3RhcnQgPiBzdGFydCkKKwkJc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OworCisJaWYgKCEoZmxhZ3MgJiBNUE9MX01GX0RJU0NPTlRJR19PSykpIHsKKwkJaWYgKCF2bWEtPnZtX25leHQgJiYgdm1hLT52bV9lbmQgPCBlbmQpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHFwLT5wcmV2ICYmIHFwLT5wcmV2LT52bV9lbmQgPCB2bWEtPnZtX3N0YXJ0KQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcXAtPnByZXYgPSB2bWE7CisKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX1BGTk1BUCkKKwkJcmV0dXJuIDE7CisKKwlpZiAoZmxhZ3MgJiBNUE9MX01GX0xBWlkpIHsKKwkJLyogU2ltaWxhciB0byB0YXNrX251bWFfd29yaywgc2tpcCBpbmFjY2Vzc2libGUgVk1BcyAqLworCQlpZiAodm1hLT52bV9mbGFncyAmIChWTV9SRUFEIHwgVk1fRVhFQyB8IFZNX1dSSVRFKSkKKwkJCWNoYW5nZV9wcm90X251bWEodm1hLCBzdGFydCwgZW5kdm1hKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKChmbGFncyAmIE1QT0xfTUZfU1RSSUNUKSB8fAorCSAgICAoKGZsYWdzICYgKE1QT0xfTUZfTU9WRSB8IE1QT0xfTUZfTU9WRV9BTEwpKSAmJgorCSAgICAgdm1hX21pZ3JhdGFibGUodm1hKSkpCisJCS8qIHF1ZXVlIHBhZ2VzIGZyb20gY3VycmVudCB2bWEgKi8KKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CisKIC8qCiAgKiBXYWxrIHRocm91Z2ggcGFnZSB0YWJsZXMgYW5kIGNvbGxlY3QgcGFnZXMgdG8gYmUgbWlncmF0ZWQuCiAgKgpAQCAtNjUwLDUwICs2MzUsMjQgQEAKICAqLwogc3RhdGljIGludAogcXVldWVfcGFnZXNfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQljb25zdCBub2RlbWFza190ICpub2RlcywgdW5zaWduZWQgbG9uZyBmbGFncywgdm9pZCAqcHJpdmF0ZSkKKwkJbm9kZW1hc2tfdCAqbm9kZXMsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCXN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0KQogewotCWludCBlcnIgPSAwOwotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAqcHJldjsKKwlzdHJ1Y3QgcXVldWVfcGFnZXMgcXAgPSB7CisJCS5wYWdlbGlzdCA9IHBhZ2VsaXN0LAorCQkuZmxhZ3MgPSBmbGFncywKKwkJLm5tYXNrID0gbm9kZXMsCisJCS5wcmV2ID0gTlVMTCwKKwl9OworCXN0cnVjdCBtbV93YWxrIHF1ZXVlX3BhZ2VzX3dhbGsgPSB7CisJCS5odWdldGxiX2VudHJ5ID0gcXVldWVfcGFnZXNfaHVnZXRsYiwKKwkJLnBtZF9lbnRyeSA9IHF1ZXVlX3BhZ2VzX3B0ZV9yYW5nZSwKKwkJLnRlc3Rfd2FsayA9IHF1ZXVlX3BhZ2VzX3Rlc3Rfd2FsaywKKwkJLm1tID0gbW0sCisJCS5wcml2YXRlID0gJnFwLAorCX07CiAKLQl2bWEgPSBmaW5kX3ZtYShtbSwgc3RhcnQpOwotCWlmICghdm1hKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlwcmV2ID0gTlVMTDsKLQlmb3IgKDsgdm1hICYmIHZtYS0+dm1fc3RhcnQgPCBlbmQ7IHZtYSA9IHZtYS0+dm1fbmV4dCkgewotCQl1bnNpZ25lZCBsb25nIGVuZHZtYSA9IHZtYS0+dm1fZW5kOwotCi0JCWlmIChlbmR2bWEgPiBlbmQpCi0JCQllbmR2bWEgPSBlbmQ7Ci0JCWlmICh2bWEtPnZtX3N0YXJ0ID4gc3RhcnQpCi0JCQlzdGFydCA9IHZtYS0+dm1fc3RhcnQ7Ci0KLQkJaWYgKCEoZmxhZ3MgJiBNUE9MX01GX0RJU0NPTlRJR19PSykpIHsKLQkJCWlmICghdm1hLT52bV9uZXh0ICYmIHZtYS0+dm1fZW5kIDwgZW5kKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKHByZXYgJiYgcHJldi0+dm1fZW5kIDwgdm1hLT52bV9zdGFydCkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCi0JCWlmIChmbGFncyAmIE1QT0xfTUZfTEFaWSkgewotCQkJLyogU2ltaWxhciB0byB0YXNrX251bWFfd29yaywgc2tpcCBpbmFjY2Vzc2libGUgVk1BcyAqLwotCQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX0VYRUMgfCBWTV9XUklURSkpCi0JCQkJY2hhbmdlX3Byb3RfbnVtYSh2bWEsIHN0YXJ0LCBlbmR2bWEpOwotCQkJZ290byBuZXh0OwotCQl9Ci0KLQkJaWYgKChmbGFncyAmIE1QT0xfTUZfU1RSSUNUKSB8fAotCQkgICAgICgoZmxhZ3MgJiAoTVBPTF9NRl9NT1ZFIHwgTVBPTF9NRl9NT1ZFX0FMTCkpICYmCi0JCSAgICAgIHZtYV9taWdyYXRhYmxlKHZtYSkpKSB7Ci0KLQkJCWVyciA9IHF1ZXVlX3BhZ2VzX3BnZF9yYW5nZSh2bWEsIHN0YXJ0LCBlbmR2bWEsIG5vZGVzLAotCQkJCQkJZmxhZ3MsIHByaXZhdGUpOwotCQkJaWYgKGVycikKLQkJCQlicmVhazsKLQkJfQotbmV4dDoKLQkJcHJldiA9IHZtYTsKLQl9Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gd2Fsa19wYWdlX3JhbmdlKHN0YXJ0LCBlbmQsICZxdWV1ZV9wYWdlc193YWxrKTsKIH0KIAogLyoKQEAgLTE5ODgsNDMgKzE5NDcsNjMgQEAKICAqCUBvcmRlcjpPcmRlciBvZiB0aGUgR0ZQIGFsbG9jYXRpb24uCiAgKiAJQHZtYTogIFBvaW50ZXIgdG8gVk1BIG9yIE5VTEwgaWYgbm90IGF2YWlsYWJsZS4KICAqCUBhZGRyOiBWaXJ0dWFsIEFkZHJlc3Mgb2YgdGhlIGFsbG9jYXRpb24uIE11c3QgYmUgaW5zaWRlIHRoZSBWTUEuCisgKglAbm9kZTogV2hpY2ggbm9kZSB0byBwcmVmZXIgZm9yIGFsbG9jYXRpb24gKG1vZHVsbyBwb2xpY3kpLgorICoJQGh1Z2VwYWdlOiBmb3IgaHVnZXBhZ2VzIHRyeSBvbmx5IHRoZSBwcmVmZXJyZWQgbm9kZSBpZiBwb3NzaWJsZQogICoKICAqIAlUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIHBhZ2UgZnJvbSB0aGUga2VybmVsIHBhZ2UgcG9vbCBhbmQgYXBwbGllcwogICoJYSBOVU1BIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggdGhlIFZNQSBvciB0aGUgY3VycmVudCBwcm9jZXNzLgogICoJV2hlbiBWTUEgaXMgbm90IE5VTEwgY2FsbGVyIG11c3QgaG9sZCBkb3duX3JlYWQgb24gdGhlIG1tYXBfc2VtIG9mIHRoZQogICoJbW1fc3RydWN0IG9mIHRoZSBWTUEgdG8gcHJldmVudCBpdCBmcm9tIGdvaW5nIGF3YXkuIFNob3VsZCBiZSB1c2VkIGZvcgotICoJYWxsIGFsbG9jYXRpb25zIGZvciBwYWdlcyB0aGF0IHdpbGwgYmUgbWFwcGVkIGludG8KLSAqIAl1c2VyIHNwYWNlLiBSZXR1cm5zIE5VTEwgd2hlbiBubyBwYWdlIGNhbiBiZSBhbGxvY2F0ZWQuCi0gKgotICoJU2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBtbV9zZW0gb2YgdGhlIHZtYSBob2xkLgorICoJYWxsIGFsbG9jYXRpb25zIGZvciBwYWdlcyB0aGF0IHdpbGwgYmUgbWFwcGVkIGludG8gdXNlciBzcGFjZS4gUmV0dXJucworICoJTlVMTCB3aGVuIG5vIHBhZ2UgY2FuIGJlIGFsbG9jYXRlZC4KICAqLwogc3RydWN0IHBhZ2UgKgogYWxsb2NfcGFnZXNfdm1hKGdmcF90IGdmcCwgaW50IG9yZGVyLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSkKKwkJdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbm9kZSwgYm9vbCBodWdlcGFnZSkKIHsKIAlzdHJ1Y3QgbWVtcG9saWN5ICpwb2w7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgaW50IGNwdXNldF9tZW1zX2Nvb2tpZTsKKwlzdHJ1Y3Qgem9uZWxpc3QgKnpsOworCW5vZGVtYXNrX3QgKm5tYXNrOwogCiByZXRyeV9jcHVzZXQ6CiAJcG9sID0gZ2V0X3ZtYV9wb2xpY3kodm1hLCBhZGRyKTsKIAljcHVzZXRfbWVtc19jb29raWUgPSByZWFkX21lbXNfYWxsb3dlZF9iZWdpbigpOwogCi0JaWYgKHVubGlrZWx5KHBvbC0+bW9kZSA9PSBNUE9MX0lOVEVSTEVBVkUpKSB7CisJaWYgKHVubGlrZWx5KElTX0VOQUJMRUQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmJiBodWdlcGFnZSAmJgorCQkJCQlwb2wtPm1vZGUgIT0gTVBPTF9JTlRFUkxFQVZFKSkgeworCQkvKgorCQkgKiBGb3IgaHVnZXBhZ2UgYWxsb2NhdGlvbiBhbmQgbm9uLWludGVybGVhdmUgcG9saWN5IHdoaWNoCisJCSAqIGFsbG93cyB0aGUgY3VycmVudCBub2RlLCB3ZSBvbmx5IHRyeSB0byBhbGxvY2F0ZSBmcm9tIHRoZQorCQkgKiBjdXJyZW50IG5vZGUgYW5kIGRvbid0IGZhbGwgYmFjayB0byBvdGhlciBub2RlcywgYXMgdGhlCisJCSAqIGNvc3Qgb2YgcmVtb3RlIGFjY2Vzc2VzIHdvdWxkIGxpa2VseSBvZmZzZXQgVEhQIGJlbmVmaXRzLgorCQkgKgorCQkgKiBJZiB0aGUgcG9saWN5IGlzIGludGVybGVhdmUsIG9yIGRvZXMgbm90IGFsbG93IHRoZSBjdXJyZW50CisJCSAqIG5vZGUgaW4gaXRzIG5vZGVtYXNrLCB3ZSBhbGxvY2F0ZSB0aGUgc3RhbmRhcmQgd2F5LgorCQkgKi8KKwkJbm1hc2sgPSBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wpOworCQlpZiAoIW5tYXNrIHx8IG5vZGVfaXNzZXQobm9kZSwgKm5tYXNrKSkgeworCQkJbXBvbF9jb25kX3B1dChwb2wpOworCQkJcGFnZSA9IGFsbG9jX3BhZ2VzX2V4YWN0X25vZGUobm9kZSwgZ2ZwLCBvcmRlcik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWlmIChwb2wtPm1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFKSB7CiAJCXVuc2lnbmVkIG5pZDsKIAogCQluaWQgPSBpbnRlcmxlYXZlX25pZChwb2wsIHZtYSwgYWRkciwgUEFHRV9TSElGVCArIG9yZGVyKTsKIAkJbXBvbF9jb25kX3B1dChwb2wpOwogCQlwYWdlID0gYWxsb2NfcGFnZV9pbnRlcmxlYXZlKGdmcCwgb3JkZXIsIG5pZCk7Ci0JCWlmICh1bmxpa2VseSghcGFnZSAmJiByZWFkX21lbXNfYWxsb3dlZF9yZXRyeShjcHVzZXRfbWVtc19jb29raWUpKSkKLQkJCWdvdG8gcmV0cnlfY3B1c2V0OwotCi0JCXJldHVybiBwYWdlOworCQlnb3RvIG91dDsKIAl9Ci0JcGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9kZW1hc2soZ2ZwLCBvcmRlciwKLQkJCQkgICAgICBwb2xpY3lfem9uZWxpc3QoZ2ZwLCBwb2wsIG5vZGUpLAotCQkJCSAgICAgIHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCkpOworCisJbm1hc2sgPSBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wpOworCXpsID0gcG9saWN5X3pvbmVsaXN0KGdmcCwgcG9sLCBub2RlKTsKIAltcG9sX2NvbmRfcHV0KHBvbCk7CisJcGFnZSA9IF9fYWxsb2NfcGFnZXNfbm9kZW1hc2soZ2ZwLCBvcmRlciwgemwsIG5tYXNrKTsKK291dDoKIAlpZiAodW5saWtlbHkoIXBhZ2UgJiYgcmVhZF9tZW1zX2FsbG93ZWRfcmV0cnkoY3B1c2V0X21lbXNfY29va2llKSkpCiAJCWdvdG8gcmV0cnlfY3B1c2V0OwogCXJldHVybiBwYWdlOwpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDM0NGNkZjYuLmY5ODA2N2UgMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTE3OSwzNyArMTc5LDYgQEAKIH0KIAogLyoKLSAqIENvbmdyYXR1bGF0aW9ucyB0byB0cmluaXR5IGZvciBkaXNjb3ZlcmluZyB0aGlzIGJ1Zy4KLSAqIG1tL2ZyZW1hcC5jJ3MgcmVtYXBfZmlsZV9wYWdlcygpIGFjY2VwdHMgYW55IHJhbmdlIHdpdGhpbiBhIHNpbmdsZSB2bWEgdG8KLSAqIGNvbnZlcnQgdGhhdCB2bWEgdG8gVk1fTk9OTElORUFSOyBhbmQgZ2VuZXJpY19maWxlX3JlbWFwX3BhZ2VzKCkgd2lsbCB0aGVuCi0gKiByZXBsYWNlIHRoZSBzcGVjaWZpZWQgcmFuZ2UgYnkgZmlsZSBwdGVzIHRocm91Z2hvdXQgKG1heWJlIHBvcHVsYXRlZCBhZnRlcikuCi0gKiBJZiBwYWdlIG1pZ3JhdGlvbiBmaW5kcyBhIHBhZ2Ugd2l0aGluIHRoYXQgcmFuZ2UsIHdoaWxlIGl0J3Mgc3RpbGwgbG9jYXRlZAotICogYnkgdm1hX2ludGVydmFsX3RyZWUgcmF0aGVyIHRoYW4gbG9zdCB0byBpX21tYXBfbm9ubGluZWFyIGxpc3QsIG5vIHByb2JsZW06Ci0gKiB6YXBfcHRlKCkgY2xlYXJzIHRoZSB0ZW1wb3JhcnkgbWlncmF0aW9uIGVudHJ5IGJlZm9yZSBtbWFwX3NlbSBpcyBkcm9wcGVkLgotICogQnV0IGlmIHRoZSBtaWdyYXRpbmcgcGFnZSBpcyBpbiBhIHBhcnQgb2YgdGhlIHZtYSBvdXRzaWRlIHRoZSByYW5nZSB0byBiZQotICogcmVtYXBwZWQsIHRoZW4gaXQgd2lsbCBub3QgYmUgY2xlYXJlZCwgYW5kIHJlbW92ZV9taWdyYXRpb25fcHRlcygpIG5lZWRzIHRvCi0gKiBkZWFsIHdpdGggaXQuICBGb3J0dW5hdGVseSwgdGhpcyBwYXJ0IG9mIHRoZSB2bWEgaXMgb2YgY291cnNlIHN0aWxsIGxpbmVhciwKLSAqIHNvIHdlIGp1c3QgbmVlZCB0byB1c2UgbGluZWFyIGxvY2F0aW9uIG9uIHRoZSBub25saW5lYXIgbGlzdC4KLSAqLwotc3RhdGljIGludCByZW1vdmVfbGluZWFyX21pZ3JhdGlvbl9wdGVzX2Zyb21fbm9ubGluZWFyKHN0cnVjdCBwYWdlICpwYWdlLAotCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgdm9pZCAqYXJnKQotewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCS8qIGh1Z2V0bGJmcyBkb2VzIG5vdCBzdXBwb3J0IHJlbWFwX3BhZ2VzLCBzbyBubyBodWdlIHBnb2ZmIHdvcnJpZXMgKi8KLQlwZ29mZl90IHBnb2ZmID0gcGFnZS0+aW5kZXggPDwgKFBBR0VfQ0FDSEVfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwKLQkJJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIsIHNoYXJlZC5ub25saW5lYXIpIHsKLQotCQlhZGRyID0gdm1hLT52bV9zdGFydCArICgocGdvZmYgLSB2bWEtPnZtX3Bnb2ZmKSA8PCBQQUdFX1NISUZUKTsKLQkJaWYgKGFkZHIgPj0gdm1hLT52bV9zdGFydCAmJiBhZGRyIDwgdm1hLT52bV9lbmQpCi0JCQlyZW1vdmVfbWlncmF0aW9uX3B0ZShwYWdlLCB2bWEsIGFkZHIsIGFyZyk7Ci0JfQotCXJldHVybiBTV0FQX0FHQUlOOwotfQotCi0vKgogICogR2V0IHJpZCBvZiBhbGwgbWlncmF0aW9uIGVudHJpZXMgYW5kIHJlcGxhY2UgdGhlbSBieQogICogcmVmZXJlbmNlcyB0byB0aGUgaW5kaWNhdGVkIHBhZ2UuCiAgKi8KQEAgLTIxOCw3ICsxODcsNiBAQAogCXN0cnVjdCBybWFwX3dhbGtfY29udHJvbCByd2MgPSB7CiAJCS5ybWFwX29uZSA9IHJlbW92ZV9taWdyYXRpb25fcHRlLAogCQkuYXJnID0gb2xkLAotCQkuZmlsZV9ub25saW5lYXIgPSByZW1vdmVfbGluZWFyX21pZ3JhdGlvbl9wdGVzX2Zyb21fbm9ubGluZWFyLAogCX07CiAKIAlybWFwX3dhbGsobmV3LCAmcndjKTsKQEAgLTIyOSw3ICsxOTcsNyBAQAogICogZ2V0IHRvIHRoZSBwYWdlIGFuZCB3YWl0IHVudGlsIG1pZ3JhdGlvbiBpcyBmaW5pc2hlZC4KICAqIFdoZW4gd2UgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiB0aGUgZmF1bHQgd2lsbCBiZSByZXRyaWVkLgogICovCi1zdGF0aWMgdm9pZCBfX21pZ3JhdGlvbl9lbnRyeV93YWl0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwdGVfdCAqcHRlcCwKK3ZvaWQgX19taWdyYXRpb25fZW50cnlfd2FpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcHRlX3QgKnB0ZXAsCiAJCQkJc3BpbmxvY2tfdCAqcHRsKQogewogCXB0ZV90IHB0ZTsKQEAgLTEyNjgsNyArMTIzNiw4IEBACiAJCQlnb3RvIHB1dF9hbmRfc2V0OwogCiAJCWlmIChQYWdlSHVnZShwYWdlKSkgewotCQkJaXNvbGF0ZV9odWdlX3BhZ2UocGFnZSwgJnBhZ2VsaXN0KTsKKwkJCWlmIChQYWdlSGVhZChwYWdlKSkKKwkJCQlpc29sYXRlX2h1Z2VfcGFnZShwYWdlLCAmcGFnZWxpc3QpOwogCQkJZ290byBwdXRfYW5kX3NldDsKIAkJfQogCmRpZmYgLS1naXQgYS9tbS9taW5jb3JlLmMgYi9tbS9taW5jb3JlLmMKaW5kZXggYzhjNTI4Yi4uYmUyNWVmZCAxMDA2NDQKLS0tIGEvbW0vbWluY29yZS5jCisrKyBiL21tL21pbmNvcmUuYwpAQCAtMTksMzggKzE5LDI1IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCi1zdGF0aWMgdm9pZCBtaW5jb3JlX2h1Z2V0bGJfcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQkJCXVuc2lnbmVkIGNoYXIgKnZlYykKK3N0YXRpYyBpbnQgbWluY29yZV9odWdldGxiKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgaG1hc2ssIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCXVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbW1fd2FsayAqd2FsaykKIHsKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCi0Jc3RydWN0IGhzdGF0ZSAqaDsKKwl1bnNpZ25lZCBjaGFyIHByZXNlbnQ7CisJdW5zaWduZWQgY2hhciAqdmVjID0gd2Fsay0+cHJpdmF0ZTsKIAotCWggPSBoc3RhdGVfdm1hKHZtYSk7Ci0Jd2hpbGUgKDEpIHsKLQkJdW5zaWduZWQgY2hhciBwcmVzZW50OwotCQlwdGVfdCAqcHRlcDsKLQkJLyoKLQkJICogSHVnZSBwYWdlcyBhcmUgYWx3YXlzIGluIFJBTSBmb3Igbm93LCBidXQKLQkJICogdGhlb3JldGljYWxseSBpdCBuZWVkcyB0byBiZSBjaGVja2VkLgotCQkgKi8KLQkJcHRlcCA9IGh1Z2VfcHRlX29mZnNldChjdXJyZW50LT5tbSwKLQkJCQkgICAgICAgYWRkciAmIGh1Z2VfcGFnZV9tYXNrKGgpKTsKLQkJcHJlc2VudCA9IHB0ZXAgJiYgIWh1Z2VfcHRlX25vbmUoaHVnZV9wdGVwX2dldChwdGVwKSk7Ci0JCXdoaWxlICgxKSB7Ci0JCQkqdmVjID0gcHJlc2VudDsKLQkJCXZlYysrOwotCQkJYWRkciArPSBQQUdFX1NJWkU7Ci0JCQlpZiAoYWRkciA9PSBlbmQpCi0JCQkJcmV0dXJuOwotCQkJLyogY2hlY2sgaHVnZXBhZ2UgYm9yZGVyICovCi0JCQlpZiAoIShhZGRyICYgfmh1Z2VfcGFnZV9tYXNrKGgpKSkKLQkJCQlicmVhazsKLQkJfQotCX0KKwkvKgorCSAqIEh1Z2VwYWdlcyB1bmRlciB1c2VyIHByb2Nlc3MgYXJlIGFsd2F5cyBpbiBSQU0gYW5kIG5ldmVyCisJICogc3dhcHBlZCBvdXQsIGJ1dCB0aGVvcmV0aWNhbGx5IGl0IG5lZWRzIHRvIGJlIGNoZWNrZWQuCisJICovCisJcHJlc2VudCA9IHB0ZSAmJiAhaHVnZV9wdGVfbm9uZShodWdlX3B0ZXBfZ2V0KHB0ZSkpOworCWZvciAoOyBhZGRyICE9IGVuZDsgdmVjKyssIGFkZHIgKz0gUEFHRV9TSVpFKQorCQkqdmVjID0gcHJlc2VudDsKKwl3YWxrLT5wcml2YXRlID0gdmVjOwogI2Vsc2UKIAlCVUcoKTsKICNlbmRpZgorCXJldHVybiAwOwogfQogCiAvKgpAQCAtOTQsOSArODEsOCBAQAogCXJldHVybiBwcmVzZW50OwogfQogCi1zdGF0aWMgdm9pZCBtaW5jb3JlX3VubWFwcGVkX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQkJdW5zaWduZWQgY2hhciAqdmVjKQorc3RhdGljIGludCBfX21pbmNvcmVfdW5tYXBwZWRfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgY2hhciAqdmVjKQogewogCXVuc2lnbmVkIGxvbmcgbnIgPSAoZW5kIC0gYWRkcikgPj4gUEFHRV9TSElGVDsKIAlpbnQgaTsKQEAgLTExMSwzMCArOTcsNDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCiAJCQl2ZWNbaV0gPSAwOwogCX0KKwlyZXR1cm4gbnI7CiB9CiAKLXN0YXRpYyB2b2lkIG1pbmNvcmVfcHRlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLAotCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKLQkJCXVuc2lnbmVkIGNoYXIgKnZlYykKK3N0YXRpYyBpbnQgbWluY29yZV91bm1hcHBlZF9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCSAgIHN0cnVjdCBtbV93YWxrICp3YWxrKQogewotCXVuc2lnbmVkIGxvbmcgbmV4dDsKKwl3YWxrLT5wcml2YXRlICs9IF9fbWluY29yZV91bm1hcHBlZF9yYW5nZShhZGRyLCBlbmQsCisJCQkJCQkgIHdhbGstPnZtYSwgd2Fsay0+cHJpdmF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWluY29yZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCXN0cnVjdCBtbV93YWxrICp3YWxrKQorewogCXNwaW5sb2NrX3QgKnB0bDsKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnZtYTsKIAlwdGVfdCAqcHRlcDsKKwl1bnNpZ25lZCBjaGFyICp2ZWMgPSB3YWxrLT5wcml2YXRlOworCWludCBuciA9IChlbmQgLSBhZGRyKSA+PiBQQUdFX1NISUZUOwogCi0JcHRlcCA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLT52bV9tbSwgcG1kLCBhZGRyLCAmcHRsKTsKLQlkbyB7CisJaWYgKHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEsICZwdGwpID09IDEpIHsKKwkJbWVtc2V0KHZlYywgMSwgbnIpOworCQlzcGluX3VubG9jayhwdGwpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocG1kX3RyYW5zX3Vuc3RhYmxlKHBtZCkpIHsKKwkJX19taW5jb3JlX3VubWFwcGVkX3JhbmdlKGFkZHIsIGVuZCwgdm1hLCB2ZWMpOworCQlnb3RvIG91dDsKKwl9CisKKwlwdGVwID0gcHRlX29mZnNldF9tYXBfbG9jayh3YWxrLT5tbSwgcG1kLCBhZGRyLCAmcHRsKTsKKwlmb3IgKDsgYWRkciAhPSBlbmQ7IHB0ZXArKywgYWRkciArPSBQQUdFX1NJWkUpIHsKIAkJcHRlX3QgcHRlID0gKnB0ZXA7Ci0JCXBnb2ZmX3QgcGdvZmY7CiAKLQkJbmV4dCA9IGFkZHIgKyBQQUdFX1NJWkU7CiAJCWlmIChwdGVfbm9uZShwdGUpKQotCQkJbWluY29yZV91bm1hcHBlZF9yYW5nZSh2bWEsIGFkZHIsIG5leHQsIHZlYyk7CisJCQlfX21pbmNvcmVfdW5tYXBwZWRfcmFuZ2UoYWRkciwgYWRkciArIFBBR0VfU0laRSwKKwkJCQkJCSB2bWEsIHZlYyk7CiAJCWVsc2UgaWYgKHB0ZV9wcmVzZW50KHB0ZSkpCiAJCQkqdmVjID0gMTsKLQkJZWxzZSBpZiAocHRlX2ZpbGUocHRlKSkgewotCQkJcGdvZmYgPSBwdGVfdG9fcGdvZmYocHRlKTsKLQkJCSp2ZWMgPSBtaW5jb3JlX3BhZ2Uodm1hLT52bV9maWxlLT5mX21hcHBpbmcsIHBnb2ZmKTsKLQkJfSBlbHNlIHsgLyogcHRlIGlzIGEgc3dhcCBlbnRyeSAqLworCQllbHNlIHsgLyogcHRlIGlzIGEgc3dhcCBlbnRyeSAqLwogCQkJc3dwX2VudHJ5X3QgZW50cnkgPSBwdGVfdG9fc3dwX2VudHJ5KHB0ZSk7CiAKIAkJCWlmIChub25fc3dhcF9lbnRyeShlbnRyeSkpIHsKQEAgLTE0NSw5ICsxNDgsOCBAQAogCQkJCSp2ZWMgPSAxOwogCQkJfSBlbHNlIHsKICNpZmRlZiBDT05GSUdfU1dBUAotCQkJCXBnb2ZmID0gZW50cnkudmFsOwogCQkJCSp2ZWMgPSBtaW5jb3JlX3BhZ2Uoc3dhcF9hZGRyZXNzX3NwYWNlKGVudHJ5KSwKLQkJCQkJcGdvZmYpOworCQkJCQllbnRyeS52YWwpOwogI2Vsc2UKIAkJCQlXQVJOX09OKDEpOwogCQkJCSp2ZWMgPSAxOwpAQCAtMTU1LDY5ICsxNTcsMTIgQEAKIAkJCX0KIAkJfQogCQl2ZWMrKzsKLQl9IHdoaWxlIChwdGVwKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CisJfQogCXB0ZV91bm1hcF91bmxvY2socHRlcCAtIDEsIHB0bCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1pbmNvcmVfcG1kX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdWRfdCAqcHVkLAotCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKLQkJCXVuc2lnbmVkIGNoYXIgKnZlYykKLXsKLQl1bnNpZ25lZCBsb25nIG5leHQ7Ci0JcG1kX3QgKnBtZDsKLQotCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKLQlkbyB7Ci0JCW5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJaWYgKHBtZF90cmFuc19odWdlKCpwbWQpKSB7Ci0JCQlpZiAobWluY29yZV9odWdlX3BtZCh2bWEsIHBtZCwgYWRkciwgbmV4dCwgdmVjKSkgewotCQkJCXZlYyArPSAobmV4dCAtIGFkZHIpID4+IFBBR0VfU0hJRlQ7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJfQotCQlpZiAocG1kX25vbmVfb3JfdHJhbnNfaHVnZV9vcl9jbGVhcl9iYWQocG1kKSkKLQkJCW1pbmNvcmVfdW5tYXBwZWRfcmFuZ2Uodm1hLCBhZGRyLCBuZXh0LCB2ZWMpOwotCQllbHNlCi0JCQltaW5jb3JlX3B0ZV9yYW5nZSh2bWEsIHBtZCwgYWRkciwgbmV4dCwgdmVjKTsKLQkJdmVjICs9IChuZXh0IC0gYWRkcikgPj4gUEFHRV9TSElGVDsKLQl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKLX0KLQotc3RhdGljIHZvaWQgbWluY29yZV9wdWRfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBnZF90ICpwZ2QsCi0JCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAotCQkJdW5zaWduZWQgY2hhciAqdmVjKQotewotCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQlwdWRfdCAqcHVkOwotCi0JcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOwotCWRvIHsKLQkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlpZiAocHVkX25vbmVfb3JfY2xlYXJfYmFkKHB1ZCkpCi0JCQltaW5jb3JlX3VubWFwcGVkX3JhbmdlKHZtYSwgYWRkciwgbmV4dCwgdmVjKTsKLQkJZWxzZQotCQkJbWluY29yZV9wbWRfcmFuZ2Uodm1hLCBwdWQsIGFkZHIsIG5leHQsIHZlYyk7Ci0JCXZlYyArPSAobmV4dCAtIGFkZHIpID4+IFBBR0VfU0hJRlQ7Ci0JfSB3aGlsZSAocHVkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1pbmNvcmVfcGFnZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCi0JCQl1bnNpZ25lZCBjaGFyICp2ZWMpCi17Ci0JdW5zaWduZWQgbG9uZyBuZXh0OwotCXBnZF90ICpwZ2Q7Ci0KLQlwZ2QgPSBwZ2Rfb2Zmc2V0KHZtYS0+dm1fbW0sIGFkZHIpOwotCWRvIHsKLQkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCQlpZiAocGdkX25vbmVfb3JfY2xlYXJfYmFkKHBnZCkpCi0JCQltaW5jb3JlX3VubWFwcGVkX3JhbmdlKHZtYSwgYWRkciwgbmV4dCwgdmVjKTsKLQkJZWxzZQotCQkJbWluY29yZV9wdWRfcmFuZ2Uodm1hLCBwZ2QsIGFkZHIsIG5leHQsIHZlYyk7Ci0JCXZlYyArPSAobmV4dCAtIGFkZHIpID4+IFBBR0VfU0hJRlQ7Ci0JfSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7CitvdXQ6CisJd2Fsay0+cHJpdmF0ZSArPSBucjsKKwljb25kX3Jlc2NoZWQoKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTIyOSwxOCArMTc0LDIyIEBACiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJdW5zaWduZWQgbG9uZyBlbmQ7CisJaW50IGVycjsKKwlzdHJ1Y3QgbW1fd2FsayBtaW5jb3JlX3dhbGsgPSB7CisJCS5wbWRfZW50cnkgPSBtaW5jb3JlX3B0ZV9yYW5nZSwKKwkJLnB0ZV9ob2xlID0gbWluY29yZV91bm1hcHBlZF9yYW5nZSwKKwkJLmh1Z2V0bGJfZW50cnkgPSBtaW5jb3JlX2h1Z2V0bGIsCisJCS5wcml2YXRlID0gdmVjLAorCX07CiAKIAl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcik7CiAJaWYgKCF2bWEgfHwgYWRkciA8IHZtYS0+dm1fc3RhcnQpCiAJCXJldHVybiAtRU5PTUVNOwotCisJbWluY29yZV93YWxrLm1tID0gdm1hLT52bV9tbTsKIAllbmQgPSBtaW4odm1hLT52bV9lbmQsIGFkZHIgKyAocGFnZXMgPDwgUEFHRV9TSElGVCkpOwotCi0JaWYgKGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKQotCQltaW5jb3JlX2h1Z2V0bGJfcGFnZV9yYW5nZSh2bWEsIGFkZHIsIGVuZCwgdmVjKTsKLQllbHNlCi0JCW1pbmNvcmVfcGFnZV9yYW5nZSh2bWEsIGFkZHIsIGVuZCwgdmVjKTsKLQorCWVyciA9IHdhbGtfcGFnZV9yYW5nZShhZGRyLCBlbmQsICZtaW5jb3JlX3dhbGspOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCXJldHVybiAoZW5kIC0gYWRkcikgPj4gUEFHRV9TSElGVDsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IDdmNjg0ZDUuLmRhOTk5MGEgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogICovCiBpbnQgX192bV9lbm91Z2hfbWVtb3J5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBsb25nIHBhZ2VzLCBpbnQgY2FwX3N5c19hZG1pbikKIHsKLQl1bnNpZ25lZCBsb25nIGZyZWUsIGFsbG93ZWQsIHJlc2VydmU7CisJbG9uZyBmcmVlLCBhbGxvd2VkLCByZXNlcnZlOwogCiAJVk1fV0FSTl9PTkNFKHBlcmNwdV9jb3VudGVyX3JlYWQoJnZtX2NvbW1pdHRlZF9hcykgPAogCQkJLShzNjQpdm1fY29tbWl0dGVkX2FzX2JhdGNoICogbnVtX29ubGluZV9jcHVzKCksCkBAIC0yMjAsNyArMjIwLDcgQEAKIAkgKi8KIAlpZiAobW0pIHsKIAkJcmVzZXJ2ZSA9IHN5c2N0bF91c2VyX3Jlc2VydmVfa2J5dGVzID4+IChQQUdFX1NISUZUIC0gMTApOwotCQlhbGxvd2VkIC09IG1pbihtbS0+dG90YWxfdm0gLyAzMiwgcmVzZXJ2ZSk7CisJCWFsbG93ZWQgLT0gbWluX3QobG9uZywgbW0tPnRvdGFsX3ZtIC8gMzIsIHJlc2VydmUpOwogCX0KIAogCWlmIChwZXJjcHVfY291bnRlcl9yZWFkX3Bvc2l0aXZlKCZ2bV9jb21taXR0ZWRfYXMpIDwgYWxsb3dlZCkKQEAgLTI0MywxMCArMjQzLDcgQEAKIAkJbWFwcGluZ191bm1hcF93cml0YWJsZShtYXBwaW5nKTsKIAogCWZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZyk7Ci0JaWYgKHVubGlrZWx5KHZtYS0+dm1fZmxhZ3MgJiBWTV9OT05MSU5FQVIpKQotCQlsaXN0X2RlbF9pbml0KCZ2bWEtPnNoYXJlZC5ub25saW5lYXIpOwotCWVsc2UKLQkJdm1hX2ludGVydmFsX3RyZWVfcmVtb3ZlKHZtYSwgJm1hcHBpbmctPmlfbW1hcCk7CisJdm1hX2ludGVydmFsX3RyZWVfcmVtb3ZlKHZtYSwgJm1hcHBpbmctPmlfbW1hcCk7CiAJZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpOwogfQogCkBAIC02NDksMTAgKzY0Niw3IEBACiAJCQlhdG9taWNfaW5jKCZtYXBwaW5nLT5pX21tYXBfd3JpdGFibGUpOwogCiAJCWZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZyk7Ci0JCWlmICh1bmxpa2VseSh2bWEtPnZtX2ZsYWdzICYgVk1fTk9OTElORUFSKSkKLQkJCXZtYV9ub25saW5lYXJfaW5zZXJ0KHZtYSwgJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIpOwotCQllbHNlCi0JCQl2bWFfaW50ZXJ2YWxfdHJlZV9pbnNlcnQodm1hLCAmbWFwcGluZy0+aV9tbWFwKTsKKwkJdm1hX2ludGVydmFsX3RyZWVfaW5zZXJ0KHZtYSwgJm1hcHBpbmctPmlfbW1hcCk7CiAJCWZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKTsKIAl9CiB9CkBAIC03ODksMTQgKzc4MywxMSBAQAogCiAJaWYgKGZpbGUpIHsKIAkJbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKLQkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX05PTkxJTkVBUikpIHsKLQkJCXJvb3QgPSAmbWFwcGluZy0+aV9tbWFwOwotCQkJdXByb2JlX211bm1hcCh2bWEsIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kKTsKKwkJcm9vdCA9ICZtYXBwaW5nLT5pX21tYXA7CisJCXVwcm9iZV9tdW5tYXAodm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7CiAKLQkJCWlmIChhZGp1c3RfbmV4dCkKLQkJCQl1cHJvYmVfbXVubWFwKG5leHQsIG5leHQtPnZtX3N0YXJ0LAotCQkJCQkJCW5leHQtPnZtX2VuZCk7Ci0JCX0KKwkJaWYgKGFkanVzdF9uZXh0KQorCQkJdXByb2JlX211bm1hcChuZXh0LCBuZXh0LT52bV9zdGFydCwgbmV4dC0+dm1fZW5kKTsKIAogCQlpX21tYXBfbG9ja193cml0ZShtYXBwaW5nKTsKIAkJaWYgKGluc2VydCkgewpAQCAtMjYzNCw2ICsyNjI1LDc1IEBACiAJcmV0dXJuIHZtX211bm1hcChhZGRyLCBsZW4pOwogfQogCisKKy8qCisgKiBFbXVsYXRpb24gb2YgZGVwcmVjYXRlZCByZW1hcF9maWxlX3BhZ2VzKCkgc3lzY2FsbC4KKyAqLworU1lTQ0FMTF9ERUZJTkU1KHJlbWFwX2ZpbGVfcGFnZXMsIHVuc2lnbmVkIGxvbmcsIHN0YXJ0LCB1bnNpZ25lZCBsb25nLCBzaXplLAorCQl1bnNpZ25lZCBsb25nLCBwcm90LCB1bnNpZ25lZCBsb25nLCBwZ29mZiwgdW5zaWduZWQgbG9uZywgZmxhZ3MpCit7CisKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGxvbmcgcG9wdWxhdGUgPSAwOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gLUVJTlZBTDsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKworCXByX3dhcm5fb25jZSgiJXMgKCVkKSB1c2VzIGRlcHJlY2F0ZWQgcmVtYXBfZmlsZV9wYWdlcygpIHN5c2NhbGwuICIKKwkJCSJTZWUgRG9jdW1lbnRhdGlvbi92bS9yZW1hcF9maWxlX3BhZ2VzLnR4dC5cbiIsCisJCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQpOworCisJaWYgKHByb3QpCisJCXJldHVybiByZXQ7CisJc3RhcnQgPSBzdGFydCAmIFBBR0VfTUFTSzsKKwlzaXplID0gc2l6ZSAmIFBBR0VfTUFTSzsKKworCWlmIChzdGFydCArIHNpemUgPD0gc3RhcnQpCisJCXJldHVybiByZXQ7CisKKwkvKiBEb2VzIHBnb2ZmIHdyYXA/ICovCisJaWYgKHBnb2ZmICsgKHNpemUgPj4gUEFHRV9TSElGVCkgPCBwZ29mZikKKwkJcmV0dXJuIHJldDsKKworCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJdm1hID0gZmluZF92bWEobW0sIHN0YXJ0KTsKKworCWlmICghdm1hIHx8ICEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkpCisJCWdvdG8gb3V0OworCisJaWYgKHN0YXJ0IDwgdm1hLT52bV9zdGFydCB8fCBzdGFydCArIHNpemUgPiB2bWEtPnZtX2VuZCkKKwkJZ290byBvdXQ7CisKKwlpZiAocGdvZmYgPT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBzdGFydCkpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJcHJvdCB8PSB2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCA/IFBST1RfUkVBRCA6IDA7CisJcHJvdCB8PSB2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUgPyBQUk9UX1dSSVRFIDogMDsKKwlwcm90IHw9IHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDID8gUFJPVF9FWEVDIDogMDsKKworCWZsYWdzICY9IE1BUF9OT05CTE9DSzsKKwlmbGFncyB8PSBNQVBfU0hBUkVEIHwgTUFQX0ZJWEVEIHwgTUFQX1BPUFVMQVRFOworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CisJCWZsYWdzIHw9IE1BUF9MT0NLRUQ7CisJCS8qIGRyb3AgUEdfTWxvY2tlZCBmbGFnIGZvciBvdmVyLW1hcHBlZCByYW5nZSAqLworCQltdW5sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIHN0YXJ0LCBzdGFydCArIHNpemUpOworCX0KKworCWZpbGUgPSBnZXRfZmlsZSh2bWEtPnZtX2ZpbGUpOworCXJldCA9IGRvX21tYXBfcGdvZmYodm1hLT52bV9maWxlLCBzdGFydCwgc2l6ZSwKKwkJCXByb3QsIGZsYWdzLCBwZ29mZiwgJnBvcHVsYXRlKTsKKwlmcHV0KGZpbGUpOworb3V0OgorCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCWlmIChwb3B1bGF0ZSkKKwkJbW1fcG9wdWxhdGUocmV0LCBwb3B1bGF0ZSk7CisJaWYgKCFJU19FUlJfVkFMVUUocmV0KSkKKwkJcmV0ID0gMDsKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgdmVyaWZ5X21tX3dyaXRlbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogI2lmZGVmIENPTkZJR19ERUJVR19WTQpAQCAtMjc5MSw5ICsyODUxLDYgQEAKIAkJdm1hID0gcmVtb3ZlX3ZtYSh2bWEpOwogCX0KIAl2bV91bmFjY3RfbWVtb3J5KG5yX2FjY291bnRlZCk7Ci0KLQlXQVJOX09OKGF0b21pY19sb25nX3JlYWQoJm1tLT5ucl9wdGVzKSA+Ci0JCQkoRklSU1RfVVNFUl9BRERSRVNTK1BNRF9TSVpFLTEpPj5QTURfU0hJRlQpOwogfQogCiAvKiBJbnNlcnQgdm0gc3RydWN0dXJlIGludG8gcHJvY2VzcyBsaXN0IHNvcnRlZCBieSBhZGRyZXNzCkBAIC0zMTA4LDggKzMxNjUsNyBAQAogICoKICAqIG1tYXBfc2VtIGluIHdyaXRlIG1vZGUgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gYmxvY2sgYWxsIG9wZXJhdGlvbnMKICAqIHRoYXQgY291bGQgbW9kaWZ5IHBhZ2V0YWJsZXMgYW5kIGZyZWUgcGFnZXMgd2l0aG91dCBuZWVkIG9mCi0gKiBhbHRlcmluZyB0aGUgdm1hIGxheW91dCAoZm9yIGV4YW1wbGUgcG9wdWxhdGVfcmFuZ2UoKSB3aXRoCi0gKiBub25saW5lYXIgdm1hcykuIEl0J3MgYWxzbyBuZWVkZWQgaW4gd3JpdGUgbW9kZSB0byBhdm9pZCBuZXcKKyAqIGFsdGVyaW5nIHRoZSB2bWEgbGF5b3V0LiBJdCdzIGFsc28gbmVlZGVkIGluIHdyaXRlIG1vZGUgdG8gYXZvaWQgbmV3CiAgKiBhbm9uX3ZtYXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIGV4aXN0aW5nIHZtYXMuCiAgKgogICogQSBzaW5nbGUgdGFzayBjYW4ndCB0YWtlIG1vcmUgdGhhbiBvbmUgbW1fdGFrZV9hbGxfbG9ja3MoKSBpbiBhIHJvdwpkaWZmIC0tZ2l0IGEvbW0vbW16b25lLmMgYi9tbS9tbXpvbmUuYwppbmRleCBiZjM0ZmI4Li43ZDg3ZWJiIDEwMDY0NAotLS0gYS9tbS9tbXpvbmUuYworKysgYi9tbS9tbXpvbmUuYwpAQCAtNTQsOCArNTQsNyBAQAogLyogUmV0dXJucyB0aGUgbmV4dCB6b25lIGF0IG9yIGJlbG93IGhpZ2hlc3Rfem9uZWlkeCBpbiBhIHpvbmVsaXN0ICovCiBzdHJ1Y3Qgem9uZXJlZiAqbmV4dF96b25lc196b25lbGlzdChzdHJ1Y3Qgem9uZXJlZiAqeiwKIAkJCQkJZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4LAotCQkJCQlub2RlbWFza190ICpub2RlcywKLQkJCQkJc3RydWN0IHpvbmUgKip6b25lKQorCQkJCQlub2RlbWFza190ICpub2RlcykKIHsKIAkvKgogCSAqIEZpbmQgdGhlIG5leHQgc3VpdGFibGUgem9uZSB0byB1c2UgZm9yIHRoZSBhbGxvY2F0aW9uLgpAQCAtNjksNyArNjgsNiBAQAogCQkJCSh6LT56b25lICYmICF6cmVmX2luX25vZGVtYXNrKHosIG5vZGVzKSkpCiAJCQl6Kys7CiAKLQkqem9uZSA9IHpvbmVsaXN0X3pvbmUoeik7CiAJcmV0dXJuIHo7CiB9CiAKZGlmZiAtLWdpdCBhL21tL21wcm90ZWN0LmMgYi9tbS9tcHJvdGVjdC5jCmluZGV4IGFjZTkzNDUuLjMzMTIxNjYgMTAwNjQ0Ci0tLSBhL21tL21wcm90ZWN0LmMKKysrIGIvbW0vbXByb3RlY3QuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJCQl9CiAJCQlpZiAodXBkYXRlZCkKIAkJCQlwYWdlcysrOwotCQl9IGVsc2UgaWYgKElTX0VOQUJMRUQoQ09ORklHX01JR1JBVElPTikgJiYgIXB0ZV9maWxlKG9sZHB0ZSkpIHsKKwkJfSBlbHNlIGlmIChJU19FTkFCTEVEKENPTkZJR19NSUdSQVRJT04pKSB7CiAJCQlzd3BfZW50cnlfdCBlbnRyeSA9IHB0ZV90b19zd3BfZW50cnkob2xkcHRlKTsKIAogCQkJaWYgKGlzX3dyaXRlX21pZ3JhdGlvbl9lbnRyeShlbnRyeSkpIHsKZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmMKaW5kZXggMTdmYTAxOC4uNTdkYWRjMCAxMDA2NDQKLS0tIGEvbW0vbXJlbWFwLmMKKysrIGIvbW0vbXJlbWFwLmMKQEAgLTgxLDggKzgxLDYgQEAKIAkJcHRlID0gcHRlX21rc29mdF9kaXJ0eShwdGUpOwogCWVsc2UgaWYgKGlzX3N3YXBfcHRlKHB0ZSkpCiAJCXB0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHB0ZSk7Ci0JZWxzZSBpZiAocHRlX2ZpbGUocHRlKSkKLQkJcHRlID0gcHRlX2ZpbGVfbWtzb2Z0X2RpcnR5KHB0ZSk7CiAjZW5kaWYKIAlyZXR1cm4gcHRlOwogfQpkaWZmIC0tZ2l0IGEvbW0vbXN5bmMuYyBiL21tL21zeW5jLmMKaW5kZXggOTkyYTE2Ny4uYmIwNGQ1MyAxMDA2NDQKLS0tIGEvbW0vbXN5bmMuYworKysgYi9tbS9tc3luYy5jCkBAIC04NiwxMCArODYsNyBAQAogCQkJCSh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSkgewogCQkJZ2V0X2ZpbGUoZmlsZSk7CiAJCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCQkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9OT05MSU5FQVIpCi0JCQkJZXJyb3IgPSB2ZnNfZnN5bmMoZmlsZSwgMSk7Ci0JCQllbHNlCi0JCQkJZXJyb3IgPSB2ZnNfZnN5bmNfcmFuZ2UoZmlsZSwgZnN0YXJ0LCBmZW5kLCAxKTsKKwkJCWVycm9yID0gdmZzX2ZzeW5jX3JhbmdlKGZpbGUsIGZzdGFydCwgZmVuZCwgMSk7CiAJCQlmcHV0KGZpbGUpOwogCQkJaWYgKGVycm9yIHx8IHN0YXJ0ID49IGVuZCkKIAkJCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IGI1MWVhZGYuLjFhMTlmYjMgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtNTksNiArNTksNyBAQAogI2VuZGlmCiAKIHZvaWQgKmhpZ2hfbWVtb3J5OworRVhQT1JUX1NZTUJPTChoaWdoX21lbW9yeSk7CiBzdHJ1Y3QgcGFnZSAqbWVtX21hcDsKIHVuc2lnbmVkIGxvbmcgbWF4X21hcG5yOwogdW5zaWduZWQgbG9uZyBoaWdoZXN0X21lbW1hcF9wZm47CkBAIC0yMTMsNiArMjE0LDM5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzKTsKIAorbG9uZyBnZXRfdXNlcl9wYWdlc19sb2NrZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJCSAgIGludCB3cml0ZSwgaW50IGZvcmNlLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAorCQkJICAgaW50ICpsb2NrZWQpCit7CisJcmV0dXJuIGdldF91c2VyX3BhZ2VzKHRzaywgbW0sIHN0YXJ0LCBucl9wYWdlcywgd3JpdGUsIGZvcmNlLAorCQkJICAgICAgcGFnZXMsIE5VTEwpOworfQorRVhQT1JUX1NZTUJPTChnZXRfdXNlcl9wYWdlc19sb2NrZWQpOworCitsb25nIF9fZ2V0X3VzZXJfcGFnZXNfdW5sb2NrZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsCisJCQkgICAgICAgaW50IHdyaXRlLCBpbnQgZm9yY2UsIHN0cnVjdCBwYWdlICoqcGFnZXMsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGd1cF9mbGFncykKK3sKKwlsb25nIHJldDsKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJcmV0ID0gZ2V0X3VzZXJfcGFnZXModHNrLCBtbSwgc3RhcnQsIG5yX3BhZ2VzLCB3cml0ZSwgZm9yY2UsCisJCQkgICAgIHBhZ2VzLCBOVUxMKTsKKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKF9fZ2V0X3VzZXJfcGFnZXNfdW5sb2NrZWQpOworCitsb25nIGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKKwkJCSAgICAgaW50IHdyaXRlLCBpbnQgZm9yY2UsIHN0cnVjdCBwYWdlICoqcGFnZXMpCit7CisJcmV0dXJuIF9fZ2V0X3VzZXJfcGFnZXNfdW5sb2NrZWQodHNrLCBtbSwgc3RhcnQsIG5yX3BhZ2VzLCB3cml0ZSwKKwkJCQkJIGZvcmNlLCBwYWdlcywgMCk7Cit9CitFWFBPUlRfU1lNQk9MKGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKTsKKwogLyoqCiAgKiBmb2xsb3dfcGZuIC0gbG9vayB1cCBQRk4gYXQgYSB1c2VyIHZpcnR1YWwgYWRkcmVzcwogICogQHZtYTogbWVtb3J5IG1hcHBpbmcKQEAgLTE4OTQsNyArMTkyOCw3IEBACiAgKi8KIGludCBfX3ZtX2Vub3VnaF9tZW1vcnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGxvbmcgcGFnZXMsIGludCBjYXBfc3lzX2FkbWluKQogewotCXVuc2lnbmVkIGxvbmcgZnJlZSwgYWxsb3dlZCwgcmVzZXJ2ZTsKKwlsb25nIGZyZWUsIGFsbG93ZWQsIHJlc2VydmU7CiAKIAl2bV9hY2N0X21lbW9yeShwYWdlcyk7CiAKQEAgLTE5NTgsNyArMTk5Miw3IEBACiAJICovCiAJaWYgKG1tKSB7CiAJCXJlc2VydmUgPSBzeXNjdGxfdXNlcl9yZXNlcnZlX2tieXRlcyA+PiAoUEFHRV9TSElGVCAtIDEwKTsKLQkJYWxsb3dlZCAtPSBtaW4obW0tPnRvdGFsX3ZtIC8gMzIsIHJlc2VydmUpOworCQlhbGxvd2VkIC09IG1pbl90KGxvbmcsIG1tLT50b3RhbF92bSAvIDMyLCByZXNlcnZlKTsKIAl9CiAKIAlpZiAocGVyY3B1X2NvdW50ZXJfcmVhZF9wb3NpdGl2ZSgmdm1fY29tbWl0dGVkX2FzKSA8IGFsbG93ZWQpCkBAIC0xOTgzLDE0ICsyMDE3LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZmlsZW1hcF9tYXBfcGFnZXMpOwogCi1pbnQgZ2VuZXJpY19maWxlX3JlbWFwX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdvZmZfdCBwZ29mZikKLXsKLQlCVUcoKTsKLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woZ2VuZXJpY19maWxlX3JlbWFwX3BhZ2VzKTsKLQogc3RhdGljIGludCBfX2FjY2Vzc19yZW1vdGVfdm0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQl1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKQogewpkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggZDUwM2U5Yy4uNjQyZjM4YyAxMDA2NDQKLS0tIGEvbW0vb29tX2tpbGwuYworKysgYi9tbS9vb21fa2lsbC5jCkBAIC0xNjksOCArMTY5LDggQEAKIAkgKiBUaGUgYmFzZWxpbmUgZm9yIHRoZSBiYWRuZXNzIHNjb3JlIGlzIHRoZSBwcm9wb3J0aW9uIG9mIFJBTSB0aGF0IGVhY2gKIAkgKiB0YXNrJ3MgcnNzLCBwYWdldGFibGUgYW5kIHN3YXAgc3BhY2UgdXNlLgogCSAqLwotCXBvaW50cyA9IGdldF9tbV9yc3MocC0+bW0pICsgYXRvbWljX2xvbmdfcmVhZCgmcC0+bW0tPm5yX3B0ZXMpICsKLQkJIGdldF9tbV9jb3VudGVyKHAtPm1tLCBNTV9TV0FQRU5UUyk7CisJcG9pbnRzID0gZ2V0X21tX3JzcyhwLT5tbSkgKyBnZXRfbW1fY291bnRlcihwLT5tbSwgTU1fU1dBUEVOVFMpICsKKwkJYXRvbWljX2xvbmdfcmVhZCgmcC0+bW0tPm5yX3B0ZXMpICsgbW1fbnJfcG1kcyhwLT5tbSk7CiAJdGFza191bmxvY2socCk7CiAKIAkvKgpAQCAtMjY2LDggKzI2Niw2IEBACiAJICogRG9uJ3QgYWxsb3cgYW55IG90aGVyIHRhc2sgdG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIHJlc2VydmVzLgogCSAqLwogCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyh0YXNrLCBUSUZfTUVNRElFKSkgewotCQlpZiAodW5saWtlbHkoZnJvemVuKHRhc2spKSkKLQkJCV9fdGhhd190YXNrKHRhc2spOwogCQlpZiAoIWZvcmNlX2tpbGwpCiAJCQlyZXR1cm4gT09NX1NDQU5fQUJPUlQ7CiAJfQpAQCAtMzUzLDcgKzM1MSw3IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAotCXByX2luZm8oIlsgcGlkIF0gICB1aWQgIHRnaWQgdG90YWxfdm0gICAgICByc3MgbnJfcHRlcyBzd2FwZW50cyBvb21fc2NvcmVfYWRqIG5hbWVcbiIpOworCXByX2luZm8oIlsgcGlkIF0gICB1aWQgIHRnaWQgdG90YWxfdm0gICAgICByc3MgbnJfcHRlcyBucl9wbWRzIHN3YXBlbnRzIG9vbV9zY29yZV9hZGogbmFtZVxuIik7CiAJcmN1X3JlYWRfbG9jaygpOwogCWZvcl9lYWNoX3Byb2Nlc3MocCkgewogCQlpZiAob29tX3Vua2lsbGFibGVfdGFzayhwLCBtZW1jZywgbm9kZW1hc2spKQpAQCAtMzY5LDEwICszNjcsMTEgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJcHJfaW5mbygiWyU1ZF0gJTVkICU1ZCAlOGx1ICU4bHUgJTdsZCAlOGx1ICAgICAgICAgJTVoZCAlc1xuIiwKKwkJcHJfaW5mbygiWyU1ZF0gJTVkICU1ZCAlOGx1ICU4bHUgJTdsZCAlN2xkICU4bHUgICAgICAgICAlNWhkICVzXG4iLAogCQkJdGFzay0+cGlkLCBmcm9tX2t1aWQoJmluaXRfdXNlcl9ucywgdGFza191aWQodGFzaykpLAogCQkJdGFzay0+dGdpZCwgdGFzay0+bW0tPnRvdGFsX3ZtLCBnZXRfbW1fcnNzKHRhc2stPm1tKSwKIAkJCWF0b21pY19sb25nX3JlYWQoJnRhc2stPm1tLT5ucl9wdGVzKSwKKwkJCW1tX25yX3BtZHModGFzay0+bW0pLAogCQkJZ2V0X21tX2NvdW50ZXIodGFzay0+bW0sIE1NX1NXQVBFTlRTKSwKIAkJCXRhc2stPnNpZ25hbC0+b29tX3Njb3JlX2FkaiwgdGFzay0+Y29tbSk7CiAJCXRhc2tfdW5sb2NrKHRhc2spOwpAQCAtNDAwLDIwICszOTksOTggQEAKIH0KIAogLyoKLSAqIE51bWJlciBvZiBPT00ga2lsbGVyIGludm9jYXRpb25zIChpbmNsdWRpbmcgbWVtY2cgT09NIGtpbGxlcikuCi0gKiBQcmltYXJpbHkgdXNlZCBieSBQTSBmcmVlemVyIHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgcmFjZXMgd2l0aAotICogT09NIGtpbGxlZCBmcm96ZW4gdGFzay4KKyAqIE51bWJlciBvZiBPT00gdmljdGltcyBpbiBmbGlnaHQKICAqLwotc3RhdGljIGF0b21pY190IG9vbV9raWxscyA9IEFUT01JQ19JTklUKDApOworc3RhdGljIGF0b21pY190IG9vbV92aWN0aW1zID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQob29tX3ZpY3RpbXNfd2FpdCk7CiAKLWludCBvb21fa2lsbHNfY291bnQodm9pZCkKK2Jvb2wgb29tX2tpbGxlcl9kaXNhYmxlZCBfX3JlYWRfbW9zdGx5Oworc3RhdGljIERFQ0xBUkVfUldTRU0ob29tX3NlbSk7CisKKy8qKgorICogbWFya190c2tfb29tX3ZpY3RpbSAtIG1hcmtzIHRoZSBnaXZlbiB0YWtzIGFzIE9PTSB2aWN0aW0uCisgKiBAdHNrOiB0YXNrIHRvIG1hcmsKKyAqCisgKiBIYXMgdG8gYmUgY2FsbGVkIHdpdGggb29tX3NlbSB0YWtlbiBmb3IgcmVhZCBhbmQgbmV2ZXIgYWZ0ZXIKKyAqIG9vbSBoYXMgYmVlbiBkaXNhYmxlZCBhbHJlYWR5LgorICovCit2b2lkIG1hcmtfdHNrX29vbV92aWN0aW0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JcmV0dXJuIGF0b21pY19yZWFkKCZvb21fa2lsbHMpOworCVdBUk5fT04ob29tX2tpbGxlcl9kaXNhYmxlZCk7CisJLyogT09NIGtpbGxlciBtaWdodCByYWNlIHdpdGggbWVtY2cgT09NICovCisJaWYgKHRlc3RfYW5kX3NldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfTUVNRElFKSkKKwkJcmV0dXJuOworCS8qCisJICogTWFrZSBzdXJlIHRoYXQgdGhlIHRhc2sgaXMgd29rZW4gdXAgZnJvbSB1bmludGVycnVwdGlibGUgc2xlZXAKKwkgKiBpZiBpdCBpcyBmcm96ZW4gYmVjYXVzZSBPT00ga2lsbGVyIHdvdWxkbid0IGJlIGFibGUgdG8gZnJlZQorCSAqIGFueSBtZW1vcnkgYW5kIGxpdmVsb2NrLiBmcmVlemluZ19zbG93X3BhdGggd2lsbCB0ZWxsIHRoZSBmcmVlemVyCisJICogdGhhdCBUSUZfTUVNRElFIHRhc2tzIHNob3VsZCBiZSBpZ25vcmVkLgorCSAqLworCV9fdGhhd190YXNrKHRzayk7CisJYXRvbWljX2luYygmb29tX3ZpY3RpbXMpOwogfQogCi12b2lkIG5vdGVfb29tX2tpbGwodm9pZCkKKy8qKgorICogdW5tYXJrX29vbV92aWN0aW0gLSB1bm1hcmtzIHRoZSBjdXJyZW50IHRhc2sgYXMgT09NIHZpY3RpbS4KKyAqCisgKiBXYWtlcyB1cCBhbGwgd2FpdGVycyBpbiBvb21fa2lsbGVyX2Rpc2FibGUoKQorICovCit2b2lkIHVubWFya19vb21fdmljdGltKHZvaWQpCiB7Ci0JYXRvbWljX2luYygmb29tX2tpbGxzKTsKKwlpZiAoIXRlc3RfYW5kX2NsZWFyX3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpKQorCQlyZXR1cm47CisKKwlkb3duX3JlYWQoJm9vbV9zZW0pOworCS8qCisJICogVGhlcmUgaXMgbm8gbmVlZCB0byBzaWduYWwgdGhlIGxhc3N0IG9vbV92aWN0aW0gaWYgdGhlcmUKKwkgKiBpcyBub2JvZHkgd2hvIGNhcmVzLgorCSAqLworCWlmICghYXRvbWljX2RlY19yZXR1cm4oJm9vbV92aWN0aW1zKSAmJiBvb21fa2lsbGVyX2Rpc2FibGVkKQorCQl3YWtlX3VwX2FsbCgmb29tX3ZpY3RpbXNfd2FpdCk7CisJdXBfcmVhZCgmb29tX3NlbSk7Cit9CisKKy8qKgorICogb29tX2tpbGxlcl9kaXNhYmxlIC0gZGlzYWJsZSBPT00ga2lsbGVyCisgKgorICogRm9yY2VzIGFsbCBwYWdlIGFsbG9jYXRpb25zIHRvIGZhaWwgcmF0aGVyIHRoYW4gdHJpZ2dlciBPT00ga2lsbGVyLgorICogV2lsbCBibG9jayBhbmQgd2FpdCB1bnRpbCBhbGwgT09NIHZpY3RpbXMgYXJlIGtpbGxlZC4KKyAqCisgKiBUaGUgZnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCB3aGVuIHRoZXJlIGFyZSBydW5uYWJsZSB1c2VyIHRhc2tzIGJlY2F1c2UKKyAqIHRoZSB1c2Vyc3BhY2Ugd291bGQgc2VlIHVuZXhwZWN0ZWQgYWxsb2NhdGlvbiBmYWlsdXJlcyBhcyBhIHJlc3VsdC4gQW55CisgKiBuZXcgdXNhZ2Ugb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY29uc3VsdGVkIHdpdGggTU0gcGVvcGxlLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiBzdWNjZXNzZnVsIGFuZCBmYWxzZSBpZiB0aGUgT09NIGtpbGxlciBjYW5ub3QgYmUKKyAqIGRpc2FibGVkLgorICovCitib29sIG9vbV9raWxsZXJfZGlzYWJsZSh2b2lkKQoreworCS8qCisJICogTWFrZSBzdXJlIHRvIG5vdCByYWNlIHdpdGggYW4gb25nb2luZyBPT00ga2lsbGVyCisJICogYW5kIHRoYXQgdGhlIGN1cnJlbnQgaXMgbm90IHRoZSB2aWN0aW0uCisJICovCisJZG93bl93cml0ZSgmb29tX3NlbSk7CisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX01FTURJRSkpIHsKKwkJdXBfd3JpdGUoJm9vbV9zZW0pOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJb29tX2tpbGxlcl9kaXNhYmxlZCA9IHRydWU7CisJdXBfd3JpdGUoJm9vbV9zZW0pOworCisJd2FpdF9ldmVudChvb21fdmljdGltc193YWl0LCAhYXRvbWljX3JlYWQoJm9vbV92aWN0aW1zKSk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoqCisgKiBvb21fa2lsbGVyX2VuYWJsZSAtIGVuYWJsZSBPT00ga2lsbGVyCisgKi8KK3ZvaWQgb29tX2tpbGxlcl9lbmFibGUodm9pZCkKK3sKKwlkb3duX3dyaXRlKCZvb21fc2VtKTsKKwlvb21fa2lsbGVyX2Rpc2FibGVkID0gZmFsc2U7CisJdXBfd3JpdGUoJm9vbV9zZW0pOwogfQogCiAjZGVmaW5lIEsoeCkgKCh4KSA8PCAoUEFHRV9TSElGVC0xMCkpCkBAIC00MzgsMTEgKzUxNSwxNCBAQAogCSAqIElmIHRoZSB0YXNrIGlzIGFscmVhZHkgZXhpdGluZywgZG9uJ3QgYWxhcm0gdGhlIHN5c2FkbWluIG9yIGtpbGwKIAkgKiBpdHMgY2hpbGRyZW4gb3IgdGhyZWFkcywganVzdCBzZXQgVElGX01FTURJRSBzbyBpdCBjYW4gZGllIHF1aWNrbHkKIAkgKi8KLQlpZiAodGFza193aWxsX2ZyZWVfbWVtKHApKSB7Ci0JCXNldF90c2tfdGhyZWFkX2ZsYWcocCwgVElGX01FTURJRSk7CisJdGFza19sb2NrKHApOworCWlmIChwLT5tbSAmJiB0YXNrX3dpbGxfZnJlZV9tZW0ocCkpIHsKKwkJbWFya190c2tfb29tX3ZpY3RpbShwKTsKKwkJdGFza191bmxvY2socCk7CiAJCXB1dF90YXNrX3N0cnVjdChwKTsKIAkJcmV0dXJuOwogCX0KKwl0YXNrX3VubG9jayhwKTsKIAogCWlmIChfX3JhdGVsaW1pdCgmb29tX3JzKSkKIAkJZHVtcF9oZWFkZXIocCwgZ2ZwX21hc2ssIG9yZGVyLCBtZW1jZywgbm9kZW1hc2spOwpAQCAtNDkyLDYgKzU3Miw3IEBACiAKIAkvKiBtbSBjYW5ub3Qgc2FmZWx5IGJlIGRlcmVmZXJlbmNlZCBhZnRlciB0YXNrX3VubG9jayh2aWN0aW0pICovCiAJbW0gPSB2aWN0aW0tPm1tOworCW1hcmtfdHNrX29vbV92aWN0aW0odmljdGltKTsKIAlwcl9lcnIoIktpbGxlZCBwcm9jZXNzICVkICglcykgdG90YWwtdm06JWx1a0IsIGFub24tcnNzOiVsdWtCLCBmaWxlLXJzczolbHVrQlxuIiwKIAkJdGFza19waWRfbnIodmljdGltKSwgdmljdGltLT5jb21tLCBLKHZpY3RpbS0+bW0tPnRvdGFsX3ZtKSwKIAkJSyhnZXRfbW1fY291bnRlcih2aWN0aW0tPm1tLCBNTV9BTk9OUEFHRVMpKSwKQEAgLTUyMiw3ICs2MDMsNiBAQAogCQl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlzZXRfdHNrX3RocmVhZF9mbGFnKHZpY3RpbSwgVElGX01FTURJRSk7CiAJZG9fc2VuZF9zaWdfaW5mbyhTSUdLSUxMLCBTRU5EX1NJR19GT1JDRUQsIHZpY3RpbSwgdHJ1ZSk7CiAJcHV0X3Rhc2tfc3RydWN0KHZpY3RpbSk7CiB9CkBAIC02MTEsNyArNjkxLDcgQEAKIH0KIAogLyoqCi0gKiBvdXRfb2ZfbWVtb3J5IC0ga2lsbCB0aGUgImJlc3QiIHByb2Nlc3Mgd2hlbiB3ZSBydW4gb3V0IG9mIG1lbW9yeQorICogX19vdXRfb2ZfbWVtb3J5IC0ga2lsbCB0aGUgImJlc3QiIHByb2Nlc3Mgd2hlbiB3ZSBydW4gb3V0IG9mIG1lbW9yeQogICogQHpvbmVsaXN0OiB6b25lbGlzdCBwb2ludGVyCiAgKiBAZ2ZwX21hc2s6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCiAgKiBAb3JkZXI6IGFtb3VudCBvZiBtZW1vcnkgYmVpbmcgcmVxdWVzdGVkIGFzIGEgcG93ZXIgb2YgMgpAQCAtNjIzLDcgKzcwMyw3IEBACiAgKiBPUiB0cnkgdG8gYmUgc21hcnQgYWJvdXQgd2hpY2ggcHJvY2VzcyB0byBraWxsLiBOb3RlIHRoYXQgd2UKICAqIGRvbid0IGhhdmUgdG8gYmUgcGVyZmVjdCBoZXJlLCB3ZSBqdXN0IGhhdmUgdG8gYmUgZ29vZC4KICAqLwotdm9pZCBvdXRfb2ZfbWVtb3J5KHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGdmcF90IGdmcF9tYXNrLAorc3RhdGljIHZvaWQgX19vdXRfb2ZfbWVtb3J5KHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGdmcF90IGdmcF9tYXNrLAogCQlpbnQgb3JkZXIsIG5vZGVtYXNrX3QgKm5vZGVtYXNrLCBib29sIGZvcmNlX2tpbGwpCiB7CiAJY29uc3Qgbm9kZW1hc2tfdCAqbXBvbF9tYXNrOwpAQCAtNjQzLDkgKzcyMywxMyBAQAogCSAqIElmIGN1cnJlbnQgaGFzIGEgcGVuZGluZyBTSUdLSUxMIG9yIGlzIGV4aXRpbmcsIHRoZW4gYXV0b21hdGljYWxseQogCSAqIHNlbGVjdCBpdC4gIFRoZSBnb2FsIGlzIHRvIGFsbG93IGl0IHRvIGFsbG9jYXRlIHNvIHRoYXQgaXQgbWF5CiAJICogcXVpY2tseSBleGl0IGFuZCBmcmVlIGl0cyBtZW1vcnkuCisJICoKKwkgKiBCdXQgZG9uJ3Qgc2VsZWN0IGlmIGN1cnJlbnQgaGFzIGFscmVhZHkgcmVsZWFzZWQgaXRzIG1tIGFuZCBjbGVhcmVkCisJICogVElGX01FTURJRSBmbGFnIGF0IGV4aXRfbW0oKSwgb3RoZXJ3aXNlIGFuIE9PTSBsaXZlbG9jayBtYXkgb2NjdXIuCiAJICovCi0JaWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIHx8IHRhc2tfd2lsbF9mcmVlX21lbShjdXJyZW50KSkgewotCQlzZXRfdGhyZWFkX2ZsYWcoVElGX01FTURJRSk7CisJaWYgKGN1cnJlbnQtPm1tICYmCisJICAgIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSB8fCB0YXNrX3dpbGxfZnJlZV9tZW0oY3VycmVudCkpKSB7CisJCW1hcmtfdHNrX29vbV92aWN0aW0oY3VycmVudCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY4OCw2ICs3NzIsMzIgQEAKIAkJc2NoZWR1bGVfdGltZW91dF9raWxsYWJsZSgxKTsKIH0KIAorLyoqCisgKiBvdXRfb2ZfbWVtb3J5IC0gIHRyaWVzIHRvIGludm9rZSBPT00ga2lsbGVyLgorICogQHpvbmVsaXN0OiB6b25lbGlzdCBwb2ludGVyCisgKiBAZ2ZwX21hc2s6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzCisgKiBAb3JkZXI6IGFtb3VudCBvZiBtZW1vcnkgYmVpbmcgcmVxdWVzdGVkIGFzIGEgcG93ZXIgb2YgMgorICogQG5vZGVtYXNrOiBub2RlbWFzayBwYXNzZWQgdG8gcGFnZSBhbGxvY2F0b3IKKyAqIEBmb3JjZV9raWxsOiB0cnVlIGlmIGEgdGFzayBtdXN0IGJlIGtpbGxlZCwgZXZlbiBpZiBvdGhlcnMgYXJlIGV4aXRpbmcKKyAqCisgKiBpbnZva2VzIF9fb3V0X29mX21lbW9yeSBpZiB0aGUgT09NIGlzIG5vdCBkaXNhYmxlZCBieSBvb21fa2lsbGVyX2Rpc2FibGUoKQorICogd2hlbiBpdCByZXR1cm5zIGZhbHNlLiBPdGhlcndpc2UgcmV0dXJucyB0cnVlLgorICovCitib29sIG91dF9vZl9tZW1vcnkoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgZ2ZwX3QgZ2ZwX21hc2ssCisJCWludCBvcmRlciwgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIGJvb2wgZm9yY2Vfa2lsbCkKK3sKKwlib29sIHJldCA9IGZhbHNlOworCisJZG93bl9yZWFkKCZvb21fc2VtKTsKKwlpZiAoIW9vbV9raWxsZXJfZGlzYWJsZWQpIHsKKwkJX19vdXRfb2ZfbWVtb3J5KHpvbmVsaXN0LCBnZnBfbWFzaywgb3JkZXIsIG5vZGVtYXNrLCBmb3JjZV9raWxsKTsKKwkJcmV0ID0gdHJ1ZTsKKwl9CisJdXBfcmVhZCgmb29tX3NlbSk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogVGhlIHBhZ2VmYXVsdCBoYW5kbGVyIGNhbGxzIGhlcmUgYmVjYXVzZSBpdCBpcyBvdXQgb2YgbWVtb3J5LCBzbyBraWxsIGEKICAqIG1lbW9yeS1ob2dnaW5nIHRhc2suICBJZiBhbnkgcG9wdWxhdGVkIHpvbmUgaGFzIFpPTkVfT09NX0xPQ0tFRCBzZXQsIGEKQEAgLTY5NywxMiArODA3LDI1IEBACiB7CiAJc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdDsKIAorCWRvd25fcmVhZCgmb29tX3NlbSk7CiAJaWYgKG1lbV9jZ3JvdXBfb29tX3N5bmNocm9uaXplKHRydWUpKQotCQlyZXR1cm47CisJCWdvdG8gdW5sb2NrOwogCiAJem9uZWxpc3QgPSBub2RlX3pvbmVsaXN0KGZpcnN0X21lbW9yeV9ub2RlLCBHRlBfS0VSTkVMKTsKIAlpZiAob29tX3pvbmVsaXN0X3RyeWxvY2soem9uZWxpc3QsIEdGUF9LRVJORUwpKSB7Ci0JCW91dF9vZl9tZW1vcnkoTlVMTCwgMCwgMCwgTlVMTCwgZmFsc2UpOworCQlpZiAoIW9vbV9raWxsZXJfZGlzYWJsZWQpCisJCQlfX291dF9vZl9tZW1vcnkoTlVMTCwgMCwgMCwgTlVMTCwgZmFsc2UpOworCQllbHNlCisJCQkvKgorCQkJICogVGhlcmUgc2hvdWxkbid0IGJlIGFueSB1c2VyIHRhc2tzIHJ1bmFibGUgd2hpbGUgdGhlCisJCQkgKiBPT00ga2lsbGVyIGlzIGRpc2FibGVkIHNvIHRoZSBjdXJyZW50IHRhc2sgaGFzIHRvCisJCQkgKiBiZSBhIHJhY2luZyBPT00gdmljdGltIGZvciB3aGljaCBvb21fa2lsbGVyX2Rpc2FibGUoKQorCQkJICogaXMgd2FpdGluZyBmb3IuCisJCQkgKi8KKwkJCVdBUk5fT04odGVzdF90aHJlYWRfZmxhZyhUSUZfTUVNRElFKSk7CisKIAkJb29tX3pvbmVsaXN0X3VubG9jayh6b25lbGlzdCwgR0ZQX0tFUk5FTCk7CiAJfQordW5sb2NrOgorCXVwX3JlYWQoJm9vbV9zZW0pOwogfQpkaWZmIC0tZ2l0IGEvbW0vcGFnZS13cml0ZWJhY2suYyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKaW5kZXggNmY0MzM1Mi4uNmE3M2U0NyAxMDA2NDQKLS0tIGEvbW0vcGFnZS13cml0ZWJhY2suYworKysgYi9tbS9wYWdlLXdyaXRlYmFjay5jCkBAIC0yMTY4LDkgKzIxNjgsMTIgQEAKICAqLwogaW50IHJlZGlydHlfcGFnZV9mb3Jfd3JpdGVwYWdlKHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKKwlpbnQgcmV0OworCiAJd2JjLT5wYWdlc19za2lwcGVkKys7CisJcmV0ID0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMocGFnZSk7CiAJYWNjb3VudF9wYWdlX3JlZGlydHkocGFnZSk7Ci0JcmV0dXJuIF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzKHBhZ2UpOworCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKHJlZGlydHlfcGFnZV9mb3Jfd3JpdGVwYWdlKTsKIApAQCAtMjMwOCwxMiArMjMxMSwxMCBAQAogaW50IHRlc3RfY2xlYXJfcGFnZV93cml0ZWJhY2soc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7Ci0JdW5zaWduZWQgbG9uZyBtZW1jZ19mbGFnczsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7Ci0JYm9vbCBsb2NrZWQ7CiAJaW50IHJldDsKIAotCW1lbWNnID0gbWVtX2Nncm91cF9iZWdpbl9wYWdlX3N0YXQocGFnZSwgJmxvY2tlZCwgJm1lbWNnX2ZsYWdzKTsKKwltZW1jZyA9IG1lbV9jZ3JvdXBfYmVnaW5fcGFnZV9zdGF0KHBhZ2UpOwogCWlmIChtYXBwaW5nKSB7CiAJCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjMzOCwxOSArMjMzOSwxNyBAQAogCQlkZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX1dSSVRFQkFDSyk7CiAJCWluY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfV1JJVFRFTik7CiAJfQotCW1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChtZW1jZywgJmxvY2tlZCwgJm1lbWNnX2ZsYWdzKTsKKwltZW1fY2dyb3VwX2VuZF9wYWdlX3N0YXQobWVtY2cpOwogCXJldHVybiByZXQ7CiB9CiAKIGludCBfX3Rlc3Rfc2V0X3BhZ2Vfd3JpdGViYWNrKHN0cnVjdCBwYWdlICpwYWdlLCBib29sIGtlZXBfd3JpdGUpCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7Ci0JdW5zaWduZWQgbG9uZyBtZW1jZ19mbGFnczsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7Ci0JYm9vbCBsb2NrZWQ7CiAJaW50IHJldDsKIAotCW1lbWNnID0gbWVtX2Nncm91cF9iZWdpbl9wYWdlX3N0YXQocGFnZSwgJmxvY2tlZCwgJm1lbWNnX2ZsYWdzKTsKKwltZW1jZyA9IG1lbV9jZ3JvdXBfYmVnaW5fcGFnZV9zdGF0KHBhZ2UpOwogCWlmIChtYXBwaW5nKSB7CiAJCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvICpiZGkgPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjM4MCw3ICsyMzc5LDcgQEAKIAkJbWVtX2Nncm91cF9pbmNfcGFnZV9zdGF0KG1lbWNnLCBNRU1fQ0dST1VQX1NUQVRfV1JJVEVCQUNLKTsKIAkJaW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9XUklURUJBQ0spOwogCX0KLQltZW1fY2dyb3VwX2VuZF9wYWdlX3N0YXQobWVtY2csICZsb2NrZWQsICZtZW1jZ19mbGFncyk7CisJbWVtX2Nncm91cF9lbmRfcGFnZV9zdGF0KG1lbWNnKTsKIAlyZXR1cm4gcmV0OwogCiB9CmRpZmYgLS1naXQgYS9tbS9wYWdlX2FsbG9jLmMgYi9tbS9wYWdlX2FsbG9jLmMKaW5kZXggNzYzM2M1MC4uOGQ1MmFiMSAxMDA2NDQKLS0tIGEvbW0vcGFnZV9hbGxvYy5jCisrKyBiL21tL3BhZ2VfYWxsb2MuYwpAQCAtMjQ0LDggKzI0NCw2IEBACiAJCQkJCVBCX21pZ3JhdGUsIFBCX21pZ3JhdGVfZW5kKTsKIH0KIAotYm9vbCBvb21fa2lsbGVyX2Rpc2FibGVkIF9fcmVhZF9tb3N0bHk7Ci0KICNpZmRlZiBDT05GSUdfREVCVUdfVk0KIHN0YXRpYyBpbnQgcGFnZV9vdXRzaWRlX3pvbmVfYm91bmRhcmllcyhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC0zODEsMzYgKzM3OSw2IEBACiAJfQogfQogCi0vKiB1cGRhdGUgX19zcGxpdF9odWdlX3BhZ2VfcmVmY291bnQgaWYgeW91IGNoYW5nZSB0aGlzIGZ1bmN0aW9uICovCi1zdGF0aWMgaW50IGRlc3Ryb3lfY29tcG91bmRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvcmRlcikKLXsKLQlpbnQgaTsKLQlpbnQgbnJfcGFnZXMgPSAxIDw8IG9yZGVyOwotCWludCBiYWQgPSAwOwotCi0JaWYgKHVubGlrZWx5KGNvbXBvdW5kX29yZGVyKHBhZ2UpICE9IG9yZGVyKSkgewotCQliYWRfcGFnZShwYWdlLCAid3JvbmcgY29tcG91bmQgb3JkZXIiLCAwKTsKLQkJYmFkKys7Ci0JfQotCi0JX19DbGVhclBhZ2VIZWFkKHBhZ2UpOwotCi0JZm9yIChpID0gMTsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKLQkJc3RydWN0IHBhZ2UgKnAgPSBwYWdlICsgaTsKLQotCQlpZiAodW5saWtlbHkoIVBhZ2VUYWlsKHApKSkgewotCQkJYmFkX3BhZ2UocGFnZSwgIlBhZ2VUYWlsIG5vdCBzZXQiLCAwKTsKLQkJCWJhZCsrOwotCQl9IGVsc2UgaWYgKHVubGlrZWx5KHAtPmZpcnN0X3BhZ2UgIT0gcGFnZSkpIHsKLQkJCWJhZF9wYWdlKHBhZ2UsICJmaXJzdF9wYWdlIG5vdCBjb25zaXN0ZW50IiwgMCk7Ci0JCQliYWQrKzsKLQkJfQotCQlfX0NsZWFyUGFnZVRhaWwocCk7Ci0JfQotCi0JcmV0dXJuIGJhZDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHByZXBfemVyb19wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCQkJCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKQogewpAQCAtNTUyLDE3ICs1MjAsMTUgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAocGFnZV9pc19ndWFyZChidWRkeSkgJiYgcGFnZV9vcmRlcihidWRkeSkgPT0gb3JkZXIpIHsKLQkJVk1fQlVHX09OX1BBR0UocGFnZV9jb3VudChidWRkeSkgIT0gMCwgYnVkZHkpOwotCiAJCWlmIChwYWdlX3pvbmVfaWQocGFnZSkgIT0gcGFnZV96b25lX2lkKGJ1ZGR5KSkKIAkJCXJldHVybiAwOwogCisJCVZNX0JVR19PTl9QQUdFKHBhZ2VfY291bnQoYnVkZHkpICE9IDAsIGJ1ZGR5KTsKKwogCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAoUGFnZUJ1ZGR5KGJ1ZGR5KSAmJiBwYWdlX29yZGVyKGJ1ZGR5KSA9PSBvcmRlcikgewotCQlWTV9CVUdfT05fUEFHRShwYWdlX2NvdW50KGJ1ZGR5KSAhPSAwLCBidWRkeSk7Ci0KIAkJLyoKIAkJICogem9uZSBjaGVjayBpcyBkb25lIGxhdGUgdG8gYXZvaWQgdXNlbGVzc2x5CiAJCSAqIGNhbGN1bGF0aW5nIHpvbmUvbm9kZSBpZHMgZm9yIHBhZ2VzIHRoYXQgY291bGQKQEAgLTU3MSw2ICs1MzcsOCBAQAogCQlpZiAocGFnZV96b25lX2lkKHBhZ2UpICE9IHBhZ2Vfem9uZV9pZChidWRkeSkpCiAJCQlyZXR1cm4gMDsKIAorCQlWTV9CVUdfT05fUEFHRShwYWdlX2NvdW50KGJ1ZGR5KSAhPSAwLCBidWRkeSk7CisKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtNjEzLDEwICs1ODEsNyBAQAogCWludCBtYXhfb3JkZXIgPSBNQVhfT1JERVI7CiAKIAlWTV9CVUdfT04oIXpvbmVfaXNfaW5pdGlhbGl6ZWQoem9uZSkpOwotCi0JaWYgKHVubGlrZWx5KFBhZ2VDb21wb3VuZChwYWdlKSkpCi0JCWlmICh1bmxpa2VseShkZXN0cm95X2NvbXBvdW5kX3BhZ2UocGFnZSwgb3JkZXIpKSkKLQkJCXJldHVybjsKKwlWTV9CVUdfT05fUEFHRShwYWdlLT5mbGFncyAmIFBBR0VfRkxBR1NfQ0hFQ0tfQVRfUFJFUCwgcGFnZSk7CiAKIAlWTV9CVUdfT04obWlncmF0ZXR5cGUgPT0gLTEpOwogCWlmIChpc19taWdyYXRlX2lzb2xhdGUobWlncmF0ZXR5cGUpKSB7CkBAIC03OTcsMjEgKzc2Miw0MCBAQAogCXNwaW5fdW5sb2NrKCZ6b25lLT5sb2NrKTsKIH0KIAorc3RhdGljIGludCBmcmVlX3RhaWxfcGFnZXNfY2hlY2soc3RydWN0IHBhZ2UgKmhlYWRfcGFnZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKCFJU19FTkFCTEVEKENPTkZJR19ERUJVR19WTSkpCisJCXJldHVybiAwOworCWlmICh1bmxpa2VseSghUGFnZVRhaWwocGFnZSkpKSB7CisJCWJhZF9wYWdlKHBhZ2UsICJQYWdlVGFpbCBub3Qgc2V0IiwgMCk7CisJCXJldHVybiAxOworCX0KKwlpZiAodW5saWtlbHkocGFnZS0+Zmlyc3RfcGFnZSAhPSBoZWFkX3BhZ2UpKSB7CisJCWJhZF9wYWdlKHBhZ2UsICJmaXJzdF9wYWdlIG5vdCBjb25zaXN0ZW50IiwgMCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGJvb2wgZnJlZV9wYWdlc19wcmVwYXJlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7Ci0JaW50IGk7Ci0JaW50IGJhZCA9IDA7CisJYm9vbCBjb21wb3VuZCA9IFBhZ2VDb21wb3VuZChwYWdlKTsKKwlpbnQgaSwgYmFkID0gMDsKIAogCVZNX0JVR19PTl9QQUdFKFBhZ2VUYWlsKHBhZ2UpLCBwYWdlKTsKLQlWTV9CVUdfT05fUEFHRShQYWdlSGVhZChwYWdlKSAmJiBjb21wb3VuZF9vcmRlcihwYWdlKSAhPSBvcmRlciwgcGFnZSk7CisJVk1fQlVHX09OX1BBR0UoY29tcG91bmQgJiYgY29tcG91bmRfb3JkZXIocGFnZSkgIT0gb3JkZXIsIHBhZ2UpOwogCiAJdHJhY2VfbW1fcGFnZV9mcmVlKHBhZ2UsIG9yZGVyKTsKIAlrbWVtY2hlY2tfZnJlZV9zaGFkb3cocGFnZSwgb3JkZXIpOwogCiAJaWYgKFBhZ2VBbm9uKHBhZ2UpKQogCQlwYWdlLT5tYXBwaW5nID0gTlVMTDsKLQlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgb3JkZXIpOyBpKyspCisJYmFkICs9IGZyZWVfcGFnZXNfY2hlY2socGFnZSk7CisJZm9yIChpID0gMTsgaSA8ICgxIDw8IG9yZGVyKTsgaSsrKSB7CisJCWlmIChjb21wb3VuZCkKKwkJCWJhZCArPSBmcmVlX3RhaWxfcGFnZXNfY2hlY2socGFnZSwgcGFnZSArIGkpOwogCQliYWQgKz0gZnJlZV9wYWdlc19jaGVjayhwYWdlICsgaSk7CisJfQogCWlmIChiYWQpCiAJCXJldHVybiBmYWxzZTsKIApAQCAtOTcwLDcgKzk1NCw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHJlcF9uZXdfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MpCitzdGF0aWMgaW50IHByZXBfbmV3X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzLAorCQkJCQkJCQlpbnQgYWxsb2NfZmxhZ3MpCiB7CiAJaW50IGk7CiAKQEAgLTk5NCw2ICs5NzksMTQgQEAKIAogCXNldF9wYWdlX293bmVyKHBhZ2UsIG9yZGVyLCBnZnBfZmxhZ3MpOwogCisJLyoKKwkgKiBwYWdlLT5wZm1lbWFsbG9jIGlzIHNldCB3aGVuIEFMTE9DX05PX1dBVEVSTUFSS1Mgd2FzIG5lY2Vzc2FyeSB0bworCSAqIGFsbG9jYXRlIHRoZSBwYWdlLiBUaGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUgY2FsbGVyIGlzIHRha2luZworCSAqIHN0ZXBzIHRoYXQgd2lsbCBmcmVlIG1vcmUgbWVtb3J5LiBUaGUgY2FsbGVyIHNob3VsZCBhdm9pZCB0aGUgcGFnZQorCSAqIGJlaW5nIHVzZWQgZm9yICFQRk1FTUFMTE9DIHB1cnBvc2VzLgorCSAqLworCXBhZ2UtPnBmbWVtYWxsb2MgPSAhIShhbGxvY19mbGFncyAmIEFMTE9DX05PX1dBVEVSTUFSS1MpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMzAsMzkgKzExMjMsMzQgQEAKIH0KIAogLyoKLSAqIElmIGJyZWFraW5nIGEgbGFyZ2UgYmxvY2sgb2YgcGFnZXMsIG1vdmUgYWxsIGZyZWUgcGFnZXMgdG8gdGhlIHByZWZlcnJlZAotICogYWxsb2NhdGlvbiBsaXN0LiBJZiBmYWxsaW5nIGJhY2sgZm9yIGEgcmVjbGFpbWFibGUga2VybmVsIGFsbG9jYXRpb24sIGJlCi0gKiBtb3JlIGFnZ3Jlc3NpdmUgYWJvdXQgdGFraW5nIG93bmVyc2hpcCBvZiBmcmVlIHBhZ2VzLgorICogV2hlbiB3ZSBhcmUgZmFsbGluZyBiYWNrIHRvIGFub3RoZXIgbWlncmF0ZXR5cGUgZHVyaW5nIGFsbG9jYXRpb24sIHRyeSB0bworICogc3RlYWwgZXh0cmEgZnJlZSBwYWdlcyBmcm9tIHRoZSBzYW1lIHBhZ2VibG9ja3MgdG8gc2F0aXNmeSBmdXJ0aGVyCisgKiBhbGxvY2F0aW9ucywgaW5zdGVhZCBvZiBwb2xsdXRpbmcgbXVsdGlwbGUgcGFnZWJsb2Nrcy4KICAqCi0gKiBPbiB0aGUgb3RoZXIgaGFuZCwgbmV2ZXIgY2hhbmdlIG1pZ3JhdGlvbiB0eXBlIG9mIE1JR1JBVEVfQ01BIHBhZ2VibG9ja3MKLSAqIG5vciBtb3ZlIENNQSBwYWdlcyB0byBkaWZmZXJlbnQgZnJlZSBsaXN0cy4gV2UgZG9uJ3Qgd2FudCB1bm1vdmFibGUgcGFnZXMKLSAqIHRvIGJlIGFsbG9jYXRlZCBmcm9tIE1JR1JBVEVfQ01BIGFyZWFzLgorICogSWYgd2UgYXJlIHN0ZWFsaW5nIGEgcmVsYXRpdmVseSBsYXJnZSBidWRkeSBwYWdlLCBpdCBpcyBsaWtlbHkgdGhlcmUgd2lsbAorICogYmUgbW9yZSBmcmVlIHBhZ2VzIGluIHRoZSBwYWdlYmxvY2ssIHNvIHRyeSB0byBzdGVhbCB0aGVtIGFsbC4gRm9yCisgKiByZWNsYWltYWJsZSBhbmQgdW5tb3ZhYmxlIGFsbG9jYXRpb25zLCB3ZSBzdGVhbCByZWdhcmRsZXNzIG9mIHBhZ2Ugc2l6ZSwKKyAqIGFzIGZyYWdtZW50YXRpb24gY2F1c2VkIGJ5IHRob3NlIGFsbG9jYXRpb25zIHBvbGx1dGluZyBtb3ZhYmxlIHBhZ2VibG9ja3MKKyAqIGlzIHdvcnNlIHRoYW4gbW92YWJsZSBhbGxvY2F0aW9ucyBzdGVhbGluZyBmcm9tIHVubW92YWJsZSBhbmQgcmVjbGFpbWFibGUKKyAqIHBhZ2VibG9ja3MuCiAgKgotICogUmV0dXJucyB0aGUgbmV3IG1pZ3JhdGV0eXBlIG9mIHRoZSBwYWdlYmxvY2sgKG9yIHRoZSBzYW1lIG9sZCBtaWdyYXRldHlwZQotICogaWYgaXQgd2FzIHVuY2hhbmdlZCkuCisgKiBJZiB3ZSBjbGFpbSBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgcGFnZWJsb2NrLCBjaGFuZ2UgcGFnZWJsb2NrJ3MgbWlncmF0ZXR5cGUKKyAqIGFzIHdlbGwuCiAgKi8KLXN0YXRpYyBpbnQgdHJ5X3RvX3N0ZWFsX2ZyZWVwYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCitzdGF0aWMgdm9pZCB0cnlfdG9fc3RlYWxfZnJlZXBhZ2VzKHN0cnVjdCB6b25lICp6b25lLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkgIGludCBzdGFydF90eXBlLCBpbnQgZmFsbGJhY2tfdHlwZSkKIHsKIAlpbnQgY3VycmVudF9vcmRlciA9IHBhZ2Vfb3JkZXIocGFnZSk7CiAKLQkvKgotCSAqIFdoZW4gYm9ycm93aW5nIGZyb20gTUlHUkFURV9DTUEsIHdlIG5lZWQgdG8gcmVsZWFzZSB0aGUgZXhjZXNzCi0JICogYnVkZHkgcGFnZXMgdG8gQ01BIGl0c2VsZi4gV2UgYWxzbyBlbnN1cmUgdGhlIGZyZWVwYWdlX21pZ3JhdGV0eXBlCi0JICogaXMgc2V0IHRvIENNQSBzbyBpdCBpcyByZXR1cm5lZCB0byB0aGUgY29ycmVjdCBmcmVlbGlzdCBpbiBjYXNlCi0JICogdGhlIHBhZ2UgZW5kcyB1cCBiZWluZyBub3QgYWN0dWFsbHkgYWxsb2NhdGVkIGZyb20gdGhlIHBjcCBsaXN0cy4KLQkgKi8KLQlpZiAoaXNfbWlncmF0ZV9jbWEoZmFsbGJhY2tfdHlwZSkpCi0JCXJldHVybiBmYWxsYmFja190eXBlOwotCiAJLyogVGFrZSBvd25lcnNoaXAgZm9yIG9yZGVycyA+PSBwYWdlYmxvY2tfb3JkZXIgKi8KIAlpZiAoY3VycmVudF9vcmRlciA+PSBwYWdlYmxvY2tfb3JkZXIpIHsKIAkJY2hhbmdlX3BhZ2VibG9ja19yYW5nZShwYWdlLCBjdXJyZW50X29yZGVyLCBzdGFydF90eXBlKTsKLQkJcmV0dXJuIHN0YXJ0X3R5cGU7CisJCXJldHVybjsKIAl9CiAKIAlpZiAoY3VycmVudF9vcmRlciA+PSBwYWdlYmxvY2tfb3JkZXIgLyAyIHx8CiAJICAgIHN0YXJ0X3R5cGUgPT0gTUlHUkFURV9SRUNMQUlNQUJMRSB8fAorCSAgICBzdGFydF90eXBlID09IE1JR1JBVEVfVU5NT1ZBQkxFIHx8CiAJICAgIHBhZ2VfZ3JvdXBfYnlfbW9iaWxpdHlfZGlzYWJsZWQpIHsKIAkJaW50IHBhZ2VzOwogCkBAIC0xMTcwLDE1ICsxMTU4LDkgQEAKIAogCQkvKiBDbGFpbSB0aGUgd2hvbGUgYmxvY2sgaWYgb3ZlciBoYWxmIG9mIGl0IGlzIGZyZWUgKi8KIAkJaWYgKHBhZ2VzID49ICgxIDw8IChwYWdlYmxvY2tfb3JkZXItMSkpIHx8Ci0JCQkJcGFnZV9ncm91cF9ieV9tb2JpbGl0eV9kaXNhYmxlZCkgewotCisJCQkJcGFnZV9ncm91cF9ieV9tb2JpbGl0eV9kaXNhYmxlZCkKIAkJCXNldF9wYWdlYmxvY2tfbWlncmF0ZXR5cGUocGFnZSwgc3RhcnRfdHlwZSk7Ci0JCQlyZXR1cm4gc3RhcnRfdHlwZTsKLQkJfQotCiAJfQotCi0JcmV0dXJuIGZhbGxiYWNrX3R5cGU7CiB9CiAKIC8qIFJlbW92ZSBhbiBlbGVtZW50IGZyb20gdGhlIGJ1ZGR5IGFsbG9jYXRvciBmcm9tIHRoZSBmYWxsYmFjayBsaXN0ICovCkBAIC0xMTg4LDE0ICsxMTcwLDE1IEBACiAJc3RydWN0IGZyZWVfYXJlYSAqYXJlYTsKIAl1bnNpZ25lZCBpbnQgY3VycmVudF9vcmRlcjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlpbnQgbWlncmF0ZXR5cGUsIG5ld190eXBlLCBpOwogCiAJLyogRmluZCB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBibG9jayBvZiBwYWdlcyBpbiB0aGUgb3RoZXIgbGlzdCAqLwogCWZvciAoY3VycmVudF9vcmRlciA9IE1BWF9PUkRFUi0xOwogCQkJCWN1cnJlbnRfb3JkZXIgPj0gb3JkZXIgJiYgY3VycmVudF9vcmRlciA8PSBNQVhfT1JERVItMTsKIAkJCQktLWN1cnJlbnRfb3JkZXIpIHsKKwkJaW50IGk7CiAJCWZvciAoaSA9IDA7OyBpKyspIHsKLQkJCW1pZ3JhdGV0eXBlID0gZmFsbGJhY2tzW3N0YXJ0X21pZ3JhdGV0eXBlXVtpXTsKKwkJCWludCBtaWdyYXRldHlwZSA9IGZhbGxiYWNrc1tzdGFydF9taWdyYXRldHlwZV1baV07CisJCQlpbnQgYnVkZHlfdHlwZSA9IHN0YXJ0X21pZ3JhdGV0eXBlOwogCiAJCQkvKiBNSUdSQVRFX1JFU0VSVkUgaGFuZGxlZCBsYXRlciBpZiBuZWNlc3NhcnkgKi8KIAkJCWlmIChtaWdyYXRldHlwZSA9PSBNSUdSQVRFX1JFU0VSVkUpCkBAIC0xMjA5LDI1ICsxMTkyLDM5IEBACiAJCQkJCXN0cnVjdCBwYWdlLCBscnUpOwogCQkJYXJlYS0+bnJfZnJlZS0tOwogCi0JCQluZXdfdHlwZSA9IHRyeV90b19zdGVhbF9mcmVlcGFnZXMoem9uZSwgcGFnZSwKLQkJCQkJCQkgIHN0YXJ0X21pZ3JhdGV0eXBlLAotCQkJCQkJCSAgbWlncmF0ZXR5cGUpOworCQkJaWYgKCFpc19taWdyYXRlX2NtYShtaWdyYXRldHlwZSkpIHsKKwkJCQl0cnlfdG9fc3RlYWxfZnJlZXBhZ2VzKHpvbmUsIHBhZ2UsCisJCQkJCQkJc3RhcnRfbWlncmF0ZXR5cGUsCisJCQkJCQkJbWlncmF0ZXR5cGUpOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIFdoZW4gYm9ycm93aW5nIGZyb20gTUlHUkFURV9DTUEsIHdlIG5lZWQgdG8KKwkJCQkgKiByZWxlYXNlIHRoZSBleGNlc3MgYnVkZHkgcGFnZXMgdG8gQ01BCisJCQkJICogaXRzZWxmLCBhbmQgd2UgZG8gbm90IHRyeSB0byBzdGVhbCBleHRyYQorCQkJCSAqIGZyZWUgcGFnZXMuCisJCQkJICovCisJCQkJYnVkZHlfdHlwZSA9IG1pZ3JhdGV0eXBlOworCQkJfQogCiAJCQkvKiBSZW1vdmUgdGhlIHBhZ2UgZnJvbSB0aGUgZnJlZWxpc3RzICovCiAJCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKIAkJCXJtdl9wYWdlX29yZGVyKHBhZ2UpOwogCiAJCQlleHBhbmQoem9uZSwgcGFnZSwgb3JkZXIsIGN1cnJlbnRfb3JkZXIsIGFyZWEsCi0JCQkgICAgICAgbmV3X3R5cGUpOwotCQkJLyogVGhlIGZyZWVwYWdlX21pZ3JhdGV0eXBlIG1heSBkaWZmZXIgZnJvbSBwYWdlYmxvY2sncworCQkJCQlidWRkeV90eXBlKTsKKworCQkJLyoKKwkJCSAqIFRoZSBmcmVlcGFnZV9taWdyYXRldHlwZSBtYXkgZGlmZmVyIGZyb20gcGFnZWJsb2NrJ3MKIAkJCSAqIG1pZ3JhdGV0eXBlIGRlcGVuZGluZyBvbiB0aGUgZGVjaXNpb25zIGluCi0JCQkgKiB0cnlfdG9fc3RlYWxfZnJlZXBhZ2VzLiBUaGlzIGlzIE9LIGFzIGxvbmcgYXMgaXQgZG9lcwotCQkJICogbm90IGRpZmZlciBmb3IgTUlHUkFURV9DTUEgdHlwZS4KKwkJCSAqIHRyeV90b19zdGVhbF9mcmVlcGFnZXMoKS4gVGhpcyBpcyBPSyBhcyBsb25nIGFzIGl0CisJCQkgKiBkb2VzIG5vdCBkaWZmZXIgZm9yIE1JR1JBVEVfQ01BIHBhZ2VibG9ja3MuIEZvciBDTUEKKwkJCSAqIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHVuYWxsb2NhdGVkIHBhZ2VzIGZsdXNoZWQgZnJvbQorCQkJICogcGNwIGxpc3RzIGFyZSByZXR1cm5lZCB0byB0aGUgY29ycmVjdCBmcmVlbGlzdC4KIAkJCSAqLwotCQkJc2V0X2ZyZWVwYWdlX21pZ3JhdGV0eXBlKHBhZ2UsIG5ld190eXBlKTsKKwkJCXNldF9mcmVlcGFnZV9taWdyYXRldHlwZShwYWdlLCBidWRkeV90eXBlKTsKIAogCQkJdHJhY2VfbW1fcGFnZV9hbGxvY19leHRmcmFnKHBhZ2UsIG9yZGVyLCBjdXJyZW50X29yZGVyLAotCQkJCXN0YXJ0X21pZ3JhdGV0eXBlLCBtaWdyYXRldHlwZSwgbmV3X3R5cGUpOworCQkJCXN0YXJ0X21pZ3JhdGV0eXBlLCBtaWdyYXRldHlwZSk7CiAKIAkJCXJldHVybiBwYWdlOwogCQl9CkBAIC0xNjQyLDkgKzE2MzksNyBAQAogfQogCiAvKgotICogUmVhbGx5LCBwcmVwX2NvbXBvdW5kX3BhZ2UoKSBzaG91bGQgYmUgY2FsbGVkIGZyb20gX19ybXF1ZXVlX2J1bGsoKS4gIEJ1dAotICogd2UgY2hlYXQgYnkgY2FsbGluZyBpdCBmcm9tIGhlcmUsIGluIHRoZSBvcmRlciA+IDAgcGF0aC4gIFNhdmVzIGEgYnJhbmNoCi0gKiBvciB0d28uCisgKiBBbGxvY2F0ZSBhIHBhZ2UgZnJvbSB0aGUgZ2l2ZW4gem9uZS4gVXNlIHBjcGxpc3RzIGZvciBvcmRlci0wIGFsbG9jYXRpb25zLgogICovCiBzdGF0aWMgaW5saW5lCiBzdHJ1Y3QgcGFnZSAqYnVmZmVyZWRfcm1xdWV1ZShzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsCkBAIC0xNjU1LDcgKzE2NTAsNiBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCWJvb2wgY29sZCA9ICgoZ2ZwX2ZsYWdzICYgX19HRlBfQ09MRCkgIT0gMCk7CiAKLWFnYWluOgogCWlmIChsaWtlbHkob3JkZXIgPT0gMCkpIHsKIAkJc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDsKIAkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKQEAgLTE3MTEsOCArMTcwNSw2IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJVk1fQlVHX09OX1BBR0UoYmFkX3JhbmdlKHpvbmUsIHBhZ2UpLCBwYWdlKTsKLQlpZiAocHJlcF9uZXdfcGFnZShwYWdlLCBvcmRlciwgZ2ZwX2ZsYWdzKSkKLQkJZ290byBhZ2FpbjsKIAlyZXR1cm4gcGFnZTsKIAogZmFpbGVkOgpAQCAtMjAzMywxMCArMjAyNSwxMCBAQAogICogYSBwYWdlLgogICovCiBzdGF0aWMgc3RydWN0IHBhZ2UgKgotZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfdCBnZnBfbWFzaywgbm9kZW1hc2tfdCAqbm9kZW1hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKLQkJc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgaW50IGhpZ2hfem9uZWlkeCwgaW50IGFsbG9jX2ZsYWdzLAotCQlzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsIGludCBjbGFzc3pvbmVfaWR4LCBpbnQgbWlncmF0ZXR5cGUpCitnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBhbGxvY19mbGFncywKKwkJCQkJCWNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYykKIHsKKwlzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0ID0gYWMtPnpvbmVsaXN0OwogCXN0cnVjdCB6b25lcmVmICp6OwogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKQEAgLTIwNTUsOCArMjA0Nyw4IEBACiAJICogU2NhbiB6b25lbGlzdCwgbG9va2luZyBmb3IgYSB6b25lIHdpdGggZW5vdWdoIGZyZWUuCiAJICogU2VlIGFsc28gX19jcHVzZXRfbm9kZV9hbGxvd2VkKCkgY29tbWVudCBpbiBrZXJuZWwvY3B1c2V0LmMuCiAJICovCi0JZm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCB6b25lbGlzdCwKLQkJCQkJCWhpZ2hfem9uZWlkeCwgbm9kZW1hc2spIHsKKwlmb3JfZWFjaF96b25lX3pvbmVsaXN0X25vZGVtYXNrKHpvbmUsIHosIHpvbmVsaXN0LCBhYy0+aGlnaF96b25laWR4LAorCQkJCQkJCQlhYy0+bm9kZW1hc2spIHsKIAkJdW5zaWduZWQgbG9uZyBtYXJrOwogCiAJCWlmIChJU19FTkFCTEVEKENPTkZJR19OVU1BKSAmJiB6bGNfYWN0aXZlICYmCkBAIC0yMDczLDcgKzIwNjUsNyBAQAogCQkgKiB0aW1lIHRoZSBwYWdlIGhhcyBpbiBtZW1vcnkgYmVmb3JlIGJlaW5nIHJlY2xhaW1lZC4KIAkJICovCiAJCWlmIChhbGxvY19mbGFncyAmIEFMTE9DX0ZBSVIpIHsKLQkJCWlmICghem9uZV9sb2NhbChwcmVmZXJyZWRfem9uZSwgem9uZSkpCisJCQlpZiAoIXpvbmVfbG9jYWwoYWMtPnByZWZlcnJlZF96b25lLCB6b25lKSkKIAkJCQlicmVhazsKIAkJCWlmICh0ZXN0X2JpdChaT05FX0ZBSVJfREVQTEVURUQsICZ6b25lLT5mbGFncykpIHsKIAkJCQlucl9mYWlyX3NraXBwZWQrKzsKQEAgLTIxMTEsNyArMjEwMyw3IEBACiAKIAkJbWFyayA9IHpvbmUtPndhdGVybWFya1thbGxvY19mbGFncyAmIEFMTE9DX1dNQVJLX01BU0tdOwogCQlpZiAoIXpvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLCBtYXJrLAotCQkJCSAgICAgICBjbGFzc3pvbmVfaWR4LCBhbGxvY19mbGFncykpIHsKKwkJCQkgICAgICAgYWMtPmNsYXNzem9uZV9pZHgsIGFsbG9jX2ZsYWdzKSkgewogCQkJaW50IHJldDsKIAogCQkJLyogQ2hlY2tlZCBoZXJlIHRvIGtlZXAgdGhlIGZhc3QgcGF0aCBmYXN0ICovCkBAIC0yMTMyLDcgKzIxMjQsNyBAQAogCQkJfQogCiAJCQlpZiAoem9uZV9yZWNsYWltX21vZGUgPT0gMCB8fAotCQkJICAgICF6b25lX2FsbG93c19yZWNsYWltKHByZWZlcnJlZF96b25lLCB6b25lKSkKKwkJCSAgICAhem9uZV9hbGxvd3NfcmVjbGFpbShhYy0+cHJlZmVycmVkX3pvbmUsIHpvbmUpKQogCQkJCWdvdG8gdGhpc196b25lX2Z1bGw7CiAKIAkJCS8qCkBAIC0yMTU0LDcgKzIxNDYsNyBAQAogCQkJZGVmYXVsdDoKIAkJCQkvKiBkaWQgd2UgcmVjbGFpbSBlbm91Z2ggKi8KIAkJCQlpZiAoem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIG1hcmssCi0JCQkJCQljbGFzc3pvbmVfaWR4LCBhbGxvY19mbGFncykpCisJCQkJCQlhYy0+Y2xhc3N6b25lX2lkeCwgYWxsb2NfZmxhZ3MpKQogCQkJCQlnb3RvIHRyeV90aGlzX3pvbmU7CiAKIAkJCQkvKgpAQCAtMjE3NSwyNyArMjE2NywxOCBAQAogCQl9CiAKIHRyeV90aGlzX3pvbmU6Ci0JCXBhZ2UgPSBidWZmZXJlZF9ybXF1ZXVlKHByZWZlcnJlZF96b25lLCB6b25lLCBvcmRlciwKLQkJCQkJCWdmcF9tYXNrLCBtaWdyYXRldHlwZSk7Ci0JCWlmIChwYWdlKQotCQkJYnJlYWs7CisJCXBhZ2UgPSBidWZmZXJlZF9ybXF1ZXVlKGFjLT5wcmVmZXJyZWRfem9uZSwgem9uZSwgb3JkZXIsCisJCQkJCQlnZnBfbWFzaywgYWMtPm1pZ3JhdGV0eXBlKTsKKwkJaWYgKHBhZ2UpIHsKKwkJCWlmIChwcmVwX25ld19wYWdlKHBhZ2UsIG9yZGVyLCBnZnBfbWFzaywgYWxsb2NfZmxhZ3MpKQorCQkJCWdvdG8gdHJ5X3RoaXNfem9uZTsKKwkJCXJldHVybiBwYWdlOworCQl9CiB0aGlzX3pvbmVfZnVsbDoKIAkJaWYgKElTX0VOQUJMRUQoQ09ORklHX05VTUEpICYmIHpsY19hY3RpdmUpCiAJCQl6bGNfbWFya196b25lX2Z1bGwoem9uZWxpc3QsIHopOwogCX0KIAotCWlmIChwYWdlKSB7Ci0JCS8qCi0JCSAqIHBhZ2UtPnBmbWVtYWxsb2MgaXMgc2V0IHdoZW4gQUxMT0NfTk9fV0FURVJNQVJLUyB3YXMKLQkJICogbmVjZXNzYXJ5IHRvIGFsbG9jYXRlIHRoZSBwYWdlLiBUaGUgZXhwZWN0YXRpb24gaXMKLQkJICogdGhhdCB0aGUgY2FsbGVyIGlzIHRha2luZyBzdGVwcyB0aGF0IHdpbGwgZnJlZSBtb3JlCi0JCSAqIG1lbW9yeS4gVGhlIGNhbGxlciBzaG91bGQgYXZvaWQgdGhlIHBhZ2UgYmVpbmcgdXNlZAotCQkgKiBmb3IgIVBGTUVNQUxMT0MgcHVycG9zZXMuCi0JCSAqLwotCQlwYWdlLT5wZm1lbWFsbG9jID0gISEoYWxsb2NfZmxhZ3MgJiBBTExPQ19OT19XQVRFUk1BUktTKTsKLQkJcmV0dXJuIHBhZ2U7Ci0JfQotCiAJLyoKIAkgKiBUaGUgZmlyc3QgcGFzcyBtYWtlcyBzdXJlIGFsbG9jYXRpb25zIGFyZSBzcHJlYWQgZmFpcmx5IHdpdGhpbiB0aGUKIAkgKiBsb2NhbCBub2RlLiAgSG93ZXZlciwgdGhlIGxvY2FsIG5vZGUgbWlnaHQgaGF2ZSBmcmVlIHBhZ2VzIGxlZnQKQEAgLTIyMDgsNyArMjE5MSw3IEBACiAJCWFsbG9jX2ZsYWdzICY9IH5BTExPQ19GQUlSOwogCQlpZiAobnJfZmFpcl9za2lwcGVkKSB7CiAJCQl6b25lbGlzdF9yZXNjYW4gPSB0cnVlOwotCQkJcmVzZXRfYWxsb2NfYmF0Y2hlcyhwcmVmZXJyZWRfem9uZSk7CisJCQlyZXNldF9hbGxvY19iYXRjaGVzKGFjLT5wcmVmZXJyZWRfem9uZSk7CiAJCX0KIAkJaWYgKG5yX29ubGluZV9ub2RlcyA+IDEpCiAJCQl6b25lbGlzdF9yZXNjYW4gPSB0cnVlOwpAQCAtMjMzMCw0NCArMjMxMyw0NCBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICoKIF9fYWxsb2NfcGFnZXNfbWF5X29vbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLAotCXN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGVudW0gem9uZV90eXBlIGhpZ2hfem9uZWlkeCwKLQlub2RlbWFza190ICpub2RlbWFzaywgc3RydWN0IHpvbmUgKnByZWZlcnJlZF96b25lLAotCWludCBjbGFzc3pvbmVfaWR4LCBpbnQgbWlncmF0ZXR5cGUpCisJY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCB1bnNpZ25lZCBsb25nICpkaWRfc29tZV9wcm9ncmVzcykKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCS8qIEFjcXVpcmUgdGhlIHBlci16b25lIG9vbSBsb2NrIGZvciBlYWNoIHpvbmUgKi8KLQlpZiAoIW9vbV96b25lbGlzdF90cnlsb2NrKHpvbmVsaXN0LCBnZnBfbWFzaykpIHsKKwkqZGlkX3NvbWVfcHJvZ3Jlc3MgPSAwOworCisJLyoKKwkgKiBBY3F1aXJlIHRoZSBwZXItem9uZSBvb20gbG9jayBmb3IgZWFjaCB6b25lLiAgSWYgdGhhdAorCSAqIGZhaWxzLCBzb21lYm9keSBlbHNlIGlzIG1ha2luZyBwcm9ncmVzcyBmb3IgdXMuCisJICovCisJaWYgKCFvb21fem9uZWxpc3RfdHJ5bG9jayhhYy0+em9uZWxpc3QsIGdmcF9tYXNrKSkgeworCQkqZGlkX3NvbWVfcHJvZ3Jlc3MgPSAxOwogCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgxKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCiAJLyoKLQkgKiBQTS1mcmVlemVyIHNob3VsZCBiZSBub3RpZmllZCB0aGF0IHRoZXJlIG1pZ2h0IGJlIGFuIE9PTSBraWxsZXIgb24KLQkgKiBpdHMgd2F5IHRvIGtpbGwgYW5kIHdha2Ugc29tZWJvZHkgdXAuIFRoaXMgaXMgdG9vIGVhcmx5IGFuZCB3ZSBtaWdodAotCSAqIGVuZCB1cCBub3Qga2lsbGluZyBhbnl0aGluZyBidXQgZmFsc2UgcG9zaXRpdmVzIGFyZSBhY2NlcHRhYmxlLgotCSAqIFNlZSBmcmVlemVfcHJvY2Vzc2VzLgotCSAqLwotCW5vdGVfb29tX2tpbGwoKTsKLQotCS8qCiAJICogR28gdGhyb3VnaCB0aGUgem9uZWxpc3QgeWV0IG9uZSBtb3JlIHRpbWUsIGtlZXAgdmVyeSBoaWdoIHdhdGVybWFyawogCSAqIGhlcmUsIHRoaXMgaXMgb25seSB0byBjYXRjaCBhIHBhcmFsbGVsIG9vbSBraWxsaW5nLCB3ZSBtdXN0IGZhaWwgaWYKIAkgKiB3ZSdyZSBzdGlsbCB1bmRlciBoZWF2eSBwcmVzc3VyZS4KIAkgKi8KLQlwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfbWFza3xfX0dGUF9IQVJEV0FMTCwgbm9kZW1hc2ssCi0JCW9yZGVyLCB6b25lbGlzdCwgaGlnaF96b25laWR4LAotCQlBTExPQ19XTUFSS19ISUdIfEFMTE9DX0NQVVNFVCwKLQkJcHJlZmVycmVkX3pvbmUsIGNsYXNzem9uZV9pZHgsIG1pZ3JhdGV0eXBlKTsKKwlwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfbWFzayB8IF9fR0ZQX0hBUkRXQUxMLCBvcmRlciwKKwkJCQkJQUxMT0NfV01BUktfSElHSHxBTExPQ19DUFVTRVQsIGFjKTsKIAlpZiAocGFnZSkKIAkJZ290byBvdXQ7CiAKIAlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX05PRkFJTCkpIHsKKwkJLyogQ29yZWR1bXBzIGNhbiBxdWlja2x5IGRlcGxldGUgYWxsIG1lbW9yeSByZXNlcnZlcyAqLworCQlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9EVU1QQ09SRSkKKwkJCWdvdG8gb3V0OwogCQkvKiBUaGUgT09NIGtpbGxlciB3aWxsIG5vdCBoZWxwIGhpZ2hlciBvcmRlciBhbGxvY3MgKi8KIAkJaWYgKG9yZGVyID4gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpCiAJCQlnb3RvIG91dDsKIAkJLyogVGhlIE9PTSBraWxsZXIgZG9lcyBub3QgbmVlZGxlc3NseSBraWxsIHRhc2tzIGZvciBsb3dtZW0gKi8KLQkJaWYgKGhpZ2hfem9uZWlkeCA8IFpPTkVfTk9STUFMKQorCQlpZiAoYWMtPmhpZ2hfem9uZWlkeCA8IFpPTkVfTk9STUFMKQorCQkJZ290byBvdXQ7CisJCS8qIFRoZSBPT00ga2lsbGVyIGRvZXMgbm90IGNvbXBlbnNhdGUgZm9yIGxpZ2h0IHJlY2xhaW0gKi8KKwkJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9GUykpCiAJCQlnb3RvIG91dDsKIAkJLyoKIAkJICogR0ZQX1RISVNOT0RFIGNvbnRhaW5zIF9fR0ZQX05PUkVUUlkgYW5kIHdlIG5ldmVyIGhpdCB0aGlzLgpAQCAtMjM4MCwxMCArMjM2MywxMCBAQAogCQkJZ290byBvdXQ7CiAJfQogCS8qIEV4aGF1c3RlZCB3aGF0IGNhbiBiZSBkb25lIHNvIGl0J3MgYmxhbW8gdGltZSAqLwotCW91dF9vZl9tZW1vcnkoem9uZWxpc3QsIGdmcF9tYXNrLCBvcmRlciwgbm9kZW1hc2ssIGZhbHNlKTsKLQorCWlmIChvdXRfb2ZfbWVtb3J5KGFjLT56b25lbGlzdCwgZ2ZwX21hc2ssIG9yZGVyLCBhYy0+bm9kZW1hc2ssIGZhbHNlKSkKKwkJKmRpZF9zb21lX3Byb2dyZXNzID0gMTsKIG91dDoKLQlvb21fem9uZWxpc3RfdW5sb2NrKHpvbmVsaXN0LCBnZnBfbWFzayk7CisJb29tX3pvbmVsaXN0X3VubG9jayhhYy0+em9uZWxpc3QsIGdmcF9tYXNrKTsKIAlyZXR1cm4gcGFnZTsKIH0KIApAQCAtMjM5MSwxMCArMjM3NCw5IEBACiAvKiBUcnkgbWVtb3J5IGNvbXBhY3Rpb24gZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgYmVmb3JlIHJlY2xhaW0gKi8KIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqCiBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCi0Jc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgZW51bSB6b25lX3R5cGUgaGlnaF96b25laWR4LAotCW5vZGVtYXNrX3QgKm5vZGVtYXNrLCBpbnQgYWxsb2NfZmxhZ3MsIHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSwKLQlpbnQgY2xhc3N6b25lX2lkeCwgaW50IG1pZ3JhdGV0eXBlLCBlbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLAotCWludCAqY29udGVuZGVkX2NvbXBhY3Rpb24sIGJvb2wgKmRlZmVycmVkX2NvbXBhY3Rpb24pCisJCWludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLAorCQllbnVtIG1pZ3JhdGVfbW9kZSBtb2RlLCBpbnQgKmNvbnRlbmRlZF9jb21wYWN0aW9uLAorCQlib29sICpkZWZlcnJlZF9jb21wYWN0aW9uKQogewogCXVuc2lnbmVkIGxvbmcgY29tcGFjdF9yZXN1bHQ7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CkBAIC0yNDAzLDEwICsyMzg1LDggQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAljdXJyZW50LT5mbGFncyB8PSBQRl9NRU1BTExPQzsKLQljb21wYWN0X3Jlc3VsdCA9IHRyeV90b19jb21wYWN0X3BhZ2VzKHpvbmVsaXN0LCBvcmRlciwgZ2ZwX21hc2ssCi0JCQkJCQlub2RlbWFzaywgbW9kZSwKLQkJCQkJCWNvbnRlbmRlZF9jb21wYWN0aW9uLAotCQkJCQkJYWxsb2NfZmxhZ3MsIGNsYXNzem9uZV9pZHgpOworCWNvbXBhY3RfcmVzdWx0ID0gdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyLCBhbGxvY19mbGFncywgYWMsCisJCQkJCQltb2RlLCBjb250ZW5kZWRfY29tcGFjdGlvbik7CiAJY3VycmVudC0+ZmxhZ3MgJj0gflBGX01FTUFMTE9DOwogCiAJc3dpdGNoIChjb21wYWN0X3Jlc3VsdCkgewpAQCAtMjQyNSwxMCArMjQwNSw4IEBACiAJICovCiAJY291bnRfdm1fZXZlbnQoQ09NUEFDVFNUQUxMKTsKIAotCXBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGdmcF9tYXNrLCBub2RlbWFzaywKLQkJCW9yZGVyLCB6b25lbGlzdCwgaGlnaF96b25laWR4LAotCQkJYWxsb2NfZmxhZ3MgJiB+QUxMT0NfTk9fV0FURVJNQVJLUywKLQkJCXByZWZlcnJlZF96b25lLCBjbGFzc3pvbmVfaWR4LCBtaWdyYXRldHlwZSk7CisJcGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX21hc2ssIG9yZGVyLAorCQkJCQlhbGxvY19mbGFncyAmIH5BTExPQ19OT19XQVRFUk1BUktTLCBhYyk7CiAKIAlpZiAocGFnZSkgewogCQlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKQEAgLTI0NTIsMTAgKzI0MzAsOSBAQAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgogX19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLAotCXN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGVudW0gem9uZV90eXBlIGhpZ2hfem9uZWlkeCwKLQlub2RlbWFza190ICpub2RlbWFzaywgaW50IGFsbG9jX2ZsYWdzLCBzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsCi0JaW50IGNsYXNzem9uZV9pZHgsIGludCBtaWdyYXRldHlwZSwgZW51bSBtaWdyYXRlX21vZGUgbW9kZSwKLQlpbnQgKmNvbnRlbmRlZF9jb21wYWN0aW9uLCBib29sICpkZWZlcnJlZF9jb21wYWN0aW9uKQorCQlpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywKKwkJZW51bSBtaWdyYXRlX21vZGUgbW9kZSwgaW50ICpjb250ZW5kZWRfY29tcGFjdGlvbiwKKwkJYm9vbCAqZGVmZXJyZWRfY29tcGFjdGlvbikKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTI0NjMsOCArMjQ0MCw4IEBACiAKIC8qIFBlcmZvcm0gZGlyZWN0IHN5bmNocm9ub3VzIHBhZ2UgcmVjbGFpbSAqLwogc3RhdGljIGludAotX19wZXJmb3JtX3JlY2xhaW0oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwKLQkJICBub2RlbWFza190ICpub2RlbWFzaykKK19fcGVyZm9ybV9yZWNsYWltKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCisJCQkJCWNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYykKIHsKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSByZWNsYWltX3N0YXRlOwogCWludCBwcm9ncmVzczsKQEAgLTI0NzgsNyArMjQ1NSw4IEBACiAJcmVjbGFpbV9zdGF0ZS5yZWNsYWltZWRfc2xhYiA9IDA7CiAJY3VycmVudC0+cmVjbGFpbV9zdGF0ZSA9ICZyZWNsYWltX3N0YXRlOwogCi0JcHJvZ3Jlc3MgPSB0cnlfdG9fZnJlZV9wYWdlcyh6b25lbGlzdCwgb3JkZXIsIGdmcF9tYXNrLCBub2RlbWFzayk7CisJcHJvZ3Jlc3MgPSB0cnlfdG9fZnJlZV9wYWdlcyhhYy0+em9uZWxpc3QsIG9yZGVyLCBnZnBfbWFzaywKKwkJCQkJCQkJYWMtPm5vZGVtYXNrKTsKIAogCWN1cnJlbnQtPnJlY2xhaW1fc3RhdGUgPSBOVUxMOwogCWxvY2tkZXBfY2xlYXJfY3VycmVudF9yZWNsYWltX3N0YXRlKCk7CkBAIC0yNDkyLDI4ICsyNDcwLDIzIEBACiAvKiBUaGUgcmVhbGx5IHNsb3cgYWxsb2NhdG9yIHBhdGggd2hlcmUgd2UgZW50ZXIgZGlyZWN0IHJlY2xhaW0gKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgogX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLAotCXN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGVudW0gem9uZV90eXBlIGhpZ2hfem9uZWlkeCwKLQlub2RlbWFza190ICpub2RlbWFzaywgaW50IGFsbG9jX2ZsYWdzLCBzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsCi0JaW50IGNsYXNzem9uZV9pZHgsIGludCBtaWdyYXRldHlwZSwgdW5zaWduZWQgbG9uZyAqZGlkX3NvbWVfcHJvZ3Jlc3MpCisJCWludCBhbGxvY19mbGFncywgY29uc3Qgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLAorCQl1bnNpZ25lZCBsb25nICpkaWRfc29tZV9wcm9ncmVzcykKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CiAJYm9vbCBkcmFpbmVkID0gZmFsc2U7CiAKLQkqZGlkX3NvbWVfcHJvZ3Jlc3MgPSBfX3BlcmZvcm1fcmVjbGFpbShnZnBfbWFzaywgb3JkZXIsIHpvbmVsaXN0LAotCQkJCQkgICAgICAgbm9kZW1hc2spOworCSpkaWRfc29tZV9wcm9ncmVzcyA9IF9fcGVyZm9ybV9yZWNsYWltKGdmcF9tYXNrLCBvcmRlciwgYWMpOwogCWlmICh1bmxpa2VseSghKCpkaWRfc29tZV9wcm9ncmVzcykpKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qIEFmdGVyIHN1Y2Nlc3NmdWwgcmVjbGFpbSwgcmVjb25zaWRlciBhbGwgem9uZXMgZm9yIGFsbG9jYXRpb24gKi8KIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfTlVNQSkpCi0JCXpsY19jbGVhcl96b25lc19mdWxsKHpvbmVsaXN0KTsKKwkJemxjX2NsZWFyX3pvbmVzX2Z1bGwoYWMtPnpvbmVsaXN0KTsKIAogcmV0cnk6Ci0JcGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX21hc2ssIG5vZGVtYXNrLCBvcmRlciwKLQkJCQkJem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwKLQkJCQkJYWxsb2NfZmxhZ3MgJiB+QUxMT0NfTk9fV0FURVJNQVJLUywKLQkJCQkJcHJlZmVycmVkX3pvbmUsIGNsYXNzem9uZV9pZHgsCi0JCQkJCW1pZ3JhdGV0eXBlKTsKKwlwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfbWFzaywgb3JkZXIsCisJCQkJCWFsbG9jX2ZsYWdzICYgfkFMTE9DX05PX1dBVEVSTUFSS1MsIGFjKTsKIAogCS8qCiAJICogSWYgYW4gYWxsb2NhdGlvbiBmYWlsZWQgYWZ0ZXIgZGlyZWN0IHJlY2xhaW0sIGl0IGNvdWxkIGJlIGJlY2F1c2UKQEAgLTI1MzQsMzYgKzI1MDcsMzAgQEAKICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqCiBfX2FsbG9jX3BhZ2VzX2hpZ2hfcHJpb3JpdHkoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwKLQlzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBlbnVtIHpvbmVfdHlwZSBoaWdoX3pvbmVpZHgsCi0Jbm9kZW1hc2tfdCAqbm9kZW1hc2ssIHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSwKLQlpbnQgY2xhc3N6b25lX2lkeCwgaW50IG1pZ3JhdGV0eXBlKQorCQkJCWNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYykKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCWRvIHsKLQkJcGFnZSA9IGdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX21hc2ssIG5vZGVtYXNrLCBvcmRlciwKLQkJCXpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsIEFMTE9DX05PX1dBVEVSTUFSS1MsCi0JCQlwcmVmZXJyZWRfem9uZSwgY2xhc3N6b25lX2lkeCwgbWlncmF0ZXR5cGUpOworCQlwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfbWFzaywgb3JkZXIsCisJCQkJCQlBTExPQ19OT19XQVRFUk1BUktTLCBhYyk7CiAKIAkJaWYgKCFwYWdlICYmIGdmcF9tYXNrICYgX19HRlBfTk9GQUlMKQotCQkJd2FpdF9pZmZfY29uZ2VzdGVkKHByZWZlcnJlZF96b25lLCBCTEtfUldfQVNZTkMsIEhaLzUwKTsKKwkJCXdhaXRfaWZmX2Nvbmdlc3RlZChhYy0+cHJlZmVycmVkX3pvbmUsIEJMS19SV19BU1lOQywKKwkJCQkJCQkJCUhaLzUwKTsKIAl9IHdoaWxlICghcGFnZSAmJiAoZ2ZwX21hc2sgJiBfX0dGUF9OT0ZBSUwpKTsKIAogCXJldHVybiBwYWdlOwogfQogCi1zdGF0aWMgdm9pZCB3YWtlX2FsbF9rc3dhcGRzKHVuc2lnbmVkIGludCBvcmRlciwKLQkJCSAgICAgc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwKLQkJCSAgICAgZW51bSB6b25lX3R5cGUgaGlnaF96b25laWR4LAotCQkJICAgICBzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsCi0JCQkgICAgIG5vZGVtYXNrX3QgKm5vZGVtYXNrKQorc3RhdGljIHZvaWQgd2FrZV9hbGxfa3N3YXBkcyh1bnNpZ25lZCBpbnQgb3JkZXIsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYykKIHsKIAlzdHJ1Y3Qgem9uZXJlZiAqejsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKIAotCWZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgem9uZWxpc3QsCi0JCQkJCQloaWdoX3pvbmVpZHgsIG5vZGVtYXNrKQotCQl3YWtldXBfa3N3YXBkKHpvbmUsIG9yZGVyLCB6b25lX2lkeChwcmVmZXJyZWRfem9uZSkpOworCWZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMtPnpvbmVsaXN0LAorCQkJCQkJYWMtPmhpZ2hfem9uZWlkeCwgYWMtPm5vZGVtYXNrKQorCQl3YWtldXBfa3N3YXBkKHpvbmUsIG9yZGVyLCB6b25lX2lkeChhYy0+cHJlZmVycmVkX3pvbmUpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTI2MjIsOSArMjU4OSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKgogX19hbGxvY19wYWdlc19zbG93cGF0aChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLAotCXN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsIGVudW0gem9uZV90eXBlIGhpZ2hfem9uZWlkeCwKLQlub2RlbWFza190ICpub2RlbWFzaywgc3RydWN0IHpvbmUgKnByZWZlcnJlZF96b25lLAotCWludCBjbGFzc3pvbmVfaWR4LCBpbnQgbWlncmF0ZXR5cGUpCisJCQkJCQlzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMpCiB7CiAJY29uc3QgZ2ZwX3Qgd2FpdCA9IGdmcF9tYXNrICYgX19HRlBfV0FJVDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CkBAIC0yNjU4LDEwICsyNjIzLDkgQEAKIAkgICAgKGdmcF9tYXNrICYgR0ZQX1RISVNOT0RFKSA9PSBHRlBfVEhJU05PREUpCiAJCWdvdG8gbm9wYWdlOwogCi1yZXN0YXJ0OgorcmV0cnk6CiAJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9OT19LU1dBUEQpKQotCQl3YWtlX2FsbF9rc3dhcGRzKG9yZGVyLCB6b25lbGlzdCwgaGlnaF96b25laWR4LAotCQkJCXByZWZlcnJlZF96b25lLCBub2RlbWFzayk7CisJCXdha2VfYWxsX2tzd2FwZHMob3JkZXIsIGFjKTsKIAogCS8qCiAJICogT0ssIHdlJ3JlIGJlbG93IHRoZSBrc3dhcGQgd2F0ZXJtYXJrIGFuZCBoYXZlIGtpY2tlZCBiYWNrZ3JvdW5kCkBAIC0yNjc0LDE4ICsyNjM4LDE2IEBACiAJICogRmluZCB0aGUgdHJ1ZSBwcmVmZXJyZWQgem9uZSBpZiB0aGUgYWxsb2NhdGlvbiBpcyB1bmNvbnN0cmFpbmVkIGJ5CiAJICogY3B1c2V0cy4KIAkgKi8KLQlpZiAoIShhbGxvY19mbGFncyAmIEFMTE9DX0NQVVNFVCkgJiYgIW5vZGVtYXNrKSB7CisJaWYgKCEoYWxsb2NfZmxhZ3MgJiBBTExPQ19DUFVTRVQpICYmICFhYy0+bm9kZW1hc2spIHsKIAkJc3RydWN0IHpvbmVyZWYgKnByZWZlcnJlZF96b25lcmVmOwotCQlwcmVmZXJyZWRfem9uZXJlZiA9IGZpcnN0X3pvbmVzX3pvbmVsaXN0KHpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsCi0JCQkJTlVMTCwgJnByZWZlcnJlZF96b25lKTsKLQkJY2xhc3N6b25lX2lkeCA9IHpvbmVsaXN0X3pvbmVfaWR4KHByZWZlcnJlZF96b25lcmVmKTsKKwkJcHJlZmVycmVkX3pvbmVyZWYgPSBmaXJzdF96b25lc196b25lbGlzdChhYy0+em9uZWxpc3QsCisJCQkJYWMtPmhpZ2hfem9uZWlkeCwgTlVMTCwgJmFjLT5wcmVmZXJyZWRfem9uZSk7CisJCWFjLT5jbGFzc3pvbmVfaWR4ID0gem9uZWxpc3Rfem9uZV9pZHgocHJlZmVycmVkX3pvbmVyZWYpOwogCX0KIAotcmViYWxhbmNlOgogCS8qIFRoaXMgaXMgdGhlIGxhc3QgY2hhbmNlLCBpbiBnZW5lcmFsLCBiZWZvcmUgdGhlIGdvdG8gbm9wYWdlLiAqLwotCXBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGdmcF9tYXNrLCBub2RlbWFzaywgb3JkZXIsIHpvbmVsaXN0LAotCQkJaGlnaF96b25laWR4LCBhbGxvY19mbGFncyAmIH5BTExPQ19OT19XQVRFUk1BUktTLAotCQkJcHJlZmVycmVkX3pvbmUsIGNsYXNzem9uZV9pZHgsIG1pZ3JhdGV0eXBlKTsKKwlwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfbWFzaywgb3JkZXIsCisJCQkJYWxsb2NfZmxhZ3MgJiB+QUxMT0NfTk9fV0FURVJNQVJLUywgYWMpOwogCWlmIChwYWdlKQogCQlnb3RvIGdvdF9wZzsKIApAQCAtMjY5NiwxMSArMjY1OCwxMCBAQAogCQkgKiB0aGUgYWxsb2NhdGlvbiBpcyBoaWdoIHByaW9yaXR5IGFuZCB0aGVzZSB0eXBlIG9mCiAJCSAqIGFsbG9jYXRpb25zIGFyZSBzeXN0ZW0gcmF0aGVyIHRoYW4gdXNlciBvcmllbnRhdGVkCiAJCSAqLwotCQl6b25lbGlzdCA9IG5vZGVfem9uZWxpc3QobnVtYV9ub2RlX2lkKCksIGdmcF9tYXNrKTsKKwkJYWMtPnpvbmVsaXN0ID0gbm9kZV96b25lbGlzdChudW1hX25vZGVfaWQoKSwgZ2ZwX21hc2spOwogCi0JCXBhZ2UgPSBfX2FsbG9jX3BhZ2VzX2hpZ2hfcHJpb3JpdHkoZ2ZwX21hc2ssIG9yZGVyLAotCQkJCXpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsIG5vZGVtYXNrLAotCQkJCXByZWZlcnJlZF96b25lLCBjbGFzc3pvbmVfaWR4LCBtaWdyYXRldHlwZSk7CisJCXBhZ2UgPSBfX2FsbG9jX3BhZ2VzX2hpZ2hfcHJpb3JpdHkoZ2ZwX21hc2ssIG9yZGVyLCBhYyk7CisKIAkJaWYgKHBhZ2UpIHsKIAkJCWdvdG8gZ290X3BnOwogCQl9CkBAIC0yNzI5LDExICsyNjkwLDkgQEAKIAkgKiBUcnkgZGlyZWN0IGNvbXBhY3Rpb24uIFRoZSBmaXJzdCBwYXNzIGlzIGFzeW5jaHJvbm91cy4gU3Vic2VxdWVudAogCSAqIGF0dGVtcHRzIGFmdGVyIGRpcmVjdCByZWNsYWltIGFyZSBzeW5jaHJvbm91cwogCSAqLwotCXBhZ2UgPSBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF9tYXNrLCBvcmRlciwgem9uZWxpc3QsCi0JCQkJCWhpZ2hfem9uZWlkeCwgbm9kZW1hc2ssIGFsbG9jX2ZsYWdzLAotCQkJCQlwcmVmZXJyZWRfem9uZSwKLQkJCQkJY2xhc3N6b25lX2lkeCwgbWlncmF0ZXR5cGUsCi0JCQkJCW1pZ3JhdGlvbl9tb2RlLCAmY29udGVuZGVkX2NvbXBhY3Rpb24sCisJcGFnZSA9IF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX21hc2ssIG9yZGVyLCBhbGxvY19mbGFncywgYWMsCisJCQkJCW1pZ3JhdGlvbl9tb2RlLAorCQkJCQkmY29udGVuZGVkX2NvbXBhY3Rpb24sCiAJCQkJCSZkZWZlcnJlZF9jb21wYWN0aW9uKTsKIAlpZiAocGFnZSkKIAkJZ290byBnb3RfcGc7CkBAIC0yNzc5LDc0ICsyNzM4LDQwIEBACiAJCW1pZ3JhdGlvbl9tb2RlID0gTUlHUkFURV9TWU5DX0xJR0hUOwogCiAJLyogVHJ5IGRpcmVjdCByZWNsYWltIGFuZCB0aGVuIGFsbG9jYXRpbmcgKi8KLQlwYWdlID0gX19hbGxvY19wYWdlc19kaXJlY3RfcmVjbGFpbShnZnBfbWFzaywgb3JkZXIsCi0JCQkJCXpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsCi0JCQkJCW5vZGVtYXNrLAotCQkJCQlhbGxvY19mbGFncywgcHJlZmVycmVkX3pvbmUsCi0JCQkJCWNsYXNzem9uZV9pZHgsIG1pZ3JhdGV0eXBlLAotCQkJCQkmZGlkX3NvbWVfcHJvZ3Jlc3MpOworCXBhZ2UgPSBfX2FsbG9jX3BhZ2VzX2RpcmVjdF9yZWNsYWltKGdmcF9tYXNrLCBvcmRlciwgYWxsb2NfZmxhZ3MsIGFjLAorCQkJCQkJCSZkaWRfc29tZV9wcm9ncmVzcyk7CiAJaWYgKHBhZ2UpCiAJCWdvdG8gZ290X3BnOwogCi0JLyoKLQkgKiBJZiB3ZSBmYWlsZWQgdG8gbWFrZSBhbnkgcHJvZ3Jlc3MgcmVjbGFpbWluZywgdGhlbiB3ZSBhcmUKLQkgKiBydW5uaW5nIG91dCBvZiBvcHRpb25zIGFuZCBoYXZlIHRvIGNvbnNpZGVyIGdvaW5nIE9PTQotCSAqLwotCWlmICghZGlkX3NvbWVfcHJvZ3Jlc3MpIHsKLQkJaWYgKG9vbV9nZnBfYWxsb3dlZChnZnBfbWFzaykpIHsKLQkJCWlmIChvb21fa2lsbGVyX2Rpc2FibGVkKQotCQkJCWdvdG8gbm9wYWdlOwotCQkJLyogQ29yZWR1bXBzIGNhbiBxdWlja2x5IGRlcGxldGUgYWxsIG1lbW9yeSByZXNlcnZlcyAqLwotCQkJaWYgKChjdXJyZW50LT5mbGFncyAmIFBGX0RVTVBDT1JFKSAmJgotCQkJICAgICEoZ2ZwX21hc2sgJiBfX0dGUF9OT0ZBSUwpKQotCQkJCWdvdG8gbm9wYWdlOwotCQkJcGFnZSA9IF9fYWxsb2NfcGFnZXNfbWF5X29vbShnZnBfbWFzaywgb3JkZXIsCi0JCQkJCXpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsCi0JCQkJCW5vZGVtYXNrLCBwcmVmZXJyZWRfem9uZSwKLQkJCQkJY2xhc3N6b25lX2lkeCwgbWlncmF0ZXR5cGUpOwotCQkJaWYgKHBhZ2UpCi0JCQkJZ290byBnb3RfcGc7Ci0KLQkJCWlmICghKGdmcF9tYXNrICYgX19HRlBfTk9GQUlMKSkgewotCQkJCS8qCi0JCQkJICogVGhlIG9vbSBraWxsZXIgaXMgbm90IGNhbGxlZCBmb3IgaGlnaC1vcmRlcgotCQkJCSAqIGFsbG9jYXRpb25zIHRoYXQgbWF5IGZhaWwsIHNvIGlmIG5vIHByb2dyZXNzCi0JCQkJICogaXMgYmVpbmcgbWFkZSwgdGhlcmUgYXJlIG5vIG90aGVyIG9wdGlvbnMgYW5kCi0JCQkJICogcmV0cnlpbmcgaXMgdW5saWtlbHkgdG8gaGVscC4KLQkJCQkgKi8KLQkJCQlpZiAob3JkZXIgPiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUikKLQkJCQkJZ290byBub3BhZ2U7Ci0JCQkJLyoKLQkJCQkgKiBUaGUgb29tIGtpbGxlciBpcyBub3QgY2FsbGVkIGZvciBsb3dtZW0KLQkJCQkgKiBhbGxvY2F0aW9ucyB0byBwcmV2ZW50IG5lZWRsZXNzbHkga2lsbGluZwotCQkJCSAqIGlubm9jZW50IHRhc2tzLgotCQkJCSAqLwotCQkJCWlmIChoaWdoX3pvbmVpZHggPCBaT05FX05PUk1BTCkKLQkJCQkJZ290byBub3BhZ2U7Ci0JCQl9Ci0KLQkJCWdvdG8gcmVzdGFydDsKLQkJfQotCX0KLQogCS8qIENoZWNrIGlmIHdlIHNob3VsZCByZXRyeSB0aGUgYWxsb2NhdGlvbiAqLwogCXBhZ2VzX3JlY2xhaW1lZCArPSBkaWRfc29tZV9wcm9ncmVzczsKIAlpZiAoc2hvdWxkX2FsbG9jX3JldHJ5KGdmcF9tYXNrLCBvcmRlciwgZGlkX3NvbWVfcHJvZ3Jlc3MsCiAJCQkJCQlwYWdlc19yZWNsYWltZWQpKSB7CisJCS8qCisJCSAqIElmIHdlIGZhaWwgdG8gbWFrZSBwcm9ncmVzcyBieSBmcmVlaW5nIGluZGl2aWR1YWwKKwkJICogcGFnZXMsIGJ1dCB0aGUgYWxsb2NhdGlvbiB3YW50cyB1cyB0byBrZWVwIGdvaW5nLAorCQkgKiBzdGFydCBPT00ga2lsbGluZyB0YXNrcy4KKwkJICovCisJCWlmICghZGlkX3NvbWVfcHJvZ3Jlc3MpIHsKKwkJCXBhZ2UgPSBfX2FsbG9jX3BhZ2VzX21heV9vb20oZ2ZwX21hc2ssIG9yZGVyLCBhYywKKwkJCQkJCQkmZGlkX3NvbWVfcHJvZ3Jlc3MpOworCQkJaWYgKHBhZ2UpCisJCQkJZ290byBnb3RfcGc7CisJCQlpZiAoIWRpZF9zb21lX3Byb2dyZXNzKQorCQkJCWdvdG8gbm9wYWdlOworCQl9CiAJCS8qIFdhaXQgZm9yIHNvbWUgd3JpdGUgcmVxdWVzdHMgdG8gY29tcGxldGUgdGhlbiByZXRyeSAqLwotCQl3YWl0X2lmZl9jb25nZXN0ZWQocHJlZmVycmVkX3pvbmUsIEJMS19SV19BU1lOQywgSFovNTApOwotCQlnb3RvIHJlYmFsYW5jZTsKKwkJd2FpdF9pZmZfY29uZ2VzdGVkKGFjLT5wcmVmZXJyZWRfem9uZSwgQkxLX1JXX0FTWU5DLCBIWi81MCk7CisJCWdvdG8gcmV0cnk7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogSGlnaC1vcmRlciBhbGxvY2F0aW9ucyBkbyBub3QgbmVjZXNzYXJpbHkgbG9vcCBhZnRlcgogCQkgKiBkaXJlY3QgcmVjbGFpbSBhbmQgcmVjbGFpbS9jb21wYWN0aW9uIGRlcGVuZHMgb24gY29tcGFjdGlvbgogCQkgKiBiZWluZyBjYWxsZWQgYWZ0ZXIgcmVjbGFpbSBzbyBjYWxsIGRpcmVjdGx5IGlmIG5lY2Vzc2FyeQogCQkgKi8KLQkJcGFnZSA9IF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX21hc2ssIG9yZGVyLCB6b25lbGlzdCwKLQkJCQkJaGlnaF96b25laWR4LCBub2RlbWFzaywgYWxsb2NfZmxhZ3MsCi0JCQkJCXByZWZlcnJlZF96b25lLAotCQkJCQljbGFzc3pvbmVfaWR4LCBtaWdyYXRldHlwZSwKLQkJCQkJbWlncmF0aW9uX21vZGUsICZjb250ZW5kZWRfY29tcGFjdGlvbiwKKwkJcGFnZSA9IF9fYWxsb2NfcGFnZXNfZGlyZWN0X2NvbXBhY3QoZ2ZwX21hc2ssIG9yZGVyLAorCQkJCQlhbGxvY19mbGFncywgYWMsIG1pZ3JhdGlvbl9tb2RlLAorCQkJCQkmY29udGVuZGVkX2NvbXBhY3Rpb24sCiAJCQkJCSZkZWZlcnJlZF9jb21wYWN0aW9uKTsKIAkJaWYgKHBhZ2UpCiAJCQlnb3RvIGdvdF9wZzsKQEAgLTI4NTQsMTEgKzI3NzksNyBAQAogCiBub3BhZ2U6CiAJd2Fybl9hbGxvY19mYWlsZWQoZ2ZwX21hc2ssIG9yZGVyLCBOVUxMKTsKLQlyZXR1cm4gcGFnZTsKIGdvdF9wZzoKLQlpZiAoa21lbWNoZWNrX2VuYWJsZWQpCi0JCWttZW1jaGVja19wYWdlYWxsb2NfYWxsb2MocGFnZSwgb3JkZXIsIGdmcF9tYXNrKTsKLQogCXJldHVybiBwYWdlOwogfQogCkBAIC0yODY5LDE0ICsyNzkwLDE2IEBACiBfX2FsbG9jX3BhZ2VzX25vZGVtYXNrKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJCQlzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBub2RlbWFza190ICpub2RlbWFzaykKIHsKLQllbnVtIHpvbmVfdHlwZSBoaWdoX3pvbmVpZHggPSBnZnBfem9uZShnZnBfbWFzayk7Ci0Jc3RydWN0IHpvbmUgKnByZWZlcnJlZF96b25lOwogCXN0cnVjdCB6b25lcmVmICpwcmVmZXJyZWRfem9uZXJlZjsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7Ci0JaW50IG1pZ3JhdGV0eXBlID0gZ2ZwZmxhZ3NfdG9fbWlncmF0ZXR5cGUoZ2ZwX21hc2spOwogCXVuc2lnbmVkIGludCBjcHVzZXRfbWVtc19jb29raWU7CiAJaW50IGFsbG9jX2ZsYWdzID0gQUxMT0NfV01BUktfTE9XfEFMTE9DX0NQVVNFVHxBTExPQ19GQUlSOwotCWludCBjbGFzc3pvbmVfaWR4OworCWdmcF90IGFsbG9jX21hc2s7IC8qIFRoZSBnZnBfdCB0aGF0IHdhcyBhY3R1YWxseSB1c2VkIGZvciBhbGxvY2F0aW9uICovCisJc3RydWN0IGFsbG9jX2NvbnRleHQgYWMgPSB7CisJCS5oaWdoX3pvbmVpZHggPSBnZnBfem9uZShnZnBfbWFzayksCisJCS5ub2RlbWFzayA9IG5vZGVtYXNrLAorCQkubWlncmF0ZXR5cGUgPSBnZnBmbGFnc190b19taWdyYXRldHlwZShnZnBfbWFzayksCisJfTsKIAogCWdmcF9tYXNrICY9IGdmcF9hbGxvd2VkX21hc2s7CiAKQEAgLTI4OTUsMzcgKzI4MTgsNDAgQEAKIAlpZiAodW5saWtlbHkoIXpvbmVsaXN0LT5fem9uZXJlZnMtPnpvbmUpKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmIChJU19FTkFCTEVEKENPTkZJR19DTUEpICYmIG1pZ3JhdGV0eXBlID09IE1JR1JBVEVfTU9WQUJMRSkKKwlpZiAoSVNfRU5BQkxFRChDT05GSUdfQ01BKSAmJiBhYy5taWdyYXRldHlwZSA9PSBNSUdSQVRFX01PVkFCTEUpCiAJCWFsbG9jX2ZsYWdzIHw9IEFMTE9DX0NNQTsKIAogcmV0cnlfY3B1c2V0OgogCWNwdXNldF9tZW1zX2Nvb2tpZSA9IHJlYWRfbWVtc19hbGxvd2VkX2JlZ2luKCk7CiAKKwkvKiBXZSBzZXQgaXQgaGVyZSwgYXMgX19hbGxvY19wYWdlc19zbG93cGF0aCBtaWdodCBoYXZlIGNoYW5nZWQgaXQgKi8KKwlhYy56b25lbGlzdCA9IHpvbmVsaXN0OwogCS8qIFRoZSBwcmVmZXJyZWQgem9uZSBpcyB1c2VkIGZvciBzdGF0aXN0aWNzIGxhdGVyICovCi0JcHJlZmVycmVkX3pvbmVyZWYgPSBmaXJzdF96b25lc196b25lbGlzdCh6b25lbGlzdCwgaGlnaF96b25laWR4LAotCQkJCW5vZGVtYXNrID8gOiAmY3B1c2V0X2N1cnJlbnRfbWVtc19hbGxvd2VkLAotCQkJCSZwcmVmZXJyZWRfem9uZSk7Ci0JaWYgKCFwcmVmZXJyZWRfem9uZSkKKwlwcmVmZXJyZWRfem9uZXJlZiA9IGZpcnN0X3pvbmVzX3pvbmVsaXN0KGFjLnpvbmVsaXN0LCBhYy5oaWdoX3pvbmVpZHgsCisJCQkJYWMubm9kZW1hc2sgPyA6ICZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQsCisJCQkJJmFjLnByZWZlcnJlZF96b25lKTsKKwlpZiAoIWFjLnByZWZlcnJlZF96b25lKQogCQlnb3RvIG91dDsKLQljbGFzc3pvbmVfaWR4ID0gem9uZWxpc3Rfem9uZV9pZHgocHJlZmVycmVkX3pvbmVyZWYpOworCWFjLmNsYXNzem9uZV9pZHggPSB6b25lbGlzdF96b25lX2lkeChwcmVmZXJyZWRfem9uZXJlZik7CiAKIAkvKiBGaXJzdCBhbGxvY2F0aW9uIGF0dGVtcHQgKi8KLQlwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfbWFza3xfX0dGUF9IQVJEV0FMTCwgbm9kZW1hc2ssIG9yZGVyLAotCQkJem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwgYWxsb2NfZmxhZ3MsCi0JCQlwcmVmZXJyZWRfem9uZSwgY2xhc3N6b25lX2lkeCwgbWlncmF0ZXR5cGUpOworCWFsbG9jX21hc2sgPSBnZnBfbWFza3xfX0dGUF9IQVJEV0FMTDsKKwlwYWdlID0gZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChhbGxvY19tYXNrLCBvcmRlciwgYWxsb2NfZmxhZ3MsICZhYyk7CiAJaWYgKHVubGlrZWx5KCFwYWdlKSkgewogCQkvKgogCQkgKiBSdW50aW1lIFBNLCBibG9jayBJTyBhbmQgaXRzIGVycm9yIGhhbmRsaW5nIHBhdGgKIAkJICogY2FuIGRlYWRsb2NrIGJlY2F1c2UgSS9PIG9uIHRoZSBkZXZpY2UgbWlnaHQgbm90CiAJCSAqIGNvbXBsZXRlLgogCQkgKi8KLQkJZ2ZwX21hc2sgPSBtZW1hbGxvY19ub2lvX2ZsYWdzKGdmcF9tYXNrKTsKLQkJcGFnZSA9IF9fYWxsb2NfcGFnZXNfc2xvd3BhdGgoZ2ZwX21hc2ssIG9yZGVyLAotCQkJCXpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsIG5vZGVtYXNrLAotCQkJCXByZWZlcnJlZF96b25lLCBjbGFzc3pvbmVfaWR4LCBtaWdyYXRldHlwZSk7CisJCWFsbG9jX21hc2sgPSBtZW1hbGxvY19ub2lvX2ZsYWdzKGdmcF9tYXNrKTsKKworCQlwYWdlID0gX19hbGxvY19wYWdlc19zbG93cGF0aChhbGxvY19tYXNrLCBvcmRlciwgJmFjKTsKIAl9CiAKLQl0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBnZnBfbWFzaywgbWlncmF0ZXR5cGUpOworCWlmIChrbWVtY2hlY2tfZW5hYmxlZCAmJiBwYWdlKQorCQlrbWVtY2hlY2tfcGFnZWFsbG9jX2FsbG9jKHBhZ2UsIG9yZGVyLCBnZnBfbWFzayk7CisKKwl0cmFjZV9tbV9wYWdlX2FsbG9jKHBhZ2UsIG9yZGVyLCBhbGxvY19tYXNrLCBhYy5taWdyYXRldHlwZSk7CiAKIG91dDoKIAkvKgpAQCAtNTA1OSw4ICs0OTg1LDggQEAKIAlwZ2RhdC0+bm9kZV9zdGFydF9wZm4gPSBub2RlX3N0YXJ0X3BmbjsKICNpZmRlZiBDT05GSUdfSEFWRV9NRU1CTE9DS19OT0RFX01BUAogCWdldF9wZm5fcmFuZ2VfZm9yX25pZChuaWQsICZzdGFydF9wZm4sICZlbmRfcGZuKTsKLQlwcmludGsoS0VSTl9JTkZPICJJbml0bWVtIHNldHVwIG5vZGUgJWQgW21lbSAlIzAxMEx4LSUjMDEwTHhdXG4iLCBuaWQsCi0JCQkodTY0KSBzdGFydF9wZm4gPDwgUEFHRV9TSElGVCwgKHU2NCkgKGVuZF9wZm4gPDwgUEFHRV9TSElGVCkgLSAxKTsKKwlwcl9pbmZvKCJJbml0bWVtIHNldHVwIG5vZGUgJWQgW21lbSAlIzAxOEx4LSUjMDE4THhdXG4iLCBuaWQsCisJCSh1NjQpc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQsICgodTY0KWVuZF9wZm4gPDwgUEFHRV9TSElGVCkgLSAxKTsKICNlbmRpZgogCWNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMocGdkYXQsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKIAkJCQkgIHpvbmVzX3NpemUsIHpob2xlc19zaXplKTsKQEAgLTU0MzIsOSArNTM1OCwxMCBAQAogCQkJCWFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3BmbltpXSkKIAkJCXByX2NvbnQoImVtcHR5XG4iKTsKIAkJZWxzZQotCQkJcHJfY29udCgiW21lbSAlMCMxMGx4LSUwIzEwbHhdXG4iLAotCQkJCWFyY2hfem9uZV9sb3dlc3RfcG9zc2libGVfcGZuW2ldIDw8IFBBR0VfU0hJRlQsCi0JCQkJKGFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3BmbltpXQorCQkJcHJfY29udCgiW21lbSAlIzAxOEx4LSUjMDE4THhdXG4iLAorCQkJCSh1NjQpYXJjaF96b25lX2xvd2VzdF9wb3NzaWJsZV9wZm5baV0KKwkJCQkJPDwgUEFHRV9TSElGVCwKKwkJCQkoKHU2NClhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5baV0KIAkJCQkJPDwgUEFHRV9TSElGVCkgLSAxKTsKIAl9CiAKQEAgLTU0NDIsMTUgKzUzNjksMTYgQEAKIAlwcl9pbmZvKCJNb3ZhYmxlIHpvbmUgc3RhcnQgZm9yIGVhY2ggbm9kZVxuIik7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1OT0RFUzsgaSsrKSB7CiAJCWlmICh6b25lX21vdmFibGVfcGZuW2ldKQotCQkJcHJfaW5mbygiICBOb2RlICVkOiAlIzAxMGx4XG4iLCBpLAotCQkJICAgICAgIHpvbmVfbW92YWJsZV9wZm5baV0gPDwgUEFHRV9TSElGVCk7CisJCQlwcl9pbmZvKCIgIE5vZGUgJWQ6ICUjMDE4THhcbiIsIGksCisJCQkgICAgICAgKHU2NCl6b25lX21vdmFibGVfcGZuW2ldIDw8IFBBR0VfU0hJRlQpOwogCX0KIAogCS8qIFByaW50IG91dCB0aGUgZWFybHkgbm9kZSBtYXAgKi8KIAlwcl9pbmZvKCJFYXJseSBtZW1vcnkgbm9kZSByYW5nZXNcbiIpOwogCWZvcl9lYWNoX21lbV9wZm5fcmFuZ2UoaSwgTUFYX05VTU5PREVTLCAmc3RhcnRfcGZuLCAmZW5kX3BmbiwgJm5pZCkKLQkJcHJfaW5mbygiICBub2RlICUzZDogW21lbSAlIzAxMGx4LSUjMDEwbHhdXG4iLCBuaWQsCi0JCSAgICAgICBzdGFydF9wZm4gPDwgUEFHRV9TSElGVCwgKGVuZF9wZm4gPDwgUEFHRV9TSElGVCkgLSAxKTsKKwkJcHJfaW5mbygiICBub2RlICUzZDogW21lbSAlIzAxOEx4LSUjMDE4THhdXG4iLCBuaWQsCisJCQkodTY0KXN0YXJ0X3BmbiA8PCBQQUdFX1NISUZULAorCQkJKCh1NjQpZW5kX3BmbiA8PCBQQUdFX1NISUZUKSAtIDEpOwogCiAJLyogSW5pdGlhbGlzZSBldmVyeSBub2RlICovCiAJbW1pbml0X3ZlcmlmeV9wYWdlZmxhZ3NfbGF5b3V0KCk7CmRpZmYgLS1naXQgYS9tbS9wYWdlX2NvdW50ZXIuYyBiL21tL3BhZ2VfY291bnRlci5jCmluZGV4IGEwMDk1NzQuLjExYjRiZWRhIDEwMDY0NAotLS0gYS9tbS9wYWdlX2NvdW50ZXIuYworKysgYi9tbS9wYWdlX2NvdW50ZXIuYwpAQCAtMTY2LDE4ICsxNjYsMTkgQEAKIC8qKgogICogcGFnZV9jb3VudGVyX21lbXBhcnNlIC0gbWVtcGFyc2UoKSBmb3IgcGFnZSBjb3VudGVyIGxpbWl0cwogICogQGJ1Zjogc3RyaW5nIHRvIHBhcnNlCisgKiBAbWF4OiBzdHJpbmcgbWVhbmluZyBtYXhpbXVtIHBvc3NpYmxlIHZhbHVlCiAgKiBAbnJfcGFnZXM6IHJldHVybnMgdGhlIHJlc3VsdCBpbiBudW1iZXIgb2YgcGFnZXMKICAqCiAgKiBSZXR1cm5zIC1FSU5WQUwsIG9yIDAgYW5kIEBucl9wYWdlcyBvbiBzdWNjZXNzLiAgQG5yX3BhZ2VzIHdpbGwgYmUKICAqIGxpbWl0ZWQgdG8gJVBBR0VfQ09VTlRFUl9NQVguCiAgKi8KLWludCBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nICpucl9wYWdlcykKK2ludCBwYWdlX2NvdW50ZXJfbWVtcGFyc2UoY29uc3QgY2hhciAqYnVmLCBjb25zdCBjaGFyICptYXgsCisJCQkgIHVuc2lnbmVkIGxvbmcgKm5yX3BhZ2VzKQogewotCWNoYXIgdW5saW1pdGVkW10gPSAiLTEiOwogCWNoYXIgKmVuZDsKIAl1NjQgYnl0ZXM7CiAKLQlpZiAoIXN0cm5jbXAoYnVmLCB1bmxpbWl0ZWQsIHNpemVvZih1bmxpbWl0ZWQpKSkgeworCWlmICghc3RyY21wKGJ1ZiwgbWF4KSkgewogCQkqbnJfcGFnZXMgPSBQQUdFX0NPVU5URVJfTUFYOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9tbS9wYWdlX293bmVyLmMgYi9tbS9wYWdlX293bmVyLmMKaW5kZXggOWFiNGE5Yi4uMDk5M2Y1ZiAxMDA2NDQKLS0tIGEvbW0vcGFnZV9vd25lci5jCisrKyBiL21tL3BhZ2Vfb3duZXIuYwpAQCAtNTksMjAgKzU5LDE5IEBACiAKIHZvaWQgX19zZXRfcGFnZV9vd25lcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaykKIHsKLQlzdHJ1Y3QgcGFnZV9leHQgKnBhZ2VfZXh0OwotCXN0cnVjdCBzdGFja190cmFjZSAqdHJhY2U7CisJc3RydWN0IHBhZ2VfZXh0ICpwYWdlX2V4dCA9IGxvb2t1cF9wYWdlX2V4dChwYWdlKTsKKwlzdHJ1Y3Qgc3RhY2tfdHJhY2UgdHJhY2UgPSB7CisJCS5ucl9lbnRyaWVzID0gMCwKKwkJLm1heF9lbnRyaWVzID0gQVJSQVlfU0laRShwYWdlX2V4dC0+dHJhY2VfZW50cmllcyksCisJCS5lbnRyaWVzID0gJnBhZ2VfZXh0LT50cmFjZV9lbnRyaWVzWzBdLAorCQkuc2tpcCA9IDMsCisJfTsKIAotCXBhZ2VfZXh0ID0gbG9va3VwX3BhZ2VfZXh0KHBhZ2UpOwotCi0JdHJhY2UgPSAmcGFnZV9leHQtPnRyYWNlOwotCXRyYWNlLT5ucl9lbnRyaWVzID0gMDsKLQl0cmFjZS0+bWF4X2VudHJpZXMgPSBBUlJBWV9TSVpFKHBhZ2VfZXh0LT50cmFjZV9lbnRyaWVzKTsKLQl0cmFjZS0+ZW50cmllcyA9ICZwYWdlX2V4dC0+dHJhY2VfZW50cmllc1swXTsKLQl0cmFjZS0+c2tpcCA9IDM7Ci0Jc2F2ZV9zdGFja190cmFjZSgmcGFnZV9leHQtPnRyYWNlKTsKKwlzYXZlX3N0YWNrX3RyYWNlKCZ0cmFjZSk7CiAKIAlwYWdlX2V4dC0+b3JkZXIgPSBvcmRlcjsKIAlwYWdlX2V4dC0+Z2ZwX21hc2sgPSBnZnBfbWFzazsKKwlwYWdlX2V4dC0+bnJfZW50cmllcyA9IHRyYWNlLm5yX2VudHJpZXM7CiAKIAlfX3NldF9iaXQoUEFHRV9FWFRfT1dORVIsICZwYWdlX2V4dC0+ZmxhZ3MpOwogfQpAQCAtODQsNiArODMsMTAgQEAKIAlpbnQgcmV0OwogCWludCBwYWdlYmxvY2tfbXQsIHBhZ2VfbXQ7CiAJY2hhciAqa2J1ZjsKKwlzdHJ1Y3Qgc3RhY2tfdHJhY2UgdHJhY2UgPSB7CisJCS5ucl9lbnRyaWVzID0gcGFnZV9leHQtPm5yX2VudHJpZXMsCisJCS5lbnRyaWVzID0gJnBhZ2VfZXh0LT50cmFjZV9lbnRyaWVzWzBdLAorCX07CiAKIAlrYnVmID0ga21hbGxvYyhjb3VudCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFrYnVmKQpAQCAtMTIxLDggKzEyNCw3IEBACiAJaWYgKHJldCA+PSBjb3VudCkKIAkJZ290byBlcnI7CiAKLQlyZXQgKz0gc25wcmludF9zdGFja190cmFjZShrYnVmICsgcmV0LCBjb3VudCAtIHJldCwKLQkJCQkJJnBhZ2VfZXh0LT50cmFjZSwgMCk7CisJcmV0ICs9IHNucHJpbnRfc3RhY2tfdHJhY2Uoa2J1ZiArIHJldCwgY291bnQgLSByZXQsICZ0cmFjZSwgMCk7CiAJaWYgKHJldCA+PSBjb3VudCkKIAkJZ290byBlcnI7CiAKZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jCmluZGV4IGFkODMxOTUuLjc1YzFmMjggMTAwNjQ0Ci0tLSBhL21tL3BhZ2V3YWxrLmMKKysrIGIvbW0vcGFnZXdhbGsuYwpAQCAtMzUsNyArMzUsNyBAQAogCWRvIHsKIGFnYWluOgogCQluZXh0ID0gcG1kX2FkZHJfZW5kKGFkZHIsIGVuZCk7Ci0JCWlmIChwbWRfbm9uZSgqcG1kKSkgeworCQlpZiAocG1kX25vbmUoKnBtZCkgfHwgIXdhbGstPnZtYSkgewogCQkJaWYgKHdhbGstPnB0ZV9ob2xlKQogCQkJCWVyciA9IHdhbGstPnB0ZV9ob2xlKGFkZHIsIG5leHQsIHdhbGspOwogCQkJaWYgKGVycikKQEAgLTU5LDcgKzU5LDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXNwbGl0X2h1Z2VfcGFnZV9wbWRfbW0od2Fsay0+bW0sIGFkZHIsIHBtZCk7Ci0JCWlmIChwbWRfbm9uZV9vcl90cmFuc19odWdlX29yX2NsZWFyX2JhZChwbWQpKQorCQlpZiAocG1kX3RyYW5zX3Vuc3RhYmxlKHBtZCkpCiAJCQlnb3RvIGFnYWluOwogCQllcnIgPSB3YWxrX3B0ZV9yYW5nZShwbWQsIGFkZHIsIG5leHQsIHdhbGspOwogCQlpZiAoZXJyKQpAQCAtODYsOSArODYsNyBAQAogCQkJCWJyZWFrOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKHdhbGstPnB1ZF9lbnRyeSkKLQkJCWVyciA9IHdhbGstPnB1ZF9lbnRyeShwdWQsIGFkZHIsIG5leHQsIHdhbGspOwotCQlpZiAoIWVyciAmJiAod2Fsay0+cG1kX2VudHJ5IHx8IHdhbGstPnB0ZV9lbnRyeSkpCisJCWlmICh3YWxrLT5wbWRfZW50cnkgfHwgd2Fsay0+cHRlX2VudHJ5KQogCQkJZXJyID0gd2Fsa19wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCB3YWxrKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOwpAQCAtOTcsNiArOTUsMzIgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IHdhbGtfcGdkX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkgIHN0cnVjdCBtbV93YWxrICp3YWxrKQoreworCXBnZF90ICpwZ2Q7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCWludCBlcnIgPSAwOworCisJcGdkID0gcGdkX29mZnNldCh3YWxrLT5tbSwgYWRkcik7CisJZG8geworCQluZXh0ID0gcGdkX2FkZHJfZW5kKGFkZHIsIGVuZCk7CisJCWlmIChwZ2Rfbm9uZV9vcl9jbGVhcl9iYWQocGdkKSkgeworCQkJaWYgKHdhbGstPnB0ZV9ob2xlKQorCQkJCWVyciA9IHdhbGstPnB0ZV9ob2xlKGFkZHIsIG5leHQsIHdhbGspOworCQkJaWYgKGVycikKKwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh3YWxrLT5wbWRfZW50cnkgfHwgd2Fsay0+cHRlX2VudHJ5KQorCQkJZXJyID0gd2Fsa19wdWRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCB3YWxrKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCX0gd2hpbGUgKHBnZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOworCisJcmV0dXJuIGVycjsKK30KKwogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGh1Z2V0bGJfZW50cnlfZW5kKHN0cnVjdCBoc3RhdGUgKmgsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQpCkBAIC0xMDUsMTAgKzEyOSwxMCBAQAogCXJldHVybiBib3VuZGFyeSA8IGVuZCA/IGJvdW5kYXJ5IDogZW5kOwogfQogCi1zdGF0aWMgaW50IHdhbGtfaHVnZXRsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCitzdGF0aWMgaW50IHdhbGtfaHVnZXRsYl9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJICAgICAgc3RydWN0IG1tX3dhbGsgKndhbGspCiB7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLT52bWE7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTsKIAl1bnNpZ25lZCBsb25nIG5leHQ7CiAJdW5zaWduZWQgbG9uZyBobWFzayA9IGh1Z2VfcGFnZV9tYXNrKGgpOwpAQCAtMTIxLDE1ICsxNDUsMTQgQEAKIAkJaWYgKHB0ZSAmJiB3YWxrLT5odWdldGxiX2VudHJ5KQogCQkJZXJyID0gd2Fsay0+aHVnZXRsYl9lbnRyeShwdGUsIGhtYXNrLCBhZGRyLCBuZXh0LCB3YWxrKTsKIAkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CisJCQlicmVhazsKIAl9IHdoaWxlIChhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogI2Vsc2UgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLwotc3RhdGljIGludCB3YWxrX2h1Z2V0bGJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAorc3RhdGljIGludCB3YWxrX2h1Z2V0bGJfcmFuZ2UodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJCSAgICAgIHN0cnVjdCBtbV93YWxrICp3YWxrKQogewogCXJldHVybiAwOwpAQCAtMTM3LDExMiArMTYwLDEzOCBAQAogCiAjZW5kaWYgLyogQ09ORklHX0hVR0VUTEJfUEFHRSAqLwogCisvKgorICogRGVjaWRlIHdoZXRoZXIgd2UgcmVhbGx5IHdhbGsgb3ZlciB0aGUgY3VycmVudCB2bWEgb24gW0BzdGFydCwgQGVuZCkKKyAqIG9yIHNraXAgaXQgdmlhIHRoZSByZXR1cm5lZCB2YWx1ZS4gUmV0dXJuIDAgaWYgd2UgZG8gd2FsayBvdmVyIHRoZQorICogY3VycmVudCB2bWEsIGFuZCByZXR1cm4gMSBpZiB3ZSBza2lwIHRoZSB2bWEuIE5lZ2F0aXZlIHZhbHVlcyBtZWFucworICogZXJyb3IsIHdoZXJlIHdlIGFib3J0IHRoZSBjdXJyZW50IHdhbGsuCisgKi8KK3N0YXRpYyBpbnQgd2Fsa19wYWdlX3Rlc3QodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCisJCQlzdHJ1Y3QgbW1fd2FsayAqd2FsaykKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnZtYTsKIAorCWlmICh3YWxrLT50ZXN0X3dhbGspCisJCXJldHVybiB3YWxrLT50ZXN0X3dhbGsoc3RhcnQsIGVuZCwgd2Fsayk7CisKKwkvKgorCSAqIHZtYShWTV9QRk5NQVApIGRvZXNuJ3QgaGF2ZSBhbnkgdmFsaWQgc3RydWN0IHBhZ2VzIGJlaGluZCBWTV9QRk5NQVAKKwkgKiByYW5nZSwgc28gd2UgZG9uJ3Qgd2FsayBvdmVyIGl0IGFzIHdlIGRvIGZvciBub3JtYWwgdm1hcy4gSG93ZXZlciwKKwkgKiBTb21lIGNhbGxlcnMgYXJlIGludGVyZXN0ZWQgaW4gaGFuZGxpbmcgaG9sZSByYW5nZSBhbmQgdGhleSBkb24ndAorCSAqIHdhbnQgdG8ganVzdCBpZ25vcmUgYW55IHNpbmdsZSBhZGRyZXNzIHJhbmdlLiBTdWNoIHVzZXJzIGNlcnRhaW5seQorCSAqIGRlZmluZSB0aGVpciAtPnB0ZV9ob2xlKCkgY2FsbGJhY2tzLCBzbyBsZXQncyBkZWxlZ2F0ZSB0aGVtIHRvIGhhbmRsZQorCSAqIHZtYShWTV9QRk5NQVApLgorCSAqLworCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fUEZOTUFQKSB7CisJCWludCBlcnIgPSAxOworCQlpZiAod2Fsay0+cHRlX2hvbGUpCisJCQllcnIgPSB3YWxrLT5wdGVfaG9sZShzdGFydCwgZW5kLCB3YWxrKTsKKwkJcmV0dXJuIGVyciA/IGVyciA6IDE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fd2Fsa19wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJc3RydWN0IG1tX3dhbGsgKndhbGspCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLT52bWE7CisKKwlpZiAodm1hICYmIGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSB7CisJCWlmICh3YWxrLT5odWdldGxiX2VudHJ5KQorCQkJZXJyID0gd2Fsa19odWdldGxiX3JhbmdlKHN0YXJ0LCBlbmQsIHdhbGspOworCX0gZWxzZQorCQllcnIgPSB3YWxrX3BnZF9yYW5nZShzdGFydCwgZW5kLCB3YWxrKTsKKworCXJldHVybiBlcnI7Cit9CiAKIC8qKgotICogd2Fsa19wYWdlX3JhbmdlIC0gd2FsayBhIG1lbW9yeSBtYXAncyBwYWdlIHRhYmxlcyB3aXRoIGEgY2FsbGJhY2sKLSAqIEBhZGRyOiBzdGFydGluZyBhZGRyZXNzCi0gKiBAZW5kOiBlbmRpbmcgYWRkcmVzcwotICogQHdhbGs6IHNldCBvZiBjYWxsYmFja3MgdG8gaW52b2tlIGZvciBlYWNoIGxldmVsIG9mIHRoZSB0cmVlCisgKiB3YWxrX3BhZ2VfcmFuZ2UgLSB3YWxrIHBhZ2UgdGFibGUgd2l0aCBjYWxsZXIgc3BlY2lmaWMgY2FsbGJhY2tzCiAgKgotICogUmVjdXJzaXZlbHkgd2FsayB0aGUgcGFnZSB0YWJsZSBmb3IgdGhlIG1lbW9yeSBhcmVhIGluIGEgVk1BLAotICogY2FsbGluZyBzdXBwbGllZCBjYWxsYmFja3MuIENhbGxiYWNrcyBhcmUgY2FsbGVkIGluLW9yZGVyIChmaXJzdAotICogUEdELCBmaXJzdCBQVUQsIGZpcnN0IFBNRCwgZmlyc3QgUFRFLCBzZWNvbmQgUFRFLi4uIHNlY29uZCBQTUQsCi0gKiBldGMuKS4gSWYgbG93ZXItbGV2ZWwgY2FsbGJhY2tzIGFyZSBvbWl0dGVkLCB3YWxraW5nIGRlcHRoIGlzIHJlZHVjZWQuCisgKiBSZWN1cnNpdmVseSB3YWxrIHRoZSBwYWdlIHRhYmxlIHRyZWUgb2YgdGhlIHByb2Nlc3MgcmVwcmVzZW50ZWQgYnkgQHdhbGstPm1tCisgKiB3aXRoaW4gdGhlIHZpcnR1YWwgYWRkcmVzcyByYW5nZSBbQHN0YXJ0LCBAZW5kKS4gRHVyaW5nIHdhbGtpbmcsIHdlIGNhbiBkbworICogc29tZSBjYWxsZXItc3BlY2lmaWMgd29ya3MgZm9yIGVhY2ggZW50cnksIGJ5IHNldHRpbmcgdXAgcG1kX2VudHJ5KCksCisgKiBwdGVfZW50cnkoKSwgYW5kL29yIGh1Z2V0bGJfZW50cnkoKS4gSWYgeW91IGRvbid0IHNldCB1cCBmb3Igc29tZSBvZiB0aGVzZQorICogY2FsbGJhY2tzLCB0aGUgYXNzb2NpYXRlZCBlbnRyaWVzL3BhZ2VzIGFyZSBqdXN0IGlnbm9yZWQuCisgKiBUaGUgcmV0dXJuIHZhbHVlcyBvZiB0aGVzZSBjYWxsYmFja3MgYXJlIGNvbW1vbmx5IGRlZmluZWQgbGlrZSBiZWxvdzoKKyAqICAtIDAgIDogc3VjY2VlZGVkIHRvIGhhbmRsZSB0aGUgY3VycmVudCBlbnRyeSwgYW5kIGlmIHlvdSBkb24ndCByZWFjaCB0aGUKKyAqICAgICAgICAgZW5kIGFkZHJlc3MgeWV0LCBjb250aW51ZSB0byB3YWxrLgorICogIC0gPjAgOiBzdWNjZWVkZWQgdG8gaGFuZGxlIHRoZSBjdXJyZW50IGVudHJ5LCBhbmQgcmV0dXJuIHRvIHRoZSBjYWxsZXIKKyAqICAgICAgICAgd2l0aCBjYWxsZXIgc3BlY2lmaWMgdmFsdWUuCisgKiAgLSA8MCA6IGZhaWxlZCB0byBoYW5kbGUgdGhlIGN1cnJlbnQgZW50cnksIGFuZCByZXR1cm4gdG8gdGhlIGNhbGxlcgorICogICAgICAgICB3aXRoIGVycm9yIGNvZGUuCiAgKgotICogRWFjaCBjYWxsYmFjayByZWNlaXZlcyBhbiBlbnRyeSBwb2ludGVyIGFuZCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUKLSAqIGFzc29jaWF0ZWQgcmFuZ2UsIGFuZCBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIG1tX3dhbGsgZm9yIGFjY2VzcyB0bwotICogdGhlIC0+cHJpdmF0ZSBvciAtPm1tIGZpZWxkcy4KKyAqIEJlZm9yZSBzdGFydGluZyB0byB3YWxrIHBhZ2UgdGFibGUsIHNvbWUgY2FsbGVycyB3YW50IHRvIGNoZWNrIHdoZXRoZXIKKyAqIHRoZXkgcmVhbGx5IHdhbnQgdG8gd2FsayBvdmVyIHRoZSBjdXJyZW50IHZtYSwgdHlwaWNhbGx5IGJ5IGNoZWNraW5nCisgKiBpdHMgdm1fZmxhZ3MuIHdhbGtfcGFnZV90ZXN0KCkgYW5kIEB3YWxrLT50ZXN0X3dhbGsoKSBhcmUgdXNlZCBmb3IgdGhpcworICogcHVycG9zZS4KICAqCi0gKiBVc3VhbGx5IG5vIGxvY2tzIGFyZSB0YWtlbiwgYnV0IHNwbGl0dGluZyB0cmFuc3BhcmVudCBodWdlIHBhZ2UgbWF5Ci0gKiB0YWtlIHBhZ2UgdGFibGUgbG9jay4gQW5kIHRoZSBib3R0b20gbGV2ZWwgaXRlcmF0b3Igd2lsbCBtYXAgUFRFCi0gKiBkaXJlY3RvcmllcyBmcm9tIGhpZ2htZW0gaWYgbmVjZXNzYXJ5LgorICogc3RydWN0IG1tX3dhbGsga2VlcHMgY3VycmVudCB2YWx1ZXMgb2Ygc29tZSBjb21tb24gZGF0YSBsaWtlIHZtYSBhbmQgcG1kLAorICogd2hpY2ggYXJlIHVzZWZ1bCBmb3IgdGhlIGFjY2VzcyBmcm9tIGNhbGxiYWNrcy4gSWYgeW91IHdhbnQgdG8gcGFzcyBzb21lCisgKiBjYWxsZXItc3BlY2lmaWMgZGF0YSB0byBjYWxsYmFja3MsIEB3YWxrLT5wcml2YXRlIHNob3VsZCBiZSBoZWxwZnVsLgogICoKLSAqIElmIGFueSBjYWxsYmFjayByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUsIHRoZSB3YWxrIGlzIGFib3J0ZWQgYW5kCi0gKiB0aGUgcmV0dXJuIHZhbHVlIGlzIHByb3BhZ2F0ZWQgYmFjayB0byB0aGUgY2FsbGVyLiBPdGhlcndpc2UgMCBpcyByZXR1cm5lZC4KLSAqCi0gKiB3YWxrLT5tbS0+bW1hcF9zZW0gbXVzdCBiZSBoZWxkIGZvciBhdCBsZWFzdCByZWFkIGlmIHdhbGstPmh1Z2V0bGJfZW50cnkKLSAqIGlzICFOVUxMLgorICogTG9ja2luZzoKKyAqICAgQ2FsbGVycyBvZiB3YWxrX3BhZ2VfcmFuZ2UoKSBhbmQgd2Fsa19wYWdlX3ZtYSgpIHNob3VsZCBob2xkCisgKiAgIEB3YWxrLT5tbS0+bW1hcF9zZW0sIGJlY2F1c2UgdGhlc2UgZnVuY3Rpb24gdHJhdmVyc2Ugdm1hIGxpc3QgYW5kL29yCisgKiAgIGFjY2VzcyB0byB2bWEncyBkYXRhLgogICovCi1pbnQgd2Fsa19wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCitpbnQgd2Fsa19wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkgICAgc3RydWN0IG1tX3dhbGsgKndhbGspCiB7Ci0JcGdkX3QgKnBnZDsKLQl1bnNpZ25lZCBsb25nIG5leHQ7CiAJaW50IGVyciA9IDA7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCi0JaWYgKGFkZHIgPj0gZW5kKQotCQlyZXR1cm4gZXJyOworCWlmIChzdGFydCA+PSBlbmQpCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCF3YWxrLT5tbSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlWTV9CVUdfT05fTU0oIXJ3c2VtX2lzX2xvY2tlZCgmd2Fsay0+bW0tPm1tYXBfc2VtKSwgd2Fsay0+bW0pOwogCi0JcGdkID0gcGdkX29mZnNldCh3YWxrLT5tbSwgYWRkcik7CisJdm1hID0gZmluZF92bWEod2Fsay0+bW0sIHN0YXJ0KTsKIAlkbyB7Ci0JCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gTlVMTDsKKwkJaWYgKCF2bWEpIHsgLyogYWZ0ZXIgdGhlIGxhc3Qgdm1hICovCisJCQl3YWxrLT52bWEgPSBOVUxMOworCQkJbmV4dCA9IGVuZDsKKwkJfSBlbHNlIGlmIChzdGFydCA8IHZtYS0+dm1fc3RhcnQpIHsgLyogb3V0c2lkZSB2bWEgKi8KKwkJCXdhbGstPnZtYSA9IE5VTEw7CisJCQluZXh0ID0gbWluKGVuZCwgdm1hLT52bV9zdGFydCk7CisJCX0gZWxzZSB7IC8qIGluc2lkZSB2bWEgKi8KKwkJCXdhbGstPnZtYSA9IHZtYTsKKwkJCW5leHQgPSBtaW4oZW5kLCB2bWEtPnZtX2VuZCk7CisJCQl2bWEgPSB2bWEtPnZtX25leHQ7CiAKLQkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwotCi0JCS8qCi0JCSAqIFRoaXMgZnVuY3Rpb24gd2FzIG5vdCBpbnRlbmRlZCB0byBiZSB2bWEgYmFzZWQuCi0JCSAqIEJ1dCB0aGVyZSBhcmUgdm1hIHNwZWNpYWwgY2FzZXMgdG8gYmUgaGFuZGxlZDoKLQkJICogLSBodWdldGxiIHZtYSdzCi0JCSAqIC0gVk1fUEZOTUFQIHZtYSdzCi0JCSAqLwotCQl2bWEgPSBmaW5kX3ZtYSh3YWxrLT5tbSwgYWRkcik7Ci0JCWlmICh2bWEpIHsKLQkJCS8qCi0JCQkgKiBUaGVyZSBhcmUgbm8gcGFnZSBzdHJ1Y3R1cmVzIGJhY2tpbmcgYSBWTV9QRk5NQVAKLQkJCSAqIHJhbmdlLCBzbyBkbyBub3QgYWxsb3cgc3BsaXRfaHVnZV9wYWdlX3BtZCgpLgotCQkJICovCi0JCQlpZiAoKHZtYS0+dm1fc3RhcnQgPD0gYWRkcikgJiYKLQkJCSAgICAodm1hLT52bV9mbGFncyAmIFZNX1BGTk1BUCkpIHsKLQkJCQluZXh0ID0gdm1hLT52bV9lbmQ7Ci0JCQkJcGdkID0gcGdkX29mZnNldCh3YWxrLT5tbSwgbmV4dCk7CisJCQllcnIgPSB3YWxrX3BhZ2VfdGVzdChzdGFydCwgbmV4dCwgd2Fsayk7CisJCQlpZiAoZXJyID4gMCkKIAkJCQljb250aW51ZTsKLQkJCX0KLQkJCS8qCi0JCQkgKiBIYW5kbGUgaHVnZXRsYiB2bWEgaW5kaXZpZHVhbGx5IGJlY2F1c2UgcGFnZXRhYmxlCi0JCQkgKiB3YWxrIGZvciB0aGUgaHVnZXRsYiBwYWdlIGlzIGRlcGVuZGVudCBvbiB0aGUKLQkJCSAqIGFyY2hpdGVjdHVyZSBhbmQgd2UgY2FuJ3QgaGFuZGxlZCBpdCBpbiB0aGUgc2FtZQotCQkJICogbWFubmVyIGFzIG5vbi1odWdlIHBhZ2VzLgotCQkJICovCi0JCQlpZiAod2Fsay0+aHVnZXRsYl9lbnRyeSAmJiAodm1hLT52bV9zdGFydCA8PSBhZGRyKSAmJgotCQkJICAgIGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSB7Ci0JCQkJaWYgKHZtYS0+dm1fZW5kIDwgbmV4dCkKLQkJCQkJbmV4dCA9IHZtYS0+dm1fZW5kOwotCQkJCS8qCi0JCQkJICogSHVnZXBhZ2UgaXMgdmVyeSB0aWdodGx5IGNvdXBsZWQgd2l0aCB2bWEsCi0JCQkJICogc28gd2FsayB0aHJvdWdoIGh1Z2V0bGIgZW50cmllcyB3aXRoaW4gYQotCQkJCSAqIGdpdmVuIHZtYS4KLQkJCQkgKi8KLQkJCQllcnIgPSB3YWxrX2h1Z2V0bGJfcmFuZ2Uodm1hLCBhZGRyLCBuZXh0LCB3YWxrKTsKLQkJCQlpZiAoZXJyKQotCQkJCQlicmVhazsKLQkJCQlwZ2QgPSBwZ2Rfb2Zmc2V0KHdhbGstPm1tLCBuZXh0KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCi0JCWlmIChwZ2Rfbm9uZV9vcl9jbGVhcl9iYWQocGdkKSkgewotCQkJaWYgKHdhbGstPnB0ZV9ob2xlKQotCQkJCWVyciA9IHdhbGstPnB0ZV9ob2xlKGFkZHIsIG5leHQsIHdhbGspOwotCQkJaWYgKGVycikKKwkJCWlmIChlcnIgPCAwKQogCQkJCWJyZWFrOwotCQkJcGdkKys7Ci0JCQljb250aW51ZTsKIAkJfQotCQlpZiAod2Fsay0+cGdkX2VudHJ5KQotCQkJZXJyID0gd2Fsay0+cGdkX2VudHJ5KHBnZCwgYWRkciwgbmV4dCwgd2Fsayk7Ci0JCWlmICghZXJyICYmCi0JCSAgICAod2Fsay0+cHVkX2VudHJ5IHx8IHdhbGstPnBtZF9lbnRyeSB8fCB3YWxrLT5wdGVfZW50cnkpKQotCQkJZXJyID0gd2Fsa19wdWRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCB3YWxrKTsKKwkJaWYgKHdhbGstPnZtYSB8fCB3YWxrLT5wdGVfaG9sZSkKKwkJCWVyciA9IF9fd2Fsa19wYWdlX3JhbmdlKHN0YXJ0LCBuZXh0LCB3YWxrKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOwotCQlwZ2QrKzsKLQl9IHdoaWxlIChhZGRyID0gbmV4dCwgYWRkciA8IGVuZCk7Ci0KKwl9IHdoaWxlIChzdGFydCA9IG5leHQsIHN0YXJ0IDwgZW5kKTsKIAlyZXR1cm4gZXJyOwogfQorCitpbnQgd2Fsa19wYWdlX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IG1tX3dhbGsgKndhbGspCit7CisJaW50IGVycjsKKworCWlmICghd2Fsay0+bW0pCisJCXJldHVybiAtRUlOVkFMOworCisJVk1fQlVHX09OKCFyd3NlbV9pc19sb2NrZWQoJndhbGstPm1tLT5tbWFwX3NlbSkpOworCVZNX0JVR19PTighdm1hKTsKKwl3YWxrLT52bWEgPSB2bWE7CisJZXJyID0gd2Fsa19wYWdlX3Rlc3Qodm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsIHdhbGspOworCWlmIChlcnIgPiAwKQorCQlyZXR1cm4gMDsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gX193YWxrX3BhZ2VfcmFuZ2Uodm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsIHdhbGspOworfQpkaWZmIC0tZ2l0IGEvbW0vcHJvY2Vzc192bV9hY2Nlc3MuYyBiL21tL3Byb2Nlc3Nfdm1fYWNjZXNzLmMKaW5kZXggNTA3N2FmYy4uYjE1OTc2OSAxMDA2NDQKLS0tIGEvbW0vcHJvY2Vzc192bV9hY2Nlc3MuYworKysgYi9tbS9wcm9jZXNzX3ZtX2FjY2Vzcy5jCkBAIC05OSwxMSArOTksOCBAQAogCQlzaXplX3QgYnl0ZXM7CiAKIAkJLyogR2V0IHRoZSBwYWdlcyB3ZSdyZSBpbnRlcmVzdGVkIGluICovCi0JCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkJcGFnZXMgPSBnZXRfdXNlcl9wYWdlcyh0YXNrLCBtbSwgcGEsIHBhZ2VzLAotCQkJCSAgICAgIHZtX3dyaXRlLCAwLCBwcm9jZXNzX3BhZ2VzLCBOVUxMKTsKLQkJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQorCQlwYWdlcyA9IGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKHRhc2ssIG1tLCBwYSwgcGFnZXMsCisJCQkJCQl2bV93cml0ZSwgMCwgcHJvY2Vzc19wYWdlcyk7CiAJCWlmIChwYWdlcyA8PSAwKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCA3MWNkNWJkLi41ZTNlMDkwIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKKysrIGIvbW0vcm1hcC5jCkBAIC01OTAsOSArNTkwLDggQEAKIAkJaWYgKCF2bWEtPmFub25fdm1hIHx8ICFwYWdlX19hbm9uX3ZtYSB8fAogCQkgICAgdm1hLT5hbm9uX3ZtYS0+cm9vdCAhPSBwYWdlX19hbm9uX3ZtYS0+cm9vdCkKIAkJCXJldHVybiAtRUZBVUxUOwotCX0gZWxzZSBpZiAocGFnZS0+bWFwcGluZyAmJiAhKHZtYS0+dm1fZmxhZ3MgJiBWTV9OT05MSU5FQVIpKSB7Ci0JCWlmICghdm1hLT52bV9maWxlIHx8Ci0JCSAgICB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZyAhPSBwYWdlLT5tYXBwaW5nKQorCX0gZWxzZSBpZiAocGFnZS0+bWFwcGluZykgeworCQlpZiAoIXZtYS0+dm1fZmlsZSB8fCB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZyAhPSBwYWdlLT5tYXBwaW5nKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfSBlbHNlCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTA4NiwyNCArMTA4NSwyMCBAQAogdm9pZCBwYWdlX2FkZF9maWxlX3JtYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JYm9vbCBsb2NrZWQ7CiAKLQltZW1jZyA9IG1lbV9jZ3JvdXBfYmVnaW5fcGFnZV9zdGF0KHBhZ2UsICZsb2NrZWQsICZmbGFncyk7CisJbWVtY2cgPSBtZW1fY2dyb3VwX2JlZ2luX3BhZ2Vfc3RhdChwYWdlKTsKIAlpZiAoYXRvbWljX2luY19hbmRfdGVzdCgmcGFnZS0+X21hcGNvdW50KSkgewogCQlfX2luY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRklMRV9NQVBQRUQpOwogCQltZW1fY2dyb3VwX2luY19wYWdlX3N0YXQobWVtY2csIE1FTV9DR1JPVVBfU1RBVF9GSUxFX01BUFBFRCk7CiAJfQotCW1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChtZW1jZywgJmxvY2tlZCwgJmZsYWdzKTsKKwltZW1fY2dyb3VwX2VuZF9wYWdlX3N0YXQobWVtY2cpOwogfQogCiBzdGF0aWMgdm9pZCBwYWdlX3JlbW92ZV9maWxlX3JtYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JYm9vbCBsb2NrZWQ7CiAKLQltZW1jZyA9IG1lbV9jZ3JvdXBfYmVnaW5fcGFnZV9zdGF0KHBhZ2UsICZsb2NrZWQsICZmbGFncyk7CisJbWVtY2cgPSBtZW1fY2dyb3VwX2JlZ2luX3BhZ2Vfc3RhdChwYWdlKTsKIAogCS8qIHBhZ2Ugc3RpbGwgbWFwcGVkIGJ5IHNvbWVvbmUgZWxzZT8gKi8KIAlpZiAoIWF0b21pY19hZGRfbmVnYXRpdmUoLTEsICZwYWdlLT5fbWFwY291bnQpKQpAQCAtMTEyNCw3ICsxMTE5LDcgQEAKIAlpZiAodW5saWtlbHkoUGFnZU1sb2NrZWQocGFnZSkpKQogCQljbGVhcl9wYWdlX21sb2NrKHBhZ2UpOwogb3V0OgotCW1lbV9jZ3JvdXBfZW5kX3BhZ2Vfc3RhdChtZW1jZywgJmxvY2tlZCwgJmZsYWdzKTsKKwltZW1fY2dyb3VwX2VuZF9wYWdlX3N0YXQobWVtY2cpOwogfQogCiAvKioKQEAgLTEyNzQsNyArMTI2OSw2IEBACiAJCWlmIChwdGVfc29mdF9kaXJ0eShwdGV2YWwpKQogCQkJc3dwX3B0ZSA9IHB0ZV9zd3BfbWtzb2Z0X2RpcnR5KHN3cF9wdGUpOwogCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdGUsIHN3cF9wdGUpOwotCQlCVUdfT04ocHRlX2ZpbGUoKnB0ZSkpOwogCX0gZWxzZSBpZiAoSVNfRU5BQkxFRChDT05GSUdfTUlHUkFUSU9OKSAmJgogCQkgICAoZmxhZ3MgJiBUVFVfTUlHUkFUSU9OKSkgewogCQkvKiBFc3RhYmxpc2ggbWlncmF0aW9uIGVudHJ5IGZvciBhIGZpbGUgcGFnZSAqLwpAQCAtMTMxNiwyMTEgKzEzMTAsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBvYmpybWFwIGRvZXNuJ3Qgd29yayBmb3Igbm9ubGluZWFyIFZNQXMgYmVjYXVzZSB0aGUgYXNzdW1wdGlvbiB0aGF0Ci0gKiBvZmZzZXQtaW50by1maWxlIGNvcnJlbGF0ZXMgd2l0aCBvZmZzZXQtaW50by12aXJ0dWFsLWFkZHJlc3NlcyBkb2VzIG5vdCBob2xkLgotICogQ29uc2VxdWVudGx5LCBnaXZlbiBhIHBhcnRpY3VsYXIgcGFnZSBhbmQgaXRzIC0+aW5kZXgsIHdlIGNhbm5vdCBsb2NhdGUgdGhlCi0gKiBwdGVzIHdoaWNoIGFyZSBtYXBwaW5nIHRoYXQgcGFnZSB3aXRob3V0IGFuIGV4aGF1c3RpdmUgbGluZWFyIHNlYXJjaC4KLSAqCi0gKiBTbyB3aGF0IHRoaXMgY29kZSBkb2VzIGlzIGEgbWluaSAidmlydHVhbCBzY2FuIiBvZiBlYWNoIG5vbmxpbmVhciBWTUEgd2hpY2gKLSAqIG1hcHMgdGhlIGZpbGUgdG8gd2hpY2ggdGhlIHRhcmdldCBwYWdlIGJlbG9uZ3MuICBUaGUgLT52bV9wcml2YXRlX2RhdGEgZmllbGQKLSAqIGhvbGRzIHRoZSBjdXJyZW50IGN1cnNvciBpbnRvIHRoYXQgc2Nhbi4gIFN1Y2Nlc3NpdmUgc2VhcmNoZXMgd2lsbCBjaXJjdWxhdGUKLSAqIGFyb3VuZCB0aGUgdm1hJ3MgdmlydHVhbCBhZGRyZXNzIHNwYWNlLgotICoKLSAqIFNvIGFzIG1vcmUgcmVwbGFjZW1lbnQgcHJlc3N1cmUgaXMgYXBwbGllZCB0byB0aGUgcGFnZXMgaW4gYSBub25saW5lYXIgVk1BLAotICogbW9yZSBzY2FubmluZyBwcmVzc3VyZSBpcyBwbGFjZWQgYWdhaW5zdCB0aGVtIGFzIHdlbGwuICAgRXZlbnR1YWxseSBwYWdlcwotICogd2lsbCBiZWNvbWUgZnVsbHkgdW5tYXBwZWQgYW5kIGFyZSBlbGlnaWJsZSBmb3IgZXZpY3Rpb24uCi0gKgotICogRm9yIHZlcnkgc3BhcnNlbHkgcG9wdWxhdGVkIFZNQXMgdGhpcyBpcyBhIGxpdHRsZSBpbmVmZmljaWVudCAtIGNoYW5jZXMgYXJlCi0gKiB0aGVyZSB0aGVyZSB3b24ndCBiZSBtYW55IHB0ZXMgbG9jYXRlZCB3aXRoaW4gdGhlIHNjYW4gY2x1c3Rlci4gIEluIHRoaXMgY2FzZQotICogbWF5YmUgd2UgY291bGQgc2NhbiBmdXJ0aGVyIC0gdG8gdGhlIGVuZCBvZiB0aGUgcHRlIHBhZ2UsIHBlcmhhcHMuCi0gKgotICogTWxvY2tlZCBwYWdlczogIGNoZWNrIFZNX0xPQ0tFRCB1bmRlciBtbWFwX3NlbSBoZWxkIGZvciByZWFkLCBpZiB3ZSBjYW4KLSAqIGFjcXVpcmUgaXQgd2l0aG91dCBibG9ja2luZy4gIElmIHZtYSBsb2NrZWQsIG1sb2NrIHRoZSBwYWdlcyBpbiB0aGUgY2x1c3RlciwKLSAqIHJhdGhlciB0aGFuIHVubWFwcGluZyB0aGVtLiAgSWYgd2UgZW5jb3VudGVyIHRoZSAiY2hlY2tfcGFnZSIgdGhhdCB2bXNjYW4gaXMKLSAqIHRyeWluZyB0byB1bm1hcCwgcmV0dXJuIFNXQVBfTUxPQ0ssIGVsc2UgZGVmYXVsdCBTV0FQX0FHQUlOLgotICovCi0jZGVmaW5lIENMVVNURVJfU0laRQltaW4oMzIqUEFHRV9TSVpFLCBQTURfU0laRSkKLSNkZWZpbmUgQ0xVU1RFUl9NQVNLCSh+KENMVVNURVJfU0laRSAtIDEpKQotCi1zdGF0aWMgaW50IHRyeV90b191bm1hcF9jbHVzdGVyKHVuc2lnbmVkIGxvbmcgY3Vyc29yLCB1bnNpZ25lZCBpbnQgKm1hcGNvdW50LAotCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKmNoZWNrX3BhZ2UpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwotCXBtZF90ICpwbWQ7Ci0JcHRlX3QgKnB0ZTsKLQlwdGVfdCBwdGV2YWw7Ci0Jc3BpbmxvY2tfdCAqcHRsOwotCXN0cnVjdCBwYWdlICpwYWdlOwotCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKLQl1bnNpZ25lZCBsb25nIG1tdW5fc3RhcnQ7CS8qIEZvciBtbXVfbm90aWZpZXJzICovCi0JdW5zaWduZWQgbG9uZyBtbXVuX2VuZDsJCS8qIEZvciBtbXVfbm90aWZpZXJzICovCi0JdW5zaWduZWQgbG9uZyBlbmQ7Ci0JaW50IHJldCA9IFNXQVBfQUdBSU47Ci0JaW50IGxvY2tlZF92bWEgPSAwOwotCi0JYWRkcmVzcyA9ICh2bWEtPnZtX3N0YXJ0ICsgY3Vyc29yKSAmIENMVVNURVJfTUFTSzsKLQllbmQgPSBhZGRyZXNzICsgQ0xVU1RFUl9TSVpFOwotCWlmIChhZGRyZXNzIDwgdm1hLT52bV9zdGFydCkKLQkJYWRkcmVzcyA9IHZtYS0+dm1fc3RhcnQ7Ci0JaWYgKGVuZCA+IHZtYS0+dm1fZW5kKQotCQllbmQgPSB2bWEtPnZtX2VuZDsKLQotCXBtZCA9IG1tX2ZpbmRfcG1kKG1tLCBhZGRyZXNzKTsKLQlpZiAoIXBtZCkKLQkJcmV0dXJuIHJldDsKLQotCW1tdW5fc3RhcnQgPSBhZGRyZXNzOwotCW1tdW5fZW5kICAgPSBlbmQ7Ci0JbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnQobW0sIG1tdW5fc3RhcnQsIG1tdW5fZW5kKTsKLQotCS8qCi0JICogSWYgd2UgY2FuIGFjcXVpcmUgdGhlIG1tYXBfc2VtIGZvciByZWFkLCBhbmQgdm1hIGlzIFZNX0xPQ0tFRCwKLQkgKiBrZWVwIHRoZSBzZW0gd2hpbGUgc2Nhbm5pbmcgdGhlIGNsdXN0ZXIgZm9yIG1sb2NraW5nIHBhZ2VzLgotCSAqLwotCWlmIChkb3duX3JlYWRfdHJ5bG9jaygmdm1hLT52bV9tbS0+bW1hcF9zZW0pKSB7Ci0JCWxvY2tlZF92bWEgPSAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCk7Ci0JCWlmICghbG9ja2VkX3ZtYSkKLQkJCXVwX3JlYWQoJnZtYS0+dm1fbW0tPm1tYXBfc2VtKTsgLyogZG9uJ3QgbmVlZCBpdCAqLwotCX0KLQotCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZCwgYWRkcmVzcywgJnB0bCk7Ci0KLQkvKiBVcGRhdGUgaGlnaCB3YXRlcm1hcmsgYmVmb3JlIHdlIGxvd2VyIHJzcyAqLwotCXVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7Ci0KLQlmb3IgKDsgYWRkcmVzcyA8IGVuZDsgcHRlKyssIGFkZHJlc3MgKz0gUEFHRV9TSVpFKSB7Ci0JCWlmICghcHRlX3ByZXNlbnQoKnB0ZSkpCi0JCQljb250aW51ZTsKLQkJcGFnZSA9IHZtX25vcm1hbF9wYWdlKHZtYSwgYWRkcmVzcywgKnB0ZSk7Ci0JCUJVR19PTighcGFnZSB8fCBQYWdlQW5vbihwYWdlKSk7Ci0KLQkJaWYgKGxvY2tlZF92bWEpIHsKLQkJCWlmIChwYWdlID09IGNoZWNrX3BhZ2UpIHsKLQkJCQkvKiB3ZSBrbm93IHdlIGhhdmUgY2hlY2tfcGFnZSBsb2NrZWQgKi8KLQkJCQltbG9ja192bWFfcGFnZShwYWdlKTsKLQkJCQlyZXQgPSBTV0FQX01MT0NLOwotCQkJfSBlbHNlIGlmICh0cnlsb2NrX3BhZ2UocGFnZSkpIHsKLQkJCQkvKgotCQkJCSAqIElmIHdlIGNhbiBsb2NrIHRoZSBwYWdlLCBwZXJmb3JtIG1sb2NrLgotCQkJCSAqIE90aGVyd2lzZSBsZWF2ZSB0aGUgcGFnZSBhbG9uZSwgaXQgd2lsbCBiZQotCQkJCSAqIGV2ZW50dWFsbHkgZW5jb3VudGVyZWQgYWdhaW4gbGF0ZXIuCi0JCQkJICovCi0JCQkJbWxvY2tfdm1hX3BhZ2UocGFnZSk7Ci0JCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQl9Ci0JCQljb250aW51ZTsJLyogZG9uJ3QgdW5tYXAgKi8KLQkJfQotCi0JCS8qCi0JCSAqIE5vIG5lZWQgZm9yIF9ub3RpZnkgYmVjYXVzZSB3ZSdyZSB3aXRoaW4gYW4KLQkJICogbW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfIHtzdGFydHxlbmR9IHNjb3BlLgotCQkgKi8KLQkJaWYgKHB0ZXBfY2xlYXJfZmx1c2hfeW91bmcodm1hLCBhZGRyZXNzLCBwdGUpKQotCQkJY29udGludWU7Ci0KLQkJLyogTnVrZSB0aGUgcGFnZSB0YWJsZSBlbnRyeS4gKi8KLQkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHJlc3MsIHB0ZV9wZm4oKnB0ZSkpOwotCQlwdGV2YWwgPSBwdGVwX2NsZWFyX2ZsdXNoX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSk7Ci0KLQkJLyogSWYgbm9ubGluZWFyLCBzdG9yZSB0aGUgZmlsZSBwYWdlIG9mZnNldCBpbiB0aGUgcHRlLiAqLwotCQlpZiAocGFnZS0+aW5kZXggIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSkgewotCQkJcHRlX3QgcHRmaWxlID0gcGdvZmZfdG9fcHRlKHBhZ2UtPmluZGV4KTsKLQkJCWlmIChwdGVfc29mdF9kaXJ0eShwdGV2YWwpKQotCQkJCXB0ZmlsZSA9IHB0ZV9maWxlX21rc29mdF9kaXJ0eShwdGZpbGUpOwotCQkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlLCBwdGZpbGUpOwotCQl9Ci0KLQkJLyogTW92ZSB0aGUgZGlydHkgYml0IHRvIHRoZSBwaHlzaWNhbCBwYWdlIG5vdyB0aGUgcHRlIGlzIGdvbmUuICovCi0JCWlmIChwdGVfZGlydHkocHRldmFsKSkKLQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCi0JCXBhZ2VfcmVtb3ZlX3JtYXAocGFnZSk7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJZGVjX21tX2NvdW50ZXIobW0sIE1NX0ZJTEVQQUdFUyk7Ci0JCSgqbWFwY291bnQpLS07Ci0JfQotCXB0ZV91bm1hcF91bmxvY2socHRlIC0gMSwgcHRsKTsKLQltbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQobW0sIG1tdW5fc3RhcnQsIG1tdW5fZW5kKTsKLQlpZiAobG9ja2VkX3ZtYSkKLQkJdXBfcmVhZCgmdm1hLT52bV9tbS0+bW1hcF9zZW0pOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgdHJ5X3RvX3VubWFwX25vbmxpbmVhcihzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlpbnQgcmV0ID0gU1dBUF9BR0FJTjsKLQl1bnNpZ25lZCBsb25nIGN1cnNvcjsKLQl1bnNpZ25lZCBsb25nIG1heF9ubF9jdXJzb3IgPSAwOwotCXVuc2lnbmVkIGxvbmcgbWF4X25sX3NpemUgPSAwOwotCXVuc2lnbmVkIGludCBtYXBjb3VudDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLAotCQkmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhciwgc2hhcmVkLm5vbmxpbmVhcikgewotCi0JCWN1cnNvciA9ICh1bnNpZ25lZCBsb25nKSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKLQkJaWYgKGN1cnNvciA+IG1heF9ubF9jdXJzb3IpCi0JCQltYXhfbmxfY3Vyc29yID0gY3Vyc29yOwotCQljdXJzb3IgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0JCWlmIChjdXJzb3IgPiBtYXhfbmxfc2l6ZSkKLQkJCW1heF9ubF9zaXplID0gY3Vyc29yOwotCX0KLQotCWlmIChtYXhfbmxfc2l6ZSA9PSAwKSB7CS8qIGFsbCBub25saW5lYXJzIGxvY2tlZCBvciByZXNlcnZlZCA/ICovCi0JCXJldHVybiBTV0FQX0ZBSUw7Ci0JfQotCi0JLyoKLQkgKiBXZSBkb24ndCB0cnkgdG8gc2VhcmNoIGZvciB0aGlzIHBhZ2UgaW4gdGhlIG5vbmxpbmVhciB2bWFzLAotCSAqIGFuZCBwYWdlX3JlZmVyZW5jZWQgd291bGRuJ3QgaGF2ZSBmb3VuZCBpdCBhbnl3YXkuICBJbnN0ZWFkCi0JICoganVzdCB3YWxrIHRoZSBub25saW5lYXIgdm1hcyB0cnlpbmcgdG8gYWdlIGFuZCB1bm1hcCBzb21lLgotCSAqIFRoZSBtYXBjb3VudCBvZiB0aGUgcGFnZSB3ZSBjYW1lIGluIHdpdGggaXMgaXJyZWxldmFudCwKLQkgKiBidXQgZXZlbiBzbyB1c2UgaXQgYXMgYSBndWlkZSB0byBob3cgaGFyZCB3ZSBzaG91bGQgdHJ5PwotCSAqLwotCW1hcGNvdW50ID0gcGFnZV9tYXBjb3VudChwYWdlKTsKLQlpZiAoIW1hcGNvdW50KQotCQlyZXR1cm4gcmV0OwotCi0JY29uZF9yZXNjaGVkKCk7Ci0KLQltYXhfbmxfc2l6ZSA9IChtYXhfbmxfc2l6ZSArIENMVVNURVJfU0laRSAtIDEpICYgQ0xVU1RFUl9NQVNLOwotCWlmIChtYXhfbmxfY3Vyc29yID09IDApCi0JCW1heF9ubF9jdXJzb3IgPSBDTFVTVEVSX1NJWkU7Ci0KLQlkbyB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLAotCQkJJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIsIHNoYXJlZC5ub25saW5lYXIpIHsKLQotCQkJY3Vyc29yID0gKHVuc2lnbmVkIGxvbmcpIHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwotCQkJd2hpbGUgKGN1cnNvciA8IG1heF9ubF9jdXJzb3IgJiYKLQkJCQljdXJzb3IgPCB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpIHsKLQkJCQlpZiAodHJ5X3RvX3VubWFwX2NsdXN0ZXIoY3Vyc29yLCAmbWFwY291bnQsCi0JCQkJCQl2bWEsIHBhZ2UpID09IFNXQVBfTUxPQ0spCi0JCQkJCXJldCA9IFNXQVBfTUxPQ0s7Ci0JCQkJY3Vyc29yICs9IENMVVNURVJfU0laRTsKLQkJCQl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9ICh2b2lkICopIGN1cnNvcjsKLQkJCQlpZiAoKGludCltYXBjb3VudCA8PSAwKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCQkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSAodm9pZCAqKSBtYXhfbmxfY3Vyc29yOwotCQl9Ci0JCWNvbmRfcmVzY2hlZCgpOwotCQltYXhfbmxfY3Vyc29yICs9IENMVVNURVJfU0laRTsKLQl9IHdoaWxlIChtYXhfbmxfY3Vyc29yIDw9IG1heF9ubF9zaXplKTsKLQotCS8qCi0JICogRG9uJ3QgbG9vcCBmb3JldmVyIChwZXJoYXBzIGFsbCB0aGUgcmVtYWluaW5nIHBhZ2VzIGFyZQotCSAqIGluIGxvY2tlZCB2bWFzKS4gIFJlc2V0IGN1cnNvciBvbiBhbGwgdW5yZXNlcnZlZCBub25saW5lYXIKLQkgKiB2bWFzLCBub3cgZm9yZ2V0dGluZyBvbiB3aGljaCBvbmVzIGl0IGhhZCBmYWxsZW4gYmVoaW5kLgotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhciwgc2hhcmVkLm5vbmxpbmVhcikKLQkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBOVUxMOwotCi0JcmV0dXJuIHJldDsKLX0KLQogYm9vbCBpc192bWFfdGVtcG9yYXJ5X3N0YWNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCWludCBtYXliZV9zdGFjayA9IHZtYS0+dm1fZmxhZ3MgJiAoVk1fR1JPV1NET1dOIHwgVk1fR1JPV1NVUCk7CkBAIC0xNTY2LDcgKzEzNTUsNiBAQAogCQkucm1hcF9vbmUgPSB0cnlfdG9fdW5tYXBfb25lLAogCQkuYXJnID0gKHZvaWQgKilmbGFncywKIAkJLmRvbmUgPSBwYWdlX25vdF9tYXBwZWQsCi0JCS5maWxlX25vbmxpbmVhciA9IHRyeV90b191bm1hcF9ub25saW5lYXIsCiAJCS5hbm9uX2xvY2sgPSBwYWdlX2xvY2tfYW5vbl92bWFfcmVhZCwKIAl9OwogCkBAIC0xNjEyLDEyICsxNDAwLDYgQEAKIAkJLnJtYXBfb25lID0gdHJ5X3RvX3VubWFwX29uZSwKIAkJLmFyZyA9ICh2b2lkICopVFRVX01VTkxPQ0ssCiAJCS5kb25lID0gcGFnZV9ub3RfbWFwcGVkLAotCQkvKgotCQkgKiBXZSBkb24ndCBib3RoZXIgdG8gdHJ5IHRvIGZpbmQgdGhlIG11bmxvY2tlZCBwYWdlIGluCi0JCSAqIG5vbmxpbmVhcnMuIEl0J3MgY29zdGx5LiBJbnN0ZWFkLCBsYXRlciwgcGFnZSByZWNsYWltIGxvZ2ljCi0JCSAqIG1heSBjYWxsIHRyeV90b191bm1hcCgpIGFuZCByZWNvdmVyIFBHX21sb2NrZWQgbGF6aWx5LgotCQkgKi8KLQkJLmZpbGVfbm9ubGluZWFyID0gTlVMTCwKIAkJLmFub25fbG9jayA9IHBhZ2VfbG9ja19hbm9uX3ZtYV9yZWFkLAogCiAJfTsKQEAgLTE3NDgsMTMgKzE1MzAsNiBAQAogCQkJZ290byBkb25lOwogCX0KIAotCWlmICghcndjLT5maWxlX25vbmxpbmVhcikKLQkJZ290byBkb25lOwotCi0JaWYgKGxpc3RfZW1wdHkoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIpKQotCQlnb3RvIGRvbmU7Ci0KLQlyZXQgPSByd2MtPmZpbGVfbm9ubGluZWFyKHBhZ2UsIG1hcHBpbmcsIHJ3Yy0+YXJnKTsKIGRvbmU6CiAJaV9tbWFwX3VubG9ja19yZWFkKG1hcHBpbmcpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA3M2JhMWRmLi44NjRjODc4IDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCisrKyBiL21tL3NobWVtLmMKQEAgLTEwMTMsNyArMTAxMyw3IEBACiAJCSAqLwogCQlvbGRwYWdlID0gbmV3cGFnZTsKIAl9IGVsc2UgewotCQltZW1fY2dyb3VwX21pZ3JhdGUob2xkcGFnZSwgbmV3cGFnZSwgZmFsc2UpOworCQltZW1fY2dyb3VwX21pZ3JhdGUob2xkcGFnZSwgbmV3cGFnZSwgdHJ1ZSk7CiAJCWxydV9jYWNoZV9hZGRfYW5vbihuZXdwYWdlKTsKIAkJKnBhZ2VwID0gbmV3cGFnZTsKIAl9CkBAIC0xMTMxLDcgKzExMzEsNyBAQAogCQkJICogdHJ1bmNhdGVkIG9yIGhvbGVwdW5jaGVkIHNpbmNlIHN3YXAgd2FzIGNvbmZpcm1lZC4KIAkJCSAqIHNobWVtX3VuZG9fcmFuZ2UoKSB3aWxsIGhhdmUgZG9uZSBzb21lIG9mIHRoZQogCQkJICogdW5hY2NvdW50aW5nLCBub3cgZGVsZXRlX2Zyb21fc3dhcF9jYWNoZSgpIHdpbGwgZG8KLQkJCSAqIHRoZSByZXN0IChpbmNsdWRpbmcgbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwY2FjaGUpLgorCQkJICogdGhlIHJlc3QuCiAJCQkgKiBSZXNldCBzd2FwLnZhbD8gTm8sIGxlYXZlIGl0IHNvICJmYWlsZWQiIGdvZXMgYmFjayB0bwogCQkJICogInJlcGVhdCI6IHJlYWRpbmcgYSBob2xlIGFuZCB3cml0aW5nIHNob3VsZCBzdWNjZWVkLgogCQkJICovCkBAIC0zMjAxLDcgKzMyMDEsNiBAQAogCS5zZXRfcG9saWN5ICAgICA9IHNobWVtX3NldF9wb2xpY3ksCiAJLmdldF9wb2xpY3kgICAgID0gc2htZW1fZ2V0X3BvbGljeSwKICNlbmRpZgotCS5yZW1hcF9wYWdlcwk9IGdlbmVyaWNfZmlsZV9yZW1hcF9wYWdlcywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzaG1lbV9tb3VudChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKZGlmZiAtLWdpdCBhL21tL3NsYWIuaCBiL21tL3NsYWIuaAppbmRleCAxY2Y0MDA1NC4uOTA0MzBkNiAxMDA2NDQKLS0tIGEvbW0vc2xhYi5oCisrKyBiL21tL3NsYWIuaApAQCAtMjM1LDcgKzIzNSw3IEBACiAJCXJldHVybiAwOwogCWlmIChpc19yb290X2NhY2hlKHMpKQogCQlyZXR1cm4gMDsKLQlyZXR1cm4gX19tZW1jZ19jaGFyZ2Vfc2xhYihzLCBnZnAsIG9yZGVyKTsKKwlyZXR1cm4gbWVtY2dfY2hhcmdlX2ttZW0ocy0+bWVtY2dfcGFyYW1zLT5tZW1jZywgZ2ZwLCAxIDw8IG9yZGVyKTsKIH0KIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIG1lbWNnX3VuY2hhcmdlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGludCBvcmRlcikKQEAgLTI0NCw3ICsyNDQsNyBAQAogCQlyZXR1cm47CiAJaWYgKGlzX3Jvb3RfY2FjaGUocykpCiAJCXJldHVybjsKLQlfX21lbWNnX3VuY2hhcmdlX3NsYWIocywgb3JkZXIpOworCW1lbWNnX3VuY2hhcmdlX2ttZW0ocy0+bWVtY2dfcGFyYW1zLT5tZW1jZywgMSA8PCBvcmRlcik7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSBib29sIGlzX3Jvb3RfY2FjaGUoc3RydWN0IGttZW1fY2FjaGUgKnMpCmRpZmYgLS1naXQgYS9tbS9zbGFiX2NvbW1vbi5jIGIvbW0vc2xhYl9jb21tb24uYwppbmRleCBlMDNkZDZmLi42ZTFlNGNmIDEwMDY0NAotLS0gYS9tbS9zbGFiX2NvbW1vbi5jCisrKyBiL21tL3NsYWJfY29tbW9uLmMKQEAgLTMzMSw3ICszMzEsNyBAQAogCiBvdXRfZnJlZV9jYWNoZToKIAltZW1jZ19mcmVlX2NhY2hlX3BhcmFtcyhzKTsKLQlrZnJlZShzKTsKKwlrbWVtX2NhY2hlX2ZyZWUoa21lbV9jYWNoZSwgcyk7CiAJZ290byBvdXQ7CiB9CiAKQEAgLTQyNSwyMSArNDI1LDY0IEBACiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfY3JlYXRlKTsKIAorc3RhdGljIGludCBkb19rbWVtX2NhY2hlX3NodXRkb3duKHN0cnVjdCBrbWVtX2NhY2hlICpzLAorCQlzdHJ1Y3QgbGlzdF9oZWFkICpyZWxlYXNlLCBib29sICpuZWVkX3JjdV9iYXJyaWVyKQoreworCWlmIChfX2ttZW1fY2FjaGVfc2h1dGRvd24ocykgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImttZW1fY2FjaGVfZGVzdHJveSAlczogIgorCQkgICAgICAgIlNsYWIgY2FjaGUgc3RpbGwgaGFzIG9iamVjdHNcbiIsIHMtPm5hbWUpOworCQlkdW1wX3N0YWNrKCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKHMtPmZsYWdzICYgU0xBQl9ERVNUUk9ZX0JZX1JDVSkKKwkJKm5lZWRfcmN1X2JhcnJpZXIgPSB0cnVlOworCisjaWZkZWYgQ09ORklHX01FTUNHX0tNRU0KKwlpZiAoIWlzX3Jvb3RfY2FjaGUocykpIHsKKwkJc3RydWN0IGttZW1fY2FjaGUgKnJvb3RfY2FjaGUgPSBzLT5tZW1jZ19wYXJhbXMtPnJvb3RfY2FjaGU7CisJCWludCBtZW1jZ19pZCA9IG1lbWNnX2NhY2hlX2lkKHMtPm1lbWNnX3BhcmFtcy0+bWVtY2cpOworCisJCUJVR19PTihyb290X2NhY2hlLT5tZW1jZ19wYXJhbXMtPm1lbWNnX2NhY2hlc1ttZW1jZ19pZF0gIT0gcyk7CisJCXJvb3RfY2FjaGUtPm1lbWNnX3BhcmFtcy0+bWVtY2dfY2FjaGVzW21lbWNnX2lkXSA9IE5VTEw7CisJfQorI2VuZGlmCisJbGlzdF9tb3ZlKCZzLT5saXN0LCByZWxlYXNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZG9fa21lbV9jYWNoZV9yZWxlYXNlKHN0cnVjdCBsaXN0X2hlYWQgKnJlbGVhc2UsCisJCQkJICBib29sIG5lZWRfcmN1X2JhcnJpZXIpCit7CisJc3RydWN0IGttZW1fY2FjaGUgKnMsICpzMjsKKworCWlmIChuZWVkX3JjdV9iYXJyaWVyKQorCQlyY3VfYmFycmllcigpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHMsIHMyLCByZWxlYXNlLCBsaXN0KSB7CisjaWZkZWYgU0xBQl9TVVBQT1JUU19TWVNGUworCQlzeXNmc19zbGFiX3JlbW92ZShzKTsKKyNlbHNlCisJCXNsYWJfa21lbV9jYWNoZV9yZWxlYXNlKHMpOworI2VuZGlmCisJfQorfQorCiAjaWZkZWYgQ09ORklHX01FTUNHX0tNRU0KIC8qCiAgKiBtZW1jZ19jcmVhdGVfa21lbV9jYWNoZSAtIENyZWF0ZSBhIGNhY2hlIGZvciBhIG1lbW9yeSBjZ3JvdXAuCiAgKiBAbWVtY2c6IFRoZSBtZW1vcnkgY2dyb3VwIHRoZSBuZXcgY2FjaGUgaXMgZm9yLgogICogQHJvb3RfY2FjaGU6IFRoZSBwYXJlbnQgb2YgdGhlIG5ldyBjYWNoZS4KLSAqIEBtZW1jZ19uYW1lOiBUaGUgbmFtZSBvZiB0aGUgbWVtb3J5IGNncm91cCAodXNlZCBmb3IgbmFtaW5nIHRoZSBuZXcgY2FjaGUpLgogICoKICAqIFRoaXMgZnVuY3Rpb24gYXR0ZW1wdHMgdG8gY3JlYXRlIGEga21lbSBjYWNoZSB0aGF0IHdpbGwgc2VydmUgYWxsb2NhdGlvbgogICogcmVxdWVzdHMgZ29pbmcgZnJvbSBAbWVtY2cgdG8gQHJvb3RfY2FjaGUuIFRoZSBuZXcgY2FjaGUgaW5oZXJpdHMgcHJvcGVydGllcwogICogZnJvbSBpdHMgcGFyZW50LgogICovCi1zdHJ1Y3Qga21lbV9jYWNoZSAqbWVtY2dfY3JlYXRlX2ttZW1fY2FjaGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCQkgICBzdHJ1Y3Qga21lbV9jYWNoZSAqcm9vdF9jYWNoZSwKLQkJCQkJICAgY29uc3QgY2hhciAqbWVtY2dfbmFtZSkKK3ZvaWQgbWVtY2dfY3JlYXRlX2ttZW1fY2FjaGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAorCQkJICAgICBzdHJ1Y3Qga21lbV9jYWNoZSAqcm9vdF9jYWNoZSkKIHsKKwlzdGF0aWMgY2hhciBtZW1jZ19uYW1lX2J1ZltOQU1FX01BWCArIDFdOyAvKiBwcm90ZWN0ZWQgYnkgc2xhYl9tdXRleCAqLworCWludCBtZW1jZ19pZCA9IG1lbWNnX2NhY2hlX2lkKG1lbWNnKTsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqcyA9IE5VTEw7CiAJY2hhciAqY2FjaGVfbmFtZTsKIApAQCAtNDQ4LDggKzQ5MSwxOCBAQAogCiAJbXV0ZXhfbG9jaygmc2xhYl9tdXRleCk7CiAKKwkvKgorCSAqIFNpbmNlIHBlci1tZW1jZyBjYWNoZXMgYXJlIGNyZWF0ZWQgYXN5bmNocm9ub3VzbHkgb24gZmlyc3QKKwkgKiBhbGxvY2F0aW9uIChzZWUgbWVtY2dfa21lbV9nZXRfY2FjaGUoKSksIHNldmVyYWwgdGhyZWFkcyBjYW4gdHJ5IHRvCisJICogY3JlYXRlIHRoZSBzYW1lIGNhY2hlLCBidXQgb25seSBvbmUgb2YgdGhlbSBtYXkgc3VjY2VlZC4KKwkgKi8KKwlpZiAoY2FjaGVfZnJvbV9tZW1jZ19pZHgocm9vdF9jYWNoZSwgbWVtY2dfaWQpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwljZ3JvdXBfbmFtZShtZW1fY2dyb3VwX2NzcyhtZW1jZyktPmNncm91cCwKKwkJICAgIG1lbWNnX25hbWVfYnVmLCBzaXplb2YobWVtY2dfbmFtZV9idWYpKTsKIAljYWNoZV9uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICIlcyglZDolcykiLCByb290X2NhY2hlLT5uYW1lLAotCQkJICAgICAgIG1lbWNnX2NhY2hlX2lkKG1lbWNnKSwgbWVtY2dfbmFtZSk7CisJCQkgICAgICAgbWVtY2dfY2FjaGVfaWQobWVtY2cpLCBtZW1jZ19uYW1lX2J1Zik7CiAJaWYgKCFjYWNoZV9uYW1lKQogCQlnb3RvIG91dF91bmxvY2s7CiAKQEAgLTQ1Nyw0OSArNTEwLDczIEBACiAJCQkJIHJvb3RfY2FjaGUtPnNpemUsIHJvb3RfY2FjaGUtPmFsaWduLAogCQkJCSByb290X2NhY2hlLT5mbGFncywgcm9vdF9jYWNoZS0+Y3RvciwKIAkJCQkgbWVtY2csIHJvb3RfY2FjaGUpOworCS8qCisJICogSWYgd2UgY291bGQgbm90IGNyZWF0ZSBhIG1lbWNnIGNhY2hlLCBkbyBub3QgY29tcGxhaW4sIGJlY2F1c2UKKwkgKiB0aGF0J3Mgbm90IGNyaXRpY2FsIGF0IGFsbCBhcyB3ZSBjYW4gYWx3YXlzIHByb2NlZWQgd2l0aCB0aGUgcm9vdAorCSAqIGNhY2hlLgorCSAqLwogCWlmIChJU19FUlIocykpIHsKIAkJa2ZyZWUoY2FjaGVfbmFtZSk7Ci0JCXMgPSBOVUxMOworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCisJLyoKKwkgKiBTaW5jZSByZWFkZXJzIHdvbid0IGxvY2sgKHNlZSBjYWNoZV9mcm9tX21lbWNnX2lkeCgpKSwgd2UgbmVlZCBhCisJICogYmFycmllciBoZXJlIHRvIGVuc3VyZSBub2JvZHkgd2lsbCBzZWUgdGhlIGttZW1fY2FjaGUgcGFydGlhbGx5CisJICogaW5pdGlhbGl6ZWQuCisJICovCisJc21wX3dtYigpOworCXJvb3RfY2FjaGUtPm1lbWNnX3BhcmFtcy0+bWVtY2dfY2FjaGVzW21lbWNnX2lkXSA9IHM7CisKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZzbGFiX211dGV4KTsKIAogCXB1dF9vbmxpbmVfbWVtcygpOwogCXB1dF9vbmxpbmVfY3B1cygpOwotCi0JcmV0dXJuIHM7CiB9CiAKLXN0YXRpYyBpbnQgbWVtY2dfY2xlYW51cF9jYWNoZV9wYXJhbXMoc3RydWN0IGttZW1fY2FjaGUgKnMpCit2b2lkIG1lbWNnX2Rlc3Ryb3lfa21lbV9jYWNoZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewotCWludCByYzsKKwlMSVNUX0hFQUQocmVsZWFzZSk7CisJYm9vbCBuZWVkX3JjdV9iYXJyaWVyID0gZmFsc2U7CisJc3RydWN0IGttZW1fY2FjaGUgKnMsICpzMjsKIAotCWlmICghcy0+bWVtY2dfcGFyYW1zIHx8Ci0JICAgICFzLT5tZW1jZ19wYXJhbXMtPmlzX3Jvb3RfY2FjaGUpCi0JCXJldHVybiAwOworCWdldF9vbmxpbmVfY3B1cygpOworCWdldF9vbmxpbmVfbWVtcygpOwogCi0JbXV0ZXhfdW5sb2NrKCZzbGFiX211dGV4KTsKLQlyYyA9IF9fbWVtY2dfY2xlYW51cF9jYWNoZV9wYXJhbXMocyk7CiAJbXV0ZXhfbG9jaygmc2xhYl9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHMsIHMyLCAmc2xhYl9jYWNoZXMsIGxpc3QpIHsKKwkJaWYgKGlzX3Jvb3RfY2FjaGUocykgfHwgcy0+bWVtY2dfcGFyYW1zLT5tZW1jZyAhPSBtZW1jZykKKwkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBUaGUgY2dyb3VwIGlzIGFib3V0IHRvIGJlIGZyZWVkIGFuZCB0aGVyZWZvcmUgaGFzIG5vIGNoYXJnZXMKKwkJICogbGVmdC4gSGVuY2UsIGFsbCBpdHMgY2FjaGVzIG11c3QgYmUgZW1wdHkgYnkgbm93LgorCQkgKi8KKwkJQlVHX09OKGRvX2ttZW1fY2FjaGVfc2h1dGRvd24ocywgJnJlbGVhc2UsICZuZWVkX3JjdV9iYXJyaWVyKSk7CisJfQorCW11dGV4X3VubG9jaygmc2xhYl9tdXRleCk7CiAKLQlyZXR1cm4gcmM7Ci19Ci0jZWxzZQotc3RhdGljIGludCBtZW1jZ19jbGVhbnVwX2NhY2hlX3BhcmFtcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcykKLXsKLQlyZXR1cm4gMDsKKwlwdXRfb25saW5lX21lbXMoKTsKKwlwdXRfb25saW5lX2NwdXMoKTsKKworCWRvX2ttZW1fY2FjaGVfcmVsZWFzZSgmcmVsZWFzZSwgbmVlZF9yY3VfYmFycmllcik7CiB9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHX0tNRU0gKi8KIAogdm9pZCBzbGFiX2ttZW1fY2FjaGVfcmVsZWFzZShzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIHsKKwltZW1jZ19mcmVlX2NhY2hlX3BhcmFtcyhzKTsKIAlrZnJlZShzLT5uYW1lKTsKIAlrbWVtX2NhY2hlX2ZyZWUoa21lbV9jYWNoZSwgcyk7CiB9CiAKIHZvaWQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpzKQogeworCWludCBpOworCUxJU1RfSEVBRChyZWxlYXNlKTsKKwlib29sIG5lZWRfcmN1X2JhcnJpZXIgPSBmYWxzZTsKKwlib29sIGJ1c3kgPSBmYWxzZTsKKwogCWdldF9vbmxpbmVfY3B1cygpOwogCWdldF9vbmxpbmVfbWVtcygpOwogCkBAIC01MDksMzUgKzU4NiwyMyBAQAogCWlmIChzLT5yZWZjb3VudCkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JaWYgKG1lbWNnX2NsZWFudXBfY2FjaGVfcGFyYW1zKHMpICE9IDApCi0JCWdvdG8gb3V0X3VubG9jazsKKwlmb3JfZWFjaF9tZW1jZ19jYWNoZV9pbmRleChpKSB7CisJCXN0cnVjdCBrbWVtX2NhY2hlICpjID0gY2FjaGVfZnJvbV9tZW1jZ19pZHgocywgaSk7CiAKLQlpZiAoX19rbWVtX2NhY2hlX3NodXRkb3duKHMpICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJrbWVtX2NhY2hlX2Rlc3Ryb3kgJXM6ICIKLQkJICAgICAgICJTbGFiIGNhY2hlIHN0aWxsIGhhcyBvYmplY3RzXG4iLCBzLT5uYW1lKTsKLQkJZHVtcF9zdGFjaygpOwotCQlnb3RvIG91dF91bmxvY2s7CisJCWlmIChjICYmIGRvX2ttZW1fY2FjaGVfc2h1dGRvd24oYywgJnJlbGVhc2UsICZuZWVkX3JjdV9iYXJyaWVyKSkKKwkJCWJ1c3kgPSB0cnVlOwogCX0KIAotCWxpc3RfZGVsKCZzLT5saXN0KTsKLQotCW11dGV4X3VubG9jaygmc2xhYl9tdXRleCk7Ci0JaWYgKHMtPmZsYWdzICYgU0xBQl9ERVNUUk9ZX0JZX1JDVSkKLQkJcmN1X2JhcnJpZXIoKTsKLQotCW1lbWNnX2ZyZWVfY2FjaGVfcGFyYW1zKHMpOwotI2lmZGVmIFNMQUJfU1VQUE9SVFNfU1lTRlMKLQlzeXNmc19zbGFiX3JlbW92ZShzKTsKLSNlbHNlCi0Jc2xhYl9rbWVtX2NhY2hlX3JlbGVhc2Uocyk7Ci0jZW5kaWYKLQlnb3RvIG91dDsKKwlpZiAoIWJ1c3kpCisJCWRvX2ttZW1fY2FjaGVfc2h1dGRvd24ocywgJnJlbGVhc2UsICZuZWVkX3JjdV9iYXJyaWVyKTsKIAogb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJnNsYWJfbXV0ZXgpOwotb3V0OgorCiAJcHV0X29ubGluZV9tZW1zKCk7CiAJcHV0X29ubGluZV9jcHVzKCk7CisKKwlkb19rbWVtX2NhY2hlX3JlbGVhc2UoJnJlbGVhc2UsIG5lZWRfcmN1X2JhcnJpZXIpOwogfQogRVhQT1JUX1NZTUJPTChrbWVtX2NhY2hlX2Rlc3Ryb3kpOwogCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggZmUzNzZmZS4uOGI4NTA4YSAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMjM5OCwxMyArMjM5OCwyNCBAQAogCSAqIHJlYWRpbmcgZnJvbSBvbmUgY3B1IGFyZWEuIFRoYXQgZG9lcyBub3QgbWF0dGVyIGFzIGxvbmcKIAkgKiBhcyB3ZSBlbmQgdXAgb24gdGhlIG9yaWdpbmFsIGNwdSBhZ2FpbiB3aGVuIGRvaW5nIHRoZSBjbXB4Y2hnLgogCSAqCi0JICogUHJlZW1wdGlvbiBpcyBkaXNhYmxlZCBmb3IgdGhlIHJldHJpZXZhbCBvZiB0aGUgdGlkIGJlY2F1c2UgdGhhdAotCSAqIG11c3Qgb2NjdXIgZnJvbSB0aGUgY3VycmVudCBwcm9jZXNzb3IuIFdlIGNhbm5vdCBhbGxvdyByZXNjaGVkdWxpbmcKLQkgKiBvbiBhIGRpZmZlcmVudCBwcm9jZXNzb3IgYmV0d2VlbiB0aGUgZGV0ZXJtaW5hdGlvbiBvZiB0aGUgcG9pbnRlcgotCSAqIGFuZCB0aGUgcmV0cmlldmFsIG9mIHRoZSB0aWQuCisJICogV2Ugc2hvdWxkIGd1YXJhbnRlZSB0aGF0IHRpZCBhbmQga21lbV9jYWNoZSBhcmUgcmV0cmlldmVkIG9uCisJICogdGhlIHNhbWUgY3B1LiBJdCBjb3VsZCBiZSBkaWZmZXJlbnQgaWYgQ09ORklHX1BSRUVNUFQgc28gd2UgbmVlZAorCSAqIHRvIGNoZWNrIGlmIGl0IGlzIG1hdGNoZWQgb3Igbm90LgogCSAqLwotCXByZWVtcHRfZGlzYWJsZSgpOwotCWMgPSB0aGlzX2NwdV9wdHIocy0+Y3B1X3NsYWIpOworCWRvIHsKKwkJdGlkID0gdGhpc19jcHVfcmVhZChzLT5jcHVfc2xhYi0+dGlkKTsKKwkJYyA9IHJhd19jcHVfcHRyKHMtPmNwdV9zbGFiKTsKKwl9IHdoaWxlIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUKSAmJiB1bmxpa2VseSh0aWQgIT0gYy0+dGlkKSk7CisKKwkvKgorCSAqIElycWxlc3Mgb2JqZWN0IGFsbG9jL2ZyZWUgYWxnb3JpdGhtIHVzZWQgaGVyZSBkZXBlbmRzIG9uIHNlcXVlbmNlCisJICogb2YgZmV0Y2hpbmcgY3B1X3NsYWIncyBkYXRhLiB0aWQgc2hvdWxkIGJlIGZldGNoZWQgYmVmb3JlIGFueXRoaW5nCisJICogb24gYyB0byBndWFyYW50ZWUgdGhhdCBvYmplY3QgYW5kIHBhZ2UgYXNzb2NpYXRlZCB3aXRoIHByZXZpb3VzIHRpZAorCSAqIHdvbid0IGJlIHVzZWQgd2l0aCBjdXJyZW50IHRpZC4gSWYgd2UgZmV0Y2ggdGlkIGZpcnN0LCBvYmplY3QgYW5kCisJICogcGFnZSBjb3VsZCBiZSBvbmUgYXNzb2NpYXRlZCB3aXRoIG5leHQgdGlkIGFuZCBvdXIgYWxsb2MvZnJlZQorCSAqIHJlcXVlc3Qgd2lsbCBiZSBmYWlsZWQuIEluIHRoaXMgY2FzZSwgd2Ugd2lsbCByZXRyeS4gU28sIG5vIHByb2JsZW0uCisJICovCisJYmFycmllcigpOwogCiAJLyoKIAkgKiBUaGUgdHJhbnNhY3Rpb24gaWRzIGFyZSBnbG9iYWxseSB1bmlxdWUgcGVyIGNwdSBhbmQgcGVyIG9wZXJhdGlvbiBvbgpAQCAtMjQxMiw4ICsyNDIzLDYgQEAKIAkgKiBvY2N1cnMgb24gdGhlIHJpZ2h0IHByb2Nlc3NvciBhbmQgdGhhdCB0aGVyZSB3YXMgbm8gb3BlcmF0aW9uIG9uIHRoZQogCSAqIGxpbmtlZCBsaXN0IGluIGJldHdlZW4uCiAJICovCi0JdGlkID0gYy0+dGlkOwotCXByZWVtcHRfZW5hYmxlKCk7CiAKIAlvYmplY3QgPSBjLT5mcmVlbGlzdDsKIAlwYWdlID0gYy0+cGFnZTsKQEAgLTI1MTIsNyArMjUyMSw3IEBACiAjZW5kaWYKIAogLyoKLSAqIFNsb3cgcGF0Y2ggaGFuZGxpbmcuIFRoaXMgbWF5IHN0aWxsIGJlIGNhbGxlZCBmcmVxdWVudGx5IHNpbmNlIG9iamVjdHMKKyAqIFNsb3cgcGF0aCBoYW5kbGluZy4gVGhpcyBtYXkgc3RpbGwgYmUgY2FsbGVkIGZyZXF1ZW50bHkgc2luY2Ugb2JqZWN0cwogICogaGF2ZSBhIGxvbmdlciBsaWZldGltZSB0aGFuIHRoZSBjcHUgc2xhYnMgaW4gbW9zdCBwcm9jZXNzaW5nIGxvYWRzLgogICoKICAqIFNvIHdlIHN0aWxsIGF0dGVtcHQgdG8gcmVkdWNlIGNhY2hlIGxpbmUgdXNhZ2UuIEp1c3QgdGFrZSB0aGUgc2xhYgpAQCAtMjY1OSwxMSArMjY2OCwxMyBAQAogCSAqIGRhdGEgaXMgcmV0cmlldmVkIHZpYSB0aGlzIHBvaW50ZXIuIElmIHdlIGFyZSBvbiB0aGUgc2FtZSBjcHUKIAkgKiBkdXJpbmcgdGhlIGNtcHhjaGcgdGhlbiB0aGUgZnJlZSB3aWxsIHN1Y2NlZGQuCiAJICovCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JYyA9IHRoaXNfY3B1X3B0cihzLT5jcHVfc2xhYik7CisJZG8geworCQl0aWQgPSB0aGlzX2NwdV9yZWFkKHMtPmNwdV9zbGFiLT50aWQpOworCQljID0gcmF3X2NwdV9wdHIocy0+Y3B1X3NsYWIpOworCX0gd2hpbGUgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFQpICYmIHVubGlrZWx5KHRpZCAhPSBjLT50aWQpKTsKIAotCXRpZCA9IGMtPnRpZDsKLQlwcmVlbXB0X2VuYWJsZSgpOworCS8qIFNhbWUgd2l0aCBjb21tZW50IG9uIGJhcnJpZXIoKSBpbiBzbGFiX2FsbG9jX25vZGUoKSAqLworCWJhcnJpZXIoKTsKIAogCWlmIChsaWtlbHkocGFnZSA9PSBjLT5wYWdlKSkgewogCQlzZXRfZnJlZXBvaW50ZXIocywgb2JqZWN0LCBjLT5mcmVlbGlzdCk7CmRpZmYgLS1naXQgYS9tbS9zd2FwLmMgYi9tbS9zd2FwLmMKaW5kZXggOGExMmIzMy4uNWIzMDg3MiAxMDA2NDQKLS0tIGEvbW0vc3dhcC5jCisrKyBiL21tL3N3YXAuYwpAQCAtMTE0MCwxMCArMTE0MCw4IEBACiAKIAlpZiAoYmRpX2luaXQoc3dhcHBlcl9zcGFjZXNbMF0uYmFja2luZ19kZXZfaW5mbykpCiAJCXBhbmljKCJGYWlsZWQgdG8gaW5pdCBzd2FwIGJkaSIpOwotCWZvciAoaSA9IDA7IGkgPCBNQVhfU1dBUEZJTEVTOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1NXQVBGSUxFUzsgaSsrKQogCQlzcGluX2xvY2tfaW5pdCgmc3dhcHBlcl9zcGFjZXNbaV0udHJlZV9sb2NrKTsKLQkJSU5JVF9MSVNUX0hFQUQoJnN3YXBwZXJfc3BhY2VzW2ldLmlfbW1hcF9ub25saW5lYXIpOwotCX0KICNlbmRpZgogCiAJLyogVXNlIGEgc21hbGxlciBjbHVzdGVyIGZvciBzbWFsbC1tZW1vcnkgbWFjaGluZXMgKi8KZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuYwppbmRleCBmZWMzOWQ0Li5mM2VmNjM5IDEwMDY0NAotLS0gYS9tbS91dGlsLmMKKysrIGIvbW0vdXRpbC5jCkBAIC0yNDAsMTQgKzI0MCw4IEBACiAJCQkJaW50IG5yX3BhZ2VzLCBpbnQgd3JpdGUsIHN0cnVjdCBwYWdlICoqcGFnZXMpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKLQlpbnQgcmV0OwotCi0JZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCXJldCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCBzdGFydCwgbnJfcGFnZXMsCi0JCQkJCXdyaXRlLCAwLCBwYWdlcywgTlVMTCk7Ci0JdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKGN1cnJlbnQsIG1tLCBzdGFydCwgbnJfcGFnZXMsCisJCQkJICAgICAgIHdyaXRlLCAwLCBwYWdlcyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChnZXRfdXNlcl9wYWdlc19mYXN0KTsKIApkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBhYjI1MDVjLi44ZTY0NWVlIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYworKysgYi9tbS92bXNjYW4uYwpAQCAtOTEsNiArOTEsOSBAQAogCS8qIENhbiBwYWdlcyBiZSBzd2FwcGVkIGFzIHBhcnQgb2YgcmVjbGFpbT8gKi8KIAl1bnNpZ25lZCBpbnQgbWF5X3N3YXA6MTsKIAorCS8qIENhbiBjZ3JvdXBzIGJlIHJlY2xhaW1lZCBiZWxvdyB0aGVpciBub3JtYWwgY29uc3VtcHRpb24gcmFuZ2U/ICovCisJdW5zaWduZWQgaW50IG1heV90aHJhc2g6MTsKKwogCXVuc2lnbmVkIGludCBoaWJlcm5hdGlvbl9tb2RlOjE7CiAKIAkvKiBPbmUgb2YgdGhlIHpvbmVzIGlzIHJlYWR5IGZvciBjb21wYWN0aW9uICovCkBAIC0xOTAzLDggKzE5MDYsMTIgQEAKIAkgKiBsYXRlbmNpZXMsIHNvIGl0J3MgYmV0dGVyIHRvIHNjYW4gYSBtaW5pbXVtIGFtb3VudCB0aGVyZSBhcwogCSAqIHdlbGwuCiAJICovCi0JaWYgKGN1cnJlbnRfaXNfa3N3YXBkKCkgJiYgIXpvbmVfcmVjbGFpbWFibGUoem9uZSkpCi0JCWZvcmNlX3NjYW4gPSB0cnVlOworCWlmIChjdXJyZW50X2lzX2tzd2FwZCgpKSB7CisJCWlmICghem9uZV9yZWNsYWltYWJsZSh6b25lKSkKKwkJCWZvcmNlX3NjYW4gPSB0cnVlOworCQlpZiAoIW1lbV9jZ3JvdXBfbHJ1dmVjX29ubGluZShscnV2ZWMpKQorCQkJZm9yY2Vfc2NhbiA9IHRydWU7CisJfQogCWlmICghZ2xvYmFsX3JlY2xhaW0oc2MpKQogCQlmb3JjZV9zY2FuID0gdHJ1ZTsKIApAQCAtMjI5MCw2ICsyMjk3LDEyIEBACiAJCQlzdHJ1Y3QgbHJ1dmVjICpscnV2ZWM7CiAJCQlpbnQgc3dhcHBpbmVzczsKIAorCQkJaWYgKG1lbV9jZ3JvdXBfbG93KHJvb3QsIG1lbWNnKSkgeworCQkJCWlmICghc2MtPm1heV90aHJhc2gpCisJCQkJCWNvbnRpbnVlOworCQkJCW1lbV9jZ3JvdXBfZXZlbnRzKG1lbWNnLCBNRU1DR19MT1csIDEpOworCQkJfQorCiAJCQlscnV2ZWMgPSBtZW1fY2dyb3VwX3pvbmVfbHJ1dmVjKHpvbmUsIG1lbWNnKTsKIAkJCXN3YXBwaW5lc3MgPSBtZW1fY2dyb3VwX3N3YXBwaW5lc3MobWVtY2cpOwogCkBAIC0yMzExLDggKzIzMjQsNyBAQAogCQkJCW1lbV9jZ3JvdXBfaXRlcl9icmVhayhyb290LCBtZW1jZyk7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQltZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcihyb290LCBtZW1jZywgJnJlY2xhaW0pOwotCQl9IHdoaWxlIChtZW1jZyk7CisJCX0gd2hpbGUgKChtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcihyb290LCBtZW1jZywgJnJlY2xhaW0pKSk7CiAKIAkJLyoKIAkJICogU2hyaW5rIHRoZSBzbGFiIGNhY2hlcyBpbiB0aGUgc2FtZSBwcm9wb3J0aW9uIHRoYXQKQEAgLTI1MTUsMTAgKzI1MjcsMTEgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX3RyeV90b19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3QsCiAJCQkJCSAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCiB7CisJaW50IGluaXRpYWxfcHJpb3JpdHkgPSBzYy0+cHJpb3JpdHk7CiAJdW5zaWduZWQgbG9uZyB0b3RhbF9zY2FubmVkID0gMDsKIAl1bnNpZ25lZCBsb25nIHdyaXRlYmFja190aHJlc2hvbGQ7CiAJYm9vbCB6b25lc19yZWNsYWltYWJsZTsKLQorcmV0cnk6CiAJZGVsYXlhY2N0X2ZyZWVwYWdlc19zdGFydCgpOwogCiAJaWYgKGdsb2JhbF9yZWNsYWltKHNjKSkKQEAgLTI1NjgsNiArMjU4MSwxMyBAQAogCWlmIChzYy0+Y29tcGFjdGlvbl9yZWFkeSkKIAkJcmV0dXJuIDE7CiAKKwkvKiBVbnRhcHBlZCBjZ3JvdXAgcmVzZXJ2ZXM/ICBEb24ndCBPT00sIHJldHJ5LiAqLworCWlmICghc2MtPm1heV90aHJhc2gpIHsKKwkJc2MtPnByaW9yaXR5ID0gaW5pdGlhbF9wcmlvcml0eTsKKwkJc2MtPm1heV90aHJhc2ggPSAxOworCQlnb3RvIHJldHJ5OworCX0KKwogCS8qIEFueSBvZiB0aGUgem9uZXMgc3RpbGwgcmVjbGFpbWFibGU/ICBEb24ndCBPT00uICovCiAJaWYgKHpvbmVzX3JlY2xhaW1hYmxlKQogCQlyZXR1cm4gMTsKQEAgLTI2NTYsNyArMjY3Niw3IEBACiAJICogc2hvdWxkIG1ha2UgcmVhc29uYWJsZSBwcm9ncmVzcy4KIAkgKi8KIAlmb3JfZWFjaF96b25lX3pvbmVsaXN0X25vZGVtYXNrKHpvbmUsIHosIHpvbmVsaXN0LAotCQkJCQlnZnBfbWFzaywgbm9kZW1hc2spIHsKKwkJCQkJZ2ZwX3pvbmUoZ2ZwX21hc2spLCBub2RlbWFzaykgewogCQlpZiAoem9uZV9pZHgoem9uZSkgPiBaT05FX05PUk1BTCkKIAkJCWNvbnRpbnVlOwogCkBAIC0zMTc1LDcgKzMxOTUsNyBAQAogCQkgKi8KIAkJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJnBnZGF0LT5wZm1lbWFsbG9jX3dhaXQpICYmCiAJCQkJcGZtZW1hbGxvY193YXRlcm1hcmtfb2socGdkYXQpKQotCQkJd2FrZV91cCgmcGdkYXQtPnBmbWVtYWxsb2Nfd2FpdCk7CisJCQl3YWtlX3VwX2FsbCgmcGdkYXQtPnBmbWVtYWxsb2Nfd2FpdCk7CiAKIAkJLyoKIAkJICogRnJhZ21lbnRhdGlvbiBtYXkgbWVhbiB0aGF0IHRoZSBzeXN0ZW0gY2Fubm90IGJlIHJlYmFsYW5jZWQKZGlmZiAtLWdpdCBhL21tL3Ztc3RhdC5jIGIvbW0vdm1zdGF0LmMKaW5kZXggMTI4NGY4OS4uNGY1Y2Q5NyAxMDA2NDQKLS0tIGEvbW0vdm1zdGF0LmMKKysrIGIvbW0vdm1zdGF0LmMKQEAgLTE3LDYgKzE3LDkgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvdm1zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CkBAIC02NzAsNjYgKzY3Myw2IEBACiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpIHx8IGRlZmluZWQoQ09ORklHX0NPTVBBQ1RJT04pCi0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0KLXN0YXRpYyBjaGFyICogY29uc3QgbWlncmF0ZXR5cGVfbmFtZXNbTUlHUkFURV9UWVBFU10gPSB7Ci0JIlVubW92YWJsZSIsCi0JIlJlY2xhaW1hYmxlIiwKLQkiTW92YWJsZSIsCi0JIlJlc2VydmUiLAotI2lmZGVmIENPTkZJR19DTUEKLQkiQ01BIiwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19NRU1PUllfSVNPTEFUSU9OCi0JIklzb2xhdGUiLAotI2VuZGlmCi19OwotCi1zdGF0aWMgdm9pZCAqZnJhZ19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQotewotCXBnX2RhdGFfdCAqcGdkYXQ7Ci0JbG9mZl90IG5vZGUgPSAqcG9zOwotCWZvciAocGdkYXQgPSBmaXJzdF9vbmxpbmVfcGdkYXQoKTsKLQkgICAgIHBnZGF0ICYmIG5vZGU7Ci0JICAgICBwZ2RhdCA9IG5leHRfb25saW5lX3BnZGF0KHBnZGF0KSkKLQkJLS1ub2RlOwotCi0JcmV0dXJuIHBnZGF0OwotfQotCi1zdGF0aWMgdm9pZCAqZnJhZ19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnLCBsb2ZmX3QgKnBvcykKLXsKLQlwZ19kYXRhX3QgKnBnZGF0ID0gKHBnX2RhdGFfdCAqKWFyZzsKLQotCSgqcG9zKSsrOwotCXJldHVybiBuZXh0X29ubGluZV9wZ2RhdChwZ2RhdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGZyYWdfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZykKLXsKLX0KLQotLyogV2FsayBhbGwgdGhlIHpvbmVzIGluIGEgbm9kZSBhbmQgcHJpbnQgdXNpbmcgYSBjYWxsYmFjayAqLwotc3RhdGljIHZvaWQgd2Fsa196b25lc19pbl9ub2RlKHN0cnVjdCBzZXFfZmlsZSAqbSwgcGdfZGF0YV90ICpwZ2RhdCwKLQkJdm9pZCAoKnByaW50KShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHBnX2RhdGFfdCAqLCBzdHJ1Y3Qgem9uZSAqKSkKLXsKLQlzdHJ1Y3Qgem9uZSAqem9uZTsKLQlzdHJ1Y3Qgem9uZSAqbm9kZV96b25lcyA9IHBnZGF0LT5ub2RlX3pvbmVzOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlmb3IgKHpvbmUgPSBub2RlX3pvbmVzOyB6b25lIC0gbm9kZV96b25lcyA8IE1BWF9OUl9aT05FUzsgKyt6b25lKSB7Ci0JCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCi0JCQljb250aW51ZTsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmem9uZS0+bG9jaywgZmxhZ3MpOwotCQlwcmludChtLCBwZ2RhdCwgem9uZSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKLQl9Ci19Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX1BST0NfRlMpIHx8IGRlZmluZWQoQ09ORklHX1NZU0ZTKSB8fCBkZWZpbmVkKENPTkZJR19OVU1BKQogI2lmZGVmIENPTkZJR19aT05FX0RNQQogI2RlZmluZSBURVhUX0ZPUl9ETUEoeHgpIHh4ICJfZG1hIiwKQEAgLTkwNyw3ICs4NTAsNjYgQEAKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyB8fCBDT05GSUdfU1lTRlMgfHwgQ09ORklHX05VTUEgKi8KIAogCisjaWYgKGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAmJiBkZWZpbmVkKENPTkZJR19DT01QQUNUSU9OKSkgfHwgXAorICAgICBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQorc3RhdGljIHZvaWQgKmZyYWdfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKK3sKKwlwZ19kYXRhX3QgKnBnZGF0OworCWxvZmZfdCBub2RlID0gKnBvczsKKworCWZvciAocGdkYXQgPSBmaXJzdF9vbmxpbmVfcGdkYXQoKTsKKwkgICAgIHBnZGF0ICYmIG5vZGU7CisJICAgICBwZ2RhdCA9IG5leHRfb25saW5lX3BnZGF0KHBnZGF0KSkKKwkJLS1ub2RlOworCisJcmV0dXJuIHBnZGF0OworfQorCitzdGF0aWMgdm9pZCAqZnJhZ19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqYXJnLCBsb2ZmX3QgKnBvcykKK3sKKwlwZ19kYXRhX3QgKnBnZGF0ID0gKHBnX2RhdGFfdCAqKWFyZzsKKworCSgqcG9zKSsrOworCXJldHVybiBuZXh0X29ubGluZV9wZ2RhdChwZ2RhdCk7Cit9CisKK3N0YXRpYyB2b2lkIGZyYWdfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmFyZykKK3sKK30KKworLyogV2FsayBhbGwgdGhlIHpvbmVzIGluIGEgbm9kZSBhbmQgcHJpbnQgdXNpbmcgYSBjYWxsYmFjayAqLworc3RhdGljIHZvaWQgd2Fsa196b25lc19pbl9ub2RlKHN0cnVjdCBzZXFfZmlsZSAqbSwgcGdfZGF0YV90ICpwZ2RhdCwKKwkJdm9pZCAoKnByaW50KShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHBnX2RhdGFfdCAqLCBzdHJ1Y3Qgem9uZSAqKSkKK3sKKwlzdHJ1Y3Qgem9uZSAqem9uZTsKKwlzdHJ1Y3Qgem9uZSAqbm9kZV96b25lcyA9IHBnZGF0LT5ub2RlX3pvbmVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlmb3IgKHpvbmUgPSBub2RlX3pvbmVzOyB6b25lIC0gbm9kZV96b25lcyA8IE1BWF9OUl9aT05FUzsgKyt6b25lKSB7CisJCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCisJCQljb250aW51ZTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmem9uZS0+bG9jaywgZmxhZ3MpOworCQlwcmludChtLCBwZ2RhdCwgem9uZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxvY2ssIGZsYWdzKTsKKwl9Cit9CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCitzdGF0aWMgY2hhciAqIGNvbnN0IG1pZ3JhdGV0eXBlX25hbWVzW01JR1JBVEVfVFlQRVNdID0geworCSJVbm1vdmFibGUiLAorCSJSZWNsYWltYWJsZSIsCisJIk1vdmFibGUiLAorCSJSZXNlcnZlIiwKKyNpZmRlZiBDT05GSUdfQ01BCisJIkNNQSIsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUVNT1JZX0lTT0xBVElPTgorCSJJc29sYXRlIiwKKyNlbmRpZgorfTsKKwogc3RhdGljIHZvaWQgZnJhZ19zaG93X3ByaW50KHN0cnVjdCBzZXFfZmlsZSAqbSwgcGdfZGF0YV90ICpwZ2RhdCwKIAkJCQkJCXN0cnVjdCB6b25lICp6b25lKQogewpAQCAtMTQzNSw4ICsxNDM3LDggQEAKIAkJaWYgKG5lZWRfdXBkYXRlKGNwdSkgJiYKIAkJCWNwdW1hc2tfdGVzdF9hbmRfY2xlYXJfY3B1KGNwdSwgY3B1X3N0YXRfb2ZmKSkKIAotCQkJc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGNwdSwgJnBlcl9jcHUodm1zdGF0X3dvcmssIGNwdSksCi0JCQkJX19yb3VuZF9qaWZmaWVzX3JlbGF0aXZlKHN5c2N0bF9zdGF0X2ludGVydmFsLCBjcHUpKTsKKwkJCXNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbihjcHUsCisJCQkJJnBlcl9jcHUodm1zdGF0X3dvcmssIGNwdSksIDApOwogCiAJcHV0X29ubGluZV9jcHVzKCk7CiAKQEAgLTE0NTAsNyArMTQ1Miw3IEBACiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCUlOSVRfREVGRVJSQUJMRV9XT1JLKHBlcl9jcHVfcHRyKCZ2bXN0YXRfd29yaywgY3B1KSwKKwkJSU5JVF9ERUxBWUVEX1dPUksocGVyX2NwdV9wdHIoJnZtc3RhdF93b3JrLCBjcHUpLAogCQkJdm1zdGF0X3VwZGF0ZSk7CiAKIAlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZjcHVfc3RhdF9vZmYsIEdGUF9LRVJORUwpKQpAQCAtMTUzNiw4ICsxNTM4LDYgQEAKIG1vZHVsZV9pbml0KHNldHVwX3Ztc3RhdCkKIAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSAmJiBkZWZpbmVkKENPTkZJR19DT01QQUNUSU9OKQotI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KLQogCiAvKgogICogUmV0dXJuIGFuIGluZGV4IGluZGljYXRpbmcgaG93IG11Y2ggb2YgdGhlIGF2YWlsYWJsZSBmcmVlIG1lbW9yeSBpcwpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5fY29yZS5jIGIvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCmluZGV4IDkwY2MyYmQuLjYxYmYyYTAgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2NvcmUuYworKysgYi9uZXQvODAyMXEvdmxhbl9jb3JlLmMKQEAgLTksNyArOSw3IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9ICpza2JwOwogCV9fYmUxNiB2bGFuX3Byb3RvID0gc2tiLT52bGFuX3Byb3RvOwotCXUxNiB2bGFuX2lkID0gdmxhbl90eF90YWdfZ2V0X2lkKHNrYik7CisJdTE2IHZsYW5faWQgPSBza2Jfdmxhbl90YWdfZ2V0X2lkKHNrYik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnZsYW5fZGV2OwogCXN0cnVjdCB2bGFuX3BjcHVfc3RhdHMgKnJ4X3N0YXRzOwogCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9uZXRsaW5rLmMgYi9uZXQvODAyMXEvdmxhbl9uZXRsaW5rLmMKaW5kZXggOGFjOGE1Yy4uYzkyYjUyZiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW5fbmV0bGluay5jCisrKyBiL25ldC84MDIxcS92bGFuX25ldGxpbmsuYwpAQCAtMjM4LDYgKzIzOCwxMyBAQAogCXJldHVybiAtRU1TR1NJWkU7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbmV0ICp2bGFuX2dldF9saW5rX25ldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IHZsYW5fZGV2X3ByaXYoZGV2KS0+cmVhbF9kZXY7CisKKwlyZXR1cm4gZGV2X25ldChyZWFsX2Rldik7Cit9CisKIHN0cnVjdCBydG5sX2xpbmtfb3BzIHZsYW5fbGlua19vcHMgX19yZWFkX21vc3RseSA9IHsKIAkua2luZAkJPSAidmxhbiIsCiAJLm1heHR5cGUJPSBJRkxBX1ZMQU5fTUFYLApAQCAtMjUwLDYgKzI1Nyw3IEBACiAJLmRlbGxpbmsJPSB1bnJlZ2lzdGVyX3ZsYW5fZGV2LAogCS5nZXRfc2l6ZQk9IHZsYW5fZ2V0X3NpemUsCiAJLmZpbGxfaW5mbwk9IHZsYW5fZmlsbF9pbmZvLAorCS5nZXRfbGlua19uZXQJPSB2bGFuX2dldF9saW5rX25ldCwKIH07CiAKIGludCBfX2luaXQgdmxhbl9uZXRsaW5rX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L0tjb25maWcgYi9uZXQvYmF0bWFuLWFkdi9LY29uZmlnCmluZGV4IDExNjYwYTMuLmM2ZmM4ZjcgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L0tjb25maWcKKysrIGIvbmV0L2JhdG1hbi1hZHYvS2NvbmZpZwpAQCAtNjIsNiArNjIsNyBAQAogY29uZmlnIEJBVE1BTl9BRFZfREVCVUcKIAlib29sICJCLkEuVC5NLkEuTi4gZGVidWdnaW5nIgogCWRlcGVuZHMgb24gQkFUTUFOX0FEVgorCWRlcGVuZHMgb24gREVCVUdfRlMKIAloZWxwCiAJICBUaGlzIGlzIGFuIG9wdGlvbiBmb3IgdXNlIGJ5IGRldmVsb3BlcnM7IG1vc3QgcGVvcGxlIHNob3VsZAogCSAgc2F5IE4gaGVyZS4gVGhpcyBlbmFibGVzIGNvbXBpbGF0aW9uIG9mIHN1cHBvcnQgZm9yCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMKaW5kZXggMWU4MDUzOS4uMDBlMDBlMCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jCisrKyBiL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYwpAQCAtMjYsOSArMjYsOCBAQAogI2luY2x1ZGUgImJhdF9hbGdvLmgiCiAjaW5jbHVkZSAibmV0d29yay1jb2RpbmcuaCIKIAotCiAvKioKLSAqIGJhdGFkdl9kdXBfc3RhdHVzIC0gZHVwbGljYXRlIHN0YXR1cworICogZW51bSBiYXRhZHZfZHVwX3N0YXR1cyAtIGR1cGxpY2F0ZSBzdGF0dXMKICAqIEBCQVRBRFZfTk9fRFVQOiB0aGUgcGFja2V0IGlzIGEgZHVwbGljYXRlCiAgKiBAQkFUQURWX09SSUdfRFVQOiBPR00gaXMgYSBkdXBsaWNhdGUgaW4gdGhlIG9yaWdpbmF0b3IgKGJ1dCBub3QgZm9yIHRoZQogICogIG5laWdoYm9yKQpAQCAtNTE3LDcgKzUxNiw3IEBACiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgc29mdCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KICAqIEBwYWNrZXRfbGVuOiAodG90YWwpIGxlbmd0aCBvZiB0aGUgT0dNCiAgKiBAc2VuZF90aW1lOiB0aW1lc3RhbXAgKGppZmZpZXMpIHdoZW4gdGhlIHBhY2tldCBpcyB0byBiZSBzZW50Ci0gKiBAZGlyZWt0bGluazogdHJ1ZSBpZiB0aGlzIGlzIGEgZGlyZWN0IGxpbmsgcGFja2V0CisgKiBAZGlyZWN0bGluazogdHJ1ZSBpZiB0aGlzIGlzIGEgZGlyZWN0IGxpbmsgcGFja2V0CiAgKiBAaWZfaW5jb21pbmc6IGludGVyZmFjZSB3aGVyZSB0aGUgcGFja2V0IHdhcyByZWNlaXZlZAogICogQGlmX291dGdvaW5nOiBpbnRlcmZhY2UgZm9yIHdoaWNoIHRoZSByZXRyYW5zbWlzc2lvbiBzaG91bGQgYmUgY29uc2lkZXJlZAogICogQGZvcndfcGFja2V0OiB0aGUgZm9yd2FyZGVkIHBhY2tldCB3aGljaCBzaG91bGQgYmUgY2hlY2tlZApAQCAtODc5LDcgKzg3OCw3IEBACiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShvcmlnX25vZGUsIGhlYWQsIGhhc2hfZW50cnkpIHsKIAkJCXNwaW5fbG9ja19iaCgmb3JpZ19ub2RlLT5iYXRfaXYub2dtX2NudF9sb2NrKTsKIAkJCXdvcmRfaW5kZXggPSBoYXJkX2lmYWNlLT5pZl9udW0gKiBCQVRBRFZfTlVNX1dPUkRTOwotCQkJd29yZCA9ICYob3JpZ19ub2RlLT5iYXRfaXYuYmNhc3Rfb3duW3dvcmRfaW5kZXhdKTsKKwkJCXdvcmQgPSAmb3JpZ19ub2RlLT5iYXRfaXYuYmNhc3Rfb3duW3dvcmRfaW5kZXhdOwogCiAJCQliYXRhZHZfYml0X2dldF9wYWNrZXQoYmF0X3ByaXYsIHdvcmQsIDEsIDApOwogCQkJaWZfbnVtID0gaGFyZF9pZmFjZS0+aWZfbnVtOwpAQCAtMTM2MiwxMCArMTM2MSwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLQogLyoqCiAgKiBiYXRhZHZfaXZfb2dtX3Byb2Nlc3NfcGVyX291dGlmIC0gcHJvY2VzcyBhIGJhdG1hbiBpdiBPR00gZm9yIGFuIG91dGdvaW5nIGlmCiAgKiBAc2tiOiB0aGUgc2tiIGNvbnRhaW5pbmcgdGhlIE9HTQorICogQG9nbV9vZmZzZXQ6IG9mZnNldCBmcm9tIHNrYi0+ZGF0YSB0byBzdGFydCBvZiBvZ20gaGVhZGVyCiAgKiBAb3JpZ19ub2RlOiB0aGUgKGNhY2hlZCkgb3JpZyBub2RlIGZvciB0aGUgb3JpZ2luYXRvciBvZiB0aGlzIE9HTQogICogQGlmX2luY29taW5nOiB0aGUgaW50ZXJmYWNlIHdoZXJlIHRoaXMgcGFja2V0IHdhcyByZWNlaXZlZAogICogQGlmX291dGdvaW5nOiB0aGUgaW50ZXJmYWNlIGZvciB3aGljaCB0aGUgcGFja2V0IHNob3VsZCBiZSBjb25zaWRlcmVkCkBAIC0xNjY0LDcgKzE2NjMsNyBAQAogCQkJb2Zmc2V0ID0gaWZfbnVtICogQkFUQURWX05VTV9XT1JEUzsKIAogCQkJc3Bpbl9sb2NrX2JoKCZvcmlnX25laWdoX25vZGUtPmJhdF9pdi5vZ21fY250X2xvY2spOwotCQkJd29yZCA9ICYob3JpZ19uZWlnaF9ub2RlLT5iYXRfaXYuYmNhc3Rfb3duW29mZnNldF0pOworCQkJd29yZCA9ICZvcmlnX25laWdoX25vZGUtPmJhdF9pdi5iY2FzdF9vd25bb2Zmc2V0XTsKIAkJCWJpdF9wb3MgPSBpZl9pbmNvbWluZ19zZXFubyAtIDI7CiAJCQliaXRfcG9zIC09IG50b2hsKG9nbV9wYWNrZXQtPnNlcW5vKTsKIAkJCWJhdGFkdl9zZXRfYml0KHdvcmQsIGJpdF9wb3MpOwpAQCAtMTkwMiwxMCArMTkwMSwxMCBAQAogICogYmF0YWR2X2l2X29nbV9uZWlnaF9pc19lb2IgLSBjaGVjayBpZiBuZWlnaDEgaXMgZXF1YWxseSBnb29kIG9yIGJldHRlciB0aGFuCiAgKiAgbmVpZ2gyIGZyb20gdGhlIG1ldHJpYyBwcm9zcGVjdGl2ZQogICogQG5laWdoMTogdGhlIGZpcnN0IG5laWdoYm9yIG9iamVjdCBvZiB0aGUgY29tcGFyaXNvbgotICogQGlmX291dGdvaW5nOiBvdXRnb2luZyBpbnRlcmZhY2UgZm9yIHRoZSBmaXJzdCBuZWlnaGJvcgorICogQGlmX291dGdvaW5nMTogb3V0Z29pbmcgaW50ZXJmYWNlIGZvciB0aGUgZmlyc3QgbmVpZ2hib3IKICAqIEBuZWlnaDI6IHRoZSBzZWNvbmQgbmVpZ2hib3Igb2JqZWN0IG9mIHRoZSBjb21wYXJpc29uCiAgKiBAaWZfb3V0Z29pbmcyOiBvdXRnb2luZyBpbnRlcmZhY2UgZm9yIHRoZSBzZWNvbmQgbmVpZ2hib3IKLQorICoKICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWV0cmljIHZpYSBuZWlnaDEgaXMgZXF1YWxseSBnb29kIG9yIGJldHRlciB0aGFuCiAgKiB0aGUgbWV0cmljIHZpYSBuZWlnaDIsIGZhbHNlIG90aGVyd2lzZS4KICAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYml0YXJyYXkuYyBiL25ldC9iYXRtYW4tYWR2L2JpdGFycmF5LmMKaW5kZXggOTU4Njc1MC4uZTNkYTA3YSAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvYml0YXJyYXkuYworKysgYi9uZXQvYmF0bWFuLWFkdi9iaXRhcnJheS5jCkBAIC0yOSw3ICsyOSw2IEBACiAJYml0bWFwX3NoaWZ0X2xlZnQoc2VxX2JpdHMsIHNlcV9iaXRzLCBuLCBCQVRBRFZfVFFfTE9DQUxfV0lORE9XX1NJWkUpOwogfQogCi0KIC8qIHJlY2VpdmUgYW5kIHByb2Nlc3Mgb25lIHBhY2tldCB3aXRoaW4gdGhlIHNlcXVlbmNlIG51bWJlciB3aW5kb3cuCiAgKgogICogcmV0dXJuczoKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JpdGFycmF5LmggYi9uZXQvYmF0bWFuLWFkdi9iaXRhcnJheS5oCmluZGV4IGNjMjQwNzMuLjJhY2FhZmUgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L2JpdGFycmF5LmgKKysrIGIvbmV0L2JhdG1hbi1hZHYvYml0YXJyYXkuaApAQCAtMjksOCArMjksNyBAQAogCWRpZmYgPSBsYXN0X3NlcW5vIC0gY3Vycl9zZXFubzsKIAlpZiAoZGlmZiA8IDAgfHwgZGlmZiA+PSBCQVRBRFZfVFFfTE9DQUxfV0lORE9XX1NJWkUpCiAJCXJldHVybiAwOwotCWVsc2UKLQkJcmV0dXJuIHRlc3RfYml0KGRpZmYsIHNlcV9iaXRzKSAhPSAwOworCXJldHVybiB0ZXN0X2JpdChkaWZmLCBzZXFfYml0cykgIT0gMDsKIH0KIAogLyogdHVybiBjb3JyZXNwb25kaW5nIGJpdCBvbiwgc28gd2UgY2FuIHJlbWVtYmVyIHRoYXQgd2UgZ290IHRoZSBwYWNrZXQgKi8KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jIGIvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMKaW5kZXggYTk1N2M4MS4uYWM0Yjk2ZSAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMKQEAgLTY5LDcgKzY5LDYgQEAKIAlyZXR1cm4gaGFzaCAlIHNpemU7CiB9CiAKLQogLyogY29tcGFyZXMgYWRkcmVzcyBhbmQgdmlkIG9mIHR3byBiYWNrYm9uZSBnd3MgKi8KIHN0YXRpYyBpbnQgYmF0YWR2X2NvbXBhcmVfYmFja2JvbmVfZ3coY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsCiAJCQkJICAgICAgY29uc3Qgdm9pZCAqZGF0YTIpCkBAIC0yNDUsMTQgKzI0NCwxNCBAQAogCQlzcGluX3VubG9ja19iaChsaXN0X2xvY2spOwogCX0KIAotCS8qIGFsbCBjbGFpbXMgZ29uZSwgaW50aWFsaXplIENSQyAqLworCS8qIGFsbCBjbGFpbXMgZ29uZSwgaW5pdGlhbGl6ZSBDUkMgKi8KIAliYWNrYm9uZV9ndy0+Y3JjID0gQkFUQURWX0JMQV9DUkNfSU5JVDsKIH0KIAogLyoqCiAgKiBiYXRhZHZfYmxhX3NlbmRfY2xhaW0gLSBzZW5kcyBhIGNsYWltIGZyYW1lIGFjY29yZGluZyB0byB0aGUgcHJvdmlkZWQgaW5mbwogICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIHNvZnQgaW50ZXJmYWNlIGluZm9ybWF0aW9uCi0gKiBAb3JpZzogdGhlIG1hYyBhZGRyZXNzIHRvIGJlIGFubm91bmNlZCB3aXRoaW4gdGhlIGNsYWltCisgKiBAbWFjOiB0aGUgbWFjIGFkZHJlc3MgdG8gYmUgYW5ub3VuY2VkIHdpdGhpbiB0aGUgY2xhaW0KICAqIEB2aWQ6IHRoZSBWTEFOIElECiAgKiBAY2xhaW10eXBlOiB0aGUgdHlwZSBvZiB0aGUgY2xhaW0gKENMQUlNLCBVTkNMQUlNLCBBTk5PVU5DRSwgLi4uKQogICovCkBAIC0zNjQsNiArMzYzLDcgQEAKICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBzb2Z0IGludGVyZmFjZSBpbmZvcm1hdGlvbgogICogQG9yaWc6IHRoZSBtYWMgYWRkcmVzcyBvZiB0aGUgb3JpZ2luYXRvcgogICogQHZpZDogdGhlIFZMQU4gSUQKKyAqIEBvd25fYmFja2JvbmU6IHNldCBpZiB0aGUgcmVxdWVzdGVkIGJhY2tib25lIGlzIGxvY2FsCiAgKgogICogc2VhcmNoZXMgZm9yIHRoZSBiYWNrYm9uZSBndyBvciBjcmVhdGVzIGEgbmV3IG9uZSBpZiBpdCBjb3VsZCBub3QKICAqIGJlIGZvdW5kLgpAQCAtNDU0LDYgKzQ1NCw3IEBACiAvKioKICAqIGJhdGFkdl9ibGFfYW5zd2VyX3JlcXVlc3QgLSBhbnN3ZXIgYSBibGEgcmVxdWVzdCBieSBzZW5kaW5nIG93biBjbGFpbXMKICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBzb2Z0IGludGVyZmFjZSBpbmZvcm1hdGlvbgorICogQHByaW1hcnlfaWY6IGludGVyZmFjZSB3aGVyZSB0aGUgcmVxdWVzdCBjYW1lIG9uCiAgKiBAdmlkOiB0aGUgdmlkIHdoZXJlIHRoZSByZXF1ZXN0IGNhbWUgb24KICAqCiAgKiBSZXBlYXQgYWxsIG9mIG91ciBvd24gY2xhaW1zLCBhbmQgZmluYWxseSBzZW5kIGFuIEFOTk9VTkNFIGZyYW1lCkBAIC02NjAsNyArNjYxLDYgQEAKIAlpZiAodW5saWtlbHkoIWJhY2tib25lX2d3KSkKIAkJcmV0dXJuIDE7CiAKLQogCS8qIGhhbmRsZSBhcyBBTk5PVU5DRSBmcmFtZSAqLwogCWJhY2tib25lX2d3LT5sYXN0dGltZSA9IGppZmZpZXM7CiAJY3JjID0gbnRvaHMoKigoX19iZTE2ICopKCZhbl9hZGRyWzRdKSkpOwpAQCAtNzc1LDYgKzc3NSw3IEBACiAvKioKICAqIGJhdGFkdl9jaGVja19jbGFpbV9ncm91cAogICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIHNvZnQgaW50ZXJmYWNlIGluZm9ybWF0aW9uCisgKiBAcHJpbWFyeV9pZjogdGhlIHByaW1hcnkgaW50ZXJmYWNlIG9mIHRoaXMgYmF0bWFuIGludGVyZmFjZQogICogQGh3X3NyYzogdGhlIEhhcmR3YXJlIHNvdXJjZSBpbiB0aGUgQVJQIEhlYWRlcgogICogQGh3X2RzdDogdGhlIEhhcmR3YXJlIGRlc3RpbmF0aW9uIGluIHRoZSBBUlAgSGVhZGVyCiAgKiBAZXRoaGRyOiBwb2ludGVyIHRvIHRoZSBFdGhlcm5ldCBoZWFkZXIgb2YgdGhlIGNsYWltIGZyYW1lCkBAIC04NDYsMTAgKzg0NywxMCBAQAogCXJldHVybiAyOwogfQogCi0KIC8qKgogICogYmF0YWR2X2JsYV9wcm9jZXNzX2NsYWltCiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgc29mdCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KKyAqIEBwcmltYXJ5X2lmOiB0aGUgcHJpbWFyeSBoYXJkIGludGVyZmFjZSBvZiB0aGlzIGJhdG1hbiBzb2Z0IGludGVyZmFjZQogICogQHNrYjogdGhlIGZyYW1lIHRvIGJlIGNoZWNrZWQKICAqCiAgKiBDaGVjayBpZiB0aGlzIGlzIGEgY2xhaW0gZnJhbWUsIGFuZCBwcm9jZXNzIGl0IGFjY29yZGluZ2x5LgpAQCAtMTMyNyw3ICsxMzI4LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCS8qIG5vdCBmb3VuZCwgYWRkIGEgbmV3IGVudHJ5IChvdmVyd3JpdGUgdGhlIG9sZGVzdCBlbnRyeSkKLQkgKiBhbmQgYWxsb3cgaXQsIGl0cyB0aGUgZmlyc3Qgb2NjdXJlbmNlLgorCSAqIGFuZCBhbGxvdyBpdCwgaXRzIHRoZSBmaXJzdCBvY2N1cnJlbmNlLgogCSAqLwogCWN1cnIgPSAoYmF0X3ByaXYtPmJsYS5iY2FzdF9kdXBsaXN0X2N1cnIgKyBCQVRBRFZfRFVQTElTVF9TSVpFIC0gMSk7CiAJY3VyciAlPSBCQVRBRFZfRFVQTElTVF9TSVpFOwpAQCAtMTM0Myw4ICsxMzQ0LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KLQogLyoqCiAgKiBiYXRhZHZfYmxhX2lzX2JhY2tib25lX2d3X29yaWcKICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBzb2Z0IGludGVyZmFjZSBpbmZvcm1hdGlvbgpAQCAtMTM4Niw3ICsxMzg1LDYgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLQogLyoqCiAgKiBiYXRhZHZfYmxhX2lzX2JhY2tib25lX2d3CiAgKiBAc2tiOiB0aGUgZnJhbWUgdG8gYmUgY2hlY2tlZApAQCAtMTQ3Niw3ICsxNDc0LDYgQEAKIAlpZiAoIWF0b21pY19yZWFkKCZiYXRfcHJpdi0+YnJpZGdlX2xvb3BfYXZvaWRhbmNlKSkKIAkJZ290byBhbGxvdzsKIAotCiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZiYXRfcHJpdi0+YmxhLm51bV9yZXF1ZXN0cykpKQogCQkvKiBkb24ndCBhbGxvdyBicm9hZGNhc3RzIHdoaWxlIHJlcXVlc3RzIGFyZSBpbiBmbGlnaHQgKi8KIAkJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGV0aGhkci0+aF9kZXN0KSAmJiBpc19iY2FzdCkKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2RlYnVnZnMuYyBiL25ldC9iYXRtYW4tYWR2L2RlYnVnZnMuYwppbmRleCBhMTJlMjVlLi5hNDk3Mjg3NCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvZGVidWdmcy5jCisrKyBiL25ldC9iYXRtYW4tYWR2L2RlYnVnZnMuYwpAQCAtMjMzLDcgKzIzMyw2IEBACiAKIHN0YXRpYyB2b2lkIGJhdGFkdl9kZWJ1Z19sb2dfY2xlYW51cChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KQogewotCXJldHVybjsKIH0KICNlbmRpZgogCkBAIC00MDUsNiArNDA0LDcgQEAKIAkJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwJCQlcCiAJfSwJCQkJCQkJXAogfQorCiBzdGF0aWMgQkFUQURWX0hBUkRJRl9ERUJVR0lORk8ob3JpZ2luYXRvcnMsIFNfSVJVR08sCiAJCQkgICAgICAgYmF0YWR2X29yaWdpbmF0b3JzX2hhcmRpZl9vcGVuKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMgYi9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYwppbmRleCBiNTk4MTExLi5hYWQwMjJkIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYworKysgYi9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYwpAQCAtMTEwMCw2ICsxMTAwLDcgQEAKIAliYXRhZHZfZGF0X3NlbmRfZGF0YShiYXRfcHJpdiwgc2tiLCBpcF9zcmMsIEJBVEFEVl9QX0RBVF9ESFRfUFVUKTsKIAliYXRhZHZfZGF0X3NlbmRfZGF0YShiYXRfcHJpdiwgc2tiLCBpcF9kc3QsIEJBVEFEVl9QX0RBVF9ESFRfUFVUKTsKIH0KKwogLyoqCiAgKiBiYXRhZHZfZGF0X3Nub29wX2luY29taW5nX2FycF9yZXBseSAtIHNub29wIHRoZSBBUlAgcmVwbHkgYW5kIGZpbGwgdGhlIGxvY2FsCiAgKiBEQVQgc3RvcmFnZSBvbmx5CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuaCBiL25ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5oCmluZGV4IGQ3NmUxZDAuLjJmZTA3NjQgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5oCisrKyBiL25ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5oCkBAIC0yNSw5ICsyNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KIAotLyoqCi0gKiBCQVRBRFZfREFUX0FERFJfTUFYIC0gbWF4aW11bSBhZGRyZXNzIHZhbHVlIGluIHRoZSBESFQgc3BhY2UKLSAqLworLyogQkFUQURWX0RBVF9BRERSX01BWCAtIG1heGltdW0gYWRkcmVzcyB2YWx1ZSBpbiB0aGUgREhUIHNwYWNlICovCiAjZGVmaW5lIEJBVEFEVl9EQVRfQUREUl9NQVggKChiYXRhZHZfZGF0X2FkZHJfdCl+KGJhdGFkdl9kYXRfYWRkcl90KTApCiAKIHZvaWQgYmF0YWR2X2RhdF9zdGF0dXNfdXBkYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2ZyYWdtZW50YXRpb24uYyBiL25ldC9iYXRtYW4tYWR2L2ZyYWdtZW50YXRpb24uYwppbmRleCAwMGY5ZTE0Li4zZDFkY2FhIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKICNpbmNsdWRlICJzb2Z0LWludGVyZmFjZS5oIgogCi0KIC8qKgogICogYmF0YWR2X2ZyYWdfY2xlYXJfY2hhaW4gLSBkZWxldGUgZW50cmllcyBpbiB0aGUgZnJhZ21lbnQgYnVmZmVyIGNoYWluCiAgKiBAaGVhZDogaGVhZCBvZiBjaGFpbiB3aXRoIGVudHJpZXMuCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmggYi9uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmgKaW5kZXggNWQ3YTBlNi4uZDg0OGNmNiAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5oCisrKyBiL25ldC9iYXRtYW4tYWR2L2ZyYWdtZW50YXRpb24uaApAQCAtNDEsOCArNDEsNyBAQAogCWlmICghaGxpc3RfZW1wdHkoJmZyYWdzX2VudHJ5LT5oZWFkKSAmJgogCSAgICBiYXRhZHZfaGFzX3RpbWVkX291dChmcmFnc19lbnRyeS0+dGltZXN0YW1wLCBCQVRBRFZfRlJBR19USU1FT1VUKSkKIAkJcmV0dXJuIHRydWU7Ci0JZWxzZQotCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIGZhbHNlOwogfQogCiAjZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX0ZSQUdNRU5UQVRJT05fSF8gKi8KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmMgYi9uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5jCmluZGV4IGUwYmNmOWUuLjI3NjQ5ZTggMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuYwpAQCAtNzc1LDYgKzc3NSw3IEBACiAKIAlyZXR1cm4gcmV0OwogfQorCiAvKioKICAqIGJhdGFkdl9nd19vdXRfb2ZfcmFuZ2UgLSBjaGVjayBpZiB0aGUgZGhjcCByZXF1ZXN0IGRlc3RpbmF0aW9uIGlzIHRoZSBiZXN0IGd3CiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgc29mdCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L21haW4uYyBiL25ldC9iYXRtYW4tYWR2L21haW4uYwppbmRleCBkMTE4M2U4Li4xMmZjNzdiIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9tYWluLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvbWFpbi5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSAibmV0d29yay1jb2RpbmcuaCIKICNpbmNsdWRlICJmcmFnbWVudGF0aW9uLmgiCiAKLQogLyogTGlzdCBtYW5pcHVsYXRpb25zIG9uIGhhcmRpZl9saXN0IGhhdmUgdG8gYmUgcnRubF9sb2NrKCknZWQsCiAgKiBsaXN0IHRyYXZlcnNhbHMganVzdCByY3UtbG9ja2VkCiAgKi8KQEAgLTQwMyw2ICs0MDIsOSBAQAogCQlnb3RvIGVycl9mcmVlOwogCX0KIAorCS8qIHJlc2V0IGNvbnRyb2wgYmxvY2sgdG8gYXZvaWQgbGVmdCBvdmVycyBmcm9tIHByZXZpb3VzIHVzZXJzICovCisJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihzdHJ1Y3QgYmF0YWR2X3NrYl9jYikpOworCiAJLyogYWxsIHJlY2VpdmUgaGFuZGxlcnMgcmV0dXJuIHdoZXRoZXIgdGhleSByZWNlaXZlZCBvciByZXVzZWQKIAkgKiB0aGUgc3VwcGxpZWQgc2tiLiBpZiBub3QsIHdlIGhhdmUgdG8gZnJlZSB0aGUgc2tiLgogCSAqLwpAQCAtNjUxLDcgKzY1Myw3IEBACiAvKioKICAqIGJhdGFkdl90dmx2X2NvbnRhaW5lcl9mcmVlX3JlZiAtIGRlY3JlbWVudCB0aGUgdHZsdiBjb250YWluZXIgcmVmY291bnRlciBhbmQKICAqICBwb3NzaWJseSBmcmVlIGl0Ci0gKiBAdHZsdl9oYW5kbGVyOiB0aGUgdHZsdiBjb250YWluZXIgdG8gZnJlZQorICogQHR2bHY6IHRoZSB0dmx2IGNvbnRhaW5lciB0byBmcmVlCiAgKi8KIHN0YXRpYyB2b2lkIGJhdGFkdl90dmx2X2NvbnRhaW5lcl9mcmVlX3JlZihzdHJ1Y3QgYmF0YWR2X3R2bHZfY29udGFpbmVyICp0dmx2KQogewpAQCAtNzk2LDExICs3OTgsMTEgQEAKIH0KIAogLyoqCi0gKiBiYXRhZHZfdHZsdl9yZWFsbG9jX3BhY2tldF9idWZmIC0gcmVhbGxvY2F0ZSBwYWNrZXQgYnVmZmVyIHRvIGFjY29tb2RhdGUKKyAqIGJhdGFkdl90dmx2X3JlYWxsb2NfcGFja2V0X2J1ZmYgLSByZWFsbG9jYXRlIHBhY2tldCBidWZmZXIgdG8gYWNjb21tb2RhdGUKICAqICByZXF1ZXN0ZWQgcGFja2V0IHNpemUKICAqIEBwYWNrZXRfYnVmZjogcGFja2V0IGJ1ZmZlcgogICogQHBhY2tldF9idWZmX2xlbjogcGFja2V0IGJ1ZmZlciBzaXplCi0gKiBAcGFja2V0X21pbl9sZW46IHJlcXVlc3RlZCBwYWNrZXQgbWluaW11bSBzaXplCisgKiBAbWluX3BhY2tldF9sZW46IHJlcXVlc3RlZCBwYWNrZXQgbWluaW11bSBzaXplCiAgKiBAYWRkaXRpb25hbF9wYWNrZXRfbGVuOiByZXF1ZXN0ZWQgYWRkaXRpb25hbCBwYWNrZXQgc2l6ZSBvbiB0b3Agb2YgbWluaW11bQogICogIHNpemUKICAqCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tYWluLmggYi9uZXQvYmF0bWFuLWFkdi9tYWluLmgKaW5kZXggYTFmY2Q4OC4uNGQyMzE4OCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWFpbi5oCisrKyBiL25ldC9iYXRtYW4tYWR2L21haW4uaApAQCAtMjQsNyArMjQsNyBAQAogI2RlZmluZSBCQVRBRFZfRFJJVkVSX0RFVklDRSAiYmF0bWFuLWFkdiIKIAogI2lmbmRlZiBCQVRBRFZfU09VUkNFX1ZFUlNJT04KLSNkZWZpbmUgQkFUQURWX1NPVVJDRV9WRVJTSU9OICIyMDE0LjQuMCIKKyNkZWZpbmUgQkFUQURWX1NPVVJDRV9WRVJTSU9OICIyMDE1LjAiCiAjZW5kaWYKIAogLyogQi5BLlQuTS5BLk4uIHBhcmFtZXRlcnMgKi8KQEAgLTkyLDkgKzkyLDggQEAKIC8qIG51bWJlcnMgb2Ygb3JpZ2luYXRvciB0byBjb250YWN0IGZvciBhbnkgUFVUL0dFVCBESFQgb3BlcmF0aW9uICovCiAjZGVmaW5lIEJBVEFEVl9EQVRfQ0FORElEQVRFU19OVU0gMwogCi0vKioKLSAqIEJBVEFEVl9UUV9TSU1JTEFSSVRZX1RIUkVTSE9MRCAtIFRRIHBvaW50cyB0aGF0IGEgc2Vjb25kYXJ5IG1ldHJpYyBjYW4gZGlmZmVyCi0gKiAgYXQgbW9zdCBmcm9tIHRoZSBwcmltYXJ5IG9uZSBpbiBvcmRlciB0byBiZSBzdGlsbCBjb25zaWRlcmVkIGFjY2VwdGFibGUKKy8qIEJBVEFEVl9UUV9TSU1JTEFSSVRZX1RIUkVTSE9MRCAtIFRRIHBvaW50cyB0aGF0IGEgc2Vjb25kYXJ5IG1ldHJpYyBjYW4gZGlmZmVyCisgKiBhdCBtb3N0IGZyb20gdGhlIHByaW1hcnkgb25lIGluIG9yZGVyIHRvIGJlIHN0aWxsIGNvbnNpZGVyZWQgYWNjZXB0YWJsZQogICovCiAjZGVmaW5lIEJBVEFEVl9UUV9TSU1JTEFSSVRZX1RIUkVTSE9MRCA1MAogCkBAIC0zMTMsMTAgKzMxMiwxMCBAQAogICogIC0gd2hlbiBhZGRpbmcgMTI4IC0gaXQgaXMgbmVpdGhlciBhIHByZWRlY2Vzc29yIG5vciBhIHN1Y2Nlc3NvciwKICAqICAtIGFmdGVyIGFkZGluZyBtb3JlIHRoYW4gMTI3IHRvIHRoZSBzdGFydGluZyB2YWx1ZSAtIGl0IGlzIGEgc3VjY2Vzc29yCiAgKi8KLSNkZWZpbmUgYmF0YWR2X3NlcV9iZWZvcmUoeCwgeSkgKHt0eXBlb2YoeCkgX2QxID0gKHgpOyBcCi0JCQkJIHR5cGVvZih5KSBfZDIgPSAoeSk7IFwKLQkJCQkgdHlwZW9mKHgpIF9kdW1teSA9IChfZDEgLSBfZDIpOyBcCi0JCQkJICh2b2lkKSAoJl9kMSA9PSAmX2QyKTsgXAorI2RlZmluZSBiYXRhZHZfc2VxX2JlZm9yZSh4LCB5KSAoe3R5cGVvZih4KV9kMSA9ICh4KTsgXAorCQkJCSB0eXBlb2YoeSlfZDIgPSAoeSk7IFwKKwkJCQkgdHlwZW9mKHgpX2R1bW15ID0gKF9kMSAtIF9kMik7IFwKKwkJCQkgKHZvaWQpKCZfZDEgPT0gJl9kMik7IFwKIAkJCQkgX2R1bW15ID4gYmF0YWR2X3NtYWxsZXN0X3NpZ25lZF9pbnQoX2R1bW15KTsgfSkKICNkZWZpbmUgYmF0YWR2X3NlcV9hZnRlcih4LCB5KSBiYXRhZHZfc2VxX2JlZm9yZSh5LCB4KQogCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaCBiL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oCmluZGV4IDczYjVkNDUuLjNhNDRlYmQgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oCisrKyBiL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oCkBAIC01MCw3ICs1MCw2IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBiYXRhZHZfbWNhc3RfbWxhX3VwZGF0ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KQogewotCXJldHVybjsKIH0KIAogc3RhdGljIGlubGluZSBlbnVtIGJhdGFkdl9mb3J3X21vZGUKQEAgLTY3LDEyICs2NiwxMCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYmF0YWR2X21jYXN0X2ZyZWUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdikKIHsKLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBiYXRhZHZfbWNhc3RfcHVyZ2Vfb3JpZyhzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlKQogewotCXJldHVybjsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19CQVRNQU5fQURWX01DQVNUICovCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9uZXR3b3JrLWNvZGluZy5jIGIvbmV0L2JhdG1hbi1hZHYvbmV0d29yay1jb2RpbmcuYwppbmRleCBmYWI0N2YxLi4xMjdjYzRkIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9uZXR3b3JrLWNvZGluZy5jCisrKyBiL25ldC9iYXRtYW4tYWR2L25ldHdvcmstY29kaW5nLmMKQEAgLTEyMTIsOCArMTIxMiw3IEBACiB7CiAJaWYgKEJBVEFEVl9TS0JfQ0Ioc2tiKS0+ZGVjb2RlZCAmJiAhYmF0YWR2X2NvbXBhcmVfZXRoKGRzdCwgc3JjKSkKIAkJcmV0dXJuIGZhbHNlOwotCWVsc2UKLQkJcmV0dXJuIHRydWU7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jIGIvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jCmluZGV4IGJlYTgxOTguLjkwZTgwNWEgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYworKysgYi9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMKQEAgLTc5Nyw3ICs3OTcsNiBAQAogCXJldHVybiBpZmluZm9fcHVyZ2VkOwogfQogCi0KIC8qKgogICogYmF0YWR2X3B1cmdlX29yaWdfbmVpZ2hib3JzIC0gcHVyZ2VzIG5laWdoYm9ycyBmcm9tIG9yaWdpbmF0b3IKICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBzb2Z0IGludGVyZmFjZSBpbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5oIGIvbmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5oCmluZGV4IGRiM2E5ZWQuLmFhNGE0MzYgMTAwNjQ0Ci0tLSBhL25ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuaAorKysgYi9uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmgKQEAgLTcwLDcgKzcwLDYgQEAKIAkJCSAgdW5zaWduZWQgc2hvcnQgdmlkKTsKIHZvaWQgYmF0YWR2X29yaWdfbm9kZV92bGFuX2ZyZWVfcmVmKHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlX3ZsYW4gKm9yaWdfdmxhbik7CiAKLQogLyogaGFzaGZ1bmN0aW9uIHRvIGNob29zZSBhbiBlbnRyeSBpbiBhIGhhc2ggdGFibGUgb2YgZ2l2ZW4gc2l6ZQogICogaGFzaCBhbGdvcml0aG0gZnJvbSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hhc2hfdGFibGUKICAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvcGFja2V0LmggYi9uZXQvYmF0bWFuLWFkdi9wYWNrZXQuaAppbmRleCAzNGUwOTZkLi5iODFmYmJmIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9wYWNrZXQuaAorKysgYi9uZXQvYmF0bWFuLWFkdi9wYWNrZXQuaApAQCAtMTk4LDYgKzE5OCw3IEBACiAJdWludDhfdCB0eXBlOwkJLyogYmxhX2NsYWltZnJhbWUgKi8KIAlfX2JlMTYgZ3JvdXA7CQkvKiBncm91cCBpZCAqLwogfTsKKwogI3ByYWdtYSBwYWNrKCkKIAogLyoqCkBAIC0zNzYsNyArMzc3LDcgQEAKIAl1aW50OF90IHJlc2VydmVkOjQ7CiAJdWludDhfdCBubzo0OwogI2Vsc2UKLSNlcnJvciAidW5rbm93biBiaXRmaWVsZCBlbmRpYW5lc3MiCisjZXJyb3IgInVua25vd24gYml0ZmllbGQgZW5kaWFubmVzcyIKICNlbmRpZgogCXVpbnQ4X3QgZGVzdFtFVEhfQUxFTl07CiAJdWludDhfdCBvcmlnW0VUSF9BTEVOXTsKQEAgLTQ1Miw3ICs0NTMsNyBAQAogICogQHNyYzogYWRkcmVzcyBvZiB0aGUgc291cmNlCiAgKiBAZHN0OiBhZGRyZXNzIG9mIHRoZSBkZXN0aW5hdGlvbgogICogQHR2bHZfbGVuOiBsZW5ndGggb2YgdHZsdiBkYXRhIGZvbGxvd2luZyB0aGUgdW5pY2FzdCB0dmx2IGhlYWRlcgotICogQGFsaWduOiAyIGJ5dGVzIHRvIGFsaWduIHRoZSBoZWFkZXIgdG8gYSA0IGJ5dGUgYm91bmRyeQorICogQGFsaWduOiAyIGJ5dGVzIHRvIGFsaWduIHRoZSBoZWFkZXIgdG8gYSA0IGJ5dGUgYm91bmRhcnkKICAqLwogc3RydWN0IGJhdGFkdl91bmljYXN0X3R2bHZfcGFja2V0IHsKIAl1aW50OF90ICBwYWNrZXRfdHlwZTsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYyBiL25ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYwppbmRleCA2NjQ4ZjMyLi5kYTgzOTgyIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvcm91dGluZy5jCkBAIC0yOTIsNyArMjkyLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KIGludCBiYXRhZHZfcmVjdl9pY21wX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcmVjdl9pZikKIHsKQEAgLTQ1Nyw3ICs0NTYsNyBAQAogCSAqIHRoZSBsYXN0IGNob3NlbiBib25kaW5nIGNhbmRpZGF0ZSAobmV4dF9jYW5kaWRhdGUpLiBJZiBubyBzdWNoCiAJICogcm91dGVyIGlzIGZvdW5kLCB1c2UgdGhlIGZpcnN0IGNhbmRpZGF0ZSBmb3VuZCAodGhlIHByZXZpb3VzbHkKIAkgKiBjaG9zZW4gYm9uZGluZyBjYW5kaWRhdGUgbWlnaHQgaGF2ZSBiZWVuIHRoZSBsYXN0IG9uZSBpbiB0aGUgbGlzdCkuCi0JICogSWYgdGhpcyBjYW4ndCBiZSBmb3VuZCBlaXRoZXIsIHJldHVybiB0aGUgcHJldmlvdXNseSBjaG9vc2VuCisJICogSWYgdGhpcyBjYW4ndCBiZSBmb3VuZCBlaXRoZXIsIHJldHVybiB0aGUgcHJldmlvdXNseSBjaG9zZW4KIAkgKiByb3V0ZXIgLSBvYnZpb3VzbHkgdGhlcmUgYXJlIG5vIG90aGVyIGNhbmRpZGF0ZXMuCiAJICovCiAJcmN1X3JlYWRfbG9jaygpOwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmMKaW5kZXggNTQ2Nzk1NS4uNWVjMzFkNyAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuYworKysgYi9uZXQvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmgiCiAjaW5jbHVkZSAibmV0d29yay1jb2RpbmcuaCIKIAotCiBzdGF0aWMgaW50IGJhdGFkdl9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpOwogc3RhdGljIHZvaWQgYmF0YWR2X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbyk7CmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9zeXNmcy5jIGIvbmV0L2JhdG1hbi1hZHYvc3lzZnMuYwppbmRleCBmNDBjYjA0Li5hNzVkYzEyIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9zeXNmcy5jCisrKyBiL25ldC9iYXRtYW4tYWR2L3N5c2ZzLmMKQEAgLTE1MSw3ICsxNTEsNiBAQAogCXN0YXRpYyBCQVRBRFZfQVRUUihfbmFtZSwgX21vZGUsIGJhdGFkdl9zaG93XyMjX25hbWUsCQlcCiAJCQkgICBiYXRhZHZfc3RvcmVfIyNfbmFtZSkKIAotCiAjZGVmaW5lIEJBVEFEVl9BVFRSX1NJRl9TVE9SRV9VSU5UKF9uYW1lLCBfbWluLCBfbWF4LCBfcG9zdF9mdW5jKQlcCiBzc2l6ZV90IGJhdGFkdl9zdG9yZV8jI19uYW1lKHN0cnVjdCBrb2JqZWN0ICprb2JqLAkJCVwKIAkJCSAgICAgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmZiwJXApkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYyBiL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMKaW5kZXggNWY1OWU3Zi4uMDdiMjYzYSAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYworKysgYi9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jCkBAIC0xNzgwLDcgKzE3ODAsNiBAQAogCQliYXRhZHZfdHRfZ2xvYmFsX2RlbF9yb2FtaW5nKGJhdF9wcml2LCB0dF9nbG9iYWxfZW50cnksCiAJCQkJCSAgICAgb3JpZ19ub2RlLCBtZXNzYWdlKTsKIAotCiBvdXQ6CiAJaWYgKHR0X2dsb2JhbF9lbnRyeSkKIAkJYmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9mcmVlX3JlZih0dF9nbG9iYWxfZW50cnkpOwpAQCAtMjc2OSw5ICsyNzY4LDggQEAKIHsKIAlpZiAoYmF0YWR2X2lzX215X21hYyhiYXRfcHJpdiwgcmVxX2RzdCkpCiAJCXJldHVybiBiYXRhZHZfc2VuZF9teV90dF9yZXNwb25zZShiYXRfcHJpdiwgdHRfZGF0YSwgcmVxX3NyYyk7Ci0JZWxzZQotCQlyZXR1cm4gYmF0YWR2X3NlbmRfb3RoZXJfdHRfcmVzcG9uc2UoYmF0X3ByaXYsIHR0X2RhdGEsCi0JCQkJCQkgICAgIHJlcV9zcmMsIHJlcV9kc3QpOworCXJldHVybiBiYXRhZHZfc2VuZF9vdGhlcl90dF9yZXNwb25zZShiYXRfcHJpdiwgdHRfZGF0YSwgcmVxX3NyYywKKwkJCQkJICAgICByZXFfZHN0KTsKIH0KIAogc3RhdGljIHZvaWQgX2JhdGFkdl90dF91cGRhdGVfY2hhbmdlcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LApAQCAtMjg1NCw3ICsyODUyLDcgQEAKIC8qKgogICogYmF0YWR2X2lzX215X2NsaWVudCAtIGNoZWNrIGlmIGEgY2xpZW50IGlzIHNlcnZlZCBieSB0aGUgbG9jYWwgbm9kZQogICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIHNvZnQgaW50ZXJmYWNlIGluZm9ybWF0aW9uCi0gKiBAYWRkcjogdGhlIG1hYyBhZHJlc3Mgb2YgdGhlIGNsaWVudCB0byBjaGVjaworICogQGFkZHI6IHRoZSBtYWMgYWRkcmVzcyBvZiB0aGUgY2xpZW50IHRvIGNoZWNrCiAgKiBAdmlkOiBWTEFOIGlkZW50aWZpZXIKICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNsaWVudCBpcyBzZXJ2ZWQgYnkgdGhpcyBub2RlLCBmYWxzZSBvdGhlcndpc2UuCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oIGIvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaAppbmRleCA4ODU0YzA1Li45Mzk4YzNmIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oCisrKyBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmgKQEAgLTE5OSw3ICsxOTksNiBAQAogLyoqCiAgKiBzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAtIHN0cnVjdHVyZSBmb3Igb3JpZ19saXN0IG1haW50YWluaW5nIG5vZGVzIG9mIG1lc2gKICAqIEBvcmlnOiBvcmlnaW5hdG9yIGV0aGVybmV0IGFkZHJlc3MKLSAqIEBwcmltYXJ5X2FkZHI6IGhvc3RzIHByaW1hcnkgaW50ZXJmYWNlIGFkZHJlc3MKICAqIEBpZmluZm9fbGlzdDogbGlzdCBmb3Igcm91dGVycyBwZXIgb3V0Z29pbmcgaW50ZXJmYWNlCiAgKiBAbGFzdF9ib25kaW5nX2NhbmRpZGF0ZTogcG9pbnRlciB0byBsYXN0IGlmaW5mbyBvZiBsYXN0IHVzZWQgcm91dGVyCiAgKiBAYmF0YWR2X2RhdF9hZGRyX3Q6ICBhZGRyZXNzIG9mIHRoZSBvcmlnIG5vZGUgaW4gdGhlIGRpc3RyaWJ1dGVkIGhhc2gKQEAgLTI0NCw3ICsyNDMsNiBAQAogICovCiBzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSB7CiAJdWludDhfdCBvcmlnW0VUSF9BTEVOXTsKLQl1aW50OF90IHByaW1hcnlfYWRkcltFVEhfQUxFTl07CiAJc3RydWN0IGhsaXN0X2hlYWQgaWZpbmZvX2xpc3Q7CiAJc3RydWN0IGJhdGFkdl9vcmlnX2lmaW5mbyAqbGFzdF9ib25kaW5nX2NhbmRpZGF0ZTsKICNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9EQVQKQEAgLTk3MCw3ICs5NjgsNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlIC0gc3RydWN0dXJlIGZvciB0dCBjaGFuZ2VzIG9jY3VyZWQKKyAqIHN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgLSBzdHJ1Y3R1cmUgZm9yIHR0IGNoYW5nZXMgb2NjdXJyZWQKICAqIEBsaXN0OiBsaXN0IG5vZGUgZm9yIGJhdGFkdl9wcml2X3R0OjpjaGFuZ2VzX2xpc3QKICAqIEBjaGFuZ2U6IGhvbGRzIHRoZSBhY3R1YWwgdHJhbnNsYXRpb24gdGFibGUgZGlmZiBkYXRhCiAgKi8KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvNmxvd3Bhbi5jIGIvbmV0L2JsdWV0b290aC82bG93cGFuLmMKaW5kZXggYzk4OTI1My4uMTc0MmI4NCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC82bG93cGFuLmMKKysrIGIvbmV0L2JsdWV0b290aC82bG93cGFuLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2RlZmluZSBWRVJTSU9OICIwLjEiCiAKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpsb3dwYW5fcHNtX2RlYnVnZnM7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG93cGFuX2VuYWJsZV9kZWJ1Z2ZzOwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvd3Bhbl9jb250cm9sX2RlYnVnZnM7CiAKICNkZWZpbmUgSUZBQ0VfTkFNRV9URU1QTEFURSAiYnQlZCIKQEAgLTU1LDExICs1NSw3IEBACiBzdGF0aWMgTElTVF9IRUFEKGJ0XzZsb3dwYW5fZGV2aWNlcyk7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRldmljZXNfbG9jayk7CiAKLS8qIElmIHBzbSBpcyBzZXQgdG8gMCAoZGVmYXVsdCB2YWx1ZSksIHRoZW4gNmxvd3BhbiBpcyBkaXNhYmxlZC4KLSAqIE90aGVyIHZhbHVlcyBhcmUgdXNlZCB0byBpbmRpY2F0ZSBhIFByb3RvY29sIFNlcnZpY2UgTXVsdGlwbGV4ZXIKLSAqIHZhbHVlIGZvciA2bG93cGFuLgotICovCi1zdGF0aWMgdTE2IHBzbV82bG93cGFuOworc3RhdGljIGJvb2wgZW5hYmxlXzZsb3dwYW47CiAKIC8qIFdlIGFyZSBsaXN0ZW5pbmcgaW5jb21pbmcgY29ubmVjdGlvbnMgdmlhIHRoaXMgY2hhbm5lbAogICovCkBAIC03NjEsNyArNzU3LDcgQEAKIAlpZiAoaGNvbi0+dHlwZSAhPSBMRV9MSU5LKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoIXBzbV82bG93cGFuKQorCWlmICghZW5hYmxlXzZsb3dwYW4pCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiB0cnVlOwpAQCAtMTA4NSw3ICsxMDgxLDcgQEAKIAlpZiAoIXBjaGFuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWVyciA9IGwyY2FwX2NoYW5fY29ubmVjdChwY2hhbiwgY3B1X3RvX2xlMTYocHNtXzZsb3dwYW4pLCAwLAorCWVyciA9IGwyY2FwX2NoYW5fY29ubmVjdChwY2hhbiwgY3B1X3RvX2xlMTYoTDJDQVBfUFNNX0lQU1ApLCAwLAogCQkJCSBhZGRyLCBkc3RfdHlwZSk7CiAKIAlCVF9EQkcoImNoYW4gJXAgZXJyICVkIiwgcGNoYW4sIGVycik7CkBAIC0xMTE4LDcgKzExMTQsNyBAQAogCXN0cnVjdCBsMmNhcF9jaGFuICpwY2hhbjsKIAlpbnQgZXJyOwogCi0JaWYgKHBzbV82bG93cGFuID09IDApCisJaWYgKCFlbmFibGVfNmxvd3BhbikKIAkJcmV0dXJuIE5VTEw7CiAKIAlwY2hhbiA9IGNoYW5fZ2V0KCk7CkBAIC0xMTMwLDEwICsxMTI2LDkgQEAKIAogCWF0b21pY19zZXQoJnBjaGFuLT5uZXN0aW5nLCBMMkNBUF9ORVNUSU5HX1BBUkVOVCk7CiAKLQlCVF9EQkcoInBzbSAweCUwNHggY2hhbiAlcCBzcmMgdHlwZSAlZCIsIHBzbV82bG93cGFuLCBwY2hhbiwKLQkgICAgICAgcGNoYW4tPnNyY190eXBlKTsKKwlCVF9EQkcoImNoYW4gJXAgc3JjIHR5cGUgJWQiLCBwY2hhbiwgcGNoYW4tPnNyY190eXBlKTsKIAotCWVyciA9IGwyY2FwX2FkZF9wc20ocGNoYW4sIGFkZHIsIGNwdV90b19sZTE2KHBzbV82bG93cGFuKSk7CisJZXJyID0gbDJjYXBfYWRkX3BzbShwY2hhbiwgYWRkciwgY3B1X3RvX2xlMTYoTDJDQVBfUFNNX0lQU1ApKTsKIAlpZiAoZXJyKSB7CiAJCWwyY2FwX2NoYW5fcHV0KHBjaGFuKTsKIAkJQlRfRVJSKCJwc20gY2Fubm90IGJlIGFkZGVkIGVyciAlZCIsIGVycik7CkBAIC0xMjE5LDIyICsxMjE0LDIzIEBACiAJc3Bpbl91bmxvY2soJmRldmljZXNfbG9jayk7CiB9CiAKLXN0cnVjdCBzZXRfcHNtIHsKK3N0cnVjdCBzZXRfZW5hYmxlIHsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKLQl1MTYgcHNtOworCWJvb2wgZmxhZzsKIH07CiAKLXN0YXRpYyB2b2lkIGRvX3BzbV9zZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorc3RhdGljIHZvaWQgZG9fZW5hYmxlX3NldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IHNldF9wc20gKnNldF9wc20gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNldF9wc20sIHdvcmspOworCXN0cnVjdCBzZXRfZW5hYmxlICpzZXRfZW5hYmxlID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJCQkgICAgIHN0cnVjdCBzZXRfZW5hYmxlLCB3b3JrKTsKIAotCWlmIChzZXRfcHNtLT5wc20gPT0gMCB8fCBwc21fNmxvd3BhbiAhPSBzZXRfcHNtLT5wc20pCisJaWYgKCFzZXRfZW5hYmxlLT5mbGFnIHx8IGVuYWJsZV82bG93cGFuICE9IHNldF9lbmFibGUtPmZsYWcpCiAJCS8qIERpc2Nvbm5lY3QgZXhpc3RpbmcgY29ubmVjdGlvbnMgaWYgNmxvd3BhbiBpcwotCQkgKiBkaXNhYmxlZCAocHNtID0gMCksIG9yIGlmIHBzbSBjaGFuZ2VzLgorCQkgKiBkaXNhYmxlZAogCQkgKi8KIAkJZGlzY29ubmVjdF9hbGxfcGVlcnMoKTsKIAotCXBzbV82bG93cGFuID0gc2V0X3BzbS0+cHNtOworCWVuYWJsZV82bG93cGFuID0gc2V0X2VuYWJsZS0+ZmxhZzsKIAogCWlmIChsaXN0ZW5fY2hhbikgewogCQlsMmNhcF9jaGFuX2Nsb3NlKGxpc3Rlbl9jaGFuLCAwKTsKQEAgLTEyNDMsMzMgKzEyMzksMzMgQEAKIAogCWxpc3Rlbl9jaGFuID0gYnRfNmxvd3Bhbl9saXN0ZW4oKTsKIAotCWtmcmVlKHNldF9wc20pOworCWtmcmVlKHNldF9lbmFibGUpOwogfQogCi1zdGF0aWMgaW50IGxvd3Bhbl9wc21fc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCitzdGF0aWMgaW50IGxvd3Bhbl9lbmFibGVfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCiB7Ci0Jc3RydWN0IHNldF9wc20gKnNldF9wc207CisJc3RydWN0IHNldF9lbmFibGUgKnNldF9lbmFibGU7CiAKLQlzZXRfcHNtID0ga3phbGxvYyhzaXplb2YoKnNldF9wc20pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNldF9wc20pCisJc2V0X2VuYWJsZSA9IGt6YWxsb2Moc2l6ZW9mKCpzZXRfZW5hYmxlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZXRfZW5hYmxlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXNldF9wc20tPnBzbSA9IHZhbDsKLQlJTklUX1dPUksoJnNldF9wc20tPndvcmssIGRvX3BzbV9zZXQpOworCXNldF9lbmFibGUtPmZsYWcgPSAhIXZhbDsKKwlJTklUX1dPUksoJnNldF9lbmFibGUtPndvcmssIGRvX2VuYWJsZV9zZXQpOwogCi0Jc2NoZWR1bGVfd29yaygmc2V0X3BzbS0+d29yayk7CisJc2NoZWR1bGVfd29yaygmc2V0X2VuYWJsZS0+d29yayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBsb3dwYW5fcHNtX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3N0YXRpYyBpbnQgbG93cGFuX2VuYWJsZV9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCiB7Ci0JKnZhbCA9IHBzbV82bG93cGFuOworCSp2YWwgPSBlbmFibGVfNmxvd3BhbjsKIAlyZXR1cm4gMDsKIH0KIAotREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUobG93cGFuX3BzbV9mb3BzLCBsb3dwYW5fcHNtX2dldCwKLQkJCWxvd3Bhbl9wc21fc2V0LCAiJWxsdVxuIik7CitERUZJTkVfU0lNUExFX0FUVFJJQlVURShsb3dwYW5fZW5hYmxlX2ZvcHMsIGxvd3Bhbl9lbmFibGVfZ2V0LAorCQkJbG93cGFuX2VuYWJsZV9zZXQsICIlbGx1XG4iKTsKIAogc3RhdGljIHNzaXplX3QgbG93cGFuX2NvbnRyb2xfd3JpdGUoc3RydWN0IGZpbGUgKmZwLAogCQkJCSAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWZmZXIsCkBAIC0xNDM5LDkgKzE0MzUsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBidF82bG93cGFuX2luaXQodm9pZCkKIHsKLQlsb3dwYW5fcHNtX2RlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCI2bG93cGFuX3BzbSIsIDA2NDQsCi0JCQkJCQkgYnRfZGVidWdmcywgTlVMTCwKLQkJCQkJCSAmbG93cGFuX3BzbV9mb3BzKTsKKwlsb3dwYW5fZW5hYmxlX2RlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCI2bG93cGFuX2VuYWJsZSIsIDA2NDQsCisJCQkJCQkgICAgYnRfZGVidWdmcywgTlVMTCwKKwkJCQkJCSAgICAmbG93cGFuX2VuYWJsZV9mb3BzKTsKIAlsb3dwYW5fY29udHJvbF9kZWJ1Z2ZzID0gZGVidWdmc19jcmVhdGVfZmlsZSgiNmxvd3Bhbl9jb250cm9sIiwgMDY0NCwKIAkJCQkJCSAgICAgYnRfZGVidWdmcywgTlVMTCwKIAkJCQkJCSAgICAgJmxvd3Bhbl9jb250cm9sX2ZvcHMpOwpAQCAtMTQ1MSw3ICsxNDQ3LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGJ0XzZsb3dwYW5fZXhpdCh2b2lkKQogewotCWRlYnVnZnNfcmVtb3ZlKGxvd3Bhbl9wc21fZGVidWdmcyk7CisJZGVidWdmc19yZW1vdmUobG93cGFuX2VuYWJsZV9kZWJ1Z2ZzKTsKIAlkZWJ1Z2ZzX3JlbW92ZShsb3dwYW5fY29udHJvbF9kZWJ1Z2ZzKTsKIAogCWlmIChsaXN0ZW5fY2hhbikgewpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9LY29uZmlnIGIvbmV0L2JsdWV0b290aC9LY29uZmlnCmluZGV4IDI5YmNhZmMuLjdkZTc0NjMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvS2NvbmZpZworKysgYi9uZXQvYmx1ZXRvb3RoL0tjb25maWcKQEAgLTY0LDQgKzY0LDMxIEBACiAJaGVscAogCSAgSVB2NiBjb21wcmVzc2lvbiBvdmVyIEJsdWV0b290aCBMb3cgRW5lcmd5LgogCitjb25maWcgQlRfU0VMRlRFU1QKKwlib29sICJCbHVldG9vdGggc2VsZiB0ZXN0aW5nIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBCVCAmJiBERUJVR19LRVJORUwKKwloZWxwCisJICBSdW4gc2VsZiB0ZXN0cyB3aGVuIGluaXRpYWxpemluZyB0aGUgQmx1ZXRvb3RoIHN1YnN5c3RlbS4gIFRoaXMKKwkgIGlzIGEgZGV2ZWxvcGVyIG9wdGlvbiBhbmQgY2FuIGNhdXNlIHNpZ25pZmljYW50IGRlbGF5IHdoZW4gYm9vdGluZworCSAgdGhlIHN5c3RlbS4KKworCSAgV2hlbiB0aGUgQmx1ZXRvb3RoIHN1YnN5c3RlbSBpcyBidWlsdCBhcyBtb2R1bGUsIHRoZW4gdGhlIHRlc3QKKwkgIGNhc2VzIGFyZSBydW4gZmlyc3QgdGhpbmcgYXQgbW9kdWxlIGxvYWQgdGltZS4gIFdoZW4gdGhlIEJsdWV0b290aAorCSAgc3Vic3lzdGVtIGlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBpbWFnZSwgdGhlbiB0aGUgdGVzdCBjYXNlcworCSAgYXJlIHJ1biBsYXRlIGluIHRoZSBpbml0Y2FsbCBoaWVyYXJjaHkuCisKK2NvbmZpZyBCVF9TRUxGVEVTVF9FQ0RICisJYm9vbCAiRUNESCB0ZXN0IGNhc2VzIgorCWRlcGVuZHMgb24gQlRfTEUgJiYgQlRfU0VMRlRFU1QKKwloZWxwCisJICBSdW4gdGVzdCBjYXNlcyBmb3IgRUNESCBjcnlwdG9ncmFwaGljIGZ1bmN0aW9uYWxpdHkgdXNlZCBieSB0aGUKKwkgIEJsdWV0b290aCBMb3cgRW5lcmd5IFNlY3VyZSBDb25uZWN0aW9ucyBmZWF0dXJlLgorCitjb25maWcgQlRfU0VMRlRFU1RfU01QCisJYm9vbCAiU01QIHRlc3QgY2FzZXMiCisJZGVwZW5kcyBvbiBCVF9MRSAmJiBCVF9TRUxGVEVTVAorCWhlbHAKKwkgIFJ1biB0ZXN0IGNhc2VzIGZvciBTTVAgY3J5cHRvZ3JhcGhpYyBmdW5jdGlvbmFsaXR5LCBpbmNsdWRpbmcgYm90aAorCSAgbGVnYWN5IFNNUCBhcyB3ZWxsIGFzIHRoZSBTZWN1cmUgQ29ubmVjdGlvbnMgZmVhdHVyZXMuCisKIHNvdXJjZSAiZHJpdmVycy9ibHVldG9vdGgvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvTWFrZWZpbGUgYi9uZXQvYmx1ZXRvb3RoL01ha2VmaWxlCmluZGV4IGE1NDMyYTYuLjhlOTZlMzAgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvTWFrZWZpbGUKKysrIGIvbmV0L2JsdWV0b290aC9NYWtlZmlsZQpAQCAtMTMsNiArMTMsOCBAQAogCiBibHVldG9vdGgteSA6PSBhZl9ibHVldG9vdGgubyBoY2lfY29yZS5vIGhjaV9jb25uLm8gaGNpX2V2ZW50Lm8gbWdtdC5vIFwKIAloY2lfc29jay5vIGhjaV9zeXNmcy5vIGwyY2FwX2NvcmUubyBsMmNhcF9zb2NrLm8gc21wLm8gc2NvLm8gbGliLm8gXAotCWEybXAubyBhbXAubyBlY2MubworCWEybXAubyBhbXAubyBlY2MubyBoY2lfcmVxdWVzdC5vIGhjaV9kZWJ1Z2ZzLm8KKworYmx1ZXRvb3RoLSQoQ09ORklHX0JUX1NFTEZURVNUKSArPSBzZWxmdGVzdC5vCiAKIHN1YmRpci1jY2ZsYWdzLXkgKz0gLURfX0NIRUNLX0VORElBTl9fCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwppbmRleCAwMTJlM2IwLi5jZTIyZTBjIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCisrKyBiL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAorI2luY2x1ZGUgInNlbGZ0ZXN0LmgiCisKICNkZWZpbmUgVkVSU0lPTiAiMi4yMCIKIAogLyogQmx1ZXRvb3RoIHNvY2tldHMgKi8KQEAgLTcxNiw2ICs3MTgsMTAgQEAKIAogCUJUX0lORk8oIkNvcmUgdmVyICVzIiwgVkVSU0lPTik7CiAKKwllcnIgPSBidF9zZWxmdGVzdCgpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJYnRfZGVidWdmcyA9IGRlYnVnZnNfY3JlYXRlX2RpcigiYmx1ZXRvb3RoIiwgTlVMTCk7CiAKIAllcnIgPSBidF9zeXNmc19pbml0KCk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYwppbmRleCBjZTgyNzIyZC4uMDVmNTdlNCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCkBAIC01MTEsMTMgKzUxMSwxMiBAQAogCiBzdGF0aWMgc3RydWN0IGRldmljZSAqYm5lcF9nZXRfZGV2aWNlKHN0cnVjdCBibmVwX3Nlc3Npb24gKnNlc3Npb24pCiB7Ci0Jc3RydWN0IGhjaV9jb25uICpjb25uOworCXN0cnVjdCBsMmNhcF9jb25uICpjb25uID0gbDJjYXBfcGkoc2Vzc2lvbi0+c29jay0+c2spLT5jaGFuLT5jb25uOwogCi0JY29ubiA9IGwyY2FwX3BpKHNlc3Npb24tPnNvY2stPnNrKS0+Y2hhbi0+Y29ubi0+aGNvbjsKLQlpZiAoIWNvbm4pCisJaWYgKCFjb25uIHx8ICFjb25uLT5oY29uKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiAmY29ubi0+ZGV2OworCXJldHVybiAmY29ubi0+aGNvbi0+ZGV2OwogfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV90eXBlIGJuZXBfdHlwZSA9IHsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvY210cC9jYXBpLmMgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY2FwaS5jCmluZGV4IDFjYThhODcuLjc1YmQyYzQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvY210cC9jYXBpLmMKKysrIGIvbmV0L2JsdWV0b290aC9jbXRwL2NhcGkuYwpAQCAtMjUzLDggKzI1Myw2IEBACiAJCQlpZiAoc2tiLT5sZW4gPCBDQVBJX01TR19CQVNFTEVOICsgMTUpCiAJCQkJYnJlYWs7CiAKLQkJCWNvbnRyb2xsZXIgPSBDQVBJTVNHX1UzMihza2ItPmRhdGEsIENBUElfTVNHX0JBU0VMRU4gKyAxMCk7Ci0KIAkJCWlmICghaW5mbyAmJiBjdHJsKSB7CiAJCQkJaW50IGxlbiA9IG1pbl90KHVpbnQsIENBUElfTUFOVUZBQ1RVUkVSX0xFTiwKIAkJCQkJCXNrYi0+ZGF0YVtDQVBJX01TR19CQVNFTEVOICsgMTRdKTsKQEAgLTI3MCw4ICsyNjgsNiBAQAogCQkJaWYgKHNrYi0+bGVuIDwgQ0FQSV9NU0dfQkFTRUxFTiArIDMyKQogCQkJCWJyZWFrOwogCi0JCQljb250cm9sbGVyID0gQ0FQSU1TR19VMzIoc2tiLT5kYXRhLCBDQVBJX01TR19CQVNFTEVOICsgMTIpOwotCiAJCQlpZiAoIWluZm8gJiYgY3RybCkgewogCQkJCWN0cmwtPnZlcnNpb24ubWFqb3J2ZXJzaW9uID0gQ0FQSU1TR19VMzIoc2tiLT5kYXRhLCBDQVBJX01TR19CQVNFTEVOICsgMTYpOwogCQkJCWN0cmwtPnZlcnNpb24ubWlub3J2ZXJzaW9uID0gQ0FQSU1TR19VMzIoc2tiLT5kYXRhLCBDQVBJX01TR19CQVNFTEVOICsgMjApOwpAQCAtMjg1LDggKzI4MSw2IEBACiAJCQlpZiAoc2tiLT5sZW4gPCBDQVBJX01TR19CQVNFTEVOICsgMTcpCiAJCQkJYnJlYWs7CiAKLQkJCWNvbnRyb2xsZXIgPSBDQVBJTVNHX1UzMihza2ItPmRhdGEsIENBUElfTVNHX0JBU0VMRU4gKyAxMik7Ci0KIAkJCWlmICghaW5mbyAmJiBjdHJsKSB7CiAJCQkJaW50IGxlbiA9IG1pbl90KHVpbnQsIENBUElfU0VSSUFMX0xFTiwKIAkJCQkJCXNrYi0+ZGF0YVtDQVBJX01TR19CQVNFTEVOICsgMTZdKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwppbmRleCBmZTE4ODI1Li5jOWI4ZmE1IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCkBAIC0yNSwxMSArMjUsMTMgQEAKIC8qIEJsdWV0b290aCBIQ0kgY29ubmVjdGlvbiBoYW5kbGluZy4gKi8KIAogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KIAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvbDJjYXAuaD4KIAorI2luY2x1ZGUgImhjaV9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAic21wLmgiCiAjaW5jbHVkZSAiYTJtcC5oIgogCkBAIC01NDYsNiArNTQ4LDggQEAKIAogCWhjaV9jb25uX2RlbF9zeXNmcyhjb25uKTsKIAorCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShjb25uLT5kZWJ1Z2ZzKTsKKwogCWlmICh0ZXN0X2JpdChIQ0lfQ09OTl9QQVJBTV9SRU1PVkFMX1BFTkQsICZjb25uLT5mbGFncykpCiAJCWhjaV9jb25uX3BhcmFtc19kZWwoY29ubi0+aGRldiwgJmNvbm4tPmRzdCwgY29ubi0+ZHN0X3R5cGUpOwogCkBAIC02MjksNyArNjMzLDcgQEAKIAltZ210X3JlZW5hYmxlX2FkdmVydGlzaW5nKGhkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVfbGVfY29ubl9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzKQorc3RhdGljIHZvaWQgY3JlYXRlX2xlX2Nvbm5fY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHN0YXR1cywgdTE2IG9wY29kZSkKIHsKIAlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CiAKQEAgLTEwODAsMjEgKzEwODQsNiBAQAogfQogRVhQT1JUX1NZTUJPTChoY2lfY29ubl9jaGVja19zZWN1cmUpOwogCi0vKiBDaGFuZ2UgbGluayBrZXkgKi8KLWludCBoY2lfY29ubl9jaGFuZ2VfbGlua19rZXkoc3RydWN0IGhjaV9jb25uICpjb25uKQotewotCUJUX0RCRygiaGNvbiAlcCIsIGNvbm4pOwotCi0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEhDSV9DT05OX0FVVEhfUEVORCwgJmNvbm4tPmZsYWdzKSkgewotCQlzdHJ1Y3QgaGNpX2NwX2NoYW5nZV9jb25uX2xpbmtfa2V5IGNwOwotCQljcC5oYW5kbGUgPSBjcHVfdG9fbGUxNihjb25uLT5oYW5kbGUpOwotCQloY2lfc2VuZF9jbWQoY29ubi0+aGRldiwgSENJX09QX0NIQU5HRV9DT05OX0xJTktfS0VZLAotCQkJICAgICBzaXplb2YoY3ApLCAmY3ApOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKiBTd2l0Y2ggcm9sZSAqLwogaW50IGhjaV9jb25uX3N3aXRjaF9yb2xlKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCByb2xlKQogewpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCmluZGV4IDVkY2FjZjkuLjMzMjJkM2YgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2wyY2FwLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9tZ210Lmg+CiAKKyNpbmNsdWRlICJoY2lfcmVxdWVzdC5oIgorI2luY2x1ZGUgImhjaV9kZWJ1Z2ZzLmgiCiAjaW5jbHVkZSAic21wLmgiCiAKIHN0YXRpYyB2b2lkIGhjaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CkBAIC0xMzcsOTQxICsxMzksOSBAQAogCS5sbHNlZWsJCT0gZGVmYXVsdF9sbHNlZWssCiB9OwogCi1zdGF0aWMgaW50IGZlYXR1cmVzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwdHIpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmLT5wcml2YXRlOwotCXU4IHA7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JZm9yIChwID0gMDsgcCA8IEhDSV9NQVhfUEFHRVMgJiYgcCA8PSBoZGV2LT5tYXhfcGFnZTsgcCsrKSB7Ci0JCXNlcV9wcmludGYoZiwgIiUydTogMHglMi4yeCAweCUyLjJ4IDB4JTIuMnggMHglMi4yeCAiCi0JCQkgICAiMHglMi4yeCAweCUyLjJ4IDB4JTIuMnggMHglMi4yeFxuIiwgcCwKLQkJCSAgIGhkZXYtPmZlYXR1cmVzW3BdWzBdLCBoZGV2LT5mZWF0dXJlc1twXVsxXSwKLQkJCSAgIGhkZXYtPmZlYXR1cmVzW3BdWzJdLCBoZGV2LT5mZWF0dXJlc1twXVszXSwKLQkJCSAgIGhkZXYtPmZlYXR1cmVzW3BdWzRdLCBoZGV2LT5mZWF0dXJlc1twXVs1XSwKLQkJCSAgIGhkZXYtPmZlYXR1cmVzW3BdWzZdLCBoZGV2LT5mZWF0dXJlc1twXVs3XSk7Ci0JfQotCWlmIChsbXBfbGVfY2FwYWJsZShoZGV2KSkKLQkJc2VxX3ByaW50ZihmLCAiTEU6IDB4JTIuMnggMHglMi4yeCAweCUyLjJ4IDB4JTIuMnggIgotCQkJICAgIjB4JTIuMnggMHglMi4yeCAweCUyLjJ4IDB4JTIuMnhcbiIsCi0JCQkgICBoZGV2LT5sZV9mZWF0dXJlc1swXSwgaGRldi0+bGVfZmVhdHVyZXNbMV0sCi0JCQkgICBoZGV2LT5sZV9mZWF0dXJlc1syXSwgaGRldi0+bGVfZmVhdHVyZXNbM10sCi0JCQkgICBoZGV2LT5sZV9mZWF0dXJlc1s0XSwgaGRldi0+bGVfZmVhdHVyZXNbNV0sCi0JCQkgICBoZGV2LT5sZV9mZWF0dXJlc1s2XSwgaGRldi0+bGVfZmVhdHVyZXNbN10pOwotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZmVhdHVyZXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZmVhdHVyZXNfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZlYXR1cmVzX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gZmVhdHVyZXNfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCBibGFja2xpc3Rfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnApCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmLT5wcml2YXRlOwotCXN0cnVjdCBiZGFkZHJfbGlzdCAqYjsKLQotCWhjaV9kZXZfbG9jayhoZGV2KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGIsICZoZGV2LT5ibGFja2xpc3QsIGxpc3QpCi0JCXNlcV9wcmludGYoZiwgIiVwTVIgKHR5cGUgJXUpXG4iLCAmYi0+YmRhZGRyLCBiLT5iZGFkZHJfdHlwZSk7Ci0JaGNpX2Rldl91bmxvY2soaGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBibGFja2xpc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYmxhY2tsaXN0X3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBibGFja2xpc3RfZm9wcyA9IHsKLQkub3BlbgkJPSBibGFja2xpc3Rfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCB1dWlkc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqcCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGYtPnByaXZhdGU7Ci0Jc3RydWN0IGJ0X3V1aWQgKnV1aWQ7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeSh1dWlkLCAmaGRldi0+dXVpZHMsIGxpc3QpIHsKLQkJdTggaSwgdmFsWzE2XTsKLQotCQkvKiBUaGUgQmx1ZXRvb3RoIFVVSUQgdmFsdWVzIGFyZSBzdG9yZWQgaW4gYmlnIGVuZGlhbiwKLQkJICogYnV0IHdpdGggcmV2ZXJzZWQgYnl0ZSBvcmRlci4gU28gY29udmVydCB0aGVtIGludG8KLQkJICogdGhlIHJpZ2h0IG9yZGVyIGZvciB0aGUgJXBVYiBtb2RpZmllci4KLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQkJdmFsW2ldID0gdXVpZC0+dXVpZFsxNSAtIGldOwotCi0JCXNlcV9wcmludGYoZiwgIiVwVWJcbiIsIHZhbCk7Ci0JfQotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdXVpZHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdXVpZHNfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHV1aWRzX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gdXVpZHNfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCBpbnF1aXJ5X2NhY2hlX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZi0+cHJpdmF0ZTsKLQlzdHJ1Y3QgZGlzY292ZXJ5X3N0YXRlICpjYWNoZSA9ICZoZGV2LT5kaXNjb3Zlcnk7Ci0Jc3RydWN0IGlucXVpcnlfZW50cnkgKmU7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZjYWNoZS0+YWxsLCBhbGwpIHsKLQkJc3RydWN0IGlucXVpcnlfZGF0YSAqZGF0YSA9ICZlLT5kYXRhOwotCQlzZXFfcHJpbnRmKGYsICIlcE1SICVkICVkICVkIDB4JS4yeCUuMnglLjJ4IDB4JS40eCAlZCAlZCAldVxuIiwKLQkJCSAgICZkYXRhLT5iZGFkZHIsCi0JCQkgICBkYXRhLT5wc2Nhbl9yZXBfbW9kZSwgZGF0YS0+cHNjYW5fcGVyaW9kX21vZGUsCi0JCQkgICBkYXRhLT5wc2Nhbl9tb2RlLCBkYXRhLT5kZXZfY2xhc3NbMl0sCi0JCQkgICBkYXRhLT5kZXZfY2xhc3NbMV0sIGRhdGEtPmRldl9jbGFzc1swXSwKLQkJCSAgIF9fbGUxNl90b19jcHUoZGF0YS0+Y2xvY2tfb2Zmc2V0KSwKLQkJCSAgIGRhdGEtPnJzc2ksIGRhdGEtPnNzcF9tb2RlLCBlLT50aW1lc3RhbXApOwotCX0KLQotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW5xdWlyeV9jYWNoZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpbnF1aXJ5X2NhY2hlX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbnF1aXJ5X2NhY2hlX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gaW5xdWlyeV9jYWNoZV9vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IGxpbmtfa2V5c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqcHRyKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZi0+cHJpdmF0ZTsKLQlzdHJ1Y3QgbGlua19rZXkgKmtleTsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrZXksICZoZGV2LT5saW5rX2tleXMsIGxpc3QpCi0JCXNlcV9wcmludGYoZiwgIiVwTVIgJXUgJSpwaE4gJXVcbiIsICZrZXktPmJkYWRkciwga2V5LT50eXBlLAotCQkJICAgSENJX0xJTktfS0VZX1NJWkUsIGtleS0+dmFsLCBrZXktPnBpbl9sZW4pOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGlua19rZXlzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGxpbmtfa2V5c19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGlua19rZXlzX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gbGlua19rZXlzX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBpbnQgZGV2X2NsYXNzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwdHIpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmLT5wcml2YXRlOwotCi0JaGNpX2Rldl9sb2NrKGhkZXYpOwotCXNlcV9wcmludGYoZiwgIjB4JS4yeCUuMnglLjJ4XG4iLCBoZGV2LT5kZXZfY2xhc3NbMl0sCi0JCSAgIGhkZXYtPmRldl9jbGFzc1sxXSwgaGRldi0+ZGV2X2NsYXNzWzBdKTsKLQloY2lfZGV2X3VubG9jayhoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRldl9jbGFzc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkZXZfY2xhc3Nfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldl9jbGFzc19mb3BzID0gewotCS5vcGVuCQk9IGRldl9jbGFzc19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IHZvaWNlX3NldHRpbmdfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKLQotCWhjaV9kZXZfbG9jayhoZGV2KTsKLQkqdmFsID0gaGRldi0+dm9pY2Vfc2V0dGluZzsKLQloY2lfZGV2X3VubG9jayhoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURSh2b2ljZV9zZXR0aW5nX2ZvcHMsIHZvaWNlX3NldHRpbmdfZ2V0LAotCQkJTlVMTCwgIjB4JTQuNGxseFxuIik7Ci0KLXN0YXRpYyBpbnQgYXV0b19hY2NlcHRfZGVsYXlfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOwotCi0JaGNpX2Rldl9sb2NrKGhkZXYpOwotCWhkZXYtPmF1dG9fYWNjZXB0X2RlbGF5ID0gdmFsOwotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYXV0b19hY2NlcHRfZGVsYXlfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKLQotCWhjaV9kZXZfbG9jayhoZGV2KTsKLQkqdmFsID0gaGRldi0+YXV0b19hY2NlcHRfZGVsYXk7Ci0JaGNpX2Rldl91bmxvY2soaGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoYXV0b19hY2NlcHRfZGVsYXlfZm9wcywgYXV0b19hY2NlcHRfZGVsYXlfZ2V0LAotCQkJYXV0b19hY2NlcHRfZGVsYXlfc2V0LCAiJWxsdVxuIik7Ci0KLXN0YXRpYyBzc2l6ZV90IGZvcmNlX3NjX3N1cHBvcnRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZbM107Ci0KLQlidWZbMF0gPSB0ZXN0X2JpdChIQ0lfRk9SQ0VfU0MsICZoZGV2LT5kYmdfZmxhZ3MpID8gJ1knOiAnTic7Ci0JYnVmWzFdID0gJ1xuJzsKLQlidWZbMl0gPSAnXDAnOwotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgMik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGZvcmNlX3NjX3N1cHBvcnRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzMyXTsKLQlzaXplX3QgYnVmX3NpemUgPSBtaW4oY291bnQsIChzaXplb2YoYnVmKS0xKSk7Ci0JYm9vbCBlbmFibGU7Ci0KLQlpZiAodGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpKQotCQlyZXR1cm4gLUVCVVNZOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlidWZbYnVmX3NpemVdID0gJ1wwJzsKLQlpZiAoc3RydG9ib29sKGJ1ZiwgJmVuYWJsZSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGVuYWJsZSA9PSB0ZXN0X2JpdChIQ0lfRk9SQ0VfU0MsICZoZGV2LT5kYmdfZmxhZ3MpKQotCQlyZXR1cm4gLUVBTFJFQURZOwotCi0JY2hhbmdlX2JpdChIQ0lfRk9SQ0VfU0MsICZoZGV2LT5kYmdfZmxhZ3MpOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3JjZV9zY19zdXBwb3J0X2ZvcHMgPSB7Ci0JLm9wZW4JCT0gc2ltcGxlX29wZW4sCi0JLnJlYWQJCT0gZm9yY2Vfc2Nfc3VwcG9ydF9yZWFkLAotCS53cml0ZQkJPSBmb3JjZV9zY19zdXBwb3J0X3dyaXRlLAotCS5sbHNlZWsJCT0gZGVmYXVsdF9sbHNlZWssCi19OwotCi1zdGF0aWMgc3NpemVfdCBmb3JjZV9sZXNjX3N1cHBvcnRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAotCQkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQljaGFyIGJ1ZlszXTsKLQotCWJ1ZlswXSA9IHRlc3RfYml0KEhDSV9GT1JDRV9MRVNDLCAmaGRldi0+ZGJnX2ZsYWdzKSA/ICdZJzogJ04nOwotCWJ1ZlsxXSA9ICdcbic7Ci0JYnVmWzJdID0gJ1wwJzsKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIDIpOwotfQotCi1zdGF0aWMgc3NpemVfdCBmb3JjZV9sZXNjX3N1cHBvcnRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZbMzJdOwotCXNpemVfdCBidWZfc2l6ZSA9IG1pbihjb3VudCwgKHNpemVvZihidWYpLTEpKTsKLQlib29sIGVuYWJsZTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JYnVmW2J1Zl9zaXplXSA9ICdcMCc7Ci0JaWYgKHN0cnRvYm9vbChidWYsICZlbmFibGUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChlbmFibGUgPT0gdGVzdF9iaXQoSENJX0ZPUkNFX0xFU0MsICZoZGV2LT5kYmdfZmxhZ3MpKQotCQlyZXR1cm4gLUVBTFJFQURZOwotCi0JY2hhbmdlX2JpdChIQ0lfRk9SQ0VfTEVTQywgJmhkZXYtPmRiZ19mbGFncyk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcmNlX2xlc2Nfc3VwcG9ydF9mb3BzID0gewotCS5vcGVuCQk9IHNpbXBsZV9vcGVuLAotCS5yZWFkCQk9IGZvcmNlX2xlc2Nfc3VwcG9ydF9yZWFkLAotCS53cml0ZQkJPSBmb3JjZV9sZXNjX3N1cHBvcnRfd3JpdGUsCi0JLmxsc2VlawkJPSBkZWZhdWx0X2xsc2VlaywKLX07Ci0KLXN0YXRpYyBzc2l6ZV90IHNjX29ubHlfbW9kZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzNdOwotCi0JYnVmWzBdID0gdGVzdF9iaXQoSENJX1NDX09OTFksICZoZGV2LT5kZXZfZmxhZ3MpID8gJ1knOiAnTic7Ci0JYnVmWzFdID0gJ1xuJzsKLQlidWZbMl0gPSAnXDAnOwotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgMik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjX29ubHlfbW9kZV9mb3BzID0gewotCS5vcGVuCQk9IHNpbXBsZV9vcGVuLAotCS5yZWFkCQk9IHNjX29ubHlfbW9kZV9yZWFkLAotCS5sbHNlZWsJCT0gZGVmYXVsdF9sbHNlZWssCi19OwotCi1zdGF0aWMgaW50IGlkbGVfdGltZW91dF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQlpZiAodmFsICE9IDAgJiYgKHZhbCA8IDUwMCB8fCB2YWwgPiAzNjAwMDAwKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JaGRldi0+aWRsZV90aW1lb3V0ID0gdmFsOwotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWRsZV90aW1lb3V0X2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JKnZhbCA9IGhkZXYtPmlkbGVfdGltZW91dDsKLQloY2lfZGV2X3VubG9jayhoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShpZGxlX3RpbWVvdXRfZm9wcywgaWRsZV90aW1lb3V0X2dldCwKLQkJCWlkbGVfdGltZW91dF9zZXQsICIlbGx1XG4iKTsKLQotc3RhdGljIGludCBycGFfdGltZW91dF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQkvKiBSZXF1aXJlIHRoZSBSUEEgdGltZW91dCB0byBiZSBhdCBsZWFzdCAzMCBzZWNvbmRzIGFuZCBhdCBtb3N0Ci0JICogMjQgaG91cnMuCi0JICovCi0JaWYgKHZhbCA8IDMwIHx8IHZhbCA+ICg2MCAqIDYwICogMjQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWhjaV9kZXZfbG9jayhoZGV2KTsKLQloZGV2LT5ycGFfdGltZW91dCA9IHZhbDsKLQloY2lfZGV2X3VubG9jayhoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJwYV90aW1lb3V0X2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JKnZhbCA9IGhkZXYtPnJwYV90aW1lb3V0OwotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLURFRklORV9TSU1QTEVfQVRUUklCVVRFKHJwYV90aW1lb3V0X2ZvcHMsIHJwYV90aW1lb3V0X2dldCwKLQkJCXJwYV90aW1lb3V0X3NldCwgIiVsbHVcbiIpOwotCi1zdGF0aWMgaW50IHNuaWZmX21pbl9pbnRlcnZhbF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQlpZiAodmFsID09IDAgfHwgdmFsICUgMiB8fCB2YWwgPiBoZGV2LT5zbmlmZl9tYXhfaW50ZXJ2YWwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaGNpX2Rldl9sb2NrKGhkZXYpOwotCWhkZXYtPnNuaWZmX21pbl9pbnRlcnZhbCA9IHZhbDsKLQloY2lfZGV2X3VubG9jayhoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNuaWZmX21pbl9pbnRlcnZhbF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOwotCi0JaGNpX2Rldl9sb2NrKGhkZXYpOwotCSp2YWwgPSBoZGV2LT5zbmlmZl9taW5faW50ZXJ2YWw7Ci0JaGNpX2Rldl91bmxvY2soaGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoc25pZmZfbWluX2ludGVydmFsX2ZvcHMsIHNuaWZmX21pbl9pbnRlcnZhbF9nZXQsCi0JCQlzbmlmZl9taW5faW50ZXJ2YWxfc2V0LCAiJWxsdVxuIik7Ci0KLXN0YXRpYyBpbnQgc25pZmZfbWF4X2ludGVydmFsX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKLQotCWlmICh2YWwgPT0gMCB8fCB2YWwgJSAyIHx8IHZhbCA8IGhkZXYtPnNuaWZmX21pbl9pbnRlcnZhbCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JaGRldi0+c25pZmZfbWF4X2ludGVydmFsID0gdmFsOwotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc25pZmZfbWF4X2ludGVydmFsX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JKnZhbCA9IGhkZXYtPnNuaWZmX21heF9pbnRlcnZhbDsKLQloY2lfZGV2X3VubG9jayhoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShzbmlmZl9tYXhfaW50ZXJ2YWxfZm9wcywgc25pZmZfbWF4X2ludGVydmFsX2dldCwKLQkJCXNuaWZmX21heF9pbnRlcnZhbF9zZXQsICIlbGx1XG4iKTsKLQotc3RhdGljIGludCBjb25uX2luZm9fbWluX2FnZV9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQlpZiAodmFsID09IDAgfHwgdmFsID4gaGRldi0+Y29ubl9pbmZvX21heF9hZ2UpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaGNpX2Rldl9sb2NrKGhkZXYpOwotCWhkZXYtPmNvbm5faW5mb19taW5fYWdlID0gdmFsOwotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY29ubl9pbmZvX21pbl9hZ2VfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKLQotCWhjaV9kZXZfbG9jayhoZGV2KTsKLQkqdmFsID0gaGRldi0+Y29ubl9pbmZvX21pbl9hZ2U7Ci0JaGNpX2Rldl91bmxvY2soaGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoY29ubl9pbmZvX21pbl9hZ2VfZm9wcywgY29ubl9pbmZvX21pbl9hZ2VfZ2V0LAotCQkJY29ubl9pbmZvX21pbl9hZ2Vfc2V0LCAiJWxsdVxuIik7Ci0KLXN0YXRpYyBpbnQgY29ubl9pbmZvX21heF9hZ2Vfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOwotCi0JaWYgKHZhbCA9PSAwIHx8IHZhbCA8IGhkZXYtPmNvbm5faW5mb19taW5fYWdlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWhjaV9kZXZfbG9jayhoZGV2KTsKLQloZGV2LT5jb25uX2luZm9fbWF4X2FnZSA9IHZhbDsKLQloY2lfZGV2X3VubG9jayhoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNvbm5faW5mb19tYXhfYWdlX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JKnZhbCA9IGhkZXYtPmNvbm5faW5mb19tYXhfYWdlOwotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLURFRklORV9TSU1QTEVfQVRUUklCVVRFKGNvbm5faW5mb19tYXhfYWdlX2ZvcHMsIGNvbm5faW5mb19tYXhfYWdlX2dldCwKLQkJCWNvbm5faW5mb19tYXhfYWdlX3NldCwgIiVsbHVcbiIpOwotCi1zdGF0aWMgaW50IGlkZW50aXR5X3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZi0+cHJpdmF0ZTsKLQliZGFkZHJfdCBhZGRyOwotCXU4IGFkZHJfdHlwZTsKLQotCWhjaV9kZXZfbG9jayhoZGV2KTsKLQotCWhjaV9jb3B5X2lkZW50aXR5X2FkZHJlc3MoaGRldiwgJmFkZHIsICZhZGRyX3R5cGUpOwotCi0Jc2VxX3ByaW50ZihmLCAiJXBNUiAodHlwZSAldSkgJSpwaE4gJXBNUlxuIiwgJmFkZHIsIGFkZHJfdHlwZSwKLQkJICAgMTYsIGhkZXYtPmlyaywgJmhkZXYtPnJwYSk7Ci0KLQloY2lfZGV2X3VubG9jayhoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkZW50aXR5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGlkZW50aXR5X3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZGVudGl0eV9mb3BzID0gewotCS5vcGVuCQk9IGlkZW50aXR5X29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KLXN0YXRpYyBpbnQgcmFuZG9tX2FkZHJlc3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnApCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmLT5wcml2YXRlOwotCi0JaGNpX2Rldl9sb2NrKGhkZXYpOwotCXNlcV9wcmludGYoZiwgIiVwTVJcbiIsICZoZGV2LT5yYW5kb21fYWRkcik7Ci0JaGNpX2Rldl91bmxvY2soaGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByYW5kb21fYWRkcmVzc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCByYW5kb21fYWRkcmVzc19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmFuZG9tX2FkZHJlc3NfZm9wcyA9IHsKLQkub3BlbgkJPSByYW5kb21fYWRkcmVzc19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IHN0YXRpY19hZGRyZXNzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZi0+cHJpdmF0ZTsKLQotCWhjaV9kZXZfbG9jayhoZGV2KTsKLQlzZXFfcHJpbnRmKGYsICIlcE1SXG4iLCAmaGRldi0+c3RhdGljX2FkZHIpOwotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3RhdGljX2FkZHJlc3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgc3RhdGljX2FkZHJlc3Nfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN0YXRpY19hZGRyZXNzX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gc3RhdGljX2FkZHJlc3Nfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQotc3RhdGljIHNzaXplX3QgZm9yY2Vfc3RhdGljX2FkZHJlc3NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkJIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWNoYXIgYnVmWzNdOwotCi0JYnVmWzBdID0gdGVzdF9iaXQoSENJX0ZPUkNFX1NUQVRJQ19BRERSLCAmaGRldi0+ZGJnX2ZsYWdzKSA/ICdZJzogJ04nOwotCWJ1ZlsxXSA9ICdcbic7Ci0JYnVmWzJdID0gJ1wwJzsKLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIDIpOwotfQotCi1zdGF0aWMgc3NpemVfdCBmb3JjZV9zdGF0aWNfYWRkcmVzc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkJICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCi0JCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciBidWZbMzJdOwotCXNpemVfdCBidWZfc2l6ZSA9IG1pbihjb3VudCwgKHNpemVvZihidWYpLTEpKTsKLQlib29sIGVuYWJsZTsKLQotCWlmICh0ZXN0X2JpdChIQ0lfVVAsICZoZGV2LT5mbGFncykpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWJ1ZltidWZfc2l6ZV0gPSAnXDAnOwotCWlmIChzdHJ0b2Jvb2woYnVmLCAmZW5hYmxlKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZW5hYmxlID09IHRlc3RfYml0KEhDSV9GT1JDRV9TVEFUSUNfQUREUiwgJmhkZXYtPmRiZ19mbGFncykpCi0JCXJldHVybiAtRUFMUkVBRFk7Ci0KLQljaGFuZ2VfYml0KEhDSV9GT1JDRV9TVEFUSUNfQUREUiwgJmhkZXYtPmRiZ19mbGFncyk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcmNlX3N0YXRpY19hZGRyZXNzX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gc2ltcGxlX29wZW4sCi0JLnJlYWQJCT0gZm9yY2Vfc3RhdGljX2FkZHJlc3NfcmVhZCwKLQkud3JpdGUJCT0gZm9yY2Vfc3RhdGljX2FkZHJlc3Nfd3JpdGUsCi0JLmxsc2VlawkJPSBkZWZhdWx0X2xsc2VlaywKLX07Ci0KLXN0YXRpYyBpbnQgd2hpdGVfbGlzdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqcHRyKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZi0+cHJpdmF0ZTsKLQlzdHJ1Y3QgYmRhZGRyX2xpc3QgKmI7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShiLCAmaGRldi0+bGVfd2hpdGVfbGlzdCwgbGlzdCkKLQkJc2VxX3ByaW50ZihmLCAiJXBNUiAodHlwZSAldSlcbiIsICZiLT5iZGFkZHIsIGItPmJkYWRkcl90eXBlKTsKLQloY2lfZGV2X3VubG9jayhoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHdoaXRlX2xpc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgd2hpdGVfbGlzdF9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd2hpdGVfbGlzdF9mb3BzID0gewotCS5vcGVuCQk9IHdoaXRlX2xpc3Rfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCBpZGVudGl0eV9yZXNvbHZpbmdfa2V5c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqcHRyKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZi0+cHJpdmF0ZTsKLQlzdHJ1Y3Qgc21wX2lyayAqaXJrOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGlyaywgJmhkZXYtPmlkZW50aXR5X3Jlc29sdmluZ19rZXlzLCBsaXN0KSB7Ci0JCXNlcV9wcmludGYoZiwgIiVwTVIgKHR5cGUgJXUpICUqcGhOICVwTVJcbiIsCi0JCQkgICAmaXJrLT5iZGFkZHIsIGlyay0+YWRkcl90eXBlLAotCQkJICAgMTYsIGlyay0+dmFsLCAmaXJrLT5ycGEpOwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGlkZW50aXR5X3Jlc29sdmluZ19rZXlzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGlkZW50aXR5X3Jlc29sdmluZ19rZXlzX3Nob3csCi0JCQkgICBpbm9kZS0+aV9wcml2YXRlKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaWRlbnRpdHlfcmVzb2x2aW5nX2tleXNfZm9wcyA9IHsKLQkub3BlbgkJPSBpZGVudGl0eV9yZXNvbHZpbmdfa2V5c19vcGVuLAotCS5yZWFkCQk9IHNlcV9yZWFkLAotCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAotCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgaW50IGxvbmdfdGVybV9rZXlzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwdHIpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmLT5wcml2YXRlOwotCXN0cnVjdCBzbXBfbHRrICpsdGs7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobHRrLCAmaGRldi0+bG9uZ190ZXJtX2tleXMsIGxpc3QpCi0JCXNlcV9wcmludGYoZiwgIiVwTVIgKHR5cGUgJXUpICV1IDB4JTAyeCAldSAlLjR4ICUuMTZsbHggJSpwaE5cbiIsCi0JCQkgICAmbHRrLT5iZGFkZHIsIGx0ay0+YmRhZGRyX3R5cGUsIGx0ay0+YXV0aGVudGljYXRlZCwKLQkJCSAgIGx0ay0+dHlwZSwgbHRrLT5lbmNfc2l6ZSwgX19sZTE2X3RvX2NwdShsdGstPmVkaXYpLAotCQkJICAgX19sZTY0X3RvX2NwdShsdGstPnJhbmQpLCAxNiwgbHRrLT52YWwpOwotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbG9uZ190ZXJtX2tleXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgbG9uZ190ZXJtX2tleXNfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxvbmdfdGVybV9rZXlzX2ZvcHMgPSB7Ci0JLm9wZW4JCT0gbG9uZ190ZXJtX2tleXNfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQotc3RhdGljIGludCBjb25uX21pbl9pbnRlcnZhbF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQlpZiAodmFsIDwgMHgwMDA2IHx8IHZhbCA+IDB4MGM4MCB8fCB2YWwgPiBoZGV2LT5sZV9jb25uX21heF9pbnRlcnZhbCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JaGRldi0+bGVfY29ubl9taW5faW50ZXJ2YWwgPSB2YWw7Ci0JaGNpX2Rldl91bmxvY2soaGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjb25uX21pbl9pbnRlcnZhbF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOwotCi0JaGNpX2Rldl9sb2NrKGhkZXYpOwotCSp2YWwgPSBoZGV2LT5sZV9jb25uX21pbl9pbnRlcnZhbDsKLQloY2lfZGV2X3VubG9jayhoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShjb25uX21pbl9pbnRlcnZhbF9mb3BzLCBjb25uX21pbl9pbnRlcnZhbF9nZXQsCi0JCQljb25uX21pbl9pbnRlcnZhbF9zZXQsICIlbGx1XG4iKTsKLQotc3RhdGljIGludCBjb25uX21heF9pbnRlcnZhbF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQlpZiAodmFsIDwgMHgwMDA2IHx8IHZhbCA+IDB4MGM4MCB8fCB2YWwgPCBoZGV2LT5sZV9jb25uX21pbl9pbnRlcnZhbCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JaGRldi0+bGVfY29ubl9tYXhfaW50ZXJ2YWwgPSB2YWw7Ci0JaGNpX2Rldl91bmxvY2soaGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjb25uX21heF9pbnRlcnZhbF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOwotCi0JaGNpX2Rldl9sb2NrKGhkZXYpOwotCSp2YWwgPSBoZGV2LT5sZV9jb25uX21heF9pbnRlcnZhbDsKLQloY2lfZGV2X3VubG9jayhoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShjb25uX21heF9pbnRlcnZhbF9mb3BzLCBjb25uX21heF9pbnRlcnZhbF9nZXQsCi0JCQljb25uX21heF9pbnRlcnZhbF9zZXQsICIlbGx1XG4iKTsKLQotc3RhdGljIGludCBjb25uX2xhdGVuY3lfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOwotCi0JaWYgKHZhbCA+IDB4MDFmMykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JaGRldi0+bGVfY29ubl9sYXRlbmN5ID0gdmFsOwotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY29ubl9sYXRlbmN5X2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JKnZhbCA9IGhkZXYtPmxlX2Nvbm5fbGF0ZW5jeTsKLQloY2lfZGV2X3VubG9jayhoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShjb25uX2xhdGVuY3lfZm9wcywgY29ubl9sYXRlbmN5X2dldCwKLQkJCWNvbm5fbGF0ZW5jeV9zZXQsICIlbGx1XG4iKTsKLQotc3RhdGljIGludCBzdXBlcnZpc2lvbl90aW1lb3V0X3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKLQotCWlmICh2YWwgPCAweDAwMGEgfHwgdmFsID4gMHgwYzgwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWhjaV9kZXZfbG9jayhoZGV2KTsKLQloZGV2LT5sZV9zdXB2X3RpbWVvdXQgPSB2YWw7Ci0JaGNpX2Rldl91bmxvY2soaGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzdXBlcnZpc2lvbl90aW1lb3V0X2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JKnZhbCA9IGhkZXYtPmxlX3N1cHZfdGltZW91dDsKLQloY2lfZGV2X3VubG9jayhoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShzdXBlcnZpc2lvbl90aW1lb3V0X2ZvcHMsIHN1cGVydmlzaW9uX3RpbWVvdXRfZ2V0LAotCQkJc3VwZXJ2aXNpb25fdGltZW91dF9zZXQsICIlbGx1XG4iKTsKLQotc3RhdGljIGludCBhZHZfY2hhbm5lbF9tYXBfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOwotCi0JaWYgKHZhbCA8IDB4MDEgfHwgdmFsID4gMHgwNykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JaGRldi0+bGVfYWR2X2NoYW5uZWxfbWFwID0gdmFsOwotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWR2X2NoYW5uZWxfbWFwX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JKnZhbCA9IGhkZXYtPmxlX2Fkdl9jaGFubmVsX21hcDsKLQloY2lfZGV2X3VubG9jayhoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1ERUZJTkVfU0lNUExFX0FUVFJJQlVURShhZHZfY2hhbm5lbF9tYXBfZm9wcywgYWR2X2NoYW5uZWxfbWFwX2dldCwKLQkJCWFkdl9jaGFubmVsX21hcF9zZXQsICIlbGx1XG4iKTsKLQotc3RhdGljIGludCBhZHZfbWluX2ludGVydmFsX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKLQotCWlmICh2YWwgPCAweDAwMjAgfHwgdmFsID4gMHg0MDAwIHx8IHZhbCA+IGhkZXYtPmxlX2Fkdl9tYXhfaW50ZXJ2YWwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaGNpX2Rldl9sb2NrKGhkZXYpOwotCWhkZXYtPmxlX2Fkdl9taW5faW50ZXJ2YWwgPSB2YWw7Ci0JaGNpX2Rldl91bmxvY2soaGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZHZfbWluX2ludGVydmFsX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQloY2lfZGV2X2xvY2soaGRldik7Ci0JKnZhbCA9IGhkZXYtPmxlX2Fkdl9taW5faW50ZXJ2YWw7Ci0JaGNpX2Rldl91bmxvY2soaGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoYWR2X21pbl9pbnRlcnZhbF9mb3BzLCBhZHZfbWluX2ludGVydmFsX2dldCwKLQkJCWFkdl9taW5faW50ZXJ2YWxfc2V0LCAiJWxsdVxuIik7Ci0KLXN0YXRpYyBpbnQgYWR2X21heF9pbnRlcnZhbF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7Ci0KLQlpZiAodmFsIDwgMHgwMDIwIHx8IHZhbCA+IDB4NDAwMCB8fCB2YWwgPCBoZGV2LT5sZV9hZHZfbWluX2ludGVydmFsKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWhjaV9kZXZfbG9jayhoZGV2KTsKLQloZGV2LT5sZV9hZHZfbWF4X2ludGVydmFsID0gdmFsOwotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgYWR2X21heF9pbnRlcnZhbF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOwotCi0JaGNpX2Rldl9sb2NrKGhkZXYpOwotCSp2YWwgPSBoZGV2LT5sZV9hZHZfbWF4X2ludGVydmFsOwotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLURFRklORV9TSU1QTEVfQVRUUklCVVRFKGFkdl9tYXhfaW50ZXJ2YWxfZm9wcywgYWR2X21heF9pbnRlcnZhbF9nZXQsCi0JCQlhZHZfbWF4X2ludGVydmFsX3NldCwgIiVsbHVcbiIpOwotCi1zdGF0aWMgaW50IGRldmljZV9saXN0X3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwdHIpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmLT5wcml2YXRlOwotCXN0cnVjdCBoY2lfY29ubl9wYXJhbXMgKnA7Ci0Jc3RydWN0IGJkYWRkcl9saXN0ICpiOwotCi0JaGNpX2Rldl9sb2NrKGhkZXYpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYiwgJmhkZXYtPndoaXRlbGlzdCwgbGlzdCkKLQkJc2VxX3ByaW50ZihmLCAiJXBNUiAodHlwZSAldSlcbiIsICZiLT5iZGFkZHIsIGItPmJkYWRkcl90eXBlKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZoZGV2LT5sZV9jb25uX3BhcmFtcywgbGlzdCkgewotCQlzZXFfcHJpbnRmKGYsICIlcE1SICh0eXBlICV1KSAldVxuIiwgJnAtPmFkZHIsIHAtPmFkZHJfdHlwZSwKLQkJCSAgIHAtPmF1dG9fY29ubmVjdCk7Ci0JfQotCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGV2aWNlX2xpc3Rfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGV2aWNlX2xpc3Rfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldmljZV9saXN0X2ZvcHMgPSB7Ci0JLm9wZW4JCT0gZGV2aWNlX2xpc3Rfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAotfTsKLQogLyogLS0tLSBIQ0kgcmVxdWVzdHMgLS0tLSAqLwogCi1zdGF0aWMgdm9pZCBoY2lfcmVxX3N5bmNfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHJlc3VsdCkKK3N0YXRpYyB2b2lkIGhjaV9yZXFfc3luY19jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggcmVzdWx0LCB1MTYgb3Bjb2RlKQogewogCUJUX0RCRygiJXMgcmVzdWx0IDB4JTIuMngiLCBoZGV2LT5uYW1lLCByZXN1bHQpOwogCkBAIC0xNDI3LDQzICs0OTcsNiBAQAogCQlzZXRfYml0KEhDSV9MRV9FTkFCTEVELCAmaGRldi0+ZGV2X2ZsYWdzKTsKIH0KIAotc3RhdGljIHU4IGhjaV9nZXRfaW5xdWlyeV9tb2RlKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQotewotCWlmIChsbXBfZXh0X2lucV9jYXBhYmxlKGhkZXYpKQotCQlyZXR1cm4gMHgwMjsKLQotCWlmIChsbXBfaW5xX3Jzc2lfY2FwYWJsZShoZGV2KSkKLQkJcmV0dXJuIDB4MDE7Ci0KLQlpZiAoaGRldi0+bWFudWZhY3R1cmVyID09IDExICYmIGhkZXYtPmhjaV9yZXYgPT0gMHgwMCAmJgotCSAgICBoZGV2LT5sbXBfc3VidmVyID09IDB4MDc1NykKLQkJcmV0dXJuIDB4MDE7Ci0KLQlpZiAoaGRldi0+bWFudWZhY3R1cmVyID09IDE1KSB7Ci0JCWlmIChoZGV2LT5oY2lfcmV2ID09IDB4MDMgJiYgaGRldi0+bG1wX3N1YnZlciA9PSAweDY5NjMpCi0JCQlyZXR1cm4gMHgwMTsKLQkJaWYgKGhkZXYtPmhjaV9yZXYgPT0gMHgwOSAmJiBoZGV2LT5sbXBfc3VidmVyID09IDB4Njk2MykKLQkJCXJldHVybiAweDAxOwotCQlpZiAoaGRldi0+aGNpX3JldiA9PSAweDAwICYmIGhkZXYtPmxtcF9zdWJ2ZXIgPT0gMHg2OTY1KQotCQkJcmV0dXJuIDB4MDE7Ci0JfQotCi0JaWYgKGhkZXYtPm1hbnVmYWN0dXJlciA9PSAzMSAmJiBoZGV2LT5oY2lfcmV2ID09IDB4MjAwNSAmJgotCSAgICBoZGV2LT5sbXBfc3VidmVyID09IDB4MTgwNSkKLQkJcmV0dXJuIDB4MDE7Ci0KLQlyZXR1cm4gMHgwMDsKLX0KLQotc3RhdGljIHZvaWQgaGNpX3NldHVwX2lucXVpcnlfbW9kZShzdHJ1Y3QgaGNpX3JlcXVlc3QgKnJlcSkKLXsKLQl1OCBtb2RlOwotCi0JbW9kZSA9IGhjaV9nZXRfaW5xdWlyeV9tb2RlKHJlcS0+aGRldik7Ci0KLQloY2lfcmVxX2FkZChyZXEsIEhDSV9PUF9XUklURV9JTlFVSVJZX01PREUsIDEsICZtb2RlKTsKLX0KLQogc3RhdGljIHZvaWQgaGNpX3NldHVwX2V2ZW50X21hc2soc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSByZXEtPmhkZXY7CkBAIC0xNTUzLDEwICs1ODYsMTYgQEAKIAlpZiAobG1wX2xlX2NhcGFibGUoaGRldikpCiAJCWxlX3NldHVwKHJlcSk7CiAKLQkvKiBBVk0gQmVybGluICgzMSksIGFrYSAiQmx1ZUZSSVRaISIsIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgcmVhZAotCSAqIGxvY2FsIHN1cHBvcnRlZCBjb21tYW5kcyBIQ0kgY29tbWFuZC4KKwkvKiBBbGwgQmx1ZXRvb3RoIDEuMiBhbmQgbGF0ZXIgY29udHJvbGxlcnMgc2hvdWxkIHN1cHBvcnQgdGhlCisJICogSENJIGNvbW1hbmQgZm9yIHJlYWRpbmcgdGhlIGxvY2FsIHN1cHBvcnRlZCBjb21tYW5kcy4KKwkgKgorCSAqIFVuZm9ydHVuYXRlbHkgc29tZSBjb250cm9sbGVycyBpbmRpY2F0ZSBCbHVldG9vdGggMS4yIHN1cHBvcnQsCisJICogYnV0IGRvIG5vdCBoYXZlIHN1cHBvcnQgZm9yIHRoaXMgY29tbWFuZC4gSWYgdGhhdCBpcyB0aGUgY2FzZSwKKwkgKiB0aGUgZHJpdmVyIGNhbiBxdWlyayB0aGUgYmVoYXZpb3IgYW5kIHNraXAgcmVhZGluZyB0aGUgbG9jYWwKKwkgKiBzdXBwb3J0ZWQgY29tbWFuZHMuCiAJICovCi0JaWYgKGhkZXYtPm1hbnVmYWN0dXJlciAhPSAzMSAmJiBoZGV2LT5oY2lfdmVyID4gQkxVRVRPT1RIX1ZFUl8xXzEpCisJaWYgKGhkZXYtPmhjaV92ZXIgPiBCTFVFVE9PVEhfVkVSXzFfMSAmJgorCSAgICAhdGVzdF9iaXQoSENJX1FVSVJLX0JST0tFTl9MT0NBTF9DT01NQU5EUywgJmhkZXYtPnF1aXJrcykpCiAJCWhjaV9yZXFfYWRkKHJlcSwgSENJX09QX1JFQURfTE9DQUxfQ09NTUFORFMsIDAsIE5VTEwpOwogCiAJaWYgKGxtcF9zc3BfY2FwYWJsZShoZGV2KSkgewpAQCAtMTU3MCw2ICs2MDksNyBAQAogCiAJCWlmICh0ZXN0X2JpdChIQ0lfU1NQX0VOQUJMRUQsICZoZGV2LT5kZXZfZmxhZ3MpKSB7CiAJCQl1OCBtb2RlID0gMHgwMTsKKwogCQkJaGNpX3JlcV9hZGQocmVxLCBIQ0lfT1BfV1JJVEVfU1NQX01PREUsCiAJCQkJICAgIHNpemVvZihtb2RlKSwgJm1vZGUpOwogCQl9IGVsc2UgewpAQCAtMTU4Miw4ICs2MjIsMTggQEAKIAkJfQogCX0KIAotCWlmIChsbXBfaW5xX3Jzc2lfY2FwYWJsZShoZGV2KSkKLQkJaGNpX3NldHVwX2lucXVpcnlfbW9kZShyZXEpOworCWlmIChsbXBfaW5xX3Jzc2lfY2FwYWJsZShoZGV2KSB8fAorCSAgICB0ZXN0X2JpdChIQ0lfUVVJUktfRklYVVBfSU5RVUlSWV9NT0RFLCAmaGRldi0+cXVpcmtzKSkgeworCQl1OCBtb2RlOworCisJCS8qIElmIEV4dGVuZGVkIElucXVpcnkgUmVzdWx0IGV2ZW50cyBhcmUgc3VwcG9ydGVkLCB0aGVuCisJCSAqIHRoZXkgYXJlIGNsZWFybHkgcHJlZmVycmVkIG92ZXIgSW5xdWlyeSBSZXN1bHQgd2l0aCBSU1NJCisJCSAqIGV2ZW50cy4KKwkJICovCisJCW1vZGUgPSBsbXBfZXh0X2lucV9jYXBhYmxlKGhkZXYpID8gMHgwMiA6IDB4MDE7CisKKwkJaGNpX3JlcV9hZGQocmVxLCBIQ0lfT1BfV1JJVEVfSU5RVUlSWV9NT0RFLCAxLCAmbW9kZSk7CisJfQogCiAJaWYgKGxtcF9pbnFfdHhfcHdyX2NhcGFibGUoaGRldikpCiAJCWhjaV9yZXFfYWRkKHJlcSwgSENJX09QX1JFQURfSU5RX1JTUF9UWF9QT1dFUiwgMCwgTlVMTCk7CkBAIC0xNjgyLDI3ICs3MzIsMTIgQEAKIAogCWhjaV9zZXR1cF9ldmVudF9tYXNrKHJlcSk7CiAKLQkvKiBTb21lIEJyb2FkY29tIGJhc2VkIEJsdWV0b290aCBjb250cm9sbGVycyBkbyBub3Qgc3VwcG9ydCB0aGUKLQkgKiBEZWxldGUgU3RvcmVkIExpbmsgS2V5IGNvbW1hbmQuIFRoZXkgYXJlIGNsZWFybHkgaW5kaWNhdGluZyBpdHMKLQkgKiBhYnNlbmNlIGluIHRoZSBiaXQgbWFzayBvZiBzdXBwb3J0ZWQgY29tbWFuZHMuCi0JICoKLQkgKiBDaGVjayB0aGUgc3VwcG9ydGVkIGNvbW1hbmRzIGFuZCBvbmx5IGlmIHRoZSB0aGUgY29tbWFuZCBpcyBtYXJrZWQKLQkgKiBhcyBzdXBwb3J0ZWQgc2VuZCBpdC4gSWYgbm90IHN1cHBvcnRlZCBhc3N1bWUgdGhhdCB0aGUgY29udHJvbGxlcgotCSAqIGRvZXMgbm90IGhhdmUgYWN0dWFsIHN1cHBvcnQgZm9yIHN0b3JlZCBsaW5rIGtleXMgd2hpY2ggbWFrZXMgdGhpcwotCSAqIGNvbW1hbmQgcmVkdW5kYW50IGFueXdheS4KLQkgKgotCSAqIFNvbWUgY29udHJvbGxlcnMgaW5kaWNhdGUgdGhhdCB0aGV5IHN1cHBvcnQgaGFuZGxpbmcgZGVsZXRpbmcKLQkgKiBzdG9yZWQgbGluayBrZXlzLCBidXQgdGhleSBkb24ndC4gVGhlIHF1aXJrIGxldHMgYSBkcml2ZXIKLQkgKiBqdXN0IGRpc2FibGUgdGhpcyBjb21tYW5kLgotCSAqLwotCWlmIChoZGV2LT5jb21tYW5kc1s2XSAmIDB4ODAgJiYKLQkgICAgIXRlc3RfYml0KEhDSV9RVUlSS19CUk9LRU5fU1RPUkVEX0xJTktfS0VZLCAmaGRldi0+cXVpcmtzKSkgewotCQlzdHJ1Y3QgaGNpX2NwX2RlbGV0ZV9zdG9yZWRfbGlua19rZXkgY3A7CisJaWYgKGhkZXYtPmNvbW1hbmRzWzZdICYgMHgyMCkgeworCQlzdHJ1Y3QgaGNpX2NwX3JlYWRfc3RvcmVkX2xpbmtfa2V5IGNwOwogCiAJCWJhY3B5KCZjcC5iZGFkZHIsIEJEQUREUl9BTlkpOwotCQljcC5kZWxldGVfYWxsID0gMHgwMTsKLQkJaGNpX3JlcV9hZGQocmVxLCBIQ0lfT1BfREVMRVRFX1NUT1JFRF9MSU5LX0tFWSwKLQkJCSAgICBzaXplb2YoY3ApLCAmY3ApOworCQljcC5yZWFkX2FsbCA9IDB4MDE7CisJCWhjaV9yZXFfYWRkKHJlcSwgSENJX09QX1JFQURfU1RPUkVEX0xJTktfS0VZLCBzaXplb2YoY3ApLCAmY3ApOwogCX0KIAogCWlmIChoZGV2LT5jb21tYW5kc1s1XSAmIDB4MTApCkBAIC0xNzM1LDYgKzc3MCwxMiBAQAogCQkJCQkJICogUGFyYW1ldGVyIFJlcXVlc3QKIAkJCQkJCSAqLwogCisJCS8qIElmIHRoZSBjb250cm9sbGVyIHN1cHBvcnRzIHRoZSBEYXRhIExlbmd0aCBFeHRlbnNpb24KKwkJICogZmVhdHVyZSwgZW5hYmxlIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50LgorCQkgKi8KKwkJaWYgKGhkZXYtPmxlX2ZlYXR1cmVzWzBdICYgSENJX0xFX0RBVEFfTEVOX0VYVCkKKwkJCWV2ZW50c1swXSB8PSAweDQwOwkvKiBMRSBEYXRhIExlbmd0aCBDaGFuZ2UgKi8KKwogCQkvKiBJZiB0aGUgY29udHJvbGxlciBzdXBwb3J0cyBFeHRlbmRlZCBTY2FubmVyIEZpbHRlcgogCQkgKiBQb2xpY2llcywgZW5hYmxlIHRoZSBjb3JyZXNwb25kaWcgZXZlbnQuCiAJCSAqLwpAQCAtMTc2NSw2ICs4MDYsMTQgQEAKIAkJCWhjaV9yZXFfYWRkKHJlcSwgSENJX09QX0xFX1JFQURfQURWX1RYX1BPV0VSLCAwLCBOVUxMKTsKIAkJfQogCisJCWlmIChoZGV2LT5sZV9mZWF0dXJlc1swXSAmIEhDSV9MRV9EQVRBX0xFTl9FWFQpIHsKKwkJCS8qIFJlYWQgTEUgTWF4aW11bSBEYXRhIExlbmd0aCAqLworCQkJaGNpX3JlcV9hZGQocmVxLCBIQ0lfT1BfTEVfUkVBRF9NQVhfREFUQV9MRU4sIDAsIE5VTEwpOworCisJCQkvKiBSZWFkIExFIFN1Z2dlc3RlZCBEZWZhdWx0IERhdGEgTGVuZ3RoICovCisJCQloY2lfcmVxX2FkZChyZXEsIEhDSV9PUF9MRV9SRUFEX0RFRl9EQVRBX0xFTiwgMCwgTlVMTCk7CisJCX0KKwogCQloY2lfc2V0X2xlX3N1cHBvcnQocmVxKTsKIAl9CiAKQEAgLTE3ODIsNiArODMxLDI5IEBACiB7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSByZXEtPmhkZXY7CiAKKwkvKiBTb21lIEJyb2FkY29tIGJhc2VkIEJsdWV0b290aCBjb250cm9sbGVycyBkbyBub3Qgc3VwcG9ydCB0aGUKKwkgKiBEZWxldGUgU3RvcmVkIExpbmsgS2V5IGNvbW1hbmQuIFRoZXkgYXJlIGNsZWFybHkgaW5kaWNhdGluZyBpdHMKKwkgKiBhYnNlbmNlIGluIHRoZSBiaXQgbWFzayBvZiBzdXBwb3J0ZWQgY29tbWFuZHMuCisJICoKKwkgKiBDaGVjayB0aGUgc3VwcG9ydGVkIGNvbW1hbmRzIGFuZCBvbmx5IGlmIHRoZSB0aGUgY29tbWFuZCBpcyBtYXJrZWQKKwkgKiBhcyBzdXBwb3J0ZWQgc2VuZCBpdC4gSWYgbm90IHN1cHBvcnRlZCBhc3N1bWUgdGhhdCB0aGUgY29udHJvbGxlcgorCSAqIGRvZXMgbm90IGhhdmUgYWN0dWFsIHN1cHBvcnQgZm9yIHN0b3JlZCBsaW5rIGtleXMgd2hpY2ggbWFrZXMgdGhpcworCSAqIGNvbW1hbmQgcmVkdW5kYW50IGFueXdheS4KKwkgKgorCSAqIFNvbWUgY29udHJvbGxlcnMgaW5kaWNhdGUgdGhhdCB0aGV5IHN1cHBvcnQgaGFuZGxpbmcgZGVsZXRpbmcKKwkgKiBzdG9yZWQgbGluayBrZXlzLCBidXQgdGhleSBkb24ndC4gVGhlIHF1aXJrIGxldHMgYSBkcml2ZXIKKwkgKiBqdXN0IGRpc2FibGUgdGhpcyBjb21tYW5kLgorCSAqLworCWlmIChoZGV2LT5jb21tYW5kc1s2XSAmIDB4ODAgJiYKKwkgICAgIXRlc3RfYml0KEhDSV9RVUlSS19CUk9LRU5fU1RPUkVEX0xJTktfS0VZLCAmaGRldi0+cXVpcmtzKSkgeworCQlzdHJ1Y3QgaGNpX2NwX2RlbGV0ZV9zdG9yZWRfbGlua19rZXkgY3A7CisKKwkJYmFjcHkoJmNwLmJkYWRkciwgQkRBRERSX0FOWSk7CisJCWNwLmRlbGV0ZV9hbGwgPSAweDAxOworCQloY2lfcmVxX2FkZChyZXEsIEhDSV9PUF9ERUxFVEVfU1RPUkVEX0xJTktfS0VZLAorCQkJICAgIHNpemVvZihjcCksICZjcCk7CisJfQorCiAJLyogU2V0IGV2ZW50IG1hc2sgcGFnZSAyIGlmIHRoZSBIQ0kgY29tbWFuZCBmb3IgaXQgaXMgc3VwcG9ydGVkICovCiAJaWYgKGhkZXYtPmNvbW1hbmRzWzIyXSAmIDB4MDQpCiAJCWhjaV9zZXRfZXZlbnRfbWFza19wYWdlXzIocmVxKTsKQEAgLTE3OTksOCArODcxLDEwIEBACiAJCWhjaV9yZXFfYWRkKHJlcSwgSENJX09QX1JFQURfU1lOQ19UUkFJTl9QQVJBTVMsIDAsIE5VTEwpOwogCiAJLyogRW5hYmxlIFNlY3VyZSBDb25uZWN0aW9ucyBpZiBzdXBwb3J0ZWQgYW5kIGNvbmZpZ3VyZWQgKi8KLQlpZiAoYnJlZHJfc2NfZW5hYmxlZChoZGV2KSkgeworCWlmICh0ZXN0X2JpdChIQ0lfU1NQX0VOQUJMRUQsICZoZGV2LT5kZXZfZmxhZ3MpICYmCisJICAgIGJyZWRyX3NjX2VuYWJsZWQoaGRldikpIHsKIAkJdTggc3VwcG9ydCA9IDB4MDE7CisKIAkJaGNpX3JlcV9hZGQocmVxLCBIQ0lfT1BfV1JJVEVfU0NfU1VQUE9SVCwKIAkJCSAgICBzaXplb2Yoc3VwcG9ydCksICZzdXBwb3J0KTsKIAl9CkBAIC0xODQxLDExMCArOTE1LDI5IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQkvKiBPbmx5IGNyZWF0ZSBkZWJ1Z2ZzIGVudHJpZXMgZHVyaW5nIHRoZSBpbml0aWFsIHNldHVwCi0JICogcGhhc2UgYW5kIG5vdCBldmVyeSB0aW1lIHRoZSBjb250cm9sbGVyIGdldHMgcG93ZXJlZCBvbi4KKwkvKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIHdoZW4gdGhlIGNvbnRyb2xsZXIgaXMgYWN0dWFsbHkgaW4KKwkgKiBjb25maWd1cmVkIHN0YXRlLiBXaGVuIHRoZSBjb250cm9sbGVyIGlzIG1hcmtlZCBhcyB1bmNvbmZpZ3VyZWQsCisJICogdGhpcyBpbml0aWFsaXphdGlvbiBwcm9jZWR1cmUgaXMgbm90IHJ1bi4KKwkgKgorCSAqIEl0IG1lYW5zIHRoYXQgaXQgaXMgcG9zc2libGUgdGhhdCBhIGNvbnRyb2xsZXIgcnVucyB0aHJvdWdoIGl0cworCSAqIHNldHVwIHBoYXNlIGFuZCB0aGVuIGRpc2NvdmVycyBtaXNzaW5nIHNldHRpbmdzLiBJZiB0aGF0IGlzIHRoZQorCSAqIGNhc2UsIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBiZSBjYWxsZWQuIEl0IHRoZW4gd2lsbCBvbmx5CisJICogYmUgY2FsbGVkIGR1cmluZyB0aGUgY29uZmlnIHBoYXNlLgorCSAqCisJICogU28gb25seSB3aGVuIGluIHNldHVwIHBoYXNlIG9yIGNvbmZpZyBwaGFzZSwgY3JlYXRlIHRoZSBkZWJ1Z2ZzCisJICogZW50cmllcyBhbmQgcmVnaXN0ZXIgdGhlIFNNUCBjaGFubmVscy4KIAkgKi8KLQlpZiAoIXRlc3RfYml0KEhDSV9TRVRVUCwgJmhkZXYtPmRldl9mbGFncykpCisJaWYgKCF0ZXN0X2JpdChIQ0lfU0VUVVAsICZoZGV2LT5kZXZfZmxhZ3MpICYmCisJICAgICF0ZXN0X2JpdChIQ0lfQ09ORklHLCAmaGRldi0+ZGV2X2ZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJmZWF0dXJlcyIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsIGhkZXYsCi0JCQkgICAgJmZlYXR1cmVzX2ZvcHMpOwotCWRlYnVnZnNfY3JlYXRlX3UxNigibWFudWZhY3R1cmVyIiwgMDQ0NCwgaGRldi0+ZGVidWdmcywKLQkJCSAgICZoZGV2LT5tYW51ZmFjdHVyZXIpOwotCWRlYnVnZnNfY3JlYXRlX3U4KCJoY2lfdmVyc2lvbiIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsICZoZGV2LT5oY2lfdmVyKTsKLQlkZWJ1Z2ZzX2NyZWF0ZV91MTYoImhjaV9yZXZpc2lvbiIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsICZoZGV2LT5oY2lfcmV2KTsKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkZXZpY2VfbGlzdCIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsIGhkZXYsCi0JCQkgICAgJmRldmljZV9saXN0X2ZvcHMpOwotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImJsYWNrbGlzdCIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsIGhkZXYsCi0JCQkgICAgJmJsYWNrbGlzdF9mb3BzKTsKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ1dWlkcyIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsIGhkZXYsICZ1dWlkc19mb3BzKTsKKwloY2lfZGVidWdmc19jcmVhdGVfY29tbW9uKGhkZXYpOwogCi0JZGVidWdmc19jcmVhdGVfZmlsZSgiY29ubl9pbmZvX21pbl9hZ2UiLCAwNjQ0LCBoZGV2LT5kZWJ1Z2ZzLCBoZGV2LAotCQkJICAgICZjb25uX2luZm9fbWluX2FnZV9mb3BzKTsKLQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjb25uX2luZm9fbWF4X2FnZSIsIDA2NDQsIGhkZXYtPmRlYnVnZnMsIGhkZXYsCi0JCQkgICAgJmNvbm5faW5mb19tYXhfYWdlX2ZvcHMpOworCWlmIChsbXBfYnJlZHJfY2FwYWJsZShoZGV2KSkKKwkJaGNpX2RlYnVnZnNfY3JlYXRlX2JyZWRyKGhkZXYpOwogCi0JaWYgKGxtcF9icmVkcl9jYXBhYmxlKGhkZXYpKSB7Ci0JCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImlucXVpcnlfY2FjaGUiLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLAotCQkJCSAgICBoZGV2LCAmaW5xdWlyeV9jYWNoZV9mb3BzKTsKLQkJZGVidWdmc19jcmVhdGVfZmlsZSgibGlua19rZXlzIiwgMDQwMCwgaGRldi0+ZGVidWdmcywKLQkJCQkgICAgaGRldiwgJmxpbmtfa2V5c19mb3BzKTsKLQkJZGVidWdmc19jcmVhdGVfZmlsZSgiZGV2X2NsYXNzIiwgMDQ0NCwgaGRldi0+ZGVidWdmcywKLQkJCQkgICAgaGRldiwgJmRldl9jbGFzc19mb3BzKTsKLQkJZGVidWdmc19jcmVhdGVfZmlsZSgidm9pY2Vfc2V0dGluZyIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsCi0JCQkJICAgIGhkZXYsICZ2b2ljZV9zZXR0aW5nX2ZvcHMpOwotCX0KLQotCWlmIChsbXBfc3NwX2NhcGFibGUoaGRldikpIHsKLQkJZGVidWdmc19jcmVhdGVfZmlsZSgiYXV0b19hY2NlcHRfZGVsYXkiLCAwNjQ0LCBoZGV2LT5kZWJ1Z2ZzLAotCQkJCSAgICBoZGV2LCAmYXV0b19hY2NlcHRfZGVsYXlfZm9wcyk7Ci0JCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImZvcmNlX3NjX3N1cHBvcnQiLCAwNjQ0LCBoZGV2LT5kZWJ1Z2ZzLAotCQkJCSAgICBoZGV2LCAmZm9yY2Vfc2Nfc3VwcG9ydF9mb3BzKTsKLQkJZGVidWdmc19jcmVhdGVfZmlsZSgic2Nfb25seV9tb2RlIiwgMDQ0NCwgaGRldi0+ZGVidWdmcywKLQkJCQkgICAgaGRldiwgJnNjX29ubHlfbW9kZV9mb3BzKTsKLQkJaWYgKGxtcF9sZV9jYXBhYmxlKGhkZXYpKQotCQkJZGVidWdmc19jcmVhdGVfZmlsZSgiZm9yY2VfbGVzY19zdXBwb3J0IiwgMDY0NCwKLQkJCQkJICAgIGhkZXYtPmRlYnVnZnMsIGhkZXYsCi0JCQkJCSAgICAmZm9yY2VfbGVzY19zdXBwb3J0X2ZvcHMpOwotCX0KLQotCWlmIChsbXBfc25pZmZfY2FwYWJsZShoZGV2KSkgewotCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpZGxlX3RpbWVvdXQiLCAwNjQ0LCBoZGV2LT5kZWJ1Z2ZzLAotCQkJCSAgICBoZGV2LCAmaWRsZV90aW1lb3V0X2ZvcHMpOwotCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzbmlmZl9taW5faW50ZXJ2YWwiLCAwNjQ0LCBoZGV2LT5kZWJ1Z2ZzLAotCQkJCSAgICBoZGV2LCAmc25pZmZfbWluX2ludGVydmFsX2ZvcHMpOwotCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzbmlmZl9tYXhfaW50ZXJ2YWwiLCAwNjQ0LCBoZGV2LT5kZWJ1Z2ZzLAotCQkJCSAgICBoZGV2LCAmc25pZmZfbWF4X2ludGVydmFsX2ZvcHMpOwotCX0KLQotCWlmIChsbXBfbGVfY2FwYWJsZShoZGV2KSkgewotCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpZGVudGl0eSIsIDA0MDAsIGhkZXYtPmRlYnVnZnMsCi0JCQkJICAgIGhkZXYsICZpZGVudGl0eV9mb3BzKTsKLQkJZGVidWdmc19jcmVhdGVfZmlsZSgicnBhX3RpbWVvdXQiLCAwNjQ0LCBoZGV2LT5kZWJ1Z2ZzLAotCQkJCSAgICBoZGV2LCAmcnBhX3RpbWVvdXRfZm9wcyk7Ci0JCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInJhbmRvbV9hZGRyZXNzIiwgMDQ0NCwgaGRldi0+ZGVidWdmcywKLQkJCQkgICAgaGRldiwgJnJhbmRvbV9hZGRyZXNzX2ZvcHMpOwotCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdGF0aWNfYWRkcmVzcyIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsCi0JCQkJICAgIGhkZXYsICZzdGF0aWNfYWRkcmVzc19mb3BzKTsKLQotCQkvKiBGb3IgY29udHJvbGxlcnMgd2l0aCBhIHB1YmxpYyBhZGRyZXNzLCBwcm92aWRlIGEgZGVidWcKLQkJICogb3B0aW9uIHRvIGZvcmNlIHRoZSB1c2FnZSBvZiB0aGUgY29uZmlndXJlZCBzdGF0aWMKLQkJICogYWRkcmVzcy4gQnkgZGVmYXVsdCB0aGUgcHVibGljIGFkZHJlc3MgaXMgdXNlZC4KLQkJICovCi0JCWlmIChiYWNtcCgmaGRldi0+YmRhZGRyLCBCREFERFJfQU5ZKSkKLQkJCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImZvcmNlX3N0YXRpY19hZGRyZXNzIiwgMDY0NCwKLQkJCQkJICAgIGhkZXYtPmRlYnVnZnMsIGhkZXYsCi0JCQkJCSAgICAmZm9yY2Vfc3RhdGljX2FkZHJlc3NfZm9wcyk7Ci0KLQkJZGVidWdmc19jcmVhdGVfdTgoIndoaXRlX2xpc3Rfc2l6ZSIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsCi0JCQkJICAmaGRldi0+bGVfd2hpdGVfbGlzdF9zaXplKTsKLQkJZGVidWdmc19jcmVhdGVfZmlsZSgid2hpdGVfbGlzdCIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsIGhkZXYsCi0JCQkJICAgICZ3aGl0ZV9saXN0X2ZvcHMpOwotCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpZGVudGl0eV9yZXNvbHZpbmdfa2V5cyIsIDA0MDAsCi0JCQkJICAgIGhkZXYtPmRlYnVnZnMsIGhkZXYsCi0JCQkJICAgICZpZGVudGl0eV9yZXNvbHZpbmdfa2V5c19mb3BzKTsKLQkJZGVidWdmc19jcmVhdGVfZmlsZSgibG9uZ190ZXJtX2tleXMiLCAwNDAwLCBoZGV2LT5kZWJ1Z2ZzLAotCQkJCSAgICBoZGV2LCAmbG9uZ190ZXJtX2tleXNfZm9wcyk7Ci0JCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImNvbm5fbWluX2ludGVydmFsIiwgMDY0NCwgaGRldi0+ZGVidWdmcywKLQkJCQkgICAgaGRldiwgJmNvbm5fbWluX2ludGVydmFsX2ZvcHMpOwotCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjb25uX21heF9pbnRlcnZhbCIsIDA2NDQsIGhkZXYtPmRlYnVnZnMsCi0JCQkJICAgIGhkZXYsICZjb25uX21heF9pbnRlcnZhbF9mb3BzKTsKLQkJZGVidWdmc19jcmVhdGVfZmlsZSgiY29ubl9sYXRlbmN5IiwgMDY0NCwgaGRldi0+ZGVidWdmcywKLQkJCQkgICAgaGRldiwgJmNvbm5fbGF0ZW5jeV9mb3BzKTsKLQkJZGVidWdmc19jcmVhdGVfZmlsZSgic3VwZXJ2aXNpb25fdGltZW91dCIsIDA2NDQsIGhkZXYtPmRlYnVnZnMsCi0JCQkJICAgIGhkZXYsICZzdXBlcnZpc2lvbl90aW1lb3V0X2ZvcHMpOwotCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJhZHZfY2hhbm5lbF9tYXAiLCAwNjQ0LCBoZGV2LT5kZWJ1Z2ZzLAotCQkJCSAgICBoZGV2LCAmYWR2X2NoYW5uZWxfbWFwX2ZvcHMpOwotCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJhZHZfbWluX2ludGVydmFsIiwgMDY0NCwgaGRldi0+ZGVidWdmcywKLQkJCQkgICAgaGRldiwgJmFkdl9taW5faW50ZXJ2YWxfZm9wcyk7Ci0JCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImFkdl9tYXhfaW50ZXJ2YWwiLCAwNjQ0LCBoZGV2LT5kZWJ1Z2ZzLAotCQkJCSAgICBoZGV2LCAmYWR2X21heF9pbnRlcnZhbF9mb3BzKTsKLQkJZGVidWdmc19jcmVhdGVfdTE2KCJkaXNjb3ZfaW50ZXJsZWF2ZWRfdGltZW91dCIsIDA2NDQsCi0JCQkJICAgaGRldi0+ZGVidWdmcywKLQkJCQkgICAmaGRldi0+ZGlzY292X2ludGVybGVhdmVkX3RpbWVvdXQpOwotCi0JCXNtcF9yZWdpc3RlcihoZGV2KTsKLQl9CisJaWYgKGxtcF9sZV9jYXBhYmxlKGhkZXYpKQorCQloY2lfZGVidWdmc19jcmVhdGVfbGUoaGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI2MjQsNiArMTYxNyw3IEBACiAJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmhkZXYtPnNlcnZpY2VfY2FjaGUpOwogCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZoZGV2LT5sZV9zY2FuX2Rpc2FibGUpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaGRldi0+bGVfc2Nhbl9yZXN0YXJ0KTsKIAogCWlmICh0ZXN0X2JpdChIQ0lfTUdNVCwgJmhkZXYtPmRldl9mbGFncykpCiAJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaGRldi0+cnBhX2V4cGlyZWQpOwpAQCAtMjYzNSw2ICsxNjI5LDggQEAKIAogCWhjaV9kZXZfbG9jayhoZGV2KTsKIAorCWhjaV9kaXNjb3Zlcnlfc2V0X3N0YXRlKGhkZXYsIERJU0NPVkVSWV9TVE9QUEVEKTsKKwogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEhDSV9BVVRPX09GRiwgJmhkZXYtPmRldl9mbGFncykpIHsKIAkJaWYgKGhkZXYtPmRldl90eXBlID09IEhDSV9CUkVEUikKIAkJCW1nbXRfcG93ZXJlZChoZGV2LCAwKTsKQEAgLTI2NDUsNiArMTY0MSw4IEBACiAJaGNpX2Nvbm5faGFzaF9mbHVzaChoZGV2KTsKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKIAorCXNtcF91bnJlZ2lzdGVyKGhkZXYpOworCiAJaGNpX25vdGlmeShoZGV2LCBIQ0lfREVWX0RPV04pOwogCiAJaWYgKGhkZXYtPmZsdXNoKQpAQCAtMjcyNCwzMiArMTcyMiwxNCBAQAogCXJldHVybiBlcnI7CiB9CiAKLWludCBoY2lfZGV2X3Jlc2V0KF9fdTE2IGRldikKK3N0YXRpYyBpbnQgaGNpX2Rldl9kb19yZXNldChzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0OwogCi0JaGRldiA9IGhjaV9kZXZfZ2V0KGRldik7Ci0JaWYgKCFoZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKKwlCVF9EQkcoIiVzICVwIiwgaGRldi0+bmFtZSwgaGRldik7CiAKIAloY2lfcmVxX2xvY2soaGRldik7CiAKLQlpZiAoIXRlc3RfYml0KEhDSV9VUCwgJmhkZXYtPmZsYWdzKSkgewotCQlyZXQgPSAtRU5FVERPV047Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoSENJX1VTRVJfQ0hBTk5FTCwgJmhkZXYtPmRldl9mbGFncykpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIGRvbmU7Ci0JfQotCi0JaWYgKHRlc3RfYml0KEhDSV9VTkNPTkZJR1VSRUQsICZoZGV2LT5kZXZfZmxhZ3MpKSB7Ci0JCXJldCA9IC1FT1BOT1RTVVBQOwotCQlnb3RvIGRvbmU7Ci0JfQotCiAJLyogRHJvcCBxdWV1ZXMgKi8KIAlza2JfcXVldWVfcHVyZ2UoJmhkZXYtPnJ4X3EpOwogCXNrYl9xdWV1ZV9wdXJnZSgmaGRldi0+Y21kX3EpOwpAQCAtMjc3MiwxMiArMTc1Miw0MSBAQAogCiAJcmV0ID0gX19oY2lfcmVxX3N5bmMoaGRldiwgaGNpX3Jlc2V0X3JlcSwgMCwgSENJX0lOSVRfVElNRU9VVCk7CiAKLWRvbmU6CiAJaGNpX3JlcV91bmxvY2soaGRldik7Ci0JaGNpX2Rldl9wdXQoaGRldik7CiAJcmV0dXJuIHJldDsKIH0KIAoraW50IGhjaV9kZXZfcmVzZXQoX191MTYgZGV2KQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2OworCWludCBlcnI7CisKKwloZGV2ID0gaGNpX2Rldl9nZXQoZGV2KTsKKwlpZiAoIWhkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCF0ZXN0X2JpdChIQ0lfVVAsICZoZGV2LT5mbGFncykpIHsKKwkJZXJyID0gLUVORVRET1dOOworCQlnb3RvIGRvbmU7CisJfQorCisJaWYgKHRlc3RfYml0KEhDSV9VU0VSX0NIQU5ORUwsICZoZGV2LT5kZXZfZmxhZ3MpKSB7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBkb25lOworCX0KKworCWlmICh0ZXN0X2JpdChIQ0lfVU5DT05GSUdVUkVELCAmaGRldi0+ZGV2X2ZsYWdzKSkgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBkb25lOworCX0KKworCWVyciA9IGhjaV9kZXZfZG9fcmVzZXQoaGRldik7CisKK2RvbmU6CisJaGNpX2Rldl9wdXQoaGRldik7CisJcmV0dXJuIGVycjsKK30KKwogaW50IGhjaV9kZXZfcmVzZXRfc3RhdChfX3UxNiBkZXYpCiB7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7CkBAIC0zMTQzLDYgKzIxNTIsMjQgQEAKIAloY2lfZGV2X2RvX2Nsb3NlKGhkZXYpOwogfQogCitzdGF0aWMgdm9pZCBoY2lfZXJyb3JfcmVzZXQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoY2lfZGV2LCBlcnJvcl9yZXNldCk7CisKKwlCVF9EQkcoIiVzIiwgaGRldi0+bmFtZSk7CisKKwlpZiAoaGRldi0+aHdfZXJyb3IpCisJCWhkZXYtPmh3X2Vycm9yKGhkZXYsIGhkZXYtPmh3X2Vycm9yX2NvZGUpOworCWVsc2UKKwkJQlRfRVJSKCIlcyBoYXJkd2FyZSBlcnJvciAweCUyLjJ4IiwgaGRldi0+bmFtZSwKKwkJICAgICAgIGhkZXYtPmh3X2Vycm9yX2NvZGUpOworCisJaWYgKGhjaV9kZXZfZG9fY2xvc2UoaGRldikpCisJCXJldHVybjsKKworCWhjaV9kZXZfZG9fb3BlbihoZGV2KTsKK30KKwogc3RhdGljIHZvaWQgaGNpX2Rpc2Nvdl9vZmYoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBoY2lfZGV2ICpoZGV2OwpAQCAtMzU1NSw5ICsyNTgyLDE1IEBACiAJaWYgKGhhc2gxOTIgJiYgcmFuZDE5MikgewogCQltZW1jcHkoZGF0YS0+aGFzaDE5MiwgaGFzaDE5Miwgc2l6ZW9mKGRhdGEtPmhhc2gxOTIpKTsKIAkJbWVtY3B5KGRhdGEtPnJhbmQxOTIsIHJhbmQxOTIsIHNpemVvZihkYXRhLT5yYW5kMTkyKSk7CisJCWlmIChoYXNoMjU2ICYmIHJhbmQyNTYpCisJCQlkYXRhLT5wcmVzZW50ID0gMHgwMzsKIAl9IGVsc2UgewogCQltZW1zZXQoZGF0YS0+aGFzaDE5MiwgMCwgc2l6ZW9mKGRhdGEtPmhhc2gxOTIpKTsKIAkJbWVtc2V0KGRhdGEtPnJhbmQxOTIsIDAsIHNpemVvZihkYXRhLT5yYW5kMTkyKSk7CisJCWlmIChoYXNoMjU2ICYmIHJhbmQyNTYpCisJCQlkYXRhLT5wcmVzZW50ID0gMHgwMjsKKwkJZWxzZQorCQkJZGF0YS0+cHJlc2VudCA9IDB4MDA7CiAJfQogCiAJaWYgKGhhc2gyNTYgJiYgcmFuZDI1NikgewpAQCAtMzU2Niw2ICsyNTk5LDggQEAKIAl9IGVsc2UgewogCQltZW1zZXQoZGF0YS0+aGFzaDI1NiwgMCwgc2l6ZW9mKGRhdGEtPmhhc2gyNTYpKTsKIAkJbWVtc2V0KGRhdGEtPnJhbmQyNTYsIDAsIHNpemVvZihkYXRhLT5yYW5kMjU2KSk7CisJCWlmIChoYXNoMTkyICYmIHJhbmQxOTIpCisJCQlkYXRhLT5wcmVzZW50ID0gMHgwMTsKIAl9CiAKIAlCVF9EQkcoIiVzIGZvciAlcE1SIiwgaGRldi0+bmFtZSwgYmRhZGRyKTsKQEAgLTM2NTksMjMgKzI2OTQsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgYm9vbCBpc19jb25uZWN0ZWQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGJkYWRkcl90ICphZGRyLCB1OCB0eXBlKQotewotCXN0cnVjdCBoY2lfY29ubiAqY29ubjsKLQotCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9iYShoZGV2LCBMRV9MSU5LLCBhZGRyKTsKLQlpZiAoIWNvbm4pCi0JCXJldHVybiBmYWxzZTsKLQotCWlmIChjb25uLT5kc3RfdHlwZSAhPSB0eXBlKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlpZiAoY29ubi0+c3RhdGUgIT0gQlRfQ09OTkVDVEVEKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQogLyogVGhpcyBmdW5jdGlvbiByZXF1aXJlcyB0aGUgY2FsbGVyIGhvbGRzIGhkZXYtPmxvY2sgKi8KIHN0cnVjdCBoY2lfY29ubl9wYXJhbXMgKmhjaV9wZW5kX2xlX2FjdGlvbl9sb29rdXAoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKIAkJCQkJCSAgYmRhZGRyX3QgKmFkZHIsIHU4IGFkZHJfdHlwZSkKQEAgLTM3MzEsNDcgKzI3NDksNiBAQAogCXJldHVybiBwYXJhbXM7CiB9CiAKLS8qIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhlIGNhbGxlciBob2xkcyBoZGV2LT5sb2NrICovCi1pbnQgaGNpX2Nvbm5fcGFyYW1zX3NldChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmFkZHIsIHU4IGFkZHJfdHlwZSwKLQkJCXU4IGF1dG9fY29ubmVjdCkKLXsKLQlzdHJ1Y3QgaGNpX2Nvbm5fcGFyYW1zICpwYXJhbXM7Ci0KLQlwYXJhbXMgPSBoY2lfY29ubl9wYXJhbXNfYWRkKGhkZXYsIGFkZHIsIGFkZHJfdHlwZSk7Ci0JaWYgKCFwYXJhbXMpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKHBhcmFtcy0+YXV0b19jb25uZWN0ID09IGF1dG9fY29ubmVjdCkKLQkJcmV0dXJuIDA7Ci0KLQlsaXN0X2RlbF9pbml0KCZwYXJhbXMtPmFjdGlvbik7Ci0KLQlzd2l0Y2ggKGF1dG9fY29ubmVjdCkgewotCWNhc2UgSENJX0FVVE9fQ09OTl9ESVNBQkxFRDoKLQljYXNlIEhDSV9BVVRPX0NPTk5fTElOS19MT1NTOgotCQloY2lfdXBkYXRlX2JhY2tncm91bmRfc2NhbihoZGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBIQ0lfQVVUT19DT05OX1JFUE9SVDoKLQkJbGlzdF9hZGQoJnBhcmFtcy0+YWN0aW9uLCAmaGRldi0+cGVuZF9sZV9yZXBvcnRzKTsKLQkJaGNpX3VwZGF0ZV9iYWNrZ3JvdW5kX3NjYW4oaGRldik7Ci0JCWJyZWFrOwotCWNhc2UgSENJX0FVVE9fQ09OTl9ESVJFQ1Q6Ci0JY2FzZSBIQ0lfQVVUT19DT05OX0FMV0FZUzoKLQkJaWYgKCFpc19jb25uZWN0ZWQoaGRldiwgYWRkciwgYWRkcl90eXBlKSkgewotCQkJbGlzdF9hZGQoJnBhcmFtcy0+YWN0aW9uLCAmaGRldi0+cGVuZF9sZV9jb25ucyk7Ci0JCQloY2lfdXBkYXRlX2JhY2tncm91bmRfc2NhbihoZGV2KTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQlwYXJhbXMtPmF1dG9fY29ubmVjdCA9IGF1dG9fY29ubmVjdDsKLQotCUJUX0RCRygiYWRkciAlcE1SICh0eXBlICV1KSBhdXRvX2Nvbm5lY3QgJXUiLCBhZGRyLCBhZGRyX3R5cGUsCi0JICAgICAgIGF1dG9fY29ubmVjdCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgaGNpX2Nvbm5fcGFyYW1zX2ZyZWUoc3RydWN0IGhjaV9jb25uX3BhcmFtcyAqcGFyYW1zKQogewogCWlmIChwYXJhbXMtPmNvbm4pIHsKQEAgLTM4MjgsNyArMjgwNSw3IEBACiAJQlRfREJHKCJBbGwgTEUgY29ubmVjdGlvbiBwYXJhbWV0ZXJzIHdlcmUgcmVtb3ZlZCIpOwogfQogCi1zdGF0aWMgdm9pZCBpbnF1aXJ5X2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMpCitzdGF0aWMgdm9pZCBpbnF1aXJ5X2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMsIHUxNiBvcGNvZGUpCiB7CiAJaWYgKHN0YXR1cykgewogCQlCVF9FUlIoIkZhaWxlZCB0byBzdGFydCBpbnF1aXJ5OiBzdGF0dXMgJWQiLCBzdGF0dXMpOwpAQCAtMzg0MCw3ICsyODE3LDggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGxlX3NjYW5fZGlzYWJsZV93b3JrX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMpCitzdGF0aWMgdm9pZCBsZV9zY2FuX2Rpc2FibGVfd29ya19jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzLAorCQkJCQkgIHUxNiBvcGNvZGUpCiB7CiAJLyogR2VuZXJhbCBpbnF1aXJ5IGFjY2VzcyBjb2RlIChHSUFDKSAqLwogCXU4IGxhcFszXSA9IHsgMHgzMywgMHg4YiwgMHg5ZSB9OwpAQCAtMzg1Myw2ICsyODMxLDggQEAKIAkJcmV0dXJuOwogCX0KIAorCWhkZXYtPmRpc2NvdmVyeS5zY2FuX3N0YXJ0ID0gMDsKKwogCXN3aXRjaCAoaGRldi0+ZGlzY292ZXJ5LnR5cGUpIHsKIAljYXNlIERJU0NPVl9UWVBFX0xFOgogCQloY2lfZGV2X2xvY2soaGRldik7CkBAIC0zODkyLDYgKzI4NzIsOCBAQAogCiAJQlRfREJHKCIlcyIsIGhkZXYtPm5hbWUpOwogCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZoZGV2LT5sZV9zY2FuX3Jlc3RhcnQpOworCiAJaGNpX3JlcV9pbml0KCZyZXEsIGhkZXYpOwogCiAJaGNpX3JlcV9hZGRfbGVfc2Nhbl9kaXNhYmxlKCZyZXEpOwpAQCAtMzkwMSwxMTAgKzI4ODMsNzIgQEAKIAkJQlRfRVJSKCJEaXNhYmxlIExFIHNjYW5uaW5nIHJlcXVlc3QgZmFpbGVkOiBlcnIgJWQiLCBlcnIpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfcmFuZG9tX2FkZHIoc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEsIGJkYWRkcl90ICpycGEpCitzdGF0aWMgdm9pZCBsZV9zY2FuX3Jlc3RhcnRfd29ya19jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzLAorCQkJCQkgIHUxNiBvcGNvZGUpCiB7Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSByZXEtPmhkZXY7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBkdXJhdGlvbiwgc2Nhbl9zdGFydCwgbm93OwogCi0JLyogSWYgd2UncmUgYWR2ZXJ0aXNpbmcgb3IgaW5pdGlhdGluZyBhbiBMRSBjb25uZWN0aW9uIHdlIGNhbid0Ci0JICogZ28gYWhlYWQgYW5kIGNoYW5nZSB0aGUgcmFuZG9tIGFkZHJlc3MgYXQgdGhpcyB0aW1lLiBUaGlzIGlzCi0JICogYmVjYXVzZSB0aGUgZXZlbnR1YWwgaW5pdGlhdG9yIGFkZHJlc3MgdXNlZCBmb3IgdGhlCi0JICogc3Vic2VxdWVudGx5IGNyZWF0ZWQgY29ubmVjdGlvbiB3aWxsIGJlIHVuZGVmaW5lZCAoc29tZQotCSAqIGNvbnRyb2xsZXJzIHVzZSB0aGUgbmV3IGFkZHJlc3MgYW5kIG90aGVycyB0aGUgb25lIHdlIGhhZAotCSAqIHdoZW4gdGhlIG9wZXJhdGlvbiBzdGFydGVkKS4KLQkgKgotCSAqIEluIHRoaXMga2luZCBvZiBzY2VuYXJpbyBza2lwIHRoZSB1cGRhdGUgYW5kIGxldCB0aGUgcmFuZG9tCi0JICogYWRkcmVzcyBiZSB1cGRhdGVkIGF0IHRoZSBuZXh0IGN5Y2xlLgotCSAqLwotCWlmICh0ZXN0X2JpdChIQ0lfTEVfQURWLCAmaGRldi0+ZGV2X2ZsYWdzKSB8fAotCSAgICBoY2lfY29ubl9oYXNoX2xvb2t1cF9zdGF0ZShoZGV2LCBMRV9MSU5LLCBCVF9DT05ORUNUKSkgewotCQlCVF9EQkcoIkRlZmVycmluZyByYW5kb20gYWRkcmVzcyB1cGRhdGUiKTsKLQkJc2V0X2JpdChIQ0lfUlBBX0VYUElSRUQsICZoZGV2LT5kZXZfZmxhZ3MpOworCUJUX0RCRygiJXMiLCBoZGV2LT5uYW1lKTsKKworCWlmIChzdGF0dXMpIHsKKwkJQlRfRVJSKCJGYWlsZWQgdG8gcmVzdGFydCBMRSBzY2FuOiBzdGF0dXMgJWQiLCBzdGF0dXMpOwogCQlyZXR1cm47CiAJfQogCi0JaGNpX3JlcV9hZGQocmVxLCBIQ0lfT1BfTEVfU0VUX1JBTkRPTV9BRERSLCA2LCBycGEpOworCWlmICghdGVzdF9iaXQoSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSLCAmaGRldi0+cXVpcmtzKSB8fAorCSAgICAhaGRldi0+ZGlzY292ZXJ5LnNjYW5fc3RhcnQpCisJCXJldHVybjsKKworCS8qIFdoZW4gdGhlIHNjYW4gd2FzIHN0YXJ0ZWQsIGhkZXYtPmxlX3NjYW5fZGlzYWJsZSBoYXMgYmVlbiBxdWV1ZWQKKwkgKiBhZnRlciBkdXJhdGlvbiBmcm9tIHNjYW5fc3RhcnQuIER1cmluZyBzY2FuIHJlc3RhcnQgdGhpcyBqb2IKKwkgKiBoYXMgYmVlbiBjYW5jZWxlZCwgYW5kIHdlIG5lZWQgdG8gcXVldWUgaXQgYWdhaW4gYWZ0ZXIgcHJvcGVyCisJICogdGltZW91dCwgdG8gbWFrZSBzdXJlIHRoYXQgc2NhbiBkb2VzIG5vdCBydW4gaW5kZWZpbml0ZWx5LgorCSAqLworCWR1cmF0aW9uID0gaGRldi0+ZGlzY292ZXJ5LnNjYW5fZHVyYXRpb247CisJc2Nhbl9zdGFydCA9IGhkZXYtPmRpc2NvdmVyeS5zY2FuX3N0YXJ0OworCW5vdyA9IGppZmZpZXM7CisJaWYgKG5vdyAtIHNjYW5fc3RhcnQgPD0gZHVyYXRpb24pIHsKKwkJaW50IGVsYXBzZWQ7CisKKwkJaWYgKG5vdyA+PSBzY2FuX3N0YXJ0KQorCQkJZWxhcHNlZCA9IG5vdyAtIHNjYW5fc3RhcnQ7CisJCWVsc2UKKwkJCWVsYXBzZWQgPSBVTE9OR19NQVggLSBzY2FuX3N0YXJ0ICsgbm93OworCisJCXRpbWVvdXQgPSBkdXJhdGlvbiAtIGVsYXBzZWQ7CisJfSBlbHNlIHsKKwkJdGltZW91dCA9IDA7CisJfQorCXF1ZXVlX2RlbGF5ZWRfd29yayhoZGV2LT53b3JrcXVldWUsCisJCQkgICAmaGRldi0+bGVfc2Nhbl9kaXNhYmxlLCB0aW1lb3V0KTsKIH0KIAotaW50IGhjaV91cGRhdGVfcmFuZG9tX2FkZHJlc3Moc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEsIGJvb2wgcmVxdWlyZV9wcml2YWN5LAotCQkJICAgICAgdTggKm93bl9hZGRyX3R5cGUpCitzdGF0aWMgdm9pZCBsZV9zY2FuX3Jlc3RhcnRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSByZXEtPmhkZXY7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGhjaV9kZXYsCisJCQkJCSAgICBsZV9zY2FuX3Jlc3RhcnQud29yayk7CisJc3RydWN0IGhjaV9yZXF1ZXN0IHJlcTsKKwlzdHJ1Y3QgaGNpX2NwX2xlX3NldF9zY2FuX2VuYWJsZSBjcDsKIAlpbnQgZXJyOwogCi0JLyogSWYgcHJpdmFjeSBpcyBlbmFibGVkIHVzZSBhIHJlc29sdmFibGUgcHJpdmF0ZSBhZGRyZXNzLiBJZgotCSAqIGN1cnJlbnQgUlBBIGhhcyBleHBpcmVkIG9yIHRoZXJlIGlzIHNvbWV0aGluZyBlbHNlIHRoYW4KLQkgKiB0aGUgY3VycmVudCBSUEEgaW4gdXNlLCB0aGVuIGdlbmVyYXRlIGEgbmV3IG9uZS4KLQkgKi8KLQlpZiAodGVzdF9iaXQoSENJX1BSSVZBQ1ksICZoZGV2LT5kZXZfZmxhZ3MpKSB7Ci0JCWludCB0bzsKKwlCVF9EQkcoIiVzIiwgaGRldi0+bmFtZSk7CiAKLQkJKm93bl9hZGRyX3R5cGUgPSBBRERSX0xFX0RFVl9SQU5ET007CisJLyogSWYgY29udHJvbGxlciBpcyBub3Qgc2Nhbm5pbmcgd2UgYXJlIGRvbmUuICovCisJaWYgKCF0ZXN0X2JpdChIQ0lfTEVfU0NBTiwgJmhkZXYtPmRldl9mbGFncykpCisJCXJldHVybjsKIAotCQlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChIQ0lfUlBBX0VYUElSRUQsICZoZGV2LT5kZXZfZmxhZ3MpICYmCi0JCSAgICAhYmFjbXAoJmhkZXYtPnJhbmRvbV9hZGRyLCAmaGRldi0+cnBhKSkKLQkJCXJldHVybiAwOworCWhjaV9yZXFfaW5pdCgmcmVxLCBoZGV2KTsKIAotCQllcnIgPSBzbXBfZ2VuZXJhdGVfcnBhKGhkZXYsIGhkZXYtPmlyaywgJmhkZXYtPnJwYSk7Ci0JCWlmIChlcnIgPCAwKSB7Ci0JCQlCVF9FUlIoIiVzIGZhaWxlZCB0byBnZW5lcmF0ZSBuZXcgUlBBIiwgaGRldi0+bmFtZSk7Ci0JCQlyZXR1cm4gZXJyOwotCQl9CisJaGNpX3JlcV9hZGRfbGVfc2Nhbl9kaXNhYmxlKCZyZXEpOwogCi0JCXNldF9yYW5kb21fYWRkcihyZXEsICZoZGV2LT5ycGEpOworCW1lbXNldCgmY3AsIDAsIHNpemVvZihjcCkpOworCWNwLmVuYWJsZSA9IExFX1NDQU5fRU5BQkxFOworCWNwLmZpbHRlcl9kdXAgPSBMRV9TQ0FOX0ZJTFRFUl9EVVBfRU5BQkxFOworCWhjaV9yZXFfYWRkKCZyZXEsIEhDSV9PUF9MRV9TRVRfU0NBTl9FTkFCTEUsIHNpemVvZihjcCksICZjcCk7CiAKLQkJdG8gPSBtc2Vjc190b19qaWZmaWVzKGhkZXYtPnJwYV90aW1lb3V0ICogMTAwMCk7Ci0JCXF1ZXVlX2RlbGF5ZWRfd29yayhoZGV2LT53b3JrcXVldWUsICZoZGV2LT5ycGFfZXhwaXJlZCwgdG8pOwotCi0JCXJldHVybiAwOwotCX0KLQotCS8qIEluIGNhc2Ugb2YgcmVxdWlyZWQgcHJpdmFjeSB3aXRob3V0IHJlc29sdmFibGUgcHJpdmF0ZSBhZGRyZXNzLAotCSAqIHVzZSBhbiBub24tcmVzb2x2YWJsZSBwcml2YXRlIGFkZHJlc3MuIFRoaXMgaXMgdXNlZnVsIGZvciBhY3RpdmUKLQkgKiBzY2FubmluZyBhbmQgbm9uLWNvbm5lY3RhYmxlIGFkdmVydGlzaW5nLgotCSAqLwotCWlmIChyZXF1aXJlX3ByaXZhY3kpIHsKLQkJYmRhZGRyX3QgbnJwYTsKLQotCQl3aGlsZSAodHJ1ZSkgewotCQkJLyogVGhlIG5vbi1yZXNvbHZhYmxlIHByaXZhdGUgYWRkcmVzcyBpcyBnZW5lcmF0ZWQKLQkJCSAqIGZyb20gcmFuZG9tIHNpeCBieXRlcyB3aXRoIHRoZSB0d28gbW9zdCBzaWduaWZpY2FudAotCQkJICogYml0cyBjbGVhcmVkLgotCQkJICovCi0JCQlnZXRfcmFuZG9tX2J5dGVzKCZucnBhLCA2KTsKLQkJCW5ycGEuYls1XSAmPSAweDNmOwotCi0JCQkvKiBUaGUgbm9uLXJlc29sdmFibGUgcHJpdmF0ZSBhZGRyZXNzIHNoYWxsIG5vdCBiZQotCQkJICogZXF1YWwgdG8gdGhlIHB1YmxpYyBhZGRyZXNzLgotCQkJICovCi0JCQlpZiAoYmFjbXAoJmhkZXYtPmJkYWRkciwgJm5ycGEpKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJKm93bl9hZGRyX3R5cGUgPSBBRERSX0xFX0RFVl9SQU5ET007Ci0JCXNldF9yYW5kb21fYWRkcihyZXEsICZucnBhKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogSWYgZm9yY2luZyBzdGF0aWMgYWRkcmVzcyBpcyBpbiB1c2Ugb3IgdGhlcmUgaXMgbm8gcHVibGljCi0JICogYWRkcmVzcyB1c2UgdGhlIHN0YXRpYyBhZGRyZXNzIGFzIHJhbmRvbSBhZGRyZXNzIChidXQgc2tpcAotCSAqIHRoZSBIQ0kgY29tbWFuZCBpZiB0aGUgY3VycmVudCByYW5kb20gYWRkcmVzcyBpcyBhbHJlYWR5IHRoZQotCSAqIHN0YXRpYyBvbmUuCi0JICovCi0JaWYgKHRlc3RfYml0KEhDSV9GT1JDRV9TVEFUSUNfQUREUiwgJmhkZXYtPmRiZ19mbGFncykgfHwKLQkgICAgIWJhY21wKCZoZGV2LT5iZGFkZHIsIEJEQUREUl9BTlkpKSB7Ci0JCSpvd25fYWRkcl90eXBlID0gQUREUl9MRV9ERVZfUkFORE9NOwotCQlpZiAoYmFjbXAoJmhkZXYtPnN0YXRpY19hZGRyLCAmaGRldi0+cmFuZG9tX2FkZHIpKQotCQkJaGNpX3JlcV9hZGQocmVxLCBIQ0lfT1BfTEVfU0VUX1JBTkRPTV9BRERSLCA2LAotCQkJCSAgICAmaGRldi0+c3RhdGljX2FkZHIpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBOZWl0aGVyIHByaXZhY3kgbm9yIHN0YXRpYyBhZGRyZXNzIGlzIGJlaW5nIHVzZWQgc28gdXNlIGEKLQkgKiBwdWJsaWMgYWRkcmVzcy4KLQkgKi8KLQkqb3duX2FkZHJfdHlwZSA9IEFERFJfTEVfREVWX1BVQkxJQzsKLQotCXJldHVybiAwOworCWVyciA9IGhjaV9yZXFfcnVuKCZyZXEsIGxlX3NjYW5fcmVzdGFydF93b3JrX2NvbXBsZXRlKTsKKwlpZiAoZXJyKQorCQlCVF9FUlIoIlJlc3RhcnQgTEUgc2NhbiByZXF1ZXN0IGZhaWxlZDogZXJyICVkIiwgZXJyKTsKIH0KIAogLyogQ29weSB0aGUgSWRlbnRpdHkgQWRkcmVzcyBvZiB0aGUgY29udHJvbGxlci4KQEAgLTQwMTUsMTIgKzI5NTksMTggQEAKICAqCiAgKiBGb3IgZGVidWdnaW5nIHB1cnBvc2VzIGl0IGlzIHBvc3NpYmxlIHRvIGZvcmNlIGNvbnRyb2xsZXJzIHdpdGggYQogICogcHVibGljIGFkZHJlc3MgdG8gdXNlIHRoZSBzdGF0aWMgcmFuZG9tIGFkZHJlc3MgaW5zdGVhZC4KKyAqCisgKiBJbiBjYXNlIEJSL0VEUiBoYXMgYmVlbiBkaXNhYmxlZCBvbiBhIGR1YWwtbW9kZSBjb250cm9sbGVyIGFuZAorICogdXNlcnNwYWNlIGhhcyBjb25maWd1cmVkIGEgc3RhdGljIGFkZHJlc3MsIHRoZW4gdGhhdCBhZGRyZXNzCisgKiBiZWNvbWVzIHRoZSBpZGVudGl0eSBhZGRyZXNzIGluc3RlYWQgb2YgdGhlIHB1YmxpYyBCUi9FRFIgYWRkcmVzcy4KICAqLwogdm9pZCBoY2lfY29weV9pZGVudGl0eV9hZGRyZXNzKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBiZGFkZHJfdCAqYmRhZGRyLAogCQkJICAgICAgIHU4ICpiZGFkZHJfdHlwZSkKIHsKIAlpZiAodGVzdF9iaXQoSENJX0ZPUkNFX1NUQVRJQ19BRERSLCAmaGRldi0+ZGJnX2ZsYWdzKSB8fAotCSAgICAhYmFjbXAoJmhkZXYtPmJkYWRkciwgQkRBRERSX0FOWSkpIHsKKwkgICAgIWJhY21wKCZoZGV2LT5iZGFkZHIsIEJEQUREUl9BTlkpIHx8CisJICAgICghdGVzdF9iaXQoSENJX0JSRURSX0VOQUJMRUQsICZoZGV2LT5kZXZfZmxhZ3MpICYmCisJICAgICBiYWNtcCgmaGRldi0+c3RhdGljX2FkZHIsIEJEQUREUl9BTlkpKSkgewogCQliYWNweShiZGFkZHIsICZoZGV2LT5zdGF0aWNfYWRkcik7CiAJCSpiZGFkZHJfdHlwZSA9IEFERFJfTEVfREVWX1JBTkRPTTsKIAl9IGVsc2UgewpAQCAtNDA1OSw2ICszMDA5LDEyIEBACiAJaGRldi0+bGVfY29ubl9tYXhfaW50ZXJ2YWwgPSAweDAwMzg7CiAJaGRldi0+bGVfY29ubl9sYXRlbmN5ID0gMHgwMDAwOwogCWhkZXYtPmxlX3N1cHZfdGltZW91dCA9IDB4MDAyYTsKKwloZGV2LT5sZV9kZWZfdHhfbGVuID0gMHgwMDFiOworCWhkZXYtPmxlX2RlZl90eF90aW1lID0gMHgwMTQ4OworCWhkZXYtPmxlX21heF90eF9sZW4gPSAweDAwMWI7CisJaGRldi0+bGVfbWF4X3R4X3RpbWUgPSAweDAxNDg7CisJaGRldi0+bGVfbWF4X3J4X2xlbiA9IDB4MDAxYjsKKwloZGV2LT5sZV9tYXhfcnhfdGltZSA9IDB4MDE0ODsKIAogCWhkZXYtPnJwYV90aW1lb3V0ID0gSENJX0RFRkFVTFRfUlBBX1RJTUVPVVQ7CiAJaGRldi0+ZGlzY292X2ludGVybGVhdmVkX3RpbWVvdXQgPSBESVNDT1ZfSU5URVJMRUFWRURfVElNRU9VVDsKQEAgLTQwODYsMTAgKzMwNDIsMTIgQEAKIAlJTklUX1dPUksoJmhkZXYtPmNtZF93b3JrLCBoY2lfY21kX3dvcmspOwogCUlOSVRfV09SSygmaGRldi0+dHhfd29yaywgaGNpX3R4X3dvcmspOwogCUlOSVRfV09SSygmaGRldi0+cG93ZXJfb24sIGhjaV9wb3dlcl9vbik7CisJSU5JVF9XT1JLKCZoZGV2LT5lcnJvcl9yZXNldCwgaGNpX2Vycm9yX3Jlc2V0KTsKIAogCUlOSVRfREVMQVlFRF9XT1JLKCZoZGV2LT5wb3dlcl9vZmYsIGhjaV9wb3dlcl9vZmYpOwogCUlOSVRfREVMQVlFRF9XT1JLKCZoZGV2LT5kaXNjb3Zfb2ZmLCBoY2lfZGlzY292X29mZik7CiAJSU5JVF9ERUxBWUVEX1dPUksoJmhkZXYtPmxlX3NjYW5fZGlzYWJsZSwgbGVfc2Nhbl9kaXNhYmxlX3dvcmspOworCUlOSVRfREVMQVlFRF9XT1JLKCZoZGV2LT5sZV9zY2FuX3Jlc3RhcnQsIGxlX3NjYW5fcmVzdGFydF93b3JrKTsKIAogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmhkZXYtPnJ4X3EpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmhkZXYtPmNtZF9xKTsKQEAgLTQyNTksOCArMzIxNyw2IEBACiAJCXJma2lsbF9kZXN0cm95KGhkZXYtPnJma2lsbCk7CiAJfQogCi0Jc21wX3VucmVnaXN0ZXIoaGRldik7Ci0KIAlkZXZpY2VfZGVsKCZoZGV2LT5kZXYpOwogCiAJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGhkZXYtPmRlYnVnZnMpOwpAQCAtNDUzOSw3NiArMzQ5NSwxMSBAQAogCX0KIH0KIAotdm9pZCBoY2lfcmVxX2luaXQoc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEsIHN0cnVjdCBoY2lfZGV2ICpoZGV2KQotewotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnJlcS0+Y21kX3EpOwotCXJlcS0+aGRldiA9IGhkZXY7Ci0JcmVxLT5lcnIgPSAwOwotfQotCi1pbnQgaGNpX3JlcV9ydW4oc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEsIGhjaV9yZXFfY29tcGxldGVfdCBjb21wbGV0ZSkKLXsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IHJlcS0+aGRldjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlCVF9EQkcoImxlbmd0aCAldSIsIHNrYl9xdWV1ZV9sZW4oJnJlcS0+Y21kX3EpKTsKLQotCS8qIElmIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyByZXF1ZXN0IGJ1aWxkaW5nLCByZW1vdmUgYWxsIEhDSQotCSAqIGNvbW1hbmRzIHF1ZXVlZCBvbiB0aGUgSENJIHJlcXVlc3QgcXVldWUuCi0JICovCi0JaWYgKHJlcS0+ZXJyKSB7Ci0JCXNrYl9xdWV1ZV9wdXJnZSgmcmVxLT5jbWRfcSk7Ci0JCXJldHVybiByZXEtPmVycjsKLQl9Ci0KLQkvKiBEbyBub3QgYWxsb3cgZW1wdHkgcmVxdWVzdHMgKi8KLQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZyZXEtPmNtZF9xKSkKLQkJcmV0dXJuIC1FTk9EQVRBOwotCi0Jc2tiID0gc2tiX3BlZWtfdGFpbCgmcmVxLT5jbWRfcSk7Ci0JYnRfY2Ioc2tiKS0+cmVxLmNvbXBsZXRlID0gY29tcGxldGU7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaGRldi0+Y21kX3EubG9jaywgZmxhZ3MpOwotCXNrYl9xdWV1ZV9zcGxpY2VfdGFpbCgmcmVxLT5jbWRfcSwgJmhkZXYtPmNtZF9xKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoZGV2LT5jbWRfcS5sb2NrLCBmbGFncyk7Ci0KLQlxdWV1ZV93b3JrKGhkZXYtPndvcmtxdWV1ZSwgJmhkZXYtPmNtZF93b3JrKTsKLQotCXJldHVybiAwOwotfQotCiBib29sIGhjaV9yZXFfcGVuZGluZyhzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKIAlyZXR1cm4gKGhkZXYtPnJlcV9zdGF0dXMgPT0gSENJX1JFUV9QRU5EKTsKIH0KIAotc3RhdGljIHN0cnVjdCBza19idWZmICpoY2lfcHJlcGFyZV9jbWQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHUxNiBvcGNvZGUsCi0JCQkJICAgICAgIHUzMiBwbGVuLCBjb25zdCB2b2lkICpwYXJhbSkKLXsKLQlpbnQgbGVuID0gSENJX0NPTU1BTkRfSERSX1NJWkUgKyBwbGVuOwotCXN0cnVjdCBoY2lfY29tbWFuZF9oZHIgKmhkcjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCi0Jc2tiID0gYnRfc2tiX2FsbG9jKGxlbiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiBOVUxMOwotCi0JaGRyID0gKHN0cnVjdCBoY2lfY29tbWFuZF9oZHIgKikgc2tiX3B1dChza2IsIEhDSV9DT01NQU5EX0hEUl9TSVpFKTsKLQloZHItPm9wY29kZSA9IGNwdV90b19sZTE2KG9wY29kZSk7Ci0JaGRyLT5wbGVuICAgPSBwbGVuOwotCi0JaWYgKHBsZW4pCi0JCW1lbWNweShza2JfcHV0KHNrYiwgcGxlbiksIHBhcmFtLCBwbGVuKTsKLQotCUJUX0RCRygic2tiIGxlbiAlZCIsIHNrYi0+bGVuKTsKLQotCWJ0X2NiKHNrYiktPnBrdF90eXBlID0gSENJX0NPTU1BTkRfUEtUOwotCWJ0X2NiKHNrYiktPm9wY29kZSA9IG9wY29kZTsKLQotCXJldHVybiBza2I7Ci19Ci0KIC8qIFNlbmQgSENJIGNvbW1hbmQgKi8KIGludCBoY2lfc2VuZF9jbWQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIF9fdTE2IG9wY29kZSwgX191MzIgcGxlbiwKIAkJIGNvbnN0IHZvaWQgKnBhcmFtKQpAQCAtNDYzNCw0MyArMzUyNSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFF1ZXVlIGEgY29tbWFuZCB0byBhbiBhc3luY2hyb25vdXMgSENJIHJlcXVlc3QgKi8KLXZvaWQgaGNpX3JlcV9hZGRfZXYoc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEsIHUxNiBvcGNvZGUsIHUzMiBwbGVuLAotCQkgICAgY29uc3Qgdm9pZCAqcGFyYW0sIHU4IGV2ZW50KQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gcmVxLT5oZGV2OwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQlCVF9EQkcoIiVzIG9wY29kZSAweCU0LjR4IHBsZW4gJWQiLCBoZGV2LT5uYW1lLCBvcGNvZGUsIHBsZW4pOwotCi0JLyogSWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHJlcXVlc3QgYnVpbGRpbmcsIHRoZXJlIGlzIG5vIHBvaW50IGluCi0JICogcXVldWVpbmcgdGhlIEhDSSBjb21tYW5kLiBXZSBjYW4gc2ltcGx5IHJldHVybi4KLQkgKi8KLQlpZiAocmVxLT5lcnIpCi0JCXJldHVybjsKLQotCXNrYiA9IGhjaV9wcmVwYXJlX2NtZChoZGV2LCBvcGNvZGUsIHBsZW4sIHBhcmFtKTsKLQlpZiAoIXNrYikgewotCQlCVF9FUlIoIiVzIG5vIG1lbW9yeSBmb3IgY29tbWFuZCAob3Bjb2RlIDB4JTQuNHgpIiwKLQkJICAgICAgIGhkZXYtPm5hbWUsIG9wY29kZSk7Ci0JCXJlcS0+ZXJyID0gLUVOT01FTTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChza2JfcXVldWVfZW1wdHkoJnJlcS0+Y21kX3EpKQotCQlidF9jYihza2IpLT5yZXEuc3RhcnQgPSB0cnVlOwotCi0JYnRfY2Ioc2tiKS0+cmVxLmV2ZW50ID0gZXZlbnQ7Ci0KLQlza2JfcXVldWVfdGFpbCgmcmVxLT5jbWRfcSwgc2tiKTsKLX0KLQotdm9pZCBoY2lfcmVxX2FkZChzdHJ1Y3QgaGNpX3JlcXVlc3QgKnJlcSwgdTE2IG9wY29kZSwgdTMyIHBsZW4sCi0JCSBjb25zdCB2b2lkICpwYXJhbSkKLXsKLQloY2lfcmVxX2FkZF9ldihyZXEsIG9wY29kZSwgcGxlbiwgcGFyYW0sIDApOwotfQotCiAvKiBHZXQgZGF0YSBmcm9tIHRoZSBwcmV2aW91c2x5IHNlbnQgY29tbWFuZCAqLwogdm9pZCAqaGNpX3NlbnRfY21kX2RhdGEoc3RydWN0IGhjaV9kZXYgKmhkZXYsIF9fdTE2IG9wY29kZSkKIHsKQEAgLTU0MjksNyArNDI4Myw3IEBACiAKIGNhbGxfY29tcGxldGU6CiAJaWYgKHJlcV9jb21wbGV0ZSkKLQkJcmVxX2NvbXBsZXRlKGhkZXYsIHN0YXR1cyk7CisJCXJlcV9jb21wbGV0ZShoZGV2LCBzdGF0dXMsIHN0YXR1cyA/IG9wY29kZSA6IEhDSV9PUF9OT1ApOwogfQogCiBzdGF0aWMgdm9pZCBoY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC01NTE4LDMwMiArNDM3MiwzIEBACiAJCX0KIAl9CiB9Ci0KLXZvaWQgaGNpX3JlcV9hZGRfbGVfc2Nhbl9kaXNhYmxlKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxKQotewotCXN0cnVjdCBoY2lfY3BfbGVfc2V0X3NjYW5fZW5hYmxlIGNwOwotCi0JbWVtc2V0KCZjcCwgMCwgc2l6ZW9mKGNwKSk7Ci0JY3AuZW5hYmxlID0gTEVfU0NBTl9ESVNBQkxFOwotCWhjaV9yZXFfYWRkKHJlcSwgSENJX09QX0xFX1NFVF9TQ0FOX0VOQUJMRSwgc2l6ZW9mKGNwKSwgJmNwKTsKLX0KLQotc3RhdGljIHZvaWQgYWRkX3RvX3doaXRlX2xpc3Qoc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEsCi0JCQkgICAgICBzdHJ1Y3QgaGNpX2Nvbm5fcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IGhjaV9jcF9sZV9hZGRfdG9fd2hpdGVfbGlzdCBjcDsKLQotCWNwLmJkYWRkcl90eXBlID0gcGFyYW1zLT5hZGRyX3R5cGU7Ci0JYmFjcHkoJmNwLmJkYWRkciwgJnBhcmFtcy0+YWRkcik7Ci0KLQloY2lfcmVxX2FkZChyZXEsIEhDSV9PUF9MRV9BRERfVE9fV0hJVEVfTElTVCwgc2l6ZW9mKGNwKSwgJmNwKTsKLX0KLQotc3RhdGljIHU4IHVwZGF0ZV93aGl0ZV9saXN0KHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxKQotewotCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gcmVxLT5oZGV2OwotCXN0cnVjdCBoY2lfY29ubl9wYXJhbXMgKnBhcmFtczsKLQlzdHJ1Y3QgYmRhZGRyX2xpc3QgKmI7Ci0JdWludDhfdCB3aGl0ZV9saXN0X2VudHJpZXMgPSAwOwotCi0JLyogR28gdGhyb3VnaCB0aGUgY3VycmVudCB3aGl0ZSBsaXN0IHByb2dyYW1tZWQgaW50byB0aGUKLQkgKiBjb250cm9sbGVyIG9uZSBieSBvbmUgYW5kIGNoZWNrIGlmIHRoYXQgYWRkcmVzcyBpcyBzdGlsbAotCSAqIGluIHRoZSBsaXN0IG9mIHBlbmRpbmcgY29ubmVjdGlvbnMgb3IgbGlzdCBvZiBkZXZpY2VzIHRvCi0JICogcmVwb3J0LiBJZiBub3QgcHJlc2VudCBpbiBlaXRoZXIgbGlzdCwgdGhlbiBxdWV1ZSB0aGUKLQkgKiBjb21tYW5kIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBjb250cm9sbGVyLgotCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYiwgJmhkZXYtPmxlX3doaXRlX2xpc3QsIGxpc3QpIHsKLQkJc3RydWN0IGhjaV9jcF9sZV9kZWxfZnJvbV93aGl0ZV9saXN0IGNwOwotCi0JCWlmIChoY2lfcGVuZF9sZV9hY3Rpb25fbG9va3VwKCZoZGV2LT5wZW5kX2xlX2Nvbm5zLAotCQkJCQkgICAgICAmYi0+YmRhZGRyLCBiLT5iZGFkZHJfdHlwZSkgfHwKLQkJICAgIGhjaV9wZW5kX2xlX2FjdGlvbl9sb29rdXAoJmhkZXYtPnBlbmRfbGVfcmVwb3J0cywKLQkJCQkJICAgICAgJmItPmJkYWRkciwgYi0+YmRhZGRyX3R5cGUpKSB7Ci0JCQl3aGl0ZV9saXN0X2VudHJpZXMrKzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJY3AuYmRhZGRyX3R5cGUgPSBiLT5iZGFkZHJfdHlwZTsKLQkJYmFjcHkoJmNwLmJkYWRkciwgJmItPmJkYWRkcik7Ci0KLQkJaGNpX3JlcV9hZGQocmVxLCBIQ0lfT1BfTEVfREVMX0ZST01fV0hJVEVfTElTVCwKLQkJCSAgICBzaXplb2YoY3ApLCAmY3ApOwotCX0KLQotCS8qIFNpbmNlIGFsbCBubyBsb25nZXIgdmFsaWQgd2hpdGUgbGlzdCBlbnRyaWVzIGhhdmUgYmVlbgotCSAqIHJlbW92ZWQsIHdhbGsgdGhyb3VnaCB0aGUgbGlzdCBvZiBwZW5kaW5nIGNvbm5lY3Rpb25zCi0JICogYW5kIGVuc3VyZSB0aGF0IGFueSBuZXcgZGV2aWNlIGdldHMgcHJvZ3JhbW1lZCBpbnRvCi0JICogdGhlIGNvbnRyb2xsZXIuCi0JICoKLQkgKiBJZiB0aGUgbGlzdCBvZiB0aGUgZGV2aWNlcyBpcyBsYXJnZXIgdGhhbiB0aGUgbGlzdCBvZgotCSAqIGF2YWlsYWJsZSB3aGl0ZSBsaXN0IGVudHJpZXMgaW4gdGhlIGNvbnRyb2xsZXIsIHRoZW4KLQkgKiBqdXN0IGFib3J0IGFuZCByZXR1cm4gZmlsZXIgcG9saWN5IHZhbHVlIHRvIG5vdCB1c2UgdGhlCi0JICogd2hpdGUgbGlzdC4KLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhcmFtcywgJmhkZXYtPnBlbmRfbGVfY29ubnMsIGFjdGlvbikgewotCQlpZiAoaGNpX2JkYWRkcl9saXN0X2xvb2t1cCgmaGRldi0+bGVfd2hpdGVfbGlzdCwKLQkJCQkJICAgJnBhcmFtcy0+YWRkciwgcGFyYW1zLT5hZGRyX3R5cGUpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHdoaXRlX2xpc3RfZW50cmllcyA+PSBoZGV2LT5sZV93aGl0ZV9saXN0X3NpemUpIHsKLQkJCS8qIFNlbGVjdCBmaWx0ZXIgcG9saWN5IHRvIGFjY2VwdCBhbGwgYWR2ZXJ0aXNpbmcgKi8KLQkJCXJldHVybiAweDAwOwotCQl9Ci0KLQkJaWYgKGhjaV9maW5kX2lya19ieV9hZGRyKGhkZXYsICZwYXJhbXMtPmFkZHIsCi0JCQkJCSBwYXJhbXMtPmFkZHJfdHlwZSkpIHsKLQkJCS8qIFdoaXRlIGxpc3QgY2FuIG5vdCBiZSB1c2VkIHdpdGggUlBBcyAqLwotCQkJcmV0dXJuIDB4MDA7Ci0JCX0KLQotCQl3aGl0ZV9saXN0X2VudHJpZXMrKzsKLQkJYWRkX3RvX3doaXRlX2xpc3QocmVxLCBwYXJhbXMpOwotCX0KLQotCS8qIEFmdGVyIGFkZGluZyBhbGwgbmV3IHBlbmRpbmcgY29ubmVjdGlvbnMsIHdhbGsgdGhyb3VnaAotCSAqIHRoZSBsaXN0IG9mIHBlbmRpbmcgcmVwb3J0cyBhbmQgYWxzbyBhZGQgdGhlc2UgdG8gdGhlCi0JICogd2hpdGUgbGlzdCBpZiB0aGVyZSBpcyBzdGlsbCBzcGFjZS4KLQkgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhcmFtcywgJmhkZXYtPnBlbmRfbGVfcmVwb3J0cywgYWN0aW9uKSB7Ci0JCWlmIChoY2lfYmRhZGRyX2xpc3RfbG9va3VwKCZoZGV2LT5sZV93aGl0ZV9saXN0LAotCQkJCQkgICAmcGFyYW1zLT5hZGRyLCBwYXJhbXMtPmFkZHJfdHlwZSkpCi0JCQljb250aW51ZTsKLQotCQlpZiAod2hpdGVfbGlzdF9lbnRyaWVzID49IGhkZXYtPmxlX3doaXRlX2xpc3Rfc2l6ZSkgewotCQkJLyogU2VsZWN0IGZpbHRlciBwb2xpY3kgdG8gYWNjZXB0IGFsbCBhZHZlcnRpc2luZyAqLwotCQkJcmV0dXJuIDB4MDA7Ci0JCX0KLQotCQlpZiAoaGNpX2ZpbmRfaXJrX2J5X2FkZHIoaGRldiwgJnBhcmFtcy0+YWRkciwKLQkJCQkJIHBhcmFtcy0+YWRkcl90eXBlKSkgewotCQkJLyogV2hpdGUgbGlzdCBjYW4gbm90IGJlIHVzZWQgd2l0aCBSUEFzICovCi0JCQlyZXR1cm4gMHgwMDsKLQkJfQotCi0JCXdoaXRlX2xpc3RfZW50cmllcysrOwotCQlhZGRfdG9fd2hpdGVfbGlzdChyZXEsIHBhcmFtcyk7Ci0JfQotCi0JLyogU2VsZWN0IGZpbHRlciBwb2xpY3kgdG8gdXNlIHdoaXRlIGxpc3QgKi8KLQlyZXR1cm4gMHgwMTsKLX0KLQotdm9pZCBoY2lfcmVxX2FkZF9sZV9wYXNzaXZlX3NjYW4oc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEpCi17Ci0Jc3RydWN0IGhjaV9jcF9sZV9zZXRfc2Nhbl9wYXJhbSBwYXJhbV9jcDsKLQlzdHJ1Y3QgaGNpX2NwX2xlX3NldF9zY2FuX2VuYWJsZSBlbmFibGVfY3A7Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSByZXEtPmhkZXY7Ci0JdTggb3duX2FkZHJfdHlwZTsKLQl1OCBmaWx0ZXJfcG9saWN5OwotCi0JLyogU2V0IHJlcXVpcmVfcHJpdmFjeSB0byBmYWxzZSBzaW5jZSBubyBTQ0FOX1JFUSBhcmUgc2VuZAotCSAqIGR1cmluZyBwYXNzaXZlIHNjYW5uaW5nLiBOb3QgdXNpbmcgYW4gbm9uLXJlc29sdmFibGUgYWRkcmVzcwotCSAqIGhlcmUgaXMgaW1wb3J0YW50IHNvIHRoYXQgcGVlciBkZXZpY2VzIHVzaW5nIGRpcmVjdAotCSAqIGFkdmVydGlzaW5nIHdpdGggb3VyIGFkZHJlc3Mgd2lsbCBiZSBjb3JyZWN0bHkgcmVwb3J0ZWQKLQkgKiBieSB0aGUgY29udHJvbGxlci4KLQkgKi8KLQlpZiAoaGNpX3VwZGF0ZV9yYW5kb21fYWRkcmVzcyhyZXEsIGZhbHNlLCAmb3duX2FkZHJfdHlwZSkpCi0JCXJldHVybjsKLQotCS8qIEFkZGluZyBvciByZW1vdmluZyBlbnRyaWVzIGZyb20gdGhlIHdoaXRlIGxpc3QgbXVzdAotCSAqIGhhcHBlbiBiZWZvcmUgZW5hYmxpbmcgc2Nhbm5pbmcuIFRoZSBjb250cm9sbGVyIGRvZXMKLQkgKiBub3QgYWxsb3cgd2hpdGUgbGlzdCBtb2RpZmljYXRpb24gd2hpbGUgc2Nhbm5pbmcuCi0JICovCi0JZmlsdGVyX3BvbGljeSA9IHVwZGF0ZV93aGl0ZV9saXN0KHJlcSk7Ci0KLQkvKiBXaGVuIHRoZSBjb250cm9sbGVyIGlzIHVzaW5nIHJhbmRvbSByZXNvbHZhYmxlIGFkZHJlc3NlcyBhbmQKLQkgKiB3aXRoIHRoYXQgaGF2aW5nIExFIHByaXZhY3kgZW5hYmxlZCwgdGhlbiBjb250cm9sbGVycyB3aXRoCi0JICogRXh0ZW5kZWQgU2Nhbm5lciBGaWx0ZXIgUG9saWNpZXMgc3VwcG9ydCBjYW4gbm93IGVuYWJsZSBzdXBwb3J0Ci0JICogZm9yIGhhbmRsaW5nIGRpcmVjdGVkIGFkdmVydGlzaW5nLgotCSAqCi0JICogU28gaW5zdGVhZCBvZiB1c2luZyBmaWx0ZXIgcG9saWNlcyAweDAwIChubyB3aGl0ZWxpc3QpCi0JICogYW5kIDB4MDEgKHdoaXRlbGlzdCBlbmFibGVkKSB1c2UgdGhlIG5ldyBmaWx0ZXIgcG9saWNpZXMKLQkgKiAweDAyIChubyB3aGl0ZWxpc3QpIGFuZCAweDAzICh3aGl0ZWxpc3QgZW5hYmxlZCkuCi0JICovCi0JaWYgKHRlc3RfYml0KEhDSV9QUklWQUNZLCAmaGRldi0+ZGV2X2ZsYWdzKSAmJgotCSAgICAoaGRldi0+bGVfZmVhdHVyZXNbMF0gJiBIQ0lfTEVfRVhUX1NDQU5fUE9MSUNZKSkKLQkJZmlsdGVyX3BvbGljeSB8PSAweDAyOwotCi0JbWVtc2V0KCZwYXJhbV9jcCwgMCwgc2l6ZW9mKHBhcmFtX2NwKSk7Ci0JcGFyYW1fY3AudHlwZSA9IExFX1NDQU5fUEFTU0lWRTsKLQlwYXJhbV9jcC5pbnRlcnZhbCA9IGNwdV90b19sZTE2KGhkZXYtPmxlX3NjYW5faW50ZXJ2YWwpOwotCXBhcmFtX2NwLndpbmRvdyA9IGNwdV90b19sZTE2KGhkZXYtPmxlX3NjYW5fd2luZG93KTsKLQlwYXJhbV9jcC5vd25fYWRkcmVzc190eXBlID0gb3duX2FkZHJfdHlwZTsKLQlwYXJhbV9jcC5maWx0ZXJfcG9saWN5ID0gZmlsdGVyX3BvbGljeTsKLQloY2lfcmVxX2FkZChyZXEsIEhDSV9PUF9MRV9TRVRfU0NBTl9QQVJBTSwgc2l6ZW9mKHBhcmFtX2NwKSwKLQkJICAgICZwYXJhbV9jcCk7Ci0KLQltZW1zZXQoJmVuYWJsZV9jcCwgMCwgc2l6ZW9mKGVuYWJsZV9jcCkpOwotCWVuYWJsZV9jcC5lbmFibGUgPSBMRV9TQ0FOX0VOQUJMRTsKLQllbmFibGVfY3AuZmlsdGVyX2R1cCA9IExFX1NDQU5fRklMVEVSX0RVUF9FTkFCTEU7Ci0JaGNpX3JlcV9hZGQocmVxLCBIQ0lfT1BfTEVfU0VUX1NDQU5fRU5BQkxFLCBzaXplb2YoZW5hYmxlX2NwKSwKLQkJICAgICZlbmFibGVfY3ApOwotfQotCi1zdGF0aWMgdm9pZCB1cGRhdGVfYmFja2dyb3VuZF9zY2FuX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMpCi17Ci0JaWYgKHN0YXR1cykKLQkJQlRfREJHKCJIQ0kgcmVxdWVzdCBmYWlsZWQgdG8gdXBkYXRlIGJhY2tncm91bmQgc2Nhbm5pbmc6ICIKLQkJICAgICAgICJzdGF0dXMgMHglMi4yeCIsIHN0YXR1cyk7Ci19Ci0KLS8qIFRoaXMgZnVuY3Rpb24gY29udHJvbHMgdGhlIGJhY2tncm91bmQgc2Nhbm5pbmcgYmFzZWQgb24gaGRldi0+cGVuZF9sZV9jb25ucwotICogbGlzdC4gSWYgdGhlcmUgYXJlIHBlbmRpbmcgTEUgY29ubmVjdGlvbiB3ZSBzdGFydCB0aGUgYmFja2dyb3VuZCBzY2FubmluZywKLSAqIG90aGVyd2lzZSB3ZSBzdG9wIGl0LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMgdGhlIGNhbGxlciBob2xkcyBoZGV2LT5sb2NrLgotICovCi12b2lkIGhjaV91cGRhdGVfYmFja2dyb3VuZF9zY2FuKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQotewotCXN0cnVjdCBoY2lfcmVxdWVzdCByZXE7Ci0Jc3RydWN0IGhjaV9jb25uICpjb25uOwotCWludCBlcnI7Ci0KLQlpZiAoIXRlc3RfYml0KEhDSV9VUCwgJmhkZXYtPmZsYWdzKSB8fAotCSAgICB0ZXN0X2JpdChIQ0lfSU5JVCwgJmhkZXYtPmZsYWdzKSB8fAotCSAgICB0ZXN0X2JpdChIQ0lfU0VUVVAsICZoZGV2LT5kZXZfZmxhZ3MpIHx8Ci0JICAgIHRlc3RfYml0KEhDSV9DT05GSUcsICZoZGV2LT5kZXZfZmxhZ3MpIHx8Ci0JICAgIHRlc3RfYml0KEhDSV9BVVRPX09GRiwgJmhkZXYtPmRldl9mbGFncykgfHwKLQkgICAgdGVzdF9iaXQoSENJX1VOUkVHSVNURVIsICZoZGV2LT5kZXZfZmxhZ3MpKQotCQlyZXR1cm47Ci0KLQkvKiBObyBwb2ludCBpbiBkb2luZyBzY2FubmluZyBpZiBMRSBzdXBwb3J0IGhhc24ndCBiZWVuIGVuYWJsZWQgKi8KLQlpZiAoIXRlc3RfYml0KEhDSV9MRV9FTkFCTEVELCAmaGRldi0+ZGV2X2ZsYWdzKSkKLQkJcmV0dXJuOwotCi0JLyogSWYgZGlzY292ZXJ5IGlzIGFjdGl2ZSBkb24ndCBpbnRlcmZlcmUgd2l0aCBpdCAqLwotCWlmIChoZGV2LT5kaXNjb3Zlcnkuc3RhdGUgIT0gRElTQ09WRVJZX1NUT1BQRUQpCi0JCXJldHVybjsKLQotCS8qIFJlc2V0IFJTU0kgYW5kIFVVSUQgZmlsdGVycyB3aGVuIHN0YXJ0aW5nIGJhY2tncm91bmQgc2Nhbm5pbmcKLQkgKiBzaW5jZSB0aGVzZSBmaWx0ZXJzIGFyZSBtZWFudCBmb3Igc2VydmljZSBkaXNjb3Zlcnkgb25seS4KLQkgKgotCSAqIFRoZSBTdGFydCBEaXNjb3ZlcnkgYW5kIFN0YXJ0IFNlcnZpY2UgRGlzY292ZXJ5IG9wZXJhdGlvbnMKLQkgKiBlbnN1cmUgdG8gc2V0IHByb3BlciB2YWx1ZXMgZm9yIFJTU0kgdGhyZXNob2xkIGFuZCBVVUlECi0JICogZmlsdGVyIGxpc3QuIFNvIGl0IGlzIHNhZmUgdG8ganVzdCByZXNldCB0aGVtIGhlcmUuCi0JICovCi0JaGNpX2Rpc2NvdmVyeV9maWx0ZXJfY2xlYXIoaGRldik7Ci0KLQloY2lfcmVxX2luaXQoJnJlcSwgaGRldik7Ci0KLQlpZiAobGlzdF9lbXB0eSgmaGRldi0+cGVuZF9sZV9jb25ucykgJiYKLQkgICAgbGlzdF9lbXB0eSgmaGRldi0+cGVuZF9sZV9yZXBvcnRzKSkgewotCQkvKiBJZiB0aGVyZSBpcyBubyBwZW5kaW5nIExFIGNvbm5lY3Rpb25zIG9yIGRldmljZXMKLQkJICogdG8gYmUgc2Nhbm5lZCBmb3IsIHdlIHNob3VsZCBzdG9wIHRoZSBiYWNrZ3JvdW5kCi0JCSAqIHNjYW5uaW5nLgotCQkgKi8KLQotCQkvKiBJZiBjb250cm9sbGVyIGlzIG5vdCBzY2FubmluZyB3ZSBhcmUgZG9uZS4gKi8KLQkJaWYgKCF0ZXN0X2JpdChIQ0lfTEVfU0NBTiwgJmhkZXYtPmRldl9mbGFncykpCi0JCQlyZXR1cm47Ci0KLQkJaGNpX3JlcV9hZGRfbGVfc2Nhbl9kaXNhYmxlKCZyZXEpOwotCi0JCUJUX0RCRygiJXMgc3RvcHBpbmcgYmFja2dyb3VuZCBzY2FubmluZyIsIGhkZXYtPm5hbWUpOwotCX0gZWxzZSB7Ci0JCS8qIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBwZW5kaW5nIExFIGNvbm5lY3Rpb24sIHdlIHNob3VsZAotCQkgKiBrZWVwIHRoZSBiYWNrZ3JvdW5kIHNjYW4gcnVubmluZy4KLQkJICovCi0KLQkJLyogSWYgY29udHJvbGxlciBpcyBjb25uZWN0aW5nLCB3ZSBzaG91bGQgbm90IHN0YXJ0IHNjYW5uaW5nCi0JCSAqIHNpbmNlIHNvbWUgY29udHJvbGxlcnMgYXJlIG5vdCBhYmxlIHRvIHNjYW4gYW5kIGNvbm5lY3QgYXQKLQkJICogdGhlIHNhbWUgdGltZS4KLQkJICovCi0JCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9zdGF0ZShoZGV2LCBMRV9MSU5LLCBCVF9DT05ORUNUKTsKLQkJaWYgKGNvbm4pCi0JCQlyZXR1cm47Ci0KLQkJLyogSWYgY29udHJvbGxlciBpcyBjdXJyZW50bHkgc2Nhbm5pbmcsIHdlIHN0b3AgaXQgdG8gZW5zdXJlIHdlCi0JCSAqIGRvbid0IG1pc3MgYW55IGFkdmVydGlzaW5nIChkdWUgdG8gZHVwbGljYXRlcyBmaWx0ZXIpLgotCQkgKi8KLQkJaWYgKHRlc3RfYml0KEhDSV9MRV9TQ0FOLCAmaGRldi0+ZGV2X2ZsYWdzKSkKLQkJCWhjaV9yZXFfYWRkX2xlX3NjYW5fZGlzYWJsZSgmcmVxKTsKLQotCQloY2lfcmVxX2FkZF9sZV9wYXNzaXZlX3NjYW4oJnJlcSk7Ci0KLQkJQlRfREJHKCIlcyBzdGFydGluZyBiYWNrZ3JvdW5kIHNjYW5uaW5nIiwgaGRldi0+bmFtZSk7Ci0JfQotCi0JZXJyID0gaGNpX3JlcV9ydW4oJnJlcSwgdXBkYXRlX2JhY2tncm91bmRfc2Nhbl9jb21wbGV0ZSk7Ci0JaWYgKGVycikKLQkJQlRfRVJSKCJGYWlsZWQgdG8gcnVuIEhDSSByZXF1ZXN0OiBlcnIgJWQiLCBlcnIpOwotfQotCi1zdGF0aWMgYm9vbCBkaXNjb25uZWN0ZWRfd2hpdGVsaXN0X2VudHJpZXMoc3RydWN0IGhjaV9kZXYgKmhkZXYpCi17Ci0Jc3RydWN0IGJkYWRkcl9saXN0ICpiOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShiLCAmaGRldi0+d2hpdGVsaXN0LCBsaXN0KSB7Ci0JCXN0cnVjdCBoY2lfY29ubiAqY29ubjsKLQotCQljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgQUNMX0xJTkssICZiLT5iZGFkZHIpOwotCQlpZiAoIWNvbm4pCi0JCQlyZXR1cm4gdHJ1ZTsKLQotCQlpZiAoY29ubi0+c3RhdGUgIT0gQlRfQ09OTkVDVEVEICYmIGNvbm4tPnN0YXRlICE9IEJUX0NPTkZJRykKLQkJCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBoY2lfdXBkYXRlX3BhZ2Vfc2NhbihzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEpCi17Ci0JdTggc2NhbjsKLQotCWlmICghdGVzdF9iaXQoSENJX0JSRURSX0VOQUJMRUQsICZoZGV2LT5kZXZfZmxhZ3MpKQotCQlyZXR1cm47Ci0KLQlpZiAoIWhkZXZfaXNfcG93ZXJlZChoZGV2KSkKLQkJcmV0dXJuOwotCi0JaWYgKG1nbXRfcG93ZXJpbmdfZG93bihoZGV2KSkKLQkJcmV0dXJuOwotCi0JaWYgKHRlc3RfYml0KEhDSV9DT05ORUNUQUJMRSwgJmhkZXYtPmRldl9mbGFncykgfHwKLQkgICAgZGlzY29ubmVjdGVkX3doaXRlbGlzdF9lbnRyaWVzKGhkZXYpKQotCQlzY2FuID0gU0NBTl9QQUdFOwotCWVsc2UKLQkJc2NhbiA9IFNDQU5fRElTQUJMRUQ7Ci0KLQlpZiAodGVzdF9iaXQoSENJX1BTQ0FOLCAmaGRldi0+ZmxhZ3MpID09ICEhKHNjYW4gJiBTQ0FOX1BBR0UpKQotCQlyZXR1cm47Ci0KLQlpZiAodGVzdF9iaXQoSENJX0RJU0NPVkVSQUJMRSwgJmhkZXYtPmRldl9mbGFncykpCi0JCXNjYW4gfD0gU0NBTl9JTlFVSVJZOwotCi0JaWYgKHJlcSkKLQkJaGNpX3JlcV9hZGQocmVxLCBIQ0lfT1BfV1JJVEVfU0NBTl9FTkFCTEUsIDEsICZzY2FuKTsKLQllbHNlCi0JCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfV1JJVEVfU0NBTl9FTkFCTEUsIDEsICZzY2FuKTsKLX0KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2RlYnVnZnMuYyBiL25ldC9ibHVldG9vdGgvaGNpX2RlYnVnZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTI2MWU1Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZGVidWdmcy5jCkBAIC0wLDAgKzEsMTA1NiBAQAorLyoKKyAgIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAorCisgICBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZCisgICBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUworICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworICAgQUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJQUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLAorICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSBJUyBESVNDTEFJTUVELgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKworI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CisjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgorCisjaW5jbHVkZSAiaGNpX2RlYnVnZnMuaCIKKworc3RhdGljIGludCBmZWF0dXJlc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZi0+cHJpdmF0ZTsKKwl1OCBwOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCWZvciAocCA9IDA7IHAgPCBIQ0lfTUFYX1BBR0VTICYmIHAgPD0gaGRldi0+bWF4X3BhZ2U7IHArKykgeworCQlzZXFfcHJpbnRmKGYsICIlMnU6IDB4JTIuMnggMHglMi4yeCAweCUyLjJ4IDB4JTIuMnggIgorCQkJICAgIjB4JTIuMnggMHglMi4yeCAweCUyLjJ4IDB4JTIuMnhcbiIsIHAsCisJCQkgICBoZGV2LT5mZWF0dXJlc1twXVswXSwgaGRldi0+ZmVhdHVyZXNbcF1bMV0sCisJCQkgICBoZGV2LT5mZWF0dXJlc1twXVsyXSwgaGRldi0+ZmVhdHVyZXNbcF1bM10sCisJCQkgICBoZGV2LT5mZWF0dXJlc1twXVs0XSwgaGRldi0+ZmVhdHVyZXNbcF1bNV0sCisJCQkgICBoZGV2LT5mZWF0dXJlc1twXVs2XSwgaGRldi0+ZmVhdHVyZXNbcF1bN10pOworCX0KKwlpZiAobG1wX2xlX2NhcGFibGUoaGRldikpCisJCXNlcV9wcmludGYoZiwgIkxFOiAweCUyLjJ4IDB4JTIuMnggMHglMi4yeCAweCUyLjJ4ICIKKwkJCSAgICIweCUyLjJ4IDB4JTIuMnggMHglMi4yeCAweCUyLjJ4XG4iLAorCQkJICAgaGRldi0+bGVfZmVhdHVyZXNbMF0sIGhkZXYtPmxlX2ZlYXR1cmVzWzFdLAorCQkJICAgaGRldi0+bGVfZmVhdHVyZXNbMl0sIGhkZXYtPmxlX2ZlYXR1cmVzWzNdLAorCQkJICAgaGRldi0+bGVfZmVhdHVyZXNbNF0sIGhkZXYtPmxlX2ZlYXR1cmVzWzVdLAorCQkJICAgaGRldi0+bGVfZmVhdHVyZXNbNl0sIGhkZXYtPmxlX2ZlYXR1cmVzWzddKTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZlYXR1cmVzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGZlYXR1cmVzX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmZWF0dXJlc19mb3BzID0geworCS5vcGVuCQk9IGZlYXR1cmVzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgZGV2aWNlX2xpc3Rfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGYtPnByaXZhdGU7CisJc3RydWN0IGhjaV9jb25uX3BhcmFtcyAqcDsKKwlzdHJ1Y3QgYmRhZGRyX2xpc3QgKmI7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShiLCAmaGRldi0+d2hpdGVsaXN0LCBsaXN0KQorCQlzZXFfcHJpbnRmKGYsICIlcE1SICh0eXBlICV1KVxuIiwgJmItPmJkYWRkciwgYi0+YmRhZGRyX3R5cGUpOworCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmhkZXYtPmxlX2Nvbm5fcGFyYW1zLCBsaXN0KSB7CisJCXNlcV9wcmludGYoZiwgIiVwTVIgKHR5cGUgJXUpICV1XG4iLCAmcC0+YWRkciwgcC0+YWRkcl90eXBlLAorCQkJICAgcC0+YXV0b19jb25uZWN0KTsKKwl9CisJaGNpX2Rldl91bmxvY2soaGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZXZpY2VfbGlzdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkZXZpY2VfbGlzdF9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGV2aWNlX2xpc3RfZm9wcyA9IHsKKwkub3BlbgkJPSBkZXZpY2VfbGlzdF9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IGJsYWNrbGlzdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGYtPnByaXZhdGU7CisJc3RydWN0IGJkYWRkcl9saXN0ICpiOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYiwgJmhkZXYtPmJsYWNrbGlzdCwgbGlzdCkKKwkJc2VxX3ByaW50ZihmLCAiJXBNUiAodHlwZSAldSlcbiIsICZiLT5iZGFkZHIsIGItPmJkYWRkcl90eXBlKTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJsYWNrbGlzdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBibGFja2xpc3Rfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGJsYWNrbGlzdF9mb3BzID0geworCS5vcGVuCQk9IGJsYWNrbGlzdF9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHV1aWRzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgYnRfdXVpZCAqdXVpZDsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHV1aWQsICZoZGV2LT51dWlkcywgbGlzdCkgeworCQl1OCBpLCB2YWxbMTZdOworCisJCS8qIFRoZSBCbHVldG9vdGggVVVJRCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiBiaWcgZW5kaWFuLAorCQkgKiBidXQgd2l0aCByZXZlcnNlZCBieXRlIG9yZGVyLiBTbyBjb252ZXJ0IHRoZW0gaW50bworCQkgKiB0aGUgcmlnaHQgb3JkZXIgZm9yIHRoZSAlcFViIG1vZGlmaWVyLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCQl2YWxbaV0gPSB1dWlkLT51dWlkWzE1IC0gaV07CisKKwkJc2VxX3ByaW50ZihmLCAiJXBVYlxuIiwgdmFsKTsKKwl9CisJaGNpX2Rldl91bmxvY2soaGRldik7CisKKyAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1dWlkc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB1dWlkc19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXVpZHNfZm9wcyA9IHsKKwkub3BlbgkJPSB1dWlkc19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHJlbW90ZV9vb2Jfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGYtPnByaXZhdGU7CisJc3RydWN0IG9vYl9kYXRhICpkYXRhOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGF0YSwgJmhkZXYtPnJlbW90ZV9vb2JfZGF0YSwgbGlzdCkgeworCQlzZXFfcHJpbnRmKGYsICIlcE1SICh0eXBlICV1KSAldSAlKnBoTiAlKnBoTiAlKnBoTiAlKnBoTlxuIiwKKwkJCSAgICZkYXRhLT5iZGFkZHIsIGRhdGEtPmJkYWRkcl90eXBlLCBkYXRhLT5wcmVzZW50LAorCQkJICAgMTYsIGRhdGEtPmhhc2gxOTIsIDE2LCBkYXRhLT5yYW5kMTkyLAorCQkJICAgMTYsIGRhdGEtPmhhc2gyNTYsIDE5LCBkYXRhLT5yYW5kMjU2KTsKKwl9CisJaGNpX2Rldl91bmxvY2soaGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZW1vdGVfb29iX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJlbW90ZV9vb2Jfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlbW90ZV9vb2JfZm9wcyA9IHsKKwkub3BlbgkJPSByZW1vdGVfb29iX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgY29ubl9pbmZvX21pbl9hZ2Vfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOworCisJaWYgKHZhbCA9PSAwIHx8IHZhbCA+IGhkZXYtPmNvbm5faW5mb19tYXhfYWdlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKwloZGV2LT5jb25uX2luZm9fbWluX2FnZSA9IHZhbDsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbm5faW5mb19taW5fYWdlX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisJKnZhbCA9IGhkZXYtPmNvbm5faW5mb19taW5fYWdlOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGNvbm5faW5mb19taW5fYWdlX2ZvcHMsIGNvbm5faW5mb19taW5fYWdlX2dldCwKKwkJCWNvbm5faW5mb19taW5fYWdlX3NldCwgIiVsbHVcbiIpOworCitzdGF0aWMgaW50IGNvbm5faW5mb19tYXhfYWdlX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKKworCWlmICh2YWwgPT0gMCB8fCB2YWwgPCBoZGV2LT5jb25uX2luZm9fbWluX2FnZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisJaGRldi0+Y29ubl9pbmZvX21heF9hZ2UgPSB2YWw7CisJaGNpX2Rldl91bmxvY2soaGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb25uX2luZm9fbWF4X2FnZV9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCSp2YWwgPSBoZGV2LT5jb25uX2luZm9fbWF4X2FnZTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURShjb25uX2luZm9fbWF4X2FnZV9mb3BzLCBjb25uX2luZm9fbWF4X2FnZV9nZXQsCisJCQljb25uX2luZm9fbWF4X2FnZV9zZXQsICIlbGx1XG4iKTsKKworc3RhdGljIHNzaXplX3QgdXNlX2RlYnVnX2tleXNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzNdOworCisJYnVmWzBdID0gdGVzdF9iaXQoSENJX1VTRV9ERUJVR19LRVlTLCAmaGRldi0+ZGV2X2ZsYWdzKSA/ICdZJzogJ04nOworCWJ1ZlsxXSA9ICdcbic7CisJYnVmWzJdID0gJ1wwJzsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIDIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2VfZGVidWdfa2V5c19mb3BzID0geworCS5vcGVuCQk9IHNpbXBsZV9vcGVuLAorCS5yZWFkCQk9IHVzZV9kZWJ1Z19rZXlzX3JlYWQsCisJLmxsc2VlawkJPSBkZWZhdWx0X2xsc2VlaywKK307CisKK3N0YXRpYyBzc2l6ZV90IHNjX29ubHlfbW9kZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzNdOworCisJYnVmWzBdID0gdGVzdF9iaXQoSENJX1NDX09OTFksICZoZGV2LT5kZXZfZmxhZ3MpID8gJ1knOiAnTic7CisJYnVmWzFdID0gJ1xuJzsKKwlidWZbMl0gPSAnXDAnOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgMik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjX29ubHlfbW9kZV9mb3BzID0geworCS5vcGVuCQk9IHNpbXBsZV9vcGVuLAorCS5yZWFkCQk9IHNjX29ubHlfbW9kZV9yZWFkLAorCS5sbHNlZWsJCT0gZGVmYXVsdF9sbHNlZWssCit9OworCit2b2lkIGhjaV9kZWJ1Z2ZzX2NyZWF0ZV9jb21tb24oc3RydWN0IGhjaV9kZXYgKmhkZXYpCit7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiZmVhdHVyZXMiLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLCBoZGV2LAorCQkJICAgICZmZWF0dXJlc19mb3BzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV91MTYoIm1hbnVmYWN0dXJlciIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsCisJCQkgICAmaGRldi0+bWFudWZhY3R1cmVyKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV91OCgiaGNpX3ZlcnNpb24iLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLCAmaGRldi0+aGNpX3Zlcik7CisJZGVidWdmc19jcmVhdGVfdTE2KCJoY2lfcmV2aXNpb24iLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLCAmaGRldi0+aGNpX3Jldik7CisJZGVidWdmc19jcmVhdGVfdTgoImhhcmR3YXJlX2Vycm9yIiwgMDQ0NCwgaGRldi0+ZGVidWdmcywKKwkJCSAgJmhkZXYtPmh3X2Vycm9yX2NvZGUpOworCisJZGVidWdmc19jcmVhdGVfZmlsZSgiZGV2aWNlX2xpc3QiLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLCBoZGV2LAorCQkJICAgICZkZXZpY2VfbGlzdF9mb3BzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJibGFja2xpc3QiLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLCBoZGV2LAorCQkJICAgICZibGFja2xpc3RfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgidXVpZHMiLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLCBoZGV2LCAmdXVpZHNfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgicmVtb3RlX29vYiIsIDA0MDAsIGhkZXYtPmRlYnVnZnMsIGhkZXYsCisJCQkgICAgJnJlbW90ZV9vb2JfZm9wcyk7CisKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjb25uX2luZm9fbWluX2FnZSIsIDA2NDQsIGhkZXYtPmRlYnVnZnMsIGhkZXYsCisJCQkgICAgJmNvbm5faW5mb19taW5fYWdlX2ZvcHMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImNvbm5faW5mb19tYXhfYWdlIiwgMDY0NCwgaGRldi0+ZGVidWdmcywgaGRldiwKKwkJCSAgICAmY29ubl9pbmZvX21heF9hZ2VfZm9wcyk7CisKKwlpZiAobG1wX3NzcF9jYXBhYmxlKGhkZXYpIHx8IGxtcF9sZV9jYXBhYmxlKGhkZXYpKQorCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ1c2VfZGVidWdfa2V5cyIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsCisJCQkJICAgIGhkZXYsICZ1c2VfZGVidWdfa2V5c19mb3BzKTsKKworCWlmIChsbXBfc2NfY2FwYWJsZShoZGV2KSB8fCBsbXBfbGVfY2FwYWJsZShoZGV2KSkKKwkJZGVidWdmc19jcmVhdGVfZmlsZSgic2Nfb25seV9tb2RlIiwgMDQ0NCwgaGRldi0+ZGVidWdmcywKKwkJCQkgICAgaGRldiwgJnNjX29ubHlfbW9kZV9mb3BzKTsKK30KKworc3RhdGljIGludCBpbnF1aXJ5X2NhY2hlX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZGlzY292ZXJ5X3N0YXRlICpjYWNoZSA9ICZoZGV2LT5kaXNjb3Zlcnk7CisJc3RydWN0IGlucXVpcnlfZW50cnkgKmU7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZjYWNoZS0+YWxsLCBhbGwpIHsKKwkJc3RydWN0IGlucXVpcnlfZGF0YSAqZGF0YSA9ICZlLT5kYXRhOworCQlzZXFfcHJpbnRmKGYsICIlcE1SICVkICVkICVkIDB4JS4yeCUuMnglLjJ4IDB4JS40eCAlZCAlZCAldVxuIiwKKwkJCSAgICZkYXRhLT5iZGFkZHIsCisJCQkgICBkYXRhLT5wc2Nhbl9yZXBfbW9kZSwgZGF0YS0+cHNjYW5fcGVyaW9kX21vZGUsCisJCQkgICBkYXRhLT5wc2Nhbl9tb2RlLCBkYXRhLT5kZXZfY2xhc3NbMl0sCisJCQkgICBkYXRhLT5kZXZfY2xhc3NbMV0sIGRhdGEtPmRldl9jbGFzc1swXSwKKwkJCSAgIF9fbGUxNl90b19jcHUoZGF0YS0+Y2xvY2tfb2Zmc2V0KSwKKwkJCSAgIGRhdGEtPnJzc2ksIGRhdGEtPnNzcF9tb2RlLCBlLT50aW1lc3RhbXApOworCX0KKworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5xdWlyeV9jYWNoZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpbnF1aXJ5X2NhY2hlX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbnF1aXJ5X2NhY2hlX2ZvcHMgPSB7CisJLm9wZW4JCT0gaW5xdWlyeV9jYWNoZV9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IGxpbmtfa2V5c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZi0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbGlua19rZXkgKmtleTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrZXksICZoZGV2LT5saW5rX2tleXMsIGxpc3QpCisJCXNlcV9wcmludGYoZiwgIiVwTVIgJXUgJSpwaE4gJXVcbiIsICZrZXktPmJkYWRkciwga2V5LT50eXBlLAorCQkJICAgSENJX0xJTktfS0VZX1NJWkUsIGtleS0+dmFsLCBrZXktPnBpbl9sZW4pOworCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbGlua19rZXlzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGxpbmtfa2V5c19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGlua19rZXlzX2ZvcHMgPSB7CisJLm9wZW4JCT0gbGlua19rZXlzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgZGV2X2NsYXNzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwdHIpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmLT5wcml2YXRlOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCXNlcV9wcmludGYoZiwgIjB4JS4yeCUuMnglLjJ4XG4iLCBoZGV2LT5kZXZfY2xhc3NbMl0sCisJCSAgIGhkZXYtPmRldl9jbGFzc1sxXSwgaGRldi0+ZGV2X2NsYXNzWzBdKTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRldl9jbGFzc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkZXZfY2xhc3Nfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRldl9jbGFzc19mb3BzID0geworCS5vcGVuCQk9IGRldl9jbGFzc19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IHZvaWNlX3NldHRpbmdfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKwkqdmFsID0gaGRldi0+dm9pY2Vfc2V0dGluZzsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURSh2b2ljZV9zZXR0aW5nX2ZvcHMsIHZvaWNlX3NldHRpbmdfZ2V0LAorCQkJTlVMTCwgIjB4JTQuNGxseFxuIik7CisKK3N0YXRpYyBzc2l6ZV90IHNzcF9kZWJ1Z19tb2RlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlszXTsKKworCWJ1ZlswXSA9IGhkZXYtPnNzcF9kZWJ1Z19tb2RlID8gJ1knOiAnTic7CisJYnVmWzFdID0gJ1xuJzsKKwlidWZbMl0gPSAnXDAnOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgMik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNzcF9kZWJ1Z19tb2RlX2ZvcHMgPSB7CisJLm9wZW4JCT0gc2ltcGxlX29wZW4sCisJLnJlYWQJCT0gc3NwX2RlYnVnX21vZGVfcmVhZCwKKwkubGxzZWVrCQk9IGRlZmF1bHRfbGxzZWVrLAorfTsKKworc3RhdGljIGludCBhdXRvX2FjY2VwdF9kZWxheV9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisJaGRldi0+YXV0b19hY2NlcHRfZGVsYXkgPSB2YWw7CisJaGNpX2Rldl91bmxvY2soaGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdXRvX2FjY2VwdF9kZWxheV9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCSp2YWwgPSBoZGV2LT5hdXRvX2FjY2VwdF9kZWxheTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURShhdXRvX2FjY2VwdF9kZWxheV9mb3BzLCBhdXRvX2FjY2VwdF9kZWxheV9nZXQsCisJCQlhdXRvX2FjY2VwdF9kZWxheV9zZXQsICIlbGx1XG4iKTsKKworc3RhdGljIGludCBpZGxlX3RpbWVvdXRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOworCisJaWYgKHZhbCAhPSAwICYmICh2YWwgPCA1MDAgfHwgdmFsID4gMzYwMDAwMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCWhkZXYtPmlkbGVfdGltZW91dCA9IHZhbDsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkbGVfdGltZW91dF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCSp2YWwgPSBoZGV2LT5pZGxlX3RpbWVvdXQ7CisJaGNpX2Rldl91bmxvY2soaGRldik7CisKKwlyZXR1cm4gMDsKK30KKworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoaWRsZV90aW1lb3V0X2ZvcHMsIGlkbGVfdGltZW91dF9nZXQsCisJCQlpZGxlX3RpbWVvdXRfc2V0LCAiJWxsdVxuIik7CisKK3N0YXRpYyBpbnQgc25pZmZfbWluX2ludGVydmFsX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKKworCWlmICh2YWwgPT0gMCB8fCB2YWwgJSAyIHx8IHZhbCA+IGhkZXYtPnNuaWZmX21heF9pbnRlcnZhbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisJaGRldi0+c25pZmZfbWluX2ludGVydmFsID0gdmFsOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25pZmZfbWluX2ludGVydmFsX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisJKnZhbCA9IGhkZXYtPnNuaWZmX21pbl9pbnRlcnZhbDsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURShzbmlmZl9taW5faW50ZXJ2YWxfZm9wcywgc25pZmZfbWluX2ludGVydmFsX2dldCwKKwkJCXNuaWZmX21pbl9pbnRlcnZhbF9zZXQsICIlbGx1XG4iKTsKKworc3RhdGljIGludCBzbmlmZl9tYXhfaW50ZXJ2YWxfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOworCisJaWYgKHZhbCA9PSAwIHx8IHZhbCAlIDIgfHwgdmFsIDwgaGRldi0+c25pZmZfbWluX2ludGVydmFsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKwloZGV2LT5zbmlmZl9tYXhfaW50ZXJ2YWwgPSB2YWw7CisJaGNpX2Rldl91bmxvY2soaGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmlmZl9tYXhfaW50ZXJ2YWxfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKwkqdmFsID0gaGRldi0+c25pZmZfbWF4X2ludGVydmFsOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHNuaWZmX21heF9pbnRlcnZhbF9mb3BzLCBzbmlmZl9tYXhfaW50ZXJ2YWxfZ2V0LAorCQkJc25pZmZfbWF4X2ludGVydmFsX3NldCwgIiVsbHVcbiIpOworCit2b2lkIGhjaV9kZWJ1Z2ZzX2NyZWF0ZV9icmVkcihzdHJ1Y3QgaGNpX2RldiAqaGRldikKK3sKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpbnF1aXJ5X2NhY2hlIiwgMDQ0NCwgaGRldi0+ZGVidWdmcywgaGRldiwKKwkJCSAgICAmaW5xdWlyeV9jYWNoZV9mb3BzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJsaW5rX2tleXMiLCAwNDAwLCBoZGV2LT5kZWJ1Z2ZzLCBoZGV2LAorCQkJICAgICZsaW5rX2tleXNfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiZGV2X2NsYXNzIiwgMDQ0NCwgaGRldi0+ZGVidWdmcywgaGRldiwKKwkJCSAgICAmZGV2X2NsYXNzX2ZvcHMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInZvaWNlX3NldHRpbmciLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLCBoZGV2LAorCQkJICAgICZ2b2ljZV9zZXR0aW5nX2ZvcHMpOworCisJaWYgKGxtcF9zc3BfY2FwYWJsZShoZGV2KSkgeworCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzc3BfZGVidWdfbW9kZSIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsCisJCQkJICAgIGhkZXYsICZzc3BfZGVidWdfbW9kZV9mb3BzKTsKKwkJZGVidWdmc19jcmVhdGVfZmlsZSgiYXV0b19hY2NlcHRfZGVsYXkiLCAwNjQ0LCBoZGV2LT5kZWJ1Z2ZzLAorCQkJCSAgICBoZGV2LCAmYXV0b19hY2NlcHRfZGVsYXlfZm9wcyk7CisJfQorCisJaWYgKGxtcF9zbmlmZl9jYXBhYmxlKGhkZXYpKSB7CisJCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImlkbGVfdGltZW91dCIsIDA2NDQsIGhkZXYtPmRlYnVnZnMsCisJCQkJICAgIGhkZXYsICZpZGxlX3RpbWVvdXRfZm9wcyk7CisJCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInNuaWZmX21pbl9pbnRlcnZhbCIsIDA2NDQsIGhkZXYtPmRlYnVnZnMsCisJCQkJICAgIGhkZXYsICZzbmlmZl9taW5faW50ZXJ2YWxfZm9wcyk7CisJCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInNuaWZmX21heF9pbnRlcnZhbCIsIDA2NDQsIGhkZXYtPmRlYnVnZnMsCisJCQkJICAgIGhkZXYsICZzbmlmZl9tYXhfaW50ZXJ2YWxfZm9wcyk7CisJfQorfQorCitzdGF0aWMgaW50IGlkZW50aXR5X3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZi0+cHJpdmF0ZTsKKwliZGFkZHJfdCBhZGRyOworCXU4IGFkZHJfdHlwZTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCWhjaV9jb3B5X2lkZW50aXR5X2FkZHJlc3MoaGRldiwgJmFkZHIsICZhZGRyX3R5cGUpOworCisJc2VxX3ByaW50ZihmLCAiJXBNUiAodHlwZSAldSkgJSpwaE4gJXBNUlxuIiwgJmFkZHIsIGFkZHJfdHlwZSwKKwkJICAgMTYsIGhkZXYtPmlyaywgJmhkZXYtPnJwYSk7CisKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlkZW50aXR5X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGlkZW50aXR5X3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZGVudGl0eV9mb3BzID0geworCS5vcGVuCQk9IGlkZW50aXR5X29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgcnBhX3RpbWVvdXRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOworCisJLyogUmVxdWlyZSB0aGUgUlBBIHRpbWVvdXQgdG8gYmUgYXQgbGVhc3QgMzAgc2Vjb25kcyBhbmQgYXQgbW9zdAorCSAqIDI0IGhvdXJzLgorCSAqLworCWlmICh2YWwgPCAzMCB8fCB2YWwgPiAoNjAgKiA2MCAqIDI0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisJaGRldi0+cnBhX3RpbWVvdXQgPSB2YWw7CisJaGNpX2Rldl91bmxvY2soaGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBycGFfdGltZW91dF9nZXQodm9pZCAqZGF0YSwgdTY0ICp2YWwpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCSp2YWwgPSBoZGV2LT5ycGFfdGltZW91dDsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURShycGFfdGltZW91dF9mb3BzLCBycGFfdGltZW91dF9nZXQsCisJCQlycGFfdGltZW91dF9zZXQsICIlbGx1XG4iKTsKKworc3RhdGljIGludCByYW5kb21fYWRkcmVzc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGYtPnByaXZhdGU7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisJc2VxX3ByaW50ZihmLCAiJXBNUlxuIiwgJmhkZXYtPnJhbmRvbV9hZGRyKTsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhbmRvbV9hZGRyZXNzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHJhbmRvbV9hZGRyZXNzX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYW5kb21fYWRkcmVzc19mb3BzID0geworCS5vcGVuCQk9IHJhbmRvbV9hZGRyZXNzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgc3RhdGljX2FkZHJlc3Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnApCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmLT5wcml2YXRlOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCXNlcV9wcmludGYoZiwgIiVwTVJcbiIsICZoZGV2LT5zdGF0aWNfYWRkcik7CisJaGNpX2Rldl91bmxvY2soaGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdGF0aWNfYWRkcmVzc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBzdGF0aWNfYWRkcmVzc19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3RhdGljX2FkZHJlc3NfZm9wcyA9IHsKKwkub3BlbgkJPSBzdGF0aWNfYWRkcmVzc19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3NpemVfdCBmb3JjZV9zdGF0aWNfYWRkcmVzc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbM107CisKKwlidWZbMF0gPSB0ZXN0X2JpdChIQ0lfRk9SQ0VfU1RBVElDX0FERFIsICZoZGV2LT5kYmdfZmxhZ3MpID8gJ1knOiAnTic7CisJYnVmWzFdID0gJ1xuJzsKKwlidWZbMl0gPSAnXDAnOworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgMik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGZvcmNlX3N0YXRpY19hZGRyZXNzX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlszMl07CisJc2l6ZV90IGJ1Zl9zaXplID0gbWluKGNvdW50LCAoc2l6ZW9mKGJ1ZiktMSkpOworCWJvb2wgZW5hYmxlOworCisJaWYgKHRlc3RfYml0KEhDSV9VUCwgJmhkZXYtPmZsYWdzKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmW2J1Zl9zaXplXSA9ICdcMCc7CisJaWYgKHN0cnRvYm9vbChidWYsICZlbmFibGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChlbmFibGUgPT0gdGVzdF9iaXQoSENJX0ZPUkNFX1NUQVRJQ19BRERSLCAmaGRldi0+ZGJnX2ZsYWdzKSkKKwkJcmV0dXJuIC1FQUxSRUFEWTsKKworCWNoYW5nZV9iaXQoSENJX0ZPUkNFX1NUQVRJQ19BRERSLCAmaGRldi0+ZGJnX2ZsYWdzKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9yY2Vfc3RhdGljX2FkZHJlc3NfZm9wcyA9IHsKKwkub3BlbgkJPSBzaW1wbGVfb3BlbiwKKwkucmVhZAkJPSBmb3JjZV9zdGF0aWNfYWRkcmVzc19yZWFkLAorCS53cml0ZQkJPSBmb3JjZV9zdGF0aWNfYWRkcmVzc193cml0ZSwKKwkubGxzZWVrCQk9IGRlZmF1bHRfbGxzZWVrLAorfTsKKworc3RhdGljIGludCB3aGl0ZV9saXN0X3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwdHIpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmLT5wcml2YXRlOworCXN0cnVjdCBiZGFkZHJfbGlzdCAqYjsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGIsICZoZGV2LT5sZV93aGl0ZV9saXN0LCBsaXN0KQorCQlzZXFfcHJpbnRmKGYsICIlcE1SICh0eXBlICV1KVxuIiwgJmItPmJkYWRkciwgYi0+YmRhZGRyX3R5cGUpOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd2hpdGVfbGlzdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB3aGl0ZV9saXN0X3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3aGl0ZV9saXN0X2ZvcHMgPSB7CisJLm9wZW4JCT0gd2hpdGVfbGlzdF9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IGlkZW50aXR5X3Jlc29sdmluZ19rZXlzX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICpwdHIpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmLT5wcml2YXRlOworCXN0cnVjdCBzbXBfaXJrICppcms7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaXJrLCAmaGRldi0+aWRlbnRpdHlfcmVzb2x2aW5nX2tleXMsIGxpc3QpIHsKKwkJc2VxX3ByaW50ZihmLCAiJXBNUiAodHlwZSAldSkgJSpwaE4gJXBNUlxuIiwKKwkJCSAgICZpcmstPmJkYWRkciwgaXJrLT5hZGRyX3R5cGUsCisJCQkgICAxNiwgaXJrLT52YWwsICZpcmstPnJwYSk7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWRlbnRpdHlfcmVzb2x2aW5nX2tleXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaWRlbnRpdHlfcmVzb2x2aW5nX2tleXNfc2hvdywKKwkJCSAgIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpZGVudGl0eV9yZXNvbHZpbmdfa2V5c19mb3BzID0geworCS5vcGVuCQk9IGlkZW50aXR5X3Jlc29sdmluZ19rZXlzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgbG9uZ190ZXJtX2tleXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKmYsIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGYtPnByaXZhdGU7CisJc3RydWN0IHNtcF9sdGsgKmx0azsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShsdGssICZoZGV2LT5sb25nX3Rlcm1fa2V5cywgbGlzdCkKKwkJc2VxX3ByaW50ZihmLCAiJXBNUiAodHlwZSAldSkgJXUgMHglMDJ4ICV1ICUuNHggJS4xNmxseCAlKnBoTlxuIiwKKwkJCSAgICZsdGstPmJkYWRkciwgbHRrLT5iZGFkZHJfdHlwZSwgbHRrLT5hdXRoZW50aWNhdGVkLAorCQkJICAgbHRrLT50eXBlLCBsdGstPmVuY19zaXplLCBfX2xlMTZfdG9fY3B1KGx0ay0+ZWRpdiksCisJCQkgICBfX2xlNjRfdG9fY3B1KGx0ay0+cmFuZCksIDE2LCBsdGstPnZhbCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb25nX3Rlcm1fa2V5c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBsb25nX3Rlcm1fa2V5c19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbG9uZ190ZXJtX2tleXNfZm9wcyA9IHsKKwkub3BlbgkJPSBsb25nX3Rlcm1fa2V5c19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCitzdGF0aWMgaW50IGNvbm5fbWluX2ludGVydmFsX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKKworCWlmICh2YWwgPCAweDAwMDYgfHwgdmFsID4gMHgwYzgwIHx8IHZhbCA+IGhkZXYtPmxlX2Nvbm5fbWF4X2ludGVydmFsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKwloZGV2LT5sZV9jb25uX21pbl9pbnRlcnZhbCA9IHZhbDsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbm5fbWluX2ludGVydmFsX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisJKnZhbCA9IGhkZXYtPmxlX2Nvbm5fbWluX2ludGVydmFsOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGNvbm5fbWluX2ludGVydmFsX2ZvcHMsIGNvbm5fbWluX2ludGVydmFsX2dldCwKKwkJCWNvbm5fbWluX2ludGVydmFsX3NldCwgIiVsbHVcbiIpOworCitzdGF0aWMgaW50IGNvbm5fbWF4X2ludGVydmFsX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKKworCWlmICh2YWwgPCAweDAwMDYgfHwgdmFsID4gMHgwYzgwIHx8IHZhbCA8IGhkZXYtPmxlX2Nvbm5fbWluX2ludGVydmFsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKwloZGV2LT5sZV9jb25uX21heF9pbnRlcnZhbCA9IHZhbDsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbm5fbWF4X2ludGVydmFsX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisJKnZhbCA9IGhkZXYtPmxlX2Nvbm5fbWF4X2ludGVydmFsOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGNvbm5fbWF4X2ludGVydmFsX2ZvcHMsIGNvbm5fbWF4X2ludGVydmFsX2dldCwKKwkJCWNvbm5fbWF4X2ludGVydmFsX3NldCwgIiVsbHVcbiIpOworCitzdGF0aWMgaW50IGNvbm5fbGF0ZW5jeV9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7CisKKwlpZiAodmFsID4gMHgwMWYzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKwloZGV2LT5sZV9jb25uX2xhdGVuY3kgPSB2YWw7CisJaGNpX2Rldl91bmxvY2soaGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb25uX2xhdGVuY3lfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKwkqdmFsID0gaGRldi0+bGVfY29ubl9sYXRlbmN5OworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGNvbm5fbGF0ZW5jeV9mb3BzLCBjb25uX2xhdGVuY3lfZ2V0LAorCQkJY29ubl9sYXRlbmN5X3NldCwgIiVsbHVcbiIpOworCitzdGF0aWMgaW50IHN1cGVydmlzaW9uX3RpbWVvdXRfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOworCisJaWYgKHZhbCA8IDB4MDAwYSB8fCB2YWwgPiAweDBjODApCisJCXJldHVybiAtRUlOVkFMOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCWhkZXYtPmxlX3N1cHZfdGltZW91dCA9IHZhbDsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN1cGVydmlzaW9uX3RpbWVvdXRfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKwkqdmFsID0gaGRldi0+bGVfc3Vwdl90aW1lb3V0OworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKHN1cGVydmlzaW9uX3RpbWVvdXRfZm9wcywgc3VwZXJ2aXNpb25fdGltZW91dF9nZXQsCisJCQlzdXBlcnZpc2lvbl90aW1lb3V0X3NldCwgIiVsbHVcbiIpOworCitzdGF0aWMgaW50IGFkdl9jaGFubmVsX21hcF9zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7CisKKwlpZiAodmFsIDwgMHgwMSB8fCB2YWwgPiAweDA3KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKwloZGV2LT5sZV9hZHZfY2hhbm5lbF9tYXAgPSB2YWw7CisJaGNpX2Rldl91bmxvY2soaGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHZfY2hhbm5lbF9tYXBfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKwkqdmFsID0gaGRldi0+bGVfYWR2X2NoYW5uZWxfbWFwOworCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK0RFRklORV9TSU1QTEVfQVRUUklCVVRFKGFkdl9jaGFubmVsX21hcF9mb3BzLCBhZHZfY2hhbm5lbF9tYXBfZ2V0LAorCQkJYWR2X2NoYW5uZWxfbWFwX3NldCwgIiVsbHVcbiIpOworCitzdGF0aWMgaW50IGFkdl9taW5faW50ZXJ2YWxfc2V0KHZvaWQgKmRhdGEsIHU2NCB2YWwpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhOworCisJaWYgKHZhbCA8IDB4MDAyMCB8fCB2YWwgPiAweDQwMDAgfHwgdmFsID4gaGRldi0+bGVfYWR2X21heF9pbnRlcnZhbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisJaGRldi0+bGVfYWR2X21pbl9pbnRlcnZhbCA9IHZhbDsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFkdl9taW5faW50ZXJ2YWxfZ2V0KHZvaWQgKmRhdGEsIHU2NCAqdmFsKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKwkqdmFsID0gaGRldi0+bGVfYWR2X21pbl9pbnRlcnZhbDsKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKKworCXJldHVybiAwOworfQorCitERUZJTkVfU0lNUExFX0FUVFJJQlVURShhZHZfbWluX2ludGVydmFsX2ZvcHMsIGFkdl9taW5faW50ZXJ2YWxfZ2V0LAorCQkJYWR2X21pbl9pbnRlcnZhbF9zZXQsICIlbGx1XG4iKTsKKworc3RhdGljIGludCBhZHZfbWF4X2ludGVydmFsX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YTsKKworCWlmICh2YWwgPCAweDAwMjAgfHwgdmFsID4gMHg0MDAwIHx8IHZhbCA8IGhkZXYtPmxlX2Fkdl9taW5faW50ZXJ2YWwpCisJCXJldHVybiAtRUlOVkFMOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCWhkZXYtPmxlX2Fkdl9tYXhfaW50ZXJ2YWwgPSB2YWw7CisJaGNpX2Rldl91bmxvY2soaGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHZfbWF4X2ludGVydmFsX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGE7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisJKnZhbCA9IGhkZXYtPmxlX2Fkdl9tYXhfaW50ZXJ2YWw7CisJaGNpX2Rldl91bmxvY2soaGRldik7CisKKwlyZXR1cm4gMDsKK30KKworREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoYWR2X21heF9pbnRlcnZhbF9mb3BzLCBhZHZfbWF4X2ludGVydmFsX2dldCwKKwkJCWFkdl9tYXhfaW50ZXJ2YWxfc2V0LCAiJWxsdVxuIik7CisKK3ZvaWQgaGNpX2RlYnVnZnNfY3JlYXRlX2xlKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQoreworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImlkZW50aXR5IiwgMDQwMCwgaGRldi0+ZGVidWdmcywgaGRldiwKKwkJCSAgICAmaWRlbnRpdHlfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgicnBhX3RpbWVvdXQiLCAwNjQ0LCBoZGV2LT5kZWJ1Z2ZzLCBoZGV2LAorCQkJICAgICZycGFfdGltZW91dF9mb3BzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyYW5kb21fYWRkcmVzcyIsIDA0NDQsIGhkZXYtPmRlYnVnZnMsIGhkZXYsCisJCQkgICAgJnJhbmRvbV9hZGRyZXNzX2ZvcHMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInN0YXRpY19hZGRyZXNzIiwgMDQ0NCwgaGRldi0+ZGVidWdmcywgaGRldiwKKwkJCSAgICAmc3RhdGljX2FkZHJlc3NfZm9wcyk7CisKKwkvKiBGb3IgY29udHJvbGxlcnMgd2l0aCBhIHB1YmxpYyBhZGRyZXNzLCBwcm92aWRlIGEgZGVidWcKKwkgKiBvcHRpb24gdG8gZm9yY2UgdGhlIHVzYWdlIG9mIHRoZSBjb25maWd1cmVkIHN0YXRpYworCSAqIGFkZHJlc3MuIEJ5IGRlZmF1bHQgdGhlIHB1YmxpYyBhZGRyZXNzIGlzIHVzZWQuCisJICovCisJaWYgKGJhY21wKCZoZGV2LT5iZGFkZHIsIEJEQUREUl9BTlkpKQorCQlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJmb3JjZV9zdGF0aWNfYWRkcmVzcyIsIDA2NDQsCisJCQkJICAgIGhkZXYtPmRlYnVnZnMsIGhkZXYsCisJCQkJICAgICZmb3JjZV9zdGF0aWNfYWRkcmVzc19mb3BzKTsKKworCWRlYnVnZnNfY3JlYXRlX3U4KCJ3aGl0ZV9saXN0X3NpemUiLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLAorCQkJICAmaGRldi0+bGVfd2hpdGVfbGlzdF9zaXplKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ3aGl0ZV9saXN0IiwgMDQ0NCwgaGRldi0+ZGVidWdmcywgaGRldiwKKwkJCSAgICAmd2hpdGVfbGlzdF9mb3BzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpZGVudGl0eV9yZXNvbHZpbmdfa2V5cyIsIDA0MDAsIGhkZXYtPmRlYnVnZnMsCisJCQkgICAgaGRldiwgJmlkZW50aXR5X3Jlc29sdmluZ19rZXlzX2ZvcHMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImxvbmdfdGVybV9rZXlzIiwgMDQwMCwgaGRldi0+ZGVidWdmcywgaGRldiwKKwkJCSAgICAmbG9uZ190ZXJtX2tleXNfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiY29ubl9taW5faW50ZXJ2YWwiLCAwNjQ0LCBoZGV2LT5kZWJ1Z2ZzLCBoZGV2LAorCQkJICAgICZjb25uX21pbl9pbnRlcnZhbF9mb3BzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjb25uX21heF9pbnRlcnZhbCIsIDA2NDQsIGhkZXYtPmRlYnVnZnMsIGhkZXYsCisJCQkgICAgJmNvbm5fbWF4X2ludGVydmFsX2ZvcHMpOworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImNvbm5fbGF0ZW5jeSIsIDA2NDQsIGhkZXYtPmRlYnVnZnMsIGhkZXYsCisJCQkgICAgJmNvbm5fbGF0ZW5jeV9mb3BzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdXBlcnZpc2lvbl90aW1lb3V0IiwgMDY0NCwgaGRldi0+ZGVidWdmcywgaGRldiwKKwkJCSAgICAmc3VwZXJ2aXNpb25fdGltZW91dF9mb3BzKTsKKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJhZHZfY2hhbm5lbF9tYXAiLCAwNjQ0LCBoZGV2LT5kZWJ1Z2ZzLCBoZGV2LAorCQkJICAgICZhZHZfY2hhbm5lbF9tYXBfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiYWR2X21pbl9pbnRlcnZhbCIsIDA2NDQsIGhkZXYtPmRlYnVnZnMsIGhkZXYsCisJCQkgICAgJmFkdl9taW5faW50ZXJ2YWxfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfZmlsZSgiYWR2X21heF9pbnRlcnZhbCIsIDA2NDQsIGhkZXYtPmRlYnVnZnMsIGhkZXYsCisJCQkgICAgJmFkdl9tYXhfaW50ZXJ2YWxfZm9wcyk7CisJZGVidWdmc19jcmVhdGVfdTE2KCJkaXNjb3ZfaW50ZXJsZWF2ZWRfdGltZW91dCIsIDA2NDQsIGhkZXYtPmRlYnVnZnMsCisJCQkgICAmaGRldi0+ZGlzY292X2ludGVybGVhdmVkX3RpbWVvdXQpOworfQorCit2b2lkIGhjaV9kZWJ1Z2ZzX2NyZWF0ZV9jb25uKHN0cnVjdCBoY2lfY29ubiAqY29ubikKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGNvbm4tPmhkZXY7CisJY2hhciBuYW1lWzZdOworCisJaWYgKElTX0VSUl9PUl9OVUxMKGhkZXYtPmRlYnVnZnMpKQorCQlyZXR1cm47CisKKwlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIldSIsIGNvbm4tPmhhbmRsZSk7CisJY29ubi0+ZGVidWdmcyA9IGRlYnVnZnNfY3JlYXRlX2RpcihuYW1lLCBoZGV2LT5kZWJ1Z2ZzKTsKK30KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2RlYnVnZnMuaCBiL25ldC9ibHVldG9vdGgvaGNpX2RlYnVnZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjY4ZWZlCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZGVidWdmcy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgICBCbHVlWiAtIEJsdWV0b290aCBwcm90b2NvbCBzdGFjayBmb3IgTGludXgKKyAgIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkKKyAgIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTCisgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCisgICBBTEwgTElBQklMSVRZLCBJTkNMVURJTkcgTElBQklMSVRZIEZPUiBJTkZSSU5HRU1FTlQgT0YgQU5ZIFBBVEVOVFMsCisgICBDT1BZUklHSFRTLCBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUywgUkVMQVRJTkcgVE8gVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFIElTIERJU0NMQUlNRUQuCisqLworCit2b2lkIGhjaV9kZWJ1Z2ZzX2NyZWF0ZV9jb21tb24oc3RydWN0IGhjaV9kZXYgKmhkZXYpOwordm9pZCBoY2lfZGVidWdmc19jcmVhdGVfYnJlZHIoc3RydWN0IGhjaV9kZXYgKmhkZXYpOwordm9pZCBoY2lfZGVidWdmc19jcmVhdGVfbGUoc3RydWN0IGhjaV9kZXYgKmhkZXYpOwordm9pZCBoY2lfZGVidWdmc19jcmVhdGVfY29ubihzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKaW5kZXggM2YyZThiOC4uYTNmYjA5NCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCkBAIC0zMCwxMCArMzAsMTUgQEAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9tZ210Lmg+CiAKKyNpbmNsdWRlICJoY2lfcmVxdWVzdC5oIgorI2luY2x1ZGUgImhjaV9kZWJ1Z2ZzLmgiCiAjaW5jbHVkZSAiYTJtcC5oIgogI2luY2x1ZGUgImFtcC5oIgogI2luY2x1ZGUgInNtcC5oIgogCisjZGVmaW5lIFpFUk9fS0VZICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIgXAorCQkgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIgorCiAvKiBIYW5kbGUgSENJIEV2ZW50IHBhY2tldHMgKi8KIAogc3RhdGljIHZvaWQgaGNpX2NjX2lucXVpcnlfY2FuY2VsKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTk1LDcgKzIwMCw4IEBACiAJLyogUmVzZXQgYWxsIG5vbi1wZXJzaXN0ZW50IGZsYWdzICovCiAJaGRldi0+ZGV2X2ZsYWdzICY9IH5IQ0lfUEVSU0lTVEVOVF9NQVNLOwogCi0JaGRldi0+ZGlzY292ZXJ5LnN0YXRlID0gRElTQ09WRVJZX1NUT1BQRUQ7CisJaGNpX2Rpc2NvdmVyeV9zZXRfc3RhdGUoaGRldiwgRElTQ09WRVJZX1NUT1BQRUQpOworCiAJaGRldi0+aW5xX3R4X3Bvd2VyID0gSENJX1RYX1BPV0VSX0lOVkFMSUQ7CiAJaGRldi0+YWR2X3R4X3Bvd2VyID0gSENJX1RYX1BPV0VSX0lOVkFMSUQ7CiAKQEAgLTIxMiw2ICsyMTgsNDAgQEAKIAloY2lfYmRhZGRyX2xpc3RfY2xlYXIoJmhkZXYtPmxlX3doaXRlX2xpc3QpOwogfQogCitzdGF0aWMgdm9pZCBoY2lfY2NfcmVhZF9zdG9yZWRfbGlua19rZXkoc3RydWN0IGhjaV9kZXYgKmhkZXYsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGhjaV9ycF9yZWFkX3N0b3JlZF9saW5rX2tleSAqcnAgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwlzdHJ1Y3QgaGNpX2NwX3JlYWRfc3RvcmVkX2xpbmtfa2V5ICpzZW50OworCisJQlRfREJHKCIlcyBzdGF0dXMgMHglMi4yeCIsIGhkZXYtPm5hbWUsIHJwLT5zdGF0dXMpOworCisJc2VudCA9IGhjaV9zZW50X2NtZF9kYXRhKGhkZXYsIEhDSV9PUF9SRUFEX1NUT1JFRF9MSU5LX0tFWSk7CisJaWYgKCFzZW50KQorCQlyZXR1cm47CisKKwlpZiAoIXJwLT5zdGF0dXMgJiYgc2VudC0+cmVhZF9hbGwgPT0gMHgwMSkgeworCQloZGV2LT5zdG9yZWRfbWF4X2tleXMgPSBycC0+bWF4X2tleXM7CisJCWhkZXYtPnN0b3JlZF9udW1fa2V5cyA9IHJwLT5udW1fa2V5czsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGhjaV9jY19kZWxldGVfc3RvcmVkX2xpbmtfa2V5KHN0cnVjdCBoY2lfZGV2ICpoZGV2LAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGhjaV9ycF9kZWxldGVfc3RvcmVkX2xpbmtfa2V5ICpycCA9ICh2b2lkICopc2tiLT5kYXRhOworCisJQlRfREJHKCIlcyBzdGF0dXMgMHglMi4yeCIsIGhkZXYtPm5hbWUsIHJwLT5zdGF0dXMpOworCisJaWYgKHJwLT5zdGF0dXMpCisJCXJldHVybjsKKworCWlmIChycC0+bnVtX2tleXMgPD0gaGRldi0+c3RvcmVkX251bV9rZXlzKQorCQloZGV2LT5zdG9yZWRfbnVtX2tleXMgLT0gcnAtPm51bV9rZXlzOworCWVsc2UKKwkJaGRldi0+c3RvcmVkX251bV9rZXlzID0gMDsKK30KKwogc3RhdGljIHZvaWQgaGNpX2NjX3dyaXRlX2xvY2FsX25hbWUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJX191OCBzdGF0dXMgPSAqKChfX3U4ICopIHNrYi0+ZGF0YSk7CkBAIC00ODksOSArNTI5LDcgQEAKIAkJCWhkZXYtPmZlYXR1cmVzWzFdWzBdICY9IH5MTVBfSE9TVF9TQzsKIAl9CiAKLQlpZiAodGVzdF9iaXQoSENJX01HTVQsICZoZGV2LT5kZXZfZmxhZ3MpKQotCQltZ210X3NjX2VuYWJsZV9jb21wbGV0ZShoZGV2LCBzZW50LT5zdXBwb3J0LCBzdGF0dXMpOwotCWVsc2UgaWYgKCFzdGF0dXMpIHsKKwlpZiAoIXRlc3RfYml0KEhDSV9NR01ULCAmaGRldi0+ZGV2X2ZsYWdzKSAmJiAhc3RhdHVzKSB7CiAJCWlmIChzZW50LT5zdXBwb3J0KQogCQkJc2V0X2JpdChIQ0lfU0NfRU5BQkxFRCwgJmhkZXYtPmRldl9mbGFncyk7CiAJCWVsc2UKQEAgLTEyODIsNiArMTMyMCw1NSBAQAogCW1lbWNweShoZGV2LT5sZV9zdGF0ZXMsIHJwLT5sZV9zdGF0ZXMsIDgpOwogfQogCitzdGF0aWMgdm9pZCBoY2lfY2NfbGVfcmVhZF9kZWZfZGF0YV9sZW4oc3RydWN0IGhjaV9kZXYgKmhkZXYsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGhjaV9ycF9sZV9yZWFkX2RlZl9kYXRhX2xlbiAqcnAgPSAodm9pZCAqKSBza2ItPmRhdGE7CisKKwlCVF9EQkcoIiVzIHN0YXR1cyAweCUyLjJ4IiwgaGRldi0+bmFtZSwgcnAtPnN0YXR1cyk7CisKKwlpZiAocnAtPnN0YXR1cykKKwkJcmV0dXJuOworCisJaGRldi0+bGVfZGVmX3R4X2xlbiA9IGxlMTZfdG9fY3B1KHJwLT50eF9sZW4pOworCWhkZXYtPmxlX2RlZl90eF90aW1lID0gbGUxNl90b19jcHUocnAtPnR4X3RpbWUpOworfQorCitzdGF0aWMgdm9pZCBoY2lfY2NfbGVfd3JpdGVfZGVmX2RhdGFfbGVuKHN0cnVjdCBoY2lfZGV2ICpoZGV2LAorCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaGNpX2NwX2xlX3dyaXRlX2RlZl9kYXRhX2xlbiAqc2VudDsKKwlfX3U4IHN0YXR1cyA9ICooKF9fdTggKikgc2tiLT5kYXRhKTsKKworCUJUX0RCRygiJXMgc3RhdHVzIDB4JTIuMngiLCBoZGV2LT5uYW1lLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cykKKwkJcmV0dXJuOworCisJc2VudCA9IGhjaV9zZW50X2NtZF9kYXRhKGhkZXYsIEhDSV9PUF9MRV9XUklURV9ERUZfREFUQV9MRU4pOworCWlmICghc2VudCkKKwkJcmV0dXJuOworCisJaGRldi0+bGVfZGVmX3R4X2xlbiA9IGxlMTZfdG9fY3B1KHNlbnQtPnR4X2xlbik7CisJaGRldi0+bGVfZGVmX3R4X3RpbWUgPSBsZTE2X3RvX2NwdShzZW50LT50eF90aW1lKTsKK30KKworc3RhdGljIHZvaWQgaGNpX2NjX2xlX3JlYWRfbWF4X2RhdGFfbGVuKHN0cnVjdCBoY2lfZGV2ICpoZGV2LAorCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBoY2lfcnBfbGVfcmVhZF9tYXhfZGF0YV9sZW4gKnJwID0gKHZvaWQgKikgc2tiLT5kYXRhOworCisJQlRfREJHKCIlcyBzdGF0dXMgMHglMi4yeCIsIGhkZXYtPm5hbWUsIHJwLT5zdGF0dXMpOworCisJaWYgKHJwLT5zdGF0dXMpCisJCXJldHVybjsKKworCWhkZXYtPmxlX21heF90eF9sZW4gPSBsZTE2X3RvX2NwdShycC0+dHhfbGVuKTsKKwloZGV2LT5sZV9tYXhfdHhfdGltZSA9IGxlMTZfdG9fY3B1KHJwLT50eF90aW1lKTsKKwloZGV2LT5sZV9tYXhfcnhfbGVuID0gbGUxNl90b19jcHUocnAtPnJ4X2xlbik7CisJaGRldi0+bGVfbWF4X3J4X3RpbWUgPSBsZTE2X3RvX2NwdShycC0+cnhfdGltZSk7Cit9CisKIHN0YXRpYyB2b2lkIGhjaV9jY193cml0ZV9sZV9ob3N0X3N1cHBvcnRlZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwKIAkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTE0MDIsNiArMTQ4OSwyMSBAQAogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwogfQogCitzdGF0aWMgdm9pZCBoY2lfY2Nfd3JpdGVfc3NwX2RlYnVnX21vZGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJdTggc3RhdHVzID0gKigodTggKikgc2tiLT5kYXRhKTsKKwl1OCAqbW9kZTsKKworCUJUX0RCRygiJXMgc3RhdHVzIDB4JTIuMngiLCBoZGV2LT5uYW1lLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cykKKwkJcmV0dXJuOworCisJbW9kZSA9IGhjaV9zZW50X2NtZF9kYXRhKGhkZXYsIEhDSV9PUF9XUklURV9TU1BfREVCVUdfTU9ERSk7CisJaWYgKG1vZGUpCisJCWhkZXYtPnNzcF9kZWJ1Z19tb2RlID0gKm1vZGU7Cit9CisKIHN0YXRpYyB2b2lkIGhjaV9jc19pbnF1aXJ5KHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBfX3U4IHN0YXR1cykKIHsKIAlCVF9EQkcoIiVzIHN0YXR1cyAweCUyLjJ4IiwgaGRldi0+bmFtZSwgc3RhdHVzKTsKQEAgLTIxMTUsNiArMjIxNyw3IEBACiAJCX0gZWxzZQogCQkJY29ubi0+c3RhdGUgPSBCVF9DT05ORUNURUQ7CiAKKwkJaGNpX2RlYnVnZnNfY3JlYXRlX2Nvbm4oY29ubik7CiAJCWhjaV9jb25uX2FkZF9zeXNmcyhjb25uKTsKIAogCQlpZiAodGVzdF9iaXQoSENJX0FVVEgsICZoZGV2LT5mbGFncykpCkBAIC0yMTMwLDcgKzIyMzMsNyBAQAogCQkJaGNpX3NlbmRfY21kKGhkZXYsIEhDSV9PUF9SRUFEX1JFTU9URV9GRUFUVVJFUywKIAkJCQkgICAgIHNpemVvZihjcCksICZjcCk7CiAKLQkJCWhjaV91cGRhdGVfcGFnZV9zY2FuKGhkZXYsIE5VTEwpOworCQkJaGNpX3VwZGF0ZV9wYWdlX3NjYW4oaGRldik7CiAJCX0KIAogCQkvKiBTZXQgcGFja2V0IHR5cGUgZm9yIGluY29taW5nIGNvbm5lY3Rpb24gKi8KQEAgLTIzMTYsNyArMjQxOSw3IEBACiAJCWlmICh0ZXN0X2JpdChIQ0lfQ09OTl9GTFVTSF9LRVksICZjb25uLT5mbGFncykpCiAJCQloY2lfcmVtb3ZlX2xpbmtfa2V5KGhkZXYsICZjb25uLT5kc3QpOwogCi0JCWhjaV91cGRhdGVfcGFnZV9zY2FuKGhkZXYsIE5VTEwpOworCQloY2lfdXBkYXRlX3BhZ2Vfc2NhbihoZGV2KTsKIAl9CiAKIAlwYXJhbXMgPSBoY2lfY29ubl9wYXJhbXNfbG9va3VwKGhkZXYsICZjb25uLT5kc3QsIGNvbm4tPmRzdF90eXBlKTsKQEAgLTI1ODMsNyArMjY4Niw4IEBACiAJaWYgKGNvbm4tPnN0YXRlICE9IEJUX0NPTkZJRykKIAkJZ290byB1bmxvY2s7CiAKLQlpZiAoIWV2LT5zdGF0dXMgJiYgbG1wX3NzcF9jYXBhYmxlKGhkZXYpICYmIGxtcF9zc3BfY2FwYWJsZShjb25uKSkgeworCWlmICghZXYtPnN0YXR1cyAmJiBsbXBfZXh0X2ZlYXRfY2FwYWJsZShoZGV2KSAmJgorCSAgICBsbXBfZXh0X2ZlYXRfY2FwYWJsZShjb25uKSkgewogCQlzdHJ1Y3QgaGNpX2NwX3JlYWRfcmVtb3RlX2V4dF9mZWF0dXJlcyBjcDsKIAkJY3AuaGFuZGxlID0gZXYtPmhhbmRsZTsKIAkJY3AucGFnZSA9IDB4MDE7CkBAIC0yNjYyLDYgKzI3NjYsMTQgQEAKIAkJaGNpX2NjX3Jlc2V0KGhkZXYsIHNrYik7CiAJCWJyZWFrOwogCisJY2FzZSBIQ0lfT1BfUkVBRF9TVE9SRURfTElOS19LRVk6CisJCWhjaV9jY19yZWFkX3N0b3JlZF9saW5rX2tleShoZGV2LCBza2IpOworCQlicmVhazsKKworCWNhc2UgSENJX09QX0RFTEVURV9TVE9SRURfTElOS19LRVk6CisJCWhjaV9jY19kZWxldGVfc3RvcmVkX2xpbmtfa2V5KGhkZXYsIHNrYik7CisJCWJyZWFrOworCiAJY2FzZSBIQ0lfT1BfV1JJVEVfTE9DQUxfTkFNRToKIAkJaGNpX2NjX3dyaXRlX2xvY2FsX25hbWUoaGRldiwgc2tiKTsKIAkJYnJlYWs7CkBAIC0yODU0LDYgKzI5NjYsMTggQEAKIAkJaGNpX2NjX2xlX3JlYWRfc3VwcG9ydGVkX3N0YXRlcyhoZGV2LCBza2IpOwogCQlicmVhazsKIAorCWNhc2UgSENJX09QX0xFX1JFQURfREVGX0RBVEFfTEVOOgorCQloY2lfY2NfbGVfcmVhZF9kZWZfZGF0YV9sZW4oaGRldiwgc2tiKTsKKwkJYnJlYWs7CisKKwljYXNlIEhDSV9PUF9MRV9XUklURV9ERUZfREFUQV9MRU46CisJCWhjaV9jY19sZV93cml0ZV9kZWZfZGF0YV9sZW4oaGRldiwgc2tiKTsKKwkJYnJlYWs7CisKKwljYXNlIEhDSV9PUF9MRV9SRUFEX01BWF9EQVRBX0xFTjoKKwkJaGNpX2NjX2xlX3JlYWRfbWF4X2RhdGFfbGVuKGhkZXYsIHNrYik7CisJCWJyZWFrOworCiAJY2FzZSBIQ0lfT1BfV1JJVEVfTEVfSE9TVF9TVVBQT1JURUQ6CiAJCWhjaV9jY193cml0ZV9sZV9ob3N0X3N1cHBvcnRlZChoZGV2LCBza2IpOwogCQlicmVhazsKQEAgLTI4NzQsNiArMjk5OCwxMCBAQAogCQloY2lfY2NfcmVhZF90eF9wb3dlcihoZGV2LCBza2IpOwogCQlicmVhazsKIAorCWNhc2UgSENJX09QX1dSSVRFX1NTUF9ERUJVR19NT0RFOgorCQloY2lfY2Nfd3JpdGVfc3NwX2RlYnVnX21vZGUoaGRldiwgc2tiKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlCVF9EQkcoIiVzIG9wY29kZSAweCU0LjR4IiwgaGRldi0+bmFtZSwgb3Bjb2RlKTsKIAkJYnJlYWs7CkBAIC0yOTkyLDcgKzMxMjAsOSBAQAogewogCXN0cnVjdCBoY2lfZXZfaGFyZHdhcmVfZXJyb3IgKmV2ID0gKHZvaWQgKikgc2tiLT5kYXRhOwogCi0JQlRfRVJSKCIlcyBoYXJkd2FyZSBlcnJvciAweCUyLjJ4IiwgaGRldi0+bmFtZSwgZXYtPmNvZGUpOworCWhkZXYtPmh3X2Vycm9yX2NvZGUgPSBldi0+Y29kZTsKKworCXF1ZXVlX3dvcmsoaGRldi0+cmVxX3dvcmtxdWV1ZSwgJmhkZXYtPmVycm9yX3Jlc2V0KTsKIH0KIAogc3RhdGljIHZvaWQgaGNpX3JvbGVfY2hhbmdlX2V2dChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTM1ODQsNiArMzcxNCw3IEBACiAJCWNvbm4tPmhhbmRsZSA9IF9fbGUxNl90b19jcHUoZXYtPmhhbmRsZSk7CiAJCWNvbm4tPnN0YXRlICA9IEJUX0NPTk5FQ1RFRDsKIAorCQloY2lfZGVidWdmc19jcmVhdGVfY29ubihjb25uKTsKIAkJaGNpX2Nvbm5fYWRkX3N5c2ZzKGNvbm4pOwogCQlicmVhazsKIApAQCAtMzc1MCw2ICszODgxLDUyIEBACiAJcmV0dXJuIChjb25uLT5yZW1vdGVfYXV0aCAmIH4weDAxKSB8IChjb25uLT5hdXRoX3R5cGUgJiAweDAxKTsKIH0KIAorc3RhdGljIHU4IGJyZWRyX29vYl9kYXRhX3ByZXNlbnQoc3RydWN0IGhjaV9jb25uICpjb25uKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gY29ubi0+aGRldjsKKwlzdHJ1Y3Qgb29iX2RhdGEgKmRhdGE7CisKKwlkYXRhID0gaGNpX2ZpbmRfcmVtb3RlX29vYl9kYXRhKGhkZXYsICZjb25uLT5kc3QsIEJEQUREUl9CUkVEUik7CisJaWYgKCFkYXRhKQorCQlyZXR1cm4gMHgwMDsKKworCWlmIChjb25uLT5vdXQgfHwgdGVzdF9iaXQoSENJX0NPTk5fUkVNT1RFX09PQiwgJmNvbm4tPmZsYWdzKSkgeworCQlpZiAoYnJlZHJfc2NfZW5hYmxlZChoZGV2KSkgeworCQkJLyogV2hlbiBTZWN1cmUgQ29ubmVjdGlvbnMgaXMgZW5hYmxlZCwgdGhlbiBqdXN0CisJCQkgKiByZXR1cm4gdGhlIHByZXNlbnQgdmFsdWUgc3RvcmVkIHdpdGggdGhlIE9PQgorCQkJICogZGF0YS4gVGhlIHN0b3JlZCB2YWx1ZSBjb250YWlucyB0aGUgcmlnaHQgcHJlc2VudAorCQkJICogaW5mb3JtYXRpb24uIEhvd2V2ZXIgaXQgY2FuIG9ubHkgYmUgdHJ1c3RlZCB3aGVuCisJCQkgKiBub3QgaW4gU2VjdXJlIENvbm5lY3Rpb24gT25seSBtb2RlLgorCQkJICovCisJCQlpZiAoIXRlc3RfYml0KEhDSV9TQ19PTkxZLCAmaGRldi0+ZGV2X2ZsYWdzKSkKKwkJCQlyZXR1cm4gZGF0YS0+cHJlc2VudDsKKworCQkJLyogV2hlbiBTZWN1cmUgQ29ubmVjdGlvbnMgT25seSBtb2RlIGlzIGVuYWJsZWQsIHRoZW4KKwkJCSAqIHRoZSBQLTI1NiB2YWx1ZXMgYXJlIHJlcXVpcmVkLiBJZiB0aGV5IGFyZSBub3QKKwkJCSAqIGF2YWlsYWJsZSwgdGhlbiBkbyBub3QgZGVjbGFyZSB0aGF0IE9PQiBkYXRhIGlzCisJCQkgKiBwcmVzZW50LgorCQkJICovCisJCQlpZiAoIW1lbWNtcChkYXRhLT5yYW5kMjU2LCBaRVJPX0tFWSwgMTYpIHx8CisJCQkgICAgIW1lbWNtcChkYXRhLT5oYXNoMjU2LCBaRVJPX0tFWSwgMTYpKQorCQkJCXJldHVybiAweDAwOworCisJCQlyZXR1cm4gMHgwMjsKKwkJfQorCisJCS8qIFdoZW4gU2VjdXJlIENvbm5lY3Rpb25zIGlzIG5vdCBlbmFibGVkIG9yIGFjdHVhbGx5CisJCSAqIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLCB0aGVuIGNoZWNrIHRoYXQgaWYKKwkJICogUC0xOTIgZGF0YSB2YWx1ZXMgYXJlIHByZXNlbnQuCisJCSAqLworCQlpZiAoIW1lbWNtcChkYXRhLT5yYW5kMTkyLCBaRVJPX0tFWSwgMTYpIHx8CisJCSAgICAhbWVtY21wKGRhdGEtPmhhc2gxOTIsIFpFUk9fS0VZLCAxNikpCisJCQlyZXR1cm4gMHgwMDsKKworCQlyZXR1cm4gMHgwMTsKKwl9CisKKwlyZXR1cm4gMHgwMDsKK30KKwogc3RhdGljIHZvaWQgaGNpX2lvX2NhcGFfcmVxdWVzdF9ldnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGhjaV9ldl9pb19jYXBhX3JlcXVlc3QgKmV2ID0gKHZvaWQgKikgc2tiLT5kYXRhOwpAQCAtMzgwMSwxMiArMzk3OCw3IEBACiAJCQljb25uLT5hdXRoX3R5cGUgJj0gSENJX0FUX05PX0JPTkRJTkdfTUlUTTsKIAogCQljcC5hdXRoZW50aWNhdGlvbiA9IGNvbm4tPmF1dGhfdHlwZTsKLQotCQlpZiAoaGNpX2ZpbmRfcmVtb3RlX29vYl9kYXRhKGhkZXYsICZjb25uLT5kc3QsIEJEQUREUl9CUkVEUikgJiYKLQkJICAgIChjb25uLT5vdXQgfHwgdGVzdF9iaXQoSENJX0NPTk5fUkVNT1RFX09PQiwgJmNvbm4tPmZsYWdzKSkpCi0JCQljcC5vb2JfZGF0YSA9IDB4MDE7Ci0JCWVsc2UKLQkJCWNwLm9vYl9kYXRhID0gMHgwMDsKKwkJY3Aub29iX2RhdGEgPSBicmVkcl9vb2JfZGF0YV9wcmVzZW50KGNvbm4pOwogCiAJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfSU9fQ0FQQUJJTElUWV9SRVBMWSwKIAkJCSAgICAgc2l6ZW9mKGNwKSwgJmNwKTsKQEAgLTQwNTgsMzQgKzQyMzAsNDAgQEAKIAkJZ290byB1bmxvY2s7CiAKIAlkYXRhID0gaGNpX2ZpbmRfcmVtb3RlX29vYl9kYXRhKGhkZXYsICZldi0+YmRhZGRyLCBCREFERFJfQlJFRFIpOwotCWlmIChkYXRhKSB7Ci0JCWlmIChicmVkcl9zY19lbmFibGVkKGhkZXYpKSB7Ci0JCQlzdHJ1Y3QgaGNpX2NwX3JlbW90ZV9vb2JfZXh0X2RhdGFfcmVwbHkgY3A7Ci0KLQkJCWJhY3B5KCZjcC5iZGFkZHIsICZldi0+YmRhZGRyKTsKLQkJCW1lbWNweShjcC5oYXNoMTkyLCBkYXRhLT5oYXNoMTkyLCBzaXplb2YoY3AuaGFzaDE5MikpOwotCQkJbWVtY3B5KGNwLnJhbmQxOTIsIGRhdGEtPnJhbmQxOTIsIHNpemVvZihjcC5yYW5kMTkyKSk7Ci0JCQltZW1jcHkoY3AuaGFzaDI1NiwgZGF0YS0+aGFzaDI1Niwgc2l6ZW9mKGNwLmhhc2gyNTYpKTsKLQkJCW1lbWNweShjcC5yYW5kMjU2LCBkYXRhLT5yYW5kMjU2LCBzaXplb2YoY3AucmFuZDI1NikpOwotCi0JCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1JFTU9URV9PT0JfRVhUX0RBVEFfUkVQTFksCi0JCQkJICAgICBzaXplb2YoY3ApLCAmY3ApOwotCQl9IGVsc2UgewotCQkJc3RydWN0IGhjaV9jcF9yZW1vdGVfb29iX2RhdGFfcmVwbHkgY3A7Ci0KLQkJCWJhY3B5KCZjcC5iZGFkZHIsICZldi0+YmRhZGRyKTsKLQkJCW1lbWNweShjcC5oYXNoLCBkYXRhLT5oYXNoMTkyLCBzaXplb2YoY3AuaGFzaCkpOwotCQkJbWVtY3B5KGNwLnJhbmQsIGRhdGEtPnJhbmQxOTIsIHNpemVvZihjcC5yYW5kKSk7Ci0KLQkJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfUkVNT1RFX09PQl9EQVRBX1JFUExZLAotCQkJCSAgICAgc2l6ZW9mKGNwKSwgJmNwKTsKLQkJfQotCX0gZWxzZSB7CisJaWYgKCFkYXRhKSB7CiAJCXN0cnVjdCBoY2lfY3BfcmVtb3RlX29vYl9kYXRhX25lZ19yZXBseSBjcDsKIAogCQliYWNweSgmY3AuYmRhZGRyLCAmZXYtPmJkYWRkcik7CiAJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfUkVNT1RFX09PQl9EQVRBX05FR19SRVBMWSwKIAkJCSAgICAgc2l6ZW9mKGNwKSwgJmNwKTsKKwkJZ290byB1bmxvY2s7CisJfQorCisJaWYgKGJyZWRyX3NjX2VuYWJsZWQoaGRldikpIHsKKwkJc3RydWN0IGhjaV9jcF9yZW1vdGVfb29iX2V4dF9kYXRhX3JlcGx5IGNwOworCisJCWJhY3B5KCZjcC5iZGFkZHIsICZldi0+YmRhZGRyKTsKKwkJaWYgKHRlc3RfYml0KEhDSV9TQ19PTkxZLCAmaGRldi0+ZGV2X2ZsYWdzKSkgeworCQkJbWVtc2V0KGNwLmhhc2gxOTIsIDAsIHNpemVvZihjcC5oYXNoMTkyKSk7CisJCQltZW1zZXQoY3AucmFuZDE5MiwgMCwgc2l6ZW9mKGNwLnJhbmQxOTIpKTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShjcC5oYXNoMTkyLCBkYXRhLT5oYXNoMTkyLCBzaXplb2YoY3AuaGFzaDE5MikpOworCQkJbWVtY3B5KGNwLnJhbmQxOTIsIGRhdGEtPnJhbmQxOTIsIHNpemVvZihjcC5yYW5kMTkyKSk7CisJCX0KKwkJbWVtY3B5KGNwLmhhc2gyNTYsIGRhdGEtPmhhc2gyNTYsIHNpemVvZihjcC5oYXNoMjU2KSk7CisJCW1lbWNweShjcC5yYW5kMjU2LCBkYXRhLT5yYW5kMjU2LCBzaXplb2YoY3AucmFuZDI1NikpOworCisJCWhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfUkVNT1RFX09PQl9FWFRfREFUQV9SRVBMWSwKKwkJCSAgICAgc2l6ZW9mKGNwKSwgJmNwKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgaGNpX2NwX3JlbW90ZV9vb2JfZGF0YV9yZXBseSBjcDsKKworCQliYWNweSgmY3AuYmRhZGRyLCAmZXYtPmJkYWRkcik7CisJCW1lbWNweShjcC5oYXNoLCBkYXRhLT5oYXNoMTkyLCBzaXplb2YoY3AuaGFzaCkpOworCQltZW1jcHkoY3AucmFuZCwgZGF0YS0+cmFuZDE5Miwgc2l6ZW9mKGNwLnJhbmQpKTsKKworCQloY2lfc2VuZF9jbWQoaGRldiwgSENJX09QX1JFTU9URV9PT0JfREFUQV9SRVBMWSwKKwkJCSAgICAgc2l6ZW9mKGNwKSwgJmNwKTsKIAl9CiAKIHVubG9jazoKQEAgLTQxMjQsNiArNDMwMiw3IEBACiAJaGNvbi0+ZGlzY190aW1lb3V0ID0gSENJX0RJU0NPTk5fVElNRU9VVDsKIAloY2lfY29ubl9kcm9wKGhjb24pOwogCisJaGNpX2RlYnVnZnNfY3JlYXRlX2Nvbm4oaGNvbik7CiAJaGNpX2Nvbm5fYWRkX3N5c2ZzKGhjb24pOwogCiAJYW1wX3BoeXNpY2FsX2NmbShicmVkcl9oY29uLCBoY29uKTsKQEAgLTQzMzAsNiArNDUwOSw3IEBACiAJY29ubi0+bGVfY29ubl9sYXRlbmN5ID0gbGUxNl90b19jcHUoZXYtPmxhdGVuY3kpOwogCWNvbm4tPmxlX3N1cHZfdGltZW91dCA9IGxlMTZfdG9fY3B1KGV2LT5zdXBlcnZpc2lvbl90aW1lb3V0KTsKIAorCWhjaV9kZWJ1Z2ZzX2NyZWF0ZV9jb25uKGNvbm4pOwogCWhjaV9jb25uX2FkZF9zeXNmcyhjb25uKTsKIAogCWhjaV9wcm90b19jb25uZWN0X2NmbShjb25uLCBldi0+c3RhdHVzKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3JlcXVlc3QuYyBiL25ldC9ibHVldG9vdGgvaGNpX3JlcXVlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTlmOTJjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfcmVxdWVzdC5jCkBAIC0wLDAgKzEsNTU2IEBACisvKgorICAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4CisKKyAgIENvcHlyaWdodCAoQykgMjAxNCBJbnRlbCBDb3Jwb3JhdGlvbgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworCisgICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkKKyAgIENMQUlNLCBPUiBBTlkgU1BFQ0lBTCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTCisgICBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAgIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgICBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCisgICBBTEwgTElBQklMSVRZLCBJTkNMVURJTkcgTElBQklMSVRZIEZPUiBJTkZSSU5HRU1FTlQgT0YgQU5ZIFBBVEVOVFMsCisgICBDT1BZUklHSFRTLCBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUywgUkVMQVRJTkcgVE8gVVNFIE9GIFRISVMKKyAgIFNPRlRXQVJFIElTIERJU0NMQUlNRUQuCisqLworCisjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KKyNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CisKKyNpbmNsdWRlICJzbXAuaCIKKyNpbmNsdWRlICJoY2lfcmVxdWVzdC5oIgorCit2b2lkIGhjaV9yZXFfaW5pdChzdHJ1Y3QgaGNpX3JlcXVlc3QgKnJlcSwgc3RydWN0IGhjaV9kZXYgKmhkZXYpCit7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmcmVxLT5jbWRfcSk7CisJcmVxLT5oZGV2ID0gaGRldjsKKwlyZXEtPmVyciA9IDA7Cit9CisKK2ludCBoY2lfcmVxX3J1bihzdHJ1Y3QgaGNpX3JlcXVlc3QgKnJlcSwgaGNpX3JlcV9jb21wbGV0ZV90IGNvbXBsZXRlKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gcmVxLT5oZGV2OworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCUJUX0RCRygibGVuZ3RoICV1Iiwgc2tiX3F1ZXVlX2xlbigmcmVxLT5jbWRfcSkpOworCisJLyogSWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHJlcXVlc3QgYnVpbGRpbmcsIHJlbW92ZSBhbGwgSENJCisJICogY29tbWFuZHMgcXVldWVkIG9uIHRoZSBIQ0kgcmVxdWVzdCBxdWV1ZS4KKwkgKi8KKwlpZiAocmVxLT5lcnIpIHsKKwkJc2tiX3F1ZXVlX3B1cmdlKCZyZXEtPmNtZF9xKTsKKwkJcmV0dXJuIHJlcS0+ZXJyOworCX0KKworCS8qIERvIG5vdCBhbGxvdyBlbXB0eSByZXF1ZXN0cyAqLworCWlmIChza2JfcXVldWVfZW1wdHkoJnJlcS0+Y21kX3EpKQorCQlyZXR1cm4gLUVOT0RBVEE7CisKKwlza2IgPSBza2JfcGVla190YWlsKCZyZXEtPmNtZF9xKTsKKwlidF9jYihza2IpLT5yZXEuY29tcGxldGUgPSBjb21wbGV0ZTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZoZGV2LT5jbWRfcS5sb2NrLCBmbGFncyk7CisJc2tiX3F1ZXVlX3NwbGljZV90YWlsKCZyZXEtPmNtZF9xLCAmaGRldi0+Y21kX3EpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhkZXYtPmNtZF9xLmxvY2ssIGZsYWdzKTsKKworCXF1ZXVlX3dvcmsoaGRldi0+d29ya3F1ZXVlLCAmaGRldi0+Y21kX3dvcmspOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBza19idWZmICpoY2lfcHJlcGFyZV9jbWQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHUxNiBvcGNvZGUsIHUzMiBwbGVuLAorCQkJCWNvbnN0IHZvaWQgKnBhcmFtKQoreworCWludCBsZW4gPSBIQ0lfQ09NTUFORF9IRFJfU0laRSArIHBsZW47CisJc3RydWN0IGhjaV9jb21tYW5kX2hkciAqaGRyOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBidF9za2JfYWxsb2MobGVuLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIE5VTEw7CisKKwloZHIgPSAoc3RydWN0IGhjaV9jb21tYW5kX2hkciAqKSBza2JfcHV0KHNrYiwgSENJX0NPTU1BTkRfSERSX1NJWkUpOworCWhkci0+b3Bjb2RlID0gY3B1X3RvX2xlMTYob3Bjb2RlKTsKKwloZHItPnBsZW4gICA9IHBsZW47CisKKwlpZiAocGxlbikKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBwbGVuKSwgcGFyYW0sIHBsZW4pOworCisJQlRfREJHKCJza2IgbGVuICVkIiwgc2tiLT5sZW4pOworCisJYnRfY2Ioc2tiKS0+cGt0X3R5cGUgPSBIQ0lfQ09NTUFORF9QS1Q7CisJYnRfY2Ioc2tiKS0+b3Bjb2RlID0gb3Bjb2RlOworCisJcmV0dXJuIHNrYjsKK30KKworLyogUXVldWUgYSBjb21tYW5kIHRvIGFuIGFzeW5jaHJvbm91cyBIQ0kgcmVxdWVzdCAqLwordm9pZCBoY2lfcmVxX2FkZF9ldihzdHJ1Y3QgaGNpX3JlcXVlc3QgKnJlcSwgdTE2IG9wY29kZSwgdTMyIHBsZW4sCisJCSAgICBjb25zdCB2b2lkICpwYXJhbSwgdTggZXZlbnQpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSByZXEtPmhkZXY7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCUJUX0RCRygiJXMgb3Bjb2RlIDB4JTQuNHggcGxlbiAlZCIsIGhkZXYtPm5hbWUsIG9wY29kZSwgcGxlbik7CisKKwkvKiBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcmVxdWVzdCBidWlsZGluZywgdGhlcmUgaXMgbm8gcG9pbnQgaW4KKwkgKiBxdWV1ZWluZyB0aGUgSENJIGNvbW1hbmQuIFdlIGNhbiBzaW1wbHkgcmV0dXJuLgorCSAqLworCWlmIChyZXEtPmVycikKKwkJcmV0dXJuOworCisJc2tiID0gaGNpX3ByZXBhcmVfY21kKGhkZXYsIG9wY29kZSwgcGxlbiwgcGFyYW0pOworCWlmICghc2tiKSB7CisJCUJUX0VSUigiJXMgbm8gbWVtb3J5IGZvciBjb21tYW5kIChvcGNvZGUgMHglNC40eCkiLAorCQkgICAgICAgaGRldi0+bmFtZSwgb3Bjb2RlKTsKKwkJcmVxLT5lcnIgPSAtRU5PTUVNOworCQlyZXR1cm47CisJfQorCisJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmcmVxLT5jbWRfcSkpCisJCWJ0X2NiKHNrYiktPnJlcS5zdGFydCA9IHRydWU7CisKKwlidF9jYihza2IpLT5yZXEuZXZlbnQgPSBldmVudDsKKworCXNrYl9xdWV1ZV90YWlsKCZyZXEtPmNtZF9xLCBza2IpOworfQorCit2b2lkIGhjaV9yZXFfYWRkKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxLCB1MTYgb3Bjb2RlLCB1MzIgcGxlbiwKKwkJIGNvbnN0IHZvaWQgKnBhcmFtKQoreworCWhjaV9yZXFfYWRkX2V2KHJlcSwgb3Bjb2RlLCBwbGVuLCBwYXJhbSwgMCk7Cit9CisKK3ZvaWQgaGNpX3JlcV9hZGRfbGVfc2Nhbl9kaXNhYmxlKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBoY2lfY3BfbGVfc2V0X3NjYW5fZW5hYmxlIGNwOworCisJbWVtc2V0KCZjcCwgMCwgc2l6ZW9mKGNwKSk7CisJY3AuZW5hYmxlID0gTEVfU0NBTl9ESVNBQkxFOworCWhjaV9yZXFfYWRkKHJlcSwgSENJX09QX0xFX1NFVF9TQ0FOX0VOQUJMRSwgc2l6ZW9mKGNwKSwgJmNwKTsKK30KKworc3RhdGljIHZvaWQgYWRkX3RvX3doaXRlX2xpc3Qoc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEsCisJCQkgICAgICBzdHJ1Y3QgaGNpX2Nvbm5fcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IGhjaV9jcF9sZV9hZGRfdG9fd2hpdGVfbGlzdCBjcDsKKworCWNwLmJkYWRkcl90eXBlID0gcGFyYW1zLT5hZGRyX3R5cGU7CisJYmFjcHkoJmNwLmJkYWRkciwgJnBhcmFtcy0+YWRkcik7CisKKwloY2lfcmVxX2FkZChyZXEsIEhDSV9PUF9MRV9BRERfVE9fV0hJVEVfTElTVCwgc2l6ZW9mKGNwKSwgJmNwKTsKK30KKworc3RhdGljIHU4IHVwZGF0ZV93aGl0ZV9saXN0KHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gcmVxLT5oZGV2OworCXN0cnVjdCBoY2lfY29ubl9wYXJhbXMgKnBhcmFtczsKKwlzdHJ1Y3QgYmRhZGRyX2xpc3QgKmI7CisJdWludDhfdCB3aGl0ZV9saXN0X2VudHJpZXMgPSAwOworCisJLyogR28gdGhyb3VnaCB0aGUgY3VycmVudCB3aGl0ZSBsaXN0IHByb2dyYW1tZWQgaW50byB0aGUKKwkgKiBjb250cm9sbGVyIG9uZSBieSBvbmUgYW5kIGNoZWNrIGlmIHRoYXQgYWRkcmVzcyBpcyBzdGlsbAorCSAqIGluIHRoZSBsaXN0IG9mIHBlbmRpbmcgY29ubmVjdGlvbnMgb3IgbGlzdCBvZiBkZXZpY2VzIHRvCisJICogcmVwb3J0LiBJZiBub3QgcHJlc2VudCBpbiBlaXRoZXIgbGlzdCwgdGhlbiBxdWV1ZSB0aGUKKwkgKiBjb21tYW5kIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBjb250cm9sbGVyLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoYiwgJmhkZXYtPmxlX3doaXRlX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IGhjaV9jcF9sZV9kZWxfZnJvbV93aGl0ZV9saXN0IGNwOworCisJCWlmIChoY2lfcGVuZF9sZV9hY3Rpb25fbG9va3VwKCZoZGV2LT5wZW5kX2xlX2Nvbm5zLAorCQkJCQkgICAgICAmYi0+YmRhZGRyLCBiLT5iZGFkZHJfdHlwZSkgfHwKKwkJICAgIGhjaV9wZW5kX2xlX2FjdGlvbl9sb29rdXAoJmhkZXYtPnBlbmRfbGVfcmVwb3J0cywKKwkJCQkJICAgICAgJmItPmJkYWRkciwgYi0+YmRhZGRyX3R5cGUpKSB7CisJCQl3aGl0ZV9saXN0X2VudHJpZXMrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJY3AuYmRhZGRyX3R5cGUgPSBiLT5iZGFkZHJfdHlwZTsKKwkJYmFjcHkoJmNwLmJkYWRkciwgJmItPmJkYWRkcik7CisKKwkJaGNpX3JlcV9hZGQocmVxLCBIQ0lfT1BfTEVfREVMX0ZST01fV0hJVEVfTElTVCwKKwkJCSAgICBzaXplb2YoY3ApLCAmY3ApOworCX0KKworCS8qIFNpbmNlIGFsbCBubyBsb25nZXIgdmFsaWQgd2hpdGUgbGlzdCBlbnRyaWVzIGhhdmUgYmVlbgorCSAqIHJlbW92ZWQsIHdhbGsgdGhyb3VnaCB0aGUgbGlzdCBvZiBwZW5kaW5nIGNvbm5lY3Rpb25zCisJICogYW5kIGVuc3VyZSB0aGF0IGFueSBuZXcgZGV2aWNlIGdldHMgcHJvZ3JhbW1lZCBpbnRvCisJICogdGhlIGNvbnRyb2xsZXIuCisJICoKKwkgKiBJZiB0aGUgbGlzdCBvZiB0aGUgZGV2aWNlcyBpcyBsYXJnZXIgdGhhbiB0aGUgbGlzdCBvZgorCSAqIGF2YWlsYWJsZSB3aGl0ZSBsaXN0IGVudHJpZXMgaW4gdGhlIGNvbnRyb2xsZXIsIHRoZW4KKwkgKiBqdXN0IGFib3J0IGFuZCByZXR1cm4gZmlsZXIgcG9saWN5IHZhbHVlIHRvIG5vdCB1c2UgdGhlCisJICogd2hpdGUgbGlzdC4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhcmFtcywgJmhkZXYtPnBlbmRfbGVfY29ubnMsIGFjdGlvbikgeworCQlpZiAoaGNpX2JkYWRkcl9saXN0X2xvb2t1cCgmaGRldi0+bGVfd2hpdGVfbGlzdCwKKwkJCQkJICAgJnBhcmFtcy0+YWRkciwgcGFyYW1zLT5hZGRyX3R5cGUpKQorCQkJY29udGludWU7CisKKwkJaWYgKHdoaXRlX2xpc3RfZW50cmllcyA+PSBoZGV2LT5sZV93aGl0ZV9saXN0X3NpemUpIHsKKwkJCS8qIFNlbGVjdCBmaWx0ZXIgcG9saWN5IHRvIGFjY2VwdCBhbGwgYWR2ZXJ0aXNpbmcgKi8KKwkJCXJldHVybiAweDAwOworCQl9CisKKwkJaWYgKGhjaV9maW5kX2lya19ieV9hZGRyKGhkZXYsICZwYXJhbXMtPmFkZHIsCisJCQkJCSBwYXJhbXMtPmFkZHJfdHlwZSkpIHsKKwkJCS8qIFdoaXRlIGxpc3QgY2FuIG5vdCBiZSB1c2VkIHdpdGggUlBBcyAqLworCQkJcmV0dXJuIDB4MDA7CisJCX0KKworCQl3aGl0ZV9saXN0X2VudHJpZXMrKzsKKwkJYWRkX3RvX3doaXRlX2xpc3QocmVxLCBwYXJhbXMpOworCX0KKworCS8qIEFmdGVyIGFkZGluZyBhbGwgbmV3IHBlbmRpbmcgY29ubmVjdGlvbnMsIHdhbGsgdGhyb3VnaAorCSAqIHRoZSBsaXN0IG9mIHBlbmRpbmcgcmVwb3J0cyBhbmQgYWxzbyBhZGQgdGhlc2UgdG8gdGhlCisJICogd2hpdGUgbGlzdCBpZiB0aGVyZSBpcyBzdGlsbCBzcGFjZS4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhcmFtcywgJmhkZXYtPnBlbmRfbGVfcmVwb3J0cywgYWN0aW9uKSB7CisJCWlmIChoY2lfYmRhZGRyX2xpc3RfbG9va3VwKCZoZGV2LT5sZV93aGl0ZV9saXN0LAorCQkJCQkgICAmcGFyYW1zLT5hZGRyLCBwYXJhbXMtPmFkZHJfdHlwZSkpCisJCQljb250aW51ZTsKKworCQlpZiAod2hpdGVfbGlzdF9lbnRyaWVzID49IGhkZXYtPmxlX3doaXRlX2xpc3Rfc2l6ZSkgeworCQkJLyogU2VsZWN0IGZpbHRlciBwb2xpY3kgdG8gYWNjZXB0IGFsbCBhZHZlcnRpc2luZyAqLworCQkJcmV0dXJuIDB4MDA7CisJCX0KKworCQlpZiAoaGNpX2ZpbmRfaXJrX2J5X2FkZHIoaGRldiwgJnBhcmFtcy0+YWRkciwKKwkJCQkJIHBhcmFtcy0+YWRkcl90eXBlKSkgeworCQkJLyogV2hpdGUgbGlzdCBjYW4gbm90IGJlIHVzZWQgd2l0aCBSUEFzICovCisJCQlyZXR1cm4gMHgwMDsKKwkJfQorCisJCXdoaXRlX2xpc3RfZW50cmllcysrOworCQlhZGRfdG9fd2hpdGVfbGlzdChyZXEsIHBhcmFtcyk7CisJfQorCisJLyogU2VsZWN0IGZpbHRlciBwb2xpY3kgdG8gdXNlIHdoaXRlIGxpc3QgKi8KKwlyZXR1cm4gMHgwMTsKK30KKwordm9pZCBoY2lfcmVxX2FkZF9sZV9wYXNzaXZlX3NjYW4oc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IGhjaV9jcF9sZV9zZXRfc2Nhbl9wYXJhbSBwYXJhbV9jcDsKKwlzdHJ1Y3QgaGNpX2NwX2xlX3NldF9zY2FuX2VuYWJsZSBlbmFibGVfY3A7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSByZXEtPmhkZXY7CisJdTggb3duX2FkZHJfdHlwZTsKKwl1OCBmaWx0ZXJfcG9saWN5OworCisJLyogU2V0IHJlcXVpcmVfcHJpdmFjeSB0byBmYWxzZSBzaW5jZSBubyBTQ0FOX1JFUSBhcmUgc2VuZAorCSAqIGR1cmluZyBwYXNzaXZlIHNjYW5uaW5nLiBOb3QgdXNpbmcgYW4gbm9uLXJlc29sdmFibGUgYWRkcmVzcworCSAqIGhlcmUgaXMgaW1wb3J0YW50IHNvIHRoYXQgcGVlciBkZXZpY2VzIHVzaW5nIGRpcmVjdAorCSAqIGFkdmVydGlzaW5nIHdpdGggb3VyIGFkZHJlc3Mgd2lsbCBiZSBjb3JyZWN0bHkgcmVwb3J0ZWQKKwkgKiBieSB0aGUgY29udHJvbGxlci4KKwkgKi8KKwlpZiAoaGNpX3VwZGF0ZV9yYW5kb21fYWRkcmVzcyhyZXEsIGZhbHNlLCAmb3duX2FkZHJfdHlwZSkpCisJCXJldHVybjsKKworCS8qIEFkZGluZyBvciByZW1vdmluZyBlbnRyaWVzIGZyb20gdGhlIHdoaXRlIGxpc3QgbXVzdAorCSAqIGhhcHBlbiBiZWZvcmUgZW5hYmxpbmcgc2Nhbm5pbmcuIFRoZSBjb250cm9sbGVyIGRvZXMKKwkgKiBub3QgYWxsb3cgd2hpdGUgbGlzdCBtb2RpZmljYXRpb24gd2hpbGUgc2Nhbm5pbmcuCisJICovCisJZmlsdGVyX3BvbGljeSA9IHVwZGF0ZV93aGl0ZV9saXN0KHJlcSk7CisKKwkvKiBXaGVuIHRoZSBjb250cm9sbGVyIGlzIHVzaW5nIHJhbmRvbSByZXNvbHZhYmxlIGFkZHJlc3NlcyBhbmQKKwkgKiB3aXRoIHRoYXQgaGF2aW5nIExFIHByaXZhY3kgZW5hYmxlZCwgdGhlbiBjb250cm9sbGVycyB3aXRoCisJICogRXh0ZW5kZWQgU2Nhbm5lciBGaWx0ZXIgUG9saWNpZXMgc3VwcG9ydCBjYW4gbm93IGVuYWJsZSBzdXBwb3J0CisJICogZm9yIGhhbmRsaW5nIGRpcmVjdGVkIGFkdmVydGlzaW5nLgorCSAqCisJICogU28gaW5zdGVhZCBvZiB1c2luZyBmaWx0ZXIgcG9saWNlcyAweDAwIChubyB3aGl0ZWxpc3QpCisJICogYW5kIDB4MDEgKHdoaXRlbGlzdCBlbmFibGVkKSB1c2UgdGhlIG5ldyBmaWx0ZXIgcG9saWNpZXMKKwkgKiAweDAyIChubyB3aGl0ZWxpc3QpIGFuZCAweDAzICh3aGl0ZWxpc3QgZW5hYmxlZCkuCisJICovCisJaWYgKHRlc3RfYml0KEhDSV9QUklWQUNZLCAmaGRldi0+ZGV2X2ZsYWdzKSAmJgorCSAgICAoaGRldi0+bGVfZmVhdHVyZXNbMF0gJiBIQ0lfTEVfRVhUX1NDQU5fUE9MSUNZKSkKKwkJZmlsdGVyX3BvbGljeSB8PSAweDAyOworCisJbWVtc2V0KCZwYXJhbV9jcCwgMCwgc2l6ZW9mKHBhcmFtX2NwKSk7CisJcGFyYW1fY3AudHlwZSA9IExFX1NDQU5fUEFTU0lWRTsKKwlwYXJhbV9jcC5pbnRlcnZhbCA9IGNwdV90b19sZTE2KGhkZXYtPmxlX3NjYW5faW50ZXJ2YWwpOworCXBhcmFtX2NwLndpbmRvdyA9IGNwdV90b19sZTE2KGhkZXYtPmxlX3NjYW5fd2luZG93KTsKKwlwYXJhbV9jcC5vd25fYWRkcmVzc190eXBlID0gb3duX2FkZHJfdHlwZTsKKwlwYXJhbV9jcC5maWx0ZXJfcG9saWN5ID0gZmlsdGVyX3BvbGljeTsKKwloY2lfcmVxX2FkZChyZXEsIEhDSV9PUF9MRV9TRVRfU0NBTl9QQVJBTSwgc2l6ZW9mKHBhcmFtX2NwKSwKKwkJICAgICZwYXJhbV9jcCk7CisKKwltZW1zZXQoJmVuYWJsZV9jcCwgMCwgc2l6ZW9mKGVuYWJsZV9jcCkpOworCWVuYWJsZV9jcC5lbmFibGUgPSBMRV9TQ0FOX0VOQUJMRTsKKwllbmFibGVfY3AuZmlsdGVyX2R1cCA9IExFX1NDQU5fRklMVEVSX0RVUF9FTkFCTEU7CisJaGNpX3JlcV9hZGQocmVxLCBIQ0lfT1BfTEVfU0VUX1NDQU5fRU5BQkxFLCBzaXplb2YoZW5hYmxlX2NwKSwKKwkJICAgICZlbmFibGVfY3ApOworfQorCitzdGF0aWMgdm9pZCBzZXRfcmFuZG9tX2FkZHIoc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEsIGJkYWRkcl90ICpycGEpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSByZXEtPmhkZXY7CisKKwkvKiBJZiB3ZSdyZSBhZHZlcnRpc2luZyBvciBpbml0aWF0aW5nIGFuIExFIGNvbm5lY3Rpb24gd2UgY2FuJ3QKKwkgKiBnbyBhaGVhZCBhbmQgY2hhbmdlIHRoZSByYW5kb20gYWRkcmVzcyBhdCB0aGlzIHRpbWUuIFRoaXMgaXMKKwkgKiBiZWNhdXNlIHRoZSBldmVudHVhbCBpbml0aWF0b3IgYWRkcmVzcyB1c2VkIGZvciB0aGUKKwkgKiBzdWJzZXF1ZW50bHkgY3JlYXRlZCBjb25uZWN0aW9uIHdpbGwgYmUgdW5kZWZpbmVkIChzb21lCisJICogY29udHJvbGxlcnMgdXNlIHRoZSBuZXcgYWRkcmVzcyBhbmQgb3RoZXJzIHRoZSBvbmUgd2UgaGFkCisJICogd2hlbiB0aGUgb3BlcmF0aW9uIHN0YXJ0ZWQpLgorCSAqCisJICogSW4gdGhpcyBraW5kIG9mIHNjZW5hcmlvIHNraXAgdGhlIHVwZGF0ZSBhbmQgbGV0IHRoZSByYW5kb20KKwkgKiBhZGRyZXNzIGJlIHVwZGF0ZWQgYXQgdGhlIG5leHQgY3ljbGUuCisJICovCisJaWYgKHRlc3RfYml0KEhDSV9MRV9BRFYsICZoZGV2LT5kZXZfZmxhZ3MpIHx8CisJICAgIGhjaV9jb25uX2hhc2hfbG9va3VwX3N0YXRlKGhkZXYsIExFX0xJTkssIEJUX0NPTk5FQ1QpKSB7CisJCUJUX0RCRygiRGVmZXJyaW5nIHJhbmRvbSBhZGRyZXNzIHVwZGF0ZSIpOworCQlzZXRfYml0KEhDSV9SUEFfRVhQSVJFRCwgJmhkZXYtPmRldl9mbGFncyk7CisJCXJldHVybjsKKwl9CisKKwloY2lfcmVxX2FkZChyZXEsIEhDSV9PUF9MRV9TRVRfUkFORE9NX0FERFIsIDYsIHJwYSk7Cit9CisKK2ludCBoY2lfdXBkYXRlX3JhbmRvbV9hZGRyZXNzKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxLCBib29sIHJlcXVpcmVfcHJpdmFjeSwKKwkJCSAgICAgIHU4ICpvd25fYWRkcl90eXBlKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gcmVxLT5oZGV2OworCWludCBlcnI7CisKKwkvKiBJZiBwcml2YWN5IGlzIGVuYWJsZWQgdXNlIGEgcmVzb2x2YWJsZSBwcml2YXRlIGFkZHJlc3MuIElmCisJICogY3VycmVudCBSUEEgaGFzIGV4cGlyZWQgb3IgdGhlcmUgaXMgc29tZXRoaW5nIGVsc2UgdGhhbgorCSAqIHRoZSBjdXJyZW50IFJQQSBpbiB1c2UsIHRoZW4gZ2VuZXJhdGUgYSBuZXcgb25lLgorCSAqLworCWlmICh0ZXN0X2JpdChIQ0lfUFJJVkFDWSwgJmhkZXYtPmRldl9mbGFncykpIHsKKwkJaW50IHRvOworCisJCSpvd25fYWRkcl90eXBlID0gQUREUl9MRV9ERVZfUkFORE9NOworCisJCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEhDSV9SUEFfRVhQSVJFRCwgJmhkZXYtPmRldl9mbGFncykgJiYKKwkJICAgICFiYWNtcCgmaGRldi0+cmFuZG9tX2FkZHIsICZoZGV2LT5ycGEpKQorCQkJcmV0dXJuIDA7CisKKwkJZXJyID0gc21wX2dlbmVyYXRlX3JwYShoZGV2LCBoZGV2LT5pcmssICZoZGV2LT5ycGEpOworCQlpZiAoZXJyIDwgMCkgeworCQkJQlRfRVJSKCIlcyBmYWlsZWQgdG8gZ2VuZXJhdGUgbmV3IFJQQSIsIGhkZXYtPm5hbWUpOworCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCXNldF9yYW5kb21fYWRkcihyZXEsICZoZGV2LT5ycGEpOworCisJCXRvID0gbXNlY3NfdG9famlmZmllcyhoZGV2LT5ycGFfdGltZW91dCAqIDEwMDApOworCQlxdWV1ZV9kZWxheWVkX3dvcmsoaGRldi0+d29ya3F1ZXVlLCAmaGRldi0+cnBhX2V4cGlyZWQsIHRvKTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBJbiBjYXNlIG9mIHJlcXVpcmVkIHByaXZhY3kgd2l0aG91dCByZXNvbHZhYmxlIHByaXZhdGUgYWRkcmVzcywKKwkgKiB1c2UgYW4gbm9uLXJlc29sdmFibGUgcHJpdmF0ZSBhZGRyZXNzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgYWN0aXZlCisJICogc2Nhbm5pbmcgYW5kIG5vbi1jb25uZWN0YWJsZSBhZHZlcnRpc2luZy4KKwkgKi8KKwlpZiAocmVxdWlyZV9wcml2YWN5KSB7CisJCWJkYWRkcl90IG5ycGE7CisKKwkJd2hpbGUgKHRydWUpIHsKKwkJCS8qIFRoZSBub24tcmVzb2x2YWJsZSBwcml2YXRlIGFkZHJlc3MgaXMgZ2VuZXJhdGVkCisJCQkgKiBmcm9tIHJhbmRvbSBzaXggYnl0ZXMgd2l0aCB0aGUgdHdvIG1vc3Qgc2lnbmlmaWNhbnQKKwkJCSAqIGJpdHMgY2xlYXJlZC4KKwkJCSAqLworCQkJZ2V0X3JhbmRvbV9ieXRlcygmbnJwYSwgNik7CisJCQlucnBhLmJbNV0gJj0gMHgzZjsKKworCQkJLyogVGhlIG5vbi1yZXNvbHZhYmxlIHByaXZhdGUgYWRkcmVzcyBzaGFsbCBub3QgYmUKKwkJCSAqIGVxdWFsIHRvIHRoZSBwdWJsaWMgYWRkcmVzcy4KKwkJCSAqLworCQkJaWYgKGJhY21wKCZoZGV2LT5iZGFkZHIsICZucnBhKSkKKwkJCQlicmVhazsKKwkJfQorCisJCSpvd25fYWRkcl90eXBlID0gQUREUl9MRV9ERVZfUkFORE9NOworCQlzZXRfcmFuZG9tX2FkZHIocmVxLCAmbnJwYSk7CisJCXJldHVybiAwOworCX0KKworCS8qIElmIGZvcmNpbmcgc3RhdGljIGFkZHJlc3MgaXMgaW4gdXNlIG9yIHRoZXJlIGlzIG5vIHB1YmxpYworCSAqIGFkZHJlc3MgdXNlIHRoZSBzdGF0aWMgYWRkcmVzcyBhcyByYW5kb20gYWRkcmVzcyAoYnV0IHNraXAKKwkgKiB0aGUgSENJIGNvbW1hbmQgaWYgdGhlIGN1cnJlbnQgcmFuZG9tIGFkZHJlc3MgaXMgYWxyZWFkeSB0aGUKKwkgKiBzdGF0aWMgb25lLgorCSAqCisJICogSW4gY2FzZSBCUi9FRFIgaGFzIGJlZW4gZGlzYWJsZWQgb24gYSBkdWFsLW1vZGUgY29udHJvbGxlcgorCSAqIGFuZCBhIHN0YXRpYyBhZGRyZXNzIGhhcyBiZWVuIGNvbmZpZ3VyZWQsIHRoZW4gdXNlIHRoYXQKKwkgKiBhZGRyZXNzIGluc3RlYWQgb2YgdGhlIHB1YmxpYyBCUi9FRFIgYWRkcmVzcy4KKwkgKi8KKwlpZiAodGVzdF9iaXQoSENJX0ZPUkNFX1NUQVRJQ19BRERSLCAmaGRldi0+ZGJnX2ZsYWdzKSB8fAorCSAgICAhYmFjbXAoJmhkZXYtPmJkYWRkciwgQkRBRERSX0FOWSkgfHwKKwkgICAgKCF0ZXN0X2JpdChIQ0lfQlJFRFJfRU5BQkxFRCwgJmhkZXYtPmRldl9mbGFncykgJiYKKwkgICAgIGJhY21wKCZoZGV2LT5zdGF0aWNfYWRkciwgQkRBRERSX0FOWSkpKSB7CisJCSpvd25fYWRkcl90eXBlID0gQUREUl9MRV9ERVZfUkFORE9NOworCQlpZiAoYmFjbXAoJmhkZXYtPnN0YXRpY19hZGRyLCAmaGRldi0+cmFuZG9tX2FkZHIpKQorCQkJaGNpX3JlcV9hZGQocmVxLCBIQ0lfT1BfTEVfU0VUX1JBTkRPTV9BRERSLCA2LAorCQkJCSAgICAmaGRldi0+c3RhdGljX2FkZHIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBOZWl0aGVyIHByaXZhY3kgbm9yIHN0YXRpYyBhZGRyZXNzIGlzIGJlaW5nIHVzZWQgc28gdXNlIGEKKwkgKiBwdWJsaWMgYWRkcmVzcy4KKwkgKi8KKwkqb3duX2FkZHJfdHlwZSA9IEFERFJfTEVfREVWX1BVQkxJQzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCBkaXNjb25uZWN0ZWRfd2hpdGVsaXN0X2VudHJpZXMoc3RydWN0IGhjaV9kZXYgKmhkZXYpCit7CisJc3RydWN0IGJkYWRkcl9saXN0ICpiOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShiLCAmaGRldi0+d2hpdGVsaXN0LCBsaXN0KSB7CisJCXN0cnVjdCBoY2lfY29ubiAqY29ubjsKKworCQljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfYmEoaGRldiwgQUNMX0xJTkssICZiLT5iZGFkZHIpOworCQlpZiAoIWNvbm4pCisJCQlyZXR1cm4gdHJ1ZTsKKworCQlpZiAoY29ubi0+c3RhdGUgIT0gQlRfQ09OTkVDVEVEICYmIGNvbm4tPnN0YXRlICE9IEJUX0NPTkZJRykKKwkJCXJldHVybiB0cnVlOworCX0KKworCXJldHVybiBmYWxzZTsKK30KKwordm9pZCBfX2hjaV91cGRhdGVfcGFnZV9zY2FuKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gcmVxLT5oZGV2OworCXU4IHNjYW47CisKKwlpZiAoIXRlc3RfYml0KEhDSV9CUkVEUl9FTkFCTEVELCAmaGRldi0+ZGV2X2ZsYWdzKSkKKwkJcmV0dXJuOworCisJaWYgKCFoZGV2X2lzX3Bvd2VyZWQoaGRldikpCisJCXJldHVybjsKKworCWlmIChtZ210X3Bvd2VyaW5nX2Rvd24oaGRldikpCisJCXJldHVybjsKKworCWlmICh0ZXN0X2JpdChIQ0lfQ09OTkVDVEFCTEUsICZoZGV2LT5kZXZfZmxhZ3MpIHx8CisJICAgIGRpc2Nvbm5lY3RlZF93aGl0ZWxpc3RfZW50cmllcyhoZGV2KSkKKwkJc2NhbiA9IFNDQU5fUEFHRTsKKwllbHNlCisJCXNjYW4gPSBTQ0FOX0RJU0FCTEVEOworCisJaWYgKHRlc3RfYml0KEhDSV9QU0NBTiwgJmhkZXYtPmZsYWdzKSA9PSAhIShzY2FuICYgU0NBTl9QQUdFKSkKKwkJcmV0dXJuOworCisJaWYgKHRlc3RfYml0KEhDSV9ESVNDT1ZFUkFCTEUsICZoZGV2LT5kZXZfZmxhZ3MpKQorCQlzY2FuIHw9IFNDQU5fSU5RVUlSWTsKKworCWhjaV9yZXFfYWRkKHJlcSwgSENJX09QX1dSSVRFX1NDQU5fRU5BQkxFLCAxLCAmc2Nhbik7Cit9CisKK3ZvaWQgaGNpX3VwZGF0ZV9wYWdlX3NjYW4oc3RydWN0IGhjaV9kZXYgKmhkZXYpCit7CisJc3RydWN0IGhjaV9yZXF1ZXN0IHJlcTsKKworCWhjaV9yZXFfaW5pdCgmcmVxLCBoZGV2KTsKKwlfX2hjaV91cGRhdGVfcGFnZV9zY2FuKCZyZXEpOworCWhjaV9yZXFfcnVuKCZyZXEsIE5VTEwpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGNvbnRyb2xzIHRoZSBiYWNrZ3JvdW5kIHNjYW5uaW5nIGJhc2VkIG9uIGhkZXYtPnBlbmRfbGVfY29ubnMKKyAqIGxpc3QuIElmIHRoZXJlIGFyZSBwZW5kaW5nIExFIGNvbm5lY3Rpb24gd2Ugc3RhcnQgdGhlIGJhY2tncm91bmQgc2Nhbm5pbmcsCisgKiBvdGhlcndpc2Ugd2Ugc3RvcCBpdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBjYWxsZXIgaG9sZHMgaGRldi0+bG9jay4KKyAqLwordm9pZCBfX2hjaV91cGRhdGVfYmFja2dyb3VuZF9zY2FuKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gcmVxLT5oZGV2OworCXN0cnVjdCBoY2lfY29ubiAqY29ubjsKKworCWlmICghdGVzdF9iaXQoSENJX1VQLCAmaGRldi0+ZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KEhDSV9JTklULCAmaGRldi0+ZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KEhDSV9TRVRVUCwgJmhkZXYtPmRldl9mbGFncykgfHwKKwkgICAgdGVzdF9iaXQoSENJX0NPTkZJRywgJmhkZXYtPmRldl9mbGFncykgfHwKKwkgICAgdGVzdF9iaXQoSENJX0FVVE9fT0ZGLCAmaGRldi0+ZGV2X2ZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChIQ0lfVU5SRUdJU1RFUiwgJmhkZXYtPmRldl9mbGFncykpCisJCXJldHVybjsKKworCS8qIE5vIHBvaW50IGluIGRvaW5nIHNjYW5uaW5nIGlmIExFIHN1cHBvcnQgaGFzbid0IGJlZW4gZW5hYmxlZCAqLworCWlmICghdGVzdF9iaXQoSENJX0xFX0VOQUJMRUQsICZoZGV2LT5kZXZfZmxhZ3MpKQorCQlyZXR1cm47CisKKwkvKiBJZiBkaXNjb3ZlcnkgaXMgYWN0aXZlIGRvbid0IGludGVyZmVyZSB3aXRoIGl0ICovCisJaWYgKGhkZXYtPmRpc2NvdmVyeS5zdGF0ZSAhPSBESVNDT1ZFUllfU1RPUFBFRCkKKwkJcmV0dXJuOworCisJLyogUmVzZXQgUlNTSSBhbmQgVVVJRCBmaWx0ZXJzIHdoZW4gc3RhcnRpbmcgYmFja2dyb3VuZCBzY2FubmluZworCSAqIHNpbmNlIHRoZXNlIGZpbHRlcnMgYXJlIG1lYW50IGZvciBzZXJ2aWNlIGRpc2NvdmVyeSBvbmx5LgorCSAqCisJICogVGhlIFN0YXJ0IERpc2NvdmVyeSBhbmQgU3RhcnQgU2VydmljZSBEaXNjb3Zlcnkgb3BlcmF0aW9ucworCSAqIGVuc3VyZSB0byBzZXQgcHJvcGVyIHZhbHVlcyBmb3IgUlNTSSB0aHJlc2hvbGQgYW5kIFVVSUQKKwkgKiBmaWx0ZXIgbGlzdC4gU28gaXQgaXMgc2FmZSB0byBqdXN0IHJlc2V0IHRoZW0gaGVyZS4KKwkgKi8KKwloY2lfZGlzY292ZXJ5X2ZpbHRlcl9jbGVhcihoZGV2KTsKKworCWlmIChsaXN0X2VtcHR5KCZoZGV2LT5wZW5kX2xlX2Nvbm5zKSAmJgorCSAgICBsaXN0X2VtcHR5KCZoZGV2LT5wZW5kX2xlX3JlcG9ydHMpKSB7CisJCS8qIElmIHRoZXJlIGlzIG5vIHBlbmRpbmcgTEUgY29ubmVjdGlvbnMgb3IgZGV2aWNlcworCQkgKiB0byBiZSBzY2FubmVkIGZvciwgd2Ugc2hvdWxkIHN0b3AgdGhlIGJhY2tncm91bmQKKwkJICogc2Nhbm5pbmcuCisJCSAqLworCisJCS8qIElmIGNvbnRyb2xsZXIgaXMgbm90IHNjYW5uaW5nIHdlIGFyZSBkb25lLiAqLworCQlpZiAoIXRlc3RfYml0KEhDSV9MRV9TQ0FOLCAmaGRldi0+ZGV2X2ZsYWdzKSkKKwkJCXJldHVybjsKKworCQloY2lfcmVxX2FkZF9sZV9zY2FuX2Rpc2FibGUocmVxKTsKKworCQlCVF9EQkcoIiVzIHN0b3BwaW5nIGJhY2tncm91bmQgc2Nhbm5pbmciLCBoZGV2LT5uYW1lKTsKKwl9IGVsc2UgeworCQkvKiBJZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgcGVuZGluZyBMRSBjb25uZWN0aW9uLCB3ZSBzaG91bGQKKwkJICoga2VlcCB0aGUgYmFja2dyb3VuZCBzY2FuIHJ1bm5pbmcuCisJCSAqLworCisJCS8qIElmIGNvbnRyb2xsZXIgaXMgY29ubmVjdGluZywgd2Ugc2hvdWxkIG5vdCBzdGFydCBzY2FubmluZworCQkgKiBzaW5jZSBzb21lIGNvbnRyb2xsZXJzIGFyZSBub3QgYWJsZSB0byBzY2FuIGFuZCBjb25uZWN0IGF0CisJCSAqIHRoZSBzYW1lIHRpbWUuCisJCSAqLworCQljb25uID0gaGNpX2Nvbm5faGFzaF9sb29rdXBfc3RhdGUoaGRldiwgTEVfTElOSywgQlRfQ09OTkVDVCk7CisJCWlmIChjb25uKQorCQkJcmV0dXJuOworCisJCS8qIElmIGNvbnRyb2xsZXIgaXMgY3VycmVudGx5IHNjYW5uaW5nLCB3ZSBzdG9wIGl0IHRvIGVuc3VyZSB3ZQorCQkgKiBkb24ndCBtaXNzIGFueSBhZHZlcnRpc2luZyAoZHVlIHRvIGR1cGxpY2F0ZXMgZmlsdGVyKS4KKwkJICovCisJCWlmICh0ZXN0X2JpdChIQ0lfTEVfU0NBTiwgJmhkZXYtPmRldl9mbGFncykpCisJCQloY2lfcmVxX2FkZF9sZV9zY2FuX2Rpc2FibGUocmVxKTsKKworCQloY2lfcmVxX2FkZF9sZV9wYXNzaXZlX3NjYW4ocmVxKTsKKworCQlCVF9EQkcoIiVzIHN0YXJ0aW5nIGJhY2tncm91bmQgc2Nhbm5pbmciLCBoZGV2LT5uYW1lKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9iYWNrZ3JvdW5kX3NjYW5fY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHN0YXR1cywKKwkJCQkJICAgIHUxNiBvcGNvZGUpCit7CisJaWYgKHN0YXR1cykKKwkJQlRfREJHKCJIQ0kgcmVxdWVzdCBmYWlsZWQgdG8gdXBkYXRlIGJhY2tncm91bmQgc2Nhbm5pbmc6ICIKKwkJICAgICAgICJzdGF0dXMgMHglMi4yeCIsIHN0YXR1cyk7Cit9CisKK3ZvaWQgaGNpX3VwZGF0ZV9iYWNrZ3JvdW5kX3NjYW4oc3RydWN0IGhjaV9kZXYgKmhkZXYpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgaGNpX3JlcXVlc3QgcmVxOworCisJaGNpX3JlcV9pbml0KCZyZXEsIGhkZXYpOworCisJX19oY2lfdXBkYXRlX2JhY2tncm91bmRfc2NhbigmcmVxKTsKKworCWVyciA9IGhjaV9yZXFfcnVuKCZyZXEsIHVwZGF0ZV9iYWNrZ3JvdW5kX3NjYW5fY29tcGxldGUpOworCWlmIChlcnIgJiYgZXJyICE9IC1FTk9EQVRBKQorCQlCVF9FUlIoIkZhaWxlZCB0byBydW4gSENJIHJlcXVlc3Q6IGVyciAlZCIsIGVycik7Cit9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9yZXF1ZXN0LmggYi9uZXQvYmx1ZXRvb3RoL2hjaV9yZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRmMDc0ZAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3JlcXVlc3QuaApAQCAtMCwwICsxLDU0IEBACisvKgorICAgQmx1ZVogLSBCbHVldG9vdGggcHJvdG9jb2wgc3RhY2sgZm9yIExpbnV4CisgICBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZCisgICBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUworICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworICAgQUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJQUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLAorICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSBJUyBESVNDTEFJTUVELgorKi8KKworc3RydWN0IGhjaV9yZXF1ZXN0IHsKKwlzdHJ1Y3QgaGNpX2RldgkJKmhkZXY7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAljbWRfcTsKKworCS8qIElmIHNvbWV0aGluZyBnb2VzIHdyb25nIHdoZW4gYnVpbGRpbmcgdGhlIEhDSSByZXF1ZXN0LCB0aGUgZXJyb3IKKwkgKiB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhpcyBmaWVsZC4KKwkgKi8KKwlpbnQJCQllcnI7Cit9OworCit2b2lkIGhjaV9yZXFfaW5pdChzdHJ1Y3QgaGNpX3JlcXVlc3QgKnJlcSwgc3RydWN0IGhjaV9kZXYgKmhkZXYpOworaW50IGhjaV9yZXFfcnVuKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxLCBoY2lfcmVxX2NvbXBsZXRlX3QgY29tcGxldGUpOwordm9pZCBoY2lfcmVxX2FkZChzdHJ1Y3QgaGNpX3JlcXVlc3QgKnJlcSwgdTE2IG9wY29kZSwgdTMyIHBsZW4sCisJCSBjb25zdCB2b2lkICpwYXJhbSk7Cit2b2lkIGhjaV9yZXFfYWRkX2V2KHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxLCB1MTYgb3Bjb2RlLCB1MzIgcGxlbiwKKwkJICAgIGNvbnN0IHZvaWQgKnBhcmFtLCB1OCBldmVudCk7Cit2b2lkIGhjaV9yZXFfY21kX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1MTYgb3Bjb2RlLCB1OCBzdGF0dXMpOworCitzdHJ1Y3Qgc2tfYnVmZiAqaGNpX3ByZXBhcmVfY21kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1MTYgb3Bjb2RlLCB1MzIgcGxlbiwKKwkJCQljb25zdCB2b2lkICpwYXJhbSk7CisKK3ZvaWQgaGNpX3JlcV9hZGRfbGVfc2Nhbl9kaXNhYmxlKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxKTsKK3ZvaWQgaGNpX3JlcV9hZGRfbGVfcGFzc2l2ZV9zY2FuKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxKTsKKwordm9pZCBoY2lfdXBkYXRlX3BhZ2Vfc2NhbihzdHJ1Y3QgaGNpX2RldiAqaGRldik7Cit2b2lkIF9faGNpX3VwZGF0ZV9wYWdlX3NjYW4oc3RydWN0IGhjaV9yZXF1ZXN0ICpyZXEpOworCitpbnQgaGNpX3VwZGF0ZV9yYW5kb21fYWRkcmVzcyhzdHJ1Y3QgaGNpX3JlcXVlc3QgKnJlcSwgYm9vbCByZXF1aXJlX3ByaXZhY3ksCisJCQkgICAgICB1OCAqb3duX2FkZHJfdHlwZSk7CisKK3ZvaWQgaGNpX3VwZGF0ZV9iYWNrZ3JvdW5kX3NjYW4oc3RydWN0IGhjaV9kZXYgKmhkZXYpOwordm9pZCBfX2hjaV91cGRhdGVfYmFja2dyb3VuZF9zY2FuKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYyBiL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYwppbmRleCAyYzI0NWZkLi4xZDY1YzViIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCkBAIC0yMTYsMTEgKzIxNiwzOSBAQAogCXJlYWRfdW5sb2NrKCZoY2lfc2tfbGlzdC5sb2NrKTsKIH0KIAorc3RhdGljIHZvaWQgcXVldWVfbW9uaXRvcl9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc29jayAqc2s7CisKKwlCVF9EQkcoImxlbiAlZCIsIHNrYi0+bGVuKTsKKworCXJlYWRfbG9jaygmaGNpX3NrX2xpc3QubG9jayk7CisKKwlza19mb3JfZWFjaChzaywgJmhjaV9za19saXN0LmhlYWQpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKm5za2I7CisKKwkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9CT1VORCkKKwkJCWNvbnRpbnVlOworCisJCWlmIChoY2lfcGkoc2spLT5jaGFubmVsICE9IEhDSV9DSEFOTkVMX01PTklUT1IpCisJCQljb250aW51ZTsKKworCQluc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisJCWlmICghbnNrYikKKwkJCWNvbnRpbnVlOworCisJCWlmIChzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssIG5za2IpKQorCQkJa2ZyZWVfc2tiKG5za2IpOworCX0KKworCXJlYWRfdW5sb2NrKCZoY2lfc2tfbGlzdC5sb2NrKTsKK30KKwogLyogU2VuZCBmcmFtZSB0byBtb25pdG9yIHNvY2tldCAqLwogdm9pZCBoY2lfc2VuZF90b19tb25pdG9yKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2NvcHkgPSBOVUxMOworCXN0cnVjdCBoY2lfbW9uX2hkciAqaGRyOwogCV9fbGUxNiBvcGNvZGU7CiAKIAlpZiAoIWF0b21pY19yZWFkKCZtb25pdG9yX3Byb21pc2MpKQpAQCAtMjUxLDc0ICsyNzksMjEgQEAKIAkJcmV0dXJuOwogCX0KIAotCXJlYWRfbG9jaygmaGNpX3NrX2xpc3QubG9jayk7CisJLyogQ3JlYXRlIGEgcHJpdmF0ZSBjb3B5IHdpdGggaGVhZHJvb20gKi8KKwlza2JfY29weSA9IF9fcHNrYl9jb3B5X2ZjbG9uZShza2IsIEhDSV9NT05fSERSX1NJWkUsIEdGUF9BVE9NSUMsIHRydWUpOworCWlmICghc2tiX2NvcHkpCisJCXJldHVybjsKIAotCXNrX2Zvcl9lYWNoKHNrLCAmaGNpX3NrX2xpc3QuaGVhZCkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKKwkvKiBQdXQgaGVhZGVyIGJlZm9yZSB0aGUgZGF0YSAqLworCWhkciA9ICh2b2lkICopIHNrYl9wdXNoKHNrYl9jb3B5LCBIQ0lfTU9OX0hEUl9TSVpFKTsKKwloZHItPm9wY29kZSA9IG9wY29kZTsKKwloZHItPmluZGV4ID0gY3B1X3RvX2xlMTYoaGRldi0+aWQpOworCWhkci0+bGVuID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4pOwogCi0JCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoaGNpX3BpKHNrKS0+Y2hhbm5lbCAhPSBIQ0lfQ0hBTk5FTF9NT05JVE9SKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFza2JfY29weSkgewotCQkJc3RydWN0IGhjaV9tb25faGRyICpoZHI7Ci0KLQkJCS8qIENyZWF0ZSBhIHByaXZhdGUgY29weSB3aXRoIGhlYWRyb29tICovCi0JCQlza2JfY29weSA9IF9fcHNrYl9jb3B5X2ZjbG9uZShza2IsIEhDSV9NT05fSERSX1NJWkUsCi0JCQkJCQkgICAgICBHRlBfQVRPTUlDLCB0cnVlKTsKLQkJCWlmICghc2tiX2NvcHkpCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIFB1dCBoZWFkZXIgYmVmb3JlIHRoZSBkYXRhICovCi0JCQloZHIgPSAodm9pZCAqKSBza2JfcHVzaChza2JfY29weSwgSENJX01PTl9IRFJfU0laRSk7Ci0JCQloZHItPm9wY29kZSA9IG9wY29kZTsKLQkJCWhkci0+aW5kZXggPSBjcHVfdG9fbGUxNihoZGV2LT5pZCk7Ci0JCQloZHItPmxlbiA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKLQkJfQotCi0JCW5za2IgPSBza2JfY2xvbmUoc2tiX2NvcHksIEdGUF9BVE9NSUMpOwotCQlpZiAoIW5za2IpCi0JCQljb250aW51ZTsKLQotCQlpZiAoc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBuc2tiKSkKLQkJCWtmcmVlX3NrYihuc2tiKTsKLQl9Ci0KLQlyZWFkX3VubG9jaygmaGNpX3NrX2xpc3QubG9jayk7Ci0KKwlxdWV1ZV9tb25pdG9yX3NrYihza2JfY29weSk7CiAJa2ZyZWVfc2tiKHNrYl9jb3B5KTsKIH0KIAotc3RhdGljIHZvaWQgc2VuZF9tb25pdG9yX2V2ZW50KHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc3RydWN0IHNvY2sgKnNrOwotCi0JQlRfREJHKCJsZW4gJWQiLCBza2ItPmxlbik7Ci0KLQlyZWFkX2xvY2soJmhjaV9za19saXN0LmxvY2spOwotCi0Jc2tfZm9yX2VhY2goc2ssICZoY2lfc2tfbGlzdC5oZWFkKSB7Ci0JCXN0cnVjdCBza19idWZmICpuc2tiOwotCi0JCWlmIChzay0+c2tfc3RhdGUgIT0gQlRfQk9VTkQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoaGNpX3BpKHNrKS0+Y2hhbm5lbCAhPSBIQ0lfQ0hBTk5FTF9NT05JVE9SKQotCQkJY29udGludWU7Ci0KLQkJbnNrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwotCQlpZiAoIW5za2IpCi0JCQljb250aW51ZTsKLQotCQlpZiAoc29ja19xdWV1ZV9yY3Zfc2tiKHNrLCBuc2tiKSkKLQkJCWtmcmVlX3NrYihuc2tiKTsKLQl9Ci0KLQlyZWFkX3VubG9jaygmaGNpX3NrX2xpc3QubG9jayk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY3JlYXRlX21vbml0b3JfZXZlbnQoc3RydWN0IGhjaV9kZXYgKmhkZXYsIGludCBldmVudCkKIHsKIAlzdHJ1Y3QgaGNpX21vbl9oZHIgKmhkcjsKQEAgLTQyMiw3ICszOTcsNyBAQAogCiAJCXNrYiA9IGNyZWF0ZV9tb25pdG9yX2V2ZW50KGhkZXYsIGV2ZW50KTsKIAkJaWYgKHNrYikgewotCQkJc2VuZF9tb25pdG9yX2V2ZW50KHNrYik7CisJCQlxdWV1ZV9tb25pdG9yX3NrYihza2IpOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCX0KIAl9CkBAIC0xMjMwLDYgKzEyMDUsOCBAQAogewogCWludCBlcnI7CiAKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9oY2kpID4gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCiAJZXJyID0gcHJvdG9fcmVnaXN0ZXIoJmhjaV9za19wcm90bywgMCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCmluZGV4IGQwNGRjMDAuLjZiYTMzZjkgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCkBAIC02MywxMCArNjMsMTAgQEAKIHN0YXRpYyB2b2lkIGwyY2FwX3R4KHN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCBzdHJ1Y3QgbDJjYXBfY3RybCAqY29udHJvbCwKIAkJICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpza2JzLCB1OCBldmVudCk7CiAKLXN0YXRpYyBpbmxpbmUgX191OCBiZGFkZHJfdHlwZShzdHJ1Y3QgaGNpX2Nvbm4gKmhjb24sIF9fdTggdHlwZSkKK3N0YXRpYyBpbmxpbmUgdTggYmRhZGRyX3R5cGUodTggbGlua190eXBlLCB1OCBiZGFkZHJfdHlwZSkKIHsKLQlpZiAoaGNvbi0+dHlwZSA9PSBMRV9MSU5LKSB7Ci0JCWlmICh0eXBlID09IEFERFJfTEVfREVWX1BVQkxJQykKKwlpZiAobGlua190eXBlID09IExFX0xJTkspIHsKKwkJaWYgKGJkYWRkcl90eXBlID09IEFERFJfTEVfREVWX1BVQkxJQykKIAkJCXJldHVybiBCREFERFJfTEVfUFVCTElDOwogCQllbHNlCiAJCQlyZXR1cm4gQkRBRERSX0xFX1JBTkRPTTsKQEAgLTc1LDYgKzc1LDE2IEBACiAJcmV0dXJuIEJEQUREUl9CUkVEUjsKIH0KIAorc3RhdGljIGlubGluZSB1OCBiZGFkZHJfc3JjX3R5cGUoc3RydWN0IGhjaV9jb25uICpoY29uKQoreworCXJldHVybiBiZGFkZHJfdHlwZShoY29uLT50eXBlLCBoY29uLT5zcmNfdHlwZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggYmRhZGRyX2RzdF90eXBlKHN0cnVjdCBoY2lfY29ubiAqaGNvbikKK3sKKwlyZXR1cm4gYmRhZGRyX3R5cGUoaGNvbi0+dHlwZSwgaGNvbi0+ZHN0X3R5cGUpOworfQorCiAvKiAtLS0tIEwyQ0FQIGNoYW5uZWxzIC0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCBsMmNhcF9jaGFuICpfX2wyY2FwX2dldF9jaGFuX2J5X2RjaWQoc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4sCkBAIC02NDYsNyArNjU2LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZjb25uLT5jaGFuX2wsIGxpc3QpIHsKIAkJbDJjYXBfY2hhbl9sb2NrKGNoYW4pOwogCQliYWNweSgmY2hhbi0+ZHN0LCAmaGNvbi0+ZHN0KTsKLQkJY2hhbi0+ZHN0X3R5cGUgPSBiZGFkZHJfdHlwZShoY29uLCBoY29uLT5kc3RfdHlwZSk7CisJCWNoYW4tPmRzdF90eXBlID0gYmRhZGRyX2RzdF90eXBlKGhjb24pOwogCQlsMmNhcF9jaGFuX3VubG9jayhjaGFuKTsKIAl9CiAKQEAgLTM3OTAsOCArMzgwMCw4IEBACiAKIAliYWNweSgmY2hhbi0+c3JjLCAmY29ubi0+aGNvbi0+c3JjKTsKIAliYWNweSgmY2hhbi0+ZHN0LCAmY29ubi0+aGNvbi0+ZHN0KTsKLQljaGFuLT5zcmNfdHlwZSA9IGJkYWRkcl90eXBlKGNvbm4tPmhjb24sIGNvbm4tPmhjb24tPnNyY190eXBlKTsKLQljaGFuLT5kc3RfdHlwZSA9IGJkYWRkcl90eXBlKGNvbm4tPmhjb24sIGNvbm4tPmhjb24tPmRzdF90eXBlKTsKKwljaGFuLT5zcmNfdHlwZSA9IGJkYWRkcl9zcmNfdHlwZShjb25uLT5oY29uKTsKKwljaGFuLT5kc3RfdHlwZSA9IGJkYWRkcl9kc3RfdHlwZShjb25uLT5oY29uKTsKIAljaGFuLT5wc20gID0gcHNtOwogCWNoYW4tPmRjaWQgPSBzY2lkOwogCWNoYW4tPmxvY2FsX2FtcF9pZCA9IGFtcF9pZDsKQEAgLTU0NDEsOCArNTQ1MSw4IEBACiAKIAliYWNweSgmY2hhbi0+c3JjLCAmY29ubi0+aGNvbi0+c3JjKTsKIAliYWNweSgmY2hhbi0+ZHN0LCAmY29ubi0+aGNvbi0+ZHN0KTsKLQljaGFuLT5zcmNfdHlwZSA9IGJkYWRkcl90eXBlKGNvbm4tPmhjb24sIGNvbm4tPmhjb24tPnNyY190eXBlKTsKLQljaGFuLT5kc3RfdHlwZSA9IGJkYWRkcl90eXBlKGNvbm4tPmhjb24sIGNvbm4tPmhjb24tPmRzdF90eXBlKTsKKwljaGFuLT5zcmNfdHlwZSA9IGJkYWRkcl9zcmNfdHlwZShjb25uLT5oY29uKTsKKwljaGFuLT5kc3RfdHlwZSA9IGJkYWRkcl9kc3RfdHlwZShjb25uLT5oY29uKTsKIAljaGFuLT5wc20gID0gcHNtOwogCWNoYW4tPmRjaWQgPSBzY2lkOwogCWNoYW4tPm9tdHUgPSBtdHU7CkBAIC02ODgxLDcgKzY4OTEsNyBAQAogCSAqLwogCWlmIChoY29uLT50eXBlID09IExFX0xJTksgJiYKIAkgICAgaGNpX2JkYWRkcl9saXN0X2xvb2t1cCgmaGNvbi0+aGRldi0+YmxhY2tsaXN0LCAmaGNvbi0+ZHN0LAotCQkJCSAgIGJkYWRkcl90eXBlKGhjb24sIGhjb24tPmRzdF90eXBlKSkpIHsKKwkJCQkgICBiZGFkZHJfZHN0X3R5cGUoaGNvbikpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm47CiAJfQpAQCAtNjk2OCw3ICs2OTc4LDcgQEAKIAogCWlmICh0ZXN0X2JpdChIQ0lfTEVfRU5BQkxFRCwgJmhjb24tPmhkZXYtPmRldl9mbGFncykgJiYKIAkgICAgKGJyZWRyX3NjX2VuYWJsZWQoaGNvbi0+aGRldikgfHwKLQkgICAgIHRlc3RfYml0KEhDSV9GT1JDRV9MRVNDLCAmaGNvbi0+aGRldi0+ZGJnX2ZsYWdzKSkpCisJICAgICB0ZXN0X2JpdChIQ0lfRk9SQ0VfQlJFRFJfU01QLCAmaGNvbi0+aGRldi0+ZGJnX2ZsYWdzKSkpCiAJCWNvbm4tPmxvY2FsX2ZpeGVkX2NoYW4gfD0gTDJDQVBfRkNfU01QX0JSRURSOwogCiAJbXV0ZXhfaW5pdCgmY29ubi0+aWRlbnRfbG9jayk7CkBAIC03MTIzLDcgKzcxMzMsNyBAQAogCiAJLyogVXBkYXRlIHNvdXJjZSBhZGRyIG9mIHRoZSBzb2NrZXQgKi8KIAliYWNweSgmY2hhbi0+c3JjLCAmaGNvbi0+c3JjKTsKLQljaGFuLT5zcmNfdHlwZSA9IGJkYWRkcl90eXBlKGhjb24sIGhjb24tPnNyY190eXBlKTsKKwljaGFuLT5zcmNfdHlwZSA9IGJkYWRkcl9zcmNfdHlwZShoY29uKTsKIAogCV9fbDJjYXBfY2hhbl9hZGQoY29ubiwgY2hhbik7CiAKQEAgLTcxOTcsOCArNzIwNywxMCBAQAogICogZ2xvYmFsIGxpc3QgKGJ5IHBhc3NpbmcgTlVMTCBhcyBmaXJzdCBwYXJhbWV0ZXIpLgogICovCiBzdGF0aWMgc3RydWN0IGwyY2FwX2NoYW4gKmwyY2FwX2dsb2JhbF9maXhlZF9jaGFuKHN0cnVjdCBsMmNhcF9jaGFuICpjLAotCQkJCQkJICBiZGFkZHJfdCAqc3JjLCB1OCBsaW5rX3R5cGUpCisJCQkJCQkgIHN0cnVjdCBoY2lfY29ubiAqaGNvbikKIHsKKwl1OCBzcmNfdHlwZSA9IGJkYWRkcl9zcmNfdHlwZShoY29uKTsKKwogCXJlYWRfbG9jaygmY2hhbl9saXN0X2xvY2spOwogCiAJaWYgKGMpCkBAIC03MjExLDExICs3MjIzLDkgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoYy0+c3RhdGUgIT0gQlRfTElTVEVOKQogCQkJY29udGludWU7Ci0JCWlmIChiYWNtcCgmYy0+c3JjLCBzcmMpICYmIGJhY21wKCZjLT5zcmMsIEJEQUREUl9BTlkpKQorCQlpZiAoYmFjbXAoJmMtPnNyYywgJmhjb24tPnNyYykgJiYgYmFjbXAoJmMtPnNyYywgQkRBRERSX0FOWSkpCiAJCQljb250aW51ZTsKLQkJaWYgKGxpbmtfdHlwZSA9PSBBQ0xfTElOSyAmJiBjLT5zcmNfdHlwZSAhPSBCREFERFJfQlJFRFIpCi0JCQljb250aW51ZTsKLQkJaWYgKGxpbmtfdHlwZSA9PSBMRV9MSU5LICYmIGMtPnNyY190eXBlID09IEJEQUREUl9CUkVEUikKKwkJaWYgKHNyY190eXBlICE9IGMtPnNyY190eXBlKQogCQkJY29udGludWU7CiAKIAkJbDJjYXBfY2hhbl9ob2xkKGMpOwpAQCAtNzI0Niw3ICs3MjU2LDcgQEAKIAlpZiAoIWNvbm4pCiAJCXJldHVybjsKIAotCWRzdF90eXBlID0gYmRhZGRyX3R5cGUoaGNvbiwgaGNvbi0+ZHN0X3R5cGUpOworCWRzdF90eXBlID0gYmRhZGRyX2RzdF90eXBlKGhjb24pOwogCiAJLyogSWYgZGV2aWNlIGlzIGJsb2NrZWQsIGRvIG5vdCBjcmVhdGUgY2hhbm5lbHMgZm9yIGl0ICovCiAJaWYgKGhjaV9iZGFkZHJfbGlzdF9sb29rdXAoJmhkZXYtPmJsYWNrbGlzdCwgJmhjb24tPmRzdCwgZHN0X3R5cGUpKQpAQCAtNzI1Nyw3ICs3MjY3LDcgQEAKIAkgKiB3ZSBsZWZ0IG9mZiwgYmVjYXVzZSB0aGUgbGlzdCBsb2NrIHdvdWxkIHByZXZlbnQgY2FsbGluZyB0aGUKIAkgKiBwb3RlbnRpYWxseSBzbGVlcGluZyBsMmNhcF9jaGFuX2xvY2soKSBmdW5jdGlvbi4KIAkgKi8KLQlwY2hhbiA9IGwyY2FwX2dsb2JhbF9maXhlZF9jaGFuKE5VTEwsICZoZGV2LT5iZGFkZHIsIGhjb24tPnR5cGUpOworCXBjaGFuID0gbDJjYXBfZ2xvYmFsX2ZpeGVkX2NoYW4oTlVMTCwgaGNvbik7CiAJd2hpbGUgKHBjaGFuKSB7CiAJCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuLCAqbmV4dDsKIApAQCAtNzI3MCw3ICs3MjgwLDcgQEAKIAkJaWYgKGNoYW4pIHsKIAkJCWJhY3B5KCZjaGFuLT5zcmMsICZoY29uLT5zcmMpOwogCQkJYmFjcHkoJmNoYW4tPmRzdCwgJmhjb24tPmRzdCk7Ci0JCQljaGFuLT5zcmNfdHlwZSA9IGJkYWRkcl90eXBlKGhjb24sIGhjb24tPnNyY190eXBlKTsKKwkJCWNoYW4tPnNyY190eXBlID0gYmRhZGRyX3NyY190eXBlKGhjb24pOwogCQkJY2hhbi0+ZHN0X3R5cGUgPSBkc3RfdHlwZTsKIAogCQkJX19sMmNhcF9jaGFuX2FkZChjb25uLCBjaGFuKTsKQEAgLTcyNzgsOCArNzI4OCw3IEBACiAKIAkJbDJjYXBfY2hhbl91bmxvY2socGNoYW4pOwogbmV4dDoKLQkJbmV4dCA9IGwyY2FwX2dsb2JhbF9maXhlZF9jaGFuKHBjaGFuLCAmaGRldi0+YmRhZGRyLAotCQkJCQkgICAgICAgaGNvbi0+dHlwZSk7CisJCW5leHQgPSBsMmNhcF9nbG9iYWxfZml4ZWRfY2hhbihwY2hhbiwgaGNvbik7CiAJCWwyY2FwX2NoYW5fcHV0KHBjaGFuKTsKIAkJcGNoYW4gPSBuZXh0OwogCX0KQEAgLTc1MjcsOCArNzUzNiw4IEBACiAJcmVhZF9sb2NrKCZjaGFuX2xpc3RfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjaGFuX2xpc3QsIGdsb2JhbF9sKSB7Ci0JCXNlcV9wcmludGYoZiwgIiVwTVIgJXBNUiAlZCAlZCAweCU0LjR4IDB4JTQuNHggJWQgJWQgJWQgJWRcbiIsCi0JCQkgICAmYy0+c3JjLCAmYy0+ZHN0LAorCQlzZXFfcHJpbnRmKGYsICIlcE1SICgldSkgJXBNUiAoJXUpICVkICVkIDB4JTQuNHggMHglNC40eCAlZCAlZCAlZCAlZFxuIiwKKwkJCSAgICZjLT5zcmMsIGMtPnNyY190eXBlLCAmYy0+ZHN0LCBjLT5kc3RfdHlwZSwKIAkJCSAgIGMtPnN0YXRlLCBfX2xlMTZfdG9fY3B1KGMtPnBzbSksCiAJCQkgICBjLT5zY2lkLCBjLT5kY2lkLCBjLT5pbXR1LCBjLT5vbXR1LAogCQkJICAgYy0+c2VjX2xldmVsLCBjLT5tb2RlKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXBfc29jay5jIGIvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKaW5kZXggZjY1Y2FmNC4uNjA2OTRmMCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcF9zb2NrLmMKQEAgLTMwMiw3ICszMDIsNyBAQAogc3RhdGljIGludCBsMmNhcF9zb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLAogCQkJICAgICBpbnQgZmxhZ3MpCiB7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJREVGSU5FX1dBSVRfRlVOQyh3YWl0LCB3b2tlbl93YWtlX2Z1bmN0aW9uKTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zaywgKm5zazsKIAlsb25nIHRpbWVvOwogCWludCBlcnIgPSAwOwpAQCAtMzE2LDggKzMxNiw2IEBACiAJLyogV2FpdCBmb3IgYW4gaW5jb21pbmcgY29ubmVjdGlvbi4gKHdha2Utb25lKS4gKi8KIAlhZGRfd2FpdF9xdWV1ZV9leGNsdXNpdmUoc2tfc2xlZXAoc2spLCAmd2FpdCk7CiAJd2hpbGUgKDEpIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQogCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgewogCQkJZXJyID0gLUVCQURGRDsKIAkJCWJyZWFrOwpAQCAtMzM4LDEwICszMzYsMTEgQEAKIAkJfQogCiAJCXJlbGVhc2Vfc29jayhzayk7Ci0JCXRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7CisKKwkJdGltZW8gPSB3YWl0X3dva2VuKCZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUsIHRpbWVvKTsKKwogCQlsb2NrX3NvY2tfbmVzdGVkKHNrLCBMMkNBUF9ORVNUSU5HX1BBUkVOVCk7CiAJfQotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZShza19zbGVlcChzayksICZ3YWl0KTsKIAogCWlmIChlcnIpCkBAIC0xNjE0LDYgKzE2MTMsOCBAQAogewogCWludCBlcnI7CiAKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9sMikgPiBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisKIAllcnIgPSBwcm90b19yZWdpc3RlcigmbDJjYXBfcHJvdG8sIDApOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9tZ210LmMgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwppbmRleCA2OTNjZThiLi45ZWM1MzkwIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL21nbXQuYworKysgYi9uZXQvYmx1ZXRvb3RoL21nbXQuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvbDJjYXAuaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL21nbXQuaD4KIAorI2luY2x1ZGUgImhjaV9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAic21wLmgiCiAKICNkZWZpbmUgTUdNVF9WRVJTSU9OCTEKQEAgLTEzMCw2ICsxMzEsOSBAQAogCiAjZGVmaW5lIENBQ0hFX1RJTUVPVVQJbXNlY3NfdG9famlmZmllcygyICogMTAwMCkKIAorI2RlZmluZSBaRVJPX0tFWSAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAiIFwKKwkJICJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIKKwogc3RydWN0IHBlbmRpbmdfY21kIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJdTE2IG9wY29kZTsKQEAgLTEzOCw3ICsxNDIsNyBAQAogCXNpemVfdCBwYXJhbV9sZW47CiAJc3RydWN0IHNvY2sgKnNrOwogCXZvaWQgKnVzZXJfZGF0YTsKLQl2b2lkICgqY21kX2NvbXBsZXRlKShzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZCwgdTggc3RhdHVzKTsKKwlpbnQgKCpjbWRfY29tcGxldGUpKHN0cnVjdCBwZW5kaW5nX2NtZCAqY21kLCB1OCBzdGF0dXMpOwogfTsKIAogLyogSENJIHRvIE1HTVQgZXJyb3IgY29kZSBjb252ZXJzaW9uIHRhYmxlICovCkBAIC01NjksOCArNTczLDcgQEAKIAkJCXNldHRpbmdzIHw9IE1HTVRfU0VUVElOR19IUzsKIAkJfQogCi0JCWlmIChsbXBfc2NfY2FwYWJsZShoZGV2KSB8fAotCQkgICAgdGVzdF9iaXQoSENJX0ZPUkNFX1NDLCAmaGRldi0+ZGJnX2ZsYWdzKSkKKwkJaWYgKGxtcF9zY19jYXBhYmxlKGhkZXYpKQogCQkJc2V0dGluZ3MgfD0gTUdNVF9TRVRUSU5HX1NFQ1VSRV9DT05OOwogCX0KIApAQCAtMTI1MSw3ICsxMjU0LDcgQEAKIAkJCSAgICBzaXplb2Yoc2V0dGluZ3MpKTsKIH0KIAotc3RhdGljIHZvaWQgY2xlYW5fdXBfaGNpX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMpCitzdGF0aWMgdm9pZCBjbGVhbl91cF9oY2lfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHN0YXR1cywgdTE2IG9wY29kZSkKIHsKIAlCVF9EQkcoIiVzIHN0YXR1cyAweCUwMngiLCBoZGV2LT5uYW1lLCBzdGF0dXMpOwogCkBAIC0xNDg2LDE2ICsxNDg5LDE2IEBACiAJY21kX3N0YXR1c19yc3AoY21kLCBkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuZXJpY19jbWRfY29tcGxldGUoc3RydWN0IHBlbmRpbmdfY21kICpjbWQsIHU4IHN0YXR1cykKK3N0YXRpYyBpbnQgZ2VuZXJpY19jbWRfY29tcGxldGUoc3RydWN0IHBlbmRpbmdfY21kICpjbWQsIHU4IHN0YXR1cykKIHsKLQljbWRfY29tcGxldGUoY21kLT5zaywgY21kLT5pbmRleCwgY21kLT5vcGNvZGUsIHN0YXR1cywgY21kLT5wYXJhbSwKLQkJICAgICBjbWQtPnBhcmFtX2xlbik7CisJcmV0dXJuIGNtZF9jb21wbGV0ZShjbWQtPnNrLCBjbWQtPmluZGV4LCBjbWQtPm9wY29kZSwgc3RhdHVzLAorCQkJICAgIGNtZC0+cGFyYW0sIGNtZC0+cGFyYW1fbGVuKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkcl9jbWRfY29tcGxldGUoc3RydWN0IHBlbmRpbmdfY21kICpjbWQsIHU4IHN0YXR1cykKK3N0YXRpYyBpbnQgYWRkcl9jbWRfY29tcGxldGUoc3RydWN0IHBlbmRpbmdfY21kICpjbWQsIHU4IHN0YXR1cykKIHsKLQljbWRfY29tcGxldGUoY21kLT5zaywgY21kLT5pbmRleCwgY21kLT5vcGNvZGUsIHN0YXR1cywgY21kLT5wYXJhbSwKLQkJICAgICBzaXplb2Yoc3RydWN0IG1nbXRfYWRkcl9pbmZvKSk7CisJcmV0dXJuIGNtZF9jb21wbGV0ZShjbWQtPnNrLCBjbWQtPmluZGV4LCBjbWQtPm9wY29kZSwgc3RhdHVzLCBjbWQtPnBhcmFtLAorCQkJICAgIHNpemVvZihzdHJ1Y3QgbWdtdF9hZGRyX2luZm8pKTsKIH0KIAogc3RhdGljIHU4IG1nbXRfYnJlZHJfc3VwcG9ydChzdHJ1Y3QgaGNpX2RldiAqaGRldikKQEAgLTE1MTgsNyArMTUyMSw4IEBACiAJCXJldHVybiBNR01UX1NUQVRVU19TVUNDRVNTOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfZGlzY292ZXJhYmxlX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMpCitzdGF0aWMgdm9pZCBzZXRfZGlzY292ZXJhYmxlX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMsCisJCQkJICAgICAgdTE2IG9wY29kZSkKIHsKIAlzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZDsKIAlzdHJ1Y3QgbWdtdF9tb2RlICpjcDsKQEAgLTE1NjYsNyArMTU3MCw3IEBACiAJICogZW50cmllcy4KIAkgKi8KIAloY2lfcmVxX2luaXQoJnJlcSwgaGRldik7Ci0JaGNpX3VwZGF0ZV9wYWdlX3NjYW4oaGRldiwgJnJlcSk7CisJX19oY2lfdXBkYXRlX3BhZ2Vfc2NhbigmcmVxKTsKIAl1cGRhdGVfY2xhc3MoJnJlcSk7CiAJaGNpX3JlcV9ydW4oJnJlcSwgTlVMTCk7CiAKQEAgLTE3NzcsNyArMTc4MSw4IEBACiAJCWhjaV9yZXFfYWRkKHJlcSwgSENJX09QX1dSSVRFX1BBR0VfU0NBTl9UWVBFLCAxLCAmdHlwZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9jb25uZWN0YWJsZV9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzKQorc3RhdGljIHZvaWQgc2V0X2Nvbm5lY3RhYmxlX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMsCisJCQkJICAgICB1MTYgb3Bjb2RlKQogewogCXN0cnVjdCBwZW5kaW5nX2NtZCAqY21kOwogCXN0cnVjdCBtZ210X21vZGUgKmNwOwpAQCAtMTgxMyw3ICsxODE4LDcgQEAKIAogCWlmIChjb25uX2NoYW5nZWQgfHwgZGlzY292X2NoYW5nZWQpIHsKIAkJbmV3X3NldHRpbmdzKGhkZXYsIGNtZC0+c2spOwotCQloY2lfdXBkYXRlX3BhZ2Vfc2NhbihoZGV2LCBOVUxMKTsKKwkJaGNpX3VwZGF0ZV9wYWdlX3NjYW4oaGRldik7CiAJCWlmIChkaXNjb3ZfY2hhbmdlZCkKIAkJCW1nbXRfdXBkYXRlX2Fkdl9kYXRhKGhkZXYpOwogCQloY2lfdXBkYXRlX2JhY2tncm91bmRfc2NhbihoZGV2KTsKQEAgLTE4NDcsNyArMTg1Miw3IEBACiAJCXJldHVybiBlcnI7CiAKIAlpZiAoY2hhbmdlZCkgewotCQloY2lfdXBkYXRlX3BhZ2Vfc2NhbihoZGV2LCBOVUxMKTsKKwkJaGNpX3VwZGF0ZV9wYWdlX3NjYW4oaGRldik7CiAJCWhjaV91cGRhdGVfYmFja2dyb3VuZF9zY2FuKGhkZXYpOwogCQlyZXR1cm4gbmV3X3NldHRpbmdzKGhkZXYsIHNrKTsKIAl9CkBAIC0yMTk1LDcgKzIyMDAsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGxlX2VuYWJsZV9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzKQorc3RhdGljIHZvaWQgbGVfZW5hYmxlX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMsIHUxNiBvcGNvZGUpCiB7CiAJc3RydWN0IGNtZF9sb29rdXAgbWF0Y2ggPSB7IE5VTEwsIGhkZXYgfTsKIApAQCAtMjIyNyw5ICsyMjMyLDggQEAKIAkJaGNpX3JlcV9pbml0KCZyZXEsIGhkZXYpOwogCQl1cGRhdGVfYWR2X2RhdGEoJnJlcSk7CiAJCXVwZGF0ZV9zY2FuX3JzcF9kYXRhKCZyZXEpOworCQlfX2hjaV91cGRhdGVfYmFja2dyb3VuZF9zY2FuKCZyZXEpOwogCQloY2lfcmVxX3J1bigmcmVxLCBOVUxMKTsKLQotCQloY2lfdXBkYXRlX2JhY2tncm91bmRfc2NhbihoZGV2KTsKIAl9CiAKIHVubG9jazoKQEAgLTIzODYsNyArMjM5MCw3IEBACiAJaGNpX2Rldl91bmxvY2soaGRldik7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZF91dWlkX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMpCitzdGF0aWMgdm9pZCBhZGRfdXVpZF9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzLCB1MTYgb3Bjb2RlKQogewogCUJUX0RCRygic3RhdHVzIDB4JTAyeCIsIHN0YXR1cyk7CiAKQEAgLTI0NjUsNyArMjQ2OSw3IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCByZW1vdmVfdXVpZF9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzKQorc3RhdGljIHZvaWQgcmVtb3ZlX3V1aWRfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHN0YXR1cywgdTE2IG9wY29kZSkKIHsKIAlCVF9EQkcoInN0YXR1cyAweCUwMngiLCBzdGF0dXMpOwogCkBAIC0yNTUwLDcgKzI1NTQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9jbGFzc19jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzKQorc3RhdGljIHZvaWQgc2V0X2NsYXNzX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMsIHUxNiBvcGNvZGUpCiB7CiAJQlRfREJHKCJzdGF0dXMgMHglMDJ4Iiwgc3RhdHVzKTsKIApAQCAtMzA5OCwxNiArMzEwMiwxNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBwYWlyaW5nX2NvbXBsZXRlKHN0cnVjdCBwZW5kaW5nX2NtZCAqY21kLCB1OCBzdGF0dXMpCitzdGF0aWMgaW50IHBhaXJpbmdfY29tcGxldGUoc3RydWN0IHBlbmRpbmdfY21kICpjbWQsIHU4IHN0YXR1cykKIHsKIAlzdHJ1Y3QgbWdtdF9ycF9wYWlyX2RldmljZSBycDsKIAlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSBjbWQtPnVzZXJfZGF0YTsKKwlpbnQgZXJyOwogCiAJYmFjcHkoJnJwLmFkZHIuYmRhZGRyLCAmY29ubi0+ZHN0KTsKIAlycC5hZGRyLnR5cGUgPSBsaW5rX3RvX2JkYWRkcihjb25uLT50eXBlLCBjb25uLT5kc3RfdHlwZSk7CiAKLQljbWRfY29tcGxldGUoY21kLT5zaywgY21kLT5pbmRleCwgTUdNVF9PUF9QQUlSX0RFVklDRSwgc3RhdHVzLAotCQkgICAgICZycCwgc2l6ZW9mKHJwKSk7CisJZXJyID0gY21kX2NvbXBsZXRlKGNtZC0+c2ssIGNtZC0+aW5kZXgsIE1HTVRfT1BfUEFJUl9ERVZJQ0UsIHN0YXR1cywKKwkJCSAgICZycCwgc2l6ZW9mKHJwKSk7CiAKIAkvKiBTbyB3ZSBkb24ndCBnZXQgZnVydGhlciBjYWxsYmFja3MgZm9yIHRoaXMgY29ubmVjdGlvbiAqLwogCWNvbm4tPmNvbm5lY3RfY2ZtX2NiID0gTlVMTDsKQEAgLTMxMjIsNiArMzEyNyw4IEBACiAJY2xlYXJfYml0KEhDSV9DT05OX1BBUkFNX1JFTU9WQUxfUEVORCwgJmNvbm4tPmZsYWdzKTsKIAogCWhjaV9jb25uX3B1dChjb25uKTsKKworCXJldHVybiBlcnI7CiB9CiAKIHZvaWQgbWdtdF9zbXBfY29tcGxldGUoc3RydWN0IGhjaV9jb25uICpjb25uLCBib29sIGNvbXBsZXRlKQpAQCAtMzQ4MSw3ICszNDg4LDcgQEAKIAloY2lfcmVxX2FkZChyZXEsIEhDSV9PUF9XUklURV9MT0NBTF9OQU1FLCBzaXplb2YoY3ApLCAmY3ApOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfbmFtZV9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzKQorc3RhdGljIHZvaWQgc2V0X25hbWVfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHN0YXR1cywgdTE2IG9wY29kZSkKIHsKIAlzdHJ1Y3QgbWdtdF9jcF9zZXRfbG9jYWxfbmFtZSAqY3A7CiAJc3RydWN0IHBlbmRpbmdfY21kICpjbWQ7CkBAIC0zNjI5LDEwICszNjM2LDE2IEBACiBzdGF0aWMgaW50IGFkZF9yZW1vdGVfb29iX2RhdGEoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldiwKIAkJCSAgICAgICB2b2lkICpkYXRhLCB1MTYgbGVuKQogeworCXN0cnVjdCBtZ210X2FkZHJfaW5mbyAqYWRkciA9IGRhdGE7CiAJaW50IGVycjsKIAogCUJUX0RCRygiJXMgIiwgaGRldi0+bmFtZSk7CiAKKwlpZiAoIWJkYWRkcl90eXBlX2lzX3ZhbGlkKGFkZHItPnR5cGUpKQorCQlyZXR1cm4gY21kX2NvbXBsZXRlKHNrLCBoZGV2LT5pZCwgTUdNVF9PUF9BRERfUkVNT1RFX09PQl9EQVRBLAorCQkJCSAgICBNR01UX1NUQVRVU19JTlZBTElEX1BBUkFNUywgYWRkciwKKwkJCQkgICAgc2l6ZW9mKCphZGRyKSk7CisKIAloY2lfZGV2X2xvY2soaGRldik7CiAKIAlpZiAobGVuID09IE1HTVRfQUREX1JFTU9URV9PT0JfREFUQV9TSVpFKSB7CkBAIC0zNjU5LDI4ICszNjcyLDUzIEBACiAJCQkJICAgc3RhdHVzLCAmY3AtPmFkZHIsIHNpemVvZihjcC0+YWRkcikpOwogCX0gZWxzZSBpZiAobGVuID09IE1HTVRfQUREX1JFTU9URV9PT0JfRVhUX0RBVEFfU0laRSkgewogCQlzdHJ1Y3QgbWdtdF9jcF9hZGRfcmVtb3RlX29vYl9leHRfZGF0YSAqY3AgPSBkYXRhOwotCQl1OCAqcmFuZDE5MiwgKmhhc2gxOTI7CisJCXU4ICpyYW5kMTkyLCAqaGFzaDE5MiwgKnJhbmQyNTYsICpoYXNoMjU2OwogCQl1OCBzdGF0dXM7CiAKLQkJaWYgKGNwLT5hZGRyLnR5cGUgIT0gQkRBRERSX0JSRURSKSB7Ci0JCQllcnIgPSBjbWRfY29tcGxldGUoc2ssIGhkZXYtPmlkLAotCQkJCQkgICBNR01UX09QX0FERF9SRU1PVEVfT09CX0RBVEEsCi0JCQkJCSAgIE1HTVRfU1RBVFVTX0lOVkFMSURfUEFSQU1TLAotCQkJCQkgICAmY3AtPmFkZHIsIHNpemVvZihjcC0+YWRkcikpOwotCQkJZ290byB1bmxvY2s7Ci0JCX0KLQogCQlpZiAoYmRhZGRyX3R5cGVfaXNfbGUoY3AtPmFkZHIudHlwZSkpIHsKKwkJCS8qIEVuZm9yY2UgemVyby12YWx1ZWQgMTkyLWJpdCBwYXJhbWV0ZXJzIGFzCisJCQkgKiBsb25nIGFzIGxlZ2FjeSBTTVAgT09CIGlzbid0IGltcGxlbWVudGVkLgorCQkJICovCisJCQlpZiAobWVtY21wKGNwLT5yYW5kMTkyLCBaRVJPX0tFWSwgMTYpIHx8CisJCQkgICAgbWVtY21wKGNwLT5oYXNoMTkyLCBaRVJPX0tFWSwgMTYpKSB7CisJCQkJZXJyID0gY21kX2NvbXBsZXRlKHNrLCBoZGV2LT5pZCwKKwkJCQkJCSAgIE1HTVRfT1BfQUREX1JFTU9URV9PT0JfREFUQSwKKwkJCQkJCSAgIE1HTVRfU1RBVFVTX0lOVkFMSURfUEFSQU1TLAorCQkJCQkJICAgYWRkciwgc2l6ZW9mKCphZGRyKSk7CisJCQkJZ290byB1bmxvY2s7CisJCQl9CisKIAkJCXJhbmQxOTIgPSBOVUxMOwogCQkJaGFzaDE5MiA9IE5VTEw7CiAJCX0gZWxzZSB7Ci0JCQlyYW5kMTkyID0gY3AtPnJhbmQxOTI7Ci0JCQloYXNoMTkyID0gY3AtPmhhc2gxOTI7CisJCQkvKiBJbiBjYXNlIG9uZSBvZiB0aGUgUC0xOTIgdmFsdWVzIGlzIHNldCB0byB6ZXJvLAorCQkJICogdGhlbiBqdXN0IGRpc2FibGUgT09CIGRhdGEgZm9yIFAtMTkyLgorCQkJICovCisJCQlpZiAoIW1lbWNtcChjcC0+cmFuZDE5MiwgWkVST19LRVksIDE2KSB8fAorCQkJICAgICFtZW1jbXAoY3AtPmhhc2gxOTIsIFpFUk9fS0VZLCAxNikpIHsKKwkJCQlyYW5kMTkyID0gTlVMTDsKKwkJCQloYXNoMTkyID0gTlVMTDsKKwkJCX0gZWxzZSB7CisJCQkJcmFuZDE5MiA9IGNwLT5yYW5kMTkyOworCQkJCWhhc2gxOTIgPSBjcC0+aGFzaDE5MjsKKwkJCX0KKwkJfQorCisJCS8qIEluIGNhc2Ugb25lIG9mIHRoZSBQLTI1NiB2YWx1ZXMgaXMgc2V0IHRvIHplcm8sIHRoZW4ganVzdAorCQkgKiBkaXNhYmxlIE9PQiBkYXRhIGZvciBQLTI1Ni4KKwkJICovCisJCWlmICghbWVtY21wKGNwLT5yYW5kMjU2LCBaRVJPX0tFWSwgMTYpIHx8CisJCSAgICAhbWVtY21wKGNwLT5oYXNoMjU2LCBaRVJPX0tFWSwgMTYpKSB7CisJCQlyYW5kMjU2ID0gTlVMTDsKKwkJCWhhc2gyNTYgPSBOVUxMOworCQl9IGVsc2UgeworCQkJcmFuZDI1NiA9IGNwLT5yYW5kMjU2OworCQkJaGFzaDI1NiA9IGNwLT5oYXNoMjU2OwogCQl9CiAKIAkJZXJyID0gaGNpX2FkZF9yZW1vdGVfb29iX2RhdGEoaGRldiwgJmNwLT5hZGRyLmJkYWRkciwKIAkJCQkJICAgICAgY3AtPmFkZHIudHlwZSwgaGFzaDE5MiwgcmFuZDE5MiwKLQkJCQkJICAgICAgY3AtPmhhc2gyNTYsIGNwLT5yYW5kMjU2KTsKKwkJCQkJICAgICAgaGFzaDI1NiwgcmFuZDI1Nik7CiAJCWlmIChlcnIgPCAwKQogCQkJc3RhdHVzID0gTUdNVF9TVEFUVVNfRkFJTEVEOwogCQllbHNlCkBAIC0zODMyLDcgKzM4NzAsOCBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBzdGFydF9kaXNjb3ZlcnlfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHN0YXR1cykKK3N0YXRpYyB2b2lkIHN0YXJ0X2Rpc2NvdmVyeV9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzLAorCQkJCSAgICAgdTE2IG9wY29kZSkKIHsKIAlzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZDsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CkBAIC0zODU3LDYgKzM4OTYsOSBAQAogCiAJaGNpX2Rpc2NvdmVyeV9zZXRfc3RhdGUoaGRldiwgRElTQ09WRVJZX0ZJTkRJTkcpOwogCisJLyogSWYgdGhlIHNjYW4gaW52b2x2ZXMgTEUgc2NhbiwgcGljayBwcm9wZXIgdGltZW91dCB0byBzY2hlZHVsZQorCSAqIGhkZXYtPmxlX3NjYW5fZGlzYWJsZSB0aGF0IHdpbGwgc3RvcCBpdC4KKwkgKi8KIAlzd2l0Y2ggKGhkZXYtPmRpc2NvdmVyeS50eXBlKSB7CiAJY2FzZSBESVNDT1ZfVFlQRV9MRToKIAkJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoRElTQ09WX0xFX1RJTUVPVVQpOwpAQCAtMzg3Myw5ICszOTE1LDIzIEBACiAJCWJyZWFrOwogCX0KIAotCWlmICh0aW1lb3V0KQorCWlmICh0aW1lb3V0KSB7CisJCS8qIFdoZW4gc2VydmljZSBkaXNjb3ZlcnkgaXMgdXNlZCBhbmQgdGhlIGNvbnRyb2xsZXIgaGFzCisJCSAqIGEgc3RyaWN0IGR1cGxpY2F0ZSBmaWx0ZXIsIGl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlcgorCQkgKiB0aGUgc3RhcnQgYW5kIGR1cmF0aW9uIG9mIHRoZSBzY2FuLiBUaGlzIGlzIHJlcXVpcmVkCisJCSAqIGZvciByZXN0YXJ0aW5nIHNjYW5uaW5nIGR1cmluZyB0aGUgZGlzY292ZXJ5IHBoYXNlLgorCQkgKi8KKwkJaWYgKHRlc3RfYml0KEhDSV9RVUlSS19TVFJJQ1RfRFVQTElDQVRFX0ZJTFRFUiwKKwkJCSAgICAgJmhkZXYtPnF1aXJrcykgJiYKKwkJICAgIChoZGV2LT5kaXNjb3ZlcnkudXVpZF9jb3VudCA+IDAgfHwKKwkJICAgICBoZGV2LT5kaXNjb3ZlcnkucnNzaSAhPSBIQ0lfUlNTSV9JTlZBTElEKSkgeworCQkJaGRldi0+ZGlzY292ZXJ5LnNjYW5fc3RhcnQgPSBqaWZmaWVzOworCQkJaGRldi0+ZGlzY292ZXJ5LnNjYW5fZHVyYXRpb24gPSB0aW1lb3V0OworCQl9CisKIAkJcXVldWVfZGVsYXllZF93b3JrKGhkZXYtPndvcmtxdWV1ZSwKIAkJCQkgICAmaGRldi0+bGVfc2Nhbl9kaXNhYmxlLCB0aW1lb3V0KTsKKwl9CiAKIHVubG9jazoKIAloY2lfZGV2X3VubG9jayhoZGV2KTsKQEAgLTM5NDcsOSArNDAwMywxMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHNlcnZpY2VfZGlzY292ZXJ5X2NtZF9jb21wbGV0ZShzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZCwgdTggc3RhdHVzKQorc3RhdGljIGludCBzZXJ2aWNlX2Rpc2NvdmVyeV9jbWRfY29tcGxldGUoc3RydWN0IHBlbmRpbmdfY21kICpjbWQsIHU4IHN0YXR1cykKIHsKLQljbWRfY29tcGxldGUoY21kLT5zaywgY21kLT5pbmRleCwgY21kLT5vcGNvZGUsIHN0YXR1cywgY21kLT5wYXJhbSwgMSk7CisJcmV0dXJuIGNtZF9jb21wbGV0ZShjbWQtPnNrLCBjbWQtPmluZGV4LCBjbWQtPm9wY29kZSwgc3RhdHVzLAorCQkJICAgIGNtZC0+cGFyYW0sIDEpOwogfQogCiBzdGF0aWMgaW50IHN0YXJ0X3NlcnZpY2VfZGlzY292ZXJ5KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsCkBAIC00MDYwLDcgKzQxMTcsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHN0b3BfZGlzY292ZXJ5X2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMpCitzdGF0aWMgdm9pZCBzdG9wX2Rpc2NvdmVyeV9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzLCB1MTYgb3Bjb2RlKQogewogCXN0cnVjdCBwZW5kaW5nX2NtZCAqY21kOwogCkBAIC00Mjg2LDcgKzQzNDMsOCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9hZHZlcnRpc2luZ19jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzKQorc3RhdGljIHZvaWQgc2V0X2FkdmVydGlzaW5nX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMsCisJCQkJICAgICB1MTYgb3Bjb2RlKQogewogCXN0cnVjdCBjbWRfbG9va3VwIG1hdGNoID0geyBOVUxMLCBoZGV2IH07CiAKQEAgLTQ0OTMsNyArNDU1MSw4IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgZmFzdF9jb25uZWN0YWJsZV9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzKQorc3RhdGljIHZvaWQgZmFzdF9jb25uZWN0YWJsZV9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzLAorCQkJCSAgICAgIHUxNiBvcGNvZGUpCiB7CiAJc3RydWN0IHBlbmRpbmdfY21kICpjbWQ7CiAKQEAgLTQ1OTEsNyArNDY1MCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgc2V0X2JyZWRyX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMpCitzdGF0aWMgdm9pZCBzZXRfYnJlZHJfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHN0YXR1cywgdTE2IG9wY29kZSkKIHsKIAlzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZDsKIApAQCAtNDY3NSw2ICs0NzM0LDI4IEBACiAJCWVyciA9IGNtZF9zdGF0dXMoc2ssIGhkZXYtPmlkLCBNR01UX09QX1NFVF9CUkVEUiwKIAkJCQkgTUdNVF9TVEFUVVNfUkVKRUNURUQpOwogCQlnb3RvIHVubG9jazsKKwl9IGVsc2UgeworCQkvKiBXaGVuIGNvbmZpZ3VyaW5nIGEgZHVhbC1tb2RlIGNvbnRyb2xsZXIgdG8gb3BlcmF0ZQorCQkgKiB3aXRoIExFIG9ubHkgYW5kIHVzaW5nIGEgc3RhdGljIGFkZHJlc3MsIHRoZW4gc3dpdGNoaW5nCisJCSAqIEJSL0VEUiBiYWNrIG9uIGlzIG5vdCBhbGxvd2VkLgorCQkgKgorCQkgKiBEdWFsLW1vZGUgY29udHJvbGxlcnMgc2hhbGwgb3BlcmF0ZSB3aXRoIHRoZSBwdWJsaWMKKwkJICogYWRkcmVzcyBhcyBpdHMgaWRlbnRpdHkgYWRkcmVzcyBmb3IgQlIvRURSIGFuZCBMRS4gU28KKwkJICogcmVqZWN0IHRoZSBhdHRlbXB0IHRvIGNyZWF0ZSBhbiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24uCisJCSAqCisJCSAqIFRoZSBzYW1lIHJlc3RyaWN0aW9ucyBhcHBsaWVzIHdoZW4gc2VjdXJlIGNvbm5lY3Rpb25zCisJCSAqIGhhcyBiZWVuIGVuYWJsZWQuIEZvciBCUi9FRFIgdGhpcyBpcyBhIGNvbnRyb2xsZXIgZmVhdHVyZQorCQkgKiB3aGlsZSBmb3IgTEUgaXQgaXMgYSBob3N0IHN0YWNrIGZlYXR1cmUuIFRoaXMgbWVhbnMgdGhhdAorCQkgKiBzd2l0Y2hpbmcgQlIvRURSIGJhY2sgb24gd2hlbiBzZWN1cmUgY29ubmVjdGlvbnMgaGFzIGJlZW4KKwkJICogZW5hYmxlZCBpcyBub3QgYSBzdXBwb3J0ZWQgdHJhbnNhY3Rpb24uCisJCSAqLworCQlpZiAoIXRlc3RfYml0KEhDSV9CUkVEUl9FTkFCTEVELCAmaGRldi0+ZGV2X2ZsYWdzKSAmJgorCQkgICAgKGJhY21wKCZoZGV2LT5zdGF0aWNfYWRkciwgQkRBRERSX0FOWSkgfHwKKwkJICAgICB0ZXN0X2JpdChIQ0lfU0NfRU5BQkxFRCwgJmhkZXYtPmRldl9mbGFncykpKSB7CisJCQllcnIgPSBjbWRfc3RhdHVzKHNrLCBoZGV2LT5pZCwgTUdNVF9PUF9TRVRfQlJFRFIsCisJCQkJCSBNR01UX1NUQVRVU19SRUpFQ1RFRCk7CisJCQlnb3RvIHVubG9jazsKKwkJfQogCX0KIAogCWlmIChtZ210X3BlbmRpbmdfZmluZChNR01UX09QX1NFVF9CUkVEUiwgaGRldikpIHsKQEAgLTQ2OTcsNyArNDc3OCw3IEBACiAJaGNpX3JlcV9pbml0KCZyZXEsIGhkZXYpOwogCiAJd3JpdGVfZmFzdF9jb25uZWN0YWJsZSgmcmVxLCBmYWxzZSk7Ci0JaGNpX3VwZGF0ZV9wYWdlX3NjYW4oaGRldiwgJnJlcSk7CisJX19oY2lfdXBkYXRlX3BhZ2Vfc2NhbigmcmVxKTsKIAogCS8qIFNpbmNlIG9ubHkgdGhlIGFkdmVydGlzaW5nIGRhdGEgZmxhZ3Mgd2lsbCBjaGFuZ2UsIHRoZXJlCiAJICogaXMgbm8gbmVlZCB0byB1cGRhdGUgdGhlIHNjYW4gcmVzcG9uc2UgZGF0YS4KQEAgLTQ3MTMsMzAgKzQ3OTQsODAgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCBzY19lbmFibGVfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHN0YXR1cywgdTE2IG9wY29kZSkKK3sKKwlzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZDsKKwlzdHJ1Y3QgbWdtdF9tb2RlICpjcDsKKworCUJUX0RCRygiJXMgc3RhdHVzICV1IiwgaGRldi0+bmFtZSwgc3RhdHVzKTsKKworCWhjaV9kZXZfbG9jayhoZGV2KTsKKworCWNtZCA9IG1nbXRfcGVuZGluZ19maW5kKE1HTVRfT1BfU0VUX1NFQ1VSRV9DT05OLCBoZGV2KTsKKwlpZiAoIWNtZCkKKwkJZ290byB1bmxvY2s7CisKKwlpZiAoc3RhdHVzKSB7CisJCWNtZF9zdGF0dXMoY21kLT5zaywgY21kLT5pbmRleCwgY21kLT5vcGNvZGUsCisJCQkgICBtZ210X3N0YXR1cyhzdGF0dXMpKTsKKwkJZ290byByZW1vdmU7CisJfQorCisJY3AgPSBjbWQtPnBhcmFtOworCisJc3dpdGNoIChjcC0+dmFsKSB7CisJY2FzZSAweDAwOgorCQljbGVhcl9iaXQoSENJX1NDX0VOQUJMRUQsICZoZGV2LT5kZXZfZmxhZ3MpOworCQljbGVhcl9iaXQoSENJX1NDX09OTFksICZoZGV2LT5kZXZfZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4MDE6CisJCXNldF9iaXQoSENJX1NDX0VOQUJMRUQsICZoZGV2LT5kZXZfZmxhZ3MpOworCQljbGVhcl9iaXQoSENJX1NDX09OTFksICZoZGV2LT5kZXZfZmxhZ3MpOworCQlicmVhazsKKwljYXNlIDB4MDI6CisJCXNldF9iaXQoSENJX1NDX0VOQUJMRUQsICZoZGV2LT5kZXZfZmxhZ3MpOworCQlzZXRfYml0KEhDSV9TQ19PTkxZLCAmaGRldi0+ZGV2X2ZsYWdzKTsKKwkJYnJlYWs7CisJfQorCisJc2VuZF9zZXR0aW5nc19yc3AoY21kLT5zaywgTUdNVF9PUF9TRVRfU0VDVVJFX0NPTk4sIGhkZXYpOworCW5ld19zZXR0aW5ncyhoZGV2LCBjbWQtPnNrKTsKKworcmVtb3ZlOgorCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKK3VubG9jazoKKwloY2lfZGV2X3VubG9jayhoZGV2KTsKK30KKwogc3RhdGljIGludCBzZXRfc2VjdXJlX2Nvbm4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldiwKIAkJCSAgIHZvaWQgKmRhdGEsIHUxNiBsZW4pCiB7CiAJc3RydWN0IG1nbXRfbW9kZSAqY3AgPSBkYXRhOwogCXN0cnVjdCBwZW5kaW5nX2NtZCAqY21kOworCXN0cnVjdCBoY2lfcmVxdWVzdCByZXE7CiAJdTggdmFsOwogCWludCBlcnI7CiAKIAlCVF9EQkcoInJlcXVlc3QgZm9yICVzIiwgaGRldi0+bmFtZSk7CiAKLQlpZiAoIXRlc3RfYml0KEhDSV9MRV9FTkFCTEVELCAmaGRldi0+ZGV2X2ZsYWdzKSAmJgotCSAgICAhbG1wX3NjX2NhcGFibGUoaGRldikgJiYgIXRlc3RfYml0KEhDSV9GT1JDRV9TQywgJmhkZXYtPmRiZ19mbGFncykpCisJaWYgKCFsbXBfc2NfY2FwYWJsZShoZGV2KSAmJgorCSAgICAhdGVzdF9iaXQoSENJX0xFX0VOQUJMRUQsICZoZGV2LT5kZXZfZmxhZ3MpKQogCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgaGRldi0+aWQsIE1HTVRfT1BfU0VUX1NFQ1VSRV9DT05OLAogCQkJCSAgTUdNVF9TVEFUVVNfTk9UX1NVUFBPUlRFRCk7CiAKKwlpZiAodGVzdF9iaXQoSENJX0JSRURSX0VOQUJMRUQsICZoZGV2LT5kZXZfZmxhZ3MpICYmCisJICAgIGxtcF9zY19jYXBhYmxlKGhkZXYpICYmCisJICAgICF0ZXN0X2JpdChIQ0lfU1NQX0VOQUJMRUQsICZoZGV2LT5kZXZfZmxhZ3MpKQorCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgaGRldi0+aWQsIE1HTVRfT1BfU0VUX1NFQ1VSRV9DT05OLAorCQkJCSAgTUdNVF9TVEFUVVNfUkVKRUNURUQpOworCiAJaWYgKGNwLT52YWwgIT0gMHgwMCAmJiBjcC0+dmFsICE9IDB4MDEgJiYgY3AtPnZhbCAhPSAweDAyKQogCQlyZXR1cm4gY21kX3N0YXR1cyhzaywgaGRldi0+aWQsIE1HTVRfT1BfU0VUX1NFQ1VSRV9DT05OLAogCQkJCSAgTUdNVF9TVEFUVVNfSU5WQUxJRF9QQVJBTVMpOwogCiAJaGNpX2Rldl9sb2NrKGhkZXYpOwogCi0JaWYgKCFoZGV2X2lzX3Bvd2VyZWQoaGRldikgfHwKLQkgICAgKCFsbXBfc2NfY2FwYWJsZShoZGV2KSAmJgotCSAgICAgIXRlc3RfYml0KEhDSV9GT1JDRV9TQywgJmhkZXYtPmRiZ19mbGFncykpIHx8CisJaWYgKCFoZGV2X2lzX3Bvd2VyZWQoaGRldikgfHwgIWxtcF9zY19jYXBhYmxlKGhkZXYpIHx8CiAJICAgICF0ZXN0X2JpdChIQ0lfQlJFRFJfRU5BQkxFRCwgJmhkZXYtPmRldl9mbGFncykpIHsKIAkJYm9vbCBjaGFuZ2VkOwogCkBAIC00NzgzLDE3ICs0OTE0LDE0IEBACiAJCWdvdG8gZmFpbGVkOwogCX0KIAotCWVyciA9IGhjaV9zZW5kX2NtZChoZGV2LCBIQ0lfT1BfV1JJVEVfU0NfU1VQUE9SVCwgMSwgJnZhbCk7CisJaGNpX3JlcV9pbml0KCZyZXEsIGhkZXYpOworCWhjaV9yZXFfYWRkKCZyZXEsIEhDSV9PUF9XUklURV9TQ19TVVBQT1JULCAxLCAmdmFsKTsKKwllcnIgPSBoY2lfcmVxX3J1bigmcmVxLCBzY19lbmFibGVfY29tcGxldGUpOwogCWlmIChlcnIgPCAwKSB7CiAJCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0JaWYgKGNwLT52YWwgPT0gMHgwMikKLQkJc2V0X2JpdChIQ0lfU0NfT05MWSwgJmhkZXYtPmRldl9mbGFncyk7Ci0JZWxzZQotCQljbGVhcl9iaXQoSENJX1NDX09OTFksICZoZGV2LT5kZXZfZmxhZ3MpOwotCiBmYWlsZWQ6CiAJaGNpX2Rldl91bmxvY2soaGRldik7CiAJcmV0dXJuIGVycjsKQEAgLTUwOTEsMTAgKzUyMTksMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBjb25uX2luZm9fY21kX2NvbXBsZXRlKHN0cnVjdCBwZW5kaW5nX2NtZCAqY21kLCB1OCBzdGF0dXMpCitzdGF0aWMgaW50IGNvbm5faW5mb19jbWRfY29tcGxldGUoc3RydWN0IHBlbmRpbmdfY21kICpjbWQsIHU4IHN0YXR1cykKIHsKIAlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSBjbWQtPnVzZXJfZGF0YTsKIAlzdHJ1Y3QgbWdtdF9ycF9nZXRfY29ubl9pbmZvIHJwOworCWludCBlcnI7CiAKIAltZW1jcHkoJnJwLmFkZHIsIGNtZC0+cGFyYW0sIHNpemVvZihycC5hZGRyKSk7CiAKQEAgLTUxMDgsMTQgKzUyMzcsMTcgQEAKIAkJcnAubWF4X3R4X3Bvd2VyID0gSENJX1RYX1BPV0VSX0lOVkFMSUQ7CiAJfQogCi0JY21kX2NvbXBsZXRlKGNtZC0+c2ssIGNtZC0+aW5kZXgsIE1HTVRfT1BfR0VUX0NPTk5fSU5GTywgc3RhdHVzLAotCQkgICAgICZycCwgc2l6ZW9mKHJwKSk7CisJZXJyID0gY21kX2NvbXBsZXRlKGNtZC0+c2ssIGNtZC0+aW5kZXgsIE1HTVRfT1BfR0VUX0NPTk5fSU5GTywgc3RhdHVzLAorCQkJICAgJnJwLCBzaXplb2YocnApKTsKIAogCWhjaV9jb25uX2Ryb3AoY29ubik7CiAJaGNpX2Nvbm5fcHV0KGNvbm4pOworCisJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgY29ubl9pbmZvX3JlZnJlc2hfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IGhjaV9zdGF0dXMpCitzdGF0aWMgdm9pZCBjb25uX2luZm9fcmVmcmVzaF9jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggaGNpX3N0YXR1cywKKwkJCQkgICAgICAgdTE2IG9wY29kZSkKIHsKIAlzdHJ1Y3QgaGNpX2NwX3JlYWRfcnNzaSAqY3A7CiAJc3RydWN0IHBlbmRpbmdfY21kICpjbWQ7CkBAIC01Mjg2LDExICs1NDE4LDEyIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgY2xvY2tfaW5mb19jbWRfY29tcGxldGUoc3RydWN0IHBlbmRpbmdfY21kICpjbWQsIHU4IHN0YXR1cykKK3N0YXRpYyBpbnQgY2xvY2tfaW5mb19jbWRfY29tcGxldGUoc3RydWN0IHBlbmRpbmdfY21kICpjbWQsIHU4IHN0YXR1cykKIHsKIAlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSBjbWQtPnVzZXJfZGF0YTsKIAlzdHJ1Y3QgbWdtdF9ycF9nZXRfY2xvY2tfaW5mbyBycDsKIAlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKKwlpbnQgZXJyOwogCiAJbWVtc2V0KCZycCwgMCwgc2l6ZW9mKHJwKSk7CiAJbWVtY3B5KCZycC5hZGRyLCAmY21kLT5wYXJhbSwgc2l6ZW9mKHJwLmFkZHIpKTsKQEAgLTUzMTAsMTUgKzU0NDMsMTggQEAKIAl9CiAKIGNvbXBsZXRlOgotCWNtZF9jb21wbGV0ZShjbWQtPnNrLCBjbWQtPmluZGV4LCBjbWQtPm9wY29kZSwgc3RhdHVzLCAmcnAsIHNpemVvZihycCkpOworCWVyciA9IGNtZF9jb21wbGV0ZShjbWQtPnNrLCBjbWQtPmluZGV4LCBjbWQtPm9wY29kZSwgc3RhdHVzLCAmcnAsCisJCQkgICBzaXplb2YocnApKTsKIAogCWlmIChjb25uKSB7CiAJCWhjaV9jb25uX2Ryb3AoY29ubik7CiAJCWhjaV9jb25uX3B1dChjb25uKTsKIAl9CisKKwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBnZXRfY2xvY2tfaW5mb19jb21wbGV0ZShzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdTggc3RhdHVzKQorc3RhdGljIHZvaWQgZ2V0X2Nsb2NrX2luZm9fY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHN0YXR1cywgdTE2IG9wY29kZSkKIHsKIAlzdHJ1Y3QgaGNpX2NwX3JlYWRfY2xvY2sgKmhjaV9jcDsKIAlzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZDsKQEAgLTU0MjUsNiArNTU2MSw2NSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBib29sIGlzX2Nvbm5lY3RlZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmFkZHIsIHU4IHR5cGUpCit7CisJc3RydWN0IGhjaV9jb25uICpjb25uOworCisJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2JhKGhkZXYsIExFX0xJTkssIGFkZHIpOworCWlmICghY29ubikKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGNvbm4tPmRzdF90eXBlICE9IHR5cGUpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChjb25uLT5zdGF0ZSAhPSBCVF9DT05ORUNURUQpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBjYWxsZXIgaG9sZHMgaGRldi0+bG9jayAqLworc3RhdGljIGludCBoY2lfY29ubl9wYXJhbXNfc2V0KHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxLCBiZGFkZHJfdCAqYWRkciwKKwkJCSAgICAgICB1OCBhZGRyX3R5cGUsIHU4IGF1dG9fY29ubmVjdCkKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IHJlcS0+aGRldjsKKwlzdHJ1Y3QgaGNpX2Nvbm5fcGFyYW1zICpwYXJhbXM7CisKKwlwYXJhbXMgPSBoY2lfY29ubl9wYXJhbXNfYWRkKGhkZXYsIGFkZHIsIGFkZHJfdHlwZSk7CisJaWYgKCFwYXJhbXMpCisJCXJldHVybiAtRUlPOworCisJaWYgKHBhcmFtcy0+YXV0b19jb25uZWN0ID09IGF1dG9fY29ubmVjdCkKKwkJcmV0dXJuIDA7CisKKwlsaXN0X2RlbF9pbml0KCZwYXJhbXMtPmFjdGlvbik7CisKKwlzd2l0Y2ggKGF1dG9fY29ubmVjdCkgeworCWNhc2UgSENJX0FVVE9fQ09OTl9ESVNBQkxFRDoKKwljYXNlIEhDSV9BVVRPX0NPTk5fTElOS19MT1NTOgorCQlfX2hjaV91cGRhdGVfYmFja2dyb3VuZF9zY2FuKHJlcSk7CisJCWJyZWFrOworCWNhc2UgSENJX0FVVE9fQ09OTl9SRVBPUlQ6CisJCWxpc3RfYWRkKCZwYXJhbXMtPmFjdGlvbiwgJmhkZXYtPnBlbmRfbGVfcmVwb3J0cyk7CisJCV9faGNpX3VwZGF0ZV9iYWNrZ3JvdW5kX3NjYW4ocmVxKTsKKwkJYnJlYWs7CisJY2FzZSBIQ0lfQVVUT19DT05OX0RJUkVDVDoKKwljYXNlIEhDSV9BVVRPX0NPTk5fQUxXQVlTOgorCQlpZiAoIWlzX2Nvbm5lY3RlZChoZGV2LCBhZGRyLCBhZGRyX3R5cGUpKSB7CisJCQlsaXN0X2FkZCgmcGFyYW1zLT5hY3Rpb24sICZoZGV2LT5wZW5kX2xlX2Nvbm5zKTsKKwkJCV9faGNpX3VwZGF0ZV9iYWNrZ3JvdW5kX3NjYW4ocmVxKTsKKwkJfQorCQlicmVhazsKKwl9CisKKwlwYXJhbXMtPmF1dG9fY29ubmVjdCA9IGF1dG9fY29ubmVjdDsKKworCUJUX0RCRygiYWRkciAlcE1SICh0eXBlICV1KSBhdXRvX2Nvbm5lY3QgJXUiLCBhZGRyLCBhZGRyX3R5cGUsCisJICAgICAgIGF1dG9fY29ubmVjdCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgZGV2aWNlX2FkZGVkKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGhjaV9kZXYgKmhkZXYsCiAJCQkgYmRhZGRyX3QgKmJkYWRkciwgdTggdHlwZSwgdTggYWN0aW9uKQogewpAQCAtNTQzNywxMCArNTYzMiwzMSBAQAogCW1nbXRfZXZlbnQoTUdNVF9FVl9ERVZJQ0VfQURERUQsIGhkZXYsICZldiwgc2l6ZW9mKGV2KSwgc2spOwogfQogCitzdGF0aWMgdm9pZCBhZGRfZGV2aWNlX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMsIHUxNiBvcGNvZGUpCit7CisJc3RydWN0IHBlbmRpbmdfY21kICpjbWQ7CisKKwlCVF9EQkcoInN0YXR1cyAweCUwMngiLCBzdGF0dXMpOworCisJaGNpX2Rldl9sb2NrKGhkZXYpOworCisJY21kID0gbWdtdF9wZW5kaW5nX2ZpbmQoTUdNVF9PUF9BRERfREVWSUNFLCBoZGV2KTsKKwlpZiAoIWNtZCkKKwkJZ290byB1bmxvY2s7CisKKwljbWQtPmNtZF9jb21wbGV0ZShjbWQsIG1nbXRfc3RhdHVzKHN0YXR1cykpOworCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKKwordW5sb2NrOgorCWhjaV9kZXZfdW5sb2NrKGhkZXYpOworfQorCiBzdGF0aWMgaW50IGFkZF9kZXZpY2Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGNpX2RldiAqaGRldiwKIAkJICAgICAgdm9pZCAqZGF0YSwgdTE2IGxlbikKIHsKIAlzdHJ1Y3QgbWdtdF9jcF9hZGRfZGV2aWNlICpjcCA9IGRhdGE7CisJc3RydWN0IHBlbmRpbmdfY21kICpjbWQ7CisJc3RydWN0IGhjaV9yZXF1ZXN0IHJlcTsKIAl1OCBhdXRvX2Nvbm4sIGFkZHJfdHlwZTsKIAlpbnQgZXJyOwogCkBAIC01NDU3LDE0ICs1NjczLDI0IEBACiAJCQkJICAgIE1HTVRfU1RBVFVTX0lOVkFMSURfUEFSQU1TLAogCQkJCSAgICAmY3AtPmFkZHIsIHNpemVvZihjcC0+YWRkcikpOwogCisJaGNpX3JlcV9pbml0KCZyZXEsIGhkZXYpOworCiAJaGNpX2Rldl9sb2NrKGhkZXYpOwogCisJY21kID0gbWdtdF9wZW5kaW5nX2FkZChzaywgTUdNVF9PUF9BRERfREVWSUNFLCBoZGV2LCBkYXRhLCBsZW4pOworCWlmICghY21kKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gdW5sb2NrOworCX0KKworCWNtZC0+Y21kX2NvbXBsZXRlID0gYWRkcl9jbWRfY29tcGxldGU7CisKIAlpZiAoY3AtPmFkZHIudHlwZSA9PSBCREFERFJfQlJFRFIpIHsKIAkJLyogT25seSBpbmNvbWluZyBjb25uZWN0aW9ucyBhY3Rpb24gaXMgc3VwcG9ydGVkIGZvciBub3cgKi8KIAkJaWYgKGNwLT5hY3Rpb24gIT0gMHgwMSkgewotCQkJZXJyID0gY21kX2NvbXBsZXRlKHNrLCBoZGV2LT5pZCwgTUdNVF9PUF9BRERfREVWSUNFLAotCQkJCQkgICBNR01UX1NUQVRVU19JTlZBTElEX1BBUkFNUywKLQkJCQkJICAgJmNwLT5hZGRyLCBzaXplb2YoY3AtPmFkZHIpKTsKKwkJCWVyciA9IGNtZC0+Y21kX2NvbXBsZXRlKGNtZCwKKwkJCQkJCU1HTVRfU1RBVFVTX0lOVkFMSURfUEFSQU1TKTsKKwkJCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKIAkJCWdvdG8gdW5sb2NrOwogCQl9CiAKQEAgLTU0NzMsNyArNTY5OSw3IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIHVubG9jazsKIAotCQloY2lfdXBkYXRlX3BhZ2Vfc2NhbihoZGV2LCBOVUxMKTsKKwkJX19oY2lfdXBkYXRlX3BhZ2Vfc2NhbigmcmVxKTsKIAogCQlnb3RvIGFkZGVkOwogCX0KQEAgLTU0OTMsMTkgKzU3MTksMjUgQEAKIAkvKiBJZiB0aGUgY29ubmVjdGlvbiBwYXJhbWV0ZXJzIGRvbid0IGV4aXN0IGZvciB0aGlzIGRldmljZSwKIAkgKiB0aGV5IHdpbGwgYmUgY3JlYXRlZCBhbmQgY29uZmlndXJlZCB3aXRoIGRlZmF1bHRzLgogCSAqLwotCWlmIChoY2lfY29ubl9wYXJhbXNfc2V0KGhkZXYsICZjcC0+YWRkci5iZGFkZHIsIGFkZHJfdHlwZSwKKwlpZiAoaGNpX2Nvbm5fcGFyYW1zX3NldCgmcmVxLCAmY3AtPmFkZHIuYmRhZGRyLCBhZGRyX3R5cGUsCiAJCQkJYXV0b19jb25uKSA8IDApIHsKLQkJZXJyID0gY21kX2NvbXBsZXRlKHNrLCBoZGV2LT5pZCwgTUdNVF9PUF9BRERfREVWSUNFLAotCQkJCSAgIE1HTVRfU1RBVFVTX0ZBSUxFRCwKLQkJCQkgICAmY3AtPmFkZHIsIHNpemVvZihjcC0+YWRkcikpOworCQllcnIgPSBjbWQtPmNtZF9jb21wbGV0ZShjbWQsIE1HTVRfU1RBVFVTX0ZBSUxFRCk7CisJCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKIAkJZ290byB1bmxvY2s7CiAJfQogCiBhZGRlZDoKIAlkZXZpY2VfYWRkZWQoc2ssIGhkZXYsICZjcC0+YWRkci5iZGFkZHIsIGNwLT5hZGRyLnR5cGUsIGNwLT5hY3Rpb24pOwogCi0JZXJyID0gY21kX2NvbXBsZXRlKHNrLCBoZGV2LT5pZCwgTUdNVF9PUF9BRERfREVWSUNFLAotCQkJICAgTUdNVF9TVEFUVVNfU1VDQ0VTUywgJmNwLT5hZGRyLCBzaXplb2YoY3AtPmFkZHIpKTsKKwllcnIgPSBoY2lfcmVxX3J1bigmcmVxLCBhZGRfZGV2aWNlX2NvbXBsZXRlKTsKKwlpZiAoZXJyIDwgMCkgeworCQkvKiBFTk9EQVRBIG1lYW5zIG5vIEhDSSBjb21tYW5kcyB3ZXJlIG5lZWRlZCAoZS5nLiBpZgorCQkgKiB0aGUgYWRhcHRlciBpcyBwb3dlcmVkIG9mZikuCisJCSAqLworCQlpZiAoZXJyID09IC1FTk9EQVRBKQorCQkJZXJyID0gY21kLT5jbWRfY29tcGxldGUoY21kLCBNR01UX1NUQVRVU19TVUNDRVNTKTsKKwkJbWdtdF9wZW5kaW5nX3JlbW92ZShjbWQpOworCX0KIAogdW5sb2NrOgogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwpAQCAtNTUyMywyNCArNTc1NSw1NSBAQAogCW1nbXRfZXZlbnQoTUdNVF9FVl9ERVZJQ0VfUkVNT1ZFRCwgaGRldiwgJmV2LCBzaXplb2YoZXYpLCBzayk7CiB9CiAKK3N0YXRpYyB2b2lkIHJlbW92ZV9kZXZpY2VfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHN0YXR1cywgdTE2IG9wY29kZSkKK3sKKwlzdHJ1Y3QgcGVuZGluZ19jbWQgKmNtZDsKKworCUJUX0RCRygic3RhdHVzIDB4JTAyeCIsIHN0YXR1cyk7CisKKwloY2lfZGV2X2xvY2soaGRldik7CisKKwljbWQgPSBtZ210X3BlbmRpbmdfZmluZChNR01UX09QX1JFTU9WRV9ERVZJQ0UsIGhkZXYpOworCWlmICghY21kKQorCQlnb3RvIHVubG9jazsKKworCWNtZC0+Y21kX2NvbXBsZXRlKGNtZCwgbWdtdF9zdGF0dXMoc3RhdHVzKSk7CisJbWdtdF9wZW5kaW5nX3JlbW92ZShjbWQpOworCit1bmxvY2s6CisJaGNpX2Rldl91bmxvY2soaGRldik7Cit9CisKIHN0YXRpYyBpbnQgcmVtb3ZlX2RldmljZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBoY2lfZGV2ICpoZGV2LAogCQkJIHZvaWQgKmRhdGEsIHUxNiBsZW4pCiB7CiAJc3RydWN0IG1nbXRfY3BfcmVtb3ZlX2RldmljZSAqY3AgPSBkYXRhOworCXN0cnVjdCBwZW5kaW5nX2NtZCAqY21kOworCXN0cnVjdCBoY2lfcmVxdWVzdCByZXE7CiAJaW50IGVycjsKIAogCUJUX0RCRygiJXMiLCBoZGV2LT5uYW1lKTsKIAorCWhjaV9yZXFfaW5pdCgmcmVxLCBoZGV2KTsKKwogCWhjaV9kZXZfbG9jayhoZGV2KTsKIAorCWNtZCA9IG1nbXRfcGVuZGluZ19hZGQoc2ssIE1HTVRfT1BfUkVNT1ZFX0RFVklDRSwgaGRldiwgZGF0YSwgbGVuKTsKKwlpZiAoIWNtZCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIHVubG9jazsKKwl9CisKKwljbWQtPmNtZF9jb21wbGV0ZSA9IGFkZHJfY21kX2NvbXBsZXRlOworCiAJaWYgKGJhY21wKCZjcC0+YWRkci5iZGFkZHIsIEJEQUREUl9BTlkpKSB7CiAJCXN0cnVjdCBoY2lfY29ubl9wYXJhbXMgKnBhcmFtczsKIAkJdTggYWRkcl90eXBlOwogCiAJCWlmICghYmRhZGRyX3R5cGVfaXNfdmFsaWQoY3AtPmFkZHIudHlwZSkpIHsKLQkJCWVyciA9IGNtZF9jb21wbGV0ZShzaywgaGRldi0+aWQsIE1HTVRfT1BfUkVNT1ZFX0RFVklDRSwKLQkJCQkJICAgTUdNVF9TVEFUVVNfSU5WQUxJRF9QQVJBTVMsCi0JCQkJCSAgICZjcC0+YWRkciwgc2l6ZW9mKGNwLT5hZGRyKSk7CisJCQllcnIgPSBjbWQtPmNtZF9jb21wbGV0ZShjbWQsCisJCQkJCQlNR01UX1NUQVRVU19JTlZBTElEX1BBUkFNUyk7CisJCQltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCkBAIC01NTQ5LDE0ICs1ODEyLDEzIEBACiAJCQkJCQkgICZjcC0+YWRkci5iZGFkZHIsCiAJCQkJCQkgIGNwLT5hZGRyLnR5cGUpOwogCQkJaWYgKGVycikgewotCQkJCWVyciA9IGNtZF9jb21wbGV0ZShzaywgaGRldi0+aWQsCi0JCQkJCQkgICBNR01UX09QX1JFTU9WRV9ERVZJQ0UsCi0JCQkJCQkgICBNR01UX1NUQVRVU19JTlZBTElEX1BBUkFNUywKLQkJCQkJCSAgICZjcC0+YWRkciwgc2l6ZW9mKGNwLT5hZGRyKSk7CisJCQkJZXJyID0gY21kLT5jbWRfY29tcGxldGUoY21kLAorCQkJCQkJCU1HTVRfU1RBVFVTX0lOVkFMSURfUEFSQU1TKTsKKwkJCQltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CiAJCQkJZ290byB1bmxvY2s7CiAJCQl9CiAKLQkJCWhjaV91cGRhdGVfcGFnZV9zY2FuKGhkZXYsIE5VTEwpOworCQkJX19oY2lfdXBkYXRlX3BhZ2Vfc2NhbigmcmVxKTsKIAogCQkJZGV2aWNlX3JlbW92ZWQoc2ssIGhkZXYsICZjcC0+YWRkci5iZGFkZHIsCiAJCQkJICAgICAgIGNwLT5hZGRyLnR5cGUpOwpAQCAtNTU3MSwyMyArNTgzMywyMyBAQAogCQlwYXJhbXMgPSBoY2lfY29ubl9wYXJhbXNfbG9va3VwKGhkZXYsICZjcC0+YWRkci5iZGFkZHIsCiAJCQkJCQlhZGRyX3R5cGUpOwogCQlpZiAoIXBhcmFtcykgewotCQkJZXJyID0gY21kX2NvbXBsZXRlKHNrLCBoZGV2LT5pZCwgTUdNVF9PUF9SRU1PVkVfREVWSUNFLAotCQkJCQkgICBNR01UX1NUQVRVU19JTlZBTElEX1BBUkFNUywKLQkJCQkJICAgJmNwLT5hZGRyLCBzaXplb2YoY3AtPmFkZHIpKTsKKwkJCWVyciA9IGNtZC0+Y21kX2NvbXBsZXRlKGNtZCwKKwkJCQkJCU1HTVRfU1RBVFVTX0lOVkFMSURfUEFSQU1TKTsKKwkJCW1nbXRfcGVuZGluZ19yZW1vdmUoY21kKTsKIAkJCWdvdG8gdW5sb2NrOwogCQl9CiAKIAkJaWYgKHBhcmFtcy0+YXV0b19jb25uZWN0ID09IEhDSV9BVVRPX0NPTk5fRElTQUJMRUQpIHsKLQkJCWVyciA9IGNtZF9jb21wbGV0ZShzaywgaGRldi0+aWQsIE1HTVRfT1BfUkVNT1ZFX0RFVklDRSwKLQkJCQkJICAgTUdNVF9TVEFUVVNfSU5WQUxJRF9QQVJBTVMsCi0JCQkJCSAgICZjcC0+YWRkciwgc2l6ZW9mKGNwLT5hZGRyKSk7CisJCQllcnIgPSBjbWQtPmNtZF9jb21wbGV0ZShjbWQsCisJCQkJCQlNR01UX1NUQVRVU19JTlZBTElEX1BBUkFNUyk7CisJCQltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCiAJCWxpc3RfZGVsKCZwYXJhbXMtPmFjdGlvbik7CiAJCWxpc3RfZGVsKCZwYXJhbXMtPmxpc3QpOwogCQlrZnJlZShwYXJhbXMpOwotCQloY2lfdXBkYXRlX2JhY2tncm91bmRfc2NhbihoZGV2KTsKKwkJX19oY2lfdXBkYXRlX2JhY2tncm91bmRfc2NhbigmcmVxKTsKIAogCQlkZXZpY2VfcmVtb3ZlZChzaywgaGRldiwgJmNwLT5hZGRyLmJkYWRkciwgY3AtPmFkZHIudHlwZSk7CiAJfSBlbHNlIHsKQEAgLTU1OTUsOSArNTg1Nyw5IEBACiAJCXN0cnVjdCBiZGFkZHJfbGlzdCAqYiwgKmJ0bXA7CiAKIAkJaWYgKGNwLT5hZGRyLnR5cGUpIHsKLQkJCWVyciA9IGNtZF9jb21wbGV0ZShzaywgaGRldi0+aWQsIE1HTVRfT1BfUkVNT1ZFX0RFVklDRSwKLQkJCQkJICAgTUdNVF9TVEFUVVNfSU5WQUxJRF9QQVJBTVMsCi0JCQkJCSAgICZjcC0+YWRkciwgc2l6ZW9mKGNwLT5hZGRyKSk7CisJCQllcnIgPSBjbWQtPmNtZF9jb21wbGV0ZShjbWQsCisJCQkJCQlNR01UX1NUQVRVU19JTlZBTElEX1BBUkFNUyk7CisJCQltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCkBAIC01NjA3LDcgKzU4NjksNyBAQAogCQkJa2ZyZWUoYik7CiAJCX0KIAotCQloY2lfdXBkYXRlX3BhZ2Vfc2NhbihoZGV2LCBOVUxMKTsKKwkJX19oY2lfdXBkYXRlX3BhZ2Vfc2NhbigmcmVxKTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCAmaGRldi0+bGVfY29ubl9wYXJhbXMsIGxpc3QpIHsKIAkJCWlmIChwLT5hdXRvX2Nvbm5lY3QgPT0gSENJX0FVVE9fQ09OTl9ESVNBQkxFRCkKQEAgLTU2MjAsMTIgKzU4ODIsMTkgQEAKIAogCQlCVF9EQkcoIkFsbCBMRSBjb25uZWN0aW9uIHBhcmFtZXRlcnMgd2VyZSByZW1vdmVkIik7CiAKLQkJaGNpX3VwZGF0ZV9iYWNrZ3JvdW5kX3NjYW4oaGRldik7CisJCV9faGNpX3VwZGF0ZV9iYWNrZ3JvdW5kX3NjYW4oJnJlcSk7CiAJfQogCiBjb21wbGV0ZToKLQllcnIgPSBjbWRfY29tcGxldGUoc2ssIGhkZXYtPmlkLCBNR01UX09QX1JFTU9WRV9ERVZJQ0UsCi0JCQkgICBNR01UX1NUQVRVU19TVUNDRVNTLCAmY3AtPmFkZHIsIHNpemVvZihjcC0+YWRkcikpOworCWVyciA9IGhjaV9yZXFfcnVuKCZyZXEsIHJlbW92ZV9kZXZpY2VfY29tcGxldGUpOworCWlmIChlcnIgPCAwKSB7CisJCS8qIEVOT0RBVEEgbWVhbnMgbm8gSENJIGNvbW1hbmRzIHdlcmUgbmVlZGVkIChlLmcuIGlmCisJCSAqIHRoZSBhZGFwdGVyIGlzIHBvd2VyZWQgb2ZmKS4KKwkJICovCisJCWlmIChlcnIgPT0gLUVOT0RBVEEpCisJCQllcnIgPSBjbWQtPmNtZF9jb21wbGV0ZShjbWQsIE1HTVRfU1RBVFVTX1NVQ0NFU1MpOworCQltZ210X3BlbmRpbmdfcmVtb3ZlKGNtZCk7CisJfQogCiB1bmxvY2s6CiAJaGNpX2Rldl91bmxvY2soaGRldik7CkBAIC02MDM3LDggKzYzMDYsOSBAQAogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIHRoZSBjYWxsZXIgaG9sZHMgaGRldi0+bG9jayAqLwotc3RhdGljIHZvaWQgcmVzdGFydF9sZV9hY3Rpb25zKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQorc3RhdGljIHZvaWQgcmVzdGFydF9sZV9hY3Rpb25zKHN0cnVjdCBoY2lfcmVxdWVzdCAqcmVxKQogeworCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gcmVxLT5oZGV2OwogCXN0cnVjdCBoY2lfY29ubl9wYXJhbXMgKnA7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZoZGV2LT5sZV9jb25uX3BhcmFtcywgbGlzdCkgewpAQCAtNjA2MCwxOCArNjMzMCwyNSBAQAogCQl9CiAJfQogCi0JaGNpX3VwZGF0ZV9iYWNrZ3JvdW5kX3NjYW4oaGRldik7CisJX19oY2lfdXBkYXRlX2JhY2tncm91bmRfc2NhbihyZXEpOwogfQogCi1zdGF0aWMgdm9pZCBwb3dlcmVkX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMpCitzdGF0aWMgdm9pZCBwb3dlcmVkX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBzdGF0dXMsIHUxNiBvcGNvZGUpCiB7CiAJc3RydWN0IGNtZF9sb29rdXAgbWF0Y2ggPSB7IE5VTEwsIGhkZXYgfTsKIAogCUJUX0RCRygic3RhdHVzIDB4JTAyeCIsIHN0YXR1cyk7CiAKLQloY2lfZGV2X2xvY2soaGRldik7CisJaWYgKCFzdGF0dXMpIHsKKwkJLyogUmVnaXN0ZXIgdGhlIGF2YWlsYWJsZSBTTVAgY2hhbm5lbHMgKEJSL0VEUiBhbmQgTEUpIG9ubHkKKwkJICogd2hlbiBzdWNjZXNzZnVsbHkgcG93ZXJpbmcgb24gdGhlIGNvbnRyb2xsZXIuIFRoaXMgbGF0ZQorCQkgKiByZWdpc3RyYXRpb24gaXMgcmVxdWlyZWQgc28gdGhhdCBMRSBTTVAgY2FuIGNsZWFybHkKKwkJICogZGVjaWRlIGlmIHRoZSBwdWJsaWMgYWRkcmVzcyBvciBzdGF0aWMgYWRkcmVzcyBpcyB1c2VkLgorCQkgKi8KKwkJc21wX3JlZ2lzdGVyKGhkZXYpOworCX0KIAotCXJlc3RhcnRfbGVfYWN0aW9ucyhoZGV2KTsKKwloY2lfZGV2X2xvY2soaGRldik7CiAKIAltZ210X3BlbmRpbmdfZm9yZWFjaChNR01UX09QX1NFVF9QT1dFUkVELCBoZGV2LCBzZXR0aW5nc19yc3AsICZtYXRjaCk7CiAKQEAgLTYwOTIsMTQgKzYzNjksMTYgQEAKIAogCWlmICh0ZXN0X2JpdChIQ0lfU1NQX0VOQUJMRUQsICZoZGV2LT5kZXZfZmxhZ3MpICYmCiAJICAgICFsbXBfaG9zdF9zc3BfY2FwYWJsZShoZGV2KSkgewotCQl1OCBzc3AgPSAxOworCQl1OCBtb2RlID0gMHgwMTsKIAotCQloY2lfcmVxX2FkZCgmcmVxLCBIQ0lfT1BfV1JJVEVfU1NQX01PREUsIDEsICZzc3ApOwotCX0KKwkJaGNpX3JlcV9hZGQoJnJlcSwgSENJX09QX1dSSVRFX1NTUF9NT0RFLCBzaXplb2YobW9kZSksICZtb2RlKTsKIAotCWlmIChicmVkcl9zY19lbmFibGVkKGhkZXYpICYmICFsbXBfaG9zdF9zY19jYXBhYmxlKGhkZXYpKSB7Ci0JCXU4IHNjID0gMHgwMTsKLQkJaGNpX3JlcV9hZGQoJnJlcSwgSENJX09QX1dSSVRFX1NDX1NVUFBPUlQsIHNpemVvZihzYyksICZzYyk7CisJCWlmIChicmVkcl9zY19lbmFibGVkKGhkZXYpICYmICFsbXBfaG9zdF9zY19jYXBhYmxlKGhkZXYpKSB7CisJCQl1OCBzdXBwb3J0ID0gMHgwMTsKKworCQkJaGNpX3JlcV9hZGQoJnJlcSwgSENJX09QX1dSSVRFX1NDX1NVUFBPUlQsCisJCQkJICAgIHNpemVvZihzdXBwb3J0KSwgJnN1cHBvcnQpOworCQl9CiAJfQogCiAJaWYgKHRlc3RfYml0KEhDSV9MRV9FTkFCTEVELCAmaGRldi0+ZGV2X2ZsYWdzKSAmJgpAQCAtNjEzMCw2ICs2NDA5LDggQEAKIAogCQlpZiAodGVzdF9iaXQoSENJX0FEVkVSVElTSU5HLCAmaGRldi0+ZGV2X2ZsYWdzKSkKIAkJCWVuYWJsZV9hZHZlcnRpc2luZygmcmVxKTsKKworCQlyZXN0YXJ0X2xlX2FjdGlvbnMoJnJlcSk7CiAJfQogCiAJbGlua19zZWMgPSB0ZXN0X2JpdChIQ0lfTElOS19TRUNVUklUWSwgJmhkZXYtPmRldl9mbGFncyk7CkBAIC02MTM5LDcgKzY0MjAsNyBAQAogCiAJaWYgKGxtcF9icmVkcl9jYXBhYmxlKGhkZXYpKSB7CiAJCXdyaXRlX2Zhc3RfY29ubmVjdGFibGUoJnJlcSwgZmFsc2UpOwotCQloY2lfdXBkYXRlX3BhZ2Vfc2NhbihoZGV2LCAmcmVxKTsKKwkJX19oY2lfdXBkYXRlX3BhZ2Vfc2NhbigmcmVxKTsKIAkJdXBkYXRlX2NsYXNzKCZyZXEpOwogCQl1cGRhdGVfbmFtZSgmcmVxKTsKIAkJdXBkYXRlX2VpcigmcmVxKTsKQEAgLTY4MTcsNDMgKzcwOTgsNiBAQAogCWhjaV9yZXFfcnVuKCZyZXEsIE5VTEwpOwogfQogCi12b2lkIG1nbXRfc2NfZW5hYmxlX2NvbXBsZXRlKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCB1OCBlbmFibGUsIHU4IHN0YXR1cykKLXsKLQlzdHJ1Y3QgY21kX2xvb2t1cCBtYXRjaCA9IHsgTlVMTCwgaGRldiB9OwotCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwotCi0JaWYgKHN0YXR1cykgewotCQl1OCBtZ210X2VyciA9IG1nbXRfc3RhdHVzKHN0YXR1cyk7Ci0KLQkJaWYgKGVuYWJsZSkgewotCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChIQ0lfU0NfRU5BQkxFRCwKLQkJCQkJICAgICAgICZoZGV2LT5kZXZfZmxhZ3MpKQotCQkJCW5ld19zZXR0aW5ncyhoZGV2LCBOVUxMKTsKLQkJCWNsZWFyX2JpdChIQ0lfU0NfT05MWSwgJmhkZXYtPmRldl9mbGFncyk7Ci0JCX0KLQotCQltZ210X3BlbmRpbmdfZm9yZWFjaChNR01UX09QX1NFVF9TRUNVUkVfQ09OTiwgaGRldiwKLQkJCQkgICAgIGNtZF9zdGF0dXNfcnNwLCAmbWdtdF9lcnIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGVuYWJsZSkgewotCQljaGFuZ2VkID0gIXRlc3RfYW5kX3NldF9iaXQoSENJX1NDX0VOQUJMRUQsICZoZGV2LT5kZXZfZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCWNoYW5nZWQgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoSENJX1NDX0VOQUJMRUQsICZoZGV2LT5kZXZfZmxhZ3MpOwotCQljbGVhcl9iaXQoSENJX1NDX09OTFksICZoZGV2LT5kZXZfZmxhZ3MpOwotCX0KLQotCW1nbXRfcGVuZGluZ19mb3JlYWNoKE1HTVRfT1BfU0VUX1NFQ1VSRV9DT05OLCBoZGV2LAotCQkJICAgICBzZXR0aW5nc19yc3AsICZtYXRjaCk7Ci0KLQlpZiAoY2hhbmdlZCkKLQkJbmV3X3NldHRpbmdzKGhkZXYsIG1hdGNoLnNrKTsKLQotCWlmIChtYXRjaC5zaykKLQkJc29ja19wdXQobWF0Y2guc2spOwotfQotCiBzdGF0aWMgdm9pZCBza19sb29rdXAoc3RydWN0IHBlbmRpbmdfY21kICpjbWQsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGNtZF9sb29rdXAgKm1hdGNoID0gZGF0YTsKQEAgLTY5MjQsMjggKzcxNjgsMjEgQEAKIAkJY21kX3N0YXR1cyhjbWQtPnNrLCBoZGV2LT5pZCwgTUdNVF9PUF9SRUFEX0xPQ0FMX09PQl9EQVRBLAogCQkJICAgbWdtdF9zdGF0dXMoc3RhdHVzKSk7CiAJfSBlbHNlIHsKKwkJc3RydWN0IG1nbXRfcnBfcmVhZF9sb2NhbF9vb2JfZGF0YSBycDsKKwkJc2l6ZV90IHJwX3NpemUgPSBzaXplb2YocnApOworCisJCW1lbWNweShycC5oYXNoMTkyLCBoYXNoMTkyLCBzaXplb2YocnAuaGFzaDE5MikpOworCQltZW1jcHkocnAucmFuZDE5MiwgcmFuZDE5Miwgc2l6ZW9mKHJwLnJhbmQxOTIpKTsKKwogCQlpZiAoYnJlZHJfc2NfZW5hYmxlZChoZGV2KSAmJiBoYXNoMjU2ICYmIHJhbmQyNTYpIHsKLQkJCXN0cnVjdCBtZ210X3JwX3JlYWRfbG9jYWxfb29iX2V4dF9kYXRhIHJwOwotCi0JCQltZW1jcHkocnAuaGFzaDE5MiwgaGFzaDE5Miwgc2l6ZW9mKHJwLmhhc2gxOTIpKTsKLQkJCW1lbWNweShycC5yYW5kMTkyLCByYW5kMTkyLCBzaXplb2YocnAucmFuZDE5MikpOwotCiAJCQltZW1jcHkocnAuaGFzaDI1NiwgaGFzaDI1Niwgc2l6ZW9mKHJwLmhhc2gyNTYpKTsKIAkJCW1lbWNweShycC5yYW5kMjU2LCByYW5kMjU2LCBzaXplb2YocnAucmFuZDI1NikpOwotCi0JCQljbWRfY29tcGxldGUoY21kLT5zaywgaGRldi0+aWQsCi0JCQkJICAgICBNR01UX09QX1JFQURfTE9DQUxfT09CX0RBVEEsIDAsCi0JCQkJICAgICAmcnAsIHNpemVvZihycCkpOwogCQl9IGVsc2UgewotCQkJc3RydWN0IG1nbXRfcnBfcmVhZF9sb2NhbF9vb2JfZGF0YSBycDsKLQotCQkJbWVtY3B5KHJwLmhhc2gsIGhhc2gxOTIsIHNpemVvZihycC5oYXNoKSk7Ci0JCQltZW1jcHkocnAucmFuZCwgcmFuZDE5Miwgc2l6ZW9mKHJwLnJhbmQpKTsKLQotCQkJY21kX2NvbXBsZXRlKGNtZC0+c2ssIGhkZXYtPmlkLAotCQkJCSAgICAgTUdNVF9PUF9SRUFEX0xPQ0FMX09PQl9EQVRBLCAwLAotCQkJCSAgICAgJnJwLCBzaXplb2YocnApKTsKKwkJCXJwX3NpemUgLT0gc2l6ZW9mKHJwLmhhc2gyNTYpICsgc2l6ZW9mKHJwLnJhbmQyNTYpOwogCQl9CisKKwkJY21kX2NvbXBsZXRlKGNtZC0+c2ssIGhkZXYtPmlkLCBNR01UX09QX1JFQURfTE9DQUxfT09CX0RBVEEsIDAsCisJCQkgICAgICZycCwgcnBfc2l6ZSk7CiAJfQogCiAJbWdtdF9wZW5kaW5nX3JlbW92ZShjbWQpOwpAQCAtNzAxOCw2ICs3MjU1LDIxIEBACiAJcmV0dXJuIGZhbHNlOwogfQogCitzdGF0aWMgdm9pZCByZXN0YXJ0X2xlX3NjYW4oc3RydWN0IGhjaV9kZXYgKmhkZXYpCit7CisJLyogSWYgY29udHJvbGxlciBpcyBub3Qgc2Nhbm5pbmcgd2UgYXJlIGRvbmUuICovCisJaWYgKCF0ZXN0X2JpdChIQ0lfTEVfU0NBTiwgJmhkZXYtPmRldl9mbGFncykpCisJCXJldHVybjsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMgKyBESVNDT1ZfTEVfUkVTVEFSVF9ERUxBWSwKKwkJICAgICAgIGhkZXYtPmRpc2NvdmVyeS5zY2FuX3N0YXJ0ICsKKwkJICAgICAgIGhkZXYtPmRpc2NvdmVyeS5zY2FuX2R1cmF0aW9uKSkKKwkJcmV0dXJuOworCisJcXVldWVfZGVsYXllZF93b3JrKGhkZXYtPndvcmtxdWV1ZSwgJmhkZXYtPmxlX3NjYW5fcmVzdGFydCwKKwkJCSAgIERJU0NPVl9MRV9SRVNUQVJUX0RFTEFZKTsKK30KKwogdm9pZCBtZ210X2RldmljZV9mb3VuZChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgYmRhZGRyX3QgKmJkYWRkciwgdTggbGlua190eXBlLAogCQkgICAgICAgdTggYWRkcl90eXBlLCB1OCAqZGV2X2NsYXNzLCBzOCByc3NpLCB1MzIgZmxhZ3MsCiAJCSAgICAgICB1OCAqZWlyLCB1MTYgZWlyX2xlbiwgdTggKnNjYW5fcnNwLCB1OCBzY2FuX3JzcF9sZW4pCkBAIC03MDQwLDE0ICs3MjkyLDE4IEBACiAKIAkvKiBXaGVuIHVzaW5nIHNlcnZpY2UgZGlzY292ZXJ5IHdpdGggYSBSU1NJIHRocmVzaG9sZCwgdGhlbiBjaGVjawogCSAqIGlmIHN1Y2ggYSBSU1NJIHRocmVzaG9sZCBpcyBzcGVjaWZpZWQuIElmIGEgUlNTSSB0aHJlc2hvbGQgaGFzCi0JICogYmVlbiBzcGVjaWZpZWQsIHRoZW4gYWxsIHJlc3VsdHMgd2l0aCBhIFJTU0kgc21hbGxlciB0aGFuIHRoZQotCSAqIFJTU0kgdGhyZXNob2xkIHdpbGwgYmUgZHJvcHBlZC4KKwkgKiBiZWVuIHNwZWNpZmllZCwgYW5kIEhDSV9RVUlSS19TVFJJQ1RfRFVQTElDQVRFX0ZJTFRFUiBpcyBub3Qgc2V0LAorCSAqIHRoZW4gYWxsIHJlc3VsdHMgd2l0aCBhIFJTU0kgc21hbGxlciB0aGFuIHRoZSBSU1NJIHRocmVzaG9sZCB3aWxsIGJlCisJICogZHJvcHBlZC4gSWYgdGhlIHF1aXJrIGlzIHNldCwgbGV0IGl0IHRocm91Z2ggZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZywKKwkgKiBhcyB3ZSBtaWdodCBuZWVkIHRvIHJlc3RhcnQgdGhlIHNjYW4uCiAJICoKIAkgKiBGb3IgQlIvRURSIGRldmljZXMgKHByZSAxLjIpIHByb3ZpZGluZyBubyBSU1NJIGR1cmluZyBpbnF1aXJ5LAogCSAqIHRoZSByZXN1bHRzIGFyZSBhbHNvIGRyb3BwZWQuCiAJICovCiAJaWYgKGhkZXYtPmRpc2NvdmVyeS5yc3NpICE9IEhDSV9SU1NJX0lOVkFMSUQgJiYKLQkgICAgKHJzc2kgPCBoZGV2LT5kaXNjb3ZlcnkucnNzaSB8fCByc3NpID09IEhDSV9SU1NJX0lOVkFMSUQpKQorCSAgICAocnNzaSA9PSBIQ0lfUlNTSV9JTlZBTElEIHx8CisJICAgIChyc3NpIDwgaGRldi0+ZGlzY292ZXJ5LnJzc2kgJiYKKwkgICAgICF0ZXN0X2JpdChIQ0lfUVVJUktfU1RSSUNUX0RVUExJQ0FURV9GSUxURVIsICZoZGV2LT5xdWlya3MpKSkpCiAJCXJldHVybjsKIAogCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBidWZmZXIgaXMgYmlnIGVub3VnaC4gVGhlIDUgZXh0cmEgYnl0ZXMKQEAgLTcwNjYsNyArNzMyMiw4IEBACiAJICogSG93ZXZlciB3aGVuIHVzaW5nIHNlcnZpY2UgZGlzY292ZXJ5LCB0aGUgdmFsdWUgMTI3IHdpbGwgYmUKIAkgKiByZXR1cm5lZCB3aGVuIHRoZSBSU1NJIGlzIG5vdCBhdmFpbGFibGUuCiAJICovCi0JaWYgKHJzc2kgPT0gSENJX1JTU0lfSU5WQUxJRCAmJiAhaGRldi0+ZGlzY292ZXJ5LnJlcG9ydF9pbnZhbGlkX3Jzc2kpCisJaWYgKHJzc2kgPT0gSENJX1JTU0lfSU5WQUxJRCAmJiAhaGRldi0+ZGlzY292ZXJ5LnJlcG9ydF9pbnZhbGlkX3Jzc2kgJiYKKwkgICAgbGlua190eXBlID09IEFDTF9MSU5LKQogCQlyc3NpID0gMDsKIAogCWJhY3B5KCZldi0+YWRkci5iZGFkZHIsIGJkYWRkcik7CkBAIC03MDgxLDEyICs3MzM4LDIwIEBACiAJCSAqIGtlcHQgYW5kIGNoZWNraW5nIHBvc3NpYmxlIHNjYW4gcmVzcG9uc2UgZGF0YQogCQkgKiB3aWxsIGJlIHNraXBwZWQuCiAJCSAqLwotCQlpZiAoaGRldi0+ZGlzY292ZXJ5LnV1aWRfY291bnQgPiAwKQorCQlpZiAoaGRldi0+ZGlzY292ZXJ5LnV1aWRfY291bnQgPiAwKSB7CiAJCQltYXRjaCA9IGVpcl9oYXNfdXVpZHMoZWlyLCBlaXJfbGVuLAogCQkJCQkgICAgICBoZGV2LT5kaXNjb3ZlcnkudXVpZF9jb3VudCwKIAkJCQkJICAgICAgaGRldi0+ZGlzY292ZXJ5LnV1aWRzKTsKLQkJZWxzZQorCQkJLyogSWYgZHVwbGljYXRlIGZpbHRlcmluZyBkb2VzIG5vdCByZXBvcnQgUlNTSSBjaGFuZ2VzLAorCQkJICogdGhlbiByZXN0YXJ0IHNjYW5uaW5nIHRvIGVuc3VyZSB1cGRhdGVkIHJlc3VsdCB3aXRoCisJCQkgKiB1cGRhdGVkIFJTU0kgdmFsdWVzLgorCQkJICovCisJCQlpZiAobWF0Y2ggJiYgdGVzdF9iaXQoSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSLAorCQkJCQkgICAgICAmaGRldi0+cXVpcmtzKSkKKwkJCQlyZXN0YXJ0X2xlX3NjYW4oaGRldik7CisJCX0gZWxzZSB7CiAJCQltYXRjaCA9IHRydWU7CisJCX0KIAogCQlpZiAoIW1hdGNoICYmICFzY2FuX3JzcF9sZW4pCiAJCQlyZXR1cm47CkBAIC03MTE5LDYgKzczODQsMTQgQEAKIAkJCQkJCSAgICAgaGRldi0+ZGlzY292ZXJ5LnV1aWRfY291bnQsCiAJCQkJCQkgICAgIGhkZXYtPmRpc2NvdmVyeS51dWlkcykpCiAJCQkJcmV0dXJuOworCisJCQkvKiBJZiBkdXBsaWNhdGUgZmlsdGVyaW5nIGRvZXMgbm90IHJlcG9ydCBSU1NJIGNoYW5nZXMsCisJCQkgKiB0aGVuIHJlc3RhcnQgc2Nhbm5pbmcgdG8gZW5zdXJlIHVwZGF0ZWQgcmVzdWx0IHdpdGgKKwkJCSAqIHVwZGF0ZWQgUlNTSSB2YWx1ZXMuCisJCQkgKi8KKwkJCWlmICh0ZXN0X2JpdChIQ0lfUVVJUktfU1RSSUNUX0RVUExJQ0FURV9GSUxURVIsCisJCQkJICAgICAmaGRldi0+cXVpcmtzKSkKKwkJCQlyZXN0YXJ0X2xlX3NjYW4oaGRldik7CiAJCX0KIAogCQkvKiBBcHBlbmQgc2NhbiByZXNwb25zZSBkYXRhIHRvIGV2ZW50ICovCkBAIC03MTMyLDYgKzc0MDUsMTQgQEAKIAkJCXJldHVybjsKIAl9CiAKKwkvKiBWYWxpZGF0ZSB0aGUgcmVwb3J0ZWQgUlNTSSB2YWx1ZSBhZ2FpbnN0IHRoZSBSU1NJIHRocmVzaG9sZCBvbmNlIG1vcmUKKwkgKiBpbmNhc2UgSENJX1FVSVJLX1NUUklDVF9EVVBMSUNBVEVfRklMVEVSIGZvcmNlZCBhIHJlc3RhcnQgb2YgTEUKKwkgKiBzY2FubmluZy4KKwkgKi8KKwlpZiAoaGRldi0+ZGlzY292ZXJ5LnJzc2kgIT0gSENJX1JTU0lfSU5WQUxJRCAmJgorCSAgICByc3NpIDwgaGRldi0+ZGlzY292ZXJ5LnJzc2kpCisJCXJldHVybjsKKwogCWV2LT5laXJfbGVuID0gY3B1X3RvX2xlMTYoZWlyX2xlbiArIHNjYW5fcnNwX2xlbik7CiAJZXZfc2l6ZSA9IHNpemVvZigqZXYpICsgZWlyX2xlbiArIHNjYW5fcnNwX2xlbjsKIApAQCAtNzE3NCw3ICs3NDU1LDcgQEAKIAltZ210X2V2ZW50KE1HTVRfRVZfRElTQ09WRVJJTkcsIGhkZXYsICZldiwgc2l6ZW9mKGV2KSwgTlVMTCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkdl9lbmFibGVfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHN0YXR1cykKK3N0YXRpYyB2b2lkIGFkdl9lbmFibGVfY29tcGxldGUoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHU4IHN0YXR1cywgdTE2IG9wY29kZSkKIHsKIAlCVF9EQkcoIiVzIHN0YXR1cyAldSIsIGhkZXYtPm5hbWUsIHN0YXR1cyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKaW5kZXggNzNmOGM3NS4uNGZlYTI0MiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwpAQCAtNzcxLDcgKzc3MSw3IEBACiAKIAliYWNweSgmYWRkci5sMl9iZGFkZHIsIGRzdCk7CiAJYWRkci5sMl9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7Ci0JYWRkci5sMl9wc20gICAgPSBjcHVfdG9fbGUxNihSRkNPTU1fUFNNKTsKKwlhZGRyLmwyX3BzbSAgICA9IGNwdV90b19sZTE2KEwyQ0FQX1BTTV9SRkNPTU0pOwogCWFkZHIubDJfY2lkICAgID0gMDsKIAlhZGRyLmwyX2JkYWRkcl90eXBlID0gQkRBRERSX0JSRURSOwogCSplcnIgPSBrZXJuZWxfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCBzaXplb2YoYWRkciksIE9fTk9OQkxPQ0spOwpAQCAtMjAzOCw3ICsyMDM4LDcgQEAKIAkvKiBCaW5kIHNvY2tldCAqLwogCWJhY3B5KCZhZGRyLmwyX2JkYWRkciwgYmEpOwogCWFkZHIubDJfZmFtaWx5ID0gQUZfQkxVRVRPT1RIOwotCWFkZHIubDJfcHNtICAgID0gY3B1X3RvX2xlMTYoUkZDT01NX1BTTSk7CisJYWRkci5sMl9wc20gICAgPSBjcHVfdG9fbGUxNihMMkNBUF9QU01fUkZDT01NKTsKIAlhZGRyLmwyX2NpZCAgICA9IDA7CiAJYWRkci5sMl9iZGFkZHJfdHlwZSA9IEJEQUREUl9CUkVEUjsKIAllcnIgPSBrZXJuZWxfYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCBzaXplb2YoYWRkcikpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCmluZGV4IDIzNDgxNzYuLjNjNmQyYzggMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCiBzdGF0aWMgaW50IHJmY29tbV9zb2NrX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdzb2NrLCBpbnQgZmxhZ3MpCiB7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJREVGSU5FX1dBSVRfRlVOQyh3YWl0LCB3b2tlbl93YWtlX2Z1bmN0aW9uKTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zaywgKm5zazsKIAlsb25nIHRpbWVvOwogCWludCBlcnIgPSAwOwpAQCAtNDg3LDggKzQ4Nyw2IEBACiAJLyogV2FpdCBmb3IgYW4gaW5jb21pbmcgY29ubmVjdGlvbi4gKHdha2Utb25lKS4gKi8KIAlhZGRfd2FpdF9xdWV1ZV9leGNsdXNpdmUoc2tfc2xlZXAoc2spLCAmd2FpdCk7CiAJd2hpbGUgKDEpIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQogCQlpZiAoc2stPnNrX3N0YXRlICE9IEJUX0xJU1RFTikgewogCQkJZXJyID0gLUVCQURGRDsKIAkJCWJyZWFrOwpAQCAtNTA5LDEwICs1MDcsMTEgQEAKIAkJfQogCiAJCXJlbGVhc2Vfc29jayhzayk7Ci0JCXRpbWVvID0gc2NoZWR1bGVfdGltZW91dCh0aW1lbyk7CisKKwkJdGltZW8gPSB3YWl0X3dva2VuKCZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUsIHRpbWVvKTsKKwogCQlsb2NrX3NvY2tfbmVzdGVkKHNrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJfQotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZShza19zbGVlcChzayksICZ3YWl0KTsKIAogCWlmIChlcnIpCkBAIC0xMDU4LDYgKzEwNTcsOCBAQAogewogCWludCBlcnI7CiAKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9yYykgPiBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisKIAllcnIgPSBwcm90b19yZWdpc3RlcigmcmZjb21tX3Byb3RvLCAwKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvc2NvLmMgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCmluZGV4IDMwZTVlYTMuLjc2MzIxYjUgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvc2NvLmMKKysrIGIvbmV0L2JsdWV0b290aC9zY28uYwpAQCAtNjE4LDcgKzYxOCw3IEBACiAKIHN0YXRpYyBpbnQgc2NvX3NvY2tfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssIGludCBmbGFncykKIHsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwlERUZJTkVfV0FJVF9GVU5DKHdhaXQsIHdva2VuX3dha2VfZnVuY3Rpb24pOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrLCAqY2g7CiAJbG9uZyB0aW1lbzsKIAlpbnQgZXJyID0gMDsKQEAgLTYzMiw4ICs2MzIsNiBAQAogCS8qIFdhaXQgZm9yIGFuIGluY29taW5nIGNvbm5lY3Rpb24uICh3YWtlLW9uZSkuICovCiAJYWRkX3dhaXRfcXVldWVfZXhjbHVzaXZlKHNrX3NsZWVwKHNrKSwgJndhaXQpOwogCXdoaWxlICgxKSB7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0KIAkJaWYgKHNrLT5za19zdGF0ZSAhPSBCVF9MSVNURU4pIHsKIAkJCWVyciA9IC1FQkFERkQ7CiAJCQlicmVhazsKQEAgLTY1NCwxMCArNjUyLDEwIEBACiAJCX0KIAogCQlyZWxlYXNlX3NvY2soc2spOwotCQl0aW1lbyA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW8pOworCisJCXRpbWVvID0gd2FpdF93b2tlbigmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFLCB0aW1lbyk7CiAJCWxvY2tfc29jayhzayk7CiAJfQotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZShza19zbGVlcChzayksICZ3YWl0KTsKIAogCWlmIChlcnIpCkBAIC0xMTg0LDYgKzExODIsOCBAQAogewogCWludCBlcnI7CiAKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zY28pID4gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCiAJZXJyID0gcHJvdG9fcmVnaXN0ZXIoJnNjb19wcm90bywgMCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3NlbGZ0ZXN0LmMgYi9uZXQvYmx1ZXRvb3RoL3NlbGZ0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc4ZjQwNgotLS0gL2Rldi9udWxsCisrKyBiL25ldC9ibHVldG9vdGgvc2VsZnRlc3QuYwpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAgIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAorCisgICBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuCisgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZCisgICBDTEFJTSwgT1IgQU5ZIFNQRUNJQUwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUworICAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgICBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICAgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworICAgQUxMIExJQUJJTElUWSwgSU5DTFVESU5HIExJQUJJTElUWSBGT1IgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlRTLAorICAgQ09QWVJJR0hUUywgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMsIFJFTEFUSU5HIFRPIFVTRSBPRiBUSElTCisgICBTT0ZUV0FSRSBJUyBESVNDTEFJTUVELgorKi8KKworI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CisjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgorCisjaW5jbHVkZSAiZWNjLmgiCisjaW5jbHVkZSAic21wLmgiCisjaW5jbHVkZSAic2VsZnRlc3QuaCIKKworI2lmIElTX0VOQUJMRUQoQ09ORklHX0JUX1NFTEZURVNUX0VDREgpCisKK3N0YXRpYyBjb25zdCB1OCBwcml2X2FfMVszMl0gX19pbml0Y29uc3QgPSB7CisJMHhiZCwgMHgxYSwgMHgzYywgMHhjZCwgMHhhNiwgMHhiOCwgMHg5OSwgMHg1OCwKKwkweDk5LCAweGI3LCAweDQwLCAweGViLCAweDdiLCAweDYwLCAweGZmLCAweDRhLAorCTB4NTAsIDB4M2YsIDB4MTAsIDB4ZDIsIDB4ZTMsIDB4YjMsIDB4YzksIDB4NzQsCisJMHgzOCwgMHg1ZiwgMHhjNSwgMHhhMywgMHhkNCwgMHhmNiwgMHg0OSwgMHgzZiwKK307CitzdGF0aWMgY29uc3QgdTggcHJpdl9iXzFbMzJdIF9faW5pdGNvbnN0ID0geworCTB4ZmQsIDB4YzUsIDB4N2YsIDB4ZjQsIDB4NDksIDB4ZGQsIDB4NGYsIDB4NmIsCisJMHhmYiwgMHg3YywgMHg5ZCwgMHhmMSwgMHhjMiwgMHg5YSwgMHhjYiwgMHg1OSwKKwkweDJhLCAweGU3LCAweGQ0LCAweGVlLCAweGZiLCAweGZjLCAweDBhLCAweDkwLAorCTB4OWEsIDB4YmIsIDB4ZjYsIDB4MzIsIDB4M2QsIDB4OGIsIDB4MTgsIDB4NTUsCit9Oworc3RhdGljIGNvbnN0IHU4IHB1Yl9hXzFbNjRdIF9faW5pdGNvbnN0ID0geworCTB4ZTYsIDB4OWQsIDB4MzUsIDB4MGUsIDB4NDgsIDB4MDEsIDB4MDMsIDB4Y2MsCisJMHhkYiwgMHhmZCwgMHhmNCwgMHhhYywgMHgxMSwgMHg5MSwgMHhmNCwgMHhlZiwKKwkweGI5LCAweGE1LCAweGY5LCAweGU5LCAweGE3LCAweDgzLCAweDJjLCAweDVlLAorCTB4MmMsIDB4YmUsIDB4OTcsIDB4ZjIsIDB4ZDIsIDB4MDMsIDB4YjAsIDB4MjAsCisKKwkweDhiLCAweGQyLCAweDg5LCAweDE1LCAweGQwLCAweDhlLCAweDFjLCAweDc0LAorCTB4MjQsIDB4MzAsIDB4ZWQsIDB4OGYsIDB4YzIsIDB4NDUsIDB4NjMsIDB4NzYsCisJMHg1YywgMHgxNSwgMHg1MiwgMHg1YSwgMHhiZiwgMHg5YSwgMHgzMiwgMHg2MywKKwkweDZkLCAweGViLCAweDJhLCAweDY1LCAweDQ5LCAweDljLCAweDgwLCAweGRjLAorfTsKK3N0YXRpYyBjb25zdCB1OCBwdWJfYl8xWzY0XSBfX2luaXRjb25zdCA9IHsKKwkweDkwLCAweGExLCAweGFhLCAweDJmLCAweGIyLCAweDc3LCAweDkwLCAweDU1LAorCTB4OWYsIDB4YTYsIDB4MTUsIDB4ODYsIDB4ZmQsIDB4OGEsIDB4YjUsIDB4NDcsCisJMHgwMCwgMHg0YywgMHg5ZSwgMHhmMSwgMHg4NCwgMHgyMiwgMHg1OSwgMHgwOSwKKwkweDk2LCAweDFkLCAweGFmLCAweDFmLCAweGYwLCAweGYwLCAweGExLCAweDFlLAorCisJMHg0YSwgMHgyMSwgMHhiMSwgMHgxNSwgMHhmOSwgMHhhZiwgMHg4OSwgMHg1ZiwKKwkweDc2LCAweDM2LCAweDhlLCAweGUyLCAweDMwLCAweDExLCAweDJkLCAweDQ3LAorCTB4NjAsIDB4NTEsIDB4YjgsIDB4OWEsIDB4M2EsIDB4NzAsIDB4NTYsIDB4NzMsCisJMHgzNywgMHhhZCwgMHg5ZCwgMHg0MiwgMHgzZSwgMHhmMywgMHg1NSwgMHg0YywKK307CitzdGF0aWMgY29uc3QgdTggZGhrZXlfMVszMl0gX19pbml0Y29uc3QgPSB7CisJMHg5OCwgMHhhNiwgMHhiZiwgMHg3MywgMHhmMywgMHgzNCwgMHg4ZCwgMHg4NiwKKwkweGYxLCAweDY2LCAweGY4LCAweGI0LCAweDEzLCAweDZiLCAweDc5LCAweDk5LAorCTB4OWIsIDB4N2QsIDB4MzksIDB4MGEsIDB4YTYsIDB4MTAsIDB4MTAsIDB4MzQsCisJMHgwNSwgMHhhZCwgMHhjOCwgMHg1NywgMHhhMywgMHgzNCwgMHgwMiwgMHhlYywKK307CisKK3N0YXRpYyBjb25zdCB1OCBwcml2X2FfMlszMl0gX19pbml0Y29uc3QgPSB7CisJMHg2MywgMHg3NiwgMHg0NSwgMHhkMCwgMHhmNywgMHg3MywgMHhhYywgMHhiNywKKwkweGZmLCAweGRkLCAweDAzLCAweDcyLCAweGI5LCAweDcyLCAweDg1LCAweGI0LAorCTB4NDEsIDB4YjYsIDB4NWQsIDB4MGMsIDB4NWQsIDB4NTQsIDB4ODQsIDB4NjAsCisJMHgxYSwgMHhhMywgMHg5YSwgMHgzYywgMHg2OSwgMHgxNiwgMHhhNSwgMHgwNiwKK307CitzdGF0aWMgY29uc3QgdTggcHJpdl9iXzJbMzJdIF9faW5pdGNvbnN0ID0geworCTB4YmEsIDB4MzAsIDB4NTUsIDB4NTAsIDB4MTksIDB4YTIsIDB4Y2EsIDB4YTMsCisJMHhhNSwgMHgyOSwgMHgwOCwgMHhjNiwgMHhiNSwgMHgwMywgMHg4OCwgMHg3ZSwKKwkweDAzLCAweDJiLCAweDUwLCAweDczLCAweGQ0LCAweDJlLCAweDUwLCAweDk3LAorCTB4NjQsIDB4Y2QsIDB4NzIsIDB4MGQsIDB4NjcsIDB4YTAsIDB4OWEsIDB4NTIsCit9Oworc3RhdGljIGNvbnN0IHU4IHB1Yl9hXzJbNjRdIF9faW5pdGNvbnN0ID0geworCTB4ZGQsIDB4NzgsIDB4NWMsIDB4NzQsIDB4MDMsIDB4OWIsIDB4N2UsIDB4OTgsCisJMHhjYiwgMHg5NCwgMHg4NywgMHg0YSwgMHhhZCwgMHhmYSwgMHhmOCwgMHhkNSwKKwkweDQzLCAweDNlLCAweDVjLCAweGFmLCAweGVhLCAweGI1LCAweDRjLCAweGY0LAorCTB4OWUsIDB4ODAsIDB4NzksIDB4NTcsIDB4N2IsIDB4YTQsIDB4MzEsIDB4MmMsCisKKwkweDRmLCAweDVkLCAweDcxLCAweDQzLCAweDc3LCAweDQzLCAweGY4LCAweGVhLAorCTB4ZDQsIDB4M2UsIDB4YmQsIDB4MTcsIDB4OTEsIDB4MTAsIDB4MjEsIDB4ZDAsCisJMHgxZiwgMHg4NywgMHg0MywgMHg4ZSwgMHg0MCwgMHhlMiwgMHg1MiwgMHhjZCwKKwkweGJlLCAweGRmLCAweDk4LCAweDM4LCAweDE4LCAweDEyLCAweDk1LCAweDkxLAorfTsKK3N0YXRpYyBjb25zdCB1OCBwdWJfYl8yWzY0XSBfX2luaXRjb25zdCA9IHsKKwkweGNjLCAweDAwLCAweDY1LCAweGUxLCAweGY1LCAweDZjLCAweDBkLCAweGNmLAorCTB4ZWMsIDB4OTYsIDB4NDcsIDB4MjAsIDB4NjYsIDB4YzksIDB4ZGIsIDB4ODQsCisJMHg4MSwgMHg3NSwgMHhhOCwgMHg0ZCwgMHhjMCwgMHhkZiwgMHhjNywgMHg5ZCwKKwkweDFiLCAweDNmLCAweDNkLCAweGYyLCAweDNmLCAweGU0LCAweDY1LCAweGY0LAorCisJMHg3OSwgMHhiMiwgMHhlYywgMHhkOCwgMHhjYSwgMHg1NSwgMHhhMSwgMHhhOCwKKwkweDQzLCAweDRkLCAweDZiLCAweGNhLCAweDEwLCAweGIwLCAweGMyLCAweDAxLAorCTB4YzIsIDB4MzMsIDB4NGUsIDB4MTYsIDB4MjQsIDB4YzQsIDB4ZWYsIDB4ZWUsCisJMHg5OSwgMHhkOCwgMHhiYiwgMHhiYywgMHg0OCwgMHhkMCwgMHgwMSwgMHgwMiwKK307CitzdGF0aWMgY29uc3QgdTggZGhrZXlfMlszMl0gX19pbml0Y29uc3QgPSB7CisJMHg2OSwgMHhlYiwgMHgyMSwgMHgzMiwgMHhmMiwgMHhjNiwgMHgwNSwgMHg0MSwKKwkweDYwLCAweDE5LCAweGNkLCAweDVlLCAweDk0LCAweGUxLCAweGU2LCAweDVmLAorCTB4MzMsIDB4MDcsIDB4ZTMsIDB4MzgsIDB4NGIsIDB4NjgsIDB4ZTUsIDB4NjIsCisJMHgzZiwgMHg4OCwgMHg2ZCwgMHgyZiwgMHgzYSwgMHg4NCwgMHg4NSwgMHhhYiwKK307CisKK3N0YXRpYyBjb25zdCB1OCBwcml2X2FfM1szMl0gX19pbml0Y29uc3QgPSB7CisJMHhiZCwgMHgxYSwgMHgzYywgMHhjZCwgMHhhNiwgMHhiOCwgMHg5OSwgMHg1OCwKKwkweDk5LCAweGI3LCAweDQwLCAweGViLCAweDdiLCAweDYwLCAweGZmLCAweDRhLAorCTB4NTAsIDB4M2YsIDB4MTAsIDB4ZDIsIDB4ZTMsIDB4YjMsIDB4YzksIDB4NzQsCisJMHgzOCwgMHg1ZiwgMHhjNSwgMHhhMywgMHhkNCwgMHhmNiwgMHg0OSwgMHgzZiwKK307CitzdGF0aWMgY29uc3QgdTggcHViX2FfM1s2NF0gX19pbml0Y29uc3QgPSB7CisJMHhlNiwgMHg5ZCwgMHgzNSwgMHgwZSwgMHg0OCwgMHgwMSwgMHgwMywgMHhjYywKKwkweGRiLCAweGZkLCAweGY0LCAweGFjLCAweDExLCAweDkxLCAweGY0LCAweGVmLAorCTB4YjksIDB4YTUsIDB4ZjksIDB4ZTksIDB4YTcsIDB4ODMsIDB4MmMsIDB4NWUsCisJMHgyYywgMHhiZSwgMHg5NywgMHhmMiwgMHhkMiwgMHgwMywgMHhiMCwgMHgyMCwKKworCTB4OGIsIDB4ZDIsIDB4ODksIDB4MTUsIDB4ZDAsIDB4OGUsIDB4MWMsIDB4NzQsCisJMHgyNCwgMHgzMCwgMHhlZCwgMHg4ZiwgMHhjMiwgMHg0NSwgMHg2MywgMHg3NiwKKwkweDVjLCAweDE1LCAweDUyLCAweDVhLCAweGJmLCAweDlhLCAweDMyLCAweDYzLAorCTB4NmQsIDB4ZWIsIDB4MmEsIDB4NjUsIDB4NDksIDB4OWMsIDB4ODAsIDB4ZGMsCit9Oworc3RhdGljIGNvbnN0IHU4IGRoa2V5XzNbMzJdIF9faW5pdGNvbnN0ID0geworCTB4MmQsIDB4YWIsIDB4MDAsIDB4NDgsIDB4Y2IsIDB4YjMsIDB4N2IsIDB4ZGEsCisJMHg1NSwgMHg3YiwgMHg4YiwgMHg3MiwgMHhhOCwgMHg1NywgMHg4NywgMHhjMywKKwkweDg3LCAweDI3LCAweDk5LCAweDMyLCAweGZjLCAweDc5LCAweDVmLCAweGFlLAorCTB4N2MsIDB4MWMsIDB4ZjksIDB4NDksIDB4ZTYsIDB4ZDcsIDB4YWEsIDB4NzAsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB0ZXN0X2VjZGhfc2FtcGxlKGNvbnN0IHU4IHByaXZfYVszMl0sIGNvbnN0IHU4IHByaXZfYlszMl0sCisJCQkJICAgY29uc3QgdTggcHViX2FbNjRdLCBjb25zdCB1OCBwdWJfYls2NF0sCisJCQkJICAgY29uc3QgdTggZGhrZXlbMzJdKQoreworCXU4IGRoa2V5X2FbMzJdLCBkaGtleV9iWzMyXTsKKworCWVjZGhfc2hhcmVkX3NlY3JldChwdWJfYiwgcHJpdl9hLCBkaGtleV9hKTsKKwllY2RoX3NoYXJlZF9zZWNyZXQocHViX2EsIHByaXZfYiwgZGhrZXlfYik7CisKKwlpZiAobWVtY21wKGRoa2V5X2EsIGRoa2V5LCAzMikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG1lbWNtcChkaGtleV9iLCBkaGtleSwgMzIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCB0ZXN0X2VjZGgodm9pZCkKK3sKKwlrdGltZV90IGNhbGx0aW1lLCBkZWx0YSwgcmV0dGltZTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZHVyYXRpb247CisJaW50IGVycjsKKworCWNhbGx0aW1lID0ga3RpbWVfZ2V0KCk7CisKKwllcnIgPSB0ZXN0X2VjZGhfc2FtcGxlKHByaXZfYV8xLCBwcml2X2JfMSwgcHViX2FfMSwgcHViX2JfMSwgZGhrZXlfMSk7CisJaWYgKGVycikgeworCQlCVF9FUlIoIkVDREggc2FtcGxlIDEgZmFpbGVkIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gdGVzdF9lY2RoX3NhbXBsZShwcml2X2FfMiwgcHJpdl9iXzIsIHB1Yl9hXzIsIHB1Yl9iXzIsIGRoa2V5XzIpOworCWlmIChlcnIpIHsKKwkJQlRfRVJSKCJFQ0RIIHNhbXBsZSAyIGZhaWxlZCIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHRlc3RfZWNkaF9zYW1wbGUocHJpdl9hXzMsIHByaXZfYV8zLCBwdWJfYV8zLCBwdWJfYV8zLCBkaGtleV8zKTsKKwlpZiAoZXJyKSB7CisJCUJUX0VSUigiRUNESCBzYW1wbGUgMyBmYWlsZWQiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR0aW1lID0ga3RpbWVfZ2V0KCk7CisJZGVsdGEgPSBrdGltZV9zdWIocmV0dGltZSwgY2FsbHRpbWUpOworCWR1cmF0aW9uID0gKHVuc2lnbmVkIGxvbmcgbG9uZykga3RpbWVfdG9fbnMoZGVsdGEpID4+IDEwOworCisJQlRfSU5GTygiRUNESCB0ZXN0IHBhc3NlZCBpbiAlbGx1IHVzZWNzIiwgZHVyYXRpb24pOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfZWNkaCh2b2lkKQoreworCXJldHVybiAwOworfQorCisjZW5kaWYKKworc3RhdGljIGludCBfX2luaXQgcnVuX3NlbGZ0ZXN0KHZvaWQpCit7CisJaW50IGVycjsKKworCUJUX0lORk8oIlN0YXJ0aW5nIHNlbGYgdGVzdGluZyIpOworCisJZXJyID0gdGVzdF9lY2RoKCk7CisJaWYgKGVycikKKwkJZ290byBkb25lOworCisJZXJyID0gYnRfc2VsZnRlc3Rfc21wKCk7CisKK2RvbmU6CisJQlRfSU5GTygiRmluaXNoZWQgc2VsZiB0ZXN0aW5nIik7CisKKwlyZXR1cm4gZXJyOworfQorCisjaWYgSVNfTU9EVUxFKENPTkZJR19CVCkKKworLyogVGhpcyBpcyBydW4gd2hlbiBDT05GSUdfQlRfU0VMRlRFU1Q9eSBhbmQgQ09ORklHX0JUPW0gYW5kIGlzIGp1c3QgYQorICogd3JhcHBlciB0byBhbGxvdyBydW5uaW5nIHRoaXMgYXQgbW9kdWxlIGluaXQuCisgKgorICogSWYgQ09ORklHX0JUX1NFTEZURVNUPW4sIHRoZW4gdGhpcyBjb2RlIGlzIG5vdCBjb21waWxlZCBhdCBhbGwuCisgKi8KK2ludCBfX2luaXQgYnRfc2VsZnRlc3Qodm9pZCkKK3sKKwlyZXR1cm4gcnVuX3NlbGZ0ZXN0KCk7Cit9CisKKyNlbHNlCisKKy8qIFRoaXMgaXMgcnVuIHdoZW4gQ09ORklHX0JUX1NFTEZURVNUPXkgYW5kIENPTkZJR19CVD15IGFuZCBpcyBydW4KKyAqIHZpYSBsYXRlX2luaXRjYWxsKCkgYXMgbGFzdCBpdGVtIGluIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4KKyAqCisgKiBJZiBDT05GSUdfQlRfU0VMRlRFU1Q9biwgdGhlbiB0aGlzIGNvZGUgaXMgbm90IGNvbXBpbGVkIGF0IGFsbC4KKyAqLworc3RhdGljIGludCBfX2luaXQgYnRfc2VsZnRlc3RfaW5pdCh2b2lkKQoreworCXJldHVybiBydW5fc2VsZnRlc3QoKTsKK30KK2xhdGVfaW5pdGNhbGwoYnRfc2VsZnRlc3RfaW5pdCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9zZWxmdGVzdC5oIGIvbmV0L2JsdWV0b290aC9zZWxmdGVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhYTBhMzQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvYmx1ZXRvb3RoL3NlbGZ0ZXN0LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAgIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eAorICAgQ29weXJpZ2h0IChDKSAyMDE0IEludGVsIENvcnBvcmF0aW9uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247CisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCisgICBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLgorICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWQorICAgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZIERBTUFHRVMKKyAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICAgQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAgIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKyAgIEFMTCBMSUFCSUxJVFksIElOQ0xVRElORyBMSUFCSUxJVFkgRk9SIElORlJJTkdFTUVOVCBPRiBBTlkgUEFURU5UUywKKyAgIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgT1RIRVIgUklHSFRTLCBSRUxBVElORyBUTyBVU0UgT0YgVEhJUworICAgU09GVFdBUkUgSVMgRElTQ0xBSU1FRC4KKyovCisKKyNpZiBJU19FTkFCTEVEKENPTkZJR19CVF9TRUxGVEVTVCkgJiYgSVNfTU9EVUxFKENPTkZJR19CVCkKKworLyogV2hlbiBDT05GSUdfQlRfU0VMRlRFU1Q9eSBhbmQgdGhlIENPTkZJR19CVD1tLCB0aGVuIHRoZSBzZWxmIHRlc3RpbmcKKyAqIGlzIHJ1biBhdCBtb2R1bGUgbG9hZGluZyB0aW1lLgorICovCitpbnQgYnRfc2VsZnRlc3Qodm9pZCk7CisKKyNlbHNlCisKKy8qIFdoZW4gQ09ORklHX0JUX1NFTEZURVNUPXkgYW5kIENPTkZJR19CVD15LCB0aGVuIHRoZSBzZWxmIHRlc3RpbmcKKyAqIGlzIHJ1biB2aWEgbGF0ZV9pbml0Y2FsbCgpIHRvIG1ha2Ugc3VyZSB0aGF0IHN1YnN5c19pbml0Y2FsbCgpIG9mCisgKiB0aGUgQmx1ZXRvb3RoIHN1YnN5c3RlbSBhbmQgZGV2aWNlX2luaXRjYWxsKCkgb2YgdGhlIENyeXB0byBzdWJzeXN0ZW0KKyAqIGRvIG5vdCBjbGFzaC4KKyAqCisgKiBXaGVuIENPTkZJR19CVF9TRUxGVEVTVD1uLCB0aGVuIHRoaXMgdHVybnMgaW50byBhbiBlbXB0eSBjYWxsIHRoYXQKKyAqIGhhcyBubyBpbXBhY3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGJ0X3NlbGZ0ZXN0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9zbXAuYyBiL25ldC9ibHVldG9vdGgvc21wLmMKaW5kZXggYjY3NzQ5Yi4uYzA5YTgyMSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9zbXAuYworKysgYi9uZXQvYmx1ZXRvb3RoL3NtcC5jCkBAIC0yMCw2ICsyMCw3IEBACiAgICBTT0ZUV0FSRSBJUyBESVNDTEFJTUVELgogKi8KIAorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGNyeXB0by9iMTI4b3BzLmg+CkBAIC0yMjMsOCArMjI0LDkgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHNtcF9mNShzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbV9jbWFjLCB1OCB3WzMyXSwgdTggbjFbMTZdLCB1OCBuMlsxNl0sCi0JCSAgdTggYTFbN10sIHU4IGEyWzddLCB1OCBtYWNrZXlbMTZdLCB1OCBsdGtbMTZdKQorc3RhdGljIGludCBzbXBfZjUoc3RydWN0IGNyeXB0b19oYXNoICp0Zm1fY21hYywgY29uc3QgdTggd1szMl0sCisJCSAgY29uc3QgdTggbjFbMTZdLCBjb25zdCB1OCBuMlsxNl0sIGNvbnN0IHU4IGExWzddLAorCQkgIGNvbnN0IHU4IGEyWzddLCB1OCBtYWNrZXlbMTZdLCB1OCBsdGtbMTZdKQogewogCS8qIFRoZSBidGxlLCBzYWx0IGFuZCBsZW5ndGggIm1hZ2ljIiB2YWx1ZXMgYXJlIGFzIGRlZmluZWQgaW4KIAkgKiB0aGUgU01QIHNlY3Rpb24gb2YgdGhlIEJsdWV0b290aCBjb3JlIHNwZWNpZmljYXRpb24uIEluIEFTQ0lJCkBAIC0yNzYsNyArMjc4LDcgQEAKIH0KIAogc3RhdGljIGludCBzbXBfZjYoc3RydWN0IGNyeXB0b19oYXNoICp0Zm1fY21hYywgY29uc3QgdTggd1sxNl0sCi0JCSAgY29uc3QgdTggbjFbMTZdLCB1OCBuMlsxNl0sIGNvbnN0IHU4IHJbMTZdLAorCQkgIGNvbnN0IHU4IG4xWzE2XSwgY29uc3QgdTggbjJbMTZdLCBjb25zdCB1OCByWzE2XSwKIAkJICBjb25zdCB1OCBpb19jYXBbM10sIGNvbnN0IHU4IGExWzddLCBjb25zdCB1OCBhMls3XSwKIAkJICB1OCByZXNbMTZdKQogewpAQCAtMjk4LDcgKzMwMCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCUJUX0RCRygicmVzICUxNnBoTiIsIHJlcyk7CisJU01QX0RCRygicmVzICUxNnBoTiIsIHJlcyk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNjE4LDcgKzYyMCw3IEBACiAKIAkJb29iX2RhdGEgPSBoY2lfZmluZF9yZW1vdGVfb29iX2RhdGEoaGRldiwgJmhjb24tPmRzdCwKIAkJCQkJCSAgICBiZGFkZHJfdHlwZSk7Ci0JCWlmIChvb2JfZGF0YSkgeworCQlpZiAob29iX2RhdGEgJiYgb29iX2RhdGEtPnByZXNlbnQpIHsKIAkJCXNldF9iaXQoU01QX0ZMQUdfT09CLCAmc21wLT5mbGFncyk7CiAJCQlvb2JfZmxhZyA9IFNNUF9PT0JfUFJFU0VOVDsKIAkJCW1lbWNweShzbXAtPnJyLCBvb2JfZGF0YS0+cmFuZDI1NiwgMTYpOwpAQCAtMTY3NCw3ICsxNjc2LDcgQEAKIAlpZiAoY29ubi0+aGNvbi0+dHlwZSA9PSBBQ0xfTElOSykgewogCQkvKiBXZSBtdXN0IGhhdmUgYSBCUi9FRFIgU0MgbGluayAqLwogCQlpZiAoIXRlc3RfYml0KEhDSV9DT05OX0FFU19DQ00sICZjb25uLT5oY29uLT5mbGFncykgJiYKLQkJICAgICF0ZXN0X2JpdChIQ0lfRk9SQ0VfTEVTQywgJmhkZXYtPmRiZ19mbGFncykpCisJCSAgICAhdGVzdF9iaXQoSENJX0ZPUkNFX0JSRURSX1NNUCwgJmhkZXYtPmRiZ19mbGFncykpCiAJCQlyZXR1cm4gU01QX0NST1NTX1RSQU5TUF9OT1RfQUxMT1dFRDsKIAogCQlzZXRfYml0KFNNUF9GTEFHX1NDLCAmc21wLT5mbGFncyk7CkBAIC0yMzAzLDggKzIzMDUsMTIgQEAKIAkgKiBpbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBrbm93biBvZiBhbmQgaW4gb3JkZXIgdG8gbm90IG92ZXIKIAkgKiBjb21wbGljYXRlIG91ciBpbXBsZW1lbnRhdGlvbiwgc2ltcGx5IHByZXRlbmQgdGhhdCB3ZSBuZXZlcgogCSAqIHJlY2VpdmVkIGFuIElSSyBmb3Igc3VjaCBhIGRldmljZS4KKwkgKgorCSAqIFRoZSBJZGVudGl0eSBBZGRyZXNzIG11c3QgYWxzbyBiZSBhIFN0YXRpYyBSYW5kb20gb3IgUHVibGljCisJICogQWRkcmVzcywgd2hpY2ggaGNpX2lzX2lkZW50aXR5X2FkZHJlc3MoKSBjaGVja3MgZm9yLgogCSAqLwotCWlmICghYmFjbXAoJmluZm8tPmJkYWRkciwgQkRBRERSX0FOWSkpIHsKKwlpZiAoIWJhY21wKCZpbmZvLT5iZGFkZHIsIEJEQUREUl9BTlkpIHx8CisJICAgICFoY2lfaXNfaWRlbnRpdHlfYWRkcmVzcygmaW5mby0+YmRhZGRyLCBpbmZvLT5hZGRyX3R5cGUpKSB7CiAJCUJUX0VSUigiSWdub3JpbmcgSVJLIHdpdGggbm8gaWRlbnRpdHkgYWRkcmVzcyIpOwogCQlnb3RvIGRpc3RyaWJ1dGU7CiAJfQpAQCAtMjczNyw3ICsyNzQzLDcgQEAKIAogCS8qIEJSL0VEUiBtdXN0IHVzZSBTZWN1cmUgQ29ubmVjdGlvbnMgZm9yIFNNUCAqLwogCWlmICghdGVzdF9iaXQoSENJX0NPTk5fQUVTX0NDTSwgJmhjb24tPmZsYWdzKSAmJgotCSAgICAhdGVzdF9iaXQoSENJX0ZPUkNFX0xFU0MsICZoZGV2LT5kYmdfZmxhZ3MpKQorCSAgICAhdGVzdF9iaXQoSENJX0ZPUkNFX0JSRURSX1NNUCwgJmhkZXYtPmRiZ19mbGFncykpCiAJCXJldHVybjsKIAogCS8qIElmIG91ciBMRSBzdXBwb3J0IGlzIG5vdCBlbmFibGVkIGRvbid0IGRvIGFueXRoaW5nICovCkBAIC0yOTQ0LDExICsyOTUwLDMwIEBACiAKIAlsMmNhcF9jaGFuX3NldF9kZWZhdWx0cyhjaGFuKTsKIAotCWJhY3B5KCZjaGFuLT5zcmMsICZoZGV2LT5iZGFkZHIpOwotCWlmIChjaWQgPT0gTDJDQVBfQ0lEX1NNUCkKLQkJY2hhbi0+c3JjX3R5cGUgPSBCREFERFJfTEVfUFVCTElDOwotCWVsc2UKKwlpZiAoY2lkID09IEwyQ0FQX0NJRF9TTVApIHsKKwkJLyogSWYgdXNhZ2Ugb2Ygc3RhdGljIGFkZHJlc3MgaXMgZm9yY2VkIG9yIGlmIHRoZSBkZXZpY2VzCisJCSAqIGRvZXMgbm90IGhhdmUgYSBwdWJsaWMgYWRkcmVzcywgdGhlbiBsaXN0ZW4gb24gdGhlIHN0YXRpYworCQkgKiBhZGRyZXNzLgorCQkgKgorCQkgKiBJbiBjYXNlIEJSL0VEUiBoYXMgYmVlbiBkaXNhYmxlZCBvbiBhIGR1YWwtbW9kZSBjb250cm9sbGVyCisJCSAqIGFuZCBhIHN0YXRpYyBhZGRyZXNzIGhhcyBiZWVuIGNvbmZpZ3VlZCwgdGhlbiBsaXN0ZW4gb24KKwkJICogdGhlIHN0YXRpYyBhZGRyZXNzIGluc3RlYWQuCisJCSAqLworCQlpZiAodGVzdF9iaXQoSENJX0ZPUkNFX1NUQVRJQ19BRERSLCAmaGRldi0+ZGJnX2ZsYWdzKSB8fAorCQkgICAgIWJhY21wKCZoZGV2LT5iZGFkZHIsIEJEQUREUl9BTlkpIHx8CisJCSAgICAoIXRlc3RfYml0KEhDSV9CUkVEUl9FTkFCTEVELCAmaGRldi0+ZGV2X2ZsYWdzKSAmJgorCQkgICAgIGJhY21wKCZoZGV2LT5zdGF0aWNfYWRkciwgQkRBRERSX0FOWSkpKSB7CisJCQliYWNweSgmY2hhbi0+c3JjLCAmaGRldi0+c3RhdGljX2FkZHIpOworCQkJY2hhbi0+c3JjX3R5cGUgPSBCREFERFJfTEVfUkFORE9NOworCQl9IGVsc2UgeworCQkJYmFjcHkoJmNoYW4tPnNyYywgJmhkZXYtPmJkYWRkcik7CisJCQljaGFuLT5zcmNfdHlwZSA9IEJEQUREUl9MRV9QVUJMSUM7CisJCX0KKwl9IGVsc2UgeworCQliYWNweSgmY2hhbi0+c3JjLCAmaGRldi0+YmRhZGRyKTsKIAkJY2hhbi0+c3JjX3R5cGUgPSBCREFERFJfQlJFRFI7CisJfQorCiAJY2hhbi0+c3RhdGUgPSBCVF9MSVNURU47CiAJY2hhbi0+bW9kZSA9IEwyQ0FQX01PREVfQkFTSUM7CiAJY2hhbi0+aW10dSA9IEwyQ0FQX0RFRkFVTFRfTVRVOwpAQCAtMjk3NSwyMSArMzAwMCwxMDggQEAKIAlsMmNhcF9jaGFuX3B1dChjaGFuKTsKIH0KIAorc3RhdGljIHNzaXplX3QgZm9yY2VfYnJlZHJfc21wX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbM107CisKKwlidWZbMF0gPSB0ZXN0X2JpdChIQ0lfRk9SQ0VfQlJFRFJfU01QLCAmaGRldi0+ZGJnX2ZsYWdzKSA/ICdZJzogJ04nOworCWJ1ZlsxXSA9ICdcbic7CisJYnVmWzJdID0gJ1wwJzsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIDIpOworfQorCitzdGF0aWMgc3NpemVfdCBmb3JjZV9icmVkcl9zbXBfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1ZlszMl07CisJc2l6ZV90IGJ1Zl9zaXplID0gbWluKGNvdW50LCAoc2l6ZW9mKGJ1ZiktMSkpOworCWJvb2wgZW5hYmxlOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidWZbYnVmX3NpemVdID0gJ1wwJzsKKwlpZiAoc3RydG9ib29sKGJ1ZiwgJmVuYWJsZSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGVuYWJsZSA9PSB0ZXN0X2JpdChIQ0lfRk9SQ0VfQlJFRFJfU01QLCAmaGRldi0+ZGJnX2ZsYWdzKSkKKwkJcmV0dXJuIC1FQUxSRUFEWTsKKworCWlmIChlbmFibGUpIHsKKwkJc3RydWN0IGwyY2FwX2NoYW4gKmNoYW47CisKKwkJY2hhbiA9IHNtcF9hZGRfY2lkKGhkZXYsIEwyQ0FQX0NJRF9TTVBfQlJFRFIpOworCQlpZiAoSVNfRVJSKGNoYW4pKQorCQkJcmV0dXJuIFBUUl9FUlIoY2hhbik7CisKKwkJaGRldi0+c21wX2JyZWRyX2RhdGEgPSBjaGFuOworCX0gZWxzZSB7CisJCXN0cnVjdCBsMmNhcF9jaGFuICpjaGFuOworCisJCWNoYW4gPSBoZGV2LT5zbXBfYnJlZHJfZGF0YTsKKwkJaGRldi0+c21wX2JyZWRyX2RhdGEgPSBOVUxMOworCQlzbXBfZGVsX2NoYW4oY2hhbik7CisJfQorCisJY2hhbmdlX2JpdChIQ0lfRk9SQ0VfQlJFRFJfU01QLCAmaGRldi0+ZGJnX2ZsYWdzKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9yY2VfYnJlZHJfc21wX2ZvcHMgPSB7CisJLm9wZW4JCT0gc2ltcGxlX29wZW4sCisJLnJlYWQJCT0gZm9yY2VfYnJlZHJfc21wX3JlYWQsCisJLndyaXRlCQk9IGZvcmNlX2JyZWRyX3NtcF93cml0ZSwKKwkubGxzZWVrCQk9IGRlZmF1bHRfbGxzZWVrLAorfTsKKwogaW50IHNtcF9yZWdpc3RlcihzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKIAlzdHJ1Y3QgbDJjYXBfY2hhbiAqY2hhbjsKIAogCUJUX0RCRygiJXMiLCBoZGV2LT5uYW1lKTsKIAorCS8qIElmIHRoZSBjb250cm9sbGVyIGRvZXMgbm90IHN1cHBvcnQgTG93IEVuZXJneSBvcGVyYXRpb24sIHRoZW4KKwkgKiB0aGVyZSBpcyBhbHNvIG5vIG5lZWQgdG8gcmVnaXN0ZXIgYW55IFNNUCBjaGFubmVsLgorCSAqLworCWlmICghbG1wX2xlX2NhcGFibGUoaGRldikpCisJCXJldHVybiAwOworCisJaWYgKFdBUk5fT04oaGRldi0+c21wX2RhdGEpKSB7CisJCWNoYW4gPSBoZGV2LT5zbXBfZGF0YTsKKwkJaGRldi0+c21wX2RhdGEgPSBOVUxMOworCQlzbXBfZGVsX2NoYW4oY2hhbik7CisJfQorCiAJY2hhbiA9IHNtcF9hZGRfY2lkKGhkZXYsIEwyQ0FQX0NJRF9TTVApOwogCWlmIChJU19FUlIoY2hhbikpCiAJCXJldHVybiBQVFJfRVJSKGNoYW4pOwogCiAJaGRldi0+c21wX2RhdGEgPSBjaGFuOwogCi0JaWYgKCFsbXBfc2NfY2FwYWJsZShoZGV2KSAmJgotCSAgICAhdGVzdF9iaXQoSENJX0ZPUkNFX0xFU0MsICZoZGV2LT5kYmdfZmxhZ3MpKQorCS8qIElmIHRoZSBjb250cm9sbGVyIGRvZXMgbm90IHN1cHBvcnQgQlIvRURSIFNlY3VyZSBDb25uZWN0aW9ucworCSAqIGZlYXR1cmUsIHRoZW4gdGhlIEJSL0VEUiBTTVAgY2hhbm5lbCBzaGFsbCBub3QgYmUgcHJlc2VudC4KKwkgKgorCSAqIFRvIHRlc3QgdGhpcyB3aXRoIEJsdWV0b290aCA0LjAgY29udHJvbGxlcnMsIGNyZWF0ZSBhIGRlYnVnZnMKKwkgKiBzd2l0Y2ggdGhhdCBhbGxvd3MgZm9yY2luZyBCUi9FRFIgU01QIHN1cHBvcnQgYW5kIGFjY2VwdGluZworCSAqIGNyb3NzLXRyYW5zcG9ydCBwYWlyaW5nIG9uIG5vbi1BRVMgZW5jcnlwdGVkIGNvbm5lY3Rpb25zLgorCSAqLworCWlmICghbG1wX3NjX2NhcGFibGUoaGRldikpIHsKKwkJZGVidWdmc19jcmVhdGVfZmlsZSgiZm9yY2VfYnJlZHJfc21wIiwgMDY0NCwgaGRldi0+ZGVidWdmcywKKwkJCQkgICAgaGRldiwgJmZvcmNlX2JyZWRyX3NtcF9mb3BzKTsKIAkJcmV0dXJuIDA7CisJfQorCisJaWYgKFdBUk5fT04oaGRldi0+c21wX2JyZWRyX2RhdGEpKSB7CisJCWNoYW4gPSBoZGV2LT5zbXBfYnJlZHJfZGF0YTsKKwkJaGRldi0+c21wX2JyZWRyX2RhdGEgPSBOVUxMOworCQlzbXBfZGVsX2NoYW4oY2hhbik7CisJfQogCiAJY2hhbiA9IHNtcF9hZGRfY2lkKGhkZXYsIEwyQ0FQX0NJRF9TTVBfQlJFRFIpOwogCWlmIChJU19FUlIoY2hhbikpIHsKQEAgLTMwMjEsMyArMzEzMywzMzEgQEAKIAkJc21wX2RlbF9jaGFuKGNoYW4pOwogCX0KIH0KKworI2lmIElTX0VOQUJMRUQoQ09ORklHX0JUX1NFTEZURVNUX1NNUCkKKworc3RhdGljIGludCBfX2luaXQgdGVzdF9haChzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtX2FlcykKK3sKKwljb25zdCB1OCBpcmtbMTZdID0geworCQkJMHg5YiwgMHg3ZCwgMHgzOSwgMHgwYSwgMHhhNiwgMHgxMCwgMHgxMCwgMHgzNCwKKwkJCTB4MDUsIDB4YWQsIDB4YzgsIDB4NTcsIDB4YTMsIDB4MzQsIDB4MDIsIDB4ZWMgfTsKKwljb25zdCB1OCByWzNdID0geyAweDk0LCAweDgxLCAweDcwIH07CisJY29uc3QgdTggZXhwWzNdID0geyAweGFhLCAweGZiLCAweDBkIH07CisJdTggcmVzWzNdOworCWludCBlcnI7CisKKwllcnIgPSBzbXBfYWgodGZtX2FlcywgaXJrLCByLCByZXMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAobWVtY21wKHJlcywgZXhwLCAzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgdGVzdF9jMShzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtX2FlcykKK3sKKwljb25zdCB1OCBrWzE2XSA9IHsKKwkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH07CisJY29uc3QgdTggclsxNl0gPSB7CisJCQkweGUwLCAweDJlLCAweDcwLCAweGM2LCAweDRlLCAweDI3LCAweDg4LCAweDYzLAorCQkJMHgwZSwgMHg2ZiwgMHhhZCwgMHg1NiwgMHgyMSwgMHhkNSwgMHg4MywgMHg1NyB9OworCWNvbnN0IHU4IHByZXFbN10gPSB7IDB4MDEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTAsIDB4MDcsIDB4MDcgfTsKKwljb25zdCB1OCBwcmVzWzddID0geyAweDAyLCAweDAzLCAweDAwLCAweDAwLCAweDA4LCAweDAwLCAweDA1IH07CisJY29uc3QgdTggX2lhdCA9IDB4MDE7CisJY29uc3QgdTggX3JhdCA9IDB4MDA7CisJY29uc3QgYmRhZGRyX3QgcmEgPSB7IHsgMHhiNiwgMHhiNSwgMHhiNCwgMHhiMywgMHhiMiwgMHhiMSB9IH07CisJY29uc3QgYmRhZGRyX3QgaWEgPSB7IHsgMHhhNiwgMHhhNSwgMHhhNCwgMHhhMywgMHhhMiwgMHhhMSB9IH07CisJY29uc3QgdTggZXhwWzE2XSA9IHsKKwkJCTB4ODYsIDB4M2IsIDB4ZjEsIDB4YmUsIDB4YzUsIDB4NGQsIDB4YTcsIDB4ZDIsCisJCQkweGVhLCAweDg4LCAweDg5LCAweDg3LCAweGVmLCAweDNmLCAweDFlLCAweDFlIH07CisJdTggcmVzWzE2XTsKKwlpbnQgZXJyOworCisJZXJyID0gc21wX2MxKHRmbV9hZXMsIGssIHIsIHByZXEsIHByZXMsIF9pYXQsICZpYSwgX3JhdCwgJnJhLCByZXMpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAobWVtY21wKHJlcywgZXhwLCAxNikpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHRlc3RfczEoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbV9hZXMpCit7CisJY29uc3QgdTgga1sxNl0gPSB7CisJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorCQkJMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCWNvbnN0IHU4IHIxWzE2XSA9IHsKKwkJCTB4ODgsIDB4NzcsIDB4NjYsIDB4NTUsIDB4NDQsIDB4MzMsIDB4MjIsIDB4MTEgfTsKKwljb25zdCB1OCByMlsxNl0gPSB7CisJCQkweDAwLCAweGZmLCAweGVlLCAweGRkLCAweGNjLCAweGJiLCAweGFhLCAweDk5IH07CisJY29uc3QgdTggZXhwWzE2XSA9IHsKKwkJCTB4NjIsIDB4YTAsIDB4NmQsIDB4NzksIDB4YWUsIDB4MTYsIDB4NDIsIDB4NWIsCisJCQkweDliLCAweGY0LCAweGIwLCAweGU4LCAweGYwLCAweGUxLCAweDFmLCAweDlhIH07CisJdTggcmVzWzE2XTsKKwlpbnQgZXJyOworCisJZXJyID0gc21wX3MxKHRmbV9hZXMsIGssIHIxLCByMiwgcmVzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKG1lbWNtcChyZXMsIGV4cCwgMTYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCB0ZXN0X2Y0KHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtX2NtYWMpCit7CisJY29uc3QgdTggdVszMl0gPSB7CisJCQkweGU2LCAweDlkLCAweDM1LCAweDBlLCAweDQ4LCAweDAxLCAweDAzLCAweGNjLAorCQkJMHhkYiwgMHhmZCwgMHhmNCwgMHhhYywgMHgxMSwgMHg5MSwgMHhmNCwgMHhlZiwKKwkJCTB4YjksIDB4YTUsIDB4ZjksIDB4ZTksIDB4YTcsIDB4ODMsIDB4MmMsIDB4NWUsCisJCQkweDJjLCAweGJlLCAweDk3LCAweGYyLCAweGQyLCAweDAzLCAweGIwLCAweDIwIH07CisJY29uc3QgdTggdlszMl0gPSB7CisJCQkweGZkLCAweGM1LCAweDdmLCAweGY0LCAweDQ5LCAweGRkLCAweDRmLCAweDZiLAorCQkJMHhmYiwgMHg3YywgMHg5ZCwgMHhmMSwgMHhjMiwgMHg5YSwgMHhjYiwgMHg1OSwKKwkJCTB4MmEsIDB4ZTcsIDB4ZDQsIDB4ZWUsIDB4ZmIsIDB4ZmMsIDB4MGEsIDB4OTAsCisJCQkweDlhLCAweGJiLCAweGY2LCAweDMyLCAweDNkLCAweDhiLCAweDE4LCAweDU1IH07CisJY29uc3QgdTggeFsxNl0gPSB7CisJCQkweGFiLCAweGFlLCAweDJiLCAweDcxLCAweGVjLCAweGIyLCAweGZmLCAweGZmLAorCQkJMHgzZSwgMHg3MywgMHg3NywgMHhkMSwgMHg1NCwgMHg4NCwgMHhjYiwgMHhkNSB9OworCWNvbnN0IHU4IHogPSAweDAwOworCWNvbnN0IHU4IGV4cFsxNl0gPSB7CisJCQkweDJkLCAweDg3LCAweDc0LCAweGE5LCAweGJlLCAweGExLCAweGVkLCAweGYxLAorCQkJMHgxYywgMHhiZCwgMHhhOSwgMHgwNywgMHhmMSwgMHgxNiwgMHhjOSwgMHhmMiB9OworCXU4IHJlc1sxNl07CisJaW50IGVycjsKKworCWVyciA9IHNtcF9mNCh0Zm1fY21hYywgdSwgdiwgeCwgeiwgcmVzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKG1lbWNtcChyZXMsIGV4cCwgMTYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCB0ZXN0X2Y1KHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtX2NtYWMpCit7CisJY29uc3QgdTggd1szMl0gPSB7CisJCQkweDk4LCAweGE2LCAweGJmLCAweDczLCAweGYzLCAweDM0LCAweDhkLCAweDg2LAorCQkJMHhmMSwgMHg2NiwgMHhmOCwgMHhiNCwgMHgxMywgMHg2YiwgMHg3OSwgMHg5OSwKKwkJCTB4OWIsIDB4N2QsIDB4MzksIDB4MGEsIDB4YTYsIDB4MTAsIDB4MTAsIDB4MzQsCisJCQkweDA1LCAweGFkLCAweGM4LCAweDU3LCAweGEzLCAweDM0LCAweDAyLCAweGVjIH07CisJY29uc3QgdTggbjFbMTZdID0geworCQkJMHhhYiwgMHhhZSwgMHgyYiwgMHg3MSwgMHhlYywgMHhiMiwgMHhmZiwgMHhmZiwKKwkJCTB4M2UsIDB4NzMsIDB4NzcsIDB4ZDEsIDB4NTQsIDB4ODQsIDB4Y2IsIDB4ZDUgfTsKKwljb25zdCB1OCBuMlsxNl0gPSB7CisJCQkweGNmLCAweGM0LCAweDNkLCAweGZmLCAweGY3LCAweDgzLCAweDY1LCAweDIxLAorCQkJMHg2ZSwgMHg1ZiwgMHhhNywgMHgyNSwgMHhjYywgMHhlNywgMHhlOCwgMHhhNiB9OworCWNvbnN0IHU4IGExWzddID0geyAweGNlLCAweGJmLCAweDM3LCAweDM3LCAweDEyLCAweDU2LCAweDAwIH07CisJY29uc3QgdTggYTJbN10gPSB7IDB4YzEsIDB4Y2YsIDB4MmQsIDB4NzAsIDB4MTMsIDB4YTcsIDB4MDAgfTsKKwljb25zdCB1OCBleHBfbHRrWzE2XSA9IHsKKwkJCTB4MzgsIDB4MGEsIDB4NzUsIDB4OTQsIDB4YjUsIDB4MjIsIDB4MDUsIDB4OTgsCisJCQkweDIzLCAweGNkLCAweGQ3LCAweDY5LCAweDExLCAweDc5LCAweDg2LCAweDY5IH07CisJY29uc3QgdTggZXhwX21hY2tleVsxNl0gPSB7CisJCQkweDIwLCAweDZlLCAweDYzLCAweGNlLCAweDIwLCAweDZhLCAweDNmLCAweGZkLAorCQkJMHgwMiwgMHg0YSwgMHgwOCwgMHhhMSwgMHg3NiwgMHhmMSwgMHg2NSwgMHgyOSB9OworCXU4IG1hY2tleVsxNl0sIGx0a1sxNl07CisJaW50IGVycjsKKworCWVyciA9IHNtcF9mNSh0Zm1fY21hYywgdywgbjEsIG4yLCBhMSwgYTIsIG1hY2tleSwgbHRrKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKG1lbWNtcChtYWNrZXksIGV4cF9tYWNrZXksIDE2KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobWVtY21wKGx0aywgZXhwX2x0aywgMTYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCB0ZXN0X2Y2KHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtX2NtYWMpCit7CisJY29uc3QgdTggd1sxNl0gPSB7CisJCQkweDIwLCAweDZlLCAweDYzLCAweGNlLCAweDIwLCAweDZhLCAweDNmLCAweGZkLAorCQkJMHgwMiwgMHg0YSwgMHgwOCwgMHhhMSwgMHg3NiwgMHhmMSwgMHg2NSwgMHgyOSB9OworCWNvbnN0IHU4IG4xWzE2XSA9IHsKKwkJCTB4YWIsIDB4YWUsIDB4MmIsIDB4NzEsIDB4ZWMsIDB4YjIsIDB4ZmYsIDB4ZmYsCisJCQkweDNlLCAweDczLCAweDc3LCAweGQxLCAweDU0LCAweDg0LCAweGNiLCAweGQ1IH07CisJY29uc3QgdTggbjJbMTZdID0geworCQkJMHhjZiwgMHhjNCwgMHgzZCwgMHhmZiwgMHhmNywgMHg4MywgMHg2NSwgMHgyMSwKKwkJCTB4NmUsIDB4NWYsIDB4YTcsIDB4MjUsIDB4Y2MsIDB4ZTcsIDB4ZTgsIDB4YTYgfTsKKwljb25zdCB1OCByWzE2XSA9IHsKKwkJCTB4YzgsIDB4MGYsIDB4MmQsIDB4MGMsIDB4ZDIsIDB4NDIsIDB4ZGEsIDB4MDgsCisJCQkweDU0LCAweGJiLCAweDUzLCAweGI0LCAweDNiLCAweDM0LCAweGEzLCAweDEyIH07CisJY29uc3QgdTggaW9fY2FwWzNdID0geyAweDAyLCAweDAxLCAweDAxIH07CisJY29uc3QgdTggYTFbN10gPSB7IDB4Y2UsIDB4YmYsIDB4MzcsIDB4MzcsIDB4MTIsIDB4NTYsIDB4MDAgfTsKKwljb25zdCB1OCBhMls3XSA9IHsgMHhjMSwgMHhjZiwgMHgyZCwgMHg3MCwgMHgxMywgMHhhNywgMHgwMCB9OworCWNvbnN0IHU4IGV4cFsxNl0gPSB7CisJCQkweDYxLCAweDhmLCAweDk1LCAweGRhLCAweDA5LCAweDBiLCAweDZjLCAweGQyLAorCQkJMHhjNSwgMHhlOCwgMHhkMCwgMHg5YywgMHg5OCwgMHg3MywgMHhjNCwgMHhlMyB9OworCXU4IHJlc1sxNl07CisJaW50IGVycjsKKworCWVyciA9IHNtcF9mNih0Zm1fY21hYywgdywgbjEsIG4yLCByLCBpb19jYXAsIGExLCBhMiwgcmVzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKG1lbWNtcChyZXMsIGV4cCwgMTYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCB0ZXN0X2cyKHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtX2NtYWMpCit7CisJY29uc3QgdTggdVszMl0gPSB7CisJCQkweGU2LCAweDlkLCAweDM1LCAweDBlLCAweDQ4LCAweDAxLCAweDAzLCAweGNjLAorCQkJMHhkYiwgMHhmZCwgMHhmNCwgMHhhYywgMHgxMSwgMHg5MSwgMHhmNCwgMHhlZiwKKwkJCTB4YjksIDB4YTUsIDB4ZjksIDB4ZTksIDB4YTcsIDB4ODMsIDB4MmMsIDB4NWUsCisJCQkweDJjLCAweGJlLCAweDk3LCAweGYyLCAweGQyLCAweDAzLCAweGIwLCAweDIwIH07CisJY29uc3QgdTggdlszMl0gPSB7CisJCQkweGZkLCAweGM1LCAweDdmLCAweGY0LCAweDQ5LCAweGRkLCAweDRmLCAweDZiLAorCQkJMHhmYiwgMHg3YywgMHg5ZCwgMHhmMSwgMHhjMiwgMHg5YSwgMHhjYiwgMHg1OSwKKwkJCTB4MmEsIDB4ZTcsIDB4ZDQsIDB4ZWUsIDB4ZmIsIDB4ZmMsIDB4MGEsIDB4OTAsCisJCQkweDlhLCAweGJiLCAweGY2LCAweDMyLCAweDNkLCAweDhiLCAweDE4LCAweDU1IH07CisJY29uc3QgdTggeFsxNl0gPSB7CisJCQkweGFiLCAweGFlLCAweDJiLCAweDcxLCAweGVjLCAweGIyLCAweGZmLCAweGZmLAorCQkJMHgzZSwgMHg3MywgMHg3NywgMHhkMSwgMHg1NCwgMHg4NCwgMHhjYiwgMHhkNSB9OworCWNvbnN0IHU4IHlbMTZdID0geworCQkJMHhjZiwgMHhjNCwgMHgzZCwgMHhmZiwgMHhmNywgMHg4MywgMHg2NSwgMHgyMSwKKwkJCTB4NmUsIDB4NWYsIDB4YTcsIDB4MjUsIDB4Y2MsIDB4ZTcsIDB4ZTgsIDB4YTYgfTsKKwljb25zdCB1MzIgZXhwX3ZhbCA9IDB4MmY5ZWQ1YmEgJSAxMDAwMDAwOworCXUzMiB2YWw7CisJaW50IGVycjsKKworCWVyciA9IHNtcF9nMih0Zm1fY21hYywgdSwgdiwgeCwgeSwgJnZhbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmICh2YWwgIT0gZXhwX3ZhbCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgdGVzdF9oNihzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbV9jbWFjKQoreworCWNvbnN0IHU4IHdbMTZdID0geworCQkJMHg5YiwgMHg3ZCwgMHgzOSwgMHgwYSwgMHhhNiwgMHgxMCwgMHgxMCwgMHgzNCwKKwkJCTB4MDUsIDB4YWQsIDB4YzgsIDB4NTcsIDB4YTMsIDB4MzQsIDB4MDIsIDB4ZWMgfTsKKwljb25zdCB1OCBrZXlfaWRbNF0gPSB7IDB4NzIsIDB4NjIsIDB4NjUsIDB4NmMgfTsKKwljb25zdCB1OCBleHBbMTZdID0geworCQkJMHg5OSwgMHg2MywgMHhiMSwgMHg4MCwgMHhlMiwgMHhhOSwgMHhkMywgMHhlOCwKKwkJCTB4MWMsIDB4YzksIDB4NmQsIDB4ZTcsIDB4MDIsIDB4ZTEsIDB4OWEsIDB4MmQgfTsKKwl1OCByZXNbMTZdOworCWludCBlcnI7CisKKwllcnIgPSBzbXBfaDYodGZtX2NtYWMsIHcsIGtleV9pZCwgcmVzKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKG1lbWNtcChyZXMsIGV4cCwgMTYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBydW5fc2VsZnRlc3RzKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm1fYWVzLAorCQkJCXN0cnVjdCBjcnlwdG9faGFzaCAqdGZtX2NtYWMpCit7CisJa3RpbWVfdCBjYWxsdGltZSwgZGVsdGEsIHJldHRpbWU7CisJdW5zaWduZWQgbG9uZyBsb25nIGR1cmF0aW9uOworCWludCBlcnI7CisKKwljYWxsdGltZSA9IGt0aW1lX2dldCgpOworCisJZXJyID0gdGVzdF9haCh0Zm1fYWVzKTsKKwlpZiAoZXJyKSB7CisJCUJUX0VSUigic21wX2FoIHRlc3QgZmFpbGVkIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gdGVzdF9jMSh0Zm1fYWVzKTsKKwlpZiAoZXJyKSB7CisJCUJUX0VSUigic21wX2MxIHRlc3QgZmFpbGVkIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gdGVzdF9zMSh0Zm1fYWVzKTsKKwlpZiAoZXJyKSB7CisJCUJUX0VSUigic21wX3MxIHRlc3QgZmFpbGVkIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gdGVzdF9mNCh0Zm1fY21hYyk7CisJaWYgKGVycikgeworCQlCVF9FUlIoInNtcF9mNCB0ZXN0IGZhaWxlZCIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHRlc3RfZjUodGZtX2NtYWMpOworCWlmIChlcnIpIHsKKwkJQlRfRVJSKCJzbXBfZjUgdGVzdCBmYWlsZWQiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSB0ZXN0X2Y2KHRmbV9jbWFjKTsKKwlpZiAoZXJyKSB7CisJCUJUX0VSUigic21wX2Y2IHRlc3QgZmFpbGVkIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gdGVzdF9nMih0Zm1fY21hYyk7CisJaWYgKGVycikgeworCQlCVF9FUlIoInNtcF9nMiB0ZXN0IGZhaWxlZCIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHRlc3RfaDYodGZtX2NtYWMpOworCWlmIChlcnIpIHsKKwkJQlRfRVJSKCJzbXBfaDYgdGVzdCBmYWlsZWQiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR0aW1lID0ga3RpbWVfZ2V0KCk7CisJZGVsdGEgPSBrdGltZV9zdWIocmV0dGltZSwgY2FsbHRpbWUpOworCWR1cmF0aW9uID0gKHVuc2lnbmVkIGxvbmcgbG9uZykga3RpbWVfdG9fbnMoZGVsdGEpID4+IDEwOworCisJQlRfSU5GTygiU01QIHRlc3QgcGFzc2VkIGluICVsbHUgdXNlY3MiLCBkdXJhdGlvbik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IF9faW5pdCBidF9zZWxmdGVzdF9zbXAodm9pZCkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtX2FlczsKKwlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbV9jbWFjOworCWludCBlcnI7CisKKwl0Zm1fYWVzID0gY3J5cHRvX2FsbG9jX2Jsa2NpcGhlcigiZWNiKGFlcykiLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKHRmbV9hZXMpKSB7CisJCUJUX0VSUigiVW5hYmxlIHRvIGNyZWF0ZSBFQ0IgY3J5cHRvIGNvbnRleHQiKTsKKwkJcmV0dXJuIFBUUl9FUlIodGZtX2Flcyk7CisJfQorCisJdGZtX2NtYWMgPSBjcnlwdG9fYWxsb2NfaGFzaCgiY21hYyhhZXMpIiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUih0Zm1fY21hYykpIHsKKwkJQlRfRVJSKCJVbmFibGUgdG8gY3JlYXRlIENNQUMgY3J5cHRvIGNvbnRleHQiKTsKKwkJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKHRmbV9hZXMpOworCQlyZXR1cm4gUFRSX0VSUih0Zm1fY21hYyk7CisJfQorCisJZXJyID0gcnVuX3NlbGZ0ZXN0cyh0Zm1fYWVzLCB0Zm1fY21hYyk7CisKKwljcnlwdG9fZnJlZV9oYXNoKHRmbV9jbWFjKTsKKwljcnlwdG9fZnJlZV9ibGtjaXBoZXIodGZtX2Flcyk7CisKKwlyZXR1cm4gZXJyOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvc21wLmggYi9uZXQvYmx1ZXRvb3RoL3NtcC5oCmluZGV4IDMyOTZiZjQuLjYwYzViNzMgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvc21wLmgKKysrIGIvbmV0L2JsdWV0b290aC9zbXAuaApAQCAtMTkyLDQgKzE5MiwxNyBAQAogaW50IHNtcF9yZWdpc3RlcihzdHJ1Y3QgaGNpX2RldiAqaGRldik7CiB2b2lkIHNtcF91bnJlZ2lzdGVyKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKIAorI2lmIElTX0VOQUJMRUQoQ09ORklHX0JUX1NFTEZURVNUX1NNUCkKKworaW50IGJ0X3NlbGZ0ZXN0X3NtcCh2b2lkKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgYnRfc2VsZnRlc3Rfc21wKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCiAjZW5kaWYgLyogX19TTVBfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9ici5jIGIvbmV0L2JyaWRnZS9ici5jCmluZGV4IDQ0NDI1YWYuLmZiNTdhYjYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnIuYworKysgYi9uZXQvYnJpZGdlL2JyLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9sbGMuaD4KICNpbmNsdWRlIDxuZXQvbGxjLmg+CiAjaW5jbHVkZSA8bmV0L3N0cC5oPgorI2luY2x1ZGUgPG5ldC9zd2l0Y2hkZXYuaD4KIAogI2luY2x1ZGUgImJyX3ByaXZhdGUuaCIKIApAQCAtMTIwLDYgKzEyMSw0OCBAQAogCS5ub3RpZmllcl9jYWxsID0gYnJfZGV2aWNlX2V2ZW50CiB9OwogCitzdGF0aWMgaW50IGJyX25ldGRldl9zd2l0Y2hfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCisJCQkJICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9zd2l0Y2hfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwOworCXN0cnVjdCBuZXRfYnJpZGdlICpicjsKKwlzdHJ1Y3QgbmV0ZGV2X3N3aXRjaF9ub3RpZmllcl9mZGJfaW5mbyAqZmRiX2luZm87CisJaW50IGVyciA9IE5PVElGWV9ET05FOworCisJcnRubF9sb2NrKCk7CisJcCA9IGJyX3BvcnRfZ2V0X3J0bmwoZGV2KTsKKwlpZiAoIXApCisJCWdvdG8gb3V0OworCisJYnIgPSBwLT5icjsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIE5FVERFVl9TV0lUQ0hfRkRCX0FERDoKKwkJZmRiX2luZm8gPSBwdHI7CisJCWVyciA9IGJyX2ZkYl9leHRlcm5hbF9sZWFybl9hZGQoYnIsIHAsIGZkYl9pbmZvLT5hZGRyLAorCQkJCQkJZmRiX2luZm8tPnZpZCk7CisJCWlmIChlcnIpCisJCQllcnIgPSBub3RpZmllcl9mcm9tX2Vycm5vKGVycik7CisJCWJyZWFrOworCWNhc2UgTkVUREVWX1NXSVRDSF9GREJfREVMOgorCQlmZGJfaW5mbyA9IHB0cjsKKwkJZXJyID0gYnJfZmRiX2V4dGVybmFsX2xlYXJuX2RlbChiciwgcCwgZmRiX2luZm8tPmFkZHIsCisJCQkJCQlmZGJfaW5mby0+dmlkKTsKKwkJaWYgKGVycikKKwkJCWVyciA9IG5vdGlmaWVyX2Zyb21fZXJybm8oZXJyKTsKKwkJYnJlYWs7CisJfQorCitvdXQ6CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGJyX25ldGRldl9zd2l0Y2hfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBicl9uZXRkZXZfc3dpdGNoX2V2ZW50LAorfTsKKwogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicl9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTE2OSwxMCArMjEyLDE0IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0MzsKIAotCWVyciA9IGJyX25ldGxpbmtfaW5pdCgpOworCWVyciA9IHJlZ2lzdGVyX25ldGRldl9zd2l0Y2hfbm90aWZpZXIoJmJyX25ldGRldl9zd2l0Y2hfbm90aWZpZXIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dDQ7CiAKKwllcnIgPSBicl9uZXRsaW5rX2luaXQoKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXQ1OworCiAJYnJpb2N0bF9zZXQoYnJfaW9jdGxfZGV2aWNlbGVzc19zdHViKTsKIAogI2lmIElTX0VOQUJMRUQoQ09ORklHX0FUTV9MQU5FKQpAQCAtMTg1LDYgKzIzMiw4IEBACiAKIAlyZXR1cm4gMDsKIAorZXJyX291dDU6CisJdW5yZWdpc3Rlcl9uZXRkZXZfc3dpdGNoX25vdGlmaWVyKCZicl9uZXRkZXZfc3dpdGNoX25vdGlmaWVyKTsKIGVycl9vdXQ0OgogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZicl9kZXZpY2Vfbm90aWZpZXIpOwogZXJyX291dDM6CkBAIC0yMDIsNiArMjUxLDcgQEAKIHsKIAlzdHBfcHJvdG9fdW5yZWdpc3RlcigmYnJfc3RwX3Byb3RvKTsKIAlicl9uZXRsaW5rX2ZpbmkoKTsKKwl1bnJlZ2lzdGVyX25ldGRldl9zd2l0Y2hfbm90aWZpZXIoJmJyX25ldGRldl9zd2l0Y2hfbm90aWZpZXIpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZicl9kZXZpY2Vfbm90aWZpZXIpOwogCWJyaW9jdGxfc2V0KE5VTEwpOwogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmYnJfbmV0X29wcyk7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZkYi5jIGIvbmV0L2JyaWRnZS9icl9mZGIuYwppbmRleCBjYzM2ZTU5Li5lMDY3MGQ3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2ZkYi5jCisrKyBiL25ldC9icmlkZ2UvYnJfZmRiLmMKQEAgLTYzMyw3ICs2MzMsOCBAQAogCWlmIChmZGItPnZsYW5faWQgJiYgbmxhX3B1dChza2IsIE5EQV9WTEFOLCBzaXplb2YodTE2KSwgJmZkYi0+dmxhbl9pZCkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIAogbmxhX3B1dF9mYWlsdXJlOgogCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CkBAIC02ODYsNiArNjg3LDkgQEAKIAlpZiAoIShkZXYtPnByaXZfZmxhZ3MgJiBJRkZfRUJSSURHRSkpCiAJCWdvdG8gb3V0OwogCisJaWYgKCFmaWx0ZXJfZGV2KQorCQlpZHggPSBuZG9fZGZsdF9mZGJfZHVtcChza2IsIGNiLCBkZXYsIE5VTEwsIGlkeCk7CisKIAlmb3IgKGkgPSAwOyBpIDwgQlJfSEFTSF9TSVpFOyBpKyspIHsKIAkJc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmOwogCkBAIC02OTcsNyArNzAxLDcgQEAKIAkJCSAgICAoIWYtPmRzdCB8fCBmLT5kc3QtPmRldiAhPSBmaWx0ZXJfZGV2KSkgewogCQkJCWlmIChmaWx0ZXJfZGV2ICE9IGRldikKIAkJCQkJZ290byBza2lwOwotCQkJCS8qICFmLT5kc3QgaXMgYSBzcGVhY2lhbCBjYXNlIGZvciBicmlkZ2UKKwkJCQkvKiAhZi0+ZHN0IGlzIGEgc3BlY2lhbCBjYXNlIGZvciBicmlkZ2UKIAkJCQkgKiBJdCBtZWFucyB0aGUgTUFDIGJlbG9uZ3MgdG8gdGhlIGJyaWRnZQogCQkJCSAqIFRoZXJlZm9yZSBuZWVkIGEgbGl0dGxlIG1vcmUgZmlsdGVyaW5nCiAJCQkJICogd2Ugb25seSB3YW50IHRvIGR1bXAgdGhlICFmLT5kc3QgY2FzZQpAQCAtNzA1LDYgKzcwOSw4IEBACiAJCQkJaWYgKGYtPmRzdCkKIAkJCQkJZ290byBza2lwOwogCQkJfQorCQkJaWYgKCFmaWx0ZXJfZGV2ICYmIGYtPmRzdCkKKwkJCQlnb3RvIHNraXA7CiAKIAkJCWlmIChmZGJfZmlsbF9pbmZvKHNrYiwgYnIsIGYsCiAJCQkJCSAgTkVUTElOS19DQihjYi0+c2tiKS5wb3J0aWQsCkBAIC04NDAsMTAgKzg0Niw5IEBACiAJCS8qIFZJRCB3YXMgc3BlY2lmaWVkLCBzbyB1c2UgaXQuICovCiAJCWVyciA9IF9fYnJfZmRiX2FkZChuZG0sIHAsIGFkZHIsIG5saF9mbGFncywgdmlkKTsKIAl9IGVsc2UgewotCQlpZiAoIXB2IHx8IGJpdG1hcF9lbXB0eShwdi0+dmxhbl9iaXRtYXAsIFZMQU5fTl9WSUQpKSB7Ci0JCQllcnIgPSBfX2JyX2ZkYl9hZGQobmRtLCBwLCBhZGRyLCBubGhfZmxhZ3MsIDApOworCQllcnIgPSBfX2JyX2ZkYl9hZGQobmRtLCBwLCBhZGRyLCBubGhfZmxhZ3MsIDApOworCQlpZiAoZXJyIHx8ICFwdikKIAkJCWdvdG8gb3V0OwotCQl9CiAKIAkJLyogV2UgaGF2ZSB2bGFucyBjb25maWd1cmVkIG9uIHRoaXMgcG9ydCBhbmQgdXNlciBkaWRuJ3QKIAkJICogc3BlY2lmeSBhIFZMQU4uICBUbyBiZSBuaWNlLCBhZGQvdXBkYXRlIGVudHJ5IGZvciBldmVyeQpAQCAtOTExLDE2ICs5MTYsMTUgQEAKIAogCQllcnIgPSBfX2JyX2ZkYl9kZWxldGUocCwgYWRkciwgdmlkKTsKIAl9IGVsc2UgewotCQlpZiAoIXB2IHx8IGJpdG1hcF9lbXB0eShwdi0+dmxhbl9iaXRtYXAsIFZMQU5fTl9WSUQpKSB7Ci0JCQllcnIgPSBfX2JyX2ZkYl9kZWxldGUocCwgYWRkciwgMCk7CisJCWVyciA9IC1FTk9FTlQ7CisJCWVyciAmPSBfX2JyX2ZkYl9kZWxldGUocCwgYWRkciwgMCk7CisJCWlmICghcHYpCiAJCQlnb3RvIG91dDsKLQkJfQogCiAJCS8qIFdlIGhhdmUgdmxhbnMgY29uZmlndXJlZCBvbiB0aGlzIHBvcnQgYW5kIHVzZXIgZGlkbid0CiAJCSAqIHNwZWNpZnkgYSBWTEFOLiAgVG8gYmUgbmljZSwgYWRkL3VwZGF0ZSBlbnRyeSBmb3IgZXZlcnkKIAkJICogdmxhbiBvbiB0aGlzIHBvcnQuCiAJCSAqLwotCQllcnIgPSAtRU5PRU5UOwogCQlmb3JfZWFjaF9zZXRfYml0KHZpZCwgcHYtPnZsYW5fYml0bWFwLCBWTEFOX05fVklEKSB7CiAJCQllcnIgJj0gX19icl9mZGJfZGVsZXRlKHAsIGFkZHIsIHZpZCk7CiAJCX0KQEAgLTk4NSwyNiArOTg5LDE0IEBACiAJfQogfQogCi1pbnQgYnJfZmRiX2V4dGVybmFsX2xlYXJuX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAoraW50IGJyX2ZkYl9leHRlcm5hbF9sZWFybl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAogCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZCkKIHsKLQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwOwotCXN0cnVjdCBuZXRfYnJpZGdlICpicjsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmZkYjsKIAlpbnQgZXJyID0gMDsKIAotCXJ0bmxfbG9jaygpOwotCi0JcCA9IGJyX3BvcnRfZ2V0X3J0bmwoZGV2KTsKLQlpZiAoIXApIHsKLQkJcHJfaW5mbygiYnJpZGdlOiAlcyBub3QgYSBicmlkZ2UgcG9ydFxuIiwgZGV2LT5uYW1lKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBlcnJfcnRubF91bmxvY2s7Ci0JfQotCi0JYnIgPSBwLT5icjsKLQorCUFTU0VSVF9SVE5MKCk7CiAJc3Bpbl9sb2NrX2JoKCZici0+aGFzaF9sb2NrKTsKIAogCWhlYWQgPSAmYnItPmhhc2hbYnJfbWFjX2hhc2goYWRkciwgdmlkKV07CkBAIC0xMDI5LDMzICsxMDIxLDE4IEBACiAKIGVycl91bmxvY2s6CiAJc3Bpbl91bmxvY2tfYmgoJmJyLT5oYXNoX2xvY2spOwotZXJyX3J0bmxfdW5sb2NrOgotCXJ0bmxfdW5sb2NrKCk7CiAKIAlyZXR1cm4gZXJyOwogfQotRVhQT1JUX1NZTUJPTChicl9mZGJfZXh0ZXJuYWxfbGVhcm5fYWRkKTsKIAotaW50IGJyX2ZkYl9leHRlcm5hbF9sZWFybl9kZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKK2ludCBicl9mZGJfZXh0ZXJuYWxfbGVhcm5fZGVsKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKIAkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsIHUxNiB2aWQpCiB7Ci0Jc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDsKLQlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnI7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAJc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGI7CiAJaW50IGVyciA9IDA7CiAKLQlydG5sX2xvY2soKTsKLQotCXAgPSBicl9wb3J0X2dldF9ydG5sKGRldik7Ci0JaWYgKCFwKSB7Ci0JCXByX2luZm8oImJyaWRnZTogJXMgbm90IGEgYnJpZGdlIHBvcnRcbiIsIGRldi0+bmFtZSk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX3J0bmxfdW5sb2NrOwotCX0KLQotCWJyID0gcC0+YnI7Ci0KKwlBU1NFUlRfUlROTCgpOwogCXNwaW5fbG9ja19iaCgmYnItPmhhc2hfbG9jayk7CiAKIAloZWFkID0gJmJyLT5oYXNoW2JyX21hY19oYXNoKGFkZHIsIHZpZCldOwpAQCAtMTA2Niw5ICsxMDQzLDYgQEAKIAkJZXJyID0gLUVOT0VOVDsKIAogCXNwaW5fdW5sb2NrX2JoKCZici0+aGFzaF9sb2NrKTsKLWVycl9ydG5sX3VubG9jazoKLQlydG5sX3VubG9jaygpOwogCiAJcmV0dXJuIGVycjsKIH0KLUVYUE9SVF9TWU1CT0woYnJfZmRiX2V4dGVybmFsX2xlYXJuX2RlbCk7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lmLmMgYi9uZXQvYnJpZGdlL2JyX2lmLmMKaW5kZXggZWQzMDdkYi4uYjA4N2QyNyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfaWYuYwpAQCAtNDI0LDYgKzQyNCw3IEBACiAJCWZlYXR1cmVzID0gbmV0ZGV2X2luY3JlbWVudF9mZWF0dXJlcyhmZWF0dXJlcywKIAkJCQkJCSAgICAgcC0+ZGV2LT5mZWF0dXJlcywgbWFzayk7CiAJfQorCWZlYXR1cmVzID0gbmV0ZGV2X2FkZF90c29fZmVhdHVyZXMoZmVhdHVyZXMsIG1hc2spOwogCiAJcmV0dXJuIGZlYXR1cmVzOwogfQpAQCAtNDM1LDEwICs0MzYsMTYgQEAKIAlpbnQgZXJyID0gMDsKIAlib29sIGNoYW5nZWRfYWRkcjsKIAotCS8qIERvbid0IGFsbG93IGJyaWRnaW5nIG5vbi1ldGhlcm5ldCBsaWtlIGRldmljZXMgKi8KKwkvKiBEb24ndCBhbGxvdyBicmlkZ2luZyBub24tZXRoZXJuZXQgbGlrZSBkZXZpY2VzLCBvciBEU0EtZW5hYmxlZAorCSAqIG1hc3RlciBuZXR3b3JrIGRldmljZXMgc2luY2UgdGhlIGJyaWRnZSBsYXllciByeF9oYW5kbGVyIHByZXZlbnRzCisJICogdGhlIERTQSBmYWtlIGV0aGVydHlwZSBoYW5kbGVyIHRvIGJlIGludm9rZWQsIHNvIHdlIGRvIG5vdCBzdHJpcCBvZmYKKwkgKiB0aGUgRFNBIHN3aXRjaCB0YWcgcHJvdG9jb2wgaGVhZGVyIGFuZCB0aGUgYnJpZGdlIGxheWVyIGp1c3QgcmV0dXJuCisJICogUlhfSEFORExFUl9DT05TVU1FRCwgc3RvcHBpbmcgUlggcHJvY2Vzc2luZyBmb3IgdGhlc2UgZnJhbWVzLgorCSAqLwogCWlmICgoZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSykgfHwKIAkgICAgZGV2LT50eXBlICE9IEFSUEhSRF9FVEhFUiB8fCBkZXYtPmFkZHJfbGVuICE9IEVUSF9BTEVOIHx8Ci0JICAgICFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKQorCSAgICAhaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSB8fAorCSAgICBuZXRkZXZfdXNlc19kc2EoZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBObyBicmlkZ2luZyBvZiBicmlkZ2VzICovCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX21kYi5jIGIvbmV0L2JyaWRnZS9icl9tZGIuYwppbmRleCA1ZGYwNTI2Li40MDk2MDg5IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX21kYi5jCisrKyBiL25ldC9icmlkZ2UvYnJfbWRiLmMKQEAgLTE5MCw3ICsxOTAsOCBAQAogCiAJbmxhX25lc3RfZW5kKHNrYiwgbmVzdDIpOwogCW5sYV9uZXN0X2VuZChza2IsIG5lc3QpOwotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiAKIGVuZDoKIAlubGFfbmVzdF9lbmQoc2tiLCBuZXN0KTsKQEAgLTI3Niw3ICsyNzcsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IGVycjsKIAotCWVyciA9IG5sbXNnX3BhcnNlKG5saCwgc2l6ZW9mKCpicG0pLCB0YiwgTURCQV9TRVRfRU5UUlksIE5VTEwpOworCWVyciA9IG5sbXNnX3BhcnNlKG5saCwgc2l6ZW9mKCpicG0pLCB0YiwgTURCQV9TRVRfRU5UUllfTUFYLCBOVUxMKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKaW5kZXggYzE5MGQyMi4uNjU3MjhlMCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYworKysgYi9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCkBAIC02NiwxNyArNjYsMTcgQEAKICNlbmRpZgogCiAjZGVmaW5lIElTX0lQKHNrYikgXAotCSghdmxhbl90eF90YWdfcHJlc2VudChza2IpICYmIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKQorCSghc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSAmJiBza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAogI2RlZmluZSBJU19JUFY2KHNrYikgXAotCSghdmxhbl90eF90YWdfcHJlc2VudChza2IpICYmIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCisJKCFza2Jfdmxhbl90YWdfcHJlc2VudChza2IpICYmIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCiAKICNkZWZpbmUgSVNfQVJQKHNrYikgXAotCSghdmxhbl90eF90YWdfcHJlc2VudChza2IpICYmIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQVJQKSkKKwkoIXNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgJiYgc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BUlApKQogCiBzdGF0aWMgaW5saW5lIF9fYmUxNiB2bGFuX3Byb3RvKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkKIAkJcmV0dXJuIHNrYi0+cHJvdG9jb2w7CiAJZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxUSkpCiAJCXJldHVybiB2bGFuX2V0aF9oZHIoc2tiKS0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90bzsKQEAgLTQzNiwxMSArNDM2LDExIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKnZsYW4sICpicjsKIAogCWJyID0gYnJpZGdlX3BhcmVudChkZXYpOwotCWlmIChicm5mX3Bhc3Nfdmxhbl9pbmRldiA9PSAwIHx8ICF2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCisJaWYgKGJybmZfcGFzc192bGFuX2luZGV2ID09IDAgfHwgIXNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpCiAJCXJldHVybiBicjsKIAogCXZsYW4gPSBfX3ZsYW5fZmluZF9kZXZfZGVlcF9yY3UoYnIsIHNrYi0+dmxhbl9wcm90bywKLQkJCQkgICAgdmxhbl90eF90YWdfZ2V0KHNrYikgJiBWTEFOX1ZJRF9NQVNLKTsKKwkJCQkgICAgc2tiX3ZsYW5fdGFnX2dldChza2IpICYgVkxBTl9WSURfTUFTSyk7CiAKIAlyZXR1cm4gdmxhbiA/IHZsYW4gOiBicjsKIH0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKaW5kZXggOWY1ZWI1NS4uNGZiY2VhMCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKKysrIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPG5ldC9zd2l0Y2hkZXYuaD4KICNpbmNsdWRlIDx1YXBpL2xpbnV4L2lmX2JyaWRnZS5oPgogCiAjaW5jbHVkZSAiYnJfcHJpdmF0ZS5oIgpAQCAtNjcsNiArNjgsMTIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYnJfZmlsbF9pZnZsYW5pbmZvX3JhbmdlKHN0cnVjdCBza19idWZmICpza2IsIHUxNiB2aWRfc3RhcnQsCisJCQkJICAgIHUxNiB2aWRfZW5kLCB1MTYgZmxhZ3MpCit7CisJc3RydWN0ICBicmlkZ2Vfdmxhbl9pbmZvIHZpbmZvOworCisJaWYgKCh2aWRfZW5kIC0gdmlkX3N0YXJ0KSA+IDApIHsKKwkJLyogYWRkIHJhbmdlIHRvIHNrYiAqLworCQl2aW5mby52aWQgPSB2aWRfc3RhcnQ7CisJCXZpbmZvLmZsYWdzID0gZmxhZ3MgfCBCUklER0VfVkxBTl9JTkZPX1JBTkdFX0JFR0lOOworCQlpZiAobmxhX3B1dChza2IsIElGTEFfQlJJREdFX1ZMQU5fSU5GTywKKwkJCSAgICBzaXplb2YodmluZm8pLCAmdmluZm8pKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwkJdmluZm8uZmxhZ3MgJj0gfkJSSURHRV9WTEFOX0lORk9fUkFOR0VfQkVHSU47CisKKwkJdmluZm8udmlkID0gdmlkX2VuZDsKKwkJdmluZm8uZmxhZ3MgPSBmbGFncyB8IEJSSURHRV9WTEFOX0lORk9fUkFOR0VfRU5EOworCQlpZiAobmxhX3B1dChza2IsIElGTEFfQlJJREdFX1ZMQU5fSU5GTywKKwkJCSAgICBzaXplb2YodmluZm8pLCAmdmluZm8pKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJfSBlbHNlIHsKKwkJdmluZm8udmlkID0gdmlkX3N0YXJ0OworCQl2aW5mby5mbGFncyA9IGZsYWdzOworCQlpZiAobmxhX3B1dChza2IsIElGTEFfQlJJREdFX1ZMQU5fSU5GTywKKwkJCSAgICBzaXplb2YodmluZm8pLCAmdmluZm8pKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJfQorCisJcmV0dXJuIDA7CisKK25sYV9wdXRfZmFpbHVyZToKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCitzdGF0aWMgaW50IGJyX2ZpbGxfaWZ2bGFuaW5mb19jb21wcmVzc2VkKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBjb25zdCBzdHJ1Y3QgbmV0X3BvcnRfdmxhbnMgKnB2KQoreworCXUxNiB2aWRfcmFuZ2Vfc3RhcnQgPSAwLCB2aWRfcmFuZ2VfZW5kID0gMDsKKwl1MTYgdmlkX3JhbmdlX2ZsYWdzID0gMDsKKwl1MTYgcHZpZCwgdmlkLCBmbGFnczsKKwlpbnQgZXJyID0gMDsKKworCS8qIFBhY2sgSUZMQV9CUklER0VfVkxBTl9JTkZPJ3MgZm9yIGV2ZXJ5IHZsYW4KKwkgKiBhbmQgbWFyayB2bGFuIGluZm8gd2l0aCBiZWdpbiBhbmQgZW5kIGZsYWdzCisJICogaWYgdmxhbmluZm8gcmVwcmVzZW50cyBhIHJhbmdlCisJICovCisJcHZpZCA9IGJyX2dldF9wdmlkKHB2KTsKKwlmb3JfZWFjaF9zZXRfYml0KHZpZCwgcHYtPnZsYW5fYml0bWFwLCBWTEFOX05fVklEKSB7CisJCWZsYWdzID0gMDsKKwkJaWYgKHZpZCA9PSBwdmlkKQorCQkJZmxhZ3MgfD0gQlJJREdFX1ZMQU5fSU5GT19QVklEOworCisJCWlmICh0ZXN0X2JpdCh2aWQsIHB2LT51bnRhZ2dlZF9iaXRtYXApKQorCQkJZmxhZ3MgfD0gQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDsKKworCQlpZiAodmlkX3JhbmdlX3N0YXJ0ID09IDApIHsKKwkJCWdvdG8gaW5pdHZhcnM7CisJCX0gZWxzZSBpZiAoKHZpZCAtIHZpZF9yYW5nZV9lbmQpID09IDEgJiYKKwkJCWZsYWdzID09IHZpZF9yYW5nZV9mbGFncykgeworCQkJdmlkX3JhbmdlX2VuZCA9IHZpZDsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgeworCQkJZXJyID0gYnJfZmlsbF9pZnZsYW5pbmZvX3JhbmdlKHNrYiwgdmlkX3JhbmdlX3N0YXJ0LAorCQkJCQkJICAgICAgIHZpZF9yYW5nZV9lbmQsCisJCQkJCQkgICAgICAgdmlkX3JhbmdlX2ZsYWdzKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCitpbml0dmFyczoKKwkJdmlkX3JhbmdlX3N0YXJ0ID0gdmlkOworCQl2aWRfcmFuZ2VfZW5kID0gdmlkOworCQl2aWRfcmFuZ2VfZmxhZ3MgPSBmbGFnczsKKwl9CisKKwlpZiAodmlkX3JhbmdlX3N0YXJ0ICE9IDApIHsKKwkJLyogQ2FsbCBpdCBvbmNlIG1vcmUgdG8gc2VuZCBhbnkgbGVmdCBvdmVyIHZsYW5zICovCisJCWVyciA9IGJyX2ZpbGxfaWZ2bGFuaW5mb19yYW5nZShza2IsIHZpZF9yYW5nZV9zdGFydCwKKwkJCQkJICAgICAgIHZpZF9yYW5nZV9lbmQsCisJCQkJCSAgICAgICB2aWRfcmFuZ2VfZmxhZ3MpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBicl9maWxsX2lmdmxhbmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfcG9ydF92bGFucyAqcHYpCit7CisJc3RydWN0IGJyaWRnZV92bGFuX2luZm8gdmluZm87CisJdTE2IHB2aWQsIHZpZDsKKworCXB2aWQgPSBicl9nZXRfcHZpZChwdik7CisJZm9yX2VhY2hfc2V0X2JpdCh2aWQsIHB2LT52bGFuX2JpdG1hcCwgVkxBTl9OX1ZJRCkgeworCQl2aW5mby52aWQgPSB2aWQ7CisJCXZpbmZvLmZsYWdzID0gMDsKKwkJaWYgKHZpZCA9PSBwdmlkKQorCQkJdmluZm8uZmxhZ3MgfD0gQlJJREdFX1ZMQU5fSU5GT19QVklEOworCisJCWlmICh0ZXN0X2JpdCh2aWQsIHB2LT51bnRhZ2dlZF9iaXRtYXApKQorCQkJdmluZm8uZmxhZ3MgfD0gQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDsKKworCQlpZiAobmxhX3B1dChza2IsIElGTEFfQlJJREdFX1ZMQU5fSU5GTywKKwkJCSAgICBzaXplb2YodmluZm8pLCAmdmluZm8pKQorCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJfQorCisJcmV0dXJuIDA7CisKK25sYV9wdXRfZmFpbHVyZToKKwlyZXR1cm4gLUVNU0dTSVpFOworfQorCiAvKgogICogQ3JlYXRlIG9uZSBuZXRsaW5rIG1lc3NhZ2UgZm9yIG9uZSBpbnRlcmZhY2UKICAqIENvbnRhaW5zIHBvcnQgYW5kIG1hc3RlciBpbmZvIGFzIHdlbGwgYXMgY2FycmllciBhbmQgYnJpZGdlIHN0YXRlLgpAQCAtMTIxLDEyICsyMzYsMTEgQEAKIAl9CiAKIAkvKiBDaGVjayBpZiAgdGhlIFZJRCBpbmZvcm1hdGlvbiBpcyByZXF1ZXN0ZWQgKi8KLQlpZiAoZmlsdGVyX21hc2sgJiBSVEVYVF9GSUxURVJfQlJWTEFOKSB7Ci0JCXN0cnVjdCBubGF0dHIgKmFmOworCWlmICgoZmlsdGVyX21hc2sgJiBSVEVYVF9GSUxURVJfQlJWTEFOKSB8fAorCSAgICAoZmlsdGVyX21hc2sgJiBSVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQpKSB7CiAJCWNvbnN0IHN0cnVjdCBuZXRfcG9ydF92bGFucyAqcHY7Ci0JCXN0cnVjdCBicmlkZ2Vfdmxhbl9pbmZvIHZpbmZvOwotCQl1MTYgdmlkOwotCQl1MTYgcHZpZDsKKwkJc3RydWN0IG5sYXR0ciAqYWY7CisJCWludCBlcnI7CiAKIAkJaWYgKHBvcnQpCiAJCQlwdiA9IG5icF9nZXRfdmxhbl9pbmZvKHBvcnQpOwpAQCAtMTQwLDI2ICsyNTQsMTggQEAKIAkJaWYgKCFhZikKIAkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JCXB2aWQgPSBicl9nZXRfcHZpZChwdik7Ci0JCWZvcl9lYWNoX3NldF9iaXQodmlkLCBwdi0+dmxhbl9iaXRtYXAsIFZMQU5fTl9WSUQpIHsKLQkJCXZpbmZvLnZpZCA9IHZpZDsKLQkJCXZpbmZvLmZsYWdzID0gMDsKLQkJCWlmICh2aWQgPT0gcHZpZCkKLQkJCQl2aW5mby5mbGFncyB8PSBCUklER0VfVkxBTl9JTkZPX1BWSUQ7Ci0KLQkJCWlmICh0ZXN0X2JpdCh2aWQsIHB2LT51bnRhZ2dlZF9iaXRtYXApKQotCQkJCXZpbmZvLmZsYWdzIHw9IEJSSURHRV9WTEFOX0lORk9fVU5UQUdHRUQ7Ci0KLQkJCWlmIChubGFfcHV0KHNrYiwgSUZMQV9CUklER0VfVkxBTl9JTkZPLAotCQkJCSAgICBzaXplb2YodmluZm8pLCAmdmluZm8pKQotCQkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCQl9Ci0KKwkJaWYgKGZpbHRlcl9tYXNrICYgUlRFWFRfRklMVEVSX0JSVkxBTl9DT01QUkVTU0VEKQorCQkJZXJyID0gYnJfZmlsbF9pZnZsYW5pbmZvX2NvbXByZXNzZWQoc2tiLCBwdik7CisJCWVsc2UKKwkJCWVyciA9IGJyX2ZpbGxfaWZ2bGFuaW5mbyhza2IsIHB2KTsKKwkJaWYgKGVycikKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCQlubGFfbmVzdF9lbmQoc2tiLCBhZik7CiAJfQogCiBkb25lOgotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiAKIG5sYV9wdXRfZmFpbHVyZToKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwpAQCAtMjA2LDY5ICszMTIsOTkgQEAKIGludCBicl9nZXRsaW5rKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsCiAJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBmaWx0ZXJfbWFzaykKIHsKLQlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gYnJfcG9ydF9nZXRfcnRubChkZXYpOwogCi0JaWYgKCFwb3J0ICYmICEoZmlsdGVyX21hc2sgJiBSVEVYVF9GSUxURVJfQlJWTEFOKSkKLQkJZ290byBvdXQ7CisJaWYgKCFwb3J0ICYmICEoZmlsdGVyX21hc2sgJiBSVEVYVF9GSUxURVJfQlJWTEFOKSAmJgorCSAgICAhKGZpbHRlcl9tYXNrICYgUlRFWFRfRklMVEVSX0JSVkxBTl9DT01QUkVTU0VEKSkKKwkJcmV0dXJuIDA7CiAKLQllcnIgPSBicl9maWxsX2lmaW5mbyhza2IsIHBvcnQsIHBpZCwgc2VxLCBSVE1fTkVXTElOSywgTkxNX0ZfTVVMVEksCi0JCQkgICAgIGZpbHRlcl9tYXNrLCBkZXYpOwotb3V0OgotCXJldHVybiBlcnI7CisJcmV0dXJuIGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgcGlkLCBzZXEsIFJUTV9ORVdMSU5LLCBOTE1fRl9NVUxUSSwKKwkJCSAgICAgIGZpbHRlcl9tYXNrLCBkZXYpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaWZsYV9icl9wb2xpY3lbSUZMQV9NQVgrMV0gPSB7Ci0JW0lGTEFfQlJJREdFX0ZMQUdTXQk9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCi0JW0lGTEFfQlJJREdFX01PREVdCT0geyAudHlwZSA9IE5MQV9VMTYgfSwKLQlbSUZMQV9CUklER0VfVkxBTl9JTkZPXQk9IHsgLnR5cGUgPSBOTEFfQklOQVJZLAotCQkJCSAgICAubGVuID0gc2l6ZW9mKHN0cnVjdCBicmlkZ2Vfdmxhbl9pbmZvKSwgfSwKLX07CitzdGF0aWMgaW50IGJyX3ZsYW5faW5mbyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCisJCQlpbnQgY21kLCBzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyAqdmluZm8pCit7CisJaW50IGVyciA9IDA7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUlRNX1NFVExJTks6CisJCWlmIChwKSB7CisJCQllcnIgPSBuYnBfdmxhbl9hZGQocCwgdmluZm8tPnZpZCwgdmluZm8tPmZsYWdzKTsKKwkJCWlmIChlcnIpCisJCQkJYnJlYWs7CisKKwkJCWlmICh2aW5mby0+ZmxhZ3MgJiBCUklER0VfVkxBTl9JTkZPX01BU1RFUikKKwkJCQllcnIgPSBicl92bGFuX2FkZChwLT5iciwgdmluZm8tPnZpZCwKKwkJCQkJCSAgdmluZm8tPmZsYWdzKTsKKwkJfSBlbHNlIHsKKwkJCWVyciA9IGJyX3ZsYW5fYWRkKGJyLCB2aW5mby0+dmlkLCB2aW5mby0+ZmxhZ3MpOworCQl9CisJCWJyZWFrOworCisJY2FzZSBSVE1fREVMTElOSzoKKwkJaWYgKHApIHsKKwkJCW5icF92bGFuX2RlbGV0ZShwLCB2aW5mby0+dmlkKTsKKwkJCWlmICh2aW5mby0+ZmxhZ3MgJiBCUklER0VfVkxBTl9JTkZPX01BU1RFUikKKwkJCQlicl92bGFuX2RlbGV0ZShwLT5iciwgdmluZm8tPnZpZCk7CisJCX0gZWxzZSB7CisJCQlicl92bGFuX2RlbGV0ZShiciwgdmluZm8tPnZpZCk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KIAogc3RhdGljIGludCBicl9hZnNwZWMoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCQkgICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJCSAgICAgc3RydWN0IG5sYXR0ciAqYWZfc3BlYywKIAkJICAgICBpbnQgY21kKQogewotCXN0cnVjdCBubGF0dHIgKnRiW0lGTEFfQlJJREdFX01BWCsxXTsKKwlzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyAqdmluZm9fc3RhcnQgPSBOVUxMOworCXN0cnVjdCBicmlkZ2Vfdmxhbl9pbmZvICp2aW5mbyA9IE5VTEw7CisJc3RydWN0IG5sYXR0ciAqYXR0cjsKIAlpbnQgZXJyID0gMDsKKwlpbnQgcmVtOwogCi0JZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfTUFYLCBhZl9zcGVjLCBpZmxhX2JyX3BvbGljeSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmICh0YltJRkxBX0JSSURHRV9WTEFOX0lORk9dKSB7Ci0JCXN0cnVjdCBicmlkZ2Vfdmxhbl9pbmZvICp2aW5mbzsKLQotCQl2aW5mbyA9IG5sYV9kYXRhKHRiW0lGTEFfQlJJREdFX1ZMQU5fSU5GT10pOwotCi0JCWlmICghdmluZm8tPnZpZCB8fCB2aW5mby0+dmlkID49IFZMQU5fVklEX01BU0spCisJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBhZl9zcGVjLCByZW0pIHsKKwkJaWYgKG5sYV90eXBlKGF0dHIpICE9IElGTEFfQlJJREdFX1ZMQU5fSU5GTykKKwkJCWNvbnRpbnVlOworCQlpZiAobmxhX2xlbihhdHRyKSAhPSBzaXplb2Yoc3RydWN0IGJyaWRnZV92bGFuX2luZm8pKQogCQkJcmV0dXJuIC1FSU5WQUw7CisJCXZpbmZvID0gbmxhX2RhdGEoYXR0cik7CisJCWlmICh2aW5mby0+ZmxhZ3MgJiBCUklER0VfVkxBTl9JTkZPX1JBTkdFX0JFR0lOKSB7CisJCQlpZiAodmluZm9fc3RhcnQpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl2aW5mb19zdGFydCA9IHZpbmZvOworCQkJY29udGludWU7CisJCX0KIAotCQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFJUTV9TRVRMSU5LOgotCQkJaWYgKHApIHsKLQkJCQllcnIgPSBuYnBfdmxhbl9hZGQocCwgdmluZm8tPnZpZCwgdmluZm8tPmZsYWdzKTsKKwkJaWYgKHZpbmZvX3N0YXJ0KSB7CisJCQlzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyB0bXBfdmluZm87CisJCQlpbnQgdjsKKworCQkJaWYgKCEodmluZm8tPmZsYWdzICYgQlJJREdFX1ZMQU5fSU5GT19SQU5HRV9FTkQpKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlpZiAodmluZm8tPnZpZCA8PSB2aW5mb19zdGFydC0+dmlkKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQltZW1jcHkoJnRtcF92aW5mbywgdmluZm9fc3RhcnQsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBicmlkZ2Vfdmxhbl9pbmZvKSk7CisKKwkJCWZvciAodiA9IHZpbmZvX3N0YXJ0LT52aWQ7IHYgPD0gdmluZm8tPnZpZDsgdisrKSB7CisJCQkJdG1wX3ZpbmZvLnZpZCA9IHY7CisJCQkJZXJyID0gYnJfdmxhbl9pbmZvKGJyLCBwLCBjbWQsICZ0bXBfdmluZm8pOwogCQkJCWlmIChlcnIpCiAJCQkJCWJyZWFrOwotCi0JCQkJaWYgKHZpbmZvLT5mbGFncyAmIEJSSURHRV9WTEFOX0lORk9fTUFTVEVSKQotCQkJCQllcnIgPSBicl92bGFuX2FkZChwLT5iciwgdmluZm8tPnZpZCwKLQkJCQkJCQkgIHZpbmZvLT5mbGFncyk7Ci0JCQl9IGVsc2UKLQkJCQllcnIgPSBicl92bGFuX2FkZChiciwgdmluZm8tPnZpZCwgdmluZm8tPmZsYWdzKTsKLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBSVE1fREVMTElOSzoKLQkJCWlmIChwKSB7Ci0JCQkJbmJwX3ZsYW5fZGVsZXRlKHAsIHZpbmZvLT52aWQpOwotCQkJCWlmICh2aW5mby0+ZmxhZ3MgJiBCUklER0VfVkxBTl9JTkZPX01BU1RFUikKLQkJCQkJYnJfdmxhbl9kZWxldGUocC0+YnIsIHZpbmZvLT52aWQpOwotCQkJfSBlbHNlCi0JCQkJYnJfdmxhbl9kZWxldGUoYnIsIHZpbmZvLT52aWQpOwotCQkJYnJlYWs7CisJCQl9CisJCQl2aW5mb19zdGFydCA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQllcnIgPSBicl92bGFuX2luZm8oYnIsIHAsIGNtZCwgdmluZm8pOwogCQl9CisJCWlmIChlcnIpCisJCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMzU5LDEzICs0OTUsMTMgQEAKIH0KIAogLyogQ2hhbmdlIHN0YXRlIGFuZCBwYXJhbWV0ZXJzIG9uIHBvcnQuICovCi1pbnQgYnJfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKK2ludCBicl9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB1MTYgZmxhZ3MpCiB7CiAJc3RydWN0IG5sYXR0ciAqcHJvdGluZm87CiAJc3RydWN0IG5sYXR0ciAqYWZzcGVjOwogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnA7CiAJc3RydWN0IG5sYXR0ciAqdGJbSUZMQV9CUlBPUlRfTUFYICsgMV07Ci0JaW50IGVyciA9IDA7CisJaW50IGVyciA9IDAsIHJldF9vZmZsb2FkID0gMDsKIAogCXByb3RpbmZvID0gbmxtc2dfZmluZF9hdHRyKG5saCwgc2l6ZW9mKHN0cnVjdCBpZmluZm9tc2cpLCBJRkxBX1BST1RJTkZPKTsKIAlhZnNwZWMgPSBubG1zZ19maW5kX2F0dHIobmxoLCBzaXplb2Yoc3RydWN0IGlmaW5mb21zZyksIElGTEFfQUZfU1BFQyk7CkBAIC00MDcsMTkgKzU0MywyOCBAQAogCQkJCWFmc3BlYywgUlRNX1NFVExJTkspOwogCX0KIAorCWlmIChwICYmICEoZmxhZ3MgJiBCUklER0VfRkxBR1NfU0VMRikpIHsKKwkJLyogc2V0IGJyaWRnZSBhdHRyaWJ1dGVzIGluIGhhcmR3YXJlIGlmIHN1cHBvcnRlZAorCQkgKi8KKwkJcmV0X29mZmxvYWQgPSBuZXRkZXZfc3dpdGNoX3BvcnRfYnJpZGdlX3NldGxpbmsoZGV2LCBubGgsCisJCQkJCQkJCWZsYWdzKTsKKwkJaWYgKHJldF9vZmZsb2FkICYmIHJldF9vZmZsb2FkICE9IC1FT1BOT1RTVVBQKQorCQkJYnJfd2FybihwLT5iciwgImVycm9yIHNldHRpbmcgYXR0cnMgb24gcG9ydCAldSglcylcbiIsCisJCQkJKHVuc2lnbmVkIGludClwLT5wb3J0X25vLCBwLT5kZXYtPm5hbWUpOworCX0KKwogCWlmIChlcnIgPT0gMCkKIAkJYnJfaWZpbmZvX25vdGlmeShSVE1fTkVXTElOSywgcCk7Ci0KIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCiAvKiBEZWxldGUgcG9ydCBpbmZvcm1hdGlvbiAqLwotaW50IGJyX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubGgpCitpbnQgYnJfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdTE2IGZsYWdzKQogewogCXN0cnVjdCBubGF0dHIgKmFmc3BlYzsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwOwotCWludCBlcnI7CisJaW50IGVyciA9IDAsIHJldF9vZmZsb2FkID0gMDsKIAogCWFmc3BlYyA9IG5sbXNnX2ZpbmRfYXR0cihubGgsIHNpemVvZihzdHJ1Y3QgaWZpbmZvbXNnKSwgSUZMQV9BRl9TUEVDKTsKIAlpZiAoIWFmc3BlYykKQEAgLTQzMiw2ICs1NzcsMjEgQEAKIAogCWVyciA9IGJyX2Fmc3BlYygoc3RydWN0IG5ldF9icmlkZ2UgKiluZXRkZXZfcHJpdihkZXYpLCBwLAogCQkJYWZzcGVjLCBSVE1fREVMTElOSyk7CisJaWYgKGVyciA9PSAwKQorCQkvKiBTZW5kIFJUTV9ORVdMSU5LIGJlY2F1c2UgdXNlcnNwYWNlCisJCSAqIGV4cGVjdHMgUlRNX05FV0xJTksgZm9yIHZsYW4gZGVscworCQkgKi8KKwkJYnJfaWZpbmZvX25vdGlmeShSVE1fTkVXTElOSywgcCk7CisKKwlpZiAocCAmJiAhKGZsYWdzICYgQlJJREdFX0ZMQUdTX1NFTEYpKSB7CisJCS8qIGRlbCBicmlkZ2UgYXR0cmlidXRlcyBpbiBoYXJkd2FyZQorCQkgKi8KKwkJcmV0X29mZmxvYWQgPSBuZXRkZXZfc3dpdGNoX3BvcnRfYnJpZGdlX2RlbGxpbmsoZGV2LCBubGgsCisJCQkJCQkJCWZsYWdzKTsKKwkJaWYgKHJldF9vZmZsb2FkICYmIHJldF9vZmZsb2FkICE9IC1FT1BOT1RTVVBQKQorCQkJYnJfd2FybihwLT5iciwgImVycm9yIGRlbGV0aW5nIGF0dHJzIG9uIHBvcnQgJXUgKCVzKVxuIiwKKwkJCQkodW5zaWduZWQgaW50KXAtPnBvcnRfbm8sIHAtPmRldi0+bmFtZSk7CisJfQogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTU2MSw3ICs3MjEsNyBAQAogCXJldHVybiBwdi0+bnVtX3ZsYW5zICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBicmlkZ2Vfdmxhbl9pbmZvKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnRubF9hZl9vcHMgYnJfYWZfb3BzID0geworc3RhdGljIHN0cnVjdCBydG5sX2FmX29wcyBicl9hZl9vcHMgX19yZWFkX21vc3RseSA9IHsKIAkuZmFtaWx5CQkJPSBBRl9CUklER0UsCiAJLmdldF9saW5rX2FmX3NpemUJPSBicl9nZXRfbGlua19hZl9zaXplLAogfTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggYWVhM2QxMy4uZGUwOTE5OSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKQEAgLTQwMiw2ICs0MDIsMTAgQEAKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKmZkZXYsIGludCBpZHgpOwogaW50IGJyX2ZkYl9zeW5jX3N0YXRpYyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApOwogdm9pZCBicl9mZGJfdW5zeW5jX3N0YXRpYyhzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApOworaW50IGJyX2ZkYl9leHRlcm5hbF9sZWFybl9hZGQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAorCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRkciwgdTE2IHZpZCk7CitpbnQgYnJfZmRiX2V4dGVybmFsX2xlYXJuX2RlbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyLCB1MTYgdmlkKTsKIAogLyogYnJfZm9yd2FyZC5jICovCiB2b2lkIGJyX2RlbGl2ZXIoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqdG8sIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtNjI4LDggKzYzMiw4IEBACiB7CiAJaW50IGVyciA9IDA7CiAKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKQotCQkqdmlkID0gdmxhbl90eF90YWdfZ2V0KHNrYikgJiBWTEFOX1ZJRF9NQVNLOworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKQorCQkqdmlkID0gc2tiX3ZsYW5fdGFnX2dldChza2IpICYgVkxBTl9WSURfTUFTSzsKIAllbHNlIHsKIAkJKnZpZCA9IDA7CiAJCWVyciA9IC1FSU5WQUw7CkBAIC04MTUsOCArODE5LDggQEAKIGludCBicl9uZXRsaW5rX2luaXQodm9pZCk7CiB2b2lkIGJyX25ldGxpbmtfZmluaSh2b2lkKTsKIHZvaWQgYnJfaWZpbmZvX25vdGlmeShpbnQgZXZlbnQsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpOwotaW50IGJyX3NldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sbXNnaGRyICpubG1zZyk7Ci1pbnQgYnJfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnKTsKK2ludCBicl9zZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubG1zZ2hkciAqbmxtc2csIHUxNiBmbGFncyk7CitpbnQgYnJfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnLCB1MTYgZmxhZ3MpOwogaW50IGJyX2dldGxpbmsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkgICAgICAgdTMyIGZpbHRlcl9tYXNrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uYwppbmRleCA5N2I4ZGRmLi4xMzAxM2ZlIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uYworKysgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJICogc2VudCBmcm9tIHZsYW4gZGV2aWNlIG9uIHRoZSBicmlkZ2UgZGV2aWNlLCBpdCBkb2VzIG5vdCBoYXZlCiAJICogSFcgYWNjZWxlcmF0ZWQgdmxhbiB0YWcuCiAJICovCi0JaWYgKHVubGlrZWx5KCF2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikgJiYKKwlpZiAodW5saWtlbHkoIXNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgJiYKIAkJICAgICBza2ItPnByb3RvY29sID09IHByb3RvKSkgewogCQlza2IgPSBza2Jfdmxhbl91bnRhZyhza2IpOwogCQlpZiAodW5saWtlbHkoIXNrYikpCkBAIC0yMDAsNyArMjAwLDcgQEAKIAkJCS8qIFByb3RvY29sLW1pc21hdGNoLCBlbXB0eSBvdXQgdmxhbl90Y2kgZm9yIG5ldyB0YWcgKi8KIAkJCXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOwogCQkJc2tiID0gdmxhbl9pbnNlcnRfdGFnX3NldF9wcm90byhza2IsIHNrYi0+dmxhbl9wcm90bywKLQkJCQkJCQl2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CisJCQkJCQkJc2tiX3ZsYW5fdGFnX2dldChza2IpKTsKIAkJCWlmICh1bmxpa2VseSghc2tiKSkKIAkJCQlyZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF92bGFuLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdmxhbi5jCmluZGV4IDhkM2Y4YzcuLjYxODU2ODggMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF92bGFuLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3ZsYW4uYwpAQCAtNDUsOCArNDUsOCBAQAogCS8qIFZMQU4gZW5jYXBzdWxhdGVkIFR5cGUvTGVuZ3RoIGZpZWxkLCBnaXZlbiBmcm9tIG9yaWcgZnJhbWUgKi8KIAlfX2JlMTYgZW5jYXA7CiAKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7Ci0JCVRDSSA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CisJCVRDSSA9IHNrYl92bGFuX3RhZ19nZXQoc2tiKTsKIAkJZW5jYXAgPSBza2ItPnByb3RvY29sOwogCX0gZWxzZSB7CiAJCWNvbnN0IHN0cnVjdCB2bGFuX2hkciAqZnA7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwppbmRleCBkOWE4YzA1Li45MTE4MGE3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCV9fYmUxNiBldGhwcm90bzsKIAlpbnQgdmVyZGljdCwgaTsKIAotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpCiAJCWV0aHByb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpOwogCWVsc2UKIAkJZXRocHJvdG8gPSBoLT5oX3Byb3RvOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9icmlkZ2UuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL25mdF9yZWplY3RfYnJpZGdlLmMKaW5kZXggYjAzMzBhZS4uMzI0NGFlYSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvbmZ0X3JlamVjdF9icmlkZ2UuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9uZnRfcmVqZWN0X2JyaWRnZS5jCkBAIC0yNjUsMjIgKzI2NSwxMiBAQAogCWRhdGFbTkZUX1JFR19WRVJESUNUXS52ZXJkaWN0ID0gTkZfRFJPUDsKIH0KIAotc3RhdGljIGludCBuZnRfcmVqZWN0X2JyaWRnZV92YWxpZGF0ZV9ob29rcyhjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbikKK3N0YXRpYyBpbnQgbmZ0X3JlamVjdF9icmlkZ2VfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IG5mdF9kYXRhICoqZGF0YSkKIHsKLQlzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbjsKLQotCWlmIChjaGFpbi0+ZmxhZ3MgJiBORlRfQkFTRV9DSEFJTikgewotCQliYXNlY2hhaW4gPSBuZnRfYmFzZV9jaGFpbihjaGFpbik7Ci0KLQkJc3dpdGNoIChiYXNlY2hhaW4tPm9wc1swXS5ob29rbnVtKSB7Ci0JCWNhc2UgTkZfQlJfUFJFX1JPVVRJTkc6Ci0JCWNhc2UgTkZfQlJfTE9DQUxfSU46Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJfQotCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gbmZ0X2NoYWluX3ZhbGlkYXRlX2hvb2tzKGN0eC0+Y2hhaW4sICgxIDw8IE5GX0JSX1BSRV9ST1VUSU5HKSB8CisJCQkJCQkgICAgKDEgPDwgTkZfQlJfTE9DQUxfSU4pKTsKIH0KIAogc3RhdGljIGludCBuZnRfcmVqZWN0X2JyaWRnZV9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCkBAIC0yOTAsNyArMjgwLDcgQEAKIAlzdHJ1Y3QgbmZ0X3JlamVjdCAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7CiAJaW50IGljbXBfY29kZSwgZXJyOwogCi0JZXJyID0gbmZ0X3JlamVjdF9icmlkZ2VfdmFsaWRhdGVfaG9va3MoY3R4LT5jaGFpbik7CisJZXJyID0gbmZ0X3JlamVjdF9icmlkZ2VfdmFsaWRhdGUoY3R4LCBleHByLCBOVUxMKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMzQxLDEzICszMzEsNiBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBuZnRfcmVqZWN0X2JyaWRnZV92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwKLQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2RhdGEgKipkYXRhKQotewotCXJldHVybiBuZnRfcmVqZWN0X2JyaWRnZV92YWxpZGF0ZV9ob29rcyhjdHgtPmNoYWluKTsKLX0KLQogc3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9yZWplY3RfYnJpZGdlX3R5cGU7CiBzdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcmVqZWN0X2JyaWRnZV9vcHMgPSB7CiAJLnR5cGUJCT0gJm5mdF9yZWplY3RfYnJpZGdlX3R5cGUsCmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jaG5sX25ldC5jIGIvbmV0L2NhaWYvY2hubF9uZXQuYwppbmRleCA0NTg5ZmY2Ny4uNjdhNGEzNiAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2hubF9uZXQuYworKysgYi9uZXQvY2FpZi9jaG5sX25ldC5jCkBAIC00NzAsNyArNDcwLDYgQEAKIAlBU1NFUlRfUlROTCgpOwogCWNhaWZkZXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCWNhaWZfbmV0bGlua19wYXJtcyhkYXRhLCAmY2FpZmRldi0+Y29ubl9yZXEpOwotCWRldl9uZXRfc2V0KGNhaWZkZXYtPm5ldGRldiwgc3JjX25ldCk7CiAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9ndy5jIGIvbmV0L2Nhbi9ndy5jCmluZGV4IDI5NWY2MmUuLmE2ZjQ0OGUgMTAwNjQ0Ci0tLSBhL25ldC9jYW4vZ3cuYworKysgYi9uZXQvY2FuL2d3LmMKQEAgLTU3NSw3ICs1NzUsOCBAQAogCQkJZ290byBjYW5jZWw7CiAJfQogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIAogY2FuY2VsOgogCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CmRpZmYgLS1naXQgYS9uZXQvY2VwaC9wYWdldmVjLmMgYi9uZXQvY2VwaC9wYWdldmVjLmMKaW5kZXggNTU1MDEzMC4uMDk2ZDkxNCAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvcGFnZXZlYy5jCisrKyBiL25ldC9jZXBoL3BhZ2V2ZWMuYwpAQCAtMjMsMTcgKzIzLDE1IEBACiAJaWYgKCFwYWdlcykKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJd2hpbGUgKGdvdCA8IG51bV9wYWdlcykgewotCQlyYyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLAorCQlyYyA9IGdldF91c2VyX3BhZ2VzX3VubG9ja2VkKGN1cnJlbnQsIGN1cnJlbnQtPm1tLAogCQkgICAgKHVuc2lnbmVkIGxvbmcpZGF0YSArICgodW5zaWduZWQgbG9uZylnb3QgKiBQQUdFX1NJWkUpLAotCQkgICAgbnVtX3BhZ2VzIC0gZ290LCB3cml0ZV9wYWdlLCAwLCBwYWdlcyArIGdvdCwgTlVMTCk7CisJCSAgICBudW1fcGFnZXMgLSBnb3QsIHdyaXRlX3BhZ2UsIDAsIHBhZ2VzICsgZ290KTsKIAkJaWYgKHJjIDwgMCkKIAkJCWJyZWFrOwogCQlCVUdfT04ocmMgPT0gMCk7CiAJCWdvdCArPSByYzsKIAl9Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlpZiAocmMgPCAwKQogCQlnb3RvIGZhaWw7CiAJcmV0dXJuIHBhZ2VzOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZQppbmRleCAyMzVlNmM1Li5mZWMwODU2IDEwMDY0NAotLS0gYS9uZXQvY29yZS9NYWtlZmlsZQorKysgYi9uZXQvY29yZS9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBMaW51eCBuZXR3b3JraW5nIGNvcmUuCiAjCiAKLW9iai15IDo9IHNvY2subyByZXF1ZXN0X3NvY2subyBza2J1ZmYubyBpb3ZlYy5vIGRhdGFncmFtLm8gc3RyZWFtLm8gc2NtLm8gXAorb2JqLXkgOj0gc29jay5vIHJlcXVlc3Rfc29jay5vIHNrYnVmZi5vIGRhdGFncmFtLm8gc3RyZWFtLm8gc2NtLm8gXAogCSBnZW5fc3RhdHMubyBnZW5fZXN0aW1hdG9yLm8gbmV0X25hbWVzcGFjZS5vIHNlY3VyZV9zZXEubyBmbG93X2Rpc3NlY3Rvci5vCiAKIG9iai0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9uZXRfY29yZS5vCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jCmluZGV4IDE3MTQyMGUuLmQwMzA1NzUgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldi5jCisrKyBiL25ldC9jb3JlL2Rldi5jCkBAIC0zNzEsOSArMzcxLDEwIEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2hlYWQgKnB0eXBlX2hlYWQoY29uc3Qgc3RydWN0IHBhY2tldF90eXBlICpwdCkKIHsKIAlpZiAocHQtPnR5cGUgPT0gaHRvbnMoRVRIX1BfQUxMKSkKLQkJcmV0dXJuICZwdHlwZV9hbGw7CisJCXJldHVybiBwdC0+ZGV2ID8gJnB0LT5kZXYtPnB0eXBlX2FsbCA6ICZwdHlwZV9hbGw7CiAJZWxzZQotCQlyZXR1cm4gJnB0eXBlX2Jhc2VbbnRvaHMocHQtPnR5cGUpICYgUFRZUEVfSEFTSF9NQVNLXTsKKwkJcmV0dXJuIHB0LT5kZXYgPyAmcHQtPmRldi0+cHR5cGVfc3BlY2lmaWMgOgorCQkJCSAmcHR5cGVfYmFzZVtudG9ocyhwdC0+dHlwZSkgJiBQVFlQRV9IQVNIX01BU0tdOwogfQogCiAvKioKQEAgLTE3MzQsNiArMTczNSwyMyBAQAogCXJldHVybiBwdF9wcmV2LT5mdW5jKHNrYiwgc2tiLT5kZXYsIHB0X3ByZXYsIG9yaWdfZGV2KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGRlbGl2ZXJfcHR5cGVfbGlzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICBzdHJ1Y3QgcGFja2V0X3R5cGUgKipwdCwKKwkJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgdHlwZSwKKwkJCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpwdHlwZV9saXN0KQoreworCXN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsICpwdF9wcmV2ID0gKnB0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHR5cGUsIHB0eXBlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHB0eXBlLT50eXBlICE9IHR5cGUpCisJCQljb250aW51ZTsKKwkJaWYgKHB0X3ByZXYpCisJCQlkZWxpdmVyX3NrYihza2IsIHB0X3ByZXYsIGRldik7CisJCXB0X3ByZXYgPSBwdHlwZTsKKwl9CisJKnB0ID0gcHRfcHJldjsKK30KKwogc3RhdGljIGlubGluZSBib29sIHNrYl9sb29wX3NrKHN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJaWYgKCFwdHlwZS0+YWZfcGFja2V0X3ByaXYgfHwgIXNrYi0+c2spCkBAIC0xNzU3LDQ1ICsxNzc1LDU0IEBACiAJc3RydWN0IHBhY2tldF90eXBlICpwdHlwZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IE5VTEw7CiAJc3RydWN0IHBhY2tldF90eXBlICpwdF9wcmV2ID0gTlVMTDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwdHlwZV9saXN0ID0gJnB0eXBlX2FsbDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHlwZSwgJnB0eXBlX2FsbCwgbGlzdCkgeworYWdhaW46CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHR5cGUsIHB0eXBlX2xpc3QsIGxpc3QpIHsKIAkJLyogTmV2ZXIgc2VuZCBwYWNrZXRzIGJhY2sgdG8gdGhlIHNvY2tldAogCQkgKiB0aGV5IG9yaWdpbmF0ZWQgZnJvbSAtIE12UyAobWlxdWVsc0Bkcmlua2VsLm93Lm9yZykKIAkJICovCi0JCWlmICgocHR5cGUtPmRldiA9PSBkZXYgfHwgIXB0eXBlLT5kZXYpICYmCi0JCSAgICAoIXNrYl9sb29wX3NrKHB0eXBlLCBza2IpKSkgewotCQkJaWYgKHB0X3ByZXYpIHsKLQkJCQlkZWxpdmVyX3NrYihza2IyLCBwdF9wcmV2LCBza2ItPmRldik7Ci0JCQkJcHRfcHJldiA9IHB0eXBlOwotCQkJCWNvbnRpbnVlOwotCQkJfQorCQlpZiAoc2tiX2xvb3Bfc2socHR5cGUsIHNrYikpCisJCQljb250aW51ZTsKIAotCQkJc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwotCQkJaWYgKCFza2IyKQotCQkJCWJyZWFrOwotCi0JCQluZXRfdGltZXN0YW1wX3NldChza2IyKTsKLQotCQkJLyogc2tiLT5uaCBzaG91bGQgYmUgY29ycmVjdGx5Ci0JCQkgICBzZXQgYnkgc2VuZGVyLCBzbyB0aGF0IHRoZSBzZWNvbmQgc3RhdGVtZW50IGlzCi0JCQkgICBqdXN0IHByb3RlY3Rpb24gYWdhaW5zdCBidWdneSBwcm90b2NvbHMuCi0JCQkgKi8KLQkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYjIpOwotCi0JCQlpZiAoc2tiX25ldHdvcmtfaGVhZGVyKHNrYjIpIDwgc2tiMi0+ZGF0YSB8fAotCQkJICAgIHNrYl9uZXR3b3JrX2hlYWRlcihza2IyKSA+IHNrYl90YWlsX3BvaW50ZXIoc2tiMikpIHsKLQkJCQluZXRfY3JpdF9yYXRlbGltaXRlZCgicHJvdG9jb2wgJTA0eCBpcyBidWdneSwgZGV2ICVzXG4iLAotCQkJCQkJICAgICBudG9ocyhza2IyLT5wcm90b2NvbCksCi0JCQkJCQkgICAgIGRldi0+bmFtZSk7Ci0JCQkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYjIpOwotCQkJfQotCi0JCQlza2IyLT50cmFuc3BvcnRfaGVhZGVyID0gc2tiMi0+bmV0d29ya19oZWFkZXI7Ci0JCQlza2IyLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVVRHT0lORzsKKwkJaWYgKHB0X3ByZXYpIHsKKwkJCWRlbGl2ZXJfc2tiKHNrYjIsIHB0X3ByZXYsIHNrYi0+ZGV2KTsKIAkJCXB0X3ByZXYgPSBwdHlwZTsKKwkJCWNvbnRpbnVlOwogCQl9CisKKwkJLyogbmVlZCB0byBjbG9uZSBza2IsIGRvbmUgb25seSBvbmNlICovCisJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFza2IyKQorCQkJZ290byBvdXRfdW5sb2NrOworCisJCW5ldF90aW1lc3RhbXBfc2V0KHNrYjIpOworCisJCS8qIHNrYi0+bmggc2hvdWxkIGJlIGNvcnJlY3RseQorCQkgKiBzZXQgYnkgc2VuZGVyLCBzbyB0aGF0IHRoZSBzZWNvbmQgc3RhdGVtZW50IGlzCisJCSAqIGp1c3QgcHJvdGVjdGlvbiBhZ2FpbnN0IGJ1Z2d5IHByb3RvY29scy4KKwkJICovCisJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYjIpOworCisJCWlmIChza2JfbmV0d29ya19oZWFkZXIoc2tiMikgPCBza2IyLT5kYXRhIHx8CisJCSAgICBza2JfbmV0d29ya19oZWFkZXIoc2tiMikgPiBza2JfdGFpbF9wb2ludGVyKHNrYjIpKSB7CisJCQluZXRfY3JpdF9yYXRlbGltaXRlZCgicHJvdG9jb2wgJTA0eCBpcyBidWdneSwgZGV2ICVzXG4iLAorCQkJCQkgICAgIG50b2hzKHNrYjItPnByb3RvY29sKSwKKwkJCQkJICAgICBkZXYtPm5hbWUpOworCQkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYjIpOworCQl9CisKKwkJc2tiMi0+dHJhbnNwb3J0X2hlYWRlciA9IHNrYjItPm5ldHdvcmtfaGVhZGVyOworCQlza2IyLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVVRHT0lORzsKKwkJcHRfcHJldiA9IHB0eXBlOwogCX0KKworCWlmIChwdHlwZV9saXN0ID09ICZwdHlwZV9hbGwpIHsKKwkJcHR5cGVfbGlzdCA9ICZkZXYtPnB0eXBlX2FsbDsKKwkJZ290byBhZ2FpbjsKKwl9CitvdXRfdW5sb2NrOgogCWlmIChwdF9wcmV2KQogCQlwdF9wcmV2LT5mdW5jKHNrYjIsIHNrYi0+ZGV2LCBwdF9wcmV2LCBza2ItPmRldik7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC0yMzUyLDcgKzIzNzksNiBAQAogCiBfX2JlMTYgc2tiX25ldHdvcmtfcHJvdG9jb2woc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICpkZXB0aCkKIHsKLQl1bnNpZ25lZCBpbnQgdmxhbl9kZXB0aCA9IHNrYi0+bWFjX2xlbjsKIAlfX2JlMTYgdHlwZSA9IHNrYi0+cHJvdG9jb2w7CiAKIAkvKiBUdW5uZWwgZ3NvIGhhbmRsZXJzIGNhbiBzZXQgcHJvdG9jb2wgdG8gZXRoZXJuZXQuICovCkBAIC0yMzY2LDM1ICsyMzkyLDcgQEAKIAkJdHlwZSA9IGV0aC0+aF9wcm90bzsKIAl9CiAKLQkvKiBpZiBza2ItPnByb3RvY29sIGlzIDgwMi4xUS9BRCB0aGVuIHRoZSBoZWFkZXIgc2hvdWxkIGFscmVhZHkgYmUKLQkgKiBwcmVzZW50IGF0IG1hY19sZW4gLSBWTEFOX0hMRU4gKGlmIG1hY19sZW4gPiAwKSwgb3IgYXQKLQkgKiBFVEhfSExFTiBvdGhlcndpc2UKLQkgKi8KLQlpZiAodHlwZSA9PSBodG9ucyhFVEhfUF84MDIxUSkgfHwgdHlwZSA9PSBodG9ucyhFVEhfUF84MDIxQUQpKSB7Ci0JCWlmICh2bGFuX2RlcHRoKSB7Ci0JCQlpZiAoV0FSTl9PTih2bGFuX2RlcHRoIDwgVkxBTl9ITEVOKSkKLQkJCQlyZXR1cm4gMDsKLQkJCXZsYW5fZGVwdGggLT0gVkxBTl9ITEVOOwotCQl9IGVsc2UgewotCQkJdmxhbl9kZXB0aCA9IEVUSF9ITEVOOwotCQl9Ci0JCWRvIHsKLQkJCXN0cnVjdCB2bGFuX2hkciAqdmg7Ci0KLQkJCWlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsCi0JCQkJCQkgICAgdmxhbl9kZXB0aCArIFZMQU5fSExFTikpKQotCQkJCXJldHVybiAwOwotCi0JCQl2aCA9IChzdHJ1Y3Qgdmxhbl9oZHIgKikoc2tiLT5kYXRhICsgdmxhbl9kZXB0aCk7Ci0JCQl0eXBlID0gdmgtPmhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG87Ci0JCQl2bGFuX2RlcHRoICs9IFZMQU5fSExFTjsKLQkJfSB3aGlsZSAodHlwZSA9PSBodG9ucyhFVEhfUF84MDIxUSkgfHwKLQkJCSB0eXBlID09IGh0b25zKEVUSF9QXzgwMjFBRCkpOwotCX0KLQotCSpkZXB0aCA9IHZsYW5fZGVwdGg7Ci0KLQlyZXR1cm4gdHlwZTsKKwlyZXR1cm4gX192bGFuX2dldF9wcm90b2NvbChza2IsIHR5cGUsIGRlcHRoKTsKIH0KIAogLyoqCkBAIC0yNTc4LDcgKzI1NzYsNyBAQAogCWlmIChza2ItPmVuY2Fwc3VsYXRpb24pCiAJCWZlYXR1cmVzICY9IGRldi0+aHdfZW5jX2ZlYXR1cmVzOwogCi0JaWYgKCF2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKwlpZiAoIXNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKIAkJaWYgKHVubGlrZWx5KHByb3RvY29sID09IGh0b25zKEVUSF9QXzgwMjFRKSB8fAogCQkJICAgICBwcm90b2NvbCA9PSBodG9ucyhFVEhfUF84MDIxQUQpKSkgewogCQkJc3RydWN0IHZsYW5fZXRoaGRyICp2ZWggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiLT5kYXRhOwpAQCAtMjYxNyw3ICsyNjE1LDcgQEAKIAl1bnNpZ25lZCBpbnQgbGVuOwogCWludCByYzsKIAotCWlmICghbGlzdF9lbXB0eSgmcHR5cGVfYWxsKSkKKwlpZiAoIWxpc3RfZW1wdHkoJnB0eXBlX2FsbCkgfHwgIWxpc3RfZW1wdHkoJmRldi0+cHR5cGVfYWxsKSkKIAkJZGV2X3F1ZXVlX3htaXRfbml0KHNrYiwgZGV2KTsKIAogCWxlbiA9IHNrYi0+bGVuOwpAQCAtMjY1OSw3ICsyNjU3LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdmFsaWRhdGVfeG1pdF92bGFuKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCSAgbmV0ZGV2X2ZlYXR1cmVzX3QgZmVhdHVyZXMpCiB7Ci0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSAmJgorCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpICYmCiAJICAgICF2bGFuX2h3X29mZmxvYWRfY2FwYWJsZShmZWF0dXJlcywgc2tiLT52bGFuX3Byb3RvKSkKIAkJc2tiID0gX192bGFuX2h3YWNjZWxfcHVzaF9pbnNpZGUoc2tiKTsKIAlyZXR1cm4gc2tiOwpAQCAtMzAzMiw2ICszMDMwLDggQEAKIC8qIE9uZSBnbG9iYWwgdGFibGUgdGhhdCBhbGwgZmxvdy1iYXNlZCBwcm90b2NvbHMgc2hhcmUuICovCiBzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSBfX3JjdSAqcnBzX3NvY2tfZmxvd190YWJsZSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChycHNfc29ja19mbG93X3RhYmxlKTsKK3UzMiBycHNfY3B1X21hc2sgX19yZWFkX21vc3RseTsKK0VYUE9SVF9TWU1CT0wocnBzX2NwdV9tYXNrKTsKIAogc3RydWN0IHN0YXRpY19rZXkgcnBzX25lZWRlZCBfX3JlYWRfbW9zdGx5OwogCkBAIC0zMDg4LDE2ICszMDg4LDE3IEBACiBzdGF0aWMgaW50IGdldF9ycHNfY3B1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgICAgICBzdHJ1Y3QgcnBzX2Rldl9mbG93ICoqcmZsb3dwKQogewotCXN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnJ4cXVldWU7Ci0Jc3RydWN0IHJwc19tYXAgKm1hcDsKKwljb25zdCBzdHJ1Y3QgcnBzX3NvY2tfZmxvd190YWJsZSAqc29ja19mbG93X3RhYmxlOworCXN0cnVjdCBuZXRkZXZfcnhfcXVldWUgKnJ4cXVldWUgPSBkZXYtPl9yeDsKIAlzdHJ1Y3QgcnBzX2Rldl9mbG93X3RhYmxlICpmbG93X3RhYmxlOwotCXN0cnVjdCBycHNfc29ja19mbG93X3RhYmxlICpzb2NrX2Zsb3dfdGFibGU7CisJc3RydWN0IHJwc19tYXAgKm1hcDsKIAlpbnQgY3B1ID0gLTE7Ci0JdTE2IHRjcHU7CisJdTMyIHRjcHU7CiAJdTMyIGhhc2g7CiAKIAlpZiAoc2tiX3J4X3F1ZXVlX3JlY29yZGVkKHNrYikpIHsKIAkJdTE2IGluZGV4ID0gc2tiX2dldF9yeF9xdWV1ZShza2IpOworCiAJCWlmICh1bmxpa2VseShpbmRleCA+PSBkZXYtPnJlYWxfbnVtX3J4X3F1ZXVlcykpIHsKIAkJCVdBUk5fT05DRShkZXYtPnJlYWxfbnVtX3J4X3F1ZXVlcyA+IDEsCiAJCQkJICAiJXMgcmVjZWl2ZWQgcGFja2V0IG9uIHF1ZXVlICV1LCBidXQgbnVtYmVyICIKQEAgLTMxMDUsMzkgKzMxMDYsNDAgQEAKIAkJCQkgIGRldi0+bmFtZSwgaW5kZXgsIGRldi0+cmVhbF9udW1fcnhfcXVldWVzKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQotCQlyeHF1ZXVlID0gZGV2LT5fcnggKyBpbmRleDsKLQl9IGVsc2UKLQkJcnhxdWV1ZSA9IGRldi0+X3J4OwotCi0JbWFwID0gcmN1X2RlcmVmZXJlbmNlKHJ4cXVldWUtPnJwc19tYXApOwotCWlmIChtYXApIHsKLQkJaWYgKG1hcC0+bGVuID09IDEgJiYKLQkJICAgICFyY3VfYWNjZXNzX3BvaW50ZXIocnhxdWV1ZS0+cnBzX2Zsb3dfdGFibGUpKSB7Ci0JCQl0Y3B1ID0gbWFwLT5jcHVzWzBdOwotCQkJaWYgKGNwdV9vbmxpbmUodGNwdSkpCi0JCQkJY3B1ID0gdGNwdTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCX0gZWxzZSBpZiAoIXJjdV9hY2Nlc3NfcG9pbnRlcihyeHF1ZXVlLT5ycHNfZmxvd190YWJsZSkpIHsKLQkJZ290byBkb25lOworCQlyeHF1ZXVlICs9IGluZGV4OwogCX0KIAorCS8qIEF2b2lkIGNvbXB1dGluZyBoYXNoIGlmIFJGUy9SUFMgaXMgbm90IGFjdGl2ZSBmb3IgdGhpcyByeHF1ZXVlICovCisKKwlmbG93X3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlKHJ4cXVldWUtPnJwc19mbG93X3RhYmxlKTsKKwltYXAgPSByY3VfZGVyZWZlcmVuY2UocnhxdWV1ZS0+cnBzX21hcCk7CisJaWYgKCFmbG93X3RhYmxlICYmICFtYXApCisJCWdvdG8gZG9uZTsKKwogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCWhhc2ggPSBza2JfZ2V0X2hhc2goc2tiKTsKIAlpZiAoIWhhc2gpCiAJCWdvdG8gZG9uZTsKIAotCWZsb3dfdGFibGUgPSByY3VfZGVyZWZlcmVuY2UocnhxdWV1ZS0+cnBzX2Zsb3dfdGFibGUpOwogCXNvY2tfZmxvd190YWJsZSA9IHJjdV9kZXJlZmVyZW5jZShycHNfc29ja19mbG93X3RhYmxlKTsKIAlpZiAoZmxvd190YWJsZSAmJiBzb2NrX2Zsb3dfdGFibGUpIHsKLQkJdTE2IG5leHRfY3B1OwogCQlzdHJ1Y3QgcnBzX2Rldl9mbG93ICpyZmxvdzsKKwkJdTMyIG5leHRfY3B1OworCQl1MzIgaWRlbnQ7CiAKKwkJLyogRmlyc3QgY2hlY2sgaW50byBnbG9iYWwgZmxvdyB0YWJsZSBpZiB0aGVyZSBpcyBhIG1hdGNoICovCisJCWlkZW50ID0gc29ja19mbG93X3RhYmxlLT5lbnRzW2hhc2ggJiBzb2NrX2Zsb3dfdGFibGUtPm1hc2tdOworCQlpZiAoKGlkZW50IF4gaGFzaCkgJiB+cnBzX2NwdV9tYXNrKQorCQkJZ290byB0cnlfcnBzOworCisJCW5leHRfY3B1ID0gaWRlbnQgJiBycHNfY3B1X21hc2s7CisKKwkJLyogT0ssIG5vdyB3ZSBrbm93IHRoZXJlIGlzIGEgbWF0Y2gsCisJCSAqIHdlIGNhbiBsb29rIGF0IHRoZSBsb2NhbCAocGVyIHJlY2VpdmUgcXVldWUpIGZsb3cgdGFibGUKKwkJICovCiAJCXJmbG93ID0gJmZsb3dfdGFibGUtPmZsb3dzW2hhc2ggJiBmbG93X3RhYmxlLT5tYXNrXTsKIAkJdGNwdSA9IHJmbG93LT5jcHU7CiAKLQkJbmV4dF9jcHUgPSBzb2NrX2Zsb3dfdGFibGUtPmVudHNbaGFzaCAmIHNvY2tfZmxvd190YWJsZS0+bWFza107Ci0KIAkJLyoKIAkJICogSWYgdGhlIGRlc2lyZWQgQ1BVICh3aGVyZSBsYXN0IHJlY3Ztc2cgd2FzIGRvbmUpIGlzCiAJCSAqIGRpZmZlcmVudCBmcm9tIGN1cnJlbnQgQ1BVIChvbmUgaW4gdGhlIHJ4LXF1ZXVlIGZsb3cKQEAgLTMxNjQsNiArMzE2Niw4IEBACiAJCX0KIAl9CiAKK3RyeV9ycHM6CisKIAlpZiAobWFwKSB7CiAJCXRjcHUgPSBtYXAtPmNwdXNbcmVjaXByb2NhbF9zY2FsZShoYXNoLCBtYXAtPmxlbildOwogCQlpZiAoY3B1X29ubGluZSh0Y3B1KSkgewpAQCAtMzYxNSw3ICszNjE5LDYgQEAKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCAqcHRfcHJldjsKIAlyeF9oYW5kbGVyX2Z1bmNfdCAqcnhfaGFuZGxlcjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm51bGxfb3JfZGV2OwogCWJvb2wgZGVsaXZlcl9leGFjdCA9IGZhbHNlOwogCWludCByZXQgPSBORVRfUlhfRFJPUDsKIAlfX2JlMTYgdHlwZTsKQEAgLTM2NTgsMTEgKzM2NjEsMTUgQEAKIAkJZ290byBza2lwX3RhcHM7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHlwZSwgJnB0eXBlX2FsbCwgbGlzdCkgewotCQlpZiAoIXB0eXBlLT5kZXYgfHwgcHR5cGUtPmRldiA9PSBza2ItPmRldikgewotCQkJaWYgKHB0X3ByZXYpCi0JCQkJcmV0ID0gZGVsaXZlcl9za2Ioc2tiLCBwdF9wcmV2LCBvcmlnX2Rldik7Ci0JCQlwdF9wcmV2ID0gcHR5cGU7Ci0JCX0KKwkJaWYgKHB0X3ByZXYpCisJCQlyZXQgPSBkZWxpdmVyX3NrYihza2IsIHB0X3ByZXYsIG9yaWdfZGV2KTsKKwkJcHRfcHJldiA9IHB0eXBlOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0eXBlLCAmc2tiLT5kZXYtPnB0eXBlX2FsbCwgbGlzdCkgeworCQlpZiAocHRfcHJldikKKwkJCXJldCA9IGRlbGl2ZXJfc2tiKHNrYiwgcHRfcHJldiwgb3JpZ19kZXYpOworCQlwdF9wcmV2ID0gcHR5cGU7CiAJfQogCiBza2lwX3RhcHM6CkBAIC0zNjc2LDcgKzM2ODMsNyBAQAogCWlmIChwZm1lbWFsbG9jICYmICFza2JfcGZtZW1hbGxvY19wcm90b2NvbChza2IpKQogCQlnb3RvIGRyb3A7CiAKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKIAkJaWYgKHB0X3ByZXYpIHsKIAkJCXJldCA9IGRlbGl2ZXJfc2tiKHNrYiwgcHRfcHJldiwgb3JpZ19kZXYpOwogCQkJcHRfcHJldiA9IE5VTEw7CkBAIC0zNzA4LDggKzM3MTUsOCBAQAogCQl9CiAJfQogCi0JaWYgKHVubGlrZWx5KHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkpIHsKLQkJaWYgKHZsYW5fdHhfdGFnX2dldF9pZChza2IpKQorCWlmICh1bmxpa2VseShza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSkgeworCQlpZiAoc2tiX3ZsYW5fdGFnX2dldF9pZChza2IpKQogCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CiAJCS8qIE5vdGU6IHdlIG1pZ2h0IGluIHRoZSBmdXR1cmUgdXNlIHByaW8gYml0cwogCQkgKiBhbmQgc2V0IHNrYi0+cHJpb3JpdHkgbGlrZSBpbiB2bGFuX2RvX3JlY2VpdmUoKQpAQCAtMzcxOCwxOSArMzcyNSwyMSBAQAogCQlza2ItPnZsYW5fdGNpID0gMDsKIAl9CiAKLQkvKiBkZWxpdmVyIG9ubHkgZXhhY3QgbWF0Y2ggd2hlbiBpbmRpY2F0ZWQgKi8KLQludWxsX29yX2RldiA9IGRlbGl2ZXJfZXhhY3QgPyBza2ItPmRldiA6IE5VTEw7Ci0KIAl0eXBlID0gc2tiLT5wcm90b2NvbDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHlwZSwKLQkJCSZwdHlwZV9iYXNlW250b2hzKHR5cGUpICYgUFRZUEVfSEFTSF9NQVNLXSwgbGlzdCkgewotCQlpZiAocHR5cGUtPnR5cGUgPT0gdHlwZSAmJgotCQkgICAgKHB0eXBlLT5kZXYgPT0gbnVsbF9vcl9kZXYgfHwgcHR5cGUtPmRldiA9PSBza2ItPmRldiB8fAotCQkgICAgIHB0eXBlLT5kZXYgPT0gb3JpZ19kZXYpKSB7Ci0JCQlpZiAocHRfcHJldikKLQkJCQlyZXQgPSBkZWxpdmVyX3NrYihza2IsIHB0X3ByZXYsIG9yaWdfZGV2KTsKLQkJCXB0X3ByZXYgPSBwdHlwZTsKLQkJfQorCisJLyogZGVsaXZlciBvbmx5IGV4YWN0IG1hdGNoIHdoZW4gaW5kaWNhdGVkICovCisJaWYgKGxpa2VseSghZGVsaXZlcl9leGFjdCkpIHsKKwkJZGVsaXZlcl9wdHlwZV9saXN0X3NrYihza2IsICZwdF9wcmV2LCBvcmlnX2RldiwgdHlwZSwKKwkJCQkgICAgICAgJnB0eXBlX2Jhc2VbbnRvaHModHlwZSkgJgorCQkJCQkJICAgUFRZUEVfSEFTSF9NQVNLXSk7CisJfQorCisJZGVsaXZlcl9wdHlwZV9saXN0X3NrYihza2IsICZwdF9wcmV2LCBvcmlnX2RldiwgdHlwZSwKKwkJCSAgICAgICAmb3JpZ19kZXYtPnB0eXBlX3NwZWNpZmljKTsKKworCWlmICh1bmxpa2VseShza2ItPmRldiAhPSBvcmlnX2RldikpIHsKKwkJZGVsaXZlcl9wdHlwZV9saXN0X3NrYihza2IsICZwdF9wcmV2LCBvcmlnX2RldiwgdHlwZSwKKwkJCQkgICAgICAgJnNrYi0+ZGV2LT5wdHlwZV9zcGVjaWZpYyk7CiAJfQogCiAJaWYgKHB0X3ByZXYpIHsKQEAgLTUzMjMsNyArNTMzMiwyNyBAQAogfQogRVhQT1JUX1NZTUJPTChuZXRkZXZfdXBwZXJfZGV2X3VubGluayk7CiAKLXZvaWQgbmV0ZGV2X2FkamFjZW50X2FkZF9saW5rcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorLyoqCisgKiBuZXRkZXZfYm9uZGluZ19pbmZvX2NoYW5nZSAtIERpc3BhdGNoIGV2ZW50IGFib3V0IHNsYXZlIGNoYW5nZQorICogQGRldjogZGV2aWNlCisgKiBAbmV0ZGV2X2JvbmRpbmdfaW5mbzogaW5mbyB0byBkaXNwYXRjaAorICoKKyAqIFNlbmQgTkVUREVWX0JPTkRJTkdfSU5GTyB0byBuZXRkZXYgbm90aWZpZXJzIHdpdGggaW5mby4KKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBSVE5MIGxvY2suCisgKi8KK3ZvaWQgbmV0ZGV2X2JvbmRpbmdfaW5mb19jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgbmV0ZGV2X2JvbmRpbmdfaW5mbyAqYm9uZGluZ19pbmZvKQoreworCXN0cnVjdCBuZXRkZXZfbm90aWZpZXJfYm9uZGluZ19pbmZvCWluZm87CisKKwltZW1jcHkoJmluZm8uYm9uZGluZ19pbmZvLCBib25kaW5nX2luZm8sCisJICAgICAgIHNpemVvZihzdHJ1Y3QgbmV0ZGV2X2JvbmRpbmdfaW5mbykpOworCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVyc19pbmZvKE5FVERFVl9CT05ESU5HX0lORk8sIGRldiwKKwkJCQkgICAgICAmaW5mby5pbmZvKTsKK30KK0VYUE9SVF9TWU1CT0wobmV0ZGV2X2JvbmRpbmdfaW5mb19jaGFuZ2UpOworCitzdGF0aWMgdm9pZCBuZXRkZXZfYWRqYWNlbnRfYWRkX2xpbmtzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldGRldl9hZGphY2VudCAqaXRlcjsKIApAQCAtNTM0OCw3ICs1Mzc3LDcgQEAKIAl9CiB9CiAKLXZvaWQgbmV0ZGV2X2FkamFjZW50X2RlbF9saW5rcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgbmV0ZGV2X2FkamFjZW50X2RlbF9saW5rcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRkZXZfYWRqYWNlbnQgKml0ZXI7CiAKQEAgLTYxNzIsMTMgKzYyMDEsMTYgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaSwgY291bnQgPSBkZXYtPm51bV9yeF9xdWV1ZXM7CiAJc3RydWN0IG5ldGRldl9yeF9xdWV1ZSAqcng7CisJc2l6ZV90IHN6ID0gY291bnQgKiBzaXplb2YoKnJ4KTsKIAogCUJVR19PTihjb3VudCA8IDEpOwogCi0JcnggPSBrY2FsbG9jKGNvdW50LCBzaXplb2Yoc3RydWN0IG5ldGRldl9yeF9xdWV1ZSksIEdGUF9LRVJORUwpOwotCWlmICghcngpCi0JCXJldHVybiAtRU5PTUVNOwotCisJcnggPSBremFsbG9jKHN6LCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOIHwgX19HRlBfUkVQRUFUKTsKKwlpZiAoIXJ4KSB7CisJCXJ4ID0gdnphbGxvYyhzeik7CisJCWlmICghcngpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CiAJZGV2LT5fcnggPSByeDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQpAQCAtNjU3Niw2ICs2NjA4LDggQEAKIAogCQkvKiBwYXJhbm9pYSAqLwogCQlCVUdfT04obmV0ZGV2X3JlZmNudF9yZWFkKGRldikpOworCQlCVUdfT04oIWxpc3RfZW1wdHkoJmRldi0+cHR5cGVfYWxsKSk7CisJCUJVR19PTighbGlzdF9lbXB0eSgmZGV2LT5wdHlwZV9zcGVjaWZpYykpOwogCQlXQVJOX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtPmlwX3B0cikpOwogCQlXQVJOX09OKHJjdV9hY2Nlc3NfcG9pbnRlcihkZXYtPmlwNl9wdHIpKTsKIAkJV0FSTl9PTihkZXYtPmRuX3B0cik7CkBAIC02NjU2LDcgKzY2OTAsNyBAQAogCWlmICghcXVldWUpCiAJCXJldHVybiBOVUxMOwogCW5ldGRldl9pbml0X29uZV9xdWV1ZShkZXYsIHF1ZXVlLCBOVUxMKTsKLQlxdWV1ZS0+cWRpc2MgPSAmbm9vcF9xZGlzYzsKKwlSQ1VfSU5JVF9QT0lOVEVSKHF1ZXVlLT5xZGlzYywgJm5vb3BfcWRpc2MpOwogCXF1ZXVlLT5xZGlzY19zbGVlcGluZyA9ICZub29wX3FkaXNjOwogCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtPmluZ3Jlc3NfcXVldWUsIHF1ZXVlKTsKICNlbmRpZgpAQCAtNjc1OCw2ICs2NzkyLDggQEAKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5hZGpfbGlzdC5sb3dlcik7CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+YWxsX2Fkal9saXN0LnVwcGVyKTsKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5hbGxfYWRqX2xpc3QubG93ZXIpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnB0eXBlX2FsbCk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+cHR5cGVfc3BlY2lmaWMpOwogCWRldi0+cHJpdl9mbGFncyA9IElGRl9YTUlUX0RTVF9SRUxFQVNFIHwgSUZGX1hNSVRfRFNUX1JFTEVBU0VfUEVSTTsKIAlzZXR1cChkZXYpOwogCkBAIC02ODA4LDcgKzY4NDQsNyBAQAogCiAJbmV0aWZfZnJlZV90eF9xdWV1ZXMoZGV2KTsKICNpZmRlZiBDT05GSUdfU1lTRlMKLQlrZnJlZShkZXYtPl9yeCk7CisJa3ZmcmVlKGRldi0+X3J4KTsKICNlbmRpZgogCiAJa2ZyZWUocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtPmluZ3Jlc3NfcXVldWUsIDEpKTsKQEAgLTcwOTMsMTEgKzcxMjksMTEgQEAKIAogCS8qIFByb2Nlc3Mgb2ZmbGluZSBDUFUncyBpbnB1dF9wa3RfcXVldWUgKi8KIAl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJm9sZHNkLT5wcm9jZXNzX3F1ZXVlKSkpIHsKLQkJbmV0aWZfcnhfaW50ZXJuYWwoc2tiKTsKKwkJbmV0aWZfcnhfbmkoc2tiKTsKIAkJaW5wdXRfcXVldWVfaGVhZF9pbmNyKG9sZHNkKTsKIAl9CiAJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmb2xkc2QtPmlucHV0X3BrdF9xdWV1ZSkpKSB7Ci0JCW5ldGlmX3J4X2ludGVybmFsKHNrYik7CisJCW5ldGlmX3J4X25pKHNrYik7CiAJCWlucHV0X3F1ZXVlX2hlYWRfaW5jcihvbGRzZCk7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ldGh0b29sLmMgYi9uZXQvY29yZS9ldGh0b29sLmMKaW5kZXggNTUwODkyYy4uOTFmNzRmMyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZXRodG9vbC5jCisrKyBiL25ldC9jb3JlL2V0aHRvb2wuYwpAQCAtMTU5NywyMCArMTU5NywzMSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgX19ldGh0b29sX2dldF9tb2R1bGVfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGV0aHRvb2xfbW9kaW5mbyAqbW9kaW5mbykKK3sKKwljb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi0+ZXRodG9vbF9vcHM7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IGRldi0+cGh5ZGV2OworCisJaWYgKHBoeWRldiAmJiBwaHlkZXYtPmRydiAmJiBwaHlkZXYtPmRydi0+bW9kdWxlX2luZm8pCisJCXJldHVybiBwaHlkZXYtPmRydi0+bW9kdWxlX2luZm8ocGh5ZGV2LCBtb2RpbmZvKTsKKworCWlmIChvcHMtPmdldF9tb2R1bGVfaW5mbykKKwkJcmV0dXJuIG9wcy0+Z2V0X21vZHVsZV9pbmZvKGRldiwgbW9kaW5mbyk7CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKIHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfbW9kdWxlX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgZXRodG9vbF9tb2RpbmZvIG1vZGluZm87Ci0JY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOwotCi0JaWYgKCFvcHMtPmdldF9tb2R1bGVfaW5mbykKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZtb2RpbmZvLCB1c2VyYWRkciwgc2l6ZW9mKG1vZGluZm8pKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlyZXQgPSBvcHMtPmdldF9tb2R1bGVfaW5mbyhkZXYsICZtb2RpbmZvKTsKKwlyZXQgPSBfX2V0aHRvb2xfZ2V0X21vZHVsZV9pbmZvKGRldiwgJm1vZGluZm8pOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTE2MjAsMjEgKzE2MzEsMzMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX2V0aHRvb2xfZ2V0X21vZHVsZV9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZSwgdTggKmRhdGEpCit7CisJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBkZXYtPnBoeWRldjsKKworCWlmIChwaHlkZXYgJiYgcGh5ZGV2LT5kcnYgJiYgcGh5ZGV2LT5kcnYtPm1vZHVsZV9lZXByb20pCisJCXJldHVybiBwaHlkZXYtPmRydi0+bW9kdWxlX2VlcHJvbShwaHlkZXYsIGVlLCBkYXRhKTsKKworCWlmIChvcHMtPmdldF9tb2R1bGVfZWVwcm9tKQorCQlyZXR1cm4gb3BzLT5nZXRfbW9kdWxlX2VlcHJvbShkZXYsIGVlLCBkYXRhKTsKKworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKwogc3RhdGljIGludCBldGh0b29sX2dldF9tb2R1bGVfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgICB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgZXRodG9vbF9tb2RpbmZvIG1vZGluZm87Ci0JY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOwogCi0JaWYgKCFvcHMtPmdldF9tb2R1bGVfaW5mbyB8fCAhb3BzLT5nZXRfbW9kdWxlX2VlcHJvbSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JcmV0ID0gb3BzLT5nZXRfbW9kdWxlX2luZm8oZGV2LCAmbW9kaW5mbyk7CisJcmV0ID0gX19ldGh0b29sX2dldF9tb2R1bGVfaW5mbyhkZXYsICZtb2RpbmZvKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0dXJuIGV0aHRvb2xfZ2V0X2FueV9lZXByb20oZGV2LCB1c2VyYWRkciwgb3BzLT5nZXRfbW9kdWxlX2VlcHJvbSwKKwlyZXR1cm4gZXRodG9vbF9nZXRfYW55X2VlcHJvbShkZXYsIHVzZXJhZGRyLAorCQkJCSAgICAgIF9fZXRodG9vbF9nZXRfbW9kdWxlX2VlcHJvbSwKIAkJCQkgICAgICBtb2RpbmZvLmVlcHJvbV9sZW4pOwogfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWJfcnVsZXMuYyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCmluZGV4IDE4NWMzNDEuLjQ0NzA2ZTggMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jCisrKyBiL25ldC9jb3JlL2ZpYl9ydWxlcy5jCkBAIC02MDksNyArNjA5LDggQEAKIAlpZiAob3BzLT5maWxsKHJ1bGUsIHNrYiwgZnJoKSA8IDApCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIAogbmxhX3B1dF9mYWlsdXJlOgogCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9mbG93LmMgYi9uZXQvY29yZS9mbG93LmMKaW5kZXggYTAzNDhmZC4uMTAzMzcyNSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmxvdy5jCisrKyBiL25ldC9jb3JlL2Zsb3cuYwpAQCAtMzc5LDcgKzM3OSw3IEBACiBzdGF0aWMgdm9pZCBmbG93X2NhY2hlX2ZsdXNoX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBuZXRuc194ZnJtICp4ZnJtID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuZXRuc194ZnJtLAotCQkJCQkJZmxvd19jYWNoZV9nY193b3JrKTsKKwkJCQkJCWZsb3dfY2FjaGVfZmx1c2hfd29yayk7CiAJc3RydWN0IG5ldCAqbmV0ID0gY29udGFpbmVyX29mKHhmcm0sIHN0cnVjdCBuZXQsIHhmcm0pOwogCiAJZmxvd19jYWNoZV9mbHVzaChuZXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYyBiL25ldC9jb3JlL2Zsb3dfZGlzc2VjdG9yLmMKaW5kZXggNDUwODQ5My4uMmMzNWMwMiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmxvd19kaXNzZWN0b3IuYworKysgYi9uZXQvY29yZS9mbG93X2Rpc3NlY3Rvci5jCkBAIC0xNzgsNiArMTc4LDIwIEBACiAJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9CisJY2FzZSBodG9ucyhFVEhfUF9USVBDKTogeworCQlzdHJ1Y3QgeworCQkJX19iZTMyIHByZVszXTsKKwkJCV9fYmUzMiBzcmNub2RlOworCQl9ICpoZHIsIF9oZHI7CisJCWhkciA9IF9fc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbmhvZmYsIHNpemVvZihfaGRyKSwgZGF0YSwgaGxlbiwgJl9oZHIpOworCQlpZiAoIWhkcikKKwkJCXJldHVybiBmYWxzZTsKKwkJZmxvdy0+c3JjID0gaGRyLT5zcmNub2RlOworCQlmbG93LT5kc3QgPSAwOworCQlmbG93LT5uX3Byb3RvID0gcHJvdG87CisJCWZsb3ctPnRob2ZmID0gKHUxNiluaG9mZjsKKwkJcmV0dXJuIHRydWU7CisJfQogCWNhc2UgaHRvbnMoRVRIX1BfRkNPRSk6CiAJCWZsb3ctPnRob2ZmID0gKHUxNikobmhvZmYgKyBGQ09FX0hFQURFUl9MRU4pOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTQwOCw3ICs0MjIsNyBAQAogCWRldl9tYXBzID0gcmN1X2RlcmVmZXJlbmNlKGRldi0+eHBzX21hcHMpOwogCWlmIChkZXZfbWFwcykgewogCQltYXAgPSByY3VfZGVyZWZlcmVuY2UoCi0JCSAgICBkZXZfbWFwcy0+Y3B1X21hcFtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXSk7CisJCSAgICBkZXZfbWFwcy0+Y3B1X21hcFtza2ItPnNlbmRlcl9jcHUgLSAxXSk7CiAJCWlmIChtYXApIHsKIAkJCWlmIChtYXAtPmxlbiA9PSAxKQogCQkJCXF1ZXVlX2luZGV4ID0gbWFwLT5xdWV1ZXNbMF07CkBAIC00NTQsNiArNDY4LDExIEBACiB7CiAJaW50IHF1ZXVlX2luZGV4ID0gMDsKIAorI2lmZGVmIENPTkZJR19YUFMKKwlpZiAoc2tiLT5zZW5kZXJfY3B1ID09IDApCisJCXNrYi0+c2VuZGVyX2NwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkgKyAxOworI2VuZGlmCisKIAlpZiAoZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgIT0gMSkgewogCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi0+bmV0ZGV2X29wczsKIAkJaWYgKG9wcy0+bmRvX3NlbGVjdF9xdWV1ZSkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2lvdmVjLmMgYi9uZXQvY29yZS9pb3ZlYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2JlOThiLi4wMDAwMDAwCi0tLSBhL25ldC9jb3JlL2lvdmVjLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLyoKLSAqCWlvdmVjIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4KLSAqCi0gKgotICoJCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqCQltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICoJCWFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgotICoJCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICoJRml4ZXM6Ci0gKgkJQW5kcmV3IEx1bm4JOglFcnJvcnMgaW4gaW92ZWMgY29weWluZy4KLSAqCQlQZWRybyBSb3F1ZQk6CUFkZGVkIG1lbWNweV9mcm9taW92ZWNlbmQgYW5kCi0gKgkJCQkJY3N1bV8uLi5fZnJvbWlvdmVjZW5kLgotICoJCUFuZGkgS2xlZW4JOglmaXhlZCBlcnJvciBoYW5kbGluZyBmb3IgMi4xCi0gKgkJQWxleGV5IEt1em5ldHNvdjoJMi4xIG9wdGltaXNhdGlvbnMKLSAqCQlBbmRpIEtsZWVuCToJRml4IGNzdW0qZnJvbWlvdmVjZW5kIGZvciBJUHY2LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW42Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0jaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+Ci0jaW5jbHVkZSA8bmV0L3NvY2suaD4KLQotLyoKLSAqCUFuZCBub3cgZm9yIHRoZSBhbGwtaW4tb25lOiBjb3B5IGFuZCBjaGVja3N1bSBmcm9tIGEgdXNlciBpb3ZlYwotICoJZGlyZWN0bHkgdG8gYSBkYXRhZ3JhbQotICoJQ2FsbHMgdG8gY3N1bV9wYXJ0aWFsIGJ1dCB0aGUgbGFzdCBtdXN0IGJlIGluIDMyIGJpdCBjaHVua3MKLSAqCi0gKglpcF9idWlsZF94bWl0IG11c3QgZW5zdXJlIHRoYXQgd2hlbiBmcmFnbWVudGluZyBvbmx5IHRoZSBsYXN0Ci0gKgljYWxsIHRvIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1bmFsaWduZWQgYWxzby4KLSAqLwotaW50IGNzdW1fcGFydGlhbF9jb3B5X2Zyb21pb3ZlY2VuZCh1bnNpZ25lZCBjaGFyICprZGF0YSwgc3RydWN0IGlvdmVjICppb3YsCi0JCQkJIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBsZW4sIF9fd3N1bSAqY3N1bXApCi17Ci0JX193c3VtIGNzdW0gPSAqY3N1bXA7Ci0JaW50IHBhcnRpYWxfY250ID0gMCwgZXJyID0gMDsKLQotCS8qIFNraXAgb3ZlciB0aGUgZmluaXNoZWQgaW92ZWNzICovCi0Jd2hpbGUgKG9mZnNldCA+PSBpb3YtPmlvdl9sZW4pIHsKLQkJb2Zmc2V0IC09IGlvdi0+aW92X2xlbjsKLQkJaW92Kys7Ci0JfQotCi0Jd2hpbGUgKGxlbiA+IDApIHsKLQkJdTggX191c2VyICpiYXNlID0gaW92LT5pb3ZfYmFzZSArIG9mZnNldDsKLQkJaW50IGNvcHkgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgaW92LT5pb3ZfbGVuIC0gb2Zmc2V0KTsKLQotCQlvZmZzZXQgPSAwOwotCi0JCS8qIFRoZXJlIGlzIGEgcmVtbmFudCBmcm9tIHByZXZpb3VzIGlvdi4gKi8KLQkJaWYgKHBhcnRpYWxfY250KSB7Ci0JCQlpbnQgcGFyX2xlbiA9IDQgLSBwYXJ0aWFsX2NudDsKLQotCQkJLyogaW92IGNvbXBvbmVudCBpcyB0b28gc2hvcnQgLi4uICovCi0JCQlpZiAocGFyX2xlbiA+IGNvcHkpIHsKLQkJCQlpZiAoY29weV9mcm9tX3VzZXIoa2RhdGEsIGJhc2UsIGNvcHkpKQotCQkJCQlnb3RvIG91dF9mYXVsdDsKLQkJCQlrZGF0YSArPSBjb3B5OwotCQkJCWJhc2UgKz0gY29weTsKLQkJCQlwYXJ0aWFsX2NudCArPSBjb3B5OwotCQkJCWxlbiAtPSBjb3B5OwotCQkJCWlvdisrOwotCQkJCWlmIChsZW4pCi0JCQkJCWNvbnRpbnVlOwotCQkJCSpjc3VtcCA9IGNzdW1fcGFydGlhbChrZGF0YSAtIHBhcnRpYWxfY250LAotCQkJCQkJCSBwYXJ0aWFsX2NudCwgY3N1bSk7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoa2RhdGEsIGJhc2UsIHBhcl9sZW4pKQotCQkJCWdvdG8gb3V0X2ZhdWx0OwotCQkJY3N1bSA9IGNzdW1fcGFydGlhbChrZGF0YSAtIHBhcnRpYWxfY250LCA0LCBjc3VtKTsKLQkJCWtkYXRhICs9IHBhcl9sZW47Ci0JCQliYXNlICArPSBwYXJfbGVuOwotCQkJY29weSAgLT0gcGFyX2xlbjsKLQkJCWxlbiAgIC09IHBhcl9sZW47Ci0JCQlwYXJ0aWFsX2NudCA9IDA7Ci0JCX0KLQotCQlpZiAobGVuID4gY29weSkgewotCQkJcGFydGlhbF9jbnQgPSBjb3B5ICUgNDsKLQkJCWlmIChwYXJ0aWFsX2NudCkgewotCQkJCWNvcHkgLT0gcGFydGlhbF9jbnQ7Ci0JCQkJaWYgKGNvcHlfZnJvbV91c2VyKGtkYXRhICsgY29weSwgYmFzZSArIGNvcHksCi0JCQkJCQlwYXJ0aWFsX2NudCkpCi0JCQkJCWdvdG8gb3V0X2ZhdWx0OwotCQkJfQotCQl9Ci0KLQkJaWYgKGNvcHkpIHsKLQkJCWNzdW0gPSBjc3VtX2FuZF9jb3B5X2Zyb21fdXNlcihiYXNlLCBrZGF0YSwgY29weSwKLQkJCQkJCQljc3VtLCAmZXJyKTsKLQkJCWlmIChlcnIpCi0JCQkJZ290byBvdXQ7Ci0JCX0KLQkJbGVuICAgLT0gY29weSArIHBhcnRpYWxfY250OwotCQlrZGF0YSArPSBjb3B5ICsgcGFydGlhbF9jbnQ7Ci0JCWlvdisrOwotCX0KLQkqY3N1bXAgPSBjc3VtOwotb3V0OgotCXJldHVybiBlcnI7Ci0KLW91dF9mYXVsdDoKLQllcnIgPSAtRUZBVUxUOwotCWdvdG8gb3V0OwotfQotRVhQT1JUX1NZTUJPTChjc3VtX3BhcnRpYWxfY29weV9mcm9taW92ZWNlbmQpOwotCi11bnNpZ25lZCBsb25nIGlvdl9wYWdlcyhjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IG9mZnNldCwKLQkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncykKLXsKLQl1bnNpZ25lZCBsb25nIHNlZywgYmFzZTsKLQlpbnQgcGFnZXMgPSAwLCBsZW4sIHNpemU7Ci0KLQl3aGlsZSAobnJfc2VncyAmJiAob2Zmc2V0ID49IGlvdi0+aW92X2xlbikpIHsKLQkJb2Zmc2V0IC09IGlvdi0+aW92X2xlbjsKLQkJKytpb3Y7Ci0JCS0tbnJfc2VnczsKLQl9Ci0KLQlmb3IgKHNlZyA9IDA7IHNlZyA8IG5yX3NlZ3M7IHNlZysrKSB7Ci0JCWJhc2UgPSAodW5zaWduZWQgbG9uZylpb3Zbc2VnXS5pb3ZfYmFzZSArIG9mZnNldDsKLQkJbGVuID0gaW92W3NlZ10uaW92X2xlbiAtIG9mZnNldDsKLQkJc2l6ZSA9ICgoYmFzZSAmIH5QQUdFX01BU0spICsgbGVuICsgflBBR0VfTUFTSykgPj4gUEFHRV9TSElGVDsKLQkJcGFnZXMgKz0gc2l6ZTsKLQkJb2Zmc2V0ID0gMDsKLQl9Ci0KLQlyZXR1cm4gcGFnZXM7Ci19Ci1FWFBPUlRfU1lNQk9MKGlvdl9wYWdlcyk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZWlnaGJvdXIuYyBiL25ldC9jb3JlL25laWdoYm91ci5jCmluZGV4IDhkNjE0YzkuLjcwZmU5ZTEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL25laWdoYm91ci5jCisrKyBiL25ldC9jb3JlL25laWdoYm91ci5jCkBAIC0xODg0LDcgKzE4ODQsOCBAQAogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCXJlYWRfdW5sb2NrX2JoKCZ0YmwtPmxvY2spOwotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiAKIG5sYV9wdXRfZmFpbHVyZToKIAlyZWFkX3VubG9ja19iaCgmdGJsLT5sb2NrKTsKQEAgLTE5MTcsNyArMTkxOCw4IEBACiAJCWdvdG8gZXJyb3V0OwogCiAJcmVhZF91bmxvY2tfYmgoJnRibC0+bG9jayk7Ci0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIGVycm91dDoKIAlyZWFkX3VubG9ja19iaCgmdGJsLT5sb2NrKTsKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwpAQCAtMjEyNiw3ICsyMTI4LDcgQEAKIAogCQlpZiAobmVpZ2h0YmxfZmlsbF9pbmZvKHNrYiwgdGJsLCBORVRMSU5LX0NCKGNiLT5za2IpLnBvcnRpZCwKIAkJCQkgICAgICAgY2ItPm5saC0+bmxtc2dfc2VxLCBSVE1fTkVXTkVJR0hUQkwsCi0JCQkJICAgICAgIE5MTV9GX01VTFRJKSA8PSAwKQorCQkJCSAgICAgICBOTE1fRl9NVUxUSSkgPCAwKQogCQkJYnJlYWs7CiAKIAkJbmlkeCA9IDA7CkBAIC0yMTQyLDcgKzIxNDQsNyBAQAogCQkJCQkJICAgICBORVRMSU5LX0NCKGNiLT5za2IpLnBvcnRpZCwKIAkJCQkJCSAgICAgY2ItPm5saC0+bmxtc2dfc2VxLAogCQkJCQkJICAgICBSVE1fTkVXTkVJR0hUQkwsCi0JCQkJCQkgICAgIE5MTV9GX01VTFRJKSA8PSAwKQorCQkJCQkJICAgICBOTE1fRl9NVUxUSSkgPCAwKQogCQkJCWdvdG8gb3V0OwogCQluZXh0OgogCQkJbmlkeCsrOwpAQCAtMjIwMiw3ICsyMjA0LDggQEAKIAkgICAgbmxhX3B1dChza2IsIE5EQV9DQUNIRUlORk8sIHNpemVvZihjaSksICZjaSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIAogbmxhX3B1dF9mYWlsdXJlOgogCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CkBAIC0yMjMyLDcgKzIyMzUsOCBAQAogCWlmIChubGFfcHV0KHNrYiwgTkRBX0RTVCwgdGJsLT5rZXlfbGVuLCBwbi0+a2V5KSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKQEAgLTIyNzAsNyArMjI3NCw3IEBACiAJCQlpZiAobmVpZ2hfZmlsbF9pbmZvKHNrYiwgbiwgTkVUTElOS19DQihjYi0+c2tiKS5wb3J0aWQsCiAJCQkJCSAgICBjYi0+bmxoLT5ubG1zZ19zZXEsCiAJCQkJCSAgICBSVE1fTkVXTkVJR0gsCi0JCQkJCSAgICBOTE1fRl9NVUxUSSkgPD0gMCkgeworCQkJCQkgICAgTkxNX0ZfTVVMVEkpIDwgMCkgewogCQkJCXJjID0gLTE7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC0yMzA3LDcgKzIzMTEsNyBAQAogCQkJaWYgKHBuZWlnaF9maWxsX2luZm8oc2tiLCBuLCBORVRMSU5LX0NCKGNiLT5za2IpLnBvcnRpZCwKIAkJCQkJICAgIGNiLT5ubGgtPm5sbXNnX3NlcSwKIAkJCQkJICAgIFJUTV9ORVdORUlHSCwKLQkJCQkJICAgIE5MTV9GX01VTFRJLCB0YmwpIDw9IDApIHsKKwkJCQkJICAgIE5MTV9GX01VTFRJLCB0YmwpIDwgMCkgewogCQkJCXJlYWRfdW5sb2NrX2JoKCZ0YmwtPmxvY2spOwogCQkJCXJjID0gLTE7CiAJCQkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMgYi9uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmMKaW5kZXggY2U3ODBjNy4uY2I1MjkwYiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jCisrKyBiL25ldC9jb3JlL25ldF9uYW1lc3BhY2UuYwpAQCAtMTUsNiArMTUsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNlcl9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KIApAQCAtMTQ0LDYgKzE0OCw3OCBAQAogCX0KIH0KIAorc3RhdGljIGludCBhbGxvY19uZXRpZChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXQgKnBlZXIsIGludCByZXFpZCkKK3sKKwlpbnQgbWluID0gMCwgbWF4ID0gMDsKKworCUFTU0VSVF9SVE5MKCk7CisKKwlpZiAocmVxaWQgPj0gMCkgeworCQltaW4gPSByZXFpZDsKKwkJbWF4ID0gcmVxaWQgKyAxOworCX0KKworCXJldHVybiBpZHJfYWxsb2MoJm5ldC0+bmV0bnNfaWRzLCBwZWVyLCBtaW4sIG1heCwgR0ZQX0tFUk5FTCk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBpZHJfZm9yX2VhY2goKS4gSWYgbmV0IGlzIGVxdWFsIHRvIHBlZXIsIHRoZQorICogZnVuY3Rpb24gcmV0dXJucyB0aGUgaWQgc28gdGhhdCBpZHJfZm9yX2VhY2goKSBzdG9wcy4gQmVjYXVzZSB3ZSBjYW5ub3QKKyAqIHJldHVybnMgdGhlIGlkIDAgKGlkcl9mb3JfZWFjaCgpIHdpbGwgbm90IHN0b3ApLCB3ZSByZXR1cm4gdGhlIG1hZ2ljIHZhbHVlCisgKiBORVRfSURfWkVSTyAoLTEpIGZvciBpdC4KKyAqLworI2RlZmluZSBORVRfSURfWkVSTyAtMQorc3RhdGljIGludCBuZXRfZXFfaWRyKGludCBpZCwgdm9pZCAqbmV0LCB2b2lkICpwZWVyKQoreworCWlmIChuZXRfZXEobmV0LCBwZWVyKSkKKwkJcmV0dXJuIGlkID8gOiBORVRfSURfWkVSTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX3BlZXJuZXQyaWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0ICpwZWVyLCBib29sIGFsbG9jKQoreworCWludCBpZCA9IGlkcl9mb3JfZWFjaCgmbmV0LT5uZXRuc19pZHMsIG5ldF9lcV9pZHIsIHBlZXIpOworCisJQVNTRVJUX1JUTkwoKTsKKworCS8qIE1hZ2ljIHZhbHVlIGZvciBpZCAwLiAqLworCWlmIChpZCA9PSBORVRfSURfWkVSTykKKwkJcmV0dXJuIDA7CisJaWYgKGlkID4gMCkKKwkJcmV0dXJuIGlkOworCisJaWYgKGFsbG9jKQorCQlyZXR1cm4gYWxsb2NfbmV0aWQobmV0LCBwZWVyLCAtMSk7CisKKwlyZXR1cm4gLUVOT0VOVDsKK30KKworLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBpZCBvZiBhIHBlZXIgbmV0bnMuIElmIG5vIGlkIGlzIGFzc2lnbmVkLCBvbmUgd2lsbAorICogYmUgYWxsb2NhdGVkIGFuZCByZXR1cm5lZC4KKyAqLworaW50IHBlZXJuZXQyaWQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0ICpwZWVyKQoreworCWludCBpZCA9IF9fcGVlcm5ldDJpZChuZXQsIHBlZXIsIHRydWUpOworCisJcmV0dXJuIGlkID49IDAgPyBpZCA6IE5FVE5TQV9OU0lEX05PVF9BU1NJR05FRDsKK30KK0VYUE9SVF9TWU1CT0wocGVlcm5ldDJpZCk7CisKK3N0cnVjdCBuZXQgKmdldF9uZXRfbnNfYnlfaWQoc3RydWN0IG5ldCAqbmV0LCBpbnQgaWQpCit7CisJc3RydWN0IG5ldCAqcGVlcjsKKworCWlmIChpZCA8IDApCisJCXJldHVybiBOVUxMOworCisJcmN1X3JlYWRfbG9jaygpOworCXBlZXIgPSBpZHJfZmluZCgmbmV0LT5uZXRuc19pZHMsIGlkKTsKKwlpZiAocGVlcikKKwkJZ2V0X25ldChwZWVyKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiBwZWVyOworfQorCiAvKgogICogc2V0dXBfbmV0IHJ1bnMgdGhlIGluaXRpYWxpemVycyBmb3IgdGhlIG5ldHdvcmsgbmFtZXNwYWNlIG9iamVjdC4KICAqLwpAQCAtMTU4LDYgKzIzNCw3IEBACiAJYXRvbWljX3NldCgmbmV0LT5wYXNzaXZlLCAxKTsKIAluZXQtPmRldl9iYXNlX3NlcSA9IDE7CiAJbmV0LT51c2VyX25zID0gdXNlcl9uczsKKwlpZHJfaW5pdCgmbmV0LT5uZXRuc19pZHMpOwogCiAjaWZkZWYgTkVUTlNfUkVGQ05UX0RFQlVHCiAJYXRvbWljX3NldCgmbmV0LT51c2VfY291bnQsIDApOwpAQCAtMjg4LDYgKzM2NSwxNCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkobmV0LCAmbmV0X2tpbGxfbGlzdCwgY2xlYW51cF9saXN0KSB7CiAJCWxpc3RfZGVsX3JjdSgmbmV0LT5saXN0KTsKIAkJbGlzdF9hZGRfdGFpbCgmbmV0LT5leGl0X2xpc3QsICZuZXRfZXhpdF9saXN0KTsKKwkJZm9yX2VhY2hfbmV0KHRtcCkgeworCQkJaW50IGlkID0gX19wZWVybmV0MmlkKHRtcCwgbmV0LCBmYWxzZSk7CisKKwkJCWlmIChpZCA+PSAwKQorCQkJCWlkcl9yZW1vdmUoJnRtcC0+bmV0bnNfaWRzLCBpZCk7CisJCX0KKwkJaWRyX2Rlc3Ryb3koJm5ldC0+bmV0bnNfaWRzKTsKKwogCX0KIAlydG5sX3VubG9jaygpOwogCkBAIC0zNjEsNiArNDQ2LDcgQEAKIAlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIH0KICNlbmRpZgorRVhQT1JUX1NZTUJPTF9HUEwoZ2V0X25ldF9uc19ieV9mZCk7CiAKIHN0cnVjdCBuZXQgKmdldF9uZXRfbnNfYnlfcGlkKHBpZF90IHBpZCkKIHsKQEAgLTQwMiw2ICs0ODgsMTMwIEBACiAJLmV4aXQgPSBuZXRfbnNfbmV0X2V4aXQsCiB9OwogCitzdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kgcnRubF9uZXRfcG9saWN5W05FVE5TQV9NQVggKyAxXSA9IHsKKwlbTkVUTlNBX05PTkVdCQk9IHsgLnR5cGUgPSBOTEFfVU5TUEVDIH0sCisJW05FVE5TQV9OU0lEXQkJPSB7IC50eXBlID0gTkxBX1MzMiB9LAorCVtORVROU0FfUElEXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtORVROU0FfRkRdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCit9OworCitzdGF0aWMgaW50IHJ0bmxfbmV0X25ld2lkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoKQoreworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOworCXN0cnVjdCBubGF0dHIgKnRiW05FVE5TQV9NQVggKyAxXTsKKwlzdHJ1Y3QgbmV0ICpwZWVyOworCWludCBuc2lkLCBlcnI7CisKKwllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZihzdHJ1Y3QgcnRnZW5tc2cpLCB0YiwgTkVUTlNBX01BWCwKKwkJCSAgcnRubF9uZXRfcG9saWN5KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlpZiAoIXRiW05FVE5TQV9OU0lEXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbnNpZCA9IG5sYV9nZXRfczMyKHRiW05FVE5TQV9OU0lEXSk7CisKKwlpZiAodGJbTkVUTlNBX1BJRF0pCisJCXBlZXIgPSBnZXRfbmV0X25zX2J5X3BpZChubGFfZ2V0X3UzMih0YltORVROU0FfUElEXSkpOworCWVsc2UgaWYgKHRiW05FVE5TQV9GRF0pCisJCXBlZXIgPSBnZXRfbmV0X25zX2J5X2ZkKG5sYV9nZXRfdTMyKHRiW05FVE5TQV9GRF0pKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCWlmIChJU19FUlIocGVlcikpCisJCXJldHVybiBQVFJfRVJSKHBlZXIpOworCisJaWYgKF9fcGVlcm5ldDJpZChuZXQsIHBlZXIsIGZhbHNlKSA+PSAwKSB7CisJCWVyciA9IC1FRVhJU1Q7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IGFsbG9jX25ldGlkKG5ldCwgcGVlciwgbnNpZCk7CisJaWYgKGVyciA+IDApCisJCWVyciA9IDA7CitvdXQ6CisJcHV0X25ldChwZWVyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHJ0bmxfbmV0X2dldF9zaXplKHZvaWQpCit7CisJcmV0dXJuIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRnZW5tc2cpKQorCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzMzIpKSAvKiBORVROU0FfTlNJRCAqLworCSAgICAgICA7Cit9CisKK3N0YXRpYyBpbnQgcnRubF9uZXRfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLCB1MzIgc2VxLCBpbnQgZmxhZ3MsCisJCQkgaW50IGNtZCwgc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0ICpwZWVyKQoreworCXN0cnVjdCBubG1zZ2hkciAqbmxoOworCXN0cnVjdCBydGdlbm1zZyAqcnRoOworCWludCBpZDsKKworCUFTU0VSVF9SVE5MKCk7CisKKwlubGggPSBubG1zZ19wdXQoc2tiLCBwb3J0aWQsIHNlcSwgY21kLCBzaXplb2YoKnJ0aCksIGZsYWdzKTsKKwlpZiAoIW5saCkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCXJ0aCA9IG5sbXNnX2RhdGEobmxoKTsKKwlydGgtPnJ0Z2VuX2ZhbWlseSA9IEFGX1VOU1BFQzsKKworCWlkID0gX19wZWVybmV0MmlkKG5ldCwgcGVlciwgZmFsc2UpOworCWlmICAoaWQgPCAwKQorCQlpZCA9IE5FVE5TQV9OU0lEX05PVF9BU1NJR05FRDsKKwlpZiAobmxhX3B1dF9zMzIoc2tiLCBORVROU0FfTlNJRCwgaWQpKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CisKK25sYV9wdXRfZmFpbHVyZToKKwlubG1zZ19jYW5jZWwoc2tiLCBubGgpOworCXJldHVybiAtRU1TR1NJWkU7Cit9CisKK3N0YXRpYyBpbnQgcnRubF9uZXRfZ2V0aWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgpCit7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CisJc3RydWN0IG5sYXR0ciAqdGJbTkVUTlNBX01BWCArIDFdOworCXN0cnVjdCBza19idWZmICptc2c7CisJaW50IGVyciA9IC1FTk9CVUZTOworCXN0cnVjdCBuZXQgKnBlZXI7CisKKwllcnIgPSBubG1zZ19wYXJzZShubGgsIHNpemVvZihzdHJ1Y3QgcnRnZW5tc2cpLCB0YiwgTkVUTlNBX01BWCwKKwkJCSAgcnRubF9uZXRfcG9saWN5KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlpZiAodGJbTkVUTlNBX1BJRF0pCisJCXBlZXIgPSBnZXRfbmV0X25zX2J5X3BpZChubGFfZ2V0X3UzMih0YltORVROU0FfUElEXSkpOworCWVsc2UgaWYgKHRiW05FVE5TQV9GRF0pCisJCXBlZXIgPSBnZXRfbmV0X25zX2J5X2ZkKG5sYV9nZXRfdTMyKHRiW05FVE5TQV9GRF0pKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKElTX0VSUihwZWVyKSkKKwkJcmV0dXJuIFBUUl9FUlIocGVlcik7CisKKwltc2cgPSBubG1zZ19uZXcocnRubF9uZXRfZ2V0X3NpemUoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gcnRubF9uZXRfZmlsbChtc2csIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQsIG5saC0+bmxtc2dfc2VxLCAwLAorCQkJICAgIFJUTV9HRVROU0lELCBuZXQsIHBlZXIpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycl9vdXQ7CisKKwllcnIgPSBydG5sX3VuaWNhc3QobXNnLCBuZXQsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpOworCWdvdG8gb3V0OworCitlcnJfb3V0OgorCW5sbXNnX2ZyZWUobXNnKTsKK291dDoKKwlwdXRfbmV0KHBlZXIpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IG5ldF9uc19pbml0KHZvaWQpCiB7CiAJc3RydWN0IG5ldF9nZW5lcmljICpuZzsKQEAgLTQzNSw2ICs2NDUsOSBAQAogCiAJcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmbmV0X25zX29wcyk7CiAKKwlydG5sX3JlZ2lzdGVyKFBGX1VOU1BFQywgUlRNX05FV05TSUQsIHJ0bmxfbmV0X25ld2lkLCBOVUxMLCBOVUxMKTsKKwlydG5sX3JlZ2lzdGVyKFBGX1VOU1BFQywgUlRNX0dFVE5TSUQsIHJ0bmxfbmV0X2dldGlkLCBOVUxMLCBOVUxMKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRwb2xsLmMgYi9uZXQvY29yZS9uZXRwb2xsLmMKaW5kZXggZTBhZDVkMS4uYzEyNmE4NyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0cG9sbC5jCisrKyBiL25ldC9jb3JlL25ldHBvbGwuYwpAQCAtNzcsNyArNzcsNyBAQAogCiAJZmVhdHVyZXMgPSBuZXRpZl9za2JfZmVhdHVyZXMoc2tiKTsKIAotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikgJiYKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSAmJgogCSAgICAhdmxhbl9od19vZmZsb2FkX2NhcGFibGUoZmVhdHVyZXMsIHNrYi0+dmxhbl9wcm90bykpIHsKIAkJc2tiID0gX192bGFuX2h3YWNjZWxfcHVzaF9pbnNpZGUoc2tiKTsKIAkJaWYgKHVubGlrZWx5KCFza2IpKSB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IGRhOTM0ZmMuLjlmYTI1YjAgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0yODQyLDI1ICsyODQyLDI1IEBACiAJc2tiLT5kZXYgPSBvZGV2OwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKIAorCXBrdGdlbl9maW5hbGl6ZV9za2IocGt0X2Rldiwgc2tiLCBkYXRhbGVuKTsKKwogCWlmICghKHBrdF9kZXYtPmZsYWdzICYgRl9VRFBDU1VNKSkgewogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAJfSBlbHNlIGlmIChvZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVjRfQ1NVTSkgewogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1BBUlRJQUw7CiAJCXNrYi0+Y3N1bSA9IDA7Ci0JCXVkcDRfaHdjc3VtKHNrYiwgdWRwaC0+c291cmNlLCB1ZHBoLT5kZXN0KTsKKwkJdWRwNF9od2NzdW0oc2tiLCBpcGgtPnNhZGRyLCBpcGgtPmRhZGRyKTsKIAl9IGVsc2UgewotCQlfX3dzdW0gY3N1bSA9IHVkcF9jc3VtKHNrYik7CisJCV9fd3N1bSBjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSwgZGF0YWxlbiArIDgsIDApOwogCiAJCS8qIGFkZCBwcm90b2NvbC1kZXBlbmRlbnQgcHNldWRvLWhlYWRlciAqLwotCQl1ZHBoLT5jaGVjayA9IGNzdW1fdGNwdWRwX21hZ2ljKHVkcGgtPnNvdXJjZSwgdWRwaC0+ZGVzdCwKKwkJdWRwaC0+Y2hlY2sgPSBjc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAogCQkJCQkJZGF0YWxlbiArIDgsIElQUFJPVE9fVURQLCBjc3VtKTsKIAogCQlpZiAodWRwaC0+Y2hlY2sgPT0gMCkKIAkJCXVkcGgtPmNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7CiAJfQogCi0JcGt0Z2VuX2ZpbmFsaXplX3NrYihwa3RfZGV2LCBza2IsIGRhdGFsZW4pOwotCiAjaWZkZWYgQ09ORklHX1hGUk0KIAlpZiAoIXByb2Nlc3NfaXBzZWMocGt0X2Rldiwgc2tiLCBwcm90b2NvbCkpCiAJCXJldHVybiBOVUxMOwpAQCAtMjk3Niw2ICsyOTc2LDggQEAKIAlza2ItPmRldiA9IG9kZXY7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCisJcGt0Z2VuX2ZpbmFsaXplX3NrYihwa3RfZGV2LCBza2IsIGRhdGFsZW4pOworCiAJaWYgKCEocGt0X2Rldi0+ZmxhZ3MgJiBGX1VEUENTVU0pKSB7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAl9IGVsc2UgaWYgKG9kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9WNl9DU1VNKSB7CkBAIC0yOTg0LDcgKzI5ODYsNyBAQAogCQlza2ItPmNzdW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgY2hlY2spOwogCQl1ZHBoLT5jaGVjayA9IH5jc3VtX2lwdjZfbWFnaWMoJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyLCB1ZHBsZW4sIElQUFJPVE9fVURQLCAwKTsKIAl9IGVsc2UgewotCQlfX3dzdW0gY3N1bSA9IHVkcF9jc3VtKHNrYik7CisJCV9fd3N1bSBjc3VtID0gc2tiX2NoZWNrc3VtKHNrYiwgc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKSwgdWRwbGVuLCAwKTsKIAogCQkvKiBhZGQgcHJvdG9jb2wtZGVwZW5kZW50IHBzZXVkby1oZWFkZXIgKi8KIAkJdWRwaC0+Y2hlY2sgPSBjc3VtX2lwdjZfbWFnaWMoJmlwaC0+c2FkZHIsICZpcGgtPmRhZGRyLCB1ZHBsZW4sIElQUFJPVE9fVURQLCBjc3VtKTsKQEAgLTI5OTMsOCArMjk5NSw2IEBACiAJCQl1ZHBoLT5jaGVjayA9IENTVU1fTUFOR0xFRF8wOwogCX0KIAotCXBrdGdlbl9maW5hbGl6ZV9za2IocGt0X2Rldiwgc2tiLCBkYXRhbGVuKTsKLQogCXJldHVybiBza2I7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggOWNmNmZlOS4uNWJlNDk5YiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CiAjaW5jbHVkZSA8bmV0L3VkcC5oPgorI2luY2x1ZGUgPG5ldC90Y3AuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9wa3Rfc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvZmliX3J1bGVzLmg+CkBAIC02NjksOSArNjcwLDE5IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgUlRBWF9NQVg7IGkrKykgewogCQlpZiAobWV0cmljc1tpXSkgeworCQkJaWYgKGkgPT0gUlRBWF9DQ19BTEdPIC0gMSkgeworCQkJCWNoYXIgdG1wW1RDUF9DQV9OQU1FX01BWF0sICpuYW1lOworCisJCQkJbmFtZSA9IHRjcF9jYV9nZXRfbmFtZV9ieV9rZXkobWV0cmljc1tpXSwgdG1wKTsKKwkJCQlpZiAoIW5hbWUpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChubGFfcHV0X3N0cmluZyhza2IsIGkgKyAxLCBuYW1lKSkKKwkJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJCQl9IGVsc2UgeworCQkJCWlmIChubGFfcHV0X3UzMihza2IsIGkgKyAxLCBtZXRyaWNzW2ldKSkKKwkJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJCQl9CiAJCQl2YWxpZCsrOwotCQkJaWYgKG5sYV9wdXRfdTMyKHNrYiwgaSsxLCBtZXRyaWNzW2ldKSkKLQkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAkJfQogCX0KIApAQCAtODY0LDYgKzg3NSw3IEBACiAJICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogSUZMQV9PUEVSU1RBVEUgKi8KIAkgICAgICAgKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBJRkxBX0xJTktNT0RFICovCiAJICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogSUZMQV9DQVJSSUVSX0NIQU5HRVMgKi8KKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBJRkxBX0xJTktfTkVUTlNJRCAqLwogCSAgICAgICArIG5sYV90b3RhbF9zaXplKGV4dF9maWx0ZXJfbWFzawogCQkJICAgICAgICAmIFJURVhUX0ZJTFRFUl9WRiA/IDQgOiAwKSAvKiBJRkxBX05VTV9WRiAqLwogCSAgICAgICArIHJ0bmxfdmZpbmZvX3NpemUoZGV2LCBleHRfZmlsdGVyX21hc2spIC8qIElGTEFfVkZJTkZPX0xJU1QgKi8KQEAgLTExNTgsNiArMTE3MCwxOCBAQAogCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAJfQogCisJaWYgKGRldi0+cnRubF9saW5rX29wcyAmJgorCSAgICBkZXYtPnJ0bmxfbGlua19vcHMtPmdldF9saW5rX25ldCkgeworCQlzdHJ1Y3QgbmV0ICpsaW5rX25ldCA9IGRldi0+cnRubF9saW5rX29wcy0+Z2V0X2xpbmtfbmV0KGRldik7CisKKwkJaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCBsaW5rX25ldCkpIHsKKwkJCWludCBpZCA9IHBlZXJuZXQyaWQoZGV2X25ldChkZXYpLCBsaW5rX25ldCk7CisKKwkJCWlmIChubGFfcHV0X3MzMihza2IsIElGTEFfTElOS19ORVROU0lELCBpZCkpCisJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJCX0KKwl9CisKIAlpZiAoIShhZl9zcGVjID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBJRkxBX0FGX1NQRUMpKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKQEAgLTExODgsNyArMTIxMiw4IEBACiAKIAlubGFfbmVzdF9lbmQoc2tiLCBhZl9zcGVjKTsKIAotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiAKIG5sYV9wdXRfZmFpbHVyZToKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwpAQCAtMTIyMyw2ICsxMjQ4LDcgQEAKIAlbSUZMQV9QSFlTX1BPUlRfSURdCT0geyAudHlwZSA9IE5MQV9CSU5BUlksIC5sZW4gPSBNQVhfUEhZU19JVEVNX0lEX0xFTiB9LAogCVtJRkxBX0NBUlJJRVJfQ0hBTkdFU10JPSB7IC50eXBlID0gTkxBX1UzMiB9LCAgLyogaWdub3JlZCAqLwogCVtJRkxBX1BIWVNfU1dJVENIX0lEXQk9IHsgLnR5cGUgPSBOTEFfQklOQVJZLCAubGVuID0gTUFYX1BIWVNfSVRFTV9JRF9MRU4gfSwKKwlbSUZMQV9MSU5LX05FVE5TSURdCT0geyAudHlwZSA9IE5MQV9TMzIgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpZmxhX2luZm9fcG9saWN5W0lGTEFfSU5GT19NQVgrMV0gPSB7CkBAIC0xMjM3LDE4ICsxMjYzLDEyIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaWZsYV92Zl9wb2xpY3lbSUZMQV9WRl9NQVgrMV0gPSB7Ci0JW0lGTEFfVkZfTUFDXQkJPSB7IC50eXBlID0gTkxBX0JJTkFSWSwKLQkJCQkgICAgLmxlbiA9IHNpemVvZihzdHJ1Y3QgaWZsYV92Zl9tYWMpIH0sCi0JW0lGTEFfVkZfVkxBTl0JCT0geyAudHlwZSA9IE5MQV9CSU5BUlksCi0JCQkJICAgIC5sZW4gPSBzaXplb2Yoc3RydWN0IGlmbGFfdmZfdmxhbikgfSwKLQlbSUZMQV9WRl9UWF9SQVRFXQk9IHsgLnR5cGUgPSBOTEFfQklOQVJZLAotCQkJCSAgICAubGVuID0gc2l6ZW9mKHN0cnVjdCBpZmxhX3ZmX3R4X3JhdGUpIH0sCi0JW0lGTEFfVkZfU1BPT0ZDSEtdCT0geyAudHlwZSA9IE5MQV9CSU5BUlksCi0JCQkJICAgIC5sZW4gPSBzaXplb2Yoc3RydWN0IGlmbGFfdmZfc3Bvb2ZjaGspIH0sCi0JW0lGTEFfVkZfUkFURV0JCT0geyAudHlwZSA9IE5MQV9CSU5BUlksCi0JCQkJICAgIC5sZW4gPSBzaXplb2Yoc3RydWN0IGlmbGFfdmZfcmF0ZSkgfSwKLQlbSUZMQV9WRl9MSU5LX1NUQVRFXQk9IHsgLnR5cGUgPSBOTEFfQklOQVJZLAotCQkJCSAgICAubGVuID0gc2l6ZW9mKHN0cnVjdCBpZmxhX3ZmX2xpbmtfc3RhdGUpIH0sCisJW0lGTEFfVkZfTUFDXQkJPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IGlmbGFfdmZfbWFjKSB9LAorCVtJRkxBX1ZGX1ZMQU5dCQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgaWZsYV92Zl92bGFuKSB9LAorCVtJRkxBX1ZGX1RYX1JBVEVdCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBpZmxhX3ZmX3R4X3JhdGUpIH0sCisJW0lGTEFfVkZfU1BPT0ZDSEtdCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBpZmxhX3ZmX3Nwb29mY2hrKSB9LAorCVtJRkxBX1ZGX1JBVEVdCQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgaWZsYV92Zl9yYXRlKSB9LAorCVtJRkxBX1ZGX0xJTktfU1RBVEVdCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBpZmxhX3ZmX2xpbmtfc3RhdGUpIH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaWZsYV9wb3J0X3BvbGljeVtJRkxBX1BPUlRfTUFYKzFdID0gewpAQCAtMTMxNSw3ICsxMzM1LDcgQEAKIAkJCSAqLwogCQkJV0FSTl9PTigoZXJyID09IC1FTVNHU0laRSkgJiYgKHNrYi0+bGVuID09IDApKTsKIAotCQkJaWYgKGVyciA8PSAwKQorCQkJaWYgKGVyciA8IDApCiAJCQkJZ290byBvdXQ7CiAKIAkJCW5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgbmxtc2dfaGRyKHNrYikpOwpAQCAtMTk5Niw3ICsyMDE2LDcgQEAKIAkJc3RydWN0IG5sYXR0ciAqc2xhdmVfYXR0clttX29wcyA/IG1fb3BzLT5zbGF2ZV9tYXh0eXBlICsgMSA6IDBdOwogCQlzdHJ1Y3QgbmxhdHRyICoqZGF0YSA9IE5VTEw7CiAJCXN0cnVjdCBubGF0dHIgKipzbGF2ZV9kYXRhID0gTlVMTDsKLQkJc3RydWN0IG5ldCAqZGVzdF9uZXQ7CisJCXN0cnVjdCBuZXQgKmRlc3RfbmV0LCAqbGlua19uZXQgPSBOVUxMOwogCiAJCWlmIChvcHMpIHsKIAkJCWlmIChvcHMtPm1heHR5cGUgJiYgbGlua2luZm9bSUZMQV9JTkZPX0RBVEFdKSB7CkBAIC0yMTAyLDcgKzIxMjIsMTggQEAKIAkJaWYgKElTX0VSUihkZXN0X25ldCkpCiAJCQlyZXR1cm4gUFRSX0VSUihkZXN0X25ldCk7CiAKLQkJZGV2ID0gcnRubF9jcmVhdGVfbGluayhkZXN0X25ldCwgaWZuYW1lLCBuYW1lX2Fzc2lnbl90eXBlLCBvcHMsIHRiKTsKKwkJaWYgKHRiW0lGTEFfTElOS19ORVROU0lEXSkgeworCQkJaW50IGlkID0gbmxhX2dldF9zMzIodGJbSUZMQV9MSU5LX05FVE5TSURdKTsKKworCQkJbGlua19uZXQgPSBnZXRfbmV0X25zX2J5X2lkKGRlc3RfbmV0LCBpZCk7CisJCQlpZiAoIWxpbmtfbmV0KSB7CisJCQkJZXJyID0gIC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKworCQlkZXYgPSBydG5sX2NyZWF0ZV9saW5rKGxpbmtfbmV0ID8gOiBkZXN0X25ldCwgaWZuYW1lLAorCQkJCSAgICAgICBuYW1lX2Fzc2lnbl90eXBlLCBvcHMsIHRiKTsKIAkJaWYgKElTX0VSUihkZXYpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGRldik7CiAJCQlnb3RvIG91dDsKQEAgLTIxMTEsNyArMjE0Miw3IEBACiAJCWRldi0+aWZpbmRleCA9IGlmbS0+aWZpX2luZGV4OwogCiAJCWlmIChvcHMtPm5ld2xpbmspIHsKLQkJCWVyciA9IG9wcy0+bmV3bGluayhuZXQsIGRldiwgdGIsIGRhdGEpOworCQkJZXJyID0gb3BzLT5uZXdsaW5rKGxpbmtfbmV0ID8gOiBuZXQsIGRldiwgdGIsIGRhdGEpOwogCQkJLyogRHJpdmVycyBzaG91bGQgY2FsbCBmcmVlX25ldGRldigpIGluIC0+ZGVzdHJ1Y3RvcgogCQkJICogYW5kIHVucmVnaXN0ZXIgaXQgb24gZmFpbHVyZSBhZnRlciByZWdpc3RyYXRpb24KIAkJCSAqIHNvIHRoYXQgZGV2aWNlIGNvdWxkIGJlIGZpbmFsbHkgZnJlZWQgaW4gcnRubF91bmxvY2suCkBAIC0yMTMwLDkgKzIxNjEsMTkgQEAKIAkJCX0KIAkJfQogCQllcnIgPSBydG5sX2NvbmZpZ3VyZV9saW5rKGRldiwgaWZtKTsKLQkJaWYgKGVyciA8IDApCisJCWlmIChlcnIgPCAwKSB7CiAJCQl1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAobGlua19uZXQpIHsKKwkJCWVyciA9IGRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZShkZXYsIGRlc3RfbmV0LCBpZm5hbWUpOworCQkJaWYgKGVyciA8IDApCisJCQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKKwkJfQogb3V0OgorCQlpZiAobGlua19uZXQpCisJCQlwdXRfbmV0KGxpbmtfbmV0KTsKIAkJcHV0X25ldChkZXN0X25ldCk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMjMxNSw3ICsyMzU2LDggQEAKIAlpZiAobmxhX3B1dChza2IsIE5EQV9MTEFERFIsIEVUSF9BTEVOLCBhZGRyKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKQEAgLTI2OTgsMTAgKzI3NDAsMTEgQEAKIAkJCQkJCQkgaWR4KTsKIAkJfQogCi0JCWlkeCA9IG5kb19kZmx0X2ZkYl9kdW1wKHNrYiwgY2IsIGRldiwgTlVMTCwgaWR4KTsKIAkJaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX2ZkYl9kdW1wKQotCQkJaWR4ID0gZGV2LT5uZXRkZXZfb3BzLT5uZG9fZmRiX2R1bXAoc2tiLCBjYiwgYmRldiwgZGV2LAorCQkJaWR4ID0gZGV2LT5uZXRkZXZfb3BzLT5uZG9fZmRiX2R1bXAoc2tiLCBjYiwgZGV2LCBOVUxMLAogCQkJCQkJCSAgICBpZHgpOworCQllbHNlCisJCQlpZHggPSBuZG9fZGZsdF9mZGJfZHVtcChza2IsIGNiLCBkZXYsIE5VTEwsIGlkeCk7CiAKIAkJY29wcyA9IE5VTEw7CiAJfQpAQCAtMjc5Nyw3ICsyODQwLDggQEAKIAogCW5sYV9uZXN0X2VuZChza2IsIHByb3RpbmZvKTsKIAotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiBubGFfcHV0X2ZhaWx1cmU6CiAJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKIAlyZXR1cm4gLUVNU0dTSVpFOwpAQCAtMjg2OCwzOSArMjkxMiwzNSBAQAogCQkrIG5sYV90b3RhbF9zaXplKHNpemVvZih1MTYpKTsJLyogSUZMQV9CUklER0VfTU9ERSAqLwogfQogCi1zdGF0aWMgaW50IHJ0bmxfYnJpZGdlX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgZmxhZ3MpCitzdGF0aWMgaW50IHJ0bmxfYnJpZGdlX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0KGRldik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZXJyID0gLUVPUE5PVFNVUFA7CiAKKwlpZiAoIWRldi0+bmV0ZGV2X29wcy0+bmRvX2JyaWRnZV9nZXRsaW5rKQorCQlyZXR1cm4gMDsKKwogCXNrYiA9IG5sbXNnX25ldyhicmlkZ2Vfbmxtc2dfc2l6ZSgpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycm91dDsKIAl9CiAKLQlpZiAoKCFmbGFncyB8fCAoZmxhZ3MgJiBCUklER0VfRkxBR1NfTUFTVEVSKSkgJiYKLQkgICAgYnJfZGV2ICYmIGJyX2Rldi0+bmV0ZGV2X29wcy0+bmRvX2JyaWRnZV9nZXRsaW5rKSB7Ci0JCWVyciA9IGJyX2Rldi0+bmV0ZGV2X29wcy0+bmRvX2JyaWRnZV9nZXRsaW5rKHNrYiwgMCwgMCwgZGV2LCAwKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGVycm91dDsKLQl9CisJZXJyID0gZGV2LT5uZXRkZXZfb3BzLT5uZG9fYnJpZGdlX2dldGxpbmsoc2tiLCAwLCAwLCBkZXYsIDApOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm91dDsKIAotCWlmICgoZmxhZ3MgJiBCUklER0VfRkxBR1NfU0VMRikgJiYKLQkgICAgZGV2LT5uZXRkZXZfb3BzLT5uZG9fYnJpZGdlX2dldGxpbmspIHsKLQkJZXJyID0gZGV2LT5uZXRkZXZfb3BzLT5uZG9fYnJpZGdlX2dldGxpbmsoc2tiLCAwLCAwLCBkZXYsIDApOwotCQlpZiAoZXJyIDwgMCkKLQkJCWdvdG8gZXJyb3V0OwotCX0KKwlpZiAoIXNrYi0+bGVuKQorCQlnb3RvIGVycm91dDsKIAogCXJ0bmxfbm90aWZ5KHNrYiwgbmV0LCAwLCBSVE5MR1JQX0xJTkssIE5VTEwsIEdGUF9BVE9NSUMpOwogCXJldHVybiAwOwogZXJyb3V0OgogCVdBUk5fT04oZXJyID09IC1FTVNHU0laRSk7CiAJa2ZyZWVfc2tiKHNrYik7Ci0JcnRubF9zZXRfc2tfZXJyKG5ldCwgUlROTEdSUF9MSU5LLCBlcnIpOworCWlmIChlcnIpCisJCXJ0bmxfc2V0X3NrX2VycihuZXQsIFJUTkxHUlBfTElOSywgZXJyKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yOTExLDcgKzI5NTEsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IG5sYXR0ciAqYnJfc3BlYywgKmF0dHIgPSBOVUxMOwogCWludCByZW0sIGVyciA9IC1FT1BOT1RTVVBQOwotCXUxNiBvZmxhZ3MsIGZsYWdzID0gMDsKKwl1MTYgZmxhZ3MgPSAwOwogCWJvb2wgaGF2ZV9mbGFncyA9IGZhbHNlOwogCiAJaWYgKG5sbXNnX2xlbihubGgpIDwgc2l6ZW9mKCppZm0pKQpAQCAtMjk0MSw4ICsyOTgxLDYgQEAKIAkJfQogCX0KIAotCW9mbGFncyA9IGZsYWdzOwotCiAJaWYgKCFmbGFncyB8fCAoZmxhZ3MgJiBCUklER0VfRkxBR1NfTUFTVEVSKSkgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2ID0gbmV0ZGV2X21hc3Rlcl91cHBlcl9kZXZfZ2V0KGRldik7CiAKQEAgLTI5NTEsNyArMjk4OSw3IEBACiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWVyciA9IGJyX2Rldi0+bmV0ZGV2X29wcy0+bmRvX2JyaWRnZV9zZXRsaW5rKGRldiwgbmxoKTsKKwkJZXJyID0gYnJfZGV2LT5uZXRkZXZfb3BzLT5uZG9fYnJpZGdlX3NldGxpbmsoZGV2LCBubGgsIGZsYWdzKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCkBAIC0yOTYyLDE3ICszMDAwLDIwIEBACiAJCWlmICghZGV2LT5uZXRkZXZfb3BzLT5uZG9fYnJpZGdlX3NldGxpbmspCiAJCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZWxzZQotCQkJZXJyID0gZGV2LT5uZXRkZXZfb3BzLT5uZG9fYnJpZGdlX3NldGxpbmsoZGV2LCBubGgpOwotCi0JCWlmICghZXJyKQorCQkJZXJyID0gZGV2LT5uZXRkZXZfb3BzLT5uZG9fYnJpZGdlX3NldGxpbmsoZGV2LCBubGgsCisJCQkJCQkJCSAgZmxhZ3MpOworCQlpZiAoIWVycikgewogCQkJZmxhZ3MgJj0gfkJSSURHRV9GTEFHU19TRUxGOworCisJCQkvKiBHZW5lcmF0ZSBldmVudCB0byBub3RpZnkgdXBwZXIgbGF5ZXIgb2YgYnJpZGdlCisJCQkgKiBjaGFuZ2UKKwkJCSAqLworCQkJZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldik7CisJCX0KIAl9CiAKIAlpZiAoaGF2ZV9mbGFncykKIAkJbWVtY3B5KG5sYV9kYXRhKGF0dHIpLCAmZmxhZ3MsIHNpemVvZihmbGFncykpOwotCS8qIEdlbmVyYXRlIGV2ZW50IHRvIG5vdGlmeSB1cHBlciBsYXllciBvZiBicmlkZ2UgY2hhbmdlICovCi0JaWYgKCFlcnIpCi0JCWVyciA9IHJ0bmxfYnJpZGdlX25vdGlmeShkZXYsIG9mbGFncyk7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTI5ODQsNyArMzAyNSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmxhdHRyICpicl9zcGVjLCAqYXR0ciA9IE5VTEw7CiAJaW50IHJlbSwgZXJyID0gLUVPUE5PVFNVUFA7Ci0JdTE2IG9mbGFncywgZmxhZ3MgPSAwOworCXUxNiBmbGFncyA9IDA7CiAJYm9vbCBoYXZlX2ZsYWdzID0gZmFsc2U7CiAKIAlpZiAobmxtc2dfbGVuKG5saCkgPCBzaXplb2YoKmlmbSkpCkBAIC0zMDE0LDggKzMwNTUsNiBAQAogCQl9CiAJfQogCi0Jb2ZsYWdzID0gZmxhZ3M7Ci0KIAlpZiAoIWZsYWdzIHx8IChmbGFncyAmIEJSSURHRV9GTEFHU19NQVNURVIpKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXQoZGV2KTsKIApAQCAtMzAyNCw3ICszMDYzLDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJZXJyID0gYnJfZGV2LT5uZXRkZXZfb3BzLT5uZG9fYnJpZGdlX2RlbGxpbmsoZGV2LCBubGgpOworCQllcnIgPSBicl9kZXYtPm5ldGRldl9vcHMtPm5kb19icmlkZ2VfZGVsbGluayhkZXYsIG5saCwgZmxhZ3MpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAKQEAgLTMwMzUsMTcgKzMwNzQsMjEgQEAKIAkJaWYgKCFkZXYtPm5ldGRldl9vcHMtPm5kb19icmlkZ2VfZGVsbGluaykKIAkJCWVyciA9IC1FT1BOT1RTVVBQOwogCQllbHNlCi0JCQllcnIgPSBkZXYtPm5ldGRldl9vcHMtPm5kb19icmlkZ2VfZGVsbGluayhkZXYsIG5saCk7CisJCQllcnIgPSBkZXYtPm5ldGRldl9vcHMtPm5kb19icmlkZ2VfZGVsbGluayhkZXYsIG5saCwKKwkJCQkJCQkJICBmbGFncyk7CiAKLQkJaWYgKCFlcnIpCisJCWlmICghZXJyKSB7CiAJCQlmbGFncyAmPSB+QlJJREdFX0ZMQUdTX1NFTEY7CisKKwkJCS8qIEdlbmVyYXRlIGV2ZW50IHRvIG5vdGlmeSB1cHBlciBsYXllciBvZiBicmlkZ2UKKwkJCSAqIGNoYW5nZQorCQkJICovCisJCQllcnIgPSBydG5sX2JyaWRnZV9ub3RpZnkoZGV2KTsKKwkJfQogCX0KIAogCWlmIChoYXZlX2ZsYWdzKQogCQltZW1jcHkobmxhX2RhdGEoYXR0ciksICZmbGFncywgc2l6ZW9mKGZsYWdzKSk7Ci0JLyogR2VuZXJhdGUgZXZlbnQgdG8gbm90aWZ5IHVwcGVyIGxheWVyIG9mIGJyaWRnZSBjaGFuZ2UgKi8KLQlpZiAoIWVycikKLQkJZXJyID0gcnRubF9icmlkZ2Vfbm90aWZ5KGRldiwgb2ZsYWdzKTsKIG91dDoKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzEzNSw2ICszMTc4LDcgQEAKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSX0ZJTkFMOgogCWNhc2UgTkVUREVWX1JFTEVBU0U6CiAJY2FzZSBORVRERVZfSk9JTjoKKwljYXNlIE5FVERFVl9CT05ESU5HX0lORk86CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgZGV2LCAwLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggMzk1YzE1Yi4uODhjNjEzZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTc0LDYgKzc0LDggQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9za2IuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzZXJfbmFtZXNwYWNlLmg+CiAKIHN0cnVjdCBrbWVtX2NhY2hlICpza2J1ZmZfaGVhZF9jYWNoZSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpza2J1ZmZfZmNsb25lX2NhY2hlIF9fcmVhZF9tb3N0bHk7CkBAIC02NzcsMTMgKzY3OSw2IEBACiAjaWYgSVNfRU5BQkxFRChDT05GSUdfQlJJREdFX05FVEZJTFRFUikKIAluZl9icmlkZ2VfcHV0KHNrYi0+bmZfYnJpZGdlKTsKICNlbmRpZgotLyogWFhYOiBJUyB0aGlzIHN0aWxsIG5lY2Vzc2FyeT8gLSBKSFMgKi8KLSNpZmRlZiBDT05GSUdfTkVUX1NDSEVECi0Jc2tiLT50Y19pbmRleCA9IDA7Ci0jaWZkZWYgQ09ORklHX05FVF9DTFNfQUNUCi0Jc2tiLT50Y192ZXJkID0gMDsKLSNlbmRpZgotI2VuZGlmCiB9CiAKIC8qIEZyZWUgZXZlcnl0aGluZyBidXQgdGhlIHNrX2J1ZmYgc2hlbGwuICovCkBAIC04MzAsNiArODI1LDkgQEAKICNpZmRlZiBDT05GSUdfTkVUX1JYX0JVU1lfUE9MTAogCUNIRUNLX1NLQl9GSUVMRChuYXBpX2lkKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19YUFMKKwlDSEVDS19TS0JfRklFTEQoc2VuZGVyX2NwdSk7CisjZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX1NDSEVECiAJQ0hFQ0tfU0tCX0ZJRUxEKHRjX2luZGV4KTsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKQEAgLTM2OTcsMTEgKzM2OTUsMjggQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiB9CiAKK3N0YXRpYyBib29sIHNrYl9tYXlfdHhfdGltZXN0YW1wKHN0cnVjdCBzb2NrICpzaywgYm9vbCB0c29ubHkpCit7CisJYm9vbCByZXQ7CisKKwlpZiAobGlrZWx5KHN5c2N0bF90c3RhbXBfYWxsb3dfZGF0YSB8fCB0c29ubHkpKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJlYWRfbG9ja19iaCgmc2stPnNrX2NhbGxiYWNrX2xvY2spOworCXJldCA9IHNrLT5za19zb2NrZXQgJiYgc2stPnNrX3NvY2tldC0+ZmlsZSAmJgorCSAgICAgIGZpbGVfbnNfY2FwYWJsZShzay0+c2tfc29ja2V0LT5maWxlLCAmaW5pdF91c2VyX25zLCBDQVBfTkVUX1JBVyk7CisJcmVhZF91bmxvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCiB2b2lkIHNrYl9jb21wbGV0ZV90eF90aW1lc3RhbXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgICAgICBzdHJ1Y3Qgc2tiX3NoYXJlZF9od3RzdGFtcHMgKmh3dHN0YW1wcykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBza2ItPnNrOwogCisJaWYgKCFza2JfbWF5X3R4X3RpbWVzdGFtcChzaywgZmFsc2UpKQorCQlyZXR1cm47CisKIAkvKiB0YWtlIGEgcmVmZXJlbmNlIHRvIHByZXZlbnQgc2tiX29ycGhhbigpIGZyb20gZnJlZWluZyB0aGUgc29ja2V0ICovCiAJc29ja19ob2xkKHNrKTsKIApAQCAtMzcxNywxOSArMzczMiwyOCBAQAogCQkgICAgIHN0cnVjdCBzb2NrICpzaywgaW50IHRzdHlwZSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWJvb2wgdHNvbmx5ID0gc2stPnNrX3RzZmxhZ3MgJiBTT0ZfVElNRVNUQU1QSU5HX09QVF9UU09OTFk7CiAKLQlpZiAoIXNrKQorCWlmICghc2sgfHwgIXNrYl9tYXlfdHhfdGltZXN0YW1wKHNrLCB0c29ubHkpKQogCQlyZXR1cm47CiAKLQlpZiAoaHd0c3RhbXBzKQotCQkqc2tiX2h3dHN0YW1wcyhvcmlnX3NrYikgPSAqaHd0c3RhbXBzOworCWlmICh0c29ubHkpCisJCXNrYiA9IGFsbG9jX3NrYigwLCBHRlBfQVRPTUlDKTsKIAllbHNlCi0JCW9yaWdfc2tiLT50c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpOwotCi0Jc2tiID0gc2tiX2Nsb25lKG9yaWdfc2tiLCBHRlBfQVRPTUlDKTsKKwkJc2tiID0gc2tiX2Nsb25lKG9yaWdfc2tiLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuOwogCisJaWYgKHRzb25seSkgeworCQlza2Jfc2hpbmZvKHNrYiktPnR4X2ZsYWdzID0gc2tiX3NoaW5mbyhvcmlnX3NrYiktPnR4X2ZsYWdzOworCQlza2Jfc2hpbmZvKHNrYiktPnRza2V5ID0gc2tiX3NoaW5mbyhvcmlnX3NrYiktPnRza2V5OworCX0KKworCWlmIChod3RzdGFtcHMpCisJCSpza2JfaHd0c3RhbXBzKHNrYikgPSAqaHd0c3RhbXBzOworCWVsc2UKKwkJc2tiLT50c3RhbXAgPSBrdGltZV9nZXRfcmVhbCgpOworCiAJX19za2JfY29tcGxldGVfdHhfdGltZXN0YW1wKHNrYiwgc2ssIHRzdHlwZSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX3NrYl90c3RhbXBfdHgpOwpAQCAtNDE0OCw2ICs0MTcyLDcgQEAKIAlza2ItPmlnbm9yZV9kZiA9IDA7CiAJc2tiX2RzdF9kcm9wKHNrYik7CiAJc2tiLT5tYXJrID0gMDsKKwlza2ItPnNlbmRlcl9jcHUgPSAwOwogCXNrYl9pbml0X3NlY21hcmsoc2tiKTsKIAlzZWNwYXRoX3Jlc2V0KHNrYik7CiAJbmZfcmVzZXQoc2tiKTsKQEAgLTQyMDQsNyArNDIyOSw3IEBACiAJc3RydWN0IHZsYW5faGRyICp2aGRyOwogCXUxNiB2bGFuX3RjaTsKIAotCWlmICh1bmxpa2VseSh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpKSB7CisJaWYgKHVubGlrZWx5KHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpKSB7CiAJCS8qIHZsYW5fdGNpIGlzIGFscmVhZHkgc2V0LXVwIHNvIGxlYXZlIHRoaXMgZm9yIGFub3RoZXIgdGltZSAqLwogCQlyZXR1cm4gc2tiOwogCX0KQEAgLTQyOTAsNyArNDMxNSw3IEBACiAJX19iZTE2IHZsYW5fcHJvdG87CiAJaW50IGVycjsKIAotCWlmIChsaWtlbHkodmxhbl90eF90YWdfcHJlc2VudChza2IpKSkgeworCWlmIChsaWtlbHkoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkpIHsKIAkJc2tiLT52bGFuX3RjaSA9IDA7CiAJfSBlbHNlIHsKIAkJaWYgKHVubGlrZWx5KChza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QXzgwMjFRKSAmJgpAQCAtNDMyMCw3ICs0MzQ1LDcgQEAKIAogaW50IHNrYl92bGFuX3B1c2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2IHZsYW5fcHJvdG8sIHUxNiB2bGFuX3RjaSkKIHsKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKIAkJdW5zaWduZWQgaW50IG9mZnNldCA9IHNrYi0+ZGF0YSAtIHNrYl9tYWNfaGVhZGVyKHNrYik7CiAJCWludCBlcnI7CiAKQEAgLTQzMzAsNyArNDM1NSw3IEBACiAJCSAqLwogCQlfX3NrYl9wdXNoKHNrYiwgb2Zmc2V0KTsKIAkJZXJyID0gX192bGFuX2luc2VydF90YWcoc2tiLCBza2ItPnZsYW5fcHJvdG8sCi0JCQkJCXZsYW5fdHhfdGFnX2dldChza2IpKTsKKwkJCQkJc2tiX3ZsYW5fdGFnX2dldChza2IpKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJCXNrYi0+cHJvdG9jb2wgPSBza2ItPnZsYW5fcHJvdG87CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zb2NrLmMgYi9uZXQvY29yZS9zb2NrLmMKaW5kZXggMWM3YTMzZC4uOTNjOGIyMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc29jay5jCisrKyBiL25ldC9jb3JlL3NvY2suYwpAQCAtMzI1LDYgKzMyNSw4IEBACiBpbnQgc3lzY3RsX29wdG1lbV9tYXggX19yZWFkX21vc3RseSA9IHNpemVvZih1bnNpZ25lZCBsb25nKSooMipVSU9fTUFYSU9WKzUxMik7CiBFWFBPUlRfU1lNQk9MKHN5c2N0bF9vcHRtZW1fbWF4KTsKIAoraW50IHN5c2N0bF90c3RhbXBfYWxsb3dfZGF0YSBfX3JlYWRfbW9zdGx5ID0gMTsKKwogc3RydWN0IHN0YXRpY19rZXkgbWVtYWxsb2Nfc29ja3MgPSBTVEFUSUNfS0VZX0lOSVRfRkFMU0U7CiBFWFBPUlRfU1lNQk9MX0dQTChtZW1hbGxvY19zb2Nrcyk7CiAKQEAgLTg0MCw2ICs4NDIsNyBAQAogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CisKIAkJaWYgKHZhbCAmIFNPRl9USU1FU1RBTVBJTkdfT1BUX0lEICYmCiAJCSAgICAhKHNrLT5za190c2ZsYWdzICYgU09GX1RJTUVTVEFNUElOR19PUFRfSUQpKSB7CiAJCQlpZiAoc2stPnNrX3Byb3RvY29sID09IElQUFJPVE9fVENQKSB7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9zeXNjdGxfbmV0X2NvcmUuYyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCmluZGV4IDMxYmFiYTIuLmVhYTUxZGQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCisrKyBiL25ldC9jb3JlL3N5c2N0bF9uZXRfY29yZS5jCkBAIC01Miw3ICs1Miw3IEBACiAKIAlpZiAod3JpdGUpIHsKIAkJaWYgKHNpemUpIHsKLQkJCWlmIChzaXplID4gMTw8MzApIHsKKwkJCWlmIChzaXplID4gMTw8MjkpIHsKIAkJCQkvKiBFbmZvcmNlIGxpbWl0IHRvIHByZXZlbnQgb3ZlcmZsb3cgKi8KIAkJCQltdXRleF91bmxvY2soJnNvY2tfZmxvd19tdXRleCk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC02NSw3ICs2NSw3IEBACiAJCQkJCW11dGV4X3VubG9jaygmc29ja19mbG93X211dGV4KTsKIAkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJfQotCisJCQkJcnBzX2NwdV9tYXNrID0gcm91bmR1cF9wb3dfb2ZfdHdvKG5yX2NwdV9pZHMpIC0gMTsKIAkJCQlzb2NrX3RhYmxlLT5tYXNrID0gc2l6ZSAtIDE7CiAJCQl9IGVsc2UKIAkJCQlzb2NrX3RhYmxlID0gb3JpZ19zb2NrX3RhYmxlOwpAQCAtMzIxLDYgKzMyMSwxNSBAQAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYwogCX0sCisJeworCQkucHJvY25hbWUJPSAidHN0YW1wX2FsbG93X2RhdGEiLAorCQkuZGF0YQkJPSAmc3lzY3RsX3RzdGFtcF9hbGxvd19kYXRhLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5leHRyYTEJCT0gJnplcm8sCisJCS5leHRyYTIJCT0gJm9uZQorCX0sCiAjaWZkZWYgQ09ORklHX1JQUwogCXsKIAkJLnByb2NuYW1lCT0gInJwc19zb2NrX2Zsb3dfZW50cmllcyIsCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX2Rldi5jIGIvbmV0L2RlY25ldC9kbl9kZXYuYwppbmRleCA0NDAwZGE3Li5iMmMyNmIwIDEwMDY0NAotLS0gYS9uZXQvZGVjbmV0L2RuX2Rldi5jCisrKyBiL25ldC9kZWNuZXQvZG5fZGV2LmMKQEAgLTcwMiw3ICs3MDIsOCBAQAogCSAgICAgbmxhX3B1dF9zdHJpbmcoc2tiLCBJRkFfTEFCRUwsIGlmYS0+aWZhX2xhYmVsKSkgfHwKIAkgICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX0ZMQUdTLCBpZmFfZmxhZ3MpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKZGlmZiAtLWdpdCBhL25ldC9kZWNuZXQvZG5fZmliLmMgYi9uZXQvZGVjbmV0L2RuX2ZpYi5jCmluZGV4IGQzMzJhZWYuLmRmNDgwMzQgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fZmliLmMKKysrIGIvbmV0L2RlY25ldC9kbl9maWIuYwpAQCAtMjk4LDcgKzI5OCw4IEBACiAJCQlpbnQgdHlwZSA9IG5sYV90eXBlKGF0dHIpOwogCiAJCQlpZiAodHlwZSkgewotCQkJCWlmICh0eXBlID4gUlRBWF9NQVggfHwgbmxhX2xlbihhdHRyKSA8IDQpCisJCQkJaWYgKHR5cGUgPiBSVEFYX01BWCB8fCB0eXBlID09IFJUQVhfQ0NfQUxHTyB8fAorCQkJCSAgICBubGFfbGVuKGF0dHIpIDwgNCkKIAkJCQkJZ290byBlcnJfaW52YWw7CiAKIAkJCQlmaS0+ZmliX21ldHJpY3NbdHlwZS0xXSA9IG5sYV9nZXRfdTMyKGF0dHIpOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jIGIvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCmluZGV4IGRhY2NjNGEuLjFkN2MxMjUgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fcm91dGUuYworKysgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKQEAgLTE2MTYsNyArMTYxNiw4IEBACiAJICAgIG5sYV9wdXRfdTMyKHNrYiwgUlRBX0lJRiwgcnQtPmZsZC5mbG93aWRuX2lpZikgPCAwKQogCQlnb3RvIGVycm91dDsKIAotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiAKIGVycm91dDoKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwpAQCAtMTcwOSw5ICsxNzEwLDYgQEAKIAkJcnQtPnJ0X2ZsYWdzIHw9IFJUQ0ZfTk9USUZZOwogCiAJZXJyID0gZG5fcnRfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCwgbmxoLT5ubG1zZ19zZXEsIFJUTV9ORVdST1VURSwgMCwgMCk7Ci0KLQlpZiAoZXJyID09IDApCi0JCWdvdG8gb3V0X2ZyZWU7CiAJaWYgKGVyciA8IDApIHsKIAkJZXJyID0gLUVNU0dTSVpFOwogCQlnb3RvIG91dF9mcmVlOwpAQCAtMTc2Miw3ICsxNzYwLDcgQEAKIAkJCXNrYl9kc3Rfc2V0KHNrYiwgZHN0X2Nsb25lKCZydC0+ZHN0KSk7CiAJCQlpZiAoZG5fcnRfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5wb3J0aWQsCiAJCQkJCWNiLT5ubGgtPm5sbXNnX3NlcSwgUlRNX05FV1JPVVRFLAotCQkJCQkxLCBOTE1fRl9NVUxUSSkgPD0gMCkgeworCQkJCQkxLCBOTE1fRl9NVUxUSSkgPCAwKSB7CiAJCQkJc2tiX2RzdF9kcm9wKHNrYik7CiAJCQkJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJCQkJZ290byBkb25lOwpkaWZmIC0tZ2l0IGEvbmV0L2RlY25ldC9kbl90YWJsZS5jIGIvbmV0L2RlY25ldC9kbl90YWJsZS5jCmluZGV4IDg2ZTM4MDcuLjE1NDBiNTAgMTAwNjQ0Ci0tLSBhL25ldC9kZWNuZXQvZG5fdGFibGUuYworKysgYi9uZXQvZGVjbmV0L2RuX3RhYmxlLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yb3V0ZS5oPiAvKiBSVEZfeHh4ICovCiAjaW5jbHVkZSA8bmV0L25laWdoYm91ci5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KICNpbmNsdWRlIDxuZXQvZmxvdy5oPgogI2luY2x1ZGUgPG5ldC9maWJfcnVsZXMuaD4KQEAgLTI3Myw3ICsyNzQsOCBAQAogCXNpemVfdCBwYXlsb2FkID0gTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBydG1zZykpCiAJCQkgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfVEFCTEUgKi8KIAkJCSArIG5sYV90b3RhbF9zaXplKDIpIC8qIFJUQV9EU1QgKi8KLQkJCSArIG5sYV90b3RhbF9zaXplKDQpOyAvKiBSVEFfUFJJT1JJVFkgKi8KKwkJCSArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9QUklPUklUWSAqLworCQkJICsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKTsgLyogUlRBWF9DQ19BTEdPICovCiAKIAkvKiBzcGFjZSBmb3IgbmVzdGVkIG1ldHJpY3MgKi8KIAlwYXlsb2FkICs9IG5sYV90b3RhbF9zaXplKChSVEFYX01BWCAqIG5sYV90b3RhbF9zaXplKDQpKSk7CkBAIC0zNjUsNyArMzY3LDggQEAKIAkJbmxhX25lc3RfZW5kKHNrYiwgbXBfaGVhZCk7CiAJfQogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIAogZXJyb3V0OgogCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CmRpZmYgLS1naXQgYS9uZXQvZHNhL2RzYS5jIGIvbmV0L2RzYS9kc2EuYwppbmRleCAzNzMxNzE0Li4yMTczNDAyIDEwMDY0NAotLS0gYS9uZXQvZHNhL2RzYS5jCisrKyBiL25ldC9kc2EvZHNhLmMKQEAgLTYwMyw3ICs2MDMsNyBAQAogCiAJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBwZDsKIAlwZC0+bmV0ZGV2ID0gJmV0aGVybmV0X2Rldi0+ZGV2OwotCXBkLT5ucl9jaGlwcyA9IG9mX2dldF9jaGlsZF9jb3VudChucCk7CisJcGQtPm5yX2NoaXBzID0gb2ZfZ2V0X2F2YWlsYWJsZV9jaGlsZF9jb3VudChucCk7CiAJaWYgKHBkLT5ucl9jaGlwcyA+IERTQV9NQVhfU1dJVENIRVMpCiAJCXBkLT5ucl9jaGlwcyA9IERTQV9NQVhfU1dJVENIRVM7CiAKZGlmZiAtLWdpdCBhL25ldC9kc2Evc2xhdmUuYyBiL25ldC9kc2Evc2xhdmUuYwppbmRleCA1MTU1NjlmLi5kMTA0YWUxIDEwMDY0NAotLS0gYS9uZXQvZHNhL3NsYXZlLmMKKysrIGIvbmV0L2RzYS9zbGF2ZS5jCkBAIC00Niw2ICs0Niw3IEBACiAJc25wcmludGYoZHMtPnNsYXZlX21paV9idXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICJkc2EtJWQ6JS4yeCIsCiAJCQlkcy0+aW5kZXgsIGRzLT5wZC0+c3dfYWRkcik7CiAJZHMtPnNsYXZlX21paV9idXMtPnBhcmVudCA9IGRzLT5tYXN0ZXJfZGV2OworCWRzLT5zbGF2ZV9taWlfYnVzLT5waHlfbWFzayA9IH5kcy0+cGh5c19taWlfbWFzazsKIH0KIAogCkBAIC02NzUsMTggKzY3Niw1IEBACiAKIAluZXRpZl9jYXJyaWVyX29mZihzbGF2ZV9kZXYpOwogCi0JaWYgKHAtPnBoeSAhPSBOVUxMKSB7Ci0JCWlmIChkcy0+ZHJ2LT5nZXRfcGh5X2ZsYWdzKQotCQkJcC0+cGh5LT5kZXZfZmxhZ3MgfD0gZHMtPmRydi0+Z2V0X3BoeV9mbGFncyhkcywgcG9ydCk7Ci0KLQkJcGh5X2F0dGFjaChzbGF2ZV9kZXYsIGRldl9uYW1lKCZwLT5waHktPmRldiksCi0JCQkgICBQSFlfSU5URVJGQUNFX01PREVfR01JSSk7Ci0KLQkJcC0+cGh5LT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JCXAtPnBoeS0+c3BlZWQgPSAwOwotCQlwLT5waHktPmR1cGxleCA9IDA7Ci0JCXAtPnBoeS0+YWR2ZXJ0aXNpbmcgPSBwLT5waHktPnN1cHBvcnRlZCB8IEFEVkVSVElTRURfQXV0b25lZzsKLQl9Ci0KIAlyZXR1cm4gc2xhdmVfZGV2OwogfQpkaWZmIC0tZ2l0IGEvbmV0L2V0aGVybmV0L2V0aC5jIGIvbmV0L2V0aGVybmV0L2V0aC5jCmluZGV4IDMzYTE0MGUuLjIzOGYzOGQgMTAwNjQ0Ci0tLSBhL25ldC9ldGhlcm5ldC9ldGguYworKysgYi9uZXQvZXRoZXJuZXQvZXRoLmMKQEAgLTQyNCwzICs0MjQsOTUgQEAKIAlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJSpwaENcbiIsIGxlbiwgYWRkcik7CiB9CiBFWFBPUlRfU1lNQk9MKHN5c2ZzX2Zvcm1hdF9tYWMpOworCitzdHJ1Y3Qgc2tfYnVmZiAqKmV0aF9ncm9fcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqKmhlYWQsCisJCQkJIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNrX2J1ZmYgKnAsICoqcHAgPSBOVUxMOworCXN0cnVjdCBldGhoZHIgKmVoLCAqZWgyOworCXVuc2lnbmVkIGludCBobGVuLCBvZmZfZXRoOworCWNvbnN0IHN0cnVjdCBwYWNrZXRfb2ZmbG9hZCAqcHR5cGU7CisJX19iZTE2IHR5cGU7CisJaW50IGZsdXNoID0gMTsKKworCW9mZl9ldGggPSBza2JfZ3JvX29mZnNldChza2IpOworCWhsZW4gPSBvZmZfZXRoICsgc2l6ZW9mKCplaCk7CisJZWggPSBza2JfZ3JvX2hlYWRlcl9mYXN0KHNrYiwgb2ZmX2V0aCk7CisJaWYgKHNrYl9ncm9faGVhZGVyX2hhcmQoc2tiLCBobGVuKSkgeworCQllaCA9IHNrYl9ncm9faGVhZGVyX3Nsb3coc2tiLCBobGVuLCBvZmZfZXRoKTsKKwkJaWYgKHVubGlrZWx5KCFlaCkpCisJCQlnb3RvIG91dDsKKwl9CisKKwlmbHVzaCA9IDA7CisKKwlmb3IgKHAgPSAqaGVhZDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKCFOQVBJX0dST19DQihwKS0+c2FtZV9mbG93KQorCQkJY29udGludWU7CisKKwkJZWgyID0gKHN0cnVjdCBldGhoZHIgKikocC0+ZGF0YSArIG9mZl9ldGgpOworCQlpZiAoY29tcGFyZV9ldGhlcl9oZWFkZXIoZWgsIGVoMikpIHsKKwkJCU5BUElfR1JPX0NCKHApLT5zYW1lX2Zsb3cgPSAwOworCQkJY29udGludWU7CisJCX0KKwl9CisKKwl0eXBlID0gZWgtPmhfcHJvdG87CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcHR5cGUgPSBncm9fZmluZF9yZWNlaXZlX2J5X3R5cGUodHlwZSk7CisJaWYgKHB0eXBlID09IE5VTEwpIHsKKwkJZmx1c2ggPSAxOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJc2tiX2dyb19wdWxsKHNrYiwgc2l6ZW9mKCplaCkpOworCXNrYl9ncm9fcG9zdHB1bGxfcmNzdW0oc2tiLCBlaCwgc2l6ZW9mKCplaCkpOworCXBwID0gcHR5cGUtPmNhbGxiYWNrcy5ncm9fcmVjZWl2ZShoZWFkLCBza2IpOworCitvdXRfdW5sb2NrOgorCXJjdV9yZWFkX3VubG9jaygpOworb3V0OgorCU5BUElfR1JPX0NCKHNrYiktPmZsdXNoIHw9IGZsdXNoOworCisJcmV0dXJuIHBwOworfQorRVhQT1JUX1NZTUJPTChldGhfZ3JvX3JlY2VpdmUpOworCitpbnQgZXRoX2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhvZmYpCit7CisJc3RydWN0IGV0aGhkciAqZWggPSAoc3RydWN0IGV0aGhkciAqKShza2ItPmRhdGEgKyBuaG9mZik7CisJX19iZTE2IHR5cGUgPSBlaC0+aF9wcm90bzsKKwlzdHJ1Y3QgcGFja2V0X29mZmxvYWQgKnB0eXBlOworCWludCBlcnIgPSAtRU5PU1lTOworCisJaWYgKHNrYi0+ZW5jYXBzdWxhdGlvbikKKwkJc2tiX3NldF9pbm5lcl9tYWNfaGVhZGVyKHNrYiwgbmhvZmYpOworCisJcmN1X3JlYWRfbG9jaygpOworCXB0eXBlID0gZ3JvX2ZpbmRfY29tcGxldGVfYnlfdHlwZSh0eXBlKTsKKwlpZiAocHR5cGUgIT0gTlVMTCkKKwkJZXJyID0gcHR5cGUtPmNhbGxiYWNrcy5ncm9fY29tcGxldGUoc2tiLCBuaG9mZiArCisJCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKKworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MKGV0aF9ncm9fY29tcGxldGUpOworCitzdGF0aWMgc3RydWN0IHBhY2tldF9vZmZsb2FkIGV0aF9wYWNrZXRfb2ZmbG9hZCBfX3JlYWRfbW9zdGx5ID0geworCS50eXBlID0gY3B1X3RvX2JlMTYoRVRIX1BfVEVCKSwKKwkuY2FsbGJhY2tzID0geworCQkuZ3JvX3JlY2VpdmUgPSBldGhfZ3JvX3JlY2VpdmUsCisJCS5ncm9fY29tcGxldGUgPSBldGhfZ3JvX2NvbXBsZXRlLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBldGhfb2ZmbG9hZF9pbml0KHZvaWQpCit7CisJZGV2X2FkZF9vZmZsb2FkKCZldGhfcGFja2V0X29mZmxvYWQpOworCisJcmV0dXJuIDA7Cit9CisKK2ZzX2luaXRjYWxsKGV0aF9vZmZsb2FkX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvNmxvd3Bhbi82bG93cGFuX2kuaCBiL25ldC9pZWVlODAyMTU0LzZsb3dwYW4vNmxvd3Bhbl9pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwZjY5ZAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9pZWVlODAyMTU0LzZsb3dwYW4vNmxvd3Bhbl9pLmgKQEAgLTAsMCArMSw3MiBAQAorI2lmbmRlZiBfX0lFRUU4MDIxNTRfNkxPV1BBTl9JX0hfXworI2RlZmluZSBfX0lFRUU4MDIxNTRfNkxPV1BBTl9JX0hfXworCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSA8bmV0L2llZWU4MDIxNTRfbmV0ZGV2Lmg+CisjaW5jbHVkZSA8bmV0L2luZXRfZnJhZy5oPgorCitzdHJ1Y3QgbG93cGFuX2NyZWF0ZV9hcmcgeworCXUxNiB0YWc7CisJdTE2IGRfc2l6ZTsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyICpzcmM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqZHN0OworfTsKKworLyogRXF1aXZhbGVudCBvZiBpcHY0IHN0cnVjdCBpcAorICovCitzdHJ1Y3QgbG93cGFuX2ZyYWdfcXVldWUgeworCXN0cnVjdCBpbmV0X2ZyYWdfcXVldWUJcTsKKworCXUxNgkJCXRhZzsKKwl1MTYJCQlkX3NpemU7CisJc3RydWN0IGllZWU4MDIxNTRfYWRkcglzYWRkcjsKKwlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyCWRhZGRyOworfTsKKworc3RhdGljIGlubGluZSB1MzIgaWVlZTgwMjE1NF9hZGRyX2hhc2goY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYSkKK3sKKwlzd2l0Y2ggKGEtPm1vZGUpIHsKKwljYXNlIElFRUU4MDIxNTRfQUREUl9MT05HOgorCQlyZXR1cm4gKCgoX19mb3JjZSB1NjQpYS0+ZXh0ZW5kZWRfYWRkcikgPj4gMzIpIF4KKwkJCSgoKF9fZm9yY2UgdTY0KWEtPmV4dGVuZGVkX2FkZHIpICYgMHhmZmZmZmZmZik7CisJY2FzZSBJRUVFODAyMTU0X0FERFJfU0hPUlQ6CisJCXJldHVybiAoX19mb3JjZSB1MzIpKGEtPnNob3J0X2FkZHIpOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RydWN0IGxvd3Bhbl9kZXZfcmVjb3JkIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbGRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCisvKiBwcml2YXRlIGRldmljZSBpbmZvICovCitzdHJ1Y3QgbG93cGFuX2Rldl9pbmZvIHsKKwlzdHJ1Y3QgbmV0X2RldmljZQkqcmVhbF9kZXY7IC8qIHJlYWwgV1BBTiBkZXZpY2UgcHRyICovCisJc3RydWN0IG11dGV4CQlkZXZfbGlzdF9tdHg7IC8qIG11dGV4IGZvciBsaXN0IG9wcyAqLworCXUxNgkJCWZyYWdtZW50X3RhZzsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0Citsb3dwYW5fZGV2X2luZm8gKmxvd3Bhbl9kZXZfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBuZXRkZXZfcHJpdihkZXYpOworfQorCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBsb3dwYW5fZGV2aWNlczsKKworaW50IGxvd3Bhbl9mcmFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCB1OCBmcmFnX3R5cGUpOwordm9pZCBsb3dwYW5fbmV0X2ZyYWdfZXhpdCh2b2lkKTsKK2ludCBsb3dwYW5fbmV0X2ZyYWdfaW5pdCh2b2lkKTsKKwordm9pZCBsb3dwYW5fcnhfaW5pdCh2b2lkKTsKK3ZvaWQgbG93cGFuX3J4X2V4aXQodm9pZCk7CisKK2ludCBsb3dwYW5faGVhZGVyX2NyZWF0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIHVuc2lnbmVkIHNob3J0IHR5cGUsIGNvbnN0IHZvaWQgKl9kYWRkciwKKwkJCSBjb25zdCB2b2lkICpfc2FkZHIsIHVuc2lnbmVkIGludCBsZW4pOworbmV0ZGV2X3R4X3QgbG93cGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKyNlbmRpZiAvKiBfX0lFRUU4MDIxNTRfNkxPV1BBTl9JX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnIGIvbmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyNGY5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWcKQEAgLTAsMCArMSw1IEBACitjb25maWcgSUVFRTgwMjE1NF82TE9XUEFOCisJdHJpc3RhdGUgIjZsb3dwYW4gc3VwcG9ydCBvdmVyIElFRUUgODAyLjE1LjQiCisJZGVwZW5kcyBvbiA2TE9XUEFOCisJLS0taGVscC0tLQorCSAgSVB2NiBjb21wcmVzc2lvbiBvdmVyIElFRUUgODAyLjE1LjQuCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC82bG93cGFuL01ha2VmaWxlIGIvbmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmZiMjcwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9NYWtlZmlsZQpAQCAtMCwwICsxLDMgQEAKK29iai0kKENPTkZJR19JRUVFODAyMTU0XzZMT1dQQU4pICs9IGllZWU4MDIxNTRfNmxvd3Bhbi5vCisKK2llZWU4MDIxNTRfNmxvd3Bhbi15IDo9IGNvcmUubyByeC5vIHJlYXNzZW1ibHkubyB0eC5vCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYyBiL25ldC9pZWVlODAyMTU0LzZsb3dwYW4vY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NWZiYjcKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaWVlZTgwMjE1NC82bG93cGFuL2NvcmUuYwpAQCAtMCwwICsxLDMwNCBAQAorLyogQ29weXJpZ2h0IDIwMTEsIFNpZW1lbnMgQUcKKyAqIHdyaXR0ZW4gYnkgQWxleGFuZGVyIFNtaXJub3YgPGFsZXguYmx1ZXNtYW4uc21pcm5vdkBnbWFpbC5jb20+CisgKi8KKworLyogQmFzZWQgb24gcGF0Y2hlcyBmcm9tIEpvbiBTbWlybCA8am9uc21pcmxAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAyMDExIEpvbiBTbWlybCA8am9uc21pcmxAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisvKiBKb24ncyBjb2RlIGlzIGJhc2VkIG9uIDZsb3dwYW4gaW1wbGVtZW50YXRpb24gZm9yIENvbnRpa2kgd2hpY2ggaXM6CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIFN3ZWRpc2ggSW5zdGl0dXRlIG9mIENvbXB1dGVyIFNjaWVuY2UuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSW5zdGl0dXRlIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBJTlNUSVRVVEUgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBJTlNUSVRVVEUgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWVlZTgwMjE1NC5oPgorCisjaW5jbHVkZSA8bmV0L2lwdjYuaD4KKworI2luY2x1ZGUgIjZsb3dwYW5faS5oIgorCitMSVNUX0hFQUQobG93cGFuX2RldmljZXMpOworc3RhdGljIGludCBsb3dwYW5fb3Blbl9jb3VudDsKKworc3RhdGljIF9fbGUxNiBsb3dwYW5fZ2V0X3Bhbl9pZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IGxvd3Bhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKKworCXJldHVybiBpZWVlODAyMTU0X21sbWVfb3BzKHJlYWxfZGV2KS0+Z2V0X3Bhbl9pZChyZWFsX2Rldik7Cit9CisKK3N0YXRpYyBfX2xlMTYgbG93cGFuX2dldF9zaG9ydF9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gbG93cGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2OworCisJcmV0dXJuIGllZWU4MDIxNTRfbWxtZV9vcHMocmVhbF9kZXYpLT5nZXRfc2hvcnRfYWRkcihyZWFsX2Rldik7Cit9CisKK3N0YXRpYyB1OCBsb3dwYW5fZ2V0X2Rzbihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IGxvd3Bhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKKworCXJldHVybiBpZWVlODAyMTU0X21sbWVfb3BzKHJlYWxfZGV2KS0+Z2V0X2RzbihyZWFsX2Rldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGVhZGVyX29wcyBsb3dwYW5faGVhZGVyX29wcyA9IHsKKwkuY3JlYXRlCT0gbG93cGFuX2hlYWRlcl9jcmVhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGxvd3Bhbl90eF9idXN5bG9jazsKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbG93cGFuX25ldGRldl94bWl0X2xvY2tfa2V5OworCitzdGF0aWMgdm9pZCBsb3dwYW5fc2V0X2xvY2tkZXBfY2xhc3Nfb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEsCisJCQkJCSB2b2lkICpfdW51c2VkKQoreworCWxvY2tkZXBfc2V0X2NsYXNzKCZ0eHEtPl94bWl0X2xvY2ssCisJCQkgICZsb3dwYW5fbmV0ZGV2X3htaXRfbG9ja19rZXkpOworfQorCitzdGF0aWMgaW50IGxvd3Bhbl9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCW5ldGRldl9mb3JfZWFjaF90eF9xdWV1ZShkZXYsIGxvd3Bhbl9zZXRfbG9ja2RlcF9jbGFzc19vbmUsIE5VTEwpOworCWRldi0+cWRpc2NfdHhfYnVzeWxvY2sgPSAmbG93cGFuX3R4X2J1c3lsb2NrOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxvd3Bhbl9uZXRkZXZfb3BzID0geworCS5uZG9faW5pdAkJPSBsb3dwYW5fZGV2X2luaXQsCisJLm5kb19zdGFydF94bWl0CQk9IGxvd3Bhbl94bWl0LAorfTsKKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTU0X21sbWVfb3BzIGxvd3Bhbl9tbG1lID0geworCS5nZXRfcGFuX2lkID0gbG93cGFuX2dldF9wYW5faWQsCisJLmdldF9zaG9ydF9hZGRyID0gbG93cGFuX2dldF9zaG9ydF9hZGRyLAorCS5nZXRfZHNuID0gbG93cGFuX2dldF9kc24sCit9OworCitzdGF0aWMgdm9pZCBsb3dwYW5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlkZXYtPmFkZHJfbGVuCQk9IElFRUU4MDIxNTRfQUREUl9MRU47CisJbWVtc2V0KGRldi0+YnJvYWRjYXN0LCAweGZmLCBJRUVFODAyMTU0X0FERFJfTEVOKTsKKwlkZXYtPnR5cGUJCT0gQVJQSFJEX0lFRUU4MDIxNTQ7CisJLyogRnJhbWUgQ29udHJvbCArIFNlcXVlbmNlIE51bWJlciArIEFkZHJlc3MgZmllbGRzICsgU2VjdXJpdHkgSGVhZGVyICovCisJZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAyICsgMSArIDIwICsgMTQ7CisJZGV2LT5uZWVkZWRfdGFpbHJvb20JPSAyOyAvKiBGQ1MgKi8KKwlkZXYtPm10dQkJPSBJUFY2X01JTl9NVFU7CisJZGV2LT50eF9xdWV1ZV9sZW4JPSAwOworCWRldi0+ZmxhZ3MJCT0gSUZGX0JST0FEQ0FTVCB8IElGRl9NVUxUSUNBU1Q7CisJZGV2LT53YXRjaGRvZ190aW1lbwk9IDA7CisKKwlkZXYtPm5ldGRldl9vcHMJCT0gJmxvd3Bhbl9uZXRkZXZfb3BzOworCWRldi0+aGVhZGVyX29wcwkJPSAmbG93cGFuX2hlYWRlcl9vcHM7CisJZGV2LT5tbF9wcml2CQk9ICZsb3dwYW5fbWxtZTsKKwlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7Cit9CisKK3N0YXRpYyBpbnQgbG93cGFuX3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKK3sKKwlpZiAodGJbSUZMQV9BRERSRVNTXSkgeworCQlpZiAobmxhX2xlbih0YltJRkxBX0FERFJFU1NdKSAhPSBJRUVFODAyMTU0X0FERFJfTEVOKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvd3Bhbl9uZXdsaW5rKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXY7CisJc3RydWN0IGxvd3Bhbl9kZXZfcmVjb3JkICplbnRyeTsKKwlpbnQgcmV0OworCisJQVNTRVJUX1JUTkwoKTsKKworCXByX2RlYnVnKCJhZGRpbmcgbmV3IGxpbmtcbiIpOworCisJaWYgKCF0YltJRkxBX0xJTktdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBmaW5kIGFuZCBob2xkIHJlYWwgd3BhbiBkZXZpY2UgKi8KKwlyZWFsX2RldiA9IGRldl9nZXRfYnlfaW5kZXgoc3JjX25ldCwgbmxhX2dldF91MzIodGJbSUZMQV9MSU5LXSkpOworCWlmICghcmVhbF9kZXYpCisJCXJldHVybiAtRU5PREVWOworCWlmIChyZWFsX2Rldi0+dHlwZSAhPSBBUlBIUkRfSUVFRTgwMjE1NCkgeworCQlkZXZfcHV0KHJlYWxfZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbG93cGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2ID0gcmVhbF9kZXY7CisJbXV0ZXhfaW5pdCgmbG93cGFuX2Rldl9pbmZvKGRldiktPmRldl9saXN0X210eCk7CisKKwllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpIHsKKwkJZGV2X3B1dChyZWFsX2Rldik7CisJCWxvd3Bhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldiA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWVudHJ5LT5sZGV2ID0gZGV2OworCisJLyogU2V0IHRoZSBsb3dwYW4gaGFyZHdhcmUgYWRkcmVzcyB0byB0aGUgd3BhbiBoYXJkd2FyZSBhZGRyZXNzLiAqLworCW1lbWNweShkZXYtPmRldl9hZGRyLCByZWFsX2Rldi0+ZGV2X2FkZHIsIElFRUU4MDIxNTRfQUREUl9MRU4pOworCisJbXV0ZXhfbG9jaygmbG93cGFuX2Rldl9pbmZvKGRldiktPmRldl9saXN0X210eCk7CisJSU5JVF9MSVNUX0hFQUQoJmVudHJ5LT5saXN0KTsKKwlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJmxvd3Bhbl9kZXZpY2VzKTsKKwltdXRleF91bmxvY2soJmxvd3Bhbl9kZXZfaW5mbyhkZXYpLT5kZXZfbGlzdF9tdHgpOworCisJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CisJaWYgKHJldCA+PSAwKSB7CisJCWlmICghbG93cGFuX29wZW5fY291bnQpCisJCQlsb3dwYW5fcnhfaW5pdCgpOworCQlsb3dwYW5fb3Blbl9jb3VudCsrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGxvd3Bhbl9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IGxvd3Bhbl9kZXZfaW5mbyAqbG93cGFuX2RldiA9IGxvd3Bhbl9kZXZfaW5mbyhkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IGxvd3Bhbl9kZXYtPnJlYWxfZGV2OworCXN0cnVjdCBsb3dwYW5fZGV2X3JlY29yZCAqZW50cnksICp0bXA7CisKKwlBU1NFUlRfUlROTCgpOworCisJbG93cGFuX29wZW5fY291bnQtLTsKKwlpZiAoIWxvd3Bhbl9vcGVuX2NvdW50KQorCQlsb3dwYW5fcnhfZXhpdCgpOworCisJbXV0ZXhfbG9jaygmbG93cGFuX2Rldl9pbmZvKGRldiktPmRldl9saXN0X210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsICZsb3dwYW5fZGV2aWNlcywgbGlzdCkgeworCQlpZiAoZW50cnktPmxkZXYgPT0gZGV2KSB7CisJCQlsaXN0X2RlbCgmZW50cnktPmxpc3QpOworCQkJa2ZyZWUoZW50cnkpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmbG93cGFuX2Rldl9pbmZvKGRldiktPmRldl9saXN0X210eCk7CisKKwltdXRleF9kZXN0cm95KCZsb3dwYW5fZGV2X2luZm8oZGV2KS0+ZGV2X2xpc3RfbXR4KTsKKworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7CisKKwlkZXZfcHV0KHJlYWxfZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGxvd3Bhbl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0geworCS5raW5kCQk9ICJsb3dwYW4iLAorCS5wcml2X3NpemUJPSBzaXplb2Yoc3RydWN0IGxvd3Bhbl9kZXZfaW5mbyksCisJLnNldHVwCQk9IGxvd3Bhbl9zZXR1cCwKKwkubmV3bGluawk9IGxvd3Bhbl9uZXdsaW5rLAorCS5kZWxsaW5rCT0gbG93cGFuX2RlbGxpbmssCisJLnZhbGlkYXRlCT0gbG93cGFuX3ZhbGlkYXRlLAorfTsKKworc3RhdGljIGlubGluZSBpbnQgX19pbml0IGxvd3Bhbl9uZXRsaW5rX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcnRubF9saW5rX3JlZ2lzdGVyKCZsb3dwYW5fbGlua19vcHMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG93cGFuX25ldGxpbmtfZmluaSh2b2lkKQoreworCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZsb3dwYW5fbGlua19vcHMpOworfQorCitzdGF0aWMgaW50IGxvd3Bhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTsKKwlMSVNUX0hFQUQoZGVsX2xpc3QpOworCXN0cnVjdCBsb3dwYW5fZGV2X3JlY29yZCAqZW50cnksICp0bXA7CisKKwlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0KQorCQlnb3RvIG91dDsKKworCWlmIChldmVudCA9PSBORVRERVZfVU5SRUdJU1RFUikgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJmxvd3Bhbl9kZXZpY2VzLCBsaXN0KSB7CisJCQlpZiAobG93cGFuX2Rldl9pbmZvKGVudHJ5LT5sZGV2KS0+cmVhbF9kZXYgPT0gZGV2KQorCQkJCWxvd3Bhbl9kZWxsaW5rKGVudHJ5LT5sZGV2LCAmZGVsX2xpc3QpOworCQl9CisKKwkJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSgmZGVsX2xpc3QpOworCX0KKworb3V0OgorCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBsb3dwYW5fZGV2X25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gbG93cGFuX2RldmljZV9ldmVudCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxvd3Bhbl9pbml0X21vZHVsZSh2b2lkKQoreworCWludCBlcnIgPSAwOworCisJZXJyID0gbG93cGFuX25ldF9mcmFnX2luaXQoKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBsb3dwYW5fbmV0bGlua19pbml0KCk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0X2ZyYWc7CisKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmxvd3Bhbl9kZXZfbm90aWZpZXIpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dF9wYWNrOworCisJcmV0dXJuIDA7CisKK291dF9wYWNrOgorCWxvd3Bhbl9uZXRsaW5rX2ZpbmkoKTsKK291dF9mcmFnOgorCWxvd3Bhbl9uZXRfZnJhZ19leGl0KCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGxvd3Bhbl9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCWxvd3Bhbl9uZXRsaW5rX2ZpbmkoKTsKKworCWxvd3Bhbl9uZXRfZnJhZ19leGl0KCk7CisKKwl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbG93cGFuX2Rldl9ub3RpZmllcik7Cit9CisKK21vZHVsZV9pbml0KGxvd3Bhbl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChsb3dwYW5fY2xlYW51cF9tb2R1bGUpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTX1JUTkxfTElOSygibG93cGFuIik7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9yZWFzc2VtYmx5LmMgYi9uZXQvaWVlZTgwMjE1NC82bG93cGFuL3JlYXNzZW1ibHkuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBuZXQvaWVlZTgwMjE1NC9yZWFzc2VtYmx5LmMKcmVuYW1lIHRvIG5ldC9pZWVlODAyMTU0LzZsb3dwYW4vcmVhc3NlbWJseS5jCmluZGV4IDlkOTgwZWQuLmY0NmU0ZDEgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTU0L3JlYXNzZW1ibHkuYworKysgYi9uZXQvaWVlZTgwMjE1NC82bG93cGFuL3JlYXNzZW1ibHkuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L2luZXRfZnJhZy5oPgogCi0jaW5jbHVkZSAicmVhc3NlbWJseS5oIgorI2luY2x1ZGUgIjZsb3dwYW5faS5oIgogCiBzdGF0aWMgY29uc3QgY2hhciBsb3dwYW5fZnJhZ3NfY2FjaGVfbmFtZVtdID0gImxvd3Bhbi1mcmFncyI7CiAKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0LzZsb3dwYW4vcnguYyBiL25ldC9pZWVlODAyMTU0LzZsb3dwYW4vcnguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmUxZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L2llZWU4MDIxNTQvNmxvd3Bhbi9yeC5jCkBAIC0wLDAgKzEsMTcxIEBACisvKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorCisjaW5jbHVkZSA8bmV0LzZsb3dwYW4uaD4KKyNpbmNsdWRlIDxuZXQvaWVlZTgwMjE1NF9uZXRkZXYuaD4KKworI2luY2x1ZGUgIjZsb3dwYW5faS5oIgorCitzdGF0aWMgaW50IGxvd3Bhbl9naXZlX3NrYl90b19kZXZpY2VzKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbG93cGFuX2Rldl9yZWNvcmQgKmVudHJ5OworCXN0cnVjdCBza19idWZmICpza2JfY3A7CisJaW50IHN0YXQgPSBORVRfUlhfU1VDQ0VTUzsKKworCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTsKKwlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZW50cnksICZsb3dwYW5fZGV2aWNlcywgbGlzdCkKKwkJaWYgKGxvd3Bhbl9kZXZfaW5mbyhlbnRyeS0+bGRldiktPnJlYWxfZGV2ID09IHNrYi0+ZGV2KSB7CisJCQlza2JfY3AgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCQkJaWYgKCFza2JfY3ApIHsKKwkJCQlrZnJlZV9za2Ioc2tiKTsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJCQl9CisKKwkJCXNrYl9jcC0+ZGV2ID0gZW50cnktPmxkZXY7CisJCQlzdGF0ID0gbmV0aWZfcngoc2tiX2NwKTsKKwkJCWlmIChzdGF0ID09IE5FVF9SWF9EUk9QKQorCQkJCWJyZWFrOworCQl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwljb25zdW1lX3NrYihza2IpOworCisJcmV0dXJuIHN0YXQ7Cit9CisKK3N0YXRpYyBpbnQKK2lwaGNfZGVjb21wcmVzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9oZHIgKmhkcikKK3sKKwl1OCBpcGhjMCwgaXBoYzE7CisJc3RydWN0IGllZWU4MDIxNTRfYWRkcl9zYSBzYSwgZGE7CisJdm9pZCAqc2FwLCAqZGFwOworCisJcmF3X2R1bXBfdGFibGUoX19mdW5jX18sICJyYXcgc2tiIGRhdGEgZHVtcCIsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCS8qIGF0IGxlYXN0IHR3byBieXRlcyB3aWxsIGJlIHVzZWQgZm9yIHRoZSBlbmNvZGluZyAqLworCWlmIChza2ItPmxlbiA8IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGxvd3Bhbl9mZXRjaF9za2JfdTgoc2tiLCAmaXBoYzApKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChsb3dwYW5fZmV0Y2hfc2tiX3U4KHNrYiwgJmlwaGMxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZWVlODAyMTU0X2FkZHJfdG9fc2EoJnNhLCAmaGRyLT5zb3VyY2UpOworCWllZWU4MDIxNTRfYWRkcl90b19zYSgmZGEsICZoZHItPmRlc3QpOworCisJaWYgKHNhLmFkZHJfdHlwZSA9PSBJRUVFODAyMTU0X0FERFJfU0hPUlQpCisJCXNhcCA9ICZzYS5zaG9ydF9hZGRyOworCWVsc2UKKwkJc2FwID0gJnNhLmh3YWRkcjsKKworCWlmIChkYS5hZGRyX3R5cGUgPT0gSUVFRTgwMjE1NF9BRERSX1NIT1JUKQorCQlkYXAgPSAmZGEuc2hvcnRfYWRkcjsKKwllbHNlCisJCWRhcCA9ICZkYS5od2FkZHI7CisKKwlyZXR1cm4gbG93cGFuX2hlYWRlcl9kZWNvbXByZXNzKHNrYiwgc2tiLT5kZXYsIHNhcCwgc2EuYWRkcl90eXBlLAorCQkJCQlJRUVFODAyMTU0X0FERFJfTEVOLCBkYXAsIGRhLmFkZHJfdHlwZSwKKwkJCQkJSUVFRTgwMjE1NF9BRERSX0xFTiwgaXBoYzAsIGlwaGMxKTsKK30KKworc3RhdGljIGludCBsb3dwYW5fcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjE1NF9oZHIgaGRyOworCWludCByZXQ7CisKKwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJZ290byBkcm9wOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCWdvdG8gZHJvcF9za2I7CisKKwlpZiAoc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfT1RIRVJIT1NUKQorCQlnb3RvIGRyb3Bfc2tiOworCisJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfSUVFRTgwMjE1NCkKKwkJZ290byBkcm9wX3NrYjsKKworCWlmIChpZWVlODAyMTU0X2hkcl9wZWVrX2FkZHJzKHNrYiwgJmhkcikgPCAwKQorCQlnb3RvIGRyb3Bfc2tiOworCisJLyogY2hlY2sgdGhhdCBpdCdzIG91ciBidWZmZXIgKi8KKwlpZiAoc2tiLT5kYXRhWzBdID09IExPV1BBTl9ESVNQQVRDSF9JUFY2KSB7CisJCS8qIFB1bGwgb2ZmIHRoZSAxLWJ5dGUgb2YgNmxvd3BhbiBoZWFkZXIuICovCisJCXNrYl9wdWxsKHNrYiwgMSk7CisJCXJldHVybiBsb3dwYW5fZ2l2ZV9za2JfdG9fZGV2aWNlcyhza2IsIE5VTEwpOworCX0gZWxzZSB7CisJCXN3aXRjaCAoc2tiLT5kYXRhWzBdICYgMHhlMCkgeworCQljYXNlIExPV1BBTl9ESVNQQVRDSF9JUEhDOgkvKiBpcHY2IGRhdGFncmFtICovCisJCQlyZXQgPSBpcGhjX2RlY29tcHJlc3Moc2tiLCAmaGRyKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gZHJvcF9za2I7CisKKwkJCXJldHVybiBsb3dwYW5fZ2l2ZV9za2JfdG9fZGV2aWNlcyhza2IsIE5VTEwpOworCQljYXNlIExPV1BBTl9ESVNQQVRDSF9GUkFHMToJLyogZmlyc3QgZnJhZ21lbnQgaGVhZGVyICovCisJCQlyZXQgPSBsb3dwYW5fZnJhZ19yY3Yoc2tiLCBMT1dQQU5fRElTUEFUQ0hfRlJBRzEpOworCQkJaWYgKHJldCA9PSAxKSB7CisJCQkJcmV0ID0gaXBoY19kZWNvbXByZXNzKHNrYiwgJmhkcik7CisJCQkJaWYgKHJldCA8IDApCisJCQkJCWdvdG8gZHJvcF9za2I7CisKKwkJCQlyZXR1cm4gbG93cGFuX2dpdmVfc2tiX3RvX2RldmljZXMoc2tiLCBOVUxMKTsKKwkJCX0gZWxzZSBpZiAocmV0ID09IC0xKSB7CisJCQkJcmV0dXJuIE5FVF9SWF9EUk9QOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CisJCQl9CisJCWNhc2UgTE9XUEFOX0RJU1BBVENIX0ZSQUdOOgkvKiBuZXh0IGZyYWdtZW50cyBoZWFkZXJzICovCisJCQlyZXQgPSBsb3dwYW5fZnJhZ19yY3Yoc2tiLCBMT1dQQU5fRElTUEFUQ0hfRlJBR04pOworCQkJaWYgKHJldCA9PSAxKSB7CisJCQkJcmV0ID0gaXBoY19kZWNvbXByZXNzKHNrYiwgJmhkcik7CisJCQkJaWYgKHJldCA8IDApCisJCQkJCWdvdG8gZHJvcF9za2I7CisKKwkJCQlyZXR1cm4gbG93cGFuX2dpdmVfc2tiX3RvX2RldmljZXMoc2tiLCBOVUxMKTsKKwkJCX0gZWxzZSBpZiAocmV0ID09IC0xKSB7CisJCQkJcmV0dXJuIE5FVF9SWF9EUk9QOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CisJCQl9CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0KKworZHJvcF9za2I6CisJa2ZyZWVfc2tiKHNrYik7Citkcm9wOgorCXJldHVybiBORVRfUlhfRFJPUDsKK30KKworc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBsb3dwYW5fcGFja2V0X3R5cGUgPSB7CisJLnR5cGUgPSBodG9ucyhFVEhfUF9JRUVFODAyMTU0KSwKKwkuZnVuYyA9IGxvd3Bhbl9yY3YsCit9OworCit2b2lkIGxvd3Bhbl9yeF9pbml0KHZvaWQpCit7CisJZGV2X2FkZF9wYWNrKCZsb3dwYW5fcGFja2V0X3R5cGUpOworfQorCit2b2lkIGxvd3Bhbl9yeF9leGl0KHZvaWQpCit7CisJZGV2X3JlbW92ZV9wYWNrKCZsb3dwYW5fcGFja2V0X3R5cGUpOworfQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jIGIvbmV0L2llZWU4MDIxNTQvNmxvd3Bhbi90eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNDkwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvaWVlZTgwMjE1NC82bG93cGFuL3R4LmMKQEAgLTAsMCArMSwyNzEgQEAKKy8qIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bmV0LzZsb3dwYW4uaD4KKyNpbmNsdWRlIDxuZXQvaWVlZTgwMjE1NF9uZXRkZXYuaD4KKworI2luY2x1ZGUgIjZsb3dwYW5faS5oIgorCisvKiBkb24ndCBzYXZlIHBhbiBpZCwgaXQncyBpbnRyYSBwYW4gKi8KK3N0cnVjdCBsb3dwYW5fYWRkciB7CisJdTggbW9kZTsKKwl1bmlvbiB7CisJCS8qIElQdjYgbmVlZHMgYmlnIGVuZGlhbiBoZXJlICovCisJCV9fYmU2NCBleHRlbmRlZF9hZGRyOworCQlfX2JlMTYgc2hvcnRfYWRkcjsKKwl9IHU7Cit9OworCitzdHJ1Y3QgbG93cGFuX2FkZHJfaW5mbyB7CisJc3RydWN0IGxvd3Bhbl9hZGRyIGRhZGRyOworCXN0cnVjdCBsb3dwYW5fYWRkciBzYWRkcjsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0Citsb3dwYW5fYWRkcl9pbmZvICpsb3dwYW5fc2tiX3ByaXYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlXQVJOX09OX09OQ0Uoc2tiX2hlYWRyb29tKHNrYikgPCBzaXplb2Yoc3RydWN0IGxvd3Bhbl9hZGRyX2luZm8pKTsKKwlyZXR1cm4gKHN0cnVjdCBsb3dwYW5fYWRkcl9pbmZvICopKHNrYi0+ZGF0YSAtCisJCQlzaXplb2Yoc3RydWN0IGxvd3Bhbl9hZGRyX2luZm8pKTsKK30KKworaW50IGxvd3Bhbl9oZWFkZXJfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgdW5zaWduZWQgc2hvcnQgdHlwZSwgY29uc3Qgdm9pZCAqX2RhZGRyLAorCQkJIGNvbnN0IHZvaWQgKl9zYWRkciwgdW5zaWduZWQgaW50IGxlbikKK3sKKwljb25zdCB1OCAqc2FkZHIgPSBfc2FkZHI7CisJY29uc3QgdTggKmRhZGRyID0gX2RhZGRyOworCXN0cnVjdCBsb3dwYW5fYWRkcl9pbmZvICppbmZvOworCisJLyogVE9ETzoKKwkgKiBpZiB0aGlzIHBhY2thZ2UgaXNuJ3QgaXB2NiBvbmUsIHdoZXJlIHNob3VsZCBpdCBiZSByb3V0ZWQ/CisJICovCisJaWYgKHR5cGUgIT0gRVRIX1BfSVBWNikKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXNhZGRyKQorCQlzYWRkciA9IGRldi0+ZGV2X2FkZHI7CisKKwlyYXdfZHVtcF9pbmxpbmUoX19mdW5jX18sICJzYWRkciIsICh1bnNpZ25lZCBjaGFyICopc2FkZHIsIDgpOworCXJhd19kdW1wX2lubGluZShfX2Z1bmNfXywgImRhZGRyIiwgKHVuc2lnbmVkIGNoYXIgKilkYWRkciwgOCk7CisKKwlpbmZvID0gbG93cGFuX3NrYl9wcml2KHNrYik7CisKKwkvKiBUT0RPOiBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IGV4dGVuZGVkX2FkZHIgKi8KKwlpbmZvLT5kYWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7CisJbWVtY3B5KCZpbmZvLT5kYWRkci51LmV4dGVuZGVkX2FkZHIsIGRhZGRyLAorCSAgICAgICBzaXplb2YoaW5mby0+ZGFkZHIudS5leHRlbmRlZF9hZGRyKSk7CisJaW5mby0+c2FkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9MT05HOworCW1lbWNweSgmaW5mby0+c2FkZHIudS5leHRlbmRlZF9hZGRyLCBzYWRkciwKKwkgICAgICAgc2l6ZW9mKGluZm8tPmRhZGRyLnUuZXh0ZW5kZWRfYWRkcikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZioKK2xvd3Bhbl9hbGxvY19mcmFnKHN0cnVjdCBza19idWZmICpza2IsIGludCBzaXplLAorCQkgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTU0X2hkciAqbWFzdGVyX2hkcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSBsb3dwYW5fZGV2X2luZm8oc2tiLT5kZXYpLT5yZWFsX2RldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZzsKKwlpbnQgcmM7CisKKwlmcmFnID0gYWxsb2Nfc2tiKHJlYWxfZGV2LT5oYXJkX2hlYWRlcl9sZW4gKworCQkJIHJlYWxfZGV2LT5uZWVkZWRfdGFpbHJvb20gKyBzaXplLAorCQkJIEdGUF9BVE9NSUMpOworCisJaWYgKGxpa2VseShmcmFnKSkgeworCQlmcmFnLT5kZXYgPSByZWFsX2RldjsKKwkJZnJhZy0+cHJpb3JpdHkgPSBza2ItPnByaW9yaXR5OworCQlza2JfcmVzZXJ2ZShmcmFnLCByZWFsX2Rldi0+aGFyZF9oZWFkZXJfbGVuKTsKKwkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKGZyYWcpOworCQkqbWFjX2NiKGZyYWcpID0gKm1hY19jYihza2IpOworCisJCXJjID0gZGV2X2hhcmRfaGVhZGVyKGZyYWcsIHJlYWxfZGV2LCAwLCAmbWFzdGVyX2hkci0+ZGVzdCwKKwkJCQkgICAgICZtYXN0ZXJfaGRyLT5zb3VyY2UsIHNpemUpOworCQlpZiAocmMgPCAwKSB7CisJCQlrZnJlZV9za2IoZnJhZyk7CisJCQlyZXR1cm4gRVJSX1BUUihyYyk7CisJCX0KKwl9IGVsc2UgeworCQlmcmFnID0gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlyZXR1cm4gZnJhZzsKK30KKworc3RhdGljIGludAorbG93cGFuX3htaXRfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfaGRyICp3cGFuX2hkciwKKwkJICAgICB1OCAqZnJhZ19oZHIsIGludCBmcmFnX2hkcmxlbiwKKwkJICAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuKQoreworCXN0cnVjdCBza19idWZmICpmcmFnOworCisJcmF3X2R1bXBfaW5saW5lKF9fZnVuY19fLCAiIGZyYWdtZW50IGhlYWRlciIsIGZyYWdfaGRyLCBmcmFnX2hkcmxlbik7CisKKwlmcmFnID0gbG93cGFuX2FsbG9jX2ZyYWcoc2tiLCBmcmFnX2hkcmxlbiArIGxlbiwgd3Bhbl9oZHIpOworCWlmIChJU19FUlIoZnJhZykpCisJCXJldHVybiAtUFRSX0VSUihmcmFnKTsKKworCW1lbWNweShza2JfcHV0KGZyYWcsIGZyYWdfaGRybGVuKSwgZnJhZ19oZHIsIGZyYWdfaGRybGVuKTsKKwltZW1jcHkoc2tiX3B1dChmcmFnLCBsZW4pLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIG9mZnNldCwgbGVuKTsKKworCXJhd19kdW1wX3RhYmxlKF9fZnVuY19fLCAiIGZyYWdtZW50IGR1bXAiLCBmcmFnLT5kYXRhLCBmcmFnLT5sZW4pOworCisJcmV0dXJuIGRldl9xdWV1ZV94bWl0KGZyYWcpOworfQorCitzdGF0aWMgaW50Citsb3dwYW5feG1pdF9mcmFnbWVudGVkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9oZHIgKndwYW5faGRyKQoreworCXUxNiBkZ3JhbV9zaXplLCBkZ3JhbV9vZmZzZXQ7CisJX19iZTE2IGZyYWdfdGFnOworCXU4IGZyYWdfaGRyWzVdOworCWludCBmcmFnX2NhcCwgZnJhZ19sZW4sIHBheWxvYWRfY2FwLCByYzsKKwlpbnQgc2tiX3VucHJvY2Vzc2VkLCBza2Jfb2Zmc2V0OworCisJZGdyYW1fc2l6ZSA9IGxvd3Bhbl91bmNvbXByZXNzX3NpemUoc2tiLCAmZGdyYW1fb2Zmc2V0KSAtCisJCSAgICAgc2tiLT5tYWNfbGVuOworCWZyYWdfdGFnID0gaHRvbnMobG93cGFuX2Rldl9pbmZvKGRldiktPmZyYWdtZW50X3RhZyk7CisJbG93cGFuX2Rldl9pbmZvKGRldiktPmZyYWdtZW50X3RhZysrOworCisJZnJhZ19oZHJbMF0gPSBMT1dQQU5fRElTUEFUQ0hfRlJBRzEgfCAoKGRncmFtX3NpemUgPj4gOCkgJiAweDA3KTsKKwlmcmFnX2hkclsxXSA9IGRncmFtX3NpemUgJiAweGZmOworCW1lbWNweShmcmFnX2hkciArIDIsICZmcmFnX3RhZywgc2l6ZW9mKGZyYWdfdGFnKSk7CisKKwlwYXlsb2FkX2NhcCA9IGllZWU4MDIxNTRfbWF4X3BheWxvYWQod3Bhbl9oZHIpOworCisJZnJhZ19sZW4gPSByb3VuZF9kb3duKHBheWxvYWRfY2FwIC0gTE9XUEFOX0ZSQUcxX0hFQURfU0laRSAtCisJCQkgICAgICBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYiksIDgpOworCisJc2tiX29mZnNldCA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTsKKwlza2JfdW5wcm9jZXNzZWQgPSBza2ItPmxlbiAtIHNrYi0+bWFjX2xlbiAtIHNrYl9vZmZzZXQ7CisKKwlyYyA9IGxvd3Bhbl94bWl0X2ZyYWdtZW50KHNrYiwgd3Bhbl9oZHIsIGZyYWdfaGRyLAorCQkJCSAgTE9XUEFOX0ZSQUcxX0hFQURfU0laRSwgMCwKKwkJCQkgIGZyYWdfbGVuICsgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpKTsKKwlpZiAocmMpIHsKKwkJcHJfZGVidWcoIiVzIHVuYWJsZSB0byBzZW5kIEZSQUcxIHBhY2tldCAodGFnOiAlZCkiLAorCQkJIF9fZnVuY19fLCBudG9ocyhmcmFnX3RhZykpOworCQlnb3RvIGVycjsKKwl9CisKKwlmcmFnX2hkclswXSAmPSB+TE9XUEFOX0RJU1BBVENIX0ZSQUcxOworCWZyYWdfaGRyWzBdIHw9IExPV1BBTl9ESVNQQVRDSF9GUkFHTjsKKwlmcmFnX2NhcCA9IHJvdW5kX2Rvd24ocGF5bG9hZF9jYXAgLSBMT1dQQU5fRlJBR05fSEVBRF9TSVpFLCA4KTsKKworCWRvIHsKKwkJZGdyYW1fb2Zmc2V0ICs9IGZyYWdfbGVuOworCQlza2Jfb2Zmc2V0ICs9IGZyYWdfbGVuOworCQlza2JfdW5wcm9jZXNzZWQgLT0gZnJhZ19sZW47CisJCWZyYWdfbGVuID0gbWluKGZyYWdfY2FwLCBza2JfdW5wcm9jZXNzZWQpOworCisJCWZyYWdfaGRyWzRdID0gZGdyYW1fb2Zmc2V0ID4+IDM7CisKKwkJcmMgPSBsb3dwYW5feG1pdF9mcmFnbWVudChza2IsIHdwYW5faGRyLCBmcmFnX2hkciwKKwkJCQkJICBMT1dQQU5fRlJBR05fSEVBRF9TSVpFLCBza2Jfb2Zmc2V0LAorCQkJCQkgIGZyYWdfbGVuKTsKKwkJaWYgKHJjKSB7CisJCQlwcl9kZWJ1ZygiJXMgdW5hYmxlIHRvIHNlbmQgYSBGUkFHTiBwYWNrZXQuICh0YWc6ICVkLCBvZmZzZXQ6ICVkKVxuIiwKKwkJCQkgX19mdW5jX18sIG50b2hzKGZyYWdfdGFnKSwgc2tiX29mZnNldCk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0gd2hpbGUgKHNrYl91bnByb2Nlc3NlZCA+IGZyYWdfY2FwKTsKKworCWNvbnN1bWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CisKK2VycjoKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbG93cGFuX2hlYWRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgc2EsIGRhOworCXN0cnVjdCBpZWVlODAyMTU0X21hY19jYiAqY2IgPSBtYWNfY2JfaW5pdChza2IpOworCXN0cnVjdCBsb3dwYW5fYWRkcl9pbmZvIGluZm87CisJdm9pZCAqZGFkZHIsICpzYWRkcjsKKworCW1lbWNweSgmaW5mbywgbG93cGFuX3NrYl9wcml2KHNrYiksIHNpemVvZihpbmZvKSk7CisKKwkvKiBUT0RPOiBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IGV4dGVuZGVkX2FkZHIgKi8KKwlkYWRkciA9ICZpbmZvLmRhZGRyLnUuZXh0ZW5kZWRfYWRkcjsKKwlzYWRkciA9ICZpbmZvLnNhZGRyLnUuZXh0ZW5kZWRfYWRkcjsKKworCWxvd3Bhbl9oZWFkZXJfY29tcHJlc3Moc2tiLCBkZXYsIEVUSF9QX0lQVjYsIGRhZGRyLCBzYWRkciwgc2tiLT5sZW4pOworCisJY2ItPnR5cGUgPSBJRUVFODAyMTU0X0ZDX1RZUEVfREFUQTsKKworCS8qIHByZXBhcmUgd3BhbiBhZGRyZXNzIGRhdGEgKi8KKwlzYS5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7CisJc2EucGFuX2lkID0gaWVlZTgwMjE1NF9tbG1lX29wcyhkZXYpLT5nZXRfcGFuX2lkKGRldik7CisJc2EuZXh0ZW5kZWRfYWRkciA9IGllZWU4MDIxNTRfZGV2YWRkcl9mcm9tX3JhdyhzYWRkcik7CisKKwkvKiBpbnRyYS1QQU4gY29tbXVuaWNhdGlvbnMgKi8KKwlkYS5wYW5faWQgPSBzYS5wYW5faWQ7CisKKwkvKiBpZiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBpcyB0aGUgYnJvYWRjYXN0IGFkZHJlc3MsIHVzZSB0aGUKKwkgKiBjb3JyZXNwb25kaW5nIHNob3J0IGFkZHJlc3MKKwkgKi8KKwlpZiAobG93cGFuX2lzX2FkZHJfYnJvYWRjYXN0KChjb25zdCB1OCAqKWRhZGRyKSkgeworCQlkYS5tb2RlID0gSUVFRTgwMjE1NF9BRERSX1NIT1JUOworCQlkYS5zaG9ydF9hZGRyID0gY3B1X3RvX2xlMTYoSUVFRTgwMjE1NF9BRERSX0JST0FEQ0FTVCk7CisJCWNiLT5hY2tyZXEgPSBmYWxzZTsKKwl9IGVsc2UgeworCQlkYS5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7CisJCWRhLmV4dGVuZGVkX2FkZHIgPSBpZWVlODAyMTU0X2RldmFkZHJfZnJvbV9yYXcoZGFkZHIpOworCQljYi0+YWNrcmVxID0gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZGV2X2hhcmRfaGVhZGVyKHNrYiwgbG93cGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2LAorCQkJRVRIX1BfSVBWNiwgKHZvaWQgKikmZGEsICh2b2lkICopJnNhLCAwKTsKK30KKworbmV0ZGV2X3R4X3QgbG93cGFuX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjE1NF9oZHIgd3Bhbl9oZHI7CisJaW50IG1heF9zaW5nbGUsIHJldDsKKworCXByX2RlYnVnKCJwYWNrYWdlIHhtaXRcbiIpOworCisJLyogV2UgbXVzdCB0YWtlIGEgY29weSBvZiB0aGUgc2tiIGJlZm9yZSB3ZSBtb2RpZnkvcmVwbGFjZSB0aGUgaXB2NgorCSAqIGhlYWRlciBhcyB0aGUgaGVhZGVyIGNvdWxkIGJlIHVzZWQgZWxzZXdoZXJlCisJICovCisJc2tiID0gc2tiX3Vuc2hhcmUoc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIE5FVF9YTUlUX0RST1A7CisKKwlyZXQgPSBsb3dwYW5faGVhZGVyKHNrYiwgZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIE5FVF9YTUlUX0RST1A7CisJfQorCisJaWYgKGllZWU4MDIxNTRfaGRyX3BlZWsoc2tiLCAmd3Bhbl9oZHIpIDwgMCkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIE5FVF9YTUlUX0RST1A7CisJfQorCisJbWF4X3NpbmdsZSA9IGllZWU4MDIxNTRfbWF4X3BheWxvYWQoJndwYW5faGRyKTsKKworCWlmIChza2JfdGFpbF9wb2ludGVyKHNrYikgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSA8PSBtYXhfc2luZ2xlKSB7CisJCXNrYi0+ZGV2ID0gbG93cGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2OworCQlyZXR1cm4gZGV2X3F1ZXVlX3htaXQoc2tiKTsKKwl9IGVsc2UgeworCQluZXRkZXZfdHhfdCByYzsKKworCQlwcl9kZWJ1ZygiZnJhbWUgaXMgdG9vIGJpZywgZnJhZ21lbnRhdGlvbiBpcyBuZWVkZWRcbiIpOworCQlyYyA9IGxvd3Bhbl94bWl0X2ZyYWdtZW50ZWQoc2tiLCBkZXYsICZ3cGFuX2hkcik7CisKKwkJcmV0dXJuIHJjIDwgMCA/IE5FVF9YTUlUX0RST1AgOiByYzsKKwl9Cit9CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC82bG93cGFuX3J0bmwuYyBiL25ldC9pZWVlODAyMTU0LzZsb3dwYW5fcnRubC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyN2VhYTY1ZS4uMDAwMDAwMAotLS0gYS9uZXQvaWVlZTgwMjE1NC82bG93cGFuX3J0bmwuYworKysgL2Rldi9udWxsCkBAIC0xLDcyOSArMCwwIEBACi0vKiBDb3B5cmlnaHQgMjAxMSwgU2llbWVucyBBRwotICogd3JpdHRlbiBieSBBbGV4YW5kZXIgU21pcm5vdiA8YWxleC5ibHVlc21hbi5zbWlybm92QGdtYWlsLmNvbT4KLSAqLwotCi0vKiBCYXNlZCBvbiBwYXRjaGVzIGZyb20gSm9uIFNtaXJsIDxqb25zbWlybEBnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTEgSm9uIFNtaXJsIDxqb25zbWlybEBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLS8qIEpvbidzIGNvZGUgaXMgYmFzZWQgb24gNmxvd3BhbiBpbXBsZW1lbnRhdGlvbiBmb3IgQ29udGlraSB3aGljaCBpczoKLSAqIENvcHlyaWdodCAoYykgMjAwOCwgU3dlZGlzaCBJbnN0aXR1dGUgb2YgQ29tcHV0ZXIgU2NpZW5jZS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBJbnN0aXR1dGUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIElOU1RJVFVURSBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIElOU1RJVFVURSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxNTQuaD4KLSNpbmNsdWRlIDxuZXQvYWZfaWVlZTgwMjE1NC5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0X25ldGRldi5oPgotI2luY2x1ZGUgPG5ldC82bG93cGFuLmg+Ci0jaW5jbHVkZSA8bmV0L2lwdjYuaD4KLQotI2luY2x1ZGUgInJlYXNzZW1ibHkuaCIKLQotc3RhdGljIExJU1RfSEVBRChsb3dwYW5fZGV2aWNlcyk7Ci1zdGF0aWMgaW50IGxvd3Bhbl9vcGVuX2NvdW50OwotCi0vKiBwcml2YXRlIGRldmljZSBpbmZvICovCi1zdHJ1Y3QgbG93cGFuX2Rldl9pbmZvIHsKLQlzdHJ1Y3QgbmV0X2RldmljZQkqcmVhbF9kZXY7IC8qIHJlYWwgV1BBTiBkZXZpY2UgcHRyICovCi0Jc3RydWN0IG11dGV4CQlkZXZfbGlzdF9tdHg7IC8qIG11dGV4IGZvciBsaXN0IG9wcyAqLwotCXUxNgkJCWZyYWdtZW50X3RhZzsKLX07Ci0KLXN0cnVjdCBsb3dwYW5fZGV2X3JlY29yZCB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmxkZXY7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQotLyogZG9uJ3Qgc2F2ZSBwYW4gaWQsIGl0J3MgaW50cmEgcGFuICovCi1zdHJ1Y3QgbG93cGFuX2FkZHIgewotCXU4IG1vZGU7Ci0JdW5pb24gewotCQkvKiBJUHY2IG5lZWRzIGJpZyBlbmRpYW4gaGVyZSAqLwotCQlfX2JlNjQgZXh0ZW5kZWRfYWRkcjsKLQkJX19iZTE2IHNob3J0X2FkZHI7Ci0JfSB1OwotfTsKLQotc3RydWN0IGxvd3Bhbl9hZGRyX2luZm8gewotCXN0cnVjdCBsb3dwYW5fYWRkciBkYWRkcjsKLQlzdHJ1Y3QgbG93cGFuX2FkZHIgc2FkZHI7Ci19OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdAotbG93cGFuX2Rldl9pbmZvICpsb3dwYW5fZGV2X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gbmV0ZGV2X3ByaXYoZGV2KTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QKLWxvd3Bhbl9hZGRyX2luZm8gKmxvd3Bhbl9za2JfcHJpdihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCVdBUk5fT05fT05DRShza2JfaGVhZHJvb20oc2tiKSA8IHNpemVvZihzdHJ1Y3QgbG93cGFuX2FkZHJfaW5mbykpOwotCXJldHVybiAoc3RydWN0IGxvd3Bhbl9hZGRyX2luZm8gKikoc2tiLT5kYXRhIC0KLQkJCXNpemVvZihzdHJ1Y3QgbG93cGFuX2FkZHJfaW5mbykpOwotfQotCi1zdGF0aWMgaW50IGxvd3Bhbl9oZWFkZXJfY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJdW5zaWduZWQgc2hvcnQgdHlwZSwgY29uc3Qgdm9pZCAqX2RhZGRyLAotCQkJCWNvbnN0IHZvaWQgKl9zYWRkciwgdW5zaWduZWQgaW50IGxlbikKLXsKLQljb25zdCB1OCAqc2FkZHIgPSBfc2FkZHI7Ci0JY29uc3QgdTggKmRhZGRyID0gX2RhZGRyOwotCXN0cnVjdCBsb3dwYW5fYWRkcl9pbmZvICppbmZvOwotCi0JLyogVE9ETzoKLQkgKiBpZiB0aGlzIHBhY2thZ2UgaXNuJ3QgaXB2NiBvbmUsIHdoZXJlIHNob3VsZCBpdCBiZSByb3V0ZWQ/Ci0JICovCi0JaWYgKHR5cGUgIT0gRVRIX1BfSVBWNikKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoIXNhZGRyKQotCQlzYWRkciA9IGRldi0+ZGV2X2FkZHI7Ci0KLQlyYXdfZHVtcF9pbmxpbmUoX19mdW5jX18sICJzYWRkciIsICh1bnNpZ25lZCBjaGFyICopc2FkZHIsIDgpOwotCXJhd19kdW1wX2lubGluZShfX2Z1bmNfXywgImRhZGRyIiwgKHVuc2lnbmVkIGNoYXIgKilkYWRkciwgOCk7Ci0KLQlpbmZvID0gbG93cGFuX3NrYl9wcml2KHNrYik7Ci0KLQkvKiBUT0RPOiBDdXJyZW50bHkgd2Ugb25seSBzdXBwb3J0IGV4dGVuZGVkX2FkZHIgKi8KLQlpbmZvLT5kYWRkci5tb2RlID0gSUVFRTgwMjE1NF9BRERSX0xPTkc7Ci0JbWVtY3B5KCZpbmZvLT5kYWRkci51LmV4dGVuZGVkX2FkZHIsIGRhZGRyLAotCSAgICAgICBzaXplb2YoaW5mby0+ZGFkZHIudS5leHRlbmRlZF9hZGRyKSk7Ci0JaW5mby0+c2FkZHIubW9kZSA9IElFRUU4MDIxNTRfQUREUl9MT05HOwotCW1lbWNweSgmaW5mby0+c2FkZHIudS5leHRlbmRlZF9hZGRyLCBzYWRkciwKLQkgICAgICAgc2l6ZW9mKGluZm8tPmRhZGRyLnUuZXh0ZW5kZWRfYWRkcikpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbG93cGFuX2dpdmVfc2tiX3RvX2RldmljZXMoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBsb3dwYW5fZGV2X3JlY29yZCAqZW50cnk7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYl9jcDsKLQlpbnQgc3RhdCA9IE5FVF9SWF9TVUNDRVNTOwotCi0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQVjYpOwotCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgJmxvd3Bhbl9kZXZpY2VzLCBsaXN0KQotCQlpZiAobG93cGFuX2Rldl9pbmZvKGVudHJ5LT5sZGV2KS0+cmVhbF9kZXYgPT0gc2tiLT5kZXYpIHsKLQkJCXNrYl9jcCA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoIXNrYl9jcCkgewotCQkJCWtmcmVlX3NrYihza2IpOwotCQkJCXJjdV9yZWFkX3VubG9jaygpOwotCQkJCXJldHVybiBORVRfUlhfRFJPUDsKLQkJCX0KLQotCQkJc2tiX2NwLT5kZXYgPSBlbnRyeS0+bGRldjsKLQkJCXN0YXQgPSBuZXRpZl9yeChza2JfY3ApOwotCQkJaWYgKHN0YXQgPT0gTkVUX1JYX0RST1ApCi0JCQkJYnJlYWs7Ci0JCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCWNvbnN1bWVfc2tiKHNrYik7Ci0KLQlyZXR1cm4gc3RhdDsKLX0KLQotc3RhdGljIGludAotaXBoY19kZWNvbXByZXNzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTU0X2hkciAqaGRyKQotewotCXU4IGlwaGMwLCBpcGhjMTsKLQlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyX3NhIHNhLCBkYTsKLQl2b2lkICpzYXAsICpkYXA7Ci0KLQlyYXdfZHVtcF90YWJsZShfX2Z1bmNfXywgInJhdyBza2IgZGF0YSBkdW1wIiwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0JLyogYXQgbGVhc3QgdHdvIGJ5dGVzIHdpbGwgYmUgdXNlZCBmb3IgdGhlIGVuY29kaW5nICovCi0JaWYgKHNrYi0+bGVuIDwgMikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAobG93cGFuX2ZldGNoX3NrYl91OChza2IsICZpcGhjMCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGxvd3Bhbl9mZXRjaF9za2JfdTgoc2tiLCAmaXBoYzEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWllZWU4MDIxNTRfYWRkcl90b19zYSgmc2EsICZoZHItPnNvdXJjZSk7Ci0JaWVlZTgwMjE1NF9hZGRyX3RvX3NhKCZkYSwgJmhkci0+ZGVzdCk7Ci0KLQlpZiAoc2EuYWRkcl90eXBlID09IElFRUU4MDIxNTRfQUREUl9TSE9SVCkKLQkJc2FwID0gJnNhLnNob3J0X2FkZHI7Ci0JZWxzZQotCQlzYXAgPSAmc2EuaHdhZGRyOwotCi0JaWYgKGRhLmFkZHJfdHlwZSA9PSBJRUVFODAyMTU0X0FERFJfU0hPUlQpCi0JCWRhcCA9ICZkYS5zaG9ydF9hZGRyOwotCWVsc2UKLQkJZGFwID0gJmRhLmh3YWRkcjsKLQotCXJldHVybiBsb3dwYW5faGVhZGVyX2RlY29tcHJlc3Moc2tiLCBza2ItPmRldiwgc2FwLCBzYS5hZGRyX3R5cGUsCi0JCQkJCUlFRUU4MDIxNTRfQUREUl9MRU4sIGRhcCwgZGEuYWRkcl90eXBlLAotCQkJCQlJRUVFODAyMTU0X0FERFJfTEVOLCBpcGhjMCwgaXBoYzEpOwotfQotCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYqCi1sb3dwYW5fYWxsb2NfZnJhZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgc2l6ZSwKLQkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjE1NF9oZHIgKm1hc3Rlcl9oZHIpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gbG93cGFuX2Rldl9pbmZvKHNrYi0+ZGV2KS0+cmVhbF9kZXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKmZyYWc7Ci0JaW50IHJjOwotCi0JZnJhZyA9IGFsbG9jX3NrYihyZWFsX2Rldi0+aGFyZF9oZWFkZXJfbGVuICsKLQkJCSByZWFsX2Rldi0+bmVlZGVkX3RhaWxyb29tICsgc2l6ZSwKLQkJCSBHRlBfQVRPTUlDKTsKLQotCWlmIChsaWtlbHkoZnJhZykpIHsKLQkJZnJhZy0+ZGV2ID0gcmVhbF9kZXY7Ci0JCWZyYWctPnByaW9yaXR5ID0gc2tiLT5wcmlvcml0eTsKLQkJc2tiX3Jlc2VydmUoZnJhZywgcmVhbF9kZXYtPmhhcmRfaGVhZGVyX2xlbik7Ci0JCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihmcmFnKTsKLQkJKm1hY19jYihmcmFnKSA9ICptYWNfY2Ioc2tiKTsKLQotCQlyYyA9IGRldl9oYXJkX2hlYWRlcihmcmFnLCByZWFsX2RldiwgMCwgJm1hc3Rlcl9oZHItPmRlc3QsCi0JCQkJICAgICAmbWFzdGVyX2hkci0+c291cmNlLCBzaXplKTsKLQkJaWYgKHJjIDwgMCkgewotCQkJa2ZyZWVfc2tiKGZyYWcpOwotCQkJcmV0dXJuIEVSUl9QVFIocmMpOwotCQl9Ci0JfSBlbHNlIHsKLQkJZnJhZyA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCi0JcmV0dXJuIGZyYWc7Ci19Ci0KLXN0YXRpYyBpbnQKLWxvd3Bhbl94bWl0X2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTU0X2hkciAqd3Bhbl9oZHIsCi0JCSAgICAgdTggKmZyYWdfaGRyLCBpbnQgZnJhZ19oZHJsZW4sCi0JCSAgICAgaW50IG9mZnNldCwgaW50IGxlbikKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZzsKLQotCXJhd19kdW1wX2lubGluZShfX2Z1bmNfXywgIiBmcmFnbWVudCBoZWFkZXIiLCBmcmFnX2hkciwgZnJhZ19oZHJsZW4pOwotCi0JZnJhZyA9IGxvd3Bhbl9hbGxvY19mcmFnKHNrYiwgZnJhZ19oZHJsZW4gKyBsZW4sIHdwYW5faGRyKTsKLQlpZiAoSVNfRVJSKGZyYWcpKQotCQlyZXR1cm4gLVBUUl9FUlIoZnJhZyk7Ci0KLQltZW1jcHkoc2tiX3B1dChmcmFnLCBmcmFnX2hkcmxlbiksIGZyYWdfaGRyLCBmcmFnX2hkcmxlbik7Ci0JbWVtY3B5KHNrYl9wdXQoZnJhZywgbGVuKSwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBvZmZzZXQsIGxlbik7Ci0KLQlyYXdfZHVtcF90YWJsZShfX2Z1bmNfXywgIiBmcmFnbWVudCBkdW1wIiwgZnJhZy0+ZGF0YSwgZnJhZy0+bGVuKTsKLQotCXJldHVybiBkZXZfcXVldWVfeG1pdChmcmFnKTsKLX0KLQotc3RhdGljIGludAotbG93cGFuX3htaXRfZnJhZ21lbnRlZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfaGRyICp3cGFuX2hkcikKLXsKLQl1MTYgZGdyYW1fc2l6ZSwgZGdyYW1fb2Zmc2V0OwotCV9fYmUxNiBmcmFnX3RhZzsKLQl1OCBmcmFnX2hkcls1XTsKLQlpbnQgZnJhZ19jYXAsIGZyYWdfbGVuLCBwYXlsb2FkX2NhcCwgcmM7Ci0JaW50IHNrYl91bnByb2Nlc3NlZCwgc2tiX29mZnNldDsKLQotCWRncmFtX3NpemUgPSBsb3dwYW5fdW5jb21wcmVzc19zaXplKHNrYiwgJmRncmFtX29mZnNldCkgLQotCQkgICAgIHNrYi0+bWFjX2xlbjsKLQlmcmFnX3RhZyA9IGh0b25zKGxvd3Bhbl9kZXZfaW5mbyhkZXYpLT5mcmFnbWVudF90YWcpOwotCWxvd3Bhbl9kZXZfaW5mbyhkZXYpLT5mcmFnbWVudF90YWcrKzsKLQotCWZyYWdfaGRyWzBdID0gTE9XUEFOX0RJU1BBVENIX0ZSQUcxIHwgKChkZ3JhbV9zaXplID4+IDgpICYgMHgwNyk7Ci0JZnJhZ19oZHJbMV0gPSBkZ3JhbV9zaXplICYgMHhmZjsKLQltZW1jcHkoZnJhZ19oZHIgKyAyLCAmZnJhZ190YWcsIHNpemVvZihmcmFnX3RhZykpOwotCi0JcGF5bG9hZF9jYXAgPSBpZWVlODAyMTU0X21heF9wYXlsb2FkKHdwYW5faGRyKTsKLQotCWZyYWdfbGVuID0gcm91bmRfZG93bihwYXlsb2FkX2NhcCAtIExPV1BBTl9GUkFHMV9IRUFEX1NJWkUgLQotCQkJICAgICAgc2tiX25ldHdvcmtfaGVhZGVyX2xlbihza2IpLCA4KTsKLQotCXNrYl9vZmZzZXQgPSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7Ci0Jc2tiX3VucHJvY2Vzc2VkID0gc2tiLT5sZW4gLSBza2ItPm1hY19sZW4gLSBza2Jfb2Zmc2V0OwotCi0JcmMgPSBsb3dwYW5feG1pdF9mcmFnbWVudChza2IsIHdwYW5faGRyLCBmcmFnX2hkciwKLQkJCQkgIExPV1BBTl9GUkFHMV9IRUFEX1NJWkUsIDAsCi0JCQkJICBmcmFnX2xlbiArIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSk7Ci0JaWYgKHJjKSB7Ci0JCXByX2RlYnVnKCIlcyB1bmFibGUgdG8gc2VuZCBGUkFHMSBwYWNrZXQgKHRhZzogJWQpIiwKLQkJCSBfX2Z1bmNfXywgbnRvaHMoZnJhZ190YWcpKTsKLQkJZ290byBlcnI7Ci0JfQotCi0JZnJhZ19oZHJbMF0gJj0gfkxPV1BBTl9ESVNQQVRDSF9GUkFHMTsKLQlmcmFnX2hkclswXSB8PSBMT1dQQU5fRElTUEFUQ0hfRlJBR047Ci0JZnJhZ19jYXAgPSByb3VuZF9kb3duKHBheWxvYWRfY2FwIC0gTE9XUEFOX0ZSQUdOX0hFQURfU0laRSwgOCk7Ci0KLQlkbyB7Ci0JCWRncmFtX29mZnNldCArPSBmcmFnX2xlbjsKLQkJc2tiX29mZnNldCArPSBmcmFnX2xlbjsKLQkJc2tiX3VucHJvY2Vzc2VkIC09IGZyYWdfbGVuOwotCQlmcmFnX2xlbiA9IG1pbihmcmFnX2NhcCwgc2tiX3VucHJvY2Vzc2VkKTsKLQotCQlmcmFnX2hkcls0XSA9IGRncmFtX29mZnNldCA+PiAzOwotCi0JCXJjID0gbG93cGFuX3htaXRfZnJhZ21lbnQoc2tiLCB3cGFuX2hkciwgZnJhZ19oZHIsCi0JCQkJCSAgTE9XUEFOX0ZSQUdOX0hFQURfU0laRSwgc2tiX29mZnNldCwKLQkJCQkJICBmcmFnX2xlbik7Ci0JCWlmIChyYykgewotCQkJcHJfZGVidWcoIiVzIHVuYWJsZSB0byBzZW5kIGEgRlJBR04gcGFja2V0LiAodGFnOiAlZCwgb2Zmc2V0OiAlZClcbiIsCi0JCQkJIF9fZnVuY19fLCBudG9ocyhmcmFnX3RhZyksIHNrYl9vZmZzZXQpOwotCQkJZ290byBlcnI7Ci0JCX0KLQl9IHdoaWxlIChza2JfdW5wcm9jZXNzZWQgPiBmcmFnX2NhcCk7Ci0KLQljb25zdW1lX3NrYihza2IpOwotCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwotCi1lcnI6Ci0Ja2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGxvd3Bhbl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyIHNhLCBkYTsKLQlzdHJ1Y3QgaWVlZTgwMjE1NF9tYWNfY2IgKmNiID0gbWFjX2NiX2luaXQoc2tiKTsKLQlzdHJ1Y3QgbG93cGFuX2FkZHJfaW5mbyBpbmZvOwotCXZvaWQgKmRhZGRyLCAqc2FkZHI7Ci0KLQltZW1jcHkoJmluZm8sIGxvd3Bhbl9za2JfcHJpdihza2IpLCBzaXplb2YoaW5mbykpOwotCi0JLyogVE9ETzogQ3VycmVudGx5IHdlIG9ubHkgc3VwcG9ydCBleHRlbmRlZF9hZGRyICovCi0JZGFkZHIgPSAmaW5mby5kYWRkci51LmV4dGVuZGVkX2FkZHI7Ci0Jc2FkZHIgPSAmaW5mby5zYWRkci51LmV4dGVuZGVkX2FkZHI7Ci0KLQlsb3dwYW5faGVhZGVyX2NvbXByZXNzKHNrYiwgZGV2LCBFVEhfUF9JUFY2LCBkYWRkciwgc2FkZHIsIHNrYi0+bGVuKTsKLQotCWNiLT50eXBlID0gSUVFRTgwMjE1NF9GQ19UWVBFX0RBVEE7Ci0KLQkvKiBwcmVwYXJlIHdwYW4gYWRkcmVzcyBkYXRhICovCi0Jc2EubW9kZSA9IElFRUU4MDIxNTRfQUREUl9MT05HOwotCXNhLnBhbl9pZCA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS0+Z2V0X3Bhbl9pZChkZXYpOwotCXNhLmV4dGVuZGVkX2FkZHIgPSBpZWVlODAyMTU0X2RldmFkZHJfZnJvbV9yYXcoc2FkZHIpOwotCi0JLyogaW50cmEtUEFOIGNvbW11bmljYXRpb25zICovCi0JZGEucGFuX2lkID0gc2EucGFuX2lkOwotCi0JLyogaWYgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgdGhlIGJyb2FkY2FzdCBhZGRyZXNzLCB1c2UgdGhlCi0JICogY29ycmVzcG9uZGluZyBzaG9ydCBhZGRyZXNzCi0JICovCi0JaWYgKGxvd3Bhbl9pc19hZGRyX2Jyb2FkY2FzdCgoY29uc3QgdTggKilkYWRkcikpIHsKLQkJZGEubW9kZSA9IElFRUU4MDIxNTRfQUREUl9TSE9SVDsKLQkJZGEuc2hvcnRfYWRkciA9IGNwdV90b19sZTE2KElFRUU4MDIxNTRfQUREUl9CUk9BRENBU1QpOwotCQljYi0+YWNrcmVxID0gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJZGEubW9kZSA9IElFRUU4MDIxNTRfQUREUl9MT05HOwotCQlkYS5leHRlbmRlZF9hZGRyID0gaWVlZTgwMjE1NF9kZXZhZGRyX2Zyb21fcmF3KGRhZGRyKTsKLQkJY2ItPmFja3JlcSA9IHRydWU7Ci0JfQotCi0JcmV0dXJuIGRldl9oYXJkX2hlYWRlcihza2IsIGxvd3Bhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldiwKLQkJCUVUSF9QX0lQVjYsICh2b2lkICopJmRhLCAodm9pZCAqKSZzYSwgMCk7Ci19Ci0KLXN0YXRpYyBuZXRkZXZfdHhfdCBsb3dwYW5feG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTU0X2hkciB3cGFuX2hkcjsKLQlpbnQgbWF4X3NpbmdsZSwgcmV0OwotCi0JcHJfZGVidWcoInBhY2thZ2UgeG1pdFxuIik7Ci0KLQkvKiBXZSBtdXN0IHRha2UgYSBjb3B5IG9mIHRoZSBza2IgYmVmb3JlIHdlIG1vZGlmeS9yZXBsYWNlIHRoZSBpcHY2Ci0JICogaGVhZGVyIGFzIHRoZSBoZWFkZXIgY291bGQgYmUgdXNlZCBlbHNld2hlcmUKLQkgKi8KLQlza2IgPSBza2JfdW5zaGFyZShza2IsIEdGUF9BVE9NSUMpOwotCWlmICghc2tiKQotCQlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKLQotCXJldCA9IGxvd3Bhbl9oZWFkZXIoc2tiLCBkZXYpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKLQl9Ci0KLQlpZiAoaWVlZTgwMjE1NF9oZHJfcGVlayhza2IsICZ3cGFuX2hkcikgPCAwKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gTkVUX1hNSVRfRFJPUDsKLQl9Ci0KLQltYXhfc2luZ2xlID0gaWVlZTgwMjE1NF9tYXhfcGF5bG9hZCgmd3Bhbl9oZHIpOwotCi0JaWYgKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIDw9IG1heF9zaW5nbGUpIHsKLQkJc2tiLT5kZXYgPSBsb3dwYW5fZGV2X2luZm8oZGV2KS0+cmVhbF9kZXY7Ci0JCXJldHVybiBkZXZfcXVldWVfeG1pdChza2IpOwotCX0gZWxzZSB7Ci0JCW5ldGRldl90eF90IHJjOwotCi0JCXByX2RlYnVnKCJmcmFtZSBpcyB0b28gYmlnLCBmcmFnbWVudGF0aW9uIGlzIG5lZWRlZFxuIik7Ci0JCXJjID0gbG93cGFuX3htaXRfZnJhZ21lbnRlZChza2IsIGRldiwgJndwYW5faGRyKTsKLQotCQlyZXR1cm4gcmMgPCAwID8gTkVUX1hNSVRfRFJPUCA6IHJjOwotCX0KLX0KLQotc3RhdGljIF9fbGUxNiBsb3dwYW5fZ2V0X3Bhbl9pZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IGxvd3Bhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKLQotCXJldHVybiBpZWVlODAyMTU0X21sbWVfb3BzKHJlYWxfZGV2KS0+Z2V0X3Bhbl9pZChyZWFsX2Rldik7Ci19Ci0KLXN0YXRpYyBfX2xlMTYgbG93cGFuX2dldF9zaG9ydF9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxfZGV2ID0gbG93cGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2OwotCi0JcmV0dXJuIGllZWU4MDIxNTRfbWxtZV9vcHMocmVhbF9kZXYpLT5nZXRfc2hvcnRfYWRkcihyZWFsX2Rldik7Ci19Ci0KLXN0YXRpYyB1OCBsb3dwYW5fZ2V0X2Rzbihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldiA9IGxvd3Bhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2RldjsKLQotCXJldHVybiBpZWVlODAyMTU0X21sbWVfb3BzKHJlYWxfZGV2KS0+Z2V0X2RzbihyZWFsX2Rldik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaGVhZGVyX29wcyBsb3dwYW5faGVhZGVyX29wcyA9IHsKLQkuY3JlYXRlCT0gbG93cGFuX2hlYWRlcl9jcmVhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGxvd3Bhbl90eF9idXN5bG9jazsKLXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgbG93cGFuX25ldGRldl94bWl0X2xvY2tfa2V5OwotCi1zdGF0aWMgdm9pZCBsb3dwYW5fc2V0X2xvY2tkZXBfY2xhc3Nfb25lKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkJCSBzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEsCi0JCQkJCSB2b2lkICpfdW51c2VkKQotewotCWxvY2tkZXBfc2V0X2NsYXNzKCZ0eHEtPl94bWl0X2xvY2ssCi0JCQkgICZsb3dwYW5fbmV0ZGV2X3htaXRfbG9ja19rZXkpOwotfQotCi1zdGF0aWMgaW50IGxvd3Bhbl9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCW5ldGRldl9mb3JfZWFjaF90eF9xdWV1ZShkZXYsIGxvd3Bhbl9zZXRfbG9ja2RlcF9jbGFzc19vbmUsIE5VTEwpOwotCWRldi0+cWRpc2NfdHhfYnVzeWxvY2sgPSAmbG93cGFuX3R4X2J1c3lsb2NrOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGxvd3Bhbl9uZXRkZXZfb3BzID0gewotCS5uZG9faW5pdAkJPSBsb3dwYW5fZGV2X2luaXQsCi0JLm5kb19zdGFydF94bWl0CQk9IGxvd3Bhbl94bWl0LAotfTsKLQotc3RhdGljIHN0cnVjdCBpZWVlODAyMTU0X21sbWVfb3BzIGxvd3Bhbl9tbG1lID0gewotCS5nZXRfcGFuX2lkID0gbG93cGFuX2dldF9wYW5faWQsCi0JLmdldF9zaG9ydF9hZGRyID0gbG93cGFuX2dldF9zaG9ydF9hZGRyLAotCS5nZXRfZHNuID0gbG93cGFuX2dldF9kc24sCi19OwotCi1zdGF0aWMgdm9pZCBsb3dwYW5fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlkZXYtPmFkZHJfbGVuCQk9IElFRUU4MDIxNTRfQUREUl9MRU47Ci0JbWVtc2V0KGRldi0+YnJvYWRjYXN0LCAweGZmLCBJRUVFODAyMTU0X0FERFJfTEVOKTsKLQlkZXYtPnR5cGUJCT0gQVJQSFJEX0lFRUU4MDIxNTQ7Ci0JLyogRnJhbWUgQ29udHJvbCArIFNlcXVlbmNlIE51bWJlciArIEFkZHJlc3MgZmllbGRzICsgU2VjdXJpdHkgSGVhZGVyICovCi0JZGV2LT5oYXJkX2hlYWRlcl9sZW4JPSAyICsgMSArIDIwICsgMTQ7Ci0JZGV2LT5uZWVkZWRfdGFpbHJvb20JPSAyOyAvKiBGQ1MgKi8KLQlkZXYtPm10dQkJPSBJUFY2X01JTl9NVFU7Ci0JZGV2LT50eF9xdWV1ZV9sZW4JPSAwOwotCWRldi0+ZmxhZ3MJCT0gSUZGX0JST0FEQ0FTVCB8IElGRl9NVUxUSUNBU1Q7Ci0JZGV2LT53YXRjaGRvZ190aW1lbwk9IDA7Ci0KLQlkZXYtPm5ldGRldl9vcHMJCT0gJmxvd3Bhbl9uZXRkZXZfb3BzOwotCWRldi0+aGVhZGVyX29wcwkJPSAmbG93cGFuX2hlYWRlcl9vcHM7Ci0JZGV2LT5tbF9wcml2CQk9ICZsb3dwYW5fbWxtZTsKLQlkZXYtPmRlc3RydWN0b3IJCT0gZnJlZV9uZXRkZXY7Ci19Ci0KLXN0YXRpYyBpbnQgbG93cGFuX3ZhbGlkYXRlKHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKLXsKLQlpZiAodGJbSUZMQV9BRERSRVNTXSkgewotCQlpZiAobmxhX2xlbih0YltJRkxBX0FERFJFU1NdKSAhPSBJRUVFODAyMTU0X0FERFJfTEVOKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGxvd3Bhbl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQotewotCXN0cnVjdCBpZWVlODAyMTU0X2hkciBoZHI7Ci0JaW50IHJldDsKLQotCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOwotCWlmICghc2tiKQotCQlnb3RvIGRyb3A7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKLQkJZ290byBkcm9wX3NrYjsKLQotCWlmIChza2ItPnBrdF90eXBlID09IFBBQ0tFVF9PVEhFUkhPU1QpCi0JCWdvdG8gZHJvcF9za2I7Ci0KLQlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0KQotCQlnb3RvIGRyb3Bfc2tiOwotCi0JaWYgKGllZWU4MDIxNTRfaGRyX3BlZWtfYWRkcnMoc2tiLCAmaGRyKSA8IDApCi0JCWdvdG8gZHJvcF9za2I7Ci0KLQkvKiBjaGVjayB0aGF0IGl0J3Mgb3VyIGJ1ZmZlciAqLwotCWlmIChza2ItPmRhdGFbMF0gPT0gTE9XUEFOX0RJU1BBVENIX0lQVjYpIHsKLQkJLyogUHVsbCBvZmYgdGhlIDEtYnl0ZSBvZiA2bG93cGFuIGhlYWRlci4gKi8KLQkJc2tiX3B1bGwoc2tiLCAxKTsKLQkJcmV0dXJuIGxvd3Bhbl9naXZlX3NrYl90b19kZXZpY2VzKHNrYiwgTlVMTCk7Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChza2ItPmRhdGFbMF0gJiAweGUwKSB7Ci0JCWNhc2UgTE9XUEFOX0RJU1BBVENIX0lQSEM6CS8qIGlwdjYgZGF0YWdyYW0gKi8KLQkJCXJldCA9IGlwaGNfZGVjb21wcmVzcyhza2IsICZoZHIpOwotCQkJaWYgKHJldCA8IDApCi0JCQkJZ290byBkcm9wX3NrYjsKLQotCQkJcmV0dXJuIGxvd3Bhbl9naXZlX3NrYl90b19kZXZpY2VzKHNrYiwgTlVMTCk7Ci0JCWNhc2UgTE9XUEFOX0RJU1BBVENIX0ZSQUcxOgkvKiBmaXJzdCBmcmFnbWVudCBoZWFkZXIgKi8KLQkJCXJldCA9IGxvd3Bhbl9mcmFnX3Jjdihza2IsIExPV1BBTl9ESVNQQVRDSF9GUkFHMSk7Ci0JCQlpZiAocmV0ID09IDEpIHsKLQkJCQlyZXQgPSBpcGhjX2RlY29tcHJlc3Moc2tiLCAmaGRyKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJZ290byBkcm9wX3NrYjsKLQotCQkJCXJldHVybiBsb3dwYW5fZ2l2ZV9za2JfdG9fZGV2aWNlcyhza2IsIE5VTEwpOwotCQkJfSBlbHNlIGlmIChyZXQgPT0gLTEpIHsKLQkJCQlyZXR1cm4gTkVUX1JYX0RST1A7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKLQkJCX0KLQkJY2FzZSBMT1dQQU5fRElTUEFUQ0hfRlJBR046CS8qIG5leHQgZnJhZ21lbnRzIGhlYWRlcnMgKi8KLQkJCXJldCA9IGxvd3Bhbl9mcmFnX3Jjdihza2IsIExPV1BBTl9ESVNQQVRDSF9GUkFHTik7Ci0JCQlpZiAocmV0ID09IDEpIHsKLQkJCQlyZXQgPSBpcGhjX2RlY29tcHJlc3Moc2tiLCAmaGRyKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJZ290byBkcm9wX3NrYjsKLQotCQkJCXJldHVybiBsb3dwYW5fZ2l2ZV9za2JfdG9fZGV2aWNlcyhza2IsIE5VTEwpOwotCQkJfSBlbHNlIGlmIChyZXQgPT0gLTEpIHsKLQkJCQlyZXR1cm4gTkVUX1JYX0RST1A7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKLQkJCX0KLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi1kcm9wX3NrYjoKLQlrZnJlZV9za2Ioc2tiKTsKLWRyb3A6Ci0JcmV0dXJuIE5FVF9SWF9EUk9QOwotfQotCi1zdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGxvd3Bhbl9wYWNrZXRfdHlwZSA9IHsKLQkudHlwZSA9IGh0b25zKEVUSF9QX0lFRUU4MDIxNTQpLAotCS5mdW5jID0gbG93cGFuX3JjdiwKLX07Ci0KLXN0YXRpYyBpbnQgbG93cGFuX25ld2xpbmsoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpyZWFsX2RldjsKLQlzdHJ1Y3QgbG93cGFuX2Rldl9yZWNvcmQgKmVudHJ5OwotCWludCByZXQ7Ci0KLQlBU1NFUlRfUlROTCgpOwotCi0JcHJfZGVidWcoImFkZGluZyBuZXcgbGlua1xuIik7Ci0KLQlpZiAoIXRiW0lGTEFfTElOS10pCi0JCXJldHVybiAtRUlOVkFMOwotCS8qIGZpbmQgYW5kIGhvbGQgcmVhbCB3cGFuIGRldmljZSAqLwotCXJlYWxfZGV2ID0gZGV2X2dldF9ieV9pbmRleChzcmNfbmV0LCBubGFfZ2V0X3UzMih0YltJRkxBX0xJTktdKSk7Ci0JaWYgKCFyZWFsX2RldikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKHJlYWxfZGV2LT50eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0KSB7Ci0JCWRldl9wdXQocmVhbF9kZXYpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlsb3dwYW5fZGV2X2luZm8oZGV2KS0+cmVhbF9kZXYgPSByZWFsX2RldjsKLQltdXRleF9pbml0KCZsb3dwYW5fZGV2X2luZm8oZGV2KS0+ZGV2X2xpc3RfbXR4KTsKLQotCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlbnRyeSkgewotCQlkZXZfcHV0KHJlYWxfZGV2KTsKLQkJbG93cGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2ID0gTlVMTDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZW50cnktPmxkZXYgPSBkZXY7Ci0KLQkvKiBTZXQgdGhlIGxvd3BhbiBoYXJkd2FyZSBhZGRyZXNzIHRvIHRoZSB3cGFuIGhhcmR3YXJlIGFkZHJlc3MuICovCi0JbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHJlYWxfZGV2LT5kZXZfYWRkciwgSUVFRTgwMjE1NF9BRERSX0xFTik7Ci0KLQltdXRleF9sb2NrKCZsb3dwYW5fZGV2X2luZm8oZGV2KS0+ZGV2X2xpc3RfbXR4KTsKLQlJTklUX0xJU1RfSEVBRCgmZW50cnktPmxpc3QpOwotCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5saXN0LCAmbG93cGFuX2RldmljZXMpOwotCW11dGV4X3VubG9jaygmbG93cGFuX2Rldl9pbmZvKGRldiktPmRldl9saXN0X210eCk7Ci0KLQlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKLQlpZiAocmV0ID49IDApIHsKLQkJaWYgKCFsb3dwYW5fb3Blbl9jb3VudCkKLQkJCWRldl9hZGRfcGFjaygmbG93cGFuX3BhY2tldF90eXBlKTsKLQkJbG93cGFuX29wZW5fY291bnQrKzsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBsb3dwYW5fZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQotewotCXN0cnVjdCBsb3dwYW5fZGV2X2luZm8gKmxvd3Bhbl9kZXYgPSBsb3dwYW5fZGV2X2luZm8oZGV2KTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSBsb3dwYW5fZGV2LT5yZWFsX2RldjsKLQlzdHJ1Y3QgbG93cGFuX2Rldl9yZWNvcmQgKmVudHJ5LCAqdG1wOwotCi0JQVNTRVJUX1JUTkwoKTsKLQotCWxvd3Bhbl9vcGVuX2NvdW50LS07Ci0JaWYgKCFsb3dwYW5fb3Blbl9jb3VudCkKLQkJZGV2X3JlbW92ZV9wYWNrKCZsb3dwYW5fcGFja2V0X3R5cGUpOwotCi0JbXV0ZXhfbG9jaygmbG93cGFuX2Rldl9pbmZvKGRldiktPmRldl9saXN0X210eCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCB0bXAsICZsb3dwYW5fZGV2aWNlcywgbGlzdCkgewotCQlpZiAoZW50cnktPmxkZXYgPT0gZGV2KSB7Ci0JCQlsaXN0X2RlbCgmZW50cnktPmxpc3QpOwotCQkJa2ZyZWUoZW50cnkpOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmbG93cGFuX2Rldl9pbmZvKGRldiktPmRldl9saXN0X210eCk7Ci0KLQltdXRleF9kZXN0cm95KCZsb3dwYW5fZGV2X2luZm8oZGV2KS0+ZGV2X2xpc3RfbXR4KTsKLQotCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX3F1ZXVlKGRldiwgaGVhZCk7Ci0KLQlkZXZfcHV0KHJlYWxfZGV2KTsKLX0KLQotc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGxvd3Bhbl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0gewotCS5raW5kCQk9ICJsb3dwYW4iLAotCS5wcml2X3NpemUJPSBzaXplb2Yoc3RydWN0IGxvd3Bhbl9kZXZfaW5mbyksCi0JLnNldHVwCQk9IGxvd3Bhbl9zZXR1cCwKLQkubmV3bGluawk9IGxvd3Bhbl9uZXdsaW5rLAotCS5kZWxsaW5rCT0gbG93cGFuX2RlbGxpbmssCi0JLnZhbGlkYXRlCT0gbG93cGFuX3ZhbGlkYXRlLAotfTsKLQotc3RhdGljIGlubGluZSBpbnQgX19pbml0IGxvd3Bhbl9uZXRsaW5rX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gcnRubF9saW5rX3JlZ2lzdGVyKCZsb3dwYW5fbGlua19vcHMpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbG93cGFuX25ldGxpbmtfZmluaSh2b2lkKQotewotCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZsb3dwYW5fbGlua19vcHMpOwotfQotCi1zdGF0aWMgaW50IGxvd3Bhbl9kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWQsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTsKLQlMSVNUX0hFQUQoZGVsX2xpc3QpOwotCXN0cnVjdCBsb3dwYW5fZGV2X3JlY29yZCAqZW50cnksICp0bXA7Ci0KLQlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0KQotCQlnb3RvIG91dDsKLQotCWlmIChldmVudCA9PSBORVRERVZfVU5SRUdJU1RFUikgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHRtcCwgJmxvd3Bhbl9kZXZpY2VzLCBsaXN0KSB7Ci0JCQlpZiAobG93cGFuX2Rldl9pbmZvKGVudHJ5LT5sZGV2KS0+cmVhbF9kZXYgPT0gZGV2KQotCQkJCWxvd3Bhbl9kZWxsaW5rKGVudHJ5LT5sZGV2LCAmZGVsX2xpc3QpOwotCQl9Ci0KLQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSgmZGVsX2xpc3QpOwotCX0KLQotb3V0OgotCXJldHVybiBOT1RJRllfRE9ORTsKLX0KLQotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBsb3dwYW5fZGV2X25vdGlmaWVyID0gewotCS5ub3RpZmllcl9jYWxsID0gbG93cGFuX2RldmljZV9ldmVudCwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGxvd3Bhbl9pbml0X21vZHVsZSh2b2lkKQotewotCWludCBlcnIgPSAwOwotCi0JZXJyID0gbG93cGFuX25ldF9mcmFnX2luaXQoKTsKLQlpZiAoZXJyIDwgMCkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSBsb3dwYW5fbmV0bGlua19pbml0KCk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gb3V0X2ZyYWc7Ci0KLQllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJmxvd3Bhbl9kZXZfbm90aWZpZXIpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dF9wYWNrOwotCi0JcmV0dXJuIDA7Ci0KLW91dF9wYWNrOgotCWxvd3Bhbl9uZXRsaW5rX2ZpbmkoKTsKLW91dF9mcmFnOgotCWxvd3Bhbl9uZXRfZnJhZ19leGl0KCk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGxvd3Bhbl9jbGVhbnVwX21vZHVsZSh2b2lkKQotewotCWxvd3Bhbl9uZXRsaW5rX2ZpbmkoKTsKLQotCWxvd3Bhbl9uZXRfZnJhZ19leGl0KCk7Ci0KLQl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbG93cGFuX2Rldl9ub3RpZmllcik7Ci19Ci0KLW1vZHVsZV9pbml0KGxvd3Bhbl9pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChsb3dwYW5fY2xlYW51cF9tb2R1bGUpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FMSUFTX1JUTkxfTElOSygibG93cGFuIik7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9LY29uZmlnIGIvbmV0L2llZWU4MDIxNTQvS2NvbmZpZwppbmRleCBjMGQ0MTU0Li4xMzcwZDViIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9LY29uZmlnCisrKyBiL25ldC9pZWVlODAyMTU0L0tjb25maWcKQEAgLTEsNCArMSw0IEBACi1jb25maWcgSUVFRTgwMjE1NAorbWVudWNvbmZpZyBJRUVFODAyMTU0CiAJdHJpc3RhdGUgIklFRUUgU3RkIDgwMi4xNS40IExvdy1SYXRlIFdpcmVsZXNzIFBlcnNvbmFsIEFyZWEgTmV0d29ya3Mgc3VwcG9ydCIKIAktLS1oZWxwLS0tCiAJICBJRUVFIFN0ZCA4MDIuMTUuNCBkZWZpbmVzIGEgbG93IGRhdGEgcmF0ZSwgbG93IHBvd2VyIGFuZCBsb3cKQEAgLTEwLDggKzEwLDE2IEBACiAJICBTYXkgWSBoZXJlIHRvIGNvbXBpbGUgTFItV1BBTiBzdXBwb3J0IGludG8gdGhlIGtlcm5lbCBvciBzYXkgTSB0bwogCSAgY29tcGlsZSBpdCBhcyBtb2R1bGVzLgogCi1jb25maWcgSUVFRTgwMjE1NF82TE9XUEFOCi0JdHJpc3RhdGUgIjZsb3dwYW4gc3VwcG9ydCBvdmVyIElFRUUgODAyLjE1LjQiCi0JZGVwZW5kcyBvbiBJRUVFODAyMTU0ICYmIDZMT1dQQU4KK2lmIElFRUU4MDIxNTQKKworY29uZmlnIElFRUU4MDIxNTRfU09DS0VUCisJdHJpc3RhdGUgIklFRUUgODAyLjE1LjQgc29ja2V0IGludGVyZmFjZSIKKwlkZWZhdWx0IHkKIAktLS1oZWxwLS0tCi0JICBJUHY2IGNvbXByZXNzaW9uIG92ZXIgSUVFRSA4MDIuMTUuNC4KKwkgIFNvY2tldCBpbnRlcmZhY2UgZm9yIElFRUUgODAyLjE1LjQuIENvbnRhaW5zIERHUkFNIHNvY2tldHMgaW50ZXJmYWNlCisJICBmb3IgODAyLjE1LjQgZGF0YWZyYW1lcy4gQWxzbyBSQVcgc29ja2V0IGludGVyZmFjZSB0byBidWlsZCBNQUMKKwkgIGhlYWRlciBmcm9tIHVzZXJzcGFjZS4KKworc291cmNlICJuZXQvaWVlZTgwMjE1NC82bG93cGFuL0tjb25maWciCisKK2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZSBiL25ldC9pZWVlODAyMTU0L01ha2VmaWxlCmluZGV4IDlmNjk3MGYuLjA1ZGFiMjkgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTU0L01ha2VmaWxlCisrKyBiL25ldC9pZWVlODAyMTU0L01ha2VmaWxlCkBAIC0xLDkgKzEsOSBAQAotb2JqLSQoQ09ORklHX0lFRUU4MDIxNTQpICs9IGllZWU4MDIxNTQubyBhZl84MDIxNTQubwotb2JqLSQoQ09ORklHX0lFRUU4MDIxNTRfNkxPV1BBTikgKz0gaWVlZTgwMjE1NF82bG93cGFuLm8KK29iai0kKENPTkZJR19JRUVFODAyMTU0KSArPSBpZWVlODAyMTU0Lm8KK29iai0kKENPTkZJR19JRUVFODAyMTU0X1NPQ0tFVCkgKz0gaWVlZTgwMjE1NF9zb2NrZXQubworb2JqLXkgKz0gNmxvd3Bhbi8KIAotaWVlZTgwMjE1NF82bG93cGFuLXkgOj0gNmxvd3Bhbl9ydG5sLm8gcmVhc3NlbWJseS5vCiBpZWVlODAyMTU0LXkgOj0gbmV0bGluay5vIG5sLW1hYy5vIG5sLXBoeS5vIG5sX3BvbGljeS5vIGNvcmUubyBcCiAgICAgICAgICAgICAgICAgaGVhZGVyX29wcy5vIHN5c2ZzLm8gbmw4MDIxNTQubwotYWZfODAyMTU0LXkgOj0gYWZfaWVlZTgwMjE1NC5vIHJhdy5vIGRncmFtLm8KK2llZWU4MDIxNTRfc29ja2V0LXkgOj0gc29ja2V0Lm8KIAogY2NmbGFncy15ICs9IC1EX19DSEVDS19FTkRJQU5fXwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvYWY4MDIxNTQuaCBiL25ldC9pZWVlODAyMTU0L2FmODAyMTU0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0M2I2M2UuLjAwMDAwMDAKLS0tIGEvbmV0L2llZWU4MDIxNTQvYWY4MDIxNTQuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiBJbnRlcm5hbCBpbnRlcmZhY2VzIGZvciBpZWVlIDgwMi4xNS40IGFkZHJlc3MgZmFtaWx5LgotICoKLSAqIENvcHlyaWdodCAyMDA3LCAyMDA4LCAyMDA5IFNpZW1lbnMgQUcKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogV3JpdHRlbiBieToKLSAqIFNlcmdleSBMYXBpbiA8c2xhcGluQG9zc2ZhbnMub3JnPgotICogRG1pdHJ5IEVyZW1pbi1Tb2xlbmlrb3YgPGRiYXJ5c2hrb3ZAZ21haWwuY29tPgotICovCi0KLSNpZm5kZWYgQUY4MDIxNTRfSAotI2RlZmluZSBBRjgwMjE1NF9ICi0KLXN0cnVjdCBza19idWZmOwotc3RydWN0IG5ldF9kZXZpY2U7Ci1zdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyOwotZXh0ZXJuIHN0cnVjdCBwcm90byBpZWVlODAyMTU0X3Jhd19wcm90OwotZXh0ZXJuIHN0cnVjdCBwcm90byBpZWVlODAyMTU0X2RncmFtX3Byb3Q7Ci12b2lkIGllZWU4MDIxNTRfcmF3X2RlbGl2ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1pbnQgaWVlZTgwMjE1NF9kZ3JhbV9kZWxpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwotc3RydWN0IG5ldF9kZXZpY2UgKmllZWU4MDIxNTRfZ2V0X2RldihzdHJ1Y3QgbmV0ICpuZXQsCi0JCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkcik7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5jIGIvbmV0L2llZWU4MDIxNTQvYWZfaWVlZTgwMjE1NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGExMjgyLi4wMDAwMDAwCi0tLSBhL25ldC9pZWVlODAyMTU0L2FmX2llZWU4MDIxNTQuYworKysgL2Rldi9udWxsCkBAIC0xLDM2OSArMCwwIEBACi0vKgotICogSUVFRTgwMjE1NC40IHNvY2tldCBpbnRlcmZhY2UKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBTaWVtZW5zIEFHCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFdyaXR0ZW4gYnk6Ci0gKiBTZXJnZXkgTGFwaW4gPHNsYXBpbkBvc3NmYW5zLm9yZz4KLSAqIE1heGltIEdvcmJhY2h5b3YgPG1heGltLmdvcmJhY2hldkBzaWVtZW5zLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbmV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L2lmLmg+Ci0jaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgkvKiBGb3IgVElPQ09VVFEvSU5RICovCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxuZXQvZGF0YWxpbmsuaD4KLSNpbmNsdWRlIDxuZXQvcHNuYXAuaD4KLSNpbmNsdWRlIDxuZXQvc29jay5oPgotI2luY2x1ZGUgPG5ldC90Y3Bfc3RhdGVzLmg+Ci0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0KLSNpbmNsdWRlIDxuZXQvYWZfaWVlZTgwMjE1NC5oPgotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0X25ldGRldi5oPgotCi0jaW5jbHVkZSAiYWY4MDIxNTQuaCIKLQotLyogVXRpbGl0eSBmdW5jdGlvbiBmb3IgZmFtaWxpZXMgKi8KLXN0cnVjdCBuZXRfZGV2aWNlKgotaWVlZTgwMjE1NF9nZXRfZGV2KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkcikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqdG1wOwotCV9fbGUxNiBwYW5faWQsIHNob3J0X2FkZHI7Ci0JdTggaHdhZGRyW0lFRUU4MDIxNTRfQUREUl9MRU5dOwotCi0Jc3dpdGNoIChhZGRyLT5tb2RlKSB7Ci0JY2FzZSBJRUVFODAyMTU0X0FERFJfTE9ORzoKLQkJaWVlZTgwMjE1NF9kZXZhZGRyX3RvX3Jhdyhod2FkZHIsIGFkZHItPmV4dGVuZGVkX2FkZHIpOwotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWRldiA9IGRldl9nZXRieWh3YWRkcl9yY3UobmV0LCBBUlBIUkRfSUVFRTgwMjE1NCwgaHdhZGRyKTsKLQkJaWYgKGRldikKLQkJCWRldl9ob2xkKGRldik7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxNTRfQUREUl9TSE9SVDoKLQkJaWYgKGFkZHItPnBhbl9pZCA9PSBjcHVfdG9fbGUxNihJRUVFODAyMTU0X1BBTklEX0JST0FEQ0FTVCkgfHwKLQkJICAgIGFkZHItPnNob3J0X2FkZHIgPT0gY3B1X3RvX2xlMTYoSUVFRTgwMjE1NF9BRERSX1VOREVGKSB8fAotCQkgICAgYWRkci0+c2hvcnRfYWRkciA9PSBjcHVfdG9fbGUxNihJRUVFODAyMTU0X0FERFJfQlJPQURDQVNUKSkKLQkJCWJyZWFrOwotCi0JCXJ0bmxfbG9jaygpOwotCi0JCWZvcl9lYWNoX25ldGRldihuZXQsIHRtcCkgewotCQkJaWYgKHRtcC0+dHlwZSAhPSBBUlBIUkRfSUVFRTgwMjE1NCkKLQkJCQljb250aW51ZTsKLQotCQkJcGFuX2lkID0gaWVlZTgwMjE1NF9tbG1lX29wcyh0bXApLT5nZXRfcGFuX2lkKHRtcCk7Ci0JCQlzaG9ydF9hZGRyID0KLQkJCQlpZWVlODAyMTU0X21sbWVfb3BzKHRtcCktPmdldF9zaG9ydF9hZGRyKHRtcCk7Ci0KLQkJCWlmIChwYW5faWQgPT0gYWRkci0+cGFuX2lkICYmCi0JCQkgICAgc2hvcnRfYWRkciA9PSBhZGRyLT5zaG9ydF9hZGRyKSB7Ci0JCQkJZGV2ID0gdG1wOwotCQkJCWRldl9ob2xkKGRldik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlydG5sX3VubG9jaygpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl93YXJuKCJVbnN1cHBvcnRlZCBpZWVlODAyMTU0IGFkZHJlc3MgdHlwZTogJWRcbiIsCi0JCQlhZGRyLT5tb2RlKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIGRldjsKLX0KLQotc3RhdGljIGludCBpZWVlODAyMTU0X3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQotewotCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCi0JaWYgKHNrKSB7Ci0JCXNvY2stPnNrID0gTlVMTDsKLQkJc2stPnNrX3Byb3QtPmNsb3NlKHNrLCAwKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9zb2NrX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQkJCSAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQotCXJldHVybiBzay0+c2tfcHJvdC0+c2VuZG1zZyhpb2NiLCBzaywgbXNnLCBsZW4pOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxNTRfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsCi0JCQkJaW50IGFkZHJfbGVuKQotewotCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCi0JaWYgKHNrLT5za19wcm90LT5iaW5kKQotCQlyZXR1cm4gc2stPnNrX3Byb3QtPmJpbmQoc2ssIHVhZGRyLCBhZGRyX2xlbik7Ci0KLQlyZXR1cm4gc29ja19ub19iaW5kKHNvY2ssIHVhZGRyLCBhZGRyX2xlbik7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKLQkJCQkgICBpbnQgYWRkcl9sZW4sIGludCBmbGFncykKLXsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKLQotCWlmIChhZGRyX2xlbiA8IHNpemVvZih1YWRkci0+c2FfZmFtaWx5KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAodWFkZHItPnNhX2ZhbWlseSA9PSBBRl9VTlNQRUMpCi0JCXJldHVybiBzay0+c2tfcHJvdC0+ZGlzY29ubmVjdChzaywgZmxhZ3MpOwotCi0JcmV0dXJuIHNrLT5za19wcm90LT5jb25uZWN0KHNrLCB1YWRkciwgYWRkcl9sZW4pOwotfQotCi1zdGF0aWMgaW50IGllZWU4MDIxNTRfZGV2X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlmcmVxIF9fdXNlciAqYXJnLAotCQkJCXVuc2lnbmVkIGludCBjbWQpCi17Ci0Jc3RydWN0IGlmcmVxIGlmcjsKLQlpbnQgcmV0ID0gLUVOT0lPQ1RMQ01EOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmlmciwgYXJnLCBzaXplb2Yoc3RydWN0IGlmcmVxKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWZyLmlmcl9uYW1lW0lGTkFNU0laLTFdID0gMDsKLQotCWRldl9sb2FkKHNvY2tfbmV0KHNrKSwgaWZyLmlmcl9uYW1lKTsKLQlkZXYgPSBkZXZfZ2V0X2J5X25hbWUoc29ja19uZXQoc2spLCBpZnIuaWZyX25hbWUpOwotCi0JaWYgKCFkZXYpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCAmJiBkZXYtPm5ldGRldl9vcHMtPm5kb19kb19pb2N0bCkKLQkJcmV0ID0gZGV2LT5uZXRkZXZfb3BzLT5uZG9fZG9faW9jdGwoZGV2LCAmaWZyLCBjbWQpOwotCi0JaWYgKCFyZXQgJiYgY29weV90b191c2VyKGFyZywgJmlmciwgc2l6ZW9mKHN0cnVjdCBpZnJlcSkpKQotCQlyZXQgPSAtRUZBVUxUOwotCWRldl9wdXQoZGV2KTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9zb2NrX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsCi0JCQkJIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNJT0NHU1RBTVA6Ci0JCXJldHVybiBzb2NrX2dldF90aW1lc3RhbXAoc2ssIChzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKilhcmcpOwotCWNhc2UgU0lPQ0dTVEFNUE5TOgotCQlyZXR1cm4gc29ja19nZXRfdGltZXN0YW1wbnMoc2ssIChzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopYXJnKTsKLQljYXNlIFNJT0NHSUZBRERSOgotCWNhc2UgU0lPQ1NJRkFERFI6Ci0JCXJldHVybiBpZWVlODAyMTU0X2Rldl9pb2N0bChzaywgKHN0cnVjdCBpZnJlcSBfX3VzZXIgKilhcmcsCi0JCQkJY21kKTsKLQlkZWZhdWx0OgotCQlpZiAoIXNrLT5za19wcm90LT5pb2N0bCkKLQkJCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JCXJldHVybiBzay0+c2tfcHJvdC0+aW9jdGwoc2ssIGNtZCwgYXJnKTsKLQl9Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGllZWU4MDIxNTRfcmF3X29wcyA9IHsKLQkuZmFtaWx5CQkgICA9IFBGX0lFRUU4MDIxNTQsCi0JLm93bmVyCQkgICA9IFRISVNfTU9EVUxFLAotCS5yZWxlYXNlCSAgID0gaWVlZTgwMjE1NF9zb2NrX3JlbGVhc2UsCi0JLmJpbmQJCSAgID0gaWVlZTgwMjE1NF9zb2NrX2JpbmQsCi0JLmNvbm5lY3QJICAgPSBpZWVlODAyMTU0X3NvY2tfY29ubmVjdCwKLQkuc29ja2V0cGFpcgkgICA9IHNvY2tfbm9fc29ja2V0cGFpciwKLQkuYWNjZXB0CQkgICA9IHNvY2tfbm9fYWNjZXB0LAotCS5nZXRuYW1lCSAgID0gc29ja19ub19nZXRuYW1lLAotCS5wb2xsCQkgICA9IGRhdGFncmFtX3BvbGwsCi0JLmlvY3RsCQkgICA9IGllZWU4MDIxNTRfc29ja19pb2N0bCwKLQkubGlzdGVuCQkgICA9IHNvY2tfbm9fbGlzdGVuLAotCS5zaHV0ZG93bgkgICA9IHNvY2tfbm9fc2h1dGRvd24sCi0JLnNldHNvY2tvcHQJICAgPSBzb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAotCS5nZXRzb2Nrb3B0CSAgID0gc29ja19jb21tb25fZ2V0c29ja29wdCwKLQkuc2VuZG1zZwkgICA9IGllZWU4MDIxNTRfc29ja19zZW5kbXNnLAotCS5yZWN2bXNnCSAgID0gc29ja19jb21tb25fcmVjdm1zZywKLQkubW1hcAkJICAgPSBzb2NrX25vX21tYXAsCi0JLnNlbmRwYWdlCSAgID0gc29ja19ub19zZW5kcGFnZSwKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0JLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX3NldHNvY2tvcHQsCi0JLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3NvY2tfY29tbW9uX2dldHNvY2tvcHQsCi0jZW5kaWYKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGllZWU4MDIxNTRfZGdyYW1fb3BzID0gewotCS5mYW1pbHkJCSAgID0gUEZfSUVFRTgwMjE1NCwKLQkub3duZXIJCSAgID0gVEhJU19NT0RVTEUsCi0JLnJlbGVhc2UJICAgPSBpZWVlODAyMTU0X3NvY2tfcmVsZWFzZSwKLQkuYmluZAkJICAgPSBpZWVlODAyMTU0X3NvY2tfYmluZCwKLQkuY29ubmVjdAkgICA9IGllZWU4MDIxNTRfc29ja19jb25uZWN0LAotCS5zb2NrZXRwYWlyCSAgID0gc29ja19ub19zb2NrZXRwYWlyLAotCS5hY2NlcHQJCSAgID0gc29ja19ub19hY2NlcHQsCi0JLmdldG5hbWUJICAgPSBzb2NrX25vX2dldG5hbWUsCi0JLnBvbGwJCSAgID0gZGF0YWdyYW1fcG9sbCwKLQkuaW9jdGwJCSAgID0gaWVlZTgwMjE1NF9zb2NrX2lvY3RsLAotCS5saXN0ZW4JCSAgID0gc29ja19ub19saXN0ZW4sCi0JLnNodXRkb3duCSAgID0gc29ja19ub19zaHV0ZG93biwKLQkuc2V0c29ja29wdAkgICA9IHNvY2tfY29tbW9uX3NldHNvY2tvcHQsCi0JLmdldHNvY2tvcHQJICAgPSBzb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAotCS5zZW5kbXNnCSAgID0gaWVlZTgwMjE1NF9zb2NrX3NlbmRtc2csCi0JLnJlY3Ztc2cJICAgPSBzb2NrX2NvbW1vbl9yZWN2bXNnLAotCS5tbWFwCQkgICA9IHNvY2tfbm9fbW1hcCwKLQkuc2VuZHBhZ2UJICAgPSBzb2NrX25vX3NlbmRwYWdlLAotI2lmZGVmIENPTkZJR19DT01QQVQKLQkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fc2V0c29ja29wdCwKLQkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fZ2V0c29ja29wdCwKLSNlbmRpZgotfTsKLQotLyogQ3JlYXRlIGEgc29ja2V0LiBJbml0aWFsaXNlIHRoZSBzb2NrZXQsIGJsYW5rIHRoZSBhZGRyZXNzZXMKLSAqIHNldCB0aGUgc3RhdGUuCi0gKi8KLXN0YXRpYyBpbnQgaWVlZTgwMjE1NF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotCQkJICAgICBpbnQgcHJvdG9jb2wsIGludCBrZXJuKQotewotCXN0cnVjdCBzb2NrICpzazsKLQlpbnQgcmM7Ci0Jc3RydWN0IHByb3RvICpwcm90bzsKLQljb25zdCBzdHJ1Y3QgcHJvdG9fb3BzICpvcHM7Ci0KLQlpZiAoIW5ldF9lcShuZXQsICZpbml0X25ldCkpCi0JCXJldHVybiAtRUFGTk9TVVBQT1JUOwotCi0Jc3dpdGNoIChzb2NrLT50eXBlKSB7Ci0JY2FzZSBTT0NLX1JBVzoKLQkJcHJvdG8gPSAmaWVlZTgwMjE1NF9yYXdfcHJvdDsKLQkJb3BzID0gJmllZWU4MDIxNTRfcmF3X29wczsKLQkJYnJlYWs7Ci0JY2FzZSBTT0NLX0RHUkFNOgotCQlwcm90byA9ICZpZWVlODAyMTU0X2RncmFtX3Byb3Q7Ci0JCW9wcyA9ICZpZWVlODAyMTU0X2RncmFtX29wczsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmMgPSAtRVNPQ0tUTk9TVVBQT1JUOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyYyA9IC1FTk9NRU07Ci0Jc2sgPSBza19hbGxvYyhuZXQsIFBGX0lFRUU4MDIxNTQsIEdGUF9LRVJORUwsIHByb3RvKTsKLQlpZiAoIXNrKQotCQlnb3RvIG91dDsKLQlyYyA9IDA7Ci0KLQlzb2NrLT5vcHMgPSBvcHM7Ci0KLQlzb2NrX2luaXRfZGF0YShzb2NrLCBzayk7Ci0JLyogRklYTUU6IHNrLT5za19kZXN0cnVjdCAqLwotCXNrLT5za19mYW1pbHkgPSBQRl9JRUVFODAyMTU0OwotCi0JLyogQ2hlY2tzdW1zIG9uIGJ5IGRlZmF1bHQgKi8KLQlzb2NrX3NldF9mbGFnKHNrLCBTT0NLX1pBUFBFRCk7Ci0KLQlpZiAoc2stPnNrX3Byb3QtPmhhc2gpCi0JCXNrLT5za19wcm90LT5oYXNoKHNrKTsKLQotCWlmIChzay0+c2tfcHJvdC0+aW5pdCkgewotCQlyYyA9IHNrLT5za19wcm90LT5pbml0KHNrKTsKLQkJaWYgKHJjKQotCQkJc2tfY29tbW9uX3JlbGVhc2Uoc2spOwotCX0KLW91dDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBpZWVlODAyMTU0X2ZhbWlseV9vcHMgPSB7Ci0JLmZhbWlseQkJPSBQRl9JRUVFODAyMTU0LAotCS5jcmVhdGUJCT0gaWVlZTgwMjE1NF9jcmVhdGUsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotfTsKLQotc3RhdGljIGludCBpZWVlODAyMTU0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCi17Ci0JaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCi0JCWdvdG8gZHJvcDsKLQlwcl9kZWJ1ZygiZ290IGZyYW1lLCB0eXBlICVkLCBkZXYgJXBcbiIsIGRldi0+dHlwZSwgZGV2KTsKLSNpZmRlZiBERUJVRwotCXByaW50X2hleF9kdW1wX2J5dGVzKCJpZWVlODAyMTU0X3JjdiAiLAotCQkJICAgICBEVU1QX1BSRUZJWF9OT05FLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLSNlbmRpZgotCi0JaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCAmaW5pdF9uZXQpKQotCQlnb3RvIGRyb3A7Ci0KLQlpZWVlODAyMTU0X3Jhd19kZWxpdmVyKGRldiwgc2tiKTsKLQotCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQpCi0JCWdvdG8gZHJvcDsKLQotCWlmIChza2ItPnBrdF90eXBlICE9IFBBQ0tFVF9PVEhFUkhPU1QpCi0JCXJldHVybiBpZWVlODAyMTU0X2RncmFtX2RlbGl2ZXIoZGV2LCBza2IpOwotCi1kcm9wOgotCWtmcmVlX3NrYihza2IpOwotCXJldHVybiBORVRfUlhfRFJPUDsKLX0KLQotc3RhdGljIHN0cnVjdCBwYWNrZXRfdHlwZSBpZWVlODAyMTU0X3BhY2tldF90eXBlID0gewotCS50eXBlID0gaHRvbnMoRVRIX1BfSUVFRTgwMjE1NCksCi0JLmZ1bmMgPSBpZWVlODAyMTU0X3JjdiwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGFmX2llZWU4MDIxNTRfaW5pdCh2b2lkKQotewotCWludCByYyA9IC1FSU5WQUw7Ci0KLQlyYyA9IHByb3RvX3JlZ2lzdGVyKCZpZWVlODAyMTU0X3Jhd19wcm90LCAxKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0OwotCi0JcmMgPSBwcm90b19yZWdpc3RlcigmaWVlZTgwMjE1NF9kZ3JhbV9wcm90LCAxKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX2RncmFtOwotCi0JLyogVGVsbCBTT0NLRVQgdGhhdCB3ZSBhcmUgYWxpdmUgKi8KLQlyYyA9IHNvY2tfcmVnaXN0ZXIoJmllZWU4MDIxNTRfZmFtaWx5X29wcyk7Ci0JaWYgKHJjKQotCQlnb3RvIGVycl9zb2NrOwotCWRldl9hZGRfcGFjaygmaWVlZTgwMjE1NF9wYWNrZXRfdHlwZSk7Ci0KLQlyYyA9IDA7Ci0JZ290byBvdXQ7Ci0KLWVycl9zb2NrOgotCXByb3RvX3VucmVnaXN0ZXIoJmllZWU4MDIxNTRfZGdyYW1fcHJvdCk7Ci1lcnJfZGdyYW06Ci0JcHJvdG9fdW5yZWdpc3RlcigmaWVlZTgwMjE1NF9yYXdfcHJvdCk7Ci1vdXQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYWZfaWVlZTgwMjE1NF9yZW1vdmUodm9pZCkKLXsKLQlkZXZfcmVtb3ZlX3BhY2soJmllZWU4MDIxNTRfcGFja2V0X3R5cGUpOwotCXNvY2tfdW5yZWdpc3RlcihQRl9JRUVFODAyMTU0KTsKLQlwcm90b191bnJlZ2lzdGVyKCZpZWVlODAyMTU0X2RncmFtX3Byb3QpOwotCXByb3RvX3VucmVnaXN0ZXIoJmllZWU4MDIxNTRfcmF3X3Byb3QpOwotfQotCi1tb2R1bGVfaW5pdChhZl9pZWVlODAyMTU0X2luaXQpOwotbW9kdWxlX2V4aXQoYWZfaWVlZTgwMjE1NF9yZW1vdmUpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQUxJQVNfTkVUUFJPVE8oUEZfSUVFRTgwMjE1NCk7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9kZ3JhbS5jIGIvbmV0L2llZWU4MDIxNTQvZGdyYW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE5MzBiNy4uMDAwMDAwMAotLS0gYS9uZXQvaWVlZTgwMjE1NC9kZ3JhbS5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQ5ICswLDAgQEAKLS8qCi0gKiBJRUVFIDgwMi4xNS40IGRncmFtIHNvY2tldCBpbnRlcmZhY2UKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBTaWVtZW5zIEFHCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFdyaXR0ZW4gYnk6Ci0gKiBTZXJnZXkgTGFwaW4gPHNsYXBpbkBvc3NmYW5zLm9yZz4KLSAqIERtaXRyeSBFcmVtaW4tU29sZW5pa292IDxkYmFyeXNoa292QGdtYWlsLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaWVlZTgwMjE1NC5oPgotI2luY2x1ZGUgPG5ldC9zb2NrLmg+Ci0jaW5jbHVkZSA8bmV0L2FmX2llZWU4MDIxNTQuaD4KLSNpbmNsdWRlIDxuZXQvaWVlZTgwMjE1NF9uZXRkZXYuaD4KLQotI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KLQotI2luY2x1ZGUgImFmODAyMTU0LmgiCi0KLXN0YXRpYyBITElTVF9IRUFEKGRncmFtX2hlYWQpOwotc3RhdGljIERFRklORV9SV0xPQ0soZGdyYW1fbG9jayk7Ci0KLXN0cnVjdCBkZ3JhbV9zb2NrIHsKLQlzdHJ1Y3Qgc29jayBzazsKLQotCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgc3JjX2FkZHI7Ci0Jc3RydWN0IGllZWU4MDIxNTRfYWRkciBkc3RfYWRkcjsKLQotCXVuc2lnbmVkIGludCBib3VuZDoxOwotCXVuc2lnbmVkIGludCBjb25uZWN0ZWQ6MTsKLQl1bnNpZ25lZCBpbnQgd2FudF9hY2s6MTsKLQl1bnNpZ25lZCBpbnQgc2VjZW46MTsKLQl1bnNpZ25lZCBpbnQgc2VjZW5fb3ZlcnJpZGU6MTsKLQl1bnNpZ25lZCBpbnQgc2VjbGV2ZWw6MzsKLQl1bnNpZ25lZCBpbnQgc2VjbGV2ZWxfb3ZlcnJpZGU6MTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRncmFtX3NvY2sgKmRncmFtX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKHNrLCBzdHJ1Y3QgZGdyYW1fc29jaywgc2spOwotfQotCi1zdGF0aWMgdm9pZCBkZ3JhbV9oYXNoKHN0cnVjdCBzb2NrICpzaykKLXsKLQl3cml0ZV9sb2NrX2JoKCZkZ3JhbV9sb2NrKTsKLQlza19hZGRfbm9kZShzaywgJmRncmFtX2hlYWQpOwotCXNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay0+c2tfcHJvdCwgMSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZkZ3JhbV9sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgZGdyYW1fdW5oYXNoKHN0cnVjdCBzb2NrICpzaykKLXsKLQl3cml0ZV9sb2NrX2JoKCZkZ3JhbV9sb2NrKTsKLQlpZiAoc2tfZGVsX25vZGVfaW5pdChzaykpCi0JCXNvY2tfcHJvdF9pbnVzZV9hZGQoc29ja19uZXQoc2spLCBzay0+c2tfcHJvdCwgLTEpOwotCXdyaXRlX3VubG9ja19iaCgmZGdyYW1fbG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQgZGdyYW1faW5pdChzdHJ1Y3Qgc29jayAqc2spCi17Ci0Jc3RydWN0IGRncmFtX3NvY2sgKnJvID0gZGdyYW1fc2soc2spOwotCi0Jcm8tPndhbnRfYWNrID0gMTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZGdyYW1fY2xvc2Uoc3RydWN0IHNvY2sgKnNrLCBsb25nIHRpbWVvdXQpCi17Ci0Jc2tfY29tbW9uX3JlbGVhc2Uoc2spOwotfQotCi1zdGF0aWMgaW50IGRncmFtX2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLCBpbnQgbGVuKQotewotCXN0cnVjdCBzb2NrYWRkcl9pZWVlODAyMTU0ICphZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pZWVlODAyMTU0ICopdWFkZHI7Ci0Jc3RydWN0IGllZWU4MDIxNTRfYWRkciBoYWRkcjsKLQlzdHJ1Y3QgZGdyYW1fc29jayAqcm8gPSBkZ3JhbV9zayhzayk7Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQotCWxvY2tfc29jayhzayk7Ci0KLQlyby0+Ym91bmQgPSAwOwotCi0JaWYgKGxlbiA8IHNpemVvZigqYWRkcikpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGFkZHItPmZhbWlseSAhPSBBRl9JRUVFODAyMTU0KQotCQlnb3RvIG91dDsKLQotCWllZWU4MDIxNTRfYWRkcl9mcm9tX3NhKCZoYWRkciwgJmFkZHItPmFkZHIpOwotCWRldiA9IGllZWU4MDIxNTRfZ2V0X2Rldihzb2NrX25ldChzayksICZoYWRkcik7Ci0JaWYgKCFkZXYpIHsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfSUVFRTgwMjE1NCkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIG91dF9wdXQ7Ci0JfQotCi0Jcm8tPnNyY19hZGRyID0gaGFkZHI7Ci0KLQlyby0+Ym91bmQgPSAxOwotCWVyciA9IDA7Ci1vdXRfcHV0OgotCWRldl9wdXQoZGV2KTsKLW91dDoKLQlyZWxlYXNlX3NvY2soc2spOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBkZ3JhbV9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTSU9DT1VUUToKLQl7Ci0JCWludCBhbW91bnQgPSBza193bWVtX2FsbG9jX2dldChzayk7Ci0KLQkJcmV0dXJuIHB1dF91c2VyKGFtb3VudCwgKGludCBfX3VzZXIgKilhcmcpOwotCX0KLQotCWNhc2UgU0lPQ0lOUToKLQl7Ci0JCXN0cnVjdCBza19idWZmICpza2I7Ci0JCXVuc2lnbmVkIGxvbmcgYW1vdW50OwotCi0JCWFtb3VudCA9IDA7Ci0JCXNwaW5fbG9ja19iaCgmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7Ci0JCXNrYiA9IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7Ci0JCWlmIChza2IgIT0gTlVMTCkgewotCQkJLyogV2Ugd2lsbCBvbmx5IHJldHVybiB0aGUgYW1vdW50Ci0JCQkgKiBvZiB0aGlzIHBhY2tldCBzaW5jZSB0aGF0IGlzIGFsbAotCQkJICogdGhhdCB3aWxsIGJlIHJlYWQuCi0JCQkgKi8KLQkJCWFtb3VudCA9IHNrYi0+bGVuIC0gaWVlZTgwMjE1NF9oZHJfbGVuZ3RoKHNrYik7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfYmgoJnNrLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOwotCQlyZXR1cm4gcHV0X3VzZXIoYW1vdW50LCAoaW50IF9fdXNlciAqKWFyZyk7Ci0JfQotCX0KLQotCXJldHVybiAtRU5PSU9DVExDTUQ7Ci19Ci0KLS8qIEZJWE1FOiBhdXRvYmluZCAqLwotc3RhdGljIGludCBkZ3JhbV9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKLQkJCSBpbnQgbGVuKQotewotCXN0cnVjdCBzb2NrYWRkcl9pZWVlODAyMTU0ICphZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pZWVlODAyMTU0ICopdWFkZHI7Ci0Jc3RydWN0IGRncmFtX3NvY2sgKnJvID0gZGdyYW1fc2soc2spOwotCWludCBlcnIgPSAwOwotCi0JaWYgKGxlbiA8IHNpemVvZigqYWRkcikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGFkZHItPmZhbWlseSAhPSBBRl9JRUVFODAyMTU0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWxvY2tfc29jayhzayk7Ci0KLQlpZiAoIXJvLT5ib3VuZCkgewotCQllcnIgPSAtRU5FVFVOUkVBQ0g7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWllZWU4MDIxNTRfYWRkcl9mcm9tX3NhKCZyby0+ZHN0X2FkZHIsICZhZGRyLT5hZGRyKTsKLQlyby0+Y29ubmVjdGVkID0gMTsKLQotb3V0OgotCXJlbGVhc2Vfc29jayhzayk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBkZ3JhbV9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKQotewotCXN0cnVjdCBkZ3JhbV9zb2NrICpybyA9IGRncmFtX3NrKHNrKTsKLQotCWxvY2tfc29jayhzayk7Ci0Jcm8tPmNvbm5lY3RlZCA9IDA7Ci0JcmVsZWFzZV9zb2NrKHNrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRncmFtX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXVuc2lnbmVkIGludCBtdHU7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjE1NF9tYWNfY2IgKmNiOwotCXN0cnVjdCBkZ3JhbV9zb2NrICpybyA9IGRncmFtX3NrKHNrKTsKLQlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyIGRzdF9hZGRyOwotCWludCBobGVuLCB0bGVuOwotCWludCBlcnI7Ci0KLQlpZiAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfT09CKSB7Ci0JCXByX2RlYnVnKCJtc2ctPm1zZ19mbGFncyA9IDB4JXhcbiIsIG1zZy0+bXNnX2ZsYWdzKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCWlmICghcm8tPmNvbm5lY3RlZCAmJiAhbXNnLT5tc2dfbmFtZSkKLQkJcmV0dXJuIC1FREVTVEFERFJSRVE7Ci0JZWxzZSBpZiAocm8tPmNvbm5lY3RlZCAmJiBtc2ctPm1zZ19uYW1lKQotCQlyZXR1cm4gLUVJU0NPTk47Ci0KLQlpZiAoIXJvLT5ib3VuZCkKLQkJZGV2ID0gZGV2X2dldGZpcnN0Ynlod3R5cGUoc29ja19uZXQoc2spLCBBUlBIUkRfSUVFRTgwMjE1NCk7Ci0JZWxzZQotCQlkZXYgPSBpZWVlODAyMTU0X2dldF9kZXYoc29ja19uZXQoc2spLCAmcm8tPnNyY19hZGRyKTsKLQotCWlmICghZGV2KSB7Ci0JCXByX2RlYnVnKCJubyBkZXZcbiIpOwotCQllcnIgPSAtRU5YSU87Ci0JCWdvdG8gb3V0OwotCX0KLQltdHUgPSBkZXYtPm10dTsKLQlwcl9kZWJ1ZygibmFtZSA9ICVzLCBtdHUgPSAldVxuIiwgZGV2LT5uYW1lLCBtdHUpOwotCi0JaWYgKHNpemUgPiBtdHUpIHsKLQkJcHJfZGVidWcoInNpemUgPSAlWnUsIG10dSA9ICV1XG4iLCBzaXplLCBtdHUpOwotCQllcnIgPSAtRU1TR1NJWkU7Ci0JCWdvdG8gb3V0X2RldjsKLQl9Ci0KLQlobGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTsKLQl0bGVuID0gZGV2LT5uZWVkZWRfdGFpbHJvb207Ci0Jc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgaGxlbiArIHRsZW4gKyBzaXplLAotCQkJCSAgbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsCi0JCQkJICAmZXJyKTsKLQlpZiAoIXNrYikKLQkJZ290byBvdXRfZGV2OwotCi0Jc2tiX3Jlc2VydmUoc2tiLCBobGVuKTsKLQotCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwotCi0JY2IgPSBtYWNfY2JfaW5pdChza2IpOwotCWNiLT50eXBlID0gSUVFRTgwMjE1NF9GQ19UWVBFX0RBVEE7Ci0JY2ItPmFja3JlcSA9IHJvLT53YW50X2FjazsKLQotCWlmIChtc2ctPm1zZ19uYW1lKSB7Ci0JCURFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX2llZWU4MDIxNTQqLAotCQkJCSBkYWRkciwgbXNnLT5tc2dfbmFtZSk7Ci0KLQkJaWVlZTgwMjE1NF9hZGRyX2Zyb21fc2EoJmRzdF9hZGRyLCAmZGFkZHItPmFkZHIpOwotCX0gZWxzZSB7Ci0JCWRzdF9hZGRyID0gcm8tPmRzdF9hZGRyOwotCX0KLQotCWNiLT5zZWNlbiA9IHJvLT5zZWNlbjsKLQljYi0+c2VjZW5fb3ZlcnJpZGUgPSByby0+c2VjZW5fb3ZlcnJpZGU7Ci0JY2ItPnNlY2xldmVsID0gcm8tPnNlY2xldmVsOwotCWNiLT5zZWNsZXZlbF9vdmVycmlkZSA9IHJvLT5zZWNsZXZlbF9vdmVycmlkZTsKLQotCWVyciA9IGRldl9oYXJkX2hlYWRlcihza2IsIGRldiwgRVRIX1BfSUVFRTgwMjE1NCwgJmRzdF9hZGRyLAotCQkJICAgICAgcm8tPmJvdW5kID8gJnJvLT5zcmNfYWRkciA6IE5VTEwsIHNpemUpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dF9za2I7Ci0KLQllcnIgPSBtZW1jcHlfZnJvbV9tc2coc2tiX3B1dChza2IsIHNpemUpLCBtc2csIHNpemUpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dF9za2I7Ci0KLQlza2ItPmRldiA9IGRldjsKLQlza2ItPnNrICA9IHNrOwotCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JRUVFODAyMTU0KTsKLQotCWRldl9wdXQoZGV2KTsKLQotCWVyciA9IGRldl9xdWV1ZV94bWl0KHNrYik7Ci0JaWYgKGVyciA+IDApCi0JCWVyciA9IG5ldF94bWl0X2Vycm5vKGVycik7Ci0KLQlyZXR1cm4gZXJyID86IHNpemU7Ci0KLW91dF9za2I6Ci0Ja2ZyZWVfc2tiKHNrYik7Ci1vdXRfZGV2OgotCWRldl9wdXQoZGV2KTsKLW91dDoKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGRncmFtX3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgbm9ibG9jaywKLQkJCSBpbnQgZmxhZ3MsIGludCAqYWRkcl9sZW4pCi17Ci0Jc2l6ZV90IGNvcGllZCA9IDA7Ci0JaW50IGVyciA9IC1FT1BOT1RTVVBQOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0JREVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfaWVlZTgwMjE1NCAqLCBzYWRkciwgbXNnLT5tc2dfbmFtZSk7Ci0KLQlza2IgPSBza2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MsIG5vYmxvY2ssICZlcnIpOwotCWlmICghc2tiKQotCQlnb3RvIG91dDsKLQotCWNvcGllZCA9IHNrYi0+bGVuOwotCWlmIChsZW4gPCBjb3BpZWQpIHsKLQkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOwotCQljb3BpZWQgPSBsZW47Ci0JfQotCi0JLyogRklYTUU6IHNraXAgaGVhZGVycyBpZiBuZWNlc3NhcnkgPyEgKi8KLQllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9tc2coc2tiLCAwLCBtc2csIGNvcGllZCk7Ci0JaWYgKGVycikKLQkJZ290byBkb25lOwotCi0Jc29ja19yZWN2X3RzX2FuZF9kcm9wcyhtc2csIHNrLCBza2IpOwotCi0JaWYgKHNhZGRyKSB7Ci0JCXNhZGRyLT5mYW1pbHkgPSBBRl9JRUVFODAyMTU0OwotCQlpZWVlODAyMTU0X2FkZHJfdG9fc2EoJnNhZGRyLT5hZGRyLCAmbWFjX2NiKHNrYiktPnNvdXJjZSk7Ci0JCSphZGRyX2xlbiA9IHNpemVvZigqc2FkZHIpOwotCX0KLQotCWlmIChmbGFncyAmIE1TR19UUlVOQykKLQkJY29waWVkID0gc2tiLT5sZW47Ci1kb25lOgotCXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOwotb3V0OgotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIGNvcGllZDsKLX0KLQotc3RhdGljIGludCBkZ3JhbV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXNrYikKLQkJcmV0dXJuIE5FVF9SWF9EUk9QOwotCi0JaWYgKHNvY2tfcXVldWVfcmN2X3NrYihzaywgc2tiKSA8IDApIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXJldHVybiBORVRfUlhfRFJPUDsKLQl9Ci0KLQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbAotaWVlZTgwMjE1NF9tYXRjaF9zb2NrKF9fbGU2NCBod19hZGRyLCBfX2xlMTYgcGFuX2lkLCBfX2xlMTYgc2hvcnRfYWRkciwKLQkJICAgICAgc3RydWN0IGRncmFtX3NvY2sgKnJvKQotewotCWlmICghcm8tPmJvdW5kKQotCQlyZXR1cm4gdHJ1ZTsKLQotCWlmIChyby0+c3JjX2FkZHIubW9kZSA9PSBJRUVFODAyMTU0X0FERFJfTE9ORyAmJgotCSAgICBod19hZGRyID09IHJvLT5zcmNfYWRkci5leHRlbmRlZF9hZGRyKQotCQlyZXR1cm4gdHJ1ZTsKLQotCWlmIChyby0+c3JjX2FkZHIubW9kZSA9PSBJRUVFODAyMTU0X0FERFJfU0hPUlQgJiYKLQkgICAgcGFuX2lkID09IHJvLT5zcmNfYWRkci5wYW5faWQgJiYKLQkgICAgc2hvcnRfYWRkciA9PSByby0+c3JjX2FkZHIuc2hvcnRfYWRkcikKLQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLWludCBpZWVlODAyMTU0X2RncmFtX2RlbGl2ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgc29jayAqc2ssICpwcmV2ID0gTlVMTDsKLQlpbnQgcmV0ID0gTkVUX1JYX1NVQ0NFU1M7Ci0JX19sZTE2IHBhbl9pZCwgc2hvcnRfYWRkcjsKLQlfX2xlNjQgaHdfYWRkcjsKLQotCS8qIERhdGEgZnJhbWUgcHJvY2Vzc2luZyAqLwotCUJVR19PTihkZXYtPnR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQpOwotCi0JcGFuX2lkID0gaWVlZTgwMjE1NF9tbG1lX29wcyhkZXYpLT5nZXRfcGFuX2lkKGRldik7Ci0Jc2hvcnRfYWRkciA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS0+Z2V0X3Nob3J0X2FkZHIoZGV2KTsKLQlod19hZGRyID0gaWVlZTgwMjE1NF9kZXZhZGRyX2Zyb21fcmF3KGRldi0+ZGV2X2FkZHIpOwotCi0JcmVhZF9sb2NrKCZkZ3JhbV9sb2NrKTsKLQlza19mb3JfZWFjaChzaywgJmRncmFtX2hlYWQpIHsKLQkJaWYgKGllZWU4MDIxNTRfbWF0Y2hfc29jayhod19hZGRyLCBwYW5faWQsIHNob3J0X2FkZHIsCi0JCQkJCSAgZGdyYW1fc2soc2spKSkgewotCQkJaWYgKHByZXYpIHsKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqY2xvbmU7Ci0KLQkJCQljbG9uZSA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwotCQkJCWlmIChjbG9uZSkKLQkJCQkJZGdyYW1fcmN2X3NrYihwcmV2LCBjbG9uZSk7Ci0JCQl9Ci0KLQkJCXByZXYgPSBzazsKLQkJfQotCX0KLQotCWlmIChwcmV2KSB7Ci0JCWRncmFtX3Jjdl9za2IocHJldiwgc2tiKTsKLQl9IGVsc2UgewotCQlrZnJlZV9za2Ioc2tiKTsKLQkJcmV0ID0gTkVUX1JYX0RST1A7Ci0JfQotCXJlYWRfdW5sb2NrKCZkZ3JhbV9sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZGdyYW1fZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCi0JCQkgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQotewotCXN0cnVjdCBkZ3JhbV9zb2NrICpybyA9IGRncmFtX3NrKHNrKTsKLQotCWludCB2YWwsIGxlbjsKLQotCWlmIChsZXZlbCAhPSBTT0xfSUVFRTgwMjE1NCkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlsZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGxlbiwgc2l6ZW9mKGludCkpOwotCi0Jc3dpdGNoIChvcHRuYW1lKSB7Ci0JY2FzZSBXUEFOX1dBTlRBQ0s6Ci0JCXZhbCA9IHJvLT53YW50X2FjazsKLQkJYnJlYWs7Ci0JY2FzZSBXUEFOX1NFQ1VSSVRZOgotCQlpZiAoIXJvLT5zZWNlbl9vdmVycmlkZSkKLQkJCXZhbCA9IFdQQU5fU0VDVVJJVFlfREVGQVVMVDsKLQkJZWxzZSBpZiAocm8tPnNlY2VuKQotCQkJdmFsID0gV1BBTl9TRUNVUklUWV9PTjsKLQkJZWxzZQotCQkJdmFsID0gV1BBTl9TRUNVUklUWV9PRkY7Ci0JCWJyZWFrOwotCWNhc2UgV1BBTl9TRUNVUklUWV9MRVZFTDoKLQkJaWYgKCFyby0+c2VjbGV2ZWxfb3ZlcnJpZGUpCi0JCQl2YWwgPSBXUEFOX1NFQ1VSSVRZX0xFVkVMX0RFRkFVTFQ7Ci0JCWVsc2UKLQkJCXZhbCA9IHJvLT5zZWNsZXZlbDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9QUk9UT09QVDsKLQl9Ci0KLQlpZiAocHV0X3VzZXIobGVuLCBvcHRsZW4pKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoY29weV90b191c2VyKG9wdHZhbCwgJnZhbCwgbGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGdyYW1fc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCi0JCQkgICAgY2hhciBfX3VzZXIgKm9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbikKLXsKLQlzdHJ1Y3QgZGdyYW1fc29jayAqcm8gPSBkZ3JhbV9zayhzayk7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwotCWludCB2YWw7Ci0JaW50IGVyciA9IDA7Ci0KLQlpZiAob3B0bGVuIDwgc2l6ZW9mKGludCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGdldF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilvcHR2YWwpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWxvY2tfc29jayhzayk7Ci0KLQlzd2l0Y2ggKG9wdG5hbWUpIHsKLQljYXNlIFdQQU5fV0FOVEFDSzoKLQkJcm8tPndhbnRfYWNrID0gISF2YWw7Ci0JCWJyZWFrOwotCWNhc2UgV1BBTl9TRUNVUklUWToKLQkJaWYgKCFuc19jYXBhYmxlKG5ldC0+dXNlcl9ucywgQ0FQX05FVF9BRE1JTikgJiYKLQkJICAgICFuc19jYXBhYmxlKG5ldC0+dXNlcl9ucywgQ0FQX05FVF9SQVcpKSB7Ci0JCQllcnIgPSAtRVBFUk07Ci0JCQlicmVhazsKLQkJfQotCi0JCXN3aXRjaCAodmFsKSB7Ci0JCWNhc2UgV1BBTl9TRUNVUklUWV9ERUZBVUxUOgotCQkJcm8tPnNlY2VuX292ZXJyaWRlID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIFdQQU5fU0VDVVJJVFlfT046Ci0JCQlyby0+c2VjZW5fb3ZlcnJpZGUgPSAxOwotCQkJcm8tPnNlY2VuID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIFdQQU5fU0VDVVJJVFlfT0ZGOgotCQkJcm8tPnNlY2VuX292ZXJyaWRlID0gMTsKLQkJCXJvLT5zZWNlbiA9IDA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIFdQQU5fU0VDVVJJVFlfTEVWRUw6Ci0JCWlmICghbnNfY2FwYWJsZShuZXQtPnVzZXJfbnMsIENBUF9ORVRfQURNSU4pICYmCi0JCSAgICAhbnNfY2FwYWJsZShuZXQtPnVzZXJfbnMsIENBUF9ORVRfUkFXKSkgewotCQkJZXJyID0gLUVQRVJNOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAodmFsIDwgV1BBTl9TRUNVUklUWV9MRVZFTF9ERUZBVUxUIHx8Ci0JCSAgICB2YWwgPiBJRUVFODAyMTU0X1NDRl9TRUNMRVZFTF9FTkNfTUlDMTI4KSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQl9IGVsc2UgaWYgKHZhbCA9PSBXUEFOX1NFQ1VSSVRZX0xFVkVMX0RFRkFVTFQpIHsKLQkJCXJvLT5zZWNsZXZlbF9vdmVycmlkZSA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlyby0+c2VjbGV2ZWxfb3ZlcnJpZGUgPSAxOwotCQkJcm8tPnNlY2xldmVsID0gdmFsOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVyciA9IC1FTk9QUk9UT09QVDsKLQkJYnJlYWs7Ci0JfQotCi0JcmVsZWFzZV9zb2NrKHNrKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdHJ1Y3QgcHJvdG8gaWVlZTgwMjE1NF9kZ3JhbV9wcm90ID0gewotCS5uYW1lCQk9ICJJRUVFLTgwMi4xNS40LU1BQyIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vYmpfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgZGdyYW1fc29jayksCi0JLmluaXQJCT0gZGdyYW1faW5pdCwKLQkuY2xvc2UJCT0gZGdyYW1fY2xvc2UsCi0JLmJpbmQJCT0gZGdyYW1fYmluZCwKLQkuc2VuZG1zZwk9IGRncmFtX3NlbmRtc2csCi0JLnJlY3Ztc2cJPSBkZ3JhbV9yZWN2bXNnLAotCS5oYXNoCQk9IGRncmFtX2hhc2gsCi0JLnVuaGFzaAkJPSBkZ3JhbV91bmhhc2gsCi0JLmNvbm5lY3QJPSBkZ3JhbV9jb25uZWN0LAotCS5kaXNjb25uZWN0CT0gZGdyYW1fZGlzY29ubmVjdCwKLQkuaW9jdGwJCT0gZGdyYW1faW9jdGwsCi0JLmdldHNvY2tvcHQJPSBkZ3JhbV9nZXRzb2Nrb3B0LAotCS5zZXRzb2Nrb3B0CT0gZGdyYW1fc2V0c29ja29wdCwKLX07Ci0KZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0L25ldGxpbmsuYyBiL25ldC9pZWVlODAyMTU0L25ldGxpbmsuYwppbmRleCBmYTE0NjQ3Li5jODEzM2MwIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9uZXRsaW5rLmMKKysrIGIvbmV0L2llZWU4MDIxNTQvbmV0bGluay5jCkBAIC02MywxMyArNjMsOSBAQAogCXN0cnVjdCBubG1zZ2hkciAqbmxoID0gbmxtc2dfaGRyKG1zZyk7CiAJdm9pZCAqaGRyID0gZ2VubG1zZ19kYXRhKG5sbXNnX2RhdGEobmxoKSk7CiAKLQlpZiAoZ2VubG1zZ19lbmQobXNnLCBoZHIpIDwgMCkKLQkJZ290byBvdXQ7CisJZ2VubG1zZ19lbmQobXNnLCBoZHIpOwogCiAJcmV0dXJuIGdlbmxtc2dfbXVsdGljYXN0KCZubDgwMjE1NF9mYW1pbHksIG1zZywgMCwgZ3JvdXAsIEdGUF9BVE9NSUMpOwotb3V0OgotCW5sbXNnX2ZyZWUobXNnKTsKLQlyZXR1cm4gLUVOT0JVRlM7CiB9CiAKIHN0cnVjdCBza19idWZmICppZWVlODAyMTU0X25sX25ld19yZXBseShzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLApAQCAtOTYsMTMgKzkyLDkgQEAKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9IG5sbXNnX2hkcihtc2cpOwogCXZvaWQgKmhkciA9IGdlbmxtc2dfZGF0YShubG1zZ19kYXRhKG5saCkpOwogCi0JaWYgKGdlbmxtc2dfZW5kKG1zZywgaGRyKSA8IDApCi0JCWdvdG8gb3V0OworCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKIAogCXJldHVybiBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7Ci1vdXQ6Ci0Jbmxtc2dfZnJlZShtc2cpOwotCXJldHVybiAtRU5PQlVGUzsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBpZWVlODAyMTE1NF9vcHNbXSA9IHsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0L25sLW1hYy5jIGIvbmV0L2llZWU4MDIxNTQvbmwtbWFjLmMKaW5kZXggY2Q5MTk0OS4uOTEwNTI2NSAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxNTQvbmwtbWFjLmMKKysrIGIvbmV0L2llZWU4MDIxNTQvbmwtbWFjLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCQkJICAgICAgIHBhcmFtcy50cmFuc21pdF9wb3dlcikgfHwKIAkJICAgIG5sYV9wdXRfdTgobXNnLCBJRUVFODAyMTU0X0FUVFJfTEJUX0VOQUJMRUQsIHBhcmFtcy5sYnQpIHx8CiAJCSAgICBubGFfcHV0X3U4KG1zZywgSUVFRTgwMjE1NF9BVFRSX0NDQV9NT0RFLAotCQkJICAgICAgIHBhcmFtcy5jY2FfbW9kZSkgfHwKKwkJCSAgICAgICBwYXJhbXMuY2NhLm1vZGUpIHx8CiAJCSAgICBubGFfcHV0X3MzMihtc2csIElFRUU4MDIxNTRfQVRUUl9DQ0FfRURfTEVWRUwsCiAJCQkJcGFyYW1zLmNjYV9lZF9sZXZlbCkgfHwKIAkJICAgIG5sYV9wdXRfdTgobXNnLCBJRUVFODAyMTU0X0FUVFJfQ1NNQV9SRVRSSUVTLApAQCAtMTM2LDcgKzEzNiw4IEBACiAJfQogCiAJd3Bhbl9waHlfcHV0KHBoeSk7Ci0JcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwlnZW5sbXNnX2VuZChtc2csIGhkcik7CisJcmV0dXJuIDA7CiAKIG5sYV9wdXRfZmFpbHVyZToKIAl3cGFuX3BoeV9wdXQocGh5KTsKQEAgLTUxNiw3ICs1MTcsNyBAQAogCQlwYXJhbXMubGJ0ID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfTEJUX0VOQUJMRURdKTsKIAogCWlmIChpbmZvLT5hdHRyc1tJRUVFODAyMTU0X0FUVFJfQ0NBX01PREVdKQotCQlwYXJhbXMuY2NhX21vZGUgPSBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DQ0FfTU9ERV0pOworCQlwYXJhbXMuY2NhLm1vZGUgPSBubGFfZ2V0X3U4KGluZm8tPmF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DQ0FfTU9ERV0pOwogCiAJaWYgKGluZm8tPmF0dHJzW0lFRUU4MDIxNTRfQVRUUl9DQ0FfRURfTEVWRUxdKQogCQlwYXJhbXMuY2NhX2VkX2xldmVsID0gbmxhX2dldF9zMzIoaW5mby0+YXR0cnNbSUVFRTgwMjE1NF9BVFRSX0NDQV9FRF9MRVZFTF0pOwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvbmwtcGh5LmMgYi9uZXQvaWVlZTgwMjE1NC9ubC1waHkuYwppbmRleCA3YmFmOThiLi4xYjlkMjVmNiAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxNTQvbmwtcGh5LmMKKysrIGIvbmV0L2llZWU4MDIxNTQvbmwtcGh5LmMKQEAgLTY1LDcgKzY1LDggQEAKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAJbXV0ZXhfdW5sb2NrKCZwaHktPnBpYl9sb2NrKTsKIAlrZnJlZShidWYpOwotCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CisJZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJbXV0ZXhfdW5sb2NrKCZwaHktPnBpYl9sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0L25sODAyMTU0LmMgYi9uZXQvaWVlZTgwMjE1NC9ubDgwMjE1NC5jCmluZGV4IDg4OTY0NzcuLmE0ZGFmOTEgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTU0L25sODAyMTU0LmMKKysrIGIvbmV0L2llZWU4MDIxNTQvbmw4MDIxNTQuYwpAQCAtMjA5LDcgKzIwOSw4IEBACiAKIAlbTkw4MDIxNTRfQVRUUl9UWF9QT1dFUl0gPSB7IC50eXBlID0gTkxBX1M4LCB9LAogCi0JW05MODAyMTU0X0FUVFJfQ0NBX01PREVdID0geyAudHlwZSA9IE5MQV9VOCwgfSwKKwlbTkw4MDIxNTRfQVRUUl9DQ0FfTU9ERV0gPSB7IC50eXBlID0gTkxBX1UzMiwgfSwKKwlbTkw4MDIxNTRfQVRUUl9DQ0FfT1BUXSA9IHsgLnR5cGUgPSBOTEFfVTMyLCB9LAogCiAJW05MODAyMTU0X0FUVFJfU1VQUE9SVEVEX0NIQU5ORUxdID0geyAudHlwZSA9IE5MQV9VMzIsIH0sCiAKQEAgLTI5MCwxNiArMjkxLDIzIEBACiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiAJLyogY2NhIG1vZGUgKi8KLQlpZiAobmxhX3B1dF91OChtc2csIE5MODAyMTU0X0FUVFJfQ0NBX01PREUsCi0JCSAgICAgICByZGV2LT53cGFuX3BoeS5jY2FfbW9kZSkpCisJaWYgKG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxNTRfQVRUUl9DQ0FfTU9ERSwKKwkJCXJkZXYtPndwYW5fcGh5LmNjYS5tb2RlKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKKwlpZiAocmRldi0+d3Bhbl9waHkuY2NhLm1vZGUgPT0gTkw4MDIxNTRfQ0NBX0VORVJHWV9DQVJSSUVSKSB7CisJCWlmIChubGFfcHV0X3UzMihtc2csIE5MODAyMTU0X0FUVFJfQ0NBX09QVCwKKwkJCQlyZGV2LT53cGFuX3BoeS5jY2Eub3B0KSkKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCX0KKwogCWlmIChubGFfcHV0X3M4KG1zZywgTkw4MDIxNTRfQVRUUl9UWF9QT1dFUiwKIAkJICAgICAgIHJkZXYtPndwYW5fcGh5LnRyYW5zbWl0X3Bvd2VyKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIGZpbmlzaDoKLQlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwlyZXR1cm4gMDsKIAogbmxhX3B1dF9mYWlsdXJlOgogCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKQEAgLTQ4Miw3ICs0OTAsOCBAQAogCWlmIChubGFfcHV0X3U4KG1zZywgTkw4MDIxNTRfQVRUUl9MQlRfTU9ERSwgd3Bhbl9kZXYtPmxidCkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwlnZW5sbXNnX2VuZChtc2csIGhkcik7CisJcmV0dXJuIDA7CiAKIG5sYV9wdXRfZmFpbHVyZToKIAlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CkBAIC02MjIsNiArNjMxLDMxIEBACiAJcmV0dXJuIHJkZXZfc2V0X2NoYW5uZWwocmRldiwgcGFnZSwgY2hhbm5lbCk7CiB9CiAKK3N0YXRpYyBpbnQgbmw4MDIxNTRfc2V0X2NjYV9tb2RlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tPnVzZXJfcHRyWzBdOworCXN0cnVjdCB3cGFuX3BoeV9jY2EgY2NhOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjE1NF9BVFRSX0NDQV9NT0RFXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljY2EubW9kZSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTU0X0FUVFJfQ0NBX01PREVdKTsKKwkvKiBjaGVja2luZyA4MDIuMTUuNCBjb25zdHJhaW50cyAqLworCWlmIChjY2EubW9kZSA8IE5MODAyMTU0X0NDQV9FTkVSR1kgfHwgY2NhLm1vZGUgPiBOTDgwMjE1NF9DQ0FfQVRUUl9NQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNjYS5tb2RlID09IE5MODAyMTU0X0NDQV9FTkVSR1lfQ0FSUklFUikgeworCQlpZiAoIWluZm8tPmF0dHJzW05MODAyMTU0X0FUVFJfQ0NBX09QVF0pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQljY2Eub3B0ID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxNTRfQVRUUl9DQ0FfT1BUXSk7CisJCWlmIChjY2Eub3B0ID4gTkw4MDIxNTRfQ0NBX09QVF9BVFRSX01BWCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiByZGV2X3NldF9jY2FfbW9kZShyZGV2LCAmY2NhKTsKK30KKwogc3RhdGljIGludCBubDgwMjE1NF9zZXRfcGFuX2lkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tPnVzZXJfcHRyWzBdOwpAQCAtODk1LDYgKzkyOSwxNCBAQAogCQkJCSAgTkw4MDIxNTRfRkxBR19ORUVEX1JUTkwsCiAJfSwKIAl7CisJCS5jbWQgPSBOTDgwMjE1NF9DTURfU0VUX0NDQV9NT0RFLAorCQkuZG9pdCA9IG5sODAyMTU0X3NldF9jY2FfbW9kZSwKKwkJLnBvbGljeSA9IG5sODAyMTU0X3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCQkuaW50ZXJuYWxfZmxhZ3MgPSBOTDgwMjE1NF9GTEFHX05FRURfV1BBTl9QSFkgfAorCQkJCSAgTkw4MDIxNTRfRkxBR19ORUVEX1JUTkwsCisJfSwKKwl7CiAJCS5jbWQgPSBOTDgwMjE1NF9DTURfU0VUX1BBTl9JRCwKIAkJLmRvaXQgPSBubDgwMjE1NF9zZXRfcGFuX2lkLAogCQkucG9saWN5ID0gbmw4MDIxNTRfcG9saWN5LApkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvcmF3LmMgYi9uZXQvaWVlZTgwMjE1NC9yYXcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY3NGIxMTUuLjAwMDAwMDAKLS0tIGEvbmV0L2llZWU4MDIxNTQvcmF3LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzAgKzAsMCBAQAotLyoKLSAqIFJhdyBJRUVFIDgwMi4xNS40IHNvY2tldHMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBTaWVtZW5zIEFHCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFdyaXR0ZW4gYnk6Ci0gKiBTZXJnZXkgTGFwaW4gPHNsYXBpbkBvc3NmYW5zLm9yZz4KLSAqIERtaXRyeSBFcmVtaW4tU29sZW5pa292IDxkYmFyeXNoa292QGdtYWlsLmNvbT4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbmV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxuZXQvc29jay5oPgotI2luY2x1ZGUgPG5ldC9hZl9pZWVlODAyMTU0Lmg+Ci0jaW5jbHVkZSA8bmV0L2llZWU4MDIxNTRfbmV0ZGV2Lmg+Ci0KLSNpbmNsdWRlICJhZjgwMjE1NC5oIgotCi1zdGF0aWMgSExJU1RfSEVBRChyYXdfaGVhZCk7Ci1zdGF0aWMgREVGSU5FX1JXTE9DSyhyYXdfbG9jayk7Ci0KLXN0YXRpYyB2b2lkIHJhd19oYXNoKHN0cnVjdCBzb2NrICpzaykKLXsKLQl3cml0ZV9sb2NrX2JoKCZyYXdfbG9jayk7Ci0Jc2tfYWRkX25vZGUoc2ssICZyYXdfaGVhZCk7Ci0Jc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLT5za19wcm90LCAxKTsKLQl3cml0ZV91bmxvY2tfYmgoJnJhd19sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgcmF3X3VuaGFzaChzdHJ1Y3Qgc29jayAqc2spCi17Ci0Jd3JpdGVfbG9ja19iaCgmcmF3X2xvY2spOwotCWlmIChza19kZWxfbm9kZV9pbml0KHNrKSkKLQkJc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLT5za19wcm90LCAtMSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZyYXdfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJhd19jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCkKLXsKLQlza19jb21tb25fcmVsZWFzZShzayk7Ci19Ci0KLXN0YXRpYyBpbnQgcmF3X2JpbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKl91YWRkciwgaW50IGxlbikKLXsKLQlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyIGFkZHI7Ci0Jc3RydWN0IHNvY2thZGRyX2llZWU4MDIxNTQgKnVhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pZWVlODAyMTU0ICopX3VhZGRyOwotCWludCBlcnIgPSAwOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwotCi0JaWYgKGxlbiA8IHNpemVvZigqdWFkZHIpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXVhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pZWVlODAyMTU0ICopX3VhZGRyOwotCWlmICh1YWRkci0+ZmFtaWx5ICE9IEFGX0lFRUU4MDIxNTQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbG9ja19zb2NrKHNrKTsKLQotCWllZWU4MDIxNTRfYWRkcl9mcm9tX3NhKCZhZGRyLCAmdWFkZHItPmFkZHIpOwotCWRldiA9IGllZWU4MDIxNTRfZ2V0X2Rldihzb2NrX25ldChzayksICZhZGRyKTsKLQlpZiAoIWRldikgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0KSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0X3B1dDsKLQl9Ci0KLQlzay0+c2tfYm91bmRfZGV2X2lmID0gZGV2LT5pZmluZGV4OwotCXNrX2RzdF9yZXNldChzayk7Ci0KLW91dF9wdXQ6Ci0JZGV2X3B1dChkZXYpOwotb3V0OgotCXJlbGVhc2Vfc29jayhzayk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IHJhd19jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKLQkJICAgICAgIGludCBhZGRyX2xlbikKLXsKLQlyZXR1cm4gLUVOT1RTVVBQOwotfQotCi1zdGF0aWMgaW50IHJhd19kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJhd19zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLAotCQkgICAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXVuc2lnbmVkIGludCBtdHU7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgaGxlbiwgdGxlbjsKLQlpbnQgZXJyOwotCi0JaWYgKG1zZy0+bXNnX2ZsYWdzICYgTVNHX09PQikgewotCQlwcl9kZWJ1ZygibXNnLT5tc2dfZmxhZ3MgPSAweCV4XG4iLCBtc2ctPm1zZ19mbGFncyk7Ci0JCXJldHVybiAtRU9QTk9UU1VQUDsKLQl9Ci0KLQlsb2NrX3NvY2soc2spOwotCWlmICghc2stPnNrX2JvdW5kX2Rldl9pZikKLQkJZGV2ID0gZGV2X2dldGZpcnN0Ynlod3R5cGUoc29ja19uZXQoc2spLCBBUlBIUkRfSUVFRTgwMjE1NCk7Ci0JZWxzZQotCQlkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHNvY2tfbmV0KHNrKSwgc2stPnNrX2JvdW5kX2Rldl9pZik7Ci0JcmVsZWFzZV9zb2NrKHNrKTsKLQotCWlmICghZGV2KSB7Ci0JCXByX2RlYnVnKCJubyBkZXZcbiIpOwotCQllcnIgPSAtRU5YSU87Ci0JCWdvdG8gb3V0OwotCX0KLQotCW10dSA9IGRldi0+bXR1OwotCXByX2RlYnVnKCJuYW1lID0gJXMsIG10dSA9ICV1XG4iLCBkZXYtPm5hbWUsIG10dSk7Ci0KLQlpZiAoc2l6ZSA+IG10dSkgewotCQlwcl9kZWJ1Zygic2l6ZSA9ICVadSwgbXR1ID0gJXVcbiIsIHNpemUsIG10dSk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X2RldjsKLQl9Ci0KLQlobGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTsKLQl0bGVuID0gZGV2LT5uZWVkZWRfdGFpbHJvb207Ci0Jc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgaGxlbiArIHRsZW4gKyBzaXplLAotCQkJCSAgbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOwotCWlmICghc2tiKQotCQlnb3RvIG91dF9kZXY7Ci0KLQlza2JfcmVzZXJ2ZShza2IsIGhsZW4pOwotCi0Jc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKLQotCWVyciA9IG1lbWNweV9mcm9tX21zZyhza2JfcHV0KHNrYiwgc2l6ZSksIG1zZywgc2l6ZSk7Ci0JaWYgKGVyciA8IDApCi0JCWdvdG8gb3V0X3NrYjsKLQotCXNrYi0+ZGV2ID0gZGV2OwotCXNrYi0+c2sgID0gc2s7Ci0Jc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lFRUU4MDIxNTQpOwotCi0JZGV2X3B1dChkZXYpOwotCi0JZXJyID0gZGV2X3F1ZXVlX3htaXQoc2tiKTsKLQlpZiAoZXJyID4gMCkKLQkJZXJyID0gbmV0X3htaXRfZXJybm8oZXJyKTsKLQotCXJldHVybiBlcnIgPzogc2l6ZTsKLQotb3V0X3NrYjoKLQlrZnJlZV9za2Ioc2tiKTsKLW91dF9kZXY6Ci0JZGV2X3B1dChkZXYpOwotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgcmF3X3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywKLQkJICAgICAgIHNpemVfdCBsZW4sIGludCBub2Jsb2NrLCBpbnQgZmxhZ3MsIGludCAqYWRkcl9sZW4pCi17Ci0Jc2l6ZV90IGNvcGllZCA9IDA7Ci0JaW50IGVyciA9IC1FT1BOT1RTVVBQOwotCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQlza2IgPSBza2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MsIG5vYmxvY2ssICZlcnIpOwotCWlmICghc2tiKQotCQlnb3RvIG91dDsKLQotCWNvcGllZCA9IHNrYi0+bGVuOwotCWlmIChsZW4gPCBjb3BpZWQpIHsKLQkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOwotCQljb3BpZWQgPSBsZW47Ci0JfQotCi0JZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1fbXNnKHNrYiwgMCwgbXNnLCBjb3BpZWQpOwotCWlmIChlcnIpCi0JCWdvdG8gZG9uZTsKLQotCXNvY2tfcmVjdl90c19hbmRfZHJvcHMobXNnLCBzaywgc2tiKTsKLQotCWlmIChmbGFncyAmIE1TR19UUlVOQykKLQkJY29waWVkID0gc2tiLT5sZW47Ci1kb25lOgotCXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOwotb3V0OgotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIGNvcGllZDsKLX0KLQotc3RhdGljIGludCByYXdfcmN2X3NrYihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCi17Ci0Jc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IpCi0JCXJldHVybiBORVRfUlhfRFJPUDsKLQotCWlmIChzb2NrX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYikgPCAwKSB7Ci0JCWtmcmVlX3NrYihza2IpOwotCQlyZXR1cm4gTkVUX1JYX0RST1A7Ci0JfQotCi0JcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwotfQotCi12b2lkIGllZWU4MDIxNTRfcmF3X2RlbGl2ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlzdHJ1Y3Qgc29jayAqc2s7Ci0KLQlyZWFkX2xvY2soJnJhd19sb2NrKTsKLQlza19mb3JfZWFjaChzaywgJnJhd19oZWFkKSB7Ci0JCWJoX2xvY2tfc29jayhzayk7Ci0JCWlmICghc2stPnNrX2JvdW5kX2Rldl9pZiB8fAotCQkgICAgc2stPnNrX2JvdW5kX2Rldl9pZiA9PSBkZXYtPmlmaW5kZXgpIHsKLQkJCXN0cnVjdCBza19idWZmICpjbG9uZTsKLQotCQkJY2xvbmUgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKLQkJCWlmIChjbG9uZSkKLQkJCQlyYXdfcmN2X3NrYihzaywgY2xvbmUpOwotCQl9Ci0JCWJoX3VubG9ja19zb2NrKHNrKTsKLQl9Ci0JcmVhZF91bmxvY2soJnJhd19sb2NrKTsKLX0KLQotc3RhdGljIGludCByYXdfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCi0JCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKLXsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KLXN0YXRpYyBpbnQgcmF3X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAotCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQotewotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLQotc3RydWN0IHByb3RvIGllZWU4MDIxNTRfcmF3X3Byb3QgPSB7Ci0JLm5hbWUJCT0gIklFRUUtODAyLjE1LjQtUkFXIiwKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9ial9zaXplCT0gc2l6ZW9mKHN0cnVjdCBzb2NrKSwKLQkuY2xvc2UJCT0gcmF3X2Nsb3NlLAotCS5iaW5kCQk9IHJhd19iaW5kLAotCS5zZW5kbXNnCT0gcmF3X3NlbmRtc2csCi0JLnJlY3Ztc2cJPSByYXdfcmVjdm1zZywKLQkuaGFzaAkJPSByYXdfaGFzaCwKLQkudW5oYXNoCQk9IHJhd191bmhhc2gsCi0JLmNvbm5lY3QJPSByYXdfY29ubmVjdCwKLQkuZGlzY29ubmVjdAk9IHJhd19kaXNjb25uZWN0LAotCS5nZXRzb2Nrb3B0CT0gcmF3X2dldHNvY2tvcHQsCi0JLnNldHNvY2tvcHQJPSByYXdfc2V0c29ja29wdCwKLX07CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjE1NC9yZGV2LW9wcy5oIGIvbmV0L2llZWU4MDIxNTQvcmRldi1vcHMuaAppbmRleCBhZmY1NGZiZC4uN2M0NjczMiAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxNTQvcmRldi1vcHMuaAorKysgYi9uZXQvaWVlZTgwMjE1NC9yZGV2LW9wcy5oCkBAIC00Miw2ICs0MiwxMyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAorcmRldl9zZXRfY2NhX21vZGUoc3RydWN0IGNmZzgwMjE1NF9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJICBjb25zdCBzdHJ1Y3Qgd3Bhbl9waHlfY2NhICpjY2EpCit7CisJcmV0dXJuIHJkZXYtPm9wcy0+c2V0X2NjYV9tb2RlKCZyZGV2LT53cGFuX3BoeSwgY2NhKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKIHJkZXZfc2V0X3Bhbl9pZChzdHJ1Y3QgY2ZnODAyMTU0X3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQlzdHJ1Y3Qgd3Bhbl9kZXYgKndwYW5fZGV2LCBfX2xlMTYgcGFuX2lkKQogewpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvcmVhc3NlbWJseS5oIGIvbmV0L2llZWU4MDIxNTQvcmVhc3NlbWJseS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzZiMTZmLi4wMDAwMDAwCi0tLSBhL25ldC9pZWVlODAyMTU0L3JlYXNzZW1ibHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLSNpZm5kZWYgX19JRUVFODAyMTU0XzZMT1dQQU5fUkVBU1NFTUJMWV9IX18KLSNkZWZpbmUgX19JRUVFODAyMTU0XzZMT1dQQU5fUkVBU1NFTUJMWV9IX18KLQotI2luY2x1ZGUgPG5ldC9pbmV0X2ZyYWcuaD4KLQotc3RydWN0IGxvd3Bhbl9jcmVhdGVfYXJnIHsKLQl1MTYgdGFnOwotCXUxNiBkX3NpemU7Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqc3JjOwotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTU0X2FkZHIgKmRzdDsKLX07Ci0KLS8qIEVxdWl2YWxlbnQgb2YgaXB2NCBzdHJ1Y3QgaXAKLSAqLwotc3RydWN0IGxvd3Bhbl9mcmFnX3F1ZXVlIHsKLQlzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlCXE7Ci0KLQl1MTYJCQl0YWc7Ci0JdTE2CQkJZF9zaXplOwotCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIJc2FkZHI7Ci0Jc3RydWN0IGllZWU4MDIxNTRfYWRkcglkYWRkcjsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGllZWU4MDIxNTRfYWRkcl9oYXNoKGNvbnN0IHN0cnVjdCBpZWVlODAyMTU0X2FkZHIgKmEpCi17Ci0Jc3dpdGNoIChhLT5tb2RlKSB7Ci0JY2FzZSBJRUVFODAyMTU0X0FERFJfTE9ORzoKLQkJcmV0dXJuICgoKF9fZm9yY2UgdTY0KWEtPmV4dGVuZGVkX2FkZHIpID4+IDMyKSBeCi0JCQkoKChfX2ZvcmNlIHU2NClhLT5leHRlbmRlZF9hZGRyKSAmIDB4ZmZmZmZmZmYpOwotCWNhc2UgSUVFRTgwMjE1NF9BRERSX1NIT1JUOgotCQlyZXR1cm4gKF9fZm9yY2UgdTMyKShhLT5zaG9ydF9hZGRyKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLWludCBsb3dwYW5fZnJhZ19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTggZnJhZ190eXBlKTsKLXZvaWQgbG93cGFuX25ldF9mcmFnX2V4aXQodm9pZCk7Ci1pbnQgbG93cGFuX25ldF9mcmFnX2luaXQodm9pZCk7Ci0KLSNlbmRpZiAvKiBfX0lFRUU4MDIxNTRfNkxPV1BBTl9SRUFTU0VNQkxZX0hfXyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvc29ja2V0LmMgYi9uZXQvaWVlZTgwMjE1NC9zb2NrZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODc4ZDhjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2llZWU4MDIxNTQvc29ja2V0LmMKQEAgLTAsMCArMSwxMTI1IEBACisvKgorICogSUVFRTgwMjE1NC40IHNvY2tldCBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBTaWVtZW5zIEFHCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFdyaXR0ZW4gYnk6CisgKiBTZXJnZXkgTGFwaW4gPHNsYXBpbkBvc3NmYW5zLm9yZz4KKyAqIE1heGltIEdvcmJhY2h5b3YgPG1heGltLmdvcmJhY2hldkBzaWVtZW5zLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvdGVybWlvcy5oPgkvKiBGb3IgVElPQ09VVFEvSU5RICovCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxuZXQvZGF0YWxpbmsuaD4KKyNpbmNsdWRlIDxuZXQvcHNuYXAuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgorI2luY2x1ZGUgPG5ldC90Y3Bfc3RhdGVzLmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisKKyNpbmNsdWRlIDxuZXQvYWZfaWVlZTgwMjE1NC5oPgorI2luY2x1ZGUgPG5ldC9pZWVlODAyMTU0X25ldGRldi5oPgorCisvKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciBmYW1pbGllcyAqLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlKgoraWVlZTgwMjE1NF9nZXRfZGV2KHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGllZWU4MDIxNTRfYWRkciAqYWRkcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqdG1wOworCV9fbGUxNiBwYW5faWQsIHNob3J0X2FkZHI7CisJdTggaHdhZGRyW0lFRUU4MDIxNTRfQUREUl9MRU5dOworCisJc3dpdGNoIChhZGRyLT5tb2RlKSB7CisJY2FzZSBJRUVFODAyMTU0X0FERFJfTE9ORzoKKwkJaWVlZTgwMjE1NF9kZXZhZGRyX3RvX3Jhdyhod2FkZHIsIGFkZHItPmV4dGVuZGVkX2FkZHIpOworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWRldiA9IGRldl9nZXRieWh3YWRkcl9yY3UobmV0LCBBUlBIUkRfSUVFRTgwMjE1NCwgaHdhZGRyKTsKKwkJaWYgKGRldikKKwkJCWRldl9ob2xkKGRldik7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxNTRfQUREUl9TSE9SVDoKKwkJaWYgKGFkZHItPnBhbl9pZCA9PSBjcHVfdG9fbGUxNihJRUVFODAyMTU0X1BBTklEX0JST0FEQ0FTVCkgfHwKKwkJICAgIGFkZHItPnNob3J0X2FkZHIgPT0gY3B1X3RvX2xlMTYoSUVFRTgwMjE1NF9BRERSX1VOREVGKSB8fAorCQkgICAgYWRkci0+c2hvcnRfYWRkciA9PSBjcHVfdG9fbGUxNihJRUVFODAyMTU0X0FERFJfQlJPQURDQVNUKSkKKwkJCWJyZWFrOworCisJCXJ0bmxfbG9jaygpOworCisJCWZvcl9lYWNoX25ldGRldihuZXQsIHRtcCkgeworCQkJaWYgKHRtcC0+dHlwZSAhPSBBUlBIUkRfSUVFRTgwMjE1NCkKKwkJCQljb250aW51ZTsKKworCQkJcGFuX2lkID0gaWVlZTgwMjE1NF9tbG1lX29wcyh0bXApLT5nZXRfcGFuX2lkKHRtcCk7CisJCQlzaG9ydF9hZGRyID0KKwkJCQlpZWVlODAyMTU0X21sbWVfb3BzKHRtcCktPmdldF9zaG9ydF9hZGRyKHRtcCk7CisKKwkJCWlmIChwYW5faWQgPT0gYWRkci0+cGFuX2lkICYmCisJCQkgICAgc2hvcnRfYWRkciA9PSBhZGRyLT5zaG9ydF9hZGRyKSB7CisJCQkJZGV2ID0gdG1wOworCQkJCWRldl9ob2xkKGRldik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlydG5sX3VubG9jaygpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl93YXJuKCJVbnN1cHBvcnRlZCBpZWVlODAyMTU0IGFkZHJlc3MgdHlwZTogJWRcbiIsCisJCQlhZGRyLT5tb2RlKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGRldjsKK30KKworc3RhdGljIGludCBpZWVlODAyMTU0X3NvY2tfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCisJaWYgKHNrKSB7CisJCXNvY2stPnNrID0gTlVMTDsKKwkJc2stPnNrX3Byb3QtPmNsb3NlKHNrLCAwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjE1NF9zb2NrX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJCSAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKworCXJldHVybiBzay0+c2tfcHJvdC0+c2VuZG1zZyhpb2NiLCBzaywgbXNnLCBsZW4pOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxNTRfc29ja19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsCisJCQkJaW50IGFkZHJfbGVuKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCisJaWYgKHNrLT5za19wcm90LT5iaW5kKQorCQlyZXR1cm4gc2stPnNrX3Byb3QtPmJpbmQoc2ssIHVhZGRyLCBhZGRyX2xlbik7CisKKwlyZXR1cm4gc29ja19ub19iaW5kKHNvY2ssIHVhZGRyLCBhZGRyX2xlbik7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjE1NF9zb2NrX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKKwkJCQkgICBpbnQgYWRkcl9sZW4sIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKworCWlmIChhZGRyX2xlbiA8IHNpemVvZih1YWRkci0+c2FfZmFtaWx5KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodWFkZHItPnNhX2ZhbWlseSA9PSBBRl9VTlNQRUMpCisJCXJldHVybiBzay0+c2tfcHJvdC0+ZGlzY29ubmVjdChzaywgZmxhZ3MpOworCisJcmV0dXJuIHNrLT5za19wcm90LT5jb25uZWN0KHNrLCB1YWRkciwgYWRkcl9sZW4pOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxNTRfZGV2X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlmcmVxIF9fdXNlciAqYXJnLAorCQkJCXVuc2lnbmVkIGludCBjbWQpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlpbnQgcmV0ID0gLUVOT0lPQ1RMQ01EOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmlmciwgYXJnLCBzaXplb2Yoc3RydWN0IGlmcmVxKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWZyLmlmcl9uYW1lW0lGTkFNU0laLTFdID0gMDsKKworCWRldl9sb2FkKHNvY2tfbmV0KHNrKSwgaWZyLmlmcl9uYW1lKTsKKwlkZXYgPSBkZXZfZ2V0X2J5X25hbWUoc29ja19uZXQoc2spLCBpZnIuaWZyX25hbWUpOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGRldi0+dHlwZSA9PSBBUlBIUkRfSUVFRTgwMjE1NCAmJiBkZXYtPm5ldGRldl9vcHMtPm5kb19kb19pb2N0bCkKKwkJcmV0ID0gZGV2LT5uZXRkZXZfb3BzLT5uZG9fZG9faW9jdGwoZGV2LCAmaWZyLCBjbWQpOworCisJaWYgKCFyZXQgJiYgY29weV90b191c2VyKGFyZywgJmlmciwgc2l6ZW9mKHN0cnVjdCBpZnJlcSkpKQorCQlyZXQgPSAtRUZBVUxUOworCWRldl9wdXQoZGV2KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjE1NF9zb2NrX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsCisJCQkJIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHU1RBTVA6CisJCXJldHVybiBzb2NrX2dldF90aW1lc3RhbXAoc2ssIChzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKilhcmcpOworCWNhc2UgU0lPQ0dTVEFNUE5TOgorCQlyZXR1cm4gc29ja19nZXRfdGltZXN0YW1wbnMoc2ssIChzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopYXJnKTsKKwljYXNlIFNJT0NHSUZBRERSOgorCWNhc2UgU0lPQ1NJRkFERFI6CisJCXJldHVybiBpZWVlODAyMTU0X2Rldl9pb2N0bChzaywgKHN0cnVjdCBpZnJlcSBfX3VzZXIgKilhcmcsCisJCQkJY21kKTsKKwlkZWZhdWx0OgorCQlpZiAoIXNrLT5za19wcm90LT5pb2N0bCkKKwkJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJCXJldHVybiBzay0+c2tfcHJvdC0+aW9jdGwoc2ssIGNtZCwgYXJnKTsKKwl9Cit9CisKKy8qIFJBVyBTb2NrZXRzICg4MDIuMTUuNCBjcmVhdGVkIGluIHVzZXJzcGFjZSkgKi8KK3N0YXRpYyBITElTVF9IRUFEKHJhd19oZWFkKTsKK3N0YXRpYyBERUZJTkVfUldMT0NLKHJhd19sb2NrKTsKKworc3RhdGljIHZvaWQgcmF3X2hhc2goc3RydWN0IHNvY2sgKnNrKQoreworCXdyaXRlX2xvY2tfYmgoJnJhd19sb2NrKTsKKwlza19hZGRfbm9kZShzaywgJnJhd19oZWFkKTsKKwlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stPnNrX3Byb3QsIDEpOworCXdyaXRlX3VubG9ja19iaCgmcmF3X2xvY2spOworfQorCitzdGF0aWMgdm9pZCByYXdfdW5oYXNoKHN0cnVjdCBzb2NrICpzaykKK3sKKwl3cml0ZV9sb2NrX2JoKCZyYXdfbG9jayk7CisJaWYgKHNrX2RlbF9ub2RlX2luaXQoc2spKQorCQlzb2NrX3Byb3RfaW51c2VfYWRkKHNvY2tfbmV0KHNrKSwgc2stPnNrX3Byb3QsIC0xKTsKKwl3cml0ZV91bmxvY2tfYmgoJnJhd19sb2NrKTsKK30KKworc3RhdGljIHZvaWQgcmF3X2Nsb3NlKHN0cnVjdCBzb2NrICpzaywgbG9uZyB0aW1lb3V0KQoreworCXNrX2NvbW1vbl9yZWxlYXNlKHNrKTsKK30KKworc3RhdGljIGludCByYXdfYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqX3VhZGRyLCBpbnQgbGVuKQoreworCXN0cnVjdCBpZWVlODAyMTU0X2FkZHIgYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaWVlZTgwMjE1NCAqdWFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2llZWU4MDIxNTQgKilfdWFkZHI7CisJaW50IGVyciA9IDA7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisKKwlpZiAobGVuIDwgc2l6ZW9mKCp1YWRkcikpCisJCXJldHVybiAtRUlOVkFMOworCisJdWFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2llZWU4MDIxNTQgKilfdWFkZHI7CisJaWYgKHVhZGRyLT5mYW1pbHkgIT0gQUZfSUVFRTgwMjE1NCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsb2NrX3NvY2soc2spOworCisJaWVlZTgwMjE1NF9hZGRyX2Zyb21fc2EoJmFkZHIsICZ1YWRkci0+YWRkcik7CisJZGV2ID0gaWVlZTgwMjE1NF9nZXRfZGV2KHNvY2tfbmV0KHNrKSwgJmFkZHIpOworCWlmICghZGV2KSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChkZXYtPnR5cGUgIT0gQVJQSFJEX0lFRUU4MDIxNTQpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXRfcHV0OworCX0KKworCXNrLT5za19ib3VuZF9kZXZfaWYgPSBkZXYtPmlmaW5kZXg7CisJc2tfZHN0X3Jlc2V0KHNrKTsKKworb3V0X3B1dDoKKwlkZXZfcHV0KGRldik7CitvdXQ6CisJcmVsZWFzZV9zb2NrKHNrKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgcmF3X2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLAorCQkgICAgICAgaW50IGFkZHJfbGVuKQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgcmF3X2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2sgKnNrLCBpbnQgZmxhZ3MpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmF3X3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssCisJCSAgICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJdW5zaWduZWQgaW50IG10dTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBobGVuLCB0bGVuOworCWludCBlcnI7CisKKwlpZiAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfT09CKSB7CisJCXByX2RlYnVnKCJtc2ctPm1zZ19mbGFncyA9IDB4JXhcbiIsIG1zZy0+bXNnX2ZsYWdzKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWxvY2tfc29jayhzayk7CisJaWYgKCFzay0+c2tfYm91bmRfZGV2X2lmKQorCQlkZXYgPSBkZXZfZ2V0Zmlyc3RieWh3dHlwZShzb2NrX25ldChzayksIEFSUEhSRF9JRUVFODAyMTU0KTsKKwllbHNlCisJCWRldiA9IGRldl9nZXRfYnlfaW5kZXgoc29ja19uZXQoc2spLCBzay0+c2tfYm91bmRfZGV2X2lmKTsKKwlyZWxlYXNlX3NvY2soc2spOworCisJaWYgKCFkZXYpIHsKKwkJcHJfZGVidWcoIm5vIGRldlxuIik7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBvdXQ7CisJfQorCisJbXR1ID0gZGV2LT5tdHU7CisJcHJfZGVidWcoIm5hbWUgPSAlcywgbXR1ID0gJXVcbiIsIGRldi0+bmFtZSwgbXR1KTsKKworCWlmIChzaXplID4gbXR1KSB7CisJCXByX2RlYnVnKCJzaXplID0gJVp1LCBtdHUgPSAldVxuIiwgc2l6ZSwgbXR1KTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXRfZGV2OworCX0KKworCWhsZW4gPSBMTF9SRVNFUlZFRF9TUEFDRShkZXYpOworCXRsZW4gPSBkZXYtPm5lZWRlZF90YWlscm9vbTsKKwlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLCBobGVuICsgdGxlbiArIHNpemUsCisJCQkJICBtc2ctPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCwgJmVycik7CisJaWYgKCFza2IpCisJCWdvdG8gb3V0X2RldjsKKworCXNrYl9yZXNlcnZlKHNrYiwgaGxlbik7CisKKwlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOworCisJZXJyID0gbWVtY3B5X2Zyb21fbXNnKHNrYl9wdXQoc2tiLCBzaXplKSwgbXNnLCBzaXplKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXRfc2tiOworCisJc2tiLT5kZXYgPSBkZXY7CisJc2tiLT5zayAgPSBzazsKKwlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSUVFRTgwMjE1NCk7CisKKwlkZXZfcHV0KGRldik7CisKKwllcnIgPSBkZXZfcXVldWVfeG1pdChza2IpOworCWlmIChlcnIgPiAwKQorCQllcnIgPSBuZXRfeG1pdF9lcnJubyhlcnIpOworCisJcmV0dXJuIGVyciA/OiBzaXplOworCitvdXRfc2tiOgorCWtmcmVlX3NrYihza2IpOworb3V0X2RldjoKKwlkZXZfcHV0KGRldik7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCByYXdfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLAorCQkgICAgICAgc2l6ZV90IGxlbiwgaW50IG5vYmxvY2ssIGludCBmbGFncywgaW50ICphZGRyX2xlbikKK3sKKwlzaXplX3QgY29waWVkID0gMDsKKwlpbnQgZXJyID0gLUVPUE5PVFNVUFA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXNrYiA9IHNrYl9yZWN2X2RhdGFncmFtKHNrLCBmbGFncywgbm9ibG9jaywgJmVycik7CisJaWYgKCFza2IpCisJCWdvdG8gb3V0OworCisJY29waWVkID0gc2tiLT5sZW47CisJaWYgKGxlbiA8IGNvcGllZCkgeworCQltc2ctPm1zZ19mbGFncyB8PSBNU0dfVFJVTkM7CisJCWNvcGllZCA9IGxlbjsKKwl9CisKKwllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9tc2coc2tiLCAwLCBtc2csIGNvcGllZCk7CisJaWYgKGVycikKKwkJZ290byBkb25lOworCisJc29ja19yZWN2X3RzX2FuZF9kcm9wcyhtc2csIHNrLCBza2IpOworCisJaWYgKGZsYWdzICYgTVNHX1RSVU5DKQorCQljb3BpZWQgPSBza2ItPmxlbjsKK2RvbmU6CisJc2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7CitvdXQ6CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gY29waWVkOworfQorCitzdGF0aWMgaW50IHJhd19yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJaWYgKHNvY2tfcXVldWVfcmN2X3NrYihzaywgc2tiKSA8IDApIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRfUlhfRFJPUDsKKwl9CisKKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxNTRfcmF3X2RlbGl2ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgc29jayAqc2s7CisKKwlyZWFkX2xvY2soJnJhd19sb2NrKTsKKwlza19mb3JfZWFjaChzaywgJnJhd19oZWFkKSB7CisJCWJoX2xvY2tfc29jayhzayk7CisJCWlmICghc2stPnNrX2JvdW5kX2Rldl9pZiB8fAorCQkgICAgc2stPnNrX2JvdW5kX2Rldl9pZiA9PSBkZXYtPmlmaW5kZXgpIHsKKwkJCXN0cnVjdCBza19idWZmICpjbG9uZTsKKworCQkJY2xvbmUgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChjbG9uZSkKKwkJCQlyYXdfcmN2X3NrYihzaywgY2xvbmUpOworCQl9CisJCWJoX3VubG9ja19zb2NrKHNrKTsKKwl9CisJcmVhZF91bmxvY2soJnJhd19sb2NrKTsKK30KKworc3RhdGljIGludCByYXdfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCisJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgcmF3X3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICBjaGFyIF9fdXNlciAqb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIHN0cnVjdCBwcm90byBpZWVlODAyMTU0X3Jhd19wcm90ID0geworCS5uYW1lCQk9ICJJRUVFLTgwMi4xNS40LVJBVyIsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vYmpfc2l6ZQk9IHNpemVvZihzdHJ1Y3Qgc29jayksCisJLmNsb3NlCQk9IHJhd19jbG9zZSwKKwkuYmluZAkJPSByYXdfYmluZCwKKwkuc2VuZG1zZwk9IHJhd19zZW5kbXNnLAorCS5yZWN2bXNnCT0gcmF3X3JlY3Ztc2csCisJLmhhc2gJCT0gcmF3X2hhc2gsCisJLnVuaGFzaAkJPSByYXdfdW5oYXNoLAorCS5jb25uZWN0CT0gcmF3X2Nvbm5lY3QsCisJLmRpc2Nvbm5lY3QJPSByYXdfZGlzY29ubmVjdCwKKwkuZ2V0c29ja29wdAk9IHJhd19nZXRzb2Nrb3B0LAorCS5zZXRzb2Nrb3B0CT0gcmF3X3NldHNvY2tvcHQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBpZWVlODAyMTU0X3Jhd19vcHMgPSB7CisJLmZhbWlseQkJICAgPSBQRl9JRUVFODAyMTU0LAorCS5vd25lcgkJICAgPSBUSElTX01PRFVMRSwKKwkucmVsZWFzZQkgICA9IGllZWU4MDIxNTRfc29ja19yZWxlYXNlLAorCS5iaW5kCQkgICA9IGllZWU4MDIxNTRfc29ja19iaW5kLAorCS5jb25uZWN0CSAgID0gaWVlZTgwMjE1NF9zb2NrX2Nvbm5lY3QsCisJLnNvY2tldHBhaXIJICAgPSBzb2NrX25vX3NvY2tldHBhaXIsCisJLmFjY2VwdAkJICAgPSBzb2NrX25vX2FjY2VwdCwKKwkuZ2V0bmFtZQkgICA9IHNvY2tfbm9fZ2V0bmFtZSwKKwkucG9sbAkJICAgPSBkYXRhZ3JhbV9wb2xsLAorCS5pb2N0bAkJICAgPSBpZWVlODAyMTU0X3NvY2tfaW9jdGwsCisJLmxpc3RlbgkJICAgPSBzb2NrX25vX2xpc3RlbiwKKwkuc2h1dGRvd24JICAgPSBzb2NrX25vX3NodXRkb3duLAorCS5zZXRzb2Nrb3B0CSAgID0gc29ja19jb21tb25fc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAkgICA9IHNvY2tfY29tbW9uX2dldHNvY2tvcHQsCisJLnNlbmRtc2cJICAgPSBpZWVlODAyMTU0X3NvY2tfc2VuZG1zZywKKwkucmVjdm1zZwkgICA9IHNvY2tfY29tbW9uX3JlY3Ztc2csCisJLm1tYXAJCSAgID0gc29ja19ub19tbWFwLAorCS5zZW5kcGFnZQkgICA9IHNvY2tfbm9fc2VuZHBhZ2UsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAorCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorI2VuZGlmCit9OworCisvKiBER1JBTSBTb2NrZXRzICg4MDIuMTUuNCBkYXRhZnJhbWVzKSAqLworc3RhdGljIEhMSVNUX0hFQUQoZGdyYW1faGVhZCk7CitzdGF0aWMgREVGSU5FX1JXTE9DSyhkZ3JhbV9sb2NrKTsKKworc3RydWN0IGRncmFtX3NvY2sgeworCXN0cnVjdCBzb2NrIHNrOworCisJc3RydWN0IGllZWU4MDIxNTRfYWRkciBzcmNfYWRkcjsKKwlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyIGRzdF9hZGRyOworCisJdW5zaWduZWQgaW50IGJvdW5kOjE7CisJdW5zaWduZWQgaW50IGNvbm5lY3RlZDoxOworCXVuc2lnbmVkIGludCB3YW50X2FjazoxOworCXVuc2lnbmVkIGludCBzZWNlbjoxOworCXVuc2lnbmVkIGludCBzZWNlbl9vdmVycmlkZToxOworCXVuc2lnbmVkIGludCBzZWNsZXZlbDozOworCXVuc2lnbmVkIGludCBzZWNsZXZlbF9vdmVycmlkZToxOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGdyYW1fc29jayAqZGdyYW1fc2soY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2ssIHN0cnVjdCBkZ3JhbV9zb2NrLCBzayk7Cit9CisKK3N0YXRpYyB2b2lkIGRncmFtX2hhc2goc3RydWN0IHNvY2sgKnNrKQoreworCXdyaXRlX2xvY2tfYmgoJmRncmFtX2xvY2spOworCXNrX2FkZF9ub2RlKHNrLCAmZGdyYW1faGVhZCk7CisJc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLT5za19wcm90LCAxKTsKKwl3cml0ZV91bmxvY2tfYmgoJmRncmFtX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBkZ3JhbV91bmhhc2goc3RydWN0IHNvY2sgKnNrKQoreworCXdyaXRlX2xvY2tfYmgoJmRncmFtX2xvY2spOworCWlmIChza19kZWxfbm9kZV9pbml0KHNrKSkKKwkJc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksIHNrLT5za19wcm90LCAtMSk7CisJd3JpdGVfdW5sb2NrX2JoKCZkZ3JhbV9sb2NrKTsKK30KKworc3RhdGljIGludCBkZ3JhbV9pbml0KHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgZGdyYW1fc29jayAqcm8gPSBkZ3JhbV9zayhzayk7CisKKwlyby0+d2FudF9hY2sgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZ3JhbV9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCkKK3sKKwlza19jb21tb25fcmVsZWFzZShzayk7Cit9CisKK3N0YXRpYyBpbnQgZGdyYW1fYmluZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzb2NrYWRkciAqdWFkZHIsIGludCBsZW4pCit7CisJc3RydWN0IHNvY2thZGRyX2llZWU4MDIxNTQgKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2llZWU4MDIxNTQgKil1YWRkcjsKKwlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyIGhhZGRyOworCXN0cnVjdCBkZ3JhbV9zb2NrICpybyA9IGRncmFtX3NrKHNrKTsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCisJbG9ja19zb2NrKHNrKTsKKworCXJvLT5ib3VuZCA9IDA7CisKKwlpZiAobGVuIDwgc2l6ZW9mKCphZGRyKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoYWRkci0+ZmFtaWx5ICE9IEFGX0lFRUU4MDIxNTQpCisJCWdvdG8gb3V0OworCisJaWVlZTgwMjE1NF9hZGRyX2Zyb21fc2EoJmhhZGRyLCAmYWRkci0+YWRkcik7CisJZGV2ID0gaWVlZTgwMjE1NF9nZXRfZGV2KHNvY2tfbmV0KHNrKSwgJmhhZGRyKTsKKwlpZiAoIWRldikgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGV2LT50eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0KSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3B1dDsKKwl9CisKKwlyby0+c3JjX2FkZHIgPSBoYWRkcjsKKworCXJvLT5ib3VuZCA9IDE7CisJZXJyID0gMDsKK291dF9wdXQ6CisJZGV2X3B1dChkZXYpOworb3V0OgorCXJlbGVhc2Vfc29jayhzayk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGRncmFtX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NPVVRROgorCXsKKwkJaW50IGFtb3VudCA9IHNrX3dtZW1fYWxsb2NfZ2V0KHNrKTsKKworCQlyZXR1cm4gcHV0X3VzZXIoYW1vdW50LCAoaW50IF9fdXNlciAqKWFyZyk7CisJfQorCisJY2FzZSBTSU9DSU5ROgorCXsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJdW5zaWduZWQgbG9uZyBhbW91bnQ7CisKKwkJYW1vdW50ID0gMDsKKwkJc3Bpbl9sb2NrX2JoKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKKwkJc2tiID0gc2tiX3BlZWsoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKKwkJaWYgKHNrYikgeworCQkJLyogV2Ugd2lsbCBvbmx5IHJldHVybiB0aGUgYW1vdW50CisJCQkgKiBvZiB0aGlzIHBhY2tldCBzaW5jZSB0aGF0IGlzIGFsbAorCQkJICogdGhhdCB3aWxsIGJlIHJlYWQuCisJCQkgKi8KKwkJCWFtb3VudCA9IHNrYi0+bGVuIC0gaWVlZTgwMjE1NF9oZHJfbGVuZ3RoKHNrYik7CisJCX0KKwkJc3Bpbl91bmxvY2tfYmgoJnNrLT5za19yZWNlaXZlX3F1ZXVlLmxvY2spOworCQlyZXR1cm4gcHV0X3VzZXIoYW1vdW50LCAoaW50IF9fdXNlciAqKWFyZyk7CisJfQorCX0KKworCXJldHVybiAtRU5PSU9DVExDTUQ7Cit9CisKKy8qIEZJWE1FOiBhdXRvYmluZCAqLworc3RhdGljIGludCBkZ3JhbV9jb25uZWN0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNvY2thZGRyICp1YWRkciwKKwkJCSBpbnQgbGVuKQoreworCXN0cnVjdCBzb2NrYWRkcl9pZWVlODAyMTU0ICphZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pZWVlODAyMTU0ICopdWFkZHI7CisJc3RydWN0IGRncmFtX3NvY2sgKnJvID0gZGdyYW1fc2soc2spOworCWludCBlcnIgPSAwOworCisJaWYgKGxlbiA8IHNpemVvZigqYWRkcikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFkZHItPmZhbWlseSAhPSBBRl9JRUVFODAyMTU0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWxvY2tfc29jayhzayk7CisKKwlpZiAoIXJvLT5ib3VuZCkgeworCQllcnIgPSAtRU5FVFVOUkVBQ0g7CisJCWdvdG8gb3V0OworCX0KKworCWllZWU4MDIxNTRfYWRkcl9mcm9tX3NhKCZyby0+ZHN0X2FkZHIsICZhZGRyLT5hZGRyKTsKKwlyby0+Y29ubmVjdGVkID0gMTsKKworb3V0OgorCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBkZ3JhbV9kaXNjb25uZWN0KHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzKQoreworCXN0cnVjdCBkZ3JhbV9zb2NrICpybyA9IGRncmFtX3NrKHNrKTsKKworCWxvY2tfc29jayhzayk7CisJcm8tPmNvbm5lY3RlZCA9IDA7CisJcmVsZWFzZV9zb2NrKHNrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRncmFtX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXVuc2lnbmVkIGludCBtdHU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjE1NF9tYWNfY2IgKmNiOworCXN0cnVjdCBkZ3JhbV9zb2NrICpybyA9IGRncmFtX3NrKHNrKTsKKwlzdHJ1Y3QgaWVlZTgwMjE1NF9hZGRyIGRzdF9hZGRyOworCWludCBobGVuLCB0bGVuOworCWludCBlcnI7CisKKwlpZiAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfT09CKSB7CisJCXByX2RlYnVnKCJtc2ctPm1zZ19mbGFncyA9IDB4JXhcbiIsIG1zZy0+bXNnX2ZsYWdzKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWlmICghcm8tPmNvbm5lY3RlZCAmJiAhbXNnLT5tc2dfbmFtZSkKKwkJcmV0dXJuIC1FREVTVEFERFJSRVE7CisJZWxzZSBpZiAocm8tPmNvbm5lY3RlZCAmJiBtc2ctPm1zZ19uYW1lKQorCQlyZXR1cm4gLUVJU0NPTk47CisKKwlpZiAoIXJvLT5ib3VuZCkKKwkJZGV2ID0gZGV2X2dldGZpcnN0Ynlod3R5cGUoc29ja19uZXQoc2spLCBBUlBIUkRfSUVFRTgwMjE1NCk7CisJZWxzZQorCQlkZXYgPSBpZWVlODAyMTU0X2dldF9kZXYoc29ja19uZXQoc2spLCAmcm8tPnNyY19hZGRyKTsKKworCWlmICghZGV2KSB7CisJCXByX2RlYnVnKCJubyBkZXZcbiIpOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gb3V0OworCX0KKwltdHUgPSBkZXYtPm10dTsKKwlwcl9kZWJ1ZygibmFtZSA9ICVzLCBtdHUgPSAldVxuIiwgZGV2LT5uYW1lLCBtdHUpOworCisJaWYgKHNpemUgPiBtdHUpIHsKKwkJcHJfZGVidWcoInNpemUgPSAlWnUsIG10dSA9ICV1XG4iLCBzaXplLCBtdHUpOworCQllcnIgPSAtRU1TR1NJWkU7CisJCWdvdG8gb3V0X2RldjsKKwl9CisKKwlobGVuID0gTExfUkVTRVJWRURfU1BBQ0UoZGV2KTsKKwl0bGVuID0gZGV2LT5uZWVkZWRfdGFpbHJvb207CisJc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgaGxlbiArIHRsZW4gKyBzaXplLAorCQkJCSAgbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsCisJCQkJICAmZXJyKTsKKwlpZiAoIXNrYikKKwkJZ290byBvdXRfZGV2OworCisJc2tiX3Jlc2VydmUoc2tiLCBobGVuKTsKKworCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOworCisJY2IgPSBtYWNfY2JfaW5pdChza2IpOworCWNiLT50eXBlID0gSUVFRTgwMjE1NF9GQ19UWVBFX0RBVEE7CisJY2ItPmFja3JlcSA9IHJvLT53YW50X2FjazsKKworCWlmIChtc2ctPm1zZ19uYW1lKSB7CisJCURFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX2llZWU4MDIxNTQqLAorCQkJCSBkYWRkciwgbXNnLT5tc2dfbmFtZSk7CisKKwkJaWVlZTgwMjE1NF9hZGRyX2Zyb21fc2EoJmRzdF9hZGRyLCAmZGFkZHItPmFkZHIpOworCX0gZWxzZSB7CisJCWRzdF9hZGRyID0gcm8tPmRzdF9hZGRyOworCX0KKworCWNiLT5zZWNlbiA9IHJvLT5zZWNlbjsKKwljYi0+c2VjZW5fb3ZlcnJpZGUgPSByby0+c2VjZW5fb3ZlcnJpZGU7CisJY2ItPnNlY2xldmVsID0gcm8tPnNlY2xldmVsOworCWNiLT5zZWNsZXZlbF9vdmVycmlkZSA9IHJvLT5zZWNsZXZlbF9vdmVycmlkZTsKKworCWVyciA9IGRldl9oYXJkX2hlYWRlcihza2IsIGRldiwgRVRIX1BfSUVFRTgwMjE1NCwgJmRzdF9hZGRyLAorCQkJICAgICAgcm8tPmJvdW5kID8gJnJvLT5zcmNfYWRkciA6IE5VTEwsIHNpemUpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dF9za2I7CisKKwllcnIgPSBtZW1jcHlfZnJvbV9tc2coc2tiX3B1dChza2IsIHNpemUpLCBtc2csIHNpemUpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIG91dF9za2I7CisKKwlza2ItPmRldiA9IGRldjsKKwlza2ItPnNrICA9IHNrOworCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JRUVFODAyMTU0KTsKKworCWRldl9wdXQoZGV2KTsKKworCWVyciA9IGRldl9xdWV1ZV94bWl0KHNrYik7CisJaWYgKGVyciA+IDApCisJCWVyciA9IG5ldF94bWl0X2Vycm5vKGVycik7CisKKwlyZXR1cm4gZXJyID86IHNpemU7CisKK291dF9za2I6CisJa2ZyZWVfc2tiKHNrYik7CitvdXRfZGV2OgorCWRldl9wdXQoZGV2KTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGRncmFtX3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssCisJCQkgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuLCBpbnQgbm9ibG9jaywKKwkJCSBpbnQgZmxhZ3MsIGludCAqYWRkcl9sZW4pCit7CisJc2l6ZV90IGNvcGllZCA9IDA7CisJaW50IGVyciA9IC1FT1BOT1RTVVBQOworCXN0cnVjdCBza19idWZmICpza2I7CisJREVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfaWVlZTgwMjE1NCAqLCBzYWRkciwgbXNnLT5tc2dfbmFtZSk7CisKKwlza2IgPSBza2JfcmVjdl9kYXRhZ3JhbShzaywgZmxhZ3MsIG5vYmxvY2ssICZlcnIpOworCWlmICghc2tiKQorCQlnb3RvIG91dDsKKworCWNvcGllZCA9IHNrYi0+bGVuOworCWlmIChsZW4gPCBjb3BpZWQpIHsKKwkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOworCQljb3BpZWQgPSBsZW47CisJfQorCisJLyogRklYTUU6IHNraXAgaGVhZGVycyBpZiBuZWNlc3NhcnkgPyEgKi8KKwllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9tc2coc2tiLCAwLCBtc2csIGNvcGllZCk7CisJaWYgKGVycikKKwkJZ290byBkb25lOworCisJc29ja19yZWN2X3RzX2FuZF9kcm9wcyhtc2csIHNrLCBza2IpOworCisJaWYgKHNhZGRyKSB7CisJCXNhZGRyLT5mYW1pbHkgPSBBRl9JRUVFODAyMTU0OworCQlpZWVlODAyMTU0X2FkZHJfdG9fc2EoJnNhZGRyLT5hZGRyLCAmbWFjX2NiKHNrYiktPnNvdXJjZSk7CisJCSphZGRyX2xlbiA9IHNpemVvZigqc2FkZHIpOworCX0KKworCWlmIChmbGFncyAmIE1TR19UUlVOQykKKwkJY29waWVkID0gc2tiLT5sZW47Citkb25lOgorCXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOworb3V0OgorCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJcmV0dXJuIGNvcGllZDsKK30KKworc3RhdGljIGludCBkZ3JhbV9yY3Zfc2tiKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJaWYgKHNvY2tfcXVldWVfcmN2X3NrYihzaywgc2tiKSA8IDApIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybiBORVRfUlhfRFJPUDsKKwl9CisKKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAoraWVlZTgwMjE1NF9tYXRjaF9zb2NrKF9fbGU2NCBod19hZGRyLCBfX2xlMTYgcGFuX2lkLCBfX2xlMTYgc2hvcnRfYWRkciwKKwkJICAgICAgc3RydWN0IGRncmFtX3NvY2sgKnJvKQoreworCWlmICghcm8tPmJvdW5kKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChyby0+c3JjX2FkZHIubW9kZSA9PSBJRUVFODAyMTU0X0FERFJfTE9ORyAmJgorCSAgICBod19hZGRyID09IHJvLT5zcmNfYWRkci5leHRlbmRlZF9hZGRyKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChyby0+c3JjX2FkZHIubW9kZSA9PSBJRUVFODAyMTU0X0FERFJfU0hPUlQgJiYKKwkgICAgcGFuX2lkID09IHJvLT5zcmNfYWRkci5wYW5faWQgJiYKKwkgICAgc2hvcnRfYWRkciA9PSByby0+c3JjX2FkZHIuc2hvcnRfYWRkcikKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjE1NF9kZ3JhbV9kZWxpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHNvY2sgKnNrLCAqcHJldiA9IE5VTEw7CisJaW50IHJldCA9IE5FVF9SWF9TVUNDRVNTOworCV9fbGUxNiBwYW5faWQsIHNob3J0X2FkZHI7CisJX19sZTY0IGh3X2FkZHI7CisKKwkvKiBEYXRhIGZyYW1lIHByb2Nlc3NpbmcgKi8KKwlCVUdfT04oZGV2LT50eXBlICE9IEFSUEhSRF9JRUVFODAyMTU0KTsKKworCXBhbl9pZCA9IGllZWU4MDIxNTRfbWxtZV9vcHMoZGV2KS0+Z2V0X3Bhbl9pZChkZXYpOworCXNob3J0X2FkZHIgPSBpZWVlODAyMTU0X21sbWVfb3BzKGRldiktPmdldF9zaG9ydF9hZGRyKGRldik7CisJaHdfYWRkciA9IGllZWU4MDIxNTRfZGV2YWRkcl9mcm9tX3JhdyhkZXYtPmRldl9hZGRyKTsKKworCXJlYWRfbG9jaygmZGdyYW1fbG9jayk7CisJc2tfZm9yX2VhY2goc2ssICZkZ3JhbV9oZWFkKSB7CisJCWlmIChpZWVlODAyMTU0X21hdGNoX3NvY2soaHdfYWRkciwgcGFuX2lkLCBzaG9ydF9hZGRyLAorCQkJCQkgIGRncmFtX3NrKHNrKSkpIHsKKwkJCWlmIChwcmV2KSB7CisJCQkJc3RydWN0IHNrX2J1ZmYgKmNsb25lOworCisJCQkJY2xvbmUgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCQlpZiAoY2xvbmUpCisJCQkJCWRncmFtX3Jjdl9za2IocHJldiwgY2xvbmUpOworCQkJfQorCisJCQlwcmV2ID0gc2s7CisJCX0KKwl9CisKKwlpZiAocHJldikgeworCQlkZ3JhbV9yY3Zfc2tiKHByZXYsIHNrYik7CisJfSBlbHNlIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldCA9IE5FVF9SWF9EUk9QOworCX0KKwlyZWFkX3VubG9jaygmZGdyYW1fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRncmFtX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbikKK3sKKwlzdHJ1Y3QgZGdyYW1fc29jayAqcm8gPSBkZ3JhbV9zayhzayk7CisKKwlpbnQgdmFsLCBsZW47CisKKwlpZiAobGV2ZWwgIT0gU09MX0lFRUU4MDIxNTQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChnZXRfdXNlcihsZW4sIG9wdGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCisJbGVuID0gbWluX3QodW5zaWduZWQgaW50LCBsZW4sIHNpemVvZihpbnQpKTsKKworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgV1BBTl9XQU5UQUNLOgorCQl2YWwgPSByby0+d2FudF9hY2s7CisJCWJyZWFrOworCWNhc2UgV1BBTl9TRUNVUklUWToKKwkJaWYgKCFyby0+c2VjZW5fb3ZlcnJpZGUpCisJCQl2YWwgPSBXUEFOX1NFQ1VSSVRZX0RFRkFVTFQ7CisJCWVsc2UgaWYgKHJvLT5zZWNlbikKKwkJCXZhbCA9IFdQQU5fU0VDVVJJVFlfT047CisJCWVsc2UKKwkJCXZhbCA9IFdQQU5fU0VDVVJJVFlfT0ZGOworCQlicmVhazsKKwljYXNlIFdQQU5fU0VDVVJJVFlfTEVWRUw6CisJCWlmICghcm8tPnNlY2xldmVsX292ZXJyaWRlKQorCQkJdmFsID0gV1BBTl9TRUNVUklUWV9MRVZFTF9ERUZBVUxUOworCQllbHNlCisJCQl2YWwgPSByby0+c2VjbGV2ZWw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PUFJPVE9PUFQ7CisJfQorCisJaWYgKHB1dF91c2VyKGxlbiwgb3B0bGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGNvcHlfdG9fdXNlcihvcHR2YWwsICZ2YWwsIGxlbikpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRncmFtX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAorCQkJICAgIGNoYXIgX191c2VyICpvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pCit7CisJc3RydWN0IGRncmFtX3NvY2sgKnJvID0gZGdyYW1fc2soc2spOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKKwlpbnQgdmFsOworCWludCBlcnIgPSAwOworCisJaWYgKG9wdGxlbiA8IHNpemVvZihpbnQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChnZXRfdXNlcih2YWwsIChpbnQgX191c2VyICopb3B0dmFsKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlsb2NrX3NvY2soc2spOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBXUEFOX1dBTlRBQ0s6CisJCXJvLT53YW50X2FjayA9ICEhdmFsOworCQlicmVhazsKKwljYXNlIFdQQU5fU0VDVVJJVFk6CisJCWlmICghbnNfY2FwYWJsZShuZXQtPnVzZXJfbnMsIENBUF9ORVRfQURNSU4pICYmCisJCSAgICAhbnNfY2FwYWJsZShuZXQtPnVzZXJfbnMsIENBUF9ORVRfUkFXKSkgeworCQkJZXJyID0gLUVQRVJNOworCQkJYnJlYWs7CisJCX0KKworCQlzd2l0Y2ggKHZhbCkgeworCQljYXNlIFdQQU5fU0VDVVJJVFlfREVGQVVMVDoKKwkJCXJvLT5zZWNlbl9vdmVycmlkZSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBXUEFOX1NFQ1VSSVRZX09OOgorCQkJcm8tPnNlY2VuX292ZXJyaWRlID0gMTsKKwkJCXJvLT5zZWNlbiA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBXUEFOX1NFQ1VSSVRZX09GRjoKKwkJCXJvLT5zZWNlbl9vdmVycmlkZSA9IDE7CisJCQlyby0+c2VjZW4gPSAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQllcnIgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBXUEFOX1NFQ1VSSVRZX0xFVkVMOgorCQlpZiAoIW5zX2NhcGFibGUobmV0LT51c2VyX25zLCBDQVBfTkVUX0FETUlOKSAmJgorCQkgICAgIW5zX2NhcGFibGUobmV0LT51c2VyX25zLCBDQVBfTkVUX1JBVykpIHsKKwkJCWVyciA9IC1FUEVSTTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHZhbCA8IFdQQU5fU0VDVVJJVFlfTEVWRUxfREVGQVVMVCB8fAorCQkgICAgdmFsID4gSUVFRTgwMjE1NF9TQ0ZfU0VDTEVWRUxfRU5DX01JQzEyOCkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJfSBlbHNlIGlmICh2YWwgPT0gV1BBTl9TRUNVUklUWV9MRVZFTF9ERUZBVUxUKSB7CisJCQlyby0+c2VjbGV2ZWxfb3ZlcnJpZGUgPSAwOworCQl9IGVsc2UgeworCQkJcm8tPnNlY2xldmVsX292ZXJyaWRlID0gMTsKKwkJCXJvLT5zZWNsZXZlbCA9IHZhbDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIgPSAtRU5PUFJPVE9PUFQ7CisJCWJyZWFrOworCX0KKworCXJlbGVhc2Vfc29jayhzayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBwcm90byBpZWVlODAyMTU0X2RncmFtX3Byb3QgPSB7CisJLm5hbWUJCT0gIklFRUUtODAyLjE1LjQtTUFDIiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9ial9zaXplCT0gc2l6ZW9mKHN0cnVjdCBkZ3JhbV9zb2NrKSwKKwkuaW5pdAkJPSBkZ3JhbV9pbml0LAorCS5jbG9zZQkJPSBkZ3JhbV9jbG9zZSwKKwkuYmluZAkJPSBkZ3JhbV9iaW5kLAorCS5zZW5kbXNnCT0gZGdyYW1fc2VuZG1zZywKKwkucmVjdm1zZwk9IGRncmFtX3JlY3Ztc2csCisJLmhhc2gJCT0gZGdyYW1faGFzaCwKKwkudW5oYXNoCQk9IGRncmFtX3VuaGFzaCwKKwkuY29ubmVjdAk9IGRncmFtX2Nvbm5lY3QsCisJLmRpc2Nvbm5lY3QJPSBkZ3JhbV9kaXNjb25uZWN0LAorCS5pb2N0bAkJPSBkZ3JhbV9pb2N0bCwKKwkuZ2V0c29ja29wdAk9IGRncmFtX2dldHNvY2tvcHQsCisJLnNldHNvY2tvcHQJPSBkZ3JhbV9zZXRzb2Nrb3B0LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgaWVlZTgwMjE1NF9kZ3JhbV9vcHMgPSB7CisJLmZhbWlseQkJICAgPSBQRl9JRUVFODAyMTU0LAorCS5vd25lcgkJICAgPSBUSElTX01PRFVMRSwKKwkucmVsZWFzZQkgICA9IGllZWU4MDIxNTRfc29ja19yZWxlYXNlLAorCS5iaW5kCQkgICA9IGllZWU4MDIxNTRfc29ja19iaW5kLAorCS5jb25uZWN0CSAgID0gaWVlZTgwMjE1NF9zb2NrX2Nvbm5lY3QsCisJLnNvY2tldHBhaXIJICAgPSBzb2NrX25vX3NvY2tldHBhaXIsCisJLmFjY2VwdAkJICAgPSBzb2NrX25vX2FjY2VwdCwKKwkuZ2V0bmFtZQkgICA9IHNvY2tfbm9fZ2V0bmFtZSwKKwkucG9sbAkJICAgPSBkYXRhZ3JhbV9wb2xsLAorCS5pb2N0bAkJICAgPSBpZWVlODAyMTU0X3NvY2tfaW9jdGwsCisJLmxpc3RlbgkJICAgPSBzb2NrX25vX2xpc3RlbiwKKwkuc2h1dGRvd24JICAgPSBzb2NrX25vX3NodXRkb3duLAorCS5zZXRzb2Nrb3B0CSAgID0gc29ja19jb21tb25fc2V0c29ja29wdCwKKwkuZ2V0c29ja29wdAkgICA9IHNvY2tfY29tbW9uX2dldHNvY2tvcHQsCisJLnNlbmRtc2cJICAgPSBpZWVlODAyMTU0X3NvY2tfc2VuZG1zZywKKwkucmVjdm1zZwkgICA9IHNvY2tfY29tbW9uX3JlY3Ztc2csCisJLm1tYXAJCSAgID0gc29ja19ub19tbWFwLAorCS5zZW5kcGFnZQkgICA9IHNvY2tfbm9fc2VuZHBhZ2UsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAorCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorI2VuZGlmCit9OworCisvKiBDcmVhdGUgYSBzb2NrZXQuIEluaXRpYWxpc2UgdGhlIHNvY2tldCwgYmxhbmsgdGhlIGFkZHJlc3NlcworICogc2V0IHRoZSBzdGF0ZS4KKyAqLworc3RhdGljIGludCBpZWVlODAyMTU0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkgICAgIGludCBwcm90b2NvbCwgaW50IGtlcm4pCit7CisJc3RydWN0IHNvY2sgKnNrOworCWludCByYzsKKwlzdHJ1Y3QgcHJvdG8gKnByb3RvOworCWNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wczsKKworCWlmICghbmV0X2VxKG5ldCwgJmluaXRfbmV0KSkKKwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisKKwlzd2l0Y2ggKHNvY2stPnR5cGUpIHsKKwljYXNlIFNPQ0tfUkFXOgorCQlwcm90byA9ICZpZWVlODAyMTU0X3Jhd19wcm90OworCQlvcHMgPSAmaWVlZTgwMjE1NF9yYXdfb3BzOworCQlicmVhazsKKwljYXNlIFNPQ0tfREdSQU06CisJCXByb3RvID0gJmllZWU4MDIxNTRfZGdyYW1fcHJvdDsKKwkJb3BzID0gJmllZWU4MDIxNTRfZGdyYW1fb3BzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyYyA9IC1FU09DS1ROT1NVUFBPUlQ7CisJCWdvdG8gb3V0OworCX0KKworCXJjID0gLUVOT01FTTsKKwlzayA9IHNrX2FsbG9jKG5ldCwgUEZfSUVFRTgwMjE1NCwgR0ZQX0tFUk5FTCwgcHJvdG8pOworCWlmICghc2spCisJCWdvdG8gb3V0OworCXJjID0gMDsKKworCXNvY2stPm9wcyA9IG9wczsKKworCXNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTsKKwkvKiBGSVhNRTogc2stPnNrX2Rlc3RydWN0ICovCisJc2stPnNrX2ZhbWlseSA9IFBGX0lFRUU4MDIxNTQ7CisKKwkvKiBDaGVja3N1bXMgb24gYnkgZGVmYXVsdCAqLworCXNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTsKKworCWlmIChzay0+c2tfcHJvdC0+aGFzaCkKKwkJc2stPnNrX3Byb3QtPmhhc2goc2spOworCisJaWYgKHNrLT5za19wcm90LT5pbml0KSB7CisJCXJjID0gc2stPnNrX3Byb3QtPmluaXQoc2spOworCQlpZiAocmMpCisJCQlza19jb21tb25fcmVsZWFzZShzayk7CisJfQorb3V0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IGllZWU4MDIxNTRfZmFtaWx5X29wcyA9IHsKKwkuZmFtaWx5CQk9IFBGX0lFRUU4MDIxNTQsCisJLmNyZWF0ZQkJPSBpZWVlODAyMTU0X2NyZWF0ZSwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IGllZWU4MDIxNTRfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKK3sKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJZ290byBkcm9wOworCXByX2RlYnVnKCJnb3QgZnJhbWUsIHR5cGUgJWQsIGRldiAlcFxuIiwgZGV2LT50eXBlLCBkZXYpOworI2lmZGVmIERFQlVHCisJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoImllZWU4MDIxNTRfcmN2ICIsCisJCQkgICAgIERVTVBfUFJFRklYX05PTkUsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworI2VuZGlmCisKKwlpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksICZpbml0X25ldCkpCisJCWdvdG8gZHJvcDsKKworCWllZWU4MDIxNTRfcmF3X2RlbGl2ZXIoZGV2LCBza2IpOworCisJaWYgKGRldi0+dHlwZSAhPSBBUlBIUkRfSUVFRTgwMjE1NCkKKwkJZ290byBkcm9wOworCisJaWYgKHNrYi0+cGt0X3R5cGUgIT0gUEFDS0VUX09USEVSSE9TVCkKKwkJcmV0dXJuIGllZWU4MDIxNTRfZGdyYW1fZGVsaXZlcihkZXYsIHNrYik7CisKK2Ryb3A6CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVF9SWF9EUk9QOworfQorCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGllZWU4MDIxNTRfcGFja2V0X3R5cGUgPSB7CisJLnR5cGUgPSBodG9ucyhFVEhfUF9JRUVFODAyMTU0KSwKKwkuZnVuYyA9IGllZWU4MDIxNTRfcmN2LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYWZfaWVlZTgwMjE1NF9pbml0KHZvaWQpCit7CisJaW50IHJjID0gLUVJTlZBTDsKKworCXJjID0gcHJvdG9fcmVnaXN0ZXIoJmllZWU4MDIxNTRfcmF3X3Byb3QsIDEpOworCWlmIChyYykKKwkJZ290byBvdXQ7CisKKwlyYyA9IHByb3RvX3JlZ2lzdGVyKCZpZWVlODAyMTU0X2RncmFtX3Byb3QsIDEpOworCWlmIChyYykKKwkJZ290byBlcnJfZGdyYW07CisKKwkvKiBUZWxsIFNPQ0tFVCB0aGF0IHdlIGFyZSBhbGl2ZSAqLworCXJjID0gc29ja19yZWdpc3RlcigmaWVlZTgwMjE1NF9mYW1pbHlfb3BzKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX3NvY2s7CisJZGV2X2FkZF9wYWNrKCZpZWVlODAyMTU0X3BhY2tldF90eXBlKTsKKworCXJjID0gMDsKKwlnb3RvIG91dDsKKworZXJyX3NvY2s6CisJcHJvdG9fdW5yZWdpc3RlcigmaWVlZTgwMjE1NF9kZ3JhbV9wcm90KTsKK2Vycl9kZ3JhbToKKwlwcm90b191bnJlZ2lzdGVyKCZpZWVlODAyMTU0X3Jhd19wcm90KTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZl9pZWVlODAyMTU0X3JlbW92ZSh2b2lkKQoreworCWRldl9yZW1vdmVfcGFjaygmaWVlZTgwMjE1NF9wYWNrZXRfdHlwZSk7CisJc29ja191bnJlZ2lzdGVyKFBGX0lFRUU4MDIxNTQpOworCXByb3RvX3VucmVnaXN0ZXIoJmllZWU4MDIxNTRfZGdyYW1fcHJvdCk7CisJcHJvdG9fdW5yZWdpc3RlcigmaWVlZTgwMjE1NF9yYXdfcHJvdCk7Cit9CisKK21vZHVsZV9pbml0KGFmX2llZWU4MDIxNTRfaW5pdCk7Cittb2R1bGVfZXhpdChhZl9pZWVlODAyMTU0X3JlbW92ZSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19ORVRQUk9UTyhQRl9JRUVFODAyMTU0KTsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTU0L3N5c2ZzLmMgYi9uZXQvaWVlZTgwMjE1NC9zeXNmcy5jCmluZGV4IDE2MTNiOWMuLmRmZjU1YzIgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTU0L3N5c2ZzLmMKKysrIGIvbmV0L2llZWU4MDIxNTQvc3lzZnMuYwpAQCAtNjgsNyArNjgsNyBAQAogTUFTVEVSX1NIT1coY3VycmVudF9jaGFubmVsLCAiJWQiKTsKIE1BU1RFUl9TSE9XKGN1cnJlbnRfcGFnZSwgIiVkIik7CiBNQVNURVJfU0hPVyh0cmFuc21pdF9wb3dlciwgIiVkICstIDEgZEIiKTsKLU1BU1RFUl9TSE9XKGNjYV9tb2RlLCAiJWQiKTsKK01BU1RFUl9TSE9XX0NPTVBMRVgoY2NhX21vZGUsICIlZCIsIHBoeS0+Y2NhLm1vZGUpOwogCiBzdGF0aWMgc3NpemVfdCBjaGFubmVsc19zdXBwb3J0ZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IGE0NDc3M2MuLmQyZTQ5YmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTM5NSw4ICszOTUsNiBAQAogCWlmIChzaykgewogCQlsb25nIHRpbWVvdXQ7CiAKLQkJc29ja19ycHNfcmVzZXRfZmxvdyhzayk7Ci0KIAkJLyogQXBwbGljYXRpb25zIGZvcmdldCB0byBsZWF2ZSBncm91cHMgYmVmb3JlIGV4aXRpbmcgKi8KIAkJaXBfbWNfZHJvcF9zb2NrZXQoc2spOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9jaXBzb19pcHY0LmMgYi9uZXQvaXB2NC9jaXBzb19pcHY0LmMKaW5kZXggNTE2MGM3MS4uZTM2MWVhNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvY2lwc29faXB2NC5jCisrKyBiL25ldC9pcHY0L2NpcHNvX2lwdjQuYwpAQCAtMzc4LDIwICszNzgsMTggQEAKICAqIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgogICoKICAqLwotaW50IGNpcHNvX3Y0X2NhY2hlX2FkZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoraW50IGNpcHNvX3Y0X2NhY2hlX2FkZChjb25zdCB1bnNpZ25lZCBjaGFyICpjaXBzb19wdHIsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogewogCWludCByZXRfdmFsID0gLUVQRVJNOwogCXUzMiBia3Q7CiAJc3RydWN0IGNpcHNvX3Y0X21hcF9jYWNoZV9lbnRyeSAqZW50cnkgPSBOVUxMOwogCXN0cnVjdCBjaXBzb192NF9tYXBfY2FjaGVfZW50cnkgKm9sZF9lbnRyeSA9IE5VTEw7Ci0JdW5zaWduZWQgY2hhciAqY2lwc29fcHRyOwogCXUzMiBjaXBzb19wdHJfbGVuOwogCiAJaWYgKCFjaXBzb192NF9jYWNoZV9lbmFibGVkIHx8IGNpcHNvX3Y0X2NhY2hlX2J1Y2tldHNpemUgPD0gMCkKIAkJcmV0dXJuIDA7CiAKLQljaXBzb19wdHIgPSBDSVBTT19WNF9PUFRQVFIoc2tiKTsKIAljaXBzb19wdHJfbGVuID0gY2lwc29fcHRyWzFdOwogCiAJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfQVRPTUlDKTsKQEAgLTE1NzksNiArMTU3NywzMyBAQAogfQogCiAvKioKKyAqIGNpcHNvX3Y0X29wdHB0ciAtIEZpbmQgdGhlIENJUFNPIG9wdGlvbiBpbiB0aGUgcGFja2V0CisgKiBAc2tiOiB0aGUgcGFja2V0CisgKgorICogRGVzY3JpcHRpb246CisgKiBQYXJzZSB0aGUgcGFja2V0J3MgSVAgaGVhZGVyIGxvb2tpbmcgZm9yIGEgQ0lQU08gb3B0aW9uLiAgUmV0dXJucyBhIHBvaW50ZXIKKyAqIHRvIHRoZSBzdGFydCBvZiB0aGUgQ0lQU08gb3B0aW9uIG9uIHN1Y2Nlc3MsIE5VTEwgaWYgb25lIGlmIG5vdCBmb3VuZC4KKyAqCisgKi8KK3Vuc2lnbmVkIGNoYXIgKmNpcHNvX3Y0X29wdHB0cihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKHNrYik7CisJdW5zaWduZWQgY2hhciAqb3B0cHRyID0gKHVuc2lnbmVkIGNoYXIgKikmKGlwX2hkcihza2IpWzFdKTsKKwlpbnQgb3B0bGVuOworCWludCB0YWdsZW47CisKKwlmb3IgKG9wdGxlbiA9IGlwaC0+aWhsKjQgLSBzaXplb2Yoc3RydWN0IGlwaGRyKTsgb3B0bGVuID4gMDsgKSB7CisJCWlmIChvcHRwdHJbMF0gPT0gSVBPUFRfQ0lQU08pCisJCQlyZXR1cm4gb3B0cHRyOworCQl0YWdsZW4gPSBvcHRwdHJbMV07CisJCW9wdGxlbiAtPSB0YWdsZW47CisJCW9wdHB0ciArPSB0YWdsZW47CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgogICogY2lwc29fdjRfdmFsaWRhdGUgLSBWYWxpZGF0ZSBhIENJUFNPIG9wdGlvbgogICogQG9wdGlvbjogdGhlIHN0YXJ0IG9mIHRoZSBvcHRpb24sIG9uIGVycm9yIGl0IGlzIHNldCB0byBwb2ludCB0byB0aGUgZXJyb3IKICAqCkBAIC0yMTE5LDggKzIxNDQsOCBAQAogICogb24gc3VjY2VzcyBhbmQgbmVnYXRpdmUgdmFsdWVzIG9uIGZhaWx1cmUuCiAgKgogICovCi1zdGF0aWMgaW50IGNpcHNvX3Y0X2dldGF0dHIoY29uc3QgdW5zaWduZWQgY2hhciAqY2lwc28sCi0JCQkgICAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKK2ludCBjaXBzb192NF9nZXRhdHRyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNpcHNvLAorCQkgICAgIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHIgKnNlY2F0dHIpCiB7CiAJaW50IHJldF92YWwgPSAtRU5PTVNHOwogCXUzMiBkb2k7CkBAIC0yMzA1LDIyICsyMzMwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqCi0gKiBjaXBzb192NF9za2J1ZmZfZ2V0YXR0ciAtIEdldCB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcyBmcm9tIHRoZSBDSVBTTyBvcHRpb24KLSAqIEBza2I6IHRoZSBwYWNrZXQKLSAqIEBzZWNhdHRyOiB0aGUgc2VjdXJpdHkgYXR0cmlidXRlcwotICoKLSAqIERlc2NyaXB0aW9uOgotICogUGFyc2UgdGhlIGdpdmVuIHBhY2tldCdzIENJUFNPIG9wdGlvbiBhbmQgcmV0dXJuIHRoZSBzZWN1cml0eSBhdHRyaWJ1dGVzLgotICogUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgotICoKLSAqLwotaW50IGNpcHNvX3Y0X3NrYnVmZl9nZXRhdHRyKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKLXsKLQlyZXR1cm4gY2lwc29fdjRfZ2V0YXR0cihDSVBTT19WNF9PUFRQVFIoc2tiKSwgc2VjYXR0cik7Ci19Ci0KIC8qCiAgKiBTZXR1cCBGdW5jdGlvbnMKICAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGV2aW5ldC5jIGIvbmV0L2lwdjQvZGV2aW5ldC5jCmluZGV4IDIxNDg4MmUuLmYwYjRhMzFkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC0xNTIyLDcgKzE1MjIsOCBAQAogCQkJICBwcmVmZXJyZWQsIHZhbGlkKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKQEAgLTE1NjYsNyArMTU2Nyw3IEBACiAJCQkJaWYgKGluZXRfZmlsbF9pZmFkZHIoc2tiLCBpZmEsCiAJCQkJCSAgICAgTkVUTElOS19DQihjYi0+c2tiKS5wb3J0aWQsCiAJCQkJCSAgICAgY2ItPm5saC0+bmxtc2dfc2VxLAotCQkJCQkgICAgIFJUTV9ORVdBRERSLCBOTE1fRl9NVUxUSSkgPD0gMCkgeworCQkJCQkgICAgIFJUTV9ORVdBRERSLCBOTE1fRl9NVUxUSSkgPCAwKSB7CiAJCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCQlnb3RvIGRvbmU7CiAJCQkJfQpAQCAtMTc0OSw3ICsxNzUwLDggQEAKIAkJCUlQVjRfREVWQ09ORigqZGV2Y29uZiwgUFJPWFlfQVJQKSkgPCAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiAKIG5sYV9wdXRfZmFpbHVyZToKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwpAQCAtMTg4MSw3ICsxODgzLDcgQEAKIAkJCQkJCSAgICAgIGNiLT5ubGgtPm5sbXNnX3NlcSwKIAkJCQkJCSAgICAgIFJUTV9ORVdORVRDT05GLAogCQkJCQkJICAgICAgTkxNX0ZfTVVMVEksCi0JCQkJCQkgICAgICAtMSkgPD0gMCkgeworCQkJCQkJICAgICAgLTEpIDwgMCkgewogCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KQEAgLTE4OTcsNyArMTg5OSw3IEBACiAJCQkJCSAgICAgIE5FVExJTktfQ0IoY2ItPnNrYikucG9ydGlkLAogCQkJCQkgICAgICBjYi0+bmxoLT5ubG1zZ19zZXEsCiAJCQkJCSAgICAgIFJUTV9ORVdORVRDT05GLCBOTE1fRl9NVUxUSSwKLQkJCQkJICAgICAgLTEpIDw9IDApCisJCQkJCSAgICAgIC0xKSA8IDApCiAJCQlnb3RvIGRvbmU7CiAJCWVsc2UKIAkJCWgrKzsKQEAgLTE5MDgsNyArMTkxMCw3IEBACiAJCQkJCSAgICAgIE5FVExJTktfQ0IoY2ItPnNrYikucG9ydGlkLAogCQkJCQkgICAgICBjYi0+bmxoLT5ubG1zZ19zZXEsCiAJCQkJCSAgICAgIFJUTV9ORVdORVRDT05GLCBOTE1fRl9NVUxUSSwKLQkJCQkJICAgICAgLTEpIDw9IDApCisJCQkJCSAgICAgIC0xKSA8IDApCiAJCQlnb3RvIGRvbmU7CiAJCWVsc2UKIAkJCWgrKzsKQEAgLTIzMjAsNyArMjMyMiw3IEBACiAJLmV4aXQgPSBkZXZpbmV0X2V4aXRfbmV0LAogfTsKIAotc3RhdGljIHN0cnVjdCBydG5sX2FmX29wcyBpbmV0X2FmX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcnRubF9hZl9vcHMgaW5ldF9hZl9vcHMgX19yZWFkX21vc3RseSA9IHsKIAkuZmFtaWx5CQkgID0gQUZfSU5FVCwKIAkuZmlsbF9saW5rX2FmCSAgPSBpbmV0X2ZpbGxfbGlua19hZiwKIAkuZ2V0X2xpbmtfYWZfc2l6ZSA9IGluZXRfZ2V0X2xpbmtfYWZfc2l6ZSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKaW5kZXggMjMxMDRhMy4uNTdiZTcxZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKKysrIGIvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAlyZXR1cm4gMDsKIAogZmFpbDoKLQlrZnJlZShsb2NhbF90YWJsZSk7CisJZmliX2ZyZWVfdGFibGUobG9jYWxfdGFibGUpOwogCXJldHVybiAtRU5PTUVNOwogfQogI2Vsc2UKQEAgLTEwOSw2ICsxMDksNyBAQAogCXJldHVybiB0YjsKIH0KIAorLyogY2FsbGVyIG11c3QgaG9sZCBlaXRoZXIgcnRubCBvciByY3UgcmVhZCBsb2NrICovCiBzdHJ1Y3QgZmliX3RhYmxlICpmaWJfZ2V0X3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGlkKQogewogCXN0cnVjdCBmaWJfdGFibGUgKnRiOwpAQCAtMTE5LDE1ICsxMjAsMTEgQEAKIAkJaWQgPSBSVF9UQUJMRV9NQUlOOwogCWggPSBpZCAmIChGSUJfVEFCTEVfSEFTSFNaIC0gMSk7CiAKLQlyY3VfcmVhZF9sb2NrKCk7CiAJaGVhZCA9ICZuZXQtPmlwdjQuZmliX3RhYmxlX2hhc2hbaF07CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRiLCBoZWFkLCB0Yl9obGlzdCkgewotCQlpZiAodGItPnRiX2lkID09IGlkKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJaWYgKHRiLT50Yl9pZCA9PSBpZCkKIAkJCXJldHVybiB0YjsKLQkJfQogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gTlVMTDsKIH0KICNlbmRpZiAvKiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTICovCkBAIC0xNjcsMTYgKzE2NCwxOCBAQAogCWlmIChpcHY0X2lzX211bHRpY2FzdChhZGRyKSkKIAkJcmV0dXJuIFJUTl9NVUxUSUNBU1Q7CiAKKwlyY3VfcmVhZF9sb2NrKCk7CisKIAlsb2NhbF90YWJsZSA9IGZpYl9nZXRfdGFibGUobmV0LCBSVF9UQUJMRV9MT0NBTCk7CiAJaWYgKGxvY2FsX3RhYmxlKSB7CiAJCXJldCA9IFJUTl9VTklDQVNUOwotCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWlmICghZmliX3RhYmxlX2xvb2t1cChsb2NhbF90YWJsZSwgJmZsNCwgJnJlcywgRklCX0xPT0tVUF9OT1JFRikpIHsKIAkJCWlmICghZGV2IHx8IGRldiA9PSByZXMuZmktPmZpYl9kZXYpCiAJCQkJcmV0ID0gcmVzLnR5cGU7CiAJCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQorCisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTE5LDcgKzkxOCw3IEBACiAjdW5kZWYgQlJEMV9PSwogfQogCi1zdGF0aWMgdm9pZCBubF9maWJfbG9va3VwKHN0cnVjdCBmaWJfcmVzdWx0X25sICpmcm4sIHN0cnVjdCBmaWJfdGFibGUgKnRiKQorc3RhdGljIHZvaWQgbmxfZmliX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBmaWJfcmVzdWx0X25sICpmcm4pCiB7CiAKIAlzdHJ1Y3QgZmliX3Jlc3VsdCAgICAgICByZXM7CkBAIC05MjksNiArOTI4LDExIEBACiAJCS5mbG93aTRfdG9zID0gZnJuLT5mbF90b3MsCiAJCS5mbG93aTRfc2NvcGUgPSBmcm4tPmZsX3Njb3BlLAogCX07CisJc3RydWN0IGZpYl90YWJsZSAqdGI7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwl0YiA9IGZpYl9nZXRfdGFibGUobmV0LCBmcm4tPnRiX2lkX2luKTsKIAogCWZybi0+ZXJyID0gLUVOT0VOVDsKIAlpZiAodGIpIHsKQEAgLTk0NSw2ICs5NDksOCBAQAogCQl9CiAJCWxvY2FsX2JoX2VuYWJsZSgpOwogCX0KKworCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgdm9pZCBubF9maWJfaW5wdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTk1Miw3ICs5NTgsNiBAQAogCXN0cnVjdCBuZXQgKm5ldDsKIAlzdHJ1Y3QgZmliX3Jlc3VsdF9ubCAqZnJuOwogCXN0cnVjdCBubG1zZ2hkciAqbmxoOwotCXN0cnVjdCBmaWJfdGFibGUgKnRiOwogCXUzMiBwb3J0aWQ7CiAKIAluZXQgPSBzb2NrX25ldChza2ItPnNrKTsKQEAgLTk2Nyw5ICs5NzIsNyBAQAogCW5saCA9IG5sbXNnX2hkcihza2IpOwogCiAJZnJuID0gKHN0cnVjdCBmaWJfcmVzdWx0X25sICopIG5sbXNnX2RhdGEobmxoKTsKLQl0YiA9IGZpYl9nZXRfdGFibGUobmV0LCBmcm4tPnRiX2lkX2luKTsKLQotCW5sX2ZpYl9sb29rdXAoZnJuLCB0Yik7CisJbmxfZmliX2xvb2t1cChuZXQsIGZybik7CiAKIAlwb3J0aWQgPSBORVRMSU5LX0NCKHNrYikucG9ydGlkOyAgICAgIC8qIG5ldGxpbmsgcG9ydGlkICovCiAJTkVUTElOS19DQihza2IpLnBvcnRpZCA9IDA7ICAgICAgICAvKiBmcm9tIGtlcm5lbCAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2xvb2t1cC5oIGIvbmV0L2lwdjQvZmliX2xvb2t1cC5oCmluZGV4IDFlNGY2NjAuLjgyNTk4MWIxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfbG9va3VwLmgKKysrIGIvbmV0L2lwdjQvZmliX2xvb2t1cC5oCkBAIC0zMiw3ICszMiw2IEBACiAJCSAgdW5zaWduZWQgaW50KTsKIHZvaWQgcnRtc2dfZmliKGludCBldmVudCwgX19iZTMyIGtleSwgc3RydWN0IGZpYl9hbGlhcyAqZmEsIGludCBkc3RfbGVuLAogCSAgICAgICB1MzIgdGJfaWQsIGNvbnN0IHN0cnVjdCBubF9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgbmxtX2ZsYWdzKTsKLXN0cnVjdCBmaWJfYWxpYXMgKmZpYl9maW5kX2FsaWFzKHN0cnVjdCBsaXN0X2hlYWQgKmZhaCwgdTggdG9zLCB1MzIgcHJpbyk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWJfcmVzdWx0X2Fzc2lnbihzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLAogCQkJCSAgICAgc3RydWN0IGZpYl9pbmZvICpmaSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9ydWxlcy5jIGIvbmV0L2lwdjQvZmliX3J1bGVzLmMKaW5kZXggOGY3YmQ1Ni4uZDNkYjcxOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3J1bGVzLmMKKysrIGIvbmV0L2lwdjQvZmliX3J1bGVzLmMKQEAgLTgxLDI3ICs4MSwyNSBAQAogCQlicmVhazsKIAogCWNhc2UgRlJfQUNUX1VOUkVBQ0hBQkxFOgotCQllcnIgPSAtRU5FVFVOUkVBQ0g7Ci0JCWdvdG8gZXJyb3V0OworCQlyZXR1cm4gLUVORVRVTlJFQUNIOwogCiAJY2FzZSBGUl9BQ1RfUFJPSElCSVQ6Ci0JCWVyciA9IC1FQUNDRVM7Ci0JCWdvdG8gZXJyb3V0OworCQlyZXR1cm4gLUVBQ0NFUzsKIAogCWNhc2UgRlJfQUNUX0JMQUNLSE9MRToKIAlkZWZhdWx0OgotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycm91dDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JdGJsID0gZmliX2dldF90YWJsZShydWxlLT5mcl9uZXQsIHJ1bGUtPnRhYmxlKTsKLQlpZiAoIXRibCkKLQkJZ290byBlcnJvdXQ7CisJcmN1X3JlYWRfbG9jaygpOwogCi0JZXJyID0gZmliX3RhYmxlX2xvb2t1cCh0YmwsICZmbHAtPnUuaXA0LCAoc3RydWN0IGZpYl9yZXN1bHQgKikgYXJnLT5yZXN1bHQsIGFyZy0+ZmxhZ3MpOwotCWlmIChlcnIgPiAwKQotCQllcnIgPSAtRUFHQUlOOwotZXJyb3V0OgorCXRibCA9IGZpYl9nZXRfdGFibGUocnVsZS0+ZnJfbmV0LCBydWxlLT50YWJsZSk7CisJaWYgKHRibCkKKwkJZXJyID0gZmliX3RhYmxlX2xvb2t1cCh0YmwsICZmbHAtPnUuaXA0LAorCQkJCSAgICAgICAoc3RydWN0IGZpYl9yZXN1bHQgKilhcmctPnJlc3VsdCwKKwkJCQkgICAgICAgYXJnLT5mbGFncyk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKaW5kZXggZjk5ZjQxYi4uMWUyMDkwZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtMzYwLDcgKzM2MCw4IEBACiAJCQkgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfVEFCTEUgKi8KIAkJCSArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9EU1QgKi8KIAkJCSArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9QUklPUklUWSAqLwotCQkJICsgbmxhX3RvdGFsX3NpemUoNCk7IC8qIFJUQV9QUkVGU1JDICovCisJCQkgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBSVEFfUFJFRlNSQyAqLworCQkJICsgbmxhX3RvdGFsX3NpemUoVENQX0NBX05BTUVfTUFYKTsgLyogUlRBWF9DQ19BTEdPICovCiAKIAkvKiBzcGFjZSBmb3IgbmVzdGVkIG1ldHJpY3MgKi8KIAlwYXlsb2FkICs9IG5sYV90b3RhbF9zaXplKChSVEFYX01BWCAqIG5sYV90b3RhbF9zaXplKDQpKSk7CkBAIC00MTAsMjQgKzQxMSw2IEBACiAJCXJ0bmxfc2V0X3NrX2VycihpbmZvLT5ubF9uZXQsIFJUTkxHUlBfSVBWNF9ST1VURSwgZXJyKTsKIH0KIAotLyogUmV0dXJuIHRoZSBmaXJzdCBmaWIgYWxpYXMgbWF0Y2hpbmcgVE9TIHdpdGgKLSAqIHByaW9yaXR5IGxlc3MgdGhhbiBvciBlcXVhbCB0byBQUklPLgotICovCi1zdHJ1Y3QgZmliX2FsaWFzICpmaWJfZmluZF9hbGlhcyhzdHJ1Y3QgbGlzdF9oZWFkICpmYWgsIHU4IHRvcywgdTMyIHByaW8pCi17Ci0JaWYgKGZhaCkgewotCQlzdHJ1Y3QgZmliX2FsaWFzICpmYTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShmYSwgZmFoLCBmYV9saXN0KSB7Ci0JCQlpZiAoZmEtPmZhX3RvcyA+IHRvcykKLQkJCQljb250aW51ZTsKLQkJCWlmIChmYS0+ZmFfaW5mby0+ZmliX3ByaW9yaXR5ID49IHByaW8gfHwKLQkJCSAgICBmYS0+ZmFfdG9zIDwgdG9zKQotCQkJCXJldHVybiBmYTsKLQkJfQotCX0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGludCBmaWJfZGV0ZWN0X2RlYXRoKHN0cnVjdCBmaWJfaW5mbyAqZmksIGludCBvcmRlciwKIAkJCSAgICBzdHJ1Y3QgZmliX2luZm8gKipsYXN0X3Jlc29ydCwgaW50ICpsYXN0X2lkeCwKIAkJCSAgICBpbnQgZGZsdCkKQEAgLTg1OSw3ICs4NDIsMTYgQEAKIAogCQkJCWlmICh0eXBlID4gUlRBWF9NQVgpCiAJCQkJCWdvdG8gZXJyX2ludmFsOwotCQkJCXZhbCA9IG5sYV9nZXRfdTMyKG5sYSk7CisJCQkJaWYgKHR5cGUgPT0gUlRBWF9DQ19BTEdPKSB7CisJCQkJCWNoYXIgdG1wW1RDUF9DQV9OQU1FX01BWF07CisKKwkJCQkJbmxhX3N0cmxjcHkodG1wLCBubGEsIHNpemVvZih0bXApKTsKKwkJCQkJdmFsID0gdGNwX2NhX2dldF9rZXlfYnlfbmFtZSh0bXApOworCQkJCQlpZiAodmFsID09IFRDUF9DQV9VTlNQRUMpCisJCQkJCQlnb3RvIGVycl9pbnZhbDsKKwkJCQl9IGVsc2UgeworCQkJCQl2YWwgPSBubGFfZ2V0X3UzMihubGEpOworCQkJCX0KIAkJCQlpZiAodHlwZSA9PSBSVEFYX0FEVk1TUyAmJiB2YWwgPiA2NTUzNSAtIDQwKQogCQkJCQl2YWwgPSA2NTUzNSAtIDQwOwogCQkJCWlmICh0eXBlID09IFJUQVhfTVRVICYmIHZhbCA+IDY1NTM1IC0gMTUpCkBAIC0xMDgxLDcgKzEwNzMsOCBAQAogCQlubGFfbmVzdF9lbmQoc2tiLCBtcCk7CiAJfQogI2VuZGlmCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIAogbmxhX3B1dF9mYWlsdXJlOgogCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfdHJpZS5jIGIvbmV0L2lwdjQvZmliX3RyaWUuYwppbmRleCAxOGJjYWYyLi4zZGFmMDIyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfdHJpZS5jCisrKyBiL25ldC9pcHY0L2ZpYl90cmllLmMKQEAgLTgzLDI4ICs4MywzMyBAQAogCiAjZGVmaW5lIE1BWF9TVEFUX0RFUFRIIDMyCiAKLSNkZWZpbmUgS0VZTEVOR1RIICg4KnNpemVvZih0X2tleSkpCisjZGVmaW5lIEtFWUxFTkdUSAkoOCpzaXplb2YodF9rZXkpKQorI2RlZmluZSBLRVlfTUFYCQkoKHRfa2V5KX4wKQogCiB0eXBlZGVmIHVuc2lnbmVkIGludCB0X2tleTsKIAotI2RlZmluZSBUX1ROT0RFIDAKLSNkZWZpbmUgVF9MRUFGICAxCi0jZGVmaW5lIE5PREVfVFlQRV9NQVNLCTB4MVVMCi0jZGVmaW5lIE5PREVfVFlQRShub2RlKSAoKG5vZGUpLT5wYXJlbnQgJiBOT0RFX1RZUEVfTUFTSykKKyNkZWZpbmUgSVNfVE5PREUobikgKChuKS0+Yml0cykKKyNkZWZpbmUgSVNfTEVBRihuKSAoIShuKS0+Yml0cykKIAotI2RlZmluZSBJU19UTk9ERShuKSAoIShuLT5wYXJlbnQgJiBUX0xFQUYpKQotI2RlZmluZSBJU19MRUFGKG4pIChuLT5wYXJlbnQgJiBUX0xFQUYpCisjZGVmaW5lIGdldF9pbmRleChfa2V5LCBfa3YpICgoKF9rZXkpIF4gKF9rdiktPmtleSkgPj4gKF9rdiktPnBvcykKIAotc3RydWN0IHJ0X3RyaWVfbm9kZSB7Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnQ7CitzdHJ1Y3QgdG5vZGUgewogCXRfa2V5IGtleTsKLX07Ci0KLXN0cnVjdCBsZWFmIHsKLQl1bnNpZ25lZCBsb25nIHBhcmVudDsKLQl0X2tleSBrZXk7Ci0Jc3RydWN0IGhsaXN0X2hlYWQgbGlzdDsKKwl1bnNpZ25lZCBjaGFyIGJpdHM7CQkvKiAybG9nKEtFWUxFTkdUSCkgYml0cyBuZWVkZWQgKi8KKwl1bnNpZ25lZCBjaGFyIHBvczsJCS8qIDJsb2coS0VZTEVOR1RIKSBiaXRzIG5lZWRlZCAqLworCXVuc2lnbmVkIGNoYXIgc2xlbjsKKwlzdHJ1Y3QgdG5vZGUgX19yY3UgKnBhcmVudDsKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1OworCXVuaW9uIHsKKwkJLyogVGhlIGZpZWxkcyBpbiB0aGlzIHN0cnVjdCBhcmUgdmFsaWQgaWYgYml0cyA+IDAgKFROT0RFKSAqLworCQlzdHJ1Y3QgeworCQkJdF9rZXkgZW1wdHlfY2hpbGRyZW47IC8qIEtFWUxFTkdUSCBiaXRzIG5lZWRlZCAqLworCQkJdF9rZXkgZnVsbF9jaGlsZHJlbjsgIC8qIEtFWUxFTkdUSCBiaXRzIG5lZWRlZCAqLworCQkJc3RydWN0IHRub2RlIF9fcmN1ICpjaGlsZFswXTsKKwkJfTsKKwkJLyogVGhpcyBsaXN0IHBvaW50ZXIgaWYgdmFsaWQgaWYgYml0cyA9PSAwIChMRUFGKSAqLworCQlzdHJ1Y3QgaGxpc3RfaGVhZCBsaXN0OworCX07CiB9OwogCiBzdHJ1Y3QgbGVhZl9pbmZvIHsKQEAgLTExNSwyMCArMTIwLDYgQEAKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogfTsKIAotc3RydWN0IHRub2RlIHsKLQl1bnNpZ25lZCBsb25nIHBhcmVudDsKLQl0X2tleSBrZXk7Ci0JdW5zaWduZWQgY2hhciBwb3M7CQkvKiAybG9nKEtFWUxFTkdUSCkgYml0cyBuZWVkZWQgKi8KLQl1bnNpZ25lZCBjaGFyIGJpdHM7CQkvKiAybG9nKEtFWUxFTkdUSCkgYml0cyBuZWVkZWQgKi8KLQl1bnNpZ25lZCBpbnQgZnVsbF9jaGlsZHJlbjsJLyogS0VZTEVOR1RIIGJpdHMgbmVlZGVkICovCi0JdW5zaWduZWQgaW50IGVtcHR5X2NoaWxkcmVuOwkvKiBLRVlMRU5HVEggYml0cyBuZWVkZWQgKi8KLQl1bmlvbiB7Ci0JCXN0cnVjdCByY3VfaGVhZCByY3U7Ci0JCXN0cnVjdCB0bm9kZSAqdG5vZGVfZnJlZTsKLQl9OwotCXN0cnVjdCBydF90cmllX25vZGUgX19yY3UgKmNoaWxkWzBdOwotfTsKLQogI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUwogc3RydWN0IHRyaWVfdXNlX3N0YXRzIHsKIAl1bnNpZ25lZCBpbnQgZ2V0czsKQEAgLTE1MSwxOSArMTQyLDEzIEBACiB9OwogCiBzdHJ1Y3QgdHJpZSB7Ci0Jc3RydWN0IHJ0X3RyaWVfbm9kZSBfX3JjdSAqdHJpZTsKKwlzdHJ1Y3QgdG5vZGUgX19yY3UgKnRyaWU7CiAjaWZkZWYgQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTCi0Jc3RydWN0IHRyaWVfdXNlX3N0YXRzIHN0YXRzOworCXN0cnVjdCB0cmllX3VzZV9zdGF0cyBfX3BlcmNwdSAqc3RhdHM7CiAjZW5kaWYKIH07CiAKLXN0YXRpYyB2b2lkIHRub2RlX3B1dF9jaGlsZF9yZW9yZyhzdHJ1Y3QgdG5vZGUgKnRuLCBpbnQgaSwgc3RydWN0IHJ0X3RyaWVfbm9kZSAqbiwKLQkJCQkgIGludCB3YXNmdWxsKTsKLXN0YXRpYyBzdHJ1Y3QgcnRfdHJpZV9ub2RlICpyZXNpemUoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCB0bm9kZSAqdG4pOwotc3RhdGljIHN0cnVjdCB0bm9kZSAqaW5mbGF0ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IHRub2RlICp0bik7Ci1zdGF0aWMgc3RydWN0IHRub2RlICpoYWx2ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IHRub2RlICp0bik7Ci0vKiB0bm9kZXMgdG8gZnJlZSBhZnRlciByZXNpemUoKTsgcHJvdGVjdGVkIGJ5IFJUTkwgKi8KLXN0YXRpYyBzdHJ1Y3QgdG5vZGUgKnRub2RlX2ZyZWVfaGVhZDsKK3N0YXRpYyB2b2lkIHJlc2l6ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IHRub2RlICp0bik7CiBzdGF0aWMgc2l6ZV90IHRub2RlX2ZyZWVfc2l6ZTsKIAogLyoKQEAgLTE3NiwxNzAgKzE2MSwxMDEgQEAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZm5fYWxpYXNfa21lbSBfX3JlYWRfbW9zdGx5Owogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp0cmllX2xlYWZfa21lbSBfX3JlYWRfbW9zdGx5OwogCi0vKgotICogY2FsbGVyIG11c3QgaG9sZCBSVE5MCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRub2RlICpub2RlX3BhcmVudChjb25zdCBzdHJ1Y3QgcnRfdHJpZV9ub2RlICpub2RlKQorLyogY2FsbGVyIG11c3QgaG9sZCBSVE5MICovCisjZGVmaW5lIG5vZGVfcGFyZW50KG4pIHJ0bmxfZGVyZWZlcmVuY2UoKG4pLT5wYXJlbnQpCisKKy8qIGNhbGxlciBtdXN0IGhvbGQgUkNVIHJlYWQgbG9jayBvciBSVE5MICovCisjZGVmaW5lIG5vZGVfcGFyZW50X3JjdShuKSByY3VfZGVyZWZlcmVuY2VfcnRubCgobiktPnBhcmVudCkKKworLyogd3JhcHBlciBmb3IgcmN1X2Fzc2lnbl9wb2ludGVyICovCitzdGF0aWMgaW5saW5lIHZvaWQgbm9kZV9zZXRfcGFyZW50KHN0cnVjdCB0bm9kZSAqbiwgc3RydWN0IHRub2RlICp0cCkKIHsKLQl1bnNpZ25lZCBsb25nIHBhcmVudDsKLQotCXBhcmVudCA9IHJjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjayhub2RlLT5wYXJlbnQsIGxvY2tkZXBfcnRubF9pc19oZWxkKCkpOwotCi0JcmV0dXJuIChzdHJ1Y3QgdG5vZGUgKikocGFyZW50ICYgfk5PREVfVFlQRV9NQVNLKTsKKwlpZiAobikKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKG4tPnBhcmVudCwgdHApOwogfQogCi0vKgotICogY2FsbGVyIG11c3QgaG9sZCBSQ1UgcmVhZCBsb2NrIG9yIFJUTkwKKyNkZWZpbmUgTk9ERV9JTklUX1BBUkVOVChuLCBwKSBSQ1VfSU5JVF9QT0lOVEVSKChuKS0+cGFyZW50LCBwKQorCisvKiBUaGlzIHByb3ZpZGVzIHVzIHdpdGggdGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIG5vZGUsIGluIHRoZSBjYXNlIG9mIGEKKyAqIGxlYWYgdGhpcyB3aWxsIHJldHVybiAwIG1lYW5pbmcgbm9uZSBvZiB0aGUgY2hpbGRyZW4gYXJlIGFjY2Vzc2libGUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRub2RlICpub2RlX3BhcmVudF9yY3UoY29uc3Qgc3RydWN0IHJ0X3RyaWVfbm9kZSAqbm9kZSkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0bm9kZV9jaGlsZF9sZW5ndGgoY29uc3Qgc3RydWN0IHRub2RlICp0bikKIHsKLQl1bnNpZ25lZCBsb25nIHBhcmVudDsKLQotCXBhcmVudCA9IHJjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjayhub2RlLT5wYXJlbnQsIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8Ci0JCQkJCQkJICAgbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSk7Ci0KLQlyZXR1cm4gKHN0cnVjdCB0bm9kZSAqKShwYXJlbnQgJiB+Tk9ERV9UWVBFX01BU0spOworCXJldHVybiAoMXVsIDw8IHRuLT5iaXRzKSAmIH4oMXVsKTsKIH0KIAotLyogU2FtZSBhcyByY3VfYXNzaWduX3BvaW50ZXIKLSAqIGJ1dCB0aGF0IG1hY3JvKCkgYXNzdW1lcyB0aGF0IHZhbHVlIGlzIGEgcG9pbnRlci4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIG5vZGVfc2V0X3BhcmVudChzdHJ1Y3QgcnRfdHJpZV9ub2RlICpub2RlLCBzdHJ1Y3QgdG5vZGUgKnB0cikKKy8qIGNhbGxlciBtdXN0IGhvbGQgUlROTCAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdG5vZGUgKnRub2RlX2dldF9jaGlsZChjb25zdCBzdHJ1Y3QgdG5vZGUgKnRuLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBpKQogewotCXNtcF93bWIoKTsKLQlub2RlLT5wYXJlbnQgPSAodW5zaWduZWQgbG9uZylwdHIgfCBOT0RFX1RZUEUobm9kZSk7Ci19Ci0KLS8qCi0gKiBjYWxsZXIgbXVzdCBob2xkIFJUTkwKLSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgcnRfdHJpZV9ub2RlICp0bm9kZV9nZXRfY2hpbGQoY29uc3Qgc3RydWN0IHRub2RlICp0biwgdW5zaWduZWQgaW50IGkpCi17Ci0JQlVHX09OKGkgPj0gMVUgPDwgdG4tPmJpdHMpOwotCiAJcmV0dXJuIHJ0bmxfZGVyZWZlcmVuY2UodG4tPmNoaWxkW2ldKTsKIH0KIAotLyoKLSAqIGNhbGxlciBtdXN0IGhvbGQgUkNVIHJlYWQgbG9jayBvciBSVE5MCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHJ0X3RyaWVfbm9kZSAqdG5vZGVfZ2V0X2NoaWxkX3JjdShjb25zdCBzdHJ1Y3QgdG5vZGUgKnRuLCB1bnNpZ25lZCBpbnQgaSkKKy8qIGNhbGxlciBtdXN0IGhvbGQgUkNVIHJlYWQgbG9jayBvciBSVE5MICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0bm9kZSAqdG5vZGVfZ2V0X2NoaWxkX3JjdShjb25zdCBzdHJ1Y3QgdG5vZGUgKnRuLAorCQkJCQkJdW5zaWduZWQgbG9uZyBpKQogewotCUJVR19PTihpID49IDFVIDw8IHRuLT5iaXRzKTsKLQogCXJldHVybiByY3VfZGVyZWZlcmVuY2VfcnRubCh0bi0+Y2hpbGRbaV0pOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB0bm9kZV9jaGlsZF9sZW5ndGgoY29uc3Qgc3RydWN0IHRub2RlICp0bikKLXsKLQlyZXR1cm4gMSA8PCB0bi0+Yml0czsKLX0KLQotc3RhdGljIGlubGluZSB0X2tleSBtYXNrX3BmeCh0X2tleSBrLCB1bnNpZ25lZCBpbnQgbCkKLXsKLQlyZXR1cm4gKGwgPT0gMCkgPyAwIDogayA+PiAoS0VZTEVOR1RILWwpIDw8IChLRVlMRU5HVEgtbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdF9rZXkgdGtleV9leHRyYWN0X2JpdHModF9rZXkgYSwgdW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGJpdHMpCi17Ci0JaWYgKG9mZnNldCA8IEtFWUxFTkdUSCkKLQkJcmV0dXJuICgodF9rZXkpKGEgPDwgb2Zmc2V0KSkgPj4gKEtFWUxFTkdUSCAtIGJpdHMpOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHRrZXlfZXF1YWxzKHRfa2V5IGEsIHRfa2V5IGIpCi17Ci0JcmV0dXJuIGEgPT0gYjsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdGtleV9zdWJfZXF1YWxzKHRfa2V5IGEsIGludCBvZmZzZXQsIGludCBiaXRzLCB0X2tleSBiKQotewotCWlmIChiaXRzID09IDAgfHwgb2Zmc2V0ID49IEtFWUxFTkdUSCkKLQkJcmV0dXJuIDE7Ci0JYml0cyA9IGJpdHMgPiBLRVlMRU5HVEggPyBLRVlMRU5HVEggOiBiaXRzOwotCXJldHVybiAoKGEgXiBiKSA8PCBvZmZzZXQpID4+IChLRVlMRU5HVEggLSBiaXRzKSA9PSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB0a2V5X21pc21hdGNoKHRfa2V5IGEsIGludCBvZmZzZXQsIHRfa2V5IGIpCi17Ci0JdF9rZXkgZGlmZiA9IGEgXiBiOwotCWludCBpID0gb2Zmc2V0OwotCi0JaWYgKCFkaWZmKQotCQlyZXR1cm4gMDsKLQl3aGlsZSAoKGRpZmYgPDwgaSkgPj4gKEtFWUxFTkdUSC0xKSA9PSAwKQotCQlpKys7Ci0JcmV0dXJuIGk7Ci19Ci0KLS8qCi0gIFRvIHVuZGVyc3RhbmQgdGhpcyBzdHVmZiwgYW4gdW5kZXJzdGFuZGluZyBvZiBrZXlzIGFuZCBhbGwgdGhlaXIgYml0cyBpcwotICBuZWNlc3NhcnkuIEV2ZXJ5IG5vZGUgaW4gdGhlIHRyaWUgaGFzIGEga2V5IGFzc29jaWF0ZWQgd2l0aCBpdCwgYnV0IG5vdAotICBhbGwgb2YgdGhlIGJpdHMgaW4gdGhhdCBrZXkgYXJlIHNpZ25pZmljYW50LgotCi0gIENvbnNpZGVyIGEgbm9kZSAnbicgYW5kIGl0cyBwYXJlbnQgJ3RwJy4KLQotICBJZiBuIGlzIGEgbGVhZiwgZXZlcnkgYml0IGluIGl0cyBrZXkgaXMgc2lnbmlmaWNhbnQuIEl0cyBwcmVzZW5jZSBpcwotICBuZWNlc3NpdGF0ZWQgYnkgcGF0aCBjb21wcmVzc2lvbiwgc2luY2UgZHVyaW5nIGEgdHJlZSB0cmF2ZXJzYWwgKHdoZW4KLSAgc2VhcmNoaW5nIGZvciBhIGxlYWYgLSB1bmxlc3Mgd2UgYXJlIGRvaW5nIGFuIGluc2VydGlvbikgd2Ugd2lsbCBjb21wbGV0ZWx5Ci0gIGlnbm9yZSBhbGwgc2tpcHBlZCBiaXRzIHdlIGVuY291bnRlci4gVGh1cyB3ZSBuZWVkIHRvIHZlcmlmeSwgYXQgdGhlIGVuZCBvZgotICBhIHBvdGVudGlhbGx5IHN1Y2Nlc3NmdWwgc2VhcmNoLCB0aGF0IHdlIGhhdmUgaW5kZWVkIGJlZW4gd2Fsa2luZyB0aGUKLSAgY29ycmVjdCBrZXkgcGF0aC4KLQotICBOb3RlIHRoYXQgd2UgY2FuIG5ldmVyICJtaXNzIiB0aGUgY29ycmVjdCBrZXkgaW4gdGhlIHRyZWUgaWYgcHJlc2VudCBieQotICBmb2xsb3dpbmcgdGhlIHdyb25nIHBhdGguIFBhdGggY29tcHJlc3Npb24gZW5zdXJlcyB0aGF0IHNlZ21lbnRzIG9mIHRoZSBrZXkKLSAgdGhhdCBhcmUgdGhlIHNhbWUgZm9yIGFsbCBrZXlzIHdpdGggYSBnaXZlbiBwcmVmaXggYXJlIHNraXBwZWQsIGJ1dCB0aGUKLSAgc2tpcHBlZCBwYXJ0ICppcyogaWRlbnRpY2FsIGZvciBlYWNoIG5vZGUgaW4gdGhlIHN1YnRyaWUgYmVsb3cgdGhlIHNraXBwZWQKLSAgYml0ISB0cmllX2luc2VydCgpIGluIHRoaXMgaW1wbGVtZW50YXRpb24gdGFrZXMgY2FyZSBvZiB0aGF0IC0gbm90ZSB0aGUKLSAgY2FsbCB0byB0a2V5X3N1Yl9lcXVhbHMoKSBpbiB0cmllX2luc2VydCgpLgotCi0gIGlmIG4gaXMgYW4gaW50ZXJuYWwgbm9kZSAtIGEgJ3Rub2RlJyBoZXJlLCB0aGUgdmFyaW91cyBwYXJ0cyBvZiBpdHMga2V5Ci0gIGhhdmUgbWFueSBkaWZmZXJlbnQgbWVhbmluZ3MuCi0KLSAgRXhhbXBsZToKLSAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAgfCBpIHwgaSB8IGkgfCBpIHwgaSB8IGkgfCBpIHwgTiB8IE4gfCBOIHwgUyB8IFMgfCBTIHwgUyB8IFMgfCBDIHwKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAwICAgMSAgIDIgICAzICAgNCAgIDUgICA2ICAgNyAgIDggICA5ICAxMCAgMTEgIDEyICAxMyAgMTQgIDE1Ci0KLSAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KLSAgfCBDIHwgQyB8IEMgfCB1IHwgdSB8IHUgfCB1IHwgdSB8IHUgfCB1IHwgdSB8IHUgfCB1IHwgdSB8IHUgfCB1IHwKLSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIDE2ICAxNyAgMTggIDE5ICAyMCAgMjEgIDIyICAyMyAgMjQgIDI1ICAyNiAgMjcgIDI4ICAyOSAgMzAgIDMxCi0KLSAgdHAtPnBvcyA9IDcKLSAgdHAtPmJpdHMgPSAzCi0gIG4tPnBvcyA9IDE1Ci0gIG4tPmJpdHMgPSA0Ci0KLSAgRmlyc3QsIGxldCdzIGp1c3QgaWdub3JlIHRoZSBiaXRzIHRoYXQgY29tZSBiZWZvcmUgdGhlIHBhcmVudCB0cCwgdGhhdCBpcwotICB0aGUgYml0cyBmcm9tIDAgdG8gKHRwLT5wb3MtMSkuIFRoZXkgYXJlICprbm93biogYnV0IGF0IHRoaXMgcG9pbnQgd2UgZG8KLSAgbm90IHVzZSB0aGVtIGZvciBhbnl0aGluZy4KLQotICBUaGUgYml0cyBmcm9tICh0cC0+cG9zKSB0byAodHAtPnBvcyArIHRwLT5iaXRzIC0gMSkgLSAiTiIsIGFib3ZlIC0gYXJlIHRoZQotICBpbmRleCBpbnRvIHRoZSBwYXJlbnQncyBjaGlsZCBhcnJheS4gVGhhdCBpcywgdGhleSB3aWxsIGJlIHVzZWQgdG8gZmluZAotICAnbicgYW1vbmcgdHAncyBjaGlsZHJlbi4KLQotICBUaGUgYml0cyBmcm9tICh0cC0+cG9zICsgdHAtPmJpdHMpIHRvIChuLT5wb3MgLSAxKSAtICJTIiAtIGFyZSBza2lwcGVkIGJpdHMKLSAgZm9yIHRoZSBub2RlIG4uCi0KLSAgQWxsIHRoZSBiaXRzIHdlIGhhdmUgc2VlbiBzbyBmYXIgYXJlIHNpZ25pZmljYW50IHRvIHRoZSBub2RlIG4uIFRoZSByZXN0Ci0gIG9mIHRoZSBiaXRzIGFyZSByZWFsbHkgbm90IG5lZWRlZCBvciBpbmRlZWQga25vd24gaW4gbi0+a2V5LgotCi0gIFRoZSBiaXRzIGZyb20gKG4tPnBvcykgdG8gKG4tPnBvcyArIG4tPmJpdHMgLSAxKSAtICJDIiAtIGFyZSB0aGUgaW5kZXggaW50bwotICBuJ3MgY2hpbGQgYXJyYXksIGFuZCB3aWxsIG9mIGNvdXJzZSBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggY2hpbGQuCi0KLQotICBUaGUgcmVzdCBvZiB0aGUgYml0cywgZnJvbSAobi0+cG9zICsgbi0+Yml0cykgb253YXJkLCBhcmUgY29tcGxldGVseSB1bmtub3duCi0gIGF0IHRoaXMgcG9pbnQuCi0KLSovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja190bm9kZShjb25zdCBzdHJ1Y3QgdG5vZGUgKnRuKQotewotCVdBUk5fT04odG4gJiYgdG4tPnBvcyt0bi0+Yml0cyA+IDMyKTsKLX0KKy8qIFRvIHVuZGVyc3RhbmQgdGhpcyBzdHVmZiwgYW4gdW5kZXJzdGFuZGluZyBvZiBrZXlzIGFuZCBhbGwgdGhlaXIgYml0cyBpcworICogbmVjZXNzYXJ5LiBFdmVyeSBub2RlIGluIHRoZSB0cmllIGhhcyBhIGtleSBhc3NvY2lhdGVkIHdpdGggaXQsIGJ1dCBub3QKKyAqIGFsbCBvZiB0aGUgYml0cyBpbiB0aGF0IGtleSBhcmUgc2lnbmlmaWNhbnQuCisgKgorICogQ29uc2lkZXIgYSBub2RlICduJyBhbmQgaXRzIHBhcmVudCAndHAnLgorICoKKyAqIElmIG4gaXMgYSBsZWFmLCBldmVyeSBiaXQgaW4gaXRzIGtleSBpcyBzaWduaWZpY2FudC4gSXRzIHByZXNlbmNlIGlzCisgKiBuZWNlc3NpdGF0ZWQgYnkgcGF0aCBjb21wcmVzc2lvbiwgc2luY2UgZHVyaW5nIGEgdHJlZSB0cmF2ZXJzYWwgKHdoZW4KKyAqIHNlYXJjaGluZyBmb3IgYSBsZWFmIC0gdW5sZXNzIHdlIGFyZSBkb2luZyBhbiBpbnNlcnRpb24pIHdlIHdpbGwgY29tcGxldGVseQorICogaWdub3JlIGFsbCBza2lwcGVkIGJpdHMgd2UgZW5jb3VudGVyLiBUaHVzIHdlIG5lZWQgdG8gdmVyaWZ5LCBhdCB0aGUgZW5kIG9mCisgKiBhIHBvdGVudGlhbGx5IHN1Y2Nlc3NmdWwgc2VhcmNoLCB0aGF0IHdlIGhhdmUgaW5kZWVkIGJlZW4gd2Fsa2luZyB0aGUKKyAqIGNvcnJlY3Qga2V5IHBhdGguCisgKgorICogTm90ZSB0aGF0IHdlIGNhbiBuZXZlciAibWlzcyIgdGhlIGNvcnJlY3Qga2V5IGluIHRoZSB0cmVlIGlmIHByZXNlbnQgYnkKKyAqIGZvbGxvd2luZyB0aGUgd3JvbmcgcGF0aC4gUGF0aCBjb21wcmVzc2lvbiBlbnN1cmVzIHRoYXQgc2VnbWVudHMgb2YgdGhlIGtleQorICogdGhhdCBhcmUgdGhlIHNhbWUgZm9yIGFsbCBrZXlzIHdpdGggYSBnaXZlbiBwcmVmaXggYXJlIHNraXBwZWQsIGJ1dCB0aGUKKyAqIHNraXBwZWQgcGFydCAqaXMqIGlkZW50aWNhbCBmb3IgZWFjaCBub2RlIGluIHRoZSBzdWJ0cmllIGJlbG93IHRoZSBza2lwcGVkCisgKiBiaXQhIHRyaWVfaW5zZXJ0KCkgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiB0YWtlcyBjYXJlIG9mIHRoYXQuCisgKgorICogaWYgbiBpcyBhbiBpbnRlcm5hbCBub2RlIC0gYSAndG5vZGUnIGhlcmUsIHRoZSB2YXJpb3VzIHBhcnRzIG9mIGl0cyBrZXkKKyAqIGhhdmUgbWFueSBkaWZmZXJlbnQgbWVhbmluZ3MuCisgKgorICogRXhhbXBsZToKKyAqIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgKiB8IGkgfCBpIHwgaSB8IGkgfCBpIHwgaSB8IGkgfCBOIHwgTiB8IE4gfCBTIHwgUyB8IFMgfCBTIHwgUyB8IEMgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAzMSAgMzAgIDI5ICAyOCAgMjcgIDI2ICAyNSAgMjQgIDIzICAyMiAgMjEgIDIwICAxOSAgMTggIDE3ICAxNgorICoKKyAqIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgKiB8IEMgfCBDIHwgQyB8IHUgfCB1IHwgdSB8IHUgfCB1IHwgdSB8IHUgfCB1IHwgdSB8IHUgfCB1IHwgdSB8IHUgfAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICAxNSAgMTQgIDEzICAxMiAgMTEgIDEwICAgOSAgIDggICA3ICAgNiAgIDUgICA0ICAgMyAgIDIgICAxICAgMAorICoKKyAqIHRwLT5wb3MgPSAyMgorICogdHAtPmJpdHMgPSAzCisgKiBuLT5wb3MgPSAxMworICogbi0+Yml0cyA9IDQKKyAqCisgKiBGaXJzdCwgbGV0J3MganVzdCBpZ25vcmUgdGhlIGJpdHMgdGhhdCBjb21lIGJlZm9yZSB0aGUgcGFyZW50IHRwLCB0aGF0IGlzCisgKiB0aGUgYml0cyBmcm9tICh0cC0+cG9zICsgdHAtPmJpdHMpIHRvIDMxLiBUaGV5IGFyZSAqa25vd24qIGJ1dCBhdCB0aGlzCisgKiBwb2ludCB3ZSBkbyBub3QgdXNlIHRoZW0gZm9yIGFueXRoaW5nLgorICoKKyAqIFRoZSBiaXRzIGZyb20gKHRwLT5wb3MpIHRvICh0cC0+cG9zICsgdHAtPmJpdHMgLSAxKSAtICJOIiwgYWJvdmUgLSBhcmUgdGhlCisgKiBpbmRleCBpbnRvIHRoZSBwYXJlbnQncyBjaGlsZCBhcnJheS4gVGhhdCBpcywgdGhleSB3aWxsIGJlIHVzZWQgdG8gZmluZAorICogJ24nIGFtb25nIHRwJ3MgY2hpbGRyZW4uCisgKgorICogVGhlIGJpdHMgZnJvbSAobi0+cG9zICsgbi0+Yml0cykgdG8gKHRuLT5wb3MgLSAxKSAtICJTIiAtIGFyZSBza2lwcGVkIGJpdHMKKyAqIGZvciB0aGUgbm9kZSBuLgorICoKKyAqIEFsbCB0aGUgYml0cyB3ZSBoYXZlIHNlZW4gc28gZmFyIGFyZSBzaWduaWZpY2FudCB0byB0aGUgbm9kZSBuLiBUaGUgcmVzdAorICogb2YgdGhlIGJpdHMgYXJlIHJlYWxseSBub3QgbmVlZGVkIG9yIGluZGVlZCBrbm93biBpbiBuLT5rZXkuCisgKgorICogVGhlIGJpdHMgZnJvbSAobi0+cG9zKSB0byAobi0+cG9zICsgbi0+Yml0cyAtIDEpIC0gIkMiIC0gYXJlIHRoZSBpbmRleCBpbnRvCisgKiBuJ3MgY2hpbGQgYXJyYXksIGFuZCB3aWxsIG9mIGNvdXJzZSBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggY2hpbGQuCisgKgorICogVGhlIHJlc3Qgb2YgdGhlIGJpdHMsIGZyb20gMCB0byAobi0+cG9zICsgbi0+Yml0cyksIGFyZSBjb21wbGV0ZWx5IHVua25vd24KKyAqIGF0IHRoaXMgcG9pbnQuCisgKi8KIAogc3RhdGljIGNvbnN0IGludCBoYWx2ZV90aHJlc2hvbGQgPSAyNTsKIHN0YXRpYyBjb25zdCBpbnQgaW5mbGF0ZV90aHJlc2hvbGQgPSA1MDsKQEAgLTM1NywxNiArMjczLDIyIEBACiAJY2FsbF9yY3UoJmZhLT5yY3UsIF9fYWxpYXNfZnJlZV9tZW0pOwogfQogCi1zdGF0aWMgdm9pZCBfX2xlYWZfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQorI2RlZmluZSBUTk9ERV9LTUFMTE9DX01BWCBcCisJaWxvZzIoKFBBR0VfU0laRSAtIHNpemVvZihzdHJ1Y3QgdG5vZGUpKSAvIHNpemVvZihzdHJ1Y3QgdG5vZGUgKikpCisKK3N0YXRpYyB2b2lkIF9fbm9kZV9mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCiB7Ci0Jc3RydWN0IGxlYWYgKmwgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGxlYWYsIHJjdSk7Ci0Ja21lbV9jYWNoZV9mcmVlKHRyaWVfbGVhZl9rbWVtLCBsKTsKKwlzdHJ1Y3QgdG5vZGUgKm4gPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHRub2RlLCByY3UpOworCisJaWYgKElTX0xFQUYobikpCisJCWttZW1fY2FjaGVfZnJlZSh0cmllX2xlYWZfa21lbSwgbik7CisJZWxzZSBpZiAobi0+Yml0cyA8PSBUTk9ERV9LTUFMTE9DX01BWCkKKwkJa2ZyZWUobik7CisJZWxzZQorCQl2ZnJlZShuKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfbGVhZihzdHJ1Y3QgbGVhZiAqbCkKLXsKLQljYWxsX3JjdSgmbC0+cmN1LCBfX2xlYWZfZnJlZV9yY3UpOwotfQorI2RlZmluZSBub2RlX2ZyZWUobikgY2FsbF9yY3UoJm4tPnJjdSwgX19ub2RlX2ZyZWVfcmN1KQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9sZWFmX2luZm8oc3RydWN0IGxlYWZfaW5mbyAqbGVhZikKIHsKQEAgLTM4MSw1NiArMzAzLDMxIEBACiAJCXJldHVybiB2emFsbG9jKHNpemUpOwogfQogCi1zdGF0aWMgdm9pZCBfX3Rub2RlX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbXB0eV9jaGlsZF9pbmMoc3RydWN0IHRub2RlICpuKQogewotCXN0cnVjdCB0bm9kZSAqdG4gPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHRub2RlLCByY3UpOwotCXNpemVfdCBzaXplID0gc2l6ZW9mKHN0cnVjdCB0bm9kZSkgKwotCQkgICAgICAoc2l6ZW9mKHN0cnVjdCBydF90cmllX25vZGUgKikgPDwgdG4tPmJpdHMpOwotCi0JaWYgKHNpemUgPD0gUEFHRV9TSVpFKQotCQlrZnJlZSh0bik7Ci0JZWxzZQotCQl2ZnJlZSh0bik7CisJKytuLT5lbXB0eV9jaGlsZHJlbiA/IDogKytuLT5mdWxsX2NoaWxkcmVuOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdG5vZGVfZnJlZShzdHJ1Y3QgdG5vZGUgKnRuKQorc3RhdGljIGlubGluZSB2b2lkIGVtcHR5X2NoaWxkX2RlYyhzdHJ1Y3QgdG5vZGUgKm4pCiB7Ci0JaWYgKElTX0xFQUYodG4pKQotCQlmcmVlX2xlYWYoKHN0cnVjdCBsZWFmICopIHRuKTsKLQllbHNlCi0JCWNhbGxfcmN1KCZ0bi0+cmN1LCBfX3Rub2RlX2ZyZWVfcmN1KTsKKwluLT5lbXB0eV9jaGlsZHJlbi0tID8gOiBuLT5mdWxsX2NoaWxkcmVuLS07CiB9CiAKLXN0YXRpYyB2b2lkIHRub2RlX2ZyZWVfc2FmZShzdHJ1Y3QgdG5vZGUgKnRuKQorc3RhdGljIHN0cnVjdCB0bm9kZSAqbGVhZl9uZXcodF9rZXkga2V5KQogewotCUJVR19PTihJU19MRUFGKHRuKSk7Ci0JdG4tPnRub2RlX2ZyZWUgPSB0bm9kZV9mcmVlX2hlYWQ7Ci0JdG5vZGVfZnJlZV9oZWFkID0gdG47Ci0JdG5vZGVfZnJlZV9zaXplICs9IHNpemVvZihzdHJ1Y3QgdG5vZGUpICsKLQkJCSAgIChzaXplb2Yoc3RydWN0IHJ0X3RyaWVfbm9kZSAqKSA8PCB0bi0+Yml0cyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRub2RlX2ZyZWVfZmx1c2godm9pZCkKLXsKLQlzdHJ1Y3QgdG5vZGUgKnRuOwotCi0Jd2hpbGUgKCh0biA9IHRub2RlX2ZyZWVfaGVhZCkpIHsKLQkJdG5vZGVfZnJlZV9oZWFkID0gdG4tPnRub2RlX2ZyZWU7Ci0JCXRuLT50bm9kZV9mcmVlID0gTlVMTDsKLQkJdG5vZGVfZnJlZSh0bik7Ci0JfQotCi0JaWYgKHRub2RlX2ZyZWVfc2l6ZSA+PSBQQUdFX1NJWkUgKiBzeW5jX3BhZ2VzKSB7Ci0JCXRub2RlX2ZyZWVfc2l6ZSA9IDA7Ci0JCXN5bmNocm9uaXplX3JjdSgpOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBsZWFmICpsZWFmX25ldyh2b2lkKQotewotCXN0cnVjdCBsZWFmICpsID0ga21lbV9jYWNoZV9hbGxvYyh0cmllX2xlYWZfa21lbSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IHRub2RlICpsID0ga21lbV9jYWNoZV9hbGxvYyh0cmllX2xlYWZfa21lbSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGwpIHsKLQkJbC0+cGFyZW50ID0gVF9MRUFGOworCQlsLT5wYXJlbnQgPSBOVUxMOworCQkvKiBzZXQga2V5IGFuZCBwb3MgdG8gcmVmbGVjdCBmdWxsIGtleSB2YWx1ZQorCQkgKiBhbnkgdHJhaWxpbmcgemVyb3MgaW4gdGhlIGtleSBzaG91bGQgYmUgaWdub3JlZAorCQkgKiBhcyB0aGUgbm9kZXMgYXJlIHNlYXJjaGVkCisJCSAqLworCQlsLT5rZXkgPSBrZXk7CisJCWwtPnNsZW4gPSAwOworCQlsLT5wb3MgPSAwOworCQkvKiBzZXQgYml0cyB0byAwIGluZGljYXRpbmcgd2UgYXJlIG5vdCBhIHRub2RlICovCisJCWwtPmJpdHMgPSAwOworCiAJCUlOSVRfSExJU1RfSEVBRCgmbC0+bGlzdCk7CiAJfQogCXJldHVybiBsOwpAQCAtNDQ5LDQ2MiArMzQ2LDUzMCBAQAogCiBzdGF0aWMgc3RydWN0IHRub2RlICp0bm9kZV9uZXcodF9rZXkga2V5LCBpbnQgcG9zLCBpbnQgYml0cykKIHsKLQlzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHRub2RlKSArIChzaXplb2Yoc3RydWN0IHJ0X3RyaWVfbm9kZSAqKSA8PCBiaXRzKTsKKwlzaXplX3Qgc3ogPSBvZmZzZXRvZihzdHJ1Y3QgdG5vZGUsIGNoaWxkWzF1bCA8PCBiaXRzXSk7CiAJc3RydWN0IHRub2RlICp0biA9IHRub2RlX2FsbG9jKHN6KTsKKwl1bnNpZ25lZCBpbnQgc2hpZnQgPSBwb3MgKyBiaXRzOworCisJLyogdmVyaWZ5IGJpdHMgYW5kIHBvcyB0aGVpciBtc2IgYml0cyBjbGVhciBhbmQgdmFsdWVzIGFyZSB2YWxpZCAqLworCUJVR19PTighYml0cyB8fCAoc2hpZnQgPiBLRVlMRU5HVEgpKTsKIAogCWlmICh0bikgewotCQl0bi0+cGFyZW50ID0gVF9UTk9ERTsKKwkJdG4tPnBhcmVudCA9IE5VTEw7CisJCXRuLT5zbGVuID0gcG9zOwogCQl0bi0+cG9zID0gcG9zOwogCQl0bi0+Yml0cyA9IGJpdHM7Ci0JCXRuLT5rZXkgPSBrZXk7Ci0JCXRuLT5mdWxsX2NoaWxkcmVuID0gMDsKLQkJdG4tPmVtcHR5X2NoaWxkcmVuID0gMTw8Yml0czsKKwkJdG4tPmtleSA9IChzaGlmdCA8IEtFWUxFTkdUSCkgPyAoa2V5ID4+IHNoaWZ0KSA8PCBzaGlmdCA6IDA7CisJCWlmIChiaXRzID09IEtFWUxFTkdUSCkKKwkJCXRuLT5mdWxsX2NoaWxkcmVuID0gMTsKKwkJZWxzZQorCQkJdG4tPmVtcHR5X2NoaWxkcmVuID0gMXVsIDw8IGJpdHM7CiAJfQogCiAJcHJfZGVidWcoIkFUICVwIHM9JXp1ICV6dVxuIiwgdG4sIHNpemVvZihzdHJ1Y3QgdG5vZGUpLAotCQkgc2l6ZW9mKHN0cnVjdCBydF90cmllX25vZGUgKikgPDwgYml0cyk7CisJCSBzaXplb2Yoc3RydWN0IHRub2RlICopIDw8IGJpdHMpOwogCXJldHVybiB0bjsKIH0KIAotLyoKLSAqIENoZWNrIHdoZXRoZXIgYSB0bm9kZSAnbicgaXMgImZ1bGwiLCBpLmUuIGl0IGlzIGFuIGludGVybmFsIG5vZGUKKy8qIENoZWNrIHdoZXRoZXIgYSB0bm9kZSAnbicgaXMgImZ1bGwiLCBpLmUuIGl0IGlzIGFuIGludGVybmFsIG5vZGUKICAqIGFuZCBubyBiaXRzIGFyZSBza2lwcGVkLiBTZWUgZGlzY3Vzc2lvbiBpbiBkeW50cmVlIHBhcGVyIHAuIDYKICAqLwotCi1zdGF0aWMgaW5saW5lIGludCB0bm9kZV9mdWxsKGNvbnN0IHN0cnVjdCB0bm9kZSAqdG4sIGNvbnN0IHN0cnVjdCBydF90cmllX25vZGUgKm4pCitzdGF0aWMgaW5saW5lIGludCB0bm9kZV9mdWxsKGNvbnN0IHN0cnVjdCB0bm9kZSAqdG4sIGNvbnN0IHN0cnVjdCB0bm9kZSAqbikKIHsKLQlpZiAobiA9PSBOVUxMIHx8IElTX0xFQUYobikpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuICgoc3RydWN0IHRub2RlICopIG4pLT5wb3MgPT0gdG4tPnBvcyArIHRuLT5iaXRzOworCXJldHVybiBuICYmICgobi0+cG9zICsgbi0+Yml0cykgPT0gdG4tPnBvcykgJiYgSVNfVE5PREUobik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfY2hpbGQoc3RydWN0IHRub2RlICp0biwgaW50IGksCi0JCQkgICAgIHN0cnVjdCBydF90cmllX25vZGUgKm4pCisvKiBBZGQgYSBjaGlsZCBhdCBwb3NpdGlvbiBpIG92ZXJ3cml0aW5nIHRoZSBvbGQgdmFsdWUuCisgKiBVcGRhdGUgdGhlIHZhbHVlIG9mIGZ1bGxfY2hpbGRyZW4gYW5kIGVtcHR5X2NoaWxkcmVuLgorICovCitzdGF0aWMgdm9pZCBwdXRfY2hpbGQoc3RydWN0IHRub2RlICp0biwgdW5zaWduZWQgbG9uZyBpLCBzdHJ1Y3QgdG5vZGUgKm4pCiB7Ci0JdG5vZGVfcHV0X2NoaWxkX3Jlb3JnKHRuLCBpLCBuLCAtMSk7Ci19CisJc3RydWN0IHRub2RlICpjaGkgPSB0bm9kZV9nZXRfY2hpbGQodG4sIGkpOworCWludCBpc2Z1bGwsIHdhc2Z1bGw7CiAKLSAvKgotICAqIEFkZCBhIGNoaWxkIGF0IHBvc2l0aW9uIGkgb3ZlcndyaXRpbmcgdGhlIG9sZCB2YWx1ZS4KLSAgKiBVcGRhdGUgdGhlIHZhbHVlIG9mIGZ1bGxfY2hpbGRyZW4gYW5kIGVtcHR5X2NoaWxkcmVuLgotICAqLworCUJVR19PTihpID49IHRub2RlX2NoaWxkX2xlbmd0aCh0bikpOwogCi1zdGF0aWMgdm9pZCB0bm9kZV9wdXRfY2hpbGRfcmVvcmcoc3RydWN0IHRub2RlICp0biwgaW50IGksIHN0cnVjdCBydF90cmllX25vZGUgKm4sCi0JCQkJICBpbnQgd2FzZnVsbCkKLXsKLQlzdHJ1Y3QgcnRfdHJpZV9ub2RlICpjaGkgPSBydG5sX2RlcmVmZXJlbmNlKHRuLT5jaGlsZFtpXSk7Ci0JaW50IGlzZnVsbDsKLQotCUJVR19PTihpID49IDE8PHRuLT5iaXRzKTsKLQotCS8qIHVwZGF0ZSBlbXB0eUNoaWxkcmVuICovCisJLyogdXBkYXRlIGVtcHR5Q2hpbGRyZW4sIG92ZXJmbG93IGludG8gZnVsbENoaWxkcmVuICovCiAJaWYgKG4gPT0gTlVMTCAmJiBjaGkgIT0gTlVMTCkKLQkJdG4tPmVtcHR5X2NoaWxkcmVuKys7Ci0JZWxzZSBpZiAobiAhPSBOVUxMICYmIGNoaSA9PSBOVUxMKQotCQl0bi0+ZW1wdHlfY2hpbGRyZW4tLTsKKwkJZW1wdHlfY2hpbGRfaW5jKHRuKTsKKwlpZiAobiAhPSBOVUxMICYmIGNoaSA9PSBOVUxMKQorCQllbXB0eV9jaGlsZF9kZWModG4pOwogCiAJLyogdXBkYXRlIGZ1bGxDaGlsZHJlbiAqLwotCWlmICh3YXNmdWxsID09IC0xKQotCQl3YXNmdWxsID0gdG5vZGVfZnVsbCh0biwgY2hpKTsKLQorCXdhc2Z1bGwgPSB0bm9kZV9mdWxsKHRuLCBjaGkpOwogCWlzZnVsbCA9IHRub2RlX2Z1bGwodG4sIG4pOworCiAJaWYgKHdhc2Z1bGwgJiYgIWlzZnVsbCkKIAkJdG4tPmZ1bGxfY2hpbGRyZW4tLTsKIAllbHNlIGlmICghd2FzZnVsbCAmJiBpc2Z1bGwpCiAJCXRuLT5mdWxsX2NoaWxkcmVuKys7CiAKLQlpZiAobikKLQkJbm9kZV9zZXRfcGFyZW50KG4sIHRuKTsKKwlpZiAobiAmJiAodG4tPnNsZW4gPCBuLT5zbGVuKSkKKwkJdG4tPnNsZW4gPSBuLT5zbGVuOwogCiAJcmN1X2Fzc2lnbl9wb2ludGVyKHRuLT5jaGlsZFtpXSwgbik7CiB9CiAKLSNkZWZpbmUgTUFYX1dPUksgMTAKLXN0YXRpYyBzdHJ1Y3QgcnRfdHJpZV9ub2RlICpyZXNpemUoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCB0bm9kZSAqdG4pCitzdGF0aWMgdm9pZCB1cGRhdGVfY2hpbGRyZW4oc3RydWN0IHRub2RlICp0bikKIHsKLQlpbnQgaTsKLQlzdHJ1Y3QgdG5vZGUgKm9sZF90bjsKLQlpbnQgaW5mbGF0ZV90aHJlc2hvbGRfdXNlOwotCWludCBoYWx2ZV90aHJlc2hvbGRfdXNlOwotCWludCBtYXhfd29yazsKKwl1bnNpZ25lZCBsb25nIGk7CiAKLQlpZiAoIXRuKQotCQlyZXR1cm4gTlVMTDsKKwkvKiB1cGRhdGUgYWxsIG9mIHRoZSBjaGlsZCBwYXJlbnQgcG9pbnRlcnMgKi8KKwlmb3IgKGkgPSB0bm9kZV9jaGlsZF9sZW5ndGgodG4pOyBpOykgeworCQlzdHJ1Y3QgdG5vZGUgKmlub2RlID0gdG5vZGVfZ2V0X2NoaWxkKHRuLCAtLWkpOwogCi0JcHJfZGVidWcoIkluIHRub2RlX3Jlc2l6ZSAlcCBpbmZsYXRlX3RocmVzaG9sZD0lZCB0aHJlc2hvbGQ9JWRcbiIsCi0JCSB0biwgaW5mbGF0ZV90aHJlc2hvbGQsIGhhbHZlX3RocmVzaG9sZCk7CisJCWlmICghaW5vZGUpCisJCQljb250aW51ZTsKIAotCS8qIE5vIGNoaWxkcmVuICovCi0JaWYgKHRuLT5lbXB0eV9jaGlsZHJlbiA9PSB0bm9kZV9jaGlsZF9sZW5ndGgodG4pKSB7Ci0JCXRub2RlX2ZyZWVfc2FmZSh0bik7Ci0JCXJldHVybiBOVUxMOworCQkvKiBFaXRoZXIgdXBkYXRlIHRoZSBjaGlsZHJlbiBvZiBhIHRub2RlIHRoYXQKKwkJICogYWxyZWFkeSBiZWxvbmdzIHRvIHVzIG9yIHVwZGF0ZSB0aGUgY2hpbGQKKwkJICogdG8gcG9pbnQgdG8gb3Vyc2VsdmVzLgorCQkgKi8KKwkJaWYgKG5vZGVfcGFyZW50KGlub2RlKSA9PSB0bikKKwkJCXVwZGF0ZV9jaGlsZHJlbihpbm9kZSk7CisJCWVsc2UKKwkJCW5vZGVfc2V0X3BhcmVudChpbm9kZSwgdG4pOwogCX0KLQkvKiBPbmUgY2hpbGQgKi8KLQlpZiAodG4tPmVtcHR5X2NoaWxkcmVuID09IHRub2RlX2NoaWxkX2xlbmd0aCh0bikgLSAxKQotCQlnb3RvIG9uZV9jaGlsZDsKLQkvKgotCSAqIERvdWJsZSBhcyBsb25nIGFzIHRoZSByZXN1bHRpbmcgbm9kZSBoYXMgYSBudW1iZXIgb2YKLQkgKiBub25lbXB0eSBub2RlcyB0aGF0IGFyZSBhYm92ZSB0aGUgdGhyZXNob2xkLgotCSAqLwotCi0JLyoKLQkgKiBGcm9tICJJbXBsZW1lbnRpbmcgYSBkeW5hbWljIGNvbXByZXNzZWQgdHJpZSIgYnkgU3RlZmFuIE5pbHNzb24gb2YKLQkgKiB0aGUgSGVsc2lua2kgVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5IGFuZCBNYXR0aSBUaWtrYW5lbiBvZiBOb2tpYQotCSAqIFRlbGVjb21tdW5pY2F0aW9ucywgcGFnZSA2OgotCSAqICJBIG5vZGUgaXMgZG91YmxlZCBpZiB0aGUgcmF0aW8gb2Ygbm9uLWVtcHR5IGNoaWxkcmVuIHRvIGFsbAotCSAqIGNoaWxkcmVuIGluIHRoZSAqZG91YmxlZCogbm9kZSBpcyBhdCBsZWFzdCAnaGlnaCcuIgotCSAqCi0JICogJ2hpZ2gnIGluIHRoaXMgaW5zdGFuY2UgaXMgdGhlIHZhcmlhYmxlICdpbmZsYXRlX3RocmVzaG9sZCcuIEl0Ci0JICogaXMgZXhwcmVzc2VkIGFzIGEgcGVyY2VudGFnZSwgc28gd2UgbXVsdGlwbHkgaXQgd2l0aAotCSAqIHRub2RlX2NoaWxkX2xlbmd0aCgpIGFuZCBpbnN0ZWFkIG9mIG11bHRpcGx5aW5nIGJ5IDIgKHNpbmNlIHRoZQotCSAqIGNoaWxkIGFycmF5IHdpbGwgYmUgZG91YmxlZCBieSBpbmZsYXRlKCkpIGFuZCBtdWx0aXBseWluZwotCSAqIHRoZSBsZWZ0LWhhbmQgc2lkZSBieSAxMDAgKHRvIGhhbmRsZSB0aGUgcGVyY2VudGFnZSB0aGluZykgd2UKLQkgKiBtdWx0aXBseSB0aGUgbGVmdC1oYW5kIHNpZGUgYnkgNTAuCi0JICoKLQkgKiBUaGUgbGVmdC1oYW5kIHNpZGUgbWF5IGxvb2sgYSBiaXQgd2VpcmQ6IHRub2RlX2NoaWxkX2xlbmd0aCh0bikKLQkgKiAtIHRuLT5lbXB0eV9jaGlsZHJlbiBpcyBvZiBjb3Vyc2UgdGhlIG51bWJlciBvZiBub24tbnVsbCBjaGlsZHJlbgotCSAqIGluIHRoZSBjdXJyZW50IG5vZGUuIHRuLT5mdWxsX2NoaWxkcmVuIGlzIHRoZSBudW1iZXIgb2YgImZ1bGwiCi0JICogY2hpbGRyZW4sIHRoYXQgaXMgbm9uLW51bGwgdG5vZGVzIHdpdGggYSBza2lwIHZhbHVlIG9mIDAuCi0JICogQWxsIG9mIHRob3NlIHdpbGwgYmUgZG91YmxlZCBpbiB0aGUgcmVzdWx0aW5nIGluZmxhdGVkIHRub2RlLCBzbwotCSAqIHdlIGp1c3QgY291bnQgdGhlbSBvbmUgZXh0cmEgdGltZSBoZXJlLgotCSAqCi0JICogQSBjbGVhcmVyIHdheSB0byB3cml0ZSB0aGlzIHdvdWxkIGJlOgotCSAqCi0JICogdG9fYmVfZG91YmxlZCA9IHRuLT5mdWxsX2NoaWxkcmVuOwotCSAqIG5vdF90b19iZV9kb3VibGVkID0gdG5vZGVfY2hpbGRfbGVuZ3RoKHRuKSAtIHRuLT5lbXB0eV9jaGlsZHJlbiAtCi0JICogICAgIHRuLT5mdWxsX2NoaWxkcmVuOwotCSAqCi0JICogbmV3X2NoaWxkX2xlbmd0aCA9IHRub2RlX2NoaWxkX2xlbmd0aCh0bikgKiAyOwotCSAqCi0JICogbmV3X2ZpbGxfZmFjdG9yID0gMTAwICogKG5vdF90b19iZV9kb3VibGVkICsgMip0b19iZV9kb3VibGVkKSAvCi0JICogICAgICBuZXdfY2hpbGRfbGVuZ3RoOwotCSAqIGlmIChuZXdfZmlsbF9mYWN0b3IgPj0gaW5mbGF0ZV90aHJlc2hvbGQpCi0JICoKLQkgKiAuLi5hbmQgc28gb24sIHRobyBpdCB3b3VsZCBtZXNzIHVwIHRoZSB3aGlsZSAoKSBsb29wLgotCSAqCi0JICogYW55d2F5LAotCSAqIDEwMCAqIChub3RfdG9fYmVfZG91YmxlZCArIDIqdG9fYmVfZG91YmxlZCkgLyBuZXdfY2hpbGRfbGVuZ3RoID49Ci0JICogICAgICBpbmZsYXRlX3RocmVzaG9sZAotCSAqCi0JICogYXZvaWQgYSBkaXZpc2lvbjoKLQkgKiAxMDAgKiAobm90X3RvX2JlX2RvdWJsZWQgKyAyKnRvX2JlX2RvdWJsZWQpID49Ci0JICogICAgICBpbmZsYXRlX3RocmVzaG9sZCAqIG5ld19jaGlsZF9sZW5ndGgKLQkgKgotCSAqIGV4cGFuZCBub3RfdG9fYmVfZG91YmxlZCBhbmQgdG9fYmVfZG91YmxlZCwgYW5kIHNob3J0ZW46Ci0JICogMTAwICogKHRub2RlX2NoaWxkX2xlbmd0aCh0bikgLSB0bi0+ZW1wdHlfY2hpbGRyZW4gKwotCSAqICAgIHRuLT5mdWxsX2NoaWxkcmVuKSA+PSBpbmZsYXRlX3RocmVzaG9sZCAqIG5ld19jaGlsZF9sZW5ndGgKLQkgKgotCSAqIGV4cGFuZCBuZXdfY2hpbGRfbGVuZ3RoOgotCSAqIDEwMCAqICh0bm9kZV9jaGlsZF9sZW5ndGgodG4pIC0gdG4tPmVtcHR5X2NoaWxkcmVuICsKLQkgKiAgICB0bi0+ZnVsbF9jaGlsZHJlbikgPj0KLQkgKiAgICAgIGluZmxhdGVfdGhyZXNob2xkICogdG5vZGVfY2hpbGRfbGVuZ3RoKHRuKSAqIDIKLQkgKgotCSAqIHNob3J0ZW4gYWdhaW46Ci0JICogNTAgKiAodG4tPmZ1bGxfY2hpbGRyZW4gKyB0bm9kZV9jaGlsZF9sZW5ndGgodG4pIC0KLQkgKiAgICB0bi0+ZW1wdHlfY2hpbGRyZW4pID49IGluZmxhdGVfdGhyZXNob2xkICoKLQkgKiAgICB0bm9kZV9jaGlsZF9sZW5ndGgodG4pCi0JICoKLQkgKi8KLQotCWNoZWNrX3Rub2RlKHRuKTsKLQotCS8qIEtlZXAgcm9vdCBub2RlIGxhcmdlciAgKi8KLQotCWlmICghbm9kZV9wYXJlbnQoKHN0cnVjdCBydF90cmllX25vZGUgKil0bikpIHsKLQkJaW5mbGF0ZV90aHJlc2hvbGRfdXNlID0gaW5mbGF0ZV90aHJlc2hvbGRfcm9vdDsKLQkJaGFsdmVfdGhyZXNob2xkX3VzZSA9IGhhbHZlX3RocmVzaG9sZF9yb290OwotCX0gZWxzZSB7Ci0JCWluZmxhdGVfdGhyZXNob2xkX3VzZSA9IGluZmxhdGVfdGhyZXNob2xkOwotCQloYWx2ZV90aHJlc2hvbGRfdXNlID0gaGFsdmVfdGhyZXNob2xkOwotCX0KLQotCW1heF93b3JrID0gTUFYX1dPUks7Ci0Jd2hpbGUgKCh0bi0+ZnVsbF9jaGlsZHJlbiA+IDAgJiYgIG1heF93b3JrLS0gJiYKLQkJNTAgKiAodG4tPmZ1bGxfY2hpbGRyZW4gKyB0bm9kZV9jaGlsZF9sZW5ndGgodG4pCi0JCSAgICAgIC0gdG4tPmVtcHR5X2NoaWxkcmVuKQotCQk+PSBpbmZsYXRlX3RocmVzaG9sZF91c2UgKiB0bm9kZV9jaGlsZF9sZW5ndGgodG4pKSkgewotCi0JCW9sZF90biA9IHRuOwotCQl0biA9IGluZmxhdGUodCwgdG4pOwotCi0JCWlmIChJU19FUlIodG4pKSB7Ci0JCQl0biA9IG9sZF90bjsKLSNpZmRlZiBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMKLQkJCXQtPnN0YXRzLnJlc2l6ZV9ub2RlX3NraXBwZWQrKzsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQljaGVja190bm9kZSh0bik7Ci0KLQkvKiBSZXR1cm4gaWYgYXQgbGVhc3Qgb25lIGluZmxhdGUgaXMgcnVuICovCi0JaWYgKG1heF93b3JrICE9IE1BWF9XT1JLKQotCQlyZXR1cm4gKHN0cnVjdCBydF90cmllX25vZGUgKikgdG47Ci0KLQkvKgotCSAqIEhhbHZlIGFzIGxvbmcgYXMgdGhlIG51bWJlciBvZiBlbXB0eSBjaGlsZHJlbiBpbiB0aGlzCi0JICogbm9kZSBpcyBhYm92ZSB0aHJlc2hvbGQuCi0JICovCi0KLQltYXhfd29yayA9IE1BWF9XT1JLOwotCXdoaWxlICh0bi0+Yml0cyA+IDEgJiYgIG1heF93b3JrLS0gJiYKLQkgICAgICAgMTAwICogKHRub2RlX2NoaWxkX2xlbmd0aCh0bikgLSB0bi0+ZW1wdHlfY2hpbGRyZW4pIDwKLQkgICAgICAgaGFsdmVfdGhyZXNob2xkX3VzZSAqIHRub2RlX2NoaWxkX2xlbmd0aCh0bikpIHsKLQotCQlvbGRfdG4gPSB0bjsKLQkJdG4gPSBoYWx2ZSh0LCB0bik7Ci0JCWlmIChJU19FUlIodG4pKSB7Ci0JCQl0biA9IG9sZF90bjsKLSNpZmRlZiBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMKLQkJCXQtPnN0YXRzLnJlc2l6ZV9ub2RlX3NraXBwZWQrKzsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQotCS8qIE9ubHkgb25lIGNoaWxkIHJlbWFpbnMgKi8KLQlpZiAodG4tPmVtcHR5X2NoaWxkcmVuID09IHRub2RlX2NoaWxkX2xlbmd0aCh0bikgLSAxKSB7Ci1vbmVfY2hpbGQ6Ci0JCWZvciAoaSA9IDA7IGkgPCB0bm9kZV9jaGlsZF9sZW5ndGgodG4pOyBpKyspIHsKLQkJCXN0cnVjdCBydF90cmllX25vZGUgKm47Ci0KLQkJCW4gPSBydG5sX2RlcmVmZXJlbmNlKHRuLT5jaGlsZFtpXSk7Ci0JCQlpZiAoIW4pCi0JCQkJY29udGludWU7Ci0KLQkJCS8qIGNvbXByZXNzIG9uZSBsZXZlbCAqLwotCi0JCQlub2RlX3NldF9wYXJlbnQobiwgTlVMTCk7Ci0JCQl0bm9kZV9mcmVlX3NhZmUodG4pOwotCQkJcmV0dXJuIG47Ci0JCX0KLQl9Ci0JcmV0dXJuIChzdHJ1Y3QgcnRfdHJpZV9ub2RlICopIHRuOwogfQogCi0KLXN0YXRpYyB2b2lkIHRub2RlX2NsZWFuX2ZyZWUoc3RydWN0IHRub2RlICp0bikKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRfY2hpbGRfcm9vdChzdHJ1Y3QgdG5vZGUgKnRwLCBzdHJ1Y3QgdHJpZSAqdCwKKwkJCQkgIHRfa2V5IGtleSwgc3RydWN0IHRub2RlICpuKQogewotCWludCBpOwotCXN0cnVjdCB0bm9kZSAqdG9mcmVlOwotCi0JZm9yIChpID0gMDsgaSA8IHRub2RlX2NoaWxkX2xlbmd0aCh0bik7IGkrKykgewotCQl0b2ZyZWUgPSAoc3RydWN0IHRub2RlICopcnRubF9kZXJlZmVyZW5jZSh0bi0+Y2hpbGRbaV0pOwotCQlpZiAodG9mcmVlKQotCQkJdG5vZGVfZnJlZSh0b2ZyZWUpOwotCX0KLQl0bm9kZV9mcmVlKHRuKTsKKwlpZiAodHApCisJCXB1dF9jaGlsZCh0cCwgZ2V0X2luZGV4KGtleSwgdHApLCBuKTsKKwllbHNlCisJCXJjdV9hc3NpZ25fcG9pbnRlcih0LT50cmllLCBuKTsKIH0KIAotc3RhdGljIHN0cnVjdCB0bm9kZSAqaW5mbGF0ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IHRub2RlICp0bikKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bm9kZV9mcmVlX2luaXQoc3RydWN0IHRub2RlICp0bikKIHsKLQlzdHJ1Y3QgdG5vZGUgKm9sZHRub2RlID0gdG47Ci0JaW50IG9sZW4gPSB0bm9kZV9jaGlsZF9sZW5ndGgodG4pOwotCWludCBpOworCXRuLT5yY3UubmV4dCA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bm9kZV9mcmVlX2FwcGVuZChzdHJ1Y3QgdG5vZGUgKnRuLCBzdHJ1Y3QgdG5vZGUgKm4pCit7CisJbi0+cmN1Lm5leHQgPSB0bi0+cmN1Lm5leHQ7CisJdG4tPnJjdS5uZXh0ID0gJm4tPnJjdTsKK30KKworc3RhdGljIHZvaWQgdG5vZGVfZnJlZShzdHJ1Y3QgdG5vZGUgKnRuKQoreworCXN0cnVjdCBjYWxsYmFja19oZWFkICpoZWFkID0gJnRuLT5yY3U7CisKKwl3aGlsZSAoaGVhZCkgeworCQloZWFkID0gaGVhZC0+bmV4dDsKKwkJdG5vZGVfZnJlZV9zaXplICs9IG9mZnNldG9mKHN0cnVjdCB0bm9kZSwgY2hpbGRbMSA8PCB0bi0+Yml0c10pOworCQlub2RlX2ZyZWUodG4pOworCisJCXRuID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCB0bm9kZSwgcmN1KTsKKwl9CisKKwlpZiAodG5vZGVfZnJlZV9zaXplID49IFBBR0VfU0laRSAqIHN5bmNfcGFnZXMpIHsKKwkJdG5vZGVfZnJlZV9zaXplID0gMDsKKwkJc3luY2hyb25pemVfcmN1KCk7CisJfQorfQorCitzdGF0aWMgdm9pZCByZXBsYWNlKHN0cnVjdCB0cmllICp0LCBzdHJ1Y3QgdG5vZGUgKm9sZHRub2RlLCBzdHJ1Y3QgdG5vZGUgKnRuKQoreworCXN0cnVjdCB0bm9kZSAqdHAgPSBub2RlX3BhcmVudChvbGR0bm9kZSk7CisJdW5zaWduZWQgbG9uZyBpOworCisJLyogc2V0dXAgdGhlIHBhcmVudCBwb2ludGVyIG91dCBvZiBhbmQgYmFjayBpbnRvIHRoaXMgbm9kZSAqLworCU5PREVfSU5JVF9QQVJFTlQodG4sIHRwKTsKKwlwdXRfY2hpbGRfcm9vdCh0cCwgdCwgdG4tPmtleSwgdG4pOworCisJLyogdXBkYXRlIGFsbCBvZiB0aGUgY2hpbGQgcGFyZW50IHBvaW50ZXJzICovCisJdXBkYXRlX2NoaWxkcmVuKHRuKTsKKworCS8qIGFsbCBwb2ludGVycyBzaG91bGQgYmUgY2xlYW4gc28gd2UgYXJlIGRvbmUgKi8KKwl0bm9kZV9mcmVlKG9sZHRub2RlKTsKKworCS8qIHJlc2l6ZSBjaGlsZHJlbiBub3cgdGhhdCBvbGR0bm9kZSBpcyBmcmVlZCAqLworCWZvciAoaSA9IHRub2RlX2NoaWxkX2xlbmd0aCh0bik7IGk7KSB7CisJCXN0cnVjdCB0bm9kZSAqaW5vZGUgPSB0bm9kZV9nZXRfY2hpbGQodG4sIC0taSk7CisKKwkJLyogcmVzaXplIGNoaWxkIG5vZGUgKi8KKwkJaWYgKHRub2RlX2Z1bGwodG4sIGlub2RlKSkKKwkJCXJlc2l6ZSh0LCBpbm9kZSk7CisJfQorfQorCitzdGF0aWMgaW50IGluZmxhdGUoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCB0bm9kZSAqb2xkdG5vZGUpCit7CisJc3RydWN0IHRub2RlICp0bjsKKwl1bnNpZ25lZCBsb25nIGk7CisJdF9rZXkgbTsKIAogCXByX2RlYnVnKCJJbiBpbmZsYXRlXG4iKTsKIAotCXRuID0gdG5vZGVfbmV3KG9sZHRub2RlLT5rZXksIG9sZHRub2RlLT5wb3MsIG9sZHRub2RlLT5iaXRzICsgMSk7Ci0KKwl0biA9IHRub2RlX25ldyhvbGR0bm9kZS0+a2V5LCBvbGR0bm9kZS0+cG9zIC0gMSwgb2xkdG5vZGUtPmJpdHMgKyAxKTsKIAlpZiAoIXRuKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKgotCSAqIFByZWFsbG9jYXRlIGFuZCBzdG9yZSB0bm9kZXMgYmVmb3JlIHRoZSBhY3R1YWwgd29yayBzbyB3ZQotCSAqIGRvbid0IGdldCBpbnRvIGFuIGluY29uc2lzdGVudCBzdGF0ZSBpZiBtZW1vcnkgYWxsb2NhdGlvbgotCSAqIGZhaWxzLiBJbiBjYXNlIG9mIGZhaWx1cmUgd2UgcmV0dXJuIHRoZSBvbGRub2RlIGFuZCAgaW5mbGF0ZQotCSAqIG9mIHRub2RlIGlzIGlnbm9yZWQuCisJLyogcHJlcGFyZSBvbGR0bm9kZSB0byBiZSBmcmVlZCAqLworCXRub2RlX2ZyZWVfaW5pdChvbGR0bm9kZSk7CisKKwkvKiBBc3NlbWJsZSBhbGwgb2YgdGhlIHBvaW50ZXJzIGluIG91ciBjbHVzdGVyLCBpbiB0aGlzIGNhc2UgdGhhdAorCSAqIHJlcHJlc2VudHMgYWxsIG9mIHRoZSBwb2ludGVycyBvdXQgb2Ygb3VyIGFsbG9jYXRlZCBub2RlcyB0aGF0CisJICogcG9pbnQgdG8gZXhpc3RpbmcgdG5vZGVzIGFuZCB0aGUgbGlua3MgYmV0d2VlbiBvdXIgYWxsb2NhdGVkCisJICogbm9kZXMuCiAJICovCi0KLQlmb3IgKGkgPSAwOyBpIDwgb2xlbjsgaSsrKSB7Ci0JCXN0cnVjdCB0bm9kZSAqaW5vZGU7Ci0KLQkJaW5vZGUgPSAoc3RydWN0IHRub2RlICopIHRub2RlX2dldF9jaGlsZChvbGR0bm9kZSwgaSk7Ci0JCWlmIChpbm9kZSAmJgotCQkgICAgSVNfVE5PREUoaW5vZGUpICYmCi0JCSAgICBpbm9kZS0+cG9zID09IG9sZHRub2RlLT5wb3MgKyBvbGR0bm9kZS0+Yml0cyAmJgotCQkgICAgaW5vZGUtPmJpdHMgPiAxKSB7Ci0JCQlzdHJ1Y3QgdG5vZGUgKmxlZnQsICpyaWdodDsKLQkJCXRfa2V5IG0gPSB+MFUgPDwgKEtFWUxFTkdUSCAtIDEpID4+IGlub2RlLT5wb3M7Ci0KLQkJCWxlZnQgPSB0bm9kZV9uZXcoaW5vZGUtPmtleSYofm0pLCBpbm9kZS0+cG9zICsgMSwKLQkJCQkJIGlub2RlLT5iaXRzIC0gMSk7Ci0JCQlpZiAoIWxlZnQpCi0JCQkJZ290byBub21lbTsKLQotCQkJcmlnaHQgPSB0bm9kZV9uZXcoaW5vZGUtPmtleXxtLCBpbm9kZS0+cG9zICsgMSwKLQkJCQkJICBpbm9kZS0+Yml0cyAtIDEpOwotCi0JCQlpZiAoIXJpZ2h0KSB7Ci0JCQkJdG5vZGVfZnJlZShsZWZ0KTsKLQkJCQlnb3RvIG5vbWVtOwotCQkJfQotCi0JCQlwdXRfY2hpbGQodG4sIDIqaSwgKHN0cnVjdCBydF90cmllX25vZGUgKikgbGVmdCk7Ci0JCQlwdXRfY2hpbGQodG4sIDIqaSsxLCAoc3RydWN0IHJ0X3RyaWVfbm9kZSAqKSByaWdodCk7Ci0JCX0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgb2xlbjsgaSsrKSB7Ci0JCXN0cnVjdCB0bm9kZSAqaW5vZGU7Ci0JCXN0cnVjdCBydF90cmllX25vZGUgKm5vZGUgPSB0bm9kZV9nZXRfY2hpbGQob2xkdG5vZGUsIGkpOwotCQlzdHJ1Y3QgdG5vZGUgKmxlZnQsICpyaWdodDsKLQkJaW50IHNpemUsIGo7CisJZm9yIChpID0gdG5vZGVfY2hpbGRfbGVuZ3RoKG9sZHRub2RlKSwgbSA9IDF1IDw8IHRuLT5wb3M7IGk7KSB7CisJCXN0cnVjdCB0bm9kZSAqaW5vZGUgPSB0bm9kZV9nZXRfY2hpbGQob2xkdG5vZGUsIC0taSk7CisJCXN0cnVjdCB0bm9kZSAqbm9kZTAsICpub2RlMTsKKwkJdW5zaWduZWQgbG9uZyBqLCBrOwogCiAJCS8qIEFuIGVtcHR5IGNoaWxkICovCi0JCWlmIChub2RlID09IE5VTEwpCisJCWlmIChpbm9kZSA9PSBOVUxMKQogCQkJY29udGludWU7CiAKIAkJLyogQSBsZWFmIG9yIGFuIGludGVybmFsIG5vZGUgd2l0aCBza2lwcGVkIGJpdHMgKi8KLQotCQlpZiAoSVNfTEVBRihub2RlKSB8fCAoKHN0cnVjdCB0bm9kZSAqKSBub2RlKS0+cG9zID4KLQkJICAgdG4tPnBvcyArIHRuLT5iaXRzIC0gMSkgewotCQkJcHV0X2NoaWxkKHRuLAotCQkJCXRrZXlfZXh0cmFjdF9iaXRzKG5vZGUtPmtleSwgb2xkdG5vZGUtPnBvcywgb2xkdG5vZGUtPmJpdHMgKyAxKSwKLQkJCQlub2RlKTsKKwkJaWYgKCF0bm9kZV9mdWxsKG9sZHRub2RlLCBpbm9kZSkpIHsKKwkJCXB1dF9jaGlsZCh0biwgZ2V0X2luZGV4KGlub2RlLT5rZXksIHRuKSwgaW5vZGUpOwogCQkJY29udGludWU7CiAJCX0KIAorCQkvKiBkcm9wIHRoZSBub2RlIGluIHRoZSBvbGQgdG5vZGUgZnJlZSBsaXN0ICovCisJCXRub2RlX2ZyZWVfYXBwZW5kKG9sZHRub2RlLCBpbm9kZSk7CisKIAkJLyogQW4gaW50ZXJuYWwgbm9kZSB3aXRoIHR3byBjaGlsZHJlbiAqLwotCQlpbm9kZSA9IChzdHJ1Y3QgdG5vZGUgKikgbm9kZTsKLQogCQlpZiAoaW5vZGUtPmJpdHMgPT0gMSkgewotCQkJcHV0X2NoaWxkKHRuLCAyKmksIHJ0bmxfZGVyZWZlcmVuY2UoaW5vZGUtPmNoaWxkWzBdKSk7Ci0JCQlwdXRfY2hpbGQodG4sIDIqaSsxLCBydG5sX2RlcmVmZXJlbmNlKGlub2RlLT5jaGlsZFsxXSkpOwotCi0JCQl0bm9kZV9mcmVlX3NhZmUoaW5vZGUpOworCQkJcHV0X2NoaWxkKHRuLCAyICogaSArIDEsIHRub2RlX2dldF9jaGlsZChpbm9kZSwgMSkpOworCQkJcHV0X2NoaWxkKHRuLCAyICogaSwgdG5vZGVfZ2V0X2NoaWxkKGlub2RlLCAwKSk7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qIEFuIGludGVybmFsIG5vZGUgd2l0aCBtb3JlIHRoYW4gdHdvIGNoaWxkcmVuICovCi0KIAkJLyogV2Ugd2lsbCByZXBsYWNlIHRoaXMgbm9kZSAnaW5vZGUnIHdpdGggdHdvIG5ldwotCQkgKiBvbmVzLCAnbGVmdCcgYW5kICdyaWdodCcsIGVhY2ggd2l0aCBoYWxmIG9mIHRoZQorCQkgKiBvbmVzLCAnbm9kZTAnIGFuZCAnbm9kZTEnLCBlYWNoIHdpdGggaGFsZiBvZiB0aGUKIAkJICogb3JpZ2luYWwgY2hpbGRyZW4uIFRoZSB0d28gbmV3IG5vZGVzIHdpbGwgaGF2ZQogCQkgKiBhIHBvc2l0aW9uIG9uZSBiaXQgZnVydGhlciBkb3duIHRoZSBrZXkgYW5kIHRoaXMKIAkJICogbWVhbnMgdGhhdCB0aGUgInNpZ25pZmljYW50IiBwYXJ0IG9mIHRoZWlyIGtleXMKIAkJICogKHNlZSB0aGUgZGlzY3Vzc2lvbiBuZWFyIHRoZSB0b3Agb2YgdGhpcyBmaWxlKQogCQkgKiB3aWxsIGRpZmZlciBieSBvbmUgYml0LCB3aGljaCB3aWxsIGJlICIwIiBpbgotCQkgKiBsZWZ0J3Mga2V5IGFuZCAiMSIgaW4gcmlnaHQncyBrZXkuIFNpbmNlIHdlIGFyZQorCQkgKiBub2RlMCdzIGtleSBhbmQgIjEiIGluIG5vZGUxJ3Mga2V5LiBTaW5jZSB3ZSBhcmUKIAkJICogbW92aW5nIHRoZSBrZXkgcG9zaXRpb24gYnkgb25lIHN0ZXAsIHRoZSBiaXQgdGhhdAogCQkgKiB3ZSBhcmUgbW92aW5nIGF3YXkgZnJvbSAtIHRoZSBiaXQgYXQgcG9zaXRpb24KLQkJICogKGlub2RlLT5wb3MpIC0gaXMgdGhlIG9uZSB0aGF0IHdpbGwgZGlmZmVyIGJldHdlZW4KLQkJICogbGVmdCBhbmQgcmlnaHQuIFNvLi4uIHdlIHN5bnRoZXNpemUgdGhhdCBiaXQgaW4gdGhlCi0JCSAqIHR3byAgbmV3IGtleXMuCi0JCSAqIFRoZSBtYXNrICdtJyBiZWxvdyB3aWxsIGJlIGEgc2luZ2xlICJvbmUiIGJpdCBhdAotCQkgKiB0aGUgcG9zaXRpb24gKGlub2RlLT5wb3MpCisJCSAqICh0bi0+cG9zKSAtIGlzIHRoZSBvbmUgdGhhdCB3aWxsIGRpZmZlciBiZXR3ZWVuCisJCSAqIG5vZGUwIGFuZCBub2RlMS4gU28uLi4gd2Ugc3ludGhlc2l6ZSB0aGF0IGJpdCBpbiB0aGUKKwkJICogdHdvIG5ldyBrZXlzLgogCQkgKi8KKwkJbm9kZTEgPSB0bm9kZV9uZXcoaW5vZGUtPmtleSB8IG0sIGlub2RlLT5wb3MsIGlub2RlLT5iaXRzIC0gMSk7CisJCWlmICghbm9kZTEpCisJCQlnb3RvIG5vbWVtOworCQlub2RlMCA9IHRub2RlX25ldyhpbm9kZS0+a2V5LCBpbm9kZS0+cG9zLCBpbm9kZS0+Yml0cyAtIDEpOwogCi0JCS8qIFVzZSB0aGUgb2xkIGtleSwgYnV0IHNldCB0aGUgbmV3IHNpZ25pZmljYW50Ci0JCSAqICAgYml0IHRvIHplcm8uCi0JCSAqLworCQl0bm9kZV9mcmVlX2FwcGVuZCh0biwgbm9kZTEpOworCQlpZiAoIW5vZGUwKQorCQkJZ290byBub21lbTsKKwkJdG5vZGVfZnJlZV9hcHBlbmQodG4sIG5vZGUwKTsKIAotCQlsZWZ0ID0gKHN0cnVjdCB0bm9kZSAqKSB0bm9kZV9nZXRfY2hpbGQodG4sIDIqaSk7Ci0JCXB1dF9jaGlsZCh0biwgMippLCBOVUxMKTsKLQotCQlCVUdfT04oIWxlZnQpOwotCi0JCXJpZ2h0ID0gKHN0cnVjdCB0bm9kZSAqKSB0bm9kZV9nZXRfY2hpbGQodG4sIDIqaSsxKTsKLQkJcHV0X2NoaWxkKHRuLCAyKmkrMSwgTlVMTCk7Ci0KLQkJQlVHX09OKCFyaWdodCk7Ci0KLQkJc2l6ZSA9IHRub2RlX2NoaWxkX2xlbmd0aChsZWZ0KTsKLQkJZm9yIChqID0gMDsgaiA8IHNpemU7IGorKykgewotCQkJcHV0X2NoaWxkKGxlZnQsIGosIHJ0bmxfZGVyZWZlcmVuY2UoaW5vZGUtPmNoaWxkW2pdKSk7Ci0JCQlwdXRfY2hpbGQocmlnaHQsIGosIHJ0bmxfZGVyZWZlcmVuY2UoaW5vZGUtPmNoaWxkW2ogKyBzaXplXSkpOworCQkvKiBwb3B1bGF0ZSBjaGlsZCBwb2ludGVycyBpbiBuZXcgbm9kZXMgKi8KKwkJZm9yIChrID0gdG5vZGVfY2hpbGRfbGVuZ3RoKGlub2RlKSwgaiA9IGsgLyAyOyBqOykgeworCQkJcHV0X2NoaWxkKG5vZGUxLCAtLWosIHRub2RlX2dldF9jaGlsZChpbm9kZSwgLS1rKSk7CisJCQlwdXRfY2hpbGQobm9kZTAsIGosIHRub2RlX2dldF9jaGlsZChpbm9kZSwgaikpOworCQkJcHV0X2NoaWxkKG5vZGUxLCAtLWosIHRub2RlX2dldF9jaGlsZChpbm9kZSwgLS1rKSk7CisJCQlwdXRfY2hpbGQobm9kZTAsIGosIHRub2RlX2dldF9jaGlsZChpbm9kZSwgaikpOwogCQl9Ci0JCXB1dF9jaGlsZCh0biwgMippLCByZXNpemUodCwgbGVmdCkpOwotCQlwdXRfY2hpbGQodG4sIDIqaSsxLCByZXNpemUodCwgcmlnaHQpKTsKIAotCQl0bm9kZV9mcmVlX3NhZmUoaW5vZGUpOworCQkvKiBsaW5rIG5ldyBub2RlcyB0byBwYXJlbnQgKi8KKwkJTk9ERV9JTklUX1BBUkVOVChub2RlMSwgdG4pOworCQlOT0RFX0lOSVRfUEFSRU5UKG5vZGUwLCB0bik7CisKKwkJLyogbGluayBwYXJlbnQgdG8gbm9kZXMgKi8KKwkJcHV0X2NoaWxkKHRuLCAyICogaSArIDEsIG5vZGUxKTsKKwkJcHV0X2NoaWxkKHRuLCAyICogaSwgbm9kZTApOwogCX0KLQl0bm9kZV9mcmVlX3NhZmUob2xkdG5vZGUpOwotCXJldHVybiB0bjsKKworCS8qIHNldHVwIHRoZSBwYXJlbnQgcG9pbnRlcnMgaW50byBhbmQgb3V0IG9mIHRoaXMgbm9kZSAqLworCXJlcGxhY2UodCwgb2xkdG5vZGUsIHRuKTsKKworCXJldHVybiAwOwogbm9tZW06Ci0JdG5vZGVfY2xlYW5fZnJlZSh0bik7Ci0JcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJLyogYWxsIHBvaW50ZXJzIHNob3VsZCBiZSBjbGVhbiBzbyB3ZSBhcmUgZG9uZSAqLworCXRub2RlX2ZyZWUodG4pOworCXJldHVybiAtRU5PTUVNOwogfQogCi1zdGF0aWMgc3RydWN0IHRub2RlICpoYWx2ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IHRub2RlICp0bikKK3N0YXRpYyBpbnQgaGFsdmUoc3RydWN0IHRyaWUgKnQsIHN0cnVjdCB0bm9kZSAqb2xkdG5vZGUpCiB7Ci0Jc3RydWN0IHRub2RlICpvbGR0bm9kZSA9IHRuOwotCXN0cnVjdCBydF90cmllX25vZGUgKmxlZnQsICpyaWdodDsKLQlpbnQgaTsKLQlpbnQgb2xlbiA9IHRub2RlX2NoaWxkX2xlbmd0aCh0bik7CisJc3RydWN0IHRub2RlICp0bjsKKwl1bnNpZ25lZCBsb25nIGk7CiAKIAlwcl9kZWJ1ZygiSW4gaGFsdmVcbiIpOwogCi0JdG4gPSB0bm9kZV9uZXcob2xkdG5vZGUtPmtleSwgb2xkdG5vZGUtPnBvcywgb2xkdG5vZGUtPmJpdHMgLSAxKTsKLQorCXRuID0gdG5vZGVfbmV3KG9sZHRub2RlLT5rZXksIG9sZHRub2RlLT5wb3MgKyAxLCBvbGR0bm9kZS0+Yml0cyAtIDEpOwogCWlmICghdG4pCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlyZXR1cm4gLUVOT01FTTsKIAotCS8qCi0JICogUHJlYWxsb2NhdGUgYW5kIHN0b3JlIHRub2RlcyBiZWZvcmUgdGhlIGFjdHVhbCB3b3JrIHNvIHdlCi0JICogZG9uJ3QgZ2V0IGludG8gYW4gaW5jb25zaXN0ZW50IHN0YXRlIGlmIG1lbW9yeSBhbGxvY2F0aW9uCi0JICogZmFpbHMuIEluIGNhc2Ugb2YgZmFpbHVyZSB3ZSByZXR1cm4gdGhlIG9sZG5vZGUgYW5kIGhhbHZlCi0JICogb2YgdG5vZGUgaXMgaWdub3JlZC4KKwkvKiBwcmVwYXJlIG9sZHRub2RlIHRvIGJlIGZyZWVkICovCisJdG5vZGVfZnJlZV9pbml0KG9sZHRub2RlKTsKKworCS8qIEFzc2VtYmxlIGFsbCBvZiB0aGUgcG9pbnRlcnMgaW4gb3VyIGNsdXN0ZXIsIGluIHRoaXMgY2FzZSB0aGF0CisJICogcmVwcmVzZW50cyBhbGwgb2YgdGhlIHBvaW50ZXJzIG91dCBvZiBvdXIgYWxsb2NhdGVkIG5vZGVzIHRoYXQKKwkgKiBwb2ludCB0byBleGlzdGluZyB0bm9kZXMgYW5kIHRoZSBsaW5rcyBiZXR3ZWVuIG91ciBhbGxvY2F0ZWQKKwkgKiBub2Rlcy4KIAkgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBvbGVuOyBpICs9IDIpIHsKLQkJbGVmdCA9IHRub2RlX2dldF9jaGlsZChvbGR0bm9kZSwgaSk7Ci0JCXJpZ2h0ID0gdG5vZGVfZ2V0X2NoaWxkKG9sZHRub2RlLCBpKzEpOwotCi0JCS8qIFR3byBub25lbXB0eSBjaGlsZHJlbiAqLwotCQlpZiAobGVmdCAmJiByaWdodCkgewotCQkJc3RydWN0IHRub2RlICpuZXduOwotCi0JCQluZXduID0gdG5vZGVfbmV3KGxlZnQtPmtleSwgdG4tPnBvcyArIHRuLT5iaXRzLCAxKTsKLQotCQkJaWYgKCFuZXduKQotCQkJCWdvdG8gbm9tZW07Ci0KLQkJCXB1dF9jaGlsZCh0biwgaS8yLCAoc3RydWN0IHJ0X3RyaWVfbm9kZSAqKW5ld24pOwotCQl9Ci0KLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgb2xlbjsgaSArPSAyKSB7Ci0JCXN0cnVjdCB0bm9kZSAqbmV3QmluTm9kZTsKLQotCQlsZWZ0ID0gdG5vZGVfZ2V0X2NoaWxkKG9sZHRub2RlLCBpKTsKLQkJcmlnaHQgPSB0bm9kZV9nZXRfY2hpbGQob2xkdG5vZGUsIGkrMSk7CisJZm9yIChpID0gdG5vZGVfY2hpbGRfbGVuZ3RoKG9sZHRub2RlKTsgaTspIHsKKwkJc3RydWN0IHRub2RlICpub2RlMSA9IHRub2RlX2dldF9jaGlsZChvbGR0bm9kZSwgLS1pKTsKKwkJc3RydWN0IHRub2RlICpub2RlMCA9IHRub2RlX2dldF9jaGlsZChvbGR0bm9kZSwgLS1pKTsKKwkJc3RydWN0IHRub2RlICppbm9kZTsKIAogCQkvKiBBdCBsZWFzdCBvbmUgb2YgdGhlIGNoaWxkcmVuIGlzIGVtcHR5ICovCi0JCWlmIChsZWZ0ID09IE5VTEwpIHsKLQkJCWlmIChyaWdodCA9PSBOVUxMKSAgICAvKiBCb3RoIGFyZSBlbXB0eSAqLwotCQkJCWNvbnRpbnVlOwotCQkJcHV0X2NoaWxkKHRuLCBpLzIsIHJpZ2h0KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHJpZ2h0ID09IE5VTEwpIHsKLQkJCXB1dF9jaGlsZCh0biwgaS8yLCBsZWZ0KTsKKwkJaWYgKCFub2RlMSB8fCAhbm9kZTApIHsKKwkJCXB1dF9jaGlsZCh0biwgaSAvIDIsIG5vZGUxID8gOiBub2RlMCk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCS8qIFR3byBub25lbXB0eSBjaGlsZHJlbiAqLwotCQluZXdCaW5Ob2RlID0gKHN0cnVjdCB0bm9kZSAqKSB0bm9kZV9nZXRfY2hpbGQodG4sIGkvMik7Ci0JCXB1dF9jaGlsZCh0biwgaS8yLCBOVUxMKTsKLQkJcHV0X2NoaWxkKG5ld0Jpbk5vZGUsIDAsIGxlZnQpOwotCQlwdXRfY2hpbGQobmV3QmluTm9kZSwgMSwgcmlnaHQpOwotCQlwdXRfY2hpbGQodG4sIGkvMiwgcmVzaXplKHQsIG5ld0Jpbk5vZGUpKTsKKwkJaW5vZGUgPSB0bm9kZV9uZXcobm9kZTAtPmtleSwgb2xkdG5vZGUtPnBvcywgMSk7CisJCWlmICghaW5vZGUpIHsKKwkJCXRub2RlX2ZyZWUodG4pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJdG5vZGVfZnJlZV9hcHBlbmQodG4sIGlub2RlKTsKKworCQkvKiBpbml0aWFsaXplIHBvaW50ZXJzIG91dCBvZiBub2RlICovCisJCXB1dF9jaGlsZChpbm9kZSwgMSwgbm9kZTEpOworCQlwdXRfY2hpbGQoaW5vZGUsIDAsIG5vZGUwKTsKKwkJTk9ERV9JTklUX1BBUkVOVChpbm9kZSwgdG4pOworCisJCS8qIGxpbmsgcGFyZW50IHRvIG5vZGUgKi8KKwkJcHV0X2NoaWxkKHRuLCBpIC8gMiwgaW5vZGUpOwogCX0KLQl0bm9kZV9mcmVlX3NhZmUob2xkdG5vZGUpOwotCXJldHVybiB0bjsKLW5vbWVtOgotCXRub2RlX2NsZWFuX2ZyZWUodG4pOwotCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJLyogc2V0dXAgdGhlIHBhcmVudCBwb2ludGVycyBpbnRvIGFuZCBvdXQgb2YgdGhpcyBub2RlICovCisJcmVwbGFjZSh0LCBvbGR0bm9kZSwgdG4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvbGxhcHNlKHN0cnVjdCB0cmllICp0LCBzdHJ1Y3QgdG5vZGUgKm9sZHRub2RlKQoreworCXN0cnVjdCB0bm9kZSAqbiwgKnRwOworCXVuc2lnbmVkIGxvbmcgaTsKKworCS8qIHNjYW4gdGhlIHRub2RlIGxvb2tpbmcgZm9yIHRoYXQgb25lIGNoaWxkIHRoYXQgbWlnaHQgc3RpbGwgZXhpc3QgKi8KKwlmb3IgKG4gPSBOVUxMLCBpID0gdG5vZGVfY2hpbGRfbGVuZ3RoKG9sZHRub2RlKTsgIW4gJiYgaTspCisJCW4gPSB0bm9kZV9nZXRfY2hpbGQob2xkdG5vZGUsIC0taSk7CisKKwkvKiBjb21wcmVzcyBvbmUgbGV2ZWwgKi8KKwl0cCA9IG5vZGVfcGFyZW50KG9sZHRub2RlKTsKKwlwdXRfY2hpbGRfcm9vdCh0cCwgdCwgb2xkdG5vZGUtPmtleSwgbik7CisJbm9kZV9zZXRfcGFyZW50KG4sIHRwKTsKKworCS8qIGRyb3AgZGVhZCBub2RlICovCisJbm9kZV9mcmVlKG9sZHRub2RlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgdXBkYXRlX3N1ZmZpeChzdHJ1Y3QgdG5vZGUgKnRuKQoreworCXVuc2lnbmVkIGNoYXIgc2xlbiA9IHRuLT5wb3M7CisJdW5zaWduZWQgbG9uZyBzdHJpZGUsIGk7CisKKwkvKiBzZWFyY2ggdGhvdWdoIHRoZSBsaXN0IG9mIGNoaWxkcmVuIGxvb2tpbmcgZm9yIG5vZGVzIHRoYXQgbWlnaHQKKwkgKiBoYXZlIGEgc3VmZml4IGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGN1cnJlbnRseSBoYXZlLiAgVGhpcyBpcworCSAqIHdoeSB3ZSBzdGFydCB3aXRoIGEgc3RyaWRlIG9mIDIgc2luY2UgYSBzdHJpZGUgb2YgMSB3b3VsZAorCSAqIHJlcHJlc2VudCB0aGUgbm9kZXMgd2l0aCBzdWZmaXggbGVuZ3RoIGVxdWFsIHRvIHRuLT5wb3MKKwkgKi8KKwlmb3IgKGkgPSAwLCBzdHJpZGUgPSAweDJ1bCA7IGkgPCB0bm9kZV9jaGlsZF9sZW5ndGgodG4pOyBpICs9IHN0cmlkZSkgeworCQlzdHJ1Y3QgdG5vZGUgKm4gPSB0bm9kZV9nZXRfY2hpbGQodG4sIGkpOworCisJCWlmICghbiB8fCAobi0+c2xlbiA8PSBzbGVuKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIHVwZGF0ZSBzdHJpZGUgYW5kIHNsZW4gYmFzZWQgb24gbmV3IHZhbHVlICovCisJCXN0cmlkZSA8PD0gKG4tPnNsZW4gLSBzbGVuKTsKKwkJc2xlbiA9IG4tPnNsZW47CisJCWkgJj0gfihzdHJpZGUgLSAxKTsKKworCQkvKiBpZiBzbGVuIGNvdmVycyBhbGwgYnV0IHRoZSBsYXN0IGJpdCB3ZSBjYW4gc3RvcCBoZXJlCisJCSAqIHRoZXJlIHdpbGwgYmUgbm90aGluZyBsb25nZXIgdGhhbiB0aGF0IHNpbmNlIG9ubHkgbm9kZQorCQkgKiAwIGFuZCAxIDw8IChiaXRzIC0gMSkgY291bGQgaGF2ZSB0aGF0IGFzIHRoZWlyIHN1ZmZpeAorCQkgKiBsZW5ndGguCisJCSAqLworCQlpZiAoKHNsZW4gKyAxKSA+PSAodG4tPnBvcyArIHRuLT5iaXRzKSkKKwkJCWJyZWFrOworCX0KKworCXRuLT5zbGVuID0gc2xlbjsKKworCXJldHVybiBzbGVuOworfQorCisvKiBGcm9tICJJbXBsZW1lbnRpbmcgYSBkeW5hbWljIGNvbXByZXNzZWQgdHJpZSIgYnkgU3RlZmFuIE5pbHNzb24gb2YKKyAqIHRoZSBIZWxzaW5raSBVbml2ZXJzaXR5IG9mIFRlY2hub2xvZ3kgYW5kIE1hdHRpIFRpa2thbmVuIG9mIE5va2lhCisgKiBUZWxlY29tbXVuaWNhdGlvbnMsIHBhZ2UgNjoKKyAqICJBIG5vZGUgaXMgZG91YmxlZCBpZiB0aGUgcmF0aW8gb2Ygbm9uLWVtcHR5IGNoaWxkcmVuIHRvIGFsbAorICogY2hpbGRyZW4gaW4gdGhlICpkb3VibGVkKiBub2RlIGlzIGF0IGxlYXN0ICdoaWdoJy4iCisgKgorICogJ2hpZ2gnIGluIHRoaXMgaW5zdGFuY2UgaXMgdGhlIHZhcmlhYmxlICdpbmZsYXRlX3RocmVzaG9sZCcuIEl0CisgKiBpcyBleHByZXNzZWQgYXMgYSBwZXJjZW50YWdlLCBzbyB3ZSBtdWx0aXBseSBpdCB3aXRoCisgKiB0bm9kZV9jaGlsZF9sZW5ndGgoKSBhbmQgaW5zdGVhZCBvZiBtdWx0aXBseWluZyBieSAyIChzaW5jZSB0aGUKKyAqIGNoaWxkIGFycmF5IHdpbGwgYmUgZG91YmxlZCBieSBpbmZsYXRlKCkpIGFuZCBtdWx0aXBseWluZworICogdGhlIGxlZnQtaGFuZCBzaWRlIGJ5IDEwMCAodG8gaGFuZGxlIHRoZSBwZXJjZW50YWdlIHRoaW5nKSB3ZQorICogbXVsdGlwbHkgdGhlIGxlZnQtaGFuZCBzaWRlIGJ5IDUwLgorICoKKyAqIFRoZSBsZWZ0LWhhbmQgc2lkZSBtYXkgbG9vayBhIGJpdCB3ZWlyZDogdG5vZGVfY2hpbGRfbGVuZ3RoKHRuKQorICogLSB0bi0+ZW1wdHlfY2hpbGRyZW4gaXMgb2YgY291cnNlIHRoZSBudW1iZXIgb2Ygbm9uLW51bGwgY2hpbGRyZW4KKyAqIGluIHRoZSBjdXJyZW50IG5vZGUuIHRuLT5mdWxsX2NoaWxkcmVuIGlzIHRoZSBudW1iZXIgb2YgImZ1bGwiCisgKiBjaGlsZHJlbiwgdGhhdCBpcyBub24tbnVsbCB0bm9kZXMgd2l0aCBhIHNraXAgdmFsdWUgb2YgMC4KKyAqIEFsbCBvZiB0aG9zZSB3aWxsIGJlIGRvdWJsZWQgaW4gdGhlIHJlc3VsdGluZyBpbmZsYXRlZCB0bm9kZSwgc28KKyAqIHdlIGp1c3QgY291bnQgdGhlbSBvbmUgZXh0cmEgdGltZSBoZXJlLgorICoKKyAqIEEgY2xlYXJlciB3YXkgdG8gd3JpdGUgdGhpcyB3b3VsZCBiZToKKyAqCisgKiB0b19iZV9kb3VibGVkID0gdG4tPmZ1bGxfY2hpbGRyZW47CisgKiBub3RfdG9fYmVfZG91YmxlZCA9IHRub2RlX2NoaWxkX2xlbmd0aCh0bikgLSB0bi0+ZW1wdHlfY2hpbGRyZW4gLQorICogICAgIHRuLT5mdWxsX2NoaWxkcmVuOworICoKKyAqIG5ld19jaGlsZF9sZW5ndGggPSB0bm9kZV9jaGlsZF9sZW5ndGgodG4pICogMjsKKyAqCisgKiBuZXdfZmlsbF9mYWN0b3IgPSAxMDAgKiAobm90X3RvX2JlX2RvdWJsZWQgKyAyKnRvX2JlX2RvdWJsZWQpIC8KKyAqICAgICAgbmV3X2NoaWxkX2xlbmd0aDsKKyAqIGlmIChuZXdfZmlsbF9mYWN0b3IgPj0gaW5mbGF0ZV90aHJlc2hvbGQpCisgKgorICogLi4uYW5kIHNvIG9uLCB0aG8gaXQgd291bGQgbWVzcyB1cCB0aGUgd2hpbGUgKCkgbG9vcC4KKyAqCisgKiBhbnl3YXksCisgKiAxMDAgKiAobm90X3RvX2JlX2RvdWJsZWQgKyAyKnRvX2JlX2RvdWJsZWQpIC8gbmV3X2NoaWxkX2xlbmd0aCA+PQorICogICAgICBpbmZsYXRlX3RocmVzaG9sZAorICoKKyAqIGF2b2lkIGEgZGl2aXNpb246CisgKiAxMDAgKiAobm90X3RvX2JlX2RvdWJsZWQgKyAyKnRvX2JlX2RvdWJsZWQpID49CisgKiAgICAgIGluZmxhdGVfdGhyZXNob2xkICogbmV3X2NoaWxkX2xlbmd0aAorICoKKyAqIGV4cGFuZCBub3RfdG9fYmVfZG91YmxlZCBhbmQgdG9fYmVfZG91YmxlZCwgYW5kIHNob3J0ZW46CisgKiAxMDAgKiAodG5vZGVfY2hpbGRfbGVuZ3RoKHRuKSAtIHRuLT5lbXB0eV9jaGlsZHJlbiArCisgKiAgICB0bi0+ZnVsbF9jaGlsZHJlbikgPj0gaW5mbGF0ZV90aHJlc2hvbGQgKiBuZXdfY2hpbGRfbGVuZ3RoCisgKgorICogZXhwYW5kIG5ld19jaGlsZF9sZW5ndGg6CisgKiAxMDAgKiAodG5vZGVfY2hpbGRfbGVuZ3RoKHRuKSAtIHRuLT5lbXB0eV9jaGlsZHJlbiArCisgKiAgICB0bi0+ZnVsbF9jaGlsZHJlbikgPj0KKyAqICAgICAgaW5mbGF0ZV90aHJlc2hvbGQgKiB0bm9kZV9jaGlsZF9sZW5ndGgodG4pICogMgorICoKKyAqIHNob3J0ZW4gYWdhaW46CisgKiA1MCAqICh0bi0+ZnVsbF9jaGlsZHJlbiArIHRub2RlX2NoaWxkX2xlbmd0aCh0bikgLQorICogICAgdG4tPmVtcHR5X2NoaWxkcmVuKSA+PSBpbmZsYXRlX3RocmVzaG9sZCAqCisgKiAgICB0bm9kZV9jaGlsZF9sZW5ndGgodG4pCisgKgorICovCitzdGF0aWMgYm9vbCBzaG91bGRfaW5mbGF0ZShjb25zdCBzdHJ1Y3QgdG5vZGUgKnRwLCBjb25zdCBzdHJ1Y3QgdG5vZGUgKnRuKQoreworCXVuc2lnbmVkIGxvbmcgdXNlZCA9IHRub2RlX2NoaWxkX2xlbmd0aCh0bik7CisJdW5zaWduZWQgbG9uZyB0aHJlc2hvbGQgPSB1c2VkOworCisJLyogS2VlcCByb290IG5vZGUgbGFyZ2VyICovCisJdGhyZXNob2xkICo9IHRwID8gaW5mbGF0ZV90aHJlc2hvbGQgOiBpbmZsYXRlX3RocmVzaG9sZF9yb290OworCXVzZWQgLT0gdG4tPmVtcHR5X2NoaWxkcmVuOworCXVzZWQgKz0gdG4tPmZ1bGxfY2hpbGRyZW47CisKKwkvKiBpZiBiaXRzID09IEtFWUxFTkdUSCB0aGVuIHBvcyA9IDAsIGFuZCB3aWxsIGZhaWwgYmVsb3cgKi8KKworCXJldHVybiAodXNlZCA+IDEpICYmIHRuLT5wb3MgJiYgKCg1MCAqIHVzZWQpID49IHRocmVzaG9sZCk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZF9oYWx2ZShjb25zdCBzdHJ1Y3QgdG5vZGUgKnRwLCBjb25zdCBzdHJ1Y3QgdG5vZGUgKnRuKQoreworCXVuc2lnbmVkIGxvbmcgdXNlZCA9IHRub2RlX2NoaWxkX2xlbmd0aCh0bik7CisJdW5zaWduZWQgbG9uZyB0aHJlc2hvbGQgPSB1c2VkOworCisJLyogS2VlcCByb290IG5vZGUgbGFyZ2VyICovCisJdGhyZXNob2xkICo9IHRwID8gaGFsdmVfdGhyZXNob2xkIDogaGFsdmVfdGhyZXNob2xkX3Jvb3Q7CisJdXNlZCAtPSB0bi0+ZW1wdHlfY2hpbGRyZW47CisKKwkvKiBpZiBiaXRzID09IEtFWUxFTkdUSCB0aGVuIHVzZWQgPSAxMDAlIG9uIHdyYXAsIGFuZCB3aWxsIGZhaWwgYmVsb3cgKi8KKworCXJldHVybiAodXNlZCA+IDEpICYmICh0bi0+Yml0cyA+IDEpICYmICgoMTAwICogdXNlZCkgPCB0aHJlc2hvbGQpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRfY29sbGFwc2UoY29uc3Qgc3RydWN0IHRub2RlICp0bikKK3sKKwl1bnNpZ25lZCBsb25nIHVzZWQgPSB0bm9kZV9jaGlsZF9sZW5ndGgodG4pOworCisJdXNlZCAtPSB0bi0+ZW1wdHlfY2hpbGRyZW47CisKKwkvKiBhY2NvdW50IGZvciBiaXRzID09IEtFWUxFTkdUSCBjYXNlICovCisJaWYgKCh0bi0+Yml0cyA9PSBLRVlMRU5HVEgpICYmIHRuLT5mdWxsX2NoaWxkcmVuKQorCQl1c2VkIC09IEtFWV9NQVg7CisKKwkvKiBPbmUgY2hpbGQgb3Igbm9uZSwgdGltZSB0byBkcm9wIHVzIGZyb20gdGhlIHRyaWUgKi8KKwlyZXR1cm4gdXNlZCA8IDI7Cit9CisKKyNkZWZpbmUgTUFYX1dPUksgMTAKK3N0YXRpYyB2b2lkIHJlc2l6ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IHRub2RlICp0bikKK3sKKwlzdHJ1Y3QgdG5vZGUgKnRwID0gbm9kZV9wYXJlbnQodG4pOworCXN0cnVjdCB0bm9kZSBfX3JjdSAqKmNwdHI7CisJaW50IG1heF93b3JrID0gTUFYX1dPUks7CisKKwlwcl9kZWJ1ZygiSW4gdG5vZGVfcmVzaXplICVwIGluZmxhdGVfdGhyZXNob2xkPSVkIHRocmVzaG9sZD0lZFxuIiwKKwkJIHRuLCBpbmZsYXRlX3RocmVzaG9sZCwgaGFsdmVfdGhyZXNob2xkKTsKKworCS8qIHRyYWNrIHRoZSB0bm9kZSB2aWEgdGhlIHBvaW50ZXIgZnJvbSB0aGUgcGFyZW50IGluc3RlYWQgb2YKKwkgKiBkb2luZyBpdCBvdXJzZWx2ZXMuICBUaGlzIHdheSB3ZSBjYW4gbGV0IFJDVSBmdWxseSBkbyBpdHMKKwkgKiB0aGluZyB3aXRob3V0IHVzIGludGVyZmVyaW5nCisJICovCisJY3B0ciA9IHRwID8gJnRwLT5jaGlsZFtnZXRfaW5kZXgodG4tPmtleSwgdHApXSA6ICZ0LT50cmllOworCUJVR19PTih0biAhPSBydG5sX2RlcmVmZXJlbmNlKCpjcHRyKSk7CisKKwkvKiBEb3VibGUgYXMgbG9uZyBhcyB0aGUgcmVzdWx0aW5nIG5vZGUgaGFzIGEgbnVtYmVyIG9mCisJICogbm9uZW1wdHkgbm9kZXMgdGhhdCBhcmUgYWJvdmUgdGhlIHRocmVzaG9sZC4KKwkgKi8KKwl3aGlsZSAoc2hvdWxkX2luZmxhdGUodHAsIHRuKSAmJiBtYXhfd29yaykgeworCQlpZiAoaW5mbGF0ZSh0LCB0bikpIHsKKyNpZmRlZiBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMKKwkJCXRoaXNfY3B1X2luYyh0LT5zdGF0cy0+cmVzaXplX25vZGVfc2tpcHBlZCk7CisjZW5kaWYKKwkJCWJyZWFrOworCQl9CisKKwkJbWF4X3dvcmstLTsKKwkJdG4gPSBydG5sX2RlcmVmZXJlbmNlKCpjcHRyKTsKKwl9CisKKwkvKiBSZXR1cm4gaWYgYXQgbGVhc3Qgb25lIGluZmxhdGUgaXMgcnVuICovCisJaWYgKG1heF93b3JrICE9IE1BWF9XT1JLKQorCQlyZXR1cm47CisKKwkvKiBIYWx2ZSBhcyBsb25nIGFzIHRoZSBudW1iZXIgb2YgZW1wdHkgY2hpbGRyZW4gaW4gdGhpcworCSAqIG5vZGUgaXMgYWJvdmUgdGhyZXNob2xkLgorCSAqLworCXdoaWxlIChzaG91bGRfaGFsdmUodHAsIHRuKSAmJiBtYXhfd29yaykgeworCQlpZiAoaGFsdmUodCwgdG4pKSB7CisjaWZkZWYgQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTCisJCQl0aGlzX2NwdV9pbmModC0+c3RhdHMtPnJlc2l6ZV9ub2RlX3NraXBwZWQpOworI2VuZGlmCisJCQlicmVhazsKKwkJfQorCisJCW1heF93b3JrLS07CisJCXRuID0gcnRubF9kZXJlZmVyZW5jZSgqY3B0cik7CisJfQorCisJLyogT25seSBvbmUgY2hpbGQgcmVtYWlucyAqLworCWlmIChzaG91bGRfY29sbGFwc2UodG4pKSB7CisJCWNvbGxhcHNlKHQsIHRuKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFJldHVybiBpZiBhdCBsZWFzdCBvbmUgZGVmbGF0ZSB3YXMgcnVuICovCisJaWYgKG1heF93b3JrICE9IE1BWF9XT1JLKQorCQlyZXR1cm47CisKKwkvKiBwdXNoIHRoZSBzdWZmaXggbGVuZ3RoIHRvIHRoZSBwYXJlbnQgbm9kZSAqLworCWlmICh0bi0+c2xlbiA+IHRuLT5wb3MpIHsKKwkJdW5zaWduZWQgY2hhciBzbGVuID0gdXBkYXRlX3N1ZmZpeCh0bik7CisKKwkJaWYgKHRwICYmIChzbGVuID4gdHAtPnNsZW4pKQorCQkJdHAtPnNsZW4gPSBzbGVuOworCX0KIH0KIAogLyogcmVhZHNpZGUgbXVzdCB1c2UgcmN1X3JlYWRfbG9jayBjdXJyZW50bHkgZHVtcCByb3V0aW5lcwogIHZpYSBnZXRfZmFfaGVhZCBhbmQgZHVtcCAqLwogCi1zdGF0aWMgc3RydWN0IGxlYWZfaW5mbyAqZmluZF9sZWFmX2luZm8oc3RydWN0IGxlYWYgKmwsIGludCBwbGVuKQorc3RhdGljIHN0cnVjdCBsZWFmX2luZm8gKmZpbmRfbGVhZl9pbmZvKHN0cnVjdCB0bm9kZSAqbCwgaW50IHBsZW4pCiB7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmbC0+bGlzdDsKIAlzdHJ1Y3QgbGVhZl9pbmZvICpsaTsKQEAgLTkxNiw3ICs4ODEsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBsaXN0X2hlYWQgKmdldF9mYV9oZWFkKHN0cnVjdCBsZWFmICpsLCBpbnQgcGxlbikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpc3RfaGVhZCAqZ2V0X2ZhX2hlYWQoc3RydWN0IHRub2RlICpsLCBpbnQgcGxlbikKIHsKIAlzdHJ1Y3QgbGVhZl9pbmZvICpsaSA9IGZpbmRfbGVhZl9pbmZvKGwsIHBsZW4pOwogCkBAIC05MjYsOCArODkxLDUxIEBACiAJcmV0dXJuICZsaS0+ZmFsaDsKIH0KIAotc3RhdGljIHZvaWQgaW5zZXJ0X2xlYWZfaW5mbyhzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxlYWZfaW5mbyAqbmV3KQorc3RhdGljIHZvaWQgbGVhZl9wdWxsX3N1ZmZpeChzdHJ1Y3QgdG5vZGUgKmwpCiB7CisJc3RydWN0IHRub2RlICp0cCA9IG5vZGVfcGFyZW50KGwpOworCisJd2hpbGUgKHRwICYmICh0cC0+c2xlbiA+IHRwLT5wb3MpICYmICh0cC0+c2xlbiA+IGwtPnNsZW4pKSB7CisJCWlmICh1cGRhdGVfc3VmZml4KHRwKSA+IGwtPnNsZW4pCisJCQlicmVhazsKKwkJdHAgPSBub2RlX3BhcmVudCh0cCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBsZWFmX3B1c2hfc3VmZml4KHN0cnVjdCB0bm9kZSAqbCkKK3sKKwlzdHJ1Y3QgdG5vZGUgKnRuID0gbm9kZV9wYXJlbnQobCk7CisKKwkvKiBpZiB0aGlzIGlzIGEgbmV3IGxlYWYgdGhlbiB0biB3aWxsIGJlIE5VTEwgYW5kIHdlIGNhbiBzb3J0CisJICogb3V0IHBhcmVudCBzdWZmaXggbGVuZ3RocyBhcyBhIHBhcnQgb2YgdHJpZV9yZWJhbGFuY2UKKwkgKi8KKwl3aGlsZSAodG4gJiYgKHRuLT5zbGVuIDwgbC0+c2xlbikpIHsKKwkJdG4tPnNsZW4gPSBsLT5zbGVuOworCQl0biA9IG5vZGVfcGFyZW50KHRuKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9sZWFmX2luZm8oc3RydWN0IHRub2RlICpsLCBzdHJ1Y3QgbGVhZl9pbmZvICpvbGQpCit7CisJLyogcmVjb3JkIHRoZSBsb2NhdGlvbiBvZiB0aGUgcHJldmlvdXMgbGlzdF9pbmZvIGVudHJ5ICovCisJc3RydWN0IGhsaXN0X25vZGUgKipwcHJldiA9IG9sZC0+aGxpc3QucHByZXY7CisJc3RydWN0IGxlYWZfaW5mbyAqbGkgPSBobGlzdF9lbnRyeShwcHJldiwgdHlwZW9mKCpsaSksIGhsaXN0Lm5leHQpOworCisJLyogcmVtb3ZlIHRoZSBsZWFmIGluZm8gZnJvbSB0aGUgbGlzdCAqLworCWhsaXN0X2RlbF9yY3UoJm9sZC0+aGxpc3QpOworCisJLyogb25seSBhY2Nlc3MgbGkgaWYgaXQgaXMgcG9pbnRpbmcgYXQgdGhlIGxhc3QgdmFsaWQgaGxpc3Rfbm9kZSAqLworCWlmIChobGlzdF9lbXB0eSgmbC0+bGlzdCkgfHwgKCpwcHJldikpCisJCXJldHVybjsKKworCS8qIHVwZGF0ZSB0aGUgdHJpZSB3aXRoIHRoZSBsYXRlc3Qgc3VmZml4IGxlbmd0aCAqLworCWwtPnNsZW4gPSBLRVlMRU5HVEggLSBsaS0+cGxlbjsKKwlsZWFmX3B1bGxfc3VmZml4KGwpOworfQorCitzdGF0aWMgdm9pZCBpbnNlcnRfbGVhZl9pbmZvKHN0cnVjdCB0bm9kZSAqbCwgc3RydWN0IGxlYWZfaW5mbyAqbmV3KQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJmwtPmxpc3Q7CiAJc3RydWN0IGxlYWZfaW5mbyAqbGkgPSBOVUxMLCAqbGFzdCA9IE5VTEw7CiAKIAlpZiAoaGxpc3RfZW1wdHkoaGVhZCkpIHsKQEAgLTk0NCwyMTggKzk1MiwxNzQgQEAKIAkJZWxzZQogCQkJaGxpc3RfYWRkX2JlZm9yZV9yY3UoJm5ldy0+aGxpc3QsICZsaS0+aGxpc3QpOwogCX0KKworCS8qIGlmIHdlIGFkZGVkIHRvIHRoZSB0YWlsIG5vZGUgdGhlbiB3ZSBuZWVkIHRvIHVwZGF0ZSBzbGVuICovCisJaWYgKGwtPnNsZW4gPCAoS0VZTEVOR1RIIC0gbmV3LT5wbGVuKSkgeworCQlsLT5zbGVuID0gS0VZTEVOR1RIIC0gbmV3LT5wbGVuOworCQlsZWFmX3B1c2hfc3VmZml4KGwpOworCX0KIH0KIAogLyogcmN1X3JlYWRfbG9jayBuZWVkcyB0byBiZSBob2xkIGJ5IGNhbGxlciBmcm9tIHJlYWRzaWRlICovCi0KLXN0YXRpYyBzdHJ1Y3QgbGVhZiAqCi1maWJfZmluZF9ub2RlKHN0cnVjdCB0cmllICp0LCB1MzIga2V5KQorc3RhdGljIHN0cnVjdCB0bm9kZSAqZmliX2ZpbmRfbm9kZShzdHJ1Y3QgdHJpZSAqdCwgdTMyIGtleSkKIHsKLQlpbnQgcG9zOwotCXN0cnVjdCB0bm9kZSAqdG47Ci0Jc3RydWN0IHJ0X3RyaWVfbm9kZSAqbjsKKwlzdHJ1Y3QgdG5vZGUgKm4gPSByY3VfZGVyZWZlcmVuY2VfcnRubCh0LT50cmllKTsKIAotCXBvcyA9IDA7Ci0JbiA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKHQtPnRyaWUpOworCXdoaWxlIChuKSB7CisJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBnZXRfaW5kZXgoa2V5LCBuKTsKIAotCXdoaWxlIChuICE9IE5VTEwgJiYgIE5PREVfVFlQRShuKSA9PSBUX1ROT0RFKSB7Ci0JCXRuID0gKHN0cnVjdCB0bm9kZSAqKSBuOworCQkvKiBUaGlzIGJpdCBvZiBjb2RlIGlzIGEgYml0IHRyaWNreSBidXQgaXQgY29tYmluZXMgbXVsdGlwbGUKKwkJICogY2hlY2tzIGludG8gYSBzaW5nbGUgY2hlY2suICBUaGUgcHJlZml4IGNvbnNpc3RzIG9mIHRoZQorCQkgKiBwcmVmaXggcGx1cyB6ZXJvcyBmb3IgdGhlIGJpdHMgaW4gdGhlIGNpbmRleC4gVGhlIGluZGV4CisJCSAqIGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGtleSBhbmQgdGhpcyB2YWx1ZS4gIEZyb20KKwkJICogdGhpcyB3ZSBjYW4gYWN0dWFsbHkgZGVyaXZlIHNldmVyYWwgcGllY2VzIG9mIGRhdGEuCisJCSAqICAgaWYgKGluZGV4ICYgKH4wdWwgPDwgYml0cykpCisJCSAqICAgICB3ZSBoYXZlIGEgbWlzbWF0Y2ggaW4gc2tpcCBiaXRzIGFuZCBmYWlsZWQKKwkJICogICBlbHNlCisJCSAqICAgICB3ZSBrbm93IHRoZSB2YWx1ZSBpcyBjaW5kZXgKKwkJICovCisJCWlmIChpbmRleCAmICh+MHVsIDw8IG4tPmJpdHMpKQorCQkJcmV0dXJuIE5VTEw7CiAKLQkJY2hlY2tfdG5vZGUodG4pOwotCi0JCWlmICh0a2V5X3N1Yl9lcXVhbHModG4tPmtleSwgcG9zLCB0bi0+cG9zLXBvcywga2V5KSkgewotCQkJcG9zID0gdG4tPnBvcyArIHRuLT5iaXRzOwotCQkJbiA9IHRub2RlX2dldF9jaGlsZF9yY3UodG4sCi0JCQkJCQl0a2V5X2V4dHJhY3RfYml0cyhrZXksCi0JCQkJCQkJCSAgdG4tPnBvcywKLQkJCQkJCQkJICB0bi0+Yml0cykpOwotCQl9IGVsc2UKKwkJLyogd2UgaGF2ZSBmb3VuZCBhIGxlYWYuIFByZWZpeGVzIGhhdmUgYWxyZWFkeSBiZWVuIGNvbXBhcmVkICovCisJCWlmIChJU19MRUFGKG4pKQogCQkJYnJlYWs7Ci0JfQotCS8qIENhc2Ugd2UgaGF2ZSBmb3VuZCBhIGxlYWYuIENvbXBhcmUgcHJlZml4ZXMgKi8KIAotCWlmIChuICE9IE5VTEwgJiYgSVNfTEVBRihuKSAmJiB0a2V5X2VxdWFscyhrZXksIG4tPmtleSkpCi0JCXJldHVybiAoc3RydWN0IGxlYWYgKiluOworCQluID0gdG5vZGVfZ2V0X2NoaWxkX3JjdShuLCBpbmRleCk7CisJfQorCisJcmV0dXJuIG47Cit9CisKKy8qIFJldHVybiB0aGUgZmlyc3QgZmliIGFsaWFzIG1hdGNoaW5nIFRPUyB3aXRoCisgKiBwcmlvcml0eSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gUFJJTy4KKyAqLworc3RhdGljIHN0cnVjdCBmaWJfYWxpYXMgKmZpYl9maW5kX2FsaWFzKHN0cnVjdCBsaXN0X2hlYWQgKmZhaCwgdTggdG9zLCB1MzIgcHJpbykKK3sKKwlzdHJ1Y3QgZmliX2FsaWFzICpmYTsKKworCWlmICghZmFoKQorCQlyZXR1cm4gTlVMTDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZmEsIGZhaCwgZmFfbGlzdCkgeworCQlpZiAoZmEtPmZhX3RvcyA+IHRvcykKKwkJCWNvbnRpbnVlOworCQlpZiAoZmEtPmZhX2luZm8tPmZpYl9wcmlvcml0eSA+PSBwcmlvIHx8IGZhLT5mYV90b3MgPCB0b3MpCisJCQlyZXR1cm4gZmE7CisJfQogCiAJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIHRyaWVfcmViYWxhbmNlKHN0cnVjdCB0cmllICp0LCBzdHJ1Y3QgdG5vZGUgKnRuKQogewotCWludCB3YXNmdWxsOwotCXRfa2V5IGNpbmRleCwga2V5OwogCXN0cnVjdCB0bm9kZSAqdHA7CiAKLQlrZXkgPSB0bi0+a2V5OwotCi0Jd2hpbGUgKHRuICE9IE5VTEwgJiYgKHRwID0gbm9kZV9wYXJlbnQoKHN0cnVjdCBydF90cmllX25vZGUgKil0bikpICE9IE5VTEwpIHsKLQkJY2luZGV4ID0gdGtleV9leHRyYWN0X2JpdHMoa2V5LCB0cC0+cG9zLCB0cC0+Yml0cyk7Ci0JCXdhc2Z1bGwgPSB0bm9kZV9mdWxsKHRwLCB0bm9kZV9nZXRfY2hpbGQodHAsIGNpbmRleCkpOwotCQl0biA9IChzdHJ1Y3QgdG5vZGUgKilyZXNpemUodCwgdG4pOwotCi0JCXRub2RlX3B1dF9jaGlsZF9yZW9yZyh0cCwgY2luZGV4LAotCQkJCSAgICAgIChzdHJ1Y3QgcnRfdHJpZV9ub2RlICopdG4sIHdhc2Z1bGwpOwotCi0JCXRwID0gbm9kZV9wYXJlbnQoKHN0cnVjdCBydF90cmllX25vZGUgKikgdG4pOwotCQlpZiAoIXRwKQotCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHQtPnRyaWUsIChzdHJ1Y3QgcnRfdHJpZV9ub2RlICopdG4pOwotCi0JCXRub2RlX2ZyZWVfZmx1c2goKTsKLQkJaWYgKCF0cCkKLQkJCWJyZWFrOworCXdoaWxlICgodHAgPSBub2RlX3BhcmVudCh0bikpICE9IE5VTEwpIHsKKwkJcmVzaXplKHQsIHRuKTsKIAkJdG4gPSB0cDsKIAl9CiAKIAkvKiBIYW5kbGUgbGFzdCAodG9wKSB0bm9kZSAqLwogCWlmIChJU19UTk9ERSh0bikpCi0JCXRuID0gKHN0cnVjdCB0bm9kZSAqKXJlc2l6ZSh0LCB0bik7Ci0KLQlyY3VfYXNzaWduX3BvaW50ZXIodC0+dHJpZSwgKHN0cnVjdCBydF90cmllX25vZGUgKil0bik7Ci0JdG5vZGVfZnJlZV9mbHVzaCgpOworCQlyZXNpemUodCwgdG4pOwogfQogCiAvKiBvbmx5IHVzZWQgZnJvbSB1cGRhdGVyLXNpZGUgKi8KIAogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKmZpYl9pbnNlcnRfbm9kZShzdHJ1Y3QgdHJpZSAqdCwgdTMyIGtleSwgaW50IHBsZW4pCiB7Ci0JaW50IHBvcywgbmV3cG9zOwotCXN0cnVjdCB0bm9kZSAqdHAgPSBOVUxMLCAqdG4gPSBOVUxMOwotCXN0cnVjdCBydF90cmllX25vZGUgKm47Ci0Jc3RydWN0IGxlYWYgKmw7Ci0JaW50IG1pc3NiaXQ7CiAJc3RydWN0IGxpc3RfaGVhZCAqZmFfaGVhZCA9IE5VTEw7CisJc3RydWN0IHRub2RlICpsLCAqbiwgKnRwID0gTlVMTDsKIAlzdHJ1Y3QgbGVhZl9pbmZvICpsaTsKLQl0X2tleSBjaW5kZXg7CiAKLQlwb3MgPSAwOworCWxpID0gbGVhZl9pbmZvX25ldyhwbGVuKTsKKwlpZiAoIWxpKQorCQlyZXR1cm4gTlVMTDsKKwlmYV9oZWFkID0gJmxpLT5mYWxoOworCiAJbiA9IHJ0bmxfZGVyZWZlcmVuY2UodC0+dHJpZSk7CiAKIAkvKiBJZiB3ZSBwb2ludCB0byBOVUxMLCBzdG9wLiBFaXRoZXIgdGhlIHRyZWUgaXMgZW1wdHkgYW5kIHdlIHNob3VsZAogCSAqIGp1c3QgcHV0IGEgbmV3IGxlYWYgaW4gaWYsIG9yIHdlIGhhdmUgcmVhY2hlZCBhbiBlbXB0eSBjaGlsZCBzbG90LAogCSAqIGFuZCB3ZSBzaG91bGQganVzdCBwdXQgb3VyIG5ldyBsZWFmIGluIHRoYXQuCi0JICogSWYgd2UgcG9pbnQgdG8gYSBUX1ROT0RFLCBjaGVjayBpZiBpdCBtYXRjaGVzIG91ciBrZXkuIE5vdGUgdGhhdAotCSAqIGEgVF9UTk9ERSBtaWdodCBiZSBza2lwcGluZyBhbnkgbnVtYmVyIG9mIGJpdHMgLSBpdHMgJ3BvcycgbmVlZAotCSAqIG5vdCBiZSB0aGUgcGFyZW50J3MgJ3BvcycrJ2JpdHMnIQogCSAqCi0JICogSWYgaXQgZG9lcyBtYXRjaCB0aGUgY3VycmVudCBrZXksIGdldCBwb3MvYml0cyBmcm9tIGl0LCBleHRyYWN0Ci0JICogdGhlIGluZGV4IGZyb20gb3VyIGtleSwgcHVzaCB0aGUgVF9UTk9ERSBhbmQgd2FsayB0aGUgdHJlZS4KLQkgKgotCSAqIElmIGl0IGRvZXNuJ3QsIHdlIGhhdmUgdG8gcmVwbGFjZSBpdCB3aXRoIGEgbmV3IFRfVE5PREUuCi0JICoKLQkgKiBJZiB3ZSBwb2ludCB0byBhIFRfTEVBRiwgaXQgbWlnaHQgb3IgbWlnaHQgbm90IGhhdmUgdGhlIHNhbWUga2V5Ci0JICogYXMgd2UgZG8uIElmIGl0IGRvZXMsIGp1c3QgY2hhbmdlIHRoZSB2YWx1ZSwgdXBkYXRlIHRoZSBUX0xFQUYncwotCSAqIHZhbHVlLCBhbmQgcmV0dXJuIGl0LgotCSAqIElmIGl0IGRvZXNuJ3QsIHdlIG5lZWQgdG8gcmVwbGFjZSBpdCB3aXRoIGEgVF9UTk9ERS4KKwkgKiBJZiB3ZSBoaXQgYSBub2RlIHdpdGggYSBrZXkgdGhhdCBkb2VzJ3QgbWF0Y2ggdGhlbiB3ZSBzaG91bGQgc3RvcAorCSAqIGFuZCBjcmVhdGUgYSBuZXcgdG5vZGUgdG8gcmVwbGFjZSB0aGF0IG5vZGUgYW5kIGluc2VydCBvdXJzZWx2ZXMKKwkgKiBhbmQgdGhlIG90aGVyIG5vZGUgaW50byB0aGUgbmV3IHRub2RlLgogCSAqLworCXdoaWxlIChuKSB7CisJCXVuc2lnbmVkIGxvbmcgaW5kZXggPSBnZXRfaW5kZXgoa2V5LCBuKTsKIAotCXdoaWxlIChuICE9IE5VTEwgJiYgIE5PREVfVFlQRShuKSA9PSBUX1ROT0RFKSB7Ci0JCXRuID0gKHN0cnVjdCB0bm9kZSAqKSBuOwotCi0JCWNoZWNrX3Rub2RlKHRuKTsKLQotCQlpZiAodGtleV9zdWJfZXF1YWxzKHRuLT5rZXksIHBvcywgdG4tPnBvcy1wb3MsIGtleSkpIHsKLQkJCXRwID0gdG47Ci0JCQlwb3MgPSB0bi0+cG9zICsgdG4tPmJpdHM7Ci0JCQluID0gdG5vZGVfZ2V0X2NoaWxkKHRuLAotCQkJCQkgICAgdGtleV9leHRyYWN0X2JpdHMoa2V5LAotCQkJCQkJCSAgICAgIHRuLT5wb3MsCi0JCQkJCQkJICAgICAgdG4tPmJpdHMpKTsKLQotCQkJQlVHX09OKG4gJiYgbm9kZV9wYXJlbnQobikgIT0gdG4pOwotCQl9IGVsc2UKLQkJCWJyZWFrOwotCX0KLQotCS8qCi0JICogbiAgLS0tLT4gTlVMTCwgTEVBRiBvciBUTk9ERQotCSAqCi0JICogdHAgaXMgbidzIChwYXJlbnQpIC0tLS0+IE5VTEwgb3IgVE5PREUKLQkgKi8KLQotCUJVR19PTih0cCAmJiBJU19MRUFGKHRwKSk7Ci0KLQkvKiBDYXNlIDE6IG4gaXMgYSBsZWFmLiBDb21wYXJlIHByZWZpeGVzICovCi0KLQlpZiAobiAhPSBOVUxMICYmIElTX0xFQUYobikgJiYgdGtleV9lcXVhbHMoa2V5LCBuLT5rZXkpKSB7Ci0JCWwgPSAoc3RydWN0IGxlYWYgKikgbjsKLQkJbGkgPSBsZWFmX2luZm9fbmV3KHBsZW4pOwotCi0JCWlmICghbGkpCi0JCQlyZXR1cm4gTlVMTDsKLQotCQlmYV9oZWFkID0gJmxpLT5mYWxoOwotCQlpbnNlcnRfbGVhZl9pbmZvKCZsLT5saXN0LCBsaSk7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JbCA9IGxlYWZfbmV3KCk7Ci0KLQlpZiAoIWwpCi0JCXJldHVybiBOVUxMOwotCi0JbC0+a2V5ID0ga2V5OwotCWxpID0gbGVhZl9pbmZvX25ldyhwbGVuKTsKLQotCWlmICghbGkpIHsKLQkJZnJlZV9sZWFmKGwpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlmYV9oZWFkID0gJmxpLT5mYWxoOwotCWluc2VydF9sZWFmX2luZm8oJmwtPmxpc3QsIGxpKTsKLQotCWlmICh0LT50cmllICYmIG4gPT0gTlVMTCkgewotCQkvKiBDYXNlIDI6IG4gaXMgTlVMTCwgYW5kIHdpbGwganVzdCBpbnNlcnQgYSBuZXcgbGVhZiAqLwotCi0JCW5vZGVfc2V0X3BhcmVudCgoc3RydWN0IHJ0X3RyaWVfbm9kZSAqKWwsIHRwKTsKLQotCQljaW5kZXggPSB0a2V5X2V4dHJhY3RfYml0cyhrZXksIHRwLT5wb3MsIHRwLT5iaXRzKTsKLQkJcHV0X2NoaWxkKHRwLCBjaW5kZXgsIChzdHJ1Y3QgcnRfdHJpZV9ub2RlICopbCk7Ci0JfSBlbHNlIHsKLQkJLyogQ2FzZSAzOiBuIGlzIGEgTEVBRiBvciBhIFROT0RFIGFuZCB0aGUga2V5IGRvZXNuJ3QgbWF0Y2guICovCi0JCS8qCi0JCSAqICBBZGQgYSBuZXcgdG5vZGUgaGVyZQotCQkgKiAgZmlyc3QgdG5vZGUgbmVlZCBzb21lIHNwZWNpYWwgaGFuZGxpbmcKKwkJLyogVGhpcyBiaXQgb2YgY29kZSBpcyBhIGJpdCB0cmlja3kgYnV0IGl0IGNvbWJpbmVzIG11bHRpcGxlCisJCSAqIGNoZWNrcyBpbnRvIGEgc2luZ2xlIGNoZWNrLiAgVGhlIHByZWZpeCBjb25zaXN0cyBvZiB0aGUKKwkJICogcHJlZml4IHBsdXMgemVyb3MgZm9yIHRoZSAiYml0cyIgaW4gdGhlIHByZWZpeC4gVGhlIGluZGV4CisJCSAqIGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGtleSBhbmQgdGhpcyB2YWx1ZS4gIEZyb20KKwkJICogdGhpcyB3ZSBjYW4gYWN0dWFsbHkgZGVyaXZlIHNldmVyYWwgcGllY2VzIG9mIGRhdGEuCisJCSAqICAgaWYgIShpbmRleCA+PiBiaXRzKQorCQkgKiAgICAgd2Uga25vdyB0aGUgdmFsdWUgaXMgY2hpbGQgaW5kZXgKKwkJICogICBlbHNlCisJCSAqICAgICB3ZSBoYXZlIGEgbWlzbWF0Y2ggaW4gc2tpcCBiaXRzIGFuZCBmYWlsZWQKIAkJICovCisJCWlmIChpbmRleCA+PiBuLT5iaXRzKQorCQkJYnJlYWs7CiAKLQkJaWYgKG4pIHsKLQkJCXBvcyA9IHRwID8gdHAtPnBvcyt0cC0+Yml0cyA6IDA7Ci0JCQluZXdwb3MgPSB0a2V5X21pc21hdGNoKGtleSwgcG9zLCBuLT5rZXkpOwotCQkJdG4gPSB0bm9kZV9uZXcobi0+a2V5LCBuZXdwb3MsIDEpOwotCQl9IGVsc2UgewotCQkJbmV3cG9zID0gMDsKLQkJCXRuID0gdG5vZGVfbmV3KGtleSwgbmV3cG9zLCAxKTsgLyogRmlyc3QgdG5vZGUgKi8KKwkJLyogd2UgaGF2ZSBmb3VuZCBhIGxlYWYuIFByZWZpeGVzIGhhdmUgYWxyZWFkeSBiZWVuIGNvbXBhcmVkICovCisJCWlmIChJU19MRUFGKG4pKSB7CisJCQkvKiBDYXNlIDE6IG4gaXMgYSBsZWFmLCBhbmQgcHJlZml4ZXMgbWF0Y2gqLworCQkJaW5zZXJ0X2xlYWZfaW5mbyhuLCBsaSk7CisJCQlyZXR1cm4gZmFfaGVhZDsKIAkJfQogCisJCXRwID0gbjsKKwkJbiA9IHRub2RlX2dldF9jaGlsZF9yY3UobiwgaW5kZXgpOworCX0KKworCWwgPSBsZWFmX25ldyhrZXkpOworCWlmICghbCkgeworCQlmcmVlX2xlYWZfaW5mbyhsaSk7CisJCXJldHVybiBOVUxMOworCX0KKworCWluc2VydF9sZWFmX2luZm8obCwgbGkpOworCisJLyogQ2FzZSAyOiBuIGlzIGEgTEVBRiBvciBhIFROT0RFIGFuZCB0aGUga2V5IGRvZXNuJ3QgbWF0Y2guCisJICoKKwkgKiAgQWRkIGEgbmV3IHRub2RlIGhlcmUKKwkgKiAgZmlyc3QgdG5vZGUgbmVlZCBzb21lIHNwZWNpYWwgaGFuZGxpbmcKKwkgKiAgbGVhdmVzIHVzIGluIHBvc2l0aW9uIGZvciBoYW5kbGluZyBhcyBjYXNlIDMKKwkgKi8KKwlpZiAobikgeworCQlzdHJ1Y3QgdG5vZGUgKnRuOworCisJCXRuID0gdG5vZGVfbmV3KGtleSwgX19mbHMoa2V5IF4gbi0+a2V5KSwgMSk7CiAJCWlmICghdG4pIHsKIAkJCWZyZWVfbGVhZl9pbmZvKGxpKTsKLQkJCWZyZWVfbGVhZihsKTsKKwkJCW5vZGVfZnJlZShsKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAKLQkJbm9kZV9zZXRfcGFyZW50KChzdHJ1Y3QgcnRfdHJpZV9ub2RlICopdG4sIHRwKTsKKwkJLyogaW5pdGlhbGl6ZSByb3V0ZXMgb3V0IG9mIG5vZGUgKi8KKwkJTk9ERV9JTklUX1BBUkVOVCh0biwgdHApOworCQlwdXRfY2hpbGQodG4sIGdldF9pbmRleChrZXksIHRuKSBeIDEsIG4pOwogCi0JCW1pc3NiaXQgPSB0a2V5X2V4dHJhY3RfYml0cyhrZXksIG5ld3BvcywgMSk7Ci0JCXB1dF9jaGlsZCh0biwgbWlzc2JpdCwgKHN0cnVjdCBydF90cmllX25vZGUgKilsKTsKLQkJcHV0X2NoaWxkKHRuLCAxLW1pc3NiaXQsIG4pOworCQkvKiBzdGFydCBhZGRpbmcgcm91dGVzIGludG8gdGhlIG5vZGUgKi8KKwkJcHV0X2NoaWxkX3Jvb3QodHAsIHQsIGtleSwgdG4pOworCQlub2RlX3NldF9wYXJlbnQobiwgdG4pOwogCi0JCWlmICh0cCkgewotCQkJY2luZGV4ID0gdGtleV9leHRyYWN0X2JpdHMoa2V5LCB0cC0+cG9zLCB0cC0+Yml0cyk7Ci0JCQlwdXRfY2hpbGQodHAsIGNpbmRleCwgKHN0cnVjdCBydF90cmllX25vZGUgKil0bik7Ci0JCX0gZWxzZSB7Ci0JCQlyY3VfYXNzaWduX3BvaW50ZXIodC0+dHJpZSwgKHN0cnVjdCBydF90cmllX25vZGUgKil0bik7Ci0JCX0KLQorCQkvKiBwYXJlbnQgbm93IGhhcyBhIE5VTEwgc3BvdCB3aGVyZSB0aGUgbGVhZiBjYW4gZ28gKi8KIAkJdHAgPSB0bjsKIAl9CiAKLQlpZiAodHAgJiYgdHAtPnBvcyArIHRwLT5iaXRzID4gMzIpCi0JCXByX3dhcm4oImZpYl90cmllIHRwPSVwIHBvcz0lZCwgYml0cz0lZCwga2V5PSUweCBwbGVuPSVkXG4iLAotCQkJdHAsIHRwLT5wb3MsIHRwLT5iaXRzLCBrZXksIHBsZW4pOworCS8qIENhc2UgMzogbiBpcyBOVUxMLCBhbmQgd2lsbCBqdXN0IGluc2VydCBhIG5ldyBsZWFmICovCisJaWYgKHRwKSB7CisJCU5PREVfSU5JVF9QQVJFTlQobCwgdHApOworCQlwdXRfY2hpbGQodHAsIGdldF9pbmRleChrZXksIHRwKSwgbCk7CisJCXRyaWVfcmViYWxhbmNlKHQsIHRwKTsKKwl9IGVsc2UgeworCQlyY3VfYXNzaWduX3BvaW50ZXIodC0+dHJpZSwgbCk7CisJfQogCi0JLyogUmViYWxhbmNlIHRoZSB0cmllICovCi0KLQl0cmllX3JlYmFsYW5jZSh0LCB0cCk7Ci1kb25lOgogCXJldHVybiBmYV9oZWFkOwogfQogCkBAIC0xMTcyLDcgKzExMzYsNyBAQAogCXU4IHRvcyA9IGNmZy0+ZmNfdG9zOwogCXUzMiBrZXksIG1hc2s7CiAJaW50IGVycjsKLQlzdHJ1Y3QgbGVhZiAqbDsKKwlzdHJ1Y3QgdG5vZGUgKmw7CiAKIAlpZiAocGxlbiA+IDMyKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzMjksMTggKzEyOTMsMTMwIEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi8KLXN0YXRpYyBpbnQgY2hlY2tfbGVhZihzdHJ1Y3QgZmliX3RhYmxlICp0Yiwgc3RydWN0IHRyaWUgKnQsIHN0cnVjdCBsZWFmICpsLAotCQkgICAgICB0X2tleSBrZXksICBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbHAsCi0JCSAgICAgIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIGludCBmaWJfZmxhZ3MpCitzdGF0aWMgaW5saW5lIHRfa2V5IHByZWZpeF9taXNtYXRjaCh0X2tleSBrZXksIHN0cnVjdCB0bm9kZSAqbikKIHsKLQlzdHJ1Y3QgbGVhZl9pbmZvICpsaTsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGhlYWQgPSAmbC0+bGlzdDsKKwl0X2tleSBwcmVmaXggPSBuLT5rZXk7CiAKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGksIGhoZWFkLCBobGlzdCkgeworCXJldHVybiAoa2V5IF4gcHJlZml4KSAmIChwcmVmaXggfCAtcHJlZml4KTsKK30KKworLyogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi8KK2ludCBmaWJfdGFibGVfbG9va3VwKHN0cnVjdCBmaWJfdGFibGUgKnRiLCBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbHAsCisJCSAgICAgc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGZpYl9mbGFncykKK3sKKwlzdHJ1Y3QgdHJpZSAqdCA9IChzdHJ1Y3QgdHJpZSAqKXRiLT50Yl9kYXRhOworI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUworCXN0cnVjdCB0cmllX3VzZV9zdGF0cyBfX3BlcmNwdSAqc3RhdHMgPSB0LT5zdGF0czsKKyNlbmRpZgorCWNvbnN0IHRfa2V5IGtleSA9IG50b2hsKGZscC0+ZGFkZHIpOworCXN0cnVjdCB0bm9kZSAqbiwgKnBuOworCXN0cnVjdCBsZWFmX2luZm8gKmxpOworCXRfa2V5IGNpbmRleDsKKworCW4gPSByY3VfZGVyZWZlcmVuY2UodC0+dHJpZSk7CisJaWYgKCFuKQorCQlyZXR1cm4gLUVBR0FJTjsKKworI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUworCXRoaXNfY3B1X2luYyhzdGF0cy0+Z2V0cyk7CisjZW5kaWYKKworCXBuID0gbjsKKwljaW5kZXggPSAwOworCisJLyogU3RlcCAxOiBUcmF2ZWwgdG8gdGhlIGxvbmdlc3QgcHJlZml4IG1hdGNoIGluIHRoZSB0cmllICovCisJZm9yICg7OykgeworCQl1bnNpZ25lZCBsb25nIGluZGV4ID0gZ2V0X2luZGV4KGtleSwgbik7CisKKwkJLyogVGhpcyBiaXQgb2YgY29kZSBpcyBhIGJpdCB0cmlja3kgYnV0IGl0IGNvbWJpbmVzIG11bHRpcGxlCisJCSAqIGNoZWNrcyBpbnRvIGEgc2luZ2xlIGNoZWNrLiAgVGhlIHByZWZpeCBjb25zaXN0cyBvZiB0aGUKKwkJICogcHJlZml4IHBsdXMgemVyb3MgZm9yIHRoZSAiYml0cyIgaW4gdGhlIHByZWZpeC4gVGhlIGluZGV4CisJCSAqIGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGtleSBhbmQgdGhpcyB2YWx1ZS4gIEZyb20KKwkJICogdGhpcyB3ZSBjYW4gYWN0dWFsbHkgZGVyaXZlIHNldmVyYWwgcGllY2VzIG9mIGRhdGEuCisJCSAqICAgaWYgKGluZGV4ICYgKH4wdWwgPDwgYml0cykpCisJCSAqICAgICB3ZSBoYXZlIGEgbWlzbWF0Y2ggaW4gc2tpcCBiaXRzIGFuZCBmYWlsZWQKKwkJICogICBlbHNlCisJCSAqICAgICB3ZSBrbm93IHRoZSB2YWx1ZSBpcyBjaW5kZXgKKwkJICovCisJCWlmIChpbmRleCAmICh+MHVsIDw8IG4tPmJpdHMpKQorCQkJYnJlYWs7CisKKwkJLyogd2UgaGF2ZSBmb3VuZCBhIGxlYWYuIFByZWZpeGVzIGhhdmUgYWxyZWFkeSBiZWVuIGNvbXBhcmVkICovCisJCWlmIChJU19MRUFGKG4pKQorCQkJZ290byBmb3VuZDsKKworCQkvKiBvbmx5IHJlY29yZCBwbiBhbmQgY2luZGV4IGlmIHdlIGFyZSBnb2luZyB0byBiZSBjaG9wcGluZworCQkgKiBiaXRzIGxhdGVyLiAgT3RoZXJ3aXNlIHdlIGFyZSBqdXN0IHdhc3RpbmcgY3ljbGVzLgorCQkgKi8KKwkJaWYgKG4tPnNsZW4gPiBuLT5wb3MpIHsKKwkJCXBuID0gbjsKKwkJCWNpbmRleCA9IGluZGV4OworCQl9CisKKwkJbiA9IHRub2RlX2dldF9jaGlsZF9yY3UobiwgaW5kZXgpOworCQlpZiAodW5saWtlbHkoIW4pKQorCQkJZ290byBiYWNrdHJhY2U7CisJfQorCisJLyogU3RlcCAyOiBTb3J0IG91dCBsZWF2ZXMgYW5kIGJlZ2luIGJhY2t0cmFjaW5nIGZvciBsb25nZXN0IHByZWZpeCAqLworCWZvciAoOzspIHsKKwkJLyogcmVjb3JkIHRoZSBwb2ludGVyIHdoZXJlIG91ciBuZXh0IG5vZGUgcG9pbnRlciBpcyBzdG9yZWQgKi8KKwkJc3RydWN0IHRub2RlIF9fcmN1ICoqY3B0ciA9IG4tPmNoaWxkOworCisJCS8qIFRoaXMgdGVzdCB2ZXJpZmllcyB0aGF0IG5vbmUgb2YgdGhlIGJpdHMgdGhhdCBkaWZmZXIKKwkJICogYmV0d2VlbiB0aGUga2V5IGFuZCB0aGUgcHJlZml4IGV4aXN0IGluIHRoZSByZWdpb24gb2YKKwkJICogdGhlIGxzYiBhbmQgaGlnaGVyIGluIHRoZSBwcmVmaXguCisJCSAqLworCQlpZiAodW5saWtlbHkocHJlZml4X21pc21hdGNoKGtleSwgbikpIHx8IChuLT5zbGVuID09IG4tPnBvcykpCisJCQlnb3RvIGJhY2t0cmFjZTsKKworCQkvKiBleGl0IG91dCBhbmQgcHJvY2VzcyBsZWFmICovCisJCWlmICh1bmxpa2VseShJU19MRUFGKG4pKSkKKwkJCWJyZWFrOworCisJCS8qIERvbid0IGJvdGhlciByZWNvcmRpbmcgcGFyZW50IGluZm8uICBTaW5jZSB3ZSBhcmUgaW4KKwkJICogcHJlZml4IG1hdGNoIG1vZGUgd2Ugd2lsbCBoYXZlIHRvIGNvbWUgYmFjayB0byB3aGVyZXZlcgorCQkgKiB3ZSBzdGFydGVkIHRoaXMgdHJhdmVyc2FsIGFueXdheQorCQkgKi8KKworCQl3aGlsZSAoKG4gPSByY3VfZGVyZWZlcmVuY2UoKmNwdHIpKSA9PSBOVUxMKSB7CitiYWNrdHJhY2U6CisjaWZkZWYgQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTCisJCQlpZiAoIW4pCisJCQkJdGhpc19jcHVfaW5jKHN0YXRzLT5udWxsX25vZGVfaGl0KTsKKyNlbmRpZgorCQkJLyogSWYgd2UgYXJlIGF0IGNpbmRleCAwIHRoZXJlIGFyZSBubyBtb3JlIGJpdHMgZm9yCisJCQkgKiB1cyB0byBzdHJpcCBhdCB0aGlzIGxldmVsIHNvIHdlIG11c3QgYXNjZW5kIGJhY2sKKwkJCSAqIHVwIG9uZSBsZXZlbCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBtb3JlIGJpdHMgdG8KKwkJCSAqIGJlIHN0cmlwcGVkIHRoZXJlLgorCQkJICovCisJCQl3aGlsZSAoIWNpbmRleCkgeworCQkJCXRfa2V5IHBrZXkgPSBwbi0+a2V5OworCisJCQkJcG4gPSBub2RlX3BhcmVudF9yY3UocG4pOworCQkJCWlmICh1bmxpa2VseSghcG4pKQorCQkJCQlyZXR1cm4gLUVBR0FJTjsKKyNpZmRlZiBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMKKwkJCQl0aGlzX2NwdV9pbmMoc3RhdHMtPmJhY2t0cmFjayk7CisjZW5kaWYKKwkJCQkvKiBHZXQgQ2hpbGQncyBpbmRleCAqLworCQkJCWNpbmRleCA9IGdldF9pbmRleChwa2V5LCBwbik7CisJCQl9CisKKwkJCS8qIHN0cmlwIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgZnJvbSB0aGUgY2luZGV4ICovCisJCQljaW5kZXggJj0gY2luZGV4IC0gMTsKKworCQkJLyogZ3JhYiBwb2ludGVyIGZvciBuZXh0IGNoaWxkIG5vZGUgKi8KKwkJCWNwdHIgPSAmcG4tPmNoaWxkW2NpbmRleF07CisJCX0KKwl9CisKK2ZvdW5kOgorCS8qIFN0ZXAgMzogUHJvY2VzcyB0aGUgbGVhZiwgaWYgdGhhdCBmYWlscyBmYWxsIGJhY2sgdG8gYmFja3RyYWNpbmcgKi8KKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGksICZuLT5saXN0LCBobGlzdCkgewogCQlzdHJ1Y3QgZmliX2FsaWFzICpmYTsKIAotCQlpZiAobC0+a2V5ICE9IChrZXkgJiBsaS0+bWFza19wbGVuKSkKKwkJaWYgKChrZXkgXiBuLT5rZXkpICYgbGktPm1hc2tfcGxlbikKIAkJCWNvbnRpbnVlOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGZhLCAmbGktPmZhbGgsIGZhX2xpc3QpIHsKQEAgLTEzNTUsOSArMTQzMSw5IEBACiAJCQkJY29udGludWU7CiAJCQlmaWJfYWxpYXNfYWNjZXNzZWQoZmEpOwogCQkJZXJyID0gZmliX3Byb3BzW2ZhLT5mYV90eXBlXS5lcnJvcjsKLQkJCWlmIChlcnIpIHsKKwkJCWlmICh1bmxpa2VseShlcnIgPCAwKSkgewogI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUwotCQkJCXQtPnN0YXRzLnNlbWFudGljX21hdGNoX3Bhc3NlZCsrOworCQkJCXRoaXNfY3B1X2luYyhzdGF0cy0+c2VtYW50aWNfbWF0Y2hfcGFzc2VkKTsKICNlbmRpZgogCQkJCXJldHVybiBlcnI7CiAJCQl9CkBAIC0xMzcxLDI0MSArMTQ0Nyw0OCBAQAogCQkJCWlmIChmbHAtPmZsb3dpNF9vaWYgJiYgZmxwLT5mbG93aTRfb2lmICE9IG5oLT5uaF9vaWYpCiAJCQkJCWNvbnRpbnVlOwogCi0jaWZkZWYgQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTCi0JCQkJdC0+c3RhdHMuc2VtYW50aWNfbWF0Y2hfcGFzc2VkKys7Ci0jZW5kaWYKKwkJCQlpZiAoIShmaWJfZmxhZ3MgJiBGSUJfTE9PS1VQX05PUkVGKSkKKwkJCQkJYXRvbWljX2luYygmZmktPmZpYl9jbG50cmVmKTsKKwogCQkJCXJlcy0+cHJlZml4bGVuID0gbGktPnBsZW47CiAJCQkJcmVzLT5uaF9zZWwgPSBuaHNlbDsKIAkJCQlyZXMtPnR5cGUgPSBmYS0+ZmFfdHlwZTsKLQkJCQlyZXMtPnNjb3BlID0gZmEtPmZhX2luZm8tPmZpYl9zY29wZTsKKwkJCQlyZXMtPnNjb3BlID0gZmktPmZpYl9zY29wZTsKIAkJCQlyZXMtPmZpID0gZmk7CiAJCQkJcmVzLT50YWJsZSA9IHRiOwogCQkJCXJlcy0+ZmFfaGVhZCA9ICZsaS0+ZmFsaDsKLQkJCQlpZiAoIShmaWJfZmxhZ3MgJiBGSUJfTE9PS1VQX05PUkVGKSkKLQkJCQkJYXRvbWljX2luYygmZmktPmZpYl9jbG50cmVmKTsKLQkJCQlyZXR1cm4gMDsKKyNpZmRlZiBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMKKwkJCQl0aGlzX2NwdV9pbmMoc3RhdHMtPnNlbWFudGljX21hdGNoX3Bhc3NlZCk7CisjZW5kaWYKKwkJCQlyZXR1cm4gZXJyOwogCQkJfQogCQl9CiAKICNpZmRlZiBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMKLQkJdC0+c3RhdHMuc2VtYW50aWNfbWF0Y2hfbWlzcysrOworCQl0aGlzX2NwdV9pbmMoc3RhdHMtPnNlbWFudGljX21hdGNoX21pc3MpOwogI2VuZGlmCiAJfQotCi0JcmV0dXJuIDE7Ci19Ci0KLWludCBmaWJfdGFibGVfbG9va3VwKHN0cnVjdCBmaWJfdGFibGUgKnRiLCBjb25zdCBzdHJ1Y3QgZmxvd2k0ICpmbHAsCi0JCSAgICAgc3RydWN0IGZpYl9yZXN1bHQgKnJlcywgaW50IGZpYl9mbGFncykKLXsKLQlzdHJ1Y3QgdHJpZSAqdCA9IChzdHJ1Y3QgdHJpZSAqKSB0Yi0+dGJfZGF0YTsKLQlpbnQgcmV0OwotCXN0cnVjdCBydF90cmllX25vZGUgKm47Ci0Jc3RydWN0IHRub2RlICpwbjsKLQl1bnNpZ25lZCBpbnQgcG9zLCBiaXRzOwotCXRfa2V5IGtleSA9IG50b2hsKGZscC0+ZGFkZHIpOwotCXVuc2lnbmVkIGludCBjaG9wcGVkX29mZjsKLQl0X2tleSBjaW5kZXggPSAwOwotCXVuc2lnbmVkIGludCBjdXJyZW50X3ByZWZpeF9sZW5ndGggPSBLRVlMRU5HVEg7Ci0Jc3RydWN0IHRub2RlICpjbjsKLQl0X2tleSBwcmVmX21pc21hdGNoOwotCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JbiA9IHJjdV9kZXJlZmVyZW5jZSh0LT50cmllKTsKLQlpZiAoIW4pCi0JCWdvdG8gZmFpbGVkOwotCi0jaWZkZWYgQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTCi0JdC0+c3RhdHMuZ2V0cysrOwotI2VuZGlmCi0KLQkvKiBKdXN0IGEgbGVhZj8gKi8KLQlpZiAoSVNfTEVBRihuKSkgewotCQlyZXQgPSBjaGVja19sZWFmKHRiLCB0LCAoc3RydWN0IGxlYWYgKiluLCBrZXksIGZscCwgcmVzLCBmaWJfZmxhZ3MpOwotCQlnb3RvIGZvdW5kOwotCX0KLQotCXBuID0gKHN0cnVjdCB0bm9kZSAqKSBuOwotCWNob3BwZWRfb2ZmID0gMDsKLQotCXdoaWxlIChwbikgewotCQlwb3MgPSBwbi0+cG9zOwotCQliaXRzID0gcG4tPmJpdHM7Ci0KLQkJaWYgKCFjaG9wcGVkX29mZikKLQkJCWNpbmRleCA9IHRrZXlfZXh0cmFjdF9iaXRzKG1hc2tfcGZ4KGtleSwgY3VycmVudF9wcmVmaXhfbGVuZ3RoKSwKLQkJCQkJCSAgIHBvcywgYml0cyk7Ci0KLQkJbiA9IHRub2RlX2dldF9jaGlsZF9yY3UocG4sIGNpbmRleCk7Ci0KLQkJaWYgKG4gPT0gTlVMTCkgewotI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUwotCQkJdC0+c3RhdHMubnVsbF9ub2RlX2hpdCsrOwotI2VuZGlmCi0JCQlnb3RvIGJhY2t0cmFjZTsKLQkJfQotCi0JCWlmIChJU19MRUFGKG4pKSB7Ci0JCQlyZXQgPSBjaGVja19sZWFmKHRiLCB0LCAoc3RydWN0IGxlYWYgKiluLCBrZXksIGZscCwgcmVzLCBmaWJfZmxhZ3MpOwotCQkJaWYgKHJldCA+IDApCi0JCQkJZ290byBiYWNrdHJhY2U7Ci0JCQlnb3RvIGZvdW5kOwotCQl9Ci0KLQkJY24gPSAoc3RydWN0IHRub2RlICopbjsKLQotCQkvKgotCQkgKiBJdCdzIGEgdG5vZGUsIGFuZCB3ZSBjYW4gZG8gc29tZSBleHRyYSBjaGVja3MgaGVyZSBpZiB3ZQotCQkgKiBsaWtlLCB0byBhdm9pZCBkZXNjZW5kaW5nIGludG8gYSBkZWFkLWVuZCBicmFuY2guCi0JCSAqIFRoaXMgdG5vZGUgaXMgaW4gdGhlIHBhcmVudCdzIGNoaWxkIGFycmF5IGF0IGluZGV4Ci0JCSAqIGtleVtwX3Bvcy4ucF9wb3MrcF9iaXRzXSBidXQgcG90ZW50aWFsbHkgd2l0aCBzb21lIGJpdHMKLQkJICogY2hvcHBlZCBvZmYsIHNvIGluIHJlYWxpdHkgdGhlIGluZGV4IG1heSBiZSBqdXN0IGEKLQkJICogc3VicHJlZml4LCBwYWRkZWQgd2l0aCB6ZXJvIGF0IHRoZSBlbmQuCi0JCSAqIFdlIGNhbiBhbHNvIHRha2UgYSBsb29rIGF0IGFueSBza2lwcGVkIGJpdHMgaW4gdGhpcwotCQkgKiB0bm9kZSAtIGV2ZXJ5dGhpbmcgdXAgdG8gcF9wb3MgaXMgc3VwcG9zZWQgdG8gYmUgb2ssCi0JCSAqIGFuZCB0aGUgbm9uLWNob3BwZWQgYml0cyBvZiB0aGUgaW5kZXggKHNlIHByZXZpb3VzCi0JCSAqIHBhcmFncmFwaCkgYXJlIGFsc28gZ3VhcmFudGVlZCBvaywgYnV0IHRoZSByZXN0IGlzCi0JCSAqIGNvbnNpZGVyZWQgdW5rbm93bi4KLQkJICoKLQkJICogVGhlIHNraXBwZWQgYml0cyBhcmUga2V5W3BvcytiaXRzLi5jbi0+cG9zXS4KLQkJICovCi0KLQkJLyogSWYgY3VycmVudF9wcmVmaXhfbGVuZ3RoIDwgcG9zK2JpdHMsIHdlIGFyZSBhbHJlYWR5IGRvaW5nCi0JCSAqIGFjdHVhbCBwcmVmaXggIG1hdGNoaW5nLCB3aGljaCBtZWFucyBldmVyeXRoaW5nIGZyb20KLQkJICogcG9zKyhiaXRzLWNob3BwZWRfb2ZmKSBvbndhcmQgbXVzdCBiZSB6ZXJvIGFsb25nIHNvbWUKLQkJICogYnJhbmNoIG9mIHRoaXMgc3VidHJlZSAtIG90aGVyd2lzZSB0aGVyZSBpcyAqbm8qIHZhbGlkCi0JCSAqIHByZWZpeCBwcmVzZW50LiBIZXJlIHdlIGNhbiBvbmx5IGNoZWNrIHRoZSBza2lwcGVkCi0JCSAqIGJpdHMuIFJlbWVtYmVyLCBzaW5jZSB3ZSBoYXZlIGFscmVhZHkgaW5kZXhlZCBpbnRvIHRoZQotCQkgKiBwYXJlbnQncyBjaGlsZCBhcnJheSwgd2Uga25vdyB0aGF0IHRoZSBiaXRzIHdlIGNob3BwZWQgb2YKLQkJICogKmFyZSogemVyby4KLQkJICovCi0KLQkJLyogTk9UQSBCRU5FOiBDaGVja2luZyBvbmx5IHNraXBwZWQgYml0cwotCQkgICBmb3IgdGhlIG5ldyBub2RlIGhlcmUgKi8KLQotCQlpZiAoY3VycmVudF9wcmVmaXhfbGVuZ3RoIDwgcG9zK2JpdHMpIHsKLQkJCWlmICh0a2V5X2V4dHJhY3RfYml0cyhjbi0+a2V5LCBjdXJyZW50X3ByZWZpeF9sZW5ndGgsCi0JCQkJCQljbi0+cG9zIC0gY3VycmVudF9wcmVmaXhfbGVuZ3RoKQotCQkJICAgIHx8ICEoY24tPmNoaWxkWzBdKSkKLQkJCQlnb3RvIGJhY2t0cmFjZTsKLQkJfQotCi0JCS8qCi0JCSAqIElmIGNob3BwZWRfb2ZmPTAsIHRoZSBpbmRleCBpcyBmdWxseSB2YWxpZGF0ZWQgYW5kIHdlCi0JCSAqIG9ubHkgbmVlZCB0byBsb29rIGF0IHRoZSBza2lwcGVkIGJpdHMgZm9yIHRoaXMsIHRoZSBuZXcsCi0JCSAqIHRub2RlLiBXaGF0IHdlIGFjdHVhbGx5IHdhbnQgdG8gZG8gaXMgdG8gZmluZCBvdXQgaWYKLQkJICogdGhlc2Ugc2tpcHBlZCBiaXRzIG1hdGNoIG91ciBrZXkgcGVyZmVjdGx5LCBvciBpZiB3ZSB3aWxsCi0JCSAqIGhhdmUgdG8gY291bnQgb24gZmluZGluZyBhIG1hdGNoaW5nIHByZWZpeCBmdXJ0aGVyIGRvd24sCi0JCSAqIGJlY2F1c2UgaWYgd2UgZG8sIHdlIHdvdWxkIGxpa2UgdG8gaGF2ZSBzb21lIHdheSBvZgotCQkgKiB2ZXJpZnlpbmcgdGhlIGV4aXN0ZW5jZSBvZiBzdWNoIGEgcHJlZml4IGF0IHRoaXMgcG9pbnQuCi0JCSAqLwotCi0JCS8qIFRoZSBvbmx5IHRoaW5nIHdlIGNhbiBkbyBhdCB0aGlzIHBvaW50IGlzIHRvIHZlcmlmeSB0aGF0Ci0JCSAqIGFueSBzdWNoIG1hdGNoaW5nIHByZWZpeCBjYW4gaW5kZWVkIGJlIGEgcHJlZml4IHRvIG91cgotCQkgKiBrZXksIGFuZCBpZiB0aGUgYml0cyBpbiB0aGUgbm9kZSB3ZSBhcmUgaW5zcGVjdGluZyB0aGF0Ci0JCSAqIGRvIG5vdCBtYXRjaCBvdXIga2V5IGFyZSBub3QgWkVSTywgdGhpcyBjYW5ub3QgYmUgdHJ1ZS4KLQkJICogVGh1cywgZmluZCBvdXQgd2hlcmUgdGhlcmUgaXMgYSBtaXNtYXRjaCAoYmVmb3JlIGNuLT5wb3MpCi0JCSAqIGFuZCB2ZXJpZnkgdGhhdCBhbGwgdGhlIG1pc21hdGNoaW5nIGJpdHMgYXJlIHplcm8gaW4gdGhlCi0JCSAqIG5ldyB0bm9kZSdzIGtleS4KLQkJICovCi0KLQkJLyoKLQkJICogTm90ZTogV2UgYXJlbid0IHZlcnkgY29uY2VybmVkIGFib3V0IHRoZSBwaWVjZSBvZgotCQkgKiB0aGUga2V5IHRoYXQgcHJlY2VkZSBwbi0+cG9zK3BuLT5iaXRzLCBzaW5jZSB0aGVzZQotCQkgKiBoYXZlIGFscmVhZHkgYmVlbiBjaGVja2VkLiBUaGUgYml0cyBhZnRlciBjbi0+cG9zCi0JCSAqIGFyZW4ndCBjaGVja2VkIHNpbmNlIHRoZXNlIGFyZSBieSBkZWZpbml0aW9uCi0JCSAqICJ1bmtub3duIiBhdCB0aGlzIHBvaW50LiBUaHVzLCB3aGF0IHdlIHdhbnQgdG8gc2VlCi0JCSAqIGlzIGlmIHdlIGFyZSBhYm91dCB0byBlbnRlciB0aGUgInByZWZpeCBtYXRjaGluZyIKLQkJICogc3RhdGUsIGFuZCBpbiB0aGF0IGNhc2UgdmVyaWZ5IHRoYXQgdGhlIHNraXBwZWQKLQkJICogYml0cyB0aGF0IHdpbGwgcHJldmFpbCB0aHJvdWdob3V0IHRoaXMgc3VidHJlZSBhcmUKLQkJICogemVybywgYXMgdGhleSBoYXZlIHRvIGJlIGlmIHdlIGFyZSB0byBmaW5kIGEKLQkJICogbWF0Y2hpbmcgcHJlZml4LgotCQkgKi8KLQotCQlwcmVmX21pc21hdGNoID0gbWFza19wZngoY24tPmtleSBeIGtleSwgY24tPnBvcyk7Ci0KLQkJLyoKLQkJICogSW4gc2hvcnQ6IElmIHNraXBwZWQgYml0cyBpbiB0aGlzIG5vZGUgZG8gbm90IG1hdGNoCi0JCSAqIHRoZSBzZWFyY2gga2V5LCBlbnRlciB0aGUgInByZWZpeCBtYXRjaGluZyIKLQkJICogc3RhdGUuZGlyZWN0bHkuCi0JCSAqLwotCQlpZiAocHJlZl9taXNtYXRjaCkgewotCQkJLyogZmxzKHgpID0gX19mbHMoeCkgKyAxICovCi0JCQlpbnQgbXAgPSBLRVlMRU5HVEggLSBfX2ZscyhwcmVmX21pc21hdGNoKSAtIDE7Ci0KLQkJCWlmICh0a2V5X2V4dHJhY3RfYml0cyhjbi0+a2V5LCBtcCwgY24tPnBvcyAtIG1wKSAhPSAwKQotCQkJCWdvdG8gYmFja3RyYWNlOwotCi0JCQlpZiAoY3VycmVudF9wcmVmaXhfbGVuZ3RoID49IGNuLT5wb3MpCi0JCQkJY3VycmVudF9wcmVmaXhfbGVuZ3RoID0gbXA7Ci0JCX0KLQotCQlwbiA9IChzdHJ1Y3QgdG5vZGUgKiluOyAvKiBEZXNjZW5kICovCi0JCWNob3BwZWRfb2ZmID0gMDsKLQkJY29udGludWU7Ci0KLWJhY2t0cmFjZToKLQkJY2hvcHBlZF9vZmYrKzsKLQotCQkvKiBBcyB6ZXJvIGRvbid0IGNoYW5nZSB0aGUgY2hpbGQga2V5IChjaW5kZXgpICovCi0JCXdoaWxlICgoY2hvcHBlZF9vZmYgPD0gcG4tPmJpdHMpCi0JCSAgICAgICAmJiAhKGNpbmRleCAmICgxPDwoY2hvcHBlZF9vZmYtMSkpKSkKLQkJCWNob3BwZWRfb2ZmKys7Ci0KLQkJLyogRGVjcmVhc2UgY3VycmVudF8uLi4gd2l0aCBiaXRzIGNob3BwZWQgb2ZmICovCi0JCWlmIChjdXJyZW50X3ByZWZpeF9sZW5ndGggPiBwbi0+cG9zICsgcG4tPmJpdHMgLSBjaG9wcGVkX29mZikKLQkJCWN1cnJlbnRfcHJlZml4X2xlbmd0aCA9IHBuLT5wb3MgKyBwbi0+Yml0cwotCQkJCS0gY2hvcHBlZF9vZmY7Ci0KLQkJLyoKLQkJICogRWl0aGVyIHdlIGRvIHRoZSBhY3R1YWwgY2hvcCBvZmYgYWNjb3JkaW5nIG9yIGlmIHdlIGhhdmUKLQkJICogY2hvcHBlZCBvZmYgYWxsIGJpdHMgaW4gdGhpcyB0bm9kZSB3YWxrIHVwIHRvIG91ciBwYXJlbnQuCi0JCSAqLwotCi0JCWlmIChjaG9wcGVkX29mZiA8PSBwbi0+Yml0cykgewotCQkJY2luZGV4ICY9IH4oMSA8PCAoY2hvcHBlZF9vZmYtMSkpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IHRub2RlICpwYXJlbnQgPSBub2RlX3BhcmVudF9yY3UoKHN0cnVjdCBydF90cmllX25vZGUgKikgcG4pOwotCQkJaWYgKCFwYXJlbnQpCi0JCQkJZ290byBmYWlsZWQ7Ci0KLQkJCS8qIEdldCBDaGlsZCdzIGluZGV4ICovCi0JCQljaW5kZXggPSB0a2V5X2V4dHJhY3RfYml0cyhwbi0+a2V5LCBwYXJlbnQtPnBvcywgcGFyZW50LT5iaXRzKTsKLQkJCXBuID0gcGFyZW50OwotCQkJY2hvcHBlZF9vZmYgPSAwOwotCi0jaWZkZWYgQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTCi0JCQl0LT5zdGF0cy5iYWNrdHJhY2srKzsKLSNlbmRpZgotCQkJZ290byBiYWNrdHJhY2U7Ci0JCX0KLQl9Ci1mYWlsZWQ6Ci0JcmV0ID0gMTsKLWZvdW5kOgotCXJjdV9yZWFkX3VubG9jaygpOwotCXJldHVybiByZXQ7CisJZ290byBiYWNrdHJhY2U7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmaWJfdGFibGVfbG9va3VwKTsKIAogLyoKICAqIFJlbW92ZSB0aGUgbGVhZiBhbmQgcmV0dXJuIHBhcmVudC4KICAqLwotc3RhdGljIHZvaWQgdHJpZV9sZWFmX3JlbW92ZShzdHJ1Y3QgdHJpZSAqdCwgc3RydWN0IGxlYWYgKmwpCitzdGF0aWMgdm9pZCB0cmllX2xlYWZfcmVtb3ZlKHN0cnVjdCB0cmllICp0LCBzdHJ1Y3QgdG5vZGUgKmwpCiB7Ci0Jc3RydWN0IHRub2RlICp0cCA9IG5vZGVfcGFyZW50KChzdHJ1Y3QgcnRfdHJpZV9ub2RlICopIGwpOworCXN0cnVjdCB0bm9kZSAqdHAgPSBub2RlX3BhcmVudChsKTsKIAogCXByX2RlYnVnKCJlbnRlcmluZyB0cmllX2xlYWZfcmVtb3ZlKCVwKVxuIiwgbCk7CiAKIAlpZiAodHApIHsKLQkJdF9rZXkgY2luZGV4ID0gdGtleV9leHRyYWN0X2JpdHMobC0+a2V5LCB0cC0+cG9zLCB0cC0+Yml0cyk7Ci0JCXB1dF9jaGlsZCh0cCwgY2luZGV4LCBOVUxMKTsKKwkJcHV0X2NoaWxkKHRwLCBnZXRfaW5kZXgobC0+a2V5LCB0cCksIE5VTEwpOwogCQl0cmllX3JlYmFsYW5jZSh0LCB0cCk7Ci0JfSBlbHNlCisJfSBlbHNlIHsKIAkJUkNVX0lOSVRfUE9JTlRFUih0LT50cmllLCBOVUxMKTsKKwl9CiAKLQlmcmVlX2xlYWYobCk7CisJbm9kZV9mcmVlKGwpOwogfQogCiAvKgpAQCAtMTYxOSw3ICsxNTAyLDcgQEAKIAl1OCB0b3MgPSBjZmctPmZjX3RvczsKIAlzdHJ1Y3QgZmliX2FsaWFzICpmYSwgKmZhX3RvX2RlbGV0ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpmYV9oZWFkOwotCXN0cnVjdCBsZWFmICpsOworCXN0cnVjdCB0bm9kZSAqbDsKIAlzdHJ1Y3QgbGVhZl9pbmZvICpsaTsKIAogCWlmIChwbGVuID4gMzIpCkBAIC0xNjg0LDcgKzE1NjcsNyBAQAogCQl0Yi0+dGJfbnVtX2RlZmF1bHQtLTsKIAogCWlmIChsaXN0X2VtcHR5KGZhX2hlYWQpKSB7Ci0JCWhsaXN0X2RlbF9yY3UoJmxpLT5obGlzdCk7CisJCXJlbW92ZV9sZWFmX2luZm8obCwgbGkpOwogCQlmcmVlX2xlYWZfaW5mbyhsaSk7CiAJfQogCkBAIC0xNzE3LDEyICsxNjAwLDEzIEBACiAJcmV0dXJuIGZvdW5kOwogfQogCi1zdGF0aWMgaW50IHRyaWVfZmx1c2hfbGVhZihzdHJ1Y3QgbGVhZiAqbCkKK3N0YXRpYyBpbnQgdHJpZV9mbHVzaF9sZWFmKHN0cnVjdCB0bm9kZSAqbCkKIHsKIAlpbnQgZm91bmQgPSAwOwogCXN0cnVjdCBobGlzdF9oZWFkICpsaWggPSAmbC0+bGlzdDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdG1wOwogCXN0cnVjdCBsZWFmX2luZm8gKmxpID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyIHBsZW4gPSBLRVlMRU5HVEg7CiAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpLCB0bXAsIGxpaCwgaGxpc3QpIHsKIAkJZm91bmQgKz0gdHJpZV9mbHVzaF9saXN0KCZsaS0+ZmFsaCk7CkBAIC0xNzMwLDggKzE2MTQsMTQgQEAKIAkJaWYgKGxpc3RfZW1wdHkoJmxpLT5mYWxoKSkgewogCQkJaGxpc3RfZGVsX3JjdSgmbGktPmhsaXN0KTsKIAkJCWZyZWVfbGVhZl9pbmZvKGxpKTsKKwkJCWNvbnRpbnVlOwogCQl9CisKKwkJcGxlbiA9IGxpLT5wbGVuOwogCX0KKworCWwtPnNsZW4gPSBLRVlMRU5HVEggLSBwbGVuOworCiAJcmV0dXJuIGZvdW5kOwogfQogCkBAIC0xNzM5LDYzICsxNjI5LDU3IEBACiAgKiBTY2FuIGZvciB0aGUgbmV4dCByaWdodCBsZWFmIHN0YXJ0aW5nIGF0IG5vZGUgcC0+Y2hpbGRbaWR4XQogICogU2luY2Ugd2UgaGF2ZSBiYWNrIHBvaW50ZXIsIG5vIHJlY3Vyc2lvbiBuZWNlc3NhcnkuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbGVhZiAqbGVhZl93YWxrX3JjdShzdHJ1Y3QgdG5vZGUgKnAsIHN0cnVjdCBydF90cmllX25vZGUgKmMpCitzdGF0aWMgc3RydWN0IHRub2RlICpsZWFmX3dhbGtfcmN1KHN0cnVjdCB0bm9kZSAqcCwgc3RydWN0IHRub2RlICpjKQogewogCWRvIHsKLQkJdF9rZXkgaWR4OworCQl1bnNpZ25lZCBsb25nIGlkeCA9IGMgPyBpZHggPSBnZXRfaW5kZXgoYy0+a2V5LCBwKSArIDEgOiAwOwogCi0JCWlmIChjKQotCQkJaWR4ID0gdGtleV9leHRyYWN0X2JpdHMoYy0+a2V5LCBwLT5wb3MsIHAtPmJpdHMpICsgMTsKLQkJZWxzZQotCQkJaWR4ID0gMDsKLQotCQl3aGlsZSAoaWR4IDwgMXUgPDwgcC0+Yml0cykgeworCQl3aGlsZSAoaWR4IDwgdG5vZGVfY2hpbGRfbGVuZ3RoKHApKSB7CiAJCQljID0gdG5vZGVfZ2V0X2NoaWxkX3JjdShwLCBpZHgrKyk7CiAJCQlpZiAoIWMpCiAJCQkJY29udGludWU7CiAKIAkJCWlmIChJU19MRUFGKGMpKQotCQkJCXJldHVybiAoc3RydWN0IGxlYWYgKikgYzsKKwkJCQlyZXR1cm4gYzsKIAogCQkJLyogUmVzY2FuIHN0YXJ0IHNjYW5uaW5nIGluIG5ldyBub2RlICovCi0JCQlwID0gKHN0cnVjdCB0bm9kZSAqKSBjOworCQkJcCA9IGM7CiAJCQlpZHggPSAwOwogCQl9CiAKIAkJLyogTm9kZSBlbXB0eSwgd2FsayBiYWNrIHVwIHRvIHBhcmVudCAqLwotCQljID0gKHN0cnVjdCBydF90cmllX25vZGUgKikgcDsKKwkJYyA9IHA7CiAJfSB3aGlsZSAoKHAgPSBub2RlX3BhcmVudF9yY3UoYykpICE9IE5VTEwpOwogCiAJcmV0dXJuIE5VTEw7IC8qIFJvb3Qgb2YgdHJpZSAqLwogfQogCi1zdGF0aWMgc3RydWN0IGxlYWYgKnRyaWVfZmlyc3RsZWFmKHN0cnVjdCB0cmllICp0KQorc3RhdGljIHN0cnVjdCB0bm9kZSAqdHJpZV9maXJzdGxlYWYoc3RydWN0IHRyaWUgKnQpCiB7Ci0Jc3RydWN0IHRub2RlICpuID0gKHN0cnVjdCB0bm9kZSAqKXJjdV9kZXJlZmVyZW5jZV9ydG5sKHQtPnRyaWUpOworCXN0cnVjdCB0bm9kZSAqbiA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKHQtPnRyaWUpOwogCiAJaWYgKCFuKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChJU19MRUFGKG4pKSAgICAgICAgICAvKiB0cmllIGlzIGp1c3QgYSBsZWFmICovCi0JCXJldHVybiAoc3RydWN0IGxlYWYgKikgbjsKKwkJcmV0dXJuIG47CiAKIAlyZXR1cm4gbGVhZl93YWxrX3JjdShuLCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBsZWFmICp0cmllX25leHRsZWFmKHN0cnVjdCBsZWFmICpsKQorc3RhdGljIHN0cnVjdCB0bm9kZSAqdHJpZV9uZXh0bGVhZihzdHJ1Y3QgdG5vZGUgKmwpCiB7Ci0Jc3RydWN0IHJ0X3RyaWVfbm9kZSAqYyA9IChzdHJ1Y3QgcnRfdHJpZV9ub2RlICopIGw7Ci0Jc3RydWN0IHRub2RlICpwID0gbm9kZV9wYXJlbnRfcmN1KGMpOworCXN0cnVjdCB0bm9kZSAqcCA9IG5vZGVfcGFyZW50X3JjdShsKTsKIAogCWlmICghcCkKIAkJcmV0dXJuIE5VTEw7CS8qIHRyaWUgd2l0aCBqdXN0IG9uZSBsZWFmICovCiAKLQlyZXR1cm4gbGVhZl93YWxrX3JjdShwLCBjKTsKKwlyZXR1cm4gbGVhZl93YWxrX3JjdShwLCBsKTsKIH0KIAotc3RhdGljIHN0cnVjdCBsZWFmICp0cmllX2xlYWZpbmRleChzdHJ1Y3QgdHJpZSAqdCwgaW50IGluZGV4KQorc3RhdGljIHN0cnVjdCB0bm9kZSAqdHJpZV9sZWFmaW5kZXgoc3RydWN0IHRyaWUgKnQsIGludCBpbmRleCkKIHsKLQlzdHJ1Y3QgbGVhZiAqbCA9IHRyaWVfZmlyc3RsZWFmKHQpOworCXN0cnVjdCB0bm9kZSAqbCA9IHRyaWVfZmlyc3RsZWFmKHQpOwogCiAJd2hpbGUgKGwgJiYgaW5kZXgtLSA+IDApCiAJCWwgPSB0cmllX25leHRsZWFmKGwpOwpAQCAtMTgxMCwxOSArMTY5NCwyOCBAQAogaW50IGZpYl90YWJsZV9mbHVzaChzdHJ1Y3QgZmliX3RhYmxlICp0YikKIHsKIAlzdHJ1Y3QgdHJpZSAqdCA9IChzdHJ1Y3QgdHJpZSAqKSB0Yi0+dGJfZGF0YTsKLQlzdHJ1Y3QgbGVhZiAqbCwgKmxsID0gTlVMTDsKKwlzdHJ1Y3QgdG5vZGUgKmwsICpsbCA9IE5VTEw7CiAJaW50IGZvdW5kID0gMDsKIAogCWZvciAobCA9IHRyaWVfZmlyc3RsZWFmKHQpOyBsOyBsID0gdHJpZV9uZXh0bGVhZihsKSkgewogCQlmb3VuZCArPSB0cmllX2ZsdXNoX2xlYWYobCk7CiAKLQkJaWYgKGxsICYmIGhsaXN0X2VtcHR5KCZsbC0+bGlzdCkpCi0JCQl0cmllX2xlYWZfcmVtb3ZlKHQsIGxsKTsKKwkJaWYgKGxsKSB7CisJCQlpZiAoaGxpc3RfZW1wdHkoJmxsLT5saXN0KSkKKwkJCQl0cmllX2xlYWZfcmVtb3ZlKHQsIGxsKTsKKwkJCWVsc2UKKwkJCQlsZWFmX3B1bGxfc3VmZml4KGxsKTsKKwkJfQorCiAJCWxsID0gbDsKIAl9CiAKLQlpZiAobGwgJiYgaGxpc3RfZW1wdHkoJmxsLT5saXN0KSkKLQkJdHJpZV9sZWFmX3JlbW92ZSh0LCBsbCk7CisJaWYgKGxsKSB7CisJCWlmIChobGlzdF9lbXB0eSgmbGwtPmxpc3QpKQorCQkJdHJpZV9sZWFmX3JlbW92ZSh0LCBsbCk7CisJCWVsc2UKKwkJCWxlYWZfcHVsbF9zdWZmaXgobGwpOworCX0KIAogCXByX2RlYnVnKCJ0cmllX2ZsdXNoIGZvdW5kPSVkXG4iLCBmb3VuZCk7CiAJcmV0dXJuIGZvdW5kOwpAQCAtMTgzMCw2ICsxNzIzLDExIEBACiAKIHZvaWQgZmliX2ZyZWVfdGFibGUoc3RydWN0IGZpYl90YWJsZSAqdGIpCiB7CisjaWZkZWYgQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTCisJc3RydWN0IHRyaWUgKnQgPSAoc3RydWN0IHRyaWUgKil0Yi0+dGJfZGF0YTsKKworCWZyZWVfcGVyY3B1KHQtPnN0YXRzKTsKKyNlbmRpZiAvKiBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMgKi8KIAlrZnJlZSh0Yik7CiB9CiAKQEAgLTE4NzAsNyArMTc2OCw3IEBACiAJcmV0dXJuIHNrYi0+bGVuOwogfQogCi1zdGF0aWMgaW50IGZuX3RyaWVfZHVtcF9sZWFmKHN0cnVjdCBsZWFmICpsLCBzdHJ1Y3QgZmliX3RhYmxlICp0YiwKK3N0YXRpYyBpbnQgZm5fdHJpZV9kdW1wX2xlYWYoc3RydWN0IHRub2RlICpsLCBzdHJ1Y3QgZmliX3RhYmxlICp0YiwKIAkJCXN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKIAlzdHJ1Y3QgbGVhZl9pbmZvICpsaTsKQEAgLTE5MDYsNyArMTgwNCw3IEBACiBpbnQgZmliX3RhYmxlX2R1bXAoc3RydWN0IGZpYl90YWJsZSAqdGIsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKLQlzdHJ1Y3QgbGVhZiAqbDsKKwlzdHJ1Y3QgdG5vZGUgKmw7CiAJc3RydWN0IHRyaWUgKnQgPSAoc3RydWN0IHRyaWUgKikgdGItPnRiX2RhdGE7CiAJdF9rZXkga2V5ID0gY2ItPmFyZ3NbMl07CiAJaW50IGNvdW50ID0gY2ItPmFyZ3NbM107CkBAIC0xOTUyLDcgKzE4NTAsNyBAQAogCQkJCQkgIDAsIFNMQUJfUEFOSUMsIE5VTEwpOwogCiAJdHJpZV9sZWFmX2ttZW0gPSBrbWVtX2NhY2hlX2NyZWF0ZSgiaXBfZmliX3RyaWUiLAotCQkJCQkgICBtYXgoc2l6ZW9mKHN0cnVjdCBsZWFmKSwKKwkJCQkJICAgbWF4KHNpemVvZihzdHJ1Y3QgdG5vZGUpLAogCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBsZWFmX2luZm8pKSwKIAkJCQkJICAgMCwgU0xBQl9QQU5JQywgTlVMTCk7CiB9CkBAIC0xOTczLDcgKzE4NzEsMTQgQEAKIAl0Yi0+dGJfbnVtX2RlZmF1bHQgPSAwOwogCiAJdCA9IChzdHJ1Y3QgdHJpZSAqKSB0Yi0+dGJfZGF0YTsKLQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CisJUkNVX0lOSVRfUE9JTlRFUih0LT50cmllLCBOVUxMKTsKKyNpZmRlZiBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMKKwl0LT5zdGF0cyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgdHJpZV91c2Vfc3RhdHMpOworCWlmICghdC0+c3RhdHMpIHsKKwkJa2ZyZWUodGIpOworCQl0YiA9IE5VTEw7CisJfQorI2VuZGlmCiAKIAlyZXR1cm4gdGI7CiB9CkBAIC0xOTg4LDEwICsxODkzLDEwIEBACiAJdW5zaWduZWQgaW50IGRlcHRoOwogfTsKIAotc3RhdGljIHN0cnVjdCBydF90cmllX25vZGUgKmZpYl90cmllX2dldF9uZXh0KHN0cnVjdCBmaWJfdHJpZV9pdGVyICppdGVyKQorc3RhdGljIHN0cnVjdCB0bm9kZSAqZmliX3RyaWVfZ2V0X25leHQoc3RydWN0IGZpYl90cmllX2l0ZXIgKml0ZXIpCiB7CisJdW5zaWduZWQgbG9uZyBjaW5kZXggPSBpdGVyLT5pbmRleDsKIAlzdHJ1Y3QgdG5vZGUgKnRuID0gaXRlci0+dG5vZGU7Ci0JdW5zaWduZWQgaW50IGNpbmRleCA9IGl0ZXItPmluZGV4OwogCXN0cnVjdCB0bm9kZSAqcDsKIAogCS8qIEEgc2luZ2xlIGVudHJ5IHJvdXRpbmcgdGFibGUgKi8KQEAgLTIwMDEsOCArMTkwNiw4IEBACiAJcHJfZGVidWcoImdldF9uZXh0IGl0ZXI9e25vZGU9JXAgaW5kZXg9JWQgZGVwdGg9JWR9XG4iLAogCQkgaXRlci0+dG5vZGUsIGl0ZXItPmluZGV4LCBpdGVyLT5kZXB0aCk7CiByZXNjYW46Ci0Jd2hpbGUgKGNpbmRleCA8ICgxPDx0bi0+Yml0cykpIHsKLQkJc3RydWN0IHJ0X3RyaWVfbm9kZSAqbiA9IHRub2RlX2dldF9jaGlsZF9yY3UodG4sIGNpbmRleCk7CisJd2hpbGUgKGNpbmRleCA8IHRub2RlX2NoaWxkX2xlbmd0aCh0bikpIHsKKwkJc3RydWN0IHRub2RlICpuID0gdG5vZGVfZ2V0X2NoaWxkX3JjdSh0biwgY2luZGV4KTsKIAogCQlpZiAobikgewogCQkJaWYgKElTX0xFQUYobikpIHsKQEAgLTIwMTAsNyArMTkxNSw3IEBACiAJCQkJaXRlci0+aW5kZXggPSBjaW5kZXggKyAxOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBwdXNoIGRvd24gb25lIGxldmVsICovCi0JCQkJaXRlci0+dG5vZGUgPSAoc3RydWN0IHRub2RlICopIG47CisJCQkJaXRlci0+dG5vZGUgPSBuOwogCQkJCWl0ZXItPmluZGV4ID0gMDsKIAkJCQkrK2l0ZXItPmRlcHRoOwogCQkJfQpAQCAtMjAyMSw5ICsxOTI2LDkgQEAKIAl9CiAKIAkvKiBDdXJyZW50IG5vZGUgZXhoYXVzdGVkLCBwb3AgYmFjayB1cCAqLwotCXAgPSBub2RlX3BhcmVudF9yY3UoKHN0cnVjdCBydF90cmllX25vZGUgKil0bik7CisJcCA9IG5vZGVfcGFyZW50X3JjdSh0bik7CiAJaWYgKHApIHsKLQkJY2luZGV4ID0gdGtleV9leHRyYWN0X2JpdHModG4tPmtleSwgcC0+cG9zLCBwLT5iaXRzKSsxOworCQljaW5kZXggPSBnZXRfaW5kZXgodG4tPmtleSwgcCkgKyAxOwogCQl0biA9IHA7CiAJCS0taXRlci0+ZGVwdGg7CiAJCWdvdG8gcmVzY2FuOwpAQCAtMjAzMywxMCArMTkzOCwxMCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0X3RyaWVfbm9kZSAqZmliX3RyaWVfZ2V0X2ZpcnN0KHN0cnVjdCBmaWJfdHJpZV9pdGVyICppdGVyLAorc3RhdGljIHN0cnVjdCB0bm9kZSAqZmliX3RyaWVfZ2V0X2ZpcnN0KHN0cnVjdCBmaWJfdHJpZV9pdGVyICppdGVyLAogCQkJCSAgICAgICBzdHJ1Y3QgdHJpZSAqdCkKIHsKLQlzdHJ1Y3QgcnRfdHJpZV9ub2RlICpuOworCXN0cnVjdCB0bm9kZSAqbjsKIAogCWlmICghdCkKIAkJcmV0dXJuIE5VTEw7CkBAIC0yMDQ2LDcgKzE5NTEsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChJU19UTk9ERShuKSkgewotCQlpdGVyLT50bm9kZSA9IChzdHJ1Y3QgdG5vZGUgKikgbjsKKwkJaXRlci0+dG5vZGUgPSBuOwogCQlpdGVyLT5pbmRleCA9IDA7CiAJCWl0ZXItPmRlcHRoID0gMTsKIAl9IGVsc2UgewpAQCAtMjA2MCw3ICsxOTY1LDcgQEAKIAogc3RhdGljIHZvaWQgdHJpZV9jb2xsZWN0X3N0YXRzKHN0cnVjdCB0cmllICp0LCBzdHJ1Y3QgdHJpZV9zdGF0ICpzKQogewotCXN0cnVjdCBydF90cmllX25vZGUgKm47CisJc3RydWN0IHRub2RlICpuOwogCXN0cnVjdCBmaWJfdHJpZV9pdGVyIGl0ZXI7CiAKIAltZW1zZXQocywgMCwgc2l6ZW9mKCpzKSk7CkBAIC0yMDY4LDcgKzE5NzMsNiBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKG4gPSBmaWJfdHJpZV9nZXRfZmlyc3QoJml0ZXIsIHQpOyBuOyBuID0gZmliX3RyaWVfZ2V0X25leHQoJml0ZXIpKSB7CiAJCWlmIChJU19MRUFGKG4pKSB7Ci0JCQlzdHJ1Y3QgbGVhZiAqbCA9IChzdHJ1Y3QgbGVhZiAqKW47CiAJCQlzdHJ1Y3QgbGVhZl9pbmZvICpsaTsKIAogCQkJcy0+bGVhdmVzKys7CkBAIC0yMDc2LDE5ICsxOTgwLDEzIEBACiAJCQlpZiAoaXRlci5kZXB0aCA+IHMtPm1heGRlcHRoKQogCQkJCXMtPm1heGRlcHRoID0gaXRlci5kZXB0aDsKIAotCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGxpLCAmbC0+bGlzdCwgaGxpc3QpCisJCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGksICZuLT5saXN0LCBobGlzdCkKIAkJCQkrK3MtPnByZWZpeGVzOwogCQl9IGVsc2UgewotCQkJY29uc3Qgc3RydWN0IHRub2RlICp0biA9IChjb25zdCBzdHJ1Y3QgdG5vZGUgKikgbjsKLQkJCWludCBpOwotCiAJCQlzLT50bm9kZXMrKzsKLQkJCWlmICh0bi0+Yml0cyA8IE1BWF9TVEFUX0RFUFRIKQotCQkJCXMtPm5vZGVzaXplc1t0bi0+Yml0c10rKzsKLQotCQkJZm9yIChpID0gMDsgaSA8ICgxPDx0bi0+Yml0cyk7IGkrKykKLQkJCQlpZiAoIXRuLT5jaGlsZFtpXSkKLQkJCQkJcy0+bnVsbHBvaW50ZXJzKys7CisJCQlpZiAobi0+Yml0cyA8IE1BWF9TVEFUX0RFUFRIKQorCQkJCXMtPm5vZGVzaXplc1tuLT5iaXRzXSsrOworCQkJcy0+bnVsbHBvaW50ZXJzICs9IG4tPmVtcHR5X2NoaWxkcmVuOwogCQl9CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMjExMSw3ICsyMDA5LDcgQEAKIAlzZXFfcHJpbnRmKHNlcSwgIlx0TWF4IGRlcHRoOiAgICAgICV1XG4iLCBzdGF0LT5tYXhkZXB0aCk7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIlx0TGVhdmVzOiAgICAgICAgICV1XG4iLCBzdGF0LT5sZWF2ZXMpOwotCWJ5dGVzID0gc2l6ZW9mKHN0cnVjdCBsZWFmKSAqIHN0YXQtPmxlYXZlczsKKwlieXRlcyA9IHNpemVvZihzdHJ1Y3QgdG5vZGUpICogc3RhdC0+bGVhdmVzOwogCiAJc2VxX3ByaW50ZihzZXEsICJcdFByZWZpeGVzOiAgICAgICAldVxuIiwgc3RhdC0+cHJlZml4ZXMpOwogCWJ5dGVzICs9IHNpemVvZihzdHJ1Y3QgbGVhZl9pbmZvKSAqIHN0YXQtPnByZWZpeGVzOwpAQCAtMjEzMiwyNSArMjAzMCwzOCBAQAogCXNlcV9wdXRjKHNlcSwgJ1xuJyk7CiAJc2VxX3ByaW50ZihzZXEsICJcdFBvaW50ZXJzOiAldVxuIiwgcG9pbnRlcnMpOwogCi0JYnl0ZXMgKz0gc2l6ZW9mKHN0cnVjdCBydF90cmllX25vZGUgKikgKiBwb2ludGVyczsKKwlieXRlcyArPSBzaXplb2Yoc3RydWN0IHRub2RlICopICogcG9pbnRlcnM7CiAJc2VxX3ByaW50ZihzZXEsICJOdWxsIHB0cnM6ICV1XG4iLCBzdGF0LT5udWxscG9pbnRlcnMpOwogCXNlcV9wcmludGYoc2VxLCAiVG90YWwgc2l6ZTogJXUgIGtCXG4iLCAoYnl0ZXMgKyAxMDIzKSAvIDEwMjQpOwogfQogCiAjaWZkZWYgQ09ORklHX0lQX0ZJQl9UUklFX1NUQVRTCiBzdGF0aWMgdm9pZCB0cmllX3Nob3dfdXNhZ2Uoc3RydWN0IHNlcV9maWxlICpzZXEsCi0JCQkgICAgY29uc3Qgc3RydWN0IHRyaWVfdXNlX3N0YXRzICpzdGF0cykKKwkJCSAgICBjb25zdCBzdHJ1Y3QgdHJpZV91c2Vfc3RhdHMgX19wZXJjcHUgKnN0YXRzKQogeworCXN0cnVjdCB0cmllX3VzZV9zdGF0cyBzID0geyAwIH07CisJaW50IGNwdTsKKworCS8qIGxvb3AgdGhyb3VnaCBhbGwgb2YgdGhlIENQVXMgYW5kIGdhdGhlciB1cCB0aGUgc3RhdHMgKi8KKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCWNvbnN0IHN0cnVjdCB0cmllX3VzZV9zdGF0cyAqcGNwdSA9IHBlcl9jcHVfcHRyKHN0YXRzLCBjcHUpOworCisJCXMuZ2V0cyArPSBwY3B1LT5nZXRzOworCQlzLmJhY2t0cmFjayArPSBwY3B1LT5iYWNrdHJhY2s7CisJCXMuc2VtYW50aWNfbWF0Y2hfcGFzc2VkICs9IHBjcHUtPnNlbWFudGljX21hdGNoX3Bhc3NlZDsKKwkJcy5zZW1hbnRpY19tYXRjaF9taXNzICs9IHBjcHUtPnNlbWFudGljX21hdGNoX21pc3M7CisJCXMubnVsbF9ub2RlX2hpdCArPSBwY3B1LT5udWxsX25vZGVfaGl0OworCQlzLnJlc2l6ZV9ub2RlX3NraXBwZWQgKz0gcGNwdS0+cmVzaXplX25vZGVfc2tpcHBlZDsKKwl9CisKIAlzZXFfcHJpbnRmKHNlcSwgIlxuQ291bnRlcnM6XG4tLS0tLS0tLS1cbiIpOwotCXNlcV9wcmludGYoc2VxLCAiZ2V0cyA9ICV1XG4iLCBzdGF0cy0+Z2V0cyk7Ci0Jc2VxX3ByaW50ZihzZXEsICJiYWNrdHJhY2tzID0gJXVcbiIsIHN0YXRzLT5iYWNrdHJhY2spOworCXNlcV9wcmludGYoc2VxLCAiZ2V0cyA9ICV1XG4iLCBzLmdldHMpOworCXNlcV9wcmludGYoc2VxLCAiYmFja3RyYWNrcyA9ICV1XG4iLCBzLmJhY2t0cmFjayk7CiAJc2VxX3ByaW50ZihzZXEsICJzZW1hbnRpYyBtYXRjaCBwYXNzZWQgPSAldVxuIiwKLQkJICAgc3RhdHMtPnNlbWFudGljX21hdGNoX3Bhc3NlZCk7Ci0Jc2VxX3ByaW50ZihzZXEsICJzZW1hbnRpYyBtYXRjaCBtaXNzID0gJXVcbiIsCi0JCSAgIHN0YXRzLT5zZW1hbnRpY19tYXRjaF9taXNzKTsKLQlzZXFfcHJpbnRmKHNlcSwgIm51bGwgbm9kZSBoaXQ9ICV1XG4iLCBzdGF0cy0+bnVsbF9ub2RlX2hpdCk7Ci0Jc2VxX3ByaW50ZihzZXEsICJza2lwcGVkIG5vZGUgcmVzaXplID0gJXVcblxuIiwKLQkJICAgc3RhdHMtPnJlc2l6ZV9ub2RlX3NraXBwZWQpOworCQkgICBzLnNlbWFudGljX21hdGNoX3Bhc3NlZCk7CisJc2VxX3ByaW50ZihzZXEsICJzZW1hbnRpYyBtYXRjaCBtaXNzID0gJXVcbiIsIHMuc2VtYW50aWNfbWF0Y2hfbWlzcyk7CisJc2VxX3ByaW50ZihzZXEsICJudWxsIG5vZGUgaGl0PSAldVxuIiwgcy5udWxsX25vZGVfaGl0KTsKKwlzZXFfcHJpbnRmKHNlcSwgInNraXBwZWQgbm9kZSByZXNpemUgPSAldVxuXG4iLCBzLnJlc2l6ZV9ub2RlX3NraXBwZWQpOwogfQogI2VuZGlmIC8qICBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMgKi8KIApAQCAtMjE3Myw3ICsyMDg0LDcgQEAKIAlzZXFfcHJpbnRmKHNlcSwKIAkJICAgIkJhc2ljIGluZm86IHNpemUgb2YgbGVhZjoiCiAJCSAgICIgJVpkIGJ5dGVzLCBzaXplIG9mIHRub2RlOiAlWmQgYnl0ZXMuXG4iLAotCQkgICBzaXplb2Yoc3RydWN0IGxlYWYpLCBzaXplb2Yoc3RydWN0IHRub2RlKSk7CisJCSAgIHNpemVvZihzdHJ1Y3QgdG5vZGUpLCBzaXplb2Yoc3RydWN0IHRub2RlKSk7CiAKIAlmb3IgKGggPSAwOyBoIDwgRklCX1RBQkxFX0hBU0hTWjsgaCsrKSB7CiAJCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJm5ldC0+aXB2NC5maWJfdGFibGVfaGFzaFtoXTsKQEAgLTIxOTEsNyArMjEwMiw3IEBACiAJCQl0cmllX2NvbGxlY3Rfc3RhdHModCwgJnN0YXQpOwogCQkJdHJpZV9zaG93X3N0YXRzKHNlcSwgJnN0YXQpOwogI2lmZGVmIENPTkZJR19JUF9GSUJfVFJJRV9TVEFUUwotCQkJdHJpZV9zaG93X3VzYWdlKHNlcSwgJnQtPnN0YXRzKTsKKwkJCXRyaWVfc2hvd191c2FnZShzZXEsIHQtPnN0YXRzKTsKICNlbmRpZgogCQl9CiAJfQpAQCAtMjIxMiw3ICsyMTIzLDcgQEAKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlX25ldCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcnRfdHJpZV9ub2RlICpmaWJfdHJpZV9nZXRfaWR4KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgcG9zKQorc3RhdGljIHN0cnVjdCB0bm9kZSAqZmliX3RyaWVfZ2V0X2lkeChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgZmliX3RyaWVfaXRlciAqaXRlciA9IHNlcS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzZXFfZmlsZV9uZXQoc2VxKTsKQEAgLTIyMjQsNyArMjEzNSw3IEBACiAJCXN0cnVjdCBmaWJfdGFibGUgKnRiOwogCiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0YiwgaGVhZCwgdGJfaGxpc3QpIHsKLQkJCXN0cnVjdCBydF90cmllX25vZGUgKm47CisJCQlzdHJ1Y3QgdG5vZGUgKm47CiAKIAkJCWZvciAobiA9IGZpYl90cmllX2dldF9maXJzdChpdGVyLAogCQkJCQkJICAgIChzdHJ1Y3QgdHJpZSAqKSB0Yi0+dGJfZGF0YSk7CkBAIC0yMjUzLDcgKzIxNjQsNyBAQAogCXN0cnVjdCBmaWJfdGFibGUgKnRiID0gaXRlci0+dGI7CiAJc3RydWN0IGhsaXN0X25vZGUgKnRiX25vZGU7CiAJdW5zaWduZWQgaW50IGg7Ci0Jc3RydWN0IHJ0X3RyaWVfbm9kZSAqbjsKKwlzdHJ1Y3QgdG5vZGUgKm47CiAKIAkrKypwb3M7CiAJLyogbmV4dCBub2RlIGluIHNhbWUgdGFibGUgKi8KQEAgLTIzMzksMjkgKzIyNTAsMjYgQEAKIHN0YXRpYyBpbnQgZmliX3RyaWVfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7CiAJY29uc3Qgc3RydWN0IGZpYl90cmllX2l0ZXIgKml0ZXIgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IHJ0X3RyaWVfbm9kZSAqbiA9IHY7CisJc3RydWN0IHRub2RlICpuID0gdjsKIAogCWlmICghbm9kZV9wYXJlbnRfcmN1KG4pKQogCQlmaWJfdGFibGVfcHJpbnQoc2VxLCBpdGVyLT50Yik7CiAKIAlpZiAoSVNfVE5PREUobikpIHsKLQkJc3RydWN0IHRub2RlICp0biA9IChzdHJ1Y3QgdG5vZGUgKikgbjsKLQkJX19iZTMyIHByZiA9IGh0b25sKG1hc2tfcGZ4KHRuLT5rZXksIHRuLT5wb3MpKTsKKwkJX19iZTMyIHByZiA9IGh0b25sKG4tPmtleSk7CiAKIAkJc2VxX2luZGVudChzZXEsIGl0ZXItPmRlcHRoLTEpOwotCQlzZXFfcHJpbnRmKHNlcSwgIiAgKy0tICVwSTQvJWQgJWQgJWQgJWRcbiIsCi0JCQkgICAmcHJmLCB0bi0+cG9zLCB0bi0+Yml0cywgdG4tPmZ1bGxfY2hpbGRyZW4sCi0JCQkgICB0bi0+ZW1wdHlfY2hpbGRyZW4pOwotCisJCXNlcV9wcmludGYoc2VxLCAiICArLS0gJXBJNC8lenUgJXUgJXUgJXVcbiIsCisJCQkgICAmcHJmLCBLRVlMRU5HVEggLSBuLT5wb3MgLSBuLT5iaXRzLCBuLT5iaXRzLAorCQkJICAgbi0+ZnVsbF9jaGlsZHJlbiwgbi0+ZW1wdHlfY2hpbGRyZW4pOwogCX0gZWxzZSB7Ci0JCXN0cnVjdCBsZWFmICpsID0gKHN0cnVjdCBsZWFmICopIG47CiAJCXN0cnVjdCBsZWFmX2luZm8gKmxpOwotCQlfX2JlMzIgdmFsID0gaHRvbmwobC0+a2V5KTsKKwkJX19iZTMyIHZhbCA9IGh0b25sKG4tPmtleSk7CiAKIAkJc2VxX2luZGVudChzZXEsIGl0ZXItPmRlcHRoKTsKIAkJc2VxX3ByaW50ZihzZXEsICIgIHwtLSAlcEk0XG4iLCAmdmFsKTsKIAotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGksICZsLT5saXN0LCBobGlzdCkgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGksICZuLT5saXN0LCBobGlzdCkgewogCQkJc3RydWN0IGZpYl9hbGlhcyAqZmE7CiAKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGZhLCAmbGktPmZhbGgsIGZhX2xpc3QpIHsKQEAgLTI0MTEsOSArMjMxOSw5IEBACiAJdF9rZXkJa2V5OwogfTsKIAotc3RhdGljIHN0cnVjdCBsZWFmICpmaWJfcm91dGVfZ2V0X2lkeChzdHJ1Y3QgZmliX3JvdXRlX2l0ZXIgKml0ZXIsIGxvZmZfdCBwb3MpCitzdGF0aWMgc3RydWN0IHRub2RlICpmaWJfcm91dGVfZ2V0X2lkeChzdHJ1Y3QgZmliX3JvdXRlX2l0ZXIgKml0ZXIsIGxvZmZfdCBwb3MpCiB7Ci0Jc3RydWN0IGxlYWYgKmwgPSBOVUxMOworCXN0cnVjdCB0bm9kZSAqbCA9IE5VTEw7CiAJc3RydWN0IHRyaWUgKnQgPSBpdGVyLT5tYWluX3RyaWU7CiAKIAkvKiB1c2UgY2FjaGUgbG9jYXRpb24gb2YgbGFzdCBmb3VuZCBrZXkgKi8KQEAgLTI0NTgsNyArMjM2Niw3IEBACiBzdGF0aWMgdm9pZCAqZmliX3JvdXRlX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgZmliX3JvdXRlX2l0ZXIgKml0ZXIgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IGxlYWYgKmwgPSB2OworCXN0cnVjdCB0bm9kZSAqbCA9IHY7CiAKIAkrKypwb3M7CiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CkBAIC0yNTA0LDcgKzI0MTIsNyBAQAogICovCiBzdGF0aWMgaW50IGZpYl9yb3V0ZV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgbGVhZiAqbCA9IHY7CisJc3RydWN0IHRub2RlICpsID0gdjsKIAlzdHJ1Y3QgbGVhZl9pbmZvICpsaTsKIAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZm91LmMgYi9uZXQvaXB2NC9mb3UuYwppbmRleCBiOTg2Mjk4Li45MmRkZWExIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9mb3UuYworKysgYi9uZXQvaXB2NC9mb3UuYwpAQCAtNzAsNyArNzAsNiBAQAogCXNpemVfdCBzdGFydCA9IG50b2hzKHBkWzBdKTsKIAlzaXplX3Qgb2Zmc2V0ID0gbnRvaHMocGRbMV0pOwogCXNpemVfdCBwbGVuID0gaGRybGVuICsgbWF4X3Qoc2l6ZV90LCBvZmZzZXQgKyBzaXplb2YodTE2KSwgc3RhcnQpOwotCV9fd3N1bSBkZWx0YTsKIAogCWlmIChza2ItPnJlbWNzdW1fb2ZmbG9hZCkgewogCQkvKiBBbHJlYWR5IHByb2Nlc3NlZCBpbiBHUk8gcGF0aCAqLwpAQCAtODIsMTQgKzgxLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJZ3VlaGRyID0gKHN0cnVjdCBndWVoZHIgKikmdWRwX2hkcihza2IpWzFdOwogCi0JaWYgKHVubGlrZWx5KHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX0NPTVBMRVRFKSkKLQkJX19za2JfY2hlY2tzdW1fY29tcGxldGUoc2tiKTsKLQotCWRlbHRhID0gcmVtY3N1bV9hZGp1c3QoKHZvaWQgKilndWVoZHIgKyBoZHJsZW4sCi0JCQkgICAgICAgc2tiLT5jc3VtLCBzdGFydCwgb2Zmc2V0KTsKLQotCS8qIEFkanVzdCBza2ItPmNzdW0gc2luY2Ugd2UgY2hhbmdlZCB0aGUgcGFja2V0ICovCi0Jc2tiLT5jc3VtID0gY3N1bV9hZGQoc2tiLT5jc3VtLCBkZWx0YSk7CisJc2tiX3JlbWNzdW1fcHJvY2Vzcyhza2IsICh2b2lkICopZ3VlaGRyICsgaGRybGVuLCBzdGFydCwgb2Zmc2V0KTsKIAogCXJldHVybiBndWVoZHI7CiB9CkBAIC0xNzQsNyArMTY2LDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCBza19idWZmICoqZm91X2dyb19yZWNlaXZlKHN0cnVjdCBza19idWZmICoqaGVhZCwKLQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJc3RydWN0IHVkcF9vZmZsb2FkICp1b2ZmKQogewogCWNvbnN0IHN0cnVjdCBuZXRfb2ZmbG9hZCAqb3BzOwogCXN0cnVjdCBza19idWZmICoqcHAgPSBOVUxMOwpAQCAtMTk1LDcgKzE4OCw4IEBACiAJcmV0dXJuIHBwOwogfQogCi1zdGF0aWMgaW50IGZvdV9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ob2ZmKQorc3RhdGljIGludCBmb3VfZ3JvX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaG9mZiwKKwkJCSAgICBzdHJ1Y3QgdWRwX29mZmxvYWQgKnVvZmYpCiB7CiAJY29uc3Qgc3RydWN0IG5ldF9vZmZsb2FkICpvcHM7CiAJdTggcHJvdG8gPSBOQVBJX0dST19DQihza2IpLT5wcm90bzsKQEAgLTIyNiw3ICsyMjAsNiBAQAogCXNpemVfdCBzdGFydCA9IG50b2hzKHBkWzBdKTsKIAlzaXplX3Qgb2Zmc2V0ID0gbnRvaHMocGRbMV0pOwogCXNpemVfdCBwbGVuID0gaGRybGVuICsgbWF4X3Qoc2l6ZV90LCBvZmZzZXQgKyBzaXplb2YodTE2KSwgc3RhcnQpOwotCV9fd3N1bSBkZWx0YTsKIAogCWlmIChza2ItPnJlbWNzdW1fb2ZmbG9hZCkKIAkJcmV0dXJuIGd1ZWhkcjsKQEAgLTI0MSwxMiArMjM0LDcgQEAKIAkJCXJldHVybiBOVUxMOwogCX0KIAotCWRlbHRhID0gcmVtY3N1bV9hZGp1c3QoKHZvaWQgKilndWVoZHIgKyBoZHJsZW4sCi0JCQkgICAgICAgTkFQSV9HUk9fQ0Ioc2tiKS0+Y3N1bSwgc3RhcnQsIG9mZnNldCk7Ci0KLQkvKiBBZGp1c3Qgc2tiLT5jc3VtIHNpbmNlIHdlIGNoYW5nZWQgdGhlIHBhY2tldCAqLwotCXNrYi0+Y3N1bSA9IGNzdW1fYWRkKHNrYi0+Y3N1bSwgZGVsdGEpOwotCU5BUElfR1JPX0NCKHNrYiktPmNzdW0gPSBjc3VtX2FkZChOQVBJX0dST19DQihza2IpLT5jc3VtLCBkZWx0YSk7CisJc2tiX2dyb19yZW1jc3VtX3Byb2Nlc3Moc2tiLCAodm9pZCAqKWd1ZWhkciArIGhkcmxlbiwgc3RhcnQsIG9mZnNldCk7CiAKIAlza2ItPnJlbWNzdW1fb2ZmbG9hZCA9IDE7CiAKQEAgLTI1NCw3ICsyNDIsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKipndWVfZ3JvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipoZWFkLAotCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlzdHJ1Y3QgdWRwX29mZmxvYWQgKnVvZmYpCiB7CiAJY29uc3Qgc3RydWN0IG5ldF9vZmZsb2FkICoqb2ZmbG9hZHM7CiAJY29uc3Qgc3RydWN0IG5ldF9vZmZsb2FkICpvcHM7CkBAIC0zNjAsNyArMzQ5LDggQEAKIAlyZXR1cm4gcHA7CiB9CiAKLXN0YXRpYyBpbnQgZ3VlX2dyb19jb21wbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhvZmYpCitzdGF0aWMgaW50IGd1ZV9ncm9fY29tcGxldGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5ob2ZmLAorCQkJICAgIHN0cnVjdCB1ZHBfb2ZmbG9hZCAqdW9mZikKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X29mZmxvYWQgKipvZmZsb2FkczsKIAlzdHJ1Y3QgZ3VlaGRyICpndWVoZHIgPSAoc3RydWN0IGd1ZWhkciAqKShza2ItPmRhdGEgKyBuaG9mZik7CkBAIC00OTAsNyArNDgwLDcgQEAKIAlzay0+c2tfdXNlcl9kYXRhID0gZm91OwogCWZvdS0+c29jayA9IHNvY2s7CiAKLQl1ZHBfc2V0X2NvbnZlcnRfY3N1bShzaywgdHJ1ZSk7CisJaW5ldF9pbmNfY29udmVydF9jc3VtKHNrKTsKIAogCXNrLT5za19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQzsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZ2VuZXZlLmMgYi9uZXQvaXB2NC9nZW5ldmUuYwppbmRleCAzOTRhMjAwLi41YTQ4MjhiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9nZW5ldmUuYworKysgYi9uZXQvaXB2NC9nZW5ldmUuYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgpAQCAtMjYsOCArMjYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+Ci0jaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPG5ldC9hcnAuaD4KICNpbmNsdWRlIDxuZXQvbmRpc2MuaD4KICNpbmNsdWRlIDxuZXQvaXAuaD4KQEAgLTUwLDM4ICs1MCwzMCBAQAogI2luY2x1ZGUgPG5ldC9pcDZfY2hlY2tzdW0uaD4KICNlbmRpZgogCi0jZGVmaW5lIFBPUlRfSEFTSF9CSVRTIDgKLSNkZWZpbmUgUE9SVF9IQVNIX1NJWkUgKDE8PFBPUlRfSEFTSF9CSVRTKQorLyogUHJvdGVjdHMgc29ja19saXN0IGFuZCByZWZjb3VudHMuICovCitzdGF0aWMgREVGSU5FX01VVEVYKGdlbmV2ZV9tdXRleCk7CiAKIC8qIHBlci1uZXR3b3JrIG5hbWVzcGFjZSBwcml2YXRlIGRhdGEgZm9yIHRoaXMgbW9kdWxlICovCiBzdHJ1Y3QgZ2VuZXZlX25ldCB7Ci0Jc3RydWN0IGhsaXN0X2hlYWQJc29ja19saXN0W1BPUlRfSEFTSF9TSVpFXTsKLQlzcGlubG9ja190CQlzb2NrX2xvY2s7ICAgLyogUHJvdGVjdHMgc29ja19saXN0ICovCisJc3RydWN0IGxpc3RfaGVhZAlzb2NrX2xpc3Q7CiB9OwogCiBzdGF0aWMgaW50IGdlbmV2ZV9uZXRfaWQ7CiAKLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZ2VuZXZlX3dxOwotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZV9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlyZXR1cm4gKHN0cnVjdCBnZW5ldmVoZHIgKikodWRwX2hkcihza2IpICsgMSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqZ3NfaGVhZChzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUxNiBwb3J0KQorc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX2ZpbmRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCSAgICBzYV9mYW1pbHlfdCBmYW1pbHksIF9fYmUxNiBwb3J0KQogewogCXN0cnVjdCBnZW5ldmVfbmV0ICpnbiA9IG5ldF9nZW5lcmljKG5ldCwgZ2VuZXZlX25ldF9pZCk7Ci0KLQlyZXR1cm4gJmduLT5zb2NrX2xpc3RbaGFzaF8zMihudG9ocyhwb3J0KSwgUE9SVF9IQVNIX0JJVFMpXTsKLX0KLQotLyogRmluZCBnZW5ldmUgc29ja2V0IGJhc2VkIG9uIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCBVRFAgcG9ydCAqLwotc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX2ZpbmRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUxNiBwb3J0KQotewogCXN0cnVjdCBnZW5ldmVfc29jayAqZ3M7CiAKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZ3MsIGdzX2hlYWQobmV0LCBwb3J0KSwgaGxpc3QpIHsKLQkJaWYgKGluZXRfc2soZ3MtPnNvY2stPnNrKS0+aW5ldF9zcG9ydCA9PSBwb3J0KQorCWxpc3RfZm9yX2VhY2hfZW50cnkoZ3MsICZnbi0+c29ja19saXN0LCBsaXN0KSB7CisJCWlmIChpbmV0X3NrKGdzLT5zb2NrLT5zayktPmluZXRfc3BvcnQgPT0gcG9ydCAmJgorCQkgICAgaW5ldF9zayhncy0+c29jay0+c2spLT5zay5za19mYW1pbHkgPT0gZmFtaWx5KQogCQkJcmV0dXJuIGdzOwogCX0KIApAQCAtMTE1LDE5ICsxMDcsMTkgQEAKIAkJICAgIHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsIF9fdTggdG9zLAogCQkgICAgX191OCB0dGwsIF9fYmUxNiBkZiwgX19iZTE2IHNyY19wb3J0LCBfX2JlMTYgZHN0X3BvcnQsCiAJCSAgICBfX2JlMTYgdHVuX2ZsYWdzLCB1OCB2bmlbM10sIHU4IG9wdF9sZW4sIHU4ICpvcHQsCi0JCSAgICBib29sIHhuZXQpCisJCSAgICBib29sIGNzdW0sIGJvb2wgeG5ldCkKIHsKIAlzdHJ1Y3QgZ2VuZXZlaGRyICpnbnZoOwogCWludCBtaW5faGVhZHJvb207CiAJaW50IGVycjsKIAotCXNrYiA9IHVkcF90dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgIWdzLT5zb2NrLT5zay0+c2tfbm9fY2hlY2tfdHgpOworCXNrYiA9IHVkcF90dW5uZWxfaGFuZGxlX29mZmxvYWRzKHNrYiwgY3N1bSk7CiAJaWYgKElTX0VSUihza2IpKQogCQlyZXR1cm4gUFRSX0VSUihza2IpOwogCiAJbWluX2hlYWRyb29tID0gTExfUkVTRVJWRURfU1BBQ0UocnQtPmRzdC5kZXYpICsgcnQtPmRzdC5oZWFkZXJfbGVuCiAJCQkrIEdFTkVWRV9CQVNFX0hMRU4gKyBvcHRfbGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikKLQkJCSsgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSA/IFZMQU5fSExFTiA6IDApOworCQkJKyAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSA/IFZMQU5fSExFTiA6IDApOwogCiAJZXJyID0gc2tiX2Nvd19oZWFkKHNrYiwgbWluX2hlYWRyb29tKTsKIAlpZiAodW5saWtlbHkoZXJyKSkgewpAQCAtMTQ0LDExICsxMzYsMTA3IEBACiAKIAlza2Jfc2V0X2lubmVyX3Byb3RvY29sKHNrYiwgaHRvbnMoRVRIX1BfVEVCKSk7CiAKLQlyZXR1cm4gdWRwX3R1bm5lbF94bWl0X3NrYihncy0+c29jaywgcnQsIHNrYiwgc3JjLCBkc3QsCi0JCQkJICAgdG9zLCB0dGwsIGRmLCBzcmNfcG9ydCwgZHN0X3BvcnQsIHhuZXQpOworCXJldHVybiB1ZHBfdHVubmVsX3htaXRfc2tiKHJ0LCBza2IsIHNyYywgZHN0LAorCQkJCSAgIHRvcywgdHRsLCBkZiwgc3JjX3BvcnQsIGRzdF9wb3J0LCB4bmV0LAorCQkJCSAgICFjc3VtKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdlbmV2ZV94bWl0X3NrYik7CiAKK3N0YXRpYyBpbnQgZ2VuZXZlX2hsZW4oc3RydWN0IGdlbmV2ZWhkciAqZ2gpCit7CisJcmV0dXJuIHNpemVvZigqZ2gpICsgZ2gtPm9wdF9sZW4gKiA0OworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKipnZW5ldmVfZ3JvX3JlY2VpdmUoc3RydWN0IHNrX2J1ZmYgKipoZWFkLAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICBzdHJ1Y3QgdWRwX29mZmxvYWQgKnVvZmYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnAsICoqcHAgPSBOVUxMOworCXN0cnVjdCBnZW5ldmVoZHIgKmdoLCAqZ2gyOworCXVuc2lnbmVkIGludCBobGVuLCBnaF9sZW4sIG9mZl9nbnY7CisJY29uc3Qgc3RydWN0IHBhY2tldF9vZmZsb2FkICpwdHlwZTsKKwlfX2JlMTYgdHlwZTsKKwlpbnQgZmx1c2ggPSAxOworCisJb2ZmX2dudiA9IHNrYl9ncm9fb2Zmc2V0KHNrYik7CisJaGxlbiA9IG9mZl9nbnYgKyBzaXplb2YoKmdoKTsKKwlnaCA9IHNrYl9ncm9faGVhZGVyX2Zhc3Qoc2tiLCBvZmZfZ252KTsKKwlpZiAoc2tiX2dyb19oZWFkZXJfaGFyZChza2IsIGhsZW4pKSB7CisJCWdoID0gc2tiX2dyb19oZWFkZXJfc2xvdyhza2IsIGhsZW4sIG9mZl9nbnYpOworCQlpZiAodW5saWtlbHkoIWdoKSkKKwkJCWdvdG8gb3V0OworCX0KKworCWlmIChnaC0+dmVyICE9IEdFTkVWRV9WRVIgfHwgZ2gtPm9hbSkKKwkJZ290byBvdXQ7CisJZ2hfbGVuID0gZ2VuZXZlX2hsZW4oZ2gpOworCisJaGxlbiA9IG9mZl9nbnYgKyBnaF9sZW47CisJaWYgKHNrYl9ncm9faGVhZGVyX2hhcmQoc2tiLCBobGVuKSkgeworCQlnaCA9IHNrYl9ncm9faGVhZGVyX3Nsb3coc2tiLCBobGVuLCBvZmZfZ252KTsKKwkJaWYgKHVubGlrZWx5KCFnaCkpCisJCQlnb3RvIG91dDsKKwl9CisKKwlmbHVzaCA9IDA7CisKKwlmb3IgKHAgPSAqaGVhZDsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKCFOQVBJX0dST19DQihwKS0+c2FtZV9mbG93KQorCQkJY29udGludWU7CisKKwkJZ2gyID0gKHN0cnVjdCBnZW5ldmVoZHIgKikocC0+ZGF0YSArIG9mZl9nbnYpOworCQlpZiAoZ2gtPm9wdF9sZW4gIT0gZ2gyLT5vcHRfbGVuIHx8CisJCSAgICBtZW1jbXAoZ2gsIGdoMiwgZ2hfbGVuKSkgeworCQkJTkFQSV9HUk9fQ0IocCktPnNhbWVfZmxvdyA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCX0KKworCXR5cGUgPSBnaC0+cHJvdG9fdHlwZTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlwdHlwZSA9IGdyb19maW5kX3JlY2VpdmVfYnlfdHlwZSh0eXBlKTsKKwlpZiAocHR5cGUgPT0gTlVMTCkgeworCQlmbHVzaCA9IDE7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisKKwlza2JfZ3JvX3B1bGwoc2tiLCBnaF9sZW4pOworCXNrYl9ncm9fcG9zdHB1bGxfcmNzdW0oc2tiLCBnaCwgZ2hfbGVuKTsKKwlwcCA9IHB0eXBlLT5jYWxsYmFja3MuZ3JvX3JlY2VpdmUoaGVhZCwgc2tiKTsKKworb3V0X3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKK291dDoKKwlOQVBJX0dST19DQihza2IpLT5mbHVzaCB8PSBmbHVzaDsKKworCXJldHVybiBwcDsKK30KKworc3RhdGljIGludCBnZW5ldmVfZ3JvX2NvbXBsZXRlKHN0cnVjdCBza19idWZmICpza2IsIGludCBuaG9mZiwKKwkJCSAgICAgICBzdHJ1Y3QgdWRwX29mZmxvYWQgKnVvZmYpCit7CisJc3RydWN0IGdlbmV2ZWhkciAqZ2g7CisJc3RydWN0IHBhY2tldF9vZmZsb2FkICpwdHlwZTsKKwlfX2JlMTYgdHlwZTsKKwlpbnQgZ2hfbGVuOworCWludCBlcnIgPSAtRU5PU1lTOworCisJdWRwX3R1bm5lbF9ncm9fY29tcGxldGUoc2tiLCBuaG9mZik7CisKKwlnaCA9IChzdHJ1Y3QgZ2VuZXZlaGRyICopKHNrYi0+ZGF0YSArIG5ob2ZmKTsKKwlnaF9sZW4gPSBnZW5ldmVfaGxlbihnaCk7CisJdHlwZSA9IGdoLT5wcm90b190eXBlOworCisJcmN1X3JlYWRfbG9jaygpOworCXB0eXBlID0gZ3JvX2ZpbmRfY29tcGxldGVfYnlfdHlwZSh0eXBlKTsKKwlpZiAocHR5cGUgIT0gTlVMTCkKKwkJZXJyID0gcHR5cGUtPmNhbGxiYWNrcy5ncm9fY29tcGxldGUoc2tiLCBuaG9mZiArIGdoX2xlbik7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgdm9pZCBnZW5ldmVfbm90aWZ5X2FkZF9yeF9wb3J0KHN0cnVjdCBnZW5ldmVfc29jayAqZ3MpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gZ3MtPnNvY2stPnNrOwpAQCAtMjE0LDE1ICszMDIsNiBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBnZW5ldmVfZGVsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBnZW5ldmVfc29jayAqZ3MgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGdlbmV2ZV9zb2NrLAotCQkJCQkgICAgICBkZWxfd29yayk7Ci0KLQl1ZHBfdHVubmVsX3NvY2tfcmVsZWFzZShncy0+c29jayk7Ci0Ja2ZyZWVfcmN1KGdzLCByY3UpOwotfQotCiBzdGF0aWMgc3RydWN0IHNvY2tldCAqZ2VuZXZlX2NyZWF0ZV9zb2NrKHN0cnVjdCBuZXQgKm5ldCwgYm9vbCBpcHY2LAogCQkJCQkgX19iZTE2IHBvcnQpCiB7CkBAIC0yNjMsOCArMzQyLDYgQEAKIAlpZiAoIWdzKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCUlOSVRfV09SSygmZ3MtPmRlbF93b3JrLCBnZW5ldmVfZGVsX3dvcmspOwotCiAJc29jayA9IGdlbmV2ZV9jcmVhdGVfc29jayhuZXQsIGlwdjYsIHBvcnQpOwogCWlmIChJU19FUlIoc29jaykpIHsKIAkJa2ZyZWUoZ3MpOwpAQCAtMjcyLDE5ICszNDksMTUgQEAKIAl9CiAKIAlncy0+c29jayA9IHNvY2s7Ci0JYXRvbWljX3NldCgmZ3MtPnJlZmNudCwgMSk7CisJZ3MtPnJlZmNudCA9IDE7CiAJZ3MtPnJjdiA9IHJjdjsKIAlncy0+cmN2X2RhdGEgPSBkYXRhOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZ2VuZXZlIHVkcCBvZmZsb2FkcyBzdHJ1Y3R1cmUgKi8KIAlncy0+dWRwX29mZmxvYWRzLnBvcnQgPSBwb3J0OwotCWdzLT51ZHBfb2ZmbG9hZHMuY2FsbGJhY2tzLmdyb19yZWNlaXZlID0gTlVMTDsKLQlncy0+dWRwX29mZmxvYWRzLmNhbGxiYWNrcy5ncm9fY29tcGxldGUgPSBOVUxMOwotCi0Jc3Bpbl9sb2NrKCZnbi0+c29ja19sb2NrKTsKLQlobGlzdF9hZGRfaGVhZF9yY3UoJmdzLT5obGlzdCwgZ3NfaGVhZChuZXQsIHBvcnQpKTsKKwlncy0+dWRwX29mZmxvYWRzLmNhbGxiYWNrcy5ncm9fcmVjZWl2ZSAgPSBnZW5ldmVfZ3JvX3JlY2VpdmU7CisJZ3MtPnVkcF9vZmZsb2Fkcy5jYWxsYmFja3MuZ3JvX2NvbXBsZXRlID0gZ2VuZXZlX2dyb19jb21wbGV0ZTsKIAlnZW5ldmVfbm90aWZ5X2FkZF9yeF9wb3J0KGdzKTsKLQlzcGluX3VubG9jaygmZ24tPnNvY2tfbG9jayk7CiAKIAkvKiBNYXJrIHNvY2tldCBhcyBhbiBlbmNhcHN1bGF0aW9uIHNvY2tldCAqLwogCXR1bm5lbF9jZmcuc2tfdXNlcl9kYXRhID0gZ3M7CkBAIC0yOTMsNiArMzY2LDggQEAKIAl0dW5uZWxfY2ZnLmVuY2FwX2Rlc3Ryb3kgPSBOVUxMOwogCXNldHVwX3VkcF90dW5uZWxfc29jayhuZXQsIHNvY2ssICZ0dW5uZWxfY2ZnKTsKIAorCWxpc3RfYWRkKCZncy0+bGlzdCwgJmduLT5zb2NrX2xpc3QpOworCiAJcmV0dXJuIGdzOwogfQogCkBAIC0zMDAsMjUgKzM3NSwyMSBAQAogCQkJCSAgICBnZW5ldmVfcmN2X3QgKnJjdiwgdm9pZCAqZGF0YSwKIAkJCQkgICAgYm9vbCBub19zaGFyZSwgYm9vbCBpcHY2KQogewotCXN0cnVjdCBnZW5ldmVfbmV0ICpnbiA9IG5ldF9nZW5lcmljKG5ldCwgZ2VuZXZlX25ldF9pZCk7CiAJc3RydWN0IGdlbmV2ZV9zb2NrICpnczsKIAotCWdzID0gZ2VuZXZlX3NvY2tldF9jcmVhdGUobmV0LCBwb3J0LCByY3YsIGRhdGEsIGlwdjYpOwotCWlmICghSVNfRVJSKGdzKSkKLQkJcmV0dXJuIGdzOworCW11dGV4X2xvY2soJmdlbmV2ZV9tdXRleCk7CiAKLQlpZiAobm9fc2hhcmUpCS8qIFJldHVybiBlcnJvciBpZiBzaGFyaW5nIGlzIG5vdCBhbGxvd2VkLiAqLwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKLQotCXNwaW5fbG9jaygmZ24tPnNvY2tfbG9jayk7Ci0JZ3MgPSBnZW5ldmVfZmluZF9zb2NrKG5ldCwgcG9ydCk7Ci0JaWYgKGdzICYmICgoZ3MtPnJjdiAhPSByY3YpIHx8Ci0JCSAgICFhdG9taWNfYWRkX3VubGVzcygmZ3MtPnJlZmNudCwgMSwgMCkpKQorCWdzID0gZ2VuZXZlX2ZpbmRfc29jayhuZXQsIGlwdjYgPyBBRl9JTkVUNiA6IEFGX0lORVQsIHBvcnQpOworCWlmIChncykgeworCQlpZiAoIW5vX3NoYXJlICYmIGdzLT5yY3YgPT0gcmN2KQorCQkJZ3MtPnJlZmNudCsrOworCQllbHNlCiAJCQlncyA9IEVSUl9QVFIoLUVCVVNZKTsKLQlzcGluX3VubG9jaygmZ24tPnNvY2tfbG9jayk7CisJfSBlbHNlIHsKKwkJZ3MgPSBnZW5ldmVfc29ja2V0X2NyZWF0ZShuZXQsIHBvcnQsIHJjdiwgZGF0YSwgaXB2Nik7CisJfQogCi0JaWYgKCFncykKLQkJZ3MgPSBFUlJfUFRSKC1FSU5WQUwpOworCW11dGV4X3VubG9jaygmZ2VuZXZlX211dGV4KTsKIAogCXJldHVybiBnczsKIH0KQEAgLTMyNiwzNyArMzk3LDMyIEBACiAKIHZvaWQgZ2VuZXZlX3NvY2tfcmVsZWFzZShzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzKQogewotCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGdzLT5zb2NrLT5zayk7Ci0Jc3RydWN0IGdlbmV2ZV9uZXQgKmduID0gbmV0X2dlbmVyaWMobmV0LCBnZW5ldmVfbmV0X2lkKTsKKwltdXRleF9sb2NrKCZnZW5ldmVfbXV0ZXgpOwogCi0JaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZncy0+cmVmY250KSkKLQkJcmV0dXJuOworCWlmICgtLWdzLT5yZWZjbnQpCisJCWdvdG8gdW5sb2NrOwogCi0Jc3Bpbl9sb2NrKCZnbi0+c29ja19sb2NrKTsKLQlobGlzdF9kZWxfcmN1KCZncy0+aGxpc3QpOworCWxpc3RfZGVsKCZncy0+bGlzdCk7CiAJZ2VuZXZlX25vdGlmeV9kZWxfcnhfcG9ydChncyk7Ci0Jc3Bpbl91bmxvY2soJmduLT5zb2NrX2xvY2spOworCXVkcF90dW5uZWxfc29ja19yZWxlYXNlKGdzLT5zb2NrKTsKKwlrZnJlZV9yY3UoZ3MsIHJjdSk7CiAKLQlxdWV1ZV93b3JrKGdlbmV2ZV93cSwgJmdzLT5kZWxfd29yayk7Cit1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZnZW5ldmVfbXV0ZXgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VuZXZlX3NvY2tfcmVsZWFzZSk7CiAKIHN0YXRpYyBfX25ldF9pbml0IGludCBnZW5ldmVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBnZW5ldmVfbmV0ICpnbiA9IG5ldF9nZW5lcmljKG5ldCwgZ2VuZXZlX25ldF9pZCk7Ci0JdW5zaWduZWQgaW50IGg7CiAKLQlzcGluX2xvY2tfaW5pdCgmZ24tPnNvY2tfbG9jayk7Ci0KLQlmb3IgKGggPSAwOyBoIDwgUE9SVF9IQVNIX1NJWkU7ICsraCkKLQkJSU5JVF9ITElTVF9IRUFEKCZnbi0+c29ja19saXN0W2hdKTsKKwlJTklUX0xJU1RfSEVBRCgmZ24tPnNvY2tfbGlzdCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBnZW5ldmVfbmV0X29wcyA9IHsKIAkuaW5pdCA9IGdlbmV2ZV9pbml0X25ldCwKLQkuZXhpdCA9IE5VTEwsCiAJLmlkICAgPSAmZ2VuZXZlX25ldF9pZCwKIAkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZ2VuZXZlX25ldCksCiB9OwpAQCAtMzY1LDEwICs0MzEsNiBAQAogewogCWludCByYzsKIAotCWdlbmV2ZV93cSA9IGFsbG9jX3dvcmtxdWV1ZSgiZ2VuZXZlIiwgMCwgMCk7Ci0JaWYgKCFnZW5ldmVfd3EpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJcmMgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZnZW5ldmVfbmV0X29wcyk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CkBAIC0zNzcsMTEgKzQzOSwxMCBAQAogCiAJcmV0dXJuIDA7CiB9Ci1sYXRlX2luaXRjYWxsKGdlbmV2ZV9pbml0X21vZHVsZSk7Cittb2R1bGVfaW5pdChnZW5ldmVfaW5pdF9tb2R1bGUpOwogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZ2VuZXZlX2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7Ci0JZGVzdHJveV93b3JrcXVldWUoZ2VuZXZlX3dxKTsKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmdlbmV2ZV9uZXRfb3BzKTsKIH0KIG1vZHVsZV9leGl0KGdlbmV2ZV9jbGVhbnVwX21vZHVsZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggMzZmNTU4NC4uNWU1NjQwMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3Qgc29jayAqaWNtcF9zayhzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JcmV0dXJuIG5ldC0+aXB2NC5pY21wX3NrW3NtcF9wcm9jZXNzb3JfaWQoKV07CisJcmV0dXJuICp0aGlzX2NwdV9wdHIobmV0LT5pcHY0LmljbXBfc2spOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICppY21wX3htaXRfbG9jayhzdHJ1Y3QgbmV0ICpuZXQpCkBAIC0xMTQwLDggKzExNDAsOCBAQAogCWludCBpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCi0JCWluZXRfY3RsX3NvY2tfZGVzdHJveShuZXQtPmlwdjQuaWNtcF9za1tpXSk7Ci0Ja2ZyZWUobmV0LT5pcHY0LmljbXBfc2spOworCQlpbmV0X2N0bF9zb2NrX2Rlc3Ryb3koKnBlcl9jcHVfcHRyKG5ldC0+aXB2NC5pY21wX3NrLCBpKSk7CisJZnJlZV9wZXJjcHUobmV0LT5pcHY0LmljbXBfc2spOwogCW5ldC0+aXB2NC5pY21wX3NrID0gTlVMTDsKIH0KIApAQCAtMTE0OSw5ICsxMTQ5LDggQEAKIHsKIAlpbnQgaSwgZXJyOwogCi0JbmV0LT5pcHY0LmljbXBfc2sgPQotCQlremFsbG9jKG5yX2NwdV9pZHMgKiBzaXplb2Yoc3RydWN0IHNvY2sgKiksIEdGUF9LRVJORUwpOwotCWlmIChuZXQtPmlwdjQuaWNtcF9zayA9PSBOVUxMKQorCW5ldC0+aXB2NC5pY21wX3NrID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBzb2NrICopOworCWlmICghbmV0LT5pcHY0LmljbXBfc2spCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKQEAgLTExNjIsNyArMTE2MSw3IEBACiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBmYWlsOwogCi0JCW5ldC0+aXB2NC5pY21wX3NrW2ldID0gc2s7CisJCSpwZXJfY3B1X3B0cihuZXQtPmlwdjQuaWNtcF9zaywgaSkgPSBzazsKIAogCQkvKiBFbm91Z2ggc3BhY2UgZm9yIDIgNjRLIElDTVAgcGFja2V0cywgaW5jbHVkaW5nCiAJCSAqIHNrX2J1ZmYvc2tiX3NoYXJlZF9pbmZvIHN0cnVjdCBvdmVyaGVhZC4KQEAgLTEyMDMsOCArMTIwMiw4IEBACiAKIGZhaWw6CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpCi0JCWluZXRfY3RsX3NvY2tfZGVzdHJveShuZXQtPmlwdjQuaWNtcF9za1tpXSk7Ci0Ja2ZyZWUobmV0LT5pcHY0LmljbXBfc2spOworCQlpbmV0X2N0bF9zb2NrX2Rlc3Ryb3koKnBlcl9jcHVfcHRyKG5ldC0+aXB2NC5pY21wX3NrLCBpKSk7CisJZnJlZV9wZXJjcHUobmV0LT5pcHY0LmljbXBfc2spOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZGlhZy5jIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKaW5kZXggZTM0ZGNjYi4uODE3NTFmMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9kaWFnLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9kaWFnLmMKQEAgLTIwMyw3ICsyMDMsOCBAQAogCQlpY3NrLT5pY3NrX2NhX29wcy0+Z2V0X2luZm8oc2ssIGV4dCwgc2tiKTsKIAogb3V0OgotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiAKIGVycm91dDoKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwpAQCAtMjcxLDcgKzI3Miw4IEBACiAJfQogI2VuZGlmCiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNrX2RpYWdfZmlsbChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCkBAIC03NTgsNyArNzYwLDggQEAKIAl9CiAjZW5kaWYKIAotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaW5ldF9kaWFnX2R1bXBfcmVxcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mb3J3YXJkLmMgYi9uZXQvaXB2NC9pcF9mb3J3YXJkLmMKaW5kZXggM2E4M2NlNS4uNzg3YjNjMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfZm9yd2FyZC5jCisrKyBiL25ldC9pcHY0L2lwX2ZvcndhcmQuYwpAQCAtMTI5LDcgKzEyOSw4IEBACiAJICoJV2Ugbm93IGdlbmVyYXRlIGFuIElDTVAgSE9TVCBSRURJUkVDVCBnaXZpbmcgdGhlIHJvdXRlCiAJICoJd2UgY2FsY3VsYXRlZC4KIAkgKi8KLQlpZiAocnQtPnJ0X2ZsYWdzJlJUQ0ZfRE9SRURJUkVDVCAmJiAhb3B0LT5zcnIgJiYgIXNrYl9zZWNfcGF0aChza2IpKQorCWlmIChJUENCKHNrYiktPmZsYWdzICYgSVBTS0JfRE9SRURJUkVDVCAmJiAhb3B0LT5zcnIgJiYKKwkgICAgIXNrYl9zZWNfcGF0aChza2IpKQogCQlpcF9ydF9zZW5kX3JlZGlyZWN0KHNrYik7CiAKIAlza2ItPnByaW9yaXR5ID0gcnRfdG9zMnByaW9yaXR5KGlwaC0+dG9zKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2dyZS5jIGIvbmV0L2lwdjQvaXBfZ3JlLmMKaW5kZXggNGY0YmY1Yi4uNjIwNzI3NWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2dyZS5jCisrKyBiL25ldC9pcHY0L2lwX2dyZS5jCkBAIC02NTksMTIgKzY1OSwxMiBAQAogCiAJaWYgKGRhdGFbSUZMQV9HUkVfRU5DQVBfU1BPUlRdKSB7CiAJCXJldCA9IHRydWU7Ci0JCWlwZW5jYXAtPnNwb3J0ID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX0dSRV9FTkNBUF9TUE9SVF0pOworCQlpcGVuY2FwLT5zcG9ydCA9IG5sYV9nZXRfYmUxNihkYXRhW0lGTEFfR1JFX0VOQ0FQX1NQT1JUXSk7CiAJfQogCiAJaWYgKGRhdGFbSUZMQV9HUkVfRU5DQVBfRFBPUlRdKSB7CiAJCXJldCA9IHRydWU7Ci0JCWlwZW5jYXAtPmRwb3J0ID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX0dSRV9FTkNBUF9EUE9SVF0pOworCQlpcGVuY2FwLT5kcG9ydCA9IG5sYV9nZXRfYmUxNihkYXRhW0lGTEFfR1JFX0VOQ0FQX0RQT1JUXSk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTY3Myw2ICs2NzMsNyBAQAogc3RhdGljIGludCBncmVfdGFwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlfX2dyZV90dW5uZWxfaW5pdChkZXYpOworCWRldi0+cHJpdl9mbGFncyB8PSBJRkZfTElWRV9BRERSX0NIQU5HRTsKIAogCXJldHVybiBpcF90dW5uZWxfaW5pdChkZXYpOwogfQpAQCAtNzg1LDEwICs3ODYsMTAgQEAKIAogCWlmIChubGFfcHV0X3UxNihza2IsIElGTEFfR1JFX0VOQ0FQX1RZUEUsCiAJCQl0LT5lbmNhcC50eXBlKSB8fAotCSAgICBubGFfcHV0X3UxNihza2IsIElGTEFfR1JFX0VOQ0FQX1NQT1JULAotCQkJdC0+ZW5jYXAuc3BvcnQpIHx8Ci0JICAgIG5sYV9wdXRfdTE2KHNrYiwgSUZMQV9HUkVfRU5DQVBfRFBPUlQsCi0JCQl0LT5lbmNhcC5kcG9ydCkgfHwKKwkgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HUkVfRU5DQVBfU1BPUlQsCisJCQkgdC0+ZW5jYXAuc3BvcnQpIHx8CisJICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfR1JFX0VOQ0FQX0RQT1JULAorCQkJIHQtPmVuY2FwLmRwb3J0KSB8fAogCSAgICBubGFfcHV0X3UxNihza2IsIElGTEFfR1JFX0VOQ0FQX0ZMQUdTLAogCQkJdC0+ZW5jYXAuZmxhZ3MpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKQEAgLTgyOCw2ICs4MjksNyBAQAogCS5kZWxsaW5rCT0gaXBfdHVubmVsX2RlbGxpbmssCiAJLmdldF9zaXplCT0gaXBncmVfZ2V0X3NpemUsCiAJLmZpbGxfaW5mbwk9IGlwZ3JlX2ZpbGxfaW5mbywKKwkuZ2V0X2xpbmtfbmV0CT0gaXBfdHVubmVsX2dldF9saW5rX25ldCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBpcGdyZV90YXBfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC04NDIsNiArODQ0LDcgQEAKIAkuZGVsbGluawk9IGlwX3R1bm5lbF9kZWxsaW5rLAogCS5nZXRfc2l6ZQk9IGlwZ3JlX2dldF9zaXplLAogCS5maWxsX2luZm8JPSBpcGdyZV9maWxsX2luZm8sCisJLmdldF9saW5rX25ldAk9IGlwX3R1bm5lbF9nZXRfbGlua19uZXQsCiB9OwogCiBzdGF0aWMgaW50IF9fbmV0X2luaXQgaXBncmVfdGFwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggYjUwODYxYi4uZDY4MTk5ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTc1NSwxMyArNzU1LDExIEBACiAJc3RydWN0IG1zZ2hkciAqbXNnID0gZnJvbTsKIAogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCS8qIFhYWDogc3RyaXBwaW5nIGNvbnN0ICovCi0JCWlmIChtZW1jcHlfZnJvbWlvdmVjZW5kKHRvLCAoc3RydWN0IGlvdmVjICopbXNnLT5tc2dfaXRlci5pb3YsIG9mZnNldCwgbGVuKSA8IDApCisJCWlmIChjb3B5X2Zyb21faXRlcih0bywgbGVuLCAmbXNnLT5tc2dfaXRlcikgIT0gbGVuKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfSBlbHNlIHsKIAkJX193c3VtIGNzdW0gPSAwOwotCQkvKiBYWFg6IHN0cmlwcGluZyBjb25zdCAqLwotCQlpZiAoY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbWlvdmVjZW5kKHRvLCAoc3RydWN0IGlvdmVjICopbXNnLT5tc2dfaXRlci5pb3YsIG9mZnNldCwgbGVuLCAmY3N1bSkgPCAwKQorCQlpZiAoY3N1bV9hbmRfY29weV9mcm9tX2l0ZXIodG8sIGxlbiwgJmNzdW0sICZtc2ctPm1zZ19pdGVyKSAhPSBsZW4pCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJc2tiLT5jc3VtID0gY3N1bV9ibG9ja19hZGQoc2tiLT5jc3VtLCBjc3VtLCBvZGQpOwogCX0KQEAgLTE1MDYsMjMgKzE1MDQsOCBAQAogLyoKICAqCUdlbmVyaWMgZnVuY3Rpb24gdG8gc2VuZCBhIHBhY2tldCBhcyByZXBseSB0byBhbm90aGVyIHBhY2tldC4KICAqCVVzZWQgdG8gc2VuZCBzb21lIFRDUCByZXNldHMvYWNrcyBzbyBmYXIuCi0gKgotICoJVXNlIGEgZmFrZSBwZXJjcHUgaW5ldCBzb2NrZXQgdG8gYXZvaWQgZmFsc2Ugc2hhcmluZyBhbmQgY29udGVudGlvbi4KICAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBpbmV0X3NvY2ssIHVuaWNhc3Rfc29jaykgPSB7Ci0JLnNrID0gewotCQkuX19za19jb21tb24gPSB7Ci0JCQkuc2tjX3JlZmNudCA9IEFUT01JQ19JTklUKDEpLAotCQl9LAotCQkuc2tfd21lbV9hbGxvYwk9IEFUT01JQ19JTklUKDEpLAotCQkuc2tfYWxsb2NhdGlvbgk9IEdGUF9BVE9NSUMsCi0JCS5za19mbGFncwk9ICgxVUwgPDwgU09DS19VU0VfV1JJVEVfUVVFVUUpLAotCX0sCi0JLnBtdHVkaXNjCT0gSVBfUE1UVURJU0NfV0FOVCwKLQkudWNfdHRsCQk9IC0xLAotfTsKLQotdm9pZCBpcF9zZW5kX3VuaWNhc3RfcmVwbHkoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAordm9pZCBpcF9zZW5kX3VuaWNhc3RfcmVwbHkoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgY29uc3Qgc3RydWN0IGlwX29wdGlvbnMgKnNvcHQsCiAJCQkgICBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkciwKIAkJCSAgIGNvbnN0IHN0cnVjdCBpcF9yZXBseV9hcmcgKmFyZywKQEAgLTE1MzIsOSArMTUxNSw4IEBACiAJc3RydWN0IGlwY21fY29va2llIGlwYzsKIAlzdHJ1Y3QgZmxvd2k0IGZsNDsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IHNrYl9ydGFibGUoc2tiKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2I7Ci0Jc3RydWN0IHNvY2sgKnNrOwotCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQ7CiAJaW50IGVycjsKIAogCWlmIChfX2lwX29wdGlvbnNfZWNobygmcmVwbHlvcHRzLm9wdC5vcHQsIHNrYiwgc29wdCkpCkBAIC0xNTY1LDE1ICsxNTQ3LDExIEBACiAJaWYgKElTX0VSUihydCkpCiAJCXJldHVybjsKIAotCWluZXQgPSAmZ2V0X2NwdV92YXIodW5pY2FzdF9zb2NrKTsKKwlpbmV0X3NrKHNrKS0+dG9zID0gYXJnLT50b3M7CiAKLQlpbmV0LT50b3MgPSBhcmctPnRvczsKLQlzayA9ICZpbmV0LT5zazsKIAlzay0+c2tfcHJpb3JpdHkgPSBza2ItPnByaW9yaXR5OwogCXNrLT5za19wcm90b2NvbCA9IGlwX2hkcihza2IpLT5wcm90b2NvbDsKIAlzay0+c2tfYm91bmRfZGV2X2lmID0gYXJnLT5ib3VuZF9kZXZfaWY7Ci0Jc29ja19uZXRfc2V0KHNrLCBuZXQpOwotCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmc2stPnNrX3dyaXRlX3F1ZXVlKTsKIAlzay0+c2tfc25kYnVmID0gc3lzY3RsX3dtZW1fZGVmYXVsdDsKIAllcnIgPSBpcF9hcHBlbmRfZGF0YShzaywgJmZsNCwgaXBfcmVwbHlfZ2x1ZV9iaXRzLCBhcmctPmlvdi0+aW92X2Jhc2UsCiAJCQkgICAgIGxlbiwgMCwgJmlwYywgJnJ0LCBNU0dfRE9OVFdBSVQpOwpAQCAtMTU4OSwxMyArMTU2NywxMCBAQAogCQkJICBhcmctPmNzdW1vZmZzZXQpID0gY3N1bV9mb2xkKGNzdW1fYWRkKG5za2ItPmNzdW0sCiAJCQkJCQkJCWFyZy0+Y3N1bSkpOwogCQluc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwotCQlza2Jfb3JwaGFuKG5za2IpOwogCQlza2Jfc2V0X3F1ZXVlX21hcHBpbmcobnNrYiwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOwogCQlpcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCAmZmw0KTsKIAl9CiBvdXQ6Ci0JcHV0X2NwdV92YXIodW5pY2FzdF9zb2NrKTsKLQogCWlwX3J0X3B1dChydCk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCmluZGV4IDZiODVhZGIuLjMxZDhjNzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2NvbXBhdC5oPgorI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiAjaW5jbHVkZSA8bmV0L3RyYW5zcF92Ni5oPgogI2VuZGlmCkBAIC00NSwxNCArNDYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2VycnF1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2RlZmluZSBJUF9DTVNHX1BLVElORk8JCTEKLSNkZWZpbmUgSVBfQ01TR19UVEwJCTIKLSNkZWZpbmUgSVBfQ01TR19UT1MJCTQKLSNkZWZpbmUgSVBfQ01TR19SRUNWT1BUUwk4Ci0jZGVmaW5lIElQX0NNU0dfUkVUT1BUUwkJMTYKLSNkZWZpbmUgSVBfQ01TR19QQVNTU0VDCQkzMgotI2RlZmluZSBJUF9DTVNHX09SSUdEU1RBRERSICAgICA2NAotCiAvKgogICoJU09MX0lQIGNvbnRyb2wgbWVzc2FnZXMuCiAgKi8KQEAgLTEwNCw2ICs5NywyMCBAQAogCXB1dF9jbXNnKG1zZywgU09MX0lQLCBJUF9SRVRPUFRTLCBvcHQtPm9wdGxlbiwgb3B0LT5fX2RhdGEpOwogfQogCitzdGF0aWMgdm9pZCBpcF9jbXNnX3JlY3ZfY2hlY2tzdW0oc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgaW50IG9mZnNldCkKK3sKKwlfX3dzdW0gY3N1bSA9IHNrYi0+Y3N1bTsKKworCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9DT01QTEVURSkKKwkJcmV0dXJuOworCisJaWYgKG9mZnNldCAhPSAwKQorCQljc3VtID0gY3N1bV9zdWIoY3N1bSwgY3N1bV9wYXJ0aWFsKHNrYi0+ZGF0YSwgb2Zmc2V0LCAwKSk7CisKKwlwdXRfY21zZyhtc2csIFNPTF9JUCwgSVBfQ0hFQ0tTVU0sIHNpemVvZihfX3dzdW0pLCAmY3N1bSk7Cit9CisKIHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9zZWN1cml0eShzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJY2hhciAqc2VjZGF0YTsKQEAgLTE0NCw0NyArMTUxLDczIEBACiAJcHV0X2Ntc2cobXNnLCBTT0xfSVAsIElQX09SSUdEU1RBRERSLCBzaXplb2Yoc2luKSwgJnNpbik7CiB9CiAKLXZvaWQgaXBfY21zZ19yZWN2KHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3ZvaWQgaXBfY21zZ19yZWN2X29mZnNldChzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgaW50IG9mZnNldCkKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhza2ItPnNrKTsKIAl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBpbmV0LT5jbXNnX2ZsYWdzOwogCiAJLyogT3JkZXJlZCBieSBzdXBwb3NlZCB1c2FnZSBmcmVxdWVuY3kgKi8KLQlpZiAoZmxhZ3MgJiAxKQorCWlmIChmbGFncyAmIElQX0NNU0dfUEtUSU5GTykgewogCQlpcF9jbXNnX3JlY3ZfcGt0aW5mbyhtc2csIHNrYik7Ci0JaWYgKChmbGFncyA+Pj0gMSkgPT0gMCkKLQkJcmV0dXJuOwogCi0JaWYgKGZsYWdzICYgMSkKKwkJZmxhZ3MgJj0gfklQX0NNU0dfUEtUSU5GTzsKKwkJaWYgKCFmbGFncykKKwkJCXJldHVybjsKKwl9CisKKwlpZiAoZmxhZ3MgJiBJUF9DTVNHX1RUTCkgewogCQlpcF9jbXNnX3JlY3ZfdHRsKG1zZywgc2tiKTsKLQlpZiAoKGZsYWdzID4+PSAxKSA9PSAwKQotCQlyZXR1cm47CiAKLQlpZiAoZmxhZ3MgJiAxKQorCQlmbGFncyAmPSB+SVBfQ01TR19UVEw7CisJCWlmICghZmxhZ3MpCisJCQlyZXR1cm47CisJfQorCisJaWYgKGZsYWdzICYgSVBfQ01TR19UT1MpIHsKIAkJaXBfY21zZ19yZWN2X3Rvcyhtc2csIHNrYik7Ci0JaWYgKChmbGFncyA+Pj0gMSkgPT0gMCkKLQkJcmV0dXJuOwogCi0JaWYgKGZsYWdzICYgMSkKKwkJZmxhZ3MgJj0gfklQX0NNU0dfVE9TOworCQlpZiAoIWZsYWdzKQorCQkJcmV0dXJuOworCX0KKworCWlmIChmbGFncyAmIElQX0NNU0dfUkVDVk9QVFMpIHsKIAkJaXBfY21zZ19yZWN2X29wdHMobXNnLCBza2IpOwotCWlmICgoZmxhZ3MgPj49IDEpID09IDApCi0JCXJldHVybjsKIAotCWlmIChmbGFncyAmIDEpCisJCWZsYWdzICY9IH5JUF9DTVNHX1JFQ1ZPUFRTOworCQlpZiAoIWZsYWdzKQorCQkJcmV0dXJuOworCX0KKworCWlmIChmbGFncyAmIElQX0NNU0dfUkVUT1BUUykgewogCQlpcF9jbXNnX3JlY3ZfcmV0b3B0cyhtc2csIHNrYik7Ci0JaWYgKChmbGFncyA+Pj0gMSkgPT0gMCkKLQkJcmV0dXJuOwogCi0JaWYgKGZsYWdzICYgMSkKKwkJZmxhZ3MgJj0gfklQX0NNU0dfUkVUT1BUUzsKKwkJaWYgKCFmbGFncykKKwkJCXJldHVybjsKKwl9CisKKwlpZiAoZmxhZ3MgJiBJUF9DTVNHX1BBU1NTRUMpIHsKIAkJaXBfY21zZ19yZWN2X3NlY3VyaXR5KG1zZywgc2tiKTsKIAotCWlmICgoZmxhZ3MgPj49IDEpID09IDApCi0JCXJldHVybjsKLQlpZiAoZmxhZ3MgJiAxKQorCQlmbGFncyAmPSB+SVBfQ01TR19QQVNTU0VDOworCQlpZiAoIWZsYWdzKQorCQkJcmV0dXJuOworCX0KKworCWlmIChmbGFncyAmIElQX0NNU0dfT1JJR0RTVEFERFIpIHsKIAkJaXBfY21zZ19yZWN2X2RzdGFkZHIobXNnLCBza2IpOwogCisJCWZsYWdzICY9IH5JUF9DTVNHX09SSUdEU1RBRERSOworCQlpZiAoIWZsYWdzKQorCQkJcmV0dXJuOworCX0KKworCWlmIChmbGFncyAmIElQX0NNU0dfQ0hFQ0tTVU0pCisJCWlwX2Ntc2dfcmVjdl9jaGVja3N1bShtc2csIHNrYiwgb2Zmc2V0KTsKIH0KLUVYUE9SVF9TWU1CT0woaXBfY21zZ19yZWN2KTsKK0VYUE9SVF9TWU1CT0woaXBfY21zZ19yZWN2X29mZnNldCk7CiAKIGludCBpcF9jbXNnX3NlbmQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBpcGNtX2Nvb2tpZSAqaXBjLAogCQkgYm9vbCBhbGxvd19pcHY2KQpAQCAtNDUwLDcgKzQ4Myw3IEBACiAKIAlzZXJyID0gU0tCX0VYVF9FUlIoc2tiKTsKIAotCWlmIChzaW4pIHsKKwlpZiAoc2luICYmIHNrYi0+bGVuKSB7CiAJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CiAJCXNpbi0+c2luX2FkZHIuc19hZGRyID0gKihfX2JlMzIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKwogCQkJCQkJICAgc2Vyci0+YWRkcl9vZmZzZXQpOwpAQCAtNDYzLDggKzQ5Niw5IEBACiAJc2luID0gJmVycmhkci5vZmZlbmRlcjsKIAltZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOwogCi0JaWYgKHNlcnItPmVlLmVlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fSUNNUCB8fAotCSAgICBpcHY0X3BrdGluZm9fcHJlcGFyZV9lcnJxdWV1ZShzaywgc2tiLCBzZXJyLT5lZS5lZV9vcmlnaW4pKSB7CisJaWYgKHNrYi0+bGVuICYmCisJICAgIChzZXJyLT5lZS5lZV9vcmlnaW4gPT0gU09fRUVfT1JJR0lOX0lDTVAgfHwKKwkgICAgIGlwdjRfcGt0aW5mb19wcmVwYXJlX2VycnF1ZXVlKHNrLCBza2IsIHNlcnItPmVlLmVlX29yaWdpbikpKSB7CiAJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CiAJCXNpbi0+c2luX2FkZHIuc19hZGRyID0gaXBfaGRyKHNrYiktPnNhZGRyOwogCQlpZiAoaW5ldF9zayhzayktPmNtc2dfZmxhZ3MpCkBAIC01MTgsNiArNTUyLDcgQEAKIAljYXNlIElQX01VTFRJQ0FTVF9BTEw6CiAJY2FzZSBJUF9NVUxUSUNBU1RfTE9PUDoKIAljYXNlIElQX1JFQ1ZPUklHRFNUQUREUjoKKwljYXNlIElQX0NIRUNLU1VNOgogCQlpZiAob3B0bGVuID49IHNpemVvZihpbnQpKSB7CiAJCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKSBvcHR2YWwpKQogCQkJCXJldHVybiAtRUZBVUxUOwpAQCAtNjE1LDYgKzY1MCwxOSBAQAogCQllbHNlCiAJCQlpbmV0LT5jbXNnX2ZsYWdzICY9IH5JUF9DTVNHX09SSUdEU1RBRERSOwogCQlicmVhazsKKwljYXNlIElQX0NIRUNLU1VNOgorCQlpZiAodmFsKSB7CisJCQlpZiAoIShpbmV0LT5jbXNnX2ZsYWdzICYgSVBfQ01TR19DSEVDS1NVTSkpIHsKKwkJCQlpbmV0X2luY19jb252ZXJ0X2NzdW0oc2spOworCQkJCWluZXQtPmNtc2dfZmxhZ3MgfD0gSVBfQ01TR19DSEVDS1NVTTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChpbmV0LT5jbXNnX2ZsYWdzICYgSVBfQ01TR19DSEVDS1NVTSkgeworCQkJCWluZXRfZGVjX2NvbnZlcnRfY3N1bShzayk7CisJCQkJaW5ldC0+Y21zZ19mbGFncyAmPSB+SVBfQ01TR19DSEVDS1NVTTsKKwkJCX0KKwkJfQorCQlicmVhazsKIAljYXNlIElQX1RPUzoJLyogVGhpcyBzZXRzIGJvdGggVE9TIGFuZCBQcmVjZWRlbmNlICovCiAJCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1NUUkVBTSkgewogCQkJdmFsICY9IH5JTkVUX0VDTl9NQVNLOwpAQCAtMTIxOCw2ICsxMjY2LDkgQEAKIAljYXNlIElQX1JFQ1ZPUklHRFNUQUREUjoKIAkJdmFsID0gKGluZXQtPmNtc2dfZmxhZ3MgJiBJUF9DTVNHX09SSUdEU1RBRERSKSAhPSAwOwogCQlicmVhazsKKwljYXNlIElQX0NIRUNLU1VNOgorCQl2YWwgPSAoaW5ldC0+Y21zZ19mbGFncyAmIElQX0NNU0dfQ0hFQ0tTVU0pICE9IDA7CisJCWJyZWFrOwogCWNhc2UgSVBfVE9TOgogCQl2YWwgPSBpbmV0LT50b3M7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfdHVubmVsLmMgYi9uZXQvaXB2NC9pcF90dW5uZWwuYwppbmRleCBkM2U0NDc5Li4yY2QwODI4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF90dW5uZWwuYworKysgYi9uZXQvaXB2NC9pcF90dW5uZWwuYwpAQCAtOTcyLDYgKzk3MiwxNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXBfdHVubmVsX2RlbGxpbmspOwogCitzdHJ1Y3QgbmV0ICppcF90dW5uZWxfZ2V0X2xpbmtfbmV0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiB0dW5uZWwtPm5ldDsKK30KK0VYUE9SVF9TWU1CT0woaXBfdHVubmVsX2dldF9saW5rX25ldCk7CisKIGludCBpcF90dW5uZWxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0LCBpbnQgaXBfdG5sX25ldF9pZCwKIAkJCQkgIHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMsIGNoYXIgKmRldm5hbWUpCiB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF92dGkuYyBiL25ldC9pcHY0L2lwX3Z0aS5jCmluZGV4IDFhN2U5NzkuLjk0ZWZlMTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3Z0aS5jCisrKyBiL25ldC9pcHY0L2lwX3Z0aS5jCkBAIC01MzEsNiArNTMxLDcgQEAKIAkuZGVsbGluayAgICAgICAgPSBpcF90dW5uZWxfZGVsbGluaywKIAkuZ2V0X3NpemUJPSB2dGlfZ2V0X3NpemUsCiAJLmZpbGxfaW5mbwk9IHZ0aV9maWxsX2luZm8sCisJLmdldF9saW5rX25ldAk9IGlwX3R1bm5lbF9nZXRfbGlua19uZXQsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB2dGlfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBjb25maWcuYyBiL25ldC9pcHY0L2lwY29uZmlnLmMKaW5kZXggN2ZhMThiYy4uYjI2Mzc2ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBjb25maWcuYworKysgYi9uZXQvaXB2NC9pcGNvbmZpZy5jCkBAIC0yMDksOSArMjA5LDkgQEAKIAlsYXN0ID0gJmljX2ZpcnN0X2RldjsKIAlydG5sX2xvY2soKTsKIAotCS8qIGJyaW5nIGxvb3BiYWNrIGRldmljZSB1cCBmaXJzdCAqLworCS8qIGJyaW5nIGxvb3BiYWNrIGFuZCBEU0EgbWFzdGVyIG5ldHdvcmsgZGV2aWNlcyB1cCBmaXJzdCAqLwogCWZvcl9lYWNoX25ldGRldigmaW5pdF9uZXQsIGRldikgewotCQlpZiAoIShkZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSkKKwkJaWYgKCEoZGV2LT5mbGFncyAmIElGRl9MT09QQkFDSykgJiYgIW5ldGRldl91c2VzX2RzYShkZXYpKQogCQkJY29udGludWU7CiAJCWlmIChkZXZfY2hhbmdlX2ZsYWdzKGRldiwgZGV2LT5mbGFncyB8IElGRl9VUCkgPCAwKQogCQkJcHJfZXJyKCJJUC1Db25maWc6IEZhaWxlZCB0byBvcGVuICVzXG4iLCBkZXYtPm5hbWUpOwpAQCAtMzA2LDcgKzMwNiw3IEBACiAJd2hpbGUgKChkID0gbmV4dCkpIHsKIAkJbmV4dCA9IGQtPm5leHQ7CiAJCWRldiA9IGQtPmRldjsKLQkJaWYgKGRldiAhPSBpY19kZXYpIHsKKwkJaWYgKGRldiAhPSBpY19kZXYgJiYgIW5ldGRldl91c2VzX2RzYShkZXYpKSB7CiAJCQlEQkcoKCJJUC1Db25maWc6IERvd25pbmcgJXNcbiIsIGRldi0+bmFtZSkpOwogCQkJZGV2X2NoYW5nZV9mbGFncyhkZXYsIGQtPmZsYWdzKTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBpcC5jIGIvbmV0L2lwdjQvaXBpcC5jCmluZGV4IDQwNDAzMTE0Li45MTVkMjE1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcGlwLmMKKysrIGIvbmV0L2lwdjQvaXBpcC5jCkBAIC0zNjYsMTIgKzM2NiwxMiBAQAogCiAJaWYgKGRhdGFbSUZMQV9JUFRVTl9FTkNBUF9TUE9SVF0pIHsKIAkJcmV0ID0gdHJ1ZTsKLQkJaXBlbmNhcC0+c3BvcnQgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfSVBUVU5fRU5DQVBfU1BPUlRdKTsKKwkJaXBlbmNhcC0+c3BvcnQgPSBubGFfZ2V0X2JlMTYoZGF0YVtJRkxBX0lQVFVOX0VOQ0FQX1NQT1JUXSk7CiAJfQogCiAJaWYgKGRhdGFbSUZMQV9JUFRVTl9FTkNBUF9EUE9SVF0pIHsKIAkJcmV0ID0gdHJ1ZTsKLQkJaXBlbmNhcC0+ZHBvcnQgPSBubGFfZ2V0X3UxNihkYXRhW0lGTEFfSVBUVU5fRU5DQVBfRFBPUlRdKTsKKwkJaXBlbmNhcC0+ZHBvcnQgPSBubGFfZ2V0X2JlMTYoZGF0YVtJRkxBX0lQVFVOX0VOQ0FQX0RQT1JUXSk7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTQ2MCwxMCArNDYwLDEwIEBACiAKIAlpZiAobmxhX3B1dF91MTYoc2tiLCBJRkxBX0lQVFVOX0VOQ0FQX1RZUEUsCiAJCQl0dW5uZWwtPmVuY2FwLnR5cGUpIHx8Ci0JICAgIG5sYV9wdXRfdTE2KHNrYiwgSUZMQV9JUFRVTl9FTkNBUF9TUE9SVCwKLQkJCXR1bm5lbC0+ZW5jYXAuc3BvcnQpIHx8Ci0JICAgIG5sYV9wdXRfdTE2KHNrYiwgSUZMQV9JUFRVTl9FTkNBUF9EUE9SVCwKLQkJCXR1bm5lbC0+ZW5jYXAuZHBvcnQpIHx8CisJICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfSVBUVU5fRU5DQVBfU1BPUlQsCisJCQkgdHVubmVsLT5lbmNhcC5zcG9ydCkgfHwKKwkgICAgbmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9JUFRVTl9FTkNBUF9EUE9SVCwKKwkJCSB0dW5uZWwtPmVuY2FwLmRwb3J0KSB8fAogCSAgICBubGFfcHV0X3UxNihza2IsIElGTEFfSVBUVU5fRU5DQVBfRkxBR1MsCiAJCQl0dW5uZWwtPmVuY2FwLmZsYWdzKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CkBAIC00OTgsNiArNDk4LDcgQEAKIAkuZGVsbGluawk9IGlwX3R1bm5lbF9kZWxsaW5rLAogCS5nZXRfc2l6ZQk9IGlwaXBfZ2V0X3NpemUsCiAJLmZpbGxfaW5mbwk9IGlwaXBfZmlsbF9pbmZvLAorCS5nZXRfbGlua19uZXQJPSBpcF90dW5uZWxfZ2V0X2xpbmtfbmV0LAogfTsKIAogc3RhdGljIHN0cnVjdCB4ZnJtX3R1bm5lbCBpcGlwX2hhbmRsZXIgX19yZWFkX21vc3RseSA9IHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCBjODAzNDU4Li45ZDc4NDI3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKKysrIGIvbmV0L2lwdjQvaXBtci5jCkBAIC0yMjkwLDcgKzIyOTAsOCBAQAogCWlmIChlcnIgPCAwICYmIGVyciAhPSAtRU5PRU5UKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiAKIG5sYV9wdXRfZmFpbHVyZToKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcGluZy5jIGIvbmV0L2lwdjQvcGluZy5jCmluZGV4IGMwZDgyZjcuLmU5ZjY2ZTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3BpbmcuYworKysgYi9uZXQvaXB2NC9waW5nLmMKQEAgLTU5OSwxOCArNTk5LDE4IEBACiAJc3RydWN0IHBpbmdmYWtlaGRyICpwZmggPSAoc3RydWN0IHBpbmdmYWtlaGRyICopZnJvbTsKIAogCWlmIChvZmZzZXQgPT0gMCkgewotCQlpZiAoZnJhZ2xlbiA8IHNpemVvZihzdHJ1Y3QgaWNtcGhkcikpCisJCWZyYWdsZW4gLT0gc2l6ZW9mKHN0cnVjdCBpY21waGRyKTsKKwkJaWYgKGZyYWdsZW4gPCAwKQogCQkJQlVHKCk7Ci0JCWlmIChjc3VtX3BhcnRpYWxfY29weV9mcm9taW92ZWNlbmQodG8gKyBzaXplb2Yoc3RydWN0IGljbXBoZHIpLAotCQkJICAgIHBmaC0+aW92LCAwLCBmcmFnbGVuIC0gc2l6ZW9mKHN0cnVjdCBpY21waGRyKSwKLQkJCSAgICAmcGZoLT53Y2hlY2spKQorCQlpZiAoY3N1bV9hbmRfY29weV9mcm9tX2l0ZXIodG8gKyBzaXplb2Yoc3RydWN0IGljbXBoZHIpLAorCQkJICAgIGZyYWdsZW4sICZwZmgtPndjaGVjaywKKwkJCSAgICAmcGZoLT5tc2ctPm1zZ19pdGVyKSAhPSBmcmFnbGVuKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfSBlbHNlIGlmIChvZmZzZXQgPCBzaXplb2Yoc3RydWN0IGljbXBoZHIpKSB7CiAJCQlCVUcoKTsKIAl9IGVsc2UgewotCQlpZiAoY3N1bV9wYXJ0aWFsX2NvcHlfZnJvbWlvdmVjZW5kCi0JCQkJKHRvLCBwZmgtPmlvdiwgb2Zmc2V0IC0gc2l6ZW9mKHN0cnVjdCBpY21waGRyKSwKLQkJCQkgZnJhZ2xlbiwgJnBmaC0+d2NoZWNrKSkKKwkJaWYgKGNzdW1fYW5kX2NvcHlfZnJvbV9pdGVyKHRvLCBmcmFnbGVuLCAmcGZoLT53Y2hlY2ssCisJCQkJCSAgICAmcGZoLT5tc2ctPm1zZ19pdGVyKSAhPSBmcmFnbGVuKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC04MTEsOCArODExLDcgQEAKIAlwZmguaWNtcGguY2hlY2tzdW0gPSAwOwogCXBmaC5pY21waC51bi5lY2hvLmlkID0gaW5ldC0+aW5ldF9zcG9ydDsKIAlwZmguaWNtcGgudW4uZWNoby5zZXF1ZW5jZSA9IHVzZXJfaWNtcGgudW4uZWNoby5zZXF1ZW5jZTsKLQkvKiBYWFg6IHN0cmlwcGluZyBjb25zdCAqLwotCXBmaC5pb3YgPSAoc3RydWN0IGlvdmVjICopbXNnLT5tc2dfaXRlci5pb3Y7CisJcGZoLm1zZyA9IG1zZzsKIAlwZmgud2NoZWNrID0gMDsKIAlwZmguZmFtaWx5ID0gQUZfSU5FVDsKIApAQCAtOTY2LDggKzk2NSwxMSBAQAogCiAJc2sgPSBwaW5nX2xvb2t1cChuZXQsIHNrYiwgbnRvaHMoaWNtcGgtPnVuLmVjaG8uaWQpKTsKIAlpZiAoc2sgIT0gTlVMTCkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOworCiAJCXByX2RlYnVnKCJyY3Ygb24gc29ja2V0ICVwXG4iLCBzayk7Ci0JCXBpbmdfcXVldWVfcmN2X3NrYihzaywgc2tiX2dldChza2IpKTsKKwkJaWYgKHNrYjIpCisJCQlwaW5nX3F1ZXVlX3Jjdl9za2Ioc2ssIHNrYjIpOwogCQlzb2NrX3B1dChzayk7CiAJCXJldHVybiB0cnVlOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3Byb2MuYyBiL25ldC9pcHY0L3Byb2MuYwppbmRleCA4ZjljZDIwLi5kODk1M2VmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9wcm9jLmMKKysrIGIvbmV0L2lwdjQvcHJvYy5jCkBAIC0yOTIsNiArMjkyLDEyIEBACiAJU05NUF9NSUJfSVRFTSgiVENQSHlzdGFydFRyYWluQ3duZCIsIExJTlVYX01JQl9UQ1BIWVNUQVJUVFJBSU5DV05EKSwKIAlTTk1QX01JQl9JVEVNKCJUQ1BIeXN0YXJ0RGVsYXlEZXRlY3QiLCBMSU5VWF9NSUJfVENQSFlTVEFSVERFTEFZREVURUNUKSwKIAlTTk1QX01JQl9JVEVNKCJUQ1BIeXN0YXJ0RGVsYXlDd25kIiwgTElOVVhfTUlCX1RDUEhZU1RBUlRERUxBWUNXTkQpLAorCVNOTVBfTUlCX0lURU0oIlRDUEFDS1NraXBwZWRTeW5SZWN2IiwgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURTWU5SRUNWKSwKKwlTTk1QX01JQl9JVEVNKCJUQ1BBQ0tTa2lwcGVkUEFXUyIsIExJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEUEFXUyksCisJU05NUF9NSUJfSVRFTSgiVENQQUNLU2tpcHBlZFNlcSIsIExJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEU0VRKSwKKwlTTk1QX01JQl9JVEVNKCJUQ1BBQ0tTa2lwcGVkRmluV2FpdDIiLCBMSU5VWF9NSUJfVENQQUNLU0tJUFBFREZJTldBSVQyKSwKKwlTTk1QX01JQl9JVEVNKCJUQ1BBQ0tTa2lwcGVkVGltZVdhaXQiLCBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFRJTUVXQUlUKSwKKwlTTk1QX01JQl9JVEVNKCJUQ1BBQ0tTa2lwcGVkQ2hhbGxlbmdlIiwgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURDSEFMTEVOR0UpLAogCVNOTVBfTUlCX1NFTlRJTkVMCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IDBiYjY4ZGYuLmYwMjdhNzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC0zMzcsNyArMzM3LDcgQEAKIH0KIAogc3RhdGljIGludCByYXdfc2VuZF9oZHJpbmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2k0ICpmbDQsCi0JCQkgICB2b2lkICpmcm9tLCBzaXplX3QgbGVuZ3RoLAorCQkJICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3QgbGVuZ3RoLAogCQkJICAgc3RydWN0IHJ0YWJsZSAqKnJ0cCwKIAkJCSAgIHVuc2lnbmVkIGludCBmbGFncykKIHsKQEAgLTM4Miw3ICszODIsNyBAQAogCiAJc2tiLT50cmFuc3BvcnRfaGVhZGVyID0gc2tiLT5uZXR3b3JrX2hlYWRlcjsKIAllcnIgPSAtRUZBVUxUOwotCWlmIChtZW1jcHlfZnJvbWlvdmVjZW5kKCh2b2lkICopaXBoLCBmcm9tLCAwLCBsZW5ndGgpKQorCWlmIChtZW1jcHlfZnJvbV9tc2coaXBoLCBtc2csIGxlbmd0aCkpCiAJCWdvdG8gZXJyb3JfZnJlZTsKIAogCWlwaGxlbiA9IGlwaC0+aWhsICogNDsKQEAgLTYyNSw4ICs2MjUsNyBAQAogYmFja19mcm9tX2NvbmZpcm06CiAKIAlpZiAoaW5ldC0+aGRyaW5jbCkKLQkJLyogWFhYOiBzdHJpcHBpbmcgY29uc3QgKi8KLQkJZXJyID0gcmF3X3NlbmRfaGRyaW5jKHNrLCAmZmw0LCAoc3RydWN0IGlvdmVjICopbXNnLT5tc2dfaXRlci5pb3YsIGxlbiwKKwkJZXJyID0gcmF3X3NlbmRfaGRyaW5jKHNrLCAmZmw0LCBtc2csIGxlbiwKIAkJCQkgICAgICAmcnQsIG1zZy0+bXNnX2ZsYWdzKTsKIAogCSBlbHNlIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3JvdXRlLmMgYi9uZXQvaXB2NC9yb3V0ZS5jCmluZGV4IDZhMjE1NWIuLmFkNTA2NDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3JvdXRlLmMKKysrIGIvbmV0L2lwdjQvcm91dGUuYwpAQCAtOTY2LDYgKzk2Niw5IEBACiAJaWYgKGRzdC0+ZGV2LT5tdHUgPCBtdHUpCiAJCXJldHVybjsKIAorCWlmIChydC0+cnRfcG10dSAmJiBydC0+cnRfcG10dSA8IG10dSkKKwkJcmV0dXJuOworCiAJaWYgKG10dSA8IGlwX3J0X21pbl9wbXR1KQogCQltdHUgPSBpcF9ydF9taW5fcG10dTsKIApAQCAtMTMyNSwxNCArMTMyOCwyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socnRfdW5jYWNoZWRfbG9jayk7Ci1zdGF0aWMgTElTVF9IRUFEKHJ0X3VuY2FjaGVkX2xpc3QpOworc3RydWN0IHVuY2FjaGVkX2xpc3QgeworCXNwaW5sb2NrX3QJCWxvY2s7CisJc3RydWN0IGxpc3RfaGVhZAloZWFkOworfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVX0FMSUdORUQoc3RydWN0IHVuY2FjaGVkX2xpc3QsIHJ0X3VuY2FjaGVkX2xpc3QpOwogCiBzdGF0aWMgdm9pZCBydF9hZGRfdW5jYWNoZWRfbGlzdChzdHJ1Y3QgcnRhYmxlICpydCkKIHsKLQlzcGluX2xvY2tfYmgoJnJ0X3VuY2FjaGVkX2xvY2spOwotCWxpc3RfYWRkX3RhaWwoJnJ0LT5ydF91bmNhY2hlZCwgJnJ0X3VuY2FjaGVkX2xpc3QpOwotCXNwaW5fdW5sb2NrX2JoKCZydF91bmNhY2hlZF9sb2NrKTsKKwlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSByYXdfY3B1X3B0cigmcnRfdW5jYWNoZWRfbGlzdCk7CisKKwlydC0+cnRfdW5jYWNoZWRfbGlzdCA9IHVsOworCisJc3Bpbl9sb2NrX2JoKCZ1bC0+bG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcnQtPnJ0X3VuY2FjaGVkLCAmdWwtPmhlYWQpOworCXNwaW5fdW5sb2NrX2JoKCZ1bC0+bG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGlwdjRfZHN0X2Rlc3Ryb3koc3RydWN0IGRzdF9lbnRyeSAqZHN0KQpAQCAtMTM0MCwyNyArMTM1MSwzMiBAQAogCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKikgZHN0OwogCiAJaWYgKCFsaXN0X2VtcHR5KCZydC0+cnRfdW5jYWNoZWQpKSB7Ci0JCXNwaW5fbG9ja19iaCgmcnRfdW5jYWNoZWRfbG9jayk7CisJCXN0cnVjdCB1bmNhY2hlZF9saXN0ICp1bCA9IHJ0LT5ydF91bmNhY2hlZF9saXN0OworCisJCXNwaW5fbG9ja19iaCgmdWwtPmxvY2spOwogCQlsaXN0X2RlbCgmcnQtPnJ0X3VuY2FjaGVkKTsKLQkJc3Bpbl91bmxvY2tfYmgoJnJ0X3VuY2FjaGVkX2xvY2spOworCQlzcGluX3VubG9ja19iaCgmdWwtPmxvY2spOwogCX0KIH0KIAogdm9pZCBydF9mbHVzaF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpZiAoIWxpc3RfZW1wdHkoJnJ0X3VuY2FjaGVkX2xpc3QpKSB7Ci0JCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKLQkJc3RydWN0IHJ0YWJsZSAqcnQ7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOworCXN0cnVjdCBydGFibGUgKnJ0OworCWludCBjcHU7CiAKLQkJc3Bpbl9sb2NrX2JoKCZydF91bmNhY2hlZF9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShydCwgJnJ0X3VuY2FjaGVkX2xpc3QsIHJ0X3VuY2FjaGVkKSB7CisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgeworCQlzdHJ1Y3QgdW5jYWNoZWRfbGlzdCAqdWwgPSAmcGVyX2NwdShydF91bmNhY2hlZF9saXN0LCBjcHUpOworCisJCXNwaW5fbG9ja19iaCgmdWwtPmxvY2spOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0LCAmdWwtPmhlYWQsIHJ0X3VuY2FjaGVkKSB7CiAJCQlpZiAocnQtPmRzdC5kZXYgIT0gZGV2KQogCQkJCWNvbnRpbnVlOwogCQkJcnQtPmRzdC5kZXYgPSBuZXQtPmxvb3BiYWNrX2RldjsKIAkJCWRldl9ob2xkKHJ0LT5kc3QuZGV2KTsKIAkJCWRldl9wdXQoZGV2KTsKIAkJfQotCQlzcGluX3VubG9ja19iaCgmcnRfdW5jYWNoZWRfbG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZ1bC0+bG9jayk7CiAJfQogfQogCkBAIC0xNTU0LDExICsxNTcwLDEwIEBACiAKIAlkb19jYWNoZSA9IHJlcy0+ZmkgJiYgIWl0YWc7CiAJaWYgKG91dF9kZXYgPT0gaW5fZGV2ICYmIGVyciAmJiBJTl9ERVZfVFhfUkVESVJFQ1RTKG91dF9kZXYpICYmCisJICAgIHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApICYmCiAJICAgIChJTl9ERVZfU0hBUkVEX01FRElBKG91dF9kZXYpIHx8Ci0JICAgICBpbmV0X2FkZHJfb25saW5rKG91dF9kZXYsIHNhZGRyLCBGSUJfUkVTX0dXKCpyZXMpKSkpIHsKLQkJZmxhZ3MgfD0gUlRDRl9ET1JFRElSRUNUOwotCQlkb19jYWNoZSA9IGZhbHNlOwotCX0KKwkgICAgIGluZXRfYWRkcl9vbmxpbmsob3V0X2Rldiwgc2FkZHIsIEZJQl9SRVNfR1coKnJlcykpKSkKKwkJSVBDQihza2IpLT5mbGFncyB8PSBJUFNLQl9ET1JFRElSRUNUOwogCiAJaWYgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApKSB7CiAJCS8qIE5vdCBJUCAoaS5lLiBBUlApLiBEbyBub3QgY3JlYXRlIHJvdXRlLCBpZiBpdCBpcwpAQCAtMjMwMyw2ICsyMzE4LDggQEAKIAlyLT5ydG1fZmxhZ3MJPSAocnQtPnJ0X2ZsYWdzICYgfjB4RkZGRikgfCBSVE1fRl9DTE9ORUQ7CiAJaWYgKHJ0LT5ydF9mbGFncyAmIFJUQ0ZfTk9USUZZKQogCQlyLT5ydG1fZmxhZ3MgfD0gUlRNX0ZfTk9USUZZOworCWlmIChJUENCKHNrYiktPmZsYWdzICYgSVBTS0JfRE9SRURJUkVDVCkKKwkJci0+cnRtX2ZsYWdzIHw9IFJUQ0ZfRE9SRURJUkVDVDsKIAogCWlmIChubGFfcHV0X2JlMzIoc2tiLCBSVEFfRFNULCBkc3QpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKQEAgLTIzNzcsNyArMjM5NCw4IEBACiAJaWYgKHJ0bmxfcHV0X2NhY2hlaW5mbyhza2IsICZydC0+ZHN0LCAwLCBleHBpcmVzLCBlcnJvcikgPCAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiAKIG5sYV9wdXRfZmFpbHVyZToKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwpAQCAtMjQ2OSw3ICsyNDg3LDcgQEAKIAllcnIgPSBydF9maWxsX2luZm8obmV0LCBkc3QsIHNyYywgJmZsNCwgc2tiLAogCQkJICAgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCwgbmxoLT5ubG1zZ19zZXEsCiAJCQkgICBSVE1fTkVXUk9VVEUsIDAsIDApOwotCWlmIChlcnIgPD0gMCkKKwlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJvdXRfZnJlZTsKIAogCWVyciA9IHJ0bmxfdW5pY2FzdChza2IsIG5ldCwgTkVUTElOS19DQihpbl9za2IpLnBvcnRpZCk7CkBAIC0yNzE3LDYgKzI3MzUsNyBAQAogaW50IF9faW5pdCBpcF9ydF9pbml0KHZvaWQpCiB7CiAJaW50IHJjID0gMDsKKwlpbnQgY3B1OwogCiAJaXBfaWRlbnRzID0ga21hbGxvYyhJUF9JREVOVFNfU1ogKiBzaXplb2YoKmlwX2lkZW50cyksIEdGUF9LRVJORUwpOwogCWlmICghaXBfaWRlbnRzKQpAQCAtMjcyNCw2ICsyNzQzLDEyIEBACiAKIAlwcmFuZG9tX2J5dGVzKGlwX2lkZW50cywgSVBfSURFTlRTX1NaICogc2l6ZW9mKCppcF9pZGVudHMpKTsKIAorCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJc3RydWN0IHVuY2FjaGVkX2xpc3QgKnVsID0gJnBlcl9jcHUocnRfdW5jYWNoZWRfbGlzdCwgY3B1KTsKKworCQlJTklUX0xJU1RfSEVBRCgmdWwtPmhlYWQpOworCQlzcGluX2xvY2tfaW5pdCgmdWwtPmxvY2spOworCX0KICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfQ0xBU1NJRAogCWlwX3J0X2FjY3QgPSBfX2FsbG9jX3BlcmNwdSgyNTYgKiBzaXplb2Yoc3RydWN0IGlwX3J0X2FjY3QpLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgaXBfcnRfYWNjdCkpOwogCWlmICghaXBfcnRfYWNjdCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKaW5kZXggZTBlZTM4NC4uZDE1MTUzOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMKQEAgLTYwNCwyMCArNjA0LDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfdGNwX2Nvbmdlc3Rpb25fY29udHJvbCwKIAl9LAogCXsKLQkJLnByb2NuYW1lCT0gInRjcF9tdHVfcHJvYmluZyIsCi0JCS5kYXRhCQk9ICZzeXNjdGxfdGNwX210dV9wcm9iaW5nLAotCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKLQl9LAotCXsKLQkJLnByb2NuYW1lCT0gInRjcF9iYXNlX21zcyIsCi0JCS5kYXRhCQk9ICZzeXNjdGxfdGNwX2Jhc2VfbXNzLAotCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAotCQkubW9kZQkJPSAwNjQ0LAotCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKLQl9LAotCXsKIAkJLnByb2NuYW1lCT0gInRjcF93b3JrYXJvdW5kX3NpZ25lZF93aW5kb3dzIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF90Y3Bfd29ya2Fyb3VuZF9zaWduZWRfd2luZG93cywKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKQEAgLTcyOSw2ICs3MTUsMTMgQEAKIAkJLmV4dHJhMgkJPSAmb25lLAogCX0sCiAJeworCQkucHJvY25hbWUJPSAidGNwX2ludmFsaWRfcmF0ZWxpbWl0IiwKKwkJLmRhdGEJCT0gJnN5c2N0bF90Y3BfaW52YWxpZF9yYXRlbGltaXQsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMsCisJfSwKKwl7CiAJCS5wcm9jbmFtZQk9ICJpY21wX21zZ3NfcGVyX3NlYyIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfaWNtcF9tc2dzX3Blcl9zZWMsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCkBAIC04NzYsNiArODY5LDIwIEBACiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjLAogCX0sCisJeworCQkucHJvY25hbWUJPSAidGNwX210dV9wcm9iaW5nIiwKKwkJLmRhdGEJCT0gJmluaXRfbmV0LmlwdjQuc3lzY3RsX3RjcF9tdHVfcHJvYmluZywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJfSwKKwl7CisJCS5wcm9jbmFtZQk9ICJ0Y3BfYmFzZV9tc3MiLAorCQkuZGF0YQkJPSAmaW5pdF9uZXQuaXB2NC5zeXNjdGxfdGNwX2Jhc2VfbXNzLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYywKKwl9LAogCXsgfQogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCAzMDc1NzIzLi45ZDcyYTBmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMTA2NywxMSArMTA2NywxMCBAQAogaW50IHRjcF9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCXNpemVfdCBzaXplKQogewotCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92OwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JaW50IGlvdmxlbiwgZmxhZ3MsIGVyciwgY29waWVkID0gMDsKLQlpbnQgbXNzX25vdyA9IDAsIHNpemVfZ29hbCwgY29waWVkX3N5biA9IDAsIG9mZnNldCA9IDA7CisJaW50IGZsYWdzLCBlcnIsIGNvcGllZCA9IDA7CisJaW50IG1zc19ub3cgPSAwLCBzaXplX2dvYWwsIGNvcGllZF9zeW4gPSAwOwogCWJvb2wgc2c7CiAJbG9uZyB0aW1lbzsKIApAQCAtMTA4NCw3ICsxMDgzLDYgQEAKIAkJCWdvdG8gb3V0OwogCQllbHNlIGlmIChlcnIpCiAJCQlnb3RvIG91dF9lcnI7Ci0JCW9mZnNldCA9IGNvcGllZF9zeW47CiAJfQogCiAJdGltZW8gPSBzb2NrX3NuZHRpbWVvKHNrLCBmbGFncyAmIE1TR19ET05UV0FJVCk7CkBAIC0xMTE4LDggKzExMTYsNiBAQAogCW1zc19ub3cgPSB0Y3Bfc2VuZF9tc3Moc2ssICZzaXplX2dvYWwsIGZsYWdzKTsKIAogCS8qIE9rIGNvbW1lbmNlIHNlbmRpbmcuICovCi0JaW92bGVuID0gbXNnLT5tc2dfaXRlci5ucl9zZWdzOwotCWlvdiA9IG1zZy0+bXNnX2l0ZXIuaW92OwogCWNvcGllZCA9IDA7CiAKIAllcnIgPSAtRVBJUEU7CkBAIC0xMTI4LDE1MSArMTEyNCwxMzQgQEAKIAogCXNnID0gISEoc2stPnNrX3JvdXRlX2NhcHMgJiBORVRJRl9GX1NHKTsKIAotCXdoaWxlICgtLWlvdmxlbiA+PSAwKSB7Ci0JCXNpemVfdCBzZWdsZW4gPSBpb3YtPmlvdl9sZW47Ci0JCXVuc2lnbmVkIGNoYXIgX191c2VyICpmcm9tID0gaW92LT5pb3ZfYmFzZTsKKwl3aGlsZSAoaW92X2l0ZXJfY291bnQoJm1zZy0+bXNnX2l0ZXIpKSB7CisJCWludCBjb3B5ID0gMDsKKwkJaW50IG1heCA9IHNpemVfZ29hbDsKIAotCQlpb3YrKzsKLQkJaWYgKHVubGlrZWx5KG9mZnNldCA+IDApKSB7ICAvKiBTa2lwIGJ5dGVzIGNvcGllZCBpbiBTWU4gKi8KLQkJCWlmIChvZmZzZXQgPj0gc2VnbGVuKSB7Ci0JCQkJb2Zmc2V0IC09IHNlZ2xlbjsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXNlZ2xlbiAtPSBvZmZzZXQ7Ci0JCQlmcm9tICs9IG9mZnNldDsKLQkJCW9mZnNldCA9IDA7CisJCXNrYiA9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKTsKKwkJaWYgKHRjcF9zZW5kX2hlYWQoc2spKSB7CisJCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fTk9ORSkKKwkJCQltYXggPSBtc3Nfbm93OworCQkJY29weSA9IG1heCAtIHNrYi0+bGVuOwogCQl9CiAKLQkJd2hpbGUgKHNlZ2xlbiA+IDApIHsKLQkJCWludCBjb3B5ID0gMDsKLQkJCWludCBtYXggPSBzaXplX2dvYWw7Ci0KLQkJCXNrYiA9IHRjcF93cml0ZV9xdWV1ZV90YWlsKHNrKTsKLQkJCWlmICh0Y3Bfc2VuZF9oZWFkKHNrKSkgewotCQkJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9OT05FKQotCQkJCQltYXggPSBtc3Nfbm93OwotCQkJCWNvcHkgPSBtYXggLSBza2ItPmxlbjsKLQkJCX0KLQotCQkJaWYgKGNvcHkgPD0gMCkgeworCQlpZiAoY29weSA8PSAwKSB7CiBuZXdfc2VnbWVudDoKLQkJCQkvKiBBbGxvY2F0ZSBuZXcgc2VnbWVudC4gSWYgdGhlIGludGVyZmFjZSBpcyBTRywKLQkJCQkgKiBhbGxvY2F0ZSBza2IgZml0dGluZyB0byBzaW5nbGUgcGFnZS4KLQkJCQkgKi8KLQkJCQlpZiAoIXNrX3N0cmVhbV9tZW1vcnlfZnJlZShzaykpCi0JCQkJCWdvdG8gd2FpdF9mb3Jfc25kYnVmOworCQkJLyogQWxsb2NhdGUgbmV3IHNlZ21lbnQuIElmIHRoZSBpbnRlcmZhY2UgaXMgU0csCisJCQkgKiBhbGxvY2F0ZSBza2IgZml0dGluZyB0byBzaW5nbGUgcGFnZS4KKwkJCSAqLworCQkJaWYgKCFza19zdHJlYW1fbWVtb3J5X2ZyZWUoc2spKQorCQkJCWdvdG8gd2FpdF9mb3Jfc25kYnVmOwogCi0JCQkJc2tiID0gc2tfc3RyZWFtX2FsbG9jX3NrYihzaywKLQkJCQkJCQkgIHNlbGVjdF9zaXplKHNrLCBzZyksCi0JCQkJCQkJICBzay0+c2tfYWxsb2NhdGlvbik7Ci0JCQkJaWYgKCFza2IpCi0JCQkJCWdvdG8gd2FpdF9mb3JfbWVtb3J5OworCQkJc2tiID0gc2tfc3RyZWFtX2FsbG9jX3NrYihzaywKKwkJCQkJCSAgc2VsZWN0X3NpemUoc2ssIHNnKSwKKwkJCQkJCSAgc2stPnNrX2FsbG9jYXRpb24pOworCQkJaWYgKCFza2IpCisJCQkJZ290byB3YWl0X2Zvcl9tZW1vcnk7CiAKLQkJCQkvKgotCQkJCSAqIENoZWNrIHdoZXRoZXIgd2UgY2FuIHVzZSBIVyBjaGVja3N1bS4KLQkJCQkgKi8KLQkJCQlpZiAoc2stPnNrX3JvdXRlX2NhcHMgJiBORVRJRl9GX0FMTF9DU1VNKQotCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1BBUlRJQUw7CisJCQkvKgorCQkJICogQ2hlY2sgd2hldGhlciB3ZSBjYW4gdXNlIEhXIGNoZWNrc3VtLgorCQkJICovCisJCQlpZiAoc2stPnNrX3JvdXRlX2NhcHMgJiBORVRJRl9GX0FMTF9DU1VNKQorCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKIAotCQkJCXNrYl9lbnRhaWwoc2ssIHNrYik7Ci0JCQkJY29weSA9IHNpemVfZ29hbDsKLQkJCQltYXggPSBzaXplX2dvYWw7CisJCQlza2JfZW50YWlsKHNrLCBza2IpOworCQkJY29weSA9IHNpemVfZ29hbDsKKwkJCW1heCA9IHNpemVfZ29hbDsKIAotCQkJCS8qIEFsbCBwYWNrZXRzIGFyZSByZXN0b3JlZCBhcyBpZiB0aGV5IGhhdmUKLQkJCQkgKiBhbHJlYWR5IGJlZW4gc2VudC4gc2tiX21zdGFtcCBpc24ndCBzZXQgdG8KLQkJCQkgKiBhdm9pZCB3cm9uZyBydHQgZXN0aW1hdGlvbi4KLQkJCQkgKi8KLQkJCQlpZiAodHAtPnJlcGFpcikKLQkJCQkJVENQX1NLQl9DQihza2IpLT5zYWNrZWQgfD0gVENQQ0JfUkVQQUlSRUQ7Ci0JCQl9CisJCQkvKiBBbGwgcGFja2V0cyBhcmUgcmVzdG9yZWQgYXMgaWYgdGhleSBoYXZlCisJCQkgKiBhbHJlYWR5IGJlZW4gc2VudC4gc2tiX21zdGFtcCBpc24ndCBzZXQgdG8KKwkJCSAqIGF2b2lkIHdyb25nIHJ0dCBlc3RpbWF0aW9uLgorCQkJICovCisJCQlpZiAodHAtPnJlcGFpcikKKwkJCQlUQ1BfU0tCX0NCKHNrYiktPnNhY2tlZCB8PSBUQ1BDQl9SRVBBSVJFRDsKKwkJfQogCi0JCQkvKiBUcnkgdG8gYXBwZW5kIGRhdGEgdG8gdGhlIGVuZCBvZiBza2IuICovCi0JCQlpZiAoY29weSA+IHNlZ2xlbikKLQkJCQljb3B5ID0gc2VnbGVuOworCQkvKiBUcnkgdG8gYXBwZW5kIGRhdGEgdG8gdGhlIGVuZCBvZiBza2IuICovCisJCWlmIChjb3B5ID4gaW92X2l0ZXJfY291bnQoJm1zZy0+bXNnX2l0ZXIpKQorCQkJY29weSA9IGlvdl9pdGVyX2NvdW50KCZtc2ctPm1zZ19pdGVyKTsKIAotCQkJLyogV2hlcmUgdG8gY29weSB0bz8gKi8KLQkJCWlmIChza2JfYXZhaWxyb29tKHNrYikgPiAwKSB7Ci0JCQkJLyogV2UgaGF2ZSBzb21lIHNwYWNlIGluIHNrYiBoZWFkLiBTdXBlcmIhICovCi0JCQkJY29weSA9IG1pbl90KGludCwgY29weSwgc2tiX2F2YWlscm9vbShza2IpKTsKLQkJCQllcnIgPSBza2JfYWRkX2RhdGFfbm9jYWNoZShzaywgc2tiLCBmcm9tLCBjb3B5KTsKLQkJCQlpZiAoZXJyKQotCQkJCQlnb3RvIGRvX2ZhdWx0OwotCQkJfSBlbHNlIHsKLQkJCQlib29sIG1lcmdlID0gdHJ1ZTsKLQkJCQlpbnQgaSA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0JCQkJc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcgPSBza19wYWdlX2ZyYWcoc2spOworCQkvKiBXaGVyZSB0byBjb3B5IHRvPyAqLworCQlpZiAoc2tiX2F2YWlscm9vbShza2IpID4gMCkgeworCQkJLyogV2UgaGF2ZSBzb21lIHNwYWNlIGluIHNrYiBoZWFkLiBTdXBlcmIhICovCisJCQljb3B5ID0gbWluX3QoaW50LCBjb3B5LCBza2JfYXZhaWxyb29tKHNrYikpOworCQkJZXJyID0gc2tiX2FkZF9kYXRhX25vY2FjaGUoc2ssIHNrYiwgJm1zZy0+bXNnX2l0ZXIsIGNvcHkpOworCQkJaWYgKGVycikKKwkJCQlnb3RvIGRvX2ZhdWx0OworCQl9IGVsc2UgeworCQkJYm9vbCBtZXJnZSA9IHRydWU7CisJCQlpbnQgaSA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJCQlzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZyA9IHNrX3BhZ2VfZnJhZyhzayk7CiAKLQkJCQlpZiAoIXNrX3BhZ2VfZnJhZ19yZWZpbGwoc2ssIHBmcmFnKSkKLQkJCQkJZ290byB3YWl0X2Zvcl9tZW1vcnk7CisJCQlpZiAoIXNrX3BhZ2VfZnJhZ19yZWZpbGwoc2ssIHBmcmFnKSkKKwkJCQlnb3RvIHdhaXRfZm9yX21lbW9yeTsKIAotCQkJCWlmICghc2tiX2Nhbl9jb2FsZXNjZShza2IsIGksIHBmcmFnLT5wYWdlLAotCQkJCQkJICAgICAgcGZyYWctPm9mZnNldCkpIHsKLQkJCQkJaWYgKGkgPT0gTUFYX1NLQl9GUkFHUyB8fCAhc2cpIHsKLQkJCQkJCXRjcF9tYXJrX3B1c2godHAsIHNrYik7Ci0JCQkJCQlnb3RvIG5ld19zZWdtZW50OwotCQkJCQl9Ci0JCQkJCW1lcmdlID0gZmFsc2U7CisJCQlpZiAoIXNrYl9jYW5fY29hbGVzY2Uoc2tiLCBpLCBwZnJhZy0+cGFnZSwKKwkJCQkJICAgICAgcGZyYWctPm9mZnNldCkpIHsKKwkJCQlpZiAoaSA9PSBNQVhfU0tCX0ZSQUdTIHx8ICFzZykgeworCQkJCQl0Y3BfbWFya19wdXNoKHRwLCBza2IpOworCQkJCQlnb3RvIG5ld19zZWdtZW50OwogCQkJCX0KLQotCQkJCWNvcHkgPSBtaW5fdChpbnQsIGNvcHksIHBmcmFnLT5zaXplIC0gcGZyYWctPm9mZnNldCk7Ci0KLQkJCQlpZiAoIXNrX3dtZW1fc2NoZWR1bGUoc2ssIGNvcHkpKQotCQkJCQlnb3RvIHdhaXRfZm9yX21lbW9yeTsKLQotCQkJCWVyciA9IHNrYl9jb3B5X3RvX3BhZ2Vfbm9jYWNoZShzaywgZnJvbSwgc2tiLAotCQkJCQkJCSAgICAgICBwZnJhZy0+cGFnZSwKLQkJCQkJCQkgICAgICAgcGZyYWctPm9mZnNldCwKLQkJCQkJCQkgICAgICAgY29weSk7Ci0JCQkJaWYgKGVycikKLQkJCQkJZ290byBkb19lcnJvcjsKLQotCQkJCS8qIFVwZGF0ZSB0aGUgc2tiLiAqLwotCQkJCWlmIChtZXJnZSkgewotCQkJCQlza2JfZnJhZ19zaXplX2FkZCgmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpIC0gMV0sIGNvcHkpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIGksIHBmcmFnLT5wYWdlLAotCQkJCQkJCSAgIHBmcmFnLT5vZmZzZXQsIGNvcHkpOwotCQkJCQlnZXRfcGFnZShwZnJhZy0+cGFnZSk7Ci0JCQkJfQotCQkJCXBmcmFnLT5vZmZzZXQgKz0gY29weTsKKwkJCQltZXJnZSA9IGZhbHNlOwogCQkJfQogCi0JCQlpZiAoIWNvcGllZCkKLQkJCQlUQ1BfU0tCX0NCKHNrYiktPnRjcF9mbGFncyAmPSB+VENQSERSX1BTSDsKKwkJCWNvcHkgPSBtaW5fdChpbnQsIGNvcHksIHBmcmFnLT5zaXplIC0gcGZyYWctPm9mZnNldCk7CiAKLQkJCXRwLT53cml0ZV9zZXEgKz0gY29weTsKLQkJCVRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSArPSBjb3B5OwotCQkJdGNwX3NrYl9wY291bnRfc2V0KHNrYiwgMCk7CisJCQlpZiAoIXNrX3dtZW1fc2NoZWR1bGUoc2ssIGNvcHkpKQorCQkJCWdvdG8gd2FpdF9mb3JfbWVtb3J5OwogCi0JCQlmcm9tICs9IGNvcHk7Ci0JCQljb3BpZWQgKz0gY29weTsKLQkJCWlmICgoc2VnbGVuIC09IGNvcHkpID09IDAgJiYgaW92bGVuID09IDApIHsKLQkJCQl0Y3BfdHhfdGltZXN0YW1wKHNrLCBza2IpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQlpZiAoc2tiLT5sZW4gPCBtYXggfHwgKGZsYWdzICYgTVNHX09PQikgfHwgdW5saWtlbHkodHAtPnJlcGFpcikpCi0JCQkJY29udGludWU7Ci0KLQkJCWlmIChmb3JjZWRfcHVzaCh0cCkpIHsKLQkJCQl0Y3BfbWFya19wdXNoKHRwLCBza2IpOwotCQkJCV9fdGNwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2ssIG1zc19ub3csIFRDUF9OQUdMRV9QVVNIKTsKLQkJCX0gZWxzZSBpZiAoc2tiID09IHRjcF9zZW5kX2hlYWQoc2spKQotCQkJCXRjcF9wdXNoX29uZShzaywgbXNzX25vdyk7Ci0JCQljb250aW51ZTsKLQotd2FpdF9mb3Jfc25kYnVmOgotCQkJc2V0X2JpdChTT0NLX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncyk7Ci13YWl0X2Zvcl9tZW1vcnk6Ci0JCQlpZiAoY29waWVkKQotCQkJCXRjcF9wdXNoKHNrLCBmbGFncyAmIH5NU0dfTU9SRSwgbXNzX25vdywKLQkJCQkJIFRDUF9OQUdMRV9QVVNILCBzaXplX2dvYWwpOwotCi0JCQlpZiAoKGVyciA9IHNrX3N0cmVhbV93YWl0X21lbW9yeShzaywgJnRpbWVvKSkgIT0gMCkKKwkJCWVyciA9IHNrYl9jb3B5X3RvX3BhZ2Vfbm9jYWNoZShzaywgJm1zZy0+bXNnX2l0ZXIsIHNrYiwKKwkJCQkJCSAgICAgICBwZnJhZy0+cGFnZSwKKwkJCQkJCSAgICAgICBwZnJhZy0+b2Zmc2V0LAorCQkJCQkJICAgICAgIGNvcHkpOworCQkJaWYgKGVycikKIAkJCQlnb3RvIGRvX2Vycm9yOwogCi0JCQltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmc2l6ZV9nb2FsLCBmbGFncyk7CisJCQkvKiBVcGRhdGUgdGhlIHNrYi4gKi8KKwkJCWlmIChtZXJnZSkgeworCQkJCXNrYl9mcmFnX3NpemVfYWRkKCZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2kgLSAxXSwgY29weSk7CisJCQl9IGVsc2UgeworCQkJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIGksIHBmcmFnLT5wYWdlLAorCQkJCQkJICAgcGZyYWctPm9mZnNldCwgY29weSk7CisJCQkJZ2V0X3BhZ2UocGZyYWctPnBhZ2UpOworCQkJfQorCQkJcGZyYWctPm9mZnNldCArPSBjb3B5OwogCQl9CisKKwkJaWYgKCFjb3BpZWQpCisJCQlUQ1BfU0tCX0NCKHNrYiktPnRjcF9mbGFncyAmPSB+VENQSERSX1BTSDsKKworCQl0cC0+d3JpdGVfc2VxICs9IGNvcHk7CisJCVRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSArPSBjb3B5OworCQl0Y3Bfc2tiX3Bjb3VudF9zZXQoc2tiLCAwKTsKKworCQljb3BpZWQgKz0gY29weTsKKwkJaWYgKCFpb3ZfaXRlcl9jb3VudCgmbXNnLT5tc2dfaXRlcikpIHsKKwkJCXRjcF90eF90aW1lc3RhbXAoc2ssIHNrYik7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWlmIChza2ItPmxlbiA8IG1heCB8fCAoZmxhZ3MgJiBNU0dfT09CKSB8fCB1bmxpa2VseSh0cC0+cmVwYWlyKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChmb3JjZWRfcHVzaCh0cCkpIHsKKwkJCXRjcF9tYXJrX3B1c2godHAsIHNrYik7CisJCQlfX3RjcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCBtc3Nfbm93LCBUQ1BfTkFHTEVfUFVTSCk7CisJCX0gZWxzZSBpZiAoc2tiID09IHRjcF9zZW5kX2hlYWQoc2spKQorCQkJdGNwX3B1c2hfb25lKHNrLCBtc3Nfbm93KTsKKwkJY29udGludWU7CisKK3dhaXRfZm9yX3NuZGJ1ZjoKKwkJc2V0X2JpdChTT0NLX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncyk7Cit3YWl0X2Zvcl9tZW1vcnk6CisJCWlmIChjb3BpZWQpCisJCQl0Y3BfcHVzaChzaywgZmxhZ3MgJiB+TVNHX01PUkUsIG1zc19ub3csCisJCQkJIFRDUF9OQUdMRV9QVVNILCBzaXplX2dvYWwpOworCisJCWlmICgoZXJyID0gc2tfc3RyZWFtX3dhaXRfbWVtb3J5KHNrLCAmdGltZW8pKSAhPSAwKQorCQkJZ290byBkb19lcnJvcjsKKworCQltc3Nfbm93ID0gdGNwX3NlbmRfbXNzKHNrLCAmc2l6ZV9nb2FsLCBmbGFncyk7CiAJfQogCiBvdXQ6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfYmljLmMgYi9uZXQvaXB2NC90Y3BfYmljLmMKaW5kZXggYmIzOTVkNC4uYzAzNzY0NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2JpYy5jCisrKyBiL25ldC9pcHY0L3RjcF9iaWMuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAJCXRjcF9zbG93X3N0YXJ0KHRwLCBhY2tlZCk7CiAJZWxzZSB7CiAJCWJpY3RjcF91cGRhdGUoY2EsIHRwLT5zbmRfY3duZCk7Ci0JCXRjcF9jb25nX2F2b2lkX2FpKHRwLCBjYS0+Y250KTsKKwkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIGNhLT5jbnQsIDEpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2NvbmcuYyBiL25ldC9pcHY0L3RjcF9jb25nLmMKaW5kZXggMjdlYWQwZC4uZDY5NDA4OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2NvbmcuYworKysgYi9uZXQvaXB2NC90Y3BfY29uZy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvamhhc2guaD4KICNpbmNsdWRlIDxuZXQvdGNwLmg+CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodGNwX2NvbmdfbGlzdF9sb2NrKTsKQEAgLTMxLDYgKzMyLDM0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggcmN1IGxvY2sgaGVsZCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y3BfY29uZ2VzdGlvbl9vcHMgKl9fdGNwX2NhX2ZpbmRfYXV0b2xvYWQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYSA9IHRjcF9jYV9maW5kKG5hbWUpOworI2lmZGVmIENPTkZJR19NT0RVTEVTCisJaWYgKCFjYSAmJiBjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXF1ZXN0X21vZHVsZSgidGNwXyVzIiwgbmFtZSk7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJY2EgPSB0Y3BfY2FfZmluZChuYW1lKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gY2E7Cit9CisKKy8qIFNpbXBsZSBsaW5lYXIgc2VhcmNoLCBub3QgbXVjaCBpbiBoZXJlLiAqLworc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqdGNwX2NhX2ZpbmRfa2V5KHUzMiBrZXkpCit7CisJc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqZTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsICZ0Y3BfY29uZ19saXN0LCBsaXN0KSB7CisJCWlmIChlLT5rZXkgPT0ga2V5KQorCQkJcmV0dXJuIGU7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKIC8qCiAgKiBBdHRhY2ggbmV3IGNvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0gdG8gdGhlIGxpc3QKICAqIG9mIGF2YWlsYWJsZSBvcHRpb25zLgpAQCAtNDUsOSArNzQsMTIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJY2EtPmtleSA9IGpoYXNoKGNhLT5uYW1lLCBzaXplb2YoY2EtPm5hbWUpLCBzdHJsZW4oY2EtPm5hbWUpKTsKKwogCXNwaW5fbG9jaygmdGNwX2NvbmdfbGlzdF9sb2NrKTsKLQlpZiAodGNwX2NhX2ZpbmQoY2EtPm5hbWUpKSB7Ci0JCXByX25vdGljZSgiJXMgYWxyZWFkeSByZWdpc3RlcmVkXG4iLCBjYS0+bmFtZSk7CisJaWYgKGNhLT5rZXkgPT0gVENQX0NBX1VOU1BFQyB8fCB0Y3BfY2FfZmluZF9rZXkoY2EtPmtleSkpIHsKKwkJcHJfbm90aWNlKCIlcyBhbHJlYWR5IHJlZ2lzdGVyZWQgb3Igbm9uLXVuaXF1ZSBrZXlcbiIsCisJCQkgIGNhLT5uYW1lKTsKIAkJcmV0ID0gLUVFWElTVDsKIAl9IGVsc2UgewogCQlsaXN0X2FkZF90YWlsX3JjdSgmY2EtPmxpc3QsICZ0Y3BfY29uZ19saXN0KTsKQEAgLTcwLDkgKzEwMiw1MCBAQAogCXNwaW5fbG9jaygmdGNwX2NvbmdfbGlzdF9sb2NrKTsKIAlsaXN0X2RlbF9yY3UoJmNhLT5saXN0KTsKIAlzcGluX3VubG9jaygmdGNwX2NvbmdfbGlzdF9sb2NrKTsKKworCS8qIFdhaXQgZm9yIG91dHN0YW5kaW5nIHJlYWRlcnMgdG8gY29tcGxldGUgYmVmb3JlIHRoZQorCSAqIG1vZHVsZSBnZXRzIHJlbW92ZWQgZW50aXJlbHkuCisJICoKKwkgKiBBIHRyeV9tb2R1bGVfZ2V0KCkgc2hvdWxkIGZhaWwgYnkgbm93IGFzIG91ciBtb2R1bGUgaXMKKwkgKiBpbiAiZ29pbmciIHN0YXRlIHNpbmNlIG5vIHJlZnMgYXJlIGhlbGQgYW55bW9yZSBhbmQKKwkgKiBtb2R1bGVfZXhpdCgpIGhhbmRsZXIgYmVpbmcgY2FsbGVkLgorCSAqLworCXN5bmNocm9uaXplX3JjdSgpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodGNwX3VucmVnaXN0ZXJfY29uZ2VzdGlvbl9jb250cm9sKTsKIAordTMyIHRjcF9jYV9nZXRfa2V5X2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTsKKwl1MzIga2V5OworCisJbWlnaHRfc2xlZXAoKTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwljYSA9IF9fdGNwX2NhX2ZpbmRfYXV0b2xvYWQobmFtZSk7CisJa2V5ID0gY2EgPyBjYS0+a2V5IDogVENQX0NBX1VOU1BFQzsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiBrZXk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfY2FfZ2V0X2tleV9ieV9uYW1lKTsKKworY2hhciAqdGNwX2NhX2dldF9uYW1lX2J5X2tleSh1MzIga2V5LCBjaGFyICpidWZmZXIpCit7CisJY29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7CisJY2hhciAqcmV0ID0gTlVMTDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwljYSA9IHRjcF9jYV9maW5kX2tleShrZXkpOworCWlmIChjYSkKKwkJcmV0ID0gc3RybmNweShidWZmZXIsIGNhLT5uYW1lLAorCQkJICAgICAgVENQX0NBX05BTUVfTUFYKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfY2FfZ2V0X25hbWVfYnlfa2V5KTsKKwogLyogQXNzaWduIGNob2ljZSBvZiBjb25nZXN0aW9uIGNvbnRyb2wuICovCiB2b2lkIHRjcF9hc3NpZ25fY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaykKIHsKQEAgLTEwNyw2ICsxODAsMTggQEAKIAkJaWNzay0+aWNza19jYV9vcHMtPmluaXQoc2spOwogfQogCitzdGF0aWMgdm9pZCB0Y3BfcmVpbml0X2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgY29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2EpCit7CisJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOworCisJdGNwX2NsZWFudXBfY29uZ2VzdGlvbl9jb250cm9sKHNrKTsKKwlpY3NrLT5pY3NrX2NhX29wcyA9IGNhOworCisJaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfQ0xPU0UgJiYgaWNzay0+aWNza19jYV9vcHMtPmluaXQpCisJCWljc2stPmljc2tfY2Ffb3BzLT5pbml0KHNrKTsKK30KKwogLyogTWFuYWdlIHJlZmNvdW50cyBvbiBzb2NrZXQgY2xvc2UuICovCiB2b2lkIHRjcF9jbGVhbnVwX2Nvbmdlc3Rpb25fY29udHJvbChzdHJ1Y3Qgc29jayAqc2spCiB7CkBAIC0yNDEsNDIgKzMyNiwyNiBAQAogaW50IHRjcF9zZXRfY29uZ2VzdGlvbl9jb250cm9sKHN0cnVjdCBzb2NrICpzaywgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2sgPSBpbmV0X2Nzayhzayk7Ci0Jc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7CisJY29uc3Qgc3RydWN0IHRjcF9jb25nZXN0aW9uX29wcyAqY2E7CiAJaW50IGVyciA9IDA7CiAKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JY2EgPSB0Y3BfY2FfZmluZChuYW1lKTsKKwlpZiAoaWNzay0+aWNza19jYV9kc3RfbG9ja2VkKQorCQlyZXR1cm4gLUVQRVJNOwogCi0JLyogbm8gY2hhbmdlIGFza2luZyBmb3IgZXhpc3RpbmcgdmFsdWUgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CisJY2EgPSBfX3RjcF9jYV9maW5kX2F1dG9sb2FkKG5hbWUpOworCS8qIE5vIGNoYW5nZSBhc2tpbmcgZm9yIGV4aXN0aW5nIHZhbHVlICovCiAJaWYgKGNhID09IGljc2stPmljc2tfY2Ffb3BzKQogCQlnb3RvIG91dDsKLQotI2lmZGVmIENPTkZJR19NT0RVTEVTCi0JLyogbm90IGZvdW5kIGF0dGVtcHQgdG8gYXV0b2xvYWQgbW9kdWxlICovCi0JaWYgKCFjYSAmJiBjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlyZXF1ZXN0X21vZHVsZSgidGNwXyVzIiwgbmFtZSk7Ci0JCXJjdV9yZWFkX2xvY2soKTsKLQkJY2EgPSB0Y3BfY2FfZmluZChuYW1lKTsKLQl9Ci0jZW5kaWYKIAlpZiAoIWNhKQogCQllcnIgPSAtRU5PRU5UOwotCiAJZWxzZSBpZiAoISgoY2EtPmZsYWdzICYgVENQX0NPTkdfTk9OX1JFU1RSSUNURUQpIHx8CiAJCSAgIG5zX2NhcGFibGUoc29ja19uZXQoc2spLT51c2VyX25zLCBDQVBfTkVUX0FETUlOKSkpCiAJCWVyciA9IC1FUEVSTTsKLQogCWVsc2UgaWYgKCF0cnlfbW9kdWxlX2dldChjYS0+b3duZXIpKQogCQllcnIgPSAtRUJVU1k7Ci0KLQllbHNlIHsKLQkJdGNwX2NsZWFudXBfY29uZ2VzdGlvbl9jb250cm9sKHNrKTsKLQkJaWNzay0+aWNza19jYV9vcHMgPSBjYTsKLQotCQlpZiAoc2stPnNrX3N0YXRlICE9IFRDUF9DTE9TRSAmJiBpY3NrLT5pY3NrX2NhX29wcy0+aW5pdCkKLQkJCWljc2stPmljc2tfY2Ffb3BzLT5pbml0KHNrKTsKLQl9CisJZWxzZQorCQl0Y3BfcmVpbml0X2Nvbmdlc3Rpb25fY29udHJvbChzaywgY2EpOwogIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gZXJyOwpAQCAtMjkxLDI2ICszNjAsMzIgQEAKICAqIEFCQyBjYXBzIE4gdG8gMi4gU2xvdyBzdGFydCBleGl0cyB3aGVuIGN3bmQgZ3Jvd3Mgb3ZlciBzc3RocmVzaCBhbmQKICAqIHJldHVybnMgdGhlIGxlZnRvdmVyIGFja3MgdG8gYWRqdXN0IGN3bmQgaW4gY29uZ2VzdGlvbiBhdm9pZGFuY2UgbW9kZS4KICAqLwotdm9pZCB0Y3Bfc2xvd19zdGFydChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgYWNrZWQpCit1MzIgdGNwX3Nsb3dfc3RhcnQoc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIGFja2VkKQogewogCXUzMiBjd25kID0gdHAtPnNuZF9jd25kICsgYWNrZWQ7CiAKIAlpZiAoY3duZCA+IHRwLT5zbmRfc3N0aHJlc2gpCiAJCWN3bmQgPSB0cC0+c25kX3NzdGhyZXNoICsgMTsKKwlhY2tlZCAtPSBjd25kIC0gdHAtPnNuZF9jd25kOwogCXRwLT5zbmRfY3duZCA9IG1pbihjd25kLCB0cC0+c25kX2N3bmRfY2xhbXApOworCisJcmV0dXJuIGFja2VkOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodGNwX3Nsb3dfc3RhcnQpOwogCi0vKiBJbiB0aGVvcnkgdGhpcyBpcyB0cC0+c25kX2N3bmQgKz0gMSAvIHRwLT5zbmRfY3duZCAob3IgYWx0ZXJuYXRpdmUgdykgKi8KLXZvaWQgdGNwX2NvbmdfYXZvaWRfYWkoc3RydWN0IHRjcF9zb2NrICp0cCwgdTMyIHcpCisvKiBJbiB0aGVvcnkgdGhpcyBpcyB0cC0+c25kX2N3bmQgKz0gMSAvIHRwLT5zbmRfY3duZCAob3IgYWx0ZXJuYXRpdmUgdyksCisgKiBmb3IgZXZlcnkgcGFja2V0IHRoYXQgd2FzIEFDS2VkLgorICovCit2b2lkIHRjcF9jb25nX2F2b2lkX2FpKHN0cnVjdCB0Y3Bfc29jayAqdHAsIHUzMiB3LCB1MzIgYWNrZWQpCiB7CisJdHAtPnNuZF9jd25kX2NudCArPSBhY2tlZDsKIAlpZiAodHAtPnNuZF9jd25kX2NudCA+PSB3KSB7Ci0JCWlmICh0cC0+c25kX2N3bmQgPCB0cC0+c25kX2N3bmRfY2xhbXApCi0JCQl0cC0+c25kX2N3bmQrKzsKLQkJdHAtPnNuZF9jd25kX2NudCA9IDA7Ci0JfSBlbHNlIHsKLQkJdHAtPnNuZF9jd25kX2NudCsrOworCQl1MzIgZGVsdGEgPSB0cC0+c25kX2N3bmRfY250IC8gdzsKKworCQl0cC0+c25kX2N3bmRfY250IC09IGRlbHRhICogdzsKKwkJdHAtPnNuZF9jd25kICs9IGRlbHRhOwogCX0KKwl0cC0+c25kX2N3bmQgPSBtaW4odHAtPnNuZF9jd25kLCB0cC0+c25kX2N3bmRfY2xhbXApOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodGNwX2NvbmdfYXZvaWRfYWkpOwogCkBAIC0zMjksMTEgKzQwNCwxMyBAQAogCQlyZXR1cm47CiAKIAkvKiBJbiAic2FmZSIgYXJlYSwgaW5jcmVhc2UuICovCi0JaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKQotCQl0Y3Bfc2xvd19zdGFydCh0cCwgYWNrZWQpOworCWlmICh0cC0+c25kX2N3bmQgPD0gdHAtPnNuZF9zc3RocmVzaCkgeworCQlhY2tlZCA9IHRjcF9zbG93X3N0YXJ0KHRwLCBhY2tlZCk7CisJCWlmICghYWNrZWQpCisJCQlyZXR1cm47CisJfQogCS8qIEluIGRhbmdlcm91cyBhcmVhLCBpbmNyZWFzZSBzbG93bHkuICovCi0JZWxzZQotCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgdHAtPnNuZF9jd25kKTsKKwl0Y3BfY29uZ19hdm9pZF9haSh0cCwgdHAtPnNuZF9jd25kLCBhY2tlZCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfcmVub19jb25nX2F2b2lkKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2N1YmljLmMgYi9uZXQvaXB2NC90Y3BfY3ViaWMuYwppbmRleCA2YjYwMDI0Li40YjI3NmQxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY3ViaWMuYworKysgYi9uZXQvaXB2NC90Y3BfY3ViaWMuYwpAQCAtOTMsOSArOTMsNyBAQAogCXUzMgllcG9jaF9zdGFydDsJLyogYmVnaW5uaW5nIG9mIGFuIGVwb2NoICovCiAJdTMyCWFja19jbnQ7CS8qIG51bWJlciBvZiBhY2tzICovCiAJdTMyCXRjcF9jd25kOwkvKiBlc3RpbWF0ZWQgdGNwIGN3bmQgKi8KLSNkZWZpbmUgQUNLX1JBVElPX1NISUZUCTQKLSNkZWZpbmUgQUNLX1JBVElPX0xJTUlUICgzMnUgPDwgQUNLX1JBVElPX1NISUZUKQotCXUxNglkZWxheWVkX2FjazsJLyogZXN0aW1hdGUgdGhlIHJhdGlvIG9mIFBhY2tldHMvQUNLcyA8PCA0ICovCisJdTE2CXVudXNlZDsKIAl1OAlzYW1wbGVfY250OwkvKiBudW1iZXIgb2Ygc2FtcGxlcyB0byBkZWNpZGUgY3Vycl9ydHQgKi8KIAl1OAlmb3VuZDsJCS8qIHRoZSBleGl0IHBvaW50IGlzIGZvdW5kPyAqLwogCXUzMglyb3VuZF9zdGFydDsJLyogYmVnaW5uaW5nIG9mIGVhY2ggcm91bmQgKi8KQEAgLTExNCw3ICsxMTIsNiBAQAogCWNhLT5iaWNfSyA9IDA7CiAJY2EtPmRlbGF5X21pbiA9IDA7CiAJY2EtPmVwb2NoX3N0YXJ0ID0gMDsKLQljYS0+ZGVsYXllZF9hY2sgPSAyIDw8IEFDS19SQVRJT19TSElGVDsKIAljYS0+YWNrX2NudCA9IDA7CiAJY2EtPnRjcF9jd25kID0gMDsKIAljYS0+Zm91bmQgPSAwOwpAQCAtMjA1LDIzICsyMDIsMzAgQEAKIC8qCiAgKiBDb21wdXRlIGNvbmdlc3Rpb24gd2luZG93IHRvIHVzZS4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIGJpY3RjcF91cGRhdGUoc3RydWN0IGJpY3RjcCAqY2EsIHUzMiBjd25kKQorc3RhdGljIGlubGluZSB2b2lkIGJpY3RjcF91cGRhdGUoc3RydWN0IGJpY3RjcCAqY2EsIHUzMiBjd25kLCB1MzIgYWNrZWQpCiB7CiAJdTMyIGRlbHRhLCBiaWNfdGFyZ2V0LCBtYXhfY250OwogCXU2NCBvZmZzLCB0OwogCi0JY2EtPmFja19jbnQrKzsJLyogY291bnQgdGhlIG51bWJlciBvZiBBQ0tzICovCisJY2EtPmFja19jbnQgKz0gYWNrZWQ7CS8qIGNvdW50IHRoZSBudW1iZXIgb2YgQUNLZWQgcGFja2V0cyAqLwogCiAJaWYgKGNhLT5sYXN0X2N3bmQgPT0gY3duZCAmJgogCSAgICAoczMyKSh0Y3BfdGltZV9zdGFtcCAtIGNhLT5sYXN0X3RpbWUpIDw9IEhaIC8gMzIpCiAJCXJldHVybjsKIAorCS8qIFRoZSBDVUJJQyBmdW5jdGlvbiBjYW4gdXBkYXRlIGNhLT5jbnQgYXQgbW9zdCBvbmNlIHBlciBqaWZmeS4KKwkgKiBPbiBhbGwgY3duZCByZWR1Y3Rpb24gZXZlbnRzLCBjYS0+ZXBvY2hfc3RhcnQgaXMgc2V0IHRvIDAsCisJICogd2hpY2ggd2lsbCBmb3JjZSBhIHJlY2FsY3VsYXRpb24gb2YgY2EtPmNudC4KKwkgKi8KKwlpZiAoY2EtPmVwb2NoX3N0YXJ0ICYmIHRjcF90aW1lX3N0YW1wID09IGNhLT5sYXN0X3RpbWUpCisJCWdvdG8gdGNwX2ZyaWVuZGxpbmVzczsKKwogCWNhLT5sYXN0X2N3bmQgPSBjd25kOwogCWNhLT5sYXN0X3RpbWUgPSB0Y3BfdGltZV9zdGFtcDsKIAogCWlmIChjYS0+ZXBvY2hfc3RhcnQgPT0gMCkgewogCQljYS0+ZXBvY2hfc3RhcnQgPSB0Y3BfdGltZV9zdGFtcDsJLyogcmVjb3JkIGJlZ2lubmluZyAqLwotCQljYS0+YWNrX2NudCA9IDE7CQkJLyogc3RhcnQgY291bnRpbmcgKi8KKwkJY2EtPmFja19jbnQgPSBhY2tlZDsJCQkvKiBzdGFydCBjb3VudGluZyAqLwogCQljYS0+dGNwX2N3bmQgPSBjd25kOwkJCS8qIHN5biB3aXRoIGN1YmljICovCiAKIAkJaWYgKGNhLT5sYXN0X21heF9jd25kIDw9IGN3bmQpIHsKQEAgLTI4Myw2ICsyODcsNyBAQAogCWlmIChjYS0+bGFzdF9tYXhfY3duZCA9PSAwICYmIGNhLT5jbnQgPiAyMCkKIAkJY2EtPmNudCA9IDIwOwkvKiBpbmNyZWFzZSBjd25kIDUlIHBlciBSVFQgKi8KIAordGNwX2ZyaWVuZGxpbmVzczoKIAkvKiBUQ1AgRnJpZW5kbHkgKi8KIAlpZiAodGNwX2ZyaWVuZGxpbmVzcykgewogCQl1MzIgc2NhbGUgPSBiZXRhX3NjYWxlOwpAQCAtMzAxLDcgKzMwNiw2IEBACiAJCX0KIAl9CiAKLQljYS0+Y250ID0gKGNhLT5jbnQgPDwgQUNLX1JBVElPX1NISUZUKSAvIGNhLT5kZWxheWVkX2FjazsKIAlpZiAoY2EtPmNudCA9PSAwKQkJCS8qIGNhbm5vdCBiZSB6ZXJvICovCiAJCWNhLT5jbnQgPSAxOwogfQpAQCAtMzE3LDExICszMjEsMTIgQEAKIAlpZiAodHAtPnNuZF9jd25kIDw9IHRwLT5zbmRfc3N0aHJlc2gpIHsKIAkJaWYgKGh5c3RhcnQgJiYgYWZ0ZXIoYWNrLCBjYS0+ZW5kX3NlcSkpCiAJCQliaWN0Y3BfaHlzdGFydF9yZXNldChzayk7Ci0JCXRjcF9zbG93X3N0YXJ0KHRwLCBhY2tlZCk7Ci0JfSBlbHNlIHsKLQkJYmljdGNwX3VwZGF0ZShjYSwgdHAtPnNuZF9jd25kKTsKLQkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIGNhLT5jbnQpOworCQlhY2tlZCA9IHRjcF9zbG93X3N0YXJ0KHRwLCBhY2tlZCk7CisJCWlmICghYWNrZWQpCisJCQlyZXR1cm47CiAJfQorCWJpY3RjcF91cGRhdGUoY2EsIHRwLT5zbmRfY3duZCwgYWNrZWQpOworCXRjcF9jb25nX2F2b2lkX2FpKHRwLCBjYS0+Y250LCBhY2tlZCk7CiB9CiAKIHN0YXRpYyB1MzIgYmljdGNwX3JlY2FsY19zc3RocmVzaChzdHJ1Y3Qgc29jayAqc2spCkBAIC00MTEsMjAgKzQxNiwxMCBAQAogICovCiBzdGF0aWMgdm9pZCBiaWN0Y3BfYWNrZWQoc3RydWN0IHNvY2sgKnNrLCB1MzIgY250LCBzMzIgcnR0X3VzKQogewotCWNvbnN0IHN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKIAljb25zdCBzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAlzdHJ1Y3QgYmljdGNwICpjYSA9IGluZXRfY3NrX2NhKHNrKTsKIAl1MzIgZGVsYXk7CiAKLQlpZiAoaWNzay0+aWNza19jYV9zdGF0ZSA9PSBUQ1BfQ0FfT3BlbikgewotCQl1MzIgcmF0aW8gPSBjYS0+ZGVsYXllZF9hY2s7Ci0KLQkJcmF0aW8gLT0gY2EtPmRlbGF5ZWRfYWNrID4+IEFDS19SQVRJT19TSElGVDsKLQkJcmF0aW8gKz0gY250OwotCi0JCWNhLT5kZWxheWVkX2FjayA9IGNsYW1wKHJhdGlvLCAxVSwgQUNLX1JBVElPX0xJTUlUKTsKLQl9Ci0KIAkvKiBTb21lIGNhbGxzIGFyZSBmb3IgZHVwbGljYXRlcyB3aXRob3V0IHRpbWV0YW1wcyAqLwogCWlmIChydHRfdXMgPCAwKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfZmFzdG9wZW4uYyBiL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jCmluZGV4IDgxNWM4NWUuLjUzZGIyYzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jCisrKyBiL25ldC9pcHY0L3RjcF9mYXN0b3Blbi5jCkBAIC0yNTUsNiArMjU1LDkgQEAKIAlzdHJ1Y3QgdGNwX2Zhc3RvcGVuX2Nvb2tpZSB2YWxpZF9mb2MgPSB7IC5sZW4gPSAtMSB9OwogCWJvb2wgc3luX2RhdGEgPSBUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEgIT0gVENQX1NLQl9DQihza2IpLT5zZXEgKyAxOwogCisJaWYgKGZvYy0+bGVuID09IDApIC8qIENsaWVudCByZXF1ZXN0cyBhIGNvb2tpZSAqLworCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUEZBU1RPUEVOQ09PS0lFUkVRRCk7CisKIAlpZiAoISgoc3lzY3RsX3RjcF9mYXN0b3BlbiAmIFRGT19TRVJWRVJfRU5BQkxFKSAmJgogCSAgICAgIChzeW5fZGF0YSB8fCBmb2MtPmxlbiA+PSAwKSAmJgogCSAgICAgIHRjcF9mYXN0b3Blbl9xdWV1ZV9jaGVjayhzaykpKSB7CkBAIC0yNjUsNyArMjY4LDggQEAKIAlpZiAoc3luX2RhdGEgJiYgKHN5c2N0bF90Y3BfZmFzdG9wZW4gJiBURk9fU0VSVkVSX0NPT0tJRV9OT1RfUkVRRCkpCiAJCWdvdG8gZmFzdG9wZW47CiAKLQlpZiAodGNwX2Zhc3RvcGVuX2Nvb2tpZV9nZW4ocmVxLCBza2IsICZ2YWxpZF9mb2MpICYmCisJaWYgKGZvYy0+bGVuID49IDAgJiYgIC8qIENsaWVudCBwcmVzZW50cyBvciByZXF1ZXN0cyBhIGNvb2tpZSAqLworCSAgICB0Y3BfZmFzdG9wZW5fY29va2llX2dlbihyZXEsIHNrYiwgJnZhbGlkX2ZvYykgJiYKIAkgICAgZm9jLT5sZW4gPT0gVENQX0ZBU1RPUEVOX0NPT0tJRV9TSVpFICYmCiAJICAgIGZvYy0+bGVuID09IHZhbGlkX2ZvYy5sZW4gJiYKIAkgICAgIW1lbWNtcChmb2MtPnZhbCwgdmFsaWRfZm9jLnZhbCwgZm9jLT5sZW4pKSB7CkBAIC0yODQsMTEgKzI4OCwxMCBAQAogCQkJCQkgTElOVVhfTUlCX1RDUEZBU1RPUEVOUEFTU0lWRSk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQotCX0KKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksIExJTlVYX01JQl9UQ1BGQVNUT1BFTlBBU1NJVkVGQUlMKTsKKwl9IGVsc2UgaWYgKGZvYy0+bGVuID4gMCkgLyogQ2xpZW50IHByZXNlbnRzIGFuIGludmFsaWQgY29va2llICovCisJCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQRkFTVE9QRU5QQVNTSVZFRkFJTCk7CiAKLQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgZm9jLT5sZW4gPwotCQkJIExJTlVYX01JQl9UQ1BGQVNUT1BFTlBBU1NJVkVGQUlMIDoKLQkJCSBMSU5VWF9NSUJfVENQRkFTVE9QRU5DT09LSUVSRVFEKTsKIAkqZm9jID0gdmFsaWRfZm9jOwogCXJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMDc1YWI0ZC4uOGZkZDI3YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTEwMCw2ICsxMDAsNyBAQAogCiBpbnQgc3lzY3RsX3RjcF9tb2RlcmF0ZV9yY3ZidWYgX19yZWFkX21vc3RseSA9IDE7CiBpbnQgc3lzY3RsX3RjcF9lYXJseV9yZXRyYW5zIF9fcmVhZF9tb3N0bHkgPSAzOworaW50IHN5c2N0bF90Y3BfaW52YWxpZF9yYXRlbGltaXQgX19yZWFkX21vc3RseSA9IEhaLzI7CiAKICNkZWZpbmUgRkxBR19EQVRBCQkweDAxIC8qIEluY29taW5nIGZyYW1lIGNvbnRhaW5lZCBkYXRhLgkJKi8KICNkZWZpbmUgRkxBR19XSU5fVVBEQVRFCQkweDAyIC8qIEluY29taW5nIEFDSyB3YXMgYSB3aW5kb3cgdXBkYXRlLgkqLwpAQCAtMzE4Myw4ICszMTg0LDEwIEBACiAKIAkJdHAtPmZhY2tldHNfb3V0IC09IG1pbihwa3RzX2Fja2VkLCB0cC0+ZmFja2V0c19vdXQpOwogCi0JCWlmIChjYV9vcHMtPnBrdHNfYWNrZWQpCi0JCQljYV9vcHMtPnBrdHNfYWNrZWQoc2ssIHBrdHNfYWNrZWQsIGNhX3NlcV9ydHRfdXMpOworCQlpZiAoY2Ffb3BzLT5wa3RzX2Fja2VkKSB7CisJCQlsb25nIHJ0dF91cyA9IG1pbl90KHVsb25nLCBjYV9zZXFfcnR0X3VzLCBzYWNrX3J0dF91cyk7CisJCQljYV9vcHMtPnBrdHNfYWNrZWQoc2ssIHBrdHNfYWNrZWQsIHJ0dF91cyk7CisJCX0KIAogCX0gZWxzZSBpZiAoc2tiICYmIHJ0dF91cGRhdGUgJiYgc2Fja19ydHRfdXMgPj0gMCAmJgogCQkgICBzYWNrX3J0dF91cyA+IHNrYl9tc3RhbXBfdXNfZGVsdGEoJm5vdywgJnNrYi0+c2tiX21zdGFtcCkpIHsKQEAgLTMzMTksMTMgKzMzMjIsMjIgQEAKIH0KIAogLyogUkZDIDU5NjEgNyBbQUNLIFRocm90dGxpbmddICovCi1zdGF0aWMgdm9pZCB0Y3Bfc2VuZF9jaGFsbGVuZ2VfYWNrKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyB2b2lkIHRjcF9zZW5kX2NoYWxsZW5nZV9hY2soc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCS8qIHVucHJvdGVjdGVkIHZhcnMsIHdlIGRvbnQgY2FyZSBvZiBvdmVyd3JpdGVzICovCiAJc3RhdGljIHUzMiBjaGFsbGVuZ2VfdGltZXN0YW1wOwogCXN0YXRpYyB1bnNpZ25lZCBpbnQgY2hhbGxlbmdlX2NvdW50OwotCXUzMiBub3cgPSBqaWZmaWVzIC8gSFo7CisJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisJdTMyIG5vdzsKIAorCS8qIEZpcnN0IGNoZWNrIG91ciBwZXItc29ja2V0IGR1cGFjayByYXRlIGxpbWl0LiAqLworCWlmICh0Y3Bfb293X3JhdGVfbGltaXRlZChzb2NrX25ldChzayksIHNrYiwKKwkJCQkgTElOVVhfTUlCX1RDUEFDS1NLSVBQRURDSEFMTEVOR0UsCisJCQkJICZ0cC0+bGFzdF9vb3dfYWNrX3RpbWUpKQorCQlyZXR1cm47CisKKwkvKiBUaGVuIGNoZWNrIHRoZSBjaGVjayBob3N0LXdpZGUgUkZDIDU5NjEgcmF0ZSBsaW1pdC4gKi8KKwlub3cgPSBqaWZmaWVzIC8gSFo7CiAJaWYgKG5vdyAhPSBjaGFsbGVuZ2VfdGltZXN0YW1wKSB7CiAJCWNoYWxsZW5nZV90aW1lc3RhbXAgPSBub3c7CiAJCWNoYWxsZW5nZV9jb3VudCA9IDA7CkBAIC0zMzU4LDM0ICszMzcwLDM0IEBACiB9CiAKIC8qIFRoaXMgcm91dGluZSBkZWFscyB3aXRoIGFja3MgZHVyaW5nIGEgVExQIGVwaXNvZGUuCisgKiBXZSBtYXJrIHRoZSBlbmQgb2YgYSBUTFAgZXBpc29kZSBvbiByZWNlaXZpbmcgVExQIGR1cGFjayBvciB3aGVuCisgKiBhY2sgaXMgYWZ0ZXIgdGxwX2hpZ2hfc2VxLgogICogUmVmOiBsb3NzIGRldGVjdGlvbiBhbGdvcml0aG0gaW4gZHJhZnQtZHVra2lwYXRpLXRjcG0tdGNwLWxvc3MtcHJvYmUuCiAgKi8KIHN0YXRpYyB2b2lkIHRjcF9wcm9jZXNzX3RscF9hY2soc3RydWN0IHNvY2sgKnNrLCB1MzIgYWNrLCBpbnQgZmxhZykKIHsKIAlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQlib29sIGlzX3RscF9kdXBhY2sgPSAoYWNrID09IHRwLT50bHBfaGlnaF9zZXEpICYmCi0JCQkgICAgICEoZmxhZyAmIChGTEFHX1NORF9VTkFfQURWQU5DRUQgfAotCQkJCSAgICAgICBGTEFHX05PVF9EVVAgfCBGTEFHX0RBVEFfU0FDS0VEKSk7CiAKLQkvKiBNYXJrIHRoZSBlbmQgb2YgVExQIGVwaXNvZGUgb24gcmVjZWl2aW5nIFRMUCBkdXBhY2sgb3Igd2hlbgotCSAqIGFjayBpcyBhZnRlciB0bHBfaGlnaF9zZXEuCi0JICovCi0JaWYgKGlzX3RscF9kdXBhY2spIHsKLQkJdHAtPnRscF9oaWdoX3NlcSA9IDA7CisJaWYgKGJlZm9yZShhY2ssIHRwLT50bHBfaGlnaF9zZXEpKQogCQlyZXR1cm47Ci0JfQogCi0JaWYgKGFmdGVyKGFjaywgdHAtPnRscF9oaWdoX3NlcSkpIHsKKwlpZiAoZmxhZyAmIEZMQUdfRFNBQ0tJTkdfQUNLKSB7CisJCS8qIFRoaXMgRFNBQ0sgbWVhbnMgb3JpZ2luYWwgYW5kIFRMUCBwcm9iZSBhcnJpdmVkOyBubyBsb3NzICovCiAJCXRwLT50bHBfaGlnaF9zZXEgPSAwOwotCQkvKiBEb24ndCByZWR1Y2UgY3duZCBpZiBEU0FDSyBhcnJpdmVzIGZvciBUTFAgcmV0cmFucy4gKi8KLQkJaWYgKCEoZmxhZyAmIEZMQUdfRFNBQ0tJTkdfQUNLKSkgewotCQkJdGNwX2luaXRfY3duZF9yZWR1Y3Rpb24oc2spOwotCQkJdGNwX3NldF9jYV9zdGF0ZShzaywgVENQX0NBX0NXUik7Ci0JCQl0Y3BfZW5kX2N3bmRfcmVkdWN0aW9uKHNrKTsKLQkJCXRjcF90cnlfa2VlcF9vcGVuKHNrKTsKLQkJCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLAotCQkJCQkgTElOVVhfTUlCX1RDUExPU1NQUk9CRVJFQ09WRVJZKTsKLQkJfQorCX0gZWxzZSBpZiAoYWZ0ZXIoYWNrLCB0cC0+dGxwX2hpZ2hfc2VxKSkgeworCQkvKiBBQ0sgYWR2YW5jZXM6IHRoZXJlIHdhcyBhIGxvc3MsIHNvIHJlZHVjZSBjd25kLiBSZXNldAorCQkgKiB0bHBfaGlnaF9zZXEgaW4gdGNwX2luaXRfY3duZF9yZWR1Y3Rpb24oKQorCQkgKi8KKwkJdGNwX2luaXRfY3duZF9yZWR1Y3Rpb24oc2spOworCQl0Y3Bfc2V0X2NhX3N0YXRlKHNrLCBUQ1BfQ0FfQ1dSKTsKKwkJdGNwX2VuZF9jd25kX3JlZHVjdGlvbihzayk7CisJCXRjcF90cnlfa2VlcF9vcGVuKHNrKTsKKwkJTkVUX0lOQ19TVEFUU19CSChzb2NrX25ldChzayksCisJCQkJIExJTlVYX01JQl9UQ1BMT1NTUFJPQkVSRUNPVkVSWSk7CisJfSBlbHNlIGlmICghKGZsYWcgJiAoRkxBR19TTkRfVU5BX0FEVkFOQ0VEIHwKKwkJCSAgICAgRkxBR19OT1RfRFVQIHwgRkxBR19EQVRBX1NBQ0tFRCkpKSB7CisJCS8qIFB1cmUgZHVwYWNrOiBvcmlnaW5hbCBhbmQgVExQIHByb2JlIGFycml2ZWQ7IG5vIGxvc3MgKi8KKwkJdHAtPnRscF9oaWdoX3NlcSA9IDA7CiAJfQogfQogCkBAIC0zNDIxLDcgKzM0MzMsNyBAQAogCWlmIChiZWZvcmUoYWNrLCBwcmlvcl9zbmRfdW5hKSkgewogCQkvKiBSRkMgNTk2MSA1LjIgW0JsaW5kIERhdGEgSW5qZWN0aW9uIEF0dGFja10uW01pdGlnYXRpb25dICovCiAJCWlmIChiZWZvcmUoYWNrLCBwcmlvcl9zbmRfdW5hIC0gdHAtPm1heF93aW5kb3cpKSB7Ci0JCQl0Y3Bfc2VuZF9jaGFsbGVuZ2VfYWNrKHNrKTsKKwkJCXRjcF9zZW5kX2NoYWxsZW5nZV9hY2soc2ssIHNrYik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJZ290byBvbGRfYWNrOwpAQCAtNDk5MCw3ICs1MDAyLDEwIEBACiAJICAgIHRjcF9wYXdzX2Rpc2NhcmQoc2ssIHNrYikpIHsKIAkJaWYgKCF0aC0+cnN0KSB7CiAJCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1BBV1NFU1RBQlJFSkVDVEVEKTsKLQkJCXRjcF9zZW5kX2R1cGFjayhzaywgc2tiKTsKKwkJCWlmICghdGNwX29vd19yYXRlX2xpbWl0ZWQoc29ja19uZXQoc2spLCBza2IsCisJCQkJCQkgIExJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEUEFXUywKKwkJCQkJCSAgJnRwLT5sYXN0X29vd19hY2tfdGltZSkpCisJCQkJdGNwX3NlbmRfZHVwYWNrKHNrLCBza2IpOwogCQkJZ290byBkaXNjYXJkOwogCQl9CiAJCS8qIFJlc2V0IGlzIGFjY2VwdGVkIGV2ZW4gaWYgaXQgZGlkIG5vdCBwYXNzIFBBV1MuICovCkBAIC01MDA3LDcgKzUwMjIsMTAgQEAKIAkJaWYgKCF0aC0+cnN0KSB7CiAJCQlpZiAodGgtPnN5bikKIAkJCQlnb3RvIHN5bl9jaGFsbGVuZ2U7Ci0JCQl0Y3Bfc2VuZF9kdXBhY2soc2ssIHNrYik7CisJCQlpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHNvY2tfbmV0KHNrKSwgc2tiLAorCQkJCQkJICBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFNFUSwKKwkJCQkJCSAgJnRwLT5sYXN0X29vd19hY2tfdGltZSkpCisJCQkJdGNwX3NlbmRfZHVwYWNrKHNrLCBza2IpOwogCQl9CiAJCWdvdG8gZGlzY2FyZDsKIAl9CkBAIC01MDIzLDcgKzUwNDEsNyBAQAogCQlpZiAoVENQX1NLQl9DQihza2IpLT5zZXEgPT0gdHAtPnJjdl9ueHQpCiAJCQl0Y3BfcmVzZXQoc2spOwogCQllbHNlCi0JCQl0Y3Bfc2VuZF9jaGFsbGVuZ2VfYWNrKHNrKTsKKwkJCXRjcF9zZW5kX2NoYWxsZW5nZV9hY2soc2ssIHNrYik7CiAJCWdvdG8gZGlzY2FyZDsKIAl9CiAKQEAgLTUwMzcsNyArNTA1NSw3IEBACiAJCWlmIChzeW5faW5lcnIpCiAJCQlUQ1BfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgVENQX01JQl9JTkVSUlMpOwogCQlORVRfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgTElOVVhfTUlCX1RDUFNZTkNIQUxMRU5HRSk7Ci0JCXRjcF9zZW5kX2NoYWxsZW5nZV9hY2soc2spOworCQl0Y3Bfc2VuZF9jaGFsbGVuZ2VfYWNrKHNrLCBza2IpOwogCQlnb3RvIGRpc2NhcmQ7CiAJfQogCkBAIC01ODcwLDEwICs1ODg4LDkgQEAKICAqIFRDUCBFQ04gbmVnb3RpYXRpb24uCiAgKgogICogRXhjZXB0aW9uOiB0Y3BfY2Egd2FudHMgRUNOLiBUaGlzIGlzIHJlcXVpcmVkIGZvciBEQ1RDUAotICogY29uZ2VzdGlvbiBjb250cm9sOyBpdCByZXF1aXJlcyBzZXR0aW5nIEVDVCBvbiBhbGwgcGFja2V0cywKLSAqIGluY2x1ZGluZyBTWU4uIFdlIGludmVyc2UgdGhlIHRlc3QgaW4gdGhpcyBjYXNlOiBJZiBvdXIKLSAqIGxvY2FsIHNvY2tldCB3YW50cyBFQ04sIGJ1dCBwZWVyIG9ubHkgc2V0IGVjZS9jd3IgKGJ1dCBub3QKLSAqIEVDVCBpbiBJUCBoZWFkZXIpIGl0cyBwcm9iYWJseSBhIG5vbi1EQ1RDUCBhd2FyZSBzZW5kZXIuCisgKiBjb25nZXN0aW9uIGNvbnRyb2w6IExpbnV4IERDVENQIGFzc2VydHMgRUNUIG9uIGFsbCBwYWNrZXRzLAorICogaW5jbHVkaW5nIFNZTiwgd2hpY2ggaXMgbW9zdCBvcHRpbWFsIHNvbHV0aW9uOyBob3dldmVyLAorICogb3RoZXJzLCBzdWNoIGFzIEZyZWVCU0QgZG8gbm90LgogICovCiBzdGF0aWMgdm9pZCB0Y3BfZWNuX2NyZWF0ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKIAkJCQkgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtNTg4MywxOCArNTkwMCwxNSBAQAogCWNvbnN0IHN0cnVjdCB0Y3BoZHIgKnRoID0gdGNwX2hkcihza2IpOwogCWNvbnN0IHN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGxpc3Rlbl9zayk7CiAJYm9vbCB0aF9lY24gPSB0aC0+ZWNlICYmIHRoLT5jd3I7Ci0JYm9vbCBlY3QsIG5lZWRfZWNuLCBlY25fb2s7CisJYm9vbCBlY3QsIGVjbl9vazsKIAogCWlmICghdGhfZWNuKQogCQlyZXR1cm47CiAKIAllY3QgPSAhSU5FVF9FQ05faXNfbm90X2VjdChUQ1BfU0tCX0NCKHNrYiktPmlwX2RzZmllbGQpOwotCW5lZWRfZWNuID0gdGNwX2NhX25lZWRzX2VjbihsaXN0ZW5fc2spOwogCWVjbl9vayA9IG5ldC0+aXB2NC5zeXNjdGxfdGNwX2VjbiB8fCBkc3RfZmVhdHVyZShkc3QsIFJUQVhfRkVBVFVSRV9FQ04pOwogCi0JaWYgKCFlY3QgJiYgIW5lZWRfZWNuICYmIGVjbl9vaykKLQkJaW5ldF9yc2socmVxKS0+ZWNuX29rID0gMTsKLQllbHNlIGlmIChlY3QgJiYgbmVlZF9lY24pCisJaWYgKCghZWN0ICYmIGVjbl9vaykgfHwgdGNwX2NhX25lZWRzX2VjbihsaXN0ZW5fc2spKQogCQlpbmV0X3JzayhyZXEpLT5lY25fb2sgPSAxOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCBhM2Y3MmQ3Li41YTJkZmVkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTY4Myw3ICs2ODMsOCBAQAogCQlhcmcuYm91bmRfZGV2X2lmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKIAogCWFyZy50b3MgPSBpcF9oZHIoc2tiKS0+dG9zOwotCWlwX3NlbmRfdW5pY2FzdF9yZXBseShuZXQsIHNrYiwgJlRDUF9TS0JfQ0Ioc2tiKS0+aGVhZGVyLmg0Lm9wdCwKKwlpcF9zZW5kX3VuaWNhc3RfcmVwbHkoKnRoaXNfY3B1X3B0cihuZXQtPmlwdjQudGNwX3NrKSwKKwkJCSAgICAgIHNrYiwgJlRDUF9TS0JfQ0Ioc2tiKS0+aGVhZGVyLmg0Lm9wdCwKIAkJCSAgICAgIGlwX2hkcihza2IpLT5zYWRkciwgaXBfaGRyKHNrYiktPmRhZGRyLAogCQkJICAgICAgJmFyZywgYXJnLmlvdlswXS5pb3ZfbGVuKTsKIApAQCAtNzY3LDcgKzc2OCw4IEBACiAJaWYgKG9pZikKIAkJYXJnLmJvdW5kX2Rldl9pZiA9IG9pZjsKIAlhcmcudG9zID0gdG9zOwotCWlwX3NlbmRfdW5pY2FzdF9yZXBseShuZXQsIHNrYiwgJlRDUF9TS0JfQ0Ioc2tiKS0+aGVhZGVyLmg0Lm9wdCwKKwlpcF9zZW5kX3VuaWNhc3RfcmVwbHkoKnRoaXNfY3B1X3B0cihuZXQtPmlwdjQudGNwX3NrKSwKKwkJCSAgICAgIHNrYiwgJlRDUF9TS0JfQ0Ioc2tiKS0+aGVhZGVyLmg0Lm9wdCwKIAkJCSAgICAgIGlwX2hkcihza2IpLT5zYWRkciwgaXBfaGRyKHNrYiktPmRhZGRyLAogCQkJICAgICAgJmFyZywgYXJnLmlvdlswXS5pb3ZfbGVuKTsKIApAQCAtMTM0MCw2ICsxMzQyLDggQEAKIAl9CiAJc2tfc2V0dXBfY2FwcyhuZXdzaywgZHN0KTsKIAorCXRjcF9jYV9vcGVucmVxX2NoaWxkKG5ld3NrLCBkc3QpOworCiAJdGNwX3N5bmNfbXNzKG5ld3NrLCBkc3RfbXR1KGRzdCkpOwogCW5ld3RwLT5hZHZtc3MgPSBkc3RfbWV0cmljX2Fkdm1zcyhkc3QpOwogCWlmICh0Y3Bfc2soc2spLT5yeF9vcHQudXNlcl9tc3MgJiYKQEAgLTI0MjgsMTQgKzI0MzIsNDAgQEAKIH07CiBFWFBPUlRfU1lNQk9MKHRjcF9wcm90KTsKIAotc3RhdGljIGludCBfX25ldF9pbml0IHRjcF9za19pbml0KHN0cnVjdCBuZXQgKm5ldCkKLXsKLQluZXQtPmlwdjQuc3lzY3RsX3RjcF9lY24gPSAyOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IHRjcF9za19leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJaW5ldF9jdGxfc29ja19kZXN0cm95KCpwZXJfY3B1X3B0cihuZXQtPmlwdjQudGNwX3NrLCBjcHUpKTsKKwlmcmVlX3BlcmNwdShuZXQtPmlwdjQudGNwX3NrKTsKK30KKworc3RhdGljIGludCBfX25ldF9pbml0IHRjcF9za19pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlpbnQgcmVzLCBjcHU7CisKKwluZXQtPmlwdjQudGNwX3NrID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBzb2NrICopOworCWlmICghbmV0LT5pcHY0LnRjcF9zaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CisJCXN0cnVjdCBzb2NrICpzazsKKworCQlyZXMgPSBpbmV0X2N0bF9zb2NrX2NyZWF0ZSgmc2ssIFBGX0lORVQsIFNPQ0tfUkFXLAorCQkJCQkgICBJUFBST1RPX1RDUCwgbmV0KTsKKwkJaWYgKHJlcykKKwkJCWdvdG8gZmFpbDsKKwkJKnBlcl9jcHVfcHRyKG5ldC0+aXB2NC50Y3Bfc2ssIGNwdSkgPSBzazsKKwl9CisJbmV0LT5pcHY0LnN5c2N0bF90Y3BfZWNuID0gMjsKKwluZXQtPmlwdjQuc3lzY3RsX3RjcF9iYXNlX21zcyA9IFRDUF9CQVNFX01TUzsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwl0Y3Bfc2tfZXhpdChuZXQpOworCisJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCB0Y3Bfc2tfZXhpdF9iYXRjaChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfZXhpdF9saXN0KQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21lbWNvbnRyb2wuYyBiL25ldC9pcHY0L3RjcF9tZW1jb250cm9sLmMKaW5kZXggMjcyMzI3MTMuLmMyYTc1YzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9tZW1jb250cm9sLmMKKysrIGIvbmV0L2lwdjQvdGNwX21lbWNvbnRyb2wuYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJc3dpdGNoIChvZl9jZnQob2YpLT5wcml2YXRlKSB7CiAJY2FzZSBSRVNfTElNSVQ6CiAJCS8qIHNlZSBtZW1jb250cm9sLmMgKi8KLQkJcmV0ID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGJ1ZiwgJm5yX3BhZ2VzKTsKKwkJcmV0ID0gcGFnZV9jb3VudGVyX21lbXBhcnNlKGJ1ZiwgIi0xIiwgJm5yX3BhZ2VzKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCQltdXRleF9sb2NrKCZ0Y3BfbGltaXRfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21ldHJpY3MuYyBiL25ldC9pcHY0L3RjcF9tZXRyaWNzLmMKaW5kZXggZWQ5YzlhOS4uZTVmNDFiZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX21ldHJpY3MuYworKysgYi9uZXQvaXB2NC90Y3BfbWV0cmljcy5jCkBAIC04ODYsNyArODg2LDggQEAKIAlpZiAodGNwX21ldHJpY3NfZmlsbF9pbmZvKHNrYiwgdG0pIDwgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gZ2VubG1zZ19lbmQoc2tiLCBoZHIpOworCWdlbmxtc2dfZW5kKHNrYiwgaGRyKTsKKwlyZXR1cm4gMDsKIAogbmxhX3B1dF9mYWlsdXJlOgogCWdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYyBiL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYwppbmRleCA2M2QyNjgwLi5kZDExYWM3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKKysrIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCkBAIC01OCw2ICs1OCwyNSBAQAogCXJldHVybiBzZXEgPT0gZV93aW4gJiYgc2VxID09IGVuZF9zZXE7CiB9CiAKK3N0YXRpYyBlbnVtIHRjcF90d19zdGF0dXMKK3RjcF90aW1ld2FpdF9jaGVja19vb3dfcmF0ZV9saW1pdChzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dywKKwkJCQkgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBtaWJfaWR4KQoreworCXN0cnVjdCB0Y3BfdGltZXdhaXRfc29jayAqdGNwdHcgPSB0Y3BfdHdzaygoc3RydWN0IHNvY2sgKil0dyk7CisKKwlpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHR3c2tfbmV0KHR3KSwgc2tiLCBtaWJfaWR4LAorCQkJCSAgJnRjcHR3LT50d19sYXN0X29vd19hY2tfdGltZSkpIHsKKwkJLyogU2VuZCBBQ0suIE5vdGUsIHdlIGRvIG5vdCBwdXQgdGhlIGJ1Y2tldCwKKwkJICogaXQgd2lsbCBiZSByZWxlYXNlZCBieSBjYWxsZXIuCisJCSAqLworCQlyZXR1cm4gVENQX1RXX0FDSzsKKwl9CisKKwkvKiBXZSBhcmUgcmF0ZS1saW1pdGluZywgc28ganVzdCByZWxlYXNlIHRoZSB0dyBzb2NrIGFuZCBkcm9wIHNrYi4gKi8KKwlpbmV0X3R3c2tfcHV0KHR3KTsKKwlyZXR1cm4gVENQX1RXX1NVQ0NFU1M7Cit9CisKIC8qCiAgKiAqIE1haW4gcHVycG9zZSBvZiBUSU1FLVdBSVQgc3RhdGUgaXMgdG8gY2xvc2UgY29ubmVjdGlvbiBncmFjZWZ1bGx5LAogICogICB3aGVuIG9uZSBvZiBlbmRzIHNpdHMgaW4gTEFTVC1BQ0sgb3IgQ0xPU0lORyByZXRyYW5zbWl0dGluZyBGSU4KQEAgLTExNiw3ICsxMzUsOCBAQAogCQkgICAgIXRjcF9pbl93aW5kb3coVENQX1NLQl9DQihza2IpLT5zZXEsIFRDUF9TS0JfQ0Ioc2tiKS0+ZW5kX3NlcSwKIAkJCQkgICB0Y3B0dy0+dHdfcmN2X254dCwKIAkJCQkgICB0Y3B0dy0+dHdfcmN2X254dCArIHRjcHR3LT50d19yY3Zfd25kKSkKLQkJCXJldHVybiBUQ1BfVFdfQUNLOworCQkJcmV0dXJuIHRjcF90aW1ld2FpdF9jaGVja19vb3dfcmF0ZV9saW1pdCgKKwkJCQl0dywgc2tiLCBMSU5VWF9NSUJfVENQQUNLU0tJUFBFREZJTldBSVQyKTsKIAogCQlpZiAodGgtPnJzdCkKIAkJCWdvdG8ga2lsbDsKQEAgLTI1MCwxMCArMjcwLDggQEAKIAkJCWluZXRfdHdza19zY2hlZHVsZSh0dywgJnRjcF9kZWF0aF9yb3csIFRDUF9USU1FV0FJVF9MRU4sCiAJCQkJCSAgIFRDUF9USU1FV0FJVF9MRU4pOwogCi0JCS8qIFNlbmQgQUNLLiBOb3RlLCB3ZSBkbyBub3QgcHV0IHRoZSBidWNrZXQsCi0JCSAqIGl0IHdpbGwgYmUgcmVsZWFzZWQgYnkgY2FsbGVyLgotCQkgKi8KLQkJcmV0dXJuIFRDUF9UV19BQ0s7CisJCXJldHVybiB0Y3BfdGltZXdhaXRfY2hlY2tfb293X3JhdGVfbGltaXQoCisJCQl0dywgc2tiLCBMSU5VWF9NSUJfVENQQUNLU0tJUFBFRFRJTUVXQUlUKTsKIAl9CiAJaW5ldF90d3NrX3B1dCh0dyk7CiAJcmV0dXJuIFRDUF9UV19TVUNDRVNTOwpAQCAtMjg5LDYgKzMwNyw3IEBACiAJCXRjcHR3LT50d190c19yZWNlbnQJPSB0cC0+cnhfb3B0LnRzX3JlY2VudDsKIAkJdGNwdHctPnR3X3RzX3JlY2VudF9zdGFtcCA9IHRwLT5yeF9vcHQudHNfcmVjZW50X3N0YW1wOwogCQl0Y3B0dy0+dHdfdHNfb2Zmc2V0CT0gdHAtPnRzb2Zmc2V0OworCQl0Y3B0dy0+dHdfbGFzdF9vb3dfYWNrX3RpbWUgPSAwOwogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIAkJaWYgKHR3LT50d19mYW1pbHkgPT0gUEZfSU5FVDYpIHsKQEAgLTM5OSw2ICs0MTgsMzIgQEAKIAl0cC0+ZWNuX2ZsYWdzID0gaW5ldF9yc2socmVxKS0+ZWNuX29rID8gVENQX0VDTl9PSyA6IDA7CiB9CiAKK3ZvaWQgdGNwX2NhX29wZW5yZXFfY2hpbGQoc3RydWN0IHNvY2sgKnNrLCBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpCit7CisJc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOworCXUzMiBjYV9rZXkgPSBkc3RfbWV0cmljKGRzdCwgUlRBWF9DQ19BTEdPKTsKKwlib29sIGNhX2dvdF9kc3QgPSBmYWxzZTsKKworCWlmIChjYV9rZXkgIT0gVENQX0NBX1VOU1BFQykgeworCQljb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCWNhID0gdGNwX2NhX2ZpbmRfa2V5KGNhX2tleSk7CisJCWlmIChsaWtlbHkoY2EgJiYgdHJ5X21vZHVsZV9nZXQoY2EtPm93bmVyKSkpIHsKKwkJCWljc2stPmljc2tfY2FfZHN0X2xvY2tlZCA9IHRjcF9jYV9kc3RfbG9ja2VkKGRzdCk7CisJCQlpY3NrLT5pY3NrX2NhX29wcyA9IGNhOworCQkJY2FfZ290X2RzdCA9IHRydWU7CisJCX0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJfQorCisJaWYgKCFjYV9nb3RfZHN0ICYmICF0cnlfbW9kdWxlX2dldChpY3NrLT5pY3NrX2NhX29wcy0+b3duZXIpKQorCQl0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbChzayk7CisKKwl0Y3Bfc2V0X2NhX3N0YXRlKHNrLCBUQ1BfQ0FfT3Blbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh0Y3BfY2Ffb3BlbnJlcV9jaGlsZCk7CisKIC8qIFRoaXMgaXMgbm90IG9ubHkgbW9yZSBlZmZpY2llbnQgdGhhbiB3aGF0IHdlIHVzZWQgdG8gZG8sIGl0IGVsaW1pbmF0ZXMKICAqIGEgbG90IG9mIGNvZGUgZHVwbGljYXRpb24gYmV0d2VlbiBJUHY0L0lQdjYgU1lOIHJlY3YgcHJvY2Vzc2luZy4gLURhdmVNCiAgKgpAQCAtNDQxLDYgKzQ4Niw3IEBACiAJCXRjcF9lbmFibGVfZWFybHlfcmV0cmFucyhuZXd0cCk7CiAJCW5ld3RwLT50bHBfaGlnaF9zZXEgPSAwOwogCQluZXd0cC0+bHNuZHRpbWUgPSB0cmVxLT5zbnRfc3luYWNrOworCQluZXd0cC0+bGFzdF9vb3dfYWNrX3RpbWUgPSAwOwogCQluZXd0cC0+dG90YWxfcmV0cmFucyA9IHJlcS0+bnVtX3JldHJhbnM7CiAKIAkJLyogU28gbWFueSBUQ1AgaW1wbGVtZW50YXRpb25zIG91dCB0aGVyZSAoaW5jb3JyZWN0bHkpIGNvdW50IHRoZQpAQCAtNDUxLDEwICs0OTcsNiBAQAogCQluZXd0cC0+c25kX2N3bmQgPSBUQ1BfSU5JVF9DV05EOwogCQluZXd0cC0+c25kX2N3bmRfY250ID0gMDsKIAotCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KG5ld2ljc2stPmljc2tfY2Ffb3BzLT5vd25lcikpCi0JCQl0Y3BfYXNzaWduX2Nvbmdlc3Rpb25fY29udHJvbChuZXdzayk7Ci0KLQkJdGNwX3NldF9jYV9zdGF0ZShuZXdzaywgVENQX0NBX09wZW4pOwogCQl0Y3BfaW5pdF94bWl0X3RpbWVycyhuZXdzayk7CiAJCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbmV3dHAtPm91dF9vZl9vcmRlcl9xdWV1ZSk7CiAJCW5ld3RwLT53cml0ZV9zZXEgPSBuZXd0cC0+cHVzaGVkX3NlcSA9IHRyZXEtPnNudF9pc24gKyAxOwpAQCAtNTgzLDcgKzYyNSwxMSBAQAogCQkgKiBSZXNldCB0aW1lciBhZnRlciByZXRyYW5zbWl0dGluZyBTWU5BQ0ssIHNpbWlsYXIgdG8KIAkJICogdGhlIGlkZWEgb2YgZmFzdCByZXRyYW5zbWl0IGluIHJlY292ZXJ5LgogCQkgKi8KLQkJaWYgKCFpbmV0X3J0eF9zeW5fYWNrKHNrLCByZXEpKQorCQlpZiAoIXRjcF9vb3dfcmF0ZV9saW1pdGVkKHNvY2tfbmV0KHNrKSwgc2tiLAorCQkJCQkgIExJTlVYX01JQl9UQ1BBQ0tTS0lQUEVEU1lOUkVDViwKKwkJCQkJICAmdGNwX3JzayhyZXEpLT5sYXN0X29vd19hY2tfdGltZSkgJiYKKworCQkgICAgIWluZXRfcnR4X3N5bl9hY2soc2ssIHJlcSkpCiAJCQlyZXEtPmV4cGlyZXMgPSBtaW4oVENQX1RJTUVPVVRfSU5JVCA8PCByZXEtPm51bV90aW1lb3V0LAogCQkJCQkgICBUQ1BfUlRPX01BWCkgKyBqaWZmaWVzOwogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwppbmRleCA2NWNhZjhiLi5hMmE3OTZjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCkBAIC01OSw5ICs1OSw2IEBACiAgKi8KIGludCBzeXNjdGxfdGNwX3Rzb193aW5fZGl2aXNvciBfX3JlYWRfbW9zdGx5ID0gMzsKIAotaW50IHN5c2N0bF90Y3BfbXR1X3Byb2JpbmcgX19yZWFkX21vc3RseSA9IDA7Ci1pbnQgc3lzY3RsX3RjcF9iYXNlX21zcyBfX3JlYWRfbW9zdGx5ID0gVENQX0JBU0VfTVNTOwotCiAvKiBCeSBkZWZhdWx0LCBSRkMyODYxIGJlaGF2aW9yLiAgKi8KIGludCBzeXNjdGxfdGNwX3Nsb3dfc3RhcnRfYWZ0ZXJfaWRsZSBfX3JlYWRfbW9zdGx5ID0gMTsKIApAQCAtOTQ4LDcgKzk0NSw3IEBACiAKIAlza2Jfb3JwaGFuKHNrYik7CiAJc2tiLT5zayA9IHNrOwotCXNrYi0+ZGVzdHJ1Y3RvciA9IHRjcF93ZnJlZTsKKwlza2ItPmRlc3RydWN0b3IgPSBza2JfaXNfdGNwX3B1cmVfYWNrKHNrYikgPyBzb2NrX3dmcmVlIDogdGNwX3dmcmVlOwogCXNrYl9zZXRfaGFzaF9mcm9tX3NrKHNrYiwgc2spOwogCWF0b21pY19hZGQoc2tiLT50cnVlc2l6ZSwgJnNrLT5za193bWVtX2FsbG9jKTsKIApAQCAtMTM1MCwxMSArMTM0NywxMiBAQAogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAKLQlpY3NrLT5pY3NrX210dXAuZW5hYmxlZCA9IHN5c2N0bF90Y3BfbXR1X3Byb2JpbmcgPiAxOworCWljc2stPmljc2tfbXR1cC5lbmFibGVkID0gbmV0LT5pcHY0LnN5c2N0bF90Y3BfbXR1X3Byb2JpbmcgPiAxOwogCWljc2stPmljc2tfbXR1cC5zZWFyY2hfaGlnaCA9IHRwLT5yeF9vcHQubXNzX2NsYW1wICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpICsKIAkJCSAgICAgICBpY3NrLT5pY3NrX2FmX29wcy0+bmV0X2hlYWRlcl9sZW47Ci0JaWNzay0+aWNza19tdHVwLnNlYXJjaF9sb3cgPSB0Y3BfbXNzX3RvX210dShzaywgc3lzY3RsX3RjcF9iYXNlX21zcyk7CisJaWNzay0+aWNza19tdHVwLnNlYXJjaF9sb3cgPSB0Y3BfbXNzX3RvX210dShzaywgbmV0LT5pcHY0LnN5c2N0bF90Y3BfYmFzZV9tc3MpOwogCWljc2stPmljc2tfbXR1cC5wcm9iZV9zaXplID0gMDsKIH0KIEVYUE9SVF9TWU1CT0wodGNwX210dXBfaW5pdCk7CkBAIC0yOTM5LDYgKzI5MzcsMjUgQEAKIH0KIEVYUE9SVF9TWU1CT0wodGNwX21ha2Vfc3luYWNrKTsKIAorc3RhdGljIHZvaWQgdGNwX2NhX2RzdF9pbml0KHN0cnVjdCBzb2NrICpzaywgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0KQoreworCXN0cnVjdCBpbmV0X2Nvbm5lY3Rpb25fc29jayAqaWNzayA9IGluZXRfY3NrKHNrKTsKKwljb25zdCBzdHJ1Y3QgdGNwX2Nvbmdlc3Rpb25fb3BzICpjYTsKKwl1MzIgY2Ffa2V5ID0gZHN0X21ldHJpYyhkc3QsIFJUQVhfQ0NfQUxHTyk7CisKKwlpZiAoY2Ffa2V5ID09IFRDUF9DQV9VTlNQRUMpCisJCXJldHVybjsKKworCXJjdV9yZWFkX2xvY2soKTsKKwljYSA9IHRjcF9jYV9maW5kX2tleShjYV9rZXkpOworCWlmIChsaWtlbHkoY2EgJiYgdHJ5X21vZHVsZV9nZXQoY2EtPm93bmVyKSkpIHsKKwkJbW9kdWxlX3B1dChpY3NrLT5pY3NrX2NhX29wcy0+b3duZXIpOworCQlpY3NrLT5pY3NrX2NhX2RzdF9sb2NrZWQgPSB0Y3BfY2FfZHN0X2xvY2tlZChkc3QpOworCQlpY3NrLT5pY3NrX2NhX29wcyA9IGNhOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKwogLyogRG8gYWxsIGNvbm5lY3Qgc29ja2V0IHNldHVwcyB0aGF0IGNhbiBiZSBkb25lIEFGIGluZGVwZW5kZW50LiAqLwogc3RhdGljIHZvaWQgdGNwX2Nvbm5lY3RfaW5pdChzdHJ1Y3Qgc29jayAqc2spCiB7CkBAIC0yOTY0LDYgKzI5ODEsOCBAQAogCXRjcF9tdHVwX2luaXQoc2spOwogCXRjcF9zeW5jX21zcyhzaywgZHN0X210dShkc3QpKTsKIAorCXRjcF9jYV9kc3RfaW5pdChzaywgZHN0KTsKKwogCWlmICghdHAtPndpbmRvd19jbGFtcCkKIAkJdHAtPndpbmRvd19jbGFtcCA9IGRzdF9tZXRyaWMoZHN0LCBSVEFYX1dJTkRPVyk7CiAJdHAtPmFkdm1zcyA9IGRzdF9tZXRyaWNfYWR2bXNzKGRzdCk7CkBAIC0zMDM0LDcgKzMwNTMsNyBAQAogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCB0Y3BfZmFzdG9wZW5fcmVxdWVzdCAqZm8gPSB0cC0+ZmFzdG9wZW5fcmVxOwotCWludCBzeW5fbG9zcyA9IDAsIHNwYWNlLCBlcnIgPSAwOworCWludCBzeW5fbG9zcyA9IDAsIHNwYWNlLCBlcnIgPSAwLCBjb3BpZWQ7CiAJdW5zaWduZWQgbG9uZyBsYXN0X3N5bl9sb3NzID0gMDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc3luX2RhdGE7CiAKQEAgLTMwNzIsMTEgKzMwOTEsMTYgQEAKIAkJZ290byBmYWxsYmFjazsKIAlzeW5fZGF0YS0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKIAltZW1jcHkoc3luX2RhdGEtPmNiLCBzeW4tPmNiLCBzaXplb2Yoc3luLT5jYikpOwotCWlmICh1bmxpa2VseShtZW1jcHlfZnJvbWlvdmVjZW5kKHNrYl9wdXQoc3luX2RhdGEsIHNwYWNlKSwKLQkJCQkJIGZvLT5kYXRhLT5tc2dfaXRlci5pb3YsIDAsIHNwYWNlKSkpIHsKKwljb3BpZWQgPSBjb3B5X2Zyb21faXRlcihza2JfcHV0KHN5bl9kYXRhLCBzcGFjZSksIHNwYWNlLAorCQkJCSZmby0+ZGF0YS0+bXNnX2l0ZXIpOworCWlmICh1bmxpa2VseSghY29waWVkKSkgewogCQlrZnJlZV9za2Ioc3luX2RhdGEpOwogCQlnb3RvIGZhbGxiYWNrOwogCX0KKwlpZiAoY29waWVkICE9IHNwYWNlKSB7CisJCXNrYl90cmltKHN5bl9kYXRhLCBjb3BpZWQpOworCQlzcGFjZSA9IGNvcGllZDsKKwl9CiAKIAkvKiBObyBtb3JlIGRhdGEgcGVuZGluZyBpbiBpbmV0X3dhaXRfZm9yX2Nvbm5lY3QoKSAqLwogCWlmIChzcGFjZSA9PSBmby0+c2l6ZSkKQEAgLTMyNDQsNiArMzI2OCwxNCBAQAogCXNrYl9yZXNlcnZlKGJ1ZmYsIE1BWF9UQ1BfSEVBREVSKTsKIAl0Y3BfaW5pdF9ub25kYXRhX3NrYihidWZmLCB0Y3BfYWNjZXB0YWJsZV9zZXEoc2spLCBUQ1BIRFJfQUNLKTsKIAorCS8qIFdlIGRvIG5vdCB3YW50IHB1cmUgYWNrcyBpbmZsdWVuY2luZyBUQ1AgU21hbGwgUXVldWVzIG9yIGZxL3BhY2luZworCSAqIHRvbyBtdWNoLgorCSAqIFNLQl9UUlVFU0laRShtYXgoMSAuLiA2NiwgTUFYX1RDUF9IRUFERVIpKSBpcyB1bmZvcnR1bmF0ZWx5IH43ODQKKwkgKiBXZSBhbHNvIGF2b2lkIHRjcF93ZnJlZSgpIG92ZXJoZWFkIChjYWNoZSBsaW5lIG1pc3MgYWNjZXNzaW5nCisJICogdHAtPnRzcV9mbGFncykgYnkgdXNpbmcgcmVndWxhciBzb2NrX3dmcmVlKCkKKwkgKi8KKwlza2Jfc2V0X3RjcF9wdXJlX2FjayhidWZmKTsKKwogCS8qIFNlbmQgaXQgb2ZmLCB0aGlzIGNsZWFycyBkZWxheWVkIGFja3MgZm9yIHVzLiAqLwogCXNrYl9tc3RhbXBfZ2V0KCZidWZmLT5za2JfbXN0YW1wKTsKIAl0Y3BfdHJhbnNtaXRfc2tiKHNrLCBidWZmLCAwLCBza19nZnBfYXRvbWljKHNrLCBHRlBfQVRPTUlDKSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfc2NhbGFibGUuYyBiL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jCmluZGV4IDY4MjRhZmIuLjMzM2JjYjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jCisrKyBiL25ldC9pcHY0L3RjcF9zY2FsYWJsZS5jCkBAIC0yNSw3ICsyNSw4IEBACiAJaWYgKHRwLT5zbmRfY3duZCA8PSB0cC0+c25kX3NzdGhyZXNoKQogCQl0Y3Bfc2xvd19zdGFydCh0cCwgYWNrZWQpOwogCWVsc2UKLQkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIG1pbih0cC0+c25kX2N3bmQsIFRDUF9TQ0FMQUJMRV9BSV9DTlQpKTsKKwkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIG1pbih0cC0+c25kX2N3bmQsIFRDUF9TQ0FMQUJMRV9BSV9DTlQpLAorCQkJCSAgMSk7CiB9CiAKIHN0YXRpYyB1MzIgdGNwX3NjYWxhYmxlX3NzdGhyZXNoKHN0cnVjdCBzb2NrICpzaykKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF90aW1lci5jIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmMKaW5kZXggMTgyOWM3Zi4uMDczMmI3OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3RpbWVyLmMKKysrIGIvbmV0L2lwdjQvdGNwX3RpbWVyLmMKQEAgLTEwMSwxNyArMTAxLDIwIEBACiAKIHN0YXRpYyB2b2lkIHRjcF9tdHVfcHJvYmluZyhzdHJ1Y3QgaW5ldF9jb25uZWN0aW9uX3NvY2sgKmljc2ssIHN0cnVjdCBzb2NrICpzaykKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CisKIAkvKiBCbGFjayBob2xlIGRldGVjdGlvbiAqLwotCWlmIChzeXNjdGxfdGNwX210dV9wcm9iaW5nKSB7CisJaWYgKG5ldC0+aXB2NC5zeXNjdGxfdGNwX210dV9wcm9iaW5nKSB7CiAJCWlmICghaWNzay0+aWNza19tdHVwLmVuYWJsZWQpIHsKIAkJCWljc2stPmljc2tfbXR1cC5lbmFibGVkID0gMTsKIAkJCXRjcF9zeW5jX21zcyhzaywgaWNzay0+aWNza19wbXR1X2Nvb2tpZSk7CiAJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJCQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKIAkJCWludCBtc3M7CiAKIAkJCW1zcyA9IHRjcF9tdHVfdG9fbXNzKHNrLCBpY3NrLT5pY3NrX210dXAuc2VhcmNoX2xvdykgPj4gMTsKLQkJCW1zcyA9IG1pbihzeXNjdGxfdGNwX2Jhc2VfbXNzLCBtc3MpOworCQkJbXNzID0gbWluKG5ldC0+aXB2NC5zeXNjdGxfdGNwX2Jhc2VfbXNzLCBtc3MpOwogCQkJbXNzID0gbWF4KG1zcywgNjggLSB0cC0+dGNwX2hlYWRlcl9sZW4pOwogCQkJaWNzay0+aWNza19tdHVwLnNlYXJjaF9sb3cgPSB0Y3BfbXNzX3RvX210dShzaywgbXNzKTsKIAkJCXRjcF9zeW5jX21zcyhzaywgaWNzay0+aWNza19wbXR1X2Nvb2tpZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdmVuby5jIGIvbmV0L2lwdjQvdGNwX3Zlbm8uYwppbmRleCBhNGQyZDJkLi4xMTIxNTFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfdmVuby5jCisrKyBiL25ldC9pcHY0L3RjcF92ZW5vLmMKQEAgLTE1OSw3ICsxNTksNyBAQAogCQkJCS8qIEluIHRoZSAibm9uLWNvbmdlc3RpdmUgc3RhdGUiLCBpbmNyZWFzZSBjd25kCiAJCQkJICogIGV2ZXJ5IHJ0dC4KIAkJCQkgKi8KLQkJCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgdHAtPnNuZF9jd25kKTsKKwkJCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgdHAtPnNuZF9jd25kLCAxKTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogSW4gdGhlICJjb25nZXN0aXZlIHN0YXRlIiwgaW5jcmVhc2UgY3duZAogCQkJCSAqIGV2ZXJ5IG90aGVyIHJ0dC4KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF95ZWFoLmMgYi9uZXQvaXB2NC90Y3BfeWVhaC5jCmluZGV4IGNkNzI3MzIuLjE3ZDM1NjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF95ZWFoLmMKKysrIGIvbmV0L2lwdjQvdGNwX3llYWguYwpAQCAtOTIsNyArOTIsNyBAQAogCiAJfSBlbHNlIHsKIAkJLyogUmVubyAqLwotCQl0Y3BfY29uZ19hdm9pZF9haSh0cCwgdHAtPnNuZF9jd25kKTsKKwkJdGNwX2NvbmdfYXZvaWRfYWkodHAsIHRwLT5zbmRfY3duZCwgMSk7CiAJfQogCiAJLyogVGhlIGtleSBwbGF5ZXJzIGFyZSB2X3ZlZ2FzLmJlZ19zbmRfdW5hIGFuZCB2X2JlZ19zbmRfbnh0LgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCAxM2I0ZGNmLi45N2VmMWY4YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwLmMKKysrIGIvbmV0L2lwdjQvdWRwLmMKQEAgLTEzMjksNyArMTMyOSw3IEBACiAJCSphZGRyX2xlbiA9IHNpemVvZigqc2luKTsKIAl9CiAJaWYgKGluZXQtPmNtc2dfZmxhZ3MpCi0JCWlwX2Ntc2dfcmVjdihtc2csIHNrYik7CisJCWlwX2Ntc2dfcmVjdl9vZmZzZXQobXNnLCBza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CiAKIAllcnIgPSBjb3BpZWQ7CiAJaWYgKGZsYWdzICYgTVNHX1RSVU5DKQpAQCAtMTgwNiw3ICsxODA2LDcgQEAKIAlpZiAoc2sgIT0gTlVMTCkgewogCQlpbnQgcmV0OwogCi0JCWlmICh1ZHBfc2soc2spLT5jb252ZXJ0X2NzdW0gJiYgdWgtPmNoZWNrICYmICFJU19VRFBMSVRFKHNrKSkKKwkJaWYgKGluZXRfZ2V0X2NvbnZlcnRfY3N1bShzaykgJiYgdWgtPmNoZWNrICYmICFJU19VRFBMSVRFKHNrKSkKIAkJCXNrYl9jaGVja3N1bV90cnlfY29udmVydChza2IsIElQUFJPVE9fVURQLCB1aC0+Y2hlY2ssCiAJCQkJCQkgaW5ldF9jb21wdXRlX3BzZXVkbyk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcF9kaWFnLmMgYi9uZXQvaXB2NC91ZHBfZGlhZy5jCmluZGV4IDc5MjdkYjAuLjRhMDAwZjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcF9kaWFnLmMKKysrIGIvbmV0L2lwdjQvdWRwX2RpYWcuYwpAQCAtOTksMTEgKzk5LDEzIEBACiAJc19zbG90ID0gY2ItPmFyZ3NbMF07CiAJbnVtID0gc19udW0gPSBjYi0+YXJnc1sxXTsKIAotCWZvciAoc2xvdCA9IHNfc2xvdDsgc2xvdCA8PSB0YWJsZS0+bWFzazsgbnVtID0gc19udW0gPSAwLCBzbG90KyspIHsKKwlmb3IgKHNsb3QgPSBzX3Nsb3Q7IHNsb3QgPD0gdGFibGUtPm1hc2s7IHNfbnVtID0gMCwgc2xvdCsrKSB7CiAJCXN0cnVjdCBzb2NrICpzazsKIAkJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm5vZGU7CiAJCXN0cnVjdCB1ZHBfaHNsb3QgKmhzbG90ID0gJnRhYmxlLT5oYXNoW3Nsb3RdOwogCisJCW51bSA9IDA7CisKIAkJaWYgKGhsaXN0X251bGxzX2VtcHR5KCZoc2xvdC0+aGVhZCkpCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwX29mZmxvYWQuYyBiL25ldC9pcHY0L3VkcF9vZmZsb2FkLmMKaW5kZXggZDNlNTM3ZS4uZDEwZjZmNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwX29mZmxvYWQuYworKysgYi9uZXQvaXB2NC91ZHBfb2ZmbG9hZC5jCkBAIC0zMzksNyArMzM5LDggQEAKIAlza2JfZ3JvX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpOyAvKiBwdWxsIGVuY2Fwc3VsYXRpbmcgdWRwIGhlYWRlciAqLwogCXNrYl9ncm9fcG9zdHB1bGxfcmNzdW0oc2tiLCB1aCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKIAlOQVBJX0dST19DQihza2IpLT5wcm90byA9IHVvX3ByaXYtPm9mZmxvYWQtPmlwcHJvdG87Ci0JcHAgPSB1b19wcml2LT5vZmZsb2FkLT5jYWxsYmFja3MuZ3JvX3JlY2VpdmUoaGVhZCwgc2tiKTsKKwlwcCA9IHVvX3ByaXYtPm9mZmxvYWQtPmNhbGxiYWNrcy5ncm9fcmVjZWl2ZShoZWFkLCBza2IsCisJCQkJCQkgICAgIHVvX3ByaXYtPm9mZmxvYWQpOwogCiBvdXRfdW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMzk1LDcgKzM5Niw5IEBACiAKIAlpZiAodW9fcHJpdiAhPSBOVUxMKSB7CiAJCU5BUElfR1JPX0NCKHNrYiktPnByb3RvID0gdW9fcHJpdi0+b2ZmbG9hZC0+aXBwcm90bzsKLQkJZXJyID0gdW9fcHJpdi0+b2ZmbG9hZC0+Y2FsbGJhY2tzLmdyb19jb21wbGV0ZShza2IsIG5ob2ZmICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKKwkJZXJyID0gdW9fcHJpdi0+b2ZmbG9hZC0+Y2FsbGJhY2tzLmdyb19jb21wbGV0ZShza2IsCisJCQkJbmhvZmYgKyBzaXplb2Yoc3RydWN0IHVkcGhkciksCisJCQkJdW9fcHJpdi0+b2ZmbG9hZCk7CiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHBfdHVubmVsLmMgYi9uZXQvaXB2NC91ZHBfdHVubmVsLmMKaW5kZXggMTY3MTI2My4uYzgzYjM1NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwX3R1bm5lbC5jCisrKyBiL25ldC9pcHY0L3VkcF90dW5uZWwuYwpAQCAtNjMsNyArNjMsNyBAQAogCWluZXRfc2soc2spLT5tY19sb29wID0gMDsKIAogCS8qIEVuYWJsZSBDSEVDS1NVTV9VTk5FQ0VTU0FSWSB0byBDSEVDS1NVTV9DT01QTEVURSBjb252ZXJzaW9uICovCi0JdWRwX3NldF9jb252ZXJ0X2NzdW0oc2ssIHRydWUpOworCWluZXRfaW5jX2NvbnZlcnRfY3N1bShzayk7CiAKIAlyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShzaywgY2ZnLT5za191c2VyX2RhdGEpOwogCkBAIC03NSwxMCArNzUsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNldHVwX3VkcF90dW5uZWxfc29jayk7CiAKLWludCB1ZHBfdHVubmVsX3htaXRfc2tiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBydGFibGUgKnJ0LAotCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHNyYywgX19iZTMyIGRzdCwKLQkJCV9fdTggdG9zLCBfX3U4IHR0bCwgX19iZTE2IGRmLCBfX2JlMTYgc3JjX3BvcnQsCi0JCQlfX2JlMTYgZHN0X3BvcnQsIGJvb2wgeG5ldCkKK2ludCB1ZHBfdHVubmVsX3htaXRfc2tiKHN0cnVjdCBydGFibGUgKnJ0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJX19iZTMyIHNyYywgX19iZTMyIGRzdCwgX191OCB0b3MsIF9fdTggdHRsLAorCQkJX19iZTE2IGRmLCBfX2JlMTYgc3JjX3BvcnQsIF9fYmUxNiBkc3RfcG9ydCwKKwkJCWJvb2wgeG5ldCwgYm9vbCBub2NoZWNrKQogewogCXN0cnVjdCB1ZHBoZHIgKnVoOwogCkBAIC05MCw5ICs5MCw5IEBACiAJdWgtPnNvdXJjZSA9IHNyY19wb3J0OwogCXVoLT5sZW4gPSBodG9ucyhza2ItPmxlbik7CiAKLQl1ZHBfc2V0X2NzdW0oc29jay0+c2stPnNrX25vX2NoZWNrX3R4LCBza2IsIHNyYywgZHN0LCBza2ItPmxlbik7CisJdWRwX3NldF9jc3VtKG5vY2hlY2ssIHNrYiwgc3JjLCBkc3QsIHNrYi0+bGVuKTsKIAotCXJldHVybiBpcHR1bm5lbF94bWl0KHNvY2stPnNrLCBydCwgc2tiLCBzcmMsIGRzdCwgSVBQUk9UT19VRFAsCisJcmV0dXJuIGlwdHVubmVsX3htaXQoc2tiLT5zaywgcnQsIHNrYiwgc3JjLCBkc3QsIElQUFJPVE9fVURQLAogCQkJICAgICB0b3MsIHR0bCwgZGYsIHhuZXQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodWRwX3R1bm5lbF94bWl0X3NrYik7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCBmN2M4YmJlLi45OGU0YTYzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTIwMSw2ICsyMDEsNyBAQAogCS5kaXNhYmxlX2lwdjYJCT0gMCwKIAkuYWNjZXB0X2RhZAkJPSAxLAogCS5zdXBwcmVzc19mcmFnX25kaXNjCT0gMSwKKwkuYWNjZXB0X3JhX210dQkJPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcHY2X2RldmNvbmYgaXB2Nl9kZXZjb25mX2RmbHQgX19yZWFkX21vc3RseSA9IHsKQEAgLTIzOCw2ICsyMzksNyBAQAogCS5kaXNhYmxlX2lwdjYJCT0gMCwKIAkuYWNjZXB0X2RhZAkJPSAxLAogCS5zdXBwcmVzc19mcmFnX25kaXNjCT0gMSwKKwkuYWNjZXB0X3JhX210dQkJPSAxLAogfTsKIAogLyogQ2hlY2sgaWYgYSB2YWxpZCBxZGlzYyBpcyBhdmFpbGFibGUgKi8KQEAgLTQ4OSw3ICs0OTEsOCBAQAogCSAgICBubGFfcHV0X3MzMihza2IsIE5FVENPTkZBX1BST1hZX05FSUdILCBkZXZjb25mLT5wcm94eV9uZHApIDwgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKQEAgLTYxOSw3ICs2MjIsNyBAQAogCQkJCQkJICAgICAgIGNiLT5ubGgtPm5sbXNnX3NlcSwKIAkJCQkJCSAgICAgICBSVE1fTkVXTkVUQ09ORiwKIAkJCQkJCSAgICAgICBOTE1fRl9NVUxUSSwKLQkJCQkJCSAgICAgICAtMSkgPD0gMCkgeworCQkJCQkJICAgICAgIC0xKSA8IDApIHsKIAkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CkBAIC02MzUsNyArNjM4LDcgQEAKIAkJCQkJICAgICAgIE5FVExJTktfQ0IoY2ItPnNrYikucG9ydGlkLAogCQkJCQkgICAgICAgY2ItPm5saC0+bmxtc2dfc2VxLAogCQkJCQkgICAgICAgUlRNX05FV05FVENPTkYsIE5MTV9GX01VTFRJLAotCQkJCQkgICAgICAgLTEpIDw9IDApCisJCQkJCSAgICAgICAtMSkgPCAwKQogCQkJZ290byBkb25lOwogCQllbHNlCiAJCQloKys7CkBAIC02NDYsNyArNjQ5LDcgQEAKIAkJCQkJICAgICAgIE5FVExJTktfQ0IoY2ItPnNrYikucG9ydGlkLAogCQkJCQkgICAgICAgY2ItPm5saC0+bmxtc2dfc2VxLAogCQkJCQkgICAgICAgUlRNX05FV05FVENPTkYsIE5MTV9GX01VTFRJLAotCQkJCQkgICAgICAgLTEpIDw9IDApCisJCQkJCSAgICAgICAtMSkgPCAwKQogCQkJZ290byBkb25lOwogCQllbHNlCiAJCQloKys7CkBAIC0xNTE5LDE1ICsxNTIyLDMwIEBACiBpbnQgaXB2Nl9jaGtfYWRkcihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkciwKIAkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RyaWN0KQogeworCXJldHVybiBpcHY2X2Noa19hZGRyX2FuZF9mbGFncyhuZXQsIGFkZHIsIGRldiwgc3RyaWN0LCBJRkFfRl9URU5UQVRJVkUpOworfQorRVhQT1JUX1NZTUJPTChpcHY2X2Noa19hZGRyKTsKKworaW50IGlwdjZfY2hrX2FkZHJfYW5kX2ZsYWdzKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAorCQkJICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdHJpY3QsCisJCQkgICAgdTMyIGJhbm5lZF9mbGFncykKK3sKIAlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnA7CiAJdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0Nl9hZGRyX2hhc2goYWRkcik7CisJdTMyIGlmcF9mbGFnczsKIAogCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaWZwLCAmaW5ldDZfYWRkcl9sc3RbaGFzaF0sIGFkZHJfbHN0KSB7CiAJCWlmICghbmV0X2VxKGRldl9uZXQoaWZwLT5pZGV2LT5kZXYpLCBuZXQpKQogCQkJY29udGludWU7CisJCS8qIERlY291cGxlIG9wdGltaXN0aWMgZnJvbSB0ZW50YXRpdmUgZm9yIGV2YWx1YXRpb24gaGVyZS4KKwkJICogQmFuIG9wdGltaXN0aWMgYWRkcmVzc2VzIGV4cGxpY2l0bHksIHdoZW4gcmVxdWlyZWQuCisJCSAqLworCQlpZnBfZmxhZ3MgPSAoaWZwLT5mbGFncyZJRkFfRl9PUFRJTUlTVElDKQorCQkJICAgID8gKGlmcC0+ZmxhZ3MmfklGQV9GX1RFTlRBVElWRSkKKwkJCSAgICA6IGlmcC0+ZmxhZ3M7CiAJCWlmIChpcHY2X2FkZHJfZXF1YWwoJmlmcC0+YWRkciwgYWRkcikgJiYKLQkJICAgICEoaWZwLT5mbGFncyZJRkFfRl9URU5UQVRJVkUpICYmCisJCSAgICAhKGlmcF9mbGFncyZiYW5uZWRfZmxhZ3MpICYmCiAJCSAgICAoZGV2ID09IE5VTEwgfHwgaWZwLT5pZGV2LT5kZXYgPT0gZGV2IHx8CiAJCSAgICAgIShpZnAtPnNjb3BlJihJRkFfTElOS3xJRkFfSE9TVCkgfHwgc3RyaWN0KSkpIHsKIAkJCXJjdV9yZWFkX3VubG9ja19iaCgpOwpAQCAtMTUzOCw3ICsxNTU2LDcgQEAKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woaXB2Nl9jaGtfYWRkcik7CitFWFBPUlRfU1lNQk9MKGlwdjZfY2hrX2FkZHJfYW5kX2ZsYWdzKTsKIAogc3RhdGljIGJvb2wgaXB2Nl9jaGtfc2FtZV9hZGRyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyLAogCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC00MDQ3LDcgKzQwNjUsOCBAQAogCWlmIChubGFfcHV0X3UzMihza2IsIElGQV9GTEFHUywgaWZhLT5mbGFncykgPCAwKQogCQlnb3RvIGVycm9yOwogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIAogZXJyb3I6CiAJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKQEAgLTQwNzYsNyArNDA5NSw4IEBACiAJCXJldHVybiAtRU1TR1NJWkU7CiAJfQogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpbmV0Nl9maWxsX2lmYWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZmFjYWRkcjYgKmlmYWNhLApAQCAtNDEwMSw3ICs0MTIxLDggQEAKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAl9CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogfQogCiBlbnVtIGFkZHJfdHlwZV90IHsKQEAgLTQxMzQsNyArNDE1NSw3IEBACiAJCQkJCQljYi0+bmxoLT5ubG1zZ19zZXEsCiAJCQkJCQlSVE1fTkVXQUREUiwKIAkJCQkJCU5MTV9GX01VTFRJKTsKLQkJCWlmIChlcnIgPD0gMCkKKwkJCWlmIChlcnIgPCAwKQogCQkJCWJyZWFrOwogCQkJbmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBubG1zZ19oZHIoc2tiKSk7CiAJCX0KQEAgLTQxNTEsNyArNDE3Miw3IEBACiAJCQkJCQkgIGNiLT5ubGgtPm5sbXNnX3NlcSwKIAkJCQkJCSAgUlRNX0dFVE1VTFRJQ0FTVCwKIAkJCQkJCSAgTkxNX0ZfTVVMVEkpOwotCQkJaWYgKGVyciA8PSAwKQorCQkJaWYgKGVyciA8IDApCiAJCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CkBAIC00MTY2LDcgKzQxODcsNyBAQAogCQkJCQkJICBjYi0+bmxoLT5ubG1zZ19zZXEsCiAJCQkJCQkgIFJUTV9HRVRBTllDQVNULAogCQkJCQkJICBOTE1fRl9NVUxUSSk7Ci0JCQlpZiAoZXJyIDw9IDApCisJCQlpZiAoZXJyIDwgMCkKIAkJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTQyMDksNyArNDIzMCw3IEBACiAJCQkJZ290byBjb250OwogCiAJCQlpZiAoaW42X2R1bXBfYWRkcnMoaWRldiwgc2tiLCBjYiwgdHlwZSwKLQkJCQkJICAgc19pcF9pZHgsICZpcF9pZHgpIDw9IDApCisJCQkJCSAgIHNfaXBfaWR4LCAmaXBfaWR4KSA8IDApCiAJCQkJZ290byBkb25lOwogY29udDoKIAkJCWlkeCsrOwpAQCAtNDM3Niw2ICs0Mzk3LDcgQEAKIAlhcnJheVtERVZDT05GX05ESVNDX05PVElGWV0gPSBjbmYtPm5kaXNjX25vdGlmeTsKIAlhcnJheVtERVZDT05GX1NVUFBSRVNTX0ZSQUdfTkRJU0NdID0gY25mLT5zdXBwcmVzc19mcmFnX25kaXNjOwogCWFycmF5W0RFVkNPTkZfQUNDRVBUX1JBX0ZST01fTE9DQUxdID0gY25mLT5hY2NlcHRfcmFfZnJvbV9sb2NhbDsKKwlhcnJheVtERVZDT05GX0FDQ0VQVF9SQV9NVFVdID0gY25mLT5hY2NlcHRfcmFfbXR1OwogfQogCiBzdGF0aWMgaW5saW5lIHNpemVfdCBpbmV0Nl9pZmxhNl9zaXplKHZvaWQpCkBAIC00NTcyLDYgKzQ1OTQsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGluZXQ2X2FmX3BvbGljeVtJRkxBX0lORVQ2X01BWCArIDFdID0geworCVtJRkxBX0lORVQ2X0FERFJfR0VOX01PREVdCT0geyAudHlwZSA9IE5MQV9VOCB9LAorCVtJRkxBX0lORVQ2X1RPS0VOXQkJPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSB9LAorfTsKKworc3RhdGljIGludCBpbmV0Nl92YWxpZGF0ZV9saW5rX2FmKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEpCit7CisJc3RydWN0IG5sYXR0ciAqdGJbSUZMQV9JTkVUNl9NQVggKyAxXTsKKworCWlmIChkZXYgJiYgIV9faW42X2Rldl9nZXQoZGV2KSkKKwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisKKwlyZXR1cm4gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9JTkVUNl9NQVgsIG5sYSwgaW5ldDZfYWZfcG9saWN5KTsKK30KKwogc3RhdGljIGludCBpbmV0Nl9zZXRfbGlua19hZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICpubGEpCiB7CiAJaW50IGVyciA9IC1FSU5WQUw7CkBAIC00NjM4LDcgKzQ2NzYsOCBAQAogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCW5sYV9uZXN0X2VuZChza2IsIHByb3RvaW5mbyk7Ci0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIAogbmxhX3B1dF9mYWlsdXJlOgogCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CkBAIC00NjcwLDcgKzQ3MDksNyBAQAogCQkJaWYgKGluZXQ2X2ZpbGxfaWZpbmZvKHNrYiwgaWRldiwKIAkJCQkJICAgICAgTkVUTElOS19DQihjYi0+c2tiKS5wb3J0aWQsCiAJCQkJCSAgICAgIGNiLT5ubGgtPm5sbXNnX3NlcSwKLQkJCQkJICAgICAgUlRNX05FV0xJTkssIE5MTV9GX01VTFRJKSA8PSAwKQorCQkJCQkgICAgICBSVE1fTkVXTElOSywgTkxNX0ZfTVVMVEkpIDwgMCkKIAkJCQlnb3RvIG91dDsKIGNvbnQ6CiAJCQlpZHgrKzsKQEAgLTQ3NDcsNyArNDc4Niw4IEBACiAJY2kudmFsaWRfdGltZSA9IG50b2hsKHBpbmZvLT52YWxpZCk7CiAJaWYgKG5sYV9wdXQoc2tiLCBQUkVGSVhfQ0FDSEVJTkZPLCBzaXplb2YoY2kpLCAmY2kpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKQEAgLTUyNTMsNiArNTI5MywxMyBAQAogCQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCiAJCX0sCiAJCXsKKwkJCS5wcm9jbmFtZQk9ICJhY2NlcHRfcmFfbXR1IiwKKwkJCS5kYXRhCQk9ICZpcHY2X2RldmNvbmYuYWNjZXB0X3JhX210dSwKKwkJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCQkubW9kZQkJPSAwNjQ0LAorCQkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMsCisJCX0sCisJCXsKIAkJCS8qIHNlbnRpbmVsICovCiAJCX0KIAl9LApAQCAtNTM4OSwxMCArNTQzNiwxMSBAQAogCS5leGl0ID0gYWRkcmNvbmZfZXhpdF9uZXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJ0bmxfYWZfb3BzIGluZXQ2X29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcnRubF9hZl9vcHMgaW5ldDZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CiAJLmZhbWlseQkJICA9IEFGX0lORVQ2LAogCS5maWxsX2xpbmtfYWYJICA9IGluZXQ2X2ZpbGxfbGlua19hZiwKIAkuZ2V0X2xpbmtfYWZfc2l6ZSA9IGluZXQ2X2dldF9saW5rX2FmX3NpemUsCisJLnZhbGlkYXRlX2xpbmtfYWYgPSBpbmV0Nl92YWxpZGF0ZV9saW5rX2FmLAogCS5zZXRfbGlua19hZgkgID0gaW5ldDZfc2V0X2xpbmtfYWYsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRybGFiZWwuYyBiL25ldC9pcHY2L2FkZHJsYWJlbC5jCmluZGV4IGZkMGRjNDcuLmU0M2U3OWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJsYWJlbC5jCisrKyBiL25ldC9pcHY2L2FkZHJsYWJlbC5jCkBAIC00OTAsNyArNDkwLDggQEAKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAl9CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGlwNmFkZHJsYmxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCkBAIC01MTAsNyArNTExLDcgQEAKIAkJCQkJICAgICAgY2ItPm5saC0+bmxtc2dfc2VxLAogCQkJCQkgICAgICBSVE1fTkVXQUREUkxBQkVMLAogCQkJCQkgICAgICBOTE1fRl9NVUxUSSk7Ci0JCQlpZiAoZXJyIDw9IDApCisJCQlpZiAoZXJyIDwgMCkKIAkJCQlicmVhazsKIAkJfQogCQlpZHgrKzsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2RhdGFncmFtLmMgYi9uZXQvaXB2Ni9kYXRhZ3JhbS5jCmluZGV4IDQ5ZjVlNzMuLmMyMTViZTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2RhdGFncmFtLmMKKysrIGIvbmV0L2lwdjYvZGF0YWdyYW0uYwpAQCAtMzY5LDcgKzM2OSw3IEBACiAKIAlzZXJyID0gU0tCX0VYVF9FUlIoc2tiKTsKIAotCWlmIChzaW4pIHsKKwlpZiAoc2luICYmIHNrYi0+bGVuKSB7CiAJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5oID0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYik7CiAJCXNpbi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKIAkJc2luLT5zaW42X2Zsb3dpbmZvID0gMDsKQEAgLTM5NCw4ICszOTQsNyBAQAogCW1lbWNweSgmZXJyaGRyLmVlLCAmc2Vyci0+ZWUsIHNpemVvZihzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIpKTsKIAlzaW4gPSAmZXJyaGRyLm9mZmVuZGVyOwogCW1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7Ci0KLQlpZiAoc2Vyci0+ZWUuZWVfb3JpZ2luICE9IFNPX0VFX09SSUdJTl9MT0NBTCkgeworCWlmIChzZXJyLT5lZS5lZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX0xPQ0FMICYmIHNrYi0+bGVuKSB7CiAJCXNpbi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKIAkJaWYgKG5wLT5yeG9wdC5hbGwpIHsKIAkJCWlmIChzZXJyLT5lZS5lZV9vcmlnaW4gIT0gU09fRUVfT1JJR0lOX0lDTVAgJiYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2ljbXAuYyBiL25ldC9pcHY2L2ljbXAuYwppbmRleCBkNjc0MTUyLi5hNWU5NTE5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pY21wLmMKKysrIGIvbmV0L2lwdjYvaWNtcC5jCkBAIC00MjcsNyArNDI3LDcgQEAKIAkgKglEZXN0IGFkZHIgY2hlY2sKIAkgKi8KIAotCWlmICgoYWRkcl90eXBlICYgSVBWNl9BRERSX01VTFRJQ0FTVCB8fCBza2ItPnBrdF90eXBlICE9IFBBQ0tFVF9IT1NUKSkgeworCWlmIChhZGRyX3R5cGUgJiBJUFY2X0FERFJfTVVMVElDQVNUIHx8IHNrYi0+cGt0X3R5cGUgIT0gUEFDS0VUX0hPU1QpIHsKIAkJaWYgKHR5cGUgIT0gSUNNUFY2X1BLVF9UT09CSUcgJiYKIAkJICAgICEodHlwZSA9PSBJQ01QVjZfUEFSQU1QUk9CICYmCiAJCSAgICAgIGNvZGUgPT0gSUNNUFY2X1VOS19PUFRJT04gJiYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuYwppbmRleCBiMmQxODM4Li4yNjNlZjQxIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmMKKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCkBAIC0yNzcsNyArMjc3LDYgQEAKIAkJCXctPmxlYWYgPSBydDsKIAkJCXJldHVybiAxOwogCQl9Ci0JCVdBUk5fT04ocmVzID09IDApOwogCX0KIAl3LT5sZWFmID0gTlVMTDsKIAlyZXR1cm4gMDsKQEAgLTYzMCw0MSArNjI5LDY3IEBACiAJICAgICAgIFJURl9HQVRFV0FZOwogfQogCi1zdGF0aWMgaW50IGZpYjZfY29tbWl0X21ldHJpY3Moc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJICAgICAgIHN0cnVjdCBubGF0dHIgKm14LCBpbnQgbXhfbGVuKQorc3RhdGljIHZvaWQgZmliNl9jb3B5X21ldHJpY3ModTMyICptcCwgY29uc3Qgc3RydWN0IG14Nl9jb25maWcgKm14YykKIHsKLQlzdHJ1Y3QgbmxhdHRyICpubGE7Ci0JaW50IHJlbWFpbmluZzsKLQl1MzIgKm1wOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFJUQVhfTUFYOyBpKyspIHsKKwkJaWYgKHRlc3RfYml0KGksIG14Yy0+bXhfdmFsaWQpKQorCQkJbXBbaV0gPSBteGMtPm14W2ldOworCX0KK30KKworc3RhdGljIGludCBmaWI2X2NvbW1pdF9tZXRyaWNzKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IG14Nl9jb25maWcgKm14YykKK3sKKwlpZiAoIW14Yy0+bXgpCisJCXJldHVybiAwOwogCiAJaWYgKGRzdC0+ZmxhZ3MgJiBEU1RfSE9TVCkgewotCQltcCA9IGRzdF9tZXRyaWNzX3dyaXRlX3B0cihkc3QpOwotCX0gZWxzZSB7Ci0JCW1wID0ga3phbGxvYyhzaXplb2YodTMyKSAqIFJUQVhfTUFYLCBHRlBfQVRPTUlDKTsKLQkJaWYgKCFtcCkKKwkJdTMyICptcCA9IGRzdF9tZXRyaWNzX3dyaXRlX3B0cihkc3QpOworCisJCWlmICh1bmxpa2VseSghbXApKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWRzdF9pbml0X21ldHJpY3MoZHN0LCBtcCwgMCk7CisKKwkJZmliNl9jb3B5X21ldHJpY3MobXAsIG14Yyk7CisJfSBlbHNlIHsKKwkJZHN0X2luaXRfbWV0cmljcyhkc3QsIG14Yy0+bXgsIGZhbHNlKTsKKworCQkvKiBXZSd2ZSBzdG9sZW4gbXggbm93LiAqLworCQlteGMtPm14ID0gTlVMTDsKIAl9CiAKLQlubGFfZm9yX2VhY2hfYXR0cihubGEsIG14LCBteF9sZW4sIHJlbWFpbmluZykgewotCQlpbnQgdHlwZSA9IG5sYV90eXBlKG5sYSk7Ci0KLQkJaWYgKHR5cGUpIHsKLQkJCWlmICh0eXBlID4gUlRBWF9NQVgpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCW1wW3R5cGUgLSAxXSA9IG5sYV9nZXRfdTMyKG5sYSk7Ci0JCX0KLQl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGZpYjZfcHVyZ2VfcnQoc3RydWN0IHJ0Nl9pbmZvICpydCwgc3RydWN0IGZpYjZfbm9kZSAqZm4sCisJCQkgIHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlpZiAoYXRvbWljX3JlYWQoJnJ0LT5ydDZpX3JlZikgIT0gMSkgeworCQkvKiBUaGlzIHJvdXRlIGlzIHVzZWQgYXMgZHVtbXkgYWRkcmVzcyBob2xkZXIgaW4gc29tZSBzcGxpdAorCQkgKiBub2Rlcy4gSXQgaXMgbm90IGxlYWtlZCwgYnV0IGl0IHN0aWxsIGhvbGRzIG90aGVyIHJlc291cmNlcywKKwkJICogd2hpY2ggbXVzdCBiZSByZWxlYXNlZCBpbiB0aW1lLiBTbywgc2NhbiBhc2NlbmRhbnQgbm9kZXMKKwkJICogYW5kIHJlcGxhY2UgZHVtbXkgcmVmZXJlbmNlcyB0byB0aGlzIHJvdXRlIHdpdGggcmVmZXJlbmNlcworCQkgKiB0byBzdGlsbCBhbGl2ZSBvbmVzLgorCQkgKi8KKwkJd2hpbGUgKGZuKSB7CisJCQlpZiAoIShmbi0+Zm5fZmxhZ3MgJiBSVE5fUlRJTkZPKSAmJiBmbi0+bGVhZiA9PSBydCkgeworCQkJCWZuLT5sZWFmID0gZmliNl9maW5kX3ByZWZpeChuZXQsIGZuKTsKKwkJCQlhdG9taWNfaW5jKCZmbi0+bGVhZi0+cnQ2aV9yZWYpOworCQkJCXJ0Nl9yZWxlYXNlKHJ0KTsKKwkJCX0KKwkJCWZuID0gZm4tPnBhcmVudDsKKwkJfQorCQkvKiBObyBtb3JlIHJlZmVyZW5jZXMgYXJlIHBvc3NpYmxlIGF0IHRoaXMgcG9pbnQuICovCisJCUJVR19PTihhdG9taWNfcmVhZCgmcnQtPnJ0NmlfcmVmKSAhPSAxKTsKKwl9Cit9CisKIC8qCiAgKglJbnNlcnQgcm91dGluZyBpbmZvcm1hdGlvbiBpbiBhIG5vZGUuCiAgKi8KIAogc3RhdGljIGludCBmaWI2X2FkZF9ydDJub2RlKHN0cnVjdCBmaWI2X25vZGUgKmZuLCBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LAotCQkJICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbmxhdHRyICpteCwgaW50IG14X2xlbikKKwkJCSAgICBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywgc3RydWN0IG14Nl9jb25maWcgKm14YykKIHsKIAlzdHJ1Y3QgcnQ2X2luZm8gKml0ZXIgPSBOVUxMOwogCXN0cnVjdCBydDZfaW5mbyAqKmluczsKQEAgLTc3MywxMSArNzk4LDEwIEBACiAJCQlwcl93YXJuKCJOTE1fRl9DUkVBVEUgc2hvdWxkIGJlIHNldCB3aGVuIGNyZWF0aW5nIG5ldyByb3V0ZVxuIik7CiAKIGFkZDoKLQkJaWYgKG14KSB7Ci0JCQllcnIgPSBmaWI2X2NvbW1pdF9tZXRyaWNzKCZydC0+ZHN0LCBteCwgbXhfbGVuKTsKLQkJCWlmIChlcnIpCi0JCQkJcmV0dXJuIGVycjsKLQkJfQorCQllcnIgPSBmaWI2X2NvbW1pdF9tZXRyaWNzKCZydC0+ZHN0LCBteGMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwogCQlydC0+ZHN0LnJ0Nl9uZXh0ID0gaXRlcjsKIAkJKmlucyA9IHJ0OwogCQlydC0+cnQ2aV9ub2RlID0gZm47CkBAIC03OTcsMjEgKzgyMSwyMiBAQAogCQkJcHJfd2FybigiTkxNX0ZfUkVQTEFDRSBzZXQsIGJ1dCBubyBleGlzdGluZyBub2RlIGZvdW5kIVxuIik7CiAJCQlyZXR1cm4gLUVOT0VOVDsKIAkJfQotCQlpZiAobXgpIHsKLQkJCWVyciA9IGZpYjZfY29tbWl0X21ldHJpY3MoJnJ0LT5kc3QsIG14LCBteF9sZW4pOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQl9CisKKwkJZXJyID0gZmliNl9jb21taXRfbWV0cmljcygmcnQtPmRzdCwgbXhjKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKIAkJKmlucyA9IHJ0OwogCQlydC0+cnQ2aV9ub2RlID0gZm47CiAJCXJ0LT5kc3QucnQ2X25leHQgPSBpdGVyLT5kc3QucnQ2X25leHQ7CiAJCWF0b21pY19pbmMoJnJ0LT5ydDZpX3JlZik7CiAJCWluZXQ2X3J0X25vdGlmeShSVE1fTkVXUk9VVEUsIHJ0LCBpbmZvKTsKLQkJcnQ2X3JlbGVhc2UoaXRlcik7CiAJCWlmICghKGZuLT5mbl9mbGFncyAmIFJUTl9SVElORk8pKSB7CiAJCQlpbmZvLT5ubF9uZXQtPmlwdjYucnQ2X3N0YXRzLT5maWJfcm91dGVfbm9kZXMrKzsKIAkJCWZuLT5mbl9mbGFncyB8PSBSVE5fUlRJTkZPOwogCQl9CisJCWZpYjZfcHVyZ2VfcnQoaXRlciwgZm4sIGluZm8tPm5sX25ldCk7CisJCXJ0Nl9yZWxlYXNlKGl0ZXIpOwogCX0KIAogCXJldHVybiAwOwpAQCAtODM4LDggKzg2Myw4IEBACiAgKgl3aXRoIHNvdXJjZSBhZGRyIGluZm8gaW4gc3ViLXRyZWVzCiAgKi8KIAotaW50IGZpYjZfYWRkKHN0cnVjdCBmaWI2X25vZGUgKnJvb3QsIHN0cnVjdCBydDZfaW5mbyAqcnQsIHN0cnVjdCBubF9pbmZvICppbmZvLAotCSAgICAgc3RydWN0IG5sYXR0ciAqbXgsIGludCBteF9sZW4pCitpbnQgZmliNl9hZGQoc3RydWN0IGZpYjZfbm9kZSAqcm9vdCwgc3RydWN0IHJ0Nl9pbmZvICpydCwKKwkgICAgIHN0cnVjdCBubF9pbmZvICppbmZvLCBzdHJ1Y3QgbXg2X2NvbmZpZyAqbXhjKQogewogCXN0cnVjdCBmaWI2X25vZGUgKmZuLCAqcG4gPSBOVUxMOwogCWludCBlcnIgPSAtRU5PTUVNOwpAQCAtOTM0LDcgKzk1OSw3IEBACiAJfQogI2VuZGlmCiAKLQllcnIgPSBmaWI2X2FkZF9ydDJub2RlKGZuLCBydCwgaW5mbywgbXgsIG14X2xlbik7CisJZXJyID0gZmliNl9hZGRfcnQybm9kZShmbiwgcnQsIGluZm8sIG14Yyk7CiAJaWYgKCFlcnIpIHsKIAkJZmliNl9zdGFydF9nYyhpbmZvLT5ubF9uZXQsIHJ0KTsKIAkJaWYgKCEocnQtPnJ0NmlfZmxhZ3MgJiBSVEZfQ0FDSEUpKQpAQCAtMTMyMiwyNCArMTM0Nyw3IEBACiAJCWZuID0gZmliNl9yZXBhaXJfdHJlZShuZXQsIGZuKTsKIAl9CiAKLQlpZiAoYXRvbWljX3JlYWQoJnJ0LT5ydDZpX3JlZikgIT0gMSkgewotCQkvKiBUaGlzIHJvdXRlIGlzIHVzZWQgYXMgZHVtbXkgYWRkcmVzcyBob2xkZXIgaW4gc29tZSBzcGxpdAotCQkgKiBub2Rlcy4gSXQgaXMgbm90IGxlYWtlZCwgYnV0IGl0IHN0aWxsIGhvbGRzIG90aGVyIHJlc291cmNlcywKLQkJICogd2hpY2ggbXVzdCBiZSByZWxlYXNlZCBpbiB0aW1lLiBTbywgc2NhbiBhc2NlbmRhbnQgbm9kZXMKLQkJICogYW5kIHJlcGxhY2UgZHVtbXkgcmVmZXJlbmNlcyB0byB0aGlzIHJvdXRlIHdpdGggcmVmZXJlbmNlcwotCQkgKiB0byBzdGlsbCBhbGl2ZSBvbmVzLgotCQkgKi8KLQkJd2hpbGUgKGZuKSB7Ci0JCQlpZiAoIShmbi0+Zm5fZmxhZ3MgJiBSVE5fUlRJTkZPKSAmJiBmbi0+bGVhZiA9PSBydCkgewotCQkJCWZuLT5sZWFmID0gZmliNl9maW5kX3ByZWZpeChuZXQsIGZuKTsKLQkJCQlhdG9taWNfaW5jKCZmbi0+bGVhZi0+cnQ2aV9yZWYpOwotCQkJCXJ0Nl9yZWxlYXNlKHJ0KTsKLQkJCX0KLQkJCWZuID0gZm4tPnBhcmVudDsKLQkJfQotCQkvKiBObyBtb3JlIHJlZmVyZW5jZXMgYXJlIHBvc3NpYmxlIGF0IHRoaXMgcG9pbnQuICovCi0JCUJVR19PTihhdG9taWNfcmVhZCgmcnQtPnJ0NmlfcmVmKSAhPSAxKTsKLQl9CisJZmliNl9wdXJnZV9ydChydCwgZm4sIG5ldCk7CiAKIAlpbmV0Nl9ydF9ub3RpZnkoUlRNX0RFTFJPVVRFLCBydCwgaW5mbyk7CiAJcnQ2X3JlbGVhc2UocnQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2dyZS5jIGIvbmV0L2lwdjYvaXA2X2dyZS5jCmluZGV4IDEzY2RhNGMuLmJjMjhiN2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9ncmUuYworKysgYi9uZXQvaXB2Ni9pcDZfZ3JlLmMKQEAgLTQxNyw3ICs0MTcsNyBAQAogCQlpZiAoY29kZSA9PSBJQ01QVjZfSERSX0ZJRUxEKQogCQkJdGVsaSA9IGlwNl90bmxfcGFyc2VfdGx2X2VuY19saW0oc2tiLCBza2ItPmRhdGEpOwogCi0JCWlmICh0ZWxpICYmIHRlbGkgPT0gaW5mbyAtIDIpIHsKKwkJaWYgKHRlbGkgJiYgdGVsaSA9PSBiZTMyX3RvX2NwdShpbmZvKSAtIDIpIHsKIAkJCXRlbCA9IChzdHJ1Y3QgaXB2Nl90bHZfdG5sX2VuY19saW0gKikgJnNrYi0+ZGF0YVt0ZWxpXTsKIAkJCWlmICh0ZWwtPmVuY2FwX2xpbWl0ID09IDApIHsKIAkJCQluZXRfd2Fybl9yYXRlbGltaXRlZCgiJXM6IFRvbyBzbWFsbCBlbmNhcHN1bGF0aW9uIGxpbWl0IG9yIHJvdXRpbmcgbG9vcCBpbiB0dW5uZWwhXG4iLApAQCAtNDI5LDcgKzQyOSw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBJQ01QVjZfUEtUX1RPT0JJRzoKLQkJbXR1ID0gaW5mbyAtIG9mZnNldDsKKwkJbXR1ID0gYmUzMl90b19jcHUoaW5mbykgLSBvZmZzZXQ7CiAJCWlmIChtdHUgPCBJUFY2X01JTl9NVFUpCiAJCQltdHUgPSBJUFY2X01JTl9NVFU7CiAJCXQtPmRldi0+bXR1ID0gbXR1OwpAQCAtMTY2Miw2ICsxNjYyLDcgQEAKIAkuZGVsbGluawk9IGlwNmdyZV9kZWxsaW5rLAogCS5nZXRfc2l6ZQk9IGlwNmdyZV9nZXRfc2l6ZSwKIAkuZmlsbF9pbmZvCT0gaXA2Z3JlX2ZpbGxfaW5mbywKKwkuZ2V0X2xpbmtfbmV0CT0gaXA2X3RubF9nZXRfbGlua19uZXQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgaXA2Z3JlX3RhcF9vcHMgX19yZWFkX21vc3RseSA9IHsKQEAgLTE2NzUsNiArMTY3Niw3IEBACiAJLmNoYW5nZWxpbmsJPSBpcDZncmVfY2hhbmdlbGluaywKIAkuZ2V0X3NpemUJPSBpcDZncmVfZ2V0X3NpemUsCiAJLmZpbGxfaW5mbwk9IGlwNmdyZV9maWxsX2luZm8sCisJLmdldF9saW5rX25ldAk9IGlwNl90bmxfZ2V0X2xpbmtfbmV0LAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYyBiL25ldC9pcHY2L2lwNl9vdXRwdXQuYwppbmRleCBjZTY5YTEyLi5kMzNkZjRjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCkBAIC01MzcsMjAgKzUzNyw2IEBACiAJc2tiX2NvcHlfc2VjbWFyayh0bywgZnJvbSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlwdjZfc2VsZWN0X2lkZW50KHN0cnVjdCBmcmFnX2hkciAqZmhkciwgc3RydWN0IHJ0Nl9pbmZvICpydCkKLXsKLQlzdGF0aWMgdTMyIGlwNl9pZGVudHNfaGFzaHJuZCBfX3JlYWRfbW9zdGx5OwotCXUzMiBoYXNoLCBpZDsKLQotCW5ldF9nZXRfcmFuZG9tX29uY2UoJmlwNl9pZGVudHNfaGFzaHJuZCwgc2l6ZW9mKGlwNl9pZGVudHNfaGFzaHJuZCkpOwotCi0JaGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKCZydC0+cnQ2aV9kc3QuYWRkciwgaXA2X2lkZW50c19oYXNocm5kKTsKLQloYXNoID0gX19pcHY2X2FkZHJfamhhc2goJnJ0LT5ydDZpX3NyYy5hZGRyLCBoYXNoKTsKLQotCWlkID0gaXBfaWRlbnRzX3Jlc2VydmUoaGFzaCwgMSk7Ci0JZmhkci0+aWRlbnRpZmljYXRpb24gPSBodG9ubChpZCk7Ci19Ci0KIGludCBpcDZfZnJhZ21lbnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50ICgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqZnJhZzsKQEAgLTEwNDEsNiArMTAyNyw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChpcDZfc2tfZHN0X2xvb2t1cF9mbG93KTsKIAogc3RhdGljIGlubGluZSBpbnQgaXA2X3Vmb19hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssCisJCQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxdWV1ZSwKIAkJCWludCBnZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLAogCQkJaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiksCiAJCQl2b2lkICpmcm9tLCBpbnQgbGVuZ3RoLCBpbnQgaGhfbGVuLCBpbnQgZnJhZ2hlYWRlcmxlbiwKQEAgLTEwNTYsNyArMTA0Myw3IEBACiAJICogZGV2aWNlLCBzbyBjcmVhdGUgb25lIHNpbmdsZSBza2IgcGFja2V0IGNvbnRhaW5pbmcgY29tcGxldGUKIAkgKiB1ZHAgZGF0YWdyYW0KIAkgKi8KLQlza2IgPSBza2JfcGVla190YWlsKCZzay0+c2tfd3JpdGVfcXVldWUpOworCXNrYiA9IHNrYl9wZWVrX3RhaWwocXVldWUpOwogCWlmIChza2IgPT0gTlVMTCkgewogCQlza2IgPSBzb2NrX2FsbG9jX3NlbmRfc2tiKHNrLAogCQkJaGhfbGVuICsgZnJhZ2hlYWRlcmxlbiArIHRyYW5zaGRybGVuICsgMjAsCkBAIC0xMDc5LDcgKzEwNjYsNyBAQAogCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7CiAJCXNrYi0+Y3N1bSA9IDA7CiAKLQkJX19za2JfcXVldWVfdGFpbCgmc2stPnNrX3dyaXRlX3F1ZXVlLCBza2IpOworCQlfX3NrYl9xdWV1ZV90YWlsKHF1ZXVlLCBza2IpOwogCX0gZWxzZSBpZiAoc2tiX2lzX2dzbyhza2IpKSB7CiAJCWdvdG8gYXBwZW5kOwogCX0KQEAgLTExMzUsOTkgKzExMjIsMTA2IEBACiAJfQogfQogCi1pbnQgaXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzaywgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sCi0JaW50IG9mZnNldCwgaW50IGxlbiwgaW50IG9kZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiksCi0Jdm9pZCAqZnJvbSwgaW50IGxlbmd0aCwgaW50IHRyYW5zaGRybGVuLAotCWludCBobGltaXQsIGludCB0Y2xhc3MsIHN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0LCBzdHJ1Y3QgZmxvd2k2ICpmbDYsCi0Jc3RydWN0IHJ0Nl9pbmZvICpydCwgdW5zaWduZWQgaW50IGZsYWdzLCBpbnQgZG9udGZyYWcpCitzdGF0aWMgaW50IGlwNl9zZXR1cF9jb3JrKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrLAorCQkJICBzdHJ1Y3QgaW5ldDZfY29yayAqdjZfY29yaywKKwkJCSAgaW50IGhsaW1pdCwgaW50IHRjbGFzcywgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQsCisJCQkgIHN0cnVjdCBydDZfaW5mbyAqcnQsIHN0cnVjdCBmbG93aTYgKmZsNikKIHsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwotCXN0cnVjdCBpbmV0X2NvcmsgKmNvcms7CisJdW5zaWduZWQgaW50IG10dTsKKworCS8qCisJICogc2V0dXAgZm9yIGNvcmtpbmcKKwkgKi8KKwlpZiAob3B0KSB7CisJCWlmIChXQVJOX09OKHY2X2NvcmstPm9wdCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl2Nl9jb3JrLT5vcHQgPSBremFsbG9jKG9wdC0+dG90X2xlbiwgc2stPnNrX2FsbG9jYXRpb24pOworCQlpZiAodW5saWtlbHkodjZfY29yay0+b3B0ID09IE5VTEwpKQorCQkJcmV0dXJuIC1FTk9CVUZTOworCisJCXY2X2NvcmstPm9wdC0+dG90X2xlbiA9IG9wdC0+dG90X2xlbjsKKwkJdjZfY29yay0+b3B0LT5vcHRfZmxlbiA9IG9wdC0+b3B0X2ZsZW47CisJCXY2X2NvcmstPm9wdC0+b3B0X25mbGVuID0gb3B0LT5vcHRfbmZsZW47CisKKwkJdjZfY29yay0+b3B0LT5kc3Qwb3B0ID0gaXA2X29wdF9kdXAob3B0LT5kc3Qwb3B0LAorCQkJCQkJICAgIHNrLT5za19hbGxvY2F0aW9uKTsKKwkJaWYgKG9wdC0+ZHN0MG9wdCAmJiAhdjZfY29yay0+b3B0LT5kc3Qwb3B0KQorCQkJcmV0dXJuIC1FTk9CVUZTOworCisJCXY2X2NvcmstPm9wdC0+ZHN0MW9wdCA9IGlwNl9vcHRfZHVwKG9wdC0+ZHN0MW9wdCwKKwkJCQkJCSAgICBzay0+c2tfYWxsb2NhdGlvbik7CisJCWlmIChvcHQtPmRzdDFvcHQgJiYgIXY2X2NvcmstPm9wdC0+ZHN0MW9wdCkKKwkJCXJldHVybiAtRU5PQlVGUzsKKworCQl2Nl9jb3JrLT5vcHQtPmhvcG9wdCA9IGlwNl9vcHRfZHVwKG9wdC0+aG9wb3B0LAorCQkJCQkJICAgc2stPnNrX2FsbG9jYXRpb24pOworCQlpZiAob3B0LT5ob3BvcHQgJiYgIXY2X2NvcmstPm9wdC0+aG9wb3B0KQorCQkJcmV0dXJuIC1FTk9CVUZTOworCisJCXY2X2NvcmstPm9wdC0+c3JjcnQgPSBpcDZfcnRoZHJfZHVwKG9wdC0+c3JjcnQsCisJCQkJCQkgICAgc2stPnNrX2FsbG9jYXRpb24pOworCQlpZiAob3B0LT5zcmNydCAmJiAhdjZfY29yay0+b3B0LT5zcmNydCkKKwkJCXJldHVybiAtRU5PQlVGUzsKKworCQkvKiBuZWVkIHNvdXJjZSBhZGRyZXNzIGFib3ZlIG1peWF6YXdhKi8KKwl9CisJZHN0X2hvbGQoJnJ0LT5kc3QpOworCWNvcmstPmJhc2UuZHN0ID0gJnJ0LT5kc3Q7CisJY29yay0+ZmwudS5pcDYgPSAqZmw2OworCXY2X2NvcmstPmhvcF9saW1pdCA9IGhsaW1pdDsKKwl2Nl9jb3JrLT50Y2xhc3MgPSB0Y2xhc3M7CisJaWYgKHJ0LT5kc3QuZmxhZ3MgJiBEU1RfWEZSTV9UVU5ORUwpCisJCW10dSA9IG5wLT5wbXR1ZGlzYyA+PSBJUFY2X1BNVFVESVNDX1BST0JFID8KKwkJICAgICAgcnQtPmRzdC5kZXYtPm10dSA6IGRzdF9tdHUoJnJ0LT5kc3QpOworCWVsc2UKKwkJbXR1ID0gbnAtPnBtdHVkaXNjID49IElQVjZfUE1UVURJU0NfUFJPQkUgPworCQkgICAgICBydC0+ZHN0LmRldi0+bXR1IDogZHN0X210dShydC0+ZHN0LnBhdGgpOworCWlmIChucC0+ZnJhZ19zaXplIDwgbXR1KSB7CisJCWlmIChucC0+ZnJhZ19zaXplKQorCQkJbXR1ID0gbnAtPmZyYWdfc2l6ZTsKKwl9CisJY29yay0+YmFzZS5mcmFnc2l6ZSA9IG10dTsKKwlpZiAoZHN0X2FsbGZyYWcocnQtPmRzdC5wYXRoKSkKKwkJY29yay0+YmFzZS5mbGFncyB8PSBJUENPUktfQUxMRlJBRzsKKwljb3JrLT5iYXNlLmxlbmd0aCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2lwNl9hcHBlbmRfZGF0YShzdHJ1Y3Qgc29jayAqc2ssCisJCQkgICAgIHN0cnVjdCBmbG93aTYgKmZsNiwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsCisJCQkgICAgIHN0cnVjdCBpbmV0X2NvcmsgKmNvcmssCisJCQkgICAgIHN0cnVjdCBpbmV0Nl9jb3JrICp2Nl9jb3JrLAorCQkJICAgICBzdHJ1Y3QgcGFnZV9mcmFnICpwZnJhZywKKwkJCSAgICAgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsCisJCQkJCSBpbnQgbGVuLCBpbnQgb2RkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSwKKwkJCSAgICAgdm9pZCAqZnJvbSwgaW50IGxlbmd0aCwgaW50IHRyYW5zaGRybGVuLAorCQkJICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCBkb250ZnJhZykKK3sKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqc2tiX3ByZXYgPSBOVUxMOwogCXVuc2lnbmVkIGludCBtYXhmcmFnbGVuLCBmcmFnaGVhZGVybGVuLCBtdHUsIG9yaWdfbXR1OwotCWludCBleHRoZHJsZW47Ci0JaW50IGRzdF9leHRoZHJsZW47CisJaW50IGV4dGhkcmxlbiA9IDA7CisJaW50IGRzdF9leHRoZHJsZW4gPSAwOwogCWludCBoaF9sZW47CiAJaW50IGNvcHk7CiAJaW50IGVycjsKIAlpbnQgb2Zmc2V0ID0gMDsKIAlfX3U4IHR4X2ZsYWdzID0gMDsKIAl1MzIgdHNrZXkgPSAwOworCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopY29yay0+ZHN0OworCXN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0ID0gdjZfY29yay0+b3B0OworCWludCBjc3VtbW9kZSA9IENIRUNLU1VNX05PTkU7CiAKLQlpZiAoZmxhZ3MmTVNHX1BST0JFKQotCQlyZXR1cm4gMDsKLQljb3JrID0gJmluZXQtPmNvcmsuYmFzZTsKLQlpZiAoc2tiX3F1ZXVlX2VtcHR5KCZzay0+c2tfd3JpdGVfcXVldWUpKSB7Ci0JCS8qCi0JCSAqIHNldHVwIGZvciBjb3JraW5nCi0JCSAqLwotCQlpZiAob3B0KSB7Ci0JCQlpZiAoV0FSTl9PTihucC0+Y29yay5vcHQpKQotCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCQlucC0+Y29yay5vcHQgPSBremFsbG9jKG9wdC0+dG90X2xlbiwgc2stPnNrX2FsbG9jYXRpb24pOwotCQkJaWYgKHVubGlrZWx5KG5wLT5jb3JrLm9wdCA9PSBOVUxMKSkKLQkJCQlyZXR1cm4gLUVOT0JVRlM7Ci0KLQkJCW5wLT5jb3JrLm9wdC0+dG90X2xlbiA9IG9wdC0+dG90X2xlbjsKLQkJCW5wLT5jb3JrLm9wdC0+b3B0X2ZsZW4gPSBvcHQtPm9wdF9mbGVuOwotCQkJbnAtPmNvcmsub3B0LT5vcHRfbmZsZW4gPSBvcHQtPm9wdF9uZmxlbjsKLQotCQkJbnAtPmNvcmsub3B0LT5kc3Qwb3B0ID0gaXA2X29wdF9kdXAob3B0LT5kc3Qwb3B0LAotCQkJCQkJCSAgICBzay0+c2tfYWxsb2NhdGlvbik7Ci0JCQlpZiAob3B0LT5kc3Qwb3B0ICYmICFucC0+Y29yay5vcHQtPmRzdDBvcHQpCi0JCQkJcmV0dXJuIC1FTk9CVUZTOwotCi0JCQlucC0+Y29yay5vcHQtPmRzdDFvcHQgPSBpcDZfb3B0X2R1cChvcHQtPmRzdDFvcHQsCi0JCQkJCQkJICAgIHNrLT5za19hbGxvY2F0aW9uKTsKLQkJCWlmIChvcHQtPmRzdDFvcHQgJiYgIW5wLT5jb3JrLm9wdC0+ZHN0MW9wdCkKLQkJCQlyZXR1cm4gLUVOT0JVRlM7Ci0KLQkJCW5wLT5jb3JrLm9wdC0+aG9wb3B0ID0gaXA2X29wdF9kdXAob3B0LT5ob3BvcHQsCi0JCQkJCQkJICAgc2stPnNrX2FsbG9jYXRpb24pOwotCQkJaWYgKG9wdC0+aG9wb3B0ICYmICFucC0+Y29yay5vcHQtPmhvcG9wdCkKLQkJCQlyZXR1cm4gLUVOT0JVRlM7Ci0KLQkJCW5wLT5jb3JrLm9wdC0+c3JjcnQgPSBpcDZfcnRoZHJfZHVwKG9wdC0+c3JjcnQsCi0JCQkJCQkJICAgIHNrLT5za19hbGxvY2F0aW9uKTsKLQkJCWlmIChvcHQtPnNyY3J0ICYmICFucC0+Y29yay5vcHQtPnNyY3J0KQotCQkJCXJldHVybiAtRU5PQlVGUzsKLQotCQkJLyogbmVlZCBzb3VyY2UgYWRkcmVzcyBhYm92ZSBtaXlhemF3YSovCi0JCX0KLQkJZHN0X2hvbGQoJnJ0LT5kc3QpOwotCQljb3JrLT5kc3QgPSAmcnQtPmRzdDsKLQkJaW5ldC0+Y29yay5mbC51LmlwNiA9ICpmbDY7Ci0JCW5wLT5jb3JrLmhvcF9saW1pdCA9IGhsaW1pdDsKLQkJbnAtPmNvcmsudGNsYXNzID0gdGNsYXNzOwotCQlpZiAocnQtPmRzdC5mbGFncyAmIERTVF9YRlJNX1RVTk5FTCkKLQkJCW10dSA9IG5wLT5wbXR1ZGlzYyA+PSBJUFY2X1BNVFVESVNDX1BST0JFID8KLQkJCSAgICAgIHJ0LT5kc3QuZGV2LT5tdHUgOiBkc3RfbXR1KCZydC0+ZHN0KTsKLQkJZWxzZQotCQkJbXR1ID0gbnAtPnBtdHVkaXNjID49IElQVjZfUE1UVURJU0NfUFJPQkUgPwotCQkJICAgICAgcnQtPmRzdC5kZXYtPm10dSA6IGRzdF9tdHUocnQtPmRzdC5wYXRoKTsKLQkJaWYgKG5wLT5mcmFnX3NpemUgPCBtdHUpIHsKLQkJCWlmIChucC0+ZnJhZ19zaXplKQotCQkJCW10dSA9IG5wLT5mcmFnX3NpemU7Ci0JCX0KLQkJY29yay0+ZnJhZ3NpemUgPSBtdHU7Ci0JCWlmIChkc3RfYWxsZnJhZyhydC0+ZHN0LnBhdGgpKQotCQkJY29yay0+ZmxhZ3MgfD0gSVBDT1JLX0FMTEZSQUc7Ci0JCWNvcmstPmxlbmd0aCA9IDA7Ci0JCWV4dGhkcmxlbiA9IChvcHQgPyBvcHQtPm9wdF9mbGVuIDogMCk7Ci0JCWxlbmd0aCArPSBleHRoZHJsZW47Ci0JCXRyYW5zaGRybGVuICs9IGV4dGhkcmxlbjsKKwlza2IgPSBza2JfcGVla190YWlsKHF1ZXVlKTsKKwlpZiAoIXNrYikgeworCQlleHRoZHJsZW4gPSBvcHQgPyBvcHQtPm9wdF9mbGVuIDogMDsKIAkJZHN0X2V4dGhkcmxlbiA9IHJ0LT5kc3QuaGVhZGVyX2xlbiAtIHJ0LT5ydDZpX25maGVhZGVyX2xlbjsKLQl9IGVsc2UgewotCQlydCA9IChzdHJ1Y3QgcnQ2X2luZm8gKiljb3JrLT5kc3Q7Ci0JCWZsNiA9ICZpbmV0LT5jb3JrLmZsLnUuaXA2OwotCQlvcHQgPSBucC0+Y29yay5vcHQ7Ci0JCXRyYW5zaGRybGVuID0gMDsKLQkJZXh0aGRybGVuID0gMDsKLQkJZHN0X2V4dGhkcmxlbiA9IDA7Ci0JCW10dSA9IGNvcmstPmZyYWdzaXplOwogCX0KKworCW10dSA9IGNvcmstPmZyYWdzaXplOwogCW9yaWdfbXR1ID0gbXR1OwogCiAJaGhfbGVuID0gTExfUkVTRVJWRURfU1BBQ0UocnQtPmRzdC5kZXYpOwpAQCAtMTI3Niw2ICsxMjcwLDE0IEBACiAJCQl0c2tleSA9IHNrLT5za190c2tleSsrOwogCX0KIAorCS8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IGFuZCBvbmx5IHBhY2tldCBhbmQgZGV2aWNlCisJICogc3VwcG9ydHMgY2hlY2tzdW0gb2ZmbG9hZGluZywgbGV0J3MgdXNlIGl0LgorCSAqLworCWlmICghc2tiICYmCisJICAgIGxlbmd0aCArIGZyYWdoZWFkZXJsZW4gPCBtdHUgJiYKKwkgICAgcnQtPmRzdC5kZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9WNl9DU1VNICYmCisJICAgICFleHRoZHJsZW4pCisJCWNzdW1tb2RlID0gQ0hFQ0tTVU1fUEFSVElBTDsKIAkvKgogCSAqIExldCdzIHRyeSB1c2luZyBhcyBtdWNoIHNwYWNlIGFzIHBvc3NpYmxlLgogCSAqIFVzZSBNVFUgaWYgdG90YWwgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlIGZpdHMgaW50byB0aGUgTVRVLgpAQCAtMTI5MiwxMyArMTI5NCwxMiBAQAogCSAqIC0teW9zaGZ1amkKIAkgKi8KIAotCXNrYiA9IHNrYl9wZWVrX3RhaWwoJnNrLT5za193cml0ZV9xdWV1ZSk7CiAJY29yay0+bGVuZ3RoICs9IGxlbmd0aDsKIAlpZiAoKChsZW5ndGggPiBtdHUpIHx8CiAJICAgICAoc2tiICYmIHNrYl9pc19nc28oc2tiKSkpICYmCiAJICAgIChzay0+c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19VRFApICYmCiAJICAgIChydC0+ZHN0LmRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1VGTykpIHsKLQkJZXJyID0gaXA2X3Vmb19hcHBlbmRfZGF0YShzaywgZ2V0ZnJhZywgZnJvbSwgbGVuZ3RoLAorCQllcnIgPSBpcDZfdWZvX2FwcGVuZF9kYXRhKHNrLCBxdWV1ZSwgZ2V0ZnJhZywgZnJvbSwgbGVuZ3RoLAogCQkJCQkgIGhoX2xlbiwgZnJhZ2hlYWRlcmxlbiwKIAkJCQkJICB0cmFuc2hkcmxlbiwgbXR1LCBmbGFncywgcnQpOwogCQlpZiAoZXJyKQpAQCAtMTM4OSw3ICsxMzkwLDcgQEAKIAkJCSAqCUZpbGwgaW4gdGhlIGNvbnRyb2wgc3RydWN0dXJlcwogCQkJICovCiAJCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7Ci0JCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQlza2ItPmlwX3N1bW1lZCA9IGNzdW1tb2RlOwogCQkJc2tiLT5jc3VtID0gMDsKIAkJCS8qIHJlc2VydmUgZm9yIGZyYWdtZW50YXRpb24gYW5kIGlwc2VjIGhlYWRlciAqLwogCQkJc2tiX3Jlc2VydmUoc2tiLCBoaF9sZW4gKyBzaXplb2Yoc3RydWN0IGZyYWdfaGRyKSArCkBAIC0xNDM5LDcgKzE0NDAsNyBAQAogCQkJLyoKIAkJCSAqIFB1dCB0aGUgcGFja2V0IG9uIHRoZSBwZW5kaW5nIHF1ZXVlCiAJCQkgKi8KLQkJCV9fc2tiX3F1ZXVlX3RhaWwoJnNrLT5za193cml0ZV9xdWV1ZSwgc2tiKTsKKwkJCV9fc2tiX3F1ZXVlX3RhaWwocXVldWUsIHNrYik7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0xNDU4LDcgKzE0NTksNiBAQAogCQkJfQogCQl9IGVsc2UgewogCQkJaW50IGkgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOwotCQkJc3RydWN0IHBhZ2VfZnJhZyAqcGZyYWcgPSBza19wYWdlX2ZyYWcoc2spOwogCiAJCQllcnIgPSAtRU5PTUVNOwogCQkJaWYgKCFza19wYWdlX2ZyYWdfcmVmaWxsKHNrLCBwZnJhZykpCkBAIC0xNTAxLDQzICsxNTAxLDgxIEBACiAJSVA2X0lOQ19TVEFUUyhzb2NrX25ldChzayksIHJ0LT5ydDZpX2lkZXYsIElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKIAlyZXR1cm4gZXJyOwogfQorCitpbnQgaXA2X2FwcGVuZF9kYXRhKHN0cnVjdCBzb2NrICpzaywKKwkJICAgIGludCBnZXRmcmFnKHZvaWQgKmZyb20sIGNoYXIgKnRvLCBpbnQgb2Zmc2V0LCBpbnQgbGVuLAorCQkJCWludCBvZGQsIHN0cnVjdCBza19idWZmICpza2IpLAorCQkgICAgdm9pZCAqZnJvbSwgaW50IGxlbmd0aCwgaW50IHRyYW5zaGRybGVuLCBpbnQgaGxpbWl0LAorCQkgICAgaW50IHRjbGFzcywgc3RydWN0IGlwdjZfdHhvcHRpb25zICpvcHQsIHN0cnVjdCBmbG93aTYgKmZsNiwKKwkJICAgIHN0cnVjdCBydDZfaW5mbyAqcnQsIHVuc2lnbmVkIGludCBmbGFncywgaW50IGRvbnRmcmFnKQoreworCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKKwlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CisJaW50IGV4dGhkcmxlbjsKKwlpbnQgZXJyOworCisJaWYgKGZsYWdzJk1TR19QUk9CRSkKKwkJcmV0dXJuIDA7CisJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3dyaXRlX3F1ZXVlKSkgeworCQkvKgorCQkgKiBzZXR1cCBmb3IgY29ya2luZworCQkgKi8KKwkJZXJyID0gaXA2X3NldHVwX2Nvcmsoc2ssICZpbmV0LT5jb3JrLCAmbnAtPmNvcmssIGhsaW1pdCwKKwkJCQkgICAgIHRjbGFzcywgb3B0LCBydCwgZmw2KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJZXh0aGRybGVuID0gKG9wdCA/IG9wdC0+b3B0X2ZsZW4gOiAwKTsKKwkJbGVuZ3RoICs9IGV4dGhkcmxlbjsKKwkJdHJhbnNoZHJsZW4gKz0gZXh0aGRybGVuOworCX0gZWxzZSB7CisJCWZsNiA9ICZpbmV0LT5jb3JrLmZsLnUuaXA2OworCQl0cmFuc2hkcmxlbiA9IDA7CisJfQorCisJcmV0dXJuIF9faXA2X2FwcGVuZF9kYXRhKHNrLCBmbDYsICZzay0+c2tfd3JpdGVfcXVldWUsICZpbmV0LT5jb3JrLmJhc2UsCisJCQkJICZucC0+Y29yaywgc2tfcGFnZV9mcmFnKHNrKSwgZ2V0ZnJhZywKKwkJCQkgZnJvbSwgbGVuZ3RoLCB0cmFuc2hkcmxlbiwgZmxhZ3MsIGRvbnRmcmFnKTsKK30KIEVYUE9SVF9TWU1CT0xfR1BMKGlwNl9hcHBlbmRfZGF0YSk7CiAKLXN0YXRpYyB2b2lkIGlwNl9jb3JrX3JlbGVhc2Uoc3RydWN0IGluZXRfc29jayAqaW5ldCwgc3RydWN0IGlwdjZfcGluZm8gKm5wKQorc3RhdGljIHZvaWQgaXA2X2NvcmtfcmVsZWFzZShzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgKmNvcmssCisJCQkgICAgIHN0cnVjdCBpbmV0Nl9jb3JrICp2Nl9jb3JrKQogewotCWlmIChucC0+Y29yay5vcHQpIHsKLQkJa2ZyZWUobnAtPmNvcmsub3B0LT5kc3Qwb3B0KTsKLQkJa2ZyZWUobnAtPmNvcmsub3B0LT5kc3Qxb3B0KTsKLQkJa2ZyZWUobnAtPmNvcmsub3B0LT5ob3BvcHQpOwotCQlrZnJlZShucC0+Y29yay5vcHQtPnNyY3J0KTsKLQkJa2ZyZWUobnAtPmNvcmsub3B0KTsKLQkJbnAtPmNvcmsub3B0ID0gTlVMTDsKKwlpZiAodjZfY29yay0+b3B0KSB7CisJCWtmcmVlKHY2X2NvcmstPm9wdC0+ZHN0MG9wdCk7CisJCWtmcmVlKHY2X2NvcmstPm9wdC0+ZHN0MW9wdCk7CisJCWtmcmVlKHY2X2NvcmstPm9wdC0+aG9wb3B0KTsKKwkJa2ZyZWUodjZfY29yay0+b3B0LT5zcmNydCk7CisJCWtmcmVlKHY2X2NvcmstPm9wdCk7CisJCXY2X2NvcmstPm9wdCA9IE5VTEw7CiAJfQogCi0JaWYgKGluZXQtPmNvcmsuYmFzZS5kc3QpIHsKLQkJZHN0X3JlbGVhc2UoaW5ldC0+Y29yay5iYXNlLmRzdCk7Ci0JCWluZXQtPmNvcmsuYmFzZS5kc3QgPSBOVUxMOwotCQlpbmV0LT5jb3JrLmJhc2UuZmxhZ3MgJj0gfklQQ09SS19BTExGUkFHOworCWlmIChjb3JrLT5iYXNlLmRzdCkgeworCQlkc3RfcmVsZWFzZShjb3JrLT5iYXNlLmRzdCk7CisJCWNvcmstPmJhc2UuZHN0ID0gTlVMTDsKKwkJY29yay0+YmFzZS5mbGFncyAmPSB+SVBDT1JLX0FMTEZSQUc7CiAJfQotCW1lbXNldCgmaW5ldC0+Y29yay5mbCwgMCwgc2l6ZW9mKGluZXQtPmNvcmsuZmwpKTsKKwltZW1zZXQoJmNvcmstPmZsLCAwLCBzaXplb2YoY29yay0+ZmwpKTsKIH0KIAotaW50IGlwNl9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaykKK3N0cnVjdCBza19idWZmICpfX2lwNl9tYWtlX3NrYihzdHJ1Y3Qgc29jayAqc2ssCisJCQkgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqcXVldWUsCisJCQkgICAgICAgc3RydWN0IGluZXRfY29ya19mdWxsICpjb3JrLAorCQkJICAgICAgIHN0cnVjdCBpbmV0Nl9jb3JrICp2Nl9jb3JrKQogewogCXN0cnVjdCBza19idWZmICpza2IsICp0bXBfc2tiOwogCXN0cnVjdCBza19idWZmICoqdGFpbF9za2I7CiAJc3RydWN0IGluNl9hZGRyIGZpbmFsX2RzdF9idWYsICpmaW5hbF9kc3QgPSAmZmluYWxfZHN0X2J1ZjsKLQlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlzdHJ1Y3QgaXB2NmhkciAqaGRyOwotCXN0cnVjdCBpcHY2X3R4b3B0aW9ucyAqb3B0ID0gbnAtPmNvcmsub3B0OwotCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopaW5ldC0+Y29yay5iYXNlLmRzdDsKLQlzdHJ1Y3QgZmxvd2k2ICpmbDYgPSAmaW5ldC0+Y29yay5mbC51LmlwNjsKKwlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCA9IHY2X2NvcmstPm9wdDsKKwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKWNvcmstPmJhc2UuZHN0OworCXN0cnVjdCBmbG93aTYgKmZsNiA9ICZjb3JrLT5mbC51LmlwNjsKIAl1bnNpZ25lZCBjaGFyIHByb3RvID0gZmw2LT5mbG93aTZfcHJvdG87Ci0JaW50IGVyciA9IDA7CiAKLQlza2IgPSBfX3NrYl9kZXF1ZXVlKCZzay0+c2tfd3JpdGVfcXVldWUpOworCXNrYiA9IF9fc2tiX2RlcXVldWUocXVldWUpOwogCWlmIChza2IgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAJdGFpbF9za2IgPSAmKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ19saXN0KTsKQEAgLTE1NDUsNyArMTU4Myw3IEBACiAJLyogbW92ZSBza2ItPmRhdGEgdG8gaXAgaGVhZGVyIGZyb20gZXh0IGhlYWRlciAqLwogCWlmIChza2ItPmRhdGEgPCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSkKIAkJX19za2JfcHVsbChza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpKTsKLQl3aGlsZSAoKHRtcF9za2IgPSBfX3NrYl9kZXF1ZXVlKCZzay0+c2tfd3JpdGVfcXVldWUpKSAhPSBOVUxMKSB7CisJd2hpbGUgKCh0bXBfc2tiID0gX19za2JfZGVxdWV1ZShxdWV1ZSkpICE9IE5VTEwpIHsKIAkJX19za2JfcHVsbCh0bXBfc2tiLCBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYikpOwogCQkqdGFpbF9za2IgPSB0bXBfc2tiOwogCQl0YWlsX3NrYiA9ICYodG1wX3NrYi0+bmV4dCk7CkBAIC0xNTcwLDEwICsxNjA4LDEwIEBACiAJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CiAJaGRyID0gaXB2Nl9oZHIoc2tiKTsKIAotCWlwNl9mbG93X2hkcihoZHIsIG5wLT5jb3JrLnRjbGFzcywKKwlpcDZfZmxvd19oZHIoaGRyLCB2Nl9jb3JrLT50Y2xhc3MsCiAJCSAgICAgaXA2X21ha2VfZmxvd2xhYmVsKG5ldCwgc2tiLCBmbDYtPmZsb3dsYWJlbCwKIAkJCQkJbnAtPmF1dG9mbG93bGFiZWwpKTsKLQloZHItPmhvcF9saW1pdCA9IG5wLT5jb3JrLmhvcF9saW1pdDsKKwloZHItPmhvcF9saW1pdCA9IHY2X2NvcmstPmhvcF9saW1pdDsKIAloZHItPm5leHRoZHIgPSBwcm90bzsKIAloZHItPnNhZGRyID0gZmw2LT5zYWRkcjsKIAloZHItPmRhZGRyID0gKmZpbmFsX2RzdDsKQEAgLTE1OTAsMzQgKzE2MjgsMTA0IEBACiAJCUlDTVA2X0lOQ19TVEFUUyhuZXQsIGlkZXYsIElDTVA2X01JQl9PVVRNU0dTKTsKIAl9CiAKKwlpcDZfY29ya19yZWxlYXNlKGNvcmssIHY2X2NvcmspOworb3V0OgorCXJldHVybiBza2I7Cit9CisKK2ludCBpcDZfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKKwlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gKHN0cnVjdCBydDZfaW5mbyAqKXNrYl9kc3Qoc2tiKTsKKwlpbnQgZXJyOworCiAJZXJyID0gaXA2X2xvY2FsX291dChza2IpOwogCWlmIChlcnIpIHsKIAkJaWYgKGVyciA+IDApCiAJCQllcnIgPSBuZXRfeG1pdF9lcnJubyhlcnIpOwogCQlpZiAoZXJyKQotCQkJZ290byBlcnJvcjsKKwkJCUlQNl9JTkNfU1RBVFMobmV0LCBydC0+cnQ2aV9pZGV2LAorCQkJCSAgICAgIElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKIAl9CiAKLW91dDoKLQlpcDZfY29ya19yZWxlYXNlKGluZXQsIG5wKTsKIAlyZXR1cm4gZXJyOwotZXJyb3I6Ci0JSVA2X0lOQ19TVEFUUyhuZXQsIHJ0LT5ydDZpX2lkZXYsIElQU1RBVFNfTUlCX09VVERJU0NBUkRTKTsKLQlnb3RvIG91dDsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwNl9wdXNoX3BlbmRpbmdfZnJhbWVzKTsKIAotdm9pZCBpcDZfZmx1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKQoraW50IGlwNl9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0Jd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlX3RhaWwoJnNrLT5za193cml0ZV9xdWV1ZSkpICE9IE5VTEwpIHsKKwlza2IgPSBpcDZfZmluaXNoX3NrYihzayk7CisJaWYgKCFza2IpCisJCXJldHVybiAwOworCisJcmV0dXJuIGlwNl9zZW5kX3NrYihza2IpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXA2X3B1c2hfcGVuZGluZ19mcmFtZXMpOworCitzdGF0aWMgdm9pZCBfX2lwNl9mbHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2ssCisJCQkJICAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVlLAorCQkJCSAgICAgICBzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgKmNvcmssCisJCQkJICAgICAgIHN0cnVjdCBpbmV0Nl9jb3JrICp2Nl9jb3JrKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWVfdGFpbChxdWV1ZSkpICE9IE5VTEwpIHsKIAkJaWYgKHNrYl9kc3Qoc2tiKSkKIAkJCUlQNl9JTkNfU1RBVFMoc29ja19uZXQoc2spLCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSwKIAkJCQkgICAgICBJUFNUQVRTX01JQl9PVVRESVNDQVJEUyk7CiAJCWtmcmVlX3NrYihza2IpOwogCX0KIAotCWlwNl9jb3JrX3JlbGVhc2UoaW5ldF9zayhzayksIGluZXQ2X3NrKHNrKSk7CisJaXA2X2NvcmtfcmVsZWFzZShjb3JrLCB2Nl9jb3JrKTsKK30KKwordm9pZCBpcDZfZmx1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKQoreworCV9faXA2X2ZsdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCAmc2stPnNrX3dyaXRlX3F1ZXVlLAorCQkJCSAgICZpbmV0X3NrKHNrKS0+Y29yaywgJmluZXQ2X3NrKHNrKS0+Y29yayk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpcDZfZmx1c2hfcGVuZGluZ19mcmFtZXMpOworCitzdHJ1Y3Qgc2tfYnVmZiAqaXA2X21ha2Vfc2tiKHN0cnVjdCBzb2NrICpzaywKKwkJCSAgICAgaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsCisJCQkJCSBpbnQgbGVuLCBpbnQgb2RkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSwKKwkJCSAgICAgdm9pZCAqZnJvbSwgaW50IGxlbmd0aCwgaW50IHRyYW5zaGRybGVuLAorCQkJICAgICBpbnQgaGxpbWl0LCBpbnQgdGNsYXNzLAorCQkJICAgICBzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdCwgc3RydWN0IGZsb3dpNiAqZmw2LAorCQkJICAgICBzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCB1bnNpZ25lZCBpbnQgZmxhZ3MsCisJCQkgICAgIGludCBkb250ZnJhZykKK3sKKwlzdHJ1Y3QgaW5ldF9jb3JrX2Z1bGwgY29yazsKKwlzdHJ1Y3QgaW5ldDZfY29yayB2Nl9jb3JrOworCXN0cnVjdCBza19idWZmX2hlYWQgcXVldWU7CisJaW50IGV4dGhkcmxlbiA9IChvcHQgPyBvcHQtPm9wdF9mbGVuIDogMCk7CisJaW50IGVycjsKKworCWlmIChmbGFncyAmIE1TR19QUk9CRSkKKwkJcmV0dXJuIE5VTEw7CisKKwlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJnF1ZXVlKTsKKworCWNvcmsuYmFzZS5mbGFncyA9IDA7CisJY29yay5iYXNlLmFkZHIgPSAwOworCWNvcmsuYmFzZS5vcHQgPSBOVUxMOworCXY2X2Nvcmsub3B0ID0gTlVMTDsKKwllcnIgPSBpcDZfc2V0dXBfY29yayhzaywgJmNvcmssICZ2Nl9jb3JrLCBobGltaXQsIHRjbGFzcywgb3B0LCBydCwgZmw2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCisJaWYgKGRvbnRmcmFnIDwgMCkKKwkJZG9udGZyYWcgPSBpbmV0Nl9zayhzayktPmRvbnRmcmFnOworCisJZXJyID0gX19pcDZfYXBwZW5kX2RhdGEoc2ssIGZsNiwgJnF1ZXVlLCAmY29yay5iYXNlLCAmdjZfY29yaywKKwkJCQkmY3VycmVudC0+dGFza19mcmFnLCBnZXRmcmFnLCBmcm9tLAorCQkJCWxlbmd0aCArIGV4dGhkcmxlbiwgdHJhbnNoZHJsZW4gKyBleHRoZHJsZW4sCisJCQkJZmxhZ3MsIGRvbnRmcmFnKTsKKwlpZiAoZXJyKSB7CisJCV9faXA2X2ZsdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCAmcXVldWUsICZjb3JrLCAmdjZfY29yayk7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCisJcmV0dXJuIF9faXA2X21ha2Vfc2tiKHNrLCAmcXVldWUsICZjb3JrLCAmdjZfY29yayk7Cit9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggOTJiM2RhNS4uMjY2YTI2NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwpAQCAtMTc2MCw2ICsxNzYwLDE0IEBACiAJcmV0dXJuIC1FTVNHU0laRTsKIH0KIAorc3RydWN0IG5ldCAqaXA2X3RubF9nZXRfbGlua19uZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaXA2X3RubCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiB0dW5uZWwtPm5ldDsKK30KK0VYUE9SVF9TWU1CT0woaXA2X3RubF9nZXRfbGlua19uZXQpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaXA2X3RubF9wb2xpY3lbSUZMQV9JUFRVTl9NQVggKyAxXSA9IHsKIAlbSUZMQV9JUFRVTl9MSU5LXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtJRkxBX0lQVFVOX0xPQ0FMXQkJPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSB9LApAQCAtMTc4Myw2ICsxNzkxLDcgQEAKIAkuZGVsbGluawk9IGlwNl90bmxfZGVsbGluaywKIAkuZ2V0X3NpemUJPSBpcDZfdG5sX2dldF9zaXplLAogCS5maWxsX2luZm8JPSBpcDZfdG5sX2ZpbGxfaW5mbywKKwkuZ2V0X2xpbmtfbmV0CT0gaXA2X3RubF9nZXRfbGlua19uZXQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHhmcm02X3R1bm5lbCBpcDRpcDZfaGFuZGxlciBfX3JlYWRfbW9zdGx5ID0gewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3VkcF90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl91ZHBfdHVubmVsLmMKaW5kZXggOGRiNmM5OGYuLjMyZDliMjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl91ZHBfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYvaXA2X3VkcF90dW5uZWwuYwpAQCAtNjIsMTQgKzYyLDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1ZHBfc29ja19jcmVhdGU2KTsKIAotaW50IHVkcF90dW5uZWw2X3htaXRfc2tiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKLQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIsCi0JCQkgX191OCBwcmlvLCBfX3U4IHR0bCwgX19iZTE2IHNyY19wb3J0LCBfX2JlMTYgZHN0X3BvcnQpCitpbnQgdWRwX3R1bm5lbDZfeG1pdF9za2Ioc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpbjZfYWRkciAqc2FkZHIsCisJCQkgc3RydWN0IGluNl9hZGRyICpkYWRkciwKKwkJCSBfX3U4IHByaW8sIF9fdTggdHRsLCBfX2JlMTYgc3JjX3BvcnQsCisJCQkgX19iZTE2IGRzdF9wb3J0LCBib29sIG5vY2hlY2spCiB7CiAJc3RydWN0IHVkcGhkciAqdWg7CiAJc3RydWN0IGlwdjZoZHIgKmlwNmg7Ci0Jc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAKIAlfX3NrYl9wdXNoKHNrYiwgc2l6ZW9mKCp1aCkpOwogCXNrYl9yZXNldF90cmFuc3BvcnRfaGVhZGVyKHNrYik7CkBAIC04NSw3ICs4NSw3IEBACiAJCQkgICAgfCBJUFNLQl9SRVJPVVRFRCk7CiAJc2tiX2RzdF9zZXQoc2tiLCBkc3QpOwogCi0JdWRwNl9zZXRfY3N1bSh1ZHBfZ2V0X25vX2NoZWNrNl90eChzayksIHNrYiwgc2FkZHIsIGRhZGRyLCBza2ItPmxlbik7CisJdWRwNl9zZXRfY3N1bShub2NoZWNrLCBza2IsIHNhZGRyLCBkYWRkciwgc2tiLT5sZW4pOwogCiAJX19za2JfcHVzaChza2IsIHNpemVvZigqaXA2aCkpOwogCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3Z0aS5jIGIvbmV0L2lwdjYvaXA2X3Z0aS5jCmluZGV4IGFjZTEwZDAuLjVmYjllMjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl92dGkuYworKysgYi9uZXQvaXB2Ni9pcDZfdnRpLmMKQEAgLTEwMTYsNiArMTAxNiw3IEBACiAJLmNoYW5nZWxpbmsJPSB2dGk2X2NoYW5nZWxpbmssCiAJLmdldF9zaXplCT0gdnRpNl9nZXRfc2l6ZSwKIAkuZmlsbF9pbmZvCT0gdnRpNl9maWxsX2luZm8sCisJLmdldF9saW5rX25ldAk9IGlwNl90bmxfZ2V0X2xpbmtfbmV0LAogfTsKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCB2dGk2X2Rlc3Ryb3lfdHVubmVscyhzdHJ1Y3QgdnRpNl9uZXQgKmlwNm4pCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZtci5jIGIvbmV0L2lwdjYvaXA2bXIuYwppbmRleCA3MjI2Njk3Li4zNGI2ODI2MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2bXIuYworKysgYi9uZXQvaXB2Ni9pcDZtci5jCkBAIC0yMzg4LDcgKzIzODgsOCBAQAogCWlmIChlcnIgPCAwICYmIGVyciAhPSAtRU5PRU5UKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiAKIG5sYV9wdXRfZmFpbHVyZToKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCmluZGV4IDY2OTgwZDguLjhkNzY2ZDkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYworKysgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKQEAgLTk5NiwxMyArOTk2LDkgQEAKIAkJbG9ja19zb2NrKHNrKTsKIAkJc2tiID0gbnAtPnBrdG9wdGlvbnM7CiAJCWlmIChza2IpCi0JCQlhdG9taWNfaW5jKCZza2ItPnVzZXJzKTsKLQkJcmVsZWFzZV9zb2NrKHNrKTsKLQotCQlpZiAoc2tiKSB7CiAJCQlpcDZfZGF0YWdyYW1fcmVjdl9jdGwoc2ssICZtc2csIHNrYik7Ci0JCQlrZnJlZV9za2Ioc2tiKTsKLQkJfSBlbHNlIHsKKwkJcmVsZWFzZV9zb2NrKHNrKTsKKwkJaWYgKCFza2IpIHsKIAkJCWlmIChucC0+cnhvcHQuYml0cy5yeGluZm8pIHsKIAkJCQlzdHJ1Y3QgaW42X3BrdGluZm8gc3JjX2luZm87CiAJCQkJc3JjX2luZm8uaXBpNl9pZmluZGV4ID0gbnAtPm1jYXN0X29pZiA/IG5wLT5tY2FzdF9vaWYgOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggNjgyODY2Ny4uNDcxZWQyNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmRpc2MuYworKysgYi9uZXQvaXB2Ni9uZGlzYy5jCkBAIC02NTUsNyArNjU1LDkgQEAKIAlzdHJ1Y3QgaW42X2FkZHIgKnRhcmdldCA9IChzdHJ1Y3QgaW42X2FkZHIgKikmbmVpZ2gtPnByaW1hcnlfa2V5OwogCWludCBwcm9iZXMgPSBhdG9taWNfcmVhZCgmbmVpZ2gtPnByb2Jlcyk7CiAKLQlpZiAoc2tiICYmIGlwdjZfY2hrX2FkZHIoZGV2X25ldChkZXYpLCAmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsIGRldiwgMSkpCisJaWYgKHNrYiAmJiBpcHY2X2Noa19hZGRyX2FuZF9mbGFncyhkZXZfbmV0KGRldiksICZpcHY2X2hkcihza2IpLT5zYWRkciwKKwkJCQkJICAgZGV2LCAxLAorCQkJCQkgICBJRkFfRl9URU5UQVRJVkV8SUZBX0ZfT1BUSU1JU1RJQykpCiAJCXNhZGRyID0gJmlwdjZfaGRyKHNrYiktPnNhZGRyOwogCXByb2JlcyAtPSBORUlHSF9WQVIobmVpZ2gtPnBhcm1zLCBVQ0FTVF9QUk9CRVMpOwogCWlmIChwcm9iZXMgPCAwKSB7CkBAIC0xMzQ4LDcgKzEzNTAsNyBAQAogCQl9CiAJfQogCi0JaWYgKG5kb3B0cy5uZF9vcHRzX210dSkgeworCWlmIChuZG9wdHMubmRfb3B0c19tdHUgJiYgaW42X2Rldi0+Y25mLmFjY2VwdF9yYV9tdHUpIHsKIAkJX19iZTMyIG47CiAJCXUzMiBtdHU7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L291dHB1dF9jb3JlLmMgYi9uZXQvaXB2Ni9vdXRwdXRfY29yZS5jCmluZGV4IDk3ZjQxYTMuLjc0NTgxZjcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L291dHB1dF9jb3JlLmMKKysrIGIvbmV0L2lwdjYvb3V0cHV0X2NvcmUuYwpAQCAtOSw2ICs5LDI1IEBACiAjaW5jbHVkZSA8bmV0L2FkZHJjb25mLmg+CiAjaW5jbHVkZSA8bmV0L3NlY3VyZV9zZXEuaD4KIAorc3RhdGljIHUzMiBfX2lwdjZfc2VsZWN0X2lkZW50KHUzMiBoYXNocm5kLCBzdHJ1Y3QgaW42X2FkZHIgKmRzdCwKKwkJCSAgICAgICBzdHJ1Y3QgaW42X2FkZHIgKnNyYykKK3sKKwl1MzIgaGFzaCwgaWQ7CisKKwloYXNoID0gX19pcHY2X2FkZHJfamhhc2goZHN0LCBoYXNocm5kKTsKKwloYXNoID0gX19pcHY2X2FkZHJfamhhc2goc3JjLCBoYXNoKTsKKworCS8qIFRyZWF0IGlkIG9mIDAgYXMgdW5zZXQgYW5kIGlmIHdlIGdldCAwIGJhY2sgZnJvbSBpcF9pZGVudHNfcmVzZXJ2ZSwKKwkgKiBzZXQgdGhlIGhpZ2h0IG9yZGVyIGluc3RlYWQgdGh1cyBtaW5pbWl6aW5nIHBvc3NpYmxlIGZ1dHVyZQorCSAqIGNvbGxpc2lvbnMuCisJICovCisJaWQgPSBpcF9pZGVudHNfcmVzZXJ2ZShoYXNoLCAxKTsKKwlpZiAodW5saWtlbHkoIWlkKSkKKwkJaWQgPSAxIDw8IDMxOworCisJcmV0dXJuIGlkOworfQorCiAvKiBUaGlzIGZ1bmN0aW9uIGV4aXN0cyBvbmx5IGZvciB0YXAgZHJpdmVycyB0aGF0IG11c3Qgc3VwcG9ydCBicm9rZW4KICAqIGNsaWVudHMgcmVxdWVzdGluZyBVRk8gd2l0aG91dCBzcGVjaWZ5aW5nIGFuIElQdjYgZnJhZ21lbnQgSUQuCiAgKgpAQCAtMjIsNyArNDEsNyBAQAogCXN0YXRpYyB1MzIgaXA2X3Byb3h5X2lkZW50c19oYXNocm5kIF9fcmVhZF9tb3N0bHk7CiAJc3RydWN0IGluNl9hZGRyIGJ1ZlsyXTsKIAlzdHJ1Y3QgaW42X2FkZHIgKmFkZHJzOwotCXUzMiBoYXNoLCBpZDsKKwl1MzIgaWQ7CiAKIAlhZGRycyA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsCiAJCQkJICAgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgKwpAQCAtMzQsMTQgKzUzLDI1IEBACiAJbmV0X2dldF9yYW5kb21fb25jZSgmaXA2X3Byb3h5X2lkZW50c19oYXNocm5kLAogCQkJICAgIHNpemVvZihpcDZfcHJveHlfaWRlbnRzX2hhc2hybmQpKTsKIAotCWhhc2ggPSBfX2lwdjZfYWRkcl9qaGFzaCgmYWRkcnNbMV0sIGlwNl9wcm94eV9pZGVudHNfaGFzaHJuZCk7Ci0JaGFzaCA9IF9faXB2Nl9hZGRyX2poYXNoKCZhZGRyc1swXSwgaGFzaCk7Ci0KLQlpZCA9IGlwX2lkZW50c19yZXNlcnZlKGhhc2gsIDEpOworCWlkID0gX19pcHY2X3NlbGVjdF9pZGVudChpcDZfcHJveHlfaWRlbnRzX2hhc2hybmQsCisJCQkJICZhZGRyc1sxXSwgJmFkZHJzWzBdKTsKIAlza2Jfc2hpbmZvKHNrYiktPmlwNl9mcmFnX2lkID0gaHRvbmwoaWQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaXB2Nl9wcm94eV9zZWxlY3RfaWRlbnQpOwogCit2b2lkIGlwdjZfc2VsZWN0X2lkZW50KHN0cnVjdCBmcmFnX2hkciAqZmhkciwgc3RydWN0IHJ0Nl9pbmZvICpydCkKK3sKKwlzdGF0aWMgdTMyIGlwNl9pZGVudHNfaGFzaHJuZCBfX3JlYWRfbW9zdGx5OworCXUzMiBpZDsKKworCW5ldF9nZXRfcmFuZG9tX29uY2UoJmlwNl9pZGVudHNfaGFzaHJuZCwgc2l6ZW9mKGlwNl9pZGVudHNfaGFzaHJuZCkpOworCisJaWQgPSBfX2lwdjZfc2VsZWN0X2lkZW50KGlwNl9pZGVudHNfaGFzaHJuZCwgJnJ0LT5ydDZpX2RzdC5hZGRyLAorCQkJCSAmcnQtPnJ0Nmlfc3JjLmFkZHIpOworCWZoZHItPmlkZW50aWZpY2F0aW9uID0gaHRvbmwoaWQpOworfQorRVhQT1JUX1NZTUJPTChpcHY2X3NlbGVjdF9pZGVudCk7CisKIGludCBpcDZfZmluZF8xc3RmcmFnb3B0KHN0cnVjdCBza19idWZmICpza2IsIHU4ICoqbmV4dGhkcikKIHsKIAl1MTYgb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3BpbmcuYyBiL25ldC9pcHY2L3BpbmcuYwppbmRleCAyZDMxNDgzNy4uYmQ0NmY3MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcGluZy5jCisrKyBiL25ldC9pcHY2L3BpbmcuYwpAQCAtMTYzLDggKzE2Myw3IEBACiAJcGZoLmljbXBoLmNoZWNrc3VtID0gMDsKIAlwZmguaWNtcGgudW4uZWNoby5pZCA9IGluZXQtPmluZXRfc3BvcnQ7CiAJcGZoLmljbXBoLnVuLmVjaG8uc2VxdWVuY2UgPSB1c2VyX2ljbXBoLmljbXA2X3NlcXVlbmNlOwotCS8qIFhYWDogc3RyaXBwaW5nIGNvbnN0ICovCi0JcGZoLmlvdiA9IChzdHJ1Y3QgaW92ZWMgKiltc2ctPm1zZ19pdGVyLmlvdjsKKwlwZmgubXNnID0gbXNnOwogCXBmaC53Y2hlY2sgPSAwOwogCXBmaC5mYW1pbHkgPSBBRl9JTkVUNjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCBlZTI1NjMxLi5kYWU3ZjFhIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtNjA5LDcgKzYwOSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCByYXd2Nl9zZW5kX2hkcmluYyhzdHJ1Y3Qgc29jayAqc2ssIHZvaWQgKmZyb20sIGludCBsZW5ndGgsCitzdGF0aWMgaW50IHJhd3Y2X3NlbmRfaGRyaW5jKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgbGVuZ3RoLAogCQkJc3RydWN0IGZsb3dpNiAqZmw2LCBzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0cCwKIAkJCXVuc2lnbmVkIGludCBmbGFncykKIHsKQEAgLTY0OCw3ICs2NDgsNyBAQAogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAogCXNrYi0+dHJhbnNwb3J0X2hlYWRlciA9IHNrYi0+bmV0d29ya19oZWFkZXI7Ci0JZXJyID0gbWVtY3B5X2Zyb21pb3ZlY2VuZCgodm9pZCAqKWlwaCwgZnJvbSwgMCwgbGVuZ3RoKTsKKwllcnIgPSBtZW1jcHlfZnJvbV9tc2coaXBoLCBtc2csIGxlbmd0aCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJvcl9mYXVsdDsKIApAQCAtODg2LDggKzg4Niw3IEBACiAKIGJhY2tfZnJvbV9jb25maXJtOgogCWlmIChpbmV0LT5oZHJpbmNsKQotCQkvKiBYWFg6IHN0cmlwcGluZyBjb25zdCAqLwotCQllcnIgPSByYXd2Nl9zZW5kX2hkcmluYyhzaywgKHN0cnVjdCBpb3ZlYyAqKW1zZy0+bXNnX2l0ZXIuaW92LCBsZW4sICZmbDYsICZkc3QsIG1zZy0+bXNnX2ZsYWdzKTsKKwkJZXJyID0gcmF3djZfc2VuZF9oZHJpbmMoc2ssIG1zZywgbGVuLCAmZmw2LCAmZHN0LCBtc2ctPm1zZ19mbGFncyk7CiAJZWxzZSB7CiAJCWxvY2tfc29jayhzayk7CiAJCWVyciA9IGlwNl9hcHBlbmRfZGF0YShzaywgcmF3Nl9nZXRmcmFnLCAmcmZ2LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggMTY2ZTMzYi4uOTg1NjVjZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC00OTksNyArNDk5LDcgQEAKIAlhZGRyY29uZl9hZGRyX3NvbGljdF9tdWx0KCZ3b3JrLT50YXJnZXQsICZtY2FkZHIpOwogCW5kaXNjX3NlbmRfbnMod29yay0+ZGV2LCBOVUxMLCAmd29yay0+dGFyZ2V0LCAmbWNhZGRyLCBOVUxMKTsKIAlkZXZfcHV0KHdvcmstPmRldik7Ci0Ja2ZyZWUodyk7CisJa2ZyZWUod29yayk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0Nl9wcm9iZShzdHJ1Y3QgcnQ2X2luZm8gKnJ0KQpAQCAtODUzLDE0ICs4NTMsMTQgQEAKICAqLwogCiBzdGF0aWMgaW50IF9faXA2X2luc19ydChzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCBzdHJ1Y3QgbmxfaW5mbyAqaW5mbywKLQkJCXN0cnVjdCBubGF0dHIgKm14LCBpbnQgbXhfbGVuKQorCQkJc3RydWN0IG14Nl9jb25maWcgKm14YykKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBmaWI2X3RhYmxlICp0YWJsZTsKIAogCXRhYmxlID0gcnQtPnJ0NmlfdGFibGU7CiAJd3JpdGVfbG9ja19iaCgmdGFibGUtPnRiNl9sb2NrKTsKLQllcnIgPSBmaWI2X2FkZCgmdGFibGUtPnRiNl9yb290LCBydCwgaW5mbywgbXgsIG14X2xlbik7CisJZXJyID0gZmliNl9hZGQoJnRhYmxlLT50YjZfcm9vdCwgcnQsIGluZm8sIG14Yyk7CiAJd3JpdGVfdW5sb2NrX2JoKCZ0YWJsZS0+dGI2X2xvY2spOwogCiAJcmV0dXJuIGVycjsKQEAgLTg2OCwxMCArODY4LDEwIEBACiAKIGludCBpcDZfaW5zX3J0KHN0cnVjdCBydDZfaW5mbyAqcnQpCiB7Ci0Jc3RydWN0IG5sX2luZm8gaW5mbyA9IHsKLQkJLm5sX25ldCA9IGRldl9uZXQocnQtPmRzdC5kZXYpLAotCX07Ci0JcmV0dXJuIF9faXA2X2luc19ydChydCwgJmluZm8sIE5VTEwsIDApOworCXN0cnVjdCBubF9pbmZvIGluZm8gPSB7CS5ubF9uZXQgPSBkZXZfbmV0KHJ0LT5kc3QuZGV2KSwgfTsKKwlzdHJ1Y3QgbXg2X2NvbmZpZyBteGMgPSB7IC5teCA9IE5VTEwsIH07CisKKwlyZXR1cm4gX19pcDZfaW5zX3J0KHJ0LCAmaW5mbywgJm14Yyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnQ2X2luZm8gKnJ0Nl9hbGxvY19jb3coc3RydWN0IHJ0Nl9pbmZvICpvcnQsCkBAIC0xMjQyLDEyICsxMjQyLDE2IEBACiAJCXJ0ID0gbmV0LT5pcHY2LmlwNl9udWxsX2VudHJ5OwogCWVsc2UgaWYgKHJ0LT5kc3QuZXJyb3IpIHsKIAkJcnQgPSBuZXQtPmlwdjYuaXA2X251bGxfZW50cnk7Ci0JfSBlbHNlIGlmIChydCA9PSBuZXQtPmlwdjYuaXA2X251bGxfZW50cnkpIHsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJ0ID09IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeSkgewogCQlmbiA9IGZpYjZfYmFja3RyYWNrKGZuLCAmZmw2LT5zYWRkcik7CiAJCWlmIChmbikKIAkJCWdvdG8gcmVzdGFydDsKIAl9CiAKK291dDoKIAlkc3RfaG9sZCgmcnQtPmRzdCk7CiAKIAlyZWFkX3VubG9ja19iaCgmdGFibGUtPnRiNl9sb2NrKTsKQEAgLTE0NjcsOSArMTQ3MSw1MSBAQAogCXJldHVybiBlbnRyaWVzID4gcnRfbWF4X3NpemU7CiB9CiAKLS8qCi0gKgotICovCitzdGF0aWMgaW50IGlwNl9jb252ZXJ0X21ldHJpY3Moc3RydWN0IG14Nl9jb25maWcgKm14YywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZmliNl9jb25maWcgKmNmZykKK3sKKwlzdHJ1Y3QgbmxhdHRyICpubGE7CisJaW50IHJlbWFpbmluZzsKKwl1MzIgKm1wOworCisJaWYgKGNmZy0+ZmNfbXggPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwltcCA9IGt6YWxsb2Moc2l6ZW9mKHUzMikgKiBSVEFYX01BWCwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFtcCkpCisJCXJldHVybiAtRU5PTUVNOworCisJbmxhX2Zvcl9lYWNoX2F0dHIobmxhLCBjZmctPmZjX214LCBjZmctPmZjX214X2xlbiwgcmVtYWluaW5nKSB7CisJCWludCB0eXBlID0gbmxhX3R5cGUobmxhKTsKKworCQlpZiAodHlwZSkgeworCQkJdTMyIHZhbDsKKworCQkJaWYgKHVubGlrZWx5KHR5cGUgPiBSVEFYX01BWCkpCisJCQkJZ290byBlcnI7CisJCQlpZiAodHlwZSA9PSBSVEFYX0NDX0FMR08pIHsKKwkJCQljaGFyIHRtcFtUQ1BfQ0FfTkFNRV9NQVhdOworCisJCQkJbmxhX3N0cmxjcHkodG1wLCBubGEsIHNpemVvZih0bXApKTsKKwkJCQl2YWwgPSB0Y3BfY2FfZ2V0X2tleV9ieV9uYW1lKHRtcCk7CisJCQkJaWYgKHZhbCA9PSBUQ1BfQ0FfVU5TUEVDKQorCQkJCQlnb3RvIGVycjsKKwkJCX0gZWxzZSB7CisJCQkJdmFsID0gbmxhX2dldF91MzIobmxhKTsKKwkJCX0KKworCQkJbXBbdHlwZSAtIDFdID0gdmFsOworCQkJX19zZXRfYml0KHR5cGUgLSAxLCBteGMtPm14X3ZhbGlkKTsKKwkJfQorCX0KKworCW14Yy0+bXggPSBtcDsKKworCXJldHVybiAwOworIGVycjoKKwlrZnJlZShtcCk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CiAKIGludCBpcDZfcm91dGVfYWRkKHN0cnVjdCBmaWI2X2NvbmZpZyAqY2ZnKQogewpAQCAtMTQ3OSw2ICsxNTI1LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgZmliNl90YWJsZSAqdGFibGU7CisJc3RydWN0IG14Nl9jb25maWcgbXhjID0geyAubXggPSBOVUxMLCB9OwogCWludCBhZGRyX3R5cGU7CiAKIAlpZiAoY2ZnLT5mY19kc3RfbGVuID4gMTI4IHx8IGNmZy0+ZmNfc3JjX2xlbiA+IDEyOCkKQEAgLTE2NzQsOCArMTcyMSwxNCBAQAogCiAJY2ZnLT5mY19ubGluZm8ubmxfbmV0ID0gZGV2X25ldChkZXYpOwogCi0JcmV0dXJuIF9faXA2X2luc19ydChydCwgJmNmZy0+ZmNfbmxpbmZvLCBjZmctPmZjX214LCBjZmctPmZjX214X2xlbik7CisJZXJyID0gaXA2X2NvbnZlcnRfbWV0cmljcygmbXhjLCBjZmcpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OwogCisJZXJyID0gX19pcDZfaW5zX3J0KHJ0LCAmY2ZnLT5mY19ubGluZm8sICZteGMpOworCisJa2ZyZWUobXhjLm14KTsKKwlyZXR1cm4gZXJyOwogb3V0OgogCWlmIChkZXYpCiAJCWRldl9wdXQoZGV2KTsKQEAgLTI1MzEsNyArMjU4NCw4IEBACiAJICAgICAgICsgbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX09JRiAqLwogCSAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIFJUQV9QUklPUklUWSAqLwogCSAgICAgICArIFJUQVhfTUFYICogbmxhX3RvdGFsX3NpemUoNCkgLyogUlRBX01FVFJJQ1MgKi8KLQkgICAgICAgKyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKTsKKwkgICAgICAgKyBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHJ0YV9jYWNoZWluZm8pKQorCSAgICAgICArIG5sYV90b3RhbF9zaXplKFRDUF9DQV9OQU1FX01BWCk7IC8qIFJUQVhfQ0NfQUxHTyAqLwogfQogCiBzdGF0aWMgaW50IHJ0Nl9maWxsX25vZGUoc3RydWN0IG5ldCAqbmV0LApAQCAtMjY3Miw3ICsyNzI2LDggQEAKIAlpZiAocnRubF9wdXRfY2FjaGVpbmZvKHNrYiwgJnJ0LT5kc3QsIDAsIGV4cGlyZXMsIHJ0LT5kc3QuZXJyb3IpIDwgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3NpdC5jIGIvbmV0L2lwdjYvc2l0LmMKaW5kZXggMjEzNTQ2Yi4uZTRjYmQ1NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc2l0LmMKKysrIGIvbmV0L2lwdjYvc2l0LmMKQEAgLTE1MDYsMTIgKzE1MDYsMTIgQEAKIAogCWlmIChkYXRhW0lGTEFfSVBUVU5fRU5DQVBfU1BPUlRdKSB7CiAJCXJldCA9IHRydWU7Ci0JCWlwZW5jYXAtPnNwb3J0ID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX0lQVFVOX0VOQ0FQX1NQT1JUXSk7CisJCWlwZW5jYXAtPnNwb3J0ID0gbmxhX2dldF9iZTE2KGRhdGFbSUZMQV9JUFRVTl9FTkNBUF9TUE9SVF0pOwogCX0KIAogCWlmIChkYXRhW0lGTEFfSVBUVU5fRU5DQVBfRFBPUlRdKSB7CiAJCXJldCA9IHRydWU7Ci0JCWlwZW5jYXAtPmRwb3J0ID0gbmxhX2dldF91MTYoZGF0YVtJRkxBX0lQVFVOX0VOQ0FQX0RQT1JUXSk7CisJCWlwZW5jYXAtPmRwb3J0ID0gbmxhX2dldF9iZTE2KGRhdGFbSUZMQV9JUFRVTl9FTkNBUF9EUE9SVF0pOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0xNzA3LDkgKzE3MDcsOSBAQAogCiAJaWYgKG5sYV9wdXRfdTE2KHNrYiwgSUZMQV9JUFRVTl9FTkNBUF9UWVBFLAogCQkJdHVubmVsLT5lbmNhcC50eXBlKSB8fAotCSAgICBubGFfcHV0X3UxNihza2IsIElGTEFfSVBUVU5fRU5DQVBfU1BPUlQsCisJICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfSVBUVU5fRU5DQVBfU1BPUlQsCiAJCQl0dW5uZWwtPmVuY2FwLnNwb3J0KSB8fAotCSAgICBubGFfcHV0X3UxNihza2IsIElGTEFfSVBUVU5fRU5DQVBfRFBPUlQsCisJICAgIG5sYV9wdXRfYmUxNihza2IsIElGTEFfSVBUVU5fRU5DQVBfRFBPUlQsCiAJCQl0dW5uZWwtPmVuY2FwLmRwb3J0KSB8fAogCSAgICBubGFfcHV0X3UxNihza2IsIElGTEFfSVBUVU5fRU5DQVBfRkxBR1MsCiAJCQl0dW5uZWwtPmVuY2FwLmZsYWdzKSkKQEAgLTE3NjMsNiArMTc2Myw3IEBACiAJLmdldF9zaXplCT0gaXBpcDZfZ2V0X3NpemUsCiAJLmZpbGxfaW5mbwk9IGlwaXA2X2ZpbGxfaW5mbywKIAkuZGVsbGluawk9IGlwaXA2X2RlbGxpbmssCisJLmdldF9saW5rX25ldAk9IGlwX3R1bm5lbF9nZXRfbGlua19uZXQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHhmcm1fdHVubmVsIHNpdF9oYW5kbGVyIF9fcmVhZF9tb3N0bHkgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwppbmRleCA5YzBiNTRlLi41ZDQ2ODMyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90Y3BfaXB2Ni5jCisrKyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKQEAgLTExOTksNiArMTE5OSw4IEBACiAJCWluZXRfY3NrKG5ld3NrKS0+aWNza19leHRfaGRyX2xlbiA9IChuZXducC0+b3B0LT5vcHRfbmZsZW4gKwogCQkJCQkJICAgICBuZXducC0+b3B0LT5vcHRfZmxlbik7CiAKKwl0Y3BfY2Ffb3BlbnJlcV9jaGlsZChuZXdzaywgZHN0KTsKKwogCXRjcF9zeW5jX21zcyhuZXdzaywgZHN0X210dShkc3QpKTsKIAluZXd0cC0+YWR2bXNzID0gZHN0X21ldHJpY19hZHZtc3MoZHN0KTsKIAlpZiAodGNwX3NrKHNrKS0+cnhfb3B0LnVzZXJfbXNzICYmCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni91ZHAuYyBiL25ldC9pcHY2L3VkcC5jCmluZGV4IDE4OWRjNGEuLmQwNDhkNDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcC5jCisrKyBiL25ldC9pcHY2L3VkcC5jCkBAIC05MDksNyArOTA5LDcgQEAKIAkJCWdvdG8gY3N1bV9lcnJvcjsKIAkJfQogCi0JCWlmICh1ZHBfc2soc2spLT5jb252ZXJ0X2NzdW0gJiYgdWgtPmNoZWNrICYmICFJU19VRFBMSVRFKHNrKSkKKwkJaWYgKGluZXRfZ2V0X2NvbnZlcnRfY3N1bShzaykgJiYgdWgtPmNoZWNrICYmICFJU19VRFBMSVRFKHNrKSkKIAkJCXNrYl9jaGVja3N1bV90cnlfY29udmVydChza2IsIElQUFJPVE9fVURQLCB1aC0+Y2hlY2ssCiAJCQkJCQkgaXA2X2NvbXB1dGVfcHNldWRvKTsKIApAQCAtOTkwLDkgKzk5MCwxMCBAQAogewogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJc3RydWN0IHVkcGhkciAqdWggPSB1ZHBfaGRyKHNrYik7CisJc3RydWN0IHNrX2J1ZmYgKmZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7CiAJX193c3VtIGNzdW0gPSAwOwogCi0JaWYgKHNrYl9xdWV1ZV9sZW4oJnNrLT5za193cml0ZV9xdWV1ZSkgPT0gMSkgeworCWlmICghZnJhZ3MpIHsKIAkJLyogT25seSBvbmUgZnJhZ21lbnQgb24gdGhlIHNvY2tldC4gICovCiAJCXNrYi0+Y3N1bV9zdGFydCA9IHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgLSBza2ItPmhlYWQ7CiAJCXNrYi0+Y3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7CkBAIC0xMDA4LDkgKzEwMDksOSBAQAogCiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAotCQlza2JfcXVldWVfd2Fsaygmc2stPnNrX3dyaXRlX3F1ZXVlLCBza2IpIHsKLQkJCWNzdW0gPSBjc3VtX2FkZChjc3VtLCBza2ItPmNzdW0pOwotCQl9CisJCWRvIHsKKwkJCWNzdW0gPSBjc3VtX2FkZChjc3VtLCBmcmFncy0+Y3N1bSk7CisJCX0gd2hpbGUgKChmcmFncyA9IGZyYWdzLT5uZXh0KSk7CiAKIAkJdWgtPmNoZWNrID0gY3N1bV9pcHY2X21hZ2ljKHNhZGRyLCBkYWRkciwgbGVuLCBJUFBST1RPX1VEUCwKIAkJCQkJICAgIGNzdW0pOwpAQCAtMTAyMywyNiArMTAyNCwxNSBAQAogICoJU2VuZGluZwogICovCiAKLXN0YXRpYyBpbnQgdWRwX3Y2X3B1c2hfcGVuZGluZ19mcmFtZXMoc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGludCB1ZHBfdjZfc2VuZF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGZsb3dpNiAqZmw2KQogewotCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNvY2sgKnNrID0gc2tiLT5zazsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKLQlzdHJ1Y3QgdWRwX3NvY2sgICp1cCA9IHVkcF9zayhzayk7Ci0Jc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwotCXN0cnVjdCBmbG93aTYgKmZsNjsKIAlpbnQgZXJyID0gMDsKIAlpbnQgaXNfdWRwbGl0ZSA9IElTX1VEUExJVEUoc2spOwogCV9fd3N1bSBjc3VtID0gMDsKLQotCWlmICh1cC0+cGVuZGluZyA9PSBBRl9JTkVUKQotCQlyZXR1cm4gdWRwX3B1c2hfcGVuZGluZ19mcmFtZXMoc2spOwotCi0JZmw2ID0gJmluZXQtPmNvcmsuZmwudS5pcDY7Ci0KLQkvKiBHcmFiIHRoZSBza2J1ZmYgd2hlcmUgVURQIGhlYWRlciBzcGFjZSBleGlzdHMuICovCi0Jc2tiID0gc2tiX3BlZWsoJnNrLT5za193cml0ZV9xdWV1ZSk7Ci0JaWYgKHNrYiA9PSBOVUxMKQotCQlnb3RvIG91dDsKKwlpbnQgb2Zmc2V0ID0gc2tiX3RyYW5zcG9ydF9vZmZzZXQoc2tiKTsKKwlpbnQgbGVuID0gc2tiLT5sZW4gLSBvZmZzZXQ7CiAKIAkvKgogCSAqIENyZWF0ZSBhIFVEUCBoZWFkZXIKQEAgLTEwNTAsMjkgKzEwNDAsMjggQEAKIAl1aCA9IHVkcF9oZHIoc2tiKTsKIAl1aC0+c291cmNlID0gZmw2LT5mbDZfc3BvcnQ7CiAJdWgtPmRlc3QgPSBmbDYtPmZsNl9kcG9ydDsKLQl1aC0+bGVuID0gaHRvbnModXAtPmxlbik7CisJdWgtPmxlbiA9IGh0b25zKGxlbik7CiAJdWgtPmNoZWNrID0gMDsKIAogCWlmIChpc191ZHBsaXRlKQotCQljc3VtID0gdWRwbGl0ZV9jc3VtX291dGdvaW5nKHNrLCBza2IpOwotCWVsc2UgaWYgKHVwLT5ub19jaGVjazZfdHgpIHsgICAvKiBVRFAgY3N1bSBkaXNhYmxlZCAqLworCQljc3VtID0gdWRwbGl0ZV9jc3VtKHNrYik7CisJZWxzZSBpZiAodWRwX3NrKHNrKS0+bm9fY2hlY2s2X3R4KSB7ICAgLyogVURQIGNzdW0gZGlzYWJsZWQgKi8KIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCQlnb3RvIHNlbmQ7CiAJfSBlbHNlIGlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7IC8qIFVEUCBoYXJkd2FyZSBjc3VtICovCi0JCXVkcDZfaHdjc3VtX291dGdvaW5nKHNrLCBza2IsICZmbDYtPnNhZGRyLCAmZmw2LT5kYWRkciwKLQkJCQkgICAgIHVwLT5sZW4pOworCQl1ZHA2X2h3Y3N1bV9vdXRnb2luZyhzaywgc2tiLCAmZmw2LT5zYWRkciwgJmZsNi0+ZGFkZHIsIGxlbik7CiAJCWdvdG8gc2VuZDsKIAl9IGVsc2UKLQkJY3N1bSA9IHVkcF9jc3VtX291dGdvaW5nKHNrLCBza2IpOworCQljc3VtID0gdWRwX2NzdW0oc2tiKTsKIAogCS8qIGFkZCBwcm90b2NvbC1kZXBlbmRlbnQgcHNldWRvLWhlYWRlciAqLwogCXVoLT5jaGVjayA9IGNzdW1faXB2Nl9tYWdpYygmZmw2LT5zYWRkciwgJmZsNi0+ZGFkZHIsCi0JCQkJICAgIHVwLT5sZW4sIGZsNi0+Zmxvd2k2X3Byb3RvLCBjc3VtKTsKKwkJCQkgICAgbGVuLCBmbDYtPmZsb3dpNl9wcm90bywgY3N1bSk7CiAJaWYgKHVoLT5jaGVjayA9PSAwKQogCQl1aC0+Y2hlY2sgPSBDU1VNX01BTkdMRURfMDsKIAogc2VuZDoKLQllcnIgPSBpcDZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzayk7CisJZXJyID0gaXA2X3NlbmRfc2tiKHNrYik7CiAJaWYgKGVycikgewogCQlpZiAoZXJyID09IC1FTk9CVUZTICYmICFpbmV0Nl9zayhzayktPnJlY3ZlcnIpIHsKIAkJCVVEUDZfSU5DX1NUQVRTX1VTRVIoc29ja19uZXQoc2spLApAQCAtMTA4Miw2ICsxMDcxLDMwIEBACiAJfSBlbHNlCiAJCVVEUDZfSU5DX1NUQVRTX1VTRVIoc29ja19uZXQoc2spLAogCQkJCSAgICBVRFBfTUlCX09VVERBVEFHUkFNUywgaXNfdWRwbGl0ZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB1ZHBfdjZfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgdWRwX3NvY2sgICp1cCA9IHVkcF9zayhzayk7CisJc3RydWN0IGZsb3dpNiBmbDY7CisJaW50IGVyciA9IDA7CisKKwlpZiAodXAtPnBlbmRpbmcgPT0gQUZfSU5FVCkKKwkJcmV0dXJuIHVkcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrKTsKKworCS8qIGlwNl9maW5pc2hfc2tiIHdpbGwgcmVsZWFzZSB0aGUgY29yaywgc28gbWFrZSBhIGNvcHkgb2YKKwkgKiBmbDYgaGVyZS4KKwkgKi8KKwlmbDYgPSBpbmV0X3NrKHNrKS0+Y29yay5mbC51LmlwNjsKKworCXNrYiA9IGlwNl9maW5pc2hfc2tiKHNrKTsKKwlpZiAoIXNrYikKKwkJZ290byBvdXQ7CisKKwllcnIgPSB1ZHBfdjZfc2VuZF9za2Ioc2tiLCAmZmw2KTsKKwogb3V0OgogCXVwLT5sZW4gPSAwOwogCXVwLT5wZW5kaW5nID0gMDsKQEAgLTExNjQsNiArMTE3Nyw3IEBACiAJaWYgKGxlbiA+IElOVF9NQVggLSBzaXplb2Yoc3RydWN0IHVkcGhkcikpCiAJCXJldHVybiAtRU1TR1NJWkU7CiAKKwlnZXRmcmFnICA9ICBpc191ZHBsaXRlID8gIHVkcGxpdGVfZ2V0ZnJhZyA6IGlwX2dlbmVyaWNfZ2V0ZnJhZzsKIAlpZiAodXAtPnBlbmRpbmcpIHsKIAkJLyoKIAkJICogVGhlcmUgYXJlIHBlbmRpbmcgZnJhbWVzLgpAQCAtMTI5NCw2ICsxMzA4LDIwIEBACiAJCWdvdG8gZG9fY29uZmlybTsKIGJhY2tfZnJvbV9jb25maXJtOgogCisJLyogTG9ja2xlc3MgZmFzdCBwYXRoIGZvciB0aGUgbm9uLWNvcmtpbmcgY2FzZSAqLworCWlmICghY29ya3JlcSkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJCXNrYiA9IGlwNl9tYWtlX3NrYihzaywgZ2V0ZnJhZywgbXNnLCB1bGVuLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgaGxpbWl0LCB0Y2xhc3MsIG9wdCwKKwkJCQkgICAmZmw2LCAoc3RydWN0IHJ0Nl9pbmZvICopZHN0LAorCQkJCSAgIG1zZy0+bXNnX2ZsYWdzLCBkb250ZnJhZyk7CisJCWVyciA9IFBUUl9FUlIoc2tiKTsKKwkJaWYgKCFJU19FUlJfT1JfTlVMTChza2IpKQorCQkJZXJyID0gdWRwX3Y2X3NlbmRfc2tiKHNrYiwgJmZsNik7CisJCWdvdG8gcmVsZWFzZV9kc3Q7CisJfQorCiAJbG9ja19zb2NrKHNrKTsKIAlpZiAodW5saWtlbHkodXAtPnBlbmRpbmcpKSB7CiAJCS8qIFRoZSBzb2NrZXQgaXMgYWxyZWFkeSBjb3JrZWQgd2hpbGUgcHJlcGFyaW5nIGl0LiAqLwpAQCAtMTMxMSw3ICsxMzM5LDYgQEAKIAlpZiAoZG9udGZyYWcgPCAwKQogCQlkb250ZnJhZyA9IG5wLT5kb250ZnJhZzsKIAl1cC0+bGVuICs9IHVsZW47Ci0JZ2V0ZnJhZyAgPSAgaXNfdWRwbGl0ZSA/ICB1ZHBsaXRlX2dldGZyYWcgOiBpcF9nZW5lcmljX2dldGZyYWc7CiAJZXJyID0gaXA2X2FwcGVuZF9kYXRhKHNrLCBnZXRmcmFnLCBtc2csIHVsZW4sCiAJCXNpemVvZihzdHJ1Y3QgdWRwaGRyKSwgaGxpbWl0LCB0Y2xhc3MsIG9wdCwgJmZsNiwKIAkJKHN0cnVjdCBydDZfaW5mbyAqKWRzdCwKQEAgLTEzMjMsNiArMTM1MCwxMSBAQAogCWVsc2UgaWYgKHVubGlrZWx5KHNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3dyaXRlX3F1ZXVlKSkpCiAJCXVwLT5wZW5kaW5nID0gMDsKIAorCWlmIChlcnIgPiAwKQorCQllcnIgPSBucC0+cmVjdmVyciA/IG5ldF94bWl0X2Vycm5vKGVycikgOiAwOworCXJlbGVhc2Vfc29jayhzayk7CisKK3JlbGVhc2VfZHN0OgogCWlmIChkc3QpIHsKIAkJaWYgKGNvbm5lY3RlZCkgewogCQkJaXA2X2RzdF9zdG9yZShzaywgZHN0LApAQCAtMTMzOSw5ICsxMzcxLDYgQEAKIAkJZHN0ID0gTlVMTDsKIAl9CiAKLQlpZiAoZXJyID4gMCkKLQkJZXJyID0gbnAtPnJlY3ZlcnIgPyBuZXRfeG1pdF9lcnJubyhlcnIpIDogMDsKLQlyZWxlYXNlX3NvY2soc2spOwogb3V0OgogCWRzdF9yZWxlYXNlKGRzdCk7CiAJZmw2X3NvY2tfcmVsZWFzZShmbG93bGFiZWwpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwX29mZmxvYWQuYyBiL25ldC9pcHY2L3VkcF9vZmZsb2FkLmMKaW5kZXggYjZhYThlZC4uYTU2Mjc2OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwX29mZmxvYWQuYworKysgYi9uZXQvaXB2Ni91ZHBfb2ZmbG9hZC5jCkBAIC01Miw2ICs1MiwxMCBAQAogCiAJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgPSBESVZfUk9VTkRfVVAoc2tiLT5sZW4sIG1zcyk7CiAKKwkJLyogU2V0IHRoZSBJUHY2IGZyYWdtZW50IGlkIGlmIG5vdCBzZXQgeWV0ICovCisJCWlmICghc2tiX3NoaW5mbyhza2IpLT5pcDZfZnJhZ19pZCkKKwkJCWlwdjZfcHJveHlfc2VsZWN0X2lkZW50KHNrYik7CisKIAkJc2VncyA9IE5VTEw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEwOCw3ICsxMTIsMTEgQEAKIAkJZnB0ciA9IChzdHJ1Y3QgZnJhZ19oZHIgKikoc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyB1bmZyYWdfaXA2aGxlbik7CiAJCWZwdHItPm5leHRoZHIgPSBuZXh0aGRyOwogCQlmcHRyLT5yZXNlcnZlZCA9IDA7Ci0JCWZwdHItPmlkZW50aWZpY2F0aW9uID0gc2tiX3NoaW5mbyhza2IpLT5pcDZfZnJhZ19pZDsKKwkJaWYgKHNrYl9zaGluZm8oc2tiKS0+aXA2X2ZyYWdfaWQpCisJCQlmcHRyLT5pZGVudGlmaWNhdGlvbiA9IHNrYl9zaGluZm8oc2tiKS0+aXA2X2ZyYWdfaWQ7CisJCWVsc2UKKwkJCWlwdjZfc2VsZWN0X2lkZW50KGZwdHIsCisJCQkJCSAgKHN0cnVjdCBydDZfaW5mbyAqKXNrYl9kc3Qoc2tiKSk7CiAKIAkJLyogRnJhZ21lbnQgdGhlIHNrYi4gaXB2NiBoZWFkZXIgYW5kIHRoZSByZW1haW5pbmcgZmllbGRzIG9mIHRoZQogCQkgKiBmcmFnbWVudCBoZWFkZXIgYXJlIHVwZGF0ZWQgaW4gaXB2Nl9nc29fc2VnbWVudCgpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCmluZGV4IDVmOTgzNjQuLjQ4YmY1YTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3BvbGljeS5jCkBAIC0xMzAsMTIgKzEzMCwxOCBAQAogewogCXN0cnVjdCBmbG93aTYgKmZsNiA9ICZmbC0+dS5pcDY7CiAJaW50IG9ubHlwcm90byA9IDA7Ci0JdTE2IG9mZnNldCA9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTsKIAljb25zdCBzdHJ1Y3QgaXB2NmhkciAqaGRyID0gaXB2Nl9oZHIoc2tiKTsKKwl1MTYgb2Zmc2V0ID0gc2l6ZW9mKCpoZHIpOwogCXN0cnVjdCBpcHY2X29wdF9oZHIgKmV4dGhkcjsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpuaCA9IHNrYl9uZXR3b3JrX2hlYWRlcihza2IpOwotCXU4IG5leHRoZHIgPSBuaFtJUDZDQihza2IpLT5uaG9mZl07CisJdTE2IG5ob2ZmID0gSVA2Q0Ioc2tiKS0+bmhvZmY7CiAJaW50IG9pZiA9IDA7CisJdTggbmV4dGhkcjsKKworCWlmICghbmhvZmYpCisJCW5ob2ZmID0gb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIG5leHRoZHIpOworCisJbmV4dGhkciA9IG5oW25ob2ZmXTsKIAogCWlmIChza2JfZHN0KHNrYikpCiAJCW9pZiA9IHNrYl9kc3Qoc2tiKS0+ZGV2LT5pZmluZGV4OwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYXAuYyBiL25ldC9pcmRhL2lybGFwLmMKaW5kZXggN2YyY2FmZC4uMWNkZTcxMSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYXAuYworKysgYi9uZXQvaXJkYS9pcmxhcC5jCkBAIC01MzMsNyArNTMzLDcgQEAKIAlpbmZvLmRpc2NvdmVyeSA9IGRpc2NvdmVyeTsKIAogCS8qIHN5c2N0bF9zbG90X3RpbWVvdXQgYm91bmRzIGFyZSBjaGVja2VkIGluIGlyc3lzY3RsLmMgLSBKZWFuIElJICovCi0Jc2VsZi0+c2xvdF90aW1lb3V0ID0gc3lzY3RsX3Nsb3RfdGltZW91dCAqIEhaIC8gMTAwMDsKKwlzZWxmLT5zbG90X3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKHN5c2N0bF9zbG90X3RpbWVvdXQpOwogCiAJaXJsYXBfZG9fZXZlbnQoc2VsZiwgRElTQ09WRVJZX1JFUVVFU1QsIE5VTEwsICZpbmZvKTsKIH0KQEAgLTEwMTUsMTMgKzEwMTUsMTUgQEAKIAkgKiBPciwgdGhpcyBpcyBob3cgbXVjaCB3ZSBjYW4ga2VlcCB0aGUgcGYgYml0IGluIHByaW1hcnkgbW9kZS4KIAkgKiBUaGVyZWZvcmUsIGl0IG11c3QgYmUgbG93ZXIgb3IgZXF1YWwgdGhhbiBvdXIgKk9XTiogbWF4IHR1cm4gYXJvdW5kLgogCSAqIEplYW4gSUkgKi8KLQlzZWxmLT5wb2xsX3RpbWVvdXQgPSBzZWxmLT5xb3NfdHgubWF4X3R1cm5fdGltZS52YWx1ZSAqIEhaIC8gMTAwMDsKKwlzZWxmLT5wb2xsX3RpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKAorCQkJCXNlbGYtPnFvc190eC5tYXhfdHVybl90aW1lLnZhbHVlKTsKIAkvKiBUaGUgRmluYWwgdGltZW91dCBhcHBsaWVzIG9ubHkgdG8gdGhlIHByaW1hcnkgc3RhdGlvbi4KIAkgKiBJdCBkZWZpbmVzIHRoZSBtYXhpbXVtIHRpbWUgdGhlIHByaW1hcnkgd2FpdCAobW9zdGx5IGluIFJFQ1YgbW9kZSkKIAkgKiBmb3IgYW4gYW5zd2VyIGZyb20gdGhlIHNlY29uZGFyeSBzdGF0aW9uIGJlZm9yZSBwb2xsaW5nIGl0IGFnYWluLgogCSAqIFRoZXJlZm9yZSwgaXQgbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRoYW4gb3VyICpQQVJUTkVSKgogCSAqIG1heCB0dXJuIGFyb3VuZCB0aW1lIC0gSmVhbiBJSSAqLwotCXNlbGYtPmZpbmFsX3RpbWVvdXQgPSBzZWxmLT5xb3NfcngubWF4X3R1cm5fdGltZS52YWx1ZSAqIEhaIC8gMTAwMDsKKwlzZWxmLT5maW5hbF90aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcygKKwkJCQlzZWxmLT5xb3NfcngubWF4X3R1cm5fdGltZS52YWx1ZSk7CiAJLyogVGhlIFdhdGNoZG9nIEJpdCB0aW1lb3V0IGFwcGxpZXMgb25seSB0byB0aGUgc2Vjb25kYXJ5IHN0YXRpb24uCiAJICogSXQgZGVmaW5lcyB0aGUgbWF4aW11bSB0aW1lIHRoZSBzZWNvbmRhcnkgd2FpdCAobW9zdGx5IGluIFJFQ1YgbW9kZSkKIAkgKiBmb3IgcG9sbCBmcm9tIHRoZSBwcmltYXJ5IHN0YXRpb24gYmVmb3JlIGdldHRpbmcgYW5ub3llZC4KZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfbmV0bGluay5jIGIvbmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMKaW5kZXggMGFjOTA3YS4uYjRlOTIzZiAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMKKysrIGIvbmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMKQEAgLTQwLDYgKzQwLDE4IEBACiAJLm5ldG5zb2sJPSB0cnVlLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBsMnRwX211bHRpY2FzdF9ncm91cFtdID0geworCXsKKwkJLm5hbWUgPSBMMlRQX0dFTkxfTUNHUk9VUCwKKwl9LAorfTsKKworc3RhdGljIGludCBsMnRwX25sX3R1bm5lbF9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwb3J0aWQsIHUzMiBzZXEsCisJCQkgICAgICAgaW50IGZsYWdzLCBzdHJ1Y3QgbDJ0cF90dW5uZWwgKnR1bm5lbCwgdTggY21kKTsKK3N0YXRpYyBpbnQgbDJ0cF9ubF9zZXNzaW9uX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBvcnRpZCwgdTMyIHNlcSwKKwkJCQlpbnQgZmxhZ3MsIHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJdTggY21kKTsKKwogLyogQWNjZXNzZWQgdW5kZXIgZ2VubCBsb2NrICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IGwydHBfbmxfY21kX29wcyAqbDJ0cF9ubF9jbWRfb3BzW19fTDJUUF9QV1RZUEVfTUFYXTsKIApAQCAtOTcsNiArMTA5LDUyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBsMnRwX3R1bm5lbF9ub3RpZnkoc3RydWN0IGdlbmxfZmFtaWx5ICpmYW1pbHksCisJCQkgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAorCQkJICAgICAgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsCisJCQkgICAgICB1OCBjbWQpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwlpbnQgcmV0OworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gbDJ0cF9ubF90dW5uZWxfc2VuZChtc2csIGluZm8tPnNuZF9wb3J0aWQsIGluZm8tPnNuZF9zZXEsCisJCQkJICBOTE1fRl9BQ0ssIHR1bm5lbCwgY21kKTsKKworCWlmIChyZXQgPj0gMCkKKwkJcmV0dXJuIGdlbmxtc2dfbXVsdGljYXN0X2FsbG5zKGZhbWlseSwgbXNnLCAwLAkwLCBHRlBfQVRPTUlDKTsKKworCW5sbXNnX2ZyZWUobXNnKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbDJ0cF9zZXNzaW9uX25vdGlmeShzdHJ1Y3QgZ2VubF9mYW1pbHkgKmZhbWlseSwKKwkJCSAgICAgICBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvLAorCQkJICAgICAgIHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24sCisJCQkgICAgICAgdTggY21kKQoreworCXN0cnVjdCBza19idWZmICptc2c7CisJaW50IHJldDsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IGwydHBfbmxfc2Vzc2lvbl9zZW5kKG1zZywgaW5mby0+c25kX3BvcnRpZCwgaW5mby0+c25kX3NlcSwKKwkJCQkgICBOTE1fRl9BQ0ssIHNlc3Npb24sIGNtZCk7CisKKwlpZiAocmV0ID49IDApCisJCXJldHVybiBnZW5sbXNnX211bHRpY2FzdF9hbGxucyhmYW1pbHksIG1zZywgMCwJMCwgR0ZQX0FUT01JQyk7CisKKwlubG1zZ19mcmVlKG1zZyk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGwydHBfbmxfY21kX3R1bm5lbF9jcmVhdGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKIAl1MzIgdHVubmVsX2lkOwpAQCAtMTg4LDYgKzI0Niw5IEBACiAJCWJyZWFrOwogCX0KIAorCWlmIChyZXQgPj0gMCkKKwkJcmV0ID0gbDJ0cF90dW5uZWxfbm90aWZ5KCZsMnRwX25sX2ZhbWlseSwgaW5mbywKKwkJCQkJIHR1bm5lbCwgTDJUUF9DTURfVFVOTkVMX0NSRUFURSk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTIxMSw2ICsyNzIsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlsMnRwX3R1bm5lbF9ub3RpZnkoJmwydHBfbmxfZmFtaWx5LCBpbmZvLAorCQkJICAgdHVubmVsLCBMMlRQX0NNRF9UVU5ORUxfREVMRVRFKTsKKwogCSh2b2lkKSBsMnRwX3R1bm5lbF9kZWxldGUodHVubmVsKTsKIAogb3V0OgpAQCAtMjM5LDEyICszMDMsMTUgQEAKIAlpZiAoaW5mby0+YXR0cnNbTDJUUF9BVFRSX0RFQlVHXSkKIAkJdHVubmVsLT5kZWJ1ZyA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW0wyVFBfQVRUUl9ERUJVR10pOwogCisJcmV0ID0gbDJ0cF90dW5uZWxfbm90aWZ5KCZsMnRwX25sX2ZhbWlseSwgaW5mbywKKwkJCQkgdHVubmVsLCBMMlRQX0NNRF9UVU5ORUxfTU9ESUZZKTsKKwogb3V0OgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbDJ0cF9ubF90dW5uZWxfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLCB1MzIgc2VxLCBpbnQgZmxhZ3MsCi0JCQkgICAgICAgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpCisJCQkgICAgICAgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsIHU4IGNtZCkKIHsKIAl2b2lkICpoZHI7CiAJc3RydWN0IG5sYXR0ciAqbmVzdDsKQEAgLTI1NCw4ICszMjEsNyBAQAogCXN0cnVjdCBpcHY2X3BpbmZvICpucCA9IE5VTEw7CiAjZW5kaWYKIAotCWhkciA9IGdlbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsICZsMnRwX25sX2ZhbWlseSwgZmxhZ3MsCi0JCQkgIEwyVFBfQ01EX1RVTk5FTF9HRVQpOworCWhkciA9IGdlbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsICZsMnRwX25sX2ZhbWlseSwgZmxhZ3MsIGNtZCk7CiAJaWYgKCFoZHIpCiAJCXJldHVybiAtRU1TR1NJWkU7CiAKQEAgLTMyNCw3ICszOTAsOCBAQAogCX0KIAogb3V0OgotCXJldHVybiBnZW5sbXNnX2VuZChza2IsIGhkcik7CisJZ2VubG1zZ19lbmQoc2tiLCBoZHIpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJZ2VubG1zZ19jYW5jZWwoc2tiLCBoZHIpOwpAQCAtMzU5LDcgKzQyNiw3IEBACiAJfQogCiAJcmV0ID0gbDJ0cF9ubF90dW5uZWxfc2VuZChtc2csIGluZm8tPnNuZF9wb3J0aWQsIGluZm8tPnNuZF9zZXEsCi0JCQkJICBOTE1fRl9BQ0ssIHR1bm5lbCk7CisJCQkJICBOTE1fRl9BQ0ssIHR1bm5lbCwgTDJUUF9DTURfVFVOTkVMX0dFVCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX291dDsKIApAQCAtMzg1LDcgKzQ1Miw3IEBACiAKIAkJaWYgKGwydHBfbmxfdHVubmVsX3NlbmQoc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBvcnRpZCwKIAkJCQkJY2ItPm5saC0+bmxtc2dfc2VxLCBOTE1fRl9NVUxUSSwKLQkJCQkJdHVubmVsKSA8PSAwKQorCQkJCQl0dW5uZWwsIEwyVFBfQ01EX1RVTk5FTF9HRVQpIDwgMCkKIAkJCWdvdG8gb3V0OwogCiAJCXRpKys7CkBAIC01MzksNiArNjA2LDEzIEBACiAJCXJldCA9ICgqbDJ0cF9ubF9jbWRfb3BzW2NmZy5wd190eXBlXS0+c2Vzc2lvbl9jcmVhdGUpKG5ldCwgdHVubmVsX2lkLAogCQkJc2Vzc2lvbl9pZCwgcGVlcl9zZXNzaW9uX2lkLCAmY2ZnKTsKIAorCWlmIChyZXQgPj0gMCkgeworCQlzZXNzaW9uID0gbDJ0cF9zZXNzaW9uX2ZpbmQobmV0LCB0dW5uZWwsIHNlc3Npb25faWQpOworCQlpZiAoc2Vzc2lvbikKKwkJCXJldCA9IGwydHBfc2Vzc2lvbl9ub3RpZnkoJmwydHBfbmxfZmFtaWx5LCBpbmZvLCBzZXNzaW9uLAorCQkJCQkJICBMMlRQX0NNRF9TRVNTSU9OX0NSRUFURSk7CisJfQorCiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTU1NSw2ICs2MjksOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlsMnRwX3Nlc3Npb25fbm90aWZ5KCZsMnRwX25sX2ZhbWlseSwgaW5mbywKKwkJCSAgICBzZXNzaW9uLCBMMlRQX0NNRF9TRVNTSU9OX0RFTEVURSk7CisKIAlwd190eXBlID0gc2Vzc2lvbi0+cHd0eXBlOwogCWlmIChwd190eXBlIDwgX19MMlRQX1BXVFlQRV9NQVgpCiAJCWlmIChsMnRwX25sX2NtZF9vcHNbcHdfdHlwZV0gJiYgbDJ0cF9ubF9jbWRfb3BzW3B3X3R5cGVdLT5zZXNzaW9uX2RlbGV0ZSkKQEAgLTYwMSwxMiArNjc4LDE1IEBACiAJaWYgKGluZm8tPmF0dHJzW0wyVFBfQVRUUl9NUlVdKQogCQlzZXNzaW9uLT5tcnUgPSBubGFfZ2V0X3UxNihpbmZvLT5hdHRyc1tMMlRQX0FUVFJfTVJVXSk7CiAKKwlyZXQgPSBsMnRwX3Nlc3Npb25fbm90aWZ5KCZsMnRwX25sX2ZhbWlseSwgaW5mbywKKwkJCQkgIHNlc3Npb24sIEwyVFBfQ01EX1NFU1NJT05fTU9ESUZZKTsKKwogb3V0OgogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbDJ0cF9ubF9zZXNzaW9uX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBvcnRpZCwgdTMyIHNlcSwgaW50IGZsYWdzLAotCQkJCXN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24pCisJCQkJc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbiwgdTggY21kKQogewogCXZvaWQgKmhkcjsKIAlzdHJ1Y3QgbmxhdHRyICpuZXN0OwpAQCAtNjE1LDcgKzY5NSw3IEBACiAKIAlzayA9IHR1bm5lbC0+c29jazsKIAotCWhkciA9IGdlbmxtc2dfcHV0KHNrYiwgcG9ydGlkLCBzZXEsICZsMnRwX25sX2ZhbWlseSwgZmxhZ3MsIEwyVFBfQ01EX1NFU1NJT05fR0VUKTsKKwloZHIgPSBnZW5sbXNnX3B1dChza2IsIHBvcnRpZCwgc2VxLCAmbDJ0cF9ubF9mYW1pbHksIGZsYWdzLCBjbWQpOwogCWlmICghaGRyKQogCQlyZXR1cm4gLUVNU0dTSVpFOwogCkBAIC02NzMsNyArNzUzLDggQEAKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAJbmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7CiAKLQlyZXR1cm4gZ2VubG1zZ19lbmQoc2tiLCBoZHIpOworCWdlbmxtc2dfZW5kKHNrYiwgaGRyKTsKKwlyZXR1cm4gMDsKIAogIG5sYV9wdXRfZmFpbHVyZToKIAlnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7CkBAIC02OTksNyArNzgwLDcgQEAKIAl9CiAKIAlyZXQgPSBsMnRwX25sX3Nlc3Npb25fc2VuZChtc2csIGluZm8tPnNuZF9wb3J0aWQsIGluZm8tPnNuZF9zZXEsCi0JCQkJICAgMCwgc2Vzc2lvbik7CisJCQkJICAgMCwgc2Vzc2lvbiwgTDJUUF9DTURfU0VTU0lPTl9HRVQpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycl9vdXQ7CiAKQEAgLTczNyw3ICs4MTgsNyBAQAogCiAJCWlmIChsMnRwX25sX3Nlc3Npb25fc2VuZChza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucG9ydGlkLAogCQkJCQkgY2ItPm5saC0+bmxtc2dfc2VxLCBOTE1fRl9NVUxUSSwKLQkJCQkJIHNlc3Npb24pIDw9IDApCisJCQkJCSBzZXNzaW9uLCBMMlRQX0NNRF9TRVNTSU9OX0dFVCkgPCAwKQogCQkJYnJlYWs7CiAKIAkJc2krKzsKQEAgLTg5Niw3ICs5NzcsOSBAQAogc3RhdGljIGludCBsMnRwX25sX2luaXQodm9pZCkKIHsKIAlwcl9pbmZvKCJMMlRQIG5ldGxpbmsgaW50ZXJmYWNlXG4iKTsKLQlyZXR1cm4gZ2VubF9yZWdpc3Rlcl9mYW1pbHlfd2l0aF9vcHMoJmwydHBfbmxfZmFtaWx5LCBsMnRwX25sX29wcyk7CisJcmV0dXJuIGdlbmxfcmVnaXN0ZXJfZmFtaWx5X3dpdGhfb3BzX2dyb3VwcygmbDJ0cF9ubF9mYW1pbHksCisJCQkJCQkgICAgbDJ0cF9ubF9vcHMsCisJCQkJCQkgICAgbDJ0cF9tdWx0aWNhc3RfZ3JvdXApOwogfQogCiBzdGF0aWMgdm9pZCBsMnRwX25sX2NsZWFudXAodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9sbGMvc3lzY3RsX25ldF9sbGMuYyBiL25ldC9sbGMvc3lzY3RsX25ldF9sbGMuYwppbmRleCA2MTJhNWRkLi43OTliYWZjIDEwMDY0NAotLS0gYS9uZXQvbGxjL3N5c2N0bF9uZXRfbGxjLmMKKysrIGIvbmV0L2xsYy9zeXNjdGxfbmV0X2xsYy5jCkBAIC0xOCwyOCArMTgsMjggQEAKIAl7CiAJCS5wcm9jbmFtZQk9ICJhY2siLAogCQkuZGF0YQkJPSAmc3lzY3RsX2xsYzJfYWNrX3RpbWVvdXQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGxvbmcpLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfbGxjMl9hY2tfdGltZW91dCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIgICA9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gImJ1c3kiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2xsYzJfYnVzeV90aW1lb3V0LAotCQkubWF4bGVuCQk9IHNpemVvZihsb25nKSwKKwkJLm1heGxlbgkJPSBzaXplb2Yoc3lzY3RsX2xsYzJfYnVzeV90aW1lb3V0KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlciAgID0gcHJvY19kb2ludHZlY19qaWZmaWVzLAogCX0sCiAJewogCQkucHJvY25hbWUJPSAicCIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfbGxjMl9wX3RpbWVvdXQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGxvbmcpLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfbGxjMl9wX3RpbWVvdXQpLAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyICAgPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7CiAJCS5wcm9jbmFtZQk9ICJyZWoiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2xsYzJfcmVqX3RpbWVvdXQsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGxvbmcpLAorCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfbGxjMl9yZWpfdGltZW91dCksCiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIgICA9IHByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL0tjb25maWcgYi9uZXQvbWFjODAyMTEvS2NvbmZpZwppbmRleCA3NWNjNjgwLi42NGEwMTJhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvS2NvbmZpZworKysgYi9uZXQvbWFjODAyMTEvS2NvbmZpZwpAQCAtNSw2ICs1LDcgQEAKIAlzZWxlY3QgQ1JZUFRPX0FSQzQKIAlzZWxlY3QgQ1JZUFRPX0FFUwogCXNlbGVjdCBDUllQVE9fQ0NNCisJc2VsZWN0IENSWVBUT19HQ00KIAlzZWxlY3QgQ1JDMzIKIAlzZWxlY3QgQVZFUkFHRQogCS0tLWhlbHAtLS0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9NYWtlZmlsZSBiL25ldC9tYWM4MDIxMS9NYWtlZmlsZQppbmRleCBlNTM2NzFiLi4zMjc1ZjAxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvTWFrZWZpbGUKKysrIGIvbmV0L21hYzgwMjExL01ha2VmaWxlCkBAIC0xNSw3ICsxNSw5IEBACiAJbWljaGFlbC5vIFwKIAl0a2lwLm8gXAogCWFlc19jY20ubyBcCisJYWVzX2djbS5vIFwKIAlhZXNfY21hYy5vIFwKKwlhZXNfZ21hYy5vIFwKIAljZmcubyBcCiAJZXRodG9vbC5vIFwKIAlyeC5vIFwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfY2NtLmMgYi9uZXQvbWFjODAyMTEvYWVzX2NjbS5jCmluZGV4IDA5ZDljYWEuLjc4NjliYjQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZXNfY2NtLmMKKysrIGIvbmV0L21hYzgwMjExL2Flc19jY20uYwpAQCAtMjAsNyArMjAsOCBAQAogI2luY2x1ZGUgImFlc19jY20uaCIKIAogdm9pZCBpZWVlODAyMTFfYWVzX2NjbV9lbmNyeXB0KHN0cnVjdCBjcnlwdG9fYWVhZCAqdGZtLCB1OCAqYl8wLCB1OCAqYWFkLAotCQkJICAgICAgIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpCisJCQkgICAgICAgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1pYywKKwkJCSAgICAgICBzaXplX3QgbWljX2xlbikKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgYXNzb2MsIHB0LCBjdFsyXTsKIApAQCAtMzUsNyArMzYsNyBAQAogCXNnX2luaXRfb25lKCZhc3NvYywgJmFhZFsyXSwgYmUxNl90b19jcHVwKChfX2JlMTYgKilhYWQpKTsKIAlzZ19pbml0X3RhYmxlKGN0LCAyKTsKIAlzZ19zZXRfYnVmKCZjdFswXSwgZGF0YSwgZGF0YV9sZW4pOwotCXNnX3NldF9idWYoJmN0WzFdLCBtaWMsIElFRUU4MDIxMV9DQ01QX01JQ19MRU4pOworCXNnX3NldF9idWYoJmN0WzFdLCBtaWMsIG1pY19sZW4pOwogCiAJYWVhZF9yZXF1ZXN0X3NldF90Zm0oYWVhZF9yZXEsIHRmbSk7CiAJYWVhZF9yZXF1ZXN0X3NldF9hc3NvYyhhZWFkX3JlcSwgJmFzc29jLCBhc3NvYy5sZW5ndGgpOwpAQCAtNDUsNyArNDYsOCBAQAogfQogCiBpbnQgaWVlZTgwMjExX2Flc19jY21fZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSwgdTggKmJfMCwgdTggKmFhZCwKLQkJCSAgICAgIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpCisJCQkgICAgICB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljLAorCQkJICAgICAgc2l6ZV90IG1pY19sZW4pCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IGFzc29jLCBwdCwgY3RbMl07CiAJY2hhciBhZWFkX3JlcV9kYXRhW3NpemVvZihzdHJ1Y3QgYWVhZF9yZXF1ZXN0KSArCkBAIC02MiwxNyArNjQsMTggQEAKIAlzZ19pbml0X29uZSgmYXNzb2MsICZhYWRbMl0sIGJlMTZfdG9fY3B1cCgoX19iZTE2ICopYWFkKSk7CiAJc2dfaW5pdF90YWJsZShjdCwgMik7CiAJc2dfc2V0X2J1ZigmY3RbMF0sIGRhdGEsIGRhdGFfbGVuKTsKLQlzZ19zZXRfYnVmKCZjdFsxXSwgbWljLCBJRUVFODAyMTFfQ0NNUF9NSUNfTEVOKTsKKwlzZ19zZXRfYnVmKCZjdFsxXSwgbWljLCBtaWNfbGVuKTsKIAogCWFlYWRfcmVxdWVzdF9zZXRfdGZtKGFlYWRfcmVxLCB0Zm0pOwogCWFlYWRfcmVxdWVzdF9zZXRfYXNzb2MoYWVhZF9yZXEsICZhc3NvYywgYXNzb2MubGVuZ3RoKTsKLQlhZWFkX3JlcXVlc3Rfc2V0X2NyeXB0KGFlYWRfcmVxLCBjdCwgJnB0LAotCQkJICAgICAgIGRhdGFfbGVuICsgSUVFRTgwMjExX0NDTVBfTUlDX0xFTiwgYl8wKTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2NyeXB0KGFlYWRfcmVxLCBjdCwgJnB0LCBkYXRhX2xlbiArIG1pY19sZW4sIGJfMCk7CiAKIAlyZXR1cm4gY3J5cHRvX2FlYWRfZGVjcnlwdChhZWFkX3JlcSk7CiB9CiAKLXN0cnVjdCBjcnlwdG9fYWVhZCAqaWVlZTgwMjExX2Flc19rZXlfc2V0dXBfZW5jcnlwdChjb25zdCB1OCBrZXlbXSkKK3N0cnVjdCBjcnlwdG9fYWVhZCAqaWVlZTgwMjExX2Flc19rZXlfc2V0dXBfZW5jcnlwdChjb25zdCB1OCBrZXlbXSwKKwkJCQkJCSAgICBzaXplX3Qga2V5X2xlbiwKKwkJCQkJCSAgICBzaXplX3QgbWljX2xlbikKIHsKIAlzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbTsKIAlpbnQgZXJyOwpAQCAtODEsOSArODQsOSBAQAogCWlmIChJU19FUlIodGZtKSkKIAkJcmV0dXJuIHRmbTsKIAotCWVyciA9IGNyeXB0b19hZWFkX3NldGtleSh0Zm0sIGtleSwgV0xBTl9LRVlfTEVOX0NDTVApOworCWVyciA9IGNyeXB0b19hZWFkX3NldGtleSh0Zm0sIGtleSwga2V5X2xlbik7CiAJaWYgKCFlcnIpCi0JCWVyciA9IGNyeXB0b19hZWFkX3NldGF1dGhzaXplKHRmbSwgSUVFRTgwMjExX0NDTVBfTUlDX0xFTik7CisJCWVyciA9IGNyeXB0b19hZWFkX3NldGF1dGhzaXplKHRmbSwgbWljX2xlbik7CiAJaWYgKCFlcnIpCiAJCXJldHVybiB0Zm07CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfY2NtLmggYi9uZXQvbWFjODAyMTEvYWVzX2NjbS5oCmluZGV4IDJjN2FiMTkuLjZhNzNkMWUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZXNfY2NtLmgKKysrIGIvbmV0L21hYzgwMjExL2Flc19jY20uaApAQCAtMTIsMTEgKzEyLDE1IEBACiAKICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KIAotc3RydWN0IGNyeXB0b19hZWFkICppZWVlODAyMTFfYWVzX2tleV9zZXR1cF9lbmNyeXB0KGNvbnN0IHU4IGtleVtdKTsKK3N0cnVjdCBjcnlwdG9fYWVhZCAqaWVlZTgwMjExX2Flc19rZXlfc2V0dXBfZW5jcnlwdChjb25zdCB1OCBrZXlbXSwKKwkJCQkJCSAgICBzaXplX3Qga2V5X2xlbiwKKwkJCQkJCSAgICBzaXplX3QgbWljX2xlbik7CiB2b2lkIGllZWU4MDIxMV9hZXNfY2NtX2VuY3J5cHQoc3RydWN0IGNyeXB0b19hZWFkICp0Zm0sIHU4ICpiXzAsIHU4ICphYWQsCi0JCQkgICAgICAgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1pYyk7CisJCQkgICAgICAgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1pYywKKwkJCSAgICAgICBzaXplX3QgbWljX2xlbik7CiBpbnQgaWVlZTgwMjExX2Flc19jY21fZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSwgdTggKmJfMCwgdTggKmFhZCwKLQkJCSAgICAgIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpOworCQkJICAgICAgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1pYywKKwkJCSAgICAgIHNpemVfdCBtaWNfbGVuKTsKIHZvaWQgaWVlZTgwMjExX2Flc19rZXlfZnJlZShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSk7CiAKICNlbmRpZiAvKiBBRVNfQ0NNX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfY21hYy5jIGIvbmV0L21hYzgwMjExL2Flc19jbWFjLmMKaW5kZXggOWI5MDA5Zi4uNDE5MjgwNiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2Flc19jbWFjLmMKKysrIGIvbmV0L21hYzgwMjExL2Flc19jbWFjLmMKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlICJrZXkuaCIKICNpbmNsdWRlICJhZXNfY21hYy5oIgogCi0jZGVmaW5lIEFFU19DTUFDX0tFWV9MRU4gMTYKICNkZWZpbmUgQ01BQ19UTEVOIDggLyogQ01BQyBUTGVuID0gNjQgYml0cyAoOCBvY3RldHMpICovCisjZGVmaW5lIENNQUNfVExFTl8yNTYgMTYgLyogQ01BQyBUTGVuID0gMTI4IGJpdHMgKDE2IG9jdGV0cykgKi8KICNkZWZpbmUgQUFEX0xFTiAyMAogCiAKQEAgLTM1LDkgKzM1LDkgQEAKIAkJcGFkW0FFU19CTE9DS19TSVpFIC0gMV0gXj0gMHg4NzsKIH0KIAotCi1zdGF0aWMgdm9pZCBhZXNfMTI4X2NtYWNfdmVjdG9yKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sIHNpemVfdCBudW1fZWxlbSwKLQkJCQljb25zdCB1OCAqYWRkcltdLCBjb25zdCBzaXplX3QgKmxlbiwgdTggKm1hYykKK3N0YXRpYyB2b2lkIGFlc19jbWFjX3ZlY3RvcihzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtLCBzaXplX3QgbnVtX2VsZW0sCisJCQkgICAgY29uc3QgdTggKmFkZHJbXSwgY29uc3Qgc2l6ZV90ICpsZW4sIHU4ICptYWMsCisJCQkgICAgc2l6ZV90IG1hY19sZW4pCiB7CiAJdTggY2JjW0FFU19CTE9DS19TSVpFXSwgcGFkW0FFU19CTE9DS19TSVpFXTsKIAljb25zdCB1OCAqcG9zLCAqZW5kOwpAQCAtODgsNyArODgsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBBRVNfQkxPQ0tfU0laRTsgaSsrKQogCQlwYWRbaV0gXj0gY2JjW2ldOwogCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUodGZtLCBwYWQsIHBhZCk7Ci0JbWVtY3B5KG1hYywgcGFkLCBDTUFDX1RMRU4pOworCW1lbWNweShtYWMsIHBhZCwgbWFjX2xlbik7CiB9CiAKIApAQCAtMTA3LDE3ICsxMDcsMzUgQEAKIAlhZGRyWzJdID0gemVybzsKIAlsZW5bMl0gPSBDTUFDX1RMRU47CiAKLQlhZXNfMTI4X2NtYWNfdmVjdG9yKHRmbSwgMywgYWRkciwgbGVuLCBtaWMpOworCWFlc19jbWFjX3ZlY3Rvcih0Zm0sIDMsIGFkZHIsIGxlbiwgbWljLCBDTUFDX1RMRU4pOwogfQogCit2b2lkIGllZWU4MDIxMV9hZXNfY21hY18yNTYoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwgY29uc3QgdTggKmFhZCwKKwkJCSAgICBjb25zdCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKQoreworCWNvbnN0IHU4ICphZGRyWzNdOworCXNpemVfdCBsZW5bM107CisJdTggemVyb1tDTUFDX1RMRU5fMjU2XTsKIAotc3RydWN0IGNyeXB0b19jaXBoZXIgKmllZWU4MDIxMV9hZXNfY21hY19rZXlfc2V0dXAoY29uc3QgdTgga2V5W10pCisJbWVtc2V0KHplcm8sIDAsIENNQUNfVExFTl8yNTYpOworCWFkZHJbMF0gPSBhYWQ7CisJbGVuWzBdID0gQUFEX0xFTjsKKwlhZGRyWzFdID0gZGF0YTsKKwlsZW5bMV0gPSBkYXRhX2xlbiAtIENNQUNfVExFTl8yNTY7CisJYWRkclsyXSA9IHplcm87CisJbGVuWzJdID0gQ01BQ19UTEVOXzI1NjsKKworCWFlc19jbWFjX3ZlY3Rvcih0Zm0sIDMsIGFkZHIsIGxlbiwgbWljLCBDTUFDX1RMRU5fMjU2KTsKK30KKworc3RydWN0IGNyeXB0b19jaXBoZXIgKmllZWU4MDIxMV9hZXNfY21hY19rZXlfc2V0dXAoY29uc3QgdTgga2V5W10sCisJCQkJCQkgICBzaXplX3Qga2V5X2xlbikKIHsKIAlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtOwogCiAJdGZtID0gY3J5cHRvX2FsbG9jX2NpcGhlcigiYWVzIiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CiAJaWYgKCFJU19FUlIodGZtKSkKLQkJY3J5cHRvX2NpcGhlcl9zZXRrZXkodGZtLCBrZXksIEFFU19DTUFDX0tFWV9MRU4pOworCQljcnlwdG9fY2lwaGVyX3NldGtleSh0Zm0sIGtleSwga2V5X2xlbik7CiAKIAlyZXR1cm4gdGZtOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2Flc19jbWFjLmggYi9uZXQvbWFjODAyMTEvYWVzX2NtYWMuaAppbmRleCAwY2U2NDg3Li4zNzAyMDQxIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvYWVzX2NtYWMuaAorKysgYi9uZXQvbWFjODAyMTEvYWVzX2NtYWMuaApAQCAtMTEsOSArMTEsMTIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogCi1zdHJ1Y3QgY3J5cHRvX2NpcGhlciAqaWVlZTgwMjExX2Flc19jbWFjX2tleV9zZXR1cChjb25zdCB1OCBrZXlbXSk7CitzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqaWVlZTgwMjExX2Flc19jbWFjX2tleV9zZXR1cChjb25zdCB1OCBrZXlbXSwKKwkJCQkJCSAgIHNpemVfdCBrZXlfbGVuKTsKIHZvaWQgaWVlZTgwMjExX2Flc19jbWFjKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sIGNvbnN0IHU4ICphYWQsCiAJCQljb25zdCB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKTsKK3ZvaWQgaWVlZTgwMjExX2Flc19jbWFjXzI1NihzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtLCBjb25zdCB1OCAqYWFkLAorCQkJICAgIGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpOwogdm9pZCBpZWVlODAyMTFfYWVzX2NtYWNfa2V5X2ZyZWUoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSk7CiAKICNlbmRpZiAvKiBBRVNfQ01BQ19IICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWVzX2djbS5jIGIvbmV0L21hYzgwMjExL2Flc19nY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmJmNjY5Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2Flc19nY20uYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgUXVhbGNvbW0gQXRoZXJvcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgorCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSAia2V5LmgiCisjaW5jbHVkZSAiYWVzX2djbS5oIgorCit2b2lkIGllZWU4MDIxMV9hZXNfZ2NtX2VuY3J5cHQoc3RydWN0IGNyeXB0b19hZWFkICp0Zm0sIHU4ICpqXzAsIHU4ICphYWQsCisJCQkgICAgICAgdTggKmRhdGEsIHNpemVfdCBkYXRhX2xlbiwgdTggKm1pYykKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgYXNzb2MsIHB0LCBjdFsyXTsKKworCWNoYXIgYWVhZF9yZXFfZGF0YVtzaXplb2Yoc3RydWN0IGFlYWRfcmVxdWVzdCkgKworCQkJICAgY3J5cHRvX2FlYWRfcmVxc2l6ZSh0Zm0pXQorCQlfX2FsaWduZWQoX19hbGlnbm9mX18oc3RydWN0IGFlYWRfcmVxdWVzdCkpOworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKmFlYWRfcmVxID0gKHZvaWQgKilhZWFkX3JlcV9kYXRhOworCisJbWVtc2V0KGFlYWRfcmVxLCAwLCBzaXplb2YoYWVhZF9yZXFfZGF0YSkpOworCisJc2dfaW5pdF9vbmUoJnB0LCBkYXRhLCBkYXRhX2xlbik7CisJc2dfaW5pdF9vbmUoJmFzc29jLCAmYWFkWzJdLCBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKWFhZCkpOworCXNnX2luaXRfdGFibGUoY3QsIDIpOworCXNnX3NldF9idWYoJmN0WzBdLCBkYXRhLCBkYXRhX2xlbik7CisJc2dfc2V0X2J1ZigmY3RbMV0sIG1pYywgSUVFRTgwMjExX0dDTVBfTUlDX0xFTik7CisKKwlhZWFkX3JlcXVlc3Rfc2V0X3RmbShhZWFkX3JlcSwgdGZtKTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2Fzc29jKGFlYWRfcmVxLCAmYXNzb2MsIGFzc29jLmxlbmd0aCk7CisJYWVhZF9yZXF1ZXN0X3NldF9jcnlwdChhZWFkX3JlcSwgJnB0LCBjdCwgZGF0YV9sZW4sIGpfMCk7CisKKwljcnlwdG9fYWVhZF9lbmNyeXB0KGFlYWRfcmVxKTsKK30KKworaW50IGllZWU4MDIxMV9hZXNfZ2NtX2RlY3J5cHQoc3RydWN0IGNyeXB0b19hZWFkICp0Zm0sIHU4ICpqXzAsIHU4ICphYWQsCisJCQkgICAgICB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCBhc3NvYywgcHQsIGN0WzJdOworCWNoYXIgYWVhZF9yZXFfZGF0YVtzaXplb2Yoc3RydWN0IGFlYWRfcmVxdWVzdCkgKworCQkJICAgY3J5cHRvX2FlYWRfcmVxc2l6ZSh0Zm0pXQorCQlfX2FsaWduZWQoX19hbGlnbm9mX18oc3RydWN0IGFlYWRfcmVxdWVzdCkpOworCXN0cnVjdCBhZWFkX3JlcXVlc3QgKmFlYWRfcmVxID0gKHZvaWQgKilhZWFkX3JlcV9kYXRhOworCisJaWYgKGRhdGFfbGVuID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtc2V0KGFlYWRfcmVxLCAwLCBzaXplb2YoYWVhZF9yZXFfZGF0YSkpOworCisJc2dfaW5pdF9vbmUoJnB0LCBkYXRhLCBkYXRhX2xlbik7CisJc2dfaW5pdF9vbmUoJmFzc29jLCAmYWFkWzJdLCBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKWFhZCkpOworCXNnX2luaXRfdGFibGUoY3QsIDIpOworCXNnX3NldF9idWYoJmN0WzBdLCBkYXRhLCBkYXRhX2xlbik7CisJc2dfc2V0X2J1ZigmY3RbMV0sIG1pYywgSUVFRTgwMjExX0dDTVBfTUlDX0xFTik7CisKKwlhZWFkX3JlcXVlc3Rfc2V0X3RmbShhZWFkX3JlcSwgdGZtKTsKKwlhZWFkX3JlcXVlc3Rfc2V0X2Fzc29jKGFlYWRfcmVxLCAmYXNzb2MsIGFzc29jLmxlbmd0aCk7CisJYWVhZF9yZXF1ZXN0X3NldF9jcnlwdChhZWFkX3JlcSwgY3QsICZwdCwKKwkJCSAgICAgICBkYXRhX2xlbiArIElFRUU4MDIxMV9HQ01QX01JQ19MRU4sIGpfMCk7CisKKwlyZXR1cm4gY3J5cHRvX2FlYWRfZGVjcnlwdChhZWFkX3JlcSk7Cit9CisKK3N0cnVjdCBjcnlwdG9fYWVhZCAqaWVlZTgwMjExX2Flc19nY21fa2V5X3NldHVwX2VuY3J5cHQoY29uc3QgdTgga2V5W10sCisJCQkJCQkJc2l6ZV90IGtleV9sZW4pCit7CisJc3RydWN0IGNyeXB0b19hZWFkICp0Zm07CisJaW50IGVycjsKKworCXRmbSA9IGNyeXB0b19hbGxvY19hZWFkKCJnY20oYWVzKSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIodGZtKSkKKwkJcmV0dXJuIHRmbTsKKworCWVyciA9IGNyeXB0b19hZWFkX3NldGtleSh0Zm0sIGtleSwga2V5X2xlbik7CisJaWYgKCFlcnIpCisJCWVyciA9IGNyeXB0b19hZWFkX3NldGF1dGhzaXplKHRmbSwgSUVFRTgwMjExX0dDTVBfTUlDX0xFTik7CisJaWYgKCFlcnIpCisJCXJldHVybiB0Zm07CisKKwljcnlwdG9fZnJlZV9hZWFkKHRmbSk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KKwordm9pZCBpZWVlODAyMTFfYWVzX2djbV9rZXlfZnJlZShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSkKK3sKKwljcnlwdG9fZnJlZV9hZWFkKHRmbSk7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWVzX2djbS5oIGIvbmV0L21hYzgwMjExL2Flc19nY20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzQ3ZmRhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L21hYzgwMjExL2Flc19nY20uaApAQCAtMCwwICsxLDIyIEBACisvKgorICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgUXVhbGNvbW0gQXRoZXJvcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBBRVNfR0NNX0gKKyNkZWZpbmUgQUVTX0dDTV9ICisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKwordm9pZCBpZWVlODAyMTFfYWVzX2djbV9lbmNyeXB0KHN0cnVjdCBjcnlwdG9fYWVhZCAqdGZtLCB1OCAqal8wLCB1OCAqYWFkLAorCQkJICAgICAgIHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpOworaW50IGllZWU4MDIxMV9hZXNfZ2NtX2RlY3J5cHQoc3RydWN0IGNyeXB0b19hZWFkICp0Zm0sIHU4ICpqXzAsIHU4ICphYWQsCisJCQkgICAgICB1OCAqZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqbWljKTsKK3N0cnVjdCBjcnlwdG9fYWVhZCAqaWVlZTgwMjExX2Flc19nY21fa2V5X3NldHVwX2VuY3J5cHQoY29uc3QgdTgga2V5W10sCisJCQkJCQkJc2l6ZV90IGtleV9sZW4pOwordm9pZCBpZWVlODAyMTFfYWVzX2djbV9rZXlfZnJlZShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSk7CisKKyNlbmRpZiAvKiBBRVNfR0NNX0ggKi8KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9hZXNfZ21hYy5jIGIvbmV0L21hYzgwMjExL2Flc19nbWFjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM3MmVkYwotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9hZXNfZ21hYy5jCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBBRVMtR01BQyBmb3IgSUVFRSA4MDIuMTEgQklQLUdNQUMtMTI4IGFuZCBCSVAtR01BQy0yNTYKKyAqIENvcHlyaWdodCAyMDE1LCBRdWFsY29tbSBBdGhlcm9zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxjcnlwdG8vYWVzLmg+CisKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKyNpbmNsdWRlICJrZXkuaCIKKyNpbmNsdWRlICJhZXNfZ21hYy5oIgorCisjZGVmaW5lIEdNQUNfTUlDX0xFTiAxNgorI2RlZmluZSBHTUFDX05PTkNFX0xFTiAxMgorI2RlZmluZSBBQURfTEVOIDIwCisKK2ludCBpZWVlODAyMTFfYWVzX2dtYWMoc3RydWN0IGNyeXB0b19hZWFkICp0Zm0sIGNvbnN0IHU4ICphYWQsIHU4ICpub25jZSwKKwkJICAgICAgIGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzNdLCBjdFsxXTsKKwljaGFyIGFlYWRfcmVxX2RhdGFbc2l6ZW9mKHN0cnVjdCBhZWFkX3JlcXVlc3QpICsKKwkJCSAgIGNyeXB0b19hZWFkX3JlcXNpemUodGZtKV0KKwkJX19hbGlnbmVkKF9fYWxpZ25vZl9fKHN0cnVjdCBhZWFkX3JlcXVlc3QpKTsKKwlzdHJ1Y3QgYWVhZF9yZXF1ZXN0ICphZWFkX3JlcSA9ICh2b2lkICopYWVhZF9yZXFfZGF0YTsKKwl1OCB6ZXJvW0dNQUNfTUlDX0xFTl0sIGl2W0FFU19CTE9DS19TSVpFXTsKKworCWlmIChkYXRhX2xlbiA8IEdNQUNfTUlDX0xFTikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoYWVhZF9yZXEsIDAsIHNpemVvZihhZWFkX3JlcV9kYXRhKSk7CisKKwltZW1zZXQoemVybywgMCwgR01BQ19NSUNfTEVOKTsKKwlzZ19pbml0X3RhYmxlKHNnLCAzKTsKKwlzZ19zZXRfYnVmKCZzZ1swXSwgYWFkLCBBQURfTEVOKTsKKwlzZ19zZXRfYnVmKCZzZ1sxXSwgZGF0YSwgZGF0YV9sZW4gLSBHTUFDX01JQ19MRU4pOworCXNnX3NldF9idWYoJnNnWzJdLCB6ZXJvLCBHTUFDX01JQ19MRU4pOworCisJbWVtY3B5KGl2LCBub25jZSwgR01BQ19OT05DRV9MRU4pOworCW1lbXNldChpdiArIEdNQUNfTk9OQ0VfTEVOLCAwLCBzaXplb2YoaXYpIC0gR01BQ19OT05DRV9MRU4pOworCWl2W0FFU19CTE9DS19TSVpFIC0gMV0gPSAweDAxOworCisJc2dfaW5pdF90YWJsZShjdCwgMSk7CisJc2dfc2V0X2J1ZigmY3RbMF0sIG1pYywgR01BQ19NSUNfTEVOKTsKKworCWFlYWRfcmVxdWVzdF9zZXRfdGZtKGFlYWRfcmVxLCB0Zm0pOworCWFlYWRfcmVxdWVzdF9zZXRfYXNzb2MoYWVhZF9yZXEsIHNnLCBBQURfTEVOICsgZGF0YV9sZW4pOworCWFlYWRfcmVxdWVzdF9zZXRfY3J5cHQoYWVhZF9yZXEsIE5VTEwsIGN0LCAwLCBpdik7CisKKwljcnlwdG9fYWVhZF9lbmNyeXB0KGFlYWRfcmVxKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgY3J5cHRvX2FlYWQgKmllZWU4MDIxMV9hZXNfZ21hY19rZXlfc2V0dXAoY29uc3QgdTgga2V5W10sCisJCQkJCQkgc2l6ZV90IGtleV9sZW4pCit7CisJc3RydWN0IGNyeXB0b19hZWFkICp0Zm07CisJaW50IGVycjsKKworCXRmbSA9IGNyeXB0b19hbGxvY19hZWFkKCJnY20oYWVzKSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIodGZtKSkKKwkJcmV0dXJuIHRmbTsKKworCWVyciA9IGNyeXB0b19hZWFkX3NldGtleSh0Zm0sIGtleSwga2V5X2xlbik7CisJaWYgKCFlcnIpCisJCXJldHVybiB0Zm07CisJaWYgKCFlcnIpCisJCWVyciA9IGNyeXB0b19hZWFkX3NldGF1dGhzaXplKHRmbSwgR01BQ19NSUNfTEVOKTsKKworCWNyeXB0b19mcmVlX2FlYWQodGZtKTsKKwlyZXR1cm4gRVJSX1BUUihlcnIpOworfQorCit2b2lkIGllZWU4MDIxMV9hZXNfZ21hY19rZXlfZnJlZShzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbSkKK3sKKwljcnlwdG9fZnJlZV9hZWFkKHRmbSk7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWVzX2dtYWMuaCBiL25ldC9tYWM4MDIxMS9hZXNfZ21hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMjgyMDQKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvbWFjODAyMTEvYWVzX2dtYWMuaApAQCAtMCwwICsxLDIwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTUsIFF1YWxjb21tIEF0aGVyb3MsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgQUVTX0dNQUNfSAorI2RlZmluZSBBRVNfR01BQ19ICisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKworc3RydWN0IGNyeXB0b19hZWFkICppZWVlODAyMTFfYWVzX2dtYWNfa2V5X3NldHVwKGNvbnN0IHU4IGtleVtdLAorCQkJCQkJIHNpemVfdCBrZXlfbGVuKTsKK2ludCBpZWVlODAyMTFfYWVzX2dtYWMoc3RydWN0IGNyeXB0b19hZWFkICp0Zm0sIGNvbnN0IHU4ICphYWQsIHU4ICpub25jZSwKKwkJICAgICAgIGNvbnN0IHU4ICpkYXRhLCBzaXplX3QgZGF0YV9sZW4sIHU4ICptaWMpOwordm9pZCBpZWVlODAyMTFfYWVzX2dtYWNfa2V5X2ZyZWUoc3RydWN0IGNyeXB0b19hZWFkICp0Zm0pOworCisjZW5kaWYgLyogQUVTX0dNQUNfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jCmluZGV4IGU3NWQ1YzUuLmRkNGZmMzYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9jZmcuYworKysgYi9uZXQvbWFjODAyMTEvY2ZnLmMKQEAgLTE2Miw4ICsxNjIsMTMgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QXzI1NjoKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0NNQUNfMjU2OgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0dNQUNfMTI4OgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0dNQUNfMjU2OgogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVBfMjU2OgogCQlicmVhazsKIAlkZWZhdWx0OgogCQljcyA9IGllZWU4MDIxMV9jc19nZXQobG9jYWwsIHBhcmFtcy0+Y2lwaGVyLCBzZGF0YS0+dmlmLnR5cGUpOwpAQCAtMzQ4LDYgKzM1Myw3IEBACiAJCXBhcmFtcy5zZXFfbGVuID0gNjsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUF8yNTY6CiAJCXBuNjQgPSBhdG9taWM2NF9yZWFkKCZrZXktPnUuY2NtcC50eF9wbik7CiAJCXNlcVswXSA9IHBuNjQ7CiAJCXNlcVsxXSA9IHBuNjQgPj4gODsKQEAgLTM1OSw2ICszNjUsNyBAQAogCQlwYXJhbXMuc2VxX2xlbiA9IDY7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfQ01BQ18yNTY6CiAJCXBuNjQgPSBhdG9taWM2NF9yZWFkKCZrZXktPnUuYWVzX2NtYWMudHhfcG4pOwogCQlzZXFbMF0gPSBwbjY0OwogCQlzZXFbMV0gPSBwbjY0ID4+IDg7CkBAIC0zNjksNiArMzc2LDMwIEBACiAJCXBhcmFtcy5zZXEgPSBzZXE7CiAJCXBhcmFtcy5zZXFfbGVuID0gNjsKIAkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18xMjg6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18yNTY6CisJCXBuNjQgPSBhdG9taWM2NF9yZWFkKCZrZXktPnUuYWVzX2dtYWMudHhfcG4pOworCQlzZXFbMF0gPSBwbjY0OworCQlzZXFbMV0gPSBwbjY0ID4+IDg7CisJCXNlcVsyXSA9IHBuNjQgPj4gMTY7CisJCXNlcVszXSA9IHBuNjQgPj4gMjQ7CisJCXNlcVs0XSA9IHBuNjQgPj4gMzI7CisJCXNlcVs1XSA9IHBuNjQgPj4gNDA7CisJCXBhcmFtcy5zZXEgPSBzZXE7CisJCXBhcmFtcy5zZXFfbGVuID0gNjsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTY6CisJCXBuNjQgPSBhdG9taWM2NF9yZWFkKCZrZXktPnUuZ2NtcC50eF9wbik7CisJCXNlcVswXSA9IHBuNjQ7CisJCXNlcVsxXSA9IHBuNjQgPj4gODsKKwkJc2VxWzJdID0gcG42NCA+PiAxNjsKKwkJc2VxWzNdID0gcG42NCA+PiAyNDsKKwkJc2VxWzRdID0gcG42NCA+PiAzMjsKKwkJc2VxWzVdID0gcG42NCA+PiA0MDsKKwkJcGFyYW1zLnNlcSA9IHNlcTsKKwkJcGFyYW1zLnNlcV9sZW4gPSA2OworCQlicmVhazsKIAl9CiAKIAlwYXJhbXMua2V5ID0ga2V5LT5jb25mLmtleTsKQEAgLTQyOCwxMSArNDU5LDEzIEBACiAJCXJpbmZvLT5sZWdhY3kgPSBESVZfUk9VTkRfVVAoYnJhdGUsIDEgPDwgc2hpZnQpOwogCX0KIAlpZiAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfNDBfTUhaX1dJRFRIKQotCQlyaW5mby0+ZmxhZ3MgfD0gUkFURV9JTkZPX0ZMQUdTXzQwX01IWl9XSURUSDsKLQlpZiAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfODBfTUhaX1dJRFRIKQotCQlyaW5mby0+ZmxhZ3MgfD0gUkFURV9JTkZPX0ZMQUdTXzgwX01IWl9XSURUSDsKLQlpZiAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfMTYwX01IWl9XSURUSCkKLQkJcmluZm8tPmZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU18xNjBfTUhaX1dJRFRIOworCQlyaW5mby0+YncgPSBSQVRFX0lORk9fQldfNDA7CisJZWxzZSBpZiAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfODBfTUhaX1dJRFRIKQorCQlyaW5mby0+YncgPSBSQVRFX0lORk9fQldfODA7CisJZWxzZSBpZiAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfMTYwX01IWl9XSURUSCkKKwkJcmluZm8tPmJ3ID0gUkFURV9JTkZPX0JXXzE2MDsKKwllbHNlCisJCXJpbmZvLT5idyA9IFJBVEVfSU5GT19CV18yMDsKIAlpZiAocmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpCiAJCXJpbmZvLT5mbGFncyB8PSBSQVRFX0lORk9fRkxBR1NfU0hPUlRfR0k7CiB9CkBAIC00NTksMTYgKzQ5MiwyMSBAQAogCQlyaW5mby0+bGVnYWN5ID0gRElWX1JPVU5EX1VQKGJyYXRlLCAxIDw8IHNoaWZ0KTsKIAl9CiAKLQlpZiAoc3RhLT5sYXN0X3J4X3JhdGVfZmxhZyAmIFJYX0ZMQUdfNDBNSFopCi0JCXJpbmZvLT5mbGFncyB8PSBSQVRFX0lORk9fRkxBR1NfNDBfTUhaX1dJRFRIOwogCWlmIChzdGEtPmxhc3RfcnhfcmF0ZV9mbGFnICYgUlhfRkxBR19TSE9SVF9HSSkKIAkJcmluZm8tPmZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU19TSE9SVF9HSTsKLQlpZiAoc3RhLT5sYXN0X3J4X3JhdGVfdmh0X2ZsYWcgJiBSWF9WSFRfRkxBR184ME1IWikKLQkJcmluZm8tPmZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU184MF9NSFpfV0lEVEg7Ci0JaWYgKHN0YS0+bGFzdF9yeF9yYXRlX3ZodF9mbGFnICYgUlhfVkhUX0ZMQUdfODBQODBNSFopCi0JCXJpbmZvLT5mbGFncyB8PSBSQVRFX0lORk9fRkxBR1NfODBQODBfTUhaX1dJRFRIOwotCWlmIChzdGEtPmxhc3RfcnhfcmF0ZV92aHRfZmxhZyAmIFJYX1ZIVF9GTEFHXzE2ME1IWikKLQkJcmluZm8tPmZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU18xNjBfTUhaX1dJRFRIOworCisJaWYgKHN0YS0+bGFzdF9yeF9yYXRlX2ZsYWcgJiBSWF9GTEFHXzVNSFopCisJCXJpbmZvLT5idyA9IFJBVEVfSU5GT19CV181OworCWVsc2UgaWYgKHN0YS0+bGFzdF9yeF9yYXRlX2ZsYWcgJiBSWF9GTEFHXzEwTUhaKQorCQlyaW5mby0+YncgPSBSQVRFX0lORk9fQldfMTA7CisJZWxzZSBpZiAoc3RhLT5sYXN0X3J4X3JhdGVfZmxhZyAmIFJYX0ZMQUdfNDBNSFopCisJCXJpbmZvLT5idyA9IFJBVEVfSU5GT19CV180MDsKKwllbHNlIGlmIChzdGEtPmxhc3RfcnhfcmF0ZV92aHRfZmxhZyAmIFJYX1ZIVF9GTEFHXzgwTUhaKQorCQlyaW5mby0+YncgPSBSQVRFX0lORk9fQldfODA7CisJZWxzZSBpZiAoc3RhLT5sYXN0X3J4X3JhdGVfdmh0X2ZsYWcgJiBSWF9WSFRfRkxBR18xNjBNSFopCisJCXJpbmZvLT5idyA9IFJBVEVfSU5GT19CV18xNjA7CisJZWxzZQorCQlyaW5mby0+YncgPSBSQVRFX0lORk9fQldfMjA7CiB9CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2R1bXBfc3RhdGlvbihzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNjc4LDcgKzcxNiw4IEBACiAJCSAgICAgIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEIHwKIAkJICAgICAgQlNTX0NIQU5HRURfQkVBQ09OIHwKIAkJICAgICAgQlNTX0NIQU5HRURfU1NJRCB8Ci0JCSAgICAgIEJTU19DSEFOR0VEX1AyUF9QUzsKKwkJICAgICAgQlNTX0NIQU5HRURfUDJQX1BTIHwKKwkJICAgICAgQlNTX0NIQU5HRURfVFhQT1dFUjsKIAlpbnQgZXJyOwogCiAJb2xkID0gc2RhdGFfZGVyZWZlcmVuY2Uoc2RhdGEtPnUuYXAuYmVhY29uLCBzZGF0YSk7CkBAIC0yMTAyLDYgKzIxNDEsOCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJZW51bSBubDgwMjExX3R4X3Bvd2VyX3NldHRpbmcgdHhwX3R5cGUgPSB0eXBlOworCWJvb2wgdXBkYXRlX3R4cF90eXBlID0gZmFsc2U7CiAKIAlpZiAod2RldikgewogCQlzZGF0YSA9IElFRUU4MDIxMV9XREVWX1RPX1NVQl9JRih3ZGV2KTsKQEAgLTIxMDksNiArMjE1MCw3IEBACiAJCXN3aXRjaCAodHlwZSkgewogCQljYXNlIE5MODAyMTFfVFhfUE9XRVJfQVVUT01BVElDOgogCQkJc2RhdGEtPnVzZXJfcG93ZXJfbGV2ZWwgPSBJRUVFODAyMTFfVU5TRVRfUE9XRVJfTEVWRUw7CisJCQl0eHBfdHlwZSA9IE5MODAyMTFfVFhfUE9XRVJfTElNSVRFRDsKIAkJCWJyZWFrOwogCQljYXNlIE5MODAyMTFfVFhfUE9XRVJfTElNSVRFRDoKIAkJY2FzZSBOTDgwMjExX1RYX1BPV0VSX0ZJWEVEOgpAQCAtMjExOCw3ICsyMTYwLDEyIEBACiAJCQlicmVhazsKIAkJfQogCi0JCWllZWU4MDIxMV9yZWNhbGNfdHhwb3dlcihzZGF0YSk7CisJCWlmICh0eHBfdHlwZSAhPSBzZGF0YS0+dmlmLmJzc19jb25mLnR4cG93ZXJfdHlwZSkgeworCQkJdXBkYXRlX3R4cF90eXBlID0gdHJ1ZTsKKwkJCXNkYXRhLT52aWYuYnNzX2NvbmYudHhwb3dlcl90eXBlID0gdHhwX3R5cGU7CisJCX0KKworCQlpZWVlODAyMTFfcmVjYWxjX3R4cG93ZXIoc2RhdGEsIHVwZGF0ZV90eHBfdHlwZSk7CiAKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjEyNiw2ICsyMTczLDcgQEAKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE5MODAyMTFfVFhfUE9XRVJfQVVUT01BVElDOgogCQlsb2NhbC0+dXNlcl9wb3dlcl9sZXZlbCA9IElFRUU4MDIxMV9VTlNFVF9QT1dFUl9MRVZFTDsKKwkJdHhwX3R5cGUgPSBOTDgwMjExX1RYX1BPV0VSX0xJTUlURUQ7CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9UWF9QT1dFUl9MSU1JVEVEOgogCWNhc2UgTkw4MDIxMV9UWF9QT1dFUl9GSVhFRDoKQEAgLTIxMzYsMTAgKzIxODQsMTQgQEAKIAl9CiAKIAltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KQorCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewogCQlzZGF0YS0+dXNlcl9wb3dlcl9sZXZlbCA9IGxvY2FsLT51c2VyX3Bvd2VyX2xldmVsOworCQlpZiAodHhwX3R5cGUgIT0gc2RhdGEtPnZpZi5ic3NfY29uZi50eHBvd2VyX3R5cGUpCisJCQl1cGRhdGVfdHhwX3R5cGUgPSB0cnVlOworCQlzZGF0YS0+dmlmLmJzc19jb25mLnR4cG93ZXJfdHlwZSA9IHR4cF90eXBlOworCX0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpCi0JCWllZWU4MDIxMV9yZWNhbGNfdHhwb3dlcihzZGF0YSk7CisJCWllZWU4MDIxMV9yZWNhbGNfdHhwb3dlcihzZGF0YSwgdXBkYXRlX3R4cF90eXBlKTsKIAltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAogCXJldHVybiAwOwpAQCAtMjU1Niw3ICsyNjA4LDcgQEAKIAogCS8qIGlmIHRoZXJlJ3Mgb25lIHBlbmRpbmcgb3Igd2UncmUgc2Nhbm5pbmcsIHF1ZXVlIHRoaXMgb25lICovCiAJaWYgKCFsaXN0X2VtcHR5KCZsb2NhbC0+cm9jX2xpc3QpIHx8Ci0JICAgIGxvY2FsLT5zY2FubmluZyB8fCBsb2NhbC0+cmFkYXJfZGV0ZWN0X2VuYWJsZWQpCisJICAgIGxvY2FsLT5zY2FubmluZyB8fCBpZWVlODAyMTFfaXNfcmFkYXJfcmVxdWlyZWQobG9jYWwpKQogCQlnb3RvIG91dF9jaGVja19jb21iaW5lOwogCiAJLyogaWYgbm90IEhXIGFzc2lzdCwganVzdCBxdWV1ZSAmIHNjaGVkdWxlIHdvcmsgKi8KQEAgLTM2NjQsNyArMzcxNiw3IEBACiAJCSAqIHF1ZXVlcy4KIAkJICovCiAJCXN5bmNocm9uaXplX25ldCgpOwotCQlpZWVlODAyMTFfZmx1c2hfcXVldWVzKGxvY2FsLCBzZGF0YSk7CisJCWllZWU4MDIxMV9mbHVzaF9xdWV1ZXMobG9jYWwsIHNkYXRhLCBmYWxzZSk7CiAKIAkJLyogcmVzdG9yZSB0aGUgbm9ybWFsIFFvUyBwYXJhbWV0ZXJzCiAJCSAqICh1bmNvbmRpdGlvbmFsbHkgdG8gYXZvaWQgcmFjZXMpCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2hhbi5jIGIvbmV0L21hYzgwMjExL2NoYW4uYwppbmRleCBkYTFjMTJjLi5mZjBkMmRiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvY2hhbi5jCisrKyBiL25ldC9tYWM4MDIxMS9jaGFuLmMKQEAgLTM4OCw3ICszODgsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgYm9vbCBpZWVlODAyMTFfaXNfcmFkYXJfcmVxdWlyZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCitib29sIGllZWU4MDIxMV9pc19yYWRhcl9yZXF1aXJlZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIApAQCAtNDA2LDYgKzQwNiwzNCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIGJvb2wKK2llZWU4MDIxMV9jaGFuY3R4X3JhZGFyX3JlcXVpcmVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHggKmN0eCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZiA9ICZjdHgtPmNvbmY7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJYm9vbCByZXF1aXJlZCA9IGZhbHNlOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbG9jYWwtPmNoYW5jdHhfbXR4KTsKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZsb2NhbC0+bXR4KTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQorCQkJY29udGludWU7CisJCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIoc2RhdGEtPnZpZi5jaGFuY3R4X2NvbmYpICE9IGNvbmYpCisJCQljb250aW51ZTsKKwkJaWYgKCFzZGF0YS0+cmFkYXJfcmVxdWlyZWQpCisJCQljb250aW51ZTsKKworCQlyZXF1aXJlZCA9IHRydWU7CisJCWJyZWFrOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiByZXF1aXJlZDsKK30KKwogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCAqCiBpZWVlODAyMTFfYWxsb2NfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCWNvbnN0IHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZiwKQEAgLTQyNSw3ICs0NTMsNyBAQAogCWN0eC0+Y29uZi5yeF9jaGFpbnNfc3RhdGljID0gMTsKIAljdHgtPmNvbmYucnhfY2hhaW5zX2R5bmFtaWMgPSAxOwogCWN0eC0+bW9kZSA9IG1vZGU7Ci0JY3R4LT5jb25mLnJhZGFyX2VuYWJsZWQgPSBpZWVlODAyMTFfaXNfcmFkYXJfcmVxdWlyZWQobG9jYWwpOworCWN0eC0+Y29uZi5yYWRhcl9lbmFibGVkID0gZmFsc2U7CiAJaWVlZTgwMjExX3JlY2FsY19jaGFuY3R4X21pbl9kZWYobG9jYWwsIGN0eCk7CiAKIAlyZXR1cm4gY3R4OwpAQCAtNTY3LDE2ICs1OTUsMTUgQEAKIAlib29sIHJhZGFyX2VuYWJsZWQ7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZsb2NhbC0+Y2hhbmN0eF9tdHgpOwotCS8qIGZvciBzZXR0aW5nIGxvY2FsLT5yYWRhcl9kZXRlY3RfZW5hYmxlZCAqLworCS8qIGZvciBpZWVlODAyMTFfaXNfcmFkYXJfcmVxdWlyZWQgKi8KIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZsb2NhbC0+bXR4KTsKIAotCXJhZGFyX2VuYWJsZWQgPSBpZWVlODAyMTFfaXNfcmFkYXJfcmVxdWlyZWQobG9jYWwpOworCXJhZGFyX2VuYWJsZWQgPSBpZWVlODAyMTFfY2hhbmN0eF9yYWRhcl9yZXF1aXJlZChsb2NhbCwgY2hhbmN0eCk7CiAKIAlpZiAocmFkYXJfZW5hYmxlZCA9PSBjaGFuY3R4LT5jb25mLnJhZGFyX2VuYWJsZWQpCiAJCXJldHVybjsKIAogCWNoYW5jdHgtPmNvbmYucmFkYXJfZW5hYmxlZCA9IHJhZGFyX2VuYWJsZWQ7Ci0JbG9jYWwtPnJhZGFyX2RldGVjdF9lbmFibGVkID0gY2hhbmN0eC0+Y29uZi5yYWRhcl9lbmFibGVkOwogCiAJaWYgKCFsb2NhbC0+dXNlX2NoYW5jdHgpIHsKIAkJbG9jYWwtPmh3LmNvbmYucmFkYXJfZW5hYmxlZCA9IGNoYW5jdHgtPmNvbmYucmFkYXJfZW5hYmxlZDsKQEAgLTYyOCw3ICs2NTUsNyBAQAogCX0KIAogCWlmIChuZXdfY3R4ICYmIGllZWU4MDIxMV9jaGFuY3R4X251bV9hc3NpZ25lZChsb2NhbCwgbmV3X2N0eCkgPiAwKSB7Ci0JCWllZWU4MDIxMV9yZWNhbGNfdHhwb3dlcihzZGF0YSk7CisJCWllZWU4MDIxMV9yZWNhbGNfdHhwb3dlcihzZGF0YSwgZmFsc2UpOwogCQlpZWVlODAyMTFfcmVjYWxjX2NoYW5jdHhfbWluX2RlZihsb2NhbCwgbmV3X2N0eCk7CiAJfQogCkBAIC0xMzYwLDcgKzEzODcsNyBAQAogCQkJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KHNkYXRhLAogCQkJCQkJCQkgY2hhbmdlZCk7CiAKLQkJCWllZWU4MDIxMV9yZWNhbGNfdHhwb3dlcihzZGF0YSk7CisJCQlpZWVlODAyMTFfcmVjYWxjX3R4cG93ZXIoc2RhdGEsIGZhbHNlKTsKIAkJfQogCiAJCWllZWU4MDIxMV9yZWNhbGNfY2hhbmN0eF9jaGFudHlwZShsb2NhbCwgY3R4KTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMgYi9uZXQvbWFjODAyMTEvZGVidWdmcy5jCmluZGV4IDU0YTE4OWYuLmVlYjBiYmQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnMuYwpAQCAtMzAzLDggKzMwMyw2IEBACiAJCXNmICs9IHNjbnByaW50ZihidWYgKyBzZiwgbXhsbiAtIHNmLCAiU1VQUE9SVFNfRFlOQU1JQ19QU1xuIik7CiAJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRSkKIAkJc2YgKz0gc2NucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJNRlBfQ0FQQUJMRVxuIik7Ci0JaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19VQVBTRCkKLQkJc2YgKz0gc2NucHJpbnRmKGJ1ZiArIHNmLCBteGxuIC0gc2YsICJTVVBQT1JUU19VQVBTRFxuIik7CiAJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMpCiAJCXNmICs9IHNjbnByaW50ZihidWYgKyBzZiwgbXhsbiAtIHNmLAogCQkJCSJSRVBPUlRTX1RYX0FDS19TVEFUVVNcbiIpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYwppbmRleCA1NTIzYjk0Li43MWFjMWI1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYwpAQCAtOTQsMTcgKzk0LDMzIEBACiAJCQkJa2V5LT51LnRraXAudHguaXYxNik7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVBfMjU2OgogCQlwbiA9IGF0b21pYzY0X3JlYWQoJmtleS0+dS5jY21wLnR4X3BuKTsKIAkJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCiAJCQkJKHU4KShwbiA+PiA0MCksICh1OCkocG4gPj4gMzIpLCAodTgpKHBuID4+IDI0KSwKIAkJCQkodTgpKHBuID4+IDE2KSwgKHU4KShwbiA+PiA4KSwgKHU4KXBuKTsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9DTUFDXzI1NjoKIAkJcG4gPSBhdG9taWM2NF9yZWFkKCZrZXktPnUuYWVzX2NtYWMudHhfcG4pOwogCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKIAkJCQkodTgpKHBuID4+IDQwKSwgKHU4KShwbiA+PiAzMiksICh1OCkocG4gPj4gMjQpLAogCQkJCSh1OCkocG4gPj4gMTYpLCAodTgpKHBuID4+IDgpLCAodTgpcG4pOwogCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9HTUFDXzEyODoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9HTUFDXzI1NjoKKwkJcG4gPSBhdG9taWM2NF9yZWFkKCZrZXktPnUuYWVzX2dtYWMudHhfcG4pOworCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKKwkJCQkodTgpKHBuID4+IDQwKSwgKHU4KShwbiA+PiAzMiksICh1OCkocG4gPj4gMjQpLAorCQkJCSh1OCkocG4gPj4gMTYpLCAodTgpKHBuID4+IDgpLCAodTgpcG4pOworCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QXzI1NjoKKwkJcG4gPSBhdG9taWM2NF9yZWFkKCZrZXktPnUuZ2NtcC50eF9wbik7CisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJCSh1OCkocG4gPj4gNDApLCAodTgpKHBuID4+IDMyKSwgKHU4KShwbiA+PiAyNCksCisJCQkJKHU4KShwbiA+PiAxNiksICh1OCkocG4gPj4gOCksICh1OClwbik7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTEzNCw2ICsxNTAsNyBAQAogCQlsZW4gPSBwIC0gYnVmOwogCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QXzI1NjoKIAkJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fVElEUyArIDE7IGkrKykgewogCQkJcnBuID0ga2V5LT51LmNjbXAucnhfcG5baV07CiAJCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwKQEAgLTE0NCw2ICsxNjEsNyBAQAogCQlsZW4gPSBwIC0gYnVmOwogCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0NNQUNfMjU2OgogCQlycG4gPSBrZXktPnUuYWVzX2NtYWMucnhfcG47CiAJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLAogCQkJICAgICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCkBAIC0xNTEsNiArMTY5LDI2IEBACiAJCQkgICAgICAgcnBuWzNdLCBycG5bNF0sIHJwbls1XSk7CiAJCWxlbiA9IHAgLSBidWY7CiAJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0dNQUNfMTI4OgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0dNQUNfMjU2OgorCQlycG4gPSBrZXktPnUuYWVzX2dtYWMucnhfcG47CisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLAorCQkJICAgICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCQkgICAgICAgcnBuWzBdLCBycG5bMV0sIHJwblsyXSwKKwkJCSAgICAgICBycG5bM10sIHJwbls0XSwgcnBuWzVdKTsKKwkJbGVuID0gcCAtIGJ1ZjsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTY6CisJCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX1RJRFMgKyAxOyBpKyspIHsKKwkJCXJwbiA9IGtleS0+dS5nY21wLnJ4X3BuW2ldOworCQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsCisJCQkJICAgICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCisJCQkJICAgICAgIHJwblswXSwgcnBuWzFdLCBycG5bMl0sCisJCQkJICAgICAgIHJwblszXSwgcnBuWzRdLCBycG5bNV0pOworCQl9CisJCWxlbiA9IHAgLSBidWY7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTE2NywxMiArMjA1LDIzIEBACiAKIAlzd2l0Y2ggKGtleS0+Y29uZi5jaXBoZXIpIHsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QXzI1NjoKIAkJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwga2V5LT51LmNjbXAucmVwbGF5cyk7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfQ01BQ18yNTY6CiAJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXVcbiIsCiAJCQkJa2V5LT51LmFlc19jbWFjLnJlcGxheXMpOwogCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9HTUFDXzEyODoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9HTUFDXzI1NjoKKwkJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwKKwkJCQlrZXktPnUuYWVzX2dtYWMucmVwbGF5cyk7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVBfMjU2OgorCQlsZW4gPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1XG4iLCBrZXktPnUuZ2NtcC5yZXBsYXlzKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTg5LDkgKzIzOCwxNSBAQAogCiAJc3dpdGNoIChrZXktPmNvbmYuY2lwaGVyKSB7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9DTUFDXzI1NjoKIAkJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIldVxuIiwKIAkJCQlrZXktPnUuYWVzX2NtYWMuaWN2ZXJyb3JzKTsKIAkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18xMjg6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18yNTY6CisJCWxlbiA9IHNjbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXVcbiIsCisJCQkJa2V5LT51LmFlc19nbWFjLmljdmVycm9ycyk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmggYi9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oCmluZGV4IDJlYmM5ZWEuLmZkZWRhMTcgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgKKysrIGIvbmV0L21hYzgwMjExL2RyaXZlci1vcHMuaApAQCAtNjM5LDYgKzYzOSwyMSBAQAogCXRyYWNlX2Rydl9yZXR1cm5fdm9pZChsb2NhbCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc3RhX3N0YXRpc3RpY3Moc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKKwkJCQkgICAgICBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbykKK3sKKwlzZGF0YSA9IGdldF9ic3Nfc2RhdGEoc2RhdGEpOworCWlmICghY2hlY2tfc2RhdGFfaW5fZHJpdmVyKHNkYXRhKSkKKwkJcmV0dXJuOworCisJdHJhY2VfZHJ2X3N0YV9zdGF0aXN0aWNzKGxvY2FsLCBzZGF0YSwgc3RhKTsKKwlpZiAobG9jYWwtPm9wcy0+c3RhX3N0YXRpc3RpY3MpCisJCWxvY2FsLT5vcHMtPnN0YV9zdGF0aXN0aWNzKCZsb2NhbC0+aHcsICZzZGF0YS0+dmlmLCBzdGEsIHNpbmZvKTsKKwl0cmFjZV9kcnZfcmV0dXJuX3ZvaWQobG9jYWwpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBkcnZfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCB1MTYgYWMsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQpAQCAtOTY2LDIxICs5ODEsNiBAQAogCXRyYWNlX2Rydl9yZXR1cm5fdm9pZChsb2NhbCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGRydl9nZXRfcnNzaShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkJCXM4ICpyc3NpX2RibSkKLXsKLQlpbnQgcmV0OwotCi0JbWlnaHRfc2xlZXAoKTsKLQotCXJldCA9IGxvY2FsLT5vcHMtPmdldF9yc3NpKCZsb2NhbC0+aHcsICZzZGF0YS0+dmlmLCBzdGEsIHJzc2lfZGJtKTsKLQl0cmFjZV9kcnZfZ2V0X3Jzc2kobG9jYWwsIHN0YSwgKnJzc2lfZGJtLCByZXQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGRydl9tZ2RfcHJlcGFyZV90eChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9ldGh0b29sLmMgYi9uZXQvbWFjODAyMTEvZXRodG9vbC5jCmluZGV4IGViZmM4MDkuLjUyYmNlYTYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9ldGh0b29sLmMKKysrIGIvbmV0L21hYzgwMjExL2V0aHRvb2wuYwpAQCAtMTE3LDE2ICsxMTcsMTYgQEAKIAkJZGF0YVtpKytdID0gc3RhLT5zdGFfc3RhdGU7CiAKIAotCQlpZiAoc2luZm8uZmlsbGVkICYgU1RBVElPTl9JTkZPX1RYX0JJVFJBVEUpCisJCWlmIChzaW5mby5maWxsZWQgJiBCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKSkKIAkJCWRhdGFbaV0gPSAxMDAwMDAgKgogCQkJCWNmZzgwMjExX2NhbGN1bGF0ZV9iaXRyYXRlKCZzaW5mby50eHJhdGUpOwogCQlpKys7Ci0JCWlmIChzaW5mby5maWxsZWQgJiBTVEFUSU9OX0lORk9fUlhfQklUUkFURSkKKwkJaWYgKHNpbmZvLmZpbGxlZCAmIEJJVChOTDgwMjExX1NUQV9JTkZPX1JYX0JJVFJBVEUpKQogCQkJZGF0YVtpXSA9IDEwMDAwMCAqCiAJCQkJY2ZnODAyMTFfY2FsY3VsYXRlX2JpdHJhdGUoJnNpbmZvLnJ4cmF0ZSk7CiAJCWkrKzsKIAotCQlpZiAoc2luZm8uZmlsbGVkICYgU1RBVElPTl9JTkZPX1NJR05BTF9BVkcpCisJCWlmIChzaW5mby5maWxsZWQgJiBCSVQoTkw4MDIxMV9TVEFfSU5GT19TSUdOQUxfQVZHKSkKIAkJCWRhdGFbaV0gPSAodTgpc2luZm8uc2lnbmFsX2F2ZzsKIAkJaSsrOwogCX0gZWxzZSB7CkBAIC0xNzUsMjQgKzE3NSwyNCBAQAogCQlkYXRhW2krK10gPSAodTgpc3VydmV5Lm5vaXNlOwogCWVsc2UKIAkJZGF0YVtpKytdID0gLTFMTDsKLQlpZiAoc3VydmV5LmZpbGxlZCAmIFNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRSkKLQkJZGF0YVtpKytdID0gc3VydmV5LmNoYW5uZWxfdGltZTsKKwlpZiAoc3VydmV5LmZpbGxlZCAmIFNVUlZFWV9JTkZPX1RJTUUpCisJCWRhdGFbaSsrXSA9IHN1cnZleS50aW1lOwogCWVsc2UKIAkJZGF0YVtpKytdID0gLTFMTDsKLQlpZiAoc3VydmV5LmZpbGxlZCAmIFNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRV9CVVNZKQotCQlkYXRhW2krK10gPSBzdXJ2ZXkuY2hhbm5lbF90aW1lX2J1c3k7CisJaWYgKHN1cnZleS5maWxsZWQgJiBTVVJWRVlfSU5GT19USU1FX0JVU1kpCisJCWRhdGFbaSsrXSA9IHN1cnZleS50aW1lX2J1c3k7CiAJZWxzZQogCQlkYXRhW2krK10gPSAtMUxMOwotCWlmIChzdXJ2ZXkuZmlsbGVkICYgU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX0VYVF9CVVNZKQotCQlkYXRhW2krK10gPSBzdXJ2ZXkuY2hhbm5lbF90aW1lX2V4dF9idXN5OworCWlmIChzdXJ2ZXkuZmlsbGVkICYgU1VSVkVZX0lORk9fVElNRV9FWFRfQlVTWSkKKwkJZGF0YVtpKytdID0gc3VydmV5LnRpbWVfZXh0X2J1c3k7CiAJZWxzZQogCQlkYXRhW2krK10gPSAtMUxMOwotCWlmIChzdXJ2ZXkuZmlsbGVkICYgU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1JYKQotCQlkYXRhW2krK10gPSBzdXJ2ZXkuY2hhbm5lbF90aW1lX3J4OworCWlmIChzdXJ2ZXkuZmlsbGVkICYgU1VSVkVZX0lORk9fVElNRV9SWCkKKwkJZGF0YVtpKytdID0gc3VydmV5LnRpbWVfcng7CiAJZWxzZQogCQlkYXRhW2krK10gPSAtMUxMOwotCWlmIChzdXJ2ZXkuZmlsbGVkICYgU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1RYKQotCQlkYXRhW2krK10gPSBzdXJ2ZXkuY2hhbm5lbF90aW1lX3R4OworCWlmIChzdXJ2ZXkuZmlsbGVkICYgU1VSVkVZX0lORk9fVElNRV9UWCkKKwkJZGF0YVtpKytdID0gc3VydmV5LnRpbWVfdHg7CiAJZWxzZQogCQlkYXRhW2krK10gPSAtMUxMOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWJzcy5jIGIvbmV0L21hYzgwMjExL2lic3MuYwppbmRleCA1MDliYzE1Li5iNjA2YjUzIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWJzcy5jCisrKyBiL25ldC9tYWM4MDIxMS9pYnNzLmMKQEAgLTEwNjksOSArMTA2OSwxNiBAQAogCQl9CiAKIAkJaWYgKHN0YSAmJiByYXRlc191cGRhdGVkKSB7Ci0JCQlkcnZfc3RhX3JjX3VwZGF0ZShsb2NhbCwgc2RhdGEsICZzdGEtPnN0YSwKLQkJCQkJICBJRUVFODAyMTFfUkNfU1VQUF9SQVRFU19DSEFOR0VEKTsKKwkJCXUzMiBjaGFuZ2VkID0gSUVFRTgwMjExX1JDX1NVUFBfUkFURVNfQ0hBTkdFRDsKKwkJCXU4IHJ4X25zcyA9IHN0YS0+c3RhLnJ4X25zczsKKworCQkJLyogRm9yY2UgcnhfbnNzIHJlY2FsY3VsYXRpb24gKi8KKwkJCXN0YS0+c3RhLnJ4X25zcyA9IDA7CiAJCQlyYXRlX2NvbnRyb2xfcmF0ZV9pbml0KHN0YSk7CisJCQlpZiAoc3RhLT5zdGEucnhfbnNzICE9IHJ4X25zcykKKwkJCQljaGFuZ2VkIHw9IElFRUU4MDIxMV9SQ19OU1NfQ0hBTkdFRDsKKworCQkJZHJ2X3N0YV9yY191cGRhdGUobG9jYWwsIHNkYXRhLCAmc3RhLT5zdGEsIGNoYW5nZWQpOwogCQl9CiAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaCBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCmluZGV4IGNjNmU5NjQuLjNhZmUzNjggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCkBAIC0xMTY4LDggKzExNjgsNiBAQAogCS8qIHdvd2xhbiBpcyBlbmFibGVkIC0tIGRvbid0IHJlY29uZmlnIG9uIHJlc3VtZSAqLwogCWJvb2wgd293bGFuOwogCi0JLyogREZTL3JhZGFyIGRldGVjdGlvbiBpcyBlbmFibGVkICovCi0JYm9vbCByYWRhcl9kZXRlY3RfZW5hYmxlZDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmFkYXJfZGV0ZWN0ZWRfd29yazsKIAogCS8qIG51bWJlciBvZiBSWCBjaGFpbnMgdGhlIGhhcmR3YXJlIGhhcyAqLwpAQCAtMTYyMyw3ICsxNjIxLDggQEAKIHZvaWQgaWVlZTgwMjExX2RlbF92aXJ0dWFsX21vbml0b3Ioc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogCiBib29sIF9faWVlZTgwMjExX3JlY2FsY190eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKLXZvaWQgaWVlZTgwMjExX3JlY2FsY190eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKK3ZvaWQgaWVlZTgwMjExX3JlY2FsY190eHBvd2VyKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJICAgICAgYm9vbCB1cGRhdGVfYnNzKTsKIAogc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewpAQCAtMTcwNCw2ICsxNzAzLDcgQEAKIAkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdmh0X2NhcCAqdmh0X2NhcF9pZSwKIAkJCQkgICAgc3RydWN0IHN0YV9pbmZvICpzdGEpOworZW51bSBpZWVlODAyMTFfc3RhX3J4X2JhbmR3aWR0aCBpZWVlODAyMTFfc3RhX2NhcF9yeF9idyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiBlbnVtIGllZWU4MDIxMV9zdGFfcnhfYmFuZHdpZHRoIGllZWU4MDIxMV9zdGFfY3VyX3ZodF9idyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiB2b2lkIGllZWU4MDIxMV9zdGFfc2V0X3J4X25zcyhzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7CiB1MzIgX19pZWVlODAyMTFfdmh0X2hhbmRsZV9vcG1vZGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCkBAIC0xNzUyLDcgKzE3NTIsOCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwogCi0JV0FSTih0ZXN0X2JpdChTQ0FOX0hXX1NDQU5OSU5HLCAmbG9jYWwtPnNjYW5uaW5nKSwKKwlXQVJOKHRlc3RfYml0KFNDQU5fSFdfU0NBTk5JTkcsICZsb2NhbC0+c2Nhbm5pbmcpICYmCisJICAgICAhdGVzdF9iaXQoU0NBTl9DT01QTEVURUQsICZsb2NhbC0+c2Nhbm5pbmcpLAogCQkiJXM6IHJlc3VtZSB3aXRoIGhhcmR3YXJlIHNjYW4gc3RpbGwgaW4gcHJvZ3Jlc3NcbiIsCiAJCXdpcGh5X25hbWUoaHctPndpcGh5KSk7CiAKQEAgLTE4ODEsMTAgKzE4ODIsNDAgQEAKIHZvaWQgaWVlZTgwMjExX2FkZF9wZW5kaW5nX3NrYnMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkJc3RydWN0IHNrX2J1ZmZfaGVhZCAqc2ticyk7CiB2b2lkIGllZWU4MDIxMV9mbHVzaF9xdWV1ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOworCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLCBib29sIGRyb3ApOwogdm9pZCBfX2llZWU4MDIxMV9mbHVzaF9xdWV1ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBxdWV1ZXMpOworCQkJICAgICAgdW5zaWduZWQgaW50IHF1ZXVlcywgYm9vbCBkcm9wKTsKKworc3RhdGljIGlubGluZSBib29sIGllZWU4MDIxMV9jYW5fcnVuX3dvcmtlcihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKK3sKKwkvKgorCSAqIElmIHF1aWVzY2luZyBpcyBzZXQsIHdlIGFyZSByYWNpbmcgd2l0aCBfX2llZWU4MDIxMV9zdXNwZW5kLgorCSAqIF9faWVlZTgwMjExX3N1c3BlbmQgZmx1c2hlcyB0aGUgd29ya2VycyBhZnRlciBzZXR0aW5nIHF1aWVzY2luZywKKwkgKiBhbmQgd2UgY2hlY2sgcXVpZXNjaW5nIC8gc3VzcGVuZGVkIGJlZm9yZSBlbnF1ZWluZyBuZXcgd29ya2Vycy4KKwkgKiBXZSBzaG91bGQgYWJvcnQgdGhlIHdvcmtlciB0byBhdm9pZCB0aGUgcmFjZXMgYmVsb3cuCisJICovCisJaWYgKGxvY2FsLT5xdWllc2NpbmcpCisJCXJldHVybiBmYWxzZTsKKworCS8qCisJICogV2UgbWlnaHQgYWxyZWFkeSBiZSBzdXNwZW5kZWQgaWYgdGhlIGZvbGxvd2luZyBzY2VuYXJpbyBvY2N1cnM6CisJICogX19pZWVlODAyMTFfc3VzcGVuZAkJQ29udHJvbCBwYXRoCisJICoKKwkgKgkJCQlpZiAobG9jYWwtPnF1aWVzY2luZykKKwkgKgkJCQkJcmV0dXJuOworCSAqIGxvY2FsLT5xdWllc2NpbmcgPSB0cnVlOworCSAqIGZsdXNoX3dvcmtxdWV1ZSgpOworCSAqCQkJCXF1ZXVlX3dvcmsoLi4uKTsKKwkgKiBsb2NhbC0+c3VzcGVuZGVkID0gdHJ1ZTsKKwkgKiBsb2NhbC0+cXVpZXNjaW5nID0gZmFsc2U7CisJICoJCQkJd29ya2VyIHN0YXJ0cyBydW5uaW5nLi4uCisJICovCisJaWYgKGxvY2FsLT5zdXNwZW5kZWQpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQogCiB2b2lkIGllZWU4MDIxMV9zZW5kX2F1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgdTE2IHRyYW5zYWN0aW9uLCB1MTYgYXV0aF9hbGcsIHUxNiBzdGF0dXMsCkBAIC0xOTgxLDYgKzIwMTIsNyBAQAogCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCAqY2hhbmN0eCk7CiB2b2lkIGllZWU4MDIxMV9yZWNhbGNfY2hhbmN0eF9taW5fZGVmKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eCAqY3R4KTsKK2Jvb2wgaWVlZTgwMjExX2lzX3JhZGFyX3JlcXVpcmVkKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIAogdm9pZCBpZWVlODAyMTFfZGZzX2NhY190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwogdm9pZCBpZWVlODAyMTFfZGZzX2NhY190aW1lcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IDQxNzM1NTMuLjgxYTI3NTEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC03Myw5ICs3MywxMCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBpZWVlODAyMTFfcmVjYWxjX3R4cG93ZXIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit2b2lkIGllZWU4MDIxMV9yZWNhbGNfdHhwb3dlcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgIGJvb2wgdXBkYXRlX2JzcykKIHsKLQlpZiAoX19pZWVlODAyMTFfcmVjYWxjX3R4cG93ZXIoc2RhdGEpKQorCWlmIChfX2llZWU4MDIxMV9yZWNhbGNfdHhwb3dlcihzZGF0YSkgfHwgdXBkYXRlX2JzcykKIAkJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIEJTU19DSEFOR0VEX1RYUE9XRVIpOwogfQogCkBAIC05Myw3ICs5NCw3IEBACiAJaWYgKGxvY2FsLT5ody5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSkKIAkJcmV0dXJuIDA7CiAKLQlpZWVlODAyMTFfZmx1c2hfcXVldWVzKGxvY2FsLCBOVUxMKTsKKwlpZWVlODAyMTFfZmx1c2hfcXVldWVzKGxvY2FsLCBOVUxMLCBmYWxzZSk7CiAKIAlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9JRExFOwogCXJldHVybiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSURMRTsKQEAgLTExNjksMTIgKzExNzAsNyBAQAogCWlmIChsb2NhbC0+c2Nhbm5pbmcpCiAJCXJldHVybjsKIAotCS8qCi0JICogaWVlZTgwMjExX3F1ZXVlX3dvcmsoKSBzaG91bGQgaGF2ZSBwaWNrZWQgdXAgbW9zdCBjYXNlcywKLQkgKiBoZXJlIHdlJ2xsIHBpY2sgdGhlIHJlc3QuCi0JICovCi0JaWYgKFdBUk4obG9jYWwtPnN1c3BlbmRlZCwKLQkJICJpbnRlcmZhY2Ugd29yayBzY2hlZHVsZWQgd2hpbGUgZ29pbmcgdG8gc3VzcGVuZFxuIikpCisJaWYgKCFpZWVlODAyMTFfY2FuX3J1bl93b3JrZXIobG9jYWwpKQogCQlyZXR1cm47CiAKIAkvKiBmaXJzdCBwcm9jZXNzIGZyYW1lcyAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jCmluZGV4IGJkNGU0NmUuLjA4MjVkNzYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYworKysgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlICJkZWJ1Z2ZzX2tleS5oIgogI2luY2x1ZGUgImFlc19jY20uaCIKICNpbmNsdWRlICJhZXNfY21hYy5oIgorI2luY2x1ZGUgImFlc19nbWFjLmgiCisjaW5jbHVkZSAiYWVzX2djbS5oIgogCiAKIC8qKgpAQCAtOTAsNyArOTIsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwotCWludCByZXQ7CisJaW50IHJldCA9IC1FT1BOT1RTVVBQOwogCiAJbWlnaHRfc2xlZXAoKTsKIApAQCAtMTQxLDggKzE0Myw3IEBACiAJCWtleS0+ZmxhZ3MgfD0gS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkU7CiAKIAkJaWYgKCEoKGtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDKSB8fAotCQkgICAgICAoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSB8fAotCQkgICAgICAoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BVVF9JVl9TUEFDRSkpKQorCQkgICAgICAoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1JFU0VSVkVfVEFJTFJPT00pKSkKIAkJCXNkYXRhLT5jcnlwdG9fdHhfdGFpbHJvb21fbmVlZGVkX2NudC0tOwogCiAJCVdBUk5fT04oKGtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QVVRfSVZfU1BBQ0UpICYmCkBAIC0xNTEsNyArMTUyLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKHJldCAhPSAtRU5PU1BDICYmIHJldCAhPSAtRU9QTk9UU1VQUCkKKwlpZiAocmV0ICE9IC1FTk9TUEMgJiYgcmV0ICE9IC1FT1BOT1RTVVBQICYmIHJldCAhPSAxKQogCQlzZGF0YV9lcnIoc2RhdGEsCiAJCQkgICJmYWlsZWQgdG8gc2V0IGtleSAoJWQsICVwTSkgdG8gaGFyZHdhcmUgKCVkKVxuIiwKIAkJCSAga2V5LT5jb25mLmtleWlkeCwKQEAgLTE2Myw4ICsxNjQsMTggQEAKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUF8yNTY6CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzoKLQkJLyogYWxsIG9mIHRoZXNlIHdlIGNhbiBkbyBpbiBzb2Z0d2FyZSAqLworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0NNQUNfMjU2OgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0dNQUNfMTI4OgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0dNQUNfMjU2OgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVBfMjU2OgorCQkvKiBhbGwgb2YgdGhlc2Ugd2UgY2FuIGRvIGluIHNvZnR3YXJlIC0gaWYgZHJpdmVyIGNhbiAqLworCQlpZiAocmV0ID09IDEpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGtleS0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NXX0NSWVBUT19DT05UUk9MKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHVybiAwOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTkxLDggKzIwMiw3IEBACiAJc2RhdGEgPSBrZXktPnNkYXRhOwogCiAJaWYgKCEoKGtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDKSB8fAotCSAgICAgIChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpIHx8Ci0JICAgICAgKGtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QVVRfSVZfU1BBQ0UpKSkKKwkgICAgICAoa2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1JFU0VSVkVfVEFJTFJPT00pKSkKIAkJaW5jcmVtZW50X3RhaWxyb29tX25lZWRfY291bnQoc2RhdGEpOwogCiAJcmV0ID0gZHJ2X3NldF9rZXkoa2V5LT5sb2NhbCwgRElTQUJMRV9LRVksIHNkYXRhLApAQCAtMzg0LDcgKzM5NCwyNiBAQAogCQkgKiBJbml0aWFsaXplIEFFUyBrZXkgc3RhdGUgaGVyZSBhcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdAogCQkgKiBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGZvciBldmVyeSBwYWNrZXQuCiAJCSAqLwotCQlrZXktPnUuY2NtcC50Zm0gPSBpZWVlODAyMTFfYWVzX2tleV9zZXR1cF9lbmNyeXB0KGtleV9kYXRhKTsKKwkJa2V5LT51LmNjbXAudGZtID0gaWVlZTgwMjExX2Flc19rZXlfc2V0dXBfZW5jcnlwdCgKKwkJCWtleV9kYXRhLCBrZXlfbGVuLCBJRUVFODAyMTFfQ0NNUF9NSUNfTEVOKTsKKwkJaWYgKElTX0VSUihrZXktPnUuY2NtcC50Zm0pKSB7CisJCQllcnIgPSBQVFJfRVJSKGtleS0+dS5jY21wLnRmbSk7CisJCQlrZnJlZShrZXkpOworCQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVBfMjU2OgorCQlrZXktPmNvbmYuaXZfbGVuID0gSUVFRTgwMjExX0NDTVBfMjU2X0hEUl9MRU47CisJCWtleS0+Y29uZi5pY3ZfbGVuID0gSUVFRTgwMjExX0NDTVBfMjU2X01JQ19MRU47CisJCWZvciAoaSA9IDA7IHNlcSAmJiBpIDwgSUVFRTgwMjExX05VTV9USURTICsgMTsgaSsrKQorCQkJZm9yIChqID0gMDsgaiA8IElFRUU4MDIxMV9DQ01QXzI1Nl9QTl9MRU47IGorKykKKwkJCQlrZXktPnUuY2NtcC5yeF9wbltpXVtqXSA9CisJCQkJCXNlcVtJRUVFODAyMTFfQ0NNUF8yNTZfUE5fTEVOIC0gaiAtIDFdOworCQkvKiBJbml0aWFsaXplIEFFUyBrZXkgc3RhdGUgaGVyZSBhcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdAorCQkgKiBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGZvciBldmVyeSBwYWNrZXQuCisJCSAqLworCQlrZXktPnUuY2NtcC50Zm0gPSBpZWVlODAyMTFfYWVzX2tleV9zZXR1cF9lbmNyeXB0KAorCQkJa2V5X2RhdGEsIGtleV9sZW4sIElFRUU4MDIxMV9DQ01QXzI1Nl9NSUNfTEVOKTsKIAkJaWYgKElTX0VSUihrZXktPnUuY2NtcC50Zm0pKSB7CiAJCQllcnIgPSBQVFJfRVJSKGtleS0+dS5jY21wLnRmbSk7CiAJCQlrZnJlZShrZXkpOwpAQCAtMzkyLDggKzQyMSwxMiBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfQ01BQ18yNTY6CiAJCWtleS0+Y29uZi5pdl9sZW4gPSAwOwotCQlrZXktPmNvbmYuaWN2X2xlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21taWUpOworCQlpZiAoY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDKQorCQkJa2V5LT5jb25mLmljdl9sZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tbWllKTsKKwkJZWxzZQorCQkJa2V5LT5jb25mLmljdl9sZW4gPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tbWllXzE2KTsKIAkJaWYgKHNlcSkKIAkJCWZvciAoaiA9IDA7IGogPCBJRUVFODAyMTFfQ01BQ19QTl9MRU47IGorKykKIAkJCQlrZXktPnUuYWVzX2NtYWMucnhfcG5bal0gPQpAQCAtNDAzLDEzICs0MzYsNTEgQEAKIAkJICogaXQgZG9lcyBub3QgbmVlZCB0byBiZSBpbml0aWFsaXplZCBmb3IgZXZlcnkgcGFja2V0LgogCQkgKi8KIAkJa2V5LT51LmFlc19jbWFjLnRmbSA9Ci0JCQlpZWVlODAyMTFfYWVzX2NtYWNfa2V5X3NldHVwKGtleV9kYXRhKTsKKwkJCWllZWU4MDIxMV9hZXNfY21hY19rZXlfc2V0dXAoa2V5X2RhdGEsIGtleV9sZW4pOwogCQlpZiAoSVNfRVJSKGtleS0+dS5hZXNfY21hYy50Zm0pKSB7CiAJCQllcnIgPSBQVFJfRVJSKGtleS0+dS5hZXNfY21hYy50Zm0pOwogCQkJa2ZyZWUoa2V5KTsKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18xMjg6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18yNTY6CisJCWtleS0+Y29uZi5pdl9sZW4gPSAwOworCQlrZXktPmNvbmYuaWN2X2xlbiA9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21taWVfMTYpOworCQlpZiAoc2VxKQorCQkJZm9yIChqID0gMDsgaiA8IElFRUU4MDIxMV9HTUFDX1BOX0xFTjsgaisrKQorCQkJCWtleS0+dS5hZXNfZ21hYy5yeF9wbltqXSA9CisJCQkJCXNlcVtJRUVFODAyMTFfR01BQ19QTl9MRU4gLSBqIC0gMV07CisJCS8qIEluaXRpYWxpemUgQUVTIGtleSBzdGF0ZSBoZXJlIGFzIGFuIG9wdGltaXphdGlvbiBzbyB0aGF0CisJCSAqIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgZm9yIGV2ZXJ5IHBhY2tldC4KKwkJICovCisJCWtleS0+dS5hZXNfZ21hYy50Zm0gPQorCQkJaWVlZTgwMjExX2Flc19nbWFjX2tleV9zZXR1cChrZXlfZGF0YSwga2V5X2xlbik7CisJCWlmIChJU19FUlIoa2V5LT51LmFlc19nbWFjLnRmbSkpIHsKKwkJCWVyciA9IFBUUl9FUlIoa2V5LT51LmFlc19nbWFjLnRmbSk7CisJCQlrZnJlZShrZXkpOworCQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QXzI1NjoKKwkJa2V5LT5jb25mLml2X2xlbiA9IElFRUU4MDIxMV9HQ01QX0hEUl9MRU47CisJCWtleS0+Y29uZi5pY3ZfbGVuID0gSUVFRTgwMjExX0dDTVBfTUlDX0xFTjsKKwkJZm9yIChpID0gMDsgc2VxICYmIGkgPCBJRUVFODAyMTFfTlVNX1RJRFMgKyAxOyBpKyspCisJCQlmb3IgKGogPSAwOyBqIDwgSUVFRTgwMjExX0dDTVBfUE5fTEVOOyBqKyspCisJCQkJa2V5LT51LmdjbXAucnhfcG5baV1bal0gPQorCQkJCQlzZXFbSUVFRTgwMjExX0dDTVBfUE5fTEVOIC0gaiAtIDFdOworCQkvKiBJbml0aWFsaXplIEFFUyBrZXkgc3RhdGUgaGVyZSBhcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdAorCQkgKiBpdCBkb2VzIG5vdCBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGZvciBldmVyeSBwYWNrZXQuCisJCSAqLworCQlrZXktPnUuZ2NtcC50Zm0gPSBpZWVlODAyMTFfYWVzX2djbV9rZXlfc2V0dXBfZW5jcnlwdChrZXlfZGF0YSwKKwkJCQkJCQkJICAgICAga2V5X2xlbik7CisJCWlmIChJU19FUlIoa2V5LT51LmdjbXAudGZtKSkgeworCQkJZXJyID0gUFRSX0VSUihrZXktPnUuZ2NtcC50Zm0pOworCQkJa2ZyZWUoa2V5KTsKKwkJCXJldHVybiBFUlJfUFRSKGVycik7CisJCX0KKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKGNzKSB7CiAJCQlzaXplX3QgbGVuID0gKHNlcV9sZW4gPiBNQVhfUE5fTEVOKSA/CkBAIC00MzEsMTAgKzUwMiwyNCBAQAogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfa2V5X2ZyZWVfY29tbW9uKHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkpCiB7Ci0JaWYgKGtleS0+Y29uZi5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCkKKwlzd2l0Y2ggKGtleS0+Y29uZi5jaXBoZXIpIHsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QXzI1NjoKIAkJaWVlZTgwMjExX2Flc19rZXlfZnJlZShrZXktPnUuY2NtcC50Zm0pOwotCWlmIChrZXktPmNvbmYuY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDKQorCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0NNQUNfMjU2OgogCQlpZWVlODAyMTFfYWVzX2NtYWNfa2V5X2ZyZWUoa2V5LT51LmFlc19jbWFjLnRmbSk7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0dNQUNfMTI4OgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0dNQUNfMjU2OgorCQlpZWVlODAyMTFfYWVzX2dtYWNfa2V5X2ZyZWUoa2V5LT51LmFlc19nbWFjLnRmbSk7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVBfMjU2OgorCQlpZWVlODAyMTFfYWVzX2djbV9rZXlfZnJlZShrZXktPnUuZ2NtcC50Zm0pOworCQlicmVhazsKKwl9CiAJa3pmcmVlKGtleSk7CiB9CiAKQEAgLTc0MSw2ICs4MjYsNyBAQAogCQlzZXEtPnRraXAuaXYxNiA9IGtleS0+dS50a2lwLnR4Lml2MTY7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVBfMjU2OgogCQlwbjY0ID0gYXRvbWljNjRfcmVhZCgma2V5LT51LmNjbXAudHhfcG4pOwogCQlzZXEtPmNjbXAucG5bNV0gPSBwbjY0OwogCQlzZXEtPmNjbXAucG5bNF0gPSBwbjY0ID4+IDg7CkBAIC03NTAsNiArODM2LDcgQEAKIAkJc2VxLT5jY21wLnBuWzBdID0gcG42NCA+PiA0MDsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9DTUFDXzI1NjoKIAkJcG42NCA9IGF0b21pYzY0X3JlYWQoJmtleS0+dS5hZXNfY21hYy50eF9wbik7CiAJCXNlcS0+Y2NtcC5wbls1XSA9IHBuNjQ7CiAJCXNlcS0+Y2NtcC5wbls0XSA9IHBuNjQgPj4gODsKQEAgLTc1OCw2ICs4NDUsMjYgQEAKIAkJc2VxLT5jY21wLnBuWzFdID0gcG42NCA+PiAzMjsKIAkJc2VxLT5jY21wLnBuWzBdID0gcG42NCA+PiA0MDsKIAkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18xMjg6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18yNTY6CisJCXBuNjQgPSBhdG9taWM2NF9yZWFkKCZrZXktPnUuYWVzX2dtYWMudHhfcG4pOworCQlzZXEtPmNjbXAucG5bNV0gPSBwbjY0OworCQlzZXEtPmNjbXAucG5bNF0gPSBwbjY0ID4+IDg7CisJCXNlcS0+Y2NtcC5wblszXSA9IHBuNjQgPj4gMTY7CisJCXNlcS0+Y2NtcC5wblsyXSA9IHBuNjQgPj4gMjQ7CisJCXNlcS0+Y2NtcC5wblsxXSA9IHBuNjQgPj4gMzI7CisJCXNlcS0+Y2NtcC5wblswXSA9IHBuNjQgPj4gNDA7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVBfMjU2OgorCQlwbjY0ID0gYXRvbWljNjRfcmVhZCgma2V5LT51LmdjbXAudHhfcG4pOworCQlzZXEtPmdjbXAucG5bNV0gPSBwbjY0OworCQlzZXEtPmdjbXAucG5bNF0gPSBwbjY0ID4+IDg7CisJCXNlcS0+Z2NtcC5wblszXSA9IHBuNjQgPj4gMTY7CisJCXNlcS0+Z2NtcC5wblsyXSA9IHBuNjQgPj4gMjQ7CisJCXNlcS0+Z2NtcC5wblsxXSA9IHBuNjQgPj4gMzI7CisJCXNlcS0+Z2NtcC5wblswXSA9IHBuNjQgPj4gNDA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7CiAJfQpAQCAtNzgwLDYgKzg4Nyw3IEBACiAJCXNlcS0+dGtpcC5pdjE2ID0ga2V5LT51LnRraXAucnhbdGlkXS5pdjE2OwogCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QXzI1NjoKIAkJaWYgKFdBUk5fT04odGlkIDwgLTEgfHwgdGlkID49IElFRUU4MDIxMV9OVU1fVElEUykpCiAJCQlyZXR1cm47CiAJCWlmICh0aWQgPCAwKQpAQCAtNzg5LDExICs4OTcsMjkgQEAKIAkJbWVtY3B5KHNlcS0+Y2NtcC5wbiwgcG4sIElFRUU4MDIxMV9DQ01QX1BOX0xFTik7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfQ01BQ18yNTY6CiAJCWlmIChXQVJOX09OKHRpZCAhPSAwKSkKIAkJCXJldHVybjsKIAkJcG4gPSBrZXktPnUuYWVzX2NtYWMucnhfcG47CiAJCW1lbWNweShzZXEtPmFlc19jbWFjLnBuLCBwbiwgSUVFRTgwMjExX0NNQUNfUE5fTEVOKTsKIAkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18xMjg6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18yNTY6CisJCWlmIChXQVJOX09OKHRpZCAhPSAwKSkKKwkJCXJldHVybjsKKwkJcG4gPSBrZXktPnUuYWVzX2dtYWMucnhfcG47CisJCW1lbWNweShzZXEtPmFlc19nbWFjLnBuLCBwbiwgSUVFRTgwMjExX0dNQUNfUE5fTEVOKTsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTY6CisJCWlmIChXQVJOX09OKHRpZCA8IC0xIHx8IHRpZCA+PSBJRUVFODAyMTFfTlVNX1RJRFMpKQorCQkJcmV0dXJuOworCQlpZiAodGlkIDwgMCkKKwkJCXBuID0ga2V5LT51LmdjbXAucnhfcG5bSUVFRTgwMjExX05VTV9USURTXTsKKwkJZWxzZQorCQkJcG4gPSBrZXktPnUuZ2NtcC5yeF9wblt0aWRdOworCQltZW1jcHkoc2VxLT5nY21wLnBuLCBwbiwgSUVFRTgwMjExX0dDTVBfUE5fTEVOKTsKKwkJYnJlYWs7CiAJfQogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZ2V0X2tleV9yeF9zZXEpOwpAQCAtODEyLDYgKzkzOCw3IEBACiAJCWtleS0+dS50a2lwLnR4Lml2MTYgPSBzZXEtPnRraXAuaXYxNjsKIAkJYnJlYWs7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUF8yNTY6CiAJCXBuNjQgPSAodTY0KXNlcS0+Y2NtcC5wbls1XSB8CiAJCSAgICAgICAoKHU2NClzZXEtPmNjbXAucG5bNF0gPDwgOCkgfAogCQkgICAgICAgKCh1NjQpc2VxLT5jY21wLnBuWzNdIDw8IDE2KSB8CkBAIC04MjEsNiArOTQ4LDcgQEAKIAkJYXRvbWljNjRfc2V0KCZrZXktPnUuY2NtcC50eF9wbiwgcG42NCk7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfQ01BQ18yNTY6CiAJCXBuNjQgPSAodTY0KXNlcS0+YWVzX2NtYWMucG5bNV0gfAogCQkgICAgICAgKCh1NjQpc2VxLT5hZXNfY21hYy5wbls0XSA8PCA4KSB8CiAJCSAgICAgICAoKHU2NClzZXEtPmFlc19jbWFjLnBuWzNdIDw8IDE2KSB8CkBAIC04MjksNiArOTU3LDI2IEBACiAJCSAgICAgICAoKHU2NClzZXEtPmFlc19jbWFjLnBuWzBdIDw8IDQwKTsKIAkJYXRvbWljNjRfc2V0KCZrZXktPnUuYWVzX2NtYWMudHhfcG4sIHBuNjQpOwogCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9HTUFDXzEyODoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9HTUFDXzI1NjoKKwkJcG42NCA9ICh1NjQpc2VxLT5hZXNfZ21hYy5wbls1XSB8CisJCSAgICAgICAoKHU2NClzZXEtPmFlc19nbWFjLnBuWzRdIDw8IDgpIHwKKwkJICAgICAgICgodTY0KXNlcS0+YWVzX2dtYWMucG5bM10gPDwgMTYpIHwKKwkJICAgICAgICgodTY0KXNlcS0+YWVzX2dtYWMucG5bMl0gPDwgMjQpIHwKKwkJICAgICAgICgodTY0KXNlcS0+YWVzX2dtYWMucG5bMV0gPDwgMzIpIHwKKwkJICAgICAgICgodTY0KXNlcS0+YWVzX2dtYWMucG5bMF0gPDwgNDApOworCQlhdG9taWM2NF9zZXQoJmtleS0+dS5hZXNfZ21hYy50eF9wbiwgcG42NCk7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVBfMjU2OgorCQlwbjY0ID0gKHU2NClzZXEtPmdjbXAucG5bNV0gfAorCQkgICAgICAgKCh1NjQpc2VxLT5nY21wLnBuWzRdIDw8IDgpIHwKKwkJICAgICAgICgodTY0KXNlcS0+Z2NtcC5wblszXSA8PCAxNikgfAorCQkgICAgICAgKCh1NjQpc2VxLT5nY21wLnBuWzJdIDw8IDI0KSB8CisJCSAgICAgICAoKHU2NClzZXEtPmdjbXAucG5bMV0gPDwgMzIpIHwKKwkJICAgICAgICgodTY0KXNlcS0+Z2NtcC5wblswXSA8PCA0MCk7CisJCWF0b21pYzY0X3NldCgma2V5LT51LmdjbXAudHhfcG4sIHBuNjQpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlXQVJOX09OKDEpOwogCQlicmVhazsKQEAgLTg1Miw2ICsxMDAwLDcgQEAKIAkJa2V5LT51LnRraXAucnhbdGlkXS5pdjE2ID0gc2VxLT50a2lwLml2MTY7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVBfMjU2OgogCQlpZiAoV0FSTl9PTih0aWQgPCAtMSB8fCB0aWQgPj0gSUVFRTgwMjExX05VTV9USURTKSkKIAkJCXJldHVybjsKIAkJaWYgKHRpZCA8IDApCkBAIC04NjEsMTEgKzEwMTAsMjkgQEAKIAkJbWVtY3B5KHBuLCBzZXEtPmNjbXAucG4sIElFRUU4MDIxMV9DQ01QX1BOX0xFTik7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfQ01BQ18yNTY6CiAJCWlmIChXQVJOX09OKHRpZCAhPSAwKSkKIAkJCXJldHVybjsKIAkJcG4gPSBrZXktPnUuYWVzX2NtYWMucnhfcG47CiAJCW1lbWNweShwbiwgc2VxLT5hZXNfY21hYy5wbiwgSUVFRTgwMjExX0NNQUNfUE5fTEVOKTsKIAkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18xMjg6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18yNTY6CisJCWlmIChXQVJOX09OKHRpZCAhPSAwKSkKKwkJCXJldHVybjsKKwkJcG4gPSBrZXktPnUuYWVzX2dtYWMucnhfcG47CisJCW1lbWNweShwbiwgc2VxLT5hZXNfZ21hYy5wbiwgSUVFRTgwMjExX0dNQUNfUE5fTEVOKTsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTY6CisJCWlmIChXQVJOX09OKHRpZCA8IC0xIHx8IHRpZCA+PSBJRUVFODAyMTFfTlVNX1RJRFMpKQorCQkJcmV0dXJuOworCQlpZiAodGlkIDwgMCkKKwkJCXBuID0ga2V5LT51LmdjbXAucnhfcG5bSUVFRTgwMjExX05VTV9USURTXTsKKwkJZWxzZQorCQkJcG4gPSBrZXktPnUuZ2NtcC5yeF9wblt0aWRdOworCQltZW1jcHkocG4sIHNlcS0+Z2NtcC5wbiwgSUVFRTgwMjExX0dDTVBfUE5fTEVOKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsKIAkJYnJlYWs7CkBAIC04ODksOCArMTA1Niw3IEBACiAJCWtleS0+ZmxhZ3MgJj0gfktFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFOwogCiAJCWlmICghKChrZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQykgfHwKLQkJICAgICAgKGtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikgfHwKLQkJICAgICAgKGtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QVVRfSVZfU1BBQ0UpKSkKKwkJICAgICAgKGtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19SRVNFUlZFX1RBSUxST09NKSkpCiAJCQlpbmNyZW1lbnRfdGFpbHJvb21fbmVlZF9jb3VudChrZXktPnNkYXRhKTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaAppbmRleCAxOWRiNjg2Li5kNTdhOTkxNSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2tleS5oCisrKyBiL25ldC9tYWM4MDIxMS9rZXkuaApAQCAtOTUsNiArOTUsMjQgQEAKIAkJCXUzMiBpY3ZlcnJvcnM7IC8qIGRvdDExUlNOQVN0YXRzQ01BQ0lDVkVycm9ycyAqLwogCQl9IGFlc19jbWFjOwogCQlzdHJ1Y3QgeworCQkJYXRvbWljNjRfdCB0eF9wbjsKKwkJCXU4IHJ4X3BuW0lFRUU4MDIxMV9HTUFDX1BOX0xFTl07CisJCQlzdHJ1Y3QgY3J5cHRvX2FlYWQgKnRmbTsKKwkJCXUzMiByZXBsYXlzOyAvKiBkb3QxMVJTTkFTdGF0c0NNQUNSZXBsYXlzICovCisJCQl1MzIgaWN2ZXJyb3JzOyAvKiBkb3QxMVJTTkFTdGF0c0NNQUNJQ1ZFcnJvcnMgKi8KKwkJfSBhZXNfZ21hYzsKKwkJc3RydWN0IHsKKwkJCWF0b21pYzY0X3QgdHhfcG47CisJCQkvKiBMYXN0IHJlY2VpdmVkIHBhY2tldCBudW1iZXIuIFRoZSBmaXJzdAorCQkJICogSUVFRTgwMjExX05VTV9USURTIGNvdW50ZXJzIGFyZSB1c2VkIHdpdGggRGF0YQorCQkJICogZnJhbWVzIGFuZCB0aGUgbGFzdCBjb3VudGVyIGlzIHVzZWQgd2l0aCBSb2J1c3QKKwkJCSAqIE1hbmFnZW1lbnQgZnJhbWVzLgorCQkJICovCisJCQl1OCByeF9wbltJRUVFODAyMTFfTlVNX1RJRFMgKyAxXVtJRUVFODAyMTFfR0NNUF9QTl9MRU5dOworCQkJc3RydWN0IGNyeXB0b19hZWFkICp0Zm07CisJCQl1MzIgcmVwbGF5czsgLyogZG90MTFSU05BU3RhdHNHQ01QUmVwbGF5cyAqLworCQl9IGdjbXA7CisJCXN0cnVjdCB7CiAJCQkvKiBnZW5lcmljIGNpcGhlciBzY2hlbWUgKi8KIAkJCXU4IHJ4X3BuW0lFRUU4MDIxMV9OVU1fVElEUyArIDFdW01BWF9QTl9MRU5dOwogCQl9IGdlbjsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tYWluLmMgYi9uZXQvbWFjODAyMTEvbWFpbi5jCmluZGV4IDZhYjk5ZGEuLjVlMDlkMzUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tYWluLmMKKysrIGIvbmV0L21hYzgwMjExL21haW4uYwpAQCAtNjU4LDcgKzY1OCw2IEBACiAJYm9vbCBoYXZlX3dlcCA9ICEoSVNfRVJSKGxvY2FsLT53ZXBfdHhfdGZtKSB8fAogCQkJICBJU19FUlIobG9jYWwtPndlcF9yeF90Zm0pKTsKIAlib29sIGhhdmVfbWZwID0gbG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFOwotCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2lwaGVyX3NjaGVtZSAqY3MgPSBsb2NhbC0+aHcuY2lwaGVyX3NjaGVtZXM7CiAJaW50IG5fc3VpdGVzID0gMCwgciA9IDAsIHcgPSAwOwogCXUzMiAqc3VpdGVzOwogCXN0YXRpYyBjb25zdCB1MzIgY2lwaGVyX3N1aXRlc1tdID0gewpAQCAtNjY3LDY0ICs2NjYsMjkgQEAKIAkJV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0LAogCQlXTEFOX0NJUEhFUl9TVUlURV9US0lQLAogCQlXTEFOX0NJUEhFUl9TVUlURV9DQ01QLAorCQlXTEFOX0NJUEhFUl9TVUlURV9DQ01QXzI1NiwKKwkJV0xBTl9DSVBIRVJfU1VJVEVfR0NNUCwKKwkJV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTYsCiAKIAkJLyoga2VlcCBsYXN0IC0tIGRlcGVuZHMgb24gaHcgZmxhZ3MhICovCi0JCVdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDCisJCVdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDLAorCQlXTEFOX0NJUEhFUl9TVUlURV9CSVBfQ01BQ18yNTYsCisJCVdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9HTUFDXzEyOCwKKwkJV0xBTl9DSVBIRVJfU1VJVEVfQklQX0dNQUNfMjU2LAogCX07CiAKLQkvKiBEcml2ZXIgc3BlY2lmaWVzIHRoZSBjaXBoZXJzLCB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uLi4gKi8KLQlpZiAobG9jYWwtPmh3LndpcGh5LT5jaXBoZXJfc3VpdGVzICYmIGhhdmVfd2VwKQotCQlyZXR1cm4gMDsKLQotCS8qIFNldCB1cCBjaXBoZXIgc3VpdGVzIGlmIGRyaXZlciByZWxpZXMgb24gbWFjODAyMTEgY2lwaGVyIGRlZnMgKi8KLQlpZiAoIWxvY2FsLT5ody53aXBoeS0+Y2lwaGVyX3N1aXRlcyAmJiAhY3MpIHsKLQkJbG9jYWwtPmh3LndpcGh5LT5jaXBoZXJfc3VpdGVzID0gY2lwaGVyX3N1aXRlczsKLQkJbG9jYWwtPmh3LndpcGh5LT5uX2NpcGhlcl9zdWl0ZXMgPSBBUlJBWV9TSVpFKGNpcGhlcl9zdWl0ZXMpOwotCi0JCWlmICghaGF2ZV9tZnApCi0JCQlsb2NhbC0+aHcud2lwaHktPm5fY2lwaGVyX3N1aXRlcy0tOwotCi0JCWlmICghaGF2ZV93ZXApIHsKLQkJCWxvY2FsLT5ody53aXBoeS0+Y2lwaGVyX3N1aXRlcyArPSAyOwotCQkJbG9jYWwtPmh3LndpcGh5LT5uX2NpcGhlcl9zdWl0ZXMgLT0gMjsKLQkJfQotCi0JCXJldHVybiAwOwotCX0KLQotCWlmICghbG9jYWwtPmh3LndpcGh5LT5jaXBoZXJfc3VpdGVzKSB7Ci0JCS8qCi0JCSAqIERyaXZlciBzcGVjaWZpZXMgY2lwaGVyIHNjaGVtZXMgb25seQotCQkgKiBXZSBzdGFydCBjb3VudGluZyBjaXBoZXJzIGRlZmluZWQgYnkgc2NoZW1lcywgVEtJUCBhbmQgQ0NNUAorCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1dfQ1JZUFRPX0NPTlRST0wgfHwKKwkgICAgbG9jYWwtPmh3LndpcGh5LT5jaXBoZXJfc3VpdGVzKSB7CisJCS8qIElmIHRoZSBkcml2ZXIgYWR2ZXJ0aXNlcywgb3IgZG9lc24ndCBzdXBwb3J0IFNXIGNyeXB0bywKKwkJICogd2Ugb25seSBuZWVkIHRvIHJlbW92ZSBXRVAgaWYgbmVjZXNzYXJ5LgogCQkgKi8KLQkJbl9zdWl0ZXMgPSBsb2NhbC0+aHcubl9jaXBoZXJfc2NoZW1lcyArIDI7Ci0KLQkJLyogY2hlY2sgaWYgd2UgaGF2ZSBXRVA0MCBhbmQgV0VQMTA0ICovCiAJCWlmIChoYXZlX3dlcCkKLQkJCW5fc3VpdGVzICs9IDI7CisJCQlyZXR1cm4gMDsKIAotCQkvKiBjaGVjayBpZiB3ZSBoYXZlIEFFU19DTUFDICovCi0JCWlmIChoYXZlX21mcCkKLQkJCW5fc3VpdGVzKys7CisJCS8qIHdlbGwgaWYgaXQgaGFzIF9ub18gY2lwaGVycyAuLi4gZmluZSAqLworCQlpZiAoIWxvY2FsLT5ody53aXBoeS0+bl9jaXBoZXJfc3VpdGVzKQorCQkJcmV0dXJuIDA7CiAKLQkJc3VpdGVzID0ga21hbGxvYyhzaXplb2YodTMyKSAqIG5fc3VpdGVzLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzdWl0ZXMpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlzdWl0ZXNbdysrXSA9IFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA7Ci0JCXN1aXRlc1t3KytdID0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDsKLQotCQlpZiAoaGF2ZV93ZXApIHsKLQkJCXN1aXRlc1t3KytdID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA7Ci0JCQlzdWl0ZXNbdysrXSA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDsKLQkJfQotCi0JCWlmIChoYXZlX21mcCkKLQkJCXN1aXRlc1t3KytdID0gV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM7Ci0KLQkJZm9yIChyID0gMDsgciA8IGxvY2FsLT5ody5uX2NpcGhlcl9zY2hlbWVzOyByKyspCi0JCQlzdWl0ZXNbdysrXSA9IGNzW3JdLmNpcGhlcjsKLQl9IGVsc2UgewogCQkvKiBEcml2ZXIgcHJvdmlkZXMgY2lwaGVyIHN1aXRlcywgYnV0IHdlIG5lZWQgdG8gZXhjbHVkZSBXRVAgKi8KIAkJc3VpdGVzID0ga21lbWR1cChsb2NhbC0+aHcud2lwaHktPmNpcGhlcl9zdWl0ZXMsCiAJCQkJIHNpemVvZih1MzIpICogbG9jYWwtPmh3LndpcGh5LT5uX2NpcGhlcl9zdWl0ZXMsCkBAIC03NDAsNiArNzA0LDcxIEBACiAJCQkJY29udGludWU7CiAJCQlzdWl0ZXNbdysrXSA9IHN1aXRlOwogCQl9CisJfSBlbHNlIGlmICghbG9jYWwtPmh3LmNpcGhlcl9zY2hlbWVzKSB7CisJCS8qIElmIHRoZSBkcml2ZXIgZG9lc24ndCBoYXZlIGNpcGhlciBzY2hlbWVzLCB0aGVyZSdzIG5vdGhpbmcKKwkJICogZWxzZSB0byBkbyBvdGhlciB0aGFuIGFzc2lnbiB0aGUgKHNvZnR3YXJlIHN1cHBvcnRlZCBhbmQKKwkJICogcGVyaGFwcyBvZmZsb2FkZWQpIGNpcGhlciBzdWl0ZXMuCisJCSAqLworCQlsb2NhbC0+aHcud2lwaHktPmNpcGhlcl9zdWl0ZXMgPSBjaXBoZXJfc3VpdGVzOworCQlsb2NhbC0+aHcud2lwaHktPm5fY2lwaGVyX3N1aXRlcyA9IEFSUkFZX1NJWkUoY2lwaGVyX3N1aXRlcyk7CisKKwkJaWYgKCFoYXZlX21mcCkKKwkJCWxvY2FsLT5ody53aXBoeS0+bl9jaXBoZXJfc3VpdGVzIC09IDQ7CisKKwkJaWYgKCFoYXZlX3dlcCkgeworCQkJbG9jYWwtPmh3LndpcGh5LT5jaXBoZXJfc3VpdGVzICs9IDI7CisJCQlsb2NhbC0+aHcud2lwaHktPm5fY2lwaGVyX3N1aXRlcyAtPSAyOworCQl9CisKKwkJLyogbm90IGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgc28ganVzdCByZXR1cm4gKi8KKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaXBoZXJfc2NoZW1lICpjczsKKworCQljcyA9IGxvY2FsLT5ody5jaXBoZXJfc2NoZW1lczsKKworCQkvKiBEcml2ZXIgc3BlY2lmaWVzIGNpcGhlciBzY2hlbWVzIG9ubHkgKGJ1dCBub3QgY2lwaGVyIHN1aXRlcworCQkgKiBpbmNsdWRpbmcgdGhlIHNjaGVtZXMpCisJCSAqCisJCSAqIFdlIHN0YXJ0IGNvdW50aW5nIGNpcGhlcnMgZGVmaW5lZCBieSBzY2hlbWVzLCBUS0lQLCBDQ01QLAorCQkgKiBDQ01QLTI1NiwgR0NNUCwgYW5kIEdDTVAtMjU2CisJCSAqLworCQluX3N1aXRlcyA9IGxvY2FsLT5ody5uX2NpcGhlcl9zY2hlbWVzICsgNTsKKworCQkvKiBjaGVjayBpZiB3ZSBoYXZlIFdFUDQwIGFuZCBXRVAxMDQgKi8KKwkJaWYgKGhhdmVfd2VwKQorCQkJbl9zdWl0ZXMgKz0gMjsKKworCQkvKiBjaGVjayBpZiB3ZSBoYXZlIEFFU19DTUFDLCBCSVAtQ01BQy0yNTYsIEJJUC1HTUFDLTEyOCwKKwkJICogQklQLUdNQUMtMjU2CisJCSAqLworCQlpZiAoaGF2ZV9tZnApCisJCQluX3N1aXRlcyArPSA0OworCisJCXN1aXRlcyA9IGttYWxsb2Moc2l6ZW9mKHUzMikgKiBuX3N1aXRlcywgR0ZQX0tFUk5FTCk7CisJCWlmICghc3VpdGVzKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJc3VpdGVzW3crK10gPSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOworCQlzdWl0ZXNbdysrXSA9IFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVBfMjU2OworCQlzdWl0ZXNbdysrXSA9IFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA7CisJCXN1aXRlc1t3KytdID0gV0xBTl9DSVBIRVJfU1VJVEVfR0NNUDsKKwkJc3VpdGVzW3crK10gPSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QXzI1NjsKKworCQlpZiAoaGF2ZV93ZXApIHsKKwkJCXN1aXRlc1t3KytdID0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA7CisJCQlzdWl0ZXNbdysrXSA9IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDsKKwkJfQorCisJCWlmIChoYXZlX21mcCkgeworCQkJc3VpdGVzW3crK10gPSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzsKKwkJCXN1aXRlc1t3KytdID0gV0xBTl9DSVBIRVJfU1VJVEVfQklQX0NNQUNfMjU2OworCQkJc3VpdGVzW3crK10gPSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18xMjg7CisJCQlzdWl0ZXNbdysrXSA9IFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9HTUFDXzI1NjsKKwkJfQorCisJCWZvciAociA9IDA7IHIgPCBsb2NhbC0+aHcubl9jaXBoZXJfc2NoZW1lczsgcisrKQorCQkJc3VpdGVzW3crK10gPSBjc1tyXS5jaXBoZXI7CiAJfQogCiAJbG9jYWwtPmh3LndpcGh5LT5jaXBoZXJfc3VpdGVzID0gc3VpdGVzOwpAQCAtOTE2LDEwICs5NDUsNiBAQAogCQl9CiAJfQogCi0JV0FSTigobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1VBUFNEKQotCSAgICAgJiYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyksCi0JICAgICAiVS1BUFNEIG5vdCBzdXBwb3J0ZWQgd2l0aCBIV19QU19OVUxMRlVOQ19TVEFDS1xuIik7Ci0KIAkvKgogCSAqIENhbGN1bGF0ZSBzY2FuIElFIGxlbmd0aCAtLSB3ZSBuZWVkIHRoaXMgdG8gYWxsb2MKIAkgKiBtZW1vcnkgYW5kIHRvIHN1YnRyYWN0IGZyb20gdGhlIGRyaXZlciBsaW1pdC4gSXQKQEAgLTEwNDUsMTAgKzEwNzAsOCBAQAogCQlpZWVlODAyMTFfbWF4X25ldHdvcmtfbGF0ZW5jeTsKIAlyZXN1bHQgPSBwbV9xb3NfYWRkX25vdGlmaWVyKFBNX1FPU19ORVRXT1JLX0xBVEVOQ1ksCiAJCQkJICAgICAmbG9jYWwtPm5ldHdvcmtfbGF0ZW5jeV9ub3RpZmllcik7Ci0JaWYgKHJlc3VsdCkgewotCQlydG5sX2xvY2soKTsKKwlpZiAocmVzdWx0KQogCQlnb3RvIGZhaWxfcG1fcW9zOwotCX0KIAogI2lmZGVmIENPTkZJR19JTkVUCiAJbG9jYWwtPmlmYV9ub3RpZmllci5ub3RpZmllcl9jYWxsID0gaWVlZTgwMjExX2lmYV9jaGFuZ2VkOwpAQCAtMTA3NiwxNSArMTA5OSwxNSBAQAogIGZhaWxfaWZhOgogCXBtX3Fvc19yZW1vdmVfbm90aWZpZXIoUE1fUU9TX05FVFdPUktfTEFURU5DWSwKIAkJCSAgICAgICAmbG9jYWwtPm5ldHdvcmtfbGF0ZW5jeV9ub3RpZmllcik7Ci0JcnRubF9sb2NrKCk7CiAjZW5kaWYKICBmYWlsX3BtX3FvczoKLQlpZWVlODAyMTFfbGVkX2V4aXQobG9jYWwpOworCXJ0bmxfbG9jaygpOworCXJhdGVfY29udHJvbF9kZWluaXRpYWxpemUobG9jYWwpOwogCWllZWU4MDIxMV9yZW1vdmVfaW50ZXJmYWNlcyhsb2NhbCk7CiAgZmFpbF9yYXRlOgogCXJ0bmxfdW5sb2NrKCk7CisJaWVlZTgwMjExX2xlZF9leGl0KGxvY2FsKTsKIAlpZWVlODAyMTFfd2VwX2ZyZWUobG9jYWwpOwotCXN0YV9pbmZvX3N0b3AobG9jYWwpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGxvY2FsLT53b3JrcXVldWUpOwogIGZhaWxfd29ya3F1ZXVlOgogCXdpcGh5X3VucmVnaXN0ZXIobG9jYWwtPmh3LndpcGh5KTsKQEAgLTExODAsNiArMTIwMyw4IEBACiAKIAlrZnJlZShyY3VfYWNjZXNzX3BvaW50ZXIobG9jYWwtPnR4X2xhdGVuY3kpKTsKIAorCXN0YV9pbmZvX3N0b3AobG9jYWwpOworCiAJd2lwaHlfZnJlZShsb2NhbC0+aHcud2lwaHkpOwogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZnJlZV9odyk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuYwppbmRleCA4MzdhNDA2Li4xMGFjNjMyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jCisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKQEAgLTE1NywxNCArMTU3LDE4IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmIHZodF9jaGFuZGVmOworCXN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCBzdGFfaHRfY2FwOwogCXUzMiBodF9jZnJlcSwgcmV0OwogCisJbWVtY3B5KCZzdGFfaHRfY2FwLCAmc2JhbmQtPmh0X2NhcCwgc2l6ZW9mKHN0YV9odF9jYXApKTsKKwlpZWVlODAyMTFfYXBwbHlfaHRjYXBfb3ZlcnJpZGVzKHNkYXRhLCAmc3RhX2h0X2NhcCk7CisKIAljaGFuZGVmLT5jaGFuID0gY2hhbm5lbDsKIAljaGFuZGVmLT53aWR0aCA9IE5MODAyMTFfQ0hBTl9XSURUSF8yMF9OT0hUOwogCWNoYW5kZWYtPmNlbnRlcl9mcmVxMSA9IGNoYW5uZWwtPmNlbnRlcl9mcmVxOwogCWNoYW5kZWYtPmNlbnRlcl9mcmVxMiA9IDA7CiAKLQlpZiAoIWh0X2NhcCB8fCAhaHRfb3BlciB8fCAhc2JhbmQtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKKwlpZiAoIWh0X2NhcCB8fCAhaHRfb3BlciB8fCAhc3RhX2h0X2NhcC5odF9zdXBwb3J0ZWQpIHsKIAkJcmV0ID0gSUVFRTgwMjExX1NUQV9ESVNBQkxFX0hUIHwgSUVFRTgwMjExX1NUQV9ESVNBQkxFX1ZIVDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTk4LDcgKzIwMiw3IEBACiAJfQogCiAJLyogY2hlY2sgNDAgTUh6IHN1cHBvcnQsIGlmIHdlIGhhdmUgaXQgKi8KLQlpZiAoc2JhbmQtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MCkgeworCWlmIChzdGFfaHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKSB7CiAJCXN3aXRjaCAoaHRfb3Blci0+aHRfcGFyYW0gJiBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19PRkZTRVQpIHsKIAkJY2FzZSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRToKIAkJCWNoYW5kZWYtPndpZHRoID0gTkw4MDIxMV9DSEFOX1dJRFRIXzQwOwpAQCAtMTA1NCw4ICsxMDU4LDYgQEAKIAkJc2RhdGEtPmNzYV9ibG9ja190eCA9IGZhbHNlOwogCX0KIAotCWNmZzgwMjExX2NoX3N3aXRjaF9ub3RpZnkoc2RhdGEtPmRldiwgJnNkYXRhLT5yZXNlcnZlZF9jaGFuZGVmKTsKLQogCXNkYXRhLT52aWYuY3NhX2FjdGl2ZSA9IGZhbHNlOwogCWlmbWdkLT5jc2Ffd2FpdGluZ19iY24gPSBmYWxzZTsKIApAQCAtMTA2Nyw2ICsxMDY5LDggQEAKIAkJCQkgICAgICZpZm1nZC0+Y3NhX2Nvbm5lY3Rpb25fZHJvcF93b3JrKTsKIAkJcmV0dXJuOwogCX0KKworCWNmZzgwMjExX2NoX3N3aXRjaF9ub3RpZnkoc2RhdGEtPmRldiwgJnNkYXRhLT5yZXNlcnZlZF9jaGFuZGVmKTsKIH0KIAogdm9pZCBpZWVlODAyMTFfY2hzd2l0Y2hfZG9uZShzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBib29sIHN1Y2Nlc3MpCkBAIC0xMjg0LDggKzEyODgsMTEgQEAKIAkJY291bnRyeV9pZV9sZW4gLT0gMzsKIAl9CiAKLQlpZiAoaGF2ZV9jaGFuX3B3cikKKwlpZiAoaGF2ZV9jaGFuX3B3ciAmJiBwd3JfY29uc3RyX2VsZW0pCiAJCSpwd3JfcmVkdWN0aW9uID0gKnB3cl9jb25zdHJfZWxlbTsKKwllbHNlCisJCSpwd3JfcmVkdWN0aW9uID0gMDsKKwogCXJldHVybiBoYXZlX2NoYW5fcHdyOwogfQogCkBAIC0xMzE0LDEwICsxMzIxLDExIEBACiAJaW50IGNoYW5fcHdyID0gMCwgcHdyX3JlZHVjdGlvbl84MDIxMWggPSAwOwogCWludCBwd3JfbGV2ZWxfY2lzY28sIHB3cl9sZXZlbF84MDIxMWg7CiAJaW50IG5ld19hcF9sZXZlbDsKKwlfX2xlMTYgY2FwYWIgPSBtZ210LT51LnByb2JlX3Jlc3AuY2FwYWJfaW5mbzsKIAotCWlmIChjb3VudHJ5X2llICYmIHB3cl9jb25zdHJfaWUgJiYKLQkgICAgbWdtdC0+dS5wcm9iZV9yZXNwLmNhcGFiX2luZm8gJgotCQljcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkpIHsKKwlpZiAoY291bnRyeV9pZSAmJgorCSAgICAoY2FwYWIgJiBjcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgfHwKKwkgICAgIGNhcGFiICYgY3B1X3RvX2xlMTYoV0xBTl9DQVBBQklMSVRZX1JBRElPX01FQVNVUkUpKSkgewogCQloYXNfODAyMTFoX3B3ciA9IGllZWU4MDIxMV9maW5kXzgwMjExaF9wd3JfY29uc3RyKAogCQkJc2RhdGEsIGNoYW5uZWwsIGNvdW50cnlfaWUsIGNvdW50cnlfaWVfbGVuLAogCQkJcHdyX2NvbnN0cl9pZSwgJmNoYW5fcHdyLCAmcHdyX3JlZHVjdGlvbl84MDIxMWgpOwpAQCAtMTU5Niw3ICsxNjA0LDcgQEAKIAkJfSBlbHNlIHsKIAkJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7CiAJCQkvKiBGbHVzaCB0byBnZXQgdGhlIHR4IHN0YXR1cyBvZiBudWxsZnVuYyBmcmFtZSAqLwotCQkJaWVlZTgwMjExX2ZsdXNoX3F1ZXVlcyhsb2NhbCwgc2RhdGEpOworCQkJaWVlZTgwMjExX2ZsdXNoX3F1ZXVlcyhsb2NhbCwgc2RhdGEsIGZhbHNlKTsKIAkJfQogCX0KIApAQCAtMjAwMywxOCArMjAxMSwyNiBAQAogCS8qIGRpc2FibGUgcGVyLXZpZiBwcyAqLwogCWllZWU4MDIxMV9yZWNhbGNfcHNfdmlmKHNkYXRhKTsKIAotCS8qIGZsdXNoIG91dCBhbnkgcGVuZGluZyBmcmFtZSAoZS5nLiBERUxCQSkgYmVmb3JlIGRlYXV0aC9kaXNhc3NvYyAqLworCS8qIG1ha2Ugc3VyZSBvbmdvaW5nIHRyYW5zbWlzc2lvbiBmaW5pc2hlcyAqLworCXN5bmNocm9uaXplX25ldCgpOworCisJLyoKKwkgKiBkcm9wIGFueSBmcmFtZSBiZWZvcmUgZGVhdXRoL2Rpc2Fzc29jLCB0aGlzIGNhbiBiZSBkYXRhIG9yCisJICogbWFuYWdlbWVudCBmcmFtZS4gU2luY2Ugd2UgYXJlIGRpc2Nvbm5lY3RpbmcsIHdlIHNob3VsZCBub3QKKwkgKiBpbnNpc3Qgc2VuZGluZyB0aGVzZSBmcmFtZXMgd2hpY2ggY2FuIHRha2UgdGltZSBhbmQgZGVsYXkKKwkgKiB0aGUgZGlzY29ubmVjdGlvbiBhbmQgcG9zc2libGUgdGhlIHJvYW1pbmcuCisJICovCiAJaWYgKHR4KQotCQlpZWVlODAyMTFfZmx1c2hfcXVldWVzKGxvY2FsLCBzZGF0YSk7CisJCWllZWU4MDIxMV9mbHVzaF9xdWV1ZXMobG9jYWwsIHNkYXRhLCB0cnVlKTsKIAogCS8qIGRlYXV0aGVudGljYXRlL2Rpc2Fzc29jaWF0ZSBub3cgKi8KIAlpZiAodHggfHwgZnJhbWVfYnVmKQogCQlpZWVlODAyMTFfc2VuZF9kZWF1dGhfZGlzYXNzb2Moc2RhdGEsIGlmbWdkLT5ic3NpZCwgc3R5cGUsCiAJCQkJCSAgICAgICByZWFzb24sIHR4LCBmcmFtZV9idWYpOwogCi0JLyogZmx1c2ggb3V0IGZyYW1lICovCisJLyogZmx1c2ggb3V0IGZyYW1lIC0gbWFrZSBzdXJlIHRoZSBkZWF1dGggd2FzIGFjdHVhbGx5IHNlbnQgKi8KIAlpZiAodHgpCi0JCWllZWU4MDIxMV9mbHVzaF9xdWV1ZXMobG9jYWwsIHNkYXRhKTsKKwkJaWVlZTgwMjExX2ZsdXNoX3F1ZXVlcyhsb2NhbCwgc2RhdGEsIGZhbHNlKTsKIAogCS8qIGNsZWFyIGJzc2lkIG9ubHkgYWZ0ZXIgYnVpbGRpbmcgdGhlIG5lZWRlZCBtZ210IGZyYW1lcyAqLwogCW1lbXNldChpZm1nZC0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKQEAgLTI0NDAsNiArMjQ1NiwxMiBAQAogCXNkYXRhX2Fzc2VydF9sb2NrKHNkYXRhKTsKIAogCWlmICghYXNzb2MpIHsKKwkJLyoKKwkJICogd2UgYXJlIG5vdCBhdXRoZW50aWNhdGVkIHlldCwgdGhlIG9ubHkgdGltZXIgdGhhdCBjb3VsZCBiZQorCQkgKiBydW5uaW5nIGlzIHRoZSB0aW1lb3V0IGZvciB0aGUgYXV0aGVudGljYXRpb24gcmVzcG9uc2Ugd2hpY2gKKwkJICogd2hpY2ggaXMgbm90IHJlbGV2YW50IGFueW1vcmUuCisJCSAqLworCQlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUubWdkLnRpbWVyKTsKIAkJc3RhX2luZm9fZGVzdHJveV9hZGRyKHNkYXRhLCBhdXRoX2RhdGEtPmJzcy0+YnNzaWQpOwogCiAJCW1lbXNldChzZGF0YS0+dS5tZ2QuYnNzaWQsIDAsIEVUSF9BTEVOKTsKQEAgLTI3NDcsNiArMjc2OSwxMiBAQAogCXNkYXRhX2Fzc2VydF9sb2NrKHNkYXRhKTsKIAogCWlmICghYXNzb2MpIHsKKwkJLyoKKwkJICogd2UgYXJlIG5vdCBhc3NvY2lhdGVkIHlldCwgdGhlIG9ubHkgdGltZXIgdGhhdCBjb3VsZCBiZQorCQkgKiBydW5uaW5nIGlzIHRoZSB0aW1lb3V0IGZvciB0aGUgYXNzb2NpYXRpb24gcmVzcG9uc2Ugd2hpY2gKKwkJICogd2hpY2ggaXMgbm90IHJlbGV2YW50IGFueW1vcmUuCisJCSAqLworCQlkZWxfdGltZXJfc3luYygmc2RhdGEtPnUubWdkLnRpbWVyKTsKIAkJc3RhX2luZm9fZGVzdHJveV9hZGRyKHNkYXRhLCBhc3NvY19kYXRhLT5ic3MtPmJzc2lkKTsKIAogCQltZW1zZXQoc2RhdGEtPnUubWdkLmJzc2lkLCAwLCBFVEhfQUxFTik7CkBAIC00MTk3LDkgKzQyMjUsMTMgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzID0gKHZvaWQgKiljYnNzLT5wcml2OwogCXN0cnVjdCBzdGFfaW5mbyAqbmV3X3N0YSA9IE5VTEw7Ci0JYm9vbCBoYXZlX3N0YSA9IGZhbHNlOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCBzdGFfaHRfY2FwOworCWJvb2wgaGF2ZV9zdGEgPSBmYWxzZSwgaXNfb3ZlcnJpZGUgPSBmYWxzZTsKIAlpbnQgZXJyOwogCisJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2Nic3MtPmNoYW5uZWwtPmJhbmRdOworCiAJaWYgKFdBUk5fT04oIWlmbWdkLT5hdXRoX2RhdGEgJiYgIWlmbWdkLT5hc3NvY19kYXRhKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTQyMTQsMjUgKzQyNDYsMzIgQEAKIAkJaWYgKCFuZXdfc3RhKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQorCisJbWVtY3B5KCZzdGFfaHRfY2FwLCAmc2JhbmQtPmh0X2NhcCwgc2l6ZW9mKHN0YV9odF9jYXApKTsKKwlpZWVlODAyMTFfYXBwbHlfaHRjYXBfb3ZlcnJpZGVzKHNkYXRhLCAmc3RhX2h0X2NhcCk7CisKKwlpc19vdmVycmlkZSA9IChzdGFfaHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKSAhPQorCQkgICAgICAoc2JhbmQtPmh0X2NhcC5jYXAgJgorCQkgICAgICAgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApOworCisJaWYgKG5ld19zdGEgfHwgaXNfb3ZlcnJpZGUpIHsKKwkJZXJyID0gaWVlZTgwMjExX3ByZXBfY2hhbm5lbChzZGF0YSwgY2Jzcyk7CisJCWlmIChlcnIpIHsKKwkJCWlmIChuZXdfc3RhKQorCQkJCXN0YV9pbmZvX2ZyZWUobG9jYWwsIG5ld19zdGEpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKIAlpZiAobmV3X3N0YSkgewogCQl1MzIgcmF0ZXMgPSAwLCBiYXNpY19yYXRlcyA9IDA7CiAJCWJvb2wgaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQ7CiAJCWludCBtaW5fcmF0ZSA9IElOVF9NQVgsIG1pbl9yYXRlX2luZGV4ID0gLTE7CiAJCXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjaGFuY3R4X2NvbmY7Ci0JCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCQljb25zdCBzdHJ1Y3QgY2ZnODAyMTFfYnNzX2llcyAqaWVzOwotCQlpbnQgc2hpZnQ7CisJCWludCBzaGlmdCA9IGllZWU4MDIxMV92aWZfZ2V0X3NoaWZ0KCZzZGF0YS0+dmlmKTsKIAkJdTMyIHJhdGVfZmxhZ3M7CiAKLQkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2Nic3MtPmNoYW5uZWwtPmJhbmRdOwotCi0JCWVyciA9IGllZWU4MDIxMV9wcmVwX2NoYW5uZWwoc2RhdGEsIGNic3MpOwotCQlpZiAoZXJyKSB7Ci0JCQlzdGFfaW5mb19mcmVlKGxvY2FsLCBuZXdfc3RhKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXNoaWZ0ID0gaWVlZTgwMjExX3ZpZl9nZXRfc2hpZnQoJnNkYXRhLT52aWYpOwotCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJY2hhbmN0eF9jb25mID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLT52aWYuY2hhbmN0eF9jb25mKTsKIAkJaWYgKFdBUk5fT04oIWNoYW5jdHhfY29uZikpIHsKQEAgLTQ2NjgsOCArNDcwNywxMyBAQAogCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9ESVNBQkxFX1ZIVDsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAorCWlmIChXQVJOKChzZGF0YS0+dmlmLmRyaXZlcl9mbGFncyAmIElFRUU4MDIxMV9WSUZfU1VQUE9SVFNfVUFQU0QpICYmCisJCSAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKSwKKwkgICAgICJVLUFQU0Qgbm90IHN1cHBvcnRlZCB3aXRoIEhXX1BTX05VTExGVU5DX1NUQUNLXG4iKSkKKwkJc2RhdGEtPnZpZi5kcml2ZXJfZmxhZ3MgJj0gfklFRUU4MDIxMV9WSUZfU1VQUE9SVFNfVUFQU0Q7CisKIAlpZiAoYnNzLT53bW1fdXNlZCAmJiBic3MtPnVhcHNkX3N1cHBvcnRlZCAmJgotCSAgICAoc2RhdGEtPmxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19VQVBTRCkpIHsKKwkgICAgKHNkYXRhLT52aWYuZHJpdmVyX2ZsYWdzICYgSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19VQVBTRCkpIHsKIAkJYXNzb2NfZGF0YS0+dWFwc2QgPSB0cnVlOwogCQlpZm1nZC0+ZmxhZ3MgfD0gSUVFRTgwMjExX1NUQV9VQVBTRF9FTkFCTEVEOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jIGIvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYwppbmRleCBmZjIwYjJlLi42ODNmMGUzIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvb2ZmY2hhbm5lbC5jCisrKyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJmxvY2FsLT5odywgSUVFRTgwMjExX01BWF9RVUVVRV9NQVAsCiAJCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9PRkZDSEFOTkVMLAogCQkJCQlmYWxzZSk7Ci0JaWVlZTgwMjExX2ZsdXNoX3F1ZXVlcyhsb2NhbCwgTlVMTCk7CisJaWVlZTgwMjExX2ZsdXNoX3F1ZXVlcyhsb2NhbCwgTlVMTCwgZmFsc2UpOwogCiAJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewpAQCAtMzk4LDcgKzM5OCw3IEBACiAJCWllZWU4MDIxMV9yb2Nfbm90aWZ5X2Rlc3Ryb3kocm9jLCAhcm9jLT5hYm9ydCk7CiAKIAkJaWYgKHN0YXJ0ZWQgJiYgIW9uX2NoYW5uZWwpIHsKLQkJCWllZWU4MDIxMV9mbHVzaF9xdWV1ZXMobG9jYWwsIE5VTEwpOworCQkJaWVlZTgwMjExX2ZsdXNoX3F1ZXVlcyhsb2NhbCwgTlVMTCwgZmFsc2UpOwogCiAJCQlsb2NhbC0+dG1wX2NoYW5uZWwgPSBOVUxMOwogCQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgMCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcG0uYyBiL25ldC9tYWM4MDIxMS9wbS5jCmluZGV4IDRjNTE5MmUuLmNhNDA1YjYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9wbS5jCisrKyBiL25ldC9tYWM4MDIxMS9wbS5jCkBAIC00MSw3ICs0MSw3IEBACiAJLyogZmx1c2ggb3V0IGFsbCBwYWNrZXRzICovCiAJc3luY2hyb25pemVfbmV0KCk7CiAKLQlpZWVlODAyMTFfZmx1c2hfcXVldWVzKGxvY2FsLCBOVUxMKTsKKwlpZWVlODAyMTFfZmx1c2hfcXVldWVzKGxvY2FsLCBOVUxMLCB0cnVlKTsKIAogCWxvY2FsLT5xdWllc2NpbmcgPSB0cnVlOwogCS8qIG1ha2UgcXVpZXNjaW5nIHZpc2libGUgdG8gdGltZXJzIGV2ZXJ5d2hlcmUgKi8KQEAgLTg2LDIwICs4Niw2IEBACiAJCX0KIAl9CiAKLQkvKiB0ZWFyIGRvd24gYWdncmVnYXRpb24gc2Vzc2lvbnMgYW5kIHJlbW92ZSBTVEFzICovCi0JbXV0ZXhfbG9jaygmbG9jYWwtPnN0YV9tdHgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7Ci0JCWlmIChzdGEtPnVwbG9hZGVkKSB7Ci0JCQllbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgc3RhdGU7Ci0KLQkJCXN0YXRlID0gc3RhLT5zdGFfc3RhdGU7Ci0JCQlmb3IgKDsgc3RhdGUgPiBJRUVFODAyMTFfU1RBX05PVEVYSVNUOyBzdGF0ZS0tKQotCQkJCVdBUk5fT04oZHJ2X3N0YV9zdGF0ZShsb2NhbCwgc3RhLT5zZGF0YSwgc3RhLAotCQkJCQkJICAgICAgc3RhdGUsIHN0YXRlIC0gMSkpOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmbG9jYWwtPnN0YV9tdHgpOwotCiAJLyogcmVtb3ZlIGFsbCBpbnRlcmZhY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGluIHRoZSBkcml2ZXIgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKIAkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCkBAIC0xMTEsNiArOTcsMjEgQEAKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCQkJaWVlZTgwMjExX21nZF9xdWllc2NlKHNkYXRhKTsKIAkJCWJyZWFrOworCQljYXNlIE5MODAyMTFfSUZUWVBFX1dEUzoKKwkJCS8qIHRlYXIgZG93biBhZ2dyZWdhdGlvbiBzZXNzaW9ucyBhbmQgcmVtb3ZlIFNUQXMgKi8KKwkJCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKKwkJCXN0YSA9IHNkYXRhLT51Lndkcy5zdGE7CisJCQlpZiAoc3RhICYmIHN0YS0+dXBsb2FkZWQpIHsKKwkJCQllbnVtIGllZWU4MDIxMV9zdGFfc3RhdGUgc3RhdGU7CisKKwkJCQlzdGF0ZSA9IHN0YS0+c3RhX3N0YXRlOworCQkJCWZvciAoOyBzdGF0ZSA+IElFRUU4MDIxMV9TVEFfTk9URVhJU1Q7IHN0YXRlLS0pCisJCQkJCVdBUk5fT04oZHJ2X3N0YV9zdGF0ZShsb2NhbCwgc3RhLT5zZGF0YSwKKwkJCQkJCQkgICAgICBzdGEsIHN0YXRlLAorCQkJCQkJCSAgICAgIHN0YXRlIC0gMSkpOworCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbC5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuYwppbmRleCBkNTFmNmIxLi43Yzg2YTAwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbC5jCisrKyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsLmMKQEAgLTI2MywxMiArMjYzLDEyIEBACiBtaW5zdHJlbF9nZXRfcmV0cnlfY291bnQoc3RydWN0IG1pbnN0cmVsX3JhdGUgKm1yLAogCQkJIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbykKIHsKLQl1bnNpZ25lZCBpbnQgcmV0cnkgPSBtci0+YWRqdXN0ZWRfcmV0cnlfY291bnQ7CisJdTggcmV0cnkgPSBtci0+YWRqdXN0ZWRfcmV0cnlfY291bnQ7CiAKIAlpZiAoaW5mby0+Y29udHJvbC51c2VfcnRzKQotCQlyZXRyeSA9IG1heCgyVSwgbWluKG1yLT5zdGF0cy5yZXRyeV9jb3VudF9ydHNjdHMsIHJldHJ5KSk7CisJCXJldHJ5ID0gbWF4X3QodTgsIDIsIG1pbihtci0+c3RhdHMucmV0cnlfY291bnRfcnRzY3RzLCByZXRyeSkpOwogCWVsc2UgaWYgKGluZm8tPmNvbnRyb2wudXNlX2N0c19wcm90KQotCQlyZXRyeSA9IG1heCgyVSwgbWluKG1yLT5yZXRyeV9jb3VudF9jdHMsIHJldHJ5KSk7CisJCXJldHJ5ID0gbWF4X3QodTgsIDIsIG1pbihtci0+cmV0cnlfY291bnRfY3RzLCByZXRyeSkpOwogCXJldHVybiByZXRyeTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuaCBiL25ldC9tYWM4MDIxMS9yYzgwMjExX21pbnN0cmVsLmgKaW5kZXggOTdlY2E4Ni4uNDEwZWZlNiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JjODAyMTFfbWluc3RyZWwuaAorKysgYi9uZXQvbWFjODAyMTEvcmM4MDIxMV9taW5zdHJlbC5oCkBAIC0zMyw4ICszMyw4IEBACiAKIHN0cnVjdCBtaW5zdHJlbF9yYXRlX3N0YXRzIHsKIAkvKiBjdXJyZW50IC8gbGFzdCBzYW1wbGluZyBwZXJpb2QgYXR0ZW1wdHMvc3VjY2VzcyBjb3VudGVycyAqLwotCXVuc2lnbmVkIGludCBhdHRlbXB0cywgbGFzdF9hdHRlbXB0czsKLQl1bnNpZ25lZCBpbnQgc3VjY2VzcywgbGFzdF9zdWNjZXNzOworCXUxNiBhdHRlbXB0cywgbGFzdF9hdHRlbXB0czsKKwl1MTYgc3VjY2VzcywgbGFzdF9zdWNjZXNzOwogCiAJLyogdG90YWwgYXR0ZW1wdHMvc3VjY2VzcyBjb3VudGVycyAqLwogCXU2NCBhdHRfaGlzdCwgc3VjY19oaXN0OwpAQCAtNDYsOCArNDYsOCBAQAogCXVuc2lnbmVkIGludCBjdXJfcHJvYiwgcHJvYmFiaWxpdHk7CiAKIAkvKiBtYXhpbXVtIHJldHJ5IGNvdW50cyAqLwotCXVuc2lnbmVkIGludCByZXRyeV9jb3VudDsKLQl1bnNpZ25lZCBpbnQgcmV0cnlfY291bnRfcnRzY3RzOworCXU4IHJldHJ5X2NvdW50OworCXU4IHJldHJ5X2NvdW50X3J0c2N0czsKIAogCXU4IHNhbXBsZV9za2lwcGVkOwogCWJvb2wgcmV0cnlfdXBkYXRlZDsKQEAgLTU1LDE0ICs1NSwxNSBAQAogCiBzdHJ1Y3QgbWluc3RyZWxfcmF0ZSB7CiAJaW50IGJpdHJhdGU7Ci0JaW50IHJpeDsKKworCXM4IHJpeDsKKwl1OCByZXRyeV9jb3VudF9jdHM7CisJdTggYWRqdXN0ZWRfcmV0cnlfY291bnQ7CiAKIAl1bnNpZ25lZCBpbnQgcGVyZmVjdF90eF90aW1lOwogCXVuc2lnbmVkIGludCBhY2tfdGltZTsKIAogCWludCBzYW1wbGVfbGltaXQ7Ci0JdW5zaWduZWQgaW50IHJldHJ5X2NvdW50X2N0czsKLQl1bnNpZ25lZCBpbnQgYWRqdXN0ZWRfcmV0cnlfY291bnQ7CiAKIAlzdHJ1Y3QgbWluc3RyZWxfcmF0ZV9zdGF0cyBzdGF0czsKIH07CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcnguYyBiL25ldC9tYWM4MDIxMS9yeC5jCmluZGV4IDY4M2IxMGYuLjExMDE1NjMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9yeC5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIAllbHNlIGlmIChyYXRlICYmIHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfRVJQX0cpCiAJCWNoYW5uZWxfZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fT0ZETSB8IElFRUU4MDIxMV9DSEFOXzJHSFo7CiAJZWxzZSBpZiAocmF0ZSkKLQkJY2hhbm5lbF9mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9PRkRNIHwgSUVFRTgwMjExX0NIQU5fMkdIWjsKKwkJY2hhbm5lbF9mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9DQ0sgfCBJRUVFODAyMTFfQ0hBTl8yR0haOwogCWVsc2UKIAkJY2hhbm5lbF9mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl8yR0haOwogCXB1dF91bmFsaWduZWRfbGUxNihjaGFubmVsX2ZsYWdzLCBwb3MpOwpAQCAtMzYxLDkgKzM2MSw2IEBACiAJCXUxNiBrbm93biA9IGxvY2FsLT5ody5yYWRpb3RhcF92aHRfZGV0YWlsczsKIAogCQlydGhkci0+aXRfcHJlc2VudCB8PSBjcHVfdG9fbGUzMigxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9WSFQpOwotCQkvKiBrbm93biBmaWVsZCAtIGhvdyB0byBoYW5kbGUgODArODA/ICovCi0JCWlmIChzdGF0dXMtPnZodF9mbGFnICYgUlhfVkhUX0ZMQUdfODBQODBNSFopCi0JCQlrbm93biAmPSB+SUVFRTgwMjExX1JBRElPVEFQX1ZIVF9LTk9XTl9CQU5EV0lEVEg7CiAJCXB1dF91bmFsaWduZWRfbGUxNihrbm93biwgcG9zKTsKIAkJcG9zICs9IDI7CiAJCS8qIGZsYWdzICovCkBAIC0zNzgsOCArMzc1LDYgQEAKIAkJLyogYmFuZHdpZHRoICovCiAJCWlmIChzdGF0dXMtPnZodF9mbGFnICYgUlhfVkhUX0ZMQUdfODBNSFopCiAJCQkqcG9zKysgPSA0OwotCQllbHNlIGlmIChzdGF0dXMtPnZodF9mbGFnICYgUlhfVkhUX0ZMQUdfODBQODBNSFopCi0JCQkqcG9zKysgPSAwOyAvKiBtYXJrZWQgbm90IGtub3duIGFib3ZlICovCiAJCWVsc2UgaWYgKHN0YXR1cy0+dmh0X2ZsYWcgJiBSWF9WSFRfRkxBR18xNjBNSFopCiAJCQkqcG9zKysgPSAxMTsKIAkJZWxzZSBpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR180ME1IWikKQEAgLTY1Miw2ICs2NDcsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2ItPmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9tbWllICptbWllOworCXN0cnVjdCBpZWVlODAyMTFfbW1pZV8xNiAqbW1pZTE2OwogCiAJaWYgKHNrYi0+bGVuIDwgMjQgKyBzaXplb2YoKm1taWUpIHx8ICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmRhKSkKIAkJcmV0dXJuIC0xOwpAQCAtNjYxLDExICs2NTcsMTggQEAKIAogCW1taWUgPSAoc3RydWN0IGllZWU4MDIxMV9tbWllICopCiAJCShza2ItPmRhdGEgKyBza2ItPmxlbiAtIHNpemVvZigqbW1pZSkpOwotCWlmIChtbWllLT5lbGVtZW50X2lkICE9IFdMQU5fRUlEX01NSUUgfHwKLQkgICAgbW1pZS0+bGVuZ3RoICE9IHNpemVvZigqbW1pZSkgLSAyKQotCQlyZXR1cm4gLTE7CisJaWYgKG1taWUtPmVsZW1lbnRfaWQgPT0gV0xBTl9FSURfTU1JRSAmJgorCSAgICBtbWllLT5sZW5ndGggPT0gc2l6ZW9mKCptbWllKSAtIDIpCisJCXJldHVybiBsZTE2X3RvX2NwdShtbWllLT5rZXlfaWQpOwogCi0JcmV0dXJuIGxlMTZfdG9fY3B1KG1taWUtPmtleV9pZCk7CisJbW1pZTE2ID0gKHN0cnVjdCBpZWVlODAyMTFfbW1pZV8xNiAqKQorCQkoc2tiLT5kYXRhICsgc2tiLT5sZW4gLSBzaXplb2YoKm1taWUxNikpOworCWlmIChza2ItPmxlbiA+PSAyNCArIHNpemVvZigqbW1pZTE2KSAmJgorCSAgICBtbWllMTYtPmVsZW1lbnRfaWQgPT0gV0xBTl9FSURfTU1JRSAmJgorCSAgICBtbWllMTYtPmxlbmd0aCA9PSBzaXplb2YoKm1taWUxNikgLSAyKQorCQlyZXR1cm4gbGUxNl90b19jcHUobW1pZTE2LT5rZXlfaWQpOworCisJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IGl3bDgwMjExX2dldF9jc19rZXlpZChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2NpcGhlcl9zY2hlbWUgKmNzLApAQCAtMTY1NSwxMSArMTY1OCwyNyBAQAogCQlyZXN1bHQgPSBpZWVlODAyMTFfY3J5cHRvX3RraXBfZGVjcnlwdChyeCk7CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKLQkJcmVzdWx0ID0gaWVlZTgwMjExX2NyeXB0b19jY21wX2RlY3J5cHQocngpOworCQlyZXN1bHQgPSBpZWVlODAyMTFfY3J5cHRvX2NjbXBfZGVjcnlwdCgKKwkJCXJ4LCBJRUVFODAyMTFfQ0NNUF9NSUNfTEVOKTsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QXzI1NjoKKwkJcmVzdWx0ID0gaWVlZTgwMjExX2NyeXB0b19jY21wX2RlY3J5cHQoCisJCQlyeCwgSUVFRTgwMjExX0NDTVBfMjU2X01JQ19MRU4pOwogCQlicmVhazsKIAljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOgogCQlyZXN1bHQgPSBpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2RlY3J5cHQocngpOwogCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9DTUFDXzI1NjoKKwkJcmVzdWx0ID0gaWVlZTgwMjExX2NyeXB0b19hZXNfY21hY18yNTZfZGVjcnlwdChyeCk7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0dNQUNfMTI4OgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0dNQUNfMjU2OgorCQlyZXN1bHQgPSBpZWVlODAyMTFfY3J5cHRvX2Flc19nbWFjX2RlY3J5cHQocngpOworCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QXzI1NjoKKwkJcmVzdWx0ID0gaWVlZTgwMjExX2NyeXB0b19nY21wX2RlY3J5cHQocngpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXN1bHQgPSBpZWVlODAyMTFfY3J5cHRvX2h3X2RlY3J5cHQocngpOwogCX0KQEAgLTE3ODYsNyArMTgwNSw5IEBACiAJCS8qIFRoaXMgaXMgdGhlIGZpcnN0IGZyYWdtZW50IG9mIGEgbmV3IGZyYW1lLiAqLwogCQllbnRyeSA9IGllZWU4MDIxMV9yZWFzc2VtYmxlX2FkZChyeC0+c2RhdGEsIGZyYWcsIHNlcSwKIAkJCQkJCSByeC0+c2Vxbm9faWR4LCAmKHJ4LT5za2IpKTsKLQkJaWYgKHJ4LT5rZXkgJiYgcngtPmtleS0+Y29uZi5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUCAmJgorCQlpZiAocngtPmtleSAmJgorCQkgICAgKHJ4LT5rZXktPmNvbmYuY2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVAgfHwKKwkJICAgICByeC0+a2V5LT5jb25mLmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QXzI1NikgJiYKIAkJICAgIGllZWU4MDIxMV9oYXNfcHJvdGVjdGVkKGZjKSkgewogCQkJaW50IHF1ZXVlID0gcngtPnNlY3VyaXR5X2lkeDsKIAkJCS8qIFN0b3JlIENDTVAgUE4gc28gdGhhdCB3ZSBjYW4gdmVyaWZ5IHRoYXQgdGhlIG5leHQKQEAgLTE4MTUsNyArMTgzNiw5IEBACiAJCWludCBpOwogCQl1OCBwbltJRUVFODAyMTFfQ0NNUF9QTl9MRU5dLCAqcnBuOwogCQlpbnQgcXVldWU7Ci0JCWlmICghcngtPmtleSB8fCByeC0+a2V5LT5jb25mLmNpcGhlciAhPSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QKQorCQlpZiAoIXJ4LT5rZXkgfHwKKwkJICAgIChyeC0+a2V5LT5jb25mLmNpcGhlciAhPSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QICYmCisJCSAgICAgcngtPmtleS0+Y29uZi5jaXBoZXIgIT0gV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUF8yNTYpKQogCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAJCW1lbWNweShwbiwgZW50cnktPmxhc3RfcG4sIElFRUU4MDIxMV9DQ01QX1BOX0xFTik7CiAJCWZvciAoaSA9IElFRUU4MDIxMV9DQ01QX1BOX0xFTiAtIDE7IGkgPj0gMDsgaS0tKSB7CkBAIC0yMzE0LDYgKzIzMzcsMTUgQEAKIAlpZiAodW5saWtlbHkoIWllZWU4MDIxMV9pc19kYXRhX3ByZXNlbnQoaGRyLT5mcmFtZV9jb250cm9sKSkpCiAJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CiAKKwlpZiAocngtPnN0YSkgeworCQkvKiBUaGUgc2Vxbm8gaW5kZXggaGFzIHRoZSBzYW1lIHByb3BlcnR5IGFzIG5lZWRlZAorCQkgKiBmb3IgdGhlIHJ4X21zZHUgZmllbGQsIGkuZS4gaXQgaXMgSUVFRTgwMjExX05VTV9USURTCisJCSAqIGZvciBub24tUW9TLWRhdGEgZnJhbWVzLiBIZXJlIHdlIGtub3cgaXQncyBhIGRhdGEKKwkJICogZnJhbWUsIHNvIGNvdW50IE1TRFVzLgorCQkgKi8KKwkJcngtPnN0YS0+cnhfbXNkdVtyeC0+c2Vxbm9faWR4XSsrOworCX0KKwogCS8qCiAJICogU2VuZCB1bmV4cGVjdGVkLTRhZGRyLWZyYW1lIGV2ZW50IHRvIGhvc3RhcGQuIEZvciBvbGRlciB2ZXJzaW9ucywKIAkgKiBhbHNvIGRyb3AgdGhlIGZyYW1lIHRvIGNvb2tlZCBtb25pdG9yIGludGVyZmFjZXMuCkBAIC0yNTk4LDcgKzI2MzAsNyBAQAogCQljYXNlIFdMQU5fSFRfQUNUSU9OX05PVElGWV9DSEFOV0lEVEg6IHsKIAkJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCQkJdTggY2hhbndpZHRoID0gbWdtdC0+dS5hY3Rpb24udS5odF9ub3RpZnlfY3cuY2hhbndpZHRoOwotCQkJZW51bSBpZWVlODAyMTFfc3RhX3J4X2JhbmR3aWR0aCBuZXdfYnc7CisJCQllbnVtIGllZWU4MDIxMV9zdGFfcnhfYmFuZHdpZHRoIG1heF9idywgbmV3X2J3OwogCiAJCQkvKiBJZiBpdCBkb2Vzbid0IHN1cHBvcnQgNDAgTUh6IGl0IGNhbid0IGNoYW5nZSAuLi4gKi8KIAkJCWlmICghKHJ4LT5zdGEtPnN0YS5odF9jYXAuY2FwICYKQEAgLTI2MDYsMTMgKzI2MzgsMTggQEAKIAkJCQlnb3RvIGhhbmRsZWQ7CiAKIAkJCWlmIChjaGFud2lkdGggPT0gSUVFRTgwMjExX0hUX0NIQU5XSURUSF8yME1IWikKLQkJCQluZXdfYncgPSBJRUVFODAyMTFfU1RBX1JYX0JXXzIwOworCQkJCW1heF9idyA9IElFRUU4MDIxMV9TVEFfUlhfQldfMjA7CiAJCQllbHNlCi0JCQkJbmV3X2J3ID0gaWVlZTgwMjExX3N0YV9jdXJfdmh0X2J3KHJ4LT5zdGEpOworCQkJCW1heF9idyA9IGllZWU4MDIxMV9zdGFfY2FwX3J4X2J3KHJ4LT5zdGEpOworCisJCQkvKiBzZXQgY3VyX21heF9iYW5kd2lkdGggYW5kIHJlY2FsYyBzdGEgYncgKi8KKwkJCXJ4LT5zdGEtPmN1cl9tYXhfYmFuZHdpZHRoID0gbWF4X2J3OworCQkJbmV3X2J3ID0gaWVlZTgwMjExX3N0YV9jdXJfdmh0X2J3KHJ4LT5zdGEpOwogCiAJCQlpZiAocngtPnN0YS0+c3RhLmJhbmR3aWR0aCA9PSBuZXdfYncpCiAJCQkJZ290byBoYW5kbGVkOwogCisJCQlyeC0+c3RhLT5zdGEuYmFuZHdpZHRoID0gbmV3X2J3OwogCQkJc2JhbmQgPSByeC0+bG9jYWwtPmh3LndpcGh5LT5iYW5kc1tzdGF0dXMtPmJhbmRdOwogCiAJCQlyYXRlX2NvbnRyb2xfcmF0ZV91cGRhdGUobG9jYWwsIHNiYW5kLCByeC0+c3RhLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NjYW4uYyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKaW5kZXggYWU4NDI2Ny4uMDVmMGQ3MSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uYworKysgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCkBAIC00MTYsNyArNDE2LDcgQEAKIAlpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX3ZpZnMobG9jYWwpOwogCiAJLyogZW5zdXJlIG51bGxmdW5jIGlzIHRyYW5zbWl0dGVkIGJlZm9yZSBsZWF2aW5nIG9wZXJhdGluZyBjaGFubmVsICovCi0JaWVlZTgwMjExX2ZsdXNoX3F1ZXVlcyhsb2NhbCwgTlVMTCk7CisJaWVlZTgwMjExX2ZsdXNoX3F1ZXVlcyhsb2NhbCwgTlVMTCwgZmFsc2UpOwogCiAJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwogCkBAIC00MzIsNyArNDMyLDcgQEAKIHN0YXRpYyBib29sIGllZWU4MDIxMV9jYW5fc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlpZiAobG9jYWwtPnJhZGFyX2RldGVjdF9lbmFibGVkKQorCWlmIChpZWVlODAyMTFfaXNfcmFkYXJfcmVxdWlyZWQobG9jYWwpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoIWxpc3RfZW1wdHkoJmxvY2FsLT5yb2NfbGlzdCkpCkBAIC01MDUsNyArNTA1LDcgQEAKIAogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmxvY2FsLT5tdHgpOwogCi0JaWYgKGxvY2FsLT5zY2FuX3JlcSkKKwlpZiAobG9jYWwtPnNjYW5fcmVxIHx8IGllZWU4MDIxMV9pc19yYWRhcl9yZXF1aXJlZChsb2NhbCkpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlpZiAoIWllZWU4MDIxMV9jYW5fc2Nhbihsb2NhbCwgc2RhdGEpKSB7CkBAIC04MDUsNyArODA1LDcgQEAKIAlpZWVlODAyMTFfb2ZmY2hhbm5lbF9zdG9wX3ZpZnMobG9jYWwpOwogCiAJaWYgKGxvY2FsLT5vcHMtPmZsdXNoKSB7Ci0JCWllZWU4MDIxMV9mbHVzaF9xdWV1ZXMobG9jYWwsIE5VTEwpOworCQlpZWVlODAyMTFfZmx1c2hfcXVldWVzKGxvY2FsLCBOVUxMLCBmYWxzZSk7CiAJCSpuZXh0X2RlbGF5ID0gMDsKIAl9IGVsc2UKIAkJKm5leHRfZGVsYXkgPSBIWiAvIDEwOwpAQCAtODI4LDYgKzgyOCwxMSBAQAogCiAJbXV0ZXhfbG9jaygmbG9jYWwtPm10eCk7CiAKKwlpZiAoIWllZWU4MDIxMV9jYW5fcnVuX3dvcmtlcihsb2NhbCkpIHsKKwkJYWJvcnRlZCA9IHRydWU7CisJCWdvdG8gb3V0X2NvbXBsZXRlOworCX0KKwogCXNkYXRhID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChsb2NhbC0+c2Nhbl9zZGF0YSwKIAkJCQkJICBsb2NrZGVwX2lzX2hlbGQoJmxvY2FsLT5tdHgpKTsKIAlzY2FuX3JlcSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQobG9jYWwtPnNjYW5fcmVxLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jIGIvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jCmluZGV4IGVmZWJhNTYuLjA2ZTZhYzggMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYworKysgYi9uZXQvbWFjODAyMTEvc3BlY3RtZ210LmMKQEAgLTM0LDE5ICszNCwxNSBAQAogCXN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiBuZXdfdmh0X2NoYW5kZWYgPSB7fTsKIAljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3NlY19jaGFuX29mZnNfaWUgKnNlY19jaGFuX29mZnM7CiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV93aWRlX2J3X2NoYW5zd19pZSAqd2lkZV9id19jaGFuc3dfaWU7Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9odF9vcGVyYXRpb24gKmh0X29wZXI7CiAJaW50IHNlY29uZGFyeV9jaGFubmVsX29mZnNldCA9IC0xOwogCiAJc2VjX2NoYW5fb2ZmcyA9IGVsZW1zLT5zZWNfY2hhbl9vZmZzOwogCXdpZGVfYndfY2hhbnN3X2llID0gZWxlbXMtPndpZGVfYndfY2hhbnN3X2llOwotCWh0X29wZXIgPSBlbGVtcy0+aHRfb3BlcmF0aW9uOwogCiAJaWYgKHN0YV9mbGFncyAmIChJRUVFODAyMTFfU1RBX0RJU0FCTEVfSFQgfAogCQkJIElFRUU4MDIxMV9TVEFfRElTQUJMRV80ME1IWikpIHsKIAkJc2VjX2NoYW5fb2ZmcyA9IE5VTEw7CiAJCXdpZGVfYndfY2hhbnN3X2llID0gTlVMTDsKLQkJLyogb25seSB1c2VkIGZvciBiYW5kd2lkdGggaGVyZSAqLwotCQlodF9vcGVyID0gTlVMTDsKIAl9CiAKIAlpZiAoc3RhX2ZsYWdzICYgSUVFRTgwMjExX1NUQV9ESVNBQkxFX1ZIVCkKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKaW5kZXggYTQyZjViMi4uMDBjYThkYyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKQEAgLTExNiw3ICsxMTYsNiBAQAogCQljbGVhcl9zdGFfZmxhZyhzdGEsIFdMQU5fU1RBX1BTX0RFTElWRVIpOwogCiAJCWF0b21pY19kZWMoJnBzLT5udW1fc3RhX3BzKTsKLQkJc3RhX2luZm9fcmVjYWxjX3RpbShzdGEpOwogCX0KIAogCWZvciAoYWMgPSAwOyBhYyA8IElFRUU4MDIxMV9OVU1fQUNTOyBhYysrKSB7CkBAIC02MjUsNyArNjI0LDcgQEAKIAl9CiB9CiAKLXZvaWQgc3RhX2luZm9fcmVjYWxjX3RpbShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKK3N0YXRpYyB2b2lkIF9fc3RhX2luZm9fcmVjYWxjX3RpbShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgYm9vbCBpZ25vcmVfcGVuZGluZykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS0+bG9jYWw7CiAJc3RydWN0IHBzX2RhdGEgKnBzOwpAQCAtNjY3LDYgKzY2Niw5IEBACiAJaWYgKGlnbm9yZV9mb3JfdGltID09IEJJVChJRUVFODAyMTFfTlVNX0FDUykgLSAxKQogCQlpZ25vcmVfZm9yX3RpbSA9IDA7CiAKKwlpZiAoaWdub3JlX3BlbmRpbmcpCisJCWlnbm9yZV9mb3JfdGltID0gQklUKElFRUU4MDIxMV9OVU1fQUNTKSAtIDE7CisKIAlmb3IgKGFjID0gMDsgYWMgPCBJRUVFODAyMTFfTlVNX0FDUzsgYWMrKykgewogCQl1bnNpZ25lZCBsb25nIHRpZHM7CiAKQEAgLTY5NSw3ICs2OTcsNyBAQAogCWVsc2UKIAkJX19ic3NfdGltX2NsZWFyKHBzLT50aW0sIGlkKTsKIAotCWlmIChsb2NhbC0+b3BzLT5zZXRfdGltKSB7CisJaWYgKGxvY2FsLT5vcHMtPnNldF90aW0gJiYgIVdBUk5fT04oc3RhLT5kZWFkKSkgewogCQlsb2NhbC0+dGltX2luX2xvY2tlZF9zZWN0aW9uID0gdHJ1ZTsKIAkJZHJ2X3NldF90aW0obG9jYWwsICZzdGEtPnN0YSwgaW5kaWNhdGVfdGltKTsKIAkJbG9jYWwtPnRpbV9pbl9sb2NrZWRfc2VjdGlvbiA9IGZhbHNlOwpAQCAtNzA1LDYgKzcwNywxMSBAQAogCXNwaW5fdW5sb2NrX2JoKCZsb2NhbC0+dGltX2xvY2spOwogfQogCit2b2lkIHN0YV9pbmZvX3JlY2FsY190aW0oc3RydWN0IHN0YV9pbmZvICpzdGEpCit7CisJX19zdGFfaW5mb19yZWNhbGNfdGltKHN0YSwgZmFsc2UpOworfQorCiBzdGF0aWMgYm9vbCBzdGFfaW5mb19idWZmZXJfZXhwaXJlZChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm87CkBAIC04NzQsNiArODgxLDcgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOworCXN0cnVjdCBzdGF0aW9uX2luZm8gc2luZm8gPSB7fTsKIAlpbnQgcmV0OwogCiAJLyoKQEAgLTg4Nyw2ICs4OTUsOSBAQAogCS8qIG5vdyBrZXlzIGNhbiBubyBsb25nZXIgYmUgcmVhY2hlZCAqLwogCWllZWU4MDIxMV9mcmVlX3N0YV9rZXlzKGxvY2FsLCBzdGEpOwogCisJLyogZGlzYWJsZSBUSU0gYml0IC0gbGFzdCBjaGFuY2UgdG8gdGVsbCBkcml2ZXIgKi8KKwlfX3N0YV9pbmZvX3JlY2FsY190aW0oc3RhLCB0cnVlKTsKKwogCXN0YS0+ZGVhZCA9IHRydWU7CiAKIAlsb2NhbC0+bnVtX3N0YS0tOwpAQCAtOTA4LDcgKzkxOSw4IEBACiAKIAlzdGFfZGJnKHNkYXRhLCAiUmVtb3ZlZCBTVEEgJXBNXG4iLCBzdGEtPnN0YS5hZGRyKTsKIAotCWNmZzgwMjExX2RlbF9zdGEoc2RhdGEtPmRldiwgc3RhLT5zdGEuYWRkciwgR0ZQX0tFUk5FTCk7CisJc3RhX3NldF9zaW5mbyhzdGEsICZzaW5mbyk7CisJY2ZnODAyMTFfZGVsX3N0YV9zaW5mbyhzZGF0YS0+ZGV2LCBzdGEtPnN0YS5hZGRyLCAmc2luZm8sIEdGUF9LRVJORUwpOwogCiAJcmF0ZV9jb250cm9sX3JlbW92ZV9zdGFfZGVidWdmcyhzdGEpOwogCWllZWU4MDIxMV9zdGFfZGVidWdmc19yZW1vdmUoc3RhKTsKQEAgLTEyNDMsMTAgKzEyNTUsMTEgQEAKIAkgKiBlbmRzIHRoZSBwb2xsL3NlcnZpY2UgcGVyaW9kLgogCSAqLwogCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfTk9fUFNfQlVGRkVSIHwKLQkJICAgICAgIElFRUU4MDIxMV9UWF9DVExfUFNfUkVTUE9OU0UgfAogCQkgICAgICAgSUVFRTgwMjExX1RYX1NUQVRVU19FT1NQIHwKIAkJICAgICAgIElFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUzsKIAorCWluZm8tPmNvbnRyb2wuZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUUkxfUFNfUkVTUE9OU0U7CisKIAlpZiAoY2FsbF9kcml2ZXIpCiAJCWRydl9hbGxvd19idWZmZXJlZF9mcmFtZXMobG9jYWwsIHN0YSwgQklUKHRpZCksIDEsCiAJCQkJCSAgcmVhc29uLCBmYWxzZSk7CkBAIC0xMzk1LDggKzE0MDgsOCBAQAogCQkJICogU1RBIG1heSBzdGlsbCByZW1haW4gaXMgUFMgbW9kZSBhZnRlciB0aGlzIGZyYW1lCiAJCQkgKiBleGNoYW5nZS4KIAkJCSAqLwotCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9OT19QU19CVUZGRVIgfAotCQkJCSAgICAgICBJRUVFODAyMTFfVFhfQ1RMX1BTX1JFU1BPTlNFOworCQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9OT19QU19CVUZGRVI7CisJCQlpbmZvLT5jb250cm9sLmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVFJMX1BTX1JFU1BPTlNFOwogCiAJCQkvKgogCQkJICogVXNlIE1vcmVEYXRhIGZsYWcgdG8gaW5kaWNhdGUgd2hldGhlciB0aGVyZSBhcmUKQEAgLTE3NDMsNyArMTc1Niw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJlZiA9IE5VTEw7CiAJc3RydWN0IHRpbWVzcGVjIHVwdGltZTsKLQl1NjQgcGFja2V0cyA9IDA7CiAJdTMyIHRociA9IDA7CiAJaW50IGksIGFjOwogCkBAIC0xNzUyLDQ5ICsxNzY0LDkwIEBACiAKIAlzaW5mby0+Z2VuZXJhdGlvbiA9IHNkYXRhLT5sb2NhbC0+c3RhX2dlbmVyYXRpb247CiAKLQlzaW5mby0+ZmlsbGVkID0gU1RBVElPTl9JTkZPX0lOQUNUSVZFX1RJTUUgfAotCQkJU1RBVElPTl9JTkZPX1JYX0JZVEVTNjQgfAotCQkJU1RBVElPTl9JTkZPX1RYX0JZVEVTNjQgfAotCQkJU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFMgfAotCQkJU1RBVElPTl9JTkZPX1RYX1BBQ0tFVFMgfAotCQkJU1RBVElPTl9JTkZPX1RYX1JFVFJJRVMgfAotCQkJU1RBVElPTl9JTkZPX1RYX0ZBSUxFRCB8Ci0JCQlTVEFUSU9OX0lORk9fVFhfQklUUkFURSB8Ci0JCQlTVEFUSU9OX0lORk9fUlhfQklUUkFURSB8Ci0JCQlTVEFUSU9OX0lORk9fUlhfRFJPUF9NSVNDIHwKLQkJCVNUQVRJT05fSU5GT19CU1NfUEFSQU0gfAotCQkJU1RBVElPTl9JTkZPX0NPTk5FQ1RFRF9USU1FIHwKLQkJCVNUQVRJT05fSU5GT19TVEFfRkxBR1MgfAotCQkJU1RBVElPTl9JTkZPX0JFQUNPTl9MT1NTX0NPVU5UOworCS8qIGRvIGJlZm9yZSBkcml2ZXIsIHNvIGJlYWNvbiBmaWx0ZXJpbmcgZHJpdmVycyBoYXZlIGEKKwkgKiBjaGFuY2UgdG8gZS5nLiBqdXN0IGFkZCB0aGUgbnVtYmVyIG9mIGZpbHRlcmVkIGJlYWNvbnMKKwkgKiAob3IganVzdCBtb2RpZnkgdGhlIHZhbHVlIGVudGlyZWx5LCBvZiBjb3Vyc2UpCisJICovCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQlzaW5mby0+cnhfYmVhY29uID0gc2RhdGEtPnUubWdkLmNvdW50X2JlYWNvbl9zaWduYWw7CisKKwlkcnZfc3RhX3N0YXRpc3RpY3MobG9jYWwsIHNkYXRhLCAmc3RhLT5zdGEsIHNpbmZvKTsKKworCXNpbmZvLT5maWxsZWQgfD0gQklUKE5MODAyMTFfU1RBX0lORk9fSU5BQ1RJVkVfVElNRSkgfAorCQkJIEJJVChOTDgwMjExX1NUQV9JTkZPX1NUQV9GTEFHUykgfAorCQkJIEJJVChOTDgwMjExX1NUQV9JTkZPX0JTU19QQVJBTSkgfAorCQkJIEJJVChOTDgwMjExX1NUQV9JTkZPX0NPTk5FQ1RFRF9USU1FKSB8CisJCQkgQklUKE5MODAyMTFfU1RBX0lORk9fUlhfRFJPUF9NSVNDKSB8CisJCQkgQklUKE5MODAyMTFfU1RBX0lORk9fQkVBQ09OX0xPU1MpOwogCiAJa3RpbWVfZ2V0X3RzKCZ1cHRpbWUpOwogCXNpbmZvLT5jb25uZWN0ZWRfdGltZSA9IHVwdGltZS50dl9zZWMgLSBzdGEtPmxhc3RfY29ubmVjdGVkOwotCiAJc2luZm8tPmluYWN0aXZlX3RpbWUgPSBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBzdGEtPmxhc3RfcngpOwotCXNpbmZvLT50eF9ieXRlcyA9IDA7Ci0JZm9yIChhYyA9IDA7IGFjIDwgSUVFRTgwMjExX05VTV9BQ1M7IGFjKyspIHsKLQkJc2luZm8tPnR4X2J5dGVzICs9IHN0YS0+dHhfYnl0ZXNbYWNdOwotCQlwYWNrZXRzICs9IHN0YS0+dHhfcGFja2V0c1thY107CisKKwlpZiAoIShzaW5mby0+ZmlsbGVkICYgKEJJVChOTDgwMjExX1NUQV9JTkZPX1RYX0JZVEVTNjQpIHwKKwkJCSAgICAgICBCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9CWVRFUykpKSkgeworCQlzaW5mby0+dHhfYnl0ZXMgPSAwOworCQlmb3IgKGFjID0gMDsgYWMgPCBJRUVFODAyMTFfTlVNX0FDUzsgYWMrKykKKwkJCXNpbmZvLT50eF9ieXRlcyArPSBzdGEtPnR4X2J5dGVzW2FjXTsKKwkJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9CWVRFUzY0KTsKIAl9Ci0Jc2luZm8tPnR4X3BhY2tldHMgPSBwYWNrZXRzOwotCXNpbmZvLT5yeF9ieXRlcyA9IHN0YS0+cnhfYnl0ZXM7Ci0Jc2luZm8tPnJ4X3BhY2tldHMgPSBzdGEtPnJ4X3BhY2tldHM7Ci0Jc2luZm8tPnR4X3JldHJpZXMgPSBzdGEtPnR4X3JldHJ5X2NvdW50OwotCXNpbmZvLT50eF9mYWlsZWQgPSBzdGEtPnR4X3JldHJ5X2ZhaWxlZDsKKworCWlmICghKHNpbmZvLT5maWxsZWQgJiBCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9QQUNLRVRTKSkpIHsKKwkJc2luZm8tPnR4X3BhY2tldHMgPSAwOworCQlmb3IgKGFjID0gMDsgYWMgPCBJRUVFODAyMTFfTlVNX0FDUzsgYWMrKykKKwkJCXNpbmZvLT50eF9wYWNrZXRzICs9IHN0YS0+dHhfcGFja2V0c1thY107CisJCXNpbmZvLT5maWxsZWQgfD0gQklUKE5MODAyMTFfU1RBX0lORk9fVFhfUEFDS0VUUyk7CisJfQorCisJaWYgKCEoc2luZm8tPmZpbGxlZCAmIChCSVQoTkw4MDIxMV9TVEFfSU5GT19SWF9CWVRFUzY0KSB8CisJCQkgICAgICAgQklUKE5MODAyMTFfU1RBX0lORk9fUlhfQllURVMpKSkpIHsKKwkJc2luZm8tPnJ4X2J5dGVzID0gc3RhLT5yeF9ieXRlczsKKwkJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19SWF9CWVRFUzY0KTsKKwl9CisKKwlpZiAoIShzaW5mby0+ZmlsbGVkICYgQklUKE5MODAyMTFfU1RBX0lORk9fUlhfUEFDS0VUUykpKSB7CisJCXNpbmZvLT5yeF9wYWNrZXRzID0gc3RhLT5yeF9wYWNrZXRzOworCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX1JYX1BBQ0tFVFMpOworCX0KKworCWlmICghKHNpbmZvLT5maWxsZWQgJiBCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9SRVRSSUVTKSkpIHsKKwkJc2luZm8tPnR4X3JldHJpZXMgPSBzdGEtPnR4X3JldHJ5X2NvdW50OworCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX1RYX1JFVFJJRVMpOworCX0KKworCWlmICghKHNpbmZvLT5maWxsZWQgJiBCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9GQUlMRUQpKSkgeworCQlzaW5mby0+dHhfZmFpbGVkID0gc3RhLT50eF9yZXRyeV9mYWlsZWQ7CisJCXNpbmZvLT5maWxsZWQgfD0gQklUKE5MODAyMTFfU1RBX0lORk9fVFhfRkFJTEVEKTsKKwl9CisKIAlzaW5mby0+cnhfZHJvcHBlZF9taXNjID0gc3RhLT5yeF9kcm9wcGVkOwogCXNpbmZvLT5iZWFjb25fbG9zc19jb3VudCA9IHN0YS0+YmVhY29uX2xvc3NfY291bnQ7CiAKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgIShzZGF0YS0+dmlmLmRyaXZlcl9mbGFncyAmIElFRUU4MDIxMV9WSUZfQkVBQ09OX0ZJTFRFUikpIHsKKwkJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19CRUFDT05fUlgpIHwKKwkJCQkgQklUKE5MODAyMTFfU1RBX0lORk9fQkVBQ09OX1NJR05BTF9BVkcpOworCQlzaW5mby0+cnhfYmVhY29uX3NpZ25hbF9hdmcgPSBpZWVlODAyMTFfYXZlX3Jzc2koJnNkYXRhLT52aWYpOworCX0KKwogCWlmICgoc3RhLT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSkgfHwKIAkgICAgKHN0YS0+bG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NJR05BTF9VTlNQRUMpKSB7Ci0JCXNpbmZvLT5maWxsZWQgfD0gU1RBVElPTl9JTkZPX1NJR05BTCB8IFNUQVRJT05fSU5GT19TSUdOQUxfQVZHOwotCQlpZiAoIWxvY2FsLT5vcHMtPmdldF9yc3NpIHx8Ci0JCSAgICBkcnZfZ2V0X3Jzc2kobG9jYWwsIHNkYXRhLCAmc3RhLT5zdGEsICZzaW5mby0+c2lnbmFsKSkKKwkJaWYgKCEoc2luZm8tPmZpbGxlZCAmIEJJVChOTDgwMjExX1NUQV9JTkZPX1NJR05BTCkpKSB7CiAJCQlzaW5mby0+c2lnbmFsID0gKHM4KXN0YS0+bGFzdF9zaWduYWw7Ci0JCXNpbmZvLT5zaWduYWxfYXZnID0gKHM4KSAtZXdtYV9yZWFkKCZzdGEtPmF2Z19zaWduYWwpOworCQkJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19TSUdOQUwpOworCQl9CisKKwkJaWYgKCEoc2luZm8tPmZpbGxlZCAmIEJJVChOTDgwMjExX1NUQV9JTkZPX1NJR05BTF9BVkcpKSkgeworCQkJc2luZm8tPnNpZ25hbF9hdmcgPSAoczgpIC1ld21hX3JlYWQoJnN0YS0+YXZnX3NpZ25hbCk7CisJCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX1NJR05BTF9BVkcpOworCQl9CiAJfQotCWlmIChzdGEtPmNoYWlucykgewotCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19DSEFJTl9TSUdOQUwgfAotCQkJCSBTVEFUSU9OX0lORk9fQ0hBSU5fU0lHTkFMX0FWRzsKKworCWlmIChzdGEtPmNoYWlucyAmJgorCSAgICAhKHNpbmZvLT5maWxsZWQgJiAoQklUKE5MODAyMTFfU1RBX0lORk9fQ0hBSU5fU0lHTkFMKSB8CisJCQkgICAgICAgQklUKE5MODAyMTFfU1RBX0lORk9fQ0hBSU5fU0lHTkFMX0FWRykpKSkgeworCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX0NIQUlOX1NJR05BTCkgfAorCQkJCSBCSVQoTkw4MDIxMV9TVEFfSU5GT19DSEFJTl9TSUdOQUxfQVZHKTsKIAogCQlzaW5mby0+Y2hhaW5zID0gc3RhLT5jaGFpbnM7CiAJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNpbmZvLT5jaGFpbl9zaWduYWwpOyBpKyspIHsKQEAgLTE4MDQsMjMgKzE4NTcsNjEgQEAKIAkJfQogCX0KIAotCXN0YV9zZXRfcmF0ZV9pbmZvX3R4KHN0YSwgJnN0YS0+bGFzdF90eF9yYXRlLCAmc2luZm8tPnR4cmF0ZSk7Ci0Jc3RhX3NldF9yYXRlX2luZm9fcngoc3RhLCAmc2luZm8tPnJ4cmF0ZSk7CisJaWYgKCEoc2luZm8tPmZpbGxlZCAmIEJJVChOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUpKSkgeworCQlzdGFfc2V0X3JhdGVfaW5mb190eChzdGEsICZzdGEtPmxhc3RfdHhfcmF0ZSwgJnNpbmZvLT50eHJhdGUpOworCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX1RYX0JJVFJBVEUpOworCX0KKworCWlmICghKHNpbmZvLT5maWxsZWQgJiBCSVQoTkw4MDIxMV9TVEFfSU5GT19SWF9CSVRSQVRFKSkpIHsKKwkJc3RhX3NldF9yYXRlX2luZm9fcngoc3RhLCAmc2luZm8tPnJ4cmF0ZSk7CisJCXNpbmZvLT5maWxsZWQgfD0gQklUKE5MODAyMTFfU1RBX0lORk9fUlhfQklUUkFURSk7CisJfQorCisJc2luZm8tPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9TVEFfSU5GT19USURfU1RBVFMpOworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX1RJRFMgKyAxOyBpKyspIHsKKwkJc3RydWN0IGNmZzgwMjExX3RpZF9zdGF0cyAqdGlkc3RhdHMgPSAmc2luZm8tPnBlcnRpZFtpXTsKKworCQlpZiAoISh0aWRzdGF0cy0+ZmlsbGVkICYgQklUKE5MODAyMTFfVElEX1NUQVRTX1JYX01TRFUpKSkgeworCQkJdGlkc3RhdHMtPmZpbGxlZCB8PSBCSVQoTkw4MDIxMV9USURfU1RBVFNfUlhfTVNEVSk7CisJCQl0aWRzdGF0cy0+cnhfbXNkdSA9IHN0YS0+cnhfbXNkdVtpXTsKKwkJfQorCisJCWlmICghKHRpZHN0YXRzLT5maWxsZWQgJiBCSVQoTkw4MDIxMV9USURfU1RBVFNfVFhfTVNEVSkpKSB7CisJCQl0aWRzdGF0cy0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1RJRF9TVEFUU19UWF9NU0RVKTsKKwkJCXRpZHN0YXRzLT50eF9tc2R1ID0gc3RhLT50eF9tc2R1W2ldOworCQl9CisKKwkJaWYgKCEodGlkc3RhdHMtPmZpbGxlZCAmCisJCQkJQklUKE5MODAyMTFfVElEX1NUQVRTX1RYX01TRFVfUkVUUklFUykpICYmCisJCSAgICBsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUkVQT1JUU19UWF9BQ0tfU1RBVFVTKSB7CisJCQl0aWRzdGF0cy0+ZmlsbGVkIHw9CisJCQkJQklUKE5MODAyMTFfVElEX1NUQVRTX1RYX01TRFVfUkVUUklFUyk7CisJCQl0aWRzdGF0cy0+dHhfbXNkdV9yZXRyaWVzID0gc3RhLT50eF9tc2R1X3JldHJpZXNbaV07CisJCX0KKworCQlpZiAoISh0aWRzdGF0cy0+ZmlsbGVkICYKKwkJCQlCSVQoTkw4MDIxMV9USURfU1RBVFNfVFhfTVNEVV9GQUlMRUQpKSAmJgorCQkgICAgbG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1JFUE9SVFNfVFhfQUNLX1NUQVRVUykgeworCQkJdGlkc3RhdHMtPmZpbGxlZCB8PQorCQkJCUJJVChOTDgwMjExX1RJRF9TVEFUU19UWF9NU0RVX0ZBSUxFRCk7CisJCQl0aWRzdGF0cy0+dHhfbXNkdV9mYWlsZWQgPSBzdGEtPnR4X21zZHVfZmFpbGVkW2ldOworCQl9CisJfQogCiAJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAotCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19MTElEIHwKLQkJCQkgU1RBVElPTl9JTkZPX1BMSUQgfAotCQkJCSBTVEFUSU9OX0lORk9fUExJTktfU1RBVEUgfAotCQkJCSBTVEFUSU9OX0lORk9fTE9DQUxfUE0gfAotCQkJCSBTVEFUSU9OX0lORk9fUEVFUl9QTSB8Ci0JCQkJIFNUQVRJT05fSU5GT19OT05QRUVSX1BNOworCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX0xMSUQpIHwKKwkJCQkgQklUKE5MODAyMTFfU1RBX0lORk9fUExJRCkgfAorCQkJCSBCSVQoTkw4MDIxMV9TVEFfSU5GT19QTElOS19TVEFURSkgfAorCQkJCSBCSVQoTkw4MDIxMV9TVEFfSU5GT19MT0NBTF9QTSkgfAorCQkJCSBCSVQoTkw4MDIxMV9TVEFfSU5GT19QRUVSX1BNKSB8CisJCQkJIEJJVChOTDgwMjExX1NUQV9JTkZPX05PTlBFRVJfUE0pOwogCiAJCXNpbmZvLT5sbGlkID0gc3RhLT5sbGlkOwogCQlzaW5mby0+cGxpZCA9IHN0YS0+cGxpZDsKIAkJc2luZm8tPnBsaW5rX3N0YXRlID0gc3RhLT5wbGlua19zdGF0ZTsKIAkJaWYgKHRlc3Rfc3RhX2ZsYWcoc3RhLCBXTEFOX1NUQV9UT0ZGU0VUX0tOT1dOKSkgewotCQkJc2luZm8tPmZpbGxlZCB8PSBTVEFUSU9OX0lORk9fVF9PRkZTRVQ7CisJCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX1RfT0ZGU0VUKTsKIAkJCXNpbmZvLT50X29mZnNldCA9IHN0YS0+dF9vZmZzZXQ7CiAJCX0KIAkJc2luZm8tPmxvY2FsX3BtID0gc3RhLT5sb2NhbF9wbTsKQEAgLTE4NjksNyArMTk2MCw3IEBACiAJCXRociA9IGRydl9nZXRfZXhwZWN0ZWRfdGhyb3VnaHB1dChsb2NhbCwgJnN0YS0+c3RhKTsKIAogCWlmICh0aHIgIT0gMCkgewotCQlzaW5mby0+ZmlsbGVkIHw9IFNUQVRJT05fSU5GT19FWFBFQ1RFRF9USFJPVUdIUFVUOworCQlzaW5mby0+ZmlsbGVkIHw9IEJJVChOTDgwMjExX1NUQV9JTkZPX0VYUEVDVEVEX1RIUk9VR0hQVVQpOwogCQlzaW5mby0+ZXhwZWN0ZWRfdGhyb3VnaHB1dCA9IHRocjsKIAl9CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaCBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCmluZGV4IDRmMDUyYmIuLjkyNWU2OGYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCisrKyBiL25ldC9tYWM4MDIxMS9zdGFfaW5mby5oCkBAIC0zNDYsNiArMzQ2LDE0IEBACiAgKiBAY2lwaGVyX3NjaGVtZTogb3B0aW9uYWwgY2lwaGVyIHNjaGVtZSBmb3IgdGhpcyBzdGF0aW9uCiAgKiBAbGFzdF90ZGxzX3BrdF90aW1lOiBob2xkcyB0aGUgdGltZSBpbiBqaWZmaWVzIG9mIGxhc3QgVERMUyBwa3QgQUNLZWQKICAqIEByZXNlcnZlZF90aWQ6IHJlc2VydmVkIFRJRCAoaWYgYW55LCBvdGhlcndpc2UgSUVFRTgwMjExX1RJRF9VTlJFU0VSVkVEKQorICogQHR4X21zZHU6IE1TRFVzIHRyYW5zbWl0dGVkIHRvIHRoaXMgc3RhdGlvbiwgdXNpbmcgSUVFRTgwMjExX05VTV9USUQKKyAqCWVudHJ5IGZvciBub24tUW9TIGZyYW1lcworICogQHR4X21zZHVfcmV0cmllczogTVNEVSByZXRyaWVzIGZvciB0cmFuc21pc3Npb25zIHRvIHRvIHRoaXMgc3RhdGlvbiwKKyAqCXVzaW5nIElFRUU4MDIxMV9OVU1fVElEIGVudHJ5IGZvciBub24tUW9TIGZyYW1lcworICogQHR4X21zZHVfZmFpbGVkOiBNU0RVIGZhaWx1cmVzIGZvciB0cmFuc21pc3Npb25zIHRvIHRvIHRoaXMgc3RhdGlvbiwKKyAqCXVzaW5nIElFRUU4MDIxMV9OVU1fVElEIGVudHJ5IGZvciBub24tUW9TIGZyYW1lcworICogQHJ4X21zZHU6IE1TRFVzIHJlY2VpdmVkIGZyb20gdGhpcyBzdGF0aW9uLCB1c2luZyBJRUVFODAyMTFfTlVNX1RJRAorICoJZW50cnkgZm9yIG5vbi1Rb1MgZnJhbWVzCiAgKi8KIHN0cnVjdCBzdGFfaW5mbyB7CiAJLyogR2VuZXJhbCBpbmZvcm1hdGlvbiwgbW9zdGx5IHN0YXRpYyAqLwpAQCAtNDE2LDYgKzQyNCwxMCBAQAogCXUzMiBsYXN0X3J4X3JhdGVfdmh0X2ZsYWc7CiAJdTggbGFzdF9yeF9yYXRlX3ZodF9uc3M7CiAJdTE2IHRpZF9zZXFbSUVFRTgwMjExX1FPU19DVExfVElEX01BU0sgKyAxXTsKKwl1NjQgdHhfbXNkdVtJRUVFODAyMTFfTlVNX1RJRFMgKyAxXTsKKwl1NjQgdHhfbXNkdV9yZXRyaWVzW0lFRUU4MDIxMV9OVU1fVElEUyArIDFdOworCXU2NCB0eF9tc2R1X2ZhaWxlZFtJRUVFODAyMTFfTlVNX1RJRFMgKyAxXTsKKwl1NjQgcnhfbXNkdVtJRUVFODAyMTFfTlVNX1RJRFMgKyAxXTsKIAogCS8qCiAJICogQWdncmVnYXRpb24gaW5mb3JtYXRpb24sIGxvY2tlZCB3aXRoIGxvY2suCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhdHVzLmMgYi9uZXQvbWFjODAyMTEvc3RhdHVzLmMKaW5kZXggYmIxNDZmMy4uZTY3OWI3YyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YXR1cy5jCisrKyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuYwpAQCAtNjY0LDEzICs2NjQsMTUgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlpbnQgcmV0cnlfY291bnQ7CiAJaW50IHJhdGVzX2lkeDsKLQlib29sIGFja2VkOworCWJvb2wgYWNrZWQsIG5vYWNrX3N1Y2Nlc3M7CiAKIAlyYXRlc19pZHggPSBpZWVlODAyMTFfdHhfZ2V0X3JhdGVzKGh3LCBpbmZvLCAmcmV0cnlfY291bnQpOwogCiAJc2JhbmQgPSBody0+d2lwaHktPmJhbmRzW2luZm8tPmJhbmRdOwogCiAJYWNrZWQgPSAhIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FDSyk7CisJbm9hY2tfc3VjY2VzcyA9ICEhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfTk9BQ0tfVFJBTlNNSVRURUQpOworCiAJaWYgKHB1YnN0YSkgewogCQlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIApAQCAtNjk2LDcgKzY5OCw3IEBACiAJCXJhdGVfY29udHJvbF90eF9zdGF0dXNfbm9za2IobG9jYWwsIHNiYW5kLCBzdGEsIGluZm8pOwogCX0KIAotCWlmIChhY2tlZCkgeworCWlmIChhY2tlZCB8fCBub2Fja19zdWNjZXNzKSB7CiAJCSAgICBsb2NhbC0+ZG90MTFUcmFuc21pdHRlZEZyYW1lQ291bnQrKzsKIAkJICAgIGlmICghcHVic3RhKQogCQkJICAgIGxvY2FsLT5kb3QxMU11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudCsrOwpAQCAtNzI4LDYgKzczMCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9iYXIgKmJhcjsKIAlpbnQgcnRhcF9sZW47CiAJaW50IHNoaWZ0ID0gMDsKKwlpbnQgdGlkID0gSUVFRTgwMjExX05VTV9USURTOwogCiAJcmF0ZXNfaWR4ID0gaWVlZTgwMjExX3R4X2dldF9yYXRlcyhodywgaW5mbywgJnJldHJ5X2NvdW50KTsKIApAQCAtNzcxLDcgKzc3NCw3IEBACiAKIAkJaWYgKChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FNUERVX05PX0JBQ0spICYmCiAJCSAgICAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkpIHsKLQkJCXUxNiB0aWQsIHNzbjsKKwkJCXUxNiBzc247CiAJCQl1OCAqcWM7CiAKIAkJCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CkBAIC03ODAsMTAgKzc4MywxNCBAQAogCQkJCQkJJiBJRUVFODAyMTFfU0NUTF9TRVEpOwogCQkJaWVlZTgwMjExX3NlbmRfYmFyKCZzdGEtPnNkYXRhLT52aWYsIGhkci0+YWRkcjEsCiAJCQkJCSAgIHRpZCwgc3NuKTsKKwkJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoZmMpKSB7CisJCQl1OCAqcWMgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKKworCQkJdGlkID0gcWNbMF0gJiAweGY7CiAJCX0KIAogCQlpZiAoIWFja2VkICYmIGllZWU4MDIxMV9pc19iYWNrX3JlcShmYykpIHsKLQkJCXUxNiB0aWQsIGNvbnRyb2w7CisJCQl1MTYgY29udHJvbDsKIAogCQkJLyoKIAkJCSAqIEJBUiBmYWlsZWQsIHN0b3JlIHRoZSBsYXN0IFNTTiBhbmQgcmV0cnkgc2VuZGluZwpAQCAtODExLDYgKzgxOCwxMiBAQAogCQkJaWYgKCFhY2tlZCkKIAkJCQlzdGEtPnR4X3JldHJ5X2ZhaWxlZCsrOwogCQkJc3RhLT50eF9yZXRyeV9jb3VudCArPSByZXRyeV9jb3VudDsKKworCQkJaWYgKGllZWU4MDIxMV9pc19kYXRhX3ByZXNlbnQoZmMpKSB7CisJCQkJaWYgKCFhY2tlZCkKKwkJCQkJc3RhLT50eF9tc2R1X2ZhaWxlZFt0aWRdKys7CisJCQkJc3RhLT50eF9tc2R1X3JldHJpZXNbdGlkXSArPSByZXRyeV9jb3VudDsKKwkJCX0KIAkJfQogCiAJCXJhdGVfY29udHJvbF90eF9zdGF0dXMobG9jYWwsIHNiYW5kLCBzdGEsIHNrYik7CkBAIC04NTYsMTAgKzg2OSwxMSBAQAogCSAqIEZyYWdtZW50cyBhcmUgcGFzc2VkIHRvIGxvdy1sZXZlbCBkcml2ZXJzIGFzIHNlcGFyYXRlIHNrYnMsIHNvIHRoZXNlCiAJICogYXJlIGFjdHVhbGx5IGZyYWdtZW50cywgbm90IGZyYW1lcy4gVXBkYXRlIGZyYW1lIGNvdW50ZXJzIG9ubHkgZm9yCiAJICogdGhlIGZpcnN0IGZyYWdtZW50IG9mIHRoZSBmcmFtZS4gKi8KLQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9BQ0spIHsKKwlpZiAoKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSB8fAorCSAgICAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfU1RBVF9OT0FDS19UUkFOU01JVFRFRCkpIHsKIAkJaWYgKGllZWU4MDIxMV9pc19maXJzdF9mcmFnKGhkci0+c2VxX2N0cmwpKSB7CiAJCQlsb2NhbC0+ZG90MTFUcmFuc21pdHRlZEZyYW1lQ291bnQrKzsKLQkJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkKKwkJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihpZWVlODAyMTFfZ2V0X0RBKGhkcikpKQogCQkJCWxvY2FsLT5kb3QxMU11bHRpY2FzdFRyYW5zbWl0dGVkRnJhbWVDb3VudCsrOwogCQkJaWYgKHJldHJ5X2NvdW50ID4gMCkKIAkJCQlsb2NhbC0+ZG90MTFSZXRyeUNvdW50Kys7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdGRscy5jIGIvbmV0L21hYzgwMjExL3RkbHMuYwppbmRleCA1NWRkZDc3Li5jOWY5NzUyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdGRscy5jCisrKyBiL25ldC9tYWM4MDIxMS90ZGxzLmMKQEAgLTY4LDE3ICs2OCwyNCBAQAogCQljaCA9IGllZWU4MDIxMV9nZXRfY2hhbm5lbChzZGF0YS0+bG9jYWwtPmh3LndpcGh5LCBpKTsKIAkJaWYgKGNoKSB7CiAJCQkvKiB3ZSB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgY2hhbm5lbCAqLwotCQkJdTMyIGZsYWdzID0gSUVFRTgwMjExX0NIQU5fRElTQUJMRUQgfAotCQkJCSAgICBJRUVFODAyMTFfQ0hBTl9OT19JUjsKIAkJCWNmZzgwMjExX2NoYW5kZWZfY3JlYXRlKCZjaGFuZGVmLCBjaCwKLQkJCQkJCU5MODAyMTFfQ0hBTl9IVDIwKTsKLQkJCWlmIChjZmc4MDIxMV9jaGFuZGVmX3VzYWJsZShzZGF0YS0+bG9jYWwtPmh3LndpcGh5LAotCQkJCQkJICAgICZjaGFuZGVmLCBmbGFncykpIHsKKwkJCQkJCU5MODAyMTFfQ0hBTl9OT19IVCk7CisJCQlpZiAoY2ZnODAyMTFfcmVnX2Nhbl9iZWFjb24oc2RhdGEtPmxvY2FsLT5ody53aXBoeSwKKwkJCQkJCSAgICAmY2hhbmRlZiwKKwkJCQkJCSAgICBzZGF0YS0+d2Rldi5pZnR5cGUpKSB7CiAJCQkJY2hfY250Kys7CisJCQkJLyoKKwkJCQkgKiBjaGVjayBpZiB0aGUgbmV4dCBjaGFubmVsIGlzIGFsc28gcGFydCBvZgorCQkJCSAqIHRoaXMgYWxsb3dlZCByYW5nZQorCQkJCSAqLwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQl9CiAKKwkJLyoKKwkJICogd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIGEgcmFuZ2UsIHdpdGggYWxsb3dlZCBjaGFubmVscworCQkgKiBmb3VuZAorCQkgKi8KIAkJaWYgKGNoX2NudCkgewogCQkJdTggKnBvcyA9IHNrYl9wdXQoc2tiLCAyKTsKIAkJCSpwb3MrKyA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChzdWJiYW5kX3N0YXJ0KTsKQEAgLTg5LDYgKzk2LDE1IEBACiAJCX0KIAl9CiAKKwkvKiBhbGwgY2hhbm5lbHMgaW4gdGhlIHJlcXVlc3RlZCByYW5nZSBhcmUgYWxsb3dlZCAtIGFkZCB0aGVtIGhlcmUgKi8KKwlpZiAoY2hfY250KSB7CisJCXU4ICpwb3MgPSBza2JfcHV0KHNrYiwgMik7CisJCSpwb3MrKyA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChzdWJiYW5kX3N0YXJ0KTsKKwkJKnBvcysrID0gY2hfY250OworCisJCXN1YmJhbmRfY250Kys7CisJfQorCiAJcmV0dXJuIHN1YmJhbmRfY250OwogfQogCkBAIC0zMjksMjQgKzM0NSwyNCBAQAogCSAqLwogCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKIAltZW1jcHkoJmh0X2NhcCwgJnNiYW5kLT5odF9jYXAsIHNpemVvZihodF9jYXApKTsKLQlpZiAoKGFjdGlvbl9jb2RlID09IFdMQU5fVERMU19TRVRVUF9SRVFVRVNUIHx8Ci0JICAgICBhY3Rpb25fY29kZSA9PSBXTEFOX1RETFNfU0VUVVBfUkVTUE9OU0UpICYmCi0JICAgIGh0X2NhcC5odF9zdXBwb3J0ZWQgJiYgKCFzdGEgfHwgc3RhLT5zdGEuaHRfY2FwLmh0X3N1cHBvcnRlZCkpIHsKLQkJaWYgKGFjdGlvbl9jb2RlID09IFdMQU5fVERMU19TRVRVUF9SRVFVRVNUKSB7Ci0JCQlpZWVlODAyMTFfYXBwbHlfaHRjYXBfb3ZlcnJpZGVzKHNkYXRhLCAmaHRfY2FwKTsKIAotCQkJLyogZGlzYWJsZSBTTVBTIGluIFRETFMgaW5pdGlhdG9yICovCi0JCQlodF9jYXAuY2FwIHw9IChXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRAotCQkJCSAgICAgICA8PCBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTX1NISUZUKTsKLQkJfSBlbHNlIHsKLQkJCS8qIGRpc2FibGUgU01QUyBpbiBURExTIHJlc3BvbmRlciAqLwotCQkJc3RhLT5zdGEuaHRfY2FwLmNhcCB8PQotCQkJCShXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRAotCQkJCSA8PCBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTX1NISUZUKTsKKwlpZiAoYWN0aW9uX2NvZGUgPT0gV0xBTl9URExTX1NFVFVQX1JFUVVFU1QgJiYgaHRfY2FwLmh0X3N1cHBvcnRlZCkgeworCQlpZWVlODAyMTFfYXBwbHlfaHRjYXBfb3ZlcnJpZGVzKHNkYXRhLCAmaHRfY2FwKTsKIAotCQkJLyogdGhlIHBlZXIgY2FwcyBhcmUgYWxyZWFkeSBpbnRlcnNlY3RlZCB3aXRoIG91ciBvd24gKi8KLQkJCW1lbWNweSgmaHRfY2FwLCAmc3RhLT5zdGEuaHRfY2FwLCBzaXplb2YoaHRfY2FwKSk7Ci0JCX0KKwkJLyogZGlzYWJsZSBTTVBTIGluIFRETFMgaW5pdGlhdG9yICovCisJCWh0X2NhcC5jYXAgfD0gV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQKKwkJCQk8PCBJRUVFODAyMTFfSFRfQ0FQX1NNX1BTX1NISUZUOworCisJCXBvcyA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApICsgMik7CisJCWllZWU4MDIxMV9pZV9idWlsZF9odF9jYXAocG9zLCAmaHRfY2FwLCBodF9jYXAuY2FwKTsKKwl9IGVsc2UgaWYgKGFjdGlvbl9jb2RlID09IFdMQU5fVERMU19TRVRVUF9SRVNQT05TRSAmJgorCQkgICBodF9jYXAuaHRfc3VwcG9ydGVkICYmIHN0YS0+c3RhLmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKKwkJLyogZGlzYWJsZSBTTVBTIGluIFRETFMgcmVzcG9uZGVyICovCisJCXN0YS0+c3RhLmh0X2NhcC5jYXAgfD0gV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQKKwkJCQkJPDwgSUVFRTgwMjExX0hUX0NBUF9TTV9QU19TSElGVDsKKworCQkvKiB0aGUgcGVlciBjYXBzIGFyZSBhbHJlYWR5IGludGVyc2VjdGVkIHdpdGggb3VyIG93biAqLworCQltZW1jcHkoJmh0X2NhcCwgJnN0YS0+c3RhLmh0X2NhcCwgc2l6ZW9mKGh0X2NhcCkpOwogCiAJCXBvcyA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApICsgMik7CiAJCWllZWU4MDIxMV9pZV9idWlsZF9odF9jYXAocG9zLCAmaHRfY2FwLCBodF9jYXAuY2FwKTsKQEAgLTgzNiw3ICs4NTIsNiBAQAogCSAqLwogCWlmICgoYWN0aW9uX2NvZGUgPT0gV0xBTl9URExTX1RFQVJET1dOKSAmJgogCSAgICAoc2RhdGEtPmxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMpKSB7Ci0JCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gTlVMTDsKIAkJYm9vbCB0cnlfcmVzZW5kOyAvKiBTaG91bGQgd2Uga2VlcCBza2IgZm9yIHBvc3NpYmxlIHJlc2VuZCAqLwogCiAJCS8qIElmIG5vdCBzZW5kaW5nIGRpcmVjdGx5IHRvIHBlZXIgLSBubyBwb2ludCBpbiBrZWVwaW5nIHNrYiAqLwpAQCAtOTEyLDcgKzkyNyw3IEBACiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIAotCWllZWU4MDIxMV9mbHVzaF9xdWV1ZXMobG9jYWwsIHNkYXRhKTsKKwlpZWVlODAyMTFfZmx1c2hfcXVldWVzKGxvY2FsLCBzZGF0YSwgZmFsc2UpOwogCiAJcmV0ID0gaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldCh3aXBoeSwgZGV2LCBwZWVyLCBhY3Rpb25fY29kZSwKIAkJCQkJICAgICAgZGlhbG9nX3Rva2VuLCBzdGF0dXNfY29kZSwKQEAgLTk1Miw3ICs5NjcsNyBAQAogCSAqLwogCWllZWU4MDIxMV9zdG9wX3ZpZl9xdWV1ZXMobG9jYWwsIHNkYXRhLAogCQkJCSAgSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX1RETFNfVEVBUkRPV04pOwotCWllZWU4MDIxMV9mbHVzaF9xdWV1ZXMobG9jYWwsIHNkYXRhKTsKKwlpZWVlODAyMTFfZmx1c2hfcXVldWVzKGxvY2FsLCBzZGF0YSwgZmFsc2UpOwogCiAJcmV0ID0gaWVlZTgwMjExX3RkbHNfcHJlcF9tZ210X3BhY2tldCh3aXBoeSwgZGV2LCBwZWVyLCBhY3Rpb25fY29kZSwKIAkJCQkJICAgICAgZGlhbG9nX3Rva2VuLCBzdGF0dXNfY29kZSwKQEAgLTEwOTgsNyArMTExMyw3IEBACiAJCSAqLwogCQl0YXNrbGV0X2tpbGwoJmxvY2FsLT50eF9wZW5kaW5nX3Rhc2tsZXQpOwogCQkvKiBmbHVzaCBhIHBvdGVudGlhbGx5IHF1ZXVlZCB0ZWFyZG93biBwYWNrZXQgKi8KLQkJaWVlZTgwMjExX2ZsdXNoX3F1ZXVlcyhsb2NhbCwgc2RhdGEpOworCQlpZWVlODAyMTFfZmx1c2hfcXVldWVzKGxvY2FsLCBzZGF0YSwgZmFsc2UpOwogCiAJCXJldCA9IHN0YV9pbmZvX2Rlc3Ryb3lfYWRkcihzZGF0YSwgcGVlcik7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3RyYWNlLmggYi9uZXQvbWFjODAyMTEvdHJhY2UuaAppbmRleCA4ZTQ2MWEwLi4yNjNhOTU2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHJhY2UuaAorKysgYi9uZXQvbWFjODAyMTEvdHJhY2UuaApAQCAtODI1LDYgKzgyNSwxMyBAQAogCSkKICk7CiAKK0RFRklORV9FVkVOVChzdGFfZXZlbnQsIGRydl9zdGFfc3RhdGlzdGljcywKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSksCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEsIHN0YSkKKyk7CisKIERFRklORV9FVkVOVChzdGFfZXZlbnQsIGRydl9zdGFfYWRkLAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCkBAIC0xMzI5LDMyICsxMzM2LDYgQEAKIAlUUF9BUkdTKGxvY2FsLCBzdGEsIHRpZHMsIG51bV9mcmFtZXMsIHJlYXNvbiwgbW9yZV9kYXRhKQogKTsKIAotVFJBQ0VfRVZFTlQoZHJ2X2dldF9yc3NpLAotCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAotCQkgczggcnNzaSwgaW50IHJldCksCi0KLQlUUF9BUkdTKGxvY2FsLCBzdGEsIHJzc2ksIHJldCksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlMT0NBTF9FTlRSWQotCQlTVEFfRU5UUlkKLQkJX19maWVsZChzOCwgcnNzaSkKLQkJX19maWVsZChpbnQsIHJldCkKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCUxPQ0FMX0FTU0lHTjsKLQkJU1RBX0FTU0lHTjsKLQkJX19lbnRyeS0+cnNzaSA9IHJzc2k7Ci0JCV9fZW50cnktPnJldCA9IHJldDsKLQkpLAotCi0JVFBfcHJpbnRrKAotCQlMT0NBTF9QUl9GTVQgU1RBX1BSX0ZNVCAiIHJzc2k6JWQgcmV0OiVkIiwKLQkJTE9DQUxfUFJfQVJHLCBTVEFfUFJfQVJHLCBfX2VudHJ5LT5yc3NpLCBfX2VudHJ5LT5yZXQKLQkpCi0pOwotCiBERUZJTkVfRVZFTlQobG9jYWxfc2RhdGFfZXZ0LCBkcnZfbWdkX3ByZXBhcmVfdHgsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSksCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDA1ODY4NmEuLjg4YTE4ZmYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC02MjYsNiArNjI2LDkgQEAKIAkJCQl0eC0+a2V5ID0gTlVMTDsKIAkJCWJyZWFrOwogCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUF8yNTY6CisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUDoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QXzI1NjoKIAkJCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcHJlc2VudChoZHItPmZyYW1lX2NvbnRyb2wpICYmCiAJCQkgICAgIWllZWU4MDIxMV91c2VfbWZwKGhkci0+ZnJhbWVfY29udHJvbCwgdHgtPnN0YSwKIAkJCQkJICAgICAgIHR4LT5za2IpKQpAQCAtNjM2LDYgKzYzOSw5IEBACiAJCQkJCWllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCk7CiAJCQlicmVhazsKIAkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfQ01BQ18yNTY6CisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0dNQUNfMTI4OgorCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9HTUFDXzI1NjoKIAkJCWlmICghaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJCQl0eC0+a2V5ID0gTlVMTDsKIAkJCWJyZWFrOwpAQCAtODE1LDYgKzgyMSw4IEBACiAJCS8qIGZvciBwdXJlIFNUQSBtb2RlIHdpdGhvdXQgYmVhY29ucywgd2UgY2FuIGRvIGl0ICovCiAJCWhkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNih0eC0+c2RhdGEtPnNlcXVlbmNlX251bWJlcik7CiAJCXR4LT5zZGF0YS0+c2VxdWVuY2VfbnVtYmVyICs9IDB4MTA7CisJCWlmICh0eC0+c3RhKQorCQkJdHgtPnN0YS0+dHhfbXNkdVtJRUVFODAyMTFfTlVNX1RJRFNdKys7CiAJCXJldHVybiBUWF9DT05USU5VRTsKIAl9CiAKQEAgLTgzMSw2ICs4MzksNyBAQAogCXFjID0gaWVlZTgwMjExX2dldF9xb3NfY3RsKGhkcik7CiAJdGlkID0gKnFjICYgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0s7CiAJc2VxID0gJnR4LT5zdGEtPnRpZF9zZXFbdGlkXTsKKwl0eC0+c3RhLT50eF9tc2R1W3RpZF0rKzsKIAogCWhkci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNigqc2VxKTsKIApAQCAtMTAwOCw5ICsxMDE3LDIxIEBACiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9US0lQOgogCQlyZXR1cm4gaWVlZTgwMjExX2NyeXB0b190a2lwX2VuY3J5cHQodHgpOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKLQkJcmV0dXJuIGllZWU4MDIxMV9jcnlwdG9fY2NtcF9lbmNyeXB0KHR4KTsKKwkJcmV0dXJuIGllZWU4MDIxMV9jcnlwdG9fY2NtcF9lbmNyeXB0KAorCQkJdHgsIElFRUU4MDIxMV9DQ01QX01JQ19MRU4pOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUF8yNTY6CisJCXJldHVybiBpZWVlODAyMTFfY3J5cHRvX2NjbXBfZW5jcnlwdCgKKwkJCXR4LCBJRUVFODAyMTFfQ0NNUF8yNTZfTUlDX0xFTik7CiAJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQzoKIAkJcmV0dXJuIGllZWU4MDIxMV9jcnlwdG9fYWVzX2NtYWNfZW5jcnlwdCh0eCk7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfQ01BQ18yNTY6CisJCXJldHVybiBpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjXzI1Nl9lbmNyeXB0KHR4KTsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9HTUFDXzEyODoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9HTUFDXzI1NjoKKwkJcmV0dXJuIGllZWU4MDIxMV9jcnlwdG9fYWVzX2dtYWNfZW5jcnlwdCh0eCk7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QOgorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTY6CisJCXJldHVybiBpZWVlODAyMTFfY3J5cHRvX2djbXBfZW5jcnlwdCh0eCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGllZWU4MDIxMV9jcnlwdG9faHdfZW5jcnlwdCh0eCk7CiAJfQpAQCAtMzE1Miw3ICszMTczLDcgQEAKIAl9CiAKIAlxdWV1ZXMgPSBCSVQoc2RhdGEtPnZpZi5od19xdWV1ZVtpZWVlODAyXzFkX3RvX2FjW3RpZF1dKTsKLQlfX2llZWU4MDIxMV9mbHVzaF9xdWV1ZXMobG9jYWwsIHNkYXRhLCBxdWV1ZXMpOworCV9faWVlZTgwMjExX2ZsdXNoX3F1ZXVlcyhsb2NhbCwgc2RhdGEsIHF1ZXVlcywgZmFsc2UpOwogCiAJc3RhLT5yZXNlcnZlZF90aWQgPSB0aWQ7CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS91dGlsLmMgYi9uZXQvbWFjODAyMTEvdXRpbC5jCmluZGV4IDk3NGViZTcuLjg0MjhmNGEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS91dGlsLmMKKysrIGIvbmV0L21hYzgwMjExL3V0aWwuYwpAQCAtNTc4LDcgKzU3OCw3IEBACiAKIHZvaWQgX19pZWVlODAyMTFfZmx1c2hfcXVldWVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICAgICB1bnNpZ25lZCBpbnQgcXVldWVzKQorCQkJICAgICAgdW5zaWduZWQgaW50IHF1ZXVlcywgYm9vbCBkcm9wKQogewogCWlmICghbG9jYWwtPm9wcy0+Zmx1c2gpCiAJCXJldHVybjsKQEAgLTU5NCw3ICs1OTQsNyBAQAogCQkJCQlJRUVFODAyMTFfUVVFVUVfU1RPUF9SRUFTT05fRkxVU0gsCiAJCQkJCWZhbHNlKTsKIAotCWRydl9mbHVzaChsb2NhbCwgc2RhdGEsIHF1ZXVlcywgZmFsc2UpOworCWRydl9mbHVzaChsb2NhbCwgc2RhdGEsIHF1ZXVlcywgZHJvcCk7CiAKIAlpZWVlODAyMTFfd2FrZV9xdWV1ZXNfYnlfcmVhc29uKCZsb2NhbC0+aHcsIHF1ZXVlcywKIAkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0ZMVVNILApAQCAtNjAyLDkgKzYwMiw5IEBACiB9CiAKIHZvaWQgaWVlZTgwMjExX2ZsdXNoX3F1ZXVlcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwgYm9vbCBkcm9wKQogewotCV9faWVlZTgwMjExX2ZsdXNoX3F1ZXVlcyhsb2NhbCwgc2RhdGEsIDApOworCV9faWVlZTgwMjExX2ZsdXNoX3F1ZXVlcyhsb2NhbCwgc2RhdGEsIDAsIGRyb3ApOwogfQogCiB2b2lkIGllZWU4MDIxMV9zdG9wX3ZpZl9xdWV1ZXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCkBAIC03NDQsMTYgKzc0NCwxOSBAQAogCiAvKgogICogTm90aGluZyBzaG91bGQgaGF2ZSBiZWVuIHN0dWZmZWQgaW50byB0aGUgd29ya3F1ZXVlIGR1cmluZwotICogdGhlIHN1c3BlbmQtPnJlc3VtZSBjeWNsZS4gSWYgdGhpcyBXQVJOIGlzIHNlZW4gdGhlbiB0aGVyZQotICogaXMgYSBidWcgd2l0aCBlaXRoZXIgdGhlIGRyaXZlciBzdXNwZW5kIG9yIHNvbWV0aGluZyBpbgotICogbWFjODAyMTEgc3R1ZmZpbmcgaW50byB0aGUgd29ya3F1ZXVlIHdoaWNoIHdlIGhhdmVuJ3QgeWV0Ci0gKiBjbGVhcmVkIGR1cmluZyBtYWM4MDIxMSdzIHN1c3BlbmQgY3ljbGUuCisgKiB0aGUgc3VzcGVuZC0+cmVzdW1lIGN5Y2xlLiBTaW5jZSB3ZSBjYW4ndCBjaGVjayBlYWNoIGNhbGxlcgorICogb2YgdGhpcyBmdW5jdGlvbiBpZiB3ZSBhcmUgYWxyZWFkeSBxdWllc2NpbmcgLyBzdXNwZW5kZWQsCisgKiBjaGVjayBoZXJlIGFuZCBkb24ndCBXQVJOIHNpbmNlIHRoaXMgY2FuIGFjdHVhbGx5IGhhcHBlbiB3aGVuCisgKiB0aGUgcnggcGF0aCAoZm9yIGV4YW1wbGUpIGlzIHJhY2luZyBhZ2FpbnN0IF9faWVlZTgwMjExX3N1c3BlbmQKKyAqIGFuZCBzdXNwZW5kaW5nIC8gcXVpZXNjaW5nIHdhcyBzZXQgYWZ0ZXIgdGhlIHJ4IHBhdGggY2hlY2tlZAorICogdGhlbS4KICAqLwogc3RhdGljIGJvb2wgaWVlZTgwMjExX2Nhbl9xdWV1ZV93b3JrKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewotCWlmIChXQVJOKGxvY2FsLT5zdXNwZW5kZWQgJiYgIWxvY2FsLT5yZXN1bWluZywKLQkJICJxdWV1ZWluZyBpZWVlODAyMTEgd29yayB3aGlsZSBnb2luZyB0byBzdXNwZW5kXG4iKSkKKwlpZiAobG9jYWwtPnF1aWVzY2luZyB8fCAobG9jYWwtPnN1c3BlbmRlZCAmJiAhbG9jYWwtPnJlc3VtaW5nKSkgeworCQlwcl93YXJuKCJxdWV1ZWluZyBpZWVlODAyMTEgd29yayB3aGlsZSBnb2luZyB0byBzdXNwZW5kXG4iKTsKIAkJcmV0dXJuIGZhbHNlOworCX0KIAogCXJldHVybiB0cnVlOwogfQpAQCAtMTQ3MCwxMCArMTQ3MywxMiBAQAogCiAJLyogQ2hlY2sgaWYgYW55IGNoYW5uZWwgaW4gdGhpcyBzYmFuZCBzdXBwb3J0cyBhdCBsZWFzdCA4MCBNSHogKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fY2hhbm5lbHM7IGkrKykgewotCQlpZiAoIShzYmFuZC0+Y2hhbm5lbHNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT184ME1IWikpIHsKLQkJCWhhdmVfODBtaHogPSB0cnVlOwotCQkJYnJlYWs7Ci0JCX0KKwkJaWYgKHNiYW5kLT5jaGFubmVsc1tpXS5mbGFncyAmIChJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCB8CisJCQkJCQlJRUVFODAyMTFfQ0hBTl9OT184ME1IWikpCisJCQljb250aW51ZTsKKworCQloYXZlXzgwbWh6ID0gdHJ1ZTsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKHNiYW5kLT52aHRfY2FwLnZodF9zdXBwb3J0ZWQgJiYgaGF2ZV84MG1oeikgewpAQCAtMTczNSw2ICsxNzQwLDEwIEBACiAJc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqc2NoZWRfc2Nhbl9yZXE7CiAJYm9vbCBzY2hlZF9zY2FuX3N0b3BwZWQgPSBmYWxzZTsKIAorCS8qIG5vdGhpbmcgdG8gZG8gaWYgSFcgc2hvdWxkbid0IHJ1biAqLworCWlmICghbG9jYWwtPm9wZW5fY291bnQpCisJCWdvdG8gd2FrZV91cDsKKwogI2lmZGVmIENPTkZJR19QTQogCWlmIChsb2NhbC0+c3VzcGVuZGVkKQogCQlsb2NhbC0+cmVzdW1pbmcgPSB0cnVlOwpAQCAtMTc1Niw5ICsxNzY1LDYgQEAKIAkJcmVjb25maWdfZHVlX3RvX3dvd2xhbiA9IHRydWU7CiAJfQogI2VuZGlmCi0JLyogZXZlcnl0aGluZyBlbHNlIGhhcHBlbnMgb25seSBpZiBIVyB3YXMgdXAgJiBydW5uaW5nICovCi0JaWYgKCFsb2NhbC0+b3Blbl9jb3VudCkKLQkJZ290byB3YWtlX3VwOwogCiAJLyoKIAkgKiBVcG9uIHJlc3VtZSBoYXJkd2FyZSBjYW4gc29tZXRpbWVzIGJlIGdvb2Z5IGR1ZSB0bwpAQCAtMjA0Miw3ICsyMDQ4LDcgQEAKIAkgKiBJZiB0aGlzIGlzIGZvciBodyByZXN0YXJ0IHRoaW5ncyBhcmUgc3RpbGwgcnVubmluZy4KIAkgKiBXZSBtYXkgd2FudCB0byBjaGFuZ2UgdGhhdCBsYXRlciwgaG93ZXZlci4KIAkgKi8KLQlpZiAoIWxvY2FsLT5zdXNwZW5kZWQgfHwgcmVjb25maWdfZHVlX3RvX3dvd2xhbikKKwlpZiAobG9jYWwtPm9wZW5fY291bnQgJiYgKCFsb2NhbC0+c3VzcGVuZGVkIHx8IHJlY29uZmlnX2R1ZV90b193b3dsYW4pKQogCQlkcnZfcmVjb25maWdfY29tcGxldGUobG9jYWwsIElFRUU4MDIxMV9SRUNPTkZJR19UWVBFX1JFU1RBUlQpOwogCiAJaWYgKCFsb2NhbC0+c3VzcGVuZGVkKQpAQCAtMjA1NCw3ICsyMDYwLDE5IEBACiAJbWIoKTsKIAlsb2NhbC0+cmVzdW1pbmcgPSBmYWxzZTsKIAotCWlmICghcmVjb25maWdfZHVlX3RvX3dvd2xhbikKKwkvKiBJdCdzIHBvc3NpYmxlIHRoYXQgd2UgZG9uJ3QgaGFuZGxlIHRoZSBzY2FuIGNvbXBsZXRpb24gaW4KKwkgKiB0aW1lIGR1cmluZyBzdXNwZW5kLCBzbyBpZiBpdCdzIHN0aWxsIG1hcmtlZCBhcyBjb21wbGV0ZWQKKwkgKiBoZXJlLCBxdWV1ZSB0aGUgd29yayBhbmQgZmx1c2ggaXQgdG8gY2xlYW4gdGhpbmdzIHVwLgorCSAqIEluc3RlYWQgb2YgY2FsbGluZyB0aGUgd29ya2VyIGZ1bmN0aW9uIGRpcmVjdGx5IGhlcmUsIHdlCisJICogcmVhbGx5IHF1ZXVlIGl0IHRvIGF2b2lkIHBvdGVudGlhbCByYWNlcyB3aXRoIG90aGVyIGZsb3dzCisJICogc2NoZWR1bGluZyB0aGUgc2FtZSB3b3JrLgorCSAqLworCWlmICh0ZXN0X2JpdChTQ0FOX0NPTVBMRVRFRCwgJmxvY2FsLT5zY2FubmluZykpIHsKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yaygmbG9jYWwtPmh3LCAmbG9jYWwtPnNjYW5fd29yaywgMCk7CisJCWZsdXNoX2RlbGF5ZWRfd29yaygmbG9jYWwtPnNjYW5fd29yayk7CisJfQorCisJaWYgKGxvY2FsLT5vcGVuX2NvdW50ICYmICFyZWNvbmZpZ19kdWVfdG9fd293bGFuKQogCQlkcnZfcmVjb25maWdfY29tcGxldGUobG9jYWwsIElFRUU4MDIxMV9SRUNPTkZJR19UWVBFX1NVU1BFTkQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CkBAIC0yNTM4LDcgKzI1NTYsOSBAQAogCQlyaS5tY3MgPSBzdGF0dXMtPnJhdGVfaWR4OwogCQlyaS5mbGFncyB8PSBSQVRFX0lORk9fRkxBR1NfTUNTOwogCQlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR180ME1IWikKLQkJCXJpLmZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU180MF9NSFpfV0lEVEg7CisJCQlyaS5idyA9IFJBVEVfSU5GT19CV180MDsKKwkJZWxzZQorCQkJcmkuYncgPSBSQVRFX0lORk9fQldfMjA7CiAJCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX1NIT1JUX0dJKQogCQkJcmkuZmxhZ3MgfD0gUkFURV9JTkZPX0ZMQUdTX1NIT1JUX0dJOwogCX0gZWxzZSBpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19WSFQpIHsKQEAgLTI1NDYsMTMgKzI1NjYsMTMgQEAKIAkJcmkubWNzID0gc3RhdHVzLT5yYXRlX2lkeDsKIAkJcmkubnNzID0gc3RhdHVzLT52aHRfbnNzOwogCQlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR180ME1IWikKLQkJCXJpLmZsYWdzIHw9IFJBVEVfSU5GT19GTEFHU180MF9NSFpfV0lEVEg7Ci0JCWlmIChzdGF0dXMtPnZodF9mbGFnICYgUlhfVkhUX0ZMQUdfODBNSFopCi0JCQlyaS5mbGFncyB8PSBSQVRFX0lORk9fRkxBR1NfODBfTUhaX1dJRFRIOwotCQlpZiAoc3RhdHVzLT52aHRfZmxhZyAmIFJYX1ZIVF9GTEFHXzgwUDgwTUhaKQotCQkJcmkuZmxhZ3MgfD0gUkFURV9JTkZPX0ZMQUdTXzgwUDgwX01IWl9XSURUSDsKLQkJaWYgKHN0YXR1cy0+dmh0X2ZsYWcgJiBSWF9WSFRfRkxBR18xNjBNSFopCi0JCQlyaS5mbGFncyB8PSBSQVRFX0lORk9fRkxBR1NfMTYwX01IWl9XSURUSDsKKwkJCXJpLmJ3ID0gUkFURV9JTkZPX0JXXzQwOworCQllbHNlIGlmIChzdGF0dXMtPnZodF9mbGFnICYgUlhfVkhUX0ZMQUdfODBNSFopCisJCQlyaS5idyA9IFJBVEVfSU5GT19CV184MDsKKwkJZWxzZSBpZiAoc3RhdHVzLT52aHRfZmxhZyAmIFJYX1ZIVF9GTEFHXzE2ME1IWikKKwkJCXJpLmJ3ID0gUkFURV9JTkZPX0JXXzE2MDsKKwkJZWxzZQorCQkJcmkuYncgPSBSQVRFX0lORk9fQldfMjA7CiAJCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX1NIT1JUX0dJKQogCQkJcmkuZmxhZ3MgfD0gUkFURV9JTkZPX0ZMQUdTX1NIT1JUX0dJOwogCX0gZWxzZSB7CkBAIC0yNTYwLDEwICsyNTgwLDE1IEBACiAJCWludCBzaGlmdCA9IDA7CiAJCWludCBiaXRyYXRlOwogCi0JCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHXzEwTUhaKQorCQlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR18xME1IWikgewogCQkJc2hpZnQgPSAxOwotCQlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR181TUhaKQorCQkJcmkuYncgPSBSQVRFX0lORk9fQldfMTA7CisJCX0gZWxzZSBpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR181TUhaKSB7CiAJCQlzaGlmdCA9IDI7CisJCQlyaS5idyA9IFJBVEVfSU5GT19CV181OworCQl9IGVsc2UgeworCQkJcmkuYncgPSBSQVRFX0lORk9fQldfMjA7CisJCX0KIAogCQlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbc3RhdHVzLT5iYW5kXTsKIAkJYml0cmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tzdGF0dXMtPnJhdGVfaWR4XS5iaXRyYXRlOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3ZodC5jIGIvbmV0L21hYzgwMjExL3ZodC5jCmluZGV4IGJjOWU4ZmMuLjg1Zjk1OTYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS92aHQuYworKysgYi9uZXQvbWFjODAyMTEvdmh0LmMKQEAgLTI2OSw1MSArMjY5LDU0IEBACiAJc3RhLT5zdGEuYmFuZHdpZHRoID0gaWVlZTgwMjExX3N0YV9jdXJfdmh0X2J3KHN0YSk7CiB9CiAKK2VudW0gaWVlZTgwMjExX3N0YV9yeF9iYW5kd2lkdGggaWVlZTgwMjExX3N0YV9jYXBfcnhfYncoc3RydWN0IHN0YV9pbmZvICpzdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdGFfdmh0X2NhcCAqdmh0X2NhcCA9ICZzdGEtPnN0YS52aHRfY2FwOworCXUzMiBjYXBfd2lkdGg7CisKKwlpZiAoIXZodF9jYXAtPnZodF9zdXBwb3J0ZWQpCisJCXJldHVybiBzdGEtPnN0YS5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgPworCQkJCUlFRUU4MDIxMV9TVEFfUlhfQldfNDAgOgorCQkJCUlFRUU4MDIxMV9TVEFfUlhfQldfMjA7CisKKwljYXBfd2lkdGggPSB2aHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfVkhUX0NBUF9TVVBQX0NIQU5fV0lEVEhfTUFTSzsKKworCWlmIChjYXBfd2lkdGggPT0gSUVFRTgwMjExX1ZIVF9DQVBfU1VQUF9DSEFOX1dJRFRIXzE2ME1IWiB8fAorCSAgICBjYXBfd2lkdGggPT0gSUVFRTgwMjExX1ZIVF9DQVBfU1VQUF9DSEFOX1dJRFRIXzE2MF84MFBMVVM4ME1IWikKKwkJcmV0dXJuIElFRUU4MDIxMV9TVEFfUlhfQldfMTYwOworCisJcmV0dXJuIElFRUU4MDIxMV9TVEFfUlhfQldfODA7Cit9CisKK3N0YXRpYyBlbnVtIGllZWU4MDIxMV9zdGFfcnhfYmFuZHdpZHRoCitpZWVlODAyMTFfY2hhbl93aWR0aF90b19yeF9idyhlbnVtIG5sODAyMTFfY2hhbl93aWR0aCB3aWR0aCkKK3sKKwlzd2l0Y2ggKHdpZHRoKSB7CisJY2FzZSBOTDgwMjExX0NIQU5fV0lEVEhfMjBfTk9IVDoKKwljYXNlIE5MODAyMTFfQ0hBTl9XSURUSF8yMDoKKwkJcmV0dXJuIElFRUU4MDIxMV9TVEFfUlhfQldfMjA7CisJY2FzZSBOTDgwMjExX0NIQU5fV0lEVEhfNDA6CisJCXJldHVybiBJRUVFODAyMTFfU1RBX1JYX0JXXzQwOworCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRIXzgwOgorCQlyZXR1cm4gSUVFRTgwMjExX1NUQV9SWF9CV184MDsKKwljYXNlIE5MODAyMTFfQ0hBTl9XSURUSF8xNjA6CisJY2FzZSBOTDgwMjExX0NIQU5fV0lEVEhfODBQODA6CisJCXJldHVybiBJRUVFODAyMTFfU1RBX1JYX0JXXzE2MDsKKwlkZWZhdWx0OgorCQlXQVJOX09OX09OQ0UoMSk7CisJCXJldHVybiBJRUVFODAyMTFfU1RBX1JYX0JXXzIwOworCX0KK30KKwogZW51bSBpZWVlODAyMTFfc3RhX3J4X2JhbmR3aWR0aCBpZWVlODAyMTFfc3RhX2N1cl92aHRfYncoc3RydWN0IHN0YV9pbmZvICpzdGEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOwotCXUzMiBjYXAgPSBzdGEtPnN0YS52aHRfY2FwLmNhcDsKIAllbnVtIGllZWU4MDIxMV9zdGFfcnhfYmFuZHdpZHRoIGJ3OwogCi0JaWYgKCFzdGEtPnN0YS52aHRfY2FwLnZodF9zdXBwb3J0ZWQpIHsKLQkJYncgPSBzdGEtPnN0YS5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgPwotCQkJCUlFRUU4MDIxMV9TVEFfUlhfQldfNDAgOiBJRUVFODAyMTFfU1RBX1JYX0JXXzIwOwotCQlnb3RvIGNoZWNrX21heDsKLQl9CisJYncgPSBpZWVlODAyMTFfY2hhbl93aWR0aF90b19yeF9idyhzZGF0YS0+dmlmLmJzc19jb25mLmNoYW5kZWYud2lkdGgpOworCWJ3ID0gbWluKGJ3LCBpZWVlODAyMTFfc3RhX2NhcF9yeF9idyhzdGEpKTsKKwlidyA9IG1pbihidywgc3RhLT5jdXJfbWF4X2JhbmR3aWR0aCk7CiAKLQlzd2l0Y2ggKHNkYXRhLT52aWYuYnNzX2NvbmYuY2hhbmRlZi53aWR0aCkgewotCWRlZmF1bHQ6Ci0JCVdBUk5fT05fT05DRSgxKTsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBOTDgwMjExX0NIQU5fV0lEVEhfMjBfTk9IVDoKLQljYXNlIE5MODAyMTFfQ0hBTl9XSURUSF8yMDoKLQkJYncgPSBJRUVFODAyMTFfU1RBX1JYX0JXXzIwOwotCQlicmVhazsKLQljYXNlIE5MODAyMTFfQ0hBTl9XSURUSF80MDoKLQkJYncgPSBzdGEtPnN0YS5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgPwotCQkJCUlFRUU4MDIxMV9TVEFfUlhfQldfNDAgOiBJRUVFODAyMTFfU1RBX1JYX0JXXzIwOwotCQlicmVhazsKLQljYXNlIE5MODAyMTFfQ0hBTl9XSURUSF8xNjA6Ci0JCWlmICgoY2FwICYgSUVFRTgwMjExX1ZIVF9DQVBfU1VQUF9DSEFOX1dJRFRIX01BU0spID09Ci0JCQkJSUVFRTgwMjExX1ZIVF9DQVBfU1VQUF9DSEFOX1dJRFRIXzE2ME1IWikgewotCQkJYncgPSBJRUVFODAyMTFfU1RBX1JYX0JXXzE2MDsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgTkw4MDIxMV9DSEFOX1dJRFRIXzgwUDgwOgotCQlpZiAoKGNhcCAmIElFRUU4MDIxMV9WSFRfQ0FQX1NVUFBfQ0hBTl9XSURUSF9NQVNLKSA9PQotCQkJCUlFRUU4MDIxMV9WSFRfQ0FQX1NVUFBfQ0hBTl9XSURUSF8xNjBfODBQTFVTODBNSFopIHsKLQkJCWJ3ID0gSUVFRTgwMjExX1NUQV9SWF9CV18xNjA7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIE5MODAyMTFfQ0hBTl9XSURUSF84MDoKLQkJYncgPSBJRUVFODAyMTFfU1RBX1JYX0JXXzgwOwotCX0KLQotIGNoZWNrX21heDoKLQlpZiAoYncgPiBzdGEtPmN1cl9tYXhfYmFuZHdpZHRoKQotCQlidyA9IHN0YS0+Y3VyX21heF9iYW5kd2lkdGg7CiAJcmV0dXJuIGJ3OwogfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvd3BhLmMgYi9uZXQvbWFjODAyMTEvd3BhLmMKaW5kZXggMTIzOThmZGUuLjc1ZGU2ZmEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93cGEuYworKysgYi9uZXQvbWFjODAyMTEvd3BhLmMKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlICJ0a2lwLmgiCiAjaW5jbHVkZSAiYWVzX2NjbS5oIgogI2luY2x1ZGUgImFlc19jbWFjLmgiCisjaW5jbHVkZSAiYWVzX2dtYWMuaCIKKyNpbmNsdWRlICJhZXNfZ2NtLmgiCiAjaW5jbHVkZSAid3BhLmgiCiAKIGllZWU4MDIxMV90eF9yZXN1bHQKQEAgLTM5Myw3ICszOTUsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgY2NtcF9lbmNyeXB0X3NrYihzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBjY21wX2VuY3J5cHRfc2tiKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgsIHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgdW5zaWduZWQgaW50IG1pY19sZW4pCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IHR4LT5rZXk7CkBAIC00MjQsNyArNDI3LDcgQEAKIAlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpCiAJCXRhaWwgPSAwOwogCWVsc2UKLQkJdGFpbCA9IElFRUU4MDIxMV9DQ01QX01JQ19MRU47CisJCXRhaWwgPSBtaWNfbGVuOwogCiAJaWYgKFdBUk5fT04oc2tiX3RhaWxyb29tKHNrYikgPCB0YWlsIHx8CiAJCSAgICBza2JfaGVhZHJvb20oc2tiKSA8IElFRUU4MDIxMV9DQ01QX0hEUl9MRU4pKQpAQCAtNDU5LDIxICs0NjIsMjIgQEAKIAlwb3MgKz0gSUVFRTgwMjExX0NDTVBfSERSX0xFTjsKIAljY21wX3NwZWNpYWxfYmxvY2tzKHNrYiwgcG4sIGJfMCwgYWFkKTsKIAlpZWVlODAyMTFfYWVzX2NjbV9lbmNyeXB0KGtleS0+dS5jY21wLnRmbSwgYl8wLCBhYWQsIHBvcywgbGVuLAotCQkJCSAgc2tiX3B1dChza2IsIElFRUU4MDIxMV9DQ01QX01JQ19MRU4pKTsKKwkJCQkgIHNrYl9wdXQoc2tiLCBtaWNfbGVuKSwgbWljX2xlbik7CiAKIAlyZXR1cm4gMDsKIH0KIAogCiBpZWVlODAyMTFfdHhfcmVzdWx0Ci1pZWVlODAyMTFfY3J5cHRvX2NjbXBfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQoraWVlZTgwMjExX2NyeXB0b19jY21wX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBtaWNfbGVuKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKIAlpZWVlODAyMTFfdHhfc2V0X3Byb3RlY3RlZCh0eCk7CiAKIAlza2JfcXVldWVfd2FsaygmdHgtPnNrYnMsIHNrYikgewotCQlpZiAoY2NtcF9lbmNyeXB0X3NrYih0eCwgc2tiKSA8IDApCisJCWlmIChjY21wX2VuY3J5cHRfc2tiKHR4LCBza2IsIG1pY19sZW4pIDwgMCkKIAkJCXJldHVybiBUWF9EUk9QOwogCX0KIApAQCAtNDgyLDcgKzQ4Niw4IEBACiAKIAogaWVlZTgwMjExX3J4X3Jlc3VsdAotaWVlZTgwMjExX2NyeXB0b19jY21wX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKK2llZWU4MDIxMV9jcnlwdG9fY2NtcF9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbWljX2xlbikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtPnNrYi0+ZGF0YTsKIAlpbnQgaGRybGVuOwpAQCAtNDk5LDggKzUwNCw3IEBACiAJICAgICFpZWVlODAyMTFfaXNfcm9idXN0X21nbXRfZnJhbWUoc2tiKSkKIAkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCi0JZGF0YV9sZW4gPSBza2ItPmxlbiAtIGhkcmxlbiAtIElFRUU4MDIxMV9DQ01QX0hEUl9MRU4gLQotCQkgICBJRUVFODAyMTFfQ0NNUF9NSUNfTEVOOworCWRhdGFfbGVuID0gc2tiLT5sZW4gLSBoZHJsZW4gLSBJRUVFODAyMTFfQ0NNUF9IRFJfTEVOIC0gbWljX2xlbjsKIAlpZiAoIXJ4LT5zdGEgfHwgZGF0YV9sZW4gPCAwKQogCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIApAQCAtNTMxLDE0ICs1MzUsMTQgQEAKIAkJCSAgICBrZXktPnUuY2NtcC50Zm0sIGJfMCwgYWFkLAogCQkJICAgIHNrYi0+ZGF0YSArIGhkcmxlbiArIElFRUU4MDIxMV9DQ01QX0hEUl9MRU4sCiAJCQkgICAgZGF0YV9sZW4sCi0JCQkgICAgc2tiLT5kYXRhICsgc2tiLT5sZW4gLSBJRUVFODAyMTFfQ0NNUF9NSUNfTEVOKSkKKwkJCSAgICBza2ItPmRhdGEgKyBza2ItPmxlbiAtIG1pY19sZW4sIG1pY19sZW4pKQogCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAJfQogCiAJbWVtY3B5KGtleS0+dS5jY21wLnJ4X3BuW3F1ZXVlXSwgcG4sIElFRUU4MDIxMV9DQ01QX1BOX0xFTik7CiAKIAkvKiBSZW1vdmUgQ0NNUCBoZWFkZXIgYW5kIE1JQyAqLwotCWlmIChwc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIElFRUU4MDIxMV9DQ01QX01JQ19MRU4pKQorCWlmIChwc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIG1pY19sZW4pKQogCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAltZW1tb3ZlKHNrYi0+ZGF0YSArIElFRUU4MDIxMV9DQ01QX0hEUl9MRU4sIHNrYi0+ZGF0YSwgaGRybGVuKTsKIAlza2JfcHVsbChza2IsIElFRUU4MDIxMV9DQ01QX0hEUl9MRU4pOwpAQCAtNTQ2LDYgKzU1MCwyMjkgQEAKIAlyZXR1cm4gUlhfQ09OVElOVUU7CiB9CiAKK3N0YXRpYyB2b2lkIGdjbXBfc3BlY2lhbF9ibG9ja3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKnBuLCB1OCAqal8wLCB1OCAqYWFkKQoreworCV9fbGUxNiBtYXNrX2ZjOworCXU4IHFvc190aWQ7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKworCW1lbWNweShqXzAsIGhkci0+YWRkcjIsIEVUSF9BTEVOKTsKKwltZW1jcHkoJmpfMFtFVEhfQUxFTl0sIHBuLCBJRUVFODAyMTFfR0NNUF9QTl9MRU4pOworCWpfMFsxM10gPSAwOworCWpfMFsxNF0gPSAwOworCWpfMFtBRVNfQkxPQ0tfU0laRSAtIDFdID0gMHgwMTsKKworCS8qIEFBRCAoZXh0cmEgYXV0aGVudGljYXRlLW9ubHkgZGF0YSkgLyBtYXNrZWQgODAyLjExIGhlYWRlcgorCSAqIEZDIHwgQTEgfCBBMiB8IEEzIHwgU0MgfCBbQTRdIHwgW1FDXQorCSAqLworCXB1dF91bmFsaWduZWRfYmUxNihpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCkgLSAyLCAmYWFkWzBdKTsKKwkvKiBNYXNrIEZDOiB6ZXJvIHN1YnR5cGUgYjQgYjUgYjYgKGlmIG5vdCBtZ210KQorCSAqIFJldHJ5LCBQd3JNZ3QsIE1vcmVEYXRhOyBzZXQgUHJvdGVjdGVkCisJICovCisJbWFza19mYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwltYXNrX2ZjICY9IH5jcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9SRVRSWSB8CisJCQkJSUVFRTgwMjExX0ZDVExfUE0gfCBJRUVFODAyMTFfRkNUTF9NT1JFREFUQSk7CisJaWYgKCFpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1lX2NvbnRyb2wpKQorCQltYXNrX2ZjICY9IH5jcHVfdG9fbGUxNigweDAwNzApOworCW1hc2tfZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKKworCXB1dF91bmFsaWduZWQobWFza19mYywgKF9fbGUxNiAqKSZhYWRbMl0pOworCW1lbWNweSgmYWFkWzRdLCAmaGRyLT5hZGRyMSwgMyAqIEVUSF9BTEVOKTsKKworCS8qIE1hc2sgU2VxIywgbGVhdmUgRnJhZyMgKi8KKwlhYWRbMjJdID0gKigodTggKikmaGRyLT5zZXFfY3RybCkgJiAweDBmOworCWFhZFsyM10gPSAwOworCisJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlxb3NfdGlkID0gKmllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpICYKKwkJCUlFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOworCWVsc2UKKwkJcW9zX3RpZCA9IDA7CisKKwlpZiAoaWVlZTgwMjExX2hhc19hNChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CisJCW1lbWNweSgmYWFkWzI0XSwgaGRyLT5hZGRyNCwgRVRIX0FMRU4pOworCQlhYWRbMzBdID0gcW9zX3RpZDsKKwkJYWFkWzMxXSA9IDA7CisJfSBlbHNlIHsKKwkJbWVtc2V0KCZhYWRbMjRdLCAwLCBFVEhfQUxFTiArIElFRUU4MDIxMV9RT1NfQ1RMX0xFTik7CisJCWFhZFsyNF0gPSBxb3NfdGlkOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGdjbXBfcG4yaGRyKHU4ICpoZHIsIGNvbnN0IHU4ICpwbiwgaW50IGtleV9pZCkKK3sKKwloZHJbMF0gPSBwbls1XTsKKwloZHJbMV0gPSBwbls0XTsKKwloZHJbMl0gPSAwOworCWhkclszXSA9IDB4MjAgfCAoa2V5X2lkIDw8IDYpOworCWhkcls0XSA9IHBuWzNdOworCWhkcls1XSA9IHBuWzJdOworCWhkcls2XSA9IHBuWzFdOworCWhkcls3XSA9IHBuWzBdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2NtcF9oZHIycG4odTggKnBuLCBjb25zdCB1OCAqaGRyKQoreworCXBuWzBdID0gaGRyWzddOworCXBuWzFdID0gaGRyWzZdOworCXBuWzJdID0gaGRyWzVdOworCXBuWzNdID0gaGRyWzRdOworCXBuWzRdID0gaGRyWzFdOworCXBuWzVdID0gaGRyWzBdOworfQorCitzdGF0aWMgaW50IGdjbXBfZW5jcnlwdF9za2Ioc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkgPSB0eC0+a2V5OworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlpbnQgaGRybGVuLCBsZW4sIHRhaWw7CisJdTggKnBvczsKKwl1OCBwbls2XTsKKwl1NjQgcG42NDsKKwl1OCBhYWRbMiAqIEFFU19CTE9DS19TSVpFXTsKKwl1OCBqXzBbQUVTX0JMT0NLX1NJWkVdOworCisJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5ICYmCisJICAgICEoaW5mby0+Y29udHJvbC5od19rZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSAmJgorCSAgICAhKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19QVVRfSVZfU1BBQ0UpICYmCisJICAgICEoKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5mbGFncyAmCisJICAgICAgIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVl9NR01UKSAmJgorCSAgICAgIGllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpKSB7CisJCS8qIGh3YWNjZWwgaGFzIG5vIG5lZWQgZm9yIHByZWFsbG9jYXRlZCByb29tIGZvciBHQ01QCisJCSAqIGhlYWRlciBvciBNSUMgZmllbGRzCisJCSAqLworCQlyZXR1cm4gMDsKKwl9CisKKwloZHJsZW4gPSBpZWVlODAyMTFfaGRybGVuKGhkci0+ZnJhbWVfY29udHJvbCk7CisJbGVuID0gc2tiLT5sZW4gLSBoZHJsZW47CisKKwlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpCisJCXRhaWwgPSAwOworCWVsc2UKKwkJdGFpbCA9IElFRUU4MDIxMV9HQ01QX01JQ19MRU47CisKKwlpZiAoV0FSTl9PTihza2JfdGFpbHJvb20oc2tiKSA8IHRhaWwgfHwKKwkJICAgIHNrYl9oZWFkcm9vbShza2IpIDwgSUVFRTgwMjExX0dDTVBfSERSX0xFTikpCisJCXJldHVybiAtMTsKKworCXBvcyA9IHNrYl9wdXNoKHNrYiwgSUVFRTgwMjExX0dDTVBfSERSX0xFTik7CisJbWVtbW92ZShwb3MsIHBvcyArIElFRUU4MDIxMV9HQ01QX0hEUl9MRU4sIGhkcmxlbik7CisJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpICsKKwkJCQkgICAgSUVFRTgwMjExX0dDTVBfSERSX0xFTik7CisKKwkvKiB0aGUgSFcgb25seSBuZWVkcyByb29tIGZvciB0aGUgSVYsIGJ1dCBub3QgdGhlIGFjdHVhbCBJViAqLworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSAmJgorCSAgICAoaW5mby0+Y29udHJvbC5od19rZXktPmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX1BVVF9JVl9TUEFDRSkpCisJCXJldHVybiAwOworCisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcG9zOworCXBvcyArPSBoZHJsZW47CisKKwlwbjY0ID0gYXRvbWljNjRfaW5jX3JldHVybigma2V5LT51LmdjbXAudHhfcG4pOworCisJcG5bNV0gPSBwbjY0OworCXBuWzRdID0gcG42NCA+PiA4OworCXBuWzNdID0gcG42NCA+PiAxNjsKKwlwblsyXSA9IHBuNjQgPj4gMjQ7CisJcG5bMV0gPSBwbjY0ID4+IDMyOworCXBuWzBdID0gcG42NCA+PiA0MDsKKworCWdjbXBfcG4yaGRyKHBvcywgcG4sIGtleS0+Y29uZi5rZXlpZHgpOworCisJLyogaHdhY2NlbCAtIHdpdGggc29mdHdhcmUgR0NNUCBoZWFkZXIgKi8KKwlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpCisJCXJldHVybiAwOworCisJcG9zICs9IElFRUU4MDIxMV9HQ01QX0hEUl9MRU47CisJZ2NtcF9zcGVjaWFsX2Jsb2Nrcyhza2IsIHBuLCBqXzAsIGFhZCk7CisJaWVlZTgwMjExX2Flc19nY21fZW5jcnlwdChrZXktPnUuZ2NtcC50Zm0sIGpfMCwgYWFkLCBwb3MsIGxlbiwKKwkJCQkgIHNrYl9wdXQoc2tiLCBJRUVFODAyMTFfR0NNUF9NSUNfTEVOKSk7CisKKwlyZXR1cm4gMDsKK30KKworaWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b19nY21wX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWVlZTgwMjExX3R4X3NldF9wcm90ZWN0ZWQodHgpOworCisJc2tiX3F1ZXVlX3dhbGsoJnR4LT5za2JzLCBza2IpIHsKKwkJaWYgKGdjbXBfZW5jcnlwdF9za2IodHgsIHNrYikgPCAwKQorCQkJcmV0dXJuIFRYX0RST1A7CisJfQorCisJcmV0dXJuIFRYX0NPTlRJTlVFOworfQorCitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2djbXBfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOworCWludCBoZHJsZW47CisJc3RydWN0IGllZWU4MDIxMV9rZXkgKmtleSA9IHJ4LT5rZXk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHJ4LT5za2I7CisJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cyA9IElFRUU4MDIxMV9TS0JfUlhDQihza2IpOworCXU4IHBuW0lFRUU4MDIxMV9HQ01QX1BOX0xFTl07CisJaW50IGRhdGFfbGVuOworCWludCBxdWV1ZTsKKworCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKKworCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCSAgICAhaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKHNrYikpCisJCXJldHVybiBSWF9DT05USU5VRTsKKworCWRhdGFfbGVuID0gc2tiLT5sZW4gLSBoZHJsZW4gLSBJRUVFODAyMTFfR0NNUF9IRFJfTEVOIC0KKwkJICAgSUVFRTgwMjExX0dDTVBfTUlDX0xFTjsKKwlpZiAoIXJ4LT5zdGEgfHwgZGF0YV9sZW4gPCAwKQorCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKworCWlmIChzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkgeworCQlpZiAoIXBza2JfbWF5X3B1bGwocngtPnNrYiwgaGRybGVuICsgSUVFRTgwMjExX0dDTVBfSERSX0xFTikpCisJCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKwl9IGVsc2UgeworCQlpZiAoc2tiX2xpbmVhcml6ZShyeC0+c2tiKSkKKwkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCX0KKworCWdjbXBfaGRyMnBuKHBuLCBza2ItPmRhdGEgKyBoZHJsZW4pOworCisJcXVldWUgPSByeC0+c2VjdXJpdHlfaWR4OworCisJaWYgKG1lbWNtcChwbiwga2V5LT51LmdjbXAucnhfcG5bcXVldWVdLCBJRUVFODAyMTFfR0NNUF9QTl9MRU4pIDw9IDApIHsKKwkJa2V5LT51LmdjbXAucmVwbGF5cysrOworCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKwl9CisKKwlpZiAoIShzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkpIHsKKwkJdTggYWFkWzIgKiBBRVNfQkxPQ0tfU0laRV07CisJCXU4IGpfMFtBRVNfQkxPQ0tfU0laRV07CisJCS8qIGhhcmR3YXJlIGRpZG4ndCBkZWNyeXB0L3ZlcmlmeSBNSUMgKi8KKwkJZ2NtcF9zcGVjaWFsX2Jsb2Nrcyhza2IsIHBuLCBqXzAsIGFhZCk7CisKKwkJaWYgKGllZWU4MDIxMV9hZXNfZ2NtX2RlY3J5cHQoCisJCQkgICAga2V5LT51LmdjbXAudGZtLCBqXzAsIGFhZCwKKwkJCSAgICBza2ItPmRhdGEgKyBoZHJsZW4gKyBJRUVFODAyMTFfR0NNUF9IRFJfTEVOLAorCQkJICAgIGRhdGFfbGVuLAorCQkJICAgIHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gSUVFRTgwMjExX0dDTVBfTUlDX0xFTikpCisJCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKwl9CisKKwltZW1jcHkoa2V5LT51LmdjbXAucnhfcG5bcXVldWVdLCBwbiwgSUVFRTgwMjExX0dDTVBfUE5fTEVOKTsKKworCS8qIFJlbW92ZSBHQ01QIGhlYWRlciBhbmQgTUlDICovCisJaWYgKHBza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gSUVFRTgwMjExX0dDTVBfTUlDX0xFTikpCisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCW1lbW1vdmUoc2tiLT5kYXRhICsgSUVFRTgwMjExX0dDTVBfSERSX0xFTiwgc2tiLT5kYXRhLCBoZHJsZW4pOworCXNrYl9wdWxsKHNrYiwgSUVFRTgwMjExX0dDTVBfSERSX0xFTik7CisKKwlyZXR1cm4gUlhfQ09OVElOVUU7Cit9CisKIHN0YXRpYyBpZWVlODAyMTFfdHhfcmVzdWx0CiBpZWVlODAyMTFfY3J5cHRvX2NzX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCwKIAkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtNzI5LDYgKzk1Niw0OCBAQAogCXJldHVybiBUWF9DT05USU5VRTsKIH0KIAoraWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b19hZXNfY21hY18yNTZfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkgPSB0eC0+a2V5OworCXN0cnVjdCBpZWVlODAyMTFfbW1pZV8xNiAqbW1pZTsKKwl1OCBhYWRbMjBdOworCXU2NCBwbjY0OworCisJaWYgKFdBUk5fT04oc2tiX3F1ZXVlX2xlbigmdHgtPnNrYnMpICE9IDEpKQorCQlyZXR1cm4gVFhfRFJPUDsKKworCXNrYiA9IHNrYl9wZWVrKCZ0eC0+c2ticyk7CisKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCisJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KQorCQlyZXR1cm4gVFhfQ09OVElOVUU7CisKKwlpZiAoV0FSTl9PTihza2JfdGFpbHJvb20oc2tiKSA8IHNpemVvZigqbW1pZSkpKQorCQlyZXR1cm4gVFhfRFJPUDsKKworCW1taWUgPSAoc3RydWN0IGllZWU4MDIxMV9tbWllXzE2ICopc2tiX3B1dChza2IsIHNpemVvZigqbW1pZSkpOworCW1taWUtPmVsZW1lbnRfaWQgPSBXTEFOX0VJRF9NTUlFOworCW1taWUtPmxlbmd0aCA9IHNpemVvZigqbW1pZSkgLSAyOworCW1taWUtPmtleV9pZCA9IGNwdV90b19sZTE2KGtleS0+Y29uZi5rZXlpZHgpOworCisJLyogUE4gPSBQTiArIDEgKi8KKwlwbjY0ID0gYXRvbWljNjRfaW5jX3JldHVybigma2V5LT51LmFlc19jbWFjLnR4X3BuKTsKKworCWJpcF9pcG5fc2V0NjQobW1pZS0+c2VxdWVuY2VfbnVtYmVyLCBwbjY0KTsKKworCWJpcF9hYWQoc2tiLCBhYWQpOworCisJLyogTUlDID0gQUVTLTI1Ni1DTUFDKElHVEssIEFBRCB8fCBNYW5hZ2VtZW50IEZyYW1lIEJvZHkgfHwgTU1JRSwgMTI4KQorCSAqLworCWllZWU4MDIxMV9hZXNfY21hY18yNTYoa2V5LT51LmFlc19jbWFjLnRmbSwgYWFkLAorCQkJICAgICAgIHNrYi0+ZGF0YSArIDI0LCBza2ItPmxlbiAtIDI0LCBtbWllLT5taWMpOworCisJcmV0dXJuIFRYX0NPTlRJTlVFOworfQogCiBpZWVlODAyMTFfcnhfcmVzdWx0CiBpZWVlODAyMTFfY3J5cHRvX2Flc19jbWFjX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKQEAgLTc4MCw2ICsxMDQ5LDE2MCBAQAogCXJldHVybiBSWF9DT05USU5VRTsKIH0KIAoraWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b19hZXNfY21hY18yNTZfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQoreworCXN0cnVjdCBza19idWZmICpza2IgPSByeC0+c2tiOworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gcngtPmtleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21taWVfMTYgKm1taWU7CisJdTggYWFkWzIwXSwgbWljWzE2XSwgaXBuWzZdOworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CisKKwlpZiAoIWllZWU4MDIxMV9pc19tZ210KGhkci0+ZnJhbWVfY29udHJvbCkpCisJCXJldHVybiBSWF9DT05USU5VRTsKKworCS8qIG1hbmFnZW1lbnQgZnJhbWVzIGFyZSBhbHJlYWR5IGxpbmVhciAqLworCisJaWYgKHNrYi0+bGVuIDwgMjQgKyBzaXplb2YoKm1taWUpKQorCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKworCW1taWUgPSAoc3RydWN0IGllZWU4MDIxMV9tbWllXzE2ICopCisJCShza2ItPmRhdGEgKyBza2ItPmxlbiAtIHNpemVvZigqbW1pZSkpOworCWlmIChtbWllLT5lbGVtZW50X2lkICE9IFdMQU5fRUlEX01NSUUgfHwKKwkgICAgbW1pZS0+bGVuZ3RoICE9IHNpemVvZigqbW1pZSkgLSAyKQorCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsgLyogSW52YWxpZCBNTUlFICovCisKKwliaXBfaXBuX3N3YXAoaXBuLCBtbWllLT5zZXF1ZW5jZV9udW1iZXIpOworCisJaWYgKG1lbWNtcChpcG4sIGtleS0+dS5hZXNfY21hYy5yeF9wbiwgNikgPD0gMCkgeworCQlrZXktPnUuYWVzX2NtYWMucmVwbGF5cysrOworCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKwl9CisKKwlpZiAoIShzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0RFQ1JZUFRFRCkpIHsKKwkJLyogaGFyZHdhcmUgZGlkbid0IGRlY3J5cHQvdmVyaWZ5IE1JQyAqLworCQliaXBfYWFkKHNrYiwgYWFkKTsKKwkJaWVlZTgwMjExX2Flc19jbWFjXzI1NihrZXktPnUuYWVzX2NtYWMudGZtLCBhYWQsCisJCQkJICAgICAgIHNrYi0+ZGF0YSArIDI0LCBza2ItPmxlbiAtIDI0LCBtaWMpOworCQlpZiAobWVtY21wKG1pYywgbW1pZS0+bWljLCBzaXplb2YobW1pZS0+bWljKSkgIT0gMCkgeworCQkJa2V5LT51LmFlc19jbWFjLmljdmVycm9ycysrOworCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CisJCX0KKwl9CisKKwltZW1jcHkoa2V5LT51LmFlc19jbWFjLnJ4X3BuLCBpcG4sIDYpOworCisJLyogUmVtb3ZlIE1NSUUgKi8KKwlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gc2l6ZW9mKCptbWllKSk7CisKKwlyZXR1cm4gUlhfQ09OVElOVUU7Cit9CisKK2llZWU4MDIxMV90eF9yZXN1bHQKK2llZWU4MDIxMV9jcnlwdG9fYWVzX2dtYWNfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvOworCXN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXkgPSB0eC0+a2V5OworCXN0cnVjdCBpZWVlODAyMTFfbW1pZV8xNiAqbW1pZTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOworCXU4IGFhZFsyMF07CisJdTY0IHBuNjQ7CisJdTggbm9uY2VbMTJdOworCisJaWYgKFdBUk5fT04oc2tiX3F1ZXVlX2xlbigmdHgtPnNrYnMpICE9IDEpKQorCQlyZXR1cm4gVFhfRFJPUDsKKworCXNrYiA9IHNrYl9wZWVrKCZ0eC0+c2ticyk7CisKKwlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOworCisJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KQorCQlyZXR1cm4gVFhfQ09OVElOVUU7CisKKwlpZiAoV0FSTl9PTihza2JfdGFpbHJvb20oc2tiKSA8IHNpemVvZigqbW1pZSkpKQorCQlyZXR1cm4gVFhfRFJPUDsKKworCW1taWUgPSAoc3RydWN0IGllZWU4MDIxMV9tbWllXzE2ICopc2tiX3B1dChza2IsIHNpemVvZigqbW1pZSkpOworCW1taWUtPmVsZW1lbnRfaWQgPSBXTEFOX0VJRF9NTUlFOworCW1taWUtPmxlbmd0aCA9IHNpemVvZigqbW1pZSkgLSAyOworCW1taWUtPmtleV9pZCA9IGNwdV90b19sZTE2KGtleS0+Y29uZi5rZXlpZHgpOworCisJLyogUE4gPSBQTiArIDEgKi8KKwlwbjY0ID0gYXRvbWljNjRfaW5jX3JldHVybigma2V5LT51LmFlc19nbWFjLnR4X3BuKTsKKworCWJpcF9pcG5fc2V0NjQobW1pZS0+c2VxdWVuY2VfbnVtYmVyLCBwbjY0KTsKKworCWJpcF9hYWQoc2tiLCBhYWQpOworCisJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOworCW1lbWNweShub25jZSwgaGRyLT5hZGRyMiwgRVRIX0FMRU4pOworCWJpcF9pcG5fc3dhcChub25jZSArIEVUSF9BTEVOLCBtbWllLT5zZXF1ZW5jZV9udW1iZXIpOworCisJLyogTUlDID0gQUVTLUdNQUMoSUdUSywgQUFEIHx8IE1hbmFnZW1lbnQgRnJhbWUgQm9keSB8fCBNTUlFLCAxMjgpICovCisJaWYgKGllZWU4MDIxMV9hZXNfZ21hYyhrZXktPnUuYWVzX2dtYWMudGZtLCBhYWQsIG5vbmNlLAorCQkJICAgICAgIHNrYi0+ZGF0YSArIDI0LCBza2ItPmxlbiAtIDI0LCBtbWllLT5taWMpIDwgMCkKKwkJcmV0dXJuIFRYX0RST1A7CisKKwlyZXR1cm4gVFhfQ09OVElOVUU7Cit9CisKK2llZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9jcnlwdG9fYWVzX2dtYWNfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQoreworCXN0cnVjdCBza19idWZmICpza2IgPSByeC0+c2tiOworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2tleSAqa2V5ID0gcngtPmtleTsKKwlzdHJ1Y3QgaWVlZTgwMjExX21taWVfMTYgKm1taWU7CisJdTggYWFkWzIwXSwgbWljWzE2XSwgaXBuWzZdLCBub25jZVsxMl07CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKworCWlmICghaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIFJYX0NPTlRJTlVFOworCisJLyogbWFuYWdlbWVudCBmcmFtZXMgYXJlIGFscmVhZHkgbGluZWFyICovCisKKwlpZiAoc2tiLT5sZW4gPCAyNCArIHNpemVvZigqbW1pZSkpCisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCisJbW1pZSA9IChzdHJ1Y3QgaWVlZTgwMjExX21taWVfMTYgKikKKwkJKHNrYi0+ZGF0YSArIHNrYi0+bGVuIC0gc2l6ZW9mKCptbWllKSk7CisJaWYgKG1taWUtPmVsZW1lbnRfaWQgIT0gV0xBTl9FSURfTU1JRSB8fAorCSAgICBtbWllLT5sZW5ndGggIT0gc2l6ZW9mKCptbWllKSAtIDIpCisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOyAvKiBJbnZhbGlkIE1NSUUgKi8KKworCWJpcF9pcG5fc3dhcChpcG4sIG1taWUtPnNlcXVlbmNlX251bWJlcik7CisKKwlpZiAobWVtY21wKGlwbiwga2V5LT51LmFlc19nbWFjLnJ4X3BuLCA2KSA8PSAwKSB7CisJCWtleS0+dS5hZXNfZ21hYy5yZXBsYXlzKys7CisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCX0KKworCWlmICghKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfREVDUllQVEVEKSkgeworCQkvKiBoYXJkd2FyZSBkaWRuJ3QgZGVjcnlwdC92ZXJpZnkgTUlDICovCisJCWJpcF9hYWQoc2tiLCBhYWQpOworCisJCW1lbWNweShub25jZSwgaGRyLT5hZGRyMiwgRVRIX0FMRU4pOworCQltZW1jcHkobm9uY2UgKyBFVEhfQUxFTiwgaXBuLCA2KTsKKworCQlpZiAoaWVlZTgwMjExX2Flc19nbWFjKGtleS0+dS5hZXNfZ21hYy50Zm0sIGFhZCwgbm9uY2UsCisJCQkJICAgICAgIHNrYi0+ZGF0YSArIDI0LCBza2ItPmxlbiAtIDI0LAorCQkJCSAgICAgICBtaWMpIDwgMCB8fAorCQkgICAgbWVtY21wKG1pYywgbW1pZS0+bWljLCBzaXplb2YobW1pZS0+bWljKSkgIT0gMCkgeworCQkJa2V5LT51LmFlc19nbWFjLmljdmVycm9ycysrOworCQkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CisJCX0KKwl9CisKKwltZW1jcHkoa2V5LT51LmFlc19nbWFjLnJ4X3BuLCBpcG4sIDYpOworCisJLyogUmVtb3ZlIE1NSUUgKi8KKwlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gc2l6ZW9mKCptbWllKSk7CisKKwlyZXR1cm4gUlhfQ09OVElOVUU7Cit9CisKIGllZWU4MDIxMV90eF9yZXN1bHQKIGllZWU4MDIxMV9jcnlwdG9faHdfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQogewpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dwYS5oIGIvbmV0L21hYzgwMjExL3dwYS5oCmluZGV4IDYyZTVhMTIuLmQ5ODAxMWUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93cGEuaAorKysgYi9uZXQvbWFjODAyMTEvd3BhLmgKQEAgLTI0LDE3ICsyNCwzMiBAQAogaWVlZTgwMjExX2NyeXB0b190a2lwX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCk7CiAKIGllZWU4MDIxMV90eF9yZXN1bHQKLWllZWU4MDIxMV9jcnlwdG9fY2NtcF9lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpOworaWVlZTgwMjExX2NyeXB0b19jY21wX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBtaWNfbGVuKTsKIGllZWU4MDIxMV9yeF9yZXN1bHQKLWllZWU4MDIxMV9jcnlwdG9fY2NtcF9kZWNyeXB0KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpOworaWVlZTgwMjExX2NyeXB0b19jY21wX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBtaWNfbGVuKTsKIAogaWVlZTgwMjExX3R4X3Jlc3VsdAogaWVlZTgwMjExX2NyeXB0b19hZXNfY21hY19lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpOworaWVlZTgwMjExX3R4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b19hZXNfY21hY18yNTZfZW5jcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KTsKIGllZWU4MDIxMV9yeF9yZXN1bHQKIGllZWU4MDIxMV9jcnlwdG9fYWVzX2NtYWNfZGVjcnlwdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KTsKK2llZWU4MDIxMV9yeF9yZXN1bHQKK2llZWU4MDIxMV9jcnlwdG9fYWVzX2NtYWNfMjU2X2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCk7CitpZWVlODAyMTFfdHhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2Flc19nbWFjX2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCk7CitpZWVlODAyMTFfcnhfcmVzdWx0CitpZWVlODAyMTFfY3J5cHRvX2Flc19nbWFjX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCk7CiBpZWVlODAyMTFfdHhfcmVzdWx0CiBpZWVlODAyMTFfY3J5cHRvX2h3X2VuY3J5cHQoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCk7CiBpZWVlODAyMTFfcnhfcmVzdWx0CiBpZWVlODAyMTFfY3J5cHRvX2h3X2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCk7CiAKK2llZWU4MDIxMV90eF9yZXN1bHQKK2llZWU4MDIxMV9jcnlwdG9fZ2NtcF9lbmNyeXB0KHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpOworaWVlZTgwMjExX3J4X3Jlc3VsdAoraWVlZTgwMjExX2NyeXB0b19nY21wX2RlY3J5cHQoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCk7CisKICNlbmRpZiAvKiBXUEFfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjE1NC9jZmcuYyBiL25ldC9tYWM4MDIxNTQvY2ZnLmMKaW5kZXggYzAzNTcwOC4uNWQ5ZjY4YyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjE1NC9jZmcuYworKysgYi9uZXQvbWFjODAyMTU0L2NmZy5jCkBAIC01MSwxMCArNTEsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICplcnI7CiAKIAllcnIgPSBpZWVlODAyMTU0X2lmX2FkZChsb2NhbCwgbmFtZSwgdHlwZSwgZXh0ZW5kZWRfYWRkcik7Ci0JaWYgKElTX0VSUihlcnIpKQotCQlyZXR1cm4gUFRSX0VSUihlcnIpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhlcnIpOwogfQogCiBzdGF0aWMgaW50CkBAIC04Nyw2ICs4NCwyNiBAQAogfQogCiBzdGF0aWMgaW50CitpZWVlODAyMTU0X3NldF9jY2FfbW9kZShzdHJ1Y3Qgd3Bhbl9waHkgKndwYW5fcGh5LAorCQkJY29uc3Qgc3RydWN0IHdwYW5fcGh5X2NjYSAqY2NhKQoreworCXN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCA9IHdwYW5fcGh5X3ByaXYod3Bhbl9waHkpOworCWludCByZXQ7CisKKwlBU1NFUlRfUlROTCgpOworCisJLyogY2hlY2sgaWYgcGh5IHN1cHBvcnQgdGhpcyBzZXR0aW5nICovCisJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjE1NF9IV19DQ0FfTU9ERSkpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldCA9IGRydl9zZXRfY2NhX21vZGUobG9jYWwsIGNjYSk7CisJaWYgKCFyZXQpCisJCXdwYW5fcGh5LT5jY2EgPSAqY2NhOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAogaWVlZTgwMjE1NF9zZXRfcGFuX2lkKHN0cnVjdCB3cGFuX3BoeSAqd3Bhbl9waHksIHN0cnVjdCB3cGFuX2RldiAqd3Bhbl9kZXYsCiAJCSAgICAgIF9fbGUxNiBwYW5faWQpCiB7CkBAIC0yMDEsNiArMjE4LDcgQEAKIAkuYWRkX3ZpcnR1YWxfaW50ZiA9IGllZWU4MDIxNTRfYWRkX2lmYWNlLAogCS5kZWxfdmlydHVhbF9pbnRmID0gaWVlZTgwMjE1NF9kZWxfaWZhY2UsCiAJLnNldF9jaGFubmVsID0gaWVlZTgwMjE1NF9zZXRfY2hhbm5lbCwKKwkuc2V0X2NjYV9tb2RlID0gaWVlZTgwMjE1NF9zZXRfY2NhX21vZGUsCiAJLnNldF9wYW5faWQgPSBpZWVlODAyMTU0X3NldF9wYW5faWQsCiAJLnNldF9zaG9ydF9hZGRyID0gaWVlZTgwMjE1NF9zZXRfc2hvcnRfYWRkciwKIAkuc2V0X2JhY2tvZmZfZXhwb25lbnQgPSBpZWVlODAyMTU0X3NldF9iYWNrb2ZmX2V4cG9uZW50LApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjE1NC9kcml2ZXItb3BzLmggYi9uZXQvbWFjODAyMTU0L2RyaXZlci1vcHMuaAppbmRleCBmMjFlODY0Li45ODE4MGE5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTU0L2RyaXZlci1vcHMuaAorKysgYi9uZXQvbWFjODAyMTU0L2RyaXZlci1vcHMuaApAQCAtNzAsNyArNzAsOCBAQAogCXJldHVybiBsb2NhbC0+b3BzLT5zZXRfdHhwb3dlcigmbG9jYWwtPmh3LCBkYm0pOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBkcnZfc2V0X2NjYV9tb2RlKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwgdTggY2NhX21vZGUpCitzdGF0aWMgaW5saW5lIGludCBkcnZfc2V0X2NjYV9tb2RlKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwKKwkJCQkgICBjb25zdCBzdHJ1Y3Qgd3Bhbl9waHlfY2NhICpjY2EpCiB7CiAJbWlnaHRfc2xlZXAoKTsKIApAQCAtNzksNyArODAsNyBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCi0JcmV0dXJuIGxvY2FsLT5vcHMtPnNldF9jY2FfbW9kZSgmbG9jYWwtPmh3LCBjY2FfbW9kZSk7CisJcmV0dXJuIGxvY2FsLT5vcHMtPnNldF9jY2FfbW9kZSgmbG9jYWwtPmh3LCBjY2EpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkcnZfc2V0X2xidF9tb2RlKHN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCwgYm9vbCBtb2RlKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjE1NC9pZmFjZS5jIGIvbmV0L21hYzgwMjE1NC9pZmFjZS5jCmluZGV4IDlhZTg5MzAuLjZmYjZiZGYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxNTQvaWZhY2UuYworKysgYi9uZXQvbWFjODAyMTU0L2lmYWNlLmMKQEAgLTEzNywyNSArMTM3LDExIEBACiBzdGF0aWMgaW50IG1hYzgwMjE1NF9zbGF2ZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjE1NF9ERVZfVE9fU1VCX0lGKGRldik7Ci0Jc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnN1YmlmOwogCXN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlpbnQgcmVzID0gMDsKIAogCUFTU0VSVF9SVE5MKCk7CiAKLQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTU0X0lGVFlQRV9OT0RFKSB7Ci0JCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+aWZsaXN0X210eCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViaWYsICZzZGF0YS0+bG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJCWlmIChzdWJpZiAhPSBzZGF0YSAmJgotCQkJICAgIHN1YmlmLT52aWYudHlwZSA9PSBzZGF0YS0+dmlmLnR5cGUgJiYKLQkJCSAgICBpZWVlODAyMTU0X3NkYXRhX3J1bm5pbmcoc3ViaWYpKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmlmbGlzdF9tdHgpOwotCQkJCXJldHVybiAtRUJVU1k7Ci0JCQl9Ci0JCX0KLQkJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmlmbGlzdF9tdHgpOwotCX0KLQogCXNldF9iaXQoU0RBVEFfU1RBVEVfUlVOTklORywgJnNkYXRhLT5zdGF0ZSk7CiAKIAlpZiAoIWxvY2FsLT5vcGVuX2NvdW50KSB7CkBAIC0xNzUsNiArMTYxLDg4IEBACiAJcmV0dXJuIHJlczsKIH0KIAorc3RhdGljIGludAoraWVlZTgwMjE1NF9jaGVja19tYWNfc2V0dGluZ3Moc3RydWN0IGllZWU4MDIxNTRfbG9jYWwgKmxvY2FsLAorCQkJICAgICAgc3RydWN0IHdwYW5fZGV2ICp3cGFuX2RldiwKKwkJCSAgICAgIHN0cnVjdCB3cGFuX2RldiAqbndwYW5fZGV2KQoreworCUFTU0VSVF9SVE5MKCk7CisKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjE1NF9IV19QUk9NSVNDVU9VUykgeworCQlpZiAod3Bhbl9kZXYtPnByb21pc2N1b3VzX21vZGUgIT0gbndwYW5fZGV2LT5wcm9taXNjdW91c19tb2RlKQorCQkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjE1NF9IV19BRklMVCkgeworCQlpZiAod3Bhbl9kZXYtPnBhbl9pZCAhPSBud3Bhbl9kZXYtPnBhbl9pZCkKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJaWYgKHdwYW5fZGV2LT5zaG9ydF9hZGRyICE9IG53cGFuX2Rldi0+c2hvcnRfYWRkcikKKwkJCXJldHVybiAtRUJVU1k7CisKKwkJaWYgKHdwYW5fZGV2LT5leHRlbmRlZF9hZGRyICE9IG53cGFuX2Rldi0+ZXh0ZW5kZWRfYWRkcikKKwkJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxNTRfSFdfQ1NNQV9QQVJBTVMpIHsKKwkJaWYgKHdwYW5fZGV2LT5taW5fYmUgIT0gbndwYW5fZGV2LT5taW5fYmUpCisJCQlyZXR1cm4gLUVCVVNZOworCisJCWlmICh3cGFuX2Rldi0+bWF4X2JlICE9IG53cGFuX2Rldi0+bWF4X2JlKQorCQkJcmV0dXJuIC1FQlVTWTsKKworCQlpZiAod3Bhbl9kZXYtPmNzbWFfcmV0cmllcyAhPSBud3Bhbl9kZXYtPmNzbWFfcmV0cmllcykKKwkJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxNTRfSFdfRlJBTUVfUkVUUklFUykgeworCQlpZiAod3Bhbl9kZXYtPmZyYW1lX3JldHJpZXMgIT0gbndwYW5fZGV2LT5mcmFtZV9yZXRyaWVzKQorCQkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjE1NF9IV19MQlQpIHsKKwkJaWYgKHdwYW5fZGV2LT5sYnQgIT0gbndwYW5fZGV2LT5sYnQpCisJCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitpZWVlODAyMTU0X2NoZWNrX2NvbmN1cnJlbnRfaWZhY2Uoc3RydWN0IGllZWU4MDIxNTRfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgZW51bSBubDgwMjE1NF9pZnR5cGUgaWZ0eXBlKQoreworCXN0cnVjdCBpZWVlODAyMTU0X2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3Qgd3Bhbl9kZXYgKndwYW5fZGV2ID0gJnNkYXRhLT53cGFuX2RldjsKKwlzdHJ1Y3QgaWVlZTgwMjE1NF9zdWJfaWZfZGF0YSAqbnNkYXRhOworCisJLyogd2UgaG9sZCB0aGUgUlROTCBoZXJlIHNvIGNhbiBzYWZlbHkgd2FsayB0aGUgbGlzdCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkobnNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKG5zZGF0YSAhPSBzZGF0YSAmJiBpZWVlODAyMTU0X3NkYXRhX3J1bm5pbmcobnNkYXRhKSkgeworCQkJaW50IHJldDsKKworCQkJLyogVE9ETyBjdXJyZW50bHkgd2UgZG9uJ3Qgc3VwcG9ydCBtdWx0aXBsZSBub2RlIHR5cGVzCisJCQkgKiB3ZSBuZWVkIHRvIHJ1biBza2JfY2xvbmUgYXQgcnggcGF0aC4gQ2hlY2sgaWYgdGhlcmUKKwkJCSAqIGV4aXN0IHJlYWxseSBhbiB1c2UgY2FzZSBpZiB3ZSBuZWVkIHRvIHN1cHBvcnQKKwkJCSAqIG11bHRpcGxlIG5vZGUgdHlwZXMgYXQgdGhlIHNhbWUgdGltZS4KKwkJCSAqLworCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjE1NF9JRlRZUEVfTk9ERSAmJgorCQkJICAgIG5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxNTRfSUZUWVBFX05PREUpCisJCQkJcmV0dXJuIC1FQlVTWTsKKworCQkJLyogY2hlY2sgYWxsIHBoeSBtYWMgc3VibGF5ZXIgc2V0dGluZ3MgYXJlIHRoZSBzYW1lLgorCQkJICogV2UgaGF2ZSBvbmx5IG9uZSBwaHksIGRpZmZlcmVudCB2YWx1ZXMgbWFrZXMgdHJvdWJsZS4KKwkJCSAqLworCQkJcmV0ID0gaWVlZTgwMjE1NF9jaGVja19tYWNfc2V0dGluZ3MobG9jYWwsIHdwYW5fZGV2LAorCQkJCQkJCSAgICAmbnNkYXRhLT53cGFuX2Rldik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbWFjODAyMTU0X3dwYW5fb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCByYzsKQEAgLTE4Myw2ICsyNTEsMTAgQEAKIAlzdHJ1Y3Qgd3Bhbl9kZXYgKndwYW5fZGV2ID0gJnNkYXRhLT53cGFuX2RldjsKIAlzdHJ1Y3Qgd3Bhbl9waHkgKnBoeSA9IHNkYXRhLT5sb2NhbC0+cGh5OwogCisJcmMgPSBpZWVlODAyMTU0X2NoZWNrX2NvbmN1cnJlbnRfaWZhY2Uoc2RhdGEsIHNkYXRhLT52aWYudHlwZSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCiAJcmMgPSBtYWM4MDIxNTRfc2xhdmVfb3BlbihkZXYpOwogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxNTQvbWFjX2NtZC5jIGIvbmV0L21hYzgwMjE1NC9tYWNfY21kLmMKaW5kZXggNmFhY2IxOC4uYmRjY2I0ZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjE1NC9tYWNfY21kLmMKKysrIGIvbmV0L21hYzgwMjE1NC9tYWNfY21kLmMKQEAgLTgxLDcgKzgxLDcgQEAKIAogCS8qIFBIWSAqLwogCXdwYW5fZGV2LT53cGFuX3BoeS0+dHJhbnNtaXRfcG93ZXIgPSBwYXJhbXMtPnRyYW5zbWl0X3Bvd2VyOwotCXdwYW5fZGV2LT53cGFuX3BoeS0+Y2NhX21vZGUgPSBwYXJhbXMtPmNjYV9tb2RlOworCXdwYW5fZGV2LT53cGFuX3BoeS0+Y2NhID0gcGFyYW1zLT5jY2E7CiAJd3Bhbl9kZXYtPndwYW5fcGh5LT5jY2FfZWRfbGV2ZWwgPSBwYXJhbXMtPmNjYV9lZF9sZXZlbDsKIAogCS8qIE1BQyAqLwpAQCAtOTgsNyArOTgsNyBAQAogCX0KIAogCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTU0X0hXX0NDQV9NT0RFKSB7Ci0JCXJldCA9IGRydl9zZXRfY2NhX21vZGUobG9jYWwsIHBhcmFtcy0+Y2NhX21vZGUpOworCQlyZXQgPSBkcnZfc2V0X2NjYV9tb2RlKGxvY2FsLCAmcGFyYW1zLT5jY2EpOwogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMTIyLDcgKzEyMiw3IEBACiAKIAkvKiBQSFkgKi8KIAlwYXJhbXMtPnRyYW5zbWl0X3Bvd2VyID0gd3Bhbl9kZXYtPndwYW5fcGh5LT50cmFuc21pdF9wb3dlcjsKLQlwYXJhbXMtPmNjYV9tb2RlID0gd3Bhbl9kZXYtPndwYW5fcGh5LT5jY2FfbW9kZTsKKwlwYXJhbXMtPmNjYSA9IHdwYW5fZGV2LT53cGFuX3BoeS0+Y2NhOwogCXBhcmFtcy0+Y2NhX2VkX2xldmVsID0gd3Bhbl9kZXYtPndwYW5fcGh5LT5jY2FfZWRfbGV2ZWw7CiAKIAkvKiBNQUMgKi8KZGlmZiAtLWdpdCBhL25ldC9tcGxzL21wbHNfZ3NvLmMgYi9uZXQvbXBscy9tcGxzX2dzby5jCmluZGV4IDM0OTI5NWQuLjgwOWRmNTMgMTAwNjQ0Ci0tLSBhL25ldC9tcGxzL21wbHNfZ3NvLmMKKysrIGIvbmV0L21wbHMvbXBsc19nc28uYwpAQCAtNjAsMTQgKzYwLDE0IEBACiAJcmV0dXJuIHNlZ3M7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X29mZmxvYWQgbXBsc19tY19vZmZsb2FkID0geworc3RhdGljIHN0cnVjdCBwYWNrZXRfb2ZmbG9hZCBtcGxzX21jX29mZmxvYWQgX19yZWFkX21vc3RseSA9IHsKIAkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX01QTFNfTUMpLAogCS5jYWxsYmFja3MgPSB7CiAJCS5nc29fc2VnbWVudCAgICA9CW1wbHNfZ3NvX3NlZ21lbnQsCiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X29mZmxvYWQgbXBsc191Y19vZmZsb2FkID0geworc3RhdGljIHN0cnVjdCBwYWNrZXRfb2ZmbG9hZCBtcGxzX3VjX29mZmxvYWQgX19yZWFkX21vc3RseSA9IHsKIAkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX01QTFNfVUMpLAogCS5jYWxsYmFja3MgPSB7CiAJCS5nc29fc2VnbWVudCAgICA9CW1wbHNfZ3NvX3NlZ21lbnQsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwppbmRleCA5OTBkZWNiLi5iODdjYTMyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKQEAgLTY1OSwxNiArNjU5LDI0IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBpcF92c19yb3V0ZV9tZV9oYXJkZXIoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKKwlpZiAoIXN5c2N0bF9zbmF0X3Jlcm91dGUoc2tiKSkKKwkJcmV0dXJuIDA7CisJLyogUmVyb3V0ZSByZXBsaWVzIG9ubHkgdG8gcmVtb3RlIGNsaWVudHMgKEZPUldBUkQgYW5kIExPQ0FMX09VVCkgKi8KKwlpZiAoTkZfSU5FVF9MT0NBTF9JTiA9PSBob29rbnVtKQorCQlyZXR1cm4gMDsKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogCWlmIChhZiA9PSBBRl9JTkVUNikgewotCQlpZiAoc3lzY3RsX3NuYXRfcmVyb3V0ZShza2IpICYmIGlwNl9yb3V0ZV9tZV9oYXJkZXIoc2tiKSAhPSAwKQorCQlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2JfZHN0KHNrYik7CisKKwkJaWYgKGRzdC0+ZGV2ICYmICEoZHN0LT5kZXYtPmZsYWdzICYgSUZGX0xPT1BCQUNLKSAmJgorCQkgICAgaXA2X3JvdXRlX21lX2hhcmRlcihza2IpICE9IDApCiAJCQlyZXR1cm4gMTsKIAl9IGVsc2UKICNlbmRpZgotCQlpZiAoKHN5c2N0bF9zbmF0X3Jlcm91dGUoc2tiKSB8fAotCQkgICAgIHNrYl9ydGFibGUoc2tiKS0+cnRfZmxhZ3MgJiBSVENGX0xPQ0FMKSAmJgorCQlpZiAoIShza2JfcnRhYmxlKHNrYiktPnJ0X2ZsYWdzICYgUlRDRl9MT0NBTCkgJiYKIAkJICAgIGlwX3JvdXRlX21lX2hhcmRlcihza2IsIFJUTl9MT0NBTCkgIT0gMCkKIAkJCXJldHVybiAxOwogCkBAIC03OTEsNyArNzk5LDggQEAKIAkJCQl1bmlvbiBuZl9pbmV0X2FkZHIgKnNuZXQsCiAJCQkJX191OCBwcm90b2NvbCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLAogCQkJCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCi0JCQkJdW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGlobCkKKwkJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1bnNpZ25lZCBpbnQgaWhsLAorCQkJCXVuc2lnbmVkIGludCBob29rbnVtKQogewogCXVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDsKIApAQCAtODIxLDcgKzgzMCw3IEBACiAjZW5kaWYKIAkJaXBfdnNfbmF0X2ljbXAoc2tiLCBwcCwgY3AsIDEpOwogCi0JaWYgKGlwX3ZzX3JvdXRlX21lX2hhcmRlcihhZiwgc2tiKSkKKwlpZiAoaXBfdnNfcm91dGVfbWVfaGFyZGVyKGFmLCBza2IsIGhvb2tudW0pKQogCQlnb3RvIG91dDsKIAogCS8qIGRvIHRoZSBzdGF0aXN0aWNzIGFuZCBwdXQgaXQgYmFjayAqLwpAQCAtOTE2LDcgKzkyNSw3IEBACiAKIAlzbmV0LmlwID0gaXBoLT5zYWRkcjsKIAlyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVCwgc2tiLCAmc25ldCwgY2loLT5wcm90b2NvbCwgY3AsCi0JCQkJICAgIHBwLCBjaXBoLmxlbiwgaWhsKTsKKwkJCQkgICAgcHAsIGNpcGgubGVuLCBpaGwsIGhvb2tudW0pOwogfQogCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKQEAgLTk4MSw3ICs5OTAsOCBAQAogCXNuZXQuaW42ID0gY2lwaC5zYWRkci5pbjY7CiAJd3JpdGFibGUgPSBjaXBoLmxlbjsKIAlyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlX2ljbXAoQUZfSU5FVDYsIHNrYiwgJnNuZXQsIGNpcGgucHJvdG9jb2wsIGNwLAotCQkJCSAgICBwcCwgd3JpdGFibGUsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOworCQkJCSAgICBwcCwgd3JpdGFibGUsIHNpemVvZihzdHJ1Y3QgaXB2NmhkciksCisJCQkJICAgIGhvb2tudW0pOwogfQogI2VuZGlmCiAKQEAgLTEwNDAsNyArMTA1MCw4IEBACiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQKIGhhbmRsZV9yZXNwb25zZShpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b19kYXRhICpwZCwKLQkJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCkKKwkJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCwKKwkJdW5zaWduZWQgaW50IGhvb2tudW0pCiB7CiAJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCA9IHBkLT5wcDsKIApAQCAtMTA3OCw3ICsxMDg5LDcgQEAKIAkgKiBpZiBpdCBjYW1lIGZyb20gdGhpcyBtYWNoaW5lIGl0c2VsZi4gIFNvIHJlLWNvbXB1dGUKIAkgKiB0aGUgcm91dGluZyBpbmZvcm1hdGlvbi4KIAkgKi8KLQlpZiAoaXBfdnNfcm91dGVfbWVfaGFyZGVyKGFmLCBza2IpKQorCWlmIChpcF92c19yb3V0ZV9tZV9oYXJkZXIoYWYsIHNrYiwgaG9va251bSkpCiAJCWdvdG8gZHJvcDsKIAogCUlQX1ZTX0RCR19QS1QoMTAsIGFmLCBwcCwgc2tiLCAwLCAiQWZ0ZXIgU05BVCIpOwpAQCAtMTE4MSw3ICsxMTkyLDcgQEAKIAljcCA9IHBwLT5jb25uX291dF9nZXQoYWYsIHNrYiwgJmlwaCwgMCk7CiAKIAlpZiAobGlrZWx5KGNwKSkKLQkJcmV0dXJuIGhhbmRsZV9yZXNwb25zZShhZiwgc2tiLCBwZCwgY3AsICZpcGgpOworCQlyZXR1cm4gaGFuZGxlX3Jlc3BvbnNlKGFmLCBza2IsIHBkLCBjcCwgJmlwaCwgaG9va251bSk7CiAJaWYgKHN5c2N0bF9uYXRfaWNtcF9zZW5kKG5ldCkgJiYKIAkgICAgKHBwLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fAogCSAgICAgcHAtPnByb3RvY29sID09IElQUFJPVE9fVURQIHx8CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKaW5kZXggYjgyOTVhNC4uZTU1NzU5MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwpAQCAtMjg4Nyw3ICsyODg3LDggQEAKIAlpZiAoaXBfdnNfZ2VubF9maWxsX3NlcnZpY2Uoc2tiLCBzdmMpIDwgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gZ2VubG1zZ19lbmQoc2tiLCBoZHIpOworCWdlbmxtc2dfZW5kKHNrYiwgaGRyKTsKKwlyZXR1cm4gMDsKIAogbmxhX3B1dF9mYWlsdXJlOgogCWdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTsKQEAgLTMwNzksNyArMzA4MCw4IEBACiAJaWYgKGlwX3ZzX2dlbmxfZmlsbF9kZXN0KHNrYiwgZGVzdCkgPCAwKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCXJldHVybiBnZW5sbXNnX2VuZChza2IsIGhkcik7CisJZ2VubG1zZ19lbmQoc2tiLCBoZHIpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJZ2VubG1zZ19jYW5jZWwoc2tiLCBoZHIpOwpAQCAtMzIxNSw3ICszMjE3LDggQEAKIAlpZiAoaXBfdnNfZ2VubF9maWxsX2RhZW1vbihza2IsIHN0YXRlLCBtY2FzdF9pZm4sIHN5bmNpZCkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JcmV0dXJuIGdlbmxtc2dfZW5kKHNrYiwgaGRyKTsKKwlnZW5sbXNnX2VuZChza2IsIGhkcik7CisJcmV0dXJuIDA7CiAKIG5sYV9wdXRfZmFpbHVyZToKIAlnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKaW5kZXggNDZkMWIyNi4uMTNmYWQ4NiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwpAQCAtMTQyNCwxMiArMTQyNCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9mcmVlX2hhc2h0YWJsZSk7CiAKLXZvaWQgbmZfY29ubnRyYWNrX2ZsdXNoX3JlcG9ydChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwb3J0aWQsIGludCByZXBvcnQpCi17Ci0JbmZfY3RfaXRlcmF0ZV9jbGVhbnVwKG5ldCwga2lsbF9hbGwsIE5VTEwsIHBvcnRpZCwgcmVwb3J0KTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19mbHVzaF9yZXBvcnQpOwotCiBzdGF0aWMgaW50IHVudHJhY2tfcmVmcyh2b2lkKQogewogCWludCBjbnQgPSAwLCBjcHU7CkBAIC0xNjIyLDEzICsxNjE2LDE4IEBACiAJZm9yIChpID0gMDsgaSA8IENPTk5UUkFDS19MT0NLUzsgaSsrKQogCQlzcGluX2xvY2tfaW5pdCgmbmZfY29ubnRyYWNrX2xvY2tzW2ldKTsKIAotCS8qIElkZWEgZnJvbSB0Y3AuYzogdXNlIDEvMTYzODQgb2YgbWVtb3J5LiAgT24gaTM4NjogMzJNQgotCSAqIG1hY2hpbmUgaGFzIDUxMiBidWNrZXRzLiA+PSAxR0IgbWFjaGluZXMgaGF2ZSAxNjM4NCBidWNrZXRzLiAqLwogCWlmICghbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplKSB7CisJCS8qIElkZWEgZnJvbSB0Y3AuYzogdXNlIDEvMTYzODQgb2YgbWVtb3J5LgorCQkgKiBPbiBpMzg2OiAzMk1CIG1hY2hpbmUgaGFzIDUxMiBidWNrZXRzLgorCQkgKiA+PSAxR0IgbWFjaGluZXMgaGF2ZSAxNjM4NCBidWNrZXRzLgorCQkgKiA+PSA0R0IgbWFjaGluZXMgaGF2ZSA2NTUzNiBidWNrZXRzLgorCQkgKi8KIAkJbmZfY29ubnRyYWNrX2h0YWJsZV9zaXplCiAJCQk9ICgoKHRvdGFscmFtX3BhZ2VzIDw8IFBBR0VfU0hJRlQpIC8gMTYzODQpCiAJCQkgICAvIHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkpOwotCQlpZiAodG90YWxyYW1fcGFnZXMgPiAoMTAyNCAqIDEwMjQgKiAxMDI0IC8gUEFHRV9TSVpFKSkKKwkJaWYgKHRvdGFscmFtX3BhZ2VzID4gKDQgKiAoMTAyNCAqIDEwMjQgKiAxMDI0IC8gUEFHRV9TSVpFKSkpCisJCQluZl9jb25udHJhY2tfaHRhYmxlX3NpemUgPSA2NTUzNjsKKwkJZWxzZSBpZiAodG90YWxyYW1fcGFnZXMgPiAoMTAyNCAqIDEwMjQgKiAxMDI0IC8gUEFHRV9TSVpFKSkKIAkJCW5mX2Nvbm50cmFja19odGFibGVfc2l6ZSA9IDE2Mzg0OwogCQlpZiAobmZfY29ubnRyYWNrX2h0YWJsZV9zaXplIDwgMzIpCiAJCQluZl9jb25udHJhY2tfaHRhYmxlX3NpemUgPSAzMjsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCAxYmQ5ZWQ5Li5kMWMyMzk0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC03NDksMTMgKzc0OSw0NyBAQAogCXJldHVybiAwOwogfQogCi1zdHJ1Y3QgY3RuZXRsaW5rX2R1bXBfZmlsdGVyIHsKK3N0cnVjdCBjdG5ldGxpbmtfZmlsdGVyIHsKIAlzdHJ1Y3QgewogCQl1X2ludDMyX3QgdmFsOwogCQl1X2ludDMyX3QgbWFzazsKIAl9IG1hcms7CiB9OwogCitzdGF0aWMgc3RydWN0IGN0bmV0bGlua19maWx0ZXIgKgorY3RuZXRsaW5rX2FsbG9jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pCit7CisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLCisJc3RydWN0IGN0bmV0bGlua19maWx0ZXIgKmZpbHRlcjsKKworCWZpbHRlciA9IGt6YWxsb2Moc2l6ZW9mKCpmaWx0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZmlsdGVyID09IE5VTEwpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJZmlsdGVyLT5tYXJrLnZhbCA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX01BUktdKSk7CisJZmlsdGVyLT5tYXJrLm1hc2sgPSBudG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9NQVJLX01BU0tdKSk7CisKKwlyZXR1cm4gZmlsdGVyOworI2Vsc2UKKwlyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7CisjZW5kaWYKK30KKworc3RhdGljIGludCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoKHN0cnVjdCBuZl9jb25uICpjdCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY3RuZXRsaW5rX2ZpbHRlciAqZmlsdGVyID0gZGF0YTsKKworCWlmIChmaWx0ZXIgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CisKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX01BUksKKwlpZiAoKGN0LT5tYXJrICYgZmlsdGVyLT5tYXJrLm1hc2spID09IGZpbHRlci0+bWFyay52YWwpCisJCXJldHVybiAxOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludAogY3RuZXRsaW5rX2R1bXBfdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewpAQCAtNzY4LDEwICs4MDIsNiBAQAogCWludCByZXM7CiAJc3BpbmxvY2tfdCAqbG9ja3A7CiAKLSNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX01BUksKLQljb25zdCBzdHJ1Y3QgY3RuZXRsaW5rX2R1bXBfZmlsdGVyICpmaWx0ZXIgPSBjYi0+ZGF0YTsKLSNlbmRpZgotCiAJbGFzdCA9IChzdHJ1Y3QgbmZfY29ubiAqKWNiLT5hcmdzWzFdOwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwpAQCAtNzk4LDEyICs4MjgsOSBAQAogCQkJCQljb250aW51ZTsKIAkJCQljYi0+YXJnc1sxXSA9IDA7CiAJCQl9Ci0jaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19NQVJLCi0JCQlpZiAoZmlsdGVyICYmICEoKGN0LT5tYXJrICYgZmlsdGVyLT5tYXJrLm1hc2spID09Ci0JCQkJCWZpbHRlci0+bWFyay52YWwpKSB7CisJCQlpZiAoIWN0bmV0bGlua19maWx0ZXJfbWF0Y2goY3QsIGNiLT5kYXRhKSkKIAkJCQljb250aW51ZTsKLQkJCX0KLSNlbmRpZgorCiAJCQlyY3VfcmVhZF9sb2NrKCk7CiAJCQlyZXMgPQogCQkJY3RuZXRsaW5rX2ZpbGxfaW5mbyhza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucG9ydGlkLApAQCAtMTAwMSw2ICsxMDI4LDI1IEBACiAJCQkJICAgIC5sZW4gPSBORl9DVF9MQUJFTFNfTUFYX1NJWkUgfSwKIH07CiAKK3N0YXRpYyBpbnQgY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sCisJCQkJICAgICB1MzIgcG9ydGlkLCBpbnQgcmVwb3J0KQoreworCXN0cnVjdCBjdG5ldGxpbmtfZmlsdGVyICpmaWx0ZXIgPSBOVUxMOworCisJaWYgKGNkYVtDVEFfTUFSS10gJiYgY2RhW0NUQV9NQVJLX01BU0tdKSB7CisJCWZpbHRlciA9IGN0bmV0bGlua19hbGxvY19maWx0ZXIoY2RhKTsKKwkJaWYgKElTX0VSUihmaWx0ZXIpKQorCQkJcmV0dXJuIFBUUl9FUlIoZmlsdGVyKTsKKwl9CisKKwluZl9jdF9pdGVyYXRlX2NsZWFudXAobmV0LCBjdG5ldGxpbmtfZmlsdGVyX21hdGNoLCBmaWx0ZXIsCisJCQkgICAgICBwb3J0aWQsIHJlcG9ydCk7CisJa2ZyZWUoZmlsdGVyKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50CiBjdG5ldGxpbmtfZGVsX2Nvbm50cmFjayhzdHJ1Y3Qgc29jayAqY3RubCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCWNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLApAQCAtMTAyNCwxMSArMTA3MCw5IEBACiAJZWxzZSBpZiAoY2RhW0NUQV9UVVBMRV9SRVBMWV0pCiAJCWVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZShjZGEsICZ0dXBsZSwgQ1RBX1RVUExFX1JFUExZLCB1Myk7CiAJZWxzZSB7Ci0JCS8qIEZsdXNoIHRoZSB3aG9sZSB0YWJsZSAqLwotCQluZl9jb25udHJhY2tfZmx1c2hfcmVwb3J0KG5ldCwKLQkJCQkJIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQsCi0JCQkJCSBubG1zZ19yZXBvcnQobmxoKSk7Ci0JCXJldHVybiAwOworCQlyZXR1cm4gY3RuZXRsaW5rX2ZsdXNoX2Nvbm50cmFjayhuZXQsIGNkYSwKKwkJCQkJCSBORVRMSU5LX0NCKHNrYikucG9ydGlkLAorCQkJCQkJIG5sbXNnX3JlcG9ydChubGgpKTsKIAl9CiAKIAlpZiAoZXJyIDwgMCkKQEAgLTEwNzYsMjEgKzExMjAsMTYgQEAKIAkJCS5kdW1wID0gY3RuZXRsaW5rX2R1bXBfdGFibGUsCiAJCQkuZG9uZSA9IGN0bmV0bGlua19kb25lLAogCQl9OwotI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfTUFSSworCiAJCWlmIChjZGFbQ1RBX01BUktdICYmIGNkYVtDVEFfTUFSS19NQVNLXSkgewotCQkJc3RydWN0IGN0bmV0bGlua19kdW1wX2ZpbHRlciAqZmlsdGVyOworCQkJc3RydWN0IGN0bmV0bGlua19maWx0ZXIgKmZpbHRlcjsKIAotCQkJZmlsdGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGN0bmV0bGlua19kdW1wX2ZpbHRlciksCi0JCQkJCSBHRlBfQVRPTUlDKTsKLQkJCWlmIChmaWx0ZXIgPT0gTlVMTCkKLQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCWZpbHRlciA9IGN0bmV0bGlua19hbGxvY19maWx0ZXIoY2RhKTsKKwkJCWlmIChJU19FUlIoZmlsdGVyKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihmaWx0ZXIpOwogCi0JCQlmaWx0ZXItPm1hcmsudmFsID0gbnRvaGwobmxhX2dldF9iZTMyKGNkYVtDVEFfTUFSS10pKTsKLQkJCWZpbHRlci0+bWFyay5tYXNrID0KLQkJCQludG9obChubGFfZ2V0X2JlMzIoY2RhW0NUQV9NQVJLX01BU0tdKSk7CiAJCQljLmRhdGEgPSBmaWx0ZXI7CiAJCX0KLSNlbmRpZgogCQlyZXR1cm4gbmV0bGlua19kdW1wX3N0YXJ0KGN0bmwsIHNrYiwgbmxoLCAmYyk7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zZXFhZGouYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NlcWFkai5jCmluZGV4IGY2ZTJhZTkuLmNlM2U4NDBjOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2VxYWRqLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2VxYWRqLmMKQEAgLTk4LDkgKzk4LDkgQEAKIAkJCW5ld19lbmRfc2VxID0gaHRvbmwobnRvaGwoc2Fjay0+ZW5kX3NlcSkgLQogCQkJCSAgICAgIHNlcS0+b2Zmc2V0X2JlZm9yZSk7CiAKLQkJcHJfZGVidWcoInNhY2tfYWRqdXN0OiBzdGFydF9zZXE6ICVkLT4lZCwgZW5kX3NlcTogJWQtPiVkXG4iLAotCQkJIG50b2hsKHNhY2stPnN0YXJ0X3NlcSksIG5ld19zdGFydF9zZXEsCi0JCQkgbnRvaGwoc2Fjay0+ZW5kX3NlcSksIG5ld19lbmRfc2VxKTsKKwkJcHJfZGVidWcoInNhY2tfYWRqdXN0OiBzdGFydF9zZXE6ICV1LT4ldSwgZW5kX3NlcTogJXUtPiV1XG4iLAorCQkJIG50b2hsKHNhY2stPnN0YXJ0X3NlcSksIG50b2hsKG5ld19zdGFydF9zZXEpLAorCQkJIG50b2hsKHNhY2stPmVuZF9zZXEpLCBudG9obChuZXdfZW5kX3NlcSkpOwogCiAJCWluZXRfcHJvdG9fY3N1bV9yZXBsYWNlNCgmdGNwaC0+Y2hlY2ssIHNrYiwKIAkJCQkJIHNhY2stPnN0YXJ0X3NlcSwgbmV3X3N0YXJ0X3NlcSwgMCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jIGIvbmV0L25ldGZpbHRlci9uZl9sb2cuYwppbmRleCA0M2M5MjZjLi4wZDg0NDhmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKQEAgLTQyNSw4ICs0MjUsNyBAQAogCQkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5wcm9jbmFtZQk9CiAJCQkJbmZfbG9nX3N5c2N0bF9mbmFtZXNbaV07CiAJCQluZl9sb2dfc3lzY3RsX3RhYmxlW2ldLmRhdGEgPSBOVUxMOwotCQkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5tYXhsZW4gPQotCQkJCU5GTE9HR0VSX05BTUVfTEVOICogc2l6ZW9mKGNoYXIpOworCQkJbmZfbG9nX3N5c2N0bF90YWJsZVtpXS5tYXhsZW4gPSBORkxPR0dFUl9OQU1FX0xFTjsKIAkJCW5mX2xvZ19zeXNjdGxfdGFibGVbaV0ubW9kZSA9IDA2NDQ7CiAJCQluZl9sb2dfc3lzY3RsX3RhYmxlW2ldLnByb2NfaGFuZGxlciA9CiAJCQkJbmZfbG9nX3Byb2NfZG9zdHJpbmc7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCmluZGV4IDNiM2RkYjQuLjE5OWZkMGYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jCkBAIC00MjcsNyArNDI3LDggQEAKIAkgICAgbmxhX3B1dF9iZTMyKHNrYiwgTkZUQV9UQUJMRV9VU0UsIGh0b25sKHRhYmxlLT51c2UpKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJbmxtc2dfdHJpbShza2IsIG5saCk7CkBAIC05NzEsNyArOTcyLDggQEAKIAlpZiAobmxhX3B1dF9iZTMyKHNrYiwgTkZUQV9DSEFJTl9VU0UsIGh0b25sKGNoYWluLT51c2UpKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJbmxtc2dfdHJpbShza2IsIG5saCk7CkBAIC0xMTM0LDkgKzExMzYsMTEgQEAKIAkvKiBSZXN0b3JlIG9sZCBjb3VudGVycyBvbiB0aGlzIGNwdSwgbm8gcHJvYmxlbS4gUGVyLWNwdSBzdGF0aXN0aWNzCiAJICogYXJlIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZS4KIAkgKi8KKwlwcmVlbXB0X2Rpc2FibGUoKTsKIAlzdGF0cyA9IHRoaXNfY3B1X3B0cihuZXdzdGF0cyk7CiAJc3RhdHMtPmJ5dGVzID0gYmU2NF90b19jcHUobmxhX2dldF9iZTY0KHRiW05GVEFfQ09VTlRFUl9CWVRFU10pKTsKIAlzdGF0cy0+cGt0cyA9IGJlNjRfdG9fY3B1KG5sYV9nZXRfYmU2NCh0YltORlRBX0NPVU5URVJfUEFDS0VUU10pKTsKKwlwcmVlbXB0X2VuYWJsZSgpOwogCiAJcmV0dXJuIG5ld3N0YXRzOwogfQpAQCAtMTI2Miw4ICsxMjY2LDEwIEBACiAJCW5mdF9jdHhfaW5pdCgmY3R4LCBza2IsIG5saCwgYWZpLCB0YWJsZSwgY2hhaW4sIG5sYSk7CiAJCXRyYW5zID0gbmZ0X3RyYW5zX2FsbG9jKCZjdHgsIE5GVF9NU0dfTkVXQ0hBSU4sCiAJCQkJCXNpemVvZihzdHJ1Y3QgbmZ0X3RyYW5zX2NoYWluKSk7Ci0JCWlmICh0cmFucyA9PSBOVUxMKQorCQlpZiAodHJhbnMgPT0gTlVMTCkgeworCQkJZnJlZV9wZXJjcHUoc3RhdHMpOwogCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KIAogCQluZnRfdHJhbnNfY2hhaW5fc3RhdHModHJhbnMpID0gc3RhdHM7CiAJCW5mdF90cmFuc19jaGFpbl91cGRhdGUodHJhbnMpID0gdHJ1ZTsKQEAgLTEzMTksOCArMTMyNSwxMCBAQAogCQlob29rZm4gPSB0eXBlLT5ob29rc1tob29rbnVtXTsKIAogCQliYXNlY2hhaW4gPSBremFsbG9jKHNpemVvZigqYmFzZWNoYWluKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChiYXNlY2hhaW4gPT0gTlVMTCkKKwkJaWYgKGJhc2VjaGFpbiA9PSBOVUxMKSB7CisJCQltb2R1bGVfcHV0KHR5cGUtPm93bmVyKTsKIAkJCXJldHVybiAtRU5PTUVNOworCQl9CiAKIAkJaWYgKG5sYVtORlRBX0NIQUlOX0NPVU5URVJTXSkgewogCQkJc3RhdHMgPSBuZnRfc3RhdHNfYWxsb2MobmxhW05GVEFfQ0hBSU5fQ09VTlRFUlNdKTsKQEAgLTE3MDcsNyArMTcxNSw4IEBACiAJICAgIG5sYV9wdXQoc2tiLCBORlRBX1JVTEVfVVNFUkRBVEEsIHJ1bGUtPnVsZW4sIG5mdF91c2VyZGF0YShydWxlKSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIAogbmxhX3B1dF9mYWlsdXJlOgogCW5sbXNnX3RyaW0oc2tiLCBubGgpOwpAQCAtMjM2MSw3ICsyMzcwLDggQEAKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAJbmxhX25lc3RfZW5kKHNrYiwgZGVzYyk7CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJbmxtc2dfdHJpbShza2IsIG5saCk7CkBAIC0zMDM1LDcgKzMwNDUsOCBAQAogCiAJbmxhX25lc3RfZW5kKHNrYiwgbmVzdCk7CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJbmxtc2dfdHJpbShza2IsIG5saCk7CkBAIC0zMzI0LDcgKzMzMzUsOCBAQAogCWlmIChubGFfcHV0X2JlMzIoc2tiLCBORlRBX0dFTl9JRCwgaHRvbmwobmV0LT5uZnQuYmFzZV9zZXEpKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJbmxtc2dfdHJpbShza2IsIG5saCk7CkBAIC0zNzUzLDYgKzM3NjUsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mdF9jaGFpbl92YWxpZGF0ZV9kZXBlbmRlbmN5KTsKIAoraW50IG5mdF9jaGFpbl92YWxpZGF0ZV9ob29rcyhjb25zdCBzdHJ1Y3QgbmZ0X2NoYWluICpjaGFpbiwKKwkJCSAgICAgdW5zaWduZWQgaW50IGhvb2tfZmxhZ3MpCit7CisJc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW47CisKKwlpZiAoY2hhaW4tPmZsYWdzICYgTkZUX0JBU0VfQ0hBSU4pIHsKKwkJYmFzZWNoYWluID0gbmZ0X2Jhc2VfY2hhaW4oY2hhaW4pOworCisJCWlmICgoMSA8PCBiYXNlY2hhaW4tPm9wc1swXS5ob29rbnVtKSAmIGhvb2tfZmxhZ3MpCisJCQlyZXR1cm4gMDsKKworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZnRfY2hhaW5fdmFsaWRhdGVfaG9va3MpOworCiAvKgogICogTG9vcCBkZXRlY3Rpb24gLSB3YWxrIHRocm91Z2ggdGhlIHJ1bGVzZXQgYmVnaW5uaW5nIGF0IHRoZSBkZXN0aW5hdGlvbiBjaGFpbgogICogb2YgYSBuZXcganVtcCB1bnRpbCBlaXRoZXIgdGhlIHNvdXJjZSBjaGFpbiBpcyByZWFjaGVkIChsb29wKSBvciBhbGwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCmluZGV4IGM0MjFkOTQuLjhiMTE3YzkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwpAQCAtMjcyLDcgKzI3Miw3IEBACiBzdGF0aWMgdm9pZCBuZm5ldGxpbmtfcmN2X2JhdGNoKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJCXVfaW50MTZfdCBzdWJzeXNfaWQpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKm5za2IsICpvc2tiID0gc2tiOworCXN0cnVjdCBza19idWZmICpvc2tiID0gc2tiOwogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCWNvbnN0IHN0cnVjdCBuZm5ldGxpbmtfc3Vic3lzdGVtICpzczsKIAljb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayAqbmM7CkBAIC0yODMsMTIgKzI4MywxMSBAQAogCWlmIChzdWJzeXNfaWQgPj0gTkZOTF9TVUJTWVNfQ09VTlQpCiAJCXJldHVybiBuZXRsaW5rX2Fjayhza2IsIG5saCwgLUVJTlZBTCk7CiByZXBsYXk6Ci0JbnNrYiA9IG5ldGxpbmtfc2tiX2Nsb25lKG9za2IsIEdGUF9LRVJORUwpOwotCWlmICghbnNrYikKKwlza2IgPSBuZXRsaW5rX3NrYl9jbG9uZShvc2tiLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNrYikKIAkJcmV0dXJuIG5ldGxpbmtfYWNrKG9za2IsIG5saCwgLUVOT01FTSk7CiAKLQluc2tiLT5zayA9IG9za2ItPnNrOwotCXNrYiA9IG5za2I7CisJc2tiLT5zayA9IG9za2ItPnNrOwogCiAJbmZubF9sb2NrKHN1YnN5c19pZCk7CiAJc3MgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHRhYmxlW3N1YnN5c19pZF0uc3Vic3lzLApAQCAtMzA1LDcgKzMwNCw3IEBACiAJCXsKIAkJCW5mbmxfdW5sb2NrKHN1YnN5c19pZCk7CiAJCQluZXRsaW5rX2Fjayhza2IsIG5saCwgLUVPUE5PVFNVUFApOwotCQkJcmV0dXJuIGtmcmVlX3NrYihuc2tiKTsKKwkJCXJldHVybiBrZnJlZV9za2Ioc2tiKTsKIAkJfQogCX0KIApAQCAtMzg2LDcgKzM4NSw3IEBACiAJCQkJbmZubF9lcnJfcmVzZXQoJmVycl9saXN0KTsKIAkJCQlzcy0+YWJvcnQob3NrYik7CiAJCQkJbmZubF91bmxvY2soc3Vic3lzX2lkKTsKLQkJCQlrZnJlZV9za2IobnNrYik7CisJCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQkJZ290byByZXBsYXk7CiAJCQl9CiAJCX0KQEAgLTQyNyw3ICs0MjYsNyBAQAogCiAJbmZubF9lcnJfZGVsaXZlcigmZXJyX2xpc3QsIG9za2IpOwogCW5mbmxfdW5sb2NrKHN1YnN5c19pZCk7Ci0Ja2ZyZWVfc2tiKG5za2IpOworCWtmcmVlX3NrYihza2IpOwogfQogCiBzdGF0aWMgdm9pZCBuZm5ldGxpbmtfcmN2KHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfY3RoZWxwZXIuYwppbmRleCA5ZTI4N2NiLi5hNTU5OWZjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19jdGhlbHBlci5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2N0aGVscGVyLmMKQEAgLTg2LDcgKzg2LDcgQEAKIHN0YXRpYyBpbnQKIG5mbmxfY3RoZWxwZXJfZnJvbV9ubGF0dHIoc3RydWN0IG5sYXR0ciAqYXR0ciwgc3RydWN0IG5mX2Nvbm4gKmN0KQogewotCWNvbnN0IHN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoY3QpOworCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoY3QpOwogCiAJaWYgKGF0dHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC05NCw3ICs5NCw3IEBACiAJaWYgKGhlbHAtPmhlbHBlci0+ZGF0YV9sZW4gPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltZW1jcHkoJmhlbHAtPmRhdGEsIG5sYV9kYXRhKGF0dHIpLCBoZWxwLT5oZWxwZXItPmRhdGFfbGVuKTsKKwltZW1jcHkoaGVscC0+ZGF0YSwgbmxhX2RhdGEoYXR0ciksIGhlbHAtPmhlbHBlci0+ZGF0YV9sZW4pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9oYXNoLmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9oYXNoLmMKaW5kZXggMWUzMTZjZS4uNjFlNmM0MCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfaGFzaC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X2hhc2guYwpAQCAtMzMsNyArMzMsNyBAQAogCQkJICAgIGNvbnN0IHN0cnVjdCBuZnRfZGF0YSAqa2V5LAogCQkJICAgIHN0cnVjdCBuZnRfZGF0YSAqZGF0YSkKIHsKLQljb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZSAqcHJpdiA9IG5mdF9zZXRfcHJpdihzZXQpOworCXN0cnVjdCByaGFzaHRhYmxlICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7CiAJY29uc3Qgc3RydWN0IG5mdF9oYXNoX2VsZW0gKmhlOwogCiAJaGUgPSByaGFzaHRhYmxlX2xvb2t1cChwcml2LCBrZXkpOwpAQCAtODMsNjkgKzgzLDk3IEBACiAJCQkgICAgY29uc3Qgc3RydWN0IG5mdF9zZXRfZWxlbSAqZWxlbSkKIHsKIAlzdHJ1Y3Qgcmhhc2h0YWJsZSAqcHJpdiA9IG5mdF9zZXRfcHJpdihzZXQpOwotCXN0cnVjdCByaGFzaF9oZWFkICpoZSwgX19yY3UgKipwcHJldjsKIAotCXBwcmV2ID0gZWxlbS0+Y29va2llOwotCWhlID0gcmh0X2RlcmVmZXJlbmNlKCgqcHByZXYpLCBwcml2KTsKLQotCXJoYXNodGFibGVfcmVtb3ZlX3BwcmV2KHByaXYsIGhlLCBwcHJldik7Ci0KKwlyaGFzaHRhYmxlX3JlbW92ZShwcml2LCBlbGVtLT5jb29raWUpOwogCXN5bmNocm9uaXplX3JjdSgpOwotCWtmcmVlKGhlKTsKKwlrZnJlZShlbGVtLT5jb29raWUpOworfQorCitzdHJ1Y3QgbmZ0X2NvbXBhcmVfYXJnIHsKKwljb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0OworCXN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW07Cit9OworCitzdGF0aWMgYm9vbCBuZnRfaGFzaF9jb21wYXJlKHZvaWQgKnB0ciwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBuZnRfaGFzaF9lbGVtICpoZSA9IHB0cjsKKwlzdHJ1Y3QgbmZ0X2NvbXBhcmVfYXJnICp4ID0gYXJnOworCisJaWYgKCFuZnRfZGF0YV9jbXAoJmhlLT5rZXksICZ4LT5lbGVtLT5rZXksIHgtPnNldC0+a2xlbikpIHsKKwkJeC0+ZWxlbS0+Y29va2llID0gaGU7CisJCXgtPmVsZW0tPmZsYWdzID0gMDsKKwkJaWYgKHgtPnNldC0+ZmxhZ3MgJiBORlRfU0VUX01BUCkKKwkJCW5mdF9kYXRhX2NvcHkoJngtPmVsZW0tPmRhdGEsIGhlLT5kYXRhKTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIHN0YXRpYyBpbnQgbmZ0X2hhc2hfZ2V0KGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsIHN0cnVjdCBuZnRfc2V0X2VsZW0gKmVsZW0pCiB7Ci0JY29uc3Qgc3RydWN0IHJoYXNodGFibGUgKnByaXYgPSBuZnRfc2V0X3ByaXYoc2V0KTsKLQljb25zdCBzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwgPSByaHRfZGVyZWZlcmVuY2VfcmN1KHByaXYtPnRibCwgcHJpdik7Ci0Jc3RydWN0IHJoYXNoX2hlYWQgX19yY3UgKiBjb25zdCAqcHByZXY7Ci0Jc3RydWN0IG5mdF9oYXNoX2VsZW0gKmhlOwotCXUzMiBoOworCXN0cnVjdCByaGFzaHRhYmxlICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7CisJc3RydWN0IG5mdF9jb21wYXJlX2FyZyBhcmcgPSB7CisJCS5zZXQgPSBzZXQsCisJCS5lbGVtID0gZWxlbSwKKwl9OwogCi0JaCA9IHJoYXNodGFibGVfaGFzaGZuKHByaXYsICZlbGVtLT5rZXksIHNldC0+a2xlbik7Ci0JcHByZXYgPSAmdGJsLT5idWNrZXRzW2hdOwotCXJodF9mb3JfZWFjaF9lbnRyeV9yY3UoaGUsIHRibC0+YnVja2V0c1toXSwgbm9kZSkgewotCQlpZiAobmZ0X2RhdGFfY21wKCZoZS0+a2V5LCAmZWxlbS0+a2V5LCBzZXQtPmtsZW4pKSB7Ci0JCQlwcHJldiA9ICZoZS0+bm9kZS5uZXh0OwotCQkJY29udGludWU7Ci0JCX0KLQotCQllbGVtLT5jb29raWUgPSAodm9pZCAqKXBwcmV2OwotCQllbGVtLT5mbGFncyA9IDA7Ci0JCWlmIChzZXQtPmZsYWdzICYgTkZUX1NFVF9NQVApCi0JCQluZnRfZGF0YV9jb3B5KCZlbGVtLT5kYXRhLCBoZS0+ZGF0YSk7CisJaWYgKHJoYXNodGFibGVfbG9va3VwX2NvbXBhcmUocHJpdiwgJmVsZW0tPmtleSwKKwkJCQkgICAgICAmbmZ0X2hhc2hfY29tcGFyZSwgJmFyZykpCiAJCXJldHVybiAwOwotCX0KKwogCXJldHVybiAtRU5PRU5UOwogfQogCiBzdGF0aWMgdm9pZCBuZnRfaGFzaF93YWxrKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBuZnRfc2V0ICpzZXQsCiAJCQkgIHN0cnVjdCBuZnRfc2V0X2l0ZXIgKml0ZXIpCiB7Ci0JY29uc3Qgc3RydWN0IHJoYXNodGFibGUgKnByaXYgPSBuZnRfc2V0X3ByaXYoc2V0KTsKLQljb25zdCBzdHJ1Y3QgYnVja2V0X3RhYmxlICp0Ymw7CisJc3RydWN0IHJoYXNodGFibGUgKnByaXYgPSBuZnRfc2V0X3ByaXYoc2V0KTsKIAljb25zdCBzdHJ1Y3QgbmZ0X2hhc2hfZWxlbSAqaGU7CisJc3RydWN0IHJoYXNodGFibGVfaXRlciBodGk7CiAJc3RydWN0IG5mdF9zZXRfZWxlbSBlbGVtOwotCXVuc2lnbmVkIGludCBpOworCWludCBlcnI7CiAKLQl0YmwgPSByaHRfZGVyZWZlcmVuY2VfcmN1KHByaXYtPnRibCwgcHJpdik7Ci0JZm9yIChpID0gMDsgaSA8IHRibC0+c2l6ZTsgaSsrKSB7Ci0JCXJodF9mb3JfZWFjaF9lbnRyeV9yY3UoaGUsIHRibC0+YnVja2V0c1tpXSwgbm9kZSkgewotCQkJaWYgKGl0ZXItPmNvdW50IDwgaXRlci0+c2tpcCkKLQkJCQlnb3RvIGNvbnQ7CisJZXJyID0gcmhhc2h0YWJsZV93YWxrX2luaXQocHJpdiwgJmh0aSk7CisJaXRlci0+ZXJyID0gZXJyOworCWlmIChlcnIpCisJCXJldHVybjsKIAotCQkJbWVtY3B5KCZlbGVtLmtleSwgJmhlLT5rZXksIHNpemVvZihlbGVtLmtleSkpOwotCQkJaWYgKHNldC0+ZmxhZ3MgJiBORlRfU0VUX01BUCkKLQkJCQltZW1jcHkoJmVsZW0uZGF0YSwgaGUtPmRhdGEsIHNpemVvZihlbGVtLmRhdGEpKTsKLQkJCWVsZW0uZmxhZ3MgPSAwOwotCi0JCQlpdGVyLT5lcnIgPSBpdGVyLT5mbihjdHgsIHNldCwgaXRlciwgJmVsZW0pOwotCQkJaWYgKGl0ZXItPmVyciA8IDApCi0JCQkJcmV0dXJuOwotY29udDoKLQkJCWl0ZXItPmNvdW50Kys7Ci0JCX0KKwllcnIgPSByaGFzaHRhYmxlX3dhbGtfc3RhcnQoJmh0aSk7CisJaWYgKGVyciAmJiBlcnIgIT0gLUVBR0FJTikgeworCQlpdGVyLT5lcnIgPSBlcnI7CisJCWdvdG8gb3V0OwogCX0KKworCXdoaWxlICgoaGUgPSByaGFzaHRhYmxlX3dhbGtfbmV4dCgmaHRpKSkpIHsKKwkJaWYgKElTX0VSUihoZSkpIHsKKwkJCWVyciA9IFBUUl9FUlIoaGUpOworCQkJaWYgKGVyciAhPSAtRUFHQUlOKSB7CisJCQkJaXRlci0+ZXJyID0gZXJyOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisKKwkJaWYgKGl0ZXItPmNvdW50IDwgaXRlci0+c2tpcCkKKwkJCWdvdG8gY29udDsKKworCQltZW1jcHkoJmVsZW0ua2V5LCAmaGUtPmtleSwgc2l6ZW9mKGVsZW0ua2V5KSk7CisJCWlmIChzZXQtPmZsYWdzICYgTkZUX1NFVF9NQVApCisJCQltZW1jcHkoJmVsZW0uZGF0YSwgaGUtPmRhdGEsIHNpemVvZihlbGVtLmRhdGEpKTsKKwkJZWxlbS5mbGFncyA9IDA7CisKKwkJaXRlci0+ZXJyID0gaXRlci0+Zm4oY3R4LCBzZXQsIGl0ZXIsICZlbGVtKTsKKwkJaWYgKGl0ZXItPmVyciA8IDApCisJCQlnb3RvIG91dDsKKworY29udDoKKwkJaXRlci0+Y291bnQrKzsKKwl9CisKK291dDoKKwlyaGFzaHRhYmxlX3dhbGtfc3RvcCgmaHRpKTsKKwlyaGFzaHRhYmxlX3dhbGtfZXhpdCgmaHRpKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBuZnRfaGFzaF9wcml2c2l6ZShjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgbmxhW10pCkBAIC0xNTMsMTMgKzE4MSw2IEBACiAJcmV0dXJuIHNpemVvZihzdHJ1Y3Qgcmhhc2h0YWJsZSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORwotc3RhdGljIGludCBsb2NrZGVwX25mbmxfbG9ja19pc19oZWxkKHZvaWQgKnBhcmVudCkKLXsKLQlyZXR1cm4gbG9ja2RlcF9uZm5sX2lzX2hlbGQoTkZOTF9TVUJTWVNfTkZUQUJMRVMpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgbmZ0X2hhc2hfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X3NldCAqc2V0LAogCQkJIGNvbnN0IHN0cnVjdCBuZnRfc2V0X2Rlc2MgKmRlc2MsCiAJCQkgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pCkBAIC0xNzMsOSArMTk0LDYgQEAKIAkJLmhhc2hmbiA9IGpoYXNoLAogCQkuZ3Jvd19kZWNpc2lvbiA9IHJodF9ncm93X2Fib3ZlXzc1LAogCQkuc2hyaW5rX2RlY2lzaW9uID0gcmh0X3Nocmlua19iZWxvd18zMCwKLSNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORwotCQkubXV0ZXhfaXNfaGVsZCA9IGxvY2tkZXBfbmZubF9sb2NrX2lzX2hlbGQsCi0jZW5kaWYKIAl9OwogCiAJcmV0dXJuIHJoYXNodGFibGVfaW5pdChwcml2LCAmcGFyYW1zKTsKQEAgLTE4MywxOCArMjAxLDIzIEBACiAKIHN0YXRpYyB2b2lkIG5mdF9oYXNoX2Rlc3Ryb3koY29uc3Qgc3RydWN0IG5mdF9zZXQgKnNldCkKIHsKLQljb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZSAqcHJpdiA9IG5mdF9zZXRfcHJpdihzZXQpOwotCWNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibCA9IHByaXYtPnRibDsKLQlzdHJ1Y3QgbmZ0X2hhc2hfZWxlbSAqaGUsICpuZXh0OworCXN0cnVjdCByaGFzaHRhYmxlICpwcml2ID0gbmZ0X3NldF9wcml2KHNldCk7CisJY29uc3Qgc3RydWN0IGJ1Y2tldF90YWJsZSAqdGJsOworCXN0cnVjdCBuZnRfaGFzaF9lbGVtICpoZTsKKwlzdHJ1Y3Qgcmhhc2hfaGVhZCAqcG9zLCAqbmV4dDsKIAl1bnNpZ25lZCBpbnQgaTsKIAorCS8qIFN0b3AgYW4gZXZlbnR1YWwgYXN5bmMgcmVzaXppbmcgKi8KKwlwcml2LT5iZWluZ19kZXN0cm95ZWQgPSB0cnVlOworCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKKworCXRibCA9IHJodF9kZXJlZmVyZW5jZShwcml2LT50YmwsIHByaXYpOwogCWZvciAoaSA9IDA7IGkgPCB0YmwtPnNpemU7IGkrKykgewotCQlmb3IgKGhlID0gcmh0X2VudHJ5KHRibC0+YnVja2V0c1tpXSwgc3RydWN0IG5mdF9oYXNoX2VsZW0sIG5vZGUpOwotCQkgICAgIGhlICE9IE5VTEw7IGhlID0gbmV4dCkgewotCQkJbmV4dCA9IHJodF9lbnRyeShoZS0+bm9kZS5uZXh0LCBzdHJ1Y3QgbmZ0X2hhc2hfZWxlbSwgbm9kZSk7CisJCXJodF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhlLCBwb3MsIG5leHQsIHRibCwgaSwgbm9kZSkKIAkJCW5mdF9oYXNoX2VsZW1fZGVzdHJveShzZXQsIGhlKTsKLQkJfQogCX0KKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKwogCXJoYXNodGFibGVfZGVzdHJveShwcml2KTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfbWFzcS5jIGIvbmV0L25ldGZpbHRlci9uZnRfbWFzcS5jCmluZGV4IGQxZmZkNWUuLjlhZWE3NDcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X21hc3EuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9tYXNxLmMKQEAgLTIxLDYgKzIxLDIxIEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwobmZ0X21hc3FfcG9saWN5KTsKIAoraW50IG5mdF9tYXNxX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwKKwkJICAgICAgY29uc3Qgc3RydWN0IG5mdF9kYXRhICoqZGF0YSkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gbmZ0X2NoYWluX3ZhbGlkYXRlX2RlcGVuZGVuY3koY3R4LT5jaGFpbiwgTkZUX0NIQUlOX1RfTkFUKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJldHVybiBuZnRfY2hhaW5fdmFsaWRhdGVfaG9va3MoY3R4LT5jaGFpbiwKKwkJCQkgICAgICAgICgxIDw8IE5GX0lORVRfUE9TVF9ST1VUSU5HKSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZnRfbWFzcV92YWxpZGF0ZSk7CisKIGludCBuZnRfbWFzcV9pbml0KGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCiAJCSAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCQkgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdKQpAQCAtMjgsOCArNDMsOCBAQAogCXN0cnVjdCBuZnRfbWFzcSAqcHJpdiA9IG5mdF9leHByX3ByaXYoZXhwcik7CiAJaW50IGVycjsKIAotCWVyciA9IG5mdF9jaGFpbl92YWxpZGF0ZV9kZXBlbmRlbmN5KGN0eC0+Y2hhaW4sIE5GVF9DSEFJTl9UX05BVCk7Ci0JaWYgKGVyciA8IDApCisJZXJyID0gbmZ0X21hc3FfdmFsaWRhdGUoY3R4LCBleHByLCBOVUxMKTsKKwlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCiAJaWYgKHRiW05GVEFfTUFTUV9GTEFHU10gPT0gTlVMTCkKQEAgLTYwLDEyICs3NSw1IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZnRfbWFzcV9kdW1wKTsKIAotaW50IG5mdF9tYXNxX3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwKLQkJICAgICAgY29uc3Qgc3RydWN0IG5mdF9kYXRhICoqZGF0YSkKLXsKLQlyZXR1cm4gbmZ0X2NoYWluX3ZhbGlkYXRlX2RlcGVuZGVuY3koY3R4LT5jaGFpbiwgTkZUX0NIQUlOX1RfTkFUKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKG5mdF9tYXNxX3ZhbGlkYXRlKTsKLQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiQXJ0dXJvIEJvcnJlcm8gR29uemFsZXogPGFydHVyby5ib3JyZXJvLmdsZXpAZ21haWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfbmF0LmMgYi9uZXQvbmV0ZmlsdGVyL25mdF9uYXQuYwppbmRleCBhZmY1NGZiMS4uYTA4MzdjNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfbmF0LmMKKysrIGIvbmV0L25ldGZpbHRlci9uZnRfbmF0LmMKQEAgLTg4LDYgKzg4LDMzIEBACiAJW05GVEFfTkFUX0ZMQUdTXQkgPSB7IC50eXBlID0gTkxBX1UzMiB9LAogfTsKIAorc3RhdGljIGludCBuZnRfbmF0X3ZhbGlkYXRlKGNvbnN0IHN0cnVjdCBuZnRfY3R4ICpjdHgsCisJCQkgICAgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAorCQkJICAgIGNvbnN0IHN0cnVjdCBuZnRfZGF0YSAqKmRhdGEpCit7CisJc3RydWN0IG5mdF9uYXQgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpOworCWludCBlcnI7CisKKwllcnIgPSBuZnRfY2hhaW5fdmFsaWRhdGVfZGVwZW5kZW5jeShjdHgtPmNoYWluLCBORlRfQ0hBSU5fVF9OQVQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJc3dpdGNoIChwcml2LT50eXBlKSB7CisJY2FzZSBORlRfTkFUX1NOQVQ6CisJCWVyciA9IG5mdF9jaGFpbl92YWxpZGF0ZV9ob29rcyhjdHgtPmNoYWluLAorCQkJCQkgICAgICAgKDEgPDwgTkZfSU5FVF9QT1NUX1JPVVRJTkcpIHwKKwkJCQkJICAgICAgICgxIDw8IE5GX0lORVRfTE9DQUxfSU4pKTsKKwkJYnJlYWs7CisJY2FzZSBORlRfTkFUX0ROQVQ6CisJCWVyciA9IG5mdF9jaGFpbl92YWxpZGF0ZV9ob29rcyhjdHgtPmNoYWluLAorCQkJCQkgICAgICAgKDEgPDwgTkZfSU5FVF9QUkVfUk9VVElORykgfAorCQkJCQkgICAgICAgKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBuZnRfbmF0X2luaXQoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLAogCQkJY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IHRiW10pCiB7CkBAIC05NSwxMCArMTIyLDYgQEAKIAl1MzIgZmFtaWx5OwogCWludCBlcnI7CiAKLQllcnIgPSBuZnRfY2hhaW5fdmFsaWRhdGVfZGVwZW5kZW5jeShjdHgtPmNoYWluLCBORlRfQ0hBSU5fVF9OQVQpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCiAJaWYgKHRiW05GVEFfTkFUX1RZUEVdID09IE5VTEwgfHwKIAkgICAgKHRiW05GVEFfTkFUX1JFR19BRERSX01JTl0gPT0gTlVMTCAmJgogCSAgICAgdGJbTkZUQV9OQVRfUkVHX1BST1RPX01JTl0gPT0gTlVMTCkpCkBAIC0xMTUsNiArMTM4LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWVyciA9IG5mdF9uYXRfdmFsaWRhdGUoY3R4LCBleHByLCBOVUxMKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwogCWlmICh0YltORlRBX05BVF9GQU1JTFldID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0yMTksMTMgKzI0Niw2IEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IG5mdF9uYXRfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCi0JCQkgICAgY29uc3Qgc3RydWN0IG5mdF9kYXRhICoqZGF0YSkKLXsKLQlyZXR1cm4gbmZ0X2NoYWluX3ZhbGlkYXRlX2RlcGVuZGVuY3koY3R4LT5jaGFpbiwgTkZUX0NIQUlOX1RfTkFUKTsKLX0KLQogc3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9uYXRfdHlwZTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9uYXRfb3BzID0gewogCS50eXBlICAgICAgICAgICA9ICZuZnRfbmF0X3R5cGUsCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mdF9yZWRpci5jIGIvbmV0L25ldGZpbHRlci9uZnRfcmVkaXIuYwppbmRleCA5ZTgwOTNmLi5kN2U5ZTkzIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9yZWRpci5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3JlZGlyLmMKQEAgLTIzLDYgKzIzLDIyIEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwobmZ0X3JlZGlyX3BvbGljeSk7CiAKK2ludCBuZnRfcmVkaXJfdmFsaWRhdGUoY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwciwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBuZnRfZGF0YSAqKmRhdGEpCit7CisJaW50IGVycjsKKworCWVyciA9IG5mdF9jaGFpbl92YWxpZGF0ZV9kZXBlbmRlbmN5KGN0eC0+Y2hhaW4sIE5GVF9DSEFJTl9UX05BVCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gbmZ0X2NoYWluX3ZhbGlkYXRlX2hvb2tzKGN0eC0+Y2hhaW4sCisJCQkJCSgxIDw8IE5GX0lORVRfUFJFX1JPVVRJTkcpIHwKKwkJCQkJKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mdF9yZWRpcl92YWxpZGF0ZSk7CisKIGludCBuZnRfcmVkaXJfaW5pdChjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LAogCQkgICBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCiAJCSAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCB0YltdKQpAQCAtMzAsNyArNDYsNyBAQAogCXN0cnVjdCBuZnRfcmVkaXIgKnByaXYgPSBuZnRfZXhwcl9wcml2KGV4cHIpOwogCWludCBlcnI7CiAKLQllcnIgPSBuZnRfY2hhaW5fdmFsaWRhdGVfZGVwZW5kZW5jeShjdHgtPmNoYWluLCBORlRfQ0hBSU5fVF9OQVQpOworCWVyciA9IG5mdF9yZWRpcl92YWxpZGF0ZShjdHgsIGV4cHIsIE5VTEwpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC04OCwxMiArMTA0LDUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mdF9yZWRpcl9kdW1wKTsKIAotaW50IG5mdF9yZWRpcl92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgbmZ0X2RhdGEgKipkYXRhKQotewotCXJldHVybiBuZnRfY2hhaW5fdmFsaWRhdGVfZGVwZW5kZW5jeShjdHgtPmNoYWluLCBORlRfQ0hBSU5fVF9OQVQpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwobmZ0X3JlZGlyX3ZhbGlkYXRlKTsKLQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiQXJ0dXJvIEJvcnJlcm8gR29uemFsZXogPGFydHVyby5ib3JyZXJvLmdsZXpAZ21haWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9vc2YuYyBiL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMKaW5kZXggYzUyOTE2MS4uMDc3ODg1NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9vc2YuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X29zZi5jCkBAIC0yMjUsNiArMjI1LDggQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrZiwgJnh0X29zZl9maW5nZXJzW2RmXSwgZmluZ2VyX2VudHJ5KSB7CisJCWludCBmb3B0c2l6ZSwgb3B0bnVtOworCiAJCWYgPSAma2YtPmZpbmdlcjsKIAogCQlpZiAoIShpbmZvLT5mbGFncyAmIFhUX09TRl9MT0cpICYmIHN0cmNtcChpbmZvLT5nZW5yZSwgZi0+Z2VucmUpKQpAQCAtMjMzLDExMCArMjM1LDEwOSBAQAogCQlvcHRwID0gX29wdHA7CiAJCWZtYXRjaCA9IEZNQVRDSF9XUk9ORzsKIAotCQlpZiAodG90bGVuID09IGYtPnNzICYmIHh0X29zZl90dGwoc2tiLCBpbmZvLCBmLT50dGwpKSB7Ci0JCQlpbnQgZm9wdHNpemUsIG9wdG51bTsKKwkJaWYgKHRvdGxlbiAhPSBmLT5zcyB8fCAheHRfb3NmX3R0bChza2IsIGluZm8sIGYtPnR0bCkpCisJCQljb250aW51ZTsKIAotCQkJLyoKLQkJCSAqIFNob3VsZCBub3QgaGFwcGVuIGlmIHVzZXJzcGFjZSBwYXJzZXIgd2FzIHdyaXR0ZW4gY29ycmVjdGx5LgotCQkJICovCi0JCQlpZiAoZi0+d3NzLndjID49IE9TRl9XU1NfTUFYKQotCQkJCWNvbnRpbnVlOworCQkvKgorCQkgKiBTaG91bGQgbm90IGhhcHBlbiBpZiB1c2Vyc3BhY2UgcGFyc2VyIHdhcyB3cml0dGVuIGNvcnJlY3RseS4KKwkJICovCisJCWlmIChmLT53c3Mud2MgPj0gT1NGX1dTU19NQVgpCisJCQljb250aW51ZTsKIAotCQkJLyogQ2hlY2sgb3B0aW9ucyAqLworCQkvKiBDaGVjayBvcHRpb25zICovCiAKLQkJCWZvcHRzaXplID0gMDsKLQkJCWZvciAob3B0bnVtID0gMDsgb3B0bnVtIDwgZi0+b3B0X251bTsgKytvcHRudW0pCi0JCQkJZm9wdHNpemUgKz0gZi0+b3B0W29wdG51bV0ubGVuZ3RoOworCQlmb3B0c2l6ZSA9IDA7CisJCWZvciAob3B0bnVtID0gMDsgb3B0bnVtIDwgZi0+b3B0X251bTsgKytvcHRudW0pCisJCQlmb3B0c2l6ZSArPSBmLT5vcHRbb3B0bnVtXS5sZW5ndGg7CiAKLQkJCWlmIChmb3B0c2l6ZSA+IE1BWF9JUE9QVExFTiB8fAotCQkJCW9wdHNpemUgPiBNQVhfSVBPUFRMRU4gfHwKLQkJCQlvcHRzaXplICE9IGZvcHRzaXplKQotCQkJCWNvbnRpbnVlOworCQlpZiAoZm9wdHNpemUgPiBNQVhfSVBPUFRMRU4gfHwKKwkJICAgIG9wdHNpemUgPiBNQVhfSVBPUFRMRU4gfHwKKwkJICAgIG9wdHNpemUgIT0gZm9wdHNpemUpCisJCQljb250aW51ZTsKIAotCQkJY2hlY2tfV1NTID0gZi0+d3NzLndjOworCQljaGVja19XU1MgPSBmLT53c3Mud2M7CiAKLQkJCWZvciAob3B0bnVtID0gMDsgb3B0bnVtIDwgZi0+b3B0X251bTsgKytvcHRudW0pIHsKLQkJCQlpZiAoZi0+b3B0W29wdG51bV0ua2luZCA9PSAoKm9wdHApKSB7Ci0JCQkJCV9fdTMyIGxlbiA9IGYtPm9wdFtvcHRudW1dLmxlbmd0aDsKLQkJCQkJY29uc3QgX191OCAqb3B0ZW5kID0gb3B0cCArIGxlbjsKLQkJCQkJaW50IGxvb3BfY29udCA9IDA7CisJCWZvciAob3B0bnVtID0gMDsgb3B0bnVtIDwgZi0+b3B0X251bTsgKytvcHRudW0pIHsKKwkJCWlmIChmLT5vcHRbb3B0bnVtXS5raW5kID09ICgqb3B0cCkpIHsKKwkJCQlfX3UzMiBsZW4gPSBmLT5vcHRbb3B0bnVtXS5sZW5ndGg7CisJCQkJY29uc3QgX191OCAqb3B0ZW5kID0gb3B0cCArIGxlbjsKKwkJCQlpbnQgbG9vcF9jb250ID0gMDsKIAotCQkJCQlmbWF0Y2ggPSBGTUFUQ0hfT0s7CisJCQkJZm1hdGNoID0gRk1BVENIX09LOwogCi0JCQkJCXN3aXRjaCAoKm9wdHApIHsKLQkJCQkJY2FzZSBPU0ZPUFRfTVNTOgotCQkJCQkJbXNzID0gb3B0cFszXTsKLQkJCQkJCW1zcyA8PD0gODsKLQkJCQkJCW1zcyB8PSBvcHRwWzJdOworCQkJCXN3aXRjaCAoKm9wdHApIHsKKwkJCQljYXNlIE9TRk9QVF9NU1M6CisJCQkJCW1zcyA9IG9wdHBbM107CisJCQkJCW1zcyA8PD0gODsKKwkJCQkJbXNzIHw9IG9wdHBbMl07CiAKLQkJCQkJCW1zcyA9IG50b2hzKChfX2ZvcmNlIF9fYmUxNiltc3MpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgT1NGT1BUX1RTOgotCQkJCQkJbG9vcF9jb250ID0gMTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0KLQkJCQkJb3B0cCA9IG9wdGVuZDsKLQkJCQl9IGVsc2UKLQkJCQkJZm1hdGNoID0gRk1BVENIX09QVF9XUk9ORzsKLQotCQkJCWlmIChmbWF0Y2ggIT0gRk1BVENIX09LKQorCQkJCQltc3MgPSBudG9ocygoX19mb3JjZSBfX2JlMTYpbXNzKTsKIAkJCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWlmIChmbWF0Y2ggIT0gRk1BVENIX09QVF9XUk9ORykgewotCQkJCWZtYXRjaCA9IEZNQVRDSF9XUk9ORzsKLQotCQkJCXN3aXRjaCAoY2hlY2tfV1NTKSB7Ci0JCQkJY2FzZSBPU0ZfV1NTX1BMQUlOOgotCQkJCQlpZiAoZi0+d3NzLnZhbCA9PSAwIHx8IHdpbmRvdyA9PSBmLT53c3MudmFsKQotCQkJCQkJZm1hdGNoID0gRk1BVENIX09LOwotCQkJCQlicmVhazsKLQkJCQljYXNlIE9TRl9XU1NfTVNTOgotCQkJCQkvKgotCQkJCQkgKiBTb21lIHNtYXJ0IG1vZGVtcyBkZWNyZWFzZSBtYW5nbGUgTVNTIHRvIAotCQkJCQkgKiBTTUFSVF9NU1NfMiwgc28gd2UgY2hlY2sgc3RhbmRhcmQsIGRlY3JlYXNlZAotCQkJCQkgKiBhbmQgdGhlIG9uZSBwcm92aWRlZCBpbiB0aGUgZmluZ2VycHJpbnQgTVNTCi0JCQkJCSAqIHZhbHVlcy4KLQkJCQkJICovCi0jZGVmaW5lIFNNQVJUX01TU18xCTE0NjAKLSNkZWZpbmUgU01BUlRfTVNTXzIJMTQ0OAotCQkJCQlpZiAod2luZG93ID09IGYtPndzcy52YWwgKiBtc3MgfHwKLQkJCQkJICAgIHdpbmRvdyA9PSBmLT53c3MudmFsICogU01BUlRfTVNTXzEgfHwKLQkJCQkJICAgIHdpbmRvdyA9PSBmLT53c3MudmFsICogU01BUlRfTVNTXzIpCi0JCQkJCQlmbWF0Y2ggPSBGTUFUQ0hfT0s7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgT1NGX1dTU19NVFU6Ci0JCQkJCWlmICh3aW5kb3cgPT0gZi0+d3NzLnZhbCAqIChtc3MgKyA0MCkgfHwKLQkJCQkJICAgIHdpbmRvdyA9PSBmLT53c3MudmFsICogKFNNQVJUX01TU18xICsgNDApIHx8Ci0JCQkJCSAgICB3aW5kb3cgPT0gZi0+d3NzLnZhbCAqIChTTUFSVF9NU1NfMiArIDQwKSkKLQkJCQkJCWZtYXRjaCA9IEZNQVRDSF9PSzsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBPU0ZfV1NTX01PRFVMTzoKLQkJCQkJaWYgKCh3aW5kb3cgJSBmLT53c3MudmFsKSA9PSAwKQotCQkJCQkJZm1hdGNoID0gRk1BVENIX09LOworCQkJCWNhc2UgT1NGT1BUX1RTOgorCQkJCQlsb29wX2NvbnQgPSAxOwogCQkJCQlicmVhazsKIAkJCQl9Ci0JCQl9CisKKwkJCQlvcHRwID0gb3B0ZW5kOworCQkJfSBlbHNlCisJCQkJZm1hdGNoID0gRk1BVENIX09QVF9XUk9ORzsKIAogCQkJaWYgKGZtYXRjaCAhPSBGTUFUQ0hfT0spCi0JCQkJY29udGludWU7Ci0KLQkJCWZjb3VudCsrOwotCi0JCQlpZiAoaW5mby0+ZmxhZ3MgJiBYVF9PU0ZfTE9HKQotCQkJCW5mX2xvZ19wYWNrZXQobmV0LCBwLT5mYW1pbHksIHAtPmhvb2tudW0sIHNrYiwKLQkJCQkJcC0+aW4sIHAtPm91dCwgTlVMTCwKLQkJCQkJIiVzIFslczolc10gOiAlcEk0OiVkIC0+ICVwSTQ6JWQgaG9wcz0lZFxuIiwKLQkJCQkJZi0+Z2VucmUsIGYtPnZlcnNpb24sIGYtPnN1YnR5cGUsCi0JCQkJCSZpcC0+c2FkZHIsIG50b2hzKHRjcC0+c291cmNlKSwKLQkJCQkJJmlwLT5kYWRkciwgbnRvaHModGNwLT5kZXN0KSwKLQkJCQkJZi0+dHRsIC0gaXAtPnR0bCk7Ci0KLQkJCWlmICgoaW5mby0+ZmxhZ3MgJiBYVF9PU0ZfTE9HKSAmJgotCQkJICAgIGluZm8tPmxvZ2xldmVsID09IFhUX09TRl9MT0dMRVZFTF9GSVJTVCkKIAkJCQlicmVhazsKIAkJfQorCisJCWlmIChmbWF0Y2ggIT0gRk1BVENIX09QVF9XUk9ORykgeworCQkJZm1hdGNoID0gRk1BVENIX1dST05HOworCisJCQlzd2l0Y2ggKGNoZWNrX1dTUykgeworCQkJY2FzZSBPU0ZfV1NTX1BMQUlOOgorCQkJCWlmIChmLT53c3MudmFsID09IDAgfHwgd2luZG93ID09IGYtPndzcy52YWwpCisJCQkJCWZtYXRjaCA9IEZNQVRDSF9PSzsKKwkJCQlicmVhazsKKwkJCWNhc2UgT1NGX1dTU19NU1M6CisJCQkJLyoKKwkJCQkgKiBTb21lIHNtYXJ0IG1vZGVtcyBkZWNyZWFzZSBtYW5nbGUgTVNTIHRvCisJCQkJICogU01BUlRfTVNTXzIsIHNvIHdlIGNoZWNrIHN0YW5kYXJkLCBkZWNyZWFzZWQKKwkJCQkgKiBhbmQgdGhlIG9uZSBwcm92aWRlZCBpbiB0aGUgZmluZ2VycHJpbnQgTVNTCisJCQkJICogdmFsdWVzLgorCQkJCSAqLworI2RlZmluZSBTTUFSVF9NU1NfMQkxNDYwCisjZGVmaW5lIFNNQVJUX01TU18yCTE0NDgKKwkJCQlpZiAod2luZG93ID09IGYtPndzcy52YWwgKiBtc3MgfHwKKwkJCQkgICAgd2luZG93ID09IGYtPndzcy52YWwgKiBTTUFSVF9NU1NfMSB8fAorCQkJCSAgICB3aW5kb3cgPT0gZi0+d3NzLnZhbCAqIFNNQVJUX01TU18yKQorCQkJCQlmbWF0Y2ggPSBGTUFUQ0hfT0s7CisJCQkJYnJlYWs7CisJCQljYXNlIE9TRl9XU1NfTVRVOgorCQkJCWlmICh3aW5kb3cgPT0gZi0+d3NzLnZhbCAqIChtc3MgKyA0MCkgfHwKKwkJCQkgICAgd2luZG93ID09IGYtPndzcy52YWwgKiAoU01BUlRfTVNTXzEgKyA0MCkgfHwKKwkJCQkgICAgd2luZG93ID09IGYtPndzcy52YWwgKiAoU01BUlRfTVNTXzIgKyA0MCkpCisJCQkJCWZtYXRjaCA9IEZNQVRDSF9PSzsKKwkJCQlicmVhazsKKwkJCWNhc2UgT1NGX1dTU19NT0RVTE86CisJCQkJaWYgKCh3aW5kb3cgJSBmLT53c3MudmFsKSA9PSAwKQorCQkJCQlmbWF0Y2ggPSBGTUFUQ0hfT0s7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoZm1hdGNoICE9IEZNQVRDSF9PSykKKwkJCWNvbnRpbnVlOworCisJCWZjb3VudCsrOworCisJCWlmIChpbmZvLT5mbGFncyAmIFhUX09TRl9MT0cpCisJCQluZl9sb2dfcGFja2V0KG5ldCwgcC0+ZmFtaWx5LCBwLT5ob29rbnVtLCBza2IsCisJCQkJICAgICAgcC0+aW4sIHAtPm91dCwgTlVMTCwKKwkJCQkgICAgICAiJXMgWyVzOiVzXSA6ICVwSTQ6JWQgLT4gJXBJNDolZCBob3BzPSVkXG4iLAorCQkJCSAgICAgIGYtPmdlbnJlLCBmLT52ZXJzaW9uLCBmLT5zdWJ0eXBlLAorCQkJCSAgICAgICZpcC0+c2FkZHIsIG50b2hzKHRjcC0+c291cmNlKSwKKwkJCQkgICAgICAmaXAtPmRhZGRyLCBudG9ocyh0Y3AtPmRlc3QpLAorCQkJCSAgICAgIGYtPnR0bCAtIGlwLT50dGwpOworCisJCWlmICgoaW5mby0+ZmxhZ3MgJiBYVF9PU0ZfTE9HKSAmJgorCQkgICAgaW5mby0+bG9nbGV2ZWwgPT0gWFRfT1NGX0xPR0xFVkVMX0ZJUlNUKQorCQkJYnJlYWs7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCmluZGV4IGMyZjJhNTMuLjdmZDExMDQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCkBAIC0zMjQsOCArMzI0LDcgQEAKIAlyZXR1cm4gMDsKIAogYWRkX3N0ZF9mYWlsdXJlOgotCWlmIChkb2lfZGVmKQotCQljaXBzb192NF9kb2lfZnJlZShkb2lfZGVmKTsKKwljaXBzb192NF9kb2lfZnJlZShkb2lfZGVmKTsKIAlyZXR1cm4gcmV0X3ZhbDsKIH0KIApAQCAtNjQxLDcgKzY0MCw4IEBACiAJaWYgKHJldF92YWwgIT0gMCkKIAkJZ290byBsaXN0YWxsX2NiX2ZhaWx1cmU7CiAKLQlyZXR1cm4gZ2VubG1zZ19lbmQoY2JfYXJnLT5za2IsIGRhdGEpOworCWdlbmxtc2dfZW5kKGNiX2FyZy0+c2tiLCBkYXRhKTsKKwlyZXR1cm4gMDsKIAogbGlzdGFsbF9jYl9mYWlsdXJlOgogCWdlbmxtc2dfY2FuY2VsKGNiX2FyZy0+c2tiLCBkYXRhKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfa2FwaS5jCmluZGV4IGE4NDVjZDQuLjI4Y2RkYzggMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9rYXBpLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2thcGkuYwpAQCAtMTA2NSwxMCArMTA2NSwxMiBAQAogCQkJICB1MTYgZmFtaWx5LAogCQkJICBzdHJ1Y3QgbmV0bGJsX2xzbV9zZWNhdHRyICpzZWNhdHRyKQogeworCXVuc2lnbmVkIGNoYXIgKnB0cjsKKwogCXN3aXRjaCAoZmFtaWx5KSB7CiAJY2FzZSBBRl9JTkVUOgotCQlpZiAoQ0lQU09fVjRfT1BURVhJU1Qoc2tiKSAmJgotCQkgICAgY2lwc29fdjRfc2tidWZmX2dldGF0dHIoc2tiLCBzZWNhdHRyKSA9PSAwKQorCQlwdHIgPSBjaXBzb192NF9vcHRwdHIoc2tiKTsKKwkJaWYgKHB0ciAmJiBjaXBzb192NF9nZXRhdHRyKHB0ciwgc2VjYXR0cikgPT0gMCkKIAkJCXJldHVybiAwOwogCQlicmVhazsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQpAQCAtMTA5NCw3ICsxMDk2LDcgQEAKICAqLwogdm9pZCBuZXRsYmxfc2tidWZmX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXJyb3IsIGludCBnYXRld2F5KQogewotCWlmIChDSVBTT19WNF9PUFRFWElTVChza2IpKQorCWlmIChjaXBzb192NF9vcHRwdHIoc2tiKSkKIAkJY2lwc29fdjRfZXJyb3Ioc2tiLCBlcnJvciwgZ2F0ZXdheSk7CiB9CiAKQEAgLTExMjYsMTEgKzExMjgsMTQgQEAKIGludCBuZXRsYmxfY2FjaGVfYWRkKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgICAgY29uc3Qgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKIHsKKwl1bnNpZ25lZCBjaGFyICpwdHI7CisKIAlpZiAoKHNlY2F0dHItPmZsYWdzICYgTkVUTEJMX1NFQ0FUVFJfQ0FDSEUpID09IDApCiAJCXJldHVybiAtRU5PTVNHOwogCi0JaWYgKENJUFNPX1Y0X09QVEVYSVNUKHNrYikpCi0JCXJldHVybiBjaXBzb192NF9jYWNoZV9hZGQoc2tiLCBzZWNhdHRyKTsKKwlwdHIgPSBjaXBzb192NF9vcHRwdHIoc2tiKTsKKwlpZiAocHRyKQorCQlyZXR1cm4gY2lwc29fdjRfY2FjaGVfYWRkKHB0ciwgc2VjYXR0cik7CiAKIAlyZXR1cm4gLUVOT01TRzsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jCmluZGV4IGU2NmU5NzcuLjcwNDQwNzQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX21nbXQuYwpAQCAtOTMsMjMgKzkzLDIwIEBACiAJCQkJICBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKQogewogCWludCByZXRfdmFsID0gLUVJTlZBTDsKLQlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0bGJsX2RvbWFkZHJfbWFwICphZGRybWFwID0gTlVMTDsKIAlzdHJ1Y3QgY2lwc29fdjRfZG9pICpjaXBzb3Y0ID0gTlVMTDsKIAl1MzIgdG1wX3ZhbDsKKwlzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CiAKLQllbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOwotCWlmIChlbnRyeSA9PSBOVUxMKSB7Ci0JCXJldF92YWwgPSAtRU5PTUVNOwotCQlnb3RvIGFkZF9mYWlsdXJlOwotCX0KKwlpZiAoIWVudHJ5KQorCQlyZXR1cm4gLUVOT01FTTsKIAllbnRyeS0+ZGVmLnR5cGUgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9QUk9UT0NPTF0pOwogCWlmIChpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9ET01BSU5dKSB7CiAJCXNpemVfdCB0bXBfc2l6ZSA9IG5sYV9sZW4oaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfRE9NQUlOXSk7CiAJCWVudHJ5LT5kb21haW4gPSBrbWFsbG9jKHRtcF9zaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGVudHJ5LT5kb21haW4gPT0gTlVMTCkgewogCQkJcmV0X3ZhbCA9IC1FTk9NRU07Ci0JCQlnb3RvIGFkZF9mYWlsdXJlOworCQkJZ290byBhZGRfZnJlZV9lbnRyeTsKIAkJfQogCQlubGFfc3RybGNweShlbnRyeS0+ZG9tYWluLAogCQkJICAgIGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0RPTUFJTl0sIHRtcF9zaXplKTsKQEAgLTEyNSwxNiArMTIyLDE2IEBACiAJCWJyZWFrOwogCWNhc2UgTkVUTEJMX05MVFlQRV9DSVBTT1Y0OgogCQlpZiAoIWluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0NWNERPSV0pCi0JCQlnb3RvIGFkZF9mYWlsdXJlOworCQkJZ290byBhZGRfZnJlZV9kb21haW47CiAKIAkJdG1wX3ZhbCA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0NWNERPSV0pOwogCQljaXBzb3Y0ID0gY2lwc29fdjRfZG9pX2dldGRlZih0bXBfdmFsKTsKIAkJaWYgKGNpcHNvdjQgPT0gTlVMTCkKLQkJCWdvdG8gYWRkX2ZhaWx1cmU7CisJCQlnb3RvIGFkZF9mcmVlX2RvbWFpbjsKIAkJZW50cnktPmRlZi5jaXBzbyA9IGNpcHNvdjQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWdvdG8gYWRkX2ZhaWx1cmU7CisJCWdvdG8gYWRkX2ZyZWVfZG9tYWluOwogCX0KIAogCWlmIChpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY0QUREUl0pIHsKQEAgLTE0NSw3ICsxNDIsNyBAQAogCQlhZGRybWFwID0ga3phbGxvYyhzaXplb2YoKmFkZHJtYXApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGFkZHJtYXAgPT0gTlVMTCkgewogCQkJcmV0X3ZhbCA9IC1FTk9NRU07Ci0JCQlnb3RvIGFkZF9mYWlsdXJlOworCQkJZ290byBhZGRfZG9pX3B1dF9kZWY7CiAJCX0KIAkJSU5JVF9MSVNUX0hFQUQoJmFkZHJtYXAtPmxpc3Q0KTsKIAkJSU5JVF9MSVNUX0hFQUQoJmFkZHJtYXAtPmxpc3Q2KTsKQEAgLTE1MywxMiArMTUwLDEyIEBACiAJCWlmIChubGFfbGVuKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjRBRERSXSkgIT0KIAkJICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIHsKIAkJCXJldF92YWwgPSAtRUlOVkFMOwotCQkJZ290byBhZGRfZmFpbHVyZTsKKwkJCWdvdG8gYWRkX2ZyZWVfYWRkcm1hcDsKIAkJfQogCQlpZiAobmxhX2xlbihpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY0TUFTS10pICE9CiAJCSAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSB7CiAJCQlyZXRfdmFsID0gLUVJTlZBTDsKLQkJCWdvdG8gYWRkX2ZhaWx1cmU7CisJCQlnb3RvIGFkZF9mcmVlX2FkZHJtYXA7CiAJCX0KIAkJYWRkciA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjRBRERSXSk7CiAJCW1hc2sgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY0TUFTS10pOwpAQCAtMTY2LDcgKzE2Myw3IEBACiAJCW1hcCA9IGt6YWxsb2Moc2l6ZW9mKCptYXApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKG1hcCA9PSBOVUxMKSB7CiAJCQlyZXRfdmFsID0gLUVOT01FTTsKLQkJCWdvdG8gYWRkX2ZhaWx1cmU7CisJCQlnb3RvIGFkZF9mcmVlX2FkZHJtYXA7CiAJCX0KIAkJbWFwLT5saXN0LmFkZHIgPSBhZGRyLT5zX2FkZHIgJiBtYXNrLT5zX2FkZHI7CiAJCW1hcC0+bGlzdC5tYXNrID0gbWFzay0+c19hZGRyOwpAQCAtMTc4LDcgKzE3NSw3IEBACiAJCXJldF92YWwgPSBuZXRsYmxfYWY0bGlzdF9hZGQoJm1hcC0+bGlzdCwgJmFkZHJtYXAtPmxpc3Q0KTsKIAkJaWYgKHJldF92YWwgIT0gMCkgewogCQkJa2ZyZWUobWFwKTsKLQkJCWdvdG8gYWRkX2ZhaWx1cmU7CisJCQlnb3RvIGFkZF9mcmVlX2FkZHJtYXA7CiAJCX0KIAogCQllbnRyeS0+ZGVmLnR5cGUgPSBORVRMQkxfTkxUWVBFX0FERFJTRUxFQ1Q7CkBAIC0xOTIsNyArMTg5LDcgQEAKIAkJYWRkcm1hcCA9IGt6YWxsb2Moc2l6ZW9mKCphZGRybWFwKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChhZGRybWFwID09IE5VTEwpIHsKIAkJCXJldF92YWwgPSAtRU5PTUVNOwotCQkJZ290byBhZGRfZmFpbHVyZTsKKwkJCWdvdG8gYWRkX2RvaV9wdXRfZGVmOwogCQl9CiAJCUlOSVRfTElTVF9IRUFEKCZhZGRybWFwLT5saXN0NCk7CiAJCUlOSVRfTElTVF9IRUFEKCZhZGRybWFwLT5saXN0Nik7CkBAIC0yMDAsMTIgKzE5NywxMiBAQAogCQlpZiAobmxhX2xlbihpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY2QUREUl0pICE9CiAJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgewogCQkJcmV0X3ZhbCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGFkZF9mYWlsdXJlOworCQkJZ290byBhZGRfZnJlZV9hZGRybWFwOwogCQl9CiAJCWlmIChubGFfbGVuKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjZNQVNLXSkgIT0KIAkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSB7CiAJCQlyZXRfdmFsID0gLUVJTlZBTDsKLQkJCWdvdG8gYWRkX2ZhaWx1cmU7CisJCQlnb3RvIGFkZF9mcmVlX2FkZHJtYXA7CiAJCX0KIAkJYWRkciA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0lQVjZBRERSXSk7CiAJCW1hc2sgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tOTEJMX01HTVRfQV9JUFY2TUFTS10pOwpAQCAtMjEzLDcgKzIxMCw3IEBACiAJCW1hcCA9IGt6YWxsb2Moc2l6ZW9mKCptYXApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKG1hcCA9PSBOVUxMKSB7CiAJCQlyZXRfdmFsID0gLUVOT01FTTsKLQkJCWdvdG8gYWRkX2ZhaWx1cmU7CisJCQlnb3RvIGFkZF9mcmVlX2FkZHJtYXA7CiAJCX0KIAkJbWFwLT5saXN0LmFkZHIgPSAqYWRkcjsKIAkJbWFwLT5saXN0LmFkZHIuczZfYWRkcjMyWzBdICY9IG1hc2stPnM2X2FkZHIzMlswXTsKQEAgLTIyNyw3ICsyMjQsNyBAQAogCQlyZXRfdmFsID0gbmV0bGJsX2FmNmxpc3RfYWRkKCZtYXAtPmxpc3QsICZhZGRybWFwLT5saXN0Nik7CiAJCWlmIChyZXRfdmFsICE9IDApIHsKIAkJCWtmcmVlKG1hcCk7Ci0JCQlnb3RvIGFkZF9mYWlsdXJlOworCQkJZ290byBhZGRfZnJlZV9hZGRybWFwOwogCQl9CiAKIAkJZW50cnktPmRlZi50eXBlID0gTkVUTEJMX05MVFlQRV9BRERSU0VMRUNUOwpAQCAtMjM3LDE2ICsyMzQsMTcgQEAKIAogCXJldF92YWwgPSBuZXRsYmxfZG9taHNoX2FkZChlbnRyeSwgYXVkaXRfaW5mbyk7CiAJaWYgKHJldF92YWwgIT0gMCkKLQkJZ290byBhZGRfZmFpbHVyZTsKKwkJZ290byBhZGRfZnJlZV9hZGRybWFwOwogCiAJcmV0dXJuIDA7CiAKLWFkZF9mYWlsdXJlOgotCWlmIChjaXBzb3Y0KQotCQljaXBzb192NF9kb2lfcHV0ZGVmKGNpcHNvdjQpOwotCWlmIChlbnRyeSkKLQkJa2ZyZWUoZW50cnktPmRvbWFpbik7CithZGRfZnJlZV9hZGRybWFwOgogCWtmcmVlKGFkZHJtYXApOworYWRkX2RvaV9wdXRfZGVmOgorCWNpcHNvX3Y0X2RvaV9wdXRkZWYoY2lwc292NCk7CithZGRfZnJlZV9kb21haW46CisJa2ZyZWUoZW50cnktPmRvbWFpbik7CithZGRfZnJlZV9lbnRyeToKIAlrZnJlZShlbnRyeSk7CiAJcmV0dXJuIHJldF92YWw7CiB9CkBAIC00NTYsNyArNDU0LDggQEAKIAkJZ290byBsaXN0YWxsX2NiX2ZhaWx1cmU7CiAKIAljYl9hcmctPnNlcSsrOwotCXJldHVybiBnZW5sbXNnX2VuZChjYl9hcmctPnNrYiwgZGF0YSk7CisJZ2VubG1zZ19lbmQoY2JfYXJnLT5za2IsIGRhdGEpOworCXJldHVybiAwOwogCiBsaXN0YWxsX2NiX2ZhaWx1cmU6CiAJZ2VubG1zZ19jYW5jZWwoY2JfYXJnLT5za2IsIGRhdGEpOwpAQCAtNjIwLDcgKzYxOSw4IEBACiAJaWYgKHJldF92YWwgIT0gMCkKIAkJZ290byBwcm90b2NvbHNfY2JfZmFpbHVyZTsKIAotCXJldHVybiBnZW5sbXNnX2VuZChza2IsIGRhdGEpOworCWdlbmxtc2dfZW5kKHNrYiwgZGF0YSk7CisJcmV0dXJuIDA7CiAKIHByb3RvY29sc19jYl9mYWlsdXJlOgogCWdlbmxtc2dfY2FuY2VsKHNrYiwgZGF0YSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmMKaW5kZXggNzhhNjNjMS4uYWVjNzk5NCAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYwpAQCAtMTE2Myw3ICsxMTYzLDggQEAKIAkJZ290byBsaXN0X2NiX2ZhaWx1cmU7CiAKIAljYl9hcmctPnNlcSsrOwotCXJldHVybiBnZW5sbXNnX2VuZChjYl9hcmctPnNrYiwgZGF0YSk7CisJZ2VubG1zZ19lbmQoY2JfYXJnLT5za2IsIGRhdGEpOworCXJldHVybiAwOwogCiBsaXN0X2NiX2ZhaWx1cmU6CiAJZ2VubG1zZ19jYW5jZWwoY2JfYXJnLT5za2IsIGRhdGEpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDAyZmRkZTIuLjI3MDI2NzMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTk4LDEyICs5OCwxMiBAQAogc3RhdGljIHZvaWQgbmV0bGlua19za2JfZGVzdHJ1Y3RvcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogLyogbmxfdGFibGUgbG9ja2luZyBleHBsYWluZWQ6Ci0gKiBMb29rdXAgYW5kIHRyYXZlcnNhbCBhcmUgcHJvdGVjdGVkIHdpdGggbmxfc2tfaGFzaF9sb2NrIG9yIG5sX3RhYmxlX2xvY2sKLSAqIGNvbWJpbmVkIHdpdGggYW4gUkNVIHJlYWQtc2lkZSBsb2NrLiBJbnNlcnRpb24gYW5kIHJlbW92YWwgYXJlIHByb3RlY3RlZAotICogd2l0aCBubF9za19oYXNoX2xvY2sgd2hpbGUgdXNpbmcgUkNVIGxpc3QgbW9kaWZpY2F0aW9uIHByaW1pdGl2ZXMgYW5kIG1heQotICogcnVuIGluIHBhcmFsbGVsIHRvIG5sX3RhYmxlX2xvY2sgcHJvdGVjdGVkIGxvb2t1cHMuIERlc3RydWN0aW9uIG9mIHRoZQotICogTmV0bGluayBzb2NrZXQgbWF5IG9ubHkgb2NjdXIgKmFmdGVyKiBubF90YWJsZV9sb2NrIGhhcyBiZWVuIGFjcXVpcmVkCi0gKiBlaXRoZXIgZHVyaW5nIG9yIGFmdGVyIHRoZSBzb2NrZXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LgorICogTG9va3VwIGFuZCB0cmF2ZXJzYWwgYXJlIHByb3RlY3RlZCB3aXRoIGFuIFJDVSByZWFkLXNpZGUgbG9jay4gSW5zZXJ0aW9uCisgKiBhbmQgcmVtb3ZhbCBhcmUgcHJvdGVjdGVkIHdpdGggcGVyIGJ1Y2tldCBsb2NrIHdoaWxlIHVzaW5nIFJDVSBsaXN0CisgKiBtb2RpZmljYXRpb24gcHJpbWl0aXZlcyBhbmQgbWF5IHJ1biBpbiBwYXJhbGxlbCB0byBSQ1UgcHJvdGVjdGVkIGxvb2t1cHMuCisgKiBEZXN0cnVjdGlvbiBvZiB0aGUgTmV0bGluayBzb2NrZXQgbWF5IG9ubHkgb2NjdXIgKmFmdGVyKiBubF90YWJsZV9sb2NrIGhhcworICogYmVlbiBhY3F1aXJlZCAqIGVpdGhlciBkdXJpbmcgb3IgYWZ0ZXIgdGhlIHNvY2tldCBoYXMgYmVlbiByZW1vdmVkIGZyb20KKyAqIHRoZSBsaXN0IGFuZCBhZnRlciBhbiBSQ1UgZ3JhY2UgcGVyaW9kLgogICovCiBERUZJTkVfUldMT0NLKG5sX3RhYmxlX2xvY2spOwogRVhQT1JUX1NZTUJPTF9HUEwobmxfdGFibGVfbG9jayk7CkBAIC0xMTEsMTkgKzExMSw2IEBACiAKICNkZWZpbmUgbmxfZGVyZWZfcHJvdGVjdGVkKFgpIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoWCwgbG9ja2RlcF9pc19oZWxkKCZubF90YWJsZV9sb2NrKSk7CiAKLS8qIFByb3RlY3RzIG5ldGxpbmsgc29ja2V0IGhhc2ggdGFibGUgbXV0YXRpb25zICovCi1ERUZJTkVfTVVURVgobmxfc2tfaGFzaF9sb2NrKTsKLUVYUE9SVF9TWU1CT0xfR1BMKG5sX3NrX2hhc2hfbG9jayk7Ci0KLSNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORwotc3RhdGljIGludCBsb2NrZGVwX25sX3NrX2hhc2hfaXNfaGVsZCh2b2lkICpwYXJlbnQpCi17Ci0JaWYgKGRlYnVnX2xvY2tzKQotCQlyZXR1cm4gbG9ja2RlcF9pc19oZWxkKCZubF9za19oYXNoX2xvY2spIHx8IGxvY2tkZXBfaXNfaGVsZCgmbmxfdGFibGVfbG9jayk7Ci0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKLQogc3RhdGljIEFUT01JQ19OT1RJRklFUl9IRUFEKG5ldGxpbmtfY2hhaW4pOwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5ldGxpbmtfdGFwX2xvY2spOwpAQCAtNzA4LDcgKzY5NSw3IEBACiAKIHN0YXRpYyBpbnQgbmV0bGlua19tbWFwX3NlbmRtc2coc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCQkJdTMyIGRzdF9wb3J0aWQsIHUzMiBkc3RfZ3JvdXAsCi0JCQkJc3RydWN0IHNvY2tfaW9jYiAqc2lvY2IpCisJCQkJc3RydWN0IHNjbV9jb29raWUgKnNjbSkKIHsKIAlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGsgPSBubGtfc2soc2spOwogCXN0cnVjdCBuZXRsaW5rX3JpbmcgKnJpbmc7CkBAIC03NTQsNyArNzQxLDcgQEAKIAogCQlORVRMSU5LX0NCKHNrYikucG9ydGlkCSAgPSBubGstPnBvcnRpZDsKIAkJTkVUTElOS19DQihza2IpLmRzdF9ncm91cCA9IGRzdF9ncm91cDsKLQkJTkVUTElOS19DQihza2IpLmNyZWRzCSAgPSBzaW9jYi0+c2NtLT5jcmVkczsKKwkJTkVUTElOS19DQihza2IpLmNyZWRzCSAgPSBzY20tPmNyZWRzOwogCiAJCWVyciA9IHNlY3VyaXR5X25ldGxpbmtfc2VuZChzaywgc2tiKTsKIAkJaWYgKGVycikgewpAQCAtODMzLDcgKzgyMCw3IEBACiAjZGVmaW5lIG5ldGxpbmtfdHhfaXNfbW1hcGVkKHNrKQlmYWxzZQogI2RlZmluZSBuZXRsaW5rX21tYXAJCQlzb2NrX25vX21tYXAKICNkZWZpbmUgbmV0bGlua19wb2xsCQkJZGF0YWdyYW1fcG9sbAotI2RlZmluZSBuZXRsaW5rX21tYXBfc2VuZG1zZyhzaywgbXNnLCBkc3RfcG9ydGlkLCBkc3RfZ3JvdXAsIHNpb2NiKQkwCisjZGVmaW5lIG5ldGxpbmtfbW1hcF9zZW5kbXNnKHNrLCBtc2csIGRzdF9wb3J0aWQsIGRzdF9ncm91cCwgc2NtKQkwCiAjZW5kaWYgLyogQ09ORklHX05FVExJTktfTU1BUCAqLwogCiBzdGF0aWMgdm9pZCBuZXRsaW5rX3NrYl9kZXN0cnVjdG9yKHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xMDAzLDI2ICs5OTAsMzMgQEAKIAkJLm5ldCA9IG5ldCwKIAkJLnBvcnRpZCA9IHBvcnRpZCwKIAl9OwotCXUzMiBoYXNoOwogCi0JaGFzaCA9IHJoYXNodGFibGVfaGFzaGZuKCZ0YWJsZS0+aGFzaCwgJnBvcnRpZCwgc2l6ZW9mKHBvcnRpZCkpOwotCi0JcmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2NvbXBhcmUoJnRhYmxlLT5oYXNoLCBoYXNoLAorCXJldHVybiByaGFzaHRhYmxlX2xvb2t1cF9jb21wYXJlKCZ0YWJsZS0+aGFzaCwgJnBvcnRpZCwKIAkJCQkJICZuZXRsaW5rX2NvbXBhcmUsICZhcmcpOwogfQogCitzdGF0aWMgYm9vbCBfX25ldGxpbmtfaW5zZXJ0KHN0cnVjdCBuZXRsaW5rX3RhYmxlICp0YWJsZSwgc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBuZXRsaW5rX2NvbXBhcmVfYXJnIGFyZyA9IHsKKwkJLm5ldCA9IHNvY2tfbmV0KHNrKSwKKwkJLnBvcnRpZCA9IG5sa19zayhzayktPnBvcnRpZCwKKwl9OworCisJcmV0dXJuIHJoYXNodGFibGVfbG9va3VwX2NvbXBhcmVfaW5zZXJ0KCZ0YWJsZS0+aGFzaCwKKwkJCQkJCSZubGtfc2soc2spLT5ub2RlLAorCQkJCQkJJm5ldGxpbmtfY29tcGFyZSwgJmFyZyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbmV0bGlua19sb29rdXAoc3RydWN0IG5ldCAqbmV0LCBpbnQgcHJvdG9jb2wsIHUzMiBwb3J0aWQpCiB7CiAJc3RydWN0IG5ldGxpbmtfdGFibGUgKnRhYmxlID0gJm5sX3RhYmxlW3Byb3RvY29sXTsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAKLQlyZWFkX2xvY2soJm5sX3RhYmxlX2xvY2spOwogCXJjdV9yZWFkX2xvY2soKTsKIAlzayA9IF9fbmV0bGlua19sb29rdXAodGFibGUsIHBvcnRpZCwgbmV0KTsKIAlpZiAoc2spCiAJCXNvY2tfaG9sZChzayk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmVhZF91bmxvY2soJm5sX3RhYmxlX2xvY2spOwogCiAJcmV0dXJuIHNrOwogfQpAQCAtMTA1MywyOSArMTA0NywzMyBAQAogCSAqIG1ha2VzIHN1cmUgdXBkYXRlcyBhcmUgdmlzaWJsZSBiZWZvcmUgYmluZCBvciBzZXRzb2Nrb3B0IHJldHVybi4gKi8KIH0KIAotc3RhdGljIGludCBuZXRsaW5rX2luc2VydChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBvcnRpZCkKK3N0YXRpYyBpbnQgbmV0bGlua19pbnNlcnQoc3RydWN0IHNvY2sgKnNrLCB1MzIgcG9ydGlkKQogewogCXN0cnVjdCBuZXRsaW5rX3RhYmxlICp0YWJsZSA9ICZubF90YWJsZVtzay0+c2tfcHJvdG9jb2xdOwotCWludCBlcnIgPSAtRUFERFJJTlVTRTsKKwlpbnQgZXJyOwogCi0JbXV0ZXhfbG9jaygmbmxfc2tfaGFzaF9sb2NrKTsKLQlpZiAoX19uZXRsaW5rX2xvb2t1cCh0YWJsZSwgcG9ydGlkLCBuZXQpKQotCQlnb3RvIGVycjsKKwlsb2NrX3NvY2soc2spOwogCiAJZXJyID0gLUVCVVNZOwogCWlmIChubGtfc2soc2spLT5wb3J0aWQpCiAJCWdvdG8gZXJyOwogCiAJZXJyID0gLUVOT01FTTsKLQlpZiAoQklUU19QRVJfTE9ORyA+IDMyICYmIHVubGlrZWx5KHRhYmxlLT5oYXNoLm5lbGVtcyA+PSBVSU5UX01BWCkpCisJaWYgKEJJVFNfUEVSX0xPTkcgPiAzMiAmJgorCSAgICB1bmxpa2VseShhdG9taWNfcmVhZCgmdGFibGUtPmhhc2gubmVsZW1zKSA+PSBVSU5UX01BWCkpCiAJCWdvdG8gZXJyOwogCiAJbmxrX3NrKHNrKS0+cG9ydGlkID0gcG9ydGlkOwogCXNvY2tfaG9sZChzayk7Ci0Jcmhhc2h0YWJsZV9pbnNlcnQoJnRhYmxlLT5oYXNoLCAmbmxrX3NrKHNrKS0+bm9kZSk7CisKIAllcnIgPSAwOworCWlmICghX19uZXRsaW5rX2luc2VydCh0YWJsZSwgc2spKSB7CisJCWVyciA9IC1FQUREUklOVVNFOworCQlzb2NrX3B1dChzayk7CisJfQorCiBlcnI6Ci0JbXV0ZXhfdW5sb2NrKCZubF9za19oYXNoX2xvY2spOworCXJlbGVhc2Vfc29jayhzayk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTA4MywxMyArMTA4MSwxMSBAQAogewogCXN0cnVjdCBuZXRsaW5rX3RhYmxlICp0YWJsZTsKIAotCW11dGV4X2xvY2soJm5sX3NrX2hhc2hfbG9jayk7CiAJdGFibGUgPSAmbmxfdGFibGVbc2stPnNrX3Byb3RvY29sXTsKIAlpZiAocmhhc2h0YWJsZV9yZW1vdmUoJnRhYmxlLT5oYXNoLCAmbmxrX3NrKHNrKS0+bm9kZSkpIHsKIAkJV0FSTl9PTihhdG9taWNfcmVhZCgmc2stPnNrX3JlZmNudCkgPT0gMSk7CiAJCV9fc29ja19wdXQoc2spOwogCX0KLQltdXRleF91bmxvY2soJm5sX3NrX2hhc2hfbG9jayk7CiAKIAluZXRsaW5rX3RhYmxlX2dyYWIoKTsKIAlpZiAobmxrX3NrKHNrKS0+c3Vic2NyaXB0aW9ucykgewpAQCAtMTE5Nyw2ICsxMTkzLDEzIEBACiAJZ290byBvdXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGRlZmVycmVkX3B1dF9ubGtfc2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sayA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgbmV0bGlua19zb2NrLCByY3UpOworCisJc29ja19wdXQoJm5say0+c2spOworfQorCiBzdGF0aWMgaW50IG5ldGxpbmtfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwpAQCAtMTI2OSw3ICsxMjcyLDcgQEAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7CiAJc29ja19wcm90X2ludXNlX2FkZChzb2NrX25ldChzayksICZuZXRsaW5rX3Byb3RvLCAtMSk7CiAJbG9jYWxfYmhfZW5hYmxlKCk7Ci0Jc29ja19wdXQoc2spOworCWNhbGxfcmN1KCZubGstPnJjdSwgZGVmZXJyZWRfcHV0X25sa19zayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyODQsNyArMTI4Nyw2IEBACiAKIHJldHJ5OgogCWNvbmRfcmVzY2hlZCgpOwotCW5ldGxpbmtfdGFibGVfZ3JhYigpOwogCXJjdV9yZWFkX2xvY2soKTsKIAlpZiAoX19uZXRsaW5rX2xvb2t1cCh0YWJsZSwgcG9ydGlkLCBuZXQpKSB7CiAJCS8qIEJpbmQgY29sbGlzaW9uLCBzZWFyY2ggbmVnYXRpdmUgcG9ydGlkIHZhbHVlcy4gKi8KQEAgLTEyOTIsMTMgKzEyOTQsMTEgQEAKIAkJaWYgKHJvdmVyID4gLTQwOTcpCiAJCQlyb3ZlciA9IC00MDk3OwogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJbmV0bGlua190YWJsZV91bmdyYWIoKTsKIAkJZ290byByZXRyeTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JbmV0bGlua190YWJsZV91bmdyYWIoKTsKIAotCWVyciA9IG5ldGxpbmtfaW5zZXJ0KHNrLCBuZXQsIHBvcnRpZCk7CisJZXJyID0gbmV0bGlua19pbnNlcnQoc2ssIHBvcnRpZCk7CiAJaWYgKGVyciA9PSAtRUFERFJJTlVTRSkKIAkJZ290byByZXRyeTsKIApAQCAtMTQzOCw3ICsxNDM4LDcgQEAKIAogCWZvciAodW5kbyA9IDA7IHVuZG8gPCBncm91cDsgdW5kbysrKQogCQlpZiAodGVzdF9iaXQodW5kbywgJmdyb3VwcykpCi0JCQlubGstPm5ldGxpbmtfdW5iaW5kKHNvY2tfbmV0KHNrKSwgdW5kbyk7CisJCQlubGstPm5ldGxpbmtfdW5iaW5kKHNvY2tfbmV0KHNrKSwgdW5kbyArIDEpOwogfQogCiBzdGF0aWMgaW50IG5ldGxpbmtfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCkBAIC0xNDc2LDcgKzE0NzYsNyBAQAogCQlmb3IgKGdyb3VwID0gMDsgZ3JvdXAgPCBubGstPm5ncm91cHM7IGdyb3VwKyspIHsKIAkJCWlmICghdGVzdF9iaXQoZ3JvdXAsICZncm91cHMpKQogCQkJCWNvbnRpbnVlOwotCQkJZXJyID0gbmxrLT5uZXRsaW5rX2JpbmQobmV0LCBncm91cCk7CisJCQllcnIgPSBubGstPm5ldGxpbmtfYmluZChuZXQsIGdyb3VwICsgMSk7CiAJCQlpZiAoIWVycikKIAkJCQljb250aW51ZTsKIAkJCW5ldGxpbmtfdW5kb19iaW5kKGdyb3VwLCBncm91cHMsIHNrKTsKQEAgLTE0ODYsNyArMTQ4Niw3IEBACiAKIAlpZiAoIW5say0+cG9ydGlkKSB7CiAJCWVyciA9IG5sYWRkci0+bmxfcGlkID8KLQkJCW5ldGxpbmtfaW5zZXJ0KHNrLCBuZXQsIG5sYWRkci0+bmxfcGlkKSA6CisJCQluZXRsaW5rX2luc2VydChzaywgbmxhZGRyLT5ubF9waWQpIDoKIAkJCW5ldGxpbmtfYXV0b2JpbmQoc29jayk7CiAJCWlmIChlcnIpIHsKIAkJCW5ldGxpbmtfdW5kb19iaW5kKG5say0+bmdyb3VwcywgZ3JvdXBzLCBzayk7CkBAIC0yMjU5LDcgKzIyNTksNiBAQAogc3RhdGljIGludCBuZXRsaW5rX3NlbmRtc2coc3RydWN0IGtpb2NiICpraW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCSAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3Qgc29ja19pb2NiICpzaW9jYiA9IGtpb2NiX3RvX3Npb2NiKGtpb2NiKTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGsgPSBubGtfc2soc2spOwogCURFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX25sICosIGFkZHIsIG1zZy0+bXNnX25hbWUpOwpAQCAtMjI3MywxMCArMjI3Miw3IEBACiAJaWYgKG1zZy0+bXNnX2ZsYWdzJk1TR19PT0IpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChOVUxMID09IHNpb2NiLT5zY20pCi0JCXNpb2NiLT5zY20gPSAmc2NtOwotCi0JZXJyID0gc2NtX3NlbmQoc29jaywgbXNnLCBzaW9jYi0+c2NtLCB0cnVlKTsKKwllcnIgPSBzY21fc2VuZChzb2NrLCBtc2csICZzY20sIHRydWUpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0yMzAyLDEwICsyMjk4LDE1IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKKwkvKiBJdCdzIGEgcmVhbGx5IGNvbnZvbHV0ZWQgd2F5IGZvciB1c2VybGFuZCB0byBhc2sgZm9yIG1tYXBlZAorCSAqIHNlbmRtc2coKSwgYnV0IHRoYXQncyB3aGF0IHdlJ3ZlIGdvdC4uLgorCSAqLwogCWlmIChuZXRsaW5rX3R4X2lzX21tYXBlZChzaykgJiYKKwkgICAgbXNnLT5tc2dfaXRlci50eXBlID09IElURVJfSU9WRUMgJiYKKwkgICAgbXNnLT5tc2dfaXRlci5ucl9zZWdzID09IDEgJiYKIAkgICAgbXNnLT5tc2dfaXRlci5pb3YtPmlvdl9iYXNlID09IE5VTEwpIHsKIAkJZXJyID0gbmV0bGlua19tbWFwX3NlbmRtc2coc2ssIG1zZywgZHN0X3BvcnRpZCwgZHN0X2dyb3VwLAotCQkJCQkgICBzaW9jYik7CisJCQkJCSAgICZzY20pOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTIzMTksNyArMjMyMCw3IEBACiAKIAlORVRMSU5LX0NCKHNrYikucG9ydGlkCT0gbmxrLT5wb3J0aWQ7CiAJTkVUTElOS19DQihza2IpLmRzdF9ncm91cCA9IGRzdF9ncm91cDsKLQlORVRMSU5LX0NCKHNrYikuY3JlZHMJPSBzaW9jYi0+c2NtLT5jcmVkczsKKwlORVRMSU5LX0NCKHNrYikuY3JlZHMJPSBzY20uY3JlZHM7CiAJTkVUTElOS19DQihza2IpLmZsYWdzCT0gbmV0bGlua19za2JfZmxhZ3M7CiAKIAllcnIgPSAtRUZBVUxUOwpAQCAtMjM0MSw3ICsyMzQyLDcgQEAKIAllcnIgPSBuZXRsaW5rX3VuaWNhc3Qoc2ssIHNrYiwgZHN0X3BvcnRpZCwgbXNnLT5tc2dfZmxhZ3MmTVNHX0RPTlRXQUlUKTsKIAogb3V0OgotCXNjbV9kZXN0cm95KHNpb2NiLT5zY20pOworCXNjbV9kZXN0cm95KCZzY20pOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIzNDksNyArMjM1MCw2IEBACiAJCQkgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4sCiAJCQkgICBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHNvY2tfaW9jYiAqc2lvY2IgPSBraW9jYl90b19zaW9jYihraW9jYik7CiAJc3RydWN0IHNjbV9jb29raWUgc2NtOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sayA9IG5sa19zayhzayk7CkBAIC0yNDEyLDExICsyNDEyLDggQEAKIAlpZiAobmxrLT5mbGFncyAmIE5FVExJTktfUkVDVl9QS1RJTkZPKQogCQluZXRsaW5rX2Ntc2dfcmVjdl9wa3RpbmZvKG1zZywgc2tiKTsKIAotCWlmIChOVUxMID09IHNpb2NiLT5zY20pIHsKLQkJbWVtc2V0KCZzY20sIDAsIHNpemVvZihzY20pKTsKLQkJc2lvY2ItPnNjbSA9ICZzY207Ci0JfQotCXNpb2NiLT5zY20tPmNyZWRzID0gKk5FVExJTktfQ1JFRFMoc2tiKTsKKwltZW1zZXQoJnNjbSwgMCwgc2l6ZW9mKHNjbSkpOworCXNjbS5jcmVkcyA9ICpORVRMSU5LX0NSRURTKHNrYik7CiAJaWYgKGZsYWdzICYgTVNHX1RSVU5DKQogCQljb3BpZWQgPSBkYXRhX3NrYi0+bGVuOwogCkBAIC0yNDMxLDcgKzI0MjgsNyBAQAogCQl9CiAJfQogCi0Jc2NtX3JlY3Yoc29jaywgbXNnLCBzaW9jYi0+c2NtLCBmbGFncyk7CisJc2NtX3JlY3Yoc29jaywgbXNnLCAmc2NtLCBmbGFncyk7CiBvdXQ6CiAJbmV0bGlua19yY3Zfd2FrZShzayk7CiAJcmV0dXJuIGVyciA/IDogY29waWVkOwpAQCAtMjQ5Miw3ICsyNDg5LDcgQEAKIAlpZiAoY2ZnICYmIGNmZy0+aW5wdXQpCiAJCW5sa19zayhzayktPm5ldGxpbmtfcmN2ID0gY2ZnLT5pbnB1dDsKIAotCWlmIChuZXRsaW5rX2luc2VydChzaywgbmV0LCAwKSkKKwlpZiAobmV0bGlua19pbnNlcnQoc2ssIDApKQogCQlnb3RvIG91dF9zb2NrX3JlbGVhc2U7CiAKIAlubGsgPSBubGtfc2soc2spOwpAQCAtMjg5NCw5NyArMjg5MSw5NyBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdHJ1Y3Qgbmxfc2VxX2l0ZXIgewogCXN0cnVjdCBzZXFfbmV0X3ByaXZhdGUgcDsKKwlzdHJ1Y3Qgcmhhc2h0YWJsZV9pdGVyIGh0aTsKIAlpbnQgbGluazsKLQlpbnQgaGFzaF9pZHg7CiB9OwogCi1zdGF0aWMgc3RydWN0IHNvY2sgKm5ldGxpbmtfc2VxX3NvY2tldF9pZHgoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCBwb3MpCitzdGF0aWMgaW50IG5ldGxpbmtfd2Fsa19zdGFydChzdHJ1Y3Qgbmxfc2VxX2l0ZXIgKml0ZXIpCiB7Ci0Jc3RydWN0IG5sX3NlcV9pdGVyICppdGVyID0gc2VxLT5wcml2YXRlOwotCWludCBpLCBqOwotCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sazsKLQlzdHJ1Y3Qgc29jayAqczsKLQlsb2ZmX3Qgb2ZmID0gMDsKKwlpbnQgZXJyOwogCi0JZm9yIChpID0gMDsgaSA8IE1BWF9MSU5LUzsgaSsrKSB7Ci0JCXN0cnVjdCByaGFzaHRhYmxlICpodCA9ICZubF90YWJsZVtpXS5oYXNoOwotCQljb25zdCBzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwgPSByaHRfZGVyZWZlcmVuY2VfcmN1KGh0LT50YmwsIGh0KTsKLQotCQlmb3IgKGogPSAwOyBqIDwgdGJsLT5zaXplOyBqKyspIHsKLQkJCXJodF9mb3JfZWFjaF9lbnRyeV9yY3UobmxrLCB0YmwtPmJ1Y2tldHNbal0sIG5vZGUpIHsKLQkJCQlzID0gKHN0cnVjdCBzb2NrICopbmxrOwotCi0JCQkJaWYgKHNvY2tfbmV0KHMpICE9IHNlcV9maWxlX25ldChzZXEpKQotCQkJCQljb250aW51ZTsKLQkJCQlpZiAob2ZmID09IHBvcykgewotCQkJCQlpdGVyLT5saW5rID0gaTsKLQkJCQkJaXRlci0+aGFzaF9pZHggPSBqOwotCQkJCQlyZXR1cm4gczsKLQkJCQl9Ci0JCQkJKytvZmY7Ci0JCQl9Ci0JCX0KKwllcnIgPSByaGFzaHRhYmxlX3dhbGtfaW5pdCgmbmxfdGFibGVbaXRlci0+bGlua10uaGFzaCwgJml0ZXItPmh0aSk7CisJaWYgKGVycikgeworCQlpdGVyLT5saW5rID0gTUFYX0xJTktTOworCQlyZXR1cm4gZXJyOwogCX0KLQlyZXR1cm4gTlVMTDsKKworCWVyciA9IHJoYXNodGFibGVfd2Fsa19zdGFydCgmaXRlci0+aHRpKTsKKwlyZXR1cm4gZXJyID09IC1FQUdBSU4gPyAwIDogZXJyOwogfQogCi1zdGF0aWMgdm9pZCAqbmV0bGlua19zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotCV9fYWNxdWlyZXMobmxfdGFibGVfbG9jaykgX19hY3F1aXJlcyhSQ1UpCitzdGF0aWMgdm9pZCBuZXRsaW5rX3dhbGtfc3RvcChzdHJ1Y3Qgbmxfc2VxX2l0ZXIgKml0ZXIpCiB7Ci0JcmVhZF9sb2NrKCZubF90YWJsZV9sb2NrKTsKLQlyY3VfcmVhZF9sb2NrKCk7Ci0JcmV0dXJuICpwb3MgPyBuZXRsaW5rX3NlcV9zb2NrZXRfaWR4KHNlcSwgKnBvcyAtIDEpIDogU0VRX1NUQVJUX1RPS0VOOworCXJoYXNodGFibGVfd2Fsa19zdG9wKCZpdGVyLT5odGkpOworCXJoYXNodGFibGVfd2Fsa19leGl0KCZpdGVyLT5odGkpOworfQorCitzdGF0aWMgdm9pZCAqX19uZXRsaW5rX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxKQoreworCXN0cnVjdCBubF9zZXFfaXRlciAqaXRlciA9IHNlcS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGs7CisKKwlkbyB7CisJCWZvciAoOzspIHsKKwkJCWludCBlcnI7CisKKwkJCW5sayA9IHJoYXNodGFibGVfd2Fsa19uZXh0KCZpdGVyLT5odGkpOworCisJCQlpZiAoSVNfRVJSKG5saykpIHsKKwkJCQlpZiAoUFRSX0VSUihubGspID09IC1FQUdBSU4pCisJCQkJCWNvbnRpbnVlOworCisJCQkJcmV0dXJuIG5sazsKKwkJCX0KKworCQkJaWYgKG5saykKKwkJCQlicmVhazsKKworCQkJbmV0bGlua193YWxrX3N0b3AoaXRlcik7CisJCQlpZiAoKytpdGVyLT5saW5rID49IE1BWF9MSU5LUykKKwkJCQlyZXR1cm4gTlVMTDsKKworCQkJZXJyID0gbmV0bGlua193YWxrX3N0YXJ0KGl0ZXIpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCQl9CisJfSB3aGlsZSAoc29ja19uZXQoJm5say0+c2spICE9IHNlcV9maWxlX25ldChzZXEpKTsKKworCXJldHVybiBubGs7Cit9CisKK3N0YXRpYyB2b2lkICpuZXRsaW5rX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3NwKQoreworCXN0cnVjdCBubF9zZXFfaXRlciAqaXRlciA9IHNlcS0+cHJpdmF0ZTsKKwl2b2lkICpvYmogPSBTRVFfU1RBUlRfVE9LRU47CisJbG9mZl90IHBvczsKKwlpbnQgZXJyOworCisJaXRlci0+bGluayA9IDA7CisKKwllcnIgPSBuZXRsaW5rX3dhbGtfc3RhcnQoaXRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKworCWZvciAocG9zID0gKnBvc3A7IHBvcyAmJiBvYmogJiYgIUlTX0VSUihvYmopOyBwb3MtLSkKKwkJb2JqID0gX19uZXRsaW5rX3NlcV9uZXh0KHNlcSk7CisKKwlyZXR1cm4gb2JqOwogfQogCiBzdGF0aWMgdm9pZCAqbmV0bGlua19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IHJoYXNodGFibGUgKmh0OwotCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sazsKLQlzdHJ1Y3Qgbmxfc2VxX2l0ZXIgKml0ZXI7Ci0Jc3RydWN0IG5ldCAqbmV0OwotCWludCBpLCBqOwotCiAJKysqcG9zOwotCi0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyZXR1cm4gbmV0bGlua19zZXFfc29ja2V0X2lkeChzZXEsIDApOwotCi0JbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7Ci0JaXRlciA9IHNlcS0+cHJpdmF0ZTsKLQlubGsgPSB2OwotCi0JaSA9IGl0ZXItPmxpbms7Ci0JaHQgPSAmbmxfdGFibGVbaV0uaGFzaDsKLQlyaHRfZm9yX2VhY2hfZW50cnkobmxrLCBubGstPm5vZGUubmV4dCwgaHQsIG5vZGUpCi0JCWlmIChuZXRfZXEoc29ja19uZXQoKHN0cnVjdCBzb2NrICopbmxrKSwgbmV0KSkKLQkJCXJldHVybiBubGs7Ci0KLQlqID0gaXRlci0+aGFzaF9pZHggKyAxOwotCi0JZG8gewotCQljb25zdCBzdHJ1Y3QgYnVja2V0X3RhYmxlICp0YmwgPSByaHRfZGVyZWZlcmVuY2VfcmN1KGh0LT50YmwsIGh0KTsKLQotCQlmb3IgKDsgaiA8IHRibC0+c2l6ZTsgaisrKSB7Ci0JCQlyaHRfZm9yX2VhY2hfZW50cnkobmxrLCB0YmwtPmJ1Y2tldHNbal0sIGh0LCBub2RlKSB7Ci0JCQkJaWYgKG5ldF9lcShzb2NrX25ldCgoc3RydWN0IHNvY2sgKilubGspLCBuZXQpKSB7Ci0JCQkJCWl0ZXItPmxpbmsgPSBpOwotCQkJCQlpdGVyLT5oYXNoX2lkeCA9IGo7Ci0JCQkJCXJldHVybiBubGs7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJaiA9IDA7Ci0JfSB3aGlsZSAoKytpIDwgTUFYX0xJTktTKTsKLQotCXJldHVybiBOVUxMOworCXJldHVybiBfX25ldGxpbmtfc2VxX25leHQoc2VxKTsKIH0KIAogc3RhdGljIHZvaWQgbmV0bGlua19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLQlfX3JlbGVhc2VzKFJDVSkgX19yZWxlYXNlcyhubF90YWJsZV9sb2NrKQogewotCXJjdV9yZWFkX3VubG9jaygpOwotCXJlYWRfdW5sb2NrKCZubF90YWJsZV9sb2NrKTsKKwlzdHJ1Y3Qgbmxfc2VxX2l0ZXIgKml0ZXIgPSBzZXEtPnByaXZhdGU7CisKKwlpZiAoaXRlci0+bGluayA+PSBNQVhfTElOS1MpCisJCXJldHVybjsKKworCW5ldGxpbmtfd2Fsa19zdG9wKGl0ZXIpOwogfQogCiAKQEAgLTMxMzEsOSArMzEyOCw2IEBACiAJCS5tYXhfc2hpZnQgPSAxNiwgLyogNjRLICovCiAJCS5ncm93X2RlY2lzaW9uID0gcmh0X2dyb3dfYWJvdmVfNzUsCiAJCS5zaHJpbmtfZGVjaXNpb24gPSByaHRfc2hyaW5rX2JlbG93XzMwLAotI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HCi0JCS5tdXRleF9pc19oZWxkID0gbG9ja2RlcF9ubF9za19oYXNoX2lzX2hlbGQsCi0jZW5kaWYKIAl9OwogCiAJaWYgKGVyciAhPSAwKQpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5oIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5oCmluZGV4IGYxYzMxYjMuLjg5MDA4NDAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuaAorKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmgKQEAgLTUxLDYgKzUxLDcgQEAKICNlbmRpZiAvKiBDT05GSUdfTkVUTElOS19NTUFQICovCiAKIAlzdHJ1Y3Qgcmhhc2hfaGVhZAlub2RlOworCXN0cnVjdCByY3VfaGVhZAkJcmN1OwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0bGlua19zb2NrICpubGtfc2soc3RydWN0IHNvY2sgKnNrKQpAQCAtNzQsNiArNzUsNSBAQAogCiBleHRlcm4gc3RydWN0IG5ldGxpbmtfdGFibGUgKm5sX3RhYmxlOwogZXh0ZXJuIHJ3bG9ja190IG5sX3RhYmxlX2xvY2s7Ci1leHRlcm4gc3RydWN0IG11dGV4IG5sX3NrX2hhc2hfbG9jazsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9kaWFnLmMgYi9uZXQvbmV0bGluay9kaWFnLmMKaW5kZXggZGU4Yzc0YS4uM2VlNjNhM2NmIDEwMDY0NAotLS0gYS9uZXQvbmV0bGluay9kaWFnLmMKKysrIGIvbmV0L25ldGxpbmsvZGlhZy5jCkBAIC05MSw3ICs5MSw4IEBACiAJICAgIHNrX2RpYWdfcHV0X3JpbmdzX2NmZyhzaywgc2tiKSkKIAkJZ290byBvdXRfbmxtc2dfdHJpbTsKIAotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiAKIG91dF9ubG1zZ190cmltOgogCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CkBAIC0xMDMsNyArMTA0LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0bGlua190YWJsZSAqdGJsID0gJm5sX3RhYmxlW3Byb3RvY29sXTsKIAlzdHJ1Y3Qgcmhhc2h0YWJsZSAqaHQgPSAmdGJsLT5oYXNoOwotCWNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKmh0YmwgPSByaHRfZGVyZWZlcmVuY2UoaHQtPnRibCwgaHQpOworCWNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKmh0YmwgPSByaHRfZGVyZWZlcmVuY2VfcmN1KGh0LT50YmwsIGh0KTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgbmV0bGlua19kaWFnX3JlcSAqcmVxOwogCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sc2s7CkBAIC0xMTMsNyArMTE0LDkgQEAKIAlyZXEgPSBubG1zZ19kYXRhKGNiLT5ubGgpOwogCiAJZm9yIChpID0gMDsgaSA8IGh0YmwtPnNpemU7IGkrKykgewotCQlyaHRfZm9yX2VhY2hfZW50cnkobmxzaywgaHRibC0+YnVja2V0c1tpXSwgaHQsIG5vZGUpIHsKKwkJc3RydWN0IHJoYXNoX2hlYWQgKnBvczsKKworCQlyaHRfZm9yX2VhY2hfZW50cnlfcmN1KG5sc2ssIHBvcywgaHRibCwgaSwgbm9kZSkgewogCQkJc2sgPSAoc3RydWN0IHNvY2sgKilubHNrOwogCiAJCQlpZiAoIW5ldF9lcShzb2NrX25ldChzayksIG5ldCkpCkBAIC0xNzAsNyArMTczLDcgQEAKIAogCXJlcSA9IG5sbXNnX2RhdGEoY2ItPm5saCk7CiAKLQltdXRleF9sb2NrKCZubF9za19oYXNoX2xvY2spOworCXJjdV9yZWFkX2xvY2soKTsKIAlyZWFkX2xvY2soJm5sX3RhYmxlX2xvY2spOwogCiAJaWYgKHJlcS0+c2RpYWdfcHJvdG9jb2wgPT0gTkRJQUdfUFJPVE9fQUxMKSB7CkBAIC0xODQsNyArMTg3LDcgQEAKIAl9IGVsc2UgewogCQlpZiAocmVxLT5zZGlhZ19wcm90b2NvbCA+PSBNQVhfTElOS1MpIHsKIAkJCXJlYWRfdW5sb2NrKCZubF90YWJsZV9sb2NrKTsKLQkJCW11dGV4X3VubG9jaygmbmxfc2tfaGFzaF9sb2NrKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KIApAQCAtMTkyLDcgKzE5NSw3IEBACiAJfQogCiAJcmVhZF91bmxvY2soJm5sX3RhYmxlX2xvY2spOwotCW11dGV4X3VubG9jaygmbmxfc2tfaGFzaF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBza2ItPmxlbjsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRsaW5rL2dlbmV0bGluay5jIGIvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMKaW5kZXggZWU1NzQ1OS4uMmVkNWY5NiAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMKKysrIGIvbmV0L25ldGxpbmsvZ2VuZXRsaW5rLmMKQEAgLTc2Miw3ICs3NjIsOCBAQAogCQlubGFfbmVzdF9lbmQoc2tiLCBubGFfZ3Jwcyk7CiAJfQogCi0JcmV0dXJuIGdlbmxtc2dfZW5kKHNrYiwgaGRyKTsKKwlnZW5sbXNnX2VuZChza2IsIGhkcik7CisJcmV0dXJuIDA7CiAKIG5sYV9wdXRfZmFpbHVyZToKIAlnZW5sbXNnX2NhbmNlbChza2IsIGhkcik7CkBAIC04MDIsNyArODAzLDggQEAKIAlubGFfbmVzdF9lbmQoc2tiLCBuZXN0KTsKIAlubGFfbmVzdF9lbmQoc2tiLCBubGFfZ3Jwcyk7CiAKLQlyZXR1cm4gZ2VubG1zZ19lbmQoc2tiLCBoZHIpOworCWdlbmxtc2dfZW5kKHNrYiwgaGRyKTsKKwlyZXR1cm4gMDsKIAogbmxhX3B1dF9mYWlsdXJlOgogCWdlbmxtc2dfY2FuY2VsKHNrYiwgaGRyKTsKZGlmZiAtLWdpdCBhL25ldC9uZmMvY29yZS5jIGIvbmV0L25mYy9jb3JlLmMKaW5kZXggODE5Yjg3Ny4uY2ZmM2YxNiAxMDA2NDQKLS0tIGEvbmV0L25mYy9jb3JlLmMKKysrIGIvbmV0L25mYy9jb3JlLmMKQEAgLTU1NSw3ICs1NTUsNiBAQAogCiBpbnQgbmZjX2VuYWJsZV9zZShzdHJ1Y3QgbmZjX2RldiAqZGV2LCB1MzIgc2VfaWR4KQogewotCiAJc3RydWN0IG5mY19zZSAqc2U7CiAJaW50IHJjOwogCkBAIC02MDUsNyArNjA0LDYgQEAKIAogaW50IG5mY19kaXNhYmxlX3NlKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHUzMiBzZV9pZHgpCiB7Ci0KIAlzdHJ1Y3QgbmZjX3NlICpzZTsKIAlpbnQgcmM7CiAKQEAgLTkzNCw2ICs5MzIsMjcgQEAKIH0KIEVYUE9SVF9TWU1CT0wobmZjX3JlbW92ZV9zZSk7CiAKK2ludCBuZmNfc2VfdHJhbnNhY3Rpb24oc3RydWN0IG5mY19kZXYgKmRldiwgdTggc2VfaWR4LAorCQkgICAgICAgc3RydWN0IG5mY19ldnRfdHJhbnNhY3Rpb24gKmV2dF90cmFuc2FjdGlvbikKK3sKKwlpbnQgcmM7CisKKwlwcl9kZWJ1ZygidHJhbnNhY3Rpb246ICV4XG4iLCBzZV9pZHgpOworCisJZGV2aWNlX2xvY2soJmRldi0+ZGV2KTsKKworCWlmICghZXZ0X3RyYW5zYWN0aW9uKSB7CisJCXJjID0gLUVQUk9UTzsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSBuZmNfZ2VubF9zZV90cmFuc2FjdGlvbihkZXYsIHNlX2lkeCwgZXZ0X3RyYW5zYWN0aW9uKTsKK291dDoKKwlkZXZpY2VfdW5sb2NrKCZkZXYtPmRldik7CisJcmV0dXJuIHJjOworfQorRVhQT1JUX1NZTUJPTChuZmNfc2VfdHJhbnNhY3Rpb24pOworCiBzdGF0aWMgdm9pZCBuZmNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkKQogewogCXN0cnVjdCBuZmNfZGV2ICpkZXYgPSB0b19uZmNfZGV2KGQpOwpkaWZmIC0tZ2l0IGEvbmV0L25mYy9oY2kvY29tbWFuZC5jIGIvbmV0L25mYy9oY2kvY29tbWFuZC5jCmluZGV4IDkxZGY0ODcuLjg0NDY3M2MgMTAwNjQ0Ci0tLSBhL25ldC9uZmMvaGNpL2NvbW1hbmQuYworKysgYi9uZXQvbmZjL2hjaS9jb21tYW5kLmMKQEAgLTExNiwyMyArMTE2LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wobmZjX2hjaV9zZW5kX2V2ZW50KTsKIAotaW50IG5mY19oY2lfc2VuZF9yZXNwb25zZShzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IGdhdGUsIHU4IHJlc3BvbnNlLAotCQkJICBjb25zdCB1OCAqcGFyYW0sIHNpemVfdCBwYXJhbV9sZW4pCi17Ci0JdTggcGlwZTsKLQotCXByX2RlYnVnKCJcbiIpOwotCi0JcGlwZSA9IGhkZXYtPmdhdGUycGlwZVtnYXRlXTsKLQlpZiAocGlwZSA9PSBORkNfSENJX0lOVkFMSURfUElQRSkKLQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwotCi0JcmV0dXJuIG5mY19oY2lfaGNwX21lc3NhZ2VfdHgoaGRldiwgcGlwZSwgTkZDX0hDSV9IQ1BfUkVTUE9OU0UsCi0JCQkJICAgICAgcmVzcG9uc2UsIHBhcmFtLCBwYXJhbV9sZW4sIE5VTEwsIE5VTEwsCi0JCQkJICAgICAgMCk7Ci19Ci1FWFBPUlRfU1lNQk9MKG5mY19oY2lfc2VuZF9yZXNwb25zZSk7Ci0KIC8qCiAgKiBFeGVjdXRlIGFuIGhjaSBjb21tYW5kIHNlbnQgdG8gZ2F0ZS4KICAqIHNrYiB3aWxsIGNvbnRhaW4gcmVzcG9uc2UgZGF0YSBpZiBzdWNjZXNzLiBza2IgY2FuIGJlIE5VTEwgaWYgeW91IGFyZSBub3QKQEAgLTMzMSw3ICszMTQsNyBAQAogCWlmIChyIDwgMCkKIAkJcmV0dXJuIHI7CiAKLQltZW1zZXQoaGRldi0+Z2F0ZTJwaXBlLCBORkNfSENJX0lOVkFMSURfUElQRSwgc2l6ZW9mKGhkZXYtPmdhdGUycGlwZSkpOworCW5mY19oY2lfcmVzZXRfcGlwZXMoaGRldik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM0NSw3ICszMjgsNyBAQAogCiAJcHJfZGVidWcoIlxuIik7CiAKLQlpZiAoaGRldi0+Z2F0ZTJwaXBlW2Rlc3RfZ2F0ZV0gPT0gTkZDX0hDSV9ET19OT1RfQ1JFQVRFX1BJUEUpCisJaWYgKHBpcGUgPT0gTkZDX0hDSV9ET19OT1RfQ1JFQVRFX1BJUEUpCiAJCXJldHVybiAwOwogCiAJaWYgKGhkZXYtPmdhdGUycGlwZVtkZXN0X2dhdGVdICE9IE5GQ19IQ0lfSU5WQUxJRF9QSVBFKQpAQCAtMzgwLDYgKzM2Myw4IEBACiAJCXJldHVybiByOwogCX0KIAorCWhkZXYtPnBpcGVzW3BpcGVdLmdhdGUgPSBkZXN0X2dhdGU7CisJaGRldi0+cGlwZXNbcGlwZV0uZGVzdF9ob3N0ID0gZGVzdF9ob3N0OwogCWhkZXYtPmdhdGUycGlwZVtkZXN0X2dhdGVdID0gcGlwZTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L25mYy9oY2kvY29yZS5jIGIvbmV0L25mYy9oY2kvY29yZS5jCmluZGV4IGVmNTBlNzcuLjZlMDYxZGEgMTAwNjQ0Ci0tLSBhL25ldC9uZmMvaGNpL2NvcmUuYworKysgYi9uZXQvbmZjL2hjaS9jb3JlLmMKQEAgLTQ2LDYgKzQ2LDMyIEBACiB9CiBFWFBPUlRfU1lNQk9MKG5mY19oY2lfcmVzdWx0X3RvX2Vycm5vKTsKIAordm9pZCBuZmNfaGNpX3Jlc2V0X3BpcGVzKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldikKK3sKKwlpbnQgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkZDX0hDSV9NQVhfUElQRVM7IGkrKykgeworCQloZGV2LT5waXBlc1tpXS5nYXRlID0gTkZDX0hDSV9JTlZBTElEX0dBVEU7CisJCWhkZXYtPnBpcGVzW2ldLmRlc3RfaG9zdCA9IE5GQ19IQ0lfSU5WQUxJRF9IT1NUOworCX0KKwltZW1zZXQoaGRldi0+Z2F0ZTJwaXBlLCBORkNfSENJX0lOVkFMSURfUElQRSwgc2l6ZW9mKGhkZXYtPmdhdGUycGlwZSkpOworfQorRVhQT1JUX1NZTUJPTChuZmNfaGNpX3Jlc2V0X3BpcGVzKTsKKwordm9pZCBuZmNfaGNpX3Jlc2V0X3BpcGVzX3Blcl9ob3N0KHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggaG9zdCkKK3sKKwlpbnQgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkZDX0hDSV9NQVhfUElQRVM7IGkrKykgeworCQlpZiAoaGRldi0+cGlwZXNbaV0uZGVzdF9ob3N0ICE9IGhvc3QpCisJCQljb250aW51ZTsKKworCQloZGV2LT5waXBlc1tpXS5nYXRlID0gTkZDX0hDSV9JTlZBTElEX0dBVEU7CisJCWhkZXYtPnBpcGVzW2ldLmRlc3RfaG9zdCA9IE5GQ19IQ0lfSU5WQUxJRF9IT1NUOworCX0KK30KK0VYUE9SVF9TWU1CT0wobmZjX2hjaV9yZXNldF9waXBlc19wZXJfaG9zdCk7CisKIHN0YXRpYyB2b2lkIG5mY19oY2lfbXNnX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZjX2hjaV9kZXYsCkBAIC0xNjcsNDggKzE5Myw2OSBAQAogdm9pZCBuZmNfaGNpX2NtZF9yZWNlaXZlZChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IHBpcGUsIHU4IGNtZCwKIAkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQgciA9IDA7Ci0JdTggZ2F0ZSA9IG5mY19oY2lfcGlwZTJnYXRlKGhkZXYsIHBpcGUpOwotCXU4IGxvY2FsX2dhdGUsIG5ld19waXBlOwotCXU4IGdhdGVfb3BlbmVkID0gMHgwMDsKKwl1OCBnYXRlID0gaGRldi0+cGlwZXNbcGlwZV0uZ2F0ZTsKKwl1OCBzdGF0dXMgPSBORkNfSENJX0FOWV9PSzsKKwlzdHJ1Y3QgaGNpX2NyZWF0ZV9waXBlX3Jlc3AgKmNyZWF0ZV9pbmZvOworCXN0cnVjdCBoY2lfZGVsZXRlX3BpcGVfbm90aSAqZGVsZXRlX2luZm87CisJc3RydWN0IGhjaV9hbGxfcGlwZV9jbGVhcmVkX25vdGkgKmNsZWFyZWRfaW5mbzsKIAogCXByX2RlYnVnKCJmcm9tIGdhdGUgJXggcGlwZSAleCBjbWQgJXhcbiIsIGdhdGUsIHBpcGUsIGNtZCk7CiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgTkZDX0hDSV9BRE1fTk9USUZZX1BJUEVfQ1JFQVRFRDoKIAkJaWYgKHNrYi0+bGVuICE9IDUpIHsKLQkJCXIgPSAtRVBST1RPOwotCQkJYnJlYWs7CisJCQlzdGF0dXMgPSBORkNfSENJX0FOWV9FX05PSzsKKwkJCWdvdG8gZXhpdDsKIAkJfQorCQljcmVhdGVfaW5mbyA9IChzdHJ1Y3QgaGNpX2NyZWF0ZV9waXBlX3Jlc3AgKilza2ItPmRhdGE7CiAKLQkJbG9jYWxfZ2F0ZSA9IHNrYi0+ZGF0YVszXTsKLQkJbmV3X3BpcGUgPSBza2ItPmRhdGFbNF07Ci0JCW5mY19oY2lfc2VuZF9yZXNwb25zZShoZGV2LCBnYXRlLCBORkNfSENJX0FOWV9PSywgTlVMTCwgMCk7Ci0KLQkJLyogc2F2ZSB0aGUgbmV3IGNyZWF0ZWQgcGlwZSBhbmQgYmluZCB3aXRoIGxvY2FsIGdhdGUsCisJCS8qIFNhdmUgdGhlIG5ldyBjcmVhdGVkIHBpcGUgYW5kIGJpbmQgd2l0aCBsb2NhbCBnYXRlLAogCQkgKiB0aGUgZGVzY3JpcHRpb24gZm9yIHNrYi0+ZGF0YVszXSBpcyBkZXN0aW5hdGlvbiBnYXRlIGlkCiAJCSAqIGJ1dCBzaW5jZSB3ZSByZWNlaXZlZCB0aGlzIGNtZCBmcm9tIGhvc3QgY29udHJvbGxlciwgd2UKIAkJICogYXJlIHRoZSBkZXN0aW5hdGlvbiBhbmQgaXQgaXMgb3VyIGxvY2FsIGdhdGUKIAkJICovCi0JCWhkZXYtPmdhdGUycGlwZVtsb2NhbF9nYXRlXSA9IG5ld19waXBlOworCQloZGV2LT5nYXRlMnBpcGVbY3JlYXRlX2luZm8tPmRlc3RfZ2F0ZV0gPSBjcmVhdGVfaW5mby0+cGlwZTsKKwkJaGRldi0+cGlwZXNbY3JlYXRlX2luZm8tPnBpcGVdLmdhdGUgPSBjcmVhdGVfaW5mby0+ZGVzdF9nYXRlOworCQloZGV2LT5waXBlc1tjcmVhdGVfaW5mby0+cGlwZV0uZGVzdF9ob3N0ID0KKwkJCQkJCQljcmVhdGVfaW5mby0+c3JjX2hvc3Q7CiAJCWJyZWFrOwogCWNhc2UgTkZDX0hDSV9BTllfT1BFTl9QSVBFOgotCQkvKiBpZiB0aGUgcGlwZSBpcyBhbHJlYWR5IGNyZWF0ZWQsIHdlIGFsbG93IHJlbW90ZSBob3N0IHRvCi0JCSAqIG9wZW4gaXQKLQkJICovCi0JCWlmIChnYXRlICE9IDB4ZmYpCi0JCQluZmNfaGNpX3NlbmRfcmVzcG9uc2UoaGRldiwgZ2F0ZSwgTkZDX0hDSV9BTllfT0ssCi0JCQkJCSAgICAgICZnYXRlX29wZW5lZCwgMSk7CisJCWlmIChnYXRlID09IE5GQ19IQ0lfSU5WQUxJRF9HQVRFKSB7CisJCQlzdGF0dXMgPSBORkNfSENJX0FOWV9FX05PSzsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlicmVhazsKKwljYXNlIE5GQ19IQ0lfQURNX05PVElGWV9QSVBFX0RFTEVURUQ6CisJCWlmIChza2ItPmxlbiAhPSAxKSB7CisJCQlzdGF0dXMgPSBORkNfSENJX0FOWV9FX05PSzsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCQlkZWxldGVfaW5mbyA9IChzdHJ1Y3QgaGNpX2RlbGV0ZV9waXBlX25vdGkgKilza2ItPmRhdGE7CisKKwkJaGRldi0+cGlwZXNbZGVsZXRlX2luZm8tPnBpcGVdLmdhdGUgPSBORkNfSENJX0lOVkFMSURfR0FURTsKKwkJaGRldi0+cGlwZXNbZGVsZXRlX2luZm8tPnBpcGVdLmRlc3RfaG9zdCA9IE5GQ19IQ0lfSU5WQUxJRF9IT1NUOwogCQlicmVhazsKIAljYXNlIE5GQ19IQ0lfQURNX05PVElGWV9BTExfUElQRV9DTEVBUkVEOgotCQluZmNfaGNpX3NlbmRfcmVzcG9uc2UoaGRldiwgZ2F0ZSwgTkZDX0hDSV9BTllfT0ssIE5VTEwsIDApOworCQlpZiAoc2tiLT5sZW4gIT0gMSkgeworCQkJc3RhdHVzID0gTkZDX0hDSV9BTllfRV9OT0s7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJY2xlYXJlZF9pbmZvID0gKHN0cnVjdCBoY2lfYWxsX3BpcGVfY2xlYXJlZF9ub3RpICopc2tiLT5kYXRhOworCisJCW5mY19oY2lfcmVzZXRfcGlwZXNfcGVyX2hvc3QoaGRldiwgY2xlYXJlZF9pbmZvLT5ob3N0KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfaW5mbygiRGlzY2FyZGVkIHVua25vd24gY21kICV4IHRvIGdhdGUgJXhcbiIsIGNtZCwgZ2F0ZSk7Ci0JCXIgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9CiAKKwlpZiAoaGRldi0+b3BzLT5jbWRfcmVjZWl2ZWQpCisJCWhkZXYtPm9wcy0+Y21kX3JlY2VpdmVkKGhkZXYsIHBpcGUsIGNtZCwgc2tiKTsKKworZXhpdDoKKwluZmNfaGNpX2hjcF9tZXNzYWdlX3R4KGhkZXYsIHBpcGUsIE5GQ19IQ0lfSENQX1JFU1BPTlNFLAorCQkJICAgICAgIHN0YXR1cywgTlVMTCwgMCwgTlVMTCwgTlVMTCwgMCk7CisKIAlrZnJlZV9za2Ioc2tiKTsKIH0KIApAQCAtMzMwLDE1ICszNzcsMTUgQEAKIAkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWludCByID0gMDsKLQl1OCBnYXRlID0gbmZjX2hjaV9waXBlMmdhdGUoaGRldiwgcGlwZSk7CisJdTggZ2F0ZSA9IGhkZXYtPnBpcGVzW3BpcGVdLmdhdGU7CiAKLQlpZiAoZ2F0ZSA9PSAweGZmKSB7CisJaWYgKGdhdGUgPT0gTkZDX0hDSV9JTlZBTElEX0dBVEUpIHsKIAkJcHJfZXJyKCJEaXNjYXJkZWQgZXZlbnQgJXggdG8gdW5vcGVuZWQgcGlwZSAleFxuIiwgZXZlbnQsIHBpcGUpOwogCQlnb3RvIGV4aXQ7CiAJfQogCiAJaWYgKGhkZXYtPm9wcy0+ZXZlbnRfcmVjZWl2ZWQpIHsKLQkJciA9IGhkZXYtPm9wcy0+ZXZlbnRfcmVjZWl2ZWQoaGRldiwgZ2F0ZSwgZXZlbnQsIHNrYik7CisJCXIgPSBoZGV2LT5vcHMtPmV2ZW50X3JlY2VpdmVkKGhkZXYsIHBpcGUsIGV2ZW50LCBza2IpOwogCQlpZiAociA8PSAwKQogCQkJZ290byBleGl0X25vc2tiOwogCX0KQEAgLTU3Myw3ICs2MjAsNyBAQAogCWlmIChoZGV2LT5vcHMtPmNsb3NlKQogCQloZGV2LT5vcHMtPmNsb3NlKGhkZXYpOwogCi0JbWVtc2V0KGhkZXYtPmdhdGUycGlwZSwgTkZDX0hDSV9JTlZBTElEX1BJUEUsIHNpemVvZihoZGV2LT5nYXRlMnBpcGUpKTsKKwluZmNfaGNpX3Jlc2V0X3BpcGVzKGhkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MzIsNyArOTc5LDcgQEAKIAogCW5mY19zZXRfZHJ2ZGF0YShoZGV2LT5uZGV2LCBoZGV2KTsKIAotCW1lbXNldChoZGV2LT5nYXRlMnBpcGUsIE5GQ19IQ0lfSU5WQUxJRF9QSVBFLCBzaXplb2YoaGRldi0+Z2F0ZTJwaXBlKSk7CisJbmZjX2hjaV9yZXNldF9waXBlcyhoZGV2KTsKIAogCWhkZXYtPnF1aXJrcyA9IHF1aXJrczsKIApkaWZmIC0tZ2l0IGEvbmV0L25mYy9oY2kvaGNpLmggYi9uZXQvbmZjL2hjaS9oY2kuaAppbmRleCBjM2QyZTJjLi5hYjRjOGU4IDEwMDY0NAotLS0gYS9uZXQvbmZjL2hjaS9oY2kuaAorKysgYi9uZXQvbmZjL2hjaS9oY2kuaApAQCAtNjUsNiArNjUsMTQgQEAKIAl1OCBwaXBlOwogfSBfX3BhY2tlZDsKIAorc3RydWN0IGhjaV9kZWxldGVfcGlwZV9ub3RpIHsKKwl1OCBwaXBlOworfSBfX3BhY2tlZDsKKworc3RydWN0IGhjaV9hbGxfcGlwZV9jbGVhcmVkX25vdGkgeworCXU4IGhvc3Q7Cit9IF9fcGFja2VkOworCiAjZGVmaW5lIE5GQ19IQ0lfRlJBR01FTlQJMHg3ZgogCiAjZGVmaW5lIEhDUF9IRUFERVIodHlwZSwgaW5zdHIpICgoKCh0eXBlKSAmIDB4MDMpIDw8IDYpIHwgKChpbnN0cikgJiAweDNmKSkKQEAgLTc3LDggKzg1LDYgQEAKIAkJCSAgIGRhdGFfZXhjaGFuZ2VfY2JfdCBjYiwgdm9pZCAqY2JfY29udGV4dCwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgY29tcGxldGlvbl9kZWxheSk7CiAKLXU4IG5mY19oY2lfcGlwZTJnYXRlKHN0cnVjdCBuZmNfaGNpX2RldiAqaGRldiwgdTggcGlwZSk7Ci0KIHZvaWQgbmZjX2hjaV9oY3BfbWVzc2FnZV9yeChzdHJ1Y3QgbmZjX2hjaV9kZXYgKmhkZXYsIHU4IHBpcGUsIHU4IHR5cGUsCiAJCQkgICAgdTggaW5zdHJ1Y3Rpb24sIHN0cnVjdCBza19idWZmICpza2IpOwogCmRpZmYgLS1naXQgYS9uZXQvbmZjL2hjaS9oY3AuYyBiL25ldC9uZmMvaGNpL2hjcC5jCmluZGV4IGU5ZGUxNTEuLjFmZTcyNWQgMTAwNjQ0Ci0tLSBhL25ldC9uZmMvaGNpL2hjcC5jCisrKyBiL25ldC9uZmMvaGNpL2hjcC5jCkBAIC0xMjQsMTcgKzEyNCw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotdTggbmZjX2hjaV9waXBlMmdhdGUoc3RydWN0IG5mY19oY2lfZGV2ICpoZGV2LCB1OCBwaXBlKQotewotCWludCBnYXRlOwotCi0JZm9yIChnYXRlID0gMDsgZ2F0ZSA8IE5GQ19IQ0lfTUFYX0dBVEVTOyBnYXRlKyspCi0JCWlmIChoZGV2LT5nYXRlMnBpcGVbZ2F0ZV0gPT0gcGlwZSkKLQkJCXJldHVybiBnYXRlOwotCi0JcmV0dXJuIDB4ZmY7Ci19Ci0KIC8qCiAgKiBSZWNlaXZlIGhjcCBtZXNzYWdlIGZvciBwaXBlLCB3aXRoIHR5cGUgYW5kIGNtZC4KICAqIHNrYiBjb250YWlucyBvcHRpb25hbCBtZXNzYWdlIGRhdGEgb25seS4KZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL01ha2VmaWxlIGIvbmV0L25mYy9uY2kvTWFrZWZpbGUKaW5kZXggN2FlZWRjNC4uN2VkODk0OSAxMDA2NDQKLS0tIGEvbmV0L25mYy9uY2kvTWFrZWZpbGUKKysrIGIvbmV0L25mYy9uY2kvTWFrZWZpbGUKQEAgLTQsNiArNCw2IEBACiAKIG9iai0kKENPTkZJR19ORkNfTkNJKSArPSBuY2kubwogCi1uY2ktb2JqcyA6PSBjb3JlLm8gZGF0YS5vIGxpYi5vIG50Zi5vIHJzcC5vCituY2ktb2JqcyA6PSBjb3JlLm8gZGF0YS5vIGxpYi5vIG50Zi5vIHJzcC5vIGhjaS5vCiAKIG5jaS0kKENPTkZJR19ORkNfTkNJX1NQSSkgKz0gc3BpLm8KZGlmZiAtLWdpdCBhL25ldC9uZmMvbmNpL2NvcmUuYyBiL25ldC9uZmMvbmNpL2NvcmUuYwppbmRleCA1MWZlYjVlLi45NTc1YTE4IDEwMDY0NAotLS0gYS9uZXQvbmZjL25jaS9jb3JlLmMKKysrIGIvbmV0L25mYy9uY2kvY29yZS5jCkBAIC00MSwxMCArNDEsMjggQEAKICNpbmNsdWRlIDxuZXQvbmZjL25jaV9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbmZjLmg+CiAKK3N0cnVjdCBjb3JlX2Nvbm5fY3JlYXRlX2RhdGEgeworCWludCBsZW5ndGg7CisJc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX2NtZCAqY21kOworfTsKKwogc3RhdGljIHZvaWQgbmNpX2NtZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgdm9pZCBuY2lfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAorc3RydWN0IG5jaV9jb25uX2luZm8gKm5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQoc3RydWN0IG5jaV9kZXYgKm5kZXYsCisJCQkJCQkgICBpbnQgY29ubl9pZCkKK3sKKwlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uX2luZm8sICZuZGV2LT5jb25uX2luZm9fbGlzdCwgbGlzdCkgeworCQlpZiAoY29ubl9pbmZvLT5jb25uX2lkID09IGNvbm5faWQpCisJCQlyZXR1cm4gY29ubl9pbmZvOworCX0KKworCXJldHVybiBOVUxMOworfQorCiAvKiAtLS0tIE5DSSByZXF1ZXN0cyAtLS0tICovCiAKIHZvaWQgbmNpX3JlcV9jb21wbGV0ZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgaW50IHJlc3VsdCkKQEAgLTEwOSwxMCArMTI3LDEwIEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBuY2lfcmVxdWVzdChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKLQkJCSAgICAgIHZvaWQgKCpyZXEpKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgb3B0KSwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb3B0LCBfX3UzMiB0aW1lb3V0KQoraW5saW5lIGludCBuY2lfcmVxdWVzdChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKKwkJICAgICAgIHZvaWQgKCpyZXEpKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgb3B0KSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgb3B0LCBfX3UzMiB0aW1lb3V0KQogewogCWludCByYzsKIApAQCAtNDU2LDYgKzQ3NCw5NSBAQAogfQogRVhQT1JUX1NZTUJPTChuY2lfc2V0X2NvbmZpZyk7CiAKK3N0YXRpYyB2b2lkIG5jaV9uZmNlZV9kaXNjb3Zlcl9yZXEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHVuc2lnbmVkIGxvbmcgb3B0KQoreworCXN0cnVjdCBuY2lfbmZjZWVfZGlzY292ZXJfY21kIGNtZDsKKwlfX3U4IGFjdGlvbiA9IG9wdDsKKworCWNtZC5kaXNjb3ZlcnlfYWN0aW9uID0gYWN0aW9uOworCisJbmNpX3NlbmRfY21kKG5kZXYsIE5DSV9PUF9ORkNFRV9ESVNDT1ZFUl9DTUQsIDEsICZjbWQpOworfQorCitpbnQgbmNpX25mY2VlX2Rpc2NvdmVyKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBhY3Rpb24pCit7CisJcmV0dXJuIG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9uZmNlZV9kaXNjb3Zlcl9yZXEsIGFjdGlvbiwKKwkJCQltc2Vjc190b19qaWZmaWVzKE5DSV9DTURfVElNRU9VVCkpOworfQorRVhQT1JUX1NZTUJPTChuY2lfbmZjZWVfZGlzY292ZXIpOworCitzdGF0aWMgdm9pZCBuY2lfbmZjZWVfbW9kZV9zZXRfcmVxKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1bnNpZ25lZCBsb25nIG9wdCkKK3sKKwlzdHJ1Y3QgbmNpX25mY2VlX21vZGVfc2V0X2NtZCAqY21kID0KKwkJCQkJKHN0cnVjdCBuY2lfbmZjZWVfbW9kZV9zZXRfY21kICopb3B0OworCisJbmNpX3NlbmRfY21kKG5kZXYsIE5DSV9PUF9ORkNFRV9NT0RFX1NFVF9DTUQsCisJCSAgICAgc2l6ZW9mKHN0cnVjdCBuY2lfbmZjZWVfbW9kZV9zZXRfY21kKSwgY21kKTsKK30KKworaW50IG5jaV9uZmNlZV9tb2RlX3NldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggbmZjZWVfaWQsIHU4IG5mY2VlX21vZGUpCit7CisJc3RydWN0IG5jaV9uZmNlZV9tb2RlX3NldF9jbWQgY21kOworCisJY21kLm5mY2VlX2lkID0gbmZjZWVfaWQ7CisJY21kLm5mY2VlX21vZGUgPSBuZmNlZV9tb2RlOworCisJcmV0dXJuIG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9uZmNlZV9tb2RlX3NldF9yZXEsICh1bnNpZ25lZCBsb25nKSZjbWQsCisJCQkgICBtc2Vjc190b19qaWZmaWVzKE5DSV9DTURfVElNRU9VVCkpOworfQorRVhQT1JUX1NZTUJPTChuY2lfbmZjZWVfbW9kZV9zZXQpOworCitzdGF0aWMgdm9pZCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yZXEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHVuc2lnbmVkIGxvbmcgb3B0KQoreworCXN0cnVjdCBjb3JlX2Nvbm5fY3JlYXRlX2RhdGEgKmRhdGEgPQorCQkJCQkoc3RydWN0IGNvcmVfY29ubl9jcmVhdGVfZGF0YSAqKW9wdDsKKworCW5jaV9zZW5kX2NtZChuZGV2LCBOQ0lfT1BfQ09SRV9DT05OX0NSRUFURV9DTUQsIGRhdGEtPmxlbmd0aCwgZGF0YS0+Y21kKTsKK30KKworaW50IG5jaV9jb3JlX2Nvbm5fY3JlYXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBkZXN0aW5hdGlvbl90eXBlLAorCQkJIHU4IG51bWJlcl9kZXN0aW5hdGlvbl9wYXJhbXMsCisJCQkgc2l6ZV90IHBhcmFtc19sZW4sCisJCQkgc3RydWN0IGNvcmVfY29ubl9jcmVhdGVfZGVzdF9zcGVjX3BhcmFtcyAqcGFyYW1zKQoreworCWludCByOworCXN0cnVjdCBuY2lfY29yZV9jb25uX2NyZWF0ZV9jbWQgKmNtZDsKKwlzdHJ1Y3QgY29yZV9jb25uX2NyZWF0ZV9kYXRhIGRhdGE7CisKKwlkYXRhLmxlbmd0aCA9IHBhcmFtc19sZW4gKyBzaXplb2Yoc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX2NtZCk7CisJY21kID0ga3phbGxvYyhkYXRhLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjbWQpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5kZXN0aW5hdGlvbl90eXBlID0gZGVzdGluYXRpb25fdHlwZTsKKwljbWQtPm51bWJlcl9kZXN0aW5hdGlvbl9wYXJhbXMgPSBudW1iZXJfZGVzdGluYXRpb25fcGFyYW1zOworCW1lbWNweShjbWQtPnBhcmFtcywgcGFyYW1zLCBwYXJhbXNfbGVuKTsKKworCWRhdGEuY21kID0gY21kOworCW5kZXYtPmN1cl9pZCA9IHBhcmFtcy0+dmFsdWVbREVTVF9TUEVDX1BBUkFNU19JRF9JTkRFWF07CisKKwlyID0gX19uY2lfcmVxdWVzdChuZGV2LCBuY2lfY29yZV9jb25uX2NyZWF0ZV9yZXEsCisJCQkgICh1bnNpZ25lZCBsb25nKSZkYXRhLAorCQkJICBtc2Vjc190b19qaWZmaWVzKE5DSV9DTURfVElNRU9VVCkpOworCWtmcmVlKGNtZCk7CisJcmV0dXJuIHI7Cit9CitFWFBPUlRfU1lNQk9MKG5jaV9jb3JlX2Nvbm5fY3JlYXRlKTsKKworc3RhdGljIHZvaWQgbmNpX2NvcmVfY29ubl9jbG9zZV9yZXEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHVuc2lnbmVkIGxvbmcgb3B0KQoreworCV9fdTggY29ubl9pZCA9IG9wdDsKKworCW5jaV9zZW5kX2NtZChuZGV2LCBOQ0lfT1BfQ09SRV9DT05OX0NMT1NFX0NNRCwgMSwgJmNvbm5faWQpOworfQorCitpbnQgbmNpX2NvcmVfY29ubl9jbG9zZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggY29ubl9pZCkKK3sKKwlyZXR1cm4gbmNpX3JlcXVlc3QobmRldiwgbmNpX2NvcmVfY29ubl9jbG9zZV9yZXEsIGNvbm5faWQsCisJCQkJbXNlY3NfdG9famlmZmllcyhOQ0lfQ01EX1RJTUVPVVQpKTsKK30KK0VYUE9SVF9TWU1CT0wobmNpX2NvcmVfY29ubl9jbG9zZSk7CisKIHN0YXRpYyBpbnQgbmNpX3NldF9sb2NhbF9nZW5lcmFsX2J5dGVzKHN0cnVjdCBuZmNfZGV2ICpuZmNfZGV2KQogewogCXN0cnVjdCBuY2lfZGV2ICpuZGV2ID0gbmZjX2dldF9kcnZkYXRhKG5mY19kZXYpOwpAQCAtNzEyLDYgKzgxOSwxMSBAQAogewogCXN0cnVjdCBuY2lfZGV2ICpuZGV2ID0gbmZjX2dldF9kcnZkYXRhKG5mY19kZXYpOwogCWludCByYzsKKwlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAgICAqY29ubl9pbmZvOworCisJY29ubl9pbmZvID0gbmRldi0+cmZfY29ubl9pbmZvOworCWlmICghY29ubl9pbmZvKQorCQlyZXR1cm4gLUVQUk9UTzsKIAogCXByX2RlYnVnKCJ0YXJnZXRfaWR4ICVkLCBsZW4gJWRcbiIsIHRhcmdldC0+aWR4LCBza2ItPmxlbik7CiAKQEAgLTcyNCw4ICs4MzYsOCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogc3RvcmUgY2IgYW5kIGNvbnRleHQgdG8gYmUgdXNlZCBvbiByZWNlaXZpbmcgZGF0YSAqLwotCW5kZXYtPmRhdGFfZXhjaGFuZ2VfY2IgPSBjYjsKLQluZGV2LT5kYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgPSBjYl9jb250ZXh0OworCWNvbm5faW5mby0+ZGF0YV9leGNoYW5nZV9jYiA9IGNiOworCWNvbm5faW5mby0+ZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0ID0gY2JfY29udGV4dDsKIAogCXJjID0gbmNpX3NlbmRfZGF0YShuZGV2LCBOQ0lfU1RBVElDX1JGX0NPTk5fSUQsIHNrYik7CiAJaWYgKHJjKQpAQCAtNzY4LDEwICs4ODAsMTYgQEAKIAogc3RhdGljIGludCBuY2lfZGlzY292ZXJfc2Uoc3RydWN0IG5mY19kZXYgKm5mY19kZXYpCiB7CisJaW50IHI7CiAJc3RydWN0IG5jaV9kZXYgKm5kZXYgPSBuZmNfZ2V0X2RydmRhdGEobmZjX2Rldik7CiAKLQlpZiAobmRldi0+b3BzLT5kaXNjb3Zlcl9zZSkKKwlpZiAobmRldi0+b3BzLT5kaXNjb3Zlcl9zZSkgeworCQlyID0gbmNpX25mY2VlX2Rpc2NvdmVyKG5kZXYsIE5DSV9ORkNFRV9ESVNDT1ZFUllfQUNUSU9OX0VOQUJMRSk7CisJCWlmIChyICE9IE5DSV9TVEFUVVNfT0spCisJCQlyZXR1cm4gLUVQUk9UTzsKKwogCQlyZXR1cm4gbmRldi0+b3BzLT5kaXNjb3Zlcl9zZShuZGV2KTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTgwNyw3ICs5MjUsNiBAQAogfTsKIAogLyogLS0tLSBJbnRlcmZhY2UgdG8gTkNJIGRyaXZlcnMgLS0tLSAqLwotCiAvKioKICAqIG5jaV9hbGxvY2F0ZV9kZXZpY2UgLSBhbGxvY2F0ZSBhIG5ldyBuY2kgZGV2aWNlCiAgKgpAQCAtODQyLDEzICs5NTksMjAgQEAKIAkJCQkJICAgIHR4X2hlYWRyb29tICsgTkNJX0RBVEFfSERSX1NJWkUsCiAJCQkJCSAgICB0eF90YWlscm9vbSk7CiAJaWYgKCFuZGV2LT5uZmNfZGV2KQotCQlnb3RvIGZyZWVfZXhpdDsKKwkJZ290byBmcmVlX25jaTsKKworCW5kZXYtPmhjaV9kZXYgPSBuY2lfaGNpX2FsbG9jYXRlKG5kZXYpOworCWlmICghbmRldi0+aGNpX2RldikKKwkJZ290byBmcmVlX25mYzsKIAogCW5mY19zZXRfZHJ2ZGF0YShuZGV2LT5uZmNfZGV2LCBuZGV2KTsKIAogCXJldHVybiBuZGV2OwogCi1mcmVlX2V4aXQ6CitmcmVlX25mYzoKKwlrZnJlZShuZGV2LT5uZmNfZGV2KTsKKworZnJlZV9uY2k6CiAJa2ZyZWUobmRldik7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC05MTMsNiArMTAzNyw3IEBACiAJCSAgICAodW5zaWduZWQgbG9uZykgbmRldik7CiAKIAltdXRleF9pbml0KCZuZGV2LT5yZXFfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJm5kZXYtPmNvbm5faW5mb19saXN0KTsKIAogCXJjID0gbmZjX3JlZ2lzdGVyX2RldmljZShuZGV2LT5uZmNfZGV2KTsKIAlpZiAocmMpCkBAIC05MzgsMTIgKzEwNjMsMTkgQEAKICAqLwogdm9pZCBuY2lfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG5jaV9kZXYgKm5kZXYpCiB7CisJc3RydWN0IG5jaV9jb25uX2luZm8gICAgKmNvbm5faW5mbywgKm47CisKIAluY2lfY2xvc2VfZGV2aWNlKG5kZXYpOwogCiAJZGVzdHJveV93b3JrcXVldWUobmRldi0+Y21kX3dxKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShuZGV2LT5yeF93cSk7CiAJZGVzdHJveV93b3JrcXVldWUobmRldi0+dHhfd3EpOwogCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbm5faW5mbywgbiwgJm5kZXYtPmNvbm5faW5mb19saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZjb25uX2luZm8tPmxpc3QpOworCQkvKiBjb25uX2luZm8gaXMgYWxsb2NhdGVkIHdpdGggZGV2bV9remFsbG9jICovCisJfQorCiAJbmZjX3VucmVnaXN0ZXJfZGV2aWNlKG5kZXYtPm5mY19kZXYpOwogfQogRVhQT1JUX1NZTUJPTChuY2lfdW5yZWdpc3Rlcl9kZXZpY2UpOwpAQCAtMTAyNywyMCArMTE1OSwyNSBAQAogc3RhdGljIHZvaWQgbmNpX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBuY2lfZGV2ICpuZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBuY2lfZGV2LCB0eF93b3JrKTsKKwlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAgICAqY29ubl9pbmZvOwogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlwcl9kZWJ1ZygiY3JlZGl0c19jbnQgJWRcbiIsIGF0b21pY19yZWFkKCZuZGV2LT5jcmVkaXRzX2NudCkpOworCWNvbm5faW5mbyA9IG5jaV9nZXRfY29ubl9pbmZvX2J5X2Nvbm5faWQobmRldiwgbmRldi0+Y3VyX2Nvbm5faWQpOworCWlmICghY29ubl9pbmZvKQorCQlyZXR1cm47CisKKwlwcl9kZWJ1ZygiY3JlZGl0c19jbnQgJWRcbiIsIGF0b21pY19yZWFkKCZjb25uX2luZm8tPmNyZWRpdHNfY250KSk7CiAKIAkvKiBTZW5kIHF1ZXVlZCB0eCBkYXRhICovCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZuZGV2LT5jcmVkaXRzX2NudCkpIHsKKwl3aGlsZSAoYXRvbWljX3JlYWQoJmNvbm5faW5mby0+Y3JlZGl0c19jbnQpKSB7CiAJCXNrYiA9IHNrYl9kZXF1ZXVlKCZuZGV2LT50eF9xKTsKIAkJaWYgKCFza2IpCiAJCQlyZXR1cm47CiAKIAkJLyogQ2hlY2sgaWYgZGF0YSBmbG93IGNvbnRyb2wgaXMgdXNlZCAqLwotCQlpZiAoYXRvbWljX3JlYWQoJm5kZXYtPmNyZWRpdHNfY250KSAhPQorCQlpZiAoYXRvbWljX3JlYWQoJmNvbm5faW5mby0+Y3JlZGl0c19jbnQpICE9CiAJCSAgICBOQ0lfREFUQV9GTE9XX0NPTlRST0xfTk9UX1VTRUQpCi0JCQlhdG9taWNfZGVjKCZuZGV2LT5jcmVkaXRzX2NudCk7CisJCQlhdG9taWNfZGVjKCZjb25uX2luZm8tPmNyZWRpdHNfY250KTsKIAogCQlwcl9kZWJ1ZygiTkNJIFRYOiBNVD1kYXRhLCBQQkY9JWQsIGNvbm5faWQ9JWQsIHBsZW49JWRcbiIsCiAJCQkgbmNpX3BiZihza2ItPmRhdGEpLApAQCAtMTA5Miw3ICsxMjI5LDkgQEAKIAlpZiAodGVzdF9iaXQoTkNJX0RBVEFfRVhDSEFOR0VfVE8sICZuZGV2LT5mbGFncykpIHsKIAkJLyogY29tcGxldGUgdGhlIGRhdGEgZXhjaGFuZ2UgdHJhbnNhY3Rpb24sIGlmIGV4aXN0cyAqLwogCQlpZiAodGVzdF9iaXQoTkNJX0RBVEFfRVhDSEFOR0UsICZuZGV2LT5mbGFncykpCi0JCQluY2lfZGF0YV9leGNoYW5nZV9jb21wbGV0ZShuZGV2LCBOVUxMLCAtRVRJTUVET1VUKTsKKwkJCW5jaV9kYXRhX2V4Y2hhbmdlX2NvbXBsZXRlKG5kZXYsIE5VTEwsCisJCQkJCQkgICBuZGV2LT5jdXJfY29ubl9pZCwKKwkJCQkJCSAgIC1FVElNRURPVVQpOwogCiAJCWNsZWFyX2JpdChOQ0lfREFUQV9FWENIQU5HRV9UTywgJm5kZXYtPmZsYWdzKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9kYXRhLmMgYi9uZXQvbmZjL25jaS9kYXRhLmMKaW5kZXggYTJkZTJhOC4uNTY2NDY2ZCAxMDA2NDQKLS0tIGEvbmV0L25mYy9uY2kvZGF0YS5jCisrKyBiL25ldC9uZmMvbmNpL2RhdGEuYwpAQCAtMzYsMTAgKzM2LDIwIEBACiAKIC8qIENvbXBsZXRlIGRhdGEgZXhjaGFuZ2UgdHJhbnNhY3Rpb24gYW5kIGZvcndhcmQgc2tiIHRvIG5mYyBjb3JlICovCiB2b2lkIG5jaV9kYXRhX2V4Y2hhbmdlX2NvbXBsZXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCWludCBlcnIpCisJCQkJX191OCBjb25uX2lkLCBpbnQgZXJyKQogewotCWRhdGFfZXhjaGFuZ2VfY2JfdCBjYiA9IG5kZXYtPmRhdGFfZXhjaGFuZ2VfY2I7Ci0Jdm9pZCAqY2JfY29udGV4dCA9IG5kZXYtPmRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dDsKKwlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAgICAqY29ubl9pbmZvOworCWRhdGFfZXhjaGFuZ2VfY2JfdCBjYjsKKwl2b2lkICpjYl9jb250ZXh0OworCisJY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTsKKwlpZiAoIWNvbm5faW5mbykgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJZ290byBleGl0OworCX0KKworCWNiID0gY29ubl9pbmZvLT5kYXRhX2V4Y2hhbmdlX2NiOworCWNiX2NvbnRleHQgPSBjb25uX2luZm8tPmRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dDsKIAogCXByX2RlYnVnKCJsZW4gJWQsIGVyciAlZFxuIiwgc2tiID8gc2tiLT5sZW4gOiAwLCBlcnIpOwogCkBAIC00OCw5ICs1OCw2IEBACiAJY2xlYXJfYml0KE5DSV9EQVRBX0VYQ0hBTkdFX1RPLCAmbmRldi0+ZmxhZ3MpOwogCiAJaWYgKGNiKSB7Ci0JCW5kZXYtPmRhdGFfZXhjaGFuZ2VfY2IgPSBOVUxMOwotCQluZGV2LT5kYXRhX2V4Y2hhbmdlX2NiX2NvbnRleHQgPSBOVUxMOwotCiAJCS8qIGZvcndhcmQgc2tiIHRvIG5mYyBjb3JlICovCiAJCWNiKGNiX2NvbnRleHQsIHNrYiwgZXJyKTsKIAl9IGVsc2UgaWYgKHNrYikgewpAQCAtNjAsNiArNjcsNyBAQAogCQlrZnJlZV9za2Ioc2tiKTsKIAl9CiAKK2V4aXQ6CiAJY2xlYXJfYml0KE5DSV9EQVRBX0VYQ0hBTkdFLCAmbmRldi0+ZmxhZ3MpOwogfQogCkBAIC04NSw2ICs5Myw3IEBACiBzdGF0aWMgaW50IG5jaV9xdWV1ZV90eF9kYXRhX2ZyYWdzKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogCQkJCSAgIF9fdTggY29ubl9pZCwKIAkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSB7CisJc3RydWN0IG5jaV9jb25uX2luZm8gICAgKmNvbm5faW5mbzsKIAlpbnQgdG90YWxfbGVuID0gc2tiLT5sZW47CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IHNrYi0+ZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtOTUsMTEgKzEwNCwxNyBAQAogCiAJcHJfZGVidWcoImNvbm5faWQgMHgleCwgdG90YWxfbGVuICVkXG4iLCBjb25uX2lkLCB0b3RhbF9sZW4pOwogCisJY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTsKKwlpZiAoIWNvbm5faW5mbykgeworCQlyYyA9IC1FUFJPVE87CisJCWdvdG8gZnJlZV9leGl0OworCX0KKwogCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZnJhZ3NfcSk7CiAKIAl3aGlsZSAodG90YWxfbGVuKSB7CiAJCWZyYWdfbGVuID0KLQkJCW1pbl90KGludCwgdG90YWxfbGVuLCBuZGV2LT5tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplKTsKKwkJCW1pbl90KGludCwgdG90YWxfbGVuLCBjb25uX2luZm8tPm1heF9wa3RfcGF5bG9hZF9sZW4pOwogCiAJCXNrYl9mcmFnID0gbmNpX3NrYl9hbGxvYyhuZGV2LAogCQkJCQkgKE5DSV9EQVRBX0hEUl9TSVpFICsgZnJhZ19sZW4pLApAQCAtMTUxLDEyICsxNjYsMTkgQEAKIC8qIFNlbmQgTkNJIGRhdGEgKi8KIGludCBuY2lfc2VuZF9kYXRhKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBfX3U4IGNvbm5faWQsIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IG5jaV9jb25uX2luZm8gICAgKmNvbm5faW5mbzsKIAlpbnQgcmMgPSAwOwogCiAJcHJfZGVidWcoImNvbm5faWQgMHgleCwgcGxlbiAlZFxuIiwgY29ubl9pZCwgc2tiLT5sZW4pOwogCisJY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBjb25uX2lkKTsKKwlpZiAoIWNvbm5faW5mbykgeworCQlyYyA9IC1FUFJPVE87CisJCWdvdG8gZnJlZV9leGl0OworCX0KKwogCS8qIGNoZWNrIGlmIHRoZSBwYWNrZXQgbmVlZCB0byBiZSBmcmFnbWVudGVkICovCi0JaWYgKHNrYi0+bGVuIDw9IG5kZXYtPm1heF9kYXRhX3BrdF9wYXlsb2FkX3NpemUpIHsKKwlpZiAoc2tiLT5sZW4gPD0gY29ubl9pbmZvLT5tYXhfcGt0X3BheWxvYWRfbGVuKSB7CiAJCS8qIG5vIG5lZWQgdG8gZnJhZ21lbnQgcGFja2V0ICovCiAJCW5jaV9wdXNoX2RhdGFfaGRyKG5kZXYsIGNvbm5faWQsIHNrYiwgTkNJX1BCRl9MQVNUKTsKIApAQCAtMTcwLDYgKzE5Miw3IEBACiAJCX0KIAl9CiAKKwluZGV2LT5jdXJfY29ubl9pZCA9IGNvbm5faWQ7CiAJcXVldWVfd29yayhuZGV2LT50eF93cSwgJm5kZXYtPnR4X3dvcmspOwogCiAJZ290byBleGl0OwpAQCAtMTg1LDcgKzIwOCw3IEBACiAKIHN0YXRpYyB2b2lkIG5jaV9hZGRfcnhfZGF0YV9mcmFnKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSBfX3U4IHBiZiwgX191OCBzdGF0dXMpCisJCQkJIF9fdTggcGJmLCBfX3U4IGNvbm5faWQsIF9fdTggc3RhdHVzKQogewogCWludCByZWFzc2VtYmx5X2xlbjsKIAlpbnQgZXJyID0gMDsKQEAgLTIyOSwxNiArMjUyLDEzIEBACiAJfQogCiBleGl0OgotCWlmIChuZGV2LT5uZmNfZGV2LT5yZl9tb2RlID09IE5GQ19SRl9JTklUSUFUT1IpIHsKLQkJbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGUobmRldiwgc2tiLCBlcnIpOwotCX0gZWxzZSBpZiAobmRldi0+bmZjX2Rldi0+cmZfbW9kZSA9PSBORkNfUkZfVEFSR0VUKSB7CisJaWYgKG5kZXYtPm5mY19kZXYtPnJmX21vZGUgPT0gTkZDX1JGX1RBUkdFVCkgewogCQkvKiBEYXRhIHJlY2VpdmVkIGluIFRhcmdldCBtb2RlLCBmb3J3YXJkIHRvIG5mYyBjb3JlICovCiAJCWVyciA9IG5mY190bV9kYXRhX3JlY2VpdmVkKG5kZXYtPm5mY19kZXYsIHNrYik7CiAJCWlmIChlcnIpCiAJCQlwcl9lcnIoInVuYWJsZSB0byBoYW5kbGUgcmVjZWl2ZWQgZGF0YVxuIik7CiAJfSBlbHNlIHsKLQkJcHJfZXJyKCJyZiBtb2RlIHVua25vd25cbiIpOwotCQlrZnJlZV9za2Ioc2tiKTsKKwkJbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGUobmRldiwgc2tiLCBjb25uX2lkLCBlcnIpOwogCX0KIH0KIApAQCAtMjQ3LDYgKzI2Nyw4IEBACiB7CiAJX191OCBwYmYgPSBuY2lfcGJmKHNrYi0+ZGF0YSk7CiAJX191OCBzdGF0dXMgPSAwOworCV9fdTggY29ubl9pZCA9IG5jaV9jb25uX2lkKHNrYi0+ZGF0YSk7CisJc3RydWN0IG5jaV9jb25uX2luZm8gICAgKmNvbm5faW5mbzsKIAogCXByX2RlYnVnKCJsZW4gJWRcbiIsIHNrYi0+bGVuKTsKIApAQCAtMjU1LDYgKzI3NywxMCBAQAogCQkgbmNpX2Nvbm5faWQoc2tiLT5kYXRhKSwKIAkJIG5jaV9wbGVuKHNrYi0+ZGF0YSkpOwogCisJY29ubl9pbmZvID0gbmNpX2dldF9jb25uX2luZm9fYnlfY29ubl9pZChuZGV2LCBuY2lfY29ubl9pZChza2ItPmRhdGEpKTsKKwlpZiAoIWNvbm5faW5mbykKKwkJcmV0dXJuOworCiAJLyogc3RyaXAgdGhlIG5jaSBkYXRhIGhlYWRlciAqLwogCXNrYl9wdWxsKHNrYiwgTkNJX0RBVEFfSERSX1NJWkUpOwogCkBAIC0yNjgsNSArMjk0LDUgQEAKIAkJc2tiX3RyaW0oc2tiLCAoc2tiLT5sZW4gLSAxKSk7CiAJfQogCi0JbmNpX2FkZF9yeF9kYXRhX2ZyYWcobmRldiwgc2tiLCBwYmYsIG5jaV90b19lcnJubyhzdGF0dXMpKTsKKwluY2lfYWRkX3J4X2RhdGFfZnJhZyhuZGV2LCBza2IsIHBiZiwgY29ubl9pZCwgbmNpX3RvX2Vycm5vKHN0YXR1cykpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvaGNpLmMgYi9uZXQvbmZjL25jaS9oY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDU0ZWM1Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L25mYy9uY2kvaGNpLmMKQEAgLTAsMCArMSw2OTQgQEAKKy8qCisgKiAgVGhlIE5GQyBDb250cm9sbGVyIEludGVyZmFjZSBpcyB0aGUgY29tbXVuaWNhdGlvbiBwcm90b2NvbCBiZXR3ZWVuIGFuCisgKiAgTkZDIENvbnRyb2xsZXIgKE5GQ0MpIGFuZCBhIERldmljZSBIb3N0IChESCkuCisgKiAgVGhpcyBpcyB0aGUgSENJIG92ZXIgTkNJIGltcGxlbWVudGF0aW9uLCBhcyBzcGVjaWZpZWQgaW4gdGhlIDEwLjIKKyAqICBzZWN0aW9uIG9mIHRoZSBOQ0kgMS4xIHNwZWNpZmljYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxNCAgU1RNaWNyb2VsZWN0cm9uaWNzIFNBUy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMgorICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorCisjaW5jbHVkZSAiLi4vbmZjLmgiCisjaW5jbHVkZSA8bmV0L25mYy9uY2kuaD4KKyNpbmNsdWRlIDxuZXQvbmZjL25jaV9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbmZjLmg+CisKK3N0cnVjdCBuY2lfZGF0YSB7CisJdTggICAgICAgICAgICAgIGNvbm5faWQ7CisJdTggICAgICAgICAgICAgIHBpcGU7CisJdTggICAgICAgICAgICAgIGNtZDsKKwljb25zdCB1OCAgICAgICAgKmRhdGE7CisJdTMyICAgICAgICAgICAgIGRhdGFfbGVuOworfSBfX3BhY2tlZDsKKworc3RydWN0IG5jaV9oY2lfY3JlYXRlX3BpcGVfcGFyYW1zIHsKKwl1OCBzcmNfZ2F0ZTsKKwl1OCBkZXN0X2hvc3Q7CisJdTggZGVzdF9nYXRlOworfSBfX3BhY2tlZDsKKworc3RydWN0IG5jaV9oY2lfY3JlYXRlX3BpcGVfcmVzcCB7CisJdTggc3JjX2hvc3Q7CisJdTggc3JjX2dhdGU7CisJdTggZGVzdF9ob3N0OworCXU4IGRlc3RfZ2F0ZTsKKwl1OCBwaXBlOworfSBfX3BhY2tlZDsKKworc3RydWN0IG5jaV9oY2lfZGVsZXRlX3BpcGVfbm90aSB7CisJdTggcGlwZTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBuY2lfaGNpX2FsbF9waXBlX2NsZWFyZWRfbm90aSB7CisJdTggaG9zdDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBuY2lfaGNwX21lc3NhZ2UgeworCXU4IGhlYWRlcjsgICAgICAvKiB0eXBlIC1jbWQsZXZ0LHJzcC0gKyBpbnN0cnVjdGlvbiAqLworCXU4IGRhdGFbXTsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBuY2lfaGNwX3BhY2tldCB7CisJdTggaGVhZGVyOyAgICAgIC8qIGNiaXQrcGlwZSAqLworCXN0cnVjdCBuY2lfaGNwX21lc3NhZ2UgbWVzc2FnZTsKK30gX19wYWNrZWQ7CisKKyNkZWZpbmUgTkNJX0hDSV9BTllfU0VUX1BBUkFNRVRFUiAgMHgwMQorI2RlZmluZSBOQ0lfSENJX0FOWV9HRVRfUEFSQU1FVEVSICAweDAyCisjZGVmaW5lIE5DSV9IQ0lfQU5ZX0NMT1NFX1BJUEUgICAgIDB4MDQKKworI2RlZmluZSBOQ0lfSEZQX05PX0NIQUlOSU5HICAgICAgICAweDgwCisKKyNkZWZpbmUgTkNJX05GQ0VFX0lEX0hDSSAgICAgICAgICAgICAgICAweDgwCisKKyNkZWZpbmUgTkNJX0VWVF9IT1RfUExVRyAgICAgICAgICAgMHgwMworCisjZGVmaW5lIE5DSV9IQ0lfQURNSU5fUEFSQU1fU0VTU0lPTl9JREVOVElUWSAgICAgICAweDAxCisKKy8qIEhDUCBoZWFkZXJzICovCisjZGVmaW5lIE5DSV9IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOICAgICAgMQorI2RlZmluZSBOQ0lfSENJX0hDUF9NRVNTQUdFX0hFQURFUl9MRU4gICAgIDEKKyNkZWZpbmUgTkNJX0hDSV9IQ1BfSEVBREVSX0xFTiAgICAgICAgICAgICAyCisKKy8qIEhDUCB0eXBlcyAqLworI2RlZmluZSBOQ0lfSENJX0hDUF9DT01NQU5EICAgICAgICAweDAwCisjZGVmaW5lIE5DSV9IQ0lfSENQX0VWRU5UICAgICAgICAgIDB4MDEKKyNkZWZpbmUgTkNJX0hDSV9IQ1BfUkVTUE9OU0UgICAgICAgMHgwMgorCisjZGVmaW5lIE5DSV9IQ0lfQURNX05PVElGWV9QSVBFX0NSRUFURUQgICAgIDB4MTIKKyNkZWZpbmUgTkNJX0hDSV9BRE1fTk9USUZZX1BJUEVfREVMRVRFRCAgICAgMHgxMworI2RlZmluZSBOQ0lfSENJX0FETV9OT1RJRllfQUxMX1BJUEVfQ0xFQVJFRCAweDE1CisKKyNkZWZpbmUgTkNJX0hDSV9GUkFHTUVOVCAgICAgICAgICAgMHg3ZgorI2RlZmluZSBOQ0lfSENQX0hFQURFUih0eXBlLCBpbnN0cikgKCgoKHR5cGUpICYgMHgwMykgPDwgNikgfFwKKwkJCQkgICAgICAoKGluc3RyKSAmIDB4M2YpKQorCisjZGVmaW5lIE5DSV9IQ1BfTVNHX0dFVF9UWVBFKGhlYWRlcikgKChoZWFkZXIgJiAweGMwKSA+PiA2KQorI2RlZmluZSBOQ0lfSENQX01TR19HRVRfQ01EKGhlYWRlcikgIChoZWFkZXIgJiAweDNmKQorI2RlZmluZSBOQ0lfSENQX01TR19HRVRfUElQRShoZWFkZXIpIChoZWFkZXIgJiAweDdmKQorCisvKiBIQ0kgY29yZSAqLworc3RhdGljIHZvaWQgbmNpX2hjaV9yZXNldF9waXBlcyhzdHJ1Y3QgbmNpX2hjaV9kZXYgKmhkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkNJX0hDSV9NQVhfUElQRVM7IGkrKykgeworCQloZGV2LT5waXBlc1tpXS5nYXRlID0gTkNJX0hDSV9JTlZBTElEX0dBVEU7CisJCWhkZXYtPnBpcGVzW2ldLmhvc3QgPSBOQ0lfSENJX0lOVkFMSURfSE9TVDsKKwl9CisJbWVtc2V0KGhkZXYtPmdhdGUycGlwZSwgTkNJX0hDSV9JTlZBTElEX1BJUEUsIHNpemVvZihoZGV2LT5nYXRlMnBpcGUpKTsKK30KKworc3RhdGljIHZvaWQgbmNpX2hjaV9yZXNldF9waXBlc19wZXJfaG9zdChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggaG9zdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOQ0lfSENJX01BWF9QSVBFUzsgaSsrKSB7CisJCWlmIChuZGV2LT5oY2lfZGV2LT5waXBlc1tpXS5ob3N0ID09IGhvc3QpIHsKKwkJCW5kZXYtPmhjaV9kZXYtPnBpcGVzW2ldLmdhdGUgPSBOQ0lfSENJX0lOVkFMSURfR0FURTsKKwkJCW5kZXYtPmhjaV9kZXYtPnBpcGVzW2ldLmhvc3QgPSBOQ0lfSENJX0lOVkFMSURfSE9TVDsKKwkJfQorCX0KK30KKworLyogRnJhZ21lbnQgSENJIGRhdGEgb3ZlciBOQ0kgcGFja2V0LgorICogTkZDIEZvcnVtIE5DSSAxMC4yLjIgRGF0YSBFeGNoYW5nZToKKyAqIFRoZSBwYXlsb2FkIG9mIHRoZSBEYXRhIFBhY2tldHMgc2VudCBvbiB0aGUgTG9naWNhbCBDb25uZWN0aW9uIFNIQUxMIGJlCisgKiB2YWxpZCBIQ1AgcGFja2V0cywgYXMgZGVmaW5lZCB3aXRoaW4gW0VUU0lfMTAyNjIyXS4gRWFjaCBEYXRhIFBhY2tldCBTSEFMTAorICogY29udGFpbiBhIHNpbmdsZSBIQ1AgcGFja2V0LiBOQ0kgU2VnbWVudGF0aW9uIGFuZCBSZWFzc2VtYmx5IFNIQUxMIE5PVCBiZQorICogYXBwbGllZCB0byBEYXRhIE1lc3NhZ2VzIGluIGVpdGhlciBkaXJlY3Rpb24uIFRoZSBIQ0kgZnJhZ21lbnRhdGlvbiBtZWNoYW5pc20KKyAqIGlzIHVzZWQgaWYgcmVxdWlyZWQuCisgKi8KK3N0YXRpYyBpbnQgbmNpX2hjaV9zZW5kX2RhdGEoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHU4IHBpcGUsCisJCQkgICAgIGNvbnN0IHU4IGRhdGFfdHlwZSwgY29uc3QgdTggKmRhdGEsCisJCQkgICAgIHNpemVfdCBkYXRhX2xlbikKK3sKKwlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAgICAqY29ubl9pbmZvOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IGxlbiwgaSwgcjsKKwl1OCBjYiA9IHBpcGU7CisKKwljb25uX2luZm8gPSBuZGV2LT5oY2lfZGV2LT5jb25uX2luZm87CisJaWYgKCFjb25uX2luZm8pCisJCXJldHVybiAtRVBST1RPOworCisJc2tiID0gbmNpX3NrYl9hbGxvYyhuZGV2LCAyICsgY29ubl9pbmZvLT5tYXhfcGt0X3BheWxvYWRfbGVuICsKKwkJCSAgICBOQ0lfREFUQV9IRFJfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCisJc2tiX3Jlc2VydmUoc2tiLCAyICsgTkNJX0RBVEFfSERSX1NJWkUpOworCSpza2JfcHVzaChza2IsIDEpID0gZGF0YV90eXBlOworCisJaSA9IDA7CisJbGVuID0gY29ubl9pbmZvLT5tYXhfcGt0X3BheWxvYWRfbGVuOworCisJZG8geworCQkvKiBJZiBsYXN0IHBhY2tldCBhZGQgTkNJX0hGUF9OT19DSEFJTklORyAqLworCQlpZiAoaSArIGNvbm5faW5mby0+bWF4X3BrdF9wYXlsb2FkX2xlbiAtCisJCSAgICAoc2tiLT5sZW4gKyAxKSA+PSBkYXRhX2xlbikgeworCQkJY2IgfD0gTkNJX0hGUF9OT19DSEFJTklORzsKKwkJCWxlbiA9IGRhdGFfbGVuIC0gaTsKKwkJfSBlbHNlIHsKKwkJCWxlbiA9IGNvbm5faW5mby0+bWF4X3BrdF9wYXlsb2FkX2xlbiAtIHNrYi0+bGVuIC0gMTsKKwkJfQorCisJCSpza2JfcHVzaChza2IsIDEpID0gY2I7CisKKwkJaWYgKGxlbiA+IDApCisJCQltZW1jcHkoc2tiX3B1dChza2IsIGxlbiksIGRhdGEgKyBpLCBsZW4pOworCisJCXIgPSBuY2lfc2VuZF9kYXRhKG5kZXYsIGNvbm5faW5mby0+Y29ubl9pZCwgc2tiKTsKKwkJaWYgKHIgPCAwKQorCQkJcmV0dXJuIHI7CisKKwkJaSArPSBsZW47CisJCWlmIChpIDwgZGF0YV9sZW4pIHsKKwkJCXNrYl90cmltKHNrYiwgMCk7CisJCQlza2JfcHVsbChza2IsIGxlbik7CisJCX0KKwl9IHdoaWxlIChpIDwgZGF0YV9sZW4pOworCisJcmV0dXJuIGk7Cit9CisKK3N0YXRpYyB2b2lkIG5jaV9oY2lfc2VuZF9kYXRhX3JlcShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdW5zaWduZWQgbG9uZyBvcHQpCit7CisJc3RydWN0IG5jaV9kYXRhICpkYXRhID0gKHN0cnVjdCBuY2lfZGF0YSAqKW9wdDsKKworCW5jaV9oY2lfc2VuZF9kYXRhKG5kZXYsIGRhdGEtPnBpcGUsIGRhdGEtPmNtZCwKKwkJCSAgZGF0YS0+ZGF0YSwgZGF0YS0+ZGF0YV9sZW4pOworfQorCitpbnQgbmNpX2hjaV9zZW5kX2V2ZW50KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBldmVudCwKKwkJICAgICAgIGNvbnN0IHU4ICpwYXJhbSwgc2l6ZV90IHBhcmFtX2xlbikKK3sKKwl1OCBwaXBlID0gbmRldi0+aGNpX2Rldi0+Z2F0ZTJwaXBlW2dhdGVdOworCisJaWYgKHBpcGUgPT0gTkNJX0hDSV9JTlZBTElEX1BJUEUpCisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCXJldHVybiBuY2lfaGNpX3NlbmRfZGF0YShuZGV2LCBwaXBlLAorCQkJTkNJX0hDUF9IRUFERVIoTkNJX0hDSV9IQ1BfRVZFTlQsIGV2ZW50KSwKKwkJCXBhcmFtLCBwYXJhbV9sZW4pOworfQorRVhQT1JUX1NZTUJPTChuY2lfaGNpX3NlbmRfZXZlbnQpOworCitpbnQgbmNpX2hjaV9zZW5kX2NtZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggY21kLAorCQkgICAgIGNvbnN0IHU4ICpwYXJhbSwgc2l6ZV90IHBhcmFtX2xlbiwKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYikKK3sKKwlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAgICAqY29ubl9pbmZvOworCXN0cnVjdCBuY2lfZGF0YSBkYXRhOworCWludCByOworCXU4IHBpcGUgPSBuZGV2LT5oY2lfZGV2LT5nYXRlMnBpcGVbZ2F0ZV07CisKKwlpZiAocGlwZSA9PSBOQ0lfSENJX0lOVkFMSURfUElQRSkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJY29ubl9pbmZvID0gbmRldi0+aGNpX2Rldi0+Y29ubl9pbmZvOworCWlmICghY29ubl9pbmZvKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCWRhdGEuY29ubl9pZCA9IGNvbm5faW5mby0+Y29ubl9pZDsKKwlkYXRhLnBpcGUgPSBwaXBlOworCWRhdGEuY21kID0gTkNJX0hDUF9IRUFERVIoTkNJX0hDSV9IQ1BfQ09NTUFORCwgY21kKTsKKwlkYXRhLmRhdGEgPSBwYXJhbTsKKwlkYXRhLmRhdGFfbGVuID0gcGFyYW1fbGVuOworCisJciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9oY2lfc2VuZF9kYXRhX3JlcSwgKHVuc2lnbmVkIGxvbmcpJmRhdGEsCisJCQltc2Vjc190b19qaWZmaWVzKE5DSV9EQVRBX1RJTUVPVVQpKTsKKworCWlmIChyID09IE5DSV9TVEFUVVNfT0spCisJCSpza2IgPSBjb25uX2luZm8tPnJ4X3NrYjsKKworCXJldHVybiByOworfQorRVhQT1JUX1NZTUJPTChuY2lfaGNpX3NlbmRfY21kKTsKKworc3RhdGljIHZvaWQgbmNpX2hjaV9ldmVudF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSwKKwkJCQkgICB1OCBldmVudCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAobmRldi0+b3BzLT5oY2lfZXZlbnRfcmVjZWl2ZWQpCisJCW5kZXYtPm9wcy0+aGNpX2V2ZW50X3JlY2VpdmVkKG5kZXYsIHBpcGUsIGV2ZW50LCBza2IpOworfQorCitzdGF0aWMgdm9pZCBuY2lfaGNpX2NtZF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSwKKwkJCQkgdTggY21kLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXU4IGdhdGUgPSBuZGV2LT5oY2lfZGV2LT5waXBlc1twaXBlXS5nYXRlOworCXU4IHN0YXR1cyA9IE5DSV9IQ0lfQU5ZX09LIHwgfk5DSV9IQ0lfRlJBR01FTlQ7CisJdTggZGVzdF9nYXRlLCBuZXdfcGlwZTsKKwlzdHJ1Y3QgbmNpX2hjaV9jcmVhdGVfcGlwZV9yZXNwICpjcmVhdGVfaW5mbzsKKwlzdHJ1Y3QgbmNpX2hjaV9kZWxldGVfcGlwZV9ub3RpICpkZWxldGVfaW5mbzsKKwlzdHJ1Y3QgbmNpX2hjaV9hbGxfcGlwZV9jbGVhcmVkX25vdGkgKmNsZWFyZWRfaW5mbzsKKworCXByX2RlYnVnKCJmcm9tIGdhdGUgJXggcGlwZSAleCBjbWQgJXhcbiIsIGdhdGUsIHBpcGUsIGNtZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgTkNJX0hDSV9BRE1fTk9USUZZX1BJUEVfQ1JFQVRFRDoKKwkJaWYgKHNrYi0+bGVuICE9IDUpIHsKKwkJCXN0YXR1cyA9IE5DSV9IQ0lfQU5ZX0VfTk9LOworCQkJZ290byBleGl0OworCQl9CisJCWNyZWF0ZV9pbmZvID0gKHN0cnVjdCBuY2lfaGNpX2NyZWF0ZV9waXBlX3Jlc3AgKilza2ItPmRhdGE7CisJCWRlc3RfZ2F0ZSA9IGNyZWF0ZV9pbmZvLT5kZXN0X2dhdGU7CisJCW5ld19waXBlID0gY3JlYXRlX2luZm8tPnBpcGU7CisKKwkJLyogU2F2ZSB0aGUgbmV3IGNyZWF0ZWQgcGlwZSBhbmQgYmluZCB3aXRoIGxvY2FsIGdhdGUsCisJCSAqIHRoZSBkZXNjcmlwdGlvbiBmb3Igc2tiLT5kYXRhWzNdIGlzIGRlc3RpbmF0aW9uIGdhdGUgaWQKKwkJICogYnV0IHNpbmNlIHdlIHJlY2VpdmVkIHRoaXMgY21kIGZyb20gaG9zdCBjb250cm9sbGVyLCB3ZQorCQkgKiBhcmUgdGhlIGRlc3RpbmF0aW9uIGFuZCBpdCBpcyBvdXIgbG9jYWwgZ2F0ZQorCQkgKi8KKwkJbmRldi0+aGNpX2Rldi0+Z2F0ZTJwaXBlW2Rlc3RfZ2F0ZV0gPSBuZXdfcGlwZTsKKwkJbmRldi0+aGNpX2Rldi0+cGlwZXNbbmV3X3BpcGVdLmdhdGUgPSBkZXN0X2dhdGU7CisJCW5kZXYtPmhjaV9kZXYtPnBpcGVzW25ld19waXBlXS5ob3N0ID0KKwkJCQkJCWNyZWF0ZV9pbmZvLT5zcmNfaG9zdDsKKwkJYnJlYWs7CisJY2FzZSBOQ0lfSENJX0FOWV9PUEVOX1BJUEU6CisJCS8qIElmIHRoZSBwaXBlIGlzIG5vdCBjcmVhdGVkIHJlcG9ydCBhbiBlcnJvciAqLworCQlpZiAoZ2F0ZSA9PSBOQ0lfSENJX0lOVkFMSURfR0FURSkgeworCQkJc3RhdHVzID0gTkNJX0hDSV9BTllfRV9OT0s7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBOQ0lfSENJX0FETV9OT1RJRllfUElQRV9ERUxFVEVEOgorCQlpZiAoc2tiLT5sZW4gIT0gMSkgeworCQkJc3RhdHVzID0gTkNJX0hDSV9BTllfRV9OT0s7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwkJZGVsZXRlX2luZm8gPSAoc3RydWN0IG5jaV9oY2lfZGVsZXRlX3BpcGVfbm90aSAqKXNrYi0+ZGF0YTsKKworCQluZGV2LT5oY2lfZGV2LT5waXBlc1tkZWxldGVfaW5mby0+cGlwZV0uZ2F0ZSA9CisJCQkJCQlOQ0lfSENJX0lOVkFMSURfR0FURTsKKwkJbmRldi0+aGNpX2Rldi0+cGlwZXNbZGVsZXRlX2luZm8tPnBpcGVdLmhvc3QgPQorCQkJCQkJTkNJX0hDSV9JTlZBTElEX0hPU1Q7CisJCWJyZWFrOworCWNhc2UgTkNJX0hDSV9BRE1fTk9USUZZX0FMTF9QSVBFX0NMRUFSRUQ6CisJCWlmIChza2ItPmxlbiAhPSAxKSB7CisJCQlzdGF0dXMgPSBOQ0lfSENJX0FOWV9FX05PSzsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCisJCWNsZWFyZWRfaW5mbyA9CisJCQkoc3RydWN0IG5jaV9oY2lfYWxsX3BpcGVfY2xlYXJlZF9ub3RpICopc2tiLT5kYXRhOworCQluY2lfaGNpX3Jlc2V0X3BpcGVzX3Blcl9ob3N0KG5kZXYsIGNsZWFyZWRfaW5mby0+aG9zdCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCJEaXNjYXJkZWQgdW5rbm93biBjbWQgJXggdG8gZ2F0ZSAleFxuIiwgY21kLCBnYXRlKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKG5kZXYtPm9wcy0+aGNpX2NtZF9yZWNlaXZlZCkKKwkJbmRldi0+b3BzLT5oY2lfY21kX3JlY2VpdmVkKG5kZXYsIHBpcGUsIGNtZCwgc2tiKTsKKworZXhpdDoKKwluY2lfaGNpX3NlbmRfZGF0YShuZGV2LCBwaXBlLCBzdGF0dXMsIE5VTEwsIDApOworCisJa2ZyZWVfc2tiKHNrYik7Cit9CisKK3N0YXRpYyB2b2lkIG5jaV9oY2lfcmVzcF9yZWNlaXZlZChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSwKKwkJCQkgIHU4IHJlc3VsdCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAgICAqY29ubl9pbmZvOworCXU4IHN0YXR1cyA9IHJlc3VsdDsKKworCWlmIChyZXN1bHQgIT0gTkNJX0hDSV9BTllfT0spCisJCWdvdG8gZXhpdDsKKworCWNvbm5faW5mbyA9IG5kZXYtPmhjaV9kZXYtPmNvbm5faW5mbzsKKwlpZiAoIWNvbm5faW5mbykgeworCQlzdGF0dXMgPSBOQ0lfU1RBVFVTX1JFSkVDVEVEOworCQlnb3RvIGV4aXQ7CisJfQorCisJY29ubl9pbmZvLT5yeF9za2IgPSBza2I7CisKK2V4aXQ6CisJbmNpX3JlcV9jb21wbGV0ZShuZGV2LCBzdGF0dXMpOworfQorCisvKiBSZWNlaXZlIGhjcCBtZXNzYWdlIGZvciBwaXBlLCB3aXRoIHR5cGUgYW5kIGNtZC4KKyAqIHNrYiBjb250YWlucyBvcHRpb25hbCBtZXNzYWdlIGRhdGEgb25seS4KKyAqLworc3RhdGljIHZvaWQgbmNpX2hjaV9oY3BfbWVzc2FnZV9yeChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSwKKwkJCQkgICB1OCB0eXBlLCB1OCBpbnN0cnVjdGlvbiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIE5DSV9IQ0lfSENQX1JFU1BPTlNFOgorCQluY2lfaGNpX3Jlc3BfcmVjZWl2ZWQobmRldiwgcGlwZSwgaW5zdHJ1Y3Rpb24sIHNrYik7CisJCWJyZWFrOworCWNhc2UgTkNJX0hDSV9IQ1BfQ09NTUFORDoKKwkJbmNpX2hjaV9jbWRfcmVjZWl2ZWQobmRldiwgcGlwZSwgaW5zdHJ1Y3Rpb24sIHNrYik7CisJCWJyZWFrOworCWNhc2UgTkNJX0hDSV9IQ1BfRVZFTlQ6CisJCW5jaV9oY2lfZXZlbnRfcmVjZWl2ZWQobmRldiwgcGlwZSwgaW5zdHJ1Y3Rpb24sIHNrYik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2VycigiVU5LTk9XTiBNU0cgVHlwZSAlZCwgaW5zdHJ1Y3Rpb249JWRcbiIsCisJCSAgICAgICB0eXBlLCBpbnN0cnVjdGlvbik7CisJCWtmcmVlX3NrYihza2IpOworCQlicmVhazsKKwl9CisKKwluY2lfcmVxX2NvbXBsZXRlKG5kZXYsIDApOworfQorCitzdGF0aWMgdm9pZCBuY2lfaGNpX21zZ19yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgbmNpX2hjaV9kZXYgKmhkZXYgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG5jaV9oY2lfZGV2LCBtc2dfcnhfd29yayk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICptZXNzYWdlOworCXU4IHBpcGUsIHR5cGUsIGluc3RydWN0aW9uOworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmaGRldi0+bXNnX3J4X3F1ZXVlKSkgIT0gTlVMTCkgeworCQlwaXBlID0gc2tiLT5kYXRhWzBdOworCQlza2JfcHVsbChza2IsIE5DSV9IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOKTsKKwkJbWVzc2FnZSA9IChzdHJ1Y3QgbmNpX2hjcF9tZXNzYWdlICopc2tiLT5kYXRhOworCQl0eXBlID0gTkNJX0hDUF9NU0dfR0VUX1RZUEUobWVzc2FnZS0+aGVhZGVyKTsKKwkJaW5zdHJ1Y3Rpb24gPSBOQ0lfSENQX01TR19HRVRfQ01EKG1lc3NhZ2UtPmhlYWRlcik7CisJCXNrYl9wdWxsKHNrYiwgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTsKKworCQluY2lfaGNpX2hjcF9tZXNzYWdlX3J4KGhkZXYtPm5kZXYsIHBpcGUsCisJCQkJICAgICAgIHR5cGUsIGluc3RydWN0aW9uLCBza2IpOworCX0KK30KKwordm9pZCBuY2lfaGNpX2RhdGFfcmVjZWl2ZWRfY2Iodm9pZCAqY29udGV4dCwKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBlcnIpCit7CisJc3RydWN0IG5jaV9kZXYgKm5kZXYgPSAoc3RydWN0IG5jaV9kZXYgKiljb250ZXh0OworCXN0cnVjdCBuY2lfaGNwX3BhY2tldCAqcGFja2V0OworCXU4IHBpcGUsIHR5cGUsIGluc3RydWN0aW9uOworCXN0cnVjdCBza19idWZmICpoY3Bfc2tiOworCXN0cnVjdCBza19idWZmICpmcmFnX3NrYjsKKwlpbnQgbXNnX2xlbjsKKworCXByX2RlYnVnKCJcbiIpOworCisJaWYgKGVycikgeworCQluY2lfcmVxX2NvbXBsZXRlKG5kZXYsIGVycik7CisJCXJldHVybjsKKwl9CisKKwlwYWNrZXQgPSAoc3RydWN0IG5jaV9oY3BfcGFja2V0ICopc2tiLT5kYXRhOworCWlmICgocGFja2V0LT5oZWFkZXIgJiB+TkNJX0hDSV9GUkFHTUVOVCkgPT0gMCkgeworCQlza2JfcXVldWVfdGFpbCgmbmRldi0+aGNpX2Rldi0+cnhfaGNwX2ZyYWdzLCBza2IpOworCQlyZXR1cm47CisJfQorCisJLyogaXQncyB0aGUgbGFzdCBmcmFnbWVudC4gRG9lcyBpdCBuZWVkIHJlLWFnZ3JlZ2F0aW9uPyAqLworCWlmIChza2JfcXVldWVfbGVuKCZuZGV2LT5oY2lfZGV2LT5yeF9oY3BfZnJhZ3MpKSB7CisJCXBpcGUgPSBwYWNrZXQtPmhlYWRlciAmIE5DSV9IQ0lfRlJBR01FTlQ7CisJCXNrYl9xdWV1ZV90YWlsKCZuZGV2LT5oY2lfZGV2LT5yeF9oY3BfZnJhZ3MsIHNrYik7CisKKwkJbXNnX2xlbiA9IDA7CisJCXNrYl9xdWV1ZV93YWxrKCZuZGV2LT5oY2lfZGV2LT5yeF9oY3BfZnJhZ3MsIGZyYWdfc2tiKSB7CisJCQltc2dfbGVuICs9IChmcmFnX3NrYi0+bGVuIC0KKwkJCQkgICAgTkNJX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU4pOworCQl9CisKKwkJaGNwX3NrYiA9IG5mY19hbGxvY19yZWN2X3NrYihOQ0lfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTiArCisJCQkJCSAgICAgbXNnX2xlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghaGNwX3NrYikgeworCQkJbmNpX3JlcV9jb21wbGV0ZShuZGV2LCAtRU5PTUVNKTsKKwkJCXJldHVybjsKKwkJfQorCisJCSpza2JfcHV0KGhjcF9za2IsIE5DSV9IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOKSA9IHBpcGU7CisKKwkJc2tiX3F1ZXVlX3dhbGsoJm5kZXYtPmhjaV9kZXYtPnJ4X2hjcF9mcmFncywgZnJhZ19za2IpIHsKKwkJICAgICAgIG1zZ19sZW4gPSBmcmFnX3NrYi0+bGVuIC0gTkNJX0hDSV9IQ1BfUEFDS0VUX0hFQURFUl9MRU47CisJCQltZW1jcHkoc2tiX3B1dChoY3Bfc2tiLCBtc2dfbGVuKSwgZnJhZ19za2ItPmRhdGEgKworCQkJICAgICAgIE5DSV9IQ0lfSENQX1BBQ0tFVF9IRUFERVJfTEVOLCBtc2dfbGVuKTsKKwkJfQorCisJCXNrYl9xdWV1ZV9wdXJnZSgmbmRldi0+aGNpX2Rldi0+cnhfaGNwX2ZyYWdzKTsKKwl9IGVsc2UgeworCQlwYWNrZXQtPmhlYWRlciAmPSBOQ0lfSENJX0ZSQUdNRU5UOworCQloY3Bfc2tiID0gc2tiOworCX0KKworCS8qIGlmIHRoaXMgaXMgYSByZXNwb25zZSwgZGlzcGF0Y2ggaW1tZWRpYXRlbHkgdG8KKwkgKiB1bmJsb2NrIHdhaXRpbmcgY21kIGNvbnRleHQuIE90aGVyd2lzZSwgZW5xdWV1ZSB0byBkaXNwYXRjaAorCSAqIGluIHNlcGFyYXRlIGNvbnRleHQgd2hlcmUgaGFuZGxlciBjYW4gYWxzbyBleGVjdXRlIGNvbW1hbmQuCisJICovCisJcGFja2V0ID0gKHN0cnVjdCBuY2lfaGNwX3BhY2tldCAqKWhjcF9za2ItPmRhdGE7CisJdHlwZSA9IE5DSV9IQ1BfTVNHX0dFVF9UWVBFKHBhY2tldC0+bWVzc2FnZS5oZWFkZXIpOworCWlmICh0eXBlID09IE5DSV9IQ0lfSENQX1JFU1BPTlNFKSB7CisJCXBpcGUgPSBwYWNrZXQtPmhlYWRlcjsKKwkJaW5zdHJ1Y3Rpb24gPSBOQ0lfSENQX01TR19HRVRfQ01EKHBhY2tldC0+bWVzc2FnZS5oZWFkZXIpOworCQlza2JfcHVsbChoY3Bfc2tiLCBOQ0lfSENJX0hDUF9QQUNLRVRfSEVBREVSX0xFTiArCisJCQkgTkNJX0hDSV9IQ1BfTUVTU0FHRV9IRUFERVJfTEVOKTsKKwkJbmNpX2hjaV9oY3BfbWVzc2FnZV9yeChuZGV2LCBwaXBlLCB0eXBlLCBpbnN0cnVjdGlvbiwgaGNwX3NrYik7CisJfSBlbHNlIHsKKwkJc2tiX3F1ZXVlX3RhaWwoJm5kZXYtPmhjaV9kZXYtPm1zZ19yeF9xdWV1ZSwgaGNwX3NrYik7CisJCXNjaGVkdWxlX3dvcmsoJm5kZXYtPmhjaV9kZXYtPm1zZ19yeF93b3JrKTsKKwl9Cit9CisKK2ludCBuY2lfaGNpX29wZW5fcGlwZShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggcGlwZSkKK3sKKwlzdHJ1Y3QgbmNpX2RhdGEgZGF0YTsKKwlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAgICAqY29ubl9pbmZvOworCisJY29ubl9pbmZvID0gbmRldi0+aGNpX2Rldi0+Y29ubl9pbmZvOworCWlmICghY29ubl9pbmZvKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCWRhdGEuY29ubl9pZCA9IGNvbm5faW5mby0+Y29ubl9pZDsKKwlkYXRhLnBpcGUgPSBwaXBlOworCWRhdGEuY21kID0gTkNJX0hDUF9IRUFERVIoTkNJX0hDSV9IQ1BfQ09NTUFORCwKKwkJCQkgICAgICAgTkNJX0hDSV9BTllfT1BFTl9QSVBFKTsKKwlkYXRhLmRhdGEgPSBOVUxMOworCWRhdGEuZGF0YV9sZW4gPSAwOworCisJcmV0dXJuIG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9oY2lfc2VuZF9kYXRhX3JlcSwKKwkJCSh1bnNpZ25lZCBsb25nKSZkYXRhLAorCQkJbXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7Cit9CitFWFBPUlRfU1lNQk9MKG5jaV9oY2lfb3Blbl9waXBlKTsKKworaW50IG5jaV9oY2lfc2V0X3BhcmFtKHN0cnVjdCBuY2lfZGV2ICpuZGV2LCB1OCBnYXRlLCB1OCBpZHgsCisJCSAgICAgIGNvbnN0IHU4ICpwYXJhbSwgc2l6ZV90IHBhcmFtX2xlbikKK3sKKwlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvOworCXN0cnVjdCBuY2lfZGF0YSBkYXRhOworCWludCByOworCXU4ICp0bXA7CisJdTggcGlwZSA9IG5kZXYtPmhjaV9kZXYtPmdhdGUycGlwZVtnYXRlXTsKKworCXByX2RlYnVnKCJpZHg9JWQgdG8gZ2F0ZSAlZFxuIiwgaWR4LCBnYXRlKTsKKworCWlmIChwaXBlID09IE5DSV9IQ0lfSU5WQUxJRF9QSVBFKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwljb25uX2luZm8gPSBuZGV2LT5oY2lfZGV2LT5jb25uX2luZm87CisJaWYgKCFjb25uX2luZm8pCisJCXJldHVybiAtRVBST1RPOworCisJdG1wID0ga21hbGxvYygxICsgcGFyYW1fbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRtcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkqdG1wID0gaWR4OworCW1lbWNweSh0bXAgKyAxLCBwYXJhbSwgcGFyYW1fbGVuKTsKKworCWRhdGEuY29ubl9pZCA9IGNvbm5faW5mby0+Y29ubl9pZDsKKwlkYXRhLnBpcGUgPSBwaXBlOworCWRhdGEuY21kID0gTkNJX0hDUF9IRUFERVIoTkNJX0hDSV9IQ1BfQ09NTUFORCwKKwkJCQkgICAgICAgTkNJX0hDSV9BTllfU0VUX1BBUkFNRVRFUik7CisJZGF0YS5kYXRhID0gdG1wOworCWRhdGEuZGF0YV9sZW4gPSBwYXJhbV9sZW4gKyAxOworCisJciA9IG5jaV9yZXF1ZXN0KG5kZXYsIG5jaV9oY2lfc2VuZF9kYXRhX3JlcSwKKwkJCSh1bnNpZ25lZCBsb25nKSZkYXRhLAorCQkJbXNlY3NfdG9famlmZmllcyhOQ0lfREFUQV9USU1FT1VUKSk7CisKKwlrZnJlZSh0bXApOworCXJldHVybiByOworfQorRVhQT1JUX1NZTUJPTChuY2lfaGNpX3NldF9wYXJhbSk7CisKK2ludCBuY2lfaGNpX2dldF9wYXJhbShzdHJ1Y3QgbmNpX2RldiAqbmRldiwgdTggZ2F0ZSwgdTggaWR4LAorCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYikKK3sKKwlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAgICAqY29ubl9pbmZvOworCXN0cnVjdCBuY2lfZGF0YSBkYXRhOworCWludCByOworCXU4IHBpcGUgPSBuZGV2LT5oY2lfZGV2LT5nYXRlMnBpcGVbZ2F0ZV07CisKKwlwcl9kZWJ1ZygiaWR4PSVkIHRvIGdhdGUgJWRcbiIsIGlkeCwgZ2F0ZSk7CisKKwlpZiAocGlwZSA9PSBOQ0lfSENJX0lOVkFMSURfUElQRSkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJY29ubl9pbmZvID0gbmRldi0+aGNpX2Rldi0+Y29ubl9pbmZvOworCWlmICghY29ubl9pbmZvKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCWRhdGEuY29ubl9pZCA9IGNvbm5faW5mby0+Y29ubl9pZDsKKwlkYXRhLnBpcGUgPSBwaXBlOworCWRhdGEuY21kID0gTkNJX0hDUF9IRUFERVIoTkNJX0hDSV9IQ1BfQ09NTUFORCwKKwkJCQkgIE5DSV9IQ0lfQU5ZX0dFVF9QQVJBTUVURVIpOworCWRhdGEuZGF0YSA9ICZpZHg7CisJZGF0YS5kYXRhX2xlbiA9IDE7CisKKwlyID0gbmNpX3JlcXVlc3QobmRldiwgbmNpX2hjaV9zZW5kX2RhdGFfcmVxLCAodW5zaWduZWQgbG9uZykmZGF0YSwKKwkJCW1zZWNzX3RvX2ppZmZpZXMoTkNJX0RBVEFfVElNRU9VVCkpOworCisJaWYgKHIgPT0gTkNJX1NUQVRVU19PSykKKwkJKnNrYiA9IGNvbm5faW5mby0+cnhfc2tiOworCisJcmV0dXJuIHI7Cit9CitFWFBPUlRfU1lNQk9MKG5jaV9oY2lfZ2V0X3BhcmFtKTsKKworaW50IG5jaV9oY2lfY29ubmVjdF9nYXRlKHN0cnVjdCBuY2lfZGV2ICpuZGV2LAorCQkJIHU4IGRlc3RfaG9zdCwgdTggZGVzdF9nYXRlLCB1OCBwaXBlKQoreworCWludCByOworCisJaWYgKHBpcGUgPT0gTkNJX0hDSV9ET19OT1RfT1BFTl9QSVBFKQorCQlyZXR1cm4gMDsKKworCWlmIChuZGV2LT5oY2lfZGV2LT5nYXRlMnBpcGVbZGVzdF9nYXRlXSAhPSBOQ0lfSENJX0lOVkFMSURfUElQRSkKKwkJcmV0dXJuIC1FQUREUklOVVNFOworCisJaWYgKHBpcGUgIT0gTkNJX0hDSV9JTlZBTElEX1BJUEUpCisJCWdvdG8gb3Blbl9waXBlOworCisJc3dpdGNoIChkZXN0X2dhdGUpIHsKKwljYXNlIE5DSV9IQ0lfTElOS19NR01UX0dBVEU6CisJCXBpcGUgPSBOQ0lfSENJX0xJTktfTUdNVF9QSVBFOworCWJyZWFrOworCWNhc2UgTkNJX0hDSV9BRE1JTl9HQVRFOgorCQlwaXBlID0gTkNJX0hDSV9BRE1JTl9QSVBFOworCWJyZWFrOworCX0KKworb3Blbl9waXBlOgorCXIgPSBuY2lfaGNpX29wZW5fcGlwZShuZGV2LCBwaXBlKTsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCisJbmRldi0+aGNpX2Rldi0+cGlwZXNbcGlwZV0uZ2F0ZSA9IGRlc3RfZ2F0ZTsKKwluZGV2LT5oY2lfZGV2LT5waXBlc1twaXBlXS5ob3N0ID0gZGVzdF9ob3N0OworCW5kZXYtPmhjaV9kZXYtPmdhdGUycGlwZVtkZXN0X2dhdGVdID0gcGlwZTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChuY2lfaGNpX2Nvbm5lY3RfZ2F0ZSk7CisKK3N0YXRpYyBpbnQgbmNpX2hjaV9kZXZfY29ubmVjdF9nYXRlcyhzdHJ1Y3QgbmNpX2RldiAqbmRldiwKKwkJCQkgICAgIHU4IGdhdGVfY291bnQsCisJCQkJICAgICBzdHJ1Y3QgbmNpX2hjaV9nYXRlICpnYXRlcykKK3sKKwlpbnQgcjsKKworCXdoaWxlIChnYXRlX2NvdW50LS0pIHsKKwkJciA9IG5jaV9oY2lfY29ubmVjdF9nYXRlKG5kZXYsIGdhdGVzLT5kZXN0X2hvc3QsCisJCQkJCSBnYXRlcy0+Z2F0ZSwgZ2F0ZXMtPnBpcGUpOworCQlpZiAociA8IDApCisJCQlyZXR1cm4gcjsKKwkJZ2F0ZXMrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IG5jaV9oY2lfZGV2X3Nlc3Npb25faW5pdChzdHJ1Y3QgbmNpX2RldiAqbmRldikKK3sKKwlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAgICAqY29ubl9pbmZvOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHI7CisKKwluZGV2LT5oY2lfZGV2LT5jb3VudF9waXBlcyA9IDA7CisJbmRldi0+aGNpX2Rldi0+ZXhwZWN0ZWRfcGlwZXMgPSAwOworCisJY29ubl9pbmZvID0gbmRldi0+aGNpX2Rldi0+Y29ubl9pbmZvOworCWlmICghY29ubl9pbmZvKQorCQlyZXR1cm4gLUVQUk9UTzsKKworCWNvbm5faW5mby0+ZGF0YV9leGNoYW5nZV9jYiA9IG5jaV9oY2lfZGF0YV9yZWNlaXZlZF9jYjsKKwljb25uX2luZm8tPmRhdGFfZXhjaGFuZ2VfY2JfY29udGV4dCA9IG5kZXY7CisKKwluY2lfaGNpX3Jlc2V0X3BpcGVzKG5kZXYtPmhjaV9kZXYpOworCisJaWYgKG5kZXYtPmhjaV9kZXYtPmluaXRfZGF0YS5nYXRlc1swXS5nYXRlICE9IE5DSV9IQ0lfQURNSU5fR0FURSkKKwkJcmV0dXJuIC1FUFJPVE87CisKKwlyID0gbmNpX2hjaV9jb25uZWN0X2dhdGUobmRldiwKKwkJCQkgbmRldi0+aGNpX2Rldi0+aW5pdF9kYXRhLmdhdGVzWzBdLmRlc3RfaG9zdCwKKwkJCQkgbmRldi0+aGNpX2Rldi0+aW5pdF9kYXRhLmdhdGVzWzBdLmdhdGUsCisJCQkJIG5kZXYtPmhjaV9kZXYtPmluaXRfZGF0YS5nYXRlc1swXS5waXBlKTsKKwlpZiAociA8IDApCisJCWdvdG8gZXhpdDsKKworCXIgPSBuY2lfaGNpX2dldF9wYXJhbShuZGV2LCBOQ0lfSENJX0FETUlOX0dBVEUsCisJCQkgICAgICBOQ0lfSENJX0FETUlOX1BBUkFNX1NFU1NJT05fSURFTlRJVFksICZza2IpOworCWlmIChyIDwgMCkKKwkJZ290byBleGl0OworCisJaWYgKHNrYi0+bGVuICYmCisJICAgIHNrYi0+bGVuID09IHN0cmxlbihuZGV2LT5oY2lfZGV2LT5pbml0X2RhdGEuc2Vzc2lvbl9pZCkgJiYKKwkgICAgbWVtY21wKG5kZXYtPmhjaV9kZXYtPmluaXRfZGF0YS5zZXNzaW9uX2lkLAorCQkgICBza2ItPmRhdGEsIHNrYi0+bGVuKSA9PSAwICYmCisJICAgIG5kZXYtPm9wcy0+aGNpX2xvYWRfc2Vzc2lvbikgeworCQkvKiBSZXN0b3JlIGdhdGU8LT5waXBlIHRhYmxlIGZyb20gc29tZSBwcm9wcmlldGFyeSBsb2NhdGlvbi4gKi8KKwkJciA9IG5kZXYtPm9wcy0+aGNpX2xvYWRfc2Vzc2lvbihuZGV2KTsKKwkJaWYgKHIgPCAwKQorCQkJZ290byBleGl0OworCX0gZWxzZSB7CisJCXIgPSBuY2lfaGNpX2Rldl9jb25uZWN0X2dhdGVzKG5kZXYsCisJCQkJCSAgICAgIG5kZXYtPmhjaV9kZXYtPmluaXRfZGF0YS5nYXRlX2NvdW50LAorCQkJCQkgICAgICBuZGV2LT5oY2lfZGV2LT5pbml0X2RhdGEuZ2F0ZXMpOworCQlpZiAociA8IDApCisJCQlnb3RvIGV4aXQ7CisKKwkJciA9IG5jaV9oY2lfc2V0X3BhcmFtKG5kZXYsIE5DSV9IQ0lfQURNSU5fR0FURSwKKwkJCQkgICAgICBOQ0lfSENJX0FETUlOX1BBUkFNX1NFU1NJT05fSURFTlRJVFksCisJCQkJICAgICAgbmRldi0+aGNpX2Rldi0+aW5pdF9kYXRhLnNlc3Npb25faWQsCisJCQkJICAgICAgc3RybGVuKG5kZXYtPmhjaV9kZXYtPmluaXRfZGF0YS5zZXNzaW9uX2lkKSk7CisJfQorCWlmIChyID09IDApCisJCWdvdG8gZXhpdDsKKworZXhpdDoKKwlrZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiByOworfQorRVhQT1JUX1NZTUJPTChuY2lfaGNpX2Rldl9zZXNzaW9uX2luaXQpOworCitzdHJ1Y3QgbmNpX2hjaV9kZXYgKm5jaV9oY2lfYWxsb2NhdGUoc3RydWN0IG5jaV9kZXYgKm5kZXYpCit7CisJc3RydWN0IG5jaV9oY2lfZGV2ICpoZGV2OworCisJaGRldiA9IGt6YWxsb2Moc2l6ZW9mKCpoZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmhkZXYtPnJ4X2hjcF9mcmFncyk7CisJSU5JVF9XT1JLKCZoZGV2LT5tc2dfcnhfd29yaywgbmNpX2hjaV9tc2dfcnhfd29yayk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaGRldi0+bXNnX3J4X3F1ZXVlKTsKKwloZGV2LT5uZGV2ID0gbmRldjsKKworCXJldHVybiBoZGV2OworfQpkaWZmIC0tZ2l0IGEvbmV0L25mYy9uY2kvbnRmLmMgYi9uZXQvbmZjL25jaS9udGYuYwppbmRleCAyMmU0NTNjLi4zMjE4MDcxIDEwMDY0NAotLS0gYS9uZXQvbmZjL25jaS9udGYuYworKysgYi9uZXQvbmZjL25jaS9udGYuYwpAQCAtNDMsNiArNDMsNyBAQAogCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlZGl0X250ZiAqbnRmID0gKHZvaWQgKikgc2tiLT5kYXRhOworCXN0cnVjdCBuY2lfY29ubl9pbmZvCSpjb25uX2luZm87CiAJaW50IGk7CiAKIAlwcl9kZWJ1ZygibnVtX2VudHJpZXMgJWRcbiIsIG50Zi0+bnVtX2VudHJpZXMpOwpAQCAtNTksMTEgKzYwLDEzIEBACiAJCQkgaSwgbnRmLT5jb25uX2VudHJpZXNbaV0uY29ubl9pZCwKIAkJCSBudGYtPmNvbm5fZW50cmllc1tpXS5jcmVkaXRzKTsKIAotCQlpZiAobnRmLT5jb25uX2VudHJpZXNbaV0uY29ubl9pZCA9PSBOQ0lfU1RBVElDX1JGX0NPTk5fSUQpIHsKLQkJCS8qIGZvdW5kIHN0YXRpYyByZiBjb25uZWN0aW9uICovCi0JCQlhdG9taWNfYWRkKG50Zi0+Y29ubl9lbnRyaWVzW2ldLmNyZWRpdHMsCi0JCQkJICAgJm5kZXYtPmNyZWRpdHNfY250KTsKLQkJfQorCQljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsCisJCQkJCQkJIG50Zi0+Y29ubl9lbnRyaWVzW2ldLmNvbm5faWQpOworCQlpZiAoIWNvbm5faW5mbykKKwkJCXJldHVybjsKKworCQlhdG9taWNfYWRkKG50Zi0+Y29ubl9lbnRyaWVzW2ldLmNyZWRpdHMsCisJCQkgICAmY29ubl9pbmZvLT5jcmVkaXRzX2NudCk7CiAJfQogCiAJLyogdHJpZ2dlciB0aGUgbmV4dCB0eCAqLwpAQCAtOTYsNyArOTksNyBAQAogCiAJLyogY29tcGxldGUgdGhlIGRhdGEgZXhjaGFuZ2UgdHJhbnNhY3Rpb24sIGlmIGV4aXN0cyAqLwogCWlmICh0ZXN0X2JpdChOQ0lfREFUQV9FWENIQU5HRSwgJm5kZXYtPmZsYWdzKSkKLQkJbmNpX2RhdGFfZXhjaGFuZ2VfY29tcGxldGUobmRldiwgTlVMTCwgLUVJTyk7CisJCW5jaV9kYXRhX2V4Y2hhbmdlX2NvbXBsZXRlKG5kZXYsIE5VTEwsIG50Zi0+Y29ubl9pZCwgLUVJTyk7CiB9CiAKIHN0YXRpYyBfX3U4ICpuY2lfZXh0cmFjdF9yZl9wYXJhbXNfbmZjYV9wYXNzaXZlX3BvbGwoc3RydWN0IG5jaV9kZXYgKm5kZXYsCkBAIC01MTMsNiArNTE2LDcgQEAKIHN0YXRpYyB2b2lkIG5jaV9yZl9pbnRmX2FjdGl2YXRlZF9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LAogCQkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IG5jaV9jb25uX2luZm8gICAgKmNvbm5faW5mbzsKIAlzdHJ1Y3QgbmNpX3JmX2ludGZfYWN0aXZhdGVkX250ZiBudGY7CiAJX191OCAqZGF0YSA9IHNrYi0+ZGF0YTsKIAlpbnQgZXJyID0gTkNJX1NUQVRVU19PSzsKQEAgLTUzNyw2ICs1NDEsMTMgQEAKIAlwcl9kZWJ1ZygicmZfdGVjaF9zcGVjaWZpY19wYXJhbXNfbGVuICVkXG4iLAogCQkgbnRmLnJmX3RlY2hfc3BlY2lmaWNfcGFyYW1zX2xlbik7CiAKKwkvKiBJZiB0aGlzIGNvbnRhaW5zIGEgdmFsdWUgb2YgMHgwMCAoTkZDRUUgRGlyZWN0IFJGCisJICogSW50ZXJmYWNlKSB0aGVuIGFsbCBmb2xsb3dpbmcgcGFyYW1ldGVycyBTSEFMTCBjb250YWluIGEKKwkgKiB2YWx1ZSBvZiAwIGFuZCBTSEFMTCBiZSBpZ25vcmVkLgorCSAqLworCWlmIChudGYucmZfaW50ZXJmYWNlID09IE5DSV9SRl9JTlRFUkZBQ0VfTkZDRUVfRElSRUNUKQorCQlnb3RvIGxpc3RlbjsKKwogCWlmIChudGYucmZfdGVjaF9zcGVjaWZpY19wYXJhbXNfbGVuID4gMCkgewogCQlzd2l0Y2ggKG50Zi5hY3RpdmF0aW9uX3JmX3RlY2hfYW5kX21vZGUpIHsKIAkJY2FzZSBOQ0lfTkZDX0FfUEFTU0lWRV9QT0xMX01PREU6CkBAIC02MTQsMTEgKzYyNSwxNiBAQAogCiBleGl0OgogCWlmIChlcnIgPT0gTkNJX1NUQVRVU19PSykgewotCQluZGV2LT5tYXhfZGF0YV9wa3RfcGF5bG9hZF9zaXplID0gbnRmLm1heF9kYXRhX3BrdF9wYXlsb2FkX3NpemU7Ci0JCW5kZXYtPmluaXRpYWxfbnVtX2NyZWRpdHMgPSBudGYuaW5pdGlhbF9udW1fY3JlZGl0czsKKwkJY29ubl9pbmZvID0gbmRldi0+cmZfY29ubl9pbmZvOworCQlpZiAoIWNvbm5faW5mbykKKwkJCXJldHVybjsKKworCQljb25uX2luZm8tPm1heF9wa3RfcGF5bG9hZF9sZW4gPSBudGYubWF4X2RhdGFfcGt0X3BheWxvYWRfc2l6ZTsKKwkJY29ubl9pbmZvLT5pbml0aWFsX251bV9jcmVkaXRzID0gbnRmLmluaXRpYWxfbnVtX2NyZWRpdHM7CiAKIAkJLyogc2V0IHRoZSBhdmFpbGFibGUgY3JlZGl0cyB0byBpbml0aWFsIHZhbHVlICovCi0JCWF0b21pY19zZXQoJm5kZXYtPmNyZWRpdHNfY250LCBuZGV2LT5pbml0aWFsX251bV9jcmVkaXRzKTsKKwkJYXRvbWljX3NldCgmY29ubl9pbmZvLT5jcmVkaXRzX2NudCwKKwkJCSAgIGNvbm5faW5mby0+aW5pdGlhbF9udW1fY3JlZGl0cyk7CiAKIAkJLyogc3RvcmUgZ2VuZXJhbCBieXRlcyB0byBiZSByZXBvcnRlZCBsYXRlciBpbiBkZXBfbGlua191cCAqLwogCQlpZiAobnRmLnJmX2ludGVyZmFjZSA9PSBOQ0lfUkZfSU5URVJGQUNFX05GQ19ERVApIHsKQEAgLTY0Myw2ICs2NTksNyBAQAogCQkJbmNpX3JlcV9jb21wbGV0ZShuZGV2LCBlcnIpOwogCQl9CiAJfSBlbHNlIHsKK2xpc3RlbjoKIAkJLyogTGlzdGVuIG1vZGUgKi8KIAkJYXRvbWljX3NldCgmbmRldi0+c3RhdGUsIE5DSV9MSVNURU5fQUNUSVZFKTsKIAkJaWYgKGVyciA9PSBOQ0lfU1RBVFVTX09LICYmCkBAIC02NjEsMTAgKzY3OCwxNSBAQAogc3RhdGljIHZvaWQgbmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKIAkJCQkJIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IG5jaV9jb25uX2luZm8gICAgKmNvbm5faW5mbzsKIAlzdHJ1Y3QgbmNpX3JmX2RlYWN0aXZhdGVfbnRmICpudGYgPSAodm9pZCAqKSBza2ItPmRhdGE7CiAKIAlwcl9kZWJ1ZygiZW50cnksIHR5cGUgMHgleCwgcmVhc29uIDB4JXhcbiIsIG50Zi0+dHlwZSwgbnRmLT5yZWFzb24pOwogCisJY29ubl9pbmZvID0gbmRldi0+cmZfY29ubl9pbmZvOworCWlmICghY29ubl9pbmZvKQorCQlyZXR1cm47CisKIAkvKiBkcm9wIHR4IGRhdGEgcXVldWUgKi8KIAlza2JfcXVldWVfcHVyZ2UoJm5kZXYtPnR4X3EpOwogCkBAIC02NzYsNyArNjk4LDggQEAKIAogCS8qIGNvbXBsZXRlIHRoZSBkYXRhIGV4Y2hhbmdlIHRyYW5zYWN0aW9uLCBpZiBleGlzdHMgKi8KIAlpZiAodGVzdF9iaXQoTkNJX0RBVEFfRVhDSEFOR0UsICZuZGV2LT5mbGFncykpCi0JCW5jaV9kYXRhX2V4Y2hhbmdlX2NvbXBsZXRlKG5kZXYsIE5VTEwsIC1FSU8pOworCQluY2lfZGF0YV9leGNoYW5nZV9jb21wbGV0ZShuZGV2LCBOVUxMLCBOQ0lfU1RBVElDX1JGX0NPTk5fSUQsCisJCQkJCSAgIC1FSU8pOwogCiAJc3dpdGNoIChudGYtPnR5cGUpIHsKIAljYXNlIE5DSV9ERUFDVElWQVRFX1RZUEVfSURMRV9NT0RFOgpAQCAtNjk2LDYgKzcxOSwzMiBAQAogCW5jaV9yZXFfY29tcGxldGUobmRldiwgTkNJX1NUQVRVU19PSyk7CiB9CiAKK3N0YXRpYyB2b2lkIG5jaV9uZmNlZV9kaXNjb3Zlcl9udGZfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJdTggc3RhdHVzID0gTkNJX1NUQVRVU19PSzsKKwlzdHJ1Y3QgbmNpX25mY2VlX2Rpc2NvdmVyX250ZiAgICpuZmNlZV9udGYgPQorCQkJCShzdHJ1Y3QgbmNpX25mY2VlX2Rpc2NvdmVyX250ZiAqKXNrYi0+ZGF0YTsKKworCXByX2RlYnVnKCJcbiIpOworCisJLyogTkZDRm9ydW0gTkNJIDkuMi4xIEhDSSBOZXR3b3JrIFNwZWNpZmljIEhhbmRsaW5nCisJICogSWYgdGhlIE5GQ0Mgc3VwcG9ydHMgdGhlIEhDSSBOZXR3b3JrLCBpdCBTSEFMTCByZXR1cm4gb25lLAorCSAqIGFuZCBvbmx5IG9uZSwgTkZDRUVfRElTQ09WRVJfTlRGIHdpdGggYSBQcm90b2NvbCB0eXBlIG9mCisJICog4oCcSENJIEFjY2Vzc+KAnSwgZXZlbiBpZiB0aGUgSENJIE5ldHdvcmsgY29udGFpbnMgbXVsdGlwbGUgTkZDRUVzLgorCSAqLworCW5kZXYtPmhjaV9kZXYtPm5mY2VlX2lkID0gbmZjZWVfbnRmLT5uZmNlZV9pZDsKKwluZGV2LT5jdXJfaWQgPSBuZmNlZV9udGYtPm5mY2VlX2lkOworCisJbmNpX3JlcV9jb21wbGV0ZShuZGV2LCBzdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBuY2lfbmZjZWVfYWN0aW9uX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJcHJfZGVidWcoIlxuIik7Cit9CisKIHZvaWQgbmNpX250Zl9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJX191MTYgbnRmX29wY29kZSA9IG5jaV9vcGNvZGUoc2tiLT5kYXRhKTsKQEAgLTczNCw2ICs3ODMsMTQgQEAKIAkJbmNpX3JmX2RlYWN0aXZhdGVfbnRmX3BhY2tldChuZGV2LCBza2IpOwogCQlicmVhazsKIAorCWNhc2UgTkNJX09QX05GQ0VFX0RJU0NPVkVSX05URjoKKwkJbmNpX25mY2VlX2Rpc2NvdmVyX250Zl9wYWNrZXQobmRldiwgc2tiKTsKKwkJYnJlYWs7CisKKwljYXNlIE5DSV9PUF9SRl9ORkNFRV9BQ1RJT05fTlRGOgorCQluY2lfbmZjZWVfYWN0aW9uX250Zl9wYWNrZXQobmRldiwgc2tiKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlwcl9lcnIoInVua25vd24gbnRmIG9wY29kZSAweCV4XG4iLCBudGZfb3Bjb2RlKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvbmZjL25jaS9yc3AuYyBiL25ldC9uZmMvbmNpL3JzcC5jCmluZGV4IDA0MWRlNTEuLjAyNDg2YmMgMTAwNjQ0Ci0tLSBhL25ldC9uZmMvbmNpL3JzcC5jCisrKyBiL25ldC9uZmMvbmNpL3JzcC5jCkBAIC0xNDAsMTMgKzE0MCwzMSBAQAogCiBzdGF0aWMgdm9pZCBuY2lfcmZfZGlzY19yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCBuY2lfY29ubl9pbmZvICAgICpjb25uX2luZm87CiAJX191OCBzdGF0dXMgPSBza2ItPmRhdGFbMF07CiAKIAlwcl9kZWJ1Zygic3RhdHVzIDB4JXhcbiIsIHN0YXR1cyk7CiAKLQlpZiAoc3RhdHVzID09IE5DSV9TVEFUVVNfT0spCisJaWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7CiAJCWF0b21pY19zZXQoJm5kZXYtPnN0YXRlLCBOQ0lfRElTQ09WRVJZKTsKIAorCQljb25uX2luZm8gPSBuZGV2LT5yZl9jb25uX2luZm87CisJCWlmICghY29ubl9pbmZvKSB7CisJCQljb25uX2luZm8gPSBkZXZtX2t6YWxsb2MoJm5kZXYtPm5mY19kZXYtPmRldiwKKwkJCQkJCSBzaXplb2Yoc3RydWN0IG5jaV9jb25uX2luZm8pLAorCQkJCQkJIEdGUF9LRVJORUwpOworCQkJaWYgKCFjb25uX2luZm8pIHsKKwkJCQlzdGF0dXMgPSBOQ0lfU1RBVFVTX1JFSkVDVEVEOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJCWNvbm5faW5mby0+Y29ubl9pZCA9IE5DSV9TVEFUSUNfUkZfQ09OTl9JRDsKKwkJCUlOSVRfTElTVF9IRUFEKCZjb25uX2luZm8tPmxpc3QpOworCQkJbGlzdF9hZGQoJmNvbm5faW5mby0+bGlzdCwgJm5kZXYtPmNvbm5faW5mb19saXN0KTsKKwkJCW5kZXYtPnJmX2Nvbm5faW5mbyA9IGNvbm5faW5mbzsKKwkJfQorCX0KKworZXhpdDoKIAluY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7CiB9CiAKQEAgLTE3OCw2ICsxOTYsOTAgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIG5jaV9uZmNlZV9kaXNjb3Zlcl9yc3BfcGFja2V0KHN0cnVjdCBuY2lfZGV2ICpuZGV2LAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG5jaV9uZmNlZV9kaXNjb3Zlcl9yc3AgKmRpc2NvdmVyX3JzcDsKKworCWlmIChza2ItPmxlbiAhPSAyKSB7CisJCW5jaV9yZXFfY29tcGxldGUobmRldiwgTkNJX1NUQVRVU19ORkNFRV9QUk9UT0NPTF9FUlJPUik7CisJCXJldHVybjsKKwl9CisKKwlkaXNjb3Zlcl9yc3AgPSAoc3RydWN0IG5jaV9uZmNlZV9kaXNjb3Zlcl9yc3AgKilza2ItPmRhdGE7CisKKwlpZiAoZGlzY292ZXJfcnNwLT5zdGF0dXMgIT0gTkNJX1NUQVRVU19PSyB8fAorCSAgICBkaXNjb3Zlcl9yc3AtPm51bV9uZmNlZSA9PSAwKQorCQluY2lfcmVxX2NvbXBsZXRlKG5kZXYsIGRpc2NvdmVyX3JzcC0+c3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgbmNpX25mY2VlX21vZGVfc2V0X3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlfX3U4IHN0YXR1cyA9IHNrYi0+ZGF0YVswXTsKKworCXByX2RlYnVnKCJzdGF0dXMgMHgleFxuIiwgc3RhdHVzKTsKKwluY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcF9wYWNrZXQoc3RydWN0IG5jaV9kZXYgKm5kZXYsCisJCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCV9fdTggc3RhdHVzID0gc2tiLT5kYXRhWzBdOworCXN0cnVjdCBuY2lfY29ubl9pbmZvICpjb25uX2luZm87CisJc3RydWN0IG5jaV9jb3JlX2Nvbm5fY3JlYXRlX3JzcCAqcnNwOworCisJcHJfZGVidWcoInN0YXR1cyAweCV4XG4iLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cyA9PSBOQ0lfU1RBVFVTX09LKSB7CisJCXJzcCA9IChzdHJ1Y3QgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwICopc2tiLT5kYXRhOworCisJCWNvbm5faW5mbyA9IGRldm1fa3phbGxvYygmbmRldi0+bmZjX2Rldi0+ZGV2LAorCQkJCQkgc2l6ZW9mKCpjb25uX2luZm8pLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFjb25uX2luZm8pIHsKKwkJCXN0YXR1cyA9IE5DSV9TVEFUVVNfUkVKRUNURUQ7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQljb25uX2luZm8tPmlkID0gbmRldi0+Y3VyX2lkOworCQljb25uX2luZm8tPmNvbm5faWQgPSByc3AtPmNvbm5faWQ7CisKKwkJLyogTm90ZTogZGF0YV9leGNoYW5nZV9jYiBhbmQgZGF0YV9leGNoYW5nZV9jYl9jb250ZXh0IG5lZWQgdG8KKwkJICogYmUgc3BlY2lmeSBvdXQgb2YgbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldAorCQkgKi8KKworCQlJTklUX0xJU1RfSEVBRCgmY29ubl9pbmZvLT5saXN0KTsKKwkJbGlzdF9hZGQoJmNvbm5faW5mby0+bGlzdCwgJm5kZXYtPmNvbm5faW5mb19saXN0KTsKKworCQlpZiAobmRldi0+Y3VyX2lkID09IG5kZXYtPmhjaV9kZXYtPm5mY2VlX2lkKQorCQkJbmRldi0+aGNpX2Rldi0+Y29ubl9pbmZvID0gY29ubl9pbmZvOworCisJCWNvbm5faW5mby0+Y29ubl9pZCA9IHJzcC0+Y29ubl9pZDsKKwkJY29ubl9pbmZvLT5tYXhfcGt0X3BheWxvYWRfbGVuID0gcnNwLT5tYXhfY3RybF9wa3RfcGF5bG9hZF9sZW47CisJCWF0b21pY19zZXQoJmNvbm5faW5mby0+Y3JlZGl0c19jbnQsIHJzcC0+Y3JlZGl0c19jbnQpOworCX0KKworZXhpdDoKKwluY2lfcmVxX2NvbXBsZXRlKG5kZXYsIHN0YXR1cyk7Cit9CisKK3N0YXRpYyB2b2lkIG5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbmNpX2Nvbm5faW5mbyAqY29ubl9pbmZvOworCV9fdTggc3RhdHVzID0gc2tiLT5kYXRhWzBdOworCisJcHJfZGVidWcoInN0YXR1cyAweCV4XG4iLCBzdGF0dXMpOworCWlmIChzdGF0dXMgPT0gTkNJX1NUQVRVU19PSykgeworCQljb25uX2luZm8gPSBuY2lfZ2V0X2Nvbm5faW5mb19ieV9jb25uX2lkKG5kZXYsIG5kZXYtPmN1cl9pZCk7CisJCWlmIChjb25uX2luZm8pIHsKKwkJCWxpc3RfZGVsKCZjb25uX2luZm8tPmxpc3QpOworCQkJZGV2bV9rZnJlZSgmbmRldi0+bmZjX2Rldi0+ZGV2LCBjb25uX2luZm8pOworCQl9CisJfQorCW5jaV9yZXFfY29tcGxldGUobmRldiwgc3RhdHVzKTsKK30KKwogdm9pZCBuY2lfcnNwX3BhY2tldChzdHJ1Y3QgbmNpX2RldiAqbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlfX3UxNiByc3Bfb3Bjb2RlID0gbmNpX29wY29kZShza2ItPmRhdGEpOwpAQCAtMjA3LDYgKzMwOSwxNCBAQAogCQluY2lfY29yZV9zZXRfY29uZmlnX3JzcF9wYWNrZXQobmRldiwgc2tiKTsKIAkJYnJlYWs7CiAKKwljYXNlIE5DSV9PUF9DT1JFX0NPTk5fQ1JFQVRFX1JTUDoKKwkJbmNpX2NvcmVfY29ubl9jcmVhdGVfcnNwX3BhY2tldChuZGV2LCBza2IpOworCQlicmVhazsKKworCWNhc2UgTkNJX09QX0NPUkVfQ09OTl9DTE9TRV9SU1A6CisJCW5jaV9jb3JlX2Nvbm5fY2xvc2VfcnNwX3BhY2tldChuZGV2LCBza2IpOworCQlicmVhazsKKwogCWNhc2UgTkNJX09QX1JGX0RJU0NPVkVSX01BUF9SU1A6CiAJCW5jaV9yZl9kaXNjX21hcF9yc3BfcGFja2V0KG5kZXYsIHNrYik7CiAJCWJyZWFrOwpAQCAtMjIzLDYgKzMzMywxNCBAQAogCQluY2lfcmZfZGVhY3RpdmF0ZV9yc3BfcGFja2V0KG5kZXYsIHNrYik7CiAJCWJyZWFrOwogCisJY2FzZSBOQ0lfT1BfTkZDRUVfRElTQ09WRVJfUlNQOgorCQluY2lfbmZjZWVfZGlzY292ZXJfcnNwX3BhY2tldChuZGV2LCBza2IpOworCQlicmVhazsKKworCWNhc2UgTkNJX09QX05GQ0VFX01PREVfU0VUX1JTUDoKKwkJbmNpX25mY2VlX21vZGVfc2V0X3JzcF9wYWNrZXQobmRldiwgc2tiKTsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQlwcl9lcnIoInVua25vd24gcnNwIG9wY29kZSAweCV4XG4iLCByc3Bfb3Bjb2RlKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvbmZjL25ldGxpbmsuYyBiL25ldC9uZmMvbmV0bGluay5jCmluZGV4IDQ0OTg5ZmMuLjE0YTJkMTEgMTAwNjQ0Ci0tLSBhL25ldC9uZmMvbmV0bGluay5jCisrKyBiL25ldC9uZmMvbmV0bGluay5jCkBAIC0xMDIsNyArMTAyLDggQEAKIAkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCX0KIAotCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CisJZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOwpAQCAtNDk2LDYgKzQ5Nyw1MyBAQAogCXJldHVybiAtRU1TR1NJWkU7CiB9CiAKK2ludCBuZmNfZ2VubF9zZV90cmFuc2FjdGlvbihzdHJ1Y3QgbmZjX2RldiAqZGV2LCB1OCBzZV9pZHgsCisJCQkgICAgc3RydWN0IG5mY19ldnRfdHJhbnNhY3Rpb24gKmV2dF90cmFuc2FjdGlvbikKK3sKKwlzdHJ1Y3QgbmZjX3NlICpzZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXZvaWQgKmhkcjsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWhkciA9IGdlbmxtc2dfcHV0KG1zZywgMCwgMCwgJm5mY19nZW5sX2ZhbWlseSwgMCwKKwkJCSAgTkZDX0VWRU5UX1NFX1RSQU5TQUNUSU9OKTsKKwlpZiAoIWhkcikKKwkJZ290byBmcmVlX21zZzsKKworCXNlID0gbmZjX2ZpbmRfc2UoZGV2LCBzZV9pZHgpOworCWlmICghc2UpCisJCWdvdG8gZnJlZV9tc2c7CisKKwlpZiAobmxhX3B1dF91MzIobXNnLCBORkNfQVRUUl9ERVZJQ0VfSU5ERVgsIGRldi0+aWR4KSB8fAorCSAgICBubGFfcHV0X3UzMihtc2csIE5GQ19BVFRSX1NFX0lOREVYLCBzZV9pZHgpIHx8CisJICAgIG5sYV9wdXRfdTgobXNnLCBORkNfQVRUUl9TRV9UWVBFLCBzZS0+dHlwZSkgfHwKKwkgICAgbmxhX3B1dChtc2csIE5GQ19BVFRSX1NFX0FJRCwgZXZ0X3RyYW5zYWN0aW9uLT5haWRfbGVuLAorCQkgICAgZXZ0X3RyYW5zYWN0aW9uLT5haWQpIHx8CisJICAgIG5sYV9wdXQobXNnLCBORkNfQVRUUl9TRV9QQVJBTVMsIGV2dF90cmFuc2FjdGlvbi0+cGFyYW1zX2xlbiwKKwkJICAgIGV2dF90cmFuc2FjdGlvbi0+cGFyYW1zKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwkvKiBldnRfdHJhbnNhY3Rpb24gaXMgbm8gbW9yZSB1c2VkICovCisJZGV2bV9rZnJlZSgmZGV2LT5kZXYsIGV2dF90cmFuc2FjdGlvbik7CisKKwlnZW5sbXNnX2VuZChtc2csIGhkcik7CisKKwlnZW5sbXNnX211bHRpY2FzdCgmbmZjX2dlbmxfZmFtaWx5LCBtc2csIDAsIDAsIEdGUF9LRVJORUwpOworCisJcmV0dXJuIDA7CisKK25sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CitmcmVlX21zZzoKKwkvKiBldnRfdHJhbnNhY3Rpb24gaXMgbm8gbW9yZSB1c2VkICovCisJZGV2bV9rZnJlZSgmZGV2LT5kZXYsIGV2dF90cmFuc2FjdGlvbik7CisJbmxtc2dfZnJlZShtc2cpOworCXJldHVybiAtRU1TR1NJWkU7Cit9CisKIHN0YXRpYyBpbnQgbmZjX2dlbmxfc2VuZF9kZXZpY2Uoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IG5mY19kZXYgKmRldiwKIAkJCQl1MzIgcG9ydGlkLCB1MzIgc2VxLAogCQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKQEAgLTUxOCw3ICs1NjYsOCBAQAogCSAgICBubGFfcHV0X3U4KG1zZywgTkZDX0FUVFJfUkZfTU9ERSwgZGV2LT5yZl9tb2RlKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwlyZXR1cm4gMDsKIAogbmxhX3B1dF9mYWlsdXJlOgogCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKQEAgLTkwOCw3ICs5NTcsOCBAQAogCSAgICBubGFfcHV0X3UxNihtc2csIE5GQ19BVFRSX0xMQ19QQVJBTV9NSVVYLCBiZTE2X3RvX2NwdShsb2NhbC0+bWl1eCkpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CisJZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAKQEAgLTEyNDcsOCArMTI5Nyw3IEBACiAJCSAgICBubGFfcHV0X3U4KG1zZywgTkZDX0FUVFJfU0VfVFlQRSwgc2UtPnR5cGUpKQogCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQkJaWYgKGdlbmxtc2dfZW5kKG1zZywgaGRyKSA8IDApCi0JCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwkJZ2VubG1zZ19lbmQobXNnLCBoZHIpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L25mYy9uZmMuaCBiL25ldC9uZmMvbmZjLmgKaW5kZXggODhkNjAwNi4uYThjZTgwYiAxMDA2NDQKLS0tIGEvbmV0L25mYy9uZmMuaAorKysgYi9uZXQvbmZjL25mYy5oCkBAIC0xMDAsNiArMTAwLDggQEAKIAogaW50IG5mY19nZW5sX3NlX2FkZGVkKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHUzMiBzZV9pZHgsIHUxNiB0eXBlKTsKIGludCBuZmNfZ2VubF9zZV9yZW1vdmVkKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHUzMiBzZV9pZHgpOworaW50IG5mY19nZW5sX3NlX3RyYW5zYWN0aW9uKHN0cnVjdCBuZmNfZGV2ICpkZXYsIHU4IHNlX2lkeCwKKwkJCSAgICBzdHJ1Y3QgbmZjX2V2dF90cmFuc2FjdGlvbiAqZXZ0X3RyYW5zYWN0aW9uKTsKIAogc3RydWN0IG5mY19kZXYgKm5mY19nZXRfZGV2aWNlKHVuc2lnbmVkIGludCBpZHgpOwogCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jIGIvbmV0L29wZW52c3dpdGNoL2FjdGlvbnMuYwppbmRleCA3NzAwNjRjLi5iNDkxYzFjIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvYWN0aW9ucy5jCisrKyBiL25ldC9vcGVudnN3aXRjaC9hY3Rpb25zLmMKQEAgLTE4NSwxMCArMTg1LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X21wbHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksCi0JCSAgICBjb25zdCBfX2JlMzIgKm1wbHNfbHNlKQorLyogJ0tFWScgbXVzdCBub3QgaGF2ZSBhbnkgYml0cyBzZXQgb3V0c2lkZSBvZiB0aGUgJ01BU0snICovCisjZGVmaW5lIE1BU0tFRChPTEQsIEtFWSwgTUFTSykgKChLRVkpIHwgKChPTEQpICYgfihNQVNLKSkpCisjZGVmaW5lIFNFVF9NQVNLRUQoT0xELCBLRVksIE1BU0spICgoT0xEKSA9IE1BU0tFRChPTEQsIEtFWSwgTUFTSykpCisKK3N0YXRpYyBpbnQgc2V0X21wbHMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICpmbG93X2tleSwKKwkJICAgIGNvbnN0IF9fYmUzMiAqbXBsc19sc2UsIGNvbnN0IF9fYmUzMiAqbWFzaykKIHsKIAlfX2JlMzIgKnN0YWNrOworCV9fYmUzMiBsc2U7CiAJaW50IGVycjsKIAogCWVyciA9IHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBza2ItPm1hY19sZW4gKyBNUExTX0hMRU4pOwpAQCAtMTk2LDE0ICsyMDEsMTYgQEAKIAkJcmV0dXJuIGVycjsKIAogCXN0YWNrID0gKF9fYmUzMiAqKXNrYl9tcGxzX2hlYWRlcihza2IpOworCWxzZSA9IE1BU0tFRCgqc3RhY2ssICptcGxzX2xzZSwgKm1hc2spOwogCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9DT01QTEVURSkgewotCQlfX2JlMzIgZGlmZltdID0geyB+KCpzdGFjayksICptcGxzX2xzZSB9OworCQlfX2JlMzIgZGlmZltdID0geyB+KCpzdGFjayksIGxzZSB9OworCiAJCXNrYi0+Y3N1bSA9IH5jc3VtX3BhcnRpYWwoKGNoYXIgKilkaWZmLCBzaXplb2YoZGlmZiksCiAJCQkJCSAgfnNrYi0+Y3N1bSk7CiAJfQogCi0JKnN0YWNrID0gKm1wbHNfbHNlOwotCWtleS0+bXBscy50b3BfbHNlID0gKm1wbHNfbHNlOworCSpzdGFjayA9IGxzZTsKKwlmbG93X2tleS0+bXBscy50b3BfbHNlID0gbHNlOwogCXJldHVybiAwOwogfQogCkBAIC0yMTIsNyArMjE5LDcgQEAKIAlpbnQgZXJyOwogCiAJZXJyID0gc2tiX3ZsYW5fcG9wKHNrYik7Ci0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkKKwlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkKIAkJaW52YWxpZGF0ZV9mbG93X2tleShrZXkpOwogCWVsc2UKIAkJa2V5LT5ldGgudGNpID0gMDsKQEAgLTIyMiw3ICsyMjksNyBAQAogc3RhdGljIGludCBwdXNoX3ZsYW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksCiAJCSAgICAgY29uc3Qgc3RydWN0IG92c19hY3Rpb25fcHVzaF92bGFuICp2bGFuKQogewotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpCiAJCWludmFsaWRhdGVfZmxvd19rZXkoa2V5KTsKIAllbHNlCiAJCWtleS0+ZXRoLnRjaSA9IHZsYW4tPnZsYW5fdGNpOwpAQCAtMjMwLDIzICsyMzcsMzkgQEAKIAkJCSAgICAgbnRvaHModmxhbi0+dmxhbl90Y2kpICYgflZMQU5fVEFHX1BSRVNFTlQpOwogfQogCi1zdGF0aWMgaW50IHNldF9ldGhfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSwKLQkJCWNvbnN0IHN0cnVjdCBvdnNfa2V5X2V0aGVybmV0ICpldGhfa2V5KQorLyogJ3NyYycgaXMgYWxyZWFkeSBwcm9wZXJseSBtYXNrZWQuICovCitzdGF0aWMgdm9pZCBldGhlcl9hZGRyX2NvcHlfbWFza2VkKHU4ICpkc3RfLCBjb25zdCB1OCAqc3JjXywgY29uc3QgdTggKm1hc2tfKQoreworCXUxNiAqZHN0ID0gKHUxNiAqKWRzdF87CisJY29uc3QgdTE2ICpzcmMgPSAoY29uc3QgdTE2ICopc3JjXzsKKwljb25zdCB1MTYgKm1hc2sgPSAoY29uc3QgdTE2ICopbWFza187CisKKwlTRVRfTUFTS0VEKGRzdFswXSwgc3JjWzBdLCBtYXNrWzBdKTsKKwlTRVRfTUFTS0VEKGRzdFsxXSwgc3JjWzFdLCBtYXNrWzFdKTsKKwlTRVRfTUFTS0VEKGRzdFsyXSwgc3JjWzJdLCBtYXNrWzJdKTsKK30KKworc3RhdGljIGludCBzZXRfZXRoX2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICpmbG93X2tleSwKKwkJCWNvbnN0IHN0cnVjdCBvdnNfa2V5X2V0aGVybmV0ICprZXksCisJCQljb25zdCBzdHJ1Y3Qgb3ZzX2tleV9ldGhlcm5ldCAqbWFzaykKIHsKIAlpbnQgZXJyOworCiAJZXJyID0gc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIEVUSF9ITEVOKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKIAogCXNrYl9wb3N0cHVsbF9yY3N1bShza2IsIGV0aF9oZHIoc2tiKSwgRVRIX0FMRU4gKiAyKTsKIAotCWV0aGVyX2FkZHJfY29weShldGhfaGRyKHNrYiktPmhfc291cmNlLCBldGhfa2V5LT5ldGhfc3JjKTsKLQlldGhlcl9hZGRyX2NvcHkoZXRoX2hkcihza2IpLT5oX2Rlc3QsIGV0aF9rZXktPmV0aF9kc3QpOworCWV0aGVyX2FkZHJfY29weV9tYXNrZWQoZXRoX2hkcihza2IpLT5oX3NvdXJjZSwga2V5LT5ldGhfc3JjLAorCQkJICAgICAgIG1hc2stPmV0aF9zcmMpOworCWV0aGVyX2FkZHJfY29weV9tYXNrZWQoZXRoX2hkcihza2IpLT5oX2Rlc3QsIGtleS0+ZXRoX2RzdCwKKwkJCSAgICAgICBtYXNrLT5ldGhfZHN0KTsKIAogCW92c19za2JfcG9zdHB1c2hfcmNzdW0oc2tiLCBldGhfaGRyKHNrYiksIEVUSF9BTEVOICogMik7CiAKLQlldGhlcl9hZGRyX2NvcHkoa2V5LT5ldGguc3JjLCBldGhfa2V5LT5ldGhfc3JjKTsKLQlldGhlcl9hZGRyX2NvcHkoa2V5LT5ldGguZHN0LCBldGhfa2V5LT5ldGhfZHN0KTsKKwlldGhlcl9hZGRyX2NvcHkoZmxvd19rZXktPmV0aC5zcmMsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UpOworCWV0aGVyX2FkZHJfY29weShmbG93X2tleS0+ZXRoLmRzdCwgZXRoX2hkcihza2IpLT5oX2Rlc3QpOwogCXJldHVybiAwOwogfQogCkBAIC0zMDQsNiArMzI3LDE1IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBtYXNrX2lwdjZfYWRkcihjb25zdCBfX2JlMzIgb2xkWzRdLCBjb25zdCBfX2JlMzIgYWRkcls0XSwKKwkJCSAgIGNvbnN0IF9fYmUzMiBtYXNrWzRdLCBfX2JlMzIgbWFza2VkWzRdKQoreworCW1hc2tlZFswXSA9IE1BU0tFRChvbGRbMF0sIGFkZHJbMF0sIG1hc2tbMF0pOworCW1hc2tlZFsxXSA9IE1BU0tFRChvbGRbMV0sIGFkZHJbMV0sIG1hc2tbMV0pOworCW1hc2tlZFsyXSA9IE1BU0tFRChvbGRbMl0sIGFkZHJbMl0sIG1hc2tbMl0pOworCW1hc2tlZFszXSA9IE1BU0tFRChvbGRbM10sIGFkZHJbM10sIG1hc2tbM10pOworfQorCiBzdGF0aWMgdm9pZCBzZXRfaXB2Nl9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHU4IGw0X3Byb3RvLAogCQkJICBfX2JlMzIgYWRkcls0XSwgY29uc3QgX19iZTMyIG5ld19hZGRyWzRdLAogCQkJICBib29sIHJlY2FsY3VsYXRlX2NzdW0pCkBAIC0zMTUsMjkgKzM0NywyOSBAQAogCW1lbWNweShhZGRyLCBuZXdfYWRkciwgc2l6ZW9mKF9fYmUzMls0XSkpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfaXB2Nl90YyhzdHJ1Y3QgaXB2NmhkciAqbmgsIHU4IHRjKQorc3RhdGljIHZvaWQgc2V0X2lwdjZfZmwoc3RydWN0IGlwdjZoZHIgKm5oLCB1MzIgZmwsIHUzMiBtYXNrKQogewotCW5oLT5wcmlvcml0eSA9IHRjID4+IDQ7Ci0JbmgtPmZsb3dfbGJsWzBdID0gKG5oLT5mbG93X2xibFswXSAmIDB4MEYpIHwgKCh0YyAmIDB4MEYpIDw8IDQpOworCS8qIEJpdHMgMjEtMjQgYXJlIGFsd2F5cyB1bm1hc2tlZCwgc28gdGhpcyByZXRhaW5zIHRoZWlyIHZhbHVlcy4gKi8KKwlTRVRfTUFTS0VEKG5oLT5mbG93X2xibFswXSwgKHU4KShmbCA+PiAxNiksICh1OCkobWFzayA+PiAxNikpOworCVNFVF9NQVNLRUQobmgtPmZsb3dfbGJsWzFdLCAodTgpKGZsID4+IDgpLCAodTgpKG1hc2sgPj4gOCkpOworCVNFVF9NQVNLRUQobmgtPmZsb3dfbGJsWzJdLCAodTgpZmwsICh1OCltYXNrKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0X2lwdjZfZmwoc3RydWN0IGlwdjZoZHIgKm5oLCB1MzIgZmwpCitzdGF0aWMgdm9pZCBzZXRfaXBfdHRsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcGhkciAqbmgsIHU4IG5ld190dGwsCisJCSAgICAgICB1OCBtYXNrKQogewotCW5oLT5mbG93X2xibFswXSA9IChuaC0+Zmxvd19sYmxbMF0gJiAweEYwKSB8IChmbCAmIDB4MDAwRjAwMDApID4+IDE2OwotCW5oLT5mbG93X2xibFsxXSA9IChmbCAmIDB4MDAwMEZGMDApID4+IDg7Ci0JbmgtPmZsb3dfbGJsWzJdID0gZmwgJiAweDAwMDAwMEZGOwotfQorCW5ld190dGwgPSBNQVNLRUQobmgtPnR0bCwgbmV3X3R0bCwgbWFzayk7CiAKLXN0YXRpYyB2b2lkIHNldF9pcF90dGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwaGRyICpuaCwgdTggbmV3X3R0bCkKLXsKIAljc3VtX3JlcGxhY2UyKCZuaC0+Y2hlY2ssIGh0b25zKG5oLT50dGwgPDwgOCksIGh0b25zKG5ld190dGwgPDwgOCkpOwogCW5oLT50dGwgPSBuZXdfdHRsOwogfQogCi1zdGF0aWMgaW50IHNldF9pcHY0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LAotCQkgICAgY29uc3Qgc3RydWN0IG92c19rZXlfaXB2NCAqaXB2NF9rZXkpCitzdGF0aWMgaW50IHNldF9pcHY0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqZmxvd19rZXksCisJCSAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2tleV9pcHY0ICprZXksCisJCSAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2tleV9pcHY0ICptYXNrKQogewogCXN0cnVjdCBpcGhkciAqbmg7CisJX19iZTMyIG5ld19hZGRyOwogCWludCBlcnI7CiAKIAllcnIgPSBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgKwpAQCAtMzQ3LDM2ICszNzksNDkgQEAKIAogCW5oID0gaXBfaGRyKHNrYik7CiAKLQlpZiAoaXB2NF9rZXktPmlwdjRfc3JjICE9IG5oLT5zYWRkcikgewotCQlzZXRfaXBfYWRkcihza2IsIG5oLCAmbmgtPnNhZGRyLCBpcHY0X2tleS0+aXB2NF9zcmMpOwotCQlrZXktPmlwdjQuYWRkci5zcmMgPSBpcHY0X2tleS0+aXB2NF9zcmM7Ci0JfQorCS8qIFNldHRpbmcgYW4gSVAgYWRkcmVzc2VzIGlzIHR5cGljYWxseSBvbmx5IGEgc2lkZSBlZmZlY3Qgb2YKKwkgKiBtYXRjaGluZyBvbiB0aGVtIGluIHRoZSBjdXJyZW50IHVzZXJzcGFjZSBpbXBsZW1lbnRhdGlvbiwgc28gaXQKKwkgKiBtYWtlcyBzZW5zZSB0byBjaGVjayBpZiB0aGUgdmFsdWUgYWN0dWFsbHkgY2hhbmdlZC4KKwkgKi8KKwlpZiAobWFzay0+aXB2NF9zcmMpIHsKKwkJbmV3X2FkZHIgPSBNQVNLRUQobmgtPnNhZGRyLCBrZXktPmlwdjRfc3JjLCBtYXNrLT5pcHY0X3NyYyk7CiAKLQlpZiAoaXB2NF9rZXktPmlwdjRfZHN0ICE9IG5oLT5kYWRkcikgewotCQlzZXRfaXBfYWRkcihza2IsIG5oLCAmbmgtPmRhZGRyLCBpcHY0X2tleS0+aXB2NF9kc3QpOwotCQlrZXktPmlwdjQuYWRkci5kc3QgPSBpcHY0X2tleS0+aXB2NF9kc3Q7CisJCWlmICh1bmxpa2VseShuZXdfYWRkciAhPSBuaC0+c2FkZHIpKSB7CisJCQlzZXRfaXBfYWRkcihza2IsIG5oLCAmbmgtPnNhZGRyLCBuZXdfYWRkcik7CisJCQlmbG93X2tleS0+aXB2NC5hZGRyLnNyYyA9IG5ld19hZGRyOworCQl9CiAJfQorCWlmIChtYXNrLT5pcHY0X2RzdCkgeworCQluZXdfYWRkciA9IE1BU0tFRChuaC0+ZGFkZHIsIGtleS0+aXB2NF9kc3QsIG1hc2stPmlwdjRfZHN0KTsKIAotCWlmIChpcHY0X2tleS0+aXB2NF90b3MgIT0gbmgtPnRvcykgewotCQlpcHY0X2NoYW5nZV9kc2ZpZWxkKG5oLCAwLCBpcHY0X2tleS0+aXB2NF90b3MpOwotCQlrZXktPmlwLnRvcyA9IG5oLT50b3M7CisJCWlmICh1bmxpa2VseShuZXdfYWRkciAhPSBuaC0+ZGFkZHIpKSB7CisJCQlzZXRfaXBfYWRkcihza2IsIG5oLCAmbmgtPmRhZGRyLCBuZXdfYWRkcik7CisJCQlmbG93X2tleS0+aXB2NC5hZGRyLmRzdCA9IG5ld19hZGRyOworCQl9CiAJfQotCi0JaWYgKGlwdjRfa2V5LT5pcHY0X3R0bCAhPSBuaC0+dHRsKSB7Ci0JCXNldF9pcF90dGwoc2tiLCBuaCwgaXB2NF9rZXktPmlwdjRfdHRsKTsKLQkJa2V5LT5pcC50dGwgPSBpcHY0X2tleS0+aXB2NF90dGw7CisJaWYgKG1hc2stPmlwdjRfdG9zKSB7CisJCWlwdjRfY2hhbmdlX2RzZmllbGQobmgsIH5tYXNrLT5pcHY0X3Rvcywga2V5LT5pcHY0X3Rvcyk7CisJCWZsb3dfa2V5LT5pcC50b3MgPSBuaC0+dG9zOworCX0KKwlpZiAobWFzay0+aXB2NF90dGwpIHsKKwkJc2V0X2lwX3R0bChza2IsIG5oLCBrZXktPmlwdjRfdHRsLCBtYXNrLT5pcHY0X3R0bCk7CisJCWZsb3dfa2V5LT5pcC50dGwgPSBuaC0+dHRsOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNldF9pcHY2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LAotCQkgICAgY29uc3Qgc3RydWN0IG92c19rZXlfaXB2NiAqaXB2Nl9rZXkpCitzdGF0aWMgYm9vbCBpc19pcHY2X21hc2tfbm9uemVybyhjb25zdCBfX2JlMzIgYWRkcls0XSkKK3sKKwlyZXR1cm4gISEoYWRkclswXSB8IGFkZHJbMV0gfCBhZGRyWzJdIHwgYWRkclszXSk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2lwdjYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICpmbG93X2tleSwKKwkJICAgIGNvbnN0IHN0cnVjdCBvdnNfa2V5X2lwdjYgKmtleSwKKwkJICAgIGNvbnN0IHN0cnVjdCBvdnNfa2V5X2lwdjYgKm1hc2spCiB7CiAJc3RydWN0IGlwdjZoZHIgKm5oOwogCWludCBlcnI7Ci0JX19iZTMyICpzYWRkcjsKLQlfX2JlMzIgKmRhZGRyOwogCiAJZXJyID0gc2tiX2Vuc3VyZV93cml0YWJsZShza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpICsKIAkJCQkgIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpOwpAQCAtMzg0LDcxICs0MjksNzcgQEAKIAkJcmV0dXJuIGVycjsKIAogCW5oID0gaXB2Nl9oZHIoc2tiKTsKLQlzYWRkciA9IChfX2JlMzIgKikmbmgtPnNhZGRyOwotCWRhZGRyID0gKF9fYmUzMiAqKSZuaC0+ZGFkZHI7CiAKLQlpZiAobWVtY21wKGlwdjZfa2V5LT5pcHY2X3NyYywgc2FkZHIsIHNpemVvZihpcHY2X2tleS0+aXB2Nl9zcmMpKSkgewotCQlzZXRfaXB2Nl9hZGRyKHNrYiwgaXB2Nl9rZXktPmlwdjZfcHJvdG8sIHNhZGRyLAotCQkJICAgICAgaXB2Nl9rZXktPmlwdjZfc3JjLCB0cnVlKTsKLQkJbWVtY3B5KCZrZXktPmlwdjYuYWRkci5zcmMsIGlwdjZfa2V5LT5pcHY2X3NyYywKLQkJICAgICAgIHNpemVvZihpcHY2X2tleS0+aXB2Nl9zcmMpKTsKKwkvKiBTZXR0aW5nIGFuIElQIGFkZHJlc3NlcyBpcyB0eXBpY2FsbHkgb25seSBhIHNpZGUgZWZmZWN0IG9mCisJICogbWF0Y2hpbmcgb24gdGhlbSBpbiB0aGUgY3VycmVudCB1c2Vyc3BhY2UgaW1wbGVtZW50YXRpb24sIHNvIGl0CisJICogbWFrZXMgc2Vuc2UgdG8gY2hlY2sgaWYgdGhlIHZhbHVlIGFjdHVhbGx5IGNoYW5nZWQuCisJICovCisJaWYgKGlzX2lwdjZfbWFza19ub256ZXJvKG1hc2stPmlwdjZfc3JjKSkgeworCQlfX2JlMzIgKnNhZGRyID0gKF9fYmUzMiAqKSZuaC0+c2FkZHI7CisJCV9fYmUzMiBtYXNrZWRbNF07CisKKwkJbWFza19pcHY2X2FkZHIoc2FkZHIsIGtleS0+aXB2Nl9zcmMsIG1hc2stPmlwdjZfc3JjLCBtYXNrZWQpOworCisJCWlmICh1bmxpa2VseShtZW1jbXAoc2FkZHIsIG1hc2tlZCwgc2l6ZW9mKG1hc2tlZCkpKSkgeworCQkJc2V0X2lwdjZfYWRkcihza2IsIGtleS0+aXB2Nl9wcm90bywgc2FkZHIsIG1hc2tlZCwKKwkJCQkgICAgICB0cnVlKTsKKwkJCW1lbWNweSgmZmxvd19rZXktPmlwdjYuYWRkci5zcmMsIG1hc2tlZCwKKwkJCSAgICAgICBzaXplb2YoZmxvd19rZXktPmlwdjYuYWRkci5zcmMpKTsKKwkJfQogCX0KLQotCWlmIChtZW1jbXAoaXB2Nl9rZXktPmlwdjZfZHN0LCBkYWRkciwgc2l6ZW9mKGlwdjZfa2V5LT5pcHY2X2RzdCkpKSB7CisJaWYgKGlzX2lwdjZfbWFza19ub256ZXJvKG1hc2stPmlwdjZfZHN0KSkgewogCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gMDsKIAkJaW50IGZsYWdzID0gSVA2X0ZIX0ZfU0tJUF9SSDsKIAkJYm9vbCByZWNhbGNfY3N1bSA9IHRydWU7CisJCV9fYmUzMiAqZGFkZHIgPSAoX19iZTMyICopJm5oLT5kYWRkcjsKKwkJX19iZTMyIG1hc2tlZFs0XTsKIAotCQlpZiAoaXB2Nl9leHRfaGRyKG5oLT5uZXh0aGRyKSkKLQkJCXJlY2FsY19jc3VtID0gaXB2Nl9maW5kX2hkcihza2IsICZvZmZzZXQsCi0JCQkJCQkgICAgTkVYVEhEUl9ST1VUSU5HLCBOVUxMLAotCQkJCQkJICAgICZmbGFncykgIT0gTkVYVEhEUl9ST1VUSU5HOworCQltYXNrX2lwdjZfYWRkcihkYWRkciwga2V5LT5pcHY2X2RzdCwgbWFzay0+aXB2Nl9kc3QsIG1hc2tlZCk7CiAKLQkJc2V0X2lwdjZfYWRkcihza2IsIGlwdjZfa2V5LT5pcHY2X3Byb3RvLCBkYWRkciwKLQkJCSAgICAgIGlwdjZfa2V5LT5pcHY2X2RzdCwgcmVjYWxjX2NzdW0pOwotCQltZW1jcHkoJmtleS0+aXB2Ni5hZGRyLmRzdCwgaXB2Nl9rZXktPmlwdjZfZHN0LAotCQkgICAgICAgc2l6ZW9mKGlwdjZfa2V5LT5pcHY2X2RzdCkpOworCQlpZiAodW5saWtlbHkobWVtY21wKGRhZGRyLCBtYXNrZWQsIHNpemVvZihtYXNrZWQpKSkpIHsKKwkJCWlmIChpcHY2X2V4dF9oZHIobmgtPm5leHRoZHIpKQorCQkJCXJlY2FsY19jc3VtID0gKGlwdjZfZmluZF9oZHIoc2tiLCAmb2Zmc2V0LAorCQkJCQkJCSAgICAgTkVYVEhEUl9ST1VUSU5HLAorCQkJCQkJCSAgICAgTlVMTCwgJmZsYWdzKQorCQkJCQkgICAgICAgIT0gTkVYVEhEUl9ST1VUSU5HKTsKKworCQkJc2V0X2lwdjZfYWRkcihza2IsIGtleS0+aXB2Nl9wcm90bywgZGFkZHIsIG1hc2tlZCwKKwkJCQkgICAgICByZWNhbGNfY3N1bSk7CisJCQltZW1jcHkoJmZsb3dfa2V5LT5pcHY2LmFkZHIuZHN0LCBtYXNrZWQsCisJCQkgICAgICAgc2l6ZW9mKGZsb3dfa2V5LT5pcHY2LmFkZHIuZHN0KSk7CisJCX0KIAl9Ci0KLQlzZXRfaXB2Nl90YyhuaCwgaXB2Nl9rZXktPmlwdjZfdGNsYXNzKTsKLQlrZXktPmlwLnRvcyA9IGlwdjZfZ2V0X2RzZmllbGQobmgpOwotCi0Jc2V0X2lwdjZfZmwobmgsIG50b2hsKGlwdjZfa2V5LT5pcHY2X2xhYmVsKSk7Ci0Ja2V5LT5pcHY2LmxhYmVsID0gKihfX2JlMzIgKiluaCAmIGh0b25sKElQVjZfRkxPV0lORk9fRkxPV0xBQkVMKTsKLQotCW5oLT5ob3BfbGltaXQgPSBpcHY2X2tleS0+aXB2Nl9obGltaXQ7Ci0Ja2V5LT5pcC50dGwgPSBpcHY2X2tleS0+aXB2Nl9obGltaXQ7CisJaWYgKG1hc2stPmlwdjZfdGNsYXNzKSB7CisJCWlwdjZfY2hhbmdlX2RzZmllbGQobmgsIH5tYXNrLT5pcHY2X3RjbGFzcywga2V5LT5pcHY2X3RjbGFzcyk7CisJCWZsb3dfa2V5LT5pcC50b3MgPSBpcHY2X2dldF9kc2ZpZWxkKG5oKTsKKwl9CisJaWYgKG1hc2stPmlwdjZfbGFiZWwpIHsKKwkJc2V0X2lwdjZfZmwobmgsIG50b2hsKGtleS0+aXB2Nl9sYWJlbCksCisJCQkgICAgbnRvaGwobWFzay0+aXB2Nl9sYWJlbCkpOworCQlmbG93X2tleS0+aXB2Ni5sYWJlbCA9CisJCSAgICAqKF9fYmUzMiAqKW5oICYgaHRvbmwoSVBWNl9GTE9XSU5GT19GTE9XTEFCRUwpOworCX0KKwlpZiAobWFzay0+aXB2Nl9obGltaXQpIHsKKwkJU0VUX01BU0tFRChuaC0+aG9wX2xpbWl0LCBrZXktPmlwdjZfaGxpbWl0LCBtYXNrLT5pcHY2X2hsaW1pdCk7CisJCWZsb3dfa2V5LT5pcC50dGwgPSBuaC0+aG9wX2xpbWl0OworCX0KIAlyZXR1cm4gMDsKIH0KIAogLyogTXVzdCBmb2xsb3cgc2tiX2Vuc3VyZV93cml0YWJsZSgpIHNpbmNlIHRoYXQgY2FuIG1vdmUgdGhlIHNrYiBkYXRhLiAqLwogc3RhdGljIHZvaWQgc2V0X3RwX3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2ICpwb3J0LAotCQkJIF9fYmUxNiBuZXdfcG9ydCwgX19zdW0xNiAqY2hlY2spCisJCQlfX2JlMTYgbmV3X3BvcnQsIF9fc3VtMTYgKmNoZWNrKQogewogCWluZXRfcHJvdG9fY3N1bV9yZXBsYWNlMihjaGVjaywgc2tiLCAqcG9ydCwgbmV3X3BvcnQsIDApOwogCSpwb3J0ID0gbmV3X3BvcnQ7Ci0Jc2tiX2NsZWFyX2hhc2goc2tiKTsKIH0KIAotc3RhdGljIHZvaWQgc2V0X3VkcF9wb3J0KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcG9ydCwgX19iZTE2IG5ld19wb3J0KQotewotCXN0cnVjdCB1ZHBoZHIgKnVoID0gdWRwX2hkcihza2IpOwotCi0JaWYgKHVoLT5jaGVjayAmJiBza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKSB7Ci0JCXNldF90cF9wb3J0KHNrYiwgcG9ydCwgbmV3X3BvcnQsICZ1aC0+Y2hlY2spOwotCi0JCWlmICghdWgtPmNoZWNrKQotCQkJdWgtPmNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7Ci0JfSBlbHNlIHsKLQkJKnBvcnQgPSBuZXdfcG9ydDsKLQkJc2tiX2NsZWFyX2hhc2goc2tiKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X3VkcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSwKLQkJICAgY29uc3Qgc3RydWN0IG92c19rZXlfdWRwICp1ZHBfcG9ydF9rZXkpCitzdGF0aWMgaW50IHNldF91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICpmbG93X2tleSwKKwkJICAgY29uc3Qgc3RydWN0IG92c19rZXlfdWRwICprZXksCisJCSAgIGNvbnN0IHN0cnVjdCBvdnNfa2V5X3VkcCAqbWFzaykKIHsKIAlzdHJ1Y3QgdWRwaGRyICp1aDsKKwlfX2JlMTYgc3JjLCBkc3Q7CiAJaW50IGVycjsKIAogCWVyciA9IHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsKQEAgLTQ1NywyMyArNTA4LDQwIEBACiAJCXJldHVybiBlcnI7CiAKIAl1aCA9IHVkcF9oZHIoc2tiKTsKLQlpZiAodWRwX3BvcnRfa2V5LT51ZHBfc3JjICE9IHVoLT5zb3VyY2UpIHsKLQkJc2V0X3VkcF9wb3J0KHNrYiwgJnVoLT5zb3VyY2UsIHVkcF9wb3J0X2tleS0+dWRwX3NyYyk7Ci0JCWtleS0+dHAuc3JjID0gdWRwX3BvcnRfa2V5LT51ZHBfc3JjOworCS8qIEVpdGhlciBvZiB0aGUgbWFza3MgaXMgbm9uLXplcm8sIHNvIGRvIG5vdCBib3RoZXIgY2hlY2tpbmcgdGhlbS4gKi8KKwlzcmMgPSBNQVNLRUQodWgtPnNvdXJjZSwga2V5LT51ZHBfc3JjLCBtYXNrLT51ZHBfc3JjKTsKKwlkc3QgPSBNQVNLRUQodWgtPmRlc3QsIGtleS0+dWRwX2RzdCwgbWFzay0+dWRwX2RzdCk7CisKKwlpZiAodWgtPmNoZWNrICYmIHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJaWYgKGxpa2VseShzcmMgIT0gdWgtPnNvdXJjZSkpIHsKKwkJCXNldF90cF9wb3J0KHNrYiwgJnVoLT5zb3VyY2UsIHNyYywgJnVoLT5jaGVjayk7CisJCQlmbG93X2tleS0+dHAuc3JjID0gc3JjOworCQl9CisJCWlmIChsaWtlbHkoZHN0ICE9IHVoLT5kZXN0KSkgeworCQkJc2V0X3RwX3BvcnQoc2tiLCAmdWgtPmRlc3QsIGRzdCwgJnVoLT5jaGVjayk7CisJCQlmbG93X2tleS0+dHAuZHN0ID0gZHN0OworCQl9CisKKwkJaWYgKHVubGlrZWx5KCF1aC0+Y2hlY2spKQorCQkJdWgtPmNoZWNrID0gQ1NVTV9NQU5HTEVEXzA7CisJfSBlbHNlIHsKKwkJdWgtPnNvdXJjZSA9IHNyYzsKKwkJdWgtPmRlc3QgPSBkc3Q7CisJCWZsb3dfa2V5LT50cC5zcmMgPSBzcmM7CisJCWZsb3dfa2V5LT50cC5kc3QgPSBkc3Q7CiAJfQogCi0JaWYgKHVkcF9wb3J0X2tleS0+dWRwX2RzdCAhPSB1aC0+ZGVzdCkgewotCQlzZXRfdWRwX3BvcnQoc2tiLCAmdWgtPmRlc3QsIHVkcF9wb3J0X2tleS0+dWRwX2RzdCk7Ci0JCWtleS0+dHAuZHN0ID0gdWRwX3BvcnRfa2V5LT51ZHBfZHN0OwotCX0KKwlza2JfY2xlYXJfaGFzaChza2IpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X3RjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSwKLQkJICAgY29uc3Qgc3RydWN0IG92c19rZXlfdGNwICp0Y3BfcG9ydF9rZXkpCitzdGF0aWMgaW50IHNldF90Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICpmbG93X2tleSwKKwkJICAgY29uc3Qgc3RydWN0IG92c19rZXlfdGNwICprZXksCisJCSAgIGNvbnN0IHN0cnVjdCBvdnNfa2V5X3RjcCAqbWFzaykKIHsKIAlzdHJ1Y3QgdGNwaGRyICp0aDsKKwlfX2JlMTYgc3JjLCBkc3Q7CiAJaW50IGVycjsKIAogCWVyciA9IHNrYl9lbnN1cmVfd3JpdGFibGUoc2tiLCBza2JfdHJhbnNwb3J0X29mZnNldChza2IpICsKQEAgLTQ4Miw1MCArNTUwLDQ5IEBACiAJCXJldHVybiBlcnI7CiAKIAl0aCA9IHRjcF9oZHIoc2tiKTsKLQlpZiAodGNwX3BvcnRfa2V5LT50Y3Bfc3JjICE9IHRoLT5zb3VyY2UpIHsKLQkJc2V0X3RwX3BvcnQoc2tiLCAmdGgtPnNvdXJjZSwgdGNwX3BvcnRfa2V5LT50Y3Bfc3JjLCAmdGgtPmNoZWNrKTsKLQkJa2V5LT50cC5zcmMgPSB0Y3BfcG9ydF9rZXktPnRjcF9zcmM7CisJc3JjID0gTUFTS0VEKHRoLT5zb3VyY2UsIGtleS0+dGNwX3NyYywgbWFzay0+dGNwX3NyYyk7CisJaWYgKGxpa2VseShzcmMgIT0gdGgtPnNvdXJjZSkpIHsKKwkJc2V0X3RwX3BvcnQoc2tiLCAmdGgtPnNvdXJjZSwgc3JjLCAmdGgtPmNoZWNrKTsKKwkJZmxvd19rZXktPnRwLnNyYyA9IHNyYzsKIAl9Ci0KLQlpZiAodGNwX3BvcnRfa2V5LT50Y3BfZHN0ICE9IHRoLT5kZXN0KSB7Ci0JCXNldF90cF9wb3J0KHNrYiwgJnRoLT5kZXN0LCB0Y3BfcG9ydF9rZXktPnRjcF9kc3QsICZ0aC0+Y2hlY2spOwotCQlrZXktPnRwLmRzdCA9IHRjcF9wb3J0X2tleS0+dGNwX2RzdDsKKwlkc3QgPSBNQVNLRUQodGgtPmRlc3QsIGtleS0+dGNwX2RzdCwgbWFzay0+dGNwX2RzdCk7CisJaWYgKGxpa2VseShkc3QgIT0gdGgtPmRlc3QpKSB7CisJCXNldF90cF9wb3J0KHNrYiwgJnRoLT5kZXN0LCBkc3QsICZ0aC0+Y2hlY2spOworCQlmbG93X2tleS0+dHAuZHN0ID0gZHN0OwogCX0KKwlza2JfY2xlYXJfaGFzaChza2IpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X3NjdHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksCi0JCSAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2tleV9zY3RwICpzY3RwX3BvcnRfa2V5KQorc3RhdGljIGludCBzZXRfc2N0cChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmZsb3dfa2V5LAorCQkgICAgY29uc3Qgc3RydWN0IG92c19rZXlfc2N0cCAqa2V5LAorCQkgICAgY29uc3Qgc3RydWN0IG92c19rZXlfc2N0cCAqbWFzaykKIHsKLQlzdHJ1Y3Qgc2N0cGhkciAqc2g7Ci0JaW50IGVycjsKIAl1bnNpZ25lZCBpbnQgc2N0cGhvZmYgPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCXN0cnVjdCBzY3RwaGRyICpzaDsKKwlfX2xlMzIgb2xkX2NvcnJlY3RfY3N1bSwgbmV3X2NzdW0sIG9sZF9jc3VtOworCWludCBlcnI7CiAKIAllcnIgPSBza2JfZW5zdXJlX3dyaXRhYmxlKHNrYiwgc2N0cGhvZmYgKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKIAogCXNoID0gc2N0cF9oZHIoc2tiKTsKLQlpZiAoc2N0cF9wb3J0X2tleS0+c2N0cF9zcmMgIT0gc2gtPnNvdXJjZSB8fAotCSAgICBzY3RwX3BvcnRfa2V5LT5zY3RwX2RzdCAhPSBzaC0+ZGVzdCkgewotCQlfX2xlMzIgb2xkX2NvcnJlY3RfY3N1bSwgbmV3X2NzdW0sIG9sZF9jc3VtOworCW9sZF9jc3VtID0gc2gtPmNoZWNrc3VtOworCW9sZF9jb3JyZWN0X2NzdW0gPSBzY3RwX2NvbXB1dGVfY2tzdW0oc2tiLCBzY3RwaG9mZik7CiAKLQkJb2xkX2NzdW0gPSBzaC0+Y2hlY2tzdW07Ci0JCW9sZF9jb3JyZWN0X2NzdW0gPSBzY3RwX2NvbXB1dGVfY2tzdW0oc2tiLCBzY3RwaG9mZik7CisJc2gtPnNvdXJjZSA9IE1BU0tFRChzaC0+c291cmNlLCBrZXktPnNjdHBfc3JjLCBtYXNrLT5zY3RwX3NyYyk7CisJc2gtPmRlc3QgPSBNQVNLRUQoc2gtPmRlc3QsIGtleS0+c2N0cF9kc3QsIG1hc2stPnNjdHBfZHN0KTsKIAotCQlzaC0+c291cmNlID0gc2N0cF9wb3J0X2tleS0+c2N0cF9zcmM7Ci0JCXNoLT5kZXN0ID0gc2N0cF9wb3J0X2tleS0+c2N0cF9kc3Q7CisJbmV3X2NzdW0gPSBzY3RwX2NvbXB1dGVfY2tzdW0oc2tiLCBzY3RwaG9mZik7CiAKLQkJbmV3X2NzdW0gPSBzY3RwX2NvbXB1dGVfY2tzdW0oc2tiLCBzY3RwaG9mZik7CisJLyogQ2FycnkgYW55IGNoZWNrc3VtIGVycm9ycyB0aHJvdWdoLiAqLworCXNoLT5jaGVja3N1bSA9IG9sZF9jc3VtIF4gb2xkX2NvcnJlY3RfY3N1bSBeIG5ld19jc3VtOwogCi0JCS8qIENhcnJ5IGFueSBjaGVja3N1bSBlcnJvcnMgdGhyb3VnaC4gKi8KLQkJc2gtPmNoZWNrc3VtID0gb2xkX2NzdW0gXiBvbGRfY29ycmVjdF9jc3VtIF4gbmV3X2NzdW07Ci0KLQkJc2tiX2NsZWFyX2hhc2goc2tiKTsKLQkJa2V5LT50cC5zcmMgPSBzY3RwX3BvcnRfa2V5LT5zY3RwX3NyYzsKLQkJa2V5LT50cC5kc3QgPSBzY3RwX3BvcnRfa2V5LT5zY3RwX2RzdDsKLQl9CisJc2tiX2NsZWFyX2hhc2goc2tiKTsKKwlmbG93X2tleS0+dHAuc3JjID0gc2gtPnNvdXJjZTsKKwlmbG93X2tleS0+dHAuZHN0ID0gc2gtPmRlc3Q7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY1Myw1MiArNzIwLDc3IEBACiAJa2V5LT5vdnNfZmxvd19oYXNoID0gaGFzaDsKIH0KIAotc3RhdGljIGludCBleGVjdXRlX3NldF9hY3Rpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksCi0JCQkgICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICpuZXN0ZWRfYXR0cikKK3N0YXRpYyBpbnQgZXhlY3V0ZV9zZXRfYWN0aW9uKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmZsb3dfa2V5LAorCQkJICAgICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqYSkKK3sKKwkvKiBPbmx5IHR1bm5lbCBzZXQgZXhlY3V0aW9uIGlzIHN1cHBvcnRlZCB3aXRob3V0IGEgbWFzay4gKi8KKwlpZiAobmxhX3R5cGUoYSkgPT0gT1ZTX0tFWV9BVFRSX1RVTk5FTF9JTkZPKSB7CisJCU9WU19DQihza2IpLT5lZ3Jlc3NfdHVuX2luZm8gPSBubGFfZGF0YShhKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIE1hc2sgaXMgYXQgdGhlIG1pZHBvaW50IG9mIHRoZSBkYXRhLiAqLworI2RlZmluZSBnZXRfbWFzayhhLCB0eXBlKSAoKGNvbnN0IHR5cGUpbmxhX2RhdGEoYSkgKyAxKQorCitzdGF0aWMgaW50IGV4ZWN1dGVfbWFza2VkX3NldF9hY3Rpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCBzd19mbG93X2tleSAqZmxvd19rZXksCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmxhdHRyICphKQogewogCWludCBlcnIgPSAwOwogCi0Jc3dpdGNoIChubGFfdHlwZShuZXN0ZWRfYXR0cikpIHsKKwlzd2l0Y2ggKG5sYV90eXBlKGEpKSB7CiAJY2FzZSBPVlNfS0VZX0FUVFJfUFJJT1JJVFk6Ci0JCXNrYi0+cHJpb3JpdHkgPSBubGFfZ2V0X3UzMihuZXN0ZWRfYXR0cik7Ci0JCWtleS0+cGh5LnByaW9yaXR5ID0gc2tiLT5wcmlvcml0eTsKKwkJU0VUX01BU0tFRChza2ItPnByaW9yaXR5LCBubGFfZ2V0X3UzMihhKSwgKmdldF9tYXNrKGEsIHUzMiAqKSk7CisJCWZsb3dfa2V5LT5waHkucHJpb3JpdHkgPSBza2ItPnByaW9yaXR5OwogCQlicmVhazsKIAogCWNhc2UgT1ZTX0tFWV9BVFRSX1NLQl9NQVJLOgotCQlza2ItPm1hcmsgPSBubGFfZ2V0X3UzMihuZXN0ZWRfYXR0cik7Ci0JCWtleS0+cGh5LnNrYl9tYXJrID0gc2tiLT5tYXJrOworCQlTRVRfTUFTS0VEKHNrYi0+bWFyaywgbmxhX2dldF91MzIoYSksICpnZXRfbWFzayhhLCB1MzIgKikpOworCQlmbG93X2tleS0+cGh5LnNrYl9tYXJrID0gc2tiLT5tYXJrOwogCQlicmVhazsKIAogCWNhc2UgT1ZTX0tFWV9BVFRSX1RVTk5FTF9JTkZPOgotCQlPVlNfQ0Ioc2tiKS0+ZWdyZXNzX3R1bl9pbmZvID0gbmxhX2RhdGEobmVzdGVkX2F0dHIpOworCQkvKiBNYXNrZWQgZGF0YSBub3Qgc3VwcG9ydGVkIGZvciB0dW5uZWwuICovCisJCWVyciA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCiAJY2FzZSBPVlNfS0VZX0FUVFJfRVRIRVJORVQ6Ci0JCWVyciA9IHNldF9ldGhfYWRkcihza2IsIGtleSwgbmxhX2RhdGEobmVzdGVkX2F0dHIpKTsKKwkJZXJyID0gc2V0X2V0aF9hZGRyKHNrYiwgZmxvd19rZXksIG5sYV9kYXRhKGEpLAorCQkJCSAgIGdldF9tYXNrKGEsIHN0cnVjdCBvdnNfa2V5X2V0aGVybmV0ICopKTsKIAkJYnJlYWs7CiAKIAljYXNlIE9WU19LRVlfQVRUUl9JUFY0OgotCQllcnIgPSBzZXRfaXB2NChza2IsIGtleSwgbmxhX2RhdGEobmVzdGVkX2F0dHIpKTsKKwkJZXJyID0gc2V0X2lwdjQoc2tiLCBmbG93X2tleSwgbmxhX2RhdGEoYSksCisJCQkgICAgICAgZ2V0X21hc2soYSwgc3RydWN0IG92c19rZXlfaXB2NCAqKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBPVlNfS0VZX0FUVFJfSVBWNjoKLQkJZXJyID0gc2V0X2lwdjYoc2tiLCBrZXksIG5sYV9kYXRhKG5lc3RlZF9hdHRyKSk7CisJCWVyciA9IHNldF9pcHY2KHNrYiwgZmxvd19rZXksIG5sYV9kYXRhKGEpLAorCQkJICAgICAgIGdldF9tYXNrKGEsIHN0cnVjdCBvdnNfa2V5X2lwdjYgKikpOwogCQlicmVhazsKIAogCWNhc2UgT1ZTX0tFWV9BVFRSX1RDUDoKLQkJZXJyID0gc2V0X3RjcChza2IsIGtleSwgbmxhX2RhdGEobmVzdGVkX2F0dHIpKTsKKwkJZXJyID0gc2V0X3RjcChza2IsIGZsb3dfa2V5LCBubGFfZGF0YShhKSwKKwkJCSAgICAgIGdldF9tYXNrKGEsIHN0cnVjdCBvdnNfa2V5X3RjcCAqKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBPVlNfS0VZX0FUVFJfVURQOgotCQllcnIgPSBzZXRfdWRwKHNrYiwga2V5LCBubGFfZGF0YShuZXN0ZWRfYXR0cikpOworCQllcnIgPSBzZXRfdWRwKHNrYiwgZmxvd19rZXksIG5sYV9kYXRhKGEpLAorCQkJICAgICAgZ2V0X21hc2soYSwgc3RydWN0IG92c19rZXlfdWRwICopKTsKIAkJYnJlYWs7CiAKIAljYXNlIE9WU19LRVlfQVRUUl9TQ1RQOgotCQllcnIgPSBzZXRfc2N0cChza2IsIGtleSwgbmxhX2RhdGEobmVzdGVkX2F0dHIpKTsKKwkJZXJyID0gc2V0X3NjdHAoc2tiLCBmbG93X2tleSwgbmxhX2RhdGEoYSksCisJCQkgICAgICAgZ2V0X21hc2soYSwgc3RydWN0IG92c19rZXlfc2N0cCAqKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBPVlNfS0VZX0FUVFJfTVBMUzoKLQkJZXJyID0gc2V0X21wbHMoc2tiLCBrZXksIG5sYV9kYXRhKG5lc3RlZF9hdHRyKSk7CisJCWVyciA9IHNldF9tcGxzKHNrYiwgZmxvd19rZXksIG5sYV9kYXRhKGEpLCBnZXRfbWFzayhhLAorCQkJCQkJCQkgICAgX19iZTMyICopKTsKIAkJYnJlYWs7CiAJfQogCkBAIC04MTgsNiArOTEwLDExIEBACiAJCQllcnIgPSBleGVjdXRlX3NldF9hY3Rpb24oc2tiLCBrZXksIG5sYV9kYXRhKGEpKTsKIAkJCWJyZWFrOwogCisJCWNhc2UgT1ZTX0FDVElPTl9BVFRSX1NFVF9NQVNLRUQ6CisJCWNhc2UgT1ZTX0FDVElPTl9BVFRSX1NFVF9UT19NQVNLRUQ6CisJCQllcnIgPSBleGVjdXRlX21hc2tlZF9zZXRfYWN0aW9uKHNrYiwga2V5LCBubGFfZGF0YShhKSk7CisJCQlicmVhazsKKwogCQljYXNlIE9WU19BQ1RJT05fQVRUUl9TQU1QTEU6CiAJCQllcnIgPSBzYW1wbGUoZHAsIHNrYiwga2V5LCBhKTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwppbmRleCBiMDczNDllLi5hZTVlNzdjIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYwpAQCAtNjUsNiArNjUsOCBAQAogc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBkcF9mbG93X2dlbmxfZmFtaWx5Owogc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBkcF9kYXRhcGF0aF9nZW5sX2ZhbWlseTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZsb3dfcG9saWN5W107CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgb3ZzX2RwX2Zsb3dfbXVsdGljYXN0X2dyb3VwID0gewogCS5uYW1lID0gT1ZTX0ZMT1dfTUNHUk9VUCwKIH07CkBAIC00MTksNyArNDIxLDcgQEAKIAlpZiAoIWRwX2lmaW5kZXgpCiAJCXJldHVybiAtRU5PREVWOwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CiAJCW5za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFuc2tiKQogCQkJcmV0dXJuIC1FTk9NRU07CkBAIC00NjEsMTAgKzQ2Myw4IEBACiAJCQkgICAgIDAsIHVwY2FsbF9pbmZvLT5jbWQpOwogCXVwY2FsbC0+ZHBfaWZpbmRleCA9IGRwX2lmaW5kZXg7CiAKLQlubGEgPSBubGFfbmVzdF9zdGFydCh1c2VyX3NrYiwgT1ZTX1BBQ0tFVF9BVFRSX0tFWSk7Ci0JZXJyID0gb3ZzX25sYV9wdXRfZmxvdyhrZXksIGtleSwgdXNlcl9za2IpOworCWVyciA9IG92c19ubGFfcHV0X2tleShrZXksIGtleSwgT1ZTX1BBQ0tFVF9BVFRSX0tFWSwgZmFsc2UsIHVzZXJfc2tiKTsKIAlCVUdfT04oZXJyKTsKLQlubGFfbmVzdF9lbmQodXNlcl9za2IsIG5sYSk7CiAKIAlpZiAodXBjYWxsX2luZm8tPnVzZXJkYXRhKQogCQlfX25sYV9wdXQodXNlcl9za2IsIE9WU19QQUNLRVRfQVRUUl9VU0VSREFUQSwKQEAgLTY2NCw0NiArNjY0LDQ4IEBACiAJfQogfQogCi1zdGF0aWMgc2l6ZV90IG92c19mbG93X2NtZF9tc2dfc2l6ZShjb25zdCBzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICphY3RzKQorc3RhdGljIGJvb2wgc2hvdWxkX2ZpbGxfa2V5KGNvbnN0IHN0cnVjdCBzd19mbG93X2lkICpzZmlkLCB1aW50MzJfdCB1ZmlkX2ZsYWdzKQogewotCXJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IG92c19oZWFkZXIpKQotCQkrIG5sYV90b3RhbF9zaXplKG92c19rZXlfYXR0cl9zaXplKCkpIC8qIE9WU19GTE9XX0FUVFJfS0VZICovCi0JCSsgbmxhX3RvdGFsX3NpemUob3ZzX2tleV9hdHRyX3NpemUoKSkgLyogT1ZTX0ZMT1dfQVRUUl9NQVNLICovCi0JCSsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBvdnNfZmxvd19zdGF0cykpIC8qIE9WU19GTE9XX0FUVFJfU1RBVFMgKi8KLQkJKyBubGFfdG90YWxfc2l6ZSgxKSAvKiBPVlNfRkxPV19BVFRSX1RDUF9GTEFHUyAqLwotCQkrIG5sYV90b3RhbF9zaXplKDgpIC8qIE9WU19GTE9XX0FUVFJfVVNFRCAqLwotCQkrIG5sYV90b3RhbF9zaXplKGFjdHMtPmFjdGlvbnNfbGVuKTsgLyogT1ZTX0ZMT1dfQVRUUl9BQ1RJT05TICovCisJcmV0dXJuIG92c19pZGVudGlmaWVyX2lzX3VmaWQoc2ZpZCkgJiYKKwkgICAgICAgISh1ZmlkX2ZsYWdzICYgT1ZTX1VGSURfRl9PTUlUX0tFWSk7CiB9CiAKLS8qIENhbGxlZCB3aXRoIG92c19tdXRleCBvciBSQ1UgcmVhZCBsb2NrLiAqLwotc3RhdGljIGludCBvdnNfZmxvd19jbWRfZmlsbF9tYXRjaChjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywKLQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGJvb2wgc2hvdWxkX2ZpbGxfbWFzayh1aW50MzJfdCB1ZmlkX2ZsYWdzKQogewotCXN0cnVjdCBubGF0dHIgKm5sYTsKLQlpbnQgZXJyOworCXJldHVybiAhKHVmaWRfZmxhZ3MgJiBPVlNfVUZJRF9GX09NSVRfTUFTSyk7Cit9CiAKLQkvKiBGaWxsIGZsb3cga2V5LiAqLwotCW5sYSA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgT1ZTX0ZMT1dfQVRUUl9LRVkpOwotCWlmICghbmxhKQotCQlyZXR1cm4gLUVNU0dTSVpFOworc3RhdGljIGJvb2wgc2hvdWxkX2ZpbGxfYWN0aW9ucyh1aW50MzJfdCB1ZmlkX2ZsYWdzKQoreworCXJldHVybiAhKHVmaWRfZmxhZ3MgJiBPVlNfVUZJRF9GX09NSVRfQUNUSU9OUyk7Cit9CiAKLQllcnIgPSBvdnNfbmxhX3B1dF9mbG93KCZmbG93LT51bm1hc2tlZF9rZXksICZmbG93LT51bm1hc2tlZF9rZXksIHNrYik7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKK3N0YXRpYyBzaXplX3Qgb3ZzX2Zsb3dfY21kX21zZ19zaXplKGNvbnN0IHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKmFjdHMsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2lkICpzZmlkLAorCQkJCSAgICB1aW50MzJfdCB1ZmlkX2ZsYWdzKQoreworCXNpemVfdCBsZW4gPSBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IG92c19oZWFkZXIpKTsKIAotCW5sYV9uZXN0X2VuZChza2IsIG5sYSk7CisJLyogT1ZTX0ZMT1dfQVRUUl9VRklEICovCisJaWYgKHNmaWQgJiYgb3ZzX2lkZW50aWZpZXJfaXNfdWZpZChzZmlkKSkKKwkJbGVuICs9IG5sYV90b3RhbF9zaXplKHNmaWQtPnVmaWRfbGVuKTsKIAotCS8qIEZpbGwgZmxvdyBtYXNrLiAqLwotCW5sYSA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgT1ZTX0ZMT1dfQVRUUl9NQVNLKTsKLQlpZiAoIW5sYSkKLQkJcmV0dXJuIC1FTVNHU0laRTsKKwkvKiBPVlNfRkxPV19BVFRSX0tFWSAqLworCWlmICghc2ZpZCB8fCBzaG91bGRfZmlsbF9rZXkoc2ZpZCwgdWZpZF9mbGFncykpCisJCWxlbiArPSBubGFfdG90YWxfc2l6ZShvdnNfa2V5X2F0dHJfc2l6ZSgpKTsKIAotCWVyciA9IG92c19ubGFfcHV0X2Zsb3coJmZsb3ctPmtleSwgJmZsb3ctPm1hc2stPmtleSwgc2tiKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCS8qIE9WU19GTE9XX0FUVFJfTUFTSyAqLworCWlmIChzaG91bGRfZmlsbF9tYXNrKHVmaWRfZmxhZ3MpKQorCQlsZW4gKz0gbmxhX3RvdGFsX3NpemUob3ZzX2tleV9hdHRyX3NpemUoKSk7CiAKLQlubGFfbmVzdF9lbmQoc2tiLCBubGEpOwotCXJldHVybiAwOworCS8qIE9WU19GTE9XX0FUVFJfQUNUSU9OUyAqLworCWlmIChzaG91bGRfZmlsbF9hY3Rpb25zKHVmaWRfZmxhZ3MpKQorCQlsZW4gKz0gbmxhX3RvdGFsX3NpemUoYWN0cy0+YWN0aW9uc19sZW4pOworCisJcmV0dXJuIGxlbgorCQkrIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3Qgb3ZzX2Zsb3dfc3RhdHMpKSAvKiBPVlNfRkxPV19BVFRSX1NUQVRTICovCisJCSsgbmxhX3RvdGFsX3NpemUoMSkgLyogT1ZTX0ZMT1dfQVRUUl9UQ1BfRkxBR1MgKi8KKwkJKyBubGFfdG90YWxfc2l6ZSg4KTsgLyogT1ZTX0ZMT1dfQVRUUl9VU0VEICovCiB9CiAKIC8qIENhbGxlZCB3aXRoIG92c19tdXRleCBvciBSQ1UgcmVhZCBsb2NrLiAqLwpAQCAtNzc0LDcgKzc3Niw3IEBACiAvKiBDYWxsZWQgd2l0aCBvdnNfbXV0ZXggb3IgUkNVIHJlYWQgbG9jay4gKi8KIHN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgaW50IGRwX2lmaW5kZXgsCiAJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcG9ydGlkLAotCQkJCSAgdTMyIHNlcSwgdTMyIGZsYWdzLCB1OCBjbWQpCisJCQkJICB1MzIgc2VxLCB1MzIgZmxhZ3MsIHU4IGNtZCwgdTMyIHVmaWRfZmxhZ3MpCiB7CiAJY29uc3QgaW50IHNrYl9vcmlnX2xlbiA9IHNrYi0+bGVuOwogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfaGVhZGVyOwpAQCAtNzg3LDE5ICs3ODksMzQgQEAKIAogCW92c19oZWFkZXItPmRwX2lmaW5kZXggPSBkcF9pZmluZGV4OwogCi0JZXJyID0gb3ZzX2Zsb3dfY21kX2ZpbGxfbWF0Y2goZmxvdywgc2tiKTsKKwllcnIgPSBvdnNfbmxhX3B1dF9pZGVudGlmaWVyKGZsb3csIHNrYik7CiAJaWYgKGVycikKIAkJZ290byBlcnJvcjsKIAorCWlmIChzaG91bGRfZmlsbF9rZXkoJmZsb3ctPmlkLCB1ZmlkX2ZsYWdzKSkgeworCQllcnIgPSBvdnNfbmxhX3B1dF9tYXNrZWRfa2V5KGZsb3csIHNrYik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycm9yOworCX0KKworCWlmIChzaG91bGRfZmlsbF9tYXNrKHVmaWRfZmxhZ3MpKSB7CisJCWVyciA9IG92c19ubGFfcHV0X21hc2soZmxvdywgc2tiKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyb3I7CisJfQorCiAJZXJyID0gb3ZzX2Zsb3dfY21kX2ZpbGxfc3RhdHMoZmxvdywgc2tiKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwogCi0JZXJyID0gb3ZzX2Zsb3dfY21kX2ZpbGxfYWN0aW9ucyhmbG93LCBza2IsIHNrYl9vcmlnX2xlbik7Ci0JaWYgKGVycikKLQkJZ290byBlcnJvcjsKKwlpZiAoc2hvdWxkX2ZpbGxfYWN0aW9ucyh1ZmlkX2ZsYWdzKSkgeworCQllcnIgPSBvdnNfZmxvd19jbWRfZmlsbF9hY3Rpb25zKGZsb3csIHNrYiwgc2tiX29yaWdfbGVuKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyb3I7CisJfQogCi0JcmV0dXJuIGdlbmxtc2dfZW5kKHNrYiwgb3ZzX2hlYWRlcik7CisJZ2VubG1zZ19lbmQoc2tiLCBvdnNfaGVhZGVyKTsKKwlyZXR1cm4gMDsKIAogZXJyb3I6CiAJZ2VubG1zZ19jYW5jZWwoc2tiLCBvdnNfaGVhZGVyKTsKQEAgLTgwOCwxNSArODI1LDE5IEBACiAKIC8qIE1heSBub3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jay4gKi8KIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqb3ZzX2Zsb3dfY21kX2FsbG9jX2luZm8oY29uc3Qgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqYWN0cywKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2lkICpzZmlkLAogCQkJCQkgICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKLQkJCQkJICAgICAgIGJvb2wgYWx3YXlzKQorCQkJCQkgICAgICAgYm9vbCBhbHdheXMsCisJCQkJCSAgICAgICB1aW50MzJfdCB1ZmlkX2ZsYWdzKQogewogCXN0cnVjdCBza19idWZmICpza2I7CisJc2l6ZV90IGxlbjsKIAogCWlmICghYWx3YXlzICYmICFvdnNfbXVzdF9ub3RpZnkoJmRwX2Zsb3dfZ2VubF9mYW1pbHksIGluZm8sIDApKQogCQlyZXR1cm4gTlVMTDsKIAotCXNrYiA9IGdlbmxtc2dfbmV3X3VuaWNhc3Qob3ZzX2Zsb3dfY21kX21zZ19zaXplKGFjdHMpLCBpbmZvLCBHRlBfS0VSTkVMKTsKKwlsZW4gPSBvdnNfZmxvd19jbWRfbXNnX3NpemUoYWN0cywgc2ZpZCwgdWZpZF9mbGFncyk7CisJc2tiID0gZ2VubG1zZ19uZXdfdW5pY2FzdChsZW4sIGluZm8sIEdGUF9LRVJORUwpOwogCWlmICghc2tiKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIApAQCAtODI3LDE5ICs4NDgsMTkgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqb3ZzX2Zsb3dfY21kX2J1aWxkX2luZm8oY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csCiAJCQkJCSAgICAgICBpbnQgZHBfaWZpbmRleCwKIAkJCQkJICAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHU4IGNtZCwKLQkJCQkJICAgICAgIGJvb2wgYWx3YXlzKQorCQkJCQkgICAgICAgYm9vbCBhbHdheXMsIHUzMiB1ZmlkX2ZsYWdzKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IHJldHZhbDsKIAotCXNrYiA9IG92c19mbG93X2NtZF9hbGxvY19pbmZvKG92c2xfZGVyZWZlcmVuY2UoZmxvdy0+c2ZfYWN0cyksIGluZm8sCi0JCQkJICAgICAgYWx3YXlzKTsKKwlza2IgPSBvdnNfZmxvd19jbWRfYWxsb2NfaW5mbyhvdnNsX2RlcmVmZXJlbmNlKGZsb3ctPnNmX2FjdHMpLAorCQkJCSAgICAgICZmbG93LT5pZCwgaW5mbywgYWx3YXlzLCB1ZmlkX2ZsYWdzKTsKIAlpZiAoSVNfRVJSX09SX05VTEwoc2tiKSkKIAkJcmV0dXJuIHNrYjsKIAogCXJldHZhbCA9IG92c19mbG93X2NtZF9maWxsX2luZm8oZmxvdywgZHBfaWZpbmRleCwgc2tiLAogCQkJCQlpbmZvLT5zbmRfcG9ydGlkLCBpbmZvLT5zbmRfc2VxLCAwLAotCQkJCQljbWQpOworCQkJCQljbWQsIHVmaWRfZmxhZ3MpOwogCUJVR19PTihyZXR2YWwgPCAwKTsKIAlyZXR1cm4gc2tiOwogfQpAQCAtODQ4LDEyICs4NjksMTQgQEAKIHsKIAlzdHJ1Y3QgbmxhdHRyICoqYSA9IGluZm8tPmF0dHJzOwogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfaGVhZGVyID0gaW5mby0+dXNlcmhkcjsKLQlzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgKm5ld19mbG93OworCXN0cnVjdCBzd19mbG93ICpmbG93ID0gTlVMTCwgKm5ld19mbG93OwogCXN0cnVjdCBzd19mbG93X21hc2sgbWFzazsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7CiAJc3RydWN0IGRhdGFwYXRoICpkcDsKKwlzdHJ1Y3Qgc3dfZmxvd19rZXkga2V5OwogCXN0cnVjdCBzd19mbG93X2FjdGlvbnMgKmFjdHM7CiAJc3RydWN0IHN3X2Zsb3dfbWF0Y2ggbWF0Y2g7CisJdTMyIHVmaWRfZmxhZ3MgPSBvdnNfbmxhX2dldF91ZmlkX2ZsYWdzKGFbT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTXSk7CiAJaW50IGVycm9yOwogCWJvb2wgbG9nID0gIWFbT1ZTX0ZMT1dfQVRUUl9QUk9CRV07CiAKQEAgLTg3OCwxMyArOTAxLDE5IEBACiAJfQogCiAJLyogRXh0cmFjdCBrZXkuICovCi0Jb3ZzX21hdGNoX2luaXQoJm1hdGNoLCAmbmV3X2Zsb3ctPnVubWFza2VkX2tleSwgJm1hc2spOworCW92c19tYXRjaF9pbml0KCZtYXRjaCwgJmtleSwgJm1hc2spOwogCWVycm9yID0gb3ZzX25sYV9nZXRfbWF0Y2goJm1hdGNoLCBhW09WU19GTE9XX0FUVFJfS0VZXSwKIAkJCQkgIGFbT1ZTX0ZMT1dfQVRUUl9NQVNLXSwgbG9nKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyX2tmcmVlX2Zsb3c7CiAKLQlvdnNfZmxvd19tYXNrX2tleSgmbmV3X2Zsb3ctPmtleSwgJm5ld19mbG93LT51bm1hc2tlZF9rZXksICZtYXNrKTsKKwlvdnNfZmxvd19tYXNrX2tleSgmbmV3X2Zsb3ctPmtleSwgJmtleSwgJm1hc2spOworCisJLyogRXh0cmFjdCBmbG93IGlkZW50aWZpZXIuICovCisJZXJyb3IgPSBvdnNfbmxhX2dldF9pZGVudGlmaWVyKCZuZXdfZmxvdy0+aWQsIGFbT1ZTX0ZMT1dfQVRUUl9VRklEXSwKKwkJCQkgICAgICAgJmtleSwgbG9nKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyX2tmcmVlX2Zsb3c7CiAKIAkvKiBWYWxpZGF0ZSBhY3Rpb25zLiAqLwogCWVycm9yID0gb3ZzX25sYV9jb3B5X2FjdGlvbnMoYVtPVlNfRkxPV19BVFRSX0FDVElPTlNdLCAmbmV3X2Zsb3ctPmtleSwKQEAgLTg5NCw3ICs5MjMsOCBAQAogCQlnb3RvIGVycl9rZnJlZV9mbG93OwogCX0KIAotCXJlcGx5ID0gb3ZzX2Zsb3dfY21kX2FsbG9jX2luZm8oYWN0cywgaW5mbywgZmFsc2UpOworCXJlcGx5ID0gb3ZzX2Zsb3dfY21kX2FsbG9jX2luZm8oYWN0cywgJm5ld19mbG93LT5pZCwgaW5mbywgZmFsc2UsCisJCQkJCXVmaWRfZmxhZ3MpOwogCWlmIChJU19FUlIocmVwbHkpKSB7CiAJCWVycm9yID0gUFRSX0VSUihyZXBseSk7CiAJCWdvdG8gZXJyX2tmcmVlX2FjdHM7CkBAIC05MDYsOCArOTM2LDEyIEBACiAJCWVycm9yID0gLUVOT0RFVjsKIAkJZ290byBlcnJfdW5sb2NrX292czsKIAl9CisKIAkvKiBDaGVjayBpZiB0aGlzIGlzIGEgZHVwbGljYXRlIGZsb3cgKi8KLQlmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cCgmZHAtPnRhYmxlLCAmbmV3X2Zsb3ctPnVubWFza2VkX2tleSk7CisJaWYgKG92c19pZGVudGlmaWVyX2lzX3VmaWQoJm5ld19mbG93LT5pZCkpCisJCWZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX3VmaWQoJmRwLT50YWJsZSwgJm5ld19mbG93LT5pZCk7CisJaWYgKCFmbG93KQorCQlmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cCgmZHAtPnRhYmxlLCAma2V5KTsKIAlpZiAobGlrZWx5KCFmbG93KSkgewogCQlyY3VfYXNzaWduX3BvaW50ZXIobmV3X2Zsb3ctPnNmX2FjdHMsIGFjdHMpOwogCkBAIC05MjMsNyArOTU3LDggQEAKIAkJCQkJCSAgICAgICBvdnNfaGVhZGVyLT5kcF9pZmluZGV4LAogCQkJCQkJICAgICAgIHJlcGx5LCBpbmZvLT5zbmRfcG9ydGlkLAogCQkJCQkJICAgICAgIGluZm8tPnNuZF9zZXEsIDAsCi0JCQkJCQkgICAgICAgT1ZTX0ZMT1dfQ01EX05FVyk7CisJCQkJCQkgICAgICAgT1ZTX0ZMT1dfQ01EX05FVywKKwkJCQkJCSAgICAgICB1ZmlkX2ZsYWdzKTsKIAkJCUJVR19PTihlcnJvciA8IDApOwogCQl9CiAJCW92c191bmxvY2soKTsKQEAgLTk0MSwxMCArOTc2LDE1IEBACiAJCQllcnJvciA9IC1FRVhJU1Q7CiAJCQlnb3RvIGVycl91bmxvY2tfb3ZzOwogCQl9Ci0JCS8qIFRoZSB1bm1hc2tlZCBrZXkgaGFzIHRvIGJlIHRoZSBzYW1lIGZvciBmbG93IHVwZGF0ZXMuICovCi0JCWlmICh1bmxpa2VseSghb3ZzX2Zsb3dfY21wX3VubWFza2VkX2tleShmbG93LCAmbWF0Y2gpKSkgewotCQkJLyogTG9vayBmb3IgYW55IG92ZXJsYXBwaW5nIGZsb3cuICovCi0JCQlmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdCgmZHAtPnRhYmxlLCAmbWF0Y2gpOworCQkvKiBUaGUgZmxvdyBpZGVudGlmaWVyIGhhcyB0byBiZSB0aGUgc2FtZSBmb3IgZmxvdyB1cGRhdGVzLgorCQkgKiBMb29rIGZvciBhbnkgb3ZlcmxhcHBpbmcgZmxvdy4KKwkJICovCisJCWlmICh1bmxpa2VseSghb3ZzX2Zsb3dfY21wKGZsb3csICZtYXRjaCkpKSB7CisJCQlpZiAob3ZzX2lkZW50aWZpZXJfaXNfa2V5KCZmbG93LT5pZCkpCisJCQkJZmxvdyA9IG92c19mbG93X3RibF9sb29rdXBfZXhhY3QoJmRwLT50YWJsZSwKKwkJCQkJCQkJICZtYXRjaCk7CisJCQllbHNlIC8qIFVGSUQgbWF0Y2hlcyBidXQga2V5IGlzIGRpZmZlcmVudCAqLworCQkJCWZsb3cgPSBOVUxMOwogCQkJaWYgKCFmbG93KSB7CiAJCQkJZXJyb3IgPSAtRU5PRU5UOwogCQkJCWdvdG8gZXJyX3VubG9ja19vdnM7CkBAIC05NTksNyArOTk5LDggQEAKIAkJCQkJCSAgICAgICBvdnNfaGVhZGVyLT5kcF9pZmluZGV4LAogCQkJCQkJICAgICAgIHJlcGx5LCBpbmZvLT5zbmRfcG9ydGlkLAogCQkJCQkJICAgICAgIGluZm8tPnNuZF9zZXEsIDAsCi0JCQkJCQkgICAgICAgT1ZTX0ZMT1dfQ01EX05FVyk7CisJCQkJCQkgICAgICAgT1ZTX0ZMT1dfQ01EX05FVywKKwkJCQkJCSAgICAgICB1ZmlkX2ZsYWdzKTsKIAkJCUJVR19PTihlcnJvciA8IDApOwogCQl9CiAJCW92c191bmxvY2soKTsKQEAgLTEwMTUsOCArMTA1NiwxMSBAQAogCXN0cnVjdCBkYXRhcGF0aCAqZHA7CiAJc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqb2xkX2FjdHMgPSBOVUxMLCAqYWN0cyA9IE5VTEw7CiAJc3RydWN0IHN3X2Zsb3dfbWF0Y2ggbWF0Y2g7CisJc3RydWN0IHN3X2Zsb3dfaWQgc2ZpZDsKKwl1MzIgdWZpZF9mbGFncyA9IG92c19ubGFfZ2V0X3VmaWRfZmxhZ3MoYVtPVlNfRkxPV19BVFRSX1VGSURfRkxBR1NdKTsKIAlpbnQgZXJyb3I7CiAJYm9vbCBsb2cgPSAhYVtPVlNfRkxPV19BVFRSX1BST0JFXTsKKwlib29sIHVmaWRfcHJlc2VudDsKIAogCS8qIEV4dHJhY3Qga2V5LiAqLwogCWVycm9yID0gLUVJTlZBTDsKQEAgLTEwMjUsNiArMTA2OSw3IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCisJdWZpZF9wcmVzZW50ID0gb3ZzX25sYV9nZXRfdWZpZCgmc2ZpZCwgYVtPVlNfRkxPV19BVFRSX1VGSURdLCBsb2cpOwogCW92c19tYXRjaF9pbml0KCZtYXRjaCwgJmtleSwgJm1hc2spOwogCWVycm9yID0gb3ZzX25sYV9nZXRfbWF0Y2goJm1hdGNoLCBhW09WU19GTE9XX0FUVFJfS0VZXSwKIAkJCQkgIGFbT1ZTX0ZMT1dfQVRUUl9NQVNLXSwgbG9nKTsKQEAgLTEwNDEsNyArMTA4Niw4IEBACiAJCX0KIAogCQkvKiBDYW4gYWxsb2NhdGUgYmVmb3JlIGxvY2tpbmcgaWYgaGF2ZSBhY3RzLiAqLwotCQlyZXBseSA9IG92c19mbG93X2NtZF9hbGxvY19pbmZvKGFjdHMsIGluZm8sIGZhbHNlKTsKKwkJcmVwbHkgPSBvdnNfZmxvd19jbWRfYWxsb2NfaW5mbyhhY3RzLCAmc2ZpZCwgaW5mbywgZmFsc2UsCisJCQkJCQl1ZmlkX2ZsYWdzKTsKIAkJaWYgKElTX0VSUihyZXBseSkpIHsKIAkJCWVycm9yID0gUFRSX0VSUihyZXBseSk7CiAJCQlnb3RvIGVycl9rZnJlZV9hY3RzOwpAQCAtMTA1NSw3ICsxMTAxLDEwIEBACiAJCWdvdG8gZXJyX3VubG9ja19vdnM7CiAJfQogCS8qIENoZWNrIHRoYXQgdGhlIGZsb3cgZXhpc3RzLiAqLwotCWZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KCZkcC0+dGFibGUsICZtYXRjaCk7CisJaWYgKHVmaWRfcHJlc2VudCkKKwkJZmxvdyA9IG92c19mbG93X3RibF9sb29rdXBfdWZpZCgmZHAtPnRhYmxlLCAmc2ZpZCk7CisJZWxzZQorCQlmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdCgmZHAtPnRhYmxlLCAmbWF0Y2gpOwogCWlmICh1bmxpa2VseSghZmxvdykpIHsKIAkJZXJyb3IgPSAtRU5PRU5UOwogCQlnb3RvIGVycl91bmxvY2tfb3ZzOwpAQCAtMTA3MSwxMyArMTEyMCwxNiBAQAogCQkJCQkJICAgICAgIG92c19oZWFkZXItPmRwX2lmaW5kZXgsCiAJCQkJCQkgICAgICAgcmVwbHksIGluZm8tPnNuZF9wb3J0aWQsCiAJCQkJCQkgICAgICAgaW5mby0+c25kX3NlcSwgMCwKLQkJCQkJCSAgICAgICBPVlNfRkxPV19DTURfTkVXKTsKKwkJCQkJCSAgICAgICBPVlNfRkxPV19DTURfTkVXLAorCQkJCQkJICAgICAgIHVmaWRfZmxhZ3MpOwogCQkJQlVHX09OKGVycm9yIDwgMCk7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBDb3VsZCBub3QgYWxsb2Mgd2l0aG91dCBhY3RzIGJlZm9yZSBsb2NraW5nLiAqLwogCQlyZXBseSA9IG92c19mbG93X2NtZF9idWlsZF9pbmZvKGZsb3csIG92c19oZWFkZXItPmRwX2lmaW5kZXgsCi0JCQkJCQlpbmZvLCBPVlNfRkxPV19DTURfTkVXLCBmYWxzZSk7CisJCQkJCQlpbmZvLCBPVlNfRkxPV19DTURfTkVXLCBmYWxzZSwKKwkJCQkJCXVmaWRfZmxhZ3MpOworCiAJCWlmICh1bmxpa2VseShJU19FUlIocmVwbHkpKSkgewogCQkJZXJyb3IgPSBQVFJfRVJSKHJlcGx5KTsKIAkJCWdvdG8gZXJyX3VubG9ja19vdnM7CkBAIC0xMTE0LDE3ICsxMTY2LDIyIEBACiAJc3RydWN0IHN3X2Zsb3cgKmZsb3c7CiAJc3RydWN0IGRhdGFwYXRoICpkcDsKIAlzdHJ1Y3Qgc3dfZmxvd19tYXRjaCBtYXRjaDsKLQlpbnQgZXJyOworCXN0cnVjdCBzd19mbG93X2lkIHVmaWQ7CisJdTMyIHVmaWRfZmxhZ3MgPSBvdnNfbmxhX2dldF91ZmlkX2ZsYWdzKGFbT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTXSk7CisJaW50IGVyciA9IDA7CiAJYm9vbCBsb2cgPSAhYVtPVlNfRkxPV19BVFRSX1BST0JFXTsKKwlib29sIHVmaWRfcHJlc2VudDsKIAotCWlmICghYVtPVlNfRkxPV19BVFRSX0tFWV0pIHsKKwl1ZmlkX3ByZXNlbnQgPSBvdnNfbmxhX2dldF91ZmlkKCZ1ZmlkLCBhW09WU19GTE9XX0FUVFJfVUZJRF0sIGxvZyk7CisJaWYgKGFbT1ZTX0ZMT1dfQVRUUl9LRVldKSB7CisJCW92c19tYXRjaF9pbml0KCZtYXRjaCwgJmtleSwgTlVMTCk7CisJCWVyciA9IG92c19ubGFfZ2V0X21hdGNoKCZtYXRjaCwgYVtPVlNfRkxPV19BVFRSX0tFWV0sIE5VTEwsCisJCQkJCWxvZyk7CisJfSBlbHNlIGlmICghdWZpZF9wcmVzZW50KSB7CiAJCU9WU19OTEVSUihsb2csCiAJCQkgICJGbG93IGdldCBtZXNzYWdlIHJlamVjdGVkLCBLZXkgYXR0cmlidXRlIG1pc3NpbmcuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQllcnIgPSAtRUlOVkFMOwogCX0KLQotCW92c19tYXRjaF9pbml0KCZtYXRjaCwgJmtleSwgTlVMTCk7Ci0JZXJyID0gb3ZzX25sYV9nZXRfbWF0Y2goJm1hdGNoLCBhW09WU19GTE9XX0FUVFJfS0VZXSwgTlVMTCwgbG9nKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0xMTM1LDE0ICsxMTkyLDE3IEBACiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCWZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KCZkcC0+dGFibGUsICZtYXRjaCk7CisJaWYgKHVmaWRfcHJlc2VudCkKKwkJZmxvdyA9IG92c19mbG93X3RibF9sb29rdXBfdWZpZCgmZHAtPnRhYmxlLCAmdWZpZCk7CisJZWxzZQorCQlmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdCgmZHAtPnRhYmxlLCAmbWF0Y2gpOwogCWlmICghZmxvdykgewogCQllcnIgPSAtRU5PRU5UOwogCQlnb3RvIHVubG9jazsKIAl9CiAKIAlyZXBseSA9IG92c19mbG93X2NtZF9idWlsZF9pbmZvKGZsb3csIG92c19oZWFkZXItPmRwX2lmaW5kZXgsIGluZm8sCi0JCQkJCU9WU19GTE9XX0NNRF9ORVcsIHRydWUpOworCQkJCQlPVlNfRkxPV19DTURfTkVXLCB0cnVlLCB1ZmlkX2ZsYWdzKTsKIAlpZiAoSVNfRVJSKHJlcGx5KSkgewogCQllcnIgPSBQVFJfRVJSKHJlcGx5KTsKIAkJZ290byB1bmxvY2s7CkBAIC0xMTYxLDEzICsxMjIxLDE3IEBACiAJc3RydWN0IG92c19oZWFkZXIgKm92c19oZWFkZXIgPSBpbmZvLT51c2VyaGRyOwogCXN0cnVjdCBzd19mbG93X2tleSBrZXk7CiAJc3RydWN0IHNrX2J1ZmYgKnJlcGx5OwotCXN0cnVjdCBzd19mbG93ICpmbG93OworCXN0cnVjdCBzd19mbG93ICpmbG93ID0gTlVMTDsKIAlzdHJ1Y3QgZGF0YXBhdGggKmRwOwogCXN0cnVjdCBzd19mbG93X21hdGNoIG1hdGNoOworCXN0cnVjdCBzd19mbG93X2lkIHVmaWQ7CisJdTMyIHVmaWRfZmxhZ3MgPSBvdnNfbmxhX2dldF91ZmlkX2ZsYWdzKGFbT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTXSk7CiAJaW50IGVycjsKIAlib29sIGxvZyA9ICFhW09WU19GTE9XX0FUVFJfUFJPQkVdOworCWJvb2wgdWZpZF9wcmVzZW50OwogCi0JaWYgKGxpa2VseShhW09WU19GTE9XX0FUVFJfS0VZXSkpIHsKKwl1ZmlkX3ByZXNlbnQgPSBvdnNfbmxhX2dldF91ZmlkKCZ1ZmlkLCBhW09WU19GTE9XX0FUVFJfVUZJRF0sIGxvZyk7CisJaWYgKGFbT1ZTX0ZMT1dfQVRUUl9LRVldKSB7CiAJCW92c19tYXRjaF9pbml0KCZtYXRjaCwgJmtleSwgTlVMTCk7CiAJCWVyciA9IG92c19ubGFfZ2V0X21hdGNoKCZtYXRjaCwgYVtPVlNfRkxPV19BVFRSX0tFWV0sIE5VTEwsCiAJCQkJCWxvZyk7CkBAIC0xMTgyLDEyICsxMjQ2LDE1IEBACiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCWlmICh1bmxpa2VseSghYVtPVlNfRkxPV19BVFRSX0tFWV0pKSB7CisJaWYgKHVubGlrZWx5KCFhW09WU19GTE9XX0FUVFJfS0VZXSAmJiAhdWZpZF9wcmVzZW50KSkgewogCQllcnIgPSBvdnNfZmxvd190YmxfZmx1c2goJmRwLT50YWJsZSk7CiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCWZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KCZkcC0+dGFibGUsICZtYXRjaCk7CisJaWYgKHVmaWRfcHJlc2VudCkKKwkJZmxvdyA9IG92c19mbG93X3RibF9sb29rdXBfdWZpZCgmZHAtPnRhYmxlLCAmdWZpZCk7CisJZWxzZQorCQlmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdCgmZHAtPnRhYmxlLCAmbWF0Y2gpOwogCWlmICh1bmxpa2VseSghZmxvdykpIHsKIAkJZXJyID0gLUVOT0VOVDsKIAkJZ290byB1bmxvY2s7CkBAIC0xMTk3LDE0ICsxMjY0LDE1IEBACiAJb3ZzX3VubG9jaygpOwogCiAJcmVwbHkgPSBvdnNfZmxvd19jbWRfYWxsb2NfaW5mbygoY29uc3Qgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyBfX2ZvcmNlICopIGZsb3ctPnNmX2FjdHMsCi0JCQkJCWluZm8sIGZhbHNlKTsKKwkJCQkJJmZsb3ctPmlkLCBpbmZvLCBmYWxzZSwgdWZpZF9mbGFncyk7CiAJaWYgKGxpa2VseShyZXBseSkpIHsKIAkJaWYgKGxpa2VseSghSVNfRVJSKHJlcGx5KSkpIHsKIAkJCXJjdV9yZWFkX2xvY2soKTsJLypUbyBrZWVwIFJDVSBjaGVja2VyIGhhcHB5LiAqLwogCQkJZXJyID0gb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhmbG93LCBvdnNfaGVhZGVyLT5kcF9pZmluZGV4LAogCQkJCQkJICAgICByZXBseSwgaW5mby0+c25kX3BvcnRpZCwKIAkJCQkJCSAgICAgaW5mby0+c25kX3NlcSwgMCwKLQkJCQkJCSAgICAgT1ZTX0ZMT1dfQ01EX0RFTCk7CisJCQkJCQkgICAgIE9WU19GTE9XX0NNRF9ERUwsCisJCQkJCQkgICAgIHVmaWRfZmxhZ3MpOwogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlCVUdfT04oZXJyIDwgMCk7CiAKQEAgLTEyMjMsOSArMTI5MSwxOCBAQAogCiBzdGF0aWMgaW50IG92c19mbG93X2NtZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKKwlzdHJ1Y3QgbmxhdHRyICphW19fT1ZTX0ZMT1dfQVRUUl9NQVhdOwogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfaGVhZGVyID0gZ2VubG1zZ19kYXRhKG5sbXNnX2RhdGEoY2ItPm5saCkpOwogCXN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGk7CiAJc3RydWN0IGRhdGFwYXRoICpkcDsKKwl1MzIgdWZpZF9mbGFnczsKKwlpbnQgZXJyOworCisJZXJyID0gZ2VubG1zZ19wYXJzZShjYi0+bmxoLCAmZHBfZmxvd19nZW5sX2ZhbWlseSwgYSwKKwkJCSAgICBPVlNfRkxPV19BVFRSX01BWCwgZmxvd19wb2xpY3kpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJdWZpZF9mbGFncyA9IG92c19ubGFfZ2V0X3VmaWRfZmxhZ3MoYVtPVlNfRkxPV19BVFRSX1VGSURfRkxBR1NdKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlkcCA9IGdldF9kcF9yY3Uoc29ja19uZXQoc2tiLT5zayksIG92c19oZWFkZXItPmRwX2lmaW5kZXgpOwpAQCAtMTI0OCw3ICsxMzI1LDcgQEAKIAkJaWYgKG92c19mbG93X2NtZF9maWxsX2luZm8oZmxvdywgb3ZzX2hlYWRlci0+ZHBfaWZpbmRleCwgc2tiLAogCQkJCQkgICBORVRMSU5LX0NCKGNiLT5za2IpLnBvcnRpZCwKIAkJCQkJICAgY2ItPm5saC0+bmxtc2dfc2VxLCBOTE1fRl9NVUxUSSwKLQkJCQkJICAgT1ZTX0ZMT1dfQ01EX05FVykgPCAwKQorCQkJCQkgICBPVlNfRkxPV19DTURfTkVXLCB1ZmlkX2ZsYWdzKSA8IDApCiAJCQlicmVhazsKIAogCQljYi0+YXJnc1swXSA9IGJ1Y2tldDsKQEAgLTEyNjQsNiArMTM0MSw4IEBACiAJW09WU19GTE9XX0FUVFJfQUNUSU9OU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAogCVtPVlNfRkxPV19BVFRSX0NMRUFSXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogCVtPVlNfRkxPV19BVFRSX1BST0JFXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAorCVtPVlNfRkxPV19BVFRSX1VGSURdID0geyAudHlwZSA9IE5MQV9VTlNQRUMsIC5sZW4gPSAxIH0sCisJW09WU19GTE9XX0FUVFJfVUZJRF9GTEFHU10gPSB7IC50eXBlID0gTkxBX1UzMiB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX29wcyBkcF9mbG93X2dlbmxfb3BzW10gPSB7CkBAIC0xMzQ5LDcgKzE0MjgsOCBAQAogCWlmIChubGFfcHV0X3UzMihza2IsIE9WU19EUF9BVFRSX1VTRVJfRkVBVFVSRVMsIGRwLT51c2VyX2ZlYXR1cmVzKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gZ2VubG1zZ19lbmQoc2tiLCBvdnNfaGVhZGVyKTsKKwlnZW5sbXNnX2VuZChza2IsIG92c19oZWFkZXIpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJZ2VubG1zZ19jYW5jZWwoc2tiLCBvdnNfaGVhZGVyKTsKQEAgLTE3MjMsNyArMTgwMyw4IEBACiAJaWYgKGVyciA9PSAtRU1TR1NJWkUpCiAJCWdvdG8gZXJyb3I7CiAKLQlyZXR1cm4gZ2VubG1zZ19lbmQoc2tiLCBvdnNfaGVhZGVyKTsKKwlnZW5sbXNnX2VuZChza2IsIG92c19oZWFkZXIpOworCXJldHVybiAwOwogCiBubGFfcHV0X2ZhaWx1cmU6CiAJZXJyID0gLUVNU0dTSVpFOwpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Zsb3cuYyBiL25ldC9vcGVudnN3aXRjaC9mbG93LmMKaW5kZXggZGEyZmFlMC4uZTJjMzQ4YiAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Zsb3cuYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5jCkBAIC03MCw3ICs3MCw3IEBACiB7CiAJc3RydWN0IGZsb3dfc3RhdHMgKnN0YXRzOwogCWludCBub2RlID0gbnVtYV9ub2RlX2lkKCk7Ci0JaW50IGxlbiA9IHNrYi0+bGVuICsgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSA/IFZMQU5fSExFTiA6IDApOworCWludCBsZW4gPSBza2ItPmxlbiArIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpID8gVkxBTl9ITEVOIDogMCk7CiAKIAlzdGF0cyA9IHJjdV9kZXJlZmVyZW5jZShmbG93LT5zdGF0c1tub2RlXSk7CiAKQEAgLTQ3Miw3ICs0NzIsNyBAQAogCSAqLwogCiAJa2V5LT5ldGgudGNpID0gMDsKLQlpZiAodmxhbl90eF90YWdfcHJlc2VudChza2IpKQorCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKQogCQlrZXktPmV0aC50Y2kgPSBodG9ucyhza2ItPnZsYW5fdGNpKTsKIAllbHNlIGlmIChldGgtPmhfcHJvdG8gPT0gaHRvbnMoRVRIX1BfODAyMVEpKQogCQlpZiAodW5saWtlbHkocGFyc2Vfdmxhbihza2IsIGtleSkpKQpAQCAtNjkxLDcgKzY5MSw3IEBACiAJCQlCVUlMRF9CVUdfT04oKDEgPDwgKHNpemVvZih0dW5faW5mby0+b3B0aW9uc19sZW4pICoKIAkJCQkJCSAgIDgpKSAtIDEKIAkJCQkJPiBzaXplb2Yoa2V5LT50dW5fb3B0cykpOwotCQkJbWVtY3B5KEdFTkVWRV9PUFRTKGtleSwgdHVuX2luZm8tPm9wdGlvbnNfbGVuKSwKKwkJCW1lbWNweShUVU5fTUVUQURBVEFfT1BUUyhrZXksIHR1bl9pbmZvLT5vcHRpb25zX2xlbiksCiAJCQkgICAgICAgdHVuX2luZm8tPm9wdGlvbnMsIHR1bl9pbmZvLT5vcHRpb25zX2xlbik7CiAJCQlrZXktPnR1bl9vcHRzX2xlbiA9IHR1bl9pbmZvLT5vcHRpb25zX2xlbjsKIAkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93LmggYi9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oCmluZGV4IGE4YjMwZjMuLmEwNzZlNDQgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93LmgKKysrIGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuaApAQCAtNTMsNyArNTMsNyBAQAogCiBzdHJ1Y3Qgb3ZzX3R1bm5lbF9pbmZvIHsKIAlzdHJ1Y3Qgb3ZzX2tleV9pcHY0X3R1bm5lbCB0dW5uZWw7Ci0JY29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKm9wdGlvbnM7CisJY29uc3Qgdm9pZCAqb3B0aW9uczsKIAl1OCBvcHRpb25zX2xlbjsKIH07CiAKQEAgLTYxLDEwICs2MSwxMCBAQAogICogbWF4aW11bSBzaXplLiBUaGlzIGFsbG93cyB1cyB0byBnZXQgdGhlIGJlbmVmaXRzIG9mIHZhcmlhYmxlIGxlbmd0aAogICogbWF0Y2hpbmcgZm9yIHNtYWxsIG9wdGlvbnMuCiAgKi8KLSNkZWZpbmUgR0VORVZFX09QVFMoZmxvd19rZXksIG9wdF9sZW4pCVwKLQkoKHN0cnVjdCBnZW5ldmVfb3B0ICopKChmbG93X2tleSktPnR1bl9vcHRzICsgXAotCQkJICAgICAgIEZJRUxEX1NJWkVPRihzdHJ1Y3Qgc3dfZmxvd19rZXksIHR1bl9vcHRzKSAtIFwKLQkJCSAgICAgICBvcHRfbGVuKSkKKyNkZWZpbmUgVFVOX01FVEFEQVRBX09GRlNFVChvcHRfbGVuKSBcCisJKEZJRUxEX1NJWkVPRihzdHJ1Y3Qgc3dfZmxvd19rZXksIHR1bl9vcHRzKSAtIG9wdF9sZW4pCisjZGVmaW5lIFRVTl9NRVRBREFUQV9PUFRTKGZsb3dfa2V5LCBvcHRfbGVuKSBcCisJKCh2b2lkICopKChmbG93X2tleSktPnR1bl9vcHRzICsgVFVOX01FVEFEQVRBX09GRlNFVChvcHRfbGVuKSkpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX292c19mbG93X3R1bl9pbmZvX2luaXQoc3RydWN0IG92c190dW5uZWxfaW5mbyAqdHVuX2luZm8sCiAJCQkJCSAgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKQEAgLTczLDcgKzczLDcgQEAKIAkJCQkJICAgIF9fYmUxNiB0cF9kc3QsCiAJCQkJCSAgICBfX2JlNjQgdHVuX2lkLAogCQkJCQkgICAgX19iZTE2IHR1bl9mbGFncywKLQkJCQkJICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfb3B0ICpvcHRzLAorCQkJCQkgICAgY29uc3Qgdm9pZCAqb3B0cywKIAkJCQkJICAgIHU4IG9wdHNfbGVuKQogewogCXR1bl9pbmZvLT50dW5uZWwudHVuX2lkID0gdHVuX2lkOwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJCQkJCSAgX19iZTE2IHRwX2RzdCwKIAkJCQkJICBfX2JlNjQgdHVuX2lkLAogCQkJCQkgIF9fYmUxNiB0dW5fZmxhZ3MsCi0JCQkJCSAgY29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKm9wdHMsCisJCQkJCSAgY29uc3Qgdm9pZCAqb3B0cywKIAkJCQkJICB1OCBvcHRzX2xlbikKIHsKIAlfX292c19mbG93X3R1bl9pbmZvX2luaXQodHVuX2luZm8sIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCkBAIC0xOTcsNiArMTk3LDE2IEBACiAJc3RydWN0IHN3X2Zsb3dfbWFzayAqbWFzazsKIH07CiAKKyNkZWZpbmUgTUFYX1VGSURfTEVOR1RIIDE2IC8qIDEyOCBiaXRzICovCisKK3N0cnVjdCBzd19mbG93X2lkIHsKKwl1MzIgdWZpZF9sZW47CisJdW5pb24geworCQl1MzIgdWZpZFtNQVhfVUZJRF9MRU5HVEggLyA0XTsKKwkJc3RydWN0IHN3X2Zsb3dfa2V5ICp1bm1hc2tlZF9rZXk7CisJfTsKK307CisKIHN0cnVjdCBzd19mbG93X2FjdGlvbnMgewogCXN0cnVjdCByY3VfaGVhZCByY3U7CiAJdTMyIGFjdGlvbnNfbGVuOwpAQCAtMjEzLDEzICsyMjMsMTUgQEAKIAogc3RydWN0IHN3X2Zsb3cgewogCXN0cnVjdCByY3VfaGVhZCByY3U7Ci0Jc3RydWN0IGhsaXN0X25vZGUgaGFzaF9ub2RlWzJdOwotCXUzMiBoYXNoOworCXN0cnVjdCB7CisJCXN0cnVjdCBobGlzdF9ub2RlIG5vZGVbMl07CisJCXUzMiBoYXNoOworCX0gZmxvd190YWJsZSwgdWZpZF90YWJsZTsKIAlpbnQgc3RhdHNfbGFzdF93cml0ZXI7CQkvKiBOVU1BLW5vZGUgaWQgb2YgdGhlIGxhc3Qgd3JpdGVyIG9uCiAJCQkJCSAqICdzdGF0c1swXScuCiAJCQkJCSAqLwogCXN0cnVjdCBzd19mbG93X2tleSBrZXk7Ci0Jc3RydWN0IHN3X2Zsb3dfa2V5IHVubWFza2VkX2tleTsKKwlzdHJ1Y3Qgc3dfZmxvd19pZCBpZDsKIAlzdHJ1Y3Qgc3dfZmxvd19tYXNrICptYXNrOwogCXN0cnVjdCBzd19mbG93X2FjdGlvbnMgX19yY3UgKnNmX2FjdHM7CiAJc3RydWN0IGZsb3dfc3RhdHMgX19yY3UgKnN0YXRzW107IC8qIE9uZSBmb3IgZWFjaCBOVU1BIG5vZGUuICBGaXJzdCBvbmUKQEAgLTI0Myw2ICsyNTUsMTYgQEAKIAl1bnNpZ25lZCBjaGFyICAgICAgIGFyX3RpcFs0XTsJCS8qIHRhcmdldCBJUCBhZGRyZXNzICAgICAgICAqLwogfSBfX3BhY2tlZDsKIAorc3RhdGljIGlubGluZSBib29sIG92c19pZGVudGlmaWVyX2lzX3VmaWQoY29uc3Qgc3RydWN0IHN3X2Zsb3dfaWQgKnNmaWQpCit7CisJcmV0dXJuIHNmaWQtPnVmaWRfbGVuOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgb3ZzX2lkZW50aWZpZXJfaXNfa2V5KGNvbnN0IHN0cnVjdCBzd19mbG93X2lkICpzZmlkKQoreworCXJldHVybiAhb3ZzX2lkZW50aWZpZXJfaXNfdWZpZChzZmlkKTsKK30KKwogdm9pZCBvdnNfZmxvd19zdGF0c191cGRhdGUoc3RydWN0IHN3X2Zsb3cgKiwgX19iZTE2IHRjcF9mbGFncywKIAkJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICopOwogdm9pZCBvdnNfZmxvd19zdGF0c19nZXQoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKiwgc3RydWN0IG92c19mbG93X3N0YXRzICosCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMKaW5kZXggZDFlZWNmNy4uOTkzMjgxZSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jCisrKyBiL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYwpAQCAtNDksNiArNDksMTQgQEAKICNpbmNsdWRlIDxuZXQvbXBscy5oPgogCiAjaW5jbHVkZSAiZmxvd19uZXRsaW5rLmgiCisjaW5jbHVkZSAidnBvcnQtdnhsYW4uaCIKKworc3RydWN0IG92c19sZW5fdGJsIHsKKwlpbnQgbGVuOworCWNvbnN0IHN0cnVjdCBvdnNfbGVuX3RibCAqbmV4dDsKK307CisKKyNkZWZpbmUgT1ZTX0FUVFJfTkVTVEVEIC0xCiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9yYW5nZShzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gsCiAJCQkgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsIGJvb2wgaXNfbWFzaykKQEAgLTI2MSw2ICsyNjksOSBAQAogCQkrIG5sYV90b3RhbF9zaXplKDApICAgIC8qIE9WU19UVU5ORUxfS0VZX0FUVFJfQ1NVTSAqLwogCQkrIG5sYV90b3RhbF9zaXplKDApICAgIC8qIE9WU19UVU5ORUxfS0VZX0FUVFJfT0FNICovCiAJCSsgbmxhX3RvdGFsX3NpemUoMjU2KSAgLyogT1ZTX1RVTk5FTF9LRVlfQVRUUl9HRU5FVkVfT1BUUyAqLworCQkvKiBPVlNfVFVOTkVMX0tFWV9BVFRSX1ZYTEFOX09QVFMgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGgKKwkJICogT1ZTX1RVTk5FTF9LRVlfQVRUUl9HRU5FVkVfT1BUUyBhbmQgY292ZXJlZCBieSBpdC4KKwkJICovCiAJCSsgbmxhX3RvdGFsX3NpemUoMikgICAgLyogT1ZTX1RVTk5FTF9LRVlfQVRUUl9UUF9TUkMgKi8KIAkJKyBubGFfdG90YWxfc2l6ZSgyKTsgICAvKiBPVlNfVFVOTkVMX0tFWV9BVFRSX1RQX0RTVCAqLwogfQpAQCAtMjg5LDI5ICszMDAsNDUgQEAKIAkJKyBubGFfdG90YWxfc2l6ZSgyOCk7IC8qIE9WU19LRVlfQVRUUl9ORCAqLwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IG92c19sZW5fdGJsIG92c190dW5uZWxfa2V5X2xlbnNbT1ZTX1RVTk5FTF9LRVlfQVRUUl9NQVggKyAxXSA9IHsKKwlbT1ZTX1RVTk5FTF9LRVlfQVRUUl9JRF0JICAgID0geyAubGVuID0gc2l6ZW9mKHU2NCkgfSwKKwlbT1ZTX1RVTk5FTF9LRVlfQVRUUl9JUFY0X1NSQ10JICAgID0geyAubGVuID0gc2l6ZW9mKHUzMikgfSwKKwlbT1ZTX1RVTk5FTF9LRVlfQVRUUl9JUFY0X0RTVF0JICAgID0geyAubGVuID0gc2l6ZW9mKHUzMikgfSwKKwlbT1ZTX1RVTk5FTF9LRVlfQVRUUl9UT1NdCSAgICA9IHsgLmxlbiA9IDEgfSwKKwlbT1ZTX1RVTk5FTF9LRVlfQVRUUl9UVExdCSAgICA9IHsgLmxlbiA9IDEgfSwKKwlbT1ZTX1RVTk5FTF9LRVlfQVRUUl9ET05UX0ZSQUdNRU5UXSA9IHsgLmxlbiA9IDAgfSwKKwlbT1ZTX1RVTk5FTF9LRVlfQVRUUl9DU1VNXQkgICAgPSB7IC5sZW4gPSAwIH0sCisJW09WU19UVU5ORUxfS0VZX0FUVFJfVFBfU1JDXQkgICAgPSB7IC5sZW4gPSBzaXplb2YodTE2KSB9LAorCVtPVlNfVFVOTkVMX0tFWV9BVFRSX1RQX0RTVF0JICAgID0geyAubGVuID0gc2l6ZW9mKHUxNikgfSwKKwlbT1ZTX1RVTk5FTF9LRVlfQVRUUl9PQU1dCSAgICA9IHsgLmxlbiA9IDAgfSwKKwlbT1ZTX1RVTk5FTF9LRVlfQVRUUl9HRU5FVkVfT1BUU10gICA9IHsgLmxlbiA9IE9WU19BVFRSX05FU1RFRCB9LAorCVtPVlNfVFVOTkVMX0tFWV9BVFRSX1ZYTEFOX09QVFNdICAgID0geyAubGVuID0gT1ZTX0FUVFJfTkVTVEVEIH0sCit9OworCiAvKiBUaGUgc2l6ZSBvZiB0aGUgYXJndW1lbnQgZm9yIGVhY2ggJU9WU19LRVlfQVRUUl8qIE5ldGxpbmsgYXR0cmlidXRlLiAgKi8KLXN0YXRpYyBjb25zdCBpbnQgb3ZzX2tleV9sZW5zW09WU19LRVlfQVRUUl9NQVggKyAxXSA9IHsKLQlbT1ZTX0tFWV9BVFRSX0VOQ0FQXSA9IC0xLAotCVtPVlNfS0VZX0FUVFJfUFJJT1JJVFldID0gc2l6ZW9mKHUzMiksCi0JW09WU19LRVlfQVRUUl9JTl9QT1JUXSA9IHNpemVvZih1MzIpLAotCVtPVlNfS0VZX0FUVFJfU0tCX01BUktdID0gc2l6ZW9mKHUzMiksCi0JW09WU19LRVlfQVRUUl9FVEhFUk5FVF0gPSBzaXplb2Yoc3RydWN0IG92c19rZXlfZXRoZXJuZXQpLAotCVtPVlNfS0VZX0FUVFJfVkxBTl0gPSBzaXplb2YoX19iZTE2KSwKLQlbT1ZTX0tFWV9BVFRSX0VUSEVSVFlQRV0gPSBzaXplb2YoX19iZTE2KSwKLQlbT1ZTX0tFWV9BVFRSX0lQVjRdID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X2lwdjQpLAotCVtPVlNfS0VZX0FUVFJfSVBWNl0gPSBzaXplb2Yoc3RydWN0IG92c19rZXlfaXB2NiksCi0JW09WU19LRVlfQVRUUl9UQ1BdID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X3RjcCksCi0JW09WU19LRVlfQVRUUl9UQ1BfRkxBR1NdID0gc2l6ZW9mKF9fYmUxNiksCi0JW09WU19LRVlfQVRUUl9VRFBdID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X3VkcCksCi0JW09WU19LRVlfQVRUUl9TQ1RQXSA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2tleV9zY3RwKSwKLQlbT1ZTX0tFWV9BVFRSX0lDTVBdID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X2ljbXApLAotCVtPVlNfS0VZX0FUVFJfSUNNUFY2XSA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2tleV9pY21wdjYpLAotCVtPVlNfS0VZX0FUVFJfQVJQXSA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2tleV9hcnApLAotCVtPVlNfS0VZX0FUVFJfTkRdID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X25kKSwKLQlbT1ZTX0tFWV9BVFRSX1JFQ0lSQ19JRF0gPSBzaXplb2YodTMyKSwKLQlbT1ZTX0tFWV9BVFRSX0RQX0hBU0hdID0gc2l6ZW9mKHUzMiksCi0JW09WU19LRVlfQVRUUl9UVU5ORUxdID0gLTEsCi0JW09WU19LRVlfQVRUUl9NUExTXSA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2tleV9tcGxzKSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3ZzX2xlbl90Ymwgb3ZzX2tleV9sZW5zW09WU19LRVlfQVRUUl9NQVggKyAxXSA9IHsKKwlbT1ZTX0tFWV9BVFRSX0VOQ0FQXQkgPSB7IC5sZW4gPSBPVlNfQVRUUl9ORVNURUQgfSwKKwlbT1ZTX0tFWV9BVFRSX1BSSU9SSVRZXQkgPSB7IC5sZW4gPSBzaXplb2YodTMyKSB9LAorCVtPVlNfS0VZX0FUVFJfSU5fUE9SVF0JID0geyAubGVuID0gc2l6ZW9mKHUzMikgfSwKKwlbT1ZTX0tFWV9BVFRSX1NLQl9NQVJLXQkgPSB7IC5sZW4gPSBzaXplb2YodTMyKSB9LAorCVtPVlNfS0VZX0FUVFJfRVRIRVJORVRdCSA9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2tleV9ldGhlcm5ldCkgfSwKKwlbT1ZTX0tFWV9BVFRSX1ZMQU5dCSA9IHsgLmxlbiA9IHNpemVvZihfX2JlMTYpIH0sCisJW09WU19LRVlfQVRUUl9FVEhFUlRZUEVdID0geyAubGVuID0gc2l6ZW9mKF9fYmUxNikgfSwKKwlbT1ZTX0tFWV9BVFRSX0lQVjRdCSA9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2tleV9pcHY0KSB9LAorCVtPVlNfS0VZX0FUVFJfSVBWNl0JID0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X2lwdjYpIH0sCisJW09WU19LRVlfQVRUUl9UQ1BdCSA9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2tleV90Y3ApIH0sCisJW09WU19LRVlfQVRUUl9UQ1BfRkxBR1NdID0geyAubGVuID0gc2l6ZW9mKF9fYmUxNikgfSwKKwlbT1ZTX0tFWV9BVFRSX1VEUF0JID0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X3VkcCkgfSwKKwlbT1ZTX0tFWV9BVFRSX1NDVFBdCSA9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2tleV9zY3RwKSB9LAorCVtPVlNfS0VZX0FUVFJfSUNNUF0JID0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X2ljbXApIH0sCisJW09WU19LRVlfQVRUUl9JQ01QVjZdCSA9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2tleV9pY21wdjYpIH0sCisJW09WU19LRVlfQVRUUl9BUlBdCSA9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2tleV9hcnApIH0sCisJW09WU19LRVlfQVRUUl9ORF0JID0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBvdnNfa2V5X25kKSB9LAorCVtPVlNfS0VZX0FUVFJfUkVDSVJDX0lEXSA9IHsgLmxlbiA9IHNpemVvZih1MzIpIH0sCisJW09WU19LRVlfQVRUUl9EUF9IQVNIXQkgPSB7IC5sZW4gPSBzaXplb2YodTMyKSB9LAorCVtPVlNfS0VZX0FUVFJfVFVOTkVMXQkgPSB7IC5sZW4gPSBPVlNfQVRUUl9ORVNURUQsCisJCQkJICAgICAubmV4dCA9IG92c190dW5uZWxfa2V5X2xlbnMsIH0sCisJW09WU19LRVlfQVRUUl9NUExTXQkgPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IG92c19rZXlfbXBscykgfSwKIH07CiAKIHN0YXRpYyBib29sIGlzX2FsbF96ZXJvKGNvbnN0IHU4ICpmcCwgc2l6ZV90IHNpemUpCkBAIC0zNTIsOCArMzc5LDggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJZXhwZWN0ZWRfbGVuID0gb3ZzX2tleV9sZW5zW3R5cGVdOwotCQlpZiAobmxhX2xlbihubGEpICE9IGV4cGVjdGVkX2xlbiAmJiBleHBlY3RlZF9sZW4gIT0gLTEpIHsKKwkJZXhwZWN0ZWRfbGVuID0gb3ZzX2tleV9sZW5zW3R5cGVdLmxlbjsKKwkJaWYgKG5sYV9sZW4obmxhKSAhPSBleHBlY3RlZF9sZW4gJiYgZXhwZWN0ZWRfbGVuICE9IE9WU19BVFRSX05FU1RFRCkgewogCQkJT1ZTX05MRVJSKGxvZywgIktleSAlZCBoYXMgdW5leHBlY3RlZCBsZW4gJWQgZXhwZWN0ZWQgJWQiLAogCQkJCSAgdHlwZSwgbmxhX2xlbihubGEpLCBleHBlY3RlZF9sZW4pOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC00MzIsMTMgKzQ1OSw0NyBAQAogCQlTV19GTE9XX0tFWV9QVVQobWF0Y2gsIHR1bl9vcHRzX2xlbiwgMHhmZiwgdHJ1ZSk7CiAJfQogCi0Jb3B0X2tleV9vZmZzZXQgPSAodW5zaWduZWQgbG9uZylHRU5FVkVfT1BUUygoc3RydWN0IHN3X2Zsb3dfa2V5ICopMCwKLQkJCQkJCSAgICBubGFfbGVuKGEpKTsKKwlvcHRfa2V5X29mZnNldCA9IFRVTl9NRVRBREFUQV9PRkZTRVQobmxhX2xlbihhKSk7CiAJU1dfRkxPV19LRVlfTUVNQ1BZX09GRlNFVChtYXRjaCwgb3B0X2tleV9vZmZzZXQsIG5sYV9kYXRhKGEpLAogCQkJCSAgbmxhX2xlbihhKSwgaXNfbWFzayk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB2eGxhbl9vcHRfcG9saWN5W09WU19WWExBTl9FWFRfTUFYICsgMV0gPSB7CisJW09WU19WWExBTl9FWFRfR0JQXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCit9OworCitzdGF0aWMgaW50IHZ4bGFuX3R1bl9vcHRfZnJvbV9ubGF0dHIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYSwKKwkJCQkgICAgIHN0cnVjdCBzd19mbG93X21hdGNoICptYXRjaCwgYm9vbCBpc19tYXNrLAorCQkJCSAgICAgYm9vbCBsb2cpCit7CisJc3RydWN0IG5sYXR0ciAqdGJbT1ZTX1ZYTEFOX0VYVF9NQVgrMV07CisJdW5zaWduZWQgbG9uZyBvcHRfa2V5X29mZnNldDsKKwlzdHJ1Y3Qgb3ZzX3Z4bGFuX29wdHMgb3B0czsKKwlpbnQgZXJyOworCisJQlVJTERfQlVHX09OKHNpemVvZihvcHRzKSA+IHNpemVvZihtYXRjaC0+a2V5LT50dW5fb3B0cykpOworCisJZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgT1ZTX1ZYTEFOX0VYVF9NQVgsIGEsIHZ4bGFuX29wdF9wb2xpY3kpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJbWVtc2V0KCZvcHRzLCAwLCBzaXplb2Yob3B0cykpOworCisJaWYgKHRiW09WU19WWExBTl9FWFRfR0JQXSkKKwkJb3B0cy5nYnAgPSBubGFfZ2V0X3UzMih0YltPVlNfVlhMQU5fRVhUX0dCUF0pOworCisJaWYgKCFpc19tYXNrKQorCQlTV19GTE9XX0tFWV9QVVQobWF0Y2gsIHR1bl9vcHRzX2xlbiwgc2l6ZW9mKG9wdHMpLCBmYWxzZSk7CisJZWxzZQorCQlTV19GTE9XX0tFWV9QVVQobWF0Y2gsIHR1bl9vcHRzX2xlbiwgMHhmZiwgdHJ1ZSk7CisKKwlvcHRfa2V5X29mZnNldCA9IFRVTl9NRVRBREFUQV9PRkZTRVQoc2l6ZW9mKG9wdHMpKTsKKwlTV19GTE9XX0tFWV9NRU1DUFlfT0ZGU0VUKG1hdGNoLCBvcHRfa2V5X29mZnNldCwgJm9wdHMsIHNpemVvZihvcHRzKSwKKwkJCQkgIGlzX21hc2spOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGlwdjRfdHVuX2Zyb21fbmxhdHRyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJCQkJc3RydWN0IHN3X2Zsb3dfbWF0Y2ggKm1hdGNoLCBib29sIGlzX21hc2ssCiAJCQkJYm9vbCBsb2cpCkBAIC00NDcsMzUgKzUwOCwyMiBAQAogCWludCByZW07CiAJYm9vbCB0dGwgPSBmYWxzZTsKIAlfX2JlMTYgdHVuX2ZsYWdzID0gMDsKKwlpbnQgb3B0c190eXBlID0gMDsKIAogCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYSwgYXR0ciwgcmVtKSB7CiAJCWludCB0eXBlID0gbmxhX3R5cGUoYSk7CiAJCWludCBlcnI7CiAKLQkJc3RhdGljIGNvbnN0IHUzMiBvdnNfdHVubmVsX2tleV9sZW5zW09WU19UVU5ORUxfS0VZX0FUVFJfTUFYICsgMV0gPSB7Ci0JCQlbT1ZTX1RVTk5FTF9LRVlfQVRUUl9JRF0gPSBzaXplb2YodTY0KSwKLQkJCVtPVlNfVFVOTkVMX0tFWV9BVFRSX0lQVjRfU1JDXSA9IHNpemVvZih1MzIpLAotCQkJW09WU19UVU5ORUxfS0VZX0FUVFJfSVBWNF9EU1RdID0gc2l6ZW9mKHUzMiksCi0JCQlbT1ZTX1RVTk5FTF9LRVlfQVRUUl9UT1NdID0gMSwKLQkJCVtPVlNfVFVOTkVMX0tFWV9BVFRSX1RUTF0gPSAxLAotCQkJW09WU19UVU5ORUxfS0VZX0FUVFJfRE9OVF9GUkFHTUVOVF0gPSAwLAotCQkJW09WU19UVU5ORUxfS0VZX0FUVFJfQ1NVTV0gPSAwLAotCQkJW09WU19UVU5ORUxfS0VZX0FUVFJfVFBfU1JDXSA9IHNpemVvZih1MTYpLAotCQkJW09WU19UVU5ORUxfS0VZX0FUVFJfVFBfRFNUXSA9IHNpemVvZih1MTYpLAotCQkJW09WU19UVU5ORUxfS0VZX0FUVFJfT0FNXSA9IDAsCi0JCQlbT1ZTX1RVTk5FTF9LRVlfQVRUUl9HRU5FVkVfT1BUU10gPSAtMSwKLQkJfTsKLQogCQlpZiAodHlwZSA+IE9WU19UVU5ORUxfS0VZX0FUVFJfTUFYKSB7CiAJCQlPVlNfTkxFUlIobG9nLCAiVHVubmVsIGF0dHIgJWQgb3V0IG9mIHJhbmdlIG1heCAlZCIsCiAJCQkJICB0eXBlLCBPVlNfVFVOTkVMX0tFWV9BVFRSX01BWCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCWlmIChvdnNfdHVubmVsX2tleV9sZW5zW3R5cGVdICE9IG5sYV9sZW4oYSkgJiYKLQkJICAgIG92c190dW5uZWxfa2V5X2xlbnNbdHlwZV0gIT0gLTEpIHsKKwkJaWYgKG92c190dW5uZWxfa2V5X2xlbnNbdHlwZV0ubGVuICE9IG5sYV9sZW4oYSkgJiYKKwkJICAgIG92c190dW5uZWxfa2V5X2xlbnNbdHlwZV0ubGVuICE9IE9WU19BVFRSX05FU1RFRCkgewogCQkJT1ZTX05MRVJSKGxvZywgIlR1bm5lbCBhdHRyICVkIGhhcyB1bmV4cGVjdGVkIGxlbiAlZCBleHBlY3RlZCAlZCIsCi0JCQkJICB0eXBlLCBubGFfbGVuKGEpLCBvdnNfdHVubmVsX2tleV9sZW5zW3R5cGVdKTsKKwkJCQkgIHR5cGUsIG5sYV9sZW4oYSksIG92c190dW5uZWxfa2V5X2xlbnNbdHlwZV0ubGVuKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKQEAgLTUyMCwxMSArNTY4LDMwIEBACiAJCQl0dW5fZmxhZ3MgfD0gVFVOTkVMX09BTTsKIAkJCWJyZWFrOwogCQljYXNlIE9WU19UVU5ORUxfS0VZX0FUVFJfR0VORVZFX09QVFM6CisJCQlpZiAob3B0c190eXBlKSB7CisJCQkJT1ZTX05MRVJSKGxvZywgIk11bHRpcGxlIG1ldGFkYXRhIGJsb2NrcyBwcm92aWRlZCIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCiAJCQllcnIgPSBnZW5ldl90dW5fb3B0X2Zyb21fbmxhdHRyKGEsIG1hdGNoLCBpc19tYXNrLCBsb2cpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCi0JCQl0dW5fZmxhZ3MgfD0gVFVOTkVMX09QVElPTlNfUFJFU0VOVDsKKwkJCXR1bl9mbGFncyB8PSBUVU5ORUxfR0VORVZFX09QVDsKKwkJCW9wdHNfdHlwZSA9IHR5cGU7CisJCQlicmVhazsKKwkJY2FzZSBPVlNfVFVOTkVMX0tFWV9BVFRSX1ZYTEFOX09QVFM6CisJCQlpZiAob3B0c190eXBlKSB7CisJCQkJT1ZTX05MRVJSKGxvZywgIk11bHRpcGxlIG1ldGFkYXRhIGJsb2NrcyBwcm92aWRlZCIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQllcnIgPSB2eGxhbl90dW5fb3B0X2Zyb21fbmxhdHRyKGEsIG1hdGNoLCBpc19tYXNrLCBsb2cpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCisJCQl0dW5fZmxhZ3MgfD0gVFVOTkVMX1ZYTEFOX09QVDsKKwkJCW9wdHNfdHlwZSA9IHR5cGU7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCU9WU19OTEVSUihsb2csICJVbmtub3duIElQdjQgdHVubmVsIGF0dHJpYnV0ZSAlZCIsCkBAIC01NTMsMTMgKzYyMCwyOSBAQAogCQl9CiAJfQogCisJcmV0dXJuIG9wdHNfdHlwZTsKK30KKworc3RhdGljIGludCB2eGxhbl9vcHRfdG9fbmxhdHRyKHN0cnVjdCBza19idWZmICpza2IsCisJCQkgICAgICAgY29uc3Qgdm9pZCAqdHVuX29wdHMsIGludCBzd2tleV90dW5fb3B0c19sZW4pCit7CisJY29uc3Qgc3RydWN0IG92c192eGxhbl9vcHRzICpvcHRzID0gdHVuX29wdHM7CisJc3RydWN0IG5sYXR0ciAqbmxhOworCisJbmxhID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBPVlNfVFVOTkVMX0tFWV9BVFRSX1ZYTEFOX09QVFMpOworCWlmICghbmxhKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJaWYgKG5sYV9wdXRfdTMyKHNrYiwgT1ZTX1ZYTEFOX0VYVF9HQlAsIG9wdHMtPmdicCkgPCAwKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJbmxhX25lc3RfZW5kKHNrYiwgbmxhKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2lwdjRfdHVuX3RvX25sYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCWNvbnN0IHN0cnVjdCBvdnNfa2V5X2lwdjRfdHVubmVsICpvdXRwdXQsCi0JCQkJY29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKnR1bl9vcHRzLAotCQkJCWludCBzd2tleV90dW5fb3B0c19sZW4pCisJCQkJY29uc3Qgdm9pZCAqdHVuX29wdHMsIGludCBzd2tleV90dW5fb3B0c19sZW4pCiB7CiAJaWYgKG91dHB1dC0+dHVuX2ZsYWdzICYgVFVOTkVMX0tFWSAmJgogCSAgICBubGFfcHV0X2JlNjQoc2tiLCBPVlNfVFVOTkVMX0tFWV9BVFRSX0lELCBvdXRwdXQtPnR1bl9pZCkpCkBAIC01OTAsMTggKzY3MywyMiBAQAogCWlmICgob3V0cHV0LT50dW5fZmxhZ3MgJiBUVU5ORUxfT0FNKSAmJgogCSAgICBubGFfcHV0X2ZsYWcoc2tiLCBPVlNfVFVOTkVMX0tFWV9BVFRSX09BTSkpCiAJCXJldHVybiAtRU1TR1NJWkU7Ci0JaWYgKHR1bl9vcHRzICYmCi0JICAgIG5sYV9wdXQoc2tiLCBPVlNfVFVOTkVMX0tFWV9BVFRSX0dFTkVWRV9PUFRTLAotCQkgICAgc3drZXlfdHVuX29wdHNfbGVuLCB0dW5fb3B0cykpCi0JCXJldHVybiAtRU1TR1NJWkU7CisJaWYgKHR1bl9vcHRzKSB7CisJCWlmIChvdXRwdXQtPnR1bl9mbGFncyAmIFRVTk5FTF9HRU5FVkVfT1BUICYmCisJCSAgICBubGFfcHV0KHNrYiwgT1ZTX1RVTk5FTF9LRVlfQVRUUl9HRU5FVkVfT1BUUywKKwkJCSAgICBzd2tleV90dW5fb3B0c19sZW4sIHR1bl9vcHRzKSkKKwkJCXJldHVybiAtRU1TR1NJWkU7CisJCWVsc2UgaWYgKG91dHB1dC0+dHVuX2ZsYWdzICYgVFVOTkVMX1ZYTEFOX09QVCAmJgorCQkJIHZ4bGFuX29wdF90b19ubGF0dHIoc2tiLCB0dW5fb3B0cywgc3drZXlfdHVuX29wdHNfbGVuKSkKKwkJCXJldHVybiAtRU1TR1NJWkU7CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaXB2NF90dW5fdG9fbmxhdHRyKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2tleV9pcHY0X3R1bm5lbCAqb3V0cHV0LAotCQkJICAgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKnR1bl9vcHRzLAotCQkJICAgICAgaW50IHN3a2V5X3R1bl9vcHRzX2xlbikKKwkJCSAgICAgIGNvbnN0IHZvaWQgKnR1bl9vcHRzLCBpbnQgc3drZXlfdHVuX29wdHNfbGVuKQogewogCXN0cnVjdCBubGF0dHIgKm5sYTsKIAlpbnQgZXJyOwpAQCAtNjc1LDcgKzc2Miw3IEBACiAJfQogCWlmICgqYXR0cnMgJiAoMSA8PCBPVlNfS0VZX0FUVFJfVFVOTkVMKSkgewogCQlpZiAoaXB2NF90dW5fZnJvbV9ubGF0dHIoYVtPVlNfS0VZX0FUVFJfVFVOTkVMXSwgbWF0Y2gsCi0JCQkJCSBpc19tYXNrLCBsb2cpKQorCQkJCQkgaXNfbWFzaywgbG9nKSA8IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJKmF0dHJzICY9IH4oMSA8PCBPVlNfS0VZX0FUVFJfVFVOTkVMKTsKIAl9CkBAIC05MTUsMTggKzEwMDIsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbmxhdHRyX3NldChzdHJ1Y3QgbmxhdHRyICphdHRyLCB1OCB2YWwsIGJvb2wgaXNfYXR0cl9tYXNrX2tleSkKK3N0YXRpYyB2b2lkIG5sYXR0cl9zZXQoc3RydWN0IG5sYXR0ciAqYXR0ciwgdTggdmFsLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG92c19sZW5fdGJsICp0YmwpCiB7CiAJc3RydWN0IG5sYXR0ciAqbmxhOwogCWludCByZW07CiAKIAkvKiBUaGUgbmxhdHRyIHN0cmVhbSBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gdmFsaWRhdGVkICovCiAJbmxhX2Zvcl9lYWNoX25lc3RlZChubGEsIGF0dHIsIHJlbSkgewotCQkvKiBXZSBhc3N1bWUgdGhhdCBvdnNfa2V5X2xlbnNbdHlwZV0gPT0gLTEgbWVhbnMgdGhhdCB0eXBlIGlzIGEKLQkJICogbmVzdGVkIGF0dHJpYnV0ZQotCQkgKi8KLQkJaWYgKGlzX2F0dHJfbWFza19rZXkgJiYgb3ZzX2tleV9sZW5zW25sYV90eXBlKG5sYSldID09IC0xKQotCQkJbmxhdHRyX3NldChubGEsIHZhbCwgZmFsc2UpOworCQlpZiAodGJsICYmIHRibFtubGFfdHlwZShubGEpXS5sZW4gPT0gT1ZTX0FUVFJfTkVTVEVEKQorCQkJbmxhdHRyX3NldChubGEsIHZhbCwgdGJsW25sYV90eXBlKG5sYSldLm5leHQpOwogCQllbHNlCiAJCQltZW1zZXQobmxhX2RhdGEobmxhKSwgdmFsLCBubGFfbGVuKG5sYSkpOwogCX0KQEAgLTkzNCw3ICsxMDE5LDcgQEAKIAogc3RhdGljIHZvaWQgbWFza19zZXRfbmxhdHRyKHN0cnVjdCBubGF0dHIgKmF0dHIsIHU4IHZhbCkKIHsKLQlubGF0dHJfc2V0KGF0dHIsIHZhbCwgdHJ1ZSk7CisJbmxhdHRyX3NldChhdHRyLCB2YWwsIG92c19rZXlfbGVucyk7CiB9CiAKIC8qKgpAQCAtMTA5NSw2ICsxMTgwLDU5IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHNpemVfdCBnZXRfdWZpZF9sZW4oY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgYm9vbCBsb2cpCit7CisJc2l6ZV90IGxlbjsKKworCWlmICghYXR0cikKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBubGFfbGVuKGF0dHIpOworCWlmIChsZW4gPCAxIHx8IGxlbiA+IE1BWF9VRklEX0xFTkdUSCkgeworCQlPVlNfTkxFUlIobG9nLCAidWZpZCBzaXplICV1IGJ5dGVzIGV4Y2VlZHMgdGhlIHJhbmdlICgxLCAlZCkiLAorCQkJICBubGFfbGVuKGF0dHIpLCBNQVhfVUZJRF9MRU5HVEgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCisvKiBJbml0aWFsaXplcyAnZmxvdy0+dWZpZCcsIHJldHVybmluZyB0cnVlIGlmICdhdHRyJyBjb250YWlucyBhIHZhbGlkIFVGSUQsCisgKiBvciBmYWxzZSBvdGhlcndpc2UuCisgKi8KK2Jvb2wgb3ZzX25sYV9nZXRfdWZpZChzdHJ1Y3Qgc3dfZmxvd19pZCAqc2ZpZCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwKKwkJICAgICAgYm9vbCBsb2cpCit7CisJc2ZpZC0+dWZpZF9sZW4gPSBnZXRfdWZpZF9sZW4oYXR0ciwgbG9nKTsKKwlpZiAoc2ZpZC0+dWZpZF9sZW4pCisJCW1lbWNweShzZmlkLT51ZmlkLCBubGFfZGF0YShhdHRyKSwgc2ZpZC0+dWZpZF9sZW4pOworCisJcmV0dXJuIHNmaWQtPnVmaWRfbGVuOworfQorCitpbnQgb3ZzX25sYV9nZXRfaWRlbnRpZmllcihzdHJ1Y3Qgc3dfZmxvd19pZCAqc2ZpZCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqdWZpZCwKKwkJCSAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LCBib29sIGxvZykKK3sKKwlzdHJ1Y3Qgc3dfZmxvd19rZXkgKm5ld19rZXk7CisKKwlpZiAob3ZzX25sYV9nZXRfdWZpZChzZmlkLCB1ZmlkLCBsb2cpKQorCQlyZXR1cm4gMDsKKworCS8qIElmIFVGSUQgd2FzIG5vdCBwcm92aWRlZCwgdXNlIHVubWFza2VkIGtleS4gKi8KKwluZXdfa2V5ID0ga21hbGxvYyhzaXplb2YoKm5ld19rZXkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19rZXkpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShuZXdfa2V5LCBrZXksIHNpemVvZigqa2V5KSk7CisJc2ZpZC0+dW5tYXNrZWRfa2V5ID0gbmV3X2tleTsKKworCXJldHVybiAwOworfQorCit1MzIgb3ZzX25sYV9nZXRfdWZpZF9mbGFncyhjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKQoreworCXJldHVybiBhdHRyID8gbmxhX2dldF91MzIoYXR0cikgOiAwOworfQorCiAvKioKICAqIG92c19ubGFfZ2V0X2Zsb3dfbWV0YWRhdGEgLSBwYXJzZXMgTmV0bGluayBhdHRyaWJ1dGVzIGludG8gYSBmbG93IGtleS4KICAqIEBrZXk6IFJlY2VpdmVzIGV4dHJhY3RlZCBpbl9wb3J0LCBwcmlvcml0eSwgdHVuX2tleSBhbmQgc2tiX21hcmsuCkBAIC0xMTMxLDEyICsxMjY5LDEyIEBACiAJcmV0dXJuIG1ldGFkYXRhX2Zyb21fbmxhdHRycygmbWF0Y2gsICZhdHRycywgYSwgZmFsc2UsIGxvZyk7CiB9CiAKLWludCBvdnNfbmxhX3B1dF9mbG93KGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqc3drZXksCi0JCSAgICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICpvdXRwdXQsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IF9fb3ZzX25sYV9wdXRfa2V5KGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqc3drZXksCisJCQkgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqb3V0cHV0LCBib29sIGlzX21hc2ssCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG92c19rZXlfZXRoZXJuZXQgKmV0aF9rZXk7CiAJc3RydWN0IG5sYXR0ciAqbmxhLCAqZW5jYXA7Ci0JYm9vbCBpc19tYXNrID0gKHN3a2V5ICE9IG91dHB1dCk7CiAKIAlpZiAobmxhX3B1dF91MzIoc2tiLCBPVlNfS0VZX0FUVFJfUkVDSVJDX0lELCBvdXRwdXQtPnJlY2lyY19pZCkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwpAQCAtMTE0OCwxMCArMTI4NiwxMCBAQAogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCWlmICgoc3drZXktPnR1bl9rZXkuaXB2NF9kc3QgfHwgaXNfbWFzaykpIHsKLQkJY29uc3Qgc3RydWN0IGdlbmV2ZV9vcHQgKm9wdHMgPSBOVUxMOworCQljb25zdCB2b2lkICpvcHRzID0gTlVMTDsKIAogCQlpZiAob3V0cHV0LT50dW5fa2V5LnR1bl9mbGFncyAmIFRVTk5FTF9PUFRJT05TX1BSRVNFTlQpCi0JCQlvcHRzID0gR0VORVZFX09QVFMob3V0cHV0LCBzd2tleS0+dHVuX29wdHNfbGVuKTsKKwkJCW9wdHMgPSBUVU5fTUVUQURBVEFfT1BUUyhvdXRwdXQsIHN3a2V5LT50dW5fb3B0c19sZW4pOwogCiAJCWlmIChpcHY0X3R1bl90b19ubGF0dHIoc2tiLCAmb3V0cHV0LT50dW5fa2V5LCBvcHRzLAogCQkJCSAgICAgICBzd2tleS0+dHVuX29wdHNfbGVuKSkKQEAgLTEzNDYsNiArMTQ4NCw0OSBAQAogCXJldHVybiAtRU1TR1NJWkU7CiB9CiAKK2ludCBvdnNfbmxhX3B1dF9rZXkoY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICpzd2tleSwKKwkJICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqb3V0cHV0LCBpbnQgYXR0ciwgYm9vbCBpc19tYXNrLAorCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBubGF0dHIgKm5sYTsKKworCW5sYSA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgYXR0cik7CisJaWYgKCFubGEpCisJCXJldHVybiAtRU1TR1NJWkU7CisJZXJyID0gX19vdnNfbmxhX3B1dF9rZXkoc3drZXksIG91dHB1dCwgaXNfbWFzaywgc2tiKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCW5sYV9uZXN0X2VuZChza2IsIG5sYSk7CisKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovCitpbnQgb3ZzX25sYV9wdXRfaWRlbnRpZmllcihjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAob3ZzX2lkZW50aWZpZXJfaXNfdWZpZCgmZmxvdy0+aWQpKQorCQlyZXR1cm4gbmxhX3B1dChza2IsIE9WU19GTE9XX0FUVFJfVUZJRCwgZmxvdy0+aWQudWZpZF9sZW4sCisJCQkgICAgICAgZmxvdy0+aWQudWZpZCk7CisKKwlyZXR1cm4gb3ZzX25sYV9wdXRfa2V5KGZsb3ctPmlkLnVubWFza2VkX2tleSwgZmxvdy0+aWQudW5tYXNrZWRfa2V5LAorCQkJICAgICAgIE9WU19GTE9XX0FUVFJfS0VZLCBmYWxzZSwgc2tiKTsKK30KKworLyogQ2FsbGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovCitpbnQgb3ZzX25sYV9wdXRfbWFza2VkX2tleShjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gb3ZzX25sYV9wdXRfa2V5KCZmbG93LT5tYXNrLT5rZXksICZmbG93LT5rZXksCisJCQkJT1ZTX0ZMT1dfQVRUUl9LRVksIGZhbHNlLCBza2IpOworfQorCisvKiBDYWxsZWQgd2l0aCBvdnNfbXV0ZXggb3IgUkNVIHJlYWQgbG9jay4gKi8KK2ludCBvdnNfbmxhX3B1dF9tYXNrKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXJldHVybiBvdnNfbmxhX3B1dF9rZXkoJmZsb3ctPmtleSwgJmZsb3ctPm1hc2stPmtleSwKKwkJCQlPVlNfRkxPV19BVFRSX01BU0ssIHRydWUsIHNrYik7Cit9CisKICNkZWZpbmUgTUFYX0FDVElPTlNfQlVGU0laRQkoMzIgKiAxMDI0KQogCiBzdGF0aWMgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqbmxhX2FsbG9jX2Zsb3dfYWN0aW9ucyhpbnQgc2l6ZSwgYm9vbCBsb2cpCkBAIC0xNTE0LDE2ICsxNjk1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2YWxpZGF0ZV90cF9wb3J0KGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqZmxvd19rZXksCi0JCQkgICAgX19iZTE2IGV0aF90eXBlKQotewotCWlmICgoZXRoX3R5cGUgPT0gaHRvbnMoRVRIX1BfSVApIHx8IGV0aF90eXBlID09IGh0b25zKEVUSF9QX0lQVjYpKSAmJgotCSAgICAoZmxvd19rZXktPnRwLnNyYyB8fCBmbG93X2tleS0+dHAuZHN0KSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQogdm9pZCBvdnNfbWF0Y2hfaW5pdChzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gsCiAJCSAgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSwKIAkJICAgIHN0cnVjdCBzd19mbG93X21hc2sgKm1hc2spCkBAIC0xNTQwLDYgKzE3MTEsMzQgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgdmFsaWRhdGVfZ2VuZXZlX29wdHMoc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpCit7CisJc3RydWN0IGdlbmV2ZV9vcHQgKm9wdGlvbjsKKwlpbnQgb3B0c19sZW4gPSBrZXktPnR1bl9vcHRzX2xlbjsKKwlib29sIGNyaXRfb3B0ID0gZmFsc2U7CisKKwlvcHRpb24gPSAoc3RydWN0IGdlbmV2ZV9vcHQgKilUVU5fTUVUQURBVEFfT1BUUyhrZXksIGtleS0+dHVuX29wdHNfbGVuKTsKKwl3aGlsZSAob3B0c19sZW4gPiAwKSB7CisJCWludCBsZW47CisKKwkJaWYgKG9wdHNfbGVuIDwgc2l6ZW9mKCpvcHRpb24pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbGVuID0gc2l6ZW9mKCpvcHRpb24pICsgb3B0aW9uLT5sZW5ndGggKiA0OworCQlpZiAobGVuID4gb3B0c19sZW4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQljcml0X29wdCB8PSAhIShvcHRpb24tPnR5cGUgJiBHRU5FVkVfQ1JJVF9PUFRfVFlQRSk7CisKKwkJb3B0aW9uID0gKHN0cnVjdCBnZW5ldmVfb3B0ICopKCh1OCAqKW9wdGlvbiArIGxlbik7CisJCW9wdHNfbGVuIC09IGxlbjsKKwl9OworCisJa2V5LT50dW5fa2V5LnR1bl9mbGFncyB8PSBjcml0X29wdCA/IFRVTk5FTF9DUklUX09QVCA6IDA7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJCQkJICAgICBzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICoqc2ZhLCBib29sIGxvZykKIHsKQEAgLTE1NDcsMzYgKzE3NDYsMjMgQEAKIAlzdHJ1Y3Qgc3dfZmxvd19rZXkga2V5OwogCXN0cnVjdCBvdnNfdHVubmVsX2luZm8gKnR1bl9pbmZvOwogCXN0cnVjdCBubGF0dHIgKmE7Ci0JaW50IGVyciwgc3RhcnQ7CisJaW50IGVyciwgc3RhcnQsIG9wdHNfdHlwZTsKIAogCW92c19tYXRjaF9pbml0KCZtYXRjaCwgJmtleSwgTlVMTCk7Ci0JZXJyID0gaXB2NF90dW5fZnJvbV9ubGF0dHIobmxhX2RhdGEoYXR0ciksICZtYXRjaCwgZmFsc2UsIGxvZyk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwlvcHRzX3R5cGUgPSBpcHY0X3R1bl9mcm9tX25sYXR0cihubGFfZGF0YShhdHRyKSwgJm1hdGNoLCBmYWxzZSwgbG9nKTsKKwlpZiAob3B0c190eXBlIDwgMCkKKwkJcmV0dXJuIG9wdHNfdHlwZTsKIAogCWlmIChrZXkudHVuX29wdHNfbGVuKSB7Ci0JCXN0cnVjdCBnZW5ldmVfb3B0ICpvcHRpb24gPSBHRU5FVkVfT1BUUygma2V5LAotCQkJCQkJCWtleS50dW5fb3B0c19sZW4pOwotCQlpbnQgb3B0c19sZW4gPSBrZXkudHVuX29wdHNfbGVuOwotCQlib29sIGNyaXRfb3B0ID0gZmFsc2U7Ci0KLQkJd2hpbGUgKG9wdHNfbGVuID4gMCkgewotCQkJaW50IGxlbjsKLQotCQkJaWYgKG9wdHNfbGVuIDwgc2l6ZW9mKCpvcHRpb24pKQotCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCQlsZW4gPSBzaXplb2YoKm9wdGlvbikgKyBvcHRpb24tPmxlbmd0aCAqIDQ7Ci0JCQlpZiAobGVuID4gb3B0c19sZW4pCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCWNyaXRfb3B0IHw9ICEhKG9wdGlvbi0+dHlwZSAmIEdFTkVWRV9DUklUX09QVF9UWVBFKTsKLQotCQkJb3B0aW9uID0gKHN0cnVjdCBnZW5ldmVfb3B0ICopKCh1OCAqKW9wdGlvbiArIGxlbik7Ci0JCQlvcHRzX2xlbiAtPSBsZW47Ci0JCX07Ci0KLQkJa2V5LnR1bl9rZXkudHVuX2ZsYWdzIHw9IGNyaXRfb3B0ID8gVFVOTkVMX0NSSVRfT1BUIDogMDsKKwkJc3dpdGNoIChvcHRzX3R5cGUpIHsKKwkJY2FzZSBPVlNfVFVOTkVMX0tFWV9BVFRSX0dFTkVWRV9PUFRTOgorCQkJZXJyID0gdmFsaWRhdGVfZ2VuZXZlX29wdHMoJmtleSk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlyZXR1cm4gZXJyOworCQkJYnJlYWs7CisJCWNhc2UgT1ZTX1RVTk5FTF9LRVlfQVRUUl9WWExBTl9PUFRTOgorCQkJYnJlYWs7CisJCX0KIAl9OwogCiAJc3RhcnQgPSBhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzZmEsIE9WU19BQ1RJT05fQVRUUl9TRVQsIGxvZyk7CkBAIC0xNTk3LDkgKzE3ODMsOSBAQAogCQkgKiBldmVyeXRoaW5nIGVsc2Ugd2lsbCBnbyBhd2F5IGFmdGVyIGZsb3cgc2V0dXAuIFdlIGNhbiBhcHBlbmQKIAkJICogaXQgdG8gdHVuX2luZm8gYW5kIHRoZW4gcG9pbnQgdGhlcmUuCiAJCSAqLwotCQltZW1jcHkoKHR1bl9pbmZvICsgMSksIEdFTkVWRV9PUFRTKCZrZXksIGtleS50dW5fb3B0c19sZW4pLAotCQkgICAgICAga2V5LnR1bl9vcHRzX2xlbik7Ci0JCXR1bl9pbmZvLT5vcHRpb25zID0gKHN0cnVjdCBnZW5ldmVfb3B0ICopKHR1bl9pbmZvICsgMSk7CisJCW1lbWNweSgodHVuX2luZm8gKyAxKSwKKwkJICAgICAgIFRVTl9NRVRBREFUQV9PUFRTKCZrZXksIGtleS50dW5fb3B0c19sZW4pLCBrZXkudHVuX29wdHNfbGVuKTsKKwkJdHVuX2luZm8tPm9wdGlvbnMgPSAodHVuX2luZm8gKyAxKTsKIAl9IGVsc2UgewogCQl0dW5faW5mby0+b3B0aW9ucyA9IE5VTEw7CiAJfQpAQCAtMTYwOSwyMSArMTc5NSw0MyBAQAogCXJldHVybiBlcnI7CiB9CiAKKy8qIFJldHVybiBmYWxzZSBpZiB0aGVyZSBhcmUgYW55IG5vbi1tYXNrZWQgYml0cyBzZXQuCisgKiBNYXNrIGZvbGxvd3MgZGF0YSBpbW1lZGlhdGVseSwgYmVmb3JlIGFueSBuZXRsaW5rIHBhZGRpbmcuCisgKi8KK3N0YXRpYyBib29sIHZhbGlkYXRlX21hc2tlZCh1OCAqZGF0YSwgaW50IGxlbikKK3sKKwl1OCAqbWFzayA9IGRhdGEgKyBsZW47CisKKwl3aGlsZSAobGVuLS0pCisJCWlmICgqZGF0YSsrICYgfiptYXNrKyspCisJCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGludCB2YWxpZGF0ZV9zZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYSwKIAkJCWNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqZmxvd19rZXksCiAJCQlzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICoqc2ZhLAotCQkJYm9vbCAqc2V0X3R1biwgX19iZTE2IGV0aF90eXBlLCBib29sIGxvZykKKwkJCWJvb2wgKnNraXBfY29weSwgX19iZTE2IGV0aF90eXBlLCBib29sIG1hc2tlZCwgYm9vbCBsb2cpCiB7CiAJY29uc3Qgc3RydWN0IG5sYXR0ciAqb3ZzX2tleSA9IG5sYV9kYXRhKGEpOwogCWludCBrZXlfdHlwZSA9IG5sYV90eXBlKG92c19rZXkpOworCXNpemVfdCBrZXlfbGVuOwogCiAJLyogVGhlcmUgY2FuIGJlIG9ubHkgb25lIGtleSBpbiBhIGFjdGlvbiAqLwogCWlmIChubGFfdG90YWxfc2l6ZShubGFfbGVuKG92c19rZXkpKSAhPSBubGFfbGVuKGEpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWtleV9sZW4gPSBubGFfbGVuKG92c19rZXkpOworCWlmIChtYXNrZWQpCisJCWtleV9sZW4gLz0gMjsKKwogCWlmIChrZXlfdHlwZSA+IE9WU19LRVlfQVRUUl9NQVggfHwKLQkgICAgKG92c19rZXlfbGVuc1trZXlfdHlwZV0gIT0gbmxhX2xlbihvdnNfa2V5KSAmJgotCSAgICAgb3ZzX2tleV9sZW5zW2tleV90eXBlXSAhPSAtMSkpCisJICAgIChvdnNfa2V5X2xlbnNba2V5X3R5cGVdLmxlbiAhPSBrZXlfbGVuICYmCisJICAgICBvdnNfa2V5X2xlbnNba2V5X3R5cGVdLmxlbiAhPSBPVlNfQVRUUl9ORVNURUQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtYXNrZWQgJiYgIXZhbGlkYXRlX21hc2tlZChubGFfZGF0YShvdnNfa2V5KSwga2V5X2xlbikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3dpdGNoIChrZXlfdHlwZSkgewpAQCAtMTY0MCw3ICsxODQ4LDEwIEBACiAJCWlmIChldGhfcF9tcGxzKGV0aF90eXBlKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCSpzZXRfdHVuID0gdHJ1ZTsKKwkJaWYgKG1hc2tlZCkKKwkJCXJldHVybiAtRUlOVkFMOyAvKiBNYXNrZWQgdHVubmVsIHNldCBub3Qgc3VwcG9ydGVkLiAqLworCisJCSpza2lwX2NvcHkgPSB0cnVlOwogCQllcnIgPSB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuKGEsIHNmYSwgbG9nKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CkBAIC0xNjUwLDQ4ICsxODYxLDY2IEBACiAJCWlmIChldGhfdHlwZSAhPSBodG9ucyhFVEhfUF9JUCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoIWZsb3dfa2V5LT5pcC5wcm90bykKLQkJCXJldHVybiAtRUlOVkFMOwotCiAJCWlwdjRfa2V5ID0gbmxhX2RhdGEob3ZzX2tleSk7Ci0JCWlmIChpcHY0X2tleS0+aXB2NF9wcm90byAhPSBmbG93X2tleS0+aXAucHJvdG8pCi0JCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoaXB2NF9rZXktPmlwdjRfZnJhZyAhPSBmbG93X2tleS0+aXAuZnJhZykKLQkJCXJldHVybiAtRUlOVkFMOworCQlpZiAobWFza2VkKSB7CisJCQljb25zdCBzdHJ1Y3Qgb3ZzX2tleV9pcHY0ICptYXNrID0gaXB2NF9rZXkgKyAxOwogCisJCQkvKiBOb24td3JpdGVhYmxlIGZpZWxkcy4gKi8KKwkJCWlmIChtYXNrLT5pcHY0X3Byb3RvIHx8IG1hc2stPmlwdjRfZnJhZykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCWlmIChpcHY0X2tleS0+aXB2NF9wcm90byAhPSBmbG93X2tleS0+aXAucHJvdG8pCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWlmIChpcHY0X2tleS0+aXB2NF9mcmFnICE9IGZsb3dfa2V5LT5pcC5mcmFnKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBPVlNfS0VZX0FUVFJfSVBWNjoKIAkJaWYgKGV0aF90eXBlICE9IGh0b25zKEVUSF9QX0lQVjYpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKCFmbG93X2tleS0+aXAucHJvdG8pCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQogCQlpcHY2X2tleSA9IG5sYV9kYXRhKG92c19rZXkpOwotCQlpZiAoaXB2Nl9rZXktPmlwdjZfcHJvdG8gIT0gZmxvd19rZXktPmlwLnByb3RvKQotCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKGlwdjZfa2V5LT5pcHY2X2ZyYWcgIT0gZmxvd19rZXktPmlwLmZyYWcpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKG1hc2tlZCkgeworCQkJY29uc3Qgc3RydWN0IG92c19rZXlfaXB2NiAqbWFzayA9IGlwdjZfa2V5ICsgMTsKIAorCQkJLyogTm9uLXdyaXRlYWJsZSBmaWVsZHMuICovCisJCQlpZiAobWFzay0+aXB2Nl9wcm90byB8fCBtYXNrLT5pcHY2X2ZyYWcpCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCS8qIEludmFsaWQgYml0cyBpbiB0aGUgZmxvdyBsYWJlbCBtYXNrPyAqLworCQkJaWYgKG50b2hsKG1hc2stPmlwdjZfbGFiZWwpICYgMHhGRkYwMDAwMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCWlmIChpcHY2X2tleS0+aXB2Nl9wcm90byAhPSBmbG93X2tleS0+aXAucHJvdG8pCisJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCWlmIChpcHY2X2tleS0+aXB2Nl9mcmFnICE9IGZsb3dfa2V5LT5pcC5mcmFnKQorCQkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCWlmIChudG9obChpcHY2X2tleS0+aXB2Nl9sYWJlbCkgJiAweEZGRjAwMDAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJYnJlYWs7CiAKIAljYXNlIE9WU19LRVlfQVRUUl9UQ1A6Ci0JCWlmIChmbG93X2tleS0+aXAucHJvdG8gIT0gSVBQUk9UT19UQ1ApCisJCWlmICgoZXRoX3R5cGUgIT0gaHRvbnMoRVRIX1BfSVApICYmCisJCSAgICAgZXRoX3R5cGUgIT0gaHRvbnMoRVRIX1BfSVBWNikpIHx8CisJCSAgICBmbG93X2tleS0+aXAucHJvdG8gIT0gSVBQUk9UT19UQ1ApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlyZXR1cm4gdmFsaWRhdGVfdHBfcG9ydChmbG93X2tleSwgZXRoX3R5cGUpOworCQlicmVhazsKIAogCWNhc2UgT1ZTX0tFWV9BVFRSX1VEUDoKLQkJaWYgKGZsb3dfa2V5LT5pcC5wcm90byAhPSBJUFBST1RPX1VEUCkKKwkJaWYgKChldGhfdHlwZSAhPSBodG9ucyhFVEhfUF9JUCkgJiYKKwkJICAgICBldGhfdHlwZSAhPSBodG9ucyhFVEhfUF9JUFY2KSkgfHwKKwkJICAgIGZsb3dfa2V5LT5pcC5wcm90byAhPSBJUFBST1RPX1VEUCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXJldHVybiB2YWxpZGF0ZV90cF9wb3J0KGZsb3dfa2V5LCBldGhfdHlwZSk7CisJCWJyZWFrOwogCiAJY2FzZSBPVlNfS0VZX0FUVFJfTVBMUzoKIAkJaWYgKCFldGhfcF9tcGxzKGV0aF90eXBlKSkKQEAgLTE2OTksMTUgKzE5MjgsNDUgQEAKIAkJYnJlYWs7CiAKIAljYXNlIE9WU19LRVlfQVRUUl9TQ1RQOgotCQlpZiAoZmxvd19rZXktPmlwLnByb3RvICE9IElQUFJPVE9fU0NUUCkKKwkJaWYgKChldGhfdHlwZSAhPSBodG9ucyhFVEhfUF9JUCkgJiYKKwkJICAgICBldGhfdHlwZSAhPSBodG9ucyhFVEhfUF9JUFY2KSkgfHwKKwkJICAgIGZsb3dfa2V5LT5pcC5wcm90byAhPSBJUFBST1RPX1NDVFApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlyZXR1cm4gdmFsaWRhdGVfdHBfcG9ydChmbG93X2tleSwgZXRoX3R5cGUpOworCQlicmVhazsKIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCS8qIENvbnZlcnQgbm9uLW1hc2tlZCBub24tdHVubmVsIHNldCBhY3Rpb25zIHRvIG1hc2tlZCBzZXQgYWN0aW9ucy4gKi8KKwlpZiAoIW1hc2tlZCAmJiBrZXlfdHlwZSAhPSBPVlNfS0VZX0FUVFJfVFVOTkVMKSB7CisJCWludCBzdGFydCwgbGVuID0ga2V5X2xlbiAqIDI7CisJCXN0cnVjdCBubGF0dHIgKmF0OworCisJCSpza2lwX2NvcHkgPSB0cnVlOworCisJCXN0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLAorCQkJCQkJT1ZTX0FDVElPTl9BVFRSX1NFVF9UT19NQVNLRUQsCisJCQkJCQlsb2cpOworCQlpZiAoc3RhcnQgPCAwKQorCQkJcmV0dXJuIHN0YXJ0OworCisJCWF0ID0gX19hZGRfYWN0aW9uKHNmYSwga2V5X3R5cGUsIE5VTEwsIGxlbiwgbG9nKTsKKwkJaWYgKElTX0VSUihhdCkpCisJCQlyZXR1cm4gUFRSX0VSUihhdCk7CisKKwkJbWVtY3B5KG5sYV9kYXRhKGF0KSwgbmxhX2RhdGEob3ZzX2tleSksIGtleV9sZW4pOyAvKiBLZXkuICovCisJCW1lbXNldChubGFfZGF0YShhdCkgKyBrZXlfbGVuLCAweGZmLCBrZXlfbGVuKTsgICAgLyogTWFzay4gKi8KKwkJLyogQ2xlYXIgbm9uLXdyaXRlYWJsZSBiaXRzIGZyb20gb3RoZXJ3aXNlIHdyaXRlYWJsZSBmaWVsZHMuICovCisJCWlmIChrZXlfdHlwZSA9PSBPVlNfS0VZX0FUVFJfSVBWNikgeworCQkJc3RydWN0IG92c19rZXlfaXB2NiAqbWFzayA9IG5sYV9kYXRhKGF0KSArIGtleV9sZW47CisKKwkJCW1hc2stPmlwdjZfbGFiZWwgJj0gaHRvbmwoMHgwMDBGRkZGRik7CisJCX0KKwkJYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTc2OSw2ICsyMDI4LDcgQEAKIAkJCVtPVlNfQUNUSU9OX0FUVFJfUFVTSF9WTEFOXSA9IHNpemVvZihzdHJ1Y3Qgb3ZzX2FjdGlvbl9wdXNoX3ZsYW4pLAogCQkJW09WU19BQ1RJT05fQVRUUl9QT1BfVkxBTl0gPSAwLAogCQkJW09WU19BQ1RJT05fQVRUUl9TRVRdID0gKHUzMiktMSwKKwkJCVtPVlNfQUNUSU9OX0FUVFJfU0VUX01BU0tFRF0gPSAodTMyKS0xLAogCQkJW09WU19BQ1RJT05fQVRUUl9TQU1QTEVdID0gKHUzMiktMSwKIAkJCVtPVlNfQUNUSU9OX0FUVFJfSEFTSF0gPSBzaXplb2Yoc3RydWN0IG92c19hY3Rpb25faGFzaCkKIAkJfTsKQEAgLTE4NjQsNyArMjEyNCwxNCBAQAogCiAJCWNhc2UgT1ZTX0FDVElPTl9BVFRSX1NFVDoKIAkJCWVyciA9IHZhbGlkYXRlX3NldChhLCBrZXksIHNmYSwKLQkJCQkJICAgJnNraXBfY29weSwgZXRoX3R5cGUsIGxvZyk7CisJCQkJCSAgICZza2lwX2NvcHksIGV0aF90eXBlLCBmYWxzZSwgbG9nKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJCWJyZWFrOworCisJCWNhc2UgT1ZTX0FDVElPTl9BVFRSX1NFVF9NQVNLRUQ6CisJCQllcnIgPSB2YWxpZGF0ZV9zZXQoYSwga2V5LCBzZmEsCisJCQkJCSAgICZza2lwX2NvcHksIGV0aF90eXBlLCB0cnVlLCBsb2cpOwogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQkJYnJlYWs7CkBAIC0xODk0LDYgKzIxNjEsNyBAQAogCXJldHVybiAwOwogfQogCisvKiAna2V5JyBtdXN0IGJlIHRoZSBtYXNrZWQga2V5LiAqLwogaW50IG92c19ubGFfY29weV9hY3Rpb25zKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJCQkgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksCiAJCQkgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqKnNmYSwgYm9vbCBsb2cpCkBAIC0xOTgxLDYgKzIyNDksMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtYXNrZWRfc2V0X2FjdGlvbl90b19zZXRfYWN0aW9uX2F0dHIoY29uc3Qgc3RydWN0IG5sYXR0ciAqYSwKKwkJCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7CisJY29uc3Qgc3RydWN0IG5sYXR0ciAqb3ZzX2tleSA9IG5sYV9kYXRhKGEpOworCXNpemVfdCBrZXlfbGVuID0gbmxhX2xlbihvdnNfa2V5KSAvIDI7CisKKwkvKiBSZXZlcnQgdGhlIGNvbnZlcnNpb24gd2UgZGlkIGZyb20gYSBub24tbWFza2VkIHNldCBhY3Rpb24gdG8KKwkgKiBtYXNrZWQgc2V0IGFjdGlvbi4KKwkgKi8KKwlpZiAobmxhX3B1dChza2IsIE9WU19BQ1RJT05fQVRUUl9TRVQsIG5sYV9sZW4oYSkgLSBrZXlfbGVuLCBvdnNfa2V5KSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCXJldHVybiAwOworfQorCiBpbnQgb3ZzX25sYV9wdXRfYWN0aW9ucyhjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCBpbnQgbGVuLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWNvbnN0IHN0cnVjdCBubGF0dHIgKmE7CkBAIC0xOTk2LDYgKzIyNzksMTIgQEAKIAkJCQlyZXR1cm4gZXJyOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBPVlNfQUNUSU9OX0FUVFJfU0VUX1RPX01BU0tFRDoKKwkJCWVyciA9IG1hc2tlZF9zZXRfYWN0aW9uX3RvX3NldF9hY3Rpb25fYXR0cihhLCBza2IpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQkJYnJlYWs7CisKIAkJY2FzZSBPVlNfQUNUSU9OX0FUVFJfU0FNUExFOgogCQkJZXJyID0gc2FtcGxlX2FjdGlvbl90b19hdHRyKGEsIHNrYik7CiAJCQlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5oIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5oCmluZGV4IDU3N2YxMmIuLjVjM2Q3NWIgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuaAorKysgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmgKQEAgLTQzLDE2ICs0MywyNSBAQAogdm9pZCBvdnNfbWF0Y2hfaW5pdChzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gsCiAJCSAgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSwgc3RydWN0IHN3X2Zsb3dfbWFzayAqbWFzayk7CiAKLWludCBvdnNfbmxhX3B1dF9mbG93KGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLAotCQkgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK2ludCBvdnNfbmxhX3B1dF9rZXkoY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICosIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLAorCQkgICAgaW50IGF0dHIsIGJvb2wgaXNfbWFzaywgc3RydWN0IHNrX2J1ZmYgKik7CiBpbnQgb3ZzX25sYV9nZXRfZmxvd19tZXRhZGF0YShjb25zdCBzdHJ1Y3QgbmxhdHRyICosIHN0cnVjdCBzd19mbG93X2tleSAqLAogCQkJICAgICAgYm9vbCBsb2cpOwogCitpbnQgb3ZzX25sYV9wdXRfaWRlbnRpZmllcihjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgb3ZzX25sYV9wdXRfbWFza2VkX2tleShjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgb3ZzX25sYV9wdXRfbWFzayhjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKIGludCBvdnNfbmxhX2dldF9tYXRjaChzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICprZXksCiAJCSAgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKm1hc2ssIGJvb2wgbG9nKTsKIGludCBvdnNfbmxhX3B1dF9lZ3Jlc3NfdHVubmVsX2tleShzdHJ1Y3Qgc2tfYnVmZiAqLAogCQkJCSAgY29uc3Qgc3RydWN0IG92c190dW5uZWxfaW5mbyAqKTsKIAorYm9vbCBvdnNfbmxhX2dldF91ZmlkKHN0cnVjdCBzd19mbG93X2lkICosIGNvbnN0IHN0cnVjdCBubGF0dHIgKiwgYm9vbCBsb2cpOworaW50IG92c19ubGFfZ2V0X2lkZW50aWZpZXIoc3RydWN0IHN3X2Zsb3dfaWQgKnNmaWQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKnVmaWQsCisJCQkgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSwgYm9vbCBsb2cpOwordTMyIG92c19ubGFfZ2V0X3VmaWRfZmxhZ3MoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cik7CisKIGludCBvdnNfbmxhX2NvcHlfYWN0aW9ucyhjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLAogCQkJIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LAogCQkJIHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKipzZmEsIGJvb2wgbG9nKTsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jCmluZGV4IDU4OTliZjEuLjQ2MTNkZjggMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMKKysrIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYwpAQCAtODUsNiArODUsOCBAQAogCiAJZmxvdy0+c2ZfYWN0cyA9IE5VTEw7CiAJZmxvdy0+bWFzayA9IE5VTEw7CisJZmxvdy0+aWQudW5tYXNrZWRfa2V5ID0gTlVMTDsKKwlmbG93LT5pZC51ZmlkX2xlbiA9IDA7CiAJZmxvdy0+c3RhdHNfbGFzdF93cml0ZXIgPSBOVU1BX05PX05PREU7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBkZWZhdWx0IHN0YXQgbm9kZS4gKi8KQEAgLTEzOSw2ICsxNDEsOCBAQAogewogCWludCBub2RlOwogCisJaWYgKG92c19pZGVudGlmaWVyX2lzX2tleSgmZmxvdy0+aWQpKQorCQlrZnJlZShmbG93LT5pZC51bm1hc2tlZF9rZXkpOwogCWtmcmVlKChzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zIF9fZm9yY2UgKilmbG93LT5zZl9hY3RzKTsKIAlmb3JfZWFjaF9ub2RlKG5vZGUpCiAJCWlmIChmbG93LT5zdGF0c1tub2RlXSkKQEAgLTIwMCwxOCArMjA0LDI4IEBACiAKIGludCBvdnNfZmxvd190YmxfaW5pdChzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUpCiB7Ci0Jc3RydWN0IHRhYmxlX2luc3RhbmNlICp0aTsKKwlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpLCAqdWZpZF90aTsKIAogCXRpID0gdGFibGVfaW5zdGFuY2VfYWxsb2MoVEJMX01JTl9CVUNLRVRTKTsKIAogCWlmICghdGkpCiAJCXJldHVybiAtRU5PTUVNOwogCisJdWZpZF90aSA9IHRhYmxlX2luc3RhbmNlX2FsbG9jKFRCTF9NSU5fQlVDS0VUUyk7CisJaWYgKCF1ZmlkX3RpKQorCQlnb3RvIGZyZWVfdGk7CisKIAlyY3VfYXNzaWduX3BvaW50ZXIodGFibGUtPnRpLCB0aSk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHRhYmxlLT51ZmlkX3RpLCB1ZmlkX3RpKTsKIAlJTklUX0xJU1RfSEVBRCgmdGFibGUtPm1hc2tfbGlzdCk7CiAJdGFibGUtPmxhc3RfcmVoYXNoID0gamlmZmllczsKIAl0YWJsZS0+Y291bnQgPSAwOworCXRhYmxlLT51ZmlkX2NvdW50ID0gMDsKIAlyZXR1cm4gMDsKKworZnJlZV90aToKKwlfX3RhYmxlX2luc3RhbmNlX2Rlc3Ryb3kodGkpOworCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgdm9pZCBmbG93X3RibF9kZXN0cm95X3JjdV9jYihzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKQEAgLTIyMSwxMyArMjM1LDE2IEBACiAJX190YWJsZV9pbnN0YW5jZV9kZXN0cm95KHRpKTsKIH0KIAotc3RhdGljIHZvaWQgdGFibGVfaW5zdGFuY2VfZGVzdHJveShzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpLCBib29sIGRlZmVycmVkKQorc3RhdGljIHZvaWQgdGFibGVfaW5zdGFuY2VfZGVzdHJveShzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpLAorCQkJCSAgIHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdWZpZF90aSwKKwkJCQkgICBib29sIGRlZmVycmVkKQogewogCWludCBpOwogCiAJaWYgKCF0aSkKIAkJcmV0dXJuOwogCisJQlVHX09OKCF1ZmlkX3RpKTsKIAlpZiAodGktPmtlZXBfZmxvd3MpCiAJCWdvdG8gc2tpcF9mbG93czsKIApAQCAtMjM2LDE4ICsyNTMsMjQgQEAKIAkJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSBmbGV4X2FycmF5X2dldCh0aS0+YnVja2V0cywgaSk7CiAJCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCQlpbnQgdmVyID0gdGktPm5vZGVfdmVyOworCQlpbnQgdWZpZF92ZXIgPSB1ZmlkX3RpLT5ub2RlX3ZlcjsKIAotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZsb3csIG4sIGhlYWQsIGhhc2hfbm9kZVt2ZXJdKSB7Ci0JCQlobGlzdF9kZWxfcmN1KCZmbG93LT5oYXNoX25vZGVbdmVyXSk7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmxvdywgbiwgaGVhZCwgZmxvd190YWJsZS5ub2RlW3Zlcl0pIHsKKwkJCWhsaXN0X2RlbF9yY3UoJmZsb3ctPmZsb3dfdGFibGUubm9kZVt2ZXJdKTsKKwkJCWlmIChvdnNfaWRlbnRpZmllcl9pc191ZmlkKCZmbG93LT5pZCkpCisJCQkJaGxpc3RfZGVsX3JjdSgmZmxvdy0+dWZpZF90YWJsZS5ub2RlW3VmaWRfdmVyXSk7CiAJCQlvdnNfZmxvd19mcmVlKGZsb3csIGRlZmVycmVkKTsKIAkJfQogCX0KIAogc2tpcF9mbG93czoKLQlpZiAoZGVmZXJyZWQpCisJaWYgKGRlZmVycmVkKSB7CiAJCWNhbGxfcmN1KCZ0aS0+cmN1LCBmbG93X3RibF9kZXN0cm95X3JjdV9jYik7Ci0JZWxzZQorCQljYWxsX3JjdSgmdWZpZF90aS0+cmN1LCBmbG93X3RibF9kZXN0cm95X3JjdV9jYik7CisJfSBlbHNlIHsKIAkJX190YWJsZV9pbnN0YW5jZV9kZXN0cm95KHRpKTsKKwkJX190YWJsZV9pbnN0YW5jZV9kZXN0cm95KHVmaWRfdGkpOworCX0KIH0KIAogLyogTm8gbmVlZCBmb3IgbG9ja2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIFJDVSBjYWxsYmFjayBvcgpAQCAtMjU2LDggKzI3OSw5IEBACiB2b2lkIG92c19mbG93X3RibF9kZXN0cm95KHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSkKIHsKIAlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyh0YWJsZS0+dGkpOworCXN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdWZpZF90aSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcodGFibGUtPnVmaWRfdGkpOwogCi0JdGFibGVfaW5zdGFuY2VfZGVzdHJveSh0aSwgZmFsc2UpOworCXRhYmxlX2luc3RhbmNlX2Rlc3Ryb3kodGksIHVmaWRfdGksIGZhbHNlKTsKIH0KIAogc3RydWN0IHN3X2Zsb3cgKm92c19mbG93X3RibF9kdW1wX25leHQoc3RydWN0IHRhYmxlX2luc3RhbmNlICp0aSwKQEAgLTI3Miw3ICsyOTYsNyBAQAogCXdoaWxlICgqYnVja2V0IDwgdGktPm5fYnVja2V0cykgewogCQlpID0gMDsKIAkJaGVhZCA9IGZsZXhfYXJyYXlfZ2V0KHRpLT5idWNrZXRzLCAqYnVja2V0KTsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGZsb3csIGhlYWQsIGhhc2hfbm9kZVt2ZXJdKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShmbG93LCBoZWFkLCBmbG93X3RhYmxlLm5vZGVbdmVyXSkgewogCQkJaWYgKGkgPCAqbGFzdCkgewogCQkJCWkrKzsKIAkJCQljb250aW51ZTsKQEAgLTI5NCwxNiArMzE4LDI2IEBACiAJCQkJKGhhc2ggJiAodGktPm5fYnVja2V0cyAtIDEpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHRhYmxlX2luc3RhbmNlX2luc2VydChzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdykKK3N0YXRpYyB2b2lkIHRhYmxlX2luc3RhbmNlX2luc2VydChzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpLAorCQkJCSAgc3RydWN0IHN3X2Zsb3cgKmZsb3cpCiB7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAKLQloZWFkID0gZmluZF9idWNrZXQodGksIGZsb3ctPmhhc2gpOwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmZmxvdy0+aGFzaF9ub2RlW3RpLT5ub2RlX3Zlcl0sIGhlYWQpOworCWhlYWQgPSBmaW5kX2J1Y2tldCh0aSwgZmxvdy0+Zmxvd190YWJsZS5oYXNoKTsKKwlobGlzdF9hZGRfaGVhZF9yY3UoJmZsb3ctPmZsb3dfdGFibGUubm9kZVt0aS0+bm9kZV92ZXJdLCBoZWFkKTsKK30KKworc3RhdGljIHZvaWQgdWZpZF90YWJsZV9pbnN0YW5jZV9pbnNlcnQoc3RydWN0IHRhYmxlX2luc3RhbmNlICp0aSwKKwkJCQkgICAgICAgc3RydWN0IHN3X2Zsb3cgKmZsb3cpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisKKwloZWFkID0gZmluZF9idWNrZXQodGksIGZsb3ctPnVmaWRfdGFibGUuaGFzaCk7CisJaGxpc3RfYWRkX2hlYWRfcmN1KCZmbG93LT51ZmlkX3RhYmxlLm5vZGVbdGktPm5vZGVfdmVyXSwgaGVhZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZsb3dfdGFibGVfY29weV9mbG93cyhzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKm9sZCwKLQkJCQkgIHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqbmV3KQorCQkJCSAgc3RydWN0IHRhYmxlX2luc3RhbmNlICpuZXcsIGJvb2wgdWZpZCkKIHsKIAlpbnQgb2xkX3ZlcjsKIAlpbnQgaTsKQEAgLTMxOCwxNSArMzUyLDIxIEBACiAKIAkJaGVhZCA9IGZsZXhfYXJyYXlfZ2V0KG9sZC0+YnVja2V0cywgaSk7CiAKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZmxvdywgaGVhZCwgaGFzaF9ub2RlW29sZF92ZXJdKQotCQkJdGFibGVfaW5zdGFuY2VfaW5zZXJ0KG5ldywgZmxvdyk7CisJCWlmICh1ZmlkKQorCQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZmxvdywgaGVhZCwKKwkJCQkJICAgICB1ZmlkX3RhYmxlLm5vZGVbb2xkX3Zlcl0pCisJCQkJdWZpZF90YWJsZV9pbnN0YW5jZV9pbnNlcnQobmV3LCBmbG93KTsKKwkJZWxzZQorCQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZmxvdywgaGVhZCwKKwkJCQkJICAgICBmbG93X3RhYmxlLm5vZGVbb2xkX3Zlcl0pCisJCQkJdGFibGVfaW5zdGFuY2VfaW5zZXJ0KG5ldywgZmxvdyk7CiAJfQogCiAJb2xkLT5rZWVwX2Zsb3dzID0gdHJ1ZTsKIH0KIAogc3RhdGljIHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGFibGVfaW5zdGFuY2VfcmVoYXNoKHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGksCi0JCQkJCSAgICBpbnQgbl9idWNrZXRzKQorCQkJCQkJICAgIGludCBuX2J1Y2tldHMsIGJvb2wgdWZpZCkKIHsKIAlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKm5ld190aTsKIApAQCAtMzM0LDMyICszNzQsNDUgQEAKIAlpZiAoIW5ld190aSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlmbG93X3RhYmxlX2NvcHlfZmxvd3ModGksIG5ld190aSk7CisJZmxvd190YWJsZV9jb3B5X2Zsb3dzKHRpLCBuZXdfdGksIHVmaWQpOwogCiAJcmV0dXJuIG5ld190aTsKIH0KIAogaW50IG92c19mbG93X3RibF9mbHVzaChzdHJ1Y3QgZmxvd190YWJsZSAqZmxvd190YWJsZSkKIHsKLQlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKm9sZF90aTsKLQlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKm5ld190aTsKKwlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKm9sZF90aSwgKm5ld190aTsKKwlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKm9sZF91ZmlkX3RpLCAqbmV3X3VmaWRfdGk7CiAKLQlvbGRfdGkgPSBvdnNsX2RlcmVmZXJlbmNlKGZsb3dfdGFibGUtPnRpKTsKIAluZXdfdGkgPSB0YWJsZV9pbnN0YW5jZV9hbGxvYyhUQkxfTUlOX0JVQ0tFVFMpOwogCWlmICghbmV3X3RpKQogCQlyZXR1cm4gLUVOT01FTTsKKwluZXdfdWZpZF90aSA9IHRhYmxlX2luc3RhbmNlX2FsbG9jKFRCTF9NSU5fQlVDS0VUUyk7CisJaWYgKCFuZXdfdWZpZF90aSkKKwkJZ290byBlcnJfZnJlZV90aTsKKworCW9sZF90aSA9IG92c2xfZGVyZWZlcmVuY2UoZmxvd190YWJsZS0+dGkpOworCW9sZF91ZmlkX3RpID0gb3ZzbF9kZXJlZmVyZW5jZShmbG93X3RhYmxlLT51ZmlkX3RpKTsKIAogCXJjdV9hc3NpZ25fcG9pbnRlcihmbG93X3RhYmxlLT50aSwgbmV3X3RpKTsKKwlyY3VfYXNzaWduX3BvaW50ZXIoZmxvd190YWJsZS0+dWZpZF90aSwgbmV3X3VmaWRfdGkpOwogCWZsb3dfdGFibGUtPmxhc3RfcmVoYXNoID0gamlmZmllczsKIAlmbG93X3RhYmxlLT5jb3VudCA9IDA7CisJZmxvd190YWJsZS0+dWZpZF9jb3VudCA9IDA7CiAKLQl0YWJsZV9pbnN0YW5jZV9kZXN0cm95KG9sZF90aSwgdHJ1ZSk7CisJdGFibGVfaW5zdGFuY2VfZGVzdHJveShvbGRfdGksIG9sZF91ZmlkX3RpLCB0cnVlKTsKIAlyZXR1cm4gMDsKKworZXJyX2ZyZWVfdGk6CisJX190YWJsZV9pbnN0YW5jZV9kZXN0cm95KG5ld190aSk7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyB1MzIgZmxvd19oYXNoKGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LCBpbnQga2V5X3N0YXJ0LAotCQkgICAgIGludCBrZXlfZW5kKQorc3RhdGljIHUzMiBmbG93X2hhc2goY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksCisJCSAgICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5X3JhbmdlICpyYW5nZSkKIHsKKwlpbnQga2V5X3N0YXJ0ID0gcmFuZ2UtPnN0YXJ0OworCWludCBrZXlfZW5kID0gcmFuZ2UtPmVuZDsKIAljb25zdCB1MzIgKmhhc2hfa2V5ID0gKGNvbnN0IHUzMiAqKSgoY29uc3QgdTggKilrZXkgKyBrZXlfc3RhcnQpOwogCWludCBoYXNoX3UzMnMgPSAoa2V5X2VuZCAtIGtleV9zdGFydCkgPj4gMjsKIApAQCAtMzk1LDE5ICs0NDgsMjAgQEAKIAogc3RhdGljIGJvb2wgZmxvd19jbXBfbWFza2VkX2tleShjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywKIAkJCQljb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSwKLQkJCQlpbnQga2V5X3N0YXJ0LCBpbnQga2V5X2VuZCkKKwkJCQljb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXlfcmFuZ2UgKnJhbmdlKQogewotCXJldHVybiBjbXBfa2V5KCZmbG93LT5rZXksIGtleSwga2V5X3N0YXJ0LCBrZXlfZW5kKTsKKwlyZXR1cm4gY21wX2tleSgmZmxvdy0+a2V5LCBrZXksIHJhbmdlLT5zdGFydCwgcmFuZ2UtPmVuZCk7CiB9CiAKLWJvb2wgb3ZzX2Zsb3dfY21wX3VubWFza2VkX2tleShjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gpCitzdGF0aWMgYm9vbCBvdnNfZmxvd19jbXBfdW5tYXNrZWRfa2V5KGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X21hdGNoICptYXRjaCkKIHsKIAlzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSA9IG1hdGNoLT5rZXk7CiAJaW50IGtleV9zdGFydCA9IGZsb3dfa2V5X3N0YXJ0KGtleSk7CiAJaW50IGtleV9lbmQgPSBtYXRjaC0+cmFuZ2UuZW5kOwogCi0JcmV0dXJuIGNtcF9rZXkoJmZsb3ctPnVubWFza2VkX2tleSwga2V5LCBrZXlfc3RhcnQsIGtleV9lbmQpOworCUJVR19PTihvdnNfaWRlbnRpZmllcl9pc191ZmlkKCZmbG93LT5pZCkpOworCXJldHVybiBjbXBfa2V5KGZsb3ctPmlkLnVubWFza2VkX2tleSwga2V5LCBrZXlfc3RhcnQsIGtleV9lbmQpOwogfQogCiBzdGF0aWMgc3RydWN0IHN3X2Zsb3cgKm1hc2tlZF9mbG93X2xvb2t1cChzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpLApAQCAtNDE2LDE4ICs0NzAsMTUgQEAKIHsKIAlzdHJ1Y3Qgc3dfZmxvdyAqZmxvdzsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlpbnQga2V5X3N0YXJ0ID0gbWFzay0+cmFuZ2Uuc3RhcnQ7Ci0JaW50IGtleV9lbmQgPSBtYXNrLT5yYW5nZS5lbmQ7CiAJdTMyIGhhc2g7CiAJc3RydWN0IHN3X2Zsb3dfa2V5IG1hc2tlZF9rZXk7CiAKIAlvdnNfZmxvd19tYXNrX2tleSgmbWFza2VkX2tleSwgdW5tYXNrZWQsIG1hc2spOwotCWhhc2ggPSBmbG93X2hhc2goJm1hc2tlZF9rZXksIGtleV9zdGFydCwga2V5X2VuZCk7CisJaGFzaCA9IGZsb3dfaGFzaCgmbWFza2VkX2tleSwgJm1hc2stPnJhbmdlKTsKIAloZWFkID0gZmluZF9idWNrZXQodGksIGhhc2gpOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShmbG93LCBoZWFkLCBoYXNoX25vZGVbdGktPm5vZGVfdmVyXSkgewotCQlpZiAoZmxvdy0+bWFzayA9PSBtYXNrICYmIGZsb3ctPmhhc2ggPT0gaGFzaCAmJgotCQkgICAgZmxvd19jbXBfbWFza2VkX2tleShmbG93LCAmbWFza2VkX2tleSwKLQkJCQkJICBrZXlfc3RhcnQsIGtleV9lbmQpKQorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShmbG93LCBoZWFkLCBmbG93X3RhYmxlLm5vZGVbdGktPm5vZGVfdmVyXSkgeworCQlpZiAoZmxvdy0+bWFzayA9PSBtYXNrICYmIGZsb3ctPmZsb3dfdGFibGUuaGFzaCA9PSBoYXNoICYmCisJCSAgICBmbG93X2NtcF9tYXNrZWRfa2V5KGZsb3csICZtYXNrZWRfa2V5LCAmbWFzay0+cmFuZ2UpKQogCQkJcmV0dXJuIGZsb3c7CiAJfQogCXJldHVybiBOVUxMOwpAQCAtNDY5LDcgKzUyMCw0OCBAQAogCS8qIEFsd2F5cyBjYWxsZWQgdW5kZXIgb3ZzLW11dGV4LiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkobWFzaywgJnRibC0+bWFza19saXN0LCBsaXN0KSB7CiAJCWZsb3cgPSBtYXNrZWRfZmxvd19sb29rdXAodGksIG1hdGNoLT5rZXksIG1hc2spOwotCQlpZiAoZmxvdyAmJiBvdnNfZmxvd19jbXBfdW5tYXNrZWRfa2V5KGZsb3csIG1hdGNoKSkgIC8qIEZvdW5kICovCisJCWlmIChmbG93ICYmIG92c19pZGVudGlmaWVyX2lzX2tleSgmZmxvdy0+aWQpICYmCisJCSAgICBvdnNfZmxvd19jbXBfdW5tYXNrZWRfa2V5KGZsb3csIG1hdGNoKSkKKwkJCXJldHVybiBmbG93OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHUzMiB1ZmlkX2hhc2goY29uc3Qgc3RydWN0IHN3X2Zsb3dfaWQgKnNmaWQpCit7CisJcmV0dXJuIGpoYXNoKHNmaWQtPnVmaWQsIHNmaWQtPnVmaWRfbGVuLCAwKTsKK30KKworc3RhdGljIGJvb2wgb3ZzX2Zsb3dfY21wX3VmaWQoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19pZCAqc2ZpZCkKK3sKKwlpZiAoZmxvdy0+aWQudWZpZF9sZW4gIT0gc2ZpZC0+dWZpZF9sZW4pCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiAhbWVtY21wKGZsb3ctPmlkLnVmaWQsIHNmaWQtPnVmaWQsIHNmaWQtPnVmaWRfbGVuKTsKK30KKworYm9vbCBvdnNfZmxvd19jbXAoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csIGNvbnN0IHN0cnVjdCBzd19mbG93X21hdGNoICptYXRjaCkKK3sKKwlpZiAob3ZzX2lkZW50aWZpZXJfaXNfdWZpZCgmZmxvdy0+aWQpKQorCQlyZXR1cm4gZmxvd19jbXBfbWFza2VkX2tleShmbG93LCBtYXRjaC0+a2V5LCAmbWF0Y2gtPnJhbmdlKTsKKworCXJldHVybiBvdnNfZmxvd19jbXBfdW5tYXNrZWRfa2V5KGZsb3csIG1hdGNoKTsKK30KKworc3RydWN0IHN3X2Zsb3cgKm92c19mbG93X3RibF9sb29rdXBfdWZpZChzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLAorCQkJCQkgY29uc3Qgc3RydWN0IHN3X2Zsb3dfaWQgKnVmaWQpCit7CisJc3RydWN0IHRhYmxlX2luc3RhbmNlICp0aSA9IHJjdV9kZXJlZmVyZW5jZV9vdnNsKHRibC0+dWZpZF90aSk7CisJc3RydWN0IHN3X2Zsb3cgKmZsb3c7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJdTMyIGhhc2g7CisKKwloYXNoID0gdWZpZF9oYXNoKHVmaWQpOworCWhlYWQgPSBmaW5kX2J1Y2tldCh0aSwgaGFzaCk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGZsb3csIGhlYWQsIHVmaWRfdGFibGUubm9kZVt0aS0+bm9kZV92ZXJdKSB7CisJCWlmIChmbG93LT51ZmlkX3RhYmxlLmhhc2ggPT0gaGFzaCAmJgorCQkgICAgb3ZzX2Zsb3dfY21wX3VmaWQoZmxvdywgdWZpZCkpCiAJCQlyZXR1cm4gZmxvdzsKIAl9CiAJcmV0dXJuIE5VTEw7CkBAIC00ODYsOSArNTc4LDEwIEBACiAJcmV0dXJuIG51bTsKIH0KIAotc3RhdGljIHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGFibGVfaW5zdGFuY2VfZXhwYW5kKHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGkpCitzdGF0aWMgc3RydWN0IHRhYmxlX2luc3RhbmNlICp0YWJsZV9pbnN0YW5jZV9leHBhbmQoc3RydWN0IHRhYmxlX2luc3RhbmNlICp0aSwKKwkJCQkJCSAgICBib29sIHVmaWQpCiB7Ci0JcmV0dXJuIHRhYmxlX2luc3RhbmNlX3JlaGFzaCh0aSwgdGktPm5fYnVja2V0cyAqIDIpOworCXJldHVybiB0YWJsZV9pbnN0YW5jZV9yZWhhc2godGksIHRpLT5uX2J1Y2tldHMgKiAyLCB1ZmlkKTsKIH0KIAogLyogUmVtb3ZlICdtYXNrJyBmcm9tIHRoZSBtYXNrIGxpc3QsIGlmIGl0IGlzIG5vdCBuZWVkZWQgYW55IG1vcmUuICovCkBAIC01MTMsMTAgKzYwNiwxNSBAQAogdm9pZCBvdnNfZmxvd190YmxfcmVtb3ZlKHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSwgc3RydWN0IHN3X2Zsb3cgKmZsb3cpCiB7CiAJc3RydWN0IHRhYmxlX2luc3RhbmNlICp0aSA9IG92c2xfZGVyZWZlcmVuY2UodGFibGUtPnRpKTsKKwlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnVmaWRfdGkgPSBvdnNsX2RlcmVmZXJlbmNlKHRhYmxlLT51ZmlkX3RpKTsKIAogCUJVR19PTih0YWJsZS0+Y291bnQgPT0gMCk7Ci0JaGxpc3RfZGVsX3JjdSgmZmxvdy0+aGFzaF9ub2RlW3RpLT5ub2RlX3Zlcl0pOworCWhsaXN0X2RlbF9yY3UoJmZsb3ctPmZsb3dfdGFibGUubm9kZVt0aS0+bm9kZV92ZXJdKTsKIAl0YWJsZS0+Y291bnQtLTsKKwlpZiAob3ZzX2lkZW50aWZpZXJfaXNfdWZpZCgmZmxvdy0+aWQpKSB7CisJCWhsaXN0X2RlbF9yY3UoJmZsb3ctPnVmaWRfdGFibGUubm9kZVt1ZmlkX3RpLT5ub2RlX3Zlcl0pOworCQl0YWJsZS0+dWZpZF9jb3VudC0tOworCX0KIAogCS8qIFJDVSBkZWxldGUgdGhlIG1hc2suICdmbG93LT5tYXNrJyBpcyBub3QgTlVMTGVkLCBhcyBpdCBzaG91bGQgYmUKIAkgKiBhY2Nlc3NpYmxlIGFzIGxvbmcgYXMgdGhlIFJDVSByZWFkIGxvY2sgaXMgaGVsZC4KQEAgLTU4NSwzNCArNjgzLDY0IEBACiB9CiAKIC8qIE11c3QgYmUgY2FsbGVkIHdpdGggT1ZTIG11dGV4IGhlbGQuICovCi1pbnQgb3ZzX2Zsb3dfdGJsX2luc2VydChzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUsIHN0cnVjdCBzd19mbG93ICpmbG93LAotCQkJY29uc3Qgc3RydWN0IHN3X2Zsb3dfbWFzayAqbWFzaykKK3N0YXRpYyB2b2lkIGZsb3dfa2V5X2luc2VydChzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUsIHN0cnVjdCBzd19mbG93ICpmbG93KQogewogCXN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqbmV3X3RpID0gTlVMTDsKIAlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpOwotCWludCBlcnI7CiAKLQllcnIgPSBmbG93X21hc2tfaW5zZXJ0KHRhYmxlLCBmbG93LCBtYXNrKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZmxvdy0+aGFzaCA9IGZsb3dfaGFzaCgmZmxvdy0+a2V5LCBmbG93LT5tYXNrLT5yYW5nZS5zdGFydCwKLQkJCWZsb3ctPm1hc2stPnJhbmdlLmVuZCk7CisJZmxvdy0+Zmxvd190YWJsZS5oYXNoID0gZmxvd19oYXNoKCZmbG93LT5rZXksICZmbG93LT5tYXNrLT5yYW5nZSk7CiAJdGkgPSBvdnNsX2RlcmVmZXJlbmNlKHRhYmxlLT50aSk7CiAJdGFibGVfaW5zdGFuY2VfaW5zZXJ0KHRpLCBmbG93KTsKIAl0YWJsZS0+Y291bnQrKzsKIAogCS8qIEV4cGFuZCB0YWJsZSwgaWYgbmVjZXNzYXJ5LCB0byBtYWtlIHJvb20uICovCiAJaWYgKHRhYmxlLT5jb3VudCA+IHRpLT5uX2J1Y2tldHMpCi0JCW5ld190aSA9IHRhYmxlX2luc3RhbmNlX2V4cGFuZCh0aSk7CisJCW5ld190aSA9IHRhYmxlX2luc3RhbmNlX2V4cGFuZCh0aSwgZmFsc2UpOwogCWVsc2UgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGFibGUtPmxhc3RfcmVoYXNoICsgUkVIQVNIX0lOVEVSVkFMKSkKLQkJbmV3X3RpID0gdGFibGVfaW5zdGFuY2VfcmVoYXNoKHRpLCB0aS0+bl9idWNrZXRzKTsKKwkJbmV3X3RpID0gdGFibGVfaW5zdGFuY2VfcmVoYXNoKHRpLCB0aS0+bl9idWNrZXRzLCBmYWxzZSk7CiAKIAlpZiAobmV3X3RpKSB7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcih0YWJsZS0+dGksIG5ld190aSk7Ci0JCXRhYmxlX2luc3RhbmNlX2Rlc3Ryb3kodGksIHRydWUpOworCQljYWxsX3JjdSgmdGktPnJjdSwgZmxvd190YmxfZGVzdHJveV9yY3VfY2IpOwogCQl0YWJsZS0+bGFzdF9yZWhhc2ggPSBqaWZmaWVzOwogCX0KK30KKworLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBPVlMgbXV0ZXggaGVsZC4gKi8KK3N0YXRpYyB2b2lkIGZsb3dfdWZpZF9pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdykKK3sKKwlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpOworCisJZmxvdy0+dWZpZF90YWJsZS5oYXNoID0gdWZpZF9oYXNoKCZmbG93LT5pZCk7CisJdGkgPSBvdnNsX2RlcmVmZXJlbmNlKHRhYmxlLT51ZmlkX3RpKTsKKwl1ZmlkX3RhYmxlX2luc3RhbmNlX2luc2VydCh0aSwgZmxvdyk7CisJdGFibGUtPnVmaWRfY291bnQrKzsKKworCS8qIEV4cGFuZCB0YWJsZSwgaWYgbmVjZXNzYXJ5LCB0byBtYWtlIHJvb20uICovCisJaWYgKHRhYmxlLT51ZmlkX2NvdW50ID4gdGktPm5fYnVja2V0cykgeworCQlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKm5ld190aTsKKworCQluZXdfdGkgPSB0YWJsZV9pbnN0YW5jZV9leHBhbmQodGksIHRydWUpOworCQlpZiAobmV3X3RpKSB7CisJCQlyY3VfYXNzaWduX3BvaW50ZXIodGFibGUtPnVmaWRfdGksIG5ld190aSk7CisJCQljYWxsX3JjdSgmdGktPnJjdSwgZmxvd190YmxfZGVzdHJveV9yY3VfY2IpOworCQl9CisJfQorfQorCisvKiBNdXN0IGJlIGNhbGxlZCB3aXRoIE9WUyBtdXRleCBoZWxkLiAqLworaW50IG92c19mbG93X3RibF9pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywKKwkJCWNvbnN0IHN0cnVjdCBzd19mbG93X21hc2sgKm1hc2spCit7CisJaW50IGVycjsKKworCWVyciA9IGZsb3dfbWFza19pbnNlcnQodGFibGUsIGZsb3csIG1hc2spOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJZmxvd19rZXlfaW5zZXJ0KHRhYmxlLCBmbG93KTsKKwlpZiAob3ZzX2lkZW50aWZpZXJfaXNfdWZpZCgmZmxvdy0+aWQpKQorCQlmbG93X3VmaWRfaW5zZXJ0KHRhYmxlLCBmbG93KTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaAppbmRleCAzMDlmYTY0Li42MTZlZGExIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oCisrKyBiL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmgKQEAgLTQ3LDkgKzQ3LDExIEBACiAKIHN0cnVjdCBmbG93X3RhYmxlIHsKIAlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgX19yY3UgKnRpOworCXN0cnVjdCB0YWJsZV9pbnN0YW5jZSBfX3JjdSAqdWZpZF90aTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1hc2tfbGlzdDsKIAl1bnNpZ25lZCBsb25nIGxhc3RfcmVoYXNoOwogCXVuc2lnbmVkIGludCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgdWZpZF9jb3VudDsKIH07CiAKIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqZmxvd19zdGF0c19jYWNoZTsKQEAgLTc4LDggKzgwLDEwIEBACiAJCQkJICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqKTsKIHN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KHN0cnVjdCBmbG93X3RhYmxlICp0YmwsCiAJCQkJCSAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfbWF0Y2ggKm1hdGNoKTsKLWJvb2wgb3ZzX2Zsb3dfY21wX3VubWFza2VkX2tleShjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gpOworc3RydWN0IHN3X2Zsb3cgKm92c19mbG93X3RibF9sb29rdXBfdWZpZChzdHJ1Y3QgZmxvd190YWJsZSAqLAorCQkJCQkgY29uc3Qgc3RydWN0IHN3X2Zsb3dfaWQgKik7CisKK2Jvb2wgb3ZzX2Zsb3dfY21wKGNvbnN0IHN0cnVjdCBzd19mbG93ICosIGNvbnN0IHN0cnVjdCBzd19mbG93X21hdGNoICopOwogCiB2b2lkIG92c19mbG93X21hc2tfa2V5KHN0cnVjdCBzd19mbG93X2tleSAqZHN0LCBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKnNyYywKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X21hc2sgKm1hc2spOwpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LWdlbmV2ZS5jIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LWdlbmV2ZS5jCmluZGV4IDQ4NDg2NGQuLmJmMDJmZDUgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC92cG9ydC1nZW5ldmUuYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtZ2VuZXZlLmMKQEAgLTksOCArOSw2IEBACiAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KLQogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KQEAgLTkwLDcgKzg4LDcgQEAKIAogCW9wdHNfbGVuID0gZ2VuZXZlaC0+b3B0X2xlbiAqIDQ7CiAKLQlmbGFncyA9IFRVTk5FTF9LRVkgfCBUVU5ORUxfT1BUSU9OU19QUkVTRU5UIHwKKwlmbGFncyA9IFRVTk5FTF9LRVkgfCBUVU5ORUxfR0VORVZFX09QVCB8CiAJCSh1ZHBfaGRyKHNrYiktPmNoZWNrICE9IDAgPyBUVU5ORUxfQ1NVTSA6IDApIHwKIAkJKGdlbmV2ZWgtPm9hbSA/IFRVTk5FTF9PQU0gOiAwKSB8CiAJCShnZW5ldmVoLT5jcml0aWNhbCA/IFRVTk5FTF9DUklUX09QVCA6IDApOwpAQCAtMTcyLDcgKzE3MCw3IEBACiAKIHN0YXRpYyBpbnQgZ2VuZXZlX3RubF9zZW5kKHN0cnVjdCB2cG9ydCAqdnBvcnQsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IG92c19rZXlfaXB2NF90dW5uZWwgKnR1bl9rZXk7CisJY29uc3Qgc3RydWN0IG92c19rZXlfaXB2NF90dW5uZWwgKnR1bl9rZXk7CiAJc3RydWN0IG92c190dW5uZWxfaW5mbyAqdHVuX2luZm87CiAJc3RydWN0IG5ldCAqbmV0ID0gb3ZzX2RwX2dldF9uZXQodnBvcnQtPmRwKTsKIAlzdHJ1Y3QgZ2VuZXZlX3BvcnQgKmdlbmV2ZV9wb3J0ID0gZ2VuZXZlX3Zwb3J0KHZwb3J0KTsKQEAgLTE4MCw3ICsxNzgsNyBAQAogCV9fYmUxNiBzcG9ydDsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlzdHJ1Y3QgZmxvd2k0IGZsOwotCXU4IHZuaVszXTsKKwl1OCB2bmlbM10sIG9wdHNfbGVuLCAqb3B0czsKIAlfX2JlMTYgZGY7CiAJaW50IGVycjsKIApAQCAtMTkxLDE2ICsxODksNyBAQAogCX0KIAogCXR1bl9rZXkgPSAmdHVuX2luZm8tPnR1bm5lbDsKLQotCS8qIFJvdXRlIGxvb2t1cCAqLwotCW1lbXNldCgmZmwsIDAsIHNpemVvZihmbCkpOwotCWZsLmRhZGRyID0gdHVuX2tleS0+aXB2NF9kc3Q7Ci0JZmwuc2FkZHIgPSB0dW5fa2V5LT5pcHY0X3NyYzsKLQlmbC5mbG93aTRfdG9zID0gUlRfVE9TKHR1bl9rZXktPmlwdjRfdG9zKTsKLQlmbC5mbG93aTRfbWFyayA9IHNrYi0+bWFyazsKLQlmbC5mbG93aTRfcHJvdG8gPSBJUFBST1RPX1VEUDsKLQotCXJ0ID0gaXBfcm91dGVfb3V0cHV0X2tleShuZXQsICZmbCk7CisJcnQgPSBvdnNfdHVubmVsX3JvdXRlX2xvb2t1cChuZXQsIHR1bl9rZXksIHNrYi0+bWFyaywgJmZsLCBJUFBST1RPX1VEUCk7CiAJaWYgKElTX0VSUihydCkpIHsKIAkJZXJyID0gUFRSX0VSUihydCk7CiAJCWdvdG8gZXJyb3I7CkBAIC0yMTEsMTIgKzIwMCwxOSBAQAogCXR1bm5lbF9pZF90b192bmkodHVuX2tleS0+dHVuX2lkLCB2bmkpOwogCXNrYi0+aWdub3JlX2RmID0gMTsKIAorCWlmICh0dW5fa2V5LT50dW5fZmxhZ3MgJiBUVU5ORUxfR0VORVZFX09QVCkgeworCQlvcHRzID0gKHU4ICopdHVuX2luZm8tPm9wdGlvbnM7CisJCW9wdHNfbGVuID0gdHVuX2luZm8tPm9wdGlvbnNfbGVuOworCX0gZWxzZSB7CisJCW9wdHMgPSBOVUxMOworCQlvcHRzX2xlbiA9IDA7CisJfQorCiAJZXJyID0gZ2VuZXZlX3htaXRfc2tiKGdlbmV2ZV9wb3J0LT5ncywgcnQsIHNrYiwgZmwuc2FkZHIsCiAJCQkgICAgICB0dW5fa2V5LT5pcHY0X2RzdCwgdHVuX2tleS0+aXB2NF90b3MsCiAJCQkgICAgICB0dW5fa2V5LT5pcHY0X3R0bCwgZGYsIHNwb3J0LCBkcG9ydCwKLQkJCSAgICAgIHR1bl9rZXktPnR1bl9mbGFncywgdm5pLAotCQkJICAgICAgdHVuX2luZm8tPm9wdGlvbnNfbGVuLCAodTggKil0dW5faW5mby0+b3B0aW9ucywKLQkJCSAgICAgIGZhbHNlKTsKKwkJCSAgICAgIHR1bl9rZXktPnR1bl9mbGFncywgdm5pLCBvcHRzX2xlbiwgb3B0cywKKwkJCSAgICAgICEhKHR1bl9rZXktPnR1bl9mbGFncyAmIFRVTk5FTF9DU1VNKSwgZmFsc2UpOwogCWlmIChlcnIgPCAwKQogCQlpcF9ydF9wdXQocnQpOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtZ3JlLmMgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtZ3JlLmMKaW5kZXggZDQxNjhjNDQuLmYxN2FjOTYgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC92cG9ydC1ncmUuYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtZ3JlLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogc3RhdGljIGludCBncmVfdG5sX3NlbmQoc3RydWN0IHZwb3J0ICp2cG9ydCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBvdnNfZHBfZ2V0X25ldCh2cG9ydC0+ZHApOwotCXN0cnVjdCBvdnNfa2V5X2lwdjRfdHVubmVsICp0dW5fa2V5OworCWNvbnN0IHN0cnVjdCBvdnNfa2V5X2lwdjRfdHVubmVsICp0dW5fa2V5OwogCXN0cnVjdCBmbG93aTQgZmw7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJaW50IG1pbl9oZWFkcm9vbTsKQEAgLTE0OCwxNSArMTQ4LDcgQEAKIAl9CiAKIAl0dW5fa2V5ID0gJk9WU19DQihza2IpLT5lZ3Jlc3NfdHVuX2luZm8tPnR1bm5lbDsKLQkvKiBSb3V0ZSBsb29rdXAgKi8KLQltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKLQlmbC5kYWRkciA9IHR1bl9rZXktPmlwdjRfZHN0OwotCWZsLnNhZGRyID0gdHVuX2tleS0+aXB2NF9zcmM7Ci0JZmwuZmxvd2k0X3RvcyA9IFJUX1RPUyh0dW5fa2V5LT5pcHY0X3Rvcyk7Ci0JZmwuZmxvd2k0X21hcmsgPSBza2ItPm1hcms7Ci0JZmwuZmxvd2k0X3Byb3RvID0gSVBQUk9UT19HUkU7Ci0KLQlydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmZmwpOworCXJ0ID0gb3ZzX3R1bm5lbF9yb3V0ZV9sb29rdXAobmV0LCB0dW5fa2V5LCBza2ItPm1hcmssICZmbCwgSVBQUk9UT19HUkUpOwogCWlmIChJU19FUlIocnQpKSB7CiAJCWVyciA9IFBUUl9FUlIocnQpOwogCQlnb3RvIGVycl9mcmVlX3NrYjsKQEAgLTE2Niw3ICsxNTgsNyBAQAogCiAJbWluX2hlYWRyb29tID0gTExfUkVTRVJWRURfU1BBQ0UocnQtPmRzdC5kZXYpICsgcnQtPmRzdC5oZWFkZXJfbGVuCiAJCQkrIHR1bm5lbF9obGVuICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikKLQkJCSsgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSA/IFZMQU5fSExFTiA6IDApOworCQkJKyAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSA/IFZMQU5fSExFTiA6IDApOwogCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IG1pbl9oZWFkcm9vbSB8fCBza2JfaGVhZGVyX2Nsb25lZChza2IpKSB7CiAJCWludCBoZWFkX2RlbHRhID0gU0tCX0RBVEFfQUxJR04obWluX2hlYWRyb29tIC0KIAkJCQkJCXNrYl9oZWFkcm9vbShza2IpICsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC92cG9ydC12eGxhbi5jIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LXZ4bGFuLmMKaW5kZXggZDdjNDZiMy4uMzI3N2E3NSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LXZ4bGFuLmMKKysrIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LXZ4bGFuLmMKQEAgLTQwLDYgKzQwLDcgQEAKIAogI2luY2x1ZGUgImRhdGFwYXRoLmgiCiAjaW5jbHVkZSAidnBvcnQuaCIKKyNpbmNsdWRlICJ2cG9ydC12eGxhbi5oIgogCiAvKioKICAqIHN0cnVjdCB2eGxhbl9wb3J0IC0gS2VlcHMgdHJhY2sgb2Ygb3BlbiBVRFAgcG9ydHMKQEAgLTQ5LDYgKzUwLDcgQEAKIHN0cnVjdCB2eGxhbl9wb3J0IHsKIAlzdHJ1Y3QgdnhsYW5fc29jayAqdnM7CiAJY2hhciBuYW1lW0lGTkFNU0laXTsKKwl1MzIgZXh0czsgLyogVlhMQU5fRl8qIGluIDxuZXQvdnhsYW4uaD4gKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgdnBvcnRfb3BzIG92c192eGxhbl92cG9ydF9vcHM7CkBAIC01OSwxOSArNjEsMzAgQEAKIH0KIAogLyogQ2FsbGVkIHdpdGggcmN1X3JlYWRfbG9jayBhbmQgQkggZGlzYWJsZWQuICovCi1zdGF0aWMgdm9pZCB2eGxhbl9yY3Yoc3RydWN0IHZ4bGFuX3NvY2sgKnZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgdnhfdm5pKQorc3RhdGljIHZvaWQgdnhsYW5fcmN2KHN0cnVjdCB2eGxhbl9zb2NrICp2cywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgc3RydWN0IHZ4bGFuX21ldGFkYXRhICptZCkKIHsKIAlzdHJ1Y3Qgb3ZzX3R1bm5lbF9pbmZvIHR1bl9pbmZvOworCXN0cnVjdCB2eGxhbl9wb3J0ICp2eGxhbl9wb3J0OwogCXN0cnVjdCB2cG9ydCAqdnBvcnQgPSB2cy0+ZGF0YTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKKwlzdHJ1Y3Qgb3ZzX3Z4bGFuX29wdHMgb3B0cyA9IHsKKwkJLmdicCA9IG1kLT5nYnAsCisJfTsKIAlfX2JlNjQga2V5OworCV9fYmUxNiBmbGFnczsKKworCWZsYWdzID0gVFVOTkVMX0tFWSB8ICh1ZHBfaGRyKHNrYiktPmNoZWNrICE9IDAgPyBUVU5ORUxfQ1NVTSA6IDApOworCXZ4bGFuX3BvcnQgPSB2eGxhbl92cG9ydCh2cG9ydCk7CisJaWYgKHZ4bGFuX3BvcnQtPmV4dHMgJiBWWExBTl9GX0dCUCAmJiBtZC0+Z2JwKQorCQlmbGFncyB8PSBUVU5ORUxfVlhMQU5fT1BUOwogCiAJLyogU2F2ZSBvdXRlciB0dW5uZWwgdmFsdWVzICovCiAJaXBoID0gaXBfaGRyKHNrYik7Ci0Ja2V5ID0gY3B1X3RvX2JlNjQobnRvaGwodnhfdm5pKSA+PiA4KTsKKwlrZXkgPSBjcHVfdG9fYmU2NChudG9obChtZC0+dm5pKSA+PiA4KTsKIAlvdnNfZmxvd190dW5faW5mb19pbml0KCZ0dW5faW5mbywgaXBoLAogCQkJICAgICAgIHVkcF9oZHIoc2tiKS0+c291cmNlLCB1ZHBfaGRyKHNrYiktPmRlc3QsCi0JCQkgICAgICAga2V5LCBUVU5ORUxfS0VZLCBOVUxMLCAwKTsKKwkJCSAgICAgICBrZXksIGZsYWdzLCAmb3B0cywgc2l6ZW9mKG9wdHMpKTsKIAogCW92c192cG9ydF9yZWNlaXZlKHZwb3J0LCBza2IsICZ0dW5faW5mbyk7CiB9CkBAIC04Myw2ICs5NiwyMSBAQAogCiAJaWYgKG5sYV9wdXRfdTE2KHNrYiwgT1ZTX1RVTk5FTF9BVFRSX0RTVF9QT1JULCBudG9ocyhkc3RfcG9ydCkpKQogCQlyZXR1cm4gLUVNU0dTSVpFOworCisJaWYgKHZ4bGFuX3BvcnQtPmV4dHMpIHsKKwkJc3RydWN0IG5sYXR0ciAqZXh0czsKKworCQlleHRzID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBPVlNfVFVOTkVMX0FUVFJfRVhURU5TSU9OKTsKKwkJaWYgKCFleHRzKQorCQkJcmV0dXJuIC1FTVNHU0laRTsKKworCQlpZiAodnhsYW5fcG9ydC0+ZXh0cyAmIFZYTEFOX0ZfR0JQICYmCisJCSAgICBubGFfcHV0X2ZsYWcoc2tiLCBPVlNfVlhMQU5fRVhUX0dCUCkpCisJCQlyZXR1cm4gLUVNU0dTSVpFOworCisJCW5sYV9uZXN0X2VuZChza2IsIGV4dHMpOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC05NSw2ICsxMjMsMzEgQEAKIAlvdnNfdnBvcnRfZGVmZXJyZWRfZnJlZSh2cG9ydCk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBleHRzX3BvbGljeVtPVlNfVlhMQU5fRVhUX01BWCsxXSA9IHsKKwlbT1ZTX1ZYTEFOX0VYVF9HQlBdCT0geyAudHlwZSA9IE5MQV9GTEFHLCB9LAorfTsKKworc3RhdGljIGludCB2eGxhbl9jb25maWd1cmVfZXh0cyhzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3QgbmxhdHRyICphdHRyKQoreworCXN0cnVjdCBubGF0dHIgKmV4dHNbT1ZTX1ZYTEFOX0VYVF9NQVgrMV07CisJc3RydWN0IHZ4bGFuX3BvcnQgKnZ4bGFuX3BvcnQ7CisJaW50IGVycjsKKworCWlmIChubGFfbGVuKGF0dHIpIDwgc2l6ZW9mKHN0cnVjdCBubGF0dHIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IG5sYV9wYXJzZV9uZXN0ZWQoZXh0cywgT1ZTX1ZYTEFOX0VYVF9NQVgsIGF0dHIsIGV4dHNfcG9saWN5KTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXZ4bGFuX3BvcnQgPSB2eGxhbl92cG9ydCh2cG9ydCk7CisKKwlpZiAoZXh0c1tPVlNfVlhMQU5fRVhUX0dCUF0pCisJCXZ4bGFuX3BvcnQtPmV4dHMgfD0gVlhMQU5fRl9HQlA7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCB2cG9ydCAqdnhsYW5fdG5sX2NyZWF0ZShjb25zdCBzdHJ1Y3QgdnBvcnRfcGFybXMgKnBhcm1zKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IG92c19kcF9nZXRfbmV0KHBhcm1zLT5kcCk7CkBAIC0xMjcsNyArMTgwLDE3IEBACiAJdnhsYW5fcG9ydCA9IHZ4bGFuX3Zwb3J0KHZwb3J0KTsKIAlzdHJuY3B5KHZ4bGFuX3BvcnQtPm5hbWUsIHBhcm1zLT5uYW1lLCBJRk5BTVNJWik7CiAKLQl2cyA9IHZ4bGFuX3NvY2tfYWRkKG5ldCwgaHRvbnMoZHN0X3BvcnQpLCB2eGxhbl9yY3YsIHZwb3J0LCB0cnVlLCAwKTsKKwlhID0gbmxhX2ZpbmRfbmVzdGVkKG9wdGlvbnMsIE9WU19UVU5ORUxfQVRUUl9FWFRFTlNJT04pOworCWlmIChhKSB7CisJCWVyciA9IHZ4bGFuX2NvbmZpZ3VyZV9leHRzKHZwb3J0LCBhKTsKKwkJaWYgKGVycikgeworCQkJb3ZzX3Zwb3J0X2ZyZWUodnBvcnQpOworCQkJZ290byBlcnJvcjsKKwkJfQorCX0KKworCXZzID0gdnhsYW5fc29ja19hZGQobmV0LCBodG9ucyhkc3RfcG9ydCksIHZ4bGFuX3JjdiwgdnBvcnQsIHRydWUsCisJCQkgICAgdnhsYW5fcG9ydC0+ZXh0cyk7CiAJaWYgKElTX0VSUih2cykpIHsKIAkJb3ZzX3Zwb3J0X2ZyZWUodnBvcnQpOwogCQlyZXR1cm4gKHZvaWQgKil2czsKQEAgLTE0MCwxNyArMjAzLDM0IEBACiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KIAorc3RhdGljIGludCB2eGxhbl9leHRfZ2JwKHN0cnVjdCBza19idWZmICpza2IpCit7CisJY29uc3Qgc3RydWN0IG92c190dW5uZWxfaW5mbyAqdHVuX2luZm87CisJY29uc3Qgc3RydWN0IG92c192eGxhbl9vcHRzICpvcHRzOworCisJdHVuX2luZm8gPSBPVlNfQ0Ioc2tiKS0+ZWdyZXNzX3R1bl9pbmZvOworCW9wdHMgPSB0dW5faW5mby0+b3B0aW9uczsKKworCWlmICh0dW5faW5mby0+dHVubmVsLnR1bl9mbGFncyAmIFRVTk5FTF9WWExBTl9PUFQgJiYKKwkgICAgdHVuX2luZm8tPm9wdGlvbnNfbGVuID49IHNpemVvZigqb3B0cykpCisJCXJldHVybiBvcHRzLT5nYnA7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB2eGxhbl90bmxfc2VuZChzdHJ1Y3QgdnBvcnQgKnZwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IG92c19kcF9nZXRfbmV0KHZwb3J0LT5kcCk7CiAJc3RydWN0IHZ4bGFuX3BvcnQgKnZ4bGFuX3BvcnQgPSB2eGxhbl92cG9ydCh2cG9ydCk7CiAJX19iZTE2IGRzdF9wb3J0ID0gaW5ldF9zayh2eGxhbl9wb3J0LT52cy0+c29jay0+c2spLT5pbmV0X3Nwb3J0OwotCXN0cnVjdCBvdnNfa2V5X2lwdjRfdHVubmVsICp0dW5fa2V5OworCWNvbnN0IHN0cnVjdCBvdnNfa2V5X2lwdjRfdHVubmVsICp0dW5fa2V5OworCXN0cnVjdCB2eGxhbl9tZXRhZGF0YSBtZCA9IHswfTsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlzdHJ1Y3QgZmxvd2k0IGZsOwogCV9fYmUxNiBzcmNfcG9ydDsKIAlfX2JlMTYgZGY7CiAJaW50IGVycjsKKwl1MzIgdnhmbGFnczsKIAogCWlmICh1bmxpa2VseSghT1ZTX0NCKHNrYiktPmVncmVzc190dW5faW5mbykpIHsKIAkJZXJyID0gLUVJTlZBTDsKQEAgLTE1OCwxNSArMjM4LDcgQEAKIAl9CiAKIAl0dW5fa2V5ID0gJk9WU19DQihza2IpLT5lZ3Jlc3NfdHVuX2luZm8tPnR1bm5lbDsKLQkvKiBSb3V0ZSBsb29rdXAgKi8KLQltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKLQlmbC5kYWRkciA9IHR1bl9rZXktPmlwdjRfZHN0OwotCWZsLnNhZGRyID0gdHVuX2tleS0+aXB2NF9zcmM7Ci0JZmwuZmxvd2k0X3RvcyA9IFJUX1RPUyh0dW5fa2V5LT5pcHY0X3Rvcyk7Ci0JZmwuZmxvd2k0X21hcmsgPSBza2ItPm1hcms7Ci0JZmwuZmxvd2k0X3Byb3RvID0gSVBQUk9UT19VRFA7Ci0KLQlydCA9IGlwX3JvdXRlX291dHB1dF9rZXkobmV0LCAmZmwpOworCXJ0ID0gb3ZzX3R1bm5lbF9yb3V0ZV9sb29rdXAobmV0LCB0dW5fa2V5LCBza2ItPm1hcmssICZmbCwgSVBQUk9UT19VRFApOwogCWlmIChJU19FUlIocnQpKSB7CiAJCWVyciA9IFBUUl9FUlIocnQpOwogCQlnb3RvIGVycm9yOwpAQCAtMTc4LDEzICsyNTAsMTUgQEAKIAlza2ItPmlnbm9yZV9kZiA9IDE7CiAKIAlzcmNfcG9ydCA9IHVkcF9mbG93X3NyY19wb3J0KG5ldCwgc2tiLCAwLCAwLCB0cnVlKTsKKwltZC52bmkgPSBodG9ubChiZTY0X3RvX2NwdSh0dW5fa2V5LT50dW5faWQpIDw8IDgpOworCW1kLmdicCA9IHZ4bGFuX2V4dF9nYnAoc2tiKTsKKwl2eGZsYWdzID0gdnhsYW5fcG9ydC0+ZXh0cyB8CisJCSAgICAgICh0dW5fa2V5LT50dW5fZmxhZ3MgJiBUVU5ORUxfQ1NVTSA/IFZYTEFOX0ZfVURQX0NTVU0gOiAwKTsKIAotCWVyciA9IHZ4bGFuX3htaXRfc2tiKHZ4bGFuX3BvcnQtPnZzLCBydCwgc2tiLAotCQkJICAgICBmbC5zYWRkciwgdHVuX2tleS0+aXB2NF9kc3QsCisJZXJyID0gdnhsYW5feG1pdF9za2IocnQsIHNrYiwgZmwuc2FkZHIsIHR1bl9rZXktPmlwdjRfZHN0LAogCQkJICAgICB0dW5fa2V5LT5pcHY0X3RvcywgdHVuX2tleS0+aXB2NF90dGwsIGRmLAogCQkJICAgICBzcmNfcG9ydCwgZHN0X3BvcnQsCi0JCQkgICAgIGh0b25sKGJlNjRfdG9fY3B1KHR1bl9rZXktPnR1bl9pZCkgPDwgOCksCi0JCQkgICAgIGZhbHNlKTsKKwkJCSAgICAgJm1kLCBmYWxzZSwgdnhmbGFncyk7CiAJaWYgKGVyciA8IDApCiAJCWlwX3J0X3B1dChydCk7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC92cG9ydC12eGxhbi5oIGIvbmV0L29wZW52c3dpdGNoL3Zwb3J0LXZ4bGFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIwODIzM2UKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtdnhsYW4uaApAQCAtMCwwICsxLDExIEBACisjaWZuZGVmIFZQT1JUX1ZYTEFOX0gKKyNkZWZpbmUgVlBPUlRfVlhMQU5fSCAxCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3Qgb3ZzX3Z4bGFuX29wdHMgeworCV9fdTMyIGdicDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LmMgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYwppbmRleCAyMDM0YzZkLi5lYzI5NTRmIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYworKysgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuYwpAQCAtNDgwLDcgKzQ4MCw4IEBACiAJc3RhdHMgPSB0aGlzX2NwdV9wdHIodnBvcnQtPnBlcmNwdV9zdGF0cyk7CiAJdTY0X3N0YXRzX3VwZGF0ZV9iZWdpbigmc3RhdHMtPnN5bmNwKTsKIAlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbiArICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikgPyBWTEFOX0hMRU4gOiAwKTsKKwlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW4gKworCQkJICAgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikgPyBWTEFOX0hMRU4gOiAwKTsKIAl1NjRfc3RhdHNfdXBkYXRlX2VuZCgmc3RhdHMtPnN5bmNwKTsKIAogCU9WU19DQihza2IpLT5pbnB1dF92cG9ydCA9IHZwb3J0OwpAQCAtNTk0LDE0ICs1OTUsNyBAQAogCSAqIFRoZSBwcm9jZXNzIG1heSBuZWVkIHRvIGJlIGNoYW5nZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcHJvY2VzcwogCSAqIGluIHZwb3J0cyBvcHMgY2hhbmdlZC4KIAkgKi8KLQltZW1zZXQoJmZsLCAwLCBzaXplb2YoZmwpKTsKLQlmbC5kYWRkciA9IHR1bl9rZXktPmlwdjRfZHN0OwotCWZsLnNhZGRyID0gdHVuX2tleS0+aXB2NF9zcmM7Ci0JZmwuZmxvd2k0X3RvcyA9IFJUX1RPUyh0dW5fa2V5LT5pcHY0X3Rvcyk7Ci0JZmwuZmxvd2k0X21hcmsgPSBza2JfbWFyazsKLQlmbC5mbG93aTRfcHJvdG8gPSBpcHByb3RvOwotCi0JcnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgJmZsKTsKKwlydCA9IG92c190dW5uZWxfcm91dGVfbG9va3VwKG5ldCwgdHVuX2tleSwgc2tiX21hcmssICZmbCwgaXBwcm90byk7CiAJaWYgKElTX0VSUihydCkpCiAJCXJldHVybiBQVFJfRVJSKHJ0KTsKIApkaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL3Zwb3J0LmggYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuaAppbmRleCA5OWM4ZTcxLi5mOGFlMjk1IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuaAorKysgYi9uZXQvb3BlbnZzd2l0Y2gvdnBvcnQuaApAQCAtMjM2LDQgKzIzNiwyMiBAQAogaW50IG92c192cG9ydF9vcHNfcmVnaXN0ZXIoc3RydWN0IHZwb3J0X29wcyAqb3BzKTsKIHZvaWQgb3ZzX3Zwb3J0X29wc191bnJlZ2lzdGVyKHN0cnVjdCB2cG9ydF9vcHMgKm9wcyk7CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJ0YWJsZSAqb3ZzX3R1bm5lbF9yb3V0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkJICAgICBjb25zdCBzdHJ1Y3Qgb3ZzX2tleV9pcHY0X3R1bm5lbCAqa2V5LAorCQkJCQkJICAgICB1MzIgbWFyaywKKwkJCQkJCSAgICAgc3RydWN0IGZsb3dpNCAqZmwsCisJCQkJCQkgICAgIHU4IHByb3RvY29sKQoreworCXN0cnVjdCBydGFibGUgKnJ0OworCisJbWVtc2V0KGZsLCAwLCBzaXplb2YoKmZsKSk7CisJZmwtPmRhZGRyID0ga2V5LT5pcHY0X2RzdDsKKwlmbC0+c2FkZHIgPSBrZXktPmlwdjRfc3JjOworCWZsLT5mbG93aTRfdG9zID0gUlRfVE9TKGtleS0+aXB2NF90b3MpOworCWZsLT5mbG93aTRfbWFyayA9IG1hcms7CisJZmwtPmZsb3dpNF9wcm90byA9IHByb3RvY29sOworCisJcnQgPSBpcF9yb3V0ZV9vdXRwdXRfa2V5KG5ldCwgZmwpOworCXJldHVybiBydDsKK30KICNlbmRpZiAvKiB2cG9ydC5oICovCmRpZmYgLS1naXQgYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jIGIvbmV0L3BhY2tldC9hZl9wYWNrZXQuYwppbmRleCA5Y2ZlMmUxLi45YzI4Y2VjIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L2FmX3BhY2tldC5jCisrKyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKQEAgLTk4Niw4ICs5ODYsOCBAQAogc3RhdGljIHZvaWQgcHJiX2ZpbGxfdmxhbl9pbmZvKHN0cnVjdCB0cGFja2V0X2tiZHFfY29yZSAqcGtjLAogCQkJc3RydWN0IHRwYWNrZXQzX2hkciAqcHBkKQogewotCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHBrYy0+c2tiKSkgewotCQlwcGQtPmh2MS50cF92bGFuX3RjaSA9IHZsYW5fdHhfdGFnX2dldChwa2MtPnNrYik7CisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHBrYy0+c2tiKSkgeworCQlwcGQtPmh2MS50cF92bGFuX3RjaSA9IHNrYl92bGFuX3RhZ19nZXQocGtjLT5za2IpOwogCQlwcGQtPmh2MS50cF92bGFuX3RwaWQgPSBudG9ocyhwa2MtPnNrYi0+dmxhbl9wcm90byk7CiAJCXBwZC0+dHBfc3RhdHVzID0gVFBfU1RBVFVTX1ZMQU5fVkFMSUQgfCBUUF9TVEFUVVNfVkxBTl9UUElEX1ZBTElEOwogCX0gZWxzZSB7CkBAIC0yMDAwLDggKzIwMDAsOCBAQAogCQloLmgyLT50cF9uZXQgPSBuZXRvZmY7CiAJCWguaDItPnRwX3NlYyA9IHRzLnR2X3NlYzsKIAkJaC5oMi0+dHBfbnNlYyA9IHRzLnR2X25zZWM7Ci0JCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJCWguaDItPnRwX3ZsYW5fdGNpID0gdmxhbl90eF90YWdfZ2V0KHNrYik7CisJCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKSB7CisJCQloLmgyLT50cF92bGFuX3RjaSA9IHNrYl92bGFuX3RhZ19nZXQoc2tiKTsKIAkJCWguaDItPnRwX3ZsYW5fdHBpZCA9IG50b2hzKHNrYi0+dmxhbl9wcm90byk7CiAJCQlzdGF0dXMgfD0gVFBfU1RBVFVTX1ZMQU5fVkFMSUQgfCBUUF9TVEFUVVNfVkxBTl9UUElEX1ZBTElEOwogCQl9IGVsc2UgewpAQCAtMjEwMiw3ICsyMTAyLDcgQEAKIHsKIAkvKiBuZXQgZGV2aWNlIGRvZXNuJ3QgbGlrZSBlbXB0eSBoZWFkICovCiAJaWYgKHVubGlrZWx5KGxlbiA8PSBkZXYtPmhhcmRfaGVhZGVyX2xlbikpIHsKLQkJbmV0X3dhcm5fcmF0ZWxpbWl0ZWQoIiVzOiBwYWNrZXQgc2l6ZSBpcyB0b28gc2hvcnQgKCVkIDwgJWQpXG4iLAorCQluZXRfd2Fybl9yYXRlbGltaXRlZCgiJXM6IHBhY2tldCBzaXplIGlzIHRvbyBzaG9ydCAoJWQgPD0gJWQpXG4iLAogCQkJCSAgICAgY3VycmVudC0+Y29tbSwgbGVuLCBkZXYtPmhhcmRfaGVhZGVyX2xlbik7CiAJCXJldHVybiB0cnVlOwogCX0KQEAgLTMwMTAsOCArMzAxMCw4IEBACiAJCWF1eC50cF9zbmFwbGVuID0gc2tiLT5sZW47CiAJCWF1eC50cF9tYWMgPSAwOwogCQlhdXgudHBfbmV0ID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7Ci0JCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJCWF1eC50cF92bGFuX3RjaSA9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQlpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSkgeworCQkJYXV4LnRwX3ZsYW5fdGNpID0gc2tiX3ZsYW5fdGFnX2dldChza2IpOwogCQkJYXV4LnRwX3ZsYW5fdHBpZCA9IG50b2hzKHNrYi0+dmxhbl9wcm90byk7CiAJCQlhdXgudHBfc3RhdHVzIHw9IFRQX1NUQVRVU19WTEFOX1ZBTElEIHwgVFBfU1RBVFVTX1ZMQU5fVFBJRF9WQUxJRDsKIAkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvZGlhZy5jIGIvbmV0L3BhY2tldC9kaWFnLmMKaW5kZXggOTJmMmM3MS4uMGVkNjhmMCAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9kaWFnLmMKKysrIGIvbmV0L3BhY2tldC9kaWFnLmMKQEAgLTE3Nyw3ICsxNzcsOCBAQAogCQkJCSAgICAgUEFDS0VUX0RJQUdfRklMVEVSKSkKIAkJZ290byBvdXRfbmxtc2dfdHJpbTsKIAotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiAKIG91dF9ubG1zZ190cmltOgogCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BuX25ldGxpbmsuYyBiL25ldC9waG9uZXQvcG5fbmV0bGluay5jCmluZGV4IGI2NDE1MWEuLmJjNWVlNWYgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvcG5fbmV0bGluay5jCisrKyBiL25ldC9waG9uZXQvcG5fbmV0bGluay5jCkBAIC0xMjEsNyArMTIxLDggQEAKIAlpZm0tPmlmYV9pbmRleCA9IGRldi0+aWZpbmRleDsKIAlpZiAobmxhX3B1dF91OChza2IsIElGQV9MT0NBTCwgYWRkcikpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiAKIG5sYV9wdXRfZmFpbHVyZToKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwpAQCAtMTkwLDcgKzE5MSw4IEBACiAJaWYgKG5sYV9wdXRfdTgoc2tiLCBSVEFfRFNULCBkc3QpIHx8CiAJICAgIG5sYV9wdXRfdTMyKHNrYiwgUlRBX09JRiwgZGV2LT5pZmluZGV4KSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIAogbmxhX3B1dF9mYWlsdXJlOgogCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CkBAIC0yNzAsMjcgKzI3MiwyMyBAQAogc3RhdGljIGludCByb3V0ZV9kdW1waXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwotCXU4IGFkZHIsIGFkZHJfaWR4ID0gMCwgYWRkcl9zdGFydF9pZHggPSBjYi0+YXJnc1swXTsKKwl1OCBhZGRyOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWZvciAoYWRkciA9IDA7IGFkZHIgPCA2NDsgYWRkcisrKSB7Ci0JCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJZm9yIChhZGRyID0gY2ItPmFyZ3NbMF07IGFkZHIgPCA2NDsgYWRkcisrKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwaG9uZXRfcm91dGVfZ2V0X3JjdShuZXQsIGFkZHIgPDwgMik7CiAKLQkJZGV2ID0gcGhvbmV0X3JvdXRlX2dldF9yY3UobmV0LCBhZGRyIDw8IDIpOwogCQlpZiAoIWRldikKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChhZGRyX2lkeCsrIDwgYWRkcl9zdGFydF9pZHgpCi0JCQljb250aW51ZTsKIAkJaWYgKGZpbGxfcm91dGUoc2tiLCBkZXYsIGFkZHIgPDwgMiwgTkVUTElOS19DQihjYi0+c2tiKS5wb3J0aWQsCi0JCQkJY2ItPm5saC0+bmxtc2dfc2VxLCBSVE1fTkVXUk9VVEUpKQorCQkJICAgICAgIGNiLT5ubGgtPm5sbXNnX3NlcSwgUlRNX05FV1JPVVRFKSA8IDApCiAJCQlnb3RvIG91dDsKIAl9CiAKIG91dDoKIAlyY3VfcmVhZF91bmxvY2soKTsKLQljYi0+YXJnc1swXSA9IGFkZHJfaWR4OwotCWNiLT5hcmdzWzFdID0gMDsKKwljYi0+YXJnc1swXSA9IGFkZHI7CiAKIAlyZXR1cm4gc2tiLT5sZW47CiB9CmRpZmYgLS1naXQgYS9uZXQvcmRzL2liX3NlbmQuYyBiL25ldC9yZHMvaWJfc2VuZC5jCmluZGV4IDFkZGU5MWUuLmJkMzgyNWQgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaWJfc2VuZC5jCisrKyBiL25ldC9yZHMvaWJfc2VuZC5jCkBAIC00MDksNyArNDA5LDcgQEAKIAlwb3N0ZWQgPSBJQl9HRVRfUE9TVF9DUkVESVRTKG9sZHZhbCk7CiAJYXZhaWwgPSBJQl9HRVRfU0VORF9DUkVESVRTKG9sZHZhbCk7CiAKLQlyZHNkZWJ1ZygicmRzX2liX3NlbmRfZ3JhYl9jcmVkaXRzKCV1KTogY3JlZGl0cz0ldSBwb3N0ZWQ9JXVcbiIsCisJcmRzZGVidWcoIndhbnRlZD0ldSBjcmVkaXRzPSV1IHBvc3RlZD0ldVxuIiwKIAkJCXdhbnRlZCwgYXZhaWwsIHBvc3RlZCk7CiAKIAkvKiBUaGUgbGFzdCBjcmVkaXQgbXVzdCBiZSB1c2VkIHRvIHNlbmQgYSBjcmVkaXQgdXBkYXRlLiAqLwpAQCAtNDUzLDcgKzQ1Myw3IEBACiAJaWYgKGNyZWRpdHMgPT0gMCkKIAkJcmV0dXJuOwogCi0JcmRzZGVidWcoInJkc19pYl9zZW5kX2FkZF9jcmVkaXRzKCV1KTogY3VycmVudD0ldSVzXG4iLAorCXJkc2RlYnVnKCJjcmVkaXRzPSV1IGN1cnJlbnQ9JXUlc1xuIiwKIAkJCWNyZWRpdHMsCiAJCQlJQl9HRVRfU0VORF9DUkVESVRTKGF0b21pY19yZWFkKCZpYy0+aV9jcmVkaXRzKSksCiAJCQl0ZXN0X2JpdChSRFNfTExfU0VORF9GVUxMLCAmY29ubi0+Y19mbGFncykgPyAiLCBsbF9zZW5kX2Z1bGwiIDogIiIpOwpkaWZmIC0tZ2l0IGEvbmV0L3Jkcy9pd19jbS5jIGIvbmV0L3Jkcy9pd19jbS5jCmluZGV4IGE5MWUxZGIuLmE2YzJiZWEgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvaXdfY20uYworKysgYi9uZXQvcmRzL2l3X2NtLmMKQEAgLTU5MCw4ICs1OTAsOCBAQAogCQkJLyogQWN0dWFsbHkgdGhpcyBtYXkgaGFwcGVuIHF1aXRlIGZyZXF1ZW50bHksIHdoZW4KIAkJCSAqIGFuIG91dGdvaW5nIGNvbm5lY3QgcmFjZWQgd2l0aCBhbiBpbmNvbWluZyBjb25uZWN0LgogCQkJICovCi0JCQlyZHNkZWJ1ZygicmRzX2l3X2Nvbm5fc2h1dGRvd246IGZhaWxlZCB0byBkaXNjb25uZWN0LCIKLQkJCQkgICAiIGNtOiAlcCBlcnIgJWRcbiIsIGljLT5pX2NtX2lkLCBlcnIpOworCQkJcmRzZGVidWcoImZhaWxlZCB0byBkaXNjb25uZWN0LCBjbTogJXAgZXJyICVkXG4iLAorCQkJCSBpYy0+aV9jbV9pZCwgZXJyKTsKIAkJfQogCiAJCWlmIChpYy0+aV9jbV9pZC0+cXApIHsKZGlmZiAtLWdpdCBhL25ldC9yZHMvaXdfc2VuZC5jIGIvbmV0L3Jkcy9pd19zZW5kLmMKaW5kZXggOTEwNWVhMC4uMTM4MzQ3OCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9pd19zZW5kLmMKKysrIGIvbmV0L3Jkcy9pd19zZW5kLmMKQEAgLTM2MSw3ICszNjEsNyBAQAogCXBvc3RlZCA9IElCX0dFVF9QT1NUX0NSRURJVFMob2xkdmFsKTsKIAlhdmFpbCA9IElCX0dFVF9TRU5EX0NSRURJVFMob2xkdmFsKTsKIAotCXJkc2RlYnVnKCJyZHNfaXdfc2VuZF9ncmFiX2NyZWRpdHMoJXUpOiBjcmVkaXRzPSV1IHBvc3RlZD0ldVxuIiwKKwlyZHNkZWJ1Zygid2FudGVkPSV1IGNyZWRpdHM9JXUgcG9zdGVkPSV1XG4iLAogCQkJd2FudGVkLCBhdmFpbCwgcG9zdGVkKTsKIAogCS8qIFRoZSBsYXN0IGNyZWRpdCBtdXN0IGJlIHVzZWQgdG8gc2VuZCBhIGNyZWRpdCB1cGRhdGUuICovCkBAIC00MDUsNyArNDA1LDcgQEAKIAlpZiAoY3JlZGl0cyA9PSAwKQogCQlyZXR1cm47CiAKLQlyZHNkZWJ1ZygicmRzX2l3X3NlbmRfYWRkX2NyZWRpdHMoJXUpOiBjdXJyZW50PSV1JXNcbiIsCisJcmRzZGVidWcoImNyZWRpdHM9JXUgY3VycmVudD0ldSVzXG4iLAogCQkJY3JlZGl0cywKIAkJCUlCX0dFVF9TRU5EX0NSRURJVFMoYXRvbWljX3JlYWQoJmljLT5pX2NyZWRpdHMpKSwKIAkJCXRlc3RfYml0KFJEU19MTF9TRU5EX0ZVTEwsICZjb25uLT5jX2ZsYWdzKSA/ICIsIGxsX3NlbmRfZnVsbCIgOiAiIik7CmRpZmYgLS1naXQgYS9uZXQvcmRzL21lc3NhZ2UuYyBiL25ldC9yZHMvbWVzc2FnZS5jCmluZGV4IDVhMjFlNmYuLjc1NmM3MzcgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvbWVzc2FnZS5jCisrKyBiL25ldC9yZHMvbWVzc2FnZS5jCkBAIC0yNjYsNyArMjY2LDcgQEAKIAogaW50IHJkc19tZXNzYWdlX2NvcHlfZnJvbV91c2VyKHN0cnVjdCByZHNfbWVzc2FnZSAqcm0sIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSkKIHsKLQl1bnNpZ25lZCBsb25nIHRvX2NvcHk7CisJdW5zaWduZWQgbG9uZyB0b19jb3B5LCBuYnl0ZXM7CiAJdW5zaWduZWQgbG9uZyBzZ19vZmY7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAlpbnQgcmV0ID0gMDsKQEAgLTI5Myw5ICsyOTMsOSBAQAogCQkJCXNnLT5sZW5ndGggLSBzZ19vZmYpOwogCiAJCXJkc19zdGF0c19hZGQoc19jb3B5X2Zyb21fdXNlciwgdG9fY29weSk7Ci0JCXJldCA9IGNvcHlfcGFnZV9mcm9tX2l0ZXIoc2dfcGFnZShzZyksIHNnLT5vZmZzZXQgKyBzZ19vZmYsCi0JCQkJCSAgdG9fY29weSwgZnJvbSk7Ci0JCWlmIChyZXQgIT0gdG9fY29weSkKKwkJbmJ5dGVzID0gY29weV9wYWdlX2Zyb21faXRlcihzZ19wYWdlKHNnKSwgc2ctPm9mZnNldCArIHNnX29mZiwKKwkJCQkJICAgICB0b19jb3B5LCBmcm9tKTsKKwkJaWYgKG5ieXRlcyAhPSB0b19jb3B5KQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJc2dfb2ZmICs9IHRvX2NvcHk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL3N5c2N0bC5jIGIvbmV0L3Jkcy9zeXNjdGwuYwppbmRleCBjM2IwY2Q0My4uYzE3M2Y2OSAxMDA2NDQKLS0tIGEvbmV0L3Jkcy9zeXNjdGwuYworKysgYi9uZXQvcmRzL3N5c2N0bC5jCkBAIC03MSwxNCArNzEsMTQgQEAKIAl7CiAJCS5wcm9jbmFtZQk9ICJtYXhfdW5hY2tlZF9wYWNrZXRzIiwKIAkJLmRhdGEJCT0gJnJkc19zeXNjdGxfbWF4X3VuYWNrZWRfcGFja2V0cywKLQkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpLAorCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YoaW50KSwKIAkJLm1vZGUgICAgICAgICAgID0gMDY0NCwKIAkJLnByb2NfaGFuZGxlciAgID0gcHJvY19kb2ludHZlYywKIAl9LAogCXsKIAkJLnByb2NuYW1lCT0gIm1heF91bmFja2VkX2J5dGVzIiwKIAkJLmRhdGEJCT0gJnJkc19zeXNjdGxfbWF4X3VuYWNrZWRfYnl0ZXMsCi0JCS5tYXhsZW4gICAgICAgICA9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKKwkJLm1heGxlbiAgICAgICAgID0gc2l6ZW9mKGludCksCiAJCS5tb2RlICAgICAgICAgICA9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIgICA9IHByb2NfZG9pbnR2ZWMsCiAJfSwKZGlmZiAtLWdpdCBhL25ldC9yZmtpbGwvcmZraWxsLWdwaW8uYyBiL25ldC9yZmtpbGwvcmZraWxsLWdwaW8uYwppbmRleCAzZjRhMGJiLi5kOTc4ZjJmIDEwMDY0NAotLS0gYS9uZXQvcmZraWxsL3Jma2lsbC1ncGlvLmMKKysrIGIvbmV0L3Jma2lsbC9yZmtpbGwtZ3Bpby5jCkBAIC0xNzAsNiArMTcwLDcgQEAKIAl7ICJCQ00yRTFBIiwgUkZLSUxMX1RZUEVfQkxVRVRPT1RIIH0sCiAJeyAiQkNNMkUzOSIsIFJGS0lMTF9UWVBFX0JMVUVUT09USCB9LAogCXsgIkJDTTJFM0QiLCBSRktJTExfVFlQRV9CTFVFVE9PVEggfSwKKwl7ICJCQ00yRTQwIiwgUkZLSUxMX1RZUEVfQkxVRVRPT1RIIH0sCiAJeyAiQkNNMkU2NCIsIFJGS0lMTF9UWVBFX0JMVUVUT09USCB9LAogCXsgIkJDTTQ3NTIiLCBSRktJTExfVFlQRV9HUFMgfSwKIAl7ICJMTlY0NzUyIiwgUkZLSUxMX1RZUEVfR1BTIH0sCmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXItZXJyb3IuYyBiL25ldC9yeHJwYy9hci1lcnJvci5jCmluZGV4IDc0YzBmY2QuLjUzOTRiNmIgMTAwNjQ0Ci0tLSBhL25ldC9yeHJwYy9hci1lcnJvci5jCisrKyBiL25ldC9yeHJwYy9hci1lcnJvci5jCkBAIC00Miw2ICs0MiwxMSBAQAogCQlfbGVhdmUoIlVEUCBzb2NrZXQgZXJycXVldWUgZW1wdHkiKTsKIAkJcmV0dXJuOwogCX0KKwlpZiAoIXNrYi0+bGVuKSB7CisJCV9sZWF2ZSgiVURQIGVtcHR5IG1lc3NhZ2UiKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybjsKKwl9CiAKIAlyeHJwY19uZXdfc2tiKHNrYik7CiAKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy9hci1vdXRwdXQuYyBiL25ldC9yeHJwYy9hci1vdXRwdXQuYwppbmRleCBlMWE5MzczZS4uODMzMWM5NSAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FyLW91dHB1dC5jCisrKyBiL25ldC9yeHJwYy9hci1vdXRwdXQuYwpAQCAtMjMyLDEwICsyMzIsNyBAQAogCQkgICBjYWxsLT5zdGF0ZSAhPSBSWFJQQ19DQUxMX1NFUlZFUl9TRU5EX1JFUExZKSB7CiAJCXJldCA9IC1FUFJPVE87IC8qIHJlcXVlc3QgcGhhc2UgY29tcGxldGUgZm9yIHRoaXMgY2xpZW50IGNhbGwgKi8KIAl9IGVsc2UgewotCQltbV9zZWdtZW50X3Qgb2xkZnMgPSBnZXRfZnMoKTsKLQkJc2V0X2ZzKEtFUk5FTF9EUyk7CiAJCXJldCA9IHJ4cnBjX3NlbmRfZGF0YShOVUxMLCBjYWxsLT5zb2NrZXQsIGNhbGwsIG1zZywgbGVuKTsKLQkJc2V0X2ZzKG9sZGZzKTsKIAl9CiAKIAlyZWxlYXNlX3NvY2soJmNhbGwtPnNvY2tldC0+c2spOwpAQCAtNTI5LDEzICs1MjYsMTEgQEAKIAkJCSAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgcnhycGNfc2tiX3ByaXYgKnNwOwotCXVuc2lnbmVkIGNoYXIgX191c2VyICpmcm9tOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JY29uc3Qgc3RydWN0IGlvdmVjICppb3Y7CiAJc3RydWN0IHNvY2sgKnNrID0gJnJ4LT5zazsKIAlsb25nIHRpbWVvOwogCWJvb2wgbW9yZTsKLQlpbnQgcmV0LCBpb2MsIHNlZ21lbnQsIGNvcGllZDsKKwlpbnQgcmV0LCBjb3BpZWQ7CiAKIAl0aW1lbyA9IHNvY2tfc25kdGltZW8oc2ssIG1zZy0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlUKTsKIApAQCAtNTQ1LDI1ICs1NDAsMTcgQEAKIAlpZiAoc2stPnNrX2VyciB8fCAoc2stPnNrX3NodXRkb3duICYgU0VORF9TSFVURE9XTikpCiAJCXJldHVybiAtRVBJUEU7CiAKLQlpb3YgPSBtc2ctPm1zZ19pdGVyLmlvdjsKLQlpb2MgPSBtc2ctPm1zZ19pdGVyLm5yX3NlZ3MgLSAxOwotCWZyb20gPSBpb3YtPmlvdl9iYXNlOwotCXNlZ21lbnQgPSBpb3YtPmlvdl9sZW47Ci0JaW92Kys7CiAJbW9yZSA9IG1zZy0+bXNnX2ZsYWdzICYgTVNHX01PUkU7CiAKIAlza2IgPSBjYWxsLT50eF9wZW5kaW5nOwogCWNhbGwtPnR4X3BlbmRpbmcgPSBOVUxMOwogCiAJY29waWVkID0gMDsKLQlkbyB7CisJaWYgKGxlbiA+IGlvdl9pdGVyX2NvdW50KCZtc2ctPm1zZ19pdGVyKSkKKwkJbGVuID0gaW92X2l0ZXJfY291bnQoJm1zZy0+bXNnX2l0ZXIpOworCXdoaWxlIChsZW4pIHsKIAkJaW50IGNvcHk7CiAKLQkJaWYgKHNlZ21lbnQgPiBsZW4pCi0JCQlzZWdtZW50ID0gbGVuOwotCi0JCV9kZWJ1ZygiU0VHTUVOVCAlZCBAJXAiLCBzZWdtZW50LCBmcm9tKTsKLQogCQlpZiAoIXNrYikgewogCQkJc2l6ZV90IHNpemUsIGNodW5rLCBtYXgsIHNwYWNlOwogCkBAIC02MzEsMTMgKzYxOCwxMyBAQAogCQkvKiBhcHBlbmQgbmV4dCBzZWdtZW50IG9mIGRhdGEgdG8gdGhlIGN1cnJlbnQgYnVmZmVyICovCiAJCWNvcHkgPSBza2JfdGFpbHJvb20oc2tiKTsKIAkJQVNTRVJUQ01QKGNvcHksID4sIDApOwotCQlpZiAoY29weSA+IHNlZ21lbnQpCi0JCQljb3B5ID0gc2VnbWVudDsKKwkJaWYgKGNvcHkgPiBsZW4pCisJCQljb3B5ID0gbGVuOwogCQlpZiAoY29weSA+IHNwLT5yZW1haW4pCiAJCQljb3B5ID0gc3AtPnJlbWFpbjsKIAogCQlfZGVidWcoImFkZCIpOwotCQlyZXQgPSBza2JfYWRkX2RhdGEoc2tiLCBmcm9tLCBjb3B5KTsKKwkJcmV0ID0gc2tiX2FkZF9kYXRhKHNrYiwgJm1zZy0+bXNnX2l0ZXIsIGNvcHkpOwogCQlfZGVidWcoImFkZGVkIik7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBlZmF1bHQ7CkBAIC02NDYsMTggKzYzMyw2IEBACiAJCWNvcGllZCArPSBjb3B5OwogCiAJCWxlbiAtPSBjb3B5OwotCQlzZWdtZW50IC09IGNvcHk7Ci0JCWZyb20gKz0gY29weTsKLQkJd2hpbGUgKHNlZ21lbnQgPT0gMCAmJiBpb2MgPiAwKSB7Ci0JCQlmcm9tID0gaW92LT5pb3ZfYmFzZTsKLQkJCXNlZ21lbnQgPSBpb3YtPmlvdl9sZW47Ci0JCQlpb3YrKzsKLQkJCWlvYy0tOwotCQl9Ci0JCWlmIChsZW4gPT0gMCkgewotCQkJc2VnbWVudCA9IDA7Ci0JCQlpb2MgPSAwOwotCQl9CiAKIAkJLyogY2hlY2sgZm9yIHRoZSBmYXIgc2lkZSBhYm9ydGluZyB0aGUgY2FsbCBvciBhIG5ldHdvcmsgZXJyb3IKIAkJICogb2NjdXJyaW5nICovCkBAIC02NjUsNyArNjQwLDcgQEAKIAkJCWdvdG8gY2FsbF9hYm9ydGVkOwogCiAJCS8qIGFkZCB0aGUgcGFja2V0IHRvIHRoZSBzZW5kIHF1ZXVlIGlmIGl0J3Mgbm93IGZ1bGwgKi8KLQkJaWYgKHNwLT5yZW1haW4gPD0gMCB8fCAoc2VnbWVudCA9PSAwICYmICFtb3JlKSkgeworCQlpZiAoc3AtPnJlbWFpbiA8PSAwIHx8ICghbGVuICYmICFtb3JlKSkgewogCQkJc3RydWN0IHJ4cnBjX2Nvbm5lY3Rpb24gKmNvbm4gPSBjYWxsLT5jb25uOwogCQkJdWludDMyX3Qgc2VxOwogCQkJc2l6ZV90IHBhZDsKQEAgLTcxMSwxMSArNjg2LDEwIEBACiAKIAkJCW1lbWNweShza2ItPmhlYWQsICZzcC0+aGRyLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgcnhycGNfaGVhZGVyKSk7Ci0JCQlyeHJwY19xdWV1ZV9wYWNrZXQoY2FsbCwgc2tiLCBzZWdtZW50ID09IDAgJiYgIW1vcmUpOworCQkJcnhycGNfcXVldWVfcGFja2V0KGNhbGwsIHNrYiwgIWlvdl9pdGVyX2NvdW50KCZtc2ctPm1zZ19pdGVyKSAmJiAhbW9yZSk7CiAJCQlza2IgPSBOVUxMOwogCQl9Ci0KLQl9IHdoaWxlIChzZWdtZW50ID4gMCk7CisJfQogCiBzdWNjZXNzOgogCXJldCA9IGNvcGllZDsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9LY29uZmlnIGIvbmV0L3NjaGVkL0tjb25maWcKaW5kZXggYzU0YzlkOS4uODk5ZDAzMSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL0tjb25maWcKKysrIGIvbmV0L3NjaGVkL0tjb25maWcKQEAgLTY5OCw2ICs2OTgsMzAgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3Rfdmxhbi4KIAorY29uZmlnIE5FVF9BQ1RfQlBGCisgICAgICAgIHRyaXN0YXRlICJCUEYgYmFzZWQgYWN0aW9uIgorICAgICAgICBkZXBlbmRzIG9uIE5FVF9DTFNfQUNUCisgICAgICAgIC0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgdG8gZXhlY3V0ZSBCUEYgY29kZSBvbiBwYWNrZXRzLiBUaGUgQlBGIGNvZGUgd2lsbCBkZWNpZGUKKwkgIGlmIHRoZSBwYWNrZXQgc2hvdWxkIGJlIGRyb3BwZWQgb3Igbm90LgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCisJICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2JwZi4KKworY29uZmlnIE5FVF9BQ1RfQ09OTk1BUksKKyAgICAgICAgdHJpc3RhdGUgIk5ldGZpbHRlciBDb25uZWN0aW9uIE1hcmsgUmV0cmlldmVyIgorICAgICAgICBkZXBlbmRzIG9uIE5FVF9DTFNfQUNUICYmIE5FVEZJTFRFUiAmJiBJUF9ORl9JUFRBQkxFUworICAgICAgICBkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyAmJiBORl9DT05OVFJBQ0tfTUFSSworICAgICAgICAtLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIHRvIGFsbG93IHJldHJpZXZpbmcgb2YgY29ubiBtYXJrCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY29ubm1hcmsuCisKIGNvbmZpZyBORVRfQ0xTX0lORAogCWJvb2wgIkluY29taW5nIGRldmljZSBjbGFzc2lmaWNhdGlvbiIKIAlkZXBlbmRzIG9uIE5FVF9DTFNfVTMyIHx8IE5FVF9DTFNfRlcKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9NYWtlZmlsZSBiL25ldC9zY2hlZC9NYWtlZmlsZQppbmRleCA2NzlmMjRhLi43Y2E3ZjRjIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvTWFrZWZpbGUKKysrIGIvbmV0L3NjaGVkL01ha2VmaWxlCkBAIC0xNyw2ICsxNyw4IEBACiBvYmotJChDT05GSUdfTkVUX0FDVF9TS0JFRElUKQkrPSBhY3Rfc2tiZWRpdC5vCiBvYmotJChDT05GSUdfTkVUX0FDVF9DU1VNKQkrPSBhY3RfY3N1bS5vCiBvYmotJChDT05GSUdfTkVUX0FDVF9WTEFOKQkrPSBhY3Rfdmxhbi5vCitvYmotJChDT05GSUdfTkVUX0FDVF9CUEYpCSs9IGFjdF9icGYubworb2JqLSQoQ09ORklHX05FVF9BQ1RfQ09OTk1BUkspCSs9IGFjdF9jb25ubWFyay5vCiBvYmotJChDT05GSUdfTkVUX1NDSF9GSUZPKQkrPSBzY2hfZmlmby5vCiBvYmotJChDT05GSUdfTkVUX1NDSF9DQlEpCSs9IHNjaF9jYnEubwogb2JqLSQoQ09ORklHX05FVF9TQ0hfSFRCKQkrPSBzY2hfaHRiLm8KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfYnBmLmMgYi9uZXQvc2NoZWQvYWN0X2JwZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYzVkN2ZjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3NjaGVkL2FjdF9icGYuYwpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBKaXJpIFBpcmtvIDxqaXJpQHJlc251bGxpLnVzPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9maWx0ZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgorI2luY2x1ZGUgPG5ldC9wa3Rfc2NoZWQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3RjX2FjdC90Y19icGYuaD4KKyNpbmNsdWRlIDxuZXQvdGNfYWN0L3RjX2JwZi5oPgorCisjZGVmaW5lIEJQRl9UQUJfTUFTSyAgICAgMTUKKworc3RhdGljIGludCB0Y2ZfYnBmKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsCisJCSAgIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyZXMpCit7CisJc3RydWN0IHRjZl9icGYgKmIgPSBhLT5wcml2OworCWludCBhY3Rpb247CisJaW50IGZpbHRlcl9yZXM7CisKKwlzcGluX2xvY2soJmItPnRjZl9sb2NrKTsKKwliLT50Y2ZfdG0ubGFzdHVzZSA9IGppZmZpZXM7CisJYnN0YXRzX3VwZGF0ZSgmYi0+dGNmX2JzdGF0cywgc2tiKTsKKwlhY3Rpb24gPSBiLT50Y2ZfYWN0aW9uOworCisJZmlsdGVyX3JlcyA9IEJQRl9QUk9HX1JVTihiLT5maWx0ZXIsIHNrYik7CisJaWYgKGZpbHRlcl9yZXMgPT0gMCkgeworCQkvKiBSZXR1cm4gY29kZSAwIGZyb20gdGhlIEJQRiBwcm9ncmFtCisJCSAqIGlzIGJlaW5nIGludGVycHJldGVkIGFzIGEgZHJvcCBoZXJlLgorCQkgKi8KKwkJYWN0aW9uID0gVENfQUNUX1NIT1Q7CisJCWItPnRjZl9xc3RhdHMuZHJvcHMrKzsKKwl9CisKKwlzcGluX3VubG9jaygmYi0+dGNmX2xvY2spOworCXJldHVybiBhY3Rpb247Cit9CisKK3N0YXRpYyBpbnQgdGNmX2JwZl9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsCisJCQlpbnQgYmluZCwgaW50IHJlZikKK3sKKwl1bnNpZ25lZCBjaGFyICp0cCA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKKwlzdHJ1Y3QgdGNmX2JwZiAqYiA9IGEtPnByaXY7CisJc3RydWN0IHRjX2FjdF9icGYgb3B0ID0geworCQkuaW5kZXggICAgPSBiLT50Y2ZfaW5kZXgsCisJCS5yZWZjbnQgICA9IGItPnRjZl9yZWZjbnQgLSByZWYsCisJCS5iaW5kY250ICA9IGItPnRjZl9iaW5kY250IC0gYmluZCwKKwkJLmFjdGlvbiAgID0gYi0+dGNmX2FjdGlvbiwKKwl9OworCXN0cnVjdCB0Y2ZfdCB0OworCXN0cnVjdCBubGF0dHIgKm5sYTsKKworCWlmIChubGFfcHV0KHNrYiwgVENBX0FDVF9CUEZfUEFSTVMsIHNpemVvZihvcHQpLCAmb3B0KSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlpZiAobmxhX3B1dF91MTYoc2tiLCBUQ0FfQUNUX0JQRl9PUFNfTEVOLCBiLT5icGZfbnVtX29wcykpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJbmxhID0gbmxhX3Jlc2VydmUoc2tiLCBUQ0FfQUNUX0JQRl9PUFMsIGItPmJwZl9udW1fb3BzICoKKwkJCSAgc2l6ZW9mKHN0cnVjdCBzb2NrX2ZpbHRlcikpOworCWlmICghbmxhKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCW1lbWNweShubGFfZGF0YShubGEpLCBiLT5icGZfb3BzLCBubGFfbGVuKG5sYSkpOworCisJdC5pbnN0YWxsID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMgLSBiLT50Y2ZfdG0uaW5zdGFsbCk7CisJdC5sYXN0dXNlID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMgLSBiLT50Y2ZfdG0ubGFzdHVzZSk7CisJdC5leHBpcmVzID0gamlmZmllc190b19jbG9ja190KGItPnRjZl90bS5leHBpcmVzKTsKKwlpZiAobmxhX3B1dChza2IsIFRDQV9BQ1RfQlBGX1RNLCBzaXplb2YodCksICZ0KSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJcmV0dXJuIHNrYi0+bGVuOworCitubGFfcHV0X2ZhaWx1cmU6CisJbmxtc2dfdHJpbShza2IsIHRwKTsKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBhY3RfYnBmX3BvbGljeVtUQ0FfQUNUX0JQRl9NQVggKyAxXSA9IHsKKwlbVENBX0FDVF9CUEZfUEFSTVNdCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB0Y19hY3RfYnBmKSB9LAorCVtUQ0FfQUNUX0JQRl9PUFNfTEVOXQk9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCisJW1RDQV9BQ1RfQlBGX09QU10JPSB7IC50eXBlID0gTkxBX0JJTkFSWSwKKwkJCQkgICAgLmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja19maWx0ZXIpICogQlBGX01BWElOU05TIH0sCit9OworCitzdGF0aWMgaW50IHRjZl9icGZfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwKKwkJCXN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqYSwKKwkJCWludCBvdnIsIGludCBiaW5kKQoreworCXN0cnVjdCBubGF0dHIgKnRiW1RDQV9BQ1RfQlBGX01BWCArIDFdOworCXN0cnVjdCB0Y19hY3RfYnBmICpwYXJtOworCXN0cnVjdCB0Y2ZfYnBmICpiOworCXUxNiBicGZfc2l6ZSwgYnBmX251bV9vcHM7CisJc3RydWN0IHNvY2tfZmlsdGVyICpicGZfb3BzOworCXN0cnVjdCBzb2NrX2Zwcm9nX2tlcm4gdG1wOworCXN0cnVjdCBicGZfcHJvZyAqZnA7CisJaW50IHJldDsKKworCWlmICghbmxhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIFRDQV9BQ1RfQlBGX01BWCwgbmxhLCBhY3RfYnBmX3BvbGljeSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAoIXRiW1RDQV9BQ1RfQlBGX1BBUk1TXSB8fAorCSAgICAhdGJbVENBX0FDVF9CUEZfT1BTX0xFTl0gfHwgIXRiW1RDQV9BQ1RfQlBGX09QU10pCisJCXJldHVybiAtRUlOVkFMOworCXBhcm0gPSBubGFfZGF0YSh0YltUQ0FfQUNUX0JQRl9QQVJNU10pOworCisJYnBmX251bV9vcHMgPSBubGFfZ2V0X3UxNih0YltUQ0FfQUNUX0JQRl9PUFNfTEVOXSk7CisJaWYgKGJwZl9udW1fb3BzCT4gQlBGX01BWElOU05TIHx8IGJwZl9udW1fb3BzID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJYnBmX3NpemUgPSBicGZfbnVtX29wcyAqIHNpemVvZigqYnBmX29wcyk7CisJaWYgKGJwZl9zaXplICE9IG5sYV9sZW4odGJbVENBX0FDVF9CUEZfT1BTXSkpCisJCXJldHVybiAtRUlOVkFMOworCisJYnBmX29wcyA9IGt6YWxsb2MoYnBmX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghYnBmX29wcykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkoYnBmX29wcywgbmxhX2RhdGEodGJbVENBX0FDVF9CUEZfT1BTXSksIGJwZl9zaXplKTsKKworCXRtcC5sZW4gPSBicGZfbnVtX29wczsKKwl0bXAuZmlsdGVyID0gYnBmX29wczsKKworCXJldCA9IGJwZl9wcm9nX2NyZWF0ZSgmZnAsICZ0bXApOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9icGZfb3BzOworCisJaWYgKCF0Y2ZfaGFzaF9jaGVjayhwYXJtLT5pbmRleCwgYSwgYmluZCkpIHsKKwkJcmV0ID0gdGNmX2hhc2hfY3JlYXRlKHBhcm0tPmluZGV4LCBlc3QsIGEsIHNpemVvZigqYiksIGJpbmQpOworCQlpZiAocmV0KQorCQkJZ290byBkZXN0cm95X2ZwOworCisJCXJldCA9IEFDVF9QX0NSRUFURUQ7CisJfSBlbHNlIHsKKwkJaWYgKGJpbmQpCisJCQlnb3RvIGRlc3Ryb3lfZnA7CisJCXRjZl9oYXNoX3JlbGVhc2UoYSwgYmluZCk7CisJCWlmICghb3ZyKSB7CisJCQlyZXQgPSAtRUVYSVNUOworCQkJZ290byBkZXN0cm95X2ZwOworCQl9CisJfQorCisJYiA9IHRvX2JwZihhKTsKKwlzcGluX2xvY2tfYmgoJmItPnRjZl9sb2NrKTsKKwliLT50Y2ZfYWN0aW9uID0gcGFybS0+YWN0aW9uOworCWItPmJwZl9udW1fb3BzID0gYnBmX251bV9vcHM7CisJYi0+YnBmX29wcyA9IGJwZl9vcHM7CisJYi0+ZmlsdGVyID0gZnA7CisJc3Bpbl91bmxvY2tfYmgoJmItPnRjZl9sb2NrKTsKKworCWlmIChyZXQgPT0gQUNUX1BfQ1JFQVRFRCkKKwkJdGNmX2hhc2hfaW5zZXJ0KGEpOworCXJldHVybiByZXQ7CisKK2Rlc3Ryb3lfZnA6CisJYnBmX3Byb2dfZGVzdHJveShmcCk7CitmcmVlX2JwZl9vcHM6CisJa2ZyZWUoYnBmX29wcyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgdGNmX2JwZl9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEsIGludCBiaW5kKQoreworCXN0cnVjdCB0Y2ZfYnBmICpiID0gYS0+cHJpdjsKKworCWJwZl9wcm9nX2Rlc3Ryb3koYi0+ZmlsdGVyKTsKK30KKworc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9icGZfb3BzID0geworCS5raW5kID0JCSJicGYiLAorCS50eXBlID0JCVRDQV9BQ1RfQlBGLAorCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5hY3QgPQkJdGNmX2JwZiwKKwkuZHVtcCA9CQl0Y2ZfYnBmX2R1bXAsCisJLmNsZWFudXAgPQl0Y2ZfYnBmX2NsZWFudXAsCisJLmluaXQgPQkJdGNmX2JwZl9pbml0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgYnBmX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIHRjZl9yZWdpc3Rlcl9hY3Rpb24oJmFjdF9icGZfb3BzLCBCUEZfVEFCX01BU0spOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYnBmX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJdGNmX3VucmVnaXN0ZXJfYWN0aW9uKCZhY3RfYnBmX29wcyk7Cit9CisKK21vZHVsZV9pbml0KGJwZl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChicGZfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJKaXJpIFBpcmtvIDxqaXJpQHJlc251bGxpLnVzPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUQyBCUEYgYmFzZWQgYWN0aW9uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2Nvbm5tYXJrLmMgYi9uZXQvc2NoZWQvYWN0X2Nvbm5tYXJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU0NzI1MQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9zY2hlZC9hY3RfY29ubm1hcmsuYwpAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIG5ldC9zY2hlZC9hY3RfY29ubm1hcmsuYyAgbmV0ZmlsdGVyIGNvbm5tYXJrIHJldHJpZXZlciBhY3Rpb24KKyAqIHNrYiBtYXJrIGlzIG92ZXItd3JpdHRlbgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvcGt0X2Nscy5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgorI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5oPgorI2luY2x1ZGUgPG5ldC9hY3RfYXBpLmg+CisjaW5jbHVkZSA8dWFwaS9saW51eC90Y19hY3QvdGNfY29ubm1hcmsuaD4KKyNpbmNsdWRlIDxuZXQvdGNfYWN0L3RjX2Nvbm5tYXJrLmg+CisKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja196b25lcy5oPgorCisjZGVmaW5lIENPTk5NQVJLX1RBQl9NQVNLICAgICAzCisKK3N0YXRpYyBpbnQgdGNmX2Nvbm5tYXJrKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmEsCisJCQlzdHJ1Y3QgdGNmX3Jlc3VsdCAqcmVzKQoreworCWNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqdGhhc2g7CisJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgdGNmX2Nvbm5tYXJrX2luZm8gKmNhID0gYS0+cHJpdjsKKwlzdHJ1Y3QgbmZfY29ubiAqYzsKKwlpbnQgcHJvdG87CisKKwlzcGluX2xvY2soJmNhLT50Y2ZfbG9jayk7CisJY2EtPnRjZl90bS5sYXN0dXNlID0gamlmZmllczsKKwlic3RhdHNfdXBkYXRlKCZjYS0+dGNmX2JzdGF0cywgc2tiKTsKKworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgeworCQlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGlwaGRyKSkKKwkJCWdvdG8gb3V0OworCisJCXByb3RvID0gTkZQUk9UT19JUFY0OworCX0gZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgeworCQlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKQorCQkJZ290byBvdXQ7CisKKwkJcHJvdG8gPSBORlBST1RPX0lQVjY7CisJfSBlbHNlIHsKKwkJZ290byBvdXQ7CisJfQorCisJYyA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOworCWlmIChjKSB7CisJCXNrYi0+bWFyayA9IGMtPm1hcms7CisJCS8qIHVzaW5nIG92ZXJsaW1pdHMgc3RhdHMgdG8gY291bnQgaG93IG1hbnkgcGFja2V0cyBtYXJrZWQgKi8KKwkJY2EtPnRjZl9xc3RhdHMub3ZlcmxpbWl0cysrOworCQluZl9jdF9wdXQoYyk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbmZfY3RfZ2V0X3R1cGxlcHIoc2tiLCBza2JfbmV0d29ya19vZmZzZXQoc2tiKSwKKwkJCSAgICAgICBwcm90bywgJnR1cGxlKSkKKwkJZ290byBvdXQ7CisKKwl0aGFzaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChkZXZfbmV0KHNrYi0+ZGV2KSwgY2EtPnpvbmUsICZ0dXBsZSk7CisJaWYgKCF0aGFzaCkKKwkJZ290byBvdXQ7CisKKwljID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayh0aGFzaCk7CisJLyogdXNpbmcgb3ZlcmxpbWl0cyBzdGF0cyB0byBjb3VudCBob3cgbWFueSBwYWNrZXRzIG1hcmtlZCAqLworCWNhLT50Y2ZfcXN0YXRzLm92ZXJsaW1pdHMrKzsKKwlza2ItPm1hcmsgPSBjLT5tYXJrOworCW5mX2N0X3B1dChjKTsKKworb3V0OgorCXNrYi0+bmZjdCA9IE5VTEw7CisJc3Bpbl91bmxvY2soJmNhLT50Y2ZfbG9jayk7CisJcmV0dXJuIGNhLT50Y2ZfYWN0aW9uOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY29ubm1hcmtfcG9saWN5W1RDQV9DT05OTUFSS19NQVggKyAxXSA9IHsKKwlbVENBX0NPTk5NQVJLX1BBUk1TXSA9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgdGNfY29ubm1hcmspIH0sCit9OworCitzdGF0aWMgaW50IHRjZl9jb25ubWFya19pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLAorCQkJICAgICBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKmEsCisJCQkgICAgIGludCBvdnIsIGludCBiaW5kKQoreworCXN0cnVjdCBubGF0dHIgKnRiW1RDQV9DT05OTUFSS19NQVggKyAxXTsKKwlzdHJ1Y3QgdGNmX2Nvbm5tYXJrX2luZm8gKmNpOworCXN0cnVjdCB0Y19jb25ubWFyayAqcGFybTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghbmxhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIFRDQV9DT05OTUFSS19NQVgsIG5sYSwgY29ubm1hcmtfcG9saWN5KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXBhcm0gPSBubGFfZGF0YSh0YltUQ0FfQ09OTk1BUktfUEFSTVNdKTsKKworCWlmICghdGNmX2hhc2hfY2hlY2socGFybS0+aW5kZXgsIGEsIGJpbmQpKSB7CisJCXJldCA9IHRjZl9oYXNoX2NyZWF0ZShwYXJtLT5pbmRleCwgZXN0LCBhLCBzaXplb2YoKmNpKSwgYmluZCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWNpID0gdG9fY29ubm1hcmsoYSk7CisJCWNpLT50Y2ZfYWN0aW9uID0gcGFybS0+YWN0aW9uOworCQljaS0+em9uZSA9IHBhcm0tPnpvbmU7CisKKwkJdGNmX2hhc2hfaW5zZXJ0KGEpOworCQlyZXQgPSBBQ1RfUF9DUkVBVEVEOworCX0gZWxzZSB7CisJCWNpID0gdG9fY29ubm1hcmsoYSk7CisJCWlmIChiaW5kKQorCQkJcmV0dXJuIDA7CisJCXRjZl9oYXNoX3JlbGVhc2UoYSwgYmluZCk7CisJCWlmICghb3ZyKQorCQkJcmV0dXJuIC1FRVhJU1Q7CisJCS8qIHJlcGxhY2luZyBhY3Rpb24gYW5kIHpvbmUgKi8KKwkJY2ktPnRjZl9hY3Rpb24gPSBwYXJtLT5hY3Rpb247CisJCWNpLT56b25lID0gcGFybS0+em9uZTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCB0Y2ZfY29ubm1hcmtfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLAorCQkJCSAgICBpbnQgYmluZCwgaW50IHJlZikKK3sKKwl1bnNpZ25lZCBjaGFyICpiID0gc2tiX3RhaWxfcG9pbnRlcihza2IpOworCXN0cnVjdCB0Y2ZfY29ubm1hcmtfaW5mbyAqY2kgPSBhLT5wcml2OworCisJc3RydWN0IHRjX2Nvbm5tYXJrIG9wdCA9IHsKKwkJLmluZGV4ICAgPSBjaS0+dGNmX2luZGV4LAorCQkucmVmY250ICA9IGNpLT50Y2ZfcmVmY250IC0gcmVmLAorCQkuYmluZGNudCA9IGNpLT50Y2ZfYmluZGNudCAtIGJpbmQsCisJCS5hY3Rpb24gID0gY2ktPnRjZl9hY3Rpb24sCisJCS56b25lICAgPSBjaS0+em9uZSwKKwl9OworCXN0cnVjdCB0Y2ZfdCB0OworCisJaWYgKG5sYV9wdXQoc2tiLCBUQ0FfQ09OTk1BUktfUEFSTVMsIHNpemVvZihvcHQpLCAmb3B0KSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwl0Lmluc3RhbGwgPSBqaWZmaWVzX3RvX2Nsb2NrX3QoamlmZmllcyAtIGNpLT50Y2ZfdG0uaW5zdGFsbCk7CisJdC5sYXN0dXNlID0gamlmZmllc190b19jbG9ja190KGppZmZpZXMgLSBjaS0+dGNmX3RtLmxhc3R1c2UpOworCXQuZXhwaXJlcyA9IGppZmZpZXNfdG9fY2xvY2tfdChjaS0+dGNmX3RtLmV4cGlyZXMpOworCWlmIChubGFfcHV0KHNrYiwgVENBX0NPTk5NQVJLX1RNLCBzaXplb2YodCksICZ0KSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlyZXR1cm4gc2tiLT5sZW47CitubGFfcHV0X2ZhaWx1cmU6CisJbmxtc2dfdHJpbShza2IsIGIpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9jb25ubWFya19vcHMgPSB7CisJLmtpbmQJCT0JImNvbm5tYXJrIiwKKwkudHlwZQkJPQlUQ0FfQUNUX0NPTk5NQVJLLAorCS5vd25lcgkJPQlUSElTX01PRFVMRSwKKwkuYWN0CQk9CXRjZl9jb25ubWFyaywKKwkuZHVtcAkJPQl0Y2ZfY29ubm1hcmtfZHVtcCwKKwkuaW5pdAkJPQl0Y2ZfY29ubm1hcmtfaW5pdCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNvbm5tYXJrX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIHRjZl9yZWdpc3Rlcl9hY3Rpb24oJmFjdF9jb25ubWFya19vcHMsIENPTk5NQVJLX1RBQl9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNvbm5tYXJrX2NsZWFudXBfbW9kdWxlKHZvaWQpCit7CisJdGNmX3VucmVnaXN0ZXJfYWN0aW9uKCZhY3RfY29ubm1hcmtfb3BzKTsKK30KKworbW9kdWxlX2luaXQoY29ubm1hcmtfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoY29ubm1hcmtfY2xlYW51cF9tb2R1bGUpOworTU9EVUxFX0FVVEhPUigiRmVsaXggRmlldGthdSA8bmJkQG9wZW53cnQub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb25uZWN0aW9uIHRyYWNraW5nIG1hcmsgcmVzdG9yaW5nIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfY3N1bS5jIGIvbmV0L3NjaGVkL2FjdF9jc3VtLmMKaW5kZXggZWRiZjQwZC4uNGNkNWNmMSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9jc3VtLmMKKysrIGIvbmV0L3NjaGVkL2FjdF9jc3VtLmMKQEAgLTUwOSw3ICs1MDksNyBAQAogCWlmICh1bmxpa2VseShhY3Rpb24gPT0gVENfQUNUX1NIT1QpKQogCQlnb3RvIGRyb3A7CiAKLQlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKKwlzd2l0Y2ggKHRjX3NrYl9wcm90b2NvbChza2IpKSB7CiAJY2FzZSBjcHVfdG9fYmUxNihFVEhfUF9JUCk6CiAJCWlmICghdGNmX2NzdW1faXB2NChza2IsIHVwZGF0ZV9mbGFncykpCiAJCQlnb3RvIGRyb3A7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2FwaS5jIGIvbmV0L3NjaGVkL2Nsc19hcGkuYwppbmRleCBhYWQ2YTY3Li5iYWVmOTg3IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2FwaS5jCisrKyBiL25ldC9zY2hlZC9jbHNfYXBpLmMKQEAgLTU1Niw4ICs1NTYsOSBAQAogfQogRVhQT1JUX1NZTUJPTCh0Y2ZfZXh0c19jaGFuZ2UpOwogCi0jZGVmaW5lIHRjZl9leHRzX2ZpcnN0X2FjdChleHQpIFwKLQkJbGlzdF9maXJzdF9lbnRyeSgmKGV4dHMpLT5hY3Rpb25zLCBzdHJ1Y3QgdGNfYWN0aW9uLCBsaXN0KQorI2RlZmluZSB0Y2ZfZXh0c19maXJzdF9hY3QoZXh0KQkJCQkJXAorCWxpc3RfZmlyc3RfZW50cnlfb3JfbnVsbCgmKGV4dHMpLT5hY3Rpb25zLAkJXAorCQkJCSBzdHJ1Y3QgdGNfYWN0aW9uLCBsaXN0KQogCiBpbnQgdGNmX2V4dHNfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNmX2V4dHMgKmV4dHMpCiB7CkBAIC02MDMsNyArNjA0LDcgQEAKIHsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19BQ1QKIAlzdHJ1Y3QgdGNfYWN0aW9uICphID0gdGNmX2V4dHNfZmlyc3RfYWN0KGV4dHMpOwotCWlmICh0Y2ZfYWN0aW9uX2NvcHlfc3RhdHMoc2tiLCBhLCAxKSA8IDApCisJaWYgKGEgIT0gTlVMTCAmJiB0Y2ZfYWN0aW9uX2NvcHlfc3RhdHMoc2tiLCBhLCAxKSA8IDApCiAJCXJldHVybiAtMTsKICNlbmRpZgogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2Nsc19iYXNpYy5jIGIvbmV0L3NjaGVkL2Nsc19iYXNpYy5jCmluZGV4IDVhZWQzNDEuLmZjMzk5ZGIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYmFzaWMuYworKysgYi9uZXQvc2NoZWQvY2xzX2Jhc2ljLmMKQEAgLTY1LDkgKzY1LDEyIEBACiAJaWYgKGhlYWQgPT0gTlVMTCkKIAkJcmV0dXJuIDBVTDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoZiwgJmhlYWQtPmZsaXN0LCBsaW5rKQotCQlpZiAoZi0+aGFuZGxlID09IGhhbmRsZSkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGYsICZoZWFkLT5mbGlzdCwgbGluaykgeworCQlpZiAoZi0+aGFuZGxlID09IGhhbmRsZSkgewogCQkJbCA9ICh1bnNpZ25lZCBsb25nKSBmOworCQkJYnJlYWs7CisJCX0KKwl9CiAKIAlyZXR1cm4gbDsKIH0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYnBmLmMgYi9uZXQvc2NoZWQvY2xzX2JwZi5jCmluZGV4IDg0YzgyMTkuLjVmM2VlOWUgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYnBmLmMKKysrIGIvbmV0L3NjaGVkL2Nsc19icGYuYwpAQCAtMzcsNyArMzcsNyBAQAogCXN0cnVjdCB0Y2ZfcmVzdWx0IHJlczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpbms7CiAJdTMyIGhhbmRsZTsKLQl1MTYgYnBmX2xlbjsKKwl1MTYgYnBmX251bV9vcHM7CiAJc3RydWN0IHRjZl9wcm90byAqdHA7CiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKIH07CkBAIC0xNjAsNyArMTYwLDcgQEAKIAlzdHJ1Y3QgdGNmX2V4dHMgZXh0czsKIAlzdHJ1Y3Qgc29ja19mcHJvZ19rZXJuIHRtcDsKIAlzdHJ1Y3QgYnBmX3Byb2cgKmZwOwotCXUxNiBicGZfc2l6ZSwgYnBmX2xlbjsKKwl1MTYgYnBmX3NpemUsIGJwZl9udW1fb3BzOwogCXUzMiBjbGFzc2lkOwogCWludCByZXQ7CiAKQEAgLTE3MywxMyArMTczLDE4IEBACiAJCXJldHVybiByZXQ7CiAKIAljbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX0JQRl9DTEFTU0lEXSk7Ci0JYnBmX2xlbiA9IG5sYV9nZXRfdTE2KHRiW1RDQV9CUEZfT1BTX0xFTl0pOwotCWlmIChicGZfbGVuID4gQlBGX01BWElOU05TIHx8IGJwZl9sZW4gPT0gMCkgeworCWJwZl9udW1fb3BzID0gbmxhX2dldF91MTYodGJbVENBX0JQRl9PUFNfTEVOXSk7CisJaWYgKGJwZl9udW1fb3BzID4gQlBGX01BWElOU05TIHx8IGJwZl9udW1fb3BzID09IDApIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJvdXQ7CiAJfQogCi0JYnBmX3NpemUgPSBicGZfbGVuICogc2l6ZW9mKCpicGZfb3BzKTsKKwlicGZfc2l6ZSA9IGJwZl9udW1fb3BzICogc2l6ZW9mKCpicGZfb3BzKTsKKwlpZiAoYnBmX3NpemUgIT0gbmxhX2xlbih0YltUQ0FfQlBGX09QU10pKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3V0OworCX0KKwogCWJwZl9vcHMgPSBremFsbG9jKGJwZl9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoYnBmX29wcyA9PSBOVUxMKSB7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0xODgsMTQgKzE5MywxNCBAQAogCiAJbWVtY3B5KGJwZl9vcHMsIG5sYV9kYXRhKHRiW1RDQV9CUEZfT1BTXSksIGJwZl9zaXplKTsKIAotCXRtcC5sZW4gPSBicGZfbGVuOworCXRtcC5sZW4gPSBicGZfbnVtX29wczsKIAl0bXAuZmlsdGVyID0gYnBmX29wczsKIAogCXJldCA9IGJwZl9wcm9nX2NyZWF0ZSgmZnAsICZ0bXApOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3V0X2ZyZWU7CiAKLQlwcm9nLT5icGZfbGVuID0gYnBmX2xlbjsKKwlwcm9nLT5icGZfbnVtX29wcyA9IGJwZl9udW1fb3BzOwogCXByb2ctPmJwZl9vcHMgPSBicGZfb3BzOwogCXByb2ctPmZpbHRlciA9IGZwOwogCXByb2ctPnJlcy5jbGFzc2lkID0gY2xhc3NpZDsKQEAgLTIxNSwxNSArMjIwLDIxIEBACiAJCQkJICAgc3RydWN0IGNsc19icGZfaGVhZCAqaGVhZCkKIHsKIAl1bnNpZ25lZCBpbnQgaSA9IDB4ODAwMDAwMDA7CisJdTMyIGhhbmRsZTsKIAogCWRvIHsKIAkJaWYgKCsraGVhZC0+aGdlbiA9PSAweDdGRkZGRkZGKQogCQkJaGVhZC0+aGdlbiA9IDE7CiAJfSB3aGlsZSAoLS1pID4gMCAmJiBjbHNfYnBmX2dldCh0cCwgaGVhZC0+aGdlbikpOwotCWlmIChpID09IDApCi0JCXByX2VycigiSW5zdWZmaWNpZW50IG51bWJlciBvZiBoYW5kbGVzXG4iKTsKIAotCXJldHVybiBpOworCWlmICh1bmxpa2VseShpID09IDApKSB7CisJCXByX2VycigiSW5zdWZmaWNpZW50IG51bWJlciBvZiBoYW5kbGVzXG4iKTsKKwkJaGFuZGxlID0gMDsKKwl9IGVsc2UgeworCQloYW5kbGUgPSBoZWFkLT5oZ2VuOworCX0KKworCXJldHVybiBoYW5kbGU7CiB9CiAKIHN0YXRpYyBpbnQgY2xzX2JwZl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLApAQCAtMzAzLDEwICszMTQsMTAgQEAKIAogCWlmIChubGFfcHV0X3UzMihza2IsIFRDQV9CUEZfQ0xBU1NJRCwgcHJvZy0+cmVzLmNsYXNzaWQpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlpZiAobmxhX3B1dF91MTYoc2tiLCBUQ0FfQlBGX09QU19MRU4sIHByb2ctPmJwZl9sZW4pKQorCWlmIChubGFfcHV0X3UxNihza2IsIFRDQV9CUEZfT1BTX0xFTiwgcHJvZy0+YnBmX251bV9vcHMpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCW5sYSA9IG5sYV9yZXNlcnZlKHNrYiwgVENBX0JQRl9PUFMsIHByb2ctPmJwZl9sZW4gKgorCW5sYSA9IG5sYV9yZXNlcnZlKHNrYiwgVENBX0JQRl9PUFMsIHByb2ctPmJwZl9udW1fb3BzICoKIAkJCSAgc2l6ZW9mKHN0cnVjdCBzb2NrX2ZpbHRlcikpOwogCWlmIChubGEgPT0gTlVMTCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX2Zsb3cuYyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jCmluZGV4IDE1ZDY4ZjIuLjQ2MTQxMDMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfZmxvdy5jCisrKyBiL25ldC9zY2hlZC9jbHNfZmxvdy5jCkBAIC03Nyw3ICs3Nyw3IEBACiB7CiAJaWYgKGZsb3ctPmRzdCkKIAkJcmV0dXJuIG50b2hsKGZsb3ctPmRzdCk7Ci0JcmV0dXJuIGFkZHJfZm9sZChza2JfZHN0KHNrYikpIF4gKF9fZm9yY2UgdTE2KXNrYi0+cHJvdG9jb2w7CisJcmV0dXJuIGFkZHJfZm9sZChza2JfZHN0KHNrYikpIF4gKF9fZm9yY2UgdTE2KSB0Y19za2JfcHJvdG9jb2woc2tiKTsKIH0KIAogc3RhdGljIHUzMiBmbG93X2dldF9wcm90byhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgZmxvd19rZXlzICpmbG93KQpAQCAtOTgsNyArOTgsNyBAQAogCWlmIChmbG93LT5wb3J0cykKIAkJcmV0dXJuIG50b2hzKGZsb3ctPnBvcnQxNlsxXSk7CiAKLQlyZXR1cm4gYWRkcl9mb2xkKHNrYl9kc3Qoc2tiKSkgXiAoX19mb3JjZSB1MTYpc2tiLT5wcm90b2NvbDsKKwlyZXR1cm4gYWRkcl9mb2xkKHNrYl9kc3Qoc2tiKSkgXiAoX19mb3JjZSB1MTYpIHRjX3NrYl9wcm90b2NvbChza2IpOwogfQogCiBzdGF0aWMgdTMyIGZsb3dfZ2V0X2lpZihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMTQ0LDcgKzE0NCw3IEBACiAKIHN0YXRpYyB1MzIgZmxvd19nZXRfbmZjdF9zcmMoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IGZsb3dfa2V5cyAqZmxvdykKIHsKLQlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKKwlzd2l0Y2ggKHRjX3NrYl9wcm90b2NvbChza2IpKSB7CiAJY2FzZSBodG9ucyhFVEhfUF9JUCk6CiAJCXJldHVybiBudG9obChDVFRVUExFKHNrYiwgc3JjLnUzLmlwKSk7CiAJY2FzZSBodG9ucyhFVEhfUF9JUFY2KToKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiBzdGF0aWMgdTMyIGZsb3dfZ2V0X25mY3RfZHN0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBmbG93X2tleXMgKmZsb3cpCiB7Ci0Jc3dpdGNoIChza2ItPnByb3RvY29sKSB7CisJc3dpdGNoICh0Y19za2JfcHJvdG9jb2woc2tiKSkgewogCWNhc2UgaHRvbnMoRVRIX1BfSVApOgogCQlyZXR1cm4gbnRvaGwoQ1RUVVBMRShza2IsIGRzdC51My5pcCkpOwogCWNhc2UgaHRvbnMoRVRIX1BfSVBWNik6CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvZW1faXBzZXQuYyBiL25ldC9zY2hlZC9lbV9pcHNldC5jCmluZGV4IDViNGE0ZWYuLmEzZDc5YzggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9lbV9pcHNldC5jCisrKyBiL25ldC9zY2hlZC9lbV9pcHNldC5jCkBAIC01OSw3ICs1OSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgKmluZGV2ID0gTlVMTDsKIAlpbnQgcmV0LCBuZXR3b3JrX29mZnNldDsKIAotCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgeworCXN3aXRjaCAodGNfc2tiX3Byb3RvY29sKHNrYikpIHsKIAljYXNlIGh0b25zKEVUSF9QX0lQKToKIAkJYWNwYXIuZmFtaWx5ID0gTkZQUk9UT19JUFY0OwogCQlpZiAoIXBza2JfbmV0d29ya19tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9lbV9tZXRhLmMgYi9uZXQvc2NoZWQvZW1fbWV0YS5jCmluZGV4IGM4ZjhjMzkuLmI1Mjk0Y2UgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9lbV9tZXRhLmMKKysrIGIvbmV0L3NjaGVkL2VtX21ldGEuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiB7CiAJdW5zaWduZWQgc2hvcnQgdGFnOwogCi0JdGFnID0gdmxhbl90eF90YWdfZ2V0KHNrYik7CisJdGFnID0gc2tiX3ZsYW5fdGFnX2dldChza2IpOwogCWlmICghdGFnICYmIF9fdmxhbl9nZXRfdGFnKHNrYiwgJnRhZykpCiAJCSplcnIgPSAtMTsKIAllbHNlCkBAIC0xOTcsNyArMTk3LDcgQEAKIE1FVEFfQ09MTEVDVE9SKGludF9wcm90b2NvbCkKIHsKIAkvKiBMZXQgdXNlcnNwYWNlIHRha2UgY2FyZSBvZiB0aGUgYnl0ZSBvcmRlcmluZyAqLwotCWRzdC0+dmFsdWUgPSBza2ItPnByb3RvY29sOworCWRzdC0+dmFsdWUgPSB0Y19za2JfcHJvdG9jb2woc2tiKTsKIH0KIAogTUVUQV9DT0xMRUNUT1IoaW50X3BrdHR5cGUpCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCA3NmY0MDJlLi4yNDNiN2QxIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCisrKyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTE4MDcsNyArMTgwNyw3IEBACiBpbnQgdGNfY2xhc3NpZnlfY29tcGF0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLAogCQkgICAgICAgc3RydWN0IHRjZl9yZXN1bHQgKnJlcykKIHsKLQlfX2JlMTYgcHJvdG9jb2wgPSBza2ItPnByb3RvY29sOworCV9fYmUxNiBwcm90b2NvbCA9IHRjX3NrYl9wcm90b2NvbChza2IpOwogCWludCBlcnI7CiAKIAlmb3IgKDsgdHA7IHRwID0gcmN1X2RlcmVmZXJlbmNlX2JoKHRwLT5uZXh0KSkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kc21hcmsuYyBiL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMKaW5kZXggMjI3MTE0Zi4uNjY3MDBhNiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kc21hcmsuYworKysgYi9uZXQvc2NoZWQvc2NoX2RzbWFyay5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIAlwcl9kZWJ1ZygiJXMoc2tiICVwLHNjaCAlcCxbcWRpc2MgJXBdKVxuIiwgX19mdW5jX18sIHNrYiwgc2NoLCBwKTsKIAogCWlmIChwLT5zZXRfdGNfaW5kZXgpIHsKLQkJc3dpdGNoIChza2ItPnByb3RvY29sKSB7CisJCXN3aXRjaCAodGNfc2tiX3Byb3RvY29sKHNrYikpIHsKIAkJY2FzZSBodG9ucyhFVEhfUF9JUCk6CiAJCQlpZiAoc2tiX2Nvd19oZWFkKHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQogCQkJCWdvdG8gZHJvcDsKQEAgLTI4OSw3ICsyODksNyBAQAogCWluZGV4ID0gc2tiLT50Y19pbmRleCAmIChwLT5pbmRpY2VzIC0gMSk7CiAJcHJfZGVidWcoImluZGV4ICVkLT4lZFxuIiwgc2tiLT50Y19pbmRleCwgaW5kZXgpOwogCi0Jc3dpdGNoIChza2ItPnByb3RvY29sKSB7CisJc3dpdGNoICh0Y19za2JfcHJvdG9jb2woc2tiKSkgewogCWNhc2UgaHRvbnMoRVRIX1BfSVApOgogCQlpcHY0X2NoYW5nZV9kc2ZpZWxkKGlwX2hkcihza2IpLCBwLT5tYXNrW2luZGV4XSwKIAkJCQkgICAgcC0+dmFsdWVbaW5kZXhdKTsKQEAgLTMwNiw3ICszMDYsNyBAQAogCQkgKi8KIAkJaWYgKHAtPm1hc2tbaW5kZXhdICE9IDB4ZmYgfHwgcC0+dmFsdWVbaW5kZXhdKQogCQkJcHJfd2FybigiJXM6IHVuc3VwcG9ydGVkIHByb3RvY29sICVkXG4iLAotCQkJCV9fZnVuY19fLCBudG9ocyhza2ItPnByb3RvY29sKSk7CisJCQkJX19mdW5jX18sIG50b2hzKHRjX3NrYl9wcm90b2NvbChza2IpKSk7CiAJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9mcS5jIGIvbmV0L3NjaGVkL3NjaF9mcS5jCmluZGV4IDliMDU5MjQuLmRmY2VhMjAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZnEuYworKysgYi9uZXQvc2NoZWQvc2NoX2ZxLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogbmV0L3NjaGVkL3NjaF9mcS5jIEZhaXIgUXVldWUgUGFja2V0IFNjaGVkdWxlciAocGVyIGZsb3cgcGFjaW5nKQogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTMgRXJpYyBEdW1hemV0IDxlZHVtYXpldEBnb29nbGUuY29tPgorICogIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEVyaWMgRHVtYXpldCA8ZWR1bWF6ZXRAZ29vZ2xlLmNvbT4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgPG5ldC9wa3Rfc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC90Y3Bfc3RhdGVzLmg+CisjaW5jbHVkZSA8bmV0L3RjcC5oPgogCiAvKgogICogUGVyIGZsb3cgc3RydWN0dXJlLCBkeW5hbWljYWxseSBhbGxvY2F0ZWQKQEAgLTkyLDYgKzkzLDcgQEAKIAl1MzIJCWZsb3dfcmVmaWxsX2RlbGF5OwogCXUzMgkJZmxvd19tYXhfcmF0ZTsJLyogb3B0aW9uYWwgbWF4IHJhdGUgcGVyIGZsb3cgKi8KIAl1MzIJCWZsb3dfcGxpbWl0OwkvKiBtYXggcGFja2V0cyBwZXIgZmxvdyAqLworCXUzMgkJb3JwaGFuX21hc2s7CS8qIG1hc2sgZm9yIG9ycGhhbmVkIHNrYiAqLwogCXN0cnVjdCByYl9yb290CSpmcV9yb290OwogCXU4CQlyYXRlX2VuYWJsZTsKIAl1OAkJZnFfdHJlZXNfbG9nOwpAQCAtMjIyLDExICsyMjQsMjAgQEAKIAlpZiAodW5saWtlbHkoKHNrYi0+cHJpb3JpdHkgJiBUQ19QUklPX01BWCkgPT0gVENfUFJJT19DT05UUk9MKSkKIAkJcmV0dXJuICZxLT5pbnRlcm5hbDsKIAotCWlmICh1bmxpa2VseSghc2spKSB7CisJLyogU1lOQUNLIG1lc3NhZ2VzIGFyZSBhdHRhY2hlZCB0byBhIGxpc3RlbmVyIHNvY2tldC4KKwkgKiAxKSBUaGV5IGFyZSBub3QgcGFydCBvZiBhICdmbG93JyB5ZXQKKwkgKiAyKSBXZSBkbyBub3Qgd2FudCB0byByYXRlIGxpbWl0IHRoZW0gKGVnIFNZTkZMT09EIGF0dGFjayksCisJICogICAgZXNwZWNpYWxseSBpZiB0aGUgbGlzdGVuZXIgc2V0IFNPX01BWF9QQUNJTkdfUkFURQorCSAqIDMpIFdlIHByZXRlbmQgdGhleSBhcmUgb3JwaGFuZWQKKwkgKi8KKwlpZiAoIXNrIHx8IHNrLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7CisJCXVuc2lnbmVkIGxvbmcgaGFzaCA9IHNrYl9nZXRfaGFzaChza2IpICYgcS0+b3JwaGFuX21hc2s7CisKIAkJLyogQnkgZm9yY2luZyBsb3cgb3JkZXIgYml0IHRvIDEsIHdlIG1ha2Ugc3VyZSB0byBub3QKIAkJICogY29sbGlkZSB3aXRoIGEgbG9jYWwgZmxvdyAoc29ja2V0IHBvaW50ZXJzIGFyZSB3b3JkIGFsaWduZWQpCiAJCSAqLwotCQlzayA9IChzdHJ1Y3Qgc29jayAqKShza2JfZ2V0X2hhc2goc2tiKSB8IDFMKTsKKwkJc2sgPSAoc3RydWN0IHNvY2sgKikoKGhhc2ggPDwgMSkgfCAxVUwpOworCQlza2Jfb3JwaGFuKHNrYik7CiAJfQogCiAJcm9vdCA9ICZxLT5mcV9yb290W2hhc2hfMzIoKHUzMikobG9uZylzaywgcS0+ZnFfdHJlZXNfbG9nKV07CkBAIC00NDUsNyArNDU2LDkgQEAKIAkJZ290byBiZWdpbjsKIAl9CiAKLQlpZiAodW5saWtlbHkoZi0+aGVhZCAmJiBub3cgPCBmLT50aW1lX25leHRfcGFja2V0KSkgeworCXNrYiA9IGYtPmhlYWQ7CisJaWYgKHVubGlrZWx5KHNrYiAmJiBub3cgPCBmLT50aW1lX25leHRfcGFja2V0ICYmCisJCSAgICAgIXNrYl9pc190Y3BfcHVyZV9hY2soc2tiKSkpIHsKIAkJaGVhZC0+Zmlyc3QgPSBmLT5uZXh0OwogCQlmcV9mbG93X3NldF90aHJvdHRsZWQocSwgZik7CiAJCWdvdG8gYmVnaW47CkBAIC00NjQsMTQgKzQ3NywxNyBAQAogCQlnb3RvIGJlZ2luOwogCX0KIAlwcmVmZXRjaCgmc2tiLT5lbmQpOwotCWYtPnRpbWVfbmV4dF9wYWNrZXQgPSBub3c7CiAJZi0+Y3JlZGl0IC09IHFkaXNjX3BrdF9sZW4oc2tiKTsKIAogCWlmIChmLT5jcmVkaXQgPiAwIHx8ICFxLT5yYXRlX2VuYWJsZSkKIAkJZ290byBvdXQ7CiAKKwkvKiBEbyBub3QgcGFjZSBsb2NhbGx5IGdlbmVyYXRlZCBhY2sgcGFja2V0cyAqLworCWlmIChza2JfaXNfdGNwX3B1cmVfYWNrKHNrYikpCisJCWdvdG8gb3V0OworCiAJcmF0ZSA9IHEtPmZsb3dfbWF4X3JhdGU7Ci0JaWYgKHNrYi0+c2sgJiYgc2tiLT5zay0+c2tfc3RhdGUgIT0gVENQX1RJTUVfV0FJVCkKKwlpZiAoc2tiLT5zaykKIAkJcmF0ZSA9IG1pbihza2ItPnNrLT5za19wYWNpbmdfcmF0ZSwgcmF0ZSk7CiAKIAlpZiAocmF0ZSAhPSB+MFUpIHsKQEAgLTY3MCw4ICs2ODYsMTQgQEAKIAlpZiAodGJbVENBX0ZRX0ZMT1dfUExJTUlUXSkKIAkJcS0+Zmxvd19wbGltaXQgPSBubGFfZ2V0X3UzMih0YltUQ0FfRlFfRkxPV19QTElNSVRdKTsKIAotCWlmICh0YltUQ0FfRlFfUVVBTlRVTV0pCi0JCXEtPnF1YW50dW0gPSBubGFfZ2V0X3UzMih0YltUQ0FfRlFfUVVBTlRVTV0pOworCWlmICh0YltUQ0FfRlFfUVVBTlRVTV0pIHsKKwkJdTMyIHF1YW50dW0gPSBubGFfZ2V0X3UzMih0YltUQ0FfRlFfUVVBTlRVTV0pOworCisJCWlmIChxdWFudHVtID4gMCkKKwkJCXEtPnF1YW50dW0gPSBxdWFudHVtOworCQllbHNlCisJCQllcnIgPSAtRUlOVkFMOworCX0KIAogCWlmICh0YltUQ0FfRlFfSU5JVElBTF9RVUFOVFVNXSkKIAkJcS0+aW5pdGlhbF9xdWFudHVtID0gbmxhX2dldF91MzIodGJbVENBX0ZRX0lOSVRJQUxfUVVBTlRVTV0pOwpAQCAtNjk4LDYgKzcyMCw5IEBACiAJCXEtPmZsb3dfcmVmaWxsX2RlbGF5ID0gdXNlY3NfdG9famlmZmllcyh1c2Vjc19kZWxheSk7CiAJfQogCisJaWYgKHRiW1RDQV9GUV9PUlBIQU5fTUFTS10pCisJCXEtPm9ycGhhbl9tYXNrID0gbmxhX2dldF91MzIodGJbVENBX0ZRX09SUEhBTl9NQVNLXSk7CisKIAlpZiAoIWVycikgewogCQlzY2hfdHJlZV91bmxvY2soc2NoKTsKIAkJZXJyID0gZnFfcmVzaXplKHNjaCwgZnFfbG9nKTsKQEAgLTc0Myw2ICs3NjgsNyBAQAogCXEtPmRlbGF5ZWQJCT0gUkJfUk9PVDsKIAlxLT5mcV9yb290CQk9IE5VTEw7CiAJcS0+ZnFfdHJlZXNfbG9nCQk9IGlsb2cyKDEwMjQpOworCXEtPm9ycGhhbl9tYXNrCQk9IDEwMjQgLSAxOwogCXFkaXNjX3dhdGNoZG9nX2luaXQoJnEtPndhdGNoZG9nLCBzY2gpOwogCiAJaWYgKG9wdCkKQEAgLTc3Miw2ICs3OTgsNyBAQAogCSAgICBubGFfcHV0X3UzMihza2IsIFRDQV9GUV9GTE9XX01BWF9SQVRFLCBxLT5mbG93X21heF9yYXRlKSB8fAogCSAgICBubGFfcHV0X3UzMihza2IsIFRDQV9GUV9GTE9XX1JFRklMTF9ERUxBWSwKIAkJCWppZmZpZXNfdG9fdXNlY3MocS0+Zmxvd19yZWZpbGxfZGVsYXkpKSB8fAorCSAgICBubGFfcHV0X3UzMihza2IsIFRDQV9GUV9PUlBIQU5fTUFTSywgcS0+b3JwaGFuX21hc2spIHx8CiAJICAgIG5sYV9wdXRfdTMyKHNrYiwgVENBX0ZRX0JVQ0tFVFNfTE9HLCBxLT5mcV90cmVlc19sb2cpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF90ZXFsLmMgYi9uZXQvc2NoZWQvc2NoX3RlcWwuYwppbmRleCA2YWRhNDIzLi5lMDI2ODcxIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RlcWwuYworKysgYi9uZXQvc2NoZWQvc2NoX3RlcWwuYwpAQCAtMTIyLDEzICsxMjIsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQKLXRlcWxfbmVpZ2hfcmVsZWFzZShzdHJ1Y3QgbmVpZ2hib3VyICpuKQotewotCWlmIChuKQotCQluZWlnaF9yZWxlYXNlKG4pOwotfQotCiBzdGF0aWMgdm9pZAogdGVxbF9yZXNldChzdHJ1Y3QgUWRpc2MgKnNjaCkKIHsKQEAgLTI0OSw4ICsyNDIsOCBAQAogCQljaGFyIGhhZGRyW01BWF9BRERSX0xFTl07CiAKIAkJbmVpZ2hfaGFfc25hcHNob3QoaGFkZHIsIG4sIGRldik7Ci0JCWVyciA9IGRldl9oYXJkX2hlYWRlcihza2IsIGRldiwgbnRvaHMoc2tiLT5wcm90b2NvbCksIGhhZGRyLAotCQkJCSAgICAgIE5VTEwsIHNrYi0+bGVuKTsKKwkJZXJyID0gZGV2X2hhcmRfaGVhZGVyKHNrYiwgZGV2LCBudG9ocyh0Y19za2JfcHJvdG9jb2woc2tiKSksCisJCQkJICAgICAgaGFkZHIsIE5VTEwsIHNrYi0+bGVuKTsKIAogCQlpZiAoZXJyIDwgMCkKIAkJCWVyciA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9uZXQvc2N0cC9hc3NvY2lvbGEuYyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jCmluZGV4IGY3OTFlZGQuLjE5N2MzZjUgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2Fzc29jaW9sYS5jCisrKyBiL25ldC9zY3RwL2Fzc29jaW9sYS5jCkBAIC0zOTEsOCArMzkxLDcgQEAKIAlzY3RwX2FzY29uZl9xdWV1ZV90ZWFyZG93bihhc29jKTsKIAogCS8qIEZyZWUgcGVuZGluZyBhZGRyZXNzIHNwYWNlIGJlaW5nIGRlbGV0ZWQgKi8KLQlpZiAoYXNvYy0+YXNjb25mX2FkZHJfZGVsX3BlbmRpbmcgIT0gTlVMTCkKLQkJa2ZyZWUoYXNvYy0+YXNjb25mX2FkZHJfZGVsX3BlbmRpbmcpOworCWtmcmVlKGFzb2MtPmFzY29uZl9hZGRyX2RlbF9wZW5kaW5nKTsKIAogCS8qIEFVVEggLSBGcmVlIHRoZSBlbmRwb2ludCBzaGFyZWQga2V5cyAqLwogCXNjdHBfYXV0aF9kZXN0cm95X2tleXMoJmFzb2MtPmVuZHBvaW50X3NoYXJlZF9rZXlzKTsKQEAgLTExODIsNyArMTE4MSw2IEBACiAJYXNvYy0+cGVlci5wZWVyX2htYWNzID0gbmV3LT5wZWVyLnBlZXJfaG1hY3M7CiAJbmV3LT5wZWVyLnBlZXJfaG1hY3MgPSBOVUxMOwogCi0Jc2N0cF9hdXRoX2tleV9wdXQoYXNvYy0+YXNvY19zaGFyZWRfa2V5KTsKIAlzY3RwX2F1dGhfYXNvY19pbml0X2FjdGl2ZV9rZXkoYXNvYywgR0ZQX0FUT01JQyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwppbmRleCBlNDllMjMxLi4wNjMyMGM4IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKKysrIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCkBAIC0yNjA4LDcgKzI2MDgsNyBAQAogCiAJCWFkZHJfcGFyYW0gPSBwYXJhbS52ICsgc2l6ZW9mKHNjdHBfYWRkaXBfcGFyYW1fdCk7CiAKLQkJYWYgPSBzY3RwX2dldF9hZl9zcGVjaWZpYyhwYXJhbV90eXBlMmFmKHBhcmFtLnAtPnR5cGUpKTsKKwkJYWYgPSBzY3RwX2dldF9hZl9zcGVjaWZpYyhwYXJhbV90eXBlMmFmKGFkZHJfcGFyYW0tPnAudHlwZSkpOwogCQlpZiAoYWYgPT0gTlVMTCkKIAkJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggYTJjMzNhNC4uYmJlZGJmYyAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtMTEzLDEwICsxMTMsOCBAQAogdW5zaWduZWQgaW50IHN5c2N0bF9uZXRfYnVzeV9wb2xsIF9fcmVhZF9tb3N0bHk7CiAjZW5kaWYKIAotc3RhdGljIHNzaXplX3Qgc29ja19haW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQkJIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcyk7Ci1zdGF0aWMgc3NpemVfdCBzb2NrX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQkJICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpOworc3RhdGljIHNzaXplX3Qgc29ja19yZWFkX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKnRvKTsKK3N0YXRpYyBzc2l6ZV90IHNvY2tfd3JpdGVfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSk7CiBzdGF0aWMgaW50IHNvY2tfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogCiBzdGF0aWMgaW50IHNvY2tfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwpAQCAtMTQyLDggKzE0MCwxMCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc29ja2V0X2ZpbGVfb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5sbHNlZWsgPQlub19sbHNlZWssCi0JLmFpb19yZWFkID0Jc29ja19haW9fcmVhZCwKLQkuYWlvX3dyaXRlID0Jc29ja19haW9fd3JpdGUsCisJLnJlYWQgPQkJbmV3X3N5bmNfcmVhZCwKKwkud3JpdGUgPQluZXdfc3luY193cml0ZSwKKwkucmVhZF9pdGVyID0Jc29ja19yZWFkX2l0ZXIsCisJLndyaXRlX2l0ZXIgPQlzb2NrX3dyaXRlX2l0ZXIsCiAJLnBvbGwgPQkJc29ja19wb2xsLAogCS51bmxvY2tlZF9pb2N0bCA9IHNvY2tfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVApAQCAtNjEzLDEzICs2MTMsNiBAQAogc3RhdGljIGlubGluZSBpbnQgX19zb2NrX3NlbmRtc2dfbm9zZWMoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJCSAgICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplKQogewotCXN0cnVjdCBzb2NrX2lvY2IgKnNpID0ga2lvY2JfdG9fc2lvY2IoaW9jYik7Ci0KLQlzaS0+c29jayA9IHNvY2s7Ci0Jc2ktPnNjbSA9IE5VTEw7Ci0Jc2ktPm1zZyA9IG1zZzsKLQlzaS0+c2l6ZSA9IHNpemU7Ci0KIAlyZXR1cm4gc29jay0+b3BzLT5zZW5kbXNnKGlvY2IsIHNvY2ssIG1zZywgc2l6ZSk7CiB9CiAKQEAgLTYzNSwxMSArNjI4LDkgQEAKIAkJCSAgIHNpemVfdCBzaXplLCBib29sIG5vc2VjKQogewogCXN0cnVjdCBraW9jYiBpb2NiOwotCXN0cnVjdCBzb2NrX2lvY2Igc2lvY2I7CiAJaW50IHJldDsKIAogCWluaXRfc3luY19raW9jYigmaW9jYiwgTlVMTCk7Ci0JaW9jYi5wcml2YXRlID0gJnNpb2NiOwogCXJldCA9IG5vc2VjID8gX19zb2NrX3NlbmRtc2dfbm9zZWMoJmlvY2IsIHNvY2ssIG1zZywgc2l6ZSkgOgogCQkgICAgICBfX3NvY2tfc2VuZG1zZygmaW9jYiwgc29jaywgbXNnLCBzaXplKTsKIAlpZiAoLUVJT0NCUVVFVUVEID09IHJldCkKQEAgLTc1NiwxNCArNzQ3LDYgQEAKIHN0YXRpYyBpbmxpbmUgaW50IF9fc29ja19yZWN2bXNnX25vc2VjKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCQkgICAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewotCXN0cnVjdCBzb2NrX2lvY2IgKnNpID0ga2lvY2JfdG9fc2lvY2IoaW9jYik7Ci0KLQlzaS0+c29jayA9IHNvY2s7Ci0Jc2ktPnNjbSA9IE5VTEw7Ci0Jc2ktPm1zZyA9IG1zZzsKLQlzaS0+c2l6ZSA9IHNpemU7Ci0Jc2ktPmZsYWdzID0gZmxhZ3M7Ci0KIAlyZXR1cm4gc29jay0+b3BzLT5yZWN2bXNnKGlvY2IsIHNvY2ssIG1zZywgc2l6ZSwgZmxhZ3MpOwogfQogCkBAIC03NzksMTEgKzc2Miw5IEBACiAJCSBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQogewogCXN0cnVjdCBraW9jYiBpb2NiOwotCXN0cnVjdCBzb2NrX2lvY2Igc2lvY2I7CiAJaW50IHJldDsKIAogCWluaXRfc3luY19raW9jYigmaW9jYiwgTlVMTCk7Ci0JaW9jYi5wcml2YXRlID0gJnNpb2NiOwogCXJldCA9IF9fc29ja19yZWN2bXNnKCZpb2NiLCBzb2NrLCBtc2csIHNpemUsIGZsYWdzKTsKIAlpZiAoLUVJT0NCUVVFVUVEID09IHJldCkKIAkJcmV0ID0gd2FpdF9vbl9zeW5jX2tpb2NiKCZpb2NiKTsKQEAgLTc5NSwxMSArNzc2LDkgQEAKIAkJCSAgICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGtpb2NiIGlvY2I7Ci0Jc3RydWN0IHNvY2tfaW9jYiBzaW9jYjsKIAlpbnQgcmV0OwogCiAJaW5pdF9zeW5jX2tpb2NiKCZpb2NiLCBOVUxMKTsKLQlpb2NiLnByaXZhdGUgPSAmc2lvY2I7CiAJcmV0ID0gX19zb2NrX3JlY3Ztc2dfbm9zZWMoJmlvY2IsIHNvY2ssIG1zZywgc2l6ZSwgZmxhZ3MpOwogCWlmICgtRUlPQ0JRVUVVRUQgPT0gcmV0KQogCQlyZXQgPSB3YWl0X29uX3N5bmNfa2lvY2IoJmlvY2IpOwpAQCAtODY2LDkyICs4NDUsNDcgQEAKIAlyZXR1cm4gc29jay0+b3BzLT5zcGxpY2VfcmVhZChzb2NrLCBwcG9zLCBwaXBlLCBsZW4sIGZsYWdzKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzb2NrX2lvY2IgKmFsbG9jX3NvY2tfaW9jYihzdHJ1Y3Qga2lvY2IgKmlvY2IsCi0JCQkJCSBzdHJ1Y3Qgc29ja19pb2NiICpzaW9jYikKK3N0YXRpYyBzc2l6ZV90IHNvY2tfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bykKIHsKLQlpZiAoIWlzX3N5bmNfa2lvY2IoaW9jYikpCi0JCUJVRygpOwotCi0Jc2lvY2ItPmtpb2NiID0gaW9jYjsKLQlpb2NiLT5wcml2YXRlID0gc2lvY2I7Ci0JcmV0dXJuIHNpb2NiOwotfQotCi1zdGF0aWMgc3NpemVfdCBkb19zb2NrX3JlYWQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCi0JCXN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKLQkJdW5zaWduZWQgbG9uZyBucl9zZWdzKQoteworCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXNpemVfdCBzaXplID0gMDsKLQlpbnQgaTsKKwlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsubXNnX2l0ZXIgPSAqdG99OworCXNzaXplX3QgcmVzOwogCi0JZm9yIChpID0gMDsgaSA8IG5yX3NlZ3M7IGkrKykKLQkJc2l6ZSArPSBpb3ZbaV0uaW92X2xlbjsKKwlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCisJCW1zZy5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQ7CiAKLQltc2ctPm1zZ19uYW1lID0gTlVMTDsKLQltc2ctPm1zZ19uYW1lbGVuID0gMDsKLQltc2ctPm1zZ19jb250cm9sID0gTlVMTDsKLQltc2ctPm1zZ19jb250cm9sbGVuID0gMDsKLQlpb3ZfaXRlcl9pbml0KCZtc2ctPm1zZ19pdGVyLCBSRUFELCBpb3YsIG5yX3NlZ3MsIHNpemUpOwotCW1zZy0+bXNnX2ZsYWdzID0gKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSA/IE1TR19ET05UV0FJVCA6IDA7Ci0KLQlyZXR1cm4gX19zb2NrX3JlY3Ztc2coaW9jYiwgc29jaywgbXNnLCBzaXplLCBtc2ctPm1zZ19mbGFncyk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNvY2tfYWlvX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKLQkJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCi17Ci0Jc3RydWN0IHNvY2tfaW9jYiBzaW9jYiwgKng7Ci0KLQlpZiAocG9zICE9IDApCisJaWYgKGlvY2ItPmtpX3BvcyAhPSAwKQogCQlyZXR1cm4gLUVTUElQRTsKIAogCWlmIChpb2NiLT5raV9uYnl0ZXMgPT0gMCkJLyogTWF0Y2ggU1lTNSBiZWhhdmlvdXIgKi8KIAkJcmV0dXJuIDA7CiAKLQotCXggPSBhbGxvY19zb2NrX2lvY2IoaW9jYiwgJnNpb2NiKTsKLQlpZiAoIXgpCi0JCXJldHVybiAtRU5PTUVNOwotCXJldHVybiBkb19zb2NrX3JlYWQoJngtPmFzeW5jX21zZywgaW9jYiwgaW9jYi0+a2lfZmlscCwgaW92LCBucl9zZWdzKTsKKwlyZXMgPSBfX3NvY2tfcmVjdm1zZyhpb2NiLCBzb2NrLCAmbXNnLAorCQkJICAgICBpb2NiLT5raV9uYnl0ZXMsIG1zZy5tc2dfZmxhZ3MpOworCSp0byA9IG1zZy5tc2dfaXRlcjsKKwlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgc3NpemVfdCBkb19zb2NrX3dyaXRlKHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IGtpb2NiICppb2NiLAotCQkJc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzKQorc3RhdGljIHNzaXplX3Qgc29ja193cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKQogeworCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXNpemVfdCBzaXplID0gMDsKLQlpbnQgaTsKKwlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsubXNnX2l0ZXIgPSAqZnJvbX07CisJc3NpemVfdCByZXM7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnJfc2VnczsgaSsrKQotCQlzaXplICs9IGlvdltpXS5pb3ZfbGVuOwotCi0JbXNnLT5tc2dfbmFtZSA9IE5VTEw7Ci0JbXNnLT5tc2dfbmFtZWxlbiA9IDA7Ci0JbXNnLT5tc2dfY29udHJvbCA9IE5VTEw7Ci0JbXNnLT5tc2dfY29udHJvbGxlbiA9IDA7Ci0JaW92X2l0ZXJfaW5pdCgmbXNnLT5tc2dfaXRlciwgV1JJVEUsIGlvdiwgbnJfc2Vncywgc2l6ZSk7Ci0JbXNnLT5tc2dfZmxhZ3MgPSAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spID8gTVNHX0RPTlRXQUlUIDogMDsKLQlpZiAoc29jay0+dHlwZSA9PSBTT0NLX1NFUVBBQ0tFVCkKLQkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX0VPUjsKLQotCXJldHVybiBfX3NvY2tfc2VuZG1zZyhpb2NiLCBzb2NrLCBtc2csIHNpemUpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzb2NrX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQkJICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCi17Ci0Jc3RydWN0IHNvY2tfaW9jYiBzaW9jYiwgKng7Ci0KLQlpZiAocG9zICE9IDApCisJaWYgKGlvY2ItPmtpX3BvcyAhPSAwKQogCQlyZXR1cm4gLUVTUElQRTsKIAotCXggPSBhbGxvY19zb2NrX2lvY2IoaW9jYiwgJnNpb2NiKTsKLQlpZiAoIXgpCi0JCXJldHVybiAtRU5PTUVNOworCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKKwkJbXNnLm1zZ19mbGFncyA9IE1TR19ET05UV0FJVDsKIAotCXJldHVybiBkb19zb2NrX3dyaXRlKCZ4LT5hc3luY19tc2csIGlvY2IsIGlvY2ItPmtpX2ZpbHAsIGlvdiwgbnJfc2Vncyk7CisJaWYgKHNvY2stPnR5cGUgPT0gU09DS19TRVFQQUNLRVQpCisJCW1zZy5tc2dfZmxhZ3MgfD0gTVNHX0VPUjsKKworCXJlcyA9IF9fc29ja19zZW5kbXNnKGlvY2IsIHNvY2ssICZtc2csIGlvY2ItPmtpX25ieXRlcyk7CisJKmZyb20gPSBtc2cubXNnX2l0ZXI7CisJcmV0dXJuIHJlczsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvY2xudC5jIGIvbmV0L3N1bnJwYy9jbG50LmMKaW5kZXggMDVkYTEyYS4uNjEyYWE3MyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jbG50LmMKKysrIGIvbmV0L3N1bnJwYy9jbG50LmMKQEAgLTI4NiwxMCArMjg2LDggQEAKIAogc3RhdGljIHZvaWQgcnBjX2NsbnRfc2V0X25vZGVuYW1lKHN0cnVjdCBycGNfY2xudCAqY2xudCwgY29uc3QgY2hhciAqbm9kZW5hbWUpCiB7Ci0JY2xudC0+Y2xfbm9kZWxlbiA9IHN0cmxlbihub2RlbmFtZSk7Ci0JaWYgKGNsbnQtPmNsX25vZGVsZW4gPiBVTlhfTUFYTk9ERU5BTUUpCi0JCWNsbnQtPmNsX25vZGVsZW4gPSBVTlhfTUFYTk9ERU5BTUU7Ci0JbWVtY3B5KGNsbnQtPmNsX25vZGVuYW1lLCBub2RlbmFtZSwgY2xudC0+Y2xfbm9kZWxlbik7CisJY2xudC0+Y2xfbm9kZWxlbiA9IHN0cmxjcHkoY2xudC0+Y2xfbm9kZW5hbWUsCisJCQlub2RlbmFtZSwgc2l6ZW9mKGNsbnQtPmNsX25vZGVuYW1lKSk7CiB9CiAKIHN0YXRpYyBpbnQgcnBjX2NsaWVudF9yZWdpc3RlcihzdHJ1Y3QgcnBjX2NsbnQgKmNsbnQsCkBAIC0zNjUsNiArMzYzLDcgQEAKIAljb25zdCBzdHJ1Y3QgcnBjX3ZlcnNpb24gKnZlcnNpb247CiAJc3RydWN0IHJwY19jbG50ICpjbG50ID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgcnBjX3RpbWVvdXQgKnRpbWVvdXQ7CisJY29uc3QgY2hhciAqbm9kZW5hbWUgPSBhcmdzLT5ub2RlbmFtZTsKIAlpbnQgZXJyOwogCiAJLyogc2FuaXR5IGNoZWNrIHRoZSBuYW1lIGJlZm9yZSB0cnlpbmcgdG8gcHJpbnQgaXQgKi8KQEAgLTQyMCw4ICs0MTksMTAgQEAKIAogCWF0b21pY19zZXQoJmNsbnQtPmNsX2NvdW50LCAxKTsKIAorCWlmIChub2RlbmFtZSA9PSBOVUxMKQorCQlub2RlbmFtZSA9IHV0c25hbWUoKS0+bm9kZW5hbWU7CiAJLyogc2F2ZSB0aGUgbm9kZW5hbWUgKi8KLQlycGNfY2xudF9zZXRfbm9kZW5hbWUoY2xudCwgdXRzbmFtZSgpLT5ub2RlbmFtZSk7CisJcnBjX2NsbnRfc2V0X25vZGVuYW1lKGNsbnQsIG5vZGVuYW1lKTsKIAogCWVyciA9IHJwY19jbGllbnRfcmVnaXN0ZXIoY2xudCwgYXJncy0+YXV0aGZsYXZvciwgYXJncy0+Y2xpZW50X25hbWUpOwogCWlmIChlcnIpCkBAIC01NzYsNiArNTc3LDcgQEAKIAlpZiAoeHBydCA9PSBOVUxMKQogCQlnb3RvIG91dF9lcnI7CiAJYXJncy0+c2VydmVybmFtZSA9IHhwcnQtPnNlcnZlcm5hbWU7CisJYXJncy0+bm9kZW5hbWUgPSBjbG50LT5jbF9ub2RlbmFtZTsKIAogCW5ldyA9IHJwY19uZXdfY2xpZW50KGFyZ3MsIHhwcnQsIGNsbnQpOwogCWlmIChJU19FUlIobmV3KSkgewpAQCAtMTgyNCw2ICsxODI2LDcgQEAKIAljYXNlIC1FQ09OTkFCT1JURUQ6CiAJY2FzZSAtRU5FVFVOUkVBQ0g6CiAJY2FzZSAtRUhPU1RVTlJFQUNIOgorCWNhc2UgLUVBRERSSU5VU0U6CiAJY2FzZSAtRU5PQlVGUzoKIAljYXNlIC1FUElQRToKIAkJaWYgKFJQQ19JU19TT0ZUQ09OTih0YXNrKSkKQEAgLTE5MzIsNiArMTkzNSw3IEBACiAJCX0KIAljYXNlIC1FQ09OTlJFU0VUOgogCWNhc2UgLUVDT05OQUJPUlRFRDoKKwljYXNlIC1FQUREUklOVVNFOgogCWNhc2UgLUVOT1RDT05OOgogCWNhc2UgLUVOT0JVRlM6CiAJY2FzZSAtRVBJUEU6CkBAIC0yMDUxLDYgKzIwNTUsNyBAQAogCWNhc2UgLUVDT05OUkVTRVQ6CiAJY2FzZSAtRUNPTk5BQk9SVEVEOgogCQlycGNfZm9yY2VfcmViaW5kKGNsbnQpOworCWNhc2UgLUVBRERSSU5VU0U6CiAJY2FzZSAtRU5PQlVGUzoKIAkJcnBjX2RlbGF5KHRhc2ssIDMqSFopOwogCWNhc2UgLUVQSVBFOgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYyBiL25ldC9zdW5ycGMvcnBjYl9jbG50LmMKaW5kZXggMDUyMDIwMS4uY2Y1NzcwZCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9ycGNiX2NsbnQuYworKysgYi9uZXQvc3VucnBjL3JwY2JfY2xudC5jCkBAIC0zNTUsNyArMzU1LDggQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgc3RydWN0IHJwY19jbG50ICpycGNiX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKmhvc3RuYW1lLAorc3RhdGljIHN0cnVjdCBycGNfY2xudCAqcnBjYl9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpub2RlbmFtZSwKKwkJCQkgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsCiAJCQkJICAgIHN0cnVjdCBzb2NrYWRkciAqc3J2YWRkciwgc2l6ZV90IHNhbGVuLAogCQkJCSAgICBpbnQgcHJvdG8sIHUzMiB2ZXJzaW9uKQogewpAQCAtMzY1LDYgKzM2Niw3IEBACiAJCS5hZGRyZXNzCT0gc3J2YWRkciwKIAkJLmFkZHJzaXplCT0gc2FsZW4sCiAJCS5zZXJ2ZXJuYW1lCT0gaG9zdG5hbWUsCisJCS5ub2RlbmFtZQk9IG5vZGVuYW1lLAogCQkucHJvZ3JhbQk9ICZycGNiX3Byb2dyYW0sCiAJCS52ZXJzaW9uCT0gdmVyc2lvbiwKIAkJLmF1dGhmbGF2b3IJPSBSUENfQVVUSF9VTklYLApAQCAtNzQwLDcgKzc0Miw5IEBACiAJZHByaW50aygiUlBDOiAlNXUgJXM6IHRyeWluZyBycGNiaW5kIHZlcnNpb24gJXVcbiIsCiAJCXRhc2stPnRrX3BpZCwgX19mdW5jX18sIGJpbmRfdmVyc2lvbik7CiAKLQlycGNiX2NsbnQgPSBycGNiX2NyZWF0ZSh4cHJ0LT54cHJ0X25ldCwgeHBydC0+c2VydmVybmFtZSwgc2FwLCBzYWxlbiwKKwlycGNiX2NsbnQgPSBycGNiX2NyZWF0ZSh4cHJ0LT54cHJ0X25ldCwKKwkJCQljbG50LT5jbF9ub2RlbmFtZSwKKwkJCQl4cHJ0LT5zZXJ2ZXJuYW1lLCBzYXAsIHNhbGVuLAogCQkJCXhwcnQtPnByb3QsIGJpbmRfdmVyc2lvbik7CiAJaWYgKElTX0VSUihycGNiX2NsbnQpKSB7CiAJCXN0YXR1cyA9IFBUUl9FUlIocnBjYl9jbG50KTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc2NoZWQuYyBiL25ldC9zdW5ycGMvc2NoZWQuYwppbmRleCBkMjBmMjMyLi5iOTFmZDljIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3NjaGVkLmMKKysrIGIvbmV0L3N1bnJwYy9zY2hlZC5jCkBAIC04NDQsMTAgKzg0NCwxMCBAQAogdm9pZCAqcnBjX21hbGxvYyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHNpemVfdCBzaXplKQogewogCXN0cnVjdCBycGNfYnVmZmVyICpidWY7Ci0JZ2ZwX3QgZ2ZwID0gR0ZQX05PV0FJVCB8IF9fR0ZQX05PV0FSTjsKKwlnZnBfdCBnZnAgPSBHRlBfTk9JTyB8IF9fR0ZQX05PV0FSTjsKIAogCWlmIChSUENfSVNfU1dBUFBFUih0YXNrKSkKLQkJZ2ZwIHw9IF9fR0ZQX01FTUFMTE9DOworCQlnZnAgPSBfX0dGUF9NRU1BTExPQyB8IEdGUF9OT1dBSVQgfCBfX0dGUF9OT1dBUk47CiAKIAlzaXplICs9IHNpemVvZihzdHJ1Y3QgcnBjX2J1ZmZlcik7CiAJaWYgKHNpemUgPD0gUlBDX0JVRkZFUl9NQVhTSVpFKQpAQCAtMTA2OSw3ICsxMDY5LDggQEAKIAkgKiBDcmVhdGUgdGhlIHJwY2lvZCB0aHJlYWQgYW5kIHdhaXQgZm9yIGl0IHRvIHN0YXJ0LgogCSAqLwogCWRwcmludGsoIlJQQzogICAgICAgY3JlYXRpbmcgd29ya3F1ZXVlIHJwY2lvZFxuIik7Ci0Jd3EgPSBhbGxvY193b3JrcXVldWUoInJwY2lvZCIsIFdRX01FTV9SRUNMQUlNLCAxKTsKKwkvKiBOb3RlOiBoaWdocHJpIGJlY2F1c2UgbmV0d29yayByZWNlaXZlIGlzIGxhdGVuY3kgc2Vuc2l0aXZlICovCisJd3EgPSBhbGxvY193b3JrcXVldWUoInJwY2lvZCIsIFdRX01FTV9SRUNMQUlNIHwgV1FfSElHSFBSSSwgMCk7CiAJcnBjaW9kX3dvcmtxdWV1ZSA9IHdxOwogCXJldHVybiBycGNpb2Rfd29ya3F1ZXVlICE9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N0YXRzLmMgYi9uZXQvc3VucnBjL3N0YXRzLmMKaW5kZXggOTcxMWExNS4uMmVjYjk5NCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdGF0cy5jCisrKyBiL25ldC9zdW5ycGMvc3RhdHMuYwpAQCAtMTQwLDIyICsxNDAsMjAgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJwY19mcmVlX2lvc3RhdHMpOwogCiAvKioKLSAqIHJwY19jb3VudF9pb3N0YXRzIC0gdGFsbHkgdXAgcGVyLXRhc2sgc3RhdHMKKyAqIHJwY19jb3VudF9pb3N0YXRzX21ldHJpY3MgLSB0YWxseSB1cCBwZXItdGFzayBzdGF0cwogICogQHRhc2s6IGNvbXBsZXRlZCBycGNfdGFzawotICogQHN0YXRzOiBhcnJheSBvZiBzdGF0IHN0cnVjdHVyZXMKKyAqIEBvcF9tZXRyaWNzOiBzdGF0IHN0cnVjdHVyZSBmb3IgT1AgdGhhdCB3aWxsIGFjY3VtdWxhdGUgc3RhdHMgZnJvbSBAdGFzawogICovCi12b2lkIHJwY19jb3VudF9pb3N0YXRzKGNvbnN0IHN0cnVjdCBycGNfdGFzayAqdGFzaywgc3RydWN0IHJwY19pb3N0YXRzICpzdGF0cykKK3ZvaWQgcnBjX2NvdW50X2lvc3RhdHNfbWV0cmljcyhjb25zdCBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssCisJCQkgICAgICAgc3RydWN0IHJwY19pb3N0YXRzICpvcF9tZXRyaWNzKQogewogCXN0cnVjdCBycGNfcnFzdCAqcmVxID0gdGFzay0+dGtfcnFzdHA7Ci0Jc3RydWN0IHJwY19pb3N0YXRzICpvcF9tZXRyaWNzOwogCWt0aW1lX3QgZGVsdGEsIG5vdzsKIAotCWlmICghc3RhdHMgfHwgIXJlcSkKKwlpZiAoIW9wX21ldHJpY3MgfHwgIXJlcSkKIAkJcmV0dXJuOwogCiAJbm93ID0ga3RpbWVfZ2V0KCk7Ci0Jb3BfbWV0cmljcyA9ICZzdGF0c1t0YXNrLT50a19tc2cucnBjX3Byb2MtPnBfc3RhdGlkeF07Ci0KIAlzcGluX2xvY2soJm9wX21ldHJpY3MtPm9tX2xvY2spOwogCiAJb3BfbWV0cmljcy0+b21fb3BzKys7CkBAIC0xNzUsNiArMTczLDIwIEBACiAKIAlzcGluX3VubG9jaygmb3BfbWV0cmljcy0+b21fbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChycGNfY291bnRfaW9zdGF0c19tZXRyaWNzKTsKKworLyoqCisgKiBycGNfY291bnRfaW9zdGF0cyAtIHRhbGx5IHVwIHBlci10YXNrIHN0YXRzCisgKiBAdGFzazogY29tcGxldGVkIHJwY190YXNrCisgKiBAc3RhdHM6IGFycmF5IG9mIHN0YXQgc3RydWN0dXJlcworICoKKyAqIFVzZXMgdGhlIHN0YXRpZHggZnJvbSBAdGFzaworICovCit2b2lkIHJwY19jb3VudF9pb3N0YXRzKGNvbnN0IHN0cnVjdCBycGNfdGFzayAqdGFzaywgc3RydWN0IHJwY19pb3N0YXRzICpzdGF0cykKK3sKKwlycGNfY291bnRfaW9zdGF0c19tZXRyaWNzKHRhc2ssCisJCQkJICAmc3RhdHNbdGFzay0+dGtfbXNnLnJwY19wcm9jLT5wX3N0YXRpZHhdKTsKK30KIEVYUE9SVF9TWU1CT0xfR1BMKHJwY19jb3VudF9pb3N0YXRzKTsKIAogc3RhdGljIHZvaWQgX3ByaW50X25hbWUoc3RydWN0IHNlcV9maWxlICpzZXEsIHVuc2lnbmVkIGludCBvcCwKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydC5jIGIvbmV0L3N1bnJwYy94cHJ0LmMKaW5kZXggZWJiZWZhZC4uZTMwMTVhZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0LmMKQEAgLTY4MywxMyArNjgzLDQzIEBACiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoWFBSVF9MT0NLRUQsICZ4cHJ0LT5zdGF0ZSkpCiAJCWdvdG8gb3V0X2Fib3J0OwogCXNwaW5fdW5sb2NrKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7Ci0Jc2V0X2JpdChYUFJUX0NPTk5FQ1RJT05fQ0xPU0UsICZ4cHJ0LT5zdGF0ZSk7CiAJcXVldWVfd29yayhycGNpb2Rfd29ya3F1ZXVlLCAmeHBydC0+dGFza19jbGVhbnVwKTsKIAlyZXR1cm47CiBvdXRfYWJvcnQ6CiAJc3Bpbl91bmxvY2soJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKIH0KIAorYm9vbCB4cHJ0X2xvY2tfY29ubmVjdChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsCisJCXN0cnVjdCBycGNfdGFzayAqdGFzaywKKwkJdm9pZCAqY29va2llKQoreworCWJvb2wgcmV0ID0gZmFsc2U7CisKKwlzcGluX2xvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKKwlpZiAoIXRlc3RfYml0KFhQUlRfTE9DS0VELCAmeHBydC0+c3RhdGUpKQorCQlnb3RvIG91dDsKKwlpZiAoeHBydC0+c25kX3Rhc2sgIT0gdGFzaykKKwkJZ290byBvdXQ7CisJeHBydC0+c25kX3Rhc2sgPSBjb29raWU7CisJcmV0ID0gdHJ1ZTsKK291dDoKKwlzcGluX3VubG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgeHBydF91bmxvY2tfY29ubmVjdChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHZvaWQgKmNvb2tpZSkKK3sKKwlzcGluX2xvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKKwlpZiAoeHBydC0+c25kX3Rhc2sgIT0gY29va2llKQorCQlnb3RvIG91dDsKKwlpZiAoIXRlc3RfYml0KFhQUlRfTE9DS0VELCAmeHBydC0+c3RhdGUpKQorCQlnb3RvIG91dDsKKwl4cHJ0LT5zbmRfdGFzayA9TlVMTDsKKwl4cHJ0LT5vcHMtPnJlbGVhc2VfeHBydCh4cHJ0LCBOVUxMKTsKK291dDoKKwlzcGluX3VubG9ja19iaCgmeHBydC0+dHJhbnNwb3J0X2xvY2spOworfQorCiAvKioKICAqIHhwcnRfY29ubmVjdCAtIHNjaGVkdWxlIGEgdHJhbnNwb3J0IGNvbm5lY3Qgb3BlcmF0aW9uCiAgKiBAdGFzazogUlBDIHRhc2sgdGhhdCBpcyByZXF1ZXN0aW5nIHRoZSBjb25uZWN0CkBAIC03MTIsOSArNzQyLDcgQEAKIAlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFhQUlRfQ0xPU0VfV0FJVCwgJnhwcnQtPnN0YXRlKSkKIAkJeHBydC0+b3BzLT5jbG9zZSh4cHJ0KTsKIAotCWlmICh4cHJ0X2Nvbm5lY3RlZCh4cHJ0KSkKLQkJeHBydF9yZWxlYXNlX3dyaXRlKHhwcnQsIHRhc2spOwotCWVsc2UgeworCWlmICgheHBydF9jb25uZWN0ZWQoeHBydCkpIHsKIAkJdGFzay0+dGtfcnFzdHAtPnJxX2J5dGVzX3NlbnQgPSAwOwogCQl0YXNrLT50a190aW1lb3V0ID0gdGFzay0+dGtfcnFzdHAtPnJxX3RpbWVvdXQ7CiAJCXJwY19zbGVlcF9vbigmeHBydC0+cGVuZGluZywgdGFzaywgeHBydF9jb25uZWN0X3N0YXR1cyk7CkBAIC03MjYsNiArNzU0LDcgQEAKIAkJeHBydC0+c3RhdC5jb25uZWN0X3N0YXJ0ID0gamlmZmllczsKIAkJeHBydC0+b3BzLT5jb25uZWN0KHhwcnQsIHRhc2spOwogCX0KKwl4cHJ0X3JlbGVhc2Vfd3JpdGUoeHBydCwgdGFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIHhwcnRfY29ubmVjdF9zdGF0dXMoc3RydWN0IHJwY190YXNrICp0YXNrKQpAQCAtNzU4LDcgKzc4Nyw2IEBACiAJCWRwcmludGsoIlJQQzogJTV1IHhwcnRfY29ubmVjdF9zdGF0dXM6IGVycm9yICVkIGNvbm5lY3RpbmcgdG8gIgogCQkJCSJzZXJ2ZXIgJXNcbiIsIHRhc2stPnRrX3BpZCwgLXRhc2stPnRrX3N0YXR1cywKIAkJCQl4cHJ0LT5zZXJ2ZXJuYW1lKTsKLQkJeHBydF9yZWxlYXNlX3dyaXRlKHhwcnQsIHRhc2spOwogCQl0YXNrLT50a19zdGF0dXMgPSAtRUlPOwogCX0KIH0KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYyBiL25ldC9zdW5ycGMveHBydHJkbWEvcnBjX3JkbWEuYwppbmRleCBkZjAxZDEyLi43ZTlhY2Q5IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3hwcnRyZG1hL3JwY19yZG1hLmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS9ycGNfcmRtYS5jCkBAIC0yMDksOSArMjA5LDExIEBACiAJCWlmIChjdXJfcmNodW5rKSB7CS8qIHJlYWQgKi8KIAkJCWN1cl9yY2h1bmstPnJjX2Rpc2NyaW0gPSB4ZHJfb25lOwogCQkJLyogYWxsIHJlYWQgY2h1bmtzIGhhdmUgdGhlIHNhbWUgInBvc2l0aW9uIiAqLwotCQkJY3VyX3JjaHVuay0+cmNfcG9zaXRpb24gPSBodG9ubChwb3MpOwotCQkJY3VyX3JjaHVuay0+cmNfdGFyZ2V0LnJzX2hhbmRsZSA9IGh0b25sKHNlZy0+bXJfcmtleSk7Ci0JCQljdXJfcmNodW5rLT5yY190YXJnZXQucnNfbGVuZ3RoID0gaHRvbmwoc2VnLT5tcl9sZW4pOworCQkJY3VyX3JjaHVuay0+cmNfcG9zaXRpb24gPSBjcHVfdG9fYmUzMihwb3MpOworCQkJY3VyX3JjaHVuay0+cmNfdGFyZ2V0LnJzX2hhbmRsZSA9CisJCQkJCQljcHVfdG9fYmUzMihzZWctPm1yX3JrZXkpOworCQkJY3VyX3JjaHVuay0+cmNfdGFyZ2V0LnJzX2xlbmd0aCA9CisJCQkJCQljcHVfdG9fYmUzMihzZWctPm1yX2xlbik7CiAJCQl4ZHJfZW5jb2RlX2h5cGVyKAogCQkJCQkoX19iZTMyICopJmN1cl9yY2h1bmstPnJjX3RhcmdldC5yc19vZmZzZXQsCiAJCQkJCXNlZy0+bXJfYmFzZSk7CkBAIC0yMjIsOCArMjI0LDEwIEBACiAJCQljdXJfcmNodW5rKys7CiAJCQlyX3hwcnQtPnJ4X3N0YXRzLnJlYWRfY2h1bmtfY291bnQrKzsKIAkJfSBlbHNlIHsJCS8qIHdyaXRlL3JlcGx5ICovCi0JCQljdXJfd2NodW5rLT53Y190YXJnZXQucnNfaGFuZGxlID0gaHRvbmwoc2VnLT5tcl9ya2V5KTsKLQkJCWN1cl93Y2h1bmstPndjX3RhcmdldC5yc19sZW5ndGggPSBodG9ubChzZWctPm1yX2xlbik7CisJCQljdXJfd2NodW5rLT53Y190YXJnZXQucnNfaGFuZGxlID0KKwkJCQkJCWNwdV90b19iZTMyKHNlZy0+bXJfcmtleSk7CisJCQljdXJfd2NodW5rLT53Y190YXJnZXQucnNfbGVuZ3RoID0KKwkJCQkJCWNwdV90b19iZTMyKHNlZy0+bXJfbGVuKTsKIAkJCXhkcl9lbmNvZGVfaHlwZXIoCiAJCQkJCShfX2JlMzIgKikmY3VyX3djaHVuay0+d2NfdGFyZ2V0LnJzX29mZnNldCwKIAkJCQkJc2VnLT5tcl9iYXNlKTsKQEAgLTI1Nyw3ICsyNjEsNyBAQAogCQkqaXB0cisrID0geGRyX3plcm87CS8qIGVuY29kZSBhIE5VTEwgcmVwbHkgY2h1bmsgKi8KIAl9IGVsc2UgewogCQl3YXJyYXktPndjX2Rpc2NyaW0gPSB4ZHJfb25lOwotCQl3YXJyYXktPndjX25jaHVua3MgPSBodG9ubChuY2h1bmtzKTsKKwkJd2FycmF5LT53Y19uY2h1bmtzID0gY3B1X3RvX2JlMzIobmNodW5rcyk7CiAJCWlwdHIgPSAoX19iZTMyICopIGN1cl93Y2h1bms7CiAJCWlmICh0eXBlID09IHJwY3JkbWFfd3JpdGVjaCkgewogCQkJKmlwdHIrKyA9IHhkcl96ZXJvOyAvKiBmaW5pc2ggdGhlIHdyaXRlIGNodW5rIGxpc3QgKi8KQEAgLTI5MCw3ICsyOTQsNyBAQAogcnBjcmRtYV9tYXJzaGFsX2NodW5rcyhzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3QsIHNzaXplX3QgcmVzdWx0KQogewogCXN0cnVjdCBycGNyZG1hX3JlcSAqcmVxID0gcnBjcl90b19yZG1hcihycXN0KTsKLQlzdHJ1Y3QgcnBjcmRtYV9tc2cgKmhlYWRlcnAgPSAoc3RydWN0IHJwY3JkbWFfbXNnICopcmVxLT5ybF9iYXNlOworCXN0cnVjdCBycGNyZG1hX21zZyAqaGVhZGVycCA9IHJkbWFiX3RvX21zZyhyZXEtPnJsX3JkbWFidWYpOwogCiAJaWYgKHJlcS0+cmxfcnR5cGUgIT0gcnBjcmRtYV9ub2NoKQogCQlyZXN1bHQgPSBycGNyZG1hX2NyZWF0ZV9jaHVua3MocnFzdCwgJnJxc3QtPnJxX3NuZF9idWYsCkBAIC00MDIsMTMgKzQwNiwxMiBAQAogCWJhc2UgPSBycXN0LT5ycV9zdmVjWzBdLmlvdl9iYXNlOwogCXJwY2xlbiA9IHJxc3QtPnJxX3N2ZWNbMF0uaW92X2xlbjsKIAotCS8qIGJ1aWxkIFJETUEgaGVhZGVyIGluIHByaXZhdGUgYXJlYSBhdCBmcm9udCAqLwotCWhlYWRlcnAgPSAoc3RydWN0IHJwY3JkbWFfbXNnICopIHJlcS0+cmxfYmFzZTsKLQkvKiBkb24ndCBodG9ubCBYSUQsIGl0J3MgYWxyZWFkeSBkb25lIGluIHJlcXVlc3QgKi8KKwloZWFkZXJwID0gcmRtYWJfdG9fbXNnKHJlcS0+cmxfcmRtYWJ1Zik7CisJLyogZG9uJ3QgYnl0ZS1zd2FwIFhJRCwgaXQncyBhbHJlYWR5IGRvbmUgaW4gcmVxdWVzdCAqLwogCWhlYWRlcnAtPnJtX3hpZCA9IHJxc3QtPnJxX3hpZDsKLQloZWFkZXJwLT5ybV92ZXJzID0geGRyX29uZTsKLQloZWFkZXJwLT5ybV9jcmVkaXQgPSBodG9ubChyX3hwcnQtPnJ4X2J1Zi5yYl9tYXhfcmVxdWVzdHMpOwotCWhlYWRlcnAtPnJtX3R5cGUgPSBodG9ubChSRE1BX01TRyk7CisJaGVhZGVycC0+cm1fdmVycyA9IHJwY3JkbWFfdmVyc2lvbjsKKwloZWFkZXJwLT5ybV9jcmVkaXQgPSBjcHVfdG9fYmUzMihyX3hwcnQtPnJ4X2J1Zi5yYl9tYXhfcmVxdWVzdHMpOworCWhlYWRlcnAtPnJtX3R5cGUgPSByZG1hX21zZzsKIAogCS8qCiAJICogQ2h1bmtzIG5lZWRlZCBmb3IgcmVzdWx0cz8KQEAgLTQ2OCw3ICs0NzEsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQloZHJsZW4gPSAyODsgLypzaXplb2YgKmhlYWRlcnA7Ki8KKwloZHJsZW4gPSBSUENSRE1BX0hEUkxFTl9NSU47CiAJcGFkbGVuID0gMDsKIAogCS8qCkBAIC00ODIsMTEgKzQ4NSwxMSBAQAogCQkJCQkJUlBDUkRNQV9JTkxJTkVfUEFEX1ZBTFVFKHJxc3QpKTsKIAogCQlpZiAocGFkbGVuKSB7Ci0JCQloZWFkZXJwLT5ybV90eXBlID0gaHRvbmwoUkRNQV9NU0dQKTsKKwkJCWhlYWRlcnAtPnJtX3R5cGUgPSByZG1hX21zZ3A7CiAJCQloZWFkZXJwLT5ybV9ib2R5LnJtX3BhZGRlZC5ybV9hbGlnbiA9Ci0JCQkJaHRvbmwoUlBDUkRNQV9JTkxJTkVfUEFEX1ZBTFVFKHJxc3QpKTsKKwkJCQljcHVfdG9fYmUzMihSUENSRE1BX0lOTElORV9QQURfVkFMVUUocnFzdCkpOwogCQkJaGVhZGVycC0+cm1fYm9keS5ybV9wYWRkZWQucm1fdGhyZXNoID0KLQkJCQlodG9ubChSUENSRE1BX0lOTElORV9QQURfVEhSRVNIKTsKKwkJCQljcHVfdG9fYmUzMihSUENSRE1BX0lOTElORV9QQURfVEhSRVNIKTsKIAkJCWhlYWRlcnAtPnJtX2JvZHkucm1fcGFkZGVkLnJtX3BlbXB0eVswXSA9IHhkcl96ZXJvOwogCQkJaGVhZGVycC0+cm1fYm9keS5ybV9wYWRkZWQucm1fcGVtcHR5WzFdID0geGRyX3plcm87CiAJCQloZWFkZXJwLT5ybV9ib2R5LnJtX3BhZGRlZC5ybV9wZW1wdHlbMl0gPSB4ZHJfemVybzsKQEAgLTUyNCw3ICs1MjcsNyBAQAogCWRwcmludGsoIlJQQzogICAgICAgJXM6ICVzOiBoZHJsZW4gJXpkIHJwY2xlbiAlemQgcGFkbGVuICV6ZCIKIAkJIiBoZWFkZXJwIDB4JXAgYmFzZSAweCVwIGxrZXkgMHgleFxuIiwKIAkJX19mdW5jX18sIHRyYW5zZmVydHlwZXNbcmVxLT5ybF93dHlwZV0sIGhkcmxlbiwgcnBjbGVuLCBwYWRsZW4sCi0JCWhlYWRlcnAsIGJhc2UsIHJlcS0+cmxfaW92LmxrZXkpOworCQloZWFkZXJwLCBiYXNlLCByZG1hYl9sa2V5KHJlcS0+cmxfcmRtYWJ1ZikpOwogCiAJLyoKIAkgKiBpbml0aWFsaXplIHNlbmRfaW92J3MgLSBub3JtYWxseSBvbmx5IHR3bzogcmRtYSBjaHVuayBoZWFkZXIgYW5kCkBAIC01MzMsMjYgKzUzNiwyNiBAQAogCSAqIGhlYWRlciBhbmQgYW55IHdyaXRlIGRhdGEuIEluIGFsbCBub24tcmRtYSBjYXNlcywgYW55IGZvbGxvd2luZwogCSAqIGRhdGEgaGFzIGJlZW4gY29waWVkIGludG8gdGhlIFJQQyBoZWFkZXIgYnVmZmVyLgogCSAqLwotCXJlcS0+cmxfc2VuZF9pb3ZbMF0uYWRkciA9IHJlcS0+cmxfaW92LmFkZHI7CisJcmVxLT5ybF9zZW5kX2lvdlswXS5hZGRyID0gcmRtYWJfYWRkcihyZXEtPnJsX3JkbWFidWYpOwogCXJlcS0+cmxfc2VuZF9pb3ZbMF0ubGVuZ3RoID0gaGRybGVuOwotCXJlcS0+cmxfc2VuZF9pb3ZbMF0ubGtleSA9IHJlcS0+cmxfaW92LmxrZXk7CisJcmVxLT5ybF9zZW5kX2lvdlswXS5sa2V5ID0gcmRtYWJfbGtleShyZXEtPnJsX3JkbWFidWYpOwogCi0JcmVxLT5ybF9zZW5kX2lvdlsxXS5hZGRyID0gcmVxLT5ybF9pb3YuYWRkciArIChiYXNlIC0gcmVxLT5ybF9iYXNlKTsKKwlyZXEtPnJsX3NlbmRfaW92WzFdLmFkZHIgPSByZG1hYl9hZGRyKHJlcS0+cmxfc2VuZGJ1Zik7CiAJcmVxLT5ybF9zZW5kX2lvdlsxXS5sZW5ndGggPSBycGNsZW47Ci0JcmVxLT5ybF9zZW5kX2lvdlsxXS5sa2V5ID0gcmVxLT5ybF9pb3YubGtleTsKKwlyZXEtPnJsX3NlbmRfaW92WzFdLmxrZXkgPSByZG1hYl9sa2V5KHJlcS0+cmxfc2VuZGJ1Zik7CiAKIAlyZXEtPnJsX25pb3ZzID0gMjsKIAogCWlmIChwYWRsZW4pIHsKIAkJc3RydWN0IHJwY3JkbWFfZXAgKmVwID0gJnJfeHBydC0+cnhfZXA7CiAKLQkJcmVxLT5ybF9zZW5kX2lvdlsyXS5hZGRyID0gZXAtPnJlcF9wYWQuYWRkcjsKKwkJcmVxLT5ybF9zZW5kX2lvdlsyXS5hZGRyID0gcmRtYWJfYWRkcihlcC0+cmVwX3BhZGJ1Zik7CiAJCXJlcS0+cmxfc2VuZF9pb3ZbMl0ubGVuZ3RoID0gcGFkbGVuOwotCQlyZXEtPnJsX3NlbmRfaW92WzJdLmxrZXkgPSBlcC0+cmVwX3BhZC5sa2V5OworCQlyZXEtPnJsX3NlbmRfaW92WzJdLmxrZXkgPSByZG1hYl9sa2V5KGVwLT5yZXBfcGFkYnVmKTsKIAogCQlyZXEtPnJsX3NlbmRfaW92WzNdLmFkZHIgPSByZXEtPnJsX3NlbmRfaW92WzFdLmFkZHIgKyBycGNsZW47CiAJCXJlcS0+cmxfc2VuZF9pb3ZbM10ubGVuZ3RoID0gcnFzdC0+cnFfc2xlbiAtIHJwY2xlbjsKLQkJcmVxLT5ybF9zZW5kX2lvdlszXS5sa2V5ID0gcmVxLT5ybF9pb3YubGtleTsKKwkJcmVxLT5ybF9zZW5kX2lvdlszXS5sa2V5ID0gcmRtYWJfbGtleShyZXEtPnJsX3NlbmRidWYpOwogCiAJCXJlcS0+cmxfbmlvdnMgPSA0OwogCX0KQEAgLTU2OSw4ICs1NzIsOSBAQAogewogCXVuc2lnbmVkIGludCBpLCB0b3RhbF9sZW47CiAJc3RydWN0IHJwY3JkbWFfd3JpdGVfY2h1bmsgKmN1cl93Y2h1bms7CisJY2hhciAqYmFzZSA9IChjaGFyICopcmRtYWJfdG9fbXNnKHJlcC0+cnJfcmRtYWJ1Zik7CiAKLQlpID0gbnRvaGwoKippcHRycCk7CS8qIGdldCBhcnJheSBjb3VudCAqLworCWkgPSBiZTMyX3RvX2NwdSgqKmlwdHJwKTsKIAlpZiAoaSA+IG1heCkKIAkJcmV0dXJuIC0xOwogCWN1cl93Y2h1bmsgPSAoc3RydWN0IHJwY3JkbWFfd3JpdGVfY2h1bmsgKikgKCppcHRycCArIDEpOwpAQCAtNTgyLDExICs1ODYsMTEgQEAKIAkJCXhkcl9kZWNvZGVfaHlwZXIoKF9fYmUzMiAqKSZzZWctPnJzX29mZnNldCwgJm9mZik7CiAJCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBjaHVuayAlZEAweCVsbHg6MHgleFxuIiwKIAkJCQlfX2Z1bmNfXywKLQkJCQludG9obChzZWctPnJzX2xlbmd0aCksCisJCQkJYmUzMl90b19jcHUoc2VnLT5yc19sZW5ndGgpLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2ZmLAotCQkJCW50b2hsKHNlZy0+cnNfaGFuZGxlKSk7CisJCQkJYmUzMl90b19jcHUoc2VnLT5yc19oYW5kbGUpKTsKIAkJfQotCQl0b3RhbF9sZW4gKz0gbnRvaGwoc2VnLT5yc19sZW5ndGgpOworCQl0b3RhbF9sZW4gKz0gYmUzMl90b19jcHUoc2VnLT5yc19sZW5ndGgpOwogCQkrK2N1cl93Y2h1bms7CiAJfQogCS8qIGNoZWNrIGFuZCBhZGp1c3QgZm9yIHByb3Blcmx5IHRlcm1pbmF0ZWQgd3JpdGUgY2h1bmsgKi8KQEAgLTU5Niw3ICs2MDAsNyBAQAogCQkJcmV0dXJuIC0xOwogCQljdXJfd2NodW5rID0gKHN0cnVjdCBycGNyZG1hX3dyaXRlX2NodW5rICopIHc7CiAJfQotCWlmICgoY2hhciAqKSBjdXJfd2NodW5rID4gcmVwLT5ycl9iYXNlICsgcmVwLT5ycl9sZW4pCisJaWYgKChjaGFyICopY3VyX3djaHVuayA+IGJhc2UgKyByZXAtPnJyX2xlbikKIAkJcmV0dXJuIC0xOwogCiAJKmlwdHJwID0gKF9fYmUzMiAqKSBjdXJfd2NodW5rOwpAQCAtNjkxLDcgKzY5NSw5IEBACiB7CiAJc3RydWN0IHJwY3JkbWFfZXAgKmVwID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBycGNyZG1hX2VwLCByZXBfY29ubmVjdF93b3JrZXIud29yayk7Ci0Jc3RydWN0IHJwY194cHJ0ICp4cHJ0ID0gZXAtPnJlcF94cHJ0OworCXN0cnVjdCBycGNyZG1hX3hwcnQgKnJfeHBydCA9CisJCWNvbnRhaW5lcl9vZihlcCwgc3RydWN0IHJwY3JkbWFfeHBydCwgcnhfZXApOworCXN0cnVjdCBycGNfeHBydCAqeHBydCA9ICZyX3hwcnQtPnJ4X3hwcnQ7CiAKIAlzcGluX2xvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKIAlpZiAoKyt4cHJ0LT5jb25uZWN0X2Nvb2tpZSA9PSAwKQkvKiBtYWludGFpbiBhIHJlc2VydmVkIHZhbHVlICovCkBAIC03MzIsNyArNzM4LDcgQEAKIAlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQgPSByZXAtPnJyX3hwcnQ7CiAJc3RydWN0IHJwY3JkbWFfeHBydCAqcl94cHJ0ID0gcnBjeF90b19yZG1heCh4cHJ0KTsKIAlfX2JlMzIgKmlwdHI7Ci0JaW50IHJkbWFsZW4sIHN0YXR1czsKKwlpbnQgY3JlZGl0cywgcmRtYWxlbiwgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgY3duZDsKIAogCS8qIENoZWNrIHN0YXR1cy4gSWYgYmFkLCBzaWduYWwgZGlzY29ubmVjdCBhbmQgcmV0dXJuIHJlcCB0byBwb29sICovCkBAIC03NDQsMTQgKzc1MCwxNCBAQAogCQl9CiAJCXJldHVybjsKIAl9Ci0JaWYgKHJlcC0+cnJfbGVuIDwgMjgpIHsKKwlpZiAocmVwLT5ycl9sZW4gPCBSUENSRE1BX0hEUkxFTl9NSU4pIHsKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogc2hvcnQvaW52YWxpZCByZXBseVxuIiwgX19mdW5jX18pOwogCQlnb3RvIHJlcG9zdDsKIAl9Ci0JaGVhZGVycCA9IChzdHJ1Y3QgcnBjcmRtYV9tc2cgKikgcmVwLT5ycl9iYXNlOwotCWlmIChoZWFkZXJwLT5ybV92ZXJzICE9IHhkcl9vbmUpIHsKKwloZWFkZXJwID0gcmRtYWJfdG9fbXNnKHJlcC0+cnJfcmRtYWJ1Zik7CisJaWYgKGhlYWRlcnAtPnJtX3ZlcnMgIT0gcnBjcmRtYV92ZXJzaW9uKSB7CiAJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGludmFsaWQgdmVyc2lvbiAlZFxuIiwKLQkJCV9fZnVuY19fLCBudG9obChoZWFkZXJwLT5ybV92ZXJzKSk7CisJCQlfX2Z1bmNfXywgYmUzMl90b19jcHUoaGVhZGVycC0+cm1fdmVycykpOwogCQlnb3RvIHJlcG9zdDsKIAl9CiAKQEAgLTc2Miw3ICs3NjgsOCBAQAogCQlzcGluX3VubG9jaygmeHBydC0+dHJhbnNwb3J0X2xvY2spOwogCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiByZXBseSAweCVwIGZhaWxlZCAiCiAJCQkidG8gbWF0Y2ggYW55IHJlcXVlc3QgeGlkIDB4JTA4eCBsZW4gJWRcbiIsCi0JCQlfX2Z1bmNfXywgcmVwLCBoZWFkZXJwLT5ybV94aWQsIHJlcC0+cnJfbGVuKTsKKwkJCV9fZnVuY19fLCByZXAsIGJlMzJfdG9fY3B1KGhlYWRlcnAtPnJtX3hpZCksCisJCQlyZXAtPnJyX2xlbik7CiByZXBvc3Q6CiAJCXJfeHBydC0+cnhfc3RhdHMuYmFkX3JlcGx5X2NvdW50Kys7CiAJCXJlcC0+cnJfZnVuYyA9IHJwY3JkbWFfcmVwbHlfaGFuZGxlcjsKQEAgLTc3OCwxMyArNzg1LDE0IEBACiAJCXNwaW5fdW5sb2NrKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7CiAJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGR1cGxpY2F0ZSByZXBseSAweCVwIHRvIFJQQyAiCiAJCQkicmVxdWVzdCAweCVwOiB4aWQgMHglMDh4XG4iLCBfX2Z1bmNfXywgcmVwLCByZXEsCi0JCQloZWFkZXJwLT5ybV94aWQpOworCQkJYmUzMl90b19jcHUoaGVhZGVycC0+cm1feGlkKSk7CiAJCWdvdG8gcmVwb3N0OwogCX0KIAogCWRwcmludGsoIlJQQzogICAgICAgJXM6IHJlcGx5IDB4JXAgY29tcGxldGVzIHJlcXVlc3QgMHglcFxuIgogCQkiICAgICAgICAgICAgICAgICAgIFJQQyByZXF1ZXN0IDB4JXAgeGlkIDB4JTA4eFxuIiwKLQkJCV9fZnVuY19fLCByZXAsIHJlcSwgcnFzdCwgaGVhZGVycC0+cm1feGlkKTsKKwkJCV9fZnVuY19fLCByZXAsIHJlcSwgcnFzdCwKKwkJCWJlMzJfdG9fY3B1KGhlYWRlcnAtPnJtX3hpZCkpOwogCiAJLyogZnJvbSBoZXJlIG9uLCB0aGUgcmVwbHkgaXMgbm8gbG9uZ2VyIGFuIG9ycGhhbiAqLwogCXJlcS0+cmxfcmVwbHkgPSByZXA7CkBAIC03OTMsNyArODAxLDcgQEAKIAkvKiBjaGVjayBmb3IgZXhwZWN0ZWQgbWVzc2FnZSB0eXBlcyAqLwogCS8qIFRoZSBvcmRlciBvZiBzb21lIG9mIHRoZXNlIHRlc3RzIGlzIGltcG9ydGFudC4gKi8KIAlzd2l0Y2ggKGhlYWRlcnAtPnJtX3R5cGUpIHsKLQljYXNlIGh0b25sKFJETUFfTVNHKToKKwljYXNlIHJkbWFfbXNnOgogCQkvKiBuZXZlciBleHBlY3QgcmVhZCBjaHVua3MgKi8KIAkJLyogbmV2ZXIgZXhwZWN0IHJlcGx5IGNodW5rcyAodHdvIHdheXMgdG8gY2hlY2spICovCiAJCS8qIG5ldmVyIGV4cGVjdCB3cml0ZSBjaHVua3Mgd2l0aG91dCBoYXZpbmcgb2ZmZXJlZCBSRE1BICovCkBAIC04MjQsMjIgKzgzMiwyNCBAQAogCQl9IGVsc2UgewogCQkJLyogZWxzZSBvcmRpbmFyeSBpbmxpbmUgKi8KIAkJCXJkbWFsZW4gPSAwOwotCQkJaXB0ciA9IChfX2JlMzIgKikoKHVuc2lnbmVkIGNoYXIgKiloZWFkZXJwICsgMjgpOwotCQkJcmVwLT5ycl9sZW4gLT0gMjg7IC8qc2l6ZW9mICpoZWFkZXJwOyovCisJCQlpcHRyID0gKF9fYmUzMiAqKSgodW5zaWduZWQgY2hhciAqKWhlYWRlcnAgKworCQkJCQkJCVJQQ1JETUFfSERSTEVOX01JTik7CisJCQlyZXAtPnJyX2xlbiAtPSBSUENSRE1BX0hEUkxFTl9NSU47CiAJCQlzdGF0dXMgPSByZXAtPnJyX2xlbjsKIAkJfQogCQkvKiBGaXggdXAgdGhlIHJwYyByZXN1bHRzIGZvciB1cHBlciBsYXllciAqLwogCQlycGNyZG1hX2lubGluZV9maXh1cChycXN0LCAoY2hhciAqKWlwdHIsIHJlcC0+cnJfbGVuLCByZG1hbGVuKTsKIAkJYnJlYWs7CiAKLQljYXNlIGh0b25sKFJETUFfTk9NU0cpOgorCWNhc2UgcmRtYV9ub21zZzoKIAkJLyogbmV2ZXIgZXhwZWN0IHJlYWQgb3Igd3JpdGUgY2h1bmtzLCBhbHdheXMgcmVwbHkgY2h1bmtzICovCiAJCWlmIChoZWFkZXJwLT5ybV9ib2R5LnJtX2NodW5rc1swXSAhPSB4ZHJfemVybyB8fAogCQkgICAgaGVhZGVycC0+cm1fYm9keS5ybV9jaHVua3NbMV0gIT0geGRyX3plcm8gfHwKIAkJICAgIGhlYWRlcnAtPnJtX2JvZHkucm1fY2h1bmtzWzJdICE9IHhkcl9vbmUgfHwKIAkJICAgIHJlcS0+cmxfbmNodW5rcyA9PSAwKQogCQkJZ290byBiYWRoZWFkZXI7Ci0JCWlwdHIgPSAoX19iZTMyICopKCh1bnNpZ25lZCBjaGFyICopaGVhZGVycCArIDI4KTsKKwkJaXB0ciA9IChfX2JlMzIgKikoKHVuc2lnbmVkIGNoYXIgKiloZWFkZXJwICsKKwkJCQkJCQlSUENSRE1BX0hEUkxFTl9NSU4pOwogCQlyZG1hbGVuID0gcnBjcmRtYV9jb3VudF9jaHVua3MocmVwLCByZXEtPnJsX25jaHVua3MsIDAsICZpcHRyKTsKIAkJaWYgKHJkbWFsZW4gPCAwKQogCQkJZ290byBiYWRoZWFkZXI7CkBAIC04NTMsNyArODYzLDcgQEAKIAkJZHByaW50aygiJXM6IGludmFsaWQgcnBjcmRtYSByZXBseSBoZWFkZXIgKHR5cGUgJWQpOiIKIAkJCQkiIGNodW5rc1swMTJdID09ICVkICVkICVkIgogCQkJCSIgZXhwZWN0ZWQgY2h1bmtzIDw9ICVkXG4iLAotCQkJCV9fZnVuY19fLCBudG9obChoZWFkZXJwLT5ybV90eXBlKSwKKwkJCQlfX2Z1bmNfXywgYmUzMl90b19jcHUoaGVhZGVycC0+cm1fdHlwZSksCiAJCQkJaGVhZGVycC0+cm1fYm9keS5ybV9jaHVua3NbMF0sCiAJCQkJaGVhZGVycC0+cm1fYm9keS5ybV9jaHVua3NbMV0sCiAJCQkJaGVhZGVycC0+cm1fYm9keS5ybV9jaHVua3NbMl0sCkBAIC04NjMsOCArODczLDE0IEBACiAJCWJyZWFrOwogCX0KIAorCWNyZWRpdHMgPSBiZTMyX3RvX2NwdShoZWFkZXJwLT5ybV9jcmVkaXQpOworCWlmIChjcmVkaXRzID09IDApCisJCWNyZWRpdHMgPSAxOwkvKiBkb24ndCBkZWFkbG9jayAqLworCWVsc2UgaWYgKGNyZWRpdHMgPiByX3hwcnQtPnJ4X2J1Zi5yYl9tYXhfcmVxdWVzdHMpCisJCWNyZWRpdHMgPSByX3hwcnQtPnJ4X2J1Zi5yYl9tYXhfcmVxdWVzdHM7CisKIAljd25kID0geHBydC0+Y3duZDsKLQl4cHJ0LT5jd25kID0gYXRvbWljX3JlYWQoJnJfeHBydC0+cnhfYnVmLnJiX2NyZWRpdHMpIDw8IFJQQ19DV05EU0hJRlQ7CisJeHBydC0+Y3duZCA9IGNyZWRpdHMgPDwgUlBDX0NXTkRTSElGVDsKIAlpZiAoeHBydC0+Y3duZCA+IGN3bmQpCiAJCXhwcnRfcmVsZWFzZV9ycXN0X2NvbmcocnFzdC0+cnFfdGFzayk7CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydHJkbWEvdHJhbnNwb3J0LmMgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3RyYW5zcG9ydC5jCmluZGV4IGJiZDYxNTUuLjJlMTkyYmEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEvdHJhbnNwb3J0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS90cmFuc3BvcnQuYwpAQCAtMjAwLDkgKzIwMCw5IEBACiBzdGF0aWMgdm9pZAogeHBydF9yZG1hX2Nvbm5lY3Rfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgcnBjcmRtYV94cHJ0ICpyX3hwcnQgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHJwY3JkbWFfeHBydCwgcmRtYV9jb25uZWN0LndvcmspOwotCXN0cnVjdCBycGNfeHBydCAqeHBydCA9ICZyX3hwcnQtPnhwcnQ7CisJc3RydWN0IHJwY3JkbWFfeHBydCAqcl94cHJ0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBycGNyZG1hX3hwcnQsCisJCQkJCQkgICByeF9jb25uZWN0X3dvcmtlci53b3JrKTsKKwlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQgPSAmcl94cHJ0LT5yeF94cHJ0OwogCWludCByYyA9IDA7CiAKIAl4cHJ0X2NsZWFyX2Nvbm5lY3RlZCh4cHJ0KTsKQEAgLTIzNSw3ICsyMzUsNyBAQAogCiAJZHByaW50aygiUlBDOiAgICAgICAlczogY2FsbGVkXG4iLCBfX2Z1bmNfXyk7CiAKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJfeHBydC0+cmRtYV9jb25uZWN0KTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnJfeHBydC0+cnhfY29ubmVjdF93b3JrZXIpOwogCiAJeHBydF9jbGVhcl9jb25uZWN0ZWQoeHBydCk7CiAKQEAgLTM2NCw4ICszNjQsNyBAQAogCSAqIGFueSBpbmxpbmUgZGF0YS4gQWxzbyBzcGVjaWZ5IGFueSBwYWRkaW5nIHdoaWNoIHdpbGwgYmUgcHJvdmlkZWQKIAkgKiBmcm9tIGEgcHJlcmVnaXN0ZXJlZCB6ZXJvIGJ1ZmZlci4KIAkgKi8KLQlyYyA9IHJwY3JkbWFfYnVmZmVyX2NyZWF0ZSgmbmV3X3hwcnQtPnJ4X2J1ZiwgbmV3X2VwLCAmbmV3X3hwcnQtPnJ4X2lhLAotCQkJCSZuZXdfeHBydC0+cnhfZGF0YSk7CisJcmMgPSBycGNyZG1hX2J1ZmZlcl9jcmVhdGUobmV3X3hwcnQpOwogCWlmIChyYykKIAkJZ290byBvdXQzOwogCkBAIC0zNzQsOSArMzczLDggQEAKIAkgKiBjb25uZWN0aW9uIGxvc3Mgbm90aWZpY2F0aW9uIGlzIGFzeW5jLiBXZSBhbHNvIGNhdGNoIGNvbm5lY3Rpb24gbG9zcwogCSAqIHdoZW4gcmVhcGluZyByZWNlaXZlcy4KIAkgKi8KLQlJTklUX0RFTEFZRURfV09SSygmbmV3X3hwcnQtPnJkbWFfY29ubmVjdCwgeHBydF9yZG1hX2Nvbm5lY3Rfd29ya2VyKTsKLQluZXdfZXAtPnJlcF9mdW5jID0gcnBjcmRtYV9jb25uX2Z1bmM7Ci0JbmV3X2VwLT5yZXBfeHBydCA9IHhwcnQ7CisJSU5JVF9ERUxBWUVEX1dPUksoJm5ld194cHJ0LT5yeF9jb25uZWN0X3dvcmtlciwKKwkJCSAgeHBydF9yZG1hX2Nvbm5lY3Rfd29ya2VyKTsKIAogCXhwcnRfcmRtYV9mb3JtYXRfYWRkcmVzc2VzKHhwcnQpOwogCXhwcnQtPm1heF9wYXlsb2FkID0gcnBjcmRtYV9tYXhfcGF5bG9hZChuZXdfeHBydCk7CkBAIC00MzQsOTQgKzQzMiwxMDEgQEAKIAogCWlmIChyX3hwcnQtPnJ4X2VwLnJlcF9jb25uZWN0ZWQgIT0gMCkgewogCQkvKiBSZWNvbm5lY3QgKi8KLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZyX3hwcnQtPnJkbWFfY29ubmVjdCwKLQkJCXhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQpOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJfeHBydC0+cnhfY29ubmVjdF93b3JrZXIsCisJCQkJICAgICAgeHBydC0+cmVlc3RhYmxpc2hfdGltZW91dCk7CiAJCXhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPDw9IDE7CiAJCWlmICh4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0ID4gUlBDUkRNQV9NQVhfUkVFU1RfVE8pCiAJCQl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0ID0gUlBDUkRNQV9NQVhfUkVFU1RfVE87CiAJCWVsc2UgaWYgKHhwcnQtPnJlZXN0YWJsaXNoX3RpbWVvdXQgPCBSUENSRE1BX0lOSVRfUkVFU1RfVE8pCiAJCQl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0ID0gUlBDUkRNQV9JTklUX1JFRVNUX1RPOwogCX0gZWxzZSB7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcl94cHJ0LT5yZG1hX2Nvbm5lY3QsIDApOworCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnJfeHBydC0+cnhfY29ubmVjdF93b3JrZXIsIDApOwogCQlpZiAoIVJQQ19JU19BU1lOQyh0YXNrKSkKLQkJCWZsdXNoX2RlbGF5ZWRfd29yaygmcl94cHJ0LT5yZG1hX2Nvbm5lY3QpOworCQkJZmx1c2hfZGVsYXllZF93b3JrKCZyX3hwcnQtPnJ4X2Nvbm5lY3Rfd29ya2VyKTsKIAl9CiB9CiAKIC8qCiAgKiBUaGUgUkRNQSBhbGxvY2F0ZS9mcmVlIGZ1bmN0aW9ucyBuZWVkIHRoZSB0YXNrIHN0cnVjdHVyZSBhcyBhIHBsYWNlCiAgKiB0byBoaWRlIHRoZSBzdHJ1Y3QgcnBjcmRtYV9yZXEsIHdoaWNoIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGFjdHVhbCBzZW5kL3JlY3YKLSAqIHNlcXVlbmNlLiBGb3IgdGhpcyByZWFzb24sIHRoZSByZWN2IGJ1ZmZlcnMgYXJlIGF0dGFjaGVkIHRvIHNlbmQKLSAqIGJ1ZmZlcnMgZm9yIHBvcnRpb25zIG9mIHRoZSBSUEMuIE5vdGUgdGhhdCB0aGUgUlBDIGxheWVyIGFsbG9jYXRlcwotICogYm90aCBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMgaW4gdGhlIHNhbWUgY2FsbC4gV2UgbWF5IHJlZ2lzdGVyCi0gKiB0aGUgcmVjZWl2ZSBidWZmZXIgcG9ydGlvbiB3aGVuIHVzaW5nIHJlcGx5IGNodW5rcy4KKyAqIHNlcXVlbmNlLgorICoKKyAqIFRoZSBSUEMgbGF5ZXIgYWxsb2NhdGVzIGJvdGggc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzIGluIHRoZSBzYW1lIGNhbGwKKyAqIChycV9zZW5kX2J1ZiBhbmQgcnFfcmN2X2J1ZiBhcmUgYm90aCBwYXJ0IG9mIGEgc2luZ2xlIGNvbnRpZ3VvdXMgYnVmZmVyKS4KKyAqIFdlIG1heSByZWdpc3RlciBycV9yY3ZfYnVmIHdoZW4gdXNpbmcgcmVwbHkgY2h1bmtzLgogICovCiBzdGF0aWMgdm9pZCAqCiB4cHJ0X3JkbWFfYWxsb2NhdGUoc3RydWN0IHJwY190YXNrICp0YXNrLCBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQgPSB0YXNrLT50a19ycXN0cC0+cnFfeHBydDsKLQlzdHJ1Y3QgcnBjcmRtYV9yZXEgKnJlcSwgKm5yZXE7CisJc3RydWN0IHJwY3JkbWFfeHBydCAqcl94cHJ0ID0gcnBjeF90b19yZG1heCh4cHJ0KTsKKwlzdHJ1Y3QgcnBjcmRtYV9yZWdidWYgKnJiOworCXN0cnVjdCBycGNyZG1hX3JlcSAqcmVxOworCXNpemVfdCBtaW5fc2l6ZTsKKwlnZnBfdCBmbGFnczsKIAotCXJlcSA9IHJwY3JkbWFfYnVmZmVyX2dldCgmcnBjeF90b19yZG1heCh4cHJ0KS0+cnhfYnVmKTsKKwlyZXEgPSBycGNyZG1hX2J1ZmZlcl9nZXQoJnJfeHBydC0+cnhfYnVmKTsKIAlpZiAocmVxID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKHNpemUgPiByZXEtPnJsX3NpemUpIHsKLQkJZHByaW50aygiUlBDOiAgICAgICAlczogc2l6ZSAlemQgdG9vIGxhcmdlIGZvciBidWZmZXJbJXpkXTogIgotCQkJInByb2cgJWQgdmVycyAlZCBwcm9jICVkXG4iLAotCQkJX19mdW5jX18sIHNpemUsIHJlcS0+cmxfc2l6ZSwKLQkJCXRhc2stPnRrX2NsaWVudC0+Y2xfcHJvZywgdGFzay0+dGtfY2xpZW50LT5jbF92ZXJzLAotCQkJdGFzay0+dGtfbXNnLnJwY19wcm9jLT5wX3Byb2MpOwotCQkvKgotCQkgKiBPdXRnb2luZyBsZW5ndGggc2hvcnRhZ2UuIE91ciBpbmxpbmUgd3JpdGUgbWF4IG11c3QgaGF2ZQotCQkgKiBiZWVuIGNvbmZpZ3VyZWQgdG8gcGVyZm9ybSBkaXJlY3QgaS9vLgotCQkgKgotCQkgKiBUaGlzIGlzIHRoZXJlZm9yZSBhIGxhcmdlIG1ldGFkYXRhIG9wZXJhdGlvbiwgYW5kIHRoZQotCQkgKiBhbGxvY2F0ZSBjYWxsIHdhcyBtYWRlIG9uIHRoZSBtYXhpbXVtIHBvc3NpYmxlIG1lc3NhZ2UsCi0JCSAqIGUuZy4gY29udGFpbmluZyBsb25nIGZpbGVuYW1lKHMpIG9yIHN5bWxpbmsgZGF0YS4gSW4KLQkJICogZmFjdCwgd2hpbGUgdGhlc2UgbWV0YWRhdGEgb3BlcmF0aW9ucyAqbWlnaHQqIGNhcnJ5Ci0JCSAqIGxhcmdlIG91dGdvaW5nIHBheWxvYWRzLCB0aGV5IHJhcmVseSAqZG8qLiBIb3dldmVyLCB3ZQotCQkgKiBoYXZlIHRvIGNvbW1pdCB0byB0aGUgcmVxdWVzdCBoZXJlLCBzbyByZWFsbG9jYXRlIGFuZAotCQkgKiByZWdpc3RlciBpdCBub3cuIFRoZSBkYXRhIHBhdGggd2lsbCBuZXZlciByZXF1aXJlIHRoaXMKLQkJICogcmVhbGxvY2F0aW9uLgotCQkgKgotCQkgKiBJZiB0aGUgYWxsb2NhdGlvbiBvciByZWdpc3RyYXRpb24gZmFpbHMsIHRoZSBSUEMgZnJhbWV3b3JrCi0JCSAqIHdpbGwgKGRvZ2dlZGx5KSByZXRyeS4KLQkJICovCi0JCWlmICh0YXNrLT50a19mbGFncyAmIFJQQ19UQVNLX1NXQVBQRVIpCi0JCQlucmVxID0ga21hbGxvYyhzaXplb2YgKnJlcSArIHNpemUsIEdGUF9BVE9NSUMpOwotCQllbHNlCi0JCQlucmVxID0ga21hbGxvYyhzaXplb2YgKnJlcSArIHNpemUsIEdGUF9OT0ZTKTsKLQkJaWYgKG5yZXEgPT0gTlVMTCkKLQkJCWdvdG8gb3V0ZmFpbDsKKwlmbGFncyA9IEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOOworCWlmIChSUENfSVNfU1dBUFBFUih0YXNrKSkKKwkJZmxhZ3MgPSBfX0dGUF9NRU1BTExPQyB8IEdGUF9OT1dBSVQgfCBfX0dGUF9OT1dBUk47CiAKLQkJaWYgKHJwY3JkbWFfcmVnaXN0ZXJfaW50ZXJuYWwoJnJwY3hfdG9fcmRtYXgoeHBydCktPnJ4X2lhLAotCQkJCW5yZXEtPnJsX2Jhc2UsIHNpemUgKyBzaXplb2Yoc3RydWN0IHJwY3JkbWFfcmVxKQotCQkJCS0gb2Zmc2V0b2Yoc3RydWN0IHJwY3JkbWFfcmVxLCBybF9iYXNlKSwKLQkJCQkmbnJlcS0+cmxfaGFuZGxlLCAmbnJlcS0+cmxfaW92KSkgewotCQkJa2ZyZWUobnJlcSk7Ci0JCQlnb3RvIG91dGZhaWw7Ci0JCX0KLQkJcnBjeF90b19yZG1heCh4cHJ0KS0+cnhfc3RhdHMuaGFyZHdheV9yZWdpc3Rlcl9jb3VudCArPSBzaXplOwotCQlucmVxLT5ybF9zaXplID0gc2l6ZTsKLQkJbnJlcS0+cmxfbmlvdnMgPSAwOwotCQlucmVxLT5ybF9uY2h1bmtzID0gMDsKLQkJbnJlcS0+cmxfYnVmZmVyID0gKHN0cnVjdCBycGNyZG1hX2J1ZmZlciAqKXJlcTsKLQkJbnJlcS0+cmxfcmVwbHkgPSByZXEtPnJsX3JlcGx5OwotCQltZW1jcHkobnJlcS0+cmxfc2VnbWVudHMsCi0JCQlyZXEtPnJsX3NlZ21lbnRzLCBzaXplb2YgbnJlcS0+cmxfc2VnbWVudHMpOwotCQkvKiBmbGFnIHRoZSBzd2FwIHdpdGggYW4gdW51c2VkIGZpZWxkICovCi0JCW5yZXEtPnJsX2lvdi5sZW5ndGggPSAwOwotCQlyZXEtPnJsX3JlcGx5ID0gTlVMTDsKLQkJcmVxID0gbnJlcTsKLQl9CisJaWYgKHJlcS0+cmxfcmRtYWJ1ZiA9PSBOVUxMKQorCQlnb3RvIG91dF9yZG1hYnVmOworCWlmIChyZXEtPnJsX3NlbmRidWYgPT0gTlVMTCkKKwkJZ290byBvdXRfc2VuZGJ1ZjsKKwlpZiAoc2l6ZSA+IHJlcS0+cmxfc2VuZGJ1Zi0+cmdfc2l6ZSkKKwkJZ290byBvdXRfc2VuZGJ1ZjsKKworb3V0OgogCWRwcmludGsoIlJQQzogICAgICAgJXM6IHNpemUgJXpkLCByZXF1ZXN0IDB4JXBcbiIsIF9fZnVuY19fLCBzaXplLCByZXEpOwogCXJlcS0+cmxfY29ubmVjdF9jb29raWUgPSAwOwkvKiBvdXIgcmVzZXJ2ZWQgdmFsdWUgKi8KLQlyZXR1cm4gcmVxLT5ybF94ZHJfYnVmOworCXJldHVybiByZXEtPnJsX3NlbmRidWYtPnJnX2Jhc2U7CiAKLW91dGZhaWw6CitvdXRfcmRtYWJ1ZjoKKwltaW5fc2l6ZSA9IFJQQ1JETUFfSU5MSU5FX1dSSVRFX1RIUkVTSE9MRCh0YXNrLT50a19ycXN0cCk7CisJcmIgPSBycGNyZG1hX2FsbG9jX3JlZ2J1Zigmcl94cHJ0LT5yeF9pYSwgbWluX3NpemUsIGZsYWdzKTsKKwlpZiAoSVNfRVJSKHJiKSkKKwkJZ290byBvdXRfZmFpbDsKKwlyZXEtPnJsX3JkbWFidWYgPSByYjsKKworb3V0X3NlbmRidWY6CisJLyogWERSIGVuY29kaW5nIGFuZCBSUEMvUkRNQSBtYXJzaGFsaW5nIG9mIHRoaXMgcmVxdWVzdCBoYXMgbm90CisJICogeWV0IG9jY3VycmVkLiBUaHVzIGEgbG93ZXIgYm91bmQgaXMgbmVlZGVkIHRvIHByZXZlbnQgYnVmZmVyCisJICogb3ZlcnJ1biBkdXJpbmcgbWFyc2hhbGluZy4KKwkgKgorCSAqIFJQQy9SRE1BIG1hcnNoYWxpbmcgbWF5IGNob29zZSB0byBzZW5kIHBheWxvYWQgYmVhcmluZyBvcHMKKwkgKiBpbmxpbmUsIGlmIHRoZSByZXN1bHQgaXMgc21hbGxlciB0aGFuIHRoZSBpbmxpbmUgdGhyZXNob2xkLgorCSAqIFRoZSB2YWx1ZSBvZiB0aGUgInNpemUiIGFyZ3VtZW50IGFjY291bnRzIGZvciBoZWFkZXIKKwkgKiByZXF1aXJlbWVudHMgYnV0IG5vdCBmb3IgdGhlIHBheWxvYWQgaW4gdGhlc2UgY2FzZXMuCisJICoKKwkgKiBMaWtld2lzZSwgYWxsb2NhdGUgZW5vdWdoIHNwYWNlIHRvIHJlY2VpdmUgYSByZXBseSB1cCB0byB0aGUKKwkgKiBzaXplIG9mIHRoZSBpbmxpbmUgdGhyZXNob2xkLgorCSAqCisJICogSXQncyB1bmxpa2VseSB0aGF0IGJvdGggdGhlIHNlbmQgaGVhZGVyIGFuZCB0aGUgcmVjZWl2ZWQKKwkgKiByZXBseSB3aWxsIGJlIGxhcmdlLCBidXQgc2x1c2ggaXMgcHJvdmlkZWQgaGVyZSB0byBhbGxvdworCSAqIGZsZXhpYmlsaXR5IHdoZW4gbWFyc2hhbGluZy4KKwkgKi8KKwltaW5fc2l6ZSA9IFJQQ1JETUFfSU5MSU5FX1JFQURfVEhSRVNIT0xEKHRhc2stPnRrX3Jxc3RwKTsKKwltaW5fc2l6ZSArPSBSUENSRE1BX0lOTElORV9XUklURV9USFJFU0hPTEQodGFzay0+dGtfcnFzdHApOworCWlmIChzaXplIDwgbWluX3NpemUpCisJCXNpemUgPSBtaW5fc2l6ZTsKKworCXJiID0gcnBjcmRtYV9hbGxvY19yZWdidWYoJnJfeHBydC0+cnhfaWEsIHNpemUsIGZsYWdzKTsKKwlpZiAoSVNfRVJSKHJiKSkKKwkJZ290byBvdXRfZmFpbDsKKwlyYi0+cmdfb3duZXIgPSByZXE7CisKKwlyX3hwcnQtPnJ4X3N0YXRzLmhhcmR3YXlfcmVnaXN0ZXJfY291bnQgKz0gc2l6ZTsKKwlycGNyZG1hX2ZyZWVfcmVnYnVmKCZyX3hwcnQtPnJ4X2lhLCByZXEtPnJsX3NlbmRidWYpOworCXJlcS0+cmxfc2VuZGJ1ZiA9IHJiOworCWdvdG8gb3V0OworCitvdXRfZmFpbDoKIAlycGNyZG1hX2J1ZmZlcl9wdXQocmVxKTsKLQlycGN4X3RvX3JkbWF4KHhwcnQpLT5yeF9zdGF0cy5mYWlsZWRfbWFyc2hhbF9jb3VudCsrOworCXJfeHBydC0+cnhfc3RhdHMuZmFpbGVkX21hcnNoYWxfY291bnQrKzsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtNTMzLDQ3ICs1MzgsMjQgQEAKIHsKIAlzdHJ1Y3QgcnBjcmRtYV9yZXEgKnJlcTsKIAlzdHJ1Y3QgcnBjcmRtYV94cHJ0ICpyX3hwcnQ7Ci0Jc3RydWN0IHJwY3JkbWFfcmVwICpyZXA7CisJc3RydWN0IHJwY3JkbWFfcmVnYnVmICpyYjsKIAlpbnQgaTsKIAogCWlmIChidWZmZXIgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JcmVxID0gY29udGFpbmVyX29mKGJ1ZmZlciwgc3RydWN0IHJwY3JkbWFfcmVxLCBybF94ZHJfYnVmWzBdKTsKLQlpZiAocmVxLT5ybF9pb3YubGVuZ3RoID09IDApIHsJLyogc2VlIGFsbG9jYXRlIGFib3ZlICovCi0JCXJfeHBydCA9IGNvbnRhaW5lcl9vZigoKHN0cnVjdCBycGNyZG1hX3JlcSAqKSByZXEtPnJsX2J1ZmZlciktPnJsX2J1ZmZlciwKLQkJCQkgICAgICBzdHJ1Y3QgcnBjcmRtYV94cHJ0LCByeF9idWYpOwotCX0gZWxzZQotCQlyX3hwcnQgPSBjb250YWluZXJfb2YocmVxLT5ybF9idWZmZXIsIHN0cnVjdCBycGNyZG1hX3hwcnQsIHJ4X2J1Zik7Ci0JcmVwID0gcmVxLT5ybF9yZXBseTsKKwlyYiA9IGNvbnRhaW5lcl9vZihidWZmZXIsIHN0cnVjdCBycGNyZG1hX3JlZ2J1ZiwgcmdfYmFzZVswXSk7CisJcmVxID0gcmItPnJnX293bmVyOworCXJfeHBydCA9IGNvbnRhaW5lcl9vZihyZXEtPnJsX2J1ZmZlciwgc3RydWN0IHJwY3JkbWFfeHBydCwgcnhfYnVmKTsKIAotCWRwcmludGsoIlJQQzogICAgICAgJXM6IGNhbGxlZCBvbiAweCVwJXNcbiIsCi0JCV9fZnVuY19fLCByZXAsIChyZXAgJiYgcmVwLT5ycl9mdW5jKSA/ICIgKHdpdGggd2FpdGVyKSIgOiAiIik7CisJZHByaW50aygiUlBDOiAgICAgICAlczogY2FsbGVkIG9uIDB4JXBcbiIsIF9fZnVuY19fLCByZXEtPnJsX3JlcGx5KTsKIAotCS8qCi0JICogRmluaXNoIHRoZSBkZXJlZ2lzdHJhdGlvbi4gIFRoZSBwcm9jZXNzIGlzIGNvbnNpZGVyZWQKLQkgKiBjb21wbGV0ZSB3aGVuIHRoZSBycl9mdW5jIHZlY3RvciBiZWNvbWVzIE5VTEwgLSB0aGlzCi0JICogd2FzIHB1dCBpbiBwbGFjZSBkdXJpbmcgcnBjcmRtYV9yZXBseV9oYW5kbGVyKCkgLSB0aGUgd2FpdAotCSAqIGNhbGwgYmVsb3cgd2lsbCBub3QgYmxvY2sgaWYgdGhlIGRlcmVnIGlzICJkb25lIi4gSWYKLQkgKiBpbnRlcnJ1cHRlZCwgb3VyIGZyYW1ld29yayB3aWxsIGNsZWFuIHVwLgotCSAqLwogCWZvciAoaSA9IDA7IHJlcS0+cmxfbmNodW5rczspIHsKIAkJLS1yZXEtPnJsX25jaHVua3M7CiAJCWkgKz0gcnBjcmRtYV9kZXJlZ2lzdGVyX2V4dGVybmFsKAogCQkJJnJlcS0+cmxfc2VnbWVudHNbaV0sIHJfeHBydCk7CiAJfQogCi0JaWYgKHJlcS0+cmxfaW92Lmxlbmd0aCA9PSAwKSB7CS8qIHNlZSBhbGxvY2F0ZSBhYm92ZSAqLwotCQlzdHJ1Y3QgcnBjcmRtYV9yZXEgKm9yZXEgPSAoc3RydWN0IHJwY3JkbWFfcmVxICopcmVxLT5ybF9idWZmZXI7Ci0JCW9yZXEtPnJsX3JlcGx5ID0gcmVxLT5ybF9yZXBseTsKLQkJKHZvaWQpIHJwY3JkbWFfZGVyZWdpc3Rlcl9pbnRlcm5hbCgmcl94cHJ0LT5yeF9pYSwKLQkJCQkJCSAgIHJlcS0+cmxfaGFuZGxlLAotCQkJCQkJICAgJnJlcS0+cmxfaW92KTsKLQkJa2ZyZWUocmVxKTsKLQkJcmVxID0gb3JlcTsKLQl9Ci0KLQkvKiBQdXQgYmFjayByZXF1ZXN0K3JlcGx5IGJ1ZmZlcnMgKi8KIAlycGNyZG1hX2J1ZmZlcl9wdXQocmVxKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS92ZXJicy5jIGIvbmV0L3N1bnJwYy94cHJ0cmRtYS92ZXJicy5jCmluZGV4IGM5OGU0MDYuLjEyNDY3NmMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHJkbWEvdmVyYnMuYworKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3ZlcmJzLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVmZXRjaC5oPgogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KIAogI2luY2x1ZGUgInhwcnRfcmRtYS5oIgpAQCAtMTUzLDcgKzE1NCw3IEBACiAJCWV2ZW50LT5kZXZpY2UtPm5hbWUsIGNvbnRleHQpOwogCWlmIChlcC0+cmVwX2Nvbm5lY3RlZCA9PSAxKSB7CiAJCWVwLT5yZXBfY29ubmVjdGVkID0gLUVJTzsKLQkJZXAtPnJlcF9mdW5jKGVwKTsKKwkJcnBjcmRtYV9jb25uX2Z1bmMoZXApOwogCQl3YWtlX3VwX2FsbCgmZXAtPnJlcF9jb25uZWN0X3dhaXQpOwogCX0KIH0KQEAgLTE2OCwyMyArMTY5LDU5IEBACiAJCWV2ZW50LT5kZXZpY2UtPm5hbWUsIGNvbnRleHQpOwogCWlmIChlcC0+cmVwX2Nvbm5lY3RlZCA9PSAxKSB7CiAJCWVwLT5yZXBfY29ubmVjdGVkID0gLUVJTzsKLQkJZXAtPnJlcF9mdW5jKGVwKTsKKwkJcnBjcmRtYV9jb25uX2Z1bmMoZXApOwogCQl3YWtlX3VwX2FsbCgmZXAtPnJlcF9jb25uZWN0X3dhaXQpOwogCX0KIH0KIAorc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB3Y19zdGF0dXNbXSA9IHsKKwkic3VjY2VzcyIsCisJImxvY2FsIGxlbmd0aCBlcnJvciIsCisJImxvY2FsIFFQIG9wZXJhdGlvbiBlcnJvciIsCisJImxvY2FsIEVFIGNvbnRleHQgb3BlcmF0aW9uIGVycm9yIiwKKwkibG9jYWwgcHJvdGVjdGlvbiBlcnJvciIsCisJIldSIGZsdXNoZWQiLAorCSJtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb24gZXJyb3IiLAorCSJiYWQgcmVzcG9uc2UgZXJyb3IiLAorCSJsb2NhbCBhY2Nlc3MgZXJyb3IiLAorCSJyZW1vdGUgaW52YWxpZCByZXF1ZXN0IGVycm9yIiwKKwkicmVtb3RlIGFjY2VzcyBlcnJvciIsCisJInJlbW90ZSBvcGVyYXRpb24gZXJyb3IiLAorCSJ0cmFuc3BvcnQgcmV0cnkgY291bnRlciBleGNlZWRlZCIsCisJIlJOUiByZXRyeWNvdW50ZXIgZXhjZWVkZWQiLAorCSJsb2NhbCBSREQgdmlvbGF0aW9uIGVycm9yIiwKKwkicmVtb3ZlIGludmFsaWQgUkQgcmVxdWVzdCIsCisJIm9wZXJhdGlvbiBhYm9ydGVkIiwKKwkiaW52YWxpZCBFRSBjb250ZXh0IG51bWJlciIsCisJImludmFsaWQgRUUgY29udGV4dCBzdGF0ZSIsCisJImZhdGFsIGVycm9yIiwKKwkicmVzcG9uc2UgdGltZW91dCBlcnJvciIsCisJImdlbmVyYWwgZXJyb3IiLAorfTsKKworI2RlZmluZSBDT01QTEVUSU9OX01TRyhzdGF0dXMpCQkJCQlcCisJKChzdGF0dXMpIDwgQVJSQVlfU0laRSh3Y19zdGF0dXMpID8JCQlcCisJCXdjX3N0YXR1c1soc3RhdHVzKV0gOiAidW5leHBlY3RlZCBjb21wbGV0aW9uIGVycm9yIikKKwogc3RhdGljIHZvaWQKIHJwY3JkbWFfc2VuZGNxX3Byb2Nlc3Nfd2Moc3RydWN0IGliX3djICp3YykKIHsKLQlzdHJ1Y3QgcnBjcmRtYV9tdyAqZnJtciA9IChzdHJ1Y3QgcnBjcmRtYV9tdyAqKSh1bnNpZ25lZCBsb25nKXdjLT53cl9pZDsKLQotCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZybXIgJXAgc3RhdHVzICVYIG9wY29kZSAlZFxuIiwKLQkJX19mdW5jX18sIGZybXIsIHdjLT5zdGF0dXMsIHdjLT5vcGNvZGUpOwotCi0JaWYgKHdjLT53cl9pZCA9PSAwVUxMKQorCWlmIChsaWtlbHkod2MtPnN0YXR1cyA9PSBJQl9XQ19TVUNDRVNTKSkKIAkJcmV0dXJuOwotCWlmICh3Yy0+c3RhdHVzICE9IElCX1dDX1NVQ0NFU1MpCi0JCWZybXItPnIuZnJtci5mcl9zdGF0ZSA9IEZSTVJfSVNfU1RBTEU7CisKKwkvKiBXQVJOSU5HOiBPbmx5IHdyX2lkIGFuZCBzdGF0dXMgYXJlIHJlbGlhYmxlIGF0IHRoaXMgcG9pbnQgKi8KKwlpZiAod2MtPndyX2lkID09IDBVTEwpIHsKKwkJaWYgKHdjLT5zdGF0dXMgIT0gSUJfV0NfV1JfRkxVU0hfRVJSKQorCQkJcHJfZXJyKCJSUEM6ICAgICAgICVzOiBTRU5EOiAlc1xuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgQ09NUExFVElPTl9NU0cod2MtPnN0YXR1cykpOworCX0gZWxzZSB7CisJCXN0cnVjdCBycGNyZG1hX213ICpyOworCisJCXIgPSAoc3RydWN0IHJwY3JkbWFfbXcgKikodW5zaWduZWQgbG9uZyl3Yy0+d3JfaWQ7CisJCXItPnIuZnJtci5mcl9zdGF0ZSA9IEZSTVJfSVNfU1RBTEU7CisJCXByX2VycigiUlBDOiAgICAgICAlczogZnJtciAlcCAoc3RhbGUpOiAlc1xuIiwKKwkJICAgICAgIF9fZnVuY19fLCByLCBDT01QTEVUSU9OX01TRyh3Yy0+c3RhdHVzKSk7CisJfQogfQogCiBzdGF0aWMgaW50CkBAIC0yNDgsMzMgKzI4NSwzMiBAQAogCXN0cnVjdCBycGNyZG1hX3JlcCAqcmVwID0KIAkJCShzdHJ1Y3QgcnBjcmRtYV9yZXAgKikodW5zaWduZWQgbG9uZyl3Yy0+d3JfaWQ7CiAKLQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiByZXAgJXAgc3RhdHVzICVYIG9wY29kZSAlWCBsZW5ndGggJXVcbiIsCi0JCV9fZnVuY19fLCByZXAsIHdjLT5zdGF0dXMsIHdjLT5vcGNvZGUsIHdjLT5ieXRlX2xlbik7CisJLyogV0FSTklORzogT25seSB3cl9pZCBhbmQgc3RhdHVzIGFyZSByZWxpYWJsZSBhdCB0aGlzIHBvaW50ICovCisJaWYgKHdjLT5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUykKKwkJZ290byBvdXRfZmFpbDsKIAotCWlmICh3Yy0+c3RhdHVzICE9IElCX1dDX1NVQ0NFU1MpIHsKLQkJcmVwLT5ycl9sZW4gPSB+MFU7Ci0JCWdvdG8gb3V0X3NjaGVkdWxlOwotCX0KKwkvKiBzdGF0dXMgPT0gU1VDQ0VTUyBtZWFucyBhbGwgZmllbGRzIGluIHdjIGFyZSB0cnVzdHdvcnRoeSAqLwogCWlmICh3Yy0+b3Bjb2RlICE9IElCX1dDX1JFQ1YpCiAJCXJldHVybjsKIAorCWRwcmludGsoIlJQQzogICAgICAgJXM6IHJlcCAlcCBvcGNvZGUgJ3JlY3YnLCBsZW5ndGggJXU6IHN1Y2Nlc3NcbiIsCisJCV9fZnVuY19fLCByZXAsIHdjLT5ieXRlX2xlbik7CisKIAlyZXAtPnJyX2xlbiA9IHdjLT5ieXRlX2xlbjsKIAlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShyZG1hYl90b19pYShyZXAtPnJyX2J1ZmZlciktPnJpX2lkLT5kZXZpY2UsCi0JCQlyZXAtPnJyX2lvdi5hZGRyLCByZXAtPnJyX2xlbiwgRE1BX0ZST01fREVWSUNFKTsKLQotCWlmIChyZXAtPnJyX2xlbiA+PSAxNikgewotCQlzdHJ1Y3QgcnBjcmRtYV9tc2cgKnAgPSAoc3RydWN0IHJwY3JkbWFfbXNnICopcmVwLT5ycl9iYXNlOwotCQl1bnNpZ25lZCBpbnQgY3JlZGl0cyA9IG50b2hsKHAtPnJtX2NyZWRpdCk7Ci0KLQkJaWYgKGNyZWRpdHMgPT0gMCkKLQkJCWNyZWRpdHMgPSAxOwkvKiBkb24ndCBkZWFkbG9jayAqLwotCQllbHNlIGlmIChjcmVkaXRzID4gcmVwLT5ycl9idWZmZXItPnJiX21heF9yZXF1ZXN0cykKLQkJCWNyZWRpdHMgPSByZXAtPnJyX2J1ZmZlci0+cmJfbWF4X3JlcXVlc3RzOwotCQlhdG9taWNfc2V0KCZyZXAtPnJyX2J1ZmZlci0+cmJfY3JlZGl0cywgY3JlZGl0cyk7Ci0JfQorCQkJCSAgIHJkbWFiX2FkZHIocmVwLT5ycl9yZG1hYnVmKSwKKwkJCQkgICByZXAtPnJyX2xlbiwgRE1BX0ZST01fREVWSUNFKTsKKwlwcmVmZXRjaChyZG1hYl90b19tc2cocmVwLT5ycl9yZG1hYnVmKSk7CiAKIG91dF9zY2hlZHVsZToKIAlsaXN0X2FkZF90YWlsKCZyZXAtPnJyX2xpc3QsIHNjaGVkX2xpc3QpOworCXJldHVybjsKK291dF9mYWlsOgorCWlmICh3Yy0+c3RhdHVzICE9IElCX1dDX1dSX0ZMVVNIX0VSUikKKwkJcHJfZXJyKCJSUEM6ICAgICAgICVzOiByZXAgJXA6ICVzXG4iLAorCQkgICAgICAgX19mdW5jX18sIHJlcCwgQ09NUExFVElPTl9NU0cod2MtPnN0YXR1cykpOworCXJlcC0+cnJfbGVuID0gfjBVOworCWdvdG8gb3V0X3NjaGVkdWxlOwogfQogCiBzdGF0aWMgaW50CkBAIC0zOTAsOCArNDI2LDggQEAKICNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAJc3RydWN0IHNvY2thZGRyX2luICphZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmZXAtPnJlcF9yZW1vdGVfYWRkcjsKICNlbmRpZgotCXN0cnVjdCBpYl9xcF9hdHRyIGF0dHI7Ci0Jc3RydWN0IGliX3FwX2luaXRfYXR0ciBpYXR0cjsKKwlzdHJ1Y3QgaWJfcXBfYXR0ciAqYXR0ciA9ICZpYS0+cmlfcXBfYXR0cjsKKwlzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICppYXR0ciA9ICZpYS0+cmlfcXBfaW5pdF9hdHRyOwogCWludCBjb25uc3RhdGUgPSAwOwogCiAJc3dpdGNoIChldmVudC0+ZXZlbnQpIHsKQEAgLTQxNCwxMiArNDUwLDEzIEBACiAJCWJyZWFrOwogCWNhc2UgUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDoKIAkJY29ubnN0YXRlID0gMTsKLQkJaWJfcXVlcnlfcXAoaWEtPnJpX2lkLT5xcCwgJmF0dHIsCi0JCQlJQl9RUF9NQVhfUVBfUkRfQVRPTUlDIHwgSUJfUVBfTUFYX0RFU1RfUkRfQVRPTUlDLAotCQkJJmlhdHRyKTsKKwkJaWJfcXVlcnlfcXAoaWEtPnJpX2lkLT5xcCwgYXR0ciwKKwkJCSAgICBJQl9RUF9NQVhfUVBfUkRfQVRPTUlDIHwgSUJfUVBfTUFYX0RFU1RfUkRfQVRPTUlDLAorCQkJICAgIGlhdHRyKTsKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogJWQgcmVzcG9uZGVyIHJlc291cmNlcyIKIAkJCSIgKCVkIGluaXRpYXRvcilcbiIsCi0JCQlfX2Z1bmNfXywgYXR0ci5tYXhfZGVzdF9yZF9hdG9taWMsIGF0dHIubWF4X3JkX2F0b21pYyk7CisJCQlfX2Z1bmNfXywgYXR0ci0+bWF4X2Rlc3RfcmRfYXRvbWljLAorCQkJYXR0ci0+bWF4X3JkX2F0b21pYyk7CiAJCWdvdG8gY29ubmVjdGVkOwogCWNhc2UgUkRNQV9DTV9FVkVOVF9DT05ORUNUX0VSUk9SOgogCQljb25uc3RhdGUgPSAtRU5PVENPTk47CkBAIC00MzYsMTEgKzQ3MywxMCBAQAogCWNhc2UgUkRNQV9DTV9FVkVOVF9ERVZJQ0VfUkVNT1ZBTDoKIAkJY29ubnN0YXRlID0gLUVOT0RFVjsKIGNvbm5lY3RlZDoKLQkJYXRvbWljX3NldCgmcnBjeF90b19yZG1heChlcC0+cmVwX3hwcnQpLT5yeF9idWYucmJfY3JlZGl0cywgMSk7CiAJCWRwcmludGsoIlJQQzogICAgICAgJXM6ICVzY29ubmVjdGVkXG4iLAogCQkJCQlfX2Z1bmNfXywgY29ubnN0YXRlID4gMCA/ICIiIDogImRpcyIpOwogCQllcC0+cmVwX2Nvbm5lY3RlZCA9IGNvbm5zdGF0ZTsKLQkJZXAtPnJlcF9mdW5jKGVwKTsKKwkJcnBjcmRtYV9jb25uX2Z1bmMoZXApOwogCQl3YWtlX3VwX2FsbCgmZXAtPnJlcF9jb25uZWN0X3dhaXQpOwogCQkvKkZBTExUSFJPVUdIKi8KIAlkZWZhdWx0OgpAQCAtNDUzLDcgKzQ4OSw3IEBACiAKICNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCiAJaWYgKGNvbm5zdGF0ZSA9PSAxKSB7Ci0JCWludCBpcmQgPSBhdHRyLm1heF9kZXN0X3JkX2F0b21pYzsKKwkJaW50IGlyZCA9IGF0dHItPm1heF9kZXN0X3JkX2F0b21pYzsKIAkJaW50IHRpcmQgPSBlcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlczsKIAkJcHJpbnRrKEtFUk5fSU5GTyAicnBjcmRtYTogY29ubmVjdGlvbiB0byAlcEk0OiV1ICIKIAkJCSJvbiAlcywgbWVtcmVnICVkIHNsb3RzICVkIGlyZCAlZCVzXG4iLApAQCAtNTU0LDggKzU5MCw4IEBACiBycGNyZG1hX2lhX29wZW4oc3RydWN0IHJwY3JkbWFfeHBydCAqeHBydCwgc3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgbWVtcmVnKQogewogCWludCByYywgbWVtX3ByaXY7Ci0Jc3RydWN0IGliX2RldmljZV9hdHRyIGRldmF0dHI7CiAJc3RydWN0IHJwY3JkbWFfaWEgKmlhID0gJnhwcnQtPnJ4X2lhOworCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciAqZGV2YXR0ciA9ICZpYS0+cmlfZGV2YXR0cjsKIAogCWlhLT5yaV9pZCA9IHJwY3JkbWFfY3JlYXRlX2lkKHhwcnQsIGlhLCBhZGRyKTsKIAlpZiAoSVNfRVJSKGlhLT5yaV9pZCkpIHsKQEAgLTU3MSwyNiArNjA3LDIxIEBACiAJCWdvdG8gb3V0MjsKIAl9CiAKLQkvKgotCSAqIFF1ZXJ5IHRoZSBkZXZpY2UgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXF1ZXN0ZWQgbWVtb3J5Ci0JICogcmVnaXN0cmF0aW9uIHN0cmF0ZWd5IGlzIHN1cHBvcnRlZC4gSWYgaXQgaXNuJ3QsIHNldCB0aGUKLQkgKiBzdHJhdGVneSB0byBhIGdsb2JhbGx5IHN1cHBvcnRlZCBtb2RlbC4KLQkgKi8KLQlyYyA9IGliX3F1ZXJ5X2RldmljZShpYS0+cmlfaWQtPmRldmljZSwgJmRldmF0dHIpOworCXJjID0gaWJfcXVlcnlfZGV2aWNlKGlhLT5yaV9pZC0+ZGV2aWNlLCBkZXZhdHRyKTsKIAlpZiAocmMpIHsKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogaWJfcXVlcnlfZGV2aWNlIGZhaWxlZCAlZFxuIiwKIAkJCV9fZnVuY19fLCByYyk7Ci0JCWdvdG8gb3V0MjsKKwkJZ290byBvdXQzOwogCX0KIAotCWlmIChkZXZhdHRyLmRldmljZV9jYXBfZmxhZ3MgJiBJQl9ERVZJQ0VfTE9DQUxfRE1BX0xLRVkpIHsKKwlpZiAoZGV2YXR0ci0+ZGV2aWNlX2NhcF9mbGFncyAmIElCX0RFVklDRV9MT0NBTF9ETUFfTEtFWSkgewogCQlpYS0+cmlfaGF2ZV9kbWFfbGtleSA9IDE7CiAJCWlhLT5yaV9kbWFfbGtleSA9IGlhLT5yaV9pZC0+ZGV2aWNlLT5sb2NhbF9kbWFfbGtleTsKIAl9CiAKIAlpZiAobWVtcmVnID09IFJQQ1JETUFfRlJNUikgewogCQkvKiBSZXF1aXJlcyBib3RoIGZybXIgcmVnIGFuZCBsb2NhbCBkbWEgbGtleSAqLwotCQlpZiAoKGRldmF0dHIuZGV2aWNlX2NhcF9mbGFncyAmCisJCWlmICgoZGV2YXR0ci0+ZGV2aWNlX2NhcF9mbGFncyAmCiAJCSAgICAgKElCX0RFVklDRV9NRU1fTUdUX0VYVEVOU0lPTlN8SUJfREVWSUNFX0xPQ0FMX0RNQV9MS0VZKSkgIT0KIAkJICAgIChJQl9ERVZJQ0VfTUVNX01HVF9FWFRFTlNJT05TfElCX0RFVklDRV9MT0NBTF9ETUFfTEtFWSkpIHsKIAkJCWRwcmludGsoIlJQQzogICAgICAgJXM6IEZSTVIgcmVnaXN0cmF0aW9uICIKQEAgLTYwMCw3ICs2MzEsNyBAQAogCQkJLyogTWluZCB0aGUgaWEgbGltaXQgb24gRlJNUiBwYWdlIGxpc3QgZGVwdGggKi8KIAkJCWlhLT5yaV9tYXhfZnJtcl9kZXB0aCA9IG1pbl90KHVuc2lnbmVkIGludCwKIAkJCQlSUENSRE1BX01BWF9EQVRBX1NFR1MsCi0JCQkJZGV2YXR0ci5tYXhfZmFzdF9yZWdfcGFnZV9saXN0X2xlbik7CisJCQkJZGV2YXR0ci0+bWF4X2Zhc3RfcmVnX3BhZ2VfbGlzdF9sZW4pOwogCQl9CiAJfQogCWlmIChtZW1yZWcgPT0gUlBDUkRNQV9NVEhDQUZNUikgewpAQCAtNjM4LDE0ICs2NjksMTQgQEAKIAkJCQkicGh5cyByZWdpc3RlciBmYWlsZWQgd2l0aCAlbFhcbiIsCiAJCQkJX19mdW5jX18sIFBUUl9FUlIoaWEtPnJpX2JpbmRfbWVtKSk7CiAJCQlyYyA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDI7CisJCQlnb3RvIG91dDM7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fRVJSICJSUEM6IFVuc3VwcG9ydGVkIG1lbW9yeSAiCiAJCQkJInJlZ2lzdHJhdGlvbiBtb2RlOiAlZFxuIiwgbWVtcmVnKTsKIAkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIG91dDI7CisJCWdvdG8gb3V0MzsKIAl9CiAJZHByaW50aygiUlBDOiAgICAgICAlczogbWVtb3J5IHJlZ2lzdHJhdGlvbiBzdHJhdGVneSBpcyAlZFxuIiwKIAkJX19mdW5jX18sIG1lbXJlZyk7CkBAIC02NTUsNiArNjg2LDEwIEBACiAKIAlyd2xvY2tfaW5pdCgmaWEtPnJpX3FwbG9jayk7CiAJcmV0dXJuIDA7CisKK291dDM6CisJaWJfZGVhbGxvY19wZChpYS0+cmlfcGQpOworCWlhLT5yaV9wZCA9IE5VTEw7CiBvdXQyOgogCXJkbWFfZGVzdHJveV9pZChpYS0+cmlfaWQpOwogCWlhLT5yaV9pZCA9IE5VTEw7CkBAIC02OTgsMjAgKzczMywxMyBAQAogcnBjcmRtYV9lcF9jcmVhdGUoc3RydWN0IHJwY3JkbWFfZXAgKmVwLCBzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEsCiAJCQkJc3RydWN0IHJwY3JkbWFfY3JlYXRlX2RhdGFfaW50ZXJuYWwgKmNkYXRhKQogewotCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciBkZXZhdHRyOworCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciAqZGV2YXR0ciA9ICZpYS0+cmlfZGV2YXR0cjsKIAlzdHJ1Y3QgaWJfY3EgKnNlbmRjcSwgKnJlY3ZjcTsKIAlpbnQgcmMsIGVycjsKIAotCXJjID0gaWJfcXVlcnlfZGV2aWNlKGlhLT5yaV9pZC0+ZGV2aWNlLCAmZGV2YXR0cik7Ci0JaWYgKHJjKSB7Ci0JCWRwcmludGsoIlJQQzogICAgICAgJXM6IGliX3F1ZXJ5X2RldmljZSBmYWlsZWQgJWRcbiIsCi0JCQlfX2Z1bmNfXywgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCiAJLyogY2hlY2sgcHJvdmlkZXIncyBzZW5kL3JlY3Ygd3IgbGltaXRzICovCi0JaWYgKGNkYXRhLT5tYXhfcmVxdWVzdHMgPiBkZXZhdHRyLm1heF9xcF93cikKLQkJY2RhdGEtPm1heF9yZXF1ZXN0cyA9IGRldmF0dHIubWF4X3FwX3dyOworCWlmIChjZGF0YS0+bWF4X3JlcXVlc3RzID4gZGV2YXR0ci0+bWF4X3FwX3dyKQorCQljZGF0YS0+bWF4X3JlcXVlc3RzID0gZGV2YXR0ci0+bWF4X3FwX3dyOwogCiAJZXAtPnJlcF9hdHRyLmV2ZW50X2hhbmRsZXIgPSBycGNyZG1hX3FwX2FzeW5jX2Vycm9yX3VwY2FsbDsKIAllcC0+cmVwX2F0dHIucXBfY29udGV4dCA9IGVwOwpAQCAtNzQ2LDggKzc3NCw4IEBACiAKIAkJfQogCQllcC0+cmVwX2F0dHIuY2FwLm1heF9zZW5kX3dyICo9IGRlcHRoOwotCQlpZiAoZXAtPnJlcF9hdHRyLmNhcC5tYXhfc2VuZF93ciA+IGRldmF0dHIubWF4X3FwX3dyKSB7Ci0JCQljZGF0YS0+bWF4X3JlcXVlc3RzID0gZGV2YXR0ci5tYXhfcXBfd3IgLyBkZXB0aDsKKwkJaWYgKGVwLT5yZXBfYXR0ci5jYXAubWF4X3NlbmRfd3IgPiBkZXZhdHRyLT5tYXhfcXBfd3IpIHsKKwkJCWNkYXRhLT5tYXhfcmVxdWVzdHMgPSBkZXZhdHRyLT5tYXhfcXBfd3IgLyBkZXB0aDsKIAkJCWlmICghY2RhdGEtPm1heF9yZXF1ZXN0cykKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWVwLT5yZXBfYXR0ci5jYXAubWF4X3NlbmRfd3IgPSBjZGF0YS0+bWF4X3JlcXVlc3RzICoKQEAgLTc2Niw2ICs3OTQsMTQgQEAKIAllcC0+cmVwX2F0dHIucXBfdHlwZSA9IElCX1FQVF9SQzsKIAllcC0+cmVwX2F0dHIucG9ydF9udW0gPSB+MDsKIAorCWlmIChjZGF0YS0+cGFkZGluZykgeworCQllcC0+cmVwX3BhZGJ1ZiA9IHJwY3JkbWFfYWxsb2NfcmVnYnVmKGlhLCBjZGF0YS0+cGFkZGluZywKKwkJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoSVNfRVJSKGVwLT5yZXBfcGFkYnVmKSkKKwkJCXJldHVybiBQVFJfRVJSKGVwLT5yZXBfcGFkYnVmKTsKKwl9IGVsc2UKKwkJZXAtPnJlcF9wYWRidWYgPSBOVUxMOworCiAJZHByaW50aygiUlBDOiAgICAgICAlczogcmVxdWVzdGVkIG1heDogZHRvczogc2VuZCAlZCByZWN2ICVkOyAiCiAJCSJpb3ZzOiBzZW5kICVkIHJlY3YgJWRcbiIsCiAJCV9fZnVuY19fLApAQCAtNzgxLDcgKzgxNyw2IEBACiAJZWxzZSBpZiAoZXAtPnJlcF9jcWluaXQgPD0gMikKIAkJZXAtPnJlcF9jcWluaXQgPSAwOwogCUlOSVRfQ1FDT1VOVChlcCk7Ci0JZXAtPnJlcF9pYSA9IGlhOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmVwLT5yZXBfY29ubmVjdF93YWl0KTsKIAlJTklUX0RFTEFZRURfV09SSygmZXAtPnJlcF9jb25uZWN0X3dvcmtlciwgcnBjcmRtYV9jb25uZWN0X3dvcmtlcik7CiAKQEAgLTgzMSwxMCArODY2LDExIEBACiAKIAkvKiBDbGllbnQgb2ZmZXJzIFJETUEgUmVhZCBidXQgZG9lcyBub3QgaW5pdGlhdGUgKi8KIAllcC0+cmVwX3JlbW90ZV9jbWEuaW5pdGlhdG9yX2RlcHRoID0gMDsKLQlpZiAoZGV2YXR0ci5tYXhfcXBfcmRfYXRvbSA+IDMyKQkvKiBhcmJpdHJhcnkgYnV0IDw9IDI1NSAqLworCWlmIChkZXZhdHRyLT5tYXhfcXBfcmRfYXRvbSA+IDMyKQkvKiBhcmJpdHJhcnkgYnV0IDw9IDI1NSAqLwogCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA9IDMyOwogCWVsc2UKLQkJZXAtPnJlcF9yZW1vdGVfY21hLnJlc3BvbmRlcl9yZXNvdXJjZXMgPSBkZXZhdHRyLm1heF9xcF9yZF9hdG9tOworCQllcC0+cmVwX3JlbW90ZV9jbWEucmVzcG9uZGVyX3Jlc291cmNlcyA9CisJCQkJCQlkZXZhdHRyLT5tYXhfcXBfcmRfYXRvbTsKIAogCWVwLT5yZXBfcmVtb3RlX2NtYS5yZXRyeV9jb3VudCA9IDc7CiAJZXAtPnJlcF9yZW1vdGVfY21hLmZsb3dfY29udHJvbCA9IDA7CkBAIC04NDgsNiArODg0LDcgQEAKIAkJZHByaW50aygiUlBDOiAgICAgICAlczogaWJfZGVzdHJveV9jcSByZXR1cm5lZCAlaVxuIiwKIAkJCV9fZnVuY19fLCBlcnIpOwogb3V0MToKKwlycGNyZG1hX2ZyZWVfcmVnYnVmKGlhLCBlcC0+cmVwX3BhZGJ1Zik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC04NzQsMTEgKzkxMSw3IEBACiAJCWlhLT5yaV9pZC0+cXAgPSBOVUxMOwogCX0KIAotCS8qIHBhZGRpbmcgLSBjb3VsZCBiZSBkb25lIGluIHJwY3JkbWFfYnVmZmVyX2Rlc3Ryb3kuLi4gKi8KLQlpZiAoZXAtPnJlcF9wYWRfbXIpIHsKLQkJcnBjcmRtYV9kZXJlZ2lzdGVyX2ludGVybmFsKGlhLCBlcC0+cmVwX3BhZF9tciwgJmVwLT5yZXBfcGFkKTsKLQkJZXAtPnJlcF9wYWRfbXIgPSBOVUxMOwotCX0KKwlycGNyZG1hX2ZyZWVfcmVnYnVmKGlhLCBlcC0+cmVwX3BhZGJ1Zik7CiAKIAlycGNyZG1hX2NsZWFuX2NxKGVwLT5yZXBfYXR0ci5yZWN2X2NxKTsKIAlyYyA9IGliX2Rlc3Ryb3lfY3EoZXAtPnJlcF9hdHRyLnJlY3ZfY3EpOwpAQCAtMTA0OCw2ICsxMDgxLDQ4IEBACiAJfQogfQogCitzdGF0aWMgc3RydWN0IHJwY3JkbWFfcmVxICoKK3JwY3JkbWFfY3JlYXRlX3JlcShzdHJ1Y3QgcnBjcmRtYV94cHJ0ICpyX3hwcnQpCit7CisJc3RydWN0IHJwY3JkbWFfcmVxICpyZXE7CisKKwlyZXEgPSBremFsbG9jKHNpemVvZigqcmVxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlcSA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXJlcS0+cmxfYnVmZmVyID0gJnJfeHBydC0+cnhfYnVmOworCXJldHVybiByZXE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcnBjcmRtYV9yZXAgKgorcnBjcmRtYV9jcmVhdGVfcmVwKHN0cnVjdCBycGNyZG1hX3hwcnQgKnJfeHBydCkKK3sKKwlzdHJ1Y3QgcnBjcmRtYV9jcmVhdGVfZGF0YV9pbnRlcm5hbCAqY2RhdGEgPSAmcl94cHJ0LT5yeF9kYXRhOworCXN0cnVjdCBycGNyZG1hX2lhICppYSA9ICZyX3hwcnQtPnJ4X2lhOworCXN0cnVjdCBycGNyZG1hX3JlcCAqcmVwOworCWludCByYzsKKworCXJjID0gLUVOT01FTTsKKwlyZXAgPSBremFsbG9jKHNpemVvZigqcmVwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHJlcCA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJlcC0+cnJfcmRtYWJ1ZiA9IHJwY3JkbWFfYWxsb2NfcmVnYnVmKGlhLCBjZGF0YS0+aW5saW5lX3JzaXplLAorCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKElTX0VSUihyZXAtPnJyX3JkbWFidWYpKSB7CisJCXJjID0gUFRSX0VSUihyZXAtPnJyX3JkbWFidWYpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXJlcC0+cnJfYnVmZmVyID0gJnJfeHBydC0+cnhfYnVmOworCXJldHVybiByZXA7CisKK291dF9mcmVlOgorCWtmcmVlKHJlcCk7CitvdXQ6CisJcmV0dXJuIEVSUl9QVFIocmMpOworfQorCiBzdGF0aWMgaW50CiBycGNyZG1hX2luaXRfZm1ycyhzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEsIHN0cnVjdCBycGNyZG1hX2J1ZmZlciAqYnVmKQogewpAQCAtMTEzNCwyNyArMTIwOSwyNiBAQAogfQogCiBpbnQKLXJwY3JkbWFfYnVmZmVyX2NyZWF0ZShzdHJ1Y3QgcnBjcmRtYV9idWZmZXIgKmJ1Ziwgc3RydWN0IHJwY3JkbWFfZXAgKmVwLAotCXN0cnVjdCBycGNyZG1hX2lhICppYSwgc3RydWN0IHJwY3JkbWFfY3JlYXRlX2RhdGFfaW50ZXJuYWwgKmNkYXRhKQorcnBjcmRtYV9idWZmZXJfY3JlYXRlKHN0cnVjdCBycGNyZG1hX3hwcnQgKnJfeHBydCkKIHsKKwlzdHJ1Y3QgcnBjcmRtYV9idWZmZXIgKmJ1ZiA9ICZyX3hwcnQtPnJ4X2J1ZjsKKwlzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEgPSAmcl94cHJ0LT5yeF9pYTsKKwlzdHJ1Y3QgcnBjcmRtYV9jcmVhdGVfZGF0YV9pbnRlcm5hbCAqY2RhdGEgPSAmcl94cHJ0LT5yeF9kYXRhOwogCWNoYXIgKnA7Ci0Jc2l6ZV90IGxlbiwgcmxlbiwgd2xlbjsKKwlzaXplX3QgbGVuOwogCWludCBpLCByYzsKIAogCWJ1Zi0+cmJfbWF4X3JlcXVlc3RzID0gY2RhdGEtPm1heF9yZXF1ZXN0czsKIAlzcGluX2xvY2tfaW5pdCgmYnVmLT5yYl9sb2NrKTsKLQlhdG9taWNfc2V0KCZidWYtPnJiX2NyZWRpdHMsIDEpOwogCiAJLyogTmVlZCB0byBhbGxvY2F0ZToKIAkgKiAgIDEuICBhcnJheXMgZm9yIHNlbmQgYW5kIHJlY3YgcG9pbnRlcnMKIAkgKiAgIDIuICBhcnJheXMgb2Ygc3RydWN0IHJwY3JkbWFfcmVxIHRvIGZpbGwgaW4gcG9pbnRlcnMKIAkgKiAgIDMuICBhcnJheSBvZiBzdHJ1Y3QgcnBjcmRtYV9yZXAgZm9yIHJlcGxpZXMKLQkgKiAgIDQuICBwYWRkaW5nLCBpZiBhbnkKIAkgKiBTZW5kL3JlY3YgYnVmZmVycyBpbiByZXEvcmVwIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZAogCSAqLwogCWxlbiA9IGJ1Zi0+cmJfbWF4X3JlcXVlc3RzICoKIAkJKHNpemVvZihzdHJ1Y3QgcnBjcmRtYV9yZXEgKikgKyBzaXplb2Yoc3RydWN0IHJwY3JkbWFfcmVwICopKTsKLQlsZW4gKz0gY2RhdGEtPnBhZGRpbmc7CiAKIAlwID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCWlmIChwID09IE5VTEwpIHsKQEAgLTExNzAsMTcgKzEyNDQsNiBAQAogCWJ1Zi0+cmJfcmVjdl9idWZzID0gKHN0cnVjdCBycGNyZG1hX3JlcCAqKikgcDsKIAlwID0gKGNoYXIgKikgJmJ1Zi0+cmJfcmVjdl9idWZzW2J1Zi0+cmJfbWF4X3JlcXVlc3RzXTsKIAotCS8qCi0JICogUmVnaXN0ZXIgdGhlIHplcm9lZCBwYWQgYnVmZmVyLCBpZiBhbnkuCi0JICovCi0JaWYgKGNkYXRhLT5wYWRkaW5nKSB7Ci0JCXJjID0gcnBjcmRtYV9yZWdpc3Rlcl9pbnRlcm5hbChpYSwgcCwgY2RhdGEtPnBhZGRpbmcsCi0JCQkJCSAgICAmZXAtPnJlcF9wYWRfbXIsICZlcC0+cmVwX3BhZCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0OwotCX0KLQlwICs9IGNkYXRhLT5wYWRkaW5nOwotCiAJSU5JVF9MSVNUX0hFQUQoJmJ1Zi0+cmJfbXdzKTsKIAlJTklUX0xJU1RfSEVBRCgmYnVmLT5yYl9hbGwpOwogCXN3aXRjaCAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSkgewpAQCAtMTE5OCw2MiArMTI2MSwyOSBAQAogCQlicmVhazsKIAl9CiAKLQkvKgotCSAqIEFsbG9jYXRlL2luaXQgdGhlIHJlcXVlc3QvcmVwbHkgYnVmZmVycy4gRG9pbmcgdGhpcwotCSAqIHVzaW5nIGttYWxsb2MgZm9yIG5vdyAtLSBvbmUgZm9yIGVhY2ggYnVmLgotCSAqLwotCXdsZW4gPSAxIDw8IGZscyhjZGF0YS0+aW5saW5lX3dzaXplICsgc2l6ZW9mKHN0cnVjdCBycGNyZG1hX3JlcSkpOwotCXJsZW4gPSAxIDw8IGZscyhjZGF0YS0+aW5saW5lX3JzaXplICsgc2l6ZW9mKHN0cnVjdCBycGNyZG1hX3JlcCkpOwotCWRwcmludGsoIlJQQzogICAgICAgJXM6IHdsZW4gPSAlenUsIHJsZW4gPSAlenVcbiIsCi0JCV9fZnVuY19fLCB3bGVuLCBybGVuKTsKLQogCWZvciAoaSA9IDA7IGkgPCBidWYtPnJiX21heF9yZXF1ZXN0czsgaSsrKSB7CiAJCXN0cnVjdCBycGNyZG1hX3JlcSAqcmVxOwogCQlzdHJ1Y3QgcnBjcmRtYV9yZXAgKnJlcDsKIAotCQlyZXEgPSBrbWFsbG9jKHdsZW4sIEdGUF9LRVJORUwpOwotCQlpZiAocmVxID09IE5VTEwpIHsKKwkJcmVxID0gcnBjcmRtYV9jcmVhdGVfcmVxKHJfeHBydCk7CisJCWlmIChJU19FUlIocmVxKSkgewogCQkJZHByaW50aygiUlBDOiAgICAgICAlczogcmVxdWVzdCBidWZmZXIgJWQgYWxsb2MiCiAJCQkJIiBmYWlsZWRcbiIsIF9fZnVuY19fLCBpKTsKLQkJCXJjID0gLUVOT01FTTsKKwkJCXJjID0gUFRSX0VSUihyZXEpOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJbWVtc2V0KHJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBycGNyZG1hX3JlcSkpOwogCQlidWYtPnJiX3NlbmRfYnVmc1tpXSA9IHJlcTsKLQkJYnVmLT5yYl9zZW5kX2J1ZnNbaV0tPnJsX2J1ZmZlciA9IGJ1ZjsKIAotCQlyYyA9IHJwY3JkbWFfcmVnaXN0ZXJfaW50ZXJuYWwoaWEsIHJlcS0+cmxfYmFzZSwKLQkJCQl3bGVuIC0gb2Zmc2V0b2Yoc3RydWN0IHJwY3JkbWFfcmVxLCBybF9iYXNlKSwKLQkJCQkmYnVmLT5yYl9zZW5kX2J1ZnNbaV0tPnJsX2hhbmRsZSwKLQkJCQkmYnVmLT5yYl9zZW5kX2J1ZnNbaV0tPnJsX2lvdik7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0OwotCi0JCWJ1Zi0+cmJfc2VuZF9idWZzW2ldLT5ybF9zaXplID0gd2xlbiAtCi0JCQkJCQlzaXplb2Yoc3RydWN0IHJwY3JkbWFfcmVxKTsKLQotCQlyZXAgPSBrbWFsbG9jKHJsZW4sIEdGUF9LRVJORUwpOwotCQlpZiAocmVwID09IE5VTEwpIHsKKwkJcmVwID0gcnBjcmRtYV9jcmVhdGVfcmVwKHJfeHBydCk7CisJCWlmIChJU19FUlIocmVwKSkgewogCQkJZHByaW50aygiUlBDOiAgICAgICAlczogcmVwbHkgYnVmZmVyICVkIGFsbG9jIGZhaWxlZFxuIiwKIAkJCQlfX2Z1bmNfXywgaSk7Ci0JCQlyYyA9IC1FTk9NRU07CisJCQlyYyA9IFBUUl9FUlIocmVwKTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCW1lbXNldChyZXAsIDAsIHNpemVvZihzdHJ1Y3QgcnBjcmRtYV9yZXApKTsKIAkJYnVmLT5yYl9yZWN2X2J1ZnNbaV0gPSByZXA7Ci0JCWJ1Zi0+cmJfcmVjdl9idWZzW2ldLT5ycl9idWZmZXIgPSBidWY7Ci0KLQkJcmMgPSBycGNyZG1hX3JlZ2lzdGVyX2ludGVybmFsKGlhLCByZXAtPnJyX2Jhc2UsCi0JCQkJcmxlbiAtIG9mZnNldG9mKHN0cnVjdCBycGNyZG1hX3JlcCwgcnJfYmFzZSksCi0JCQkJJmJ1Zi0+cmJfcmVjdl9idWZzW2ldLT5ycl9oYW5kbGUsCi0JCQkJJmJ1Zi0+cmJfcmVjdl9idWZzW2ldLT5ycl9pb3YpOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDsKLQogCX0KLQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBtYXhfcmVxdWVzdHMgJWRcbiIsCi0JCV9fZnVuY19fLCBidWYtPnJiX21heF9yZXF1ZXN0cyk7Ci0JLyogZG9uZSAqLworCiAJcmV0dXJuIDA7CiBvdXQ6CiAJcnBjcmRtYV9idWZmZXJfZGVzdHJveShidWYpOwpAQCAtMTI2MSw2ICsxMjkxLDI3IEBACiB9CiAKIHN0YXRpYyB2b2lkCitycGNyZG1hX2Rlc3Ryb3lfcmVwKHN0cnVjdCBycGNyZG1hX2lhICppYSwgc3RydWN0IHJwY3JkbWFfcmVwICpyZXApCit7CisJaWYgKCFyZXApCisJCXJldHVybjsKKworCXJwY3JkbWFfZnJlZV9yZWdidWYoaWEsIHJlcC0+cnJfcmRtYWJ1Zik7CisJa2ZyZWUocmVwKTsKK30KKworc3RhdGljIHZvaWQKK3JwY3JkbWFfZGVzdHJveV9yZXEoc3RydWN0IHJwY3JkbWFfaWEgKmlhLCBzdHJ1Y3QgcnBjcmRtYV9yZXEgKnJlcSkKK3sKKwlpZiAoIXJlcSkKKwkJcmV0dXJuOworCisJcnBjcmRtYV9mcmVlX3JlZ2J1ZihpYSwgcmVxLT5ybF9zZW5kYnVmKTsKKwlycGNyZG1hX2ZyZWVfcmVnYnVmKGlhLCByZXEtPnJsX3JkbWFidWYpOworCWtmcmVlKHJlcSk7Cit9CisKK3N0YXRpYyB2b2lkCiBycGNyZG1hX2Rlc3Ryb3lfZm1ycyhzdHJ1Y3QgcnBjcmRtYV9idWZmZXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgcnBjcmRtYV9tdyAqcjsKQEAgLTEzMTUsMTggKzEzNjYsMTAgQEAKIAlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBlbnRlcmluZ1xuIiwgX19mdW5jX18pOwogCiAJZm9yIChpID0gMDsgaSA8IGJ1Zi0+cmJfbWF4X3JlcXVlc3RzOyBpKyspIHsKLQkJaWYgKGJ1Zi0+cmJfcmVjdl9idWZzICYmIGJ1Zi0+cmJfcmVjdl9idWZzW2ldKSB7Ci0JCQlycGNyZG1hX2RlcmVnaXN0ZXJfaW50ZXJuYWwoaWEsCi0JCQkJCWJ1Zi0+cmJfcmVjdl9idWZzW2ldLT5ycl9oYW5kbGUsCi0JCQkJCSZidWYtPnJiX3JlY3ZfYnVmc1tpXS0+cnJfaW92KTsKLQkJCWtmcmVlKGJ1Zi0+cmJfcmVjdl9idWZzW2ldKTsKLQkJfQotCQlpZiAoYnVmLT5yYl9zZW5kX2J1ZnMgJiYgYnVmLT5yYl9zZW5kX2J1ZnNbaV0pIHsKLQkJCXJwY3JkbWFfZGVyZWdpc3Rlcl9pbnRlcm5hbChpYSwKLQkJCQkJYnVmLT5yYl9zZW5kX2J1ZnNbaV0tPnJsX2hhbmRsZSwKLQkJCQkJJmJ1Zi0+cmJfc2VuZF9idWZzW2ldLT5ybF9pb3YpOwotCQkJa2ZyZWUoYnVmLT5yYl9zZW5kX2J1ZnNbaV0pOwotCQl9CisJCWlmIChidWYtPnJiX3JlY3ZfYnVmcykKKwkJCXJwY3JkbWFfZGVzdHJveV9yZXAoaWEsIGJ1Zi0+cmJfcmVjdl9idWZzW2ldKTsKKwkJaWYgKGJ1Zi0+cmJfc2VuZF9idWZzKQorCQkJcnBjcmRtYV9kZXN0cm95X3JlcShpYSwgYnVmLT5yYl9zZW5kX2J1ZnNbaV0pOwogCX0KIAogCXN3aXRjaCAoaWEtPnJpX21lbXJlZ19zdHJhdGVneSkgewpAQCAtMTQ1MCw4ICsxNDkzLDggQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDEsIHNlZysrOyBpIDwgUlBDUkRNQV9NQVhfU0VHUzsgc2VnKyssIGkrKykKLQkJcnBjcmRtYV9idWZmZXJfcHV0X21yKCZzZWctPm1yX2NodW5rLnJsX213LCBidWYpOwotCXJwY3JkbWFfYnVmZmVyX3B1dF9tcigmc2VnMS0+bXJfY2h1bmsucmxfbXcsIGJ1Zik7CisJCXJwY3JkbWFfYnVmZmVyX3B1dF9tcigmc2VnLT5ybF9tdywgYnVmKTsKKwlycGNyZG1hX2J1ZmZlcl9wdXRfbXIoJnNlZzEtPnJsX213LCBidWYpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTUzNyw3ICsxNTgwLDcgQEAKIAkJCWxpc3RfYWRkKCZyLT5td19saXN0LCBzdGFsZSk7CiAJCQljb250aW51ZTsKIAkJfQotCQlyZXEtPnJsX3NlZ21lbnRzW2ldLm1yX2NodW5rLnJsX213ID0gcjsKKwkJcmVxLT5ybF9zZWdtZW50c1tpXS5ybF9tdyA9IHI7CiAJCWlmICh1bmxpa2VseShpLS0gPT0gMCkpCiAJCQlyZXR1cm4gcmVxOwkvKiBTdWNjZXNzICovCiAJfQpAQCAtMTU1OSw3ICsxNjAyLDcgQEAKIAkJciA9IGxpc3RfZW50cnkoYnVmLT5yYl9td3MubmV4dCwKIAkJCSAgICAgICBzdHJ1Y3QgcnBjcmRtYV9tdywgbXdfbGlzdCk7CiAJCWxpc3RfZGVsKCZyLT5td19saXN0KTsKLQkJcmVxLT5ybF9zZWdtZW50c1tpXS5tcl9jaHVuay5ybF9tdyA9IHI7CisJCXJlcS0+cmxfc2VnbWVudHNbaV0ucmxfbXcgPSByOwogCQlpZiAodW5saWtlbHkoaS0tID09IDApKQogCQkJcmV0dXJuIHJlcTsJLyogU3VjY2VzcyAqLwogCX0KQEAgLTE2NTgsOCArMTcwMSw2IEBACiAJc3RydWN0IHJwY3JkbWFfYnVmZmVyICpidWZmZXJzID0gcmVxLT5ybF9idWZmZXI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChyZXEtPnJsX2lvdi5sZW5ndGggPT0gMCkJLyogc3BlY2lhbCBjYXNlIHhwcnRfcmRtYV9hbGxvY2F0ZSgpICovCi0JCWJ1ZmZlcnMgPSAoKHN0cnVjdCBycGNyZG1hX3JlcSAqKSBidWZmZXJzKS0+cmxfYnVmZmVyOwogCXNwaW5fbG9ja19pcnFzYXZlKCZidWZmZXJzLT5yYl9sb2NrLCBmbGFncyk7CiAJaWYgKGJ1ZmZlcnMtPnJiX3JlY3ZfaW5kZXggPCBidWZmZXJzLT5yYl9tYXhfcmVxdWVzdHMpIHsKIAkJcmVxLT5ybF9yZXBseSA9IGJ1ZmZlcnMtPnJiX3JlY3ZfYnVmc1tidWZmZXJzLT5yYl9yZWN2X2luZGV4XTsKQEAgLTE2ODgsNyArMTcyOSw3IEBACiAgKiBXcmFwcGVycyBmb3IgaW50ZXJuYWwtdXNlIGttYWxsb2MgbWVtb3J5IHJlZ2lzdHJhdGlvbiwgdXNlZCBieSBidWZmZXIgY29kZS4KICAqLwogCi1pbnQKK3N0YXRpYyBpbnQKIHJwY3JkbWFfcmVnaXN0ZXJfaW50ZXJuYWwoc3RydWN0IHJwY3JkbWFfaWEgKmlhLCB2b2lkICp2YSwgaW50IGxlbiwKIAkJCQlzdHJ1Y3QgaWJfbXIgKiptcnAsIHN0cnVjdCBpYl9zZ2UgKmlvdikKIHsKQEAgLTE3MzksNyArMTc4MCw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIHJwY3JkbWFfZGVyZWdpc3Rlcl9pbnRlcm5hbChzdHJ1Y3QgcnBjcmRtYV9pYSAqaWEsCiAJCQkJc3RydWN0IGliX21yICptciwgc3RydWN0IGliX3NnZSAqaW92KQogewpAQCAtMTc1Nyw2ICsxNzk4LDYxIEBACiAJcmV0dXJuIHJjOwogfQogCisvKioKKyAqIHJwY3JkbWFfYWxsb2NfcmVnYnVmIC0ga21hbGxvYyBhbmQgcmVnaXN0ZXIgbWVtb3J5IGZvciBTRU5EL1JFQ1YgYnVmZmVycworICogQGlhOiBjb250cm9sbGluZyBycGNyZG1hX2lhCisgKiBAc2l6ZTogc2l6ZSBvZiBidWZmZXIgdG8gYmUgYWxsb2NhdGVkLCBpbiBieXRlcworICogQGZsYWdzOiBHRlAgZmxhZ3MKKyAqCisgKiBSZXR1cm5zIHBvaW50ZXIgdG8gcHJpdmF0ZSBoZWFkZXIgb2YgYW4gYXJlYSBvZiBpbnRlcm5hbGx5CisgKiByZWdpc3RlcmVkIG1lbW9yeSwgb3IgYW4gRVJSX1BUUi4gVGhlIHJlZ2lzdGVyZWQgYnVmZmVyIGZvbGxvd3MKKyAqIHRoZSBlbmQgb2YgdGhlIHByaXZhdGUgaGVhZGVyLgorICoKKyAqIHhwcnRyZG1hIHVzZXMgYSByZWdidWYgZm9yIHBvc3RpbmcgYW4gb3V0Z29pbmcgUkRNQSBTRU5ELCBvciBmb3IKKyAqIHJlY2VpdmluZyB0aGUgcGF5bG9hZCBvZiBSRE1BIFJFQ1Ygb3BlcmF0aW9ucy4gcmVnYnVmcyBhcmUgbm90CisgKiB1c2VkIGZvciBSRE1BIFJFQUQvV1JJVEUgb3BlcmF0aW9ucywgdGh1cyBhcmUgcmVnaXN0ZXJlZCBvbmx5IGZvcgorICogTE9DQUwgYWNjZXNzLgorICovCitzdHJ1Y3QgcnBjcmRtYV9yZWdidWYgKgorcnBjcmRtYV9hbGxvY19yZWdidWYoc3RydWN0IHJwY3JkbWFfaWEgKmlhLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCit7CisJc3RydWN0IHJwY3JkbWFfcmVnYnVmICpyYjsKKwlpbnQgcmM7CisKKwlyYyA9IC1FTk9NRU07CisJcmIgPSBrbWFsbG9jKHNpemVvZigqcmIpICsgc2l6ZSwgZmxhZ3MpOworCWlmIChyYiA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJiLT5yZ19zaXplID0gc2l6ZTsKKwlyYi0+cmdfb3duZXIgPSBOVUxMOworCXJjID0gcnBjcmRtYV9yZWdpc3Rlcl9pbnRlcm5hbChpYSwgcmItPnJnX2Jhc2UsIHNpemUsCisJCQkJICAgICAgICZyYi0+cmdfbXIsICZyYi0+cmdfaW92KTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlyZXR1cm4gcmI7CisKK291dF9mcmVlOgorCWtmcmVlKHJiKTsKK291dDoKKwlyZXR1cm4gRVJSX1BUUihyYyk7Cit9CisKKy8qKgorICogcnBjcmRtYV9mcmVlX3JlZ2J1ZiAtIGRlcmVnaXN0ZXIgYW5kIGZyZWUgcmVnaXN0ZXJlZCBidWZmZXIKKyAqIEBpYTogY29udHJvbGxpbmcgcnBjcmRtYV9pYQorICogQHJiOiByZWdidWYgdG8gYmUgZGVyZWdpc3RlcmVkIGFuZCBmcmVlZAorICovCit2b2lkCitycGNyZG1hX2ZyZWVfcmVnYnVmKHN0cnVjdCBycGNyZG1hX2lhICppYSwgc3RydWN0IHJwY3JkbWFfcmVnYnVmICpyYikKK3sKKwlpZiAocmIpIHsKKwkJcnBjcmRtYV9kZXJlZ2lzdGVyX2ludGVybmFsKGlhLCByYi0+cmdfbXIsICZyYi0+cmdfaW92KTsKKwkJa2ZyZWUocmIpOworCX0KK30KKwogLyoKICAqIFdyYXBwZXJzIGZvciBjaHVuayByZWdpc3RyYXRpb24sIHNoYXJlZCBieSByZWFkL3dyaXRlIGNodW5rIGNvZGUuCiAgKi8KQEAgLTE3OTksNyArMTg5NSw3IEBACiAJCQlzdHJ1Y3QgcnBjcmRtYV94cHJ0ICpyX3hwcnQpCiB7CiAJc3RydWN0IHJwY3JkbWFfbXJfc2VnICpzZWcxID0gc2VnOwotCXN0cnVjdCBycGNyZG1hX213ICptdyA9IHNlZzEtPm1yX2NodW5rLnJsX213OworCXN0cnVjdCBycGNyZG1hX213ICptdyA9IHNlZzEtPnJsX213OwogCXN0cnVjdCBycGNyZG1hX2ZybXIgKmZybXIgPSAmbXctPnIuZnJtcjsKIAlzdHJ1Y3QgaWJfbXIgKm1yID0gZnJtci0+ZnJfbXI7CiAJc3RydWN0IGliX3NlbmRfd3IgZmFzdHJlZ193ciwgKmJhZF93cjsKQEAgLTE4ODgsMTIgKzE5ODQsMTIgQEAKIAlzdHJ1Y3QgaWJfc2VuZF93ciBpbnZhbGlkYXRlX3dyLCAqYmFkX3dyOwogCWludCByYzsKIAotCXNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZybXIuZnJfc3RhdGUgPSBGUk1SX0lTX0lOVkFMSUQ7CisJc2VnMS0+cmxfbXctPnIuZnJtci5mcl9zdGF0ZSA9IEZSTVJfSVNfSU5WQUxJRDsKIAogCW1lbXNldCgmaW52YWxpZGF0ZV93ciwgMCwgc2l6ZW9mIGludmFsaWRhdGVfd3IpOwotCWludmFsaWRhdGVfd3Iud3JfaWQgPSAodW5zaWduZWQgbG9uZykodm9pZCAqKXNlZzEtPm1yX2NodW5rLnJsX213OworCWludmFsaWRhdGVfd3Iud3JfaWQgPSAodW5zaWduZWQgbG9uZykodm9pZCAqKXNlZzEtPnJsX213OwogCWludmFsaWRhdGVfd3Iub3Bjb2RlID0gSUJfV1JfTE9DQUxfSU5WOwotCWludmFsaWRhdGVfd3IuZXguaW52YWxpZGF0ZV9ya2V5ID0gc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZnJtci5mcl9tci0+cmtleTsKKwlpbnZhbGlkYXRlX3dyLmV4LmludmFsaWRhdGVfcmtleSA9IHNlZzEtPnJsX213LT5yLmZybXIuZnJfbXItPnJrZXk7CiAJREVDUl9DUUNPVU5UKCZyX3hwcnQtPnJ4X2VwKTsKIAogCXJlYWRfbG9jaygmaWEtPnJpX3FwbG9jayk7CkBAIC0xOTAzLDcgKzE5OTksNyBAQAogCXJlYWRfdW5sb2NrKCZpYS0+cmlfcXBsb2NrKTsKIAlpZiAocmMpIHsKIAkJLyogRm9yY2UgcnBjcmRtYV9idWZmZXJfZ2V0KCkgdG8gcmV0cnkgKi8KLQkJc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZnJtci5mcl9zdGF0ZSA9IEZSTVJfSVNfU1RBTEU7CisJCXNlZzEtPnJsX213LT5yLmZybXIuZnJfc3RhdGUgPSBGUk1SX0lTX1NUQUxFOwogCQlkcHJpbnRrKCJSUEM6ICAgICAgICVzOiBmYWlsZWQgaWJfcG9zdF9zZW5kIGZvciBpbnZhbGlkYXRlLCIKIAkJCSIgc3RhdHVzICVpXG4iLCBfX2Z1bmNfXywgcmMpOwogCX0KQEAgLTE5MzUsOCArMjAzMSw3IEBACiAJCSAgICBvZmZzZXRfaW5fcGFnZSgoc2VnLTEpLT5tcl9vZmZzZXQgKyAoc2VnLTEpLT5tcl9sZW4pKQogCQkJYnJlYWs7CiAJfQotCXJjID0gaWJfbWFwX3BoeXNfZm1yKHNlZzEtPm1yX2NodW5rLnJsX213LT5yLmZtciwKLQkJCQlwaHlzYWRkcnMsIGksIHNlZzEtPm1yX2RtYSk7CisJcmMgPSBpYl9tYXBfcGh5c19mbXIoc2VnMS0+cmxfbXctPnIuZm1yLCBwaHlzYWRkcnMsIGksIHNlZzEtPm1yX2RtYSk7CiAJaWYgKHJjKSB7CiAJCWRwcmludGsoIlJQQzogICAgICAgJXM6IGZhaWxlZCBpYl9tYXBfcGh5c19mbXIgIgogCQkJIiV1QDB4JWxseCslaSAoJWQpLi4uIHN0YXR1cyAlaVxuIiwgX19mdW5jX18sCkBAIC0xOTQ1LDcgKzIwNDAsNyBAQAogCQl3aGlsZSAoaS0tKQogCQkJcnBjcmRtYV91bm1hcF9vbmUoaWEsIC0tc2VnKTsKIAl9IGVsc2UgewotCQlzZWcxLT5tcl9ya2V5ID0gc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZm1yLT5ya2V5OworCQlzZWcxLT5tcl9ya2V5ID0gc2VnMS0+cmxfbXctPnIuZm1yLT5ya2V5OwogCQlzZWcxLT5tcl9iYXNlID0gc2VnMS0+bXJfZG1hICsgcGFnZW9mZjsKIAkJc2VnMS0+bXJfbnNlZ3MgPSBpOwogCQlzZWcxLT5tcl9sZW4gPSBsZW47CkBAIC0xOTYyLDcgKzIwNTcsNyBAQAogCUxJU1RfSEVBRChsKTsKIAlpbnQgcmM7CiAKLQlsaXN0X2FkZCgmc2VnMS0+bXJfY2h1bmsucmxfbXctPnIuZm1yLT5saXN0LCAmbCk7CisJbGlzdF9hZGQoJnNlZzEtPnJsX213LT5yLmZtci0+bGlzdCwgJmwpOwogCXJjID0gaWJfdW5tYXBfZm1yKCZsKTsKIAlyZWFkX2xvY2soJmlhLT5yaV9xcGxvY2spOwogCXdoaWxlIChzZWcxLT5tcl9uc2Vncy0tKQpAQCAtMjEwNCwxMSArMjE5OSwxMyBAQAogCiAJcmVjdl93ci5uZXh0ID0gTlVMTDsKIAlyZWN2X3dyLndyX2lkID0gKHU2NCkgKHVuc2lnbmVkIGxvbmcpIHJlcDsKLQlyZWN2X3dyLnNnX2xpc3QgPSAmcmVwLT5ycl9pb3Y7CisJcmVjdl93ci5zZ19saXN0ID0gJnJlcC0+cnJfcmRtYWJ1Zi0+cmdfaW92OwogCXJlY3Zfd3IubnVtX3NnZSA9IDE7CiAKIAlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShpYS0+cmlfaWQtPmRldmljZSwKLQkJcmVwLT5ycl9pb3YuYWRkciwgcmVwLT5ycl9pb3YubGVuZ3RoLCBETUFfQklESVJFQ1RJT05BTCk7CisJCQkJICAgcmRtYWJfYWRkcihyZXAtPnJyX3JkbWFidWYpLAorCQkJCSAgIHJkbWFiX2xlbmd0aChyZXAtPnJyX3JkbWFidWYpLAorCQkJCSAgIERNQV9CSURJUkVDVElPTkFMKTsKIAogCXJjID0gaWJfcG9zdF9yZWN2KGlhLT5yaV9pZC0+cXAsICZyZWN2X3dyLCAmcmVjdl93cl9mYWlsKTsKIApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0cmRtYS94cHJ0X3JkbWEuaCBiL25ldC9zdW5ycGMveHBydHJkbWEveHBydF9yZG1hLmgKaW5kZXggYjc5OTA0MS4uZDFiNzAzOSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0cmRtYS94cHJ0X3JkbWEuaAorKysgYi9uZXQvc3VucnBjL3hwcnRyZG1hL3hwcnRfcmRtYS5oCkBAIC03MCw2ICs3MCw5IEBACiAJaW50CQkJcmlfYXN5bmNfcmM7CiAJZW51bSBycGNyZG1hX21lbXJlZwlyaV9tZW1yZWdfc3RyYXRlZ3k7CiAJdW5zaWduZWQgaW50CQlyaV9tYXhfZnJtcl9kZXB0aDsKKwlzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIJcmlfZGV2YXR0cjsKKwlzdHJ1Y3QgaWJfcXBfYXR0cglyaV9xcF9hdHRyOworCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIJcmlfcXBfaW5pdF9hdHRyOwogfTsKIAogLyoKQEAgLTgzLDEzICs4Niw5IEBACiAJYXRvbWljX3QJCXJlcF9jcWNvdW50OwogCWludAkJCXJlcF9jcWluaXQ7CiAJaW50CQkJcmVwX2Nvbm5lY3RlZDsKLQlzdHJ1Y3QgcnBjcmRtYV9pYQkqcmVwX2lhOwogCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIJcmVwX2F0dHI7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgCXJlcF9jb25uZWN0X3dhaXQ7Ci0Jc3RydWN0IGliX3NnZQkJcmVwX3BhZDsJLyogaG9sZHMgemVyb2VkIHBhZCAqLwotCXN0cnVjdCBpYl9tcgkJKnJlcF9wYWRfbXI7CS8qIGhvbGRzIHplcm9lZCBwYWQgKi8KLQl2b2lkCQkJKCpyZXBfZnVuYykoc3RydWN0IHJwY3JkbWFfZXAgKik7Ci0Jc3RydWN0IHJwY194cHJ0CQkqcmVwX3hwcnQ7CS8qIGZvciByZXBfZnVuYyAqLworCXN0cnVjdCBycGNyZG1hX3JlZ2J1ZgkqcmVwX3BhZGJ1ZjsKIAlzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtCXJlcF9yZW1vdGVfY21hOwogCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlCXJlcF9yZW1vdGVfYWRkcjsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrCXJlcF9jb25uZWN0X3dvcmtlcjsKQEAgLTEwNiw2ICsxMDUsNDQgQEAKICNkZWZpbmUgSU5JVF9DUUNPVU5UKGVwKSBhdG9taWNfc2V0KCYoZXApLT5yZXBfY3Fjb3VudCwgKGVwKS0+cmVwX2NxaW5pdCkKICNkZWZpbmUgREVDUl9DUUNPVU5UKGVwKSBhdG9taWNfc3ViX3JldHVybigxLCAmKGVwKS0+cmVwX2NxY291bnQpCiAKKy8qIFJlZ2lzdGVyZWQgYnVmZmVyIC0tIHJlZ2lzdGVyZWQga21hbGxvYydkIG1lbW9yeSBmb3IgUkRNQSBTRU5EL1JFQ1YKKyAqCisgKiBUaGUgYmVsb3cgc3RydWN0dXJlIGFwcGVhcnMgYXQgdGhlIGZyb250IG9mIGEgbGFyZ2UgcmVnaW9uIG9mIGttYWxsb2MnZAorICogbWVtb3J5LCB3aGljaCBhbHdheXMgc3RhcnRzIG9uIGEgZ29vZCBhbGlnbm1lbnQgYm91bmRhcnkuCisgKi8KKworc3RydWN0IHJwY3JkbWFfcmVnYnVmIHsKKwlzaXplX3QJCQlyZ19zaXplOworCXN0cnVjdCBycGNyZG1hX3JlcQkqcmdfb3duZXI7CisJc3RydWN0IGliX21yCQkqcmdfbXI7CisJc3RydWN0IGliX3NnZQkJcmdfaW92OworCV9fYmUzMgkJCXJnX2Jhc2VbMF0gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMjU2KSkpOworfTsKKworc3RhdGljIGlubGluZSB1NjQKK3JkbWFiX2FkZHIoc3RydWN0IHJwY3JkbWFfcmVnYnVmICpyYikKK3sKKwlyZXR1cm4gcmItPnJnX2lvdi5hZGRyOworfQorCitzdGF0aWMgaW5saW5lIHUzMgorcmRtYWJfbGVuZ3RoKHN0cnVjdCBycGNyZG1hX3JlZ2J1ZiAqcmIpCit7CisJcmV0dXJuIHJiLT5yZ19pb3YubGVuZ3RoOworfQorCitzdGF0aWMgaW5saW5lIHUzMgorcmRtYWJfbGtleShzdHJ1Y3QgcnBjcmRtYV9yZWdidWYgKnJiKQoreworCXJldHVybiByYi0+cmdfaW92LmxrZXk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJwY3JkbWFfbXNnICoKK3JkbWFiX3RvX21zZyhzdHJ1Y3QgcnBjcmRtYV9yZWdidWYgKnJiKQoreworCXJldHVybiAoc3RydWN0IHJwY3JkbWFfbXNnICopcmItPnJnX2Jhc2U7Cit9CisKIGVudW0gcnBjcmRtYV9jaHVua3R5cGUgewogCXJwY3JkbWFfbm9jaCA9IDAsCiAJcnBjcmRtYV9yZWFkY2gsCkBAIC0xMzQsMjIgKzE3MSwxNiBAQAogLyogdGVtcG9yYXJ5IHN0YXRpYyBzY2F0dGVyL2dhdGhlciBtYXggKi8KICNkZWZpbmUgUlBDUkRNQV9NQVhfREFUQV9TRUdTCSg2NCkJLyogbWF4IHNjYXR0ZXIvZ2F0aGVyICovCiAjZGVmaW5lIFJQQ1JETUFfTUFYX1NFR1MgCShSUENSRE1BX01BWF9EQVRBX1NFR1MgKyAyKSAvKiBoZWFkK3RhaWwgPSAyICovCi0jZGVmaW5lIE1BWF9SUENSRE1BSERSCShcCi0JLyogbWF4IHN1cHBvcnRlZCBSUEMvUkRNQSBoZWFkZXIgKi8gXAotCXNpemVvZihzdHJ1Y3QgcnBjcmRtYV9tc2cpICsgKDIgKiBzaXplb2YodTMyKSkgKyBcCi0JKHNpemVvZihzdHJ1Y3QgcnBjcmRtYV9yZWFkX2NodW5rKSAqIFJQQ1JETUFfTUFYX1NFR1MpICsgc2l6ZW9mKHUzMikpCiAKIHN0cnVjdCBycGNyZG1hX2J1ZmZlcjsKIAogc3RydWN0IHJwY3JkbWFfcmVwIHsKLQl1bnNpZ25lZCBpbnQJcnJfbGVuOwkJLyogYWN0dWFsIHJlY2VpdmVkIHJlcGx5IGxlbmd0aCAqLwotCXN0cnVjdCBycGNyZG1hX2J1ZmZlciAqcnJfYnVmZmVyOyAvKiBob21lIGJhc2UgZm9yIHRoaXMgc3RydWN0dXJlICovCi0Jc3RydWN0IHJwY194cHJ0CSpycl94cHJ0OwkvKiBuZWVkZWQgZm9yIHJlcXVlc3QvcmVwbHkgbWF0Y2hpbmcgKi8KLQl2b2lkICgqcnJfZnVuYykoc3RydWN0IHJwY3JkbWFfcmVwICopOy8qIGNhbGxlZCBieSB0YXNrbGV0IGluIHNvZnRpbnQgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIHJyX2xpc3Q7CS8qIHRhc2tsZXQgbGlzdCAqLwotCXN0cnVjdCBpYl9zZ2UJcnJfaW92OwkJLyogZm9yIHBvc3RpbmcgKi8KLQlzdHJ1Y3QgaWJfbXIJKnJyX2hhbmRsZTsJLyogaGFuZGxlIGZvciBtZW0gaW4gcnJfaW92ICovCi0JY2hhcglycl9iYXNlW01BWF9SUENSRE1BSERSXTsgLyogbWluaW1hbCBpbmxpbmUgcmVjZWl2ZSBidWZmZXIgKi8KKwl1bnNpZ25lZCBpbnQJCXJyX2xlbjsKKwlzdHJ1Y3QgcnBjcmRtYV9idWZmZXIJKnJyX2J1ZmZlcjsKKwlzdHJ1Y3QgcnBjX3hwcnQJCSpycl94cHJ0OworCXZvaWQJCQkoKnJyX2Z1bmMpKHN0cnVjdCBycGNyZG1hX3JlcCAqKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCXJyX2xpc3Q7CisJc3RydWN0IHJwY3JkbWFfcmVnYnVmCSpycl9yZG1hYnVmOwogfTsKIAogLyoKQEAgLTIxMSwxMCArMjQyLDcgQEAKICAqLwogCiBzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgewkJLyogY2h1bmsgZGVzY3JpcHRvcnMgKi8KLQl1bmlvbiB7CQkJCS8qIGNodW5rIG1lbW9yeSBoYW5kbGVzICovCi0JCXN0cnVjdCBpYl9tcgkqcmxfbXI7CQkvKiBpZiByZWdpc3RlcmVkIGRpcmVjdGx5ICovCi0JCXN0cnVjdCBycGNyZG1hX213ICpybF9tdzsJLyogaWYgcmVnaXN0ZXJlZCBmcm9tIHJlZ2lvbiAqLwotCX0gbXJfY2h1bms7CisJc3RydWN0IHJwY3JkbWFfbXcgKnJsX213OwkvKiByZWdpc3RlcmVkIE1SICovCiAJdTY0CQltcl9iYXNlOwkvKiByZWdpc3RyYXRpb24gcmVzdWx0ICovCiAJdTMyCQltcl9ya2V5OwkvKiByZWdpc3RyYXRpb24gcmVzdWx0ICovCiAJdTMyCQltcl9sZW47CQkvKiBsZW5ndGggb2YgY2h1bmsgb3Igc2VnbWVudCAqLwpAQCAtMjI3LDIyICsyNTUsMjcgQEAKIH07CiAKIHN0cnVjdCBycGNyZG1hX3JlcSB7Ci0Jc2l6ZV90IAkJcmxfc2l6ZTsJLyogYWN0dWFsIGxlbmd0aCBvZiBidWZmZXIgKi8KIAl1bnNpZ25lZCBpbnQJcmxfbmlvdnM7CS8qIDAsIDIgb3IgNCAqLwogCXVuc2lnbmVkIGludAlybF9uY2h1bmtzOwkvKiBub24temVybyBpZiBjaHVua3MgKi8KIAl1bnNpZ25lZCBpbnQJcmxfY29ubmVjdF9jb29raWU7CS8qIHJldHJ5IGRldGVjdGlvbiAqLwogCWVudW0gcnBjcmRtYV9jaHVua3R5cGUJcmxfcnR5cGUsIHJsX3d0eXBlOwogCXN0cnVjdCBycGNyZG1hX2J1ZmZlciAqcmxfYnVmZmVyOyAvKiBob21lIGJhc2UgZm9yIHRoaXMgc3RydWN0dXJlICovCiAJc3RydWN0IHJwY3JkbWFfcmVwCSpybF9yZXBseTsvKiBob2xkZXIgZm9yIHJlcGx5IGJ1ZmZlciAqLwotCXN0cnVjdCBycGNyZG1hX21yX3NlZyBybF9zZWdtZW50c1tSUENSRE1BX01BWF9TRUdTXTsvKiBjaHVuayBzZWdtZW50cyAqLwogCXN0cnVjdCBpYl9zZ2UJcmxfc2VuZF9pb3ZbNF07CS8qIGZvciBhY3RpdmUgcmVxdWVzdHMgKi8KLQlzdHJ1Y3QgaWJfc2dlCXJsX2lvdjsJCS8qIGZvciBwb3N0aW5nICovCi0Jc3RydWN0IGliX21yCSpybF9oYW5kbGU7CS8qIGhhbmRsZSBmb3IgbWVtIGluIHJsX2lvdiAqLwotCWNoYXIJCXJsX2Jhc2VbTUFYX1JQQ1JETUFIRFJdOyAvKiBzdGFydCBvZiBhY3R1YWwgYnVmZmVyICovCi0JX191MzIgCQlybF94ZHJfYnVmWzBdOwkvKiBzdGFydCBvZiByZXR1cm5lZCBycGMgcnFfYnVmZmVyICovCisJc3RydWN0IHJwY3JkbWFfcmVnYnVmICpybF9yZG1hYnVmOworCXN0cnVjdCBycGNyZG1hX3JlZ2J1ZiAqcmxfc2VuZGJ1ZjsKKwlzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgcmxfc2VnbWVudHNbUlBDUkRNQV9NQVhfU0VHU107CiB9OwotI2RlZmluZSBycGNyX3RvX3JkbWFyKHIpIFwKLQljb250YWluZXJfb2YoKHIpLT5ycV9idWZmZXIsIHN0cnVjdCBycGNyZG1hX3JlcSwgcmxfeGRyX2J1ZlswXSkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcnBjcmRtYV9yZXEgKgorcnBjcl90b19yZG1hcihzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3QpCit7CisJdm9pZCAqYnVmZmVyID0gcnFzdC0+cnFfYnVmZmVyOworCXN0cnVjdCBycGNyZG1hX3JlZ2J1ZiAqcmI7CisKKwlyYiA9IGNvbnRhaW5lcl9vZihidWZmZXIsIHN0cnVjdCBycGNyZG1hX3JlZ2J1ZiwgcmdfYmFzZSk7CisJcmV0dXJuIHJiLT5yZ19vd25lcjsKK30KIAogLyoKICAqIHN0cnVjdCBycGNyZG1hX2J1ZmZlciAtLSBob2xkcyBsaXN0L3F1ZXVlIG9mIHByZS1yZWdpc3RlcmVkIG1lbW9yeSBmb3IKQEAgLTI1Miw3ICsyODUsNiBAQAogICovCiBzdHJ1Y3QgcnBjcmRtYV9idWZmZXIgewogCXNwaW5sb2NrX3QJcmJfbG9jazsJLyogcHJvdGVjdHMgaW5kZXhlcyAqLwotCWF0b21pY190CXJiX2NyZWRpdHM7CS8qIG1vc3QgcmVjZW50IHNlcnZlciBjcmVkaXRzICovCiAJaW50CQlyYl9tYXhfcmVxdWVzdHM7LyogY2xpZW50IG1heCByZXF1ZXN0cyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgcmJfbXdzOwkvKiBvcHRpb25hbCBtZW1vcnkgd2luZG93cy9mbXJzL2ZybXJzICovCiAJc3RydWN0IGxpc3RfaGVhZCByYl9hbGw7CkBAIC0zMTgsMTYgKzM1MCwxNiBAQAogICogZHVyaW5nIHVubW91bnQuCiAgKi8KIHN0cnVjdCBycGNyZG1hX3hwcnQgewotCXN0cnVjdCBycGNfeHBydAkJeHBydDsKKwlzdHJ1Y3QgcnBjX3hwcnQJCXJ4X3hwcnQ7CiAJc3RydWN0IHJwY3JkbWFfaWEJcnhfaWE7CiAJc3RydWN0IHJwY3JkbWFfZXAJcnhfZXA7CiAJc3RydWN0IHJwY3JkbWFfYnVmZmVyCXJ4X2J1ZjsKIAlzdHJ1Y3QgcnBjcmRtYV9jcmVhdGVfZGF0YV9pbnRlcm5hbCByeF9kYXRhOwotCXN0cnVjdCBkZWxheWVkX3dvcmsJcmRtYV9jb25uZWN0OworCXN0cnVjdCBkZWxheWVkX3dvcmsJcnhfY29ubmVjdF93b3JrZXI7CiAJc3RydWN0IHJwY3JkbWFfc3RhdHMJcnhfc3RhdHM7CiB9OwogCi0jZGVmaW5lIHJwY3hfdG9fcmRtYXgoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBycGNyZG1hX3hwcnQsIHhwcnQpCisjZGVmaW5lIHJwY3hfdG9fcmRtYXgoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBycGNyZG1hX3hwcnQsIHJ4X3hwcnQpCiAjZGVmaW5lIHJwY3hfdG9fcmRtYWQoeCkgKHJwY3hfdG9fcmRtYXgoeCktPnJ4X2RhdGEpCiAKIC8qIFNldHRpbmcgdGhpcyB0byAwIGVuc3VyZXMgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIGVhcmx5IHNlcnZlcnMuCkBAIC0zNTgsOSArMzkwLDcgQEAKIC8qCiAgKiBCdWZmZXIgY2FsbHMgLSB4cHJ0cmRtYS92ZXJicy5jCiAgKi8KLWludCBycGNyZG1hX2J1ZmZlcl9jcmVhdGUoc3RydWN0IHJwY3JkbWFfYnVmZmVyICosIHN0cnVjdCBycGNyZG1hX2VwICosCi0JCQkJc3RydWN0IHJwY3JkbWFfaWEgKiwKLQkJCQlzdHJ1Y3QgcnBjcmRtYV9jcmVhdGVfZGF0YV9pbnRlcm5hbCAqKTsKK2ludCBycGNyZG1hX2J1ZmZlcl9jcmVhdGUoc3RydWN0IHJwY3JkbWFfeHBydCAqKTsKIHZvaWQgcnBjcmRtYV9idWZmZXJfZGVzdHJveShzdHJ1Y3QgcnBjcmRtYV9idWZmZXIgKik7CiAKIHN0cnVjdCBycGNyZG1hX3JlcSAqcnBjcmRtYV9idWZmZXJfZ2V0KHN0cnVjdCBycGNyZG1hX2J1ZmZlciAqKTsKQEAgLTM2OCwxNiArMzk4LDE2IEBACiB2b2lkIHJwY3JkbWFfcmVjdl9idWZmZXJfZ2V0KHN0cnVjdCBycGNyZG1hX3JlcSAqKTsKIHZvaWQgcnBjcmRtYV9yZWN2X2J1ZmZlcl9wdXQoc3RydWN0IHJwY3JkbWFfcmVwICopOwogCi1pbnQgcnBjcmRtYV9yZWdpc3Rlcl9pbnRlcm5hbChzdHJ1Y3QgcnBjcmRtYV9pYSAqLCB2b2lkICosIGludCwKLQkJCQlzdHJ1Y3QgaWJfbXIgKiosIHN0cnVjdCBpYl9zZ2UgKik7Ci1pbnQgcnBjcmRtYV9kZXJlZ2lzdGVyX2ludGVybmFsKHN0cnVjdCBycGNyZG1hX2lhICosCi0JCQkJc3RydWN0IGliX21yICosIHN0cnVjdCBpYl9zZ2UgKik7Ci0KIGludCBycGNyZG1hX3JlZ2lzdGVyX2V4dGVybmFsKHN0cnVjdCBycGNyZG1hX21yX3NlZyAqLAogCQkJCWludCwgaW50LCBzdHJ1Y3QgcnBjcmRtYV94cHJ0ICopOwogaW50IHJwY3JkbWFfZGVyZWdpc3Rlcl9leHRlcm5hbChzdHJ1Y3QgcnBjcmRtYV9tcl9zZWcgKiwKIAkJCQlzdHJ1Y3QgcnBjcmRtYV94cHJ0ICopOwogCitzdHJ1Y3QgcnBjcmRtYV9yZWdidWYgKnJwY3JkbWFfYWxsb2NfcmVnYnVmKHN0cnVjdCBycGNyZG1hX2lhICosCisJCQkJCSAgICBzaXplX3QsIGdmcF90KTsKK3ZvaWQgcnBjcmRtYV9mcmVlX3JlZ2J1ZihzdHJ1Y3QgcnBjcmRtYV9pYSAqLAorCQkJIHN0cnVjdCBycGNyZG1hX3JlZ2J1ZiAqKTsKKwogLyoKICAqIFJQQy9SRE1BIGNvbm5lY3Rpb24gbWFuYWdlbWVudCBjYWxscyAtIHhwcnRyZG1hL3JwY19yZG1hLmMKICAqLwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0c29jay5jIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCmluZGV4IDg3Y2U3ZTguLjY2ODkxZTMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHNvY2suYworKysgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKQEAgLTYzLDYgKzYzLDggQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeHBydF9taW5fcmVzdnBvcnQgPSBSUENfREVGX01JTl9SRVNWUE9SVDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeHBydF9tYXhfcmVzdnBvcnQgPSBSUENfREVGX01BWF9SRVNWUE9SVDsKIAorI2lmIElTX0VOQUJMRUQoQ09ORklHX1NVTlJQQ19ERUJVRykKKwogI2RlZmluZSBYU19UQ1BfTElOR0VSX1RPCSgxNVUgKiBIWikKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeHNfdGNwX2Zpbl90aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSBYU19UQ1BfTElOR0VSX1RPOwogCkBAIC03NSw4ICs3Nyw2IEBACiAgKiBzb21lb25lIGVsc2UncyBmaWxlIG5hbWVzIQogICovCiAKLSNpZiBJU19FTkFCTEVEKENPTkZJR19TVU5SUENfREVCVUcpCi0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWluX3Nsb3RfdGFibGVfc2l6ZSA9IFJQQ19NSU5fU0xPVF9UQUJMRTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X3Nsb3RfdGFibGVfc2l6ZSA9IFJQQ19NQVhfU0xPVF9UQUJMRTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X3RjcF9zbG90X3RhYmxlX2xpbWl0ID0gUlBDX01BWF9TTE9UX1RBQkxFX0xJTUlUOwpAQCAtNjI3LDcgKzYyNyw3IEBACiAgKiBAeHBydDogdHJhbnNwb3J0CiAgKgogICogSW5pdGlhdGVzIGEgZ3JhY2VmdWwgc2h1dGRvd24gb2YgdGhlIFRDUCBzb2NrZXQgYnkgY2FsbGluZyB0aGUKLSAqIGVxdWl2YWxlbnQgb2Ygc2h1dGRvd24oU0hVVF9XUik7CisgKiBlcXVpdmFsZW50IG9mIHNodXRkb3duKFNIVVRfUkRXUik7CiAgKi8KIHN0YXRpYyB2b2lkIHhzX3RjcF9zaHV0ZG93bihzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCiB7CkBAIC02MzUsNyArNjM1LDcgQEAKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gdHJhbnNwb3J0LT5zb2NrOwogCiAJaWYgKHNvY2sgIT0gTlVMTCkgewotCQlrZXJuZWxfc29ja19zaHV0ZG93bihzb2NrLCBTSFVUX1dSKTsKKwkJa2VybmVsX3NvY2tfc2h1dGRvd24oc29jaywgU0hVVF9SRFdSKTsKIAkJdHJhY2VfcnBjX3NvY2tldF9zaHV0ZG93bih4cHJ0LCBzb2NrKTsKIAl9CiB9CkBAIC03MTgsOSArNzE4LDkgQEAKIAkJZHByaW50aygiUlBDOiAgICAgICBzZW5kbXNnIHJldHVybmVkIHVucmVjb2duaXplZCBlcnJvciAlZFxuIiwKIAkJCS1zdGF0dXMpOwogCWNhc2UgLUVDT05OUkVTRVQ6Ci0JCXhzX3RjcF9zaHV0ZG93bih4cHJ0KTsKIAljYXNlIC1FQ09OTlJFRlVTRUQ6CiAJY2FzZSAtRU5PVENPTk46CisJY2FzZSAtRUFERFJJTlVTRToKIAljYXNlIC1FUElQRToKIAkJY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnRyYW5zcG9ydC0+c29jay0+ZmxhZ3MpOwogCX0KQEAgLTc3Myw2ICs3NzMsMjEgQEAKIAlzay0+c2tfZXJyb3JfcmVwb3J0ID0gdHJhbnNwb3J0LT5vbGRfZXJyb3JfcmVwb3J0OwogfQogCitzdGF0aWMgdm9pZCB4c19zb2NrX3Jlc2V0X2Nvbm5lY3Rpb25fZmxhZ3Moc3RydWN0IHJwY194cHJ0ICp4cHJ0KQoreworCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOworCWNsZWFyX2JpdChYUFJUX0NMT1NFX1dBSVQsICZ4cHJ0LT5zdGF0ZSk7CisJY2xlYXJfYml0KFhQUlRfQ0xPU0lORywgJnhwcnQtPnN0YXRlKTsKKwlzbXBfbWJfX2FmdGVyX2F0b21pYygpOworfQorCitzdGF0aWMgdm9pZCB4c19zb2NrX21hcmtfY2xvc2VkKHN0cnVjdCBycGNfeHBydCAqeHBydCkKK3sKKwl4c19zb2NrX3Jlc2V0X2Nvbm5lY3Rpb25fZmxhZ3MoeHBydCk7CisJLyogTWFyayB0cmFuc3BvcnQgYXMgY2xvc2VkIGFuZCB3YWtlIHVwIGFsbCBwZW5kaW5nIHRhc2tzICovCisJeHBydF9kaXNjb25uZWN0X2RvbmUoeHBydCk7Cit9CisKIC8qKgogICogeHNfZXJyb3JfcmVwb3J0IC0gY2FsbGJhY2sgdG8gaGFuZGxlIFRDUCBzb2NrZXQgc3RhdGUgZXJyb3JzCiAgKiBAc2s6IHNvY2tldApAQCAtNzkyLDExICs4MDcsMTIgQEAKIAllcnIgPSAtc2stPnNrX2VycjsKIAlpZiAoZXJyID09IDApCiAJCWdvdG8gb3V0OworCS8qIElzIHRoaXMgYSByZXNldCBldmVudD8gKi8KKwlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9DTE9TRSkKKwkJeHNfc29ja19tYXJrX2Nsb3NlZCh4cHJ0KTsKIAlkcHJpbnRrKCJSUEM6ICAgICAgIHhzX2Vycm9yX3JlcG9ydCBjbGllbnQgJXAsIGVycm9yPSVkLi4uXG4iLAogCQkJeHBydCwgLWVycik7CiAJdHJhY2VfcnBjX3NvY2tldF9lcnJvcih4cHJ0LCBzay0+c2tfc29ja2V0LCBlcnIpOwotCWlmICh0ZXN0X2JpdChYUFJUX0NPTk5FQ1RJT05fUkVVU0UsICZ4cHJ0LT5zdGF0ZSkpCi0JCWdvdG8gb3V0OwogCXhwcnRfd2FrZV9wZW5kaW5nX3Rhc2tzKHhwcnQsIGVycik7CiAgb3V0OgogCXJlYWRfdW5sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7CkBAIC04MDYsMTIgKzgyMiwxMSBAQAogewogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0cmFuc3BvcnQtPnNvY2s7CiAJc3RydWN0IHNvY2sgKnNrID0gdHJhbnNwb3J0LT5pbmV0OworCXN0cnVjdCBycGNfeHBydCAqeHBydCA9ICZ0cmFuc3BvcnQtPnhwcnQ7CiAKIAlpZiAoc2sgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JdHJhbnNwb3J0LT5zcmNwb3J0ID0gMDsKLQogCXdyaXRlX2xvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsKIAl0cmFuc3BvcnQtPmluZXQgPSBOVUxMOwogCXRyYW5zcG9ydC0+c29jayA9IE5VTEw7CkBAIC04MjAsOCArODM1LDkgQEAKIAogCXhzX3Jlc3RvcmVfb2xkX2NhbGxiYWNrcyh0cmFuc3BvcnQsIHNrKTsKIAl3cml0ZV91bmxvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsKKwl4c19zb2NrX3Jlc2V0X2Nvbm5lY3Rpb25fZmxhZ3MoeHBydCk7CiAKLQl0cmFjZV9ycGNfc29ja2V0X2Nsb3NlKCZ0cmFuc3BvcnQtPnhwcnQsIHNvY2spOworCXRyYWNlX3JwY19zb2NrZXRfY2xvc2UoeHBydCwgc29jayk7CiAJc29ja19yZWxlYXNlKHNvY2spOwogfQogCkBAIC04NDEsMjcgKzg1NywxMiBAQAogCiAJZHByaW50aygiUlBDOiAgICAgICB4c19jbG9zZSB4cHJ0ICVwXG4iLCB4cHJ0KTsKIAotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmdHJhbnNwb3J0LT5jb25uZWN0X3dvcmtlcik7Ci0KIAl4c19yZXNldF90cmFuc3BvcnQodHJhbnNwb3J0KTsKIAl4cHJ0LT5yZWVzdGFibGlzaF90aW1lb3V0ID0gMDsKIAotCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwotCWNsZWFyX2JpdChYUFJUX0NPTk5FQ1RJT05fQUJPUlQsICZ4cHJ0LT5zdGF0ZSk7Ci0JY2xlYXJfYml0KFhQUlRfQ0xPU0VfV0FJVCwgJnhwcnQtPnN0YXRlKTsKLQljbGVhcl9iaXQoWFBSVF9DTE9TSU5HLCAmeHBydC0+c3RhdGUpOwotCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJeHBydF9kaXNjb25uZWN0X2RvbmUoeHBydCk7CiB9CiAKLXN0YXRpYyB2b2lkIHhzX3RjcF9jbG9zZShzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCi17Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChYUFJUX0NPTk5FQ1RJT05fQ0xPU0UsICZ4cHJ0LT5zdGF0ZSkpCi0JCXhzX2Nsb3NlKHhwcnQpOwotCWVsc2UKLQkJeHNfdGNwX3NodXRkb3duKHhwcnQpOwotfQotCiBzdGF0aWMgdm9pZCB4c194cHJ0X2ZyZWUoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQogewogCXhzX2ZyZWVfcGVlcl9hZGRyZXNzZXMoeHBydCk7CkBAIC0xMDMyLDcgKzEwMzMsNiBAQAogICovCiBzdGF0aWMgdm9pZCB4c190Y3BfZm9yY2VfY2xvc2Uoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQogewotCXNldF9iaXQoWFBSVF9DT05ORUNUSU9OX0NMT1NFLCAmeHBydC0+c3RhdGUpOwogCXhwcnRfZm9yY2VfZGlzY29ubmVjdCh4cHJ0KTsKIH0KIApAQCAtMTQyNSw1NCArMTQyNSw2IEBACiAJcmVhZF91bmxvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsKIH0KIAotLyoKLSAqIERvIHRoZSBlcXVpdmFsZW50IG9mIGxpbmdlci9saW5nZXIyIGhhbmRsaW5nIGZvciBkZWFsaW5nIHdpdGgKLSAqIGJyb2tlbiBzZXJ2ZXJzIHRoYXQgZG9uJ3QgY2xvc2UgdGhlIHNvY2tldCBpbiBhIHRpbWVseQotICogZmFzaGlvbgotICovCi1zdGF0aWMgdm9pZCB4c190Y3Bfc2NoZWR1bGVfbGluZ2VyX3RpbWVvdXQoc3RydWN0IHJwY194cHJ0ICp4cHJ0LAotCQl1bnNpZ25lZCBsb25nIHRpbWVvdXQpCi17Ci0Jc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0OwotCi0JaWYgKHhwcnRfdGVzdF9hbmRfc2V0X2Nvbm5lY3RpbmcoeHBydCkpCi0JCXJldHVybjsKLQlzZXRfYml0KFhQUlRfQ09OTkVDVElPTl9BQk9SVCwgJnhwcnQtPnN0YXRlKTsKLQl0cmFuc3BvcnQgPSBjb250YWluZXJfb2YoeHBydCwgc3RydWN0IHNvY2tfeHBydCwgeHBydCk7Ci0JcXVldWVfZGVsYXllZF93b3JrKHJwY2lvZF93b3JrcXVldWUsICZ0cmFuc3BvcnQtPmNvbm5lY3Rfd29ya2VyLAotCQkJICAgdGltZW91dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHhzX3RjcF9jYW5jZWxfbGluZ2VyX3RpbWVvdXQoc3RydWN0IHJwY194cHJ0ICp4cHJ0KQotewotCXN0cnVjdCBzb2NrX3hwcnQgKnRyYW5zcG9ydDsKLQotCXRyYW5zcG9ydCA9IGNvbnRhaW5lcl9vZih4cHJ0LCBzdHJ1Y3Qgc29ja194cHJ0LCB4cHJ0KTsKLQotCWlmICghdGVzdF9iaXQoWFBSVF9DT05ORUNUSU9OX0FCT1JULCAmeHBydC0+c3RhdGUpIHx8Ci0JICAgICFjYW5jZWxfZGVsYXllZF93b3JrKCZ0cmFuc3BvcnQtPmNvbm5lY3Rfd29ya2VyKSkKLQkJcmV0dXJuOwotCWNsZWFyX2JpdChYUFJUX0NPTk5FQ1RJT05fQUJPUlQsICZ4cHJ0LT5zdGF0ZSk7Ci0JeHBydF9jbGVhcl9jb25uZWN0aW5nKHhwcnQpOwotfQotCi1zdGF0aWMgdm9pZCB4c19zb2NrX3Jlc2V0X2Nvbm5lY3Rpb25fZmxhZ3Moc3RydWN0IHJwY194cHJ0ICp4cHJ0KQotewotCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwotCWNsZWFyX2JpdChYUFJUX0NPTk5FQ1RJT05fQUJPUlQsICZ4cHJ0LT5zdGF0ZSk7Ci0JY2xlYXJfYml0KFhQUlRfQ09OTkVDVElPTl9DTE9TRSwgJnhwcnQtPnN0YXRlKTsKLQljbGVhcl9iaXQoWFBSVF9DTE9TRV9XQUlULCAmeHBydC0+c3RhdGUpOwotCWNsZWFyX2JpdChYUFJUX0NMT1NJTkcsICZ4cHJ0LT5zdGF0ZSk7Ci0Jc21wX21iX19hZnRlcl9hdG9taWMoKTsKLX0KLQotc3RhdGljIHZvaWQgeHNfc29ja19tYXJrX2Nsb3NlZChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpCi17Ci0JeHNfc29ja19yZXNldF9jb25uZWN0aW9uX2ZsYWdzKHhwcnQpOwotCS8qIE1hcmsgdHJhbnNwb3J0IGFzIGNsb3NlZCBhbmQgd2FrZSB1cCBhbGwgcGVuZGluZyB0YXNrcyAqLwotCXhwcnRfZGlzY29ubmVjdF9kb25lKHhwcnQpOwotfQotCiAvKioKICAqIHhzX3RjcF9zdGF0ZV9jaGFuZ2UgLSBjYWxsYmFjayB0byBoYW5kbGUgVENQIHNvY2tldCBzdGF0ZSBjaGFuZ2VzCiAgKiBAc2s6IHNvY2tldCB3aG9zZSBzdGF0ZSBoYXMgY2hhbmdlZApAQCAtMTUyMSw3ICsxNDczLDYgQEAKIAkJY2xlYXJfYml0KFhQUlRfQ09OTkVDVEVELCAmeHBydC0+c3RhdGUpOwogCQljbGVhcl9iaXQoWFBSVF9DTE9TRV9XQUlULCAmeHBydC0+c3RhdGUpOwogCQlzbXBfbWJfX2FmdGVyX2F0b21pYygpOwotCQl4c190Y3Bfc2NoZWR1bGVfbGluZ2VyX3RpbWVvdXQoeHBydCwgeHNfdGNwX2Zpbl90aW1lb3V0KTsKIAkJYnJlYWs7CiAJY2FzZSBUQ1BfQ0xPU0VfV0FJVDoKIAkJLyogVGhlIHNlcnZlciBpbml0aWF0ZWQgYSBzaHV0ZG93biBvZiB0aGUgc29ja2V0ICovCkBAIC0xNTM4LDEzICsxNDg5LDExIEBACiAJCWJyZWFrOwogCWNhc2UgVENQX0xBU1RfQUNLOgogCQlzZXRfYml0KFhQUlRfQ0xPU0lORywgJnhwcnQtPnN0YXRlKTsKLQkJeHNfdGNwX3NjaGVkdWxlX2xpbmdlcl90aW1lb3V0KHhwcnQsIHhzX3RjcF9maW5fdGltZW91dCk7CiAJCXNtcF9tYl9fYmVmb3JlX2F0b21pYygpOwogCQljbGVhcl9iaXQoWFBSVF9DT05ORUNURUQsICZ4cHJ0LT5zdGF0ZSk7CiAJCXNtcF9tYl9fYWZ0ZXJfYXRvbWljKCk7CiAJCWJyZWFrOwogCWNhc2UgVENQX0NMT1NFOgotCQl4c190Y3BfY2FuY2VsX2xpbmdlcl90aW1lb3V0KHhwcnQpOwogCQl4c19zb2NrX21hcmtfY2xvc2VkKHhwcnQpOwogCX0KICBvdXQ6CkBAIC0xNjY3LDYgKzE2MTYsNDAgQEAKIH0KIAogLyoqCisgKiB4c19zZXRfcmV1c2VhZGRyX3BvcnQgLSBzZXQgdGhlIHNvY2tldCdzIHBvcnQgYW5kIGFkZHJlc3MgcmV1c2Ugb3B0aW9ucworICogQHNvY2s6IHNvY2tldAorICoKKyAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGhhcyB0byBiZSBjYWxsZWQgb24gYWxsIHNvY2tldHMgdGhhdCBzaGFyZSB0aGUKKyAqIHNhbWUgcG9ydCwgYW5kIGl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZSBiaW5kaW5nLgorICovCitzdGF0aWMgdm9pZCB4c19zb2NrX3NldF9yZXVzZXBvcnQoc3RydWN0IHNvY2tldCAqc29jaykKK3sKKwlpbnQgb3B0ID0gMTsKKworCWtlcm5lbF9zZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFUE9SVCwKKwkJCShjaGFyICopJm9wdCwgc2l6ZW9mKG9wdCkpOworfQorCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgeHNfc29ja19nZXRwb3J0KHN0cnVjdCBzb2NrZXQgKnNvY2spCit7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYnVmOworCWludCBidWZsZW47CisJdW5zaWduZWQgc2hvcnQgcG9ydCA9IDA7CisKKwlpZiAoa2VybmVsX2dldHNvY2tuYW1lKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYnVmLCAmYnVmbGVuKSA8IDApCisJCWdvdG8gb3V0OworCXN3aXRjaCAoYnVmLnNzX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDY6CisJCXBvcnQgPSBudG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmYnVmKS0+c2luNl9wb3J0KTsKKwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUOgorCQlwb3J0ID0gbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmYnVmKS0+c2luX3BvcnQpOworCX0KK291dDoKKwlyZXR1cm4gcG9ydDsKK30KKworLyoqCiAgKiB4c19zZXRfcG9ydCAtIHJlc2V0IHRoZSBwb3J0IG51bWJlciBpbiB0aGUgcmVtb3RlIGVuZHBvaW50IGFkZHJlc3MKICAqIEB4cHJ0OiBnZW5lcmljIHRyYW5zcG9ydAogICogQHBvcnQ6IG5ldyBwb3J0IG51bWJlcgpAQCAtMTY4MCw2ICsxNjYzLDEyIEBACiAJeHNfdXBkYXRlX3BlZXJfcG9ydCh4cHJ0KTsKIH0KIAorc3RhdGljIHZvaWQgeHNfc2V0X3NyY3BvcnQoc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrKQoreworCWlmICh0cmFuc3BvcnQtPnNyY3BvcnQgPT0gMCkKKwkJdHJhbnNwb3J0LT5zcmNwb3J0ID0geHNfc29ja19nZXRwb3J0KHNvY2spOworfQorCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgeHNfZ2V0X3NyY3BvcnQoc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0KQogewogCXVuc2lnbmVkIHNob3J0IHBvcnQgPSB0cmFuc3BvcnQtPnNyY3BvcnQ7CkBAIC0xODMzLDcgKzE4MjIsOCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNvY2tldCAqeHNfY3JlYXRlX3NvY2soc3RydWN0IHJwY194cHJ0ICp4cHJ0LAotCQlzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQsIGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpCisJCXN0cnVjdCBzb2NrX3hwcnQgKnRyYW5zcG9ydCwgaW50IGZhbWlseSwgaW50IHR5cGUsCisJCWludCBwcm90b2NvbCwgYm9vbCByZXVzZXBvcnQpCiB7CiAJc3RydWN0IHNvY2tldCAqc29jazsKIAlpbnQgZXJyOwpAQCAtMTg0Niw2ICsxODM2LDkgQEAKIAl9CiAJeHNfcmVjbGFzc2lmeV9zb2NrZXQoZmFtaWx5LCBzb2NrKTsKIAorCWlmIChyZXVzZXBvcnQpCisJCXhzX3NvY2tfc2V0X3JldXNlcG9ydChzb2NrKTsKKwogCWVyciA9IHhzX2JpbmQodHJhbnNwb3J0LCBzb2NrKTsKIAlpZiAoZXJyKSB7CiAJCXNvY2tfcmVsZWFzZShzb2NrKTsKQEAgLTE5MDMsNyArMTg5Niw2IEBACiAJc3RydWN0IHNvY2tldCAqc29jazsKIAlpbnQgc3RhdHVzID0gLUVJTzsKIAotCWNsZWFyX2JpdChYUFJUX0NPTk5FQ1RJT05fQUJPUlQsICZ4cHJ0LT5zdGF0ZSk7CiAJc3RhdHVzID0gX19zb2NrX2NyZWF0ZSh4cHJ0LT54cHJ0X25ldCwgQUZfTE9DQUwsCiAJCQkJCVNPQ0tfU1RSRUFNLCAwLCAmc29jaywgMSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTIwNDQsMTAgKzIwMzYsOSBAQAogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSB0cmFuc3BvcnQtPnNvY2s7CiAJaW50IHN0YXR1cyA9IC1FSU87CiAKLQkvKiBTdGFydCBieSByZXNldHRpbmcgYW55IGV4aXN0aW5nIHN0YXRlICovCi0JeHNfcmVzZXRfdHJhbnNwb3J0KHRyYW5zcG9ydCk7CiAJc29jayA9IHhzX2NyZWF0ZV9zb2NrKHhwcnQsIHRyYW5zcG9ydCwKLQkJCXhzX2FkZHIoeHBydCktPnNhX2ZhbWlseSwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApOworCQkJeHNfYWRkcih4cHJ0KS0+c2FfZmFtaWx5LCBTT0NLX0RHUkFNLAorCQkJSVBQUk9UT19VRFAsIGZhbHNlKTsKIAlpZiAoSVNfRVJSKHNvY2spKQogCQlnb3RvIG91dDsKIApAQCAtMjA2MSw2MSArMjA1MiwxMSBAQAogCXRyYWNlX3JwY19zb2NrZXRfY29ubmVjdCh4cHJ0LCBzb2NrLCAwKTsKIAlzdGF0dXMgPSAwOwogb3V0OgorCXhwcnRfdW5sb2NrX2Nvbm5lY3QoeHBydCwgdHJhbnNwb3J0KTsKIAl4cHJ0X2NsZWFyX2Nvbm5lY3RpbmcoeHBydCk7CiAJeHBydF93YWtlX3BlbmRpbmdfdGFza3MoeHBydCwgc3RhdHVzKTsKIH0KIAotLyoKLSAqIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIHBvcnQgbnVtYmVyIHNvIHRoZSByZXBseSBjYWNoZSBvbiB0aGUgc2VydmVyIGNhbgotICogZmluZCBvdXIgY2FjaGVkIFJQQyByZXBsaWVzIHdoZW4gd2UgZ2V0IGFyb3VuZCB0byByZWNvbm5lY3RpbmcuCi0gKi8KLXN0YXRpYyB2b2lkIHhzX2Fib3J0X2Nvbm5lY3Rpb24oc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0KQotewotCWludCByZXN1bHQ7Ci0Jc3RydWN0IHNvY2thZGRyIGFueTsKLQotCWRwcmludGsoIlJQQzogICAgICAgZGlzY29ubmVjdGluZyB4cHJ0ICVwIHRvIHJldXNlIHBvcnRcbiIsIHRyYW5zcG9ydCk7Ci0KLQkvKgotCSAqIERpc2Nvbm5lY3QgdGhlIHRyYW5zcG9ydCBzb2NrZXQgYnkgZG9pbmcgYSBjb25uZWN0IG9wZXJhdGlvbgotCSAqIHdpdGggQUZfVU5TUEVDLiAgVGhpcyBzaG91bGQgcmV0dXJuIGltbWVkaWF0ZWx5Li4uCi0JICovCi0JbWVtc2V0KCZhbnksIDAsIHNpemVvZihhbnkpKTsKLQlhbnkuc2FfZmFtaWx5ID0gQUZfVU5TUEVDOwotCXJlc3VsdCA9IGtlcm5lbF9jb25uZWN0KHRyYW5zcG9ydC0+c29jaywgJmFueSwgc2l6ZW9mKGFueSksIDApOwotCXRyYWNlX3JwY19zb2NrZXRfcmVzZXRfY29ubmVjdGlvbigmdHJhbnNwb3J0LT54cHJ0LAotCQkJdHJhbnNwb3J0LT5zb2NrLCByZXN1bHQpOwotCWlmICghcmVzdWx0KQotCQl4c19zb2NrX3Jlc2V0X2Nvbm5lY3Rpb25fZmxhZ3MoJnRyYW5zcG9ydC0+eHBydCk7Ci0JZHByaW50aygiUlBDOiAgICAgICBBRl9VTlNQRUMgY29ubmVjdCByZXR1cm4gY29kZSAlZFxuIiwgcmVzdWx0KTsKLX0KLQotc3RhdGljIHZvaWQgeHNfdGNwX3JldXNlX2Nvbm5lY3Rpb24oc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0KQotewotCXVuc2lnbmVkIGludCBzdGF0ZSA9IHRyYW5zcG9ydC0+aW5ldC0+c2tfc3RhdGU7Ci0KLQlpZiAoc3RhdGUgPT0gVENQX0NMT1NFICYmIHRyYW5zcG9ydC0+c29jay0+c3RhdGUgPT0gU1NfVU5DT05ORUNURUQpIHsKLQkJLyogd2UgZG9uJ3QgbmVlZCB0byBhYm9ydCB0aGUgY29ubmVjdGlvbiBpZiB0aGUgc29ja2V0Ci0JCSAqIGhhc24ndCB1bmRlcmdvbmUgYSBzaHV0ZG93bgotCQkgKi8KLQkJaWYgKHRyYW5zcG9ydC0+aW5ldC0+c2tfc2h1dGRvd24gPT0gMCkKLQkJCXJldHVybjsKLQkJZHByaW50aygiUlBDOiAgICAgICAlczogVENQX0NMT1NFZCBhbmQgc2tfc2h1dGRvd24gc2V0IHRvICVkXG4iLAotCQkJCV9fZnVuY19fLCB0cmFuc3BvcnQtPmluZXQtPnNrX3NodXRkb3duKTsKLQl9Ci0JaWYgKCgxIDw8IHN0YXRlKSAmIChUQ1BGX0VTVEFCTElTSEVEfFRDUEZfU1lOX1NFTlQpKSB7Ci0JCS8qIHdlIGRvbid0IG5lZWQgdG8gYWJvcnQgdGhlIGNvbm5lY3Rpb24gaWYgdGhlIHNvY2tldAotCQkgKiBoYXNuJ3QgdW5kZXJnb25lIGEgc2h1dGRvd24KLQkJICovCi0JCWlmICh0cmFuc3BvcnQtPmluZXQtPnNrX3NodXRkb3duID09IDApCi0JCQlyZXR1cm47Ci0JCWRwcmludGsoIlJQQzogICAgICAgJXM6IEVTVEFCTElTSEVEL1NZTl9TRU5UICIKLQkJCQkic2tfc2h1dGRvd24gc2V0IHRvICVkXG4iLAotCQkJCV9fZnVuY19fLCB0cmFuc3BvcnQtPmluZXQtPnNrX3NodXRkb3duKTsKLQl9Ci0JeHNfYWJvcnRfY29ubmVjdGlvbih0cmFuc3BvcnQpOwotfQotCiBzdGF0aWMgaW50IHhzX3RjcF9maW5pc2hfY29ubmVjdGluZyhzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IHNvY2tfeHBydCAqdHJhbnNwb3J0ID0gY29udGFpbmVyX29mKHhwcnQsIHN0cnVjdCBzb2NrX3hwcnQsIHhwcnQpOwpAQCAtMjE0OSw5ICsyMDkwLDcgQEAKIAkJc2stPnNrX2FsbG9jYXRpb24gPSBHRlBfQVRPTUlDOwogCiAJCS8qIHNvY2tldCBvcHRpb25zICovCi0JCXNrLT5za191c2VybG9ja3MgfD0gU09DS19CSU5EUE9SVF9MT0NLOwogCQlzb2NrX3Jlc2V0X2ZsYWcoc2ssIFNPQ0tfTElOR0VSKTsKLQkJdGNwX3NrKHNrKS0+bGluZ2VyMiA9IDA7CiAJCXRjcF9zayhzayktPm5vbmFnbGUgfD0gVENQX05BR0xFX09GRjsKIAogCQl4cHJ0X2NsZWFyX2Nvbm5lY3RlZCh4cHJ0KTsKQEAgLTIxNzQsNiArMjExMyw3IEBACiAJcmV0ID0ga2VybmVsX2Nvbm5lY3Qoc29jaywgeHNfYWRkcih4cHJ0KSwgeHBydC0+YWRkcmxlbiwgT19OT05CTE9DSyk7CiAJc3dpdGNoIChyZXQpIHsKIAljYXNlIDA6CisJCXhzX3NldF9zcmNwb3J0KHRyYW5zcG9ydCwgc29jayk7CiAJY2FzZSAtRUlOUFJPR1JFU1M6CiAJCS8qIFNZTl9TRU5UISAqLwogCQlpZiAoeHBydC0+cmVlc3RhYmxpc2hfdGltZW91dCA8IFhTX1RDUF9JTklUX1JFRVNUX1RPKQpAQCAtMjIwMCwyNSArMjE0MCwxMyBAQAogCWludCBzdGF0dXMgPSAtRUlPOwogCiAJaWYgKCFzb2NrKSB7Ci0JCWNsZWFyX2JpdChYUFJUX0NPTk5FQ1RJT05fQUJPUlQsICZ4cHJ0LT5zdGF0ZSk7CiAJCXNvY2sgPSB4c19jcmVhdGVfc29jayh4cHJ0LCB0cmFuc3BvcnQsCi0JCQkJeHNfYWRkcih4cHJ0KS0+c2FfZmFtaWx5LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApOworCQkJCXhzX2FkZHIoeHBydCktPnNhX2ZhbWlseSwgU09DS19TVFJFQU0sCisJCQkJSVBQUk9UT19UQ1AsIHRydWUpOwogCQlpZiAoSVNfRVJSKHNvY2spKSB7CiAJCQlzdGF0dXMgPSBQVFJfRVJSKHNvY2spOwogCQkJZ290byBvdXQ7CiAJCX0KLQl9IGVsc2UgewotCQlpbnQgYWJvcnRfYW5kX2V4aXQ7Ci0KLQkJYWJvcnRfYW5kX2V4aXQgPSB0ZXN0X2FuZF9jbGVhcl9iaXQoWFBSVF9DT05ORUNUSU9OX0FCT1JULAotCQkJCSZ4cHJ0LT5zdGF0ZSk7Ci0JCS8qICJjbG9zZSIgdGhlIHNvY2tldCwgcHJlc2VydmluZyB0aGUgbG9jYWwgcG9ydCAqLwotCQlzZXRfYml0KFhQUlRfQ09OTkVDVElPTl9SRVVTRSwgJnhwcnQtPnN0YXRlKTsKLQkJeHNfdGNwX3JldXNlX2Nvbm5lY3Rpb24odHJhbnNwb3J0KTsKLQkJY2xlYXJfYml0KFhQUlRfQ09OTkVDVElPTl9SRVVTRSwgJnhwcnQtPnN0YXRlKTsKLQotCQlpZiAoYWJvcnRfYW5kX2V4aXQpCi0JCQlnb3RvIG91dF9lYWdhaW47CiAJfQogCiAJZHByaW50aygiUlBDOiAgICAgICB3b3JrZXIgY29ubmVjdGluZyB4cHJ0ICVwIHZpYSAlcyB0byAiCkBAIC0yMjQ1LDYgKzIxNzMsNyBAQAogCWNhc2UgMDoKIAljYXNlIC1FSU5QUk9HUkVTUzoKIAljYXNlIC1FQUxSRUFEWToKKwkJeHBydF91bmxvY2tfY29ubmVjdCh4cHJ0LCB0cmFuc3BvcnQpOwogCQl4cHJ0X2NsZWFyX2Nvbm5lY3RpbmcoeHBydCk7CiAJCXJldHVybjsKIAljYXNlIC1FSU5WQUw6CkBAIC0yMjU0LDEzICsyMTgzLDE1IEBACiAJY2FzZSAtRUNPTk5SRUZVU0VEOgogCWNhc2UgLUVDT05OUkVTRVQ6CiAJY2FzZSAtRU5FVFVOUkVBQ0g6CisJY2FzZSAtRUFERFJJTlVTRToKIAljYXNlIC1FTk9CVUZTOgogCQkvKiByZXRyeSB3aXRoIGV4aXN0aW5nIHNvY2tldCwgYWZ0ZXIgYSBkZWxheSAqLworCQl4c190Y3BfZm9yY2VfY2xvc2UoeHBydCk7CiAJCWdvdG8gb3V0OwogCX0KLW91dF9lYWdhaW46CiAJc3RhdHVzID0gLUVBR0FJTjsKIG91dDoKKwl4cHJ0X3VubG9ja19jb25uZWN0KHhwcnQsIHRyYW5zcG9ydCk7CiAJeHBydF9jbGVhcl9jb25uZWN0aW5nKHhwcnQpOwogCXhwcnRfd2FrZV9wZW5kaW5nX3Rhc2tzKHhwcnQsIHN0YXR1cyk7CiB9CkBAIC0yMjgzLDYgKzIyMTQsMTEgQEAKIHsKIAlzdHJ1Y3Qgc29ja194cHJ0ICp0cmFuc3BvcnQgPSBjb250YWluZXJfb2YoeHBydCwgc3RydWN0IHNvY2tfeHBydCwgeHBydCk7CiAKKwlXQVJOX09OX09OQ0UoIXhwcnRfbG9ja19jb25uZWN0KHhwcnQsIHRhc2ssIHRyYW5zcG9ydCkpOworCisJLyogU3RhcnQgYnkgcmVzZXR0aW5nIGFueSBleGlzdGluZyBzdGF0ZSAqLworCXhzX3Jlc2V0X3RyYW5zcG9ydCh0cmFuc3BvcnQpOworCiAJaWYgKHRyYW5zcG9ydC0+c29jayAhPSBOVUxMICYmICFSUENfSVNfU09GVENPTk4odGFzaykpIHsKIAkJZHByaW50aygiUlBDOiAgICAgICB4c19jb25uZWN0IGRlbGF5ZWQgeHBydCAlcCBmb3IgJWx1ICIKIAkJCQkic2Vjb25kc1xuIiwKQEAgLTI1NTksNyArMjQ5NSw3IEBACiAJLmJ1Zl9mcmVlCQk9IHJwY19mcmVlLAogCS5zZW5kX3JlcXVlc3QJCT0geHNfdGNwX3NlbmRfcmVxdWVzdCwKIAkuc2V0X3JldHJhbnNfdGltZW91dAk9IHhwcnRfc2V0X3JldHJhbnNfdGltZW91dF9kZWYsCi0JLmNsb3NlCQkJPSB4c190Y3BfY2xvc2UsCisJLmNsb3NlCQkJPSB4c190Y3Bfc2h1dGRvd24sCiAJLmRlc3Ryb3kJCT0geHNfZGVzdHJveSwKIAkucHJpbnRfc3RhdHMJCT0geHNfdGNwX3ByaW50X3N0YXRzLAogfTsKZGlmZiAtLWdpdCBhL25ldC9zd2l0Y2hkZXYvc3dpdGNoZGV2LmMgYi9uZXQvc3dpdGNoZGV2L3N3aXRjaGRldi5jCmluZGV4IGQxNjJiMjEuLjhjMWU1NTggMTAwNjQ0Ci0tLSBhL25ldC9zd2l0Y2hkZXYvc3dpdGNoZGV2LmMKKysrIGIvbmV0L3N3aXRjaGRldi9zd2l0Y2hkZXYuYwpAQCAtMTEsNiArMTEsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxuZXQvc3dpdGNoZGV2Lmg+CiAKQEAgLTUwLDMgKzUyLDE3NiBAQAogCXJldHVybiBvcHMtPm5kb19zd2l0Y2hfcG9ydF9zdHBfdXBkYXRlKGRldiwgc3RhdGUpOwogfQogRVhQT1JUX1NZTUJPTChuZXRkZXZfc3dpdGNoX3BvcnRfc3RwX3VwZGF0ZSk7CisKK3N0YXRpYyBERUZJTkVfTVVURVgobmV0ZGV2X3N3aXRjaF9tdXRleCk7CitzdGF0aWMgUkFXX05PVElGSUVSX0hFQUQobmV0ZGV2X3N3aXRjaF9ub3RpZl9jaGFpbik7CisKKy8qKgorICoJcmVnaXN0ZXJfbmV0ZGV2X3N3aXRjaF9ub3RpZmllciAtIFJlZ2lzdGVyIG5vZmlmaWVyCisgKglAbmI6IG5vdGlmaWVyX2Jsb2NrCisgKgorICoJUmVnaXN0ZXIgc3dpdGNoIGRldmljZSBub3RpZmllci4gVGhpcyBzaG91bGQgYmUgdXNlZCBieSBjb2RlCisgKgl3aGljaCBuZWVkcyB0byBtb25pdG9yIGV2ZW50cyBoYXBwZW5pbmcgaW4gcGFydGljdWxhciBkZXZpY2UuCisgKglSZXR1cm4gdmFsdWVzIGFyZSBzYW1lIGFzIGZvciBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoKS4KKyAqLworaW50IHJlZ2lzdGVyX25ldGRldl9zd2l0Y2hfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmbmV0ZGV2X3N3aXRjaF9tdXRleCk7CisJZXJyID0gcmF3X25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZuZXRkZXZfc3dpdGNoX25vdGlmX2NoYWluLCBuYik7CisJbXV0ZXhfdW5sb2NrKCZuZXRkZXZfc3dpdGNoX211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9uZXRkZXZfc3dpdGNoX25vdGlmaWVyKTsKKworLyoqCisgKgl1bnJlZ2lzdGVyX25ldGRldl9zd2l0Y2hfbm90aWZpZXIgLSBVbnJlZ2lzdGVyIG5vZmlmaWVyCisgKglAbmI6IG5vdGlmaWVyX2Jsb2NrCisgKgorICoJVW5yZWdpc3RlciBzd2l0Y2ggZGV2aWNlIG5vdGlmaWVyLgorICoJUmV0dXJuIHZhbHVlcyBhcmUgc2FtZSBhcyBmb3IgYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoKS4KKyAqLworaW50IHVucmVnaXN0ZXJfbmV0ZGV2X3N3aXRjaF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCWludCBlcnI7CisKKwltdXRleF9sb2NrKCZuZXRkZXZfc3dpdGNoX211dGV4KTsKKwllcnIgPSByYXdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmbmV0ZGV2X3N3aXRjaF9ub3RpZl9jaGFpbiwgbmIpOworCW11dGV4X3VubG9jaygmbmV0ZGV2X3N3aXRjaF9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9uZXRkZXZfc3dpdGNoX25vdGlmaWVyKTsKKworLyoqCisgKgljYWxsX25ldGRldl9zd2l0Y2hfbm90aWZpZXJzIC0gQ2FsbCBub2ZpZmllcnMKKyAqCUB2YWw6IHZhbHVlIHBhc3NlZCB1bm1vZGlmaWVkIHRvIG5vdGlmaWVyIGZ1bmN0aW9uCisgKglAZGV2OiBwb3J0IGRldmljZQorICoJQGluZm86IG5vdGlmaWVyIGluZm9ybWF0aW9uIGRhdGEKKyAqCisgKglDYWxsIGFsbCBuZXR3b3JrIG5vdGlmaWVyIGJsb2Nrcy4gVGhpcyBzaG91bGQgYmUgY2FsbGVkIGJ5IGRyaXZlcgorICoJd2hlbiBpdCBuZWVkcyB0byBwcm9wYWdhdGUgaGFyZHdhcmUgZXZlbnQuCisgKglSZXR1cm4gdmFsdWVzIGFyZSBzYW1lIGFzIGZvciBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigpLgorICovCitpbnQgY2FsbF9uZXRkZXZfc3dpdGNoX25vdGlmaWVycyh1bnNpZ25lZCBsb25nIHZhbCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgc3RydWN0IG5ldGRldl9zd2l0Y2hfbm90aWZpZXJfaW5mbyAqaW5mbykKK3sKKwlpbnQgZXJyOworCisJaW5mby0+ZGV2ID0gZGV2OworCW11dGV4X2xvY2soJm5ldGRldl9zd2l0Y2hfbXV0ZXgpOworCWVyciA9IHJhd19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRkZXZfc3dpdGNoX25vdGlmX2NoYWluLCB2YWwsIGluZm8pOworCW11dGV4X3VubG9jaygmbmV0ZGV2X3N3aXRjaF9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0woY2FsbF9uZXRkZXZfc3dpdGNoX25vdGlmaWVycyk7CisKKy8qKgorICoJbmV0ZGV2X3N3aXRjaF9wb3J0X2JyaWRnZV9zZXRsaW5rIC0gTm90aWZ5IHN3aXRjaCBkZXZpY2UgcG9ydCBvZiBicmlkZ2UKKyAqCXBvcnQgYXR0cmlidXRlcworICoKKyAqCUBkZXY6IHBvcnQgZGV2aWNlCisgKglAbmxoOiBuZXRsaW5rIG1zZyB3aXRoIGJyaWRnZSBwb3J0IGF0dHJpYnV0ZXMKKyAqCUBmbGFnczogYnJpZGdlIHNldGxpbmsgZmxhZ3MKKyAqCisgKglOb3RpZnkgc3dpdGNoIGRldmljZSBwb3J0IG9mIGJyaWRnZSBwb3J0IGF0dHJpYnV0ZXMKKyAqLworaW50IG5ldGRldl9zd2l0Y2hfcG9ydF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB1MTYgZmxhZ3MpCit7CisJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CisKKwlpZiAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19TV0lUQ0hfT0ZGTE9BRCkpCisJCXJldHVybiAwOworCisJaWYgKCFvcHMtPm5kb19icmlkZ2Vfc2V0bGluaykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIG9wcy0+bmRvX2JyaWRnZV9zZXRsaW5rKGRldiwgbmxoLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9zd2l0Y2hfcG9ydF9icmlkZ2Vfc2V0bGluayk7CisKKy8qKgorICoJbmV0ZGV2X3N3aXRjaF9wb3J0X2JyaWRnZV9kZWxsaW5rIC0gTm90aWZ5IHN3aXRjaCBkZXZpY2UgcG9ydCBvZiBicmlkZ2UKKyAqCXBvcnQgYXR0cmlidXRlIGRlbGV0ZQorICoKKyAqCUBkZXY6IHBvcnQgZGV2aWNlCisgKglAbmxoOiBuZXRsaW5rIG1zZyB3aXRoIGJyaWRnZSBwb3J0IGF0dHJpYnV0ZXMKKyAqCUBmbGFnczogYnJpZGdlIHNldGxpbmsgZmxhZ3MKKyAqCisgKglOb3RpZnkgc3dpdGNoIGRldmljZSBwb3J0IG9mIGJyaWRnZSBwb3J0IGF0dHJpYnV0ZSBkZWxldGUKKyAqLworaW50IG5ldGRldl9zd2l0Y2hfcG9ydF9icmlkZ2VfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoLCB1MTYgZmxhZ3MpCit7CisJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzICpvcHMgPSBkZXYtPm5ldGRldl9vcHM7CisKKwlpZiAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19TV0lUQ0hfT0ZGTE9BRCkpCisJCXJldHVybiAwOworCisJaWYgKCFvcHMtPm5kb19icmlkZ2VfZGVsbGluaykKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJcmV0dXJuIG9wcy0+bmRvX2JyaWRnZV9kZWxsaW5rKGRldiwgbmxoLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKG5ldGRldl9zd2l0Y2hfcG9ydF9icmlkZ2VfZGVsbGluayk7CisKKy8qKgorICoJbmRvX2RmbHRfbmV0ZGV2X3N3aXRjaF9wb3J0X2JyaWRnZV9zZXRsaW5rIC0gZGVmYXVsdCBuZG8gYnJpZGdlIHNldGxpbmsKKyAqCQkJCQkJICAgICBvcCBmb3IgbWFzdGVyIGRldmljZXMKKyAqCisgKglAZGV2OiBwb3J0IGRldmljZQorICoJQG5saDogbmV0bGluayBtc2cgd2l0aCBicmlkZ2UgcG9ydCBhdHRyaWJ1dGVzCisgKglAZmxhZ3M6IGJyaWRnZSBzZXRsaW5rIGZsYWdzCisgKgorICoJTm90aWZ5IG1hc3RlciBkZXZpY2Ugc2xhdmVzIG9mIGJyaWRnZSBwb3J0IGF0dHJpYnV0ZXMKKyAqLworaW50IG5kb19kZmx0X25ldGRldl9zd2l0Y2hfcG9ydF9icmlkZ2Vfc2V0bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgICAgc3RydWN0IG5sbXNnaGRyICpubGgsIHUxNiBmbGFncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbG93ZXJfZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7CisJaW50IHJldCA9IDAsIGVyciA9IDA7CisKKwlpZiAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9IV19TV0lUQ0hfT0ZGTE9BRCkpCisJCXJldHVybiByZXQ7CisKKwluZXRkZXZfZm9yX2VhY2hfbG93ZXJfZGV2KGRldiwgbG93ZXJfZGV2LCBpdGVyKSB7CisJCWVyciA9IG5ldGRldl9zd2l0Y2hfcG9ydF9icmlkZ2Vfc2V0bGluayhsb3dlcl9kZXYsIG5saCwgZmxhZ3MpOworCQlpZiAoZXJyICYmIGVyciAhPSAtRU9QTk9UU1VQUCkKKwkJCXJldCA9IGVycjsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChuZG9fZGZsdF9uZXRkZXZfc3dpdGNoX3BvcnRfYnJpZGdlX3NldGxpbmspOworCisvKioKKyAqCW5kb19kZmx0X25ldGRldl9zd2l0Y2hfcG9ydF9icmlkZ2VfZGVsbGluayAtIGRlZmF1bHQgbmRvIGJyaWRnZSBkZWxsaW5rCisgKgkJCQkJCSAgICAgb3AgZm9yIG1hc3RlciBkZXZpY2VzCisgKgorICoJQGRldjogcG9ydCBkZXZpY2UKKyAqCUBubGg6IG5ldGxpbmsgbXNnIHdpdGggYnJpZGdlIHBvcnQgYXR0cmlidXRlcworICoJQGZsYWdzOiBicmlkZ2UgZGVsbGluayBmbGFncworICoKKyAqCU5vdGlmeSBtYXN0ZXIgZGV2aWNlIHNsYXZlcyBvZiBicmlkZ2UgcG9ydCBhdHRyaWJ1dGUgZGVsZXRlcworICovCitpbnQgbmRvX2RmbHRfbmV0ZGV2X3N3aXRjaF9wb3J0X2JyaWRnZV9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdTE2IGZsYWdzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpsb3dlcl9kZXY7CisJc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKKwlpbnQgcmV0ID0gMCwgZXJyID0gMDsKKworCWlmICghKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0hXX1NXSVRDSF9PRkZMT0FEKSkKKwkJcmV0dXJuIHJldDsKKworCW5ldGRldl9mb3JfZWFjaF9sb3dlcl9kZXYoZGV2LCBsb3dlcl9kZXYsIGl0ZXIpIHsKKwkJZXJyID0gbmV0ZGV2X3N3aXRjaF9wb3J0X2JyaWRnZV9kZWxsaW5rKGxvd2VyX2RldiwgbmxoLCBmbGFncyk7CisJCWlmIChlcnIgJiYgZXJyICE9IC1FT1BOT1RTVVBQKQorCQkJcmV0ID0gZXJyOworCX0KKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG5kb19kZmx0X25ldGRldl9zd2l0Y2hfcG9ydF9icmlkZ2VfZGVsbGluayk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9LY29uZmlnIGIvbmV0L3RpcGMvS2NvbmZpZwppbmRleCBjODkwODQ4Zi4uOTFjOGE4ZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvS2NvbmZpZworKysgYi9uZXQvdGlwYy9LY29uZmlnCkBAIC0yMCwxOCArMjAsNiBAQAogCiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKLWNvbmZpZyBUSVBDX1BPUlRTCi0JaW50ICJNYXhpbXVtIG51bWJlciBvZiBwb3J0cyBpbiBhIG5vZGUiCi0JZGVwZW5kcyBvbiBUSVBDCi0JcmFuZ2UgMTI3IDY1NTM1Ci0JZGVmYXVsdCAiODE5MSIKLQloZWxwCi0JICBTcGVjaWZpZXMgaG93IG1hbnkgcG9ydHMgY2FuIGJlIHN1cHBvcnRlZCBieSBhIG5vZGUuCi0JICBDYW4gcmFuZ2UgZnJvbSAxMjcgdG8gNjU1MzUgcG9ydHM7IGRlZmF1bHQgaXMgODE5MS4KLQotCSAgU2V0dGluZyB0aGlzIHRvIGEgc21hbGxlciB2YWx1ZSBzYXZlcyBzb21lIG1lbW9yeSwKLQkgIHNldHRpbmcgaXQgdG8gaGlnaGVyIGFsbG93cyBmb3IgbW9yZSBwb3J0cy4KLQogY29uZmlnIFRJUENfTUVESUFfSUIKIAlib29sICJJbmZpbmlCYW5kIG1lZGlhIHR5cGUgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFRJUEMgJiYgSU5GSU5JQkFORF9JUE9JQgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvTWFrZWZpbGUgYi9uZXQvdGlwYy9NYWtlZmlsZQppbmRleCAzMzNlNDU5Li41OTliMWE1IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9NYWtlZmlsZQorKysgYi9uZXQvdGlwYy9NYWtlZmlsZQpAQCAtNCwxMSArNCwxMSBAQAogCiBvYmotJChDT05GSUdfVElQQykgOj0gdGlwYy5vCiAKLXRpcGMteQkrPSBhZGRyLm8gYmNhc3QubyBiZWFyZXIubyBjb25maWcubyBcCit0aXBjLXkJKz0gYWRkci5vIGJjYXN0Lm8gYmVhcmVyLm8gXAogCSAgIGNvcmUubyBsaW5rLm8gZGlzY292ZXIubyBtc2cubyAgXAogCSAgIG5hbWVfZGlzdHIubyAgc3Vic2NyLm8gbmFtZV90YWJsZS5vIG5ldC5vICBcCi0JICAgbmV0bGluay5vIG5vZGUubyBzb2NrZXQubyBsb2cubyBldGhfbWVkaWEubyBcCi0JICAgc2VydmVyLm8KKwkgICBuZXRsaW5rLm8gbmV0bGlua19jb21wYXQubyBub2RlLm8gc29ja2V0Lm8gZXRoX21lZGlhLm8gXAorCSAgIHNlcnZlci5vIHNvY2tldC5vCiAKIHRpcGMtJChDT05GSUdfVElQQ19NRURJQV9JQikJKz0gaWJfbWVkaWEubwogdGlwYy0kKENPTkZJR19TWVNDVEwpCQkrPSBzeXNjdGwubwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvYWRkci5jIGIvbmV0L3RpcGMvYWRkci5jCmluZGV4IDM1N2I3NGIuLjQ4ZmQzYjUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2FkZHIuYworKysgYi9uZXQvdGlwYy9hZGRyLmMKQEAgLTM0LDggKzM0LDUxIEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaW5jbHVkZSAiY29yZS5oIgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgImFkZHIuaCIKKyNpbmNsdWRlICJjb3JlLmgiCisKKy8qKgorICogaW5fb3duX2NsdXN0ZXIgLSB0ZXN0IGZvciBjbHVzdGVyIGluY2x1c2lvbjsgPDAuMC4wPiBhbHdheXMgbWF0Y2hlcworICovCitpbnQgaW5fb3duX2NsdXN0ZXIoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKK3sKKwlyZXR1cm4gaW5fb3duX2NsdXN0ZXJfZXhhY3QobmV0LCBhZGRyKSB8fCAhYWRkcjsKK30KKworaW50IGluX293bl9jbHVzdGVyX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpCit7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOworCisJcmV0dXJuICEoKGFkZHIgXiB0bi0+b3duX2FkZHIpID4+IDEyKTsKK30KKworLyoqCisgKiBpbl9vd25fbm9kZSAtIHRlc3QgZm9yIG5vZGUgaW5jbHVzaW9uOyA8MC4wLjA+IGFsd2F5cyBtYXRjaGVzCisgKi8KK2ludCBpbl9vd25fbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKQoreworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKKworCXJldHVybiAoYWRkciA9PSB0bi0+b3duX2FkZHIpIHx8ICFhZGRyOworfQorCisvKioKKyAqIGFkZHJfZG9tYWluIC0gY29udmVydCAyLWJpdCBzY29wZSB2YWx1ZSB0byBlcXVpdmFsZW50IG1lc3NhZ2UgbG9va3VwIGRvbWFpbgorICoKKyAqIE5lZWRlZCB3aGVuIGFkZHJlc3Mgb2YgYSBuYW1lZCBtZXNzYWdlIG11c3QgYmUgbG9va2VkIHVwIGEgc2Vjb25kIHRpbWUKKyAqIGFmdGVyIGEgbmV0d29yayBob3AuCisgKi8KK3UzMiBhZGRyX2RvbWFpbihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBzYykKK3sKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CisKKwlpZiAobGlrZWx5KHNjID09IFRJUENfTk9ERV9TQ09QRSkpCisJCXJldHVybiB0bi0+b3duX2FkZHI7CisJaWYgKHNjID09IFRJUENfQ0xVU1RFUl9TQ09QRSkKKwkJcmV0dXJuIHRpcGNfY2x1c3Rlcl9tYXNrKHRuLT5vd25fYWRkcik7CisJcmV0dXJuIHRpcGNfem9uZV9tYXNrKHRuLT5vd25fYWRkcik7Cit9CiAKIC8qKgogICogdGlwY19hZGRyX2RvbWFpbl92YWxpZCAtIHZhbGlkYXRlcyBhIG5ldHdvcmsgZG9tYWluIGFkZHJlc3MKZGlmZiAtLWdpdCBhL25ldC90aXBjL2FkZHIuaCBiL25ldC90aXBjL2FkZHIuaAppbmRleCBhNzRhY2Y5Li5jNzAwYzJkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9hZGRyLmgKKysrIGIvbmV0L3RpcGMvYWRkci5oCkBAIC0zNyw3ICszNywxMCBAQAogI2lmbmRlZiBfVElQQ19BRERSX0gKICNkZWZpbmUgX1RJUENfQUREUl9ICiAKLSNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aXBjLmg+CisjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxuZXQvbmV0bnMvZ2VuZXJpYy5oPgogCiAjZGVmaW5lIFRJUENfWk9ORV9NQVNLCQkweGZmMDAwMDAwdQogI2RlZmluZSBUSVBDX0NMVVNURVJfTUFTSwkweGZmZmZmMDAwdQpAQCAtNTIsNDIgKzU1LDEwIEBACiAJcmV0dXJuIGFkZHIgJiBUSVBDX0NMVVNURVJfTUFTSzsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaW5fb3duX2NsdXN0ZXJfZXhhY3QodTMyIGFkZHIpCi17Ci0JcmV0dXJuICEoKGFkZHIgXiB0aXBjX293bl9hZGRyKSA+PiAxMik7Ci19Ci0KLS8qKgotICogaW5fb3duX25vZGUgLSB0ZXN0IGZvciBub2RlIGluY2x1c2lvbjsgPDAuMC4wPiBhbHdheXMgbWF0Y2hlcwotICovCi1zdGF0aWMgaW5saW5lIGludCBpbl9vd25fbm9kZSh1MzIgYWRkcikKLXsKLQlyZXR1cm4gKGFkZHIgPT0gdGlwY19vd25fYWRkcikgfHwgIWFkZHI7Ci19Ci0KLS8qKgotICogaW5fb3duX2NsdXN0ZXIgLSB0ZXN0IGZvciBjbHVzdGVyIGluY2x1c2lvbjsgPDAuMC4wPiBhbHdheXMgbWF0Y2hlcwotICovCi1zdGF0aWMgaW5saW5lIGludCBpbl9vd25fY2x1c3Rlcih1MzIgYWRkcikKLXsKLQlyZXR1cm4gaW5fb3duX2NsdXN0ZXJfZXhhY3QoYWRkcikgfHwgIWFkZHI7Ci19Ci0KLS8qKgotICogYWRkcl9kb21haW4gLSBjb252ZXJ0IDItYml0IHNjb3BlIHZhbHVlIHRvIGVxdWl2YWxlbnQgbWVzc2FnZSBsb29rdXAgZG9tYWluCi0gKgotICogTmVlZGVkIHdoZW4gYWRkcmVzcyBvZiBhIG5hbWVkIG1lc3NhZ2UgbXVzdCBiZSBsb29rZWQgdXAgYSBzZWNvbmQgdGltZQotICogYWZ0ZXIgYSBuZXR3b3JrIGhvcC4KLSAqLwotc3RhdGljIGlubGluZSB1MzIgYWRkcl9kb21haW4odTMyIHNjKQotewotCWlmIChsaWtlbHkoc2MgPT0gVElQQ19OT0RFX1NDT1BFKSkKLQkJcmV0dXJuIHRpcGNfb3duX2FkZHI7Ci0JaWYgKHNjID09IFRJUENfQ0xVU1RFUl9TQ09QRSkKLQkJcmV0dXJuIHRpcGNfY2x1c3Rlcl9tYXNrKHRpcGNfb3duX2FkZHIpOwotCXJldHVybiB0aXBjX3pvbmVfbWFzayh0aXBjX293bl9hZGRyKTsKLX0KLQoraW50IGluX293bl9jbHVzdGVyKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpOworaW50IGluX293bl9jbHVzdGVyX2V4YWN0KHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpOworaW50IGluX293bl9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpOwordTMyIGFkZHJfZG9tYWluKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHNjKTsKIGludCB0aXBjX2FkZHJfZG9tYWluX3ZhbGlkKHUzMik7CiBpbnQgdGlwY19hZGRyX25vZGVfdmFsaWQodTMyIGFkZHIpOwogaW50IHRpcGNfaW5fc2NvcGUodTMyIGRvbWFpbiwgdTMyIGFkZHIpOwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvYmNhc3QuYyBiL25ldC90aXBjL2JjYXN0LmMKaW5kZXggYTllMTc0Zi4uM2U0MTcwNCAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvYmNhc3QuYworKysgYi9uZXQvdGlwYy9iY2FzdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIG5ldC90aXBjL2JjYXN0LmM6IFRJUEMgYnJvYWRjYXN0IGNvZGUKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNiwgMjAxNCwgRXJpY3Nzb24gQUIKKyAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA2LCAyMDE0LTIwMTUsIEVyaWNzc29uIEFCCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIEludGVsIENvcnBvcmF0aW9uLgogICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwLTIwMTEsIFdpbmQgUml2ZXIgU3lzdGVtcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTM1LDc3ICszNSwxNCBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2luY2x1ZGUgImNvcmUuaCIKLSNpbmNsdWRlICJsaW5rLmgiCiAjaW5jbHVkZSAic29ja2V0LmgiCiAjaW5jbHVkZSAibXNnLmgiCiAjaW5jbHVkZSAiYmNhc3QuaCIKICNpbmNsdWRlICJuYW1lX2Rpc3RyLmgiCisjaW5jbHVkZSAiY29yZS5oIgogCiAjZGVmaW5lCU1BWF9QS1RfREVGQVVMVF9NQ0FTVAkxNTAwCS8qIGJjYXN0IGxpbmsgbWF4IHBhY2tldCBzaXplIChmaXhlZCkgKi8KICNkZWZpbmUJQkNMSU5LX1dJTl9ERUZBVUxUCTIwCS8qIGJjYXN0IGxpbmsgd2luZG93IHNpemUgKGRlZmF1bHQpICovCi0jZGVmaW5lCUJDQkVBUkVSCQlNQVhfQkVBUkVSUwotCi0vKioKLSAqIHN0cnVjdCB0aXBjX2JjYmVhcmVyX3BhaXIgLSBhIHBhaXIgb2YgYmVhcmVycyB1c2VkIGJ5IGJyb2FkY2FzdCBsaW5rCi0gKiBAcHJpbWFyeTogcG9pbnRlciB0byBwcmltYXJ5IGJlYXJlcgotICogQHNlY29uZGFyeTogcG9pbnRlciB0byBzZWNvbmRhcnkgYmVhcmVyCi0gKgotICogQmVhcmVycyBtdXN0IGhhdmUgc2FtZSBwcmlvcml0eSBhbmQgc2FtZSBzZXQgb2YgcmVhY2hhYmxlIGRlc3RpbmF0aW9ucwotICogdG8gYmUgcGFpcmVkLgotICovCi0KLXN0cnVjdCB0aXBjX2JjYmVhcmVyX3BhaXIgewotCXN0cnVjdCB0aXBjX2JlYXJlciAqcHJpbWFyeTsKLQlzdHJ1Y3QgdGlwY19iZWFyZXIgKnNlY29uZGFyeTsKLX07Ci0KLS8qKgotICogc3RydWN0IHRpcGNfYmNiZWFyZXIgLSBiZWFyZXIgdXNlZCBieSBicm9hZGNhc3QgbGluawotICogQGJlYXJlcjogKG5vbi1zdGFuZGFyZCkgYnJvYWRjYXN0IGJlYXJlciBzdHJ1Y3R1cmUKLSAqIEBtZWRpYTogKG5vbi1zdGFuZGFyZCkgYnJvYWRjYXN0IG1lZGlhIHN0cnVjdHVyZQotICogQGJwYWlyczogYXJyYXkgb2YgYmVhcmVyIHBhaXJzCi0gKiBAYnBhaXJzX3RlbXA6IHRlbXBvcmFyeSBhcnJheSBvZiBiZWFyZXIgcGFpcnMgdXNlZCBieSB0aXBjX2JjYmVhcmVyX3NvcnQoKQotICogQHJlbWFpbnM6IHRlbXBvcmFyeSBub2RlIG1hcCB1c2VkIGJ5IHRpcGNfYmNiZWFyZXJfc2VuZCgpCi0gKiBAcmVtYWluc19uZXc6IHRlbXBvcmFyeSBub2RlIG1hcCB1c2VkIHRpcGNfYmNiZWFyZXJfc2VuZCgpCi0gKgotICogTm90ZTogVGhlIGZpZWxkcyBsYWJlbGxlZCAidGVtcG9yYXJ5IiBhcmUgaW5jb3Jwb3JhdGVkIGludG8gdGhlIGJlYXJlcgotICogdG8gYXZvaWQgY29uc3VtaW5nIHBvdGVudGlhbGx5IGxpbWl0ZWQgc3RhY2sgc3BhY2UgdGhyb3VnaCB0aGUgdXNlIG9mCi0gKiBsYXJnZSBsb2NhbCB2YXJpYWJsZXMgd2l0aGluIG11bHRpY2FzdCByb3V0aW5lcy4gIENvbmN1cnJlbnQgYWNjZXNzIGlzCi0gKiBwcmV2ZW50ZWQgdGhyb3VnaCB1c2Ugb2YgdGhlIHNwaW5sb2NrICJiY2xpbmtfbG9jayIuCi0gKi8KLXN0cnVjdCB0aXBjX2JjYmVhcmVyIHsKLQlzdHJ1Y3QgdGlwY19iZWFyZXIgYmVhcmVyOwotCXN0cnVjdCB0aXBjX21lZGlhIG1lZGlhOwotCXN0cnVjdCB0aXBjX2JjYmVhcmVyX3BhaXIgYnBhaXJzW01BWF9CRUFSRVJTXTsKLQlzdHJ1Y3QgdGlwY19iY2JlYXJlcl9wYWlyIGJwYWlyc190ZW1wW1RJUENfTUFYX0xJTktfUFJJICsgMV07Ci0Jc3RydWN0IHRpcGNfbm9kZV9tYXAgcmVtYWluczsKLQlzdHJ1Y3QgdGlwY19ub2RlX21hcCByZW1haW5zX25ldzsKLX07Ci0KLS8qKgotICogc3RydWN0IHRpcGNfYmNsaW5rIC0gbGluayB1c2VkIGZvciBicm9hZGNhc3QgbWVzc2FnZXMKLSAqIEBsb2NrOiBzcGlubG9jayBnb3Zlcm5pbmcgYWNjZXNzIHRvIHN0cnVjdHVyZQotICogQGxpbms6IChub24tc3RhbmRhcmQpIGJyb2FkY2FzdCBsaW5rIHN0cnVjdHVyZQotICogQG5vZGU6IChub24tc3RhbmRhcmQpIG5vZGUgc3RydWN0dXJlIHJlcHJlc2VudGluZyBiJ2Nhc3QgbGluaydzIHBlZXIgbm9kZQotICogQGZsYWdzOiByZXByZXNlbnQgYmNsaW5rIHN0YXRlcwotICogQGJjYXN0X25vZGVzOiBtYXAgb2YgYnJvYWRjYXN0LWNhcGFibGUgbm9kZXMKLSAqIEByZXRyYW5zbWl0X3RvOiBub2RlIHRoYXQgbW9zdCByZWNlbnRseSByZXF1ZXN0ZWQgYSByZXRyYW5zbWl0Ci0gKgotICogSGFuZGxlcyBzZXF1ZW5jZSBudW1iZXJpbmcsIGZyYWdtZW50YXRpb24sIGJ1bmRsaW5nLCBldGMuCi0gKi8KLXN0cnVjdCB0aXBjX2JjbGluayB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCB0aXBjX2xpbmsgbGluazsKLQlzdHJ1Y3QgdGlwY19ub2RlIG5vZGU7Ci0JdW5zaWduZWQgaW50IGZsYWdzOwotCXN0cnVjdCB0aXBjX25vZGVfbWFwIGJjYXN0X25vZGVzOwotCXN0cnVjdCB0aXBjX25vZGUgKnJldHJhbnNtaXRfdG87Ci19OwotCi1zdGF0aWMgc3RydWN0IHRpcGNfYmNiZWFyZXIgKmJjYmVhcmVyOwotc3RhdGljIHN0cnVjdCB0aXBjX2JjbGluayAqYmNsaW5rOwotc3RhdGljIHN0cnVjdCB0aXBjX2xpbmsgKmJjbDsKIAogY29uc3QgY2hhciB0aXBjX2JjbGlua19uYW1lW10gPSAiYnJvYWRjYXN0LWxpbmsiOwogCkBAIC0xMTUsMzggKzUyLDUwIEBACiBzdGF0aWMgdm9pZCB0aXBjX25tYXBfYWRkKHN0cnVjdCB0aXBjX25vZGVfbWFwICpubV9wdHIsIHUzMiBub2RlKTsKIHN0YXRpYyB2b2lkIHRpcGNfbm1hcF9yZW1vdmUoc3RydWN0IHRpcGNfbm9kZV9tYXAgKm5tX3B0ciwgdTMyIG5vZGUpOwogCi1zdGF0aWMgdm9pZCB0aXBjX2JjbGlua19sb2NrKHZvaWQpCitzdGF0aWMgdm9pZCB0aXBjX2JjbGlua19sb2NrKHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlzcGluX2xvY2tfYmgoJmJjbGluay0+bG9jayk7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOworCisJc3Bpbl9sb2NrX2JoKCZ0bi0+YmNsaW5rLT5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgdGlwY19iY2xpbmtfdW5sb2NrKHZvaWQpCitzdGF0aWMgdm9pZCB0aXBjX2JjbGlua191bmxvY2soc3RydWN0IG5ldCAqbmV0KQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAlzdHJ1Y3QgdGlwY19ub2RlICpub2RlID0gTlVMTDsKIAotCWlmIChsaWtlbHkoIWJjbGluay0+ZmxhZ3MpKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZiY2xpbmstPmxvY2spOworCWlmIChsaWtlbHkoIXRuLT5iY2xpbmstPmZsYWdzKSkgeworCQlzcGluX3VubG9ja19iaCgmdG4tPmJjbGluay0+bG9jayk7CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoYmNsaW5rLT5mbGFncyAmIFRJUENfQkNMSU5LX1JFU0VUKSB7Ci0JCWJjbGluay0+ZmxhZ3MgJj0gflRJUENfQkNMSU5LX1JFU0VUOwotCQlub2RlID0gdGlwY19iY2xpbmtfcmV0cmFuc21pdF90bygpOworCWlmICh0bi0+YmNsaW5rLT5mbGFncyAmIFRJUENfQkNMSU5LX1JFU0VUKSB7CisJCXRuLT5iY2xpbmstPmZsYWdzICY9IH5USVBDX0JDTElOS19SRVNFVDsKKwkJbm9kZSA9IHRpcGNfYmNsaW5rX3JldHJhbnNtaXRfdG8obmV0KTsKIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJmJjbGluay0+bG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnRuLT5iY2xpbmstPmxvY2spOwogCiAJaWYgKG5vZGUpCiAJCXRpcGNfbGlua19yZXNldF9hbGwobm9kZSk7CiB9CiAKK3ZvaWQgdGlwY19iY2xpbmtfaW5wdXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKKworCXRpcGNfc2tfbWNhc3RfcmN2KG5ldCwgJnRuLT5iY2xpbmstPmFycnZxLCAmdG4tPmJjbGluay0+aW5wdXRxKTsKK30KKwogdWludCAgdGlwY19iY2xpbmtfZ2V0X210dSh2b2lkKQogewogCXJldHVybiBNQVhfUEtUX0RFRkFVTFRfTUNBU1Q7CiB9CiAKLXZvaWQgdGlwY19iY2xpbmtfc2V0X2ZsYWdzKHVuc2lnbmVkIGludCBmbGFncykKK3ZvaWQgdGlwY19iY2xpbmtfc2V0X2ZsYWdzKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGZsYWdzKQogewotCWJjbGluay0+ZmxhZ3MgfD0gZmxhZ3M7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOworCisJdG4tPmJjbGluay0+ZmxhZ3MgfD0gZmxhZ3M7CiB9CiAKIHN0YXRpYyB1MzIgYmNidWZfYWNrcyhzdHJ1Y3Qgc2tfYnVmZiAqYnVmKQpAQCAtMTY0LDMxICsxMTMsNDAgQEAKIAliY2J1Zl9zZXRfYWNrcyhidWYsIGJjYnVmX2Fja3MoYnVmKSAtIDEpOwogfQogCi12b2lkIHRpcGNfYmNsaW5rX2FkZF9ub2RlKHUzMiBhZGRyKQordm9pZCB0aXBjX2JjbGlua19hZGRfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKQogewotCXRpcGNfYmNsaW5rX2xvY2soKTsKLQl0aXBjX25tYXBfYWRkKCZiY2xpbmstPmJjYXN0X25vZGVzLCBhZGRyKTsKLQl0aXBjX2JjbGlua191bmxvY2soKTsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CisKKwl0aXBjX2JjbGlua19sb2NrKG5ldCk7CisJdGlwY19ubWFwX2FkZCgmdG4tPmJjbGluay0+YmNhc3Rfbm9kZXMsIGFkZHIpOworCXRpcGNfYmNsaW5rX3VubG9jayhuZXQpOwogfQogCi12b2lkIHRpcGNfYmNsaW5rX3JlbW92ZV9ub2RlKHUzMiBhZGRyKQordm9pZCB0aXBjX2JjbGlua19yZW1vdmVfbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKQogewotCXRpcGNfYmNsaW5rX2xvY2soKTsKLQl0aXBjX25tYXBfcmVtb3ZlKCZiY2xpbmstPmJjYXN0X25vZGVzLCBhZGRyKTsKLQl0aXBjX2JjbGlua191bmxvY2soKTsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CisKKwl0aXBjX2JjbGlua19sb2NrKG5ldCk7CisJdGlwY19ubWFwX3JlbW92ZSgmdG4tPmJjbGluay0+YmNhc3Rfbm9kZXMsIGFkZHIpOworCXRpcGNfYmNsaW5rX3VubG9jayhuZXQpOwogfQogCi1zdGF0aWMgdm9pZCBiY2xpbmtfc2V0X2xhc3Rfc2VudCh2b2lkKQorc3RhdGljIHZvaWQgYmNsaW5rX3NldF9sYXN0X3NlbnQoc3RydWN0IG5ldCAqbmV0KQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKKwlzdHJ1Y3QgdGlwY19saW5rICpiY2wgPSB0bi0+YmNsOworCiAJaWYgKGJjbC0+bmV4dF9vdXQpCiAJCWJjbC0+ZnNtX21zZ19jbnQgPSBtb2QoYnVmX3NlcW5vKGJjbC0+bmV4dF9vdXQpIC0gMSk7CiAJZWxzZQogCQliY2wtPmZzbV9tc2dfY250ID0gbW9kKGJjbC0+bmV4dF9vdXRfbm8gLSAxKTsKIH0KIAotdTMyIHRpcGNfYmNsaW5rX2dldF9sYXN0X3NlbnQodm9pZCkKK3UzMiB0aXBjX2JjbGlua19nZXRfbGFzdF9zZW50KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlyZXR1cm4gYmNsLT5mc21fbXNnX2NudDsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CisKKwlyZXR1cm4gdG4tPmJjbC0+ZnNtX21zZ19jbnQ7CiB9CiAKIHN0YXRpYyB2b2lkIGJjbGlua191cGRhdGVfbGFzdF9zZW50KHN0cnVjdCB0aXBjX25vZGUgKm5vZGUsIHUzMiBzZXFubykKQEAgLTIwMyw5ICsxNjEsMTEgQEAKICAqCiAgKiBDYWxsZWQgd2l0aCBiY2xpbmtfbG9jayBsb2NrZWQKICAqLwotc3RydWN0IHRpcGNfbm9kZSAqdGlwY19iY2xpbmtfcmV0cmFuc21pdF90byh2b2lkKQorc3RydWN0IHRpcGNfbm9kZSAqdGlwY19iY2xpbmtfcmV0cmFuc21pdF90byhzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JcmV0dXJuIGJjbGluay0+cmV0cmFuc21pdF90bzsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CisKKwlyZXR1cm4gdG4tPmJjbGluay0+cmV0cmFuc21pdF90bzsKIH0KIAogLyoqCkBAIC0yMTUsOSArMTc1LDEwIEBACiAgKgogICogQ2FsbGVkIHdpdGggYmNsaW5rX2xvY2sgbG9ja2VkCiAgKi8KLXN0YXRpYyB2b2lkIGJjbGlua19yZXRyYW5zbWl0X3BrdCh1MzIgYWZ0ZXIsIHUzMiB0bykKK3N0YXRpYyB2b2lkIGJjbGlua19yZXRyYW5zbWl0X3BrdChzdHJ1Y3QgdGlwY19uZXQgKnRuLCB1MzIgYWZ0ZXIsIHUzMiB0bykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCB0aXBjX2xpbmsgKmJjbCA9IHRuLT5iY2w7CiAKIAlza2JfcXVldWVfd2FsaygmYmNsLT5vdXRxdWV1ZSwgc2tiKSB7CiAJCWlmIChtb3JlKGJ1Zl9zZXFubyhza2IpLCBhZnRlcikpIHsKQEAgLTIzMiwxMyArMTkzLDExIEBACiAgKgogICogQ2FsbGVkIHdpdGggbm8gbG9ja3MgdGFrZW4KICAqLwotdm9pZCB0aXBjX2JjbGlua193YWtldXBfdXNlcnModm9pZCkKK3ZvaWQgdGlwY19iY2xpbmtfd2FrZXVwX3VzZXJzKHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmJjbGluay0+bGluay53YWl0aW5nX3NrcykpKQotCQl0aXBjX3NrX3Jjdihza2IpOwotCisJdGlwY19za19yY3YobmV0LCAmdG4tPmJjbGluay0+bGluay53YWtldXBxKTsKIH0KIAogLyoqCkBAIC0yNTMsMTAgKzIxMiwxMiBAQAogCXN0cnVjdCBza19idWZmICpza2IsICp0bXA7CiAJc3RydWN0IHNrX2J1ZmYgKm5leHQ7CiAJdW5zaWduZWQgaW50IHJlbGVhc2VkID0gMDsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBuX3B0ci0+bmV0OworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAotCXRpcGNfYmNsaW5rX2xvY2soKTsKKwl0aXBjX2JjbGlua19sb2NrKG5ldCk7CiAJLyogQmFpbCBvdXQgaWYgdHggcXVldWUgaXMgZW1wdHkgKG5vIGNsZWFuIHVwIGlzIHJlcXVpcmVkKSAqLwotCXNrYiA9IHNrYl9wZWVrKCZiY2wtPm91dHF1ZXVlKTsKKwlza2IgPSBza2JfcGVlaygmdG4tPmJjbC0+b3V0cXVldWUpOwogCWlmICghc2tiKQogCQlnb3RvIGV4aXQ7CiAKQEAgLTI2Nyw0MyArMjI4LDQzIEBACiAJCSAqIGFja25vd2xlZGdlIHNlbnQgbWVzc2FnZXMgb25seSAoaWYgb3RoZXIgbm9kZXMgc3RpbGwgZXhpc3QpCiAJCSAqIG9yIGJvdGggc2VudCBhbmQgdW5zZW50IG1lc3NhZ2VzIChvdGhlcndpc2UpCiAJCSAqLwotCQlpZiAoYmNsaW5rLT5iY2FzdF9ub2Rlcy5jb3VudCkKLQkJCWFja2VkID0gYmNsLT5mc21fbXNnX2NudDsKKwkJaWYgKHRuLT5iY2xpbmstPmJjYXN0X25vZGVzLmNvdW50KQorCQkJYWNrZWQgPSB0bi0+YmNsLT5mc21fbXNnX2NudDsKIAkJZWxzZQotCQkJYWNrZWQgPSBiY2wtPm5leHRfb3V0X25vOworCQkJYWNrZWQgPSB0bi0+YmNsLT5uZXh0X291dF9ubzsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBCYWlsIG91dCBpZiBzcGVjaWZpZWQgc2VxdWVuY2UgbnVtYmVyIGRvZXMgbm90IGNvcnJlc3BvbmQKIAkJICogdG8gYSBtZXNzYWdlIHRoYXQgaGFzIGJlZW4gc2VudCBhbmQgbm90IHlldCBhY2tub3dsZWRnZWQKIAkJICovCiAJCWlmIChsZXNzKGFja2VkLCBidWZfc2Vxbm8oc2tiKSkgfHwKLQkJICAgIGxlc3MoYmNsLT5mc21fbXNnX2NudCwgYWNrZWQpIHx8CisJCSAgICBsZXNzKHRuLT5iY2wtPmZzbV9tc2dfY250LCBhY2tlZCkgfHwKIAkJICAgIGxlc3NfZXEoYWNrZWQsIG5fcHRyLT5iY2xpbmsuYWNrZWQpKQogCQkJZ290byBleGl0OwogCX0KIAogCS8qIFNraXAgb3ZlciBwYWNrZXRzIHRoYXQgbm9kZSBoYXMgcHJldmlvdXNseSBhY2tub3dsZWRnZWQgKi8KLQlza2JfcXVldWVfd2FsaygmYmNsLT5vdXRxdWV1ZSwgc2tiKSB7CisJc2tiX3F1ZXVlX3dhbGsoJnRuLT5iY2wtPm91dHF1ZXVlLCBza2IpIHsKIAkJaWYgKG1vcmUoYnVmX3NlcW5vKHNrYiksIG5fcHRyLT5iY2xpbmsuYWNrZWQpKQogCQkJYnJlYWs7CiAJfQogCiAJLyogVXBkYXRlIHBhY2tldHMgdGhhdCBub2RlIGlzIG5vdyBhY2tub3dsZWRnaW5nICovCi0Jc2tiX3F1ZXVlX3dhbGtfZnJvbV9zYWZlKCZiY2wtPm91dHF1ZXVlLCBza2IsIHRtcCkgeworCXNrYl9xdWV1ZV93YWxrX2Zyb21fc2FmZSgmdG4tPmJjbC0+b3V0cXVldWUsIHNrYiwgdG1wKSB7CiAJCWlmIChtb3JlKGJ1Zl9zZXFubyhza2IpLCBhY2tlZCkpCiAJCQlicmVhazsKIAotCQluZXh0ID0gdGlwY19za2JfcXVldWVfbmV4dCgmYmNsLT5vdXRxdWV1ZSwgc2tiKTsKLQkJaWYgKHNrYiAhPSBiY2wtPm5leHRfb3V0KSB7CisJCW5leHQgPSB0aXBjX3NrYl9xdWV1ZV9uZXh0KCZ0bi0+YmNsLT5vdXRxdWV1ZSwgc2tiKTsKKwkJaWYgKHNrYiAhPSB0bi0+YmNsLT5uZXh0X291dCkgewogCQkJYmNidWZfZGVjcl9hY2tzKHNrYik7CiAJCX0gZWxzZSB7CiAJCQliY2J1Zl9zZXRfYWNrcyhza2IsIDApOwotCQkJYmNsLT5uZXh0X291dCA9IG5leHQ7Ci0JCQliY2xpbmtfc2V0X2xhc3Rfc2VudCgpOworCQkJdG4tPmJjbC0+bmV4dF9vdXQgPSBuZXh0OworCQkJYmNsaW5rX3NldF9sYXN0X3NlbnQobmV0KTsKIAkJfQogCiAJCWlmIChiY2J1Zl9hY2tzKHNrYikgPT0gMCkgewotCQkJX19za2JfdW5saW5rKHNrYiwgJmJjbC0+b3V0cXVldWUpOworCQkJX19za2JfdW5saW5rKHNrYiwgJnRuLT5iY2wtPm91dHF1ZXVlKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJcmVsZWFzZWQgPSAxOwogCQl9CkBAIC0zMTEsMTUgKzI3MiwxNCBAQAogCW5fcHRyLT5iY2xpbmsuYWNrZWQgPSBhY2tlZDsKIAogCS8qIFRyeSByZXNvbHZpbmcgYnJvYWRjYXN0IGxpbmsgY29uZ2VzdGlvbiwgaWYgbmVjZXNzYXJ5ICovCi0JaWYgKHVubGlrZWx5KGJjbC0+bmV4dF9vdXQpKSB7Ci0JCXRpcGNfbGlua19wdXNoX3BhY2tldHMoYmNsKTsKLQkJYmNsaW5rX3NldF9sYXN0X3NlbnQoKTsKKwlpZiAodW5saWtlbHkodG4tPmJjbC0+bmV4dF9vdXQpKSB7CisJCXRpcGNfbGlua19wdXNoX3BhY2tldHModG4tPmJjbCk7CisJCWJjbGlua19zZXRfbGFzdF9zZW50KG5ldCk7CiAJfQotCWlmICh1bmxpa2VseShyZWxlYXNlZCAmJiAhc2tiX3F1ZXVlX2VtcHR5KCZiY2wtPndhaXRpbmdfc2tzKSkpCisJaWYgKHVubGlrZWx5KHJlbGVhc2VkICYmICFza2JfcXVldWVfZW1wdHkoJnRuLT5iY2wtPndha2V1cHEpKSkKIAkJbl9wdHItPmFjdGlvbl9mbGFncyB8PSBUSVBDX1dBS0VVUF9CQ0FTVF9VU0VSUzsKLQogZXhpdDoKLQl0aXBjX2JjbGlua191bmxvY2soKTsKKwl0aXBjX2JjbGlua191bmxvY2sobmV0KTsKIH0KIAogLyoqCkBAIC0zMjcsOSArMjg3LDEyIEBACiAgKgogICogUkNVIGFuZCBub2RlIGxvY2sgc2V0CiAgKi8KLXZvaWQgdGlwY19iY2xpbmtfdXBkYXRlX2xpbmtfc3RhdGUoc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIsIHUzMiBsYXN0X3NlbnQpCit2b2lkIHRpcGNfYmNsaW5rX3VwZGF0ZV9saW5rX3N0YXRlKHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyLAorCQkJCSAgIHUzMiBsYXN0X3NlbnQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBuX3B0ci0+bmV0OworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAogCS8qIElnbm9yZSAic3RhbGUiIGxpbmsgc3RhdGUgaW5mbyAqLwogCWlmIChsZXNzX2VxKGxhc3Rfc2VudCwgbl9wdHItPmJjbGluay5sYXN0X2luKSkKQEAgLTM1OSwxOCArMzIyLDE4IEBACiAJCXN0cnVjdCBza19idWZmICpza2IgPSBza2JfcGVlaygmbl9wdHItPmJjbGluay5kZWZlcnJlZF9xdWV1ZSk7CiAJCXUzMiB0byA9IHNrYiA/IGJ1Zl9zZXFubyhza2IpIC0gMSA6IG5fcHRyLT5iY2xpbmsubGFzdF9zZW50OwogCi0JCXRpcGNfbXNnX2luaXQobXNnLCBCQ0FTVF9QUk9UT0NPTCwgU1RBVEVfTVNHLAorCQl0aXBjX21zZ19pbml0KHRuLT5vd25fYWRkciwgbXNnLCBCQ0FTVF9QUk9UT0NPTCwgU1RBVEVfTVNHLAogCQkJICAgICAgSU5UX0hfU0laRSwgbl9wdHItPmFkZHIpOwogCQltc2dfc2V0X25vbl9zZXEobXNnLCAxKTsKLQkJbXNnX3NldF9tY19uZXRpZChtc2csIHRpcGNfbmV0X2lkKTsKKwkJbXNnX3NldF9tY19uZXRpZChtc2csIHRuLT5uZXRfaWQpOwogCQltc2dfc2V0X2JjYXN0X2Fjayhtc2csIG5fcHRyLT5iY2xpbmsubGFzdF9pbik7CiAJCW1zZ19zZXRfYmNnYXBfYWZ0ZXIobXNnLCBuX3B0ci0+YmNsaW5rLmxhc3RfaW4pOwogCQltc2dfc2V0X2JjZ2FwX3RvKG1zZywgdG8pOwogCi0JCXRpcGNfYmNsaW5rX2xvY2soKTsKLQkJdGlwY19iZWFyZXJfc2VuZChNQVhfQkVBUkVSUywgYnVmLCBOVUxMKTsKLQkJYmNsLT5zdGF0cy5zZW50X25hY2tzKys7Ci0JCXRpcGNfYmNsaW5rX3VubG9jaygpOworCQl0aXBjX2JjbGlua19sb2NrKG5ldCk7CisJCXRpcGNfYmVhcmVyX3NlbmQobmV0LCBNQVhfQkVBUkVSUywgYnVmLCBOVUxMKTsKKwkJdG4tPmJjbC0+c3RhdHMuc2VudF9uYWNrcysrOworCQl0aXBjX2JjbGlua191bmxvY2sobmV0KTsKIAkJa2ZyZWVfc2tiKGJ1Zik7CiAKIAkJbl9wdHItPmJjbGluay5vb3Nfc3RhdGUrKzsKQEAgLTM4Myw5ICszNDYsOSBAQAogICogRGVsYXkgYW55IHVwY29taW5nIE5BQ0sgYnkgdGhpcyBub2RlIGlmIGFub3RoZXIgbm9kZSBoYXMgYWxyZWFkeQogICogcmVxdWVzdGVkIHRoZSBmaXJzdCBtZXNzYWdlIHRoaXMgbm9kZSBpcyBnb2luZyB0byBhc2sgZm9yLgogICovCi1zdGF0aWMgdm9pZCBiY2xpbmtfcGVla19uYWNrKHN0cnVjdCB0aXBjX21zZyAqbXNnKQorc3RhdGljIHZvaWQgYmNsaW5rX3BlZWtfbmFjayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX21zZyAqbXNnKQogewotCXN0cnVjdCB0aXBjX25vZGUgKm5fcHRyID0gdGlwY19ub2RlX2ZpbmQobXNnX2Rlc3Rub2RlKG1zZykpOworCXN0cnVjdCB0aXBjX25vZGUgKm5fcHRyID0gdGlwY19ub2RlX2ZpbmQobmV0LCBtc2dfZGVzdG5vZGUobXNnKSk7CiAKIAlpZiAodW5saWtlbHkoIW5fcHRyKSkKIAkJcmV0dXJuOwpAQCAtNDAwLDE3ICszNjMsMjMgQEAKIAl0aXBjX25vZGVfdW5sb2NrKG5fcHRyKTsKIH0KIAotLyogdGlwY19iY2xpbmtfeG1pdCAtIGJyb2FkY2FzdCBidWZmZXIgY2hhaW4gdG8gYWxsIG5vZGVzIGluIGNsdXN0ZXIKKy8qIHRpcGNfYmNsaW5rX3htaXQgLSBkZWxpdmVyIGJ1ZmZlciBjaGFpbiB0byBhbGwgbm9kZXMgaW4gY2x1c3RlcgogICogICAgICAgICAgICAgICAgICAgIGFuZCB0byBpZGVudGlmaWVkIG5vZGUgbG9jYWwgc29ja2V0cworICogQG5ldDogdGhlIGFwcGxpY2FibGUgbmV0IG5hbWVzcGFjZQogICogQGxpc3Q6IGNoYWluIG9mIGJ1ZmZlcnMgY29udGFpbmluZyBtZXNzYWdlCiAgKiBDb25zdW1lcyB0aGUgYnVmZmVyIGNoYWluLCBleGNlcHQgd2hlbiByZXR1cm5pbmcgLUVMSU5LQ09ORwogICogUmV0dXJucyAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBlcnJubzogLUVMSU5LQ09ORywtRUhPU1RVTlJFQUNILC1FTVNHU0laRQogICovCi1pbnQgdGlwY19iY2xpbmtfeG1pdChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQoraW50IHRpcGNfYmNsaW5rX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKKwlzdHJ1Y3QgdGlwY19saW5rICpiY2wgPSB0bi0+YmNsOworCXN0cnVjdCB0aXBjX2JjbGluayAqYmNsaW5rID0gdG4tPmJjbGluazsKIAlpbnQgcmMgPSAwOwogCWludCBiYyA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGFycnZxOworCXN0cnVjdCBza19idWZmX2hlYWQgaW5wdXRxOwogCiAJLyogUHJlcGFyZSBjbG9uZSBvZiBtZXNzYWdlIGZvciBsb2NhbCBub2RlICovCiAJc2tiID0gdGlwY19tc2dfcmVhc3NlbWJsZShsaXN0KTsKQEAgLTQxOSwzMiArMzg4LDM1IEBACiAJCXJldHVybiAtRUhPU1RVTlJFQUNIOwogCX0KIAotCS8qIEJyb2FkY2FzdCB0byBhbGwgb3RoZXIgbm9kZXMgKi8KKwkvKiBCcm9hZGNhc3QgdG8gYWxsIG5vZGVzICovCiAJaWYgKGxpa2VseShiY2xpbmspKSB7Ci0JCXRpcGNfYmNsaW5rX2xvY2soKTsKKwkJdGlwY19iY2xpbmtfbG9jayhuZXQpOwogCQlpZiAobGlrZWx5KGJjbGluay0+YmNhc3Rfbm9kZXMuY291bnQpKSB7Ci0JCQlyYyA9IF9fdGlwY19saW5rX3htaXQoYmNsLCBsaXN0KTsKKwkJCXJjID0gX190aXBjX2xpbmtfeG1pdChuZXQsIGJjbCwgbGlzdCk7CiAJCQlpZiAobGlrZWx5KCFyYykpIHsKIAkJCQl1MzIgbGVuID0gc2tiX3F1ZXVlX2xlbigmYmNsLT5vdXRxdWV1ZSk7CiAKLQkJCQliY2xpbmtfc2V0X2xhc3Rfc2VudCgpOworCQkJCWJjbGlua19zZXRfbGFzdF9zZW50KG5ldCk7CiAJCQkJYmNsLT5zdGF0cy5xdWV1ZV9zel9jb3VudHMrKzsKIAkJCQliY2wtPnN0YXRzLmFjY3VfcXVldWVfc3ogKz0gbGVuOwogCQkJfQogCQkJYmMgPSAxOwogCQl9Ci0JCXRpcGNfYmNsaW5rX3VubG9jaygpOworCQl0aXBjX2JjbGlua191bmxvY2sobmV0KTsKIAl9CiAKIAlpZiAodW5saWtlbHkoIWJjKSkKIAkJX19za2JfcXVldWVfcHVyZ2UobGlzdCk7CiAKLQkvKiBEZWxpdmVyIG1lc3NhZ2UgY2xvbmUgKi8KLQlpZiAobGlrZWx5KCFyYykpCi0JCXRpcGNfc2tfbWNhc3RfcmN2KHNrYik7Ci0JZWxzZQorCWlmICh1bmxpa2VseShyYykpIHsKIAkJa2ZyZWVfc2tiKHNrYik7Ci0KKwkJcmV0dXJuIHJjOworCX0KKwkvKiBEZWxpdmVyIG1lc3NhZ2UgY2xvbmUgKi8KKwlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmFycnZxKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZpbnB1dHEpOworCV9fc2tiX3F1ZXVlX3RhaWwoJmFycnZxLCBza2IpOworCXRpcGNfc2tfbWNhc3RfcmN2KG5ldCwgJmFycnZxLCAmaW5wdXRxKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTQ1NSwxOSArNDI3LDIxIEBACiAgKi8KIHN0YXRpYyB2b2lkIGJjbGlua19hY2NlcHRfcGt0KHN0cnVjdCB0aXBjX25vZGUgKm5vZGUsIHUzMiBzZXFubykKIHsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobm9kZS0+bmV0LCB0aXBjX25ldF9pZCk7CisKIAliY2xpbmtfdXBkYXRlX2xhc3Rfc2VudChub2RlLCBzZXFubyk7CiAJbm9kZS0+YmNsaW5rLmxhc3RfaW4gPSBzZXFubzsKIAlub2RlLT5iY2xpbmsub29zX3N0YXRlID0gMDsKLQliY2wtPnN0YXRzLnJlY3ZfaW5mbysrOworCXRuLT5iY2wtPnN0YXRzLnJlY3ZfaW5mbysrOwogCiAJLyoKIAkgKiBVbmljYXN0IGFuIEFDSyBwZXJpb2RpY2FsbHksIGVuc3VyaW5nIHRoYXQKIAkgKiBhbGwgbm9kZXMgaW4gdGhlIGNsdXN0ZXIgZG9uJ3QgQUNLIGF0IHRoZSBzYW1lIHRpbWUKIAkgKi8KLQlpZiAoKChzZXFubyAtIHRpcGNfb3duX2FkZHIpICUgVElQQ19NSU5fTElOS19XSU4pID09IDApIHsKKwlpZiAoKChzZXFubyAtIHRuLT5vd25fYWRkcikgJSBUSVBDX01JTl9MSU5LX1dJTikgPT0gMCkgewogCQl0aXBjX2xpbmtfcHJvdG9feG1pdChub2RlLT5hY3RpdmVfbGlua3Nbbm9kZS0+YWRkciAmIDFdLAogCQkJCSAgICAgU1RBVEVfTVNHLCAwLCAwLCAwLCAwLCAwKTsKLQkJYmNsLT5zdGF0cy5zZW50X2Fja3MrKzsKKwkJdG4tPmJjbC0+c3RhdHMuc2VudF9hY2tzKys7CiAJfQogfQogCkBAIC00NzYsMTkgKzQ1MCwyNCBAQAogICoKICAqIFJDVSBpcyBsb2NrZWQsIG5vIG90aGVyIGxvY2tzIHNldAogICovCi12b2lkIHRpcGNfYmNsaW5rX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqYnVmKQordm9pZCB0aXBjX2JjbGlua19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqYnVmKQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKKwlzdHJ1Y3QgdGlwY19saW5rICpiY2wgPSB0bi0+YmNsOwogCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZyhidWYpOwogCXN0cnVjdCB0aXBjX25vZGUgKm5vZGU7CiAJdTMyIG5leHRfaW47CiAJdTMyIHNlcW5vOwogCWludCBkZWZlcnJlZCA9IDA7CisJaW50IHBvcyA9IDA7CisJc3RydWN0IHNrX2J1ZmYgKmlza2I7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCAqYXJydnEsICppbnB1dHE7CiAKIAkvKiBTY3JlZW4gb3V0IHVud2FudGVkIGJyb2FkY2FzdCBtZXNzYWdlcyAqLwotCWlmIChtc2dfbWNfbmV0aWQobXNnKSAhPSB0aXBjX25ldF9pZCkKKwlpZiAobXNnX21jX25ldGlkKG1zZykgIT0gdG4tPm5ldF9pZCkKIAkJZ290byBleGl0OwogCi0Jbm9kZSA9IHRpcGNfbm9kZV9maW5kKG1zZ19wcmV2bm9kZShtc2cpKTsKKwlub2RlID0gdGlwY19ub2RlX2ZpbmQobmV0LCBtc2dfcHJldm5vZGUobXNnKSk7CiAJaWYgKHVubGlrZWx5KCFub2RlKSkKIAkJZ290byBleGl0OwogCkBAIC01MDAsMTggKzQ3OSwxOCBAQAogCWlmICh1bmxpa2VseShtc2dfdXNlcihtc2cpID09IEJDQVNUX1BST1RPQ09MKSkgewogCQlpZiAobXNnX3R5cGUobXNnKSAhPSBTVEFURV9NU0cpCiAJCQlnb3RvIHVubG9jazsKLQkJaWYgKG1zZ19kZXN0bm9kZShtc2cpID09IHRpcGNfb3duX2FkZHIpIHsKKwkJaWYgKG1zZ19kZXN0bm9kZShtc2cpID09IHRuLT5vd25fYWRkcikgewogCQkJdGlwY19iY2xpbmtfYWNrbm93bGVkZ2Uobm9kZSwgbXNnX2JjYXN0X2Fjayhtc2cpKTsKIAkJCXRpcGNfbm9kZV91bmxvY2sobm9kZSk7Ci0JCQl0aXBjX2JjbGlua19sb2NrKCk7CisJCQl0aXBjX2JjbGlua19sb2NrKG5ldCk7CiAJCQliY2wtPnN0YXRzLnJlY3ZfbmFja3MrKzsKLQkJCWJjbGluay0+cmV0cmFuc21pdF90byA9IG5vZGU7Ci0JCQliY2xpbmtfcmV0cmFuc21pdF9wa3QobXNnX2JjZ2FwX2FmdGVyKG1zZyksCisJCQl0bi0+YmNsaW5rLT5yZXRyYW5zbWl0X3RvID0gbm9kZTsKKwkJCWJjbGlua19yZXRyYW5zbWl0X3BrdCh0biwgbXNnX2JjZ2FwX2FmdGVyKG1zZyksCiAJCQkJCSAgICAgIG1zZ19iY2dhcF90byhtc2cpKTsKLQkJCXRpcGNfYmNsaW5rX3VubG9jaygpOworCQkJdGlwY19iY2xpbmtfdW5sb2NrKG5ldCk7CiAJCX0gZWxzZSB7CiAJCQl0aXBjX25vZGVfdW5sb2NrKG5vZGUpOwotCQkJYmNsaW5rX3BlZWtfbmFjayhtc2cpOworCQkJYmNsaW5rX3BlZWtfbmFjayhuZXQsIG1zZyk7CiAJCX0KIAkJZ290byBleGl0OwogCX0KQEAgLTUxOSw1MiArNDk4LDU0IEBACiAJLyogSGFuZGxlIGluLXNlcXVlbmNlIGJyb2FkY2FzdCBtZXNzYWdlICovCiAJc2Vxbm8gPSBtc2dfc2Vxbm8obXNnKTsKIAluZXh0X2luID0gbW9kKG5vZGUtPmJjbGluay5sYXN0X2luICsgMSk7CisJYXJydnEgPSAmdG4tPmJjbGluay0+YXJydnE7CisJaW5wdXRxID0gJnRuLT5iY2xpbmstPmlucHV0cTsKIAogCWlmIChsaWtlbHkoc2Vxbm8gPT0gbmV4dF9pbikpIHsKIHJlY2VpdmU6CiAJCS8qIERlbGl2ZXIgbWVzc2FnZSB0byBkZXN0aW5hdGlvbiAqLwogCQlpZiAobGlrZWx5KG1zZ19pc2RhdGEobXNnKSkpIHsKLQkJCXRpcGNfYmNsaW5rX2xvY2soKTsKKwkJCXRpcGNfYmNsaW5rX2xvY2sobmV0KTsKIAkJCWJjbGlua19hY2NlcHRfcGt0KG5vZGUsIHNlcW5vKTsKLQkJCXRpcGNfYmNsaW5rX3VubG9jaygpOworCQkJc3Bpbl9sb2NrX2JoKCZpbnB1dHEtPmxvY2spOworCQkJX19za2JfcXVldWVfdGFpbChhcnJ2cSwgYnVmKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZpbnB1dHEtPmxvY2spOworCQkJbm9kZS0+YWN0aW9uX2ZsYWdzIHw9IFRJUENfQkNBU1RfTVNHX0VWVDsKKwkJCXRpcGNfYmNsaW5rX3VubG9jayhuZXQpOwogCQkJdGlwY19ub2RlX3VubG9jayhub2RlKTsKLQkJCWlmIChsaWtlbHkobXNnX21jYXN0KG1zZykpKQotCQkJCXRpcGNfc2tfbWNhc3RfcmN2KGJ1Zik7Ci0JCQllbHNlCi0JCQkJa2ZyZWVfc2tiKGJ1Zik7CiAJCX0gZWxzZSBpZiAobXNnX3VzZXIobXNnKSA9PSBNU0dfQlVORExFUikgewotCQkJdGlwY19iY2xpbmtfbG9jaygpOworCQkJdGlwY19iY2xpbmtfbG9jayhuZXQpOwogCQkJYmNsaW5rX2FjY2VwdF9wa3Qobm9kZSwgc2Vxbm8pOwogCQkJYmNsLT5zdGF0cy5yZWN2X2J1bmRsZXMrKzsKIAkJCWJjbC0+c3RhdHMucmVjdl9idW5kbGVkICs9IG1zZ19tc2djbnQobXNnKTsKLQkJCXRpcGNfYmNsaW5rX3VubG9jaygpOworCQkJcG9zID0gMDsKKwkJCXdoaWxlICh0aXBjX21zZ19leHRyYWN0KGJ1ZiwgJmlza2IsICZwb3MpKSB7CisJCQkJc3Bpbl9sb2NrX2JoKCZpbnB1dHEtPmxvY2spOworCQkJCV9fc2tiX3F1ZXVlX3RhaWwoYXJydnEsIGlza2IpOworCQkJCXNwaW5fdW5sb2NrX2JoKCZpbnB1dHEtPmxvY2spOworCQkJfQorCQkJbm9kZS0+YWN0aW9uX2ZsYWdzIHw9IFRJUENfQkNBU1RfTVNHX0VWVDsKKwkJCXRpcGNfYmNsaW5rX3VubG9jayhuZXQpOwogCQkJdGlwY19ub2RlX3VubG9jayhub2RlKTsKLQkJCXRpcGNfbGlua19idW5kbGVfcmN2KGJ1Zik7CiAJCX0gZWxzZSBpZiAobXNnX3VzZXIobXNnKSA9PSBNU0dfRlJBR01FTlRFUikgewogCQkJdGlwY19idWZfYXBwZW5kKCZub2RlLT5iY2xpbmsucmVhc21fYnVmLCAmYnVmKTsKIAkJCWlmICh1bmxpa2VseSghYnVmICYmICFub2RlLT5iY2xpbmsucmVhc21fYnVmKSkKIAkJCQlnb3RvIHVubG9jazsKLQkJCXRpcGNfYmNsaW5rX2xvY2soKTsKKwkJCXRpcGNfYmNsaW5rX2xvY2sobmV0KTsKIAkJCWJjbGlua19hY2NlcHRfcGt0KG5vZGUsIHNlcW5vKTsKIAkJCWJjbC0+c3RhdHMucmVjdl9mcmFnbWVudHMrKzsKIAkJCWlmIChidWYpIHsKIAkJCQliY2wtPnN0YXRzLnJlY3ZfZnJhZ21lbnRlZCsrOwogCQkJCW1zZyA9IGJ1Zl9tc2coYnVmKTsKLQkJCQl0aXBjX2JjbGlua191bmxvY2soKTsKKwkJCQl0aXBjX2JjbGlua191bmxvY2sobmV0KTsKIAkJCQlnb3RvIHJlY2VpdmU7CiAJCQl9Ci0JCQl0aXBjX2JjbGlua191bmxvY2soKTsKKwkJCXRpcGNfYmNsaW5rX3VubG9jayhuZXQpOwogCQkJdGlwY19ub2RlX3VubG9jayhub2RlKTsKLQkJfSBlbHNlIGlmIChtc2dfdXNlcihtc2cpID09IE5BTUVfRElTVFJJQlVUT1IpIHsKLQkJCXRpcGNfYmNsaW5rX2xvY2soKTsKLQkJCWJjbGlua19hY2NlcHRfcGt0KG5vZGUsIHNlcW5vKTsKLQkJCXRpcGNfYmNsaW5rX3VubG9jaygpOwotCQkJdGlwY19ub2RlX3VubG9jayhub2RlKTsKLQkJCXRpcGNfbmFtZWRfcmN2KGJ1Zik7CiAJCX0gZWxzZSB7Ci0JCQl0aXBjX2JjbGlua19sb2NrKCk7CisJCQl0aXBjX2JjbGlua19sb2NrKG5ldCk7CiAJCQliY2xpbmtfYWNjZXB0X3BrdChub2RlLCBzZXFubyk7Ci0JCQl0aXBjX2JjbGlua191bmxvY2soKTsKKwkJCXRpcGNfYmNsaW5rX3VubG9jayhuZXQpOwogCQkJdGlwY19ub2RlX3VubG9jayhub2RlKTsKIAkJCWtmcmVlX3NrYihidWYpOwogCQl9CkBAIC02MDIsMTQgKzU4MywxNCBAQAogCQlidWYgPSBOVUxMOwogCX0KIAotCXRpcGNfYmNsaW5rX2xvY2soKTsKKwl0aXBjX2JjbGlua19sb2NrKG5ldCk7CiAKIAlpZiAoZGVmZXJyZWQpCiAJCWJjbC0+c3RhdHMuZGVmZXJyZWRfcmVjdisrOwogCWVsc2UKIAkJYmNsLT5zdGF0cy5kdXBsaWNhdGVzKys7CiAKLQl0aXBjX2JjbGlua191bmxvY2soKTsKKwl0aXBjX2JjbGlua191bmxvY2sobmV0KTsKIAogdW5sb2NrOgogCXRpcGNfbm9kZV91bmxvY2sobm9kZSk7CkBAIC02MjAsNyArNjAxLDcgQEAKIHUzMiB0aXBjX2JjbGlua19hY2tzX21pc3Npbmcoc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIpCiB7CiAJcmV0dXJuIChuX3B0ci0+YmNsaW5rLnJlY3ZfcGVybWl0dGVkICYmCi0JCSh0aXBjX2JjbGlua19nZXRfbGFzdF9zZW50KCkgIT0gbl9wdHItPmJjbGluay5hY2tlZCkpOworCQkodGlwY19iY2xpbmtfZ2V0X2xhc3Rfc2VudChuX3B0ci0+bmV0KSAhPSBuX3B0ci0+YmNsaW5rLmFja2VkKSk7CiB9CiAKIApAQCAtNjMzLDExICs2MTQsMTUgQEAKICAqIFJldHVybnMgMCAocGFja2V0IHNlbnQgc3VjY2Vzc2Z1bGx5KSB1bmRlciBhbGwgY2lyY3Vtc3RhbmNlcywKICAqIHNpbmNlIHRoZSBicm9hZGNhc3QgbGluaydzIHBzZXVkby1iZWFyZXIgbmV2ZXIgYmxvY2tzCiAgKi8KLXN0YXRpYyBpbnQgdGlwY19iY2JlYXJlcl9zZW5kKHN0cnVjdCBza19idWZmICpidWYsIHN0cnVjdCB0aXBjX2JlYXJlciAqdW51c2VkMSwKK3N0YXRpYyBpbnQgdGlwY19iY2JlYXJlcl9zZW5kKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmJ1ZiwKKwkJCSAgICAgIHN0cnVjdCB0aXBjX2JlYXJlciAqdW51c2VkMSwKIAkJCSAgICAgIHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKnVudXNlZDIpCiB7CiAJaW50IGJwX2luZGV4OwogCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZyhidWYpOworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKKwlzdHJ1Y3QgdGlwY19iY2JlYXJlciAqYmNiZWFyZXIgPSB0bi0+YmNiZWFyZXI7CisJc3RydWN0IHRpcGNfYmNsaW5rICpiY2xpbmsgPSB0bi0+YmNsaW5rOwogCiAJLyogUHJlcGFyZSBicm9hZGNhc3QgbGluayBtZXNzYWdlIGZvciByZWxpYWJsZSB0cmFuc21pc3Npb24sCiAJICogaWYgZmlyc3QgdGltZSB0cnlpbmcgdG8gc2VuZCBpdDsKQEAgLTY0Nyw4ICs2MzIsOCBAQAogCWlmIChsaWtlbHkoIW1zZ19ub25fc2VxKGJ1Zl9tc2coYnVmKSkpKSB7CiAJCWJjYnVmX3NldF9hY2tzKGJ1ZiwgYmNsaW5rLT5iY2FzdF9ub2Rlcy5jb3VudCk7CiAJCW1zZ19zZXRfbm9uX3NlcShtc2csIDEpOwotCQltc2dfc2V0X21jX25ldGlkKG1zZywgdGlwY19uZXRfaWQpOwotCQliY2wtPnN0YXRzLnNlbnRfaW5mbysrOworCQltc2dfc2V0X21jX25ldGlkKG1zZywgdG4tPm5ldF9pZCk7CisJCXRuLT5iY2wtPnN0YXRzLnNlbnRfaW5mbysrOwogCiAJCWlmIChXQVJOX09OKCFiY2xpbmstPmJjYXN0X25vZGVzLmNvdW50KSkgewogCQkJZHVtcF9zdGFjaygpOwpAQCAtNjc3LDEzICs2NjIsMTQgQEAKIAogCQlpZiAoYnBfaW5kZXggPT0gMCkgewogCQkJLyogVXNlIG9yaWdpbmFsIGJ1ZmZlciBmb3IgZmlyc3QgYmVhcmVyICovCi0JCQl0aXBjX2JlYXJlcl9zZW5kKGItPmlkZW50aXR5LCBidWYsICZiLT5iY2FzdF9hZGRyKTsKKwkJCXRpcGNfYmVhcmVyX3NlbmQobmV0LCBiLT5pZGVudGl0eSwgYnVmLCAmYi0+YmNhc3RfYWRkcik7CiAJCX0gZWxzZSB7CiAJCQkvKiBBdm9pZCBjb25jdXJyZW50IGJ1ZmZlciBhY2Nlc3MgKi8KIAkJCXRidWYgPSBwc2tiX2NvcHlfZm9yX2Nsb25lKGJ1ZiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoIXRidWYpCiAJCQkJYnJlYWs7Ci0JCQl0aXBjX2JlYXJlcl9zZW5kKGItPmlkZW50aXR5LCB0YnVmLCAmYi0+YmNhc3RfYWRkcik7CisJCQl0aXBjX2JlYXJlcl9zZW5kKG5ldCwgYi0+aWRlbnRpdHksIHRidWYsCisJCQkJCSAmYi0+YmNhc3RfYWRkcik7CiAJCQlrZnJlZV9za2IodGJ1Zik7IC8qIEJlYXJlciBrZWVwcyBhIGNsb25lICovCiAJCX0KIAkJaWYgKGJjYmVhcmVyLT5yZW1haW5zX25ldy5jb3VudCA9PSAwKQpAQCAtNjk4LDE1ICs2ODQsMTggQEAKIC8qKgogICogdGlwY19iY2JlYXJlcl9zb3J0IC0gY3JlYXRlIHNldHMgb2YgYmVhcmVyIHBhaXJzIHVzZWQgYnkgYnJvYWRjYXN0IGJlYXJlcgogICovCi12b2lkIHRpcGNfYmNiZWFyZXJfc29ydChzdHJ1Y3QgdGlwY19ub2RlX21hcCAqbm1fcHRyLCB1MzIgbm9kZSwgYm9vbCBhY3Rpb24pCit2b2lkIHRpcGNfYmNiZWFyZXJfc29ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25vZGVfbWFwICpubV9wdHIsCisJCQl1MzIgbm9kZSwgYm9vbCBhY3Rpb24pCiB7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOworCXN0cnVjdCB0aXBjX2JjYmVhcmVyICpiY2JlYXJlciA9IHRuLT5iY2JlYXJlcjsKIAlzdHJ1Y3QgdGlwY19iY2JlYXJlcl9wYWlyICpicF90ZW1wID0gYmNiZWFyZXItPmJwYWlyc190ZW1wOwogCXN0cnVjdCB0aXBjX2JjYmVhcmVyX3BhaXIgKmJwX2N1cnI7CiAJc3RydWN0IHRpcGNfYmVhcmVyICpiOwogCWludCBiX2luZGV4OwogCWludCBwcmk7CiAKLQl0aXBjX2JjbGlua19sb2NrKCk7CisJdGlwY19iY2xpbmtfbG9jayhuZXQpOwogCiAJaWYgKGFjdGlvbikKIAkJdGlwY19ubWFwX2FkZChubV9wdHIsIG5vZGUpOwpAQCAtNzE4LDcgKzcwNyw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yIChiX2luZGV4ID0gMDsgYl9pbmRleCA8IE1BWF9CRUFSRVJTOyBiX2luZGV4KyspIHsKLQkJYiA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKGJlYXJlcl9saXN0W2JfaW5kZXhdKTsKKwkJYiA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKHRuLT5iZWFyZXJfbGlzdFtiX2luZGV4XSk7CiAJCWlmICghYiB8fCAhYi0+bm9kZXMuY291bnQpCiAJCQljb250aW51ZTsKIApAQCAtNzUzLDcgKzc0Miw3IEBACiAJCWJwX2N1cnIrKzsKIAl9CiAKLQl0aXBjX2JjbGlua191bmxvY2soKTsKKwl0aXBjX2JjbGlua191bmxvY2sobmV0KTsKIH0KIAogc3RhdGljIGludCBfX3RpcGNfbmxfYWRkX2JjX2xpbmtfc3RhdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApAQCAtODA3LDE5ICs3OTYsMjEgQEAKIAlyZXR1cm4gLUVNU0dTSVpFOwogfQogCi1pbnQgdGlwY19ubF9hZGRfYmNfbGluayhzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZykKK2ludCB0aXBjX25sX2FkZF9iY19saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2cpCiB7CiAJaW50IGVycjsKIAl2b2lkICpoZHI7CiAJc3RydWN0IG5sYXR0ciAqYXR0cnM7CiAJc3RydWN0IG5sYXR0ciAqcHJvcDsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CisJc3RydWN0IHRpcGNfbGluayAqYmNsID0gdG4tPmJjbDsKIAogCWlmICghYmNsKQogCQlyZXR1cm4gMDsKIAotCXRpcGNfYmNsaW5rX2xvY2soKTsKKwl0aXBjX2JjbGlua19sb2NrKG5ldCk7CiAKLQloZHIgPSBnZW5sbXNnX3B1dChtc2ctPnNrYiwgbXNnLT5wb3J0aWQsIG1zZy0+c2VxLCAmdGlwY19nZW5sX3YyX2ZhbWlseSwKKwloZHIgPSBnZW5sbXNnX3B1dChtc2ctPnNrYiwgbXNnLT5wb3J0aWQsIG1zZy0+c2VxLCAmdGlwY19nZW5sX2ZhbWlseSwKIAkJCSAgTkxNX0ZfTVVMVEksIFRJUENfTkxfTElOS19HRVQpOwogCWlmICghaGRyKQogCQlyZXR1cm4gLUVNU0dTSVpFOwpAQCAtODUyLDcgKzg0Myw3IEBACiAJaWYgKGVycikKIAkJZ290byBhdHRyX21zZ19mdWxsOwogCi0JdGlwY19iY2xpbmtfdW5sb2NrKCk7CisJdGlwY19iY2xpbmtfdW5sb2NrKG5ldCk7CiAJbmxhX25lc3RfZW5kKG1zZy0+c2tiLCBhdHRycyk7CiAJZ2VubG1zZ19lbmQobXNnLT5za2IsIGhkcik7CiAKQEAgLTg2Myw3OSArODU0LDQ5IEBACiBhdHRyX21zZ19mdWxsOgogCW5sYV9uZXN0X2NhbmNlbChtc2ctPnNrYiwgYXR0cnMpOwogbXNnX2Z1bGw6Ci0JdGlwY19iY2xpbmtfdW5sb2NrKCk7CisJdGlwY19iY2xpbmtfdW5sb2NrKG5ldCk7CiAJZ2VubG1zZ19jYW5jZWwobXNnLT5za2IsIGhkcik7CiAKIAlyZXR1cm4gLUVNU0dTSVpFOwogfQogCi1pbnQgdGlwY19iY2xpbmtfc3RhdHMoY2hhciAqYnVmLCBjb25zdCB1MzIgYnVmX3NpemUpCitpbnQgdGlwY19iY2xpbmtfcmVzZXRfc3RhdHMoc3RydWN0IG5ldCAqbmV0KQogewotCWludCByZXQ7Ci0Jc3RydWN0IHRpcGNfc3RhdHMgKnM7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOworCXN0cnVjdCB0aXBjX2xpbmsgKmJjbCA9IHRuLT5iY2w7CiAKIAlpZiAoIWJjbCkKLQkJcmV0dXJuIDA7Ci0KLQl0aXBjX2JjbGlua19sb2NrKCk7Ci0KLQlzID0gJmJjbC0+c3RhdHM7Ci0KLQlyZXQgPSB0aXBjX3NucHJpbnRmKGJ1ZiwgYnVmX3NpemUsICJMaW5rIDwlcz5cbiIKLQkJCSAgICAiICBXaW5kb3c6JXUgcGFja2V0c1xuIiwKLQkJCSAgICBiY2wtPm5hbWUsIGJjbC0+cXVldWVfbGltaXRbMF0pOwotCXJldCArPSB0aXBjX3NucHJpbnRmKGJ1ZiArIHJldCwgYnVmX3NpemUgLSByZXQsCi0JCQkgICAgICIgIFJYIHBhY2tldHM6JXUgZnJhZ21lbnRzOiV1LyV1IGJ1bmRsZXM6JXUvJXVcbiIsCi0JCQkgICAgIHMtPnJlY3ZfaW5mbywgcy0+cmVjdl9mcmFnbWVudHMsCi0JCQkgICAgIHMtPnJlY3ZfZnJhZ21lbnRlZCwgcy0+cmVjdl9idW5kbGVzLAotCQkJICAgICBzLT5yZWN2X2J1bmRsZWQpOwotCXJldCArPSB0aXBjX3NucHJpbnRmKGJ1ZiArIHJldCwgYnVmX3NpemUgLSByZXQsCi0JCQkgICAgICIgIFRYIHBhY2tldHM6JXUgZnJhZ21lbnRzOiV1LyV1IGJ1bmRsZXM6JXUvJXVcbiIsCi0JCQkgICAgIHMtPnNlbnRfaW5mbywgcy0+c2VudF9mcmFnbWVudHMsCi0JCQkgICAgIHMtPnNlbnRfZnJhZ21lbnRlZCwgcy0+c2VudF9idW5kbGVzLAotCQkJICAgICBzLT5zZW50X2J1bmRsZWQpOwotCXJldCArPSB0aXBjX3NucHJpbnRmKGJ1ZiArIHJldCwgYnVmX3NpemUgLSByZXQsCi0JCQkgICAgICIgIFJYIG5ha3M6JXUgZGVmczoldSBkdXBzOiV1XG4iLAotCQkJICAgICBzLT5yZWN2X25hY2tzLCBzLT5kZWZlcnJlZF9yZWN2LCBzLT5kdXBsaWNhdGVzKTsKLQlyZXQgKz0gdGlwY19zbnByaW50ZihidWYgKyByZXQsIGJ1Zl9zaXplIC0gcmV0LAotCQkJICAgICAiICBUWCBuYWtzOiV1IGFja3M6JXUgZHVwczoldVxuIiwKLQkJCSAgICAgcy0+c2VudF9uYWNrcywgcy0+c2VudF9hY2tzLCBzLT5yZXRyYW5zbWl0dGVkKTsKLQlyZXQgKz0gdGlwY19zbnByaW50ZihidWYgKyByZXQsIGJ1Zl9zaXplIC0gcmV0LAotCQkJICAgICAiICBDb25nZXN0aW9uIGxpbms6JXUgIFNlbmQgcXVldWUgbWF4OiV1IGF2ZzoldVxuIiwKLQkJCSAgICAgcy0+bGlua19jb25ncywgcy0+bWF4X3F1ZXVlX3N6LAotCQkJICAgICBzLT5xdWV1ZV9zel9jb3VudHMgPwotCQkJICAgICAocy0+YWNjdV9xdWV1ZV9zeiAvIHMtPnF1ZXVlX3N6X2NvdW50cykgOiAwKTsKLQotCXRpcGNfYmNsaW5rX3VubG9jaygpOwotCXJldHVybiByZXQ7Ci19Ci0KLWludCB0aXBjX2JjbGlua19yZXNldF9zdGF0cyh2b2lkKQotewotCWlmICghYmNsKQogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCi0JdGlwY19iY2xpbmtfbG9jaygpOworCXRpcGNfYmNsaW5rX2xvY2sobmV0KTsKIAltZW1zZXQoJmJjbC0+c3RhdHMsIDAsIHNpemVvZihiY2wtPnN0YXRzKSk7Ci0JdGlwY19iY2xpbmtfdW5sb2NrKCk7CisJdGlwY19iY2xpbmtfdW5sb2NrKG5ldCk7CiAJcmV0dXJuIDA7CiB9CiAKLWludCB0aXBjX2JjbGlua19zZXRfcXVldWVfbGltaXRzKHUzMiBsaW1pdCkKK2ludCB0aXBjX2JjbGlua19zZXRfcXVldWVfbGltaXRzKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGxpbWl0KQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKKwlzdHJ1Y3QgdGlwY19saW5rICpiY2wgPSB0bi0+YmNsOworCiAJaWYgKCFiY2wpCiAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CiAJaWYgKChsaW1pdCA8IFRJUENfTUlOX0xJTktfV0lOKSB8fCAobGltaXQgPiBUSVBDX01BWF9MSU5LX1dJTikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdGlwY19iY2xpbmtfbG9jaygpOworCXRpcGNfYmNsaW5rX2xvY2sobmV0KTsKIAl0aXBjX2xpbmtfc2V0X3F1ZXVlX2xpbWl0cyhiY2wsIGxpbWl0KTsKLQl0aXBjX2JjbGlua191bmxvY2soKTsKKwl0aXBjX2JjbGlua191bmxvY2sobmV0KTsKIAlyZXR1cm4gMDsKIH0KIAotaW50IHRpcGNfYmNsaW5rX2luaXQodm9pZCkKK2ludCB0aXBjX2JjbGlua19pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CisJc3RydWN0IHRpcGNfYmNiZWFyZXIgKmJjYmVhcmVyOworCXN0cnVjdCB0aXBjX2JjbGluayAqYmNsaW5rOworCXN0cnVjdCB0aXBjX2xpbmsgKmJjbDsKKwogCWJjYmVhcmVyID0ga3phbGxvYyhzaXplb2YoKmJjYmVhcmVyKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFiY2JlYXJlcikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC05NTQsMzAgKzkxNSwzOSBAQAogCXNwaW5fbG9ja19pbml0KCZiY2xpbmstPmxvY2spOwogCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYmNsLT5vdXRxdWV1ZSk7CiAJX19za2JfcXVldWVfaGVhZF9pbml0KCZiY2wtPmRlZmVycmVkX3F1ZXVlKTsKLQlza2JfcXVldWVfaGVhZF9pbml0KCZiY2wtPndhaXRpbmdfc2tzKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZiY2wtPndha2V1cHEpOwogCWJjbC0+bmV4dF9vdXRfbm8gPSAxOwogCXNwaW5fbG9ja19pbml0KCZiY2xpbmstPm5vZGUubG9jayk7Ci0JX19za2JfcXVldWVfaGVhZF9pbml0KCZiY2xpbmstPm5vZGUud2FpdGluZ19za3MpOworCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYmNsaW5rLT5hcnJ2cSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYmNsaW5rLT5pbnB1dHEpOwogCWJjbC0+b3duZXIgPSAmYmNsaW5rLT5ub2RlOworCWJjbC0+b3duZXItPm5ldCA9IG5ldDsKIAliY2wtPm1heF9wa3QgPSBNQVhfUEtUX0RFRkFVTFRfTUNBU1Q7CiAJdGlwY19saW5rX3NldF9xdWV1ZV9saW1pdHMoYmNsLCBCQ0xJTktfV0lOX0RFRkFVTFQpOwogCWJjbC0+YmVhcmVyX2lkID0gTUFYX0JFQVJFUlM7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGJlYXJlcl9saXN0W01BWF9CRUFSRVJTXSwgJmJjYmVhcmVyLT5iZWFyZXIpOworCXJjdV9hc3NpZ25fcG9pbnRlcih0bi0+YmVhcmVyX2xpc3RbTUFYX0JFQVJFUlNdLCAmYmNiZWFyZXItPmJlYXJlcik7CiAJYmNsLT5zdGF0ZSA9IFdPUktJTkdfV09SS0lORzsKKwliY2wtPnBtc2cgPSAoc3RydWN0IHRpcGNfbXNnICopJmJjbC0+cHJvdG9fbXNnOworCW1zZ19zZXRfcHJldm5vZGUoYmNsLT5wbXNnLCB0bi0+b3duX2FkZHIpOwogCXN0cmxjcHkoYmNsLT5uYW1lLCB0aXBjX2JjbGlua19uYW1lLCBUSVBDX01BWF9MSU5LX05BTUUpOworCXRuLT5iY2JlYXJlciA9IGJjYmVhcmVyOworCXRuLT5iY2xpbmsgPSBiY2xpbms7CisJdG4tPmJjbCA9IGJjbDsKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCB0aXBjX2JjbGlua19zdG9wKHZvaWQpCit2b2lkIHRpcGNfYmNsaW5rX3N0b3Aoc3RydWN0IG5ldCAqbmV0KQogewotCXRpcGNfYmNsaW5rX2xvY2soKTsKLQl0aXBjX2xpbmtfcHVyZ2VfcXVldWVzKGJjbCk7Ci0JdGlwY19iY2xpbmtfdW5sb2NrKCk7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOwogCi0JUkNVX0lOSVRfUE9JTlRFUihiZWFyZXJfbGlzdFtCQ0JFQVJFUl0sIE5VTEwpOworCXRpcGNfYmNsaW5rX2xvY2sobmV0KTsKKwl0aXBjX2xpbmtfcHVyZ2VfcXVldWVzKHRuLT5iY2wpOworCXRpcGNfYmNsaW5rX3VubG9jayhuZXQpOworCisJUkNVX0lOSVRfUE9JTlRFUih0bi0+YmVhcmVyX2xpc3RbQkNCRUFSRVJdLCBOVUxMKTsKIAlzeW5jaHJvbml6ZV9uZXQoKTsKLQlrZnJlZShiY2JlYXJlcik7Ci0Ja2ZyZWUoYmNsaW5rKTsKKwlrZnJlZSh0bi0+YmNiZWFyZXIpOworCWtmcmVlKHRuLT5iY2xpbmspOwogfQogCiAvKioKQEAgLTEwMzcsNTAgKzEwMDcsMyBAQAogCQl9CiAJfQogfQotCi0vKioKLSAqIHRpcGNfcG9ydF9saXN0X2FkZCAtIGFkZCBhIHBvcnQgdG8gYSBwb3J0IGxpc3QsIGVuc3VyaW5nIG5vIGR1cGxpY2F0ZXMKLSAqLwotdm9pZCB0aXBjX3BvcnRfbGlzdF9hZGQoc3RydWN0IHRpcGNfcG9ydF9saXN0ICpwbF9wdHIsIHUzMiBwb3J0KQotewotCXN0cnVjdCB0aXBjX3BvcnRfbGlzdCAqaXRlbSA9IHBsX3B0cjsKLQlpbnQgaTsKLQlpbnQgaXRlbV9zeiA9IFBMU0laRTsKLQlpbnQgY250ID0gcGxfcHRyLT5jb3VudDsKLQotCWZvciAoOyA7IGNudCAtPSBpdGVtX3N6LCBpdGVtID0gaXRlbS0+bmV4dCkgewotCQlpZiAoY250IDwgUExTSVpFKQotCQkJaXRlbV9zeiA9IGNudDsKLQkJZm9yIChpID0gMDsgaSA8IGl0ZW1fc3o7IGkrKykKLQkJCWlmIChpdGVtLT5wb3J0c1tpXSA9PSBwb3J0KQotCQkJCXJldHVybjsKLQkJaWYgKGkgPCBQTFNJWkUpIHsKLQkJCWl0ZW0tPnBvcnRzW2ldID0gcG9ydDsKLQkJCXBsX3B0ci0+Y291bnQrKzsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoIWl0ZW0tPm5leHQpIHsKLQkJCWl0ZW0tPm5leHQgPSBrbWFsbG9jKHNpemVvZigqaXRlbSksIEdGUF9BVE9NSUMpOwotCQkJaWYgKCFpdGVtLT5uZXh0KSB7Ci0JCQkJcHJfd2FybigiSW5jb21wbGV0ZSBtdWx0aWNhc3QgZGVsaXZlcnksIG5vIG1lbW9yeVxuIik7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJaXRlbS0+bmV4dC0+bmV4dCA9IE5VTEw7Ci0JCX0KLQl9Ci19Ci0KLS8qKgotICogdGlwY19wb3J0X2xpc3RfZnJlZSAtIGZyZWUgZHluYW1pY2FsbHkgY3JlYXRlZCBlbnRyaWVzIGluIHBvcnRfbGlzdCBjaGFpbgotICoKLSAqLwotdm9pZCB0aXBjX3BvcnRfbGlzdF9mcmVlKHN0cnVjdCB0aXBjX3BvcnRfbGlzdCAqcGxfcHRyKQotewotCXN0cnVjdCB0aXBjX3BvcnRfbGlzdCAqaXRlbTsKLQlzdHJ1Y3QgdGlwY19wb3J0X2xpc3QgKm5leHQ7Ci0KLQlmb3IgKGl0ZW0gPSBwbF9wdHItPm5leHQ7IGl0ZW07IGl0ZW0gPSBuZXh0KSB7Ci0JCW5leHQgPSBpdGVtLT5uZXh0OwotCQlrZnJlZShpdGVtKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iY2FzdC5oIGIvbmV0L3RpcGMvYmNhc3QuaAppbmRleCA2NDRkNzkxLi40M2YzOTdmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9iY2FzdC5oCisrKyBiL25ldC90aXBjL2JjYXN0LmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogbmV0L3RpcGMvYmNhc3QuaDogSW5jbHVkZSBmaWxlIGZvciBUSVBDIGJyb2FkY2FzdCBjb2RlCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDYsIDIwMTQsIEVyaWNzc29uIEFCCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNiwgMjAxNC0yMDE1LCBFcmljc3NvbiBBQgogICogQ29weXJpZ2h0IChjKSAyMDA1LCAyMDEwLTIwMTEsIFdpbmQgUml2ZXIgU3lzdGVtcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zNywzOSArMzcsNzMgQEAKICNpZm5kZWYgX1RJUENfQkNBU1RfSAogI2RlZmluZSBfVElQQ19CQ0FTVF9ICiAKLSNpbmNsdWRlICJuZXRsaW5rLmgiCi0KLSNkZWZpbmUgTUFYX05PREVTIDQwOTYKLSNkZWZpbmUgV1NJWkUgMzIKLSNkZWZpbmUgVElQQ19CQ0xJTktfUkVTRVQgMQorI2luY2x1ZGUgPGxpbnV4L3RpcGNfY29uZmlnLmg+CisjaW5jbHVkZSAibGluay5oIgorI2luY2x1ZGUgIm5vZGUuaCIKIAogLyoqCi0gKiBzdHJ1Y3QgdGlwY19ub2RlX21hcCAtIHNldCBvZiBub2RlIGlkZW50aWZpZXJzCi0gKiBAY291bnQ6ICMgb2Ygbm9kZXMgaW4gc2V0Ci0gKiBAbWFwOiBiaXRtYXAgb2Ygbm9kZSBpZGVudGlmaWVycyB0aGF0IGFyZSBpbiB0aGUgc2V0CisgKiBzdHJ1Y3QgdGlwY19iY2JlYXJlcl9wYWlyIC0gYSBwYWlyIG9mIGJlYXJlcnMgdXNlZCBieSBicm9hZGNhc3QgbGluaworICogQHByaW1hcnk6IHBvaW50ZXIgdG8gcHJpbWFyeSBiZWFyZXIKKyAqIEBzZWNvbmRhcnk6IHBvaW50ZXIgdG8gc2Vjb25kYXJ5IGJlYXJlcgorICoKKyAqIEJlYXJlcnMgbXVzdCBoYXZlIHNhbWUgcHJpb3JpdHkgYW5kIHNhbWUgc2V0IG9mIHJlYWNoYWJsZSBkZXN0aW5hdGlvbnMKKyAqIHRvIGJlIHBhaXJlZC4KICAqLwotc3RydWN0IHRpcGNfbm9kZV9tYXAgewotCXUzMiBjb3VudDsKLQl1MzIgbWFwW01BWF9OT0RFUyAvIFdTSVpFXTsKKworc3RydWN0IHRpcGNfYmNiZWFyZXJfcGFpciB7CisJc3RydWN0IHRpcGNfYmVhcmVyICpwcmltYXJ5OworCXN0cnVjdCB0aXBjX2JlYXJlciAqc2Vjb25kYXJ5OwogfTsKIAotI2RlZmluZSBQTFNJWkUgMzIKKyNkZWZpbmUgVElQQ19CQ0xJTktfUkVTRVQJMQorI2RlZmluZQlCQ0JFQVJFUgkJTUFYX0JFQVJFUlMKIAogLyoqCi0gKiBzdHJ1Y3QgdGlwY19wb3J0X2xpc3QgLSBzZXQgb2Ygbm9kZSBsb2NhbCBkZXN0aW5hdGlvbiBwb3J0cwotICogQGNvdW50OiAjIG9mIHBvcnRzIGluIHNldCAob25seSB2YWxpZCBmb3IgZmlyc3QgZW50cnkgaW4gbGlzdCkKLSAqIEBuZXh0OiBwb2ludGVyIHRvIG5leHQgZW50cnkgaW4gbGlzdAotICogQHBvcnRzOiBhcnJheSBvZiBwb3J0IHJlZmVyZW5jZXMKKyAqIHN0cnVjdCB0aXBjX2JjYmVhcmVyIC0gYmVhcmVyIHVzZWQgYnkgYnJvYWRjYXN0IGxpbmsKKyAqIEBiZWFyZXI6IChub24tc3RhbmRhcmQpIGJyb2FkY2FzdCBiZWFyZXIgc3RydWN0dXJlCisgKiBAbWVkaWE6IChub24tc3RhbmRhcmQpIGJyb2FkY2FzdCBtZWRpYSBzdHJ1Y3R1cmUKKyAqIEBicGFpcnM6IGFycmF5IG9mIGJlYXJlciBwYWlycworICogQGJwYWlyc190ZW1wOiB0ZW1wb3JhcnkgYXJyYXkgb2YgYmVhcmVyIHBhaXJzIHVzZWQgYnkgdGlwY19iY2JlYXJlcl9zb3J0KCkKKyAqIEByZW1haW5zOiB0ZW1wb3Jhcnkgbm9kZSBtYXAgdXNlZCBieSB0aXBjX2JjYmVhcmVyX3NlbmQoKQorICogQHJlbWFpbnNfbmV3OiB0ZW1wb3Jhcnkgbm9kZSBtYXAgdXNlZCB0aXBjX2JjYmVhcmVyX3NlbmQoKQorICoKKyAqIE5vdGU6IFRoZSBmaWVsZHMgbGFiZWxsZWQgInRlbXBvcmFyeSIgYXJlIGluY29ycG9yYXRlZCBpbnRvIHRoZSBiZWFyZXIKKyAqIHRvIGF2b2lkIGNvbnN1bWluZyBwb3RlbnRpYWxseSBsaW1pdGVkIHN0YWNrIHNwYWNlIHRocm91Z2ggdGhlIHVzZSBvZgorICogbGFyZ2UgbG9jYWwgdmFyaWFibGVzIHdpdGhpbiBtdWx0aWNhc3Qgcm91dGluZXMuICBDb25jdXJyZW50IGFjY2VzcyBpcworICogcHJldmVudGVkIHRocm91Z2ggdXNlIG9mIHRoZSBzcGlubG9jayAiYmNsaW5rX2xvY2siLgogICovCi1zdHJ1Y3QgdGlwY19wb3J0X2xpc3QgewotCWludCBjb3VudDsKLQlzdHJ1Y3QgdGlwY19wb3J0X2xpc3QgKm5leHQ7Ci0JdTMyIHBvcnRzW1BMU0laRV07CitzdHJ1Y3QgdGlwY19iY2JlYXJlciB7CisJc3RydWN0IHRpcGNfYmVhcmVyIGJlYXJlcjsKKwlzdHJ1Y3QgdGlwY19tZWRpYSBtZWRpYTsKKwlzdHJ1Y3QgdGlwY19iY2JlYXJlcl9wYWlyIGJwYWlyc1tNQVhfQkVBUkVSU107CisJc3RydWN0IHRpcGNfYmNiZWFyZXJfcGFpciBicGFpcnNfdGVtcFtUSVBDX01BWF9MSU5LX1BSSSArIDFdOworCXN0cnVjdCB0aXBjX25vZGVfbWFwIHJlbWFpbnM7CisJc3RydWN0IHRpcGNfbm9kZV9tYXAgcmVtYWluc19uZXc7CiB9OwogCisvKioKKyAqIHN0cnVjdCB0aXBjX2JjbGluayAtIGxpbmsgdXNlZCBmb3IgYnJvYWRjYXN0IG1lc3NhZ2VzCisgKiBAbG9jazogc3BpbmxvY2sgZ292ZXJuaW5nIGFjY2VzcyB0byBzdHJ1Y3R1cmUKKyAqIEBsaW5rOiAobm9uLXN0YW5kYXJkKSBicm9hZGNhc3QgbGluayBzdHJ1Y3R1cmUKKyAqIEBub2RlOiAobm9uLXN0YW5kYXJkKSBub2RlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYidjYXN0IGxpbmsncyBwZWVyIG5vZGUKKyAqIEBmbGFnczogcmVwcmVzZW50IGJjbGluayBzdGF0ZXMKKyAqIEBiY2FzdF9ub2RlczogbWFwIG9mIGJyb2FkY2FzdC1jYXBhYmxlIG5vZGVzCisgKiBAcmV0cmFuc21pdF90bzogbm9kZSB0aGF0IG1vc3QgcmVjZW50bHkgcmVxdWVzdGVkIGEgcmV0cmFuc21pdAorICoKKyAqIEhhbmRsZXMgc2VxdWVuY2UgbnVtYmVyaW5nLCBmcmFnbWVudGF0aW9uLCBidW5kbGluZywgZXRjLgorICovCitzdHJ1Y3QgdGlwY19iY2xpbmsgeworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgdGlwY19saW5rIGxpbms7CisJc3RydWN0IHRpcGNfbm9kZSBub2RlOworCXVuc2lnbmVkIGludCBmbGFnczsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGFycnZxOworCXN0cnVjdCBza19idWZmX2hlYWQgaW5wdXRxOworCXN0cnVjdCB0aXBjX25vZGVfbWFwIGJjYXN0X25vZGVzOworCXN0cnVjdCB0aXBjX25vZGUgKnJldHJhbnNtaXRfdG87Cit9OwogCiBzdHJ1Y3QgdGlwY19ub2RlOwotCiBleHRlcm4gY29uc3QgY2hhciB0aXBjX2JjbGlua19uYW1lW107CiAKIC8qKgpAQCAtODEsMjcgKzExNSwyNiBAQAogCXJldHVybiAhbWVtY21wKG5tX2EsIG5tX2IsIHNpemVvZigqbm1fYSkpOwogfQogCi12b2lkIHRpcGNfcG9ydF9saXN0X2FkZChzdHJ1Y3QgdGlwY19wb3J0X2xpc3QgKnBsX3B0ciwgdTMyIHBvcnQpOwotdm9pZCB0aXBjX3BvcnRfbGlzdF9mcmVlKHN0cnVjdCB0aXBjX3BvcnRfbGlzdCAqcGxfcHRyKTsKLQotaW50IHRpcGNfYmNsaW5rX2luaXQodm9pZCk7Ci12b2lkIHRpcGNfYmNsaW5rX3N0b3Aodm9pZCk7Ci12b2lkIHRpcGNfYmNsaW5rX3NldF9mbGFncyh1bnNpZ25lZCBpbnQgZmxhZ3MpOwotdm9pZCB0aXBjX2JjbGlua19hZGRfbm9kZSh1MzIgYWRkcik7Ci12b2lkIHRpcGNfYmNsaW5rX3JlbW92ZV9ub2RlKHUzMiBhZGRyKTsKLXN0cnVjdCB0aXBjX25vZGUgKnRpcGNfYmNsaW5rX3JldHJhbnNtaXRfdG8odm9pZCk7CitpbnQgdGlwY19iY2xpbmtfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpOwordm9pZCB0aXBjX2JjbGlua19zdG9wKHN0cnVjdCBuZXQgKm5ldCk7Cit2b2lkIHRpcGNfYmNsaW5rX3NldF9mbGFncyhzdHJ1Y3QgbmV0ICp0biwgdW5zaWduZWQgaW50IGZsYWdzKTsKK3ZvaWQgdGlwY19iY2xpbmtfYWRkX25vZGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcik7Cit2b2lkIHRpcGNfYmNsaW5rX3JlbW92ZV9ub2RlKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpOworc3RydWN0IHRpcGNfbm9kZSAqdGlwY19iY2xpbmtfcmV0cmFuc21pdF90byhzdHJ1Y3QgbmV0ICp0bik7CiB2b2lkIHRpcGNfYmNsaW5rX2Fja25vd2xlZGdlKHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyLCB1MzIgYWNrZWQpOwotdm9pZCB0aXBjX2JjbGlua19yY3Yoc3RydWN0IHNrX2J1ZmYgKmJ1Zik7Ci11MzIgIHRpcGNfYmNsaW5rX2dldF9sYXN0X3NlbnQodm9pZCk7Cit2b2lkIHRpcGNfYmNsaW5rX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpidWYpOwordTMyICB0aXBjX2JjbGlua19nZXRfbGFzdF9zZW50KHN0cnVjdCBuZXQgKm5ldCk7CiB1MzIgIHRpcGNfYmNsaW5rX2Fja3NfbWlzc2luZyhzdHJ1Y3QgdGlwY19ub2RlICpuX3B0cik7Ci12b2lkIHRpcGNfYmNsaW5rX3VwZGF0ZV9saW5rX3N0YXRlKHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyLCB1MzIgbGFzdF9zZW50KTsKLWludCAgdGlwY19iY2xpbmtfc3RhdHMoY2hhciAqc3RhdHNfYnVmLCBjb25zdCB1MzIgYnVmX3NpemUpOwotaW50ICB0aXBjX2JjbGlua19yZXNldF9zdGF0cyh2b2lkKTsKLWludCAgdGlwY19iY2xpbmtfc2V0X3F1ZXVlX2xpbWl0cyh1MzIgbGltaXQpOwotdm9pZCB0aXBjX2JjYmVhcmVyX3NvcnQoc3RydWN0IHRpcGNfbm9kZV9tYXAgKm5tX3B0ciwgdTMyIG5vZGUsIGJvb2wgYWN0aW9uKTsKK3ZvaWQgdGlwY19iY2xpbmtfdXBkYXRlX2xpbmtfc3RhdGUoc3RydWN0IHRpcGNfbm9kZSAqbm9kZSwKKwkJCQkgICB1MzIgbGFzdF9zZW50KTsKK2ludCAgdGlwY19iY2xpbmtfcmVzZXRfc3RhdHMoc3RydWN0IG5ldCAqbmV0KTsKK2ludCAgdGlwY19iY2xpbmtfc2V0X3F1ZXVlX2xpbWl0cyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBsaW1pdCk7Cit2b2lkIHRpcGNfYmNiZWFyZXJfc29ydChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25vZGVfbWFwICpubV9wdHIsCisJCQl1MzIgbm9kZSwgYm9vbCBhY3Rpb24pOwogdWludCAgdGlwY19iY2xpbmtfZ2V0X210dSh2b2lkKTsKLWludCB0aXBjX2JjbGlua194bWl0KHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpOwotdm9pZCB0aXBjX2JjbGlua193YWtldXBfdXNlcnModm9pZCk7Ci1pbnQgdGlwY19ubF9hZGRfYmNfbGluayhzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZyk7CitpbnQgdGlwY19iY2xpbmtfeG1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpOwordm9pZCB0aXBjX2JjbGlua193YWtldXBfdXNlcnMoc3RydWN0IG5ldCAqbmV0KTsKK2ludCB0aXBjX25sX2FkZF9iY19saW5rKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2cpOwordm9pZCB0aXBjX2JjbGlua19pbnB1dChzdHJ1Y3QgbmV0ICpuZXQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC90aXBjL2JlYXJlci5jIGIvbmV0L3RpcGMvYmVhcmVyLmMKaW5kZXggNDYzZGI1Yi4uNDg4NTJjMiAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvYmVhcmVyLmMKKysrIGIvbmV0L3RpcGMvYmVhcmVyLmMKQEAgLTM0LDExICszNCwxMiBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSAiY29yZS5oIgotI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgImJlYXJlci5oIgogI2luY2x1ZGUgImxpbmsuaCIKICNpbmNsdWRlICJkaXNjb3Zlci5oIgorI2luY2x1ZGUgImJjYXN0LmgiCiAKICNkZWZpbmUgTUFYX0FERFJfU1RSIDYwCiAKQEAgLTY3LDkgKzY4LDggQEAKIAlbVElQQ19OTEFfTUVESUFfUFJPUF0JCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfQogfTsKIAotc3RydWN0IHRpcGNfYmVhcmVyIF9fcmN1ICpiZWFyZXJfbGlzdFtNQVhfQkVBUkVSUyArIDFdOwotCi1zdGF0aWMgdm9pZCBiZWFyZXJfZGlzYWJsZShzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyLCBib29sIHNodXR0aW5nX2Rvd24pOworc3RhdGljIHZvaWQgYmVhcmVyX2Rpc2FibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyLAorCQkJICAgYm9vbCBzaHV0dGluZ19kb3duKTsKIAogLyoqCiAgKiB0aXBjX21lZGlhX2ZpbmQgLSBsb2NhdGVzIHNwZWNpZmllZCBtZWRpYSBvYmplY3QgYnkgbmFtZQpAQCAtMTExLDM4ICsxMTEsMTggQEAKIAltX3B0ciA9IG1lZGlhX2ZpbmRfaWQoYS0+bWVkaWFfaWQpOwogCiAJaWYgKG1fcHRyICYmICFtX3B0ci0+YWRkcjJzdHIoYSwgYWRkcl9zdHIsIHNpemVvZihhZGRyX3N0cikpKQotCQlyZXQgPSB0aXBjX3NucHJpbnRmKGJ1ZiwgbGVuLCAiJXMoJXMpIiwgbV9wdHItPm5hbWUsIGFkZHJfc3RyKTsKKwkJcmV0ID0gc2NucHJpbnRmKGJ1ZiwgbGVuLCAiJXMoJXMpIiwgbV9wdHItPm5hbWUsIGFkZHJfc3RyKTsKIAllbHNlIHsKIAkJdTMyIGk7CiAKLQkJcmV0ID0gdGlwY19zbnByaW50ZihidWYsIGxlbiwgIlVOS05PV04oJXUpIiwgYS0+bWVkaWFfaWQpOworCQlyZXQgPSBzY25wcmludGYoYnVmLCBsZW4sICJVTktOT1dOKCV1KSIsIGEtPm1lZGlhX2lkKTsKIAkJZm9yIChpID0gMDsgaSA8IHNpemVvZihhLT52YWx1ZSk7IGkrKykKLQkJCXJldCArPSB0aXBjX3NucHJpbnRmKGJ1ZiAtIHJldCwgbGVuICsgcmV0LAorCQkJcmV0ICs9IHNjbnByaW50ZihidWYgLSByZXQsIGxlbiArIHJldCwKIAkJCQkJICAgICItJTAyeCIsIGEtPnZhbHVlW2ldKTsKIAl9CiB9CiAKIC8qKgotICogdGlwY19tZWRpYV9nZXRfbmFtZXMgLSByZWNvcmQgbmFtZXMgb2YgcmVnaXN0ZXJlZCBtZWRpYSBpbiBidWZmZXIKLSAqLwotc3RydWN0IHNrX2J1ZmYgKnRpcGNfbWVkaWFfZ2V0X25hbWVzKHZvaWQpCi17Ci0Jc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKLQlpbnQgaTsKLQotCWJ1ZiA9IHRpcGNfY2ZnX3JlcGx5X2FsbG9jKE1BWF9NRURJQSAqIFRMVl9TUEFDRShUSVBDX01BWF9NRURJQV9OQU1FKSk7Ci0JaWYgKCFidWYpCi0JCXJldHVybiBOVUxMOwotCi0JZm9yIChpID0gMDsgbWVkaWFfaW5mb19hcnJheVtpXSAhPSBOVUxMOyBpKyspIHsKLQkJdGlwY19jZmdfYXBwZW5kX3RsdihidWYsIFRJUENfVExWX01FRElBX05BTUUsCi0JCQkJICAgIG1lZGlhX2luZm9fYXJyYXlbaV0tPm5hbWUsCi0JCQkJICAgIHN0cmxlbihtZWRpYV9pbmZvX2FycmF5W2ldLT5uYW1lKSArIDEpOwotCX0KLQlyZXR1cm4gYnVmOwotfQotCi0vKioKICAqIGJlYXJlcl9uYW1lX3ZhbGlkYXRlIC0gdmFsaWRhdGUgJiAob3B0aW9uYWxseSkgZGVjb25zdHJ1Y3QgYmVhcmVyIG5hbWUKICAqIEBuYW1lOiBwdHIgdG8gYmVhcmVyIG5hbWUgc3RyaW5nCiAgKiBAbmFtZV9wYXJ0czogcHRyIHRvIGFyZWEgZm9yIGJlYXJlciBuYW1lIGNvbXBvbmVudHMgKG9yIE5VTEwgaWYgbm90IG5lZWRlZCkKQEAgLTE5MCw2OCArMTcwLDQzIEBACiAvKioKICAqIHRpcGNfYmVhcmVyX2ZpbmQgLSBsb2NhdGVzIGJlYXJlciBvYmplY3Qgd2l0aCBtYXRjaGluZyBiZWFyZXIgbmFtZQogICovCi1zdHJ1Y3QgdGlwY19iZWFyZXIgKnRpcGNfYmVhcmVyX2ZpbmQoY29uc3QgY2hhciAqbmFtZSkKK3N0cnVjdCB0aXBjX2JlYXJlciAqdGlwY19iZWFyZXJfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOwogCXN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHI7CiAJdTMyIGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0JFQVJFUlM7IGkrKykgewotCQliX3B0ciA9IHJ0bmxfZGVyZWZlcmVuY2UoYmVhcmVyX2xpc3RbaV0pOworCQliX3B0ciA9IHJ0bmxfZGVyZWZlcmVuY2UodG4tPmJlYXJlcl9saXN0W2ldKTsKIAkJaWYgKGJfcHRyICYmICghc3RyY21wKGJfcHRyLT5uYW1lLCBuYW1lKSkpCiAJCQlyZXR1cm4gYl9wdHI7CiAJfQogCXJldHVybiBOVUxMOwogfQogCi0vKioKLSAqIHRpcGNfYmVhcmVyX2dldF9uYW1lcyAtIHJlY29yZCBuYW1lcyBvZiBiZWFyZXJzIGluIGJ1ZmZlcgotICovCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19iZWFyZXJfZ2V0X25hbWVzKHZvaWQpCit2b2lkIHRpcGNfYmVhcmVyX2FkZF9kZXN0KHN0cnVjdCBuZXQgKm5ldCwgdTMyIGJlYXJlcl9pZCwgdTMyIGRlc3QpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKLQlzdHJ1Y3QgdGlwY19iZWFyZXIgKmI7Ci0JaW50IGksIGo7Ci0KLQlidWYgPSB0aXBjX2NmZ19yZXBseV9hbGxvYyhNQVhfQkVBUkVSUyAqIFRMVl9TUEFDRShUSVBDX01BWF9CRUFSRVJfTkFNRSkpOwotCWlmICghYnVmKQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAoaSA9IDA7IG1lZGlhX2luZm9fYXJyYXlbaV0gIT0gTlVMTDsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBNQVhfQkVBUkVSUzsgaisrKSB7Ci0JCQliID0gcnRubF9kZXJlZmVyZW5jZShiZWFyZXJfbGlzdFtqXSk7Ci0JCQlpZiAoIWIpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoYi0+bWVkaWEgPT0gbWVkaWFfaW5mb19hcnJheVtpXSkgewotCQkJCXRpcGNfY2ZnX2FwcGVuZF90bHYoYnVmLCBUSVBDX1RMVl9CRUFSRVJfTkFNRSwKLQkJCQkJCSAgICBiLT5uYW1lLAotCQkJCQkJICAgIHN0cmxlbihiLT5uYW1lKSArIDEpOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiBidWY7Ci19Ci0KLXZvaWQgdGlwY19iZWFyZXJfYWRkX2Rlc3QodTMyIGJlYXJlcl9pZCwgdTMyIGRlc3QpCi17CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOwogCXN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHI7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JYl9wdHIgPSByY3VfZGVyZWZlcmVuY2VfcnRubChiZWFyZXJfbGlzdFtiZWFyZXJfaWRdKTsKKwliX3B0ciA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKHRuLT5iZWFyZXJfbGlzdFtiZWFyZXJfaWRdKTsKIAlpZiAoYl9wdHIpIHsKLQkJdGlwY19iY2JlYXJlcl9zb3J0KCZiX3B0ci0+bm9kZXMsIGRlc3QsIHRydWUpOworCQl0aXBjX2JjYmVhcmVyX3NvcnQobmV0LCAmYl9wdHItPm5vZGVzLCBkZXN0LCB0cnVlKTsKIAkJdGlwY19kaXNjX2FkZF9kZXN0KGJfcHRyLT5saW5rX3JlcSk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCi12b2lkIHRpcGNfYmVhcmVyX3JlbW92ZV9kZXN0KHUzMiBiZWFyZXJfaWQsIHUzMiBkZXN0KQordm9pZCB0aXBjX2JlYXJlcl9yZW1vdmVfZGVzdChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBiZWFyZXJfaWQsIHUzMiBkZXN0KQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAlzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWJfcHRyID0gcmN1X2RlcmVmZXJlbmNlX3J0bmwoYmVhcmVyX2xpc3RbYmVhcmVyX2lkXSk7CisJYl9wdHIgPSByY3VfZGVyZWZlcmVuY2VfcnRubCh0bi0+YmVhcmVyX2xpc3RbYmVhcmVyX2lkXSk7CiAJaWYgKGJfcHRyKSB7Ci0JCXRpcGNfYmNiZWFyZXJfc29ydCgmYl9wdHItPm5vZGVzLCBkZXN0LCBmYWxzZSk7CisJCXRpcGNfYmNiZWFyZXJfc29ydChuZXQsICZiX3B0ci0+bm9kZXMsIGRlc3QsIGZhbHNlKTsKIAkJdGlwY19kaXNjX3JlbW92ZV9kZXN0KGJfcHRyLT5saW5rX3JlcSk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMjYwLDggKzIxNSwxMCBAQAogLyoqCiAgKiB0aXBjX2VuYWJsZV9iZWFyZXIgLSBlbmFibGUgYmVhcmVyIHdpdGggdGhlIGdpdmVuIG5hbWUKICAqLwotaW50IHRpcGNfZW5hYmxlX2JlYXJlcihjb25zdCBjaGFyICpuYW1lLCB1MzIgZGlzY19kb21haW4sIHUzMiBwcmlvcml0eSkKK3N0YXRpYyBpbnQgdGlwY19lbmFibGVfYmVhcmVyKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgIHUzMiBkaXNjX2RvbWFpbiwgdTMyIHByaW9yaXR5KQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAlzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyOwogCXN0cnVjdCB0aXBjX21lZGlhICptX3B0cjsKIAlzdHJ1Y3QgdGlwY19iZWFyZXJfbmFtZXMgYl9uYW1lczsKQEAgLTI3MSw3ICsyMjgsNyBAQAogCXUzMiBpOwogCWludCByZXMgPSAtRUlOVkFMOwogCi0JaWYgKCF0aXBjX293bl9hZGRyKSB7CisJaWYgKCF0bi0+b3duX2FkZHIpIHsKIAkJcHJfd2FybigiQmVhcmVyIDwlcz4gcmVqZWN0ZWQsIG5vdCBzdXBwb3J0ZWQgaW4gc3RhbmRhbG9uZSBtb2RlXG4iLAogCQkJbmFtZSk7CiAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CkBAIC0yODEsMTEgKzIzOCwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHRpcGNfYWRkcl9kb21haW5fdmFsaWQoZGlzY19kb21haW4pICYmCi0JICAgIChkaXNjX2RvbWFpbiAhPSB0aXBjX293bl9hZGRyKSkgewotCQlpZiAodGlwY19pbl9zY29wZShkaXNjX2RvbWFpbiwgdGlwY19vd25fYWRkcikpIHsKLQkJCWRpc2NfZG9tYWluID0gdGlwY19vd25fYWRkciAmIFRJUENfQ0xVU1RFUl9NQVNLOworCSAgICAoZGlzY19kb21haW4gIT0gdG4tPm93bl9hZGRyKSkgeworCQlpZiAodGlwY19pbl9zY29wZShkaXNjX2RvbWFpbiwgdG4tPm93bl9hZGRyKSkgeworCQkJZGlzY19kb21haW4gPSB0bi0+b3duX2FkZHIgJiBUSVBDX0NMVVNURVJfTUFTSzsKIAkJCXJlcyA9IDA7ICAgLyogYWNjZXB0IGFueSBub2RlIGluIG93biBjbHVzdGVyICovCi0JCX0gZWxzZSBpZiAoaW5fb3duX2NsdXN0ZXJfZXhhY3QoZGlzY19kb21haW4pKQorCQl9IGVsc2UgaWYgKGluX293bl9jbHVzdGVyX2V4YWN0KG5ldCwgZGlzY19kb21haW4pKQogCQkJcmVzID0gMDsgICAvKiBhY2NlcHQgc3BlY2lmaWVkIG5vZGUgaW4gb3duIGNsdXN0ZXIgKi8KIAl9CiAJaWYgKHJlcykgewpAQCAtMzEzLDcgKzI3MCw3IEBACiAJYmVhcmVyX2lkID0gTUFYX0JFQVJFUlM7CiAJd2l0aF90aGlzX3ByaW8gPSAxOwogCWZvciAoaSA9IE1BWF9CRUFSRVJTOyBpLS0gIT0gMDsgKSB7Ci0JCWJfcHRyID0gcnRubF9kZXJlZmVyZW5jZShiZWFyZXJfbGlzdFtpXSk7CisJCWJfcHRyID0gcnRubF9kZXJlZmVyZW5jZSh0bi0+YmVhcmVyX2xpc3RbaV0pOwogCQlpZiAoIWJfcHRyKSB7CiAJCQliZWFyZXJfaWQgPSBpOwogCQkJY29udGludWU7CkBAIC0zNDcsNyArMzA0LDcgQEAKIAogCXN0cmNweShiX3B0ci0+bmFtZSwgbmFtZSk7CiAJYl9wdHItPm1lZGlhID0gbV9wdHI7Ci0JcmVzID0gbV9wdHItPmVuYWJsZV9tZWRpYShiX3B0cik7CisJcmVzID0gbV9wdHItPmVuYWJsZV9tZWRpYShuZXQsIGJfcHRyKTsKIAlpZiAocmVzKSB7CiAJCXByX3dhcm4oIkJlYXJlciA8JXM+IHJlamVjdGVkLCBlbmFibGUgZmFpbHVyZSAoJWQpXG4iLAogCQkJbmFtZSwgLXJlcyk7CkBAIC0zNjEsMTUgKzMxOCwxNSBAQAogCWJfcHRyLT5uZXRfcGxhbmUgPSBiZWFyZXJfaWQgKyAnQSc7CiAJYl9wdHItPnByaW9yaXR5ID0gcHJpb3JpdHk7CiAKLQlyZXMgPSB0aXBjX2Rpc2NfY3JlYXRlKGJfcHRyLCAmYl9wdHItPmJjYXN0X2FkZHIpOworCXJlcyA9IHRpcGNfZGlzY19jcmVhdGUobmV0LCBiX3B0ciwgJmJfcHRyLT5iY2FzdF9hZGRyKTsKIAlpZiAocmVzKSB7Ci0JCWJlYXJlcl9kaXNhYmxlKGJfcHRyLCBmYWxzZSk7CisJCWJlYXJlcl9kaXNhYmxlKG5ldCwgYl9wdHIsIGZhbHNlKTsKIAkJcHJfd2FybigiQmVhcmVyIDwlcz4gcmVqZWN0ZWQsIGRpc2NvdmVyeSBvYmplY3QgY3JlYXRpb24gZmFpbGVkXG4iLAogCQkJbmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJjdV9hc3NpZ25fcG9pbnRlcihiZWFyZXJfbGlzdFtiZWFyZXJfaWRdLCBiX3B0cik7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHRuLT5iZWFyZXJfbGlzdFtiZWFyZXJfaWRdLCBiX3B0cik7CiAKIAlwcl9pbmZvKCJFbmFibGVkIGJlYXJlciA8JXM+LCBkaXNjb3ZlcnkgZG9tYWluICVzLCBwcmlvcml0eSAldVxuIiwKIAkJbmFtZSwKQEAgLTM4MCwxMSArMzM3LDExIEBACiAvKioKICAqIHRpcGNfcmVzZXRfYmVhcmVyIC0gUmVzZXQgYWxsIGxpbmtzIGVzdGFibGlzaGVkIG92ZXIgdGhpcyBiZWFyZXIKICAqLwotc3RhdGljIGludCB0aXBjX3Jlc2V0X2JlYXJlcihzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyKQorc3RhdGljIGludCB0aXBjX3Jlc2V0X2JlYXJlcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIpCiB7CiAJcHJfaW5mbygiUmVzZXR0aW5nIGJlYXJlciA8JXM+XG4iLCBiX3B0ci0+bmFtZSk7Ci0JdGlwY19saW5rX3Jlc2V0X2xpc3QoYl9wdHItPmlkZW50aXR5KTsKLQl0aXBjX2Rpc2NfcmVzZXQoYl9wdHIpOworCXRpcGNfbGlua19yZXNldF9saXN0KG5ldCwgYl9wdHItPmlkZW50aXR5KTsKKwl0aXBjX2Rpc2NfcmVzZXQobmV0LCBiX3B0cik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5Myw0OSArMzUwLDM1IEBACiAgKgogICogTm90ZTogVGhpcyByb3V0aW5lIGFzc3VtZXMgY2FsbGVyIGhvbGRzIFJUTkwgbG9jay4KICAqLwotc3RhdGljIHZvaWQgYmVhcmVyX2Rpc2FibGUoc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0ciwgYm9vbCBzaHV0dGluZ19kb3duKQorc3RhdGljIHZvaWQgYmVhcmVyX2Rpc2FibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyLAorCQkJICAgYm9vbCBzaHV0dGluZ19kb3duKQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAl1MzIgaTsKIAogCXByX2luZm8oIkRpc2FibGluZyBiZWFyZXIgPCVzPlxuIiwgYl9wdHItPm5hbWUpOwogCWJfcHRyLT5tZWRpYS0+ZGlzYWJsZV9tZWRpYShiX3B0cik7CiAKLQl0aXBjX2xpbmtfZGVsZXRlX2xpc3QoYl9wdHItPmlkZW50aXR5LCBzaHV0dGluZ19kb3duKTsKKwl0aXBjX2xpbmtfZGVsZXRlX2xpc3QobmV0LCBiX3B0ci0+aWRlbnRpdHksIHNodXR0aW5nX2Rvd24pOwogCWlmIChiX3B0ci0+bGlua19yZXEpCiAJCXRpcGNfZGlzY19kZWxldGUoYl9wdHItPmxpbmtfcmVxKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfQkVBUkVSUzsgaSsrKSB7Ci0JCWlmIChiX3B0ciA9PSBydG5sX2RlcmVmZXJlbmNlKGJlYXJlcl9saXN0W2ldKSkgewotCQkJUkNVX0lOSVRfUE9JTlRFUihiZWFyZXJfbGlzdFtpXSwgTlVMTCk7CisJCWlmIChiX3B0ciA9PSBydG5sX2RlcmVmZXJlbmNlKHRuLT5iZWFyZXJfbGlzdFtpXSkpIHsKKwkJCVJDVV9JTklUX1BPSU5URVIodG4tPmJlYXJlcl9saXN0W2ldLCBOVUxMKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCWtmcmVlX3JjdShiX3B0ciwgcmN1KTsKIH0KIAotaW50IHRpcGNfZGlzYWJsZV9iZWFyZXIoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyOwotCWludCByZXM7Ci0KLQliX3B0ciA9IHRpcGNfYmVhcmVyX2ZpbmQobmFtZSk7Ci0JaWYgKGJfcHRyID09IE5VTEwpIHsKLQkJcHJfd2FybigiQXR0ZW1wdCB0byBkaXNhYmxlIHVua25vd24gYmVhcmVyIDwlcz5cbiIsIG5hbWUpOwotCQlyZXMgPSAtRUlOVkFMOwotCX0gZWxzZSB7Ci0JCWJlYXJlcl9kaXNhYmxlKGJfcHRyLCBmYWxzZSk7Ci0JCXJlcyA9IDA7Ci0JfQotCXJldHVybiByZXM7Ci19Ci0KLWludCB0aXBjX2VuYWJsZV9sMl9tZWRpYShzdHJ1Y3QgdGlwY19iZWFyZXIgKmIpCitpbnQgdGlwY19lbmFibGVfbDJfbWVkaWEoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAljaGFyICpkcml2ZXJfbmFtZSA9IHN0cmNocigoY29uc3QgY2hhciAqKWItPm5hbWUsICc6JykgKyAxOwogCiAJLyogRmluZCBkZXZpY2Ugd2l0aCBzcGVjaWZpZWQgbmFtZSAqLwotCWRldiA9IGRldl9nZXRfYnlfbmFtZSgmaW5pdF9uZXQsIGRyaXZlcl9uYW1lKTsKKwlkZXYgPSBkZXZfZ2V0X2J5X25hbWUobmV0LCBkcml2ZXJfbmFtZSk7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC00NzQsOCArNDE3LDggQEAKICAqIEBiX3B0cjogdGhlIGJlYXJlciB0aHJvdWdoIHdoaWNoIHRoZSBwYWNrZXQgaXMgdG8gYmUgc2VudAogICogQGRlc3Q6IHBlZXIgZGVzdGluYXRpb24gYWRkcmVzcwogICovCi1pbnQgdGlwY19sMl9zZW5kX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIsCi0JCSAgICAgc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqZGVzdCkKK2ludCB0aXBjX2wyX3NlbmRfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmJ1ZiwKKwkJICAgICBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIsIHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKmRlc3QpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKmNsb25lOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC01MTEsMTUgKzQ1NCwxNiBAQAogICogVGhlIG1lZGlhIHNlbmQgcm91dGluZSBtdXN0IG5vdCBhbHRlciB0aGUgYnVmZmVyIGJlaW5nIHBhc3NlZCBpbgogICogYXMgaXQgbWF5IGJlIG5lZWRlZCBmb3IgbGF0ZXIgcmV0cmFuc21pc3Npb24hCiAgKi8KLXZvaWQgdGlwY19iZWFyZXJfc2VuZCh1MzIgYmVhcmVyX2lkLCBzdHJ1Y3Qgc2tfYnVmZiAqYnVmLAordm9pZCB0aXBjX2JlYXJlcl9zZW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGJlYXJlcl9pZCwgc3RydWN0IHNrX2J1ZmYgKmJ1ZiwKIAkJICAgICAgc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqZGVzdCkKIHsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CiAJc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0cjsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQliX3B0ciA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKGJlYXJlcl9saXN0W2JlYXJlcl9pZF0pOworCWJfcHRyID0gcmN1X2RlcmVmZXJlbmNlX3J0bmwodG4tPmJlYXJlcl9saXN0W2JlYXJlcl9pZF0pOwogCWlmIChsaWtlbHkoYl9wdHIpKQotCQliX3B0ci0+bWVkaWEtPnNlbmRfbXNnKGJ1ZiwgYl9wdHIsIGRlc3QpOworCQliX3B0ci0+bWVkaWEtPnNlbmRfbXNnKG5ldCwgYnVmLCBiX3B0ciwgZGVzdCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKQEAgLTUzOSwxNyArNDgzLDEyIEBACiB7CiAJc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0cjsKIAotCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkgewotCQlrZnJlZV9za2IoYnVmKTsKLQkJcmV0dXJuIE5FVF9SWF9EUk9QOwotCX0KLQogCXJjdV9yZWFkX2xvY2soKTsKIAliX3B0ciA9IHJjdV9kZXJlZmVyZW5jZV9ydG5sKGRldi0+dGlwY19wdHIpOwogCWlmIChsaWtlbHkoYl9wdHIpKSB7CiAJCWlmIChsaWtlbHkoYnVmLT5wa3RfdHlwZSA8PSBQQUNLRVRfQlJPQURDQVNUKSkgewogCQkJYnVmLT5uZXh0ID0gTlVMTDsKLQkJCXRpcGNfcmN2KGJ1ZiwgYl9wdHIpOworCQkJdGlwY19yY3YoZGV2X25ldChkZXYpLCBidWYsIGJfcHRyKTsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIE5FVF9SWF9TVUNDRVNTOwogCQl9CkBAIC01NzIsMTEgKzUxMSw5IEBACiBzdGF0aWMgaW50IHRpcGNfbDJfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgZXZ0LAogCQkJCXZvaWQgKnB0cikKIHsKLQlzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZXRkZXZfbm90aWZpZXJfaW5mb190b19kZXYocHRyKTsKLQotCWlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgJmluaXRfbmV0KSkKLQkJcmV0dXJuIE5PVElGWV9ET05FOworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoZGV2KTsKKwlzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyOwogCiAJYl9wdHIgPSBydG5sX2RlcmVmZXJlbmNlKGRldi0+dGlwY19wdHIpOwogCWlmICghYl9wdHIpCkBAIC01OTAsMTYgKzUyNywxNiBAQAogCQkJYnJlYWs7CiAJY2FzZSBORVRERVZfRE9XTjoKIAljYXNlIE5FVERFVl9DSEFOR0VNVFU6Ci0JCXRpcGNfcmVzZXRfYmVhcmVyKGJfcHRyKTsKKwkJdGlwY19yZXNldF9iZWFyZXIobmV0LCBiX3B0cik7CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX0NIQU5HRUFERFI6CiAJCWJfcHRyLT5tZWRpYS0+cmF3MmFkZHIoYl9wdHIsICZiX3B0ci0+YWRkciwKIAkJCQkgICAgICAgKGNoYXIgKilkZXYtPmRldl9hZGRyKTsKLQkJdGlwY19yZXNldF9iZWFyZXIoYl9wdHIpOworCQl0aXBjX3Jlc2V0X2JlYXJlcihuZXQsIGJfcHRyKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfVU5SRUdJU1RFUjoKIAljYXNlIE5FVERFVl9DSEFOR0VOQU1FOgotCQliZWFyZXJfZGlzYWJsZShiX3B0ciwgZmFsc2UpOworCQliZWFyZXJfZGlzYWJsZShkZXZfbmV0KGRldiksIGJfcHRyLCBmYWxzZSk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gTk9USUZZX09LOwpAQCAtNjMyLDE2ICs1NjksMTcgQEAKIAlkZXZfcmVtb3ZlX3BhY2soJnRpcGNfcGFja2V0X3R5cGUpOwogfQogCi12b2lkIHRpcGNfYmVhcmVyX3N0b3Aodm9pZCkKK3ZvaWQgdGlwY19iZWFyZXJfc3RvcChzdHJ1Y3QgbmV0ICpuZXQpCiB7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOwogCXN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHI7CiAJdTMyIGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0JFQVJFUlM7IGkrKykgewotCQliX3B0ciA9IHJ0bmxfZGVyZWZlcmVuY2UoYmVhcmVyX2xpc3RbaV0pOworCQliX3B0ciA9IHJ0bmxfZGVyZWZlcmVuY2UodG4tPmJlYXJlcl9saXN0W2ldKTsKIAkJaWYgKGJfcHRyKSB7Ci0JCQliZWFyZXJfZGlzYWJsZShiX3B0ciwgdHJ1ZSk7Ci0JCQliZWFyZXJfbGlzdFtpXSA9IE5VTEw7CisJCQliZWFyZXJfZGlzYWJsZShuZXQsIGJfcHRyLCB0cnVlKTsKKwkJCXRuLT5iZWFyZXJfbGlzdFtpXSA9IE5VTEw7CiAJCX0KIAl9CiB9CkBAIC02NTQsNyArNTkyLDcgQEAKIAlzdHJ1Y3QgbmxhdHRyICphdHRyczsKIAlzdHJ1Y3QgbmxhdHRyICpwcm9wOwogCi0JaGRyID0gZ2VubG1zZ19wdXQobXNnLT5za2IsIG1zZy0+cG9ydGlkLCBtc2ctPnNlcSwgJnRpcGNfZ2VubF92Ml9mYW1pbHksCisJaGRyID0gZ2VubG1zZ19wdXQobXNnLT5za2IsIG1zZy0+cG9ydGlkLCBtc2ctPnNlcSwgJnRpcGNfZ2VubF9mYW1pbHksCiAJCQkgIE5MTV9GX01VTFRJLCBUSVBDX05MX0JFQVJFUl9HRVQpOwogCWlmICghaGRyKQogCQlyZXR1cm4gLUVNU0dTSVpFOwpAQCAtNjk4LDYgKzYzNiw4IEBACiAJaW50IGkgPSBjYi0+YXJnc1swXTsKIAlzdHJ1Y3QgdGlwY19iZWFyZXIgKmJlYXJlcjsKIAlzdHJ1Y3QgdGlwY19ubF9tc2cgbXNnOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAogCWlmIChpID09IE1BWF9CRUFSRVJTKQogCQlyZXR1cm4gMDsKQEAgLTcwOCw3ICs2NDgsNyBAQAogCiAJcnRubF9sb2NrKCk7CiAJZm9yIChpID0gMDsgaSA8IE1BWF9CRUFSRVJTOyBpKyspIHsKLQkJYmVhcmVyID0gcnRubF9kZXJlZmVyZW5jZShiZWFyZXJfbGlzdFtpXSk7CisJCWJlYXJlciA9IHJ0bmxfZGVyZWZlcmVuY2UodG4tPmJlYXJlcl9saXN0W2ldKTsKIAkJaWYgKCFiZWFyZXIpCiAJCQljb250aW51ZTsKIApAQCAtNzMwLDYgKzY3MCw3IEBACiAJc3RydWN0IHRpcGNfYmVhcmVyICpiZWFyZXI7CiAJc3RydWN0IHRpcGNfbmxfbXNnIG1zZzsKIAlzdHJ1Y3QgbmxhdHRyICphdHRyc1tUSVBDX05MQV9CRUFSRVJfTUFYICsgMV07CisJc3RydWN0IG5ldCAqbmV0ID0gZ2VubF9pbmZvX25ldChpbmZvKTsKIAogCWlmICghaW5mby0+YXR0cnNbVElQQ19OTEFfQkVBUkVSXSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NTMsNyArNjk0LDcgQEAKIAltc2cuc2VxID0gaW5mby0+c25kX3NlcTsKIAogCXJ0bmxfbG9jaygpOwotCWJlYXJlciA9IHRpcGNfYmVhcmVyX2ZpbmQobmFtZSk7CisJYmVhcmVyID0gdGlwY19iZWFyZXJfZmluZChuZXQsIG5hbWUpOwogCWlmICghYmVhcmVyKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX291dDsKQEAgLTc3OCw2ICs3MTksNyBAQAogCWNoYXIgKm5hbWU7CiAJc3RydWN0IHRpcGNfYmVhcmVyICpiZWFyZXI7CiAJc3RydWN0IG5sYXR0ciAqYXR0cnNbVElQQ19OTEFfQkVBUkVSX01BWCArIDFdOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCiAJaWYgKCFpbmZvLT5hdHRyc1tUSVBDX05MQV9CRUFSRVJdKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTc5NCwxMyArNzM2LDEzIEBACiAJbmFtZSA9IG5sYV9kYXRhKGF0dHJzW1RJUENfTkxBX0JFQVJFUl9OQU1FXSk7CiAKIAlydG5sX2xvY2soKTsKLQliZWFyZXIgPSB0aXBjX2JlYXJlcl9maW5kKG5hbWUpOworCWJlYXJlciA9IHRpcGNfYmVhcmVyX2ZpbmQobmV0LCBuYW1lKTsKIAlpZiAoIWJlYXJlcikgewogCQlydG5sX3VubG9jaygpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQliZWFyZXJfZGlzYWJsZShiZWFyZXIsIGZhbHNlKTsKKwliZWFyZXJfZGlzYWJsZShuZXQsIGJlYXJlciwgZmFsc2UpOwogCXJ0bmxfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKQEAgLTgxMSwxMSArNzUzLDEzIEBACiAJaW50IGVycjsKIAljaGFyICpiZWFyZXI7CiAJc3RydWN0IG5sYXR0ciAqYXR0cnNbVElQQ19OTEFfQkVBUkVSX01BWCArIDFdOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAl1MzIgZG9tYWluOwogCXUzMiBwcmlvOwogCiAJcHJpbyA9IFRJUENfTUVESUFfTElOS19QUkk7Ci0JZG9tYWluID0gdGlwY19vd25fYWRkciAmIFRJUENfQ0xVU1RFUl9NQVNLOworCWRvbWFpbiA9IHRuLT5vd25fYWRkciAmIFRJUENfQ0xVU1RFUl9NQVNLOwogCiAJaWYgKCFpbmZvLT5hdHRyc1tUSVBDX05MQV9CRUFSRVJdKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTg0Nyw3ICs3OTEsNyBAQAogCX0KIAogCXJ0bmxfbG9jaygpOwotCWVyciA9IHRpcGNfZW5hYmxlX2JlYXJlcihiZWFyZXIsIGRvbWFpbiwgcHJpbyk7CisJZXJyID0gdGlwY19lbmFibGVfYmVhcmVyKG5ldCwgYmVhcmVyLCBkb21haW4sIHByaW8pOwogCWlmIChlcnIpIHsKIAkJcnRubF91bmxvY2soKTsKIAkJcmV0dXJuIGVycjsKQEAgLTg2Myw2ICs4MDcsNyBAQAogCWNoYXIgKm5hbWU7CiAJc3RydWN0IHRpcGNfYmVhcmVyICpiOwogCXN0cnVjdCBubGF0dHIgKmF0dHJzW1RJUENfTkxBX0JFQVJFUl9NQVggKyAxXTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBnZW5sX2luZm9fbmV0KGluZm8pOwogCiAJaWYgKCFpbmZvLT5hdHRyc1tUSVBDX05MQV9CRUFSRVJdKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTg3OCw3ICs4MjMsNyBAQAogCW5hbWUgPSBubGFfZGF0YShhdHRyc1tUSVBDX05MQV9CRUFSRVJfTkFNRV0pOwogCiAJcnRubF9sb2NrKCk7Ci0JYiA9IHRpcGNfYmVhcmVyX2ZpbmQobmFtZSk7CisJYiA9IHRpcGNfYmVhcmVyX2ZpbmQobmV0LCBuYW1lKTsKIAlpZiAoIWIpIHsKIAkJcnRubF91bmxvY2soKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC05MTMsNyArODU4LDcgQEAKIAlzdHJ1Y3QgbmxhdHRyICphdHRyczsKIAlzdHJ1Y3QgbmxhdHRyICpwcm9wOwogCi0JaGRyID0gZ2VubG1zZ19wdXQobXNnLT5za2IsIG1zZy0+cG9ydGlkLCBtc2ctPnNlcSwgJnRpcGNfZ2VubF92Ml9mYW1pbHksCisJaGRyID0gZ2VubG1zZ19wdXQobXNnLT5za2IsIG1zZy0+cG9ydGlkLCBtc2ctPnNlcSwgJnRpcGNfZ2VubF9mYW1pbHksCiAJCQkgIE5MTV9GX01VTFRJLCBUSVBDX05MX01FRElBX0dFVCk7CiAJaWYgKCFoZHIpCiAJCXJldHVybiAtRU1TR1NJWkU7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9iZWFyZXIuaCBiL25ldC90aXBjL2JlYXJlci5oCmluZGV4IDJjMTIzMGEuLjZiMTc3OTUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2JlYXJlci5oCisrKyBiL25ldC90aXBjL2JlYXJlci5oCkBAIC0zNywxMiArMzcsMTMgQEAKICNpZm5kZWYgX1RJUENfQkVBUkVSX0gKICNkZWZpbmUgX1RJUENfQkVBUkVSX0gKIAotI2luY2x1ZGUgImJjYXN0LmgiCiAjaW5jbHVkZSAibmV0bGluay5oIgogI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KIAogI2RlZmluZSBNQVhfQkVBUkVSUwkyCiAjZGVmaW5lIE1BWF9NRURJQQkyCisjZGVmaW5lIE1BWF9OT0RFUwk0MDk2CisjZGVmaW5lIFdTSVpFCQkzMgogCiAvKiBJZGVudGlmaWVycyBhc3NvY2lhdGVkIHdpdGggVElQQyBtZXNzYWdlIGhlYWRlciBtZWRpYSBhZGRyZXNzIGluZm8KICAqIC0gYWRkcmVzcyBpbmZvIGZpZWxkIGlzIDMyIGJ5dGVzIGxvbmcKQEAgLTU5LDYgKzYwLDE2IEBACiAjZGVmaW5lIFRJUENfTUVESUFfVFlQRV9JQgkyCiAKIC8qKgorICogc3RydWN0IHRpcGNfbm9kZV9tYXAgLSBzZXQgb2Ygbm9kZSBpZGVudGlmaWVycworICogQGNvdW50OiAjIG9mIG5vZGVzIGluIHNldAorICogQG1hcDogYml0bWFwIG9mIG5vZGUgaWRlbnRpZmllcnMgdGhhdCBhcmUgaW4gdGhlIHNldAorICovCitzdHJ1Y3QgdGlwY19ub2RlX21hcCB7CisJdTMyIGNvdW50OworCXUzMiBtYXBbTUFYX05PREVTIC8gV1NJWkVdOworfTsKKworLyoqCiAgKiBzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyIC0gZGVzdGluYXRpb24gYWRkcmVzcyB1c2VkIGJ5IFRJUEMgYmVhcmVycwogICogQHZhbHVlOiBhZGRyZXNzIGluZm8gKGZvcm1hdCBkZWZpbmVkIGJ5IG1lZGlhKQogICogQG1lZGlhX2lkOiBUSVBDIG1lZGlhIHR5cGUgaWRlbnRpZmllcgpAQCAtODksMTAgKzEwMCwxMCBAQAogICogQG5hbWU6IG1lZGlhIG5hbWUKICAqLwogc3RydWN0IHRpcGNfbWVkaWEgewotCWludCAoKnNlbmRfbXNnKShzdHJ1Y3Qgc2tfYnVmZiAqYnVmLAorCWludCAoKnNlbmRfbXNnKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpidWYsCiAJCQlzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyLAogCQkJc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqZGVzdCk7Ci0JaW50ICgqZW5hYmxlX21lZGlhKShzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyKTsKKwlpbnQgKCplbmFibGVfbWVkaWEpKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0cik7CiAJdm9pZCAoKmRpc2FibGVfbWVkaWEpKHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIpOwogCWludCAoKmFkZHIyc3RyKShzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyICphZGRyLAogCQkJY2hhciAqc3RyYnVmLApAQCAtMTU3LDE3ICsxNjgsMTEgQEAKIAljaGFyIGlmX25hbWVbVElQQ19NQVhfSUZfTkFNRV07CiB9OwogCi1zdHJ1Y3QgdGlwY19saW5rOwotCi1leHRlcm4gc3RydWN0IHRpcGNfYmVhcmVyIF9fcmN1ICpiZWFyZXJfbGlzdFtdOwotCiAvKgogICogVElQQyByb3V0aW5lcyBhdmFpbGFibGUgdG8gc3VwcG9ydGVkIG1lZGlhIHR5cGVzCiAgKi8KIAotdm9pZCB0aXBjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKnRiX3B0cik7Ci1pbnQgdGlwY19lbmFibGVfYmVhcmVyKGNvbnN0IGNoYXIgKmJlYXJlcl9uYW1lLCB1MzIgZGlzY19kb21haW4sIHUzMiBwcmlvcml0eSk7Ci1pbnQgdGlwY19kaXNhYmxlX2JlYXJlcihjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgdGlwY19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyKTsKIAogLyoKICAqIFJvdXRpbmVzIG1hZGUgYXZhaWxhYmxlIHRvIFRJUEMgYnkgc3VwcG9ydGVkIG1lZGlhIHR5cGVzCkBAIC0xOTEsMjEgKzE5NiwxOSBAQAogaW50IHRpcGNfbWVkaWFfc2V0X3ByaW9yaXR5KGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBuZXdfdmFsdWUpOwogaW50IHRpcGNfbWVkaWFfc2V0X3dpbmRvdyhjb25zdCBjaGFyICpuYW1lLCB1MzIgbmV3X3ZhbHVlKTsKIHZvaWQgdGlwY19tZWRpYV9hZGRyX3ByaW50ZihjaGFyICpidWYsIGludCBsZW4sIHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKmEpOwotc3RydWN0IHNrX2J1ZmYgKnRpcGNfbWVkaWFfZ2V0X25hbWVzKHZvaWQpOwotaW50IHRpcGNfZW5hYmxlX2wyX21lZGlhKHN0cnVjdCB0aXBjX2JlYXJlciAqYik7CitpbnQgdGlwY19lbmFibGVfbDJfbWVkaWEoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIpOwogdm9pZCB0aXBjX2Rpc2FibGVfbDJfbWVkaWEoc3RydWN0IHRpcGNfYmVhcmVyICpiKTsKLWludCB0aXBjX2wyX3NlbmRfbXNnKHN0cnVjdCBza19idWZmICpidWYsIHN0cnVjdCB0aXBjX2JlYXJlciAqYiwKLQkJICAgICBzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyICpkZXN0KTsKK2ludCB0aXBjX2wyX3NlbmRfbXNnKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmJ1ZiwKKwkJICAgICBzdHJ1Y3QgdGlwY19iZWFyZXIgKmIsIHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKmRlc3QpOwogCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19iZWFyZXJfZ2V0X25hbWVzKHZvaWQpOwotdm9pZCB0aXBjX2JlYXJlcl9hZGRfZGVzdCh1MzIgYmVhcmVyX2lkLCB1MzIgZGVzdCk7Ci12b2lkIHRpcGNfYmVhcmVyX3JlbW92ZV9kZXN0KHUzMiBiZWFyZXJfaWQsIHUzMiBkZXN0KTsKLXN0cnVjdCB0aXBjX2JlYXJlciAqdGlwY19iZWFyZXJfZmluZChjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgdGlwY19iZWFyZXJfYWRkX2Rlc3Qoc3RydWN0IG5ldCAqbmV0LCB1MzIgYmVhcmVyX2lkLCB1MzIgZGVzdCk7Cit2b2lkIHRpcGNfYmVhcmVyX3JlbW92ZV9kZXN0KHN0cnVjdCBuZXQgKm5ldCwgdTMyIGJlYXJlcl9pZCwgdTMyIGRlc3QpOworc3RydWN0IHRpcGNfYmVhcmVyICp0aXBjX2JlYXJlcl9maW5kKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7CiBzdHJ1Y3QgdGlwY19tZWRpYSAqdGlwY19tZWRpYV9maW5kKGNvbnN0IGNoYXIgKm5hbWUpOwogaW50IHRpcGNfYmVhcmVyX3NldHVwKHZvaWQpOwogdm9pZCB0aXBjX2JlYXJlcl9jbGVhbnVwKHZvaWQpOwotdm9pZCB0aXBjX2JlYXJlcl9zdG9wKHZvaWQpOwotdm9pZCB0aXBjX2JlYXJlcl9zZW5kKHUzMiBiZWFyZXJfaWQsIHN0cnVjdCBza19idWZmICpidWYsCit2b2lkIHRpcGNfYmVhcmVyX3N0b3Aoc3RydWN0IG5ldCAqbmV0KTsKK3ZvaWQgdGlwY19iZWFyZXJfc2VuZChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBiZWFyZXJfaWQsIHN0cnVjdCBza19idWZmICpidWYsCiAJCSAgICAgIHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKmRlc3QpOwogCiAjZW5kaWYJLyogX1RJUENfQkVBUkVSX0ggKi8KZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvbmZpZy5jIGIvbmV0L3RpcGMvY29uZmlnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3NmY0YzYuLjAwMDAwMDAKLS0tIGEvbmV0L3RpcGMvY29uZmlnLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNDIgKzAsMCBAQAotLyoKLSAqIG5ldC90aXBjL2NvbmZpZy5jOiBUSVBDIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudCBjb2RlCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDYsIEVyaWNzc29uIEFCCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNywgMjAxMC0yMDEzLCBXaW5kIFJpdmVyIFN5c3RlbXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAic29ja2V0LmgiCi0jaW5jbHVkZSAibmFtZV90YWJsZS5oIgotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgInNlcnZlci5oIgotCi0jZGVmaW5lIFJFUExZX1RSVU5DQVRFRCAiPHRydW5jYXRlZD5cbiIKLQotc3RhdGljIGNvbnN0IHZvaWQgKnJlcV90bHZfYXJlYTsJLyogcmVxdWVzdCBtZXNzYWdlIFRMViBhcmVhICovCi1zdGF0aWMgaW50IHJlcV90bHZfc3BhY2U7CQkvKiByZXF1ZXN0IG1lc3NhZ2UgVExWIGFyZWEgc2l6ZSAqLwotc3RhdGljIGludCByZXBfaGVhZHJvb207CQkvKiByZXBseSBtZXNzYWdlIGhlYWRyb29tIHRvIHVzZSAqLwotCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19jZmdfcmVwbHlfYWxsb2MoaW50IHBheWxvYWRfc2l6ZSkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOwotCi0JYnVmID0gYWxsb2Nfc2tiKHJlcF9oZWFkcm9vbSArIHBheWxvYWRfc2l6ZSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGJ1ZikKLQkJc2tiX3Jlc2VydmUoYnVmLCByZXBfaGVhZHJvb20pOwotCXJldHVybiBidWY7Ci19Ci0KLWludCB0aXBjX2NmZ19hcHBlbmRfdGx2KHN0cnVjdCBza19idWZmICpidWYsIGludCB0bHZfdHlwZSwKLQkJCXZvaWQgKnRsdl9kYXRhLCBpbnQgdGx2X2RhdGFfc2l6ZSkKLXsKLQlzdHJ1Y3QgdGx2X2Rlc2MgKnRsdiA9IChzdHJ1Y3QgdGx2X2Rlc2MgKilza2JfdGFpbF9wb2ludGVyKGJ1Zik7Ci0JaW50IG5ld190bHZfc3BhY2UgPSBUTFZfU1BBQ0UodGx2X2RhdGFfc2l6ZSk7Ci0KLQlpZiAoc2tiX3RhaWxyb29tKGJ1ZikgPCBuZXdfdGx2X3NwYWNlKQotCQlyZXR1cm4gMDsKLQlza2JfcHV0KGJ1ZiwgbmV3X3Rsdl9zcGFjZSk7Ci0JdGx2LT50bHZfdHlwZSA9IGh0b25zKHRsdl90eXBlKTsKLQl0bHYtPnRsdl9sZW4gID0gaHRvbnMoVExWX0xFTkdUSCh0bHZfZGF0YV9zaXplKSk7Ci0JaWYgKHRsdl9kYXRhX3NpemUgJiYgdGx2X2RhdGEpCi0JCW1lbWNweShUTFZfREFUQSh0bHYpLCB0bHZfZGF0YSwgdGx2X2RhdGFfc2l6ZSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19jZmdfcmVwbHlfdW5zaWduZWRfdHlwZSh1MTYgdGx2X3R5cGUsIHUzMiB2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOwotCV9fYmUzMiB2YWx1ZV9uZXQ7Ci0KLQlidWYgPSB0aXBjX2NmZ19yZXBseV9hbGxvYyhUTFZfU1BBQ0Uoc2l6ZW9mKHZhbHVlKSkpOwotCWlmIChidWYpIHsKLQkJdmFsdWVfbmV0ID0gaHRvbmwodmFsdWUpOwotCQl0aXBjX2NmZ19hcHBlbmRfdGx2KGJ1ZiwgdGx2X3R5cGUsICZ2YWx1ZV9uZXQsCi0JCQkJICAgIHNpemVvZih2YWx1ZV9uZXQpKTsKLQl9Ci0JcmV0dXJuIGJ1ZjsKLX0KLQotc3RhdGljIHN0cnVjdCBza19idWZmICp0aXBjX2NmZ19yZXBseV91bnNpZ25lZCh1MzIgdmFsdWUpCi17Ci0JcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X3Vuc2lnbmVkX3R5cGUoVElQQ19UTFZfVU5TSUdORUQsIHZhbHVlKTsKLX0KLQotc3RydWN0IHNrX2J1ZmYgKnRpcGNfY2ZnX3JlcGx5X3N0cmluZ190eXBlKHUxNiB0bHZfdHlwZSwgY2hhciAqc3RyaW5nKQotewotCXN0cnVjdCBza19idWZmICpidWY7Ci0JaW50IHN0cmluZ19sZW4gPSBzdHJsZW4oc3RyaW5nKSArIDE7Ci0KLQlidWYgPSB0aXBjX2NmZ19yZXBseV9hbGxvYyhUTFZfU1BBQ0Uoc3RyaW5nX2xlbikpOwotCWlmIChidWYpCi0JCXRpcGNfY2ZnX2FwcGVuZF90bHYoYnVmLCB0bHZfdHlwZSwgc3RyaW5nLCBzdHJpbmdfbGVuKTsKLQlyZXR1cm4gYnVmOwotfQotCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnRpcGNfc2hvd19zdGF0cyh2b2lkKQotewotCXN0cnVjdCBza19idWZmICpidWY7Ci0Jc3RydWN0IHRsdl9kZXNjICpyZXBfdGx2OwotCWNoYXIgKnBiOwotCWludCBwYl9sZW47Ci0JaW50IHN0cl9sZW47Ci0JdTMyIHZhbHVlOwotCi0JaWYgKCFUTFZfQ0hFQ0socmVxX3Rsdl9hcmVhLCByZXFfdGx2X3NwYWNlLCBUSVBDX1RMVl9VTlNJR05FRCkpCi0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfVExWX0VSUk9SKTsKLQotCXZhbHVlID0gbnRvaGwoKih1MzIgKilUTFZfREFUQShyZXFfdGx2X2FyZWEpKTsKLQlpZiAodmFsdWUgIT0gMCkKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZygidW5zdXBwb3J0ZWQgYXJndW1lbnQiKTsKLQotCWJ1ZiA9IHRpcGNfY2ZnX3JlcGx5X2FsbG9jKFRMVl9TUEFDRShVTFRSQV9TVFJJTkdfTUFYX0xFTikpOwotCWlmIChidWYgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXBfdGx2ID0gKHN0cnVjdCB0bHZfZGVzYyAqKWJ1Zi0+ZGF0YTsKLQlwYiA9IFRMVl9EQVRBKHJlcF90bHYpOwotCXBiX2xlbiA9IFVMVFJBX1NUUklOR19NQVhfTEVOOwotCi0Jc3RyX2xlbiA9IHRpcGNfc25wcmludGYocGIsIHBiX2xlbiwgIlRJUEMgdmVyc2lvbiAiIFRJUENfTU9EX1ZFUiAiXG4iKTsKLQlzdHJfbGVuICs9IDE7CS8qIGZvciAiXDAiICovCi0Jc2tiX3B1dChidWYsIFRMVl9TUEFDRShzdHJfbGVuKSk7Ci0JVExWX1NFVChyZXBfdGx2LCBUSVBDX1RMVl9VTFRSQV9TVFJJTkcsIE5VTEwsIHN0cl9sZW4pOwotCi0JcmV0dXJuIGJ1ZjsKLX0KLQotc3RhdGljIHN0cnVjdCBza19idWZmICpjZmdfZW5hYmxlX2JlYXJlcih2b2lkKQotewotCXN0cnVjdCB0aXBjX2JlYXJlcl9jb25maWcgKmFyZ3M7Ci0KLQlpZiAoIVRMVl9DSEVDSyhyZXFfdGx2X2FyZWEsIHJlcV90bHZfc3BhY2UsIFRJUENfVExWX0JFQVJFUl9DT05GSUcpKQotCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX1RMVl9FUlJPUik7Ci0KLQlhcmdzID0gKHN0cnVjdCB0aXBjX2JlYXJlcl9jb25maWcgKilUTFZfREFUQShyZXFfdGx2X2FyZWEpOwotCWlmICh0aXBjX2VuYWJsZV9iZWFyZXIoYXJncy0+bmFtZSwKLQkJCSAgICAgICBudG9obChhcmdzLT5kaXNjX2RvbWFpbiksCi0JCQkgICAgICAgbnRvaGwoYXJncy0+cHJpb3JpdHkpKSkKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZygidW5hYmxlIHRvIGVuYWJsZSBiZWFyZXIiKTsKLQotCXJldHVybiB0aXBjX2NmZ19yZXBseV9ub25lKCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2ZnX2Rpc2FibGVfYmVhcmVyKHZvaWQpCi17Ci0JaWYgKCFUTFZfQ0hFQ0socmVxX3Rsdl9hcmVhLCByZXFfdGx2X3NwYWNlLCBUSVBDX1RMVl9CRUFSRVJfTkFNRSkpCi0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfVExWX0VSUk9SKTsKLQotCWlmICh0aXBjX2Rpc2FibGVfYmVhcmVyKChjaGFyICopVExWX0RBVEEocmVxX3Rsdl9hcmVhKSkpCi0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoInVuYWJsZSB0byBkaXNhYmxlIGJlYXJlciIpOwotCi0JcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X25vbmUoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBza19idWZmICpjZmdfc2V0X293bl9hZGRyKHZvaWQpCi17Ci0JdTMyIGFkZHI7Ci0KLQlpZiAoIVRMVl9DSEVDSyhyZXFfdGx2X2FyZWEsIHJlcV90bHZfc3BhY2UsIFRJUENfVExWX05FVF9BRERSKSkKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19UTFZfRVJST1IpOwotCi0JYWRkciA9IG50b2hsKCooX19iZTMyICopVExWX0RBVEEocmVxX3Rsdl9hcmVhKSk7Ci0JaWYgKGFkZHIgPT0gdGlwY19vd25fYWRkcikKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X25vbmUoKTsKLQlpZiAoIXRpcGNfYWRkcl9ub2RlX3ZhbGlkKGFkZHIpKQotCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX0lOVkFMSURfVkFMVUUKLQkJCQkJCSAgICIgKG5vZGUgYWRkcmVzcykiKTsKLQlpZiAodGlwY19vd25fYWRkcikKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19OT1RfU1VQUE9SVEVECi0JCQkJCQkgICAiIChjYW5ub3QgY2hhbmdlIG5vZGUgYWRkcmVzcyBvbmNlIGFzc2lnbmVkKSIpOwotCWlmICghdGlwY19uZXRfc3RhcnQoYWRkcikpCi0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9ub25lKCk7Ci0KLQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKCJjYW5ub3QgY2hhbmdlIHRvIG5ldHdvcmsgbW9kZSIpOwotfQotCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmNmZ19zZXRfbWF4X3BvcnRzKHZvaWQpCi17Ci0JdTMyIHZhbHVlOwotCi0JaWYgKCFUTFZfQ0hFQ0socmVxX3Rsdl9hcmVhLCByZXFfdGx2X3NwYWNlLCBUSVBDX1RMVl9VTlNJR05FRCkpCi0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfVExWX0VSUk9SKTsKLQl2YWx1ZSA9IG50b2hsKCooX19iZTMyICopVExWX0RBVEEocmVxX3Rsdl9hcmVhKSk7Ci0JaWYgKHZhbHVlID09IHRpcGNfbWF4X3BvcnRzKQotCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfbm9uZSgpOwotCWlmICh2YWx1ZSA8IDEyNyB8fCB2YWx1ZSA+IDY1NTM1KQotCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX0lOVkFMSURfVkFMVUUKLQkJCQkJCSAgICIgKG1heCBwb3J0cyBtdXN0IGJlIDEyNy02NTUzNSkiKTsKLQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX05PVF9TVVBQT1JURUQKLQkJIiAoY2Fubm90IGNoYW5nZSBtYXggcG9ydHMgd2hpbGUgVElQQyBpcyBhY3RpdmUpIik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2ZnX3NldF9uZXRpZCh2b2lkKQotewotCXUzMiB2YWx1ZTsKLQotCWlmICghVExWX0NIRUNLKHJlcV90bHZfYXJlYSwgcmVxX3Rsdl9zcGFjZSwgVElQQ19UTFZfVU5TSUdORUQpKQotCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX1RMVl9FUlJPUik7Ci0JdmFsdWUgPSBudG9obCgqKF9fYmUzMiAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSkpOwotCWlmICh2YWx1ZSA9PSB0aXBjX25ldF9pZCkKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X25vbmUoKTsKLQlpZiAodmFsdWUgPCAxIHx8IHZhbHVlID4gOTk5OSkKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19JTlZBTElEX1ZBTFVFCi0JCQkJCQkgICAiIChuZXR3b3JrIGlkIG11c3QgYmUgMS05OTk5KSIpOwotCWlmICh0aXBjX293bl9hZGRyKQotCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX05PVF9TVVBQT1JURUQKLQkJCSIgKGNhbm5vdCBjaGFuZ2UgbmV0d29yayBpZCBvbmNlIFRJUEMgaGFzIGpvaW5lZCBhIG5ldHdvcmspIik7Ci0JdGlwY19uZXRfaWQgPSB2YWx1ZTsKLQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfbm9uZSgpOwotfQotCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19jZmdfZG9fY21kKHUzMiBvcmlnX25vZGUsIHUxNiBjbWQsIGNvbnN0IHZvaWQgKnJlcXVlc3RfYXJlYSwKLQkJCQlpbnQgcmVxdWVzdF9zcGFjZSwgaW50IHJlcGx5X2hlYWRyb29tKQotewotCXN0cnVjdCBza19idWZmICpyZXBfdGx2X2J1ZjsKLQotCXJ0bmxfbG9jaygpOwotCi0JLyogU2F2ZSByZXF1ZXN0IGFuZCByZXBseSBkZXRhaWxzIGluIGEgd2VsbC1rbm93biBsb2NhdGlvbiAqLwotCXJlcV90bHZfYXJlYSA9IHJlcXVlc3RfYXJlYTsKLQlyZXFfdGx2X3NwYWNlID0gcmVxdWVzdF9zcGFjZTsKLQlyZXBfaGVhZHJvb20gPSByZXBseV9oZWFkcm9vbTsKLQotCS8qIENoZWNrIGNvbW1hbmQgYXV0aG9yaXphdGlvbiAqLwotCWlmIChsaWtlbHkoaW5fb3duX25vZGUob3JpZ19ub2RlKSkpIHsKLQkJLyogY29tbWFuZCBpcyBwZXJtaXR0ZWQgKi8KLQl9IGVsc2UgewotCQlyZXBfdGx2X2J1ZiA9IHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19OT1RfU1VQUE9SVEVECi0JCQkJCQkJICAiIChjYW5ub3QgYmUgZG9uZSByZW1vdGVseSkiKTsKLQkJZ290byBleGl0OwotCX0KLQotCS8qIENhbGwgYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyByb3V0aW5lICovCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFRJUENfQ01EX05PT1A6Ci0JCXJlcF90bHZfYnVmID0gdGlwY19jZmdfcmVwbHlfbm9uZSgpOwotCQlicmVhazsKLQljYXNlIFRJUENfQ01EX0dFVF9OT0RFUzoKLQkJcmVwX3Rsdl9idWYgPSB0aXBjX25vZGVfZ2V0X25vZGVzKHJlcV90bHZfYXJlYSwgcmVxX3Rsdl9zcGFjZSk7Ci0JCWJyZWFrOwotCWNhc2UgVElQQ19DTURfR0VUX0xJTktTOgotCQlyZXBfdGx2X2J1ZiA9IHRpcGNfbm9kZV9nZXRfbGlua3MocmVxX3Rsdl9hcmVhLCByZXFfdGx2X3NwYWNlKTsKLQkJYnJlYWs7Ci0JY2FzZSBUSVBDX0NNRF9TSE9XX0xJTktfU1RBVFM6Ci0JCXJlcF90bHZfYnVmID0gdGlwY19saW5rX2NtZF9zaG93X3N0YXRzKHJlcV90bHZfYXJlYSwgcmVxX3Rsdl9zcGFjZSk7Ci0JCWJyZWFrOwotCWNhc2UgVElQQ19DTURfUkVTRVRfTElOS19TVEFUUzoKLQkJcmVwX3Rsdl9idWYgPSB0aXBjX2xpbmtfY21kX3Jlc2V0X3N0YXRzKHJlcV90bHZfYXJlYSwgcmVxX3Rsdl9zcGFjZSk7Ci0JCWJyZWFrOwotCWNhc2UgVElQQ19DTURfU0hPV19OQU1FX1RBQkxFOgotCQlyZXBfdGx2X2J1ZiA9IHRpcGNfbmFtZXRibF9nZXQocmVxX3Rsdl9hcmVhLCByZXFfdGx2X3NwYWNlKTsKLQkJYnJlYWs7Ci0JY2FzZSBUSVBDX0NNRF9HRVRfQkVBUkVSX05BTUVTOgotCQlyZXBfdGx2X2J1ZiA9IHRpcGNfYmVhcmVyX2dldF9uYW1lcygpOwotCQlicmVhazsKLQljYXNlIFRJUENfQ01EX0dFVF9NRURJQV9OQU1FUzoKLQkJcmVwX3Rsdl9idWYgPSB0aXBjX21lZGlhX2dldF9uYW1lcygpOwotCQlicmVhazsKLQljYXNlIFRJUENfQ01EX1NIT1dfUE9SVFM6Ci0JCXJlcF90bHZfYnVmID0gdGlwY19za19zb2Nrc19zaG93KCk7Ci0JCWJyZWFrOwotCWNhc2UgVElQQ19DTURfU0hPV19TVEFUUzoKLQkJcmVwX3Rsdl9idWYgPSB0aXBjX3Nob3dfc3RhdHMoKTsKLQkJYnJlYWs7Ci0JY2FzZSBUSVBDX0NNRF9TRVRfTElOS19UT0w6Ci0JY2FzZSBUSVBDX0NNRF9TRVRfTElOS19QUkk6Ci0JY2FzZSBUSVBDX0NNRF9TRVRfTElOS19XSU5ET1c6Ci0JCXJlcF90bHZfYnVmID0gdGlwY19saW5rX2NtZF9jb25maWcocmVxX3Rsdl9hcmVhLCByZXFfdGx2X3NwYWNlLCBjbWQpOwotCQlicmVhazsKLQljYXNlIFRJUENfQ01EX0VOQUJMRV9CRUFSRVI6Ci0JCXJlcF90bHZfYnVmID0gY2ZnX2VuYWJsZV9iZWFyZXIoKTsKLQkJYnJlYWs7Ci0JY2FzZSBUSVBDX0NNRF9ESVNBQkxFX0JFQVJFUjoKLQkJcmVwX3Rsdl9idWYgPSBjZmdfZGlzYWJsZV9iZWFyZXIoKTsKLQkJYnJlYWs7Ci0JY2FzZSBUSVBDX0NNRF9TRVRfTk9ERV9BRERSOgotCQlyZXBfdGx2X2J1ZiA9IGNmZ19zZXRfb3duX2FkZHIoKTsKLQkJYnJlYWs7Ci0JY2FzZSBUSVBDX0NNRF9TRVRfTUFYX1BPUlRTOgotCQlyZXBfdGx2X2J1ZiA9IGNmZ19zZXRfbWF4X3BvcnRzKCk7Ci0JCWJyZWFrOwotCWNhc2UgVElQQ19DTURfU0VUX05FVElEOgotCQlyZXBfdGx2X2J1ZiA9IGNmZ19zZXRfbmV0aWQoKTsKLQkJYnJlYWs7Ci0JY2FzZSBUSVBDX0NNRF9HRVRfTUFYX1BPUlRTOgotCQlyZXBfdGx2X2J1ZiA9IHRpcGNfY2ZnX3JlcGx5X3Vuc2lnbmVkKHRpcGNfbWF4X3BvcnRzKTsKLQkJYnJlYWs7Ci0JY2FzZSBUSVBDX0NNRF9HRVRfTkVUSUQ6Ci0JCXJlcF90bHZfYnVmID0gdGlwY19jZmdfcmVwbHlfdW5zaWduZWQodGlwY19uZXRfaWQpOwotCQlicmVhazsKLQljYXNlIFRJUENfQ01EX05PVF9ORVRfQURNSU46Ci0JCXJlcF90bHZfYnVmID0KLQkJCXRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19OT1RfTkVUX0FETUlOKTsKLQkJYnJlYWs7Ci0JY2FzZSBUSVBDX0NNRF9TRVRfTUFYX1pPTkVTOgotCWNhc2UgVElQQ19DTURfR0VUX01BWF9aT05FUzoKLQljYXNlIFRJUENfQ01EX1NFVF9NQVhfU0xBVkVTOgotCWNhc2UgVElQQ19DTURfR0VUX01BWF9TTEFWRVM6Ci0JY2FzZSBUSVBDX0NNRF9TRVRfTUFYX0NMVVNURVJTOgotCWNhc2UgVElQQ19DTURfR0VUX01BWF9DTFVTVEVSUzoKLQljYXNlIFRJUENfQ01EX1NFVF9NQVhfTk9ERVM6Ci0JY2FzZSBUSVBDX0NNRF9HRVRfTUFYX05PREVTOgotCWNhc2UgVElQQ19DTURfU0VUX01BWF9TVUJTQ1I6Ci0JY2FzZSBUSVBDX0NNRF9HRVRfTUFYX1NVQlNDUjoKLQljYXNlIFRJUENfQ01EX1NFVF9NQVhfUFVCTDoKLQljYXNlIFRJUENfQ01EX0dFVF9NQVhfUFVCTDoKLQljYXNlIFRJUENfQ01EX1NFVF9MT0dfU0laRToKLQljYXNlIFRJUENfQ01EX1NFVF9SRU1PVEVfTU5HOgotCWNhc2UgVElQQ19DTURfR0VUX1JFTU9URV9NTkc6Ci0JY2FzZSBUSVBDX0NNRF9EVU1QX0xPRzoKLQkJcmVwX3Rsdl9idWYgPSB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfTk9UX1NVUFBPUlRFRAotCQkJCQkJCSAgIiAob2Jzb2xldGUgY29tbWFuZCkiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmVwX3Rsdl9idWYgPSB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfTk9UX1NVUFBPUlRFRAotCQkJCQkJCSAgIiAodW5rbm93biBjb21tYW5kKSIpOwotCQlicmVhazsKLQl9Ci0KLQlXQVJOX09OKHJlcF90bHZfYnVmLT5sZW4gPiBUTFZfU1BBQ0UoVUxUUkFfU1RSSU5HX01BWF9MRU4pKTsKLQotCS8qIEFwcGVuZCBhbiBlcnJvciBtZXNzYWdlIGlmIHdlIGNhbm5vdCByZXR1cm4gYWxsIHJlcXVlc3RlZCBkYXRhICovCi0JaWYgKHJlcF90bHZfYnVmLT5sZW4gPT0gVExWX1NQQUNFKFVMVFJBX1NUUklOR19NQVhfTEVOKSkgewotCQlpZiAoKihyZXBfdGx2X2J1Zi0+ZGF0YSArIFVMVFJBX1NUUklOR19NQVhfTEVOKSAhPSAnXDAnKQotCQkJc3ByaW50ZihyZXBfdGx2X2J1Zi0+ZGF0YSArIHJlcF90bHZfYnVmLT5sZW4gLQotCQkJCXNpemVvZihSRVBMWV9UUlVOQ0FURUQpIC0gMSwgUkVQTFlfVFJVTkNBVEVEKTsKLQl9Ci0KLQkvKiBSZXR1cm4gcmVwbHkgYnVmZmVyICovCi1leGl0OgotCXJ0bmxfdW5sb2NrKCk7Ci0JcmV0dXJuIHJlcF90bHZfYnVmOwotfQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29uZmlnLmggYi9uZXQvdGlwYy9jb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdiMWJmMS4uMDAwMDAwMAotLS0gYS9uZXQvdGlwYy9jb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qCi0gKiBuZXQvdGlwYy9jb25maWcuaDogSW5jbHVkZSBmaWxlIGZvciBUSVBDIGNvbmZpZ3VyYXRpb24gc2VydmljZSBjb2RlCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDYsIEVyaWNzc29uIEFCCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUsIFdpbmQgUml2ZXIgU3lzdGVtcwotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi0gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQotICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfVElQQ19DT05GSUdfSAotI2RlZmluZSBfVElQQ19DT05GSUdfSAotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpbmNsdWRlICJsaW5rLmgiCi0KLXN0cnVjdCBza19idWZmICp0aXBjX2NmZ19yZXBseV9hbGxvYyhpbnQgcGF5bG9hZF9zaXplKTsKLWludCB0aXBjX2NmZ19hcHBlbmRfdGx2KHN0cnVjdCBza19idWZmICpidWYsIGludCB0bHZfdHlwZSwKLQkJCXZvaWQgKnRsdl9kYXRhLCBpbnQgdGx2X2RhdGFfc2l6ZSk7Ci1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19jZmdfcmVwbHlfc3RyaW5nX3R5cGUodTE2IHRsdl90eXBlLCBjaGFyICpzdHJpbmcpOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp0aXBjX2NmZ19yZXBseV9ub25lKHZvaWQpCi17Ci0JcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2FsbG9jKDApOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICp0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoY2hhciAqc3RyaW5nKQotewotCXJldHVybiB0aXBjX2NmZ19yZXBseV9zdHJpbmdfdHlwZShUSVBDX1RMVl9FUlJPUl9TVFJJTkcsIHN0cmluZyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnRpcGNfY2ZnX3JlcGx5X3VsdHJhX3N0cmluZyhjaGFyICpzdHJpbmcpCi17Ci0JcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X3N0cmluZ190eXBlKFRJUENfVExWX1VMVFJBX1NUUklORywgc3RyaW5nKTsKLX0KLQotc3RydWN0IHNrX2J1ZmYgKnRpcGNfY2ZnX2RvX2NtZCh1MzIgb3JpZ19ub2RlLCB1MTYgY21kLAotCQkJCWNvbnN0IHZvaWQgKnJlcV90bHZfYXJlYSwgaW50IHJlcV90bHZfc3BhY2UsCi0JCQkJaW50IGhlYWRyb29tKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5jIGIvbmV0L3RpcGMvY29yZS5jCmluZGV4IGE1NzM3YjguLjkzNTIwNWUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NvcmUuYworKysgYi9uZXQvdGlwYy9jb3JlLmMKQEAgLTM0LDgyICszNCw4OCBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgIm5hbWVfdGFibGUuaCIKICNpbmNsdWRlICJzdWJzY3IuaCIKLSNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJiZWFyZXIuaCIKKyNpbmNsdWRlICJuZXQuaCIKICNpbmNsdWRlICJzb2NrZXQuaCIKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCi0vKiBnbG9iYWwgdmFyaWFibGVzIHVzZWQgYnkgbXVsdGlwbGUgc3ViLXN5c3RlbXMgd2l0aGluIFRJUEMgKi8KLWludCB0aXBjX3JhbmRvbSBfX3JlYWRfbW9zdGx5OwotCiAvKiBjb25maWd1cmFibGUgVElQQyBwYXJhbWV0ZXJzICovCi11MzIgdGlwY19vd25fYWRkciBfX3JlYWRfbW9zdGx5OwotaW50IHRpcGNfbWF4X3BvcnRzIF9fcmVhZF9tb3N0bHk7CiBpbnQgdGlwY19uZXRfaWQgX19yZWFkX21vc3RseTsKIGludCBzeXNjdGxfdGlwY19ybWVtWzNdIF9fcmVhZF9tb3N0bHk7CS8qIG1pbi9kZWZhdWx0L21heCAqLwogCi0vKioKLSAqIHRpcGNfYnVmX2FjcXVpcmUgLSBjcmVhdGVzIGEgVElQQyBtZXNzYWdlIGJ1ZmZlcgotICogQHNpemU6IG1lc3NhZ2Ugc2l6ZSAoaW5jbHVkaW5nIFRJUEMgaGVhZGVyKQotICoKLSAqIFJldHVybnMgYSBuZXcgYnVmZmVyIHdpdGggZGF0YSBwb2ludGVycyBzZXQgdG8gdGhlIHNwZWNpZmllZCBzaXplLgotICoKLSAqIE5PVEU6IEhlYWRyb29tIGlzIHJlc2VydmVkIHRvIGFsbG93IHByZXBlbmRpbmcgb2YgYSBkYXRhIGxpbmsgaGVhZGVyLgotICogICAgICAgVGhlcmUgbWF5IGFsc28gYmUgdW5yZXF1ZXN0ZWQgdGFpbHJvb20gcHJlc2VudCBhdCB0aGUgYnVmZmVyJ3MgZW5kLgotICovCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19idWZfYWNxdWlyZSh1MzIgc2l6ZSkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCB0aXBjX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGludCBidWZfc2l6ZSA9IChCVUZfSEVBRFJPT00gKyBzaXplICsgMykgJiB+M3U7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOworCWludCBlcnI7CiAKLQlza2IgPSBhbGxvY19za2JfZmNsb25lKGJ1Zl9zaXplLCBHRlBfQVRPTUlDKTsKLQlpZiAoc2tiKSB7Ci0JCXNrYl9yZXNlcnZlKHNrYiwgQlVGX0hFQURST09NKTsKLQkJc2tiX3B1dChza2IsIHNpemUpOwotCQlza2ItPm5leHQgPSBOVUxMOwotCX0KLQlyZXR1cm4gc2tiOworCXRuLT5uZXRfaWQgPSA0NzExOworCXRuLT5vd25fYWRkciA9IDA7CisJZ2V0X3JhbmRvbV9ieXRlcygmdG4tPnJhbmRvbSwgc2l6ZW9mKGludCkpOworCUlOSVRfTElTVF9IRUFEKCZ0bi0+bm9kZV9saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmdG4tPm5vZGVfbGlzdF9sb2NrKTsKKworCWVyciA9IHRpcGNfc2tfcmh0X2luaXQobmV0KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9za19yaHQ7CisKKwllcnIgPSB0aXBjX25hbWV0YmxfaW5pdChuZXQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X25hbWV0Ymw7CisKKwllcnIgPSB0aXBjX3N1YnNjcl9zdGFydChuZXQpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3N1YnNjcjsKKwlyZXR1cm4gMDsKKworb3V0X3N1YnNjcjoKKwl0aXBjX25hbWV0Ymxfc3RvcChuZXQpOworb3V0X25hbWV0Ymw6CisJdGlwY19za19yaHRfZGVzdHJveShuZXQpOworb3V0X3NrX3JodDoKKwlyZXR1cm4gZXJyOwogfQogCi0vKioKLSAqIHRpcGNfY29yZV9zdG9wIC0gc3dpdGNoIFRJUEMgZnJvbSBTSU5HTEUgTk9ERSB0byBOT1QgUlVOTklORyBtb2RlCi0gKi8KLXN0YXRpYyB2b2lkIHRpcGNfY29yZV9zdG9wKHZvaWQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHRpcGNfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewotCXRpcGNfbmV0X3N0b3AoKTsKLQl0aXBjX2JlYXJlcl9jbGVhbnVwKCk7Ci0JdGlwY19uZXRsaW5rX3N0b3AoKTsKLQl0aXBjX3N1YnNjcl9zdG9wKCk7Ci0JdGlwY19uYW1ldGJsX3N0b3AoKTsKLQl0aXBjX3NrX3JlZl90YWJsZV9zdG9wKCk7Ci0JdGlwY19zb2NrZXRfc3RvcCgpOwotCXRpcGNfdW5yZWdpc3Rlcl9zeXNjdGwoKTsKKwl0aXBjX3N1YnNjcl9zdG9wKG5ldCk7CisJdGlwY19uZXRfc3RvcChuZXQpOworCXRpcGNfbmFtZXRibF9zdG9wKG5ldCk7CisJdGlwY19za19yaHRfZGVzdHJveShuZXQpOwogfQogCi0vKioKLSAqIHRpcGNfY29yZV9zdGFydCAtIHN3aXRjaCBUSVBDIGZyb20gTk9UIFJVTk5JTkcgdG8gU0lOR0xFIE5PREUgbW9kZQotICovCi1zdGF0aWMgaW50IHRpcGNfY29yZV9zdGFydCh2b2lkKQorc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyB0aXBjX25ldF9vcHMgPSB7CisJLmluaXQgPSB0aXBjX2luaXRfbmV0LAorCS5leGl0ID0gdGlwY19leGl0X25ldCwKKwkuaWQgICA9ICZ0aXBjX25ldF9pZCwKKwkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdGlwY19uZXQpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdGlwY19pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKIAotCWdldF9yYW5kb21fYnl0ZXMoJnRpcGNfcmFuZG9tLCBzaXplb2YodGlwY19yYW5kb20pKTsKKwlwcl9pbmZvKCJBY3RpdmF0ZWQgKHZlcnNpb24gIiBUSVBDX01PRF9WRVIgIilcbiIpOwogCi0JZXJyID0gdGlwY19za19yZWZfdGFibGVfaW5pdCh0aXBjX21heF9wb3J0cywgdGlwY19yYW5kb20pOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X3JlZnRibDsKLQotCWVyciA9IHRpcGNfbmFtZXRibF9pbml0KCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfbmFtZXRibDsKKwlzeXNjdGxfdGlwY19ybWVtWzBdID0gVElQQ19DT05OX09WRVJMT0FEX0xJTUlUID4+IDQgPDwKKwkJCSAgICAgIFRJUENfTE9XX0lNUE9SVEFOQ0U7CisJc3lzY3RsX3RpcGNfcm1lbVsxXSA9IFRJUENfQ09OTl9PVkVSTE9BRF9MSU1JVCA+PiA0IDw8CisJCQkgICAgICBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0U7CisJc3lzY3RsX3RpcGNfcm1lbVsyXSA9IFRJUENfQ09OTl9PVkVSTE9BRF9MSU1JVDsKIAogCWVyciA9IHRpcGNfbmV0bGlua19zdGFydCgpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X25ldGxpbms7CiAKKwllcnIgPSB0aXBjX25ldGxpbmtfY29tcGF0X3N0YXJ0KCk7CisJaWYgKGVycikKKwkJZ290byBvdXRfbmV0bGlua19jb21wYXQ7CisKIAllcnIgPSB0aXBjX3NvY2tldF9pbml0KCk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfc29ja2V0OwpAQCAtMTE4LDU4ICsxMjQsNDAgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9zeXNjdGw7CiAKLQllcnIgPSB0aXBjX3N1YnNjcl9zdGFydCgpOworCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnRpcGNfbmV0X29wcyk7CiAJaWYgKGVycikKLQkJZ290byBvdXRfc3Vic2NyOworCQlnb3RvIG91dF9wZXJuZXQ7CiAKIAllcnIgPSB0aXBjX2JlYXJlcl9zZXR1cCgpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2JlYXJlcjsKIAorCXByX2luZm8oIlN0YXJ0ZWQgaW4gc2luZ2xlIG5vZGUgbW9kZVxuIik7CiAJcmV0dXJuIDA7CiBvdXRfYmVhcmVyOgotCXRpcGNfc3Vic2NyX3N0b3AoKTsKLW91dF9zdWJzY3I6CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZ0aXBjX25ldF9vcHMpOworb3V0X3Blcm5ldDoKIAl0aXBjX3VucmVnaXN0ZXJfc3lzY3RsKCk7CiBvdXRfc3lzY3RsOgogCXRpcGNfc29ja2V0X3N0b3AoKTsKIG91dF9zb2NrZXQ6CisJdGlwY19uZXRsaW5rX2NvbXBhdF9zdG9wKCk7CitvdXRfbmV0bGlua19jb21wYXQ6CiAJdGlwY19uZXRsaW5rX3N0b3AoKTsKIG91dF9uZXRsaW5rOgotCXRpcGNfbmFtZXRibF9zdG9wKCk7Ci1vdXRfbmFtZXRibDoKLQl0aXBjX3NrX3JlZl90YWJsZV9zdG9wKCk7Ci1vdXRfcmVmdGJsOgorCXByX2VycigiVW5hYmxlIHRvIHN0YXJ0IGluIHNpbmdsZSBub2RlIG1vZGVcbiIpOwogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHRpcGNfaW5pdCh2b2lkKQotewotCWludCByZXM7Ci0KLQlwcl9pbmZvKCJBY3RpdmF0ZWQgKHZlcnNpb24gIiBUSVBDX01PRF9WRVIgIilcbiIpOwotCi0JdGlwY19vd25fYWRkciA9IDA7Ci0JdGlwY19tYXhfcG9ydHMgPSBDT05GSUdfVElQQ19QT1JUUzsKLQl0aXBjX25ldF9pZCA9IDQ3MTE7Ci0KLQlzeXNjdGxfdGlwY19ybWVtWzBdID0gVElQQ19DT05OX09WRVJMT0FEX0xJTUlUID4+IDQgPDwKLQkJCSAgICAgIFRJUENfTE9XX0lNUE9SVEFOQ0U7Ci0Jc3lzY3RsX3RpcGNfcm1lbVsxXSA9IFRJUENfQ09OTl9PVkVSTE9BRF9MSU1JVCA+PiA0IDw8Ci0JCQkgICAgICBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0U7Ci0Jc3lzY3RsX3RpcGNfcm1lbVsyXSA9IFRJUENfQ09OTl9PVkVSTE9BRF9MSU1JVDsKLQotCXJlcyA9IHRpcGNfY29yZV9zdGFydCgpOwotCWlmIChyZXMpCi0JCXByX2VycigiVW5hYmxlIHRvIHN0YXJ0IGluIHNpbmdsZSBub2RlIG1vZGVcbiIpOwotCWVsc2UKLQkJcHJfaW5mbygiU3RhcnRlZCBpbiBzaW5nbGUgbm9kZSBtb2RlXG4iKTsKLQlyZXR1cm4gcmVzOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgdGlwY19leGl0KHZvaWQpCiB7Ci0JdGlwY19jb3JlX3N0b3AoKTsKKwl0aXBjX2JlYXJlcl9jbGVhbnVwKCk7CisJdGlwY19uZXRsaW5rX3N0b3AoKTsKKwl0aXBjX25ldGxpbmtfY29tcGF0X3N0b3AoKTsKKwl0aXBjX3NvY2tldF9zdG9wKCk7CisJdGlwY191bnJlZ2lzdGVyX3N5c2N0bCgpOworCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmdGlwY19uZXRfb3BzKTsKKwogCXByX2luZm8oIkRlYWN0aXZhdGVkXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvY29yZS5oIGIvbmV0L3RpcGMvY29yZS5oCmluZGV4IDg0NjAyMTMuLjNkYzY4YzcgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL2NvcmUuaAorKysgYi9uZXQvdGlwYy9jb3JlLmgKQEAgLTM3LDggKzM3LDYgQEAKICNpZm5kZWYgX1RJUENfQ09SRV9ICiAjZGVmaW5lIF9USVBDX0NPUkVfSAogCi0jZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10Ci0KICNpbmNsdWRlIDxsaW51eC90aXBjLmg+CiAjaW5jbHVkZSA8bGludXgvdGlwY19jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aXBjX25ldGxpbmsuaD4KQEAgLTU5LDQ3ICs1Nyw1NCBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CisjaW5jbHVkZSA8bGludXgvcmhhc2h0YWJsZS5oPgorCisjaW5jbHVkZSAibm9kZS5oIgorI2luY2x1ZGUgImJlYXJlci5oIgorI2luY2x1ZGUgImJjYXN0LmgiCisjaW5jbHVkZSAibmV0bGluay5oIgorI2luY2x1ZGUgImxpbmsuaCIKKyNpbmNsdWRlICJub2RlLmgiCisjaW5jbHVkZSAibXNnLmgiCiAKICNkZWZpbmUgVElQQ19NT0RfVkVSICIyLjAuMCIKIAotI2RlZmluZSBVTFRSQV9TVFJJTkdfTUFYX0xFTgkzMjc2OAotI2RlZmluZSBUSVBDX01BWF9TVUJTQ1JJUFRJT05TCTY1NTM1Ci0jZGVmaW5lIFRJUENfTUFYX1BVQkxJQ0FUSU9OUwk2NTUzNQotCi1zdHJ1Y3QgdGlwY19tc2c7CS8qIG1zZy5oICovCi0KLWludCB0aXBjX3NucHJpbnRmKGNoYXIgKmJ1ZiwgaW50IGxlbiwgY29uc3QgY2hhciAqZm10LCAuLi4pOwotCi0vKgotICogVElQQy1zcGVjaWZpYyBlcnJvciBjb2RlcwotICovCi0jZGVmaW5lIEVMSU5LQ09ORyBFQUdBSU4JLyogbGluayBjb25nZXN0aW9uIDw9PiByZXNvdXJjZSB1bmF2YWlsYWJsZSAqLwotCi0vKgotICogR2xvYmFsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCi0gKi8KLWV4dGVybiB1MzIgdGlwY19vd25fYWRkciBfX3JlYWRfbW9zdGx5OwotZXh0ZXJuIGludCB0aXBjX21heF9wb3J0cyBfX3JlYWRfbW9zdGx5OwogZXh0ZXJuIGludCB0aXBjX25ldF9pZCBfX3JlYWRfbW9zdGx5OwogZXh0ZXJuIGludCBzeXNjdGxfdGlwY19ybWVtWzNdIF9fcmVhZF9tb3N0bHk7CiBleHRlcm4gaW50IHN5c2N0bF90aXBjX25hbWVkX3RpbWVvdXQgX19yZWFkX21vc3RseTsKIAotLyoKLSAqIE90aGVyIGdsb2JhbCB2YXJpYWJsZXMKLSAqLwotZXh0ZXJuIGludCB0aXBjX3JhbmRvbSBfX3JlYWRfbW9zdGx5Oworc3RydWN0IHRpcGNfbmV0IHsKKwl1MzIgb3duX2FkZHI7CisJaW50IG5ldF9pZDsKKwlpbnQgcmFuZG9tOwogCi0vKgotICogUm91dGluZXMgYXZhaWxhYmxlIHRvIHByaXZpbGVnZWQgc3Vic3lzdGVtcwotICovCi1pbnQgdGlwY19uZXRsaW5rX3N0YXJ0KHZvaWQpOwotdm9pZCB0aXBjX25ldGxpbmtfc3RvcCh2b2lkKTsKLWludCB0aXBjX3NvY2tldF9pbml0KHZvaWQpOwotdm9pZCB0aXBjX3NvY2tldF9zdG9wKHZvaWQpOwotaW50IHRpcGNfc29ja19jcmVhdGVfbG9jYWwoaW50IHR5cGUsIHN0cnVjdCBzb2NrZXQgKipyZXMpOwotdm9pZCB0aXBjX3NvY2tfcmVsZWFzZV9sb2NhbChzdHJ1Y3Qgc29ja2V0ICpzb2NrKTsKLWludCB0aXBjX3NvY2tfYWNjZXB0X2xvY2FsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrZXQgKipuZXdzb2NrLAotCQkJICAgaW50IGZsYWdzKTsKKwkvKiBOb2RlIHRhYmxlIGFuZCBub2RlIGxpc3QgKi8KKwlzcGlubG9ja190IG5vZGVfbGlzdF9sb2NrOworCXN0cnVjdCBobGlzdF9oZWFkIG5vZGVfaHRhYmxlW05PREVfSFRBQkxFX1NJWkVdOworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZV9saXN0OworCXUzMiBudW1fbm9kZXM7CisJdTMyIG51bV9saW5rczsKKworCS8qIEJlYXJlciBsaXN0ICovCisJc3RydWN0IHRpcGNfYmVhcmVyIF9fcmN1ICpiZWFyZXJfbGlzdFtNQVhfQkVBUkVSUyArIDFdOworCisJLyogQnJvYWRjYXN0IGxpbmsgKi8KKwlzdHJ1Y3QgdGlwY19iY2JlYXJlciAqYmNiZWFyZXI7CisJc3RydWN0IHRpcGNfYmNsaW5rICpiY2xpbms7CisJc3RydWN0IHRpcGNfbGluayAqYmNsOworCisJLyogU29ja2V0IGhhc2ggdGFibGUgKi8KKwlzdHJ1Y3Qgcmhhc2h0YWJsZSBza19yaHQ7CisKKwkvKiBOYW1lIHRhYmxlICovCisJc3BpbmxvY2tfdCBuYW1ldGJsX2xvY2s7CisJc3RydWN0IG5hbWVfdGFibGUgKm5hbWV0Ymw7CisKKwkvKiBUb3BvbG9neSBzdWJzY3JpcHRpb24gc2VydmVyICovCisJc3RydWN0IHRpcGNfc2VydmVyICp0b3BzcnY7CisJYXRvbWljX3Qgc3Vic2NyaXB0aW9uX2NvdW50OworfTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKIGludCB0aXBjX3JlZ2lzdGVyX3N5c2N0bCh2b2lkKTsKQEAgLTEwOCwxMDIgKzExMyw0IEBACiAjZGVmaW5lIHRpcGNfcmVnaXN0ZXJfc3lzY3RsKCkgMAogI2RlZmluZSB0aXBjX3VucmVnaXN0ZXJfc3lzY3RsKCkKICNlbmRpZgotCi0vKgotICogVElQQyB0aW1lciBjb2RlCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkhhbmRsZXIpICh1bnNpZ25lZCBsb25nKTsKLQotLyoqCi0gKiBrX2luaXRfdGltZXIgLSBpbml0aWFsaXplIGEgdGltZXIKLSAqIEB0aW1lcjogcG9pbnRlciB0byB0aW1lciBzdHJ1Y3R1cmUKLSAqIEByb3V0aW5lOiBwb2ludGVyIHRvIHJvdXRpbmUgdG8gaW52b2tlIHdoZW4gdGltZXIgZXhwaXJlcwotICogQGFyZ3VtZW50OiB2YWx1ZSB0byBwYXNzIHRvIHJvdXRpbmUgd2hlbiB0aW1lciBleHBpcmVzCi0gKgotICogVGltZXIgbXVzdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIChhbmQgdGVybWluYXRlZCB3aGVuIG5vIGxvbmdlciBuZWVkZWQpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQga19pbml0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgSGFuZGxlciByb3V0aW5lLAotCQkJCXVuc2lnbmVkIGxvbmcgYXJndW1lbnQpCi17Ci0Jc2V0dXBfdGltZXIodGltZXIsIHJvdXRpbmUsIGFyZ3VtZW50KTsKLX0KLQotLyoqCi0gKiBrX3N0YXJ0X3RpbWVyIC0gc3RhcnQgYSB0aW1lcgotICogQHRpbWVyOiBwb2ludGVyIHRvIHRpbWVyIHN0cnVjdHVyZQotICogQG1zZWM6IHRpbWUgdG8gZGVsYXkgKGluIG1zKQotICoKLSAqIFNjaGVkdWxlcyBhIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgdGltZXIgZm9yIGxhdGVyIGV4ZWN1dGlvbi4KLSAqIElmIHRpbWVyIGlzIGFscmVhZHkgcnVubmluZywgdGhlIG5ldyB0aW1lb3V0IG92ZXJyaWRlcyB0aGUgcHJldmlvdXMgcmVxdWVzdC4KLSAqCi0gKiBUbyBlbnN1cmUgdGhlIHRpbWVyIGRvZXNuJ3QgZXhwaXJlIGJlZm9yZSB0aGUgc3BlY2lmaWVkIGRlbGF5IGVsYXBzZXMsCi0gKiB0aGUgYW1vdW50IG9mIGRlbGF5IGlzIHJvdW5kZWQgdXAgd2hlbiBjb252ZXJ0aW5nIHRvIHRoZSBqaWZmaWVzCi0gKiB0aGVuIGFuIGFkZGl0aW9uYWwgamlmZnkgaXMgYWRkZWQgdG8gYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdAotICogdGhlIHN0YXJ0aW5nIHRpbWUgbWF5IGJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGN1cnJlbnQgamlmZnkuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBrX3N0YXJ0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQgbG9uZyBtc2VjKQotewotCW1vZF90aW1lcih0aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobXNlYykgKyAxKTsKLX0KLQotLyoqCi0gKiBrX2NhbmNlbF90aW1lciAtIGNhbmNlbCBhIHRpbWVyCi0gKiBAdGltZXI6IHBvaW50ZXIgdG8gdGltZXIgc3RydWN0dXJlCi0gKgotICogQ2FuY2VscyBhIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgdGltZXIuCi0gKiBDYW4gYmUgY2FsbGVkIHNhZmVseSBldmVuIGlmIHRoZSB0aW1lciBpcyBhbHJlYWR5IGluYWN0aXZlLgotICoKLSAqIFdBUk5JTkc6IE11c3Qgbm90IGJlIGNhbGxlZCB3aGVuIGhvbGRpbmcgbG9ja3MgcmVxdWlyZWQgYnkgdGhlIHRpbWVyJ3MKLSAqICAgICAgICAgIHRpbWVvdXQgcm91dGluZSwgb3RoZXJ3aXNlIGRlYWRsb2NrIGNhbiBvY2N1ciBvbiBTTVAgc3lzdGVtcyEKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGtfY2FuY2VsX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKLXsKLQlkZWxfdGltZXJfc3luYyh0aW1lcik7Ci19Ci0KLS8qKgotICoga190ZXJtX3RpbWVyIC0gdGVybWluYXRlIGEgdGltZXIKLSAqIEB0aW1lcjogcG9pbnRlciB0byB0aW1lciBzdHJ1Y3R1cmUKLSAqCi0gKiBQcmV2ZW50cyBmdXJ0aGVyIHVzZSBvZiBhIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgdGltZXIuCi0gKgotICogV0FSTklORzogQ2FsbGVyIG11c3QgZW5zdXJlIHRpbWVyIGlzbid0IGN1cnJlbnRseSBydW5uaW5nLgotICoKLSAqIChEbyBub3QgImVuaGFuY2UiIHRoaXMgcm91dGluZSB0byBhdXRvbWF0aWNhbGx5IGNhbmNlbCBhbiBhY3RpdmUgdGltZXIsCi0gKiBvdGhlcndpc2UgZGVhZGxvY2sgY2FuIGFyaXNlIHdoZW4gYSB0aW1lb3V0IHJvdXRpbmUgY2FsbHMga190ZXJtX3RpbWVyLikKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGtfdGVybV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCi17Ci19Ci0KLS8qCi0gKiBUSVBDIG1lc3NhZ2UgYnVmZmVyIGNvZGUKLSAqCi0gKiBUSVBDIG1lc3NhZ2UgYnVmZmVyIGhlYWRyb29tIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgd29yc3QtY2FzZQotICogbGluay1sZXZlbCBkZXZpY2UgaGVhZGVyIChpbiBjYXNlIHRoZSBtZXNzYWdlIGlzIHNlbnQgb2ZmLW5vZGUpLgotICoKLSAqIE5vdGU6IEhlYWRyb29tIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIDQgdG8gZW5zdXJlIHRoZSBUSVBDIGhlYWRlciBmaWVsZHMKLSAqICAgICAgIGFyZSB3b3JkIGFsaWduZWQgZm9yIHF1aWNrZXIgYWNjZXNzCi0gKi8KLSNkZWZpbmUgQlVGX0hFQURST09NIExMX01BWF9IRUFERVIKLQotc3RydWN0IHRpcGNfc2tiX2NiIHsKLQl2b2lkICpoYW5kbGU7Ci0Jc3RydWN0IHNrX2J1ZmYgKnRhaWw7Ci0JYm9vbCBkZWZlcnJlZDsKLQlib29sIHdha2V1cF9wZW5kaW5nOwotCWJvb2wgYnVuZGxpbmc7Ci0JdTE2IGNoYWluX3N6OwotCXUxNiBjaGFpbl9pbXA7Ci19OwotCi0jZGVmaW5lIFRJUENfU0tCX0NCKF9fc2tiKSAoKHN0cnVjdCB0aXBjX3NrYl9jYiAqKSYoKF9fc2tiKS0+Y2JbMF0pKQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0aXBjX21zZyAqYnVmX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXJldHVybiAoc3RydWN0IHRpcGNfbXNnICopc2tiLT5kYXRhOwotfQotCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19idWZfYWNxdWlyZSh1MzIgc2l6ZSk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvZGlzY292ZXIuYyBiL25ldC90aXBjL2Rpc2NvdmVyLmMKaW5kZXggYWE3MjJhNC4uZmVlZjM3NSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvZGlzY292ZXIuYworKysgYi9uZXQvdGlwYy9kaXNjb3Zlci5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIG5ldC90aXBjL2Rpc2NvdmVyLmMKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNiwgMjAxNCwgRXJpY3Nzb24gQUIKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA2LCAyMDE0LTIwMTUsIEVyaWNzc29uIEFCCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNiwgMjAxMC0yMDExLCBXaW5kIFJpdmVyIFN5c3RlbXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzgsMTUgKzM4LDE5IEBACiAjaW5jbHVkZSAibGluay5oIgogI2luY2x1ZGUgImRpc2NvdmVyLmgiCiAKLSNkZWZpbmUgVElQQ19MSU5LX1JFUV9JTklUCTEyNQkvKiBtaW4gZGVsYXkgZHVyaW5nIGJlYXJlciBzdGFydCB1cCAqLwotI2RlZmluZSBUSVBDX0xJTktfUkVRX0ZBU1QJMTAwMAkvKiBtYXggZGVsYXkgaWYgYmVhcmVyIGhhcyBubyBsaW5rcyAqLwotI2RlZmluZSBUSVBDX0xJTktfUkVRX1NMT1cJNjAwMDAJLyogbWF4IGRlbGF5IGlmIGJlYXJlciBoYXMgbGlua3MgKi8KLSNkZWZpbmUgVElQQ19MSU5LX1JFUV9JTkFDVElWRQkweGZmZmZmZmZmIC8qIGluZGljYXRlcyBubyB0aW1lciBpbiB1c2UgKi8KLQorLyogbWluIGRlbGF5IGR1cmluZyBiZWFyZXIgc3RhcnQgdXAgKi8KKyNkZWZpbmUgVElQQ19MSU5LX1JFUV9JTklUCW1zZWNzX3RvX2ppZmZpZXMoMTI1KQorLyogbWF4IGRlbGF5IGlmIGJlYXJlciBoYXMgbm8gbGlua3MgKi8KKyNkZWZpbmUgVElQQ19MSU5LX1JFUV9GQVNUCW1zZWNzX3RvX2ppZmZpZXMoMTAwMCkKKy8qIG1heCBkZWxheSBpZiBiZWFyZXIgaGFzIGxpbmtzICovCisjZGVmaW5lIFRJUENfTElOS19SRVFfU0xPVwltc2Vjc190b19qaWZmaWVzKDYwMDAwKQorLyogaW5kaWNhdGVzIG5vIHRpbWVyIGluIHVzZSAqLworI2RlZmluZSBUSVBDX0xJTktfUkVRX0lOQUNUSVZFCTB4ZmZmZmZmZmYKIAogLyoqCiAgKiBzdHJ1Y3QgdGlwY19saW5rX3JlcSAtIGluZm9ybWF0aW9uIGFib3V0IGFuIG9uZ29pbmcgbGluayBzZXR1cCByZXF1ZXN0CiAgKiBAYmVhcmVyX2lkOiBpZGVudGl0eSBvZiBiZWFyZXIgaXNzdWluZyByZXF1ZXN0cworICogQG5ldDogbmV0d29yayBuYW1lc3BhY2UgaW5zdGFuY2UKICAqIEBkZXN0OiBkZXN0aW5hdGlvbiBhZGRyZXNzIGZvciByZXF1ZXN0IG1lc3NhZ2VzCiAgKiBAZG9tYWluOiBuZXR3b3JrIGRvbWFpbiB0byB3aGljaCBsaW5rcyBjYW4gYmUgZXN0YWJsaXNoZWQKICAqIEBudW1fbm9kZXM6IG51bWJlciBvZiBub2RlcyBjdXJyZW50bHkgZGlzY292ZXJlZCAoaS5lLiB3aXRoIGFuIGFjdGl2ZSBsaW5rKQpAQCAtNTgsMzEgKzYyLDM1IEBACiBzdHJ1Y3QgdGlwY19saW5rX3JlcSB7CiAJdTMyIGJlYXJlcl9pZDsKIAlzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyIGRlc3Q7CisJc3RydWN0IG5ldCAqbmV0OwogCXUzMiBkb21haW47CiAJaW50IG51bV9ub2RlczsKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLQl1bnNpZ25lZCBpbnQgdGltZXJfaW50djsKKwl1bnNpZ25lZCBsb25nIHRpbWVyX2ludHY7CiB9OwogCiAvKioKICAqIHRpcGNfZGlzY19pbml0X21zZyAtIGluaXRpYWxpemUgYSBsaW5rIHNldHVwIG1lc3NhZ2UKKyAqIEBuZXQ6IHRoZSBhcHBsaWNhYmxlIG5ldCBuYW1lc3BhY2UKICAqIEB0eXBlOiBtZXNzYWdlIHR5cGUgKHJlcXVlc3Qgb3IgcmVzcG9uc2UpCiAgKiBAYl9wdHI6IHB0ciB0byBiZWFyZXIgaXNzdWluZyBtZXNzYWdlCiAgKi8KLXN0YXRpYyB2b2lkIHRpcGNfZGlzY19pbml0X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCB1MzIgdHlwZSwKK3N0YXRpYyB2b2lkIHRpcGNfZGlzY19pbml0X21zZyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpidWYsIHUzMiB0eXBlLAogCQkJICAgICAgIHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIpCiB7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOwogCXN0cnVjdCB0aXBjX21zZyAqbXNnOwogCXUzMiBkZXN0X2RvbWFpbiA9IGJfcHRyLT5kb21haW47CiAKIAltc2cgPSBidWZfbXNnKGJ1Zik7Ci0JdGlwY19tc2dfaW5pdChtc2csIExJTktfQ09ORklHLCB0eXBlLCBJTlRfSF9TSVpFLCBkZXN0X2RvbWFpbik7CisJdGlwY19tc2dfaW5pdCh0bi0+b3duX2FkZHIsIG1zZywgTElOS19DT05GSUcsIHR5cGUsCisJCSAgICAgIElOVF9IX1NJWkUsIGRlc3RfZG9tYWluKTsKIAltc2dfc2V0X25vbl9zZXEobXNnLCAxKTsKLQltc2dfc2V0X25vZGVfc2lnKG1zZywgdGlwY19yYW5kb20pOworCW1zZ19zZXRfbm9kZV9zaWcobXNnLCB0bi0+cmFuZG9tKTsKIAltc2dfc2V0X2Rlc3RfZG9tYWluKG1zZywgZGVzdF9kb21haW4pOwotCW1zZ19zZXRfYmNfbmV0aWQobXNnLCB0aXBjX25ldF9pZCk7CisJbXNnX3NldF9iY19uZXRpZChtc2csIHRuLT5uZXRfaWQpOwogCWJfcHRyLT5tZWRpYS0+YWRkcjJtc2cobXNnX21lZGlhX2FkZHIobXNnKSwgJmJfcHRyLT5hZGRyKTsKIH0KIApAQCAtMTA3LDExICsxMTUsMTQgQEAKIAogLyoqCiAgKiB0aXBjX2Rpc2NfcmN2IC0gaGFuZGxlIGluY29taW5nIGRpc2NvdmVyeSBtZXNzYWdlIChyZXF1ZXN0IG9yIHJlc3BvbnNlKQorICogQG5ldDogdGhlIGFwcGxpY2FibGUgbmV0IG5hbWVzcGFjZQogICogQGJ1ZjogYnVmZmVyIGNvbnRhaW5pbmcgbWVzc2FnZQogICogQGJlYXJlcjogYmVhcmVyIHRoYXQgbWVzc2FnZSBhcnJpdmVkIG9uCiAgKi8KLXZvaWQgdGlwY19kaXNjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmJlYXJlcikKK3ZvaWQgdGlwY19kaXNjX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpidWYsCisJCSAgIHN0cnVjdCB0aXBjX2JlYXJlciAqYmVhcmVyKQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAlzdHJ1Y3QgdGlwY19ub2RlICpub2RlOwogCXN0cnVjdCB0aXBjX2xpbmsgKmxpbms7CiAJc3RydWN0IHRpcGNfbWVkaWFfYWRkciBtYWRkcjsKQEAgLTEzMyw3ICsxNDQsNyBAQAogCWtmcmVlX3NrYihidWYpOwogCiAJLyogRW5zdXJlIG1lc3NhZ2UgZnJvbSBub2RlIGlzIHZhbGlkIGFuZCBjb21tdW5pY2F0aW9uIGlzIHBlcm1pdHRlZCAqLwotCWlmIChuZXRfaWQgIT0gdGlwY19uZXRfaWQpCisJaWYgKG5ldF9pZCAhPSB0bi0+bmV0X2lkKQogCQlyZXR1cm47CiAJaWYgKG1hZGRyLmJyb2FkY2FzdCkKIAkJcmV0dXJuOwpAQCAtMTQyLDIzICsxNTMsMTkgQEAKIAlpZiAoIXRpcGNfYWRkcl9ub2RlX3ZhbGlkKG9ub2RlKSkKIAkJcmV0dXJuOwogCi0JaWYgKGluX293bl9ub2RlKG9ub2RlKSkgeworCWlmIChpbl9vd25fbm9kZShuZXQsIG9ub2RlKSkgewogCQlpZiAobWVtY21wKCZtYWRkciwgJmJlYXJlci0+YWRkciwgc2l6ZW9mKG1hZGRyKSkpCi0JCQlkaXNjX2R1cGxfYWxlcnQoYmVhcmVyLCB0aXBjX293bl9hZGRyLCAmbWFkZHIpOworCQkJZGlzY19kdXBsX2FsZXJ0KGJlYXJlciwgdG4tPm93bl9hZGRyLCAmbWFkZHIpOwogCQlyZXR1cm47CiAJfQotCWlmICghdGlwY19pbl9zY29wZShkZG9tLCB0aXBjX293bl9hZGRyKSkKKwlpZiAoIXRpcGNfaW5fc2NvcGUoZGRvbSwgdG4tPm93bl9hZGRyKSkKIAkJcmV0dXJuOwogCWlmICghdGlwY19pbl9zY29wZShiZWFyZXItPmRvbWFpbiwgb25vZGUpKQogCQlyZXR1cm47CiAKLQkvKiBMb2NhdGUsIG9yIGlmIG5lY2Vzc2FyeSwgY3JlYXRlLCBub2RlOiAqLwotCW5vZGUgPSB0aXBjX25vZGVfZmluZChvbm9kZSk7Ci0JaWYgKCFub2RlKQotCQlub2RlID0gdGlwY19ub2RlX2NyZWF0ZShvbm9kZSk7CisJbm9kZSA9IHRpcGNfbm9kZV9jcmVhdGUobmV0LCBvbm9kZSk7CiAJaWYgKCFub2RlKQogCQlyZXR1cm47Ci0KIAl0aXBjX25vZGVfbG9jayhub2RlKTsKIAlsaW5rID0gbm9kZS0+bGlua3NbYmVhcmVyLT5pZGVudGl0eV07CiAKQEAgLTI0NCw4ICsyNTEsOCBAQAogCWlmIChyZXNwb25kICYmIChtdHlwID09IERTQ19SRVFfTVNHKSkgewogCQlyYnVmID0gdGlwY19idWZfYWNxdWlyZShJTlRfSF9TSVpFKTsKIAkJaWYgKHJidWYpIHsKLQkJCXRpcGNfZGlzY19pbml0X21zZyhyYnVmLCBEU0NfUkVTUF9NU0csIGJlYXJlcik7Ci0JCQl0aXBjX2JlYXJlcl9zZW5kKGJlYXJlci0+aWRlbnRpdHksIHJidWYsICZtYWRkcik7CisJCQl0aXBjX2Rpc2NfaW5pdF9tc2cobmV0LCByYnVmLCBEU0NfUkVTUF9NU0csIGJlYXJlcik7CisJCQl0aXBjX2JlYXJlcl9zZW5kKG5ldCwgYmVhcmVyLT5pZGVudGl0eSwgcmJ1ZiwgJm1hZGRyKTsKIAkJCWtmcmVlX3NrYihyYnVmKTsKIAkJfQogCX0KQEAgLTI2NSw3ICsyNzIsNyBAQAogCQlpZiAoKHJlcS0+dGltZXJfaW50diA9PSBUSVBDX0xJTktfUkVRX0lOQUNUSVZFKSB8fAogCQkgICAgKHJlcS0+dGltZXJfaW50diA+IFRJUENfTElOS19SRVFfRkFTVCkpIHsKIAkJCXJlcS0+dGltZXJfaW50diA9IFRJUENfTElOS19SRVFfSU5JVDsKLQkJCWtfc3RhcnRfdGltZXIoJnJlcS0+dGltZXIsIHJlcS0+dGltZXJfaW50dik7CisJCQltb2RfdGltZXIoJnJlcS0+dGltZXIsIGppZmZpZXMgKyByZXEtPnRpbWVyX2ludHYpOwogCQl9CiAJfQogfQpAQCAtMjk1LDEyICszMDIsMTMgQEAKIAogLyoqCiAgKiBkaXNjX3RpbWVvdXQgLSBzZW5kIGEgcGVyaW9kaWMgbGluayBzZXR1cCByZXF1ZXN0Ci0gKiBAcmVxOiBwdHIgdG8gbGluayByZXF1ZXN0IHN0cnVjdHVyZQorICogQGRhdGE6IHB0ciB0byBsaW5rIHJlcXVlc3Qgc3RydWN0dXJlCiAgKgogICogQ2FsbGVkIHdoZW5ldmVyIGEgbGluayBzZXR1cCByZXF1ZXN0IHRpbWVyIGFzc29jaWF0ZWQgd2l0aCBhIGJlYXJlciBleHBpcmVzLgogICovCi1zdGF0aWMgdm9pZCBkaXNjX3RpbWVvdXQoc3RydWN0IHRpcGNfbGlua19yZXEgKnJlcSkKK3N0YXRpYyB2b2lkIGRpc2NfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CisJc3RydWN0IHRpcGNfbGlua19yZXEgKnJlcSA9IChzdHJ1Y3QgdGlwY19saW5rX3JlcSAqKWRhdGE7CiAJaW50IG1heF9kZWxheTsKIAogCXNwaW5fbG9ja19iaCgmcmVxLT5sb2NrKTsKQEAgLTMxOCw3ICszMjYsNyBAQAogCSAqIGhvbGQgYXQgZmFzdCBwb2xsaW5nIHJhdGUgaWYgZG9uJ3QgaGF2ZSBhbnkgYXNzb2NpYXRlZCBub2RlcywKIAkgKiBvdGhlcndpc2UgaG9sZCBhdCBzbG93IHBvbGxpbmcgcmF0ZQogCSAqLwotCXRpcGNfYmVhcmVyX3NlbmQocmVxLT5iZWFyZXJfaWQsIHJlcS0+YnVmLCAmcmVxLT5kZXN0KTsKKwl0aXBjX2JlYXJlcl9zZW5kKHJlcS0+bmV0LCByZXEtPmJlYXJlcl9pZCwgcmVxLT5idWYsICZyZXEtPmRlc3QpOwogCiAKIAlyZXEtPnRpbWVyX2ludHYgKj0gMjsKQEAgLTMyOSwyMCArMzM3LDIyIEBACiAJaWYgKHJlcS0+dGltZXJfaW50diA+IG1heF9kZWxheSkKIAkJcmVxLT50aW1lcl9pbnR2ID0gbWF4X2RlbGF5OwogCi0Ja19zdGFydF90aW1lcigmcmVxLT50aW1lciwgcmVxLT50aW1lcl9pbnR2KTsKKwltb2RfdGltZXIoJnJlcS0+dGltZXIsIGppZmZpZXMgKyByZXEtPnRpbWVyX2ludHYpOwogZXhpdDoKIAlzcGluX3VubG9ja19iaCgmcmVxLT5sb2NrKTsKIH0KIAogLyoqCiAgKiB0aXBjX2Rpc2NfY3JlYXRlIC0gY3JlYXRlIG9iamVjdCB0byBzZW5kIHBlcmlvZGljIGxpbmsgc2V0dXAgcmVxdWVzdHMKKyAqIEBuZXQ6IHRoZSBhcHBsaWNhYmxlIG5ldCBuYW1lc3BhY2UKICAqIEBiX3B0cjogcHRyIHRvIGJlYXJlciBpc3N1aW5nIHJlcXVlc3RzCiAgKiBAZGVzdDogZGVzdGluYXRpb24gYWRkcmVzcyBmb3IgcmVxdWVzdCBtZXNzYWdlcwogICogQGRlc3RfZG9tYWluOiBuZXR3b3JrIGRvbWFpbiB0byB3aGljaCBsaW5rcyBjYW4gYmUgZXN0YWJsaXNoZWQKICAqCiAgKiBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgb3RoZXJ3aXNlIC1lcnJuby4KICAqLwotaW50IHRpcGNfZGlzY19jcmVhdGUoc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0ciwgc3RydWN0IHRpcGNfbWVkaWFfYWRkciAqZGVzdCkKK2ludCB0aXBjX2Rpc2NfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0ciwKKwkJICAgICBzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyICpkZXN0KQogewogCXN0cnVjdCB0aXBjX2xpbmtfcmVxICpyZXE7CiAKQEAgLTM1NiwxNyArMzY2LDE4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXRpcGNfZGlzY19pbml0X21zZyhyZXEtPmJ1ZiwgRFNDX1JFUV9NU0csIGJfcHRyKTsKKwl0aXBjX2Rpc2NfaW5pdF9tc2cobmV0LCByZXEtPmJ1ZiwgRFNDX1JFUV9NU0csIGJfcHRyKTsKIAltZW1jcHkoJnJlcS0+ZGVzdCwgZGVzdCwgc2l6ZW9mKCpkZXN0KSk7CisJcmVxLT5uZXQgPSBuZXQ7CiAJcmVxLT5iZWFyZXJfaWQgPSBiX3B0ci0+aWRlbnRpdHk7CiAJcmVxLT5kb21haW4gPSBiX3B0ci0+ZG9tYWluOwogCXJlcS0+bnVtX25vZGVzID0gMDsKIAlyZXEtPnRpbWVyX2ludHYgPSBUSVBDX0xJTktfUkVRX0lOSVQ7CiAJc3Bpbl9sb2NrX2luaXQoJnJlcS0+bG9jayk7Ci0Ja19pbml0X3RpbWVyKCZyZXEtPnRpbWVyLCAoSGFuZGxlcilkaXNjX3RpbWVvdXQsICh1bnNpZ25lZCBsb25nKXJlcSk7Ci0Ja19zdGFydF90aW1lcigmcmVxLT50aW1lciwgcmVxLT50aW1lcl9pbnR2KTsKKwlzZXR1cF90aW1lcigmcmVxLT50aW1lciwgZGlzY190aW1lb3V0LCAodW5zaWduZWQgbG9uZylyZXEpOworCW1vZF90aW1lcigmcmVxLT50aW1lciwgamlmZmllcyArIHJlcS0+dGltZXJfaW50dik7CiAJYl9wdHItPmxpbmtfcmVxID0gcmVxOwotCXRpcGNfYmVhcmVyX3NlbmQocmVxLT5iZWFyZXJfaWQsIHJlcS0+YnVmLCAmcmVxLT5kZXN0KTsKKwl0aXBjX2JlYXJlcl9zZW5kKG5ldCwgcmVxLT5iZWFyZXJfaWQsIHJlcS0+YnVmLCAmcmVxLT5kZXN0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzc2LDI4ICszODcsMjkgQEAKICAqLwogdm9pZCB0aXBjX2Rpc2NfZGVsZXRlKHN0cnVjdCB0aXBjX2xpbmtfcmVxICpyZXEpCiB7Ci0Ja19jYW5jZWxfdGltZXIoJnJlcS0+dGltZXIpOwotCWtfdGVybV90aW1lcigmcmVxLT50aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJnJlcS0+dGltZXIpOwogCWtmcmVlX3NrYihyZXEtPmJ1Zik7CiAJa2ZyZWUocmVxKTsKIH0KIAogLyoqCiAgKiB0aXBjX2Rpc2NfcmVzZXQgLSByZXNldCBvYmplY3QgdG8gc2VuZCBwZXJpb2RpYyBsaW5rIHNldHVwIHJlcXVlc3RzCisgKiBAbmV0OiB0aGUgYXBwbGljYWJsZSBuZXQgbmFtZXNwYWNlCiAgKiBAYl9wdHI6IHB0ciB0byBiZWFyZXIgaXNzdWluZyByZXF1ZXN0cwogICogQGRlc3RfZG9tYWluOiBuZXR3b3JrIGRvbWFpbiB0byB3aGljaCBsaW5rcyBjYW4gYmUgZXN0YWJsaXNoZWQKICAqLwotdm9pZCB0aXBjX2Rpc2NfcmVzZXQoc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0cikKK3ZvaWQgdGlwY19kaXNjX3Jlc2V0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0cikKIHsKIAlzdHJ1Y3QgdGlwY19saW5rX3JlcSAqcmVxID0gYl9wdHItPmxpbmtfcmVxOwogCiAJc3Bpbl9sb2NrX2JoKCZyZXEtPmxvY2spOwotCXRpcGNfZGlzY19pbml0X21zZyhyZXEtPmJ1ZiwgRFNDX1JFUV9NU0csIGJfcHRyKTsKKwl0aXBjX2Rpc2NfaW5pdF9tc2cobmV0LCByZXEtPmJ1ZiwgRFNDX1JFUV9NU0csIGJfcHRyKTsKKwlyZXEtPm5ldCA9IG5ldDsKIAlyZXEtPmJlYXJlcl9pZCA9IGJfcHRyLT5pZGVudGl0eTsKIAlyZXEtPmRvbWFpbiA9IGJfcHRyLT5kb21haW47CiAJcmVxLT5udW1fbm9kZXMgPSAwOwogCXJlcS0+dGltZXJfaW50diA9IFRJUENfTElOS19SRVFfSU5JVDsKLQlrX3N0YXJ0X3RpbWVyKCZyZXEtPnRpbWVyLCByZXEtPnRpbWVyX2ludHYpOwotCXRpcGNfYmVhcmVyX3NlbmQocmVxLT5iZWFyZXJfaWQsIHJlcS0+YnVmLCAmcmVxLT5kZXN0KTsKKwltb2RfdGltZXIoJnJlcS0+dGltZXIsIGppZmZpZXMgKyByZXEtPnRpbWVyX2ludHYpOworCXRpcGNfYmVhcmVyX3NlbmQobmV0LCByZXEtPmJlYXJlcl9pZCwgcmVxLT5idWYsICZyZXEtPmRlc3QpOwogCXNwaW5fdW5sb2NrX2JoKCZyZXEtPmxvY2spOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvZGlzY292ZXIuaCBiL25ldC90aXBjL2Rpc2NvdmVyLmgKaW5kZXggNTE1YjU3My4uYzliMTI3NyAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvZGlzY292ZXIuaAorKysgYi9uZXQvdGlwYy9kaXNjb3Zlci5oCkBAIC0zOSwxMSArMzksMTMgQEAKIAogc3RydWN0IHRpcGNfbGlua19yZXE7CiAKLWludCB0aXBjX2Rpc2NfY3JlYXRlKHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIsIHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKmRlc3QpOworaW50IHRpcGNfZGlzY19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyLAorCQkgICAgIHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKmRlc3QpOwogdm9pZCB0aXBjX2Rpc2NfZGVsZXRlKHN0cnVjdCB0aXBjX2xpbmtfcmVxICpyZXEpOwotdm9pZCB0aXBjX2Rpc2NfcmVzZXQoc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0cik7Cit2b2lkIHRpcGNfZGlzY19yZXNldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIpOwogdm9pZCB0aXBjX2Rpc2NfYWRkX2Rlc3Qoc3RydWN0IHRpcGNfbGlua19yZXEgKnJlcSk7CiB2b2lkIHRpcGNfZGlzY19yZW1vdmVfZGVzdChzdHJ1Y3QgdGlwY19saW5rX3JlcSAqcmVxKTsKLXZvaWQgdGlwY19kaXNjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyKTsKK3ZvaWQgdGlwY19kaXNjX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpidWYsCisJCSAgIHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuYyBiL25ldC90aXBjL2xpbmsuYwppbmRleCAyM2JjYzExLi5hNGNmMzY0MyAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbGluay5jCisrKyBiL25ldC90aXBjL2xpbmsuYwpAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgInNvY2tldC5oIgogI2luY2x1ZGUgIm5hbWVfZGlzdHIuaCIKICNpbmNsdWRlICJkaXNjb3Zlci5oIgotI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIm5ldGxpbmsuaCIKIAogI2luY2x1ZGUgPGxpbnV4L3BrdF9zY2hlZC5oPgpAQCAtMTAxLDE5ICsxMDAsMjAgQEAKICAqLwogI2RlZmluZSBTVEFSVF9DSEFOR0VPVkVSIDEwMDAwMHUKIAotc3RhdGljIHZvaWQgbGlua19oYW5kbGVfb3V0X29mX3NlcV9tc2coc3RydWN0IHRpcGNfbGluayAqbF9wdHIsCi0JCQkJICAgICAgIHN0cnVjdCBza19idWZmICpidWYpOwotc3RhdGljIHZvaWQgdGlwY19saW5rX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19saW5rICpsX3B0ciwgc3RydWN0IHNrX2J1ZmYgKmJ1Zik7Ci1zdGF0aWMgaW50ICB0aXBjX2xpbmtfdHVubmVsX3JjdihzdHJ1Y3QgdGlwY19ub2RlICpuX3B0ciwKLQkJCQkgc3RydWN0IHNrX2J1ZmYgKipidWYpOwotc3RhdGljIHZvaWQgbGlua19zZXRfc3VwZXJ2aXNpb25fcHJvcHMoc3RydWN0IHRpcGNfbGluayAqbF9wdHIsIHUzMiB0b2xlcmFuY2UpOworc3RhdGljIHZvaWQgbGlua19oYW5kbGVfb3V0X29mX3NlcV9tc2coc3RydWN0IHRpcGNfbGluayAqbGluaywKKwkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitzdGF0aWMgdm9pZCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmxpbmssCisJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7CitzdGF0aWMgaW50ICB0aXBjX2xpbmtfdHVubmVsX3JjdihzdHJ1Y3QgdGlwY19ub2RlICpub2RlLAorCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYik7CitzdGF0aWMgdm9pZCBsaW5rX3NldF9zdXBlcnZpc2lvbl9wcm9wcyhzdHJ1Y3QgdGlwY19saW5rICpsX3B0ciwgdTMyIHRvbCk7CiBzdGF0aWMgdm9pZCBsaW5rX3N0YXRlX2V2ZW50KHN0cnVjdCB0aXBjX2xpbmsgKmxfcHRyLCB1MzIgZXZlbnQpOwogc3RhdGljIHZvaWQgbGlua19yZXNldF9zdGF0aXN0aWNzKHN0cnVjdCB0aXBjX2xpbmsgKmxfcHRyKTsKIHN0YXRpYyB2b2lkIGxpbmtfcHJpbnQoc3RydWN0IHRpcGNfbGluayAqbF9wdHIsIGNvbnN0IGNoYXIgKnN0cik7CiBzdGF0aWMgdm9pZCB0aXBjX2xpbmtfc3luY194bWl0KHN0cnVjdCB0aXBjX2xpbmsgKmwpOwogc3RhdGljIHZvaWQgdGlwY19saW5rX3N5bmNfcmN2KHN0cnVjdCB0aXBjX25vZGUgKm4sIHN0cnVjdCBza19idWZmICpidWYpOwotc3RhdGljIGludCB0aXBjX2xpbmtfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKmJ1Zik7Ci1zdGF0aWMgaW50IHRpcGNfbGlua19wcmVwYXJlX2lucHV0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICoqYnVmKTsKK3N0YXRpYyB2b2lkIHRpcGNfbGlua19pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK3N0YXRpYyBib29sIHRpcGNfZGF0YV9pbnB1dChzdHJ1Y3QgdGlwY19saW5rICpsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAogLyoKICAqICBTaW1wbGUgbGluayByb3V0aW5lcwpAQCAtMTIzLDEzICsxMjMsMzAgQEAKIAlyZXR1cm4gKGkgKyAzKSAmIH4zdTsKIH0KIAorc3RhdGljIHZvaWQgdGlwY19saW5rX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJa2ZyZWUoY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCB0aXBjX2xpbmssIHJlZikpOworfQorCitzdGF0aWMgdm9pZCB0aXBjX2xpbmtfZ2V0KHN0cnVjdCB0aXBjX2xpbmsgKmxfcHRyKQoreworCWtyZWZfZ2V0KCZsX3B0ci0+cmVmKTsKK30KKworc3RhdGljIHZvaWQgdGlwY19saW5rX3B1dChzdHJ1Y3QgdGlwY19saW5rICpsX3B0cikKK3sKKwlrcmVmX3B1dCgmbF9wdHItPnJlZiwgdGlwY19saW5rX3JlbGVhc2UpOworfQorCiBzdGF0aWMgdm9pZCBsaW5rX2luaXRfbWF4X3BrdChzdHJ1Y3QgdGlwY19saW5rICpsX3B0cikKIHsKKwlzdHJ1Y3QgdGlwY19ub2RlICpub2RlID0gbF9wdHItPm93bmVyOworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhub2RlLT5uZXQsIHRpcGNfbmV0X2lkKTsKIAlzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyOwogCXUzMiBtYXhfcGt0OwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWJfcHRyID0gcmN1X2RlcmVmZXJlbmNlX3J0bmwoYmVhcmVyX2xpc3RbbF9wdHItPmJlYXJlcl9pZF0pOworCWJfcHRyID0gcmN1X2RlcmVmZXJlbmNlX3J0bmwodG4tPmJlYXJlcl9saXN0W2xfcHRyLT5iZWFyZXJfaWRdKTsKIAlpZiAoIWJfcHRyKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CkBAIC0xNjksOCArMTg2LDkgQEAKICAqIGxpbmtfdGltZW91dCAtIGhhbmRsZSBleHBpcmF0aW9uIG9mIGxpbmsgdGltZXIKICAqIEBsX3B0cjogcG9pbnRlciB0byBsaW5rCiAgKi8KLXN0YXRpYyB2b2lkIGxpbmtfdGltZW91dChzdHJ1Y3QgdGlwY19saW5rICpsX3B0cikKK3N0YXRpYyB2b2lkIGxpbmtfdGltZW91dCh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CisJc3RydWN0IHRpcGNfbGluayAqbF9wdHIgPSAoc3RydWN0IHRpcGNfbGluayAqKWRhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCXRpcGNfbm9kZV9sb2NrKGxfcHRyLT5vd25lcik7CkBAIC0yMTUsMTEgKzIzMywxMyBAQAogCQl0aXBjX2xpbmtfcHVzaF9wYWNrZXRzKGxfcHRyKTsKIAogCXRpcGNfbm9kZV91bmxvY2sobF9wdHItPm93bmVyKTsKKwl0aXBjX2xpbmtfcHV0KGxfcHRyKTsKIH0KIAotc3RhdGljIHZvaWQgbGlua19zZXRfdGltZXIoc3RydWN0IHRpcGNfbGluayAqbF9wdHIsIHUzMiB0aW1lKQorc3RhdGljIHZvaWQgbGlua19zZXRfdGltZXIoc3RydWN0IHRpcGNfbGluayAqbGluaywgdW5zaWduZWQgbG9uZyB0aW1lKQogewotCWtfc3RhcnRfdGltZXIoJmxfcHRyLT50aW1lciwgdGltZSk7CisJaWYgKCFtb2RfdGltZXIoJmxpbmstPnRpbWVyLCBqaWZmaWVzICsgdGltZSkpCisJCXRpcGNfbGlua19nZXQobGluayk7CiB9CiAKIC8qKgpAQCAtMjM0LDYgKzI1NCw3IEBACiAJCQkJICAgc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0ciwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyICptZWRpYV9hZGRyKQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuX3B0ci0+bmV0LCB0aXBjX25ldF9pZCk7CiAJc3RydWN0IHRpcGNfbGluayAqbF9wdHI7CiAJc3RydWN0IHRpcGNfbXNnICptc2c7CiAJY2hhciAqaWZfbmFtZTsKQEAgLTI1OSwxMiArMjgwLDEyIEBACiAJCXByX3dhcm4oIkxpbmsgY3JlYXRpb24gZmFpbGVkLCBubyBtZW1vcnlcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0KKwlrcmVmX2luaXQoJmxfcHRyLT5yZWYpOwogCWxfcHRyLT5hZGRyID0gcGVlcjsKIAlpZl9uYW1lID0gc3RyY2hyKGJfcHRyLT5uYW1lLCAnOicpICsgMTsKIAlzcHJpbnRmKGxfcHRyLT5uYW1lLCAiJXUuJXUuJXU6JXMtJXUuJXUuJXU6dW5rbm93biIsCi0JCXRpcGNfem9uZSh0aXBjX293bl9hZGRyKSwgdGlwY19jbHVzdGVyKHRpcGNfb3duX2FkZHIpLAotCQl0aXBjX25vZGUodGlwY19vd25fYWRkciksCisJCXRpcGNfem9uZSh0bi0+b3duX2FkZHIpLCB0aXBjX2NsdXN0ZXIodG4tPm93bl9hZGRyKSwKKwkJdGlwY19ub2RlKHRuLT5vd25fYWRkciksCiAJCWlmX25hbWUsCiAJCXRpcGNfem9uZShwZWVyKSwgdGlwY19jbHVzdGVyKHBlZXIpLCB0aXBjX25vZGUocGVlcikpOwogCQkvKiBub3RlOiBwZWVyIGkvZiBuYW1lIGlzIHVwZGF0ZWQgYnkgcmVzZXQvYWN0aXZhdGUgbWVzc2FnZSAqLwpAQCAtMjc4LDkgKzI5OSwxMCBAQAogCiAJbF9wdHItPnBtc2cgPSAoc3RydWN0IHRpcGNfbXNnICopJmxfcHRyLT5wcm90b19tc2c7CiAJbXNnID0gbF9wdHItPnBtc2c7Ci0JdGlwY19tc2dfaW5pdChtc2csIExJTktfUFJPVE9DT0wsIFJFU0VUX01TRywgSU5UX0hfU0laRSwgbF9wdHItPmFkZHIpOworCXRpcGNfbXNnX2luaXQodG4tPm93bl9hZGRyLCBtc2csIExJTktfUFJPVE9DT0wsIFJFU0VUX01TRywgSU5UX0hfU0laRSwKKwkJICAgICAgbF9wdHItPmFkZHIpOwogCW1zZ19zZXRfc2l6ZShtc2csIHNpemVvZihsX3B0ci0+cHJvdG9fbXNnKSk7Ci0JbXNnX3NldF9zZXNzaW9uKG1zZywgKHRpcGNfcmFuZG9tICYgMHhmZmZmKSk7CisJbXNnX3NldF9zZXNzaW9uKG1zZywgKHRuLT5yYW5kb20gJiAweGZmZmYpKTsKIAltc2dfc2V0X2JlYXJlcl9pZChtc2csIGJfcHRyLT5pZGVudGl0eSk7CiAJc3RyY3B5KChjaGFyICopbXNnX2RhdGEobXNnKSwgaWZfbmFtZSk7CiAKQEAgLTI5Myw0OCArMzE1LDUyIEBACiAJbF9wdHItPm5leHRfb3V0X25vID0gMTsKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJmxfcHRyLT5vdXRxdWV1ZSk7CiAJX19za2JfcXVldWVfaGVhZF9pbml0KCZsX3B0ci0+ZGVmZXJyZWRfcXVldWUpOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmxfcHRyLT53YWl0aW5nX3Nrcyk7Ci0KKwlza2JfcXVldWVfaGVhZF9pbml0KCZsX3B0ci0+d2FrZXVwcSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbF9wdHItPmlucHV0cSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbF9wdHItPm5hbWVkcSk7CiAJbGlua19yZXNldF9zdGF0aXN0aWNzKGxfcHRyKTsKLQogCXRpcGNfbm9kZV9hdHRhY2hfbGluayhuX3B0ciwgbF9wdHIpOwotCi0Ja19pbml0X3RpbWVyKCZsX3B0ci0+dGltZXIsIChIYW5kbGVyKWxpbmtfdGltZW91dCwKLQkJICAgICAodW5zaWduZWQgbG9uZylsX3B0cik7Ci0KKwlzZXR1cF90aW1lcigmbF9wdHItPnRpbWVyLCBsaW5rX3RpbWVvdXQsICh1bnNpZ25lZCBsb25nKWxfcHRyKTsKIAlsaW5rX3N0YXRlX2V2ZW50KGxfcHRyLCBTVEFSVElOR19FVlQpOwogCiAJcmV0dXJuIGxfcHRyOwogfQogCi12b2lkIHRpcGNfbGlua19kZWxldGVfbGlzdCh1bnNpZ25lZCBpbnQgYmVhcmVyX2lkLCBib29sIHNodXR0aW5nX2Rvd24pCisvKioKKyAqIGxpbmtfZGVsZXRlIC0gQ29uZGl0aW9uYWwgZGVsZXRpb24gb2YgbGluay4KKyAqICAgICAgICAgICAgICAgSWYgdGltZXIgc3RpbGwgcnVubmluZywgcmVhbCBkZWxldGUgaXMgZG9uZSB3aGVuIGl0IGV4cGlyZXMKKyAqIEBsaW5rOiBsaW5rIHRvIGJlIGRlbGV0ZWQKKyAqLwordm9pZCB0aXBjX2xpbmtfZGVsZXRlKHN0cnVjdCB0aXBjX2xpbmsgKmxpbmspCiB7Ci0Jc3RydWN0IHRpcGNfbGluayAqbF9wdHI7Ci0Jc3RydWN0IHRpcGNfbm9kZSAqbl9wdHI7CisJdGlwY19saW5rX3Jlc2V0X2ZyYWdtZW50cyhsaW5rKTsKKwl0aXBjX25vZGVfZGV0YWNoX2xpbmsobGluay0+b3duZXIsIGxpbmspOworCXRpcGNfbGlua19wdXQobGluayk7Cit9CisKK3ZvaWQgdGlwY19saW5rX2RlbGV0ZV9saXN0KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGJlYXJlcl9pZCwKKwkJCSAgIGJvb2wgc2h1dHRpbmdfZG93bikKK3sKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CisJc3RydWN0IHRpcGNfbGluayAqbGluazsKKwlzdHJ1Y3QgdGlwY19ub2RlICpub2RlOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5fcHRyLCAmdGlwY19ub2RlX2xpc3QsIGxpc3QpIHsKLQkJdGlwY19ub2RlX2xvY2sobl9wdHIpOwotCQlsX3B0ciA9IG5fcHRyLT5saW5rc1tiZWFyZXJfaWRdOwotCQlpZiAobF9wdHIpIHsKLQkJCXRpcGNfbGlua19yZXNldChsX3B0cik7Ci0JCQlpZiAoc2h1dHRpbmdfZG93biB8fCAhdGlwY19ub2RlX2lzX3VwKG5fcHRyKSkgewotCQkJCXRpcGNfbm9kZV9kZXRhY2hfbGluayhsX3B0ci0+b3duZXIsIGxfcHRyKTsKLQkJCQl0aXBjX2xpbmtfcmVzZXRfZnJhZ21lbnRzKGxfcHRyKTsKLQkJCQl0aXBjX25vZGVfdW5sb2NrKG5fcHRyKTsKLQotCQkJCS8qIE5vYm9keSBlbHNlIGNhbiBhY2Nlc3MgdGhpcyBsaW5rIG5vdzogKi8KLQkJCQlkZWxfdGltZXJfc3luYygmbF9wdHItPnRpbWVyKTsKLQkJCQlrZnJlZShsX3B0cik7Ci0JCQl9IGVsc2UgewotCQkJCS8qIERldGFjaC9kZWxldGUgd2hlbiBmYWlsb3ZlciBpcyBmaW5pc2hlZDogKi8KLQkJCQlsX3B0ci0+ZmxhZ3MgfD0gTElOS19TVE9QUEVEOwotCQkJCXRpcGNfbm9kZV91bmxvY2sobl9wdHIpOwotCQkJCWRlbF90aW1lcl9zeW5jKCZsX3B0ci0+dGltZXIpOwotCQkJfQorCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5vZGUsICZ0bi0+bm9kZV9saXN0LCBsaXN0KSB7CisJCXRpcGNfbm9kZV9sb2NrKG5vZGUpOworCQlsaW5rID0gbm9kZS0+bGlua3NbYmVhcmVyX2lkXTsKKwkJaWYgKCFsaW5rKSB7CisJCQl0aXBjX25vZGVfdW5sb2NrKG5vZGUpOwogCQkJY29udGludWU7CiAJCX0KLQkJdGlwY19ub2RlX3VubG9jayhuX3B0cik7CisJCXRpcGNfbGlua19yZXNldChsaW5rKTsKKwkJaWYgKGRlbF90aW1lcigmbGluay0+dGltZXIpKQorCQkJdGlwY19saW5rX3B1dChsaW5rKTsKKwkJbGluay0+ZmxhZ3MgfD0gTElOS19TVE9QUEVEOworCQkvKiBEZWxldGUgbGluayBub3csIG9yIHdoZW4gZmFpbG92ZXIgaXMgZmluaXNoZWQ6ICovCisJCWlmIChzaHV0dGluZ19kb3duIHx8ICF0aXBjX25vZGVfaXNfdXAobm9kZSkpCisJCQl0aXBjX2xpbmtfZGVsZXRlKGxpbmspOworCQl0aXBjX25vZGVfdW5sb2NrKG5vZGUpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KQEAgLTM1MiwxMyArMzc4LDE0IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKIAotCWJ1ZiA9IHRpcGNfbXNnX2NyZWF0ZShTT0NLX1dBS0VVUCwgMCwgSU5UX0hfU0laRSwgMCwgdGlwY19vd25fYWRkciwKLQkJCSAgICAgIHRpcGNfb3duX2FkZHIsIG9wb3J0LCAwLCAwKTsKKwlidWYgPSB0aXBjX21zZ19jcmVhdGUoU09DS19XQUtFVVAsIDAsIElOVF9IX1NJWkUsIDAsCisJCQkgICAgICBsaW5rX293bl9hZGRyKGxpbmspLCBsaW5rX293bl9hZGRyKGxpbmspLAorCQkJICAgICAgb3BvcnQsIDAsIDApOwogCWlmICghYnVmKQogCQlyZXR1cm4gZmFsc2U7CiAJVElQQ19TS0JfQ0IoYnVmKS0+Y2hhaW5fc3ogPSBjaGFpbl9zejsKIAlUSVBDX1NLQl9DQihidWYpLT5jaGFpbl9pbXAgPSBpbXA7Ci0Jc2tiX3F1ZXVlX3RhaWwoJmxpbmstPndhaXRpbmdfc2tzLCBidWYpOworCXNrYl9xdWV1ZV90YWlsKCZsaW5rLT53YWtldXBxLCBidWYpOwogCWxpbmstPnN0YXRzLmxpbmtfY29uZ3MrKzsKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTM2OSwxNyArMzk2LDE5IEBACiAgKiBNb3ZlIGEgbnVtYmVyIG9mIHdhaXRpbmcgdXNlcnMsIGFzIHBlcm1pdHRlZCBieSBhdmFpbGFibGUgc3BhY2UgaW4KICAqIHRoZSBzZW5kIHF1ZXVlLCBmcm9tIGxpbmsgd2FpdCBxdWV1ZSB0byBub2RlIHdhaXQgcXVldWUgZm9yIHdha2V1cAogICovCi1zdGF0aWMgdm9pZCBsaW5rX3ByZXBhcmVfd2FrZXVwKHN0cnVjdCB0aXBjX2xpbmsgKmxpbmspCit2b2lkIGxpbmtfcHJlcGFyZV93YWtldXAoc3RydWN0IHRpcGNfbGluayAqbGluaykKIHsKIAl1aW50IHBlbmRfcXN6ID0gc2tiX3F1ZXVlX2xlbigmbGluay0+b3V0cXVldWUpOwogCXN0cnVjdCBza19idWZmICpza2IsICp0bXA7CiAKLQlza2JfcXVldWVfd2Fsa19zYWZlKCZsaW5rLT53YWl0aW5nX3Nrcywgc2tiLCB0bXApIHsKKwlza2JfcXVldWVfd2Fsa19zYWZlKCZsaW5rLT53YWtldXBxLCBza2IsIHRtcCkgewogCQlpZiAocGVuZF9xc3ogPj0gbGluay0+cXVldWVfbGltaXRbVElQQ19TS0JfQ0Ioc2tiKS0+Y2hhaW5faW1wXSkKIAkJCWJyZWFrOwogCQlwZW5kX3FzeiArPSBUSVBDX1NLQl9DQihza2IpLT5jaGFpbl9zejsKLQkJc2tiX3VubGluayhza2IsICZsaW5rLT53YWl0aW5nX3Nrcyk7Ci0JCXNrYl9xdWV1ZV90YWlsKCZsaW5rLT5vd25lci0+d2FpdGluZ19za3MsIHNrYik7CisJCXNrYl91bmxpbmsoc2tiLCAmbGluay0+d2FrZXVwcSk7CisJCXNrYl9xdWV1ZV90YWlsKCZsaW5rLT5pbnB1dHEsIHNrYik7CisJCWxpbmstPm93bmVyLT5pbnB1dHEgPSAmbGluay0+aW5wdXRxOworCQlsaW5rLT5vd25lci0+YWN0aW9uX2ZsYWdzIHw9IFRJUENfTVNHX0VWVDsKIAl9CiB9CiAKQEAgLTQyNSwyMCArNDU0LDIwIEBACiAJCXJldHVybjsKIAogCXRpcGNfbm9kZV9saW5rX2Rvd24obF9wdHItPm93bmVyLCBsX3B0cik7Ci0JdGlwY19iZWFyZXJfcmVtb3ZlX2Rlc3QobF9wdHItPmJlYXJlcl9pZCwgbF9wdHItPmFkZHIpOworCXRpcGNfYmVhcmVyX3JlbW92ZV9kZXN0KG93bmVyLT5uZXQsIGxfcHRyLT5iZWFyZXJfaWQsIGxfcHRyLT5hZGRyKTsKIAogCWlmICh3YXNfYWN0aXZlX2xpbmsgJiYgdGlwY19ub2RlX2FjdGl2ZV9saW5rcyhsX3B0ci0+b3duZXIpKSB7CiAJCWxfcHRyLT5yZXNldF9jaGVja3BvaW50ID0gY2hlY2twb2ludDsKIAkJbF9wdHItPmV4cF9tc2dfY291bnQgPSBTVEFSVF9DSEFOR0VPVkVSOwogCX0KIAotCS8qIENsZWFuIHVwIGFsbCBxdWV1ZXM6ICovCisJLyogQ2xlYW4gdXAgYWxsIHF1ZXVlcywgZXhjZXB0IGlucHV0cTogKi8KIAlfX3NrYl9xdWV1ZV9wdXJnZSgmbF9wdHItPm91dHF1ZXVlKTsKIAlfX3NrYl9xdWV1ZV9wdXJnZSgmbF9wdHItPmRlZmVycmVkX3F1ZXVlKTsKLQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmbF9wdHItPndhaXRpbmdfc2tzKSkgewotCQlza2JfcXVldWVfc3BsaWNlX2luaXQoJmxfcHRyLT53YWl0aW5nX3NrcywgJm93bmVyLT53YWl0aW5nX3Nrcyk7Ci0JCW93bmVyLT5hY3Rpb25fZmxhZ3MgfD0gVElQQ19XQUtFVVBfVVNFUlM7Ci0JfQorCXNrYl9xdWV1ZV9zcGxpY2VfaW5pdCgmbF9wdHItPndha2V1cHEsICZsX3B0ci0+aW5wdXRxKTsKKwlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmbF9wdHItPmlucHV0cSkpCisJCW93bmVyLT5hY3Rpb25fZmxhZ3MgfD0gVElQQ19NU0dfRVZUOworCW93bmVyLT5pbnB1dHEgPSAmbF9wdHItPmlucHV0cTsKIAlsX3B0ci0+bmV4dF9vdXQgPSBOVUxMOwogCWxfcHRyLT51bmFja2VkX3dpbmRvdyA9IDA7CiAJbF9wdHItPmNoZWNrcG9pbnQgPSAxOwpAQCAtNDQ4LDEzICs0NzcsMTQgQEAKIAlsaW5rX3Jlc2V0X3N0YXRpc3RpY3MobF9wdHIpOwogfQogCi12b2lkIHRpcGNfbGlua19yZXNldF9saXN0KHVuc2lnbmVkIGludCBiZWFyZXJfaWQpCit2b2lkIHRpcGNfbGlua19yZXNldF9saXN0KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGJlYXJlcl9pZCkKIHsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CiAJc3RydWN0IHRpcGNfbGluayAqbF9wdHI7CiAJc3RydWN0IHRpcGNfbm9kZSAqbl9wdHI7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobl9wdHIsICZ0aXBjX25vZGVfbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5fcHRyLCAmdG4tPm5vZGVfbGlzdCwgbGlzdCkgewogCQl0aXBjX25vZGVfbG9jayhuX3B0cik7CiAJCWxfcHRyID0gbl9wdHItPmxpbmtzW2JlYXJlcl9pZF07CiAJCWlmIChsX3B0cikKQEAgLTQ2NCwxMSArNDk0LDE0IEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGxpbmtfYWN0aXZhdGUoc3RydWN0IHRpcGNfbGluayAqbF9wdHIpCitzdGF0aWMgdm9pZCBsaW5rX2FjdGl2YXRlKHN0cnVjdCB0aXBjX2xpbmsgKmxpbmspCiB7Ci0JbF9wdHItPm5leHRfaW5fbm8gPSBsX3B0ci0+c3RhdHMucmVjdl9pbmZvID0gMTsKLQl0aXBjX25vZGVfbGlua191cChsX3B0ci0+b3duZXIsIGxfcHRyKTsKLQl0aXBjX2JlYXJlcl9hZGRfZGVzdChsX3B0ci0+YmVhcmVyX2lkLCBsX3B0ci0+YWRkcik7CisJc3RydWN0IHRpcGNfbm9kZSAqbm9kZSA9IGxpbmstPm93bmVyOworCisJbGluay0+bmV4dF9pbl9ubyA9IDE7CisJbGluay0+c3RhdHMucmVjdl9pbmZvID0gMTsKKwl0aXBjX25vZGVfbGlua191cChub2RlLCBsaW5rKTsKKwl0aXBjX2JlYXJlcl9hZGRfZGVzdChub2RlLT5uZXQsIGxpbmstPmJlYXJlcl9pZCwgbGluay0+YWRkcik7CiB9CiAKIC8qKgpAQCAtNDc5LDcgKzUxMiw3IEBACiBzdGF0aWMgdm9pZCBsaW5rX3N0YXRlX2V2ZW50KHN0cnVjdCB0aXBjX2xpbmsgKmxfcHRyLCB1bnNpZ25lZCBpbnQgZXZlbnQpCiB7CiAJc3RydWN0IHRpcGNfbGluayAqb3RoZXI7Ci0JdTMyIGNvbnRfaW50diA9IGxfcHRyLT5jb250aW51aXR5X2ludGVydmFsOworCXVuc2lnbmVkIGxvbmcgY29udF9pbnR2ID0gbF9wdHItPmNvbnRfaW50djsKIAogCWlmIChsX3B0ci0+ZmxhZ3MgJiBMSU5LX1NUT1BQRUQpCiAJCXJldHVybjsKQEAgLTUyMiw4ICs1NTUsOCBAQAogCQkJbGlua19zZXRfdGltZXIobF9wdHIsIGNvbnRfaW50diAvIDQpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVTRVRfTVNHOgotCQkJcHJfaW5mbygiJXM8JXM+LCByZXF1ZXN0ZWQgYnkgcGVlclxuIiwgbGlua19yc3RfbXNnLAotCQkJCWxfcHRyLT5uYW1lKTsKKwkJCXByX2RlYnVnKCIlczwlcz4sIHJlcXVlc3RlZCBieSBwZWVyXG4iLAorCQkJCSBsaW5rX3JzdF9tc2csIGxfcHRyLT5uYW1lKTsKIAkJCXRpcGNfbGlua19yZXNldChsX3B0cik7CiAJCQlsX3B0ci0+c3RhdGUgPSBSRVNFVF9SRVNFVDsKIAkJCWxfcHRyLT5mc21fbXNnX2NudCA9IDA7CkBAIC01MzMsNyArNTY2LDcgQEAKIAkJCWxpbmtfc2V0X3RpbWVyKGxfcHRyLCBjb250X2ludHYpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcl9lcnIoIiVzJXUgaW4gV1cgc3RhdGVcbiIsIGxpbmtfdW5rX2V2dCwgZXZlbnQpOworCQkJcHJfZGVidWcoIiVzJXUgaW4gV1cgc3RhdGVcbiIsIGxpbmtfdW5rX2V2dCwgZXZlbnQpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgV09SS0lOR19VTktOT1dOOgpAQCAtNTQ1LDggKzU3OCw4IEBACiAJCQlsaW5rX3NldF90aW1lcihsX3B0ciwgY29udF9pbnR2KTsKIAkJCWJyZWFrOwogCQljYXNlIFJFU0VUX01TRzoKLQkJCXByX2luZm8oIiVzPCVzPiwgcmVxdWVzdGVkIGJ5IHBlZXIgd2hpbGUgcHJvYmluZ1xuIiwKLQkJCQlsaW5rX3JzdF9tc2csIGxfcHRyLT5uYW1lKTsKKwkJCXByX2RlYnVnKCIlczwlcz4sIHJlcXVlc3RlZCBieSBwZWVyIHdoaWxlIHByb2JpbmdcbiIsCisJCQkJIGxpbmtfcnN0X21zZywgbF9wdHItPm5hbWUpOwogCQkJdGlwY19saW5rX3Jlc2V0KGxfcHRyKTsKIAkJCWxfcHRyLT5zdGF0ZSA9IFJFU0VUX1JFU0VUOwogCQkJbF9wdHItPmZzbV9tc2dfY250ID0gMDsKQEAgLTU3Miw4ICs2MDUsOCBAQAogCQkJCWxfcHRyLT5mc21fbXNnX2NudCsrOwogCQkJCWxpbmtfc2V0X3RpbWVyKGxfcHRyLCBjb250X2ludHYgLyA0KTsKIAkJCX0gZWxzZSB7CS8qIExpbmsgaGFzIGZhaWxlZCAqLwotCQkJCXByX3dhcm4oIiVzPCVzPiwgcGVlciBub3QgcmVzcG9uZGluZ1xuIiwKLQkJCQkJbGlua19yc3RfbXNnLCBsX3B0ci0+bmFtZSk7CisJCQkJcHJfZGVidWcoIiVzPCVzPiwgcGVlciBub3QgcmVzcG9uZGluZ1xuIiwKKwkJCQkJIGxpbmtfcnN0X21zZywgbF9wdHItPm5hbWUpOwogCQkJCXRpcGNfbGlua19yZXNldChsX3B0cik7CiAJCQkJbF9wdHItPnN0YXRlID0gUkVTRVRfVU5LTk9XTjsKIAkJCQlsX3B0ci0+ZnNtX21zZ19jbnQgPSAwOwpAQCAtNjE0LDcgKzY0Nyw5IEBACiAJCQlicmVhazsKIAkJY2FzZSBTVEFSVElOR19FVlQ6CiAJCQlsX3B0ci0+ZmxhZ3MgfD0gTElOS19TVEFSVEVEOwotCQkJLyogZmFsbCB0aHJvdWdoICovCisJCQlsX3B0ci0+ZnNtX21zZ19jbnQrKzsKKwkJCWxpbmtfc2V0X3RpbWVyKGxfcHRyLCBjb250X2ludHYpOworCQkJYnJlYWs7CiAJCWNhc2UgVElNRU9VVF9FVlQ6CiAJCQl0aXBjX2xpbmtfcHJvdG9feG1pdChsX3B0ciwgUkVTRVRfTVNHLCAwLCAwLCAwLCAwLCAwKTsKIAkJCWxfcHRyLT5mc21fbXNnX2NudCsrOwpAQCAtNzAwLDcgKzczNSw4IEBACiAgKiBPbmx5IHRoZSBzb2NrZXQgZnVuY3Rpb25zIHRpcGNfc2VuZF9zdHJlYW0oKSBhbmQgdGlwY19zZW5kX3BhY2tldCgpIG5lZWQKICAqIHRvIGFjdCBvbiB0aGUgcmV0dXJuIHZhbHVlLCBzaW5jZSB0aGV5IG1heSBuZWVkIHRvIGRvIG1vcmUgc2VuZCBhdHRlbXB0cy4KICAqLwotaW50IF9fdGlwY19saW5rX3htaXQoc3RydWN0IHRpcGNfbGluayAqbGluaywgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKK2ludCBfX3RpcGNfbGlua194bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbGluaywKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQogewogCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZyhza2JfcGVlayhsaXN0KSk7CiAJdWludCBwc3ogPSBtc2dfc2l6ZShtc2cpOwpAQCAtNzMzLDcgKzc2OSw4IEBACiAKIAkJaWYgKHNrYl9xdWV1ZV9sZW4ob3V0cXVldWUpIDwgc25kbGltKSB7CiAJCQlfX3NrYl9xdWV1ZV90YWlsKG91dHF1ZXVlLCBza2IpOwotCQkJdGlwY19iZWFyZXJfc2VuZChsaW5rLT5iZWFyZXJfaWQsIHNrYiwgYWRkcik7CisJCQl0aXBjX2JlYXJlcl9zZW5kKG5ldCwgbGluay0+YmVhcmVyX2lkLAorCQkJCQkgc2tiLCBhZGRyKTsKIAkJCWxpbmstPm5leHRfb3V0ID0gTlVMTDsKIAkJCWxpbmstPnVuYWNrZWRfd2luZG93ID0gMDsKIAkJfSBlbHNlIGlmICh0aXBjX21zZ19idW5kbGUob3V0cXVldWUsIHNrYiwgbXR1KSkgewpAQCAtNzU4LDcgKzc5NSw3IEBACiAKIHN0YXRpYyB2b2lkIHNrYjJsaXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCiB7Ci0JX19za2JfcXVldWVfaGVhZF9pbml0KGxpc3QpOworCXNrYl9xdWV1ZV9oZWFkX2luaXQobGlzdCk7CiAJX19za2JfcXVldWVfdGFpbChsaXN0LCBza2IpOwogfQogCkBAIC03NjcsMTkgKzgwNCwyMSBAQAogCXN0cnVjdCBza19idWZmX2hlYWQgaGVhZDsKIAogCXNrYjJsaXN0KHNrYiwgJmhlYWQpOwotCXJldHVybiBfX3RpcGNfbGlua194bWl0KGxpbmssICZoZWFkKTsKKwlyZXR1cm4gX190aXBjX2xpbmtfeG1pdChsaW5rLT5vd25lci0+bmV0LCBsaW5rLCAmaGVhZCk7CiB9CiAKLWludCB0aXBjX2xpbmtfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGRub2RlLCB1MzIgc2VsZWN0b3IpCitpbnQgdGlwY19saW5rX3htaXRfc2tiKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGRub2RlLAorCQkgICAgICAgdTMyIHNlbGVjdG9yKQogewogCXN0cnVjdCBza19idWZmX2hlYWQgaGVhZDsKIAogCXNrYjJsaXN0KHNrYiwgJmhlYWQpOwotCXJldHVybiB0aXBjX2xpbmtfeG1pdCgmaGVhZCwgZG5vZGUsIHNlbGVjdG9yKTsKKwlyZXR1cm4gdGlwY19saW5rX3htaXQobmV0LCAmaGVhZCwgZG5vZGUsIHNlbGVjdG9yKTsKIH0KIAogLyoqCiAgKiB0aXBjX2xpbmtfeG1pdCgpIGlzIHRoZSBnZW5lcmFsIGxpbmsgbGV2ZWwgZnVuY3Rpb24gZm9yIG1lc3NhZ2Ugc2VuZGluZworICogQG5ldDogdGhlIGFwcGxpY2FibGUgbmV0IG5hbWVzcGFjZQogICogQGxpc3Q6IGNoYWluIG9mIGJ1ZmZlcnMgY29udGFpbmluZyBtZXNzYWdlCiAgKiBAZHN6OiBhbW91bnQgb2YgdXNlciBkYXRhIHRvIGJlIHNlbnQKICAqIEBkbm9kZTogYWRkcmVzcyBvZiBkZXN0aW5hdGlvbiBub2RlCkBAIC03ODcsMzMgKzgyNiwyOCBAQAogICogQ29uc3VtZXMgdGhlIGJ1ZmZlciBjaGFpbiwgZXhjZXB0IHdoZW4gcmV0dXJuaW5nIC1FTElOS0NPTkcKICAqIFJldHVybnMgMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgZXJybm86IC1FTElOS0NPTkcsLUVIT1NUVU5SRUFDSCwtRU1TR1NJWkUKICAqLwotaW50IHRpcGNfbGlua194bWl0KHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsIHUzMiBkbm9kZSwgdTMyIHNlbGVjdG9yKQoraW50IHRpcGNfbGlua194bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwgdTMyIGRub2RlLAorCQkgICB1MzIgc2VsZWN0b3IpCiB7CiAJc3RydWN0IHRpcGNfbGluayAqbGluayA9IE5VTEw7CiAJc3RydWN0IHRpcGNfbm9kZSAqbm9kZTsKIAlpbnQgcmMgPSAtRUhPU1RVTlJFQUNIOwogCi0Jbm9kZSA9IHRpcGNfbm9kZV9maW5kKGRub2RlKTsKKwlub2RlID0gdGlwY19ub2RlX2ZpbmQobmV0LCBkbm9kZSk7CiAJaWYgKG5vZGUpIHsKIAkJdGlwY19ub2RlX2xvY2sobm9kZSk7CiAJCWxpbmsgPSBub2RlLT5hY3RpdmVfbGlua3Nbc2VsZWN0b3IgJiAxXTsKIAkJaWYgKGxpbmspCi0JCQlyYyA9IF9fdGlwY19saW5rX3htaXQobGluaywgbGlzdCk7CisJCQlyYyA9IF9fdGlwY19saW5rX3htaXQobmV0LCBsaW5rLCBsaXN0KTsKIAkJdGlwY19ub2RlX3VubG9jayhub2RlKTsKIAl9Ci0KIAlpZiAobGluaykKIAkJcmV0dXJuIHJjOwogCi0JaWYgKGxpa2VseShpbl9vd25fbm9kZShkbm9kZSkpKSB7Ci0JCS8qIEFzIGEgbm9kZSBsb2NhbCBtZXNzYWdlIGNoYWluIG5ldmVyIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUKLQkJICogYnVmZmVyLCB3ZSBqdXN0IG5lZWQgdG8gZGVxdWV1ZSBvbmUgU0tCIGJ1ZmZlciBmcm9tIHRoZQotCQkgKiBoZWFkIGxpc3QuCi0JCSAqLwotCQlyZXR1cm4gdGlwY19za19yY3YoX19za2JfZGVxdWV1ZShsaXN0KSk7Ci0JfQotCV9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpOworCWlmIChsaWtlbHkoaW5fb3duX25vZGUobmV0LCBkbm9kZSkpKQorCQlyZXR1cm4gdGlwY19za19yY3YobmV0LCBsaXN0KTsKIAorCV9fc2tiX3F1ZXVlX3B1cmdlKGxpc3QpOwogCXJldHVybiByYzsKIH0KIApAQCAtODM1LDcgKzg2OSw4IEBACiAJCXJldHVybjsKIAogCW1zZyA9IGJ1Zl9tc2coc2tiKTsKLQl0aXBjX21zZ19pbml0KG1zZywgQkNBU1RfUFJPVE9DT0wsIFNUQVRFX01TRywgSU5UX0hfU0laRSwgbGluay0+YWRkcik7CisJdGlwY19tc2dfaW5pdChsaW5rX293bl9hZGRyKGxpbmspLCBtc2csIEJDQVNUX1BST1RPQ09MLCBTVEFURV9NU0csCisJCSAgICAgIElOVF9IX1NJWkUsIGxpbmstPmFkZHIpOwogCW1zZ19zZXRfbGFzdF9iY2FzdChtc2csIGxpbmstPm93bmVyLT5iY2xpbmsuYWNrZWQpOwogCV9fdGlwY19saW5rX3htaXRfc2tiKGxpbmssIHNrYik7CiB9CkBAIC04OTAsNyArOTI1LDggQEAKIAkJCW1zZ19zZXRfYmNhc3RfYWNrKG1zZywgbF9wdHItPm93bmVyLT5iY2xpbmsubGFzdF9pbik7CiAJCQlpZiAobXNnX3VzZXIobXNnKSA9PSBNU0dfQlVORExFUikKIAkJCQlUSVBDX1NLQl9DQihza2IpLT5idW5kbGluZyA9IGZhbHNlOwotCQkJdGlwY19iZWFyZXJfc2VuZChsX3B0ci0+YmVhcmVyX2lkLCBza2IsCisJCQl0aXBjX2JlYXJlcl9zZW5kKGxfcHRyLT5vd25lci0+bmV0LAorCQkJCQkgbF9wdHItPmJlYXJlcl9pZCwgc2tiLAogCQkJCQkgJmxfcHRyLT5tZWRpYV9hZGRyKTsKIAkJCWxfcHRyLT5uZXh0X291dCA9IHRpcGNfc2tiX3F1ZXVlX25leHQob3V0cXVldWUsIHNrYik7CiAJCX0gZWxzZSB7CkBAIC05MjMsNiArOTU5LDcgQEAKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKmJ1ZikKIHsKIAlzdHJ1Y3QgdGlwY19tc2cgKm1zZyA9IGJ1Zl9tc2coYnVmKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBsX3B0ci0+b3duZXItPm5ldDsKIAogCXByX3dhcm4oIlJldHJhbnNtaXNzaW9uIGZhaWx1cmUgb24gbGluayA8JXM+XG4iLCBsX3B0ci0+bmFtZSk7CiAKQEAgLTk0MCw3ICs5NzcsNyBAQAogCQlwcl9jb250KCJPdXRzdGFuZGluZyBhY2tzOiAlbHVcbiIsCiAJCQkodW5zaWduZWQgbG9uZykgVElQQ19TS0JfQ0IoYnVmKS0+aGFuZGxlKTsKIAotCQluX3B0ciA9IHRpcGNfYmNsaW5rX3JldHJhbnNtaXRfdG8oKTsKKwkJbl9wdHIgPSB0aXBjX2JjbGlua19yZXRyYW5zbWl0X3RvKG5ldCk7CiAJCXRpcGNfbm9kZV9sb2NrKG5fcHRyKTsKIAogCQl0aXBjX2FkZHJfc3RyaW5nX2ZpbGwoYWRkcl9zdHJpbmcsIG5fcHRyLT5hZGRyKTsKQEAgLTk1NSw3ICs5OTIsNyBAQAogCiAJCXRpcGNfbm9kZV91bmxvY2sobl9wdHIpOwogCi0JCXRpcGNfYmNsaW5rX3NldF9mbGFncyhUSVBDX0JDTElOS19SRVNFVCk7CisJCXRpcGNfYmNsaW5rX3NldF9mbGFncyhuZXQsIFRJUENfQkNMSU5LX1JFU0VUKTsKIAkJbF9wdHItPnN0YWxlX2NvdW50ID0gMDsKIAl9CiB9CkBAIC05ODcsNyArMTAyNCw4IEBACiAJCW1zZyA9IGJ1Zl9tc2coc2tiKTsKIAkJbXNnX3NldF9hY2sobXNnLCBtb2QobF9wdHItPm5leHRfaW5fbm8gLSAxKSk7CiAJCW1zZ19zZXRfYmNhc3RfYWNrKG1zZywgbF9wdHItPm93bmVyLT5iY2xpbmsubGFzdF9pbik7Ci0JCXRpcGNfYmVhcmVyX3NlbmQobF9wdHItPmJlYXJlcl9pZCwgc2tiLCAmbF9wdHItPm1lZGlhX2FkZHIpOworCQl0aXBjX2JlYXJlcl9zZW5kKGxfcHRyLT5vd25lci0+bmV0LCBsX3B0ci0+YmVhcmVyX2lkLCBza2IsCisJCQkJICZsX3B0ci0+bWVkaWFfYWRkcik7CiAJCXJldHJhbnNtaXRzLS07CiAJCWxfcHRyLT5zdGF0cy5yZXRyYW5zbWl0dGVkKys7CiAJfQpAQCAtMTA2MywxNCArMTEwMSwxNiBAQAogCiAvKioKICAqIHRpcGNfcmN2IC0gcHJvY2VzcyBUSVBDIHBhY2tldHMvbWVzc2FnZXMgYXJyaXZpbmcgZnJvbSBvZmYtbm9kZQorICogQG5ldDogdGhlIGFwcGxpY2FibGUgbmV0IG5hbWVzcGFjZQogICogQHNrYjogVElQQyBwYWNrZXQKICAqIEBiX3B0cjogcG9pbnRlciB0byBiZWFyZXIgbWVzc2FnZSBhcnJpdmVkIG9uCiAgKgogICogSW52b2tlZCB3aXRoIG5vIGxvY2tzIGhlbGQuICBCZWFyZXIgcG9pbnRlciBtdXN0IHBvaW50IHRvIGEgdmFsaWQgYmVhcmVyCiAgKiBzdHJ1Y3R1cmUgKGkuZS4gY2Fubm90IGJlIE5VTEwpLCBidXQgYmVhcmVyIGNhbiBiZSBpbmFjdGl2ZS4KICAqLwotdm9pZCB0aXBjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyKQordm9pZCB0aXBjX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHIpCiB7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOwogCXN0cnVjdCBza19idWZmX2hlYWQgaGVhZDsKIAlzdHJ1Y3QgdGlwY19ub2RlICpuX3B0cjsKIAlzdHJ1Y3QgdGlwY19saW5rICpsX3B0cjsKQEAgLTEwOTYsMTkgKzExMzYsMTkgQEAKIAogCQlpZiAodW5saWtlbHkobXNnX25vbl9zZXEobXNnKSkpIHsKIAkJCWlmIChtc2dfdXNlcihtc2cpID09ICBMSU5LX0NPTkZJRykKLQkJCQl0aXBjX2Rpc2NfcmN2KHNrYiwgYl9wdHIpOworCQkJCXRpcGNfZGlzY19yY3YobmV0LCBza2IsIGJfcHRyKTsKIAkJCWVsc2UKLQkJCQl0aXBjX2JjbGlua19yY3Yoc2tiKTsKKwkJCQl0aXBjX2JjbGlua19yY3YobmV0LCBza2IpOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiBEaXNjYXJkIHVuaWNhc3QgbGluayBtZXNzYWdlcyBkZXN0aW5lZCBmb3IgYW5vdGhlciBub2RlICovCiAJCWlmICh1bmxpa2VseSghbXNnX3Nob3J0KG1zZykgJiYKLQkJCSAgICAgKG1zZ19kZXN0bm9kZShtc2cpICE9IHRpcGNfb3duX2FkZHIpKSkKKwkJCSAgICAgKG1zZ19kZXN0bm9kZShtc2cpICE9IHRuLT5vd25fYWRkcikpKQogCQkJZ290byBkaXNjYXJkOwogCiAJCS8qIExvY2F0ZSBuZWlnaGJvcmluZyBub2RlIHRoYXQgc2VudCBtZXNzYWdlICovCi0JCW5fcHRyID0gdGlwY19ub2RlX2ZpbmQobXNnX3ByZXZub2RlKG1zZykpOworCQluX3B0ciA9IHRpcGNfbm9kZV9maW5kKG5ldCwgbXNnX3ByZXZub2RlKG1zZykpOwogCQlpZiAodW5saWtlbHkoIW5fcHRyKSkKIAkJCWdvdG8gZGlzY2FyZDsKIAkJdGlwY19ub2RlX2xvY2sobl9wdHIpOwpAQCAtMTExNiw3ICsxMTU2LDcgQEAKIAkJLyogTG9jYXRlIHVuaWNhc3QgbGluayBlbmRwb2ludCB0aGF0IHNob3VsZCBoYW5kbGUgbWVzc2FnZSAqLwogCQlsX3B0ciA9IG5fcHRyLT5saW5rc1tiX3B0ci0+aWRlbnRpdHldOwogCQlpZiAodW5saWtlbHkoIWxfcHRyKSkKLQkJCWdvdG8gdW5sb2NrX2Rpc2NhcmQ7CisJCQlnb3RvIHVubG9jazsKIAogCQkvKiBWZXJpZnkgdGhhdCBjb21tdW5pY2F0aW9uIHdpdGggbm9kZSBpcyBjdXJyZW50bHkgYWxsb3dlZCAqLwogCQlpZiAoKG5fcHRyLT5hY3Rpb25fZmxhZ3MgJiBUSVBDX1dBSVRfUEVFUl9MSU5LU19ET1dOKSAmJgpAQCAtMTEyNyw3ICsxMTY3LDcgQEAKIAkJCW5fcHRyLT5hY3Rpb25fZmxhZ3MgJj0gflRJUENfV0FJVF9QRUVSX0xJTktTX0RPV047CiAKIAkJaWYgKHRpcGNfbm9kZV9ibG9ja2VkKG5fcHRyKSkKLQkJCWdvdG8gdW5sb2NrX2Rpc2NhcmQ7CisJCQlnb3RvIHVubG9jazsKIAogCQkvKiBWYWxpZGF0ZSBtZXNzYWdlIHNlcXVlbmNlIG51bWJlciBpbmZvICovCiAJCXNlcV9ubyA9IG1zZ19zZXFubyhtc2cpOwpAQCAtMTE1MSwxOCArMTE5MSwxNiBAQAogCQlpZiAodW5saWtlbHkobF9wdHItPm5leHRfb3V0KSkKIAkJCXRpcGNfbGlua19wdXNoX3BhY2tldHMobF9wdHIpOwogCi0JCWlmIChyZWxlYXNlZCAmJiAhc2tiX3F1ZXVlX2VtcHR5KCZsX3B0ci0+d2FpdGluZ19za3MpKSB7CisJCWlmIChyZWxlYXNlZCAmJiAhc2tiX3F1ZXVlX2VtcHR5KCZsX3B0ci0+d2FrZXVwcSkpCiAJCQlsaW5rX3ByZXBhcmVfd2FrZXVwKGxfcHRyKTsKLQkJCWxfcHRyLT5vd25lci0+YWN0aW9uX2ZsYWdzIHw9IFRJUENfV0FLRVVQX1VTRVJTOwotCQl9CiAKIAkJLyogUHJvY2VzcyB0aGUgaW5jb21pbmcgcGFja2V0ICovCiAJCWlmICh1bmxpa2VseSghbGlua193b3JraW5nX3dvcmtpbmcobF9wdHIpKSkgewogCQkJaWYgKG1zZ191c2VyKG1zZykgPT0gTElOS19QUk9UT0NPTCkgewogCQkJCXRpcGNfbGlua19wcm90b19yY3YobF9wdHIsIHNrYik7CiAJCQkJbGlua19yZXRyaWV2ZV9kZWZxKGxfcHRyLCAmaGVhZCk7Ci0JCQkJdGlwY19ub2RlX3VubG9jayhuX3B0cik7Ci0JCQkJY29udGludWU7CisJCQkJc2tiID0gTlVMTDsKKwkJCQlnb3RvIHVubG9jazsKIAkJCX0KIAogCQkJLyogVHJhZmZpYyBtZXNzYWdlLiBDb25kaXRpb25hbGx5IGFjdGl2YXRlIGxpbmsgKi8KQEAgLTExNzEsMTggKzEyMDksMTggQEAKIAkJCWlmIChsaW5rX3dvcmtpbmdfd29ya2luZyhsX3B0cikpIHsKIAkJCQkvKiBSZS1pbnNlcnQgYnVmZmVyIGluIGZyb250IG9mIHF1ZXVlICovCiAJCQkJX19za2JfcXVldWVfaGVhZCgmaGVhZCwgc2tiKTsKLQkJCQl0aXBjX25vZGVfdW5sb2NrKG5fcHRyKTsKLQkJCQljb250aW51ZTsKKwkJCQlza2IgPSBOVUxMOworCQkJCWdvdG8gdW5sb2NrOwogCQkJfQotCQkJZ290byB1bmxvY2tfZGlzY2FyZDsKKwkJCWdvdG8gdW5sb2NrOwogCQl9CiAKIAkJLyogTGluayBpcyBub3cgaW4gc3RhdGUgV09SS0lOR19XT1JLSU5HICovCiAJCWlmICh1bmxpa2VseShzZXFfbm8gIT0gbW9kKGxfcHRyLT5uZXh0X2luX25vKSkpIHsKIAkJCWxpbmtfaGFuZGxlX291dF9vZl9zZXFfbXNnKGxfcHRyLCBza2IpOwogCQkJbGlua19yZXRyaWV2ZV9kZWZxKGxfcHRyLCAmaGVhZCk7Ci0JCQl0aXBjX25vZGVfdW5sb2NrKG5fcHRyKTsKLQkJCWNvbnRpbnVlOworCQkJc2tiID0gTlVMTDsKKwkJCWdvdG8gdW5sb2NrOwogCQl9CiAJCWxfcHRyLT5uZXh0X2luX25vKys7CiAJCWlmICh1bmxpa2VseSghc2tiX3F1ZXVlX2VtcHR5KCZsX3B0ci0+ZGVmZXJyZWRfcXVldWUpKSkKQEAgLTExOTIsNzYgKzEyMzAsMjYgQEAKIAkJCWxfcHRyLT5zdGF0cy5zZW50X2Fja3MrKzsKIAkJCXRpcGNfbGlua19wcm90b194bWl0KGxfcHRyLCBTVEFURV9NU0csIDAsIDAsIDAsIDAsIDApOwogCQl9Ci0KLQkJaWYgKHRpcGNfbGlua19wcmVwYXJlX2lucHV0KGxfcHRyLCAmc2tiKSkgewotCQkJdGlwY19ub2RlX3VubG9jayhuX3B0cik7Ci0JCQljb250aW51ZTsKLQkJfQotCQl0aXBjX25vZGVfdW5sb2NrKG5fcHRyKTsKLQotCQlpZiAodGlwY19saW5rX2lucHV0KGxfcHRyLCBza2IpICE9IDApCi0JCQlnb3RvIGRpc2NhcmQ7Ci0JCWNvbnRpbnVlOwotdW5sb2NrX2Rpc2NhcmQ6CisJCXRpcGNfbGlua19pbnB1dChsX3B0ciwgc2tiKTsKKwkJc2tiID0gTlVMTDsKK3VubG9jazoKIAkJdGlwY19ub2RlX3VubG9jayhuX3B0cik7CiBkaXNjYXJkOgotCQlrZnJlZV9za2Ioc2tiKTsKKwkJaWYgKHVubGlrZWx5KHNrYikpCisJCQlrZnJlZV9za2Ioc2tiKTsKIAl9CiB9CiAKLS8qKgotICogdGlwY19saW5rX3ByZXBhcmVfaW5wdXQgLSBwcm9jZXNzIFRJUEMgbGluayBtZXNzYWdlcworLyogdGlwY19kYXRhX2lucHV0IC0gZGVsaXZlciBkYXRhIGFuZCBuYW1lIGRpc3RyIG1zZ3MgdG8gdXBwZXIgbGF5ZXIKICAqCi0gKiByZXR1cm5zIG5vbnplcm8gaWYgdGhlIG1lc3NhZ2Ugd2FzIGNvbnN1bWVkCi0gKgorICogQ29uc3VtZXMgYnVmZmVyIGlmIG1lc3NhZ2UgaXMgb2YgcmlnaHQgdHlwZQogICogTm9kZSBsb2NrIG11c3QgYmUgaGVsZAogICovCi1zdGF0aWMgaW50IHRpcGNfbGlua19wcmVwYXJlX2lucHV0KHN0cnVjdCB0aXBjX2xpbmsgKmwsIHN0cnVjdCBza19idWZmICoqYnVmKQorc3RhdGljIGJvb2wgdGlwY19kYXRhX2lucHV0KHN0cnVjdCB0aXBjX2xpbmsgKmxpbmssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHRpcGNfbm9kZSAqbjsKLQlzdHJ1Y3QgdGlwY19tc2cgKm1zZzsKLQlpbnQgcmVzID0gLUVJTlZBTDsKLQotCW4gPSBsLT5vd25lcjsKLQltc2cgPSBidWZfbXNnKCpidWYpOwotCXN3aXRjaCAobXNnX3VzZXIobXNnKSkgewotCWNhc2UgQ0hBTkdFT1ZFUl9QUk9UT0NPTDoKLQkJaWYgKHRpcGNfbGlua190dW5uZWxfcmN2KG4sIGJ1ZikpCi0JCQlyZXMgPSAwOwotCQlicmVhazsKLQljYXNlIE1TR19GUkFHTUVOVEVSOgotCQlsLT5zdGF0cy5yZWN2X2ZyYWdtZW50cysrOwotCQlpZiAodGlwY19idWZfYXBwZW5kKCZsLT5yZWFzbV9idWYsIGJ1ZikpIHsKLQkJCWwtPnN0YXRzLnJlY3ZfZnJhZ21lbnRlZCsrOwotCQkJcmVzID0gMDsKLQkJfSBlbHNlIGlmICghbC0+cmVhc21fYnVmKSB7Ci0JCQl0aXBjX2xpbmtfcmVzZXQobCk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBNU0dfQlVORExFUjoKLQkJbC0+c3RhdHMucmVjdl9idW5kbGVzKys7Ci0JCWwtPnN0YXRzLnJlY3ZfYnVuZGxlZCArPSBtc2dfbXNnY250KG1zZyk7Ci0JCXJlcyA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgTkFNRV9ESVNUUklCVVRPUjoKLQkJbi0+YmNsaW5rLnJlY3ZfcGVybWl0dGVkID0gdHJ1ZTsKLQkJcmVzID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBCQ0FTVF9QUk9UT0NPTDoKLQkJdGlwY19saW5rX3N5bmNfcmN2KG4sICpidWYpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXMgPSAwOwotCX0KLQlyZXR1cm4gcmVzOwotfQotLyoqCi0gKiB0aXBjX2xpbmtfaW5wdXQgLSBEZWxpdmVyIG1lc3NhZ2UgdG9vIGhpZ2hlciBsYXllcnMKLSAqLwotc3RhdGljIGludCB0aXBjX2xpbmtfaW5wdXQoc3RydWN0IHRpcGNfbGluayAqbCwgc3RydWN0IHNrX2J1ZmYgKmJ1ZikKLXsKLQlzdHJ1Y3QgdGlwY19tc2cgKm1zZyA9IGJ1Zl9tc2coYnVmKTsKLQlpbnQgcmVzID0gMDsKKwlzdHJ1Y3QgdGlwY19ub2RlICpub2RlID0gbGluay0+b3duZXI7CisJc3RydWN0IHRpcGNfbXNnICptc2cgPSBidWZfbXNnKHNrYik7CisJdTMyIGRwb3J0ID0gbXNnX2Rlc3Rwb3J0KG1zZyk7CiAKIAlzd2l0Y2ggKG1zZ191c2VyKG1zZykpIHsKIAljYXNlIFRJUENfTE9XX0lNUE9SVEFOQ0U6CkBAIC0xMjY5LDE4ICsxMjU3LDc1IEBACiAJY2FzZSBUSVBDX0hJR0hfSU1QT1JUQU5DRToKIAljYXNlIFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRToKIAljYXNlIENPTk5fTUFOQUdFUjoKLQkJdGlwY19za19yY3YoYnVmKTsKLQkJYnJlYWs7CisJCWlmICh0aXBjX3NrYl9xdWV1ZV90YWlsKCZsaW5rLT5pbnB1dHEsIHNrYiwgZHBvcnQpKSB7CisJCQlub2RlLT5pbnB1dHEgPSAmbGluay0+aW5wdXRxOworCQkJbm9kZS0+YWN0aW9uX2ZsYWdzIHw9IFRJUENfTVNHX0VWVDsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKIAljYXNlIE5BTUVfRElTVFJJQlVUT1I6Ci0JCXRpcGNfbmFtZWRfcmN2KGJ1Zik7Ci0JCWJyZWFrOworCQlub2RlLT5iY2xpbmsucmVjdl9wZXJtaXR0ZWQgPSB0cnVlOworCQlub2RlLT5uYW1lZHEgPSAmbGluay0+bmFtZWRxOworCQlza2JfcXVldWVfdGFpbCgmbGluay0+bmFtZWRxLCBza2IpOworCQlpZiAoc2tiX3F1ZXVlX2xlbigmbGluay0+bmFtZWRxKSA9PSAxKQorCQkJbm9kZS0+YWN0aW9uX2ZsYWdzIHw9IFRJUENfTkFNRURfTVNHX0VWVDsKKwkJcmV0dXJuIHRydWU7CiAJY2FzZSBNU0dfQlVORExFUjoKLQkJdGlwY19saW5rX2J1bmRsZV9yY3YoYnVmKTsKKwljYXNlIENIQU5HRU9WRVJfUFJPVE9DT0w6CisJY2FzZSBNU0dfRlJBR01FTlRFUjoKKwljYXNlIEJDQVNUX1BST1RPQ09MOgorCQlyZXR1cm4gZmFsc2U7CisJZGVmYXVsdDoKKwkJcHJfd2FybigiRHJvcHBpbmcgcmVjZWl2ZWQgaWxsZWdhbCBtc2cgdHlwZVxuIik7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gZmFsc2U7CisJfTsKK30KKworLyogdGlwY19saW5rX2lucHV0IC0gcHJvY2VzcyBwYWNrZXQgdGhhdCBoYXMgcGFzc2VkIGxpbmsgcHJvdG9jb2wgY2hlY2sKKyAqCisgKiBDb25zdW1lcyBidWZmZXIKKyAqIE5vZGUgbG9jayBtdXN0IGJlIGhlbGQKKyAqLworc3RhdGljIHZvaWQgdGlwY19saW5rX2lucHV0KHN0cnVjdCB0aXBjX2xpbmsgKmxpbmssIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHRpcGNfbm9kZSAqbm9kZSA9IGxpbmstPm93bmVyOworCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZyhza2IpOworCXN0cnVjdCBza19idWZmICppc2tiOworCWludCBwb3MgPSAwOworCisJaWYgKGxpa2VseSh0aXBjX2RhdGFfaW5wdXQobGluaywgc2tiKSkpCisJCXJldHVybjsKKworCXN3aXRjaCAobXNnX3VzZXIobXNnKSkgeworCWNhc2UgQ0hBTkdFT1ZFUl9QUk9UT0NPTDoKKwkJaWYgKCF0aXBjX2xpbmtfdHVubmVsX3Jjdihub2RlLCAmc2tiKSkKKwkJCWJyZWFrOworCQlpZiAobXNnX3VzZXIoYnVmX21zZyhza2IpKSAhPSBNU0dfQlVORExFUikgeworCQkJdGlwY19kYXRhX2lucHV0KGxpbmssIHNrYik7CisJCQlicmVhazsKKwkJfQorCWNhc2UgTVNHX0JVTkRMRVI6CisJCWxpbmstPnN0YXRzLnJlY3ZfYnVuZGxlcysrOworCQlsaW5rLT5zdGF0cy5yZWN2X2J1bmRsZWQgKz0gbXNnX21zZ2NudChtc2cpOworCisJCXdoaWxlICh0aXBjX21zZ19leHRyYWN0KHNrYiwgJmlza2IsICZwb3MpKQorCQkJdGlwY19kYXRhX2lucHV0KGxpbmssIGlza2IpOworCQlicmVhazsKKwljYXNlIE1TR19GUkFHTUVOVEVSOgorCQlsaW5rLT5zdGF0cy5yZWN2X2ZyYWdtZW50cysrOworCQlpZiAodGlwY19idWZfYXBwZW5kKCZsaW5rLT5yZWFzbV9idWYsICZza2IpKSB7CisJCQlsaW5rLT5zdGF0cy5yZWN2X2ZyYWdtZW50ZWQrKzsKKwkJCXRpcGNfZGF0YV9pbnB1dChsaW5rLCBza2IpOworCQl9IGVsc2UgaWYgKCFsaW5rLT5yZWFzbV9idWYpIHsKKwkJCXRpcGNfbGlua19yZXNldChsaW5rKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEJDQVNUX1BST1RPQ09MOgorCQl0aXBjX2xpbmtfc3luY19yY3Yobm9kZSwgc2tiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcmVzID0gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIHJlczsKKwkJYnJlYWs7CisJfTsKIH0KIAogLyoqCkBAIC0xMzgxLDcgKzE0MjYsNyBAQAogCW1zZ19zZXRfdHlwZShtc2csIG1zZ190eXApOwogCW1zZ19zZXRfbmV0X3BsYW5lKG1zZywgbF9wdHItPm5ldF9wbGFuZSk7CiAJbXNnX3NldF9iY2FzdF9hY2sobXNnLCBsX3B0ci0+b3duZXItPmJjbGluay5sYXN0X2luKTsKLQltc2dfc2V0X2xhc3RfYmNhc3QobXNnLCB0aXBjX2JjbGlua19nZXRfbGFzdF9zZW50KCkpOworCW1zZ19zZXRfbGFzdF9iY2FzdChtc2csIHRpcGNfYmNsaW5rX2dldF9sYXN0X3NlbnQobF9wdHItPm93bmVyLT5uZXQpKTsKIAogCWlmIChtc2dfdHlwID09IFNUQVRFX01TRykgewogCQl1MzIgbmV4dF9zZW50ID0gbW9kKGxfcHRyLT5uZXh0X291dF9ubyk7CkBAIC0xNDQ1LDcgKzE0OTAsOCBAQAogCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKGJ1ZiwgbXNnLCBzaXplb2YobF9wdHItPnByb3RvX21zZykpOwogCWJ1Zi0+cHJpb3JpdHkgPSBUQ19QUklPX0NPTlRST0w7CiAKLQl0aXBjX2JlYXJlcl9zZW5kKGxfcHRyLT5iZWFyZXJfaWQsIGJ1ZiwgJmxfcHRyLT5tZWRpYV9hZGRyKTsKKwl0aXBjX2JlYXJlcl9zZW5kKGxfcHRyLT5vd25lci0+bmV0LCBsX3B0ci0+YmVhcmVyX2lkLCBidWYsCisJCQkgJmxfcHRyLT5tZWRpYV9hZGRyKTsKIAlsX3B0ci0+dW5hY2tlZF93aW5kb3cgPSAwOwogCWtmcmVlX3NrYihidWYpOwogfQpAQCAtMTQ1NSw3ICsxNTAxLDggQEAKICAqIE5vdGUgdGhhdCBuZXR3b3JrIHBsYW5lIGlkIHByb3BhZ2F0ZXMgdGhyb3VnaCB0aGUgbmV0d29yaywgYW5kIG1heQogICogY2hhbmdlIGF0IGFueSB0aW1lLiBUaGUgbm9kZSB3aXRoIGxvd2VzdCBhZGRyZXNzIHJ1bGVzCiAgKi8KLXN0YXRpYyB2b2lkIHRpcGNfbGlua19wcm90b19yY3Yoc3RydWN0IHRpcGNfbGluayAqbF9wdHIsIHN0cnVjdCBza19idWZmICpidWYpCitzdGF0aWMgdm9pZCB0aXBjX2xpbmtfcHJvdG9fcmN2KHN0cnVjdCB0aXBjX2xpbmsgKmxfcHRyLAorCQkJCXN0cnVjdCBza19idWZmICpidWYpCiB7CiAJdTMyIHJlY19nYXAgPSAwOwogCXUzMiBtYXhfcGt0X2luZm87CkBAIC0xNDY4LDcgKzE1MTUsNyBAQAogCQlnb3RvIGV4aXQ7CiAKIAlpZiAobF9wdHItPm5ldF9wbGFuZSAhPSBtc2dfbmV0X3BsYW5lKG1zZykpCi0JCWlmICh0aXBjX293bl9hZGRyID4gbXNnX3ByZXZub2RlKG1zZykpCisJCWlmIChsaW5rX293bl9hZGRyKGxfcHRyKSA+IG1zZ19wcmV2bm9kZShtc2cpKQogCQkJbF9wdHItPm5ldF9wbGFuZSA9IG1zZ19uZXRfcGxhbmUobXNnKTsKIAogCXN3aXRjaCAobXNnX3R5cGUobXNnKSkgewpAQCAtMTUzNSw5ICsxNTgyLDkgQEAKIAogCQlpZiAobXNnX2xpbmtwcmlvKG1zZykgJiYKIAkJICAgIChtc2dfbGlua3ByaW8obXNnKSAhPSBsX3B0ci0+cHJpb3JpdHkpKSB7Ci0JCQlwcl93YXJuKCIlczwlcz4sIHByaW9yaXR5IGNoYW5nZSAldS0+JXVcbiIsCi0JCQkJbGlua19yc3RfbXNnLCBsX3B0ci0+bmFtZSwgbF9wdHItPnByaW9yaXR5LAotCQkJCW1zZ19saW5rcHJpbyhtc2cpKTsKKwkJCXByX2RlYnVnKCIlczwlcz4sIHByaW9yaXR5IGNoYW5nZSAldS0+JXVcbiIsCisJCQkJIGxpbmtfcnN0X21zZywgbF9wdHItPm5hbWUsCisJCQkJIGxfcHRyLT5wcmlvcml0eSwgbXNnX2xpbmtwcmlvKG1zZykpOwogCQkJbF9wdHItPnByaW9yaXR5ID0gbXNnX2xpbmtwcmlvKG1zZyk7CiAJCQl0aXBjX2xpbmtfcmVzZXQobF9wdHIpOyAvKiBFbmZvcmNlIGNoYW5nZSB0byB0YWtlIGVmZmVjdCAqLwogCQkJYnJlYWs7CkBAIC0xNjM2LDggKzE2ODMsOCBAQAogCWlmICghdHVubmVsKQogCQlyZXR1cm47CiAKLQl0aXBjX21zZ19pbml0KCZ0dW5uZWxfaGRyLCBDSEFOR0VPVkVSX1BST1RPQ09MLAotCQkgT1JJR0lOQUxfTVNHLCBJTlRfSF9TSVpFLCBsX3B0ci0+YWRkcik7CisJdGlwY19tc2dfaW5pdChsaW5rX293bl9hZGRyKGxfcHRyKSwgJnR1bm5lbF9oZHIsIENIQU5HRU9WRVJfUFJPVE9DT0wsCisJCSAgICAgIE9SSUdJTkFMX01TRywgSU5UX0hfU0laRSwgbF9wdHItPmFkZHIpOwogCW1zZ19zZXRfYmVhcmVyX2lkKCZ0dW5uZWxfaGRyLCBsX3B0ci0+cGVlcl9iZWFyZXJfaWQpOwogCW1zZ19zZXRfbXNnY250KCZ0dW5uZWxfaGRyLCBtc2djb3VudCk7CiAKQEAgLTE2OTQsOCArMTc0MSw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgdGlwY19tc2cgdHVubmVsX2hkcjsKIAotCXRpcGNfbXNnX2luaXQoJnR1bm5lbF9oZHIsIENIQU5HRU9WRVJfUFJPVE9DT0wsCi0JCSBEVVBMSUNBVEVfTVNHLCBJTlRfSF9TSVpFLCBsX3B0ci0+YWRkcik7CisJdGlwY19tc2dfaW5pdChsaW5rX293bl9hZGRyKGxfcHRyKSwgJnR1bm5lbF9oZHIsIENIQU5HRU9WRVJfUFJPVE9DT0wsCisJCSAgICAgIERVUExJQ0FURV9NU0csIElOVF9IX1NJWkUsIGxfcHRyLT5hZGRyKTsKIAltc2dfc2V0X21zZ2NudCgmdHVubmVsX2hkciwgc2tiX3F1ZXVlX2xlbigmbF9wdHItPm91dHF1ZXVlKSk7CiAJbXNnX3NldF9iZWFyZXJfaWQoJnR1bm5lbF9oZHIsIGxfcHRyLT5wZWVyX2JlYXJlcl9pZCk7CiAJc2tiX3F1ZXVlX3dhbGsoJmxfcHRyLT5vdXRxdWV1ZSwgc2tiKSB7CkBAIC0xNzI5LDcgKzE3NzYsNyBAQAogICogQGZyb21fcG9zOiBvZmZzZXQgdG8gZXh0cmFjdCBmcm9tCiAgKgogICogUmV0dXJucyBhIG5ldyBtZXNzYWdlIGJ1ZmZlciBjb250YWluaW5nIGFuIGVtYmVkZGVkIG1lc3NhZ2UuICBUaGUKLSAqIGVuY2Fwc3VsYXRpbmcgbWVzc2FnZSBpdHNlbGYgaXMgbGVmdCB1bmNoYW5nZWQuCisgKiBlbmNhcHN1bGF0aW5nIGJ1ZmZlciBpcyBsZWZ0IHVuY2hhbmdlZC4KICAqLwogc3RhdGljIHN0cnVjdCBza19idWZmICpidWZfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZnJvbV9wb3MpCiB7CkBAIC0xNzQzLDggKzE3OTAsNiBAQAogCXJldHVybiBlYjsKIH0KIAotCi0KIC8qIHRpcGNfbGlua19kdXBfcmN2KCk6IFJlY2VpdmUgYSB0dW5uZWxsZWQgRFVQTElDQVRFX01TRyBwYWNrZXQuCiAgKiBPd25lciBub2RlIGlzIGxvY2tlZC4KICAqLwpAQCAtMTgwNCwxMCArMTg0OSw4IEBACiAJCX0KIAl9CiBleGl0OgotCWlmICgobF9wdHItPmV4cF9tc2dfY291bnQgPT0gMCkgJiYgKGxfcHRyLT5mbGFncyAmIExJTktfU1RPUFBFRCkpIHsKLQkJdGlwY19ub2RlX2RldGFjaF9saW5rKGxfcHRyLT5vd25lciwgbF9wdHIpOwotCQlrZnJlZShsX3B0cik7Ci0JfQorCWlmICgoIWxfcHRyLT5leHBfbXNnX2NvdW50KSAmJiAobF9wdHItPmZsYWdzICYgTElOS19TVE9QUEVEKSkKKwkJdGlwY19saW5rX2RlbGV0ZShsX3B0cik7CiAJcmV0dXJuIGJ1ZjsKIH0KIApAQCAtMTg0NSw1MCArMTg4OCwxNiBAQAogCXJldHVybiAqYnVmICE9IE5VTEw7CiB9CiAKLS8qCi0gKiAgQnVuZGxlciBmdW5jdGlvbmFsaXR5OgotICovCi12b2lkIHRpcGNfbGlua19idW5kbGVfcmN2KHN0cnVjdCBza19idWZmICpidWYpCitzdGF0aWMgdm9pZCBsaW5rX3NldF9zdXBlcnZpc2lvbl9wcm9wcyhzdHJ1Y3QgdGlwY19saW5rICpsX3B0ciwgdTMyIHRvbCkKIHsKLQl1MzIgbXNnY291bnQgPSBtc2dfbXNnY250KGJ1Zl9tc2coYnVmKSk7Ci0JdTMyIHBvcyA9IElOVF9IX1NJWkU7Ci0Jc3RydWN0IHNrX2J1ZmYgKm9idWY7Ci0Jc3RydWN0IHRpcGNfbXNnICpvbXNnOworCXVuc2lnbmVkIGxvbmcgaW50diA9ICgodG9sIC8gNCkgPiA1MDApID8gNTAwIDogdG9sIC8gNDsKIAotCXdoaWxlIChtc2djb3VudC0tKSB7Ci0JCW9idWYgPSBidWZfZXh0cmFjdChidWYsIHBvcyk7Ci0JCWlmIChvYnVmID09IE5VTEwpIHsKLQkJCXByX3dhcm4oIkxpbmsgdW5hYmxlIHRvIHVuYnVuZGxlIG1lc3NhZ2UocylcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJb21zZyA9IGJ1Zl9tc2cob2J1Zik7Ci0JCXBvcyArPSBhbGlnbihtc2dfc2l6ZShvbXNnKSk7Ci0JCWlmIChtc2dfaXNkYXRhKG9tc2cpKSB7Ci0JCQlpZiAodW5saWtlbHkobXNnX3R5cGUob21zZykgPT0gVElQQ19NQ0FTVF9NU0cpKQotCQkJCXRpcGNfc2tfbWNhc3RfcmN2KG9idWYpOwotCQkJZWxzZQotCQkJCXRpcGNfc2tfcmN2KG9idWYpOwotCQl9IGVsc2UgaWYgKG1zZ191c2VyKG9tc2cpID09IENPTk5fTUFOQUdFUikgewotCQkJdGlwY19za19yY3Yob2J1Zik7Ci0JCX0gZWxzZSBpZiAobXNnX3VzZXIob21zZykgPT0gTkFNRV9ESVNUUklCVVRPUikgewotCQkJdGlwY19uYW1lZF9yY3Yob2J1Zik7Ci0JCX0gZWxzZSB7Ci0JCQlwcl93YXJuKCJJbGxlZ2FsIGJ1bmRsZWQgbXNnOiAldVxuIiwgbXNnX3VzZXIob21zZykpOwotCQkJa2ZyZWVfc2tiKG9idWYpOwotCQl9Ci0JfQotCWtmcmVlX3NrYihidWYpOwotfQotCi1zdGF0aWMgdm9pZCBsaW5rX3NldF9zdXBlcnZpc2lvbl9wcm9wcyhzdHJ1Y3QgdGlwY19saW5rICpsX3B0ciwgdTMyIHRvbGVyYW5jZSkKLXsKLQlpZiAoKHRvbGVyYW5jZSA8IFRJUENfTUlOX0xJTktfVE9MKSB8fCAodG9sZXJhbmNlID4gVElQQ19NQVhfTElOS19UT0wpKQorCWlmICgodG9sIDwgVElQQ19NSU5fTElOS19UT0wpIHx8ICh0b2wgPiBUSVBDX01BWF9MSU5LX1RPTCkpCiAJCXJldHVybjsKIAotCWxfcHRyLT50b2xlcmFuY2UgPSB0b2xlcmFuY2U7Ci0JbF9wdHItPmNvbnRpbnVpdHlfaW50ZXJ2YWwgPQotCQkoKHRvbGVyYW5jZSAvIDQpID4gNTAwKSA/IDUwMCA6IHRvbGVyYW5jZSAvIDQ7Ci0JbF9wdHItPmFib3J0X2xpbWl0ID0gdG9sZXJhbmNlIC8gKGxfcHRyLT5jb250aW51aXR5X2ludGVydmFsIC8gNCk7CisJbF9wdHItPnRvbGVyYW5jZSA9IHRvbDsKKwlsX3B0ci0+Y29udF9pbnR2ID0gbXNlY3NfdG9famlmZmllcyhpbnR2KTsKKwlsX3B0ci0+YWJvcnRfbGltaXQgPSB0b2wgLyAoamlmZmllc190b19tc2VjcyhsX3B0ci0+Y29udF9pbnR2KSAvIDQpOwogfQogCiB2b2lkIHRpcGNfbGlua19zZXRfcXVldWVfbGltaXRzKHN0cnVjdCB0aXBjX2xpbmsgKmxfcHRyLCB1MzIgd2luZG93KQpAQCAtMTkxMSwyMiArMTkyMCwyNSBAQAogfQogCiAvKiB0aXBjX2xpbmtfZmluZF9vd25lciAtIGxvY2F0ZSBvd25lciBub2RlIG9mIGxpbmsgYnkgbGluaydzIG5hbWUKKyAqIEBuZXQ6IHRoZSBhcHBsaWNhYmxlIG5ldCBuYW1lc3BhY2UKICAqIEBuYW1lOiBwb2ludGVyIHRvIGxpbmsgbmFtZSBzdHJpbmcKICAqIEBiZWFyZXJfaWQ6IHBvaW50ZXIgdG8gaW5kZXggaW4gJ25vZGUtPmxpbmtzJyBhcnJheSB3aGVyZSB0aGUgbGluayB3YXMgZm91bmQuCiAgKgogICogUmV0dXJucyBwb2ludGVyIHRvIG5vZGUgb3duaW5nIHRoZSBsaW5rLCBvciAwIGlmIG5vIG1hdGNoaW5nIGxpbmsgaXMgZm91bmQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgdGlwY19ub2RlICp0aXBjX2xpbmtfZmluZF9vd25lcihjb25zdCBjaGFyICpsaW5rX25hbWUsCitzdGF0aWMgc3RydWN0IHRpcGNfbm9kZSAqdGlwY19saW5rX2ZpbmRfb3duZXIoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkgICAgICBjb25zdCBjaGFyICpsaW5rX25hbWUsCiAJCQkJCSAgICAgIHVuc2lnbmVkIGludCAqYmVhcmVyX2lkKQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAlzdHJ1Y3QgdGlwY19saW5rICpsX3B0cjsKIAlzdHJ1Y3QgdGlwY19ub2RlICpuX3B0cjsKLQlzdHJ1Y3QgdGlwY19ub2RlICpmb3VuZF9ub2RlID0gMDsKKwlzdHJ1Y3QgdGlwY19ub2RlICpmb3VuZF9ub2RlID0gTlVMTDsKIAlpbnQgaTsKIAogCSpiZWFyZXJfaWQgPSAwOwogCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShuX3B0ciwgJnRpcGNfbm9kZV9saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobl9wdHIsICZ0bi0+bm9kZV9saXN0LCBsaXN0KSB7CiAJCXRpcGNfbm9kZV9sb2NrKG5fcHRyKTsKIAkJZm9yIChpID0gMDsgaSA8IE1BWF9CRUFSRVJTOyBpKyspIHsKIAkJCWxfcHRyID0gbl9wdHItPmxpbmtzW2ldOwpAQCAtMTk0NiwxNDggKzE5NTgsNiBAQAogfQogCiAvKioKLSAqIGxpbmtfdmFsdWVfaXNfdmFsaWQgLS0gdmFsaWRhdGUgcHJvcG9zZWQgbGluayB0b2xlcmFuY2UvcHJpb3JpdHkvd2luZG93Ci0gKgotICogQGNtZDogdmFsdWUgdHlwZSAoVElQQ19DTURfU0VUX0xJTktfKikKLSAqIEBuZXdfdmFsdWU6IHRoZSBuZXcgdmFsdWUKLSAqCi0gKiBSZXR1cm5zIDEgaWYgdmFsdWUgaXMgd2l0aGluIHJhbmdlLCAwIGlmIG5vdC4KLSAqLwotc3RhdGljIGludCBsaW5rX3ZhbHVlX2lzX3ZhbGlkKHUxNiBjbWQsIHUzMiBuZXdfdmFsdWUpCi17Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFRJUENfQ01EX1NFVF9MSU5LX1RPTDoKLQkJcmV0dXJuIChuZXdfdmFsdWUgPj0gVElQQ19NSU5fTElOS19UT0wpICYmCi0JCQkobmV3X3ZhbHVlIDw9IFRJUENfTUFYX0xJTktfVE9MKTsKLQljYXNlIFRJUENfQ01EX1NFVF9MSU5LX1BSSToKLQkJcmV0dXJuIChuZXdfdmFsdWUgPD0gVElQQ19NQVhfTElOS19QUkkpOwotCWNhc2UgVElQQ19DTURfU0VUX0xJTktfV0lORE9XOgotCQlyZXR1cm4gKG5ld192YWx1ZSA+PSBUSVBDX01JTl9MSU5LX1dJTikgJiYKLQkJCShuZXdfdmFsdWUgPD0gVElQQ19NQVhfTElOS19XSU4pOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBsaW5rX2NtZF9zZXRfdmFsdWUgLSBjaGFuZ2UgcHJpb3JpdHkvdG9sZXJhbmNlL3dpbmRvdyBmb3IgbGluay9iZWFyZXIvbWVkaWEKLSAqIEBuYW1lOiBwdHIgdG8gbGluaywgYmVhcmVyLCBvciBtZWRpYSBuYW1lCi0gKiBAbmV3X3ZhbHVlOiBuZXcgdmFsdWUgb2YgbGluaywgYmVhcmVyLCBvciBtZWRpYSBzZXR0aW5nCi0gKiBAY21kOiB3aGljaCBsaW5rLCBiZWFyZXIsIG9yIG1lZGlhIGF0dHJpYnV0ZSB0byBzZXQgKFRJUENfQ01EX1NFVF9MSU5LXyopCi0gKgotICogQ2FsbGVyIG11c3QgaG9sZCBSVE5MIGxvY2sgdG8gZW5zdXJlIGxpbmsvYmVhcmVyL21lZGlhIGlzIG5vdCBkZWxldGVkLgotICoKLSAqIFJldHVybnMgMCBpZiB2YWx1ZSB1cGRhdGVkIGFuZCBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvci4KLSAqLwotc3RhdGljIGludCBsaW5rX2NtZF9zZXRfdmFsdWUoY29uc3QgY2hhciAqbmFtZSwgdTMyIG5ld192YWx1ZSwgdTE2IGNtZCkKLXsKLQlzdHJ1Y3QgdGlwY19ub2RlICpub2RlOwotCXN0cnVjdCB0aXBjX2xpbmsgKmxfcHRyOwotCXN0cnVjdCB0aXBjX2JlYXJlciAqYl9wdHI7Ci0Jc3RydWN0IHRpcGNfbWVkaWEgKm1fcHRyOwotCWludCBiZWFyZXJfaWQ7Ci0JaW50IHJlcyA9IDA7Ci0KLQlub2RlID0gdGlwY19saW5rX2ZpbmRfb3duZXIobmFtZSwgJmJlYXJlcl9pZCk7Ci0JaWYgKG5vZGUpIHsKLQkJdGlwY19ub2RlX2xvY2sobm9kZSk7Ci0JCWxfcHRyID0gbm9kZS0+bGlua3NbYmVhcmVyX2lkXTsKLQotCQlpZiAobF9wdHIpIHsKLQkJCXN3aXRjaCAoY21kKSB7Ci0JCQljYXNlIFRJUENfQ01EX1NFVF9MSU5LX1RPTDoKLQkJCQlsaW5rX3NldF9zdXBlcnZpc2lvbl9wcm9wcyhsX3B0ciwgbmV3X3ZhbHVlKTsKLQkJCQl0aXBjX2xpbmtfcHJvdG9feG1pdChsX3B0ciwgU1RBVEVfTVNHLCAwLCAwLAotCQkJCQkJICAgICBuZXdfdmFsdWUsIDAsIDApOwotCQkJCWJyZWFrOwotCQkJY2FzZSBUSVBDX0NNRF9TRVRfTElOS19QUkk6Ci0JCQkJbF9wdHItPnByaW9yaXR5ID0gbmV3X3ZhbHVlOwotCQkJCXRpcGNfbGlua19wcm90b194bWl0KGxfcHRyLCBTVEFURV9NU0csIDAsIDAsCi0JCQkJCQkgICAgIDAsIG5ld192YWx1ZSwgMCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFRJUENfQ01EX1NFVF9MSU5LX1dJTkRPVzoKLQkJCQl0aXBjX2xpbmtfc2V0X3F1ZXVlX2xpbWl0cyhsX3B0ciwgbmV3X3ZhbHVlKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcmVzID0gLUVJTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl0aXBjX25vZGVfdW5sb2NrKG5vZGUpOwotCQlyZXR1cm4gcmVzOwotCX0KLQotCWJfcHRyID0gdGlwY19iZWFyZXJfZmluZChuYW1lKTsKLQlpZiAoYl9wdHIpIHsKLQkJc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBUSVBDX0NNRF9TRVRfTElOS19UT0w6Ci0JCQliX3B0ci0+dG9sZXJhbmNlID0gbmV3X3ZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgVElQQ19DTURfU0VUX0xJTktfUFJJOgotCQkJYl9wdHItPnByaW9yaXR5ID0gbmV3X3ZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgVElQQ19DTURfU0VUX0xJTktfV0lORE9XOgotCQkJYl9wdHItPndpbmRvdyA9IG5ld192YWx1ZTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCXJldHVybiByZXM7Ci0JfQotCi0JbV9wdHIgPSB0aXBjX21lZGlhX2ZpbmQobmFtZSk7Ci0JaWYgKCFtX3B0cikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFRJUENfQ01EX1NFVF9MSU5LX1RPTDoKLQkJbV9wdHItPnRvbGVyYW5jZSA9IG5ld192YWx1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBUSVBDX0NNRF9TRVRfTElOS19QUkk6Ci0JCW1fcHRyLT5wcmlvcml0eSA9IG5ld192YWx1ZTsKLQkJYnJlYWs7Ci0JY2FzZSBUSVBDX0NNRF9TRVRfTElOS19XSU5ET1c6Ci0JCW1fcHRyLT53aW5kb3cgPSBuZXdfdmFsdWU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJlcyA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcmVzOwotfQotCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19saW5rX2NtZF9jb25maWcoY29uc3Qgdm9pZCAqcmVxX3Rsdl9hcmVhLCBpbnQgcmVxX3Rsdl9zcGFjZSwKLQkJCQkgICAgIHUxNiBjbWQpCi17Ci0Jc3RydWN0IHRpcGNfbGlua19jb25maWcgKmFyZ3M7Ci0JdTMyIG5ld192YWx1ZTsKLQlpbnQgcmVzOwotCi0JaWYgKCFUTFZfQ0hFQ0socmVxX3Rsdl9hcmVhLCByZXFfdGx2X3NwYWNlLCBUSVBDX1RMVl9MSU5LX0NPTkZJRykpCi0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfVExWX0VSUk9SKTsKLQotCWFyZ3MgPSAoc3RydWN0IHRpcGNfbGlua19jb25maWcgKilUTFZfREFUQShyZXFfdGx2X2FyZWEpOwotCW5ld192YWx1ZSA9IG50b2hsKGFyZ3MtPnZhbHVlKTsKLQotCWlmICghbGlua192YWx1ZV9pc192YWxpZChjbWQsIG5ld192YWx1ZSkpCi0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoCi0JCQkiY2Fubm90IGNoYW5nZSwgdmFsdWUgaW52YWxpZCIpOwotCi0JaWYgKCFzdHJjbXAoYXJncy0+bmFtZSwgdGlwY19iY2xpbmtfbmFtZSkpIHsKLQkJaWYgKChjbWQgPT0gVElQQ19DTURfU0VUX0xJTktfV0lORE9XKSAmJgotCQkgICAgKHRpcGNfYmNsaW5rX3NldF9xdWV1ZV9saW1pdHMobmV3X3ZhbHVlKSA9PSAwKSkKLQkJCXJldHVybiB0aXBjX2NmZ19yZXBseV9ub25lKCk7Ci0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfTk9UX1NVUFBPUlRFRAotCQkJCQkJICAgIiAoY2Fubm90IGNoYW5nZSBzZXR0aW5nIG9uIGJyb2FkY2FzdCBsaW5rKSIpOwotCX0KLQotCXJlcyA9IGxpbmtfY21kX3NldF92YWx1ZShhcmdzLT5uYW1lLCBuZXdfdmFsdWUsIGNtZCk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZygiY2Fubm90IGNoYW5nZSBsaW5rIHNldHRpbmciKTsKLQotCXJldHVybiB0aXBjX2NmZ19yZXBseV9ub25lKCk7Ci19Ci0KLS8qKgogICogbGlua19yZXNldF9zdGF0aXN0aWNzIC0gcmVzZXQgbGluayBzdGF0aXN0aWNzCiAgKiBAbF9wdHI6IHBvaW50ZXIgdG8gbGluawogICovCkBAIC0yMDk4LDIwNyArMTk2OCwxMyBAQAogCWxfcHRyLT5zdGF0cy5yZWN2X2luZm8gPSBsX3B0ci0+bmV4dF9pbl9ubzsKIH0KIAotc3RydWN0IHNrX2J1ZmYgKnRpcGNfbGlua19jbWRfcmVzZXRfc3RhdHMoY29uc3Qgdm9pZCAqcmVxX3Rsdl9hcmVhLCBpbnQgcmVxX3Rsdl9zcGFjZSkKLXsKLQljaGFyICpsaW5rX25hbWU7Ci0Jc3RydWN0IHRpcGNfbGluayAqbF9wdHI7Ci0Jc3RydWN0IHRpcGNfbm9kZSAqbm9kZTsKLQl1bnNpZ25lZCBpbnQgYmVhcmVyX2lkOwotCi0JaWYgKCFUTFZfQ0hFQ0socmVxX3Rsdl9hcmVhLCByZXFfdGx2X3NwYWNlLCBUSVBDX1RMVl9MSU5LX05BTUUpKQotCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX1RMVl9FUlJPUik7Ci0KLQlsaW5rX25hbWUgPSAoY2hhciAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSk7Ci0JaWYgKCFzdHJjbXAobGlua19uYW1lLCB0aXBjX2JjbGlua19uYW1lKSkgewotCQlpZiAodGlwY19iY2xpbmtfcmVzZXRfc3RhdHMoKSkKLQkJCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoImxpbmsgbm90IGZvdW5kIik7Ci0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9ub25lKCk7Ci0JfQotCW5vZGUgPSB0aXBjX2xpbmtfZmluZF9vd25lcihsaW5rX25hbWUsICZiZWFyZXJfaWQpOwotCWlmICghbm9kZSkKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZygibGluayBub3QgZm91bmQiKTsKLQotCXRpcGNfbm9kZV9sb2NrKG5vZGUpOwotCWxfcHRyID0gbm9kZS0+bGlua3NbYmVhcmVyX2lkXTsKLQlpZiAoIWxfcHRyKSB7Ci0JCXRpcGNfbm9kZV91bmxvY2sobm9kZSk7Ci0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoImxpbmsgbm90IGZvdW5kIik7Ci0JfQotCWxpbmtfcmVzZXRfc3RhdGlzdGljcyhsX3B0cik7Ci0JdGlwY19ub2RlX3VubG9jayhub2RlKTsKLQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfbm9uZSgpOwotfQotCi0vKioKLSAqIHBlcmNlbnQgLSBjb252ZXJ0IGNvdW50IHRvIGEgcGVyY2VudGFnZSBvZiB0b3RhbCAocm91bmRpbmcgdXAgb3IgZG93bikKLSAqLwotc3RhdGljIHUzMiBwZXJjZW50KHUzMiBjb3VudCwgdTMyIHRvdGFsKQotewotCXJldHVybiAoY291bnQgKiAxMDAgKyAodG90YWwgLyAyKSkgLyB0b3RhbDsKLX0KLQotLyoqCi0gKiB0aXBjX2xpbmtfc3RhdHMgLSBwcmludCBsaW5rIHN0YXRpc3RpY3MKLSAqIEBuYW1lOiBsaW5rIG5hbWUKLSAqIEBidWY6IHByaW50IGJ1ZmZlciBhcmVhCi0gKiBAYnVmX3NpemU6IHNpemUgb2YgcHJpbnQgYnVmZmVyIGFyZWEKLSAqCi0gKiBSZXR1cm5zIGxlbmd0aCBvZiBwcmludCBidWZmZXIgZGF0YSBzdHJpbmcgKG9yIDAgaWYgZXJyb3IpCi0gKi8KLXN0YXRpYyBpbnQgdGlwY19saW5rX3N0YXRzKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKmJ1ZiwgY29uc3QgdTMyIGJ1Zl9zaXplKQotewotCXN0cnVjdCB0aXBjX2xpbmsgKmw7Ci0Jc3RydWN0IHRpcGNfc3RhdHMgKnM7Ci0Jc3RydWN0IHRpcGNfbm9kZSAqbm9kZTsKLQljaGFyICpzdGF0dXM7Ci0JdTMyIHByb2ZpbGVfdG90YWwgPSAwOwotCXVuc2lnbmVkIGludCBiZWFyZXJfaWQ7Ci0JaW50IHJldDsKLQotCWlmICghc3RyY21wKG5hbWUsIHRpcGNfYmNsaW5rX25hbWUpKQotCQlyZXR1cm4gdGlwY19iY2xpbmtfc3RhdHMoYnVmLCBidWZfc2l6ZSk7Ci0KLQlub2RlID0gdGlwY19saW5rX2ZpbmRfb3duZXIobmFtZSwgJmJlYXJlcl9pZCk7Ci0JaWYgKCFub2RlKQotCQlyZXR1cm4gMDsKLQotCXRpcGNfbm9kZV9sb2NrKG5vZGUpOwotCi0JbCA9IG5vZGUtPmxpbmtzW2JlYXJlcl9pZF07Ci0JaWYgKCFsKSB7Ci0JCXRpcGNfbm9kZV91bmxvY2sobm9kZSk7Ci0JCXJldHVybiAwOwotCX0KLQotCXMgPSAmbC0+c3RhdHM7Ci0KLQlpZiAodGlwY19saW5rX2lzX2FjdGl2ZShsKSkKLQkJc3RhdHVzID0gIkFDVElWRSI7Ci0JZWxzZSBpZiAodGlwY19saW5rX2lzX3VwKGwpKQotCQlzdGF0dXMgPSAiU1RBTkRCWSI7Ci0JZWxzZQotCQlzdGF0dXMgPSAiREVGVU5DVCI7Ci0KLQlyZXQgPSB0aXBjX3NucHJpbnRmKGJ1ZiwgYnVmX3NpemUsICJMaW5rIDwlcz5cbiIKLQkJCSAgICAiICAlcyAgTVRVOiV1ICBQcmlvcml0eToldSAgVG9sZXJhbmNlOiV1IG1zIgotCQkJICAgICIgIFdpbmRvdzoldSBwYWNrZXRzXG4iLAotCQkJICAgIGwtPm5hbWUsIHN0YXR1cywgbC0+bWF4X3BrdCwgbC0+cHJpb3JpdHksCi0JCQkgICAgbC0+dG9sZXJhbmNlLCBsLT5xdWV1ZV9saW1pdFswXSk7Ci0KLQlyZXQgKz0gdGlwY19zbnByaW50ZihidWYgKyByZXQsIGJ1Zl9zaXplIC0gcmV0LAotCQkJICAgICAiICBSWCBwYWNrZXRzOiV1IGZyYWdtZW50czoldS8ldSBidW5kbGVzOiV1LyV1XG4iLAotCQkJICAgICBsLT5uZXh0X2luX25vIC0gcy0+cmVjdl9pbmZvLCBzLT5yZWN2X2ZyYWdtZW50cywKLQkJCSAgICAgcy0+cmVjdl9mcmFnbWVudGVkLCBzLT5yZWN2X2J1bmRsZXMsCi0JCQkgICAgIHMtPnJlY3ZfYnVuZGxlZCk7Ci0KLQlyZXQgKz0gdGlwY19zbnByaW50ZihidWYgKyByZXQsIGJ1Zl9zaXplIC0gcmV0LAotCQkJICAgICAiICBUWCBwYWNrZXRzOiV1IGZyYWdtZW50czoldS8ldSBidW5kbGVzOiV1LyV1XG4iLAotCQkJICAgICBsLT5uZXh0X291dF9ubyAtIHMtPnNlbnRfaW5mbywgcy0+c2VudF9mcmFnbWVudHMsCi0JCQkgICAgIHMtPnNlbnRfZnJhZ21lbnRlZCwgcy0+c2VudF9idW5kbGVzLAotCQkJICAgICBzLT5zZW50X2J1bmRsZWQpOwotCi0JcHJvZmlsZV90b3RhbCA9IHMtPm1zZ19sZW5ndGhfY291bnRzOwotCWlmICghcHJvZmlsZV90b3RhbCkKLQkJcHJvZmlsZV90b3RhbCA9IDE7Ci0KLQlyZXQgKz0gdGlwY19zbnByaW50ZihidWYgKyByZXQsIGJ1Zl9zaXplIC0gcmV0LAotCQkJICAgICAiICBUWCBwcm9maWxlIHNhbXBsZToldSBwYWNrZXRzICBhdmVyYWdlOiV1IG9jdGV0c1xuIgotCQkJICAgICAiICAwLTY0OiV1JSUgLTI1NjoldSUlIC0xMDI0OiV1JSUgLTQwOTY6JXUlJSAiCi0JCQkgICAgICItMTYzODQ6JXUlJSAtMzI3Njg6JXUlJSAtNjYwMDA6JXUlJVxuIiwKLQkJCSAgICAgcy0+bXNnX2xlbmd0aF9jb3VudHMsCi0JCQkgICAgIHMtPm1zZ19sZW5ndGhzX3RvdGFsIC8gcHJvZmlsZV90b3RhbCwKLQkJCSAgICAgcGVyY2VudChzLT5tc2dfbGVuZ3RoX3Byb2ZpbGVbMF0sIHByb2ZpbGVfdG90YWwpLAotCQkJICAgICBwZXJjZW50KHMtPm1zZ19sZW5ndGhfcHJvZmlsZVsxXSwgcHJvZmlsZV90b3RhbCksCi0JCQkgICAgIHBlcmNlbnQocy0+bXNnX2xlbmd0aF9wcm9maWxlWzJdLCBwcm9maWxlX3RvdGFsKSwKLQkJCSAgICAgcGVyY2VudChzLT5tc2dfbGVuZ3RoX3Byb2ZpbGVbM10sIHByb2ZpbGVfdG90YWwpLAotCQkJICAgICBwZXJjZW50KHMtPm1zZ19sZW5ndGhfcHJvZmlsZVs0XSwgcHJvZmlsZV90b3RhbCksCi0JCQkgICAgIHBlcmNlbnQocy0+bXNnX2xlbmd0aF9wcm9maWxlWzVdLCBwcm9maWxlX3RvdGFsKSwKLQkJCSAgICAgcGVyY2VudChzLT5tc2dfbGVuZ3RoX3Byb2ZpbGVbNl0sIHByb2ZpbGVfdG90YWwpKTsKLQotCXJldCArPSB0aXBjX3NucHJpbnRmKGJ1ZiArIHJldCwgYnVmX3NpemUgLSByZXQsCi0JCQkgICAgICIgIFJYIHN0YXRlczoldSBwcm9iZXM6JXUgbmFrczoldSBkZWZzOiV1IgotCQkJICAgICAiIGR1cHM6JXVcbiIsIHMtPnJlY3Zfc3RhdGVzLCBzLT5yZWN2X3Byb2JlcywKLQkJCSAgICAgcy0+cmVjdl9uYWNrcywgcy0+ZGVmZXJyZWRfcmVjdiwgcy0+ZHVwbGljYXRlcyk7Ci0KLQlyZXQgKz0gdGlwY19zbnByaW50ZihidWYgKyByZXQsIGJ1Zl9zaXplIC0gcmV0LAotCQkJICAgICAiICBUWCBzdGF0ZXM6JXUgcHJvYmVzOiV1IG5ha3M6JXUgYWNrczoldSIKLQkJCSAgICAgIiBkdXBzOiV1XG4iLCBzLT5zZW50X3N0YXRlcywgcy0+c2VudF9wcm9iZXMsCi0JCQkgICAgIHMtPnNlbnRfbmFja3MsIHMtPnNlbnRfYWNrcywgcy0+cmV0cmFuc21pdHRlZCk7Ci0KLQlyZXQgKz0gdGlwY19zbnByaW50ZihidWYgKyByZXQsIGJ1Zl9zaXplIC0gcmV0LAotCQkJICAgICAiICBDb25nZXN0aW9uIGxpbms6JXUgIFNlbmQgcXVldWUiCi0JCQkgICAgICIgbWF4OiV1IGF2ZzoldVxuIiwgcy0+bGlua19jb25ncywKLQkJCSAgICAgcy0+bWF4X3F1ZXVlX3N6LCBzLT5xdWV1ZV9zel9jb3VudHMgPwotCQkJICAgICAocy0+YWNjdV9xdWV1ZV9zeiAvIHMtPnF1ZXVlX3N6X2NvdW50cykgOiAwKTsKLQotCXRpcGNfbm9kZV91bmxvY2sobm9kZSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RydWN0IHNrX2J1ZmYgKnRpcGNfbGlua19jbWRfc2hvd19zdGF0cyhjb25zdCB2b2lkICpyZXFfdGx2X2FyZWEsIGludCByZXFfdGx2X3NwYWNlKQotewotCXN0cnVjdCBza19idWZmICpidWY7Ci0Jc3RydWN0IHRsdl9kZXNjICpyZXBfdGx2OwotCWludCBzdHJfbGVuOwotCWludCBwYl9sZW47Ci0JY2hhciAqcGI7Ci0KLQlpZiAoIVRMVl9DSEVDSyhyZXFfdGx2X2FyZWEsIHJlcV90bHZfc3BhY2UsIFRJUENfVExWX0xJTktfTkFNRSkpCi0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfVExWX0VSUk9SKTsKLQotCWJ1ZiA9IHRpcGNfY2ZnX3JlcGx5X2FsbG9jKFRMVl9TUEFDRShVTFRSQV9TVFJJTkdfTUFYX0xFTikpOwotCWlmICghYnVmKQotCQlyZXR1cm4gTlVMTDsKLQotCXJlcF90bHYgPSAoc3RydWN0IHRsdl9kZXNjICopYnVmLT5kYXRhOwotCXBiID0gVExWX0RBVEEocmVwX3Rsdik7Ci0JcGJfbGVuID0gVUxUUkFfU1RSSU5HX01BWF9MRU47Ci0Jc3RyX2xlbiA9IHRpcGNfbGlua19zdGF0cygoY2hhciAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSksCi0JCQkJICBwYiwgcGJfbGVuKTsKLQlpZiAoIXN0cl9sZW4pIHsKLQkJa2ZyZWVfc2tiKGJ1Zik7Ci0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoImxpbmsgbm90IGZvdW5kIik7Ci0JfQotCXN0cl9sZW4gKz0gMTsJLyogZm9yICJcMCIgKi8KLQlza2JfcHV0KGJ1ZiwgVExWX1NQQUNFKHN0cl9sZW4pKTsKLQlUTFZfU0VUKHJlcF90bHYsIFRJUENfVExWX1VMVFJBX1NUUklORywgTlVMTCwgc3RyX2xlbik7Ci0KLQlyZXR1cm4gYnVmOwotfQotCi0vKioKLSAqIHRpcGNfbGlua19nZXRfbWF4X3BrdCAtIGdldCBtYXhpbXVtIHBhY2tldCBzaXplIHRvIHVzZSB3aGVuIHNlbmRpbmcgdG8gZGVzdGluYXRpb24KLSAqIEBkZXN0OiBuZXR3b3JrIGFkZHJlc3Mgb2YgZGVzdGluYXRpb24gbm9kZQotICogQHNlbGVjdG9yOiB1c2VkIHRvIHNlbGVjdCBmcm9tIHNldCBvZiBhY3RpdmUgbGlua3MKLSAqCi0gKiBJZiBubyBhY3RpdmUgbGluayBjYW4gYmUgZm91bmQsIHVzZXMgZGVmYXVsdCBtYXhpbXVtIHBhY2tldCBzaXplLgotICovCi11MzIgdGlwY19saW5rX2dldF9tYXhfcGt0KHUzMiBkZXN0LCB1MzIgc2VsZWN0b3IpCi17Ci0Jc3RydWN0IHRpcGNfbm9kZSAqbl9wdHI7Ci0Jc3RydWN0IHRpcGNfbGluayAqbF9wdHI7Ci0JdTMyIHJlcyA9IE1BWF9QS1RfREVGQVVMVDsKLQotCWlmIChkZXN0ID09IHRpcGNfb3duX2FkZHIpCi0JCXJldHVybiBNQVhfTVNHX1NJWkU7Ci0KLQluX3B0ciA9IHRpcGNfbm9kZV9maW5kKGRlc3QpOwotCWlmIChuX3B0cikgewotCQl0aXBjX25vZGVfbG9jayhuX3B0cik7Ci0JCWxfcHRyID0gbl9wdHItPmFjdGl2ZV9saW5rc1tzZWxlY3RvciAmIDFdOwotCQlpZiAobF9wdHIpCi0JCQlyZXMgPSBsX3B0ci0+bWF4X3BrdDsKLQkJdGlwY19ub2RlX3VubG9jayhuX3B0cik7Ci0JfQotCXJldHVybiByZXM7Ci19Ci0KIHN0YXRpYyB2b2lkIGxpbmtfcHJpbnQoc3RydWN0IHRpcGNfbGluayAqbF9wdHIsIGNvbnN0IGNoYXIgKnN0cikKIHsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobF9wdHItPm93bmVyLT5uZXQsIHRpcGNfbmV0X2lkKTsKIAlzdHJ1Y3QgdGlwY19iZWFyZXIgKmJfcHRyOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWJfcHRyID0gcmN1X2RlcmVmZXJlbmNlX3J0bmwoYmVhcmVyX2xpc3RbbF9wdHItPmJlYXJlcl9pZF0pOworCWJfcHRyID0gcmN1X2RlcmVmZXJlbmNlX3J0bmwodG4tPmJlYXJlcl9saXN0W2xfcHRyLT5iZWFyZXJfaWRdKTsKIAlpZiAoYl9wdHIpCiAJCXByX2luZm8oIiVzIExpbmsgJXg8JXM+OiIsIHN0ciwgbF9wdHItPmFkZHIsIGJfcHRyLT5uYW1lKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTIzNjIsNiArMjAzOCw3IEBACiAJc3RydWN0IHRpcGNfbGluayAqbGluazsKIAlzdHJ1Y3QgdGlwY19ub2RlICpub2RlOwogCXN0cnVjdCBubGF0dHIgKmF0dHJzW1RJUENfTkxBX0xJTktfTUFYICsgMV07CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAKIAlpZiAoIWluZm8tPmF0dHJzW1RJUENfTkxBX0xJTktdKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIzNzcsNyArMjA1NCw3IEBACiAKIAluYW1lID0gbmxhX2RhdGEoYXR0cnNbVElQQ19OTEFfTElOS19OQU1FXSk7CiAKLQlub2RlID0gdGlwY19saW5rX2ZpbmRfb3duZXIobmFtZSwgJmJlYXJlcl9pZCk7CisJbm9kZSA9IHRpcGNfbGlua19maW5kX293bmVyKG5ldCwgbmFtZSwgJmJlYXJlcl9pZCk7CiAJaWYgKCFub2RlKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMjQ5MywxNCArMjE3MCwxNiBAQAogfQogCiAvKiBDYWxsZXIgc2hvdWxkIGhvbGQgYXBwcm9wcmlhdGUgbG9ja3MgdG8gcHJvdGVjdCB0aGUgbGluayAqLwotc3RhdGljIGludCBfX3RpcGNfbmxfYWRkX2xpbmsoc3RydWN0IHRpcGNfbmxfbXNnICptc2csIHN0cnVjdCB0aXBjX2xpbmsgKmxpbmspCitzdGF0aWMgaW50IF9fdGlwY19ubF9hZGRfbGluayhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLAorCQkJICAgICAgc3RydWN0IHRpcGNfbGluayAqbGluaykKIHsKIAlpbnQgZXJyOwogCXZvaWQgKmhkcjsKIAlzdHJ1Y3QgbmxhdHRyICphdHRyczsKIAlzdHJ1Y3QgbmxhdHRyICpwcm9wOworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAotCWhkciA9IGdlbmxtc2dfcHV0KG1zZy0+c2tiLCBtc2ctPnBvcnRpZCwgbXNnLT5zZXEsICZ0aXBjX2dlbmxfdjJfZmFtaWx5LAorCWhkciA9IGdlbmxtc2dfcHV0KG1zZy0+c2tiLCBtc2ctPnBvcnRpZCwgbXNnLT5zZXEsICZ0aXBjX2dlbmxfZmFtaWx5LAogCQkJICBOTE1fRl9NVUxUSSwgVElQQ19OTF9MSU5LX0dFVCk7CiAJaWYgKCFoZHIpCiAJCXJldHVybiAtRU1TR1NJWkU7CkBAIC0yNTEyLDcgKzIxOTEsNyBAQAogCWlmIChubGFfcHV0X3N0cmluZyhtc2ctPnNrYiwgVElQQ19OTEFfTElOS19OQU1FLCBsaW5rLT5uYW1lKSkKIAkJZ290byBhdHRyX21zZ19mdWxsOwogCWlmIChubGFfcHV0X3UzMihtc2ctPnNrYiwgVElQQ19OTEFfTElOS19ERVNULAotCQkJdGlwY19jbHVzdGVyX21hc2sodGlwY19vd25fYWRkcikpKQorCQkJdGlwY19jbHVzdGVyX21hc2sodG4tPm93bl9hZGRyKSkpCiAJCWdvdG8gYXR0cl9tc2dfZnVsbDsKIAlpZiAobmxhX3B1dF91MzIobXNnLT5za2IsIFRJUENfTkxBX0xJTktfTVRVLCBsaW5rLT5tYXhfcGt0KSkKIAkJZ290byBhdHRyX21zZ19mdWxsOwpAQCAtMjU2Miw5ICsyMjQxLDggQEAKIH0KIAogLyogQ2FsbGVyIHNob3VsZCBob2xkIG5vZGUgbG9jayAgKi8KLXN0YXRpYyBpbnQgX190aXBjX25sX2FkZF9ub2RlX2xpbmtzKHN0cnVjdCB0aXBjX25sX21zZyAqbXNnLAotCQkJCSAgICBzdHJ1Y3QgdGlwY19ub2RlICpub2RlLAotCQkJCSAgICB1MzIgKnByZXZfbGluaykKK3N0YXRpYyBpbnQgX190aXBjX25sX2FkZF9ub2RlX2xpbmtzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2csCisJCQkJICAgIHN0cnVjdCB0aXBjX25vZGUgKm5vZGUsIHUzMiAqcHJldl9saW5rKQogewogCXUzMiBpOwogCWludCBlcnI7CkBAIC0yNTc1LDcgKzIyNTMsNyBAQAogCQlpZiAoIW5vZGUtPmxpbmtzW2ldKQogCQkJY29udGludWU7CiAKLQkJZXJyID0gX190aXBjX25sX2FkZF9saW5rKG1zZywgbm9kZS0+bGlua3NbaV0pOworCQllcnIgPSBfX3RpcGNfbmxfYWRkX2xpbmsobmV0LCBtc2csIG5vZGUtPmxpbmtzW2ldKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtMjU4Niw2ICsyMjY0LDggQEAKIAogaW50IHRpcGNfbmxfbGlua19kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CiAJc3RydWN0IHRpcGNfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgdGlwY19ubF9tc2cgbXNnOwogCXUzMiBwcmV2X25vZGUgPSBjYi0+YXJnc1swXTsKQEAgLTI2MDMsNyArMjI4Myw3IEBACiAJcmN1X3JlYWRfbG9jaygpOwogCiAJaWYgKHByZXZfbm9kZSkgewotCQlub2RlID0gdGlwY19ub2RlX2ZpbmQocHJldl9ub2RlKTsKKwkJbm9kZSA9IHRpcGNfbm9kZV9maW5kKG5ldCwgcHJldl9ub2RlKTsKIAkJaWYgKCFub2RlKSB7CiAJCQkvKiBXZSBuZXZlciBzZXQgc2VxIG9yIGNhbGwgbmxfZHVtcF9jaGVja19jb25zaXN0ZW50KCkKIAkJCSAqIHRoaXMgbWVhbnMgdGhhdCBzZXR0aW5nIHByZXZfc2VxIGhlcmUgd2lsbCBjYXVzZSB0aGUKQEAgLTI2MTUsOSArMjI5NSwxMSBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShub2RlLCAmdGlwY19ub2RlX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3Uobm9kZSwgJnRuLT5ub2RlX2xpc3QsCisJCQkJCQkgbGlzdCkgewogCQkJdGlwY19ub2RlX2xvY2sobm9kZSk7Ci0JCQllcnIgPSBfX3RpcGNfbmxfYWRkX25vZGVfbGlua3MoJm1zZywgbm9kZSwgJnByZXZfbGluayk7CisJCQllcnIgPSBfX3RpcGNfbmxfYWRkX25vZGVfbGlua3MobmV0LCAmbXNnLCBub2RlLAorCQkJCQkJICAgICAgICZwcmV2X2xpbmspOwogCQkJdGlwY19ub2RlX3VubG9jayhub2RlKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXQ7CkBAIC0yNjI1LDEzICsyMzA3LDE0IEBACiAJCQlwcmV2X25vZGUgPSBub2RlLT5hZGRyOwogCQl9CiAJfSBlbHNlIHsKLQkJZXJyID0gdGlwY19ubF9hZGRfYmNfbGluaygmbXNnKTsKKwkJZXJyID0gdGlwY19ubF9hZGRfYmNfbGluayhuZXQsICZtc2cpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgJnRpcGNfbm9kZV9saXN0LCBsaXN0KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5vZGUsICZ0bi0+bm9kZV9saXN0LCBsaXN0KSB7CiAJCQl0aXBjX25vZGVfbG9jayhub2RlKTsKLQkJCWVyciA9IF9fdGlwY19ubF9hZGRfbm9kZV9saW5rcygmbXNnLCBub2RlLCAmcHJldl9saW5rKTsKKwkJCWVyciA9IF9fdGlwY19ubF9hZGRfbm9kZV9saW5rcyhuZXQsICZtc2csIG5vZGUsCisJCQkJCQkgICAgICAgJnByZXZfbGluayk7CiAJCQl0aXBjX25vZGVfdW5sb2NrKG5vZGUpOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIG91dDsKQEAgLTI2NTIsNiArMjMzNSw3IEBACiAKIGludCB0aXBjX25sX2xpbmtfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gZ2VubF9pbmZvX25ldChpbmZvKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYW5zX3NrYjsKIAlzdHJ1Y3QgdGlwY19ubF9tc2cgbXNnOwogCXN0cnVjdCB0aXBjX2xpbmsgKmxpbms7CkBAIC0yNjY0LDcgKzIzNDgsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW5hbWUgPSBubGFfZGF0YShpbmZvLT5hdHRyc1tUSVBDX05MQV9MSU5LX05BTUVdKTsKLQlub2RlID0gdGlwY19saW5rX2ZpbmRfb3duZXIobmFtZSwgJmJlYXJlcl9pZCk7CisJbm9kZSA9IHRpcGNfbGlua19maW5kX293bmVyKG5ldCwgbmFtZSwgJmJlYXJlcl9pZCk7CiAJaWYgKCFub2RlKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMjY4Myw3ICsyMzY3LDcgQEAKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCWVyciA9IF9fdGlwY19ubF9hZGRfbGluaygmbXNnLCBsaW5rKTsKKwllcnIgPSBfX3RpcGNfbmxfYWRkX2xpbmsobmV0LCAmbXNnLCBsaW5rKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXQ7CiAKQEAgLTI3MDYsNiArMjM5MCw3IEBACiAJc3RydWN0IHRpcGNfbGluayAqbGluazsKIAlzdHJ1Y3QgdGlwY19ub2RlICpub2RlOwogCXN0cnVjdCBubGF0dHIgKmF0dHJzW1RJUENfTkxBX0xJTktfTUFYICsgMV07CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAKIAlpZiAoIWluZm8tPmF0dHJzW1RJUENfTkxBX0xJTktdKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI3MjIsMTMgKzI0MDcsMTMgQEAKIAlsaW5rX25hbWUgPSBubGFfZGF0YShhdHRyc1tUSVBDX05MQV9MSU5LX05BTUVdKTsKIAogCWlmIChzdHJjbXAobGlua19uYW1lLCB0aXBjX2JjbGlua19uYW1lKSA9PSAwKSB7Ci0JCWVyciA9IHRpcGNfYmNsaW5rX3Jlc2V0X3N0YXRzKCk7CisJCWVyciA9IHRpcGNfYmNsaW5rX3Jlc2V0X3N0YXRzKG5ldCk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlub2RlID0gdGlwY19saW5rX2ZpbmRfb3duZXIobGlua19uYW1lLCAmYmVhcmVyX2lkKTsKKwlub2RlID0gdGlwY19saW5rX2ZpbmRfb3duZXIobmV0LCBsaW5rX25hbWUsICZiZWFyZXJfaWQpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL25ldC90aXBjL2xpbmsuaCBiL25ldC90aXBjL2xpbmsuaAppbmRleCA1NTgxMmU4Li43YWViNTIwIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9saW5rLmgKKysrIGIvbmV0L3RpcGMvbGluay5oCkBAIC00MSw2ICs0MSwxMCBAQAogI2luY2x1ZGUgIm1zZy5oIgogI2luY2x1ZGUgIm5vZGUuaCIKIAorLyogVElQQy1zcGVjaWZpYyBlcnJvciBjb2RlcworKi8KKyNkZWZpbmUgRUxJTktDT05HIEVBR0FJTgkvKiBsaW5rIGNvbmdlc3Rpb24gPD0+IHJlc291cmNlIHVuYXZhaWxhYmxlICovCisKIC8qIE91dC1vZi1yYW5nZSB2YWx1ZSBmb3IgbGluayBzZXF1ZW5jZSBudW1iZXJzCiAgKi8KICNkZWZpbmUgSU5WQUxJRF9MSU5LX1NFUSAweDEwMDAwCkBAIC05OSwxMyArMTAzLDE0IEBACiAgKiBAbWVkaWFfYWRkcjogbWVkaWEgYWRkcmVzcyB0byB1c2Ugd2hlbiBzZW5kaW5nIG1lc3NhZ2VzIG92ZXIgbGluawogICogQHRpbWVyOiBsaW5rIHRpbWVyCiAgKiBAb3duZXI6IHBvaW50ZXIgdG8gcGVlciBub2RlCisgKiBAcmVmY250OiByZWZlcmVuY2UgY291bnRlciBmb3IgcGVybWFuZW50IHJlZmVyZW5jZXMgKG93bmVyIG5vZGUgJiB0aW1lcikKICAqIEBmbGFnczogZXhlY3V0aW9uIHN0YXRlIGZsYWdzIGZvciBsaW5rIGVuZHBvaW50IGluc3RhbmNlCiAgKiBAY2hlY2twb2ludDogcmVmZXJlbmNlIHBvaW50IGZvciB0cmlnZ2VyaW5nIGxpbmsgY29udGludWl0eSBjaGVja2luZwogICogQHBlZXJfc2Vzc2lvbjogbGluayBzZXNzaW9uICMgYmVpbmcgdXNlZCBieSBwZWVyIGVuZCBvZiBsaW5rCiAgKiBAcGVlcl9iZWFyZXJfaWQ6IGJlYXJlciBpZCB1c2VkIGJ5IGxpbmsncyBwZWVyIGVuZHBvaW50CiAgKiBAYmVhcmVyX2lkOiBsb2NhbCBiZWFyZXIgaWQgdXNlZCBieSBsaW5rCiAgKiBAdG9sZXJhbmNlOiBtaW5pbXVtIGxpbmsgY29udGludWl0eSBsb3NzIG5lZWRlZCB0byByZXNldCBsaW5rIFtpbiBtc10KLSAqIEBjb250aW51aXR5X2ludGVydmFsOiBsaW5rIGNvbnRpbnVpdHkgdGVzdGluZyBpbnRlcnZhbCBbaW4gbXNdCisgKiBAY29udF9pbnR2OiBsaW5rIGNvbnRpbnVpdHkgdGVzdGluZyBpbnRlcnZhbAogICogQGFib3J0X2xpbWl0OiAjIG9mIHVuYWNrbm93bGVkZ2VkIGNvbnRpbnVpdHkgcHJvYmVzIG5lZWRlZCB0byByZXNldCBsaW5rCiAgKiBAc3RhdGU6IGN1cnJlbnQgc3RhdGUgb2YgbGluayBGU00KICAqIEBmc21fbXNnX2NudDogIyBvZiBwcm90b2NvbCBtZXNzYWdlcyBsaW5rIEZTTSBoYXMgc2VudCBpbiBjdXJyZW50IHN0YXRlCkBAIC0xMjYsOCArMTMxLDEwIEBACiAgKiBAbmV4dF9pbl9ubzogbmV4dCBzZXF1ZW5jZSBudW1iZXIgdG8gZXhwZWN0IGZvciBpbmJvdW5kIG1lc3NhZ2VzCiAgKiBAZGVmZXJyZWRfcXVldWU6IGRlZmVycmVkIHF1ZXVlIHNhdmVkIE9PUyBiJ2Nhc3QgbWVzc2FnZSByZWNlaXZlZCBmcm9tIG5vZGUKICAqIEB1bmFja2VkX3dpbmRvdzogIyBvZiBpbmJvdW5kIG1lc3NhZ2VzIHJ4J2Qgd2l0aG91dCBhY2snaW5nIGJhY2sgdG8gcGVlcgorICogQGlucHV0cTogYnVmZmVyIHF1ZXVlIGZvciBtZXNzYWdlcyB0byBiZSBkZWxpdmVyZWQgdXB3YXJkcworICogQG5hbWVkcTogYnVmZmVyIHF1ZXVlIGZvciBuYW1lIHRhYmxlIG1lc3NhZ2VzIHRvIGJlIGRlbGl2ZXJlZCB1cHdhcmRzCiAgKiBAbmV4dF9vdXQ6IHB0ciB0byBmaXJzdCB1bnNlbnQgb3V0Ym91bmQgbWVzc2FnZSBpbiBxdWV1ZQotICogQHdhaXRpbmdfc2tzOiBsaW5rZWQgbGlzdCBvZiBzb2NrZXRzIHdhaXRpbmcgZm9yIGxpbmsgY29uZ2VzdGlvbiB0byBhYmF0ZQorICogQHdha2V1cHE6IGxpbmtlZCBsaXN0IG9mIHdha2V1cCBtc2dzIHdhaXRpbmcgZm9yIGxpbmsgY29uZ2VzdGlvbiB0byBhYmF0ZQogICogQGxvbmdfbXNnX3NlcV9ubzogbmV4dCBpZGVudGlmaWVyIHRvIHVzZSBmb3Igb3V0Ym91bmQgZnJhZ21lbnRlZCBtZXNzYWdlcwogICogQHJlYXNtX2J1ZjogaGVhZCBvZiBwYXJ0aWFsbHkgcmVhc3NlbWJsZWQgaW5ib3VuZCBtZXNzYWdlIGZyYWdtZW50cwogICogQHN0YXRzOiBjb2xsZWN0cyBzdGF0aXN0aWNzIHJlZ2FyZGluZyBsaW5rIGFjdGl2aXR5CkBAIC0xMzgsNiArMTQ1LDcgQEAKIAlzdHJ1Y3QgdGlwY19tZWRpYV9hZGRyIG1lZGlhX2FkZHI7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJc3RydWN0IHRpcGNfbm9kZSAqb3duZXI7CisJc3RydWN0IGtyZWYgcmVmOwogCiAJLyogTWFuYWdlbWVudCBhbmQgbGluayBzdXBlcnZpc2lvbiBkYXRhICovCiAJdW5zaWduZWQgaW50IGZsYWdzOwpAQCAtMTQ2LDcgKzE1NCw3IEBACiAJdTMyIHBlZXJfYmVhcmVyX2lkOwogCXUzMiBiZWFyZXJfaWQ7CiAJdTMyIHRvbGVyYW5jZTsKLQl1MzIgY29udGludWl0eV9pbnRlcnZhbDsKKwl1bnNpZ25lZCBsb25nIGNvbnRfaW50djsKIAl1MzIgYWJvcnRfbGltaXQ7CiAJaW50IHN0YXRlOwogCXUzMiBmc21fbXNnX2NudDsKQEAgLTE3OCwxMCArMTg2LDEyIEBACiAJdTMyIG5leHRfaW5fbm87CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBkZWZlcnJlZF9xdWV1ZTsKIAl1MzIgdW5hY2tlZF93aW5kb3c7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBpbnB1dHE7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCBuYW1lZHE7CiAKIAkvKiBDb25nZXN0aW9uIGhhbmRsaW5nICovCiAJc3RydWN0IHNrX2J1ZmYgKm5leHRfb3V0OwotCXN0cnVjdCBza19idWZmX2hlYWQgd2FpdGluZ19za3M7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCB3YWtldXBxOwogCiAJLyogRnJhZ21lbnRhdGlvbi9yZWFzc2VtYmx5ICovCiAJdTMyIGxvbmdfbXNnX3NlcV9ubzsKQEAgLTE5NiwyOCArMjA2LDI0IEBACiBzdHJ1Y3QgdGlwY19saW5rICp0aXBjX2xpbmtfY3JlYXRlKHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyLAogCQkJICAgICAgc3RydWN0IHRpcGNfYmVhcmVyICpiX3B0ciwKIAkJCSAgICAgIGNvbnN0IHN0cnVjdCB0aXBjX21lZGlhX2FkZHIgKm1lZGlhX2FkZHIpOwotdm9pZCB0aXBjX2xpbmtfZGVsZXRlX2xpc3QodW5zaWduZWQgaW50IGJlYXJlcl9pZCwgYm9vbCBzaHV0dGluZ19kb3duKTsKK3ZvaWQgdGlwY19saW5rX2RlbGV0ZShzdHJ1Y3QgdGlwY19saW5rICpsaW5rKTsKK3ZvaWQgdGlwY19saW5rX2RlbGV0ZV9saXN0KHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGJlYXJlcl9pZCwKKwkJCSAgIGJvb2wgc2h1dHRpbmdfZG93bik7CiB2b2lkIHRpcGNfbGlua19mYWlsb3Zlcl9zZW5kX3F1ZXVlKHN0cnVjdCB0aXBjX2xpbmsgKmxfcHRyKTsKIHZvaWQgdGlwY19saW5rX2R1cF9xdWV1ZV94bWl0KHN0cnVjdCB0aXBjX2xpbmsgKmxfcHRyLCBzdHJ1Y3QgdGlwY19saW5rICpkZXN0KTsKIHZvaWQgdGlwY19saW5rX3Jlc2V0X2ZyYWdtZW50cyhzdHJ1Y3QgdGlwY19saW5rICpsX3B0cik7CiBpbnQgdGlwY19saW5rX2lzX3VwKHN0cnVjdCB0aXBjX2xpbmsgKmxfcHRyKTsKIGludCB0aXBjX2xpbmtfaXNfYWN0aXZlKHN0cnVjdCB0aXBjX2xpbmsgKmxfcHRyKTsKIHZvaWQgdGlwY19saW5rX3B1cmdlX3F1ZXVlcyhzdHJ1Y3QgdGlwY19saW5rICpsX3B0cik7Ci1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19saW5rX2NtZF9jb25maWcoY29uc3Qgdm9pZCAqcmVxX3Rsdl9hcmVhLAotCQkJCSAgICAgaW50IHJlcV90bHZfc3BhY2UsCi0JCQkJICAgICB1MTYgY21kKTsKLXN0cnVjdCBza19idWZmICp0aXBjX2xpbmtfY21kX3Nob3dfc3RhdHMoY29uc3Qgdm9pZCAqcmVxX3Rsdl9hcmVhLAotCQkJCQkgaW50IHJlcV90bHZfc3BhY2UpOwotc3RydWN0IHNrX2J1ZmYgKnRpcGNfbGlua19jbWRfcmVzZXRfc3RhdHMoY29uc3Qgdm9pZCAqcmVxX3Rsdl9hcmVhLAotCQkJCQkgIGludCByZXFfdGx2X3NwYWNlKTsKIHZvaWQgdGlwY19saW5rX3Jlc2V0X2FsbChzdHJ1Y3QgdGlwY19ub2RlICpub2RlKTsKIHZvaWQgdGlwY19saW5rX3Jlc2V0KHN0cnVjdCB0aXBjX2xpbmsgKmxfcHRyKTsKLXZvaWQgdGlwY19saW5rX3Jlc2V0X2xpc3QodW5zaWduZWQgaW50IGJlYXJlcl9pZCk7Ci1pbnQgdGlwY19saW5rX3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBkZXN0LCB1MzIgc2VsZWN0b3IpOwotaW50IHRpcGNfbGlua194bWl0KHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsIHUzMiBkZXN0LCB1MzIgc2VsZWN0b3IpOwotaW50IF9fdGlwY19saW5rX3htaXQoc3RydWN0IHRpcGNfbGluayAqbGluaywgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7Ci11MzIgdGlwY19saW5rX2dldF9tYXhfcGt0KHUzMiBkZXN0LCB1MzIgc2VsZWN0b3IpOwotdm9pZCB0aXBjX2xpbmtfYnVuZGxlX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqYnVmKTsKK3ZvaWQgdGlwY19saW5rX3Jlc2V0X2xpc3Qoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgYmVhcmVyX2lkKTsKK2ludCB0aXBjX2xpbmtfeG1pdF9za2Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZGVzdCwKKwkJICAgICAgIHUzMiBzZWxlY3Rvcik7CitpbnQgdGlwY19saW5rX3htaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LCB1MzIgZGVzdCwKKwkJICAgdTMyIHNlbGVjdG9yKTsKK2ludCBfX3RpcGNfbGlua194bWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbGluayAqbGluaywKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KTsKIHZvaWQgdGlwY19saW5rX3Byb3RvX3htaXQoc3RydWN0IHRpcGNfbGluayAqbF9wdHIsIHUzMiBtc2dfdHlwLCBpbnQgcHJvYiwKIAkJCSAgdTMyIGdhcCwgdTMyIHRvbGVyYW5jZSwgdTMyIHByaW9yaXR5LCB1MzIgYWNrZWRfbXR1KTsKIHZvaWQgdGlwY19saW5rX3B1c2hfcGFja2V0cyhzdHJ1Y3QgdGlwY19saW5rICpsX3B0cik7CkBAIC0yMzMsNiArMjM5LDcgQEAKIGludCB0aXBjX25sX2xpbmtfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pOwogaW50IHRpcGNfbmxfbGlua19yZXNldF9zdGF0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKIGludCB0aXBjX25sX3BhcnNlX2xpbmtfcHJvcChzdHJ1Y3QgbmxhdHRyICpwcm9wLCBzdHJ1Y3QgbmxhdHRyICpwcm9wc1tdKTsKK3ZvaWQgbGlua19wcmVwYXJlX3dha2V1cChzdHJ1Y3QgdGlwY19saW5rICpsKTsKIAogLyoKICAqIExpbmsgc2VxdWVuY2UgbnVtYmVyIG1hbmlwdWxhdGlvbiByb3V0aW5lcyAodXNlcyBtb2R1bG8gMioqMTYgYXJpdGhtZXRpYykKQEAgLTI2Nyw2ICsyNzQsMTAgQEAKIAlyZXR1cm4gbGVzc19lcShsZWZ0LCByaWdodCkgPyBsZWZ0IDogcmlnaHQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTMyIGxpbmtfb3duX2FkZHIoc3RydWN0IHRpcGNfbGluayAqbCkKK3sKKwlyZXR1cm4gbXNnX3ByZXZub2RlKGwtPnBtc2cpOworfQogCiAvKgogICogTGluayBzdGF0dXMgY2hlY2tpbmcgcm91dGluZXMKZGlmZiAtLWdpdCBhL25ldC90aXBjL2xvZy5jIGIvbmV0L3RpcGMvbG9nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiZWY2NDQuLjAwMDAwMDAKLS0tIGEvbmV0L3RpcGMvbG9nLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogbmV0L3RpcGMvbG9nLmM6IFRJUEMgcHJpbnQgYnVmZmVyIHJvdXRpbmVzIGZvciBkZWJ1Z2dpbmcKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwNiwgRXJpY3Nzb24gQUIKLSAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA3LCBXaW5kIFJpdmVyIFN5c3RlbXMKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLS8qKgotICogdGlwY19zbnByaW50ZiAtIGFwcGVuZCBmb3JtYXR0ZWQgb3V0cHV0IHRvIHByaW50IGJ1ZmZlcgotICogQGJ1ZjogcG9pbnRlciB0byBwcmludCBidWZmZXIKLSAqIEBsZW46IGJ1ZmZlciBsZW5ndGgKLSAqIEBmbXQ6IGZvcm1hdHRlZCBpbmZvIHRvIGJlIHByaW50ZWQKLSAqLwotaW50IHRpcGNfc25wcmludGYoY2hhciAqYnVmLCBpbnQgbGVuLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLXsKLQlpbnQgaTsKLQl2YV9saXN0IGFyZ3M7Ci0KLQl2YV9zdGFydChhcmdzLCBmbXQpOwotCWkgPSB2c2NucHJpbnRmKGJ1ZiwgbGVuLCBmbXQsIGFyZ3MpOwotCXZhX2VuZChhcmdzKTsKLQlyZXR1cm4gaTsKLX0KZGlmZiAtLWdpdCBhL25ldC90aXBjL21zZy5jIGIvbmV0L3RpcGMvbXNnLmMKaW5kZXggYTY4N2IzMC4uYjZlYjkwYyAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbXNnLmMKKysrIGIvbmV0L3RpcGMvbXNnLmMKQEAgLTM0LDYgKzM0LDcgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKKyNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgImNvcmUuaCIKICNpbmNsdWRlICJtc2cuaCIKICNpbmNsdWRlICJhZGRyLmgiCkBAIC00NiwyNSArNDcsNDggQEAKIAlyZXR1cm4gKGkgKyAzKSAmIH4zdTsKIH0KIAotdm9pZCB0aXBjX21zZ19pbml0KHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHVzZXIsIHUzMiB0eXBlLCB1MzIgaHNpemUsCi0JCSAgIHUzMiBkZXN0bm9kZSkKKy8qKgorICogdGlwY19idWZfYWNxdWlyZSAtIGNyZWF0ZXMgYSBUSVBDIG1lc3NhZ2UgYnVmZmVyCisgKiBAc2l6ZTogbWVzc2FnZSBzaXplIChpbmNsdWRpbmcgVElQQyBoZWFkZXIpCisgKgorICogUmV0dXJucyBhIG5ldyBidWZmZXIgd2l0aCBkYXRhIHBvaW50ZXJzIHNldCB0byB0aGUgc3BlY2lmaWVkIHNpemUuCisgKgorICogTk9URTogSGVhZHJvb20gaXMgcmVzZXJ2ZWQgdG8gYWxsb3cgcHJlcGVuZGluZyBvZiBhIGRhdGEgbGluayBoZWFkZXIuCisgKiAgICAgICBUaGVyZSBtYXkgYWxzbyBiZSB1bnJlcXVlc3RlZCB0YWlscm9vbSBwcmVzZW50IGF0IHRoZSBidWZmZXIncyBlbmQuCisgKi8KK3N0cnVjdCBza19idWZmICp0aXBjX2J1Zl9hY3F1aXJlKHUzMiBzaXplKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgaW50IGJ1Zl9zaXplID0gKEJVRl9IRUFEUk9PTSArIHNpemUgKyAzKSAmIH4zdTsKKworCXNrYiA9IGFsbG9jX3NrYl9mY2xvbmUoYnVmX3NpemUsIEdGUF9BVE9NSUMpOworCWlmIChza2IpIHsKKwkJc2tiX3Jlc2VydmUoc2tiLCBCVUZfSEVBRFJPT00pOworCQlza2JfcHV0KHNrYiwgc2l6ZSk7CisJCXNrYi0+bmV4dCA9IE5VTEw7CisJfQorCXJldHVybiBza2I7Cit9CisKK3ZvaWQgdGlwY19tc2dfaW5pdCh1MzIgb3duX25vZGUsIHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHVzZXIsIHUzMiB0eXBlLAorCQkgICB1MzIgaHNpemUsIHUzMiBkbm9kZSkKIHsKIAltZW1zZXQobSwgMCwgaHNpemUpOwogCW1zZ19zZXRfdmVyc2lvbihtKTsKIAltc2dfc2V0X3VzZXIobSwgdXNlcik7CiAJbXNnX3NldF9oZHJfc3oobSwgaHNpemUpOwogCW1zZ19zZXRfc2l6ZShtLCBoc2l6ZSk7Ci0JbXNnX3NldF9wcmV2bm9kZShtLCB0aXBjX293bl9hZGRyKTsKKwltc2dfc2V0X3ByZXZub2RlKG0sIG93bl9ub2RlKTsKIAltc2dfc2V0X3R5cGUobSwgdHlwZSk7CiAJaWYgKGhzaXplID4gU0hPUlRfSF9TSVpFKSB7Ci0JCW1zZ19zZXRfb3JpZ25vZGUobSwgdGlwY19vd25fYWRkcik7Ci0JCW1zZ19zZXRfZGVzdG5vZGUobSwgZGVzdG5vZGUpOworCQltc2dfc2V0X29yaWdub2RlKG0sIG93bl9ub2RlKTsKKwkJbXNnX3NldF9kZXN0bm9kZShtLCBkbm9kZSk7CiAJfQogfQogCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19tc2dfY3JlYXRlKHVpbnQgdXNlciwgdWludCB0eXBlLCB1aW50IGhkcl9zeiwKLQkJCQl1aW50IGRhdGFfc3osIHUzMiBkbm9kZSwgdTMyIG9ub2RlLAotCQkJCXUzMiBkcG9ydCwgdTMyIG9wb3J0LCBpbnQgZXJyY29kZSkKK3N0cnVjdCBza19idWZmICp0aXBjX21zZ19jcmVhdGUodWludCB1c2VyLCB1aW50IHR5cGUsCisJCQkJdWludCBoZHJfc3osIHVpbnQgZGF0YV9zeiwgdTMyIGRub2RlLAorCQkJCXUzMiBvbm9kZSwgdTMyIGRwb3J0LCB1MzIgb3BvcnQsIGludCBlcnJjb2RlKQogewogCXN0cnVjdCB0aXBjX21zZyAqbXNnOwogCXN0cnVjdCBza19idWZmICpidWY7CkBAIC03NCw5ICs5OCw4IEBACiAJCXJldHVybiBOVUxMOwogCiAJbXNnID0gYnVmX21zZyhidWYpOwotCXRpcGNfbXNnX2luaXQobXNnLCB1c2VyLCB0eXBlLCBoZHJfc3osIGRub2RlKTsKKwl0aXBjX21zZ19pbml0KG9ub2RlLCBtc2csIHVzZXIsIHR5cGUsIGhkcl9zeiwgZG5vZGUpOwogCW1zZ19zZXRfc2l6ZShtc2csIGhkcl9zeiArIGRhdGFfc3opOwotCW1zZ19zZXRfcHJldm5vZGUobXNnLCBvbm9kZSk7CiAJbXNnX3NldF9vcmlncG9ydChtc2csIG9wb3J0KTsKIAltc2dfc2V0X2Rlc3Rwb3J0KG1zZywgZHBvcnQpOwogCW1zZ19zZXRfZXJyY29kZShtc2csIGVycmNvZGUpOwpAQCAtMTYzLDE1ICsxODYsMTQgQEAKICAqIHRpcGNfbXNnX2J1aWxkIC0gY3JlYXRlIGJ1ZmZlciBjaGFpbiBjb250YWluaW5nIHNwZWNpZmllZCBoZWFkZXIgYW5kIGRhdGEKICAqIEBtaGRyOiBNZXNzYWdlIGhlYWRlciwgdG8gYmUgcHJlcGVuZGVkIHRvIGRhdGEKICAqIEBtOiBVc2VyIG1lc3NhZ2UKLSAqIEBvZmZzZXQ6IFBvc2lzaW9uIGluIGlvdiB0byBzdGFydCBjb3B5aW5nIGZyb20KICAqIEBkc3o6IFRvdGFsIGxlbmd0aCBvZiB1c2VyIGRhdGEKICAqIEBwa3RtYXg6IE1heCBwYWNrZXQgc2l6ZSB0aGF0IGNhbiBiZSB1c2VkCiAgKiBAbGlzdDogQnVmZmVyIG9yIGNoYWluIG9mIGJ1ZmZlcnMgdG8gYmUgcmV0dXJuZWQgdG8gY2FsbGVyCiAgKgogICogUmV0dXJucyBtZXNzYWdlIGRhdGEgc2l6ZSBvciBlcnJubzogLUVOT01FTSwgLUVGQVVMVAogICovCi1pbnQgdGlwY19tc2dfYnVpbGQoc3RydWN0IHRpcGNfbXNnICptaGRyLCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgb2Zmc2V0LAotCQkgICBpbnQgZHN6LCBpbnQgcGt0bWF4LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQoraW50IHRpcGNfbXNnX2J1aWxkKHN0cnVjdCB0aXBjX21zZyAqbWhkciwgc3RydWN0IG1zZ2hkciAqbSwKKwkJICAgaW50IG9mZnNldCwgaW50IGRzeiwgaW50IHBrdG1heCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKIHsKIAlpbnQgbWhzeiA9IG1zZ19oZHJfc3oobWhkcik7CiAJaW50IG1zeiA9IG1oc3ogKyBkc3o7CkBAIC0xOTEsMTkgKzIxMywxOSBAQAogCQlza2IgPSB0aXBjX2J1Zl9hY3F1aXJlKG1zeik7CiAJCWlmICh1bmxpa2VseSghc2tiKSkKIAkJCXJldHVybiAtRU5PTUVNOworCQlza2Jfb3JwaGFuKHNrYik7CiAJCV9fc2tiX3F1ZXVlX3RhaWwobGlzdCwgc2tiKTsKIAkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCBtaGRyLCBtaHN6KTsKIAkJcGt0cG9zID0gc2tiLT5kYXRhICsgbWhzejsKLQkJaWYgKCFkc3ogfHwgIW1lbWNweV9mcm9taW92ZWNlbmQocGt0cG9zLCBtLT5tc2dfaXRlci5pb3YsIG9mZnNldCwKLQkJCQkJCSBkc3opKQorCQlpZiAoY29weV9mcm9tX2l0ZXIocGt0cG9zLCBkc3osICZtLT5tc2dfaXRlcikgPT0gZHN6KQogCQkJcmV0dXJuIGRzejsKIAkJcmMgPSAtRUZBVUxUOwogCQlnb3RvIGVycm9yOwogCX0KIAogCS8qIFByZXBhcmUgcmV1c2FibGUgZnJhZ21lbnQgaGVhZGVyICovCi0JdGlwY19tc2dfaW5pdCgmcGt0aGRyLCBNU0dfRlJBR01FTlRFUiwgRklSU1RfRlJBR01FTlQsCi0JCSAgICAgIElOVF9IX1NJWkUsIG1zZ19kZXN0bm9kZShtaGRyKSk7CisJdGlwY19tc2dfaW5pdChtc2dfcHJldm5vZGUobWhkciksICZwa3RoZHIsIE1TR19GUkFHTUVOVEVSLAorCQkgICAgICBGSVJTVF9GUkFHTUVOVCwgSU5UX0hfU0laRSwgbXNnX2Rlc3Rub2RlKG1oZHIpKTsKIAltc2dfc2V0X3NpemUoJnBrdGhkciwgcGt0bWF4KTsKIAltc2dfc2V0X2ZyYWdtX25vKCZwa3RoZHIsIHBrdG5vKTsKIApAQCAtMjExLDYgKzIzMyw3IEBACiAJc2tiID0gdGlwY19idWZfYWNxdWlyZShwa3RtYXgpOwogCWlmICghc2tiKQogCQlyZXR1cm4gLUVOT01FTTsKKwlza2Jfb3JwaGFuKHNrYik7CiAJX19za2JfcXVldWVfdGFpbChsaXN0LCBza2IpOwogCXBrdHBvcyA9IHNrYi0+ZGF0YTsKIAlza2JfY29weV90b19saW5lYXJfZGF0YShza2IsICZwa3RoZHIsIElOVF9IX1NJWkUpOwpAQCAtMjI0LDEyICsyNDcsMTEgQEAKIAkJaWYgKGRyZW0gPCBwa3RyZW0pCiAJCQlwa3RyZW0gPSBkcmVtOwogCi0JCWlmIChtZW1jcHlfZnJvbWlvdmVjZW5kKHBrdHBvcywgbS0+bXNnX2l0ZXIuaW92LCBvZmZzZXQsIHBrdHJlbSkpIHsKKwkJaWYgKGNvcHlfZnJvbV9pdGVyKHBrdHBvcywgcGt0cmVtLCAmbS0+bXNnX2l0ZXIpICE9IHBrdHJlbSkgewogCQkJcmMgPSAtRUZBVUxUOwogCQkJZ290byBlcnJvcjsKIAkJfQogCQlkcmVtIC09IHBrdHJlbTsKLQkJb2Zmc2V0ICs9IHBrdHJlbTsKIAogCQlpZiAoIWRyZW0pCiAJCQlicmVhazsKQEAgLTI0NCw2ICsyNjYsNyBAQAogCQkJcmMgPSAtRU5PTUVNOwogCQkJZ290byBlcnJvcjsKIAkJfQorCQlza2Jfb3JwaGFuKHNrYik7CiAJCV9fc2tiX3F1ZXVlX3RhaWwobGlzdCwgc2tiKTsKIAkJbXNnX3NldF90eXBlKCZwa3RoZHIsIEZSQUdNRU5UKTsKIAkJbXNnX3NldF9zaXplKCZwa3RoZHIsIHBrdHN6KTsKQEAgLTMwNCw2ICszMjcsNDAgQEAKIH0KIAogLyoqCisgKiAgdGlwY19tc2dfZXh0cmFjdCgpOiBleHRyYWN0IGJ1bmRsZWQgaW5uZXIgcGFja2V0IGZyb20gYnVmZmVyCisgKiAgQHNrYjogbGluZWFyIG91dGVyIGJ1ZmZlciwgdG8gYmUgZXh0cmFjdGVkIGZyb20uCisgKiAgQGlza2I6IGV4dHJhY3RlZCBpbm5lciBidWZmZXIsIHRvIGJlIHJldHVybmVkCisgKiAgQHBvczogcG9zaXRpb24gb2YgbXNnIHRvIGJlIGV4dHJhY3RlZC4gUmV0dXJucyB3aXRoIHBvaW50ZXIgb2YgbmV4dCBtc2cKKyAqICBDb25zdW1lcyBvdXRlciBidWZmZXIgd2hlbiBsYXN0IHBhY2tldCBleHRyYWN0ZWQKKyAqICBSZXR1cm5zIHRydWUgd2hlbiB3aGVuIHRoZXJlIGlzIGFuIGV4dHJhY3RlZCBidWZmZXIsIG90aGVyd2lzZSBmYWxzZQorICovCitib29sIHRpcGNfbXNnX2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKippc2tiLCBpbnQgKnBvcykKK3sKKwlzdHJ1Y3QgdGlwY19tc2cgKm1zZyA9IGJ1Zl9tc2coc2tiKTsKKwlpbnQgaW1zejsKKwlzdHJ1Y3QgdGlwY19tc2cgKmltc2cgPSAoc3RydWN0IHRpcGNfbXNnICopKG1zZ19kYXRhKG1zZykgKyAqcG9zKTsKKworCS8qIElzIHRoZXJlIHNwYWNlIGxlZnQgZm9yIHNob3J0ZXN0IHBvc3NpYmxlIG1lc3NhZ2U/ICovCisJaWYgKCpwb3MgPiAobXNnX2RhdGFfc3oobXNnKSAtIFNIT1JUX0hfU0laRSkpCisJCWdvdG8gbm9uZTsKKwlpbXN6ID0gbXNnX3NpemUoaW1zZyk7CisKKwkvKiBJcyB0aGVyZSBzcGFjZSBsZWZ0IGZvciBjdXJyZW50IG1lc3NhZ2UgPyAqLworCWlmICgoKnBvcyArIGltc3opID4gbXNnX2RhdGFfc3oobXNnKSkKKwkJZ290byBub25lOworCSppc2tiID0gdGlwY19idWZfYWNxdWlyZShpbXN6KTsKKwlpZiAoISppc2tiKQorCQlnb3RvIG5vbmU7CisJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoKmlza2IsIGltc2csIGltc3opOworCSpwb3MgKz0gYWxpZ24oaW1zeik7CisJcmV0dXJuIHRydWU7Citub25lOgorCWtmcmVlX3NrYihza2IpOworCSppc2tiID0gTlVMTDsKKwlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgogICogdGlwY19tc2dfbWFrZV9idW5kbGUoKTogQ3JlYXRlIGJ1bmRsZSBidWYgYW5kIGFwcGVuZCBtZXNzYWdlIHRvIGl0cyB0YWlsCiAgKiBAbGlzdDogdGhlIGJ1ZmZlciBjaGFpbgogICogQHNrYjogYnVmZmVyIHRvIGJlIGFwcGVuZGVkIGFuZCByZXBsYWNlZApAQCAtMzEyLDggKzM2OSw4IEBACiAgKiBSZXBsYWNlcyBidWZmZXIgaWYgc3VjY2Vzc2Z1bAogICogUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBmYWxzZQogICovCi1ib29sIHRpcGNfbXNnX21ha2VfYnVuZGxlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgIHUzMiBtdHUsIHUzMiBkbm9kZSkKK2Jvb2wgdGlwY19tc2dfbWFrZV9idW5kbGUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSwgdTMyIGRub2RlKQogewogCXN0cnVjdCBza19idWZmICpic2tiOwogCXN0cnVjdCB0aXBjX21zZyAqYm1zZzsKQEAgLTMzNiw3ICszOTMsOCBAQAogCiAJc2tiX3RyaW0oYnNrYiwgSU5UX0hfU0laRSk7CiAJYm1zZyA9IGJ1Zl9tc2coYnNrYik7Ci0JdGlwY19tc2dfaW5pdChibXNnLCBNU0dfQlVORExFUiwgMCwgSU5UX0hfU0laRSwgZG5vZGUpOworCXRpcGNfbXNnX2luaXQobXNnX3ByZXZub2RlKG1zZyksIGJtc2csIE1TR19CVU5ETEVSLCAwLAorCQkgICAgICBJTlRfSF9TSVpFLCBkbm9kZSk7CiAJbXNnX3NldF9zZXFubyhibXNnLCBtc2dfc2Vxbm8obXNnKSk7CiAJbXNnX3NldF9hY2soYm1zZywgbXNnX2Fjayhtc2cpKTsKIAltc2dfc2V0X2JjYXN0X2FjayhibXNnLCBtc2dfYmNhc3RfYWNrKG1zZykpOwpAQCAtMzUzLDcgKzQxMSw4IEBACiAgKiBDb25zdW1lcyBidWZmZXIgaWYgZmFpbHVyZQogICogUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBmYWxzZQogICovCi1ib29sIHRpcGNfbXNnX3JldmVyc2Uoc3RydWN0IHNrX2J1ZmYgKmJ1ZiwgdTMyICpkbm9kZSwgaW50IGVycikKK2Jvb2wgdGlwY19tc2dfcmV2ZXJzZSh1MzIgb3duX2FkZHIsICBzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCB1MzIgKmRub2RlLAorCQkgICAgICBpbnQgZXJyKQogewogCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZyhidWYpOwogCXVpbnQgaW1wID0gbXNnX2ltcG9ydGFuY2UobXNnKTsKQEAgLTM3NCw3ICs0MzMsNyBAQAogCW1zZ19zZXRfZXJyY29kZShtc2csIGVycik7CiAJbXNnX3NldF9vcmlncG9ydChtc2csIG1zZ19kZXN0cG9ydCgmb2hkcikpOwogCW1zZ19zZXRfZGVzdHBvcnQobXNnLCBtc2dfb3JpZ3BvcnQoJm9oZHIpKTsKLQltc2dfc2V0X3ByZXZub2RlKG1zZywgdGlwY19vd25fYWRkcik7CisJbXNnX3NldF9wcmV2bm9kZShtc2csIG93bl9hZGRyKTsKIAlpZiAoIW1zZ19zaG9ydChtc2cpKSB7CiAJCW1zZ19zZXRfb3JpZ25vZGUobXNnLCBtc2dfZGVzdG5vZGUoJm9oZHIpKTsKIAkJbXNnX3NldF9kZXN0bm9kZShtc2csIG1zZ19vcmlnbm9kZSgmb2hkcikpOwpAQCAtMzg2LDQzICs0NDUsNDMgQEAKIAlyZXR1cm4gdHJ1ZTsKIGV4aXQ6CiAJa2ZyZWVfc2tiKGJ1Zik7CisJKmRub2RlID0gMDsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qKgotICogdGlwY19tc2dfZXZhbDogZGV0ZXJtaW5lIGZhdGUgb2YgbWVzc2FnZSB0aGF0IGZvdW5kIG5vIGRlc3RpbmF0aW9uCi0gKiBAYnVmOiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG1lc3NhZ2UuCi0gKiBAZG5vZGU6IHJldHVybiB2YWx1ZTogbmV4dC1ob3Agbm9kZSwgaWYgbWVzc2FnZSB0byBiZSBmb3J3YXJkZWQKLSAqIEBlcnI6IGVycm9yIGNvZGUgdG8gdXNlLCBpZiBtZXNzYWdlIHRvIGJlIHJlamVjdGVkCi0gKgorICogdGlwY19tc2dfbG9va3VwX2Rlc3QoKTogdHJ5IHRvIGZpbmQgbmV3IGRlc3RpbmF0aW9uIGZvciBuYW1lZCBtZXNzYWdlCisgKiBAc2tiOiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG1lc3NhZ2UuCisgKiBAZG5vZGU6IHJldHVybiB2YWx1ZTogbmV4dC1ob3Agbm9kZSwgaWYgZGVzdGluYXRpb24gZm91bmQKKyAqIEBlcnI6IHJldHVybiB2YWx1ZTogZXJyb3IgY29kZSB0byB1c2UsIGlmIG1lc3NhZ2UgdG8gYmUgcmVqZWN0ZWQKICAqIERvZXMgbm90IGNvbnN1bWUgYnVmZmVyCi0gKiBSZXR1cm5zIDAgKFRJUENfT0spIGlmIG1lc3NhZ2Ugb2sgYW5kIHdlIGNhbiB0cnkgYWdhaW4sIC1USVBDIGVycm9yCi0gKiBjb2RlIGlmIG1lc3NhZ2UgdG8gYmUgcmVqZWN0ZWQKKyAqIFJldHVybnMgdHJ1ZSBpZiBhIGRlc3RpbmF0aW9uIGlzIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UKICAqLwotaW50IHRpcGNfbXNnX2V2YWwoc3RydWN0IHNrX2J1ZmYgKmJ1ZiwgdTMyICpkbm9kZSkKK2Jvb2wgdGlwY19tc2dfbG9va3VwX2Rlc3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICB1MzIgKmRub2RlLCBpbnQgKmVycikKIHsKLQlzdHJ1Y3QgdGlwY19tc2cgKm1zZyA9IGJ1Zl9tc2coYnVmKTsKKwlzdHJ1Y3QgdGlwY19tc2cgKm1zZyA9IGJ1Zl9tc2coc2tiKTsKIAl1MzIgZHBvcnQ7CiAKLQlpZiAobXNnX3R5cGUobXNnKSAhPSBUSVBDX05BTUVEX01TRykKLQkJcmV0dXJuIC1USVBDX0VSUl9OT19QT1JUOwotCWlmIChza2JfbGluZWFyaXplKGJ1ZikpCi0JCXJldHVybiAtVElQQ19FUlJfTk9fTkFNRTsKLQlpZiAobXNnX2RhdGFfc3oobXNnKSA+IE1BWF9GT1JXQVJEX1NJWkUpCi0JCXJldHVybiAtVElQQ19FUlJfTk9fTkFNRTsKKwlpZiAoIW1zZ19pc2RhdGEobXNnKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICghbXNnX25hbWVkKG1zZykpCisJCXJldHVybiBmYWxzZTsKKwkqZXJyID0gLVRJUENfRVJSX05PX05BTUU7CisJaWYgKHNrYl9saW5lYXJpemUoc2tiKSkKKwkJcmV0dXJuIGZhbHNlOwogCWlmIChtc2dfcmVyb3V0ZV9jbnQobXNnKSA+IDApCi0JCXJldHVybiAtVElQQ19FUlJfTk9fTkFNRTsKLQotCSpkbm9kZSA9IGFkZHJfZG9tYWluKG1zZ19sb29rdXBfc2NvcGUobXNnKSk7Ci0JZHBvcnQgPSB0aXBjX25hbWV0YmxfdHJhbnNsYXRlKG1zZ19uYW1ldHlwZShtc2cpLAotCQkJCSAgICAgICBtc2dfbmFtZWluc3QobXNnKSwKLQkJCQkgICAgICAgZG5vZGUpOworCQlyZXR1cm4gZmFsc2U7CisJKmRub2RlID0gYWRkcl9kb21haW4obmV0LCBtc2dfbG9va3VwX3Njb3BlKG1zZykpOworCWRwb3J0ID0gdGlwY19uYW1ldGJsX3RyYW5zbGF0ZShuZXQsIG1zZ19uYW1ldHlwZShtc2cpLAorCQkJCSAgICAgICBtc2dfbmFtZWluc3QobXNnKSwgZG5vZGUpOwogCWlmICghZHBvcnQpCi0JCXJldHVybiAtVElQQ19FUlJfTk9fTkFNRTsKKwkJcmV0dXJuIGZhbHNlOwogCW1zZ19pbmNyX3Jlcm91dGVfY250KG1zZyk7CiAJbXNnX3NldF9kZXN0bm9kZShtc2csICpkbm9kZSk7CiAJbXNnX3NldF9kZXN0cG9ydChtc2csIGRwb3J0KTsKLQlyZXR1cm4gVElQQ19PSzsKKwkqZXJyID0gVElQQ19PSzsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyogdGlwY19tc2dfcmVhc3NlbWJsZSgpIC0gY2xvbmUgYSBidWZmZXIgY2hhaW4gb2YgZnJhZ21lbnRzIGFuZApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbXNnLmggYi9uZXQvdGlwYy9tc2cuaAppbmRleCBkNWM4M2Q3Li45YWNlNDdmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9tc2cuaAorKysgYi9uZXQvdGlwYy9tc2cuaApAQCAtMzcsNyArMzcsNyBAQAogI2lmbmRlZiBfVElQQ19NU0dfSAogI2RlZmluZSBfVElQQ19NU0dfSAogCi0jaW5jbHVkZSAiYmVhcmVyLmgiCisjaW5jbHVkZSA8bGludXgvdGlwYy5oPgogCiAvKgogICogQ29uc3RhbnRzIGFuZCByb3V0aW5lcyB1c2VkIHRvIHJlYWQgYW5kIHdyaXRlIFRJUEMgcGF5bG9hZCBtZXNzYWdlIGhlYWRlcnMKQEAgLTQ1LDYgKzQ1LDcgQEAKICAqIE5vdGU6IFNvbWUgaXRlbXMgYXJlIGFsc28gdXNlZCB3aXRoIFRJUEMgaW50ZXJuYWwgbWVzc2FnZSBoZWFkZXJzCiAgKi8KICNkZWZpbmUgVElQQ19WRVJTSU9OICAgICAgICAgICAgICAyCitzdHJ1Y3QgcGxpc3Q7CiAKIC8qCiAgKiBQYXlsb2FkIG1lc3NhZ2UgdXNlcnMgYXJlIGRlZmluZWQgaW4gVElQQydzIHB1YmxpYyBBUEk6CkBAIC03NywxMSArNzgsMzcgQEAKIAogI2RlZmluZSBUSVBDX01FRElBX0FERFJfT0ZGU0VUCTUKIAorLyoqCisgKiBUSVBDIG1lc3NhZ2UgYnVmZmVyIGNvZGUKKyAqCisgKiBUSVBDIG1lc3NhZ2UgYnVmZmVyIGhlYWRyb29tIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgd29yc3QtY2FzZQorICogbGluay1sZXZlbCBkZXZpY2UgaGVhZGVyIChpbiBjYXNlIHRoZSBtZXNzYWdlIGlzIHNlbnQgb2ZmLW5vZGUpLgorICoKKyAqIE5vdGU6IEhlYWRyb29tIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIDQgdG8gZW5zdXJlIHRoZSBUSVBDIGhlYWRlciBmaWVsZHMKKyAqICAgICAgIGFyZSB3b3JkIGFsaWduZWQgZm9yIHF1aWNrZXIgYWNjZXNzCisgKi8KKyNkZWZpbmUgQlVGX0hFQURST09NIExMX01BWF9IRUFERVIKKworc3RydWN0IHRpcGNfc2tiX2NiIHsKKwl2b2lkICpoYW5kbGU7CisJc3RydWN0IHNrX2J1ZmYgKnRhaWw7CisJYm9vbCBkZWZlcnJlZDsKKwlib29sIHdha2V1cF9wZW5kaW5nOworCWJvb2wgYnVuZGxpbmc7CisJdTE2IGNoYWluX3N6OworCXUxNiBjaGFpbl9pbXA7Cit9OworCisjZGVmaW5lIFRJUENfU0tCX0NCKF9fc2tiKSAoKHN0cnVjdCB0aXBjX3NrYl9jYiAqKSYoKF9fc2tiKS0+Y2JbMF0pKQogCiBzdHJ1Y3QgdGlwY19tc2cgewogCV9fYmUzMiBoZHJbMTVdOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlwY19tc2cgKmJ1Zl9tc2coc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlyZXR1cm4gKHN0cnVjdCB0aXBjX21zZyAqKXNrYi0+ZGF0YTsKK30KIAogc3RhdGljIGlubGluZSB1MzIgbXNnX3dvcmQoc3RydWN0IHRpcGNfbXNnICptLCB1MzIgcG9zKQogewpAQCAtNzIxLDI3ICs3NDgsMTExIEBACiAJcmV0dXJuIG1zZ19vcmlncG9ydChtKTsKIH0KIAotYm9vbCB0aXBjX21zZ19yZXZlcnNlKHN0cnVjdCBza19idWZmICpidWYsIHUzMiAqZG5vZGUsIGludCBlcnIpOwotCi1pbnQgdGlwY19tc2dfZXZhbChzdHJ1Y3Qgc2tfYnVmZiAqYnVmLCB1MzIgKmRub2RlKTsKLQotdm9pZCB0aXBjX21zZ19pbml0KHN0cnVjdCB0aXBjX21zZyAqbSwgdTMyIHVzZXIsIHUzMiB0eXBlLCB1MzIgaHNpemUsCi0JCSAgIHUzMiBkZXN0bm9kZSk7Ci0KK3N0cnVjdCBza19idWZmICp0aXBjX2J1Zl9hY3F1aXJlKHUzMiBzaXplKTsKK2Jvb2wgdGlwY19tc2dfcmV2ZXJzZSh1MzIgb3duX2FkZHIsIHN0cnVjdCBza19idWZmICpidWYsIHUzMiAqZG5vZGUsCisJCSAgICAgIGludCBlcnIpOwordm9pZCB0aXBjX21zZ19pbml0KHUzMiBvd25fYWRkciwgc3RydWN0IHRpcGNfbXNnICptLCB1MzIgdXNlciwgdTMyIHR5cGUsCisJCSAgIHUzMiBoc2l6ZSwgdTMyIGRlc3Rub2RlKTsKIHN0cnVjdCBza19idWZmICp0aXBjX21zZ19jcmVhdGUodWludCB1c2VyLCB1aW50IHR5cGUsIHVpbnQgaGRyX3N6LAogCQkJCXVpbnQgZGF0YV9zeiwgdTMyIGRub2RlLCB1MzIgb25vZGUsCiAJCQkJdTMyIGRwb3J0LCB1MzIgb3BvcnQsIGludCBlcnJjb2RlKTsKLQogaW50IHRpcGNfYnVmX2FwcGVuZChzdHJ1Y3Qgc2tfYnVmZiAqKmhlYWRidWYsIHN0cnVjdCBza19idWZmICoqYnVmKTsKLQogYm9vbCB0aXBjX21zZ19idW5kbGUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSk7Ci0KLWJvb2wgdGlwY19tc2dfbWFrZV9idW5kbGUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgdTMyIG10dSwgdTMyIGRub2RlKTsKLQotaW50IHRpcGNfbXNnX2J1aWxkKHN0cnVjdCB0aXBjX21zZyAqbWhkciwgc3RydWN0IG1zZ2hkciAqbSwgaW50IG9mZnNldCwKLQkJICAgaW50IGRzeiwgaW50IG10dSwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCk7Ci0KK2Jvb2wgdGlwY19tc2dfbWFrZV9idW5kbGUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSwgdTMyIGRub2RlKTsKK2Jvb2wgdGlwY19tc2dfZXh0cmFjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc2tfYnVmZiAqKmlza2IsIGludCAqcG9zKTsKK2ludCB0aXBjX21zZ19idWlsZChzdHJ1Y3QgdGlwY19tc2cgKm1oZHIsIHN0cnVjdCBtc2doZHIgKm0sCisJCSAgIGludCBvZmZzZXQsIGludCBkc3osIGludCBtdHUsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpOworYm9vbCB0aXBjX21zZ19sb29rdXBfZGVzdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqZG5vZGUsCisJCQkgIGludCAqZXJyKTsKIHN0cnVjdCBza19idWZmICp0aXBjX21zZ19yZWFzc2VtYmxlKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpOwogCisvKiB0aXBjX3NrYl9wZWVrKCk6IHBlZWsgYW5kIHJlc2VydmUgZmlyc3QgYnVmZmVyIGluIGxpc3QKKyAqIEBsaXN0OiBsaXN0IHRvIGJlIHBlZWtlZCBpbgorICogUmV0dXJucyBwb2ludGVyIHRvIGZpcnN0IGJ1ZmZlciBpbiBsaXN0LCBpZiBhbnkKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqdGlwY19za2JfcGVlayhzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAorCQkJCQkgICAgc3BpbmxvY2tfdCAqbG9jaykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJc3Bpbl9sb2NrX2JoKGxvY2spOworCXNrYiA9IHNrYl9wZWVrKGxpc3QpOworCWlmIChza2IpCisJCXNrYl9nZXQoc2tiKTsKKwlzcGluX3VubG9ja19iaChsb2NrKTsKKwlyZXR1cm4gc2tiOworfQorCisvKiB0aXBjX3NrYl9wZWVrX3BvcnQoKTogZmluZCBhIGRlc3RpbmF0aW9uIHBvcnQsIGlnbm9yaW5nIGFsbCBkZXN0aW5hdGlvbnMKKyAqICAgICAgICAgICAgICAgICAgICAgICB1cCB0byBhbmQgaW5jbHVkaW5nICdmaWx0ZXInLgorICogTm90ZTogaWdub3JpbmcgcHJldmlvdXNseSB0cmllZCBkZXN0aW5hdGlvbnMgbWluaW1pemVzIHRoZSByaXNrIG9mCisgKiAgICAgICBjb250ZW50aW9uIG9uIHRoZSBzb2NrZXQgbG9jaworICogQGxpc3Q6IGxpc3QgdG8gYmUgcGVla2VkIGluCisgKiBAZmlsdGVyOiBsYXN0IGRlc3RpbmF0aW9uIHRvIGJlIGlnbm9yZWQgZnJvbSBzZWFyY2gKKyAqIFJldHVybnMgYSBkZXN0aW5hdGlvbiBwb3J0IG51bWJlciwgb2YgYXBwbGljYWJsZS4KKyAqLworc3RhdGljIGlubGluZSB1MzIgdGlwY19za2JfcGVla19wb3J0KHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsIHUzMiBmaWx0ZXIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MzIgZHBvcnQgPSAwOworCWJvb2wgaWdub3JlID0gdHJ1ZTsKKworCXNwaW5fbG9ja19iaCgmbGlzdC0+bG9jayk7CisJc2tiX3F1ZXVlX3dhbGsobGlzdCwgc2tiKSB7CisJCWRwb3J0ID0gbXNnX2Rlc3Rwb3J0KGJ1Zl9tc2coc2tiKSk7CisJCWlmICghZmlsdGVyIHx8IHNrYl9xdWV1ZV9pc19sYXN0KGxpc3QsIHNrYikpCisJCQlicmVhazsKKwkJaWYgKGRwb3J0ID09IGZpbHRlcikKKwkJCWlnbm9yZSA9IGZhbHNlOworCQllbHNlIGlmICghaWdub3JlKQorCQkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZsaXN0LT5sb2NrKTsKKwlyZXR1cm4gZHBvcnQ7Cit9CisKKy8qIHRpcGNfc2tiX2RlcXVldWUoKTogdW5saW5rIGZpcnN0IGJ1ZmZlciB3aXRoIGRlc3QgJ2Rwb3J0JyBmcm9tIGxpc3QKKyAqIEBsaXN0OiBsaXN0IHRvIGJlIHVubGlua2VkIGZyb20KKyAqIEBkcG9ydDogc2VsZWN0aW9uIGNyaXRlcmlhIGZvciBidWZmZXIgdG8gdW5saW5rCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnRpcGNfc2tiX2RlcXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKKwkJCQkJICAgICAgIHUzMiBkcG9ydCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqX3NrYiwgKnRtcCwgKnNrYiA9IE5VTEw7CisKKwlzcGluX2xvY2tfYmgoJmxpc3QtPmxvY2spOworCXNrYl9xdWV1ZV93YWxrX3NhZmUobGlzdCwgX3NrYiwgdG1wKSB7CisJCWlmIChtc2dfZGVzdHBvcnQoYnVmX21zZyhfc2tiKSkgPT0gZHBvcnQpIHsKKwkJCV9fc2tiX3VubGluayhfc2tiLCBsaXN0KTsKKwkJCXNrYiA9IF9za2I7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmbGlzdC0+bG9jayk7CisJcmV0dXJuIHNrYjsKK30KKworLyogdGlwY19za2JfcXVldWVfdGFpbCgpOiBhZGQgYnVmZmVyIHRvIHRhaWwgb2YgbGlzdDsKKyAqIEBsaXN0OiBsaXN0IHRvIGJlIGFwcGVuZGVkIHRvCisgKiBAc2tiOiBidWZmZXIgdG8gYXBwZW5kLiBBbHdheXMgYXBwZW5kZWQKKyAqIEBkcG9ydDogdGhlIGRlc3RpbmF0aW9uIHBvcnQgb2YgdGhlIGJ1ZmZlcgorICogcmV0dXJucyB0cnVlIGlmIGRwb3J0IGRpZmZlcnMgZnJvbSBwcmV2aW91cyBkZXN0aW5hdGlvbgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgdGlwY19za2JfcXVldWVfdGFpbChzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZHBvcnQpCit7CisJc3RydWN0IHNrX2J1ZmYgKl9za2IgPSBOVUxMOworCWJvb2wgcnYgPSBmYWxzZTsKKworCXNwaW5fbG9ja19iaCgmbGlzdC0+bG9jayk7CisJX3NrYiA9IHNrYl9wZWVrX3RhaWwobGlzdCk7CisJaWYgKCFfc2tiIHx8IChtc2dfZGVzdHBvcnQoYnVmX21zZyhfc2tiKSkgIT0gZHBvcnQpIHx8CisJICAgIChza2JfcXVldWVfbGVuKGxpc3QpID4gMzIpKQorCQlydiA9IHRydWU7CisJX19za2JfcXVldWVfdGFpbChsaXN0LCBza2IpOworCXNwaW5fdW5sb2NrX2JoKCZsaXN0LT5sb2NrKTsKKwlyZXR1cm4gcnY7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV9kaXN0ci5jIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5jCmluZGV4IGJhNjA4M2QuLmZjYjA3OTEgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25hbWVfZGlzdHIuYworKysgYi9uZXQvdGlwYy9uYW1lX2Rpc3RyLmMKQEAgLTY4LDI5ICs2OCwzMyBAQAogLyoqCiAgKiBuYW1lZF9wcmVwYXJlX2J1ZiAtIGFsbG9jYXRlICYgaW5pdGlhbGl6ZSBhIHB1YmxpY2F0aW9uIG1lc3NhZ2UKICAqLwotc3RhdGljIHN0cnVjdCBza19idWZmICpuYW1lZF9wcmVwYXJlX2J1Zih1MzIgdHlwZSwgdTMyIHNpemUsIHUzMiBkZXN0KQorc3RhdGljIHN0cnVjdCBza19idWZmICpuYW1lZF9wcmVwYXJlX2J1ZihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0eXBlLCB1MzIgc2l6ZSwKKwkJCQkJIHUzMiBkZXN0KQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqYnVmID0gdGlwY19idWZfYWNxdWlyZShJTlRfSF9TSVpFICsgc2l6ZSk7CiAJc3RydWN0IHRpcGNfbXNnICptc2c7CiAKIAlpZiAoYnVmICE9IE5VTEwpIHsKIAkJbXNnID0gYnVmX21zZyhidWYpOwotCQl0aXBjX21zZ19pbml0KG1zZywgTkFNRV9ESVNUUklCVVRPUiwgdHlwZSwgSU5UX0hfU0laRSwgZGVzdCk7CisJCXRpcGNfbXNnX2luaXQodG4tPm93bl9hZGRyLCBtc2csIE5BTUVfRElTVFJJQlVUT1IsIHR5cGUsCisJCQkgICAgICBJTlRfSF9TSVpFLCBkZXN0KTsKIAkJbXNnX3NldF9zaXplKG1zZywgSU5UX0hfU0laRSArIHNpemUpOwogCX0KIAlyZXR1cm4gYnVmOwogfQogCi12b2lkIG5hbWVkX2NsdXN0ZXJfZGlzdHJpYnV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBuYW1lZF9jbHVzdGVyX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqb3NrYjsKIAlzdHJ1Y3QgdGlwY19ub2RlICpub2RlOwogCXUzMiBkbm9kZTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCAmdGlwY19ub2RlX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCAmdG4tPm5vZGVfbGlzdCwgbGlzdCkgewogCQlkbm9kZSA9IG5vZGUtPmFkZHI7Ci0JCWlmIChpbl9vd25fbm9kZShkbm9kZSkpCisJCWlmIChpbl9vd25fbm9kZShuZXQsIGRub2RlKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoIXRpcGNfbm9kZV9hY3RpdmVfbGlua3Mobm9kZSkpCiAJCQljb250aW51ZTsKQEAgLTk4LDcgKzEwMiw3IEBACiAJCWlmICghb3NrYikKIAkJCWJyZWFrOwogCQltc2dfc2V0X2Rlc3Rub2RlKGJ1Zl9tc2cob3NrYiksIGRub2RlKTsKLQkJdGlwY19saW5rX3htaXRfc2tiKG9za2IsIGRub2RlLCBkbm9kZSk7CisJCXRpcGNfbGlua194bWl0X3NrYihuZXQsIG9za2IsIGRub2RlLCBkbm9kZSk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCkBAIC0xMDgsMTggKzExMiwxOSBAQAogLyoqCiAgKiB0aXBjX25hbWVkX3B1Ymxpc2ggLSB0ZWxsIG90aGVyIG5vZGVzIGFib3V0IGEgbmV3IHB1YmxpY2F0aW9uIGJ5IHRoaXMgbm9kZQogICovCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1lZF9wdWJsaXNoKHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCkKK3N0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpCiB7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOwogCXN0cnVjdCBza19idWZmICpidWY7CiAJc3RydWN0IGRpc3RyX2l0ZW0gKml0ZW07CiAKIAlsaXN0X2FkZF90YWlsX3JjdSgmcHVibC0+bG9jYWxfbGlzdCwKLQkJCSAgJnRpcGNfbmFtZXRibC0+cHVibF9saXN0W3B1YmwtPnNjb3BlXSk7CisJCQkgICZ0bi0+bmFtZXRibC0+cHVibF9saXN0W3B1YmwtPnNjb3BlXSk7CiAKIAlpZiAocHVibC0+c2NvcGUgPT0gVElQQ19OT0RFX1NDT1BFKQogCQlyZXR1cm4gTlVMTDsKIAotCWJ1ZiA9IG5hbWVkX3ByZXBhcmVfYnVmKFBVQkxJQ0FUSU9OLCBJVEVNX1NJWkUsIDApOworCWJ1ZiA9IG5hbWVkX3ByZXBhcmVfYnVmKG5ldCwgUFVCTElDQVRJT04sIElURU1fU0laRSwgMCk7CiAJaWYgKCFidWYpIHsKIAkJcHJfd2FybigiUHVibGljYXRpb24gZGlzdHJpYnV0aW9uIGZhaWx1cmVcbiIpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTEzMyw3ICsxMzgsNyBAQAogLyoqCiAgKiB0aXBjX25hbWVkX3dpdGhkcmF3IC0gdGVsbCBvdGhlciBub2RlcyBhYm91dCBhIHdpdGhkcmF3biBwdWJsaWNhdGlvbiBieSB0aGlzIG5vZGUKICAqLwotc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKQorc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKIAlzdHJ1Y3QgZGlzdHJfaXRlbSAqaXRlbTsKQEAgLTE0Myw3ICsxNDgsNyBAQAogCWlmIChwdWJsLT5zY29wZSA9PSBUSVBDX05PREVfU0NPUEUpCiAJCXJldHVybiBOVUxMOwogCi0JYnVmID0gbmFtZWRfcHJlcGFyZV9idWYoV0lUSERSQVdBTCwgSVRFTV9TSVpFLCAwKTsKKwlidWYgPSBuYW1lZF9wcmVwYXJlX2J1ZihuZXQsIFdJVEhEUkFXQUwsIElURU1fU0laRSwgMCk7CiAJaWYgKCFidWYpIHsKIAkJcHJfd2FybigiV2l0aGRyYXdhbCBkaXN0cmlidXRpb24gZmFpbHVyZVxuIik7CiAJCXJldHVybiBOVUxMOwpAQCAtMTYwLDE5ICsxNjUsMjEgQEAKICAqIEBkbm9kZTogbm9kZSB0byBiZSB1cGRhdGVkCiAgKiBAcGxzOiBsaW5rZWQgbGlzdCBvZiBwdWJsaWNhdGlvbiBpdGVtcyB0byBiZSBwYWNrZWQgaW50byBidWZmZXIgY2hhaW4KICAqLwotc3RhdGljIHZvaWQgbmFtZWRfZGlzdHJpYnV0ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LCB1MzIgZG5vZGUsCi0JCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBscykKK3N0YXRpYyB2b2lkIG5hbWVkX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0LAorCQkJICAgICB1MzIgZG5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKnBscykKIHsKIAlzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CiAJc3RydWN0IGRpc3RyX2l0ZW0gKml0ZW0gPSBOVUxMOwotCXVpbnQgbXNnX2RzeiA9ICh0aXBjX25vZGVfZ2V0X210dShkbm9kZSwgMCkgLyBJVEVNX1NJWkUpICogSVRFTV9TSVpFOworCXVpbnQgbXNnX2RzeiA9ICh0aXBjX25vZGVfZ2V0X210dShuZXQsIGRub2RlLCAwKSAvIElURU1fU0laRSkgKgorCQkJSVRFTV9TSVpFOwogCXVpbnQgbXNnX3JlbSA9IG1zZ19kc3o7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB1YmwsIHBscywgbG9jYWxfbGlzdCkgewogCQkvKiBQcmVwYXJlIG5leHQgYnVmZmVyOiAqLwogCQlpZiAoIXNrYikgewotCQkJc2tiID0gbmFtZWRfcHJlcGFyZV9idWYoUFVCTElDQVRJT04sIG1zZ19yZW0sIGRub2RlKTsKKwkJCXNrYiA9IG5hbWVkX3ByZXBhcmVfYnVmKG5ldCwgUFVCTElDQVRJT04sIG1zZ19yZW0sCisJCQkJCQlkbm9kZSk7CiAJCQlpZiAoIXNrYikgewogCQkJCXByX3dhcm4oIkJ1bGsgcHVibGljYXRpb24gZmFpbHVyZVxuIik7CiAJCQkJcmV0dXJuOwpAQCAtMjAyLDMwICsyMDksMzIgQEAKIC8qKgogICogdGlwY19uYW1lZF9ub2RlX3VwIC0gdGVsbCBzcGVjaWZpZWQgbm9kZSBhYm91dCBhbGwgcHVibGljYXRpb25zIGJ5IHRoaXMgbm9kZQogICovCi12b2lkIHRpcGNfbmFtZWRfbm9kZV91cCh1MzIgZG5vZGUpCit2b2lkIHRpcGNfbmFtZWRfbm9kZV91cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSkKIHsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkOwogCiAJX19za2JfcXVldWVfaGVhZF9pbml0KCZoZWFkKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQluYW1lZF9kaXN0cmlidXRlKCZoZWFkLCBkbm9kZSwKLQkJCSAmdGlwY19uYW1ldGJsLT5wdWJsX2xpc3RbVElQQ19DTFVTVEVSX1NDT1BFXSk7Ci0JbmFtZWRfZGlzdHJpYnV0ZSgmaGVhZCwgZG5vZGUsCi0JCQkgJnRpcGNfbmFtZXRibC0+cHVibF9saXN0W1RJUENfWk9ORV9TQ09QRV0pOworCW5hbWVkX2Rpc3RyaWJ1dGUobmV0LCAmaGVhZCwgZG5vZGUsCisJCQkgJnRuLT5uYW1ldGJsLT5wdWJsX2xpc3RbVElQQ19DTFVTVEVSX1NDT1BFXSk7CisJbmFtZWRfZGlzdHJpYnV0ZShuZXQsICZoZWFkLCBkbm9kZSwKKwkJCSAmdG4tPm5hbWV0YmwtPnB1YmxfbGlzdFtUSVBDX1pPTkVfU0NPUEVdKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCXRpcGNfbGlua194bWl0KCZoZWFkLCBkbm9kZSwgZG5vZGUpOworCXRpcGNfbGlua194bWl0KG5ldCwgJmhlYWQsIGRub2RlLCBkbm9kZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHRpcGNfcHVibF9zdWJzY3JpYmUoc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsLCB1MzIgYWRkcikKK3N0YXRpYyB2b2lkIHRpcGNfcHVibF9zdWJzY3JpYmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwsCisJCQkJdTMyIGFkZHIpCiB7CiAJc3RydWN0IHRpcGNfbm9kZSAqbm9kZTsKIAotCWlmIChpbl9vd25fbm9kZShhZGRyKSkKKwlpZiAoaW5fb3duX25vZGUobmV0LCBhZGRyKSkKIAkJcmV0dXJuOwogCi0Jbm9kZSA9IHRpcGNfbm9kZV9maW5kKGFkZHIpOworCW5vZGUgPSB0aXBjX25vZGVfZmluZChuZXQsIGFkZHIpOwogCWlmICghbm9kZSkgewogCQlwcl93YXJuKCJOb2RlIHN1YnNjcmlwdGlvbiByZWplY3RlZCwgdW5rbm93biBub2RlIDB4JXhcbiIsCiAJCQlhZGRyKTsKQEAgLTIzNywxMSArMjQ2LDEyIEBACiAJdGlwY19ub2RlX3VubG9jayhub2RlKTsKIH0KIAotc3RhdGljIHZvaWQgdGlwY19wdWJsX3Vuc3Vic2NyaWJlKHN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCwgdTMyIGFkZHIpCitzdGF0aWMgdm9pZCB0aXBjX3B1YmxfdW5zdWJzY3JpYmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwsCisJCQkJICB1MzIgYWRkcikKIHsKIAlzdHJ1Y3QgdGlwY19ub2RlICpub2RlOwogCi0Jbm9kZSA9IHRpcGNfbm9kZV9maW5kKGFkZHIpOworCW5vZGUgPSB0aXBjX25vZGVfZmluZChuZXQsIGFkZHIpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuOwogCkBAIC0yNTYsMTYgKzI2NiwxNyBAQAogICogSW52b2tlZCBmb3IgZWFjaCBwdWJsaWNhdGlvbiBpc3N1ZWQgYnkgYSBuZXdseSBmYWlsZWQgbm9kZS4KICAqIFJlbW92ZXMgcHVibGljYXRpb24gc3RydWN0dXJlIGZyb20gbmFtZSB0YWJsZSAmIGRlbGV0ZXMgaXQuCiAgKi8KLXN0YXRpYyB2b2lkIHRpcGNfcHVibF9wdXJnZShzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwsIHUzMiBhZGRyKQorc3RhdGljIHZvaWQgdGlwY19wdWJsX3B1cmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsLCB1MzIgYWRkcikKIHsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwOwogCi0Jc3Bpbl9sb2NrX2JoKCZ0aXBjX25hbWV0YmxfbG9jayk7Ci0JcCA9IHRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChwdWJsLT50eXBlLCBwdWJsLT5sb3dlciwKKwlzcGluX2xvY2tfYmgoJnRuLT5uYW1ldGJsX2xvY2spOworCXAgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwobmV0LCBwdWJsLT50eXBlLCBwdWJsLT5sb3dlciwKIAkJCQkgICAgIHB1YmwtPm5vZGUsIHB1YmwtPnJlZiwgcHVibC0+a2V5KTsKIAlpZiAocCkKLQkJdGlwY19wdWJsX3Vuc3Vic2NyaWJlKHAsIGFkZHIpOwotCXNwaW5fdW5sb2NrX2JoKCZ0aXBjX25hbWV0YmxfbG9jayk7CisJCXRpcGNfcHVibF91bnN1YnNjcmliZShuZXQsIHAsIGFkZHIpOworCXNwaW5fdW5sb2NrX2JoKCZ0bi0+bmFtZXRibF9sb2NrKTsKIAogCWlmIChwICE9IHB1YmwpIHsKIAkJcHJfZXJyKCJVbmFibGUgdG8gcmVtb3ZlIHB1YmxpY2F0aW9uIGZyb20gZmFpbGVkIG5vZGVcbiIKQEAgLTI3NywxMiArMjg4LDEyIEBACiAJa2ZyZWVfcmN1KHAsIHJjdSk7CiB9CiAKLXZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsIHUzMiBhZGRyKQordm9pZCB0aXBjX3B1Ymxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGxpc3RfaGVhZCAqbnN1Yl9saXN0LCB1MzIgYWRkcikKIHsKIAlzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwsICp0bXA7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHVibCwgdG1wLCBuc3ViX2xpc3QsIG5vZGVzdWJfbGlzdCkKLQkJdGlwY19wdWJsX3B1cmdlKHB1YmwsIGFkZHIpOworCQl0aXBjX3B1YmxfcHVyZ2UobmV0LCBwdWJsLCBhZGRyKTsKIH0KIAogLyoqCkBAIC0yOTIsMjUgKzMwMywyOCBAQAogICogdGlwY19uYW1ldGJsX2xvY2sgbXVzdCBiZSBoZWxkLgogICogUmV0dXJucyB0aGUgcHVibGljYXRpb24gaXRlbSBpZiBzdWNjZXNzZnVsLCBvdGhlcndpc2UgTlVMTC4KICAqLwotc3RhdGljIGJvb2wgdGlwY191cGRhdGVfbmFtZXRibChzdHJ1Y3QgZGlzdHJfaXRlbSAqaSwgdTMyIG5vZGUsIHUzMiBkdHlwZSkKK3N0YXRpYyBib29sIHRpcGNfdXBkYXRlX25hbWV0Ymwoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgZGlzdHJfaXRlbSAqaSwKKwkJCQl1MzIgbm9kZSwgdTMyIGR0eXBlKQogewogCXN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibCA9IE5VTEw7CiAKIAlpZiAoZHR5cGUgPT0gUFVCTElDQVRJT04pIHsKLQkJcHVibCA9IHRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChudG9obChpLT50eXBlKSwgbnRvaGwoaS0+bG93ZXIpLAorCQlwdWJsID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgbnRvaGwoaS0+dHlwZSksCisJCQkJCQludG9obChpLT5sb3dlciksCiAJCQkJCQludG9obChpLT51cHBlciksCiAJCQkJCQlUSVBDX0NMVVNURVJfU0NPUEUsIG5vZGUsCiAJCQkJCQludG9obChpLT5yZWYpLCBudG9obChpLT5rZXkpKTsKIAkJaWYgKHB1YmwpIHsKLQkJCXRpcGNfcHVibF9zdWJzY3JpYmUocHVibCwgbm9kZSk7CisJCQl0aXBjX3B1Ymxfc3Vic2NyaWJlKG5ldCwgcHVibCwgbm9kZSk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0gZWxzZSBpZiAoZHR5cGUgPT0gV0lUSERSQVdBTCkgewotCQlwdWJsID0gdGlwY19uYW1ldGJsX3JlbW92ZV9wdWJsKG50b2hsKGktPnR5cGUpLCBudG9obChpLT5sb3dlciksCisJCXB1YmwgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwobmV0LCBudG9obChpLT50eXBlKSwKKwkJCQkJCW50b2hsKGktPmxvd2VyKSwKIAkJCQkJCW5vZGUsIG50b2hsKGktPnJlZiksCiAJCQkJCQludG9obChpLT5rZXkpKTsKIAkJaWYgKHB1YmwpIHsKLQkJCXRpcGNfcHVibF91bnN1YnNjcmliZShwdWJsLCBub2RlKTsKKwkJCXRpcGNfcHVibF91bnN1YnNjcmliZShuZXQsIHB1YmwsIG5vZGUpOwogCQkJa2ZyZWVfcmN1KHB1YmwsIHJjdSk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQpAQCAtMzQzLDcgKzM1Nyw3IEBACiAgKiB0aXBjX25hbWVkX3Byb2Nlc3NfYmFja2xvZyAtIHRyeSB0byBwcm9jZXNzIGFueSBwZW5kaW5nIG5hbWUgdGFibGUgdXBkYXRlcwogICogZnJvbSB0aGUgbmV0d29yay4KICAqLwotdm9pZCB0aXBjX25hbWVkX3Byb2Nlc3NfYmFja2xvZyh2b2lkKQordm9pZCB0aXBjX25hbWVkX3Byb2Nlc3NfYmFja2xvZyhzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGRpc3RyX3F1ZXVlX2l0ZW0gKmUsICp0bXA7CiAJY2hhciBhZGRyWzE2XTsKQEAgLTM1MSw3ICszNjUsNyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIHRtcCwgJnRpcGNfZGlzdF9xdWV1ZSwgbmV4dCkgewogCQlpZiAodGltZV9hZnRlcihlLT5leHBpcmVzLCBub3cpKSB7Ci0JCQlpZiAoIXRpcGNfdXBkYXRlX25hbWV0YmwoJmUtPmksIGUtPm5vZGUsIGUtPmR0eXBlKSkKKwkJCWlmICghdGlwY191cGRhdGVfbmFtZXRibChuZXQsICZlLT5pLCBlLT5ub2RlLCBlLT5kdHlwZSkpCiAJCQkJY29udGludWU7CiAJCX0gZWxzZSB7CiAJCQl0aXBjX2FkZHJfc3RyaW5nX2ZpbGwoYWRkciwgZS0+bm9kZSk7CkBAIC0zNjcsMjQgKzM4MSwzNCBAQAogfQogCiAvKioKLSAqIHRpcGNfbmFtZWRfcmN2IC0gcHJvY2VzcyBuYW1lIHRhYmxlIHVwZGF0ZSBtZXNzYWdlIHNlbnQgYnkgYW5vdGhlciBub2RlCisgKiB0aXBjX25hbWVkX3JjdiAtIHByb2Nlc3MgbmFtZSB0YWJsZSB1cGRhdGUgbWVzc2FnZXMgc2VudCBieSBhbm90aGVyIG5vZGUKICAqLwotdm9pZCB0aXBjX25hbWVkX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqYnVmKQordm9pZCB0aXBjX25hbWVkX3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSkKIHsKLQlzdHJ1Y3QgdGlwY19tc2cgKm1zZyA9IGJ1Zl9tc2coYnVmKTsKLQlzdHJ1Y3QgZGlzdHJfaXRlbSAqaXRlbSA9IChzdHJ1Y3QgZGlzdHJfaXRlbSAqKW1zZ19kYXRhKG1zZyk7Ci0JdTMyIGNvdW50ID0gbXNnX2RhdGFfc3oobXNnKSAvIElURU1fU0laRTsKLQl1MzIgbm9kZSA9IG1zZ19vcmlnbm9kZShtc2cpOworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKKwlzdHJ1Y3QgdGlwY19tc2cgKm1zZzsKKwlzdHJ1Y3QgZGlzdHJfaXRlbSAqaXRlbTsKKwl1aW50IGNvdW50OworCXUzMiBub2RlOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IG10eXBlOwogCi0Jc3Bpbl9sb2NrX2JoKCZ0aXBjX25hbWV0YmxfbG9jayk7Ci0Jd2hpbGUgKGNvdW50LS0pIHsKLQkJaWYgKCF0aXBjX3VwZGF0ZV9uYW1ldGJsKGl0ZW0sIG5vZGUsIG1zZ190eXBlKG1zZykpKQotCQkJdGlwY19uYW1lZF9hZGRfYmFja2xvZyhpdGVtLCBtc2dfdHlwZShtc2cpLCBub2RlKTsKLQkJaXRlbSsrOworCXNwaW5fbG9ja19iaCgmdG4tPm5hbWV0YmxfbG9jayk7CisJZm9yIChza2IgPSBza2JfZGVxdWV1ZShpbnB1dHEpOyBza2I7IHNrYiA9IHNrYl9kZXF1ZXVlKGlucHV0cSkpIHsKKwkJbXNnID0gYnVmX21zZyhza2IpOworCQltdHlwZSA9IG1zZ190eXBlKG1zZyk7CisJCWl0ZW0gPSAoc3RydWN0IGRpc3RyX2l0ZW0gKiltc2dfZGF0YShtc2cpOworCQljb3VudCA9IG1zZ19kYXRhX3N6KG1zZykgLyBJVEVNX1NJWkU7CisJCW5vZGUgPSBtc2dfb3JpZ25vZGUobXNnKTsKKwkJd2hpbGUgKGNvdW50LS0pIHsKKwkJCWlmICghdGlwY191cGRhdGVfbmFtZXRibChuZXQsIGl0ZW0sIG5vZGUsIG10eXBlKSkKKwkJCQl0aXBjX25hbWVkX2FkZF9iYWNrbG9nKGl0ZW0sIG10eXBlLCBub2RlKTsKKwkJCWl0ZW0rKzsKKwkJfQorCQlrZnJlZV9za2Ioc2tiKTsKKwkJdGlwY19uYW1lZF9wcm9jZXNzX2JhY2tsb2cobmV0KTsKIAl9Ci0JdGlwY19uYW1lZF9wcm9jZXNzX2JhY2tsb2coKTsKLQlzcGluX3VubG9ja19iaCgmdGlwY19uYW1ldGJsX2xvY2spOwotCWtmcmVlX3NrYihidWYpOworCXNwaW5fdW5sb2NrX2JoKCZ0bi0+bmFtZXRibF9sb2NrKTsKIH0KIAogLyoqCkBAIC0zOTQsMTcgKzQxOCwxOCBAQAogICogQWxsIG5hbWUgdGFibGUgZW50cmllcyBwdWJsaXNoZWQgYnkgdGhpcyBub2RlIGFyZSB1cGRhdGVkIHRvIHJlZmxlY3QKICAqIHRoZSBub2RlJ3MgbmV3IG5ldHdvcmsgYWRkcmVzcy4KICAqLwotdm9pZCB0aXBjX25hbWVkX3JlaW5pdCh2b2lkKQordm9pZCB0aXBjX25hbWVkX3JlaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOwogCXN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibDsKIAlpbnQgc2NvcGU7CiAKLQlzcGluX2xvY2tfYmgoJnRpcGNfbmFtZXRibF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnRuLT5uYW1ldGJsX2xvY2spOwogCiAJZm9yIChzY29wZSA9IFRJUENfWk9ORV9TQ09QRTsgc2NvcGUgPD0gVElQQ19OT0RFX1NDT1BFOyBzY29wZSsrKQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdWJsLCAmdGlwY19uYW1ldGJsLT5wdWJsX2xpc3Rbc2NvcGVdLAorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdWJsLCAmdG4tPm5hbWV0YmwtPnB1YmxfbGlzdFtzY29wZV0sCiAJCQkJCWxvY2FsX2xpc3QpCi0JCQlwdWJsLT5ub2RlID0gdGlwY19vd25fYWRkcjsKKwkJCXB1YmwtPm5vZGUgPSB0bi0+b3duX2FkZHI7CiAKLQlzcGluX3VubG9ja19iaCgmdGlwY19uYW1ldGJsX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZ0bi0+bmFtZXRibF9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC90aXBjL25hbWVfZGlzdHIuaCBiL25ldC90aXBjL25hbWVfZGlzdHIuaAppbmRleCBjZWY1NWNlLi5kZDJkOWZkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX2Rpc3RyLmgKKysrIGIvbmV0L3RpcGMvbmFtZV9kaXN0ci5oCkBAIC02NywxMyArNjcsMTMgQEAKIAlfX2JlMzIga2V5OwogfTsKIAotc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfcHVibGlzaChzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpOwotc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsKTsKLXZvaWQgbmFtZWRfY2x1c3Rlcl9kaXN0cmlidXRlKHN0cnVjdCBza19idWZmICpidWYpOwotdm9pZCB0aXBjX25hbWVkX25vZGVfdXAodTMyIGRub2RlKTsKLXZvaWQgdGlwY19uYW1lZF9yY3Yoc3RydWN0IHNrX2J1ZmYgKmJ1Zik7Ci12b2lkIHRpcGNfbmFtZWRfcmVpbml0KHZvaWQpOwotdm9pZCB0aXBjX25hbWVkX3Byb2Nlc3NfYmFja2xvZyh2b2lkKTsKLXZvaWQgdGlwY19wdWJsX25vdGlmeShzdHJ1Y3QgbGlzdF9oZWFkICpuc3ViX2xpc3QsIHUzMiBhZGRyKTsKK3N0cnVjdCBza19idWZmICp0aXBjX25hbWVkX3B1Ymxpc2goc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpOworc3RydWN0IHNrX2J1ZmYgKnRpcGNfbmFtZWRfd2l0aGRyYXcoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwpOwordm9pZCBuYW1lZF9jbHVzdGVyX2Rpc3RyaWJ1dGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqYnVmKTsKK3ZvaWQgdGlwY19uYW1lZF9ub2RlX3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlKTsKK3ZvaWQgdGlwY19uYW1lZF9yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICptc2dfcXVldWUpOwordm9pZCB0aXBjX25hbWVkX3JlaW5pdChzdHJ1Y3QgbmV0ICpuZXQpOwordm9pZCB0aXBjX25hbWVkX3Byb2Nlc3NfYmFja2xvZyhzdHJ1Y3QgbmV0ICpuZXQpOwordm9pZCB0aXBjX3B1Ymxfbm90aWZ5KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGxpc3RfaGVhZCAqbnN1Yl9saXN0LCB1MzIgYWRkcik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmFtZV90YWJsZS5jIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCmluZGV4IGM4ZGYwMjIuLjEwNWJhN2FkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmMKKysrIGIvbmV0L3RpcGMvbmFtZV90YWJsZS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIG5ldC90aXBjL25hbWVfdGFibGUuYzogVElQQyBuYW1lIHRhYmxlIGNvZGUKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwgMjAxNCwgRXJpY3Nzb24gQUIKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LCAyMDE0LTIwMTUsIEVyaWNzc29uIEFCCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCwgMjAxMC0yMDE0LCBXaW5kIFJpdmVyIFN5c3RlbXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzQsMTEgKzM0LDE1IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibmV0bGluay5oIgogI2luY2x1ZGUgIm5hbWVfdGFibGUuaCIKICNpbmNsdWRlICJuYW1lX2Rpc3RyLmgiCiAjaW5jbHVkZSAic3Vic2NyLmgiCisjaW5jbHVkZSAiYmNhc3QuaCIKKyNpbmNsdWRlICJhZGRyLmgiCisjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogCiAjZGVmaW5lIFRJUENfTkFNRVRCTF9TSVpFIDEwMjQJCS8qIG11c3QgYmUgYSBwb3dlciBvZiAyICovCiAKQEAgLTEwNSw5ICsxMDksNiBAQAogCXN0cnVjdCByY3VfaGVhZCByY3U7CiB9OwogCi1zdHJ1Y3QgbmFtZV90YWJsZSAqdGlwY19uYW1ldGJsOwotREVGSU5FX1NQSU5MT0NLKHRpcGNfbmFtZXRibF9sb2NrKTsKLQogc3RhdGljIGludCBoYXNoKGludCB4KQogewogCXJldHVybiB4ICYgKFRJUENfTkFNRVRCTF9TSVpFIC0gMSk7CkBAIC0yMjgsOSArMjI5LDExIEBACiAvKioKICAqIHRpcGNfbmFtZXNlcV9pbnNlcnRfcHVibAogICovCi1zdGF0aWMgc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWVzZXFfaW5zZXJ0X3B1Ymwoc3RydWN0IG5hbWVfc2VxICpuc2VxLAotCQkJCQkJICAgIHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlciwKLQkJCQkJCSAgICB1MzIgc2NvcGUsIHUzMiBub2RlLCB1MzIgcG9ydCwgdTMyIGtleSkKK3N0YXRpYyBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXNlcV9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsCisJCQkJCQkgICAgc3RydWN0IG5hbWVfc2VxICpuc2VxLAorCQkJCQkJICAgIHUzMiB0eXBlLCB1MzIgbG93ZXIsCisJCQkJCQkgICAgdTMyIHVwcGVyLCB1MzIgc2NvcGUsCisJCQkJCQkgICAgdTMyIG5vZGUsIHUzMiBwb3J0LCB1MzIga2V5KQogewogCXN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqczsKIAlzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN0OwpAQCAtMzE1LDEyICszMTgsMTIgQEAKIAlsaXN0X2FkZCgmcHVibC0+em9uZV9saXN0LCAmaW5mby0+em9uZV9saXN0KTsKIAlpbmZvLT56b25lX2xpc3Rfc2l6ZSsrOwogCi0JaWYgKGluX293bl9jbHVzdGVyKG5vZGUpKSB7CisJaWYgKGluX293bl9jbHVzdGVyKG5ldCwgbm9kZSkpIHsKIAkJbGlzdF9hZGQoJnB1YmwtPmNsdXN0ZXJfbGlzdCwgJmluZm8tPmNsdXN0ZXJfbGlzdCk7CiAJCWluZm8tPmNsdXN0ZXJfbGlzdF9zaXplKys7CiAJfQogCi0JaWYgKGluX293bl9ub2RlKG5vZGUpKSB7CisJaWYgKGluX293bl9ub2RlKG5ldCwgbm9kZSkpIHsKIAkJbGlzdF9hZGQoJnB1YmwtPm5vZGVfbGlzdCwgJmluZm8tPm5vZGVfbGlzdCk7CiAJCWluZm8tPm5vZGVfbGlzdF9zaXplKys7CiAJfQpAQCAtMzQ5LDggKzM1MiwxMCBAQAogICogQSBmYWlsZWQgd2l0aGRyYXcgcmVxdWVzdCBzaW1wbHkgcmV0dXJucyBhIGZhaWx1cmUgaW5kaWNhdGlvbiBhbmQgbGV0cyB0aGUKICAqIGNhbGxlciBpc3N1ZSBhbnkgZXJyb3Igb3Igd2FybmluZyBtZXNzYWdlcyBhc3NvY2lhdGVkIHdpdGggc3VjaCBhIHByb2JsZW0uCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXNlcV9yZW1vdmVfcHVibChzdHJ1Y3QgbmFtZV9zZXEgKm5zZXEsIHUzMiBpbnN0LAotCQkJCQkJICAgIHUzMiBub2RlLCB1MzIgcmVmLCB1MzIga2V5KQorc3RhdGljIHN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1lc2VxX3JlbW92ZV9wdWJsKHN0cnVjdCBuZXQgKm5ldCwKKwkJCQkJCSAgICBzdHJ1Y3QgbmFtZV9zZXEgKm5zZXEsCisJCQkJCQkgICAgdTMyIGluc3QsIHUzMiBub2RlLAorCQkJCQkJICAgIHUzMiByZWYsIHUzMiBrZXkpCiB7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsOwogCXN0cnVjdCBzdWJfc2VxICpzc2VxID0gbmFtZXNlcV9maW5kX3N1YnNlcShuc2VxLCBpbnN0KTsKQEAgLTM3OCwxMyArMzgzLDEzIEBACiAJaW5mby0+em9uZV9saXN0X3NpemUtLTsKIAogCS8qIFJlbW92ZSBwdWJsaWNhdGlvbiBmcm9tIGNsdXN0ZXIgc2NvcGUgbGlzdCwgaWYgcHJlc2VudCAqLwotCWlmIChpbl9vd25fY2x1c3Rlcihub2RlKSkgeworCWlmIChpbl9vd25fY2x1c3RlcihuZXQsIG5vZGUpKSB7CiAJCWxpc3RfZGVsKCZwdWJsLT5jbHVzdGVyX2xpc3QpOwogCQlpbmZvLT5jbHVzdGVyX2xpc3Rfc2l6ZS0tOwogCX0KIAogCS8qIFJlbW92ZSBwdWJsaWNhdGlvbiBmcm9tIG5vZGUgc2NvcGUgbGlzdCwgaWYgcHJlc2VudCAqLwotCWlmIChpbl9vd25fbm9kZShub2RlKSkgeworCWlmIChpbl9vd25fbm9kZShuZXQsIG5vZGUpKSB7CiAJCWxpc3RfZGVsKCZwdWJsLT5ub2RlX2xpc3QpOwogCQlpbmZvLT5ub2RlX2xpc3Rfc2l6ZS0tOwogCX0KQEAgLTQ0NywxMiArNDUyLDEzIEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IG5hbWVfc2VxICpuYW1ldGJsX2ZpbmRfc2VxKHUzMiB0eXBlKQorc3RhdGljIHN0cnVjdCBuYW1lX3NlcSAqbmFtZXRibF9maW5kX3NlcShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0eXBlKQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqc2VxX2hlYWQ7CiAJc3RydWN0IG5hbWVfc2VxICpuczsKIAotCXNlcV9oZWFkID0gJnRpcGNfbmFtZXRibC0+c2VxX2hsaXN0W2hhc2godHlwZSldOworCXNlcV9oZWFkID0gJnRuLT5uYW1ldGJsLT5zZXFfaGxpc3RbaGFzaCh0eXBlKV07CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5zLCBzZXFfaGVhZCwgbnNfbGlzdCkgewogCQlpZiAobnMtPnR5cGUgPT0gdHlwZSkKIAkJCXJldHVybiBuczsKQEAgLTQ2MSwxMSArNDY3LDEzIEBACiAJcmV0dXJuIE5VTEw7CiB9OwogCi1zdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibCh1MzIgdHlwZSwgdTMyIGxvd2VyLCB1MzIgdXBwZXIsCi0JCQkJCSAgICAgdTMyIHNjb3BlLCB1MzIgbm9kZSwgdTMyIHBvcnQsIHUzMiBrZXkpCitzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0eXBlLAorCQkJCQkgICAgIHUzMiBsb3dlciwgdTMyIHVwcGVyLCB1MzIgc2NvcGUsCisJCQkJCSAgICAgdTMyIG5vZGUsIHUzMiBwb3J0LCB1MzIga2V5KQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAlzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7Ci0Jc3RydWN0IG5hbWVfc2VxICpzZXEgPSBuYW1ldGJsX2ZpbmRfc2VxKHR5cGUpOworCXN0cnVjdCBuYW1lX3NlcSAqc2VxID0gbmFtZXRibF9maW5kX3NlcShuZXQsIHR5cGUpOwogCWludCBpbmRleCA9IGhhc2godHlwZSk7CiAKIAlpZiAoKHNjb3BlIDwgVElQQ19aT05FX1NDT1BFKSB8fCAoc2NvcGUgPiBUSVBDX05PREVfU0NPUEUpIHx8CkBAIC00NzYsMjkgKzQ4NCwyOSBAQAogCX0KIAogCWlmICghc2VxKQotCQlzZXEgPSB0aXBjX25hbWVzZXFfY3JlYXRlKHR5cGUsCi0JCQkJCSAgJnRpcGNfbmFtZXRibC0+c2VxX2hsaXN0W2luZGV4XSk7CisJCXNlcSA9IHRpcGNfbmFtZXNlcV9jcmVhdGUodHlwZSwgJnRuLT5uYW1ldGJsLT5zZXFfaGxpc3RbaW5kZXhdKTsKIAlpZiAoIXNlcSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlzcGluX2xvY2tfYmgoJnNlcS0+bG9jayk7Ci0JcHVibCA9IHRpcGNfbmFtZXNlcV9pbnNlcnRfcHVibChzZXEsIHR5cGUsIGxvd2VyLCB1cHBlciwKKwlwdWJsID0gdGlwY19uYW1lc2VxX2luc2VydF9wdWJsKG5ldCwgc2VxLCB0eXBlLCBsb3dlciwgdXBwZXIsCiAJCQkJCXNjb3BlLCBub2RlLCBwb3J0LCBrZXkpOwogCXNwaW5fdW5sb2NrX2JoKCZzZXEtPmxvY2spOwogCXJldHVybiBwdWJsOwogfQogCi1zdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9yZW1vdmVfcHVibCh1MzIgdHlwZSwgdTMyIGxvd2VyLAotCQkJCQkgICAgIHUzMiBub2RlLCB1MzIgcmVmLCB1MzIga2V5KQorc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1Ymwoc3RydWN0IG5ldCAqbmV0LCB1MzIgdHlwZSwKKwkJCQkJICAgICB1MzIgbG93ZXIsIHUzMiBub2RlLCB1MzIgcmVmLAorCQkJCQkgICAgIHUzMiBrZXkpCiB7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsOwotCXN0cnVjdCBuYW1lX3NlcSAqc2VxID0gbmFtZXRibF9maW5kX3NlcSh0eXBlKTsKKwlzdHJ1Y3QgbmFtZV9zZXEgKnNlcSA9IG5hbWV0YmxfZmluZF9zZXEobmV0LCB0eXBlKTsKIAogCWlmICghc2VxKQogCQlyZXR1cm4gTlVMTDsKIAogCXNwaW5fbG9ja19iaCgmc2VxLT5sb2NrKTsKLQlwdWJsID0gdGlwY19uYW1lc2VxX3JlbW92ZV9wdWJsKHNlcSwgbG93ZXIsIG5vZGUsIHJlZiwga2V5KTsKKwlwdWJsID0gdGlwY19uYW1lc2VxX3JlbW92ZV9wdWJsKG5ldCwgc2VxLCBsb3dlciwgbm9kZSwgcmVmLCBrZXkpOwogCWlmICghc2VxLT5maXJzdF9mcmVlICYmIGxpc3RfZW1wdHkoJnNlcS0+c3Vic2NyaXB0aW9ucykpIHsKIAkJaGxpc3RfZGVsX2luaXRfcmN1KCZzZXEtPm5zX2xpc3QpOwogCQlrZnJlZShzZXEtPnNzZXFzKTsKQEAgLTUyMyw4ICs1MzEsMTAgQEAKICAqIC0gaWYgbmFtZSB0cmFuc2xhdGlvbiBpcyBhdHRlbXB0ZWQgYW5kIGZhaWxzLCBzZXRzICdkZXN0bm9kZScgdG8gMAogICogICBhbmQgcmV0dXJucyAwCiAgKi8KLXUzMiB0aXBjX25hbWV0YmxfdHJhbnNsYXRlKHUzMiB0eXBlLCB1MzIgaW5zdGFuY2UsIHUzMiAqZGVzdG5vZGUpCit1MzIgdGlwY19uYW1ldGJsX3RyYW5zbGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0eXBlLCB1MzIgaW5zdGFuY2UsCisJCQkgICB1MzIgKmRlc3Rub2RlKQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAlzdHJ1Y3Qgc3ViX3NlcSAqc3NlcTsKIAlzdHJ1Y3QgbmFtZV9pbmZvICppbmZvOwogCXN0cnVjdCBwdWJsaWNhdGlvbiAqcHVibDsKQEAgLTUzMiwxMSArNTQyLDExIEBACiAJdTMyIHJlZiA9IDA7CiAJdTMyIG5vZGUgPSAwOwogCi0JaWYgKCF0aXBjX2luX3Njb3BlKCpkZXN0bm9kZSwgdGlwY19vd25fYWRkcikpCisJaWYgKCF0aXBjX2luX3Njb3BlKCpkZXN0bm9kZSwgdG4tPm93bl9hZGRyKSkKIAkJcmV0dXJuIDA7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0Jc2VxID0gbmFtZXRibF9maW5kX3NlcSh0eXBlKTsKKwlzZXEgPSBuYW1ldGJsX2ZpbmRfc2VxKG5ldCwgdHlwZSk7CiAJaWYgKHVubGlrZWx5KCFzZXEpKQogCQlnb3RvIG5vdF9mb3VuZDsKIAlzcGluX2xvY2tfYmgoJnNlcS0+bG9jayk7CkBAIC01NjksMTMgKzU3OSwxMyBAQAogCX0KIAogCS8qIFJvdW5kLVJvYmluIEFsZ29yaXRobSAqLwotCWVsc2UgaWYgKCpkZXN0bm9kZSA9PSB0aXBjX293bl9hZGRyKSB7CisJZWxzZSBpZiAoKmRlc3Rub2RlID09IHRuLT5vd25fYWRkcikgewogCQlpZiAobGlzdF9lbXB0eSgmaW5mby0+bm9kZV9saXN0KSkKIAkJCWdvdG8gbm9fbWF0Y2g7CiAJCXB1YmwgPSBsaXN0X2ZpcnN0X2VudHJ5KCZpbmZvLT5ub2RlX2xpc3QsIHN0cnVjdCBwdWJsaWNhdGlvbiwKIAkJCQkJbm9kZV9saXN0KTsKIAkJbGlzdF9tb3ZlX3RhaWwoJnB1YmwtPm5vZGVfbGlzdCwgJmluZm8tPm5vZGVfbGlzdCk7Ci0JfSBlbHNlIGlmIChpbl9vd25fY2x1c3Rlcl9leGFjdCgqZGVzdG5vZGUpKSB7CisJfSBlbHNlIGlmIChpbl9vd25fY2x1c3Rlcl9leGFjdChuZXQsICpkZXN0bm9kZSkpIHsKIAkJaWYgKGxpc3RfZW1wdHkoJmluZm8tPmNsdXN0ZXJfbGlzdCkpCiAJCQlnb3RvIG5vX21hdGNoOwogCQlwdWJsID0gbGlzdF9maXJzdF9lbnRyeSgmaW5mby0+Y2x1c3Rlcl9saXN0LCBzdHJ1Y3QgcHVibGljYXRpb24sCkBAIC02MDksOCArNjE5LDggQEAKICAqCiAgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIGFueSBvZmYtbm9kZSBwb3J0cyBvdmVybGFwCiAgKi8KLWludCB0aXBjX25hbWV0YmxfbWNfdHJhbnNsYXRlKHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlciwgdTMyIGxpbWl0LAotCQkJICAgICAgc3RydWN0IHRpcGNfcG9ydF9saXN0ICpkcG9ydHMpCitpbnQgdGlwY19uYW1ldGJsX21jX3RyYW5zbGF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlciwKKwkJCSAgICAgIHUzMiBsaW1pdCwgc3RydWN0IHRpcGNfcGxpc3QgKmRwb3J0cykKIHsKIAlzdHJ1Y3QgbmFtZV9zZXEgKnNlcTsKIAlzdHJ1Y3Qgc3ViX3NlcSAqc3NlcTsKQEAgLTYxOSw3ICs2MjksNyBAQAogCWludCByZXMgPSAwOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXNlcSA9IG5hbWV0YmxfZmluZF9zZXEodHlwZSk7CisJc2VxID0gbmFtZXRibF9maW5kX3NlcShuZXQsIHR5cGUpOwogCWlmICghc2VxKQogCQlnb3RvIGV4aXQ7CiAKQEAgLTYzNSw3ICs2NDUsNyBAQAogCQlpbmZvID0gc3NlcS0+aW5mbzsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShwdWJsLCAmaW5mby0+bm9kZV9saXN0LCBub2RlX2xpc3QpIHsKIAkJCWlmIChwdWJsLT5zY29wZSA8PSBsaW1pdCkKLQkJCQl0aXBjX3BvcnRfbGlzdF9hZGQoZHBvcnRzLCBwdWJsLT5yZWYpOworCQkJCXRpcGNfcGxpc3RfcHVzaChkcG9ydHMsIHB1YmwtPnJlZik7CiAJCX0KIAogCQlpZiAoaW5mby0+Y2x1c3Rlcl9saXN0X3NpemUgIT0gaW5mby0+bm9kZV9saXN0X3NpemUpCkBAIC02NTAsNTAgKzY2MCw1NSBAQAogLyoKICAqIHRpcGNfbmFtZXRibF9wdWJsaXNoIC0gYWRkIG5hbWUgcHVibGljYXRpb24gdG8gbmV0d29yayBuYW1lIHRhYmxlcwogICovCi1zdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9wdWJsaXNoKHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlciwKLQkJCQkJIHUzMiBzY29wZSwgdTMyIHBvcnRfcmVmLCB1MzIga2V5KQorc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0eXBlLCB1MzIgbG93ZXIsCisJCQkJCSB1MzIgdXBwZXIsIHUzMiBzY29wZSwgdTMyIHBvcnRfcmVmLAorCQkJCQkgdTMyIGtleSkKIHsKIAlzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7CiAJc3RydWN0IHNrX2J1ZmYgKmJ1ZiA9IE5VTEw7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOwogCi0Jc3Bpbl9sb2NrX2JoKCZ0aXBjX25hbWV0YmxfbG9jayk7Ci0JaWYgKHRpcGNfbmFtZXRibC0+bG9jYWxfcHVibF9jb3VudCA+PSBUSVBDX01BWF9QVUJMSUNBVElPTlMpIHsKKwlzcGluX2xvY2tfYmgoJnRuLT5uYW1ldGJsX2xvY2spOworCWlmICh0bi0+bmFtZXRibC0+bG9jYWxfcHVibF9jb3VudCA+PSBUSVBDX01BWF9QVUJMSUNBVElPTlMpIHsKIAkJcHJfd2FybigiUHVibGljYXRpb24gZmFpbGVkLCBsb2NhbCBwdWJsaWNhdGlvbiBsaW1pdCByZWFjaGVkICgldSlcbiIsCiAJCQlUSVBDX01BWF9QVUJMSUNBVElPTlMpOwotCQlzcGluX3VubG9ja19iaCgmdGlwY19uYW1ldGJsX2xvY2spOworCQlzcGluX3VubG9ja19iaCgmdG4tPm5hbWV0YmxfbG9jayk7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCXB1YmwgPSB0aXBjX25hbWV0YmxfaW5zZXJ0X3B1YmwodHlwZSwgbG93ZXIsIHVwcGVyLCBzY29wZSwKLQkJCQkgICB0aXBjX293bl9hZGRyLCBwb3J0X3JlZiwga2V5KTsKKwlwdWJsID0gdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKG5ldCwgdHlwZSwgbG93ZXIsIHVwcGVyLCBzY29wZSwKKwkJCQkJdG4tPm93bl9hZGRyLCBwb3J0X3JlZiwga2V5KTsKIAlpZiAobGlrZWx5KHB1YmwpKSB7Ci0JCXRpcGNfbmFtZXRibC0+bG9jYWxfcHVibF9jb3VudCsrOwotCQlidWYgPSB0aXBjX25hbWVkX3B1Ymxpc2gocHVibCk7CisJCXRuLT5uYW1ldGJsLT5sb2NhbF9wdWJsX2NvdW50Kys7CisJCWJ1ZiA9IHRpcGNfbmFtZWRfcHVibGlzaChuZXQsIHB1YmwpOwogCQkvKiBBbnkgcGVuZGluZyBleHRlcm5hbCBldmVudHM/ICovCi0JCXRpcGNfbmFtZWRfcHJvY2Vzc19iYWNrbG9nKCk7CisJCXRpcGNfbmFtZWRfcHJvY2Vzc19iYWNrbG9nKG5ldCk7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZ0aXBjX25hbWV0YmxfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnRuLT5uYW1ldGJsX2xvY2spOwogCiAJaWYgKGJ1ZikKLQkJbmFtZWRfY2x1c3Rlcl9kaXN0cmlidXRlKGJ1Zik7CisJCW5hbWVkX2NsdXN0ZXJfZGlzdHJpYnV0ZShuZXQsIGJ1Zik7CiAJcmV0dXJuIHB1Ymw7CiB9CiAKIC8qKgogICogdGlwY19uYW1ldGJsX3dpdGhkcmF3IC0gd2l0aGRyYXcgbmFtZSBwdWJsaWNhdGlvbiBmcm9tIG5ldHdvcmsgbmFtZSB0YWJsZXMKICAqLwotaW50IHRpcGNfbmFtZXRibF93aXRoZHJhdyh1MzIgdHlwZSwgdTMyIGxvd2VyLCB1MzIgcmVmLCB1MzIga2V5KQoraW50IHRpcGNfbmFtZXRibF93aXRoZHJhdyhzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiByZWYsCisJCQkgIHUzMiBrZXkpCiB7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAotCXNwaW5fbG9ja19iaCgmdGlwY19uYW1ldGJsX2xvY2spOwotCXB1YmwgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwodHlwZSwgbG93ZXIsIHRpcGNfb3duX2FkZHIsIHJlZiwga2V5KTsKKwlzcGluX2xvY2tfYmgoJnRuLT5uYW1ldGJsX2xvY2spOworCXB1YmwgPSB0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwobmV0LCB0eXBlLCBsb3dlciwgdG4tPm93bl9hZGRyLAorCQkJCQlyZWYsIGtleSk7CiAJaWYgKGxpa2VseShwdWJsKSkgewotCQl0aXBjX25hbWV0YmwtPmxvY2FsX3B1YmxfY291bnQtLTsKLQkJc2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhwdWJsKTsKKwkJdG4tPm5hbWV0YmwtPmxvY2FsX3B1YmxfY291bnQtLTsKKwkJc2tiID0gdGlwY19uYW1lZF93aXRoZHJhdyhuZXQsIHB1YmwpOwogCQkvKiBBbnkgcGVuZGluZyBleHRlcm5hbCBldmVudHM/ICovCi0JCXRpcGNfbmFtZWRfcHJvY2Vzc19iYWNrbG9nKCk7CisJCXRpcGNfbmFtZWRfcHJvY2Vzc19iYWNrbG9nKG5ldCk7CiAJCWxpc3RfZGVsX2luaXQoJnB1YmwtPnBwb3J0X2xpc3QpOwogCQlrZnJlZV9yY3UocHVibCwgcmN1KTsKIAl9IGVsc2UgewpAQCAtNzAxLDEwICs3MTYsMTAgQEAKIAkJICAgICAgICIodHlwZT0ldSwgbG93ZXI9JXUsIHJlZj0ldSwga2V5PSV1KVxuIiwKIAkJICAgICAgIHR5cGUsIGxvd2VyLCByZWYsIGtleSk7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZ0aXBjX25hbWV0YmxfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnRuLT5uYW1ldGJsX2xvY2spOwogCiAJaWYgKHNrYikgewotCQluYW1lZF9jbHVzdGVyX2Rpc3RyaWJ1dGUoc2tiKTsKKwkJbmFtZWRfY2x1c3Rlcl9kaXN0cmlidXRlKG5ldCwgc2tiKTsKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwpAQCAtNzE1LDE1ICs3MzAsMTUgQEAKICAqLwogdm9pZCB0aXBjX25hbWV0Ymxfc3Vic2NyaWJlKHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqcykKIHsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMocy0+bmV0LCB0aXBjX25ldF9pZCk7CiAJdTMyIHR5cGUgPSBzLT5zZXEudHlwZTsKIAlpbnQgaW5kZXggPSBoYXNoKHR5cGUpOwogCXN0cnVjdCBuYW1lX3NlcSAqc2VxOwogCi0Jc3Bpbl9sb2NrX2JoKCZ0aXBjX25hbWV0YmxfbG9jayk7Ci0Jc2VxID0gbmFtZXRibF9maW5kX3NlcSh0eXBlKTsKKwlzcGluX2xvY2tfYmgoJnRuLT5uYW1ldGJsX2xvY2spOworCXNlcSA9IG5hbWV0YmxfZmluZF9zZXEocy0+bmV0LCB0eXBlKTsKIAlpZiAoIXNlcSkKLQkJc2VxID0gdGlwY19uYW1lc2VxX2NyZWF0ZSh0eXBlLAotCQkJCQkgICZ0aXBjX25hbWV0YmwtPnNlcV9obGlzdFtpbmRleF0pOworCQlzZXEgPSB0aXBjX25hbWVzZXFfY3JlYXRlKHR5cGUsICZ0bi0+bmFtZXRibC0+c2VxX2hsaXN0W2luZGV4XSk7CiAJaWYgKHNlcSkgewogCQlzcGluX2xvY2tfYmgoJnNlcS0+bG9jayk7CiAJCXRpcGNfbmFtZXNlcV9zdWJzY3JpYmUoc2VxLCBzKTsKQEAgLTczMiw3ICs3NDcsNyBAQAogCQlwcl93YXJuKCJGYWlsZWQgdG8gY3JlYXRlIHN1YnNjcmlwdGlvbiBmb3IgeyV1LCV1LCV1fVxuIiwKIAkJCXMtPnNlcS50eXBlLCBzLT5zZXEubG93ZXIsIHMtPnNlcS51cHBlcik7CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZ0aXBjX25hbWV0YmxfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnRuLT5uYW1ldGJsX2xvY2spOwogfQogCiAvKioKQEAgLTc0MCwxMCArNzU1LDExIEBACiAgKi8KIHZvaWQgdGlwY19uYW1ldGJsX3Vuc3Vic2NyaWJlKHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqcykKIHsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMocy0+bmV0LCB0aXBjX25ldF9pZCk7CiAJc3RydWN0IG5hbWVfc2VxICpzZXE7CiAKLQlzcGluX2xvY2tfYmgoJnRpcGNfbmFtZXRibF9sb2NrKTsKLQlzZXEgPSBuYW1ldGJsX2ZpbmRfc2VxKHMtPnNlcS50eXBlKTsKKwlzcGluX2xvY2tfYmgoJnRuLT5uYW1ldGJsX2xvY2spOworCXNlcSA9IG5hbWV0YmxfZmluZF9zZXEocy0+bmV0LCBzLT5zZXEudHlwZSk7CiAJaWYgKHNlcSAhPSBOVUxMKSB7CiAJCXNwaW5fbG9ja19iaCgmc2VxLT5sb2NrKTsKIAkJbGlzdF9kZWxfaW5pdCgmcy0+bmFtZXNlcV9saXN0KTsKQEAgLTc1NiwxOTMgKzc3MiwxMyBAQAogCQkJc3Bpbl91bmxvY2tfYmgoJnNlcS0+bG9jayk7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnRpcGNfbmFtZXRibF9sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmdG4tPm5hbWV0YmxfbG9jayk7CiB9CiAKLS8qKgotICogc3Vic2VxX2xpc3QgLSBwcmludCBzcGVjaWZpZWQgc3ViLXNlcXVlbmNlIGNvbnRlbnRzIGludG8gdGhlIGdpdmVuIGJ1ZmZlcgotICovCi1zdGF0aWMgaW50IHN1YnNlcV9saXN0KHN0cnVjdCBzdWJfc2VxICpzc2VxLCBjaGFyICpidWYsIGludCBsZW4sIHUzMiBkZXB0aCwKLQkJICAgICAgIHUzMiBpbmRleCkKK2ludCB0aXBjX25hbWV0YmxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JY2hhciBwb3J0SWRTdHJbMjddOwotCWNvbnN0IGNoYXIgKnNjb3BlX3N0cltdID0geyIiLCAiIHpvbmUiLCAiIGNsdXN0ZXIiLCAiIG5vZGUifTsKLQlzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7Ci0Jc3RydWN0IG5hbWVfaW5mbyAqaW5mbzsKLQlpbnQgcmV0OwotCi0JcmV0ID0gdGlwY19zbnByaW50ZihidWYsIGxlbiwgIiUtMTB1ICUtMTB1ICIsIHNzZXEtPmxvd2VyLCBzc2VxLT51cHBlcik7Ci0KLQlpZiAoZGVwdGggPT0gMikgewotCQlyZXQgKz0gdGlwY19zbnByaW50ZihidWYgLSByZXQsIGxlbiArIHJldCwgIlxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JaW5mbyA9IHNzZXEtPmluZm87Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB1YmwsICZpbmZvLT56b25lX2xpc3QsIHpvbmVfbGlzdCkgewotCQlzcHJpbnRmKHBvcnRJZFN0ciwgIjwldS4ldS4ldToldT4iLAotCQkJIHRpcGNfem9uZShwdWJsLT5ub2RlKSwgdGlwY19jbHVzdGVyKHB1YmwtPm5vZGUpLAotCQkJIHRpcGNfbm9kZShwdWJsLT5ub2RlKSwgcHVibC0+cmVmKTsKLQkJcmV0ICs9IHRpcGNfc25wcmludGYoYnVmICsgcmV0LCBsZW4gLSByZXQsICIlLTI2cyAiLCBwb3J0SWRTdHIpOwotCQlpZiAoZGVwdGggPiAzKSB7Ci0JCQlyZXQgKz0gdGlwY19zbnByaW50ZihidWYgKyByZXQsIGxlbiAtIHJldCwgIiUtMTB1ICVzIiwKLQkJCQkJICAgICBwdWJsLT5rZXksIHNjb3BlX3N0cltwdWJsLT5zY29wZV0pOwotCQl9Ci0JCWlmICghbGlzdF9pc19sYXN0KCZwdWJsLT56b25lX2xpc3QsICZpbmZvLT56b25lX2xpc3QpKQotCQkJcmV0ICs9IHRpcGNfc25wcmludGYoYnVmICsgcmV0LCBsZW4gLSByZXQsCi0JCQkJCSAgICAgIlxuJTMzcyIsICIgIik7Ci0JfQotCi0JcmV0ICs9IHRpcGNfc25wcmludGYoYnVmICsgcmV0LCBsZW4gLSByZXQsICJcbiIpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogbmFtZXNlcV9saXN0IC0gcHJpbnQgc3BlY2lmaWVkIG5hbWUgc2VxdWVuY2UgY29udGVudHMgaW50byB0aGUgZ2l2ZW4gYnVmZmVyCi0gKi8KLXN0YXRpYyBpbnQgbmFtZXNlcV9saXN0KHN0cnVjdCBuYW1lX3NlcSAqc2VxLCBjaGFyICpidWYsIGludCBsZW4sIHUzMiBkZXB0aCwKLQkJCXUzMiB0eXBlLCB1MzIgbG93Ym91bmQsIHUzMiB1cGJvdW5kLCB1MzIgaW5kZXgpCi17Ci0Jc3RydWN0IHN1Yl9zZXEgKnNzZXE7Ci0JY2hhciB0eXBlYXJlYVsxMV07Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoc2VxLT5maXJzdF9mcmVlID09IDApCi0JCXJldHVybiAwOwotCi0Jc3ByaW50Zih0eXBlYXJlYSwgIiUtMTB1Iiwgc2VxLT50eXBlKTsKLQotCWlmIChkZXB0aCA9PSAxKSB7Ci0JCXJldCArPSB0aXBjX3NucHJpbnRmKGJ1ZiwgbGVuLCAiJXNcbiIsIHR5cGVhcmVhKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlmb3IgKHNzZXEgPSBzZXEtPnNzZXFzOyBzc2VxICE9ICZzZXEtPnNzZXFzW3NlcS0+Zmlyc3RfZnJlZV07IHNzZXErKykgewotCQlpZiAoKGxvd2JvdW5kIDw9IHNzZXEtPnVwcGVyKSAmJiAodXBib3VuZCA+PSBzc2VxLT5sb3dlcikpIHsKLQkJCXJldCArPSB0aXBjX3NucHJpbnRmKGJ1ZiArIHJldCwgbGVuIC0gcmV0LCAiJXMgIiwKLQkJCQkJICAgIHR5cGVhcmVhKTsKLQkJCXNwaW5fbG9ja19iaCgmc2VxLT5sb2NrKTsKLQkJCXJldCArPSBzdWJzZXFfbGlzdChzc2VxLCBidWYgKyByZXQsIGxlbiAtIHJldCwKLQkJCQkJICBkZXB0aCwgaW5kZXgpOwotCQkJc3Bpbl91bmxvY2tfYmgoJnNlcS0+bG9jayk7Ci0JCQlzcHJpbnRmKHR5cGVhcmVhLCAiJTEwcyIsICIgIik7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBuYW1ldGJsX2hlYWRlciAtIHByaW50IG5hbWUgdGFibGUgaGVhZGVyIGludG8gdGhlIGdpdmVuIGJ1ZmZlcgotICovCi1zdGF0aWMgaW50IG5hbWV0YmxfaGVhZGVyKGNoYXIgKmJ1ZiwgaW50IGxlbiwgdTMyIGRlcHRoKQotewotCWNvbnN0IGNoYXIgKmhlYWRlcltdID0gewotCQkiVHlwZSAgICAgICAiLAotCQkiTG93ZXIgICAgICBVcHBlciAgICAgICIsCi0JCSJQb3J0IElkZW50aXR5ICAgICAgICAgICAgICAiLAotCQkiUHVibGljYXRpb24gU2NvcGUiCi0JfTsKLQotCWludCBpOwotCWludCByZXQgPSAwOwotCi0JaWYgKGRlcHRoID4gNCkKLQkJZGVwdGggPSA0OwotCWZvciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQotCQlyZXQgKz0gdGlwY19zbnByaW50ZihidWYgKyByZXQsIGxlbiAtIHJldCwgaGVhZGVyW2ldKTsKLQlyZXQgKz0gdGlwY19zbnByaW50ZihidWYgKyByZXQsIGxlbiAtIHJldCwgIlxuIik7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoqCi0gKiBuYW1ldGJsX2xpc3QgLSBwcmludCBzcGVjaWZpZWQgbmFtZSB0YWJsZSBjb250ZW50cyBpbnRvIHRoZSBnaXZlbiBidWZmZXIKLSAqLwotc3RhdGljIGludCBuYW1ldGJsX2xpc3QoY2hhciAqYnVmLCBpbnQgbGVuLCB1MzIgZGVwdGhfaW5mbywKLQkJCXUzMiB0eXBlLCB1MzIgbG93Ym91bmQsIHUzMiB1cGJvdW5kKQotewotCXN0cnVjdCBobGlzdF9oZWFkICpzZXFfaGVhZDsKLQlzdHJ1Y3QgbmFtZV9zZXEgKnNlcTsKLQlpbnQgYWxsX3R5cGVzOwotCWludCByZXQgPSAwOwotCXUzMiBkZXB0aDsKLQl1MzIgaTsKLQotCWFsbF90eXBlcyA9IChkZXB0aF9pbmZvICYgVElQQ19OVFFfQUxMVFlQRVMpOwotCWRlcHRoID0gKGRlcHRoX2luZm8gJiB+VElQQ19OVFFfQUxMVFlQRVMpOwotCi0JaWYgKGRlcHRoID09IDApCi0JCXJldHVybiAwOwotCi0JaWYgKGFsbF90eXBlcykgewotCQkvKiBkaXNwbGF5IGFsbCBlbnRyaWVzIGluIG5hbWUgdGFibGUgdG8gc3BlY2lmaWVkIGRlcHRoICovCi0JCXJldCArPSBuYW1ldGJsX2hlYWRlcihidWYsIGxlbiwgZGVwdGgpOwotCQlsb3dib3VuZCA9IDA7Ci0JCXVwYm91bmQgPSB+MDsKLQkJZm9yIChpID0gMDsgaSA8IFRJUENfTkFNRVRCTF9TSVpFOyBpKyspIHsKLQkJCXNlcV9oZWFkID0gJnRpcGNfbmFtZXRibC0+c2VxX2hsaXN0W2ldOwotCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNlcSwgc2VxX2hlYWQsIG5zX2xpc3QpIHsKLQkJCQlyZXQgKz0gbmFtZXNlcV9saXN0KHNlcSwgYnVmICsgcmV0LCBsZW4gLSByZXQsCi0JCQkJCQkgICBkZXB0aCwgc2VxLT50eXBlLAotCQkJCQkJICAgbG93Ym91bmQsIHVwYm91bmQsIGkpOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJLyogZGlzcGxheSBvbmx5IHRoZSBzZXF1ZW5jZSB0aGF0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCB0eXBlICovCi0JCWlmICh1cGJvdW5kIDwgbG93Ym91bmQpIHsKLQkJCXJldCArPSB0aXBjX3NucHJpbnRmKGJ1ZiArIHJldCwgbGVuIC0gcmV0LAotCQkJCQkiaW52YWxpZCBuYW1lIHNlcXVlbmNlIHNwZWNpZmllZFxuIik7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCXJldCArPSBuYW1ldGJsX2hlYWRlcihidWYgKyByZXQsIGxlbiAtIHJldCwgZGVwdGgpOwotCQlpID0gaGFzaCh0eXBlKTsKLQkJc2VxX2hlYWQgPSAmdGlwY19uYW1ldGJsLT5zZXFfaGxpc3RbaV07Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZXEsIHNlcV9oZWFkLCBuc19saXN0KSB7Ci0JCQlpZiAoc2VxLT50eXBlID09IHR5cGUpIHsKLQkJCQlyZXQgKz0gbmFtZXNlcV9saXN0KHNlcSwgYnVmICsgcmV0LCBsZW4gLSByZXQsCi0JCQkJCQkgICBkZXB0aCwgdHlwZSwKLQkJCQkJCSAgIGxvd2JvdW5kLCB1cGJvdW5kLCBpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gcmV0OwotfQotCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1ldGJsX2dldChjb25zdCB2b2lkICpyZXFfdGx2X2FyZWEsIGludCByZXFfdGx2X3NwYWNlKQotewotCXN0cnVjdCBza19idWZmICpidWY7Ci0Jc3RydWN0IHRpcGNfbmFtZV90YWJsZV9xdWVyeSAqYXJndjsKLQlzdHJ1Y3QgdGx2X2Rlc2MgKnJlcF90bHY7Ci0JY2hhciAqcGI7Ci0JaW50IHBiX2xlbjsKLQlpbnQgc3RyX2xlbjsKLQotCWlmICghVExWX0NIRUNLKHJlcV90bHZfYXJlYSwgcmVxX3Rsdl9zcGFjZSwgVElQQ19UTFZfTkFNRV9UQkxfUVVFUlkpKQotCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX1RMVl9FUlJPUik7Ci0KLQlidWYgPSB0aXBjX2NmZ19yZXBseV9hbGxvYyhUTFZfU1BBQ0UoVUxUUkFfU1RSSU5HX01BWF9MRU4pKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXBfdGx2ID0gKHN0cnVjdCB0bHZfZGVzYyAqKWJ1Zi0+ZGF0YTsKLQlwYiA9IFRMVl9EQVRBKHJlcF90bHYpOwotCXBiX2xlbiA9IFVMVFJBX1NUUklOR19NQVhfTEVOOwotCWFyZ3YgPSAoc3RydWN0IHRpcGNfbmFtZV90YWJsZV9xdWVyeSAqKVRMVl9EQVRBKHJlcV90bHZfYXJlYSk7Ci0JcmN1X3JlYWRfbG9jaygpOwotCXN0cl9sZW4gPSBuYW1ldGJsX2xpc3QocGIsIHBiX2xlbiwgbnRvaGwoYXJndi0+ZGVwdGgpLAotCQkJICAgICAgIG50b2hsKGFyZ3YtPnR5cGUpLAotCQkJICAgICAgIG50b2hsKGFyZ3YtPmxvd2JvdW5kKSwgbnRvaGwoYXJndi0+dXBib3VuZCkpOwotCXJjdV9yZWFkX3VubG9jaygpOwotCXN0cl9sZW4gKz0gMTsJLyogZm9yICJcMCIgKi8KLQlza2JfcHV0KGJ1ZiwgVExWX1NQQUNFKHN0cl9sZW4pKTsKLQlUTFZfU0VUKHJlcF90bHYsIFRJUENfVExWX1VMVFJBX1NUUklORywgTlVMTCwgc3RyX2xlbik7Ci0KLQlyZXR1cm4gYnVmOwotfQotCi1pbnQgdGlwY19uYW1ldGJsX2luaXQodm9pZCkKLXsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CisJc3RydWN0IG5hbWVfdGFibGUgKnRpcGNfbmFtZXRibDsKIAlpbnQgaTsKIAogCXRpcGNfbmFtZXRibCA9IGt6YWxsb2Moc2l6ZW9mKCp0aXBjX25hbWV0YmwpLCBHRlBfQVRPTUlDKTsKQEAgLTk1NSw2ICs3OTEsOCBAQAogCUlOSVRfTElTVF9IRUFEKCZ0aXBjX25hbWV0YmwtPnB1YmxfbGlzdFtUSVBDX1pPTkVfU0NPUEVdKTsKIAlJTklUX0xJU1RfSEVBRCgmdGlwY19uYW1ldGJsLT5wdWJsX2xpc3RbVElQQ19DTFVTVEVSX1NDT1BFXSk7CiAJSU5JVF9MSVNUX0hFQUQoJnRpcGNfbmFtZXRibC0+cHVibF9saXN0W1RJUENfTk9ERV9TQ09QRV0pOworCXRuLT5uYW1ldGJsID0gdGlwY19uYW1ldGJsOworCXNwaW5fbG9ja19pbml0KCZ0bi0+bmFtZXRibF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTYzLDcgKzgwMSw3IEBACiAgKgogICogdGlwY19uYW1ldGJsX2xvY2sgbXVzdCBiZSBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uCiAgKi8KLXN0YXRpYyB2b2lkIHRpcGNfcHVyZ2VfcHVibGljYXRpb25zKHN0cnVjdCBuYW1lX3NlcSAqc2VxKQorc3RhdGljIHZvaWQgdGlwY19wdXJnZV9wdWJsaWNhdGlvbnMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmFtZV9zZXEgKnNlcSkKIHsKIAlzdHJ1Y3QgcHVibGljYXRpb24gKnB1YmwsICpzYWZlOwogCXN0cnVjdCBzdWJfc2VxICpzc2VxOwpAQCAtOTczLDggKzgxMSw4IEBACiAJc3NlcSA9IHNlcS0+c3NlcXM7CiAJaW5mbyA9IHNzZXEtPmluZm87CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHB1YmwsIHNhZmUsICZpbmZvLT56b25lX2xpc3QsIHpvbmVfbGlzdCkgewotCQl0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwocHVibC0+dHlwZSwgcHVibC0+bG93ZXIsIHB1YmwtPm5vZGUsCi0JCQkJCSBwdWJsLT5yZWYsIHB1YmwtPmtleSk7CisJCXRpcGNfbmFtZXRibF9yZW1vdmVfcHVibChuZXQsIHB1YmwtPnR5cGUsIHB1YmwtPmxvd2VyLAorCQkJCQkgcHVibC0+bm9kZSwgcHVibC0+cmVmLCBwdWJsLT5rZXkpOwogCQlrZnJlZV9yY3UocHVibCwgcmN1KTsKIAl9CiAJaGxpc3RfZGVsX2luaXRfcmN1KCZzZXEtPm5zX2xpc3QpOwpAQCAtOTg0LDI1ICs4MjIsMjcgQEAKIAlrZnJlZV9yY3Uoc2VxLCByY3UpOwogfQogCi12b2lkIHRpcGNfbmFtZXRibF9zdG9wKHZvaWQpCit2b2lkIHRpcGNfbmFtZXRibF9zdG9wKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAl1MzIgaTsKIAlzdHJ1Y3QgbmFtZV9zZXEgKnNlcTsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqc2VxX2hlYWQ7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOworCXN0cnVjdCBuYW1lX3RhYmxlICp0aXBjX25hbWV0YmwgPSB0bi0+bmFtZXRibDsKIAogCS8qIFZlcmlmeSBuYW1lIHRhYmxlIGlzIGVtcHR5IGFuZCBwdXJnZSBhbnkgbGluZ2VyaW5nCiAJICogcHVibGljYXRpb25zLCB0aGVuIHJlbGVhc2UgdGhlIG5hbWUgdGFibGUKIAkgKi8KLQlzcGluX2xvY2tfYmgoJnRpcGNfbmFtZXRibF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnRuLT5uYW1ldGJsX2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBUSVBDX05BTUVUQkxfU0laRTsgaSsrKSB7CiAJCWlmIChobGlzdF9lbXB0eSgmdGlwY19uYW1ldGJsLT5zZXFfaGxpc3RbaV0pKQogCQkJY29udGludWU7CiAJCXNlcV9oZWFkID0gJnRpcGNfbmFtZXRibC0+c2VxX2hsaXN0W2ldOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2VxLCBzZXFfaGVhZCwgbnNfbGlzdCkgewotCQkJdGlwY19wdXJnZV9wdWJsaWNhdGlvbnMoc2VxKTsKKwkJCXRpcGNfcHVyZ2VfcHVibGljYXRpb25zKG5ldCwgc2VxKTsKIAkJfQogCX0KLQlzcGluX3VubG9ja19iaCgmdGlwY19uYW1ldGJsX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZ0bi0+bmFtZXRibF9sb2NrKTsKIAogCXN5bmNocm9uaXplX25ldCgpOwogCWtmcmVlKHRpcGNfbmFtZXRibCk7CkBAIC0xMDMzLDcgKzg3Myw3IEBACiAJCSpsYXN0X3B1YmwgPSBwLT5rZXk7CiAKIAkJaGRyID0gZ2VubG1zZ19wdXQobXNnLT5za2IsIG1zZy0+cG9ydGlkLCBtc2ctPnNlcSwKLQkJCQkgICZ0aXBjX2dlbmxfdjJfZmFtaWx5LCBOTE1fRl9NVUxUSSwKKwkJCQkgICZ0aXBjX2dlbmxfZmFtaWx5LCBOTE1fRl9NVUxUSSwKIAkJCQkgIFRJUENfTkxfTkFNRV9UQUJMRV9HRVQpOwogCQlpZiAoIWhkcikKIAkJCXJldHVybiAtRU1TR1NJWkU7CkBAIC0xMTA2LDkgKzk0NiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fdGlwY19ubF9zZXFfbGlzdChzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZywgdTMyICpsYXN0X3R5cGUsCi0JCQkgICAgICB1MzIgKmxhc3RfbG93ZXIsIHUzMiAqbGFzdF9wdWJsKQorc3RhdGljIGludCB0aXBjX25sX3NlcV9saXN0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfbmxfbXNnICptc2csCisJCQkgICAgdTMyICpsYXN0X3R5cGUsIHUzMiAqbGFzdF9sb3dlciwgdTMyICpsYXN0X3B1YmwpCiB7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOwogCXN0cnVjdCBobGlzdF9oZWFkICpzZXFfaGVhZDsKIAlzdHJ1Y3QgbmFtZV9zZXEgKnNlcSA9IE5VTEw7CiAJaW50IGVycjsKQEAgLTExMjAsMTAgKzk2MSwxMCBAQAogCQlpID0gMDsKIAogCWZvciAoOyBpIDwgVElQQ19OQU1FVEJMX1NJWkU7IGkrKykgewotCQlzZXFfaGVhZCA9ICZ0aXBjX25hbWV0YmwtPnNlcV9obGlzdFtpXTsKKwkJc2VxX2hlYWQgPSAmdG4tPm5hbWV0YmwtPnNlcV9obGlzdFtpXTsKIAogCQlpZiAoKmxhc3RfdHlwZSkgewotCQkJc2VxID0gbmFtZXRibF9maW5kX3NlcSgqbGFzdF90eXBlKTsKKwkJCXNlcSA9IG5hbWV0YmxfZmluZF9zZXEobmV0LCAqbGFzdF90eXBlKTsKIAkJCWlmICghc2VxKQogCQkJCXJldHVybiAtRVBJUEU7CiAJCX0gZWxzZSB7CkBAIC0xMTU3LDYgKzk5OCw3IEBACiAJdTMyIGxhc3RfdHlwZSA9IGNiLT5hcmdzWzBdOwogCXUzMiBsYXN0X2xvd2VyID0gY2ItPmFyZ3NbMV07CiAJdTMyIGxhc3RfcHVibCA9IGNiLT5hcmdzWzJdOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCB0aXBjX25sX21zZyBtc2c7CiAKIAlpZiAoZG9uZSkKQEAgLTExNjcsNyArMTAwOSw3IEBACiAJbXNnLnNlcSA9IGNiLT5ubGgtPm5sbXNnX3NlcTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQllcnIgPSBfX3RpcGNfbmxfc2VxX2xpc3QoJm1zZywgJmxhc3RfdHlwZSwgJmxhc3RfbG93ZXIsICZsYXN0X3B1YmwpOworCWVyciA9IHRpcGNfbmxfc2VxX2xpc3QobmV0LCAmbXNnLCAmbGFzdF90eXBlLCAmbGFzdF9sb3dlciwgJmxhc3RfcHVibCk7CiAJaWYgKCFlcnIpIHsKIAkJZG9uZSA9IDE7CiAJfSBlbHNlIGlmIChlcnIgIT0gLUVNU0dTSVpFKSB7CkBAIC0xMTg4LDMgKzEwMzAsNDEgQEAKIAogCXJldHVybiBza2ItPmxlbjsKIH0KKwordm9pZCB0aXBjX3BsaXN0X3B1c2goc3RydWN0IHRpcGNfcGxpc3QgKnBsLCB1MzIgcG9ydCkKK3sKKwlzdHJ1Y3QgdGlwY19wbGlzdCAqbmw7CisKKwlpZiAobGlrZWx5KCFwbC0+cG9ydCkpIHsKKwkJcGwtPnBvcnQgPSBwb3J0OworCQlyZXR1cm47CisJfQorCWlmIChwbC0+cG9ydCA9PSBwb3J0KQorCQlyZXR1cm47CisJbGlzdF9mb3JfZWFjaF9lbnRyeShubCwgJnBsLT5saXN0LCBsaXN0KSB7CisJCWlmIChubC0+cG9ydCA9PSBwb3J0KQorCQkJcmV0dXJuOworCX0KKwlubCA9IGttYWxsb2Moc2l6ZW9mKCpubCksIEdGUF9BVE9NSUMpOworCWlmIChubCkgeworCQlubC0+cG9ydCA9IHBvcnQ7CisJCWxpc3RfYWRkKCZubC0+bGlzdCwgJnBsLT5saXN0KTsKKwl9Cit9CisKK3UzMiB0aXBjX3BsaXN0X3BvcChzdHJ1Y3QgdGlwY19wbGlzdCAqcGwpCit7CisJc3RydWN0IHRpcGNfcGxpc3QgKm5sOworCXUzMiBwb3J0ID0gMDsKKworCWlmIChsaWtlbHkobGlzdF9lbXB0eSgmcGwtPmxpc3QpKSkgeworCQlwb3J0ID0gcGwtPnBvcnQ7CisJCXBsLT5wb3J0ID0gMDsKKwkJcmV0dXJuIHBvcnQ7CisJfQorCW5sID0gbGlzdF9maXJzdF9lbnRyeSgmcGwtPmxpc3QsIHR5cGVvZigqbmwpLCBsaXN0KTsKKwlwb3J0ID0gbmwtPnBvcnQ7CisJbGlzdF9kZWwoJm5sLT5saXN0KTsKKwlrZnJlZShubCk7CisJcmV0dXJuIHBvcnQ7Cit9CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uYW1lX3RhYmxlLmggYi9uZXQvdGlwYy9uYW1lX3RhYmxlLmgKaW5kZXggNWYwZGVlOS4uMTUyNGE3MyAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmFtZV90YWJsZS5oCisrKyBiL25ldC90aXBjL25hbWVfdGFibGUuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBuZXQvdGlwYy9uYW1lX3RhYmxlLmg6IEluY2x1ZGUgZmlsZSBmb3IgVElQQyBuYW1lIHRhYmxlIGNvZGUKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNiwgMjAxNCwgRXJpY3Nzb24gQUIKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LCAyMDE0LTIwMTUsIEVyaWNzc29uIEFCCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSwgMjAxMC0yMDExLCBXaW5kIFJpdmVyIFN5c3RlbXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzgsNyArMzgsNyBAQAogI2RlZmluZSBfVElQQ19OQU1FX1RBQkxFX0gKIAogc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uOwotc3RydWN0IHRpcGNfcG9ydF9saXN0Oworc3RydWN0IHRpcGNfcGxpc3Q7CiAKIC8qCiAgKiBUSVBDIG5hbWUgdHlwZXMgcmVzZXJ2ZWQgZm9yIGludGVybmFsIFRJUEMgdXNlIChib3RoIGN1cnJlbnQgYW5kIHBsYW5uZWQpCkBAIC05NSwyNiArOTUsMzkgQEAKIAl1MzIgbG9jYWxfcHVibF9jb3VudDsKIH07CiAKLWV4dGVybiBzcGlubG9ja190IHRpcGNfbmFtZXRibF9sb2NrOwotZXh0ZXJuIHN0cnVjdCBuYW1lX3RhYmxlICp0aXBjX25hbWV0Ymw7Ci0KIGludCB0aXBjX25sX25hbWVfdGFibGVfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwogCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19uYW1ldGJsX2dldChjb25zdCB2b2lkICpyZXFfdGx2X2FyZWEsIGludCByZXFfdGx2X3NwYWNlKTsKLXUzMiB0aXBjX25hbWV0YmxfdHJhbnNsYXRlKHUzMiB0eXBlLCB1MzIgaW5zdGFuY2UsIHUzMiAqbm9kZSk7Ci1pbnQgdGlwY19uYW1ldGJsX21jX3RyYW5zbGF0ZSh1MzIgdHlwZSwgdTMyIGxvd2VyLCB1MzIgdXBwZXIsIHUzMiBsaW1pdCwKLQkJCSAgICAgIHN0cnVjdCB0aXBjX3BvcnRfbGlzdCAqZHBvcnRzKTsKLXN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX3B1Ymxpc2godTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHVwcGVyLAotCQkJCQkgdTMyIHNjb3BlLCB1MzIgcG9ydF9yZWYsIHUzMiBrZXkpOwotaW50IHRpcGNfbmFtZXRibF93aXRoZHJhdyh1MzIgdHlwZSwgdTMyIGxvd2VyLCB1MzIgcmVmLCB1MzIga2V5KTsKLXN0cnVjdCBwdWJsaWNhdGlvbiAqdGlwY19uYW1ldGJsX2luc2VydF9wdWJsKHUzMiB0eXBlLCB1MzIgbG93ZXIsIHUzMiB1cHBlciwKLQkJCQkJICAgICB1MzIgc2NvcGUsIHUzMiBub2RlLCB1MzIgcmVmLAordTMyIHRpcGNfbmFtZXRibF90cmFuc2xhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgdHlwZSwgdTMyIGluc3RhbmNlLCB1MzIgKm5vZGUpOworaW50IHRpcGNfbmFtZXRibF9tY190cmFuc2xhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgdHlwZSwgdTMyIGxvd2VyLCB1MzIgdXBwZXIsCisJCQkgICAgICB1MzIgbGltaXQsIHN0cnVjdCB0aXBjX3BsaXN0ICpkcG9ydHMpOworc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcHVibGlzaChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0eXBlLCB1MzIgbG93ZXIsCisJCQkJCSB1MzIgdXBwZXIsIHUzMiBzY29wZSwgdTMyIHBvcnRfcmVmLAorCQkJCQkgdTMyIGtleSk7CitpbnQgdGlwY19uYW1ldGJsX3dpdGhkcmF3KHN0cnVjdCBuZXQgKm5ldCwgdTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIHJlZiwKKwkJCSAgdTMyIGtleSk7CitzdHJ1Y3QgcHVibGljYXRpb24gKnRpcGNfbmFtZXRibF9pbnNlcnRfcHVibChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiB0eXBlLAorCQkJCQkgICAgIHUzMiBsb3dlciwgdTMyIHVwcGVyLCB1MzIgc2NvcGUsCisJCQkJCSAgICAgdTMyIG5vZGUsIHUzMiByZWYsIHUzMiBrZXkpOworc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1Ymwoc3RydWN0IG5ldCAqbmV0LCB1MzIgdHlwZSwKKwkJCQkJICAgICB1MzIgbG93ZXIsIHUzMiBub2RlLCB1MzIgcmVmLAogCQkJCQkgICAgIHUzMiBrZXkpOwotc3RydWN0IHB1YmxpY2F0aW9uICp0aXBjX25hbWV0YmxfcmVtb3ZlX3B1YmwodTMyIHR5cGUsIHUzMiBsb3dlciwgdTMyIG5vZGUsCi0JCQkJCSAgICAgdTMyIHJlZiwgdTMyIGtleSk7CiB2b2lkIHRpcGNfbmFtZXRibF9zdWJzY3JpYmUoc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzKTsKIHZvaWQgdGlwY19uYW1ldGJsX3Vuc3Vic2NyaWJlKHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqcyk7Ci1pbnQgdGlwY19uYW1ldGJsX2luaXQodm9pZCk7Ci12b2lkIHRpcGNfbmFtZXRibF9zdG9wKHZvaWQpOworaW50IHRpcGNfbmFtZXRibF9pbml0KHN0cnVjdCBuZXQgKm5ldCk7Cit2b2lkIHRpcGNfbmFtZXRibF9zdG9wKHN0cnVjdCBuZXQgKm5ldCk7CisKK3N0cnVjdCB0aXBjX3BsaXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdTMyIHBvcnQ7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgdGlwY19wbGlzdF9pbml0KHN0cnVjdCB0aXBjX3BsaXN0ICpwbCkKK3sKKwlJTklUX0xJU1RfSEVBRCgmcGwtPmxpc3QpOworCXBsLT5wb3J0ID0gMDsKK30KKwordm9pZCB0aXBjX3BsaXN0X3B1c2goc3RydWN0IHRpcGNfcGxpc3QgKnBsLCB1MzIgcG9ydCk7Cit1MzIgdGlwY19wbGlzdF9wb3Aoc3RydWN0IHRpcGNfcGxpc3QgKnBsKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uZXQuYyBiL25ldC90aXBjL25ldC5jCmluZGV4IGNmMTNkZjMuLmE1NGYzY2IgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25ldC5jCisrKyBiL25ldC90aXBjL25ldC5jCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSAic3Vic2NyLmgiCiAjaW5jbHVkZSAic29ja2V0LmgiCiAjaW5jbHVkZSAibm9kZS5oIgotI2luY2x1ZGUgImNvbmZpZy5oIgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdGlwY19ubF9uZXRfcG9saWN5W1RJUENfTkxBX05FVF9NQVggKyAxXSA9IHsKIAlbVElQQ19OTEFfTkVUX1VOU1BFQ10JPSB7IC50eXBlID0gTkxBX1VOU1BFQyB9LApAQCAtMTA4LDQ4ICsxMDcsNTQgQEAKICAqICAgICAtIEEgbG9jYWwgc3Bpbl9sb2NrIHByb3RlY3RpbmcgdGhlIHF1ZXVlIG9mIHN1YnNjcmliZXIgZXZlbnRzLgogKi8KIAotaW50IHRpcGNfbmV0X3N0YXJ0KHUzMiBhZGRyKQoraW50IHRpcGNfbmV0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpCiB7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOwogCWNoYXIgYWRkcl9zdHJpbmdbMTZdOwogCWludCByZXM7CiAKLQl0aXBjX293bl9hZGRyID0gYWRkcjsKLQl0aXBjX25hbWVkX3JlaW5pdCgpOwotCXRpcGNfc2tfcmVpbml0KCk7Ci0JcmVzID0gdGlwY19iY2xpbmtfaW5pdCgpOworCXRuLT5vd25fYWRkciA9IGFkZHI7CisJdGlwY19uYW1lZF9yZWluaXQobmV0KTsKKwl0aXBjX3NrX3JlaW5pdChuZXQpOworCXJlcyA9IHRpcGNfYmNsaW5rX2luaXQobmV0KTsKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwogCi0JdGlwY19uYW1ldGJsX3B1Ymxpc2goVElQQ19DRkdfU1JWLCB0aXBjX293bl9hZGRyLCB0aXBjX293bl9hZGRyLAotCQkJICAgICBUSVBDX1pPTkVfU0NPUEUsIDAsIHRpcGNfb3duX2FkZHIpOworCXRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgVElQQ19DRkdfU1JWLCB0bi0+b3duX2FkZHIsIHRuLT5vd25fYWRkciwKKwkJCSAgICAgVElQQ19aT05FX1NDT1BFLCAwLCB0bi0+b3duX2FkZHIpOwogCiAJcHJfaW5mbygiU3RhcnRlZCBpbiBuZXR3b3JrIG1vZGVcbiIpOwogCXByX2luZm8oIk93biBub2RlIGFkZHJlc3MgJXMsIG5ldHdvcmsgaWRlbnRpdHkgJXVcbiIsCi0JCXRpcGNfYWRkcl9zdHJpbmdfZmlsbChhZGRyX3N0cmluZywgdGlwY19vd25fYWRkciksIHRpcGNfbmV0X2lkKTsKKwkJdGlwY19hZGRyX3N0cmluZ19maWxsKGFkZHJfc3RyaW5nLCB0bi0+b3duX2FkZHIpLAorCQl0bi0+bmV0X2lkKTsKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCB0aXBjX25ldF9zdG9wKHZvaWQpCit2b2lkIHRpcGNfbmV0X3N0b3Aoc3RydWN0IG5ldCAqbmV0KQogewotCWlmICghdGlwY19vd25fYWRkcikKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CisKKwlpZiAoIXRuLT5vd25fYWRkcikKIAkJcmV0dXJuOwogCi0JdGlwY19uYW1ldGJsX3dpdGhkcmF3KFRJUENfQ0ZHX1NSViwgdGlwY19vd25fYWRkciwgMCwgdGlwY19vd25fYWRkcik7CisJdGlwY19uYW1ldGJsX3dpdGhkcmF3KG5ldCwgVElQQ19DRkdfU1JWLCB0bi0+b3duX2FkZHIsIDAsCisJCQkgICAgICB0bi0+b3duX2FkZHIpOwogCXJ0bmxfbG9jaygpOwotCXRpcGNfYmVhcmVyX3N0b3AoKTsKLQl0aXBjX2JjbGlua19zdG9wKCk7Ci0JdGlwY19ub2RlX3N0b3AoKTsKKwl0aXBjX2JlYXJlcl9zdG9wKG5ldCk7CisJdGlwY19iY2xpbmtfc3RvcChuZXQpOworCXRpcGNfbm9kZV9zdG9wKG5ldCk7CiAJcnRubF91bmxvY2soKTsKIAogCXByX2luZm8oIkxlZnQgbmV0d29yayBtb2RlXG4iKTsKIH0KIAotc3RhdGljIGludCBfX3RpcGNfbmxfYWRkX25ldChzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZykKK3N0YXRpYyBpbnQgX190aXBjX25sX2FkZF9uZXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGlwY19ubF9tc2cgKm1zZykKIHsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CiAJdm9pZCAqaGRyOwogCXN0cnVjdCBubGF0dHIgKmF0dHJzOwogCi0JaGRyID0gZ2VubG1zZ19wdXQobXNnLT5za2IsIG1zZy0+cG9ydGlkLCBtc2ctPnNlcSwgJnRpcGNfZ2VubF92Ml9mYW1pbHksCisJaGRyID0gZ2VubG1zZ19wdXQobXNnLT5za2IsIG1zZy0+cG9ydGlkLCBtc2ctPnNlcSwgJnRpcGNfZ2VubF9mYW1pbHksCiAJCQkgIE5MTV9GX01VTFRJLCBUSVBDX05MX05FVF9HRVQpOwogCWlmICghaGRyKQogCQlyZXR1cm4gLUVNU0dTSVpFOwpAQCAtMTU4LDcgKzE2Myw3IEBACiAJaWYgKCFhdHRycykKIAkJZ290byBtc2dfZnVsbDsKIAotCWlmIChubGFfcHV0X3UzMihtc2ctPnNrYiwgVElQQ19OTEFfTkVUX0lELCB0aXBjX25ldF9pZCkpCisJaWYgKG5sYV9wdXRfdTMyKG1zZy0+c2tiLCBUSVBDX05MQV9ORVRfSUQsIHRuLT5uZXRfaWQpKQogCQlnb3RvIGF0dHJfbXNnX2Z1bGw7CiAKIAlubGFfbmVzdF9lbmQobXNnLT5za2IsIGF0dHJzKTsKQEAgLTE3Niw2ICsxODEsNyBAQAogCiBpbnQgdGlwY19ubF9uZXRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CiAJaW50IGVycjsKIAlpbnQgZG9uZSA9IGNiLT5hcmdzWzBdOwogCXN0cnVjdCB0aXBjX25sX21zZyBtc2c7CkBAIC0xODcsNyArMTkzLDcgQEAKIAltc2cucG9ydGlkID0gTkVUTElOS19DQihjYi0+c2tiKS5wb3J0aWQ7CiAJbXNnLnNlcSA9IGNiLT5ubGgtPm5sbXNnX3NlcTsKIAotCWVyciA9IF9fdGlwY19ubF9hZGRfbmV0KCZtc2cpOworCWVyciA9IF9fdGlwY19ubF9hZGRfbmV0KG5ldCwgJm1zZyk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTIwMCw4ICsyMDYsMTAgQEAKIAogaW50IHRpcGNfbmxfbmV0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewotCWludCBlcnI7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOwogCXN0cnVjdCBubGF0dHIgKmF0dHJzW1RJUENfTkxBX05FVF9NQVggKyAxXTsKKwlpbnQgZXJyOwogCiAJaWYgKCFpbmZvLT5hdHRyc1tUSVBDX05MQV9ORVRdKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIxNiwyMSArMjI0LDIxIEBACiAJCXUzMiB2YWw7CiAKIAkJLyogQ2FuJ3QgY2hhbmdlIG5ldCBpZCBvbmNlIFRJUEMgaGFzIGpvaW5lZCBhIG5ldHdvcmsgKi8KLQkJaWYgKHRpcGNfb3duX2FkZHIpCisJCWlmICh0bi0+b3duX2FkZHIpCiAJCQlyZXR1cm4gLUVQRVJNOwogCiAJCXZhbCA9IG5sYV9nZXRfdTMyKGF0dHJzW1RJUENfTkxBX05FVF9JRF0pOwogCQlpZiAodmFsIDwgMSB8fCB2YWwgPiA5OTk5KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJdGlwY19uZXRfaWQgPSB2YWw7CisJCXRuLT5uZXRfaWQgPSB2YWw7CiAJfQogCiAJaWYgKGF0dHJzW1RJUENfTkxBX05FVF9BRERSXSkgewogCQl1MzIgYWRkcjsKIAogCQkvKiBDYW4ndCBjaGFuZ2UgbmV0IGFkZHIgb25jZSBUSVBDIGhhcyBqb2luZWQgYSBuZXR3b3JrICovCi0JCWlmICh0aXBjX293bl9hZGRyKQorCQlpZiAodG4tPm93bl9hZGRyKQogCQkJcmV0dXJuIC1FUEVSTTsKIAogCQlhZGRyID0gbmxhX2dldF91MzIoYXR0cnNbVElQQ19OTEFfTkVUX0FERFJdKTsKQEAgLTIzOCw3ICsyNDYsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJcnRubF9sb2NrKCk7Ci0JCXRpcGNfbmV0X3N0YXJ0KGFkZHIpOworCQl0aXBjX25ldF9zdGFydChuZXQsIGFkZHIpOwogCQlydG5sX3VubG9jaygpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbmV0LmggYi9uZXQvdGlwYy9uZXQuaAppbmRleCBhODFjMWI5Li43N2E3YTExIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uZXQuaAorKysgYi9uZXQvdGlwYy9uZXQuaApAQCAtMzksOSArMzksOSBAQAogCiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogCi1pbnQgdGlwY19uZXRfc3RhcnQodTMyIGFkZHIpOworaW50IHRpcGNfbmV0X3N0YXJ0KHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpOwogCi12b2lkIHRpcGNfbmV0X3N0b3Aodm9pZCk7Cit2b2lkIHRpcGNfbmV0X3N0b3Aoc3RydWN0IG5ldCAqbmV0KTsKIAogaW50IHRpcGNfbmxfbmV0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKIGludCB0aXBjX25sX25ldF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbyk7CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9uZXRsaW5rLmMgYi9uZXQvdGlwYy9uZXRsaW5rLmMKaW5kZXggYjg5MWUzOS4uN2Y2NDc1ZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvbmV0bGluay5jCisrKyBiL25ldC90aXBjL25ldGxpbmsuYwpAQCAtMzUsNyArMzUsNiBAQAogICovCiAKICNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAic29ja2V0LmgiCiAjaW5jbHVkZSAibmFtZV90YWJsZS5oIgogI2luY2x1ZGUgImJlYXJlci5oIgpAQCAtNDQsMzYgKzQzLDYgQEAKICNpbmNsdWRlICJuZXQuaCIKICNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CiAKLXN0YXRpYyBpbnQgaGFuZGxlX2NtZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQotewotCXN0cnVjdCBza19idWZmICpyZXBfYnVmOwotCXN0cnVjdCBubG1zZ2hkciAqcmVwX25saDsKLQlzdHJ1Y3Qgbmxtc2doZHIgKnJlcV9ubGggPSBpbmZvLT5ubGhkcjsKLQlzdHJ1Y3QgdGlwY19nZW5sbXNnaGRyICpyZXFfdXNlcmhkciA9IGluZm8tPnVzZXJoZHI7Ci0JaW50IGhkcl9zcGFjZSA9IG5sbXNnX3RvdGFsX3NpemUoR0VOTF9IRFJMRU4gKyBUSVBDX0dFTkxfSERSTEVOKTsKLQl1MTYgY21kOwotCi0JaWYgKChyZXFfdXNlcmhkci0+Y21kICYgMHhDMDAwKSAmJiAoIW5ldGxpbmtfY2FwYWJsZShza2IsIENBUF9ORVRfQURNSU4pKSkKLQkJY21kID0gVElQQ19DTURfTk9UX05FVF9BRE1JTjsKLQllbHNlCi0JCWNtZCA9IHJlcV91c2VyaGRyLT5jbWQ7Ci0KLQlyZXBfYnVmID0gdGlwY19jZmdfZG9fY21kKHJlcV91c2VyaGRyLT5kZXN0LCBjbWQsCi0JCQlubG1zZ19kYXRhKHJlcV9ubGgpICsgR0VOTF9IRFJMRU4gKyBUSVBDX0dFTkxfSERSTEVOLAotCQkJbmxtc2dfYXR0cmxlbihyZXFfbmxoLCBHRU5MX0hEUkxFTiArIFRJUENfR0VOTF9IRFJMRU4pLAotCQkJaGRyX3NwYWNlKTsKLQotCWlmIChyZXBfYnVmKSB7Ci0JCXNrYl9wdXNoKHJlcF9idWYsIGhkcl9zcGFjZSk7Ci0JCXJlcF9ubGggPSBubG1zZ19oZHIocmVwX2J1Zik7Ci0JCW1lbWNweShyZXBfbmxoLCByZXFfbmxoLCBoZHJfc3BhY2UpOwotCQlyZXBfbmxoLT5ubG1zZ19sZW4gPSByZXBfYnVmLT5sZW47Ci0JCWdlbmxtc2dfdW5pY2FzdCgmaW5pdF9uZXQsIHJlcF9idWYsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpOwotCX0KLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdGlwY19ubF9wb2xpY3lbVElQQ19OTEFfTUFYICsgMV0gPSB7CiAJW1RJUENfTkxBX1VOU1BFQ10JPSB7IC50eXBlID0gTkxBX1VOU1BFQywgfSwKIAlbVElQQ19OTEFfQkVBUkVSXQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVELCB9LApAQCAtODYsMzIgKzU1LDE2IEBACiAJW1RJUENfTkxBX05BTUVfVEFCTEVdCT0geyAudHlwZSA9IE5MQV9ORVNURUQsIH0KIH07CiAKLS8qIExlZ2FjeSBBU0NJSSBBUEkgKi8KLXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgdGlwY19nZW5sX2ZhbWlseSA9IHsKLQkuaWQJCT0gR0VOTF9JRF9HRU5FUkFURSwKLQkubmFtZQkJPSBUSVBDX0dFTkxfTkFNRSwKLQkudmVyc2lvbgk9IFRJUENfR0VOTF9WRVJTSU9OLAotCS5oZHJzaXplCT0gVElQQ19HRU5MX0hEUkxFTiwKLQkubWF4YXR0cgk9IDAsCi19OwotCi0vKiBMZWdhY3kgQVNDSUkgQVBJICovCi1zdGF0aWMgc3RydWN0IGdlbmxfb3BzIHRpcGNfZ2VubF9vcHNbXSA9IHsKLQl7Ci0JCS5jbWQJCT0gVElQQ19HRU5MX0NNRCwKLQkJLmRvaXQJCT0gaGFuZGxlX2NtZCwKLQl9LAotfTsKLQogLyogVXNlcnMgb2YgdGhlIGxlZ2FjeSBBUEkgKHRpcGMtY29uZmlnKSBjYW4ndCBoYW5kbGUgdGhhdCB3ZSBhZGQgb3BlcmF0aW9ucywKICAqIHNvIHdlIGhhdmUgYSBzZXBhcmF0ZSBnZW5sIGhhbmRsaW5nIGZvciB0aGUgbmV3IEFQSS4KICAqLwotc3RydWN0IGdlbmxfZmFtaWx5IHRpcGNfZ2VubF92Ml9mYW1pbHkgPSB7CitzdHJ1Y3QgZ2VubF9mYW1pbHkgdGlwY19nZW5sX2ZhbWlseSA9IHsKIAkuaWQJCT0gR0VOTF9JRF9HRU5FUkFURSwKIAkubmFtZQkJPSBUSVBDX0dFTkxfVjJfTkFNRSwKIAkudmVyc2lvbgk9IFRJUENfR0VOTF9WMl9WRVJTSU9OLAogCS5oZHJzaXplCT0gMCwKIAkubWF4YXR0cgk9IFRJUENfTkxBX01BWCwKKwkubmV0bnNvawk9IHRydWUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGdlbmxfb3BzIHRpcGNfZ2VubF92Ml9vcHNbXSA9IHsKQEAgLTE5Nyw5ICsxNTAsOSBAQAogCiBpbnQgdGlwY19ubG1zZ19wYXJzZShjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgc3RydWN0IG5sYXR0ciAqKiphdHRyKQogewotCXUzMiBtYXhhdHRyID0gdGlwY19nZW5sX3YyX2ZhbWlseS5tYXhhdHRyOworCXUzMiBtYXhhdHRyID0gdGlwY19nZW5sX2ZhbWlseS5tYXhhdHRyOwogCi0JKmF0dHIgPSB0aXBjX2dlbmxfdjJfZmFtaWx5LmF0dHJidWY7CisJKmF0dHIgPSB0aXBjX2dlbmxfZmFtaWx5LmF0dHJidWY7CiAJaWYgKCEqYXR0cikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCkBAIC0yMTAsMTMgKzE2Myw3IEBACiB7CiAJaW50IHJlczsKIAotCXJlcyA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5X3dpdGhfb3BzKCZ0aXBjX2dlbmxfZmFtaWx5LCB0aXBjX2dlbmxfb3BzKTsKLQlpZiAocmVzKSB7Ci0JCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIGxlZ2FjeSBpbnRlcmZhY2VcbiIpOwotCQlyZXR1cm4gcmVzOwotCX0KLQotCXJlcyA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5X3dpdGhfb3BzKCZ0aXBjX2dlbmxfdjJfZmFtaWx5LAorCXJlcyA9IGdlbmxfcmVnaXN0ZXJfZmFtaWx5X3dpdGhfb3BzKCZ0aXBjX2dlbmxfZmFtaWx5LAogCQkJCQkgICAgdGlwY19nZW5sX3YyX29wcyk7CiAJaWYgKHJlcykgewogCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBuZXRsaW5rIGludGVyZmFjZVxuIik7CkBAIC0yMjgsNSArMTc1LDQgQEAKIHZvaWQgdGlwY19uZXRsaW5rX3N0b3Aodm9pZCkKIHsKIAlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZ0aXBjX2dlbmxfZmFtaWx5KTsKLQlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZ0aXBjX2dlbmxfdjJfZmFtaWx5KTsKIH0KZGlmZiAtLWdpdCBhL25ldC90aXBjL25ldGxpbmsuaCBiL25ldC90aXBjL25ldGxpbmsuaAppbmRleCAxNDI1YzY4Li4wOGExZGI2IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9uZXRsaW5rLmgKKysrIGIvbmV0L3RpcGMvbmV0bGluay5oCkBAIC0zNiw3ICszNiw3IEBACiAjaWZuZGVmIF9USVBDX05FVExJTktfSAogI2RlZmluZSBfVElQQ19ORVRMSU5LX0gKIAotZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSB0aXBjX2dlbmxfdjJfZmFtaWx5OworZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSB0aXBjX2dlbmxfZmFtaWx5OwogaW50IHRpcGNfbmxtc2dfcGFyc2UoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsIHN0cnVjdCBubGF0dHIgKioqYnVmKTsKIAogc3RydWN0IHRpcGNfbmxfbXNnIHsKQEAgLTQ1LDQgKzQ1LDkgQEAKIAl1MzIgc2VxOwogfTsKIAoraW50IHRpcGNfbmV0bGlua19zdGFydCh2b2lkKTsKK2ludCB0aXBjX25ldGxpbmtfY29tcGF0X3N0YXJ0KHZvaWQpOwordm9pZCB0aXBjX25ldGxpbmtfc3RvcCh2b2lkKTsKK3ZvaWQgdGlwY19uZXRsaW5rX2NvbXBhdF9zdG9wKHZvaWQpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC90aXBjL25ldGxpbmtfY29tcGF0LmMgYi9uZXQvdGlwYy9uZXRsaW5rX2NvbXBhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOTEyMWUKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvdGlwYy9uZXRsaW5rX2NvbXBhdC5jCkBAIC0wLDAgKzEsMTA4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNCwgRXJpY3Nzb24gQUIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAiYmVhcmVyLmgiCisjaW5jbHVkZSAibGluay5oIgorI2luY2x1ZGUgIm5hbWVfdGFibGUuaCIKKyNpbmNsdWRlICJzb2NrZXQuaCIKKyNpbmNsdWRlICJub2RlLmgiCisjaW5jbHVkZSAibmV0LmgiCisjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L3RpcGNfY29uZmlnLmg+CisKKy8qIFRoZSBsZWdhY3kgQVBJIGhhZCBhbiBhcnRpZmljaWFsIG1lc3NhZ2UgbGVuZ3RoIGxpbWl0IGNhbGxlZAorICogVUxUUkFfU1RSSU5HX01BWF9MRU4uCisgKi8KKyNkZWZpbmUgVUxUUkFfU1RSSU5HX01BWF9MRU4gMzI3NjgKKworI2RlZmluZSBUSVBDX1NLQl9NQVggVExWX1NQQUNFKFVMVFJBX1NUUklOR19NQVhfTEVOKQorCisjZGVmaW5lIFJFUExZX1RSVU5DQVRFRCAiPHRydW5jYXRlZD5cbiIKKworc3RydWN0IHRpcGNfbmxfY29tcGF0X21zZyB7CisJdTE2IGNtZDsKKwlpbnQgcmVwX3R5cGU7CisJaW50IHJlcF9zaXplOworCWludCByZXFfdHlwZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqcmVwOworCXN0cnVjdCB0bHZfZGVzYyAqcmVxOworCXN0cnVjdCBzb2NrICpkc3Rfc2s7Cit9OworCitzdHJ1Y3QgdGlwY19ubF9jb21wYXRfY21kX2R1bXAgeworCWludCAoKmhlYWRlcikoc3RydWN0IHRpcGNfbmxfY29tcGF0X21zZyAqKTsKKwlpbnQgKCpkdW1waXQpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICopOworCWludCAoKmZvcm1hdCkoc3RydWN0IHRpcGNfbmxfY29tcGF0X21zZyAqbXNnLCBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMpOworfTsKKworc3RydWN0IHRpcGNfbmxfY29tcGF0X2NtZF9kb2l0IHsKKwlpbnQgKCpkb2l0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKTsKKwlpbnQgKCp0cmFuc2NvZGUpKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0aXBjX25sX2NvbXBhdF9tc2cgKm1zZyk7Cit9OworCitzdGF0aWMgaW50IHRpcGNfc2tiX3RhaWxyb29tKHN0cnVjdCBza19idWZmICpza2IpCit7CisJaW50IHRhaWxyb29tOworCWludCBsaW1pdDsKKworCXRhaWxyb29tID0gc2tiX3RhaWxyb29tKHNrYik7CisJbGltaXQgPSBUSVBDX1NLQl9NQVggLSBza2ItPmxlbjsKKworCWlmICh0YWlscm9vbSA8IGxpbWl0KQorCQlyZXR1cm4gdGFpbHJvb207CisKKwlyZXR1cm4gbGltaXQ7Cit9CisKK3N0YXRpYyBpbnQgdGlwY19hZGRfdGx2KHN0cnVjdCBza19idWZmICpza2IsIHUxNiB0eXBlLCB2b2lkICpkYXRhLCB1MTYgbGVuKQoreworCXN0cnVjdCB0bHZfZGVzYyAqdGx2ID0gKHN0cnVjdCB0bHZfZGVzYyAqKXNrYl90YWlsX3BvaW50ZXIoc2tiKTsKKworCWlmICh0aXBjX3NrYl90YWlscm9vbShza2IpIDwgVExWX1NQQUNFKGxlbikpCisJCXJldHVybiAtRU1TR1NJWkU7CisKKwlza2JfcHV0KHNrYiwgVExWX1NQQUNFKGxlbikpOworCXRsdi0+dGx2X3R5cGUgPSBodG9ucyh0eXBlKTsKKwl0bHYtPnRsdl9sZW4gPSBodG9ucyhUTFZfTEVOR1RIKGxlbikpOworCWlmIChsZW4gJiYgZGF0YSkKKwkJbWVtY3B5KFRMVl9EQVRBKHRsdiksIGRhdGEsIGxlbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGlwY190bHZfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdHlwZSkKK3sKKwlzdHJ1Y3QgdGx2X2Rlc2MgKnRsdiA9IChzdHJ1Y3QgdGx2X2Rlc2MgKilza2ItPmRhdGE7CisKKwlUTFZfU0VUX0xFTih0bHYsIDApOworCVRMVl9TRVRfVFlQRSh0bHYsIHR5cGUpOworCXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IHRsdl9kZXNjKSk7Cit9CisKK3N0YXRpYyBpbnQgdGlwY190bHZfc3ByaW50ZihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgbjsKKwl1MTYgbGVuOworCXUzMiByZW07CisJY2hhciAqYnVmOworCXN0cnVjdCB0bHZfZGVzYyAqdGx2OworCXZhX2xpc3QgYXJnczsKKworCXJlbSA9IHRpcGNfc2tiX3RhaWxyb29tKHNrYik7CisKKwl0bHYgPSAoc3RydWN0IHRsdl9kZXNjICopc2tiLT5kYXRhOworCWxlbiA9IFRMVl9HRVRfTEVOKHRsdik7CisJYnVmID0gVExWX0RBVEEodGx2KSArIGxlbjsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJbiA9IHZzY25wcmludGYoYnVmLCByZW0sIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJVExWX1NFVF9MRU4odGx2LCBuICsgbGVuKTsKKwlza2JfcHV0KHNrYiwgbik7CisKKwlyZXR1cm4gbjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICp0aXBjX3Rsdl9hbGxvYyhpbnQgc2l6ZSkKK3sKKwlpbnQgaGRyX2xlbjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOworCisJc2l6ZSA9IFRMVl9TUEFDRShzaXplKTsKKwloZHJfbGVuID0gbmxtc2dfdG90YWxfc2l6ZShHRU5MX0hEUkxFTiArIFRJUENfR0VOTF9IRFJMRU4pOworCisJYnVmID0gYWxsb2Nfc2tiKGhkcl9sZW4gKyBzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIE5VTEw7CisKKwlza2JfcmVzZXJ2ZShidWYsIGhkcl9sZW4pOworCisJcmV0dXJuIGJ1ZjsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICp0aXBjX2dldF9lcnJfdGx2KGNoYXIgKnN0cikKK3sKKwlpbnQgc3RyX2xlbiA9IHN0cmxlbihzdHIpICsgMTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOworCisJYnVmID0gdGlwY190bHZfYWxsb2MoVExWX1NQQUNFKHN0cl9sZW4pKTsKKwlpZiAoYnVmKQorCQl0aXBjX2FkZF90bHYoYnVmLCBUSVBDX1RMVl9FUlJPUl9TVFJJTkcsIHN0ciwgc3RyX2xlbik7CisKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgaW50IF9fdGlwY19ubF9jb21wYXRfZHVtcGl0KHN0cnVjdCB0aXBjX25sX2NvbXBhdF9jbWRfZHVtcCAqY21kLAorCQkJCSAgIHN0cnVjdCB0aXBjX25sX2NvbXBhdF9tc2cgKm1zZywKKwkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqYXJnKQoreworCWludCBsZW4gPSAwOworCWludCBlcnI7CisJc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5sbXNnOworCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrIGNiOworCisJbWVtc2V0KCZjYiwgMCwgc2l6ZW9mKGNiKSk7CisJY2IubmxoID0gKHN0cnVjdCBubG1zZ2hkciAqKWFyZy0+ZGF0YTsKKwljYi5za2IgPSBhcmc7CisKKwlidWYgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWJ1Zi0+c2sgPSBtc2ctPmRzdF9zazsKKworCWRvIHsKKwkJaW50IHJlbTsKKworCQlsZW4gPSAoKmNtZC0+ZHVtcGl0KShidWYsICZjYik7CisKKwkJbmxtc2dfZm9yX2VhY2hfbXNnKG5sbXNnLCBubG1zZ19oZHIoYnVmKSwgbGVuLCByZW0pIHsKKwkJCXN0cnVjdCBubGF0dHIgKiphdHRyczsKKworCQkJZXJyID0gdGlwY19ubG1zZ19wYXJzZShubG1zZywgJmF0dHJzKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnJfb3V0OworCisJCQllcnIgPSAoKmNtZC0+Zm9ybWF0KShtc2csIGF0dHJzKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBlcnJfb3V0OworCisJCQlpZiAodGlwY19za2JfdGFpbHJvb20obXNnLT5yZXApIDw9IDEpIHsKKwkJCQllcnIgPSAtRU1TR1NJWkU7CisJCQkJZ290byBlcnJfb3V0OworCQkJfQorCQl9CisKKwkJc2tiX3Jlc2V0X3RhaWxfcG9pbnRlcihidWYpOworCQlidWYtPmxlbiA9IDA7CisKKwl9IHdoaWxlIChsZW4pOworCisJZXJyID0gMDsKKworZXJyX291dDoKKwlrZnJlZV9za2IoYnVmKTsKKworCWlmIChlcnIgPT0gLUVNU0dTSVpFKSB7CisJCS8qIFRoZSBsZWdhY3kgQVBJIG9ubHkgY29uc2lkZXJlZCBtZXNzYWdlcyBmaWxsaW5nCisJCSAqICJVTFRSQV9TVFJJTkdfTUFYX0xFTiIgdG8gYmUgdHJ1bmNhdGVkLgorCQkgKi8KKwkJaWYgKChUSVBDX1NLQl9NQVggLSBtc2ctPnJlcC0+bGVuKSA8PSAxKSB7CisJCQljaGFyICp0YWlsID0gc2tiX3RhaWxfcG9pbnRlcihtc2ctPnJlcCk7CisKKwkJCWlmICgqdGFpbCAhPSAnXDAnKQorCQkJCXNwcmludGYodGFpbCAtIHNpemVvZihSRVBMWV9UUlVOQ0FURUQpIC0gMSwKKwkJCQkJUkVQTFlfVFJVTkNBVEVEKTsKKwkJfQorCisJCXJldHVybiAwOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdGlwY19ubF9jb21wYXRfZHVtcGl0KHN0cnVjdCB0aXBjX25sX2NvbXBhdF9jbWRfZHVtcCAqY21kLAorCQkJCSBzdHJ1Y3QgdGlwY19ubF9jb21wYXRfbXNnICptc2cpCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYXJnOworCisJaWYgKG1zZy0+cmVxX3R5cGUgJiYgIVRMVl9DSEVDS19UWVBFKG1zZy0+cmVxLCBtc2ctPnJlcV90eXBlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltc2ctPnJlcCA9IHRpcGNfdGx2X2FsbG9jKG1zZy0+cmVwX3NpemUpOworCWlmICghbXNnLT5yZXApCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKG1zZy0+cmVwX3R5cGUpCisJCXRpcGNfdGx2X2luaXQobXNnLT5yZXAsIG1zZy0+cmVwX3R5cGUpOworCisJaWYgKGNtZC0+aGVhZGVyKQorCQkoKmNtZC0+aGVhZGVyKShtc2cpOworCisJYXJnID0gbmxtc2dfbmV3KDAsIEdGUF9LRVJORUwpOworCWlmICghYXJnKSB7CisJCWtmcmVlX3NrYihtc2ctPnJlcCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWVyciA9IF9fdGlwY19ubF9jb21wYXRfZHVtcGl0KGNtZCwgbXNnLCBhcmcpOworCWlmIChlcnIpCisJCWtmcmVlX3NrYihtc2ctPnJlcCk7CisKKwlrZnJlZV9za2IoYXJnKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX190aXBjX25sX2NvbXBhdF9kb2l0KHN0cnVjdCB0aXBjX25sX2NvbXBhdF9jbWRfZG9pdCAqY21kLAorCQkJCSBzdHJ1Y3QgdGlwY19ubF9jb21wYXRfbXNnICptc2cpCit7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqZG9pdF9idWY7CisJc3RydWN0IHNrX2J1ZmYgKnRyYW5zX2J1ZjsKKwlzdHJ1Y3QgbmxhdHRyICoqYXR0cmJ1ZjsKKwlzdHJ1Y3QgZ2VubF9pbmZvIGluZm87CisKKwl0cmFuc19idWYgPSBhbGxvY19za2IoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghdHJhbnNfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVyciA9ICgqY21kLT50cmFuc2NvZGUpKHRyYW5zX2J1ZiwgbXNnKTsKKwlpZiAoZXJyKQorCQlnb3RvIHRyYW5zX291dDsKKworCWF0dHJidWYgPSBrbWFsbG9jKCh0aXBjX2dlbmxfZmFtaWx5Lm1heGF0dHIgKyAxKSAqCisJCQlzaXplb2Yoc3RydWN0IG5sYXR0ciAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhdHRyYnVmKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gdHJhbnNfb3V0OworCX0KKworCWVyciA9IG5sYV9wYXJzZShhdHRyYnVmLCB0aXBjX2dlbmxfZmFtaWx5Lm1heGF0dHIsCisJCQkoY29uc3Qgc3RydWN0IG5sYXR0ciAqKXRyYW5zX2J1Zi0+ZGF0YSwKKwkJCXRyYW5zX2J1Zi0+bGVuLCBOVUxMKTsKKwlpZiAoZXJyKQorCQlnb3RvIHBhcnNlX291dDsKKworCWRvaXRfYnVmID0gYWxsb2Nfc2tiKE5MTVNHX0dPT0RTSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRvaXRfYnVmKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gcGFyc2Vfb3V0OworCX0KKworCWRvaXRfYnVmLT5zayA9IG1zZy0+ZHN0X3NrOworCisJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOworCWluZm8uYXR0cnMgPSBhdHRyYnVmOworCisJZXJyID0gKCpjbWQtPmRvaXQpKGRvaXRfYnVmLCAmaW5mbyk7CisKKwlrZnJlZV9za2IoZG9pdF9idWYpOworcGFyc2Vfb3V0OgorCWtmcmVlKGF0dHJidWYpOwordHJhbnNfb3V0OgorCWtmcmVlX3NrYih0cmFuc19idWYpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB0aXBjX25sX2NvbXBhdF9kb2l0KHN0cnVjdCB0aXBjX25sX2NvbXBhdF9jbWRfZG9pdCAqY21kLAorCQkJICAgICAgIHN0cnVjdCB0aXBjX25sX2NvbXBhdF9tc2cgKm1zZykKK3sKKwlpbnQgZXJyOworCisJaWYgKG1zZy0+cmVxX3R5cGUgJiYgIVRMVl9DSEVDS19UWVBFKG1zZy0+cmVxLCBtc2ctPnJlcV90eXBlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnIgPSBfX3RpcGNfbmxfY29tcGF0X2RvaXQoY21kLCBtc2cpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBUaGUgbGVnYWN5IEFQSSBjb25zaWRlcmVkIGFuIGVtcHR5IG1lc3NhZ2UgYSBzdWNjZXNzIG1lc3NhZ2UgKi8KKwltc2ctPnJlcCA9IHRpcGNfdGx2X2FsbG9jKDApOworCWlmICghbXNnLT5yZXApCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGlwY19ubF9jb21wYXRfYmVhcmVyX2R1bXAoc3RydWN0IHRpcGNfbmxfY29tcGF0X21zZyAqbXNnLAorCQkJCSAgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycykKK3sKKwlzdHJ1Y3QgbmxhdHRyICpiZWFyZXJbVElQQ19OTEFfQkVBUkVSX01BWCArIDFdOworCisJbmxhX3BhcnNlX25lc3RlZChiZWFyZXIsIFRJUENfTkxBX0JFQVJFUl9NQVgsIGF0dHJzW1RJUENfTkxBX0JFQVJFUl0sCisJCQkgTlVMTCk7CisKKwlyZXR1cm4gdGlwY19hZGRfdGx2KG1zZy0+cmVwLCBUSVBDX1RMVl9CRUFSRVJfTkFNRSwKKwkJCSAgICBubGFfZGF0YShiZWFyZXJbVElQQ19OTEFfQkVBUkVSX05BTUVdKSwKKwkJCSAgICBubGFfbGVuKGJlYXJlcltUSVBDX05MQV9CRUFSRVJfTkFNRV0pKTsKK30KKworc3RhdGljIGludCB0aXBjX25sX2NvbXBhdF9iZWFyZXJfZW5hYmxlKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCB0aXBjX25sX2NvbXBhdF9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgbmxhdHRyICpwcm9wOworCXN0cnVjdCBubGF0dHIgKmJlYXJlcjsKKwlzdHJ1Y3QgdGlwY19iZWFyZXJfY29uZmlnICpiOworCisJYiA9IChzdHJ1Y3QgdGlwY19iZWFyZXJfY29uZmlnICopVExWX0RBVEEobXNnLT5yZXEpOworCisJYmVhcmVyID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBUSVBDX05MQV9CRUFSRVIpOworCWlmICghYmVhcmVyKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJaWYgKG5sYV9wdXRfc3RyaW5nKHNrYiwgVElQQ19OTEFfQkVBUkVSX05BTUUsIGItPm5hbWUpKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJaWYgKG5sYV9wdXRfdTMyKHNrYiwgVElQQ19OTEFfQkVBUkVSX0RPTUFJTiwgbnRvaGwoYi0+ZGlzY19kb21haW4pKSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCWlmIChudG9obChiLT5wcmlvcml0eSkgPD0gVElQQ19NQVhfTElOS19QUkkpIHsKKwkJcHJvcCA9IG5sYV9uZXN0X3N0YXJ0KHNrYiwgVElQQ19OTEFfQkVBUkVSX1BST1ApOworCQlpZiAoIXByb3ApCisJCQlyZXR1cm4gLUVNU0dTSVpFOworCQlpZiAobmxhX3B1dF91MzIoc2tiLCBUSVBDX05MQV9QUk9QX1BSSU8sIG50b2hsKGItPnByaW9yaXR5KSkpCisJCQlyZXR1cm4gLUVNU0dTSVpFOworCQlubGFfbmVzdF9lbmQoc2tiLCBwcm9wKTsKKwl9CisJbmxhX25lc3RfZW5kKHNrYiwgYmVhcmVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpcGNfbmxfY29tcGF0X2JlYXJlcl9kaXNhYmxlKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSBzdHJ1Y3QgdGlwY19ubF9jb21wYXRfbXNnICptc2cpCit7CisJY2hhciAqbmFtZTsKKwlzdHJ1Y3QgbmxhdHRyICpiZWFyZXI7CisKKwluYW1lID0gKGNoYXIgKilUTFZfREFUQShtc2ctPnJlcSk7CisKKwliZWFyZXIgPSBubGFfbmVzdF9zdGFydChza2IsIFRJUENfTkxBX0JFQVJFUik7CisJaWYgKCFiZWFyZXIpCisJCXJldHVybiAtRU1TR1NJWkU7CisKKwlpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBUSVBDX05MQV9CRUFSRVJfTkFNRSwgbmFtZSkpCisJCXJldHVybiAtRU1TR1NJWkU7CisKKwlubGFfbmVzdF9lbmQoc2tiLCBiZWFyZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHBlcmModTMyIGNvdW50LCB1MzIgdG90YWwpCit7CisJcmV0dXJuIChjb3VudCAqIDEwMCArICh0b3RhbCAvIDIpKSAvIHRvdGFsOworfQorCitzdGF0aWMgdm9pZCBfX2ZpbGxfYmNfbGlua19zdGF0KHN0cnVjdCB0aXBjX25sX2NvbXBhdF9tc2cgKm1zZywKKwkJCQlzdHJ1Y3QgbmxhdHRyICpwcm9wW10sIHN0cnVjdCBubGF0dHIgKnN0YXRzW10pCit7CisJdGlwY190bHZfc3ByaW50Zihtc2ctPnJlcCwgIiAgV2luZG93OiV1IHBhY2tldHNcbiIsCisJCQkgbmxhX2dldF91MzIocHJvcFtUSVBDX05MQV9QUk9QX1dJTl0pKTsKKworCXRpcGNfdGx2X3NwcmludGYobXNnLT5yZXAsCisJCQkgIiAgUlggcGFja2V0czoldSBmcmFnbWVudHM6JXUvJXUgYnVuZGxlczoldS8ldVxuIiwKKwkJCSBubGFfZ2V0X3UzMihzdGF0c1tUSVBDX05MQV9TVEFUU19SWF9JTkZPXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfUlhfRlJBR01FTlRTXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfUlhfRlJBR01FTlRFRF0pLAorCQkJIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX1JYX0JVTkRMRVNdKSwKKwkJCSBubGFfZ2V0X3UzMihzdGF0c1tUSVBDX05MQV9TVEFUU19SWF9CVU5ETEVEXSkpOworCisJdGlwY190bHZfc3ByaW50Zihtc2ctPnJlcCwKKwkJCSAiICBUWCBwYWNrZXRzOiV1IGZyYWdtZW50czoldS8ldSBidW5kbGVzOiV1LyV1XG4iLAorCQkJIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX1RYX0lORk9dKSwKKwkJCSBubGFfZ2V0X3UzMihzdGF0c1tUSVBDX05MQV9TVEFUU19UWF9GUkFHTUVOVFNdKSwKKwkJCSBubGFfZ2V0X3UzMihzdGF0c1tUSVBDX05MQV9TVEFUU19UWF9GUkFHTUVOVEVEXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfVFhfQlVORExFU10pLAorCQkJIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX1RYX0JVTkRMRURdKSk7CisKKwl0aXBjX3Rsdl9zcHJpbnRmKG1zZy0+cmVwLCAiICBSWCBuYWtzOiV1IGRlZnM6JXUgZHVwczoldVxuIiwKKwkJCSBubGFfZ2V0X3UzMihzdGF0c1tUSVBDX05MQV9TVEFUU19SWF9OQUNLU10pLAorCQkJIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX1JYX0RFRkVSUkVEXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfRFVQTElDQVRFU10pKTsKKworCXRpcGNfdGx2X3NwcmludGYobXNnLT5yZXAsICIgIFRYIG5ha3M6JXUgYWNrczoldSBkdXBzOiV1XG4iLAorCQkJIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX1RYX05BQ0tTXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfVFhfQUNLU10pLAorCQkJIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX1JFVFJBTlNNSVRURURdKSk7CisKKwl0aXBjX3Rsdl9zcHJpbnRmKG1zZy0+cmVwLAorCQkJICIgIENvbmdlc3Rpb24gbGluazoldSAgU2VuZCBxdWV1ZSBtYXg6JXUgYXZnOiV1IiwKKwkJCSBubGFfZ2V0X3UzMihzdGF0c1tUSVBDX05MQV9TVEFUU19MSU5LX0NPTkdTXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfTUFYX1FVRVVFXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfQVZHX1FVRVVFXSkpOworfQorCitzdGF0aWMgaW50IHRpcGNfbmxfY29tcGF0X2xpbmtfc3RhdF9kdW1wKHN0cnVjdCB0aXBjX25sX2NvbXBhdF9tc2cgKm1zZywKKwkJCQkJIHN0cnVjdCBubGF0dHIgKiphdHRycykKK3sKKwljaGFyICpuYW1lOworCXN0cnVjdCBubGF0dHIgKmxpbmtbVElQQ19OTEFfTElOS19NQVggKyAxXTsKKwlzdHJ1Y3QgbmxhdHRyICpwcm9wW1RJUENfTkxBX1BST1BfTUFYICsgMV07CisJc3RydWN0IG5sYXR0ciAqc3RhdHNbVElQQ19OTEFfU1RBVFNfTUFYICsgMV07CisKKwlubGFfcGFyc2VfbmVzdGVkKGxpbmssIFRJUENfTkxBX0xJTktfTUFYLCBhdHRyc1tUSVBDX05MQV9MSU5LXSwgTlVMTCk7CisKKwlubGFfcGFyc2VfbmVzdGVkKHByb3AsIFRJUENfTkxBX1BST1BfTUFYLCBsaW5rW1RJUENfTkxBX0xJTktfUFJPUF0sCisJCQkgTlVMTCk7CisKKwlubGFfcGFyc2VfbmVzdGVkKHN0YXRzLCBUSVBDX05MQV9TVEFUU19NQVgsIGxpbmtbVElQQ19OTEFfTElOS19TVEFUU10sCisJCQkgTlVMTCk7CisKKwluYW1lID0gKGNoYXIgKilUTFZfREFUQShtc2ctPnJlcSk7CisJaWYgKHN0cmNtcChuYW1lLCBubGFfZGF0YShsaW5rW1RJUENfTkxBX0xJTktfTkFNRV0pKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCXRpcGNfdGx2X3NwcmludGYobXNnLT5yZXAsICJcbkxpbmsgPCVzPlxuIiwKKwkJCSBubGFfZGF0YShsaW5rW1RJUENfTkxBX0xJTktfTkFNRV0pKTsKKworCWlmIChsaW5rW1RJUENfTkxBX0xJTktfQlJPQURDQVNUXSkgeworCQlfX2ZpbGxfYmNfbGlua19zdGF0KG1zZywgcHJvcCwgc3RhdHMpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAobGlua1tUSVBDX05MQV9MSU5LX0FDVElWRV0pCisJCXRpcGNfdGx2X3NwcmludGYobXNnLT5yZXAsICIgIEFDVElWRSIpOworCWVsc2UgaWYgKGxpbmtbVElQQ19OTEFfTElOS19VUF0pCisJCXRpcGNfdGx2X3NwcmludGYobXNnLT5yZXAsICIgIFNUQU5EQlkiKTsKKwllbHNlCisJCXRpcGNfdGx2X3NwcmludGYobXNnLT5yZXAsICIgIERFRlVOQ1QiKTsKKworCXRpcGNfdGx2X3NwcmludGYobXNnLT5yZXAsICIgIE1UVToldSAgUHJpb3JpdHk6JXUiLAorCQkJIG5sYV9nZXRfdTMyKGxpbmtbVElQQ19OTEFfTElOS19NVFVdKSwKKwkJCSBubGFfZ2V0X3UzMihwcm9wW1RJUENfTkxBX1BST1BfUFJJT10pKTsKKworCXRpcGNfdGx2X3NwcmludGYobXNnLT5yZXAsICIgIFRvbGVyYW5jZToldSBtcyAgV2luZG93OiV1IHBhY2tldHNcbiIsCisJCQkgbmxhX2dldF91MzIocHJvcFtUSVBDX05MQV9QUk9QX1RPTF0pLAorCQkJIG5sYV9nZXRfdTMyKHByb3BbVElQQ19OTEFfUFJPUF9XSU5dKSk7CisKKwl0aXBjX3Rsdl9zcHJpbnRmKG1zZy0+cmVwLAorCQkJICIgIFJYIHBhY2tldHM6JXUgZnJhZ21lbnRzOiV1LyV1IGJ1bmRsZXM6JXUvJXVcbiIsCisJCQkgbmxhX2dldF91MzIobGlua1tUSVBDX05MQV9MSU5LX1JYXSkgLQorCQkJIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX1JYX0lORk9dKSwKKwkJCSBubGFfZ2V0X3UzMihzdGF0c1tUSVBDX05MQV9TVEFUU19SWF9GUkFHTUVOVFNdKSwKKwkJCSBubGFfZ2V0X3UzMihzdGF0c1tUSVBDX05MQV9TVEFUU19SWF9GUkFHTUVOVEVEXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfUlhfQlVORExFU10pLAorCQkJIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX1JYX0JVTkRMRURdKSk7CisKKwl0aXBjX3Rsdl9zcHJpbnRmKG1zZy0+cmVwLAorCQkJICIgIFRYIHBhY2tldHM6JXUgZnJhZ21lbnRzOiV1LyV1IGJ1bmRsZXM6JXUvJXVcbiIsCisJCQkgbmxhX2dldF91MzIobGlua1tUSVBDX05MQV9MSU5LX1RYXSkgLQorCQkJIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX1RYX0lORk9dKSwKKwkJCSBubGFfZ2V0X3UzMihzdGF0c1tUSVBDX05MQV9TVEFUU19UWF9GUkFHTUVOVFNdKSwKKwkJCSBubGFfZ2V0X3UzMihzdGF0c1tUSVBDX05MQV9TVEFUU19UWF9GUkFHTUVOVEVEXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfVFhfQlVORExFU10pLAorCQkJIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX1RYX0JVTkRMRURdKSk7CisKKwl0aXBjX3Rsdl9zcHJpbnRmKG1zZy0+cmVwLAorCQkJICIgIFRYIHByb2ZpbGUgc2FtcGxlOiV1IHBhY2tldHMgIGF2ZXJhZ2U6JXUgb2N0ZXRzXG4iLAorCQkJIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX01TR19MRU5fQ05UXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfTVNHX0xFTl9UT1RdKSAvCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfTVNHX1BST0ZfVE9UXSkpOworCisJdGlwY190bHZfc3ByaW50Zihtc2ctPnJlcCwKKwkJCSAiICAwLTY0OiV1JSUgLTI1NjoldSUlIC0xMDI0OiV1JSUgLTQwOTY6JXUlJSAiLAorCQkJIHBlcmMobmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfTVNHX0xFTl9QMF0pLAorCQkJICAgICAgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfTVNHX1BST0ZfVE9UXSkpLAorCQkJIHBlcmMobmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfTVNHX0xFTl9QMV0pLAorCQkJICAgICAgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfTVNHX1BST0ZfVE9UXSkpLAorCQkJIHBlcmMobmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfTVNHX0xFTl9QMl0pLAorCQkJICAgICAgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfTVNHX1BST0ZfVE9UXSkpLAorCQkJIHBlcmMobmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfTVNHX0xFTl9QM10pLAorCQkJICAgICAgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfTVNHX1BST0ZfVE9UXSkpKTsKKworCXRpcGNfdGx2X3NwcmludGYobXNnLT5yZXAsICItMTYzODQ6JXUlJSAtMzI3Njg6JXUlJSAtNjYwMDA6JXUlJVxuIiwKKwkJCSBwZXJjKG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX01TR19MRU5fUDRdKSwKKwkJCSAgICAgIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX01TR19QUk9GX1RPVF0pKSwKKwkJCSBwZXJjKG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX01TR19MRU5fUDVdKSwKKwkJCSAgICAgIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX01TR19QUk9GX1RPVF0pKSwKKwkJCSBwZXJjKG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX01TR19MRU5fUDZdKSwKKwkJCSAgICAgIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX01TR19QUk9GX1RPVF0pKSk7CisKKwl0aXBjX3Rsdl9zcHJpbnRmKG1zZy0+cmVwLAorCQkJICIgIFJYIHN0YXRlczoldSBwcm9iZXM6JXUgbmFrczoldSBkZWZzOiV1IGR1cHM6JXVcbiIsCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfUlhfU1RBVEVTXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfUlhfUFJPQkVTXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfUlhfTkFDS1NdKSwKKwkJCSBubGFfZ2V0X3UzMihzdGF0c1tUSVBDX05MQV9TVEFUU19SWF9ERUZFUlJFRF0pLAorCQkJIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX0RVUExJQ0FURVNdKSk7CisKKwl0aXBjX3Rsdl9zcHJpbnRmKG1zZy0+cmVwLAorCQkJICIgIFRYIHN0YXRlczoldSBwcm9iZXM6JXUgbmFrczoldSBhY2tzOiV1IGR1cHM6JXVcbiIsCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfVFhfU1RBVEVTXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfVFhfUFJPQkVTXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfVFhfTkFDS1NdKSwKKwkJCSBubGFfZ2V0X3UzMihzdGF0c1tUSVBDX05MQV9TVEFUU19UWF9BQ0tTXSksCisJCQkgbmxhX2dldF91MzIoc3RhdHNbVElQQ19OTEFfU1RBVFNfUkVUUkFOU01JVFRFRF0pKTsKKworCXRpcGNfdGx2X3NwcmludGYobXNnLT5yZXAsCisJCQkgIiAgQ29uZ2VzdGlvbiBsaW5rOiV1ICBTZW5kIHF1ZXVlIG1heDoldSBhdmc6JXUiLAorCQkJIG5sYV9nZXRfdTMyKHN0YXRzW1RJUENfTkxBX1NUQVRTX0xJTktfQ09OR1NdKSwKKwkJCSBubGFfZ2V0X3UzMihzdGF0c1tUSVBDX05MQV9TVEFUU19NQVhfUVVFVUVdKSwKKwkJCSBubGFfZ2V0X3UzMihzdGF0c1tUSVBDX05MQV9TVEFUU19BVkdfUVVFVUVdKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aXBjX25sX2NvbXBhdF9saW5rX2R1bXAoc3RydWN0IHRpcGNfbmxfY29tcGF0X21zZyAqbXNnLAorCQkJCSAgICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMpCit7CisJc3RydWN0IG5sYXR0ciAqbGlua1tUSVBDX05MQV9MSU5LX01BWCArIDFdOworCXN0cnVjdCB0aXBjX2xpbmtfaW5mbyBsaW5rX2luZm87CisKKwlubGFfcGFyc2VfbmVzdGVkKGxpbmssIFRJUENfTkxBX0xJTktfTUFYLCBhdHRyc1tUSVBDX05MQV9MSU5LXSwgTlVMTCk7CisKKwlsaW5rX2luZm8uZGVzdCA9IG5sYV9nZXRfZmxhZyhsaW5rW1RJUENfTkxBX0xJTktfREVTVF0pOworCWxpbmtfaW5mby51cCA9IGh0b25sKG5sYV9nZXRfZmxhZyhsaW5rW1RJUENfTkxBX0xJTktfVVBdKSk7CisJc3RyY3B5KGxpbmtfaW5mby5zdHIsIG5sYV9kYXRhKGxpbmtbVElQQ19OTEFfTElOS19OQU1FXSkpOworCisJcmV0dXJuIHRpcGNfYWRkX3Rsdihtc2ctPnJlcCwgVElQQ19UTFZfTElOS19JTkZPLAorCQkJICAgICZsaW5rX2luZm8sIHNpemVvZihsaW5rX2luZm8pKTsKK30KKworc3RhdGljIGludCB0aXBjX25sX2NvbXBhdF9saW5rX3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgIHN0cnVjdCB0aXBjX25sX2NvbXBhdF9tc2cgKm1zZykKK3sKKwlzdHJ1Y3QgbmxhdHRyICpsaW5rOworCXN0cnVjdCBubGF0dHIgKnByb3A7CisJc3RydWN0IHRpcGNfbGlua19jb25maWcgKmxjOworCisJbGMgPSAoc3RydWN0IHRpcGNfbGlua19jb25maWcgKilUTFZfREFUQShtc2ctPnJlcSk7CisKKwlsaW5rID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBUSVBDX05MQV9MSU5LKTsKKwlpZiAoIWxpbmspCisJCXJldHVybiAtRU1TR1NJWkU7CisKKwlpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBUSVBDX05MQV9MSU5LX05BTUUsIGxjLT5uYW1lKSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCXByb3AgPSBubGFfbmVzdF9zdGFydChza2IsIFRJUENfTkxBX0xJTktfUFJPUCk7CisJaWYgKCFwcm9wKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJaWYgKG1zZy0+Y21kID09IFRJUENfQ01EX1NFVF9MSU5LX1BSSSkgeworCQlpZiAobmxhX3B1dF91MzIoc2tiLCBUSVBDX05MQV9QUk9QX1BSSU8sIG50b2hsKGxjLT52YWx1ZSkpKQorCQkJcmV0dXJuIC1FTVNHU0laRTsKKwl9IGVsc2UgaWYgKG1zZy0+Y21kID09IFRJUENfQ01EX1NFVF9MSU5LX1RPTCkgeworCQlpZiAobmxhX3B1dF91MzIoc2tiLCBUSVBDX05MQV9QUk9QX1RPTCwgbnRvaGwobGMtPnZhbHVlKSkpCisJCQlyZXR1cm4gLUVNU0dTSVpFOworCX0gZWxzZSBpZiAobXNnLT5jbWQgPT0gVElQQ19DTURfU0VUX0xJTktfV0lORE9XKSB7CisJCWlmIChubGFfcHV0X3UzMihza2IsIFRJUENfTkxBX1BST1BfV0lOLCBudG9obChsYy0+dmFsdWUpKSkKKwkJCXJldHVybiAtRU1TR1NJWkU7CisJfQorCisJbmxhX25lc3RfZW5kKHNrYiwgcHJvcCk7CisJbmxhX25lc3RfZW5kKHNrYiwgbGluayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aXBjX25sX2NvbXBhdF9saW5rX3Jlc2V0X3N0YXRzKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgIHN0cnVjdCB0aXBjX25sX2NvbXBhdF9tc2cgKm1zZykKK3sKKwljaGFyICpuYW1lOworCXN0cnVjdCBubGF0dHIgKmxpbms7CisKKwluYW1lID0gKGNoYXIgKilUTFZfREFUQShtc2ctPnJlcSk7CisKKwlsaW5rID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBUSVBDX05MQV9MSU5LKTsKKwlpZiAoIWxpbmspCisJCXJldHVybiAtRU1TR1NJWkU7CisKKwlpZiAobmxhX3B1dF9zdHJpbmcoc2tiLCBUSVBDX05MQV9MSU5LX05BTUUsIG5hbWUpKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJbmxhX25lc3RfZW5kKHNrYiwgbGluayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aXBjX25sX2NvbXBhdF9uYW1lX3RhYmxlX2R1bXBfaGVhZGVyKHN0cnVjdCB0aXBjX25sX2NvbXBhdF9tc2cgKm1zZykKK3sKKwlpbnQgaTsKKwl1MzIgZGVwdGg7CisJc3RydWN0IHRpcGNfbmFtZV90YWJsZV9xdWVyeSAqbnRxOworCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaGVhZGVyW10gPSB7CisJCSJUeXBlICAgICAgICIsCisJCSJMb3dlciAgICAgIFVwcGVyICAgICAgIiwKKwkJIlBvcnQgSWRlbnRpdHkgICAgICAgICAgICAgICIsCisJCSJQdWJsaWNhdGlvbiBTY29wZSIKKwl9OworCisJbnRxID0gKHN0cnVjdCB0aXBjX25hbWVfdGFibGVfcXVlcnkgKilUTFZfREFUQShtc2ctPnJlcSk7CisKKwlkZXB0aCA9IG50b2hsKG50cS0+ZGVwdGgpOworCisJaWYgKGRlcHRoID4gNCkKKwkJZGVwdGggPSA0OworCWZvciAoaSA9IDA7IGkgPCBkZXB0aDsgaSsrKQorCQl0aXBjX3Rsdl9zcHJpbnRmKG1zZy0+cmVwLCBoZWFkZXJbaV0pOworCXRpcGNfdGx2X3NwcmludGYobXNnLT5yZXAsICJcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGlwY19ubF9jb21wYXRfbmFtZV90YWJsZV9kdW1wKHN0cnVjdCB0aXBjX25sX2NvbXBhdF9tc2cgKm1zZywKKwkJCQkJICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMpCit7CisJY2hhciBwb3J0X3N0clsyN107CisJc3RydWN0IHRpcGNfbmFtZV90YWJsZV9xdWVyeSAqbnRxOworCXN0cnVjdCBubGF0dHIgKm50W1RJUENfTkxBX05BTUVfVEFCTEVfTUFYICsgMV07CisJc3RydWN0IG5sYXR0ciAqcHVibFtUSVBDX05MQV9QVUJMX01BWCArIDFdOworCXUzMiBub2RlLCBkZXB0aCwgdHlwZSwgbG93Ym91bmQsIHVwYm91bmQ7CisJc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzY29wZV9zdHJbXSA9IHsiIiwgIiB6b25lIiwgIiBjbHVzdGVyIiwKKwkJCQkJCSAiIG5vZGUifTsKKworCW5sYV9wYXJzZV9uZXN0ZWQobnQsIFRJUENfTkxBX05BTUVfVEFCTEVfTUFYLAorCQkJIGF0dHJzW1RJUENfTkxBX05BTUVfVEFCTEVdLCBOVUxMKTsKKworCW5sYV9wYXJzZV9uZXN0ZWQocHVibCwgVElQQ19OTEFfUFVCTF9NQVgsIG50W1RJUENfTkxBX05BTUVfVEFCTEVfUFVCTF0sCisJCQkgTlVMTCk7CisKKwludHEgPSAoc3RydWN0IHRpcGNfbmFtZV90YWJsZV9xdWVyeSAqKVRMVl9EQVRBKG1zZy0+cmVxKTsKKworCWRlcHRoID0gbnRvaGwobnRxLT5kZXB0aCk7CisJdHlwZSA9IG50b2hsKG50cS0+dHlwZSk7CisJbG93Ym91bmQgPSBudG9obChudHEtPmxvd2JvdW5kKTsKKwl1cGJvdW5kID0gbnRvaGwobnRxLT51cGJvdW5kKTsKKworCWlmICghKGRlcHRoICYgVElQQ19OVFFfQUxMVFlQRVMpICYmCisJICAgICh0eXBlICE9IG5sYV9nZXRfdTMyKHB1YmxbVElQQ19OTEFfUFVCTF9UWVBFXSkpKQorCQlyZXR1cm4gMDsKKwlpZiAobG93Ym91bmQgJiYgKGxvd2JvdW5kID4gbmxhX2dldF91MzIocHVibFtUSVBDX05MQV9QVUJMX1VQUEVSXSkpKQorCQlyZXR1cm4gMDsKKwlpZiAodXBib3VuZCAmJiAodXBib3VuZCA8IG5sYV9nZXRfdTMyKHB1YmxbVElQQ19OTEFfUFVCTF9MT1dFUl0pKSkKKwkJcmV0dXJuIDA7CisKKwl0aXBjX3Rsdl9zcHJpbnRmKG1zZy0+cmVwLCAiJS0xMHUgIiwKKwkJCSBubGFfZ2V0X3UzMihwdWJsW1RJUENfTkxBX1BVQkxfVFlQRV0pKTsKKworCWlmIChkZXB0aCA9PSAxKQorCQlnb3RvIG91dDsKKworCXRpcGNfdGx2X3NwcmludGYobXNnLT5yZXAsICIlLTEwdSAlLTEwdSAiLAorCQkJIG5sYV9nZXRfdTMyKHB1YmxbVElQQ19OTEFfUFVCTF9MT1dFUl0pLAorCQkJIG5sYV9nZXRfdTMyKHB1YmxbVElQQ19OTEFfUFVCTF9VUFBFUl0pKTsKKworCWlmIChkZXB0aCA9PSAyKQorCQlnb3RvIG91dDsKKworCW5vZGUgPSBubGFfZ2V0X3UzMihwdWJsW1RJUENfTkxBX1BVQkxfTk9ERV0pOworCXNwcmludGYocG9ydF9zdHIsICI8JXUuJXUuJXU6JXU+IiwgdGlwY196b25lKG5vZGUpLCB0aXBjX2NsdXN0ZXIobm9kZSksCisJCXRpcGNfbm9kZShub2RlKSwgbmxhX2dldF91MzIocHVibFtUSVBDX05MQV9QVUJMX1JFRl0pKTsKKwl0aXBjX3Rsdl9zcHJpbnRmKG1zZy0+cmVwLCAiJS0yNnMgIiwgcG9ydF9zdHIpOworCisJaWYgKGRlcHRoID09IDMpCisJCWdvdG8gb3V0OworCisJdGlwY190bHZfc3ByaW50Zihtc2ctPnJlcCwgIiUtMTB1ICVzIiwKKwkJCSBubGFfZ2V0X3UzMihwdWJsW1RJUENfTkxBX1BVQkxfUkVGXSksCisJCQkgc2NvcGVfc3RyW25sYV9nZXRfdTMyKHB1YmxbVElQQ19OTEFfUFVCTF9TQ09QRV0pXSk7CitvdXQ6CisJdGlwY190bHZfc3ByaW50Zihtc2ctPnJlcCwgIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX3RpcGNfbmxfY29tcGF0X3B1YmxfZHVtcChzdHJ1Y3QgdGlwY19ubF9jb21wYXRfbXNnICptc2csCisJCQkJICAgICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzKQoreworCXUzMiB0eXBlLCBsb3dlciwgdXBwZXI7CisJc3RydWN0IG5sYXR0ciAqcHVibFtUSVBDX05MQV9QVUJMX01BWCArIDFdOworCisJbmxhX3BhcnNlX25lc3RlZChwdWJsLCBUSVBDX05MQV9QVUJMX01BWCwgYXR0cnNbVElQQ19OTEFfUFVCTF0sIE5VTEwpOworCisJdHlwZSA9IG5sYV9nZXRfdTMyKHB1YmxbVElQQ19OTEFfUFVCTF9UWVBFXSk7CisJbG93ZXIgPSBubGFfZ2V0X3UzMihwdWJsW1RJUENfTkxBX1BVQkxfTE9XRVJdKTsKKwl1cHBlciA9IG5sYV9nZXRfdTMyKHB1YmxbVElQQ19OTEFfUFVCTF9VUFBFUl0pOworCisJaWYgKGxvd2VyID09IHVwcGVyKQorCQl0aXBjX3Rsdl9zcHJpbnRmKG1zZy0+cmVwLCAiIHsldSwldX0iLCB0eXBlLCBsb3dlcik7CisJZWxzZQorCQl0aXBjX3Rsdl9zcHJpbnRmKG1zZy0+cmVwLCAiIHsldSwldSwldX0iLCB0eXBlLCBsb3dlciwgdXBwZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGlwY19ubF9jb21wYXRfcHVibF9kdW1wKHN0cnVjdCB0aXBjX25sX2NvbXBhdF9tc2cgKm1zZywgdTMyIHNvY2spCit7CisJaW50IGVycjsKKwl2b2lkICpoZHI7CisJc3RydWN0IG5sYXR0ciAqbmVzdDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYXJnczsKKwlzdHJ1Y3QgdGlwY19ubF9jb21wYXRfY21kX2R1bXAgZHVtcDsKKworCWFyZ3MgPSBubG1zZ19uZXcoTkxNU0dfR09PRFNJWkUsIEdGUF9LRVJORUwpOworCWlmICghYXJncykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZHIgPSBnZW5sbXNnX3B1dChhcmdzLCAwLCAwLCAmdGlwY19nZW5sX2ZhbWlseSwgTkxNX0ZfTVVMVEksCisJCQkgIFRJUENfTkxfUFVCTF9HRVQpOworCisJbmVzdCA9IG5sYV9uZXN0X3N0YXJ0KGFyZ3MsIFRJUENfTkxBX1NPQ0spOworCWlmICghbmVzdCkgeworCQlrZnJlZV9za2IoYXJncyk7CisJCXJldHVybiAtRU1TR1NJWkU7CisJfQorCisJaWYgKG5sYV9wdXRfdTMyKGFyZ3MsIFRJUENfTkxBX1NPQ0tfUkVGLCBzb2NrKSkgeworCQlrZnJlZV9za2IoYXJncyk7CisJCXJldHVybiAtRU1TR1NJWkU7CisJfQorCisJbmxhX25lc3RfZW5kKGFyZ3MsIG5lc3QpOworCWdlbmxtc2dfZW5kKGFyZ3MsIGhkcik7CisKKwlkdW1wLmR1bXBpdCA9IHRpcGNfbmxfcHVibF9kdW1wOworCWR1bXAuZm9ybWF0ID0gX190aXBjX25sX2NvbXBhdF9wdWJsX2R1bXA7CisKKwllcnIgPSBfX3RpcGNfbmxfY29tcGF0X2R1bXBpdCgmZHVtcCwgbXNnLCBhcmdzKTsKKworCWtmcmVlX3NrYihhcmdzKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgdGlwY19ubF9jb21wYXRfc2tfZHVtcChzdHJ1Y3QgdGlwY19ubF9jb21wYXRfbXNnICptc2csCisJCQkJICBzdHJ1Y3QgbmxhdHRyICoqYXR0cnMpCit7CisJaW50IGVycjsKKwl1MzIgc29ja19yZWY7CisJc3RydWN0IG5sYXR0ciAqc29ja1tUSVBDX05MQV9TT0NLX01BWCArIDFdOworCisJbmxhX3BhcnNlX25lc3RlZChzb2NrLCBUSVBDX05MQV9TT0NLX01BWCwgYXR0cnNbVElQQ19OTEFfU09DS10sIE5VTEwpOworCisJc29ja19yZWYgPSBubGFfZ2V0X3UzMihzb2NrW1RJUENfTkxBX1NPQ0tfUkVGXSk7CisJdGlwY190bHZfc3ByaW50Zihtc2ctPnJlcCwgIiV1OiIsIHNvY2tfcmVmKTsKKworCWlmIChzb2NrW1RJUENfTkxBX1NPQ0tfQ09OXSkgeworCQl1MzIgbm9kZTsKKwkJc3RydWN0IG5sYXR0ciAqY29uW1RJUENfTkxBX0NPTl9NQVggKyAxXTsKKworCQlubGFfcGFyc2VfbmVzdGVkKGNvbiwgVElQQ19OTEFfQ09OX01BWCwgc29ja1tUSVBDX05MQV9TT0NLX0NPTl0sCisJCQkJIE5VTEwpOworCisJCW5vZGUgPSBubGFfZ2V0X3UzMihjb25bVElQQ19OTEFfQ09OX05PREVdKTsKKwkJdGlwY190bHZfc3ByaW50Zihtc2ctPnJlcCwgIiAgY29ubmVjdGVkIHRvIDwldS4ldS4ldToldT4iLAorCQkJCSB0aXBjX3pvbmUobm9kZSksCisJCQkJIHRpcGNfY2x1c3Rlcihub2RlKSwKKwkJCQkgdGlwY19ub2RlKG5vZGUpLAorCQkJCSBubGFfZ2V0X3UzMihjb25bVElQQ19OTEFfQ09OX1NPQ0tdKSk7CisKKwkJaWYgKGNvbltUSVBDX05MQV9DT05fRkxBR10pCisJCQl0aXBjX3Rsdl9zcHJpbnRmKG1zZy0+cmVwLCAiIHZpYSB7JXUsJXV9XG4iLAorCQkJCQkgbmxhX2dldF91MzIoY29uW1RJUENfTkxBX0NPTl9UWVBFXSksCisJCQkJCSBubGFfZ2V0X3UzMihjb25bVElQQ19OTEFfQ09OX0lOU1RdKSk7CisJCWVsc2UKKwkJCXRpcGNfdGx2X3NwcmludGYobXNnLT5yZXAsICJcbiIpOworCX0gZWxzZSBpZiAoc29ja1tUSVBDX05MQV9TT0NLX0hBU19QVUJMXSkgeworCQl0aXBjX3Rsdl9zcHJpbnRmKG1zZy0+cmVwLCAiIGJvdW5kIHRvIik7CisKKwkJZXJyID0gdGlwY19ubF9jb21wYXRfcHVibF9kdW1wKG1zZywgc29ja19yZWYpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJdGlwY190bHZfc3ByaW50Zihtc2ctPnJlcCwgIlxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aXBjX25sX2NvbXBhdF9tZWRpYV9kdW1wKHN0cnVjdCB0aXBjX25sX2NvbXBhdF9tc2cgKm1zZywKKwkJCQkgICAgIHN0cnVjdCBubGF0dHIgKiphdHRycykKK3sKKwlzdHJ1Y3QgbmxhdHRyICptZWRpYVtUSVBDX05MQV9NRURJQV9NQVggKyAxXTsKKworCW5sYV9wYXJzZV9uZXN0ZWQobWVkaWEsIFRJUENfTkxBX01FRElBX01BWCwgYXR0cnNbVElQQ19OTEFfTUVESUFdLAorCQkJIE5VTEwpOworCisJcmV0dXJuIHRpcGNfYWRkX3Rsdihtc2ctPnJlcCwgVElQQ19UTFZfTUVESUFfTkFNRSwKKwkJCSAgICBubGFfZGF0YShtZWRpYVtUSVBDX05MQV9NRURJQV9OQU1FXSksCisJCQkgICAgbmxhX2xlbihtZWRpYVtUSVBDX05MQV9NRURJQV9OQU1FXSkpOworfQorCitzdGF0aWMgaW50IHRpcGNfbmxfY29tcGF0X25vZGVfZHVtcChzdHJ1Y3QgdGlwY19ubF9jb21wYXRfbXNnICptc2csCisJCQkJICAgIHN0cnVjdCBubGF0dHIgKiphdHRycykKK3sKKwlzdHJ1Y3QgdGlwY19ub2RlX2luZm8gbm9kZV9pbmZvOworCXN0cnVjdCBubGF0dHIgKm5vZGVbVElQQ19OTEFfTk9ERV9NQVggKyAxXTsKKworCW5sYV9wYXJzZV9uZXN0ZWQobm9kZSwgVElQQ19OTEFfTk9ERV9NQVgsIGF0dHJzW1RJUENfTkxBX05PREVdLCBOVUxMKTsKKworCW5vZGVfaW5mby5hZGRyID0gaHRvbmwobmxhX2dldF91MzIobm9kZVtUSVBDX05MQV9OT0RFX0FERFJdKSk7CisJbm9kZV9pbmZvLnVwID0gaHRvbmwobmxhX2dldF9mbGFnKG5vZGVbVElQQ19OTEFfTk9ERV9VUF0pKTsKKworCXJldHVybiB0aXBjX2FkZF90bHYobXNnLT5yZXAsIFRJUENfVExWX05PREVfSU5GTywgJm5vZGVfaW5mbywKKwkJCSAgICBzaXplb2Yobm9kZV9pbmZvKSk7Cit9CisKK3N0YXRpYyBpbnQgdGlwY19ubF9jb21wYXRfbmV0X3NldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgc3RydWN0IHRpcGNfbmxfY29tcGF0X21zZyAqbXNnKQoreworCXUzMiB2YWw7CisJc3RydWN0IG5sYXR0ciAqbmV0OworCisJdmFsID0gbnRvaGwoKihfX2JlMzIgKilUTFZfREFUQShtc2ctPnJlcSkpOworCisJbmV0ID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBUSVBDX05MQV9ORVQpOworCWlmICghbmV0KQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJaWYgKG1zZy0+Y21kID09IFRJUENfQ01EX1NFVF9OT0RFX0FERFIpIHsKKwkJaWYgKG5sYV9wdXRfdTMyKHNrYiwgVElQQ19OTEFfTkVUX0FERFIsIHZhbCkpCisJCQlyZXR1cm4gLUVNU0dTSVpFOworCX0gZWxzZSBpZiAobXNnLT5jbWQgPT0gVElQQ19DTURfU0VUX05FVElEKSB7CisJCWlmIChubGFfcHV0X3UzMihza2IsIFRJUENfTkxBX05FVF9JRCwgdmFsKSkKKwkJCXJldHVybiAtRU1TR1NJWkU7CisJfQorCW5sYV9uZXN0X2VuZChza2IsIG5ldCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aXBjX25sX2NvbXBhdF9uZXRfZHVtcChzdHJ1Y3QgdGlwY19ubF9jb21wYXRfbXNnICptc2csCisJCQkJICAgc3RydWN0IG5sYXR0ciAqKmF0dHJzKQoreworCV9fYmUzMiBpZDsKKwlzdHJ1Y3QgbmxhdHRyICpuZXRbVElQQ19OTEFfTkVUX01BWCArIDFdOworCisJbmxhX3BhcnNlX25lc3RlZChuZXQsIFRJUENfTkxBX05FVF9NQVgsIGF0dHJzW1RJUENfTkxBX05FVF0sIE5VTEwpOworCWlkID0gaHRvbmwobmxhX2dldF91MzIobmV0W1RJUENfTkxBX05FVF9JRF0pKTsKKworCXJldHVybiB0aXBjX2FkZF90bHYobXNnLT5yZXAsIFRJUENfVExWX1VOU0lHTkVELCAmaWQsIHNpemVvZihpZCkpOworfQorCitzdGF0aWMgaW50IHRpcGNfY21kX3Nob3dfc3RhdHNfY29tcGF0KHN0cnVjdCB0aXBjX25sX2NvbXBhdF9tc2cgKm1zZykKK3sKKwltc2ctPnJlcCA9IHRpcGNfdGx2X2FsbG9jKFVMVFJBX1NUUklOR19NQVhfTEVOKTsKKwlpZiAoIW1zZy0+cmVwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRpcGNfdGx2X2luaXQobXNnLT5yZXAsIFRJUENfVExWX1VMVFJBX1NUUklORyk7CisJdGlwY190bHZfc3ByaW50Zihtc2ctPnJlcCwgIlRJUEMgdmVyc2lvbiAiIFRJUENfTU9EX1ZFUiAiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRpcGNfbmxfY29tcGF0X2hhbmRsZShzdHJ1Y3QgdGlwY19ubF9jb21wYXRfbXNnICptc2cpCit7CisJc3RydWN0IHRpcGNfbmxfY29tcGF0X2NtZF9kdW1wIGR1bXA7CisJc3RydWN0IHRpcGNfbmxfY29tcGF0X2NtZF9kb2l0IGRvaXQ7CisKKwltZW1zZXQoJmR1bXAsIDAsIHNpemVvZihkdW1wKSk7CisJbWVtc2V0KCZkb2l0LCAwLCBzaXplb2YoZG9pdCkpOworCisJc3dpdGNoIChtc2ctPmNtZCkgeworCWNhc2UgVElQQ19DTURfTk9PUDoKKwkJbXNnLT5yZXAgPSB0aXBjX3Rsdl9hbGxvYygwKTsKKwkJaWYgKCFtc2ctPnJlcCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gMDsKKwljYXNlIFRJUENfQ01EX0dFVF9CRUFSRVJfTkFNRVM6CisJCW1zZy0+cmVwX3NpemUgPSBNQVhfQkVBUkVSUyAqIFRMVl9TUEFDRShUSVBDX01BWF9CRUFSRVJfTkFNRSk7CisJCWR1bXAuZHVtcGl0ID0gdGlwY19ubF9iZWFyZXJfZHVtcDsKKwkJZHVtcC5mb3JtYXQgPSB0aXBjX25sX2NvbXBhdF9iZWFyZXJfZHVtcDsKKwkJcmV0dXJuIHRpcGNfbmxfY29tcGF0X2R1bXBpdCgmZHVtcCwgbXNnKTsKKwljYXNlIFRJUENfQ01EX0VOQUJMRV9CRUFSRVI6CisJCW1zZy0+cmVxX3R5cGUgPSBUSVBDX1RMVl9CRUFSRVJfQ09ORklHOworCQlkb2l0LmRvaXQgPSB0aXBjX25sX2JlYXJlcl9lbmFibGU7CisJCWRvaXQudHJhbnNjb2RlID0gdGlwY19ubF9jb21wYXRfYmVhcmVyX2VuYWJsZTsKKwkJcmV0dXJuIHRpcGNfbmxfY29tcGF0X2RvaXQoJmRvaXQsIG1zZyk7CisJY2FzZSBUSVBDX0NNRF9ESVNBQkxFX0JFQVJFUjoKKwkJbXNnLT5yZXFfdHlwZSA9IFRJUENfVExWX0JFQVJFUl9OQU1FOworCQlkb2l0LmRvaXQgPSB0aXBjX25sX2JlYXJlcl9kaXNhYmxlOworCQlkb2l0LnRyYW5zY29kZSA9IHRpcGNfbmxfY29tcGF0X2JlYXJlcl9kaXNhYmxlOworCQlyZXR1cm4gdGlwY19ubF9jb21wYXRfZG9pdCgmZG9pdCwgbXNnKTsKKwljYXNlIFRJUENfQ01EX1NIT1dfTElOS19TVEFUUzoKKwkJbXNnLT5yZXFfdHlwZSA9IFRJUENfVExWX0xJTktfTkFNRTsKKwkJbXNnLT5yZXBfc2l6ZSA9IFVMVFJBX1NUUklOR19NQVhfTEVOOworCQltc2ctPnJlcF90eXBlID0gVElQQ19UTFZfVUxUUkFfU1RSSU5HOworCQlkdW1wLmR1bXBpdCA9IHRpcGNfbmxfbGlua19kdW1wOworCQlkdW1wLmZvcm1hdCA9IHRpcGNfbmxfY29tcGF0X2xpbmtfc3RhdF9kdW1wOworCQlyZXR1cm4gdGlwY19ubF9jb21wYXRfZHVtcGl0KCZkdW1wLCBtc2cpOworCWNhc2UgVElQQ19DTURfR0VUX0xJTktTOgorCQltc2ctPnJlcV90eXBlID0gVElQQ19UTFZfTkVUX0FERFI7CisJCW1zZy0+cmVwX3NpemUgPSBVTFRSQV9TVFJJTkdfTUFYX0xFTjsKKwkJZHVtcC5kdW1waXQgPSB0aXBjX25sX2xpbmtfZHVtcDsKKwkJZHVtcC5mb3JtYXQgPSB0aXBjX25sX2NvbXBhdF9saW5rX2R1bXA7CisJCXJldHVybiB0aXBjX25sX2NvbXBhdF9kdW1waXQoJmR1bXAsIG1zZyk7CisJY2FzZSBUSVBDX0NNRF9TRVRfTElOS19UT0w6CisJY2FzZSBUSVBDX0NNRF9TRVRfTElOS19QUkk6CisJY2FzZSBUSVBDX0NNRF9TRVRfTElOS19XSU5ET1c6CisJCW1zZy0+cmVxX3R5cGUgPSAgVElQQ19UTFZfTElOS19DT05GSUc7CisJCWRvaXQuZG9pdCA9IHRpcGNfbmxfbGlua19zZXQ7CisJCWRvaXQudHJhbnNjb2RlID0gdGlwY19ubF9jb21wYXRfbGlua19zZXQ7CisJCXJldHVybiB0aXBjX25sX2NvbXBhdF9kb2l0KCZkb2l0LCBtc2cpOworCWNhc2UgVElQQ19DTURfUkVTRVRfTElOS19TVEFUUzoKKwkJbXNnLT5yZXFfdHlwZSA9IFRJUENfVExWX0xJTktfTkFNRTsKKwkJZG9pdC5kb2l0ID0gdGlwY19ubF9saW5rX3Jlc2V0X3N0YXRzOworCQlkb2l0LnRyYW5zY29kZSA9IHRpcGNfbmxfY29tcGF0X2xpbmtfcmVzZXRfc3RhdHM7CisJCXJldHVybiB0aXBjX25sX2NvbXBhdF9kb2l0KCZkb2l0LCBtc2cpOworCWNhc2UgVElQQ19DTURfU0hPV19OQU1FX1RBQkxFOgorCQltc2ctPnJlcV90eXBlID0gVElQQ19UTFZfTkFNRV9UQkxfUVVFUlk7CisJCW1zZy0+cmVwX3NpemUgPSBVTFRSQV9TVFJJTkdfTUFYX0xFTjsKKwkJbXNnLT5yZXBfdHlwZSA9IFRJUENfVExWX1VMVFJBX1NUUklORzsKKwkJZHVtcC5oZWFkZXIgPSB0aXBjX25sX2NvbXBhdF9uYW1lX3RhYmxlX2R1bXBfaGVhZGVyOworCQlkdW1wLmR1bXBpdCA9IHRpcGNfbmxfbmFtZV90YWJsZV9kdW1wOworCQlkdW1wLmZvcm1hdCA9IHRpcGNfbmxfY29tcGF0X25hbWVfdGFibGVfZHVtcDsKKwkJcmV0dXJuIHRpcGNfbmxfY29tcGF0X2R1bXBpdCgmZHVtcCwgbXNnKTsKKwljYXNlIFRJUENfQ01EX1NIT1dfUE9SVFM6CisJCW1zZy0+cmVwX3NpemUgPSBVTFRSQV9TVFJJTkdfTUFYX0xFTjsKKwkJbXNnLT5yZXBfdHlwZSA9IFRJUENfVExWX1VMVFJBX1NUUklORzsKKwkJZHVtcC5kdW1waXQgPSB0aXBjX25sX3NrX2R1bXA7CisJCWR1bXAuZm9ybWF0ID0gdGlwY19ubF9jb21wYXRfc2tfZHVtcDsKKwkJcmV0dXJuIHRpcGNfbmxfY29tcGF0X2R1bXBpdCgmZHVtcCwgbXNnKTsKKwljYXNlIFRJUENfQ01EX0dFVF9NRURJQV9OQU1FUzoKKwkJbXNnLT5yZXBfc2l6ZSA9IE1BWF9NRURJQSAqIFRMVl9TUEFDRShUSVBDX01BWF9NRURJQV9OQU1FKTsKKwkJZHVtcC5kdW1waXQgPSB0aXBjX25sX21lZGlhX2R1bXA7CisJCWR1bXAuZm9ybWF0ID0gdGlwY19ubF9jb21wYXRfbWVkaWFfZHVtcDsKKwkJcmV0dXJuIHRpcGNfbmxfY29tcGF0X2R1bXBpdCgmZHVtcCwgbXNnKTsKKwljYXNlIFRJUENfQ01EX0dFVF9OT0RFUzoKKwkJbXNnLT5yZXBfc2l6ZSA9IFVMVFJBX1NUUklOR19NQVhfTEVOOworCQlkdW1wLmR1bXBpdCA9IHRpcGNfbmxfbm9kZV9kdW1wOworCQlkdW1wLmZvcm1hdCA9IHRpcGNfbmxfY29tcGF0X25vZGVfZHVtcDsKKwkJcmV0dXJuIHRpcGNfbmxfY29tcGF0X2R1bXBpdCgmZHVtcCwgbXNnKTsKKwljYXNlIFRJUENfQ01EX1NFVF9OT0RFX0FERFI6CisJCW1zZy0+cmVxX3R5cGUgPSBUSVBDX1RMVl9ORVRfQUREUjsKKwkJZG9pdC5kb2l0ID0gdGlwY19ubF9uZXRfc2V0OworCQlkb2l0LnRyYW5zY29kZSA9IHRpcGNfbmxfY29tcGF0X25ldF9zZXQ7CisJCXJldHVybiB0aXBjX25sX2NvbXBhdF9kb2l0KCZkb2l0LCBtc2cpOworCWNhc2UgVElQQ19DTURfU0VUX05FVElEOgorCQltc2ctPnJlcV90eXBlID0gVElQQ19UTFZfVU5TSUdORUQ7CisJCWRvaXQuZG9pdCA9IHRpcGNfbmxfbmV0X3NldDsKKwkJZG9pdC50cmFuc2NvZGUgPSB0aXBjX25sX2NvbXBhdF9uZXRfc2V0OworCQlyZXR1cm4gdGlwY19ubF9jb21wYXRfZG9pdCgmZG9pdCwgbXNnKTsKKwljYXNlIFRJUENfQ01EX0dFVF9ORVRJRDoKKwkJbXNnLT5yZXBfc2l6ZSA9IHNpemVvZih1MzIpOworCQlkdW1wLmR1bXBpdCA9IHRpcGNfbmxfbmV0X2R1bXA7CisJCWR1bXAuZm9ybWF0ID0gdGlwY19ubF9jb21wYXRfbmV0X2R1bXA7CisJCXJldHVybiB0aXBjX25sX2NvbXBhdF9kdW1waXQoJmR1bXAsIG1zZyk7CisJY2FzZSBUSVBDX0NNRF9TSE9XX1NUQVRTOgorCQlyZXR1cm4gdGlwY19jbWRfc2hvd19zdGF0c19jb21wYXQobXNnKTsKKwl9CisKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgdGlwY19ubF9jb21wYXRfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCWludCBlcnI7CisJaW50IGxlbjsKKwlzdHJ1Y3QgdGlwY19ubF9jb21wYXRfbXNnIG1zZzsKKwlzdHJ1Y3Qgbmxtc2doZHIgKnJlcV9ubGg7CisJc3RydWN0IG5sbXNnaGRyICpyZXBfbmxoOworCXN0cnVjdCB0aXBjX2dlbmxtc2doZHIgKnJlcV91c2VyaGRyID0gaW5mby0+dXNlcmhkcjsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBnZW5sX2luZm9fbmV0KGluZm8pOworCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKworCXJlcV9ubGggPSAoc3RydWN0IG5sbXNnaGRyICopc2tiLT5kYXRhOworCW1zZy5yZXEgPSBubG1zZ19kYXRhKHJlcV9ubGgpICsgR0VOTF9IRFJMRU4gKyBUSVBDX0dFTkxfSERSTEVOOworCW1zZy5jbWQgPSByZXFfdXNlcmhkci0+Y21kOworCW1zZy5kc3Rfc2sgPSBpbmZvLT5kc3Rfc2s7CisKKwlpZiAoKG1zZy5jbWQgJiAweEMwMDApICYmICghbmV0bGlua19uZXRfY2FwYWJsZShza2IsIENBUF9ORVRfQURNSU4pKSkgeworCQltc2cucmVwID0gdGlwY19nZXRfZXJyX3RsdihUSVBDX0NGR19OT1RfTkVUX0FETUlOKTsKKwkJZXJyID0gLUVBQ0NFUzsKKwkJZ290byBzZW5kOworCX0KKworCWxlbiA9IG5sbXNnX2F0dHJsZW4ocmVxX25saCwgR0VOTF9IRFJMRU4gKyBUSVBDX0dFTkxfSERSTEVOKTsKKwlpZiAoVExWX0dFVF9MRU4obXNnLnJlcSkgJiYgIVRMVl9PSyhtc2cucmVxLCBsZW4pKSB7CisJCW1zZy5yZXAgPSB0aXBjX2dldF9lcnJfdGx2KFRJUENfQ0ZHX05PVF9TVVBQT1JURUQpOworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBzZW5kOworCX0KKworCWVyciA9IHRpcGNfbmxfY29tcGF0X2hhbmRsZSgmbXNnKTsKKwlpZiAoZXJyID09IC1FT1BOT1RTVVBQKQorCQltc2cucmVwID0gdGlwY19nZXRfZXJyX3RsdihUSVBDX0NGR19OT1RfU1VQUE9SVEVEKTsKKwllbHNlIGlmIChlcnIgPT0gLUVJTlZBTCkKKwkJbXNnLnJlcCA9IHRpcGNfZ2V0X2Vycl90bHYoVElQQ19DRkdfVExWX0VSUk9SKTsKK3NlbmQ6CisJaWYgKCFtc2cucmVwKQorCQlyZXR1cm4gZXJyOworCisJbGVuID0gbmxtc2dfdG90YWxfc2l6ZShHRU5MX0hEUkxFTiArIFRJUENfR0VOTF9IRFJMRU4pOworCXNrYl9wdXNoKG1zZy5yZXAsIGxlbik7CisJcmVwX25saCA9IG5sbXNnX2hkcihtc2cucmVwKTsKKwltZW1jcHkocmVwX25saCwgaW5mby0+bmxoZHIsIGxlbik7CisJcmVwX25saC0+bmxtc2dfbGVuID0gbXNnLnJlcC0+bGVuOworCWdlbmxtc2dfdW5pY2FzdChuZXQsIG1zZy5yZXAsIE5FVExJTktfQ0Ioc2tiKS5wb3J0aWQpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSB0aXBjX2dlbmxfY29tcGF0X2ZhbWlseSA9IHsKKwkuaWQJCT0gR0VOTF9JRF9HRU5FUkFURSwKKwkubmFtZQkJPSBUSVBDX0dFTkxfTkFNRSwKKwkudmVyc2lvbgk9IFRJUENfR0VOTF9WRVJTSU9OLAorCS5oZHJzaXplCT0gVElQQ19HRU5MX0hEUkxFTiwKKwkubWF4YXR0cgk9IDAsCisJLm5ldG5zb2sJPSB0cnVlLAorfTsKKworc3RhdGljIHN0cnVjdCBnZW5sX29wcyB0aXBjX2dlbmxfY29tcGF0X29wc1tdID0geworCXsKKwkJLmNtZAkJPSBUSVBDX0dFTkxfQ01ELAorCQkuZG9pdAkJPSB0aXBjX25sX2NvbXBhdF9yZWN2LAorCX0sCit9OworCitpbnQgdGlwY19uZXRsaW5rX2NvbXBhdF9zdGFydCh2b2lkKQoreworCWludCByZXM7CisKKwlyZXMgPSBnZW5sX3JlZ2lzdGVyX2ZhbWlseV93aXRoX29wcygmdGlwY19nZW5sX2NvbXBhdF9mYW1pbHksCisJCQkJCSAgICB0aXBjX2dlbmxfY29tcGF0X29wcyk7CisJaWYgKHJlcykgeworCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBsZWdhY3kgY29tcGF0IGludGVyZmFjZVxuIik7CisJCXJldHVybiByZXM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdGlwY19uZXRsaW5rX2NvbXBhdF9zdG9wKHZvaWQpCit7CisJZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmdGlwY19nZW5sX2NvbXBhdF9mYW1pbHkpOworfQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvbm9kZS5jIGIvbmV0L3RpcGMvbm9kZS5jCmluZGV4IDhkMzUzZWMuLjg2MTUyZGUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL25vZGUuYworKysgYi9uZXQvdGlwYy9ub2RlLmMKQEAgLTM1LDIyICszNSwxNCBAQAogICovCiAKICNpbmNsdWRlICJjb3JlLmgiCi0jaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAibGluay5oIgogI2luY2x1ZGUgIm5vZGUuaCIKICNpbmNsdWRlICJuYW1lX2Rpc3RyLmgiCiAjaW5jbHVkZSAic29ja2V0LmgiCiAKLSNkZWZpbmUgTk9ERV9IVEFCTEVfU0laRSA1MTIKLQogc3RhdGljIHZvaWQgbm9kZV9sb3N0X2NvbnRhY3Qoc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIpOwogc3RhdGljIHZvaWQgbm9kZV9lc3RhYmxpc2hlZF9jb250YWN0KHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyKTsKIAotc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIG5vZGVfaHRhYmxlW05PREVfSFRBQkxFX1NJWkVdOwotTElTVF9IRUFEKHRpcGNfbm9kZV9saXN0KTsKLXN0YXRpYyB1MzIgdGlwY19udW1fbm9kZXM7Ci1zdGF0aWMgdTMyIHRpcGNfbnVtX2xpbmtzOwotc3RhdGljIERFRklORV9TUElOTE9DSyhub2RlX2xpc3RfbG9jayk7Ci0KIHN0cnVjdCB0aXBjX3NvY2tfY29ubiB7CiAJdTMyIHBvcnQ7CiAJdTMyIHBlZXJfcG9ydDsKQEAgLTc4LDE1ICs3MCwxNyBAQAogLyoKICAqIHRpcGNfbm9kZV9maW5kIC0gbG9jYXRlIHNwZWNpZmllZCBub2RlIG9iamVjdCwgaWYgaXQgZXhpc3RzCiAgKi8KLXN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9maW5kKHUzMiBhZGRyKQorc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKIHsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CiAJc3RydWN0IHRpcGNfbm9kZSAqbm9kZTsKIAotCWlmICh1bmxpa2VseSghaW5fb3duX2NsdXN0ZXJfZXhhY3QoYWRkcikpKQorCWlmICh1bmxpa2VseSghaW5fb3duX2NsdXN0ZXJfZXhhY3QobmV0LCBhZGRyKSkpCiAJCXJldHVybiBOVUxMOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCAmbm9kZV9odGFibGVbdGlwY19oYXNoZm4oYWRkcildLCBoYXNoKSB7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5vZGUsICZ0bi0+bm9kZV9odGFibGVbdGlwY19oYXNoZm4oYWRkcildLAorCQkJCSBoYXNoKSB7CiAJCWlmIChub2RlLT5hZGRyID09IGFkZHIpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuIG5vZGU7CkBAIC05Niw3MiArOTAsNjggQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2NyZWF0ZSh1MzIgYWRkcikKK3N0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkcikKIHsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CiAJc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIsICp0ZW1wX25vZGU7CiAKLQlzcGluX2xvY2tfYmgoJm5vZGVfbGlzdF9sb2NrKTsKLQorCXNwaW5fbG9ja19iaCgmdG4tPm5vZGVfbGlzdF9sb2NrKTsKKwluX3B0ciA9IHRpcGNfbm9kZV9maW5kKG5ldCwgYWRkcik7CisJaWYgKG5fcHRyKQorCQlnb3RvIGV4aXQ7CiAJbl9wdHIgPSBremFsbG9jKHNpemVvZigqbl9wdHIpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW5fcHRyKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZub2RlX2xpc3RfbG9jayk7CiAJCXByX3dhcm4oIk5vZGUgY3JlYXRpb24gZmFpbGVkLCBubyBtZW1vcnlcbiIpOwotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBleGl0OwogCX0KLQogCW5fcHRyLT5hZGRyID0gYWRkcjsKKwluX3B0ci0+bmV0ID0gbmV0OwogCXNwaW5fbG9ja19pbml0KCZuX3B0ci0+bG9jayk7CiAJSU5JVF9ITElTVF9OT0RFKCZuX3B0ci0+aGFzaCk7CiAJSU5JVF9MSVNUX0hFQUQoJm5fcHRyLT5saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmbl9wdHItPnB1YmxfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJm5fcHRyLT5jb25uX3Nrcyk7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbl9wdHItPndhaXRpbmdfc2tzKTsKIAlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJm5fcHRyLT5iY2xpbmsuZGVmZXJyZWRfcXVldWUpOwotCi0JaGxpc3RfYWRkX2hlYWRfcmN1KCZuX3B0ci0+aGFzaCwgJm5vZGVfaHRhYmxlW3RpcGNfaGFzaGZuKGFkZHIpXSk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0ZW1wX25vZGUsICZ0aXBjX25vZGVfbGlzdCwgbGlzdCkgeworCWhsaXN0X2FkZF9oZWFkX3JjdSgmbl9wdHItPmhhc2gsICZ0bi0+bm9kZV9odGFibGVbdGlwY19oYXNoZm4oYWRkcildKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0ZW1wX25vZGUsICZ0bi0+bm9kZV9saXN0LCBsaXN0KSB7CiAJCWlmIChuX3B0ci0+YWRkciA8IHRlbXBfbm9kZS0+YWRkcikKIAkJCWJyZWFrOwogCX0KIAlsaXN0X2FkZF90YWlsX3JjdSgmbl9wdHItPmxpc3QsICZ0ZW1wX25vZGUtPmxpc3QpOwogCW5fcHRyLT5hY3Rpb25fZmxhZ3MgPSBUSVBDX1dBSVRfUEVFUl9MSU5LU19ET1dOOwogCW5fcHRyLT5zaWduYXR1cmUgPSBJTlZBTElEX05PREVfU0lHOwotCi0JdGlwY19udW1fbm9kZXMrKzsKLQotCXNwaW5fdW5sb2NrX2JoKCZub2RlX2xpc3RfbG9jayk7CitleGl0OgorCXNwaW5fdW5sb2NrX2JoKCZ0bi0+bm9kZV9saXN0X2xvY2spOwogCXJldHVybiBuX3B0cjsKIH0KIAotc3RhdGljIHZvaWQgdGlwY19ub2RlX2RlbGV0ZShzdHJ1Y3QgdGlwY19ub2RlICpuX3B0cikKK3N0YXRpYyB2b2lkIHRpcGNfbm9kZV9kZWxldGUoc3RydWN0IHRpcGNfbmV0ICp0biwgc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIpCiB7CiAJbGlzdF9kZWxfcmN1KCZuX3B0ci0+bGlzdCk7CiAJaGxpc3RfZGVsX3JjdSgmbl9wdHItPmhhc2gpOwogCWtmcmVlX3JjdShuX3B0ciwgcmN1KTsKLQotCXRpcGNfbnVtX25vZGVzLS07CiB9CiAKLXZvaWQgdGlwY19ub2RlX3N0b3Aodm9pZCkKK3ZvaWQgdGlwY19ub2RlX3N0b3Aoc3RydWN0IG5ldCAqbmV0KQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKIAlzdHJ1Y3QgdGlwY19ub2RlICpub2RlLCAqdF9ub2RlOwogCi0Jc3Bpbl9sb2NrX2JoKCZub2RlX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5vZGUsIHRfbm9kZSwgJnRpcGNfbm9kZV9saXN0LCBsaXN0KQotCQl0aXBjX25vZGVfZGVsZXRlKG5vZGUpOwotCXNwaW5fdW5sb2NrX2JoKCZub2RlX2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZ0bi0+bm9kZV9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShub2RlLCB0X25vZGUsICZ0bi0+bm9kZV9saXN0LCBsaXN0KQorCQl0aXBjX25vZGVfZGVsZXRlKHRuLCBub2RlKTsKKwlzcGluX3VubG9ja19iaCgmdG4tPm5vZGVfbGlzdF9sb2NrKTsKIH0KIAotaW50IHRpcGNfbm9kZV9hZGRfY29ubih1MzIgZG5vZGUsIHUzMiBwb3J0LCB1MzIgcGVlcl9wb3J0KQoraW50IHRpcGNfbm9kZV9hZGRfY29ubihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBkbm9kZSwgdTMyIHBvcnQsIHUzMiBwZWVyX3BvcnQpCiB7CiAJc3RydWN0IHRpcGNfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgdGlwY19zb2NrX2Nvbm4gKmNvbm47CiAKLQlpZiAoaW5fb3duX25vZGUoZG5vZGUpKQorCWlmIChpbl9vd25fbm9kZShuZXQsIGRub2RlKSkKIAkJcmV0dXJuIDA7CiAKLQlub2RlID0gdGlwY19ub2RlX2ZpbmQoZG5vZGUpOworCW5vZGUgPSB0aXBjX25vZGVfZmluZChuZXQsIGRub2RlKTsKIAlpZiAoIW5vZGUpIHsKIAkJcHJfd2FybigiQ29ubmVjdGluZyBzb2NrIHRvIG5vZGUgMHgleCBmYWlsZWRcbiIsIGRub2RlKTsKIAkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7CkBAIC0xNzksMTUgKzE2OSwxNSBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHRpcGNfbm9kZV9yZW1vdmVfY29ubih1MzIgZG5vZGUsIHUzMiBwb3J0KQordm9pZCB0aXBjX25vZGVfcmVtb3ZlX2Nvbm4oc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUzMiBwb3J0KQogewogCXN0cnVjdCB0aXBjX25vZGUgKm5vZGU7CiAJc3RydWN0IHRpcGNfc29ja19jb25uICpjb25uLCAqc2FmZTsKIAotCWlmIChpbl9vd25fbm9kZShkbm9kZSkpCisJaWYgKGluX293bl9ub2RlKG5ldCwgZG5vZGUpKQogCQlyZXR1cm47CiAKLQlub2RlID0gdGlwY19ub2RlX2ZpbmQoZG5vZGUpOworCW5vZGUgPSB0aXBjX25vZGVfZmluZChuZXQsIGRub2RlKTsKIAlpZiAoIW5vZGUpCiAJCXJldHVybjsKIApAQCAtMjAxLDIzICsxOTEsNiBAQAogCXRpcGNfbm9kZV91bmxvY2sobm9kZSk7CiB9CiAKLXZvaWQgdGlwY19ub2RlX2Fib3J0X3NvY2tfY29ubnMoc3RydWN0IGxpc3RfaGVhZCAqY29ubnMpCi17Ci0Jc3RydWN0IHRpcGNfc29ja19jb25uICpjb25uLCAqc2FmZTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNvbm4sIHNhZmUsIGNvbm5zLCBsaXN0KSB7Ci0JCWJ1ZiA9IHRpcGNfbXNnX2NyZWF0ZShUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UsIFRJUENfQ09OTl9NU0csCi0JCQkJICAgICAgU0hPUlRfSF9TSVpFLCAwLCB0aXBjX293bl9hZGRyLAotCQkJCSAgICAgIGNvbm4tPnBlZXJfbm9kZSwgY29ubi0+cG9ydCwKLQkJCQkgICAgICBjb25uLT5wZWVyX3BvcnQsIFRJUENfRVJSX05PX05PREUpOwotCQlpZiAobGlrZWx5KGJ1ZikpCi0JCQl0aXBjX3NrX3JjdihidWYpOwotCQlsaXN0X2RlbCgmY29ubi0+bGlzdCk7Ci0JCWtmcmVlKGNvbm4pOwotCX0KLX0KLQogLyoqCiAgKiB0aXBjX25vZGVfbGlua191cCAtIGhhbmRsZSBhZGRpdGlvbiBvZiBsaW5rCiAgKgpAQCAtMjMxLDggKzIwNCw4IEBACiAJbl9wdHItPmFjdGlvbl9mbGFncyB8PSBUSVBDX05PVElGWV9MSU5LX1VQOwogCW5fcHRyLT5saW5rX2lkID0gbF9wdHItPnBlZXJfYmVhcmVyX2lkIDw8IDE2IHwgbF9wdHItPmJlYXJlcl9pZDsKIAotCXByX2luZm8oIkVzdGFibGlzaGVkIGxpbmsgPCVzPiBvbiBuZXR3b3JrIHBsYW5lICVjXG4iLAotCQlsX3B0ci0+bmFtZSwgbF9wdHItPm5ldF9wbGFuZSk7CisJcHJfZGVidWcoIkVzdGFibGlzaGVkIGxpbmsgPCVzPiBvbiBuZXR3b3JrIHBsYW5lICVjXG4iLAorCQkgbF9wdHItPm5hbWUsIGxfcHRyLT5uZXRfcGxhbmUpOwogCiAJaWYgKCFhY3RpdmVbMF0pIHsKIAkJYWN0aXZlWzBdID0gYWN0aXZlWzFdID0gbF9wdHI7CkBAIC0yNDAsNyArMjEzLDcgQEAKIAkJZ290byBleGl0OwogCX0KIAlpZiAobF9wdHItPnByaW9yaXR5IDwgYWN0aXZlWzBdLT5wcmlvcml0eSkgewotCQlwcl9pbmZvKCJOZXcgbGluayA8JXM+IGJlY29tZXMgc3RhbmRieVxuIiwgbF9wdHItPm5hbWUpOworCQlwcl9kZWJ1ZygiTmV3IGxpbmsgPCVzPiBiZWNvbWVzIHN0YW5kYnlcbiIsIGxfcHRyLT5uYW1lKTsKIAkJZ290byBleGl0OwogCX0KIAl0aXBjX2xpbmtfZHVwX3F1ZXVlX3htaXQoYWN0aXZlWzBdLCBsX3B0cik7CkBAIC0yNDgsOSArMjIxLDkgQEAKIAkJYWN0aXZlWzBdID0gbF9wdHI7CiAJCWdvdG8gZXhpdDsKIAl9Ci0JcHJfaW5mbygiT2xkIGxpbmsgPCVzPiBiZWNvbWVzIHN0YW5kYnlcbiIsIGFjdGl2ZVswXS0+bmFtZSk7CisJcHJfZGVidWcoIk9sZCBsaW5rIDwlcz4gYmVjb21lcyBzdGFuZGJ5XG4iLCBhY3RpdmVbMF0tPm5hbWUpOwogCWlmIChhY3RpdmVbMV0gIT0gYWN0aXZlWzBdKQotCQlwcl9pbmZvKCJPbGQgbGluayA8JXM+IGJlY29tZXMgc3RhbmRieVxuIiwgYWN0aXZlWzFdLT5uYW1lKTsKKwkJcHJfZGVidWcoIk9sZCBsaW5rIDwlcz4gYmVjb21lcyBzdGFuZGJ5XG4iLCBhY3RpdmVbMV0tPm5hbWUpOwogCWFjdGl2ZVswXSA9IGFjdGl2ZVsxXSA9IGxfcHRyOwogZXhpdDoKIAkvKiBMZWF2ZSByb29tIGZvciBjaGFuZ2VvdmVyIGhlYWRlciB3aGVuIHJldHVybmluZyAnbXR1JyB0byB1c2VyczogKi8KQEAgLTI5MCw2ICsyNjMsNyBAQAogICovCiB2b2lkIHRpcGNfbm9kZV9saW5rX2Rvd24oc3RydWN0IHRpcGNfbm9kZSAqbl9wdHIsIHN0cnVjdCB0aXBjX2xpbmsgKmxfcHRyKQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuX3B0ci0+bmV0LCB0aXBjX25ldF9pZCk7CiAJc3RydWN0IHRpcGNfbGluayAqKmFjdGl2ZTsKIAogCW5fcHRyLT53b3JraW5nX2xpbmtzLS07CkBAIC0yOTcsMTIgKzI3MSwxMiBAQAogCW5fcHRyLT5saW5rX2lkID0gbF9wdHItPnBlZXJfYmVhcmVyX2lkIDw8IDE2IHwgbF9wdHItPmJlYXJlcl9pZDsKIAogCWlmICghdGlwY19saW5rX2lzX2FjdGl2ZShsX3B0cikpIHsKLQkJcHJfaW5mbygiTG9zdCBzdGFuZGJ5IGxpbmsgPCVzPiBvbiBuZXR3b3JrIHBsYW5lICVjXG4iLAotCQkJbF9wdHItPm5hbWUsIGxfcHRyLT5uZXRfcGxhbmUpOworCQlwcl9kZWJ1ZygiTG9zdCBzdGFuZGJ5IGxpbmsgPCVzPiBvbiBuZXR3b3JrIHBsYW5lICVjXG4iLAorCQkJIGxfcHRyLT5uYW1lLCBsX3B0ci0+bmV0X3BsYW5lKTsKIAkJcmV0dXJuOwogCX0KLQlwcl9pbmZvKCJMb3N0IGxpbmsgPCVzPiBvbiBuZXR3b3JrIHBsYW5lICVjXG4iLAotCQlsX3B0ci0+bmFtZSwgbF9wdHItPm5ldF9wbGFuZSk7CisJcHJfZGVidWcoIkxvc3QgbGluayA8JXM+IG9uIG5ldHdvcmsgcGxhbmUgJWNcbiIsCisJCSBsX3B0ci0+bmFtZSwgbF9wdHItPm5ldF9wbGFuZSk7CiAKIAlhY3RpdmUgPSAmbl9wdHItPmFjdGl2ZV9saW5rc1swXTsKIAlpZiAoYWN0aXZlWzBdID09IGxfcHRyKQpAQCAtMzI0LDcgKzI5OCw3IEBACiAJfQogCiAJLyogTG9vcGJhY2sgbGluayB3ZW50IGRvd24/IE5vIGZyYWdtZW50YXRpb24gbmVlZGVkIGZyb20gbm93IG9uLiAqLwotCWlmIChuX3B0ci0+YWRkciA9PSB0aXBjX293bl9hZGRyKSB7CisJaWYgKG5fcHRyLT5hZGRyID09IHRuLT5vd25fYWRkcikgewogCQluX3B0ci0+YWN0X210dXNbMF0gPSBNQVhfTVNHX1NJWkU7CiAJCW5fcHRyLT5hY3RfbXR1c1sxXSA9IE1BWF9NU0dfU0laRTsKIAl9CkBAIC0zNDMsOSArMzE3LDYgQEAKIHZvaWQgdGlwY19ub2RlX2F0dGFjaF9saW5rKHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyLCBzdHJ1Y3QgdGlwY19saW5rICpsX3B0cikKIHsKIAluX3B0ci0+bGlua3NbbF9wdHItPmJlYXJlcl9pZF0gPSBsX3B0cjsKLQlzcGluX2xvY2tfYmgoJm5vZGVfbGlzdF9sb2NrKTsKLQl0aXBjX251bV9saW5rcysrOwotCXNwaW5fdW5sb2NrX2JoKCZub2RlX2xpc3RfbG9jayk7CiAJbl9wdHItPmxpbmtfY250Kys7CiB9CiAKQEAgLTM1Nyw5ICszMjgsNiBAQAogCQlpZiAobF9wdHIgIT0gbl9wdHItPmxpbmtzW2ldKQogCQkJY29udGludWU7CiAJCW5fcHRyLT5saW5rc1tpXSA9IE5VTEw7Ci0JCXNwaW5fbG9ja19iaCgmbm9kZV9saXN0X2xvY2spOwotCQl0aXBjX251bV9saW5rcy0tOwotCQlzcGluX3VubG9ja19iaCgmbm9kZV9saXN0X2xvY2spOwogCQluX3B0ci0+bGlua19jbnQtLTsKIAl9CiB9CkBAIC0zNjgsMTcgKzMzNiwyMSBAQAogewogCW5fcHRyLT5hY3Rpb25fZmxhZ3MgfD0gVElQQ19OT1RJRllfTk9ERV9VUDsKIAluX3B0ci0+YmNsaW5rLm9vc19zdGF0ZSA9IDA7Ci0Jbl9wdHItPmJjbGluay5hY2tlZCA9IHRpcGNfYmNsaW5rX2dldF9sYXN0X3NlbnQoKTsKLQl0aXBjX2JjbGlua19hZGRfbm9kZShuX3B0ci0+YWRkcik7CisJbl9wdHItPmJjbGluay5hY2tlZCA9IHRpcGNfYmNsaW5rX2dldF9sYXN0X3NlbnQobl9wdHItPm5ldCk7CisJdGlwY19iY2xpbmtfYWRkX25vZGUobl9wdHItPm5ldCwgbl9wdHItPmFkZHIpOwogfQogCiBzdGF0aWMgdm9pZCBub2RlX2xvc3RfY29udGFjdChzdHJ1Y3QgdGlwY19ub2RlICpuX3B0cikKIHsKIAljaGFyIGFkZHJfc3RyaW5nWzE2XTsKLQl1MzIgaTsKKwlzdHJ1Y3QgdGlwY19zb2NrX2Nvbm4gKmNvbm4sICpzYWZlOworCXN0cnVjdCBsaXN0X2hlYWQgKmNvbm5zID0gJm5fcHRyLT5jb25uX3NrczsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuX3B0ci0+bmV0LCB0aXBjX25ldF9pZCk7CisJdWludCBpOwogCi0JcHJfaW5mbygiTG9zdCBjb250YWN0IHdpdGggJXNcbiIsCi0JCXRpcGNfYWRkcl9zdHJpbmdfZmlsbChhZGRyX3N0cmluZywgbl9wdHItPmFkZHIpKTsKKwlwcl9kZWJ1ZygiTG9zdCBjb250YWN0IHdpdGggJXNcbiIsCisJCSB0aXBjX2FkZHJfc3RyaW5nX2ZpbGwoYWRkcl9zdHJpbmcsIG5fcHRyLT5hZGRyKSk7CiAKIAkvKiBGbHVzaCBicm9hZGNhc3QgbGluayBpbmZvIGFzc29jaWF0ZWQgd2l0aCBsb3N0IG5vZGUgKi8KIAlpZiAobl9wdHItPmJjbGluay5yZWN2X3Blcm1pdHRlZCkgewpAQCAtMzg5LDcgKzM2MSw3IEBACiAJCQluX3B0ci0+YmNsaW5rLnJlYXNtX2J1ZiA9IE5VTEw7CiAJCX0KIAotCQl0aXBjX2JjbGlua19yZW1vdmVfbm9kZShuX3B0ci0+YWRkcik7CisJCXRpcGNfYmNsaW5rX3JlbW92ZV9ub2RlKG5fcHRyLT5uZXQsIG5fcHRyLT5hZGRyKTsKIAkJdGlwY19iY2xpbmtfYWNrbm93bGVkZ2Uobl9wdHIsIElOVkFMSURfTElOS19TRVEpOwogCiAJCW5fcHRyLT5iY2xpbmsucmVjdl9wZXJtaXR0ZWQgPSBmYWxzZTsKQEAgLTQwMywxMjYgKzM3NSwzMyBAQAogCQlsX3B0ci0+cmVzZXRfY2hlY2twb2ludCA9IGxfcHRyLT5uZXh0X2luX25vOwogCQlsX3B0ci0+ZXhwX21zZ19jb3VudCA9IDA7CiAJCXRpcGNfbGlua19yZXNldF9mcmFnbWVudHMobF9wdHIpOworCisJCS8qIExpbmsgbWFya2VkIGZvciBkZWxldGlvbiBhZnRlciBmYWlsb3Zlcj8gPT4gZG8gaXQgbm93ICovCisJCWlmIChsX3B0ci0+ZmxhZ3MgJiBMSU5LX1NUT1BQRUQpCisJCQl0aXBjX2xpbmtfZGVsZXRlKGxfcHRyKTsKIAl9CiAKIAluX3B0ci0+YWN0aW9uX2ZsYWdzICY9IH5USVBDX1dBSVRfT1dOX0xJTktTX0RPV047CiAKLQkvKiBOb3RpZnkgc3Vic2NyaWJlcnMgYW5kIHByZXZlbnQgcmUtY29udGFjdCB3aXRoIG5vZGUgdW50aWwKLQkgKiBjbGVhbnVwIGlzIGRvbmUuCi0JICovCi0Jbl9wdHItPmFjdGlvbl9mbGFncyB8PSBUSVBDX1dBSVRfUEVFUl9MSU5LU19ET1dOIHwKLQkJCSAgICAgICBUSVBDX05PVElGWV9OT0RFX0RPV047Ci19CisJLyogUHJldmVudCByZS1jb250YWN0IHdpdGggbm9kZSB1bnRpbCBjbGVhbnVwIGlzIGRvbmUgKi8KKwluX3B0ci0+YWN0aW9uX2ZsYWdzIHw9IFRJUENfV0FJVF9QRUVSX0xJTktTX0RPV047CiAKLXN0cnVjdCBza19idWZmICp0aXBjX25vZGVfZ2V0X25vZGVzKGNvbnN0IHZvaWQgKnJlcV90bHZfYXJlYSwgaW50IHJlcV90bHZfc3BhY2UpCi17Ci0JdTMyIGRvbWFpbjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqYnVmOwotCXN0cnVjdCB0aXBjX25vZGUgKm5fcHRyOwotCXN0cnVjdCB0aXBjX25vZGVfaW5mbyBub2RlX2luZm87Ci0JdTMyIHBheWxvYWRfc2l6ZTsKKwkvKiBOb3RpZnkgcHVibGljYXRpb25zIGZyb20gdGhpcyBub2RlICovCisJbl9wdHItPmFjdGlvbl9mbGFncyB8PSBUSVBDX05PVElGWV9OT0RFX0RPV047CiAKLQlpZiAoIVRMVl9DSEVDSyhyZXFfdGx2X2FyZWEsIHJlcV90bHZfc3BhY2UsIFRJUENfVExWX05FVF9BRERSKSkKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19UTFZfRVJST1IpOwotCi0JZG9tYWluID0gbnRvaGwoKihfX2JlMzIgKilUTFZfREFUQShyZXFfdGx2X2FyZWEpKTsKLQlpZiAoIXRpcGNfYWRkcl9kb21haW5fdmFsaWQoZG9tYWluKSkKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19JTlZBTElEX1ZBTFVFCi0JCQkJCQkgICAiIChuZXR3b3JrIGFkZHJlc3MpIik7Ci0KLQlzcGluX2xvY2tfYmgoJm5vZGVfbGlzdF9sb2NrKTsKLQlpZiAoIXRpcGNfbnVtX25vZGVzKSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZub2RlX2xpc3RfbG9jayk7Ci0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9ub25lKCk7Ci0JfQotCi0JLyogRm9yIG5vdywgZ2V0IHNwYWNlIGZvciBhbGwgb3RoZXIgbm9kZXMgKi8KLQlwYXlsb2FkX3NpemUgPSBUTFZfU1BBQ0Uoc2l6ZW9mKG5vZGVfaW5mbykpICogdGlwY19udW1fbm9kZXM7Ci0JaWYgKHBheWxvYWRfc2l6ZSA+IDMyNzY4dSkgewotCQlzcGluX3VubG9ja19iaCgmbm9kZV9saXN0X2xvY2spOwotCQlyZXR1cm4gdGlwY19jZmdfcmVwbHlfZXJyb3Jfc3RyaW5nKFRJUENfQ0ZHX05PVF9TVVBQT1JURUQKLQkJCQkJCSAgICIgKHRvbyBtYW55IG5vZGVzKSIpOwotCX0KLQlzcGluX3VubG9ja19iaCgmbm9kZV9saXN0X2xvY2spOwotCi0JYnVmID0gdGlwY19jZmdfcmVwbHlfYWxsb2MocGF5bG9hZF9zaXplKTsKLQlpZiAoIWJ1ZikKLQkJcmV0dXJuIE5VTEw7Ci0KLQkvKiBBZGQgVExWcyBmb3IgYWxsIG5vZGVzIGluIHNjb3BlICovCi0JcmN1X3JlYWRfbG9jaygpOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG5fcHRyLCAmdGlwY19ub2RlX2xpc3QsIGxpc3QpIHsKLQkJaWYgKCF0aXBjX2luX3Njb3BlKGRvbWFpbiwgbl9wdHItPmFkZHIpKQotCQkJY29udGludWU7Ci0JCW5vZGVfaW5mby5hZGRyID0gaHRvbmwobl9wdHItPmFkZHIpOwotCQlub2RlX2luZm8udXAgPSBodG9ubCh0aXBjX25vZGVfaXNfdXAobl9wdHIpKTsKLQkJdGlwY19jZmdfYXBwZW5kX3RsdihidWYsIFRJUENfVExWX05PREVfSU5GTywKLQkJCQkgICAgJm5vZGVfaW5mbywgc2l6ZW9mKG5vZGVfaW5mbykpOwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gYnVmOwotfQotCi1zdHJ1Y3Qgc2tfYnVmZiAqdGlwY19ub2RlX2dldF9saW5rcyhjb25zdCB2b2lkICpyZXFfdGx2X2FyZWEsIGludCByZXFfdGx2X3NwYWNlKQotewotCXUzMiBkb21haW47Ci0Jc3RydWN0IHNrX2J1ZmYgKmJ1ZjsKLQlzdHJ1Y3QgdGlwY19ub2RlICpuX3B0cjsKLQlzdHJ1Y3QgdGlwY19saW5rX2luZm8gbGlua19pbmZvOwotCXUzMiBwYXlsb2FkX3NpemU7Ci0KLQlpZiAoIVRMVl9DSEVDSyhyZXFfdGx2X2FyZWEsIHJlcV90bHZfc3BhY2UsIFRJUENfVExWX05FVF9BRERSKSkKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19UTFZfRVJST1IpOwotCi0JZG9tYWluID0gbnRvaGwoKihfX2JlMzIgKilUTFZfREFUQShyZXFfdGx2X2FyZWEpKTsKLQlpZiAoIXRpcGNfYWRkcl9kb21haW5fdmFsaWQoZG9tYWluKSkKLQkJcmV0dXJuIHRpcGNfY2ZnX3JlcGx5X2Vycm9yX3N0cmluZyhUSVBDX0NGR19JTlZBTElEX1ZBTFVFCi0JCQkJCQkgICAiIChuZXR3b3JrIGFkZHJlc3MpIik7Ci0KLQlpZiAoIXRpcGNfb3duX2FkZHIpCi0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9ub25lKCk7Ci0KLQlzcGluX2xvY2tfYmgoJm5vZGVfbGlzdF9sb2NrKTsKLQkvKiBHZXQgc3BhY2UgZm9yIGFsbCB1bmljYXN0IGxpbmtzICsgYnJvYWRjYXN0IGxpbmsgKi8KLQlwYXlsb2FkX3NpemUgPSBUTFZfU1BBQ0UoKHNpemVvZihsaW5rX2luZm8pKSAqICh0aXBjX251bV9saW5rcyArIDEpKTsKLQlpZiAocGF5bG9hZF9zaXplID4gMzI3Njh1KSB7Ci0JCXNwaW5fdW5sb2NrX2JoKCZub2RlX2xpc3RfbG9jayk7Ci0JCXJldHVybiB0aXBjX2NmZ19yZXBseV9lcnJvcl9zdHJpbmcoVElQQ19DRkdfTk9UX1NVUFBPUlRFRAotCQkJCQkJICAgIiAodG9vIG1hbnkgbGlua3MpIik7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZub2RlX2xpc3RfbG9jayk7Ci0KLQlidWYgPSB0aXBjX2NmZ19yZXBseV9hbGxvYyhwYXlsb2FkX3NpemUpOwotCWlmICghYnVmKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIEFkZCBUTFYgZm9yIGJyb2FkY2FzdCBsaW5rICovCi0JbGlua19pbmZvLmRlc3QgPSBodG9ubCh0aXBjX2NsdXN0ZXJfbWFzayh0aXBjX293bl9hZGRyKSk7Ci0JbGlua19pbmZvLnVwID0gaHRvbmwoMSk7Ci0Jc3RybGNweShsaW5rX2luZm8uc3RyLCB0aXBjX2JjbGlua19uYW1lLCBUSVBDX01BWF9MSU5LX05BTUUpOwotCXRpcGNfY2ZnX2FwcGVuZF90bHYoYnVmLCBUSVBDX1RMVl9MSU5LX0lORk8sICZsaW5rX2luZm8sIHNpemVvZihsaW5rX2luZm8pKTsKLQotCS8qIEFkZCBUTFZzIGZvciBhbnkgb3RoZXIgbGlua3MgaW4gc2NvcGUgKi8KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobl9wdHIsICZ0aXBjX25vZGVfbGlzdCwgbGlzdCkgewotCQl1MzIgaTsKLQotCQlpZiAoIXRpcGNfaW5fc2NvcGUoZG9tYWluLCBuX3B0ci0+YWRkcikpCi0JCQljb250aW51ZTsKLQkJdGlwY19ub2RlX2xvY2sobl9wdHIpOwotCQlmb3IgKGkgPSAwOyBpIDwgTUFYX0JFQVJFUlM7IGkrKykgewotCQkJaWYgKCFuX3B0ci0+bGlua3NbaV0pCi0JCQkJY29udGludWU7Ci0JCQlsaW5rX2luZm8uZGVzdCA9IGh0b25sKG5fcHRyLT5hZGRyKTsKLQkJCWxpbmtfaW5mby51cCA9IGh0b25sKHRpcGNfbGlua19pc191cChuX3B0ci0+bGlua3NbaV0pKTsKLQkJCXN0cmNweShsaW5rX2luZm8uc3RyLCBuX3B0ci0+bGlua3NbaV0tPm5hbWUpOwotCQkJdGlwY19jZmdfYXBwZW5kX3RsdihidWYsIFRJUENfVExWX0xJTktfSU5GTywKLQkJCQkJICAgICZsaW5rX2luZm8sIHNpemVvZihsaW5rX2luZm8pKTsKKwkvKiBOb3RpZnkgc29ja2V0cyBjb25uZWN0ZWQgdG8gbm9kZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjb25uLCBzYWZlLCBjb25ucywgbGlzdCkgeworCQlza2IgPSB0aXBjX21zZ19jcmVhdGUoVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFLCBUSVBDX0NPTk5fTVNHLAorCQkJCSAgICAgIFNIT1JUX0hfU0laRSwgMCwgdG4tPm93bl9hZGRyLAorCQkJCSAgICAgIGNvbm4tPnBlZXJfbm9kZSwgY29ubi0+cG9ydCwKKwkJCQkgICAgICBjb25uLT5wZWVyX3BvcnQsIFRJUENfRVJSX05PX05PREUpOworCQlpZiAobGlrZWx5KHNrYikpIHsKKwkJCXNrYl9xdWV1ZV90YWlsKG5fcHRyLT5pbnB1dHEsIHNrYik7CisJCQluX3B0ci0+YWN0aW9uX2ZsYWdzIHw9IFRJUENfTVNHX0VWVDsKIAkJfQotCQl0aXBjX25vZGVfdW5sb2NrKG5fcHRyKTsKKwkJbGlzdF9kZWwoJmNvbm4tPmxpc3QpOworCQlrZnJlZShjb25uKTsKIAl9Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIGJ1ZjsKIH0KIAogLyoqCkBAIC01MzQsMTAgKzQxMywxMSBAQAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzCiAgKi8KLWludCB0aXBjX25vZGVfZ2V0X2xpbmtuYW1lKHUzMiBiZWFyZXJfaWQsIHUzMiBhZGRyLCBjaGFyICpsaW5rbmFtZSwgc2l6ZV90IGxlbikKK2ludCB0aXBjX25vZGVfZ2V0X2xpbmtuYW1lKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGJlYXJlcl9pZCwgdTMyIGFkZHIsCisJCQkgICBjaGFyICpsaW5rbmFtZSwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgdGlwY19saW5rICpsaW5rOwotCXN0cnVjdCB0aXBjX25vZGUgKm5vZGUgPSB0aXBjX25vZGVfZmluZChhZGRyKTsKKwlzdHJ1Y3QgdGlwY19ub2RlICpub2RlID0gdGlwY19ub2RlX2ZpbmQobmV0LCBhZGRyKTsKIAogCWlmICgoYmVhcmVyX2lkID49IE1BWF9CRUFSRVJTKSB8fCAhbm9kZSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC01NTQsNTggKzQzNCw2MCBAQAogCiB2b2lkIHRpcGNfbm9kZV91bmxvY2soc3RydWN0IHRpcGNfbm9kZSAqbm9kZSkKIHsKLQlMSVNUX0hFQUQobnN1Yl9saXN0KTsKLQlMSVNUX0hFQUQoY29ubl9za3MpOwotCXN0cnVjdCBza19idWZmX2hlYWQgd2FpdGluZ19za3M7CisJc3RydWN0IG5ldCAqbmV0ID0gbm9kZS0+bmV0OwogCXUzMiBhZGRyID0gMDsKLQlpbnQgZmxhZ3MgPSBub2RlLT5hY3Rpb25fZmxhZ3M7CisJdTMyIGZsYWdzID0gbm9kZS0+YWN0aW9uX2ZsYWdzOwogCXUzMiBsaW5rX2lkID0gMDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwdWJsX2xpc3Q7CisJc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxID0gbm9kZS0+aW5wdXRxOworCXN0cnVjdCBza19idWZmX2hlYWQgKm5hbWVkcTsKIAotCWlmIChsaWtlbHkoIWZsYWdzKSkgeworCWlmIChsaWtlbHkoIWZsYWdzIHx8IChmbGFncyA9PSBUSVBDX01TR19FVlQpKSkgeworCQlub2RlLT5hY3Rpb25fZmxhZ3MgPSAwOwogCQlzcGluX3VubG9ja19iaCgmbm9kZS0+bG9jayk7CisJCWlmIChmbGFncyA9PSBUSVBDX01TR19FVlQpCisJCQl0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7CiAJCXJldHVybjsKIAl9CiAKIAlhZGRyID0gbm9kZS0+YWRkcjsKIAlsaW5rX2lkID0gbm9kZS0+bGlua19pZDsKLQlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJndhaXRpbmdfc2tzKTsKKwluYW1lZHEgPSBub2RlLT5uYW1lZHE7CisJcHVibF9saXN0ID0gJm5vZGUtPnB1YmxfbGlzdDsKIAotCWlmIChmbGFncyAmIFRJUENfV0FLRVVQX1VTRVJTKQotCQlza2JfcXVldWVfc3BsaWNlX2luaXQoJm5vZGUtPndhaXRpbmdfc2tzLCAmd2FpdGluZ19za3MpOwotCi0JaWYgKGZsYWdzICYgVElQQ19OT1RJRllfTk9ERV9ET1dOKSB7Ci0JCWxpc3RfcmVwbGFjZV9pbml0KCZub2RlLT5wdWJsX2xpc3QsICZuc3ViX2xpc3QpOwotCQlsaXN0X3JlcGxhY2VfaW5pdCgmbm9kZS0+Y29ubl9za3MsICZjb25uX3Nrcyk7Ci0JfQotCW5vZGUtPmFjdGlvbl9mbGFncyAmPSB+KFRJUENfV0FLRVVQX1VTRVJTIHwgVElQQ19OT1RJRllfTk9ERV9ET1dOIHwKLQkJCQlUSVBDX05PVElGWV9OT0RFX1VQIHwgVElQQ19OT1RJRllfTElOS19VUCB8Ci0JCQkJVElQQ19OT1RJRllfTElOS19ET1dOIHwKLQkJCQlUSVBDX1dBS0VVUF9CQ0FTVF9VU0VSUyk7CisJbm9kZS0+YWN0aW9uX2ZsYWdzICY9IH4oVElQQ19NU0dfRVZUIHwKKwkJCQlUSVBDX05PVElGWV9OT0RFX0RPV04gfCBUSVBDX05PVElGWV9OT0RFX1VQIHwKKwkJCQlUSVBDX05PVElGWV9MSU5LX0RPV04gfCBUSVBDX05PVElGWV9MSU5LX1VQIHwKKwkJCQlUSVBDX1dBS0VVUF9CQ0FTVF9VU0VSUyB8IFRJUENfQkNBU1RfTVNHX0VWVCB8CisJCQkJVElQQ19OQU1FRF9NU0dfRVZUKTsKIAogCXNwaW5fdW5sb2NrX2JoKCZub2RlLT5sb2NrKTsKIAotCXdoaWxlICghc2tiX3F1ZXVlX2VtcHR5KCZ3YWl0aW5nX3NrcykpCi0JCXRpcGNfc2tfcmN2KF9fc2tiX2RlcXVldWUoJndhaXRpbmdfc2tzKSk7Ci0KLQlpZiAoIWxpc3RfZW1wdHkoJmNvbm5fc2tzKSkKLQkJdGlwY19ub2RlX2Fib3J0X3NvY2tfY29ubnMoJmNvbm5fc2tzKTsKLQotCWlmICghbGlzdF9lbXB0eSgmbnN1Yl9saXN0KSkKLQkJdGlwY19wdWJsX25vdGlmeSgmbnN1Yl9saXN0LCBhZGRyKTsKKwlpZiAoZmxhZ3MgJiBUSVBDX05PVElGWV9OT0RFX0RPV04pCisJCXRpcGNfcHVibF9ub3RpZnkobmV0LCBwdWJsX2xpc3QsIGFkZHIpOwogCiAJaWYgKGZsYWdzICYgVElQQ19XQUtFVVBfQkNBU1RfVVNFUlMpCi0JCXRpcGNfYmNsaW5rX3dha2V1cF91c2VycygpOworCQl0aXBjX2JjbGlua193YWtldXBfdXNlcnMobmV0KTsKIAogCWlmIChmbGFncyAmIFRJUENfTk9USUZZX05PREVfVVApCi0JCXRpcGNfbmFtZWRfbm9kZV91cChhZGRyKTsKKwkJdGlwY19uYW1lZF9ub2RlX3VwKG5ldCwgYWRkcik7CiAKIAlpZiAoZmxhZ3MgJiBUSVBDX05PVElGWV9MSU5LX1VQKQotCQl0aXBjX25hbWV0YmxfcHVibGlzaChUSVBDX0xJTktfU1RBVEUsIGFkZHIsIGFkZHIsCisJCXRpcGNfbmFtZXRibF9wdWJsaXNoKG5ldCwgVElQQ19MSU5LX1NUQVRFLCBhZGRyLCBhZGRyLAogCQkJCSAgICAgVElQQ19OT0RFX1NDT1BFLCBsaW5rX2lkLCBhZGRyKTsKIAogCWlmIChmbGFncyAmIFRJUENfTk9USUZZX0xJTktfRE9XTikKLQkJdGlwY19uYW1ldGJsX3dpdGhkcmF3KFRJUENfTElOS19TVEFURSwgYWRkciwKKwkJdGlwY19uYW1ldGJsX3dpdGhkcmF3KG5ldCwgVElQQ19MSU5LX1NUQVRFLCBhZGRyLAogCQkJCSAgICAgIGxpbmtfaWQsIGFkZHIpOworCisJaWYgKGZsYWdzICYgVElQQ19NU0dfRVZUKQorCQl0aXBjX3NrX3JjdihuZXQsIGlucHV0cSk7CisKKwlpZiAoZmxhZ3MgJiBUSVBDX05BTUVEX01TR19FVlQpCisJCXRpcGNfbmFtZWRfcmN2KG5ldCwgbmFtZWRxKTsKKworCWlmIChmbGFncyAmIFRJUENfQkNBU1RfTVNHX0VWVCkKKwkJdGlwY19iY2xpbmtfaW5wdXQobmV0KTsKIH0KIAogLyogQ2FsbGVyIHNob3VsZCBob2xkIG5vZGUgbG9jayBmb3IgdGhlIHBhc3NlZCBub2RlICovCkBAIC02MTQsNyArNDk2LDcgQEAKIAl2b2lkICpoZHI7CiAJc3RydWN0IG5sYXR0ciAqYXR0cnM7CiAKLQloZHIgPSBnZW5sbXNnX3B1dChtc2ctPnNrYiwgbXNnLT5wb3J0aWQsIG1zZy0+c2VxLCAmdGlwY19nZW5sX3YyX2ZhbWlseSwKKwloZHIgPSBnZW5sbXNnX3B1dChtc2ctPnNrYiwgbXNnLT5wb3J0aWQsIG1zZy0+c2VxLCAmdGlwY19nZW5sX2ZhbWlseSwKIAkJCSAgTkxNX0ZfTVVMVEksIFRJUENfTkxfTk9ERV9HRVQpOwogCWlmICghaGRyKQogCQlyZXR1cm4gLUVNU0dTSVpFOwpAQCAtNjQ1LDYgKzUyNyw4IEBACiBpbnQgdGlwY19ubF9ub2RlX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewogCWludCBlcnI7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2tiLT5zayk7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOwogCWludCBkb25lID0gY2ItPmFyZ3NbMF07CiAJaW50IGxhc3RfYWRkciA9IGNiLT5hcmdzWzFdOwogCXN0cnVjdCB0aXBjX25vZGUgKm5vZGU7CkBAIC02NTksNyArNTQzLDcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCWlmIChsYXN0X2FkZHIgJiYgIXRpcGNfbm9kZV9maW5kKGxhc3RfYWRkcikpIHsKKwlpZiAobGFzdF9hZGRyICYmICF0aXBjX25vZGVfZmluZChuZXQsIGxhc3RfYWRkcikpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCS8qIFdlIG5ldmVyIHNldCBzZXEgb3IgY2FsbCBubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoKSB0aGlzCiAJCSAqIG1lYW5zIHRoYXQgc2V0dGluZyBwcmV2X3NlcSBoZXJlIHdpbGwgY2F1c2UgdGhlIGNvbnNpc3RlbmNlCkBAIC02NzEsNyArNTU1LDcgQEAKIAkJcmV0dXJuIC1FUElQRTsKIAl9CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCAmdGlwY19ub2RlX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCAmdG4tPm5vZGVfbGlzdCwgbGlzdCkgewogCQlpZiAobGFzdF9hZGRyKSB7CiAJCQlpZiAobm9kZS0+YWRkciA9PSBsYXN0X2FkZHIpCiAJCQkJbGFzdF9hZGRyID0gMDsKZGlmZiAtLWdpdCBhL25ldC90aXBjL25vZGUuaCBiL25ldC90aXBjL25vZGUuaAppbmRleCBjYmUwZTk1Li4zZDE4YzY2IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9ub2RlLmgKKysrIGIvbmV0L3RpcGMvbm9kZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIG5ldC90aXBjL25vZGUuaDogSW5jbHVkZSBmaWxlIGZvciBUSVBDIG5vZGUgbWFuYWdlbWVudCByb3V0aW5lcwogICoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LCAyMDE0LCBFcmljc3NvbiBBQgorICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYsIDIwMTQtMjAxNSwgRXJpY3Nzb24gQUIKICAqIENvcHlyaWdodCAoYykgMjAwNSwgMjAxMC0yMDE0LCBXaW5kIFJpdmVyIFN5c3RlbXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtNDIsMTAgKzQyLDEwIEBACiAjaW5jbHVkZSAiYmVhcmVyLmgiCiAjaW5jbHVkZSAibXNnLmgiCiAKLS8qCi0gKiBPdXQtb2YtcmFuZ2UgdmFsdWUgZm9yIG5vZGUgc2lnbmF0dXJlCi0gKi8KLSNkZWZpbmUgSU5WQUxJRF9OT0RFX1NJRyAweDEwMDAwCisvKiBPdXQtb2YtcmFuZ2UgdmFsdWUgZm9yIG5vZGUgc2lnbmF0dXJlICovCisjZGVmaW5lIElOVkFMSURfTk9ERV9TSUcJMHgxMDAwMAorCisjZGVmaW5lIE5PREVfSFRBQkxFX1NJWkUJNTEyCiAKIC8qIEZsYWdzIHVzZWQgdG8gdGFrZSBkaWZmZXJlbnQgYWN0aW9ucyBhY2NvcmRpbmcgdG8gZmxhZyB0eXBlCiAgKiBUSVBDX1dBSVRfUEVFUl9MSU5LU19ET1dOOiB3YWl0IHRvIHNlZSB0aGF0IHBlZXIncyBsaW5rcyBhcmUgZG93bgpAQCAtNTUsMTQgKzU1LDE2IEBACiAgKiBUSVBDX0RJU1RSSUJVVEVfTkFNRTogcHVibGlzaCBvciB3aXRoZHJhdyBsaW5rIHN0YXRlIG5hbWUgdHlwZQogICovCiBlbnVtIHsKKwlUSVBDX01TR19FVlQgICAgICAgICAgICAgICAgICAgID0gMSwKIAlUSVBDX1dBSVRfUEVFUl9MSU5LU19ET1dOCT0gKDEgPDwgMSksCiAJVElQQ19XQUlUX09XTl9MSU5LU19ET1dOCT0gKDEgPDwgMiksCiAJVElQQ19OT1RJRllfTk9ERV9ET1dOCQk9ICgxIDw8IDMpLAogCVRJUENfTk9USUZZX05PREVfVVAJCT0gKDEgPDwgNCksCi0JVElQQ19XQUtFVVBfVVNFUlMJCT0gKDEgPDwgNSksCi0JVElQQ19XQUtFVVBfQkNBU1RfVVNFUlMJCT0gKDEgPDwgNiksCi0JVElQQ19OT1RJRllfTElOS19VUAkJPSAoMSA8PCA3KSwKLQlUSVBDX05PVElGWV9MSU5LX0RPV04JCT0gKDEgPDwgOCkKKwlUSVBDX1dBS0VVUF9CQ0FTVF9VU0VSUwkJPSAoMSA8PCA1KSwKKwlUSVBDX05PVElGWV9MSU5LX1VQCQk9ICgxIDw8IDYpLAorCVRJUENfTk9USUZZX0xJTktfRE9XTgkJPSAoMSA8PCA3KSwKKwlUSVBDX05BTUVEX01TR19FVlQJCT0gKDEgPDwgOCksCisJVElQQ19CQ0FTVF9NU0dfRVZUCQk9ICgxIDw8IDkpCiB9OwogCiAvKioKQEAgLTczLDYgKzc1LDcgQEAKICAqIEBvb3Nfc3RhdGU6IHN0YXRlIHRyYWNrZXIgZm9yIGhhbmRsaW5nIE9PUyBiJ2Nhc3QgbWVzc2FnZXMKICAqIEBkZWZlcnJlZF9xdWV1ZTogZGVmZXJyZWQgcXVldWUgc2F2ZWQgT09TIGInY2FzdCBtZXNzYWdlIHJlY2VpdmVkIGZyb20gbm9kZQogICogQHJlYXNtX2J1ZjogYnJvYWRjYXN0IHJlYXNzZW1ibHkgcXVldWUgaGVhZCBmcm9tIG5vZGUKKyAqIEBpbnB1dHFfbWFwOiBiaXRtYXAgaW5kaWNhdGluZyB3aGljaCBpbnF1ZXVlcyBzaG91bGQgYmUga2lja2VkCiAgKiBAcmVjdl9wZXJtaXR0ZWQ6IHRydWUgaWYgbm9kZSBpcyBhbGxvd2VkIHRvIHJlY2VpdmUgYidjYXN0IG1lc3NhZ2VzCiAgKi8KIHN0cnVjdCB0aXBjX25vZGVfYmNsaW5rIHsKQEAgLTgzLDYgKzg2LDcgQEAKIAl1MzIgZGVmZXJyZWRfc2l6ZTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGRlZmVycmVkX3F1ZXVlOwogCXN0cnVjdCBza19idWZmICpyZWFzbV9idWY7CisJaW50IGlucHV0cV9tYXA7CiAJYm9vbCByZWN2X3Blcm1pdHRlZDsKIH07CiAKQEAgLTkwLDcgKzk0LDExIEBACiAgKiBzdHJ1Y3QgdGlwY19ub2RlIC0gVElQQyBub2RlIHN0cnVjdHVyZQogICogQGFkZHI6IG5ldHdvcmsgYWRkcmVzcyBvZiBub2RlCiAgKiBAbG9jazogc3BpbmxvY2sgZ292ZXJuaW5nIGFjY2VzcyB0byBzdHJ1Y3R1cmUKKyAqIEBuZXQ6IHRoZSBhcHBsaWNhYmxlIG5ldCBuYW1lc3BhY2UKICAqIEBoYXNoOiBsaW5rcyB0byBhZGphY2VudCBub2RlcyBpbiB1bnNvcnRlZCBoYXNoIGNoYWluCisgKiBAaW5wdXRxOiBwb2ludGVyIHRvIGlucHV0IHF1ZXVlIGNvbnRhaW5pbmcgbWVzc2FnZXMgZm9yIG1zZyBldmVudAorICogQG5hbWVkcTogcG9pbnRlciB0byBuYW1lIHRhYmxlIGlucHV0IHF1ZXVlIHdpdGggbmFtZSB0YWJsZSBtZXNzYWdlcworICogQGN1cnJfbGluazogdGhlIGxpbmsgaG9sZGluZyB0aGUgbm9kZSBsb2NrLCBpZiBhbnkKICAqIEBhY3RpdmVfbGlua3M6IHBvaW50ZXJzIHRvIGFjdGl2ZSBsaW5rcyB0byBub2RlCiAgKiBAbGlua3M6IHBvaW50ZXJzIHRvIGFsbCBsaW5rcyB0byBub2RlCiAgKiBAYWN0aW9uX2ZsYWdzOiBiaXQgbWFzayBvZiBkaWZmZXJlbnQgdHlwZXMgb2Ygbm9kZSBhY3Rpb25zCkBAIC0xMDYsMTEgKzExNCwxNCBAQAogc3RydWN0IHRpcGNfbm9kZSB7CiAJdTMyIGFkZHI7CiAJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBuZXQgKm5ldDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBoYXNoOworCXN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpuYW1lZHE7CiAJc3RydWN0IHRpcGNfbGluayAqYWN0aXZlX2xpbmtzWzJdOwogCXUzMiBhY3RfbXR1c1syXTsKIAlzdHJ1Y3QgdGlwY19saW5rICpsaW5rc1tNQVhfQkVBUkVSU107Ci0JdW5zaWduZWQgaW50IGFjdGlvbl9mbGFnczsKKwlpbnQgYWN0aW9uX2ZsYWdzOwogCXN0cnVjdCB0aXBjX25vZGVfYmNsaW5rIGJjbGluazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJaW50IGxpbmtfY250OwpAQCAtMTE4LDI4ICsxMjksMjQgQEAKIAl1MzIgc2lnbmF0dXJlOwogCXUzMiBsaW5rX2lkOwogCXN0cnVjdCBsaXN0X2hlYWQgcHVibF9saXN0OwotCXN0cnVjdCBza19idWZmX2hlYWQgd2FpdGluZ19za3M7CiAJc3RydWN0IGxpc3RfaGVhZCBjb25uX3NrczsKIAlzdHJ1Y3QgcmN1X2hlYWQgcmN1OwogfTsKIAotZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdGlwY19ub2RlX2xpc3Q7Ci0KLXN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9maW5kKHUzMiBhZGRyKTsKLXN0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9jcmVhdGUodTMyIGFkZHIpOwotdm9pZCB0aXBjX25vZGVfc3RvcCh2b2lkKTsKK3N0cnVjdCB0aXBjX25vZGUgKnRpcGNfbm9kZV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGFkZHIpOworc3RydWN0IHRpcGNfbm9kZSAqdGlwY19ub2RlX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBhZGRyKTsKK3ZvaWQgdGlwY19ub2RlX3N0b3Aoc3RydWN0IG5ldCAqbmV0KTsKIHZvaWQgdGlwY19ub2RlX2F0dGFjaF9saW5rKHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyLCBzdHJ1Y3QgdGlwY19saW5rICpsX3B0cik7CiB2b2lkIHRpcGNfbm9kZV9kZXRhY2hfbGluayhzdHJ1Y3QgdGlwY19ub2RlICpuX3B0ciwgc3RydWN0IHRpcGNfbGluayAqbF9wdHIpOwogdm9pZCB0aXBjX25vZGVfbGlua19kb3duKHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyLCBzdHJ1Y3QgdGlwY19saW5rICpsX3B0cik7CiB2b2lkIHRpcGNfbm9kZV9saW5rX3VwKHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyLCBzdHJ1Y3QgdGlwY19saW5rICpsX3B0cik7CiBpbnQgdGlwY19ub2RlX2FjdGl2ZV9saW5rcyhzdHJ1Y3QgdGlwY19ub2RlICpuX3B0cik7CiBpbnQgdGlwY19ub2RlX2lzX3VwKHN0cnVjdCB0aXBjX25vZGUgKm5fcHRyKTsKLXN0cnVjdCBza19idWZmICp0aXBjX25vZGVfZ2V0X2xpbmtzKGNvbnN0IHZvaWQgKnJlcV90bHZfYXJlYSwgaW50IHJlcV90bHZfc3BhY2UpOwotc3RydWN0IHNrX2J1ZmYgKnRpcGNfbm9kZV9nZXRfbm9kZXMoY29uc3Qgdm9pZCAqcmVxX3Rsdl9hcmVhLCBpbnQgcmVxX3Rsdl9zcGFjZSk7Ci1pbnQgdGlwY19ub2RlX2dldF9saW5rbmFtZSh1MzIgYmVhcmVyX2lkLCB1MzIgbm9kZSwgY2hhciAqbGlua25hbWUsIHNpemVfdCBsZW4pOworaW50IHRpcGNfbm9kZV9nZXRfbGlua25hbWUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYmVhcmVyX2lkLCB1MzIgbm9kZSwKKwkJCSAgIGNoYXIgKmxpbmtuYW1lLCBzaXplX3QgbGVuKTsKIHZvaWQgdGlwY19ub2RlX3VubG9jayhzdHJ1Y3QgdGlwY19ub2RlICpub2RlKTsKLWludCB0aXBjX25vZGVfYWRkX2Nvbm4odTMyIGRub2RlLCB1MzIgcG9ydCwgdTMyIHBlZXJfcG9ydCk7Ci12b2lkIHRpcGNfbm9kZV9yZW1vdmVfY29ubih1MzIgZG5vZGUsIHUzMiBwb3J0KTsKK2ludCB0aXBjX25vZGVfYWRkX2Nvbm4oc3RydWN0IG5ldCAqbmV0LCB1MzIgZG5vZGUsIHUzMiBwb3J0LCB1MzIgcGVlcl9wb3J0KTsKK3ZvaWQgdGlwY19ub2RlX3JlbW92ZV9jb25uKHN0cnVjdCBuZXQgKm5ldCwgdTMyIGRub2RlLCB1MzIgcG9ydCk7CiAKIGludCB0aXBjX25sX25vZGVfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwogCkBAIC0xNTQsMTIgKzE2MSwxMiBAQAogCQlUSVBDX05PVElGWV9OT0RFX0RPV04gfCBUSVBDX1dBSVRfT1dOX0xJTktTX0RPV04pKTsKIH0KIAotc3RhdGljIGlubGluZSB1aW50IHRpcGNfbm9kZV9nZXRfbXR1KHUzMiBhZGRyLCB1MzIgc2VsZWN0b3IpCitzdGF0aWMgaW5saW5lIHVpbnQgdGlwY19ub2RlX2dldF9tdHUoc3RydWN0IG5ldCAqbmV0LCB1MzIgYWRkciwgdTMyIHNlbGVjdG9yKQogewogCXN0cnVjdCB0aXBjX25vZGUgKm5vZGU7CiAJdTMyIG10dTsKIAotCW5vZGUgPSB0aXBjX25vZGVfZmluZChhZGRyKTsKKwlub2RlID0gdGlwY19ub2RlX2ZpbmQobmV0LCBhZGRyKTsKIAogCWlmIChsaWtlbHkobm9kZSkpCiAJCW10dSA9IG5vZGUtPmFjdF9tdHVzW3NlbGVjdG9yICYgMV07CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zZXJ2ZXIuYyBiL25ldC90aXBjL3NlcnZlci5jCmluZGV4IGE1MzhhMDIuLmVhZGQ0ZWQgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3NlcnZlci5jCisrKyBiL25ldC90aXBjL3NlcnZlci5jCkBAIC0zNSw2ICszNSw3IEBACiAKICNpbmNsdWRlICJzZXJ2ZXIuaCIKICNpbmNsdWRlICJjb3JlLmgiCisjaW5jbHVkZSAic29ja2V0LmgiCiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogLyogTnVtYmVyIG9mIG1lc3NhZ2VzIHRvIHNlbmQgYmVmb3JlIHJlc2NoZWR1bGluZyAqLwpAQCAtMjU1LDcgKzI1Niw4IEBACiAJCWdvdG8gb3V0X2Nsb3NlOwogCX0KIAotCXMtPnRpcGNfY29ubl9yZWN2bXNnKGNvbi0+Y29uaWQsICZhZGRyLCBjb24tPnVzcl9kYXRhLCBidWYsIHJldCk7CisJcy0+dGlwY19jb25uX3JlY3Ztc2coc29ja19uZXQoY29uLT5zb2NrLT5zayksIGNvbi0+Y29uaWQsICZhZGRyLAorCQkJICAgICBjb24tPnVzcl9kYXRhLCBidWYsIHJldCk7CiAKIAlrbWVtX2NhY2hlX2ZyZWUocy0+cmN2YnVmX2NhY2hlLCBidWYpOwogCkBAIC0zMDcsNyArMzA5LDcgQEAKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gTlVMTDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gdGlwY19zb2NrX2NyZWF0ZV9sb2NhbChzLT50eXBlLCAmc29jayk7CisJcmV0ID0gdGlwY19zb2NrX2NyZWF0ZV9sb2NhbChzLT5uZXQsIHMtPnR5cGUsICZzb2NrKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIE5VTEw7CiAJcmV0ID0ga2VybmVsX3NldHNvY2tvcHQoc29jaywgU09MX1RJUEMsIFRJUENfSU1QT1JUQU5DRSwKZGlmZiAtLWdpdCBhL25ldC90aXBjL3NlcnZlci5oIGIvbmV0L3RpcGMvc2VydmVyLmgKaW5kZXggYmU4MTdiMC4uOTAxNWZhZSAxMDA2NDQKLS0tIGEvbmV0L3RpcGMvc2VydmVyLmgKKysrIGIvbmV0L3RpcGMvc2VydmVyLmgKQEAgLTM2LDcgKzM2LDkgQEAKICNpZm5kZWYgX1RJUENfU0VSVkVSX0gKICNkZWZpbmUgX1RJUENfU0VSVkVSX0gKIAotI2luY2x1ZGUgImNvcmUuaCIKKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC90aXBjLmg+CisjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KIAogI2RlZmluZSBUSVBDX1NFUlZFUl9OQU1FX0xFTgkzMgogCkBAIC00NSw2ICs0Nyw3IEBACiAgKiBAY29ubl9pZHI6IGlkZW50aWZpZXIgc2V0IG9mIGNvbm5lY3Rpb24KICAqIEBpZHJfbG9jazogcHJvdGVjdCB0aGUgY29ubmVjdGlvbiBpZGVudGlmaWVyIHNldAogICogQGlkcl9pbl91c2U6IGFtb3VudCBvZiBhbGxvY2F0ZWQgaWRlbnRpZmllciBlbnRyeQorICogQG5ldDogbmV0d29yayBuYW1zcGFjZSBpbnN0YW5jZQogICogQHJjdmJ1Zl9jYWNoZTogbWVtb3J5IGNhY2hlIG9mIHNlcnZlciByZWNlaXZlIGJ1ZmZlcgogICogQHJjdl93cTogcmVjZWl2ZSB3b3JrcXVldWUKICAqIEBzZW5kX3dxOiBzZW5kIHdvcmtxdWV1ZQpAQCAtNjEsMTYgKzY0LDE4IEBACiAJc3RydWN0IGlkciBjb25uX2lkcjsKIAlzcGlubG9ja190IGlkcl9sb2NrOwogCWludCBpZHJfaW5fdXNlOworCXN0cnVjdCBuZXQgKm5ldDsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqcmN2YnVmX2NhY2hlOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyY3Zfd3E7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnNlbmRfd3E7CiAJaW50IG1heF9yY3ZidWZfc2l6ZTsKLQl2b2lkICooKnRpcGNfY29ubl9uZXcpIChpbnQgY29uaWQpOwotCXZvaWQgKCp0aXBjX2Nvbm5fc2h1dGRvd24pIChpbnQgY29uaWQsIHZvaWQgKnVzcl9kYXRhKTsKLQl2b2lkICgqdGlwY19jb25uX3JlY3Ztc2cpIChpbnQgY29uaWQsIHN0cnVjdCBzb2NrYWRkcl90aXBjICphZGRyLAotCQkJCSAgIHZvaWQgKnVzcl9kYXRhLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOworCXZvaWQgKigqdGlwY19jb25uX25ldykoaW50IGNvbmlkKTsKKwl2b2lkICgqdGlwY19jb25uX3NodXRkb3duKShpbnQgY29uaWQsIHZvaWQgKnVzcl9kYXRhKTsKKwl2b2lkICgqdGlwY19jb25uX3JlY3Ztc2cpKHN0cnVjdCBuZXQgKm5ldCwgaW50IGNvbmlkLAorCQkJCSAgc3RydWN0IHNvY2thZGRyX3RpcGMgKmFkZHIsIHZvaWQgKnVzcl9kYXRhLAorCQkJCSAgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKIAlzdHJ1Y3Qgc29ja2FkZHJfdGlwYyAqc2FkZHI7Ci0JY29uc3QgY2hhciBuYW1lW1RJUENfU0VSVkVSX05BTUVfTEVOXTsKKwljaGFyIG5hbWVbVElQQ19TRVJWRVJfTkFNRV9MRU5dOwogCWludCBpbXA7CiAJaW50IHR5cGU7CiB9OwpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmMgYi9uZXQvdGlwYy9zb2NrZXQuYwppbmRleCA0NzMxY2FkLi5mNzNlOTc1IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zb2NrZXQuYworKysgYi9uZXQvdGlwYy9zb2NrZXQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBuZXQvdGlwYy9zb2NrZXQuYzogVElQQyBzb2NrZXQgQVBJCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIDIwMTItMjAxNCwgRXJpY3Nzb24gQUIKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCAyMDEyLTIwMTUsIEVyaWNzc29uIEFCCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCwgMjAxMC0yMDEzLCBXaW5kIFJpdmVyIFN5c3RlbXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzQsMjIgKzM0LDI1IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvcmhhc2h0YWJsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgIm5hbWVfdGFibGUuaCIKICNpbmNsdWRlICJub2RlLmgiCiAjaW5jbHVkZSAibGluay5oIgotI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgotI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIm5hbWVfZGlzdHIuaCIKICNpbmNsdWRlICJzb2NrZXQuaCIKIAotI2RlZmluZSBTU19MSVNURU5JTkcJLTEJLyogc29ja2V0IGlzIGxpc3RlbmluZyAqLwotI2RlZmluZSBTU19SRUFEWQktMgkvKiBzb2NrZXQgaXMgY29ubmVjdGlvbmxlc3MgKi8KKyNkZWZpbmUgU1NfTElTVEVOSU5HCQktMQkvKiBzb2NrZXQgaXMgbGlzdGVuaW5nICovCisjZGVmaW5lIFNTX1JFQURZCQktMgkvKiBzb2NrZXQgaXMgY29ubmVjdGlvbmxlc3MgKi8KIAotI2RlZmluZSBDT05OX1RJTUVPVVRfREVGQVVMVCAgODAwMAkvKiBkZWZhdWx0IGNvbm5lY3QgdGltZW91dCA9IDhzICovCi0jZGVmaW5lIENPTk5fUFJPQklOR19JTlRFUlZBTCAzNjAwMDAwCS8qIFttc10gPT4gMSBoICovCi0jZGVmaW5lIFRJUENfRldEX01TRwkgICAgICAxCi0jZGVmaW5lIFRJUENfQ09OTl9PSyAgICAgICAgICAwCi0jZGVmaW5lIFRJUENfQ09OTl9QUk9CSU5HICAgICAxCisjZGVmaW5lIENPTk5fVElNRU9VVF9ERUZBVUxUCTgwMDAJLyogZGVmYXVsdCBjb25uZWN0IHRpbWVvdXQgPSA4cyAqLworI2RlZmluZSBDT05OX1BST0JJTkdfSU5URVJWQUwJbXNlY3NfdG9famlmZmllcygzNjAwMDAwKSAgLyogW21zXSA9PiAxIGggKi8KKyNkZWZpbmUgVElQQ19GV0RfTVNHCQkxCisjZGVmaW5lIFRJUENfQ09OTl9PSwkJMAorI2RlZmluZSBUSVBDX0NPTk5fUFJPQklORwkxCisjZGVmaW5lIFRJUENfTUFYX1BPUlQJCTB4ZmZmZmZmZmYKKyNkZWZpbmUgVElQQ19NSU5fUE9SVAkJMQogCiAvKioKICAqIHN0cnVjdCB0aXBjX3NvY2sgLSBUSVBDIHNvY2tldCBzdHJ1Y3R1cmUKQEAgLTU5LDIxICs2MiwyMCBAQAogICogQGNvbm5faW5zdGFuY2U6IFRJUEMgaW5zdGFuY2UgdXNlZCB3aGVuIGNvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkCiAgKiBAcHVibGlzaGVkOiBub24temVybyBpZiBwb3J0IGhhcyBvbmUgb3IgbW9yZSBhc3NvY2lhdGVkIG5hbWVzCiAgKiBAbWF4X3BrdDogbWF4aW11bSBwYWNrZXQgc2l6ZSAiaGludCIgdXNlZCB3aGVuIGJ1aWxkaW5nIG1lc3NhZ2VzIHNlbnQgYnkgcG9ydAotICogQHJlZjogdW5pcXVlIHJlZmVyZW5jZSB0byBwb3J0IGluIFRJUEMgb2JqZWN0IHJlZ2lzdHJ5CisgKiBAcG9ydGlkOiB1bmlxdWUgcG9ydCBpZGVudGl0eSBpbiBUSVBDIHNvY2tldCBoYXNoIHRhYmxlCiAgKiBAcGhkcjogcHJlZm9ybWF0dGVkIG1lc3NhZ2UgaGVhZGVyIHVzZWQgd2hlbiBzZW5kaW5nIG1lc3NhZ2VzCiAgKiBAcG9ydF9saXN0OiBhZGphY2VudCBwb3J0cyBpbiBUSVBDJ3MgZ2xvYmFsIGxpc3Qgb2YgcG9ydHMKICAqIEBwdWJsaWNhdGlvbnM6IGxpc3Qgb2YgcHVibGljYXRpb25zIGZvciBwb3J0CiAgKiBAcHViX2NvdW50OiB0b3RhbCAjIG9mIHB1YmxpY2F0aW9ucyBwb3J0IGhhcyBtYWRlIGR1cmluZyBpdHMgbGlmZXRpbWUKICAqIEBwcm9iaW5nX3N0YXRlOgotICogQHByb2JpbmdfaW50ZXJ2YWw6Ci0gKiBAdGltZXI6Ci0gKiBAcG9ydDogcG9ydCAtIGludGVyYWN0cyB3aXRoICdzaycgYW5kIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFRJUEMgc3RhY2sKLSAqIEBwZWVyX25hbWU6IHRoZSBwZWVyIG9mIHRoZSBjb25uZWN0aW9uLCBpZiBhbnkKKyAqIEBwcm9iaW5nX2ludHY6CiAgKiBAY29ubl90aW1lb3V0OiB0aGUgdGltZSB3ZSBjYW4gd2FpdCBmb3IgYW4gdW5yZXNwb25kZWQgc2V0dXAgcmVxdWVzdAogICogQGR1cGxfcmN2Y250OiBudW1iZXIgb2YgYnl0ZXMgY291bnRlZCB0d2ljZSwgaW4gYm90aCBiYWNrbG9nIGFuZCByY3YgcXVldWUKICAqIEBsaW5rX2Nvbmc6IG5vbi16ZXJvIGlmIG93bmVyIG11c3Qgc2xlZXAgYmVjYXVzZSBvZiBsaW5rIGNvbmdlc3Rpb24KICAqIEBzZW50X3VuYWNrZWQ6ICMgbWVzc2FnZXMgc2VudCBieSBzb2NrZXQsIGFuZCBub3QgeWV0IGFja2VkIGJ5IHBlZXIKICAqIEByY3ZfdW5hY2tlZDogIyBtZXNzYWdlcyByZWFkIGJ5IHVzZXIsIGJ1dCBub3QgeWV0IGFja2VkIGJhY2sgdG8gcGVlcgorICogQG5vZGU6IGhhc2ggdGFibGUgbm9kZQorICogQHJjdTogcmN1IHN0cnVjdCBmb3IgdGlwY19zb2NrCiAgKi8KIHN0cnVjdCB0aXBjX3NvY2sgewogCXN0cnVjdCBzb2NrIHNrOwpAQCAtODIsMTkgKzg0LDIwIEBACiAJdTMyIGNvbm5faW5zdGFuY2U7CiAJaW50IHB1Ymxpc2hlZDsKIAl1MzIgbWF4X3BrdDsKLQl1MzIgcmVmOworCXUzMiBwb3J0aWQ7CiAJc3RydWN0IHRpcGNfbXNnIHBoZHI7CiAJc3RydWN0IGxpc3RfaGVhZCBzb2NrX2xpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBwdWJsaWNhdGlvbnM7CiAJdTMyIHB1Yl9jb3VudDsKIAl1MzIgcHJvYmluZ19zdGF0ZTsKLQl1MzIgcHJvYmluZ19pbnRlcnZhbDsKLQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwl1bnNpZ25lZCBsb25nIHByb2JpbmdfaW50djsKIAl1aW50IGNvbm5fdGltZW91dDsKIAlhdG9taWNfdCBkdXBsX3JjdmNudDsKIAlib29sIGxpbmtfY29uZzsKIAl1aW50IHNlbnRfdW5hY2tlZDsKIAl1aW50IHJjdl91bmFja2VkOworCXN0cnVjdCByaGFzaF9oZWFkIG5vZGU7CisJc3RydWN0IHJjdV9oZWFkIHJjdTsKIH07CiAKIHN0YXRpYyBpbnQgdGlwY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTAzLDE2ICsxMDYsMTQgQEAKIHN0YXRpYyBpbnQgdGlwY19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spOwogc3RhdGljIGludCB0aXBjX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICpuZXdfc29jaywgaW50IGZsYWdzKTsKIHN0YXRpYyBpbnQgdGlwY193YWl0X2Zvcl9zbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgbG9uZyAqdGltZW9fcCk7Ci1zdGF0aWMgdm9pZCB0aXBjX3NrX3RpbWVvdXQodW5zaWduZWQgbG9uZyByZWYpOworc3RhdGljIHZvaWQgdGlwY19za190aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSk7CiBzdGF0aWMgaW50IHRpcGNfc2tfcHVibGlzaChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHVpbnQgc2NvcGUsCiAJCQkgICBzdHJ1Y3QgdGlwY19uYW1lX3NlcSBjb25zdCAqc2VxKTsKIHN0YXRpYyBpbnQgdGlwY19za193aXRoZHJhdyhzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHVpbnQgc2NvcGUsCiAJCQkgICAgc3RydWN0IHRpcGNfbmFtZV9zZXEgY29uc3QgKnNlcSk7Ci1zdGF0aWMgdTMyIHRpcGNfc2tfcmVmX2FjcXVpcmUoc3RydWN0IHRpcGNfc29jayAqdHNrKTsKLXN0YXRpYyB2b2lkIHRpcGNfc2tfcmVmX2Rpc2NhcmQodTMyIHJlZik7Ci1zdGF0aWMgc3RydWN0IHRpcGNfc29jayAqdGlwY19za19nZXQodTMyIHJlZik7Ci1zdGF0aWMgc3RydWN0IHRpcGNfc29jayAqdGlwY19za19nZXRfbmV4dCh1MzIgKnJlZik7Ci1zdGF0aWMgdm9pZCB0aXBjX3NrX3B1dChzdHJ1Y3QgdGlwY19zb2NrICp0c2spOworc3RhdGljIHN0cnVjdCB0aXBjX3NvY2sgKnRpcGNfc2tfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBvcnRpZCk7CitzdGF0aWMgaW50IHRpcGNfc2tfaW5zZXJ0KHN0cnVjdCB0aXBjX3NvY2sgKnRzayk7CitzdGF0aWMgdm9pZCB0aXBjX3NrX3JlbW92ZShzdHJ1Y3QgdGlwY19zb2NrICp0c2spOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgc3RyZWFtX29wczsKQEAgLTE3NCw2ICsxNzUsMTEgQEAKICAqICAgLSBwb3J0IHJlZmVyZW5jZQogICovCiAKK3N0YXRpYyB1MzIgdHNrX293bl9ub2RlKHN0cnVjdCB0aXBjX3NvY2sgKnRzaykKK3sKKwlyZXR1cm4gbXNnX3ByZXZub2RlKCZ0c2stPnBoZHIpOworfQorCiBzdGF0aWMgdTMyIHRza19wZWVyX25vZGUoc3RydWN0IHRpcGNfc29jayAqdHNrKQogewogCXJldHVybiBtc2dfZGVzdG5vZGUoJnRzay0+cGhkcik7CkBAIC0yNDYsMTAgKzI1MiwxMSBAQAogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTMyIGRub2RlOworCXUzMiBvd25fbm9kZSA9IHRza19vd25fbm9kZSh0aXBjX3NrKHNrKSk7CiAKIAl3aGlsZSAoKHNrYiA9IF9fc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkpIHsKLQkJaWYgKHRpcGNfbXNnX3JldmVyc2Uoc2tiLCAmZG5vZGUsIFRJUENfRVJSX05PX1BPUlQpKQotCQkJdGlwY19saW5rX3htaXRfc2tiKHNrYiwgZG5vZGUsIDApOworCQlpZiAodGlwY19tc2dfcmV2ZXJzZShvd25fbm9kZSwgc2tiLCAmZG5vZGUsIFRJUENfRVJSX05PX1BPUlQpKQorCQkJdGlwY19saW5rX3htaXRfc2tiKHNvY2tfbmV0KHNrKSwgc2tiLCBkbm9kZSwgMCk7CiAJfQogfQogCkBAIC0yNjAsNiArMjY3LDcgQEAKICAqLwogc3RhdGljIGJvb2wgdHNrX3BlZXJfbXNnKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgc3RydWN0IHRpcGNfbXNnICptc2cpCiB7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKHNvY2tfbmV0KCZ0c2stPnNrKSwgdGlwY19uZXRfaWQpOwogCXUzMiBwZWVyX3BvcnQgPSB0c2tfcGVlcl9wb3J0KHRzayk7CiAJdTMyIG9yaWdfbm9kZTsKIAl1MzIgcGVlcl9ub2RlOwpAQCAtMjc2LDEwICsyODQsMTAgQEAKIAlpZiAobGlrZWx5KG9yaWdfbm9kZSA9PSBwZWVyX25vZGUpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWlmICghb3JpZ19ub2RlICYmIChwZWVyX25vZGUgPT0gdGlwY19vd25fYWRkcikpCisJaWYgKCFvcmlnX25vZGUgJiYgKHBlZXJfbm9kZSA9PSB0bi0+b3duX2FkZHIpKQogCQlyZXR1cm4gdHJ1ZTsKIAotCWlmICghcGVlcl9ub2RlICYmIChvcmlnX25vZGUgPT0gdGlwY19vd25fYWRkcikpCisJaWYgKCFwZWVyX25vZGUgJiYgKG9yaWdfbm9kZSA9PSB0bi0+b3duX2FkZHIpKQogCQlyZXR1cm4gdHJ1ZTsKIAogCXJldHVybiBmYWxzZTsKQEAgLTMwMCwxMiArMzA4LDEyIEBACiBzdGF0aWMgaW50IHRpcGNfc2tfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCSAgaW50IHByb3RvY29sLCBpbnQga2VybikKIHsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuOwogCWNvbnN0IHN0cnVjdCBwcm90b19vcHMgKm9wczsKIAlzb2NrZXRfc3RhdGUgc3RhdGU7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCB0aXBjX3NvY2sgKnRzazsKIAlzdHJ1Y3QgdGlwY19tc2cgKm1zZzsKLQl1MzIgcmVmOwogCiAJLyogVmFsaWRhdGUgYXJndW1lbnRzICovCiAJaWYgKHVubGlrZWx5KHByb3RvY29sICE9IDApKQpAQCAtMzM5LDI0ICszNDcsMjMgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAl0c2sgPSB0aXBjX3NrKHNrKTsKLQlyZWYgPSB0aXBjX3NrX3JlZl9hY3F1aXJlKHRzayk7Ci0JaWYgKCFyZWYpIHsKLQkJcHJfd2FybigiU29ja2V0IGNyZWF0ZSBmYWlsZWQ7IHJlZmVyZW5jZSB0YWJsZSBleGhhdXN0ZWRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJdHNrLT5tYXhfcGt0ID0gTUFYX1BLVF9ERUZBVUxUOwotCXRzay0+cmVmID0gcmVmOwogCUlOSVRfTElTVF9IRUFEKCZ0c2stPnB1YmxpY2F0aW9ucyk7CiAJbXNnID0gJnRzay0+cGhkcjsKLQl0aXBjX21zZ19pbml0KG1zZywgVElQQ19MT1dfSU1QT1JUQU5DRSwgVElQQ19OQU1FRF9NU0csCisJdG4gPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChzayksIHRpcGNfbmV0X2lkKTsKKwl0aXBjX21zZ19pbml0KHRuLT5vd25fYWRkciwgbXNnLCBUSVBDX0xPV19JTVBPUlRBTkNFLCBUSVBDX05BTUVEX01TRywKIAkJICAgICAgTkFNRURfSF9TSVpFLCAwKTsKLQltc2dfc2V0X29yaWdwb3J0KG1zZywgcmVmKTsKIAogCS8qIEZpbmlzaCBpbml0aWFsaXppbmcgc29ja2V0IGRhdGEgc3RydWN0dXJlcyAqLwogCXNvY2stPm9wcyA9IG9wczsKIAlzb2NrLT5zdGF0ZSA9IHN0YXRlOwogCXNvY2tfaW5pdF9kYXRhKHNvY2ssIHNrKTsKLQlrX2luaXRfdGltZXIoJnRzay0+dGltZXIsIChIYW5kbGVyKXRpcGNfc2tfdGltZW91dCwgcmVmKTsKKwlpZiAodGlwY19za19pbnNlcnQodHNrKSkgeworCQlwcl93YXJuKCJTb2NrZXQgY3JlYXRlIGZhaWxlZDsgcG9ydCBudW1icmVyIGV4aGF1c3RlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwltc2dfc2V0X29yaWdwb3J0KG1zZywgdHNrLT5wb3J0aWQpOworCXNldHVwX3RpbWVyKCZzay0+c2tfdGltZXIsIHRpcGNfc2tfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpdHNrKTsKIAlzay0+c2tfYmFja2xvZ19yY3YgPSB0aXBjX2JhY2tsb2dfcmN2OwogCXNrLT5za19yY3ZidWYgPSBzeXNjdGxfdGlwY19ybWVtWzFdOwogCXNrLT5za19kYXRhX3JlYWR5ID0gdGlwY19kYXRhX3JlYWR5OwpAQCAtMzg0LDcgKzM5MSw3IEBACiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGVycm5vIG90aGVyd2lzZQogICovCi1pbnQgdGlwY19zb2NrX2NyZWF0ZV9sb2NhbChpbnQgdHlwZSwgc3RydWN0IHNvY2tldCAqKnJlcykKK2ludCB0aXBjX3NvY2tfY3JlYXRlX2xvY2FsKHN0cnVjdCBuZXQgKm5ldCwgaW50IHR5cGUsIHN0cnVjdCBzb2NrZXQgKipyZXMpCiB7CiAJaW50IHJjOwogCkBAIC0zOTMsNyArNDAwLDcgQEAKIAkJcHJfZXJyKCJGYWlsZWQgdG8gY3JlYXRlIGtlcm5lbCBzb2NrZXRcbiIpOwogCQlyZXR1cm4gcmM7CiAJfQotCXRpcGNfc2tfY3JlYXRlKCZpbml0X25ldCwgKnJlcywgMCwgMSk7CisJdGlwY19za19jcmVhdGUobmV0LCAqcmVzLCAwLCAxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDQyLDYgKzQ0OSwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIHRpcGNfc2tfY2FsbGJhY2soc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCB0aXBjX3NvY2sgKnRzayA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdGlwY19zb2NrLCByY3UpOworCisJc29ja19wdXQoJnRzay0+c2spOworfQorCiAvKioKICAqIHRpcGNfcmVsZWFzZSAtIGRlc3Ryb3kgYSBUSVBDIHNvY2tldAogICogQHNvY2s6IHNvY2tldCB0byBkZXN0cm95CkBAIC00NjEsOSArNDc1LDEwIEBACiBzdGF0aWMgaW50IHRpcGNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBuZXQgKm5ldDsKIAlzdHJ1Y3QgdGlwY19zb2NrICp0c2s7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1MzIgZG5vZGU7CisJdTMyIGRub2RlLCBwcm9iaW5nX3N0YXRlOwogCiAJLyoKIAkgKiBFeGl0IGlmIHNvY2tldCBpc24ndCBmdWxseSBpbml0aWFsaXplZCAob2NjdXJzIHdoZW4gYSBmYWlsZWQgYWNjZXB0KCkKQEAgLTQ3Miw2ICs0ODcsNyBAQAogCWlmIChzayA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAorCW5ldCA9IHNvY2tfbmV0KHNrKTsKIAl0c2sgPSB0aXBjX3NrKHNrKTsKIAlsb2NrX3NvY2soc2spOwogCkBAIC00OTEsMjYgKzUwNywyOSBAQAogCQkJICAgIChzb2NrLT5zdGF0ZSA9PSBTU19DT05ORUNURUQpKSB7CiAJCQkJc29jay0+c3RhdGUgPSBTU19ESVNDT05ORUNUSU5HOwogCQkJCXRzay0+Y29ubmVjdGVkID0gMDsKLQkJCQl0aXBjX25vZGVfcmVtb3ZlX2Nvbm4oZG5vZGUsIHRzay0+cmVmKTsKKwkJCQl0aXBjX25vZGVfcmVtb3ZlX2Nvbm4obmV0LCBkbm9kZSwgdHNrLT5wb3J0aWQpOwogCQkJfQotCQkJaWYgKHRpcGNfbXNnX3JldmVyc2Uoc2tiLCAmZG5vZGUsIFRJUENfRVJSX05PX1BPUlQpKQotCQkJCXRpcGNfbGlua194bWl0X3NrYihza2IsIGRub2RlLCAwKTsKKwkJCWlmICh0aXBjX21zZ19yZXZlcnNlKHRza19vd25fbm9kZSh0c2spLCBza2IsICZkbm9kZSwKKwkJCQkJICAgICBUSVBDX0VSUl9OT19QT1JUKSkKKwkJCQl0aXBjX2xpbmtfeG1pdF9za2IobmV0LCBza2IsIGRub2RlLCAwKTsKIAkJfQogCX0KIAogCXRpcGNfc2tfd2l0aGRyYXcodHNrLCAwLCBOVUxMKTsKLQl0aXBjX3NrX3JlZl9kaXNjYXJkKHRzay0+cmVmKTsKLQlrX2NhbmNlbF90aW1lcigmdHNrLT50aW1lcik7CisJcHJvYmluZ19zdGF0ZSA9IHRzay0+cHJvYmluZ19zdGF0ZTsKKwlpZiAoZGVsX3RpbWVyX3N5bmMoJnNrLT5za190aW1lcikgJiYKKwkgICAgcHJvYmluZ19zdGF0ZSAhPSBUSVBDX0NPTk5fUFJPQklORykKKwkJc29ja19wdXQoc2spOworCXRpcGNfc2tfcmVtb3ZlKHRzayk7CiAJaWYgKHRzay0+Y29ubmVjdGVkKSB7Ci0JCXNrYiA9IHRpcGNfbXNnX2NyZWF0ZShUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UsIFRJUENfQ09OTl9NU0csCi0JCQkJICAgICAgU0hPUlRfSF9TSVpFLCAwLCBkbm9kZSwgdGlwY19vd25fYWRkciwKLQkJCQkgICAgICB0c2tfcGVlcl9wb3J0KHRzayksCi0JCQkJICAgICAgdHNrLT5yZWYsIFRJUENfRVJSX05PX1BPUlQpOworCQlza2IgPSB0aXBjX21zZ19jcmVhdGUoVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFLAorCQkJCSAgICAgIFRJUENfQ09OTl9NU0csIFNIT1JUX0hfU0laRSwgMCwgZG5vZGUsCisJCQkJICAgICAgdHNrX293bl9ub2RlKHRzayksIHRza19wZWVyX3BvcnQodHNrKSwKKwkJCQkgICAgICB0c2stPnBvcnRpZCwgVElQQ19FUlJfTk9fUE9SVCk7CiAJCWlmIChza2IpCi0JCQl0aXBjX2xpbmtfeG1pdF9za2Ioc2tiLCBkbm9kZSwgdHNrLT5yZWYpOwotCQl0aXBjX25vZGVfcmVtb3ZlX2Nvbm4oZG5vZGUsIHRzay0+cmVmKTsKKwkJCXRpcGNfbGlua194bWl0X3NrYihuZXQsIHNrYiwgZG5vZGUsIHRzay0+cG9ydGlkKTsKKwkJdGlwY19ub2RlX3JlbW92ZV9jb25uKG5ldCwgZG5vZGUsIHRzay0+cG9ydGlkKTsKIAl9Ci0Ja190ZXJtX3RpbWVyKCZ0c2stPnRpbWVyKTsKIAogCS8qIERpc2NhcmQgYW55IHJlbWFpbmluZyAoY29ubmVjdGlvbi1iYXNlZCkgbWVzc2FnZXMgaW4gcmVjZWl2ZSBxdWV1ZSAqLwogCV9fc2tiX3F1ZXVlX3B1cmdlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CkBAIC01MTgsNyArNTM3LDggQEAKIAkvKiBSZWplY3QgYW55IG1lc3NhZ2VzIHRoYXQgYWNjdW11bGF0ZWQgaW4gYmFja2xvZyBxdWV1ZSAqLwogCXNvY2stPnN0YXRlID0gU1NfRElTQ09OTkVDVElORzsKIAlyZWxlYXNlX3NvY2soc2spOwotCXNvY2tfcHV0KHNrKTsKKworCWNhbGxfcmN1KCZ0c2stPnJjdSwgdGlwY19za19jYWxsYmFjayk7CiAJc29jay0+c2sgPSBOVUxMOwogCiAJcmV0dXJuIDA7CkBAIC02MDIsNiArNjIyLDcgQEAKIHsKIAlzdHJ1Y3Qgc29ja2FkZHJfdGlwYyAqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfdGlwYyAqKXVhZGRyOwogCXN0cnVjdCB0aXBjX3NvY2sgKnRzayA9IHRpcGNfc2soc29jay0+c2spOworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhzb2NrX25ldChzb2NrLT5zayksIHRpcGNfbmV0X2lkKTsKIAogCW1lbXNldChhZGRyLCAwLCBzaXplb2YoKmFkZHIpKTsKIAlpZiAocGVlcikgewpAQCAtNjExLDggKzYzMiw4IEBACiAJCWFkZHItPmFkZHIuaWQucmVmID0gdHNrX3BlZXJfcG9ydCh0c2spOwogCQlhZGRyLT5hZGRyLmlkLm5vZGUgPSB0c2tfcGVlcl9ub2RlKHRzayk7CiAJfSBlbHNlIHsKLQkJYWRkci0+YWRkci5pZC5yZWYgPSB0c2stPnJlZjsKLQkJYWRkci0+YWRkci5pZC5ub2RlID0gdGlwY19vd25fYWRkcjsKKwkJYWRkci0+YWRkci5pZC5yZWYgPSB0c2stPnBvcnRpZDsKKwkJYWRkci0+YWRkci5pZC5ub2RlID0gdG4tPm93bl9hZGRyOwogCX0KIAogCSp1YWRkcl9sZW4gPSBzaXplb2YoKmFkZHIpOwpAQCAtNzExLDggKzczMiwxMSBAQAogCQkJICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBkc3osIGxvbmcgdGltZW8pCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IHRpcGNfbXNnICptaGRyID0gJnRpcGNfc2soc2spLT5waGRyOwotCXN0cnVjdCBza19idWZmX2hlYWQgaGVhZDsKKwlzdHJ1Y3QgdGlwY19zb2NrICp0c2sgPSB0aXBjX3NrKHNrKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CisJc3RydWN0IHRpcGNfbXNnICptaGRyID0gJnRzay0+cGhkcjsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpwa3RjaGFpbiA9ICZzay0+c2tfd3JpdGVfcXVldWU7CisJc3RydWN0IGlvdl9pdGVyIHNhdmUgPSBtc2ctPm1zZ19pdGVyOwogCXVpbnQgbXR1OwogCWludCByYzsKIApAQCAtNzI3LDgzICs3NTEsOTcgQEAKIAogbmV3X210dToKIAltdHUgPSB0aXBjX2JjbGlua19nZXRfbXR1KCk7Ci0JX19za2JfcXVldWVfaGVhZF9pbml0KCZoZWFkKTsKLQlyYyA9IHRpcGNfbXNnX2J1aWxkKG1oZHIsIG1zZywgMCwgZHN6LCBtdHUsICZoZWFkKTsKKwlyYyA9IHRpcGNfbXNnX2J1aWxkKG1oZHIsIG1zZywgMCwgZHN6LCBtdHUsIHBrdGNoYWluKTsKIAlpZiAodW5saWtlbHkocmMgPCAwKSkKIAkJcmV0dXJuIHJjOwogCiAJZG8gewotCQlyYyA9IHRpcGNfYmNsaW5rX3htaXQoJmhlYWQpOworCQlyYyA9IHRpcGNfYmNsaW5rX3htaXQobmV0LCBwa3RjaGFpbik7CiAJCWlmIChsaWtlbHkocmMgPj0gMCkpIHsKIAkJCXJjID0gZHN6OwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKHJjID09IC1FTVNHU0laRSkKKwkJaWYgKHJjID09IC1FTVNHU0laRSkgeworCQkJbXNnLT5tc2dfaXRlciA9IHNhdmU7CiAJCQlnb3RvIG5ld19tdHU7CisJCX0KIAkJaWYgKHJjICE9IC1FTElOS0NPTkcpCiAJCQlicmVhazsKIAkJdGlwY19zayhzayktPmxpbmtfY29uZyA9IDE7CiAJCXJjID0gdGlwY193YWl0X2Zvcl9zbmRtc2coc29jaywgJnRpbWVvKTsKIAkJaWYgKHJjKQotCQkJX19za2JfcXVldWVfcHVyZ2UoJmhlYWQpOworCQkJX19za2JfcXVldWVfcHVyZ2UocGt0Y2hhaW4pOwogCX0gd2hpbGUgKCFyYyk7CiAJcmV0dXJuIHJjOwogfQogCi0vKiB0aXBjX3NrX21jYXN0X3JjdiAtIERlbGl2ZXIgbXVsdGljYXN0IG1lc3NhZ2UgdG8gYWxsIGRlc3RpbmF0aW9uIHNvY2tldHMKKy8qKgorICogdGlwY19za19tY2FzdF9yY3YgLSBEZWxpdmVyIG11bHRpY2FzdCBtZXNzYWdlcyB0byBhbGwgZGVzdGluYXRpb24gc29ja2V0cworICogQGFycnZxOiBxdWV1ZSB3aXRoIGFycml2aW5nIG1lc3NhZ2VzLCB0byBiZSBjbG9uZWQgYWZ0ZXIgZGVzdGluYXRpb24gbG9va3VwCisgKiBAaW5wdXRxOiBxdWV1ZSB3aXRoIGNsb25lZCBtZXNzYWdlcywgZGVsaXZlcmVkIHRvIHNvY2tldCBhZnRlciBkZXN0IGxvb2t1cAorICoKKyAqIE11bHRpLXRocmVhZGVkOiBwYXJhbGxlbCBjYWxscyB3aXRoIHJlZmVyZW5jZSB0byBzYW1lIHF1ZXVlcyBtYXkgb2NjdXIKICAqLwotdm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3Qgc2tfYnVmZiAqYnVmKQordm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLAorCQkgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxKQogewotCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZyhidWYpOwotCXN0cnVjdCB0aXBjX3BvcnRfbGlzdCBkcG9ydHMgPSB7MCwgTlVMTCwgfTsKLQlzdHJ1Y3QgdGlwY19wb3J0X2xpc3QgKml0ZW07Ci0Jc3RydWN0IHNrX2J1ZmYgKmI7Ci0JdWludCBpLCBsYXN0LCBkc3QgPSAwOworCXN0cnVjdCB0aXBjX21zZyAqbXNnOworCXN0cnVjdCB0aXBjX3BsaXN0IGRwb3J0czsKKwl1MzIgcG9ydGlkOwogCXUzMiBzY29wZSA9IFRJUENfQ0xVU1RFUl9TQ09QRTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHRtcHE7CisJdWludCBoc3o7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKl9za2I7CiAKLQlpZiAoaW5fb3duX25vZGUobXNnX29yaWdub2RlKG1zZykpKQotCQlzY29wZSA9IFRJUENfTk9ERV9TQ09QRTsKKwlfX3NrYl9xdWV1ZV9oZWFkX2luaXQoJnRtcHEpOworCXRpcGNfcGxpc3RfaW5pdCgmZHBvcnRzKTsKIAotCS8qIENyZWF0ZSBkZXN0aW5hdGlvbiBwb3J0IGxpc3Q6ICovCi0JdGlwY19uYW1ldGJsX21jX3RyYW5zbGF0ZShtc2dfbmFtZXR5cGUobXNnKSwKLQkJCQkgIG1zZ19uYW1lbG93ZXIobXNnKSwKLQkJCQkgIG1zZ19uYW1ldXBwZXIobXNnKSwKLQkJCQkgIHNjb3BlLAotCQkJCSAgJmRwb3J0cyk7Ci0JbGFzdCA9IGRwb3J0cy5jb3VudDsKLQlpZiAoIWxhc3QpIHsKLQkJa2ZyZWVfc2tiKGJ1Zik7Ci0JCXJldHVybjsKLQl9CisJc2tiID0gdGlwY19za2JfcGVlayhhcnJ2cSwgJmlucHV0cS0+bG9jayk7CisJZm9yICg7IHNrYjsgc2tiID0gdGlwY19za2JfcGVlayhhcnJ2cSwgJmlucHV0cS0+bG9jaykpIHsKKwkJbXNnID0gYnVmX21zZyhza2IpOworCQloc3ogPSBza2JfaGVhZHJvb20oc2tiKSArIG1zZ19oZHJfc3oobXNnKTsKIAotCWZvciAoaXRlbSA9ICZkcG9ydHM7IGl0ZW07IGl0ZW0gPSBpdGVtLT5uZXh0KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBQTFNJWkUgJiYgKytkc3QgPD0gbGFzdDsgaSsrKSB7Ci0JCQliID0gKGRzdCAhPSBsYXN0KSA/IHNrYl9jbG9uZShidWYsIEdGUF9BVE9NSUMpIDogYnVmOwotCQkJaWYgKCFiKSB7Ci0JCQkJcHJfd2FybigiRmFpbGVkIGRvIGNsb25lIG1jYXN0IHJjdiBidWZmZXJcbiIpOworCQlpZiAoaW5fb3duX25vZGUobmV0LCBtc2dfb3JpZ25vZGUobXNnKSkpCisJCQlzY29wZSA9IFRJUENfTk9ERV9TQ09QRTsKKworCQkvKiBDcmVhdGUgZGVzdGluYXRpb24gcG9ydCBsaXN0IGFuZCBtZXNzYWdlIGNsb25lczogKi8KKwkJdGlwY19uYW1ldGJsX21jX3RyYW5zbGF0ZShuZXQsCisJCQkJCSAgbXNnX25hbWV0eXBlKG1zZyksIG1zZ19uYW1lbG93ZXIobXNnKSwKKwkJCQkJICBtc2dfbmFtZXVwcGVyKG1zZyksIHNjb3BlLCAmZHBvcnRzKTsKKwkJcG9ydGlkID0gdGlwY19wbGlzdF9wb3AoJmRwb3J0cyk7CisJCWZvciAoOyBwb3J0aWQ7IHBvcnRpZCA9IHRpcGNfcGxpc3RfcG9wKCZkcG9ydHMpKSB7CisJCQlfc2tiID0gX19wc2tiX2NvcHkoc2tiLCBoc3osIEdGUF9BVE9NSUMpOworCQkJaWYgKF9za2IpIHsKKwkJCQltc2dfc2V0X2Rlc3Rwb3J0KGJ1Zl9tc2coX3NrYiksIHBvcnRpZCk7CisJCQkJX19za2JfcXVldWVfdGFpbCgmdG1wcSwgX3NrYik7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQltc2dfc2V0X2Rlc3Rwb3J0KG1zZywgaXRlbS0+cG9ydHNbaV0pOwotCQkJdGlwY19za19yY3YoYik7CisJCQlwcl93YXJuKCJGYWlsZWQgdG8gY2xvbmUgbWNhc3QgcmN2IGJ1ZmZlclxuIik7CiAJCX0KKwkJLyogQXBwZW5kIHRvIGlucHV0cSBpZiBub3QgYWxyZWFkeSBkb25lIGJ5IG90aGVyIHRocmVhZCAqLworCQlzcGluX2xvY2tfYmgoJmlucHV0cS0+bG9jayk7CisJCWlmIChza2JfcGVlayhhcnJ2cSkgPT0gc2tiKSB7CisJCQlza2JfcXVldWVfc3BsaWNlX3RhaWxfaW5pdCgmdG1wcSwgaW5wdXRxKTsKKwkJCWtmcmVlX3NrYihfX3NrYl9kZXF1ZXVlKGFycnZxKSk7CisJCX0KKwkJc3Bpbl91bmxvY2tfYmgoJmlucHV0cS0+bG9jayk7CisJCV9fc2tiX3F1ZXVlX3B1cmdlKCZ0bXBxKTsKKwkJa2ZyZWVfc2tiKHNrYik7CiAJfQotCXRpcGNfcG9ydF9saXN0X2ZyZWUoJmRwb3J0cyk7CisJdGlwY19za19yY3YobmV0LCBpbnB1dHEpOwogfQogCiAvKioKICAqIHRpcGNfc2tfcHJvdG9fcmN2IC0gcmVjZWl2ZSBhIGNvbm5lY3Rpb24gbW5nIHByb3RvY29sIG1lc3NhZ2UKICAqIEB0c2s6IHJlY2VpdmluZyBzb2NrZXQKLSAqIEBkbm9kZTogbm9kZSB0byBzZW5kIHJlc3BvbnNlIG1lc3NhZ2UgdG8sIGlmIGFueQotICogQGJ1ZjogYnVmZmVyIGNvbnRhaW5pbmcgcHJvdG9jb2wgbWVzc2FnZQotICogUmV0dXJucyAwIChUSVBDX09LKSBpZiBtZXNzYWdlIHdhcyBjb25zdW1lZCwgMSAoVElQQ19GV0RfTVNHKSBpZgotICogKENPTk5fUFJPQkVfUkVQTFkpIG1lc3NhZ2Ugc2hvdWxkIGJlIGZvcndhcmRlZC4KKyAqIEBza2I6IHBvaW50ZXIgdG8gbWVzc2FnZSBidWZmZXIuIFNldCB0byBOVUxMIGlmIGJ1ZmZlciBpcyBjb25zdW1lZC4KICAqLwotc3RhdGljIGludCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHUzMiAqZG5vZGUsCi0JCQkgICAgIHN0cnVjdCBza19idWZmICpidWYpCitzdGF0aWMgdm9pZCB0aXBjX3NrX3Byb3RvX3JjdihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICoqc2tiKQogewotCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZyhidWYpOworCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZygqc2tiKTsKIAlpbnQgY29ubl9jb25nOwotCisJdTMyIGRub2RlOworCXUzMiBvd25fbm9kZSA9IHRza19vd25fbm9kZSh0c2spOwogCS8qIElnbm9yZSBpZiBjb25uZWN0aW9uIGNhbm5vdCBiZSB2YWxpZGF0ZWQ6ICovCiAJaWYgKCF0c2tfcGVlcl9tc2codHNrLCBtc2cpKQogCQlnb3RvIGV4aXQ7CkBAIC04MTYsMTUgKzg1NCwxNSBAQAogCQlpZiAoY29ubl9jb25nKQogCQkJdHNrLT5zay5za193cml0ZV9zcGFjZSgmdHNrLT5zayk7CiAJfSBlbHNlIGlmIChtc2dfdHlwZShtc2cpID09IENPTk5fUFJPQkUpIHsKLQkJaWYgKCF0aXBjX21zZ19yZXZlcnNlKGJ1ZiwgZG5vZGUsIFRJUENfT0spKQotCQkJcmV0dXJuIFRJUENfT0s7Ci0JCW1zZ19zZXRfdHlwZShtc2csIENPTk5fUFJPQkVfUkVQTFkpOwotCQlyZXR1cm4gVElQQ19GV0RfTVNHOworCQlpZiAodGlwY19tc2dfcmV2ZXJzZShvd25fbm9kZSwgKnNrYiwgJmRub2RlLCBUSVBDX09LKSkgeworCQkJbXNnX3NldF90eXBlKG1zZywgQ09OTl9QUk9CRV9SRVBMWSk7CisJCQlyZXR1cm47CisJCX0KIAl9CiAJLyogRG8gbm90aGluZyBpZiBtc2dfdHlwZSgpID09IENPTk5fUFJPQkVfUkVQTFkgKi8KIGV4aXQ6Ci0Ja2ZyZWVfc2tiKGJ1Zik7Ci0JcmV0dXJuIFRJUENfT0s7CisJa2ZyZWVfc2tiKCpza2IpOworCSpza2IgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IHRpcGNfd2FpdF9mb3Jfc25kbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvX3ApCkBAIC04NzIsMTEgKzkxMCwxMyBAQAogCURFQ0xBUkVfU09DS0FERFIoc3RydWN0IHNvY2thZGRyX3RpcGMgKiwgZGVzdCwgbS0+bXNnX25hbWUpOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCB0aXBjX3NvY2sgKnRzayA9IHRpcGNfc2soc2spOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlzdHJ1Y3QgdGlwY19tc2cgKm1oZHIgPSAmdHNrLT5waGRyOwogCXUzMiBkbm9kZSwgZHBvcnQ7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBoZWFkOworCXN0cnVjdCBza19idWZmX2hlYWQgKnBrdGNoYWluID0gJnNrLT5za193cml0ZV9xdWV1ZTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCB0aXBjX25hbWVfc2VxICpzZXEgPSAmZGVzdC0+YWRkci5uYW1lc2VxOworCXN0cnVjdCBpb3ZfaXRlciBzYXZlOwogCXUzMiBtdHU7CiAJbG9uZyB0aW1lbzsKIAlpbnQgcmM7CkBAIC05MjksNyArOTY5LDcgQEAKIAkJbXNnX3NldF9uYW1ldHlwZShtaGRyLCB0eXBlKTsKIAkJbXNnX3NldF9uYW1laW5zdChtaGRyLCBpbnN0KTsKIAkJbXNnX3NldF9sb29rdXBfc2NvcGUobWhkciwgdGlwY19hZGRyX3Njb3BlKGRvbWFpbikpOwotCQlkcG9ydCA9IHRpcGNfbmFtZXRibF90cmFuc2xhdGUodHlwZSwgaW5zdCwgJmRub2RlKTsKKwkJZHBvcnQgPSB0aXBjX25hbWV0YmxfdHJhbnNsYXRlKG5ldCwgdHlwZSwgaW5zdCwgJmRub2RlKTsKIAkJbXNnX3NldF9kZXN0bm9kZShtaGRyLCBkbm9kZSk7CiAJCW1zZ19zZXRfZGVzdHBvcnQobWhkciwgZHBvcnQpOwogCQlpZiAodW5saWtlbHkoIWRwb3J0ICYmICFkbm9kZSkpIHsKQEAgLTk0NSwzMSArOTg1LDMzIEBACiAJCW1zZ19zZXRfaGRyX3N6KG1oZHIsIEJBU0lDX0hfU0laRSk7CiAJfQogCisJc2F2ZSA9IG0tPm1zZ19pdGVyOwogbmV3X210dToKLQltdHUgPSB0aXBjX25vZGVfZ2V0X210dShkbm9kZSwgdHNrLT5yZWYpOwotCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaGVhZCk7Ci0JcmMgPSB0aXBjX21zZ19idWlsZChtaGRyLCBtLCAwLCBkc3osIG10dSwgJmhlYWQpOworCW10dSA9IHRpcGNfbm9kZV9nZXRfbXR1KG5ldCwgZG5vZGUsIHRzay0+cG9ydGlkKTsKKwlyYyA9IHRpcGNfbXNnX2J1aWxkKG1oZHIsIG0sIDAsIGRzeiwgbXR1LCBwa3RjaGFpbik7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBleGl0OwogCiAJZG8gewotCQlza2IgPSBza2JfcGVlaygmaGVhZCk7CisJCXNrYiA9IHNrYl9wZWVrKHBrdGNoYWluKTsKIAkJVElQQ19TS0JfQ0Ioc2tiKS0+d2FrZXVwX3BlbmRpbmcgPSB0c2stPmxpbmtfY29uZzsKLQkJcmMgPSB0aXBjX2xpbmtfeG1pdCgmaGVhZCwgZG5vZGUsIHRzay0+cmVmKTsKKwkJcmMgPSB0aXBjX2xpbmtfeG1pdChuZXQsIHBrdGNoYWluLCBkbm9kZSwgdHNrLT5wb3J0aWQpOwogCQlpZiAobGlrZWx5KHJjID49IDApKSB7CiAJCQlpZiAoc29jay0+c3RhdGUgIT0gU1NfUkVBRFkpCiAJCQkJc29jay0+c3RhdGUgPSBTU19DT05ORUNUSU5HOwogCQkJcmMgPSBkc3o7CiAJCQlicmVhazsKIAkJfQotCQlpZiAocmMgPT0gLUVNU0dTSVpFKQorCQlpZiAocmMgPT0gLUVNU0dTSVpFKSB7CisJCQltLT5tc2dfaXRlciA9IHNhdmU7CiAJCQlnb3RvIG5ld19tdHU7CisJCX0KIAkJaWYgKHJjICE9IC1FTElOS0NPTkcpCiAJCQlicmVhazsKIAkJdHNrLT5saW5rX2NvbmcgPSAxOwogCQlyYyA9IHRpcGNfd2FpdF9mb3Jfc25kbXNnKHNvY2ssICZ0aW1lbyk7CiAJCWlmIChyYykKLQkJCV9fc2tiX3F1ZXVlX3B1cmdlKCZoZWFkKTsKKwkJCV9fc2tiX3F1ZXVlX3B1cmdlKHBrdGNoYWluKTsKIAl9IHdoaWxlICghcmMpOwogZXhpdDoKIAlpZiAoaW9jYikKQEAgLTEwMjQsMTUgKzEwNjYsMTcgQEAKIAkJCSAgICBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgZHN6KQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlzdHJ1Y3QgdGlwY19zb2NrICp0c2sgPSB0aXBjX3NrKHNrKTsKIAlzdHJ1Y3QgdGlwY19tc2cgKm1oZHIgPSAmdHNrLT5waGRyOwotCXN0cnVjdCBza19idWZmX2hlYWQgaGVhZDsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpwa3RjaGFpbiA9ICZzay0+c2tfd3JpdGVfcXVldWU7CiAJREVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfdGlwYyAqLCBkZXN0LCBtLT5tc2dfbmFtZSk7Ci0JdTMyIHJlZiA9IHRzay0+cmVmOworCXUzMiBwb3J0aWQgPSB0c2stPnBvcnRpZDsKIAlpbnQgcmMgPSAtRUlOVkFMOwogCWxvbmcgdGltZW87CiAJdTMyIGRub2RlOwogCXVpbnQgbXR1LCBzZW5kLCBzZW50ID0gMDsKKwlzdHJ1Y3QgaW92X2l0ZXIgc2F2ZTsKIAogCS8qIEhhbmRsZSBpbXBsaWVkIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudCAqLwogCWlmICh1bmxpa2VseShkZXN0KSkgewpAQCAtMTA1OSwxNSArMTEwMywxNSBAQAogCWRub2RlID0gdHNrX3BlZXJfbm9kZSh0c2spOwogCiBuZXh0OgorCXNhdmUgPSBtLT5tc2dfaXRlcjsKIAltdHUgPSB0c2stPm1heF9wa3Q7CiAJc2VuZCA9IG1pbl90KHVpbnQsIGRzeiAtIHNlbnQsIFRJUENfTUFYX1VTRVJfTVNHX1NJWkUpOwotCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaGVhZCk7Ci0JcmMgPSB0aXBjX21zZ19idWlsZChtaGRyLCBtLCBzZW50LCBzZW5kLCBtdHUsICZoZWFkKTsKKwlyYyA9IHRpcGNfbXNnX2J1aWxkKG1oZHIsIG0sIHNlbnQsIHNlbmQsIG10dSwgcGt0Y2hhaW4pOwogCWlmICh1bmxpa2VseShyYyA8IDApKQogCQlnb3RvIGV4aXQ7CiAJZG8gewogCQlpZiAobGlrZWx5KCF0c2tfY29ubl9jb25nKHRzaykpKSB7Ci0JCQlyYyA9IHRpcGNfbGlua194bWl0KCZoZWFkLCBkbm9kZSwgcmVmKTsKKwkJCXJjID0gdGlwY19saW5rX3htaXQobmV0LCBwa3RjaGFpbiwgZG5vZGUsIHBvcnRpZCk7CiAJCQlpZiAobGlrZWx5KCFyYykpIHsKIAkJCQl0c2stPnNlbnRfdW5hY2tlZCsrOwogCQkJCXNlbnQgKz0gc2VuZDsKQEAgLTEwNzYsNyArMTEyMCw5IEBACiAJCQkJZ290byBuZXh0OwogCQkJfQogCQkJaWYgKHJjID09IC1FTVNHU0laRSkgewotCQkJCXRzay0+bWF4X3BrdCA9IHRpcGNfbm9kZV9nZXRfbXR1KGRub2RlLCByZWYpOworCQkJCXRzay0+bWF4X3BrdCA9IHRpcGNfbm9kZV9nZXRfbXR1KG5ldCwgZG5vZGUsCisJCQkJCQkJCSBwb3J0aWQpOworCQkJCW0tPm1zZ19pdGVyID0gc2F2ZTsKIAkJCQlnb3RvIG5leHQ7CiAJCQl9CiAJCQlpZiAocmMgIT0gLUVMSU5LQ09ORykKQEAgLTEwODUsNyArMTEzMSw3IEBACiAJCX0KIAkJcmMgPSB0aXBjX3dhaXRfZm9yX3NuZHBrdChzb2NrLCAmdGltZW8pOwogCQlpZiAocmMpCi0JCQlfX3NrYl9xdWV1ZV9wdXJnZSgmaGVhZCk7CisJCQlfX3NrYl9xdWV1ZV9wdXJnZShwa3RjaGFpbik7CiAJfSB3aGlsZSAoIXJjKTsKIGV4aXQ6CiAJaWYgKGlvY2IpCkBAIC0xMTE4LDYgKzExNjQsOCBAQAogc3RhdGljIHZvaWQgdGlwY19za19maW5pc2hfY29ubihzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHUzMiBwZWVyX3BvcnQsCiAJCQkJdTMyIHBlZXJfbm9kZSkKIHsKKwlzdHJ1Y3Qgc29jayAqc2sgPSAmdHNrLT5zazsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IHRpcGNfbXNnICptc2cgPSAmdHNrLT5waGRyOwogCiAJbXNnX3NldF9kZXN0bm9kZShtc2csIHBlZXJfbm9kZSk7CkBAIC0xMTI2LDEyICsxMTc0LDEyIEBACiAJbXNnX3NldF9sb29rdXBfc2NvcGUobXNnLCAwKTsKIAltc2dfc2V0X2hkcl9zeihtc2csIFNIT1JUX0hfU0laRSk7CiAKLQl0c2stPnByb2JpbmdfaW50ZXJ2YWwgPSBDT05OX1BST0JJTkdfSU5URVJWQUw7CisJdHNrLT5wcm9iaW5nX2ludHYgPSBDT05OX1BST0JJTkdfSU5URVJWQUw7CiAJdHNrLT5wcm9iaW5nX3N0YXRlID0gVElQQ19DT05OX09LOwogCXRzay0+Y29ubmVjdGVkID0gMTsKLQlrX3N0YXJ0X3RpbWVyKCZ0c2stPnRpbWVyLCB0c2stPnByb2JpbmdfaW50ZXJ2YWwpOwotCXRpcGNfbm9kZV9hZGRfY29ubihwZWVyX25vZGUsIHRzay0+cmVmLCBwZWVyX3BvcnQpOwotCXRzay0+bWF4X3BrdCA9IHRpcGNfbm9kZV9nZXRfbXR1KHBlZXJfbm9kZSwgdHNrLT5yZWYpOworCXNrX3Jlc2V0X3RpbWVyKHNrLCAmc2stPnNrX3RpbWVyLCBqaWZmaWVzICsgdHNrLT5wcm9iaW5nX2ludHYpOworCXRpcGNfbm9kZV9hZGRfY29ubihuZXQsIHBlZXJfbm9kZSwgdHNrLT5wb3J0aWQsIHBlZXJfcG9ydCk7CisJdHNrLT5tYXhfcGt0ID0gdGlwY19ub2RlX2dldF9tdHUobmV0LCBwZWVyX25vZGUsIHRzay0+cG9ydGlkKTsKIH0KIAogLyoqCkBAIC0xMjMwLDYgKzEyNzgsNyBAQAogCiBzdGF0aWMgdm9pZCB0aXBjX3NrX3NlbmRfYWNrKHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgdWludCBhY2spCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoJnRzay0+c2spOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCXN0cnVjdCB0aXBjX21zZyAqbXNnOwogCXUzMiBwZWVyX3BvcnQgPSB0c2tfcGVlcl9wb3J0KHRzayk7CkBAIC0xMjM3LDEzICsxMjg2LDE0IEBACiAKIAlpZiAoIXRzay0+Y29ubmVjdGVkKQogCQlyZXR1cm47Ci0Jc2tiID0gdGlwY19tc2dfY3JlYXRlKENPTk5fTUFOQUdFUiwgQ09OTl9BQ0ssIElOVF9IX1NJWkUsIDAsIGRub2RlLAotCQkJICAgICAgdGlwY19vd25fYWRkciwgcGVlcl9wb3J0LCB0c2stPnJlZiwgVElQQ19PSyk7CisJc2tiID0gdGlwY19tc2dfY3JlYXRlKENPTk5fTUFOQUdFUiwgQ09OTl9BQ0ssIElOVF9IX1NJWkUsIDAsCisJCQkgICAgICBkbm9kZSwgdHNrX293bl9ub2RlKHRzayksIHBlZXJfcG9ydCwKKwkJCSAgICAgIHRzay0+cG9ydGlkLCBUSVBDX09LKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuOwogCW1zZyA9IGJ1Zl9tc2coc2tiKTsKIAltc2dfc2V0X21zZ2NudChtc2csIGFjayk7Ci0JdGlwY19saW5rX3htaXRfc2tiKHNrYiwgZG5vZGUsIG1zZ19saW5rX3NlbGVjdG9yKG1zZykpOworCXRpcGNfbGlua194bWl0X3NrYihuZXQsIHNrYiwgZG5vZGUsIG1zZ19saW5rX3NlbGVjdG9yKG1zZykpOwogfQogCiBzdGF0aWMgaW50IHRpcGNfd2FpdF9mb3JfcmN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGxvbmcgKnRpbWVvcCkKQEAgLTE1MjksMTUgKzE1NzksMTYgQEAKIC8qKgogICogZmlsdGVyX2Nvbm5lY3QgLSBIYW5kbGUgYWxsIGluY29taW5nIG1lc3NhZ2VzIGZvciBhIGNvbm5lY3Rpb24tYmFzZWQgc29ja2V0CiAgKiBAdHNrOiBUSVBDIHNvY2tldAotICogQG1zZzogbWVzc2FnZQorICogQHNrYjogcG9pbnRlciB0byBtZXNzYWdlIGJ1ZmZlci4gU2V0IHRvIE5VTEwgaWYgYnVmZmVyIGlzIGNvbnN1bWVkCiAgKgogICogUmV0dXJucyAwIChUSVBDX09LKSBpZiBldmVyeXRoaW5nIG9rLCAtVElQQ19FUlJfTk9fUE9SVCBvdGhlcndpc2UKICAqLwotc3RhdGljIGludCBmaWx0ZXJfY29ubmVjdChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICoqYnVmKQorc3RhdGljIGludCBmaWx0ZXJfY29ubmVjdChzdHJ1Y3QgdGlwY19zb2NrICp0c2ssIHN0cnVjdCBza19idWZmICoqc2tiKQogewogCXN0cnVjdCBzb2NrICpzayA9ICZ0c2stPnNrOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gc2stPnNrX3NvY2tldDsKLQlzdHJ1Y3QgdGlwY19tc2cgKm1zZyA9IGJ1Zl9tc2coKmJ1Zik7CisJc3RydWN0IHRpcGNfbXNnICptc2cgPSBidWZfbXNnKCpza2IpOwogCWludCByZXR2YWwgPSAtVElQQ19FUlJfTk9fUE9SVDsKIAogCWlmIChtc2dfbWNhc3QobXNnKSkKQEAgLTE1NTEsOCArMTYwMiw4IEBACiAJCQkJc29jay0+c3RhdGUgPSBTU19ESVNDT05ORUNUSU5HOwogCQkJCXRzay0+Y29ubmVjdGVkID0gMDsKIAkJCQkvKiBsZXQgdGltZXIgZXhwaXJlIG9uIGl0J3Mgb3duICovCi0JCQkJdGlwY19ub2RlX3JlbW92ZV9jb25uKHRza19wZWVyX25vZGUodHNrKSwKLQkJCQkJCSAgICAgIHRzay0+cmVmKTsKKwkJCQl0aXBjX25vZGVfcmVtb3ZlX2Nvbm4obmV0LCB0c2tfcGVlcl9ub2RlKHRzayksCisJCQkJCQkgICAgICB0c2stPnBvcnRpZCk7CiAJCQl9CiAJCQlyZXR2YWwgPSBUSVBDX09LOwogCQl9CkBAIC0xNTg3LDggKzE2MzgsOCBAQAogCQkgKiBjb25uZWN0KCkgcm91dGluZSBpZiBzbGVlcGluZy4KIAkJICovCiAJCWlmIChtc2dfZGF0YV9zeihtc2cpID09IDApIHsKLQkJCWtmcmVlX3NrYigqYnVmKTsKLQkJCSpidWYgPSBOVUxMOworCQkJa2ZyZWVfc2tiKCpza2IpOworCQkJKnNrYiA9IE5VTEw7CiAJCQlpZiAod2FpdHF1ZXVlX2FjdGl2ZShza19zbGVlcChzaykpKQogCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZShza19zbGVlcChzaykpOwogCQl9CkBAIC0xNjQwLDMyICsxNjkxLDMzIEBACiAvKioKICAqIGZpbHRlcl9yY3YgLSB2YWxpZGF0ZSBpbmNvbWluZyBtZXNzYWdlCiAgKiBAc2s6IHNvY2tldAotICogQGJ1ZjogbWVzc2FnZQorICogQHNrYjogcG9pbnRlciB0byBtZXNzYWdlLiBTZXQgdG8gTlVMTCBpZiBidWZmZXIgaXMgY29uc3VtZWQuCiAgKgogICogRW5xdWV1ZXMgbWVzc2FnZSBvbiByZWNlaXZlIHF1ZXVlIGlmIGFjY2VwdGFibGU7IG9wdGlvbmFsbHkgaGFuZGxlcwogICogZGlzY29ubmVjdCBpbmRpY2F0aW9uIGZvciBhIGNvbm5lY3RlZCBzb2NrZXQuCiAgKgotICogQ2FsbGVkIHdpdGggc29ja2V0IGxvY2sgYWxyZWFkeSB0YWtlbjsgcG9ydCBsb2NrIG1heSBhbHNvIGJlIHRha2VuLgorICogQ2FsbGVkIHdpdGggc29ja2V0IGxvY2sgYWxyZWFkeSB0YWtlbgogICoKLSAqIFJldHVybnMgMCAoVElQQ19PSykgaWYgbWVzc2FnZSB3YXMgY29uc3VtZWQsIC1USVBDIGVycm9yIGNvZGUgaWYgbWVzc2FnZQotICogdG8gYmUgcmVqZWN0ZWQsIDEgKFRJUENfRldEX01TRykgaWYgKENPTk5fTUFOQUdFUikgbWVzc2FnZSB0byBiZSBmb3J3YXJkZWQKKyAqIFJldHVybnMgMCAoVElQQ19PSykgaWYgbWVzc2FnZSB3YXMgb2ssIC1USVBDIGVycm9yIGNvZGUgaWYgcmVqZWN0ZWQKICAqLwotc3RhdGljIGludCBmaWx0ZXJfcmN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKmJ1ZikKK3N0YXRpYyBpbnQgZmlsdGVyX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICoqc2tiKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBzay0+c2tfc29ja2V0OwogCXN0cnVjdCB0aXBjX3NvY2sgKnRzayA9IHRpcGNfc2soc2spOwotCXN0cnVjdCB0aXBjX21zZyAqbXNnID0gYnVmX21zZyhidWYpOwotCXVuc2lnbmVkIGludCBsaW1pdCA9IHJjdmJ1Zl9saW1pdChzaywgYnVmKTsKLQl1MzIgb25vZGU7CisJc3RydWN0IHRpcGNfbXNnICptc2cgPSBidWZfbXNnKCpza2IpOworCXVuc2lnbmVkIGludCBsaW1pdCA9IHJjdmJ1Zl9saW1pdChzaywgKnNrYik7CiAJaW50IHJjID0gVElQQ19PSzsKIAotCWlmICh1bmxpa2VseShtc2dfdXNlcihtc2cpID09IENPTk5fTUFOQUdFUikpCi0JCXJldHVybiB0aXBjX3NrX3Byb3RvX3Jjdih0c2ssICZvbm9kZSwgYnVmKTsKKwlpZiAodW5saWtlbHkobXNnX3VzZXIobXNnKSA9PSBDT05OX01BTkFHRVIpKSB7CisJCXRpcGNfc2tfcHJvdG9fcmN2KHRzaywgc2tiKTsKKwkJcmV0dXJuIFRJUENfT0s7CisJfQogCiAJaWYgKHVubGlrZWx5KG1zZ191c2VyKG1zZykgPT0gU09DS19XQUtFVVApKSB7Ci0JCWtmcmVlX3NrYihidWYpOworCQlrZnJlZV9za2IoKnNrYik7CiAJCXRzay0+bGlua19jb25nID0gMDsKIAkJc2stPnNrX3dyaXRlX3NwYWNlKHNrKTsKKwkJKnNrYiA9IE5VTEw7CiAJCXJldHVybiBUSVBDX09LOwogCX0KIApAQCAtMTY3NywyMSArMTcyOSwyMiBAQAogCQlpZiAobXNnX2Nvbm5lY3RlZChtc2cpKQogCQkJcmV0dXJuIC1USVBDX0VSUl9OT19QT1JUOwogCX0gZWxzZSB7Ci0JCXJjID0gZmlsdGVyX2Nvbm5lY3QodHNrLCAmYnVmKTsKLQkJaWYgKHJjICE9IFRJUENfT0sgfHwgYnVmID09IE5VTEwpCisJCXJjID0gZmlsdGVyX2Nvbm5lY3QodHNrLCBza2IpOworCQlpZiAocmMgIT0gVElQQ19PSyB8fCAhKnNrYikKIAkJCXJldHVybiByYzsKIAl9CiAKIAkvKiBSZWplY3QgbWVzc2FnZSBpZiB0aGVyZSBpc24ndCByb29tIHRvIHF1ZXVlIGl0ICovCi0JaWYgKHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSArIGJ1Zi0+dHJ1ZXNpemUgPj0gbGltaXQpCisJaWYgKHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSArICgqc2tiKS0+dHJ1ZXNpemUgPj0gbGltaXQpCiAJCXJldHVybiAtVElQQ19FUlJfT1ZFUkxPQUQ7CiAKIAkvKiBFbnF1ZXVlIG1lc3NhZ2UgKi8KLQlUSVBDX1NLQl9DQihidWYpLT5oYW5kbGUgPSBOVUxMOwotCV9fc2tiX3F1ZXVlX3RhaWwoJnNrLT5za19yZWNlaXZlX3F1ZXVlLCBidWYpOwotCXNrYl9zZXRfb3duZXJfcihidWYsIHNrKTsKKwlUSVBDX1NLQl9DQigqc2tiKS0+aGFuZGxlID0gTlVMTDsKKwlfX3NrYl9xdWV1ZV90YWlsKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgKnNrYik7CisJc2tiX3NldF9vd25lcl9yKCpza2IsIHNrKTsKIAogCXNrLT5za19kYXRhX3JlYWR5KHNrKTsKKwkqc2tiID0gTlVMTDsKIAlyZXR1cm4gVElQQ19PSzsKIH0KIApAQCAtMTcwMCw3OCArMTc1MywxMjUgQEAKICAqIEBzazogc29ja2V0CiAgKiBAc2tiOiBtZXNzYWdlCiAgKgotICogQ2FsbGVyIG11c3QgaG9sZCBzb2NrZXQgbG9jaywgYnV0IG5vdCBwb3J0IGxvY2suCisgKiBDYWxsZXIgbXVzdCBob2xkIHNvY2tldCBsb2NrCiAgKgogICogUmV0dXJucyAwCiAgKi8KIHN0YXRpYyBpbnQgdGlwY19iYWNrbG9nX3JjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IHJjOwotCXUzMiBvbm9kZTsKKwlpbnQgZXJyOworCWF0b21pY190ICpkY250OworCXUzMiBkbm9kZTsKIAlzdHJ1Y3QgdGlwY19zb2NrICp0c2sgPSB0aXBjX3NrKHNrKTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJdWludCB0cnVlc2l6ZSA9IHNrYi0+dHJ1ZXNpemU7CiAKLQlyYyA9IGZpbHRlcl9yY3Yoc2ssIHNrYik7Ci0KLQlpZiAobGlrZWx5KCFyYykpIHsKLQkJaWYgKGF0b21pY19yZWFkKCZ0c2stPmR1cGxfcmN2Y250KSA8IFRJUENfQ09OTl9PVkVSTE9BRF9MSU1JVCkKLQkJCWF0b21pY19hZGQodHJ1ZXNpemUsICZ0c2stPmR1cGxfcmN2Y250KTsKKwllcnIgPSBmaWx0ZXJfcmN2KHNrLCAmc2tiKTsKKwlpZiAobGlrZWx5KCFza2IpKSB7CisJCWRjbnQgPSAmdHNrLT5kdXBsX3JjdmNudDsKKwkJaWYgKGF0b21pY19yZWFkKGRjbnQpIDwgVElQQ19DT05OX09WRVJMT0FEX0xJTUlUKQorCQkJYXRvbWljX2FkZCh0cnVlc2l6ZSwgZGNudCk7CiAJCXJldHVybiAwOwogCX0KLQotCWlmICgocmMgPCAwKSAmJiAhdGlwY19tc2dfcmV2ZXJzZShza2IsICZvbm9kZSwgLXJjKSkKLQkJcmV0dXJuIDA7Ci0KLQl0aXBjX2xpbmtfeG1pdF9za2Ioc2tiLCBvbm9kZSwgMCk7Ci0KKwlpZiAoIWVyciB8fCB0aXBjX21zZ19yZXZlcnNlKHRza19vd25fbm9kZSh0c2spLCBza2IsICZkbm9kZSwgLWVycikpCisJCXRpcGNfbGlua194bWl0X3NrYihuZXQsIHNrYiwgZG5vZGUsIHRzay0+cG9ydGlkKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiB0aXBjX3NrX3JjdiAtIGhhbmRsZSBpbmNvbWluZyBtZXNzYWdlCi0gKiBAc2tiOiBidWZmZXIgY29udGFpbmluZyBhcnJpdmluZyBtZXNzYWdlCi0gKiBDb25zdW1lcyBidWZmZXIKLSAqIFJldHVybnMgMCBpZiBzdWNjZXNzLCBvciBlcnJubzogLUVIT1NUVU5SRUFDSAorICogdGlwY19za19lbnF1ZXVlIC0gZXh0cmFjdCBhbGwgYnVmZmVycyB3aXRoIGRlc3RpbmF0aW9uICdkcG9ydCcgZnJvbQorICogICAgICAgICAgICAgICAgICAgaW5wdXRxIGFuZCB0cnkgYWRkaW5nIHRoZW0gdG8gc29ja2V0IG9yIGJhY2tsb2cgcXVldWUKKyAqIEBpbnB1dHE6IGxpc3Qgb2YgaW5jb21pbmcgYnVmZmVycyB3aXRoIHBvdGVudGlhbGx5IGRpZmZlcmVudCBkZXN0aW5hdGlvbnMKKyAqIEBzazogc29ja2V0IHdoZXJlIHRoZSBidWZmZXJzIHNob3VsZCBiZSBlbnF1ZXVlZAorICogQGRwb3J0OiBwb3J0IG51bWJlciBmb3IgdGhlIHNvY2tldAorICogQF9za2I6IHJldHVybmVkIGJ1ZmZlciB0byBiZSBmb3J3YXJkZWQgb3IgcmVqZWN0ZWQsIGlmIGFwcGxpY2FibGUKKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIHNvY2tldCBsb2NrCisgKgorICogUmV0dXJucyBUSVBDX09LIGlmIGFsbCBidWZmZXJzIGVucXVldWVkLCBvdGhlcndpc2UgLVRJUENfRVJSX09WRVJMT0FECisgKiBvciAtVElQQ19FUlJfTk9fUE9SVAogICovCi1pbnQgdGlwY19za19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgdGlwY19za19lbnF1ZXVlKHN0cnVjdCBza19idWZmX2hlYWQgKmlucHV0cSwgc3RydWN0IHNvY2sgKnNrLAorCQkJICAgdTMyIGRwb3J0LCBzdHJ1Y3Qgc2tfYnVmZiAqKl9za2IpCiB7CisJdW5zaWduZWQgaW50IGxpbTsKKwlhdG9taWNfdCAqZGNudDsKKwlpbnQgZXJyOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgbG9uZyB0aW1lX2xpbWl0ID0gamlmZmllcyArIDI7CisKKwl3aGlsZSAoc2tiX3F1ZXVlX2xlbihpbnB1dHEpKSB7CisJCWlmICh1bmxpa2VseSh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVfbGltaXQpKSkKKwkJCXJldHVybiBUSVBDX09LOworCQlza2IgPSB0aXBjX3NrYl9kZXF1ZXVlKGlucHV0cSwgZHBvcnQpOworCQlpZiAodW5saWtlbHkoIXNrYikpCisJCQlyZXR1cm4gVElQQ19PSzsKKwkJaWYgKCFzb2NrX293bmVkX2J5X3VzZXIoc2spKSB7CisJCQllcnIgPSBmaWx0ZXJfcmN2KHNrLCAmc2tiKTsKKwkJCWlmIChsaWtlbHkoIXNrYikpCisJCQkJY29udGludWU7CisJCQkqX3NrYiA9IHNrYjsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJZGNudCA9ICZ0aXBjX3NrKHNrKS0+ZHVwbF9yY3ZjbnQ7CisJCWlmIChzay0+c2tfYmFja2xvZy5sZW4pCisJCQlhdG9taWNfc2V0KGRjbnQsIDApOworCQlsaW0gPSByY3ZidWZfbGltaXQoc2ssIHNrYikgKyBhdG9taWNfcmVhZChkY250KTsKKwkJaWYgKGxpa2VseSghc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgbGltKSkpCisJCQljb250aW51ZTsKKwkJKl9za2IgPSBza2I7CisJCXJldHVybiAtVElQQ19FUlJfT1ZFUkxPQUQ7CisJfQorCXJldHVybiBUSVBDX09LOworfQorCisvKioKKyAqIHRpcGNfc2tfcmN2IC0gaGFuZGxlIGEgY2hhaW4gb2YgaW5jb21pbmcgYnVmZmVycworICogQGlucHV0cTogYnVmZmVyIGxpc3QgY29udGFpbmluZyB0aGUgYnVmZmVycworICogQ29uc3VtZXMgYWxsIGJ1ZmZlcnMgaW4gbGlzdCB1bnRpbCBpbnB1dHEgaXMgZW1wdHkKKyAqIE5vdGU6IG1heSBiZSBjYWxsZWQgaW4gbXVsdGlwbGUgdGhyZWFkcyByZWZlcnJpbmcgdG8gdGhlIHNhbWUgcXVldWUKKyAqIFJldHVybnMgMCBpZiBsYXN0IGJ1ZmZlciB3YXMgYWNjZXB0ZWQsIG90aGVyd2lzZSAtRUhPU1RVTlJFQUNICisgKiBPbmx5IG5vZGUgbG9jYWwgY2FsbHMgY2hlY2sgdGhlIHJldHVybiB2YWx1ZSwgc2VuZGluZyBzaW5nbGUtYnVmZmVyIHF1ZXVlcworICovCitpbnQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpCit7CisJdTMyIGRub2RlLCBkcG9ydCA9IDA7CisJaW50IGVyciA9IC1USVBDX0VSUl9OT19QT1JUOworCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IHRpcGNfc29jayAqdHNrOworCXN0cnVjdCB0aXBjX25ldCAqdG47CiAJc3RydWN0IHNvY2sgKnNrOwotCXUzMiBkcG9ydCA9IG1zZ19kZXN0cG9ydChidWZfbXNnKHNrYikpOwotCWludCByYyA9IFRJUENfT0s7Ci0JdWludCBsaW1pdDsKLQl1MzIgZG5vZGU7CiAKLQkvKiBWYWxpZGF0ZSBkZXN0aW5hdGlvbiBhbmQgbWVzc2FnZSAqLwotCXRzayA9IHRpcGNfc2tfZ2V0KGRwb3J0KTsKLQlpZiAodW5saWtlbHkoIXRzaykpIHsKLQkJcmMgPSB0aXBjX21zZ19ldmFsKHNrYiwgJmRub2RlKTsKLQkJZ290byBleGl0OworCXdoaWxlIChza2JfcXVldWVfbGVuKGlucHV0cSkpIHsKKwkJc2tiID0gTlVMTDsKKwkJZHBvcnQgPSB0aXBjX3NrYl9wZWVrX3BvcnQoaW5wdXRxLCBkcG9ydCk7CisJCXRzayA9IHRpcGNfc2tfbG9va3VwKG5ldCwgZHBvcnQpOworCQlpZiAobGlrZWx5KHRzaykpIHsKKwkJCXNrID0gJnRzay0+c2s7CisJCQlpZiAobGlrZWx5KHNwaW5fdHJ5bG9ja19iaCgmc2stPnNrX2xvY2suc2xvY2spKSkgeworCQkJCWVyciA9IHRpcGNfc2tfZW5xdWV1ZShpbnB1dHEsIHNrLCBkcG9ydCwgJnNrYik7CisJCQkJc3Bpbl91bmxvY2tfYmgoJnNrLT5za19sb2NrLnNsb2NrKTsKKwkJCQlkcG9ydCA9IDA7CisJCQl9CisJCQlzb2NrX3B1dChzayk7CisJCX0gZWxzZSB7CisJCQlza2IgPSB0aXBjX3NrYl9kZXF1ZXVlKGlucHV0cSwgZHBvcnQpOworCQl9CisJCWlmIChsaWtlbHkoIXNrYikpCisJCQljb250aW51ZTsKKwkJaWYgKHRpcGNfbXNnX2xvb2t1cF9kZXN0KG5ldCwgc2tiLCAmZG5vZGUsICZlcnIpKQorCQkJZ290byB4bWl0OworCQlpZiAoIWVycikgeworCQkJZG5vZGUgPSBtc2dfZGVzdG5vZGUoYnVmX21zZyhza2IpKTsKKwkJCWdvdG8geG1pdDsKKwkJfQorCQl0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOworCQlpZiAoIXRpcGNfbXNnX3JldmVyc2UodG4tPm93bl9hZGRyLCBza2IsICZkbm9kZSwgLWVycikpCisJCQljb250aW51ZTsKK3htaXQ6CisJCXRpcGNfbGlua194bWl0X3NrYihuZXQsIHNrYiwgZG5vZGUsIGRwb3J0KTsKIAl9Ci0Jc2sgPSAmdHNrLT5zazsKLQotCS8qIFF1ZXVlIG1lc3NhZ2UgKi8KLQlzcGluX2xvY2tfYmgoJnNrLT5za19sb2NrLnNsb2NrKTsKLQotCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkgewotCQlyYyA9IGZpbHRlcl9yY3Yoc2ssIHNrYik7Ci0JfSBlbHNlIHsKLQkJaWYgKHNrLT5za19iYWNrbG9nLmxlbiA9PSAwKQotCQkJYXRvbWljX3NldCgmdHNrLT5kdXBsX3JjdmNudCwgMCk7Ci0JCWxpbWl0ID0gcmN2YnVmX2xpbWl0KHNrLCBza2IpICsgYXRvbWljX3JlYWQoJnRzay0+ZHVwbF9yY3ZjbnQpOwotCQlpZiAoc2tfYWRkX2JhY2tsb2coc2ssIHNrYiwgbGltaXQpKQotCQkJcmMgPSAtVElQQ19FUlJfT1ZFUkxPQUQ7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZzay0+c2tfbG9jay5zbG9jayk7Ci0JdGlwY19za19wdXQodHNrKTsKLQlpZiAobGlrZWx5KCFyYykpCi0JCXJldHVybiAwOwotZXhpdDoKLQlpZiAoKHJjIDwgMCkgJiYgIXRpcGNfbXNnX3JldmVyc2Uoc2tiLCAmZG5vZGUsIC1yYykpCi0JCXJldHVybiAtRUhPU1RVTlJFQUNIOwotCi0JdGlwY19saW5rX3htaXRfc2tiKHNrYiwgZG5vZGUsIDApOwotCXJldHVybiAocmMgPCAwKSA/IC1FSE9TVFVOUkVBQ0ggOiAwOworCXJldHVybiBlcnIgPyAtRUhPU1RVTlJFQUNIIDogMDsKIH0KIAogc3RhdGljIGludCB0aXBjX3dhaXRfZm9yX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgbG9uZyAqdGltZW9fcCkKQEAgLTIwMjcsNiArMjEyNyw3IEBACiBzdGF0aWMgaW50IHRpcGNfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGhvdykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IHRpcGNfc29jayAqdHNrID0gdGlwY19zayhzayk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1MzIgZG5vZGU7CkBAIC0yMDQ5LDIxICsyMTUwLDI0IEBACiAJCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQkJZ290byByZXN0YXJ0OwogCQkJfQotCQkJaWYgKHRpcGNfbXNnX3JldmVyc2Uoc2tiLCAmZG5vZGUsIFRJUENfQ09OTl9TSFVURE9XTikpCi0JCQkJdGlwY19saW5rX3htaXRfc2tiKHNrYiwgZG5vZGUsIHRzay0+cmVmKTsKLQkJCXRpcGNfbm9kZV9yZW1vdmVfY29ubihkbm9kZSwgdHNrLT5yZWYpOworCQkJaWYgKHRpcGNfbXNnX3JldmVyc2UodHNrX293bl9ub2RlKHRzayksIHNrYiwgJmRub2RlLAorCQkJCQkgICAgIFRJUENfQ09OTl9TSFVURE9XTikpCisJCQkJdGlwY19saW5rX3htaXRfc2tiKG5ldCwgc2tiLCBkbm9kZSwKKwkJCQkJCSAgIHRzay0+cG9ydGlkKTsKKwkJCXRpcGNfbm9kZV9yZW1vdmVfY29ubihuZXQsIGRub2RlLCB0c2stPnBvcnRpZCk7CiAJCX0gZWxzZSB7CiAJCQlkbm9kZSA9IHRza19wZWVyX25vZGUodHNrKTsKKwogCQkJc2tiID0gdGlwY19tc2dfY3JlYXRlKFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSwKIAkJCQkJICAgICAgVElQQ19DT05OX01TRywgU0hPUlRfSF9TSVpFLAotCQkJCQkgICAgICAwLCBkbm9kZSwgdGlwY19vd25fYWRkciwKKwkJCQkJICAgICAgMCwgZG5vZGUsIHRza19vd25fbm9kZSh0c2spLAogCQkJCQkgICAgICB0c2tfcGVlcl9wb3J0KHRzayksCi0JCQkJCSAgICAgIHRzay0+cmVmLCBUSVBDX0NPTk5fU0hVVERPV04pOwotCQkJdGlwY19saW5rX3htaXRfc2tiKHNrYiwgZG5vZGUsIHRzay0+cmVmKTsKKwkJCQkJICAgICAgdHNrLT5wb3J0aWQsIFRJUENfQ09OTl9TSFVURE9XTik7CisJCQl0aXBjX2xpbmtfeG1pdF9za2IobmV0LCBza2IsIGRub2RlLCB0c2stPnBvcnRpZCk7CiAJCX0KIAkJdHNrLT5jb25uZWN0ZWQgPSAwOwogCQlzb2NrLT5zdGF0ZSA9IFNTX0RJU0NPTk5FQ1RJTkc7Ci0JCXRpcGNfbm9kZV9yZW1vdmVfY29ubihkbm9kZSwgdHNrLT5yZWYpOworCQl0aXBjX25vZGVfcmVtb3ZlX2Nvbm4obmV0LCBkbm9kZSwgdHNrLT5wb3J0aWQpOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAogCWNhc2UgU1NfRElTQ09OTkVDVElORzoKQEAgLTIwODQsMTggKzIxODgsMTQgQEAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgdm9pZCB0aXBjX3NrX3RpbWVvdXQodW5zaWduZWQgbG9uZyByZWYpCitzdGF0aWMgdm9pZCB0aXBjX3NrX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCB0aXBjX3NvY2sgKnRzazsKLQlzdHJ1Y3Qgc29jayAqc2s7CisJc3RydWN0IHRpcGNfc29jayAqdHNrID0gKHN0cnVjdCB0aXBjX3NvY2sgKilkYXRhOworCXN0cnVjdCBzb2NrICpzayA9ICZ0c2stPnNrOwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwogCXUzMiBwZWVyX3BvcnQsIHBlZXJfbm9kZTsKKwl1MzIgb3duX25vZGUgPSB0c2tfb3duX25vZGUodHNrKTsKIAotCXRzayA9IHRpcGNfc2tfZ2V0KHJlZik7Ci0JaWYgKCF0c2spCi0JCXJldHVybjsKLQotCXNrID0gJnRzay0+c2s7CiAJYmhfbG9ja19zb2NrKHNrKTsKIAlpZiAoIXRzay0+Y29ubmVjdGVkKSB7CiAJCWJoX3VubG9ja19zb2NrKHNrKTsKQEAgLTIxMDYsMzggKzIyMDYsMzkgQEAKIAogCWlmICh0c2stPnByb2Jpbmdfc3RhdGUgPT0gVElQQ19DT05OX1BST0JJTkcpIHsKIAkJLyogUHJldmlvdXMgcHJvYmUgbm90IGFuc3dlcmVkIC0+IHNlbGYgYWJvcnQgKi8KLQkJc2tiID0gdGlwY19tc2dfY3JlYXRlKFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSwgVElQQ19DT05OX01TRywKLQkJCQkgICAgICBTSE9SVF9IX1NJWkUsIDAsIHRpcGNfb3duX2FkZHIsCi0JCQkJICAgICAgcGVlcl9ub2RlLCByZWYsIHBlZXJfcG9ydCwKLQkJCQkgICAgICBUSVBDX0VSUl9OT19QT1JUKTsKKwkJc2tiID0gdGlwY19tc2dfY3JlYXRlKFRJUENfQ1JJVElDQUxfSU1QT1JUQU5DRSwKKwkJCQkgICAgICBUSVBDX0NPTk5fTVNHLCBTSE9SVF9IX1NJWkUsIDAsCisJCQkJICAgICAgb3duX25vZGUsIHBlZXJfbm9kZSwgdHNrLT5wb3J0aWQsCisJCQkJICAgICAgcGVlcl9wb3J0LCBUSVBDX0VSUl9OT19QT1JUKTsKIAl9IGVsc2UgewotCQlza2IgPSB0aXBjX21zZ19jcmVhdGUoQ09OTl9NQU5BR0VSLCBDT05OX1BST0JFLCBJTlRfSF9TSVpFLAotCQkJCSAgICAgIDAsIHBlZXJfbm9kZSwgdGlwY19vd25fYWRkciwKLQkJCQkgICAgICBwZWVyX3BvcnQsIHJlZiwgVElQQ19PSyk7CisJCXNrYiA9IHRpcGNfbXNnX2NyZWF0ZShDT05OX01BTkFHRVIsIENPTk5fUFJPQkUsCisJCQkJICAgICAgSU5UX0hfU0laRSwgMCwgcGVlcl9ub2RlLCBvd25fbm9kZSwKKwkJCQkgICAgICBwZWVyX3BvcnQsIHRzay0+cG9ydGlkLCBUSVBDX09LKTsKIAkJdHNrLT5wcm9iaW5nX3N0YXRlID0gVElQQ19DT05OX1BST0JJTkc7Ci0JCWtfc3RhcnRfdGltZXIoJnRzay0+dGltZXIsIHRzay0+cHJvYmluZ19pbnRlcnZhbCk7CisJCXNrX3Jlc2V0X3RpbWVyKHNrLCAmc2stPnNrX3RpbWVyLCBqaWZmaWVzICsgdHNrLT5wcm9iaW5nX2ludHYpOwogCX0KIAliaF91bmxvY2tfc29jayhzayk7CiAJaWYgKHNrYikKLQkJdGlwY19saW5rX3htaXRfc2tiKHNrYiwgcGVlcl9ub2RlLCByZWYpOworCQl0aXBjX2xpbmtfeG1pdF9za2Ioc29ja19uZXQoc2spLCBza2IsIHBlZXJfbm9kZSwgdHNrLT5wb3J0aWQpOwogZXhpdDoKLQl0aXBjX3NrX3B1dCh0c2spOworCXNvY2tfcHV0KHNrKTsKIH0KIAogc3RhdGljIGludCB0aXBjX3NrX3B1Ymxpc2goc3RydWN0IHRpcGNfc29jayAqdHNrLCB1aW50IHNjb3BlLAogCQkJICAgc3RydWN0IHRpcGNfbmFtZV9zZXEgY29uc3QgKnNlcSkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldCgmdHNrLT5zayk7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpwdWJsOwogCXUzMiBrZXk7CiAKIAlpZiAodHNrLT5jb25uZWN0ZWQpCiAJCXJldHVybiAtRUlOVkFMOwotCWtleSA9IHRzay0+cmVmICsgdHNrLT5wdWJfY291bnQgKyAxOwotCWlmIChrZXkgPT0gdHNrLT5yZWYpCisJa2V5ID0gdHNrLT5wb3J0aWQgKyB0c2stPnB1Yl9jb3VudCArIDE7CisJaWYgKGtleSA9PSB0c2stPnBvcnRpZCkKIAkJcmV0dXJuIC1FQUREUklOVVNFOwogCi0JcHVibCA9IHRpcGNfbmFtZXRibF9wdWJsaXNoKHNlcS0+dHlwZSwgc2VxLT5sb3dlciwgc2VxLT51cHBlciwKLQkJCQkgICAgc2NvcGUsIHRzay0+cmVmLCBrZXkpOworCXB1YmwgPSB0aXBjX25hbWV0YmxfcHVibGlzaChuZXQsIHNlcS0+dHlwZSwgc2VxLT5sb3dlciwgc2VxLT51cHBlciwKKwkJCQkgICAgc2NvcGUsIHRzay0+cG9ydGlkLCBrZXkpOwogCWlmICh1bmxpa2VseSghcHVibCkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0yMTUwLDYgKzIyNTEsNyBAQAogc3RhdGljIGludCB0aXBjX3NrX3dpdGhkcmF3KHN0cnVjdCB0aXBjX3NvY2sgKnRzaywgdWludCBzY29wZSwKIAkJCSAgICBzdHJ1Y3QgdGlwY19uYW1lX3NlcSBjb25zdCAqc2VxKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KCZ0c2stPnNrKTsKIAlzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7CiAJc3RydWN0IHB1YmxpY2F0aW9uICpzYWZlOwogCWludCByYyA9IC1FSU5WQUw7CkBAIC0yMTY0LDEyICsyMjY2LDEyIEBACiAJCQkJY29udGludWU7CiAJCQlpZiAocHVibC0+dXBwZXIgIT0gc2VxLT51cHBlcikKIAkJCQlicmVhazsKLQkJCXRpcGNfbmFtZXRibF93aXRoZHJhdyhwdWJsLT50eXBlLCBwdWJsLT5sb3dlciwKKwkJCXRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIHB1YmwtPnR5cGUsIHB1YmwtPmxvd2VyLAogCQkJCQkgICAgICBwdWJsLT5yZWYsIHB1YmwtPmtleSk7CiAJCQlyYyA9IDA7CiAJCQlicmVhazsKIAkJfQotCQl0aXBjX25hbWV0Ymxfd2l0aGRyYXcocHVibC0+dHlwZSwgcHVibC0+bG93ZXIsCisJCXRpcGNfbmFtZXRibF93aXRoZHJhdyhuZXQsIHB1YmwtPnR5cGUsIHB1YmwtPmxvd2VyLAogCQkJCSAgICAgIHB1YmwtPnJlZiwgcHVibC0+a2V5KTsKIAkJcmMgPSAwOwogCX0KQEAgLTIxNzgsMzM2ICsyMjgwLDEwNSBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCB0aXBjX3NrX3Nob3coc3RydWN0IHRpcGNfc29jayAqdHNrLCBjaGFyICpidWYsCi0JCQlpbnQgbGVuLCBpbnQgZnVsbF9pZCkKLXsKLQlzdHJ1Y3QgcHVibGljYXRpb24gKnB1Ymw7Ci0JaW50IHJldDsKLQotCWlmIChmdWxsX2lkKQotCQlyZXQgPSB0aXBjX3NucHJpbnRmKGJ1ZiwgbGVuLCAiPCV1LiV1LiV1OiV1PjoiLAotCQkJCSAgICB0aXBjX3pvbmUodGlwY19vd25fYWRkciksCi0JCQkJICAgIHRpcGNfY2x1c3Rlcih0aXBjX293bl9hZGRyKSwKLQkJCQkgICAgdGlwY19ub2RlKHRpcGNfb3duX2FkZHIpLCB0c2stPnJlZik7Ci0JZWxzZQotCQlyZXQgPSB0aXBjX3NucHJpbnRmKGJ1ZiwgbGVuLCAiJS0xMHU6IiwgdHNrLT5yZWYpOwotCi0JaWYgKHRzay0+Y29ubmVjdGVkKSB7Ci0JCXUzMiBkcG9ydCA9IHRza19wZWVyX3BvcnQodHNrKTsKLQkJdTMyIGRlc3Rub2RlID0gdHNrX3BlZXJfbm9kZSh0c2spOwotCi0JCXJldCArPSB0aXBjX3NucHJpbnRmKGJ1ZiArIHJldCwgbGVuIC0gcmV0LAotCQkJCSAgICAgIiBjb25uZWN0ZWQgdG8gPCV1LiV1LiV1OiV1PiIsCi0JCQkJICAgICB0aXBjX3pvbmUoZGVzdG5vZGUpLAotCQkJCSAgICAgdGlwY19jbHVzdGVyKGRlc3Rub2RlKSwKLQkJCQkgICAgIHRpcGNfbm9kZShkZXN0bm9kZSksIGRwb3J0KTsKLQkJaWYgKHRzay0+Y29ubl90eXBlICE9IDApCi0JCQlyZXQgKz0gdGlwY19zbnByaW50ZihidWYgKyByZXQsIGxlbiAtIHJldCwKLQkJCQkJICAgICAiIHZpYSB7JXUsJXV9IiwgdHNrLT5jb25uX3R5cGUsCi0JCQkJCSAgICAgdHNrLT5jb25uX2luc3RhbmNlKTsKLQl9IGVsc2UgaWYgKHRzay0+cHVibGlzaGVkKSB7Ci0JCXJldCArPSB0aXBjX3NucHJpbnRmKGJ1ZiArIHJldCwgbGVuIC0gcmV0LCAiIGJvdW5kIHRvIik7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkocHVibCwgJnRzay0+cHVibGljYXRpb25zLCBwcG9ydF9saXN0KSB7Ci0JCQlpZiAocHVibC0+bG93ZXIgPT0gcHVibC0+dXBwZXIpCi0JCQkJcmV0ICs9IHRpcGNfc25wcmludGYoYnVmICsgcmV0LCBsZW4gLSByZXQsCi0JCQkJCQkgICAgICIgeyV1LCV1fSIsIHB1YmwtPnR5cGUsCi0JCQkJCQkgICAgIHB1YmwtPmxvd2VyKTsKLQkJCWVsc2UKLQkJCQlyZXQgKz0gdGlwY19zbnByaW50ZihidWYgKyByZXQsIGxlbiAtIHJldCwKLQkJCQkJCSAgICAgIiB7JXUsJXUsJXV9IiwgcHVibC0+dHlwZSwKLQkJCQkJCSAgICAgcHVibC0+bG93ZXIsIHB1YmwtPnVwcGVyKTsKLQkJfQotCX0KLQlyZXQgKz0gdGlwY19zbnByaW50ZihidWYgKyByZXQsIGxlbiAtIHJldCwgIlxuIik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RydWN0IHNrX2J1ZmYgKnRpcGNfc2tfc29ja3Nfc2hvdyh2b2lkKQotewotCXN0cnVjdCBza19idWZmICpidWY7Ci0Jc3RydWN0IHRsdl9kZXNjICpyZXBfdGx2OwotCWNoYXIgKnBiOwotCWludCBwYl9sZW47Ci0Jc3RydWN0IHRpcGNfc29jayAqdHNrOwotCWludCBzdHJfbGVuID0gMDsKLQl1MzIgcmVmID0gMDsKLQotCWJ1ZiA9IHRpcGNfY2ZnX3JlcGx5X2FsbG9jKFRMVl9TUEFDRShVTFRSQV9TVFJJTkdfTUFYX0xFTikpOwotCWlmICghYnVmKQotCQlyZXR1cm4gTlVMTDsKLQlyZXBfdGx2ID0gKHN0cnVjdCB0bHZfZGVzYyAqKWJ1Zi0+ZGF0YTsKLQlwYiA9IFRMVl9EQVRBKHJlcF90bHYpOwotCXBiX2xlbiA9IFVMVFJBX1NUUklOR19NQVhfTEVOOwotCi0JdHNrID0gdGlwY19za19nZXRfbmV4dCgmcmVmKTsKLQlmb3IgKDsgdHNrOyB0c2sgPSB0aXBjX3NrX2dldF9uZXh0KCZyZWYpKSB7Ci0JCWxvY2tfc29jaygmdHNrLT5zayk7Ci0JCXN0cl9sZW4gKz0gdGlwY19za19zaG93KHRzaywgcGIgKyBzdHJfbGVuLAotCQkJCQlwYl9sZW4gLSBzdHJfbGVuLCAwKTsKLQkJcmVsZWFzZV9zb2NrKCZ0c2stPnNrKTsKLQkJdGlwY19za19wdXQodHNrKTsKLQl9Ci0Jc3RyX2xlbiArPSAxOwkvKiBmb3IgIlwwIiAqLwotCXNrYl9wdXQoYnVmLCBUTFZfU1BBQ0Uoc3RyX2xlbikpOwotCVRMVl9TRVQocmVwX3RsdiwgVElQQ19UTFZfVUxUUkFfU1RSSU5HLCBOVUxMLCBzdHJfbGVuKTsKLQotCXJldHVybiBidWY7Ci19Ci0KIC8qIHRpcGNfc2tfcmVpbml0OiBzZXQgbm9uLXplcm8gYWRkcmVzcyBpbiBhbGwgZXhpc3Rpbmcgc29ja2V0cwogICogICAgICAgICAgICAgICAgIHdoZW4gd2UgZ28gZnJvbSBzdGFuZGFsb25lIHRvIG5ldHdvcmsgbW9kZS4KICAqLwotdm9pZCB0aXBjX3NrX3JlaW5pdCh2b2lkKQordm9pZCB0aXBjX3NrX3JlaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOworCWNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibDsKKwlzdHJ1Y3Qgcmhhc2hfaGVhZCAqcG9zOworCXN0cnVjdCB0aXBjX3NvY2sgKnRzazsKIAlzdHJ1Y3QgdGlwY19tc2cgKm1zZzsKLQl1MzIgcmVmID0gMDsKLQlzdHJ1Y3QgdGlwY19zb2NrICp0c2sgPSB0aXBjX3NrX2dldF9uZXh0KCZyZWYpOworCWludCBpOwogCi0JZm9yICg7IHRzazsgdHNrID0gdGlwY19za19nZXRfbmV4dCgmcmVmKSkgewotCQlsb2NrX3NvY2soJnRzay0+c2spOwotCQltc2cgPSAmdHNrLT5waGRyOwotCQltc2dfc2V0X3ByZXZub2RlKG1zZywgdGlwY19vd25fYWRkcik7Ci0JCW1zZ19zZXRfb3JpZ25vZGUobXNnLCB0aXBjX293bl9hZGRyKTsKLQkJcmVsZWFzZV9zb2NrKCZ0c2stPnNrKTsKLQkJdGlwY19za19wdXQodHNrKTsKKwlyY3VfcmVhZF9sb2NrKCk7CisJdGJsID0gcmh0X2RlcmVmZXJlbmNlX3JjdSgoJnRuLT5za19yaHQpLT50YmwsICZ0bi0+c2tfcmh0KTsKKwlmb3IgKGkgPSAwOyBpIDwgdGJsLT5zaXplOyBpKyspIHsKKwkJcmh0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0c2ssIHBvcywgdGJsLCBpLCBub2RlKSB7CisJCQlzcGluX2xvY2tfYmgoJnRzay0+c2suc2tfbG9jay5zbG9jayk7CisJCQltc2cgPSAmdHNrLT5waGRyOworCQkJbXNnX3NldF9wcmV2bm9kZShtc2csIHRuLT5vd25fYWRkcik7CisJCQltc2dfc2V0X29yaWdub2RlKG1zZywgdG4tPm93bl9hZGRyKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZ0c2stPnNrLnNrX2xvY2suc2xvY2spOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworfQorCitzdGF0aWMgc3RydWN0IHRpcGNfc29jayAqdGlwY19za19sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgcG9ydGlkKQoreworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKKwlzdHJ1Y3QgdGlwY19zb2NrICp0c2s7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJdHNrID0gcmhhc2h0YWJsZV9sb29rdXAoJnRuLT5za19yaHQsICZwb3J0aWQpOworCWlmICh0c2spCisJCXNvY2tfaG9sZCgmdHNrLT5zayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gdHNrOworfQorCitzdGF0aWMgaW50IHRpcGNfc2tfaW5zZXJ0KHN0cnVjdCB0aXBjX3NvY2sgKnRzaykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSAmdHNrLT5zazsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOworCXUzMiByZW1haW5pbmcgPSAoVElQQ19NQVhfUE9SVCAtIFRJUENfTUlOX1BPUlQpICsgMTsKKwl1MzIgcG9ydGlkID0gcHJhbmRvbV91MzIoKSAlIHJlbWFpbmluZyArIFRJUENfTUlOX1BPUlQ7CisKKwl3aGlsZSAocmVtYWluaW5nLS0pIHsKKwkJcG9ydGlkKys7CisJCWlmICgocG9ydGlkIDwgVElQQ19NSU5fUE9SVCkgfHwgKHBvcnRpZCA+IFRJUENfTUFYX1BPUlQpKQorCQkJcG9ydGlkID0gVElQQ19NSU5fUE9SVDsKKwkJdHNrLT5wb3J0aWQgPSBwb3J0aWQ7CisJCXNvY2tfaG9sZCgmdHNrLT5zayk7CisJCWlmIChyaGFzaHRhYmxlX2xvb2t1cF9pbnNlcnQoJnRuLT5za19yaHQsICZ0c2stPm5vZGUpKQorCQkJcmV0dXJuIDA7CisJCXNvY2tfcHV0KCZ0c2stPnNrKTsKKwl9CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHRpcGNfc2tfcmVtb3ZlKHN0cnVjdCB0aXBjX3NvY2sgKnRzaykKK3sKKwlzdHJ1Y3Qgc29jayAqc2sgPSAmdHNrLT5zazsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMoc29ja19uZXQoc2spLCB0aXBjX25ldF9pZCk7CisKKwlpZiAocmhhc2h0YWJsZV9yZW1vdmUoJnRuLT5za19yaHQsICZ0c2stPm5vZGUpKSB7CisJCVdBUk5fT04oYXRvbWljX3JlYWQoJnNrLT5za19yZWZjbnQpID09IDEpOworCQlfX3NvY2tfcHV0KHNrKTsKIAl9CiB9CiAKLS8qKgotICogc3RydWN0IHJlZmVyZW5jZSAtIFRJUEMgc29ja2V0IHJlZmVyZW5jZSBlbnRyeQotICogQHRzazogcG9pbnRlciB0byBzb2NrZXQgYXNzb2NpYXRlZCB3aXRoIHJlZmVyZW5jZSBlbnRyeQotICogQHJlZjogcmVmZXJlbmNlIHZhbHVlIGZvciBzb2NrZXQgKGNvbWJpbmVzIGluc3RhbmNlICYgYXJyYXkgaW5kZXggaW5mbykKLSAqLwotc3RydWN0IHJlZmVyZW5jZSB7Ci0Jc3RydWN0IHRpcGNfc29jayAqdHNrOwotCXUzMiByZWY7Ci19OwotCi0vKioKLSAqIHN0cnVjdCB0aXBjX3JlZl90YWJsZSAtIHRhYmxlIG9mIFRJUEMgc29ja2V0IHJlZmVyZW5jZSBlbnRyaWVzCi0gKiBAZW50cmllczogcG9pbnRlciB0byBhcnJheSBvZiByZWZlcmVuY2UgZW50cmllcwotICogQGNhcGFjaXR5OiBhcnJheSBpbmRleCBvZiBmaXJzdCB1bnVzYWJsZSBlbnRyeQotICogQGluaXRfcG9pbnQ6IGFycmF5IGluZGV4IG9mIGZpcnN0IHVuaW5pdGlhbGl6ZWQgZW50cnkKLSAqIEBmaXJzdF9mcmVlOiBhcnJheSBpbmRleCBvZiBmaXJzdCB1bnVzZWQgc29ja2V0IHJlZmVyZW5jZSBlbnRyeQotICogQGxhc3RfZnJlZTogYXJyYXkgaW5kZXggb2YgbGFzdCB1bnVzZWQgc29ja2V0IHJlZmVyZW5jZSBlbnRyeQotICogQGluZGV4X21hc2s6IGJpdG1hc2sgZm9yIGFycmF5IGluZGV4IHBvcnRpb24gb2YgcmVmZXJlbmNlIHZhbHVlcwotICogQHN0YXJ0X21hc2s6IGluaXRpYWwgdmFsdWUgZm9yIGluc3RhbmNlIHZhbHVlIHBvcnRpb24gb2YgcmVmZXJlbmNlIHZhbHVlcwotICovCi1zdHJ1Y3QgcmVmX3RhYmxlIHsKLQlzdHJ1Y3QgcmVmZXJlbmNlICplbnRyaWVzOwotCXUzMiBjYXBhY2l0eTsKLQl1MzIgaW5pdF9wb2ludDsKLQl1MzIgZmlyc3RfZnJlZTsKLQl1MzIgbGFzdF9mcmVlOwotCXUzMiBpbmRleF9tYXNrOwotCXUzMiBzdGFydF9tYXNrOwotfTsKLQotLyogU29ja2V0IHJlZmVyZW5jZSB0YWJsZSBjb25zaXN0cyBvZiAyKipOIGVudHJpZXMuCi0gKgotICogU3RhdGUJU29ja2V0IHB0cglSZWZlcmVuY2UKLSAqIC0tLS0tICAgICAgICAtLS0tLS0tLS0tICAgICAgLS0tLS0tLS0tCi0gKiBJbiB1c2UgICAgICAgIG5vbi1OVUxMICAgICAgIFhYWFh8b3duIGluZGV4Ci0gKgkJCQkoWFhYWCBjaGFuZ2VzIGVhY2ggdGltZSBlbnRyeSBpcyBhY3F1aXJlZCkKLSAqIEZyZWUgICAgICAgICAgICBOVUxMICAgICAgICAgWVlZWXxuZXh0IGZyZWUgaW5kZXgKLSAqCQkJCShZWVlZIGlzIG9uZSBtb3JlIHRoYW4gbGFzdCB1c2VkIFhYWFgpCi0gKiBVbmluaXRpYWxpemVkICAgTlVMTCAgICAgICAgIDAKLSAqCi0gKiBFbnRyeSAwIGlzIG5vdCB1c2VkOyB0aGlzIGFsbG93cyBpbmRleCAwIHRvIGRlbm90ZSB0aGUgZW5kIG9mIHRoZSBmcmVlIGxpc3QuCi0gKgotICogTm90ZSB0aGF0IGEgcmVmZXJlbmNlIHZhbHVlIG9mIDAgZG9lcyBub3QgbmVjZXNzYXJpbHkgaW5kaWNhdGUgdGhhdCBhbgotICogZW50cnkgaXMgdW5pbml0aWFsaXplZCwgc2luY2UgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGZyZWUgbGlzdCBjb3VsZCBhbHNvCi0gKiBoYXZlIGEgcmVmZXJlbmNlIHZhbHVlIG9mIDAgKGFsdGhvdWdoIHRoaXMgaXMgdW5saWtlbHkpLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVmX3RhYmxlIHRpcGNfcmVmX3RhYmxlOwotCi1zdGF0aWMgREVGSU5FX1JXTE9DSyhyZWZfdGFibGVfbG9jayk7Ci0KLS8qKgotICogdGlwY19yZWZfdGFibGVfaW5pdCAtIGNyZWF0ZSByZWZlcmVuY2UgdGFibGUgZm9yIHNvY2tldHMKLSAqLwotaW50IHRpcGNfc2tfcmVmX3RhYmxlX2luaXQodTMyIHJlcV9zeiwgdTMyIHN0YXJ0KQoraW50IHRpcGNfc2tfcmh0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewotCXN0cnVjdCByZWZlcmVuY2UgKnRhYmxlOwotCXUzMiBhY3R1YWxfc3o7Ci0KLQkvKiBhY2NvdW50IGZvciB1bnVzZWQgZW50cnksIHRoZW4gcm91bmQgdXAgc2l6ZSB0byBhIHBvd2VyIG9mIDIgKi8KLQotCXJlcV9zeisrOwotCWZvciAoYWN0dWFsX3N6ID0gMTY7IGFjdHVhbF9zeiA8IHJlcV9zejsgYWN0dWFsX3N6IDw8PSAxKSB7Ci0JCS8qIGRvIG5vdGhpbmcgKi8KKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CisJc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIHJodF9wYXJhbXMgPSB7CisJCS5uZWxlbV9oaW50ID0gMTkyLAorCQkuaGVhZF9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGlwY19zb2NrLCBub2RlKSwKKwkJLmtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdGlwY19zb2NrLCBwb3J0aWQpLAorCQkua2V5X2xlbiA9IHNpemVvZih1MzIpLCAvKiBwb3J0aWQgKi8KKwkJLmhhc2hmbiA9IGpoYXNoLAorCQkubWF4X3NoaWZ0ID0gMjAsIC8qIDFNICovCisJCS5taW5fc2hpZnQgPSA4LCAgLyogMjU2ICovCisJCS5ncm93X2RlY2lzaW9uID0gcmh0X2dyb3dfYWJvdmVfNzUsCisJCS5zaHJpbmtfZGVjaXNpb24gPSByaHRfc2hyaW5rX2JlbG93XzMwLAogCX07CiAKLQkvKiBhbGxvY2F0ZSB0YWJsZSAmIG1hcmsgYWxsIGVudHJpZXMgYXMgdW5pbml0aWFsaXplZCAqLwotCXRhYmxlID0gdnphbGxvYyhhY3R1YWxfc3ogKiBzaXplb2Yoc3RydWN0IHJlZmVyZW5jZSkpOwotCWlmICh0YWJsZSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXRpcGNfcmVmX3RhYmxlLmVudHJpZXMgPSB0YWJsZTsKLQl0aXBjX3JlZl90YWJsZS5jYXBhY2l0eSA9IHJlcV9zejsKLQl0aXBjX3JlZl90YWJsZS5pbml0X3BvaW50ID0gMTsKLQl0aXBjX3JlZl90YWJsZS5maXJzdF9mcmVlID0gMDsKLQl0aXBjX3JlZl90YWJsZS5sYXN0X2ZyZWUgPSAwOwotCXRpcGNfcmVmX3RhYmxlLmluZGV4X21hc2sgPSBhY3R1YWxfc3ogLSAxOwotCXRpcGNfcmVmX3RhYmxlLnN0YXJ0X21hc2sgPSBzdGFydCAmIH50aXBjX3JlZl90YWJsZS5pbmRleF9tYXNrOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJoYXNodGFibGVfaW5pdCgmdG4tPnNrX3JodCwgJnJodF9wYXJhbXMpOwogfQogCi0vKioKLSAqIHRpcGNfcmVmX3RhYmxlX3N0b3AgLSBkZXN0cm95IHJlZmVyZW5jZSB0YWJsZSBmb3Igc29ja2V0cwotICovCi12b2lkIHRpcGNfc2tfcmVmX3RhYmxlX3N0b3Aodm9pZCkKK3ZvaWQgdGlwY19za19yaHRfZGVzdHJveShzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JaWYgKCF0aXBjX3JlZl90YWJsZS5lbnRyaWVzKQotCQlyZXR1cm47Ci0JdmZyZWUodGlwY19yZWZfdGFibGUuZW50cmllcyk7Ci0JdGlwY19yZWZfdGFibGUuZW50cmllcyA9IE5VTEw7Ci19CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOwogCi0vKiB0aXBjX3JlZl9hY3F1aXJlIC0gY3JlYXRlIHJlZmVyZW5jZSB0byBhIHNvY2tldAotICoKLSAqIFJlZ2lzdGVyIGFuIHNvY2tldCBwb2ludGVyIGluIHRoZSByZWZlcmVuY2UgdGFibGUuCi0gKiBSZXR1cm5zIGEgdW5pcXVlIHJlZmVyZW5jZSB2YWx1ZSB0aGF0IGlzIHVzZWQgZnJvbSB0aGVuIG9uIHRvIHJldHJpZXZlIHRoZQotICogc29ja2V0IHBvaW50ZXIsIG9yIHRvIGRldGVybWluZSBpZiB0aGUgc29ja2V0IGhhcyBiZWVuIGRlcmVnaXN0ZXJlZC4KLSAqLwotdTMyIHRpcGNfc2tfcmVmX2FjcXVpcmUoc3RydWN0IHRpcGNfc29jayAqdHNrKQotewotCXUzMiBpbmRleDsKLQl1MzIgaW5kZXhfbWFzazsKLQl1MzIgbmV4dF9wbHVzX3VwcGVyOwotCXUzMiByZWYgPSAwOwotCXN0cnVjdCByZWZlcmVuY2UgKmVudHJ5OworCS8qIFdhaXQgZm9yIHNvY2tldCByZWFkZXJzIHRvIGNvbXBsZXRlICovCisJc3luY2hyb25pemVfbmV0KCk7CiAKLQlpZiAodW5saWtlbHkoIXRzaykpIHsKLQkJcHJfZXJyKCJBdHRlbXB0IHRvIGFjcXVpcmUgcmVmLiB0byBub24tZXhpc3RlbnQgb2JqXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWlmICh1bmxpa2VseSghdGlwY19yZWZfdGFibGUuZW50cmllcykpIHsKLQkJcHJfZXJyKCJSZWYuIHRhYmxlIG5vdCBmb3VuZCBpbiBhY3F1aXNpdGlvbiBhdHRlbXB0XG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogVGFrZSBhIGZyZWUgZW50cnksIGlmIGF2YWlsYWJsZTsgb3RoZXJ3aXNlIGluaXRpYWxpemUgYSBuZXcgb25lICovCi0Jd3JpdGVfbG9ja19iaCgmcmVmX3RhYmxlX2xvY2spOwotCWluZGV4ID0gdGlwY19yZWZfdGFibGUuZmlyc3RfZnJlZTsKLQllbnRyeSA9ICZ0aXBjX3JlZl90YWJsZS5lbnRyaWVzW2luZGV4XTsKLQotCWlmIChsaWtlbHkoaW5kZXgpKSB7Ci0JCWluZGV4ID0gdGlwY19yZWZfdGFibGUuZmlyc3RfZnJlZTsKLQkJZW50cnkgPSAmdGlwY19yZWZfdGFibGUuZW50cmllc1tpbmRleF07Ci0JCWluZGV4X21hc2sgPSB0aXBjX3JlZl90YWJsZS5pbmRleF9tYXNrOwotCQluZXh0X3BsdXNfdXBwZXIgPSBlbnRyeS0+cmVmOwotCQl0aXBjX3JlZl90YWJsZS5maXJzdF9mcmVlID0gbmV4dF9wbHVzX3VwcGVyICYgaW5kZXhfbWFzazsKLQkJcmVmID0gKG5leHRfcGx1c191cHBlciAmIH5pbmRleF9tYXNrKSArIGluZGV4OwotCQllbnRyeS0+dHNrID0gdHNrOwotCX0gZWxzZSBpZiAodGlwY19yZWZfdGFibGUuaW5pdF9wb2ludCA8IHRpcGNfcmVmX3RhYmxlLmNhcGFjaXR5KSB7Ci0JCWluZGV4ID0gdGlwY19yZWZfdGFibGUuaW5pdF9wb2ludCsrOwotCQllbnRyeSA9ICZ0aXBjX3JlZl90YWJsZS5lbnRyaWVzW2luZGV4XTsKLQkJcmVmID0gdGlwY19yZWZfdGFibGUuc3RhcnRfbWFzayArIGluZGV4OwotCX0KLQotCWlmIChyZWYpIHsKLQkJZW50cnktPnJlZiA9IHJlZjsKLQkJZW50cnktPnRzayA9IHRzazsKLQl9Ci0Jd3JpdGVfdW5sb2NrX2JoKCZyZWZfdGFibGVfbG9jayk7Ci0JcmV0dXJuIHJlZjsKLX0KLQotLyogdGlwY19za19yZWZfZGlzY2FyZCAtIGludmFsaWRhdGUgcmVmZXJlbmNlIHRvIGFuIHNvY2tldAotICoKLSAqIERpc2FsbG93IGZ1dHVyZSByZWZlcmVuY2VzIHRvIGFuIHNvY2tldCBhbmQgZnJlZSB1cCB0aGUgZW50cnkgZm9yIHJlLXVzZS4KLSAqLwotdm9pZCB0aXBjX3NrX3JlZl9kaXNjYXJkKHUzMiByZWYpCi17Ci0Jc3RydWN0IHJlZmVyZW5jZSAqZW50cnk7Ci0JdTMyIGluZGV4OwotCXUzMiBpbmRleF9tYXNrOwotCi0JaWYgKHVubGlrZWx5KCF0aXBjX3JlZl90YWJsZS5lbnRyaWVzKSkgewotCQlwcl9lcnIoIlJlZi4gdGFibGUgbm90IGZvdW5kIGR1cmluZyBkaXNjYXJkIGF0dGVtcHRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaW5kZXhfbWFzayA9IHRpcGNfcmVmX3RhYmxlLmluZGV4X21hc2s7Ci0JaW5kZXggPSByZWYgJiBpbmRleF9tYXNrOwotCWVudHJ5ID0gJnRpcGNfcmVmX3RhYmxlLmVudHJpZXNbaW5kZXhdOwotCi0Jd3JpdGVfbG9ja19iaCgmcmVmX3RhYmxlX2xvY2spOwotCi0JaWYgKHVubGlrZWx5KCFlbnRyeS0+dHNrKSkgewotCQlwcl9lcnIoIkF0dGVtcHQgdG8gZGlzY2FyZCByZWYuIHRvIG5vbi1leGlzdGVudCBzb2NrZXRcbiIpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCWlmICh1bmxpa2VseShlbnRyeS0+cmVmICE9IHJlZikpIHsKLQkJcHJfZXJyKCJBdHRlbXB0IHRvIGRpc2NhcmQgbm9uLWV4aXN0ZW50IHJlZmVyZW5jZVxuIik7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQkvKiBNYXJrIGVudHJ5IGFzIHVudXNlZDsgaW5jcmVtZW50IGluc3RhbmNlIHBhcnQgb2YgZW50cnkncwotCSAqICAgcmVmZXJlbmNlIHRvIGludmFsaWRhdGUgYW55IHN1YnNlcXVlbnQgcmVmZXJlbmNlcwotCSAqLwotCi0JZW50cnktPnRzayA9IE5VTEw7Ci0JZW50cnktPnJlZiA9IChyZWYgJiB+aW5kZXhfbWFzaykgKyAoaW5kZXhfbWFzayArIDEpOwotCi0JLyogQXBwZW5kIGVudHJ5IHRvIGZyZWUgZW50cnkgbGlzdCAqLwotCWlmICh1bmxpa2VseSh0aXBjX3JlZl90YWJsZS5maXJzdF9mcmVlID09IDApKQotCQl0aXBjX3JlZl90YWJsZS5maXJzdF9mcmVlID0gaW5kZXg7Ci0JZWxzZQotCQl0aXBjX3JlZl90YWJsZS5lbnRyaWVzW3RpcGNfcmVmX3RhYmxlLmxhc3RfZnJlZV0ucmVmIHw9IGluZGV4OwotCXRpcGNfcmVmX3RhYmxlLmxhc3RfZnJlZSA9IGluZGV4OwotZXhpdDoKLQl3cml0ZV91bmxvY2tfYmgoJnJlZl90YWJsZV9sb2NrKTsKLX0KLQotLyogdGlwY19za19nZXQgLSBmaW5kIHJlZmVyZW5jZWQgc29ja2V0IGFuZCByZXR1cm4gcG9pbnRlciB0byBpdAotICovCi1zdHJ1Y3QgdGlwY19zb2NrICp0aXBjX3NrX2dldCh1MzIgcmVmKQotewotCXN0cnVjdCByZWZlcmVuY2UgKmVudHJ5OwotCXN0cnVjdCB0aXBjX3NvY2sgKnRzazsKLQotCWlmICh1bmxpa2VseSghdGlwY19yZWZfdGFibGUuZW50cmllcykpCi0JCXJldHVybiBOVUxMOwotCXJlYWRfbG9ja19iaCgmcmVmX3RhYmxlX2xvY2spOwotCWVudHJ5ID0gJnRpcGNfcmVmX3RhYmxlLmVudHJpZXNbcmVmICYgdGlwY19yZWZfdGFibGUuaW5kZXhfbWFza107Ci0JdHNrID0gZW50cnktPnRzazsKLQlpZiAobGlrZWx5KHRzayAmJiAoZW50cnktPnJlZiA9PSByZWYpKSkKLQkJc29ja19ob2xkKCZ0c2stPnNrKTsKLQllbHNlCi0JCXRzayA9IE5VTEw7Ci0JcmVhZF91bmxvY2tfYmgoJnJlZl90YWJsZV9sb2NrKTsKLQlyZXR1cm4gdHNrOwotfQotCi0vKiB0aXBjX3NrX2dldF9uZXh0IC0gbG9jayAmIHJldHVybiBuZXh0IHNvY2tldCBhZnRlciByZWZlcmVuY2VkIG9uZQotKi8KLXN0cnVjdCB0aXBjX3NvY2sgKnRpcGNfc2tfZ2V0X25leHQodTMyICpyZWYpCi17Ci0Jc3RydWN0IHJlZmVyZW5jZSAqZW50cnk7Ci0Jc3RydWN0IHRpcGNfc29jayAqdHNrID0gTlVMTDsKLQl1aW50IGluZGV4ID0gKnJlZiAmIHRpcGNfcmVmX3RhYmxlLmluZGV4X21hc2s7Ci0KLQlyZWFkX2xvY2tfYmgoJnJlZl90YWJsZV9sb2NrKTsKLQl3aGlsZSAoKytpbmRleCA8IHRpcGNfcmVmX3RhYmxlLmNhcGFjaXR5KSB7Ci0JCWVudHJ5ID0gJnRpcGNfcmVmX3RhYmxlLmVudHJpZXNbaW5kZXhdOwotCQlpZiAoIWVudHJ5LT50c2spCi0JCQljb250aW51ZTsKLQkJdHNrID0gZW50cnktPnRzazsKLQkJc29ja19ob2xkKCZ0c2stPnNrKTsKLQkJKnJlZiA9IGVudHJ5LT5yZWY7Ci0JCWJyZWFrOwotCX0KLQlyZWFkX3VubG9ja19iaCgmcmVmX3RhYmxlX2xvY2spOwotCXJldHVybiB0c2s7Ci19Ci0KLXN0YXRpYyB2b2lkIHRpcGNfc2tfcHV0KHN0cnVjdCB0aXBjX3NvY2sgKnRzaykKLXsKLQlzb2NrX3B1dCgmdHNrLT5zayk7CisJcmhhc2h0YWJsZV9kZXN0cm95KCZ0bi0+c2tfcmh0KTsKIH0KIAogLyoqCkBAIC0yNjM5LDggKzI1MTAsOSBAQAogCXJldHVybiBwdXRfdXNlcihzaXplb2YodmFsdWUpLCBvbCk7CiB9CiAKLXN0YXRpYyBpbnQgdGlwY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHRpcGNfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CisJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHRpcGNfc2lvY19sbl9yZXEgbG5yOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCkBAIC0yNjQ4LDcgKzI1MjAsOCBAQAogCWNhc2UgU0lPQ0dFVExJTktOQU1FOgogCQlpZiAoY29weV9mcm9tX3VzZXIoJmxuciwgYXJncCwgc2l6ZW9mKGxucikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICghdGlwY19ub2RlX2dldF9saW5rbmFtZShsbnIuYmVhcmVyX2lkICYgMHhmZmZmLCBsbnIucGVlciwKKwkJaWYgKCF0aXBjX25vZGVfZ2V0X2xpbmtuYW1lKHNvY2tfbmV0KHNrKSwKKwkJCQkJICAgIGxuci5iZWFyZXJfaWQgJiAweGZmZmYsIGxuci5wZWVyLAogCQkJCQkgICAgbG5yLmxpbmtuYW1lLCBUSVBDX01BWF9MSU5LX05BTUUpKSB7CiAJCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZsbnIsIHNpemVvZihsbnIpKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTI4MjAsMTggKzI2OTMsMjAgQEAKIAlpbnQgZXJyOwogCXZvaWQgKmhkcjsKIAlzdHJ1Y3QgbmxhdHRyICphdHRyczsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CiAKIAloZHIgPSBnZW5sbXNnX3B1dChza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucG9ydGlkLCBjYi0+bmxoLT5ubG1zZ19zZXEsCi0JCQkgICZ0aXBjX2dlbmxfdjJfZmFtaWx5LCBOTE1fRl9NVUxUSSwgVElQQ19OTF9TT0NLX0dFVCk7CisJCQkgICZ0aXBjX2dlbmxfZmFtaWx5LCBOTE1fRl9NVUxUSSwgVElQQ19OTF9TT0NLX0dFVCk7CiAJaWYgKCFoZHIpCiAJCWdvdG8gbXNnX2NhbmNlbDsKIAogCWF0dHJzID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBUSVBDX05MQV9TT0NLKTsKIAlpZiAoIWF0dHJzKQogCQlnb3RvIGdlbmxtc2dfY2FuY2VsOwotCWlmIChubGFfcHV0X3UzMihza2IsIFRJUENfTkxBX1NPQ0tfUkVGLCB0c2stPnJlZikpCisJaWYgKG5sYV9wdXRfdTMyKHNrYiwgVElQQ19OTEFfU09DS19SRUYsIHRzay0+cG9ydGlkKSkKIAkJZ290byBhdHRyX21zZ19jYW5jZWw7Ci0JaWYgKG5sYV9wdXRfdTMyKHNrYiwgVElQQ19OTEFfU09DS19BRERSLCB0aXBjX293bl9hZGRyKSkKKwlpZiAobmxhX3B1dF91MzIoc2tiLCBUSVBDX05MQV9TT0NLX0FERFIsIHRuLT5vd25fYWRkcikpCiAJCWdvdG8gYXR0cl9tc2dfY2FuY2VsOwogCiAJaWYgKHRzay0+Y29ubmVjdGVkKSB7CkBAIC0yODU5LDIyICsyNzM0LDM3IEBACiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgdGlwY19zb2NrICp0c2s7Ci0JdTMyIHByZXZfcmVmID0gY2ItPmFyZ3NbMF07Ci0JdTMyIHJlZiA9IHByZXZfcmVmOworCWNvbnN0IHN0cnVjdCBidWNrZXRfdGFibGUgKnRibDsKKwlzdHJ1Y3Qgcmhhc2hfaGVhZCAqcG9zOworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKKwl1MzIgdGJsX2lkID0gY2ItPmFyZ3NbMF07CisJdTMyIHByZXZfcG9ydGlkID0gY2ItPmFyZ3NbMV07CiAKLQl0c2sgPSB0aXBjX3NrX2dldF9uZXh0KCZyZWYpOwotCWZvciAoOyB0c2s7IHRzayA9IHRpcGNfc2tfZ2V0X25leHQoJnJlZikpIHsKLQkJbG9ja19zb2NrKCZ0c2stPnNrKTsKLQkJZXJyID0gX190aXBjX25sX2FkZF9zayhza2IsIGNiLCB0c2spOwotCQlyZWxlYXNlX3NvY2soJnRzay0+c2spOwotCQl0aXBjX3NrX3B1dCh0c2spOwotCQlpZiAoZXJyKQotCQkJYnJlYWs7CisJcmN1X3JlYWRfbG9jaygpOworCXRibCA9IHJodF9kZXJlZmVyZW5jZV9yY3UoKCZ0bi0+c2tfcmh0KS0+dGJsLCAmdG4tPnNrX3JodCk7CisJZm9yICg7IHRibF9pZCA8IHRibC0+c2l6ZTsgdGJsX2lkKyspIHsKKwkJcmh0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0c2ssIHBvcywgdGJsLCB0YmxfaWQsIG5vZGUpIHsKKwkJCXNwaW5fbG9ja19iaCgmdHNrLT5zay5za19sb2NrLnNsb2NrKTsKKwkJCWlmIChwcmV2X3BvcnRpZCAmJiBwcmV2X3BvcnRpZCAhPSB0c2stPnBvcnRpZCkgeworCQkJCXNwaW5fdW5sb2NrX2JoKCZ0c2stPnNrLnNrX2xvY2suc2xvY2spOworCQkJCWNvbnRpbnVlOworCQkJfQogCi0JCXByZXZfcmVmID0gcmVmOworCQkJZXJyID0gX190aXBjX25sX2FkZF9zayhza2IsIGNiLCB0c2spOworCQkJaWYgKGVycikgeworCQkJCXByZXZfcG9ydGlkID0gdHNrLT5wb3J0aWQ7CisJCQkJc3Bpbl91bmxvY2tfYmgoJnRzay0+c2suc2tfbG9jay5zbG9jayk7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlwcmV2X3BvcnRpZCA9IDA7CisJCQlzcGluX3VubG9ja19iaCgmdHNrLT5zay5za19sb2NrLnNsb2NrKTsKKwkJfQogCX0KLQotCWNiLT5hcmdzWzBdID0gcHJldl9yZWY7CitvdXQ6CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJY2ItPmFyZ3NbMF0gPSB0YmxfaWQ7CisJY2ItPmFyZ3NbMV0gPSBwcmV2X3BvcnRpZDsKIAogCXJldHVybiBza2ItPmxlbjsKIH0KQEAgLTI4ODgsNyArMjc3OCw3IEBACiAJc3RydWN0IG5sYXR0ciAqYXR0cnM7CiAKIAloZHIgPSBnZW5sbXNnX3B1dChza2IsIE5FVExJTktfQ0IoY2ItPnNrYikucG9ydGlkLCBjYi0+bmxoLT5ubG1zZ19zZXEsCi0JCQkgICZ0aXBjX2dlbmxfdjJfZmFtaWx5LCBOTE1fRl9NVUxUSSwgVElQQ19OTF9QVUJMX0dFVCk7CisJCQkgICZ0aXBjX2dlbmxfZmFtaWx5LCBOTE1fRl9NVUxUSSwgVElQQ19OTF9QVUJMX0dFVCk7CiAJaWYgKCFoZHIpCiAJCWdvdG8gbXNnX2NhbmNlbDsKIApAQCAtMjk2MiwxMiArMjg1MiwxMyBAQAogaW50IHRpcGNfbmxfcHVibF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKIAlpbnQgZXJyOwotCXUzMiB0c2tfcmVmID0gY2ItPmFyZ3NbMF07CisJdTMyIHRza19wb3J0aWQgPSBjYi0+YXJnc1swXTsKIAl1MzIgbGFzdF9wdWJsID0gY2ItPmFyZ3NbMV07CiAJdTMyIGRvbmUgPSBjYi0+YXJnc1syXTsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgdGlwY19zb2NrICp0c2s7CiAKLQlpZiAoIXRza19yZWYpIHsKKwlpZiAoIXRza19wb3J0aWQpIHsKIAkJc3RydWN0IG5sYXR0ciAqKmF0dHJzOwogCQlzdHJ1Y3QgbmxhdHRyICpzb2NrW1RJUENfTkxBX1NPQ0tfTUFYICsgMV07CiAKQEAgLTI5ODQsMTMgKzI4NzUsMTMgQEAKIAkJaWYgKCFzb2NrW1RJUENfTkxBX1NPQ0tfUkVGXSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCXRza19yZWYgPSBubGFfZ2V0X3UzMihzb2NrW1RJUENfTkxBX1NPQ0tfUkVGXSk7CisJCXRza19wb3J0aWQgPSBubGFfZ2V0X3UzMihzb2NrW1RJUENfTkxBX1NPQ0tfUkVGXSk7CiAJfQogCiAJaWYgKGRvbmUpCiAJCXJldHVybiAwOwogCi0JdHNrID0gdGlwY19za19nZXQodHNrX3JlZik7CisJdHNrID0gdGlwY19za19sb29rdXAobmV0LCB0c2tfcG9ydGlkKTsKIAlpZiAoIXRzaykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTI5OTksOSArMjg5MCw5IEBACiAJaWYgKCFlcnIpCiAJCWRvbmUgPSAxOwogCXJlbGVhc2Vfc29jaygmdHNrLT5zayk7Ci0JdGlwY19za19wdXQodHNrKTsKKwlzb2NrX3B1dCgmdHNrLT5zayk7CiAKLQljYi0+YXJnc1swXSA9IHRza19yZWY7CisJY2ItPmFyZ3NbMF0gPSB0c2tfcG9ydGlkOwogCWNiLT5hcmdzWzFdID0gbGFzdF9wdWJsOwogCWNiLT5hcmdzWzJdID0gZG9uZTsKIApkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc29ja2V0LmggYi9uZXQvdGlwYy9zb2NrZXQuaAppbmRleCBkMzQwODkzLi4yMzhmMWI3IDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zb2NrZXQuaAorKysgYi9uZXQvdGlwYy9zb2NrZXQuaApAQCAtMSw2ICsxLDYgQEAKIC8qIG5ldC90aXBjL3NvY2tldC5oOiBJbmNsdWRlIGZpbGUgZm9yIFRJUEMgc29ja2V0IGNvZGUKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEVyaWNzc29uIEFCCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgRXJpY3Nzb24gQUIKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MiwxMiArNDIsMTggQEAKICNkZWZpbmUgVElQQ19GTE9XQ1RSTF9XSU4gICAgICAgIChUSVBDX0NPTk5BQ0tfSU5UViAqIDIpCiAjZGVmaW5lIFRJUENfQ09OTl9PVkVSTE9BRF9MSU1JVCAoKFRJUENfRkxPV0NUUkxfV0lOICogMiArIDEpICogXAogCQkJCSAgU0tCX1RSVUVTSVpFKFRJUENfTUFYX1VTRVJfTVNHX1NJWkUpKQotaW50IHRpcGNfc2tfcmN2KHN0cnVjdCBza19idWZmICpidWYpOwotc3RydWN0IHNrX2J1ZmYgKnRpcGNfc2tfc29ja3Nfc2hvdyh2b2lkKTsKLXZvaWQgdGlwY19za19tY2FzdF9yY3Yoc3RydWN0IHNrX2J1ZmYgKmJ1Zik7Ci12b2lkIHRpcGNfc2tfcmVpbml0KHZvaWQpOwotaW50IHRpcGNfc2tfcmVmX3RhYmxlX2luaXQodTMyIHJlcXVlc3RlZF9zaXplLCB1MzIgc3RhcnQpOwotdm9pZCB0aXBjX3NrX3JlZl90YWJsZV9zdG9wKHZvaWQpOworaW50IHRpcGNfc29ja2V0X2luaXQodm9pZCk7Cit2b2lkIHRpcGNfc29ja2V0X3N0b3Aodm9pZCk7CitpbnQgdGlwY19zb2NrX2NyZWF0ZV9sb2NhbChzdHJ1Y3QgbmV0ICpuZXQsIGludCB0eXBlLCBzdHJ1Y3Qgc29ja2V0ICoqcmVzKTsKK3ZvaWQgdGlwY19zb2NrX3JlbGVhc2VfbG9jYWwoc3RydWN0IHNvY2tldCAqc29jayk7CitpbnQgdGlwY19zb2NrX2FjY2VwdF9sb2NhbChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2V0ICoqbmV3c29jaywKKwkJCSAgIGludCBmbGFncyk7CitpbnQgdGlwY19za19yY3Yoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICppbnB1dHEpOwordm9pZCB0aXBjX3NrX21jYXN0X3JjdihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmX2hlYWQgKmFycnZxLAorCQkgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqaW5wdXRxKTsKK3ZvaWQgdGlwY19za19yZWluaXQoc3RydWN0IG5ldCAqbmV0KTsKK2ludCB0aXBjX3NrX3JodF9pbml0KHN0cnVjdCBuZXQgKm5ldCk7Cit2b2lkIHRpcGNfc2tfcmh0X2Rlc3Ryb3koc3RydWN0IG5ldCAqbmV0KTsKIGludCB0aXBjX25sX3NrX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTsKIGludCB0aXBjX25sX3B1YmxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwogCmRpZmYgLS1naXQgYS9uZXQvdGlwYy9zdWJzY3IuYyBiL25ldC90aXBjL3N1YnNjci5jCmluZGV4IDAzNDQyMDYuLjcyYzMzOWUgMTAwNjQ0Ci0tLSBhL25ldC90aXBjL3N1YnNjci5jCisrKyBiL25ldC90aXBjL3N1YnNjci5jCkBAIC01MCwzMyArNTAsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgc3Vic2NyaXB0aW9uX2xpc3Q7CiB9OwogCi1zdGF0aWMgdm9pZCBzdWJzY3JfY29ubl9tc2dfZXZlbnQoaW50IGNvbmlkLCBzdHJ1Y3Qgc29ja2FkZHJfdGlwYyAqYWRkciwKLQkJCQkgIHZvaWQgKnVzcl9kYXRhLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOwotc3RhdGljIHZvaWQgKnN1YnNjcl9uYW1lZF9tc2dfZXZlbnQoaW50IGNvbmlkKTsKLXN0YXRpYyB2b2lkIHN1YnNjcl9jb25uX3NodXRkb3duX2V2ZW50KGludCBjb25pZCwgdm9pZCAqdXNyX2RhdGEpOwotCi1zdGF0aWMgYXRvbWljX3Qgc3Vic2NyaXB0aW9uX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfdGlwYyB0b3BzcnZfYWRkciBfX3JlYWRfbW9zdGx5ID0gewotCS5mYW1pbHkJCQk9IEFGX1RJUEMsCi0JLmFkZHJ0eXBlCQk9IFRJUENfQUREUl9OQU1FU0VRLAotCS5hZGRyLm5hbWVzZXEudHlwZQk9IFRJUENfVE9QX1NSViwKLQkuYWRkci5uYW1lc2VxLmxvd2VyCT0gVElQQ19UT1BfU1JWLAotCS5hZGRyLm5hbWVzZXEudXBwZXIJPSBUSVBDX1RPUF9TUlYsCi0JLnNjb3BlCQkJPSBUSVBDX05PREVfU0NPUEUKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdGlwY19zZXJ2ZXIgdG9wc3J2IF9fcmVhZF9tb3N0bHkgPSB7Ci0JLnNhZGRyCQkJPSAmdG9wc3J2X2FkZHIsCi0JLmltcAkJCT0gVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFLAotCS50eXBlCQkJPSBTT0NLX1NFUVBBQ0tFVCwKLQkubWF4X3JjdmJ1Zl9zaXplCT0gc2l6ZW9mKHN0cnVjdCB0aXBjX3N1YnNjciksCi0JLm5hbWUJCQk9ICJ0b3BvbG9neV9zZXJ2ZXIiLAotCS50aXBjX2Nvbm5fcmVjdm1zZwk9IHN1YnNjcl9jb25uX21zZ19ldmVudCwKLQkudGlwY19jb25uX25ldwkJPSBzdWJzY3JfbmFtZWRfbXNnX2V2ZW50LAotCS50aXBjX2Nvbm5fc2h1dGRvd24JPSBzdWJzY3JfY29ubl9zaHV0ZG93bl9ldmVudCwKLX07Ci0KIC8qKgogICogaHRvaGwgLSBjb252ZXJ0IHZhbHVlIHRvIGVuZGlhbm5lc3MgdXNlZCBieSBkZXN0aW5hdGlvbgogICogQGluOiB2YWx1ZSB0byBjb252ZXJ0CkBAIC05Myw2ICs2Niw3IEBACiAJCQkgICAgICB1MzIgZm91bmRfdXBwZXIsIHUzMiBldmVudCwgdTMyIHBvcnRfcmVmLAogCQkJICAgICAgdTMyIG5vZGUpCiB7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKHN1Yi0+bmV0LCB0aXBjX25ldF9pZCk7CiAJc3RydWN0IHRpcGNfc3Vic2NyaWJlciAqc3Vic2NyaWJlciA9IHN1Yi0+c3Vic2NyaWJlcjsKIAlzdHJ1Y3Qga3ZlYyBtc2dfc2VjdDsKIApAQCAtMTAzLDggKzc3LDggQEAKIAlzdWItPmV2dC5mb3VuZF91cHBlciA9IGh0b2hsKGZvdW5kX3VwcGVyLCBzdWItPnN3YXApOwogCXN1Yi0+ZXZ0LnBvcnQucmVmID0gaHRvaGwocG9ydF9yZWYsIHN1Yi0+c3dhcCk7CiAJc3ViLT5ldnQucG9ydC5ub2RlID0gaHRvaGwobm9kZSwgc3ViLT5zd2FwKTsKLQl0aXBjX2Nvbm5fc2VuZG1zZygmdG9wc3J2LCBzdWJzY3JpYmVyLT5jb25pZCwgTlVMTCwgbXNnX3NlY3QuaW92X2Jhc2UsCi0JCQkgIG1zZ19zZWN0Lmlvdl9sZW4pOworCXRpcGNfY29ubl9zZW5kbXNnKHRuLT50b3BzcnYsIHN1YnNjcmliZXItPmNvbmlkLCBOVUxMLAorCQkJICBtc2dfc2VjdC5pb3ZfYmFzZSwgbXNnX3NlY3QuaW92X2xlbik7CiB9CiAKIC8qKgpAQCAtMTQxLDkgKzExNSwxMSBAQAogCXN1YnNjcl9zZW5kX2V2ZW50KHN1YiwgZm91bmRfbG93ZXIsIGZvdW5kX3VwcGVyLCBldmVudCwgcG9ydF9yZWYsIG5vZGUpOwogfQogCi1zdGF0aWMgdm9pZCBzdWJzY3JfdGltZW91dChzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YikKK3N0YXRpYyB2b2lkIHN1YnNjcl90aW1lb3V0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKKwlzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YiA9IChzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKilkYXRhOwogCXN0cnVjdCB0aXBjX3N1YnNjcmliZXIgKnN1YnNjcmliZXIgPSBzdWItPnN1YnNjcmliZXI7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKHN1Yi0+bmV0LCB0aXBjX25ldF9pZCk7CiAKIAkvKiBUaGUgc3BpbiBsb2NrIHBlciBzdWJzY3JpYmVyIGlzIHVzZWQgdG8gcHJvdGVjdCBpdHMgbWVtYmVycyAqLwogCXNwaW5fbG9ja19iaCgmc3Vic2NyaWJlci0+bG9jayk7CkBAIC0xNjcsOSArMTQzLDggQEAKIAkJCSAgVElQQ19TVUJTQ1JfVElNRU9VVCwgMCwgMCk7CiAKIAkvKiBOb3cgZGVzdHJveSBzdWJzY3JpcHRpb24gKi8KLQlrX3Rlcm1fdGltZXIoJnN1Yi0+dGltZXIpOwogCWtmcmVlKHN1Yik7Ci0JYXRvbWljX2RlYygmc3Vic2NyaXB0aW9uX2NvdW50KTsKKwlhdG9taWNfZGVjKCZ0bi0+c3Vic2NyaXB0aW9uX2NvdW50KTsKIH0KIAogLyoqCkBAIC0xNzksMTAgKzE1NCwxMiBAQAogICovCiBzdGF0aWMgdm9pZCBzdWJzY3JfZGVsKHN0cnVjdCB0aXBjX3N1YnNjcmlwdGlvbiAqc3ViKQogeworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhzdWItPm5ldCwgdGlwY19uZXRfaWQpOworCiAJdGlwY19uYW1ldGJsX3Vuc3Vic2NyaWJlKHN1Yik7CiAJbGlzdF9kZWwoJnN1Yi0+c3Vic2NyaXB0aW9uX2xpc3QpOwogCWtmcmVlKHN1Yik7Ci0JYXRvbWljX2RlYygmc3Vic2NyaXB0aW9uX2NvdW50KTsKKwlhdG9taWNfZGVjKCZ0bi0+c3Vic2NyaXB0aW9uX2NvdW50KTsKIH0KIAogLyoqCkBAIC0xOTAsOSArMTY3LDEyIEBACiAgKgogICogTm90ZTogTXVzdCBjYWxsIGl0IGluIHByb2Nlc3MgY29udGV4dCBzaW5jZSBpdCBtaWdodCBzbGVlcC4KICAqLwotc3RhdGljIHZvaWQgc3Vic2NyX3Rlcm1pbmF0ZShzdHJ1Y3QgdGlwY19zdWJzY3JpYmVyICpzdWJzY3JpYmVyKQorc3RhdGljIHZvaWQgc3Vic2NyX3Rlcm1pbmF0ZShzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YikKIHsKLQl0aXBjX2Nvbm5fdGVybWluYXRlKCZ0b3BzcnYsIHN1YnNjcmliZXItPmNvbmlkKTsKKwlzdHJ1Y3QgdGlwY19zdWJzY3JpYmVyICpzdWJzY3JpYmVyID0gc3ViLT5zdWJzY3JpYmVyOworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhzdWItPm5ldCwgdGlwY19uZXRfaWQpOworCisJdGlwY19jb25uX3Rlcm1pbmF0ZSh0bi0+dG9wc3J2LCBzdWJzY3JpYmVyLT5jb25pZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHN1YnNjcl9yZWxlYXNlKHN0cnVjdCB0aXBjX3N1YnNjcmliZXIgKnN1YnNjcmliZXIpCkBAIC0yMDcsOCArMTg3LDcgQEAKIAkJCQkgc3Vic2NyaXB0aW9uX2xpc3QpIHsKIAkJaWYgKHN1Yi0+dGltZW91dCAhPSBUSVBDX1dBSVRfRk9SRVZFUikgewogCQkJc3Bpbl91bmxvY2tfYmgoJnN1YnNjcmliZXItPmxvY2spOwotCQkJa19jYW5jZWxfdGltZXIoJnN1Yi0+dGltZXIpOwotCQkJa190ZXJtX3RpbWVyKCZzdWItPnRpbWVyKTsKKwkJCWRlbF90aW1lcl9zeW5jKCZzdWItPnRpbWVyKTsKIAkJCXNwaW5fbG9ja19iaCgmc3Vic2NyaWJlci0+bG9jayk7CiAJCX0KIAkJc3Vic2NyX2RlbChzdWIpOwpAQCAtMjUwLDggKzIyOSw3IEBACiAJaWYgKHN1Yi0+dGltZW91dCAhPSBUSVBDX1dBSVRfRk9SRVZFUikgewogCQlzdWItPnRpbWVvdXQgPSBUSVBDX1dBSVRfRk9SRVZFUjsKIAkJc3Bpbl91bmxvY2tfYmgoJnN1YnNjcmliZXItPmxvY2spOwotCQlrX2NhbmNlbF90aW1lcigmc3ViLT50aW1lcik7Ci0JCWtfdGVybV90aW1lcigmc3ViLT50aW1lcik7CisJCWRlbF90aW1lcl9zeW5jKCZzdWItPnRpbWVyKTsKIAkJc3Bpbl9sb2NrX2JoKCZzdWJzY3JpYmVyLT5sb2NrKTsKIAl9CiAJc3Vic2NyX2RlbChzdWIpOwpAQCAtMjYyLDkgKzI0MCwxMSBAQAogICoKICAqIENhbGxlZCB3aXRoIHN1YnNjcmliZXIgbG9jayBoZWxkLgogICovCi1zdGF0aWMgaW50IHN1YnNjcl9zdWJzY3JpYmUoc3RydWN0IHRpcGNfc3Vic2NyICpzLAorc3RhdGljIGludCBzdWJzY3Jfc3Vic2NyaWJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRpcGNfc3Vic2NyICpzLAogCQkJICAgIHN0cnVjdCB0aXBjX3N1YnNjcmliZXIgKnN1YnNjcmliZXIsCi0JCQkgICAgc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICoqc3ViX3ApIHsKKwkJCSAgICBzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKipzdWJfcCkKK3sKKwlzdHJ1Y3QgdGlwY19uZXQgKnRuID0gbmV0X2dlbmVyaWMobmV0LCB0aXBjX25ldF9pZCk7CiAJc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzdWI7CiAJaW50IHN3YXA7CiAKQEAgLTI3OSw3ICsyNTksNyBAQAogCX0KIAogCS8qIFJlZnVzZSBzdWJzY3JpcHRpb24gaWYgZ2xvYmFsIGxpbWl0IGV4Y2VlZGVkICovCi0JaWYgKGF0b21pY19yZWFkKCZzdWJzY3JpcHRpb25fY291bnQpID49IFRJUENfTUFYX1NVQlNDUklQVElPTlMpIHsKKwlpZiAoYXRvbWljX3JlYWQoJnRuLT5zdWJzY3JpcHRpb25fY291bnQpID49IFRJUENfTUFYX1NVQlNDUklQVElPTlMpIHsKIAkJcHJfd2FybigiU3Vic2NyaXB0aW9uIHJlamVjdGVkLCBsaW1pdCByZWFjaGVkICgldSlcbiIsCiAJCQlUSVBDX01BWF9TVUJTQ1JJUFRJT05TKTsKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yOTMsMTAgKzI3MywxMSBAQAogCX0KIAogCS8qIEluaXRpYWxpemUgc3Vic2NyaXB0aW9uIG9iamVjdCAqLworCXN1Yi0+bmV0ID0gbmV0OwogCXN1Yi0+c2VxLnR5cGUgPSBodG9obChzLT5zZXEudHlwZSwgc3dhcCk7CiAJc3ViLT5zZXEubG93ZXIgPSBodG9obChzLT5zZXEubG93ZXIsIHN3YXApOwogCXN1Yi0+c2VxLnVwcGVyID0gaHRvaGwocy0+c2VxLnVwcGVyLCBzd2FwKTsKLQlzdWItPnRpbWVvdXQgPSBodG9obChzLT50aW1lb3V0LCBzd2FwKTsKKwlzdWItPnRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKGh0b2hsKHMtPnRpbWVvdXQsIHN3YXApKTsKIAlzdWItPmZpbHRlciA9IGh0b2hsKHMtPmZpbHRlciwgc3dhcCk7CiAJaWYgKCghKHN1Yi0+ZmlsdGVyICYgVElQQ19TVUJfUE9SVFMpID09CiAJICAgICAhKHN1Yi0+ZmlsdGVyICYgVElQQ19TVUJfU0VSVklDRSkpIHx8CkBAIC0zMDksMTEgKzI5MCwxMCBAQAogCXN1Yi0+c3Vic2NyaWJlciA9IHN1YnNjcmliZXI7CiAJc3ViLT5zd2FwID0gc3dhcDsKIAltZW1jcHkoJnN1Yi0+ZXZ0LnMsIHMsIHNpemVvZihzdHJ1Y3QgdGlwY19zdWJzY3IpKTsKLQlhdG9taWNfaW5jKCZzdWJzY3JpcHRpb25fY291bnQpOworCWF0b21pY19pbmMoJnRuLT5zdWJzY3JpcHRpb25fY291bnQpOwogCWlmIChzdWItPnRpbWVvdXQgIT0gVElQQ19XQUlUX0ZPUkVWRVIpIHsKLQkJa19pbml0X3RpbWVyKCZzdWItPnRpbWVyLAotCQkJICAgICAoSGFuZGxlcilzdWJzY3JfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpc3ViKTsKLQkJa19zdGFydF90aW1lcigmc3ViLT50aW1lciwgc3ViLT50aW1lb3V0KTsKKwkJc2V0dXBfdGltZXIoJnN1Yi0+dGltZXIsIHN1YnNjcl90aW1lb3V0LCAodW5zaWduZWQgbG9uZylzdWIpOworCQltb2RfdGltZXIoJnN1Yi0+dGltZXIsIGppZmZpZXMgKyBzdWItPnRpbWVvdXQpOwogCX0KIAkqc3ViX3AgPSBzdWI7CiAJcmV0dXJuIDA7CkBAIC0zMjYsMTYgKzMwNiwxOCBAQAogfQogCiAvKiBIYW5kbGUgb25lIHJlcXVlc3QgdG8gY3JlYXRlIGEgbmV3IHN1YnNjcmlwdGlvbiBmb3IgdGhlIHN1YnNjcmliZXIgKi8KLXN0YXRpYyB2b2lkIHN1YnNjcl9jb25uX21zZ19ldmVudChpbnQgY29uaWQsIHN0cnVjdCBzb2NrYWRkcl90aXBjICphZGRyLAotCQkJCSAgdm9pZCAqdXNyX2RhdGEsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKK3N0YXRpYyB2b2lkIHN1YnNjcl9jb25uX21zZ19ldmVudChzdHJ1Y3QgbmV0ICpuZXQsIGludCBjb25pZCwKKwkJCQkgIHN0cnVjdCBzb2NrYWRkcl90aXBjICphZGRyLCB2b2lkICp1c3JfZGF0YSwKKwkJCQkgIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKIAlzdHJ1Y3QgdGlwY19zdWJzY3JpYmVyICpzdWJzY3JpYmVyID0gdXNyX2RhdGE7CiAJc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uICpzdWIgPSBOVUxMOwogCiAJc3Bpbl9sb2NrX2JoKCZzdWJzY3JpYmVyLT5sb2NrKTsKLQlpZiAoc3Vic2NyX3N1YnNjcmliZSgoc3RydWN0IHRpcGNfc3Vic2NyICopYnVmLCBzdWJzY3JpYmVyLCAmc3ViKSA8IDApIHsKKwlpZiAoc3Vic2NyX3N1YnNjcmliZShuZXQsIChzdHJ1Y3QgdGlwY19zdWJzY3IgKilidWYsIHN1YnNjcmliZXIsCisJCQkgICAgICZzdWIpIDwgMCkgewogCQlzcGluX3VubG9ja19iaCgmc3Vic2NyaWJlci0+bG9jayk7Ci0JCXN1YnNjcl90ZXJtaW5hdGUoc3Vic2NyaWJlcik7CisJCXN1YnNjcl90ZXJtaW5hdGUoc3ViKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoc3ViKQpAQCAtMzQzLDcgKzMyNSw2IEBACiAJc3Bpbl91bmxvY2tfYmgoJnN1YnNjcmliZXItPmxvY2spOwogfQogCi0KIC8qIEhhbmRsZSBvbmUgcmVxdWVzdCB0byBlc3RhYmxpc2ggYSBuZXcgc3Vic2NyaWJlciAqLwogc3RhdGljIHZvaWQgKnN1YnNjcl9uYW1lZF9tc2dfZXZlbnQoaW50IGNvbmlkKQogewpAQCAtMzYyLDEyICszNDMsNTAgQEAKIAlyZXR1cm4gKHZvaWQgKilzdWJzY3JpYmVyOwogfQogCi1pbnQgdGlwY19zdWJzY3Jfc3RhcnQodm9pZCkKK2ludCB0aXBjX3N1YnNjcl9zdGFydChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JcmV0dXJuIHRpcGNfc2VydmVyX3N0YXJ0KCZ0b3BzcnYpOworCXN0cnVjdCB0aXBjX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIHRpcGNfbmV0X2lkKTsKKwljb25zdCBjaGFyIG5hbWVbXSA9ICJ0b3BvbG9neV9zZXJ2ZXIiOworCXN0cnVjdCB0aXBjX3NlcnZlciAqdG9wc3J2OworCXN0cnVjdCBzb2NrYWRkcl90aXBjICpzYWRkcjsKKworCXNhZGRyID0ga3phbGxvYyhzaXplb2YoKnNhZGRyKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFzYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisJc2FkZHItPmZhbWlseQkJCT0gQUZfVElQQzsKKwlzYWRkci0+YWRkcnR5cGUJCQk9IFRJUENfQUREUl9OQU1FU0VROworCXNhZGRyLT5hZGRyLm5hbWVzZXEudHlwZQk9IFRJUENfVE9QX1NSVjsKKwlzYWRkci0+YWRkci5uYW1lc2VxLmxvd2VyCT0gVElQQ19UT1BfU1JWOworCXNhZGRyLT5hZGRyLm5hbWVzZXEudXBwZXIJPSBUSVBDX1RPUF9TUlY7CisJc2FkZHItPnNjb3BlCQkJPSBUSVBDX05PREVfU0NPUEU7CisKKwl0b3BzcnYgPSBremFsbG9jKHNpemVvZigqdG9wc3J2KSwgR0ZQX0FUT01JQyk7CisJaWYgKCF0b3BzcnYpIHsKKwkJa2ZyZWUoc2FkZHIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJdG9wc3J2LT5uZXQJCQk9IG5ldDsKKwl0b3BzcnYtPnNhZGRyCQkJPSBzYWRkcjsKKwl0b3BzcnYtPmltcAkJCT0gVElQQ19DUklUSUNBTF9JTVBPUlRBTkNFOworCXRvcHNydi0+dHlwZQkJCT0gU09DS19TRVFQQUNLRVQ7CisJdG9wc3J2LT5tYXhfcmN2YnVmX3NpemUJCT0gc2l6ZW9mKHN0cnVjdCB0aXBjX3N1YnNjcik7CisJdG9wc3J2LT50aXBjX2Nvbm5fcmVjdm1zZwk9IHN1YnNjcl9jb25uX21zZ19ldmVudDsKKwl0b3BzcnYtPnRpcGNfY29ubl9uZXcJCT0gc3Vic2NyX25hbWVkX21zZ19ldmVudDsKKwl0b3BzcnYtPnRpcGNfY29ubl9zaHV0ZG93bgk9IHN1YnNjcl9jb25uX3NodXRkb3duX2V2ZW50OworCisJc3RybmNweSh0b3BzcnYtPm5hbWUsIG5hbWUsIHN0cmxlbihuYW1lKSArIDEpOworCXRuLT50b3BzcnYgPSB0b3BzcnY7CisJYXRvbWljX3NldCgmdG4tPnN1YnNjcmlwdGlvbl9jb3VudCwgMCk7CisKKwlyZXR1cm4gdGlwY19zZXJ2ZXJfc3RhcnQodG9wc3J2KTsKIH0KIAotdm9pZCB0aXBjX3N1YnNjcl9zdG9wKHZvaWQpCit2b2lkIHRpcGNfc3Vic2NyX3N0b3Aoc3RydWN0IG5ldCAqbmV0KQogewotCXRpcGNfc2VydmVyX3N0b3AoJnRvcHNydik7CisJc3RydWN0IHRpcGNfbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgdGlwY19uZXRfaWQpOworCXN0cnVjdCB0aXBjX3NlcnZlciAqdG9wc3J2ID0gdG4tPnRvcHNydjsKKworCXRpcGNfc2VydmVyX3N0b3AodG9wc3J2KTsKKwlrZnJlZSh0b3BzcnYtPnNhZGRyKTsKKwlrZnJlZSh0b3BzcnYpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3RpcGMvc3Vic2NyLmggYi9uZXQvdGlwYy9zdWJzY3IuaAppbmRleCAzOTNlNDE3Li4zMzQ4OGJkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9zdWJzY3IuaAorKysgYi9uZXQvdGlwYy9zdWJzY3IuaApAQCAtMzksNiArMzksOSBAQAogCiAjaW5jbHVkZSAic2VydmVyLmgiCiAKKyNkZWZpbmUgVElQQ19NQVhfU1VCU0NSSVBUSU9OUwk2NTUzNQorI2RlZmluZSBUSVBDX01BWF9QVUJMSUNBVElPTlMJNjU1MzUKKwogc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uOwogc3RydWN0IHRpcGNfc3Vic2NyaWJlcjsKIApAQCAtNDYsNiArNDksNyBAQAogICogc3RydWN0IHRpcGNfc3Vic2NyaXB0aW9uIC0gVElQQyBuZXR3b3JrIHRvcG9sb2d5IHN1YnNjcmlwdGlvbiBvYmplY3QKICAqIEBzdWJzY3JpYmVyOiBwb2ludGVyIHRvIGl0cyBzdWJzY3JpYmVyCiAgKiBAc2VxOiBuYW1lIHNlcXVlbmNlIGFzc29jaWF0ZWQgd2l0aCBzdWJzY3JpcHRpb24KKyAqIEBuZXQ6IHBvaW50IHRvIG5ldHdvcmsgbmFtZXNwYWNlCiAgKiBAdGltZW91dDogZHVyYXRpb24gb2Ygc3Vic2NyaXB0aW9uIChpbiBtcykKICAqIEBmaWx0ZXI6IGV2ZW50IGZpbHRlcmluZyB0byBiZSBkb25lIGZvciBzdWJzY3JpcHRpb24KICAqIEB0aW1lcjogdGltZXIgZ292ZXJuaW5nIHN1YnNjcmlwdGlvbiBkdXJhdGlvbiAob3B0aW9uYWwpCkBAIC01OCw3ICs2Miw4IEBACiBzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gewogCXN0cnVjdCB0aXBjX3N1YnNjcmliZXIgKnN1YnNjcmliZXI7CiAJc3RydWN0IHRpcGNfbmFtZV9zZXEgc2VxOwotCXUzMiB0aW1lb3V0OworCXN0cnVjdCBuZXQgKm5ldDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAJdTMyIGZpbHRlcjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5hbWVzZXFfbGlzdDsKQEAgLTY5LDEzICs3NCwxMCBAQAogCiBpbnQgdGlwY19zdWJzY3Jfb3ZlcmxhcChzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YiwgdTMyIGZvdW5kX2xvd2VyLAogCQkJdTMyIGZvdW5kX3VwcGVyKTsKLQogdm9pZCB0aXBjX3N1YnNjcl9yZXBvcnRfb3ZlcmxhcChzdHJ1Y3QgdGlwY19zdWJzY3JpcHRpb24gKnN1YiwgdTMyIGZvdW5kX2xvd2VyLAogCQkJCXUzMiBmb3VuZF91cHBlciwgdTMyIGV2ZW50LCB1MzIgcG9ydF9yZWYsCiAJCQkJdTMyIG5vZGUsIGludCBtdXN0KTsKLQotaW50IHRpcGNfc3Vic2NyX3N0YXJ0KHZvaWQpOwotCi12b2lkIHRpcGNfc3Vic2NyX3N0b3Aodm9pZCk7CitpbnQgdGlwY19zdWJzY3Jfc3RhcnQoc3RydWN0IG5ldCAqbmV0KTsKK3ZvaWQgdGlwY19zdWJzY3Jfc3RvcChzdHJ1Y3QgbmV0ICpuZXQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCA4ZTFiMTAyLi41MjZiNmVkIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0xNDQ1LDcgKzE0NDUsNiBAQAogc3RhdGljIGludCB1bml4X2RncmFtX3NlbmRtc2coc3RydWN0IGtpb2NiICpraW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCSAgICAgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3Qgc29ja19pb2NiICpzaW9jYiA9IGtpb2NiX3RvX3Npb2NiKGtpb2NiKTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CiAJc3RydWN0IHVuaXhfc29jayAqdSA9IHVuaXhfc2soc2spOwpAQCAtMTQ1NiwxNCArMTQ1NSwxMiBAQAogCXVuc2lnbmVkIGludCBoYXNoOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJbG9uZyB0aW1lbzsKLQlzdHJ1Y3Qgc2NtX2Nvb2tpZSB0bXBfc2NtOworCXN0cnVjdCBzY21fY29va2llIHNjbTsKIAlpbnQgbWF4X2xldmVsOwogCWludCBkYXRhX2xlbiA9IDA7CiAKLQlpZiAoTlVMTCA9PSBzaW9jYi0+c2NtKQotCQlzaW9jYi0+c2NtID0gJnRtcF9zY207CiAJd2FpdF9mb3JfdW5peF9nYygpOwotCWVyciA9IHNjbV9zZW5kKHNvY2ssIG1zZywgc2lvY2ItPnNjbSwgZmFsc2UpOworCWVyciA9IHNjbV9zZW5kKHNvY2ssIG1zZywgJnNjbSwgZmFsc2UpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0xNTA3LDExICsxNTA0LDExIEBACiAJaWYgKHNrYiA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAotCWVyciA9IHVuaXhfc2NtX3RvX3NrYihzaW9jYi0+c2NtLCBza2IsIHRydWUpOworCWVyciA9IHVuaXhfc2NtX3RvX3NrYigmc2NtLCBza2IsIHRydWUpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9mcmVlOwogCW1heF9sZXZlbCA9IGVyciArIDE7Ci0JdW5peF9nZXRfc2VjZGF0YShzaW9jYi0+c2NtLCBza2IpOworCXVuaXhfZ2V0X3NlY2RhdGEoJnNjbSwgc2tiKTsKIAogCXNrYl9wdXQoc2tiLCBsZW4gLSBkYXRhX2xlbik7CiAJc2tiLT5kYXRhX2xlbiA9IGRhdGFfbGVuOwpAQCAtMTYwNiw3ICsxNjAzLDcgQEAKIAl1bml4X3N0YXRlX3VubG9jayhvdGhlcik7CiAJb3RoZXItPnNrX2RhdGFfcmVhZHkob3RoZXIpOwogCXNvY2tfcHV0KG90aGVyKTsKLQlzY21fZGVzdHJveShzaW9jYi0+c2NtKTsKKwlzY21fZGVzdHJveSgmc2NtKTsKIAlyZXR1cm4gbGVuOwogCiBvdXRfdW5sb2NrOgpAQCAtMTYxNiw3ICsxNjEzLDcgQEAKIG91dDoKIAlpZiAob3RoZXIpCiAJCXNvY2tfcHV0KG90aGVyKTsKLQlzY21fZGVzdHJveShzaW9jYi0+c2NtKTsKKwlzY21fZGVzdHJveSgmc2NtKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNjI4LDIxICsxNjI1LDE4IEBACiBzdGF0aWMgaW50IHVuaXhfc3RyZWFtX3NlbmRtc2coc3RydWN0IGtpb2NiICpraW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJCSAgICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7Ci0Jc3RydWN0IHNvY2tfaW9jYiAqc2lvY2IgPSBraW9jYl90b19zaW9jYihraW9jYik7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHNvY2sgKm90aGVyID0gTlVMTDsKIAlpbnQgZXJyLCBzaXplOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IHNlbnQgPSAwOwotCXN0cnVjdCBzY21fY29va2llIHRtcF9zY207CisJc3RydWN0IHNjbV9jb29raWUgc2NtOwogCWJvb2wgZmRzX3NlbnQgPSBmYWxzZTsKIAlpbnQgbWF4X2xldmVsOwogCWludCBkYXRhX2xlbjsKIAotCWlmIChOVUxMID09IHNpb2NiLT5zY20pCi0JCXNpb2NiLT5zY20gPSAmdG1wX3NjbTsKIAl3YWl0X2Zvcl91bml4X2djKCk7Ci0JZXJyID0gc2NtX3NlbmQoc29jaywgbXNnLCBzaW9jYi0+c2NtLCBmYWxzZSk7CisJZXJyID0gc2NtX3NlbmQoc29jaywgbXNnLCAmc2NtLCBmYWxzZSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTE2ODMsNyArMTY3Nyw3IEBACiAJCQlnb3RvIG91dF9lcnI7CiAKIAkJLyogT25seSBzZW5kIHRoZSBmZHMgaW4gdGhlIGZpcnN0IGJ1ZmZlciAqLwotCQllcnIgPSB1bml4X3NjbV90b19za2Ioc2lvY2ItPnNjbSwgc2tiLCAhZmRzX3NlbnQpOworCQllcnIgPSB1bml4X3NjbV90b19za2IoJnNjbSwgc2tiLCAhZmRzX3NlbnQpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlnb3RvIG91dF9lcnI7CkBAIC0xNzE1LDggKzE3MDksNyBAQAogCQlzZW50ICs9IHNpemU7CiAJfQogCi0Jc2NtX2Rlc3Ryb3koc2lvY2ItPnNjbSk7Ci0Jc2lvY2ItPnNjbSA9IE5VTEw7CisJc2NtX2Rlc3Ryb3koJnNjbSk7CiAKIAlyZXR1cm4gc2VudDsKIApAQCAtMTcyOCw4ICsxNzIxLDcgQEAKIAkJc2VuZF9zaWcoU0lHUElQRSwgY3VycmVudCwgMCk7CiAJZXJyID0gLUVQSVBFOwogb3V0X2VycjoKLQlzY21fZGVzdHJveShzaW9jYi0+c2NtKTsKLQlzaW9jYi0+c2NtID0gTlVMTDsKKwlzY21fZGVzdHJveSgmc2NtKTsKIAlyZXR1cm4gc2VudCA/IDogZXJyOwogfQogCkBAIC0xNzc4LDggKzE3NzAsNyBAQAogCQkJICAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSwKIAkJCSAgICAgIGludCBmbGFncykKIHsKLQlzdHJ1Y3Qgc29ja19pb2NiICpzaW9jYiA9IGtpb2NiX3RvX3Npb2NiKGlvY2IpOwotCXN0cnVjdCBzY21fY29va2llIHRtcF9zY207CisJc3RydWN0IHNjbV9jb29raWUgc2NtOwogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCB1bml4X3NvY2sgKnUgPSB1bml4X3NrKHNrKTsKIAlpbnQgbm9ibG9jayA9IGZsYWdzICYgTVNHX0RPTlRXQUlUOwpAQCAtMTgzMSwxNiArMTgyMiwxNCBAQAogCWlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfUkNWVFNUQU1QKSkKIAkJX19zb2NrX3JlY3ZfdGltZXN0YW1wKG1zZywgc2ssIHNrYik7CiAKLQlpZiAoIXNpb2NiLT5zY20pIHsKLQkJc2lvY2ItPnNjbSA9ICZ0bXBfc2NtOwotCQltZW1zZXQoJnRtcF9zY20sIDAsIHNpemVvZih0bXBfc2NtKSk7Ci0JfQotCXNjbV9zZXRfY3JlZChzaW9jYi0+c2NtLCBVTklYQ0Ioc2tiKS5waWQsIFVOSVhDQihza2IpLnVpZCwgVU5JWENCKHNrYikuZ2lkKTsKLQl1bml4X3NldF9zZWNkYXRhKHNpb2NiLT5zY20sIHNrYik7CisJbWVtc2V0KCZzY20sIDAsIHNpemVvZihzY20pKTsKKworCXNjbV9zZXRfY3JlZCgmc2NtLCBVTklYQ0Ioc2tiKS5waWQsIFVOSVhDQihza2IpLnVpZCwgVU5JWENCKHNrYikuZ2lkKTsKKwl1bml4X3NldF9zZWNkYXRhKCZzY20sIHNrYik7CiAKIAlpZiAoIShmbGFncyAmIE1TR19QRUVLKSkgewogCQlpZiAoVU5JWENCKHNrYikuZnApCi0JCQl1bml4X2RldGFjaF9mZHMoc2lvY2ItPnNjbSwgc2tiKTsKKwkJCXVuaXhfZGV0YWNoX2Zkcygmc2NtLCBza2IpOwogCiAJCXNrX3BlZWtfb2Zmc2V0X2J3ZChzaywgc2tiLT5sZW4pOwogCX0gZWxzZSB7CkBAIC0xODYwLDExICsxODQ5LDExIEBACiAJCXNrX3BlZWtfb2Zmc2V0X2Z3ZChzaywgc2l6ZSk7CiAKIAkJaWYgKFVOSVhDQihza2IpLmZwKQotCQkJc2lvY2ItPnNjbS0+ZnAgPSBzY21fZnBfZHVwKFVOSVhDQihza2IpLmZwKTsKKwkJCXNjbS5mcCA9IHNjbV9mcF9kdXAoVU5JWENCKHNrYikuZnApOwogCX0KIAllcnIgPSAoZmxhZ3MgJiBNU0dfVFJVTkMpID8gc2tiLT5sZW4gLSBza2lwIDogc2l6ZTsKIAotCXNjbV9yZWN2KHNvY2ssIG1zZywgc2lvY2ItPnNjbSwgZmxhZ3MpOworCXNjbV9yZWN2KHNvY2ssIG1zZywgJnNjbSwgZmxhZ3MpOwogCiBvdXRfZnJlZToKIAlza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTsKQEAgLTE5MTUsOCArMTkwNCw3IEBACiAJCQkgICAgICAgc3RydWN0IG1zZ2hkciAqbXNnLCBzaXplX3Qgc2l6ZSwKIAkJCSAgICAgICBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHNvY2tfaW9jYiAqc2lvY2IgPSBraW9jYl90b19zaW9jYihpb2NiKTsKLQlzdHJ1Y3Qgc2NtX2Nvb2tpZSB0bXBfc2NtOworCXN0cnVjdCBzY21fY29va2llIHNjbTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgdW5peF9zb2NrICp1ID0gdW5peF9zayhzayk7CiAJREVDTEFSRV9TT0NLQUREUihzdHJ1Y3Qgc29ja2FkZHJfdW4gKiwgc3VuYWRkciwgbXNnLT5tc2dfbmFtZSk7CkBAIC0xOTQzLDEwICsxOTMxLDcgQEAKIAkgKiB3aGlsZSBzbGVlcHMgaW4gbWVtY3B5X3RvbXNnCiAJICovCiAKLQlpZiAoIXNpb2NiLT5zY20pIHsKLQkJc2lvY2ItPnNjbSA9ICZ0bXBfc2NtOwotCQltZW1zZXQoJnRtcF9zY20sIDAsIHNpemVvZih0bXBfc2NtKSk7Ci0JfQorCW1lbXNldCgmc2NtLCAwLCBzaXplb2Yoc2NtKSk7CiAKIAllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnUtPnJlYWRsb2NrKTsKIAlpZiAodW5saWtlbHkoZXJyKSkgewpAQCAtMjAxMiwxMyArMTk5NywxMyBAQAogCiAJCWlmIChjaGVja19jcmVkcykgewogCQkJLyogTmV2ZXIgZ2x1ZSBtZXNzYWdlcyBmcm9tIGRpZmZlcmVudCB3cml0ZXJzICovCi0JCQlpZiAoKFVOSVhDQihza2IpLnBpZCAgIT0gc2lvY2ItPnNjbS0+cGlkKSB8fAotCQkJICAgICF1aWRfZXEoVU5JWENCKHNrYikudWlkLCBzaW9jYi0+c2NtLT5jcmVkcy51aWQpIHx8Ci0JCQkgICAgIWdpZF9lcShVTklYQ0Ioc2tiKS5naWQsIHNpb2NiLT5zY20tPmNyZWRzLmdpZCkpCisJCQlpZiAoKFVOSVhDQihza2IpLnBpZCAgIT0gc2NtLnBpZCkgfHwKKwkJCSAgICAhdWlkX2VxKFVOSVhDQihza2IpLnVpZCwgc2NtLmNyZWRzLnVpZCkgfHwKKwkJCSAgICAhZ2lkX2VxKFVOSVhDQihza2IpLmdpZCwgc2NtLmNyZWRzLmdpZCkpCiAJCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAodGVzdF9iaXQoU09DS19QQVNTQ1JFRCwgJnNvY2stPmZsYWdzKSkgewogCQkJLyogQ29weSBjcmVkZW50aWFscyAqLwotCQkJc2NtX3NldF9jcmVkKHNpb2NiLT5zY20sIFVOSVhDQihza2IpLnBpZCwgVU5JWENCKHNrYikudWlkLCBVTklYQ0Ioc2tiKS5naWQpOworCQkJc2NtX3NldF9jcmVkKCZzY20sIFVOSVhDQihza2IpLnBpZCwgVU5JWENCKHNrYikudWlkLCBVTklYQ0Ioc2tiKS5naWQpOwogCQkJY2hlY2tfY3JlZHMgPSAxOwogCQl9CiAKQEAgLTIwNDUsNyArMjAzMCw3IEBACiAJCQlza19wZWVrX29mZnNldF9id2Qoc2ssIGNodW5rKTsKIAogCQkJaWYgKFVOSVhDQihza2IpLmZwKQotCQkJCXVuaXhfZGV0YWNoX2ZkcyhzaW9jYi0+c2NtLCBza2IpOworCQkJCXVuaXhfZGV0YWNoX2Zkcygmc2NtLCBza2IpOwogCiAJCQlpZiAodW5peF9za2JfbGVuKHNrYikpCiAJCQkJYnJlYWs7CkBAIC0yMDUzLDEzICsyMDM4LDEzIEBACiAJCQlza2JfdW5saW5rKHNrYiwgJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAkJCWNvbnN1bWVfc2tiKHNrYik7CiAKLQkJCWlmIChzaW9jYi0+c2NtLT5mcCkKKwkJCWlmIChzY20uZnApCiAJCQkJYnJlYWs7CiAJCX0gZWxzZSB7CiAJCQkvKiBJdCBpcyBxdWVzdGlvbmFibGUsIHNlZSBub3RlIGluIHVuaXhfZGdyYW1fcmVjdm1zZy4KIAkJCSAqLwogCQkJaWYgKFVOSVhDQihza2IpLmZwKQotCQkJCXNpb2NiLT5zY20tPmZwID0gc2NtX2ZwX2R1cChVTklYQ0Ioc2tiKS5mcCk7CisJCQkJc2NtLmZwID0gc2NtX2ZwX2R1cChVTklYQ0Ioc2tiKS5mcCk7CiAKIAkJCXNrX3BlZWtfb2Zmc2V0X2Z3ZChzaywgY2h1bmspOwogCkBAIC0yMDY4LDcgKzIwNTMsNyBAQAogCX0gd2hpbGUgKHNpemUpOwogCiAJbXV0ZXhfdW5sb2NrKCZ1LT5yZWFkbG9jayk7Ci0Jc2NtX3JlY3Yoc29jaywgbXNnLCBzaW9jYi0+c2NtLCBmbGFncyk7CisJc2NtX3JlY3Yoc29jaywgbXNnLCAmc2NtLCBmbGFncyk7CiBvdXQ6CiAJcmV0dXJuIGNvcGllZCA/IDogZXJyOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvZGlhZy5jIGIvbmV0L3VuaXgvZGlhZy5jCmluZGV4IDg2ZmEwZjMuLmVmNTQyZmIgMTAwNjQ0Ci0tLSBhL25ldC91bml4L2RpYWcuYworKysgYi9uZXQvdW5peC9kaWFnLmMKQEAgLTE1NSw3ICsxNTUsOCBAQAogCWlmIChubGFfcHV0X3U4KHNrYiwgVU5JWF9ESUFHX1NIVVRET1dOLCBzay0+c2tfc2h1dGRvd24pKQogCQlnb3RvIG91dF9ubG1zZ190cmltOwogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIAogb3V0X25sbXNnX3RyaW06CiAJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYyBiL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYwppbmRleCAwMmQyZTUyLi43ZjMyNTUwIDEwMDY0NAotLS0gYS9uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMKKysrIGIvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jCkBAIC0xODUwLDggKzE4NTAsNyBAQAogCXN0cnVjdCBtc2doZHIgKm1zZywKIAlzaXplX3QgbGVuKQogewotCS8qIFhYWDogc3RyaXBwaW5nIGNvbnN0ICovCi0JcmV0dXJuIHZtY2lfcXBhaXJfZW5xdWV2KHZtY2lfdHJhbnModnNrKS0+cXBhaXIsIChzdHJ1Y3QgaW92ZWMgKiltc2ctPm1zZ19pdGVyLmlvdiwgbGVuLCAwKTsKKwlyZXR1cm4gdm1jaV9xcGFpcl9lbnF1ZXYodm1jaV90cmFucyh2c2spLT5xcGFpciwgbXNnLCBsZW4sIDApOwogfQogCiBzdGF0aWMgczY0IHZtY2lfdHJhbnNwb3J0X3N0cmVhbV9oYXNfZGF0YShzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2NvcmUuYyBiL25ldC93aXJlbGVzcy9jb3JlLmMKaW5kZXggNTNkZGE3Ny4uM2FmMGVjZiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2NvcmUuYworKysgYi9uZXQvd2lyZWxlc3MvY29yZS5jCkBAIC0zMjAsNiArMzIwLDIwIEBACiAJcnRubF91bmxvY2soKTsKIH0KIAorc3RhdGljIHZvaWQgY2ZnODAyMTFfc2NoZWRfc2Nhbl9zdG9wX3drKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisKKwlyZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSwKKwkJCSAgIHNjaGVkX3NjYW5fc3RvcF93ayk7CisKKwlydG5sX2xvY2soKTsKKworCV9fY2ZnODAyMTFfc3RvcF9zY2hlZF9zY2FuKHJkZXYsIGZhbHNlKTsKKworCXJ0bmxfdW5sb2NrKCk7Cit9CisKIC8qIGV4cG9ydGVkIGZ1bmN0aW9ucyAqLwogCiBzdHJ1Y3Qgd2lwaHkgKndpcGh5X25ld19ubShjb25zdCBzdHJ1Y3QgY2ZnODAyMTFfb3BzICpvcHMsIGludCBzaXplb2ZfcHJpdiwKQEAgLTQwNiw2ICs0MjAsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5kZXN0cm95X2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZyZGV2LT5kZXN0cm95X2xpc3RfbG9jayk7CiAJSU5JVF9XT1JLKCZyZGV2LT5kZXN0cm95X3dvcmssIGNmZzgwMjExX2Rlc3Ryb3lfaWZhY2Vfd2spOworCUlOSVRfV09SSygmcmRldi0+c2NoZWRfc2Nhbl9zdG9wX3drLCBjZmc4MDIxMV9zY2hlZF9zY2FuX3N0b3Bfd2spOwogCiAjaWZkZWYgQ09ORklHX0NGRzgwMjExX0RFRkFVTFRfUFMKIAlyZGV2LT53aXBoeS5mbGFncyB8PSBXSVBIWV9GTEFHX1BTX09OX0JZX0RFRkFVTFQ7CkBAIC01NjAsNiArNTc1LDE0IEBACiAJCQkJICAgICAgIEJJVChOTDgwMjExX0lGVFlQRV9NT05JVE9SKSkpCiAJCXdpcGh5LT5yZWd1bGF0b3J5X2ZsYWdzIHw9IFJFR1VMQVRPUllfSUdOT1JFX1NUQUxFX0tJQ0tPRkY7CiAKKwlpZiAoV0FSTl9PTigod2lwaHktPnJlZ3VsYXRvcnlfZmxhZ3MgJiBSRUdVTEFUT1JZX1dJUEhZX1NFTEZfTUFOQUdFRCkgJiYKKwkJICAgICh3aXBoeS0+cmVndWxhdG9yeV9mbGFncyAmCisJCQkJCShSRUdVTEFUT1JZX0NVU1RPTV9SRUcgfAorCQkJCQkgUkVHVUxBVE9SWV9TVFJJQ1RfUkVHIHwKKwkJCQkJIFJFR1VMQVRPUllfQ09VTlRSWV9JRV9GT0xMT1dfUE9XRVIgfAorCQkJCQkgUkVHVUxBVE9SWV9DT1VOVFJZX0lFX0lHTk9SRSkpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoV0FSTl9PTih3aXBoeS0+Y29hbGVzY2UgJiYKIAkJICAgICghd2lwaHktPmNvYWxlc2NlLT5uX3J1bGVzIHx8CiAJCSAgICAgIXdpcGh5LT5jb2FsZXNjZS0+bl9wYXR0ZXJucykgJiYKQEAgLTc3OCw2ICs4MDEsNyBAQAogCWZsdXNoX3dvcmsoJnJkZXYtPmV2ZW50X3dvcmspOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcmRldi0+ZGZzX3VwZGF0ZV9jaGFubmVsc193ayk7CiAJZmx1c2hfd29yaygmcmRldi0+ZGVzdHJveV93b3JrKTsKKwlmbHVzaF93b3JrKCZyZGV2LT5zY2hlZF9zY2FuX3N0b3Bfd2spOwogCiAjaWZkZWYgQ09ORklHX1BNCiAJaWYgKHJkZXYtPndpcGh5Lndvd2xhbl9jb25maWcgJiYgcmRldi0+b3BzLT5zZXRfd2FrZXVwKQpAQCAtODU4LDYgKzg4Miw3IEBACiAJCSAgICAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHdkZXYtPm5ldGRldjsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0ICpzY2hlZF9zY2FuX3JlcTsKIAogCUFTU0VSVF9SVE5MKCk7CiAJQVNTRVJUX1dERVZfTE9DSyh3ZGV2KTsKQEAgLTg2OCw3ICs4OTMsOCBAQAogCQlicmVhazsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1AyUF9DTElFTlQ6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlpZiAocmRldi0+c2NoZWRfc2Nhbl9yZXEgJiYgZGV2ID09IHJkZXYtPnNjaGVkX3NjYW5fcmVxLT5kZXYpCisJCXNjaGVkX3NjYW5fcmVxID0gcnRubF9kZXJlZmVyZW5jZShyZGV2LT5zY2hlZF9zY2FuX3JlcSk7CisJCWlmIChzY2hlZF9zY2FuX3JlcSAmJiBkZXYgPT0gc2NoZWRfc2Nhbl9yZXEtPmRldikKIAkJCV9fY2ZnODAyMTFfc3RvcF9zY2hlZF9zY2FuKHJkZXYsIGZhbHNlKTsKIAogI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUCkBAIC05NDMsNiArOTY5LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqc2NoZWRfc2Nhbl9yZXE7CiAKIAlpZiAoIXdkZXYpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKQEAgLTEwMDcsOCArMTAzNCw5IEBACiAJCQlfX19jZmc4MDIxMV9zY2FuX2RvbmUocmRldiwgZmFsc2UpOwogCQl9CiAKLQkJaWYgKFdBUk5fT04ocmRldi0+c2NoZWRfc2Nhbl9yZXEgJiYKLQkJCSAgICByZGV2LT5zY2hlZF9zY2FuX3JlcS0+ZGV2ID09IHdkZXYtPm5ldGRldikpIHsKKwkJc2NoZWRfc2Nhbl9yZXEgPSBydG5sX2RlcmVmZXJlbmNlKHJkZXYtPnNjaGVkX3NjYW5fcmVxKTsKKwkJaWYgKFdBUk5fT04oc2NoZWRfc2Nhbl9yZXEgJiYKKwkJCSAgICBzY2hlZF9zY2FuX3JlcS0+ZGV2ID09IHdkZXYtPm5ldGRldikpIHsKIAkJCV9fY2ZnODAyMTFfc3RvcF9zY2hlZF9zY2FuKHJkZXYsIGZhbHNlKTsKIAkJfQogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5oIGIvbmV0L3dpcmVsZXNzL2NvcmUuaAppbmRleCBmYWE1YjE2Li44MDFjZDQ5IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5oCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmgKQEAgLTM2LDYgKzM2LDEzIEBACiAJICogdGhlIGNvdW50cnkgb24gdGhlIGNvdW50cnkgSUUgY2hhbmdlZC4gKi8KIAljaGFyIGNvdW50cnlfaWVfYWxwaGEyWzJdOwogCisJLyoKKwkgKiB0aGUgZHJpdmVyIHJlcXVlc3RzIHRoZSByZWd1bGF0b3J5IGNvcmUgdG8gc2V0IHRoaXMgcmVndWxhdG9yeQorCSAqIGRvbWFpbiBhcyB0aGUgd2lwaHkncy4gT25seSB1c2VkIGZvciAlUkVHVUxBVE9SWV9XSVBIWV9TRUxGX01BTkFHRUQKKwkgKiBkZXZpY2VzIHVzaW5nIHRoZSByZWd1bGF0b3J5X3NldF93aXBoeV9yZWdkKCkgQVBJCisJICovCisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlcXVlc3RlZF9yZWdkOworCiAJLyogSWYgYSBDb3VudHJ5IElFIGhhcyBiZWVuIHJlY2VpdmVkIHRoaXMgdGVsbHMgdXMgdGhlIGVudmlyb25tZW50CiAJICogd2hpY2ggaXRzIHRlbGxpbmcgdXMgaXRzIGluLiBUaGlzIGRlZmF1bHRzIHRvIEVOVklST05fQU5ZICovCiAJZW51bSBlbnZpcm9ubWVudF9jYXAgZW52OwpAQCAtNjMsNyArNzAsNyBAQAogCXUzMiBic3NfZ2VuZXJhdGlvbjsKIAlzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpzY2FuX3JlcTsgLyogcHJvdGVjdGVkIGJ5IFJUTkwgKi8KIAlzdHJ1Y3Qgc2tfYnVmZiAqc2Nhbl9tc2c7Ci0Jc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCAqc2NoZWRfc2Nhbl9yZXE7CisJc3RydWN0IGNmZzgwMjExX3NjaGVkX3NjYW5fcmVxdWVzdCBfX3JjdSAqc2NoZWRfc2Nhbl9yZXE7CiAJdW5zaWduZWQgbG9uZyBzdXNwZW5kX2F0OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzY2FuX2RvbmVfd2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IHNjaGVkX3NjYW5fcmVzdWx0c193azsKQEAgLTg0LDYgKzkxLDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRlc3Ryb3lfbGlzdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVzdHJveV93b3JrOwogCisJc3RydWN0IHdvcmtfc3RydWN0IHNjaGVkX3NjYW5fc3RvcF93azsKKwogCS8qIG11c3QgYmUgbGFzdCBiZWNhdXNlIG9mIHRoZSB3YXkgd2UgZG8gd2lwaHlfcHJpdigpLAogCSAqIGFuZCBpdCBzaG91bGQgYXQgbGVhc3QgYmUgYWxpZ25lZCB0byBORVRERVZfQUxJR04gKi8KIAlzdHJ1Y3Qgd2lwaHkgd2lwaHkgX19hbGlnbmVkKE5FVERFVl9BTElHTik7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuYwppbmRleCA3Y2E0YjUxLi5kNzhmZDhiIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCisrKyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKQEAgLTU5LDEzICs1OSwxMyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCBubDgwMjExX21jZ3Jwc1tdID0gewotCVtOTDgwMjExX01DR1JQX0NPTkZJR10gPSB7IC5uYW1lID0gImNvbmZpZyIsIH0sCi0JW05MODAyMTFfTUNHUlBfU0NBTl0gPSB7IC5uYW1lID0gInNjYW4iLCB9LAotCVtOTDgwMjExX01DR1JQX1JFR1VMQVRPUlldID0geyAubmFtZSA9ICJyZWd1bGF0b3J5IiwgfSwKLQlbTkw4MDIxMV9NQ0dSUF9NTE1FXSA9IHsgLm5hbWUgPSAibWxtZSIsIH0sCi0JW05MODAyMTFfTUNHUlBfVkVORE9SXSA9IHsgLm5hbWUgPSAidmVuZG9yIiwgfSwKKwlbTkw4MDIxMV9NQ0dSUF9DT05GSUddID0geyAubmFtZSA9IE5MODAyMTFfTVVMVElDQVNUX0dST1VQX0NPTkZJRyB9LAorCVtOTDgwMjExX01DR1JQX1NDQU5dID0geyAubmFtZSA9IE5MODAyMTFfTVVMVElDQVNUX0dST1VQX1NDQU4gfSwKKwlbTkw4MDIxMV9NQ0dSUF9SRUdVTEFUT1JZXSA9IHsgLm5hbWUgPSBOTDgwMjExX01VTFRJQ0FTVF9HUk9VUF9SRUcgfSwKKwlbTkw4MDIxMV9NQ0dSUF9NTE1FXSA9IHsgLm5hbWUgPSBOTDgwMjExX01VTFRJQ0FTVF9HUk9VUF9NTE1FIH0sCisJW05MODAyMTFfTUNHUlBfVkVORE9SXSA9IHsgLm5hbWUgPSBOTDgwMjExX01VTFRJQ0FTVF9HUk9VUF9WRU5ET1IgfSwKICNpZmRlZiBDT05GSUdfTkw4MDIxMV9URVNUTU9ERQotCVtOTDgwMjExX01DR1JQX1RFU1RNT0RFXSA9IHsgLm5hbWUgPSAidGVzdG1vZGUiLCB9CisJW05MODAyMTFfTUNHUlBfVEVTVE1PREVdID0geyAubmFtZSA9IE5MODAyMTFfTVVMVElDQVNUX0dST1VQX1RFU1RNT0RFIH0KICNlbmRpZgogfTsKIApAQCAtMzk2LDYgKzM5Niw5IEBACiAJW05MODAyMTFfQVRUUl9BRE1JVFRFRF9USU1FXSA9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCiAJW05MODAyMTFfQVRUUl9TTVBTX01PREVdID0geyAudHlwZSA9IE5MQV9VOCB9LAogCVtOTDgwMjExX0FUVFJfTUFDX01BU0tdID0geyAubGVuID0gRVRIX0FMRU4gfSwKKwlbTkw4MDIxMV9BVFRSX1dJUEhZX1NFTEZfTUFOQUdFRF9SRUddID0geyAudHlwZSA9IE5MQV9GTEFHIH0sCisJW05MODAyMTFfQVRUUl9ORVROU19GRF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9ERUxBWV0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAogfTsKIAogLyogcG9saWN5IGZvciB0aGUga2V5IGF0dHJpYnV0ZXMgKi8KQEAgLTEwODcsNiArMTA5MCwxMSBAQAogCQkJcmV0dXJuIC1FTk9CVUZTOwogCX0KIAorCWlmICgocmRldi0+d2lwaHkud293bGFuLT5mbGFncyAmIFdJUEhZX1dPV0xBTl9ORVRfREVURUNUKSAmJgorCSAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfV09XTEFOX1RSSUdfTkVUX0RFVEVDVCwKKwkJCXJkZXYtPndpcGh5Lndvd2xhbi0+bWF4X25kX21hdGNoX3NldHMpKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKIAlpZiAobGFyZ2UgJiYgbmw4MDIxMV9zZW5kX3dvd2xhbl90Y3BfY2FwcyhyZGV2LCBtc2cpKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKQEAgLTE3MDEsMTIgKzE3MDksMjIgQEAKIAkJCSAgICAgICByZGV2LT53aXBoeS5tYXhfbnVtX2NzYV9jb3VudGVycykpCiAJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAorCQlpZiAocmRldi0+d2lwaHkucmVndWxhdG9yeV9mbGFncyAmIFJFR1VMQVRPUllfV0lQSFlfU0VMRl9NQU5BR0VEICYmCisJCSAgICBubGFfcHV0X2ZsYWcobXNnLCBOTDgwMjExX0FUVFJfV0lQSFlfU0VMRl9NQU5BR0VEX1JFRykpCisJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCQlpZiAobmxhX3B1dChtc2csIE5MODAyMTFfQVRUUl9FWFRfRkVBVFVSRVMsCisJCQkgICAgc2l6ZW9mKHJkZXYtPndpcGh5LmV4dF9mZWF0dXJlcyksCisJCQkgICAgcmRldi0+d2lwaHkuZXh0X2ZlYXR1cmVzKSkKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCiAJCS8qIGRvbmUgKi8KIAkJc3RhdGUtPnNwbGl0X3N0YXJ0ID0gMDsKIAkJYnJlYWs7CiAJfQogIGZpbmlzaDoKLQlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwlyZXR1cm4gMDsKIAogIG5sYV9wdXRfZmFpbHVyZToKIAlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CkBAIC0yMzg5LDcgKzI0MDcsOCBAQAogCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAJfQogCi0JcmV0dXJuIGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwlnZW5sbXNnX2VuZChtc2csIGhkcik7CisJcmV0dXJuIDA7CiAKICBubGFfcHV0X2ZhaWx1cmU6CiAJZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOwpAQCAtMjg1NCw2ICsyODczLDkgQEAKIAlpZiAoIXJkZXYtPm9wcy0+Z2V0X2tleSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCisJaWYgKCFwYWlyd2lzZSAmJiBtYWNfYWRkciAmJiAhKHJkZXYtPndpcGh5LmZsYWdzICYgV0lQSFlfRkxBR19JQlNTX1JTTikpCisJCXJldHVybiAtRU5PRU5UOworCiAJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtc2cpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjg3MywxMCArMjg5NSw2IEBACiAJICAgIG5sYV9wdXQobXNnLCBOTDgwMjExX0FUVFJfTUFDLCBFVEhfQUxFTiwgbWFjX2FkZHIpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCWlmIChwYWlyd2lzZSAmJiBtYWNfYWRkciAmJgotCSAgICAhKHJkZXYtPndpcGh5LmZsYWdzICYgV0lQSFlfRkxBR19JQlNTX1JTTikpCi0JCXJldHVybiAtRU5PRU5UOwotCiAJZXJyID0gcmRldl9nZXRfa2V5KHJkZXYsIGRldiwga2V5X2lkeCwgcGFpcndpc2UsIG1hY19hZGRyLCAmY29va2llLAogCQkJICAgZ2V0X2tleV9jYWxsYmFjayk7CiAKQEAgLTMwNDcsNyArMzA2NSw3IEBACiAJd2Rldl9sb2NrKGRldi0+aWVlZTgwMjExX3B0cik7CiAJZXJyID0gbmw4MDIxMV9rZXlfYWxsb3dlZChkZXYtPmllZWU4MDIxMV9wdHIpOwogCi0JaWYgKGtleS50eXBlID09IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRSAmJiBtYWNfYWRkciAmJgorCWlmIChrZXkudHlwZSA9PSBOTDgwMjExX0tFWVRZUEVfR1JPVVAgJiYgbWFjX2FkZHIgJiYKIAkgICAgIShyZGV2LT53aXBoeS5mbGFncyAmIFdJUEhZX0ZMQUdfSUJTU19SU04pKQogCQllcnIgPSAtRU5PRU5UOwogCkBAIC0zNTYzLDYgKzM1ODEsNyBAQAogCXN0cnVjdCBubGF0dHIgKnJhdGU7CiAJdTMyIGJpdHJhdGU7CiAJdTE2IGJpdHJhdGVfY29tcGF0OworCWVudW0gbmw4MDIxMV9hdHRycyByYXRlX2ZsZzsKIAogCXJhdGUgPSBubGFfbmVzdF9zdGFydChtc2csIGF0dHIpOwogCWlmICghcmF0ZSkKQEAgLTM1NzksMTIgKzM1OTgsMzYgQEAKIAkgICAgbmxhX3B1dF91MTYobXNnLCBOTDgwMjExX1JBVEVfSU5GT19CSVRSQVRFLCBiaXRyYXRlX2NvbXBhdCkpCiAJCXJldHVybiBmYWxzZTsKIAorCXN3aXRjaCAoaW5mby0+YncpIHsKKwljYXNlIFJBVEVfSU5GT19CV181OgorCQlyYXRlX2ZsZyA9IE5MODAyMTFfUkFURV9JTkZPXzVfTUhaX1dJRFRIOworCQlicmVhazsKKwljYXNlIFJBVEVfSU5GT19CV18xMDoKKwkJcmF0ZV9mbGcgPSBOTDgwMjExX1JBVEVfSU5GT18xMF9NSFpfV0lEVEg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgUkFURV9JTkZPX0JXXzIwOgorCQlyYXRlX2ZsZyA9IDA7CisJCWJyZWFrOworCWNhc2UgUkFURV9JTkZPX0JXXzQwOgorCQlyYXRlX2ZsZyA9IE5MODAyMTFfUkFURV9JTkZPXzQwX01IWl9XSURUSDsKKwkJYnJlYWs7CisJY2FzZSBSQVRFX0lORk9fQldfODA6CisJCXJhdGVfZmxnID0gTkw4MDIxMV9SQVRFX0lORk9fODBfTUhaX1dJRFRIOworCQlicmVhazsKKwljYXNlIFJBVEVfSU5GT19CV18xNjA6CisJCXJhdGVfZmxnID0gTkw4MDIxMV9SQVRFX0lORk9fMTYwX01IWl9XSURUSDsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJhdGVfZmxnICYmIG5sYV9wdXRfZmxhZyhtc2csIHJhdGVfZmxnKSkKKwkJcmV0dXJuIGZhbHNlOworCiAJaWYgKGluZm8tPmZsYWdzICYgUkFURV9JTkZPX0ZMQUdTX01DUykgewogCQlpZiAobmxhX3B1dF91OChtc2csIE5MODAyMTFfUkFURV9JTkZPX01DUywgaW5mby0+bWNzKSkKIAkJCXJldHVybiBmYWxzZTsKLQkJaWYgKGluZm8tPmZsYWdzICYgUkFURV9JTkZPX0ZMQUdTXzQwX01IWl9XSURUSCAmJgotCQkgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9SQVRFX0lORk9fNDBfTUhaX1dJRFRIKSkKLQkJCXJldHVybiBmYWxzZTsKIAkJaWYgKGluZm8tPmZsYWdzICYgUkFURV9JTkZPX0ZMQUdTX1NIT1JUX0dJICYmCiAJCSAgICBubGFfcHV0X2ZsYWcobXNnLCBOTDgwMjExX1JBVEVfSU5GT19TSE9SVF9HSSkpCiAJCQlyZXR1cm4gZmFsc2U7CkBAIC0zNTkzLDE4ICszNjM2LDYgQEAKIAkJCXJldHVybiBmYWxzZTsKIAkJaWYgKG5sYV9wdXRfdTgobXNnLCBOTDgwMjExX1JBVEVfSU5GT19WSFRfTlNTLCBpbmZvLT5uc3MpKQogCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBSQVRFX0lORk9fRkxBR1NfNDBfTUhaX1dJRFRIICYmCi0JCSAgICBubGFfcHV0X2ZsYWcobXNnLCBOTDgwMjExX1JBVEVfSU5GT180MF9NSFpfV0lEVEgpKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBSQVRFX0lORk9fRkxBR1NfODBfTUhaX1dJRFRIICYmCi0JCSAgICBubGFfcHV0X2ZsYWcobXNnLCBOTDgwMjExX1JBVEVfSU5GT184MF9NSFpfV0lEVEgpKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBSQVRFX0lORk9fRkxBR1NfODBQODBfTUhaX1dJRFRIICYmCi0JCSAgICBubGFfcHV0X2ZsYWcobXNnLCBOTDgwMjExX1JBVEVfSU5GT184MFA4MF9NSFpfV0lEVEgpKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoaW5mby0+ZmxhZ3MgJiBSQVRFX0lORk9fRkxBR1NfMTYwX01IWl9XSURUSCAmJgotCQkgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9SQVRFX0lORk9fMTYwX01IWl9XSURUSCkpCi0JCQlyZXR1cm4gZmFsc2U7CiAJCWlmIChpbmZvLT5mbGFncyAmIFJBVEVfSU5GT19GTEFHU19TSE9SVF9HSSAmJgogCQkgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9SQVRFX0lORk9fU0hPUlRfR0kpKQogCQkJcmV0dXJuIGZhbHNlOwpAQCAtMzY0MCw4ICszNjcxLDggQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBubDgwMjExX3NlbmRfc3RhdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLCB1MzIgc2VxLAotCQkJCWludCBmbGFncywKK3N0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX3N0YXRpb24oc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIGNtZCwgdTMyIHBvcnRpZCwKKwkJCQl1MzIgc2VxLCBpbnQgZmxhZ3MsCiAJCQkJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbykKQEAgLTM2NDksNyArMzY4MCw3IEBACiAJdm9pZCAqaGRyOwogCXN0cnVjdCBubGF0dHIgKnNpbmZvYXR0ciwgKmJzc19wYXJhbTsKIAotCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgcG9ydGlkLCBzZXEsIGZsYWdzLCBOTDgwMjExX0NNRF9ORVdfU1RBVElPTik7CisJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCBwb3J0aWQsIHNlcSwgZmxhZ3MsIGNtZCk7CiAJaWYgKCFoZHIpCiAJCXJldHVybiAtMTsKIApAQCAtMzY2MSwxMTUgKzM2OTIsNzcgQEAKIAlzaW5mb2F0dHIgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9TVEFfSU5GTyk7CiAJaWYgKCFzaW5mb2F0dHIpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCWlmICgoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19DT05ORUNURURfVElNRSkgJiYKLQkgICAgbmxhX3B1dF91MzIobXNnLCBOTDgwMjExX1NUQV9JTkZPX0NPTk5FQ1RFRF9USU1FLAotCQkJc2luZm8tPmNvbm5lY3RlZF90aW1lKSkKLQkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JaWYgKChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX0lOQUNUSVZFX1RJTUUpICYmCi0JICAgIG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9TVEFfSU5GT19JTkFDVElWRV9USU1FLAotCQkJc2luZm8tPmluYWN0aXZlX3RpbWUpKQotCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlpZiAoKHNpbmZvLT5maWxsZWQgJiAoU1RBVElPTl9JTkZPX1JYX0JZVEVTIHwKLQkJCSAgICAgIFNUQVRJT05fSU5GT19SWF9CWVRFUzY0KSkgJiYKKworI2RlZmluZSBQVVRfU0lORk8oYXR0ciwgbWVtYiwgdHlwZSkgZG8gewkJCQlcCisJaWYgKHNpbmZvLT5maWxsZWQgJiBCSVQoTkw4MDIxMV9TVEFfSU5GT18gIyMgYXR0cikgJiYJCVwKKwkgICAgbmxhX3B1dF8gIyMgdHlwZShtc2csIE5MODAyMTFfU1RBX0lORk9fICMjIGF0dHIsCQlcCisJCQkgICAgIHNpbmZvLT5tZW1iKSkJCQkJXAorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsJCQkJCVwKKwl9IHdoaWxlICgwKQorCisJUFVUX1NJTkZPKENPTk5FQ1RFRF9USU1FLCBjb25uZWN0ZWRfdGltZSwgdTMyKTsKKwlQVVRfU0lORk8oSU5BQ1RJVkVfVElNRSwgaW5hY3RpdmVfdGltZSwgdTMyKTsKKworCWlmIChzaW5mby0+ZmlsbGVkICYgKEJJVChOTDgwMjExX1NUQV9JTkZPX1JYX0JZVEVTKSB8CisJCQkgICAgIEJJVChOTDgwMjExX1NUQV9JTkZPX1JYX0JZVEVTNjQpKSAmJgogCSAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfU1RBX0lORk9fUlhfQllURVMsCiAJCQkodTMyKXNpbmZvLT5yeF9ieXRlcykpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCWlmICgoc2luZm8tPmZpbGxlZCAmIChTVEFUSU9OX0lORk9fVFhfQllURVMgfAotCQkJICAgICAgU1RBVElPTl9JTkZPX1RYX0JZVEVTNjQpKSAmJgorCisJaWYgKHNpbmZvLT5maWxsZWQgJiAoQklUKE5MODAyMTFfU1RBX0lORk9fVFhfQllURVMpIHwKKwkJCSAgICAgQklUKE5MODAyMTFfU1RBX0lORk9fVFhfQllURVM2NCkpICYmCiAJICAgIG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9TVEFfSU5GT19UWF9CWVRFUywKIAkJCSh1MzIpc2luZm8tPnR4X2J5dGVzKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JaWYgKChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX1JYX0JZVEVTNjQpICYmCi0JICAgIG5sYV9wdXRfdTY0KG1zZywgTkw4MDIxMV9TVEFfSU5GT19SWF9CWVRFUzY0LAotCQkJc2luZm8tPnJ4X2J5dGVzKSkKLQkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JaWYgKChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX1RYX0JZVEVTNjQpICYmCi0JICAgIG5sYV9wdXRfdTY0KG1zZywgTkw4MDIxMV9TVEFfSU5GT19UWF9CWVRFUzY0LAotCQkJc2luZm8tPnR4X2J5dGVzKSkKLQkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JaWYgKChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX0xMSUQpICYmCi0JICAgIG5sYV9wdXRfdTE2KG1zZywgTkw4MDIxMV9TVEFfSU5GT19MTElELCBzaW5mby0+bGxpZCkpCi0JCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCWlmICgoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19QTElEKSAmJgotCSAgICBubGFfcHV0X3UxNihtc2csIE5MODAyMTFfU1RBX0lORk9fUExJRCwgc2luZm8tPnBsaWQpKQotCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlpZiAoKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fUExJTktfU1RBVEUpICYmCi0JICAgIG5sYV9wdXRfdTgobXNnLCBOTDgwMjExX1NUQV9JTkZPX1BMSU5LX1NUQVRFLAotCQkgICAgICAgc2luZm8tPnBsaW5rX3N0YXRlKSkKLQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlQVVRfU0lORk8oUlhfQllURVM2NCwgcnhfYnl0ZXMsIHU2NCk7CisJUFVUX1NJTkZPKFRYX0JZVEVTNjQsIHR4X2J5dGVzLCB1NjQpOworCVBVVF9TSU5GTyhMTElELCBsbGlkLCB1MTYpOworCVBVVF9TSU5GTyhQTElELCBwbGlkLCB1MTYpOworCVBVVF9TSU5GTyhQTElOS19TVEFURSwgcGxpbmtfc3RhdGUsIHU4KTsKKwogCXN3aXRjaCAocmRldi0+d2lwaHkuc2lnbmFsX3R5cGUpIHsKIAljYXNlIENGRzgwMjExX1NJR05BTF9UWVBFX01CTToKLQkJaWYgKChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX1NJR05BTCkgJiYKLQkJICAgIG5sYV9wdXRfdTgobXNnLCBOTDgwMjExX1NUQV9JTkZPX1NJR05BTCwKLQkJCSAgICAgICBzaW5mby0+c2lnbmFsKSkKLQkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCQlpZiAoKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fU0lHTkFMX0FWRykgJiYKLQkJICAgIG5sYV9wdXRfdTgobXNnLCBOTDgwMjExX1NUQV9JTkZPX1NJR05BTF9BVkcsCi0JCQkgICAgICAgc2luZm8tPnNpZ25hbF9hdmcpKQotCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJCVBVVF9TSU5GTyhTSUdOQUwsIHNpZ25hbCwgdTgpOworCQlQVVRfU0lORk8oU0lHTkFMX0FWRywgc2lnbmFsX2F2ZywgdTgpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9Ci0JaWYgKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fQ0hBSU5fU0lHTkFMKSB7CisJaWYgKHNpbmZvLT5maWxsZWQgJiBCSVQoTkw4MDIxMV9TVEFfSU5GT19DSEFJTl9TSUdOQUwpKSB7CiAJCWlmICghbmw4MDIxMV9wdXRfc2lnbmFsKG1zZywgc2luZm8tPmNoYWlucywKIAkJCQkJc2luZm8tPmNoYWluX3NpZ25hbCwKIAkJCQkJTkw4MDIxMV9TVEFfSU5GT19DSEFJTl9TSUdOQUwpKQogCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAJfQotCWlmIChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX0NIQUlOX1NJR05BTF9BVkcpIHsKKwlpZiAoc2luZm8tPmZpbGxlZCAmIEJJVChOTDgwMjExX1NUQV9JTkZPX0NIQUlOX1NJR05BTF9BVkcpKSB7CiAJCWlmICghbmw4MDIxMV9wdXRfc2lnbmFsKG1zZywgc2luZm8tPmNoYWlucywKIAkJCQkJc2luZm8tPmNoYWluX3NpZ25hbF9hdmcsCiAJCQkJCU5MODAyMTFfU1RBX0lORk9fQ0hBSU5fU0lHTkFMX0FWRykpCiAJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAl9Ci0JaWYgKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fVFhfQklUUkFURSkgeworCWlmIChzaW5mby0+ZmlsbGVkICYgQklUKE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURSkpIHsKIAkJaWYgKCFubDgwMjExX3B1dF9zdGFfcmF0ZShtc2csICZzaW5mby0+dHhyYXRlLAogCQkJCQkgIE5MODAyMTFfU1RBX0lORk9fVFhfQklUUkFURSkpCiAJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAl9Ci0JaWYgKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fUlhfQklUUkFURSkgeworCWlmIChzaW5mby0+ZmlsbGVkICYgQklUKE5MODAyMTFfU1RBX0lORk9fUlhfQklUUkFURSkpIHsKIAkJaWYgKCFubDgwMjExX3B1dF9zdGFfcmF0ZShtc2csICZzaW5mby0+cnhyYXRlLAogCQkJCQkgIE5MODAyMTFfU1RBX0lORk9fUlhfQklUUkFURSkpCiAJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAl9Ci0JaWYgKChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX1JYX1BBQ0tFVFMpICYmCi0JICAgIG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9TVEFfSU5GT19SWF9QQUNLRVRTLAotCQkJc2luZm8tPnJ4X3BhY2tldHMpKQotCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlpZiAoKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fVFhfUEFDS0VUUykgJiYKLQkgICAgbmxhX3B1dF91MzIobXNnLCBOTDgwMjExX1NUQV9JTkZPX1RYX1BBQ0tFVFMsCi0JCQlzaW5mby0+dHhfcGFja2V0cykpCi0JCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCWlmICgoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19UWF9SRVRSSUVTKSAmJgotCSAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfU1RBX0lORk9fVFhfUkVUUklFUywKLQkJCXNpbmZvLT50eF9yZXRyaWVzKSkKLQkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JaWYgKChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX1RYX0ZBSUxFRCkgJiYKLQkgICAgbmxhX3B1dF91MzIobXNnLCBOTDgwMjExX1NUQV9JTkZPX1RYX0ZBSUxFRCwKLQkJCXNpbmZvLT50eF9mYWlsZWQpKQotCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlpZiAoKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fRVhQRUNURURfVEhST1VHSFBVVCkgJiYKLQkgICAgbmxhX3B1dF91MzIobXNnLCBOTDgwMjExX1NUQV9JTkZPX0VYUEVDVEVEX1RIUk9VR0hQVVQsCi0JCQlzaW5mby0+ZXhwZWN0ZWRfdGhyb3VnaHB1dCkpCi0JCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCWlmICgoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19CRUFDT05fTE9TU19DT1VOVCkgJiYKLQkgICAgbmxhX3B1dF91MzIobXNnLCBOTDgwMjExX1NUQV9JTkZPX0JFQUNPTl9MT1NTLAotCQkJc2luZm8tPmJlYWNvbl9sb3NzX2NvdW50KSkKLQkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JaWYgKChzaW5mby0+ZmlsbGVkICYgU1RBVElPTl9JTkZPX0xPQ0FMX1BNKSAmJgotCSAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfU1RBX0lORk9fTE9DQUxfUE0sCi0JCQlzaW5mby0+bG9jYWxfcG0pKQotCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlpZiAoKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fUEVFUl9QTSkgJiYKLQkgICAgbmxhX3B1dF91MzIobXNnLCBOTDgwMjExX1NUQV9JTkZPX1BFRVJfUE0sCi0JCQlzaW5mby0+cGVlcl9wbSkpCi0JCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCWlmICgoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19OT05QRUVSX1BNKSAmJgotCSAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfU1RBX0lORk9fTk9OUEVFUl9QTSwKLQkJCXNpbmZvLT5ub25wZWVyX3BtKSkKLQkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JaWYgKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fQlNTX1BBUkFNKSB7CisKKwlQVVRfU0lORk8oUlhfUEFDS0VUUywgcnhfcGFja2V0cywgdTMyKTsKKwlQVVRfU0lORk8oVFhfUEFDS0VUUywgdHhfcGFja2V0cywgdTMyKTsKKwlQVVRfU0lORk8oVFhfUkVUUklFUywgdHhfcmV0cmllcywgdTMyKTsKKwlQVVRfU0lORk8oVFhfRkFJTEVELCB0eF9mYWlsZWQsIHUzMik7CisJUFVUX1NJTkZPKEVYUEVDVEVEX1RIUk9VR0hQVVQsIGV4cGVjdGVkX3Rocm91Z2hwdXQsIHUzMik7CisJUFVUX1NJTkZPKEJFQUNPTl9MT1NTLCBiZWFjb25fbG9zc19jb3VudCwgdTMyKTsKKwlQVVRfU0lORk8oTE9DQUxfUE0sIGxvY2FsX3BtLCB1MzIpOworCVBVVF9TSU5GTyhQRUVSX1BNLCBwZWVyX3BtLCB1MzIpOworCVBVVF9TSU5GTyhOT05QRUVSX1BNLCBub25wZWVyX3BtLCB1MzIpOworCisJaWYgKHNpbmZvLT5maWxsZWQgJiBCSVQoTkw4MDIxMV9TVEFfSU5GT19CU1NfUEFSQU0pKSB7CiAJCWJzc19wYXJhbSA9IG5sYV9uZXN0X3N0YXJ0KG1zZywgTkw4MDIxMV9TVEFfSU5GT19CU1NfUEFSQU0pOwogCQlpZiAoIWJzc19wYXJhbSkKIAkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwpAQCAtMzc4OCwyMyArMzc4MSw2OCBAQAogCiAJCW5sYV9uZXN0X2VuZChtc2csIGJzc19wYXJhbSk7CiAJfQotCWlmICgoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19TVEFfRkxBR1MpICYmCisJaWYgKChzaW5mby0+ZmlsbGVkICYgQklUKE5MODAyMTFfU1RBX0lORk9fU1RBX0ZMQUdTKSkgJiYKIAkgICAgbmxhX3B1dChtc2csIE5MODAyMTFfU1RBX0lORk9fU1RBX0ZMQUdTLAogCQkgICAgc2l6ZW9mKHN0cnVjdCBubDgwMjExX3N0YV9mbGFnX3VwZGF0ZSksCiAJCSAgICAmc2luZm8tPnN0YV9mbGFncykpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCWlmICgoc2luZm8tPmZpbGxlZCAmIFNUQVRJT05fSU5GT19UX09GRlNFVCkgJiYKLQkJbmxhX3B1dF91NjQobXNnLCBOTDgwMjExX1NUQV9JTkZPX1RfT0ZGU0VULAotCQkJICAgIHNpbmZvLT50X29mZnNldCkpCi0JCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJUFVUX1NJTkZPKFRfT0ZGU0VULCB0X29mZnNldCwgdTY0KTsKKwlQVVRfU0lORk8oUlhfRFJPUF9NSVNDLCByeF9kcm9wcGVkX21pc2MsIHU2NCk7CisJUFVUX1NJTkZPKEJFQUNPTl9SWCwgcnhfYmVhY29uLCB1NjQpOworCVBVVF9TSU5GTyhCRUFDT05fU0lHTkFMX0FWRywgcnhfYmVhY29uX3NpZ25hbF9hdmcsIHU4KTsKKworI3VuZGVmIFBVVF9TSU5GTworCisJaWYgKHNpbmZvLT5maWxsZWQgJiBCSVQoTkw4MDIxMV9TVEFfSU5GT19USURfU1RBVFMpKSB7CisJCXN0cnVjdCBubGF0dHIgKnRpZHNhdHRyOworCQlpbnQgdGlkOworCisJCXRpZHNhdHRyID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX1NUQV9JTkZPX1RJRF9TVEFUUyk7CisJCWlmICghdGlkc2F0dHIpCisJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCQlmb3IgKHRpZCA9IDA7IHRpZCA8IElFRUU4MDIxMV9OVU1fVElEUyArIDE7IHRpZCsrKSB7CisJCQlzdHJ1Y3QgY2ZnODAyMTFfdGlkX3N0YXRzICp0aWRzdGF0czsKKwkJCXN0cnVjdCBubGF0dHIgKnRpZGF0dHI7CisKKwkJCXRpZHN0YXRzID0gJnNpbmZvLT5wZXJ0aWRbdGlkXTsKKworCQkJaWYgKCF0aWRzdGF0cy0+ZmlsbGVkKQorCQkJCWNvbnRpbnVlOworCisJCQl0aWRhdHRyID0gbmxhX25lc3Rfc3RhcnQobXNnLCB0aWQgKyAxKTsKKwkJCWlmICghdGlkYXR0cikKKwkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworI2RlZmluZSBQVVRfVElEVkFMKGF0dHIsIG1lbWIsIHR5cGUpIGRvIHsJCQkJXAorCWlmICh0aWRzdGF0cy0+ZmlsbGVkICYgQklUKE5MODAyMTFfVElEX1NUQVRTXyAjIyBhdHRyKSAmJglcCisJICAgIG5sYV9wdXRfICMjIHR5cGUobXNnLCBOTDgwMjExX1RJRF9TVEFUU18gIyMgYXR0ciwJCVwKKwkJCSAgICAgdGlkc3RhdHMtPm1lbWIpKQkJCQlcCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwkJCQkJXAorCX0gd2hpbGUgKDApCisKKwkJCVBVVF9USURWQUwoUlhfTVNEVSwgcnhfbXNkdSwgdTY0KTsKKwkJCVBVVF9USURWQUwoVFhfTVNEVSwgdHhfbXNkdSwgdTY0KTsKKwkJCVBVVF9USURWQUwoVFhfTVNEVV9SRVRSSUVTLCB0eF9tc2R1X3JldHJpZXMsIHU2NCk7CisJCQlQVVRfVElEVkFMKFRYX01TRFVfRkFJTEVELCB0eF9tc2R1X2ZhaWxlZCwgdTY0KTsKKworI3VuZGVmIFBVVF9USURWQUwKKwkJCW5sYV9uZXN0X2VuZChtc2csIHRpZGF0dHIpOworCQl9CisKKwkJbmxhX25lc3RfZW5kKG1zZywgdGlkc2F0dHIpOworCX0KKwogCW5sYV9uZXN0X2VuZChtc2csIHNpbmZvYXR0cik7CiAKLQlpZiAoKHNpbmZvLT5maWxsZWQgJiBTVEFUSU9OX0lORk9fQVNTT0NfUkVRX0lFUykgJiYKKwlpZiAoc2luZm8tPmFzc29jX3JlcV9pZXNfbGVuICYmCiAJICAgIG5sYV9wdXQobXNnLCBOTDgwMjExX0FUVFJfSUUsIHNpbmZvLT5hc3NvY19yZXFfaWVzX2xlbiwKIAkJICAgIHNpbmZvLT5hc3NvY19yZXFfaWVzKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwlyZXR1cm4gMDsKIAogIG5sYV9wdXRfZmFpbHVyZToKIAlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CkBAIC0zODQ0LDcgKzM4ODIsNyBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfZXJyOwogCi0JCWlmIChubDgwMjExX3NlbmRfc3RhdGlvbihza2IsCisJCWlmIChubDgwMjExX3NlbmRfc3RhdGlvbihza2IsIE5MODAyMTFfQ01EX05FV19TVEFUSU9OLAogCQkJCU5FVExJTktfQ0IoY2ItPnNrYikucG9ydGlkLAogCQkJCWNiLT5ubGgtPm5sbXNnX3NlcSwgTkxNX0ZfTVVMVEksCiAJCQkJcmRldiwgd2Rldi0+bmV0ZGV2LCBtYWNfYWRkciwKQEAgLTM4OTEsNyArMzkyOSw4IEBACiAJaWYgKCFtc2cpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKG5sODAyMTFfc2VuZF9zdGF0aW9uKG1zZywgaW5mby0+c25kX3BvcnRpZCwgaW5mby0+c25kX3NlcSwgMCwKKwlpZiAobmw4MDIxMV9zZW5kX3N0YXRpb24obXNnLCBOTDgwMjExX0NNRF9ORVdfU1RBVElPTiwKKwkJCQkgaW5mby0+c25kX3BvcnRpZCwgaW5mby0+c25kX3NlcSwgMCwKIAkJCQkgcmRldiwgZGV2LCBtYWNfYWRkciwgJnNpbmZvKSA8IDApIHsKIAkJbmxtc2dfZnJlZShtc2cpOwogCQlyZXR1cm4gLUVOT0JVRlM7CkBAIC00NTMzLDcgKzQ1NzIsOCBAQAogCiAJbmxhX25lc3RfZW5kKG1zZywgcGluZm9hdHRyKTsKIAotCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CisJZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCXJldHVybiAwOwogCiAgbmxhX3B1dF9mYWlsdXJlOgogCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKQEAgLTUzMjcsNDIgKzUzNjcsMjAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG5sODAyMTFfZ2V0X3JlZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQorc3RhdGljIGludCBubDgwMjExX3B1dF9yZWdkb20oY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2RvbSwKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICptc2cpCiB7Ci0JY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2RvbTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOwotCXZvaWQgKmhkciA9IE5VTEw7CiAJc3RydWN0IG5sYXR0ciAqbmxfcmVnX3J1bGVzOwogCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKCFjZmc4MDIxMV9yZWdkb21haW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtc2cpCi0JCXJldHVybiAtRU5PQlVGUzsKLQotCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgaW5mby0+c25kX3BvcnRpZCwgaW5mby0+c25kX3NlcSwgMCwKLQkJCSAgICAgTkw4MDIxMV9DTURfR0VUX1JFRyk7Ci0JaWYgKCFoZHIpCi0JCWdvdG8gcHV0X2ZhaWx1cmU7Ci0KLQlpZiAocmVnX2xhc3RfcmVxdWVzdF9jZWxsX2Jhc2UoKSAmJgotCSAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfQVRUUl9VU0VSX1JFR19ISU5UX1RZUEUsCi0JCQlOTDgwMjExX1VTRVJfUkVHX0hJTlRfQ0VMTF9CQVNFKSkKLQkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JcmVnZG9tID0gcmN1X2RlcmVmZXJlbmNlKGNmZzgwMjExX3JlZ2RvbWFpbik7Ci0KIAlpZiAobmxhX3B1dF9zdHJpbmcobXNnLCBOTDgwMjExX0FUVFJfUkVHX0FMUEhBMiwgcmVnZG9tLT5hbHBoYTIpIHx8CiAJICAgIChyZWdkb20tPmRmc19yZWdpb24gJiYKIAkgICAgIG5sYV9wdXRfdTgobXNnLCBOTDgwMjExX0FUVFJfREZTX1JFR0lPTiwgcmVnZG9tLT5kZnNfcmVnaW9uKSkpCi0JCWdvdG8gbmxhX3B1dF9mYWlsdXJlX3JjdTsKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlubF9yZWdfcnVsZXMgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9SRUdfUlVMRVMpOwogCWlmICghbmxfcmVnX3J1bGVzKQotCQlnb3RvIG5sYV9wdXRfZmFpbHVyZV9yY3U7CisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiAJZm9yIChpID0gMDsgaSA8IHJlZ2RvbS0+bl9yZWdfcnVsZXM7IGkrKykgewogCQlzdHJ1Y3QgbmxhdHRyICpubF9yZWdfcnVsZTsKQEAgLTUzNzcsNyArNTM5NSw3IEBACiAKIAkJbmxfcmVnX3J1bGUgPSBubGFfbmVzdF9zdGFydChtc2csIGkpOwogCQlpZiAoIW5sX3JlZ19ydWxlKQotCQkJZ290byBubGFfcHV0X2ZhaWx1cmVfcmN1OworCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAkJbWF4X2JhbmR3aWR0aF9raHogPSBmcmVxX3JhbmdlLT5tYXhfYmFuZHdpZHRoX2toejsKIAkJaWYgKCFtYXhfYmFuZHdpZHRoX2toeikKQEAgLTUzOTgsMTMgKzU0MTYsNzQgQEAKIAkJCQlwb3dlcl9ydWxlLT5tYXhfZWlycCkgfHwKIAkJICAgIG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9BVFRSX0RGU19DQUNfVElNRSwKIAkJCQlyZWdfcnVsZS0+ZGZzX2NhY19tcykpCi0JCQlnb3RvIG5sYV9wdXRfZmFpbHVyZV9yY3U7CisJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCQlubGFfbmVzdF9lbmQobXNnLCBubF9yZWdfcnVsZSk7CiAJfQotCXJjdV9yZWFkX3VubG9jaygpOwogCiAJbmxhX25lc3RfZW5kKG1zZywgbmxfcmVnX3J1bGVzKTsKKwlyZXR1cm4gMDsKKworbmxhX3B1dF9mYWlsdXJlOgorCXJldHVybiAtRU1TR1NJWkU7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcmVnX2RvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2RvbSA9IE5VTEw7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBOVUxMOworCXN0cnVjdCBza19idWZmICptc2c7CisJdm9pZCAqaGRyOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtc2cpCisJCXJldHVybiAtRU5PQlVGUzsKKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgaW5mby0+c25kX3BvcnRpZCwgaW5mby0+c25kX3NlcSwgMCwKKwkJCSAgICAgTkw4MDIxMV9DTURfR0VUX1JFRyk7CisJaWYgKCFoZHIpCisJCWdvdG8gcHV0X2ZhaWx1cmU7CisKKwlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZXSkgeworCQlib29sIHNlbGZfbWFuYWdlZDsKKworCQlyZGV2ID0gY2ZnODAyMTFfZ2V0X2Rldl9mcm9tX2luZm8oZ2VubF9pbmZvX25ldChpbmZvKSwgaW5mbyk7CisJCWlmIChJU19FUlIocmRldikpIHsKKwkJCW5sbXNnX2ZyZWUobXNnKTsKKwkJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCQl9CisKKwkJd2lwaHkgPSAmcmRldi0+d2lwaHk7CisJCXNlbGZfbWFuYWdlZCA9IHdpcGh5LT5yZWd1bGF0b3J5X2ZsYWdzICYKKwkJCSAgICAgICBSRUdVTEFUT1JZX1dJUEhZX1NFTEZfTUFOQUdFRDsKKwkJcmVnZG9tID0gZ2V0X3dpcGh5X3JlZ2RvbSh3aXBoeSk7CisKKwkJLyogYSBzZWxmLW1hbmFnZWQtcmVnIGRldmljZSBtdXN0IGhhdmUgYSBwcml2YXRlIHJlZ2RvbSAqLworCQlpZiAoV0FSTl9PTighcmVnZG9tICYmIHNlbGZfbWFuYWdlZCkpIHsKKwkJCW5sbXNnX2ZyZWUobXNnKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHJlZ2RvbSAmJgorCQkgICAgbmxhX3B1dF91MzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIGdldF93aXBoeV9pZHgod2lwaHkpKSkKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCX0KKworCWlmICghd2lwaHkgJiYgcmVnX2xhc3RfcmVxdWVzdF9jZWxsX2Jhc2UoKSAmJgorCSAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfQVRUUl9VU0VSX1JFR19ISU5UX1RZUEUsCisJCQlOTDgwMjExX1VTRVJfUkVHX0hJTlRfQ0VMTF9CQVNFKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisKKwlpZiAoIXJlZ2RvbSkKKwkJcmVnZG9tID0gcmN1X2RlcmVmZXJlbmNlKGNmZzgwMjExX3JlZ2RvbWFpbik7CisKKwlpZiAobmw4MDIxMV9wdXRfcmVnZG9tKHJlZ2RvbSwgbXNnKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmVfcmN1OworCisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlnZW5sbXNnX2VuZChtc2csIGhkcik7CiAJcmV0dXJuIGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKQEAgLTU0MTgsNiArNTQ5Nyw4NCBAQAogCXJldHVybiAtRU1TR1NJWkU7CiB9CiAKK3N0YXRpYyBpbnQgbmw4MDIxMV9zZW5kX3JlZ2RvbShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCisJCQkgICAgICAgdTMyIHNlcSwgaW50IGZsYWdzLCBzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkb20pCit7CisJdm9pZCAqaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCBORVRMSU5LX0NCKGNiLT5za2IpLnBvcnRpZCwgc2VxLCBmbGFncywKKwkJCQkgICBOTDgwMjExX0NNRF9HRVRfUkVHKTsKKworCWlmICghaGRyKQorCQlyZXR1cm4gLTE7CisKKwlnZW5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgaGRyLCAmbmw4MDIxMV9mYW0pOworCisJaWYgKG5sODAyMTFfcHV0X3JlZ2RvbShyZWdkb20sIG1zZykpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCisJaWYgKCF3aXBoeSAmJiByZWdfbGFzdF9yZXF1ZXN0X2NlbGxfYmFzZSgpICYmCisJICAgIG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9BVFRSX1VTRVJfUkVHX0hJTlRfVFlQRSwKKwkJCU5MODAyMTFfVVNFUl9SRUdfSElOVF9DRUxMX0JBU0UpKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCWlmICh3aXBoeSAmJgorCSAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgZ2V0X3dpcGh5X2lkeCh3aXBoeSkpKQorCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCWlmICh3aXBoeSAmJiB3aXBoeS0+cmVndWxhdG9yeV9mbGFncyAmIFJFR1VMQVRPUllfV0lQSFlfU0VMRl9NQU5BR0VEICYmCisJICAgIG5sYV9wdXRfZmxhZyhtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9TRUxGX01BTkFHRURfUkVHKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKKwlnZW5sbXNnX2VuZChtc2csIGhkcik7CisJcmV0dXJuIDA7CisKK25sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJcmV0dXJuIC1FTVNHU0laRTsKK30KKworc3RhdGljIGludCBubDgwMjExX2dldF9yZWdfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKK3sKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnZG9tID0gTlVMTDsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJaW50IGVyciwgcmVnX2lkeCwgc3RhcnQgPSBjYi0+YXJnc1syXTsKKworCXJ0bmxfbG9jaygpOworCisJaWYgKGNmZzgwMjExX3JlZ2RvbWFpbiAmJiBzdGFydCA9PSAwKSB7CisJCWVyciA9IG5sODAyMTFfc2VuZF9yZWdkb20oc2tiLCBjYiwgY2ItPm5saC0+bmxtc2dfc2VxLAorCQkJCQkgIE5MTV9GX01VTFRJLCBOVUxMLAorCQkJCQkgIHJ0bmxfZGVyZWZlcmVuY2UoY2ZnODAyMTFfcmVnZG9tYWluKSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBvdXRfZXJyOworCX0KKworCS8qIHRoZSBnbG9iYWwgcmVnZG9tIGlzIGlkeCAwICovCisJcmVnX2lkeCA9IDE7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmY2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KSB7CisJCXJlZ2RvbSA9IGdldF93aXBoeV9yZWdkb20oJnJkZXYtPndpcGh5KTsKKwkJaWYgKCFyZWdkb20pCisJCQljb250aW51ZTsKKworCQlpZiAoKytyZWdfaWR4IDw9IHN0YXJ0KQorCQkJY29udGludWU7CisKKwkJZXJyID0gbmw4MDIxMV9zZW5kX3JlZ2RvbShza2IsIGNiLCBjYi0+bmxoLT5ubG1zZ19zZXEsCisJCQkJCSAgTkxNX0ZfTVVMVEksICZyZGV2LT53aXBoeSwgcmVnZG9tKTsKKwkJaWYgKGVyciA8IDApIHsKKwkJCXJlZ19pZHgtLTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJY2ItPmFyZ3NbMl0gPSByZWdfaWR4OworCWVyciA9IHNrYi0+bGVuOworb3V0X2VycjoKKwlydG5sX3VubG9jaygpOworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcmVnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IG5sYXR0ciAqdGJbTkw4MDIxMV9SRUdfUlVMRV9BVFRSX01BWCArIDFdOwpAQCAtNTYyMyw3ICs1NzgwLDcgQEAKIAkJcmVxdWVzdC0+c3NpZHMgPSAodm9pZCAqKSZyZXF1ZXN0LT5jaGFubmVsc1tuX2NoYW5uZWxzXTsKIAlyZXF1ZXN0LT5uX3NzaWRzID0gbl9zc2lkczsKIAlpZiAoaWVfbGVuKSB7Ci0JCWlmIChyZXF1ZXN0LT5zc2lkcykKKwkJaWYgKG5fc3NpZHMpCiAJCQlyZXF1ZXN0LT5pZSA9ICh2b2lkICopKHJlcXVlc3QtPnNzaWRzICsgbl9zc2lkcyk7CiAJCWVsc2UKIAkJCXJlcXVlc3QtPmllID0gKHZvaWQgKikocmVxdWVzdC0+Y2hhbm5lbHMgKyBuX2NoYW5uZWxzKTsKQEAgLTU2NzksNyArNTgzNiw3IEBACiAJcmVxdWVzdC0+bl9jaGFubmVscyA9IGk7CiAKIAlpID0gMDsKLQlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdKSB7CisJaWYgKG5fc3NpZHMpIHsKIAkJbmxhX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU0NBTl9TU0lEU10sIHRtcCkgewogCQkJaWYgKG5sYV9sZW4oYXR0cikgPiBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7CiAJCQkJZXJyID0gLUVJTlZBTDsKQEAgLTU4NzcsNyArNjAzNCw3IEBACiAJCXJlcXVlc3QtPnNzaWRzID0gKHZvaWQgKikmcmVxdWVzdC0+Y2hhbm5lbHNbbl9jaGFubmVsc107CiAJcmVxdWVzdC0+bl9zc2lkcyA9IG5fc3NpZHM7CiAJaWYgKGllX2xlbikgewotCQlpZiAocmVxdWVzdC0+c3NpZHMpCisJCWlmIChuX3NzaWRzKQogCQkJcmVxdWVzdC0+aWUgPSAodm9pZCAqKShyZXF1ZXN0LT5zc2lkcyArIG5fc3NpZHMpOwogCQllbHNlCiAJCQlyZXF1ZXN0LT5pZSA9ICh2b2lkICopKHJlcXVlc3QtPmNoYW5uZWxzICsgbl9jaGFubmVscyk7CkBAIC01ODg2LDcgKzYwNDMsNyBAQAogCWlmIChuX21hdGNoX3NldHMpIHsKIAkJaWYgKHJlcXVlc3QtPmllKQogCQkJcmVxdWVzdC0+bWF0Y2hfc2V0cyA9ICh2b2lkICopKHJlcXVlc3QtPmllICsgaWVfbGVuKTsKLQkJZWxzZSBpZiAocmVxdWVzdC0+c3NpZHMpCisJCWVsc2UgaWYgKG5fc3NpZHMpCiAJCQlyZXF1ZXN0LT5tYXRjaF9zZXRzID0KIAkJCQkodm9pZCAqKShyZXF1ZXN0LT5zc2lkcyArIG5fc3NpZHMpOwogCQllbHNlCkBAIC01OTQ1LDcgKzYxMDIsNyBAQAogCXJlcXVlc3QtPm5fY2hhbm5lbHMgPSBpOwogCiAJaSA9IDA7Ci0JaWYgKGF0dHJzW05MODAyMTFfQVRUUl9TQ0FOX1NTSURTXSkgeworCWlmIChuX3NzaWRzKSB7CiAJCW5sYV9mb3JfZWFjaF9uZXN0ZWQoYXR0ciwgYXR0cnNbTkw4MDIxMV9BVFRSX1NDQU5fU1NJRFNdLAogCQkJCSAgICB0bXApIHsKIAkJCWlmIChubGFfbGVuKGF0dHIpID4gSUVFRTgwMjExX01BWF9TU0lEX0xFTikgewpAQCAtNjA1Myw2ICs2MjEwLDEwIEBACiAJCX0KIAl9CiAKKwlpZiAoYXR0cnNbTkw4MDIxMV9BVFRSX1NDSEVEX1NDQU5fREVMQVldKQorCQlyZXF1ZXN0LT5kZWxheSA9CisJCQlubGFfZ2V0X3UzMihhdHRyc1tOTDgwMjExX0FUVFJfU0NIRURfU0NBTl9ERUxBWV0pOworCiAJcmVxdWVzdC0+aW50ZXJ2YWwgPSBpbnRlcnZhbDsKIAlyZXF1ZXN0LT5zY2FuX3N0YXJ0ID0gamlmZmllczsKIApAQCAtNjA2OSw2ICs2MjMwLDcgQEAKIAlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSBpbmZvLT51c2VyX3B0clswXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+dXNlcl9wdHJbMV07CiAJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0ICpzY2hlZF9zY2FuX3JlcTsKIAlpbnQgZXJyOwogCiAJaWYgKCEocmRldi0+d2lwaHkuZmxhZ3MgJiBXSVBIWV9GTEFHX1NVUFBPUlRTX1NDSEVEX1NDQU4pIHx8CkBAIC02MDc4LDI3ICs2MjQwLDMyIEBACiAJaWYgKHJkZXYtPnNjaGVkX3NjYW5fcmVxKQogCQlyZXR1cm4gLUVJTlBST0dSRVNTOwogCi0JcmRldi0+c2NoZWRfc2Nhbl9yZXEgPSBubDgwMjExX3BhcnNlX3NjaGVkX3NjYW4oJnJkZXYtPndpcGh5LCB3ZGV2LAotCQkJCQkJCWluZm8tPmF0dHJzKTsKLQllcnIgPSBQVFJfRVJSX09SX1pFUk8ocmRldi0+c2NoZWRfc2Nhbl9yZXEpOworCXNjaGVkX3NjYW5fcmVxID0gbmw4MDIxMV9wYXJzZV9zY2hlZF9zY2FuKCZyZGV2LT53aXBoeSwgd2RldiwKKwkJCQkJCSAgaW5mby0+YXR0cnMpOworCisJZXJyID0gUFRSX0VSUl9PUl9aRVJPKHNjaGVkX3NjYW5fcmVxKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9lcnI7CiAKLQllcnIgPSByZGV2X3NjaGVkX3NjYW5fc3RhcnQocmRldiwgZGV2LCByZGV2LT5zY2hlZF9zY2FuX3JlcSk7CisJZXJyID0gcmRldl9zY2hlZF9zY2FuX3N0YXJ0KHJkZXYsIGRldiwgc2NoZWRfc2Nhbl9yZXEpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2ZyZWU7CiAKLQlyZGV2LT5zY2hlZF9zY2FuX3JlcS0+ZGV2ID0gZGV2OwotCXJkZXYtPnNjaGVkX3NjYW5fcmVxLT53aXBoeSA9ICZyZGV2LT53aXBoeTsKKwlzY2hlZF9zY2FuX3JlcS0+ZGV2ID0gZGV2OworCXNjaGVkX3NjYW5fcmVxLT53aXBoeSA9ICZyZGV2LT53aXBoeTsKKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU09DS0VUX09XTkVSXSkKKwkJc2NoZWRfc2Nhbl9yZXEtPm93bmVyX25scG9ydGlkID0gaW5mby0+c25kX3BvcnRpZDsKKworCXJjdV9hc3NpZ25fcG9pbnRlcihyZGV2LT5zY2hlZF9zY2FuX3JlcSwgc2NoZWRfc2Nhbl9yZXEpOwogCiAJbmw4MDIxMV9zZW5kX3NjaGVkX3NjYW4ocmRldiwgZGV2LAogCQkJCU5MODAyMTFfQ01EX1NUQVJUX1NDSEVEX1NDQU4pOwogCXJldHVybiAwOwogCiBvdXRfZnJlZToKLQlrZnJlZShyZGV2LT5zY2hlZF9zY2FuX3JlcSk7CisJa2ZyZWUoc2NoZWRfc2Nhbl9yZXEpOwogb3V0X2VycjoKLQlyZGV2LT5zY2hlZF9zY2FuX3JlcSA9IE5VTEw7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtNjQzMyw3ICs2NjAwLDggQEAKIAogCW5sYV9uZXN0X2VuZChtc2csIGJzcyk7CiAKLQlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwlyZXR1cm4gMDsKIAogIGZhaWxfdW5sb2NrX3JjdToKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTY0ODEsMTIgKzY2NDksMTcgQEAKIH0KIAogc3RhdGljIGludCBubDgwMjExX3NlbmRfc3VydmV5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsIHUzMiBzZXEsCi0JCQkJaW50IGZsYWdzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBzdXJ2ZXlfaW5mbyAqc3VydmV5KQorCQkJICAgICAgIGludCBmbGFncywgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgICBib29sIGFsbG93X3JhZGlvX3N0YXRzLAorCQkJICAgICAgIHN0cnVjdCBzdXJ2ZXlfaW5mbyAqc3VydmV5KQogewogCXZvaWQgKmhkcjsKIAlzdHJ1Y3QgbmxhdHRyICppbmZvYXR0cjsKIAorCS8qIHNraXAgcmFkaW8gc3RhdHMgaWYgdXNlcnNwYWNlIGRpZG4ndCByZXF1ZXN0IHRoZW0gKi8KKwlpZiAoIXN1cnZleS0+Y2hhbm5lbCAmJiAhYWxsb3dfcmFkaW9fc3RhdHMpCisJCXJldHVybiAwOworCiAJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCBwb3J0aWQsIHNlcSwgZmxhZ3MsCiAJCQkgICAgIE5MODAyMTFfQ01EX05FV19TVVJWRVlfUkVTVUxUUyk7CiAJaWYgKCFoZHIpCkBAIC02NDk5LDcgKzY2NzIsOCBAQAogCWlmICghaW5mb2F0dHIpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCi0JaWYgKG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9TVVJWRVlfSU5GT19GUkVRVUVOQ1ksCisJaWYgKHN1cnZleS0+Y2hhbm5lbCAmJgorCSAgICBubGFfcHV0X3UzMihtc2csIE5MODAyMTFfU1VSVkVZX0lORk9fRlJFUVVFTkNZLAogCQkJc3VydmV5LT5jaGFubmVsLT5jZW50ZXJfZnJlcSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCkBAIC02NTA5LDQ5ICs2NjgzLDU3IEBACiAJaWYgKChzdXJ2ZXktPmZpbGxlZCAmIFNVUlZFWV9JTkZPX0lOX1VTRSkgJiYKIAkgICAgbmxhX3B1dF9mbGFnKG1zZywgTkw4MDIxMV9TVVJWRVlfSU5GT19JTl9VU0UpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlpZiAoKHN1cnZleS0+ZmlsbGVkICYgU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FKSAmJgotCSAgICBubGFfcHV0X3U2NChtc2csIE5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FLAotCQkJc3VydmV5LT5jaGFubmVsX3RpbWUpKQorCWlmICgoc3VydmV5LT5maWxsZWQgJiBTVVJWRVlfSU5GT19USU1FKSAmJgorCSAgICBubGFfcHV0X3U2NChtc2csIE5MODAyMTFfU1VSVkVZX0lORk9fVElNRSwKKwkJCXN1cnZleS0+dGltZSkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCWlmICgoc3VydmV5LT5maWxsZWQgJiBTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfQlVTWSkgJiYKLQkgICAgbmxhX3B1dF91NjQobXNnLCBOTDgwMjExX1NVUlZFWV9JTkZPX0NIQU5ORUxfVElNRV9CVVNZLAotCQkJc3VydmV5LT5jaGFubmVsX3RpbWVfYnVzeSkpCisJaWYgKChzdXJ2ZXktPmZpbGxlZCAmIFNVUlZFWV9JTkZPX1RJTUVfQlVTWSkgJiYKKwkgICAgbmxhX3B1dF91NjQobXNnLCBOTDgwMjExX1NVUlZFWV9JTkZPX1RJTUVfQlVTWSwKKwkJCXN1cnZleS0+dGltZV9idXN5KSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7Ci0JaWYgKChzdXJ2ZXktPmZpbGxlZCAmIFNVUlZFWV9JTkZPX0NIQU5ORUxfVElNRV9FWFRfQlVTWSkgJiYKLQkgICAgbmxhX3B1dF91NjQobXNnLCBOTDgwMjExX1NVUlZFWV9JTkZPX0NIQU5ORUxfVElNRV9FWFRfQlVTWSwKLQkJCXN1cnZleS0+Y2hhbm5lbF90aW1lX2V4dF9idXN5KSkKKwlpZiAoKHN1cnZleS0+ZmlsbGVkICYgU1VSVkVZX0lORk9fVElNRV9FWFRfQlVTWSkgJiYKKwkgICAgbmxhX3B1dF91NjQobXNnLCBOTDgwMjExX1NVUlZFWV9JTkZPX1RJTUVfRVhUX0JVU1ksCisJCQlzdXJ2ZXktPnRpbWVfZXh0X2J1c3kpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKLQlpZiAoKHN1cnZleS0+ZmlsbGVkICYgU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1JYKSAmJgotCSAgICBubGFfcHV0X3U2NChtc2csIE5MODAyMTFfU1VSVkVZX0lORk9fQ0hBTk5FTF9USU1FX1JYLAotCQkJc3VydmV5LT5jaGFubmVsX3RpbWVfcngpKQorCWlmICgoc3VydmV5LT5maWxsZWQgJiBTVVJWRVlfSU5GT19USU1FX1JYKSAmJgorCSAgICBubGFfcHV0X3U2NChtc2csIE5MODAyMTFfU1VSVkVZX0lORk9fVElNRV9SWCwKKwkJCXN1cnZleS0+dGltZV9yeCkpCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCWlmICgoc3VydmV5LT5maWxsZWQgJiBTVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfVFgpICYmCi0JICAgIG5sYV9wdXRfdTY0KG1zZywgTkw4MDIxMV9TVVJWRVlfSU5GT19DSEFOTkVMX1RJTUVfVFgsCi0JCQlzdXJ2ZXktPmNoYW5uZWxfdGltZV90eCkpCisJaWYgKChzdXJ2ZXktPmZpbGxlZCAmIFNVUlZFWV9JTkZPX1RJTUVfVFgpICYmCisJICAgIG5sYV9wdXRfdTY0KG1zZywgTkw4MDIxMV9TVVJWRVlfSU5GT19USU1FX1RYLAorCQkJc3VydmV5LT50aW1lX3R4KSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisJaWYgKChzdXJ2ZXktPmZpbGxlZCAmIFNVUlZFWV9JTkZPX1RJTUVfU0NBTikgJiYKKwkgICAgbmxhX3B1dF91NjQobXNnLCBOTDgwMjExX1NVUlZFWV9JTkZPX1RJTUVfU0NBTiwKKwkJCXN1cnZleS0+dGltZV9zY2FuKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlubGFfbmVzdF9lbmQobXNnLCBpbmZvYXR0cik7CiAKLQlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwlyZXR1cm4gMDsKIAogIG5sYV9wdXRfZmFpbHVyZToKIAlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CiAJcmV0dXJuIC1FTVNHU0laRTsKIH0KIAotc3RhdGljIGludCBubDgwMjExX2R1bXBfc3VydmV5KHN0cnVjdCBza19idWZmICpza2IsCi0JCQlzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCitzdGF0aWMgaW50IG5sODAyMTFfZHVtcF9zdXJ2ZXkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQogewogCXN0cnVjdCBzdXJ2ZXlfaW5mbyBzdXJ2ZXk7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CiAJaW50IHN1cnZleV9pZHggPSBjYi0+YXJnc1syXTsKIAlpbnQgcmVzOworCWJvb2wgcmFkaW9fc3RhdHM7CiAKIAlyZXMgPSBubDgwMjExX3ByZXBhcmVfd2Rldl9kdW1wKHNrYiwgY2IsICZyZGV2LCAmd2Rldik7CiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKIAorCS8qIHByZXBhcmVfd2Rldl9kdW1wIHBhcnNlZCB0aGUgYXR0cmlidXRlcyAqLworCXJhZGlvX3N0YXRzID0gbmw4MDIxMV9mYW0uYXR0cmJ1ZltOTDgwMjExX0FUVFJfU1VSVkVZX1JBRElPX1NUQVRTXTsKKwogCWlmICghd2Rldi0+bmV0ZGV2KSB7CiAJCXJlcyA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0X2VycjsKQEAgLTY1NjksMTMgKzY3NTEsOSBAQAogCQlpZiAocmVzKQogCQkJZ290byBvdXRfZXJyOwogCi0JCS8qIFN1cnZleSB3aXRob3V0IGEgY2hhbm5lbCBkb2Vzbid0IG1ha2Ugc2Vuc2UgKi8KLQkJaWYgKCFzdXJ2ZXkuY2hhbm5lbCkgewotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJaWYgKHN1cnZleS5jaGFubmVsLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKSB7CisJCS8qIGRvbid0IHNlbmQgZGlzYWJsZWQgY2hhbm5lbHMsIGJ1dCBkbyBzZW5kIG5vbi1jaGFubmVsIGRhdGEgKi8KKwkJaWYgKHN1cnZleS5jaGFubmVsICYmCisJCSAgICBzdXJ2ZXkuY2hhbm5lbC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkgewogCQkJc3VydmV5X2lkeCsrOwogCQkJY29udGludWU7CiAJCX0KQEAgLTY1ODMsNyArNjc2MSw3IEBACiAJCWlmIChubDgwMjExX3NlbmRfc3VydmV5KHNrYiwKIAkJCQlORVRMSU5LX0NCKGNiLT5za2IpLnBvcnRpZCwKIAkJCQljYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLAotCQkJCXdkZXYtPm5ldGRldiwgJnN1cnZleSkgPCAwKQorCQkJCXdkZXYtPm5ldGRldiwgcmFkaW9fc3RhdHMsICZzdXJ2ZXkpIDwgMCkKIAkJCWdvdG8gb3V0OwogCQlzdXJ2ZXlfaWR4Kys7CiAJfQpAQCAtNzU5NiwxNCArNzc3NCwxOSBAQAogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tPnVzZXJfcHRyWzBdOwogCXN0cnVjdCBuZXQgKm5ldDsKIAlpbnQgZXJyOwotCXUzMiBwaWQ7CiAKLQlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9QSURdKQorCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUElEXSkgeworCQl1MzIgcGlkID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1BJRF0pOworCisJCW5ldCA9IGdldF9uZXRfbnNfYnlfcGlkKHBpZCk7CisJfSBlbHNlIGlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfTkVUTlNfRkRdKSB7CisJCXUzMiBmZCA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9ORVROU19GRF0pOworCisJCW5ldCA9IGdldF9uZXRfbnNfYnlfZmQoZmQpOworCX0gZWxzZSB7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAotCXBpZCA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9QSURdKTsKLQotCW5ldCA9IGdldF9uZXRfbnNfYnlfcGlkKHBpZCk7CiAJaWYgKElTX0VSUihuZXQpKQogCQlyZXR1cm4gUFRSX0VSUihuZXQpOwogCkBAIC04NTk5LDYgKzg3ODIsNDggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBubDgwMjExX3NlbmRfd293bGFuX25kKHN0cnVjdCBza19idWZmICptc2csCisJCQkJICBzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0ICpyZXEpCit7CisJc3RydWN0IG5sYXR0ciAqbmQsICpmcmVxcywgKm1hdGNoZXMsICptYXRjaDsKKwlpbnQgaTsKKworCWlmICghcmVxKQorCQlyZXR1cm4gMDsKKworCW5kID0gbmxhX25lc3Rfc3RhcnQobXNnLCBOTDgwMjExX1dPV0xBTl9UUklHX05FVF9ERVRFQ1QpOworCWlmICghbmQpCisJCXJldHVybiAtRU5PQlVGUzsKKworCWlmIChubGFfcHV0X3UzMihtc2csIE5MODAyMTFfQVRUUl9TQ0hFRF9TQ0FOX0lOVEVSVkFMLCByZXEtPmludGVydmFsKSkKKwkJcmV0dXJuIC1FTk9CVUZTOworCisJZnJlcXMgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9TQ0FOX0ZSRVFVRU5DSUVTKTsKKwlpZiAoIWZyZXFzKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVxLT5uX2NoYW5uZWxzOyBpKyspCisJCW5sYV9wdXRfdTMyKG1zZywgaSwgcmVxLT5jaGFubmVsc1tpXS0+Y2VudGVyX2ZyZXEpOworCisJbmxhX25lc3RfZW5kKG1zZywgZnJlcXMpOworCisJaWYgKHJlcS0+bl9tYXRjaF9zZXRzKSB7CisJCW1hdGNoZXMgPSBubGFfbmVzdF9zdGFydChtc2csIE5MODAyMTFfQVRUUl9TQ0hFRF9TQ0FOX01BVENIKTsKKwkJZm9yIChpID0gMDsgaSA8IHJlcS0+bl9tYXRjaF9zZXRzOyBpKyspIHsKKwkJCW1hdGNoID0gbmxhX25lc3Rfc3RhcnQobXNnLCBpKTsKKwkJCW5sYV9wdXQobXNnLCBOTDgwMjExX1NDSEVEX1NDQU5fTUFUQ0hfQVRUUl9TU0lELAorCQkJCXJlcS0+bWF0Y2hfc2V0c1tpXS5zc2lkLnNzaWRfbGVuLAorCQkJCXJlcS0+bWF0Y2hfc2V0c1tpXS5zc2lkLnNzaWQpOworCQkJbmxhX25lc3RfZW5kKG1zZywgbWF0Y2gpOworCQl9CisJCW5sYV9uZXN0X2VuZChtc2csIG1hdGNoZXMpOworCX0KKworCW5sYV9uZXN0X2VuZChtc2csIG5kKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG5sODAyMTFfZ2V0X3dvd2xhbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IGluZm8tPnVzZXJfcHRyWzBdOwpAQCAtODY1Niw2ICs4ODgxLDExIEBACiAJCQkJCSAgICByZGV2LT53aXBoeS53b3dsYW5fY29uZmlnLT50Y3ApKQogCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKKwkJaWYgKG5sODAyMTFfc2VuZF93b3dsYW5fbmQoCisJCQkgICAgbXNnLAorCQkJICAgIHJkZXYtPndpcGh5Lndvd2xhbl9jb25maWctPm5kX2NvbmZpZykpCisJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKwogCQlubGFfbmVzdF9lbmQobXNnLCBubF93b3dsYW4pOwogCX0KIApAQCAtMTAyMjUsNyArMTA0NTUsOCBAQAogCX0sCiAJewogCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1JFRywKLQkJLmRvaXQgPSBubDgwMjExX2dldF9yZWcsCisJCS5kb2l0ID0gbmw4MDIxMV9nZXRfcmVnX2RvLAorCQkuZHVtcGl0ID0gbmw4MDIxMV9nZXRfcmVnX2R1bXAsCiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKIAkJLmludGVybmFsX2ZsYWdzID0gTkw4MDIxMV9GTEFHX05FRURfUlROTCwKIAkJLyogY2FuIGJlIHJldHJpZXZlZCBieSB1bnByaXZpbGVnZWQgdXNlcnMgKi8KQEAgLTEwODI0LDcgKzExMDU1LDggQEAKIAkvKiBpZ25vcmUgZXJyb3JzIGFuZCBzZW5kIGluY29tcGxldGUgZXZlbnQgYW55d2F5ICovCiAJbmw4MDIxMV9hZGRfc2Nhbl9yZXEobXNnLCByZGV2KTsKIAotCXJldHVybiBnZW5sbXNnX2VuZChtc2csIGhkcik7CisJZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCXJldHVybiAwOwogCiAgbmxhX3B1dF9mYWlsdXJlOgogCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKQEAgLTEwODQ3LDcgKzExMDc5LDggQEAKIAkgICAgbmxhX3B1dF91MzIobXNnLCBOTDgwMjExX0FUVFJfSUZJTkRFWCwgbmV0ZGV2LT5pZmluZGV4KSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlyZXR1cm4gZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwlyZXR1cm4gMDsKIAogIG5sYV9wdXRfZmFpbHVyZToKIAlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CkBAIC0xMDkzOSwyNSArMTExNzIsOSBAQAogCQkJCU5MODAyMTFfTUNHUlBfU0NBTiwgR0ZQX0tFUk5FTCk7CiB9CiAKLS8qCi0gKiBUaGlzIGNhbiBoYXBwZW4gb24gZ2xvYmFsIHJlZ3VsYXRvcnkgY2hhbmdlcyBvciBkZXZpY2Ugc3BlY2lmaWMgc2V0dGluZ3MKLSAqIGJhc2VkIG9uIGN1c3RvbSB3b3JsZCByZWd1bGF0b3J5IGRvbWFpbnMuCi0gKi8KLXZvaWQgbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKK3N0YXRpYyBib29sIG5sODAyMTFfcmVnX2NoYW5nZV9ldmVudF9maWxsKHN0cnVjdCBza19idWZmICptc2csCisJCQkJCSAgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOwotCXZvaWQgKmhkcjsKLQotCW1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghbXNnKQotCQlyZXR1cm47Ci0KLQloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIE5MODAyMTFfQ01EX1JFR19DSEFOR0UpOwotCWlmICghaGRyKSB7Ci0JCW5sbXNnX2ZyZWUobXNnKTsKLQkJcmV0dXJuOwotCX0KLQogCS8qIFVzZXJzcGFjZSBjYW4gYWx3YXlzIGNvdW50IHRoaXMgb25lIGFsd2F5cyBiZWluZyBzZXQgKi8KIAlpZiAobmxhX3B1dF91OChtc2csIE5MODAyMTFfQVRUUl9SRUdfSU5JVElBVE9SLCByZXF1ZXN0LT5pbml0aWF0b3IpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKQEAgLTEwOTgzLDggKzExMjAwLDQ2IEBACiAJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAl9CiAKLQlpZiAocmVxdWVzdC0+d2lwaHlfaWR4ICE9IFdJUEhZX0lEWF9JTlZBTElEICYmCi0JICAgIG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCByZXF1ZXN0LT53aXBoeV9pZHgpKQorCWlmIChyZXF1ZXN0LT53aXBoeV9pZHggIT0gV0lQSFlfSURYX0lOVkFMSUQpIHsKKwkJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShyZXF1ZXN0LT53aXBoeV9pZHgpOworCisJCWlmICh3aXBoeSAmJgorCQkgICAgbmxhX3B1dF91MzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFksIHJlcXVlc3QtPndpcGh5X2lkeCkpCisJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKKworCQlpZiAod2lwaHkgJiYKKwkJICAgIHdpcGh5LT5yZWd1bGF0b3J5X2ZsYWdzICYgUkVHVUxBVE9SWV9XSVBIWV9TRUxGX01BTkFHRUQgJiYKKwkJICAgIG5sYV9wdXRfZmxhZyhtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9TRUxGX01BTkFHRURfUkVHKSkKKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCX0KKworCXJldHVybiB0cnVlOworCitubGFfcHV0X2ZhaWx1cmU6CisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogVGhpcyBjYW4gaGFwcGVuIG9uIGdsb2JhbCByZWd1bGF0b3J5IGNoYW5nZXMgb3IgZGV2aWNlIHNwZWNpZmljIHNldHRpbmdzCisgKiBiYXNlZCBvbiBjdXN0b20gcmVndWxhdG9yeSBkb21haW5zLgorICovCit2b2lkIG5sODAyMTFfY29tbW9uX3JlZ19jaGFuZ2VfZXZlbnQoZW51bSBubDgwMjExX2NvbW1hbmRzIGNtZF9pZCwKKwkJCQkgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuOworCisJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCAwLCAwLCAwLCBjbWRfaWQpOworCWlmICghaGRyKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChubDgwMjExX3JlZ19jaGFuZ2VfZXZlbnRfZmlsbChtc2csIHJlcXVlc3QpID09IGZhbHNlKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKQEAgLTExNTIzLDcgKzExNzc4LDcgQEAKIAlpZiAoIW1zZykKIAkJcmV0dXJuOwogCi0JaWYgKG5sODAyMTFfc2VuZF9zdGF0aW9uKG1zZywgMCwgMCwgMCwKKwlpZiAobmw4MDIxMV9zZW5kX3N0YXRpb24obXNnLCBOTDgwMjExX0NNRF9ORVdfU1RBVElPTiwgMCwgMCwgMCwKIAkJCQkgcmRldiwgZGV2LCBtYWNfYWRkciwgc2luZm8pIDwgMCkgewogCQlubG1zZ19mcmVlKG1zZyk7CiAJCXJldHVybjsKQEAgLTExNTM0LDEyICsxMTc4OSwxNiBAQAogfQogRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9uZXdfc3RhKTsKIAotdm9pZCBjZmc4MDIxMV9kZWxfc3RhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwgZ2ZwX3QgZ2ZwKQordm9pZCBjZmc4MDIxMV9kZWxfc3RhX3NpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwKKwkJCSAgICBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbywgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCB3aXBoeSAqd2lwaHkgPSBkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5OwogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX3JkZXYod2lwaHkpOwogCXN0cnVjdCBza19idWZmICptc2c7Ci0Jdm9pZCAqaGRyOworCXN0cnVjdCBzdGF0aW9uX2luZm8gZW1wdHlfc2luZm8gPSB7fTsKKworCWlmICghc2luZm8pCisJCXNpbmZvID0gJmVtcHR5X3NpbmZvOwogCiAJdHJhY2VfY2ZnODAyMTFfZGVsX3N0YShkZXYsIG1hY19hZGRyKTsKIApAQCAtMTE1NDcsMjcgKzExODA2LDE2IEBACiAJaWYgKCFtc2cpCiAJCXJldHVybjsKIAotCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgMCwgMCwgMCwgTkw4MDIxMV9DTURfREVMX1NUQVRJT04pOwotCWlmICghaGRyKSB7CisJaWYgKG5sODAyMTFfc2VuZF9zdGF0aW9uKG1zZywgTkw4MDIxMV9DTURfREVMX1NUQVRJT04sIDAsIDAsIDAsCisJCQkJIHJkZXYsIGRldiwgbWFjX2FkZHIsIHNpbmZvKSA8IDApIHsKIAkJbmxtc2dfZnJlZShtc2cpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKG5sYV9wdXRfdTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIGRldi0+aWZpbmRleCkgfHwKLQkgICAgbmxhX3B1dChtc2csIE5MODAyMTFfQVRUUl9NQUMsIEVUSF9BTEVOLCBtYWNfYWRkcikpCi0JCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwotCi0JZ2VubG1zZ19lbmQobXNnLCBoZHIpOwotCiAJZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMoJm5sODAyMTFfZmFtLCB3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbXNnLCAwLAogCQkJCU5MODAyMTFfTUNHUlBfTUxNRSwgZ2ZwKTsKLQlyZXR1cm47Ci0KLSBubGFfcHV0X2ZhaWx1cmU6Ci0JZ2VubG1zZ19jYW5jZWwobXNnLCBoZHIpOwotCW5sbXNnX2ZyZWUobXNnKTsKIH0KLUVYUE9SVF9TWU1CT0woY2ZnODAyMTFfZGVsX3N0YSk7CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2RlbF9zdGFfc2luZm8pOwogCiB2b2lkIGNmZzgwMjExX2Nvbm5fZmFpbGVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwKIAkJCSAgZW51bSBubDgwMjExX2Nvbm5lY3RfZmFpbGVkX3JlYXNvbiByZWFzb24sCkBAIC0xMjQ3MSw2ICsxMjcxOSwxMyBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgJmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkgewogCQlib29sIHNjaGVkdWxlX2Rlc3Ryb3lfd29yayA9IGZhbHNlOworCQlib29sIHNjaGVkdWxlX3NjYW5fc3RvcCA9IGZhbHNlOworCQlzdHJ1Y3QgY2ZnODAyMTFfc2NoZWRfc2Nhbl9yZXF1ZXN0ICpzY2hlZF9zY2FuX3JlcSA9CisJCQlyY3VfZGVyZWZlcmVuY2UocmRldi0+c2NoZWRfc2Nhbl9yZXEpOworCisJCWlmIChzY2hlZF9zY2FuX3JlcSAmJiBub3RpZnktPnBvcnRpZCAmJgorCQkgICAgc2NoZWRfc2Nhbl9yZXEtPm93bmVyX25scG9ydGlkID09IG5vdGlmeS0+cG9ydGlkKQorCQkJc2NoZWR1bGVfc2Nhbl9zdG9wID0gdHJ1ZTsKIAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh3ZGV2LCAmcmRldi0+d2Rldl9saXN0LCBsaXN0KSB7CiAJCQljZmc4MDIxMV9tbG1lX3VucmVnaXN0ZXJfc29ja2V0KHdkZXYsIG5vdGlmeS0+cG9ydGlkKTsKQEAgLTEyNTAxLDYgKzEyNzU2LDEyIEBACiAJCQkJc3Bpbl91bmxvY2soJnJkZXYtPmRlc3Ryb3lfbGlzdF9sb2NrKTsKIAkJCQlzY2hlZHVsZV93b3JrKCZyZGV2LT5kZXN0cm95X3dvcmspOwogCQkJfQorCQl9IGVsc2UgaWYgKHNjaGVkdWxlX3NjYW5fc3RvcCkgeworCQkJc2NoZWRfc2Nhbl9yZXEtPm93bmVyX25scG9ydGlkID0gMDsKKworCQkJaWYgKHJkZXYtPm9wcy0+c2NoZWRfc2Nhbl9zdG9wICYmCisJCQkgICAgcmRldi0+d2lwaHkuZmxhZ3MgJiBXSVBIWV9GTEFHX1NVUFBPUlRTX1NDSEVEX1NDQU4pCisJCQkJc2NoZWR1bGVfd29yaygmcmRldi0+c2NoZWRfc2Nhbl9zdG9wX3drKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaCBiL25ldC93aXJlbGVzcy9ubDgwMjExLmgKaW5kZXggN2FkNzBkNi4uODRkNGVkZiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaAorKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCkBAIC0xNyw3ICsxNywyMSBAQAogCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgY21kKTsKIHZvaWQgbmw4MDIxMV9zZW5kX3NjaGVkX3NjYW5fcmVzdWx0cyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKLXZvaWQgbmw4MDIxMV9zZW5kX3JlZ19jaGFuZ2VfZXZlbnQoc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqcmVxdWVzdCk7Cit2b2lkIG5sODAyMTFfY29tbW9uX3JlZ19jaGFuZ2VfZXZlbnQoZW51bSBubDgwMjExX2NvbW1hbmRzIGNtZF9pZCwKKwkJCQkgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpOworCitzdGF0aWMgaW5saW5lIHZvaWQKK25sODAyMTFfc2VuZF9yZWdfY2hhbmdlX2V2ZW50KHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJbmw4MDIxMV9jb21tb25fcmVnX2NoYW5nZV9ldmVudChOTDgwMjExX0NNRF9SRUdfQ0hBTkdFLCByZXF1ZXN0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitubDgwMjExX3NlbmRfd2lwaHlfcmVnX2NoYW5nZV9ldmVudChzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KQoreworCW5sODAyMTFfY29tbW9uX3JlZ19jaGFuZ2VfZXZlbnQoTkw4MDIxMV9DTURfV0lQSFlfUkVHX0NIQU5HRSwgcmVxdWVzdCk7Cit9CisKIHZvaWQgbmw4MDIxMV9zZW5kX3J4X2F1dGgoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCBnZnBfdCBnZnApOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5jIGIvbmV0L3dpcmVsZXNzL3JlZy5jCmluZGV4IGQzOWQxY2IuLmI1ODZkMGQgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZWcuYworKysgYi9uZXQvd2lyZWxlc3MvcmVnLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogICogcHJvdGVjdGVkIGJ5IFJUTkwgKGFuZCBjYW4gYmUgYWNjZXNzZWQgd2l0aCBSQ1UgcHJvdGVjdGlvbikKICAqLwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgX19yY3UgKmxhc3RfcmVxdWVzdCA9Ci0JKHZvaWQgX19yY3UgKikmY29yZV9yZXF1ZXN0X3dvcmxkOworCSh2b2lkIF9fZm9yY2UgX19yY3UgKikmY29yZV9yZXF1ZXN0X3dvcmxkOwogCiAvKiBUbyB0cmlnZ2VyIHVzZXJzcGFjZSBldmVudHMgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpyZWdfcGRldjsKQEAgLTE0Miw3ICsxNDIsNyBAQAogCXJldHVybiBydG5sX2RlcmVmZXJlbmNlKGNmZzgwMjExX3JlZ2RvbWFpbik7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqZ2V0X3dpcGh5X3JlZ2RvbShzdHJ1Y3Qgd2lwaHkgKndpcGh5KQorY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmdldF93aXBoeV9yZWdkb20oc3RydWN0IHdpcGh5ICp3aXBoeSkKIHsKIAlyZXR1cm4gcnRubF9kZXJlZmVyZW5jZSh3aXBoeS0+cmVnZCk7CiB9CkBAIC0xMzA3LDYgKzEzMDcsOSBAQAogewogCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKmxyID0gZ2V0X2xhc3RfcmVxdWVzdCgpOwogCisJaWYgKHdpcGh5LT5yZWd1bGF0b3J5X2ZsYWdzICYgUkVHVUxBVE9SWV9XSVBIWV9TRUxGX01BTkFHRUQpCisJCXJldHVybiB0cnVlOworCiAJaWYgKCFscikgewogCQlSRUdfREJHX1BSSU5UKCJJZ25vcmluZyByZWd1bGF0b3J5IHJlcXVlc3Qgc2V0IGJ5ICVzICIKIAkJCSAgICAgICJzaW5jZSBsYXN0X3JlcXVlc3QgaXMgbm90IHNldFxuIiwKQEAgLTE2OTUsOCArMTY5OCwxMiBAQAogCWlmIChJU19FUlIocmVnX3J1bGUpKSB7CiAJCVJFR19EQkdfUFJJTlQoIkRpc2FibGluZyBmcmVxICVkIE1IeiBhcyBjdXN0b20gcmVnZCBoYXMgbm8gcnVsZSB0aGF0IGZpdHMgaXRcbiIsCiAJCQkgICAgICBjaGFuLT5jZW50ZXJfZnJlcSk7Ci0JCWNoYW4tPm9yaWdfZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fRElTQUJMRUQ7Ci0JCWNoYW4tPmZsYWdzID0gY2hhbi0+b3JpZ19mbGFnczsKKwkJaWYgKHdpcGh5LT5yZWd1bGF0b3J5X2ZsYWdzICYgUkVHVUxBVE9SWV9XSVBIWV9TRUxGX01BTkFHRUQpIHsKKwkJCWNoYW4tPmZsYWdzIHw9IElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEOworCQl9IGVsc2UgeworCQkJY2hhbi0+b3JpZ19mbGFncyB8PSBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRDsKKwkJCWNoYW4tPmZsYWdzID0gY2hhbi0+b3JpZ19mbGFnczsKKwkJfQogCQlyZXR1cm47CiAJfQogCkBAIC0xNzIxLDcgKzE3MjgsMTMgQEAKIAljaGFuLT5kZnNfc3RhdGUgPSBOTDgwMjExX0RGU19VU0FCTEU7CiAKIAljaGFuLT5iZWFjb25fZm91bmQgPSBmYWxzZTsKLQljaGFuLT5mbGFncyB8PSBtYXBfcmVnZG9tX2ZsYWdzKHJlZ19ydWxlLT5mbGFncykgfCBid19mbGFnczsKKworCWlmICh3aXBoeS0+cmVndWxhdG9yeV9mbGFncyAmIFJFR1VMQVRPUllfV0lQSFlfU0VMRl9NQU5BR0VEKQorCQljaGFuLT5mbGFncyA9IGNoYW4tPm9yaWdfZmxhZ3MgfCBid19mbGFncyB8CisJCQkgICAgICBtYXBfcmVnZG9tX2ZsYWdzKHJlZ19ydWxlLT5mbGFncyk7CisJZWxzZQorCQljaGFuLT5mbGFncyB8PSBtYXBfcmVnZG9tX2ZsYWdzKHJlZ19ydWxlLT5mbGFncykgfCBid19mbGFnczsKKwogCWNoYW4tPm1heF9hbnRlbm5hX2dhaW4gPSAoaW50KSBNQklfVE9fREJJKHBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4pOwogCWNoYW4tPm1heF9yZWdfcG93ZXIgPSBjaGFuLT5tYXhfcG93ZXIgPQogCQkoaW50KSBNQk1fVE9fREJNKHBvd2VyX3J1bGUtPm1heF9laXJwKTsKQEAgLTIxMDcsNiArMjEyMCwyNiBAQAogCXJlZ19mcmVlX3JlcXVlc3QocmVnX3JlcXVlc3QpOwogfQogCitzdGF0aWMgYm9vbCByZWdfb25seV9zZWxmX21hbmFnZWRfd2lwaHlzKHZvaWQpCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCXN0cnVjdCB3aXBoeSAqd2lwaHk7CisJYm9vbCBzZWxmX21hbmFnZWRfZm91bmQgPSBmYWxzZTsKKworCUFTU0VSVF9SVE5MKCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHsKKwkJd2lwaHkgPSAmcmRldi0+d2lwaHk7CisJCWlmICh3aXBoeS0+cmVndWxhdG9yeV9mbGFncyAmIFJFR1VMQVRPUllfV0lQSFlfU0VMRl9NQU5BR0VEKQorCQkJc2VsZl9tYW5hZ2VkX2ZvdW5kID0gdHJ1ZTsKKwkJZWxzZQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCS8qIG1ha2Ugc3VyZSBhdCBsZWFzdCBvbmUgc2VsZi1tYW5hZ2VkIHdpcGh5IGV4aXN0cyAqLworCXJldHVybiBzZWxmX21hbmFnZWRfZm91bmQ7Cit9CisKIC8qCiAgKiBQcm9jZXNzZXMgcmVndWxhdG9yeSBoaW50cywgdGhpcyBpcyBhbGwgdGhlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV8qCiAgKiBSZWd1bGF0b3J5IGhpbnRzIGNvbWUgb24gYSBmaXJzdCBjb21lIGZpcnN0IHNlcnZlIGJhc2lzIGFuZCB3ZQpAQCAtMjEzOCw2ICsyMTcxLDExIEBACiAKIAlzcGluX3VubG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOwogCisJaWYgKHJlZ19vbmx5X3NlbGZfbWFuYWdlZF93aXBoeXMoKSkgeworCQlyZWdfZnJlZV9yZXF1ZXN0KHJlZ19yZXF1ZXN0KTsKKwkJcmV0dXJuOworCX0KKwogCXJlZ19wcm9jZXNzX2hpbnQocmVnX3JlcXVlc3QpOwogfQogCkBAIC0yMTY1LDExICsyMjAzLDUyIEBACiAJc3Bpbl91bmxvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkIHJlZ19wcm9jZXNzX3NlbGZfbWFuYWdlZF9oaW50cyh2b2lkKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5OworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICp0bXA7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2Q7CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgcmVxdWVzdCA9IHt9OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmY2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KSB7CisJCXdpcGh5ID0gJnJkZXYtPndpcGh5OworCisJCXNwaW5fbG9jaygmcmVnX3JlcXVlc3RzX2xvY2spOworCQlyZWdkID0gcmRldi0+cmVxdWVzdGVkX3JlZ2Q7CisJCXJkZXYtPnJlcXVlc3RlZF9yZWdkID0gTlVMTDsKKwkJc3Bpbl91bmxvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKworCQlpZiAocmVnZCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJdG1wID0gZ2V0X3dpcGh5X3JlZ2RvbSh3aXBoeSk7CisJCXJjdV9hc3NpZ25fcG9pbnRlcih3aXBoeS0+cmVnZCwgcmVnZCk7CisJCXJjdV9mcmVlX3JlZ2RvbSh0bXApOworCisJCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspCisJCQloYW5kbGVfYmFuZF9jdXN0b20od2lwaHksIHdpcGh5LT5iYW5kc1tiYW5kXSwgcmVnZCk7CisKKwkJcmVnX3Byb2Nlc3NfaHRfZmxhZ3Mod2lwaHkpOworCisJCXJlcXVlc3Qud2lwaHlfaWR4ID0gZ2V0X3dpcGh5X2lkeCh3aXBoeSk7CisJCXJlcXVlc3QuYWxwaGEyWzBdID0gcmVnZC0+YWxwaGEyWzBdOworCQlyZXF1ZXN0LmFscGhhMlsxXSA9IHJlZ2QtPmFscGhhMlsxXTsKKwkJcmVxdWVzdC5pbml0aWF0b3IgPSBOTDgwMjExX1JFR0RPTV9TRVRfQllfRFJJVkVSOworCisJCW5sODAyMTFfc2VuZF93aXBoeV9yZWdfY2hhbmdlX2V2ZW50KCZyZXF1ZXN0KTsKKwl9CisKKwlyZWdfY2hlY2tfY2hhbm5lbHMoKTsKK30KKwogc3RhdGljIHZvaWQgcmVnX3RvZG8oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXJ0bmxfbG9jaygpOwogCXJlZ19wcm9jZXNzX3BlbmRpbmdfaGludHMoKTsKIAlyZWdfcHJvY2Vzc19wZW5kaW5nX2JlYWNvbl9oaW50cygpOworCXJlZ19wcm9jZXNzX3NlbGZfbWFuYWdlZF9oaW50cygpOwogCXJ0bmxfdW5sb2NrKCk7CiB9CiAKQEAgLTI0NTAsNiArMjUyOSw4IEBACiAJd29ybGRfYWxwaGEyWzFdID0gY2ZnODAyMTFfd29ybGRfcmVnZG9tLT5hbHBoYTJbMV07CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZjZmc4MDIxMV9yZGV2X2xpc3QsIGxpc3QpIHsKKwkJaWYgKHJkZXYtPndpcGh5LnJlZ3VsYXRvcnlfZmxhZ3MgJiBSRUdVTEFUT1JZX1dJUEhZX1NFTEZfTUFOQUdFRCkKKwkJCWNvbnRpbnVlOwogCQlpZiAocmRldi0+d2lwaHkucmVndWxhdG9yeV9mbGFncyAmIFJFR1VMQVRPUllfQ1VTVE9NX1JFRykKIAkJCXJlc3RvcmVfY3VzdG9tX3JlZ19zZXR0aW5ncygmcmRldi0+d2lwaHkpOwogCX0KQEAgLTI4NTMsMTAgKzI5MzQsNzkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBfX3JlZ3VsYXRvcnlfc2V0X3dpcGh5X3JlZ2Qoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkKQoreworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpwcmV2X3JlZ2Q7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCisJaWYgKFdBUk5fT04oIXdpcGh5IHx8ICFyZCkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKFdBUk4oISh3aXBoeS0+cmVndWxhdG9yeV9mbGFncyAmIFJFR1VMQVRPUllfV0lQSFlfU0VMRl9NQU5BR0VEKSwKKwkJICJ3aXBoeSBzaG91bGQgaGF2ZSBSRUdVTEFUT1JZX1dJUEhZX1NFTEZfTUFOQUdFRFxuIikpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAoV0FSTighaXNfdmFsaWRfcmQocmQpLCAiSW52YWxpZCByZWd1bGF0b3J5IGRvbWFpbiBkZXRlY3RlZFxuIikpIHsKKwkJcHJpbnRfcmVnZG9tYWluX2luZm8ocmQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZWdkID0gcmVnX2NvcHlfcmVnZChyZCk7CisJaWYgKElTX0VSUihyZWdkKSkKKwkJcmV0dXJuIFBUUl9FUlIocmVnZCk7CisKKwlyZGV2ID0gd2lwaHlfdG9fcmRldih3aXBoeSk7CisKKwlzcGluX2xvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKwlwcmV2X3JlZ2QgPSByZGV2LT5yZXF1ZXN0ZWRfcmVnZDsKKwlyZGV2LT5yZXF1ZXN0ZWRfcmVnZCA9IHJlZ2Q7CisJc3Bpbl91bmxvY2soJnJlZ19yZXF1ZXN0c19sb2NrKTsKKworCWtmcmVlKHByZXZfcmVnZCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCByZWd1bGF0b3J5X3NldF93aXBoeV9yZWdkKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpCit7CisJaW50IHJldCA9IF9fcmVndWxhdG9yeV9zZXRfd2lwaHlfcmVnZCh3aXBoeSwgcmQpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNjaGVkdWxlX3dvcmsoJnJlZ193b3JrKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wocmVndWxhdG9yeV9zZXRfd2lwaHlfcmVnZCk7CisKK2ludCByZWd1bGF0b3J5X3NldF93aXBoeV9yZWdkX3N5bmNfcnRubChzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpCit7CisJaW50IHJldDsKKworCUFTU0VSVF9SVE5MKCk7CisKKwlyZXQgPSBfX3JlZ3VsYXRvcnlfc2V0X3dpcGh5X3JlZ2Qod2lwaHksIHJkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogcHJvY2VzcyB0aGUgcmVxdWVzdCBpbW1lZGlhdGVseSAqLworCXJlZ19wcm9jZXNzX3NlbGZfbWFuYWdlZF9oaW50cygpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChyZWd1bGF0b3J5X3NldF93aXBoeV9yZWdkX3N5bmNfcnRubCk7CisKIHZvaWQgd2lwaHlfcmVndWxhdG9yeV9yZWdpc3RlcihzdHJ1Y3Qgd2lwaHkgKndpcGh5KQogewogCXN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKmxyOwogCisJLyogc2VsZi1tYW5hZ2VkIGRldmljZXMgaWdub3JlIGV4dGVybmFsIGhpbnRzICovCisJaWYgKHdpcGh5LT5yZWd1bGF0b3J5X2ZsYWdzICYgUkVHVUxBVE9SWV9XSVBIWV9TRUxGX01BTkFHRUQpCisJCXdpcGh5LT5yZWd1bGF0b3J5X2ZsYWdzIHw9IFJFR1VMQVRPUllfRElTQUJMRV9CRUFDT05fSElOVFMgfAorCQkJCQkgICBSRUdVTEFUT1JZX0NPVU5UUllfSUVfSUdOT1JFOworCiAJaWYgKCFyZWdfZGV2X2lnbm9yZV9jZWxsX2hpbnQod2lwaHkpKQogCQlyZWdfbnVtX2RldnNfc3VwcG9ydF9iYXNlaGludCsrOwogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvcmVnLmggYi9uZXQvd2lyZWxlc3MvcmVnLmgKaW5kZXggNWU0ODAzMWMuLjRiNDVkNmUgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZWcuaAorKysgYi9uZXQvd2lyZWxlc3MvcmVnLmgKQEAgLTM4LDYgKzM4LDcgQEAKIAkJCQkgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlICpydWxlKTsKIAogYm9vbCByZWdfbGFzdF9yZXF1ZXN0X2NlbGxfYmFzZSh2b2lkKTsKK2NvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpnZXRfd2lwaHlfcmVnZG9tKHN0cnVjdCB3aXBoeSAqd2lwaHkpOwogCiAvKioKICAqIHJlZ3VsYXRvcnlfaGludF9mb3VuZF9iZWFjb24gLSBoaW50cyBhIGJlYWNvbiB3YXMgZm91bmQgb24gYSBjaGFubmVsCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwppbmRleCBiZGEzOWYxLi5jNzA1YzNlIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvc2Nhbi5jCisrKyBiL25ldC93aXJlbGVzcy9zY2FuLmMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCiAJcnRubF9sb2NrKCk7CiAKLQlyZXF1ZXN0ID0gcmRldi0+c2NoZWRfc2Nhbl9yZXE7CisJcmVxdWVzdCA9IHJ0bmxfZGVyZWZlcmVuY2UocmRldi0+c2NoZWRfc2Nhbl9yZXEpOwogCiAJLyogd2UgZG9uJ3QgaGF2ZSBzY2hlZF9zY2FuX3JlcSBhbnltb3JlIGlmIHRoZSBzY2FuIGlzIHN0b3BwaW5nICovCiAJaWYgKHJlcXVlc3QpIHsKQEAgLTI3OSw3ICsyNzksOCBAQAogewogCXRyYWNlX2NmZzgwMjExX3NjaGVkX3NjYW5fcmVzdWx0cyh3aXBoeSk7CiAJLyogaWdub3JlIGlmIHdlJ3JlIG5vdCBzY2FubmluZyAqLwotCWlmICh3aXBoeV90b19yZGV2KHdpcGh5KS0+c2NoZWRfc2Nhbl9yZXEpCisKKwlpZiAocmN1X2FjY2Vzc19wb2ludGVyKHdpcGh5X3RvX3JkZXYod2lwaHkpLT5zY2hlZF9zY2FuX3JlcSkpCiAJCXF1ZXVlX3dvcmsoY2ZnODAyMTFfd3EsCiAJCQkgICAmd2lwaHlfdG9fcmRldih3aXBoeSktPnNjaGVkX3NjYW5fcmVzdWx0c193ayk7CiB9CkBAIC0zMDgsNiArMzA5LDcgQEAKIGludCBfX2NmZzgwMjExX3N0b3Bfc2NoZWRfc2NhbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCQkgICAgICAgYm9vbCBkcml2ZXJfaW5pdGlhdGVkKQogeworCXN0cnVjdCBjZmc4MDIxMV9zY2hlZF9zY2FuX3JlcXVlc3QgKnNjaGVkX3NjYW5fcmVxOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAKIAlBU1NFUlRfUlROTCgpOwpAQCAtMzE1LDcgKzMxNyw4IEBACiAJaWYgKCFyZGV2LT5zY2hlZF9zY2FuX3JlcSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQlkZXYgPSByZGV2LT5zY2hlZF9zY2FuX3JlcS0+ZGV2OworCXNjaGVkX3NjYW5fcmVxID0gcnRubF9kZXJlZmVyZW5jZShyZGV2LT5zY2hlZF9zY2FuX3JlcSk7CisJZGV2ID0gc2NoZWRfc2Nhbl9yZXEtPmRldjsKIAogCWlmICghZHJpdmVyX2luaXRpYXRlZCkgewogCQlpbnQgZXJyID0gcmRldl9zY2hlZF9zY2FuX3N0b3AocmRldiwgZGV2KTsKQEAgLTMyNSw4ICszMjgsOCBAQAogCiAJbmw4MDIxMV9zZW5kX3NjaGVkX3NjYW4ocmRldiwgZGV2LCBOTDgwMjExX0NNRF9TQ0hFRF9TQ0FOX1NUT1BQRUQpOwogCi0Ja2ZyZWUocmRldi0+c2NoZWRfc2Nhbl9yZXEpOwotCXJkZXYtPnNjaGVkX3NjYW5fcmVxID0gTlVMTDsKKwlSQ1VfSU5JVF9QT0lOVEVSKHJkZXYtPnNjaGVkX3NjYW5fcmVxLCBOVUxMKTsKKwlrZnJlZV9yY3Uoc2NoZWRfc2Nhbl9yZXEsIHJjdV9oZWFkKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3RyYWNlLmggYi9uZXQvd2lyZWxlc3MvdHJhY2UuaAppbmRleCBhZDM4OTEwLi5iMTdiMzY5IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvdHJhY2UuaAorKysgYi9uZXQvd2lyZWxlc3MvdHJhY2UuaApAQCAtMTYwNCwxMSArMTYwNCwxMiBAQAogCQlXSVBIWV9FTlRSWQogCQlDSEFOX0VOVFJZCiAJCV9fZmllbGQoaW50LCByZXQpCi0JCV9fZmllbGQodTY0LCBjaGFubmVsX3RpbWUpCi0JCV9fZmllbGQodTY0LCBjaGFubmVsX3RpbWVfYnVzeSkKLQkJX19maWVsZCh1NjQsIGNoYW5uZWxfdGltZV9leHRfYnVzeSkKLQkJX19maWVsZCh1NjQsIGNoYW5uZWxfdGltZV9yeCkKLQkJX19maWVsZCh1NjQsIGNoYW5uZWxfdGltZV90eCkKKwkJX19maWVsZCh1NjQsIHRpbWUpCisJCV9fZmllbGQodTY0LCB0aW1lX2J1c3kpCisJCV9fZmllbGQodTY0LCB0aW1lX2V4dF9idXN5KQorCQlfX2ZpZWxkKHU2NCwgdGltZV9yeCkKKwkJX19maWVsZCh1NjQsIHRpbWVfdHgpCisJCV9fZmllbGQodTY0LCB0aW1lX3NjYW4pCiAJCV9fZmllbGQodTMyLCBmaWxsZWQpCiAJCV9fZmllbGQoczgsIG5vaXNlKQogCSksCkBAIC0xNjE2LDIyICsxNjE3LDI0IEBACiAJCVdJUEhZX0FTU0lHTjsKIAkJQ0hBTl9BU1NJR04oaW5mby0+Y2hhbm5lbCk7CiAJCV9fZW50cnktPnJldCA9IHJldDsKLQkJX19lbnRyeS0+Y2hhbm5lbF90aW1lID0gaW5mby0+Y2hhbm5lbF90aW1lOwotCQlfX2VudHJ5LT5jaGFubmVsX3RpbWVfYnVzeSA9IGluZm8tPmNoYW5uZWxfdGltZV9idXN5OwotCQlfX2VudHJ5LT5jaGFubmVsX3RpbWVfZXh0X2J1c3kgPSBpbmZvLT5jaGFubmVsX3RpbWVfZXh0X2J1c3k7Ci0JCV9fZW50cnktPmNoYW5uZWxfdGltZV9yeCA9IGluZm8tPmNoYW5uZWxfdGltZV9yeDsKLQkJX19lbnRyeS0+Y2hhbm5lbF90aW1lX3R4ID0gaW5mby0+Y2hhbm5lbF90aW1lX3R4OworCQlfX2VudHJ5LT50aW1lID0gaW5mby0+dGltZTsKKwkJX19lbnRyeS0+dGltZV9idXN5ID0gaW5mby0+dGltZV9idXN5OworCQlfX2VudHJ5LT50aW1lX2V4dF9idXN5ID0gaW5mby0+dGltZV9leHRfYnVzeTsKKwkJX19lbnRyeS0+dGltZV9yeCA9IGluZm8tPnRpbWVfcng7CisJCV9fZW50cnktPnRpbWVfdHggPSBpbmZvLT50aW1lX3R4OworCQlfX2VudHJ5LT50aW1lX3NjYW4gPSBpbmZvLT50aW1lX3NjYW47CiAJCV9fZW50cnktPmZpbGxlZCA9IGluZm8tPmZpbGxlZDsKIAkJX19lbnRyeS0+bm9pc2UgPSBpbmZvLT5ub2lzZTsKIAkpLAogCVRQX3ByaW50ayhXSVBIWV9QUl9GTVQgIiwgcmV0dXJuZWQ6ICVkLCAiIENIQU5fUFJfRk1UCiAJCSAgIiwgY2hhbm5lbCB0aW1lOiAlbGx1LCBjaGFubmVsIHRpbWUgYnVzeTogJWxsdSwgIgogCQkgICJjaGFubmVsIHRpbWUgZXh0ZW5zaW9uIGJ1c3k6ICVsbHUsIGNoYW5uZWwgdGltZSByeDogJWxsdSwgIgotCQkgICJjaGFubmVsIHRpbWUgdHg6ICVsbHUsIGZpbGxlZDogJXUsIG5vaXNlOiAlZCIsCisJCSAgImNoYW5uZWwgdGltZSB0eDogJWxsdSwgc2NhbiB0aW1lOiAlbGx1LCBmaWxsZWQ6ICV1LCBub2lzZTogJWQiLAogCQkgIFdJUEhZX1BSX0FSRywgX19lbnRyeS0+cmV0LCBDSEFOX1BSX0FSRywKLQkJICBfX2VudHJ5LT5jaGFubmVsX3RpbWUsIF9fZW50cnktPmNoYW5uZWxfdGltZV9idXN5LAotCQkgIF9fZW50cnktPmNoYW5uZWxfdGltZV9leHRfYnVzeSwgX19lbnRyeS0+Y2hhbm5lbF90aW1lX3J4LAotCQkgIF9fZW50cnktPmNoYW5uZWxfdGltZV90eCwgX19lbnRyeS0+ZmlsbGVkLCBfX2VudHJ5LT5ub2lzZSkKKwkJICBfX2VudHJ5LT50aW1lLCBfX2VudHJ5LT50aW1lX2J1c3ksCisJCSAgX19lbnRyeS0+dGltZV9leHRfYnVzeSwgX19lbnRyeS0+dGltZV9yeCwKKwkJICBfX2VudHJ5LT50aW1lX3R4LCBfX2VudHJ5LT50aW1lX3NjYW4sCisJCSAgX19lbnRyeS0+ZmlsbGVkLCBfX2VudHJ5LT5ub2lzZSkKICk7CiAKIFRSQUNFX0VWRU5UKHJkZXZfdGRsc19vcGVyLApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3V0aWwuYyBiL25ldC93aXJlbGVzcy91dGlsLmMKaW5kZXggZDBhYzc5NS4uNjkwM2RiZCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3V0aWwuYworKysgYi9uZXQvd2lyZWxlc3MvdXRpbC5jCkBAIC0yMjcsMTggKzIyNywzMiBAQAogCWlmIChwYWlyd2lzZSAmJiAhbWFjX2FkZHIpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyoKLQkgKiBEaXNhbGxvdyBwYWlyd2lzZSBrZXlzIHdpdGggbm9uLXplcm8gaW5kZXggdW5sZXNzIGl0J3MgV0VQCi0JICogb3IgYSB2ZW5kb3Igc3BlY2lmaWMgY2lwaGVyIChiZWNhdXNlIGN1cnJlbnQgZGVwbG95bWVudHMgdXNlCi0JICogcGFpcndpc2UgV0VQIGtleXMgd2l0aCBub24temVybyBpbmRpY2VzIGFuZCBmb3IgdmVuZG9yIHNwZWNpZmljCi0JICogY2lwaGVycyB0aGlzIHNob3VsZCBiZSB2YWxpZGF0ZWQgaW4gdGhlIGRyaXZlciBvciBoYXJkd2FyZSBsZXZlbAotCSAqIC0gYnV0IDgwMi4xMWkgY2xlYXJseSBzcGVjaWZpZXMgdG8gdXNlIHplcm8pCi0JICovCi0JaWYgKHBhaXJ3aXNlICYmIGtleV9pZHggJiYKLQkgICAgKChwYXJhbXMtPmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9US0lQKSB8fAotCSAgICAgKHBhcmFtcy0+Y2lwaGVyID09IFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVApIHx8Ci0JICAgICAocGFyYW1zLT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUMpKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoIChwYXJhbXMtPmNpcGhlcikgeworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfVEtJUDoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0NDTVA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QXzI1NjoKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVA6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QXzI1NjoKKwkJLyogRGlzYWxsb3cgcGFpcndpc2Uga2V5cyB3aXRoIG5vbi16ZXJvIGluZGV4IHVubGVzcyBpdCdzIFdFUAorCQkgKiBvciBhIHZlbmRvciBzcGVjaWZpYyBjaXBoZXIgKGJlY2F1c2UgY3VycmVudCBkZXBsb3ltZW50cyB1c2UKKwkJICogcGFpcndpc2UgV0VQIGtleXMgd2l0aCBub24temVybyBpbmRpY2VzIGFuZCBmb3IgdmVuZG9yCisJCSAqIHNwZWNpZmljIGNpcGhlcnMgdGhpcyBzaG91bGQgYmUgdmFsaWRhdGVkIGluIHRoZSBkcml2ZXIgb3IKKwkJICogaGFyZHdhcmUgbGV2ZWwgLSBidXQgODAyLjExaSBjbGVhcmx5IHNwZWNpZmllcyB0byB1c2UgemVybykKKwkJICovCisJCWlmIChwYWlyd2lzZSAmJiBrZXlfaWR4KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfQ01BQ18yNTY6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18xMjg6CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18yNTY6CisJCS8qIERpc2FsbG93IEJJUCAoZ3JvdXAtb25seSkgY2lwaGVyIGFzIHBhaXJ3aXNlIGNpcGhlciAqLworCQlpZiAocGFpcndpc2UpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQogCiAJc3dpdGNoIChwYXJhbXMtPmNpcGhlcikgewogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CkBAIC0yNTMsNiArMjY3LDE4IEBACiAJCWlmIChwYXJhbXMtPmtleV9sZW4gIT0gV0xBTl9LRVlfTEVOX0NDTVApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QXzI1NjoKKwkJaWYgKHBhcmFtcy0+a2V5X2xlbiAhPSBXTEFOX0tFWV9MRU5fQ0NNUF8yNTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QOgorCQlpZiAocGFyYW1zLT5rZXlfbGVuICE9IFdMQU5fS0VZX0xFTl9HQ01QKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfR0NNUF8yNTY6CisJCWlmIChwYXJhbXMtPmtleV9sZW4gIT0gV0xBTl9LRVlfTEVOX0dDTVBfMjU2KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOwogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQMTA0OgogCQlpZiAocGFyYW1zLT5rZXlfbGVuICE9IFdMQU5fS0VZX0xFTl9XRVAxMDQpCiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI2MSw2ICsyODcsMTggQEAKIAkJaWYgKHBhcmFtcy0+a2V5X2xlbiAhPSBXTEFOX0tFWV9MRU5fQUVTX0NNQUMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfQ01BQ18yNTY6CisJCWlmIChwYXJhbXMtPmtleV9sZW4gIT0gV0xBTl9LRVlfTEVOX0JJUF9DTUFDXzI1NikKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9HTUFDXzEyODoKKwkJaWYgKHBhcmFtcy0+a2V5X2xlbiAhPSBXTEFOX0tFWV9MRU5fQklQX0dNQUNfMTI4KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0dNQUNfMjU2OgorCQlpZiAocGFyYW1zLT5rZXlfbGVuICE9IFdMQU5fS0VZX0xFTl9CSVBfR01BQ18yNTYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyoKIAkJICogV2UgZG9uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB0aGlzIGFsZ29yaXRobSwKQEAgLTI4MCw3ICszMTgsMTMgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6CiAJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQ0NNUDoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QXzI1NjoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9HQ01QOgorCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVBfMjU2OgogCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0FFU19DTUFDOgorCQljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0JJUF9DTUFDXzI1NjoKKwkJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9CSVBfR01BQ18xMjg6CisJCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQklQX0dNQUNfMjU2OgogCQkJaWYgKHBhcmFtcy0+c2VxX2xlbiAhPSA2KQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJYnJlYWs7CkBAIC0zMDgsNiArMzUyLDEyIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWlmIChpZWVlODAyMTFfaXNfbWdtdChmYykpIHsKKwkJaWYgKGllZWU4MDIxMV9oYXNfb3JkZXIoZmMpKQorCQkJaGRybGVuICs9IElFRUU4MDIxMV9IVF9DVExfTEVOOworCQlnb3RvIG91dDsKKwl9CisKIAlpZiAoaWVlZTgwMjExX2lzX2N0bChmYykpIHsKIAkJLyoKIAkJICogQUNLIGFuZCBDVFMgYXJlIDEwIGJ5dGVzLCBhbGwgb3RoZXJzIDE2LiBUbyBzZWUgaG93CkBAIC03MDgsOCArNzU4LDggQEAKIAlpZiAoc2tiLT5wcmlvcml0eSA+PSAyNTYgJiYgc2tiLT5wcmlvcml0eSA8PSAyNjMpCiAJCXJldHVybiBza2ItPnByaW9yaXR5IC0gMjU2OwogCi0JaWYgKHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgewotCQl2bGFuX3ByaW9yaXR5ID0gKHZsYW5fdHhfdGFnX2dldChza2IpICYgVkxBTl9QUklPX01BU0spCisJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpIHsKKwkJdmxhbl9wcmlvcml0eSA9IChza2Jfdmxhbl90YWdfZ2V0KHNrYikgJiBWTEFOX1BSSU9fTUFTSykKIAkJCT4+IFZMQU5fUFJJT19TSElGVDsKIAkJaWYgKHZsYW5fcHJpb3JpdHkgPiAwKQogCQkJcmV0dXJuIHZsYW5fcHJpb3JpdHk7CkBAIC0xMDczLDEwICsxMTIzLDI0IEBACiAJaWYgKFdBUk5fT05fT05DRShyYXRlLT5tY3MgPiA5KSkKIAkJcmV0dXJuIDA7CiAKLQlpZHggPSByYXRlLT5mbGFncyAmIChSQVRFX0lORk9fRkxBR1NfMTYwX01IWl9XSURUSCB8Ci0JCQkgICAgIFJBVEVfSU5GT19GTEFHU184MFA4MF9NSFpfV0lEVEgpID8gMyA6Ci0JCSAgcmF0ZS0+ZmxhZ3MgJiBSQVRFX0lORk9fRkxBR1NfODBfTUhaX1dJRFRIID8gMiA6Ci0JCSAgcmF0ZS0+ZmxhZ3MgJiBSQVRFX0lORk9fRkxBR1NfNDBfTUhaX1dJRFRIID8gMSA6IDA7CisJc3dpdGNoIChyYXRlLT5idykgeworCWNhc2UgUkFURV9JTkZPX0JXXzE2MDoKKwkJaWR4ID0gMzsKKwkJYnJlYWs7CisJY2FzZSBSQVRFX0lORk9fQldfODA6CisJCWlkeCA9IDI7CisJCWJyZWFrOworCWNhc2UgUkFURV9JTkZPX0JXXzQwOgorCQlpZHggPSAxOworCQlicmVhazsKKwljYXNlIFJBVEVfSU5GT19CV181OgorCWNhc2UgUkFURV9JTkZPX0JXXzEwOgorCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgUkFURV9JTkZPX0JXXzIwOgorCQlpZHggPSAwOworCX0KIAogCWJpdHJhdGUgPSBiYXNlW2lkeF1bcmF0ZS0+bWNzXTsKIAliaXRyYXRlICo9IHJhdGUtPm5zczsKQEAgLTExMDcsOCArMTE3MSw3IEBACiAJbW9kdWxhdGlvbiA9IHJhdGUtPm1jcyAmIDc7CiAJc3RyZWFtcyA9IChyYXRlLT5tY3MgPj4gMykgKyAxOwogCi0JYml0cmF0ZSA9IChyYXRlLT5mbGFncyAmIFJBVEVfSU5GT19GTEFHU180MF9NSFpfV0lEVEgpID8KLQkJCTEzNTAwMDAwIDogNjUwMDAwMDsKKwliaXRyYXRlID0gKHJhdGUtPmJ3ID09IFJBVEVfSU5GT19CV180MCkgPyAxMzUwMDAwMCA6IDY1MDAwMDA7CiAKIAlpZiAobW9kdWxhdGlvbiA8IDQpCiAJCWJpdHJhdGUgKj0gKG1vZHVsYXRpb24gKyAxKTsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jIGIvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKaW5kZXggMGY0Nzk0OC4uNWIyNGQzOSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKKysrIGIvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKQEAgLTEzMDAsNyArMTMwMCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmICghKHNpbmZvLmZpbGxlZCAmIFNUQVRJT05fSU5GT19UWF9CSVRSQVRFKSkKKwlpZiAoIShzaW5mby5maWxsZWQgJiBCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9CSVRSQVRFKSkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXJhdGUtPnZhbHVlID0gMTAwMDAwICogY2ZnODAyMTFfY2FsY3VsYXRlX2JpdHJhdGUoJnNpbmZvLnR4cmF0ZSk7CkBAIC0xMzQwLDcgKzEzNDAsNyBAQAogCiAJc3dpdGNoIChyZGV2LT53aXBoeS5zaWduYWxfdHlwZSkgewogCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfTUJNOgotCQlpZiAoc2luZm8uZmlsbGVkICYgU1RBVElPTl9JTkZPX1NJR05BTCkgeworCQlpZiAoc2luZm8uZmlsbGVkICYgQklUKE5MODAyMTFfU1RBX0lORk9fU0lHTkFMKSkgewogCQkJaW50IHNpZyA9IHNpbmZvLnNpZ25hbDsKIAkJCXdzdGF0cy5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9MRVZFTF9VUERBVEVEOwogCQkJd3N0YXRzLnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX1FVQUxfVVBEQVRFRDsKQEAgLTEzNTQsNyArMTM1NCw3IEBACiAJCQlicmVhazsKIAkJfQogCWNhc2UgQ0ZHODAyMTFfU0lHTkFMX1RZUEVfVU5TUEVDOgotCQlpZiAoc2luZm8uZmlsbGVkICYgU1RBVElPTl9JTkZPX1NJR05BTCkgeworCQlpZiAoc2luZm8uZmlsbGVkICYgQklUKE5MODAyMTFfU1RBX0lORk9fU0lHTkFMKSkgewogCQkJd3N0YXRzLnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX0xFVkVMX1VQREFURUQ7CiAJCQl3c3RhdHMucXVhbC51cGRhdGVkIHw9IElXX1FVQUxfUVVBTF9VUERBVEVEOwogCQkJd3N0YXRzLnF1YWwubGV2ZWwgPSBzaW5mby5zaWduYWw7CkBAIC0xMzY3LDkgKzEzNjcsOSBAQAogCX0KIAogCXdzdGF0cy5xdWFsLnVwZGF0ZWQgfD0gSVdfUVVBTF9OT0lTRV9JTlZBTElEOwotCWlmIChzaW5mby5maWxsZWQgJiBTVEFUSU9OX0lORk9fUlhfRFJPUF9NSVNDKQorCWlmIChzaW5mby5maWxsZWQgJiBCSVQoTkw4MDIxMV9TVEFfSU5GT19SWF9EUk9QX01JU0MpKQogCQl3c3RhdHMuZGlzY2FyZC5taXNjID0gc2luZm8ucnhfZHJvcHBlZF9taXNjOwotCWlmIChzaW5mby5maWxsZWQgJiBTVEFUSU9OX0lORk9fVFhfRkFJTEVEKQorCWlmIChzaW5mby5maWxsZWQgJiBCSVQoTkw4MDIxMV9TVEFfSU5GT19UWF9GQUlMRUQpKQogCQl3c3RhdHMuZGlzY2FyZC5yZXRyaWVzID0gc2luZm8udHhfZmFpbGVkOwogCiAJcmV0dXJuICZ3c3RhdHM7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2FsZ28uYyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCmluZGV4IGRlYmU3MzMuLjEyZTgyYTUgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fYWxnby5jCisrKyBiL25ldC94ZnJtL3hmcm1fYWxnby5jCkBAIC01NjEsMTEgKzU2MSw2IEBACiB9LAogfTsKIAotc3RhdGljIGlubGluZSBpbnQgYWVhZF9lbnRyaWVzKHZvaWQpCi17Ci0JcmV0dXJuIEFSUkFZX1NJWkUoYWVhZF9saXN0KTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgYWFsZ19lbnRyaWVzKHZvaWQpCiB7CiAJcmV0dXJuIEFSUkFZX1NJWkUoYWFsZ19saXN0KTsKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggODEyODU5NC4uN2RlMmVkOSAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTEwMTksNyArMTAxOSw4IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB4ZnJtX3NldF9zcGRpbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbmxoLApAQCAtMTEyMSw3ICsxMTIyLDggQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHhmcm1fZ2V0X3NhZGluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsCkBAIC0xODQyLDcgKzE4NDQsOCBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2NhbmNlbDsKIAotCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOworCW5sbXNnX2VuZChza2IsIG5saCk7CisJcmV0dXJuIDA7CiAKIG91dF9jYW5jZWw6CiAJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKQEAgLTIyODIsNyArMjI4NSw4IEBACiAJCQlnb3RvIG91dF9jYW5jZWw7CiAJfQogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIAogb3V0X2NhbmNlbDoKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwpAQCAtMjQ5MCw3ICsyNDk0LDggQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB4ZnJtX2V4cF9zdGF0ZV9ub3RpZnkoc3RydWN0IHhmcm1fc3RhdGUgKngsIGNvbnN0IHN0cnVjdCBrbV9ldmVudCAqYykKQEAgLTI3MTIsNyArMjcxNyw4IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB4ZnJtX3NlbmRfYWNxdWlyZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdG1wbCAqeHQsCkBAIC0yODI3LDcgKzI4MzMsOCBAQAogCX0KIAl1cGUtPmhhcmQgPSAhIWhhcmQ7CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHhmcm1fZXhwX3BvbGljeV9ub3RpZnkoc3RydWN0IHhmcm1fcG9saWN5ICp4cCwgaW50IGRpciwgY29uc3Qgc3RydWN0IGttX2V2ZW50ICpjKQpAQCAtMjk4Niw3ICsyOTkzLDggQEAKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9Ci0JcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CisJbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB4ZnJtX3NlbmRfcmVwb3J0KHN0cnVjdCBuZXQgKm5ldCwgdTggcHJvdG8sCkBAIC0zMDMxLDcgKzMwMzksOCBAQAogCXVtLT5vbGRfc3BvcnQgPSB4LT5lbmNhcC0+ZW5jYXBfc3BvcnQ7CiAJdW0tPnJlcWlkID0geC0+cHJvcHMucmVxaWQ7CiAKLQlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKwlubG1zZ19lbmQoc2tiLCBubGgpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHhmcm1fc2VuZF9tYXBwaW5nKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB4ZnJtX2FkZHJlc3NfdCAqaXBhZGRyLApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9LY29uZmlnIGIvc2FtcGxlcy9LY29uZmlnCmluZGV4IDYxODFjMmMuLjIyNGViYjQgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvS2NvbmZpZworKysgYi9zYW1wbGVzL0tjb25maWcKQEAgLTYzLDQgKzYzLDExIEBACiAJICB0byBjb21tdW5pY2F0ZSB3aXRoIGFuIEFNUC1jb25maWd1cmVkIHJlbW90ZSBwcm9jZXNzb3Igb3ZlcgogCSAgdGhlIHJwbXNnIGJ1cy4KIAorY29uZmlnIFNBTVBMRV9MSVZFUEFUQ0gKKwl0cmlzdGF0ZSAiQnVpbGQgbGl2ZSBwYXRjaGluZyBzYW1wbGUgLS0gbG9hZGFibGUgbW9kdWxlcyBvbmx5IgorCWRlcGVuZHMgb24gTElWRVBBVENIICYmIG0KKwloZWxwCisJICBCdWlsZHMgYSBzYW1wbGUgbGl2ZSBwYXRjaCB0aGF0IHJlcGxhY2VzIHRoZSBwcm9jZnMgaGFuZGxlcgorCSAgZm9yIC9wcm9jL2NtZGxpbmUgdG8gcHJpbnQgInRoaXMgaGFzIGJlZW4gbGl2ZSBwYXRjaGVkIi4KKwogZW5kaWYgIyBTQU1QTEVTCmRpZmYgLS1naXQgYS9zYW1wbGVzL01ha2VmaWxlIGIvc2FtcGxlcy9NYWtlZmlsZQppbmRleCAxYTYwYzYyLi5mMDAyNTdiIDEwMDY0NAotLS0gYS9zYW1wbGVzL01ha2VmaWxlCisrKyBiL3NhbXBsZXMvTWFrZWZpbGUKQEAgLTEsNCArMSw0IEBACiAjIE1ha2VmaWxlIGZvciBMaW51eCBzYW1wbGVzIGNvZGUKIAotb2JqLSQoQ09ORklHX1NBTVBMRVMpCSs9IGtvYmplY3QvIGtwcm9iZXMvIHRyYWNlX2V2ZW50cy8gXAorb2JqLSQoQ09ORklHX1NBTVBMRVMpCSs9IGtvYmplY3QvIGtwcm9iZXMvIHRyYWNlX2V2ZW50cy8gbGl2ZXBhdGNoLyBcCiAJCQkgICBod19icmVha3BvaW50LyBrZmlmby8ga2RiLyBoaWRyYXcvIHJwbXNnLyBzZWNjb21wLwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9icGYvdGVzdF9tYXBzLmMgYi9zYW1wbGVzL2JwZi90ZXN0X21hcHMuYwppbmRleCBlMjg2YjQyLi42Mjk5ZWU5IDEwMDY0NAotLS0gYS9zYW1wbGVzL2JwZi90ZXN0X21hcHMuYworKysgYi9zYW1wbGVzL2JwZi90ZXN0X21hcHMuYwpAQCAtNjksOSArNjksOSBAQAogCiAJLyogaXRlcmF0ZSBvdmVyIHR3byBlbGVtZW50cyAqLwogCWFzc2VydChicGZfZ2V0X25leHRfa2V5KG1hcF9mZCwgJmtleSwgJm5leHRfa2V5KSA9PSAwICYmCi0JICAgICAgIG5leHRfa2V5ID09IDIpOworCSAgICAgICAobmV4dF9rZXkgPT0gMSB8fCBuZXh0X2tleSA9PSAyKSk7CiAJYXNzZXJ0KGJwZl9nZXRfbmV4dF9rZXkobWFwX2ZkLCAmbmV4dF9rZXksICZuZXh0X2tleSkgPT0gMCAmJgotCSAgICAgICBuZXh0X2tleSA9PSAxKTsKKwkgICAgICAgKG5leHRfa2V5ID09IDEgfHwgbmV4dF9rZXkgPT0gMikpOwogCWFzc2VydChicGZfZ2V0X25leHRfa2V5KG1hcF9mZCwgJm5leHRfa2V5LCAmbmV4dF9rZXkpID09IC0xICYmCiAJICAgICAgIGVycm5vID09IEVOT0VOVCk7CiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGl2ZXBhdGNoL01ha2VmaWxlIGIvc2FtcGxlcy9saXZlcGF0Y2gvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAzMTlkN2VhCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9saXZlcGF0Y2gvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLSQoQ09ORklHX1NBTVBMRV9MSVZFUEFUQ0gpICs9IGxpdmVwYXRjaC1zYW1wbGUubwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9saXZlcGF0Y2gvbGl2ZXBhdGNoLXNhbXBsZS5jIGIvc2FtcGxlcy9saXZlcGF0Y2gvbGl2ZXBhdGNoLXNhbXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOGM4NjEKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xpdmVwYXRjaC9saXZlcGF0Y2gtc2FtcGxlLmMKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIGxpdmVwYXRjaC1zYW1wbGUuYyAtIEtlcm5lbCBMaXZlIFBhdGNoaW5nIFNhbXBsZSBNb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgU2V0aCBKZW5uaW5ncyA8c2plbm5pbmdAcmVkaGF0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpdmVwYXRjaC5oPgorCisvKgorICogVGhpcyAoZHVtYikgbGl2ZSBwYXRjaCBvdmVycmlkZXMgdGhlIGZ1bmN0aW9uIHRoYXQgcHJpbnRzIHRoZQorICoga2VybmVsIGJvb3QgY21kbGluZSB3aGVuIC9wcm9jL2NtZGxpbmUgaXMgcmVhZC4KKyAqCisgKiBFeGFtcGxlOgorICoKKyAqICQgY2F0IC9wcm9jL2NtZGxpbmUKKyAqIDx5b3VyIGNtZGxpbmU+CisgKgorICogJCBpbnNtb2QgbGl2ZXBhdGNoLXNhbXBsZS5rbworICogJCBjYXQgL3Byb2MvY21kbGluZQorICogdGhpcyBoYXMgYmVlbiBsaXZlIHBhdGNoZWQKKyAqCisgKiAkIGVjaG8gMCA+IC9zeXMva2VybmVsL2xpdmVwYXRjaC9saXZlcGF0Y2hfc2FtcGxlL2VuYWJsZWQKKyAqICQgY2F0IC9wcm9jL2NtZGxpbmUKKyAqIDx5b3VyIGNtZGxpbmU+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CitzdGF0aWMgaW50IGxpdmVwYXRjaF9jbWRsaW5lX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc2VxX3ByaW50ZihtLCAiJXNcbiIsICJ0aGlzIGhhcyBiZWVuIGxpdmUgcGF0Y2hlZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGtscF9mdW5jIGZ1bmNzW10gPSB7CisJeworCQkub2xkX25hbWUgPSAiY21kbGluZV9wcm9jX3Nob3ciLAorCQkubmV3X2Z1bmMgPSBsaXZlcGF0Y2hfY21kbGluZV9wcm9jX3Nob3csCisJfSwgeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGtscF9vYmplY3Qgb2Jqc1tdID0geworCXsKKwkJLyogbmFtZSBiZWluZyBOVUxMIG1lYW5zIHZtbGludXggKi8KKwkJLmZ1bmNzID0gZnVuY3MsCisJfSwgeyB9Cit9OworCitzdGF0aWMgc3RydWN0IGtscF9wYXRjaCBwYXRjaCA9IHsKKwkubW9kID0gVEhJU19NT0RVTEUsCisJLm9ianMgPSBvYmpzLAorfTsKKworc3RhdGljIGludCBsaXZlcGF0Y2hfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBrbHBfcmVnaXN0ZXJfcGF0Y2goJnBhdGNoKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldCA9IGtscF9lbmFibGVfcGF0Y2goJnBhdGNoKTsKKwlpZiAocmV0KSB7CisJCVdBUk5fT04oa2xwX3VucmVnaXN0ZXJfcGF0Y2goJnBhdGNoKSk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsaXZlcGF0Y2hfZXhpdCh2b2lkKQoreworCVdBUk5fT04oa2xwX2Rpc2FibGVfcGF0Y2goJnBhdGNoKSk7CisJV0FSTl9PTihrbHBfdW5yZWdpc3Rlcl9wYXRjaCgmcGF0Y2gpKTsKK30KKworbW9kdWxlX2luaXQobGl2ZXBhdGNoX2luaXQpOworbW9kdWxlX2V4aXQobGl2ZXBhdGNoX2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy90cmFjZV9ldmVudHMvdHJhY2UtZXZlbnRzLXNhbXBsZS5jIGIvc2FtcGxlcy90cmFjZV9ldmVudHMvdHJhY2UtZXZlbnRzLXNhbXBsZS5jCmluZGV4IGFhYmM0ZTkuLjg4MGE3ZDEgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMvdHJhY2VfZXZlbnRzL3RyYWNlLWV2ZW50cy1zYW1wbGUuYworKysgYi9zYW1wbGVzL3RyYWNlX2V2ZW50cy90cmFjZS1ldmVudHMtc2FtcGxlLmMKQEAgLTEwLDEyICsxMCwzOCBAQAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCiAjaW5jbHVkZSAidHJhY2UtZXZlbnRzLXNhbXBsZS5oIgogCitzdGF0aWMgY29uc3QgY2hhciAqcmFuZG9tX3N0cmluZ3NbXSA9IHsKKwkiTW90aGVyIEdvb3NlIiwKKwkiU25vb3B5IiwKKwkiR2FuZGFsZiIsCisJIkZyb2RvIiwKKwkiT25lIHJpbmcgdG8gcnVsZSB0aGVtIGFsbCIKK307CiAKIHN0YXRpYyB2b2lkIHNpbXBsZV90aHJlYWRfZnVuYyhpbnQgY250KQogeworCWludCBhcnJheVs2XTsKKwlpbnQgbGVuID0gY250ICUgNTsKKwlpbnQgaTsKKwogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJc2NoZWR1bGVfdGltZW91dChIWik7Ci0JdHJhY2VfZm9vX2JhcigiaGVsbG8iLCBjbnQpOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlhcnJheVtpXSA9IGkgKyAxOworCWFycmF5W2ldID0gMDsKKworCS8qIFNpbGx5IHRyYWNlcG9pbnRzICovCisJdHJhY2VfZm9vX2JhcigiaGVsbG8iLCBjbnQsIGFycmF5LCByYW5kb21fc3RyaW5nc1tsZW5dLAorCQkgICAgICB0c2tfY3B1c19hbGxvd2VkKGN1cnJlbnQpKTsKKworCXRyYWNlX2Zvb193aXRoX3RlbXBsYXRlX3NpbXBsZSgiSEVMTE8iLCBjbnQpOworCisJdHJhY2VfZm9vX2Jhcl93aXRoX2NvbmQoIlNvbWUgdGltZXMgcHJpbnQiLCBjbnQpOworCisJdHJhY2VfZm9vX3dpdGhfdGVtcGxhdGVfY29uZCgicHJpbnRzIG90aGVyIHRpbWVzIiwgY250KTsKKworCXRyYWNlX2Zvb193aXRoX3RlbXBsYXRlX3ByaW50KCJJIGhhdmUgdG8gYmUgZGlmZmVyZW50IiwgY250KTsKIH0KIAogc3RhdGljIGludCBzaW1wbGVfdGhyZWFkKHZvaWQgKmFyZykKQEAgLTI5LDYgKzU1LDUzIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnNpbXBsZV90c2s7CitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpzaW1wbGVfdHNrX2ZuOworCitzdGF0aWMgdm9pZCBzaW1wbGVfdGhyZWFkX2Z1bmNfZm4oaW50IGNudCkKK3sKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXNjaGVkdWxlX3RpbWVvdXQoSFopOworCisJLyogTW9yZSBzaWxseSB0cmFjZXBvaW50cyAqLworCXRyYWNlX2Zvb19iYXJfd2l0aF9mbigiTG9vayBhdCBtZSIsIGNudCk7CisJdHJhY2VfZm9vX3dpdGhfdGVtcGxhdGVfZm4oIkxvb2sgYXQgbWUgdG9vIiwgY250KTsKK30KKworc3RhdGljIGludCBzaW1wbGVfdGhyZWFkX2ZuKHZvaWQgKmFyZykKK3sKKwlpbnQgY250ID0gMDsKKworCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQlzaW1wbGVfdGhyZWFkX2Z1bmNfZm4oY250KyspOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBERUZJTkVfTVVURVgodGhyZWFkX211dGV4KTsKKwordm9pZCBmb29fYmFyX3JlZyh2b2lkKQoreworCXByX2luZm8oIlN0YXJ0aW5nIHRocmVhZCBmb3IgZm9vX2Jhcl9mblxuIik7CisJLyoKKwkgKiBXZSBzaG91bGRuJ3QgYmUgYWJsZSB0byBzdGFydCBhIHRyYWNlIHdoZW4gdGhlIG1vZHVsZSBpcworCSAqIHVubG9hZGluZyAodGhlcmUncyBvdGhlciBsb2NrcyB0byBwcmV2ZW50IHRoYXQpLiBCdXQKKwkgKiBmb3IgY29uc2lzdGVuY3kgc2FrZSwgd2Ugc3RpbGwgdGFrZSB0aGUgdGhyZWFkX211dGV4LgorCSAqLworCW11dGV4X2xvY2soJnRocmVhZF9tdXRleCk7CisJc2ltcGxlX3Rza19mbiA9IGt0aHJlYWRfcnVuKHNpbXBsZV90aHJlYWRfZm4sIE5VTEwsICJldmVudC1zYW1wbGUtZm4iKTsKKwltdXRleF91bmxvY2soJnRocmVhZF9tdXRleCk7Cit9CisKK3ZvaWQgZm9vX2Jhcl91bnJlZyh2b2lkKQoreworCXByX2luZm8oIktpbGxpbmcgdGhyZWFkIGZvciBmb29fYmFyX2ZuXG4iKTsKKwkvKiBwcm90ZWN0IGFnYWluc3QgbW9kdWxlIHVubG9hZGluZyAqLworCW11dGV4X2xvY2soJnRocmVhZF9tdXRleCk7CisJaWYgKHNpbXBsZV90c2tfZm4pCisJCWt0aHJlYWRfc3RvcChzaW1wbGVfdHNrX2ZuKTsKKwlzaW1wbGVfdHNrX2ZuID0gTlVMTDsKKwltdXRleF91bmxvY2soJnRocmVhZF9tdXRleCk7Cit9CiAKIHN0YXRpYyBpbnQgX19pbml0IHRyYWNlX2V2ZW50X2luaXQodm9pZCkKIHsKQEAgLTQyLDYgKzExNSwxMSBAQAogc3RhdGljIHZvaWQgX19leGl0IHRyYWNlX2V2ZW50X2V4aXQodm9pZCkKIHsKIAlrdGhyZWFkX3N0b3Aoc2ltcGxlX3Rzayk7CisJbXV0ZXhfbG9jaygmdGhyZWFkX211dGV4KTsKKwlpZiAoc2ltcGxlX3Rza19mbikKKwkJa3RocmVhZF9zdG9wKHNpbXBsZV90c2tfZm4pOworCXNpbXBsZV90c2tfZm4gPSBOVUxMOworCW11dGV4X3VubG9jaygmdGhyZWFkX211dGV4KTsKIH0KIAogbW9kdWxlX2luaXQodHJhY2VfZXZlbnRfaW5pdCk7CmRpZmYgLS1naXQgYS9zYW1wbGVzL3RyYWNlX2V2ZW50cy90cmFjZS1ldmVudHMtc2FtcGxlLmggYi9zYW1wbGVzL3RyYWNlX2V2ZW50cy90cmFjZS1ldmVudHMtc2FtcGxlLmgKaW5kZXggNDc2NDI5Mi4uYTJjOGIwMiAxMDA2NDQKLS0tIGEvc2FtcGxlcy90cmFjZV9ldmVudHMvdHJhY2UtZXZlbnRzLXNhbXBsZS5oCisrKyBiL3NhbXBsZXMvdHJhY2VfZXZlbnRzL3RyYWNlLWV2ZW50cy1zYW1wbGUuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBJZiBUUkFDRV9TWVNURU0gaXMgZGVmaW5lZCwgdGhhdCB3aWxsIGJlIHRoZSBkaXJlY3RvcnkgY3JlYXRlZAotICogaW4gdGhlIGZ0cmFjZSBkaXJlY3RvcnkgdW5kZXIgL3N5cy9rZXJuZWwvZGVidWcvdHJhY2luZy9ldmVudHMvPHN5c3RlbT4KKyAqIGluIHRoZSBmdHJhY2UgZGlyZWN0b3J5IHVuZGVyIC9zeXMva2VybmVsL3RyYWNpbmcvZXZlbnRzLzxzeXN0ZW0+CiAgKgogICogVGhlIGRlZmluZV90cmFjZS5oIGJlbG93IHdpbGwgYWxzbyBsb29rIGZvciBhIGZpbGUgbmFtZSBvZgogICogVFJBQ0VfU1lTVEVNLmggd2hlcmUgVFJBQ0VfU1lTVEVNIGlzIHdoYXQgaXMgZGVmaW5lZCBoZXJlLgpAQCAtNTQsNDUgKzU0LDM0NyBAQAogICogICAgSGVyZSBpdCBpcyBzaW1wbHkgImZvbywgYmFyIi4KICAqCiAgKiBzdHJ1Y3Q6ICBUaGlzIGRlZmluZXMgdGhlIHdheSB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgcmluZyBidWZmZXIuCi0gKiAgICBUaGVyZSBhcmUgY3VycmVudGx5IHR3byB0eXBlcyBvZiBlbGVtZW50cy4gX19maWVsZCBhbmQgX19hcnJheS4KLSAqICAgIGEgX19maWVsZCBpcyBicm9rZW4gdXAgaW50byAodHlwZSwgbmFtZSkuIFdoZXJlIHR5cGUgY2FuIGJlIGFueQotICogICAgcHJpbWl0aXZlIHR5cGUgKGludGVnZXIsIGxvbmcgb3IgcG9pbnRlcikuIF9fZmllbGRfc3RydWN0KCkgY2FuCi0gKiAgICBiZSBhbnkgc3RhdGljIGNvbXBsZXggZGF0YSB2YWx1ZSAoc3RydWN0LCB1bmlvbiwgYnV0IG5vdCBhbiBhcnJheSkuCi0gKiAgICBGb3IgYW4gYXJyYXkuIHRoZXJlIGFyZSB0aHJlZSBmaWVsZHMuICh0eXBlLCBuYW1lLCBzaXplKS4gVGhlCi0gKiAgICB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBhcnJheSwgdGhlIG5hbWUgb2YgdGhlIGZpZWxkIGFuZCB0aGUgc2l6ZQotICogICAgb2YgdGhlIGFycmF5LgorICogICAgICAgICAgVGhlIGl0ZW1zIGRlY2xhcmVkIGhlcmUgYmVjb21lIHBhcnQgb2YgYSBzcGVjaWFsIHN0cnVjdHVyZQorICogICAgICAgICAgY2FsbGVkICJfX2VudHJ5Iiwgd2hpY2ggY2FuIGJlIHVzZWQgaW4gdGhlIGZhc3RfYXNzaWduIHBhcnQgb2YgdGhlCisgKiAgICAgICAgICBUUkFDRV9FVkVOVCBtYWNyby4KICAqCi0gKiAgICBfX2FycmF5KCBjaGFyLCBmb28sIDEwKSBpcyB0aGUgc2FtZSBhcyBzYXlpbmcgICBjaGFyIGZvb1sxMF0uCisgKiAgICAgIEhlcmUgYXJlIHRoZSBjdXJyZW50bHkgZGVmaW5lZCB0eXBlcyB5b3UgY2FuIHVzZToKKyAqCisgKiAgIF9fZmllbGQgOiBJcyBicm9rZW4gdXAgaW50byB0eXBlIGFuZCBuYW1lLiBXaGVyZSB0eXBlIGNhbiBiZSBhbnkKKyAqICAgICAgICAgcHJpbWl0aXZlIHR5cGUgKGludGVnZXIsIGxvbmcgb3IgcG9pbnRlcikuCisgKgorICogICAgICAgIF9fZmllbGQoaW50LCBmb28pCisgKgorICogICAgICAgIF9fZW50cnktPmZvbyA9IDU7CisgKgorICogICBfX2ZpZWxkX3N0cnVjdCA6IFRoaXMgY2FuIGJlIGFueSBzdGF0aWMgY29tcGxleCBkYXRhIHR5cGUgKHN0cnVjdCwgdW5pb24KKyAqICAgICAgICAgYnV0IG5vdCBhbiBhcnJheSkuIEJlIGNhcmVmdWwgdXNpbmcgY29tcGxleCB0eXBlcywgYXMgZWFjaAorICogICAgICAgICBldmVudCBpcyBsaW1pdGVkIGluIHNpemUsIGFuZCBjb3B5aW5nIGxhcmdlIGFtb3VudHMgb2YgZGF0YQorICogICAgICAgICBpbnRvIHRoZSByaW5nIGJ1ZmZlciBjYW4gc2xvdyB0aGluZ3MgZG93bi4KKyAqCisgKiAgICAgICAgIF9fZmllbGRfc3RydWN0KHN0cnVjdCBiYXIsIGZvbykKKyAqCisgKiAgICAgICAgIF9fZW50cnktPmJhci54ID0geTsKKworICogICBfX2FycmF5OiBUaGVyZSBhcmUgdGhyZWUgZmllbGRzICh0eXBlLCBuYW1lLCBzaXplKS4gVGhlIHR5cGUgaXMgdGhlCisgKiAgICAgICAgIHR5cGUgb2YgZWxlbWVudHMgaW4gdGVoIGFycmF5LCB0aGUgbmFtZSBpcyB0aGUgbmFtZSBvZiB0aGUgYXJyYXkuCisgKiAgICAgICAgIHNpemUgaXMgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgYXJyYXkgKG5vdCB0aGUgdG90YWwgc2l6ZSkuCisgKgorICogICAgICAgICBfX2FycmF5KCBjaGFyLCBmb28sIDEwKSBpcyB0aGUgc2FtZSBhcyBzYXlpbmc6IGNoYXIgZm9vWzEwXTsKKyAqCisgKiAgICAgICAgIEFzc2lnbmluZyBhcnJheXMgY2FuIGJlIGRvbmUgbGlrZSBhbnkgYXJyYXk6CisgKgorICogICAgICAgICBfX2VudHJ5LT5mb29bMF0gPSAnYSc7CisgKgorICogICAgICAgICBtZW1jcHkoX19lbnRyeS0+Zm9vLCBiYXIsIDEwKTsKKyAqCisgKiAgIF9fZHluYW1pY19hcnJheTogVGhpcyBpcyBzaW1pbGFyIHRvIGFycmF5LCBidXQgY2FuIHZhcnkgaXMgc2l6ZSBmcm9tCisgKiAgICAgICAgIGluc3RhbmNlIHRvIGluc3RhbmNlIG9mIHRoZSB0cmFjZXBvaW50IGJlaW5nIGNhbGxlZC4KKyAqICAgICAgICAgTGlrZSBfX2FycmF5LCB0aGlzIHRvbyBoYXMgdGhyZWUgZWxlbWVudHMgKHR5cGUsIG5hbWUsIHNpemUpOworICogICAgICAgICB0eXBlIGlzIHRoZSB0eXBlIG9mIHRoZSBlbGVtZW50LCBuYW1lIGlzIHRoZSBuYW1lIG9mIHRoZSBhcnJheS4KKyAqICAgICAgICAgVGhlIHNpemUgaXMgZGlmZmVyZW50IHRoYW4gX19hcnJheS4gSXQgaXMgbm90IGEgc3RhdGljIG51bWJlciwKKyAqICAgICAgICAgYnV0IHRoZSBhbGdvcml0aG0gdG8gZmlndXJlIG91dCB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBmb3IgdGhlCisgKiAgICAgICAgIHNwZWNpZmljIGluc3RhbmNlIG9mIHRyYWNlcG9pbnQuIEFnYWluLCBzaXplIGlzIHRoZSBudW1lYnIgb2YKKyAqICAgICAgICAgaXRlbXMgaW4gdGhlIGFycmF5LCBub3QgdGhlIHRvdGFsIGxlbmd0aCBpbiBieXRlcy4KKyAqCisgKiAgICAgICAgIF9fZHluYW1pY19hcnJheSggaW50LCBmb28sIGJhcikgaXMgc2ltaWxhciB0bzogaW50IGZvb1tiYXJdOworICoKKyAqICAgICAgICAgTm90ZSwgdW5saWtlIGFycmF5cywgeW91IG11c3QgdXNlIHRoZSBfX2dldF9keW5hbWljX2FycmF5KCkgbWFjcm8KKyAqICAgICAgICAgdG8gYWNjZXNzIHRoZSBhcnJheS4KKyAqCisgKiAgICAgICAgIG1lbWNweShfX2dldF9keW5hbWljX2FycmF5KGZvbyksIGJhciwgMTApOworICoKKyAqICAgICAgICAgTm90aWNlLCB0aGF0ICJfX2VudHJ5IiBpcyBub3QgbmVlZGVkIGhlcmUuCisgKgorICogICBfX3N0cmluZzogVGhpcyBpcyBhIHNwZWNpYWwga2luZCBvZiBfX2R5bmFtaWNfYXJyYXkuIEl0IGV4cGVjdHMgdG8KKyAqICAgICAgICAgaGF2ZSBhIG51bCB0ZXJtaW5hdGVkIGNoYXJhY3RlciBhcnJheSBwYXNzZWQgdG8gaXQgKGl0IGFsbG93cworICogICAgICAgICBmb3IgTlVMTCB0b28sIHdoaWNoIHdvdWxkIGJlIGNvbnZlcnRlZCBpbnRvICIobnVsbCkiKS4gX19zdHJpbmcKKyAqICAgICAgICAgdGFrZXMgdHdvIHBhcmFtZW50ZXIgKG5hbWUsIHNyYyksIHdoZXJlIG5hbWUgaXMgdGhlIG5hbWUgb2YKKyAqICAgICAgICAgdGhlIHN0cmluZyBzYXZlZCwgYW5kIHNyYyBpcyB0aGUgc3RyaW5nIHRvIGNvcHkgaW50byB0aGUKKyAqICAgICAgICAgcmluZyBidWZmZXIuCisgKgorICogICAgICAgICBfX3N0cmluZyhmb28sIGJhcikgIGlzIHNpbWlsYXIgdG86ICBzdHJjcHkoZm9vLCBiYXIpCisgKgorICogICAgICAgICBUbyBhc3NpZ24gYSBzdHJpbmcsIHVzZSB0aGUgaGVscGVyIG1hY3JvIF9fYXNzaWduX3N0cigpLgorICoKKyAqICAgICAgICAgX19hc3NpZ25fc3RyKGZvbywgYmFyKTsKKyAqCisgKiAgICAgICAgIEluIG1vc3QgY2FzZXMsIHRoZSBfX2Fzc2lnbl9zdHIoKSBtYWNybyB3aWxsIHRha2UgdGhlIHNhbWUKKyAqICAgICAgICAgcGFyYW1ldGVycyBhcyB0aGUgX19zdHJpbmcoKSBtYWNybyBoYWQgdG8gZGVjbGFyZSB0aGUgc3RyaW5nLgorICoKKyAqICAgX19iaXRtYXNrOiBUaGlzIGlzIGFub3RoZXIga2luZCBvZiBfX2R5bmFtaWNfYXJyYXksIGJ1dCBpdCBleHBlY3RzCisgKiAgICAgICAgIGFuIGFycmF5IG9mIGxvbmdzLCBhbmQgdGhlIG51bWJlciBvZiBiaXRzIHRvIHBhcnNlLiBJdCB0YWtlcworICogICAgICAgICB0d28gcGFyYW1ldGVycyAobmFtZSwgbnJfYml0cyksIHdoZXJlIG5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlCisgKiAgICAgICAgIGJpdG1hc2sgdG8gc2F2ZSwgYW5kIHRoZSBucl9iaXRzIGlzIHRoZSBudW1iZXIgb2YgYml0cyB0byByZWNvcmQuCisgKgorICogICAgICAgICBfX2JpdG1hc2sodGFyZ2V0X2NwdSwgbnJfY3B1bWFza19iaXRzKQorICoKKyAqICAgICAgICAgVG8gYXNzaWduIGEgYml0bWFzaywgdXNlIHRoZSBfX2Fzc2lnbl9iaXRtYXNrKCkgaGVscGVyIG1hY3JvLgorICoKKyAqICAgICAgICAgX19hc3NpZ25fYml0bWFzayh0YXJnZXRfY3B1cywgY3B1bWFza19iaXRzKGJhciksIG5yX2NwdW1hc2tfYml0cyk7CisgKgogICoKICAqIGZhc3RfYXNzaWduOiBUaGlzIGlzIGEgQyBsaWtlIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB0byBzdG9yZSB0aGUgaXRlbXMKLSAqICAgIGludG8gdGhlIHJpbmcgYnVmZmVyLgorICogICAgaW50byB0aGUgcmluZyBidWZmZXIuIEEgc3BlY2lhbCB2YXJpYWJsZSBjYWxsZWQgIl9fZW50cnkiIHdpbGwgYmUgdGhlCisgKiAgICBzdHJ1Y3R1cmUgdGhhdCBwb2ludHMgaW50byB0aGUgcmluZyBidWZmZXIgYW5kIGhhcyB0aGUgc2FtZSBmaWVsZHMgYXMKKyAqICAgIGRlc2NyaWJlZCBieSB0aGUgc3RydWN0IHBhcnQgb2YgVFJBQ0VfRVZFTlQgYWJvdmUuCiAgKgogICogcHJpbnRrOiBUaGlzIGlzIGEgd2F5IHRvIHByaW50IG91dCB0aGUgZGF0YSBpbiBwcmV0dHkgcHJpbnQuIFRoaXMgaXMKICAqICAgIHVzZWZ1bCBpZiB0aGUgc3lzdGVtIGNyYXNoZXMgYW5kIHlvdSBhcmUgbG9nZ2luZyB2aWEgYSBzZXJpYWwgbGluZSwKICAqICAgIHRoZSBkYXRhIGNhbiBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlIHVzaW5nIHRoaXMgInByaW50ayIgbWV0aG9kLgorICogICAgVGhpcyBpcyBhbHNvIHVzZWQgdG8gcHJpbnQgb3V0IHRoZSBkYXRhIGZyb20gdGhlIHRyYWNlIGZpbGVzLgorICogICAgQWdhaW4sIHRoZSBfX2VudHJ5IG1hY3JvIGlzIHVzZWQgdG8gYWNjZXNzIHRoZSBkYXRhIGZyb20gdGhlIHJpbmcgYnVmZmVyLgorICoKKyAqICAgIE5vdGUsIF9fZHluYW1pY19hcnJheSwgX19zdHJpbmcsIGFuZCBfX2JpdG1hc2sgcmVxdWlyZSBzcGVjaWFsIGhlbHBlcnMKKyAqICAgICAgIHRvIGFjY2VzcyB0aGUgZGF0YS4KKyAqCisgKiAgICAgIEZvciBfX2R5bmFtaWNfYXJyYXkoaW50LCBmb28sIGJhcikgdXNlIF9fZ2V0X2R5bmFtaWNfYXJyYXkoZm9vKQorICogICAgICAgICAgICBVc2UgX19nZXRfZHluYW1pY19hcnJheV9sZW4oZm9vKSB0byBnZXQgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkKKyAqICAgICAgICAgICAgc2F2ZWQuCisgKgorICogICAgICBGb3IgX19zdHJpbmcoZm9vLCBiYXIpIHVzZSBfX2dldF9zdHIoZm9vKQorICoKKyAqICAgICAgRm9yIF9fYml0bWFzayh0YXJnZXRfY3B1cywgbnJfY3B1bWFza19iaXRzKSB1c2UgX19nZXRfYml0bWFzayh0YXJnZXRfY3B1cykKKyAqCiAgKgogICogTm90ZSwgdGhhdCBmb3IgYm90aCB0aGUgYXNzaWduIGFuZCB0aGUgcHJpbnRrLCBfX2VudHJ5IGlzIHRoZSBoYW5kbGVyCiAgKiB0byB0aGUgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhlIHJpbmcgYnVmZmVyLCBhbmQgaXMgZGVmaW5lZCBieSB0aGUKICAqIFRQX1NUUlVDVF9fZW50cnkuCiAgKi8KKworLyoKKyAqIEl0IGlzIE9LIHRvIGhhdmUgaGVscGVyIGZ1bmN0aW9ucyBpbiB0aGUgZmlsZSwgYnV0IHRoZXkgbmVlZCB0byBiZSBwcm90ZWN0ZWQKKyAqIGZyb20gYmVpbmcgZGVmaW5lZCBtb3JlIHRoYW4gb25jZS4gUmVtZW1iZXIsIHRoaXMgZmlsZSBnZXRzIGluY2x1ZGVkIG1vcmUKKyAqIHRoYW4gb25jZS4KKyAqLworI2lmbmRlZiBfX1RSQUNFX0VWRU5UX1NBTVBMRV9IRUxQRVJfRlVOQ1RJT05TCisjZGVmaW5lIF9fVFJBQ0VfRVZFTlRfU0FNUExFX0hFTFBFUl9GVU5DVElPTlMKK3N0YXRpYyBpbmxpbmUgaW50IF9fbGVuZ3RoX29mKGNvbnN0IGludCAqbGlzdCkKK3sKKwlpbnQgaTsKKworCWlmICghbGlzdCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBsaXN0W2ldOyBpKyspCisJCTsKKwlyZXR1cm4gaTsKK30KKyNlbmRpZgorCiBUUkFDRV9FVkVOVChmb29fYmFyLAogCi0JVFBfUFJPVE8oY2hhciAqZm9vLCBpbnQgYmFyKSwKKwlUUF9QUk9UTyhjb25zdCBjaGFyICpmb28sIGludCBiYXIsIGNvbnN0IGludCAqbHN0LAorCQkgY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzayksCiAKLQlUUF9BUkdTKGZvbywgYmFyKSwKKwlUUF9BUkdTKGZvbywgYmFyLCBsc3QsIHN0cmluZywgbWFzayksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2FycmF5KAljaGFyLAlmb28sICAgIDEwCQkpCiAJCV9fZmllbGQoCWludCwJYmFyCQkJKQorCQlfX2R5bmFtaWNfYXJyYXkoaW50LAlsaXN0LCAgIF9fbGVuZ3RoX29mKGxzdCkpCisJCV9fc3RyaW5nKAlzdHIsCXN0cmluZwkJCSkKKwkJX19iaXRtYXNrKAljcHVzLAludW1fcG9zc2libGVfY3B1cygpCSkKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCXN0cmxjcHkoX19lbnRyeS0+Zm9vLCBmb28sIDEwKTsKIAkJX19lbnRyeS0+YmFyCT0gYmFyOworCQltZW1jcHkoX19nZXRfZHluYW1pY19hcnJheShsaXN0KSwgbHN0LAorCQkgICAgICAgX19sZW5ndGhfb2YobHN0KSAqIHNpemVvZihpbnQpKTsKKwkJX19hc3NpZ25fc3RyKHN0ciwgc3RyaW5nKTsKKwkJX19hc3NpZ25fYml0bWFzayhjcHVzLCBjcHVtYXNrX2JpdHMobWFzayksIG51bV9wb3NzaWJsZV9jcHVzKCkpOwogCSksCiAKLQlUUF9wcmludGsoImZvbyAlcyAlZCIsIF9fZW50cnktPmZvbywgX19lbnRyeS0+YmFyKQorCVRQX3ByaW50aygiZm9vICVzICVkICVzICVzICglcykiLCBfX2VudHJ5LT5mb28sIF9fZW50cnktPmJhciwKKwkJICBfX3ByaW50X2FycmF5KF9fZ2V0X2R5bmFtaWNfYXJyYXkobGlzdCksCisJCQkJX19nZXRfZHluYW1pY19hcnJheV9sZW4obGlzdCksCisJCQkJc2l6ZW9mKGludCkpLAorCQkgIF9fZ2V0X3N0cihzdHIpLCBfX2dldF9iaXRtYXNrKGNwdXMpKQogKTsKKworLyoKKyAqIFRoZXJlIG1heSBiZSBhIGNhc2Ugd2hlcmUgYSB0cmFjZXBvaW50IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZgorICogc29tZSBjb25kaXRpb24gaXMgc2V0LiBPdGhlcndpc2UgdGhlIHRyYWNlcG9pbnQgc2hvdWxkIG5vdCBiZSBjYWxsZWQuCisgKiBCdXQgdG8gZG8gc29tZXRoaW5nIGxpa2U6CisgKgorICogIGlmIChjb25kKQorICogICAgIHRyYWNlX2ZvbygpOworICoKKyAqIFdvdWxkIGNhdXNlIGEgbGl0dGxlIG92ZXJoZWFkIHdoZW4gdHJhY2luZyBpcyBub3QgZW5hYmxlZCwgYW5kIHRoYXQKKyAqIG92ZXJoZWFkLCBldmVuIGlmIHNtYWxsLCBpcyBub3Qgc29tZXRoaW5nIHdlIHdhbnQuIEFzIHRyYWNlcG9pbnRzCisgKiB1c2Ugc3RhdGljIGJyYW5jaCAoYWthIGp1bXBfbGFiZWxzKSwgd2hlcmUgbm8gYnJhbmNoIGlzIHRha2VuIHRvCisgKiBza2lwIHRoZSB0cmFjZXBvaW50IHdoZW4gbm90IGVuYWJsZWQsIGFuZCBhIGptcCBpcyBwbGFjZWQgdG8ganVtcAorICogdG8gdGhlIHRyYWNlcG9pbnQgY29kZSB3aGVuIGl0IGlzIGVuYWJsZWQsIGhhdmluZyBhIGlmIHN0YXRlbWVudAorICogbnVsbGlmaWVzIHRoYXQgb3B0aW1pemF0aW9uLiBJdCB3b3VsZCBiZSBuaWNlIHRvIHBsYWNlIHRoYXQKKyAqIGNvbmRpdGlvbiB3aXRoaW4gdGhlIHN0YXRpYyBicmFuY2guIFRoaXMgaXMgd2hlcmUgVFJBQ0VfRVZFTlRfQ09ORElUSU9OCisgKiBjb21lcyBpbi4KKyAqCisgKiBUUkFDRV9FVkVOVF9DT05ESVRJT04oKSBpcyBqdXN0IGxpa2UgVFJBQ0VfRVZFTlQsIGV4Y2VwdCBpdCBhZGRzIGFub3RoZXIKKyAqIHBhcmFtZXRlciBqdXN0IGFmdGVyIGFyZ3MuIFdoZXJlIFRSQUNFX0VWRU5UIGhhczoKKyAqCisgKiBUUkFDRV9FVkVOVChuYW1lLCBwcm90bywgYXJncywgc3RydWN0LCBhc3NpZ24sIHByaW50aykKKyAqCisgKiB0aGUgQ09ORElUSU9OIHZlcnNpb24gaGFzOgorICoKKyAqIFRSQUNFX0VWRU5UX0NPTkRJVElPTihuYW1lLCBwcm90bywgYXJncywgY29uZCwgc3RydWN0LCBhc3NpZ24sIHByaW50aykKKyAqCisgKiBFdmVyeXRoaW5nIGlzIHRoZSBzYW1lIGFzIFRSQUNFX0VWRU5UIGV4Y2VwdCBmb3IgdGhlIG5ldyBjb25kLiBUaGluaworICogb2YgdGhlIGNvbmQgdmFyaWFibGUgYXM6CisgKgorICogICBpZiAoY29uZCkKKyAqICAgICAgdHJhY2VfZm9vX2Jhcl93aXRoX2NvbmQoKTsKKyAqCisgKiBFeGNlcHQgdGhhdCB0aGUgbG9naWMgZm9yIHRoZSBpZiBicmFuY2ggaXMgcGxhY2VkIGFmdGVyIHRoZSBzdGF0aWMgYnJhbmNoLgorICogVGhhdCBpcywgdGhlIGlmIHN0YXRlbWVudCB0aGF0IHByb2Nlc3NlcyB0aGUgY29uZGl0aW9uIHdpbGwgbm90IGJlCisgKiBleGVjdXRlZCB1bmxlc3MgdGhhdCB0cmFlY3BvaW50IGlzIGVuYWJsZWQuIE90aGVyd2lzZSBpdCBzdGlsbCByZW1haW5zCisgKiBhIG5vcC4KKyAqLworVFJBQ0VfRVZFTlRfQ09ORElUSU9OKGZvb19iYXJfd2l0aF9jb25kLAorCisJVFBfUFJPVE8oY29uc3QgY2hhciAqZm9vLCBpbnQgYmFyKSwKKworCVRQX0FSR1MoZm9vLCBiYXIpLAorCisJVFBfQ09ORElUSU9OKCEoYmFyICUgMTApKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fc3RyaW5nKAlmb28sICAgIGZvbwkJKQorCQlfX2ZpZWxkKAlpbnQsCWJhcgkJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fYXNzaWduX3N0cihmb28sIGZvbyk7CisJCV9fZW50cnktPmJhcgk9IGJhcjsKKwkpLAorCisJVFBfcHJpbnRrKCJmb28gJXMgJWQiLCBfX2dldF9zdHIoZm9vKSwgX19lbnRyeS0+YmFyKQorKTsKKwordm9pZCBmb29fYmFyX3JlZyh2b2lkKTsKK3ZvaWQgZm9vX2Jhcl91bnJlZyh2b2lkKTsKKworLyoKKyAqIE5vdyBpbiB0aGUgY2FzZSB0aGF0IHNvbWUgZnVuY3Rpb24gbmVlZHMgdG8gYmUgY2FsbGVkIHdoZW4gdGhlCisgKiB0cmFjZXBvaW50IGlzIGVuYWJsZWQgYW5kL29yIHdoZW4gaXQgaXMgZGlzYWJsZWQsIHRoZQorICogVFJBQ0VfRVZFTlRfRk4oKSBzZXJ2ZXMgdGhpcyBwdXJwb3NlLiBUaGlzIGlzIGp1c3QgbGlrZSBUUkFDRV9FVkVOVCgpCisgKiBidXQgYWRkcyB0d28gbW9yZSBwYXJhbWV0ZXJzIGF0IHRoZSBlbmQ6CisgKgorICogVFJBQ0VfRVZFTlRfRk4oIG5hbWUsIHByb3RvLCBhcmdzLCBzdHJ1Y3QsIGFzc2lnbiwgcHJpbnRrLCByZWcsIHVucmVnKQorICoKKyAqIHJlZyBhbmQgdW5yZWcgYXJlIGZ1bmN0aW9ucyB3aXRoIHRoZSBwcm90b3R5cGUgb2Y6CisgKgorICogICAgdm9pZCByZWcodm9pZCkKKyAqCisgKiBUaGUgcmVnIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGJlZm9yZSB0aGUgdHJhY2Vwb2ludCBpcyBlbmFibGVkLCBhbmQKKyAqIHRoZSB1bnJlZyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBhZnRlciB0aGUgdHJhY2Vwb2ludCBpcyBkaXNhYmxlZC4KKyAqCisgKiBOb3RlLCByZWcgYW5kIHVucmVnIGFyZSBhbGxvd2VkIHRvIGJlIE5VTEwuIElmIHlvdSBvbmx5IG5lZWQgdG8KKyAqIGNhbGwgYSBmdW5jdGlvbiBiZWZvcmUgZW5hYmxpbmcsIG9yIGFmdGVyIGRpc2FibGluZywganVzdCBzZXQgb25lCisgKiBmdW5jdGlvbiBhbmQgcGFzcyBpbiBOVUxMIGZvciB0aGUgb3RoZXIgcGFyYW1ldGVyLgorICovCitUUkFDRV9FVkVOVF9GTihmb29fYmFyX3dpdGhfZm4sCisKKwlUUF9QUk9UTyhjb25zdCBjaGFyICpmb28sIGludCBiYXIpLAorCisJVFBfQVJHUyhmb28sIGJhciksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX3N0cmluZygJZm9vLCAgICBmb28JCSkKKwkJX19maWVsZCgJaW50LAliYXIJCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fYXNzaWduX3N0cihmb28sIGZvbyk7CisJCV9fZW50cnktPmJhcgk9IGJhcjsKKwkpLAorCisJVFBfcHJpbnRrKCJmb28gJXMgJWQiLCBfX2dldF9zdHIoZm9vKSwgX19lbnRyeS0+YmFyKSwKKworCWZvb19iYXJfcmVnLCBmb29fYmFyX3VucmVnCispOworCisvKgorICogRWFjaCBUUkFDRV9FVkVOVCBtYWNybyBjcmVhdGVzIHNldmVyYWwgaGVscGVyIGZ1bmN0aW9ucyB0byBwcm9kdWNlCisgKiB0aGUgY29kZSB0byBhZGQgdGhlIHRyYWNlcG9pbnQsIGNyZWF0ZSB0aGUgZmlsZXMgaW4gdGhlIHRyYWNlCisgKiBkaXJlY3RvcnksIGhvb2sgaXQgdG8gcGVyZiwgYXNzaWduIHRoZSB2YWx1ZXMgYW5kIHRvIHByaW50IG91dAorICogdGhlIHJhdyBkYXRhIGZyb20gdGhlIHJpbmcgYnVmZmVyLiBUbyBwcmV2ZW50IHRvbyBtdWNoIGJsb2F0LAorICogaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgdHJhY2Vwb2ludCB0aGF0IHVzZXMgdGhlIHNhbWUgZm9ybWF0CisgKiBmb3IgdGhlIHByb3RvLCBhcmdzLCBzdHJ1Y3QsIGFzc2lnbiBhbmQgcHJpbnRrLCBhbmQgb25seSB0aGUgbmFtZQorICogaXMgZGlmZmVyZW50LCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBERUNMQVJFX0VWRU5UX0NMQVNTCisgKgorICogREVDTEFSRV9FVkVOVF9DTEFTUygpIG1hY3JvIGNyZWF0ZXMgbW9zdCBvZiB0aGUgZnVuY3Rpb25zIGZvciB0aGUKKyAqIHRyYWNlcG9pbnQuIFRoZW4gREVGSU5FX0VWRU5UKCkgaXMgdXNlIHRvIGhvb2sgYSB0cmFjZXBvaW50IHRvIHRob3NlCisgKiBmdW5jdGlvbnMuIFRoaXMgREVGSU5FX0VWRU5UKCkgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGFuZCBjYW4KKyAqIGJlIGVuYWJsZWQgYW5kIGRpc2FibGVkIHNlcGFyYXRlbHkgZnJvbSBvdGhlciBldmVudHMgKGVpdGhlciBUUkFDRV9FVkVOVAorICogb3Igb3RoZXIgREVGSU5FX0VWRU5UKClzKS4KKyAqCisgKiBOb3RlLCBUUkFDRV9FVkVOVCgpIGl0c2VsZiBpcyBzaW1wbHkgZGVmaW5lZCBhczoKKyAqCisgKiAjZGVmaW5lIFRSQUNFX0VWRU5UKG5hbWUsIHByb3RvLCBhcmdzLCB0c3RydWN0LCBhc3NpZ24sIHByaW50aykgIFwKKyAqICBERUZJTkVfRVZFTlRfQ0xBU1MobmFtZSwgcHJvdG8sIGFyZ3MsIHRzdHJ1Y3QsIGFzc2lnbiwgcHJpbnRrKTsgXAorICogIERFRklORV9FVkVOVChuYW1lLCBuYW1lLCBwcm90bywgYXJncykKKyAqCisgKiBUaGUgREVGSU5FX0VWRU5UKCkgYWxzbyBjYW4gYmUgZGVjbGFyZWQgd2l0aCBjb25kaXRpb25zIGFuZCByZWcgZnVuY3Rpb25zOgorICoKKyAqIERFRklORV9FVkVOVF9DT05ESVRJT04odGVtcGxhdGUsIG5hbWUsIHByb3RvLCBhcmdzLCBjb25kKTsKKyAqIERFRklORV9FVkVOVF9GTih0ZW1wbGF0ZSwgbmFtZSwgcHJvdG8sIGFyZ3MsIHJlZywgdW5yZWcpOworICovCitERUNMQVJFX0VWRU5UX0NMQVNTKGZvb190ZW1wbGF0ZSwKKworCVRQX1BST1RPKGNvbnN0IGNoYXIgKmZvbywgaW50IGJhciksCisKKwlUUF9BUkdTKGZvbywgYmFyKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fc3RyaW5nKAlmb28sICAgIGZvbwkJKQorCQlfX2ZpZWxkKAlpbnQsCWJhcgkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19hc3NpZ25fc3RyKGZvbywgZm9vKTsKKwkJX19lbnRyeS0+YmFyCT0gYmFyOworCSksCisKKwlUUF9wcmludGsoImZvbyAlcyAlZCIsIF9fZ2V0X3N0cihmb28pLCBfX2VudHJ5LT5iYXIpCispOworCisvKgorICogSGVyZSdzIGEgYmV0dGVyIHdheSBmb3IgdGhlIHByZXZpb3VzIHNhbXBsZXMgKGV4Y2VwdCwgdGhlIGZpcnN0CisgKiBleG1hcGxlIGhhZCBtb3JlIGZpZWxkcyBhbmQgY291bGQgbm90IGJlIHVzZWQgaGVyZSkuCisgKi8KK0RFRklORV9FVkVOVChmb29fdGVtcGxhdGUsIGZvb193aXRoX3RlbXBsYXRlX3NpbXBsZSwKKwlUUF9QUk9UTyhjb25zdCBjaGFyICpmb28sIGludCBiYXIpLAorCVRQX0FSR1MoZm9vLCBiYXIpKTsKKworREVGSU5FX0VWRU5UX0NPTkRJVElPTihmb29fdGVtcGxhdGUsIGZvb193aXRoX3RlbXBsYXRlX2NvbmQsCisJVFBfUFJPVE8oY29uc3QgY2hhciAqZm9vLCBpbnQgYmFyKSwKKwlUUF9BUkdTKGZvbywgYmFyKSwKKwlUUF9DT05ESVRJT04oIShiYXIgJSA4KSkpOworCisKK0RFRklORV9FVkVOVF9GTihmb29fdGVtcGxhdGUsIGZvb193aXRoX3RlbXBsYXRlX2ZuLAorCVRQX1BST1RPKGNvbnN0IGNoYXIgKmZvbywgaW50IGJhciksCisJVFBfQVJHUyhmb28sIGJhciksCisJZm9vX2Jhcl9yZWcsIGZvb19iYXJfdW5yZWcpOworCisvKgorICogQW55dGltZSB0d28gZXZlbnRzIHNoYXJlIGJhc2ljYWxseSB0aGUgc2FtZSB2YWx1ZXMgYW5kIGhhdmUKKyAqIHRoZSBzYW1lIG91dHB1dCwgdXNlIHRoZSBERUNMQVJFX0VWRU5UX0NMQVNTKCkgYW5kIERFRklORV9FVkVOVCgpCisgKiB3aGVuIGV2ZXIgcG9zc2libGUuCisgKi8KKworLyoKKyAqIElmIHRoZSBldmVudCBpcyBzaW1pbGFyIHRvIHRoZSBERUNMQVJFX0VWRU5UX0NMQVNTLCBidXQgeW91IG5lZWQKKyAqIHRvIGhhdmUgYSBkaWZmZXJlbnQgb3V0cHV0LCB0aGVuIHVzZSBERUZJTkVfRVZFTlRfUFJJTlQoKSB3aGljaAorICogbGV0cyB5b3Ugb3ZlcnJpZGUgdGhlIFRQX3ByaW50aygpIG9mIHRoZSBjbGFzcy4KKyAqLworCitERUZJTkVfRVZFTlRfUFJJTlQoZm9vX3RlbXBsYXRlLCBmb29fd2l0aF90ZW1wbGF0ZV9wcmludCwKKwlUUF9QUk9UTyhjb25zdCBjaGFyICpmb28sIGludCBiYXIpLAorCVRQX0FSR1MoZm9vLCBiYXIpLAorCVRQX3ByaW50aygiYmFyICVzICVkIiwgX19nZXRfc3RyKGZvbyksIF9fZW50cnktPmJhcikpOworCiAjZW5kaWYKIAogLyoqKioqIE5PVElDRSEgVGhlICNpZiBwcm90ZWN0aW9uIGVuZHMgaGVyZS4gKioqKiovCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkIGIvc2NyaXB0cy9NYWtlZmlsZS5idWlsZAppbmRleCA2NDljZTY4Li4wMWRmMzBhIDEwMDY0NAotLS0gYS9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCisrKyBiL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKQEAgLTIzNCw4ICsyMzQsOSBAQAogCSIkKGlmICQocGFydC1vZi1tb2R1bGUpLDEsMCkiICIkKEApIjsKIHJlY29yZG1jb3VudF9zb3VyY2UgOj0gJChzcmN0cmVlKS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAogZW5kaWYKLWNtZF9yZWNvcmRfbWNvdW50ID0gCQkJCQkJXAotCWlmIFsgIiQoZmluZHN0cmluZyAtcGcsJChfY19mbGFncykpIiA9ICItcGciIF07IHRoZW4JXAorY21kX3JlY29yZF9tY291bnQgPQkJCQkJCVwKKwlpZiBbICIkKGZpbmRzdHJpbmcgJChDQ19GTEFHU19GVFJBQ0UpLCQoX2NfZmxhZ3MpKSIgPQlcCisJICAgICAiJChDQ19GTEFHU19GVFJBQ0UpIiBdOyB0aGVuCQkJXAogCQkkKHN1Yl9jbWRfcmVjb3JkX21jb3VudCkJCQlcCiAJZmk7CiBlbmRpZgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9hc24xX2NvbXBpbGVyLmMgYi9zY3JpcHRzL2FzbjFfY29tcGlsZXIuYwppbmRleCA5MWM0MTE3Li43NzUwZTljIDEwMDY0NAotLS0gYS9zY3JpcHRzL2FzbjFfY29tcGlsZXIuYworKysgYi9zY3JpcHRzL2FzbjFfY29tcGlsZXIuYwpAQCAtMzExLDYgKzMxMSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdG9rZW4gKnRva2VuX2xpc3Q7CiBzdGF0aWMgdW5zaWduZWQgbnJfdG9rZW5zOworc3RhdGljIF9Cb29sIHZlcmJvc2U7CisKKyNkZWZpbmUgZGVidWcoZm10LCAuLi4pIGRvIHsgaWYgKHZlcmJvc2UpIHByaW50ZihmbXQsICMjIF9fVkFfQVJHU19fKTsgfSB3aGlsZSAoMCkKIAogc3RhdGljIGludCBkaXJlY3RpdmVfY29tcGFyZShjb25zdCB2b2lkICpfa2V5LCBjb25zdCB2b2lkICpfcGRpcikKIHsKQEAgLTMyMiwyMSArMzI1LDIxIEBACiAJZGxlbiA9IHN0cmxlbihkaXIpOwogCWNsZW4gPSAoZGxlbiA8IHRva2VuLT5zaXplKSA/IGRsZW4gOiB0b2tlbi0+c2l6ZTsKIAotCS8vcHJpbnRmKCJjbXAoJSouKnMsJXMpID0gIiwKKwkvL2RlYnVnKCJjbXAoJSouKnMsJXMpID0gIiwKIAkvLyAgICAgICAoaW50KXRva2VuLT5zaXplLCAoaW50KXRva2VuLT5zaXplLCB0b2tlbi0+dmFsdWUsCiAJLy8gICAgICAgZGlyKTsKIAogCXZhbCA9IG1lbWNtcCh0b2tlbi0+dmFsdWUsIGRpciwgY2xlbik7CiAJaWYgKHZhbCAhPSAwKSB7Ci0JCS8vcHJpbnRmKCIlZCBbY21wXVxuIiwgdmFsKTsKKwkJLy9kZWJ1ZygiJWQgW2NtcF1cbiIsIHZhbCk7CiAJCXJldHVybiB2YWw7CiAJfQogCiAJaWYgKGRsZW4gPT0gdG9rZW4tPnNpemUpIHsKLQkJLy9wcmludGYoIjBcbiIpOworCQkvL2RlYnVnKCIwXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCS8vcHJpbnRmKCIlZFxuIiwgKGludClkbGVuIC0gKGludCl0b2tlbi0+c2l6ZSk7CisJLy9kZWJ1ZygiJWRcbiIsIChpbnQpZGxlbiAtIChpbnQpdG9rZW4tPnNpemUpOwogCXJldHVybiBkbGVuIC0gdG9rZW4tPnNpemU7IC8qIHNob3J0ZXIgLT4gbmVnYXRpdmUgKi8KIH0KIApAQCAtNTE1LDEzICs1MTgsMTMgQEAKIAl9CiAKIAlucl90b2tlbnMgPSB0aXg7Ci0JcHJpbnRmKCJFeHRyYWN0ZWQgJXUgdG9rZW5zXG4iLCBucl90b2tlbnMpOworCWRlYnVnKCJFeHRyYWN0ZWQgJXUgdG9rZW5zXG4iLCBucl90b2tlbnMpOwogCiAjaWYgMAogCXsKIAkJaW50IG47CiAJCWZvciAobiA9IDA7IG4gPCBucl90b2tlbnM7IG4rKykKLQkJCXByaW50ZigiVG9rZW4gJTN1OiAnJSouKnMnXG4iLAorCQkJZGVidWcoIlRva2VuICUzdTogJyUqLipzJ1xuIiwKIAkJCSAgICAgICBuLAogCQkJICAgICAgIChpbnQpdG9rZW5fbGlzdFtuXS5zaXplLCAoaW50KXRva2VuX2xpc3Rbbl0uc2l6ZSwKIAkJCSAgICAgICB0b2tlbl9saXN0W25dLnZhbHVlKTsKQEAgLTU0Miw2ICs1NDUsNyBAQAogCXNzaXplX3QgcmVhZGxlbjsKIAlGSUxFICpvdXQsICpoZHI7CiAJY2hhciAqYnVmZmVyLCAqcDsKKwljaGFyICprYnVpbGRfdmVyYm9zZTsKIAlpbnQgZmQ7CiAKIAlpZiAoYXJnYyAhPSA0KSB7CkBAIC01NTAsNiArNTU0LDEwIEBACiAJCWV4aXQoMik7CiAJfQogCisJa2J1aWxkX3ZlcmJvc2UgPSBnZXRlbnYoIktCVUlMRF9WRVJCT1NFIik7CisJaWYgKGtidWlsZF92ZXJib3NlKQorCQl2ZXJib3NlID0gYXRvaShrYnVpbGRfdmVyYm9zZSk7CisKIAlmaWxlbmFtZSA9IGFyZ3ZbMV07CiAJb3V0cHV0bmFtZSA9IGFyZ3ZbMl07CiAJaGVhZGVybmFtZSA9IGFyZ3ZbM107CkBAIC03NDgsMTEgKzc1NiwxMSBAQAogCiAJcXNvcnQodHlwZV9pbmRleCwgbnIsIHNpemVvZih0eXBlX2luZGV4WzBdKSwgdHlwZV9pbmRleF9jb21wYXJlKTsKIAotCXByaW50ZigiRXh0cmFjdGVkICV1IHR5cGVzXG4iLCBucl90eXBlcyk7CisJZGVidWcoIkV4dHJhY3RlZCAldSB0eXBlc1xuIiwgbnJfdHlwZXMpOwogI2lmIDAKIAlmb3IgKG4gPSAwOyBuIDwgbnJfdHlwZXM7IG4rKykgewogCQlzdHJ1Y3QgdHlwZSAqdHlwZSA9IHR5cGVfaW5kZXhbbl07Ci0JCXByaW50ZigiLSAlKi4qc1xuIiwKKwkJZGVidWcoIi0gJSouKnNcbiIsCiAJCSAgICAgICAoaW50KXR5cGUtPm5hbWUtPnNpemUsCiAJCSAgICAgICAoaW50KXR5cGUtPm5hbWUtPnNpemUsCiAJCSAgICAgICB0eXBlLT5uYW1lLT52YWx1ZSk7CkBAIC03OTMsNyArODAxLDcgQEAKIAogCX0gd2hpbGUgKHR5cGUrKywgISh0eXBlLT5mbGFncyAmIFRZUEVfU1RPUF9NQVJLRVIpKTsKIAotCXByaW50ZigiRXh0cmFjdGVkICV1IGFjdGlvbnNcbiIsIG5yX2FjdGlvbnMpOworCWRlYnVnKCJFeHRyYWN0ZWQgJXUgYWN0aW9uc1xuIiwgbnJfYWN0aW9ucyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZWxlbWVudCAqZWxlbWVudF9saXN0OwpAQCAtMTI4NCw3ICsxMjkyLDcgQEAKIAl9CiAKIAkvKiBXZSBkbyB0d28gcGFzc2VzIC0gdGhlIGZpcnN0IG9uZSBjYWxjdWxhdGVzIGFsbCB0aGUgb2Zmc2V0cyAqLwotCXByaW50ZigiUGFzcyAxXG4iKTsKKwlkZWJ1ZygiUGFzcyAxXG4iKTsKIAlucl9lbnRyaWVzID0gMDsKIAlyb290ID0gJnR5cGVfbGlzdFswXTsKIAlyZW5kZXJfZWxlbWVudChOVUxMLCByb290LT5lbGVtZW50LCBOVUxMKTsKQEAgLTEyOTUsNyArMTMwMyw3IEBACiAJCWUtPmZsYWdzICY9IH5FTEVNRU5UX1JFTkRFUkVEOwogCiAJLyogQW5kIHRoZW4gd2UgYWN0dWFsbHkgcmVuZGVyICovCi0JcHJpbnRmKCJQYXNzIDJcbiIpOworCWRlYnVnKCJQYXNzIDJcbiIpOwogCWZwcmludGYob3V0LCAiXG4iKTsKIAlmcHJpbnRmKG91dCwgInN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICVzX21hY2hpbmVbXSA9IHtcbiIsCiAJCWdyYW1tYXJfbmFtZSk7CmRpZmYgLS1naXQgYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCmluZGV4IDUzN2MzOGMuLjgyNjQ3MGQgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCisrKyBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCkBAIC0yNDIsOCArMjQyLDEzIEBACiAgICAgJGNjIC49ICIgLW0zMiI7CiAKIH0gZWxzaWYgKCRhcmNoIGVxICJzMzkwIiAmJiAkYml0cyA9PSA2NCkgewotICAgICRtY291bnRfcmVnZXggPSAiXlxccyooWzAtOWEtZkEtRl0rKTpcXHMqUl8zOTBfKFBDfFBMVCkzMkRCTFxccytfbWNvdW50XFwrMHgyXCQiOwotICAgICRtY291bnRfYWRqdXN0ID0gLTE0OworICAgIGlmICgkY2MgPX4gLy1EQ0NfVVNJTkdfSE9UUEFUQ0gvKSB7CisJJG1jb3VudF9yZWdleCA9ICJeXFxzKihbMC05YS1mQS1GXSspOlxccypjMCAwNCAwMCAwMCAwMCAwMFxccypicmNsXFxzKjAsWzAtOWEtZl0rIDwoW15cK10qKT5cJCI7CisJJG1jb3VudF9hZGp1c3QgPSAwOworICAgIH0gZWxzZSB7CisJJG1jb3VudF9yZWdleCA9ICJeXFxzKihbMC05YS1mQS1GXSspOlxccypSXzM5MF8oUEN8UExUKTMyREJMXFxzK19tY291bnRcXCsweDJcJCI7CisJJG1jb3VudF9hZGp1c3QgPSAtMTQ7CisgICAgfQogICAgICRhbGlnbm1lbnQgPSA4OwogICAgICR0eXBlID0gIi5xdWFkIjsKICAgICAkbGQgLj0gIiAtbSBlbGY2NF9zMzkwIjsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZyBiL3NlY3VyaXR5L2ludGVncml0eS9pbWEvS2NvbmZpZwppbmRleCA1NzUxNWJjLi5kZjMwMzM0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbnRlZ3JpdHkvaW1hL0tjb25maWcKKysrIGIvc2VjdXJpdHkvaW50ZWdyaXR5L2ltYS9LY29uZmlnCkBAIC0xMjYsNyArMTI2LDYgQEAKIAlib29sICJSZXF1aXJlIGFsbCBrZXlzIG9uIHRoZSAuaW1hIGtleXJpbmcgYmUgc2lnbmVkIgogCWRlcGVuZHMgb24gSU1BX0FQUFJBSVNFICYmIFNZU1RFTV9UUlVTVEVEX0tFWVJJTkcKIAlkZXBlbmRzIG9uIElOVEVHUklUWV9BU1lNTUVUUklDX0tFWVMKLQlzZWxlY3QgS0VZU19ERUJVR19QUk9DX0tFWVMKIAlkZWZhdWx0IHkKIAloZWxwCiAJICAgVGhpcyBvcHRpb24gcmVxdWlyZXMgdGhhdCBhbGwga2V5cyBhZGRlZCB0byB0aGUgLmltYQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9LY29uZmlnIGIvc2VjdXJpdHkva2V5cy9LY29uZmlnCmluZGV4IGE0ZjNmOGMuLjcyNDgzYjggMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvS2NvbmZpZworKysgYi9zZWN1cml0eS9rZXlzL0tjb25maWcKQEAgLTgwLDIxICs4MCwzIEBACiAJICBVc2Vyc3BhY2Ugb25seSBldmVyIHNlZXMvc3RvcmVzIGVuY3J5cHRlZCBibG9icy4KIAogCSAgSWYgeW91IGFyZSB1bnN1cmUgYXMgdG8gd2hldGhlciB0aGlzIGlzIHJlcXVpcmVkLCBhbnN3ZXIgTi4KLQotY29uZmlnIEtFWVNfREVCVUdfUFJPQ19LRVlTCi0JYm9vbCAiRW5hYmxlIHRoZSAvcHJvYy9rZXlzIGZpbGUgYnkgd2hpY2gga2V5cyBtYXkgYmUgdmlld2VkIgotCWRlcGVuZHMgb24gS0VZUwotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHR1cm5zIG9uIHN1cHBvcnQgZm9yIHRoZSAvcHJvYy9rZXlzIGZpbGUgLSB0aHJvdWdoIHdoaWNoCi0JICBjYW4gYmUgbGlzdGVkIGFsbCB0aGUga2V5cyBvbiB0aGUgc3lzdGVtIHRoYXQgYXJlIHZpZXdhYmxlIGJ5IHRoZQotCSAgcmVhZGluZyBwcm9jZXNzLgotCi0JICBUaGUgb25seSBrZXlzIGluY2x1ZGVkIGluIHRoZSBsaXN0IGFyZSB0aG9zZSB0aGF0IGdyYW50IFZpZXcKLQkgIHBlcm1pc3Npb24gdG8gdGhlIHJlYWRpbmcgcHJvY2VzcyB3aGV0aGVyIG9yIG5vdCBpdCBwb3NzZXNzZXMgdGhlbS4KLQkgIE5vdGUgdGhhdCBMU00gc2VjdXJpdHkgY2hlY2tzIGFyZSBzdGlsbCBwZXJmb3JtZWQsIGFuZCBtYXkgZnVydGhlcgotCSAgZmlsdGVyIG91dCBrZXlzIHRoYXQgdGhlIGN1cnJlbnQgcHJvY2VzcyBpcyBub3QgYXV0aG9yaXNlZCB0byB2aWV3LgotCi0JICBPbmx5IGtleSBhdHRyaWJ1dGVzIGFyZSBsaXN0ZWQgaGVyZTsga2V5IHBheWxvYWRzIGFyZSBub3QgaW5jbHVkZWQgaW4KLQkgIHRoZSByZXN1bHRpbmcgdGFibGUuCi0KLQkgIElmIHlvdSBhcmUgdW5zdXJlIGFzIHRvIHdoZXRoZXIgdGhpcyBpcyByZXF1aXJlZCwgYW5zd2VyIE4uCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3Byb2MuYyBiL3NlY3VyaXR5L2tleXMvcHJvYy5jCmluZGV4IDk3MmVlYjMuLmYwNjExYTYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvcHJvYy5jCisrKyBiL3NlY3VyaXR5L2tleXMvcHJvYy5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotI2lmZGVmIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUwogc3RhdGljIGludCBwcm9jX2tleXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBzdGF0aWMgdm9pZCAqcHJvY19rZXlzX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqcCwgbG9mZl90ICpfcG9zKTsKIHN0YXRpYyB2b2lkICpwcm9jX2tleXNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYsIGxvZmZfdCAqX3Bvcyk7CkBAIC0zOCw3ICszNyw2IEBACiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKIH07Ci0jZW5kaWYKIAogc3RhdGljIGludCBwcm9jX2tleV91c2Vyc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKIHN0YXRpYyB2b2lkICpwcm9jX2tleV91c2Vyc19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIGxvZmZfdCAqX3Bvcyk7CkBAIC02NywxMSArNjUsOSBAQAogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcDsKIAotI2lmZGVmIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUwogCXAgPSBwcm9jX2NyZWF0ZSgia2V5cyIsIDAsIE5VTEwsICZwcm9jX2tleXNfZm9wcyk7CiAJaWYgKCFwKQogCQlwYW5pYygiQ2Fubm90IGNyZWF0ZSAvcHJvYy9rZXlzXG4iKTsKLSNlbmRpZgogCiAJcCA9IHByb2NfY3JlYXRlKCJrZXktdXNlcnMiLCAwLCBOVUxMLCAmcHJvY19rZXlfdXNlcnNfZm9wcyk7CiAJaWYgKCFwKQpAQCAtODYsOCArODIsNiBAQAogICogSW1wbGVtZW50ICIvcHJvYy9rZXlzIiB0byBwcm92aWRlIGEgbGlzdCBvZiB0aGUga2V5cyBvbiB0aGUgc3lzdGVtIHRoYXQKICAqIGdyYW50IFZpZXcgcGVybWlzc2lvbiB0byB0aGUgY2FsbGVyLgogICovCi0jaWZkZWYgQ09ORklHX0tFWVNfREVCVUdfUFJPQ19LRVlTCi0KIHN0YXRpYyBzdHJ1Y3QgcmJfbm9kZSAqa2V5X3NlcmlhbF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcCwgc3RydWN0IHJiX25vZGUgKm4pCiB7CiAJc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zID0gc2VxX3VzZXJfbnMocCk7CkBAIC0yNzUsOCArMjY5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUyAqLwotCiBzdGF0aWMgc3RydWN0IHJiX25vZGUgKl9fa2V5X3VzZXJfbmV4dChzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsIHN0cnVjdCByYl9ub2RlICpuKQogewogCXdoaWxlIChuKSB7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jIGIvc2VjdXJpdHkvc2VsaW51eC9hdmMuYwppbmRleCBhMThmMWZhLi5hZmNjMGFlIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKQEAgLTUxNywxMSArNTE3LDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGF2Y19zaWRjbXAodTMyIHgsIHUzMiB5KQotewotCXJldHVybiAoeCA9PSB5IHx8IHggPT0gU0VDU0lEX1dJTEQgfHwgeSA9PSBTRUNTSURfV0lMRCk7Ci19Ci0KIC8qKgogICogYXZjX3VwZGF0ZV9ub2RlIFVwZGF0ZSBhbiBBVkMgZW50cnkKICAqIEBldmVudCA6IFVwZGF0aW5nIGV2ZW50CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggNmRhNzUzMi4uODdhOTE1NiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtNDAxLDIzICs0MDEsMTQgQEAKIHsKIAlzdHJ1Y3Qgc3VwZXJibG9ja19zZWN1cml0eV9zdHJ1Y3QgKnNic2VjID0gc2ItPnNfc2VjdXJpdHk7CiAKLQlpZiAoc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9YQVRUUiB8fAotCSAgICBzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX1RSQU5TIHx8Ci0JICAgIHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfVEFTSykKLQkJcmV0dXJuIDE7Ci0KLQkvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBzeXNmcy4gSXMgZ2VuZnMgYnV0IGFsc28gaGFzIHNldHhhdHRyIGhhbmRsZXIqLwotCWlmIChzdHJuY21wKHNiLT5zX3R5cGUtPm5hbWUsICJzeXNmcyIsIHNpemVvZigic3lzZnMiKSkgPT0gMCkKLQkJcmV0dXJuIDE7Ci0KLQkvKgotCSAqIFNwZWNpYWwgaGFuZGxpbmcgZm9yIHJvb3Rmcy4gSXMgZ2VuZnMgYnV0IHN1cHBvcnRzCi0JICogc2V0dGluZyBTRUxpbnV4IGNvbnRleHQgb24gaW4tY29yZSBpbm9kZXMuCi0JICovCi0JaWYgKHN0cm5jbXAoc2ItPnNfdHlwZS0+bmFtZSwgInJvb3RmcyIsIHNpemVvZigicm9vdGZzIikpID09IDApCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHNic2VjLT5iZWhhdmlvciA9PSBTRUNVUklUWV9GU19VU0VfWEFUVFIgfHwKKwkJc2JzZWMtPmJlaGF2aW9yID09IFNFQ1VSSVRZX0ZTX1VTRV9UUkFOUyB8fAorCQlzYnNlYy0+YmVoYXZpb3IgPT0gU0VDVVJJVFlfRlNfVVNFX1RBU0sgfHwKKwkJLyogU3BlY2lhbCBoYW5kbGluZy4gR2VuZnMgYnV0IGFsc28gaW4tY29yZSBzZXR4YXR0ciBoYW5kbGVyICovCisJCSFzdHJjbXAoc2ItPnNfdHlwZS0+bmFtZSwgInN5c2ZzIikgfHwKKwkJIXN0cmNtcChzYi0+c190eXBlLT5uYW1lLCAicHN0b3JlIikgfHwKKwkJIXN0cmNtcChzYi0+c190eXBlLT5uYW1lLCAiZGVidWdmcyIpIHx8CisJCSFzdHJjbXAoc2ItPnNfdHlwZS0+bmFtZSwgInJvb3RmcyIpOwogfQogCiBzdGF0aWMgaW50IHNiX2ZpbmlzaF9zZXRfb3B0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQpAQCAtNDU2LDEwICs0NDcsNiBAQAogCWlmIChzYnNlYy0+YmVoYXZpb3IgPiBBUlJBWV9TSVpFKGxhYmVsaW5nX2JlaGF2aW9ycykpCiAJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogaW5pdGlhbGl6ZWQgKGRldiAlcywgdHlwZSAlcyksIHVua25vd24gYmVoYXZpb3JcbiIsCiAJCSAgICAgICBzYi0+c19pZCwgc2ItPnNfdHlwZS0+bmFtZSk7Ci0JZWxzZQotCQlwcmludGsoS0VSTl9ERUJVRyAiU0VMaW51eDogaW5pdGlhbGl6ZWQgKGRldiAlcywgdHlwZSAlcyksICVzXG4iLAotCQkgICAgICAgc2ItPnNfaWQsIHNiLT5zX3R5cGUtPm5hbWUsCi0JCSAgICAgICBsYWJlbGluZ19iZWhhdmlvcnNbc2JzZWMtPmJlaGF2aW9yLTFdKTsKIAogCXNic2VjLT5mbGFncyB8PSBTRV9TQklOSVRJQUxJWkVEOwogCWlmIChzZWxpbnV4X2lzX3NibGFiZWxfbW50KHNiKSkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYwppbmRleCBiYzJhNTg2Li43NGFhMjI0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCkBAIC0yODksMTIgKzI4OSwxNiBAQAogCQlnb3RvIG91dDsKIAogCXAtPmZpbGVuYW1lX3RyYW5zID0gaGFzaHRhYl9jcmVhdGUoZmlsZW5hbWV0cl9oYXNoLCBmaWxlbmFtZXRyX2NtcCwgKDEgPDwgMTApKTsKLQlpZiAoIXAtPmZpbGVuYW1lX3RyYW5zKQorCWlmICghcC0+ZmlsZW5hbWVfdHJhbnMpIHsKKwkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKKwl9CiAKIAlwLT5yYW5nZV90ciA9IGhhc2h0YWJfY3JlYXRlKHJhbmdldHJfaGFzaCwgcmFuZ2V0cl9jbXAsIDI1Nik7Ci0JaWYgKCFwLT5yYW5nZV90cikKKwlpZiAoIXAtPnJhbmdlX3RyKSB7CisJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CisJfQogCiAJZWJpdG1hcF9pbml0KCZwLT5maWxlbmFtZV90cmFuc190dHlwZXMpOwogCWViaXRtYXBfaW5pdCgmcC0+cG9saWN5Y2Fwcyk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9LY29uZmlnIGIvc2VjdXJpdHkvc21hY2svS2NvbmZpZwppbmRleCBiMDY1Zjk3Li4yNzFhZGFlIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9LY29uZmlnCisrKyBiL3NlY3VyaXR5L3NtYWNrL0tjb25maWcKQEAgLTI4LDMgKzI4LDE1IEBACiAJICBhY2Nlc3MgcnVsZSBzZXQgb25jZSB0aGUgYmVoYXZpb3IgaXMgd2VsbCB1bmRlcnN0b29kLgogCSAgVGhpcyBpcyBhIHN1cGVyaW9yIG1lY2hhbmlzbSB0byB0aGUgb2Z0IGFidXNlZAogCSAgInBlcm1pc3NpdmUiIG1vZGUgb2Ygb3RoZXIgc3lzdGVtcy4KKwkgIElmIHlvdSBhcmUgdW5zdXJlIGhvdyB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgYW5zd2VyIE4uCisKK2NvbmZpZyBTRUNVUklUWV9TTUFDS19ORVRGSUxURVIKKwlib29sICJQYWNrZXQgbWFya2luZyB1c2luZyBzZWNtYXJrcyBmb3IgbmV0ZmlsdGVyIgorCWRlcGVuZHMgb24gU0VDVVJJVFlfU01BQ0sKKwlkZXBlbmRzIG9uIE5FVFdPUktfU0VDTUFSSworCWRlcGVuZHMgb24gTkVURklMVEVSCisJZGVmYXVsdCBuCisJaGVscAorCSAgVGhpcyBlbmFibGVzIHNlY3VyaXR5IG1hcmtpbmcgb2YgbmV0d29yayBwYWNrZXRzIHVzaW5nCisJICBTbWFjayBsYWJlbHMuCisJICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svTWFrZWZpbGUgYi9zZWN1cml0eS9zbWFjay9NYWtlZmlsZQppbmRleCA2N2E2M2FhLi5lZTJlYmQ1IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9NYWtlZmlsZQorKysgYi9zZWN1cml0eS9zbWFjay9NYWtlZmlsZQpAQCAtNSwzICs1LDQgQEAKIG9iai0kKENPTkZJR19TRUNVUklUWV9TTUFDSykgOj0gc21hY2subwogCiBzbWFjay15IDo9IHNtYWNrX2xzbS5vIHNtYWNrX2FjY2Vzcy5vIHNtYWNrZnMubworc21hY2stJChDT05GSUdfU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSKSArPSBzbWFja19uZXRmaWx0ZXIubwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2suaCBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrLmgKaW5kZXggYjgyOGEzNy4uNjdjY2I3YiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2suaAorKysgYi9zZWN1cml0eS9zbWFjay9zbWFjay5oCkBAIC0yNDgsNiArMjQ4LDcgQEAKIC8qCiAgKiBTaGFyZWQgZGF0YS4KICAqLworZXh0ZXJuIGludCBzbWFja19lbmFibGVkOwogZXh0ZXJuIGludCBzbWFja19jaXBzb19kaXJlY3Q7CiBleHRlcm4gaW50IHNtYWNrX2NpcHNvX21hcHBlZDsKIGV4dGVybiBzdHJ1Y3Qgc21hY2tfa25vd24gKnNtYWNrX25ldF9hbWJpZW50OwpAQCAtMjk4LDYgKzI5OSwxNiBAQAogCXJldHVybiB0c3AtPnNta190YXNrOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbWFja19rbm93biAqc21rX29mX3Rhc2tfc3RydWN0KGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKK3sKKwlzdHJ1Y3Qgc21hY2tfa25vd24gKnNrcDsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlza3AgPSBzbWtfb2ZfdGFzayhfX3Rhc2tfY3JlZCh0KS0+c2VjdXJpdHkpOworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBza3A7Cit9CisKIC8qCiAgKiBQcmVzZW50IGEgcG9pbnRlciB0byB0aGUgZm9ya2VkIHNtYWNrIGxhYmVsIGVudHJ5IGluIGFuIHRhc2sgYmxvYi4KICAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwppbmRleCBmMWIxN2E0Li5hMGNjY2U0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYworKysgYi9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYwpAQCAtNDMsOCArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KICNpbmNsdWRlICJzbWFjay5oIgogCi0jZGVmaW5lIHRhc2tfc2VjdXJpdHkodGFzaykJKHRhc2tfY3JlZF94eHgoKHRhc2spLCBzZWN1cml0eSkpCi0KICNkZWZpbmUgVFJBTlNfVFJVRQkiVFJVRSIKICNkZWZpbmUgVFJBTlNfVFJVRV9TSVpFCTQKIApAQCAtNTIsOCArNTAsMTEgQEAKICNkZWZpbmUgU01LX1JFQ0VJVklORwkxCiAjZGVmaW5lIFNNS19TRU5ESU5HCTIKIAorI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpICYmICFkZWZpbmVkKENPTkZJR19TRUNVUklUWV9TTUFDS19ORVRGSUxURVIpCiBMSVNUX0hFQUQoc21rX2lwdjZfcG9ydF9saXN0KTsKKyNlbmRpZiAvKiBDT05GSUdfSVBWNiAmJiAhQ09ORklHX1NFQ1VSSVRZX1NNQUNLX05FVEZJTFRFUiAqLwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpzbWFja19pbm9kZV9jYWNoZTsKK2ludCBzbWFja19lbmFibGVkOwogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NNQUNLX0JSSU5HVVAKIHN0YXRpYyB2b2lkIHNta19idV9tb2RlKGludCBtb2RlLCBjaGFyICpzKQpAQCAtMTIwLDcgKzEyMSw3IEBACiBzdGF0aWMgaW50IHNta19idV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqb3RwLCBpbnQgbW9kZSwgaW50IHJjKQogewogCXN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBjdXJyZW50X3NlY3VyaXR5KCk7Ci0Jc3RydWN0IHRhc2tfc21hY2sgKm90c3AgPSB0YXNrX3NlY3VyaXR5KG90cCk7CisJc3RydWN0IHNtYWNrX2tub3duICpzbWtfdGFzayA9IHNta19vZl90YXNrX3N0cnVjdChvdHApOwogCWNoYXIgYWNjW1NNS19OVU1fQUNDRVNTX1RZUEUgKyAxXTsKIAogCWlmIChyYyA8PSAwKQpAQCAtMTI4LDcgKzEyOSw3IEBACiAKIAlzbWtfYnVfbW9kZShtb2RlLCBhY2MpOwogCXByX2luZm8oIlNtYWNrIEJyaW5ndXA6ICglcyAlcyAlcykgJXMgdG8gJXNcbiIsCi0JCXRzcC0+c21rX3Rhc2stPnNta19rbm93biwgb3RzcC0+c21rX3Rhc2stPnNta19rbm93biwgYWNjLAorCQl0c3AtPnNta190YXNrLT5zbWtfa25vd24sIHNta190YXNrLT5zbWtfa25vd24sIGFjYywKIAkJY3VycmVudC0+Y29tbSwgb3RwLT5jb21tKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MCw3ICsxNjEsNyBAQAogewogCXN0cnVjdCB0YXNrX3NtYWNrICp0c3AgPSBjdXJyZW50X3NlY3VyaXR5KCk7CiAJc3RydWN0IHNtYWNrX2tub3duICpzc2twID0gdHNwLT5zbWtfdGFzazsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9pbm9kZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShmaWxlKTsKIAljaGFyIGFjY1tTTUtfTlVNX0FDQ0VTU19UWVBFICsgMV07CiAKIAlpZiAocmMgPD0gMCkKQEAgLTE2OCw3ICsxNjksNyBAQAogCiAJc21rX2J1X21vZGUobW9kZSwgYWNjKTsKIAlwcl9pbmZvKCJTbWFjayBCcmluZ3VwOiAoJXMgJXMgJXMpIGZpbGU9KCVzICVsZCAlcEQpICVzXG4iLAotCQlzc2twLT5zbWtfa25vd24sIChjaGFyICopZmlsZS0+Zl9zZWN1cml0eSwgYWNjLAorCQlzc2twLT5zbWtfa25vd24sIHNta19vZl9pbm9kZShpbm9kZSktPnNta19rbm93biwgYWNjLAogCQlpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vLCBmaWxlLAogCQljdXJyZW50LT5jb21tKTsKIAlyZXR1cm4gMDsKQEAgLTIwMiw2ICsyMDMsNyBAQAogCiAvKioKICAqIHNta19mZXRjaCAtIEZldGNoIHRoZSBzbWFjayBsYWJlbCBmcm9tIGEgZmlsZS4KKyAqIEBuYW1lOiB0eXBlIG9mIHRoZSBsYWJlbCAoYXR0cmlidXRlKQogICogQGlwOiBhIHBvaW50ZXIgdG8gdGhlIGlub2RlCiAgKiBAZHA6IGEgcG9pbnRlciB0byB0aGUgZGVudHJ5CiAgKgpAQCAtMjU0LDcgKzI1Niw5IEBACiAKIC8qKgogICogbmV3X3Rhc2tfc21hY2sgLSBhbGxvY2F0ZSBhIHRhc2sgc2VjdXJpdHkgYmxvYgotICogQHNtYWNrOiBhIHBvaW50ZXIgdG8gdGhlIFNtYWNrIGxhYmVsIHRvIHVzZSBpbiB0aGUgYmxvYgorICogQHRhc2s6IGEgcG9pbnRlciB0byB0aGUgU21hY2sgbGFiZWwgZm9yIHRoZSBydW5uaW5nIHRhc2sKKyAqIEBmb3JrZWQ6IGEgcG9pbnRlciB0byB0aGUgU21hY2sgbGFiZWwgZm9yIHRoZSBmb3JrZWQgdGFzaworICogQGdmcDogdHlwZSBvZiB0aGUgbWVtb3J5IGZvciB0aGUgYWxsb2NhdGlvbgogICoKICAqIFJldHVybnMgdGhlIG5ldyBibG9iIG9yIE5VTEwgaWYgdGhlcmUncyBubyBtZW1vcnkgYXZhaWxhYmxlCiAgKi8KQEAgLTI3Nyw4ICsyODEsOSBAQAogCiAvKioKICAqIHNta19jb3B5X3J1bGVzIC0gY29weSBhIHJ1bGUgc2V0Ci0gKiBAbmhlYWQgLSBuZXcgcnVsZXMgaGVhZGVyIHBvaW50ZXIKLSAqIEBvaGVhZCAtIG9sZCBydWxlcyBoZWFkZXIgcG9pbnRlcgorICogQG5oZWFkOiBuZXcgcnVsZXMgaGVhZGVyIHBvaW50ZXIKKyAqIEBvaGVhZDogb2xkIHJ1bGVzIGhlYWRlciBwb2ludGVyCisgKiBAZ2ZwOiB0eXBlIG9mIHRoZSBtZW1vcnkgZm9yIHRoZSBhbGxvY2F0aW9uCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FTk9NRU0gb24gZXJyb3IKICAqLwpAQCAtMzQ1LDcgKzM1MCw4IEBACiAJCXNhaXAgPSAmYWQ7CiAJfQogCi0JdHNwID0gdGFza19zZWN1cml0eSh0cmFjZXIpOworCXJjdV9yZWFkX2xvY2soKTsKKwl0c3AgPSBfX3Rhc2tfY3JlZCh0cmFjZXIpLT5zZWN1cml0eTsKIAl0cmFjZXJfa25vd24gPSBzbWtfb2ZfdGFzayh0c3ApOwogCiAJaWYgKChtb2RlICYgUFRSQUNFX01PREVfQVRUQUNIKSAmJgpAQCAtMzY1LDExICszNzEsMTQgQEAKIAkJCQkgIHRyYWNlZV9rbm93bi0+c21rX2tub3duLAogCQkJCSAgMCwgcmMsIHNhaXApOwogCisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJLyogSW4gY2FzZSBvZiBydWxlPT1TTUFDS19QVFJBQ0VfREVGQVVMVCBvciBtb2RlPT1QVFJBQ0VfTU9ERV9SRUFEICovCiAJcmMgPSBzbWtfdHNrYWNjKHRzcCwgdHJhY2VlX2tub3duLCBzbWtfcHRyYWNlX21vZGUobW9kZSksIHNhaXApOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC0zOTYsNyArNDA1LDcgQEAKIAlpZiAocmMgIT0gMCkKIAkJcmV0dXJuIHJjOwogCi0Jc2twID0gc21rX29mX3Rhc2sodGFza19zZWN1cml0eShjdHApKTsKKwlza3AgPSBzbWtfb2ZfdGFza19zdHJ1Y3QoY3RwKTsKIAogCXJjID0gc21rX3B0cmFjZV9ydWxlX2NoZWNrKGN1cnJlbnQsIHNrcCwgbW9kZSwgX19mdW5jX18pOwogCXJldHVybiByYzsKQEAgLTc5Niw3ICs4MDUsNyBAQAogCWlmIChuYW1lKQogCQkqbmFtZSA9IFhBVFRSX1NNQUNLX1NVRkZJWDsKIAotCWlmICh2YWx1ZSkgeworCWlmICh2YWx1ZSAmJiBsZW4pIHsKIAkJcmN1X3JlYWRfbG9jaygpOwogCQltYXkgPSBzbWtfYWNjZXNzX2VudHJ5KHNrcC0+c21rX2tub3duLCBkc3AtPnNta19rbm93biwKIAkJCQkgICAgICAgJnNrcC0+c21rX3J1bGVzKTsKQEAgLTgxNywxMCArODI2LDkgQEAKIAkJKnZhbHVlID0ga3N0cmR1cChpc3AtPnNta19rbm93biwgR0ZQX05PRlMpOwogCQlpZiAoKnZhbHVlID09IE5VTEwpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKLQlpZiAobGVuKQogCQkqbGVuID0gc3RybGVuKGlzcC0+c21rX2tub3duKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNDQsNiArMTM1Miw5IEBACiAgKiBUaGUgc2VjdXJpdHkgYmxvYiBmb3IgYSBmaWxlIGlzIGEgcG9pbnRlciB0byB0aGUgbWFzdGVyCiAgKiBsYWJlbCBsaXN0LCBzbyBubyBhbGxvY2F0aW9uIGlzIGRvbmUuCiAgKgorICogZl9zZWN1cml0eSBpcyB0aGUgb3duZXIgc2VjdXJpdHkgaW5mb3JtYXRpb24uIEl0CisgKiBpc24ndCB1c2VkIG9uIGZpbGUgYWNjZXNzIGNoZWNrcywgaXQncyBmb3Igc2VuZF9zaWdpby4KKyAqCiAgKiBSZXR1cm5zIDAKICAqLwogc3RhdGljIGludCBzbWFja19maWxlX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMTM4MSwxNyArMTM5MiwxOCBAQAogewogCWludCByYyA9IDA7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCiAJc21rX2FkX2luaXQoJmFkLCBfX2Z1bmNfXywgTFNNX0FVRElUX0RBVEFfUEFUSCk7CiAJc21rX2FkX3NldGZpZWxkX3VfZnNfcGF0aCgmYWQsIGZpbGUtPmZfcGF0aCk7CiAKIAlpZiAoX0lPQ19ESVIoY21kKSAmIF9JT0NfV1JJVEUpIHsKLQkJcmMgPSBzbWtfY3VyYWNjKGZpbGUtPmZfc2VjdXJpdHksIE1BWV9XUklURSwgJmFkKTsKKwkJcmMgPSBzbWtfY3VyYWNjKHNta19vZl9pbm9kZShpbm9kZSksIE1BWV9XUklURSwgJmFkKTsKIAkJcmMgPSBzbWtfYnVfZmlsZShmaWxlLCBNQVlfV1JJVEUsIHJjKTsKIAl9CiAKIAlpZiAocmMgPT0gMCAmJiAoX0lPQ19ESVIoY21kKSAmIF9JT0NfUkVBRCkpIHsKLQkJcmMgPSBzbWtfY3VyYWNjKGZpbGUtPmZfc2VjdXJpdHksIE1BWV9SRUFELCAmYWQpOworCQlyYyA9IHNta19jdXJhY2Moc21rX29mX2lub2RlKGlub2RlKSwgTUFZX1JFQUQsICZhZCk7CiAJCXJjID0gc21rX2J1X2ZpbGUoZmlsZSwgTUFZX1JFQUQsIHJjKTsKIAl9CiAKQEAgLTE0MDksMTAgKzE0MjEsMTEgQEAKIHsKIAlzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7CiAJaW50IHJjOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCiAJc21rX2FkX2luaXQoJmFkLCBfX2Z1bmNfXywgTFNNX0FVRElUX0RBVEFfUEFUSCk7CiAJc21rX2FkX3NldGZpZWxkX3VfZnNfcGF0aCgmYWQsIGZpbGUtPmZfcGF0aCk7Ci0JcmMgPSBzbWtfY3VyYWNjKGZpbGUtPmZfc2VjdXJpdHksIE1BWV9MT0NLLCAmYWQpOworCXJjID0gc21rX2N1cmFjYyhzbWtfb2ZfaW5vZGUoaW5vZGUpLCBNQVlfTE9DSywgJmFkKTsKIAlyYyA9IHNta19idV9maWxlKGZpbGUsIE1BWV9MT0NLLCByYyk7CiAJcmV0dXJuIHJjOwogfQpAQCAtMTQzNCw3ICsxNDQ3LDcgQEAKIHsKIAlzdHJ1Y3Qgc21rX2F1ZGl0X2luZm8gYWQ7CiAJaW50IHJjID0gMDsKLQorCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEZfR0VUTEs6CkBAIC0xNDQzLDE0ICsxNDU2LDE0IEBACiAJY2FzZSBGX1NFVExLVzoKIAkJc21rX2FkX2luaXQoJmFkLCBfX2Z1bmNfXywgTFNNX0FVRElUX0RBVEFfUEFUSCk7CiAJCXNta19hZF9zZXRmaWVsZF91X2ZzX3BhdGgoJmFkLCBmaWxlLT5mX3BhdGgpOwotCQlyYyA9IHNta19jdXJhY2MoZmlsZS0+Zl9zZWN1cml0eSwgTUFZX0xPQ0ssICZhZCk7CisJCXJjID0gc21rX2N1cmFjYyhzbWtfb2ZfaW5vZGUoaW5vZGUpLCBNQVlfTE9DSywgJmFkKTsKIAkJcmMgPSBzbWtfYnVfZmlsZShmaWxlLCBNQVlfTE9DSywgcmMpOwogCQlicmVhazsKIAljYXNlIEZfU0VUT1dOOgogCWNhc2UgRl9TRVRTSUc6CiAJCXNta19hZF9pbml0KCZhZCwgX19mdW5jX18sIExTTV9BVURJVF9EQVRBX1BBVEgpOwogCQlzbWtfYWRfc2V0ZmllbGRfdV9mc19wYXRoKCZhZCwgZmlsZS0+Zl9wYXRoKTsKLQkJcmMgPSBzbWtfY3VyYWNjKGZpbGUtPmZfc2VjdXJpdHksIE1BWV9XUklURSwgJmFkKTsKKwkJcmMgPSBzbWtfY3VyYWNjKHNta19vZl9pbm9kZShpbm9kZSksIE1BWV9XUklURSwgJmFkKTsKIAkJcmMgPSBzbWtfYnVfZmlsZShmaWxlLCBNQVlfV1JJVEUsIHJjKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE1NjgsMTQgKzE1ODEsMTAgQEAKICAqIHNtYWNrX2ZpbGVfc2V0X2Zvd25lciAtIHNldCB0aGUgZmlsZSBzZWN1cml0eSBibG9iIHZhbHVlCiAgKiBAZmlsZTogb2JqZWN0IGluIHF1ZXN0aW9uCiAgKgotICogUmV0dXJucyAwCi0gKiBGdXJ0aGVyIHJlc2VhcmNoIG1heSBiZSByZXF1aXJlZCBvbiB0aGlzIG9uZS4KICAqLwogc3RhdGljIHZvaWQgc21hY2tfZmlsZV9zZXRfZm93bmVyKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBzbWFja19rbm93biAqc2twID0gc21rX29mX2N1cnJlbnQoKTsKLQotCWZpbGUtPmZfc2VjdXJpdHkgPSBza3A7CisJZmlsZS0+Zl9zZWN1cml0eSA9IHNta19vZl9jdXJyZW50KCk7CiB9CiAKIC8qKgpAQCAtMTYyNyw2ICsxNjM2LDcgQEAKIAlpbnQgcmM7CiAJaW50IG1heSA9IDA7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCiAJc21rX2FkX2luaXQoJmFkLCBfX2Z1bmNfXywgTFNNX0FVRElUX0RBVEFfUEFUSCk7CiAJc21rX2FkX3NldGZpZWxkX3VfZnNfcGF0aCgmYWQsIGZpbGUtPmZfcGF0aCk7CkBAIC0xNjM4LDcgKzE2NDgsNyBAQAogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKIAkJbWF5IHw9IE1BWV9XUklURTsKIAotCXJjID0gc21rX2N1cmFjYyhmaWxlLT5mX3NlY3VyaXR5LCBtYXksICZhZCk7CisJcmMgPSBzbWtfY3VyYWNjKHNta19vZl9pbm9kZShpbm9kZSksIG1heSwgJmFkKTsKIAlyYyA9IHNta19idV9maWxlKGZpbGUsIG1heSwgcmMpOwogCXJldHVybiByYzsKIH0KQEAgLTE2NTgsMjEgKzE2NjgsMTcgQEAKIHN0YXRpYyBpbnQgc21hY2tfZmlsZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCkKIHsKIAlzdHJ1Y3QgdGFza19zbWFjayAqdHNwID0gY3JlZC0+c2VjdXJpdHk7Ci0Jc3RydWN0IGlub2RlX3NtYWNrICppc3AgPSBmaWxlX2lub2RlKGZpbGUpLT5pX3NlY3VyaXR5OworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpOwogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKIAlpbnQgcmM7CiAKLQlpZiAoc21hY2tfcHJpdmlsZWdlZChDQVBfTUFDX09WRVJSSURFKSkgewotCQlmaWxlLT5mX3NlY3VyaXR5ID0gaXNwLT5zbWtfaW5vZGU7CisJaWYgKHNtYWNrX3ByaXZpbGVnZWQoQ0FQX01BQ19PVkVSUklERSkpCiAJCXJldHVybiAwOwotCX0KIAogCXNta19hZF9pbml0KCZhZCwgX19mdW5jX18sIExTTV9BVURJVF9EQVRBX1BBVEgpOwogCXNta19hZF9zZXRmaWVsZF91X2ZzX3BhdGgoJmFkLCBmaWxlLT5mX3BhdGgpOwotCXJjID0gc21rX2FjY2Vzcyh0c3AtPnNta190YXNrLCBpc3AtPnNta19pbm9kZSwgTUFZX1JFQUQsICZhZCk7CisJcmMgPSBzbWtfYWNjZXNzKHRzcC0+c21rX3Rhc2ssIHNta19vZl9pbm9kZShpbm9kZSksIE1BWV9SRUFELCAmYWQpOwogCXJjID0gc21rX2J1X2NyZWRmaWxlKGNyZWQsIGZpbGUsIE1BWV9SRUFELCByYyk7Ci0JaWYgKHJjID09IDApCi0JCWZpbGUtPmZfc2VjdXJpdHkgPSBpc3AtPnNta19pbm9kZTsKIAogCXJldHVybiByYzsKIH0KQEAgLTE4MjYsNyArMTgzMiw3IEBACiAJCQkJY29uc3QgY2hhciAqY2FsbGVyKQogewogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKLQlzdHJ1Y3Qgc21hY2tfa25vd24gKnNrcCA9IHNta19vZl90YXNrKHRhc2tfc2VjdXJpdHkocCkpOworCXN0cnVjdCBzbWFja19rbm93biAqc2twID0gc21rX29mX3Rhc2tfc3RydWN0KHApOwogCWludCByYzsKIAogCXNta19hZF9pbml0KCZhZCwgY2FsbGVyLCBMU01fQVVESVRfREFUQV9UQVNLKTsKQEAgLTE4NzksNyArMTg4NSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIHNtYWNrX3Rhc2tfZ2V0c2VjaWQoc3RydWN0IHRhc2tfc3RydWN0ICpwLCB1MzIgKnNlY2lkKQogewotCXN0cnVjdCBzbWFja19rbm93biAqc2twID0gc21rX29mX3Rhc2sodGFza19zZWN1cml0eShwKSk7CisJc3RydWN0IHNtYWNrX2tub3duICpza3AgPSBzbWtfb2ZfdGFza19zdHJ1Y3QocCk7CiAKIAkqc2VjaWQgPSBza3AtPnNta19zZWNpZDsKIH0KQEAgLTE5ODYsNyArMTk5Miw3IEBACiB7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOwogCXN0cnVjdCBzbWFja19rbm93biAqc2twOwotCXN0cnVjdCBzbWFja19rbm93biAqdGtwID0gc21rX29mX3Rhc2sodGFza19zZWN1cml0eShwKSk7CisJc3RydWN0IHNtYWNrX2tub3duICp0a3AgPSBzbWtfb2ZfdGFza19zdHJ1Y3QocCk7CiAJaW50IHJjOwogCiAJc21rX2FkX2luaXQoJmFkLCBfX2Z1bmNfXywgTFNNX0FVRElUX0RBVEFfVEFTSyk7CkBAIC0yMDQwLDcgKzIwNDYsNyBAQAogc3RhdGljIHZvaWQgc21hY2tfdGFza190b19pbm9kZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IGlub2RlX3NtYWNrICppc3AgPSBpbm9kZS0+aV9zZWN1cml0eTsKLQlzdHJ1Y3Qgc21hY2tfa25vd24gKnNrcCA9IHNta19vZl90YXNrKHRhc2tfc2VjdXJpdHkocCkpOworCXN0cnVjdCBzbWFja19rbm93biAqc2twID0gc21rX29mX3Rhc2tfc3RydWN0KHApOwogCiAJaXNwLT5zbWtfaW5vZGUgPSBza3A7CiB9CkBAIC0yMjEyLDYgKzIyMTgsNyBAQAogCXJldHVybiBzbWFja19uZXRsYWJlbChzaywgc2tfbGJsKTsKIH0KIAorI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpICYmICFkZWZpbmVkKENPTkZJR19TRUNVUklUWV9TTUFDS19ORVRGSUxURVIpCiAvKioKICAqIHNta19pcHY2X3BvcnRfbGFiZWwgLSBTbWFjayBwb3J0IGFjY2VzcyB0YWJsZSBtYW5hZ2VtZW50CiAgKiBAc29jazogc29ja2V0CkBAIC0yMzYxLDYgKzIzNjgsNyBAQAogCXJjID0gc21rX2J1X25vdGUoIklQdjYgcG9ydCBjaGVjayIsIHNrcCwgb2JqZWN0LCBNQVlfV1JJVEUsIHJjKTsKIAlyZXR1cm4gcmM7CiB9CisjZW5kaWYgLyogQ09ORklHX0lQVjYgJiYgIUNPTkZJR19TRUNVUklUWV9TTUFDS19ORVRGSUxURVIgKi8KIAogLyoqCiAgKiBzbWFja19pbm9kZV9zZXRzZWN1cml0eSAtIHNldCBzbWFjayB4YXR0cnMKQEAgLTI0MjEsOCArMjQyOSwxMCBAQAogCX0gZWxzZQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KSAmJiAhZGVmaW5lZChDT05GSUdfU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSKQogCWlmIChzb2NrLT5zay0+c2tfZmFtaWx5ID09IFBGX0lORVQ2KQogCQlzbWtfaXB2Nl9wb3J0X2xhYmVsKHNvY2ssIE5VTEwpOworI2VuZGlmIC8qIENPTkZJR19JUFY2ICYmICFDT05GSUdfU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI0NTAsNiArMjQ2MCw3IEBACiAJcmV0dXJuIHNtYWNrX25ldGxhYmVsKHNvY2stPnNrLCBTTUFDS19DSVBTT19TT0NLRVQpOwogfQogCisjaWZuZGVmIENPTkZJR19TRUNVUklUWV9TTUFDS19ORVRGSUxURVIKIC8qKgogICogc21hY2tfc29ja2V0X2JpbmQgLSByZWNvcmQgcG9ydCBiaW5kaW5nIGluZm9ybWF0aW9uLgogICogQHNvY2s6IHRoZSBzb2NrZXQKQEAgLTI0NjMsMTEgKzI0NzQsMTQgQEAKIHN0YXRpYyBpbnQgc21hY2tfc29ja2V0X2JpbmQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICphZGRyZXNzLAogCQkJCWludCBhZGRybGVuKQogeworI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCiAJaWYgKHNvY2stPnNrICE9IE5VTEwgJiYgc29jay0+c2stPnNrX2ZhbWlseSA9PSBQRl9JTkVUNikKIAkJc21rX2lwdjZfcG9ydF9sYWJlbChzb2NrLCBhZGRyZXNzKTsKKyNlbmRpZgogCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogIUNPTkZJR19TRUNVUklUWV9TTUFDS19ORVRGSUxURVIgKi8KIAogLyoqCiAgKiBzbWFja19zb2NrZXRfY29ubmVjdCAtIGNvbm5lY3QgYWNjZXNzIGNoZWNrCkBAIC0yNDk2LDggKzI1MTAsMTAgQEAKIAljYXNlIFBGX0lORVQ2OgogCQlpZiAoYWRkcmxlbiA8IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkKIAkJCXJldHVybiAtRUlOVkFMOworI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpICYmICFkZWZpbmVkKENPTkZJR19TRUNVUklUWV9TTUFDS19ORVRGSUxURVIpCiAJCXJjID0gc21rX2lwdjZfcG9ydF9jaGVjayhzb2NrLT5zaywgKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXAsCiAJCQkJCQlTTUtfQ09OTkVDVElORyk7CisjZW5kaWYgLyogQ09ORklHX0lQVjYgJiYgIUNPTkZJR19TRUNVUklUWV9TTUFDS19ORVRGSUxURVIgKi8KIAkJYnJlYWs7CiAJfQogCXJldHVybiByYzsKQEAgLTMwMzMsNyArMzA0OSw4IEBACiAJICogb2YgdGhlIHN1cGVyYmxvY2suCiAJICovCiAJaWYgKG9wdF9kZW50cnktPmRfcGFyZW50ID09IG9wdF9kZW50cnkpIHsKLQkJaWYgKHNicC0+c19tYWdpYyA9PSBDR1JPVVBfU1VQRVJfTUFHSUMpIHsKKwkJc3dpdGNoIChzYnAtPnNfbWFnaWMpIHsKKwkJY2FzZSBDR1JPVVBfU1VQRVJfTUFHSUM6CiAJCQkvKgogCQkJICogVGhlIGNncm91cCBmaWxlc3lzdGVtIGlzIG5ldmVyIG1vdW50ZWQsCiAJCQkgKiBzbyB0aGVyZSdzIG5vIG9wcG9ydHVuaXR5IHRvIHNldCB0aGUgbW91bnQKQEAgLTMwNDEsOCArMzA1OCwxOSBAQAogCQkJICovCiAJCQlzYnNwLT5zbWtfcm9vdCA9ICZzbWFja19rbm93bl9zdGFyOwogCQkJc2JzcC0+c21rX2RlZmF1bHQgPSAmc21hY2tfa25vd25fc3RhcjsKKwkJCWlzcC0+c21rX2lub2RlID0gc2JzcC0+c21rX3Jvb3Q7CisJCQlicmVhazsKKwkJY2FzZSBUTVBGU19NQUdJQzoKKwkJCS8qCisJCQkgKiBXaGF0IGFib3V0IHNobWVtL3RtcGZzIGFub255bW91cyBmaWxlcyB3aXRoIGRlbnRyeQorCQkJICogb2J0YWluZWQgZnJvbSBkX2FsbG9jX3BzZXVkbygpPworCQkJICovCisJCQlpc3AtPnNta19pbm9kZSA9IHNta19vZl9jdXJyZW50KCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlzcC0+c21rX2lub2RlID0gc2JzcC0+c21rX3Jvb3Q7CisJCQlicmVhazsKIAkJfQotCQlpc3AtPnNta19pbm9kZSA9IHNic3AtPnNta19yb290OwogCQlpc3AtPnNta19mbGFncyB8PSBTTUtfSU5PREVfSU5TVEFOVDsKIAkJZ290byB1bmxvY2thbmRvdXQ7CiAJfQpAQCAtMzIwMCw3ICszMjI4LDcgQEAKICAqLwogc3RhdGljIGludCBzbWFja19nZXRwcm9jYXR0cihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNoYXIgKm5hbWUsIGNoYXIgKip2YWx1ZSkKIHsKLQlzdHJ1Y3Qgc21hY2tfa25vd24gKnNrcCA9IHNta19vZl90YXNrKHRhc2tfc2VjdXJpdHkocCkpOworCXN0cnVjdCBzbWFja19rbm93biAqc2twID0gc21rX29mX3Rhc2tfc3RydWN0KHApOwogCWNoYXIgKmNwOwogCWludCBzbGVuOwogCkBAIC0zMjk3LDcgKzMzMjUsNyBAQAogCiAJaWYgKCFzbWFja19wcml2aWxlZ2VkKENBUF9NQUNfT1ZFUlJJREUpKSB7CiAJCXNrcCA9IHNzcC0+c21rX291dDsKLQkJb2twID0gb3NwLT5zbWtfb3V0OworCQlva3AgPSBvc3AtPnNta19pbjsKICNpZmRlZiBDT05GSUdfQVVESVQKIAkJc21rX2FkX2luaXRfbmV0KCZhZCwgX19mdW5jX18sIExTTV9BVURJVF9EQVRBX05FVCwgJm5ldCk7CiAJCXNta19hZF9zZXRmaWVsZF91X25ldF9zaygmYWQsIG90aGVyKTsKQEAgLTMzMDUsNyArMzMzMyw5IEBACiAJCXJjID0gc21rX2FjY2Vzcyhza3AsIG9rcCwgTUFZX1dSSVRFLCAmYWQpOwogCQlyYyA9IHNta19idV9ub3RlKCJVRFMgY29ubmVjdCIsIHNrcCwgb2twLCBNQVlfV1JJVEUsIHJjKTsKIAkJaWYgKHJjID09IDApIHsKLQkJCXJjID0gc21rX2FjY2Vzcyhva3AsIHNrcCwgTUFZX1dSSVRFLCBOVUxMKTsKKwkJCW9rcCA9IG9zcC0+c21rX291dDsKKwkJCXNrcCA9IHNzcC0+c21rX2luOworCQkJcmMgPSBzbWtfYWNjZXNzKG9rcCwgc2twLCBNQVlfV1JJVEUsICZhZCk7CiAJCQlyYyA9IHNta19idV9ub3RlKCJVRFMgY29ubmVjdCIsIG9rcCwgc2twLAogCQkJCQkJTUFZX1dSSVRFLCByYyk7CiAJCX0KQEAgLTMzNjYsNyArMzM5Niw5IEBACiAJCQkJaW50IHNpemUpCiB7CiAJc3RydWN0IHNvY2thZGRyX2luICpzaXAgPSAoc3RydWN0IHNvY2thZGRyX2luICopIG1zZy0+bXNnX25hbWU7CisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikgJiYgIWRlZmluZWQoQ09ORklHX1NFQ1VSSVRZX1NNQUNLX05FVEZJTFRFUikKIAlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYXAgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBtc2ctPm1zZ19uYW1lOworI2VuZGlmIC8qIENPTkZJR19JUFY2ICYmICFDT05GSUdfU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSICovCiAJaW50IHJjID0gMDsKIAogCS8qCkBAIC0zMzgwLDcgKzM0MTIsOSBAQAogCQlyYyA9IHNtYWNrX25ldGxhYmVsX3NlbmQoc29jay0+c2ssIHNpcCk7CiAJCWJyZWFrOwogCWNhc2UgQUZfSU5FVDY6CisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikgJiYgIWRlZmluZWQoQ09ORklHX1NFQ1VSSVRZX1NNQUNLX05FVEZJTFRFUikKIAkJcmMgPSBzbWtfaXB2Nl9wb3J0X2NoZWNrKHNvY2stPnNrLCBzYXAsIFNNS19TRU5ESU5HKTsKKyNlbmRpZiAvKiBDT05GSUdfSVBWNiAmJiAhQ09ORklHX1NFQ1VSSVRZX1NNQUNLX05FVEZJTFRFUiAqLwogCQlicmVhazsKIAl9CiAJcmV0dXJuIHJjOwpAQCAtMzQ3MSw2ICszNTA1LDcgQEAKIAlyZXR1cm4gc21hY2tfbmV0X2FtYmllbnQ7CiB9CiAKKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogc3RhdGljIGludCBzbWtfc2tiX3RvX2FkZHJfaXB2NihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaXApCiB7CiAJdTggbmV4dGhkcjsKQEAgLTM1MTcsNiArMzU1Miw3IEBACiAJfQogCXJldHVybiBwcm90bzsKIH0KKyNlbmRpZiAvKiBDT05GSUdfSVBWNiAqLwogCiAvKioKICAqIHNtYWNrX3NvY2tldF9zb2NrX3Jjdl9za2IgLSBTbWFjayBwYWNrZXQgZGVsaXZlcnkgYWNjZXNzIGNoZWNrCkBAIC0zNTI5LDE1ICszNTY1LDMwIEBACiB7CiAJc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciBzZWNhdHRyOwogCXN0cnVjdCBzb2NrZXRfc21hY2sgKnNzcCA9IHNrLT5za19zZWN1cml0eTsKLQlzdHJ1Y3Qgc21hY2tfa25vd24gKnNrcDsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNhZGQ7CisJc3RydWN0IHNtYWNrX2tub3duICpza3AgPSBOVUxMOwogCWludCByYyA9IDA7CiAJc3RydWN0IHNta19hdWRpdF9pbmZvIGFkOwogI2lmZGVmIENPTkZJR19BVURJVAogCXN0cnVjdCBsc21fbmV0d29ya19hdWRpdCBuZXQ7CiAjZW5kaWYKKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQorCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2FkZDsKKwlpbnQgcHJvdG87CisjZW5kaWYgLyogQ09ORklHX0lQVjYgKi8KKwogCXN3aXRjaCAoc2stPnNrX2ZhbWlseSkgewogCWNhc2UgUEZfSU5FVDoKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSCisJCS8qCisJCSAqIElmIHRoZXJlIGlzIGEgc2VjbWFyayB1c2UgaXQgcmF0aGVyIHRoYW4gdGhlIENJUFNPIGxhYmVsLgorCQkgKiBJZiB0aGVyZSBpcyBubyBzZWNtYXJrIGZhbGwgYmFjayB0byBDSVBTTy4KKwkJICogVGhlIHNlY21hcmsgaXMgYXNzdW1lZCB0byByZWZsZWN0IHBvbGljeSBiZXR0ZXIuCisJCSAqLworCQlpZiAoc2tiICYmIHNrYi0+c2VjbWFyayAhPSAwKSB7CisJCQlza3AgPSBzbWFja19mcm9tX3NlY2lkKHNrYi0+c2VjbWFyayk7CisJCQlnb3RvIGFjY2Vzc19jaGVjazsKKwkJfQorI2VuZGlmIC8qIENPTkZJR19TRUNVUklUWV9TTUFDS19ORVRGSUxURVIgKi8KIAkJLyoKIAkJICogVHJhbnNsYXRlIHdoYXQgbmV0bGFiZWwgZ2F2ZSB1cy4KIAkJICovCkBAIC0zNTUxLDYgKzM2MDIsOSBAQAogCiAJCW5ldGxibF9zZWNhdHRyX2Rlc3Ryb3koJnNlY2F0dHIpOwogCisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NNQUNLX05FVEZJTFRFUgorYWNjZXNzX2NoZWNrOgorI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FVRElUCiAJCXNta19hZF9pbml0X25ldCgmYWQsIF9fZnVuY19fLCBMU01fQVVESVRfREFUQV9ORVQsICZuZXQpOwogCQlhZC5hLnUubmV0LT5mYW1pbHkgPSBzay0+c2tfZmFtaWx5OwpAQCAtMzU2OSwxNCArMzYyMywzMiBAQAogCQlpZiAocmMgIT0gMCkKIAkJCW5ldGxibF9za2J1ZmZfZXJyKHNrYiwgcmMsIDApOwogCQlicmVhazsKKyNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogCWNhc2UgUEZfSU5FVDY6Ci0JCXJjID0gc21rX3NrYl90b19hZGRyX2lwdjYoc2tiLCAmc2FkZCk7Ci0JCWlmIChyYyA9PSBJUFBST1RPX1VEUCB8fCByYyA9PSBJUFBST1RPX1RDUCkKLQkJCXJjID0gc21rX2lwdjZfcG9ydF9jaGVjayhzaywgJnNhZGQsIFNNS19SRUNFSVZJTkcpOworCQlwcm90byA9IHNta19za2JfdG9fYWRkcl9pcHY2KHNrYiwgJnNhZGQpOworCQlpZiAocHJvdG8gIT0gSVBQUk9UT19VRFAgJiYgcHJvdG8gIT0gSVBQUk9UT19UQ1ApCisJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSCisJCWlmIChza2IgJiYgc2tiLT5zZWNtYXJrICE9IDApCisJCQlza3AgPSBzbWFja19mcm9tX3NlY2lkKHNrYi0+c2VjbWFyayk7CiAJCWVsc2UKLQkJCXJjID0gMDsKKwkJCXNrcCA9IHNtYWNrX25ldF9hbWJpZW50OworI2lmZGVmIENPTkZJR19BVURJVAorCQlzbWtfYWRfaW5pdF9uZXQoJmFkLCBfX2Z1bmNfXywgTFNNX0FVRElUX0RBVEFfTkVULCAmbmV0KTsKKwkJYWQuYS51Lm5ldC0+ZmFtaWx5ID0gc2stPnNrX2ZhbWlseTsKKwkJYWQuYS51Lm5ldC0+bmV0aWYgPSBza2ItPnNrYl9paWY7CisJCWlwdjZfc2tiX3RvX2F1ZGl0ZGF0YShza2IsICZhZC5hLCBOVUxMKTsKKyNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi8KKwkJcmMgPSBzbWtfYWNjZXNzKHNrcCwgc3NwLT5zbWtfaW4sIE1BWV9XUklURSwgJmFkKTsKKwkJcmMgPSBzbWtfYnVfbm90ZSgiSVB2NiBkZWxpdmVyeSIsIHNrcCwgc3NwLT5zbWtfaW4sCisJCQkJCU1BWV9XUklURSwgcmMpOworI2Vsc2UgLyogQ09ORklHX1NFQ1VSSVRZX1NNQUNLX05FVEZJTFRFUiAqLworCQlyYyA9IHNta19pcHY2X3BvcnRfY2hlY2soc2ssICZzYWRkLCBTTUtfUkVDRUlWSU5HKTsKKyNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSICovCiAJCWJyZWFrOworI2VuZGlmIC8qIENPTkZJR19JUFY2ICovCiAJfQorCiAJcmV0dXJuIHJjOwogfQogCkBAIC0zNjM4LDE2ICszNzEwLDI1IEBACiAJaWYgKHNrYiAhPSBOVUxMKSB7CiAJCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkKIAkJCWZhbWlseSA9IFBGX0lORVQ7CisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIAkJZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkKIAkJCWZhbWlseSA9IFBGX0lORVQ2OworI2VuZGlmIC8qIENPTkZJR19JUFY2ICovCiAJfQogCWlmIChmYW1pbHkgPT0gUEZfVU5TUEVDICYmIHNvY2sgIT0gTlVMTCkKIAkJZmFtaWx5ID0gc29jay0+c2stPnNrX2ZhbWlseTsKIAotCWlmIChmYW1pbHkgPT0gUEZfVU5JWCkgeworCXN3aXRjaCAoZmFtaWx5KSB7CisJY2FzZSBQRl9VTklYOgogCQlzc3AgPSBzb2NrLT5zay0+c2tfc2VjdXJpdHk7CiAJCXMgPSBzc3AtPnNta19vdXQtPnNta19zZWNpZDsKLQl9IGVsc2UgaWYgKGZhbWlseSA9PSBQRl9JTkVUIHx8IGZhbWlseSA9PSBQRl9JTkVUNikgeworCQlicmVhazsKKwljYXNlIFBGX0lORVQ6CisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX1NNQUNLX05FVEZJTFRFUgorCQlzID0gc2tiLT5zZWNtYXJrOworCQlpZiAocyAhPSAwKQorCQkJYnJlYWs7CisjZW5kaWYKIAkJLyoKIAkJICogVHJhbnNsYXRlIHdoYXQgbmV0bGFiZWwgZ2F2ZSB1cy4KIAkJICovCkBAIC0zNjYwLDYgKzM3NDEsMTQgQEAKIAkJCXMgPSBza3AtPnNta19zZWNpZDsKIAkJfQogCQluZXRsYmxfc2VjYXR0cl9kZXN0cm95KCZzZWNhdHRyKTsKKwkJYnJlYWs7CisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKKwljYXNlIFBGX0lORVQ2OgorI2lmZGVmIENPTkZJR19TRUNVUklUWV9TTUFDS19ORVRGSUxURVIKKwkJcyA9IHNrYi0+c2VjbWFyazsKKyNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSICovCisJCWJyZWFrOworI2VuZGlmIC8qIENPTkZJR19JUFY2ICovCiAJfQogCSpzZWNpZCA9IHM7CiAJaWYgKHMgPT0gMCkKQEAgLTM3MTUsNiArMzgwNCw3IEBACiAJc3RydWN0IGxzbV9uZXR3b3JrX2F1ZGl0IG5ldDsKICNlbmRpZgogCisjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIAlpZiAoZmFtaWx5ID09IFBGX0lORVQ2KSB7CiAJCS8qCiAJCSAqIEhhbmRsZSBtYXBwZWQgSVB2NCBwYWNrZXRzIGFycml2aW5nCkBAIC0zNzI2LDYgKzM4MTYsNyBAQAogCQllbHNlCiAJCQlyZXR1cm4gMDsKIAl9CisjZW5kaWYgLyogQ09ORklHX0lQVjYgKi8KIAogCW5ldGxibF9zZWNhdHRyX2luaXQoJnNlY2F0dHIpOwogCXJjID0gbmV0bGJsX3NrYnVmZl9nZXRhdHRyKHNrYiwgZmFtaWx5LCAmc2VjYXR0cik7CkBAIC0zODM0LDExICszOTI1LDExIEBACiAJa2V5LT5zZWN1cml0eSA9IE5VTEw7CiB9CiAKLS8qCisvKioKICAqIHNtYWNrX2tleV9wZXJtaXNzaW9uIC0gU21hY2sgYWNjZXNzIG9uIGEga2V5CiAgKiBAa2V5X3JlZjogZ2V0cyB0byB0aGUgb2JqZWN0CiAgKiBAY3JlZDogdGhlIGNyZWRlbnRpYWxzIHRvIHVzZQotICogQHBlcm06IHVudXNlZAorICogQHBlcm06IHJlcXVlc3RlZCBrZXkgcGVybWlzc2lvbnMKICAqCiAgKiBSZXR1cm4gMCBpZiB0aGUgdGFzayBoYXMgcmVhZCBhbmQgd3JpdGUgdG8gdGhlIG9iamVjdCwKICAqIGFuIGVycm9yIGNvZGUgb3RoZXJ3aXNlCkBAIC00MTg0LDcgKzQyNzUsOSBAQAogCS51bml4X21heV9zZW5kID0gCQlzbWFja191bml4X21heV9zZW5kLAogCiAJLnNvY2tldF9wb3N0X2NyZWF0ZSA9IAkJc21hY2tfc29ja2V0X3Bvc3RfY3JlYXRlLAorI2lmbmRlZiBDT05GSUdfU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSCiAJLnNvY2tldF9iaW5kID0JCQlzbWFja19zb2NrZXRfYmluZCwKKyNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfU01BQ0tfTkVURklMVEVSICovCiAJLnNvY2tldF9jb25uZWN0ID0JCXNtYWNrX3NvY2tldF9jb25uZWN0LAogCS5zb2NrZXRfc2VuZG1zZyA9CQlzbWFja19zb2NrZXRfc2VuZG1zZywKIAkuc29ja2V0X3NvY2tfcmN2X3NrYiA9IAkJc21hY2tfc29ja2V0X3NvY2tfcmN2X3NrYiwKQEAgLTQyNjUsNiArNDM1OCw4IEBACiAJaWYgKCFzZWN1cml0eV9tb2R1bGVfZW5hYmxlKCZzbWFja19vcHMpKQogCQlyZXR1cm4gMDsKIAorCXNtYWNrX2VuYWJsZWQgPSAxOworCiAJc21hY2tfaW5vZGVfY2FjaGUgPSBLTUVNX0NBQ0hFKGlub2RlX3NtYWNrLCAwKTsKIAlpZiAoIXNtYWNrX2lub2RlX2NhY2hlKQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX25ldGZpbHRlci5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbmV0ZmlsdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1MjYzMgotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX25ldGZpbHRlci5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiAgU2ltcGxpZmllZCBNQUMgS2VybmVsIChzbWFjaykgc2VjdXJpdHkgbW9kdWxlCisgKgorICogIFRoaXMgZmlsZSBjb250YWlucyB0aGUgU21hY2sgbmV0ZmlsdGVyIGltcGxlbWVudGF0aW9uCisgKgorICogIEF1dGhvcjoKKyAqCUNhc2V5IFNjaGF1ZmxlciA8Y2FzZXlAc2NoYXVmbGVyLWNhLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDE0IENhc2V5IFNjaGF1ZmxlciA8Y2FzZXlAc2NoYXVmbGVyLWNhLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLAorICoJYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjYuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlICJzbWFjay5oIgorCisjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc21hY2tfaXB2Nl9vdXRwdXQoY29uc3Qgc3RydWN0IG5mX2hvb2tfb3BzICpvcHMsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IsCisJCQkJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJCQkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJCQkJaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCit7CisJc3RydWN0IHNvY2tldF9zbWFjayAqc3NwOworCXN0cnVjdCBzbWFja19rbm93biAqc2twOworCisJaWYgKHNrYiAmJiBza2ItPnNrICYmIHNrYi0+c2stPnNrX3NlY3VyaXR5KSB7CisJCXNzcCA9IHNrYi0+c2stPnNrX3NlY3VyaXR5OworCQlza3AgPSBzc3AtPnNta19vdXQ7CisJCXNrYi0+c2VjbWFyayA9IHNrcC0+c21rX3NlY2lkOworCX0KKworCXJldHVybiBORl9BQ0NFUFQ7Cit9CisjZW5kaWYJLyogSVBWNiAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IHNtYWNrX2lwdjRfb3V0cHV0KGNvbnN0IHN0cnVjdCBuZl9ob29rX29wcyAqb3BzLAorCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCQkJCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCQkJCWludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoreworCXN0cnVjdCBzb2NrZXRfc21hY2sgKnNzcDsKKwlzdHJ1Y3Qgc21hY2tfa25vd24gKnNrcDsKKworCWlmIChza2IgJiYgc2tiLT5zayAmJiBza2ItPnNrLT5za19zZWN1cml0eSkgeworCQlzc3AgPSBza2ItPnNrLT5za19zZWN1cml0eTsKKwkJc2twID0gc3NwLT5zbWtfb3V0OworCQlza2ItPnNlY21hcmsgPSBza3AtPnNta19zZWNpZDsKKwl9CisKKwlyZXR1cm4gTkZfQUNDRVBUOworfQorCitzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIHNtYWNrX25mX29wc1tdID0geworCXsKKwkJLmhvb2sgPQkJc21hY2tfaXB2NF9vdXRwdXQsCisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkucGYgPQkJTkZQUk9UT19JUFY0LAorCQkuaG9va251bSA9CU5GX0lORVRfTE9DQUxfT1VULAorCQkucHJpb3JpdHkgPQlORl9JUF9QUklfU0VMSU5VWF9GSVJTVCwKKwl9LAorI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQorCXsKKwkJLmhvb2sgPQkJc21hY2tfaXB2Nl9vdXRwdXQsCisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkucGYgPQkJTkZQUk9UT19JUFY2LAorCQkuaG9va251bSA9CU5GX0lORVRfTE9DQUxfT1VULAorCQkucHJpb3JpdHkgPQlORl9JUDZfUFJJX1NFTElOVVhfRklSU1QsCisJfSwKKyNlbmRpZgkvKiBJUFY2ICovCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzbWFja19uZl9pcF9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWlmIChzbWFja19lbmFibGVkID09IDApCisJCXJldHVybiAwOworCisJcHJpbnRrKEtFUk5fREVCVUcgIlNtYWNrOiBSZWdpc3RlcmluZyBuZXRmaWx0ZXIgaG9va3NcbiIpOworCisJZXJyID0gbmZfcmVnaXN0ZXJfaG9va3Moc21hY2tfbmZfb3BzLCBBUlJBWV9TSVpFKHNtYWNrX25mX29wcykpOworCWlmIChlcnIpCisJCXByX2luZm8oIlNtYWNrOiBuZl9yZWdpc3Rlcl9ob29rczogZXJyb3IgJWRcbiIsIGVycik7CisKKwlyZXR1cm4gMDsKK30KKworX19pbml0Y2FsbChzbWFja19uZl9pcF9pbml0KTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9LY29uZmlnIGIvc2VjdXJpdHkvdG9tb3lvL0tjb25maWcKaW5kZXggOGViNzc5YjlkLi42MDRlNzE4IDEwMDY0NAotLS0gYS9zZWN1cml0eS90b21veW8vS2NvbmZpZworKysgYi9zZWN1cml0eS90b21veW8vS2NvbmZpZwpAQCAtNSw2ICs1LDcgQEAKIAlzZWxlY3QgU0VDVVJJVFlGUwogCXNlbGVjdCBTRUNVUklUWV9QQVRICiAJc2VsZWN0IFNFQ1VSSVRZX05FVFdPUksKKwlzZWxlY3QgU1JDVQogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFRoaXMgc2VsZWN0cyBUT01PWU8gTGludXgsIHBhdGhuYW1lLWJhc2VkIGFjY2VzcyBjb250cm9sLgpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9jb250cm9sLmMgYi9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2NvbnRyb2wuYwppbmRleCA0ZGM5YjQ5Li5mNDQ5NWRlIDEwMDY0NAotLS0gYS9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2NvbnRyb2wuYworKysgYi9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2NvbnRyb2wuYwpAQCAtOSw4ICs5LDggQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vbWFjaW8uaD4KICNpbmNsdWRlIDxhc20vcG1hY19mZWF0dXJlLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL2NvcmUuYyBiL3NvdW5kL2FvYS9zb3VuZGJ1cy9pMnNidXMvY29yZS5jCmluZGV4IDRlMmI0ZmIuLmI5NzM3ZmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9zb3VuZGJ1cy9pMnNidXMvY29yZS5jCisrKyBiL3NvdW5kL2FvYS9zb3VuZGJ1cy9pMnNidXMvY29yZS5jCkBAIC03NCwxMCArNzQsOSBAQAogCWludCBpOwogCiAJaTJzZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGkyc2J1c19kZXYsIHNvdW5kLm9mZGV2LmRldik7Ci0KLSAJaWYgKGkyc2Rldi0+aW50ZnJlZ3MpIGlvdW5tYXAoaTJzZGV2LT5pbnRmcmVncyk7Ci0gCWlmIChpMnNkZXYtPm91dC5kYmRtYSkgaW91bm1hcChpMnNkZXYtPm91dC5kYmRtYSk7Ci0gCWlmIChpMnNkZXYtPmluLmRiZG1hKSBpb3VubWFwKGkyc2Rldi0+aW4uZGJkbWEpOworCWlvdW5tYXAoaTJzZGV2LT5pbnRmcmVncyk7CisJaW91bm1hcChpMnNkZXYtPm91dC5kYmRtYSk7CisJaW91bm1hcChpMnNkZXYtPmluLmRiZG1hKTsKIAlmb3IgKGkgPSBhb2FfcmVzb3VyY2VfaTJzbW1pbzsgaSA8PSBhb2FfcmVzb3VyY2VfcnhkYmRtYTsgaSsrKQogCQlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGkyc2Rldi0+YWxsb2NhdGVkX3Jlc291cmNlW2ldKTsKIAlmcmVlX2RiZG1hX2Rlc2NyaXB0b3JfcmluZyhpMnNkZXYsICZpMnNkZXYtPm91dC5kYmRtYV9yaW5nKTsKQEAgLTMxOCw5ICszMTcsOSBAQAogCQkJZnJlZV9pcnEoZGV2LT5pbnRlcnJ1cHRzW2ldLCBkZXYpOwogCWZyZWVfZGJkbWFfZGVzY3JpcHRvcl9yaW5nKGRldiwgJmRldi0+b3V0LmRiZG1hX3JpbmcpOwogCWZyZWVfZGJkbWFfZGVzY3JpcHRvcl9yaW5nKGRldiwgJmRldi0+aW4uZGJkbWFfcmluZyk7Ci0JaWYgKGRldi0+aW50ZnJlZ3MpIGlvdW5tYXAoZGV2LT5pbnRmcmVncyk7Ci0JaWYgKGRldi0+b3V0LmRiZG1hKSBpb3VubWFwKGRldi0+b3V0LmRiZG1hKTsKLQlpZiAoZGV2LT5pbi5kYmRtYSkgaW91bm1hcChkZXYtPmluLmRiZG1hKTsKKwlpb3VubWFwKGRldi0+aW50ZnJlZ3MpOworCWlvdW5tYXAoZGV2LT5vdXQuZGJkbWEpOworCWlvdW5tYXAoZGV2LT5pbi5kYmRtYSk7CiAJZm9yIChpPTA7aTwzO2krKykKIAkJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShkZXYtPmFsbG9jYXRlZF9yZXNvdXJjZVtpXSk7CiAJbXV0ZXhfZGVzdHJveSgmZGV2LT5sb2NrKTsKQEAgLTM4MSwxMCArMzgwLDggQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoaTJzZGV2LCAmY29udHJvbC0+bGlzdCwgaXRlbSkgewogCQkvKiBOb3RpZnkgQWxzYSAqLwotCQlpZiAoaTJzZGV2LT5zb3VuZC5wY20pIHsKLQkJCS8qIFN1c3BlbmQgUENNIHN0cmVhbXMgKi8KLQkJCXNuZF9wY21fc3VzcGVuZF9hbGwoaTJzZGV2LT5zb3VuZC5wY20pOwotCQl9CisJCS8qIFN1c3BlbmQgUENNIHN0cmVhbXMgKi8KKwkJc25kX3BjbV9zdXNwZW5kX2FsbChpMnNkZXYtPnNvdW5kLnBjbSk7CiAKIAkJLyogTm90aWZ5IGNvZGVjcyAqLwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNpaSwgJmkyc2Rldi0+c291bmQuY29kZWNfbGlzdCwgbGlzdCkgewpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9wY20uYyBiL3NvdW5kL2FvYS9zb3VuZGJ1cy9pMnNidXMvcGNtLmMKaW5kZXggN2I3NGE0Yi4uMDUzYjA5YyAxMDA2NDQKLS0tIGEvc291bmQvYW9hL3NvdW5kYnVzL2kyc2J1cy9wY20uYworKysgYi9zb3VuZC9hb2Evc291bmRidXMvaTJzYnVzL3BjbS5jCkBAIC02LDcgKzYsNyBAQAogICogR1BMIHYyLCBjYW4gYmUgZm91bmQgaW4gQ09QWUlORy4KICAqLwogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CkBAIC05NjgsNyArOTY4LDYgQEAKIAkJCXByaW50ayhLRVJOX0RFQlVHICJpMnNidXM6IGZhaWxlZCB0byBjcmVhdGUgcGNtXG4iKTsKIAkJCWdvdG8gb3V0X3B1dF9jaV9tb2R1bGU7CiAJCX0KLQkJZGV2LT5wY20tPmRldiA9ICZkZXYtPm9mZGV2LmRldjsKIAl9CiAKIAkvKiBBTFNBIHlldCBhZ2FpbiBzdWNrcy4KQEAgLTk4OCw2ICs5ODcsOCBAQAogCQkJZ290byBvdXRfcHV0X2NpX21vZHVsZTsKIAkJc25kX3BjbV9zZXRfb3BzKGRldi0+cGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAogCQkJCSZpMnNidXNfcGxheWJhY2tfb3BzKTsKKwkJZGV2LT5wY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uZGV2LnBhcmVudCA9CisJCQkmZGV2LT5vZmRldi5kZXY7CiAJCWkyc2Rldi0+b3V0LmNyZWF0ZWQgPSAxOwogCX0KIApAQCAtMTAwMyw2ICsxMDA0LDggQEAKIAkJCWdvdG8gb3V0X3B1dF9jaV9tb2R1bGU7CiAJCXNuZF9wY21fc2V0X29wcyhkZXYtPnBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAogCQkJCSZpMnNidXNfcmVjb3JkX29wcyk7CisJCWRldi0+cGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uZGV2LnBhcmVudCA9CisJCQkmZGV2LT5vZmRldi5kZXY7CiAJCWkyc2Rldi0+aW4uY3JlYXRlZCA9IDE7CiAJfQogCmRpZmYgLS1naXQgYS9zb3VuZC9hcm0vYWFjaS5jIGIvc291bmQvYXJtL2FhY2kuYwppbmRleCAwZTgzYTczLi40MTQwYjFiIDEwMDY0NAotLS0gYS9zb3VuZC9hcm0vYWFjaS5jCisrKyBiL3NvdW5kL2FybS9hYWNpLmMKQEAgLTg4OSw4ICs4ODksOCBAQAogc3RhdGljIHZvaWQgYWFjaV9mcmVlX2NhcmQoc3RydWN0IHNuZF9jYXJkICpjYXJkKQogewogCXN0cnVjdCBhYWNpICphYWNpID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotCWlmIChhYWNpLT5iYXNlKQotCQlpb3VubWFwKGFhY2ktPmJhc2UpOworCisJaW91bm1hcChhYWNpLT5iYXNlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBhYWNpICphYWNpX2luaXRfY2FyZChzdHJ1Y3QgYW1iYV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL3NvdW5kL2F0bWVsL2FjOTdjLmMgYi9zb3VuZC9hdG1lbC9hYzk3Yy5jCmluZGV4IDRmNmIxNGQuLmNmNGNlZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2F0bWVsL2FjOTdjLmMKKysrIGIvc291bmQvYXRtZWwvYWM5N2MuYwpAQCAtMjIsNiArMjIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgpAQCAtMzQsMTAgKzM3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGF0YS9kbWEtZHcuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEvZHcuaD4KIAorI2lmZGVmIENPTkZJR19BVlIzMgogI2luY2x1ZGUgPG1hY2gvY3B1Lmg+Ci0KLSNpZmRlZiBDT05GSUdfQVJDSF9BVDkxCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2Vsc2UKKyNkZWZpbmUgY3B1X2lzX2F0MzJhcDcwMDAoKSAwCiAjZW5kaWYKIAogI2luY2x1ZGUgImFjOTdjLmgiCkBAIC05MDIsNiArOTA1LDQwIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBhdG1lbF9hYzk3Y19kdF9pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLGF0OTFzYW05MjYzLWFjOTdjIiwgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhdG1lbF9hYzk3Y19kdF9pZHMpOworCitzdGF0aWMgc3RydWN0IGFjOTdjX3BsYXRmb3JtX2RhdGEgKmF0bWVsX2FjOTdjX3Byb2JlX2R0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gZGV2LT5vZl9ub2RlOworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOworCisJaWYgKCFub2RlKSB7CisJCWRldl9lcnIoZGV2LCAiRGV2aWNlIGRvZXMgbm90IGhhdmUgYXNzb2NpYXRlZCBEVCBkYXRhXG4iKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJcGRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlwZGF0YS0+cmVzZXRfcGluID0gb2ZfZ2V0X25hbWVkX2dwaW8oZGV2LT5vZl9ub2RlLCAiYWM5Ny1ncGlvcyIsIDIpOworCisJcmV0dXJuIHBkYXRhOworfQorI2Vsc2UKK3N0YXRpYyBzdHJ1Y3QgYWM5N2NfcGxhdGZvcm1fZGF0YSAqYXRtZWxfYWM5N2NfcHJvYmVfZHQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWRldl9lcnIoZGV2LCAibm8gcGxhdGZvcm0gZGF0YSBkZWZpbmVkXG4iKTsKKwlyZXR1cm4gRVJSX1BUUigtRU5YSU8pOworfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgYXRtZWxfYWM5N2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQJCQkqY2FyZDsKQEAgLTkyMiwxMCArOTU5LDExIEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoJnBkZXYtPmRldik7CiAJaWYgKCFwZGF0YSkgewotCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJubyBwbGF0Zm9ybSBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FTlhJTzsKKwkJcGRhdGEgPSBhdG1lbF9hYzk3Y19wcm9iZV9kdCgmcGRldi0+ZGV2KTsKKwkJaWYgKElTX0VSUihwZGF0YSkpCisJCQlyZXR1cm4gUFRSX0VSUihwZGF0YSk7CiAJfQogCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKQEAgLTEyMDQsNiArMTI0Miw3IEBACiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gImF0bWVsX2FjOTdjIiwKIAkJLnBtCT0gQVRNRUxfQUM5N0NfUE1fT1BTLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoYXRtZWxfYWM5N2NfZHRfaWRzKSwKIAl9LAogfTsKIG1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYXRtZWxfYWM5N2NfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvY29tcHJlc3Nfb2ZmbG9hZC5jIGIvc291bmQvY29yZS9jb21wcmVzc19vZmZsb2FkLmMKaW5kZXggODkwMjhmYS4uYjEyM2M0MmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvY29tcHJlc3Nfb2ZmbG9hZC5jCisrKyBiL3NvdW5kL2NvcmUvY29tcHJlc3Nfb2ZmbG9hZC5jCkBAIC04NjgsMTIgKzg2OCwxMiBAQAogCQlyZXR1cm4gLUVCQURGRDsKIAljb21wciA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CiAKLQlzcHJpbnRmKHN0ciwgImNvbXByQyVpRCVpIiwgY29tcHItPmNhcmQtPm51bWJlciwgY29tcHItPmRldmljZSk7CiAJcHJfZGVidWcoInJlZyAlcyBmb3IgZGV2aWNlICVzLCBkaXJlY3Rpb24gJWRcbiIsIHN0ciwgY29tcHItPm5hbWUsCiAJCQljb21wci0+ZGlyZWN0aW9uKTsKIAkvKiByZWdpc3RlciBjb21wcmVzc2VkIGRldmljZSAqLwotCXJldCA9IHNuZF9yZWdpc3Rlcl9kZXZpY2UoU05EUlZfREVWSUNFX1RZUEVfQ09NUFJFU1MsIGNvbXByLT5jYXJkLAotCQkJY29tcHItPmRldmljZSwgJnNuZF9jb21wcl9maWxlX29wcywgY29tcHIsIHN0cik7CisJcmV0ID0gc25kX3JlZ2lzdGVyX2RldmljZShTTkRSVl9ERVZJQ0VfVFlQRV9DT01QUkVTUywKKwkJCQkgIGNvbXByLT5jYXJkLCBjb21wci0+ZGV2aWNlLAorCQkJCSAgJnNuZF9jb21wcl9maWxlX29wcywgY29tcHIsICZjb21wci0+ZGV2KTsKIAlpZiAocmV0IDwgMCkgewogCQlwcl9lcnIoInNuZF9yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkXG4gJWQiLCByZXQpOwogCQlyZXR1cm4gcmV0OwpAQCAtODg3LDggKzg4NywxNiBAQAogCXN0cnVjdCBzbmRfY29tcHIgKmNvbXByOwogCiAJY29tcHIgPSBkZXZpY2UtPmRldmljZV9kYXRhOwotCXNuZF91bnJlZ2lzdGVyX2RldmljZShTTkRSVl9ERVZJQ0VfVFlQRV9DT01QUkVTUywgY29tcHItPmNhcmQsCi0JCWNvbXByLT5kZXZpY2UpOworCXNuZF91bnJlZ2lzdGVyX2RldmljZSgmY29tcHItPmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc25kX2NvbXByZXNzX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHNuZF9jb21wciAqY29tcHI7CisKKwljb21wciA9IGRldmljZS0+ZGV2aWNlX2RhdGE7CisJcHV0X2RldmljZSgmY29tcHItPmRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkwMyw3ICs5MTEsNyBAQAogCQkJaW50IGRpcm4sIHN0cnVjdCBzbmRfY29tcHIgKmNvbXByKQogewogCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgb3BzID0gewotCQkuZGV2X2ZyZWUgPSBOVUxMLAorCQkuZGV2X2ZyZWUgPSBzbmRfY29tcHJlc3NfZGV2X2ZyZWUsCiAJCS5kZXZfcmVnaXN0ZXIgPSBzbmRfY29tcHJlc3NfZGV2X3JlZ2lzdGVyLAogCQkuZGV2X2Rpc2Nvbm5lY3QgPSBzbmRfY29tcHJlc3NfZGV2X2Rpc2Nvbm5lY3QsCiAJfTsKQEAgLTkxMSw2ICs5MTksMTAgQEAKIAljb21wci0+Y2FyZCA9IGNhcmQ7CiAJY29tcHItPmRldmljZSA9IGRldmljZTsKIAljb21wci0+ZGlyZWN0aW9uID0gZGlybjsKKworCXNuZF9kZXZpY2VfaW5pdGlhbGl6ZSgmY29tcHItPmRldiwgY2FyZCk7CisJZGV2X3NldF9uYW1lKCZjb21wci0+ZGV2LCAiY29tcHJDJWlEJWkiLCBjYXJkLT5udW1iZXIsIGRldmljZSk7CisKIAlyZXR1cm4gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0NPTVBSRVNTLCBjb21wciwgJm9wcyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfY29tcHJlc3NfbmV3KTsKQEAgLTk0OCw3ICs5NjAsNyBAQAogewogCWludCByZXR2YWw7CiAKLQlpZiAoZGV2aWNlLT5uYW1lID09IE5VTEwgfHwgZGV2aWNlLT5kZXYgPT0gTlVMTCB8fCBkZXZpY2UtPm9wcyA9PSBOVUxMKQorCWlmIChkZXZpY2UtPm5hbWUgPT0gTlVMTCB8fCBkZXZpY2UtPm9wcyA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXByX2RlYnVnKCJSZWdpc3RlcmluZyBjb21wcmVzc2VkIGRldmljZSAlc1xuIiwgZGV2aWNlLT5uYW1lKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvY29udHJvbC5jIGIvc291bmQvY29yZS9jb250cm9sLmMKaW5kZXggYmI5NmE0Ni4uMzUzMjRhOCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9jb250cm9sLmMKKysrIGIvc291bmQvY29yZS9jb250cm9sLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX2N0bF9maWxlICpjdGw7Ci0JaW50IGVycjsKKwlpbnQgaSwgZXJyOwogCiAJZXJyID0gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiAJaWYgKGVyciA8IDApCkBAIC03OSw4ICs3OSw4IEBACiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY3RsLT5jaGFuZ2Vfc2xlZXApOwogCXNwaW5fbG9ja19pbml0KCZjdGwtPnJlYWRfbG9jayk7CiAJY3RsLT5jYXJkID0gY2FyZDsKLQljdGwtPnByZWZlcl9wY21fc3ViZGV2aWNlID0gLTE7Ci0JY3RsLT5wcmVmZXJfcmF3bWlkaV9zdWJkZXZpY2UgPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgU05EX0NUTF9TVUJERVZfSVRFTVM7IGkrKykKKwkJY3RsLT5wcmVmZXJyZWRfc3ViZGV2aWNlW2ldID0gLTE7CiAJY3RsLT5waWQgPSBnZXRfcGlkKHRhc2tfcGlkKGN1cnJlbnQpKTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBjdGw7CiAJd3JpdGVfbG9ja19pcnFzYXZlKCZjYXJkLT5jdGxfZmlsZXNfcndsb2NrLCBmbGFncyk7CkBAIC0zNzMsNiArMzczLDcgQEAKIAljYXJkLT5jb250cm9sc19jb3VudCArPSBrY29udHJvbC0+Y291bnQ7CiAJa2NvbnRyb2wtPmlkLm51bWlkID0gY2FyZC0+bGFzdF9udW1pZCArIDE7CiAJY2FyZC0+bGFzdF9udW1pZCArPSBrY29udHJvbC0+Y291bnQ7CisJaWQgPSBrY29udHJvbC0+aWQ7CiAJY291bnQgPSBrY29udHJvbC0+Y291bnQ7CiAJdXBfd3JpdGUoJmNhcmQtPmNvbnRyb2xzX3J3c2VtKTsKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IGNvdW50OyBpZHgrKywgaWQuaW5kZXgrKywgaWQubnVtaWQrKykKQEAgLTQzOSw2ICs0NDAsNyBAQAogCWNhcmQtPmNvbnRyb2xzX2NvdW50ICs9IGtjb250cm9sLT5jb3VudDsKIAlrY29udHJvbC0+aWQubnVtaWQgPSBjYXJkLT5sYXN0X251bWlkICsgMTsKIAljYXJkLT5sYXN0X251bWlkICs9IGtjb250cm9sLT5jb3VudDsKKwlpZCA9IGtjb250cm9sLT5pZDsKIAljb3VudCA9IGtjb250cm9sLT5jb3VudDsKIAl1cF93cml0ZSgmY2FyZC0+Y29udHJvbHNfcndzZW0pOwogCWZvciAoaWR4ID0gMDsgaWR4IDwgY291bnQ7IGlkeCsrLCBpZC5pbmRleCsrLCBpZC5udW1pZCsrKQpAQCAtMTYwNyw2ICsxNjA5LDI3IEBACiAJcmV0dXJuIGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmY3RsLT5mYXN5bmMpOwogfQogCisvKiByZXR1cm4gdGhlIHByZWZlcnJlZCBzdWJkZXZpY2UgbnVtYmVyIGlmIGFscmVhZHkgYXNzaWduZWQ7CisgKiBvdGhlcndpc2UgcmV0dXJuIC0xCisgKi8KK2ludCBzbmRfY3RsX2dldF9wcmVmZXJyZWRfc3ViZGV2aWNlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IHR5cGUpCit7CisJc3RydWN0IHNuZF9jdGxfZmlsZSAqa2N0bDsKKwlpbnQgc3ViZGV2aWNlID0gLTE7CisKKwlyZWFkX2xvY2soJmNhcmQtPmN0bF9maWxlc19yd2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoa2N0bCwgJmNhcmQtPmN0bF9maWxlcywgbGlzdCkgeworCQlpZiAoa2N0bC0+cGlkID09IHRhc2tfcGlkKGN1cnJlbnQpKSB7CisJCQlzdWJkZXZpY2UgPSBrY3RsLT5wcmVmZXJyZWRfc3ViZGV2aWNlW3R5cGVdOworCQkJaWYgKHN1YmRldmljZSAhPSAtMSkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlyZWFkX3VubG9jaygmY2FyZC0+Y3RsX2ZpbGVzX3J3bG9jayk7CisJcmV0dXJuIHN1YmRldmljZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9jdGxfZ2V0X3ByZWZlcnJlZF9zdWJkZXZpY2UpOworCiAvKgogICogaW9jdGwzMiBjb21wYXQKICAqLwpAQCAtMTYzOSwxOSArMTY2Miw5IEBACiBzdGF0aWMgaW50IHNuZF9jdGxfZGV2X3JlZ2lzdGVyKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKLQlpbnQgZXJyLCBjYXJkbnVtOwotCWNoYXIgbmFtZVsxNl07CiAKLQlpZiAoc25kX0JVR19PTighY2FyZCkpCi0JCXJldHVybiAtRU5YSU87Ci0JY2FyZG51bSA9IGNhcmQtPm51bWJlcjsKLQlpZiAoc25kX0JVR19PTihjYXJkbnVtIDwgMCB8fCBjYXJkbnVtID49IFNORFJWX0NBUkRTKSkKLQkJcmV0dXJuIC1FTlhJTzsKLQlzcHJpbnRmKG5hbWUsICJjb250cm9sQyVpIiwgY2FyZG51bSk7Ci0JaWYgKChlcnIgPSBzbmRfcmVnaXN0ZXJfZGV2aWNlKFNORFJWX0RFVklDRV9UWVBFX0NPTlRST0wsIGNhcmQsIC0xLAotCQkJCSAgICAgICAmc25kX2N0bF9mX29wcywgY2FyZCwgbmFtZSkpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc25kX3JlZ2lzdGVyX2RldmljZShTTkRSVl9ERVZJQ0VfVFlQRV9DT05UUk9MLCBjYXJkLCAtMSwKKwkJCQkgICAmc25kX2N0bF9mX29wcywgY2FyZCwgJmNhcmQtPmN0bF9kZXYpOwogfQogCiAvKgpAQCAtMTY2MSwxMyArMTY3NCw2IEBACiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKIAlzdHJ1Y3Qgc25kX2N0bF9maWxlICpjdGw7Ci0JaW50IGVyciwgY2FyZG51bTsKLQotCWlmIChzbmRfQlVHX09OKCFjYXJkKSkKLQkJcmV0dXJuIC1FTlhJTzsKLQljYXJkbnVtID0gY2FyZC0+bnVtYmVyOwotCWlmIChzbmRfQlVHX09OKGNhcmRudW0gPCAwIHx8IGNhcmRudW0gPj0gU05EUlZfQ0FSRFMpKQotCQlyZXR1cm4gLUVOWElPOwogCiAJcmVhZF9sb2NrKCZjYXJkLT5jdGxfZmlsZXNfcndsb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0bCwgJmNhcmQtPmN0bF9maWxlcywgbGlzdCkgewpAQCAtMTY3NiwxMCArMTY4Miw3IEBACiAJfQogCXJlYWRfdW5sb2NrKCZjYXJkLT5jdGxfZmlsZXNfcndsb2NrKTsKIAotCWlmICgoZXJyID0gc25kX3VucmVnaXN0ZXJfZGV2aWNlKFNORFJWX0RFVklDRV9UWVBFX0NPTlRST0wsCi0JCQkJCSBjYXJkLCAtMSkpIDwgMCkKLQkJcmV0dXJuIGVycjsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc25kX3VucmVnaXN0ZXJfZGV2aWNlKCZjYXJkLT5jdGxfZGV2KTsKIH0KIAogLyoKQEAgLTE2OTYsNiArMTY5OSw3IEBACiAJCXNuZF9jdGxfcmVtb3ZlKGNhcmQsIGNvbnRyb2wpOwogCX0KIAl1cF93cml0ZSgmY2FyZC0+Y29udHJvbHNfcndzZW0pOworCXB1dF9kZXZpY2UoJmNhcmQtPmN0bF9kZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzEwLDEwICsxNzE0LDIwIEBACiAJCS5kZXZfcmVnaXN0ZXIgPQlzbmRfY3RsX2Rldl9yZWdpc3RlciwKIAkJLmRldl9kaXNjb25uZWN0ID0gc25kX2N0bF9kZXZfZGlzY29ubmVjdCwKIAl9OworCWludCBlcnI7CiAKIAlpZiAoc25kX0JVR19PTighY2FyZCkpCiAJCXJldHVybiAtRU5YSU87Ci0JcmV0dXJuIHNuZF9kZXZpY2VfbmV3KGNhcmQsIFNORFJWX0RFVl9DT05UUk9MLCBjYXJkLCAmb3BzKTsKKwlpZiAoc25kX0JVR19PTihjYXJkLT5udW1iZXIgPCAwIHx8IGNhcmQtPm51bWJlciA+PSBTTkRSVl9DQVJEUykpCisJCXJldHVybiAtRU5YSU87CisKKwlzbmRfZGV2aWNlX2luaXRpYWxpemUoJmNhcmQtPmN0bF9kZXYsIGNhcmQpOworCWRldl9zZXRfbmFtZSgmY2FyZC0+Y3RsX2RldiwgImNvbnRyb2xDJWQiLCBjYXJkLT5udW1iZXIpOworCisJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0NPTlRST0wsIGNhcmQsICZvcHMpOworCWlmIChlcnIgPCAwKQorCQlwdXRfZGV2aWNlKCZjYXJkLT5jdGxfZGV2KTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9od2RlcC5jIGIvc291bmQvY29yZS9od2RlcC5jCmluZGV4IDY5NDU5ZTUuLjg0MjQ0YTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvaHdkZXAuYworKysgYi9zb3VuZC9jb3JlL2h3ZGVwLmMKQEAgLTM4LDcgKzM4LDYgQEAKIHN0YXRpYyBMSVNUX0hFQUQoc25kX2h3ZGVwX2RldmljZXMpOwogc3RhdGljIERFRklORV9NVVRFWChyZWdpc3Rlcl9tdXRleCk7CiAKLXN0YXRpYyBpbnQgc25kX2h3ZGVwX2ZyZWUoc3RydWN0IHNuZF9od2RlcCAqaHdkZXApOwogc3RhdGljIGludCBzbmRfaHdkZXBfZGV2X2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgaW50IHNuZF9od2RlcF9kZXZfcmVnaXN0ZXIoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgaW50IHNuZF9od2RlcF9kZXZfZGlzY29ubmVjdChzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKTsKQEAgLTM0NSw2ICszNDQsMTEgQEAKIAkubW1hcCA9CQlzbmRfaHdkZXBfbW1hcCwKIH07CiAKK3N0YXRpYyB2b2lkIHJlbGVhc2VfaHdkZXBfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlrZnJlZShjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc25kX2h3ZGVwLCBkZXYpKTsKK30KKwogLyoqCiAgKiBzbmRfaHdkZXBfbmV3IC0gY3JlYXRlIGEgbmV3IGh3ZGVwIGluc3RhbmNlCiAgKiBAY2FyZDogdGhlIGNhcmQgaW5zdGFuY2UKQEAgLTM3OCw0OCArMzgyLDQ5IEBACiAJCWRldl9lcnIoY2FyZC0+ZGV2LCAiaHdkZXA6IGNhbm5vdCBhbGxvY2F0ZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmh3ZGVwLT5vcGVuX3dhaXQpOworCW11dGV4X2luaXQoJmh3ZGVwLT5vcGVuX211dGV4KTsKIAlod2RlcC0+Y2FyZCA9IGNhcmQ7CiAJaHdkZXAtPmRldmljZSA9IGRldmljZTsKIAlpZiAoaWQpCiAJCXN0cmxjcHkoaHdkZXAtPmlkLCBpZCwgc2l6ZW9mKGh3ZGVwLT5pZCkpOworCisJc25kX2RldmljZV9pbml0aWFsaXplKCZod2RlcC0+ZGV2LCBjYXJkKTsKKwlod2RlcC0+ZGV2LnJlbGVhc2UgPSByZWxlYXNlX2h3ZGVwX2RldmljZTsKKwlkZXZfc2V0X25hbWUoJmh3ZGVwLT5kZXYsICJod0MlaUQlaSIsIGNhcmQtPm51bWJlciwgZGV2aWNlKTsKICNpZmRlZiBDT05GSUdfU05EX09TU0VNVUwKIAlod2RlcC0+b3NzX3R5cGUgPSAtMTsKICNlbmRpZgotCWlmICgoZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0hXREVQLCBod2RlcCwgJm9wcykpIDwgMCkgewotCQlzbmRfaHdkZXBfZnJlZShod2RlcCk7CisKKwllcnIgPSBzbmRfZGV2aWNlX25ldyhjYXJkLCBTTkRSVl9ERVZfSFdERVAsIGh3ZGVwLCAmb3BzKTsKKwlpZiAoZXJyIDwgMCkgeworCQlwdXRfZGV2aWNlKCZod2RlcC0+ZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmaHdkZXAtPm9wZW5fd2FpdCk7Ci0JbXV0ZXhfaW5pdCgmaHdkZXAtPm9wZW5fbXV0ZXgpOworCiAJaWYgKHJod2RlcCkKIAkJKnJod2RlcCA9IGh3ZGVwOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChzbmRfaHdkZXBfbmV3KTsKIAotc3RhdGljIGludCBzbmRfaHdkZXBfZnJlZShzdHJ1Y3Qgc25kX2h3ZGVwICpod2RlcCkKK3N0YXRpYyBpbnQgc25kX2h3ZGVwX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCiB7CisJc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZpY2UtPmRldmljZV9kYXRhOwogCWlmICghaHdkZXApCiAJCXJldHVybiAwOwogCWlmIChod2RlcC0+cHJpdmF0ZV9mcmVlKQogCQlod2RlcC0+cHJpdmF0ZV9mcmVlKGh3ZGVwKTsKLQlrZnJlZShod2RlcCk7CisJcHV0X2RldmljZSgmaHdkZXAtPmRldik7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2h3ZGVwX2Rldl9mcmVlKHN0cnVjdCBzbmRfZGV2aWNlICpkZXZpY2UpCi17Ci0Jc3RydWN0IHNuZF9od2RlcCAqaHdkZXAgPSBkZXZpY2UtPmRldmljZV9kYXRhOwotCXJldHVybiBzbmRfaHdkZXBfZnJlZShod2RlcCk7Ci19Ci0KIHN0YXRpYyBpbnQgc25kX2h3ZGVwX2Rldl9yZWdpc3RlcihzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBzbmRfaHdkZXAgKmh3ZGVwID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBod2RlcC0+Y2FyZDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJaW50IGVycjsKLQljaGFyIG5hbWVbMzJdOwogCiAJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWlmIChzbmRfaHdkZXBfc2VhcmNoKGNhcmQsIGh3ZGVwLT5kZXZpY2UpKSB7CkBAIC00MjcsNTMgKzQzMiwzMCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlsaXN0X2FkZF90YWlsKCZod2RlcC0+bGlzdCwgJnNuZF9od2RlcF9kZXZpY2VzKTsKLQlzcHJpbnRmKG5hbWUsICJod0MlaUQlaSIsIGh3ZGVwLT5jYXJkLT5udW1iZXIsIGh3ZGVwLT5kZXZpY2UpOwotCWRldiA9IGh3ZGVwLT5kZXY7Ci0JaWYgKCFkZXYpCi0JCWRldiA9IHNuZF9jYXJkX2dldF9kZXZpY2VfbGluayhod2RlcC0+Y2FyZCk7Ci0JZXJyID0gc25kX3JlZ2lzdGVyX2RldmljZV9mb3JfZGV2KFNORFJWX0RFVklDRV9UWVBFX0hXREVQLAotCQkJCQkgIGh3ZGVwLT5jYXJkLCBod2RlcC0+ZGV2aWNlLAotCQkJCQkgICZzbmRfaHdkZXBfZl9vcHMsIGh3ZGVwLCBuYW1lLCBkZXYpOworCWVyciA9IHNuZF9yZWdpc3Rlcl9kZXZpY2UoU05EUlZfREVWSUNFX1RZUEVfSFdERVAsCisJCQkJICBod2RlcC0+Y2FyZCwgaHdkZXAtPmRldmljZSwKKwkJCQkgICZzbmRfaHdkZXBfZl9vcHMsIGh3ZGVwLCAmaHdkZXAtPmRldik7CiAJaWYgKGVyciA8IDApIHsKLQkJZGV2X2VycihkZXYsCi0JCQkidW5hYmxlIHRvIHJlZ2lzdGVyIGhhcmR3YXJlIGRlcGVuZGVudCBkZXZpY2UgJWk6JWlcbiIsCi0JCQljYXJkLT5udW1iZXIsIGh3ZGVwLT5kZXZpY2UpOworCQlkZXZfZXJyKCZod2RlcC0+ZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyXG4iKTsKIAkJbGlzdF9kZWwoJmh3ZGVwLT5saXN0KTsKIAkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCXJldHVybiBlcnI7CiAJfQogCi0JaWYgKGh3ZGVwLT5ncm91cHMpIHsKLQkJc3RydWN0IGRldmljZSAqZCA9IHNuZF9nZXRfZGV2aWNlKFNORFJWX0RFVklDRV9UWVBFX0hXREVQLAotCQkJCQkJICBod2RlcC0+Y2FyZCwgaHdkZXAtPmRldmljZSk7Ci0JCWlmIChkKSB7Ci0JCQlpZiAoaHdkZXAtPnByaXZhdGVfZGF0YSkKLQkJCQlkZXZfc2V0X2RydmRhdGEoZCwgaHdkZXAtPnByaXZhdGVfZGF0YSk7Ci0JCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXBzKCZkLT5rb2JqLCBod2RlcC0+Z3JvdXBzKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCWRldl93YXJuKGRldiwKLQkJCQkJICJod2RlcCAlZDolZDogY2Fubm90IGNyZWF0ZSBzeXNmcyBncm91cHNcbiIsCi0JCQkJCSBjYXJkLT5udW1iZXIsIGh3ZGVwLT5kZXZpY2UpOwotCQkJcHV0X2RldmljZShkKTsKLQkJfQotCX0KLQogI2lmZGVmIENPTkZJR19TTkRfT1NTRU1VTAogCWh3ZGVwLT5vc3NyZWcgPSAwOwogCWlmIChod2RlcC0+b3NzX3R5cGUgPj0gMCkgewotCQlpZiAoKGh3ZGVwLT5vc3NfdHlwZSA9PSBTTkRSVl9PU1NfREVWSUNFX1RZUEVfRE1GTSkgJiYgKGh3ZGVwLT5kZXZpY2UgIT0gMCkpIHsKLQkJCWRldl93YXJuKGRldiwKKwkJaWYgKGh3ZGVwLT5vc3NfdHlwZSA9PSBTTkRSVl9PU1NfREVWSUNFX1RZUEVfRE1GTSAmJgorCQkgICAgaHdkZXAtPmRldmljZSkKKwkJCWRldl93YXJuKCZod2RlcC0+ZGV2LAogCQkJCSAib25seSBod2RlcCBkZXZpY2UgMCBjYW4gYmUgcmVnaXN0ZXJlZCBhcyBPU1MgZGlyZWN0IEZNIGRldmljZSFcbiIpOwotCQl9IGVsc2UgewotCQkJaWYgKHNuZF9yZWdpc3Rlcl9vc3NfZGV2aWNlKGh3ZGVwLT5vc3NfdHlwZSwKLQkJCQkJCSAgICBjYXJkLCBod2RlcC0+ZGV2aWNlLAotCQkJCQkJICAgICZzbmRfaHdkZXBfZl9vcHMsIGh3ZGVwKSA8IDApIHsKLQkJCQlkZXZfZXJyKGRldiwKLQkJCQkJInVuYWJsZSB0byByZWdpc3RlciBPU1MgY29tcGF0aWJpbGl0eSBkZXZpY2UgJWk6JWlcbiIsCi0JCQkJCWNhcmQtPm51bWJlciwgaHdkZXAtPmRldmljZSk7Ci0JCQl9IGVsc2UKLQkJCQlod2RlcC0+b3NzcmVnID0gMTsKLQkJfQorCQllbHNlIGlmIChzbmRfcmVnaXN0ZXJfb3NzX2RldmljZShod2RlcC0+b3NzX3R5cGUsCisJCQkJCQkgY2FyZCwgaHdkZXAtPmRldmljZSwKKwkJCQkJCSAmc25kX2h3ZGVwX2Zfb3BzLCBod2RlcCkgPCAwKQorCQkJZGV2X3dhcm4oJmh3ZGVwLT5kZXYsCisJCQkJICJ1bmFibGUgdG8gcmVnaXN0ZXIgT1NTIGNvbXBhdGliaWxpdHkgZGV2aWNlXG4iKTsKKwkJZWxzZQorCQkJaHdkZXAtPm9zc3JlZyA9IDE7CiAJfQogI2VuZGlmCiAJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CkBAIC00OTcsNyArNDc5LDcgQEAKIAlpZiAoaHdkZXAtPm9zc3JlZykKIAkJc25kX3VucmVnaXN0ZXJfb3NzX2RldmljZShod2RlcC0+b3NzX3R5cGUsIGh3ZGVwLT5jYXJkLCBod2RlcC0+ZGV2aWNlKTsKICNlbmRpZgotCXNuZF91bnJlZ2lzdGVyX2RldmljZShTTkRSVl9ERVZJQ0VfVFlQRV9IV0RFUCwgaHdkZXAtPmNhcmQsIGh3ZGVwLT5kZXZpY2UpOworCXNuZF91bnJlZ2lzdGVyX2RldmljZSgmaHdkZXAtPmRldik7CiAJbGlzdF9kZWxfaW5pdCgmaHdkZXAtPmxpc3QpOwogCW11dGV4X3VubG9jaygmaHdkZXAtPm9wZW5fbXV0ZXgpOwogCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbml0LmMgYi9zb3VuZC9jb3JlL2luaXQuYwppbmRleCAwNzQ4NzVkLi4zNTQxOTA1IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luaXQuYworKysgYi9zb3VuZC9jb3JlL2luaXQuYwpAQCAtMTU3LDggKzE1NywzMSBAQAogCXJldHVybiBtYXNrOyAvKiB1bmNoYW5nZWQgKi8KIH0KIAorLyogdGhlIGRlZmF1bHQgcmVsZWFzZSBjYWxsYmFjayBzZXQgaW4gc25kX2RldmljZV9pbml0aWFsaXplKCkgYmVsb3c7CisgKiB0aGlzIGlzIGp1c3QgTk9QIGZvciBub3csIGFzIGFsbW9zdCBhbGwgam9icyBhcmUgYWxyZWFkeSBkb25lIGluCisgKiBkZXZfZnJlZSBjYWxsYmFjayBvZiBzbmRfZGV2aWNlIGNoYWluIGluc3RlYWQuCisgKi8KK3N0YXRpYyB2b2lkIGRlZmF1bHRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7Cit9CisKKy8qKgorICogc25kX2RldmljZV9pbml0aWFsaXplIC0gSW5pdGlhbGl6ZSBzdHJ1Y3QgZGV2aWNlIGZvciBzb3VuZCBkZXZpY2VzCisgKiBAZGV2OiBkZXZpY2UgdG8gaW5pdGlhbGl6ZQorICogQGNhcmQ6IGNhcmQgdG8gYXNzaWduLCBvcHRpb25hbAorICovCit2b2lkIHNuZF9kZXZpY2VfaW5pdGlhbGl6ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlkZXZpY2VfaW5pdGlhbGl6ZShkZXYpOworCWlmIChjYXJkKQorCQlkZXYtPnBhcmVudCA9ICZjYXJkLT5jYXJkX2RldjsKKwlkZXYtPmNsYXNzID0gc291bmRfY2xhc3M7CisJZGV2LT5yZWxlYXNlID0gZGVmYXVsdF9yZWxlYXNlOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc25kX2RldmljZV9pbml0aWFsaXplKTsKKwogc3RhdGljIGludCBzbmRfY2FyZF9kb19mcmVlKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCk7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY2FyZF9kZXZfYXR0cl9ncm91cHNbXTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNhcmRfZGV2X2F0dHJfZ3JvdXA7CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfY2FyZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMjQ2LDcgKzI2OSw4IEBACiAJY2FyZC0+Y2FyZF9kZXYucGFyZW50ID0gcGFyZW50OwogCWNhcmQtPmNhcmRfZGV2LmNsYXNzID0gc291bmRfY2xhc3M7CiAJY2FyZC0+Y2FyZF9kZXYucmVsZWFzZSA9IHJlbGVhc2VfY2FyZF9kZXZpY2U7Ci0JY2FyZC0+Y2FyZF9kZXYuZ3JvdXBzID0gY2FyZF9kZXZfYXR0cl9ncm91cHM7CisJY2FyZC0+Y2FyZF9kZXYuZ3JvdXBzID0gY2FyZC0+ZGV2X2dyb3VwczsKKwljYXJkLT5kZXZfZ3JvdXBzWzBdID0gJmNhcmRfZGV2X2F0dHJfZ3JvdXA7CiAJZXJyID0ga29iamVjdF9zZXRfbmFtZSgmY2FyZC0+Y2FyZF9kZXYua29iaiwgImNhcmQlZCIsIGlkeCk7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gX19lcnJvcjsKQEAgLTY3NywxNCArNzAxLDMyIEBACiAJTlVMTAogfTsKIAotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgY2FyZF9kZXZfYXR0cl9ncm91cCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNhcmRfZGV2X2F0dHJfZ3JvdXAgPSB7CiAJLmF0dHJzCT0gY2FyZF9kZXZfYXR0cnMsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqY2FyZF9kZXZfYXR0cl9ncm91cHNbXSA9IHsKLQkmY2FyZF9kZXZfYXR0cl9ncm91cCwKLQlOVUxMCisvKioKKyAqIHNuZF9jYXJkX2FkZF9kZXZfYXR0ciAtIEFwcGVuZCBhIG5ldyBzeXNmcyBhdHRyaWJ1dGUgZ3JvdXAgdG8gY2FyZAorICogQGNhcmQ6IGNhcmQgaW5zdGFuY2UKKyAqIEBncm91cDogYXR0cmlidXRlIGdyb3VwIHRvIGFwcGVuZAorICovCitpbnQgc25kX2NhcmRfYWRkX2Rldl9hdHRyKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwKKwkJCSAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JvdXApCit7CisJaW50IGk7CisKKwkvKiBsb29wIGZvciAoYXJyYXlzaXplLTEpIGhlcmUgdG8ga2VlcCBOVUxMIGF0IHRoZSBsYXN0IGVudHJ5ICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2FyZC0+ZGV2X2dyb3VwcykgLSAxOyBpKyspIHsKKwkJaWYgKCFjYXJkLT5kZXZfZ3JvdXBzW2ldKSB7CisJCQljYXJkLT5kZXZfZ3JvdXBzW2ldID0gZ3JvdXA7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWRldl9lcnIoY2FyZC0+ZGV2LCAiVG9vIG1hbnkgZ3JvdXBzIGFzc2lnbmVkXG4iKTsKKwlyZXR1cm4gLUVOT1NQQzsKIH07CitFWFBPUlRfU1lNQk9MX0dQTChzbmRfY2FyZF9hZGRfZGV2X2F0dHIpOwogCiAvKioKICAqICBzbmRfY2FyZF9yZWdpc3RlciAtIHJlZ2lzdGVyIHRoZSBzb3VuZGNhcmQKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvbWVtb3J5LmMgYi9zb3VuZC9jb3JlL21lbW9yeS5jCmluZGV4IDM2YzBmMWEuLjRjZDY2NGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvbWVtb3J5LmMKKysrIGIvc291bmQvY29yZS9tZW1vcnkuYwpAQCAtMjEsOCArMjEsOCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KIAogLyoqCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKaW5kZXggYWRhNjlkNy4uODA0MjNhNGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYworKysgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKQEAgLTcxOSw3ICs3MTksNyBAQAogCiAJb3NzX2J1ZmZlcl9zaXplID0gc25kX3BjbV9wbHVnX2NsaWVudF9zaXplKHN1YnN0cmVhbSwKIAkJCQkJCSAgIHNuZF9wY21faHdfcGFyYW1fdmFsdWVfbWF4KHNsYXZlX3BhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9TSVpFLCBOVUxMKSkgKiBvc3NfZnJhbWVfc2l6ZTsKLQlvc3NfYnVmZmVyX3NpemUgPSAxIDw8IGxkMihvc3NfYnVmZmVyX3NpemUpOworCW9zc19idWZmZXJfc2l6ZSA9IHJvdW5kZG93bl9wb3dfb2ZfdHdvKG9zc19idWZmZXJfc2l6ZSk7CiAJaWYgKGF0b21pY19yZWFkKCZzdWJzdHJlYW0tPm1tYXBfY291bnQpKSB7CiAJCWlmIChvc3NfYnVmZmVyX3NpemUgPiBydW50aW1lLT5vc3MubW1hcF9ieXRlcykKIAkJCW9zc19idWZmZXJfc2l6ZSA9IHJ1bnRpbWUtPm9zcy5tbWFwX2J5dGVzOwpAQCAtNzU1LDE0ICs3NTUsMTQgQEAKIAltaW5fcGVyaW9kX3NpemUgPSBzbmRfcGNtX3BsdWdfY2xpZW50X3NpemUoc3Vic3RyZWFtLAogCQkJCQkJICAgc25kX3BjbV9od19wYXJhbV92YWx1ZV9taW4oc2xhdmVfcGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX1NJWkUsIE5VTEwpKTsKIAltaW5fcGVyaW9kX3NpemUgKj0gb3NzX2ZyYW1lX3NpemU7Ci0JbWluX3BlcmlvZF9zaXplID0gMSA8PCAobGQyKG1pbl9wZXJpb2Rfc2l6ZSAtIDEpICsgMSk7CisJbWluX3BlcmlvZF9zaXplID0gcm91bmR1cF9wb3dfb2ZfdHdvKG1pbl9wZXJpb2Rfc2l6ZSk7CiAJaWYgKG9zc19wZXJpb2Rfc2l6ZSA8IG1pbl9wZXJpb2Rfc2l6ZSkKIAkJb3NzX3BlcmlvZF9zaXplID0gbWluX3BlcmlvZF9zaXplOwogCiAJbWF4X3BlcmlvZF9zaXplID0gc25kX3BjbV9wbHVnX2NsaWVudF9zaXplKHN1YnN0cmVhbSwKIAkJCQkJCSAgIHNuZF9wY21faHdfcGFyYW1fdmFsdWVfbWF4KHNsYXZlX3BhcmFtcywgU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRF9TSVpFLCBOVUxMKSk7CiAJbWF4X3BlcmlvZF9zaXplICo9IG9zc19mcmFtZV9zaXplOwotCW1heF9wZXJpb2Rfc2l6ZSA9IDEgPDwgbGQyKG1heF9wZXJpb2Rfc2l6ZSk7CisJbWF4X3BlcmlvZF9zaXplID0gcm91bmRkb3duX3Bvd19vZl90d28obWF4X3BlcmlvZF9zaXplKTsKIAlpZiAob3NzX3BlcmlvZF9zaXplID4gbWF4X3BlcmlvZF9zaXplKQogCQlvc3NfcGVyaW9kX3NpemUgPSBtYXhfcGVyaW9kX3NpemU7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtLmMgYi9zb3VuZC9jb3JlL3BjbS5jCmluZGV4IGNmYzU2YzguLjAzNDVlNTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtLmMKKysrIGIvc291bmQvY29yZS9wY20uYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJCQkKIAkJCWlmIChnZXRfdXNlcih2YWwsIChpbnQgX191c2VyICopYXJnKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWNvbnRyb2wtPnByZWZlcl9wY21fc3ViZGV2aWNlID0gdmFsOworCQkJY29udHJvbC0+cHJlZmVycmVkX3N1YmRldmljZVtTTkRfQ1RMX1NVQkRFVl9QQ01dID0gdmFsOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9CkBAIC02NzMsNiArNjczLDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IHNuZF9wY21fc3Vic3RyZWFtX3Byb2NfZG9uZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkgeyByZXR1cm4gMDsgfQogI2VuZGlmIC8qIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnBjbV9kZXZfYXR0cl9ncm91cHNbXTsKKwogLyoqCiAgKiBzbmRfcGNtX25ld19zdHJlYW0gLSBjcmVhdGUgYSBuZXcgUENNIHN0cmVhbQogICogQHBjbTogdGhlIHBjbSBpbnN0YW5jZQpAQCAtNjk4LDcgKzcwMCwxNSBAQAogCXBzdHItPnN0cmVhbSA9IHN0cmVhbTsKIAlwc3RyLT5wY20gPSBwY207CiAJcHN0ci0+c3Vic3RyZWFtX2NvdW50ID0gc3Vic3RyZWFtX2NvdW50OwotCWlmIChzdWJzdHJlYW1fY291bnQgPiAwICYmICFwY20tPmludGVybmFsKSB7CisJaWYgKCFzdWJzdHJlYW1fY291bnQpCisJCXJldHVybiAwOworCisJc25kX2RldmljZV9pbml0aWFsaXplKCZwc3RyLT5kZXYsIHBjbS0+Y2FyZCk7CisJcHN0ci0+ZGV2Lmdyb3VwcyA9IHBjbV9kZXZfYXR0cl9ncm91cHM7CisJZGV2X3NldF9uYW1lKCZwc3RyLT5kZXYsICJwY21DJWlEJWklYyIsIHBjbS0+Y2FyZC0+bnVtYmVyLCBwY20tPmRldmljZSwKKwkJICAgICBzdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyA/ICdwJyA6ICdjJyk7CisKKwlpZiAoIXBjbS0+aW50ZXJuYWwpIHsKIAkJZXJyID0gc25kX3BjbV9zdHJlYW1fcHJvY19pbml0KHBzdHIpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJcGNtX2VycihwY20sICJFcnJvciBpbiBzbmRfcGNtX3N0cmVhbV9wcm9jX2luaXRcbiIpOwpAQCAtODY4LDYgKzg3OCw4IEBACiAJCWtmcmVlKHNldHVwKTsKIAl9CiAjZW5kaWYKKwlpZiAocHN0ci0+c3Vic3RyZWFtX2NvdW50KQorCQlwdXRfZGV2aWNlKCZwc3RyLT5kZXYpOwogfQogCiBzdGF0aWMgaW50IHNuZF9wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQpAQCAtOTAxLDkgKzkxMyw4IEBACiAJc3RydWN0IHNuZF9wY21fc3RyICogcHN0cjsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lOwotCXN0cnVjdCBzbmRfY3RsX2ZpbGUgKmtjdGw7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwotCWludCBwcmVmZXJfc3ViZGV2aWNlID0gLTE7CisJaW50IHByZWZlcl9zdWJkZXZpY2U7CiAJc2l6ZV90IHNpemU7CiAKIAlpZiAoc25kX0JVR19PTighcGNtIHx8ICFyc3Vic3RyZWFtKSkKQEAgLTkxNCwxNSArOTI1LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAljYXJkID0gcGNtLT5jYXJkOwotCXJlYWRfbG9jaygmY2FyZC0+Y3RsX2ZpbGVzX3J3bG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShrY3RsLCAmY2FyZC0+Y3RsX2ZpbGVzLCBsaXN0KSB7Ci0JCWlmIChrY3RsLT5waWQgPT0gdGFza19waWQoY3VycmVudCkpIHsKLQkJCXByZWZlcl9zdWJkZXZpY2UgPSBrY3RsLT5wcmVmZXJfcGNtX3N1YmRldmljZTsKLQkJCWlmIChwcmVmZXJfc3ViZGV2aWNlICE9IC0xKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCXJlYWRfdW5sb2NrKCZjYXJkLT5jdGxfZmlsZXNfcndsb2NrKTsKKwlwcmVmZXJfc3ViZGV2aWNlID0gc25kX2N0bF9nZXRfcHJlZmVycmVkX3N1YmRldmljZShjYXJkLCBTTkRfQ1RMX1NVQkRFVl9QQ00pOwogCiAJc3dpdGNoIChzdHJlYW0pIHsKIAljYXNlIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0s6CkBAIC0xMDc4LDkgKzEwODEsNyBAQAogCWludCBjaWR4LCBlcnI7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJc3RydWN0IHNuZF9wY21fbm90aWZ5ICpub3RpZnk7Ci0JY2hhciBzdHJbMTZdOwogCXN0cnVjdCBzbmRfcGNtICpwY207Ci0Jc3RydWN0IGRldmljZSAqZGV2OwogCiAJaWYgKHNuZF9CVUdfT04oIWRldmljZSB8fCAhZGV2aWNlLT5kZXZpY2VfZGF0YSkpCiAJCXJldHVybiAtRU5YSU87CkBAIC0xMDk3LDQyICsxMDk4LDIyIEBACiAJCQljb250aW51ZTsKIAkJc3dpdGNoIChjaWR4KSB7CiAJCWNhc2UgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzoKLQkJCXNwcmludGYoc3RyLCAicGNtQyVpRCVpcCIsIHBjbS0+Y2FyZC0+bnVtYmVyLCBwY20tPmRldmljZSk7CiAJCQlkZXZ0eXBlID0gU05EUlZfREVWSUNFX1RZUEVfUENNX1BMQVlCQUNLOwogCQkJYnJlYWs7CiAJCWNhc2UgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFOgotCQkJc3ByaW50ZihzdHIsICJwY21DJWlEJWljIiwgcGNtLT5jYXJkLT5udW1iZXIsIHBjbS0+ZGV2aWNlKTsKIAkJCWRldnR5cGUgPSBTTkRSVl9ERVZJQ0VfVFlQRV9QQ01fQ0FQVFVSRTsKIAkJCWJyZWFrOwogCQl9Ci0JCS8qIGRldmljZSBwb2ludGVyIHRvIHVzZSwgcGNtLT5kZXYgdGFrZXMgcHJlY2VkZW5jZSBpZgotCQkgKiBpdCBpcyBhc3NpZ25lZCwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBjYXJkJ3MgZGV2aWNlCi0JCSAqIGlmIHBvc3NpYmxlICovCi0JCWRldiA9IHBjbS0+ZGV2OwotCQlpZiAoIWRldikKLQkJCWRldiA9IHNuZF9jYXJkX2dldF9kZXZpY2VfbGluayhwY20tPmNhcmQpOwogCQkvKiByZWdpc3RlciBwY20gKi8KLQkJZXJyID0gc25kX3JlZ2lzdGVyX2RldmljZV9mb3JfZGV2KGRldnR5cGUsIHBjbS0+Y2FyZCwKLQkJCQkJCSAgcGNtLT5kZXZpY2UsCi0JCQkJCQkgICZzbmRfcGNtX2Zfb3BzW2NpZHhdLAotCQkJCQkJICBwY20sIHN0ciwgZGV2KTsKKwkJZXJyID0gc25kX3JlZ2lzdGVyX2RldmljZShkZXZ0eXBlLCBwY20tPmNhcmQsIHBjbS0+ZGV2aWNlLAorCQkJCQkgICZzbmRfcGNtX2Zfb3BzW2NpZHhdLCBwY20sCisJCQkJCSAgJnBjbS0+c3RyZWFtc1tjaWR4XS5kZXYpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJbGlzdF9kZWwoJnBjbS0+bGlzdCk7CiAJCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAotCQlkZXYgPSBzbmRfZ2V0X2RldmljZShkZXZ0eXBlLCBwY20tPmNhcmQsIHBjbS0+ZGV2aWNlKTsKLQkJaWYgKGRldikgewotCQkJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwcygmZGV2LT5rb2JqLAotCQkJCQkJICBwY21fZGV2X2F0dHJfZ3JvdXBzKTsKLQkJCWlmIChlcnIgPCAwKQotCQkJCWRldl93YXJuKGRldiwKLQkJCQkJICJwY20gJWQ6JWQ6IGNhbm5vdCBjcmVhdGUgc3lzZnMgZ3JvdXBzXG4iLAotCQkJCQkgcGNtLT5jYXJkLT5udW1iZXIsIHBjbS0+ZGV2aWNlKTsKLQkJCXB1dF9kZXZpY2UoZGV2KTsKLQkJfQotCiAJCWZvciAoc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW2NpZHhdLnN1YnN0cmVhbTsgc3Vic3RyZWFtOyBzdWJzdHJlYW0gPSBzdWJzdHJlYW0tPm5leHQpCiAJCQlzbmRfcGNtX3RpbWVyX2luaXQoc3Vic3RyZWFtKTsKIAl9CkBAIC0xMTQ5LDcgKzExMzAsNyBAQAogCXN0cnVjdCBzbmRfcGNtICpwY20gPSBkZXZpY2UtPmRldmljZV9kYXRhOwogCXN0cnVjdCBzbmRfcGNtX25vdGlmeSAqbm90aWZ5OwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwotCWludCBjaWR4LCBkZXZ0eXBlOworCWludCBjaWR4OwogCiAJbXV0ZXhfbG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCWlmIChsaXN0X2VtcHR5KCZwY20tPmxpc3QpKQpAQCAtMTE3MiwxNiArMTE1Myw3IEBACiAJCW5vdGlmeS0+bl9kaXNjb25uZWN0KHBjbSk7CiAJfQogCWZvciAoY2lkeCA9IDA7IGNpZHggPCAyOyBjaWR4KyspIHsKLQkJZGV2dHlwZSA9IC0xOwotCQlzd2l0Y2ggKGNpZHgpIHsKLQkJY2FzZSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLOgotCQkJZGV2dHlwZSA9IFNORFJWX0RFVklDRV9UWVBFX1BDTV9QTEFZQkFDSzsKLQkJCWJyZWFrOwotCQljYXNlIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRToKLQkJCWRldnR5cGUgPSBTTkRSVl9ERVZJQ0VfVFlQRV9QQ01fQ0FQVFVSRTsKLQkJCWJyZWFrOwotCQl9Ci0JCXNuZF91bnJlZ2lzdGVyX2RldmljZShkZXZ0eXBlLCBwY20tPmNhcmQsIHBjbS0+ZGV2aWNlKTsKKwkJc25kX3VucmVnaXN0ZXJfZGV2aWNlKCZwY20tPnN0cmVhbXNbY2lkeF0uZGV2KTsKIAkJaWYgKHBjbS0+c3RyZWFtc1tjaWR4XS5jaG1hcF9rY3RsKSB7CiAJCQlzbmRfY3RsX3JlbW92ZShwY20tPmNhcmQsIHBjbS0+c3RyZWFtc1tjaWR4XS5jaG1hcF9rY3RsKTsKIAkJCXBjbS0+c3RyZWFtc1tjaWR4XS5jaG1hcF9rY3RsID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX2xpYi5jIGIvc291bmQvY29yZS9wY21fbGliLmMKaW5kZXggZWM5ZTc4Ni4uZmZkNjU2MCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbGliLmMKKysrIGIvc291bmQvY29yZS9wY21fbGliLmMKQEAgLTEwMTUsNiArMTAxNSw2MCBAQAogCiBFWFBPUlRfU1lNQk9MKHNuZF9pbnRlcnZhbF9saXN0KTsKIAorLyoqCisgKiBzbmRfaW50ZXJ2YWxfcmFuZ2VzIC0gcmVmaW5lIHRoZSBpbnRlcnZhbCB2YWx1ZSBmcm9tIHRoZSBsaXN0IG9mIHJhbmdlcworICogQGk6IHRoZSBpbnRlcnZhbCB2YWx1ZSB0byByZWZpbmUKKyAqIEBjb3VudDogdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgbGlzdCBvZiByYW5nZXMKKyAqIEByYW5nZXM6IHRoZSByYW5nZXMgbGlzdAorICogQG1hc2s6IHRoZSBiaXQtbWFzayB0byBldmFsdWF0ZQorICoKKyAqIFJlZmluZXMgdGhlIGludGVydmFsIHZhbHVlIGZyb20gdGhlIGxpc3Qgb2YgcmFuZ2VzLgorICogV2hlbiBtYXNrIGlzIG5vbi16ZXJvLCBvbmx5IHRoZSBlbGVtZW50cyBjb3JyZXNwb25kaW5nIHRvIGJpdCAxIGFyZQorICogZXZhbHVhdGVkLgorICoKKyAqIFJldHVybjogUG9zaXRpdmUgaWYgdGhlIHZhbHVlIGlzIGNoYW5nZWQsIHplcm8gaWYgaXQncyBub3QgY2hhbmdlZCwgb3IgYQorICogbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IHNuZF9pbnRlcnZhbF9yYW5nZXMoc3RydWN0IHNuZF9pbnRlcnZhbCAqaSwgdW5zaWduZWQgaW50IGNvdW50LAorCQkJY29uc3Qgc3RydWN0IHNuZF9pbnRlcnZhbCAqcmFuZ2VzLCB1bnNpZ25lZCBpbnQgbWFzaykKK3sKKwl1bnNpZ25lZCBpbnQgazsKKwlzdHJ1Y3Qgc25kX2ludGVydmFsIHJhbmdlX3VuaW9uOworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgcmFuZ2U7CisKKwlpZiAoIWNvdW50KSB7CisJCXNuZF9pbnRlcnZhbF9ub25lKGkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc25kX2ludGVydmFsX2FueSgmcmFuZ2VfdW5pb24pOworCXJhbmdlX3VuaW9uLm1pbiA9IFVJTlRfTUFYOworCXJhbmdlX3VuaW9uLm1heCA9IDA7CisJZm9yIChrID0gMDsgayA8IGNvdW50OyBrKyspIHsKKwkJaWYgKG1hc2sgJiYgIShtYXNrICYgKDEgPDwgaykpKQorCQkJY29udGludWU7CisJCXNuZF9pbnRlcnZhbF9jb3B5KCZyYW5nZSwgJnJhbmdlc1trXSk7CisJCWlmIChzbmRfaW50ZXJ2YWxfcmVmaW5lKCZyYW5nZSwgaSkgPCAwKQorCQkJY29udGludWU7CisJCWlmIChzbmRfaW50ZXJ2YWxfZW1wdHkoJnJhbmdlKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChyYW5nZS5taW4gPCByYW5nZV91bmlvbi5taW4pIHsKKwkJCXJhbmdlX3VuaW9uLm1pbiA9IHJhbmdlLm1pbjsKKwkJCXJhbmdlX3VuaW9uLm9wZW5taW4gPSAxOworCQl9CisJCWlmIChyYW5nZS5taW4gPT0gcmFuZ2VfdW5pb24ubWluICYmICFyYW5nZS5vcGVubWluKQorCQkJcmFuZ2VfdW5pb24ub3Blbm1pbiA9IDA7CisJCWlmIChyYW5nZS5tYXggPiByYW5nZV91bmlvbi5tYXgpIHsKKwkJCXJhbmdlX3VuaW9uLm1heCA9IHJhbmdlLm1heDsKKwkJCXJhbmdlX3VuaW9uLm9wZW5tYXggPSAxOworCQl9CisJCWlmIChyYW5nZS5tYXggPT0gcmFuZ2VfdW5pb24ubWF4ICYmICFyYW5nZS5vcGVubWF4KQorCQkJcmFuZ2VfdW5pb24ub3Blbm1heCA9IDA7CisJfQorCXJldHVybiBzbmRfaW50ZXJ2YWxfcmVmaW5lKGksICZyYW5nZV91bmlvbik7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9pbnRlcnZhbF9yYW5nZXMpOworCiBzdGF0aWMgaW50IHNuZF9pbnRlcnZhbF9zdGVwKHN0cnVjdCBzbmRfaW50ZXJ2YWwgKmksIHVuc2lnbmVkIGludCBzdGVwKQogewogCXVuc2lnbmVkIGludCBuOwpAQCAtMTIyMSw2ICsxMjc1LDM3IEBACiAKIEVYUE9SVF9TWU1CT0woc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QpOwogCitzdGF0aWMgaW50IHNuZF9wY21faHdfcnVsZV9yYW5nZXMoc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsCisJCQkJICBzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICpydWxlKQoreworCXN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmFuZ2VzICpyID0gcnVsZS0+cHJpdmF0ZTsKKwlyZXR1cm4gc25kX2ludGVydmFsX3Jhbmdlcyhod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsIHJ1bGUtPnZhciksCisJCQkJICAgci0+Y291bnQsIHItPnJhbmdlcywgci0+bWFzayk7Cit9CisKKworLyoqCisgKiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmFuZ2VzIC0gYXBwbHkgbGlzdCBvZiByYW5nZSBjb25zdHJhaW50cyB0byBhIHBhcmFtZXRlcgorICogQHJ1bnRpbWU6IFBDTSBydW50aW1lIGluc3RhbmNlCisgKiBAY29uZDogY29uZGl0aW9uIGJpdHMKKyAqIEB2YXI6IGh3X3BhcmFtcyB2YXJpYWJsZSB0byBhcHBseSB0aGUgbGlzdCBvZiByYW5nZSBjb25zdHJhaW50cworICogQHI6IHJhbmdlcworICoKKyAqIEFwcGx5IHRoZSBsaXN0IG9mIHJhbmdlIGNvbnN0cmFpbnRzIHRvIGFuIGludGVydmFsIHBhcmFtZXRlci4KKyAqCisgKiBSZXR1cm46IFplcm8gaWYgc3VjY2Vzc2Z1bCwgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCisgKi8KK2ludCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmFuZ2VzKHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsCisJCQkJIHVuc2lnbmVkIGludCBjb25kLAorCQkJCSBzbmRfcGNtX2h3X3BhcmFtX3QgdmFyLAorCQkJCSBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X3JhbmdlcyAqcikKK3sKKwlyZXR1cm4gc25kX3BjbV9od19ydWxlX2FkZChydW50aW1lLCBjb25kLCB2YXIsCisJCQkJICAgc25kX3BjbV9od19ydWxlX3JhbmdlcywgKHZvaWQgKilyLAorCQkJCSAgIHZhciwgLTEpOworfQorRVhQT1JUX1NZTUJPTChzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmFuZ2VzKTsKKwogc3RhdGljIGludCBzbmRfcGNtX2h3X3J1bGVfcmF0bnVtcyhzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKIAkJCQkgICBzdHJ1Y3Qgc25kX3BjbV9od19ydWxlICpydWxlKQogewpAQCAtMTI5OSw4ICsxMzg0LDE0IEBACiAJaW50IHdpZHRoID0gbCAmIDB4ZmZmZjsKIAl1bnNpZ25lZCBpbnQgbXNiaXRzID0gbCA+PiAxNjsKIAlzdHJ1Y3Qgc25kX2ludGVydmFsICppID0gaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLCBTTkRSVl9QQ01fSFdfUEFSQU1fU0FNUExFX0JJVFMpOwotCWlmIChzbmRfaW50ZXJ2YWxfc2luZ2xlKGkpICYmIHNuZF9pbnRlcnZhbF92YWx1ZShpKSA9PSB3aWR0aCkKLQkJcGFyYW1zLT5tc2JpdHMgPSBtc2JpdHM7CisKKwlpZiAoIXNuZF9pbnRlcnZhbF9zaW5nbGUoaSkpCisJCXJldHVybiAwOworCisJaWYgKChzbmRfaW50ZXJ2YWxfdmFsdWUoaSkgPT0gd2lkdGgpIHx8CisJICAgICh3aWR0aCA9PSAwICYmIHNuZF9pbnRlcnZhbF92YWx1ZShpKSA+IG1zYml0cykpCisJCXBhcmFtcy0+bXNiaXRzID0gbWluX25vdF96ZXJvKHBhcmFtcy0+bXNiaXRzLCBtc2JpdHMpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzMTEsNiArMTQwMiwxMSBAQAogICogQHdpZHRoOiBzYW1wbGUgYml0cyB3aWR0aAogICogQG1zYml0czogbXNiaXRzIHdpZHRoCiAgKgorICogVGhpcyBjb25zdHJhaW50IHdpbGwgc2V0IHRoZSBudW1iZXIgb2YgbW9zdCBzaWduaWZpY2FudCBiaXRzIChtc2JpdHMpIGlmIGEKKyAqIHNhbXBsZSBmb3JtYXQgd2l0aCB0aGUgc3BlY2lmaWVkIHdpZHRoIGhhcyBiZWVuIHNlbGVjdC4gSWYgd2lkdGggaXMgc2V0IHRvIDAKKyAqIHRoZSBtc2JpdHMgd2lsbCBiZSBzZXQgZm9yIGFueSBzYW1wbGUgZm9ybWF0IHdpdGggYSB3aWR0aCBsYXJnZXIgdGhhbiB0aGUKKyAqIHNwZWNpZmllZCBtc2JpdHMuCisgKgogICogUmV0dXJuOiBaZXJvIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgogICovCiBpbnQgc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cyhzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lLCAKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtX21lbW9yeS5jIGIvc291bmQvY29yZS9wY21fbWVtb3J5LmMKaW5kZXggNTRkZWJjMC4uYjQ1ZjZhYSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9wY21fbWVtb3J5LmMKKysrIGIvc291bmQvY29yZS9wY21fbWVtb3J5LmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCmluZGV4IDA5NWQ5NTcuLmIwM2E2MzggMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCisrKyBiL3NvdW5kL2NvcmUvcGNtX25hdGl2ZS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3Fvcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Fpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgpAQCAtMzQsNyArMzUsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC90aW1lci5oPgogI2luY2x1ZGUgPHNvdW5kL21pbm9ycy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogCiAvKgogICogIENvbXBhdGliaWxpdHkKQEAgLTQyMCw3ICs0MjAsOCBAQAogCiAJaHcgPSAmc3Vic3RyZWFtLT5ydW50aW1lLT5odzsKIAlpZiAoIXBhcmFtcy0+aW5mbykgewotCQlwYXJhbXMtPmluZm8gPSBody0+aW5mbyAmIH5TTkRSVl9QQ01fSU5GT19GSUZPX0lOX0ZSQU1FUzsKKwkJcGFyYW1zLT5pbmZvID0gaHctPmluZm8gJiB+KFNORFJWX1BDTV9JTkZPX0ZJRk9fSU5fRlJBTUVTIHwKKwkJCQkJICAgIFNORFJWX1BDTV9JTkZPX0RSQUlOX1RSSUdHRVIpOwogCQlpZiAoIWh3X3N1cHBvcnRfbW1hcChzdWJzdHJlYW0pKQogCQkJcGFyYW1zLT5pbmZvICY9IH4oU05EUlZfUENNX0lORk9fTU1BUCB8CiAJCQkJCSAgU05EUlZfUENNX0lORk9fTU1BUF9WQUxJRCk7CkBAIC03MTksOCArNzIwLDExIEBACiAJCQkJcnVudGltZS0+c3RhdHVzLT5hdWRpb190c3RhbXA7CiAJCQlnb3RvIF90c3RhbXBfZW5kOwogCQl9CisJfSBlbHNlIHsKKwkJLyogZ2V0IHRzdGFtcCBvbmx5IGluIGZhbGxiYWNrIG1vZGUgYW5kIG9ubHkgaWYgZW5hYmxlZCAqLworCQlpZiAocnVudGltZS0+dHN0YW1wX21vZGUgPT0gU05EUlZfUENNX1RTVEFNUF9FTkFCTEUpCisJCQlzbmRfcGNtX2dldHRpbWUocnVudGltZSwgJnN0YXR1cy0+dHN0YW1wKTsKIAl9Ci0Jc25kX3BjbV9nZXR0aW1lKHJ1bnRpbWUsICZzdGF0dXMtPnRzdGFtcCk7CiAgX3RzdGFtcF9lbmQ6CiAJc3RhdHVzLT5hcHBsX3B0ciA9IHJ1bnRpbWUtPmNvbnRyb2wtPmFwcGxfcHRyOwogCXN0YXR1cy0+aHdfcHRyID0gcnVudGltZS0+c3RhdHVzLT5od19wdHI7CkBAIC04MDYsNyArODEwLDggQEAKIAlpZiAocnVudGltZS0+dHJpZ2dlcl9tYXN0ZXIgPT0gTlVMTCkKIAkJcmV0dXJuOwogCWlmIChydW50aW1lLT50cmlnZ2VyX21hc3RlciA9PSBzdWJzdHJlYW0pIHsKLQkJc25kX3BjbV9nZXR0aW1lKHJ1bnRpbWUsICZydW50aW1lLT50cmlnZ2VyX3RzdGFtcCk7CisJCWlmICghcnVudGltZS0+dHJpZ2dlcl90c3RhbXBfbGF0Y2hlZCkKKwkJCXNuZF9wY21fZ2V0dGltZShydW50aW1lLCAmcnVudGltZS0+dHJpZ2dlcl90c3RhbXApOwogCX0gZWxzZSB7CiAJCXNuZF9wY21fdHJpZ2dlcl90c3RhbXAocnVudGltZS0+dHJpZ2dlcl9tYXN0ZXIpOwogCQlydW50aW1lLT50cmlnZ2VyX3RzdGFtcCA9IHJ1bnRpbWUtPnRyaWdnZXJfbWFzdGVyLT5ydW50aW1lLT50cmlnZ2VyX3RzdGFtcDsKQEAgLTk3NSw2ICs5ODAsNyBAQAogCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLICYmCiAJICAgICFzbmRfcGNtX3BsYXliYWNrX2RhdGEoc3Vic3RyZWFtKSkKIAkJcmV0dXJuIC1FUElQRTsKKwlydW50aW1lLT50cmlnZ2VyX3RzdGFtcF9sYXRjaGVkID0gZmFsc2U7CiAJcnVudGltZS0+dHJpZ2dlcl9tYXN0ZXIgPSBzdWJzdHJlYW07CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTY2LDYgKzE1NzIsMTMgQEAKIAkJCXNuZF9wY21fcG9zdF9zdG9wKHN1YnN0cmVhbSwgbmV3X3N0YXRlKTsKIAkJfQogCX0KKworCWlmIChydW50aW1lLT5zdGF0dXMtPnN0YXRlID09IFNORFJWX1BDTV9TVEFURV9EUkFJTklORyAmJgorCSAgICBydW50aW1lLT50cmlnZ2VyX21hc3RlciA9PSBzdWJzdHJlYW0gJiYKKwkgICAgKHJ1bnRpbWUtPmh3LmluZm8gJiBTTkRSVl9QQ01fSU5GT19EUkFJTl9UUklHR0VSKSkKKwkJcmV0dXJuIHN1YnN0cmVhbS0+b3BzLT50cmlnZ2VyKHN1YnN0cmVhbSwKKwkJCQkJICAgICAgIFNORFJWX1BDTV9UUklHR0VSX0RSQUlOKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3Jhd21pZGkuYyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCmluZGV4IDZmYzcxYTQuLmI1YTc0ODUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcmF3bWlkaS5jCisrKyBiL3NvdW5kL2NvcmUvcmF3bWlkaS5jCkBAIC01NywxMSArNTcsMTEgQEAKIHN0YXRpYyBERUZJTkVfTVVURVgocmVnaXN0ZXJfbXV0ZXgpOwogCiAjZGVmaW5lIHJtaWRpX2VycihybWlkaSwgZm10LCBhcmdzLi4uKSBcCi0JZGV2X2Vycigocm1pZGkpLT5jYXJkLT5kZXYsIGZtdCwgIyNhcmdzKQorCWRldl9lcnIoJihybWlkaSktPmRldiwgZm10LCAjI2FyZ3MpCiAjZGVmaW5lIHJtaWRpX3dhcm4ocm1pZGksIGZtdCwgYXJncy4uLikgXAotCWRldl93YXJuKChybWlkaSktPmNhcmQtPmRldiwgZm10LCAjI2FyZ3MpCisJZGV2X3dhcm4oJihybWlkaSktPmRldiwgZm10LCAjI2FyZ3MpCiAjZGVmaW5lIHJtaWRpX2RiZyhybWlkaSwgZm10LCBhcmdzLi4uKSBcCi0JZGV2X2RiZygocm1pZGkpLT5jYXJkLT5kZXYsIGZtdCwgIyNhcmdzKQorCWRldl9kYmcoJihybWlkaSktPmRldiwgZm10LCAjI2FyZ3MpCiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3Jhd21pZGkgKnNuZF9yYXdtaWRpX3NlYXJjaChzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UpCiB7CkBAIC0zNjksNyArMzY5LDYgQEAKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwogCXN0cnVjdCBzbmRfcmF3bWlkaV9maWxlICpyYXdtaWRpX2ZpbGUgPSBOVUxMOwogCXdhaXRfcXVldWVfdCB3YWl0OwotCXN0cnVjdCBzbmRfY3RsX2ZpbGUgKmtjdGw7CiAKIAlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0FQUEVORCkgJiYgIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykpIAogCQlyZXR1cm4gLUVJTlZBTDsJCS8qIGludmFsaWQgY29tYmluYXRpb24gKi8KQEAgLTQxMywxNiArNDEyLDcgQEAKIAlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7CiAJYWRkX3dhaXRfcXVldWUoJnJtaWRpLT5vcGVuX3dhaXQsICZ3YWl0KTsKIAl3aGlsZSAoMSkgewotCQlzdWJkZXZpY2UgPSAtMTsKLQkJcmVhZF9sb2NrKCZjYXJkLT5jdGxfZmlsZXNfcndsb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShrY3RsLCAmY2FyZC0+Y3RsX2ZpbGVzLCBsaXN0KSB7Ci0JCQlpZiAoa2N0bC0+cGlkID09IHRhc2tfcGlkKGN1cnJlbnQpKSB7Ci0JCQkJc3ViZGV2aWNlID0ga2N0bC0+cHJlZmVyX3Jhd21pZGlfc3ViZGV2aWNlOwotCQkJCWlmIChzdWJkZXZpY2UgIT0gLTEpCi0JCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXJlYWRfdW5sb2NrKCZjYXJkLT5jdGxfZmlsZXNfcndsb2NrKTsKKwkJc3ViZGV2aWNlID0gc25kX2N0bF9nZXRfcHJlZmVycmVkX3N1YmRldmljZShjYXJkLCBTTkRfQ1RMX1NVQkRFVl9SQVdNSURJKTsKIAkJZXJyID0gcmF3bWlkaV9vcGVuX3ByaXYocm1pZGksIHN1YmRldmljZSwgZmZsYWdzLCByYXdtaWRpX2ZpbGUpOwogCQlpZiAoZXJyID49IDApCiAJCQlicmVhazsKQEAgLTg2Miw3ICs4NTIsNyBAQAogCQkKIAkJaWYgKGdldF91c2VyKHZhbCwgKGludCBfX3VzZXIgKilhcmdwKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQljb250cm9sLT5wcmVmZXJfcmF3bWlkaV9zdWJkZXZpY2UgPSB2YWw7CisJCWNvbnRyb2wtPnByZWZlcnJlZF9zdWJkZXZpY2VbU05EX0NUTF9TVUJERVZfUkFXTUlESV0gPSB2YWw7CiAJCXJldHVybiAwOwogCX0KIAljYXNlIFNORFJWX0NUTF9JT0NUTF9SQVdNSURJX0lORk86CkBAIC0xNDUzLDYgKzE0NDMsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcmVsZWFzZV9yYXdtaWRpX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJa2ZyZWUoY29udGFpbmVyX29mKGRldiwgc3RydWN0IHNuZF9yYXdtaWRpLCBkZXYpKTsKK30KKwogLyoqCiAgKiBzbmRfcmF3bWlkaV9uZXcgLSBjcmVhdGUgYSByYXdtaWRpIGluc3RhbmNlCiAgKiBAY2FyZDogdGhlIGNhcmQgaW5zdGFuY2UKQEAgLTE0OTcsNiArMTQ5MiwxMSBAQAogCiAJaWYgKGlkICE9IE5VTEwpCiAJCXN0cmxjcHkocm1pZGktPmlkLCBpZCwgc2l6ZW9mKHJtaWRpLT5pZCkpOworCisJc25kX2RldmljZV9pbml0aWFsaXplKCZybWlkaS0+ZGV2LCBjYXJkKTsKKwlybWlkaS0+ZGV2LnJlbGVhc2UgPSByZWxlYXNlX3Jhd21pZGlfZGV2aWNlOworCWRldl9zZXRfbmFtZSgmcm1pZGktPmRldiwgIm1pZGlDJWlEJWkiLCBjYXJkLT5udW1iZXIsIGRldmljZSk7CisKIAlpZiAoKGVyciA9IHNuZF9yYXdtaWRpX2FsbG9jX3N1YnN0cmVhbXMocm1pZGksCiAJCQkJCQkmcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVRdLAogCQkJCQkJU05EUlZfUkFXTUlESV9TVFJFQU1fSU5QVVQsCkBAIC0xNTQ4LDcgKzE1NDgsNyBAQAogCXNuZF9yYXdtaWRpX2ZyZWVfc3Vic3RyZWFtcygmcm1pZGktPnN0cmVhbXNbU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVUXSk7CiAJaWYgKHJtaWRpLT5wcml2YXRlX2ZyZWUpCiAJCXJtaWRpLT5wcml2YXRlX2ZyZWUocm1pZGkpOwotCWtmcmVlKHJtaWRpKTsKKwlwdXRfZGV2aWNlKCZybWlkaS0+ZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU4MSwxOSArMTU4MSwxOCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlsaXN0X2FkZF90YWlsKCZybWlkaS0+bGlzdCwgJnNuZF9yYXdtaWRpX2RldmljZXMpOwotCXNwcmludGYobmFtZSwgIm1pZGlDJWlEJWkiLCBybWlkaS0+Y2FyZC0+bnVtYmVyLCBybWlkaS0+ZGV2aWNlKTsKLQlpZiAoKGVyciA9IHNuZF9yZWdpc3Rlcl9kZXZpY2UoU05EUlZfREVWSUNFX1RZUEVfUkFXTUlESSwKLQkJCQkgICAgICAgcm1pZGktPmNhcmQsIHJtaWRpLT5kZXZpY2UsCi0JCQkJICAgICAgICZzbmRfcmF3bWlkaV9mX29wcywgcm1pZGksIG5hbWUpKSA8IDApIHsKLQkJcm1pZGlfZXJyKHJtaWRpLCAidW5hYmxlIHRvIHJlZ2lzdGVyIHJhd21pZGkgZGV2aWNlICVpOiVpXG4iLAotCQkJICBybWlkaS0+Y2FyZC0+bnVtYmVyLCBybWlkaS0+ZGV2aWNlKTsKKwllcnIgPSBzbmRfcmVnaXN0ZXJfZGV2aWNlKFNORFJWX0RFVklDRV9UWVBFX1JBV01JREksCisJCQkJICBybWlkaS0+Y2FyZCwgcm1pZGktPmRldmljZSwKKwkJCQkgICZzbmRfcmF3bWlkaV9mX29wcywgcm1pZGksICZybWlkaS0+ZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlybWlkaV9lcnIocm1pZGksICJ1bmFibGUgdG8gcmVnaXN0ZXJcbiIpOwogCQlsaXN0X2RlbCgmcm1pZGktPmxpc3QpOwogCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKHJtaWRpLT5vcHMgJiYgcm1pZGktPm9wcy0+ZGV2X3JlZ2lzdGVyICYmCiAJICAgIChlcnIgPSBybWlkaS0+b3BzLT5kZXZfcmVnaXN0ZXIocm1pZGkpKSA8IDApIHsKLQkJc25kX3VucmVnaXN0ZXJfZGV2aWNlKFNORFJWX0RFVklDRV9UWVBFX1JBV01JREksIHJtaWRpLT5jYXJkLCBybWlkaS0+ZGV2aWNlKTsKKwkJc25kX3VucmVnaXN0ZXJfZGV2aWNlKCZybWlkaS0+ZGV2KTsKIAkJbGlzdF9kZWwoJnJtaWRpLT5saXN0KTsKIAkJbXV0ZXhfdW5sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CiAJCXJldHVybiBlcnI7CkBAIC0xNjgxLDcgKzE2ODAsNyBAQAogCQlybWlkaS0+b3NzcmVnID0gMDsKIAl9CiAjZW5kaWYgLyogQ09ORklHX1NORF9PU1NFTVVMICovCi0Jc25kX3VucmVnaXN0ZXJfZGV2aWNlKFNORFJWX0RFVklDRV9UWVBFX1JBV01JREksIHJtaWRpLT5jYXJkLCBybWlkaS0+ZGV2aWNlKTsKKwlzbmRfdW5yZWdpc3Rlcl9kZXZpY2UoJnJtaWRpLT5kZXYpOwogCW11dGV4X3VubG9jaygmcm1pZGktPm9wZW5fbXV0ZXgpOwogCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfbWlkaS5jIGIvc291bmQvY29yZS9zZXEvb3NzL3NlcV9vc3NfbWlkaS5jCmluZGV4IDNhNDU2OTYuLmU3OWNjNDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL29zcy9zZXFfb3NzX21pZGkuYworKysgYi9zb3VuZC9jb3JlL3NlcS9vc3Mvc2VxX29zc19taWRpLmMKQEAgLTIzNyw4ICsyMzcsNyBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyZWdpc3Rlcl9sb2NrLCBmbGFncyk7CiAJCXNuZF91c2VfbG9ja19mcmVlKCZtZGV2LT51c2VfbG9jayk7CiAJCXNuZF91c2VfbG9ja19zeW5jKCZtZGV2LT51c2VfbG9jayk7Ci0JCWlmIChtZGV2LT5jb2RlcikKLQkJCXNuZF9taWRpX2V2ZW50X2ZyZWUobWRldi0+Y29kZXIpOworCQlzbmRfbWlkaV9ldmVudF9mcmVlKG1kZXYtPmNvZGVyKTsKIAkJa2ZyZWUobWRldik7CiAJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZyZWdpc3Rlcl9sb2NrLCBmbGFncyk7CkBAIC0yNjUsOCArMjY0LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcmVnaXN0ZXJfbG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBtYXhfbWlkaV9kZXZzOyBpKyspIHsKIAkJaWYgKChtZGV2ID0gbWlkaV9kZXZzW2ldKSAhPSBOVUxMKSB7Ci0JCQlpZiAobWRldi0+Y29kZXIpCi0JCQkJc25kX21pZGlfZXZlbnRfZnJlZShtZGV2LT5jb2Rlcik7CisJCQlzbmRfbWlkaV9ldmVudF9mcmVlKG1kZXYtPmNvZGVyKTsKIAkJCWtmcmVlKG1kZXYpOwogCQkJbWlkaV9kZXZzW2ldID0gTlVMTDsKIAkJfQpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jIGIvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jCmluZGV4IDIyNWM3MzE1Li40ODI4NzY1IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfY2xpZW50bWdyLmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX2NsaWVudG1nci5jCkBAIC0xMTMzLDcgKzExMzMsNyBAQAogCS8qIGZpbGwgdGhlIGluZm8gZmllbGRzICovCiAJaW5mby5xdWV1ZXMgPSBTTkRSVl9TRVFfTUFYX1FVRVVFUzsKIAlpbmZvLmNsaWVudHMgPSBTTkRSVl9TRVFfTUFYX0NMSUVOVFM7Ci0JaW5mby5wb3J0cyA9IDI1NjsJLyogZml4ZWQgbGltaXQgKi8KKwlpbmZvLnBvcnRzID0gU05EUlZfU0VRX01BWF9QT1JUUzsKIAlpbmZvLmNoYW5uZWxzID0gMjU2OwkvKiBmaXhlZCBsaW1pdCAqLwogCWluZm8uY3VyX2NsaWVudHMgPSBjbGllbnRfdXNhZ2UuY3VyOwogCWluZm8uY3VyX3F1ZXVlcyA9IHNuZF9zZXFfcXVldWVfZ2V0X2N1cl9xdWV1ZXMoKTsKQEAgLTEyNzksNyArMTI3OSw2IEBACiAJCQkJcG9ydC0+b3duZXIgPSBjYWxsYmFjay0+b3duZXI7CiAJCQlwb3J0LT5wcml2YXRlX2RhdGEgPSBjYWxsYmFjay0+cHJpdmF0ZV9kYXRhOwogCQkJcG9ydC0+cHJpdmF0ZV9mcmVlID0gY2FsbGJhY2stPnByaXZhdGVfZnJlZTsKLQkJCXBvcnQtPmNhbGxiYWNrX2FsbCA9IGNhbGxiYWNrLT5jYWxsYmFja19hbGw7CiAJCQlwb3J0LT5ldmVudF9pbnB1dCA9IGNhbGxiYWNrLT5ldmVudF9pbnB1dDsKIAkJCXBvcnQtPmNfc3JjLm9wZW4gPSBjYWxsYmFjay0+c3Vic2NyaWJlOwogCQkJcG9ydC0+Y19zcmMuY2xvc2UgPSBjYWxsYmFjay0+dW5zdWJzY3JpYmU7CkBAIC0yNTcxLDYgKzI1NzAsOCBAQAogCS5jb21wYXRfaW9jdGwgPQlzbmRfc2VxX2lvY3RsX2NvbXBhdCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlIHNlcV9kZXY7CisKIC8qIAogICogcmVnaXN0ZXIgc2VxdWVuY2VyIGRldmljZSAKICAqLwpAQCAtMjU3OCwxMiArMjU3OSwxNyBAQAogewogCWludCBlcnI7CiAKKwlzbmRfZGV2aWNlX2luaXRpYWxpemUoJnNlcV9kZXYsIE5VTEwpOworCWRldl9zZXRfbmFtZSgmc2VxX2RldiwgInNlcSIpOworCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmcmVnaXN0ZXJfbXV0ZXgpKQogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCi0JaWYgKChlcnIgPSBzbmRfcmVnaXN0ZXJfZGV2aWNlKFNORFJWX0RFVklDRV9UWVBFX1NFUVVFTkNFUiwgTlVMTCwgMCwKLQkJCQkgICAgICAgJnNuZF9zZXFfZl9vcHMsIE5VTEwsICJzZXEiKSkgPCAwKSB7CisJZXJyID0gc25kX3JlZ2lzdGVyX2RldmljZShTTkRSVl9ERVZJQ0VfVFlQRV9TRVFVRU5DRVIsIE5VTEwsIDAsCisJCQkJICAmc25kX3NlcV9mX29wcywgTlVMTCwgJnNlcV9kZXYpOworCWlmIChlcnIgPCAwKSB7CiAJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOworCQlwdXRfZGV2aWNlKCZzZXFfZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9CiAJCkBAIC0yNTk5LDUgKzI2MDUsNiBAQAogICovCiB2b2lkIF9fZXhpdCBzbmRfc2VxdWVuY2VyX2RldmljZV9kb25lKHZvaWQpCiB7Ci0Jc25kX3VucmVnaXN0ZXJfZGV2aWNlKFNORFJWX0RFVklDRV9UWVBFX1NFUVVFTkNFUiwgTlVMTCwgMCk7CisJc25kX3VucmVnaXN0ZXJfZGV2aWNlKCZzZXFfZGV2KTsKKwlwdXRfZGV2aWNlKCZzZXFfZGV2KTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9kdW1teS5jIGIvc291bmQvY29yZS9zZXEvc2VxX2R1bW15LmMKaW5kZXggZWM2NjdmMS4uNWQ5MDVkOSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX2R1bW15LmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX2R1bW15LmMKQEAgLTgyLDM2ICs4Miw2IEBACiBzdGF0aWMgaW50IG15X2NsaWVudCA9IC0xOwogCiAvKgotICogdW51c2UgY2FsbGJhY2sgLSBzZW5kIEFMTF9TT1VORFNfT0ZGIGFuZCBSRVNFVF9DT05UUk9MTEVSUyBldmVudHMKLSAqIHRvIHN1YnNjcmliZXJzLgotICogTm90ZTogdGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgb25seSBhZnRlciBhbGwgc3Vic2NyaWJlcnMgYXJlIHJlbW92ZWQuCi0gKi8KLXN0YXRpYyBpbnQKLWR1bW15X3VudXNlKHZvaWQgKnByaXZhdGVfZGF0YSwgc3RydWN0IHNuZF9zZXFfcG9ydF9zdWJzY3JpYmUgKmluZm8pCi17Ci0Jc3RydWN0IHNuZF9zZXFfZHVtbXlfcG9ydCAqcDsKLQlpbnQgaTsKLQlzdHJ1Y3Qgc25kX3NlcV9ldmVudCBldjsKLQotCXAgPSBwcml2YXRlX2RhdGE7Ci0JbWVtc2V0KCZldiwgMCwgc2l6ZW9mKGV2KSk7Ci0JaWYgKHAtPmR1cGxleCkKLQkJZXYuc291cmNlLnBvcnQgPSBwLT5jb25uZWN0OwotCWVsc2UKLQkJZXYuc291cmNlLnBvcnQgPSBwLT5wb3J0OwotCWV2LmRlc3QuY2xpZW50ID0gU05EUlZfU0VRX0FERFJFU1NfU1VCU0NSSUJFUlM7Ci0JZXYudHlwZSA9IFNORFJWX1NFUV9FVkVOVF9DT05UUk9MTEVSOwotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0JCWV2LmRhdGEuY29udHJvbC5jaGFubmVsID0gaTsKLQkJZXYuZGF0YS5jb250cm9sLnBhcmFtID0gTUlESV9DVExfQUxMX1NPVU5EU19PRkY7Ci0JCXNuZF9zZXFfa2VybmVsX2NsaWVudF9kaXNwYXRjaChwLT5jbGllbnQsICZldiwgMCwgMCk7Ci0JCWV2LmRhdGEuY29udHJvbC5wYXJhbSA9IE1JRElfQ1RMX1JFU0VUX0NPTlRST0xMRVJTOwotCQlzbmRfc2VxX2tlcm5lbF9jbGllbnRfZGlzcGF0Y2gocC0+Y2xpZW50LCAmZXYsIDAsIDApOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyoKICAqIGV2ZW50IGlucHV0IGNhbGxiYWNrIC0ganVzdCByZWRpcmVjdCBldmVudHMgdG8gc3Vic2NyaWJlcnMKICAqLwogc3RhdGljIGludApAQCAtMTc1LDcgKzE0NSw2IEBACiAJCXwgU05EUlZfU0VRX1BPUlRfVFlQRV9QT1JUOwogCW1lbXNldCgmcGNiLCAwLCBzaXplb2YocGNiKSk7CiAJcGNiLm93bmVyID0gVEhJU19NT0RVTEU7Ci0JcGNiLnVudXNlID0gZHVtbXlfdW51c2U7CiAJcGNiLmV2ZW50X2lucHV0ID0gZHVtbXlfaW5wdXQ7CiAJcGNiLnByaXZhdGVfZnJlZSA9IGR1bW15X2ZyZWU7CiAJcGNiLnByaXZhdGVfZGF0YSA9IHJlYzsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9taWRpLmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfbWlkaS5jCmluZGV4IGExZmQ3N2EuLjY4ZmVjNzcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9taWRpLmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX21pZGkuYwpAQCAtMjY4LDggKzI2OCw3IEBACiAJCXNuZF9zZXFfZXZlbnRfcG9ydF9kZXRhY2gobXN5bnRoLT5zZXFfY2xpZW50LCBtc3ludGgtPnNlcV9wb3J0KTsKIAl9CiAKLQlpZiAobXN5bnRoLT5wYXJzZXIpCi0JCXNuZF9taWRpX2V2ZW50X2ZyZWUobXN5bnRoLT5wYXJzZXIpOworCXNuZF9taWRpX2V2ZW50X2ZyZWUobXN5bnRoLT5wYXJzZXIpOwogfQogCiAvKiByZWdpc3RlciBuZXcgbWlkaSBzeW50aCBwb3J0ICovCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfcG9ydHMuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9wb3J0cy5jCmluZGV4IDc5NGEzNDEuLjQ2ZmY1OTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2VxL3NlcV9wb3J0cy5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9wb3J0cy5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlpZiAoc25kX0JVR19PTighY2xpZW50KSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoY2xpZW50LT5udW1fcG9ydHMgPj0gU05EUlZfU0VRX01BWF9QT1JUUyAtIDEpIHsKKwlpZiAoY2xpZW50LT5udW1fcG9ydHMgPj0gU05EUlZfU0VRX01BWF9QT1JUUykgewogCQlwcl93YXJuKCJBTFNBOiBzZXE6IHRvbyBtYW55IHBvcnRzIGZvciBjbGllbnQgJWRcbiIsIGNsaWVudC0+bnVtYmVyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNDExLDkgKzQxMSw2IEBACiAgKiBpbnZva2VkLgogICogVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bCBpZiB0aGVzZSBjYWxsYmFja3MgYXJlIGFzc29jaWF0ZWQgd2l0aAogICogaW5pdGlhbGl6YXRpb24gb3IgdGVybWluYXRpb24gb2YgZGV2aWNlcyAoc2VlIHNlcV9taWRpLmMpLgotICoKLSAqIElmIGNhbGxiYWNrX2FsbCBvcHRpb24gaXMgc2V0LCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZAotICogYXQgZWFjaCBjb25uZWN0aW9uL2Rpc2Nvbm5lY3Rpb24uIAogICovCiAKIHN0YXRpYyBpbnQgc3Vic2NyaWJlX3BvcnQoc3RydWN0IHNuZF9zZXFfY2xpZW50ICpjbGllbnQsCkBAIC00MjcsNyArNDI0LDcgQEAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KHBvcnQtPm93bmVyKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJZ3JwLT5jb3VudCsrOwotCWlmIChncnAtPm9wZW4gJiYgKHBvcnQtPmNhbGxiYWNrX2FsbCB8fCBncnAtPmNvdW50ID09IDEpKSB7CisJaWYgKGdycC0+b3BlbiAmJiBncnAtPmNvdW50ID09IDEpIHsKIAkJZXJyID0gZ3JwLT5vcGVuKHBvcnQtPnByaXZhdGVfZGF0YSwgaW5mbyk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQltb2R1bGVfcHV0KHBvcnQtPm93bmVyKTsKQEAgLTQ1Miw3ICs0NDksNyBAQAogCWlmICghIGdycC0+Y291bnQpCiAJCXJldHVybiAtRUlOVkFMOwogCWdycC0+Y291bnQtLTsKLQlpZiAoZ3JwLT5jbG9zZSAmJiAocG9ydC0+Y2FsbGJhY2tfYWxsIHx8IGdycC0+Y291bnQgPT0gMCkpCisJaWYgKGdycC0+Y2xvc2UgJiYgZ3JwLT5jb3VudCA9PSAwKQogCQllcnIgPSBncnAtPmNsb3NlKHBvcnQtPnByaXZhdGVfZGF0YSwgaW5mbyk7CiAJaWYgKHNlbmRfYWNrICYmIGNsaWVudC0+dHlwZSA9PSBVU0VSX0NMSUVOVCkKIAkJc25kX3NlcV9jbGllbnRfbm90aWZ5X3N1YnNjcmlwdGlvbihwb3J0LT5hZGRyLmNsaWVudCwgcG9ydC0+YWRkci5wb3J0LApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZXEvc2VxX3BvcnRzLmggYi9zb3VuZC9jb3JlL3NlcS9zZXFfcG9ydHMuaAppbmRleCA5ZDcxMTcxLi4yNmJkNzFmIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfcG9ydHMuaAorKysgYi9zb3VuZC9jb3JlL3NlcS9zZXFfcG9ydHMuaApAQCAtNzMsNyArNzMsNiBAQAogCQkJICAgaW50IGF0b21pYywgaW50IGhvcCk7CiAJdm9pZCAoKnByaXZhdGVfZnJlZSkodm9pZCAqcHJpdmF0ZV9kYXRhKTsKIAl2b2lkICpwcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgaW50IGNhbGxiYWNrX2FsbCA6IDE7CiAJdW5zaWduZWQgaW50IGNsb3NpbmcgOiAxOwogCXVuc2lnbmVkIGludCB0aW1lc3RhbXBpbmc6IDE7CiAJdW5zaWduZWQgaW50IHRpbWVfcmVhbDogMTsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc291bmQuYyBiL3NvdW5kL2NvcmUvc291bmQuYwppbmRleCBmMTMzMzA2Li4xODVjZWMwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NvdW5kLmMKKysrIGIvc291bmQvY29yZS9zb3VuZC5jCkBAIC0yNDIsMzAgKzI0MiwzMCBAQAogI2VuZGlmCiAKIC8qKgotICogc25kX3JlZ2lzdGVyX2RldmljZV9mb3JfZGV2IC0gUmVnaXN0ZXIgdGhlIEFMU0EgZGV2aWNlIGZpbGUgZm9yIHRoZSBjYXJkCisgKiBzbmRfcmVnaXN0ZXJfZGV2aWNlIC0gUmVnaXN0ZXIgdGhlIEFMU0EgZGV2aWNlIGZpbGUgZm9yIHRoZSBjYXJkCiAgKiBAdHlwZTogdGhlIGRldmljZSB0eXBlLCBTTkRSVl9ERVZJQ0VfVFlQRV9YWFgKICAqIEBjYXJkOiB0aGUgY2FyZCBpbnN0YW5jZQogICogQGRldjogdGhlIGRldmljZSBpbmRleAogICogQGZfb3BzOiB0aGUgZmlsZSBvcGVyYXRpb25zCiAgKiBAcHJpdmF0ZV9kYXRhOiB1c2VyIHBvaW50ZXIgZm9yIGZfb3BzLT5vcGVuKCkKLSAqIEBuYW1lOiB0aGUgZGV2aWNlIGZpbGUgbmFtZQotICogQGRldmljZTogdGhlICZzdHJ1Y3QgZGV2aWNlIHRvIGxpbmsgdGhpcyBuZXcgZGV2aWNlIHRvCisgKiBAZGV2aWNlOiB0aGUgZGV2aWNlIHRvIHJlZ2lzdGVyCiAgKgogICogUmVnaXN0ZXJzIGFuIEFMU0EgZGV2aWNlIGZpbGUgZm9yIHRoZSBnaXZlbiBjYXJkLgogICogVGhlIG9wZXJhdG9ycyBoYXZlIHRvIGJlIHNldCBpbiByZWcgcGFyYW1ldGVyLgogICoKICAqIFJldHVybjogWmVybyBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwotaW50IHNuZF9yZWdpc3Rlcl9kZXZpY2VfZm9yX2RldihpbnQgdHlwZSwgc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2LAotCQkJCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZfb3BzLAotCQkJCXZvaWQgKnByaXZhdGVfZGF0YSwKLQkJCQljb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCitpbnQgc25kX3JlZ2lzdGVyX2RldmljZShpbnQgdHlwZSwgc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2LAorCQkJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZl9vcHMsCisJCQl2b2lkICpwcml2YXRlX2RhdGEsIHN0cnVjdCBkZXZpY2UgKmRldmljZSkKIHsKIAlpbnQgbWlub3I7CisJaW50IGVyciA9IDA7CiAJc3RydWN0IHNuZF9taW5vciAqcHJlZzsKIAotCWlmIChzbmRfQlVHX09OKCFuYW1lKSkKKwlpZiAoc25kX0JVR19PTighZGV2aWNlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CisKIAlwcmVnID0ga21hbGxvYyhzaXplb2YgKnByZWcsIEdGUF9LRVJORUwpOwogCWlmIChwcmVnID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjg0LDEwMiArMjg0LDU2IEBACiAJCW1pbm9yID0gLUVCVVNZOwogI2VuZGlmCiAJaWYgKG1pbm9yIDwgMCkgewotCQltdXRleF91bmxvY2soJnNvdW5kX211dGV4KTsKLQkJa2ZyZWUocHJlZyk7Ci0JCXJldHVybiBtaW5vcjsKKwkJZXJyID0gbWlub3I7CisJCWdvdG8gZXJyb3I7CiAJfQorCisJcHJlZy0+ZGV2ID0gZGV2aWNlOworCWRldmljZS0+ZGV2dCA9IE1LREVWKG1ham9yLCBtaW5vcik7CisJZXJyID0gZGV2aWNlX2FkZChkZXZpY2UpOworCWlmIChlcnIgPCAwKQorCQlnb3RvIGVycm9yOworCiAJc25kX21pbm9yc1ttaW5vcl0gPSBwcmVnOwotCXByZWctPmRldiA9IGRldmljZV9jcmVhdGUoc291bmRfY2xhc3MsIGRldmljZSwgTUtERVYobWFqb3IsIG1pbm9yKSwKLQkJCQkgIHByaXZhdGVfZGF0YSwgIiVzIiwgbmFtZSk7Ci0JaWYgKElTX0VSUihwcmVnLT5kZXYpKSB7Ci0JCXNuZF9taW5vcnNbbWlub3JdID0gTlVMTDsKLQkJbXV0ZXhfdW5sb2NrKCZzb3VuZF9tdXRleCk7Ci0JCW1pbm9yID0gUFRSX0VSUihwcmVnLT5kZXYpOwotCQlrZnJlZShwcmVnKTsKLQkJcmV0dXJuIG1pbm9yOwotCX0KLQorIGVycm9yOgogCW11dGV4X3VubG9jaygmc291bmRfbXV0ZXgpOwotCXJldHVybiAwOworCWlmIChlcnIgPCAwKQorCQlrZnJlZShwcmVnKTsKKwlyZXR1cm4gZXJyOwogfQotCi1FWFBPUlRfU1lNQk9MKHNuZF9yZWdpc3Rlcl9kZXZpY2VfZm9yX2Rldik7Ci0KLS8qIGZpbmQgdGhlIG1hdGNoaW5nIG1pbm9yIHJlY29yZAotICogcmV0dXJuIHRoZSBpbmRleCBvZiBzbmRfbWlub3IsIG9yIC0xIGlmIG5vdCBmb3VuZAotICovCi1zdGF0aWMgaW50IGZpbmRfc25kX21pbm9yKGludCB0eXBlLCBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCi17Ci0JaW50IGNhcmRudW0sIG1pbm9yOwotCXN0cnVjdCBzbmRfbWlub3IgKm1wdHI7Ci0KLQljYXJkbnVtID0gY2FyZCA/IGNhcmQtPm51bWJlciA6IC0xOwotCWZvciAobWlub3IgPSAwOyBtaW5vciA8IEFSUkFZX1NJWkUoc25kX21pbm9ycyk7ICsrbWlub3IpCi0JCWlmICgobXB0ciA9IHNuZF9taW5vcnNbbWlub3JdKSAhPSBOVUxMICYmCi0JCSAgICBtcHRyLT50eXBlID09IHR5cGUgJiYKLQkJICAgIG1wdHItPmNhcmQgPT0gY2FyZG51bSAmJgotCQkgICAgbXB0ci0+ZGV2aWNlID09IGRldikKLQkJCXJldHVybiBtaW5vcjsKLQlyZXR1cm4gLTE7Ci19CitFWFBPUlRfU1lNQk9MKHNuZF9yZWdpc3Rlcl9kZXZpY2UpOwogCiAvKioKICAqIHNuZF91bnJlZ2lzdGVyX2RldmljZSAtIHVucmVnaXN0ZXIgdGhlIGRldmljZSBvbiB0aGUgZ2l2ZW4gY2FyZAotICogQHR5cGU6IHRoZSBkZXZpY2UgdHlwZSwgU05EUlZfREVWSUNFX1RZUEVfWFhYCi0gKiBAY2FyZDogdGhlIGNhcmQgaW5zdGFuY2UKLSAqIEBkZXY6IHRoZSBkZXZpY2UgaW5kZXgKKyAqIEBkZXY6IHRoZSBkZXZpY2UgaW5zdGFuY2UKICAqCiAgKiBVbnJlZ2lzdGVycyB0aGUgZGV2aWNlIGZpbGUgYWxyZWFkeSByZWdpc3RlcmVkIHZpYQogICogc25kX3JlZ2lzdGVyX2RldmljZSgpLgogICoKICAqIFJldHVybjogWmVybyBpZiBzdWNjZXNzZnVsLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwotaW50IHNuZF91bnJlZ2lzdGVyX2RldmljZShpbnQgdHlwZSwgc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQoraW50IHNuZF91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJaW50IG1pbm9yOworCXN0cnVjdCBzbmRfbWlub3IgKnByZWc7CiAKIAltdXRleF9sb2NrKCZzb3VuZF9tdXRleCk7Ci0JbWlub3IgPSBmaW5kX3NuZF9taW5vcih0eXBlLCBjYXJkLCBkZXYpOwotCWlmIChtaW5vciA8IDApIHsKLQkJbXV0ZXhfdW5sb2NrKCZzb3VuZF9tdXRleCk7Ci0JCXJldHVybiAtRUlOVkFMOworCWZvciAobWlub3IgPSAwOyBtaW5vciA8IEFSUkFZX1NJWkUoc25kX21pbm9ycyk7ICsrbWlub3IpIHsKKwkJcHJlZyA9IHNuZF9taW5vcnNbbWlub3JdOworCQlpZiAocHJlZyAmJiBwcmVnLT5kZXYgPT0gZGV2KSB7CisJCQlzbmRfbWlub3JzW21pbm9yXSA9IE5VTEw7CisJCQlkZXZpY2VfZGVsKGRldik7CisJCQlrZnJlZShwcmVnKTsKKwkJCWJyZWFrOworCQl9CiAJfQotCi0JZGV2aWNlX2Rlc3Ryb3koc291bmRfY2xhc3MsIE1LREVWKG1ham9yLCBtaW5vcikpOwotCi0Ja2ZyZWUoc25kX21pbm9yc1ttaW5vcl0pOwotCXNuZF9taW5vcnNbbWlub3JdID0gTlVMTDsKIAltdXRleF91bmxvY2soJnNvdW5kX211dGV4KTsKKwlpZiAobWlub3IgPj0gQVJSQVlfU0laRShzbmRfbWlub3JzKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CiAJcmV0dXJuIDA7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc25kX3VucmVnaXN0ZXJfZGV2aWNlKTsKIAotLyoqCi0gKiBzbmRfZ2V0X2RldmljZSAtIGdldCB0aGUgYXNzaWduZWQgZGV2aWNlIHRvIHRoZSBnaXZlbiB0eXBlIGFuZCBkZXZpY2UgbnVtYmVyCi0gKiBAdHlwZTogdGhlIGRldmljZSB0eXBlLCBTTkRSVl9ERVZJQ0VfVFlQRV9YWFgKLSAqIEBjYXJkOnRoZSBjYXJkIGluc3RhbmNlCi0gKiBAZGV2OiB0aGUgZGV2aWNlIGluZGV4Ci0gKgotICogVGhlIGNhbGxlciBuZWVkcyB0byByZWxlYXNlIGl0IHZpYSBwdXRfZGV2aWNlKCkgYWZ0ZXIgdXNpbmcgaXQuCi0gKi8KLXN0cnVjdCBkZXZpY2UgKnNuZF9nZXRfZGV2aWNlKGludCB0eXBlLCBzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXYpCi17Ci0JaW50IG1pbm9yOwotCXN0cnVjdCBkZXZpY2UgKmQgPSBOVUxMOwotCi0JbXV0ZXhfbG9jaygmc291bmRfbXV0ZXgpOwotCW1pbm9yID0gZmluZF9zbmRfbWlub3IodHlwZSwgY2FyZCwgZGV2KTsKLQlpZiAobWlub3IgPj0gMCkgewotCQlkID0gc25kX21pbm9yc1ttaW5vcl0tPmRldjsKLQkJaWYgKGQpCi0JCQlnZXRfZGV2aWNlKGQpOwotCX0KLQltdXRleF91bmxvY2soJnNvdW5kX211dGV4KTsKLQlyZXR1cm4gZDsKLX0KLUVYUE9SVF9TWU1CT0woc25kX2dldF9kZXZpY2UpOwotCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIC8qCiAgKiAgSU5GTyBQQVJUCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3RpbWVyLmMgYi9zb3VuZC9jb3JlL3RpbWVyLmMKaW5kZXggNzc3YTQ1ZS4uNDkwYjQ4OSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvdGltZXIuYwpAQCAtMTAzMCw5ICsxMDMwLDcgQEAKIAkJc25kX3RpbWVyX2ZyZWUodGltZXIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JaW5pdF90aW1lcigmcHJpdi0+dGxpc3QpOwotCXByaXYtPnRsaXN0LmZ1bmN0aW9uID0gc25kX3RpbWVyX3NfZnVuY3Rpb247Ci0JcHJpdi0+dGxpc3QuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSB0aW1lcjsKKwlzZXR1cF90aW1lcigmcHJpdi0+dGxpc3QsIHNuZF90aW1lcl9zX2Z1bmN0aW9uLCAodW5zaWduZWQgbG9uZykgdGltZXIpOwogCXRpbWVyLT5wcml2YXRlX2RhdGEgPSBwcml2OwogCXRpbWVyLT5wcml2YXRlX2ZyZWUgPSBzbmRfdGltZXJfZnJlZV9zeXN0ZW07CiAJcmV0dXJuIHNuZF90aW1lcl9nbG9iYWxfcmVnaXN0ZXIodGltZXIpOwpAQCAtMTk0Miw2ICsxOTQwLDE3IEBACiAJLmZhc3luYyA9IAlzbmRfdGltZXJfdXNlcl9mYXN5bmMsCiB9OwogCisvKiB1bnJlZ2lzdGVyIHRoZSBzeXN0ZW0gdGltZXIgKi8KK3N0YXRpYyB2b2lkIHNuZF90aW1lcl9mcmVlX2FsbCh2b2lkKQoreworCXN0cnVjdCBzbmRfdGltZXIgKnRpbWVyLCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0aW1lciwgbiwgJnNuZF90aW1lcl9saXN0LCBkZXZpY2VfbGlzdCkKKwkJc25kX3RpbWVyX2ZyZWUodGltZXIpOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZSB0aW1lcl9kZXY7CisKIC8qCiAgKiAgRU5UUlkgZnVuY3Rpb25zCiAgKi8KQEAgLTE5NTAsMzAgKzE5NTksMzkgQEAKIHsKIAlpbnQgZXJyOwogCisJc25kX2RldmljZV9pbml0aWFsaXplKCZ0aW1lcl9kZXYsIE5VTEwpOworCWRldl9zZXRfbmFtZSgmdGltZXJfZGV2LCAidGltZXIiKTsKKwogI2lmZGVmIFNORFJWX09TU19JTkZPX0RFVl9USU1FUlMKIAlzbmRfb3NzX2luZm9fcmVnaXN0ZXIoU05EUlZfT1NTX0lORk9fREVWX1RJTUVSUywgU05EUlZfQ0FSRFMgLSAxLAogCQkJICAgICAgInN5c3RlbSB0aW1lciIpOwogI2VuZGlmCiAKLQlpZiAoKGVyciA9IHNuZF90aW1lcl9yZWdpc3Rlcl9zeXN0ZW0oKSkgPCAwKQorCWVyciA9IHNuZF90aW1lcl9yZWdpc3Rlcl9zeXN0ZW0oKTsKKwlpZiAoZXJyIDwgMCkgewogCQlwcl9lcnIoIkFMU0E6IHVuYWJsZSB0byByZWdpc3RlciBzeXN0ZW0gdGltZXIgKCVpKVxuIiwgZXJyKTsKLQlpZiAoKGVyciA9IHNuZF9yZWdpc3Rlcl9kZXZpY2UoU05EUlZfREVWSUNFX1RZUEVfVElNRVIsIE5VTEwsIDAsCi0JCQkJICAgICAgICZzbmRfdGltZXJfZl9vcHMsIE5VTEwsICJ0aW1lciIpKSA8IDApCisJCXB1dF9kZXZpY2UoJnRpbWVyX2Rldik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gc25kX3JlZ2lzdGVyX2RldmljZShTTkRSVl9ERVZJQ0VfVFlQRV9USU1FUiwgTlVMTCwgMCwKKwkJCQkgICZzbmRfdGltZXJfZl9vcHMsIE5VTEwsICZ0aW1lcl9kZXYpOworCWlmIChlcnIgPCAwKSB7CiAJCXByX2VycigiQUxTQTogdW5hYmxlIHRvIHJlZ2lzdGVyIHRpbWVyIGRldmljZSAoJWkpXG4iLCBlcnIpOworCQlzbmRfdGltZXJfZnJlZV9hbGwoKTsKKwkJcHV0X2RldmljZSgmdGltZXJfZGV2KTsKKwkJcmV0dXJuIGVycjsKKwl9CisKIAlzbmRfdGltZXJfcHJvY19pbml0KCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbHNhX3RpbWVyX2V4aXQodm9pZCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbjsKLQotCXNuZF91bnJlZ2lzdGVyX2RldmljZShTTkRSVl9ERVZJQ0VfVFlQRV9USU1FUiwgTlVMTCwgMCk7Ci0JLyogdW5yZWdpc3RlciB0aGUgc3lzdGVtIHRpbWVyICovCi0JbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZzbmRfdGltZXJfbGlzdCkgewotCQlzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lciA9IGxpc3RfZW50cnkocCwgc3RydWN0IHNuZF90aW1lciwgZGV2aWNlX2xpc3QpOwotCQlzbmRfdGltZXJfZnJlZSh0aW1lcik7Ci0JfQorCXNuZF91bnJlZ2lzdGVyX2RldmljZSgmdGltZXJfZGV2KTsKKwlzbmRfdGltZXJfZnJlZV9hbGwoKTsKKwlwdXRfZGV2aWNlKCZ0aW1lcl9kZXYpOwogCXNuZF90aW1lcl9wcm9jX2RvbmUoKTsKICNpZmRlZiBTTkRSVl9PU1NfSU5GT19ERVZfVElNRVJTCiAJc25kX29zc19pbmZvX3VucmVnaXN0ZXIoU05EUlZfT1NTX0lORk9fREVWX1RJTUVSUywgU05EUlZfQ0FSRFMgLSAxKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvYWxvb3AuYyBiL3NvdW5kL2RyaXZlcnMvYWxvb3AuYwppbmRleCA3ZWE1MzM5Li43ZjkxMjZlIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL2Fsb29wLmMKKysrIGIvc291bmQvZHJpdmVycy9hbG9vcC5jCkBAIC0xODEsOCArMTgxLDcgQEAKIAl9CiAJdGljayA9IGRwY20tPnBlcmlvZF9zaXplX2ZyYWMgLSBkcGNtLT5pcnFfcG9zOwogCXRpY2sgPSAodGljayArIGRwY20tPnBjbV9icHMgLSAxKSAvIGRwY20tPnBjbV9icHM7Ci0JZHBjbS0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyB0aWNrOwotCWFkZF90aW1lcigmZHBjbS0+dGltZXIpOworCW1vZF90aW1lcigmZHBjbS0+dGltZXIsIGppZmZpZXMgKyB0aWNrKTsKIH0KIAogLyogY2FsbCBpbiBjYWJsZS0+bG9jayAqLwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9kdW1teS5jIGIvc291bmQvZHJpdmVycy9kdW1teS5jCmluZGV4IDVkMGRmYjcuLmQxMWJhYWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvZHVtbXkuYworKysgYi9zb3VuZC9kcml2ZXJzL2R1bW15LmMKQEAgLTI0NSw5ICsyNDUsOCBAQAogCiBzdGF0aWMgdm9pZCBkdW1teV9zeXN0aW1lcl9yZWFybShzdHJ1Y3QgZHVtbXlfc3lzdGltZXJfcGNtICpkcGNtKQogewotCWRwY20tPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKLQkJKGRwY20tPmZyYWNfcGVyaW9kX3Jlc3QgKyBkcGNtLT5yYXRlIC0gMSkgLyBkcGNtLT5yYXRlOwotCWFkZF90aW1lcigmZHBjbS0+dGltZXIpOworCW1vZF90aW1lcigmZHBjbS0+dGltZXIsIGppZmZpZXMgKworCQkoZHBjbS0+ZnJhY19wZXJpb2RfcmVzdCArIGRwY20tPnJhdGUgLSAxKSAvIGRwY20tPnJhdGUpOwogfQogCiBzdGF0aWMgdm9pZCBkdW1teV9zeXN0aW1lcl91cGRhdGUoc3RydWN0IGR1bW15X3N5c3RpbWVyX3BjbSAqZHBjbSkKQEAgLTM0MCw5ICszMzksOCBAQAogCWlmICghZHBjbSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJc3Vic3RyZWFtLT5ydW50aW1lLT5wcml2YXRlX2RhdGEgPSBkcGNtOwotCWluaXRfdGltZXIoJmRwY20tPnRpbWVyKTsKLQlkcGNtLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRwY207Ci0JZHBjbS0+dGltZXIuZnVuY3Rpb24gPSBkdW1teV9zeXN0aW1lcl9jYWxsYmFjazsKKwlzZXR1cF90aW1lcigmZHBjbS0+dGltZXIsIGR1bW15X3N5c3RpbWVyX2NhbGxiYWNrLAorCQkJKHVuc2lnbmVkIGxvbmcpIGRwY20pOwogCXNwaW5fbG9ja19pbml0KCZkcGNtLT5sb2NrKTsKIAlkcGNtLT5zdWJzdHJlYW0gPSBzdWJzdHJlYW07CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL21sNDAzLWFjOTdjci5jIGIvc291bmQvZHJpdmVycy9tbDQwMy1hYzk3Y3IuYwppbmRleCBiY2NhODI1Li5iZGNiNTcyIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL21sNDAzLWFjOTdjci5jCisrKyBiL3NvdW5kL2RyaXZlcnMvbWw0MDMtYWM5N2NyLmMKQEAgLTEwOTQsOCArMTA5NCw3IEBACiAJaWYgKG1sNDAzX2FjOTdjci0+Y2FwdHVyZV9pcnEgPj0gMCkKIAkJZnJlZV9pcnEobWw0MDNfYWM5N2NyLT5jYXB0dXJlX2lycSwgbWw0MDNfYWM5N2NyKTsKIAkvKiBnaXZlIGJhY2sgInBvcnQiICovCi0JaWYgKG1sNDAzX2FjOTdjci0+cG9ydCAhPSBOVUxMKQotCQlpb3VubWFwKG1sNDAzX2FjOTdjci0+cG9ydCk7CisJaW91bm1hcChtbDQwM19hYzk3Y3ItPnBvcnQpOwogCWtmcmVlKG1sNDAzX2FjOTdjcik7CiAJUERFQlVHKElOSVRfSU5GTywgImZyZWUoKTogKGRvbmUpXG4iKTsKIAlyZXR1cm4gMDsKQEAgLTEyMzgsMTQgKzEyMzcsMTEgQEAKIH0KIAogc3RhdGljIGludAotc25kX21sNDAzX2FjOTdjcl9wY20oc3RydWN0IHNuZF9tbDQwM19hYzk3Y3IgKm1sNDAzX2FjOTdjciwgaW50IGRldmljZSwKLQkJICAgICBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCitzbmRfbWw0MDNfYWM5N2NyX3BjbShzdHJ1Y3Qgc25kX21sNDAzX2FjOTdjciAqbWw0MDNfYWM5N2NyLCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycjsKIAotCWlmIChycGNtKQotCQkqcnBjbSA9IE5VTEw7CiAJZXJyID0gc25kX3BjbV9uZXcobWw0MDNfYWM5N2NyLT5jYXJkLCAiTUw0MDNBQzk3Q1IvMSIsIGRldmljZSwgMSwgMSwKIAkJCSAgJnBjbSk7CiAJaWYgKGVyciA8IDApCkBAIC0xMjYzLDggKzEyNTksNiBAQAogCQkJCQkgIHNuZF9kbWFfY29udGludW91c19kYXRhKEdGUF9LRVJORUwpLAogCQkJCQkgIDY0ICogMTAyNCwKIAkJCQkJICAxMjggKiAxMDI0KTsKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBwY207CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyOTgsNyArMTI5Miw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCVBERUJVRyhJTklUX0lORk8sICJwcm9iZSgpOiBtaXhlciBkb25lXG4iKTsKLQllcnIgPSBzbmRfbWw0MDNfYWM5N2NyX3BjbShtbDQwM19hYzk3Y3IsIDAsIE5VTEwpOworCWVyciA9IHNuZF9tbDQwM19hYzk3Y3JfcGNtKG1sNDAzX2FjOTdjciwgMCk7CiAJaWYgKGVyciA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMV91YXJ0LmMgYi9zb3VuZC9kcml2ZXJzL21wdTQwMS9tcHU0MDFfdWFydC5jCmluZGV4IGUzYTkwZDAuLjc3NjU5NmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbXB1NDAxL21wdTQwMV91YXJ0LmMKKysrIGIvc291bmQvZHJpdmVycy9tcHU0MDEvbXB1NDAxX3VhcnQuYwpAQCAtMjgsNyArMjgsNyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0xNzYsOCArMTc2LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZtcHUtPnRpbWVyX2xvY2ssIGZsYWdzKTsKIAkvKm1wdS0+bW9kZSB8PSBNUFU0MDFfTU9ERV9USU1FUjsqLwotCW1wdS0+dGltZXIuZXhwaXJlcyA9IDEgKyBqaWZmaWVzOwotCWFkZF90aW1lcigmbXB1LT50aW1lcik7CisJbW9kX3RpbWVyKCZtcHUtPnRpbWVyLCAgMSArIGppZmZpZXMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wdS0+dGltZXJfbG9jaywgZmxhZ3MpOwogCWlmIChtcHUtPnJtaWRpKQogCQlfc25kX21wdTQwMV91YXJ0X2ludGVycnVwdChtcHUpOwpAQCAtMTkyLDExICsxOTEsOSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZtcHUtPnRpbWVyX2xvY2ssIGZsYWdzKTsKIAlpZiAobXB1LT50aW1lcl9pbnZva2VkID09IDApIHsKLQkJaW5pdF90aW1lcigmbXB1LT50aW1lcik7Ci0JCW1wdS0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKW1wdTsKLQkJbXB1LT50aW1lci5mdW5jdGlvbiA9IHNuZF9tcHU0MDFfdWFydF90aW1lcjsKLQkJbXB1LT50aW1lci5leHBpcmVzID0gMSArIGppZmZpZXM7Ci0JCWFkZF90aW1lcigmbXB1LT50aW1lcik7CisJCXNldHVwX3RpbWVyKCZtcHUtPnRpbWVyLCBzbmRfbXB1NDAxX3VhcnRfdGltZXIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpbXB1KTsKKwkJbW9kX3RpbWVyKCZtcHUtPnRpbWVyLCAxICsgamlmZmllcyk7CiAJfSAKIAltcHUtPnRpbWVyX2ludm9rZWQgfD0gaW5wdXQgPyBNUFU0MDFfTU9ERV9JTlBVVF9USU1FUiA6CiAJCU1QVTQwMV9NT0RFX09VVFBVVF9USU1FUjsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvbXRwYXYuYyBiL3NvdW5kL2RyaXZlcnMvbXRwYXYuYwppbmRleCAxNTc2OTQ0Li4zMGU4YTFkIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL210cGF2LmMKKysrIGIvc291bmQvZHJpdmVycy9tdHBhdi5jCkBAIC00MTQsOCArNDE0LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5zcGlubG9jaywgZmxhZ3MpOwogCS8qIHJlcHJvZ3JhbSB0aW1lciAqLwotCWNoaXAtPnRpbWVyLmV4cGlyZXMgPSAxICsgamlmZmllczsKLQlhZGRfdGltZXIoJmNoaXAtPnRpbWVyKTsKKwltb2RfdGltZXIoJmNoaXAtPnRpbWVyLCAxICsgamlmZmllcyk7CiAJLyogcHJvY2VzcyBlYWNoIHBvcnQgKi8KIAlmb3IgKHAgPSAwOyBwIDw9IGNoaXAtPm51bV9wb3J0cyAqIDIgKyBNVFBBVl9QSURYX0JST0FEQ0FTVDsgcCsrKSB7CiAJCXN0cnVjdCBtdHBhdl9wb3J0ICpwb3J0cCA9ICZjaGlwLT5wb3J0c1twXTsKQEAgLTQyOCw4ICs0MjcsNyBAQAogLyogc3BpbmxvY2sgaGVsZCEgKi8KIHN0YXRpYyB2b2lkIHNuZF9tdHBhdl9hZGRfb3V0cHV0X3RpbWVyKHN0cnVjdCBtdHBhdiAqY2hpcCkKIHsKLQljaGlwLT50aW1lci5leHBpcmVzID0gMSArIGppZmZpZXM7Ci0JYWRkX3RpbWVyKCZjaGlwLT50aW1lcik7CisJbW9kX3RpbWVyKCZjaGlwLT50aW1lciwgMSArIGppZmZpZXMpOwogfQogCiAvKiBzcGlubG9jayBoZWxkISAqLwpAQCAtNzA0LDE1ICs3MDIsMTMgQEAKIAogCW10cF9jYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXNwaW5fbG9ja19pbml0KCZtdHBfY2FyZC0+c3BpbmxvY2spOwotCWluaXRfdGltZXIoJm10cF9jYXJkLT50aW1lcik7CiAJbXRwX2NhcmQtPmNhcmQgPSBjYXJkOwogCW10cF9jYXJkLT5pcnEgPSAtMTsKIAltdHBfY2FyZC0+c2hhcmVfaXJxID0gMDsKIAltdHBfY2FyZC0+aW5taWRpc3RhdGUgPSAwOwogCW10cF9jYXJkLT5vdXRtaWRpaHdwb3J0ID0gMHhmZmZmZmZmZjsKLQlpbml0X3RpbWVyKCZtdHBfY2FyZC0+dGltZXIpOwotCW10cF9jYXJkLT50aW1lci5mdW5jdGlvbiA9IHNuZF9tdHBhdl9vdXRwdXRfdGltZXI7Ci0JbXRwX2NhcmQtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgbXRwX2NhcmQ7CisJc2V0dXBfdGltZXIoJm10cF9jYXJkLT50aW1lciwgc25kX210cGF2X291dHB1dF90aW1lciwKKwkJICAgICh1bnNpZ25lZCBsb25nKSBtdHBfY2FyZCk7CiAKIAljYXJkLT5wcml2YXRlX2ZyZWUgPSBzbmRfbXRwYXZfZnJlZTsKIApkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbGliLmMgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYwppbmRleCBmNjZhZjU4Li4zNjljZWYyIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19saWIuYwpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlIDxzb3VuZC9vcGwzLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYwppbmRleCA2YzZkMDlhLi5mNjI3ODBlIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jCkBAIC0yNTgsMTIgKzI1OCwxMCBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9wbDMtPnZvaWNlX2xvY2ssIGZsYWdzKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZvcGwzLT5zeXNfdGltZXJfbG9jaywgZmxhZ3MpOwotCWlmIChhZ2FpbikgewotCQlvcGwzLT50bGlzdC5leHBpcmVzID0gamlmZmllcyArIDE7CS8qIGludm9rZSBhZ2FpbiAqLwotCQlhZGRfdGltZXIoJm9wbDMtPnRsaXN0KTsKLQl9IGVsc2UgeworCWlmIChhZ2FpbikKKwkJbW9kX3RpbWVyKCZvcGwzLT50bGlzdCwgamlmZmllcyArIDEpOwkvKiBpbnZva2UgYWdhaW4gKi8KKwllbHNlCiAJCW9wbDMtPnN5c190aW1lcl9zdGF0dXMgPSAwOwotCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcGwzLT5zeXNfdGltZXJfbG9jaywgZmxhZ3MpOwogfQogCkBAIC0yNzUsOCArMjczLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXNwaW5fbG9ja19pcnFzYXZlKCZvcGwzLT5zeXNfdGltZXJfbG9jaywgZmxhZ3MpOwogCWlmICghIG9wbDMtPnN5c190aW1lcl9zdGF0dXMpIHsKLQkJb3BsMy0+dGxpc3QuZXhwaXJlcyA9IGppZmZpZXMgKyAxOwotCQlhZGRfdGltZXIoJm9wbDMtPnRsaXN0KTsKKwkJbW9kX3RpbWVyKCZvcGwzLT50bGlzdCwgamlmZmllcyArIDEpOwogCQlvcGwzLT5zeXNfdGltZXJfc3RhdHVzID0gMTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3BsMy0+c3lzX3RpbWVyX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX3NlcS5jIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc2VxLmMKaW5kZXggNjgzOTk1My4uYTlmNjE4ZSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc2VxLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfc2VxLmMKQEAgLTI0Nyw5ICsyNDcsNyBAQAogCX0KIAogCS8qIHNldHVwIHN5c3RlbSB0aW1lciAqLwotCWluaXRfdGltZXIoJm9wbDMtPnRsaXN0KTsKLQlvcGwzLT50bGlzdC5mdW5jdGlvbiA9IHNuZF9vcGwzX3RpbWVyX2Z1bmM7Ci0Jb3BsMy0+dGxpc3QuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBvcGwzOworCXNldHVwX3RpbWVyKCZvcGwzLT50bGlzdCwgc25kX29wbDNfdGltZXJfZnVuYywgKHVuc2lnbmVkIGxvbmcpIG9wbDMpOwogCXNwaW5fbG9ja19pbml0KCZvcGwzLT5zeXNfdGltZXJfbG9jayk7CiAJb3BsMy0+c3lzX3RpbWVyX3N0YXR1cyA9IDA7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsNC9vcGw0X2xpYi5jIGIvc291bmQvZHJpdmVycy9vcGw0L29wbDRfbGliLmMKaW5kZXggYjk1M2ZiNC4uM2IwZWU0MiAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGw0L29wbDRfbGliLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGw0L29wbDRfbGliLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKIE1PRFVMRV9BVVRIT1IoIkNsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJPUEw0IGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9vcGw0L29wbDRfc3ludGguYyBiL3NvdW5kL2RyaXZlcnMvb3BsNC9vcGw0X3N5bnRoLmMKaW5kZXggNGI5MWFkYy4uN2JjMWU1OCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9vcGw0L29wbDRfc3ludGguYworKysgYi9zb3VuZC9kcml2ZXJzL29wbDQvb3BsNF9zeW50aC5jCkBAIC0zMyw3ICszMyw3IEBACiAKICNpbmNsdWRlICJvcGw0X2xvY2FsLmgiCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CiAKIC8qIEdNMiBjb250cm9sbGVycyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwLmMKaW5kZXggMmFkYzc1NC4uZDk2NDdiZCAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9wY3NwL3Bjc3AuYworKysgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcC5jCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlICJwY3NwX2lucHV0LmgiCiAjaW5jbHVkZSAicGNzcC5oIgogCmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9pbnB1dC5jIGIvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfaW5wdXQuYwppbmRleCAwZWNmOGE0Li5iZmMyNTgxIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9pbnB1dC5jCisrKyBiL3NvdW5kL2RyaXZlcnMvcGNzcC9wY3NwX2lucHV0LmMKQEAgLTE0LDcgKzE0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSAicGNzcC5oIgogI2luY2x1ZGUgInBjc3BfaW5wdXQuaCIKIApkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9wY3NwL3Bjc3BfbGliLmMgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9saWIuYwppbmRleCAyOWViYWE0Li4zNjg5ZjVmIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9saWIuYworKysgYi9zb3VuZC9kcml2ZXJzL3Bjc3AvcGNzcF9saWIuYwpAQCAtMTAsOCArMTAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJwY3NwLmgiCiAKIHN0YXRpYyBib29sIG5mb3JjZV93YTsKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvc2VyaWFsLXUxNjU1MC5jIGIvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKaW5kZXggMTNhMzRlMy4uMTkyN2I4OSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKKysrIGIvc291bmQvZHJpdmVycy9zZXJpYWwtdTE2NTUwLmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcmF3bWlkaS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KQEAgLTQ0LDggKzQ1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KIE1PRFVMRV9ERVNDUklQVElPTigiTUlESSBzZXJpYWwgdTE2NTUwIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgie3tBTFNBLCBNSURJIHNlcmlhbCB1MTY1NTB9fSIpOwpAQCAtMTc0LDkgKzE3Myw4IEBACiB7CiAJaWYgKCF1YXJ0LT50aW1lcl9ydW5uaW5nKSB7CiAJCS8qIHRpbWVyIDM4NjAwYnBzICogMTBiaXQgKiAxNmJ5dGUgKi8KLQkJdWFydC0+YnVmZmVyX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKEhaKzI1NSkvMjU2OworCQltb2RfdGltZXIoJnVhcnQtPmJ1ZmZlcl90aW1lciwgamlmZmllcyArIChIWiArIDI1NSkgLyAyNTYpOwogCQl1YXJ0LT50aW1lcl9ydW5uaW5nID0gMTsKLQkJYWRkX3RpbWVyKCZ1YXJ0LT5idWZmZXJfdGltZXIpOwogCX0KIH0KIApAQCAtODMwLDkgKzgyOCw4IEBACiAJdWFydC0+cHJldl9pbiA9IDA7CiAJdWFydC0+cnN0YXR1cyA9IDA7CiAJbWVtc2V0KHVhcnQtPnByZXZfc3RhdHVzLCAweDgwLCBzaXplb2YodW5zaWduZWQgY2hhcikgKiBTTkRSVl9TRVJJQUxfTUFYX09VVFMpOwotCWluaXRfdGltZXIoJnVhcnQtPmJ1ZmZlcl90aW1lcik7Ci0JdWFydC0+YnVmZmVyX3RpbWVyLmZ1bmN0aW9uID0gc25kX3VhcnQxNjU1MF9idWZmZXJfdGltZXI7Ci0JdWFydC0+YnVmZmVyX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyl1YXJ0OworCXNldHVwX3RpbWVyKCZ1YXJ0LT5idWZmZXJfdGltZXIsIHNuZF91YXJ0MTY1NTBfYnVmZmVyX3RpbWVyLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpdWFydCk7CiAJdWFydC0+dGltZXJfcnVubmluZyA9IDA7CiAKIAkvKiBSZWdpc3RlciBkZXZpY2UgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvdngvdnhfY29yZS5jIGIvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKaW5kZXggZmMwNWEzNy4uMjg5ZjA0MSAxMDA2NDQKLS0tIGEvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKKysrIGIvc291bmQvZHJpdmVycy92eC92eF9jb3JlLmMKQEAgLTI3LDExICsyNywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8c291bmQvdnhfY29yZS5oPgogI2luY2x1ZGUgInZ4X2NtZC5oIgogCmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvb3RoZXIvYWs0MTEzLmMgYi9zb3VuZC9pMmMvb3RoZXIvYWs0MTEzLmMKaW5kZXggMWEzYTZmYS4uODg4NDQ4OCAxMDA2NDQKLS0tIGEvc291bmQvaTJjL290aGVyL2FrNDExMy5jCisrKyBiL3NvdW5kL2kyYy9vdGhlci9hazQxMTMuYwpAQCAtNTYsOCArNTYsNyBAQAogCiBzdGF0aWMgdm9pZCBzbmRfYWs0MTEzX2ZyZWUoc3RydWN0IGFrNDExMyAqY2hpcCkKIHsKLQljaGlwLT5pbml0ID0gMTsJLyogZG9uJ3Qgc2NoZWR1bGUgbmV3IHdvcmsgKi8KLQltYigpOworCWF0b21pY19pbmMoJmNoaXAtPndxX3Byb2Nlc3NpbmcpOwkvKiBkb24ndCBzY2hlZHVsZSBuZXcgd29yayAqLwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmY2hpcC0+d29yayk7CiAJa2ZyZWUoY2hpcCk7CiB9CkBAIC04OSw2ICs4OCw4IEBACiAJY2hpcC0+d3JpdGUgPSB3cml0ZTsKIAljaGlwLT5wcml2YXRlX2RhdGEgPSBwcml2YXRlX2RhdGE7CiAJSU5JVF9ERUxBWUVEX1dPUksoJmNoaXAtPndvcmssIGFrNDExM19zdGF0cyk7CisJYXRvbWljX3NldCgmY2hpcC0+d3FfcHJvY2Vzc2luZywgMCk7CisJbXV0ZXhfaW5pdCgmY2hpcC0+cmVpbml0X211dGV4KTsKIAogCWZvciAocmVnID0gMDsgcmVnIDwgQUs0MTEzX1dSSVRBQkxFX1JFR1MgOyByZWcrKykKIAkJY2hpcC0+cmVnbWFwW3JlZ10gPSBwZ21bcmVnXTsKQEAgLTEzOSwxMyArMTQwLDEzIEBACiAKIHZvaWQgc25kX2FrNDExM19yZWluaXQoc3RydWN0IGFrNDExMyAqY2hpcCkKIHsKLQljaGlwLT5pbml0ID0gMTsKLQltYigpOwotCWZsdXNoX2RlbGF5ZWRfd29yaygmY2hpcC0+d29yayk7CisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZjaGlwLT53cV9wcm9jZXNzaW5nKSA9PSAxKQorCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmNoaXAtPndvcmspOworCW11dGV4X2xvY2soJmNoaXAtPnJlaW5pdF9tdXRleCk7CiAJYWs0MTEzX2luaXRfcmVncyhjaGlwKTsKKwltdXRleF91bmxvY2soJmNoaXAtPnJlaW5pdF9tdXRleCk7CiAJLyogYnJpbmcgdXAgc3RhdGlzdGljcyAvIGV2ZW50IHF1ZWluZyAqLwotCWNoaXAtPmluaXQgPSAwOwotCWlmIChjaGlwLT5rY3Rsc1swXSkKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2hpcC0+d3FfcHJvY2Vzc2luZykpCiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2hpcC0+d29yaywgSFogLyAxMCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbmRfYWs0MTEzX3JlaW5pdCk7CkBAIC02MzIsOCArNjMzLDI1IEBACiB7CiAJc3RydWN0IGFrNDExMyAqY2hpcCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYWs0MTEzLCB3b3JrLndvcmspOwogCi0JaWYgKCFjaGlwLT5pbml0KQorCWlmIChhdG9taWNfaW5jX3JldHVybigmY2hpcC0+d3FfcHJvY2Vzc2luZykgPT0gMSkKIAkJc25kX2FrNDExM19jaGVja19yYXRlX2FuZF9lcnJvcnMoY2hpcCwgY2hpcC0+Y2hlY2tfZmxhZ3MpOwogCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjaGlwLT53b3JrLCBIWiAvIDEwKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2hpcC0+d3FfcHJvY2Vzc2luZykpCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2hpcC0+d29yaywgSFogLyAxMCk7CiB9CisKKyNpZmRlZiBDT05GSUdfUE0KK3ZvaWQgc25kX2FrNDExM19zdXNwZW5kKHN0cnVjdCBhazQxMTMgKmNoaXApCit7CisJYXRvbWljX2luYygmY2hpcC0+d3FfcHJvY2Vzc2luZyk7IC8qIGRvbid0IHNjaGVkdWxlIG5ldyB3b3JrICovCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZjaGlwLT53b3JrKTsKK30KK0VYUE9SVF9TWU1CT0woc25kX2FrNDExM19zdXNwZW5kKTsKKwordm9pZCBzbmRfYWs0MTEzX3Jlc3VtZShzdHJ1Y3QgYWs0MTEzICpjaGlwKQoreworCWF0b21pY19kZWMoJmNoaXAtPndxX3Byb2Nlc3NpbmcpOworCXNuZF9hazQxMTNfcmVpbml0KGNoaXApOworfQorRVhQT1JUX1NZTUJPTChzbmRfYWs0MTEzX3Jlc3VtZSk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9vdGhlci9hazQxMTQuYyBiL3NvdW5kL2kyYy9vdGhlci9hazQxMTQuYwppbmRleCBjN2Y1NjMzLi41YTRjZjNmIDEwMDY0NAotLS0gYS9zb3VuZC9pMmMvb3RoZXIvYWs0MTE0LmMKKysrIGIvc291bmQvaTJjL290aGVyL2FrNDExNC5jCkBAIC02Niw4ICs2Niw3IEBACiAKIHN0YXRpYyB2b2lkIHNuZF9hazQxMTRfZnJlZShzdHJ1Y3QgYWs0MTE0ICpjaGlwKQogewotCWNoaXAtPmluaXQgPSAxOwkvKiBkb24ndCBzY2hlZHVsZSBuZXcgd29yayAqLwotCW1iKCk7CisJYXRvbWljX2luYygmY2hpcC0+d3FfcHJvY2Vzc2luZyk7CS8qIGRvbid0IHNjaGVkdWxlIG5ldyB3b3JrICovCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZjaGlwLT53b3JrKTsKIAlrZnJlZShjaGlwKTsKIH0KQEAgLTEwMCw2ICs5OSw4IEBACiAJY2hpcC0+d3JpdGUgPSB3cml0ZTsKIAljaGlwLT5wcml2YXRlX2RhdGEgPSBwcml2YXRlX2RhdGE7CiAJSU5JVF9ERUxBWUVEX1dPUksoJmNoaXAtPndvcmssIGFrNDExNF9zdGF0cyk7CisJYXRvbWljX3NldCgmY2hpcC0+d3FfcHJvY2Vzc2luZywgMCk7CisJbXV0ZXhfaW5pdCgmY2hpcC0+cmVpbml0X211dGV4KTsKIAogCWZvciAocmVnID0gMDsgcmVnIDwgNjsgcmVnKyspCiAJCWNoaXAtPnJlZ21hcFtyZWddID0gcGdtW3JlZ107CkBAIC0xMjIsNiArMTIzLDcgQEAKIAlzbmRfYWs0MTE0X2ZyZWUoY2hpcCk7CiAJcmV0dXJuIGVyciA8IDAgPyBlcnIgOiAtRUlPOwogfQorRVhQT1JUX1NZTUJPTChzbmRfYWs0MTE0X2NyZWF0ZSk7CiAKIHZvaWQgc25kX2FrNDExNF9yZWdfd3JpdGUoc3RydWN0IGFrNDExNCAqY2hpcCwgdW5zaWduZWQgY2hhciByZWcsIHVuc2lnbmVkIGNoYXIgbWFzaywgdW5zaWduZWQgY2hhciB2YWwpCiB7CkBAIC0xMzEsNiArMTMzLDcgQEAKIAkJcmVnX3dyaXRlKGNoaXAsIHJlZywKIAkJCSAgKGNoaXAtPnR4Y3NiW3JlZy1BSzQxMTRfUkVHX1RYQ1NCMF0gJiB+bWFzaykgfCB2YWwpOwogfQorRVhQT1JUX1NZTUJPTChzbmRfYWs0MTE0X3JlZ193cml0ZSk7CiAKIHN0YXRpYyB2b2lkIGFrNDExNF9pbml0X3JlZ3Moc3RydWN0IGFrNDExNCAqY2hpcCkKIHsKQEAgLTE1MiwxNSArMTU1LDE2IEBACiAKIHZvaWQgc25kX2FrNDExNF9yZWluaXQoc3RydWN0IGFrNDExNCAqY2hpcCkKIHsKLQljaGlwLT5pbml0ID0gMTsKLQltYigpOwotCWZsdXNoX2RlbGF5ZWRfd29yaygmY2hpcC0+d29yayk7CisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZjaGlwLT53cV9wcm9jZXNzaW5nKSA9PSAxKQorCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmNoaXAtPndvcmspOworCW11dGV4X2xvY2soJmNoaXAtPnJlaW5pdF9tdXRleCk7CiAJYWs0MTE0X2luaXRfcmVncyhjaGlwKTsKKwltdXRleF91bmxvY2soJmNoaXAtPnJlaW5pdF9tdXRleCk7CiAJLyogYnJpbmcgdXAgc3RhdGlzdGljcyAvIGV2ZW50IHF1ZWluZyAqLwotCWNoaXAtPmluaXQgPSAwOwotCWlmIChjaGlwLT5rY3Rsc1swXSkKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2hpcC0+d3FfcHJvY2Vzc2luZykpCiAJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2hpcC0+d29yaywgSFogLyAxMCk7CiB9CitFWFBPUlRfU1lNQk9MKHNuZF9hazQxMTRfcmVpbml0KTsKIAogc3RhdGljIHVuc2lnbmVkIGludCBleHRlcm5hbF9yYXRlKHVuc2lnbmVkIGNoYXIgcmNzMSkKIHsKQEAgLTUwNSw2ICs1MDksNyBAQAogCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYWs0MTE0LT53b3JrLCBIWiAvIDEwKTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woc25kX2FrNDExNF9idWlsZCk7CiAKIC8qIG5vdGlmeSBrY29udHJvbHMgaWYgYW55IHBhcmFtZXRlcnMgYXJlIGNoYW5nZWQgKi8KIHN0YXRpYyB2b2lkIGFrNDExNF9ub3RpZnkoc3RydWN0IGFrNDExNCAqYWs0MTE0LApAQCAtNTYwLDYgKzU2NSw3IEBACiAJcmNzMSA9IHJlZ19yZWFkKGFrNDExNCwgQUs0MTE0X1JFR19SQ1MxKTsKIAlyZXR1cm4gZXh0ZXJuYWxfcmF0ZShyY3MxKTsKIH0KK0VYUE9SVF9TWU1CT0woc25kX2FrNDExNF9leHRlcm5hbF9yYXRlKTsKIAogaW50IHNuZF9hazQxMTRfY2hlY2tfcmF0ZV9hbmRfZXJyb3JzKHN0cnVjdCBhazQxMTQgKmFrNDExNCwgdW5zaWduZWQgaW50IGZsYWdzKQogewpAQCAtNjA3LDIwICs2MTMsMzAgQEAKIAl9CiAJcmV0dXJuIHJlczsKIH0KK0VYUE9SVF9TWU1CT0woc25kX2FrNDExNF9jaGVja19yYXRlX2FuZF9lcnJvcnMpOwogCiBzdGF0aWMgdm9pZCBhazQxMTRfc3RhdHMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBhazQxMTQgKmNoaXAgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFrNDExNCwgd29yay53b3JrKTsKIAotCWlmICghY2hpcC0+aW5pdCkKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJmNoaXAtPndxX3Byb2Nlc3NpbmcpID09IDEpCiAJCXNuZF9hazQxMTRfY2hlY2tfcmF0ZV9hbmRfZXJyb3JzKGNoaXAsIGNoaXAtPmNoZWNrX2ZsYWdzKTsKLQotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmY2hpcC0+d29yaywgSFogLyAxMCk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNoaXAtPndxX3Byb2Nlc3NpbmcpKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmNoaXAtPndvcmssIEhaIC8gMTApOwogfQogCi1FWFBPUlRfU1lNQk9MKHNuZF9hazQxMTRfY3JlYXRlKTsKLUVYUE9SVF9TWU1CT0woc25kX2FrNDExNF9yZWdfd3JpdGUpOwotRVhQT1JUX1NZTUJPTChzbmRfYWs0MTE0X3JlaW5pdCk7Ci1FWFBPUlRfU1lNQk9MKHNuZF9hazQxMTRfYnVpbGQpOwotRVhQT1JUX1NZTUJPTChzbmRfYWs0MTE0X2V4dGVybmFsX3JhdGUpOwotRVhQT1JUX1NZTUJPTChzbmRfYWs0MTE0X2NoZWNrX3JhdGVfYW5kX2Vycm9ycyk7CisjaWZkZWYgQ09ORklHX1BNCit2b2lkIHNuZF9hazQxMTRfc3VzcGVuZChzdHJ1Y3QgYWs0MTE0ICpjaGlwKQoreworCWF0b21pY19pbmMoJmNoaXAtPndxX3Byb2Nlc3NpbmcpOyAvKiBkb24ndCBzY2hlZHVsZSBuZXcgd29yayAqLworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmY2hpcC0+d29yayk7Cit9CitFWFBPUlRfU1lNQk9MKHNuZF9hazQxMTRfc3VzcGVuZCk7CisKK3ZvaWQgc25kX2FrNDExNF9yZXN1bWUoc3RydWN0IGFrNDExNCAqY2hpcCkKK3sKKwlhdG9taWNfZGVjKCZjaGlwLT53cV9wcm9jZXNzaW5nKTsKKwlzbmRfYWs0MTE0X3JlaW5pdChjaGlwKTsKK30KK0VYUE9SVF9TWU1CT0woc25kX2FrNDExNF9yZXN1bWUpOworI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9pMmMvb3RoZXIvYWs0MTE3LmMgYi9zb3VuZC9pMmMvb3RoZXIvYWs0MTE3LmMKaW5kZXggODg0NTJlOC4uNDg4NDg5MDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2kyYy9vdGhlci9hazQxMTcuYworKysgYi9zb3VuZC9pMmMvb3RoZXIvYWs0MTE3LmMKQEAgLTkxLDkgKzkxLDcgQEAKIAljaGlwLT5yZWFkID0gcmVhZDsKIAljaGlwLT53cml0ZSA9IHdyaXRlOwogCWNoaXAtPnByaXZhdGVfZGF0YSA9IHByaXZhdGVfZGF0YTsKLQlpbml0X3RpbWVyKCZjaGlwLT50aW1lcik7Ci0JY2hpcC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNoaXA7Ci0JY2hpcC0+dGltZXIuZnVuY3Rpb24gPSBzbmRfYWs0MTE3X3RpbWVyOworCXNldHVwX3RpbWVyKCZjaGlwLT50aW1lciwgc25kX2FrNDExN190aW1lciwgKHVuc2lnbmVkIGxvbmcpY2hpcCk7CiAKIAlmb3IgKHJlZyA9IDA7IHJlZyA8IDU7IHJlZysrKQogCQljaGlwLT5yZWdtYXBbcmVnXSA9IHBnbVtyZWddOwpAQCAtMTM5LDggKzEzNyw3IEBACiAJLyogcmVsZWFzZSBwb3dlcmRvd24sIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgbm93ICovCiAJcmVnX3dyaXRlKGNoaXAsIEFLNDExN19SRUdfUFdSRE4sIG9sZCB8IEFLNDExN19SU1QgfCBBSzQxMTdfUFdOKTsKIAljaGlwLT5pbml0ID0gMDsKLQljaGlwLT50aW1lci5leHBpcmVzID0gMSArIGppZmZpZXM7Ci0JYWRkX3RpbWVyKCZjaGlwLT50aW1lcik7CisJbW9kX3RpbWVyKCZjaGlwLT50aW1lciwgMSArIGppZmZpZXMpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGV4dGVybmFsX3JhdGUodW5zaWduZWQgY2hhciByY3MxKQpAQCAtNTQwLDggKzUzNyw3IEBACiAJaWYgKGNoaXAtPmluaXQpCiAJCXJldHVybjsKIAlzbmRfYWs0MTE3X2NoZWNrX3JhdGVfYW5kX2Vycm9ycyhjaGlwLCAwKTsKLQljaGlwLT50aW1lci5leHBpcmVzID0gMSArIGppZmZpZXM7Ci0JYWRkX3RpbWVyKCZjaGlwLT50aW1lcik7CisJbW9kX3RpbWVyKCZjaGlwLT50aW1lciwgMSArIGppZmZpZXMpOwogfQogCiBFWFBPUlRfU1lNQk9MKHNuZF9hazQxMTdfY3JlYXRlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9vdGhlci9hazR4eHgtYWRkYS5jIGIvc291bmQvaTJjL290aGVyL2FrNHh4eC1hZGRhLmMKaW5kZXggNjdkYmZkZS4uYzY1NzMxMCAxMDA2NDQKLS0tIGEvc291bmQvaTJjL290aGVyL2FrNHh4eC1hZGRhLmMKKysrIGIvc291bmQvaTJjL290aGVyL2FrNHh4eC1hZGRhLmMKQEAgLTIxLDcgKzIxLDcgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhLmMKaW5kZXggZjQ4MWE0MS4uNzY5MjI2NSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YS5jCisrKyBiL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmEuYwpAQCAtMTQyLDcgKzE0Miw2IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcDsKIAlzdHJ1Y3Qgc25kX29wbDMgKm9wbDM7Ci0Jc3RydWN0IHNuZF90aW1lciAqdGltZXI7CiAKIAllcnJvciA9IHNuZF9jYXJkX25ldygmcGNhcmQtPmNhcmQtPmRldiwKIAkJCSAgICAgaW5kZXhbZGV2XSwgaWRbZGV2XSwgVEhJU19NT0RVTEUsCkBAIC0xNzIsNyArMTcxLDcgQEAKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMsIFNTIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCYlZCIsCiAJCWNhcmQtPnNob3J0bmFtZSwgY2hpcC0+cG9ydCwgaXJxW2Rldl0sIGRtYTFbZGV2XSwgZG1hMltkZXZdKTsKIAotCWlmICgoZXJyb3IgPSBzbmRfYWQxODE2YV9wY20oY2hpcCwgMCwgTlVMTCkpIDwgMCkgeworCWlmICgoZXJyb3IgPSBzbmRfYWQxODE2YV9wY20oY2hpcCwgMCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtMTgyLDcgKzE4MSw3IEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAKLQllcnJvciA9IHNuZF9hZDE4MTZhX3RpbWVyKGNoaXAsIDAsICZ0aW1lcik7CisJZXJyb3IgPSBzbmRfYWQxODE2YV90aW1lcihjaGlwLCAwKTsKIAlpZiAoZXJyb3IgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMgYi9zb3VuZC9pc2EvYWQxODE2YS9hZDE4MTZhX2xpYi5jCmluZGV4IDAxYTA3OTguLjVjODE1ZjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4MTZhL2FkMTgxNmFfbGliLmMKKysrIGIvc291bmQvaXNhL2FkMTgxNmEvYWQxODE2YV9saWIuYwpAQCAtMjIsMTEgKzIyLDExIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgogI2luY2x1ZGUgPHNvdW5kL2FkMTgxNmEuaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KIAogc3RhdGljIGlubGluZSBpbnQgc25kX2FkMTgxNmFfYnVzeV93YWl0KHN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcCkKQEAgLTY3NSw3ICs2NzUsNyBAQAogCS5wb2ludGVyID0Jc25kX2FkMTgxNmFfY2FwdHVyZV9wb2ludGVyLAogfTsKIAotaW50IHNuZF9hZDE4MTZhX3BjbShzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK2ludCBzbmRfYWQxODE2YV9wY20oc3RydWN0IHNuZF9hZDE4MTZhICpjaGlwLCBpbnQgZGV2aWNlKQogewogCWludCBlcnJvcjsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwpAQCAtNjk3LDEzICs2OTcsMTAgQEAKIAkJCQkJICAgICAgNjQqMTAyNCwgY2hpcC0+ZG1hMSA+IDMgfHwgY2hpcC0+ZG1hMiA+IDMgPyAxMjgqMTAyNCA6IDY0KjEwMjQpOwogCiAJY2hpcC0+cGNtID0gcGNtOwotCWlmIChycGNtKQotCQkqcnBjbSA9IHBjbTsKIAlyZXR1cm4gMDsKIH0KIAotaW50IHNuZF9hZDE4MTZhX3RpbWVyKHN0cnVjdCBzbmRfYWQxODE2YSAqY2hpcCwgaW50IGRldmljZSwKLQkJICAgICAgc3RydWN0IHNuZF90aW1lciAqKnJ0aW1lcikKK2ludCBzbmRfYWQxODE2YV90aW1lcihzdHJ1Y3Qgc25kX2FkMTgxNmEgKmNoaXAsIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF90aW1lciAqdGltZXI7CiAJc3RydWN0IHNuZF90aW1lcl9pZCB0aWQ7CkBAIC03MjAsOCArNzE3LDYgQEAKIAl0aW1lci0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKIAljaGlwLT50aW1lciA9IHRpbWVyOwogCXRpbWVyLT5odyA9IHNuZF9hZDE4MTZhX3RpbWVyX3RhYmxlOwotCWlmIChydGltZXIpCi0JCSpydGltZXIgPSB0aW1lcjsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYyBiL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKaW5kZXggMDkzZjIyYS4uZjE1OWRhNGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9hZDE4NDgvYWQxODQ4LmMKKysrIGIvc291bmQvaXNhL2FkMTg0OC9hZDE4NDguYwpAQCAtODgsNyArODgsNiBAQAogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKIAlzdHJ1Y3Qgc25kX3dzcyAqY2hpcDsKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnJvcjsKIAogCWVycm9yID0gc25kX2NhcmRfbmV3KGRldiwgaW5kZXhbbl0sIGlkW25dLCBUSElTX01PRFVMRSwgMCwgJmNhcmQpOwpAQCAtMTAzLDcgKzEwMiw3IEBACiAKIAljYXJkLT5wcml2YXRlX2RhdGEgPSBjaGlwOwogCi0JZXJyb3IgPSBzbmRfd3NzX3BjbShjaGlwLCAwLCAmcGNtKTsKKwllcnJvciA9IHNuZF93c3NfcGNtKGNoaXAsIDApOwogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC0xMTIsMTAgKzExMSwxMCBAQAogCQlnb3RvIG91dDsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBRDE4NDgiKTsKLQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwY20tPm5hbWUpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIGNoaXAtPnBjbS0+bmFtZSk7CiAKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMgYXQgMHglbHgsIGlycSAlZCwgZG1hICVkIiwKLQkJcGNtLT5uYW1lLCBjaGlwLT5wb3J0LCBpcnFbbl0sIGRtYTFbbl0pOworCQljaGlwLT5wY20tPm5hbWUsIGNoaXAtPnBvcnQsIGlycVtuXSwgZG1hMVtuXSk7CiAJaWYgKHRoaW5rcGFkW25dKQogCQlzdHJjYXQoY2FyZC0+bG9uZ25hbWUsICIgW1RoaW5rcGFkXSIpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvYWxzMTAwLmMgYi9zb3VuZC9pc2EvYWxzMTAwLmMKaW5kZXggMzJkMDE1Mi4uYmM5ZWEzMCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2FsczEwMC5jCisrKyBiL3NvdW5kL2lzYS9hbHMxMDAuYwpAQCAtMjMzLDcgKzIzMyw3IEBACiAJCQlpcnFbZGV2XSwgZG1hOFtkZXZdLCBkbWExNltkZXZdKTsKIAl9CiAKLQlpZiAoKGVycm9yID0gc25kX3NiMTZkc3BfcGNtKGNoaXAsIDAsICZjaGlwLT5wY20pKSA8IDApIHsKKwlpZiAoKGVycm9yID0gc25kX3NiMTZkc3BfcGNtKGNoaXAsIDApKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9henQyMzIwLmMgYi9zb3VuZC9pc2EvYXp0MjMyMC5jCmluZGV4IDBlYTc1ZmMuLmZmZjE4NmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9henQyMzIwLmMKKysrIGIvc291bmQvaXNhL2F6dDIzMjAuYwpAQCAtMjksNyArMjksNyBAQAogICAgIGFjdGl2YXRpb24gbWV0aG9kIChmdWxsLWR1cGxleCBhdWRpbyEpLgogKi8KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpAQCAtMjE1LDcgKzIxNSw3IEBACiAJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzLCBXU1MgYXQgMHglbHgsIGlycSAlaSwgZG1hICVpJiVpIiwKIAkJY2FyZC0+c2hvcnRuYW1lLCBjaGlwLT5wb3J0LCBpcnFbZGV2XSwgZG1hMVtkZXZdLCBkbWEyW2Rldl0pOwogCi0JZXJyb3IgPSBzbmRfd3NzX3BjbShjaGlwLCAwLCBOVUxMKTsKKwllcnJvciA9IHNuZF93c3NfcGNtKGNoaXAsIDApOwogCWlmIChlcnJvciA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycm9yOwpAQCAtMjI1LDcgKzIyNSw3IEBACiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnJvcjsKIAl9Ci0JZXJyb3IgPSBzbmRfd3NzX3RpbWVyKGNoaXAsIDAsIE5VTEwpOworCWVycm9yID0gc25kX3dzc190aW1lcihjaGlwLCAwKTsKIAlpZiAoZXJyb3IgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jbWk4MzI4LmMgYi9zb3VuZC9pc2EvY21pODMyOC5jCmluZGV4IDQ3Nzg4NTIuLjJjODlkOTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jbWk4MzI4LmMKKysrIGIvc291bmQvaXNhL2NtaTgzMjguYwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQllcnIgPSBzbmRfd3NzX3BjbShjbWktPndzcywgMCwgTlVMTCk7CisJZXJyID0gc25kX3dzc19wY20oY21pLT53c3MsIDApOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yOwogCkBAIC0zMTgsNyArMzE4LDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJvcjsKIAotCWlmIChzbmRfd3NzX3RpbWVyKGNtaS0+d3NzLCAwLCBOVUxMKSA8IDApCisJaWYgKHNuZF93c3NfdGltZXIoY21pLT53c3MsIDApIDwgMCkKIAkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgImVycm9yIGluaXRpYWxpemluZyBXU1MgdGltZXJcbiIpOwogCiAJaWYgKG1wdXBvcnRbbmRldl0gPT0gU05EUlZfQVVUT19QT1JUKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzEuYwppbmRleCA3ZGJhMDdhLi4yODJjZDc1IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzMS5jCisrKyBiL3NvdW5kL2lzYS9jczQyM3gvY3M0MjMxLmMKQEAgLTkyLDcgKzkyLDYgQEAKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHNuZF93c3MgKmNoaXA7Ci0Jc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgZXJyb3I7CiAKIAllcnJvciA9IHNuZF9jYXJkX25ldyhkZXYsIGluZGV4W25dLCBpZFtuXSwgVEhJU19NT0RVTEUsIDAsICZjYXJkKTsKQEAgLTEwNiwxNSArMTA1LDE1IEBACiAKIAljYXJkLT5wcml2YXRlX2RhdGEgPSBjaGlwOwogCi0JZXJyb3IgPSBzbmRfd3NzX3BjbShjaGlwLCAwLCAmcGNtKTsKKwllcnJvciA9IHNuZF93c3NfcGNtKGNoaXAsIDApOwogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gb3V0OwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwgIkNTNDIzMSIpOwotCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIHBjbS0+bmFtZSk7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgY2hpcC0+cGNtLT5uYW1lKTsKIAogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBhdCAweCVseCwgaXJxICVkLCBkbWEgJWQiLAotCQlwY20tPm5hbWUsIGNoaXAtPnBvcnQsIGlycVtuXSwgZG1hMVtuXSk7CisJCWNoaXAtPnBjbS0+bmFtZSwgY2hpcC0+cG9ydCwgaXJxW25dLCBkbWExW25dKTsKIAlpZiAoZG1hMltuXSA+PSAwKQogCQlzcHJpbnRmKGNhcmQtPmxvbmduYW1lICsgc3RybGVuKGNhcmQtPmxvbmduYW1lKSwgIiYlZCIsIGRtYTJbbl0pOwogCkBAIC0xMjIsNyArMTIxLDcgQEAKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIG91dDsKIAotCWVycm9yID0gc25kX3dzc190aW1lcihjaGlwLCAwLCBOVUxMKTsKKwllcnJvciA9IHNuZF93c3NfdGltZXIoY2hpcCwgMCk7CiAJaWYgKGVycm9yIDwgMCkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNi5jCmluZGV4IDc1MGY1MWMuLjlkNzU4MmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9jczQyM3gvY3M0MjM2LmMKKysrIGIvc291bmQvaXNhL2NzNDIzeC9jczQyMzYuYwpAQCAtMzgyLDcgKzM4Miw2IEBACiBzdGF0aWMgaW50IHNuZF9jczQyM3hfcHJvYmUoc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2KQogewogCXN0cnVjdCBzbmRfY2FyZF9jczQyMzYgKmFjYXJkOwotCXN0cnVjdCBzbmRfcGNtICpwY207CiAJc3RydWN0IHNuZF93c3MgKmNoaXA7CiAJc3RydWN0IHNuZF9vcGwzICpvcGwzOwogCWludCBlcnI7CkBAIC00MDQsNyArNDAzLDcgQEAKIAlhY2FyZC0+Y2hpcCA9IGNoaXA7CiAJaWYgKGNoaXAtPmhhcmR3YXJlICYgV1NTX0hXX0NTNDIzNkJfTUFTSykgewogCi0JCWVyciA9IHNuZF9jczQyMzZfcGNtKGNoaXAsIDAsICZwY20pOworCQllcnIgPSBzbmRfY3M0MjM2X3BjbShjaGlwLCAwKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCkBAIC00MTIsNyArNDExLDcgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCX0gZWxzZSB7Ci0JCWVyciA9IHNuZF93c3NfcGNtKGNoaXAsIDAsICZwY20pOworCQllcnIgPSBzbmRfd3NzX3BjbShjaGlwLCAwKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCkBAIC00MjAsMTcgKzQxOSwxNyBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQotCXN0cmNweShjYXJkLT5kcml2ZXIsIHBjbS0+bmFtZSk7Ci0Jc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgcGNtLT5uYW1lKTsKKwlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBjaGlwLT5wY20tPm5hbWUpOworCXN0cmNweShjYXJkLT5zaG9ydG5hbWUsIGNoaXAtPnBjbS0+bmFtZSk7CiAJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzIGF0IDB4JWx4LCBpcnEgJWksIGRtYSAlaSIsCi0JCXBjbS0+bmFtZSwKKwkJY2hpcC0+cGNtLT5uYW1lLAogCQljaGlwLT5wb3J0LAogCQlpcnFbZGV2XSwKIAkJZG1hMVtkZXZdKTsKIAlpZiAoZG1hMltkZXZdID49IDApCiAJCXNwcmludGYoY2FyZC0+bG9uZ25hbWUgKyBzdHJsZW4oY2FyZC0+bG9uZ25hbWUpLCAiJiVkIiwgZG1hMltkZXZdKTsKIAotCWVyciA9IHNuZF93c3NfdGltZXIoY2hpcCwgMCwgTlVMTCk7CisJZXJyID0gc25kX3dzc190aW1lcihjaGlwLCAwKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2NzNDIzeC9jczQyMzZfbGliLmMgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNl9saWIuYwppbmRleCBjNWFkY2EzLi4yYjdjYzU5IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNl9saWIuYworKysgYi9zb3VuZC9pc2EvY3M0MjN4L2NzNDIzNl9saWIuYwpAQCAtNzksNyArNzksNyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CkBAIC0zNzYsMTcgKzM3NiwxNCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc25kX2NzNDIzNl9wY20oc3RydWN0IHNuZF93c3MgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK2ludCBzbmRfY3M0MjM2X3BjbShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwgaW50IGRldmljZSkKIHsKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAJCi0JZXJyID0gc25kX3dzc19wY20oY2hpcCwgZGV2aWNlLCAmcGNtKTsKKwllcnIgPSBzbmRfd3NzX3BjbShjaGlwLCBkZXZpY2UpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCXBjbS0+aW5mb19mbGFncyAmPSB+U05EUlZfUENNX0lORk9fSk9JTlRfRFVQTEVYOwotCWlmIChycGNtKQotCQkqcnBjbSA9IHBjbTsKKwljaGlwLT5wY20tPmluZm9fZmxhZ3MgJj0gflNORFJWX1BDTV9JTkZPX0pPSU5UX0RVUExFWDsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYyBiL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKaW5kZXggNzYwMDFmZTAuLjE5MDFjMmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4LmMKKysrIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODguYwpAQCAtMTM4LDEwICsxMzgsOSBAQAogewogCXN0cnVjdCBzbmRfZXMxNjg4ICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfb3BsMyAqb3BsMzsKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnJvcjsKIAotCWVycm9yID0gc25kX2VzMTY4OF9wY20oY2FyZCwgY2hpcCwgMCwgJnBjbSk7CisJZXJyb3IgPSBzbmRfZXMxNjg4X3BjbShjYXJkLCBjaGlwLCAwKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTE1MCw5ICsxNDksOSBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAlzdHJsY3B5KGNhcmQtPmRyaXZlciwgIkVTMTY4OCIsIHNpemVvZihjYXJkLT5kcml2ZXIpKTsKLQlzdHJsY3B5KGNhcmQtPnNob3J0bmFtZSwgcGNtLT5uYW1lLCBzaXplb2YoY2FyZC0+c2hvcnRuYW1lKSk7CisJc3RybGNweShjYXJkLT5zaG9ydG5hbWUsIGNoaXAtPnBjbS0+bmFtZSwgc2l6ZW9mKGNhcmQtPnNob3J0bmFtZSkpOwogCXNucHJpbnRmKGNhcmQtPmxvbmduYW1lLCBzaXplb2YoY2FyZC0+bG9uZ25hbWUpLAotCQkiJXMgYXQgMHglbHgsIGlycSAlaSwgZG1hICVpIiwgcGNtLT5uYW1lLCBjaGlwLT5wb3J0LAorCQkiJXMgYXQgMHglbHgsIGlycSAlaSwgZG1hICVpIiwgY2hpcC0+cGNtLT5uYW1lLCBjaGlwLT5wb3J0LAogCQkgY2hpcC0+aXJxLCBjaGlwLT5kbWE4KTsKIAogCWlmIChmbV9wb3J0W25dID09IFNORFJWX0FVVE9fUE9SVCkKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE2ODgvZXMxNjg4X2xpYi5jIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMKaW5kZXggYjU0NTAxNC4uZTJjZjUwOCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMKKysrIGIvc291bmQvaXNhL2VzMTY4OC9lczE2ODhfbGliLmMKQEAgLTI1LDExICsyNSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9lczE2ODguaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAKIE1PRFVMRV9BVVRIT1IoIkphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+Iik7CkBAIC03MjgsOCArNzI4LDcgQEAKIAkucG9pbnRlciA9CQlzbmRfZXMxNjg4X2NhcHR1cmVfcG9pbnRlciwKIH07CiAKLWludCBzbmRfZXMxNjg4X3BjbShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIHN0cnVjdCBzbmRfZXMxNjg4ICpjaGlwLAotCQkgICBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCitpbnQgc25kX2VzMTY4OF9wY20oc3RydWN0IHNuZF9jYXJkICpjYXJkLCBzdHJ1Y3Qgc25kX2VzMTY4OCAqY2hpcCwgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CkBAIC03NDksOSArNzQ4LDYgQEAKIAlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAogCQkJCQkgICAgICBzbmRfZG1hX2lzYV9kYXRhKCksCiAJCQkJCSAgICAgIDY0KjEwMjQsIDY0KjEwMjQpOwotCi0JaWYgKHJwY20pCi0JCSpycGNtID0gcGNtOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZXMxOHh4LmMgYi9zb3VuZC9pc2EvZXMxOHh4LmMKaW5kZXggYjQ4MWJiOC4uNTA5NGI2MiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2VzMTh4eC5jCisrKyBiL3NvdW5kL2lzYS9lczE4eHguYwpAQCAtODQsOCArODQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lzYXBucC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgpAQCAtMTY4NywxNiArMTY4NywxMyBAQAogCS5wb2ludGVyID0Jc25kX2VzMTh4eF9jYXB0dXJlX3BvaW50ZXIsCiB9OwogCi1zdGF0aWMgaW50IHNuZF9lczE4eHhfcGNtKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSwKLQkJCSAgc3RydWN0IHNuZF9wY20gKipycGNtKQorc3RhdGljIGludCBzbmRfZXMxOHh4X3BjbShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9lczE4eHggKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAgICAgICAgIHN0cnVjdCBzbmRfcGNtICpwY207CiAJY2hhciBzdHJbMTZdOwogCWludCBlcnI7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwogCXNwcmludGYoc3RyLCAiRVMleCIsIGNoaXAtPnZlcnNpb24pOwogCWlmIChjaGlwLT5jYXBzICYgRVMxOFhYX1BDTTIpCiAJCWVyciA9IHNuZF9wY21fbmV3KGNhcmQsIHN0ciwgZGV2aWNlLCAyLCAxLCAmcGNtKTsKQEAgLTE3MjIsOSArMTcxOSw2IEBACiAJCQkJCSAgICAgIHNuZF9kbWFfaXNhX2RhdGEoKSwKIAkJCQkJICAgICAgNjQqMTAyNCwKIAkJCQkJICAgICAgY2hpcC0+ZG1hMSA+IDMgfHwgY2hpcC0+ZG1hMiA+IDMgPyAxMjgqMTAyNCA6IDY0KjEwMjQpOwotCi0gICAgICAgIGlmIChycGNtKQotICAgICAgICAJKnJwY20gPSBwY207CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxNTQsNyArMjE0OCw3IEBACiAJCQljaGlwLT5wb3J0LAogCQkJaXJxW2Rldl0sIGRtYTFbZGV2XSk7CiAKLQllcnIgPSBzbmRfZXMxOHh4X3BjbShjYXJkLCAwLCBOVUxMKTsKKwllcnIgPSBzbmRfZXMxOHh4X3BjbShjYXJkLCAwKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2dhbGF4eS9nYWxheHkuYyBiL3NvdW5kL2lzYS9nYWxheHkvZ2FsYXh5LmMKaW5kZXggMWViMmIxZS4uMzIyNzg4NCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2dhbGF4eS9nYWxheHkuYworKysgYi9zb3VuZC9pc2EvZ2FsYXh5L2dhbGF4eS5jCkBAIC01NjksNyArNTY5LDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJvcjsKIAotCWVyciA9IHNuZF93c3NfcGNtKGNoaXAsIDAsIE5VTEwpOworCWVyciA9IHNuZF93c3NfcGNtKGNoaXAsIDApOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yOwogCkBAIC01NzcsNyArNTc3LDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJvcjsKIAotCWVyciA9IHNuZF93c3NfdGltZXIoY2hpcCwgMCwgTlVMTCk7CisJZXJyID0gc25kX3dzc190aW1lcihjaGlwLCAwKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJvcjsKIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfaW5zdHIuYyBiL3NvdW5kL2lzYS9ndXMvZ3VzX2luc3RyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkYzljYWYuLjAwMDAwMDAKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfaW5zdHIuYworKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKgotICogIFJvdXRpbmVzIGZvciBHcmF2aXMgVWx0cmFTb3VuZCBzb3VuZGNhcmRzIC0gU3ludGhlc2l6ZXIKLSAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+Ci0gKgotICoKLSAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8c291bmQvZ3VzLmg+Ci0KLS8qCi0gKgotICovCi0KLWludCBzbmRfZ3VzX2l3ZmZmZl9wdXRfc2FtcGxlKHZvaWQgKnByaXZhdGVfZGF0YSwgc3RydWN0IGl3ZmZmZl93YXZlICp3YXZlLAotCQkJICAgICAgY2hhciBfX3VzZXIgKmRhdGEsIGxvbmcgbGVuLCBpbnQgYXRvbWljKQotewotCXN0cnVjdCBzbmRfZ3VzX2NhcmQgKmd1cyA9IHByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc25kX2dmMV9tZW1fYmxvY2sgKmJsb2NrOwotCWludCBlcnI7Ci0KLQlpZiAod2F2ZS0+Zm9ybWF0ICYgSVdGRkZGX1dBVkVfUk9NKQotCQlyZXR1cm4gMDsJLyogaXQncyBwcm9iYWJseSBvayAtIHZlcmlmeSB0aGUgYWRkcmVzcz8gKi8KLQlpZiAod2F2ZS0+Zm9ybWF0ICYgSVdGRkZGX1dBVkVfU1RFUkVPKQotCQlyZXR1cm4gLUVJTlZBTDsJLyogbm90IHN1cHBvcnRlZCAqLwotCWJsb2NrID0gc25kX2dmMV9tZW1fYWxsb2MoJmd1cy0+Z2YxLm1lbV9hbGxvYywKLQkJCQkgIFNORFJWX0dGMV9NRU1fT1dORVJfV0FWRV9JV0ZGRkYsCi0JCQkJICBOVUxMLCB3YXZlLT5zaXplLAotCQkJCSAgd2F2ZS0+Zm9ybWF0ICYgSVdGRkZGX1dBVkVfMTZCSVQsIDEsCi0JCQkJICB3YXZlLT5zaGFyZV9pZCk7Ci0JaWYgKGJsb2NrID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCWVyciA9IHNuZF9ndXNfZHJhbV93cml0ZShndXMsIGRhdGEsCi0JCQkJIGJsb2NrLT5wdHIsIHdhdmUtPnNpemUpOwotCWlmIChlcnIgPCAwKSB7Ci0JCXNuZF9nZjFfbWVtX2xvY2soJmd1cy0+Z2YxLm1lbV9hbGxvYywgMCk7Ci0JCXNuZF9nZjFfbWVtX3hmcmVlKCZndXMtPmdmMS5tZW1fYWxsb2MsIGJsb2NrKTsKLQkJc25kX2dmMV9tZW1fbG9jaygmZ3VzLT5nZjEubWVtX2FsbG9jLCAxKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0Jd2F2ZS0+YWRkcmVzcy5tZW1vcnkgPSBibG9jay0+cHRyOwotCXJldHVybiAwOwotfQotCi1pbnQgc25kX2d1c19pd2ZmZmZfZ2V0X3NhbXBsZSh2b2lkICpwcml2YXRlX2RhdGEsIHN0cnVjdCBpd2ZmZmZfd2F2ZSAqd2F2ZSwKLQkJCSAgICAgIGNoYXIgX191c2VyICpkYXRhLCBsb25nIGxlbiwgaW50IGF0b21pYykKLXsKLQlzdHJ1Y3Qgc25kX2d1c19jYXJkICpndXMgPSBwcml2YXRlX2RhdGE7Ci0KLQlyZXR1cm4gc25kX2d1c19kcmFtX3JlYWQoZ3VzLCBkYXRhLCB3YXZlLT5hZGRyZXNzLm1lbW9yeSwgd2F2ZS0+c2l6ZSwKLQkJCQkgd2F2ZS0+Zm9ybWF0ICYgSVdGRkZGX1dBVkVfUk9NID8gMSA6IDApOwotfQotCi1pbnQgc25kX2d1c19pd2ZmZmZfcmVtb3ZlX3NhbXBsZSh2b2lkICpwcml2YXRlX2RhdGEsIHN0cnVjdCBpd2ZmZmZfd2F2ZSAqd2F2ZSwKLQkJCQkgaW50IGF0b21pYykKLXsKLQlzdHJ1Y3Qgc25kX2d1c19jYXJkICpndXMgPSBwcml2YXRlX2RhdGE7Ci0KLQlpZiAod2F2ZS0+Zm9ybWF0ICYgSVdGRkZGX1dBVkVfUk9NKQotCQlyZXR1cm4gMDsJLyogaXQncyBwcm9iYWJseSBvayAtIHZlcmlmeSB0aGUgYWRkcmVzcz8gKi8JCi0JcmV0dXJuIHNuZF9nZjFfbWVtX2ZyZWUoJmd1cy0+Z2YxLm1lbV9hbGxvYywgd2F2ZS0+YWRkcmVzcy5tZW1vcnkpOwotfQotCi0vKgotICoKLSAqLwotCi1pbnQgc25kX2d1c19nZjFfcHV0X3NhbXBsZSh2b2lkICpwcml2YXRlX2RhdGEsIHN0cnVjdCBnZjFfd2F2ZSAqd2F2ZSwKLQkJCSAgIGNoYXIgX191c2VyICpkYXRhLCBsb25nIGxlbiwgaW50IGF0b21pYykKLXsKLQlzdHJ1Y3Qgc25kX2d1c19jYXJkICpndXMgPSBwcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9nZjFfbWVtX2Jsb2NrICpibG9jazsKLQlpbnQgZXJyOwotCi0JaWYgKHdhdmUtPmZvcm1hdCAmIEdGMV9XQVZFX1NURVJFTykKLQkJcmV0dXJuIC1FSU5WQUw7CS8qIG5vdCBzdXBwb3J0ZWQgKi8KLQlibG9jayA9IHNuZF9nZjFfbWVtX2FsbG9jKCZndXMtPmdmMS5tZW1fYWxsb2MsCi0JCQkJICBTTkRSVl9HRjFfTUVNX09XTkVSX1dBVkVfR0YxLAotCQkJCSAgTlVMTCwgd2F2ZS0+c2l6ZSwKLQkJCQkgIHdhdmUtPmZvcm1hdCAmIEdGMV9XQVZFXzE2QklULCAxLAotCQkJCSAgd2F2ZS0+c2hhcmVfaWQpOwotCWlmIChibG9jayA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQllcnIgPSBzbmRfZ3VzX2RyYW1fd3JpdGUoZ3VzLCBkYXRhLAotCQkJCSBibG9jay0+cHRyLCB3YXZlLT5zaXplKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzbmRfZ2YxX21lbV9sb2NrKCZndXMtPmdmMS5tZW1fYWxsb2MsIDApOwotCQlzbmRfZ2YxX21lbV94ZnJlZSgmZ3VzLT5nZjEubWVtX2FsbG9jLCBibG9jayk7Ci0JCXNuZF9nZjFfbWVtX2xvY2soJmd1cy0+Z2YxLm1lbV9hbGxvYywgMSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCXdhdmUtPmFkZHJlc3MubWVtb3J5ID0gYmxvY2stPnB0cjsKLQlyZXR1cm4gMDsKLX0KLQotaW50IHNuZF9ndXNfZ2YxX2dldF9zYW1wbGUodm9pZCAqcHJpdmF0ZV9kYXRhLCBzdHJ1Y3QgZ2YxX3dhdmUgKndhdmUsCi0JCQkgICBjaGFyIF9fdXNlciAqZGF0YSwgbG9uZyBsZW4sIGludCBhdG9taWMpCi17Ci0Jc3RydWN0IHNuZF9ndXNfY2FyZCAqZ3VzID0gcHJpdmF0ZV9kYXRhOwotCi0JcmV0dXJuIHNuZF9ndXNfZHJhbV9yZWFkKGd1cywgZGF0YSwgd2F2ZS0+YWRkcmVzcy5tZW1vcnksIHdhdmUtPnNpemUsIDApOwotfQotCi1pbnQgc25kX2d1c19nZjFfcmVtb3ZlX3NhbXBsZSh2b2lkICpwcml2YXRlX2RhdGEsIHN0cnVjdCBnZjFfd2F2ZSAqd2F2ZSwKLQkJCSAgICAgIGludCBhdG9taWMpCi17Ci0Jc3RydWN0IHNuZF9ndXNfY2FyZCAqZ3VzID0gcHJpdmF0ZV9kYXRhOwotCi0JcmV0dXJuIHNuZF9nZjFfbWVtX2ZyZWUoJmd1cy0+Z2YxLm1lbV9hbGxvYywgd2F2ZS0+YWRkcmVzcy5tZW1vcnkpOwotfQotCi0vKgotICoKLSAqLwotCi1pbnQgc25kX2d1c19zaW1wbGVfcHV0X3NhbXBsZSh2b2lkICpwcml2YXRlX2RhdGEsIHN0cnVjdCBzaW1wbGVfaW5zdHJ1bWVudCAqaW5zdHIsCi0JCQkgICAgICBjaGFyIF9fdXNlciAqZGF0YSwgbG9uZyBsZW4sIGludCBhdG9taWMpCi17Ci0Jc3RydWN0IHNuZF9ndXNfY2FyZCAqZ3VzID0gcHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfZ2YxX21lbV9ibG9jayAqYmxvY2s7Ci0JaW50IGVycjsKLQotCWlmIChpbnN0ci0+Zm9ybWF0ICYgU0lNUExFX1dBVkVfU1RFUkVPKQotCQlyZXR1cm4gLUVJTlZBTDsJLyogbm90IHN1cHBvcnRlZCAqLwotCWJsb2NrID0gc25kX2dmMV9tZW1fYWxsb2MoJmd1cy0+Z2YxLm1lbV9hbGxvYywKLQkJCQkgIFNORFJWX0dGMV9NRU1fT1dORVJfV0FWRV9TSU1QTEUsCi0JCQkJICBOVUxMLCBpbnN0ci0+c2l6ZSwKLQkJCQkgIGluc3RyLT5mb3JtYXQgJiBTSU1QTEVfV0FWRV8xNkJJVCwgMSwKLQkJCQkgIGluc3RyLT5zaGFyZV9pZCk7Ci0JaWYgKGJsb2NrID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCWVyciA9IHNuZF9ndXNfZHJhbV93cml0ZShndXMsIGRhdGEsIGJsb2NrLT5wdHIsIGluc3RyLT5zaXplKTsKLQlpZiAoZXJyIDwgMCkgewotCQlzbmRfZ2YxX21lbV9sb2NrKCZndXMtPmdmMS5tZW1fYWxsb2MsIDApOwotCQlzbmRfZ2YxX21lbV94ZnJlZSgmZ3VzLT5nZjEubWVtX2FsbG9jLCBibG9jayk7Ci0JCXNuZF9nZjFfbWVtX2xvY2soJmd1cy0+Z2YxLm1lbV9hbGxvYywgMSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCWluc3RyLT5hZGRyZXNzLm1lbW9yeSA9IGJsb2NrLT5wdHI7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBzbmRfZ3VzX3NpbXBsZV9nZXRfc2FtcGxlKHZvaWQgKnByaXZhdGVfZGF0YSwgc3RydWN0IHNpbXBsZV9pbnN0cnVtZW50ICppbnN0ciwKLQkJCSAgICAgIGNoYXIgX191c2VyICpkYXRhLCBsb25nIGxlbiwgaW50IGF0b21pYykKLXsKLQlzdHJ1Y3Qgc25kX2d1c19jYXJkICpndXMgPSBwcml2YXRlX2RhdGE7Ci0KLQlyZXR1cm4gc25kX2d1c19kcmFtX3JlYWQoZ3VzLCBkYXRhLCBpbnN0ci0+YWRkcmVzcy5tZW1vcnksIGluc3RyLT5zaXplLCAwKTsKLX0KLQotaW50IHNuZF9ndXNfc2ltcGxlX3JlbW92ZV9zYW1wbGUodm9pZCAqcHJpdmF0ZV9kYXRhLCBzdHJ1Y3Qgc2ltcGxlX2luc3RydW1lbnQgKmluc3RyLAotCQkJICAgICAgICAgaW50IGF0b21pYykKLXsKLQlzdHJ1Y3Qgc25kX2d1c19jYXJkICpndXMgPSBwcml2YXRlX2RhdGE7Ci0KLQlyZXR1cm4gc25kX2dmMV9tZW1fZnJlZSgmZ3VzLT5nZjEubWVtX2FsbG9jLCBpbnN0ci0+YWRkcmVzcy5tZW1vcnkpOwotfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNfcGNtLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYwppbmRleCAyZGNmNDViLi4yNWY2Nzg4IDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c19wY20uYwpAQCAtODQ5LDcgKzg0OSw3IEBACiAJLnBvaW50ZXIgPQlzbmRfZ2YxX3BjbV9jYXB0dXJlX3BvaW50ZXIsCiB9OwogCi1pbnQgc25kX2dmMV9wY21fbmV3KHN0cnVjdCBzbmRfZ3VzX2NhcmQgKiBndXMsIGludCBwY21fZGV2LCBpbnQgY29udHJvbF9pbmRleCwgc3RydWN0IHNuZF9wY20gKiogcnBjbSkKK2ludCBzbmRfZ2YxX3BjbV9uZXcoc3RydWN0IHNuZF9ndXNfY2FyZCAqZ3VzLCBpbnQgcGNtX2RldiwgaW50IGNvbnRyb2xfaW5kZXgpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7CkBAIC04NTcsOCArODU3LDYgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlpbnQgY2FwdHVyZSwgZXJyOwogCi0JaWYgKHJwY20pCi0JCSpycGNtID0gTlVMTDsKIAljYXJkID0gZ3VzLT5jYXJkOwogCWNhcHR1cmUgPSAhZ3VzLT5pbnRlcndhdmUgJiYgIWd1cy0+ZXNzX2ZsYWcgJiYgIWd1cy0+YWNlX2ZsYWcgPyAxIDogMDsKIAllcnIgPSBzbmRfcGNtX25ldyhjYXJkLApAQCAtOTAzLDggKzkwMSw2IEBACiAJCXJldHVybiBlcnI7CiAJa2N0bC0+aWQuaW5kZXggPSBjb250cm9sX2luZGV4OwogCi0JaWYgKHJwY20pCi0JCSpycGNtID0gcGNtOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2d1c191YXJ0LmMgYi9zb3VuZC9pc2EvZ3VzL2d1c191YXJ0LmMKaW5kZXggMjFjYzQyZS4uMzk5MjkxMiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNfdWFydC5jCisrKyBiL3NvdW5kL2lzYS9ndXMvZ3VzX3VhcnQuYwpAQCAtMjQxLDEzICsyNDEsMTEgQEAKIAkudHJpZ2dlciA9CXNuZF9nZjFfdWFydF9pbnB1dF90cmlnZ2VyLAogfTsKIAotaW50IHNuZF9nZjFfcmF3bWlkaV9uZXcoc3RydWN0IHNuZF9ndXNfY2FyZCAqIGd1cywgaW50IGRldmljZSwgc3RydWN0IHNuZF9yYXdtaWRpICoqIHJyYXdtaWRpKQoraW50IHNuZF9nZjFfcmF3bWlkaV9uZXcoc3RydWN0IHNuZF9ndXNfY2FyZCAqZ3VzLCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CiAJaW50IGVycjsKIAotCWlmIChycmF3bWlkaSkKLQkJKnJyYXdtaWRpID0gTlVMTDsKIAlpZiAoKGVyciA9IHNuZF9yYXdtaWRpX25ldyhndXMtPmNhcmQsICJHRjEiLCBkZXZpY2UsIDEsIDEsICZybWlkaSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlzdHJjcHkocm1pZGktPm5hbWUsIGd1cy0+aW50ZXJ3YXZlID8gIkFNRCBJbnRlcldhdmUiIDogIkdGMSIpOwpAQCAtMjU2LDcgKzI1NCw1IEBACiAJcm1pZGktPmluZm9fZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9JTkZPX09VVFBVVCB8IFNORFJWX1JBV01JRElfSU5GT19JTlBVVCB8IFNORFJWX1JBV01JRElfSU5GT19EVVBMRVg7CiAJcm1pZGktPnByaXZhdGVfZGF0YSA9IGd1czsKIAlndXMtPm1pZGlfdWFydCA9IHJtaWRpOwotCWlmIChycmF3bWlkaSkKLQkJKnJyYXdtaWRpID0gcm1pZGk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9ndXMvZ3VzY2xhc3NpYy5jIGIvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKaW5kZXggN2NlMjlmZi4uZjAwMTk3MSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKKysrIGIvc291bmQvaXNhL2d1cy9ndXNjbGFzc2ljLmMKQEAgLTE4MSwxMiArMTgxLDEyIEBACiAJaWYgKGVycm9yIDwgMCkKIAkJZ290byBvdXQ7CiAKLQllcnJvciA9IHNuZF9nZjFfcGNtX25ldyhndXMsIDAsIDAsIE5VTEwpOworCWVycm9yID0gc25kX2dmMV9wY21fbmV3KGd1cywgMCwgMCk7CiAJaWYgKGVycm9yIDwgMCkKIAkJZ290byBvdXQ7CiAKIAlpZiAoIWd1cy0+YWNlX2ZsYWcpIHsKLQkJZXJyb3IgPSBzbmRfZ2YxX3Jhd21pZGlfbmV3KGd1cywgMCwgTlVMTCk7CisJCWVycm9yID0gc25kX2dmMV9yYXdtaWRpX25ldyhndXMsIDApOwogCQlpZiAoZXJyb3IgPCAwKQogCQkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNleHRyZW1lLmMgYi9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYwppbmRleCAyOGExNjkzLi42OTNkOTVmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c2V4dHJlbWUuYwpAQCAtMjg0LDcgKzI4NCw3IEBACiAJfQogCWd1cy0+Y29kZWNfZmxhZyA9IDE7CiAKLQllcnJvciA9IHNuZF9lczE2ODhfcGNtKGNhcmQsIGVzMTY4OCwgMCwgTlVMTCk7CisJZXJyb3IgPSBzbmRfZXMxNjg4X3BjbShjYXJkLCBlczE2ODgsIDApOwogCWlmIChlcnJvciA8IDApCiAJCWdvdG8gb3V0OwogCkBAIC0yOTUsNyArMjk1LDcgQEAKIAlzbmRfY29tcG9uZW50X2FkZChjYXJkLCAiRVMxNjg4Iik7CiAKIAlpZiAocGNtX2NoYW5uZWxzW25dID4gMCkgewotCQllcnJvciA9IHNuZF9nZjFfcGNtX25ldyhndXMsIDEsIDEsIE5VTEwpOworCQllcnJvciA9IHNuZF9nZjFfcGNtX25ldyhndXMsIDEsIDEpOwogCQlpZiAoZXJyb3IgPCAwKQogCQkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL2d1cy9ndXNtYXguYyBiL3NvdW5kL2lzYS9ndXMvZ3VzbWF4LmMKaW5kZXggMzlkZjM2Yy4uODIxNmU4ZCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL2d1cy9ndXNtYXguYworKysgYi9zb3VuZC9pc2EvZ3VzL2d1c21heC5jCkBAIC0zMDksNyArMzA5LDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBfZXJyOwogCi0JZXJyID0gc25kX3dzc19wY20od3NzLCAwLCBOVUxMKTsKKwllcnIgPSBzbmRfd3NzX3BjbSh3c3MsIDApOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIF9lcnI7CiAKQEAgLTMxNywxOSArMzE3LDE5IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gX2VycjsKIAotCWVyciA9IHNuZF93c3NfdGltZXIod3NzLCAyLCBOVUxMKTsKKwllcnIgPSBzbmRfd3NzX3RpbWVyKHdzcywgMik7CiAJaWYgKGVyciA8IDApCiAJCWdvdG8gX2VycjsKIAogCWlmIChwY21fY2hhbm5lbHNbZGV2XSA+IDApIHsKLQkJaWYgKChlcnIgPSBzbmRfZ2YxX3BjbV9uZXcoZ3VzLCAxLCAxLCBOVUxMKSkgPCAwKQorCQlpZiAoKGVyciA9IHNuZF9nZjFfcGNtX25ldyhndXMsIDEsIDEpKSA8IDApCiAJCQlnb3RvIF9lcnI7CiAJfQogCWVyciA9IHNuZF9ndXNtYXhfbWl4ZXIod3NzKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBfZXJyOwogCi0JZXJyID0gc25kX2dmMV9yYXdtaWRpX25ldyhndXMsIDAsIE5VTEwpOworCWVyciA9IHNuZF9nZjFfcmF3bWlkaV9uZXcoZ3VzLCAwKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBfZXJyOwogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jIGIvc291bmQvaXNhL2d1cy9pbnRlcndhdmUuYwppbmRleCBhZDU1ZTVjLi43MGQwMDQwIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZ3VzL2ludGVyd2F2ZS5jCisrKyBiL3NvdW5kL2lzYS9ndXMvaW50ZXJ3YXZlLmMKQEAgLTY0Nyw3ICs2NDcsNiBAQAogI2lmZGVmIFNORFJWX1NUQgogCXN0cnVjdCBzbmRfaTJjX2J1cyAqaTJjX2J1czsKICNlbmRpZgotCXN0cnVjdCBzbmRfcGNtICpwY207CiAJY2hhciAqc3RyOwogCWludCBlcnI7CiAKQEAgLTY5NSwxNCArNjk0LDE1IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBzbmRfd3NzX3BjbSh3c3MsIDAsICZwY20pOworCWVyciA9IHNuZF93c3NfcGNtKHdzcywgMCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQlzcHJpbnRmKHBjbS0+bmFtZSArIHN0cmxlbihwY20tPm5hbWUpLCAiIHJldiAlYyIsIGd1cy0+cmV2aXNpb24gKyAnQScpOwotCXN0cmNhdChwY20tPm5hbWUsICIgKGNvZGVjKSIpOworCXNwcmludGYod3NzLT5wY20tPm5hbWUgKyBzdHJsZW4od3NzLT5wY20tPm5hbWUpLCAiIHJldiAlYyIsCisJCWd1cy0+cmV2aXNpb24gKyAnQScpOworCXN0cmNhdCh3c3MtPnBjbS0+bmFtZSwgIiAoY29kZWMpIik7CiAKLQllcnIgPSBzbmRfd3NzX3RpbWVyKHdzcywgMiwgTlVMTCk7CisJZXJyID0gc25kX3dzc190aW1lcih3c3MsIDIpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC03MTEsNyArNzExLDcgQEAKIAkJcmV0dXJuIGVycjsKIAogCWlmIChwY21fY2hhbm5lbHNbZGV2XSA+IDApIHsKLQkJZXJyID0gc25kX2dmMV9wY21fbmV3KGd1cywgMSwgMSwgTlVMTCk7CisJCWVyciA9IHNuZF9nZjFfcGNtX25ldyhndXMsIDEsIDEpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAJfQpAQCAtNzQwLDcgKzc0MCw3IEBACiAjZW5kaWYKIAogCWd1cy0+dWFydF9lbmFibGUgPSBtaWRpW2Rldl07Ci0JaWYgKChlcnIgPSBzbmRfZ2YxX3Jhd21pZGlfbmV3KGd1cywgMCwgTlVMTCkpIDwgMCkKKwlpZiAoKGVyciA9IHNuZF9nZjFfcmF3bWlkaV9uZXcoZ3VzLCAwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCiAjaWZuZGVmIFNORFJWX1NUQgpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZC5jIGIvc291bmQvaXNhL21zbmQvbXNuZC5jCmluZGV4IDFjZWUxOGYuLjgzNWQ0YWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9tc25kL21zbmQuYworKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kLmMKQEAgLTY3OSw4ICs2NzksNyBAQAogfTsKIAogCi1pbnQgc25kX21zbmRfcGNtKHN0cnVjdCBzbmRfY2FyZCAqY2FyZCwgaW50IGRldmljZSwKLQkJCXN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK2ludCBzbmRfbXNuZF9wY20oc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBzbmRfbXNuZCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3BjbQkqcGNtOwpAQCAtNjk2LDkgKzY5NSw2IEBACiAJcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOwogCXN0cmNweShwY20tPm5hbWUsICJIdXJyaWNhbmUiKTsKIAotCi0JaWYgKHJwY20pCi0JCSpycGNtID0gcGNtOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChzbmRfbXNuZF9wY20pOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZC5oIGIvc291bmQvaXNhL21zbmQvbXNuZC5oCmluZGV4IGRiYWMzYTQuLjVmM2M3ZGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9tc25kL21zbmQuaAorKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kLmgKQEAgLTI5Nyw3ICsyOTcsNyBAQAogdm9pZCBzbmRfbXNuZF9kc3BfaGFsdChzdHJ1Y3Qgc25kX21zbmQgKmNoaXAsIHN0cnVjdCBmaWxlICpmaWxlKTsKIGludCBzbmRfbXNuZF9EQVBRKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IHN0YXJ0KTsKIGludCBzbmRfbXNuZF9EQVJRKHN0cnVjdCBzbmRfbXNuZCAqY2hpcCwgaW50IHN0YXJ0KTsKLWludCBzbmRfbXNuZF9wY20oc3RydWN0IHNuZF9jYXJkICpjYXJkLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOworaW50IHNuZF9tc25kX3BjbShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UpOwogCiBpbnQgc25kX21zbmRtaWRpX25ldyhzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsIGludCBkZXZpY2UpOwogdm9pZCBzbmRfbXNuZG1pZGlfaW5wdXRfcmVhZCh2b2lkICptcHUpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jIGIvc291bmQvaXNhL21zbmQvbXNuZF9waW5uYWNsZS5jCmluZGV4IDUwMTZiZjkuLjRjMDcyNjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9tc25kL21zbmRfcGlubmFjbGUuYworKysgYi9zb3VuZC9pc2EvbXNuZC9tc25kX3Bpbm5hY2xlLmMKQEAgLTU4Miw3ICs1ODIsNyBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAotCWVyciA9IHNuZF9tc25kX3BjbShjYXJkLCAwLCBOVUxMKTsKKwllcnIgPSBzbmRfbXNuZF9wY20oY2FyZCwgMCk7CiAJaWYgKGVyciA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIExPR05BTUUgIjogZXJyb3IgY3JlYXRpbmcgbmV3IFBDTSBkZXZpY2VcbiIpOwogCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKQEAgLTYyNyw4ICs2MjcsNyBAQAogCXJldHVybiAwOwogCiBlcnJfcmVsZWFzZV9yZWdpb246Ci0JaWYgKGNoaXAtPm1hcHBlZGJhc2UpCi0JCWlvdW5tYXAoY2hpcC0+bWFwcGVkYmFzZSk7CisJaW91bm1hcChjaGlwLT5tYXBwZWRiYXNlKTsKIAlyZWxlYXNlX21lbV9yZWdpb24oY2hpcC0+YmFzZSwgQlVGRlNJWkUpOwogCXJlbGVhc2VfcmVnaW9uKGNoaXAtPmlvLCBEU1BfTlVNSU8pOwogCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3BsM3NhMi5jIGIvc291bmQvaXNhL29wbDNzYTIuYwppbmRleCBhMjE5YmMzLi5hZTEzMzYzIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3BsM3NhMi5jCisrKyBiL3NvdW5kL2lzYS9vcGwzc2EyLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BucC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3dzcy5oPgogI2luY2x1ZGUgPHNvdW5kL21wdTQwMS5oPgpAQCAtMzMsOCArMzQsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgotCiBNT0RVTEVfQVVUSE9SKCJKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJZYW1haGEgT1BMM1NBMisiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTY4NCw3ICs2ODMsNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAljaGlwLT53c3MgPSB3c3M7Ci0JZXJyID0gc25kX3dzc19wY20od3NzLCAwLCBOVUxMKTsKKwllcnIgPSBzbmRfd3NzX3BjbSh3c3MsIDApOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCWVyciA9IHNuZF93c3NfbWl4ZXIod3NzKTsKQEAgLTY5Myw3ICs2OTIsNyBAQAogCWVyciA9IHNuZF9vcGwzc2EyX21peGVyKGNhcmQpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCWVyciA9IHNuZF93c3NfdGltZXIod3NzLCAwLCBOVUxMKTsKKwllcnIgPSBzbmRfd3NzX3RpbWVyKHdzcywgMCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAJaWYgKGZtX3BvcnRbZGV2XSA+PSAweDM0MCAmJiBmbV9wb3J0W2Rldl0gPCAweDQwMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wdGk5eHgvbWlyby5jIGIvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCmluZGV4IGMyY2E2ODEuLjNhOTA2N2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYworKysgYi9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC93c3MuaD4KQEAgLTEyNzAsOCArMTI3MCw2IEBACiAJaW50IGVycm9yOwogCXN0cnVjdCBzbmRfbWlybyAqbWlybyA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3dzcyAqY29kZWM7Ci0Jc3RydWN0IHNuZF90aW1lciAqdGltZXI7Ci0Jc3RydWN0IHNuZF9wY20gKnBjbTsKIAlzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpOwogCiAJaWYgKCFtaXJvLT5yZXNfbWNfYmFzZSkgewpAQCAtMTMxMCw3ICsxMzA4LDcgQEAKIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKLQllcnJvciA9IHNuZF93c3NfcGNtKGNvZGVjLCAwLCAmcGNtKTsKKwllcnJvciA9IHNuZF93c3NfcGNtKGNvZGVjLCAwKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKQEAgLTEzMTgsMTEgKzEzMTYsMTEgQEAKIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKLQllcnJvciA9IHNuZF93c3NfdGltZXIoY29kZWMsIDAsICZ0aW1lcik7CisJZXJyb3IgPSBzbmRfd3NzX3RpbWVyKGNvZGVjLCAwKTsKIAlpZiAoZXJyb3IgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKLQltaXJvLT5wY20gPSBwY207CisJbWlyby0+cGNtID0gY29kZWMtPnBjbTsKIAogCWVycm9yID0gc25kX21pcm9fbWl4ZXIoY2FyZCwgbWlybyk7CiAJaWYgKGVycm9yIDwgMCkKQEAgLTEzNTYsOCArMTM1NCw4IEBACiAKIAlzdHJjcHkoY2FyZC0+ZHJpdmVyLCAibWlybyIpOwogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlczogT1BUaSVzLCAlcyBhdCAweCVseCwgaXJxICVkLCBkbWEgJWQmJWQiLAotCQljYXJkLT5zaG9ydG5hbWUsIG1pcm8tPm5hbWUsIHBjbS0+bmFtZSwgbWlyby0+d3NzX2Jhc2UgKyA0LAotCQltaXJvLT5pcnEsIG1pcm8tPmRtYTEsIG1pcm8tPmRtYTIpOworCQljYXJkLT5zaG9ydG5hbWUsIG1pcm8tPm5hbWUsIGNvZGVjLT5wY20tPm5hbWUsCisJCW1pcm8tPndzc19iYXNlICsgNCwgbWlyby0+aXJxLCBtaXJvLT5kbWExLCBtaXJvLT5kbWEyKTsKIAogCWlmIChtcHVfcG9ydCA8PSAwIHx8IG1wdV9wb3J0ID09IFNORFJWX0FVVE9fUE9SVCkKIAkJcm1pZGkgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKaW5kZXggYzliNTgyOC4uMGE1MjY2MCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYworKysgYi9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CkBAIC04MjAsMTAgKzgyMCw2IEBACiAJaW50IHhkbWEyOwogCXN0cnVjdCBzbmRfb3B0aTl4eCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3dzcyAqY29kZWM7Ci0jaWZkZWYgQ1M0MjMxCi0Jc3RydWN0IHNuZF90aW1lciAqdGltZXI7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CiAJc3RydWN0IHNuZF9od2RlcCAqc3ludGg7CiAKQEAgLTg1NSw3ICs4NTEsNyBAQAogCWlmIChlcnJvciA8IDApCiAJCXJldHVybiBlcnJvcjsKIAljaGlwLT5jb2RlYyA9IGNvZGVjOwotCWVycm9yID0gc25kX3dzc19wY20oY29kZWMsIDAsICZwY20pOworCWVycm9yID0gc25kX3dzc19wY20oY29kZWMsIDApOwogCWlmIChlcnJvciA8IDApCiAJCXJldHVybiBlcnJvcjsKIAllcnJvciA9IHNuZF93c3NfbWl4ZXIoY29kZWMpOwpAQCAtODY3LDcgKzg2Myw3IEBACiAJCXJldHVybiBlcnJvcjsKICNlbmRpZgogI2lmZGVmIENTNDIzMQotCWVycm9yID0gc25kX3dzc190aW1lcihjb2RlYywgMCwgJnRpbWVyKTsKKwllcnJvciA9IHNuZF93c3NfdGltZXIoY29kZWMsIDApOwogCWlmIChlcnJvciA8IDApCiAJCXJldHVybiBlcnJvcjsKICNlbmRpZgpAQCAtODg0LDExICs4ODAsMTIgQEAKIAlzcHJpbnRmKGNhcmQtPnNob3J0bmFtZSwgIk9QVGkgJXMiLCBjYXJkLT5kcml2ZXIpOwogI2lmIGRlZmluZWQoQ1M0MjMxKSB8fCBkZWZpbmVkKE9QVGk5M1gpCiAJc3ByaW50ZihjYXJkLT5sb25nbmFtZSwgIiVzLCAlcyBhdCAweCVseCwgaXJxICVkLCBkbWEgJWQmJWQiLAotCQljYXJkLT5zaG9ydG5hbWUsIHBjbS0+bmFtZSwKKwkJY2FyZC0+c2hvcnRuYW1lLCBjb2RlYy0+cGNtLT5uYW1lLAogCQljaGlwLT53c3NfYmFzZSArIDQsIGlycSwgZG1hMSwgeGRtYTIpOwogI2Vsc2UKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMsICVzIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCIsCi0JCWNhcmQtPnNob3J0bmFtZSwgcGNtLT5uYW1lLCBjaGlwLT53c3NfYmFzZSArIDQsIGlycSwgZG1hMSk7CisJCWNhcmQtPnNob3J0bmFtZSwgY29kZWMtPnBjbS0+bmFtZSwgY2hpcC0+d3NzX2Jhc2UgKyA0LCBpcnEsCisJCWRtYTEpOwogI2VuZGlmCS8qIENTNDIzMSB8fCBPUFRpOTNYICovCiAKIAlpZiAobXB1X3BvcnQgPD0gMCB8fCBtcHVfcG9ydCA9PSBTTkRSVl9BVVRPX1BPUlQpCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2IvZW11ODAwMC5jIGIvc291bmQvaXNhL3NiL2VtdTgwMDAuYwppbmRleCA0NWZjZGZmLi45NGM0MTEyIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2IvZW11ODAwMC5jCisrKyBiL3NvdW5kL2lzYS9zYi9lbXU4MDAwLmMKQEAgLTI2LDExICsyNiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvZW11ODAwMC5oPgogI2luY2x1ZGUgPHNvdW5kL2VtdTgwMDBfcmVnLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CkBAIC0zNzgsMTMgKzM3OCwxMiBAQAogc3RhdGljIHZvaWQKIHNpemVfZHJhbShzdHJ1Y3Qgc25kX2VtdTgwMDAgKmVtdSkKIHsKLQlpbnQgaSwgc2l6ZSwgZGV0ZWN0ZWRfc2l6ZTsKKwlpbnQgaSwgc2l6ZTsKIAogCWlmIChlbXUtPmRyYW1fY2hlY2tlZCkKIAkJcmV0dXJuOwogCiAJc2l6ZSA9IDA7Ci0JZGV0ZWN0ZWRfc2l6ZSA9IDA7CiAKIAkvKiB3cml0ZSBvdXQgYSBtYWdpYyBudW1iZXIgKi8KIAlzbmRfZW11ODAwMF9kbWFfY2hhbihlbXUsIDAsIEVNVTgwMDBfUkFNX1dSSVRFKTsKQEAgLTM5MiwxMCArMzkxLDE5IEBACiAJRU1VODAwMF9TTUFMV19XUklURShlbXUsIEVNVTgwMDBfRFJBTV9PRkZTRVQpOwogCUVNVTgwMDBfU01MRF9XUklURShlbXUsIFVOSVFVRV9JRDEpOwogCXNuZF9lbXU4MDAwX2luaXRfZm0oZW11KTsgLyogVGhpcyBtdXN0IHJlYWxseSBiZSBoZXJlIGFuZCBub3QgMiBsaW5lcyBiYWNrIGV2ZW4gKi8KKwlzbmRfZW11ODAwMF93cml0ZV93YWl0KGVtdSk7CiAKLQl3aGlsZSAoc2l6ZSA8IEVNVTgwMDBfTUFYX0RSQU0pIHsKKwkvKgorCSAqIERldGVjdCBmaXJzdCA1MTIgS2lCLiAgSWYgYSB3cml0ZSBzdWNjZWVkcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEKKwkgKiA1MTIgS2lCIHBhZ2Ugd2UgYXNzdW1lIHRoYXQgdGhlIHdob2xlIHBhZ2UgaXMgdGhlcmUuCisJICovCisJRU1VODAwMF9TTUFMUl9XUklURShlbXUsIEVNVTgwMDBfRFJBTV9PRkZTRVQpOworCUVNVTgwMDBfU01MRF9SRUFEKGVtdSk7IC8qIGRpc2NhcmQgc3RhbGUgZGF0YSAgKi8KKwlpZiAoRU1VODAwMF9TTUxEX1JFQUQoZW11KSAhPSBVTklRVUVfSUQxKQorCQlnb3RvIHNraXBfZGV0ZWN0OyAgIC8qIE5vIFJBTSAqLworCXNuZF9lbXU4MDAwX3JlYWRfd2FpdChlbXUpOwogCi0JCXNpemUgKz0gNTEyICogMTAyNDsgIC8qIGluY3JlbWVudCA1MTJrYnl0ZXMgKi8KKwlmb3IgKHNpemUgPSA1MTIgKiAxMDI0OyBzaXplIDwgRU1VODAwMF9NQVhfRFJBTTsgc2l6ZSArPSA1MTIgKiAxMDI0KSB7CiAKIAkJLyogV3JpdGUgYSB1bmlxdWUgZGF0YSBvbiB0aGUgdGVzdCBhZGRyZXNzLgogCQkgKiBpZiB0aGUgYWRkcmVzcyBpcyBvdXQgb2YgcmFuZ2UsIHRoZSBkYXRhIGlzIHdyaXR0ZW4gb24KQEAgLTQzMSwxOCArNDM5LDkgQEAKIAkJc25kX2VtdTgwMDBfcmVhZF93YWl0KGVtdSk7CiAKIAkJLyogT3RoZXJ3aXNlLCBpdCdzIHZhbGlkIG1lbW9yeS4gKi8KLQkJZGV0ZWN0ZWRfc2l6ZSA9IHNpemUgKyA1MTIgKiAxMDI0OwogCX0KIAotCS8qIERpc3Rpbmd1aXNoIDUxMiBLaUIgZnJvbSAwLiAqLwotCWlmIChkZXRlY3RlZF9zaXplID09IDApIHsKLQkJc25kX2VtdTgwMDBfcmVhZF93YWl0KGVtdSk7Ci0JCUVNVTgwMDBfU01BTFJfV1JJVEUoZW11LCBFTVU4MDAwX0RSQU1fT0ZGU0VUKTsKLQkJRU1VODAwMF9TTUxEX1JFQUQoZW11KTsgLyogZGlzY2FyZCBzdGFsZSBkYXRhICAqLwotCQlpZiAoRU1VODAwMF9TTUxEX1JFQUQoZW11KSA9PSBVTklRVUVfSUQxKQotCQkJZGV0ZWN0ZWRfc2l6ZSA9IDUxMiAqIDEwMjQ7Ci0JfQotCitza2lwX2RldGVjdDoKIAkvKiB3YWl0IHVudGlsIEZVTEwgYml0IGluIFNNQXhXIHJlZ2lzdGVyIGlzIGZhbHNlICovCiAJZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKIAkJaWYgKChFTVU4MDAwX1NNQUxXX1JFQUQoZW11KSAmIDB4ODAwMDAwMDApID09IDApCkBAIC00NTQsMTAgKzQ1MywxMCBAQAogCXNuZF9lbXU4MDAwX2RtYV9jaGFuKGVtdSwgMCwgRU1VODAwMF9SQU1fQ0xPU0UpOwogCXNuZF9lbXU4MDAwX2RtYV9jaGFuKGVtdSwgMSwgRU1VODAwMF9SQU1fQ0xPU0UpOwogCi0Jc25kX3ByaW50ZGQoIkVNVTgwMDAgWzB4JWx4XTogJWQgS2Igb24tYm9hcmQgbWVtb3J5IGRldGVjdGVkXG4iLAotCQkgICAgZW11LT5wb3J0MSwgZGV0ZWN0ZWRfc2l6ZS8xMDI0KTsKKwlwcl9pbmZvKCJFTVU4MDAwIFsweCVseF06ICVkIEtpQiBvbi1ib2FyZCBEUkFNIGRldGVjdGVkXG4iLAorCQkgICAgZW11LT5wb3J0MSwgc2l6ZS8xMDI0KTsKIAotCWVtdS0+bWVtX3NpemUgPSBkZXRlY3RlZF9zaXplOworCWVtdS0+bWVtX3NpemUgPSBzaXplOwogCWVtdS0+ZHJhbV9jaGVja2VkID0gMTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL2VtdTgwMDBfcGF0Y2guYyBiL3NvdW5kL2lzYS9zYi9lbXU4MDAwX3BhdGNoLmMKaW5kZXggYzk5YzYwNy4uNzFkMTNjMCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL2VtdTgwMDBfcGF0Y2guYworKysgYi9zb3VuZC9pc2Evc2IvZW11ODAwMF9wYXRjaC5jCkBAIC0yMCw3ICsyMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImVtdTgwMDBfbG9jYWwuaCIKLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogCiBzdGF0aWMgaW50IGVtdTgwMDBfcmVzZXRfYWRkcjsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9lbXU4MDAwX3BjbS5jIGIvc291bmQvaXNhL3NiL2VtdTgwMDBfcGNtLmMKaW5kZXggMmY4NWM2Ni4uMjUwZmQwMCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL2VtdTgwMDBfcGNtLmMKKysrIGIvc291bmQvaXNhL3NiL2VtdTgwMDBfcGNtLmMKQEAgLTIwNyw4ICsyMDcsNyBAQAogCXJlYy0+bGFzdF9wdHIgPSBwdHI7CiAKIAkvKiByZXByb2dyYW0gdGltZXIgKi8KLQlyZWMtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMTsKLQlhZGRfdGltZXIoJnJlYy0+dGltZXIpOworCW1vZF90aW1lcigmcmVjLT50aW1lciwgamlmZmllcyArIDEpOwogCiAJLyogdXBkYXRlIHBlcmlvZCAqLwogCWlmIChyZWMtPnBlcmlvZF9wb3MgPj0gKGludClyZWMtPnBlcmlvZF9zaXplKSB7CkBAIC0yNDAsOSArMjM5LDcgQEAKIAlydW50aW1lLT5wcml2YXRlX2RhdGEgPSByZWM7CiAKIAlzcGluX2xvY2tfaW5pdCgmcmVjLT50aW1lcl9sb2NrKTsKLQlpbml0X3RpbWVyKCZyZWMtPnRpbWVyKTsKLQlyZWMtPnRpbWVyLmZ1bmN0aW9uID0gZW11OGtfcGNtX3RpbWVyX2Z1bmM7Ci0JcmVjLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcmVjOworCXNldHVwX3RpbWVyKCZyZWMtPnRpbWVyLCBlbXU4a19wY21fdGltZXJfZnVuYywgKHVuc2lnbmVkIGxvbmcpcmVjKTsKIAogCXJ1bnRpbWUtPmh3ID0gZW11OGtfcGNtX2h3OwogCXJ1bnRpbWUtPmh3LmJ1ZmZlcl9ieXRlc19tYXggPSBlbXUtPm1lbV9zaXplIC0gTE9PUF9CTEFOS19TSVpFICogMzsKQEAgLTM1OSw4ICszNTYsNyBAQAogCS8qIHN0YXJ0IHRpbWVyICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJlYy0+dGltZXJfbG9jaywgZmxhZ3MpOwogCWlmICghIHJlYy0+dGltZXJfcnVubmluZykgewotCQlyZWMtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMTsKLQkJYWRkX3RpbWVyKCZyZWMtPnRpbWVyKTsKKwkJbW9kX3RpbWVyKCZyZWMtPnRpbWVyLCBqaWZmaWVzICsgMSk7CiAJCXJlYy0+dGltZXJfcnVubmluZyA9IDE7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJlYy0+dGltZXJfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL2VtdTgwMDBfc3ludGguYyBiL3NvdW5kL2lzYS9zYi9lbXU4MDAwX3N5bnRoLmMKaW5kZXggOTViMzliZS4uNzIzMzJkZiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL2VtdTgwMDBfc3ludGguYworKysgYi9zb3VuZC9pc2Evc2IvZW11ODAwMF9zeW50aC5jCkBAIC0xMDMsOCArMTAzLDcgQEAKIAlodyA9IGRldi0+ZHJpdmVyX2RhdGE7CiAJaWYgKGh3LT5wY20pCiAJCXNuZF9kZXZpY2VfZnJlZShkZXYtPmNhcmQsIGh3LT5wY20pOwotCWlmIChody0+ZW11KQotCQlzbmRfZW11eF9mcmVlKGh3LT5lbXUpOworCXNuZF9lbXV4X2ZyZWUoaHctPmVtdSk7CiAJc25kX3V0aWxfbWVtaGRyX2ZyZWUoaHctPm1lbWhkcik7CiAJaHctPmVtdSA9IE5VTEw7CiAJaHctPm1lbWhkciA9IE5VTEw7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2IvamF6ejE2LmMgYi9zb3VuZC9pc2Evc2IvamF6ejE2LmMKaW5kZXggOTBkMmViYS4uNmI0ODg0ZCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL2phenoxNi5jCisrKyBiL3NvdW5kL2lzYS9zYi9qYXp6MTYuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJCSJNZWRpYSBWaXNpb24gSmF6ejE2IGF0IDB4JWx4LCBpcnEgJWQsIGRtYTggJWQsIGRtYTE2ICVkIiwKIAkJcG9ydFtkZXZdLCB4aXJxLCB4ZG1hOCwgeGRtYTE2KTsKIAotCWVyciA9IHNuZF9zYjhkc3BfcGNtKGNoaXAsIDAsIE5VTEwpOworCWVyciA9IHNuZF9zYjhkc3BfcGNtKGNoaXAsIDApOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycl9mcmVlOwogCWVyciA9IHNuZF9zYm1peGVyX25ldyhjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjE2LmMgYi9zb3VuZC9pc2Evc2Ivc2IxNi5jCmluZGV4IDNmNjk0NTQuLjRhN2Q3YzggMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9zYi9zYjE2LmMKKysrIGIvc291bmQvaXNhL3NiL3NiMTYuYwpAQCAtMzc0LDcgKzM3NCw3IEBACiAJaWYgKCEgaXNfaXNhcG5wX3NlbGVjdGVkKGRldikgJiYgKGVyciA9IHNuZF9zYjE2ZHNwX2NvbmZpZ3VyZShjaGlwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKChlcnIgPSBzbmRfc2IxNmRzcF9wY20oY2hpcCwgMCwgJmNoaXAtPnBjbSkpIDwgMCkKKwlpZiAoKGVyciA9IHNuZF9zYjE2ZHNwX3BjbShjaGlwLCAwKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCiAJc3RyY3B5KGNhcmQtPmRyaXZlciwKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjE2X21haW4uYyBiL3NvdW5kL2lzYS9zYi9zYjE2X21haW4uYwppbmRleCA3MmIxMGY0Li44YjJkNmM2IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2IxNl9tYWluLmMKKysrIGIvc291bmQvaXNhL3NiL3NiMTZfbWFpbi5jCkBAIC0zMyw3ICszMyw3IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpAQCAtODYwLDE5ICs4NjAsMTggQEAKIAkucG9pbnRlciA9CXNuZF9zYjE2X2NhcHR1cmVfcG9pbnRlciwKIH07CiAKLWludCBzbmRfc2IxNmRzcF9wY20oc3RydWN0IHNuZF9zYiAqIGNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqIHJwY20pCitpbnQgc25kX3NiMTZkc3BfcGNtKHN0cnVjdCBzbmRfc2IgKmNoaXAsIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gY2hpcC0+Y2FyZDsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwogCWlmICgoZXJyID0gc25kX3BjbV9uZXcoY2FyZCwgIlNCMTYgRFNQIiwgZGV2aWNlLCAxLCAxLCAmcGNtKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCXNwcmludGYocGNtLT5uYW1lLCAiRFNQIHYlaS4laSIsIGNoaXAtPnZlcnNpb24gPj4gOCwgY2hpcC0+dmVyc2lvbiAmIDB4ZmYpOwogCXBjbS0+aW5mb19mbGFncyA9IFNORFJWX1BDTV9JTkZPX0pPSU5UX0RVUExFWDsKIAlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJY2hpcC0+cGNtID0gcGNtOwogCiAJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnNuZF9zYjE2X3BsYXliYWNrX29wcyk7CiAJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLCAmc25kX3NiMTZfY2FwdHVyZV9vcHMpOwpAQCAtODg1LDkgKzg4NCw2IEBACiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKIAkJCQkJICAgICAgc25kX2RtYV9pc2FfZGF0YSgpLAogCQkJCQkgICAgICA2NCoxMDI0LCAxMjgqMTAyNCk7Ci0KLQlpZiAocnBjbSkKLQkJKnJwY20gPSBwY207CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjguYyBiL3NvdW5kL2lzYS9zYi9zYjguYwppbmRleCA2YzMyYjNhLi5iOGUyMzkxIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2I4LmMKKysrIGIvc291bmQvaXNhL3NiL3NiOC5jCkBAIC0xNTcsNyArMTU3LDcgQEAKIAkJZ290byBfZXJyOwogCX0KIAotCWlmICgoZXJyID0gc25kX3NiOGRzcF9wY20oY2hpcCwgMCwgTlVMTCkpIDwgMCkKKwlpZiAoKGVyciA9IHNuZF9zYjhkc3BfcGNtKGNoaXAsIDApKSA8IDApCiAJCWdvdG8gX2VycjsKIAogCWlmICgoZXJyID0gc25kX3NibWl4ZXJfbmV3KGNoaXApKSA8IDApCkBAIC0xODIsNyArMTgyLDcgQEAKIAkJCWdvdG8gX2VycjsKIAl9CiAKLQlpZiAoKGVyciA9IHNuZF9zYjhkc3BfbWlkaShjaGlwLCAwLCBOVUxMKSkgPCAwKQorCWlmICgoZXJyID0gc25kX3NiOGRzcF9taWRpKGNoaXAsIDApKSA8IDApCiAJCWdvdG8gX2VycjsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsIGNoaXAtPmhhcmR3YXJlID09IFNCX0hXX1BSTyA/ICJTQiBQcm8iIDogIlNCOCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiOF9tYWluLmMgYi9zb3VuZC9pc2Evc2Ivc2I4X21haW4uYwppbmRleCAyNGQ0MTIxLi45MDQzMzk3IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2I4X21haW4uYworKysgYi9zb3VuZC9pc2Evc2Ivc2I4X21haW4uYwpAQCAtMzAsNyArMzAsNyBAQAogICogICBDbGVhbmVkIHVwIGFuZCByZXdyb3RlIGxvd2xldmVsIHJvdXRpbmVzLgogICovCiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpAQCAtNTk0LDE1ICs1OTQsMTMgQEAKIAkucG9pbnRlciA9CQlzbmRfc2I4X2NhcHR1cmVfcG9pbnRlciwKIH07CiAKLWludCBzbmRfc2I4ZHNwX3BjbShzdHJ1Y3Qgc25kX3NiICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKiBycGNtKQoraW50IHNuZF9zYjhkc3BfcGNtKHN0cnVjdCBzbmRfc2IgKmNoaXAsIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gY2hpcC0+Y2FyZDsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAJc2l6ZV90IG1heF9wcmVhbGxvYyA9IDY0ICogMTAyNDsKIAotCWlmIChycGNtKQotCQkqcnBjbSA9IE5VTEw7CiAJaWYgKChlcnIgPSBzbmRfcGNtX25ldyhjYXJkLCAiU0I4IERTUCIsIGRldmljZSwgMSwgMSwgJnBjbSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlzcHJpbnRmKHBjbS0+bmFtZSwgIkRTUCB2JWkuJWkiLCBjaGlwLT52ZXJzaW9uID4+IDgsIGNoaXAtPnZlcnNpb24gJiAweGZmKTsKQEAgLTYxOCw4ICs2MTYsNiBAQAogCQkJCQkgICAgICBzbmRfZG1hX2lzYV9kYXRhKCksCiAJCQkJCSAgICAgIDY0KjEwMjQsIG1heF9wcmVhbGxvYyk7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBwY207CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zYi9zYjhfbWlkaS5jIGIvc291bmQvaXNhL3NiL3NiOF9taWRpLmMKaW5kZXggOTg4YThiNy4uZDU1MWM1MCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiOF9taWRpLmMKKysrIGIvc291bmQvaXNhL3NiL3NiOF9taWRpLmMKQEAgLTI2LDcgKzI2LDcgQEAKICAqICAgQWRkZWQgZnVsbCBkdXBsZXggVUFSVCBtb2RlIGZvciBEU1AgdmVyc2lvbiAyLjAgYW5kIGxhdGVyLgogICovCiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvc2IuaD4KQEAgLTIxNiw4ICsyMTYsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+b3Blbl9sb2NrLCBmbGFncyk7Ci0JY2hpcC0+bWlkaV90aW1lci5leHBpcmVzID0gMSArIGppZmZpZXM7Ci0JYWRkX3RpbWVyKCZjaGlwLT5taWRpX3RpbWVyKTsKKwltb2RfdGltZXIoJmNoaXAtPm1pZGlfdGltZXIsIDEgKyBqaWZmaWVzKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwLT5vcGVuX2xvY2ssIGZsYWdzKTsJCiAJc25kX3NiOGRzcF9taWRpX291dHB1dF93cml0ZShzdWJzdHJlYW0pOwogfQpAQCAtMjMxLDExICsyMzAsMTAgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2hpcC0+b3Blbl9sb2NrLCBmbGFncyk7CiAJaWYgKHVwKSB7CiAJCWlmICghKGNoaXAtPm9wZW4gJiBTQl9PUEVOX01JRElfT1VUUFVUX1RSSUdHRVIpKSB7Ci0JCQlpbml0X3RpbWVyKCZjaGlwLT5taWRpX3RpbWVyKTsKLQkJCWNoaXAtPm1pZGlfdGltZXIuZnVuY3Rpb24gPSBzbmRfc2I4ZHNwX21pZGlfb3V0cHV0X3RpbWVyOwotCQkJY2hpcC0+bWlkaV90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHN1YnN0cmVhbTsKLQkJCWNoaXAtPm1pZGlfdGltZXIuZXhwaXJlcyA9IDEgKyBqaWZmaWVzOwotCQkJYWRkX3RpbWVyKCZjaGlwLT5taWRpX3RpbWVyKTsKKwkJCXNldHVwX3RpbWVyKCZjaGlwLT5taWRpX3RpbWVyLAorCQkJCSAgICBzbmRfc2I4ZHNwX21pZGlfb3V0cHV0X3RpbWVyLAorCQkJCSAgICAodW5zaWduZWQgbG9uZykgc3Vic3RyZWFtKTsKKwkJCW1vZF90aW1lcigmY2hpcC0+bWlkaV90aW1lciwgMSArIGppZmZpZXMpOwogCQkJY2hpcC0+b3BlbiB8PSBTQl9PUEVOX01JRElfT1VUUFVUX1RSSUdHRVI7CiAJCX0KIAl9IGVsc2UgewpAQCAtMjYzLDEzICsyNjEsMTEgQEAKIAkudHJpZ2dlciA9CXNuZF9zYjhkc3BfbWlkaV9pbnB1dF90cmlnZ2VyLAogfTsKIAotaW50IHNuZF9zYjhkc3BfbWlkaShzdHJ1Y3Qgc25kX3NiICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3Jhd21pZGkgKiogcnJhd21pZGkpCitpbnQgc25kX3NiOGRzcF9taWRpKHN0cnVjdCBzbmRfc2IgKmNoaXAsIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKIAlpbnQgZXJyOwogCi0JaWYgKHJyYXdtaWRpKQotCQkqcnJhd21pZGkgPSBOVUxMOwogCWlmICgoZXJyID0gc25kX3Jhd21pZGlfbmV3KGNoaXAtPmNhcmQsICJTQjggTUlESSIsIGRldmljZSwgMSwgMSwgJnJtaWRpKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCXN0cmNweShybWlkaS0+bmFtZSwgIlNCOCBNSURJIik7CkBAIC0yODAsNyArMjc2LDUgQEAKIAkJcm1pZGktPmluZm9fZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9JTkZPX0RVUExFWDsKIAlybWlkaS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKIAljaGlwLT5ybWlkaSA9IHJtaWRpOwotCWlmIChycmF3bWlkaSkKLQkJKnJyYXdtaWRpID0gcm1pZGk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2Ivc2JfY29tbW9uLmMgYi9zb3VuZC9pc2Evc2Ivc2JfY29tbW9uLmMKaW5kZXggZjIyYjQ0OC4uNzg3YTRhZCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL3NiX2NvbW1vbi5jCisrKyBiL3NvdW5kL2lzYS9zYi9zYl9jb21tb24uYwpAQCAtMjYsMTEgKzI2LDExIEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3NiLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogCiBNT0RVTEVfQVVUSE9SKCJKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QHBlcmV4LmN6PiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3NiL3NiX21peGVyLmMgYi9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYwppbmRleCBlNDAzMzM0Li5hZGQxZDNmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYworKysgYi9zb3VuZC9pc2Evc2Ivc2JfbWl4ZXIuYwpAQCAtMTksNyArMTksNyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2M2MDAwLmMgYi9zb3VuZC9pc2Evc2M2MDAwLmMKaW5kZXggMTVhMTUyZS4uNTFjZmE3NiAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NjNjAwMC5jCisrKyBiL3NvdW5kL2lzYS9zYzYwMDAuYwpAQCAtNjI1LDcgKzYyNSw3IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gZXJyX3VubWFwMjsKIAotCWVyciA9IHNuZF93c3NfcGNtKGNoaXAsIDAsIE5VTEwpOworCWVyciA9IHNuZF93c3NfcGNtKGNoaXAsIDApOwogCWlmIChlcnIgPCAwKSB7CiAJCXNuZF9wcmludGsoS0VSTl9FUlIgUEZYCiAJCQkgICAiZXJyb3IgY3JlYXRpbmcgbmV3IFdTUyBQQ00gZGV2aWNlXG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9zc2NhcGUuYyBiL3NvdW5kL2lzYS9zc2NhcGUuYwppbmRleCA0NDQwNWRmLi43YjI0OGNkIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evc3NjYXBlLmMKKysrIGIvc291bmQvaXNhL3NzY2FwZS5jCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pc2EuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CkBAIC04NzcsNyArODc4LDYgQEAKIAkJCSAgICAgY29kZWNfdHlwZSwgV1NTX0hXU0hBUkVfRE1BMSwgJmNoaXApOwogCWlmICghZXJyKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXN0cnVjdCBzbmRfcGNtICpwY207CiAKIAkJaWYgKHNzY2FwZS0+dHlwZSAhPSBTU0NBUEVfVklWTykgewogCQkJLyoKQEAgLTg5Myw3ICs4OTMsNyBAQAogCiAJCX0KIAotCQllcnIgPSBzbmRfd3NzX3BjbShjaGlwLCAwLCAmcGNtKTsKKwkJZXJyID0gc25kX3dzc19wY20oY2hpcCwgMCk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJzc2NhcGU6IE5vIFBDTSBkZXZpY2UgIgogCQkJCQkgICAgImZvciBBRDE4NDUgY2hpcFxuIik7CkBAIC05MDcsNyArOTA3LDcgQEAKIAkJCWdvdG8gX2Vycm9yOwogCQl9CiAJCWlmIChjaGlwLT5oYXJkd2FyZSAhPSBXU1NfSFdfQUQxODQ4KSB7Ci0JCQllcnIgPSBzbmRfd3NzX3RpbWVyKGNoaXAsIDAsIE5VTEwpOworCQkJZXJyID0gc25kX3dzc190aW1lcihjaGlwLCAwKTsKIAkJCWlmIChlcnIgPCAwKSB7CiAJCQkJc25kX3ByaW50ayhLRVJOX0VSUiAic3NjYXBlOiBObyB0aW1lciBkZXZpY2UgIgogCQkJCQkJICAgICJmb3IgQUQxODQ1IGNoaXBcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250LmMKaW5kZXggYmZiZjM4Yy4uYTA5ODdhNSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnQuYworKysgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udC5jCkBAIC0zODAsMTEgKzM4MCwxMSBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAotCWVyciA9IHNuZF93c3NfcGNtKGNoaXAsIDAsIE5VTEwpOworCWVyciA9IHNuZF93c3NfcGNtKGNoaXAsIDApOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXJyID0gc25kX3dzc190aW1lcihjaGlwLCAwLCBOVUxMKTsKKwllcnIgPSBzbmRfd3NzX3RpbWVyKGNoaXAsIDApOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9meC5jIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfZnguYwppbmRleCBiNzc4ODNjLi5iNWExOTcwIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9meC5jCisrKyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X2Z4LmMKQEAgLTE2LDcgKzE2LDcgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X21pZGkuYyBiL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X21pZGkuYwppbmRleCA3ZGM5OTE2Li44YTgwZmM2IDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9taWRpLmMKKysrIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfbWlkaS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAgKiAgCiAgKi8KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CkBAIC0zNTYsOCArMzU2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQogCXNwaW5fbG9ja19pcnFzYXZlICgmbWlkaS0+dmlydHVhbCwgZmxhZ3MpOwotCW1pZGktPnRpbWVyLmV4cGlyZXMgPSAxICsgamlmZmllczsKLQlhZGRfdGltZXIoJm1pZGktPnRpbWVyKTsKKwltb2RfdGltZXIoJm1pZGktPnRpbWVyLCAxICsgamlmZmllcyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJm1pZGktPnZpcnR1YWwsIGZsYWdzKTsKIAlzbmRfd2F2ZWZyb250X21pZGlfb3V0cHV0X3dyaXRlKGNhcmQpOwogfQpAQCAtMzg0LDExICszODMsMTAgQEAKIAlpZiAodXApIHsKIAkJaWYgKChtaWRpLT5tb2RlW21wdV0gJiBNUFU0MDFfTU9ERV9PVVRQVVRfVFJJR0dFUikgPT0gMCkgewogCQkJaWYgKCFtaWRpLT5pc3RpbWVyKSB7Ci0JCQkJaW5pdF90aW1lcigmbWlkaS0+dGltZXIpOwotCQkJCW1pZGktPnRpbWVyLmZ1bmN0aW9uID0gc25kX3dhdmVmcm9udF9taWRpX291dHB1dF90aW1lcjsKLQkJCQltaWRpLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHN1YnN0cmVhbS0+cm1pZGktPmNhcmQtPnByaXZhdGVfZGF0YTsKLQkJCQltaWRpLT50aW1lci5leHBpcmVzID0gMSArIGppZmZpZXM7Ci0JCQkJYWRkX3RpbWVyKCZtaWRpLT50aW1lcik7CisJCQkJc2V0dXBfdGltZXIoJm1pZGktPnRpbWVyLAorCQkJCQkgICAgc25kX3dhdmVmcm9udF9taWRpX291dHB1dF90aW1lciwKKwkJCQkJICAgICh1bnNpZ25lZCBsb25nKSBzdWJzdHJlYW0tPnJtaWRpLT5jYXJkLT5wcml2YXRlX2RhdGEpOworCQkJCW1vZF90aW1lcigmbWlkaS0+dGltZXIsIDEgKyBqaWZmaWVzKTsKIAkJCX0KIAkJCW1pZGktPmlzdGltZXIrKzsKIAkJCW1pZGktPm1vZGVbbXB1XSB8PSBNUFU0MDFfTU9ERV9PVVRQVVRfVFJJR0dFUjsKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X3N5bnRoLmMgYi9zb3VuZC9pc2Evd2F2ZWZyb250L3dhdmVmcm9udF9zeW50aC5jCmluZGV4IGU1ZGIwMDEuLjMzZjVlYzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS93YXZlZnJvbnQvd2F2ZWZyb250X3N5bnRoLmMKKysrIGIvc291bmQvaXNhL3dhdmVmcm9udC93YXZlZnJvbnRfc3ludGguYwpAQCAtMjAsNyArMjAsNyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS93c3Mvd3NzX2xpYi5jIGIvc291bmQvaXNhL3dzcy93c3NfbGliLmMKaW5kZXggMzQ3YmIxYi4uOTEzYjczMSAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3dzcy93c3NfbGliLmMKKysrIGIvc291bmQvaXNhL3dzcy93c3NfbGliLmMKQEAgLTMxLDEyICszMSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC93c3MuaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCkBAIC0xOTIzLDcgKzE5MjMsNyBAQAogCS5wb2ludGVyID0Jc25kX3dzc19jYXB0dXJlX3BvaW50ZXIsCiB9OwogCi1pbnQgc25kX3dzc19wY20oc3RydWN0IHNuZF93c3MgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK2ludCBzbmRfd3NzX3BjbShzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CkBAIC0xOTQ5LDggKzE5NDksNiBAQAogCQkJCQkgICAgICA2NCoxMDI0LCBjaGlwLT5kbWExID4gMyB8fCBjaGlwLT5kbWEyID4gMyA/IDEyOCoxMDI0IDogNjQqMTAyNCk7CiAKIAljaGlwLT5wY20gPSBwY207Ci0JaWYgKHJwY20pCi0JCSpycGNtID0gcGNtOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChzbmRfd3NzX3BjbSk7CkBAIC0xOTYxLDcgKzE5NTksNyBAQAogCWNoaXAtPnRpbWVyID0gTlVMTDsKIH0KIAotaW50IHNuZF93c3NfdGltZXIoc3RydWN0IHNuZF93c3MgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfdGltZXIgKipydGltZXIpCitpbnQgc25kX3dzc190aW1lcihzdHJ1Y3Qgc25kX3dzcyAqY2hpcCwgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3RpbWVyICp0aW1lcjsKIAlzdHJ1Y3Qgc25kX3RpbWVyX2lkIHRpZDsKQEAgLTE5ODAsOCArMTk3OCw2IEBACiAJdGltZXItPnByaXZhdGVfZnJlZSA9IHNuZF93c3NfdGltZXJfZnJlZTsKIAl0aW1lci0+aHcgPSBzbmRfd3NzX3RpbWVyX3RhYmxlOwogCWNoaXAtPnRpbWVyID0gdGltZXI7Ci0JaWYgKHJ0aW1lcikKLQkJKnJ0aW1lciA9IHRpbWVyOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChzbmRfd3NzX3RpbWVyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hdGFyaS5jIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2F0YXJpLmMKaW5kZXggMTNjMjE0NC4uMWM1NmJmNSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2F0YXJpLmMKKysrIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2F0YXJpLmMKQEAgLTg1MSw3ICs4NTEsNyBAQAogCXN0X21mcC50aW1fZHRfYSA9IDE7CS8qIENhdXNlIGludGVycnVwdCBhZnRlciBmaXJzdCBldmVudC4gKi8KIAlzdF9tZnAudGltX2N0X2EgPSA4OwkvKiBUdXJuIG9uIGV2ZW50IGNvdW50aW5nLiAqLwogCS8qIFJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVyLiAqLwotCWlmIChyZXF1ZXN0X2lycShJUlFfTUZQX1RJTUEsIEF0YUludGVycnVwdCwgSVJRX1RZUEVfU0xPVywgIkRNQSBzb3VuZCIsCisJaWYgKHJlcXVlc3RfaXJxKElSUV9NRlBfVElNQSwgQXRhSW50ZXJydXB0LCAwLCAiRE1BIHNvdW5kIiwKIAkJCUF0YUludGVycnVwdCkpCiAJCXJldHVybiAwOwogCXN0X21mcC5pbnRfZW5fYSB8PSAweDIwOwkvKiBUdXJuIGludGVycnVwdCBvbi4gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9tc25kX3Bpbm5hY2xlLmMgYi9zb3VuZC9vc3MvbXNuZF9waW5uYWNsZS5jCmluZGV4IGMyM2Y5ZjkuLmE4Y2VlZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9tc25kX3Bpbm5hY2xlLmMKKysrIGIvc291bmQvb3NzL21zbmRfcGlubmFjbGUuYwpAQCAtNjc1LDcgKzY3NSw3IEBACiAJCXRpbWVvdXQpOwogCWNsZWFyX2JpdChGX1dSSVRFRkxVU0gsICZkZXYuZmxhZ3MpOwogCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJc2NoZWR1bGVfdGltZW91dChnZXRfcGxheV9kZWxheV9qaWZmaWVzKERBUF9CVUZGX1NJWkUpKTsKIAl9CiAJY2xlYXJfYml0KEZfV1JJVElORywgJmRldi5mbGFncyk7CkBAIC0xMjg4LDcgKzEyODgsNyBAQAogCQkgICAgICAgJiB+MHgwMDAxLCBkZXYuU01BICsgU01BX3dDdXJySG9zdFN0YXR1c0ZsYWdzKTsKIAlpZiAobXNuZF9zZW5kX3dvcmQoJmRldiwgMCwgMCwgSERFWEFSX0NBTF9BX1RPX0QpID09IDAgJiYKIAkgICAgY2hrX3NlbmRfZHNwX2NtZCgmZGV2LCBIREVYX0FVWF9SRVEpID09IDApIHsKLQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJc2NoZWR1bGVfdGltZW91dChIWiAvIDMpOwogCQlyZXR1cm4gMDsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvcHNzLmMgYi9zb3VuZC9vc3MvcHNzLmMKaW5kZXggY2EwZDZlOS4uODEzMTRmOSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3Bzcy5jCisrKyBiL3NvdW5kL29zcy9wc3MuYwpAQCAtMTIyOCw3ICsxMjI4LDcgQEAKIHsKIAlpZighcHNzX25vX3NvdW5kKQogCXsKLQkJaWYoZndfbG9hZCAmJiBwc3Nfc3ludGgpCisJCWlmIChmd19sb2FkKQogCQkJdmZyZWUocHNzX3N5bnRoKTsKIAkJaWYocHNzbXNzKQogCQkJdW5sb2FkX3Bzc19tc3MoJmNmZzIpOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYyBiL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKaW5kZXggYTMzZThjZS4uMjEzYTQxNiAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYworKysgYi9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCkBAIC0xNjU0LDcgKzE2NTQsNyBAQAogICAgICAgICBzLT5kbWFfZGFjLmh3cHRyID0gcy0+ZG1hX2RhYy5zd3B0ciA9IGh3cHRyOwogICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJnMtPmRtYV9kYWMud2FpdCwgJndhaXQpOwotCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvb3NzL3RyaXguYyBiL3NvdW5kL29zcy90cml4LmMKaW5kZXggOTQ0ZTBjMC4uM2M0OTRkYyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3RyaXguYworKysgYi9zb3VuZC9vc3MvdHJpeC5jCkBAIC00ODcsNyArNDg3LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfdHJpeCh2b2lkKQogewotCWlmIChmd19sb2FkICYmIHRyaXhfYm9vdCkKKwlpZiAoZndfbG9hZCkKIAkJdmZyZWUodHJpeF9ib290KTsKIAlpZiAoc2IpCiAJCXVubG9hZF90cml4X3NiKCZjZmcyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BhcmlzYy9oYXJtb255LmMgYi9zb3VuZC9wYXJpc2MvaGFybW9ueS5jCmluZGV4IDI5NjA0YTIuLjk5YjY0Y2IgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BhcmlzYy9oYXJtb255LmMKKysrIGIvc291bmQvcGFyaXNjL2hhcm1vbnkuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtNTIsNyArNTMsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vcGFyaXNjLWRldmljZS5oPgogCkBAIC04OTMsOSArODkzLDcgQEAKIAlpZiAoaC0+aXJxID49IDApCiAJCWZyZWVfaXJxKGgtPmlycSwgaCk7CiAKLQlpZiAoaC0+aW9iYXNlKQotCQlpb3VubWFwKGgtPmlvYmFzZSk7Ci0KKwlpb3VubWFwKGgtPmlvYmFzZSk7CiAJa2ZyZWUoaCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IDUwZGQwMDguLmVkZmMxYjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC03OTMsNiArNzkzLDE1IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtcm1lOTY1Mi4KIAorY29uZmlnIFNORF9TRTZYCisJdHJpc3RhdGUgIlN0dWRpbyBFdm9sdXRpb24gU0U2WCIKKwlkZXBlbmRzIG9uIFNORF9PWFlHRU49biAmJiBTTkRfVklSVFVPU089biAgIyBQQ0kgSUQgY29uZmxpY3QKKwlzZWxlY3QgU05EX09YWUdFTl9MSUIKKwlzZWxlY3QgU05EX1BDTQorCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKKwloZWxwCisJICBTYXkgWSBvciBNIGhlcmUgb25seSBpZiB5b3UgYWN0dWFsbHkgaGF2ZSB0aGlzIHNvdW5kIGNhcmQuCisKIGNvbmZpZyBTTkRfU0lTNzAxOQogCXRyaXN0YXRlICJTaVMgNzAxOSBBdWRpbyBBY2NlbGVyYXRvciIKIAlkZXBlbmRzIG9uIFg4Nl8zMgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FkMTg4OS5jIGIvc291bmQvcGNpL2FkMTg4OS5jCmluZGV4IDE2MTBjMzguLjg1MGE4YzkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hZDE4ODkuYworKysgYi9zb3VuZC9wY2kvYWQxODg5LmMKQEAgLTQwLDE0ICs0MCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KLQogI2luY2x1ZGUgImFkMTg4OS5oIgogI2luY2x1ZGUgImFjOTcvYWM5N19pZC5oIgogCkBAIC02MjMsMTQgKzYyMiwxMSBAQAogfQogCiBzdGF0aWMgaW50Ci1zbmRfYWQxODg5X3BjbV9pbml0KHN0cnVjdCBzbmRfYWQxODg5ICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCitzbmRfYWQxODg5X3BjbV9pbml0KHN0cnVjdCBzbmRfYWQxODg5ICpjaGlwLCBpbnQgZGV2aWNlKQogewogCWludCBlcnI7CiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAotCWlmIChycGNtKQotCQkqcnBjbSA9IE5VTEw7Ci0KIAllcnIgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCBjaGlwLT5jYXJkLT5kcml2ZXIsIGRldmljZSwgMSwgMSwgJnBjbSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC02NTgsOSArNjU0LDYgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAJCi0JaWYgKHJwY20pCi0JCSpycGNtID0gcGNtOwotCQogCXJldHVybiAwOwogfQogCkBAIC04NTksMTIgKzg1Miw5IEBACiAJCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CiAKIHNraXBfaHc6Ci0JaWYgKGNoaXAtPmlvYmFzZSkKLQkJaW91bm1hcChjaGlwLT5pb2Jhc2UpOwotCisJaW91bm1hcChjaGlwLT5pb2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKLQogCWtmcmVlKGNoaXApOwogCXJldHVybiAwOwogfQpAQCAtMTAxNiw3ICsxMDA2LDcgQEAKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBmcmVlX2FuZF9yZXQ7CiAJCi0JZXJyID0gc25kX2FkMTg4OV9wY21faW5pdChjaGlwLCAwLCBOVUxMKTsKKwllcnIgPSBzbmRfYWQxODg5X3BjbV9pbml0KGNoaXAsIDApOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGZyZWVfYW5kX3JldDsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jIGIvc291bmQvcGNpL2FsaTU0NTEvYWxpNTQ1MS5jCmluZGV4IGFmODllNDIuLmM4ZDQ5OTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbGk1NDUxL2FsaTU0NTEuYworKysgYi9zb3VuZC9wY2kvYWxpNTQ1MS9hbGk1NDUxLmMKQEAgLTI1LDcgKzI1LDcgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xODczLDcgKzE4NzMsNiBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBhbGlfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc25kX2FsaSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX2FsaV9pbWFnZSAqaW07CkBAIC0xOTE0LDE2ICsxOTEzLDExIEBACiAJb3V0bCgweGZmZmZmZmZmLCBBTElfUkVHKGNoaXAsIEFMSV9TVE9QKSk7CiAKIAlzcGluX3VubG9ja19pcnEoJmNoaXAtPnJlZ19sb2NrKTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCXBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWxpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc25kX2FsaSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX2FsaV9pbWFnZSAqaW07CkBAIC0xOTMzLDE1ICsxOTI3LDYgQEAKIAlpZiAoIWltKQogCQlyZXR1cm4gMDsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCBkaXNhYmxpbmcgZGV2aWNlXG4iKTsKLQkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXBjaV9zZXRfbWFzdGVyKHBjaSk7Ci0KIAlzcGluX2xvY2tfaXJxKCZjaGlwLT5yZWdfbG9jayk7CiAJCiAJZm9yIChpID0gMDsgaSA8IEFMSV9DSEFOTkVMUzsgaSsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWxzMzAwLmMgYi9zb3VuZC9wY2kvYWxzMzAwLmMKaW5kZXggN2JiNmFjNS4uNTdlMDM0ZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FsczMwMC5jCisrKyBiL3NvdW5kL3BjaS9hbHMzMDAuYwpAQCAtMzcsOCArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CkBAIC03MjgsMzUgKzcyNywyMCBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBzbmRfYWxzMzAwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNuZF9hbHMzMDAgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKIAlzbmRfcG93ZXJfY2hhbmdlX3N0YXRlKGNhcmQsIFNORFJWX0NUTF9QT1dFUl9EM2hvdCk7CiAJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY20pOwogCXNuZF9hYzk3X3N1c3BlbmQoY2hpcC0+YWM5Nyk7Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKLQlwY2lfc2F2ZV9zdGF0ZShwY2kpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF9hbHMzMDBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbmRfYWxzMzAwICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKLQkJZGV2X2VycihkZXYsICJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsIGRpc2FibGluZyBkZXZpY2VcbiIpOwotCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcGNpX3NldF9tYXN0ZXIocGNpKTsKLQogCXNuZF9hbHMzMDBfaW5pdChjaGlwKTsKIAlzbmRfYWM5N19yZXN1bWUoY2hpcC0+YWM5Nyk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hbHM0MDAwLmMgYi9zb3VuZC9wY2kvYWxzNDAwMC5jCmluZGV4IGQzZTY0MjQuLmEzZGVhNDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hbHM0MDAwLmMKKysrIGIvc291bmQvcGNpL2FsczQwMDAuYwpAQCAtNjUsNyArNjUsNyBAQAogICogLSBwb3dlciBtYW5hZ2VtZW50PyAoY2FyZCBjYW4gZG8gdm9pY2Ugd2FrZXVwIGFjY29yZGluZyB0byBkYXRhc2hlZXQhISkKICAqLwogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZ2FtZXBvcnQuaD4KQEAgLTk4OCw3ICs5ODgsNiBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBzbmRfYWxzNDAwMF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbmRfY2FyZF9hbHM0MDAwICphY2FyZCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NiICpjaGlwID0gYWNhcmQtPmNoaXA7CkBAIC05OTcsMjkgKzk5NiwxNSBAQAogCQogCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtKTsKIAlzbmRfc2JtaXhlcl9zdXNwZW5kKGNoaXApOwotCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0JcGNpX3NhdmVfc3RhdGUocGNpKTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfYWxzNDAwMF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNuZF9jYXJkX2FsczQwMDAgKmFjYXJkID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc2IgKmNoaXAgPSBhY2FyZC0+Y2hpcDsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCBkaXNhYmxpbmcgZGV2aWNlXG4iKTsKLQkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXBjaV9zZXRfbWFzdGVyKHBjaSk7Ci0KIAlzbmRfYWxzNDAwMF9jb25maWd1cmUoY2hpcCk7CiAJc25kX3NiZHNwX3Jlc2V0KGNoaXApOwogCXNuZF9zYm1peGVyX3Jlc3VtZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hc2locGkvYXNpaHBpLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2FzaWhwaS5jCmluZGV4IGU5MjczZmIuLmU1Y2Q3YmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hc2locGkvYXNpaHBpLmMKKysrIGIvc291bmQvcGNpL2FzaWhwaS9hc2locGkuYwpAQCAtNTQwLDkgKzU0MCw4IEBACiAJZXhwaXJ5ID0gSFogLyAyMDA7CiAKIAlleHBpcnkgPSBtYXgoZXhwaXJ5LCAxKTsgLyogZG9uJ3QgbGV0IGl0IGJlIHplcm8hICovCi0JZHBjbS0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBleHBpcnk7CisJbW9kX3RpbWVyKCZkcGNtLT50aW1lciwgamlmZmllcyArIGV4cGlyeSk7CiAJZHBjbS0+cmVzcGF3bl90aW1lciA9IDE7Ci0JYWRkX3RpbWVyKCZkcGNtLT50aW1lcik7CiB9CiAKIHN0YXRpYyB2b2lkIHNuZF9jYXJkX2FzaWhwaV9wY21fdGltZXJfc3RvcChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKQEAgLTEwNjQsOSArMTA2Myw4IEBACiAJICAgIElmIGludGVybmFsIGFuZCBvdGhlciBzdHJlYW0gcGxheWluZywgY2FuJ3Qgc3dpdGNoCiAJKi8KIAotCWluaXRfdGltZXIoJmRwY20tPnRpbWVyKTsKLQlkcGNtLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRwY207Ci0JZHBjbS0+dGltZXIuZnVuY3Rpb24gPSBzbmRfY2FyZF9hc2locGlfdGltZXJfZnVuY3Rpb247CisJc2V0dXBfdGltZXIoJmRwY20tPnRpbWVyLCBzbmRfY2FyZF9hc2locGlfdGltZXJfZnVuY3Rpb24sCisJCSAgICAodW5zaWduZWQgbG9uZykgZHBjbSk7CiAJZHBjbS0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOwogCXJ1bnRpbWUtPnByaXZhdGVfZGF0YSA9IGRwY207CiAJcnVudGltZS0+cHJpdmF0ZV9mcmVlID0gc25kX2NhcmRfYXNpaHBpX3J1bnRpbWVfZnJlZTsKQEAgLTEyNDYsOSArMTI0NCw4IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIC1FSU87CiAKLQlpbml0X3RpbWVyKCZkcGNtLT50aW1lcik7Ci0JZHBjbS0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBkcGNtOwotCWRwY20tPnRpbWVyLmZ1bmN0aW9uID0gc25kX2NhcmRfYXNpaHBpX3RpbWVyX2Z1bmN0aW9uOworCXNldHVwX3RpbWVyKCZkcGNtLT50aW1lciwgc25kX2NhcmRfYXNpaHBpX3RpbWVyX2Z1bmN0aW9uLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpIGRwY20pOwogCWRwY20tPnN1YnN0cmVhbSA9IHN1YnN0cmVhbTsKIAlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBkcGNtOwogCXJ1bnRpbWUtPnByaXZhdGVfZnJlZSA9IHNuZF9jYXJkX2FzaWhwaV9ydW50aW1lX2ZyZWU7CkBAIC0yODMyLDE0ICsyODI5LDExIEBACiAvKiByZXN1bHRzIGluIC9kZXYvc25kL2h3QyNEMCBmaWxlIGZvciBlYWNoIGNhcmQgd2l0aCBpbmRleCAjCiAgICBhbHNvIC9wcm9jL2Fzb3VuZC9od2RlcCB3aWxsIGNvbnRhaW4gJyMtMDA6IGFzaWhwaSAoSFBJKSBmb3IgZWFjaCBjYXJkJwogKi8KLXN0YXRpYyBpbnQgc25kX2FzaWhwaV9ocGlfbmV3KHN0cnVjdCBzbmRfY2FyZF9hc2locGkgKmFzaWhwaSwKLQkJCSAgICAgIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfaHdkZXAgKipyaHdkZXApCitzdGF0aWMgaW50IHNuZF9hc2locGlfaHBpX25ldyhzdHJ1Y3Qgc25kX2NhcmRfYXNpaHBpICphc2locGksIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9od2RlcCAqaHc7CiAJaW50IGVycjsKIAotCWlmIChyaHdkZXApCi0JCSpyaHdkZXAgPSBOVUxMOwogCWVyciA9IHNuZF9od2RlcF9uZXcoYXNpaHBpLT5jYXJkLCAiSFBJIiwgZGV2aWNlLCAmaHcpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMjg0OSw4ICsyODQzLDYgQEAKIAlody0+b3BzLmlvY3RsID0gc25kX2FzaWhwaV9ocGlfaW9jdGw7CiAJaHctPm9wcy5yZWxlYXNlID0gc25kX2FzaWhwaV9ocGlfcmVsZWFzZTsKIAlody0+cHJpdmF0ZV9kYXRhID0gYXNpaHBpOwotCWlmIChyaHdkZXApCi0JCSpyaHdkZXAgPSBodzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjk5Myw3ICsyOTg1LDcgQEAKIAogCS8qIGFsd2F5cyBjcmVhdGUsIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGR5bmFtaWNhbGx5CiAJICAgIGJ5IGVuYWJsZV9od2RlcCAgbW9kdWxlIHBhcmFtKi8KLQlzbmRfYXNpaHBpX2hwaV9uZXcoYXNpaHBpLCAwLCBOVUxMKTsKKwlzbmRfYXNpaHBpX2hwaV9uZXcoYXNpaHBpLCAwKTsKIAogCXN0cmNweShjYXJkLT5kcml2ZXIsICJBU0lIUEkiKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGk2MDAwLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaTYwMDAuYwppbmRleCAyNDE0ZDdhLi4yZDYzNjQ4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaTYwMDAuYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaTYwMDAuYwpAQCAtNDcsNyArNDcsNyBAQAogCiAvKiBvcGVyYXRpb25hbC9tZXNzYWdpbmcgZXJyb3JzICovCiAjZGVmaW5lIEhQSTYwMDBfRVJST1JfTVNHX1JFU1BfSURMRV9USU1FT1VUICAgICAgICAgICAgIDkwMQotCisjZGVmaW5lIEhQSTYwMDBfRVJST1JfUkVTUF9HRVRfTEVOICAgICAgICAgICAgICAgICAgICAgIDkwMgogI2RlZmluZSBIUEk2MDAwX0VSUk9SX01TR19SRVNQX0dFVF9SRVNQX0FDSyAgICAgICAgICAgICA5MDMKICNkZWZpbmUgSFBJNjAwMF9FUlJPUl9NU0dfR0VUX0FEUiAgICAgICAgICAgICAgICAgICAgICAgOTA0CiAjZGVmaW5lIEhQSTYwMDBfRVJST1JfUkVTUF9HRVRfQURSICAgICAgICAgICAgICAgICAgICAgIDkwNQpAQCAtMTM2NSw3ICsxMzY1LDEwIEBACiAJCWxlbmd0aCA9IGhwaV9yZWFkX3dvcmQocGRvLCBIUElfSElGX0FERFIobGVuZ3RoKSk7CiAJfSB3aGlsZSAoaHBpNjAwMF9jaGVja19QQ0kyMDQwX2Vycm9yX2ZsYWcocGFvLCBINlJFQUQpICYmIC0tdGltZW91dCk7CiAJaWYgKCF0aW1lb3V0KQotCQlsZW5ndGggPSBzaXplb2Yoc3RydWN0IGhwaV9yZXNwb25zZSk7CisJCXJldHVybiBIUEk2MDAwX0VSUk9SX1JFU1BfR0VUX0xFTjsKKworCWlmIChsZW5ndGggPiBwaHItPnNpemUpCisJCXJldHVybiBIUElfRVJST1JfUkVTUE9OU0VfQlVGRkVSX1RPT19TTUFMTDsKIAogCS8qIGdldCB0aGUgcmVzcG9uc2UgKi8KIAlwX2RhdGEgPSAodTMyICopcGhyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2FzaWhwaS9ocGlvY3RsLmMgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaW9jdGwuYwppbmRleCA2YWE2NzdlLi42NjEwYmQwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXNpaHBpL2hwaW9jdGwuYworKysgYi9zb3VuZC9wY2kvYXNpaHBpL2hwaW9jdGwuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTUzLDYgKzE1Myw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCXJlc19tYXhfc2l6ZSA9IG1pbl90KHNpemVfdCwgcmVzX21heF9zaXplLCBzaXplb2YoKmhyKSk7CisKIAlzd2l0Y2ggKGhtLT5oLmZ1bmN0aW9uKSB7CiAJY2FzZSBIUElfU1VCU1lTX0NSRUFURV9BREFQVEVSOgogCWNhc2UgSFBJX0FEQVBURVJfREVMRVRFOgpAQCAtNTM5LDEwICs1NDEsOCBAQAogCWhwaV9zZW5kX3JlY3ZfZXgoJmhtLCAmaHIsIEhPV05FUl9LRVJORUwpOwogCiAJLyogdW5tYXAgUENJIG1lbW9yeSBzcGFjZSwgbWFwcGVkIGR1cmluZyBkZXZpY2UgaW5pdC4gKi8KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEhQSV9NQVhfQURBUFRFUl9NRU1fU1BBQ0VTOyBpZHgrKykgewotCQlpZiAocGNpLmFwX21lbV9iYXNlW2lkeF0pCi0JCQlpb3VubWFwKHBjaS5hcF9tZW1fYmFzZVtpZHhdKTsKLQl9CisJZm9yIChpZHggPSAwOyBpZHggPCBIUElfTUFYX0FEQVBURVJfTUVNX1NQQUNFUzsgKytpZHgpCisJCWlvdW5tYXAocGNpLmFwX21lbV9iYXNlW2lkeF0pOwogCiAJaWYgKHBhLT5pcnEpCiAJCWZyZWVfaXJxKHBhLT5pcnEsIHBhKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHAuYyBiL3NvdW5kL3BjaS9hdGlpeHAuYwppbmRleCA5YzFjNDQ1Li5kNWYxNWM5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cC5jCkBAIC0xOSw3ICsxOSw3IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTQ3NCw3ICsxNDc0LDYgQEAKICAqLwogc3RhdGljIGludCBzbmRfYXRpaXhwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGF0aWl4cCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpbnQgaTsKQEAgLTE0OTIsMjkgKzE0OTEsMTUgQEAKIAkJc25kX2FjOTdfc3VzcGVuZChjaGlwLT5hYzk3W2ldKTsKIAlzbmRfYXRpaXhwX2FjbGlua19kb3duKGNoaXApOwogCXNuZF9hdGlpeHBfY2hpcF9zdG9wKGNoaXApOwotCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0JcGNpX3NhdmVfc3RhdGUocGNpKTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfYXRpaXhwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgYXRpaXhwICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCBpOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKLQkJZGV2X2VycihkZXYsICJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsIGRpc2FibGluZyBkZXZpY2VcbiIpOwotCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcGNpX3NldF9tYXN0ZXIocGNpKTsKLQogCXNuZF9hdGlpeHBfYWNsaW5rX3Jlc2V0KGNoaXApOwogCXNuZF9hdGlpeHBfY2hpcF9zdGFydChjaGlwKTsKIApAQCAtMTU4NSw4ICsxNTcwLDcgQEAKICAgICAgIF9faHdfZW5kOgogCWlmIChjaGlwLT5pcnEgPj0gMCkKIAkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKLQlpZiAoY2hpcC0+cmVtYXBfYWRkcikKLQkJaW91bm1hcChjaGlwLT5yZW1hcF9hZGRyKTsKKwlpb3VubWFwKGNoaXAtPnJlbWFwX2FkZHIpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKIAlrZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYyBiL3NvdW5kL3BjaS9hdGlpeHBfbW9kZW0uYwppbmRleCBiMmY2M2UwLi4wYTM4ZTA4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYXRpaXhwX21vZGVtLmMKKysrIGIvc291bmQvcGNpL2F0aWl4cF9tb2RlbS5jCkBAIC0xOSw3ICsxOSw3IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTEyMCw3ICsxMTIwLDYgQEAKICAqLwogc3RhdGljIGludCBzbmRfYXRpaXhwX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGF0aWl4cF9tb2RlbSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpbnQgaTsKQEAgLTExMzIsMjkgKzExMzEsMTUgQEAKIAkJc25kX2FjOTdfc3VzcGVuZChjaGlwLT5hYzk3W2ldKTsKIAlzbmRfYXRpaXhwX2FjbGlua19kb3duKGNoaXApOwogCXNuZF9hdGlpeHBfY2hpcF9zdG9wKGNoaXApOwotCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0JcGNpX3NhdmVfc3RhdGUocGNpKTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfYXRpaXhwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgYXRpaXhwX21vZGVtICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCBpOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKLQkJZGV2X2VycihkZXYsICJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsIGRpc2FibGluZyBkZXZpY2VcbiIpOwotCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcGNpX3NldF9tYXN0ZXIocGNpKTsKLQogCXNuZF9hdGlpeHBfYWNsaW5rX3Jlc2V0KGNoaXApOwogCXNuZF9hdGlpeHBfY2hpcF9zdGFydChjaGlwKTsKIApAQCAtMTIxMSw4ICsxMTk2LDcgQEAKICAgICAgIF9faHdfZW5kOgogCWlmIChjaGlwLT5pcnEgPj0gMCkKIAkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKLQlpZiAoY2hpcC0+cmVtYXBfYWRkcikKLQkJaW91bm1hcChjaGlwLT5yZW1hcF9hZGRyKTsKKwlpb3VubWFwKGNoaXAtPnJlbWFwX2FkZHIpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMoY2hpcC0+cGNpKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UoY2hpcC0+cGNpKTsKIAlrZnJlZShjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmggYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5oCmluZGV4IDNhOGZlZmUuLmJjYzY0OGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmgKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuaApAQCAtMTcsOSArMTcsOCBAQAogI2lmbmRlZiBfX1NPVU5EX0FVODhYMF9ICiAjZGVmaW5lIF9fU09VTkRfQVU4OFgwX0gKIAotI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CkBAIC0yNyw3ICsyNiw2IEBACiAjaW5jbHVkZSA8c291bmQvaHdkZXAuaD4KICNpbmNsdWRlIDxzb3VuZC9hYzk3X2NvZGVjLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+Ci0jZW5kaWYKIAogI2lmbmRlZiBDSElQX0FVODgyMAogI2luY2x1ZGUgImF1ODh4MF9lcS5oIgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jIGIvc291bmQvcGNpL2F3Mi9hdzItYWxzYS5jCmluZGV4IGUxY2YwMTkuLjhkMmZlZTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdzIvYXcyLWFsc2EuYworKysgYi9zb3VuZC9wY2kvYXcyL2F3Mi1hbHNhLmMKQEAgLTIyOSw5ICsyMjksNyBAQAogCWlmIChjaGlwLT5pcnEgPj0gMCkKIAkJZnJlZV9pcnEoY2hpcC0+aXJxLCAodm9pZCAqKWNoaXApOwogCS8qIHJlbGVhc2UgdGhlIGkvbyBwb3J0cyAmIG1lbW9yeSAqLwotCWlmIChjaGlwLT5pb2Jhc2VfdmlydCkKLQkJaW91bm1hcChjaGlwLT5pb2Jhc2VfdmlydCk7Ci0KKwlpb3VubWFwKGNoaXAtPmlvYmFzZV92aXJ0KTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKGNoaXAtPnBjaSk7CiAJLyogZGlzYWJsZSB0aGUgUENJIGVudHJ5ICovCiAJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXcyL2F3Mi1zYWE3MTQ2LmMgYi9zb3VuZC9wY2kvYXcyL2F3Mi1zYWE3MTQ2LmMKaW5kZXggNmQyNGU5NS4uMWQ3ODkwNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F3Mi9hdzItc2FhNzE0Ni5jCisrKyBiL3NvdW5kL3BjaS9hdzIvYXcyLXNhYTcxNDYuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2F6dDMzMjguYyBiL3NvdW5kL3BjaS9henQzMzI4LmMKaW5kZXggZmRiYjljMC4uYTQwYTJiNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F6dDMzMjguYworKysgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCkBAIC0xNzksNyArMTc5LDcgQEAKICAqICAtIHVzZSBNTUlPIChtZW1vcnktbWFwcGVkIEkvTyk/IFNsaWdodGx5IGZhc3RlciBhY2Nlc3MsIGUuZy4gZm9yIGdhbWVwb3J0LgogICovCiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9idWcuaD4gLyogV0FSTl9PTkNFICovCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0yNjk0LDcgKzI2OTQsNiBAQAogc3RhdGljIGludAogc25kX2F6ZjMzMjhfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc25kX2F6ZjMzMjggKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJdTE2ICpzYXZlZF9yZWdzX2N0cmxfdTE2OwpAQCAtMjcyMCwyOSArMjcxOSwxNSBAQAogCQlBUlJBWV9TSVpFKGNoaXAtPnNhdmVkX3JlZ3NfbXB1KSwgY2hpcC0+c2F2ZWRfcmVnc19tcHUpOwogCXNuZF9hemYzMzI4X3N1c3BlbmRfcmVncyhjaGlwLCBjaGlwLT5vcGwzX2lvLAogCQlBUlJBWV9TSVpFKGNoaXAtPnNhdmVkX3JlZ3Nfb3BsMyksIGNoaXAtPnNhdmVkX3JlZ3Nfb3BsMyk7Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKLQlwY2lfc2F2ZV9zdGF0ZShwY2kpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50CiBzbmRfYXpmMzMyOF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJY29uc3Qgc3RydWN0IHNuZF9hemYzMzI4ICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKLQkJZGV2X2VycihkZXYsICJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsIGRpc2FibGluZyBkZXZpY2VcbiIpOwotCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcGNpX3NldF9tYXN0ZXIocGNpKTsKLQogCXNuZF9hemYzMzI4X3Jlc3VtZV9yZWdzKGNoaXAsIGNoaXAtPnNhdmVkX3JlZ3NfZ2FtZSwgY2hpcC0+Z2FtZV9pbywKIAkJCQkJQVJSQVlfU0laRShjaGlwLT5zYXZlZF9yZWdzX2dhbWUpKTsKIAlzbmRfYXpmMzMyOF9yZXN1bWVfcmVncyhjaGlwLCBjaGlwLT5zYXZlZF9yZWdzX21wdSwgY2hpcC0+bXB1X2lvLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2J0ODd4LmMgYi9zb3VuZC9wY2kvYnQ4N3guYwppbmRleCAwNThiOTk3Li41OTI1YjcxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvYnQ4N3guYworKysgYi9zb3VuZC9wY2kvYnQ4N3guYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CkBAIC02OTAsOCArNjkwLDcgQEAKIAkJc25kX2J0ODd4X3N0b3AoY2hpcCk7CiAJaWYgKGNoaXAtPmlycSA+PSAwKQogCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOwotCWlmIChjaGlwLT5tbWlvKQotCQlpb3VubWFwKGNoaXAtPm1taW8pOworCWlvdW5tYXAoY2hpcC0+bW1pbyk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhjaGlwLT5wY2kpOwogCXBjaV9kaXNhYmxlX2RldmljZShjaGlwLT5wY2kpOwogCWtmcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWFpbi5jCmluZGV4IDk2YWYzMzkuLmRkNzViNzUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21haW4uYworKysgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9tYWluLmMKQEAgLTE5MTAsNyArMTkxMCw2IEBACiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgaW50IHNuZF9jYTAxMDZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhMDEwNiAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpbnQgaTsKQEAgLTE5MjMsMzAgKzE5MjIsMTUgQEAKIAlzbmRfY2EwMTA2X21peGVyX3N1c3BlbmQoY2hpcCk7CiAKIAljYTAxMDZfc3RvcF9jaGlwKGNoaXApOwotCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0JcGNpX3NhdmVfc3RhdGUocGNpKTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfY2EwMTA2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhMDEwNiAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpbnQgaTsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0KLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKLQkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JcGNpX3NldF9tYXN0ZXIocGNpKTsKLQogCWNhMDEwNl9pbml0X2NoaXAoY2hpcCwgMSk7CiAKIAlpZiAoY2hpcC0+ZGV0YWlscy0+YWM5NykKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21peGVyLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9taXhlci5jCmluZGV4IDY4YzBlYjAuLjAyNTgwNWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X21peGVyLmMKKysrIGIvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfbWl4ZXIuYwpAQCAtNzAsNyArNzAsNyBAQAogI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgImNhMDEwNi5oIgogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9wcm9jLmMgYi9zb3VuZC9wY2kvY2EwMTA2L2NhMDEwNl9wcm9jLmMKaW5kZXggNGY5YzI4Mi4uMmM1YzI4YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NhMDEwNi9jYTAxMDZfcHJvYy5jCisrKyBiL3NvdW5kL3BjaS9jYTAxMDYvY2EwMTA2X3Byb2MuYwpAQCAtNjQsMTMgKzY0LDEzIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL2FjOTdfY29kZWMuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgImNhMDEwNi5oIgogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY21pcGNpLmMgYi9zb3VuZC9wY2kvY21pcGNpLmMKaW5kZXggODVlZDQwMy4uMWQwZjJjYSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NtaXBjaS5jCisrKyBiL3NvdW5kL3BjaS9jbWlwY2kuYwpAQCAtMjAsNyArMjAsNyBAQAogLyogRG9lcyBub3Qgd29yay4gV2FybmluZyBtYXkgYmxvY2sgc3lzdGVtIGluIGNhcHR1cmUgbW9kZSAqLwogLyogI2RlZmluZSBVU0VfVkFSNDhLUkFURSAqLwogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTMzNDcsNyArMzM0Nyw2IEBACiAKIHN0YXRpYyBpbnQgc25kX2NtaXBjaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBjbWlwY2kgKmNtID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCBpOwpAQCAtMzM2NiwyOSArMzM2NSwxNSBAQAogCiAJLyogZGlzYWJsZSBpbnRzICovCiAJc25kX2NtaXBjaV93cml0ZShjbSwgQ01fUkVHX0lOVF9ITERDTFIsIDApOwotCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0JcGNpX3NhdmVfc3RhdGUocGNpKTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfY21pcGNpX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgY21pcGNpICpjbSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpbnQgaTsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCBkaXNhYmxpbmcgZGV2aWNlXG4iKTsKLQkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXBjaV9zZXRfbWFzdGVyKHBjaSk7Ci0KIAkvKiByZXNldCAvIGluaXRpYWxpemUgdG8gYSBzYW5lIHN0YXRlICovCiAJc25kX2NtaXBjaV93cml0ZShjbSwgQ01fUkVHX0lOVF9ITERDTFIsIDApOwogCXNuZF9jbWlwY2lfY2hfcmVzZXQoY20sIENNX0NIX1BMQVkpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDI4MS5jIGIvc291bmQvcGNpL2NzNDI4MS5jCmluZGV4IDRjNDliNWMuLmMyOTZmZDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQyODEuYworKysgYi9zb3VuZC9wY2kvY3M0MjgxLmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC05NzMsMTQgKzk3MywxMSBAQAogCS5wb2ludGVyID0Jc25kX2NzNDI4MV9wb2ludGVyLAogfTsKIAotc3RhdGljIGludCBzbmRfY3M0MjgxX3BjbShzdHJ1Y3QgY3M0MjgxICpjaGlwLCBpbnQgZGV2aWNlLAotCQkJICBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCitzdGF0aWMgaW50IHNuZF9jczQyODFfcGNtKHN0cnVjdCBjczQyODEgKmNoaXAsIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgZXJyOwogCi0JaWYgKHJwY20pCi0JCSpycGNtID0gTlVMTDsKIAllcnIgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCAiQ1M0MjgxIiwgZGV2aWNlLCAxLCAxLCAmcGNtKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTk5Niw4ICs5OTMsNiBAQAogCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCiAJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwgNjQqMTAyNCwgNTEyKjEwMjQpOwogCi0JaWYgKHJwY20pCi0JCSpycGNtID0gcGNtOwogCXJldHVybiAwOwogfQogCkBAIC0xMzIxLDEwICsxMzE2LDggQEAKIAogCWlmIChjaGlwLT5pcnEgPj0gMCkKIAkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKLQlpZiAoY2hpcC0+YmEwKQotCQlpb3VubWFwKGNoaXAtPmJhMCk7Ci0JaWYgKGNoaXAtPmJhMSkKLQkJaW91bm1hcChjaGlwLT5iYTEpOworCWlvdW5tYXAoY2hpcC0+YmEwKTsKKwlpb3VubWFwKGNoaXAtPmJhMSk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhjaGlwLT5wY2kpOwogCXBjaV9kaXNhYmxlX2RldmljZShjaGlwLT5wY2kpOwogCkBAIC0xNzg4LDE0ICsxNzgxLDExIEBACiAJLnRyaWdnZXIgPQlzbmRfY3M0MjgxX21pZGlfaW5wdXRfdHJpZ2dlciwKIH07CiAKLXN0YXRpYyBpbnQgc25kX2NzNDI4MV9taWRpKHN0cnVjdCBjczQyODEgKmNoaXAsIGludCBkZXZpY2UsCi0JCQkgICBzdHJ1Y3Qgc25kX3Jhd21pZGkgKipycmF3bWlkaSkKK3N0YXRpYyBpbnQgc25kX2NzNDI4MV9taWRpKHN0cnVjdCBjczQyODEgKmNoaXAsIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKIAlpbnQgZXJyOwogCi0JaWYgKHJyYXdtaWRpKQotCQkqcnJhd21pZGkgPSBOVUxMOwogCWlmICgoZXJyID0gc25kX3Jhd21pZGlfbmV3KGNoaXAtPmNhcmQsICJDUzQyODEiLCBkZXZpY2UsIDEsIDEsICZybWlkaSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlzdHJjcHkocm1pZGktPm5hbWUsICJDUzQyODEiKTsKQEAgLTE4MDQsOCArMTc5NCw2IEBACiAJcm1pZGktPmluZm9fZmxhZ3MgfD0gU05EUlZfUkFXTUlESV9JTkZPX09VVFBVVCB8IFNORFJWX1JBV01JRElfSU5GT19JTlBVVCB8IFNORFJWX1JBV01JRElfSU5GT19EVVBMRVg7CiAJcm1pZGktPnByaXZhdGVfZGF0YSA9IGNoaXA7CiAJY2hpcC0+cm1pZGkgPSBybWlkaTsKLQlpZiAocnJhd21pZGkpCi0JCSpycmF3bWlkaSA9IHJtaWRpOwogCXJldHVybiAwOwogfQogCkBAIC0xOTQxLDExICsxOTI5LDExIEBACiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CiAJfQotCWlmICgoZXJyID0gc25kX2NzNDI4MV9wY20oY2hpcCwgMCwgTlVMTCkpIDwgMCkgeworCWlmICgoZXJyID0gc25kX2NzNDI4MV9wY20oY2hpcCwgMCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlpZiAoKGVyciA9IHNuZF9jczQyODFfbWlkaShjaGlwLCAwLCBOVUxMKSkgPCAwKSB7CisJaWYgKChlcnIgPSBzbmRfY3M0MjgxX21pZGkoY2hpcCwgMCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTIwMDgsNyArMTk5Niw2IEBACiAKIHN0YXRpYyBpbnQgY3M0MjgxX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGNzNDI4MSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAl1MzIgdWxDTEs7CkBAIC0yMDQ3LDMwICsyMDM0LDE2IEBACiAJdWxDTEsgPSBzbmRfY3M0MjgxX3BlZWtCQTAoY2hpcCwgQkEwX0NMS0NSMSk7CiAJdWxDTEsgJj0gfkNMS0NSMV9DS1JBOwogCXNuZF9jczQyODFfcG9rZUJBMChjaGlwLCBCQTBfQ0xLQ1IxLCB1bENMSyk7Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKLQlwY2lfc2F2ZV9zdGF0ZShwY2kpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNzNDI4MV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGNzNDI4MSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgaTsKIAl1MzIgdWxDTEs7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgewotCQlkZXZfZXJyKGRldiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgZGlzYWJsaW5nIGRldmljZVxuIik7Ci0JCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlwY2lfc2V0X21hc3RlcihwY2kpOwotCiAJdWxDTEsgPSBzbmRfY3M0MjgxX3BlZWtCQTAoY2hpcCwgQkEwX0NMS0NSMSk7CiAJdWxDTEsgfD0gQ0xLQ1IxX0NLUkE7CiAJc25kX2NzNDI4MV9wb2tlQkEwKGNoaXAsIEJBMF9DTEtDUjEsIHVsQ0xLKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5jCmluZGV4IDZhNjg1OGMuLjY1NWZiZWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmMKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguYwpAQCAtMTAwLDE2ICsxMDAsMTYgQEAKIAl9CiAJY2FyZC0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKIAljaGlwLT5hY2NlcHRfdmFsaWQgPSBtbWFwX3ZhbGlkW2Rldl07Ci0JaWYgKChlcnIgPSBzbmRfY3M0Nnh4X3BjbShjaGlwLCAwLCBOVUxMKSkgPCAwKSB7CisJaWYgKChlcnIgPSBzbmRfY3M0Nnh4X3BjbShjaGlwLCAwKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CiAJfQogI2lmZGVmIENPTkZJR19TTkRfQ1M0NlhYX05FV19EU1AKLQlpZiAoKGVyciA9IHNuZF9jczQ2eHhfcGNtX3JlYXIoY2hpcCwxLCBOVUxMKSkgPCAwKSB7CisJaWYgKChlcnIgPSBzbmRfY3M0Nnh4X3BjbV9yZWFyKGNoaXAsIDEpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JaWYgKChlcnIgPSBzbmRfY3M0Nnh4X3BjbV9pZWM5NTgoY2hpcCwyLE5VTEwpKSA8IDApIHsKKwlpZiAoKGVyciA9IHNuZF9jczQ2eHhfcGNtX2llYzk1OChjaGlwLCAyKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTIwLDEzICsxMjAsMTMgQEAKIAl9CiAjaWZkZWYgQ09ORklHX1NORF9DUzQ2WFhfTkVXX0RTUAogCWlmIChjaGlwLT5ucl9hYzk3X2NvZGVjcyA9PTIpIHsKLQkJaWYgKChlcnIgPSBzbmRfY3M0Nnh4X3BjbV9jZW50ZXJfbGZlKGNoaXAsMyxOVUxMKSkgPCAwKSB7CisJCWlmICgoZXJyID0gc25kX2NzNDZ4eF9wY21fY2VudGVyX2xmZShjaGlwLCAzKSkgPCAwKSB7CiAJCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KICNlbmRpZgotCWlmICgoZXJyID0gc25kX2NzNDZ4eF9taWRpKGNoaXAsIDAsIE5VTEwpKSA8IDApIHsKKwlpZiAoKGVyciA9IHNuZF9jczQ2eHhfbWlkaShjaGlwLCAwKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguaCBiL3NvdW5kL3BjaS9jczQ2eHgvY3M0Nnh4LmgKaW5kZXggYzQ5YTA4Mi4uOWM5Zjg5YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHguaAorKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eC5oCkBAIC0xNzM3LDEyICsxNzM3LDEyIEBACiAJCSAgICAgIHN0cnVjdCBzbmRfY3M0Nnh4ICoqcmNvZGVjKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBzbmRfY3M0Nnh4X3BtOwogCi1pbnQgc25kX2NzNDZ4eF9wY20oc3RydWN0IHNuZF9jczQ2eHggKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSk7Ci1pbnQgc25kX2NzNDZ4eF9wY21fcmVhcihzdHJ1Y3Qgc25kX2NzNDZ4eCAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKLWludCBzbmRfY3M0Nnh4X3BjbV9pZWM5NTgoc3RydWN0IHNuZF9jczQ2eHggKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSk7Ci1pbnQgc25kX2NzNDZ4eF9wY21fY2VudGVyX2xmZShzdHJ1Y3Qgc25kX2NzNDZ4eCAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKK2ludCBzbmRfY3M0Nnh4X3BjbShzdHJ1Y3Qgc25kX2NzNDZ4eCAqY2hpcCwgaW50IGRldmljZSk7CitpbnQgc25kX2NzNDZ4eF9wY21fcmVhcihzdHJ1Y3Qgc25kX2NzNDZ4eCAqY2hpcCwgaW50IGRldmljZSk7CitpbnQgc25kX2NzNDZ4eF9wY21faWVjOTU4KHN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwLCBpbnQgZGV2aWNlKTsKK2ludCBzbmRfY3M0Nnh4X3BjbV9jZW50ZXJfbGZlKHN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwLCBpbnQgZGV2aWNlKTsKIGludCBzbmRfY3M0Nnh4X21peGVyKHN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwLCBpbnQgc3BkaWZfZGV2aWNlKTsKLWludCBzbmRfY3M0Nnh4X21pZGkoc3RydWN0IHNuZF9jczQ2eHggKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcmF3bWlkaSAqKnJtaWRpKTsKK2ludCBzbmRfY3M0Nnh4X21pZGkoc3RydWN0IHNuZF9jczQ2eHggKmNoaXAsIGludCBkZXZpY2UpOwogaW50IHNuZF9jczQ2eHhfc3RhcnRfZHNwKHN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwKTsKIGludCBzbmRfY3M0Nnh4X2dhbWVwb3J0KHN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNDZ4eC9jczQ2eHhfbGliLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwppbmRleCAzMmI0NGYyLi44ZDc0MDA0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYworKysgYi9zb3VuZC9wY2kvY3M0Nnh4L2NzNDZ4eF9saWIuYwpAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgpAQCAtNjUsOCArNjYsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlICJjczQ2eHguaCIKIAotI2luY2x1ZGUgPGFzbS9pby5oPgotCiAjaW5jbHVkZSAiY3M0Nnh4X2xpYi5oIgogI2luY2x1ZGUgImRzcF9zcG9zLmgiCiAKQEAgLTE3NzgsMTMgKzE3NzcsMTEgQEAKICNkZWZpbmUgTUFYX1BMQVlCQUNLX0NIQU5ORUxTCTEKICNlbmRpZgogCi1pbnQgc25kX2NzNDZ4eF9wY20oc3RydWN0IHNuZF9jczQ2eHggKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK2ludCBzbmRfY3M0Nnh4X3BjbShzdHJ1Y3Qgc25kX2NzNDZ4eCAqY2hpcCwgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwogCWlmICgoZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgIkNTNDZ4eCIsIGRldmljZSwgTUFYX1BMQVlCQUNLX0NIQU5ORUxTLCAxLCAmcGNtKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0xODAxLDIzICsxNzk4LDE2IEBACiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKIAkJCQkJICAgICAgc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLCA2NCoxMDI0LCAyNTYqMTAyNCk7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBwY207Ci0KIAlyZXR1cm4gMDsKIH0KIAogCiAjaWZkZWYgQ09ORklHX1NORF9DUzQ2WFhfTkVXX0RTUAotaW50IHNuZF9jczQ2eHhfcGNtX3JlYXIoc3RydWN0IHNuZF9jczQ2eHggKmNoaXAsIGludCBkZXZpY2UsCi0JCQlzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCitpbnQgc25kX2NzNDZ4eF9wY21fcmVhcihzdHJ1Y3Qgc25kX2NzNDZ4eCAqY2hpcCwgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwotCiAJaWYgKChlcnIgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCAiQ1M0Nnh4IC0gUmVhciIsIGRldmljZSwgTUFYX1BMQVlCQUNLX0NIQU5ORUxTLCAwLCAmcGNtKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0xODMzLDIxICsxODIzLDE0IEBACiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKIAkJCQkJICAgICAgc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLCA2NCoxMDI0LCAyNTYqMTAyNCk7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBwY207Ci0KIAlyZXR1cm4gMDsKIH0KIAotaW50IHNuZF9jczQ2eHhfcGNtX2NlbnRlcl9sZmUoc3RydWN0IHNuZF9jczQ2eHggKmNoaXAsIGludCBkZXZpY2UsCi0JCQkgICAgICBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCitpbnQgc25kX2NzNDZ4eF9wY21fY2VudGVyX2xmZShzdHJ1Y3Qgc25kX2NzNDZ4eCAqY2hpcCwgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwotCiAJaWYgKChlcnIgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCAiQ1M0Nnh4IC0gQ2VudGVyIExGRSIsIGRldmljZSwgTUFYX1BMQVlCQUNLX0NIQU5ORUxTLCAwLCAmcGNtKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0xODYzLDIxICsxODQ2LDE0IEBACiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKIAkJCQkJICAgICAgc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLCA2NCoxMDI0LCAyNTYqMTAyNCk7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBwY207Ci0KIAlyZXR1cm4gMDsKIH0KIAotaW50IHNuZF9jczQ2eHhfcGNtX2llYzk1OChzdHJ1Y3Qgc25kX2NzNDZ4eCAqY2hpcCwgaW50IGRldmljZSwKLQkJCSAgc3RydWN0IHNuZF9wY20gKipycGNtKQoraW50IHNuZF9jczQ2eHhfcGNtX2llYzk1OChzdHJ1Y3Qgc25kX2NzNDZ4eCAqY2hpcCwgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwotCiAJaWYgKChlcnIgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCAiQ1M0Nnh4IC0gSUVDOTU4IiwgZGV2aWNlLCAxLCAwLCAmcGNtKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0xODkzLDkgKzE4NjksNiBAQAogCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCiAJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwgNjQqMTAyNCwgMjU2KjEwMjQpOwogCi0JaWYgKHJwY20pCi0JCSpycGNtID0gcGNtOwotCiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKQEAgLTI3MjQsMTMgKzI2OTcsMTEgQEAKIAkudHJpZ2dlciA9CXNuZF9jczQ2eHhfbWlkaV9pbnB1dF90cmlnZ2VyLAogfTsKIAotaW50IHNuZF9jczQ2eHhfbWlkaShzdHJ1Y3Qgc25kX2NzNDZ4eCAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9yYXdtaWRpICoqcnJhd21pZGkpCitpbnQgc25kX2NzNDZ4eF9taWRpKHN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwLCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBzbmRfcmF3bWlkaSAqcm1pZGk7CiAJaW50IGVycjsKIAotCWlmIChycmF3bWlkaSkKLQkJKnJyYXdtaWRpID0gTlVMTDsKIAlpZiAoKGVyciA9IHNuZF9yYXdtaWRpX25ldyhjaGlwLT5jYXJkLCAiQ1M0NlhYIiwgZGV2aWNlLCAxLCAxLCAmcm1pZGkpKSA8IDApCiAJCXJldHVybiBlcnI7CiAJc3RyY3B5KHJtaWRpLT5uYW1lLCAiQ1M0NlhYIik7CkBAIC0yNzM5LDggKzI3MTAsNiBAQAogCXJtaWRpLT5pbmZvX2ZsYWdzIHw9IFNORFJWX1JBV01JRElfSU5GT19PVVRQVVQgfCBTTkRSVl9SQVdNSURJX0lORk9fSU5QVVQgfCBTTkRSVl9SQVdNSURJX0lORk9fRFVQTEVYOwogCXJtaWRpLT5wcml2YXRlX2RhdGEgPSBjaGlwOwogCWNoaXAtPnJtaWRpID0gcm1pZGk7Ci0JaWYgKHJyYXdtaWRpKQotCQkqcnJhd21pZGkgPSBOVUxMOwogCXJldHVybiAwOwogfQogCkBAIC0yOTc5LDggKzI5NDgsOCBAQAogCiAJZm9yIChpZHggPSAwOyBpZHggPCA1OyBpZHgrKykgewogCQlzdHJ1Y3Qgc25kX2NzNDZ4eF9yZWdpb24gKnJlZ2lvbiA9ICZjaGlwLT5yZWdpb24uaWR4W2lkeF07Ci0JCWlmIChyZWdpb24tPnJlbWFwX2FkZHIpCi0JCQlpb3VubWFwKHJlZ2lvbi0+cmVtYXBfYWRkcik7CisKKwkJaW91bm1hcChyZWdpb24tPnJlbWFwX2FkZHIpOwogCQlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKHJlZ2lvbi0+cmVzb3VyY2UpOwogCX0KIApAQCAtMzgwNCw3ICszNzczLDYgQEAKIAogc3RhdGljIGludCBzbmRfY3M0Nnh4X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNuZF9jczQ2eHggKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaW50IGksIGFtcF9zYXZlZDsKQEAgLTM4MjksMTYgKzM3OTcsMTEgQEAKIAkvKiBkaXNhYmxlIENMS1JVTiAqLwogCWNoaXAtPmFjdGl2ZV9jdHJsKGNoaXAsIC1jaGlwLT5hbXBsaWZpZXIpOwogCWNoaXAtPmFtcGxpZmllciA9IGFtcF9zYXZlZDsgLyogcmVzdG9yZSB0aGUgc3RhdHVzICovCi0KLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKLQlwY2lfc2F2ZV9zdGF0ZShwY2kpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF9jczQ2eHhfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbmRfY3M0Nnh4ICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCBhbXBfc2F2ZWQ7CkBAIC0zODQ3LDE1ICszODEwLDYgQEAKICNlbmRpZgogCXVuc2lnbmVkIGludCB0bXA7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgewotCQlkZXZfZXJyKGRldiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgZGlzYWJsaW5nIGRldmljZVxuIik7Ci0JCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlwY2lfc2V0X21hc3RlcihwY2kpOwotCiAJYW1wX3NhdmVkID0gY2hpcC0+YW1wbGlmaWVyOwogCWNoaXAtPmFtcGxpZmllciA9IDA7CiAJY2hpcC0+YWN0aXZlX2N0cmwoY2hpcCwgMSk7IC8qIGZvcmNlIHRvIG9uICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmMgYi9zb3VuZC9wY2kvY3M0Nnh4L2RzcF9zcG9zLmMKaW5kZXggMWM0YTBmYi4uNWM5OWVmYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvcy5jCisrKyBiL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3MuYwpAQCAtMjAsNyArMjAsNyBAQAogICovCiAKIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jczQ2eHgvZHNwX3Nwb3Nfc2NiX2xpYi5jIGIvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvc19zY2JfbGliLmMKaW5kZXggODI4NGJjOS4uMmM5MGMwYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvc19zY2JfbGliLmMKKysrIGIvc291bmQvcGNpL2NzNDZ4eC9kc3Bfc3Bvc19zY2JfbGliLmMKQEAgLTIxLDcgKzIxLDcgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M1NTMwLmMgYi9zb3VuZC9wY2kvY3M1NTMwLmMKaW5kZXggYjEwMjU1MC4uMGE4Y2Y5NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2NzNTUzMC5jCisrKyBiL3NvdW5kL3BjaS9jczU1MzAuYwpAQCAtMjIzLDcgKzIyMyw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JZXJyID0gc25kX3NiMTZkc3BfcGNtKGNoaXAtPnNiLCAwLCAmY2hpcC0+c2ItPnBjbSk7CisJZXJyID0gc25kX3NiMTZkc3BfcGNtKGNoaXAtPnNiLCAwKTsKIAlpZiAoZXJyIDwgMCkgewogCQlkZXZfZXJyKGNhcmQtPmRldiwgIkNvdWxkIG5vdCBjcmVhdGUgUENNXG4iKTsKIAkJc25kX2NzNTUzMF9mcmVlKGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2NzNTUzNWF1ZGlvL2NzNTUzNWF1ZGlvLmMgYi9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYwppbmRleCAxNjI4OGU0Li44MDJjMzNmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYworKysgYi9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW8uYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAjaW5jbHVkZSA8c291bmQvcGNtLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3M1NTM1YXVkaW8vY3M1NTM1YXVkaW9fcG0uYyBiL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpb19wbS5jCmluZGV4IDM0Y2M2MDAuLjA2YWM1ZDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpb19wbS5jCisrKyBiL3NvdW5kL3BjaS9jczU1MzVhdWRpby9jczU1MzVhdWRpb19wbS5jCkBAIC01Nyw3ICs1Nyw2IEBACiAKIHN0YXRpYyBpbnQgc25kX2NzNTUzNWF1ZGlvX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGNzNTUzNWF1ZGlvICpjczU1MzVhdSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpbnQgaTsKQEAgLTcyLDM0ICs3MSwxNyBAQAogCX0KIAkvKiBzYXZlIGltcG9ydGFudCByZWdzLCB0aGVuIGRpc2FibGUgYWNsaW5rIGluIGh3ICovCiAJc25kX2NzNTUzNWF1ZGlvX3N0b3BfaGFyZHdhcmUoY3M1NTM1YXUpOwotCi0JaWYgKHBjaV9zYXZlX3N0YXRlKHBjaSkpIHsKLQkJZGV2X2VycihkZXYsICJwY2lfc2F2ZV9zdGF0ZSBmYWlsZWQhXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF9jczU1MzVhdWRpb19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGNzNTUzNWF1ZGlvICpjczU1MzVhdSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAl1MzIgdG1wOwogCWludCB0aW1lb3V0OwogCWludCBpOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKLQkJZGV2X2VycihkZXYsICJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsIGRpc2FibGluZyBkZXZpY2VcbiIpOwotCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcGNpX3NldF9tYXN0ZXIocGNpKTsKLQogCS8qIHNldCBMTktfV1JNX1JTVCB0byByZXNldCBBQyBsaW5rICovCiAJY3Nfd3JpdGVsKGNzNTUzNWF1LCBBQ0NfQ09ERUNfQ05UTCwgQUNDX0NPREVDX0NOVExfTE5LX1dSTV9SU1QpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvY3R4ZmkvY3RodzIwazEuYyBiL3NvdW5kL3BjaS9jdHhmaS9jdGh3MjBrMS5jCmluZGV4IGI0MjVhYTguLjFjYWM1NWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9jdHhmaS9jdGh3MjBrMS5jCisrKyBiL3NvdW5kL3BjaS9jdHhmaS9jdGh3MjBrMS5jCkBAIC0xOTg1LDEwICsxOTg1LDcgQEAKIAkJZnJlZV9pcnEoaHctPmlycSwgaHcpOwogCiAJaHctPmlycQk9IC0xOwotCi0JaWYgKGh3LT5tZW1fYmFzZSkKLQkJaW91bm1hcChody0+bWVtX2Jhc2UpOwotCisJaW91bm1hcChody0+bWVtX2Jhc2UpOwogCWh3LT5tZW1fYmFzZSA9IE5VTEw7CiAKIAlpZiAoaHctPmlvX2Jhc2UpCkBAIC0yMDk5LDIwICsyMDk2LDExIEBACiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGNpLCBVQUFfQ0ZHX1NQQUNFX0ZMQUcsIDB4MCk7CiAJfQogCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0JcGNpX3NhdmVfc3RhdGUocGNpKTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGh3X3Jlc3VtZShzdHJ1Y3QgaHcgKmh3LCBzdHJ1Y3QgY2FyZF9jb25mICppbmZvKQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSBody0+cGNpOwotCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQogCS8qIFJlLWluaXRpYWxpemUgY2FyZCBoYXJkd2FyZS4gKi8KIAlyZXR1cm4gaHdfY2FyZF9pbml0KGh3LCBpbmZvKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9jdHhmaS9jdGh3MjBrMi5jIGIvc291bmQvcGNpL2N0eGZpL2N0aHcyMGsyLmMKaW5kZXggMjUzODk5ZC4uOTU1YWQ4NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2N0eGZpL2N0aHcyMGsyLmMKKysrIGIvc291bmQvcGNpL2N0eGZpL2N0aHcyMGsyLmMKQEAgLTIxMTAsMTAgKzIxMTAsNyBAQAogCQlmcmVlX2lycShody0+aXJxLCBodyk7CiAKIAlody0+aXJxCT0gLTE7Ci0KLQlpZiAoaHctPm1lbV9iYXNlKQotCQlpb3VubWFwKGh3LT5tZW1fYmFzZSk7Ci0KKwlpb3VubWFwKGh3LT5tZW1fYmFzZSk7CiAJaHctPm1lbV9iYXNlID0gTlVMTDsKIAogCWlmIChody0+aW9fYmFzZSkKQEAgLTIyMDksMjQgKzIyMDYsMTIgQEAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHN0YXRpYyBpbnQgaHdfc3VzcGVuZChzdHJ1Y3QgaHcgKmh3KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSBody0+cGNpOwotCiAJaHdfY2FyZF9zdG9wKGh3KTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCXBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBod19yZXN1bWUoc3RydWN0IGh3ICpodywgc3RydWN0IGNhcmRfY29uZiAqaW5mbykKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gaHctPnBjaTsKLQotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0KIAkvKiBSZS1pbml0aWFsaXplIGNhcmQgaGFyZHdhcmUuICovCiAJcmV0dXJuIGh3X2NhcmRfaW5pdChodywgaW5mbyk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2RhcmxhMjAuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jCmluZGV4IDQ2MzI5NDYuLmM5NWRhNjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyMC5jCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KQEAgLTUxLDcgKzUyLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CiAjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZGFybGEyNC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0LmMKaW5kZXggZjgxYzgzOS4uMzAxM2I0ZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0LmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9kYXJsYTI0LmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgpAQCAtNTUsNyArNTYsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KICNpbmNsdWRlICJlY2hvYXVkaW8uaCIKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2cuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNobzNnLmMKaW5kZXggM2E1MzQ2Yy4uMWYzNGEwNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvM2cuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG8zZy5jCkBAIC01NCw2ICs1NCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KQEAgLTYzLDcgKzY0LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CiAjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCmluZGV4IDIxMjI4YWQuLmE5NjJkZTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwpAQCAtMTg3MiwxMiArMTg3Miw4IEBACiAJaWYgKGNoaXAtPmNvbW1fcGFnZSkKIAkJc25kX2RtYV9mcmVlX3BhZ2VzKCZjaGlwLT5jb21tcGFnZV9kbWFfYnVmKTsKIAotCWlmIChjaGlwLT5kc3BfcmVnaXN0ZXJzKQotCQlpb3VubWFwKGNoaXAtPmRzcF9yZWdpc3RlcnMpOwotCisJaW91bm1hcChjaGlwLT5kc3BfcmVnaXN0ZXJzKTsKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPmlvcmVzKTsKLQotCiAJcGNpX2Rpc2FibGVfZGV2aWNlKGNoaXAtPnBjaSk7CiAKIAkvKiByZWxlYXNlIGNoaXAgZGF0YSAqLwpAQCAtMjE2Miw3ICsyMTU4LDYgQEAKIAogc3RhdGljIGludCBzbmRfZWNob19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBlY2hvYXVkaW8gKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAogCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+YW5hbG9nX3BjbSk7CkBAIC0yMTg4LDkgKzIxODMsNiBAQAogCWNoaXAtPmRzcF9jb2RlID0gTlVMTDsKIAlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOwogCWNoaXAtPmlycSA9IC0xOwotCXBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIwNCw3ICsyMTk2LDYgQEAKIAl1MzIgcGlwZV9hbGxvY19tYXNrOwogCWludCBlcnI7CiAKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwogCWNvbW1wYWdlX2JhayA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBlY2hvYXVkaW8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoY29tbXBhZ2VfYmFrID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjAuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTIwLmMKaW5kZXggOWNiODFjNS4uNGZhMzJhMiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjAuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyMC5jCkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KQEAgLTU1LDcgKzU2LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+CiAjaW5jbHVkZSAiZWNob2F1ZGlvLmgiCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0LmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2dpbmEyNC5jCmluZGV4IDM1ZDNlNmUuLmIxYmNhY2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZ2luYTI0LmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9naW5hMjQuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CkBAIC02MSw3ICs2Miw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgogI2luY2x1ZGUgImVjaG9hdWRpby5oIgogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ28uYwppbmRleCA4ZDkxODQyLi4xNzVhZjliIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnby5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgpAQCAtNTMsNyArNTQsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KICNpbmNsdWRlICJlY2hvYXVkaW8uaCIKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kai5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29kai5jCmluZGV4IDI4OWNiOTYuLjhjNjAzMTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvZGouYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2RqLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgpAQCAtNTMsNyArNTQsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KICNpbmNsdWRlICJlY2hvYXVkaW8uaCIKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pby5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9pbmRpZ29pby5jCmluZGV4IDQwNWEzZjIuLmY3NjE4ZWQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vaW5kaWdvaW8uYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2luZGlnb2lvLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgpAQCAtNTQsNyArNTUsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KICNpbmNsdWRlICJlY2hvYXVkaW8uaCIKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTIwLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYwppbmRleCBiMzkyZGQ3Li4xMmU1ZDIxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjAuYwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CkBAIC02MSw3ICs2Miw2IEBACiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvcmF3bWlkaS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgogI2luY2x1ZGUgImVjaG9hdWRpby5oIgogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjQuYyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNC5jCmluZGV4IGJjN2Y3MzBiLi42ZTQwMjM3IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjQuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjQuYwpAQCAtNTQsNiArNTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CkBAIC02Myw3ICs2NCw2IEBACiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvcmF3bWlkaS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgogI2luY2x1ZGUgImVjaG9hdWRpby5oIgogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9taWEuYwppbmRleCAyN2E5YTZlLi4yZjc1NjJmIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pYS5jCisrKyBiL3NvdW5kL3BjaS9lY2hvYXVkaW8vbWlhLmMKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9pbmZvLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgpAQCAtNjIsNyArNjMsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Jhd21pZGkuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KICNpbmNsdWRlICJlY2hvYXVkaW8uaCIKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9taWRpLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pZGkuYwppbmRleCBkOTEzNzQ5Li5hOGZlNTgzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21pZGkuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21pZGkuYwpAQCAtMjU3LDkgKzI1Nyw4IEBACiAJc3Bpbl9sb2NrX2lycSgmY2hpcC0+bG9jayk7CiAJaWYgKHVwKSB7CiAJCWlmICghY2hpcC0+dGludXNlKSB7Ci0JCQlpbml0X3RpbWVyKCZjaGlwLT50aW1lcik7Ci0JCQljaGlwLT50aW1lci5mdW5jdGlvbiA9IHNuZF9lY2hvX21pZGlfb3V0cHV0X3dyaXRlOwotCQkJY2hpcC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWNoaXA7CisJCQlzZXR1cF90aW1lcigmY2hpcC0+dGltZXIsIHNuZF9lY2hvX21pZGlfb3V0cHV0X3dyaXRlLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyljaGlwKTsKIAkJCWNoaXAtPnRpbnVzZSA9IDE7CiAJCX0KIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9tb25hLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21vbmEuYwppbmRleCAzZDEzODc1Li4zNGQ0OTk0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZWNob2F1ZGlvL21vbmEuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL21vbmEuYwpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CkBAIC01OSw3ICs2MCw2IEBACiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2F0b21pYy5oPgogI2luY2x1ZGUgImVjaG9hdWRpby5oIgogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKaW5kZXggNGMxNzE2MzZlLi4zN2QwMjIwIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMS5jCkBAIC0xMzIsMTEgKzEzMiwxMSBAQAogCQlnb3RvIGVycm9yOwogCWNhcmQtPnByaXZhdGVfZGF0YSA9IGVtdTsKIAllbXUtPmRlbGF5X3BjbV9pcnEgPSBkZWxheV9wY21faXJxW2Rldl0gJiAweDFmOwotCWlmICgoZXJyID0gc25kX2VtdTEwazFfcGNtKGVtdSwgMCwgTlVMTCkpIDwgMCkKKwlpZiAoKGVyciA9IHNuZF9lbXUxMGsxX3BjbShlbXUsIDApKSA8IDApCiAJCWdvdG8gZXJyb3I7Ci0JaWYgKChlcnIgPSBzbmRfZW11MTBrMV9wY21fbWljKGVtdSwgMSwgTlVMTCkpIDwgMCkKKwlpZiAoKGVyciA9IHNuZF9lbXUxMGsxX3BjbV9taWMoZW11LCAxKSkgPCAwKQogCQlnb3RvIGVycm9yOwotCWlmICgoZXJyID0gc25kX2VtdTEwazFfcGNtX2VmeChlbXUsIDIsIE5VTEwpKSA8IDApCisJaWYgKChlcnIgPSBzbmRfZW11MTBrMV9wY21fZWZ4KGVtdSwgMikpIDwgMCkKIAkJZ290byBlcnJvcjsKIAkvKiBUaGlzIHN0b3JlcyB0aGUgcGVyaW9kcyB0YWJsZS4gKi8KIAlpZiAoZW11LT5jYXJkX2NhcGFiaWxpdGllcy0+Y2EwMTUxX2NoaXApIHsgLyogUDE2ViAqLwkKQEAgLTE1MSwxMCArMTUxLDEwIEBACiAJaWYgKChlcnIgPSBzbmRfZW11MTBrMV90aW1lcihlbXUsIDApKSA8IDApCiAJCWdvdG8gZXJyb3I7CiAKLQlpZiAoKGVyciA9IHNuZF9lbXUxMGsxX3BjbV9tdWx0aShlbXUsIDMsIE5VTEwpKSA8IDApCisJaWYgKChlcnIgPSBzbmRfZW11MTBrMV9wY21fbXVsdGkoZW11LCAzKSkgPCAwKQogCQlnb3RvIGVycm9yOwogCWlmIChlbXUtPmNhcmRfY2FwYWJpbGl0aWVzLT5jYTAxNTFfY2hpcCkgeyAvKiBQMTZWICovCi0JCWlmICgoZXJyID0gc25kX3AxNnZfcGNtKGVtdSwgNCwgTlVMTCkpIDwgMCkKKwkJaWYgKChlcnIgPSBzbmRfcDE2dl9wY20oZW11LCA0KSkgPCAwKQogCQkJZ290byBlcnJvcjsKIAl9CiAJaWYgKGVtdS0+YXVkaWd5KSB7CkBAIC0xNjQsNyArMTY0LDcgQEAKIAkJaWYgKChlcnIgPSBzbmRfZW11MTBrMV9taWRpKGVtdSkpIDwgMCkKIAkJCWdvdG8gZXJyb3I7CiAJfQotCWlmICgoZXJyID0gc25kX2VtdTEwazFfZng4MDEwX25ldyhlbXUsIDAsIE5VTEwpKSA8IDApCisJaWYgKChlcnIgPSBzbmRfZW11MTBrMV9meDgwMTBfbmV3KGVtdSwgMCkpIDwgMCkKIAkJZ290byBlcnJvcjsKICNpZmRlZiBFTkFCTEVfU1lOVEgKIAlpZiAoc25kX3NlcV9kZXZpY2VfbmV3KGNhcmQsIDEsIFNORFJWX1NFUV9ERVZfSURfRU1VMTBLMV9TWU5USCwKQEAgLTIxMCw3ICsyMTAsNiBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBzbmRfZW11MTBrMV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbmRfZW11MTBrMSAqZW11ID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCkBAIC0yMzIsMjggKzIzMSwxNCBAQAogCQlzbmRfcDE2dl9zdXNwZW5kKGVtdSk7CiAKIAlzbmRfZW11MTBrMV9kb25lKGVtdSk7Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKLQlwY2lfc2F2ZV9zdGF0ZShwY2kpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF9lbXUxMGsxX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc25kX2VtdTEwazEgKmVtdSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCBkaXNhYmxpbmcgZGV2aWNlXG4iKTsKLQkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXBjaV9zZXRfbWFzdGVyKHBjaSk7Ci0KIAlzbmRfZW11MTBrMV9yZXN1bWVfaW5pdChlbXUpOwogCXNuZF9lbXUxMGsxX2VmeF9yZXN1bWUoZW11KTsKIAlzbmRfYWM5N19yZXN1bWUoZW11LT5hYzk3KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXUxMGsxeC5jCmluZGV4IDE1OTMzZjkuLjZkMWI5OGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazF4LmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMXguYwpAQCAtODQ3LDE1ICs4NDcsMTMgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBpbnQgc25kX2VtdTEwazF4X3BjbShzdHJ1Y3QgZW11MTBrMXggKmVtdSwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKQorc3RhdGljIGludCBzbmRfZW11MTBrMXhfcGNtKHN0cnVjdCBlbXUxMGsxeCAqZW11LCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJY29uc3Qgc3RydWN0IHNuZF9wY21fY2htYXBfZWxlbSAqbWFwID0gTlVMTDsKIAlpbnQgZXJyOwogCWludCBjYXB0dXJlID0gMDsKICAgCi0JaWYgKHJwY20pCi0JCSpycGNtID0gTlVMTDsKIAlpZiAoZGV2aWNlID09IDApCiAJCWNhcHR1cmUgPSAxOwogCQpAQCAtODk2LDE1ICs4OTQsOCBAQAogCQkJCQkgICAgICBzbmRfZG1hX3BjaV9kYXRhKGVtdS0+cGNpKSwgCiAJCQkJCSAgICAgIDMyKjEwMjQsIDMyKjEwMjQpOwogICAKLQllcnIgPSBzbmRfcGNtX2FkZF9jaG1hcF9jdGxzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgbWFwLCAyLAorCXJldHVybiBzbmRfcGNtX2FkZF9jaG1hcF9jdGxzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgbWFwLCAyLAogCQkJCSAgICAgMSA8PCAyLCBOVUxMKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCWlmIChycGNtKQotCQkqcnBjbSA9IHBjbTsKLSAgCi0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX2VtdTEwazF4X2NyZWF0ZShzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQsCkBAIC0xNTgzLDE1ICsxNTc0LDE1IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JaWYgKChlcnIgPSBzbmRfZW11MTBrMXhfcGNtKGNoaXAsIDAsIE5VTEwpKSA8IDApIHsKKwlpZiAoKGVyciA9IHNuZF9lbXUxMGsxeF9wY20oY2hpcCwgMCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlpZiAoKGVyciA9IHNuZF9lbXUxMGsxeF9wY20oY2hpcCwgMSwgTlVMTCkpIDwgMCkgeworCWlmICgoZXJyID0gc25kX2VtdTEwazF4X3BjbShjaGlwLCAxKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CiAJfQotCWlmICgoZXJyID0gc25kX2VtdTEwazF4X3BjbShjaGlwLCAyLCBOVUxMKSkgPCAwKSB7CisJaWYgKChlcnIgPSBzbmRfZW11MTBrMXhfcGNtKGNoaXAsIDIpKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9lbXVmeC5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYwppbmRleCBlYjVjMGFiYS4uNTZmYzQ3YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11ZnguYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVmeC5jCkBAIC0yNjQxLDE0ICsyNjQxLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzbmRfZW11MTBrMV9meDgwMTBfbmV3KHN0cnVjdCBzbmRfZW11MTBrMSAqZW11LCBpbnQgZGV2aWNlLAotCQkJICAgc3RydWN0IHNuZF9od2RlcCAqKnJod2RlcCkKK2ludCBzbmRfZW11MTBrMV9meDgwMTBfbmV3KHN0cnVjdCBzbmRfZW11MTBrMSAqZW11LCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBzbmRfaHdkZXAgKmh3OwogCWludCBlcnI7CiAJCi0JaWYgKHJod2RlcCkKLQkJKnJod2RlcCA9IE5VTEw7CiAJaWYgKChlcnIgPSBzbmRfaHdkZXBfbmV3KGVtdS0+Y2FyZCwgIkZYODAxMCIsIGRldmljZSwgJmh3KSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCXN0cmNweShody0+bmFtZSwgIkVNVTEwSzEgKEZYODAxMCkiKTsKQEAgLTI2NTcsOCArMjY1NCw2IEBACiAJaHctPm9wcy5pb2N0bCA9IHNuZF9lbXUxMGsxX2Z4ODAxMF9pb2N0bDsKIAlody0+b3BzLnJlbGVhc2UgPSBzbmRfZW11MTBrMV9meDgwMTBfcmVsZWFzZTsKIAlody0+cHJpdmF0ZV9kYXRhID0gZW11OwotCWlmIChyaHdkZXApCi0JCSpyaHdkZXAgPSBodzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvZW11cGNtLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVwY20uYwppbmRleCBmODI0ODFiLi4wZGMwNzM4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9lbXVwY20uYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9lbXVwY20uYwpAQCAtMTQwMCwxNSArMTQwMCwxMiBAQAogCS5wYWdlID0JCQlzbmRfcGNtX3NnYnVmX29wc19wYWdlLAogfTsKIAotaW50IHNuZF9lbXUxMGsxX3BjbShzdHJ1Y3Qgc25kX2VtdTEwazEgKmVtdSwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKQoraW50IHNuZF9lbXUxMGsxX3BjbShzdHJ1Y3Qgc25kX2VtdTEwazEgKmVtdSwgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwogCWludCBlcnI7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwotCiAJaWYgKChlcnIgPSBzbmRfcGNtX25ldyhlbXUtPmNhcmQsICJlbXUxMGsxIiwgZGV2aWNlLCAzMiwgMSwgJnBjbSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMTQyOSwyMiArMTQyNiwxNSBAQAogCWZvciAoc3Vic3RyZWFtID0gcGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uc3Vic3RyZWFtOyBzdWJzdHJlYW07IHN1YnN0cmVhbSA9IHN1YnN0cmVhbS0+bmV4dCkKIAkJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXMoc3Vic3RyZWFtLCBTTkRSVl9ETUFfVFlQRV9ERVYsIHNuZF9kbWFfcGNpX2RhdGEoZW11LT5wY2kpLCA2NCoxMDI0LCA2NCoxMDI0KTsKIAotCWlmIChycGNtKQotCQkqcnBjbSA9IHBjbTsKLQogCXJldHVybiAwOwogfQogCi1pbnQgc25kX2VtdTEwazFfcGNtX211bHRpKHN0cnVjdCBzbmRfZW11MTBrMSAqZW11LCBpbnQgZGV2aWNlLAotCQkJICBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCitpbnQgc25kX2VtdTEwazFfcGNtX211bHRpKHN0cnVjdCBzbmRfZW11MTBrMSAqZW11LCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJaW50IGVycjsKIAotCWlmIChycGNtKQotCQkqcnBjbSA9IE5VTEw7Ci0KIAlpZiAoKGVyciA9IHNuZF9wY21fbmV3KGVtdS0+Y2FyZCwgImVtdTEwazEiLCBkZXZpY2UsIDEsIDAsICZwY20pKSA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTE0NjEsOSArMTQ1MSw2IEBACiAJCWlmICgoZXJyID0gc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXMoc3Vic3RyZWFtLCBTTkRSVl9ETUFfVFlQRV9ERVZfU0csIHNuZF9kbWFfcGNpX2RhdGEoZW11LT5wY2kpLCA2NCoxMDI0LCA2NCoxMDI0KSkgPCAwKQogCQkJcmV0dXJuIGVycjsKIAotCWlmIChycGNtKQotCQkqcnBjbSA9IHBjbTsKLQogCXJldHVybiAwOwogfQogCkBAIC0xNDc5LDE1ICsxNDY2LDExIEBACiAJLnBvaW50ZXIgPQkJc25kX2VtdTEwazFfY2FwdHVyZV9wb2ludGVyLAogfTsKIAotaW50IHNuZF9lbXUxMGsxX3BjbV9taWMoc3RydWN0IHNuZF9lbXUxMGsxICplbXUsIGludCBkZXZpY2UsCi0JCQlzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCitpbnQgc25kX2VtdTEwazFfcGNtX21pYyhzdHJ1Y3Qgc25kX2VtdTEwazEgKmVtdSwgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwotCiAJaWYgKChlcnIgPSBzbmRfcGNtX25ldyhlbXUtPmNhcmQsICJlbXUxMGsxIG1pYyIsIGRldmljZSwgMCwgMSwgJnBjbSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMTUwMSw4ICsxNDg0LDYgQEAKIAogCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsIHNuZF9kbWFfcGNpX2RhdGEoZW11LT5wY2kpLCA2NCoxMDI0LCA2NCoxMDI0KTsKIAotCWlmIChycGNtKQotCQkqcnBjbSA9IHBjbTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgyMiwxNiArMTgwMywxMiBAQAogCS5hY2sgPQkJCXNuZF9lbXUxMGsxX2Z4ODAxMF9wbGF5YmFja190cmFuc2ZlciwKIH07CiAKLWludCBzbmRfZW11MTBrMV9wY21fZWZ4KHN0cnVjdCBzbmRfZW11MTBrMSAqZW11LCBpbnQgZGV2aWNlLAotCQkJc3RydWN0IHNuZF9wY20gKipycGNtKQoraW50IHNuZF9lbXUxMGsxX3BjbV9lZngoc3RydWN0IHNuZF9lbXUxMGsxICplbXUsIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RsOwogCWludCBlcnI7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwotCiAJaWYgKChlcnIgPSBzbmRfcGNtX25ldyhlbXUtPmNhcmQsICJlbXUxMGsxIGVmeCIsIGRldmljZSwgOCwgMSwgJnBjbSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMTg0Myw4ICsxODIwLDYgQEAKIAlwY20tPmluZm9fZmxhZ3MgPSAwOwogCXN0cmNweShwY20tPm5hbWUsICJNdWx0aWNoYW5uZWwgQ2FwdHVyZS9QVCBQbGF5YmFjayIpOwogCWVtdS0+cGNtX2VmeCA9IHBjbTsKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBwY207CiAKIAkvKiBFRlggY2FwdHVyZSAtIHJlY29yZCB0aGUgIkZYQlVTMiIgY2hhbm5lbHMsIGJ5IGRlZmF1bHQgd2UgY29ubmVjdCB0aGUgRVhUSU5zIAogCSAqIHRvIHRoZXNlCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMgYi9zb3VuZC9wY2kvZW11MTBrMS9wMTZ2LmMKaW5kZXggN2VmMzg5OC4uM2M2MGI0MyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvcDE2di5jCisrKyBiL3NvdW5kL3BjaS9lbXUxMGsxL3AxNnYuYwpAQCAtMTY2LDExICsxNjYsOCBAQAogc3RhdGljIHZvaWQgc25kX3AxNnZfcGNtX2ZyZWVfc3Vic3RyZWFtKHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCiB7CiAJc3RydWN0IHNuZF9lbXUxMGsxX3BjbSAqZXBjbSA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKLSAgCi0JaWYgKGVwY20pIHsKLQkJLyogZGV2X2RiZyhlbXUtPmNhcmQtPmRldiwgImVwY20gZnJlZTogJXBcbiIsIGVwY20pOyAqLwotCQlrZnJlZShlcGNtKTsKLQl9CisKKwlrZnJlZShlcGNtKTsKIH0KIAogLyogb3Blbl9wbGF5YmFjayBjYWxsYmFjayAqLwpAQCAtNjQwLDcgKzYzNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzbmRfcDE2dl9wY20oc3RydWN0IHNuZF9lbXUxMGsxICplbXUsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK2ludCBzbmRfcDE2dl9wY20oc3RydWN0IHNuZF9lbXUxMGsxICplbXUsIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKQEAgLTY0OSw4ICs2NDYsNiBAQAogICAKIAkvKiBkZXZfZGJnKGVtdS0+Y2FyZC0+ZGV2LCAic25kX3AxNnZfcGNtIGNhbGxlZC4gZGV2aWNlPSVkXG4iLCBkZXZpY2UpOyAqLwogCWVtdS0+cDE2dl9kZXZpY2Vfb2Zmc2V0ID0gZGV2aWNlOwotCWlmIChycGNtKQotCQkqcnBjbSA9IE5VTEw7CiAKIAlpZiAoKGVyciA9IHNuZF9wY21fbmV3KGVtdS0+Y2FyZCwgInAxNnYiLCBkZXZpY2UsIDEsIGNhcHR1cmUsICZwY20pKSA8IDApCiAJCXJldHVybiBlcnI7CkBAIC02OTQsOSArNjg5LDYgQEAKIAkJKi8KIAl9CiAgIAotCWlmIChycGNtKQotCQkqcnBjbSA9IHBjbTsKLSAgCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbnMxMzcwLmMgYi9zb3VuZC9wY2kvZW5zMTM3MC5jCmluZGV4IGQ5NGNiM2MuLjBkYzQ0ZWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lbnMxMzcwLmMKKysrIGIvc291bmQvcGNpL2VuczEzNzAuYwpAQCAtMjYsNyArMjYsNyBAQAogICogYnkgS3VydCBKLiBCb3NjaAogICovCiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTI2OCwxNCArMTI2OCwxMSBAQAogCXsgfQogfTsKIAotc3RhdGljIGludCBzbmRfZW5zb25pcV9wY20oc3RydWN0IGVuc29uaXEgKmVuc29uaXEsIGludCBkZXZpY2UsCi0JCQkgICBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCitzdGF0aWMgaW50IHNuZF9lbnNvbmlxX3BjbShzdHJ1Y3QgZW5zb25pcSAqZW5zb25pcSwgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwogCWVyciA9IHNuZF9wY21fbmV3KGVuc29uaXEtPmNhcmQsIENISVBfTkFNRSAiLzEiLCBkZXZpY2UsIDEsIDEsICZwY20pOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMTMwMiwyMiArMTI5OSwxNCBAQAogCWVyciA9IHNuZF9wY21fYWRkX2NobWFwX2N0bHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAogCQkJCSAgICAgc25kX3BjbV9zdGRfY2htYXBzLCAyLCAwLCBOVUxMKTsKICNlbmRpZgotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKHJwY20pCi0JCSpycGNtID0gcGNtOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2Vuc29uaXFfcGNtMihzdHJ1Y3QgZW5zb25pcSAqZW5zb25pcSwgaW50IGRldmljZSwKLQkJCSAgICBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCitzdGF0aWMgaW50IHNuZF9lbnNvbmlxX3BjbTIoc3RydWN0IGVuc29uaXEgKmVuc29uaXEsIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgZXJyOwogCi0JaWYgKHJwY20pCi0JCSpycGNtID0gTlVMTDsKIAllcnIgPSBzbmRfcGNtX25ldyhlbnNvbmlxLT5jYXJkLCBDSElQX05BTUUgIi8yIiwgZGV2aWNlLCAxLCAwLCAmcGNtKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTEzNDIsMTIgKzEzMzEsNyBAQAogCWVyciA9IHNuZF9wY21fYWRkX2NobWFwX2N0bHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAogCQkJCSAgICAgc3Vycm91bmRfbWFwLCAyLCAwLCBOVUxMKTsKICNlbmRpZgotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKHJwY20pCi0JCSpycGNtID0gcGNtOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC0yMDQ5LDcgKzIwMzMsNiBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBzbmRfZW5zb25pcV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBlbnNvbmlxICplbnNvbmlxID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCQpAQCAtMjA3MCwyOCArMjA1MywxNCBAQAogCXVkZWxheSgxMDApOwogCXNuZF9hazQ1MzFfc3VzcGVuZChlbnNvbmlxLT51LmVzMTM3MC5hazQ1MzEpOwogI2VuZGlmCQotCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0JcGNpX3NhdmVfc3RhdGUocGNpKTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfZW5zb25pcV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGVuc29uaXEgKmVuc29uaXEgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgewotCQlkZXZfZXJyKGRldiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgZGlzYWJsaW5nIGRldmljZVxuIik7Ci0JCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlwY2lfc2V0X21hc3RlcihwY2kpOwotCiAJc25kX2Vuc29uaXFfY2hpcF9pbml0KGVuc29uaXEpOwogCiAjaWZkZWYgQ0hJUDEzNzEJCkBAIC0yMzYyLDE0ICsyMzMxLDExIEBACiAJLnRyaWdnZXIgPQlzbmRfZW5zb25pcV9taWRpX2lucHV0X3RyaWdnZXIsCiB9OwogCi1zdGF0aWMgaW50IHNuZF9lbnNvbmlxX21pZGkoc3RydWN0IGVuc29uaXEgKmVuc29uaXEsIGludCBkZXZpY2UsCi0JCQkgICAgc3RydWN0IHNuZF9yYXdtaWRpICoqcnJhd21pZGkpCitzdGF0aWMgaW50IHNuZF9lbnNvbmlxX21pZGkoc3RydWN0IGVuc29uaXEgKmVuc29uaXEsIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKIAlpbnQgZXJyOwogCi0JaWYgKHJyYXdtaWRpKQotCQkqcnJhd21pZGkgPSBOVUxMOwogCWlmICgoZXJyID0gc25kX3Jhd21pZGlfbmV3KGVuc29uaXEtPmNhcmQsICJFUzEzNzAvMSIsIGRldmljZSwgMSwgMSwgJnJtaWRpKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCXN0cmNweShybWlkaS0+bmFtZSwgQ0hJUF9OQU1FKTsKQEAgLTIzNzksOCArMjM0NSw2IEBACiAJCVNORFJWX1JBV01JRElfSU5GT19EVVBMRVg7CiAJcm1pZGktPnByaXZhdGVfZGF0YSA9IGVuc29uaXE7CiAJZW5zb25pcS0+cm1pZGkgPSBybWlkaTsKLQlpZiAocnJhd21pZGkpCi0JCSpycmF3bWlkaSA9IHJtaWRpOwogCXJldHVybiAwOwogfQogCkBAIC0yNDYyLDE1ICsyNDI2LDE1IEBACiAJCXJldHVybiBlcnI7CiAJfQogI2VuZGlmCi0JaWYgKChlcnIgPSBzbmRfZW5zb25pcV9wY20oZW5zb25pcSwgMCwgTlVMTCkpIDwgMCkgeworCWlmICgoZXJyID0gc25kX2Vuc29uaXFfcGNtKGVuc29uaXEsIDApKSA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JaWYgKChlcnIgPSBzbmRfZW5zb25pcV9wY20yKGVuc29uaXEsIDEsIE5VTEwpKSA8IDApIHsKKwlpZiAoKGVyciA9IHNuZF9lbnNvbmlxX3BjbTIoZW5zb25pcSwgMSkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlpZiAoKGVyciA9IHNuZF9lbnNvbmlxX21pZGkoZW5zb25pcSwgMCwgTlVMTCkpIDwgMCkgeworCWlmICgoZXJyID0gc25kX2Vuc29uaXFfbWlkaShlbnNvbmlxLCAwKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VzMTkzOC5jIGIvc291bmQvcGNpL2VzMTkzOC5jCmluZGV4IDBmYzQ2ZWIuLmUxODU4ZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lczE5MzguYworKysgYi9zb3VuZC9wY2kvZXMxOTM4LmMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtNjMsOCArNjQsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KICNpbmNsdWRlIDxzb3VuZC90bHYuaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgotCiBNT0RVTEVfQVVUSE9SKCJKYXJvbWlyIEtvdXRlayA8bWlyaUBwdW5rbmV0LmN6PiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJFU1MgU29sby0xIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0xNDU0LDcgKzE0NTMsNiBAQAogCiBzdGF0aWMgaW50IGVzMTkzOF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBlczE5MzggKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgY2hhciAqcywgKmQ7CkBAIC0xNDcxLDkgKzE0NjksNiBAQAogCQlmcmVlX2lycShjaGlwLT5pcnEsIGNoaXApOwogCQljaGlwLT5pcnEgPSAtMTsKIAl9Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0JcGNpX3NhdmVfc3RhdGUocGNpKTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQ4NCwxNCArMTQ3OSw2IEBACiAJc3RydWN0IGVzMTkzOCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBjaGFyICpzLCAqZDsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCBkaXNhYmxpbmcgZGV2aWNlXG4iKTsKLQkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCiAJaWYgKHJlcXVlc3RfaXJxKHBjaS0+aXJxLCBzbmRfZXMxOTM4X2ludGVycnVwdCwKIAkJCUlSUUZfU0hBUkVELCBLQlVJTERfTU9ETkFNRSwgY2hpcCkpIHsKIAkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gZ3JhYiBJUlEgJWQsIGRpc2FibGluZyBkZXZpY2VcbiIsCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvZXMxOTY4LmMgYi9zb3VuZC9wY2kvZXMxOTY4LmMKaW5kZXggNjAzOTcwMC4uMDU5ZjM4NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VzMTk2OC5jCisrKyBiL3NvdW5kL3BjaS9lczE5NjguYwpAQCAtOTQsNyArOTQsNyBAQAogICoJcGxhY2VzLgogICovCiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMjM4Myw3ICsyMzgzLDYgQEAKICAqLwogc3RhdGljIGludCBlczE5Njhfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZXMxOTY4ICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCkBAIC0yMzk2LDE2ICsyMzk1LDExIEBACiAJc25kX3BjbV9zdXNwZW5kX2FsbChjaGlwLT5wY20pOwogCXNuZF9hYzk3X3N1c3BlbmQoY2hpcC0+YWM5Nyk7CiAJc25kX2VzMTk2OF9ib2Jfc3RvcChjaGlwKTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCXBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZXMxOTY4X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZXMxOTY4ICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBlc3NjaGFuICplczsKQEAgLTI0MTMsMTYgKzI0MDcsNiBAQAogCWlmICghIGNoaXAtPmRvX3BtKQogCQlyZXR1cm4gMDsKIAotCS8qIHJlc3RvcmUgYWxsIG91ciBjb25maWcgKi8KLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgewotCQlkZXZfZXJyKGRldiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgZGlzYWJsaW5nIGRldmljZVxuIik7Ci0JCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlwY2lfc2V0X21hc3RlcihwY2kpOwotCiAJc25kX2VzMTk2OF9jaGlwX2luaXQoY2hpcCk7CiAKIAkvKiBuZWVkIHRvIHJlc3RvcmUgdGhlIGJhc2UgcG9pbnRlcnMuLiAqLyAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9mbTgwMS5jIGIvc291bmQvcGNpL2ZtODAxLmMKaW5kZXggZDE2N2FmZi4uMWZkZDkyYjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9mbTgwMS5jCisrKyBiL3NvdW5kL3BjaS9mbTgwMS5jCkBAIC0yLDggKzIsNiBAQAogICogIFRoZSBkcml2ZXIgZm9yIHRoZSBGb3J0ZU1lZGlhIEZNODAxIGJhc2VkIHNvdW5kY2FyZHMKICAqICBDb3B5cmlnaHQgKGMpIGJ5IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+CiAgKgotICogIFN1cHBvcnQgRk0gb25seSBjYXJkIGJ5IEFuZHkgU2hldmNoZW5rbyA8YW5keUBzbWlsZS5vcmcudWE+Ci0gKgogICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMTQsMTAgKzEyLDYgQEAKICAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCi0gKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtNzA0LDEzICs2OTgsMTEgQEAKIAkucG9pbnRlciA9CXNuZF9mbTgwMV9jYXB0dXJlX3BvaW50ZXIsCiB9OwogCi1zdGF0aWMgaW50IHNuZF9mbTgwMV9wY20oc3RydWN0IGZtODAxICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCitzdGF0aWMgaW50IHNuZF9mbTgwMV9wY20oc3RydWN0IGZtODAxICpjaGlwLCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycjsKIAotCWlmIChycGNtKQotCQkqcnBjbSA9IE5VTEw7CiAJaWYgKChlcnIgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCAiRk04MDEiLCBkZXZpY2UsIDEsIDEsICZwY20pKSA8IDApCiAJCXJldHVybiBlcnI7CiAKQEAgLTcyNiwxNiArNzE4LDEwIEBACiAJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwKIAkJCQkJICAgICAgY2hpcC0+bXVsdGljaGFubmVsID8gMTI4KjEwMjQgOiA2NCoxMDI0LCAxMjgqMTAyNCk7CiAKLQllcnIgPSBzbmRfcGNtX2FkZF9jaG1hcF9jdGxzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKKwlyZXR1cm4gc25kX3BjbV9hZGRfY2htYXBfY3RscyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCiAJCQkJICAgICBzbmRfcGNtX2FsdF9jaG1hcHMsCiAJCQkJICAgICBjaGlwLT5tdWx0aWNoYW5uZWwgPyA2IDogMiwgMCwKIAkJCQkgICAgIE5VTEwpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKHJwY20pCi0JCSpycGNtID0gcGNtOwotCXJldHVybiAwOwogfQogCiAvKgpAQCAtMTE4NiwxMiArMTE3Miw2IEBACiAJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNoaXAtPnY0bDJfZGV2KTsKIAl9CiAjZW5kaWYKLQlpZiAoY2hpcC0+aXJxID49IDApCi0JCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhjaGlwLT5wY2kpOwotCXBjaV9kaXNhYmxlX2RldmljZShjaGlwLT5wY2kpOwotCi0Ja2ZyZWUoY2hpcCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMTQsMjggKzExOTQsMjMgQEAKIAl9OwogCiAJKnJjaGlwID0gTlVMTDsKLQlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBjaSkpIDwgMCkKKwlpZiAoKGVyciA9IHBjaW1fZW5hYmxlX2RldmljZShwY2kpKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNoaXAgPT0gTlVMTCkgewotCQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKKwljaGlwID0gZGV2bV9remFsbG9jKCZwY2ktPmRldiwgc2l6ZW9mKCpjaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoaXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCXNwaW5fbG9ja19pbml0KCZjaGlwLT5yZWdfbG9jayk7CiAJY2hpcC0+Y2FyZCA9IGNhcmQ7CiAJY2hpcC0+cGNpID0gcGNpOwogCWNoaXAtPmlycSA9IC0xOwogCWNoaXAtPnRlYTU3NXhfdHVuZXIgPSB0ZWE1NzV4X3R1bmVyOwotCWlmICgoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksICJGTTgwMSIpKSA8IDApIHsKLQkJa2ZyZWUoY2hpcCk7Ci0JCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOworCWlmICgoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwY2ksICJGTTgwMSIpKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JfQogCWNoaXAtPnBvcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpLCAwKTsKIAlpZiAoKHRlYTU3NXhfdHVuZXIgJiBUVU5FUl9PTkxZKSA9PSAwKSB7Ci0JCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2ZtODAxX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsCi0JCQkJS0JVSUxEX01PRE5BTUUsIGNoaXApKSB7Ci0JCQlkZXZfZXJyKGNhcmQtPmRldiwgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgY2hpcC0+aXJxKTsKKwkJaWYgKGRldm1fcmVxdWVzdF9pcnEoJnBjaS0+ZGV2LCBwY2ktPmlycSwgc25kX2ZtODAxX2ludGVycnVwdCwKKwkJCQlJUlFGX1NIQVJFRCwgS0JVSUxEX01PRE5BTUUsIGNoaXApKSB7CisJCQlkZXZfZXJyKGNhcmQtPmRldiwgInVuYWJsZSB0byBncmFiIElSUSAlZFxuIiwgcGNpLT5pcnEpOwogCQkJc25kX2ZtODAxX2ZyZWUoY2hpcCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CkBAIC0xMjUwLDEyICsxMjI1LDYgQEAKIAkvKiBpbml0IG1pZ2h0IHNldCB0dW5lciBhY2Nlc3MgbWV0aG9kICovCiAJdGVhNTc1eF90dW5lciA9IGNoaXAtPnRlYTU3NXhfdHVuZXI7CiAKLQlpZiAoY2hpcC0+aXJxID49IDAgJiYgKHRlYTU3NXhfdHVuZXIgJiBUVU5FUl9PTkxZKSkgewotCQlwY2lfY2xlYXJfbWFzdGVyKHBjaSk7Ci0JCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7Ci0JCWNoaXAtPmlycSA9IC0xOwotCX0KLQogCWlmICgoZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBjaGlwLCAmb3BzKSkgPCAwKSB7CiAJCXNuZF9mbTgwMV9mcmVlKGNoaXApOwogCQlyZXR1cm4gZXJyOwpAQCAtMTM0MCw3ICsxMzA5LDcgQEAKIAlpZiAoY2hpcC0+dGVhNTc1eF90dW5lciAmIFRVTkVSX09OTFkpCiAJCWdvdG8gX19mbTgwMV90dW5lcl9vbmx5OwogCi0JaWYgKChlcnIgPSBzbmRfZm04MDFfcGNtKGNoaXAsIDAsIE5VTEwpKSA8IDApIHsKKwlpZiAoKGVyciA9IHNuZF9mbTgwMV9wY20oY2hpcCwgMCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTEzOTIsNyArMTM2MSw2IEBACiAKIHN0YXRpYyBpbnQgc25kX2ZtODAxX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGZtODAxICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCBpOwpAQCAtMTQwNCwyOSArMTM3MiwxNSBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVkX3JlZ3MpOyBpKyspCiAJCWNoaXAtPnNhdmVkX3JlZ3NbaV0gPSBpbncoY2hpcC0+cG9ydCArIHNhdmVkX3JlZ3NbaV0pOwogCS8qIEZJWE1FOiB0ZWE1NzV4IHN1c3BlbmQgKi8KLQotCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCXBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX2ZtODAxX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgZm04MDEgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaW50IGk7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgewotCQlkZXZfZXJyKGRldiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgZGlzYWJsaW5nIGRldmljZVxuIik7Ci0JCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlwY2lfc2V0X21hc3RlcihwY2kpOwotCiAJc25kX2ZtODAxX2NoaXBfaW5pdChjaGlwLCAxKTsKIAlzbmRfYWM5N19yZXN1bWUoY2hpcC0+YWM5Nyk7CiAJc25kX2FjOTdfcmVzdW1lKGNoaXAtPmFjOTdfc2VjKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvS2NvbmZpZyBiL3NvdW5kL3BjaS9oZGEvS2NvbmZpZwppbmRleCBlYmY0YzJmLi43ZjBmMmM1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL0tjb25maWcKKysrIGIvc291bmQvcGNpL2hkYS9LY29uZmlnCkBAIC0xMDcsNiArMTA3LDcgQEAKIGNvbmZpZyBTTkRfSERBX0NPREVDX1JFQUxURUsKIAl0cmlzdGF0ZSAiQnVpbGQgUmVhbHRlayBIRC1hdWRpbyBjb2RlYyBzdXBwb3J0IgogCXNlbGVjdCBTTkRfSERBX0dFTkVSSUMKKwlzZWxlY3QgSU5QVVQKIAloZWxwCiAJICBTYXkgWSBvciBNIGhlcmUgdG8gaW5jbHVkZSBSZWFsdGVrIEhELWF1ZGlvIGNvZGVjIHN1cHBvcnQgaW4KIAkgIHNuZC1oZGEtaW50ZWwgZHJpdmVyLCBzdWNoIGFzIEFMQzg4MC4KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2F1dG9fcGFyc2VyLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9hdXRvX3BhcnNlci5jCmluZGV4IDFlZGU4MjIuLjNmODcwNmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2F1dG9fcGFyc2VyLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfYXV0b19wYXJzZXIuYwpAQCAtNDA5LDEwICs0MDksMTAgQEAKIAkvKgogCSAqIGRlYnVnIHByaW50cyBvZiB0aGUgcGFyc2VkIHJlc3VsdHMKIAkgKi8KLQljb2RlY19pbmZvKGNvZGVjLCAiYXV0b2NvbmZpZzogbGluZV9vdXRzPSVkICgweCV4LzB4JXgvMHgleC8weCV4LzB4JXgpIHR5cGU6JXNcbiIsCi0JCSAgIGNmZy0+bGluZV9vdXRzLCBjZmctPmxpbmVfb3V0X3BpbnNbMF0sIGNmZy0+bGluZV9vdXRfcGluc1sxXSwKLQkJICAgY2ZnLT5saW5lX291dF9waW5zWzJdLCBjZmctPmxpbmVfb3V0X3BpbnNbM10sCi0JCSAgIGNmZy0+bGluZV9vdXRfcGluc1s0XSwKKwljb2RlY19pbmZvKGNvZGVjLCAiYXV0b2NvbmZpZyBmb3IgJXM6IGxpbmVfb3V0cz0lZCAoMHgleC8weCV4LzB4JXgvMHgleC8weCV4KSB0eXBlOiVzXG4iLAorCQkgICBjb2RlYy0+Y2hpcF9uYW1lLCBjZmctPmxpbmVfb3V0cywgY2ZnLT5saW5lX291dF9waW5zWzBdLAorCQkgICBjZmctPmxpbmVfb3V0X3BpbnNbMV0sIGNmZy0+bGluZV9vdXRfcGluc1syXSwKKwkJICAgY2ZnLT5saW5lX291dF9waW5zWzNdLCBjZmctPmxpbmVfb3V0X3BpbnNbNF0sCiAJCSAgIGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9IUF9PVVQgPyAiaHAiIDoKIAkJICAgKGNmZy0+bGluZV9vdXRfdHlwZSA9PSBBVVRPX1BJTl9TUEVBS0VSX09VVCA/CiAJCSAgICAic3BlYWtlciIgOiAibGluZSIpKTsKQEAgLTkyMCw2ICs5MjAsOCBAQAogCQkJY29kZWMtPmZpeHVwX2lkID0gcHEtPnZhbHVlOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQogCQkJY29kZWMtPmZpeHVwX25hbWUgPSBwcS0+bmFtZTsKKwkJCWNvZGVjX2RiZyhjb2RlYywgIiVzOiBwaWNrZWQgZml4dXAgJXMgKHBpbiBtYXRjaClcbiIsCisJCQkJICBjb2RlYy0+Y2hpcF9uYW1lLCBjb2RlYy0+Zml4dXBfbmFtZSk7CiAjZW5kaWYKIAkJCWNvZGVjLT5maXh1cF9saXN0ID0gZml4bGlzdDsKIAkJCXJldHVybjsKQEAgLTk2MCw2ICs5NjIsOCBAQAogCQljb2RlYy0+Zml4dXBfbGlzdCA9IE5VTEw7CiAJCWNvZGVjLT5maXh1cF9uYW1lID0gTlVMTDsKIAkJY29kZWMtPmZpeHVwX2lkID0gSERBX0ZJWFVQX0lEX05PX0ZJWFVQOworCQljb2RlY19kYmcoY29kZWMsICIlczogcGlja2VkIG5vIGZpeHVwIChub2ZpeHVwIHNwZWNpZmllZClcbiIsCisJCQkgIGNvZGVjLT5jaGlwX25hbWUpOwogCQlyZXR1cm47CiAJfQogCkBAIC05NjksNiArOTczLDggQEAKIAkJCQljb2RlYy0+Zml4dXBfaWQgPSBtb2RlbHMtPmlkOwogCQkJCWNvZGVjLT5maXh1cF9uYW1lID0gbW9kZWxzLT5uYW1lOwogCQkJCWNvZGVjLT5maXh1cF9saXN0ID0gZml4bGlzdDsKKwkJCQljb2RlY19kYmcoY29kZWMsICIlczogcGlja2VkIGZpeHVwICVzIChtb2RlbCBzcGVjaWZpZWQpXG4iLAorCQkJCQkgIGNvZGVjLT5jaGlwX25hbWUsIGNvZGVjLT5maXh1cF9uYW1lKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQltb2RlbHMrKzsKQEAgLTk4MCw2ICs5ODYsOCBAQAogCQkJaWQgPSBxLT52YWx1ZTsKICNpZmRlZiBDT05GSUdfU05EX0RFQlVHX1ZFUkJPU0UKIAkJCW5hbWUgPSBxLT5uYW1lOworCQkJY29kZWNfZGJnKGNvZGVjLCAiJXM6IHBpY2tlZCBmaXh1cCAlcyAoUENJIFNTSUQlcylcbiIsCisJCQkJICBjb2RlYy0+Y2hpcF9uYW1lLCBuYW1lLCBxLT5zdWJkZXZpY2VfbWFzayA/ICIiIDogIiAtIHZlbmRvciBnZW5lcmljIik7CiAjZW5kaWYKIAkJfQogCX0KQEAgLTk5Miw2ICsxMDAwLDggQEAKIAkJCQlpZCA9IHEtPnZhbHVlOwogI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQogCQkJCW5hbWUgPSBxLT5uYW1lOworCQkJCWNvZGVjX2RiZyhjb2RlYywgIiVzOiBwaWNrZWQgZml4dXAgJXMgKGNvZGVjIFNTSUQpXG4iLAorCQkJCQkgIGNvZGVjLT5jaGlwX25hbWUsIG5hbWUpOwogI2VuZGlmCiAJCQkJYnJlYWs7CiAJCQl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9jb250cm9sbGVyLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb250cm9sbGVyLmMKaW5kZXggMGNmYzljOC4uZGZjYjVlOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29udHJvbGxlci5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvbnRyb2xsZXIuYwpAQCAtNjU3LDYgKzY1Nyw5IEBACiAJCWF6eF93cml0ZWwoY2hpcCwgU1NZTkMsIGF6eF9yZWFkbChjaGlwLCBTU1lOQykgJiB+c2JpdHMpOwogCWlmIChzdGFydCkgewogCQlhenhfdGltZWNvdW50ZXJfaW5pdChzdWJzdHJlYW0sIDAsIDApOworCQlzbmRfcGNtX2dldHRpbWUoc3Vic3RyZWFtLT5ydW50aW1lLCAmc3Vic3RyZWFtLT5ydW50aW1lLT50cmlnZ2VyX3RzdGFtcCk7CisJCXN1YnN0cmVhbS0+cnVudGltZS0+dHJpZ2dlcl90c3RhbXBfbGF0Y2hlZCA9IHRydWU7CisKIAkJaWYgKG5zeW5jID4gMSkgewogCQkJY3ljbGVfdCBjeWNsZV9sYXN0OwogCkBAIC05MzksNyArOTQyLDggQEAKIAkJCQkJICAgICAgY2hpcC0+Y2FyZC0+ZGV2LAogCQkJCQkgICAgICBzaXplLCBNQVhfUFJFQUxMT0NfU0laRSk7CiAJLyogbGluayB0byBjb2RlYyAqLwotCXBjbS0+ZGV2ID0gJmNvZGVjLT5kZXY7CisJZm9yIChzID0gMDsgcyA8IDI7IHMrKykKKwkJcGNtLT5zdHJlYW1zW3NdLmRldi5wYXJlbnQgPSAmY29kZWMtPmRldjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk5Myw0ICsxOTk3LDQgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGF6eF9ub3RpZmllcl91bnJlZ2lzdGVyKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21tb24gSERBIGRyaXZlciBmdW5jaXRvbnMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tbW9uIEhEQSBkcml2ZXIgZnVuY3Rpb25zIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYwppbmRleCAwMTRhNzg0Li4xMWI1YTQyYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfaHdkZXAuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9od2RlcC5jCkBAIC0xMDksNyArMTA5LDYgQEAKIAlod2RlcC0+aWZhY2UgPSBTTkRSVl9IV0RFUF9JRkFDRV9IREE7CiAJaHdkZXAtPnByaXZhdGVfZGF0YSA9IGNvZGVjOwogCWh3ZGVwLT5leGNsdXNpdmUgPSAxOwotCWh3ZGVwLT5ncm91cHMgPSBzbmRfaGRhX2Rldl9hdHRyX2dyb3VwczsKIAogCWh3ZGVwLT5vcHMub3BlbiA9IGhkYV9od2RlcF9vcGVuOwogCWh3ZGVwLT5vcHMuaW9jdGwgPSBoZGFfaHdkZXBfaW9jdGw7CkBAIC0xMTgsNyArMTE3LDExIEBACiAjZW5kaWYKIAogCS8qIGxpbmsgdG8gY29kZWMgKi8KLQlod2RlcC0+ZGV2ID0gJmNvZGVjLT5kZXY7CisJaHdkZXAtPmRldi5wYXJlbnQgPSAmY29kZWMtPmRldjsKKworCS8qIGZvciBzeXNmcyAqLworCWh3ZGVwLT5kZXYuZ3JvdXBzID0gc25kX2hkYV9kZXZfYXR0cl9ncm91cHM7CisJZGV2X3NldF9kcnZkYXRhKCZod2RlcC0+ZGV2LCBjb2RlYyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2k5MTUuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2k5MTUuYwppbmRleCBkNGQwMzc1Li43MTQ4OTQ1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pOTE1LmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaTkxNS5jCkBAIC0xOCwxMCArMTgsMTIgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQuaD4KKyNpbmNsdWRlIDxkcm0vaTkxNV9jb21wb25lbnQuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8ZHJtL2k5MTVfcG93ZXJ3ZWxsLmg+CiAjaW5jbHVkZSAiaGRhX3ByaXYuaCIKLSNpbmNsdWRlICJoZGFfaTkxNS5oIgorI2luY2x1ZGUgImhkYV9pbnRlbC5oIgogCiAvKiBJbnRlbCBIU1cvQkRXIGRpc3BsYXkgSERBIGNvbnRyb2xsZXIgRXh0ZW5kZWQgTW9kZSByZWdpc3RlcnMuCiAgKiBFTTQgKE0gdmFsdWUpIGFuZCBFTTUgKE4gVmFsdWUpIGFyZSB1c2VkIHRvIGNvbnZlcnQgQ0RDbGsgKENvcmUgRGlzcGxheQpAQCAtMzEsMzIgKzMzLDMzIEBACiAjZGVmaW5lIEFaWF9SRUdfRU00CQkJMHgxMDBjCiAjZGVmaW5lIEFaWF9SRUdfRU01CQkJMHgxMDEwCiAKLXN0YXRpYyBpbnQgKCpnZXRfcG93ZXIpKHZvaWQpOwotc3RhdGljIGludCAoKnB1dF9wb3dlcikodm9pZCk7Ci1zdGF0aWMgaW50ICgqZ2V0X2NkY2xrKSh2b2lkKTsKLQotaW50IGhkYV9kaXNwbGF5X3Bvd2VyKGJvb2wgZW5hYmxlKQoraW50IGhkYV9kaXNwbGF5X3Bvd2VyKHN0cnVjdCBoZGFfaW50ZWwgKmhkYSwgYm9vbCBlbmFibGUpCiB7Ci0JaWYgKCFnZXRfcG93ZXIgfHwgIXB1dF9wb3dlcikKKwlzdHJ1Y3QgaTkxNV9hdWRpb19jb21wb25lbnQgKmFjb21wID0gJmhkYS0+YXVkaW9fY29tcG9uZW50OworCisJaWYgKCFhY29tcC0+b3BzKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByX2RlYnVnKCJIREEgZGlzcGxheSBwb3dlciAlcyBcbiIsCi0JCQllbmFibGUgPyAiRW5hYmxlIiA6ICJEaXNhYmxlIik7CisJZGV2X2RiZygmaGRhLT5jaGlwLnBjaS0+ZGV2LCAiZGlzcGxheSBwb3dlciAlc1xuIiwKKwkJZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOwogCWlmIChlbmFibGUpCi0JCXJldHVybiBnZXRfcG93ZXIoKTsKKwkJYWNvbXAtPm9wcy0+Z2V0X3Bvd2VyKGFjb21wLT5kZXYpOwogCWVsc2UKLQkJcmV0dXJuIHB1dF9wb3dlcigpOworCQlhY29tcC0+b3BzLT5wdXRfcG93ZXIoYWNvbXAtPmRldik7CisKKwlyZXR1cm4gMDsKIH0KIAotdm9pZCBoYXN3ZWxsX3NldF9iY2xrKHN0cnVjdCBhenggKmNoaXApCit2b2lkIGhhc3dlbGxfc2V0X2JjbGsoc3RydWN0IGhkYV9pbnRlbCAqaGRhKQogewogCWludCBjZGNsa19mcmVxOwogCXVuc2lnbmVkIGludCBiY2xrX20sIGJjbGtfbjsKKwlzdHJ1Y3QgaTkxNV9hdWRpb19jb21wb25lbnQgKmFjb21wID0gJmhkYS0+YXVkaW9fY29tcG9uZW50OwogCi0JaWYgKCFnZXRfY2RjbGspCisJaWYgKCFhY29tcC0+b3BzKQogCQlyZXR1cm47CiAKLQljZGNsa19mcmVxID0gZ2V0X2NkY2xrKCk7CisJY2RjbGtfZnJlcSA9IGFjb21wLT5vcHMtPmdldF9jZGNsa19mcmVxKGFjb21wLT5kZXYpOwogCXN3aXRjaCAoY2RjbGtfZnJlcSkgewogCWNhc2UgMzM3NTAwOgogCQliY2xrX20gPSAxNjsKQEAgLTgwLDUxICs4MywxMDggQEAKIAkJYnJlYWs7CiAJfQogCi0JYXp4X3dyaXRldyhjaGlwLCBFTTQsIGJjbGtfbSk7Ci0JYXp4X3dyaXRldyhjaGlwLCBFTTUsIGJjbGtfbik7CisJYXp4X3dyaXRldygmaGRhLT5jaGlwLCBFTTQsIGJjbGtfbSk7CisJYXp4X3dyaXRldygmaGRhLT5jaGlwLCBFTTUsIGJjbGtfbik7CiB9CiAKLQotaW50IGhkYV9pOTE1X2luaXQodm9pZCkKK3N0YXRpYyBpbnQgaGRhX2NvbXBvbmVudF9tYXN0ZXJfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaW50IGVyciA9IDA7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGF6eCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRhX2ludGVsICpoZGEgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGhkYV9pbnRlbCwgY2hpcCk7CisJc3RydWN0IGk5MTVfYXVkaW9fY29tcG9uZW50ICphY29tcCA9ICZoZGEtPmF1ZGlvX2NvbXBvbmVudDsKKwlpbnQgcmV0OwogCi0JZ2V0X3Bvd2VyID0gc3ltYm9sX3JlcXVlc3QoaTkxNV9yZXF1ZXN0X3Bvd2VyX3dlbGwpOwotCWlmICghZ2V0X3Bvd2VyKSB7Ci0JCXByX3dhcm4oImhkYS1pOTE1OiBnZXRfcG93ZXIgc3ltYm9sIGdldCBmYWlsXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJcmV0ID0gY29tcG9uZW50X2JpbmRfYWxsKGRldiwgYWNvbXApOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKFdBUk5fT04oIShhY29tcC0+ZGV2ICYmIGFjb21wLT5vcHMgJiYgYWNvbXAtPm9wcy0+Z2V0X3Bvd2VyICYmCisJCSAgICAgIGFjb21wLT5vcHMtPnB1dF9wb3dlciAmJiBhY29tcC0+b3BzLT5nZXRfY2RjbGtfZnJlcSkpKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3VuYmluZDsKIAl9CiAKLQlwdXRfcG93ZXIgPSBzeW1ib2xfcmVxdWVzdChpOTE1X3JlbGVhc2VfcG93ZXJfd2VsbCk7Ci0JaWYgKCFwdXRfcG93ZXIpIHsKLQkJc3ltYm9sX3B1dChpOTE1X3JlcXVlc3RfcG93ZXJfd2VsbCk7Ci0JCWdldF9wb3dlciA9IE5VTEw7Ci0JCXJldHVybiAtRU5PREVWOworCS8qCisJICogQXRtLCB3ZSBkb24ndCBzdXBwb3J0IGR5bmFtaWMgdW5iaW5kaW5nIGluaXRpYXRlZCBieSB0aGUgY2hpbGQKKwkgKiBjb21wb25lbnQsIHNvIHBpbiBpdHMgY29udGFpbmluZyBtb2R1bGUgdW50aWwgd2UgdW5iaW5kLgorCSAqLworCWlmICghdHJ5X21vZHVsZV9nZXQoYWNvbXAtPm9wcy0+b3duZXIpKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X3VuYmluZDsKIAl9CiAKLQlnZXRfY2RjbGsgPSBzeW1ib2xfcmVxdWVzdChpOTE1X2dldF9jZGNsa19mcmVxKTsKLQlpZiAoIWdldF9jZGNsaykJLyogbWF5IGhhdmUgYWJub3JtYWwgQkNMSyBhbmQgYXVkaW8gcGxheWJhY2sgcmF0ZSAqLwotCQlwcl93YXJuKCJoZGEtaTkxNTogZ2V0X2NkY2xrIHN5bWJvbCBnZXQgZmFpbFxuIik7CisJcmV0dXJuIDA7CiAKLQlwcl9kZWJ1ZygiSERBIGRyaXZlciBnZXQgc3ltYm9sIHN1Y2Nlc3NmdWxseSBmcm9tIGk5MTUgbW9kdWxlXG4iKTsKK291dF91bmJpbmQ6CisJY29tcG9uZW50X3VuYmluZF9hbGwoZGV2LCBhY29tcCk7CiAKLQlyZXR1cm4gZXJyOworCXJldHVybiByZXQ7CiB9CiAKLWludCBoZGFfaTkxNV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBoZGFfY29tcG9uZW50X21hc3Rlcl91bmJpbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCWlmIChnZXRfcG93ZXIpIHsKLQkJc3ltYm9sX3B1dChpOTE1X3JlcXVlc3RfcG93ZXJfd2VsbCk7Ci0JCWdldF9wb3dlciA9IE5VTEw7CisJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGF6eCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRhX2ludGVsICpoZGEgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGhkYV9pbnRlbCwgY2hpcCk7CisJc3RydWN0IGk5MTVfYXVkaW9fY29tcG9uZW50ICphY29tcCA9ICZoZGEtPmF1ZGlvX2NvbXBvbmVudDsKKworCW1vZHVsZV9wdXQoYWNvbXAtPm9wcy0+b3duZXIpOworCWNvbXBvbmVudF91bmJpbmRfYWxsKGRldiwgYWNvbXApOworCVdBUk5fT04oYWNvbXAtPm9wcyB8fCBhY29tcC0+ZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21wb25lbnRfbWFzdGVyX29wcyBoZGFfY29tcG9uZW50X21hc3Rlcl9vcHMgPSB7CisJLmJpbmQgPSBoZGFfY29tcG9uZW50X21hc3Rlcl9iaW5kLAorCS51bmJpbmQgPSBoZGFfY29tcG9uZW50X21hc3Rlcl91bmJpbmQsCit9OworCitzdGF0aWMgaW50IGhkYV9jb21wb25lbnRfbWFzdGVyX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwkvKiBpOTE1IGlzIHRoZSBvbmx5IHN1cHBvcnRlZCBjb21wb25lbnQgKi8KKwlyZXR1cm4gIXN0cmNtcChkZXYtPmRyaXZlci0+bmFtZSwgImk5MTUiKTsKK30KKworaW50IGhkYV9pOTE1X2luaXQoc3RydWN0IGhkYV9pbnRlbCAqaGRhKQoreworCXN0cnVjdCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaGRhLT5jaGlwLnBjaS0+ZGV2OworCXN0cnVjdCBpOTE1X2F1ZGlvX2NvbXBvbmVudCAqYWNvbXAgPSAmaGRhLT5hdWRpb19jb21wb25lbnQ7CisJaW50IHJldDsKKworCWNvbXBvbmVudF9tYXRjaF9hZGQoZGV2LCAmbWF0Y2gsIGhkYV9jb21wb25lbnRfbWFzdGVyX21hdGNoLCBoZGEpOworCXJldCA9IGNvbXBvbmVudF9tYXN0ZXJfYWRkX3dpdGhfbWF0Y2goZGV2LCAmaGRhX2NvbXBvbmVudF9tYXN0ZXJfb3BzLAorCQkJCQkgICAgICBtYXRjaCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2VycjsKKworCS8qCisJICogQXRtLCB3ZSBkb24ndCBzdXBwb3J0IGRlZmVycmluZyB0aGUgY29tcG9uZW50IGJpbmRpbmcsIHNvIG1ha2Ugc3VyZQorCSAqIGk5MTUgaXMgbG9hZGVkIGFuZCB0aGF0IHRoZSBiaW5kaW5nIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMuCisJICovCisJcmVxdWVzdF9tb2R1bGUoImk5MTUiKTsKKworCWlmICghYWNvbXAtPm9wcykgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9tYXN0ZXJfZGVsOwogCX0KLQlpZiAocHV0X3Bvd2VyKSB7Ci0JCXN5bWJvbF9wdXQoaTkxNV9yZWxlYXNlX3Bvd2VyX3dlbGwpOwotCQlwdXRfcG93ZXIgPSBOVUxMOwotCX0KLQlpZiAoZ2V0X2NkY2xrKSB7Ci0JCXN5bWJvbF9wdXQoaTkxNV9nZXRfY2RjbGtfZnJlcSk7Ci0JCWdldF9jZGNsayA9IE5VTEw7Ci0JfQorCisJZGV2X2RiZyhkZXYsICJib3VuZCB0byBpOTE1IGNvbXBvbmVudCBtYXN0ZXJcbiIpOworCisJcmV0dXJuIDA7CitvdXRfbWFzdGVyX2RlbDoKKwljb21wb25lbnRfbWFzdGVyX2RlbChkZXYsICZoZGFfY29tcG9uZW50X21hc3Rlcl9vcHMpOworb3V0X2VycjoKKwlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQgaTkxNSBjb21wb25lbnQgbWFzdGVyICglZClcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaGRhX2k5MTVfZXhpdChzdHJ1Y3QgaGRhX2ludGVsICpoZGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmhkYS0+Y2hpcC5wY2ktPmRldjsKKworCWNvbXBvbmVudF9tYXN0ZXJfZGVsKGRldiwgJmhkYV9jb21wb25lbnRfbWFzdGVyX29wcyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2k5MTUuaCBiL3NvdW5kL3BjaS9oZGEvaGRhX2k5MTUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYwNzJjNi4uMDAwMDAwMAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pOTE1LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKLSAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiAgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAqICBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkKLSAqICBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotI2lmbmRlZiBfX1NPVU5EX0hEQV9JOTE1X0gKLSNkZWZpbmUgX19TT1VORF9IREFfSTkxNV9ICi0KLSNpZmRlZiBDT05GSUdfU05EX0hEQV9JOTE1Ci1pbnQgaGRhX2Rpc3BsYXlfcG93ZXIoYm9vbCBlbmFibGUpOwotdm9pZCBoYXN3ZWxsX3NldF9iY2xrKHN0cnVjdCBhenggKmNoaXApOwotaW50IGhkYV9pOTE1X2luaXQodm9pZCk7Ci1pbnQgaGRhX2k5MTVfZXhpdCh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBoZGFfZGlzcGxheV9wb3dlcihib29sIGVuYWJsZSkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIGhhc3dlbGxfc2V0X2JjbGsoc3RydWN0IGF6eCAqY2hpcCkgeyByZXR1cm47IH0KLXN0YXRpYyBpbmxpbmUgaW50IGhkYV9pOTE1X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLXN0YXRpYyBpbmxpbmUgaW50IGhkYV9pOTE1X2V4aXQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IGQ0MjZhMGIuLjM2ZDJmMjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtNjMsNyArNjMsNyBAQAogI2luY2x1ZGUgImhkYV9jb2RlYy5oIgogI2luY2x1ZGUgImhkYV9jb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiaGRhX3ByaXYuaCIKLSNpbmNsdWRlICJoZGFfaTkxNS5oIgorI2luY2x1ZGUgImhkYV9pbnRlbC5oIgogCiAvKiBwb3NpdGlvbiBmaXggbW9kZSAqLwogZW51bSB7CkBAIC0zNTQsMzEgKzM1NCw2IEBACiAJW0FaWF9EUklWRVJfR0VORVJJQ10gPSAiSEQtQXVkaW8gR2VuZXJpYyIsCiB9OwogCi1zdHJ1Y3QgaGRhX2ludGVsIHsKLQlzdHJ1Y3QgYXp4IGNoaXA7Ci0KLQkvKiBmb3IgcGVuZGluZyBpcnFzICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IGlycV9wZW5kaW5nX3dvcms7Ci0KLQkvKiBzeW5jIHByb2JpbmcgKi8KLQlzdHJ1Y3QgY29tcGxldGlvbiBwcm9iZV93YWl0OwotCXN0cnVjdCB3b3JrX3N0cnVjdCBwcm9iZV93b3JrOwotCi0JLyogY2FyZCBsaXN0IChmb3IgcG93ZXJfc2F2ZSB0cmlnZ2VyKSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQotCS8qIGV4dHJhIGZsYWdzICovCi0JdW5zaWduZWQgaW50IGlycV9wZW5kaW5nX3dhcm5lZDoxOwotCi0JLyogVkdBLXN3aXRjaGVyb28gc2V0dXAgKi8KLQl1bnNpZ25lZCBpbnQgdXNlX3ZnYV9zd2l0Y2hlcm9vOjE7Ci0JdW5zaWduZWQgaW50IHZnYV9zd2l0Y2hlcm9vX3JlZ2lzdGVyZWQ6MTsKLQl1bnNpZ25lZCBpbnQgaW5pdF9mYWlsZWQ6MTsgLyogZGVsYXllZCBpbml0IGZhaWxlZCAqLwotCi0JLyogc2Vjb25kYXJ5IHBvd2VyIGRvbWFpbiBmb3IgaGRtaSBhdWRpbyB1bmRlciB2Z2EgZGV2aWNlICovCi0Jc3RydWN0IGRldl9wbV9kb21haW4gaGRtaV9wbV9kb21haW47Ci19OwotCiAjaWZkZWYgQ09ORklHX1g4Ngogc3RhdGljIHZvaWQgX19tYXJrX3BhZ2VzX3djKHN0cnVjdCBhenggKmNoaXAsIHN0cnVjdCBzbmRfZG1hX2J1ZmZlciAqZG1hYiwgYm9vbCBvbikKIHsKQEAgLTc5NSw3ICs3NzAsNiBAQAogICovCiBzdGF0aWMgaW50IGF6eF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBhenggKmNoaXA7CiAJc3RydWN0IGhkYV9pbnRlbCAqaGRhOwpAQCAtODI0LDExICs3OTgsOCBAQAogCiAJaWYgKGNoaXAtPm1zaSkKIAkJcGNpX2Rpc2FibGVfbXNpKGNoaXAtPnBjaSk7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0JcGNpX3NhdmVfc3RhdGUocGNpKTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlpZiAoY2hpcC0+ZHJpdmVyX2NhcHMgJiBBWlhfRENBUFNfSTkxNV9QT1dFUldFTEwpCi0JCWhkYV9kaXNwbGF5X3Bvd2VyKGZhbHNlKTsKKwkJaGRhX2Rpc3BsYXlfcG93ZXIoaGRhLCBmYWxzZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg0OCwxOCArODE5LDkgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoY2hpcC0+ZHJpdmVyX2NhcHMgJiBBWlhfRENBUFNfSTkxNV9QT1dFUldFTEwpIHsKLQkJaGRhX2Rpc3BsYXlfcG93ZXIodHJ1ZSk7Ci0JCWhhc3dlbGxfc2V0X2JjbGsoY2hpcCk7CisJCWhkYV9kaXNwbGF5X3Bvd2VyKGhkYSwgdHJ1ZSk7CisJCWhhc3dlbGxfc2V0X2JjbGsoaGRhKTsKIAl9Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKLQkJZGV2X2VycihjaGlwLT5jYXJkLT5kZXYsCi0JCQkicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCBkaXNhYmxpbmcgZGV2aWNlXG4iKTsKLQkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXBjaV9zZXRfbWFzdGVyKHBjaSk7CiAJaWYgKGNoaXAtPm1zaSkKIAkJaWYgKHBjaV9lbmFibGVfbXNpKHBjaSkgPCAwKQogCQkJY2hpcC0+bXNpID0gMDsKQEAgLTkwMSw3ICs4NjMsNyBAQAogCWF6eF9lbnRlcl9saW5rX3Jlc2V0KGNoaXApOwogCWF6eF9jbGVhcl9pcnFfcGVuZGluZyhjaGlwKTsKIAlpZiAoY2hpcC0+ZHJpdmVyX2NhcHMgJiBBWlhfRENBUFNfSTkxNV9QT1dFUldFTEwpCi0JCWhkYV9kaXNwbGF5X3Bvd2VyKGZhbHNlKTsKKwkJaGRhX2Rpc3BsYXlfcG93ZXIoaGRhLCBmYWxzZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkyNyw4ICs4ODksOCBAQAogCQlyZXR1cm4gMDsKIAogCWlmIChjaGlwLT5kcml2ZXJfY2FwcyAmIEFaWF9EQ0FQU19JOTE1X1BPV0VSV0VMTCkgewotCQloZGFfZGlzcGxheV9wb3dlcih0cnVlKTsKLQkJaGFzd2VsbF9zZXRfYmNsayhjaGlwKTsKKwkJaGRhX2Rpc3BsYXlfcG93ZXIoaGRhLCB0cnVlKTsKKwkJaGFzd2VsbF9zZXRfYmNsayhoZGEpOwogCX0KIAogCS8qIFJlYWQgU1RBVEVTVFMgYmVmb3JlIGNvbnRyb2xsZXIgcmVzZXQgKi8KQEAgLTExMzgsOCArMTEwMCw3IEBACiAJCWZyZWVfaXJxKGNoaXAtPmlycSwgKHZvaWQqKWNoaXApOwogCWlmIChjaGlwLT5tc2kpCiAJCXBjaV9kaXNhYmxlX21zaShjaGlwLT5wY2kpOwotCWlmIChjaGlwLT5yZW1hcF9hZGRyKQotCQlpb3VubWFwKGNoaXAtPnJlbWFwX2FkZHIpOworCWlvdW5tYXAoY2hpcC0+cmVtYXBfYWRkcik7CiAKIAlhenhfZnJlZV9zdHJlYW1fcGFnZXMoY2hpcCk7CiAJaWYgKGNoaXAtPnJlZ2lvbl9yZXF1ZXN0ZWQpCkBAIC0xMTUwLDggKzExMTEsOCBAQAogCXJlbGVhc2VfZmlybXdhcmUoY2hpcC0+ZncpOwogI2VuZGlmCiAJaWYgKGNoaXAtPmRyaXZlcl9jYXBzICYgQVpYX0RDQVBTX0k5MTVfUE9XRVJXRUxMKSB7Ci0JCWhkYV9kaXNwbGF5X3Bvd2VyKGZhbHNlKTsKLQkJaGRhX2k5MTVfZXhpdCgpOworCQloZGFfZGlzcGxheV9wb3dlcihoZGEsIGZhbHNlKTsKKwkJaGRhX2k5MTVfZXhpdChoZGEpOwogCX0KIAlrZnJlZShoZGEpOwogCkBAIC0xNjI5LDggKzE1OTAsMTIgQEAKIAkvKiBpbml0aWFsaXplIGNoaXAgKi8KIAlhenhfaW5pdF9wY2koY2hpcCk7CiAKLQlpZiAoY2hpcC0+ZHJpdmVyX2NhcHMgJiBBWlhfRENBUFNfSTkxNV9QT1dFUldFTEwpCi0JCWhhc3dlbGxfc2V0X2JjbGsoY2hpcCk7CisJaWYgKGNoaXAtPmRyaXZlcl9jYXBzICYgQVpYX0RDQVBTX0k5MTVfUE9XRVJXRUxMKSB7CisJCXN0cnVjdCBoZGFfaW50ZWwgKmhkYTsKKworCQloZGEgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGhkYV9pbnRlbCwgY2hpcCk7CisJCWhhc3dlbGxfc2V0X2JjbGsoaGRhKTsKKwl9CiAKIAlhenhfaW5pdF9jaGlwKGNoaXAsIChwcm9iZV9vbmx5W2Rldl0gJiAyKSA9PSAwKTsKIApAQCAtMTkxMCwxMyArMTg3NSwxMCBAQAogCS8qIFJlcXVlc3QgcG93ZXIgd2VsbCBmb3IgSGFzd2VsbCBIREEgY29udHJvbGxlciBhbmQgY29kZWMgKi8KIAlpZiAoY2hpcC0+ZHJpdmVyX2NhcHMgJiBBWlhfRENBUFNfSTkxNV9QT1dFUldFTEwpIHsKICNpZmRlZiBDT05GSUdfU05EX0hEQV9JOTE1Ci0JCWVyciA9IGhkYV9pOTE1X2luaXQoKTsKLQkJaWYgKGVyciA8IDApIHsKLQkJCWRldl9lcnIoY2hpcC0+Y2FyZC0+ZGV2LAotCQkJCSJFcnJvciByZXF1ZXN0IHBvd2VyLXdlbGwgZnJvbSBpOTE1XG4iKTsKKwkJZXJyID0gaGRhX2k5MTVfaW5pdChoZGEpOworCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gb3V0X2ZyZWU7Ci0JCX0KLQkJZXJyID0gaGRhX2Rpc3BsYXlfcG93ZXIodHJ1ZSk7CisJCWVyciA9IGhkYV9kaXNwbGF5X3Bvd2VyKGhkYSwgdHJ1ZSk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlkZXZfZXJyKGNoaXAtPmNhcmQtPmRldiwKIAkJCQkiQ2Fubm90IHR1cm4gb24gZGlzcGxheSBwb3dlciBvbiBpOTE1XG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmggYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ODYxMTgKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqICBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OQorICogIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICovCisjaWZuZGVmIF9fU09VTkRfSERBX0lOVEVMX0gKKyNkZWZpbmUgX19TT1VORF9IREFfSU5URUxfSAorCisjaW5jbHVkZSA8ZHJtL2k5MTVfY29tcG9uZW50Lmg+CisjaW5jbHVkZSAiaGRhX3ByaXYuaCIKKworc3RydWN0IGhkYV9pbnRlbCB7CisJc3RydWN0IGF6eCBjaGlwOworCisJLyogZm9yIHBlbmRpbmcgaXJxcyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBpcnFfcGVuZGluZ193b3JrOworCisJLyogc3luYyBwcm9iaW5nICovCisJc3RydWN0IGNvbXBsZXRpb24gcHJvYmVfd2FpdDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHJvYmVfd29yazsKKworCS8qIGNhcmQgbGlzdCAoZm9yIHBvd2VyX3NhdmUgdHJpZ2dlcikgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwkvKiBleHRyYSBmbGFncyAqLworCXVuc2lnbmVkIGludCBpcnFfcGVuZGluZ193YXJuZWQ6MTsKKworCS8qIFZHQS1zd2l0Y2hlcm9vIHNldHVwICovCisJdW5zaWduZWQgaW50IHVzZV92Z2Ffc3dpdGNoZXJvbzoxOworCXVuc2lnbmVkIGludCB2Z2Ffc3dpdGNoZXJvb19yZWdpc3RlcmVkOjE7CisJdW5zaWduZWQgaW50IGluaXRfZmFpbGVkOjE7IC8qIGRlbGF5ZWQgaW5pdCBmYWlsZWQgKi8KKworCS8qIHNlY29uZGFyeSBwb3dlciBkb21haW4gZm9yIGhkbWkgYXVkaW8gdW5kZXIgdmdhIGRldmljZSAqLworCXN0cnVjdCBkZXZfcG1fZG9tYWluIGhkbWlfcG1fZG9tYWluOworCisJLyogaTkxNSBjb21wb25lbnQgaW50ZXJmYWNlICovCisJc3RydWN0IGk5MTVfYXVkaW9fY29tcG9uZW50IGF1ZGlvX2NvbXBvbmVudDsKK307CisKKyNpZmRlZiBDT05GSUdfU05EX0hEQV9JOTE1CitpbnQgaGRhX2Rpc3BsYXlfcG93ZXIoc3RydWN0IGhkYV9pbnRlbCAqaGRhLCBib29sIGVuYWJsZSk7Cit2b2lkIGhhc3dlbGxfc2V0X2JjbGsoc3RydWN0IGhkYV9pbnRlbCAqaGRhKTsKK2ludCBoZGFfaTkxNV9pbml0KHN0cnVjdCBoZGFfaW50ZWwgKmhkYSk7CitpbnQgaGRhX2k5MTVfZXhpdChzdHJ1Y3QgaGRhX2ludGVsICpoZGEpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGhkYV9kaXNwbGF5X3Bvd2VyKHN0cnVjdCBoZGFfaW50ZWwgKmhkYSwgYm9vbCBlbmFibGUpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgaGFzd2VsbF9zZXRfYmNsayhzdHJ1Y3QgaGRhX2ludGVsICpoZGEpIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIGludCBoZGFfaTkxNV9pbml0KHN0cnVjdCBoZGFfaW50ZWwgKmhkYSkKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGhkYV9pOTE1X2V4aXQoc3RydWN0IGhkYV9pbnRlbCAqaGRhKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfcHJpdi5oIGIvc291bmQvcGNpL2hkYS9oZGFfcHJpdi5oCmluZGV4IDE2NmUzZTguLmRhZjQ1ODIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX3ByaXYuaAorKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9wcml2LmgKQEAgLTE1LDcgKzE1LDcgQEAKICNpZm5kZWYgX19TT1VORF9IREFfUFJJVl9ICiAjZGVmaW5lIF9fU09VTkRfSERBX1BSSVZfSAogCi0jaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lY291bnRlci5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfYW5hbG9nLmMKaW5kZXggYTlkNzhlMi4uZDI4NTkwNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9hbmFsb2cuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2FuYWxvZy5jCkBAIC03MzksMzkgKzczOSw2IEBACiAgKiAgICAgIEUvRiBxdWFkIG1pYyBhcnJheQogICovCiAKLSNpZmRlZiBFTkFCTEVfQURfU1RBVElDX1FVSVJLUwotc3RhdGljIGludCBhZDE5OHhfY2hfbW9kZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAotCQkJICAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCi17Ci0Jc3RydWN0IGhkYV9jb2RlYyAqY29kZWMgPSBzbmRfa2NvbnRyb2xfY2hpcChrY29udHJvbCk7Ci0Jc3RydWN0IGFkMTk4eF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JcmV0dXJuIHNuZF9oZGFfY2hfbW9kZV9pbmZvKGNvZGVjLCB1aW5mbywgc3BlYy0+Y2hhbm5lbF9tb2RlLAotCQkJCSAgICBzcGVjLT5udW1fY2hhbm5lbF9tb2RlKTsKLX0KLQotc3RhdGljIGludCBhZDE5OHhfY2hfbW9kZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCi0JCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKLXsKLQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYyA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKLQlzdHJ1Y3QgYWQxOTh4X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlyZXR1cm4gc25kX2hkYV9jaF9tb2RlX2dldChjb2RlYywgdWNvbnRyb2wsIHNwZWMtPmNoYW5uZWxfbW9kZSwKLQkJCQkgICBzcGVjLT5udW1fY2hhbm5lbF9tb2RlLCBzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMpOwotfQotCi1zdGF0aWMgaW50IGFkMTk4eF9jaF9tb2RlX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKLQkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQotewotCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOwotCXN0cnVjdCBhZDE5OHhfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWludCBlcnIgPSBzbmRfaGRhX2NoX21vZGVfcHV0KGNvZGVjLCB1Y29udHJvbCwgc3BlYy0+Y2hhbm5lbF9tb2RlLAotCQkJCSAgICAgIHNwZWMtPm51bV9jaGFubmVsX21vZGUsCi0JCQkJICAgICAgJnNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyk7Ci0JaWYgKGVyciA+PSAwICYmIHNwZWMtPm5lZWRfZGFjX2ZpeCkKLQkJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgLyAyOwotCXJldHVybiBlcnI7Ci19Ci0jZW5kaWYgLyogRU5BQkxFX0FEX1NUQVRJQ19RVUlSS1MgKi8KLQogc3RhdGljIGludCBhZDE5ODhfYXV0b19zbXV4X2VudW1faW5mbyhzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQkgICAgICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQogewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwppbmRleCA2NWYxZjRlLi5kZGI5MzA4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2phY2suaD4KICNpbmNsdWRlICJoZGFfY29kZWMuaCIKQEAgLTEyMCw2ICsxMjEsNyBAQAogCWhkYV9uaWRfdCBwbGxfbmlkOwogCXVuc2lnbmVkIGludCBwbGxfY29lZl9pZHgsIHBsbF9jb2VmX2JpdDsKIAl1bnNpZ25lZCBpbnQgY29lZjA7CisJc3RydWN0IGlucHV0X2RldiAqa2JfZGV2OwogfTsKIAogLyoKQEAgLTM0NzIsNiArMzQ3NCw3OSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgZ3BpbzJfbWljX2hvdGtleV9ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICBzdHJ1Y3QgaGRhX2phY2tfY2FsbGJhY2sgKmV2ZW50KQoreworCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJLyogR1BJTzIganVzdCB0b2dnbGVzIG9uIGEga2V5cHJlc3Mva2V5cmVsZWFzZSBjeWNsZS4gVGhlcmVmb3JlCisJICAgc2VuZCBib3RoIGtleSBvbiBhbmQga2V5IG9mZiBldmVudCBmb3IgZXZlcnkgaW50ZXJydXB0LiAqLworCWlucHV0X3JlcG9ydF9rZXkoc3BlYy0+a2JfZGV2LCBLRVlfTUlDTVVURSwgMSk7CisJaW5wdXRfc3luYyhzcGVjLT5rYl9kZXYpOworCWlucHV0X3JlcG9ydF9rZXkoc3BlYy0+a2JfZGV2LCBLRVlfTUlDTVVURSwgMCk7CisJaW5wdXRfc3luYyhzcGVjLT5rYl9kZXYpOworfQorCitzdGF0aWMgdm9pZCBhbGMyODBfZml4dXBfaHBfZ3BpbzJfbWljX2hvdGtleShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgICBjb25zdCBzdHJ1Y3QgaGRhX2ZpeHVwICpmaXgsIGludCBhY3Rpb24pCit7CisJLyogR1BJTzEgPSBzZXQgYWNjb3JkaW5nIHRvIFNLVSBleHRlcm5hbCBhbXAKKwkgICBHUElPMiA9IG1pYyBtdXRlIGhvdGtleQorCSAgIEdQSU8zID0gbXV0ZSBMRUQKKwkgICBHUElPNCA9IG1pYyBtdXRlIExFRCAqLworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgZ3Bpb19pbml0W10gPSB7CisJCXsgMHgwMSwgQUNfVkVSQl9TRVRfR1BJT19NQVNLLCAweDFlIH0sCisJCXsgMHgwMSwgQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIDB4MWEgfSwKKwkJeyAweDAxLCBBQ19WRVJCX1NFVF9HUElPX0RBVEEsIDB4MDIgfSwKKwkJe30KKwl9OworCisJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlpZiAoYWN0aW9uID09IEhEQV9GSVhVUF9BQ1RfUFJFX1BST0JFKSB7CisJCXNwZWMtPmtiX2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCQlpZiAoIXNwZWMtPmtiX2RldikgeworCQkJY29kZWNfZXJyKGNvZGVjLCAiT3V0IG9mIG1lbW9yeSAoaW5wdXRfYWxsb2NhdGVfZGV2aWNlKVxuIik7CisJCQlyZXR1cm47CisJCX0KKwkJc3BlYy0+a2JfZGV2LT5uYW1lID0gIk1pY3JvcGhvbmUgTXV0ZSBCdXR0b24iOworCQlzcGVjLT5rYl9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKTsKKwkJc3BlYy0+a2JfZGV2LT5rZXliaXRbQklUX1dPUkQoS0VZX01JQ01VVEUpXSA9IEJJVF9NQVNLKEtFWV9NSUNNVVRFKTsKKwkJaWYgKGlucHV0X3JlZ2lzdGVyX2RldmljZShzcGVjLT5rYl9kZXYpKSB7CisJCQljb2RlY19lcnIoY29kZWMsICJpbnB1dF9yZWdpc3Rlcl9kZXZpY2UgZmFpbGVkXG4iKTsKKwkJCWlucHV0X2ZyZWVfZGV2aWNlKHNwZWMtPmtiX2Rldik7CisJCQlzcGVjLT5rYl9kZXYgPSBOVUxMOworCQkJcmV0dXJuOworCQl9CisKKwkJc25kX2hkYV9hZGRfdmVyYnMoY29kZWMsIGdwaW9faW5pdCk7CisJCXNuZF9oZGFfY29kZWNfd3JpdGVfY2FjaGUoY29kZWMsIGNvZGVjLT5hZmcsIDAsCisJCQkJCSAgQUNfVkVSQl9TRVRfR1BJT19VTlNPTElDSVRFRF9SU1BfTUFTSywgMHgwNCk7CisJCXNuZF9oZGFfamFja19kZXRlY3RfZW5hYmxlX2NhbGxiYWNrKGNvZGVjLCBjb2RlYy0+YWZnLAorCQkJCQkJICAgIGdwaW8yX21pY19ob3RrZXlfZXZlbnQpOworCisJCXNwZWMtPmdlbi52bWFzdGVyX211dGUuaG9vayA9IGFsY19maXh1cF9ncGlvX211dGVfaG9vazsKKwkJc3BlYy0+Z2VuLmNhcF9zeW5jX2hvb2sgPSBhbGNfZml4dXBfZ3Bpb19taWNfbXV0ZV9ob29rOworCQlzcGVjLT5ncGlvX2xlZCA9IDA7CisJCXNwZWMtPm11dGVfbGVkX3BvbGFyaXR5ID0gMDsKKwkJc3BlYy0+Z3Bpb19tdXRlX2xlZF9tYXNrID0gMHgwODsKKwkJc3BlYy0+Z3Bpb19taWNfbGVkX21hc2sgPSAweDEwOworCQlyZXR1cm47CisJfQorCisJaWYgKCFzcGVjLT5rYl9kZXYpCisJCXJldHVybjsKKworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBIREFfRklYVVBfQUNUX1BST0JFOgorCQlzcGVjLT5pbml0X2FtcCA9IEFMQ19JTklUX0RFRkFVTFQ7CisJCWJyZWFrOworCWNhc2UgSERBX0ZJWFVQX0FDVF9GUkVFOgorCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShzcGVjLT5rYl9kZXYpOworCQlzcGVjLT5rYl9kZXYgPSBOVUxMOworCX0KK30KKwogc3RhdGljIHZvaWQgYWxjMjY5X2ZpeHVwX2hwX2xpbmUxX21pYzFfbGVkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAogCQkJCWNvbnN0IHN0cnVjdCBoZGFfZml4dXAgKmZpeCwgaW50IGFjdGlvbikKIHsKQEAgLTQzNDEsNiArNDQxNiw4IEBACiAJQUxDMjgyX0ZJWFVQX0FTUElSRV9WNV9QSU5TLAogCUFMQzI4MF9GSVhVUF9IUF9HUElPNCwKIAlBTEMyODZfRklYVVBfSFBfR1BJT19MRUQsCisJQUxDMjgwX0ZJWFVQX0hQX0dQSU8yX01JQ19IT1RLRVksCisJQUxDMjgwX0ZJWFVQX0hQX0RPQ0tfUElOUywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX2ZpeHVwIGFsYzI2OV9maXh1cHNbXSA9IHsKQEAgLTQ4MTQsNiArNDg5MSwyMSBAQAogCQkudHlwZSA9IEhEQV9GSVhVUF9GVU5DLAogCQkudi5mdW5jID0gYWxjMjg2X2ZpeHVwX2hwX2dwaW9fbGVkLAogCX0sCisJW0FMQzI4MF9GSVhVUF9IUF9HUElPMl9NSUNfSE9US0VZXSA9IHsKKwkJLnR5cGUgPSBIREFfRklYVVBfRlVOQywKKwkJLnYuZnVuYyA9IGFsYzI4MF9maXh1cF9ocF9ncGlvMl9taWNfaG90a2V5LAorCX0sCisJW0FMQzI4MF9GSVhVUF9IUF9ET0NLX1BJTlNdID0geworCQkudHlwZSA9IEhEQV9GSVhVUF9QSU5TLAorCQkudi5waW5zID0gKGNvbnN0IHN0cnVjdCBoZGFfcGludGJsW10pIHsKKwkJCXsgMHgxYiwgMHgyMTAxMTAyMCB9LCAvKiBsaW5lLW91dCAqLworCQkJeyAweDFhLCAweDAxYTE5MDNjIH0sIC8qIGhlYWRzZXQgbWljICovCisJCQl7IDB4MTgsIDB4MjE4MTEwM2YgfSwgLyogbGluZS1pbiAqLworCQkJeyB9LAorCQl9LAorCQkuY2hhaW5lZCA9IHRydWUsCisJCS5jaGFpbl9pZCA9IEFMQzI4MF9GSVhVUF9IUF9HUElPNAorCX0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjY5X2ZpeHVwX3RibFtdID0gewpAQCAtNDg0Myw2ICs0OTM1LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgxNTg2LCAiSFAiLCBBTEMyNjlfRklYVVBfSFBfTVVURV9MRURfTUlDMiksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MThlNiwgIkhQIiwgQUxDMjY5X0ZJWFVQX0hQX0dQSU9fTEVEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyMThiLCAiSFAiLCBBTEMyNjlfRklYVVBfTElNSVRfSU5UX01JQ19CT09TVF9NVVRFX0xFRCksCisJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjI1ZiwgIkhQIiwgQUxDMjgwX0ZJWFVQX0hQX0dQSU8yX01JQ19IT1RLRVkpLAogCS8qIEFMQzI4MiAqLwogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDIyMTAsICJIUCIsIEFMQzI2OV9GSVhVUF9IUF9NVVRFX0xFRF9NSUMxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyMjE0LCAiSFAiLCBBTEMyNjlfRklYVVBfSFBfTVVURV9MRURfTUlDMSksCkBAIC00ODU2LDYgKzQ5NDksOCBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDIyNmIsICJIUCIsIEFMQzI2OV9GSVhVUF9IUF9NVVRFX0xFRF9NSUMxKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyMjZlLCAiSFAiLCBBTEMyNjlfRklYVVBfSFBfTVVURV9MRURfTUlDMSksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjI3MSwgIkhQIiwgQUxDMjg2X0ZJWFVQX0hQX0dQSU9fTEVEKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyMjcyLCAiSFAiLCBBTEMyODBfRklYVVBfSFBfRE9DS19QSU5TKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyMjczLCAiSFAiLCBBTEMyODBfRklYVVBfSFBfRE9DS19QSU5TKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgyMjllLCAiSFAiLCBBTEMyNjlfRklYVVBfSFBfTVVURV9MRURfTUlDMSksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MjJiMiwgIkhQIiwgQUxDMjY5X0ZJWFVQX0hQX01VVEVfTEVEX01JQzEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDNjLCAweDIyYjcsICJIUCIsIEFMQzI2OV9GSVhVUF9IUF9NVVRFX0xFRF9NSUMxKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYwppbmRleCA2MDVkMTQwLi42ZDM2YzViIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCkBAIC05OSw2ICs5OSw3IEBACiAJU1RBQ19IUF9FTlZZX0JBU1MsCiAJU1RBQ19IUF9CTkIxM19FUSwKIAlTVEFDX0hQX0VOVllfVFNfQkFTUywKKwlTVEFDXzkySEQ4M1hYWF9HUElPMTBfRUFQRCwKIAlTVEFDXzkySEQ4M1hYWF9NT0RFTFMKIH07CiAKQEAgLTIxNDEsNiArMjE0MiwxOSBAQAogCQlzcGVjLT5oZWFkc2V0X2phY2sgPSAxOwogfQogCitzdGF0aWMgdm9pZCBzdGFjOTJoZDgzeHh4X2ZpeHVwX2dwaW8xMF9lYXBkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQkgICAgY29uc3Qgc3RydWN0IGhkYV9maXh1cCAqZml4LAorCQkJCQkgICAgaW50IGFjdGlvbikKK3sKKwlzdHJ1Y3Qgc2lnbWF0ZWxfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJaWYgKGFjdGlvbiAhPSBIREFfRklYVVBfQUNUX1BSRV9QUk9CRSkKKwkJcmV0dXJuOworCXNwZWMtPmVhcGRfbWFzayA9IHNwZWMtPmdwaW9fbWFzayA9IHNwZWMtPmdwaW9fZGlyID0KKwkJc3BlYy0+Z3Bpb19kYXRhID0gMHgxMDsKKwlzcGVjLT5lYXBkX3N3aXRjaCA9IDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGRhX3ZlcmIgaHBfYm5iMTNfZXFfdmVyYnNbXSA9IHsKIAkvKiA0NC4xS0h6IGJhc2UgKi8KIAl7IDB4MjIsIDB4N0E2LCAweDNFIH0sCkBAIC0yNjU2LDYgKzI2NzAsMTAgQEAKIAkJCXt9CiAJCX0sCiAJfSwKKwlbU1RBQ185MkhEODNYWFhfR1BJTzEwX0VBUERdID0geworCQkudHlwZSA9IEhEQV9GSVhVUF9GVU5DLAorCQkudi5mdW5jID0gc3RhYzkyaGQ4M3h4eF9maXh1cF9ncGlvMTBfZWFwZCwKKwl9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfbW9kZWxfZml4dXAgc3RhYzkyaGQ4M3h4eF9tb2RlbHNbXSA9IHsKQEAgLTI4NjEsNiArMjg3OSw4IEBACiAJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX0hQLCAweDE0OGEsCiAJCSAgICAgICJIUCBNaW5pIiwgU1RBQ185MkhEODNYWFhfSFBfTEVEKSwKIAlTTkRfUENJX1FVSVJLX1ZFTkRPUihQQ0lfVkVORE9SX0lEX0hQLCAiSFAiLCBTVEFDXzkySEQ4M1hYWF9IUCksCisJU05EX1BDSV9RVUlSSyhQQ0lfVkVORE9SX0lEX1RPU0hJQkEsIDB4ZmE5MSwKKwkJICAgICAgIlRvc2hpYmEgU2F0ZWxsaXRlIFM1MEQiLCBTVEFDXzkySEQ4M1hYWF9HUElPMTBfRUFQRCksCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvYWs0eHh4LmMgYi9zb3VuZC9wY2kvaWNlMTcxMi9hazR4eHguYwppbmRleCAzOTgxODIzLi4xNzllZjdhIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9hazR4eHguYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9hazR4eHguYwpAQCAtMjEsNyArMjEsNyBAQAogICoKICAqLyAgICAgIAogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYyBiL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MTIuYwppbmRleCBiMDM5YjQ2Li5mN2IxNTIzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzEyLmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcxMi5jCkBAIC04ODAsMTMgKzg4MCwxMSBAQAogCS5wb2ludGVyID0Jc25kX2ljZTE3MTJfY2FwdHVyZV9wb2ludGVyLAogfTsKIAotc3RhdGljIGludCBzbmRfaWNlMTcxMl9wY20oc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK3N0YXRpYyBpbnQgc25kX2ljZTE3MTJfcGNtKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycjsKIAotCWlmIChycGNtKQotCQkqcnBjbSA9IE5VTEw7CiAJZXJyID0gc25kX3BjbV9uZXcoaWNlLT5jYXJkLCAiSUNFMTcxMiBjb25zdW1lciIsIGRldmljZSwgMSwgMSwgJnBjbSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC05MDIsMjIgKzkwMCwxNyBAQAogCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCiAJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoaWNlLT5wY2kpLCA2NCoxMDI0LCA2NCoxMDI0KTsKIAotCWlmIChycGNtKQotCQkqcnBjbSA9IHBjbTsKLQogCWRldl93YXJuKGljZS0+Y2FyZC0+ZGV2LAogCQkgIkNvbnN1bWVyIFBDTSBjb2RlIGRvZXMgbm90IHdvcmsgd2VsbCBhdCB0aGUgbW9tZW50IC0tamtcbiIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc25kX2ljZTE3MTJfcGNtX2RzKHN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCitzdGF0aWMgaW50IHNuZF9pY2UxNzEyX3BjbV9kcyhzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwogCWVyciA9IHNuZF9wY21fbmV3KGljZS0+Y2FyZCwgIklDRTE3MTIgY29uc3VtZXIgKERTKSIsIGRldmljZSwgNiwgMCwgJnBjbSk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CkBAIC05MzIsOSArOTI1LDYgQEAKIAlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAogCQkJCQkgICAgICBzbmRfZG1hX3BjaV9kYXRhKGljZS0+cGNpKSwgNjQqMTAyNCwgMTI4KjEwMjQpOwogCi0JaWYgKHJwY20pCi0JCSpycGNtID0gcGNtOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNjAsMTMgKzEyNTAsMTEgQEAKIAkucG9pbnRlciA9CXNuZF9pY2UxNzEyX2NhcHR1cmVfcHJvX3BvaW50ZXIsCiB9OwogCi1zdGF0aWMgaW50IHNuZF9pY2UxNzEyX3BjbV9wcm9maShzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKQorc3RhdGljIGludCBzbmRfaWNlMTcxMl9wY21fcHJvZmkoc3RydWN0IHNuZF9pY2UxNzEyICppY2UsIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgZXJyOwogCi0JaWYgKHJwY20pCi0JCSpycGNtID0gTlVMTDsKIAllcnIgPSBzbmRfcGNtX25ldyhpY2UtPmNhcmQsICJJQ0UxNzEyIG11bHRpIiwgZGV2aWNlLCAxLCAxLCAmcGNtKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTEyODIsOCArMTI3MCw2IEBACiAJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoaWNlLT5wY2kpLCAyNTYqMTAyNCwgMjU2KjEwMjQpOwogCiAJaWNlLT5wY21fcHJvID0gcGNtOwotCWlmIChycGNtKQotCQkqcnBjbSA9IHBjbTsKIAogCWlmIChpY2UtPmNzODQyNykgewogCQkvKiBhc3NpZ24gY2hhbm5lbHMgdG8gaWVjOTU4ICovCkBAIC0yNjkxLDE0ICsyNjc3LDE0IEBACiAJYyA9ICZub19tYXRjaGVkOwogIF9fZm91bmQ6CiAKLQllcnIgPSBzbmRfaWNlMTcxMl9wY21fcHJvZmkoaWNlLCBwY21fZGV2KyssIE5VTEwpOworCWVyciA9IHNuZF9pY2UxNzEyX3BjbV9wcm9maShpY2UsIHBjbV9kZXYrKyk7CiAJaWYgKGVyciA8IDApIHsKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKIAlpZiAoaWNlX2hhc19jb25fYWM5NyhpY2UpKSB7Ci0JCWVyciA9IHNuZF9pY2UxNzEyX3BjbShpY2UsIHBjbV9kZXYrKywgTlVMTCk7CisJCWVyciA9IHNuZF9pY2UxNzEyX3BjbShpY2UsIHBjbV9kZXYrKyk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQkJcmV0dXJuIGVycjsKQEAgLTI3MjYsNyArMjcxMiw3IEBACiAJfQogCiAJaWYgKGljZV9oYXNfY29uX2FjOTcoaWNlKSkgewotCQllcnIgPSBzbmRfaWNlMTcxMl9wY21fZHMoaWNlLCBwY21fZGV2KyssIE5VTEwpOworCQllcnIgPSBzbmRfaWNlMTcxMl9wY21fZHMoaWNlLCBwY21fZGV2KyspOwogCQlpZiAoZXJyIDwgMCkgewogCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJCXJldHVybiBlcnI7CkBAIC0yNzk4LDcgKzI3ODQsNiBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBzbmRfaWNlMTcxMl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCkBAIC0yODIwLDE2ICsyODA1LDExIEBACiAKIAlpZiAoaWNlLT5wbV9zdXNwZW5kKQogCQlpY2UtPnBtX3N1c3BlbmQoaWNlKTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCXBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX2ljZTE3MTJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCByYXRlOwpAQCAtMjgzNywxNiArMjgxNyw2IEBACiAJaWYgKCFpY2UtPnBtX3N1c3BlbmRfZW5hYmxlZCkKIAkJcmV0dXJuIDA7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXBjaV9zZXRfbWFzdGVyKHBjaSk7Ci0KIAlpZiAoaWNlLT5jdXJfcmF0ZSkKIAkJcmF0ZSA9IGljZS0+Y3VyX3JhdGU7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jIGIvc291bmQvcGNpL2ljZTE3MTIvaWNlMTcyNC5jCmluZGV4IGQ3M2RhMTUuLjBiMjJjMDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2ljZTE3MjQuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9pY2UxNzI0LmMKQEAgLTI3OTgsNyArMjc5OCw2IEBACiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgaW50IHNuZF92dDE3MjRfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIApAQCAtMjgyMSwzMiArMjgyMCwxNyBAQAogCiAJaWYgKGljZS0+cG1fc3VzcGVuZCkKIAkJaWNlLT5wbV9zdXNwZW5kKGljZSk7Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKLQlwY2lfc2F2ZV9zdGF0ZShwY2kpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF92dDE3MjRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbmRfaWNlMTcxMiAqaWNlID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCiAJaWYgKCFpY2UtPnBtX3N1c3BlbmRfZW5hYmxlZCkKIAkJcmV0dXJuIDA7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7Ci0JCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXBjaV9zZXRfbWFzdGVyKHBjaSk7Ci0KIAlzbmRfdnQxNzI0X2NoaXBfcmVzZXQoaWNlKTsKIAogCWlmIChzbmRfdnQxNzI0X2NoaXBfaW5pdChpY2UpIDwgMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvanVsaS5jIGIvc291bmQvcGNpL2ljZTE3MTIvanVsaS5jCmluZGV4IGExNTM2YzEuLjRmMDIxMzQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL2p1bGkuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi9qdWxpLmMKQEAgLTQ5MSwxNSArNDkxLDE3IEBACiAJLyogYWttNDM1OCB1bi1yZXNldCwgdW4tbXV0ZSAqLwogCXNuZF9ha200eHh4X3Jlc2V0KGFrLCAwKTsKIAkvKiByZWluaXQgYWs0MTE0ICovCi0Jc25kX2FrNDExNF9yZWluaXQoc3BlYy0+YWs0MTE0KTsKKwlzbmRfYWs0MTE0X3Jlc3VtZShzcGVjLT5hazQxMTQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGp1bGlfc3VzcGVuZChzdHJ1Y3Qgc25kX2ljZTE3MTIgKmljZSkKIHsKIAlzdHJ1Y3Qgc25kX2FrbTR4eHggKmFrID0gaWNlLT5ha207CisJc3RydWN0IGp1bGlfc3BlYyAqc3BlYyA9IGljZS0+c3BlYzsKIAkvKiBha200MzU4IHJlc2V0IGFuZCBzb2Z0LW11dGUgKi8KIAlzbmRfYWttNHh4eF9yZXNldChhaywgMSk7CisJc25kX2FrNDExNF9zdXNwZW5kKHNwZWMtPmFrNDExNCk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL3dtODc2Ni5jIGIvc291bmQvcGNpL2ljZTE3MTIvd204NzY2LmMKaW5kZXggMjFiMzczYi4uZjdhYzhkNSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvd204NzY2LmMKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvd204NzY2LmMKQEAgLTE4MywyMiArMTgzLDYgQEAKIAlzbmRfd204NzY2X3dyaXRlKHdtLCBXTTg3NjZfUkVHX0lGQ1RSTCwgdmFsIHwgZGFjKTsKIH0KIAotdm9pZCBzbmRfd204NzY2X3NldF9tYXN0ZXJfbW9kZShzdHJ1Y3Qgc25kX3dtODc2NiAqd20sIHUxNiBtb2RlKQotewotCXUxNiB2YWwgPSB3bS0+cmVnc1tXTTg3NjZfUkVHX0RBQ0NUUkwzXSAmIH5XTTg3NjZfREFDM19NU1RSX01BU0s7Ci0KLQltb2RlICY9IFdNODc2Nl9EQUMzX01TVFJfTUFTSzsKLQlzbmRfd204NzY2X3dyaXRlKHdtLCBXTTg3NjZfUkVHX0RBQ0NUUkwzLCB2YWwgfCBtb2RlKTsKLX0KLQotdm9pZCBzbmRfd204NzY2X3NldF9wb3dlcihzdHJ1Y3Qgc25kX3dtODc2NiAqd20sIHUxNiBwb3dlcikKLXsKLQl1MTYgdmFsID0gd20tPnJlZ3NbV004NzY2X1JFR19EQUNDVFJMM10gJiB+V004NzY2X0RBQzNfUE9XRVJfTUFTSzsKLQotCXBvd2VyICY9IFdNODc2Nl9EQUMzX1BPV0VSX01BU0s7Ci0Jc25kX3dtODc2Nl93cml0ZSh3bSwgV004NzY2X1JFR19EQUNDVFJMMywgdmFsIHwgcG93ZXIpOwotfQotCiB2b2lkIHNuZF93bTg3NjZfdm9sdW1lX3Jlc3RvcmUoc3RydWN0IHNuZF93bTg3NjYgKndtKQogewogCXUxNiB2YWwgPSB3bS0+cmVnc1tXTTg3NjZfUkVHX0RBQ1IxXTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pY2UxNzEyL3dtODc2Ni5oIGIvc291bmQvcGNpL2ljZTE3MTIvd204NzY2LmgKaW5kZXggYzExOWY4NC4uMThjOGQ5ZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2ljZTE3MTIvd204NzY2LmgKKysrIGIvc291bmQvcGNpL2ljZTE3MTIvd204NzY2LmgKQEAgLTE1NSw4ICsxNTUsNiBAQAogdm9pZCBzbmRfd204NzY2X2luaXQoc3RydWN0IHNuZF93bTg3NjYgKndtKTsKIHZvaWQgc25kX3dtODc2Nl9yZXN1bWUoc3RydWN0IHNuZF93bTg3NjYgKndtKTsKIHZvaWQgc25kX3dtODc2Nl9zZXRfaWYoc3RydWN0IHNuZF93bTg3NjYgKndtLCB1MTYgZGFjKTsKLXZvaWQgc25kX3dtODc2Nl9zZXRfbWFzdGVyX21vZGUoc3RydWN0IHNuZF93bTg3NjYgKndtLCB1MTYgbW9kZSk7Ci12b2lkIHNuZF93bTg3NjZfc2V0X3Bvd2VyKHN0cnVjdCBzbmRfd204NzY2ICp3bSwgdTE2IHBvd2VyKTsKIHZvaWQgc25kX3dtODc2Nl92b2x1bWVfcmVzdG9yZShzdHJ1Y3Qgc25kX3dtODc2NiAqd20pOwogaW50IHNuZF93bTg3NjZfYnVpbGRfY29udHJvbHMoc3RydWN0IHNuZF93bTg3NjYgKndtKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ljZTE3MTIvd204Nzc2LmMgYi9zb3VuZC9wY2kvaWNlMTcxMi93bTg3NzYuYwppbmRleCBlNjZjMGRhLi5lYmQyZmU0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaWNlMTcxMi93bTg3NzYuYworKysgYi9zb3VuZC9wY2kvaWNlMTcxMi93bTg3NzYuYwpAQCAtNDUyLDIxICs0NTIsNiBAQAogCQlzbmRfd204Nzc2X3dyaXRlKHdtLCBpLCB3bS0+cmVnc1tpXSk7CiB9CiAKLXZvaWQgc25kX3dtODc3Nl9zZXRfZGFjX2lmKHN0cnVjdCBzbmRfd204Nzc2ICp3bSwgdTE2IGRhYykKLXsKLQlzbmRfd204Nzc2X3dyaXRlKHdtLCBXTTg3NzZfUkVHX0RBQ0lGQ1RSTCwgZGFjKTsKLX0KLQotdm9pZCBzbmRfd204Nzc2X3NldF9hZGNfaWYoc3RydWN0IHNuZF93bTg3NzYgKndtLCB1MTYgYWRjKQotewotCXNuZF93bTg3NzZfd3JpdGUod20sIFdNODc3Nl9SRUdfQURDSUZDVFJMLCBhZGMpOwotfQotCi12b2lkIHNuZF93bTg3NzZfc2V0X21hc3Rlcl9tb2RlKHN0cnVjdCBzbmRfd204Nzc2ICp3bSwgdTE2IG1vZGUpCi17Ci0Jc25kX3dtODc3Nl93cml0ZSh3bSwgV004Nzc2X1JFR19NU1RSQ1RSTCwgbW9kZSk7Ci19Ci0KIHZvaWQgc25kX3dtODc3Nl9zZXRfcG93ZXIoc3RydWN0IHNuZF93bTg3NzYgKndtLCB1MTYgcG93ZXIpCiB7CiAJc25kX3dtODc3Nl93cml0ZSh3bSwgV004Nzc2X1JFR19QV1JET1dOLCBwb3dlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaWNlMTcxMi93bTg3NzYuaCBiL3NvdW5kL3BjaS9pY2UxNzEyL3dtODc3Ni5oCmluZGV4IDkzYTJkNjkuLjQyYWNlZjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9pY2UxNzEyL3dtODc3Ni5oCisrKyBiL3NvdW5kL3BjaS9pY2UxNzEyL3dtODc3Ni5oCkBAIC0yMTYsOSArMjE2LDYgQEAKIAogdm9pZCBzbmRfd204Nzc2X2luaXQoc3RydWN0IHNuZF93bTg3NzYgKndtKTsKIHZvaWQgc25kX3dtODc3Nl9yZXN1bWUoc3RydWN0IHNuZF93bTg3NzYgKndtKTsKLXZvaWQgc25kX3dtODc3Nl9zZXRfZGFjX2lmKHN0cnVjdCBzbmRfd204Nzc2ICp3bSwgdTE2IGRhYyk7Ci12b2lkIHNuZF93bTg3NzZfc2V0X2FkY19pZihzdHJ1Y3Qgc25kX3dtODc3NiAqd20sIHUxNiBhZGMpOwotdm9pZCBzbmRfd204Nzc2X3NldF9tYXN0ZXJfbW9kZShzdHJ1Y3Qgc25kX3dtODc3NiAqd20sIHUxNiBtb2RlKTsKIHZvaWQgc25kX3dtODc3Nl9zZXRfcG93ZXIoc3RydWN0IHNuZF93bTg3NzYgKndtLCB1MTYgcG93ZXIpOwogdm9pZCBzbmRfd204Nzc2X3ZvbHVtZV9yZXN0b3JlKHN0cnVjdCBzbmRfd204Nzc2ICp3bSk7CiBpbnQgc25kX3dtODc3Nl9idWlsZF9jb250cm9scyhzdHJ1Y3Qgc25kX3dtODc3NiAqd20pOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2ludGVsOHgwLmMgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwppbmRleCA0YTI4MjUyLi4yYzU0ODRlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDAuYworKysgYi9zb3VuZC9wY2kvaW50ZWw4eDAuYwpAQCAtMjYsNyArMjYsNyBAQAogICoKICAqLyAgICAgIAogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI2NTQsNyArMjY1NCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgaW50ZWw4eDBfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgaW50ZWw4eDAgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaW50IGk7CkBAIC0yNjgyLDEyICsyNjgxLDYgQEAKIAkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKIAkJY2hpcC0+aXJxID0gLTE7CiAJfQotCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCXBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0JLyogVGhlIGNhbGwgYmVsb3cgbWF5IGRpc2FibGUgYnVpbHQtaW4gc3BlYWtlciBvbiBzb21lIGxhcHRvcHMKLQkgKiBhZnRlciBTMlJBTS4gIFNvLCBkb24ndCB0b3VjaCBpdC4KLQkgKi8KLQkvKiBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsgKi8KIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY5OCwxNCArMjY5MSw2IEBACiAJc3RydWN0IGludGVsOHgwICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCBpOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKLQkJZGV2X2VycihkZXYsICJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsIGRpc2FibGluZyBkZXZpY2VcbiIpOwotCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcGNpX3NldF9tYXN0ZXIocGNpKTsKIAlzbmRfaW50ZWw4eDBfY2hpcF9pbml0KGNoaXAsIDApOwogCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2ludGVsOHgwX2ludGVycnVwdCwKIAkJCUlSUUZfU0hBUkVELCBLQlVJTERfTU9ETkFNRSwgY2hpcCkpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9pbnRlbDh4MG0uYyBiL3NvdW5kL3BjaS9pbnRlbDh4MG0uYwppbmRleCA2YjQwMjM1Li43NTc3ZjMxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaW50ZWw4eDBtLmMKKysrIGIvc291bmQvcGNpL2ludGVsOHgwbS5jCkBAIC0yMyw3ICsyMyw3IEBACiAgKgogICovICAgICAgCiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTAyMyw3ICsxMDIzLDYgQEAKICAqLwogc3RhdGljIGludCBpbnRlbDh4MG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgaW50ZWw4eDBtICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCBpOwpAQCAtMTAzNiw5ICsxMDM1LDYgQEAKIAkJZnJlZV9pcnEoY2hpcC0+aXJxLCBjaGlwKTsKIAkJY2hpcC0+aXJxID0gLTE7CiAJfQotCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCXBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwNDgsMTQgKzEwNDQsNiBAQAogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBpbnRlbDh4MG0gKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgewotCQlkZXZfZXJyKGRldiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgZGlzYWJsaW5nIGRldmljZVxuIik7Ci0JCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlwY2lfc2V0X21hc3RlcihwY2kpOwogCWlmIChyZXF1ZXN0X2lycShwY2ktPmlycSwgc25kX2ludGVsOHgwbV9pbnRlcnJ1cHQsCiAJCQlJUlFGX1NIQVJFRCwgS0JVSUxEX01PRE5BTUUsIGNoaXApKSB7CiAJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIGdyYWIgSVJRICVkLCBkaXNhYmxpbmcgZGV2aWNlXG4iLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2tvcmcxMjEyL2tvcmcxMjEyLmMgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwppbmRleCA1OWQyMWM5Li43YWNiYzIxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYworKysgYi9zb3VuZC9wY2kva29yZzEyMTIva29yZzEyMTIuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KQEAgLTM2LDggKzM3LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIERlYnVnIFN0dWZmCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01ODUsOCArNTg0LDcgQEAKIAkJa29yZzEyMTItPnNoYXJlZEJ1ZmZlclB0ci0+Y2FyZENvbW1hbmQgPSAweGZmZmZmZmZmOwogCQkvKiBwcm9ncmFtIHRoZSB0aW1lciAqLwogCQlrb3JnMTIxMi0+c3RvcF9wZW5kaW5nX2NudCA9IEhaOwotCQlrb3JnMTIxMi0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAxOwotCQlhZGRfdGltZXIoJmtvcmcxMjEyLT50aW1lcik7CisJCW1vZF90aW1lcigma29yZzEyMTItPnRpbWVyLCBqaWZmaWVzICsgMSk7CiAJfQogfQogCkBAIC02MTcsOCArNjE1LDcgQEAKIAl9IGVsc2UgewogCQlpZiAoLS1rb3JnMTIxMi0+c3RvcF9wZW5kaW5nX2NudCA+IDApIHsKIAkJCS8qIHJlcHJvZ3JhbSB0aW1lciAqLwotCQkJa29yZzEyMTItPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMTsKLQkJCWFkZF90aW1lcigma29yZzEyMTItPnRpbWVyKTsKKwkJCW1vZF90aW1lcigma29yZzEyMTItPnRpbWVyLCBqaWZmaWVzICsgMSk7CiAJCX0gZWxzZSB7CiAJCQlzbmRfcHJpbnRkKCJrb3JnMTIxMl90aW1lcl9mdW5jIHRpbWVvdXRcbiIpOwogCQkJa29yZzEyMTItPnNoYXJlZEJ1ZmZlclB0ci0+Y2FyZENvbW1hbmQgPSAwOwpAQCAtMjE3Miw5ICsyMTY5LDggQEAKICAgICAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgma29yZzEyMTItPndhaXQpOwogICAgICAgICBzcGluX2xvY2tfaW5pdCgma29yZzEyMTItPmxvY2spOwogCW11dGV4X2luaXQoJmtvcmcxMjEyLT5vcGVuX211dGV4KTsKLQlpbml0X3RpbWVyKCZrb3JnMTIxMi0+dGltZXIpOwotCWtvcmcxMjEyLT50aW1lci5mdW5jdGlvbiA9IHNuZF9rb3JnMTIxMl90aW1lcl9mdW5jOwotCWtvcmcxMjEyLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpa29yZzEyMTI7CisJc2V0dXBfdGltZXIoJmtvcmcxMjEyLT50aW1lciwgc25kX2tvcmcxMjEyX3RpbWVyX2Z1bmMsCisJCSAgICAodW5zaWduZWQgbG9uZylrb3JnMTIxMik7CiAKICAgICAgICAga29yZzEyMTItPmlycSA9IC0xOwogICAgICAgICBrb3JnMTIxMi0+Y2xrU291cmNlID0gSzEyMTJfQ0xLSURYX0xvY2FsOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2xvbGEvbG9sYS5jIGIvc291bmQvcGNpL2xvbGEvbG9sYS5jCmluZGV4IDRjZjRiZTUuLjlmZjYwMDA4IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbG9sYS9sb2xhLmMKKysrIGIvc291bmQvcGNpL2xvbGEvbG9sYS5jCkBAIC01NTEsMTAgKzU1MSw4IEBACiAJbG9sYV9mcmVlX21peGVyKGNoaXApOwogCWlmIChjaGlwLT5pcnEgPj0gMCkKIAkJZnJlZV9pcnEoY2hpcC0+aXJxLCAodm9pZCAqKWNoaXApOwotCWlmIChjaGlwLT5iYXJbMF0ucmVtYXBfYWRkcikKLQkJaW91bm1hcChjaGlwLT5iYXJbMF0ucmVtYXBfYWRkcik7Ci0JaWYgKGNoaXAtPmJhclsxXS5yZW1hcF9hZGRyKQotCQlpb3VubWFwKGNoaXAtPmJhclsxXS5yZW1hcF9hZGRyKTsKKwlpb3VubWFwKGNoaXAtPmJhclswXS5yZW1hcF9hZGRyKTsKKwlpb3VubWFwKGNoaXAtPmJhclsxXS5yZW1hcF9hZGRyKTsKIAlpZiAoY2hpcC0+cmIuYXJlYSkKIAkJc25kX2RtYV9mcmVlX3BhZ2VzKCZjaGlwLT5yYik7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhjaGlwLT5wY2kpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21hZXN0cm8zLmMgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwppbmRleCA5ODgyM2QxLi45YmU2NjA5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWFlc3RybzMuYworKysgYi9zb3VuZC9wY2kvbWFlc3RybzMuYwpAQCAtMzEsNyArMzEsNyBAQAogI2RlZmluZSBDQVJEX05BTUUgIkVTUyBNYWVzdHJvMy9BbGxlZ3JvL0NhbnlvbjNELTIiCiAjZGVmaW5lIERSSVZFUl9OQU1FICJNYWVzdHJvMyIKIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yMzk1LDcgKzIzOTUsNiBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBtM19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbmRfbTMgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaW50IGksIGRzcF9pbmRleDsKQEAgLTI0MjEsMTYgKzI0MjAsMTEgQEAKIAlmb3IgKGkgPSBSRVZfQl9EQVRBX01FTU9SWV9CRUdJTiA7IGkgPD0gUkVWX0JfREFUQV9NRU1PUllfRU5EOyBpKyspCiAJCWNoaXAtPnN1c3BlbmRfbWVtW2RzcF9pbmRleCsrXSA9CiAJCQlzbmRfbTNfYXNzcF9yZWFkKGNoaXAsIE1FTVRZUEVfSU5URVJOQUxfREFUQSwgaSk7Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKLQlwY2lfc2F2ZV9zdGF0ZShwY2kpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG0zX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc25kX20zICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCBpLCBkc3BfaW5kZXg7CkBAIC0yNDM4LDE1ICsyNDMyLDYgQEAKIAlpZiAoY2hpcC0+c3VzcGVuZF9tZW0gPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgewotCQlkZXZfZXJyKGRldiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgZGlzYWJsaW5nIGRldmljZVxuIik7Ci0JCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlwY2lfc2V0X21hc3RlcihwY2kpOwotCiAJLyogZmlyc3QgbGV0cyBqdXN0IGJyaW5nIGV2ZXJ5dGhpbmcgYmFjay4gLiovCiAJc25kX20zX291dHcoY2hpcCwgMCwgMHg1NCk7CiAJc25kX20zX291dHcoY2hpcCwgMCwgMHg1Nik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jIGIvc291bmQvcGNpL21peGFydC9taXhhcnQuYwppbmRleCAxZmFmNDdlLi5jM2E5ZjM5IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydC5jCisrKyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0LmMKQEAgLTExMTQsMTAgKzExMTQsOSBAQAogCX0KIAogCS8qIHJlbGVhc2UgdGhlIGkvbyBwb3J0cyAqLwotCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKLQkJaWYgKG1nci0+bWVtW2ldLnZpcnQpCi0JCQlpb3VubWFwKG1nci0+bWVtW2ldLnZpcnQpOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQorCQlpb3VubWFwKG1nci0+bWVtW2ldLnZpcnQpOworCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhtZ3ItPnBjaSk7CiAKIAkvKiBmcmVlIGZsb3dhcnJheSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnRfY29yZS5jIGIvc291bmQvcGNpL21peGFydC9taXhhcnRfY29yZS5jCmluZGV4IGZlODAzMTMuLmRjY2YzZGI0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9jb3JlLmMKKysrIGIvc291bmQvcGNpL21peGFydC9taXhhcnRfY29yZS5jCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgIm1peGFydC5oIgogI2luY2x1ZGUgIm1peGFydF9od2RlcC5oIgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL21peGFydC9taXhhcnRfaHdkZXAuYyBiL3NvdW5kL3BjaS9taXhhcnQvbWl4YXJ0X2h3ZGVwLmMKaW5kZXggOTk5NmE0ZC4uNWJmZDNhYyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL21peGFydC9taXhhcnRfaHdkZXAuYworKysgYi9zb3VuZC9wY2kvbWl4YXJ0L21peGFydF9od2RlcC5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlICJtaXhhcnQuaCIKICNpbmNsdWRlICJtaXhhcnRfbWl4ZXIuaCIKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ubTI1Ni9ubTI1Ni5jIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKaW5kZXggNGU0MWE0ZS4uNDczNWUyNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL25tMjU2L25tMjU2LmMKKysrIGIvc291bmQvcGNpL25tMjU2L25tMjU2LmMKQEAgLTI0LDcgKzI0LDcgQEAKICAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKi8KICAgCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTEzOTIsNyArMTM5Miw2IEBACiAgKi8KIHN0YXRpYyBpbnQgbm0yNTZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgbm0yNTYgKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAKQEAgLTE0MDAsMTUgKzEzOTksMTEgQEAKIAlzbmRfcGNtX3N1c3BlbmRfYWxsKGNoaXAtPnBjbSk7CiAJc25kX2FjOTdfc3VzcGVuZChjaGlwLT5hYzk3KTsKIAljaGlwLT5jb2VmZnNfY3VycmVudCA9IDA7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0JcGNpX3NhdmVfc3RhdGUocGNpKTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBubTI1Nl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IG5tMjU2ICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCBpOwpAQCAtMTQxNiwxNSArMTQxMSw2IEBACiAJLyogUGVyZm9ybSBhIGZ1bGwgcmVzZXQgb24gdGhlIGhhcmR3YXJlICovCiAJY2hpcC0+aW5fcmVzdW1lID0gMTsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCBkaXNhYmxpbmcgZGV2aWNlXG4iKTsKLQkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXBjaV9zZXRfbWFzdGVyKHBjaSk7Ci0KIAlzbmRfbm0yNTZfaW5pdF9jaGlwKGNoaXApOwogCiAJLyogcmVzdG9yZSBhYzk3ICovCkBAIC0xNDYwLDEwICsxNDQ2LDggQEAKIAlpZiAoY2hpcC0+aXJxID49IDApCiAJCWZyZWVfaXJxKGNoaXAtPmlycSwgY2hpcCk7CiAKLQlpZiAoY2hpcC0+Y3BvcnQpCi0JCWlvdW5tYXAoY2hpcC0+Y3BvcnQpOwotCWlmIChjaGlwLT5idWZmZXIpCi0JCWlvdW5tYXAoY2hpcC0+YnVmZmVyKTsKKwlpb3VubWFwKGNoaXAtPmNwb3J0KTsKKwlpb3VubWFwKGNoaXAtPmJ1ZmZlcik7CiAJcmVsZWFzZV9hbmRfZnJlZV9yZXNvdXJjZShjaGlwLT5yZXNfY3BvcnQpOwogCXJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2UoY2hpcC0+cmVzX2J1ZmZlcik7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vTWFrZWZpbGUgYi9zb3VuZC9wY2kvb3h5Z2VuL01ha2VmaWxlCmluZGV4IDhmNGM0MDkuLmFiMDg1ZDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vTWFrZWZpbGUKKysrIGIvc291bmQvcGNpL294eWdlbi9NYWtlZmlsZQpAQCAtMSw4ICsxLDEwIEBACiBzbmQtb3h5Z2VuLWxpYi1vYmpzIDo9IG94eWdlbl9pby5vIG94eWdlbl9saWIubyBveHlnZW5fbWl4ZXIubyBveHlnZW5fcGNtLm8KIHNuZC1veHlnZW4tb2JqcyA6PSBveHlnZW4ubyB4b25hcl9kZ19taXhlci5vIHhvbmFyX2RnLm8KK3NuZC1zZTZ4LW9ianMgOj0gc2U2eC5vCiBzbmQtdmlydHVvc28tb2JqcyA6PSB2aXJ0dW9zby5vIHhvbmFyX2xpYi5vIFwKIAl4b25hcl9wY20xNzl4Lm8geG9uYXJfY3M0M3h4Lm8geG9uYXJfd204N3g2Lm8geG9uYXJfaGRtaS5vCiAKIG9iai0kKENPTkZJR19TTkRfT1hZR0VOX0xJQikgKz0gc25kLW94eWdlbi1saWIubwogb2JqLSQoQ09ORklHX1NORF9PWFlHRU4pICs9IHNuZC1veHlnZW4ubworb2JqLSQoQ09ORklHX1NORF9TRTZYKSArPSBzbmQtc2U2eC5vCiBvYmotJChDT05GSUdfU05EX1ZJUlRVT1NPKSArPSBzbmQtdmlydHVvc28ubwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uaCBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmgKaW5kZXggYzEwYWIwNy4uMjkzZDBiOSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW4uaAorKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oCkBAIC0zNSw3ICszNSw3IEBACiAjZGVmaW5lIENBUFRVUkVfMV9GUk9NX1NQRElGCTB4MDA4MAogI2RlZmluZSBDQVBUVVJFXzJfRlJPTV9JMlNfMgkweDAxMDAKICNkZWZpbmUgQ0FQVFVSRV8yX0ZST01fQUM5N18xCTB4MDIwMAotICAgICAvKiBDQVBUVVJFXzNfRlJPTV9JMlNfMwkJbm90IGltcGxlbWVudGVkICovCisjZGVmaW5lIENBUFRVUkVfM19GUk9NX0kyU18zCTB4MDQwMAogI2RlZmluZSBNSURJX09VVFBVVAkJMHgwODAwCiAjZGVmaW5lIE1JRElfSU5QVVQJCTB4MTAwMAogI2RlZmluZSBBQzk3X0NEX0lOUFVUCQkweDIwMDAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9pby5jCmluZGV4IDRiOGEzMmMuLmM3ODUxZGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2lvLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5faW8uYwpAQCAtMjAsOSArMjAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9tcHU0MDEuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJveHlnZW4uaCIKIAogdTggb3h5Z2VuX3JlYWQ4KHN0cnVjdCBveHlnZW4gKmNoaXAsIHVuc2lnbmVkIGludCByZWcpCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9saWIuYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCmluZGV4IGI2N2UzMDYuLmZmZmYzYjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCisrKyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX2xpYi5jCkBAIC0zMTksMTEgKzMxOSwxMiBAQAogCiBzdGF0aWMgdm9pZCBjb25maWd1cmVfcGNpZV9icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKnBjaSkKIHsKLQllbnVtIHsgUEVYODExWCwgUEk3QzlYMTEwIH07CisJZW51bSB7IFBFWDgxMVgsIFBJN0M5WDExMCwgWElPMjAwMSB9OwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBicmlkZ2VfaWRzW10gPSB7CiAJCXsgUENJX1ZERVZJQ0UoUExYLCAweDgxMTEpLCAuZHJpdmVyX2RhdGEgPSBQRVg4MTFYIH0sCiAJCXsgUENJX1ZERVZJQ0UoUExYLCAweDgxMTIpLCAuZHJpdmVyX2RhdGEgPSBQRVg4MTFYIH0sCiAJCXsgUENJX0RFVklDRSgweDEyZDgsIDB4ZTExMCksIC5kcml2ZXJfZGF0YSA9IFBJN0M5WDExMCB9LAorCQl7IFBDSV9WREVWSUNFKFRJLCAweDgyNDApLCAuZHJpdmVyX2RhdGEgPSBYSU8yMDAxIH0sCiAJCXsgfQogCX07CiAJc3RydWN0IHBjaV9kZXYgKmJyaWRnZTsKQEAgLTM1Nyw2ICszNTgsMTQgQEAKIAkJdG1wIHw9IDE7CS8qIHBhcmsgdGhlIFBDSSBhcmJpdGVyIHRvIHRoZSBzb3VuZCBjaGlwICovCiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCAweDQwLCB0bXApOwogCQlicmVhazsKKworCWNhc2UgWElPMjAwMTogLyogVGV4YXMgSW5zdHJ1bWVudHMgWElPMjAwMSBQQ0llL1BDSSBicmlkZ2UgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGJyaWRnZSwgMHhlOCwgJnRtcCk7CisJCXRtcCAmPSB+MHhmOwkvKiByZXF1ZXN0IGxlbmd0aCBsaW1pdDogNjQgYnl0ZXMgKi8KKwkJdG1wICY9IH4oMHhmIDw8IDgpOworCQl0bXAgfD0gMSA8PCA4OwkvKiByZXF1ZXN0IGNvdW50IGxpbWl0OiBvbmUgYnVmZmVyICovCisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoYnJpZGdlLCAweGU4LCB0bXApOworCQlicmVhazsKIAl9CiB9CiAKQEAgLTQ0MSw5ICs0NTAsMTggQEAKIAkJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0kyU19CX0ZPUk1BVCwKIAkJCSAgICAgICBPWFlHRU5fSTJTX01BU1RFUiB8CiAJCQkgICAgICAgT1hZR0VOX0kyU19NVVRFX01DTEspOwotCW94eWdlbl93cml0ZTE2KGNoaXAsIE9YWUdFTl9JMlNfQ19GT1JNQVQsCi0JCSAgICAgICBPWFlHRU5fSTJTX01BU1RFUiB8Ci0JCSAgICAgICBPWFlHRU5fSTJTX01VVEVfTUNMSyk7CisJaWYgKGNoaXAtPm1vZGVsLmRldmljZV9jb25maWcgJiBDQVBUVVJFXzNfRlJPTV9JMlNfMykKKwkJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0kyU19DX0ZPUk1BVCwKKwkJCSAgICAgICBPWFlHRU5fUkFURV80ODAwMCB8CisJCQkgICAgICAgY2hpcC0+bW9kZWwuYWRjX2kyc19mb3JtYXQgfAorCQkJICAgICAgIE9YWUdFTl9JMlNfTUNMSyhjaGlwLT5tb2RlbC5hZGNfbWNsa3MpIHwKKwkJCSAgICAgICBPWFlHRU5fSTJTX0JJVFNfMTYgfAorCQkJICAgICAgIE9YWUdFTl9JMlNfTUFTVEVSIHwKKwkJCSAgICAgICBPWFlHRU5fSTJTX0JDTEtfNjQpOworCWVsc2UKKwkJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0kyU19DX0ZPUk1BVCwKKwkJCSAgICAgICBPWFlHRU5fSTJTX01BU1RFUiB8CisJCQkgICAgICAgT1hZR0VOX0kyU19NVVRFX01DTEspOwogCW94eWdlbl9jbGVhcl9iaXRzMzIoY2hpcCwgT1hZR0VOX1NQRElGX0NPTlRST0wsCiAJCQkgICAgT1hZR0VOX1NQRElGX09VVF9FTkFCTEUgfAogCQkJICAgIE9YWUdFTl9TUERJRl9MT09QQkFDSyk7CkBAIC03MjgsNyArNzQ2LDYgQEAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHN0YXRpYyBpbnQgb3h5Z2VuX3BjaV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IGksIHNhdmVkX2ludGVycnVwdF9tYXNrOwpAQCAtNzM2LDggKzc1Myw3IEBACiAJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwogCiAJZm9yIChpID0gMDsgaSA8IFBDTV9DT1VOVDsgKytpKQotCQlpZiAoY2hpcC0+c3RyZWFtc1tpXSkKLQkJCXNuZF9wY21fc3VzcGVuZChjaGlwLT5zdHJlYW1zW2ldKTsKKwkJc25kX3BjbV9zdXNwZW5kKGNoaXAtPnN0cmVhbXNbaV0pOwogCiAJaWYgKGNoaXAtPm1vZGVsLnN1c3BlbmQpCiAJCWNoaXAtPm1vZGVsLnN1c3BlbmQoY2hpcCk7CkBAIC03NTMsMTAgKzc2OSw2IEBACiAJZmx1c2hfd29yaygmY2hpcC0+c3BkaWZfaW5wdXRfYml0c193b3JrKTsKIAlmbHVzaF93b3JrKCZjaGlwLT5ncGlvX3dvcmspOwogCWNoaXAtPmludGVycnVwdF9tYXNrID0gc2F2ZWRfaW50ZXJydXB0X21hc2s7Ci0KLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKLQlwY2lfc2F2ZV9zdGF0ZShwY2kpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOwogCXJldHVybiAwOwogfQogCkBAIC03ODgsMjAgKzgwMCwxMCBAQAogCiBzdGF0aWMgaW50IG94eWdlbl9wY2lfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBveHlnZW4gKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IGk7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgewotCQlkZXZfZXJyKGRldiwgImNhbm5vdCByZWVuYWJsZSBkZXZpY2UiKTsKLQkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXBjaV9zZXRfbWFzdGVyKHBjaSk7Ci0KIAlveHlnZW5fd3JpdGUxNihjaGlwLCBPWFlHRU5fRE1BX1NUQVRVUywgMCk7CiAJb3h5Z2VuX3dyaXRlMTYoY2hpcCwgT1hZR0VOX0lOVEVSUlVQVF9NQVNLLCAwKTsKIAlmb3IgKGkgPSAwOyBpIDwgT1hZR0VOX0lPX1NJWkU7ICsraSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX21peGVyLmMgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9taXhlci5jCmluZGV4IDU5ODhlMDQuLjY0OTJiY2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX21peGVyLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5fbWl4ZXIuYwpAQCAtNzg2LDYgKzc4Niw5IEBACiAJCS5nZXQgPSB1cG1peF9nZXQsCiAJCS5wdXQgPSB1cG1peF9wdXQsCiAJfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBzcGRpZl9vdXRwdXRfY29udHJvbHNbXSA9IHsKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAogCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIiwgUExBWUJBQ0ssIFNXSVRDSCksCkBAIC05MzgsNiArOTQxLDMzIEBACiAJCX0sCiAJfSwKIAl7CisJCS5wY21fZGV2ID0gQ0FQVFVSRV8zX0ZST01fSTJTXzMsCisJCS5jb250cm9scyA9IHsKKwkJCXsKKwkJCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJCQkubmFtZSA9ICJBbmFsb2cgSW5wdXQgTW9uaXRvciBQbGF5YmFjayBTd2l0Y2giLAorCQkJCS5pbmRleCA9IDIsCisJCQkJLmluZm8gPSBzbmRfY3RsX2Jvb2xlYW5fbW9ub19pbmZvLAorCQkJCS5nZXQgPSBtb25pdG9yX2dldCwKKwkJCQkucHV0ID0gbW9uaXRvcl9wdXQsCisJCQkJLnByaXZhdGVfdmFsdWUgPSBPWFlHRU5fQURDX01PTklUT1JfQywKKwkJCX0sCisJCQl7CisJCQkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCQkJLm5hbWUgPSAiQW5hbG9nIElucHV0IE1vbml0b3IgUGxheWJhY2sgVm9sdW1lIiwKKwkJCQkuaW5kZXggPSAyLAorCQkJCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFIHwKKwkJCQkJICBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfVExWX1JFQUQsCisJCQkJLmluZm8gPSBtb25pdG9yX3ZvbHVtZV9pbmZvLAorCQkJCS5nZXQgPSBtb25pdG9yX2dldCwKKwkJCQkucHV0ID0gbW9uaXRvcl9wdXQsCisJCQkJLnByaXZhdGVfdmFsdWUgPSBPWFlHRU5fQURDX01PTklUT1JfQ19IQUxGX1ZPTAorCQkJCQkJfCAoMSA8PCA4KSwKKwkJCQkudGx2ID0geyAucCA9IG1vbml0b3JfZGJfc2NhbGUsIH0sCisJCQl9LAorCQl9LAorCX0sCisJewogCQkucGNtX2RldiA9IENBUFRVUkVfMV9GUk9NX1NQRElGLAogCQkuY29udHJvbHMgPSB7CiAJCQl7CkBAIC0xMDczLDYgKzExMDMsMTIgQEAKIAllcnIgPSBhZGRfY29udHJvbHMoY2hpcCwgY29udHJvbHMsIEFSUkFZX1NJWkUoY29udHJvbHMpKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKKwlpZiAoY2hpcC0+bW9kZWwuZGV2aWNlX2NvbmZpZyAmIFBMQVlCQUNLXzFfVE9fU1BESUYpIHsKKwkJZXJyID0gYWRkX2NvbnRyb2xzKGNoaXAsIHNwZGlmX291dHB1dF9jb250cm9scywKKwkJCQkgICBBUlJBWV9TSVpFKHNwZGlmX291dHB1dF9jb250cm9scykpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQogCWlmIChjaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnICYgQ0FQVFVSRV8xX0ZST01fU1BESUYpIHsKIAkJZXJyID0gYWRkX2NvbnRyb2xzKGNoaXAsIHNwZGlmX2lucHV0X2NvbnRyb2xzLAogCQkJCSAgIEFSUkFZX1NJWkUoc3BkaWZfaW5wdXRfY29udHJvbHMpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX3BjbS5jIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5fcGNtLmMKaW5kZXggMDI4MjgyNC4uYWEyZWJkMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW5fcGNtLmMKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW5fcGNtLmMKQEAgLTE0NCw5ICsxNDQsMTEgQEAKIAkJcnVudGltZS0+aHcgPSAqb3h5Z2VuX2hhcmR3YXJlW2NoYW5uZWxdOwogCXN3aXRjaCAoY2hhbm5lbCkgewogCWNhc2UgUENNX0M6Ci0JCXJ1bnRpbWUtPmh3LnJhdGVzICY9IH4oU05EUlZfUENNX1JBVEVfMzIwMDAgfAotCQkJCSAgICAgICBTTkRSVl9QQ01fUkFURV82NDAwMCk7Ci0JCXJ1bnRpbWUtPmh3LnJhdGVfbWluID0gNDQxMDA7CisJCWlmIChjaGlwLT5tb2RlbC5kZXZpY2VfY29uZmlnICYgQ0FQVFVSRV8xX0ZST01fU1BESUYpIHsKKwkJCXJ1bnRpbWUtPmh3LnJhdGVzICY9IH4oU05EUlZfUENNX1JBVEVfMzIwMDAgfAorCQkJCQkgICAgICAgU05EUlZfUENNX1JBVEVfNjQwMDApOworCQkJcnVudGltZS0+aHcucmF0ZV9taW4gPSA0NDEwMDsKKwkJfQogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIFBDTV9BOgogCWNhc2UgUENNX0I6CkBAIC00MzAsMTcgKzQzMiwzNiBAQAogCQkJCSAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCiB7CiAJc3RydWN0IG94eWdlbiAqY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlib29sIGlzX3NwZGlmOwogCWludCBlcnI7CiAKIAllcnIgPSBveHlnZW5faHdfcGFyYW1zKHN1YnN0cmVhbSwgaHdfcGFyYW1zKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAorCWlzX3NwZGlmID0gY2hpcC0+bW9kZWwuZGV2aWNlX2NvbmZpZyAmIENBUFRVUkVfMV9GUk9NX1NQRElGOworCiAJc3Bpbl9sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOwogCW94eWdlbl93cml0ZThfbWFza2VkKGNoaXAsIE9YWUdFTl9SRUNfRk9STUFULAogCQkJICAgICBveHlnZW5fZm9ybWF0KGh3X3BhcmFtcykgPDwgT1hZR0VOX1JFQ19GT1JNQVRfQ19TSElGVCwKIAkJCSAgICAgT1hZR0VOX1JFQ19GT1JNQVRfQ19NQVNLKTsKKwlpZiAoIWlzX3NwZGlmKQorCQlveHlnZW5fd3JpdGUxNl9tYXNrZWQoY2hpcCwgT1hZR0VOX0kyU19DX0ZPUk1BVCwKKwkJCQkgICAgICBveHlnZW5fcmF0ZShod19wYXJhbXMpIHwKKwkJCQkgICAgICBjaGlwLT5tb2RlbC5hZGNfaTJzX2Zvcm1hdCB8CisJCQkJICAgICAgZ2V0X21jbGsoY2hpcCwgUENNX0IsIGh3X3BhcmFtcykgfAorCQkJCSAgICAgIG94eWdlbl9pMnNfYml0cyhod19wYXJhbXMpLAorCQkJCSAgICAgIE9YWUdFTl9JMlNfUkFURV9NQVNLIHwKKwkJCQkgICAgICBPWFlHRU5fSTJTX0ZPUk1BVF9NQVNLIHwKKwkJCQkgICAgICBPWFlHRU5fSTJTX01DTEtfTUFTSyB8CisJCQkJICAgICAgT1hZR0VOX0kyU19CSVRTX01BU0spOwogCXNwaW5fdW5sb2NrX2lycSgmY2hpcC0+cmVnX2xvY2spOworCisJaWYgKCFpc19zcGRpZikgeworCQltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CisJCWNoaXAtPm1vZGVsLnNldF9hZGNfcGFyYW1zKGNoaXAsIGh3X3BhcmFtcyk7CisJCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjc2LDExICs2OTcsNiBAQAogCS5wb2ludGVyICAgPSBveHlnZW5fcG9pbnRlciwKIH07CiAKLXN0YXRpYyB2b2lkIG94eWdlbl9wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQotewotCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX2ZyZWVfZm9yX2FsbChwY20pOwotfQotCiBpbnQgb3h5Z2VuX3BjbV9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCiB7CiAJc3RydWN0IHNuZF9wY20gKnBjbTsKQEAgLTcwNSw3ICs3MjEsNiBAQAogCQkJc25kX3BjbV9zZXRfb3BzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFLAogCQkJCQkmb3h5Z2VuX3JlY19iX29wcyk7CiAJCXBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKLQkJcGNtLT5wcml2YXRlX2ZyZWUgPSBveHlnZW5fcGNtX2ZyZWU7CiAJCXN0cmNweShwY20tPm5hbWUsICJNdWx0aWNoYW5uZWwiKTsKIAkJaWYgKG91dHMpCiAJCQlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlcyhwY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uc3Vic3RyZWFtLApAQCAtNzM0LDcgKzc0OSw2IEBACiAJCQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCiAJCQkJCSZveHlnZW5fcmVjX2Nfb3BzKTsKIAkJcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOwotCQlwY20tPnByaXZhdGVfZnJlZSA9IG94eWdlbl9wY21fZnJlZTsKIAkJc3RyY3B5KHBjbS0+bmFtZSwgIkRpZ2l0YWwiKTsKIAkJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKIAkJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwKQEAgLTc2NSwxMiArNzc5LDI5IEBACiAJCQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCiAJCQkJCSZveHlnZW5fcmVjX2Jfb3BzKTsKIAkJcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOwotCQlwY20tPnByaXZhdGVfZnJlZSA9IG94eWdlbl9wY21fZnJlZTsKIAkJc3RyY3B5KHBjbS0+bmFtZSwgb3V0cyA/ICJGcm9udCBQYW5lbCIgOiAiQW5hbG9nIDIiKTsKIAkJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKIAkJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwKIAkJCQkJCSAgICAgIERFRkFVTFRfQlVGRkVSX0JZVEVTLAogCQkJCQkJICAgICAgQlVGRkVSX0JZVEVTX01BWCk7CiAJfQorCisJaW5zID0gISEoY2hpcC0+bW9kZWwuZGV2aWNlX2NvbmZpZyAmIENBUFRVUkVfM19GUk9NX0kyU18zKTsKKwlpZiAoaW5zKSB7CisJCWVyciA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsICJBbmFsb2czIiwgMywgMCwgaW5zLCAmcGNtKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCQlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsCisJCQkJJm94eWdlbl9yZWNfY19vcHMpOworCQlveHlnZW5fd3JpdGU4X21hc2tlZChjaGlwLCBPWFlHRU5fUkVDX1JPVVRJTkcsCisJCQkJICAgICBPWFlHRU5fUkVDX0NfUk9VVEVfSTJTX0FEQ18zLAorCQkJCSAgICAgT1hZR0VOX1JFQ19DX1JPVVRFX01BU0spOworCQlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CisJCXN0cmNweShwY20tPm5hbWUsICJBbmFsb2cgMyIpOworCQlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAorCQkJCQkJICAgICAgc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLAorCQkJCQkJICAgICAgREVGQVVMVF9CVUZGRVJfQllURVMsCisJCQkJCQkgICAgICBCVUZGRVJfQllURVNfTUFYKTsKKwl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvb3h5Z2VuL3NlNnguYyBiL3NvdW5kL3BjaS9veHlnZW4vc2U2eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MGQ1MTQKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3NlNnguYwpAQCAtMCwwICsxLDE2MCBAQAorLyoKKyAqIEMtTWVkaWEgQ01JODc4NyBkcml2ZXIgZm9yIHRoZSBTdHVkaW8gRXZvbHV0aW9uIFNFNlgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPgorICoKKyAqICBUaGlzIGRyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgorICoKKyAqICBUaGlzIGRyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGRyaXZlcjsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKy8qCisgKiBDTUk4Nzg3OgorICoKKyAqICAgU1BJICAgIC0+IG1pY3JvY29udHJvbGxlciAobm90IGFjdHVhbGx5IHVzZWQpCisgKiAgIEdQSU8gMCAtPiBkby4KKyAqICAgR1BJTyAyIC0+IGRvLgorICoKKyAqICAgREFDMCAgIC0+IGJvdGggUENNMTc5MkEgKEwrUiwgZWFjaCBpbiBtb25vIG1vZGUpCisgKiAgIEFEQzEgIDwtICAxc3QgUENNMTgwNAorICogICBBREMyICA8LSAgMm5kIFBDTTE4MDQKKyAqICAgQURDMyAgPC0gIDNyZCBQQ00xODA0CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgIm94eWdlbi5oIgorCitNT0RVTEVfQVVUSE9SKCJDbGVtZW5zIExhZGlzY2ggPGNsZW1lbnNAbGFkaXNjaC5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3R1ZGlvIEV2b2x1dGlvbiBTRTZYIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7U3R1ZGlvIEV2b2x1dGlvbixTRTZYfX0iKTsKKworc3RhdGljIGludCBpbmRleFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0lEWDsKK3N0YXRpYyBjaGFyICppZFtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX1NUUjsKK3N0YXRpYyBib29sIGVuYWJsZVtTTkRSVl9DQVJEU10gPSBTTkRSVl9ERUZBVUxUX0VOQUJMRV9QTlA7CisKK21vZHVsZV9wYXJhbV9hcnJheShpbmRleCwgaW50LCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaW5kZXgsICJjYXJkIGluZGV4Iik7Cittb2R1bGVfcGFyYW1fYXJyYXkoaWQsIGNoYXJwLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmciKTsKK21vZHVsZV9wYXJhbV9hcnJheShlbmFibGUsIGJvb2wsIE5VTEwsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhlbmFibGUsICJlbmFibGUgY2FyZCIpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2U2eF9pZHNbXSA9IHsKKwl7IE9YWUdFTl9QQ0lfU1VCSUQoMHgxM2Y2LCAweDg3ODgpIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNlNnhfaWRzKTsKKworc3RhdGljIHZvaWQgc2U2eF9pbml0KHN0cnVjdCBveHlnZW4gKmNoaXApCit7CisJb3h5Z2VuX3NldF9iaXRzMTYoY2hpcCwgT1hZR0VOX0dQSU9fQ09OVFJPTCwgMHgwMDUpOworCisJc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIlBDTTE3OTJBIik7CisJc25kX2NvbXBvbmVudF9hZGQoY2hpcC0+Y2FyZCwgIlBDTTE4MDQiKTsKK30KKworc3RhdGljIGludCBzZTZ4X2NvbnRyb2xfZmlsdGVyKHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3ICp0ZW1wbGF0ZSkKK3sKKwkvKiBubyBEQUMgdm9sdW1lL211dGUgKi8KKwlpZiAoIXN0cm5jbXAodGVtcGxhdGUtPm5hbWUsICJNYXN0ZXIgUGxheWJhY2sgIiwgMTYpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2U2eF9jbGVhbnVwKHN0cnVjdCBveHlnZW4gKmNoaXApCit7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9wY20xNzkyYV9wYXJhbXMoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwkvKiBub3RoaW5nIHRvIGRvICh0aGUgbWljcm9jb250cm9sbGVyIG1vbml0b3JzIERBQ19MUkNLKSAqLworfQorCitzdGF0aWMgdm9pZCBzZXRfcGNtMTgwNF9wYXJhbXMoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzZTZ4X2FkanVzdF9kYWNfcm91dGluZyhzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCQkgICAgdW5zaWduZWQgaW50IHBsYXlfcm91dGluZykKK3sKKwkvKiByb3V0ZSB0aGUgc2FtZSBzdGVyZW8gcGFpciB0byBEQUMwIGFuZCBEQUMxICovCisJcmV0dXJuICggcGxheV9yb3V0aW5nICAgICAgICYgT1hZR0VOX1BMQVlfREFDMF9TT1VSQ0VfTUFTSykgfAorCSAgICAgICAoKHBsYXlfcm91dGluZyA8PCAyKSAmIE9YWUdFTl9QTEFZX0RBQzFfU09VUkNFX01BU0spOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG94eWdlbl9tb2RlbCBtb2RlbF9zZTZ4ID0geworCS5zaG9ydG5hbWUgPSAiU3R1ZGlvIEV2b2x1dGlvbiBTRTZYIiwKKwkubG9uZ25hbWUgPSAiQy1NZWRpYSBPeHlnZW4gSEQgQXVkaW8iLAorCS5jaGlwID0gIkNNSTg3ODciLAorCS5pbml0ID0gc2U2eF9pbml0LAorCS5jb250cm9sX2ZpbHRlciA9IHNlNnhfY29udHJvbF9maWx0ZXIsCisJLmNsZWFudXAgPSBzZTZ4X2NsZWFudXAsCisJLnNldF9kYWNfcGFyYW1zID0gc2V0X3BjbTE3OTJhX3BhcmFtcywKKwkuc2V0X2FkY19wYXJhbXMgPSBzZXRfcGNtMTgwNF9wYXJhbXMsCisJLmFkanVzdF9kYWNfcm91dGluZyA9IHNlNnhfYWRqdXN0X2RhY19yb3V0aW5nLAorCS5kZXZpY2VfY29uZmlnID0gUExBWUJBQ0tfMF9UT19JMlMgfAorCQkJIENBUFRVUkVfMF9GUk9NX0kyU18xIHwKKwkJCSBDQVBUVVJFXzJfRlJPTV9JMlNfMiB8CisJCQkgQ0FQVFVSRV8zX0ZST01fSTJTXzMsCisJLmRhY19jaGFubmVsc19wY20gPSAyLAorCS5mdW5jdGlvbl9mbGFncyA9IE9YWUdFTl9GVU5DVElPTl9TUEksCisJLmRhY19tY2xrcyA9IE9YWUdFTl9NQ0xLUygyNTYsIDEyOCwgMTI4KSwKKwkuYWRjX21jbGtzID0gT1hZR0VOX01DTEtTKDI1NiwgMjU2LCAxMjgpLAorCS5kYWNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0xKVVNULAorCS5hZGNfaTJzX2Zvcm1hdCA9IE9YWUdFTl9JMlNfRk9STUFUX0kyUywKK307CisKK3N0YXRpYyBpbnQgc2U2eF9nZXRfbW9kZWwoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCkKK3sKKwljaGlwLT5tb2RlbCA9IG1vZGVsX3NlNng7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2U2eF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQoreworCXN0YXRpYyBpbnQgZGV2OworCWludCBlcnI7CisKKwlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWVuYWJsZVtkZXZdKSB7CisJCSsrZGV2OworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJZXJyID0gb3h5Z2VuX3BjaV9wcm9iZShwY2ksIGluZGV4W2Rldl0sIGlkW2Rldl0sIFRISVNfTU9EVUxFLAorCQkJICAgICAgIHNlNnhfaWRzLCBzZTZ4X2dldF9tb2RlbCk7CisJaWYgKGVyciA+PSAwKQorCQkrK2RldjsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2U2eF9kcml2ZXIgPSB7CisJLm5hbWUgPSBLQlVJTERfTU9ETkFNRSwKKwkuaWRfdGFibGUgPSBzZTZ4X2lkcywKKwkucHJvYmUgPSBzZTZ4X3Byb2JlLAorCS5yZW1vdmUgPSBveHlnZW5fcGNpX3JlbW92ZSwKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKwkuZHJpdmVyID0geworCQkucG0gPSAmb3h5Z2VuX3BjaV9wbSwKKwl9LAorI2VuZGlmCisJLnNodXRkb3duID0gb3h5Z2VuX3BjaV9zaHV0ZG93biwKK307CisKK21vZHVsZV9wY2lfZHJpdmVyKHNlNnhfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfY29yZS5jCmluZGV4IDE4MWY3NzIuLmM1MTk0ZjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9wY3hoci9wY3hocl9jb3JlLmMKKysrIGIvc291bmQvcGNpL3BjeGhyL3BjeGhyX2NvcmUuYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSAicGN4aHIuaCIKICNpbmNsdWRlICJwY3hocl9taXhlci5oIgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3BjeGhyL3BjeGhyX2h3ZGVwLmMgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYwppbmRleCAxNWE4Y2U1Li44MDYzMzA1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYworKysgYi9zb3VuZC9wY2kvcGN4aHIvcGN4aHJfaHdkZXAuYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaHdkZXAuaD4KICNpbmNsdWRlICJwY3hoci5oIgpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jIGIvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCmluZGV4IDZhYmMyYWMuLjk0NjM5ZDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYworKysgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKQEAgLTk5LDcgKzk5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CkBAIC0xMTUzLDcgKzExNTMsNiBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCByaXB0aWRlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCkBAIC0xMTYxLDI3ICsxMTYwLDE0IEBACiAJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDNob3QpOwogCXNuZF9wY21fc3VzcGVuZF9hbGwoY2hpcC0+cGNtKTsKIAlzbmRfYWM5N19zdXNwZW5kKGNoaXAtPmFjOTcpOwotCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCXBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcmlwdGlkZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNuZF9yaXB0aWRlICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyaXB0aWRlOiBwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsICIKLQkJICAgICAgICJkaXNhYmxpbmcgZGV2aWNlXG4iKTsKLQkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXBjaV9zZXRfbWFzdGVyKHBjaSk7CiAJc25kX3JpcHRpZGVfaW5pdGlhbGl6ZShjaGlwKTsKIAlzbmRfYWM5N19yZXN1bWUoY2hpcC0+YWM5Nyk7CiAJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShjYXJkLCBTTkRSVl9DVExfUE9XRVJfRDApOwpAQCAtMTcwNiwxNCArMTY5MiwxMSBAQAogCS5wb2ludGVyID0gc25kX3JpcHRpZGVfcG9pbnRlciwKIH07CiAKLXN0YXRpYyBpbnQKLXNuZF9yaXB0aWRlX3BjbShzdHJ1Y3Qgc25kX3JpcHRpZGUgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK3N0YXRpYyBpbnQgc25kX3JpcHRpZGVfcGNtKHN0cnVjdCBzbmRfcmlwdGlkZSAqY2hpcCwgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwogCWlmICgoZXJyID0KIAkgICAgIHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsICJSSVBUSURFIiwgZGV2aWNlLCBQTEFZQkFDS19TVUJTVFJFQU1TLCAxLAogCQkJICZwY20pKSA8IDApCkBAIC0xNzI5LDggKzE3MTIsNiBAQAogCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVZfU0csCiAJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwKIAkJCQkJICAgICAgNjQgKiAxMDI0LCAxMjggKiAxMDI0KTsKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBwY207CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwMzAsMzIgKzIwMTEsNDMgQEAKIHsKIAlzdGF0aWMgaW50IGRldjsKIAlzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0OworCWludCByZXQ7CiAKIAlpZiAoZGV2ID49IFNORFJWX0NBUkRTKQogCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmICghZW5hYmxlW2Rldl0pIHsKLQkJZGV2Kys7Ci0JCXJldHVybiAtRU5PRU5UOworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGluY19kZXY7CiAJfQogCi0JaWYgKCFqb3lzdGlja19wb3J0W2RldisrXSkKLQkJcmV0dXJuIDA7CisJaWYgKCFqb3lzdGlja19wb3J0W2Rldl0pIHsKKwkJcmV0ID0gMDsKKwkJZ290byBpbmNfZGV2OworCX0KIAogCWdhbWVwb3J0ID0gZ2FtZXBvcnRfYWxsb2NhdGVfcG9ydCgpOwotCWlmICghZ2FtZXBvcnQpCi0JCXJldHVybiAtRU5PTUVNOworCWlmICghZ2FtZXBvcnQpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBpbmNfZGV2OworCX0KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGpveXN0aWNrX3BvcnRbZGV2XSwgOCwgIlJpcHRpZGUgZ2FtZXBvcnQiKSkgewogCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgIlJpcHRpZGU6IGNhbm5vdCBncmFiIGdhbWVwb3J0IDB4JXhcbiIsCiAJCQkgICBqb3lzdGlja19wb3J0W2Rldl0pOwogCQlnYW1lcG9ydF9mcmVlX3BvcnQoZ2FtZXBvcnQpOwotCQlyZXR1cm4gLUVCVVNZOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gaW5jX2RldjsKIAl9CiAKIAlnYW1lcG9ydC0+aW8gPSBqb3lzdGlja19wb3J0W2Rldl07CiAJZ2FtZXBvcnRfcmVnaXN0ZXJfcG9ydChnYW1lcG9ydCk7CiAJcGNpX3NldF9kcnZkYXRhKHBjaSwgZ2FtZXBvcnQpOwotCXJldHVybiAwOworCisJcmV0ID0gMDsKK2luY19kZXY6CisJZGV2Kys7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgc25kX3JpcHRpZGVfam95c3RpY2tfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2kpCkBAIC0yMDkyLDcgKzIwODQsNyBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycm9yOwogCWNhcmQtPnByaXZhdGVfZGF0YSA9IGNoaXA7Ci0JZXJyID0gc25kX3JpcHRpZGVfcGNtKGNoaXAsIDAsIE5VTEwpOworCWVyciA9IHNuZF9yaXB0aWRlX3BjbShjaGlwLCAwKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJvcjsKIAllcnIgPSBzbmRfcmlwdGlkZV9taXhlcihjaGlwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWUzMi5jIGIvc291bmQvcGNpL3JtZTMyLmMKaW5kZXggNmM2MGRjZC4uMjNkN2Y1ZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTMyLmMKKysrIGIvc291bmQvcGNpL3JtZTMyLmMKQEAgLTc1LDYgKzc1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KQEAgLTg1LDggKzg2LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgogI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgotCiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCiBzdGF0aWMgYm9vbCBlbmFibGVbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9FTkFCTEVfUE5QOwkvKiBFbmFibGUgdGhpcyBjYXJkICovCkBAIC02MzIsNyArNjMxLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgc25kX3JtZTMyX3NldGZvcm1hdChzdHJ1Y3Qgcm1lMzIgKiBybWUzMiwgaW50IGZvcm1hdCkKK3N0YXRpYyBpbnQgc25kX3JtZTMyX3NldGZvcm1hdChzdHJ1Y3Qgcm1lMzIgKnJtZTMyLCBzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCkKIHsKIAlzd2l0Y2ggKGZvcm1hdCkgewogCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTYuYyBiL3NvdW5kL3BjaS9ybWU5Ni5jCmluZGV4IDJmMWE4NTEuLjIzMDZjY2YgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5Ni5jCisrKyBiL3NvdW5kL3BjaS9ybWU5Ni5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgpAQCAtMzgsOCArMzksNiBAQAogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KIC8qIG5vdGUsIHR3byBsYXN0IHBjaXMgc2hvdWxkIGJlIGVxdWFsLCBpdCBpcyBub3QgYSBidWcgKi8KIAogTU9EVUxFX0FVVEhPUigiQW5kZXJzIFRvcmdlciA8dG9yZ2VyQGx1ZGQubHV0aC5zZT4iKTsKQEAgLTkyMiw4ICs5MjEsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1zbmRfcm1lOTZfcGxheWJhY2tfc2V0Zm9ybWF0KHN0cnVjdCBybWU5NiAqcm1lOTYsCi0JCQkgICAgIGludCBmb3JtYXQpCitzbmRfcm1lOTZfcGxheWJhY2tfc2V0Zm9ybWF0KHN0cnVjdCBybWU5NiAqcm1lOTYsIHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KQogewogCXN3aXRjaCAoZm9ybWF0KSB7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKQEAgLTk0MCw4ICs5MzgsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1zbmRfcm1lOTZfY2FwdHVyZV9zZXRmb3JtYXQoc3RydWN0IHJtZTk2ICpybWU5NiwKLQkJCSAgICBpbnQgZm9ybWF0KQorc25kX3JtZTk2X2NhcHR1cmVfc2V0Zm9ybWF0KHN0cnVjdCBybWU5NiAqcm1lOTYsIHNuZF9wY21fZm9ybWF0X3QgZm9ybWF0KQogewogCXN3aXRjaCAoZm9ybWF0KSB7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1MxNl9MRToKQEAgLTIzNTgsNyArMjM1NSw2IEBACiAKIHN0YXRpYyBpbnQgcm1lOTZfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgcm1lOTYgKnJtZTk2ID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCkBAIC0yMzgxLDI2ICsyMzc3LDE0IEBACiAJLyogZGlzYWJsZSB0aGUgREFDICAqLwogCXJtZTk2LT5hcmVnICY9IH5STUU5Nl9BUl9EQUNfRU47CiAJd3JpdGVsKHJtZTk2LT5hcmVnLCBybWU5Ni0+aW9iYXNlICsgUk1FOTZfSU9fQURESVRJT05BTF9SRUcpOwotCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0JcGNpX3NhdmVfc3RhdGUocGNpKTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJtZTk2X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgcm1lOTYgKnJtZTk2ID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCi0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKLQkJZGV2X2VycihkZXYsICJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsIGRpc2FibGluZyBkZXZpY2VcbiIpOwotCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KIAkvKiByZXNldCBwbGF5YmFjayBhbmQgcmVjb3JkIGJ1ZmZlciBwb2ludGVycyAqLwogCXdyaXRlbCgwLCBybWU5Ni0+aW9iYXNlICsgUk1FOTZfSU9fU0VUX1BMQVlfUE9TCiAJCSAgKyBybWU5Ni0+cGxheWJhY2tfcG9pbnRlcik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwLmMKaW5kZXggY2Y1YTZjOC4uYzE5ZTAyMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JtZTk2NTIvaGRzcC5jCisrKyBiL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3AuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KQEAgLTQyLDcgKzQzLDYgQEAKIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCkBAIC0xNDI4LDEwICsxNDI4LDggQEAKIAkgICBsZWF2aW5nIGlzdGltZXIgd2hlcmV2ZXIgaXQgd2FzIHNldCBiZWZvcmUuCiAJKi8KIAotCWlmIChobWlkaS0+aXN0aW1lcikgewotCQlobWlkaS0+dGltZXIuZXhwaXJlcyA9IDEgKyBqaWZmaWVzOwotCQlhZGRfdGltZXIoJmhtaWRpLT50aW1lcik7Ci0JfQorCWlmIChobWlkaS0+aXN0aW1lcikKKwkJbW9kX3RpbWVyKCZobWlkaS0+dGltZXIsIDEgKyBqaWZmaWVzKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZobWlkaS0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMTQ0NSwxMSArMTQ0Myw5IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZobWlkaS0+bG9jaywgZmxhZ3MpOwogCWlmICh1cCkgewogCQlpZiAoIWhtaWRpLT5pc3RpbWVyKSB7Ci0JCQlpbml0X3RpbWVyKCZobWlkaS0+dGltZXIpOwotCQkJaG1pZGktPnRpbWVyLmZ1bmN0aW9uID0gc25kX2hkc3BfbWlkaV9vdXRwdXRfdGltZXI7Ci0JCQlobWlkaS0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBobWlkaTsKLQkJCWhtaWRpLT50aW1lci5leHBpcmVzID0gMSArIGppZmZpZXM7Ci0JCQlhZGRfdGltZXIoJmhtaWRpLT50aW1lcik7CisJCQlzZXR1cF90aW1lcigmaG1pZGktPnRpbWVyLCBzbmRfaGRzcF9taWRpX291dHB1dF90aW1lciwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcpIGhtaWRpKTsKKwkJCW1vZF90aW1lcigmaG1pZGktPnRpbWVyLCAxICsgamlmZmllcyk7CiAJCQlobWlkaS0+aXN0aW1lcisrOwogCQl9CiAJfSBlbHNlIHsKQEAgLTUzMDksOSArNTMwNSw3IEBACiAKIAlyZWxlYXNlX2Zpcm13YXJlKGhkc3AtPmZpcm13YXJlKTsKIAl2ZnJlZShoZHNwLT5md191cGxvYWRlZCk7Ci0KLQlpZiAoaGRzcC0+aW9iYXNlKQotCQlpb3VubWFwKGhkc3AtPmlvYmFzZSk7CisJaW91bm1hcChoZHNwLT5pb2Jhc2UpOwogCiAJaWYgKGhkc3AtPnBvcnQpCiAJCXBjaV9yZWxlYXNlX3JlZ2lvbnMoaGRzcC0+cGNpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCmluZGV4IDMzNDI3MDUuLjJjMzYzZmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgpAQCAtMTk1NywxMCArMTk1Nyw4IEBACiAJICAgbGVhdmluZyBpc3RpbWVyIHdoZXJldmVyIGl0IHdhcyBzZXQgYmVmb3JlLgogCSovCiAKLQlpZiAoaG1pZGktPmlzdGltZXIpIHsKLQkJaG1pZGktPnRpbWVyLmV4cGlyZXMgPSAxICsgamlmZmllczsKLQkJYWRkX3RpbWVyKCZobWlkaS0+dGltZXIpOwotCX0KKwlpZiAoaG1pZGktPmlzdGltZXIpCisJCW1vZF90aW1lcigmaG1pZGktPnRpbWVyLCAxICsgamlmZmllcyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaG1pZGktPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTE5NzUsMTEgKzE5NzMsOSBAQAogCXNwaW5fbG9ja19pcnFzYXZlICgmaG1pZGktPmxvY2ssIGZsYWdzKTsKIAlpZiAodXApIHsKIAkJaWYgKCFobWlkaS0+aXN0aW1lcikgewotCQkJaW5pdF90aW1lcigmaG1pZGktPnRpbWVyKTsKLQkJCWhtaWRpLT50aW1lci5mdW5jdGlvbiA9IHNuZF9oZHNwbV9taWRpX291dHB1dF90aW1lcjsKLQkJCWhtaWRpLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGhtaWRpOwotCQkJaG1pZGktPnRpbWVyLmV4cGlyZXMgPSAxICsgamlmZmllczsKLQkJCWFkZF90aW1lcigmaG1pZGktPnRpbWVyKTsKKwkJCXNldHVwX3RpbWVyKCZobWlkaS0+dGltZXIsIHNuZF9oZHNwbV9taWRpX291dHB1dF90aW1lciwKKwkJCQkgICAgKHVuc2lnbmVkIGxvbmcpIGhtaWRpKTsKKwkJCW1vZF90aW1lcigmaG1pZGktPnRpbWVyLCAxICsgamlmZmllcyk7CiAJCQlobWlkaS0+aXN0aW1lcisrOwogCQl9CiAJfSBlbHNlIHsKQEAgLTY5NjUsOSArNjk2MSw3IEBACiAJCWZyZWVfaXJxKGhkc3BtLT5pcnEsICh2b2lkICopIGhkc3BtKTsKIAogCWtmcmVlKGhkc3BtLT5taXhlcik7Ci0KLQlpZiAoaGRzcG0tPmlvYmFzZSkKLQkJaW91bm1hcChoZHNwbS0+aW9iYXNlKTsKKwlpb3VubWFwKGhkc3BtLT5pb2Jhc2UpOwogCiAJaWYgKGhkc3BtLT5wb3J0KQogCQlwY2lfcmVsZWFzZV9yZWdpb25zKGhkc3BtLT5wY2kpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jIGIvc291bmQvcGNpL3JtZTk2NTIvcm1lOTY1Mi5jCmluZGV4IDY1MjE1MjEuLmZkYmMwYWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL3JtZTk2NTIuYworKysgYi9zb3VuZC9wY2kvcm1lOTY1Mi9ybWU5NjUyLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KQEAgLTM0LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAKICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogCiBzdGF0aWMgaW50IGluZGV4W1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfSURYOwkvKiBJbmRleCAwLU1BWCAqLwogc3RhdGljIGNoYXIgKmlkW1NORFJWX0NBUkRTXSA9IFNORFJWX0RFRkFVTFRfU1RSOwkvKiBJRCBmb3IgdGhpcyBjYXJkICovCkBAIC0xNzU2LDggKzE3NTYsNyBAQAogCiAJaWYgKHJtZTk2NTItPmlycSA+PSAwKQogCQlmcmVlX2lycShybWU5NjUyLT5pcnEsICh2b2lkICopcm1lOTY1Mik7Ci0JaWYgKHJtZTk2NTItPmlvYmFzZSkKLQkJaW91bm1hcChybWU5NjUyLT5pb2Jhc2UpOworCWlvdW5tYXAocm1lOTY1Mi0+aW9iYXNlKTsKIAlpZiAocm1lOTY1Mi0+cG9ydCkKIAkJcGNpX3JlbGVhc2VfcmVnaW9ucyhybWU5NjUyLT5wY2kpOwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc2lzNzAxOS5jIGIvc291bmQvcGNpL3NpczcwMTkuYwppbmRleCA3ZjZhMGEwLi5lZmU2NjliIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc2lzNzAxOS5jCisrKyBiL3NvdW5kL3BjaS9zaXM3MDE5LmMKQEAgLTEwNjQsMTIgKzEwNjQsOSBAQAogCWlmIChzaXMtPmlycSA+PSAwKQogCQlmcmVlX2lycShzaXMtPmlycSwgc2lzKTsKIAotCWlmIChzaXMtPmlvYWRkcikKLQkJaW91bm1hcChzaXMtPmlvYWRkcik7Ci0KKwlpb3VubWFwKHNpcy0+aW9hZGRyKTsKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHNpcy0+cGNpKTsKIAlwY2lfZGlzYWJsZV9kZXZpY2Uoc2lzLT5wY2kpOwotCiAJc2lzX2ZyZWVfc3VzcGVuZChzaXMpOwogCXJldHVybiAwOwogfQpAQCAtMTIxMSw3ICsxMjA4LDYgQEAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHN0YXRpYyBpbnQgc2lzX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNpczcwMTkgKnNpcyA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHNpcy0+aW9hZGRyOwpAQCAtMTI0MCw5ICsxMjM2LDYgQEAKIAkJaW9hZGRyICs9IDQwOTY7CiAJfQogCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0JcGNpX3NhdmVfc3RhdGUocGNpKTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI1NCwxNCArMTI0Nyw2IEBACiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBzaXMtPmlvYWRkcjsKIAlpbnQgaTsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0KLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKLQkJZGV2X2VycigmcGNpLT5kZXYsICJ1bmFibGUgdG8gcmUtZW5hYmxlIGRldmljZVxuIik7Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCiAJaWYgKHNpc19jaGlwX2luaXQoc2lzKSkgewogCQlkZXZfZXJyKCZwY2ktPmRldiwgInVuYWJsZSB0byByZS1pbml0IGNvbnRyb2xsZXJcbiIpOwogCQlnb3RvIGVycm9yOwpAQCAtMTI4NCw3ICsxMjY5LDYgQEAKIAltZW1zZXQoc2lzLT5zdXNwZW5kX3N0YXRlWzBdLCAwLCA0MDk2KTsKIAogCXNpcy0+aXJxID0gcGNpLT5pcnE7Ci0JcGNpX3NldF9tYXN0ZXIocGNpKTsKIAogCWlmIChzaXMtPmNvZGVjc19wcmVzZW50ICYgU0lTX1BSSU1BUllfQ09ERUNfUFJFU0VOVCkKIAkJc25kX2FjOTdfcmVzdW1lKHNpcy0+YWM5N1swXSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jIGIvc291bmQvcGNpL3NvbmljdmliZXMuYwppbmRleCAzMTNhNzMyLi4wZjQwNjI0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvc29uaWN2aWJlcy5jCisrKyBiL3NvdW5kL3BjaS9zb25pY3ZpYmVzLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9nYW1lcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KQEAgLTM5LDggKzQwLDYgQEAKICNpbmNsdWRlIDxzb3VuZC9vcGwzLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KIE1PRFVMRV9BVVRIT1IoIkphcm9zbGF2IEt5c2VsYSA8cGVyZXhAcGVyZXguY3o+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlMzIFNvbmljVmliZXMgUENJIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC04ODAsOCArODc5LDcgQEAKIAkucG9pbnRlciA9CXNuZF9zb25pY3ZpYmVzX2NhcHR1cmVfcG9pbnRlciwKIH07CiAKLXN0YXRpYyBpbnQgc25kX3NvbmljdmliZXNfcGNtKHN0cnVjdCBzb25pY3ZpYmVzICpzb25pYywgaW50IGRldmljZSwKLQkJCSAgICAgIHN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK3N0YXRpYyBpbnQgc25kX3NvbmljdmliZXNfcGNtKHN0cnVjdCBzb25pY3ZpYmVzICpzb25pYywgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CkBAIC05MDIsOCArOTAwLDYgQEAKIAlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKHBjbSwgU05EUlZfRE1BX1RZUEVfREVWLAogCQkJCQkgICAgICBzbmRfZG1hX3BjaV9kYXRhKHNvbmljLT5wY2kpLCA2NCoxMDI0LCAxMjgqMTAyNCk7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBwY207CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0OTEsNyArMTQ4Nyw3IEBACiAJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBjaSwgMSksCiAJCXNvbmljLT5pcnEpOwogCi0JaWYgKChlcnIgPSBzbmRfc29uaWN2aWJlc19wY20oc29uaWMsIDAsIE5VTEwpKSA8IDApIHsKKwlpZiAoKGVyciA9IHNuZF9zb25pY3ZpYmVzX3BjbShzb25pYywgMCkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuYwppbmRleCBhNTRjZDY4Li5jZWRmMTNiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmMKKysrIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5jCkBAIC0xMjcsMjEgKzEyNywyMSBAQAogCXNwcmludGYoY2FyZC0+bG9uZ25hbWUsICIlcyBQQ0kgQXVkaW8gYXQgMHglbHgsIGlycSAlZCIsCiAJCWNhcmQtPnNob3J0bmFtZSwgdHJpZGVudC0+cG9ydCwgdHJpZGVudC0+aXJxKTsKIAotCWlmICgoZXJyID0gc25kX3RyaWRlbnRfcGNtKHRyaWRlbnQsIHBjbV9kZXYrKywgTlVMTCkpIDwgMCkgeworCWlmICgoZXJyID0gc25kX3RyaWRlbnRfcGNtKHRyaWRlbnQsIHBjbV9kZXYrKykpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlzd2l0Y2ggKHRyaWRlbnQtPmRldmljZSkgewogCWNhc2UgVFJJREVOVF9ERVZJQ0VfSURfRFg6CiAJY2FzZSBUUklERU5UX0RFVklDRV9JRF9OWDoKLQkJaWYgKChlcnIgPSBzbmRfdHJpZGVudF9mb2xkYmFja19wY20odHJpZGVudCwgcGNtX2RldisrLCBOVUxMKSkgPCAwKSB7CisJCWlmICgoZXJyID0gc25kX3RyaWRlbnRfZm9sZGJhY2tfcGNtKHRyaWRlbnQsIHBjbV9kZXYrKykpIDwgMCkgewogCQkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KIAkJYnJlYWs7CiAJfQogCWlmICh0cmlkZW50LT5kZXZpY2UgPT0gVFJJREVOVF9ERVZJQ0VfSURfTlggfHwgdHJpZGVudC0+ZGV2aWNlID09IFRSSURFTlRfREVWSUNFX0lEX1NJNzAxOCkgewotCQlpZiAoKGVyciA9IHNuZF90cmlkZW50X3NwZGlmX3BjbSh0cmlkZW50LCBwY21fZGV2KyssIE5VTEwpKSA8IDApIHsKKwkJaWYgKChlcnIgPSBzbmRfdHJpZGVudF9zcGRpZl9wY20odHJpZGVudCwgcGNtX2RldisrKSkgPCAwKSB7CiAJCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQkJcmV0dXJuIGVycjsKIAkJfQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5oIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudC5oCmluZGV4IDVmMTEwZWIuLjk2MjRlNTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnQuaAorKysgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50LmgKQEAgLTQyMCw5ICs0MjAsOSBAQAogCQkgICAgICAgc3RydWN0IHNuZF90cmlkZW50ICoqIHJ0cmlkZW50KTsKIGludCBzbmRfdHJpZGVudF9jcmVhdGVfZ2FtZXBvcnQoc3RydWN0IHNuZF90cmlkZW50ICp0cmlkZW50KTsKIAotaW50IHNuZF90cmlkZW50X3BjbShzdHJ1Y3Qgc25kX3RyaWRlbnQgKiB0cmlkZW50LCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOwotaW50IHNuZF90cmlkZW50X2ZvbGRiYWNrX3BjbShzdHJ1Y3Qgc25kX3RyaWRlbnQgKiB0cmlkZW50LCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOwotaW50IHNuZF90cmlkZW50X3NwZGlmX3BjbShzdHJ1Y3Qgc25kX3RyaWRlbnQgKiB0cmlkZW50LCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOworaW50IHNuZF90cmlkZW50X3BjbShzdHJ1Y3Qgc25kX3RyaWRlbnQgKnRyaWRlbnQsIGludCBkZXZpY2UpOworaW50IHNuZF90cmlkZW50X2ZvbGRiYWNrX3BjbShzdHJ1Y3Qgc25kX3RyaWRlbnQgKnRyaWRlbnQsIGludCBkZXZpY2UpOworaW50IHNuZF90cmlkZW50X3NwZGlmX3BjbShzdHJ1Y3Qgc25kX3RyaWRlbnQgKnRyaWRlbnQsIGludCBkZXZpY2UpOwogaW50IHNuZF90cmlkZW50X2F0dGFjaF9zeW50aGVzaXplcihzdHJ1Y3Qgc25kX3RyaWRlbnQgKiB0cmlkZW50KTsKIHN0cnVjdCBzbmRfdHJpZGVudF92b2ljZSAqc25kX3RyaWRlbnRfYWxsb2Nfdm9pY2Uoc3RydWN0IHNuZF90cmlkZW50ICogdHJpZGVudCwgaW50IHR5cGUsCiAJCQkJCSAgICAgaW50IGNsaWVudCwgaW50IHBvcnQpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tYWluLmMgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYwppbmRleCA1N2NkNzU3Li5iNzJiZTAzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYworKysgYi9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21haW4uYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dhbWVwb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2luZm8uaD4KQEAgLTQ0LDggKzQ1LDYgQEAKICNpbmNsdWRlICJ0cmlkZW50LmgiCiAjaW5jbHVkZSA8c291bmQvYXNvdW5kZWYuaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgotCiBzdGF0aWMgaW50IHNuZF90cmlkZW50X3BjbV9taXhlcl9idWlsZChzdHJ1Y3Qgc25kX3RyaWRlbnQgKnRyaWRlbnQsCiAJCQkJICAgICAgIHN0cnVjdCBzbmRfdHJpZGVudF92b2ljZSAqIHZvaWNlLAogCQkJCSAgICAgICBzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSk7CkBAIC0yMTcyLDE0ICsyMTcxLDExIEBACiAgIAogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1pbnQgc25kX3RyaWRlbnRfcGNtKHN0cnVjdCBzbmRfdHJpZGVudCAqdHJpZGVudCwKLQkJICAgIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK2ludCBzbmRfdHJpZGVudF9wY20oc3RydWN0IHNuZF90cmlkZW50ICp0cmlkZW50LCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycjsKIAotCWlmIChycGNtKQotCQkqcnBjbSA9IE5VTEw7CiAJaWYgKChlcnIgPSBzbmRfcGNtX25ldyh0cmlkZW50LT5jYXJkLCAidHJpZGVudF9keF9ueCIsIGRldmljZSwgdHJpZGVudC0+Q2hhblBDTSwgMSwgJnBjbSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtMjIxNCw4ICsyMjEwLDYgQEAKIAkJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEodHJpZGVudC0+cGNpKSwgNjQqMTAyNCwgMTI4KjEwMjQpOwogCX0KIAotCWlmIChycGNtKQotCQkqcnBjbSA9IHBjbTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIzMCwxNiArMjIyNCwxMyBAQAogICAKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotaW50IHNuZF90cmlkZW50X2ZvbGRiYWNrX3BjbShzdHJ1Y3Qgc25kX3RyaWRlbnQgKnRyaWRlbnQsCi0JCQkgICAgIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK2ludCBzbmRfdHJpZGVudF9mb2xkYmFja19wY20oc3RydWN0IHNuZF90cmlkZW50ICp0cmlkZW50LCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBzbmRfcGNtICpmb2xkYmFjazsKIAlpbnQgZXJyOwogCWludCBudW1fY2hhbiA9IDM7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwogCWlmICh0cmlkZW50LT5kZXZpY2UgPT0gVFJJREVOVF9ERVZJQ0VfSURfTlgpCiAJCW51bV9jaGFuID0gNDsKIAlpZiAoKGVyciA9IHNuZF9wY21fbmV3KHRyaWRlbnQtPmNhcmQsICJ0cmlkZW50X2R4X254IiwgZGV2aWNlLCAwLCBudW1fY2hhbiwgJmZvbGRiYWNrKSkgPCAwKQpAQCAtMjI3MSw4ICsyMjYyLDYgQEAKIAkJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChmb2xkYmFjaywgU05EUlZfRE1BX1RZUEVfREVWLAogCQkJCQkJICAgICAgc25kX2RtYV9wY2lfZGF0YSh0cmlkZW50LT5wY2kpLCA2NCoxMDI0LCAxMjgqMTAyNCk7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBmb2xkYmFjazsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI4NywxNCArMjI3NiwxMSBAQAogICAKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotaW50IHNuZF90cmlkZW50X3NwZGlmX3BjbShzdHJ1Y3Qgc25kX3RyaWRlbnQgKnRyaWRlbnQsCi0JCQkgIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK2ludCBzbmRfdHJpZGVudF9zcGRpZl9wY20oc3RydWN0IHNuZF90cmlkZW50ICp0cmlkZW50LCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBzbmRfcGNtICpzcGRpZjsKIAlpbnQgZXJyOwogCi0JaWYgKHJwY20pCi0JCSpycGNtID0gTlVMTDsKIAlpZiAoKGVyciA9IHNuZF9wY21fbmV3KHRyaWRlbnQtPmNhcmQsICJ0cmlkZW50X2R4X254IElFQzk1OCIsIGRldmljZSwgMSwgMCwgJnNwZGlmKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCkBAIC0yMzEwLDggKzIyOTYsNiBAQAogCiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChzcGRpZiwgU05EUlZfRE1BX1RZUEVfREVWLCBzbmRfZG1hX3BjaV9kYXRhKHRyaWRlbnQtPnBjaSksIDY0KjEwMjQsIDEyOCoxMDI0KTsKIAotCWlmIChycGNtKQotCQkqcnBjbSA9IHNwZGlmOwogCXJldHVybiAwOwogfQogCkBAIC0zOTI2LDcgKzM5MTAsNiBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCBzbmRfdHJpZGVudF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbmRfdHJpZGVudCAqdHJpZGVudCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIApAQCAtMzkzOCwyOCArMzkyMSwxNCBAQAogCiAJc25kX2FjOTdfc3VzcGVuZCh0cmlkZW50LT5hYzk3KTsKIAlzbmRfYWM5N19zdXNwZW5kKHRyaWRlbnQtPmFjOTdfc2VjKTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCXBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3RyaWRlbnRfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbmRfdHJpZGVudCAqdHJpZGVudCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCBkaXNhYmxpbmcgZGV2aWNlXG4iKTsKLQkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXBjaV9zZXRfbWFzdGVyKHBjaSk7Ci0KIAlzd2l0Y2ggKHRyaWRlbnQtPmRldmljZSkgewogCWNhc2UgVFJJREVOVF9ERVZJQ0VfSURfRFg6CiAJCXNuZF90cmlkZW50XzRkX2R4X2luaXQodHJpZGVudCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21lbW9yeS5jIGIvc291bmQvcGNpL3RyaWRlbnQvdHJpZGVudF9tZW1vcnkuYwppbmRleCAwNGM0NzQ2Li5iOWViYjUxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdHJpZGVudC90cmlkZW50X21lbW9yeS5jCisrKyBiL3NvdW5kL3BjaS90cmlkZW50L3RyaWRlbnRfbWVtb3J5LmMKQEAgLTIzLDcgKzIzLDcgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdmlhODJ4eC5jIGIvc291bmQvcGNpL3ZpYTgyeHguYwppbmRleCBlMDg4NDY3Li44NjIyMjgzIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvdmlhODJ4eC5jCisrKyBiL3NvdW5kL3BjaS92aWE4Mnh4LmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICAqCS0gT3B0aW1pemUgcG9zaXRpb24gY2FsY3VsYXRpb24gZm9yIHRoZSA4MjN4IGNoaXBzLiAKICAqLwogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTIyNzEsNyArMjI3MSw2IEBACiAgKi8KIHN0YXRpYyBpbnQgc25kX3ZpYTgyeHhfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdmlhODJ4eCAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpbnQgaTsKQEAgLTIyOTEsMjggKzIyOTAsMTUgQEAKIAkJY2hpcC0+Y2FwdHVyZV9zcmNfc2F2ZWRbMV0gPSBpbmIoY2hpcC0+cG9ydCArIFZJQV9SRUdfQ0FQVFVSRV9DSEFOTkVMICsgMHgxMCk7CiAJfQogCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaSk7Ci0JcGNpX3NhdmVfc3RhdGUocGNpKTsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QzaG90KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfdmlhODJ4eF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBwY2lfZGV2ICpwY2kgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHZpYTgyeHggKmNoaXAgPSBjYXJkLT5wcml2YXRlX2RhdGE7CiAJaW50IGk7CiAKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaSwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwY2kpOwotCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2kpIDwgMCkgewotCQlkZXZfZXJyKGRldiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCwgZGlzYWJsaW5nIGRldmljZVxuIik7Ci0JCXNuZF9jYXJkX2Rpc2Nvbm5lY3QoY2FyZCk7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlwY2lfc2V0X21hc3RlcihwY2kpOwotCiAJc25kX3ZpYTgyeHhfY2hpcF9pbml0KGNoaXApOwogCiAJaWYgKGNoaXAtPmNoaXBfdHlwZSA9PSBUWVBFX1ZJQTY4NikgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYyBiL3NvdW5kL3BjaS92aWE4Mnh4X21vZGVtLmMKaW5kZXggZmQ0NmZmZS4uOTliOTEzNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ZpYTgyeHhfbW9kZW0uYworKysgYi9zb3VuZC9wY2kvdmlhODJ4eF9tb2RlbS5jCkBAIC0zMSw3ICszMSw3IEBACiAgKiAgICAgIG1vZGVtcy4KICAqLwogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTEwMzEsNyArMTAzMSw2IEBACiAgKi8KIHN0YXRpYyBpbnQgc25kX3ZpYTgyeHhfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdmlhODJ4eF9tb2RlbSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAlpbnQgaTsKQEAgLTEwNDMsMjkgKzEwNDIsMTUgQEAKIAkJc25kX3ZpYTgyeHhfY2hhbm5lbF9yZXNldChjaGlwLCAmY2hpcC0+ZGV2c1tpXSk7CiAJc3luY2hyb25pemVfaXJxKGNoaXAtPmlycSk7CiAJc25kX2FjOTdfc3VzcGVuZChjaGlwLT5hYzk3KTsKLQotCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCXBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc25kX3ZpYTgyeHhfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB2aWE4Mnh4X21vZGVtICpjaGlwID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCWludCBpOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKLQkJZGV2X2VycihkZXYsICJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsIGRpc2FibGluZyBkZXZpY2VcbiIpOwotCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcGNpX3NldF9tYXN0ZXIocGNpKTsKLQogCXNuZF92aWE4Mnh4X2NoaXBfaW5pdChjaGlwKTsKIAogCXNuZF9hYzk3X3Jlc3VtZShjaGlwLT5hYzk3KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS92eDIyMi92eDIyMi5jIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKaW5kZXggYzVhMjVlMy4uZWNiYWY0NyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKKysrIGIvc291bmQvcGNpL3Z4MjIyL3Z4MjIyLmMKQEAgLTI1OSwzMiArMjU5LDE3IEBACiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgaW50IHNuZF92eDIyMl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbmRfdngyMjIgKnZ4ID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwotCWludCBlcnI7CiAKLQllcnIgPSBzbmRfdnhfc3VzcGVuZCgmdngtPmNvcmUpOwotCXBjaV9kaXNhYmxlX2RldmljZShwY2kpOwotCXBjaV9zYXZlX3N0YXRlKHBjaSk7Ci0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EM2hvdCk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gc25kX3Z4X3N1c3BlbmQoJnZ4LT5jb3JlKTsKIH0KIAogc3RhdGljIGludCBzbmRfdngyMjJfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpID0gdG9fcGNpX2RldihkZXYpOwogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBzbmRfdngyMjIgKnZ4ID0gY2FyZC0+cHJpdmF0ZV9kYXRhOwogCi0JcGNpX3NldF9wb3dlcl9zdGF0ZShwY2ksIFBDSV9EMCk7Ci0JcGNpX3Jlc3RvcmVfc3RhdGUocGNpKTsKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpKSA8IDApIHsKLQkJZGV2X2VycihkZXYsICJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQsIGRpc2FibGluZyBkZXZpY2VcbiIpOwotCQlzbmRfY2FyZF9kaXNjb25uZWN0KGNhcmQpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0JcGNpX3NldF9tYXN0ZXIocGNpKTsKIAlyZXR1cm4gc25kX3Z4X3Jlc3VtZSgmdngtPmNvcmUpOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvdngyMjIvdngyMjJfb3BzLmMgYi9zb3VuZC9wY2kvdngyMjIvdngyMjJfb3BzLmMKaW5kZXggNTJjMWE4ZC4uYWY4M2IzYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3Z4MjIyL3Z4MjIyX29wcy5jCisrKyBiL3NvdW5kL3BjaS92eDIyMi92eDIyMl9vcHMuYwpAQCAtMjQsMTEgKzI0LDExIEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Rsdi5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgInZ4MjIyLmgiCiAKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYyBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmMKaW5kZXggNDdhMTkyMy4uODEyZTI3YSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuYworKysgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5jCkBAIC0yODMsMTEgKzI4MywxMSBAQAogCQljYXJkLT5zaG9ydG5hbWUsCiAJCWNoaXAtPnJlZ19hcmVhX3BoeXMsCiAJCWNoaXAtPmlycSk7Ci0JaWYgKChlcnIgPSBzbmRfeW1mcGNpX3BjbShjaGlwLCAwLCBOVUxMKSkgPCAwKSB7CisJaWYgKChlcnIgPSBzbmRfeW1mcGNpX3BjbShjaGlwLCAwKSkgPCAwKSB7CiAJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCXJldHVybiBlcnI7CiAJfQotCWlmICgoZXJyID0gc25kX3ltZnBjaV9wY21fc3BkaWYoY2hpcCwgMSwgTlVMTCkpIDwgMCkgeworCWlmICgoZXJyID0gc25kX3ltZnBjaV9wY21fc3BkaWYoY2hpcCwgMSkpIDwgMCkgewogCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTI5NywxMiArMjk3LDEyIEBACiAJCXJldHVybiBlcnI7CiAJfQogCWlmIChjaGlwLT5hYzk3LT5leHRfaWQgJiBBQzk3X0VJX1NEQUMpIHsKLQkJZXJyID0gc25kX3ltZnBjaV9wY21fNGNoKGNoaXAsIDIsIE5VTEwpOworCQllcnIgPSBzbmRfeW1mcGNpX3BjbV80Y2goY2hpcCwgMik7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlzbmRfY2FyZF9mcmVlKGNhcmQpOwogCQkJcmV0dXJuIGVycjsKIAkJfQotCQllcnIgPSBzbmRfeW1mcGNpX3BjbTIoY2hpcCwgMywgTlVMTCk7CisJCWVyciA9IHNuZF95bWZwY2lfcGNtMihjaGlwLCAzKTsKIAkJaWYgKGVyciA8IDApIHsKIAkJCXNuZF9jYXJkX2ZyZWUoY2FyZCk7CiAJCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuaCBiL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpLmgKaW5kZXggNDYzMWEyMy4uMTQ5ZDRjYiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2kuaAorKysgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaS5oCkBAIC0zNzksMTAgKzM3OSwxMCBAQAogCiBleHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgc25kX3ltZnBjaV9wbTsKIAotaW50IHNuZF95bWZwY2lfcGNtKHN0cnVjdCBzbmRfeW1mcGNpICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pOwotaW50IHNuZF95bWZwY2lfcGNtMihzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKLWludCBzbmRfeW1mcGNpX3BjbV9zcGRpZihzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCwgaW50IGRldmljZSwgc3RydWN0IHNuZF9wY20gKipycGNtKTsKLWludCBzbmRfeW1mcGNpX3BjbV80Y2goc3RydWN0IHNuZF95bWZwY2kgKmNoaXAsIGludCBkZXZpY2UsIHN0cnVjdCBzbmRfcGNtICoqcnBjbSk7CitpbnQgc25kX3ltZnBjaV9wY20oc3RydWN0IHNuZF95bWZwY2kgKmNoaXAsIGludCBkZXZpY2UpOworaW50IHNuZF95bWZwY2lfcGNtMihzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCwgaW50IGRldmljZSk7CitpbnQgc25kX3ltZnBjaV9wY21fc3BkaWYoc3RydWN0IHNuZF95bWZwY2kgKmNoaXAsIGludCBkZXZpY2UpOworaW50IHNuZF95bWZwY2lfcGNtXzRjaChzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCwgaW50IGRldmljZSk7CiBpbnQgc25kX3ltZnBjaV9taXhlcihzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCwgaW50IHJlYXJfc3dpdGNoKTsKIGludCBzbmRfeW1mcGNpX3RpbWVyKHN0cnVjdCBzbmRfeW1mcGNpICpjaGlwLCBpbnQgZGV2aWNlKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jIGIvc291bmQvcGNpL3ltZnBjaS95bWZwY2lfbWFpbi5jCmluZGV4IDgxYzkxNmEuLjRjMjYwNzYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS95bWZwY2kveW1mcGNpX21haW4uYworKysgYi9zb3VuZC9wY2kveW1mcGNpL3ltZnBjaV9tYWluLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KQEAgLTM2LDcgKzM3LDYgQEAKICNpbmNsdWRlIDxzb3VuZC9hc291bmRlZi5oPgogI2luY2x1ZGUgPHNvdW5kL21wdTQwMS5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAvKgpAQCAtMTE0NSwxMyArMTE0NSwxMSBAQAogCS5wb2ludGVyID0JCXNuZF95bWZwY2lfY2FwdHVyZV9wb2ludGVyLAogfTsKIAotaW50IHNuZF95bWZwY2lfcGNtKHN0cnVjdCBzbmRfeW1mcGNpICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCitpbnQgc25kX3ltZnBjaV9wY20oc3RydWN0IHNuZF95bWZwY2kgKmNoaXAsIGludCBkZXZpY2UpCiB7CiAJc3RydWN0IHNuZF9wY20gKnBjbTsKIAlpbnQgZXJyOwogCi0JaWYgKHJwY20pCi0JCSpycGNtID0gTlVMTDsKIAlpZiAoKGVyciA9IHNuZF9wY21fbmV3KGNoaXAtPmNhcmQsICJZTUZQQ0kiLCBkZXZpY2UsIDMyLCAxLCAmcGNtKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCXBjbS0+cHJpdmF0ZV9kYXRhID0gY2hpcDsKQEAgLTExNjcsMTQgKzExNjUsOCBAQAogCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCiAJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwgNjQqMTAyNCwgMjU2KjEwMjQpOwogCi0JZXJyID0gc25kX3BjbV9hZGRfY2htYXBfY3RscyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCisJcmV0dXJuIHNuZF9wY21fYWRkX2NobWFwX2N0bHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAogCQkJCSAgICAgc25kX3BjbV9zdGRfY2htYXBzLCAyLCAwLCBOVUxMKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCWlmIChycGNtKQotCQkqcnBjbSA9IHBjbTsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfeW1mcGNpX2NhcHR1cmVfYWM5N19vcHMgPSB7CkBAIC0xMTg4LDEzICsxMTgwLDExIEBACiAJLnBvaW50ZXIgPQkJc25kX3ltZnBjaV9jYXB0dXJlX3BvaW50ZXIsCiB9OwogCi1pbnQgc25kX3ltZnBjaV9wY20yKHN0cnVjdCBzbmRfeW1mcGNpICpjaGlwLCBpbnQgZGV2aWNlLCBzdHJ1Y3Qgc25kX3BjbSAqKnJwY20pCitpbnQgc25kX3ltZnBjaV9wY20yKHN0cnVjdCBzbmRfeW1mcGNpICpjaGlwLCBpbnQgZGV2aWNlKQogewogCXN0cnVjdCBzbmRfcGNtICpwY207CiAJaW50IGVycjsKIAotCWlmIChycGNtKQotCQkqcnBjbSA9IE5VTEw7CiAJaWYgKChlcnIgPSBzbmRfcGNtX25ldyhjaGlwLT5jYXJkLCAiWU1GUENJIC0gUENNMiIsIGRldmljZSwgMCwgMSwgJnBjbSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CkBAIC0xMjEwLDggKzEyMDAsNiBAQAogCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCiAJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwgNjQqMTAyNCwgMjU2KjEwMjQpOwogCi0JaWYgKHJwY20pCi0JCSpycGNtID0gcGNtOwogCXJldHVybiAwOwogfQogCkBAIC0xMjI2LDE0ICsxMjE0LDExIEBACiAJLnBvaW50ZXIgPQkJc25kX3ltZnBjaV9wbGF5YmFja19wb2ludGVyLAogfTsKIAotaW50IHNuZF95bWZwY2lfcGNtX3NwZGlmKHN0cnVjdCBzbmRfeW1mcGNpICpjaGlwLCBpbnQgZGV2aWNlLAotCQkJIHN0cnVjdCBzbmRfcGNtICoqcnBjbSkKK2ludCBzbmRfeW1mcGNpX3BjbV9zcGRpZihzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCwgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwogCWlmICgoZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgIllNRlBDSSAtIElFQzk1OCIsIGRldmljZSwgMSwgMCwgJnBjbSkpIDwgMCkKIAkJcmV0dXJuIGVycjsKIAlwY20tPnByaXZhdGVfZGF0YSA9IGNoaXA7CkBAIC0xMjQ4LDggKzEyMzMsNiBAQAogCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX3BhZ2VzX2Zvcl9hbGwocGNtLCBTTkRSVl9ETUFfVFlQRV9ERVYsCiAJCQkJCSAgICAgIHNuZF9kbWFfcGNpX2RhdGEoY2hpcC0+cGNpKSwgNjQqMTAyNCwgMjU2KjEwMjQpOwogCi0JaWYgKHJwY20pCi0JCSpycGNtID0gcGNtOwogCXJldHVybiAwOwogfQogCkBAIC0xMjcyLDE0ICsxMjU1LDExIEBACiAJeyB9CiB9OwogCi1pbnQgc25kX3ltZnBjaV9wY21fNGNoKHN0cnVjdCBzbmRfeW1mcGNpICpjaGlwLCBpbnQgZGV2aWNlLAotCQkgICAgICAgc3RydWN0IHNuZF9wY20gKipycGNtKQoraW50IHNuZF95bWZwY2lfcGNtXzRjaChzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCwgaW50IGRldmljZSkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtOwogCWludCBlcnI7CiAKLQlpZiAocnBjbSkKLQkJKnJwY20gPSBOVUxMOwogCWlmICgoZXJyID0gc25kX3BjbV9uZXcoY2hpcC0+Y2FyZCwgIllNRlBDSSAtIFJlYXIiLCBkZXZpY2UsIDEsIDAsICZwY20pKSA8IDApCiAJCXJldHVybiBlcnI7CiAJcGNtLT5wcml2YXRlX2RhdGEgPSBjaGlwOwpAQCAtMTI5NCwxNCArMTI3NCw4IEBACiAJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0RFViwKIAkJCQkJICAgICAgc25kX2RtYV9wY2lfZGF0YShjaGlwLT5wY2kpLCA2NCoxMDI0LCAyNTYqMTAyNCk7CiAKLQllcnIgPSBzbmRfcGNtX2FkZF9jaG1hcF9jdGxzKHBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywKKwlyZXR1cm4gc25kX3BjbV9hZGRfY2htYXBfY3RscyhwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0ssCiAJCQkJICAgICBzdXJyb3VuZF9tYXAsIDIsIDAsIE5VTEwpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKHJwY20pCi0JCSpycGNtID0gcGNtOwotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNuZF95bWZwY2lfc3BkaWZfZGVmYXVsdF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQpAQCAtMjI3Miw4ICsyMjQ2LDcgQEAKIAlyZWxlYXNlX2FuZF9mcmVlX3Jlc291cmNlKGNoaXAtPm1wdV9yZXMpOwogCXJlbGVhc2VfYW5kX2ZyZWVfcmVzb3VyY2UoY2hpcC0+Zm1fcmVzKTsKIAlzbmRfeW1mcGNpX2ZyZWVfZ2FtZXBvcnQoY2hpcCk7Ci0JaWYgKGNoaXAtPnJlZ19hcmVhX3ZpcnQpCi0JCWlvdW5tYXAoY2hpcC0+cmVnX2FyZWFfdmlydCk7CisJaW91bm1hcChjaGlwLT5yZWdfYXJlYV92aXJ0KTsKIAlpZiAoY2hpcC0+d29ya19wdHIuYXJlYSkKIAkJc25kX2RtYV9mcmVlX3BhZ2VzKCZjaGlwLT53b3JrX3B0cik7CiAJCkBAIC0yMzI2LDcgKzIyOTksNiBAQAogCiBzdGF0aWMgaW50IHNuZF95bWZwY2lfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaSA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTIzNDcsOSArMjMxOSw2IEBACiAJc25kX3ltZnBjaV93cml0ZWwoY2hpcCwgWURTWEdSX05BVElWRURBQ09VVFZPTCwgMCk7CiAJc25kX3ltZnBjaV93cml0ZWwoY2hpcCwgWURTWEdSX0JVRjQ0MU9VVFZPTCwgMCk7CiAJc25kX3ltZnBjaV9kaXNhYmxlX2RzcChjaGlwKTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGNpKTsKLQlwY2lfc2F2ZV9zdGF0ZShwY2kpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDNob3QpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzYwLDE0ICsyMzI5LDYgQEAKIAlzdHJ1Y3Qgc25kX3ltZnBjaSAqY2hpcCA9IGNhcmQtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGNpLCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlKHBjaSk7Ci0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBjaSkgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAicGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkLCBkaXNhYmxpbmcgZGV2aWNlXG4iKTsKLQkJc25kX2NhcmRfZGlzY29ubmVjdChjYXJkKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXBjaV9zZXRfbWFzdGVyKHBjaSk7CiAJc25kX3ltZnBjaV9hY2xpbmtfcmVzZXQocGNpKTsKIAlzbmRfeW1mcGNpX2NvZGVjX3JlYWR5KGNoaXAsIDApOwogCXNuZF95bWZwY2lfZG93bmxvYWRfaW1hZ2UoY2hpcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvYXdhY3MuYyBiL3NvdW5kL3BwYy9hd2Fjcy5jCmluZGV4IDVmYmY1ZGIuLjA5ZGE3YjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9hd2Fjcy5jCisrKyBiL3NvdW5kL3BwYy9hd2Fjcy5jCkBAIC0yMCw3ICsyMCw3IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vbnZyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9iZWVwLmMgYi9zb3VuZC9wcGMvYmVlcC5jCmluZGV4IDAwNDBmMDQuLmQzNTI0ZjkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BwYy9iZWVwLmMKKysrIGIvc291bmQvcHBjL2JlZXAuYwpAQCAtMTgsNyArMTgsNyBAQAogICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKICAqLwogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9idXJndW5keS5jIGIvc291bmQvcHBjL2J1cmd1bmR5LmMKaW5kZXggY2I0ZjBhNS4uYjg2MTU5ZSAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2J1cmd1bmR5LmMKKysrIGIvc291bmQvcHBjL2J1cmd1bmR5LmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3BtYWMuYyBiL3NvdW5kL3BwYy9wbWFjLmMKaW5kZXggNWExM2IyMi4uMTMxNDZkNyAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3BtYWMuYworKysgYi9zb3VuZC9wcGMvcG1hYy5jCkBAIC0yMCw3ICsyMCw3IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC04NjcsMTYgKzg2NywxMSBAQAogCXNuZF9wbWFjX2RiZG1hX2ZyZWUoY2hpcCwgJmNoaXAtPmNhcHR1cmUuY21kKTsKIAlzbmRfcG1hY19kYmRtYV9mcmVlKGNoaXAsICZjaGlwLT5leHRyYV9kbWEpOwogCXNuZF9wbWFjX2RiZG1hX2ZyZWUoY2hpcCwgJmVtZXJnZW5jeV9kYmRtYSk7Ci0JaWYgKGNoaXAtPm1hY2lvX2Jhc2UpCi0JCWlvdW5tYXAoY2hpcC0+bWFjaW9fYmFzZSk7Ci0JaWYgKGNoaXAtPmxhdGNoX2Jhc2UpCi0JCWlvdW5tYXAoY2hpcC0+bGF0Y2hfYmFzZSk7Ci0JaWYgKGNoaXAtPmF3YWNzKQotCQlpb3VubWFwKGNoaXAtPmF3YWNzKTsKLQlpZiAoY2hpcC0+cGxheWJhY2suZG1hKQotCQlpb3VubWFwKGNoaXAtPnBsYXliYWNrLmRtYSk7Ci0JaWYgKGNoaXAtPmNhcHR1cmUuZG1hKQotCQlpb3VubWFwKGNoaXAtPmNhcHR1cmUuZG1hKTsKKwlpb3VubWFwKGNoaXAtPm1hY2lvX2Jhc2UpOworCWlvdW5tYXAoY2hpcC0+bGF0Y2hfYmFzZSk7CisJaW91bm1hcChjaGlwLT5hd2Fjcyk7CisJaW91bm1hcChjaGlwLT5wbGF5YmFjay5kbWEpOworCWlvdW5tYXAoY2hpcC0+Y2FwdHVyZS5kbWEpOwogCiAJaWYgKGNoaXAtPm5vZGUpIHsKIAkJaW50IGk7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvc25kX3BzMy5jIGIvc291bmQvcHBjL3NuZF9wczMuYwppbmRleCA1OGYyOTJhLi4zNjgyNDI1IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvc25kX3BzMy5jCisrKyBiL3NvdW5kL3BwYy9zbmRfcHMzLmMKQEAgLTEwNDQsNyArMTA0NCw3IEBACiAJaWYgKCF0aGVfY2FyZC5udWxsX2J1ZmZlcl9zdGFydF92YWRkcikgewogCQlwcl9pbmZvKCIlczogbnVsbGJ1ZmZlciBhbGxvYyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBjbGVhbl9wcmVhbGxvY2F0ZTsKKwkJZ290byBjbGVhbl9jYXJkOwogCX0KIAlwcl9kZWJ1ZygiJXM6IG51bGwgdmFkZHI9JXAgZG1hPSUjbGx4XG4iLCBfX2Z1bmNfXywKIAkJIHRoZV9jYXJkLm51bGxfYnVmZmVyX3N0YXJ0X3ZhZGRyLApAQCAtMTA2Niw4ICsxMDY2LDYgQEAKIAkJCSAgUEFHRV9TSVpFLAogCQkJICB0aGVfY2FyZC5udWxsX2J1ZmZlcl9zdGFydF92YWRkciwKIAkJCSAgdGhlX2NhcmQubnVsbF9idWZmZXJfc3RhcnRfZG1hX2FkZHIpOwotY2xlYW5fcHJlYWxsb2NhdGU6Ci0Jc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfZnJlZV9mb3JfYWxsKHRoZV9jYXJkLnBjbSk7CiBjbGVhbl9jYXJkOgogCXNuZF9jYXJkX2ZyZWUodGhlX2NhcmQuY2FyZCk7CiBjbGVhbl9pcnE6CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvdHVtYmxlci5jIGIvc291bmQvcHBjL3R1bWJsZXIuYwppbmRleCAyNGM4NzY2Li5jOGZhZmJhIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvdHVtYmxlci5jCisrKyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKQEAgLTMyLDggKzMyLDggQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KICNpbmNsdWRlIDxhc20vcG1hY19mZWF0dXJlLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9zaC9haWNhLmMgYi9zb3VuZC9zaC9haWNhLmMKaW5kZXggZjQ0ZGRhNi4uYWQzZDlhZSAxMDA2NDQKLS0tIGEvc291bmQvc2gvYWljYS5jCisrKyBiL3NvdW5kL3NoL2FpY2EuYwpAQCAtMzUsMTIgKzM1LDEyIEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAjaW5jbHVkZSA8c291bmQvaW5mby5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxtYWNoL3N5c2FzaWMuaD4KICNpbmNsdWRlICJhaWNhLmgiCkBAIC0zNDMsMTEgKzM0Myw5IEBACiAJCW1vZF90aW1lcigmZHJlYW1jYXN0Y2FyZC0+dGltZXIsIGppZmZpZXMgKyA0KTsKIAkJcmV0dXJuOwogCX0KLQlpbml0X3RpbWVyKCYoZHJlYW1jYXN0Y2FyZC0+dGltZXIpKTsKLQlkcmVhbWNhc3RjYXJkLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHN1YnN0cmVhbTsKLQlkcmVhbWNhc3RjYXJkLT50aW1lci5mdW5jdGlvbiA9IGFpY2FfcGVyaW9kX2VsYXBzZWQ7Ci0JZHJlYW1jYXN0Y2FyZC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyA0OwotCWFkZF90aW1lcigmKGRyZWFtY2FzdGNhcmQtPnRpbWVyKSk7CisJc2V0dXBfdGltZXIoJmRyZWFtY2FzdGNhcmQtPnRpbWVyLCBhaWNhX3BlcmlvZF9lbGFwc2VkLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpIHN1YnN0cmVhbSk7CisJbW9kX3RpbWVyKCZkcmVhbWNhc3RjYXJkLT50aW1lciwgamlmZmllcyArIDQpOwogfQogCiBzdGF0aWMgaW50IHNuZF9haWNhcGNtX3BjbV9vcGVuKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL0tjb25maWcgYi9zb3VuZC9zb2MvS2NvbmZpZwppbmRleCA3ZDVkNjQ0Li5kY2M3OWFhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvS2NvbmZpZwpAQCAtNTUsNiArNTUsNyBAQAogc291cmNlICJzb3VuZC9zb2MvdGVncmEvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL3R4eDkvS2NvbmZpZyIKIHNvdXJjZSAic291bmQvc29jL3V4NTAwL0tjb25maWciCitzb3VyY2UgInNvdW5kL3NvYy94dGVuc2EvS2NvbmZpZyIKIAogIyBTdXBwb3J0ZWQgY29kZWNzCiBzb3VyY2UgInNvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9NYWtlZmlsZQppbmRleCA4NjVlMDkwLi41YjNjOGY2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvTWFrZWZpbGUKKysrIGIvc291bmQvc29jL01ha2VmaWxlCkBAIC0zNiwzICszNiw0IEBACiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gdGVncmEvCiBvYmotJChDT05GSUdfU05EX1NPQykJKz0gdHh4OS8KIG9iai0kKENPTkZJR19TTkRfU09DKQkrPSB1eDUwMC8KK29iai0kKENPTkZJR19TTkRfU09DKQkrPSB4dGVuc2EvCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYWRpL2F4aS1pMnMuYyBiL3NvdW5kL3NvYy9hZGkvYXhpLWkycy5jCmluZGV4IDc3NTI4NjAuLjRjMjMzODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hZGkvYXhpLWkycy5jCisrKyBiL3NvdW5kL3NvYy9hZGkvYXhpLWkycy5jCkBAIC0yNDAsNiArMjQwLDggQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKIAorCXJldHVybiAwOworCiBlcnJfY2xrX2Rpc2FibGU6CiAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGkycy0+Y2xrKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL0tjb25maWcgYi9zb3VuZC9zb2MvYXRtZWwvS2NvbmZpZwppbmRleCBmYjM4NzgzLi4xNTc5ZTk5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvYXRtZWwvS2NvbmZpZwpAQCAtNDUsNyArNDUsNyBAQAogCiBjb25maWcgU05EX0FUOTFfU09DX1NBTTlYNV9XTTg3MzEKIAl0cmlzdGF0ZSAiU29DIEF1ZGlvIHN1cHBvcnQgZm9yIFdNODczMS1iYXNlZCBhdDkxc2FtOXg1IGJvYXJkIgotCWRlcGVuZHMgb24gQVRNRUxfU1NDICYmIFNORF9BVE1FTF9TT0MgJiYgU09DX0FUOTFTQU05WDUKKwlkZXBlbmRzIG9uIEFSQ0hfQVQ5MSAmJiBBVE1FTF9TU0MgJiYgU05EX0FUTUVMX1NPQwogCXNlbGVjdCBTTkRfQVRNRUxfU09DX1NTQwogCXNlbGVjdCBTTkRfQVRNRUxfU09DX0RNQQogCXNlbGVjdCBTTkRfU09DX1dNODczMQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL2F0bWVsLXBjbS1kbWEuYyBiL3NvdW5kL3NvYy9hdG1lbC9hdG1lbC1wY20tZG1hLmMKaW5kZXggMzNmYjNiYi4uYjhlN2JhZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL2F0bWVsLXBjbS1kbWEuYworKysgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWwtcGNtLWRtYS5jCkBAIC0xMDUsMTMgKzEwNSwxMSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLKSB7Ci0JCXNsYXZlX2NvbmZpZy0+ZHN0X2FkZHIgPSBzc2MtPnBoeWJhc2UgKyBTU0NfVEhSOwotCQlzbGF2ZV9jb25maWctPmRzdF9tYXhidXJzdCA9IDE7Ci0JfSBlbHNlIHsKLQkJc2xhdmVfY29uZmlnLT5zcmNfYWRkciA9IHNzYy0+cGh5YmFzZSArIFNTQ19SSFI7Ci0JCXNsYXZlX2NvbmZpZy0+c3JjX21heGJ1cnN0ID0gMTsKLQl9CisJc2xhdmVfY29uZmlnLT5kc3RfYWRkciA9IHNzYy0+cGh5YmFzZSArIFNTQ19USFI7CisJc2xhdmVfY29uZmlnLT5kc3RfbWF4YnVyc3QgPSAxOworCisJc2xhdmVfY29uZmlnLT5zcmNfYWRkciA9IHNzYy0+cGh5YmFzZSArIFNTQ19SSFI7CisJc2xhdmVfY29uZmlnLT5zcmNfbWF4YnVyc3QgPSAxOwogCiAJcHJ0ZC0+ZG1hX2ludHJfaGFuZGxlciA9IGF0bWVsX3BjbV9kbWFfaXJxOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jIGIvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYwppbmRleCA5OWZmMzVlLi5mYjBiN2U4YiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2F0bWVsL2F0bWVsX3NzY19kYWkuYworKysgYi9zb3VuZC9zb2MvYXRtZWwvYXRtZWxfc3NjX2RhaS5jCkBAIC0yMDQsNiArMjA0LDEzIEBACiAJcHJfZGVidWcoImF0bWVsX3NzY19zdGFydHVwOiBTU0NfU1I9MHgldVxuIiwKIAkJc3NjX3JlYWRsKHNzY19wLT5zc2MtPnJlZ3MsIFNSKSk7CiAKKwkvKiBFbmFibGUgUE1DIHBlcmlwaGVyYWwgY2xvY2sgZm9yIHRoaXMgU1NDICovCisJcHJfZGVidWcoImF0bWVsX3NzY19kYWk6IFN0YXJ0aW5nIGNsb2NrXG4iKTsKKwljbGtfZW5hYmxlKHNzY19wLT5zc2MtPmNsayk7CisKKwkvKiBSZXNldCB0aGUgU1NDIHRvIGtlZXAgaXQgYXQgYSBjbGVhbiBzdGF0dXMgKi8KKwlzc2Nfd3JpdGVsKHNzY19wLT5zc2MtPnJlZ3MsIENSLCBTU0NfQklUKENSX1NXUlNUKSk7CisKIAlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgewogCQlkaXIgPSAwOwogCQlkaXJfbWFzayA9IFNTQ19ESVJfTUFTS19QTEFZQkFDSzsKQEAgLTI1MCwxMSArMjU3LDYgQEAKIAlkbWFfcGFyYW1zID0gc3NjX3AtPmRtYV9wYXJhbXNbZGlyXTsKIAogCWlmIChkbWFfcGFyYW1zICE9IE5VTEwpIHsKLQkJc3NjX3dyaXRlbChzc2NfcC0+c3NjLT5yZWdzLCBDUiwgZG1hX3BhcmFtcy0+bWFzay0+c3NjX2Rpc2FibGUpOwotCQlwcl9kZWJ1ZygiYXRtZWxfc3NjX3NodXRkb3duOiAlcyBkaXNhYmxlZCBTU0NfU1I9MHglMDh4XG4iLAotCQkJKGRpciA/ICJyZWNlaXZlIiA6ICJ0cmFuc21pdCIpLAotCQkJc3NjX3JlYWRsKHNzY19wLT5zc2MtPnJlZ3MsIFNSKSk7Ci0KIAkJZG1hX3BhcmFtcy0+c3NjID0gTlVMTDsKIAkJZG1hX3BhcmFtcy0+c3Vic3RyZWFtID0gTlVMTDsKIAkJc3NjX3AtPmRtYV9wYXJhbXNbZGlyXSA9IE5VTEw7CkBAIC0yNjYsMTAgKzI2OCw2IEBACiAJc3NjX3AtPmRpcl9tYXNrICY9IH5kaXJfbWFzazsKIAlpZiAoIXNzY19wLT5kaXJfbWFzaykgewogCQlpZiAoc3NjX3AtPmluaXRpYWxpemVkKSB7Ci0JCQkvKiBTaHV0ZG93biB0aGUgU1NDIGNsb2NrLiAqLwotCQkJcHJfZGVidWcoImF0bWVsX3NzY19kYWk6IFN0b3BwaW5nIGNsb2NrXG4iKTsKLQkJCWNsa19kaXNhYmxlKHNzY19wLT5zc2MtPmNsayk7Ci0KIAkJCWZyZWVfaXJxKHNzY19wLT5zc2MtPmlycSwgc3NjX3ApOwogCQkJc3NjX3AtPmluaXRpYWxpemVkID0gMDsKIAkJfQpAQCAtMjgwLDYgKzI3OCwxMCBAQAogCQlzc2NfcC0+Y21yX2RpdiA9IHNzY19wLT50Y21yX3BlcmlvZCA9IHNzY19wLT5yY21yX3BlcmlvZCA9IDA7CiAJfQogCXNwaW5fdW5sb2NrX2lycSgmc3NjX3AtPmxvY2spOworCisJLyogU2h1dGRvd24gdGhlIFNTQyBjbG9jay4gKi8KKwlwcl9kZWJ1ZygiYXRtZWxfc3NjX2RhaTogU3RvcHBpbmcgY2xvY2tcbiIpOworCWNsa19kaXNhYmxlKHNzY19wLT5zc2MtPmNsayk7CiB9CiAKIApAQCAtMzQ4LDcgKzM1MCw2IEBACiAJc3RydWN0IGF0bWVsX3BjbV9kbWFfcGFyYW1zICpkbWFfcGFyYW1zOwogCWludCBkaXIsIGNoYW5uZWxzLCBiaXRzOwogCXUzMiB0Zm1yLCByZm1yLCB0Y21yLCByY21yOwotCWludCBzdGFydF9ldmVudDsKIAlpbnQgcmV0OwogCWludCBmc2xlbiwgZnNsZW5fZXh0OwogCkBAIC00NTEsMjUgKzQ1MiwxMCBAQAogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKLQkJLyoKLQkJICogSTJTIGZvcm1hdCwgQ09ERUMgc3VwcGxpZXMgQkNMSyBhbmQgTFJDIGNsb2Nrcy4KLQkJICoKLQkJICogVGhlIFNTQyB0cmFuc21pdCBjbG9jayBpcyBvYnRhaW5lZCBmcm9tIHRoZSBCQ0xLIHNpZ25hbCBvbgotCQkgKiBvbiB0aGUgVEsgbGluZSwgYW5kIHRoZSBTU0MgcmVjZWl2ZSBjbG9jayBpcwotCQkgKiBnZW5lcmF0ZWQgZnJvbSB0aGUgdHJhbnNtaXQgY2xvY2suCi0JCSAqCi0JCSAqICBGb3Igc2luZ2xlIGNoYW5uZWwgZGF0YSwgb25lIHNhbXBsZSBpcyB0cmFuc2ZlcnJlZAotCQkgKiBvbiB0aGUgZmFsbGluZyBlZGdlIG9mIHRoZSBMUkMgY2xvY2suCi0JCSAqIEZvciB0d28gY2hhbm5lbCBkYXRhLCBvbmUgc2FtcGxlIGlzCi0JCSAqIHRyYW5zZmVycmVkIG9uIGJvdGggZWRnZXMgb2YgdGhlIExSQyBjbG9jay4KLQkJICovCi0JCXN0YXJ0X2V2ZW50ID0gKChjaGFubmVscyA9PSAxKQotCQkJCT8gU1NDX1NUQVJUX0ZBTExJTkdfUkYKLQkJCQk6IFNTQ19TVEFSVF9FREdFX1JGKTsKLQorCQkvKiBJMlMgZm9ybWF0LCBDT0RFQyBzdXBwbGllcyBCQ0xLIGFuZCBMUkMgY2xvY2tzLiAqLwogCQlyY21yID0JICBTU0NfQkYoUkNNUl9QRVJJT0QsIDApCiAJCQl8IFNTQ19CRihSQ01SX1NUVERMWSwgU1RBUlRfREVMQVkpCi0JCQl8IFNTQ19CRihSQ01SX1NUQVJULCBzdGFydF9ldmVudCkKKwkJCXwgU1NDX0JGKFJDTVJfU1RBUlQsIFNTQ19TVEFSVF9GQUxMSU5HX1JGKQogCQkJfCBTU0NfQkYoUkNNUl9DS0ksIFNTQ19DS0lfUklTSU5HKQogCQkJfCBTU0NfQkYoUkNNUl9DS08sIFNTQ19DS09fTk9ORSkKIAkJCXwgU1NDX0JGKFJDTVJfQ0tTLCBzc2MtPmNsa19mcm9tX3JrX3BpbiA/CkBAIC00NzgsMTQgKzQ2NCwxNCBAQAogCQlyZm1yID0JICBTU0NfQkYoUkZNUl9GU0VER0UsIFNTQ19GU0VER0VfUE9TSVRJVkUpCiAJCQl8IFNTQ19CRihSRk1SX0ZTT1MsIFNTQ19GU09TX05PTkUpCiAJCQl8IFNTQ19CRihSRk1SX0ZTTEVOLCAwKQotCQkJfCBTU0NfQkYoUkZNUl9EQVROQiwgMCkKKwkJCXwgU1NDX0JGKFJGTVJfREFUTkIsIChjaGFubmVscyAtIDEpKQogCQkJfCBTU0NfQklUKFJGTVJfTVNCRikKIAkJCXwgU1NDX0JGKFJGTVJfTE9PUCwgMCkKIAkJCXwgU1NDX0JGKFJGTVJfREFUTEVOLCAoYml0cyAtIDEpKTsKIAogCQl0Y21yID0JICBTU0NfQkYoVENNUl9QRVJJT0QsIDApCiAJCQl8IFNTQ19CRihUQ01SX1NUVERMWSwgU1RBUlRfREVMQVkpCi0JCQl8IFNTQ19CRihUQ01SX1NUQVJULCBzdGFydF9ldmVudCkKKwkJCXwgU1NDX0JGKFRDTVJfU1RBUlQsIFNTQ19TVEFSVF9GQUxMSU5HX1JGKQogCQkJfCBTU0NfQkYoVENNUl9DS0ksIFNTQ19DS0lfRkFMTElORykKIAkJCXwgU1NDX0JGKFRDTVJfQ0tPLCBTU0NfQ0tPX05PTkUpCiAJCQl8IFNTQ19CRihUQ01SX0NLUywgc3NjLT5jbGtfZnJvbV9ya19waW4gPwpAQCAtNDk1LDcgKzQ4MSw1NSBAQAogCQkJfCBTU0NfQkYoVEZNUl9GU0RFTiwgMCkKIAkJCXwgU1NDX0JGKFRGTVJfRlNPUywgU1NDX0ZTT1NfTk9ORSkKIAkJCXwgU1NDX0JGKFRGTVJfRlNMRU4sIDApCi0JCQl8IFNTQ19CRihURk1SX0RBVE5CLCAwKQorCQkJfCBTU0NfQkYoVEZNUl9EQVROQiwgKGNoYW5uZWxzIC0gMSkpCisJCQl8IFNTQ19CSVQoVEZNUl9NU0JGKQorCQkJfCBTU0NfQkYoVEZNUl9EQVRERUYsIDApCisJCQl8IFNTQ19CRihURk1SX0RBVExFTiwgKGJpdHMgLSAxKSk7CisJCWJyZWFrOworCisJY2FzZSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOgorCQkvKiBJMlMgZm9ybWF0LCBDT0RFQyBzdXBwbGllcyBCQ0xLLCBTU0Mgc3VwcGxpZXMgTFJDTEsuICovCisJCWlmIChiaXRzID4gMTYgJiYgIXNzYy0+cGRhdGEtPmhhc19mc2xlbl9leHQpIHsKKwkJCWRldl9lcnIoZGFpLT5kZXYsCisJCQkJInNhbXBsZSBzaXplICVkIGlzIHRvbyBsYXJnZSBmb3IgU1NDIGRldmljZVxuIiwKKwkJCQliaXRzKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJZnNsZW5fZXh0ID0gKGJpdHMgLSAxKSAvIDE2OworCQlmc2xlbiA9IChiaXRzIC0gMSkgJSAxNjsKKworCQlyY21yID0JICBTU0NfQkYoUkNNUl9QRVJJT0QsIHNzY19wLT5yY21yX3BlcmlvZCkKKwkJCXwgU1NDX0JGKFJDTVJfU1RURExZLCBTVEFSVF9ERUxBWSkKKwkJCXwgU1NDX0JGKFJDTVJfU1RBUlQsIFNTQ19TVEFSVF9GQUxMSU5HX1JGKQorCQkJfCBTU0NfQkYoUkNNUl9DS0ksIFNTQ19DS0lfUklTSU5HKQorCQkJfCBTU0NfQkYoUkNNUl9DS08sIFNTQ19DS09fTk9ORSkKKwkJCXwgU1NDX0JGKFJDTVJfQ0tTLCBzc2MtPmNsa19mcm9tX3JrX3BpbiA/CisJCQkJCSAgIFNTQ19DS1NfUElOIDogU1NDX0NLU19DTE9DSyk7CisKKwkJcmZtciA9ICAgIFNTQ19CRihSRk1SX0ZTTEVOX0VYVCwgZnNsZW5fZXh0KQorCQkJfCBTU0NfQkYoUkZNUl9GU0VER0UsIFNTQ19GU0VER0VfUE9TSVRJVkUpCisJCQl8IFNTQ19CRihSRk1SX0ZTT1MsIFNTQ19GU09TX05FR0FUSVZFKQorCQkJfCBTU0NfQkYoUkZNUl9GU0xFTiwgZnNsZW4pCisJCQl8IFNTQ19CRihSRk1SX0RBVE5CLCAoY2hhbm5lbHMgLSAxKSkKKwkJCXwgU1NDX0JJVChSRk1SX01TQkYpCisJCQl8IFNTQ19CRihSRk1SX0xPT1AsIDApCisJCQl8IFNTQ19CRihSRk1SX0RBVExFTiwgKGJpdHMgLSAxKSk7CisKKwkJdGNtciA9CSAgU1NDX0JGKFRDTVJfUEVSSU9ELCBzc2NfcC0+dGNtcl9wZXJpb2QpCisJCQl8IFNTQ19CRihUQ01SX1NUVERMWSwgU1RBUlRfREVMQVkpCisJCQl8IFNTQ19CRihUQ01SX1NUQVJULCBTU0NfU1RBUlRfRkFMTElOR19SRikKKwkJCXwgU1NDX0JGKFRDTVJfQ0tJLCBTU0NfQ0tJX0ZBTExJTkcpCisJCQl8IFNTQ19CRihUQ01SX0NLTywgU1NDX0NLT19OT05FKQorCQkJfCBTU0NfQkYoVENNUl9DS1MsIHNzYy0+Y2xrX2Zyb21fcmtfcGluID8KKwkJCQkJICAgU1NDX0NLU19DTE9DSyA6IFNTQ19DS1NfUElOKTsKKworCQl0Zm1yID0gICAgU1NDX0JGKFRGTVJfRlNMRU5fRVhULCBmc2xlbl9leHQpCisJCQl8IFNTQ19CRihURk1SX0ZTRURHRSwgU1NDX0ZTRURHRV9ORUdBVElWRSkKKwkJCXwgU1NDX0JGKFRGTVJfRlNERU4sIDApCisJCQl8IFNTQ19CRihURk1SX0ZTT1MsIFNTQ19GU09TX05FR0FUSVZFKQorCQkJfCBTU0NfQkYoVEZNUl9GU0xFTiwgZnNsZW4pCisJCQl8IFNTQ19CRihURk1SX0RBVE5CLCAoY2hhbm5lbHMgLSAxKSkKIAkJCXwgU1NDX0JJVChURk1SX01TQkYpCiAJCQl8IFNTQ19CRihURk1SX0RBVERFRiwgMCkKIAkJCXwgU1NDX0JGKFRGTVJfREFUTEVOLCAoYml0cyAtIDEpKTsKQEAgLTUxMiw3ICs1NDYsNyBAQAogCQlyY21yID0JICBTU0NfQkYoUkNNUl9QRVJJT0QsIHNzY19wLT5yY21yX3BlcmlvZCkKIAkJCXwgU1NDX0JGKFJDTVJfU1RURExZLCAxKQogCQkJfCBTU0NfQkYoUkNNUl9TVEFSVCwgU1NDX1NUQVJUX1JJU0lOR19SRikKLQkJCXwgU1NDX0JGKFJDTVJfQ0tJLCBTU0NfQ0tJX1JJU0lORykKKwkJCXwgU1NDX0JGKFJDTVJfQ0tJLCBTU0NfQ0tJX0ZBTExJTkcpCiAJCQl8IFNTQ19CRihSQ01SX0NLTywgU1NDX0NLT19OT05FKQogCQkJfCBTU0NfQkYoUkNNUl9DS1MsIFNTQ19DS1NfRElWKTsKIApAQCAtNTI3LDcgKzU2MSw3IEBACiAJCXRjbXIgPQkgIFNTQ19CRihUQ01SX1BFUklPRCwgc3NjX3AtPnRjbXJfcGVyaW9kKQogCQkJfCBTU0NfQkYoVENNUl9TVFRETFksIDEpCiAJCQl8IFNTQ19CRihUQ01SX1NUQVJULCBTU0NfU1RBUlRfUklTSU5HX1JGKQotCQkJfCBTU0NfQkYoVENNUl9DS0ksIFNTQ19DS0lfUklTSU5HKQorCQkJfCBTU0NfQkYoVENNUl9DS0ksIFNTQ19DS0lfRkFMTElORykKIAkJCXwgU1NDX0JGKFRDTVJfQ0tPLCBTU0NfQ0tPX0NPTlRJTlVPVVMpCiAJCQl8IFNTQ19CRihUQ01SX0NLUywgU1NDX0NLU19ESVYpOwogCkBAIC01NDUsMTAgKzU3OSw2IEBACiAJCS8qCiAJCSAqIERTUC9QQ00gTW9kZSBBIGZvcm1hdCwgQ09ERUMgc3VwcGxpZXMgQkNMSyBhbmQgTFJDIGNsb2Nrcy4KIAkJICoKLQkJICogVGhlIFNTQyB0cmFuc21pdCBjbG9jayBpcyBvYnRhaW5lZCBmcm9tIHRoZSBCQ0xLIHNpZ25hbCBvbgotCQkgKiBvbiB0aGUgVEsgbGluZSwgYW5kIHRoZSBTU0MgcmVjZWl2ZSBjbG9jayBpcwotCQkgKiBnZW5lcmF0ZWQgZnJvbSB0aGUgdHJhbnNtaXQgY2xvY2suCi0JCSAqCiAJCSAqIERhdGEgaXMgdHJhbnNmZXJyZWQgb24gZmlyc3QgQkNMSyBhZnRlciBMUkMgcHVsc2UgcmlzaW5nCiAJCSAqIGVkZ2UuSWYgc3RlcmVvLCB0aGUgcmlnaHQgY2hhbm5lbCBkYXRhIGlzIGNvbnRpZ3VvdXMgd2l0aAogCQkgKiB0aGUgbGVmdCBjaGFubmVsIGRhdGEuCkBAIC01NTYsNyArNTg2LDcgQEAKIAkJcmNtciA9CSAgU1NDX0JGKFJDTVJfUEVSSU9ELCAwKQogCQkJfCBTU0NfQkYoUkNNUl9TVFRETFksIFNUQVJUX0RFTEFZKQogCQkJfCBTU0NfQkYoUkNNUl9TVEFSVCwgU1NDX1NUQVJUX1JJU0lOR19SRikKLQkJCXwgU1NDX0JGKFJDTVJfQ0tJLCBTU0NfQ0tJX1JJU0lORykKKwkJCXwgU1NDX0JGKFJDTVJfQ0tJLCBTU0NfQ0tJX0ZBTExJTkcpCiAJCQl8IFNTQ19CRihSQ01SX0NLTywgU1NDX0NLT19OT05FKQogCQkJfCBTU0NfQkYoUkNNUl9DS1MsIHNzYy0+Y2xrX2Zyb21fcmtfcGluID8KIAkJCQkJICAgU1NDX0NLU19QSU4gOiBTU0NfQ0tTX0NMT0NLKTsKQEAgLTU5NywyMyArNjI3LDE3IEBACiAJCQlyY21yLCByZm1yLCB0Y21yLCB0Zm1yKTsKIAogCWlmICghc3NjX3AtPmluaXRpYWxpemVkKSB7CisJCWlmICghc3NjX3AtPnNzYy0+cGRhdGEtPnVzZV9kbWEpIHsKKwkJCXNzY193cml0ZWwoc3NjX3AtPnNzYy0+cmVncywgUERDX1JQUiwgMCk7CisJCQlzc2Nfd3JpdGVsKHNzY19wLT5zc2MtPnJlZ3MsIFBEQ19SQ1IsIDApOworCQkJc3NjX3dyaXRlbChzc2NfcC0+c3NjLT5yZWdzLCBQRENfUk5QUiwgMCk7CisJCQlzc2Nfd3JpdGVsKHNzY19wLT5zc2MtPnJlZ3MsIFBEQ19STkNSLCAwKTsKIAotCQkvKiBFbmFibGUgUE1DIHBlcmlwaGVyYWwgY2xvY2sgZm9yIHRoaXMgU1NDICovCi0JCXByX2RlYnVnKCJhdG1lbF9zc2NfZGFpOiBTdGFydGluZyBjbG9ja1xuIik7Ci0JCWNsa19lbmFibGUoc3NjX3AtPnNzYy0+Y2xrKTsKLQotCQkvKiBSZXNldCB0aGUgU1NDIGFuZCBpdHMgUERDIHJlZ2lzdGVycyAqLwotCQlzc2Nfd3JpdGVsKHNzY19wLT5zc2MtPnJlZ3MsIENSLCBTU0NfQklUKENSX1NXUlNUKSk7Ci0KLQkJc3NjX3dyaXRlbChzc2NfcC0+c3NjLT5yZWdzLCBQRENfUlBSLCAwKTsKLQkJc3NjX3dyaXRlbChzc2NfcC0+c3NjLT5yZWdzLCBQRENfUkNSLCAwKTsKLQkJc3NjX3dyaXRlbChzc2NfcC0+c3NjLT5yZWdzLCBQRENfUk5QUiwgMCk7Ci0JCXNzY193cml0ZWwoc3NjX3AtPnNzYy0+cmVncywgUERDX1JOQ1IsIDApOwotCi0JCXNzY193cml0ZWwoc3NjX3AtPnNzYy0+cmVncywgUERDX1RQUiwgMCk7Ci0JCXNzY193cml0ZWwoc3NjX3AtPnNzYy0+cmVncywgUERDX1RDUiwgMCk7Ci0JCXNzY193cml0ZWwoc3NjX3AtPnNzYy0+cmVncywgUERDX1ROUFIsIDApOwotCQlzc2Nfd3JpdGVsKHNzY19wLT5zc2MtPnJlZ3MsIFBEQ19UTkNSLCAwKTsKKwkJCXNzY193cml0ZWwoc3NjX3AtPnNzYy0+cmVncywgUERDX1RQUiwgMCk7CisJCQlzc2Nfd3JpdGVsKHNzY19wLT5zc2MtPnJlZ3MsIFBEQ19UQ1IsIDApOworCQkJc3NjX3dyaXRlbChzc2NfcC0+c3NjLT5yZWdzLCBQRENfVE5QUiwgMCk7CisJCQlzc2Nfd3JpdGVsKHNzY19wLT5zc2MtPnJlZ3MsIFBEQ19UTkNSLCAwKTsKKwkJfQogCiAJCXJldCA9IHJlcXVlc3RfaXJxKHNzY19wLT5zc2MtPmlycSwgYXRtZWxfc3NjX2ludGVycnVwdCwgMCwKIAkJCQlzc2NfcC0+bmFtZSwgc3NjX3ApOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F0bWVsL3NhbTlnMjBfd204NzMxLmMgYi9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYwppbmRleCA2NmI2NmQwLi5mNWFkMjE0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYworKysgYi9zb3VuZC9zb2MvYXRtZWwvc2FtOWcyMF93bTg3MzEuYwpAQCAtNDcsNyArNDcsNiBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKICNpbmNsdWRlICIuLi9jb2RlY3Mvd204NzMxLmgiCiAjaW5jbHVkZSAiYXRtZWwtcGNtLmgiCkBAIC02NCwzMyArNjMsNiBAQAogCiBzdGF0aWMgc3RydWN0IGNsayAqbWNsazsKIAotc3RhdGljIGludCBhdDkxc2FtOWcyMGVrX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKLXsKLQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmNwdV9kYWk7Ci0JaW50IHJldDsKLQotCS8qIHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAotCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKLQkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGF0OTFzYW05ZzIwZWtfb3BzID0gewotCS5od19wYXJhbXMgPSBhdDkxc2FtOWcyMGVrX2h3X3BhcmFtcywKLX07Ci0KIHN0YXRpYyBpbnQgYXQ5MXNhbTlnMjBla19zZXRfYmlhc19sZXZlbChzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkLAogCQkJCQlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCiAJCQkJCWVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQpAQCAtMTczLDcgKzE0NSw4IEBACiAJLmluaXQgPSBhdDkxc2FtOWcyMGVrX3dtODczMV9pbml0LAogCS5wbGF0Zm9ybV9uYW1lID0gImF0OTFybTkyMDBfc3NjLjAiLAogCS5jb2RlY19uYW1lID0gIndtODczMS4wLTAwMWIiLAotCS5vcHMgPSAmYXQ5MXNhbTlnMjBla19vcHMsCisJLmRhaV9mbXQgPSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCSAgIFNORF9TT0NfREFJRk1UX0NCTV9DRk0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBzbmRfc29jX2F0OTFzYW05ZzIwZWsgPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXUxeC9kYjEyMDAuYyBiL3NvdW5kL3NvYy9hdTF4L2RiMTIwMC5jCmluZGV4IGE3NDdhYzAuLmM3NTk5NWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9hdTF4L2RiMTIwMC5jCisrKyBiL3NvdW5kL3NvYy9hdTF4L2RiMTIwMC5jCkBAIC05MSwyNyArOTEsMTIgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKLQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmNwdV9kYWk7Ci0JaW50IHJldDsKIAogCS8qIFdNODczMSBoYXMgaXRzIG93biAxMk1IeiBjcnlzdGFsICovCiAJc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODczMV9TWVNDTEtfWFRBTCwKIAkJCQkxMjAwMDAwMCwgU05EX1NPQ19DTE9DS19JTik7CiAKLQkvKiBjb2RlYyBpcyBiaXRjbG9jayBhbmQgbHJjbGsgbWFzdGVyICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0xFRlRfSiB8Ci0JCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKLQotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfTEVGVF9KIHwKLQkJCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gMDsKLW91dDoKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGRiMTIwMF9pMnNfd204NzMxX29wcyA9IHsKQEAgLTEyNSw2ICsxMTAsOCBAQAogCS5jcHVfZGFpX25hbWUJPSAiYXUxeHBzY19pMnMuMSIsCiAJLnBsYXRmb3JtX25hbWUJPSAiYXUxeHBzYy1wY20uMSIsCiAJLmNvZGVjX25hbWUJPSAid204NzMxLjAtMDAxYiIsCisJLmRhaV9mbXQJPSBTTkRfU09DX0RBSUZNVF9MRUZUX0ogfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCQkgIFNORF9TT0NfREFJRk1UX0NCTV9DRk0sCiAJLm9wcwkJPSAmZGIxMjAwX2kyc193bTg3MzFfb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvZGJkbWEyLmMgYi9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYwppbmRleCBiMDZiOGQ4Li5kZDk0ZmVhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYworKysgYi9zb3VuZC9zb2MvYXUxeC9kYmRtYTIuYwpAQCAtMzE1LDExICszMTUsNiBAQAogCS5wb2ludGVyCT0gYXUxeHBzY19wY21fcG9pbnRlciwKIH07CiAKLXN0YXRpYyB2b2lkIGF1MXhwc2NfcGNtX2ZyZWVfZG1hX2J1ZmZlcnMoc3RydWN0IHNuZF9wY20gKnBjbSkKLXsKLQlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9mcmVlX2Zvcl9hbGwocGNtKTsKLX0KLQogc3RhdGljIGludCBhdTF4cHNjX3BjbV9uZXcoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBydGQtPmNhcmQtPnNuZF9jYXJkOwpAQCAtMzM1LDcgKzMzMCw2IEBACiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfcGxhdGZvcm1fZHJpdmVyIGF1MXhwc2Nfc29jX3BsYXRmb3JtID0gewogCS5vcHMJCT0gJmF1MXhwc2NfcGNtX29wcywKIAkucGNtX25ldwk9IGF1MXhwc2NfcGNtX25ldywKLQkucGNtX2ZyZWUJPSBhdTF4cHNjX3BjbV9mcmVlX2RtYV9idWZmZXJzLAogfTsKIAogc3RhdGljIGludCBhdTF4cHNjX3BjbV9kcnZwcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2F1MXgvZG1hLmMgYi9zb3VuZC9zb2MvYXUxeC9kbWEuYwppbmRleCA2ZmZhYWZmLi4yNGNjN2Y0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXUxeC9kbWEuYworKysgYi9zb3VuZC9zb2MvYXUxeC9kbWEuYwpAQCAtMjg3LDExICsyODcsNiBAQAogCS5wb2ludGVyCQk9IGFsY2hlbXlfcGNtX3BvaW50ZXIsCiB9OwogCi1zdGF0aWMgdm9pZCBhbGNoZW15X3BjbV9mcmVlX2RtYV9idWZmZXJzKHN0cnVjdCBzbmRfcGNtICpwY20pCi17Ci0Jc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfZnJlZV9mb3JfYWxsKHBjbSk7Ci19Ci0KIHN0YXRpYyBpbnQgYWxjaGVteV9wY21fbmV3KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9wY20gKnBjbSA9IHJ0ZC0+cGNtOwpAQCAtMzA1LDcgKzMwMCw2IEBACiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfcGxhdGZvcm1fZHJpdmVyIGFsY2hlbXlfcGNtX3NvY19wbGF0Zm9ybSA9IHsKIAkub3BzCQk9ICZhbGNoZW15X3BjbV9vcHMsCiAJLnBjbV9uZXcJPSBhbGNoZW15X3BjbV9uZXcsCi0JLnBjbV9mcmVlCT0gYWxjaGVteV9wY21fZnJlZV9kbWFfYnVmZmVycywKIH07CiAKIHN0YXRpYyBpbnQgYWxjaGVteV9wY21fZHJ2cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvODhwbTg2MHgtY29kZWMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvODhwbTg2MHgtY29kZWMuYwppbmRleCBhMmJmMjdmLi5hMGYyNjUzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzLzg4cG04NjB4LWNvZGVjLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy84OHBtODYweC1jb2RlYy5jCkBAIC0zODYsNyArMzg2LDcgQEAKIHN0YXRpYyBpbnQgcG04NjB4X3JzeW5jX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJICAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAKIAkvKgogCSAqIEluIG9yZGVyIHRvIGF2b2lkIGN1cnJlbnQgb24gdGhlIGxvYWQsIG11dGUgcG93ZXItb24gYW5kIHBvd2VyLW9mZgpAQCAtNDAzLDcgKzQwMyw3IEBACiBzdGF0aWMgaW50IHBtODYweF9kYWNfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJdW5zaWduZWQgaW50IGRhYyA9IDA7CiAJaW50IGRhdGE7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZyBiL3NvdW5kL3NvYy9jb2RlY3MvS2NvbmZpZwppbmRleCA4MzQ5Zjk4Li4wNjRlNmMxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL0tjb25maWcKKysrIGIvc291bmQvc29jL2NvZGVjcy9LY29uZmlnCkBAIC02OSw2ICs2OSw3IEBACiAJc2VsZWN0IFNORF9TT0NfTUFYOTgwODggaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfTUFYOTgwOTAgaWYgSTJDCiAJc2VsZWN0IFNORF9TT0NfTUFYOTgwOTUgaWYgSTJDCisJc2VsZWN0IFNORF9TT0NfTUFYOTgzNTdBCiAJc2VsZWN0IFNORF9TT0NfTUFYOTg1MCBpZiBJMkMKIAlzZWxlY3QgU05EX1NPQ19NQVg5NzY4IGlmIEkyQwogCXNlbGVjdCBTTkRfU09DX01BWDk4NzcgaWYgSTJDCkBAIC00NTYsNiArNDU3LDkgQEAKIGNvbmZpZyBTTkRfU09DX01BWDk4MDk1CiAgICAgICAgdHJpc3RhdGUKIAorY29uZmlnIFNORF9TT0NfTUFYOTgzNTdBCisgICAgICAgdHJpc3RhdGUKKwogY29uZmlnIFNORF9TT0NfTUFYOTg1MAogCXRyaXN0YXRlCiAKQEAgLTUyNSw3ICs1MjksNyBAQAogCiBjb25maWcgU05EX1NPQ19SVDU2NzdfU1BJCiAJdHJpc3RhdGUKLQlkZWZhdWx0IFNORF9TT0NfUlQ1Njc3CisJZGVmYXVsdCBTTkRfU09DX1JUNTY3NyAmJiBTUEkKIAogI0ZyZWVzY2FsZSBzZ3RsNTAwMCBjb2RlYwogY29uZmlnIFNORF9TT0NfU0dUTDUwMDAKQEAgLTU4MCw3ICs1ODQsOSBAQAogCWRlcGVuZHMgb24gSTJDCiAKIGNvbmZpZyBTTkRfU09DX1NUQTMyWAotCXRyaXN0YXRlCisJdHJpc3RhdGUgIlNUQTMyNiwgU1RBMzI4IGFuZCBTVEEzMjkgc3BlYWtlciBhbXBsaWZpZXIiCisJZGVwZW5kcyBvbiBJMkMKKwlzZWxlY3QgUkVHTUFQX0kyQwogCiBjb25maWcgU05EX1NPQ19TVEEzNTAKIAl0cmlzdGF0ZSAiU1RBMzUwIHNwZWFrZXIgYW1wbGlmaWVyIgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9jb2RlY3MvTWFrZWZpbGUKaW5kZXggYmJkZmQxZS4uNjliODY2NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9NYWtlZmlsZQorKysgYi9zb3VuZC9zb2MvY29kZWNzL01ha2VmaWxlCkBAIC02NCw2ICs2NCw3IEBACiBzbmQtc29jLW1heDk4MDg4LW9ianMgOj0gbWF4OTgwODgubwogc25kLXNvYy1tYXg5ODA5MC1vYmpzIDo9IG1heDk4MDkwLm8KIHNuZC1zb2MtbWF4OTgwOTUtb2JqcyA6PSBtYXg5ODA5NS5vCitzbmQtc29jLW1heDk4MzU3YS1vYmpzIDo9IG1heDk4MzU3YS5vCiBzbmQtc29jLW1heDk4NTAtb2JqcyA6PSBtYXg5ODUwLm8KIHNuZC1zb2MtbWMxMzc4My1vYmpzIDo9IG1jMTM3ODMubwogc25kLXNvYy1tbDI2MTI0LW9ianMgOj0gbWwyNjEyNC5vCkBAIC0yNDUsNiArMjQ2LDcgQEAKIG9iai0kKENPTkZJR19TTkRfU09DX01BWDk4MDg4KQkrPSBzbmQtc29jLW1heDk4MDg4Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX01BWDk4MDkwKQkrPSBzbmQtc29jLW1heDk4MDkwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX01BWDk4MDk1KQkrPSBzbmQtc29jLW1heDk4MDk1Lm8KK29iai0kKENPTkZJR19TTkRfU09DX01BWDk4MzU3QSkJKz0gc25kLXNvYy1tYXg5ODM1N2Eubwogb2JqLSQoQ09ORklHX1NORF9TT0NfTUFYOTg1MCkJKz0gc25kLXNvYy1tYXg5ODUwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX01DMTM3ODMpCSs9IHNuZC1zb2MtbWMxMzc4My5vCiBvYmotJChDT05GSUdfU05EX1NPQ19NTDI2MTI0KQkrPSBzbmQtc29jLW1sMjYxMjQubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9hZDE5M3guYyBiL3NvdW5kL3NvYy9jb2RlY3MvYWQxOTN4LmMKaW5kZXggMzg3NTMwYi4uMTdjOTUzNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hZDE5M3guYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2FkMTkzeC5jCkBAIC0zMzMsOCArMzMzLDggQEAKIAlyZWdtYXBfd3JpdGUoYWQxOTN4LT5yZWdtYXAsIEFEMTkzWF9EQUNfQ0hOTF9NVVRFLCAweDApOwogCS8qIGRlLWVtcGhhc2lzOiA0OGtIeiwgcG93ZWRvd24gZGFjICovCiAJcmVnbWFwX3dyaXRlKGFkMTkzeC0+cmVnbWFwLCBBRDE5M1hfREFDX0NUUkwyLCAweDFBKTsKLQkvKiBwb3dlcmRvd24gZGFjLCBkYWMgaW4gdGRtIG1vZGUgKi8KLQlyZWdtYXBfd3JpdGUoYWQxOTN4LT5yZWdtYXAsIEFEMTkzWF9EQUNfQ1RSTDAsIDB4NDEpOworCS8qIGRhYyBpbiB0ZG0gbW9kZSAqLworCXJlZ21hcF93cml0ZShhZDE5M3gtPnJlZ21hcCwgQUQxOTNYX0RBQ19DVFJMMCwgMHg0MCk7CiAJLyogaGlnaC1wYXNzIGZpbHRlciBlbmFibGUgKi8KIAlyZWdtYXBfd3JpdGUoYWQxOTN4LT5yZWdtYXAsIEFEMTkzWF9BRENfQ1RSTDAsIDB4Myk7CiAJLyogc2F0YSBkZWxheT0xLCBhZGMgYXV4IG1vZGUgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjcxLmMgYi9zb3VuZC9zb2MvY29kZWNzL2FrNDY3MS5jCmluZGV4IDY4NmNhY2IuLjYzMmU4OWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYWs0NjcxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hazQ2NzEuYwpAQCAtMTYzLDcgKzE2Myw3IEBACiBzdGF0aWMgaW50IGFrNDY3MV9vdXQyX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWxjNTYyMy5jIGIvc291bmQvc29jL2NvZGVjcy9hbGM1NjIzLmMKaW5kZXggYmRmOGM1YS4uMGUzNTc5OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hbGM1NjIzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hbGM1NjIzLmMKQEAgLTU1LDE4ICs1NSwyMCBAQAogc3RhdGljIGludCBhbXBfbWl4ZXJfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CisKIAkvKiB0byBwb3dlci1vbi9vZmYgY2xhc3MtZCBhbXAgZ2VuZXJhdG9ycy9zcGVha2VyICovCiAJLyogbmVlZCB0byB3cml0ZSB0byAnaW5kZXgtNDZoJyByZWdpc3RlciA6ICAgICAgICAqLwogCS8qIHNvIHdyaXRlIGluZGV4IG51bSAoaGVyZSAweDQ2KSB0byByZWcgMHg2YSAgICAgKi8KIAkvKiBhbmQgdGhlbiAweGZmZmYvMCB0byByZWcgMHg2YyAgICAgICAgICAgICAgICAgICovCi0Jc25kX3NvY193cml0ZSh3LT5jb2RlYywgQUxDNTYyM19ISURfQ1RSTF9JTkRFWCwgMHg0Nik7CisJc25kX3NvY193cml0ZShjb2RlYywgQUxDNTYyM19ISURfQ1RSTF9JTkRFWCwgMHg0Nik7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKLQkJc25kX3NvY193cml0ZSh3LT5jb2RlYywgQUxDNTYyM19ISURfQ1RSTF9EQVRBLCAweEZGRkYpOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBTEM1NjIzX0hJRF9DVFJMX0RBVEEsIDB4RkZGRik7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgotCQlzbmRfc29jX3dyaXRlKHctPmNvZGVjLCBBTEM1NjIzX0hJRF9DVFJMX0RBVEEsIDApOworCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBBTEM1NjIzX0hJRF9DVFJMX0RBVEEsIDApOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvYWxjNTYzMi5jIGIvc291bmQvc29jL2NvZGVjcy9hbGM1NjMyLmMKaW5kZXggZDFmZGJjMi4uZGIzMjgzYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9hbGM1NjMyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9hbGM1NjMyLmMKQEAgLTExNiwxOCArMTE2LDIwIEBACiBzdGF0aWMgaW50IGFtcF9taXhlcl9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKKwogCS8qIHRvIHBvd2VyLW9uL29mZiBjbGFzcy1kIGFtcCBnZW5lcmF0b3JzL3NwZWFrZXIgKi8KIAkvKiBuZWVkIHRvIHdyaXRlIHRvICdpbmRleC00NmgnIHJlZ2lzdGVyIDogICAgICAgICovCiAJLyogc28gd3JpdGUgaW5kZXggbnVtIChoZXJlIDB4NDYpIHRvIHJlZyAweDZhICAgICAqLwogCS8qIGFuZCB0aGVuIDB4ZmZmZi8wIHRvIHJlZyAweDZjICAgICAgICAgICAgICAgICAgKi8KLQlzbmRfc29jX3dyaXRlKHctPmNvZGVjLCBBTEM1NjMyX0hJRF9DVFJMX0lOREVYLCAweDQ2KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBTEM1NjMyX0hJRF9DVFJMX0lOREVYLCAweDQ2KTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgotCQlzbmRfc29jX3dyaXRlKHctPmNvZGVjLCBBTEM1NjMyX0hJRF9DVFJMX0RBVEEsIDB4RkZGRik7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFMQzU2MzJfSElEX0NUUkxfREFUQSwgMHhGRkZGKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6Ci0JCXNuZF9zb2Nfd3JpdGUody0+Y29kZWMsIEFMQzU2MzJfSElEX0NUUkxfREFUQSwgMCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFMQzU2MzJfSElEX0NUUkxfREFUQSwgMCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTA2Niw3ICsxMDY4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfY29kZWNfZGV2aWNlX2FsYzU2MzIgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZpY2VfYWxjNTYzMiA9IHsKIAkucHJvYmUgPSBhbGM1NjMyX3Byb2JlLAogCS5yZXN1bWUgPSBhbGM1NjMyX3Jlc3VtZSwKIAkuc2V0X2JpYXNfbGV2ZWwgPSBhbGM1NjMyX3NldF9iaWFzX2xldmVsLApAQCAtMTA4MCw3ICsxMDgyLDcgQEAKIAkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShhbGM1NjMyX2RhcG1fcm91dGVzKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBhbGM1NjMyX3JlZ21hcCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBhbGM1NjMyX3JlZ21hcCA9IHsKIAkucmVnX2JpdHMgPSA4LAogCS52YWxfYml0cyA9IDE2LAogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FyaXpvbmEuYyBiL3NvdW5kL3NvYy9jb2RlY3MvYXJpem9uYS5jCmluZGV4IDk1NTBkNzQuLjI5MjAyNjEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYXJpem9uYS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYXJpem9uYS5jCkBAIC04NCw3ICs4NCw3IEBACiAJCQkgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJICBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBhcml6b25hICphcml6b25hID0gZGV2X2dldF9kcnZkYXRhKGNvZGVjLT5kZXYtPnBhcmVudCk7CiAJc3RydWN0IGFyaXpvbmFfcHJpdiAqcHJpdiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCWJvb2wgbWFudWFsX2VuYSA9IGZhbHNlOwpAQCAtNjkyLDcgKzY5Miw4IEBACiBpbnQgYXJpem9uYV9pbl9ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCSAgaW50IGV2ZW50KQogewotCXN0cnVjdCBhcml6b25hX3ByaXYgKnByaXYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKHctPmNvZGVjKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CisJc3RydWN0IGFyaXpvbmFfcHJpdiAqcHJpdiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCXVuc2lnbmVkIGludCByZWc7CiAKIAlpZiAody0+c2hpZnQgJSAyKQpAQCAtNzA1LDI1ICs3MDYsMjUgQEAKIAkJcHJpdi0+aW5fcGVuZGluZysrOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKLQkJc25kX3NvY191cGRhdGVfYml0cyh3LT5jb2RlYywgcmVnLCBBUklaT05BX0lOMUxfTVVURSwgMCk7CisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywgQVJJWk9OQV9JTjFMX01VVEUsIDApOwogCiAJCS8qIElmIHRoaXMgaXMgdGhlIGxhc3QgaW5wdXQgcGVuZGluZyB0aGVuIGFsbG93IFZVICovCiAJCXByaXYtPmluX3BlbmRpbmctLTsKIAkJaWYgKHByaXYtPmluX3BlbmRpbmcgPT0gMCkgewogCQkJbXNsZWVwKDEpOwotCQkJYXJpem9uYV9pbl9zZXRfdnUody0+Y29kZWMsIDEpOworCQkJYXJpem9uYV9pbl9zZXRfdnUoY29kZWMsIDEpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6Ci0JCXNuZF9zb2NfdXBkYXRlX2JpdHMody0+Y29kZWMsIHJlZywKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLAogCQkJCSAgICBBUklaT05BX0lOMUxfTVVURSB8IEFSSVpPTkFfSU5fVlUsCiAJCQkJICAgIEFSSVpPTkFfSU4xTF9NVVRFIHwgQVJJWk9OQV9JTl9WVSk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgogCQkvKiBEaXNhYmxlIHZvbHVtZSB1cGRhdGVzIGlmIG5vIGlucHV0cyBhcmUgZW5hYmxlZCAqLwotCQlyZWcgPSBzbmRfc29jX3JlYWQody0+Y29kZWMsIEFSSVpPTkFfSU5QVVRfRU5BQkxFUyk7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgQVJJWk9OQV9JTlBVVF9FTkFCTEVTKTsKIAkJaWYgKHJlZyA9PSAwKQotCQkJYXJpem9uYV9pbl9zZXRfdnUody0+Y29kZWMsIDApOworCQkJYXJpem9uYV9pbl9zZXRfdnUoY29kZWMsIDApOwogCX0KIAogCXJldHVybiAwOwpAQCAtNzM0LDcgKzczNSwyNSBAQAogCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJICAgaW50IGV2ZW50KQogeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKKwlzdHJ1Y3QgYXJpem9uYV9wcml2ICpwcml2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKIAlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJc3dpdGNoICh3LT5zaGlmdCkgeworCQljYXNlIEFSSVpPTkFfT1VUMUxfRU5BX1NISUZUOgorCQljYXNlIEFSSVpPTkFfT1VUMVJfRU5BX1NISUZUOgorCQljYXNlIEFSSVpPTkFfT1VUMkxfRU5BX1NISUZUOgorCQljYXNlIEFSSVpPTkFfT1VUMlJfRU5BX1NISUZUOgorCQljYXNlIEFSSVpPTkFfT1VUM0xfRU5BX1NISUZUOgorCQljYXNlIEFSSVpPTkFfT1VUM1JfRU5BX1NISUZUOgorCQkJcHJpdi0+b3V0X3VwX3BlbmRpbmcrKzsKKwkJCXByaXYtPm91dF91cF9kZWxheSArPSAxNzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CiAJCXN3aXRjaCAody0+c2hpZnQpIHsKIAkJY2FzZSBBUklaT05BX09VVDFMX0VOQV9TSElGVDoKQEAgLTc0MywxMyArNzYyLDUwIEBACiAJCWNhc2UgQVJJWk9OQV9PVVQyUl9FTkFfU0hJRlQ6CiAJCWNhc2UgQVJJWk9OQV9PVVQzTF9FTkFfU0hJRlQ6CiAJCWNhc2UgQVJJWk9OQV9PVVQzUl9FTkFfU0hJRlQ6Ci0JCQltc2xlZXAoMTcpOworCQkJcHJpdi0+b3V0X3VwX3BlbmRpbmctLTsKKwkJCWlmICghcHJpdi0+b3V0X3VwX3BlbmRpbmcpIHsKKwkJCQltc2xlZXAocHJpdi0+b3V0X3VwX2RlbGF5KTsKKwkJCQlwcml2LT5vdXRfdXBfZGVsYXkgPSAwOworCQkJfQogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTUQ6CisJCXN3aXRjaCAody0+c2hpZnQpIHsKKwkJY2FzZSBBUklaT05BX09VVDFMX0VOQV9TSElGVDoKKwkJY2FzZSBBUklaT05BX09VVDFSX0VOQV9TSElGVDoKKwkJY2FzZSBBUklaT05BX09VVDJMX0VOQV9TSElGVDoKKwkJY2FzZSBBUklaT05BX09VVDJSX0VOQV9TSElGVDoKKwkJY2FzZSBBUklaT05BX09VVDNMX0VOQV9TSElGVDoKKwkJY2FzZSBBUklaT05BX09VVDNSX0VOQV9TSElGVDoKKwkJCXByaXYtPm91dF9kb3duX3BlbmRpbmcrKzsKKwkJCXByaXYtPm91dF9kb3duX2RlbGF5Kys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQlzd2l0Y2ggKHctPnNoaWZ0KSB7CisJCWNhc2UgQVJJWk9OQV9PVVQxTF9FTkFfU0hJRlQ6CisJCWNhc2UgQVJJWk9OQV9PVVQxUl9FTkFfU0hJRlQ6CisJCWNhc2UgQVJJWk9OQV9PVVQyTF9FTkFfU0hJRlQ6CisJCWNhc2UgQVJJWk9OQV9PVVQyUl9FTkFfU0hJRlQ6CisJCWNhc2UgQVJJWk9OQV9PVVQzTF9FTkFfU0hJRlQ6CisJCWNhc2UgQVJJWk9OQV9PVVQzUl9FTkFfU0hJRlQ6CisJCQlwcml2LT5vdXRfZG93bl9wZW5kaW5nLS07CisJCQlpZiAoIXByaXYtPm91dF9kb3duX3BlbmRpbmcpIHsKKwkJCQltc2xlZXAocHJpdi0+b3V0X2Rvd25fZGVsYXkpOworCQkJCXByaXYtPm91dF9kb3duX2RlbGF5ID0gMDsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC03NjAsNyArODE2LDggQEAKIAkJICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCSAgIGludCBldmVudCkKIHsKLQlzdHJ1Y3QgYXJpem9uYV9wcml2ICpwcml2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YSh3LT5jb2RlYyk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCXN0cnVjdCBhcml6b25hX3ByaXYgKnByaXYgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlzdHJ1Y3QgYXJpem9uYSAqYXJpem9uYSA9IHByaXYtPmFyaXpvbmE7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAxIDw8IHctPnNoaWZ0OwogCXVuc2lnbmVkIGludCB2YWw7CkBAIC03NzIsNiArODI5LDkgQEAKIAljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgogCQl2YWwgPSAwOwogCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQlyZXR1cm4gYXJpem9uYV9vdXRfZXYodywga2NvbnRyb2wsIGV2ZW50KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FyaXpvbmEuaCBiL3NvdW5kL3NvYy9jb2RlY3MvYXJpem9uYS5oCmluZGV4IDk0MmNmYjEuLjExZmY4OTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvYXJpem9uYS5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYXJpem9uYS5oCkBAIC03Nyw2ICs3NywxMSBAQAogCWludCBudW1faW5wdXRzOwogCXVuc2lnbmVkIGludCBpbl9wZW5kaW5nOwogCisJdW5zaWduZWQgaW50IG91dF91cF9wZW5kaW5nOworCXVuc2lnbmVkIGludCBvdXRfdXBfZGVsYXk7CisJdW5zaWduZWQgaW50IG91dF9kb3duX3BlbmRpbmc7CisJdW5zaWduZWQgaW50IG91dF9kb3duX2RlbGF5OworCiAJdW5zaWduZWQgaW50IHNwa19lbmE6MjsKIAl1bnNpZ25lZCBpbnQgc3BrX2VuYV9wZW5kaW5nOjE7CiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9idC1zY28uYyBiL3NvdW5kL3NvYy9jb2RlY3MvYnQtc2NvLmMKaW5kZXggNTA3NWJmMC4uZTcyMzhiOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9idC1zY28uYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2J0LXNjby5jCkBAIC04Niw1ICs4Niw1IEBACiBtb2R1bGVfcGxhdGZvcm1fZHJpdmVyKGJ0X3Njb19kcml2ZXIpOwogCiBNT0RVTEVfQVVUSE9SKCJMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQVNvQyBnZW5lcmljIGJsdWV0aG9vdGggc2NvIGxpbmsgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFTb0MgZ2VuZXJpYyBibHVldG9vdGggc2NvIGxpbmsgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2NzMzVsMzIuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3MzNWwzMi5jCmluZGV4IGVjNTVjNTkwLi5mMmI4YWFkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2NzMzVsMzIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2NzMzVsMzIuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJCQlDUzM1TDMyX01DTEtfRElWMl9NQVNLIHwgQ1MzNUwzMl9NQ0xLX1JBVElPX01BU0ssIHZhbCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgc29jX2NvZGVjX2Rldl9jczM1bDMyID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfY29kZWNfZGV2X2NzMzVsMzIgPSB7CiAJLnNldF9zeXNjbGsgPSBjczM1bDMyX2NvZGVjX3NldF9zeXNjbGssCiAKIAkuZGFwbV93aWRnZXRzID0gY3MzNWwzMl9kYXBtX3dpZGdldHMsCkBAIC0yODgsNyArMjg4LDcgQEAKIAl7IDB4MDAsIDB4MDAgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBjczM1bDMyX3JlZ21hcCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBjczM1bDMyX3JlZ21hcCA9IHsKIAkucmVnX2JpdHMgPSA4LAogCS52YWxfYml0cyA9IDgsCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0Mmw1Mi5jIGIvc291bmQvc29jL2NvZGVjcy9jczQybDUyLmMKaW5kZXggMzVmYmVmNy4uMTU4OWU3YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9jczQybDUyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9jczQybDUyLmMKQEAgLTExMDMsNyArMTEwMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgc29jX2NvZGVjX2Rldl9jczQybDUyID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfY29kZWNfZGV2X2NzNDJsNTIgPSB7CiAJLnByb2JlID0gY3M0Mmw1Ml9wcm9iZSwKIAkucmVtb3ZlID0gY3M0Mmw1Ml9yZW1vdmUsCiAJLnNldF9iaWFzX2xldmVsID0gY3M0Mmw1Ml9zZXRfYmlhc19sZXZlbCwKQEAgLTExMzAsNyArMTEzMCw3IEBACiAKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBjczQybDUyX3JlZ21hcCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBjczQybDUyX3JlZ21hcCA9IHsKIAkucmVnX2JpdHMgPSA4LAogCS52YWxfYml0cyA9IDgsCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvY3M0Mmw1Ni5jIGIvc291bmQvc29jL2NvZGVjcy9jczQybDU2LmMKaW5kZXggMmRkYzdhYy4uY2JjNjU0ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9jczQybDU2LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9jczQybDU2LmMKQEAgLTExNjQsNyArMTE2NCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgc29jX2NvZGVjX2Rldl9jczQybDU2ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfY29kZWNfZGV2X2NzNDJsNTYgPSB7CiAJLnByb2JlID0gY3M0Mmw1Nl9wcm9iZSwKIAkucmVtb3ZlID0gY3M0Mmw1Nl9yZW1vdmUsCiAJLnNldF9iaWFzX2xldmVsID0gY3M0Mmw1Nl9zZXRfYmlhc19sZXZlbCwKQEAgLTExNzksNyArMTE3OSw3IEBACiAJLm51bV9jb250cm9scyA9IEFSUkFZX1NJWkUoY3M0Mmw1Nl9zbmRfY29udHJvbHMpLAogfTsKIAotc3RhdGljIHN0cnVjdCByZWdtYXBfY29uZmlnIGNzNDJsNTZfcmVnbWFwID0geworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGNzNDJsNTZfcmVnbWFwID0gewogCS5yZWdfYml0cyA9IDgsCiAJLnZhbF9iaXRzID0gOCwKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jczQybDczLmMgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDJsNzMuYwppbmRleCA3YzU1NTM3Li44ZWNlZGJhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2NzNDJsNzMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2NzNDJsNzMuYwpAQCAtMTM0Nyw3ICsxMzQ3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfY29kZWNfZGV2X2NzNDJsNzMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZfY3M0Mmw3MyA9IHsKIAkucHJvYmUgPSBjczQybDczX3Byb2JlLAogCS5zZXRfYmlhc19sZXZlbCA9IGNzNDJsNzNfc2V0X2JpYXNfbGV2ZWwsCiAJLnN1c3BlbmRfYmlhc19vZmYgPSB0cnVlLApAQCAtMTM2MSw3ICsxMzYxLDcgQEAKIAkubnVtX2NvbnRyb2xzID0gQVJSQVlfU0laRShjczQybDczX3NuZF9jb250cm9scyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgY3M0Mmw3M19yZWdtYXAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgY3M0Mmw3M19yZWdtYXAgPSB7CiAJLnJlZ19iaXRzID0gOCwKIAkudmFsX2JpdHMgPSA4LAogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2RhNzMyeC5jIGIvc291bmQvc29jL2NvZGVjcy9kYTczMnguYwppbmRleCA2MWIyZjlhLi5mZmU5NjE3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2RhNzMyeC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvZGE3MzJ4LmMKQEAgLTYwOSw3ICs2MDksNyBAQAogc3RhdGljIGludCBkYTczMnhfYWRjX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgpAQCAtNjYzLDcgKzY2Myw3IEBACiBzdGF0aWMgaW50IGRhNzMyeF9vdXRfcGdhX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9tYXg5ODM1N2EuYyBiL3NvdW5kL3NvYy9jb2RlY3MvbWF4OTgzNTdhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgwNjMzMwotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvbWF4OTgzNTdhLmMKQEAgLTAsMCArMSwxMzggQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMC0yMDExLDIwMTMtMjAxNSBUaGUgTGludXggRm91bmRhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYW5kCisgKiBvbmx5IHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIG1heDk4MzU3YS5jIC0tIE1BWDk4MzU3QSBBTFNBIFNvQyBDb2RlYyBkcml2ZXIKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgorCisjZGVmaW5lIERSVl9OQU1FICJtYXg5ODM1N2EiCisKK3N0YXRpYyBpbnQgbWF4OTgzNTdhX2RhaW9wc190cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQlpbnQgY21kLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpzZG1vZGUgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKKwkJZ3Bpb2Rfc2V0X3ZhbHVlKHNkbW9kZSwgMSk7CisJCWJyZWFrOworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NVU1BFTkQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9QVVNIOgorCQlncGlvZF9zZXRfdmFsdWUoc2Rtb2RlLCAwKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBtYXg5ODM1N2FfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0RBQygiU0RNb2RlIiwgTlVMTCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJTcGVha2VyIiksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBtYXg5ODM1N2FfZGFwbV9yb3V0ZXNbXSA9IHsKKwl7IlNwZWFrZXIiLCBOVUxMLCAiU0RNb2RlIn0sCit9OworCitzdGF0aWMgaW50IG1heDk4MzU3YV9jb2RlY19wcm9iZShzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGdwaW9fZGVzYyAqc2Rtb2RlOworCisJc2Rtb2RlID0gZGV2bV9ncGlvZF9nZXQoY29kZWMtPmRldiwgInNkbW9kZSIpOworCWlmIChJU19FUlIoc2Rtb2RlKSkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICIlcygpIHVuYWJsZSB0byBnZXQgc2Rtb2RlIEdQSU86ICVsZFxuIiwKKwkJCQlfX2Z1bmNfXywgUFRSX0VSUihzZG1vZGUpKTsKKwkJcmV0dXJuIFBUUl9FUlIoc2Rtb2RlKTsKKwl9CisJZ3Bpb2RfZGlyZWN0aW9uX291dHB1dChzZG1vZGUsIDApOworCXNuZF9zb2NfY29kZWNfc2V0X2RydmRhdGEoY29kZWMsIHNkbW9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBtYXg5ODM1N2FfY29kZWNfZHJpdmVyID0geworCS5wcm9iZQkJCT0gbWF4OTgzNTdhX2NvZGVjX3Byb2JlLAorCS5kYXBtX3dpZGdldHMJCT0gbWF4OTgzNTdhX2RhcG1fd2lkZ2V0cywKKwkubnVtX2RhcG1fd2lkZ2V0cwk9IEFSUkFZX1NJWkUobWF4OTgzNTdhX2RhcG1fd2lkZ2V0cyksCisJLmRhcG1fcm91dGVzCQk9IG1heDk4MzU3YV9kYXBtX3JvdXRlcywKKwkubnVtX2RhcG1fcm91dGVzCT0gQVJSQVlfU0laRShtYXg5ODM1N2FfZGFwbV9yb3V0ZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgbWF4OTgzNTdhX2RhaV9vcHMgPSB7CisJLnRyaWdnZXIJPSBtYXg5ODM1N2FfZGFpb3BzX3RyaWdnZXIsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciBtYXg5ODM1N2FfZGFpX2RyaXZlciA9IHsKKwkubmFtZSA9IERSVl9OQU1FLAorCS5wbGF5YmFjayA9IHsKKwkJLnN0cmVhbV9uYW1lCT0gRFJWX05BTUUgIi1wbGF5YmFjayIsCisJCS5mb3JtYXRzCT0gU05EUlZfUENNX0ZNVEJJVF9TMTYgfAorCQkJCQlTTkRSVl9QQ01fRk1UQklUX1MyNCB8CisJCQkJCVNORFJWX1BDTV9GTVRCSVRfUzMyLAorCQkucmF0ZXMJCT0gU05EUlZfUENNX1JBVEVfODAwMCB8CisJCQkJCVNORFJWX1BDTV9SQVRFXzE2MDAwIHwKKwkJCQkJU05EUlZfUENNX1JBVEVfNDgwMDAgfAorCQkJCQlTTkRSVl9QQ01fUkFURV85NjAwMCwKKwkJLnJhdGVfbWluCT0gODAwMCwKKwkJLnJhdGVfbWF4CT0gOTYwMDAsCisJCS5jaGFubmVsc19taW4JPSAxLAorCQkuY2hhbm5lbHNfbWF4CT0gMiwKKwl9LAorCS5vcHMgICAgPSAmbWF4OTgzNTdhX2RhaV9vcHMsCit9OworCitzdGF0aWMgaW50IG1heDk4MzU3YV9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZwZGV2LT5kZXYsICZtYXg5ODM1N2FfY29kZWNfZHJpdmVyLAorCQkJJm1heDk4MzU3YV9kYWlfZHJpdmVyLCAxKTsKKwlpZiAocmV0KQorCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlcygpIGVycm9yIHJlZ2lzdGVyaW5nIGNvZGVjIGRyaXZlcjogJWRcbiIsCisJCQkJX19mdW5jX18sIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1heDk4MzU3YV9wbGF0Zm9ybV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzbmRfc29jX3VucmVnaXN0ZXJfY29kZWMoJnBkZXYtPmRldik7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19PRgorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWF4OTgzNTdhX2RldmljZV9pZFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibWF4aW0sIiBEUlZfTkFNRSwgfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1heDk4MzU3YV9kZXZpY2VfaWQpOworI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1heDk4MzU3YV9wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSBEUlZfTkFNRSwKKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKG1heDk4MzU3YV9kZXZpY2VfaWQpLAorCX0sCisJLnByb2JlCT0gbWF4OTgzNTdhX3BsYXRmb3JtX3Byb2JlLAorCS5yZW1vdmUgPSBtYXg5ODM1N2FfcGxhdGZvcm1fcmVtb3ZlLAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobWF4OTgzNTdhX3BsYXRmb3JtX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiTWF4aW0gTUFYOTgzNTdBIENvZGVjIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSVl9OQU1FKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvbWMxMzc4My5jIGIvc291bmQvc29jL2NvZGVjcy9tYzEzNzgzLmMKaW5kZXggYzFlNDQxYy4uMmZmYjlhMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9tYzEzNzgzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9tYzEzNzgzLmMKQEAgLTMyOCwxNiArMzI4LDE2IEBACiAJfQogCiAJc3dpdGNoIChyeF9tYXNrKSB7Ci0JY2FzZSAweGZmZmZmZmZjOgorCWNhc2UgMHgwMzoKIAkJdmFsIHw9IFNTSV9ORVRXT1JLX0RBQ19SWFNMT1RfMF8xOwogCQlicmVhazsKLQljYXNlIDB4ZmZmZmZmZjM6CisJY2FzZSAweDBjOgogCQl2YWwgfD0gU1NJX05FVFdPUktfREFDX1JYU0xPVF8yXzM7CiAJCWJyZWFrOwotCWNhc2UgMHhmZmZmZmZjZjoKKwljYXNlIDB4MzA6CiAJCXZhbCB8PSBTU0lfTkVUV09SS19EQUNfUlhTTE9UXzRfNTsKIAkJYnJlYWs7Ci0JY2FzZSAweGZmZmZmZjNmOgorCWNhc2UgMHhjMDoKIAkJdmFsIHw9IFNTSV9ORVRXT1JLX0RBQ19SWFNMT1RfNl83OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzYwLDcgKzM2MCw3IEBACiAJaWYgKHNsb3RzICE9IDQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHR4X21hc2sgIT0gMHhmZmZmZmZmYykKKwlpZiAodHhfbWFzayAhPSAweDMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJdmFsIHw9ICgweDAwIDw8IDIpOwkvKiBwcmltYXJ5IHRpbWVzbG90IFJYL1RYKD8pIGlzIDAgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcGNtMzAwOC5jIGIvc291bmQvc29jL2NvZGVjcy9wY20zMDA4LmMKaW5kZXggN2U3M2ZhNC4uOGZiNDQ1ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9wY20zMDA4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9wY20zMDA4LmMKQEAgLTMyLDcgKzMyLDcgQEAKIAkJCSAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkgIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJc3RydWN0IHBjbTMwMDhfc2V0dXBfZGF0YSAqc2V0dXAgPSBjb2RlYy0+ZGV2LT5wbGF0Zm9ybV9kYXRhOwogCiAJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoc2V0dXAtPnBkZGFfcGluLApAQCAtNDUsNyArNDUsNyBAQAogCQkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSAgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlzdHJ1Y3QgcGNtMzAwOF9zZXR1cF9kYXRhICpzZXR1cCA9IGNvZGVjLT5kZXYtPnBsYXRmb3JtX2RhdGE7CiAKIAlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChzZXR1cC0+cGRhZF9waW4sCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3BjbTUxMngtaTJjLmMgYi9zb3VuZC9zb2MvY29kZWNzL3BjbTUxMngtaTJjLmMKaW5kZXggZDA1NDdmYS4uZGNkZmFjMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9wY201MTJ4LWkyYy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcGNtNTEyeC1pMmMuYwpAQCAtNDYsNiArNDYsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHBjbTUxMnhfaTJjX2lkW10gPSB7CiAJeyAicGNtNTEyMSIsIH0sCiAJeyAicGNtNTEyMiIsIH0sCisJeyAicGNtNTE0MSIsIH0sCisJeyAicGNtNTE0MiIsIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHBjbTUxMnhfaTJjX2lkKTsKQEAgLTUzLDYgKzU1LDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBjbTUxMnhfb2ZfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInRpLHBjbTUxMjEiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAidGkscGNtNTEyMiIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJ0aSxwY201MTQxIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInRpLHBjbTUxNDIiLCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHBjbTUxMnhfb2ZfbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9wY201MTJ4LXNwaS5jIGIvc291bmQvc29jL2NvZGVjcy9wY201MTJ4LXNwaS5jCmluZGV4IGYyOTcwNTguLjdiNjRhOWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvcGNtNTEyeC1zcGkuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3BjbTUxMngtc3BpLmMKQEAgLTQzLDYgKzQzLDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBwY201MTJ4X3NwaV9pZFtdID0gewogCXsgInBjbTUxMjEiLCB9LAogCXsgInBjbTUxMjIiLCB9LAorCXsgInBjbTUxNDEiLCB9LAorCXsgInBjbTUxNDIiLCB9LAogCXsgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgcGNtNTEyeF9zcGlfaWQpOwpAQCAtNTAsNiArNTIsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcGNtNTEyeF9vZl9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAidGkscGNtNTEyMSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJ0aSxwY201MTIyIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInRpLHBjbTUxNDEiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAidGkscGNtNTE0MiIsIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgcGNtNTEyeF9vZl9tYXRjaCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3BjbTUxMnguYyBiL3NvdW5kL3NvYy9jb2RlY3MvcGNtNTEyeC5jCmluZGV4IGU1ZjJmYjguLjk5NzRmMjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvcGNtNTEyeC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcGNtNTEyeC5jCkBAIC0yMSwxMiArMjEsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvZ2NkLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLmg+CiAjaW5jbHVkZSA8c291bmQvc29jLWRhcG0uaD4KKyNpbmNsdWRlIDxzb3VuZC9wY21fcGFyYW1zLmg+CiAjaW5jbHVkZSA8c291bmQvdGx2Lmg+CiAKICNpbmNsdWRlICJwY201MTJ4LmgiCiAKKyNkZWZpbmUgRElWX1JPVU5EX0RPV05fVUxMKGxsLCBkKSBcCisJKHsgdW5zaWduZWQgbG9uZyBsb25nIF90bXAgPSAobGwpOyBkb19kaXYoX3RtcCwgZCk7IF90bXA7IH0pCisjZGVmaW5lIERJVl9ST1VORF9DTE9TRVNUX1VMTChsbCwgZCkgXAorCSh7IHVuc2lnbmVkIGxvbmcgbG9uZyBfdG1wID0gKGxsKSsoZCkvMjsgZG9fZGl2KF90bXAsIGQpOyBfdG1wOyB9KQorCiAjZGVmaW5lIFBDTTUxMnhfTlVNX1NVUFBMSUVTIDMKIHN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcGNtNTEyeF9zdXBwbHlfbmFtZXNbUENNNTEyeF9OVU1fU1VQUExJRVNdID0gewogCSJBVkREIiwKQEAgLTM5LDYgKzQ2LDE0IEBACiAJc3RydWN0IGNsayAqc2NsazsKIAlzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YSBzdXBwbGllc1tQQ001MTJ4X05VTV9TVVBQTElFU107CiAJc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHN1cHBseV9uYltQQ001MTJ4X05VTV9TVVBQTElFU107CisJaW50IGZtdDsKKwlpbnQgcGxsX2luOworCWludCBwbGxfb3V0OworCWludCBwbGxfcjsKKwlpbnQgcGxsX2o7CisJaW50IHBsbF9kOworCWludCBwbGxfcDsKKwl1bnNpZ25lZCBsb25nIHJlYWxfcGxsOwogfTsKIAogLyoKQEAgLTY5LDYgKzg0LDcgQEAKIAl7IFBDTTUxMnhfTVVURSwgICAgICAgICAgICAgIDB4MDAgfSwKIAl7IFBDTTUxMnhfRFNQLCAgICAgICAgICAgICAgIDB4MDAgfSwKIAl7IFBDTTUxMnhfUExMX1JFRiwgICAgICAgICAgIDB4MDAgfSwKKwl7IFBDTTUxMnhfREFDX1JFRiwgICAgICAgICAgIDB4MDAgfSwKIAl7IFBDTTUxMnhfREFDX1JPVVRJTkcsICAgICAgIDB4MTEgfSwKIAl7IFBDTTUxMnhfRFNQX1BST0dSQU0sICAgICAgIDB4MDEgfSwKIAl7IFBDTTUxMnhfQ0xLREVULCAgICAgICAgICAgIDB4MDAgfSwKQEAgLTg3LDYgKzEwMywyNSBAQAogCXsgUENNNTEyeF9BTkFMT0dfR0FJTl9CT09TVCwgMHgwMCB9LAogCXsgUENNNTEyeF9WQ09NX0NUUkxfMSwgICAgICAgMHgwMCB9LAogCXsgUENNNTEyeF9WQ09NX0NUUkxfMiwgICAgICAgMHgwMSB9LAorCXsgUENNNTEyeF9CQ0xLX0xSQ0xLX0NGRywgICAgMHgwMCB9LAorCXsgUENNNTEyeF9NQVNURVJfTU9ERSwgICAgICAgMHg3YyB9LAorCXsgUENNNTEyeF9HUElPX0RBQ0lOLCAgICAgICAgMHgwMCB9LAorCXsgUENNNTEyeF9HUElPX1BMTElOLCAgICAgICAgMHgwMCB9LAorCXsgUENNNTEyeF9TWU5DSFJPTklaRSwgICAgICAgMHgxMCB9LAorCXsgUENNNTEyeF9QTExfQ09FRkZfMCwgICAgICAgMHgwMCB9LAorCXsgUENNNTEyeF9QTExfQ09FRkZfMSwgICAgICAgMHgwMCB9LAorCXsgUENNNTEyeF9QTExfQ09FRkZfMiwgICAgICAgMHgwMCB9LAorCXsgUENNNTEyeF9QTExfQ09FRkZfMywgICAgICAgMHgwMCB9LAorCXsgUENNNTEyeF9QTExfQ09FRkZfNCwgICAgICAgMHgwMCB9LAorCXsgUENNNTEyeF9EU1BfQ0xLRElWLCAgICAgICAgMHgwMCB9LAorCXsgUENNNTEyeF9EQUNfQ0xLRElWLCAgICAgICAgMHgwMCB9LAorCXsgUENNNTEyeF9OQ1BfQ0xLRElWLCAgICAgICAgMHgwMCB9LAorCXsgUENNNTEyeF9PU1JfQ0xLRElWLCAgICAgICAgMHgwMCB9LAorCXsgUENNNTEyeF9NQVNURVJfQ0xLRElWXzEsICAgMHgwMCB9LAorCXsgUENNNTEyeF9NQVNURVJfQ0xLRElWXzIsICAgMHgwMCB9LAorCXsgUENNNTEyeF9GU19TUEVFRF9NT0RFLCAgICAgMHgwMCB9LAorCXsgUENNNTEyeF9JREFDXzEsICAgICAgICAgICAgMHgwMSB9LAorCXsgUENNNTEyeF9JREFDXzIsICAgICAgICAgICAgMHgwMCB9LAogfTsKIAogc3RhdGljIGJvb2wgcGNtNTEyeF9yZWFkYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCkBAIC0xMDMsNiArMTM4LDEwIEBACiAJY2FzZSBQQ001MTJ4X0RTUF9HUElPX0lOUFVUOgogCWNhc2UgUENNNTEyeF9NQVNURVJfTU9ERToKIAljYXNlIFBDTTUxMnhfUExMX1JFRjoKKwljYXNlIFBDTTUxMnhfREFDX1JFRjoKKwljYXNlIFBDTTUxMnhfR1BJT19EQUNJTjoKKwljYXNlIFBDTTUxMnhfR1BJT19QTExJTjoKKwljYXNlIFBDTTUxMnhfU1lOQ0hST05JWkU6CiAJY2FzZSBQQ001MTJ4X1BMTF9DT0VGRl8wOgogCWNhc2UgUENNNTEyeF9QTExfQ09FRkZfMToKIAljYXNlIFBDTTUxMnhfUExMX0NPRUZGXzI6CkBAIC0xNDMsNiArMTgyLDcgQEAKIAljYXNlIFBDTTUxMnhfUkFURV9ERVRfMjoKIAljYXNlIFBDTTUxMnhfUkFURV9ERVRfMzoKIAljYXNlIFBDTTUxMnhfUkFURV9ERVRfNDoKKwljYXNlIFBDTTUxMnhfQ0xPQ0tfU1RBVFVTOgogCWNhc2UgUENNNTEyeF9BTkFMT0dfTVVURV9ERVQ6CiAJY2FzZSBQQ001MTJ4X0dQSU46CiAJY2FzZSBQQ001MTJ4X0RJR0lUQUxfTVVURV9ERVQ6CkBAIC0xNTQsNiArMTk0LDggQEAKIAljYXNlIFBDTTUxMnhfVkNPTV9DVFJMXzE6CiAJY2FzZSBQQ001MTJ4X1ZDT01fQ1RSTF8yOgogCWNhc2UgUENNNTEyeF9DUkFNX0NUUkw6CisJY2FzZSBQQ001MTJ4X0ZMRVhfQToKKwljYXNlIFBDTTUxMnhfRkxFWF9COgogCQlyZXR1cm4gdHJ1ZTsKIAlkZWZhdWx0OgogCQkvKiBUaGVyZSBhcmUgMjU2IHJhdyByZWdpc3RlciBhZGRyZXNzZXMgKi8KQEAgLTE3MCw2ICsyMTIsNyBAQAogCWNhc2UgUENNNTEyeF9SQVRFX0RFVF8yOgogCWNhc2UgUENNNTEyeF9SQVRFX0RFVF8zOgogCWNhc2UgUENNNTEyeF9SQVRFX0RFVF80OgorCWNhc2UgUENNNTEyeF9DTE9DS19TVEFUVVM6CiAJY2FzZSBQQ001MTJ4X0FOQUxPR19NVVRFX0RFVDoKIAljYXNlIFBDTTUxMnhfR1BJTjoKIAljYXNlIFBDTTUxMnhfRElHSVRBTF9NVVRFX0RFVDoKQEAgLTE4OCw4ICsyMzEsOCBAQAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBwY201MTJ4X2RzcF9wcm9ncmFtX3RleHRzW10gPSB7CiAJIkZJUiBpbnRlcnBvbGF0aW9uIHdpdGggZGUtZW1waGFzaXMiLAogCSJMb3cgbGF0ZW5jeSBJSVIgd2l0aCBkZS1lbXBoYXNpcyIsCi0JIkZpeGVkIHByb2Nlc3MgZmxvdyIsCiAJIkhpZ2ggYXR0ZW51YXRpb24gd2l0aCBkZS1lbXBoYXNpcyIsCisJIkZpeGVkIHByb2Nlc3MgZmxvdyIsCiAJIlJpbmdpbmctbGVzcyBsb3cgbGF0ZW5jeSBGSVIiLAogfTsKIApAQCAtMjc3LDcgKzMyMCw3IEBACiBTT0NfU0lOR0xFKCJBdXRvIE11dGUgTW9ubyBTd2l0Y2giLCBQQ001MTJ4X0RJR0lUQUxfTVVURV8zLAogCSAgIFBDTTUxMnhfQUNUTF9TSElGVCwgMSwgMCksCiBTT0NfRE9VQkxFKCJBdXRvIE11dGUgU3dpdGNoIiwgUENNNTEyeF9ESUdJVEFMX01VVEVfMywgUENNNTEyeF9BTUxFX1NISUZULAotCSAgIFBDTTUxMnhfQU1MUl9TSElGVCwgMSwgMCksCisJICAgUENNNTEyeF9BTVJFX1NISUZULCAxLCAwKSwKIAogU09DX0VOVU0oIlZvbHVtZSBSYW1wIERvd24gUmF0ZSIsIHBjbTUxMnhfdm5kZiksCiBTT0NfRU5VTSgiVm9sdW1lIFJhbXAgRG93biBTdGVwIiwgcGNtNTEyeF92bmRzKSwKQEAgLTMwMyw2ICszNDYsMTM2IEBACiAJeyAiT1VUUiIsIE5VTEwsICJEQUNSIiB9LAogfTsKIAorc3RhdGljIGNvbnN0IHUzMiBwY201MTJ4X2RhaV9yYXRlc1tdID0geworCTgwMDAsIDExMDI1LCAxNjAwMCwgMjIwNTAsIDMyMDAwLCA0NDEwMCwgNDgwMDAsIDY0MDAwLAorCTg4MjAwLCA5NjAwMCwgMTc2NDAwLCAxOTIwMDAsIDM4NDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgY29uc3RyYWludHNfc2xhdmUgPSB7CisJLmNvdW50ID0gQVJSQVlfU0laRShwY201MTJ4X2RhaV9yYXRlcyksCisJLmxpc3QgID0gcGNtNTEyeF9kYWlfcmF0ZXMsCit9OworCitzdGF0aWMgaW50IHBjbTUxMnhfaHdfcnVsZV9yYXRlKHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3J1bGUgKnJ1bGUpCit7CisJc3RydWN0IHNuZF9pbnRlcnZhbCByYW5nZXNbMl07CisJaW50IGZyYW1lX3NpemU7CisKKwlmcmFtZV9zaXplID0gc25kX3NvY19wYXJhbXNfdG9fZnJhbWVfc2l6ZShwYXJhbXMpOworCWlmIChmcmFtZV9zaXplIDwgMCkKKwkJcmV0dXJuIGZyYW1lX3NpemU7CisKKwlzd2l0Y2ggKGZyYW1lX3NpemUpIHsKKwljYXNlIDMyOgorCQkvKiBObyBob2xlIHdoZW4gdGhlIGZyYW1lIHNpemUgaXMgMzIuICovCisJCXJldHVybiAwOworCWNhc2UgNDg6CisJY2FzZSA2NDoKKwkJLyogVGhlcmUgaXMgb25seSBvbmUgaG9sZSBpbiB0aGUgcmFuZ2Ugb2Ygc3VwcG9ydGVkCisJCSAqIHJhdGVzLCBidXQgaXQgbW92ZXMgd2l0aCB0aGUgZnJhbWUgc2l6ZS4KKwkJICovCisJCW1lbXNldChyYW5nZXMsIDAsIHNpemVvZihyYW5nZXMpKTsKKwkJcmFuZ2VzWzBdLm1pbiA9IDgwMDA7CisJCXJhbmdlc1swXS5tYXggPSAyNTAwMDAwMCAvIGZyYW1lX3NpemUgLyAyOworCQlyYW5nZXNbMV0ubWluID0gRElWX1JPVU5EX1VQKDE2MDAwMDAwLCBmcmFtZV9zaXplKTsKKwkJcmFuZ2VzWzFdLm1heCA9IDM4NDAwMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHNuZF9pbnRlcnZhbF9yYW5nZXMoaHdfcGFyYW1faW50ZXJ2YWwocGFyYW1zLCBydWxlLT52YXIpLAorCQkJCSAgIEFSUkFZX1NJWkUocmFuZ2VzKSwgcmFuZ2VzLCAwKTsKK30KKworc3RhdGljIGludCBwY201MTJ4X2RhaV9zdGFydHVwX21hc3RlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCBwY201MTJ4X3ByaXYgKnBjbTUxMnggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYWktPmRldjsKKwlzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X3JhdG51bXMgKmNvbnN0cmFpbnRzX25vX3BsbDsKKwlzdHJ1Y3Qgc25kX3JhdG51bSAqcmF0c19ub19wbGw7CisKKwlpZiAoSVNfRVJSKHBjbTUxMngtPnNjbGspKSB7CisJCWRldl9lcnIoZGV2LCAiTmVlZCBTQ0xLIGZvciBtYXN0ZXIgbW9kZTogJWxkXG4iLAorCQkJUFRSX0VSUihwY201MTJ4LT5zY2xrKSk7CisJCXJldHVybiBQVFJfRVJSKHBjbTUxMngtPnNjbGspOworCX0KKworCWlmIChwY201MTJ4LT5wbGxfb3V0KQorCQlyZXR1cm4gc25kX3BjbV9od19ydWxlX2FkZChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQkJCSAgIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAorCQkJCQkgICBwY201MTJ4X2h3X3J1bGVfcmF0ZSwKKwkJCQkJICAgTlVMTCwKKwkJCQkJICAgU05EUlZfUENNX0hXX1BBUkFNX0ZSQU1FX0JJVFMsCisJCQkJCSAgIFNORFJWX1BDTV9IV19QQVJBTV9DSEFOTkVMUywgLTEpOworCisJY29uc3RyYWludHNfbm9fcGxsID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpjb25zdHJhaW50c19ub19wbGwpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCWlmICghY29uc3RyYWludHNfbm9fcGxsKQorCQlyZXR1cm4gLUVOT01FTTsKKwljb25zdHJhaW50c19ub19wbGwtPm5yYXRzID0gMTsKKwlyYXRzX25vX3BsbCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcmF0c19ub19wbGwpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJhdHNfbm9fcGxsKQorCQlyZXR1cm4gLUVOT01FTTsKKwljb25zdHJhaW50c19ub19wbGwtPnJhdHMgPSByYXRzX25vX3BsbDsKKwlyYXRzX25vX3BsbC0+bnVtID0gY2xrX2dldF9yYXRlKHBjbTUxMngtPnNjbGspIC8gNjQ7CisJcmF0c19ub19wbGwtPmRlbl9taW4gPSAxOworCXJhdHNfbm9fcGxsLT5kZW5fbWF4ID0gMTI4OworCXJhdHNfbm9fcGxsLT5kZW5fc3RlcCA9IDE7CisKKwlyZXR1cm4gc25kX3BjbV9od19jb25zdHJhaW50X3JhdG51bXMoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAorCQkJCQkgICAgIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAorCQkJCQkgICAgIGNvbnN0cmFpbnRzX25vX3BsbCk7Cit9CisKK3N0YXRpYyBpbnQgcGNtNTEyeF9kYWlfc3RhcnR1cF9zbGF2ZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQkgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHBjbTUxMnhfcHJpdiAqcGNtNTEyeCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhaS0+ZGV2OworCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IHBjbTUxMngtPnJlZ21hcDsKKworCWlmIChJU19FUlIocGNtNTEyeC0+c2NsaykpIHsKKwkJZGV2X2luZm8oZGV2LCAiTm8gU0NMSywgdXNpbmcgQkNMSzogJWxkXG4iLAorCQkJIFBUUl9FUlIocGNtNTEyeC0+c2NsaykpOworCisJCS8qIERpc2FibGUgcmVwb3J0aW5nIG9mIG1pc3NpbmcgU0NMSyBhcyBhbiBlcnJvciAqLworCQlyZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBQQ001MTJ4X0VSUk9SX0RFVEVDVCwKKwkJCQkgICBQQ001MTJ4X0lEQ0gsIFBDTTUxMnhfSURDSCk7CisKKwkJLyogU3dpdGNoIFBMTCBpbnB1dCB0byBCQ0xLICovCisJCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIFBDTTUxMnhfUExMX1JFRiwKKwkJCQkgICBQQ001MTJ4X1NSRUYsIFBDTTUxMnhfU1JFRl9CQ0spOworCX0KKworCXJldHVybiBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdChzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsCisJCQkJCSAgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCisJCQkJCSAgJmNvbnN0cmFpbnRzX3NsYXZlKTsKK30KKworc3RhdGljIGludCBwY201MTJ4X2RhaV9zdGFydHVwKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICAgIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHBjbTUxMnhfcHJpdiAqcGNtNTEyeCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJc3dpdGNoIChwY201MTJ4LT5mbXQgJiBTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgeworCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRlM6CisJCXJldHVybiBwY201MTJ4X2RhaV9zdGFydHVwX21hc3RlcihzdWJzdHJlYW0sIGRhaSk7CisKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCXJldHVybiBwY201MTJ4X2RhaV9zdGFydHVwX3NsYXZlKHN1YnN0cmVhbSwgZGFpKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKwogc3RhdGljIGludCBwY201MTJ4X3NldF9iaWFzX2xldmVsKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKIAkJCQkgIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewpAQCAtMzQwLDE3ICs1MTMsNzE3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBjbTUxMnhfZmluZF9zY2soc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBiY2xrX3JhdGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGFpLT5kZXY7CisJdW5zaWduZWQgbG9uZyBzY2tfcmF0ZTsKKwlpbnQgcG93MjsKKworCS8qIDY0IE1IeiA8PSBwbGxfcmF0ZSA8PSAxMDAgTUh6LCBWUkVGIG1vZGUgKi8KKwkvKiAxNiBNSHogPD0gc2NrX3JhdGUgPD0gIDI1IE1IeiwgVlJFRiBtb2RlICovCisKKwkvKiBzZWxlY3Qgc2NrX3JhdGUgYXMgYSBtdWx0aXBsZSBvZiBiY2xrX3JhdGUgYnV0IHN0aWxsIHdpdGgKKwkgKiBhcyBtYW55IGZhY3RvcnMgb2YgMiBhcyBwb3NzaWJsZSwgYXMgdGhhdCBtYWtlcyBpdCBlYXNpZXIKKwkgKiB0byBmaW5kIGEgZmFzdCBEQUMgcmF0ZQorCSAqLworCXBvdzIgPSAxIDw8IGZscygoMjUwMDAwMDAgLSAxNjAwMDAwMCkgLyBiY2xrX3JhdGUpOworCWZvciAoOyBwb3cyOyBwb3cyID4+PSAxKSB7CisJCXNja19yYXRlID0gcm91bmRkb3duKDI1MDAwMDAwLCBiY2xrX3JhdGUgKiBwb3cyKTsKKwkJaWYgKHNja19yYXRlID49IDE2MDAwMDAwKQorCQkJYnJlYWs7CisJfQorCWlmICghcG93MikgeworCQlkZXZfZXJyKGRldiwgIkltcG9zc2libGUgdG8gZ2VuZXJhdGUgYSBzdWl0YWJsZSBTQ0tcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlkZXZfZGJnKGRldiwgInNja19yYXRlICVsdVxuIiwgc2NrX3JhdGUpOworCXJldHVybiBzY2tfcmF0ZTsKK30KKworLyogcGxsX3JhdGUgPSBwbGxpbl9yYXRlICogUiAqIEouRCAvIFAKKyAqIDEgPD0gUiA8PSAxNgorICogMSA8PSBKIDw9IDYzCisgKiAwIDw9IEQgPD0gOTk5OQorICogMSA8PSBQIDw9IDE1CisgKiA2NCBNSHogPD0gcGxsX3JhdGUgPD0gMTAwIE1IegorICogaWYgRCA9PSAwCisgKiAgICAgMSBNSHogPD0gcGxsaW5fcmF0ZSAvIFAgPD0gMjAgTUh6CisgKiBlbHNlIGlmIEQgPiAwCisgKiAgICAgNi42NjcgTUh6IDw9IHBsbGluX3JhdGUgLyBQIDw9IDIwIE1IegorICogICAgIDQgPD0gSiA8PSAxMQorICogICAgIFIgPSAxCisgKi8KK3N0YXRpYyBpbnQgcGNtNTEyeF9maW5kX3BsbF9jb2VmZihzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcGxsaW5fcmF0ZSwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcGxsX3JhdGUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGFpLT5kZXY7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gZGFpLT5jb2RlYzsKKwlzdHJ1Y3QgcGNtNTEyeF9wcml2ICpwY201MTJ4ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisJdW5zaWduZWQgbG9uZyBjb21tb247CisJaW50IFIsIEosIEQsIFA7CisJdW5zaWduZWQgbG9uZyBLOyAvKiAxMDAwMCAqIEouRCAqLworCXVuc2lnbmVkIGxvbmcgbnVtOworCXVuc2lnbmVkIGxvbmcgZGVuOworCisJY29tbW9uID0gZ2NkKHBsbF9yYXRlLCBwbGxpbl9yYXRlKTsKKwlkZXZfZGJnKGRldiwgInBsbCAlbHUgcGxsaW4gJWx1IGNvbW1vbiAlbHVcbiIsCisJCXBsbF9yYXRlLCBwbGxpbl9yYXRlLCBjb21tb24pOworCW51bSA9IHBsbF9yYXRlIC8gY29tbW9uOworCWRlbiA9IHBsbGluX3JhdGUgLyBjb21tb247CisKKwkvKiBwbGxpbl9yYXRlIC8gUCAob3IgaGVyZSwgZGVuKSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDIwIE1IeiAqLworCWlmIChwbGxpbl9yYXRlIC8gZGVuID4gMjAwMDAwMDAgJiYgbnVtIDwgOCkgeworCQludW0gKj0gMjAwMDAwMDAgLyAocGxsaW5fcmF0ZSAvIGRlbik7CisJCWRlbiAqPSAyMDAwMDAwMCAvIChwbGxpbl9yYXRlIC8gZGVuKTsKKwl9CisJZGV2X2RiZyhkZXYsICJudW0gLyBkZW4gPSAlbHUgLyAlbHVcbiIsIG51bSwgZGVuKTsKKworCVAgPSBkZW47CisJaWYgKGRlbiA8PSAxNSAmJiBudW0gPD0gMTYgKiA2MworCSAgICAmJiAxMDAwMDAwIDw9IHBsbGluX3JhdGUgLyBQICYmIHBsbGluX3JhdGUgLyBQIDw9IDIwMDAwMDAwKSB7CisJCS8qIFRyeSB0aGUgY2FzZSB3aXRoIEQgPSAwICovCisJCUQgPSAwOworCQkvKiBmYWN0b3IgJ251bScgaW50byBKIGFuZCBSLCBzdWNoIHRoYXQgUiA8PSAxNiBhbmQgSiA8PSA2MyAqLworCQlmb3IgKFIgPSAxNjsgUjsgUi0tKSB7CisJCQlpZiAobnVtICUgUikKKwkJCQljb250aW51ZTsKKwkJCUogPSBudW0gLyBSOworCQkJaWYgKEogPT0gMCB8fCBKID4gNjMpCisJCQkJY29udGludWU7CisKKwkJCWRldl9kYmcoZGV2LCAiUiAqIEogLyBQID0gJWQgKiAlZCAvICVkXG4iLCBSLCBKLCBQKTsKKwkJCXBjbTUxMngtPnJlYWxfcGxsID0gcGxsX3JhdGU7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJLyogbm8gbHVjayAqLworCX0KKworCVIgPSAxOworCisJaWYgKG51bSA+IDB4ZmZmZmZmZmZVTCAvIDEwMDAwKQorCQlnb3RvIGZhbGxiYWNrOworCisJLyogVHJ5IHRvIGZpbmQgYW4gZXhhY3QgcGxsX3JhdGUgdXNpbmcgdGhlIEQgPiAwIGNhc2UgKi8KKwljb21tb24gPSBnY2QoMTAwMDAgKiBudW0sIGRlbik7CisJbnVtID0gMTAwMDAgKiBudW0gLyBjb21tb247CisJZGVuIC89IGNvbW1vbjsKKwlkZXZfZGJnKGRldiwgIm51bSAlbHUgZGVuICVsdSBjb21tb24gJWx1XG4iLCBudW0sIGRlbiwgY29tbW9uKTsKKworCWZvciAoUCA9IGRlbjsgUCA8PSAxNTsgUCsrKSB7CisJCWlmIChwbGxpbl9yYXRlIC8gUCA8IDY2NjcwMDAgfHwgMjAwMDAwMDAwIDwgcGxsaW5fcmF0ZSAvIFApCisJCQljb250aW51ZTsKKwkJaWYgKG51bSAqIFAgJSBkZW4pCisJCQljb250aW51ZTsKKwkJSyA9IG51bSAqIFAgLyBkZW47CisJCS8qIEogPT0gMTIgaXMgb2sgaWYgRCA9PSAwICovCisJCWlmIChLIDwgNDAwMDAgfHwgSyA+IDEyMDAwMCkKKwkJCWNvbnRpbnVlOworCisJCUogPSBLIC8gMTAwMDA7CisJCUQgPSBLICUgMTAwMDA7CisJCWRldl9kYmcoZGV2LCAiSi5EIC8gUCA9ICVkLiUwNGQgLyAlZFxuIiwgSiwgRCwgUCk7CisJCXBjbTUxMngtPnJlYWxfcGxsID0gcGxsX3JhdGU7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBGYWxsIGJhY2sgdG8gYW4gYXBwcm94aW1hdGUgcGxsX3JhdGUgKi8KKworZmFsbGJhY2s6CisJLyogZmluZCBzbWFsbGVzdCBwb3NzaWJsZSBQICovCisJUCA9IERJVl9ST1VORF9VUChwbGxpbl9yYXRlLCAyMDAwMDAwMCk7CisJaWYgKCFQKQorCQlQID0gMTsKKwllbHNlIGlmIChQID4gMTUpIHsKKwkJZGV2X2VycihkZXYsICJOZWVkIGEgc2xvd2VyIGNsb2NrIGFzIHBsbC1pbnB1dFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocGxsaW5fcmF0ZSAvIFAgPCA2NjY3MDAwKSB7CisJCWRldl9lcnIoZGV2LCAiTmVlZCBhIGZhc3RlciBjbG9jayBhcyBwbGwtaW5wdXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJSyA9IERJVl9ST1VORF9DTE9TRVNUX1VMTCgxMDAwMFVMTCAqIHBsbF9yYXRlICogUCwgcGxsaW5fcmF0ZSk7CisJaWYgKEsgPCA0MDAwMCkKKwkJSyA9IDQwMDAwOworCS8qIEogPT0gMTIgaXMgb2sgaWYgRCA9PSAwICovCisJaWYgKEsgPiAxMjAwMDApCisJCUsgPSAxMjAwMDA7CisJSiA9IEsgLyAxMDAwMDsKKwlEID0gSyAlIDEwMDAwOworCWRldl9kYmcoZGV2LCAiSi5EIC8gUCB+ICVkLiUwNGQgLyAlZFxuIiwgSiwgRCwgUCk7CisJcGNtNTEyeC0+cmVhbF9wbGwgPSBESVZfUk9VTkRfRE9XTl9VTEwoKHU2NClLICogcGxsaW5fcmF0ZSwgMTAwMDAgKiBQKTsKKworZG9uZToKKwlwY201MTJ4LT5wbGxfciA9IFI7CisJcGNtNTEyeC0+cGxsX2ogPSBKOworCXBjbTUxMngtPnBsbF9kID0gRDsKKwlwY201MTJ4LT5wbGxfcCA9IFA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBjbTUxMnhfcGxsaW5fZGFjX3JhdGUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIG9zcl9yYXRlLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBwbGxpbl9yYXRlKQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHBjbTUxMnhfcHJpdiAqcGNtNTEyeCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXVuc2lnbmVkIGxvbmcgZGFjX3JhdGU7CisKKwlpZiAoIXBjbTUxMngtPnBsbF9vdXQpCisJCXJldHVybiAwOyAvKiBubyBQTEwgdG8gYnlwYXNzLCBmb3JjZSBTQ0sgYXMgREFDIGlucHV0ICovCisKKwlpZiAocGxsaW5fcmF0ZSAlIG9zcl9yYXRlKQorCQlyZXR1cm4gMDsgLyogZnV0aWxlLCBxdWl0IGVhcmx5ICovCisKKwkvKiBydW4gREFDIG5vIGZhc3RlciB0aGFuIDYxNDQwMDAgSHogKi8KKwlmb3IgKGRhY19yYXRlID0gcm91bmRkb3duKDYxNDQwMDAsIG9zcl9yYXRlKTsKKwkgICAgIGRhY19yYXRlOworCSAgICAgZGFjX3JhdGUgLT0gb3NyX3JhdGUpIHsKKworCQlpZiAocGxsaW5fcmF0ZSAvIGRhY19yYXRlID4gMTI4KQorCQkJcmV0dXJuIDA7IC8qIERBQyBkaXZpZGVyIHdvdWxkIGJlIHRvbyBiaWcgKi8KKworCQlpZiAoIShwbGxpbl9yYXRlICUgZGFjX3JhdGUpKQorCQkJcmV0dXJuIGRhY19yYXRlOworCisJCWRhY19yYXRlIC09IG9zcl9yYXRlOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjbTUxMnhfc2V0X2RpdmlkZXJzKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLAorCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhaS0+ZGV2OworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHBjbTUxMnhfcHJpdiAqcGNtNTEyeCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXVuc2lnbmVkIGxvbmcgcGxsaW5fcmF0ZSA9IDA7CisJdW5zaWduZWQgbG9uZyBwbGxfcmF0ZTsKKwl1bnNpZ25lZCBsb25nIHNja19yYXRlOworCXVuc2lnbmVkIGxvbmcgbWNrX3JhdGU7CisJdW5zaWduZWQgbG9uZyBiY2xrX3JhdGU7CisJdW5zaWduZWQgbG9uZyBzYW1wbGVfcmF0ZTsKKwl1bnNpZ25lZCBsb25nIG9zcl9yYXRlOworCXVuc2lnbmVkIGxvbmcgZGFjc3JjX3JhdGU7CisJaW50IGJjbGtfZGl2OworCWludCBscmNsa19kaXY7CisJaW50IGRzcF9kaXY7CisJaW50IGRhY19kaXY7CisJdW5zaWduZWQgbG9uZyBkYWNfcmF0ZTsKKwlpbnQgbmNwX2RpdjsKKwlpbnQgb3NyX2RpdjsKKwlpbnQgcmV0OworCWludCBpZGFjOworCWludCBmc3NwOworCWludCBncGlvOworCisJbHJjbGtfZGl2ID0gc25kX3NvY19wYXJhbXNfdG9fZnJhbWVfc2l6ZShwYXJhbXMpOworCWlmIChscmNsa19kaXYgPT0gMCkgeworCQlkZXZfZXJyKGRldiwgIk5vIExSQ0xLP1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghcGNtNTEyeC0+cGxsX291dCkgeworCQlzY2tfcmF0ZSA9IGNsa19nZXRfcmF0ZShwY201MTJ4LT5zY2xrKTsKKwkJYmNsa19kaXYgPSBwYXJhbXMtPnJhdGVfZGVuICogNjQgLyBscmNsa19kaXY7CisJCWJjbGtfcmF0ZSA9IERJVl9ST1VORF9DTE9TRVNUKHNja19yYXRlLCBiY2xrX2Rpdik7CisKKwkJbWNrX3JhdGUgPSBzY2tfcmF0ZTsKKwl9IGVsc2UgeworCQlyZXQgPSBzbmRfc29jX3BhcmFtc190b19iY2xrKHBhcmFtcyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBmaW5kIHN1aXRhYmxlIEJDTEs6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCQlpZiAocmV0ID09IDApIHsKKwkJCWRldl9lcnIoZGV2LCAiTm8gQkNMSz9cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYmNsa19yYXRlID0gcmV0OworCisJCXBsbGluX3JhdGUgPSBjbGtfZ2V0X3JhdGUocGNtNTEyeC0+c2Nsayk7CisKKwkJc2NrX3JhdGUgPSBwY201MTJ4X2ZpbmRfc2NrKGRhaSwgYmNsa19yYXRlKTsKKwkJaWYgKCFzY2tfcmF0ZSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlwbGxfcmF0ZSA9IDQgKiBzY2tfcmF0ZTsKKworCQlyZXQgPSBwY201MTJ4X2ZpbmRfcGxsX2NvZWZmKGRhaSwgcGxsaW5fcmF0ZSwgcGxsX3JhdGUpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCisJCXJldCA9IHJlZ21hcF93cml0ZShwY201MTJ4LT5yZWdtYXAsCisJCQkJICAgUENNNTEyeF9QTExfQ09FRkZfMCwgcGNtNTEyeC0+cGxsX3AgLSAxKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byB3cml0ZSBQTEwgUDogJWRcbiIsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0ID0gcmVnbWFwX3dyaXRlKHBjbTUxMngtPnJlZ21hcCwKKwkJCQkgICBQQ001MTJ4X1BMTF9DT0VGRl8xLCBwY201MTJ4LT5wbGxfaik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gd3JpdGUgUExMIEo6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXJldCA9IHJlZ21hcF93cml0ZShwY201MTJ4LT5yZWdtYXAsCisJCQkJICAgUENNNTEyeF9QTExfQ09FRkZfMiwgcGNtNTEyeC0+cGxsX2QgPj4gOCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gd3JpdGUgUExMIEQgbXNiOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSByZWdtYXBfd3JpdGUocGNtNTEyeC0+cmVnbWFwLAorCQkJCSAgIFBDTTUxMnhfUExMX0NPRUZGXzMsIHBjbTUxMngtPnBsbF9kICYgMHhmZik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gd3JpdGUgUExMIEQgbHNiOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSByZWdtYXBfd3JpdGUocGNtNTEyeC0+cmVnbWFwLAorCQkJCSAgIFBDTTUxMnhfUExMX0NPRUZGXzQsIHBjbTUxMngtPnBsbF9yIC0gMSk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gd3JpdGUgUExMIFI6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCW1ja19yYXRlID0gcGNtNTEyeC0+cmVhbF9wbGw7CisKKwkJYmNsa19kaXYgPSBESVZfUk9VTkRfQ0xPU0VTVChzY2tfcmF0ZSwgYmNsa19yYXRlKTsKKwl9CisKKwlpZiAoYmNsa19kaXYgPiAxMjgpIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZmluZCBCQ0xLIGRpdmlkZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiB0aGUgYWN0dWFsIHJhdGUgKi8KKwlzYW1wbGVfcmF0ZSA9IHNja19yYXRlIC8gYmNsa19kaXYgLyBscmNsa19kaXY7CisJb3NyX3JhdGUgPSAxNiAqIHNhbXBsZV9yYXRlOworCisJLyogcnVuIERTUCBubyBmYXN0ZXIgdGhhbiA1MCBNSHogKi8KKwlkc3BfZGl2ID0gbWNrX3JhdGUgPiA1MDAwMDAwMCA/IDIgOiAxOworCisJZGFjX3JhdGUgPSBwY201MTJ4X3BsbGluX2RhY19yYXRlKGRhaSwgb3NyX3JhdGUsIHBsbGluX3JhdGUpOworCWlmIChkYWNfcmF0ZSkgeworCQkvKiB0aGUgZGVzaXJlZCBjbG9jayByYXRlIGlzICJjb21wYXRpYmxlIiB3aXRoIHRoZSBwbGwgaW5wdXQKKwkJICogY2xvY2ssIHNvIHVzZSB0aGF0IGNsb2NrIGFzIGRhYyBpbnB1dCBpbnN0ZWFkIG9mIHRoZSBwbGwKKwkJICogb3V0cHV0IGNsb2NrIHNpbmNlIHRoZSBwbGwgd2lsbCBpbnRyb2R1Y2Ugaml0dGVyIGFuZCB0aHVzCisJCSAqIG5vaXNlLgorCQkgKi8KKwkJZGV2X2RiZyhkZXYsICJ1c2luZyBwbGwgaW5wdXQgYXMgZGFjIGlucHV0XG4iKTsKKwkJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHBjbTUxMngtPnJlZ21hcCwgUENNNTEyeF9EQUNfUkVGLAorCQkJCQkgUENNNTEyeF9TREFDLCBQQ001MTJ4X1NEQUNfR1BJTyk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gc2V0IGdwaW8gYXMgZGFjcmVmOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlncGlvID0gUENNNTEyeF9HUkVGX0dQSU8xICsgcGNtNTEyeC0+cGxsX2luIC0gMTsKKwkJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHBjbTUxMngtPnJlZ21hcCwgUENNNTEyeF9HUElPX0RBQ0lOLAorCQkJCQkgUENNNTEyeF9HUkVGLCBncGlvKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkJIkZhaWxlZCB0byBzZXQgZ3BpbyAlZCBhcyBkYWNpbjogJWRcbiIsCisJCQkJcGNtNTEyeC0+cGxsX2luLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWRhY3NyY19yYXRlID0gcGxsaW5fcmF0ZTsKKwl9IGVsc2UgeworCQkvKiBydW4gREFDIG5vIGZhc3RlciB0aGFuIDYxNDQwMDAgSHogKi8KKwkJdW5zaWduZWQgbG9uZyBkYWNfbXVsID0gNjE0NDAwMCAvIG9zcl9yYXRlOworCQl1bnNpZ25lZCBsb25nIHNja19tdWwgPSBzY2tfcmF0ZSAvIG9zcl9yYXRlOworCisJCWZvciAoOyBkYWNfbXVsOyBkYWNfbXVsLS0pIHsKKwkJCWlmICghKHNja19tdWwgJSBkYWNfbXVsKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoIWRhY19tdWwpIHsKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGZpbmQgREFDIHJhdGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlkYWNfcmF0ZSA9IGRhY19tdWwgKiBvc3JfcmF0ZTsKKwkJZGV2X2RiZyhkZXYsICJkYWNfcmF0ZSAlbHUgc2FtcGxlX3JhdGUgJWx1XG4iLAorCQkJZGFjX3JhdGUsIHNhbXBsZV9yYXRlKTsKKworCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocGNtNTEyeC0+cmVnbWFwLCBQQ001MTJ4X0RBQ19SRUYsCisJCQkJCSBQQ001MTJ4X1NEQUMsIFBDTTUxMnhfU0RBQ19TQ0spOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHNldCBzY2sgYXMgZGFjcmVmOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlkYWNzcmNfcmF0ZSA9IHNja19yYXRlOworCX0KKworCWRhY19kaXYgPSBESVZfUk9VTkRfQ0xPU0VTVChkYWNzcmNfcmF0ZSwgZGFjX3JhdGUpOworCWlmIChkYWNfZGl2ID4gMTI4KSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGZpbmQgREFDIGRpdmlkZXJcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwluY3BfZGl2ID0gRElWX1JPVU5EX0NMT1NFU1QoZGFjc3JjX3JhdGUgLyBkYWNfZGl2LCAxNTM2MDAwKTsKKwlpZiAobmNwX2RpdiA+IDEyOCB8fCBkYWNzcmNfcmF0ZSAvIGRhY19kaXYgLyBuY3BfZGl2ID4gMjA0ODAwMCkgeworCQkvKiBydW4gTkNQIG5vIGZhc3RlciB0aGFuIDIwNDgwMDAgSHosIGJ1dCB3aHk/ICovCisJCW5jcF9kaXYgPSBESVZfUk9VTkRfVVAoZGFjc3JjX3JhdGUgLyBkYWNfZGl2LCAyMDQ4MDAwKTsKKwkJaWYgKG5jcF9kaXYgPiAxMjgpIHsKKwkJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGZpbmQgTkNQIGRpdmlkZXJcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlvc3JfZGl2ID0gRElWX1JPVU5EX0NMT1NFU1QoZGFjX3JhdGUsIG9zcl9yYXRlKTsKKwlpZiAob3NyX2RpdiA+IDEyOCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBmaW5kIE9TUiBkaXZpZGVyXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWRhYyA9IG1ja19yYXRlIC8gKGRzcF9kaXYgKiBzYW1wbGVfcmF0ZSk7CisKKwlyZXQgPSByZWdtYXBfd3JpdGUocGNtNTEyeC0+cmVnbWFwLCBQQ001MTJ4X0RTUF9DTEtESVYsIGRzcF9kaXYgLSAxKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gd3JpdGUgRFNQIGRpdmlkZXI6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJlZ21hcF93cml0ZShwY201MTJ4LT5yZWdtYXAsIFBDTTUxMnhfREFDX0NMS0RJViwgZGFjX2RpdiAtIDEpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byB3cml0ZSBEQUMgZGl2aWRlcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcmVnbWFwX3dyaXRlKHBjbTUxMngtPnJlZ21hcCwgUENNNTEyeF9OQ1BfQ0xLRElWLCBuY3BfZGl2IC0gMSk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHdyaXRlIE5DUCBkaXZpZGVyOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZWdtYXBfd3JpdGUocGNtNTEyeC0+cmVnbWFwLCBQQ001MTJ4X09TUl9DTEtESVYsIG9zcl9kaXYgLSAxKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gd3JpdGUgT1NSIGRpdmlkZXI6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJlZ21hcF93cml0ZShwY201MTJ4LT5yZWdtYXAsCisJCQkgICBQQ001MTJ4X01BU1RFUl9DTEtESVZfMSwgYmNsa19kaXYgLSAxKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gd3JpdGUgQkNMSyBkaXZpZGVyOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZWdtYXBfd3JpdGUocGNtNTEyeC0+cmVnbWFwLAorCQkJICAgUENNNTEyeF9NQVNURVJfQ0xLRElWXzIsIGxyY2xrX2RpdiAtIDEpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byB3cml0ZSBMUkNMSyBkaXZpZGVyOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZWdtYXBfd3JpdGUocGNtNTEyeC0+cmVnbWFwLCBQQ001MTJ4X0lEQUNfMSwgaWRhYyA+PiA4KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gd3JpdGUgSURBQyBtc2IgZGl2aWRlcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcmVnbWFwX3dyaXRlKHBjbTUxMngtPnJlZ21hcCwgUENNNTEyeF9JREFDXzIsIGlkYWMgJiAweGZmKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gd3JpdGUgSURBQyBsc2IgZGl2aWRlcjogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHNhbXBsZV9yYXRlIDw9IDQ4MDAwKQorCQlmc3NwID0gUENNNTEyeF9GU1NQXzQ4S0haOworCWVsc2UgaWYgKHNhbXBsZV9yYXRlIDw9IDk2MDAwKQorCQlmc3NwID0gUENNNTEyeF9GU1NQXzk2S0haOworCWVsc2UgaWYgKHNhbXBsZV9yYXRlIDw9IDE5MjAwMCkKKwkJZnNzcCA9IFBDTTUxMnhfRlNTUF8xOTJLSFo7CisJZWxzZQorCQlmc3NwID0gUENNNTEyeF9GU1NQXzM4NEtIWjsKKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocGNtNTEyeC0+cmVnbWFwLCBQQ001MTJ4X0ZTX1NQRUVEX01PREUsCisJCQkJIFBDTTUxMnhfRlNTUCwgZnNzcCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgZnMgc3BlZWQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9kYmcoY29kZWMtPmRldiwgIkRTUCBkaXZpZGVyICVkXG4iLCBkc3BfZGl2KTsKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJEQUMgZGl2aWRlciAlZFxuIiwgZGFjX2Rpdik7CisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiTkNQIGRpdmlkZXIgJWRcbiIsIG5jcF9kaXYpOworCWRldl9kYmcoY29kZWMtPmRldiwgIk9TUiBkaXZpZGVyICVkXG4iLCBvc3JfZGl2KTsKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJCQ0sgZGl2aWRlciAlZFxuIiwgYmNsa19kaXYpOworCWRldl9kYmcoY29kZWMtPmRldiwgIkxSQ0sgZGl2aWRlciAlZFxuIiwgbHJjbGtfZGl2KTsKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJJREFDICVkXG4iLCBpZGFjKTsKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICIxPDxGU1NQICVkXG4iLCAxIDw8IGZzc3ApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNtNTEyeF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLAorCQkJICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBkYWktPmNvZGVjOworCXN0cnVjdCBwY201MTJ4X3ByaXYgKnBjbTUxMnggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwlpbnQgYWxlbjsKKwlpbnQgZ3BpbzsKKwlpbnQgY2xvY2tfb3V0cHV0OworCWludCBtYXN0ZXJfbW9kZTsKKwlpbnQgcmV0OworCisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiaHdfcGFyYW1zICV1IEh6LCAldSBjaGFubmVsc1xuIiwKKwkJcGFyYW1zX3JhdGUocGFyYW1zKSwKKwkJcGFyYW1zX2NoYW5uZWxzKHBhcmFtcykpOworCisJc3dpdGNoIChzbmRfcGNtX2Zvcm1hdF93aWR0aChwYXJhbXNfZm9ybWF0KHBhcmFtcykpKSB7CisJY2FzZSAxNjoKKwkJYWxlbiA9IFBDTTUxMnhfQUxFTl8xNjsKKwkJYnJlYWs7CisJY2FzZSAyMDoKKwkJYWxlbiA9IFBDTTUxMnhfQUxFTl8yMDsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJYWxlbiA9IFBDTTUxMnhfQUxFTl8yNDsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJYWxlbiA9IFBDTTUxMnhfQUxFTl8zMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiQmFkIGZyYW1lIHNpemU6ICVkXG4iLAorCQkJc25kX3BjbV9mb3JtYXRfd2lkdGgocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXN3aXRjaCAocGNtNTEyeC0+Zm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spIHsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRlM6CisJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwY201MTJ4LT5yZWdtYXAsCisJCQkJCSBQQ001MTJ4X0JDTEtfTFJDTEtfQ0ZHLAorCQkJCQkgUENNNTEyeF9CQ0tQCisJCQkJCSB8IFBDTTUxMnhfQkNLTyB8IFBDTTUxMnhfTFJLTywKKwkJCQkJIDApOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGVuYWJsZSBzbGF2ZSBtb2RlOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocGNtNTEyeC0+cmVnbWFwLCBQQ001MTJ4X0VSUk9SX0RFVEVDVCwKKwkJCQkJIFBDTTUxMnhfRENBUywgMCk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCSJGYWlsZWQgdG8gZW5hYmxlIGNsb2NrIGRpdmlkZXIgYXV0b3NldDogJWRcbiIsCisJCQkJcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJcmV0dXJuIDA7CisJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgorCQljbG9ja19vdXRwdXQgPSBQQ001MTJ4X0JDS08gfCBQQ001MTJ4X0xSS087CisJCW1hc3Rlcl9tb2RlID0gUENNNTEyeF9STFJLIHwgUENNNTEyeF9SQkNLOworCQlicmVhazsKKwljYXNlIFNORF9TT0NfREFJRk1UX0NCTV9DRlM6CisJCWNsb2NrX291dHB1dCA9IFBDTTUxMnhfQkNLTzsKKwkJbWFzdGVyX21vZGUgPSBQQ001MTJ4X1JCQ0s7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwY201MTJ4LT5yZWdtYXAsIFBDTTUxMnhfSTJTXzEsCisJCQkJIFBDTTUxMnhfQUxFTiwgYWxlbik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgZnJhbWUgc2l6ZTogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHBjbTUxMngtPnBsbF9vdXQpIHsKKwkJcmV0ID0gcmVnbWFwX3dyaXRlKHBjbTUxMngtPnJlZ21hcCwgUENNNTEyeF9GTEVYX0EsIDB4MTEpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBzZXQgRkxFWF9BOiAlZFxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlyZXQgPSByZWdtYXBfd3JpdGUocGNtNTEyeC0+cmVnbWFwLCBQQ001MTJ4X0ZMRVhfQiwgMHhmZik7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIHNldCBGTEVYX0I6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwY201MTJ4LT5yZWdtYXAsIFBDTTUxMnhfRVJST1JfREVURUNULAorCQkJCQkgUENNNTEyeF9JREZTIHwgUENNNTEyeF9JREJLCisJCQkJCSB8IFBDTTUxMnhfSURTSyB8IFBDTTUxMnhfSURDSAorCQkJCQkgfCBQQ001MTJ4X0lEQ00gfCBQQ001MTJ4X0RDQVMKKwkJCQkJIHwgUENNNTEyeF9JUExLLAorCQkJCQkgUENNNTEyeF9JREZTIHwgUENNNTEyeF9JREJLCisJCQkJCSB8IFBDTTUxMnhfSURTSyB8IFBDTTUxMnhfSURDSAorCQkJCQkgfCBQQ001MTJ4X0RDQVMpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGlnbm9yZSBhdXRvLWNsb2NrIGZhaWx1cmVzOiAlZFxuIiwKKwkJCQlyZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gZWxzZSB7CisJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwY201MTJ4LT5yZWdtYXAsIFBDTTUxMnhfRVJST1JfREVURUNULAorCQkJCQkgUENNNTEyeF9JREZTIHwgUENNNTEyeF9JREJLCisJCQkJCSB8IFBDTTUxMnhfSURTSyB8IFBDTTUxMnhfSURDSAorCQkJCQkgfCBQQ001MTJ4X0lEQ00gfCBQQ001MTJ4X0RDQVMKKwkJCQkJIHwgUENNNTEyeF9JUExLLAorCQkJCQkgUENNNTEyeF9JREZTIHwgUENNNTEyeF9JREJLCisJCQkJCSB8IFBDTTUxMnhfSURTSyB8IFBDTTUxMnhfSURDSAorCQkJCQkgfCBQQ001MTJ4X0RDQVMgfCBQQ001MTJ4X0lQTEspOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkiRmFpbGVkIHRvIGlnbm9yZSBhdXRvLWNsb2NrIGZhaWx1cmVzOiAlZFxuIiwKKwkJCQlyZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwY201MTJ4LT5yZWdtYXAsIFBDTTUxMnhfUExMX0VOLAorCQkJCQkgUENNNTEyeF9QTExFLCAwKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZGlzYWJsZSBwbGw6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldCA9IHBjbTUxMnhfc2V0X2RpdmlkZXJzKGRhaSwgcGFyYW1zKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAocGNtNTEyeC0+cGxsX291dCkgeworCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocGNtNTEyeC0+cmVnbWFwLCBQQ001MTJ4X1BMTF9SRUYsCisJCQkJCSBQQ001MTJ4X1NSRUYsIFBDTTUxMnhfU1JFRl9HUElPKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsCisJCQkJIkZhaWxlZCB0byBzZXQgZ3BpbyBhcyBwbGxyZWY6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWdwaW8gPSBQQ001MTJ4X0dSRUZfR1BJTzEgKyBwY201MTJ4LT5wbGxfaW4gLSAxOworCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocGNtNTEyeC0+cmVnbWFwLCBQQ001MTJ4X0dQSU9fUExMSU4sCisJCQkJCSBQQ001MTJ4X0dSRUYsIGdwaW8pOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkiRmFpbGVkIHRvIHNldCBncGlvICVkIGFzIHBsbGluOiAlZFxuIiwKKwkJCQlwY201MTJ4LT5wbGxfaW4sIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJcmV0ID0gcmVnbWFwX3VwZGF0ZV9iaXRzKHBjbTUxMngtPnJlZ21hcCwgUENNNTEyeF9QTExfRU4sCisJCQkJCSBQQ001MTJ4X1BMTEUsIFBDTTUxMnhfUExMRSk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBwbGw6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwY201MTJ4LT5yZWdtYXAsIFBDTTUxMnhfQkNMS19MUkNMS19DRkcsCisJCQkJIFBDTTUxMnhfQkNLUCB8IFBDTTUxMnhfQkNLTyB8IFBDTTUxMnhfTFJLTywKKwkJCQkgY2xvY2tfb3V0cHV0KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBjbG9jayBvdXRwdXQ6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwY201MTJ4LT5yZWdtYXAsIFBDTTUxMnhfTUFTVEVSX01PREUsCisJCQkJIFBDTTUxMnhfUkxSSyB8IFBDTTUxMnhfUkJDSywKKwkJCQkgbWFzdGVyX21vZGUpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIG1hc3RlciBtb2RlOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAocGNtNTEyeC0+cGxsX291dCkgeworCQlncGlvID0gUENNNTEyeF9HMU9FIDw8IChwY201MTJ4LT5wbGxfb3V0IC0gMSk7CisJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwY201MTJ4LT5yZWdtYXAsIFBDTTUxMnhfR1BJT19FTiwKKwkJCQkJIGdwaW8sIGdwaW8pOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byBlbmFibGUgZ3BpbyAlZDogJWRcbiIsCisJCQkJcGNtNTEyeC0+cGxsX291dCwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlncGlvID0gUENNNTEyeF9HUElPX09VVFBVVF8xICsgcGNtNTEyeC0+cGxsX291dCAtIDE7CisJCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhwY201MTJ4LT5yZWdtYXAsIGdwaW8sCisJCQkJCSBQQ001MTJ4X0d4U0wsIFBDTTUxMnhfR3hTTF9QTExDSyk7CisJCWlmIChyZXQgIT0gMCkgeworCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIG91dHB1dCBwbGwgb24gJWQ6ICVkXG4iLAorCQkJCXJldCwgcGNtNTEyeC0+cGxsX291dCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJZ3BpbyA9IFBDTTUxMnhfRzFPRSA8PCAoNCAtIDEpOworCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocGNtNTEyeC0+cmVnbWFwLCBQQ001MTJ4X0dQSU9fRU4sCisJCQkJCSBncGlvLCBncGlvKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gZW5hYmxlIGdwaW8gJWQ6ICVkXG4iLAorCQkJCTQsIHJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisKKwkJZ3BpbyA9IFBDTTUxMnhfR1BJT19PVVRQVVRfMSArIDQgLSAxOworCQlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocGNtNTEyeC0+cmVnbWFwLCBncGlvLAorCQkJCQkgUENNNTEyeF9HeFNMLCBQQ001MTJ4X0d4U0xfUExMTEspOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkiRmFpbGVkIHRvIG91dHB1dCBwbGwgbG9jayBvbiAlZDogJWRcbiIsCisJCQkJcmV0LCA0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocGNtNTEyeC0+cmVnbWFwLCBQQ001MTJ4X1NZTkNIUk9OSVpFLAorCQkJCSBQQ001MTJ4X1JRU1ksIFBDTTUxMnhfUlFTWV9IQUxUKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiRmFpbGVkIHRvIGhhbHQgY2xvY2tzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMocGNtNTEyeC0+cmVnbWFwLCBQQ001MTJ4X1NZTkNIUk9OSVpFLAorCQkJCSBQQ001MTJ4X1JRU1ksIFBDTTUxMnhfUlFTWV9SRVNVTUUpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVzdW1lIGNsb2NrczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNtNTEyeF9zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpLCB1bnNpZ25lZCBpbnQgZm10KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CisJc3RydWN0IHBjbTUxMnhfcHJpdiAqcGNtNTEyeCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCisJcGNtNTEyeC0+Zm10ID0gZm10OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYWlfb3BzIHBjbTUxMnhfZGFpX29wcyA9IHsKKwkuc3RhcnR1cCA9IHBjbTUxMnhfZGFpX3N0YXJ0dXAsCisJLmh3X3BhcmFtcyA9IHBjbTUxMnhfaHdfcGFyYW1zLAorCS5zZXRfZm10ID0gcGNtNTEyeF9zZXRfZm10LAorfTsKKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgcGNtNTEyeF9kYWkgPSB7CiAJLm5hbWUgPSAicGNtNTEyeC1oaWZpIiwKIAkucGxheWJhY2sgPSB7CiAJCS5zdHJlYW1fbmFtZSA9ICJQbGF5YmFjayIsCiAJCS5jaGFubmVsc19taW4gPSAyLAogCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMF8xOTIwMDAsCisJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFX0NPTlRJTlVPVVMsCisJCS5yYXRlX21pbiA9IDgwMDAsCisJCS5yYXRlX21heCA9IDM4NDAwMCwKIAkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSB8CiAJCQkgICBTTkRSVl9QQ01fRk1UQklUX1MyNF9MRSB8CiAJCQkgICBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRQogCX0sCisJLm9wcyA9ICZwY201MTJ4X2RhaV9vcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHBjbTUxMnhfY29kZWNfZHJpdmVyID0gewpAQCAtNDQ4LDIxICsxMzIxLDkgQEAKIAl9CiAKIAlwY201MTJ4LT5zY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgTlVMTCk7Ci0JaWYgKElTX0VSUihwY201MTJ4LT5zY2xrKSkgewotCQlpZiAoUFRSX0VSUihwY201MTJ4LT5zY2xrKSA9PSAtRVBST0JFX0RFRkVSKQotCQkJcmV0dXJuIC1FUFJPQkVfREVGRVI7Ci0KLQkJZGV2X2luZm8oZGV2LCAiTm8gU0NMSywgdXNpbmcgQkNMSzogJWxkXG4iLAotCQkJIFBUUl9FUlIocGNtNTEyeC0+c2NsaykpOwotCi0JCS8qIERpc2FibGUgcmVwb3J0aW5nIG9mIG1pc3NpbmcgU0NMSyBhcyBhbiBlcnJvciAqLwotCQlyZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBQQ001MTJ4X0VSUk9SX0RFVEVDVCwKLQkJCQkgICBQQ001MTJ4X0lEQ0gsIFBDTTUxMnhfSURDSCk7Ci0KLQkJLyogU3dpdGNoIFBMTCBpbnB1dCB0byBCQ0xLICovCi0JCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIFBDTTUxMnhfUExMX1JFRiwKLQkJCQkgICBQQ001MTJ4X1NSRUYsIFBDTTUxMnhfU1JFRik7Ci0JfSBlbHNlIHsKKwlpZiAoUFRSX0VSUihwY201MTJ4LT5zY2xrKSA9PSAtRVBST0JFX0RFRkVSKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwlpZiAoIUlTX0VSUihwY201MTJ4LT5zY2xrKSkgewogCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocGNtNTEyeC0+c2Nsayk7CiAJCWlmIChyZXQgIT0gMCkgewogCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIFNDTEs6ICVkXG4iLCByZXQpOwpAQCAtNDgzLDYgKzEzNDQsNDMgQEAKIAlwbV9ydW50aW1lX2VuYWJsZShkZXYpOwogCXBtX3J1bnRpbWVfaWRsZShkZXYpOwogCisjaWZkZWYgQ09ORklHX09GCisJaWYgKGRldi0+b2Zfbm9kZSkgeworCQljb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LT5vZl9ub2RlOworCQl1MzIgdmFsOworCisJCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInBsbC1pbiIsICZ2YWwpID49IDApIHsKKwkJCWlmICh2YWwgPiA2KSB7CisJCQkJZGV2X2VycihkZXYsICJJbnZhbGlkIHBsbC1pblxuIik7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGVycl9jbGs7CisJCQl9CisJCQlwY201MTJ4LT5wbGxfaW4gPSB2YWw7CisJCX0KKworCQlpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJwbGwtb3V0IiwgJnZhbCkgPj0gMCkgeworCQkJaWYgKHZhbCA+IDYpIHsKKwkJCQlkZXZfZXJyKGRldiwgIkludmFsaWQgcGxsLW91dFxuIik7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGVycl9jbGs7CisJCQl9CisJCQlwY201MTJ4LT5wbGxfb3V0ID0gdmFsOworCQl9CisKKwkJaWYgKCFwY201MTJ4LT5wbGxfaW4gIT0gIXBjbTUxMngtPnBsbF9vdXQpIHsKKwkJCWRldl9lcnIoZGV2LAorCQkJCSJFcnJvcjogYm90aCBwbGwtaW4gYW5kIHBsbC1vdXQsIG9yIG5vbmVcbiIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZXJyX2NsazsKKwkJfQorCQlpZiAocGNtNTEyeC0+cGxsX2luICYmIHBjbTUxMngtPnBsbF9pbiA9PSBwY201MTJ4LT5wbGxfb3V0KSB7CisJCQlkZXZfZXJyKGRldiwgIkVycm9yOiBwbGwtaW4gPT0gcGxsLW91dFxuIik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBlcnJfY2xrOworCQl9CisJfQorI2VuZGlmCisKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKGRldiwgJnBjbTUxMnhfY29kZWNfZHJpdmVyLAogCQkJCSAgICAmcGNtNTEyeF9kYWksIDEpOwogCWlmIChyZXQgIT0gMCkgewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9wY201MTJ4LmggYi9zb3VuZC9zb2MvY29kZWNzL3BjbTUxMnguaAppbmRleCA2ZWU3NmFhLi5iN2MzMTAyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3BjbTUxMnguaAorKysgYi9zb3VuZC9zb2MvY29kZWNzL3BjbTUxMnguaApAQCAtMzcsNiArMzcsMTAgQEAKICNkZWZpbmUgUENNNTEyeF9EU1BfR1BJT19JTlBVVCAgICAoUENNNTEyeF9QQUdFX0JBU0UoMCkgKyAgMTApCiAjZGVmaW5lIFBDTTUxMnhfTUFTVEVSX01PREUgICAgICAgKFBDTTUxMnhfUEFHRV9CQVNFKDApICsgIDEyKQogI2RlZmluZSBQQ001MTJ4X1BMTF9SRUYgICAgICAgICAgIChQQ001MTJ4X1BBR0VfQkFTRSgwKSArICAxMykKKyNkZWZpbmUgUENNNTEyeF9EQUNfUkVGICAgICAgICAgICAoUENNNTEyeF9QQUdFX0JBU0UoMCkgKyAgMTQpCisjZGVmaW5lIFBDTTUxMnhfR1BJT19EQUNJTiAgICAgICAgKFBDTTUxMnhfUEFHRV9CQVNFKDApICsgIDE2KQorI2RlZmluZSBQQ001MTJ4X0dQSU9fUExMSU4gICAgICAgIChQQ001MTJ4X1BBR0VfQkFTRSgwKSArICAxOCkKKyNkZWZpbmUgUENNNTEyeF9TWU5DSFJPTklaRSAgICAgICAoUENNNTEyeF9QQUdFX0JBU0UoMCkgKyAgMTkpCiAjZGVmaW5lIFBDTTUxMnhfUExMX0NPRUZGXzAgICAgICAgKFBDTTUxMnhfUEFHRV9CQVNFKDApICsgIDIwKQogI2RlZmluZSBQQ001MTJ4X1BMTF9DT0VGRl8xICAgICAgIChQQ001MTJ4X1BBR0VfQkFTRSgwKSArICAyMSkKICNkZWZpbmUgUENNNTEyeF9QTExfQ09FRkZfMiAgICAgICAoUENNNTEyeF9QQUdFX0JBU0UoMCkgKyAgMjIpCkBAIC03Nyw2ICs4MSw3IEBACiAjZGVmaW5lIFBDTTUxMnhfUkFURV9ERVRfMiAgICAgICAgKFBDTTUxMnhfUEFHRV9CQVNFKDApICsgIDkyKQogI2RlZmluZSBQQ001MTJ4X1JBVEVfREVUXzMgICAgICAgIChQQ001MTJ4X1BBR0VfQkFTRSgwKSArICA5MykKICNkZWZpbmUgUENNNTEyeF9SQVRFX0RFVF80ICAgICAgICAoUENNNTEyeF9QQUdFX0JBU0UoMCkgKyAgOTQpCisjZGVmaW5lIFBDTTUxMnhfQ0xPQ0tfU1RBVFVTICAgICAgKFBDTTUxMnhfUEFHRV9CQVNFKDApICsgIDk1KQogI2RlZmluZSBQQ001MTJ4X0FOQUxPR19NVVRFX0RFVCAgIChQQ001MTJ4X1BBR0VfQkFTRSgwKSArIDEwOCkKICNkZWZpbmUgUENNNTEyeF9HUElOICAgICAgICAgICAgICAoUENNNTEyeF9QQUdFX0JBU0UoMCkgKyAxMTkpCiAjZGVmaW5lIFBDTTUxMnhfRElHSVRBTF9NVVRFX0RFVCAgKFBDTTUxMnhfUEFHRV9CQVNFKDApICsgMTIwKQpAQCAtOTEsNyArOTYsMTAgQEAKIAogI2RlZmluZSBQQ001MTJ4X0NSQU1fQ1RSTCAgICAgICAgIChQQ001MTJ4X1BBR0VfQkFTRSg0NCkgKyAgMSkKIAotI2RlZmluZSBQQ001MTJ4X01BWF9SRUdJU1RFUiAgICAgIChQQ001MTJ4X1BBR0VfQkFTRSg0NCkgKyAgMSkKKyNkZWZpbmUgUENNNTEyeF9GTEVYX0EgICAgICAgICAgICAoUENNNTEyeF9QQUdFX0JBU0UoMjUzKSArIDYzKQorI2RlZmluZSBQQ001MTJ4X0ZMRVhfQiAgICAgICAgICAgIChQQ001MTJ4X1BBR0VfQkFTRSgyNTMpICsgNjQpCisKKyNkZWZpbmUgUENNNTEyeF9NQVhfUkVHSVNURVIgICAgICAoUENNNTEyeF9QQUdFX0JBU0UoMjUzKSArIDY0KQogCiAvKiBQYWdlIDAsIFJlZ2lzdGVyIDEgLSByZXNldCAqLwogI2RlZmluZSBQQ001MTJ4X1JTVFIgKDEgPDwgMCkKQEAgLTEwOCw4ICsxMTYsOCBAQAogI2RlZmluZSBQQ001MTJ4X1JRTUxfU0hJRlQgNAogCiAvKiBQYWdlIDAsIFJlZ2lzdGVyIDQgLSBQTEwgKi8KLSNkZWZpbmUgUENNNTEyeF9QTENFICAgICAgICgxIDw8IDApCi0jZGVmaW5lIFBDTTUxMnhfUkxDRV9TSElGVCAwCisjZGVmaW5lIFBDTTUxMnhfUExMRSAgICAgICAoMSA8PCAwKQorI2RlZmluZSBQQ001MTJ4X1BMTEVfU0hJRlQgMAogI2RlZmluZSBQQ001MTJ4X1BMQ0sgICAgICAgKDEgPDwgNCkKICNkZWZpbmUgUENNNTEyeF9QTENLX1NISUZUIDQKIApAQCAtMTE5LDggKzEyNyw2NiBAQAogI2RlZmluZSBQQ001MTJ4X0RFTVAgICAgICAgKDEgPDwgNCkKICNkZWZpbmUgUENNNTEyeF9ERU1QX1NISUZUIDQKIAorLyogUGFnZSAwLCBSZWdpc3RlciA4IC0gR1BJTyBvdXRwdXQgZW5hYmxlICovCisjZGVmaW5lIFBDTTUxMnhfRzFPRSAgICAgICAoMSA8PCAwKQorI2RlZmluZSBQQ001MTJ4X0cyT0UgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgUENNNTEyeF9HM09FICAgICAgICgxIDw8IDIpCisjZGVmaW5lIFBDTTUxMnhfRzRPRSAgICAgICAoMSA8PCAzKQorI2RlZmluZSBQQ001MTJ4X0c1T0UgICAgICAgKDEgPDwgNCkKKyNkZWZpbmUgUENNNTEyeF9HNk9FICAgICAgICgxIDw8IDUpCisKKy8qIFBhZ2UgMCwgUmVnaXN0ZXIgOSAtIEJDSywgTFJDTEsgY29uZmlndXJhdGlvbiAqLworI2RlZmluZSBQQ001MTJ4X0xSS08gICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgUENNNTEyeF9MUktPX1NISUZUIDAKKyNkZWZpbmUgUENNNTEyeF9CQ0tPICAgICAgICgxIDw8IDQpCisjZGVmaW5lIFBDTTUxMnhfQkNLT19TSElGVCA0CisjZGVmaW5lIFBDTTUxMnhfQkNLUCAgICAgICAoMSA8PCA1KQorI2RlZmluZSBQQ001MTJ4X0JDS1BfU0hJRlQgNQorCisvKiBQYWdlIDAsIFJlZ2lzdGVyIDEyIC0gTWFzdGVyIG1vZGUgQkNLLCBMUkNMSyByZXNldCAqLworI2RlZmluZSBQQ001MTJ4X1JMUksgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgUENNNTEyeF9STFJLX1NISUZUIDAKKyNkZWZpbmUgUENNNTEyeF9SQkNLICAgICAgICgxIDw8IDEpCisjZGVmaW5lIFBDTTUxMnhfUkJDS19TSElGVCAxCisKIC8qIFBhZ2UgMCwgUmVnaXN0ZXIgMTMgLSBQTEwgcmVmZXJlbmNlICovCi0jZGVmaW5lIFBDTTUxMnhfU1JFRiAoMSA8PCA0KQorI2RlZmluZSBQQ001MTJ4X1NSRUYgICAgICAgICg3IDw8IDQpCisjZGVmaW5lIFBDTTUxMnhfU1JFRl9TSElGVCAgNAorI2RlZmluZSBQQ001MTJ4X1NSRUZfU0NLICAgICgwIDw8IDQpCisjZGVmaW5lIFBDTTUxMnhfU1JFRl9CQ0sgICAgKDEgPDwgNCkKKyNkZWZpbmUgUENNNTEyeF9TUkVGX0dQSU8gICAoMyA8PCA0KQorCisvKiBQYWdlIDAsIFJlZ2lzdGVyIDE0IC0gREFDIHJlZmVyZW5jZSAqLworI2RlZmluZSBQQ001MTJ4X1NEQUMgICAgICAgICg3IDw8IDQpCisjZGVmaW5lIFBDTTUxMnhfU0RBQ19TSElGVCAgNAorI2RlZmluZSBQQ001MTJ4X1NEQUNfTUNLICAgICgwIDw8IDQpCisjZGVmaW5lIFBDTTUxMnhfU0RBQ19QTEwgICAgKDEgPDwgNCkKKyNkZWZpbmUgUENNNTEyeF9TREFDX1NDSyAgICAoMyA8PCA0KQorI2RlZmluZSBQQ001MTJ4X1NEQUNfQkNLICAgICg0IDw8IDQpCisjZGVmaW5lIFBDTTUxMnhfU0RBQ19HUElPICAgKDUgPDwgNCkKKworLyogUGFnZSAwLCBSZWdpc3RlciAxNiwgMTggLSBHUElPIHNvdXJjZSBmb3IgREFDLCBQTEwgKi8KKyNkZWZpbmUgUENNNTEyeF9HUkVGICAgICAgICAoNyA8PCAwKQorI2RlZmluZSBQQ001MTJ4X0dSRUZfU0hJRlQgIDAKKyNkZWZpbmUgUENNNTEyeF9HUkVGX0dQSU8xICAoMCA8PCAwKQorI2RlZmluZSBQQ001MTJ4X0dSRUZfR1BJTzIgICgxIDw8IDApCisjZGVmaW5lIFBDTTUxMnhfR1JFRl9HUElPMyAgKDIgPDwgMCkKKyNkZWZpbmUgUENNNTEyeF9HUkVGX0dQSU80ICAoMyA8PCAwKQorI2RlZmluZSBQQ001MTJ4X0dSRUZfR1BJTzUgICg0IDw8IDApCisjZGVmaW5lIFBDTTUxMnhfR1JFRl9HUElPNiAgKDUgPDwgMCkKKworLyogUGFnZSAwLCBSZWdpc3RlciAxOSAtIHN5bmNocm9uaXplICovCisjZGVmaW5lIFBDTTUxMnhfUlFTWSAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgUENNNTEyeF9SUVNZX1JFU1VNRSAoMCA8PCAwKQorI2RlZmluZSBQQ001MTJ4X1JRU1lfSEFMVCAgICgxIDw8IDApCisKKy8qIFBhZ2UgMCwgUmVnaXN0ZXIgMzQgLSBmcyBzcGVlZCBtb2RlICovCisjZGVmaW5lIFBDTTUxMnhfRlNTUCAgICAgICAgKDMgPDwgMCkKKyNkZWZpbmUgUENNNTEyeF9GU1NQX1NISUZUICAwCisjZGVmaW5lIFBDTTUxMnhfRlNTUF80OEtIWiAgKDAgPDwgMCkKKyNkZWZpbmUgUENNNTEyeF9GU1NQXzk2S0haICAoMSA8PCAwKQorI2RlZmluZSBQQ001MTJ4X0ZTU1BfMTkyS0haICgyIDw8IDApCisjZGVmaW5lIFBDTTUxMnhfRlNTUF8zODRLSFogKDMgPDwgMCkKIAogLyogUGFnZSAwLCBSZWdpc3RlciAzNyAtIEVycm9yIGRldGVjdGlvbiAqLwogI2RlZmluZSBQQ001MTJ4X0lQTEsgKDEgPDwgMCkKQEAgLTEzMSw2ICsxOTcsMjAgQEAKICNkZWZpbmUgUENNNTEyeF9JREJLICgxIDw8IDUpCiAjZGVmaW5lIFBDTTUxMnhfSURGUyAoMSA8PCA2KQogCisvKiBQYWdlIDAsIFJlZ2lzdGVyIDQwIC0gSTJTIGNvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgUENNNTEyeF9BTEVOICAgICAgICgzIDw8IDApCisjZGVmaW5lIFBDTTUxMnhfQUxFTl9TSElGVCAwCisjZGVmaW5lIFBDTTUxMnhfQUxFTl8xNiAgICAoMCA8PCAwKQorI2RlZmluZSBQQ001MTJ4X0FMRU5fMjAgICAgKDEgPDwgMCkKKyNkZWZpbmUgUENNNTEyeF9BTEVOXzI0ICAgICgyIDw8IDApCisjZGVmaW5lIFBDTTUxMnhfQUxFTl8zMiAgICAoMyA8PCAwKQorI2RlZmluZSBQQ001MTJ4X0FGTVQgICAgICAgKDMgPDwgNCkKKyNkZWZpbmUgUENNNTEyeF9BRk1UX1NISUZUIDQKKyNkZWZpbmUgUENNNTEyeF9BRk1UX0kyUyAgICgwIDw8IDQpCisjZGVmaW5lIFBDTTUxMnhfQUZNVF9EU1AgICAoMSA8PCA0KQorI2RlZmluZSBQQ001MTJ4X0FGTVRfUlRKICAgKDIgPDwgNCkKKyNkZWZpbmUgUENNNTEyeF9BRk1UX0xUSiAgICgzIDw8IDQpCisKIC8qIFBhZ2UgMCwgUmVnaXN0ZXIgNDIgLSBEQUMgcm91dGluZyAqLwogI2RlZmluZSBQQ001MTJ4X0FVUFJfU0hJRlQgMAogI2RlZmluZSBQQ001MTJ4X0FVUExfU0hJRlQgNApAQCAtMTUyLDcgKzIzMiwyNiBAQAogLyogUGFnZSAwLCBSZWdpc3RlciA2NSAtIERpZ2l0YWwgbXV0ZSBlbmFibGVzICovCiAjZGVmaW5lIFBDTTUxMnhfQUNUTF9TSElGVCAyCiAjZGVmaW5lIFBDTTUxMnhfQU1MRV9TSElGVCAxCi0jZGVmaW5lIFBDTTUxMnhfQU1MUl9TSElGVCAwCisjZGVmaW5lIFBDTTUxMnhfQU1SRV9TSElGVCAwCisKKy8qIFBhZ2UgMCwgUmVnaXN0ZXIgODAtODUsIEdQSU8gb3V0cHV0IHNlbGVjdGlvbiAqLworI2RlZmluZSBQQ001MTJ4X0d4U0wgICAgICAgKDMxIDw8IDApCisjZGVmaW5lIFBDTTUxMnhfR3hTTF9TSElGVCAwCisjZGVmaW5lIFBDTTUxMnhfR3hTTF9PRkYgICAoMCA8PCAwKQorI2RlZmluZSBQQ001MTJ4X0d4U0xfRFNQICAgKDEgPDwgMCkKKyNkZWZpbmUgUENNNTEyeF9HeFNMX1JFRyAgICgyIDw8IDApCisjZGVmaW5lIFBDTTUxMnhfR3hTTF9BTVVUQiAoMyA8PCAwKQorI2RlZmluZSBQQ001MTJ4X0d4U0xfQU1VVEwgKDQgPDwgMCkKKyNkZWZpbmUgUENNNTEyeF9HeFNMX0FNVVRSICg1IDw8IDApCisjZGVmaW5lIFBDTTUxMnhfR3hTTF9DTEtJICAoNiA8PCAwKQorI2RlZmluZSBQQ001MTJ4X0d4U0xfU0RPVVQgKDcgPDwgMCkKKyNkZWZpbmUgUENNNTEyeF9HeFNMX0FOTVVMICg4IDw8IDApCisjZGVmaW5lIFBDTTUxMnhfR3hTTF9BTk1VUiAoOSA8PCAwKQorI2RlZmluZSBQQ001MTJ4X0d4U0xfUExMTEsgKDEwIDw8IDApCisjZGVmaW5lIFBDTTUxMnhfR3hTTF9DUENMSyAoMTEgPDwgMCkKKyNkZWZpbmUgUENNNTEyeF9HeFNMX1VWMF83ICgxNCA8PCAwKQorI2RlZmluZSBQQ001MTJ4X0d4U0xfVVYwXzMgKDE1IDw8IDApCisjZGVmaW5lIFBDTTUxMnhfR3hTTF9QTExDSyAoMTYgPDwgMCkKIAogLyogUGFnZSAxLCBSZWdpc3RlciAyIC0gYW5hbG9nIHZvbHVtZSBjb250cm9sICovCiAjZGVmaW5lIFBDTTUxMnhfUkFHTl9TSElGVCAwCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3J0Mjg2LmMgYi9zb3VuZC9zb2MvY29kZWNzL3J0Mjg2LmMKaW5kZXggMmNkNGZlNC4uZjM3NDg0MCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9ydDI4Ni5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQyODYuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgInJ0Mjg2LmgiCiAKICNkZWZpbmUgUlQyODZfVkVORE9SX0lEIDB4MTBlYzAyODYKKyNkZWZpbmUgUlQyODhfVkVORE9SX0lEIDB4MTBlYzAyODgKIAogc3RydWN0IHJ0Mjg2X3ByaXYgewogCXN0cnVjdCByZWdtYXAgKnJlZ21hcDsKQEAgLTMwNSw2ICszMDYsOCBAQAogCSpocCA9IGZhbHNlOwogCSptaWMgPSBmYWxzZTsKIAorCWlmICghcnQyODYtPmNvZGVjKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAocnQyODYtPnBkYXRhLmNial9lbikgewogCQlyZWdtYXBfcmVhZChydDI4Ni0+cmVnbWFwLCBSVDI4Nl9HRVRfSFBfU0VOU0UsICZidWYpOwogCQkqaHAgPSBidWYgJiAweDgwMDAwMDAwOwpAQCAtNDAzLDcgKzQwNiw4IEBACiBzdGF0aWMgaW50IGlzX21jbGtfbW9kZShzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc291cmNlLAogCQkJIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzaW5rKQogewotCXN0cnVjdCBydDI4Nl9wcml2ICpydDI4NiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoc291cmNlLT5jb2RlYyk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHNvdXJjZS0+ZGFwbSk7CisJc3RydWN0IHJ0Mjg2X3ByaXYgKnJ0Mjg2ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlpZiAocnQyODYtPmNsa19pZCA9PSBSVDI4Nl9TQ0xLX1NfTUNMSykKIAkJcmV0dXJuIDE7CkBAIC00MTcsNiArNDIxLDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDI4Nl9zbmRfY29udHJvbHNbXSA9IHsKIAlTT0NfRE9VQkxFX1JfVExWKCJEQUMwIFBsYXliYWNrIFZvbHVtZSIsIFJUMjg2X0RBQ0xfR0FJTiwKIAkJCSAgICBSVDI4Nl9EQUNSX0dBSU4sIDAsIDB4N2YsIDAsIG91dF92b2xfdGx2KSwKKwlTT0NfRE9VQkxFX1IoIkFEQzAgQ2FwdHVyZSBTd2l0Y2giLCBSVDI4Nl9BRENMX0dBSU4sCisJCQkgICAgUlQyODZfQURDUl9HQUlOLCA3LCAxLCAxKSwKIAlTT0NfRE9VQkxFX1JfVExWKCJBREMwIENhcHR1cmUgVm9sdW1lIiwgUlQyODZfQURDTF9HQUlOLAogCQkJICAgIFJUMjg2X0FEQ1JfR0FJTiwgMCwgMHg3ZiwgMCwgb3V0X3ZvbF90bHYpLAogCVNPQ19TSU5HTEVfVExWKCJBTUlDIFZvbHVtZSIsIFJUMjg2X01JQ19HQUlOLApAQCAtNTAwLDcgKzUwNiw3IEBACiBzdGF0aWMgaW50IHJ0Mjg2X3Nwa19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKQEAgLTUyMiw3ICs1MjgsNyBAQAogc3RhdGljIGludCBydDI4Nl9zZXRfZG1pYzFfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKQEAgLTUzOCwzNiArNTQ0LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnQyODZfYWRjX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAotCQkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOwotCXVuc2lnbmVkIGludCBuaWQ7Ci0KLQluaWQgPSAody0+cmVnID4+IDIwKSAmIDB4ZmY7Ci0KLQlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6Ci0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsCi0JCQlWRVJCX0NNRChBQ19WRVJCX1NFVF9BTVBfR0FJTl9NVVRFLCBuaWQsIDApLAotCQkJMHg3MDgwLCAweDcwMDApOwotCQlicmVhazsKLQljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLAotCQkJVkVSQl9DTUQoQUNfVkVSQl9TRVRfQU1QX0dBSU5fTVVURSwgbmlkLCAwKSwKLQkJCTB4NzA4MCwgMHg3MDgwKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgcnQyODZfdnJlZl9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJCSAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKQEAgLTU4NSw3ICs1NjUsNyBAQAogc3RhdGljIGludCBydDI4Nl9sZG8yX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKQEAgLTYwNCw3ICs1ODQsNyBAQAogc3RhdGljIGludCBydDI4Nl9taWMxX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgpAQCAtNjY3LDEyICs2NDcsMTAgQEAKIAlTTkRfU09DX0RBUE1fQURDKCJBREMgMSIsIE5VTEwsIFNORF9TT0NfTk9QTSwgMCwgMCksCiAKIAkvKiBBREMgTXV4ICovCi0JU05EX1NPQ19EQVBNX01VWF9FKCJBREMgMCBNdXgiLCBSVDI4Nl9TRVRfUE9XRVIoUlQyODZfQURDX0lOMSksIDAsIDEsCi0JCSZydDI4Nl9hZGMwX211eCwgcnQyODZfYWRjX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNRCB8Ci0JCVNORF9TT0NfREFQTV9QT1NUX1BNVSksCi0JU05EX1NPQ19EQVBNX01VWF9FKCJBREMgMSBNdXgiLCBSVDI4Nl9TRVRfUE9XRVIoUlQyODZfQURDX0lOMiksIDAsIDEsCi0JCSZydDI4Nl9hZGMxX211eCwgcnQyODZfYWRjX2V2ZW50LCBTTkRfU09DX0RBUE1fUFJFX1BNRCB8Ci0JCVNORF9TT0NfREFQTV9QT1NUX1BNVSksCisJU05EX1NPQ19EQVBNX01VWCgiQURDIDAgTXV4IiwgUlQyODZfU0VUX1BPV0VSKFJUMjg2X0FEQ19JTjEpLCAwLCAxLAorCQkmcnQyODZfYWRjMF9tdXgpLAorCVNORF9TT0NfREFQTV9NVVgoIkFEQyAxIE11eCIsIFJUMjg2X1NFVF9QT1dFUihSVDI4Nl9BRENfSU4yKSwgMCwgMSwKKwkJJnJ0Mjg2X2FkYzFfbXV4KSwKIAogCS8qIEF1ZGlvIEludGVyZmFjZSAqLwogCVNORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFSWCIsICJBSUYxIFBsYXliYWNrIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKQEAgLTg2MSwxMCArODM5LDggQEAKIAkJUlQyODZfSTJTX0NUUkwxLCAweDAwMTgsIGRfbGVuX2NvZGUgPDwgMyk7CiAJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiZm9ybWF0IHZhbCA9IDB4JXhcbiIsIHZhbCk7CiAKLQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQyODZfREFDX0ZPUk1BVCwgMHg0MDdmLCB2YWwpOwotCWVsc2UKLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQyODZfQURDX0ZPUk1BVCwgMHg0MDdmLCB2YWwpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUMjg2X0RBQ19GT1JNQVQsIDB4NDA3ZiwgdmFsKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDI4Nl9BRENfRk9STUFULCAweDQwN2YsIHZhbCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExOTYsNiArMTE3Miw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBydDI4Nl9pMmNfaWRbXSA9IHsKIAl7InJ0Mjg2IiwgMH0sCisJeyJydDI4OCIsIDB9LAogCXt9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHJ0Mjg2X2kyY19pZCk7CkBAIC0xMjE2LDYgKzExOTMsMTcgQEAKIAl7IH0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBkbWlfZGVsbF9kaW5vW10gPSB7CisJeworCQkuaWRlbnQgPSAiRGVsbCBEaW5vIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJEZWxsIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIjAxNDRQOCIpCisJCX0KKwl9LAorCXsgfQorfTsKKwogc3RhdGljIGludCBydDI4Nl9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKIAkJCSAgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKQEAgLTEyMzgsNyArMTIyNiw3IEBACiAKIAlyZWdtYXBfcmVhZChydDI4Ni0+cmVnbWFwLAogCQlSVDI4Nl9HRVRfUEFSQU0oQUNfTk9ERV9ST09ULCBBQ19QQVJfVkVORE9SX0lEKSwgJnJldCk7Ci0JaWYgKHJldCAhPSBSVDI4Nl9WRU5ET1JfSUQpIHsKKwlpZiAocmV0ICE9IFJUMjg2X1ZFTkRPUl9JRCAmJiByZXQgIT0gUlQyODhfVkVORE9SX0lEKSB7CiAJCWRldl9lcnIoJmkyYy0+ZGV2LAogCQkJIkRldmljZSB3aXRoIElEIHJlZ2lzdGVyICV4IGlzIG5vdCBydDI4NlxuIiwgcmV0KTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMjUxLDcgKzEyMzksOCBAQAogCWlmIChwZGF0YSkKIAkJcnQyODYtPnBkYXRhID0gKnBkYXRhOwogCi0JaWYgKGRtaV9jaGVja19zeXN0ZW0oZm9yY2VfY29tYm9famFja190YWJsZSkpCisJaWYgKGRtaV9jaGVja19zeXN0ZW0oZm9yY2VfY29tYm9famFja190YWJsZSkgfHwKKwkJZG1pX2NoZWNrX3N5c3RlbShkbWlfZGVsbF9kaW5vKSkKIAkJcnQyODYtPnBkYXRhLmNial9lbiA9IHRydWU7CiAKIAlyZWdtYXBfd3JpdGUocnQyODYtPnJlZ21hcCwgUlQyODZfU0VUX0FVRElPX1BPV0VSLCBBQ19QV1JTVF9EMyk7CkBAIC0xMjkwLDYgKzEyNzksMTcgQEAKIAlyZWdtYXBfdXBkYXRlX2JpdHMocnQyODYtPnJlZ21hcCwgUlQyODZfREVQT1BfQ1RSTDMsIDB4Zjc3NywgMHg0NzM3KTsKIAlyZWdtYXBfdXBkYXRlX2JpdHMocnQyODYtPnJlZ21hcCwgUlQyODZfREVQT1BfQ1RSTDQsIDB4MDBmZiwgMHgwMDNmKTsKIAorCWlmIChkbWlfY2hlY2tfc3lzdGVtKGRtaV9kZWxsX2Rpbm8pKSB7CisJCXJlZ21hcF91cGRhdGVfYml0cyhydDI4Ni0+cmVnbWFwLAorCQkJUlQyODZfU0VUX0dQSU9fTUFTSywgMHg0MCwgMHg0MCk7CisJCXJlZ21hcF91cGRhdGVfYml0cyhydDI4Ni0+cmVnbWFwLAorCQkJUlQyODZfU0VUX0dQSU9fRElSRUNUSU9OLCAweDQwLCAweDQwKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0Mjg2LT5yZWdtYXAsCisJCQlSVDI4Nl9TRVRfR1BJT19EQVRBLCAweDQwLCAweDQwKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0Mjg2LT5yZWdtYXAsCisJCQlSVDI4Nl9HUElPX0NUUkwsIDB4YywgMHg4KTsKKwl9CisKIAlpZiAocnQyODYtPmkyYy0+aXJxKSB7CiAJCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHJ0Mjg2LT5pMmMtPmlycSwgTlVMTCwgcnQyODZfaXJxLAogCQkJSVJRRl9UUklHR0VSX0hJR0ggfCBJUlFGX09ORVNIT1QsICJydDI4NiIsIHJ0Mjg2KTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcnQyODYuaCBiL3NvdW5kL3NvYy9jb2RlY3MvcnQyODYuaAppbmRleCBiNTM5YjczLi43MTMwZWRiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3J0Mjg2LmgKKysrIGIvc291bmQvc29jL2NvZGVjcy9ydDI4Ni5oCkBAIC0xMTcsNiArMTE3LDEyIEBACiAJVkVSQl9DTUQoQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgUlQyODZfVkVORE9SX1JFR0lTVEVSUywgMCkKICNkZWZpbmUgUlQyODZfUFJPQ19DT0VGXAogCVZFUkJfQ01EKEFDX1ZFUkJfU0VUX1BST0NfQ09FRiwgUlQyODZfVkVORE9SX1JFR0lTVEVSUywgMCkKKyNkZWZpbmUgUlQyODZfU0VUX0dQSU9fTUFTS1wKKwlWRVJCX0NNRChBQ19WRVJCX1NFVF9HUElPX01BU0ssIFJUMjg2X0FVRElPX0ZVTkNUSU9OX0dST1VQLCAwKQorI2RlZmluZSBSVDI4Nl9TRVRfR1BJT19ESVJFQ1RJT05cCisJVkVSQl9DTUQoQUNfVkVSQl9TRVRfR1BJT19ESVJFQ1RJT04sIFJUMjg2X0FVRElPX0ZVTkNUSU9OX0dST1VQLCAwKQorI2RlZmluZSBSVDI4Nl9TRVRfR1BJT19EQVRBXAorCVZFUkJfQ01EKEFDX1ZFUkJfU0VUX0dQSU9fREFUQSwgUlQyODZfQVVESU9fRlVOQ1RJT05fR1JPVVAsIDApCiAKIC8qIEluZGV4IHJlZ2lzdGVycyAqLwogI2RlZmluZSBSVDI4Nl9BX0JJQVNfQ1RSTDEJMHgwMQpAQCAtMTMxLDYgKzEzNyw3IEBACiAjZGVmaW5lIFJUMjg2X1BPV0VSX0NUUkwzCTB4MGYKICNkZWZpbmUgUlQyODZfTUlDMV9ERVRfQ1RSTAkweDE5CiAjZGVmaW5lIFJUMjg2X01JU0NfQ1RSTDEJMHgyMAorI2RlZmluZSBSVDI4Nl9HUElPX0NUUkwJCTB4MjkKICNkZWZpbmUgUlQyODZfSVJRX0NUUkwJCTB4MzMKICNkZWZpbmUgUlQyODZfUExMX0NUUkwxCQkweDQ5CiAjZGVmaW5lIFJUMjg2X0NCSl9DVFJMMQkJMHg0ZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9ydDU2MzEuYyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjMxLmMKaW5kZXggNmQ3YjdjYS4uYzYxODUyNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9ydDU2MzEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3J0NTYzMS5jCkBAIC0yODcsNzAgKzI4Nyw3OCBAQAogc3RhdGljIGludCBjaGVja19zeXNjbGsxX3NvdXJjZShzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc291cmNlLAogCQkJIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzaW5rKQogeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyhzb3VyY2UtPmRhcG0pOwogCXVuc2lnbmVkIGludCByZWc7CiAKLQlyZWcgPSBzbmRfc29jX3JlYWQoc291cmNlLT5jb2RlYywgUlQ1NjMxX0dMT0JBTF9DTEtfQ1RSTCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBSVDU2MzFfR0xPQkFMX0NMS19DVFJMKTsKIAlyZXR1cm4gcmVnICYgUlQ1NjMxX1NZU0NMS19TT1VSX1NFTF9QTEw7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfZG1pY191c2VkKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzb3VyY2UsCiAJCQkgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNpbmspCiB7Ci0Jc3RydWN0IHJ0NTYzMV9wcml2ICpydDU2MzEgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKHNvdXJjZS0+Y29kZWMpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyhzb3VyY2UtPmRhcG0pOworCXN0cnVjdCBydDU2MzFfcHJpdiAqcnQ1NjMxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJcmV0dXJuIHJ0NTYzMS0+ZG1pY191c2VkX2ZsYWc7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfZGFjbF90b19vdXRtaXhsKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzb3VyY2UsCiAJCQkgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNpbmspCiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHNvdXJjZS0+ZGFwbSk7CiAJdW5zaWduZWQgaW50IHJlZzsKIAotCXJlZyA9IHNuZF9zb2NfcmVhZChzb3VyY2UtPmNvZGVjLCBSVDU2MzFfT1VUTUlYRVJfTF9DVFJMKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFJUNTYzMV9PVVRNSVhFUl9MX0NUUkwpOwogCXJldHVybiAhKHJlZyAmIFJUNTYzMV9NX0RBQ19MX1RPX09VVE1JWEVSX0wpOwogfQogCiBzdGF0aWMgaW50IGNoZWNrX2RhY3JfdG9fb3V0bWl4cihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc291cmNlLAogCQkJIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzaW5rKQogeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyhzb3VyY2UtPmRhcG0pOwogCXVuc2lnbmVkIGludCByZWc7CiAKLQlyZWcgPSBzbmRfc29jX3JlYWQoc291cmNlLT5jb2RlYywgUlQ1NjMxX09VVE1JWEVSX1JfQ1RSTCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBSVDU2MzFfT1VUTUlYRVJfUl9DVFJMKTsKIAlyZXR1cm4gIShyZWcgJiBSVDU2MzFfTV9EQUNfUl9UT19PVVRNSVhFUl9SKTsKIH0KIAogc3RhdGljIGludCBjaGVja19kYWNsX3RvX3Nwa21peGwoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNvdXJjZSwKIAkJCSBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc2luaykKIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMoc291cmNlLT5kYXBtKTsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCi0JcmVnID0gc25kX3NvY19yZWFkKHNvdXJjZS0+Y29kZWMsIFJUNTYzMV9TUEtfTUlYRVJfQ1RSTCk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBSVDU2MzFfU1BLX01JWEVSX0NUUkwpOwogCXJldHVybiAhKHJlZyAmIFJUNTYzMV9NX0RBQ19MX1RPX1NQS01JWEVSX0wpOwogfQogCiBzdGF0aWMgaW50IGNoZWNrX2RhY3JfdG9fc3BrbWl4cihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc291cmNlLAogCQkJIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzaW5rKQogeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyhzb3VyY2UtPmRhcG0pOwogCXVuc2lnbmVkIGludCByZWc7CiAKLQlyZWcgPSBzbmRfc29jX3JlYWQoc291cmNlLT5jb2RlYywgUlQ1NjMxX1NQS19NSVhFUl9DVFJMKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFJUNTYzMV9TUEtfTUlYRVJfQ1RSTCk7CiAJcmV0dXJuICEocmVnICYgUlQ1NjMxX01fREFDX1JfVE9fU1BLTUlYRVJfUik7CiB9CiAKIHN0YXRpYyBpbnQgY2hlY2tfYWRjbF9zZWxlY3Qoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNvdXJjZSwKIAkJCSBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc2luaykKIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMoc291cmNlLT5kYXBtKTsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCi0JcmVnID0gc25kX3NvY19yZWFkKHNvdXJjZS0+Y29kZWMsIFJUNTYzMV9BRENfUkVDX01JWEVSKTsKKwlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFJUNTYzMV9BRENfUkVDX01JWEVSKTsKIAlyZXR1cm4gIShyZWcgJiBSVDU2MzFfTV9NSUMxX1RPX1JFQ01JWEVSX0wpOwogfQogCiBzdGF0aWMgaW50IGNoZWNrX2FkY3Jfc2VsZWN0KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzb3VyY2UsCiAJCQkgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNpbmspCiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHNvdXJjZS0+ZGFwbSk7CiAJdW5zaWduZWQgaW50IHJlZzsKIAotCXJlZyA9IHNuZF9zb2NfcmVhZChzb3VyY2UtPmNvZGVjLCBSVDU2MzFfQURDX1JFQ19NSVhFUik7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBSVDU2MzFfQURDX1JFQ19NSVhFUik7CiAJcmV0dXJuICEocmVnICYgUlQ1NjMxX01fTUlDMl9UT19SRUNNSVhFUl9SKTsKIH0KIApAQCAtNTU2LDcgKzU2NCw3IEBACiBzdGF0aWMgaW50IGhwX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBydDU2MzFfcHJpdiAqcnQ1NjMxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC01OTAsNyArNTk4LDcgQEAKIHN0YXRpYyBpbnQgc2V0X2RtaWNfcGFyYW1zKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBydDU2MzFfcHJpdiAqcnQ1NjMxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKHJ0NTYzMS0+cnhfcmF0ZSkgewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9ydDU2NDAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjQwLmMKaW5kZXggYzNmMmRlYy4uMTc4ZTU1ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9ydDU2NDAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3J0NTY0MC5jCkBAIC00NTgsNyArNDU4LDcgQEAKIHN0YXRpYyBpbnQgc2V0X2RtaWNfY2xrKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBydDU2NDBfcHJpdiAqcnQ1NjQwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJaW50IGlkeCA9IC1FSU5WQUw7CiAKQEAgLTQ3NSw5ICs0NzUsMTAgQEAKIHN0YXRpYyBpbnQgaXNfc3lzX2Nsa19mcm9tX3BsbChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc291cmNlLAogCQkJIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzaW5rKQogeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyhzb3VyY2UtPmRhcG0pOwogCXVuc2lnbmVkIGludCB2YWw7CiAKLQl2YWwgPSBzbmRfc29jX3JlYWQoc291cmNlLT5jb2RlYywgUlQ1NjQwX0dMQl9DTEspOworCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgUlQ1NjQwX0dMQl9DTEspOwogCXZhbCAmPSBSVDU2NDBfU0NMS19TUkNfTUFTSzsKIAlpZiAodmFsID09IFJUNTY0MF9TQ0xLX1NSQ19QTEwxKQogCQlyZXR1cm4gMTsKQEAgLTk2Myw3ICs5NjQsNyBAQAogc3RhdGljIGludCBydDU2NDBfaHBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlzdHJ1Y3QgcnQ1NjQwX3ByaXYgKnJ0NTY0MCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewpAQCAtOTg3LDcgKzk4OCw3IEBACiBzdGF0aWMgaW50IHJ0NTY0MF9ocF9wb3dlcl9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgpAQCAtMTAwMyw3ICsxMDA0LDcgQEAKIHN0YXRpYyBpbnQgcnQ1NjQwX2hwX3Bvc3RfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlzdHJ1Y3QgcnQ1NjQwX3ByaXYgKnJ0NTY0MCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewpAQCAtMjEyNCw2ICsyMTI1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgcnQ1NjQwX2FjcGlfbWF0Y2hbXSA9IHsKIAl7ICJJTlQzM0NBIiwgMCB9LAogCXsgIjEwRUM1NjQwIiwgMCB9LAorCXsgIjEwRUM1NjQyIiwgMCB9LAogCXsgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIHJ0NTY0MF9hY3BpX21hdGNoKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjQ1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3J0NTY0NS5jCmluZGV4IDI3MTQxZTIuLmM5YTRjNWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjQ1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9ydDU2NDUuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgInJ0NTY0NS5oIgogCiAjZGVmaW5lIFJUNTY0NV9ERVZJQ0VfSUQgMHg2MzA4CisjZGVmaW5lIFJUNTY1MF9ERVZJQ0VfSUQgMHg2NDE5CiAKICNkZWZpbmUgUlQ1NjQ1X1BSX1JBTkdFX0JBU0UgKDB4ZmYgKyAxKQogI2RlZmluZSBSVDU2NDVfUFJfU1BBQ0lORyAweDEwMApAQCAtNTksNiArNjAsMTAgQEAKIH07CiAjZGVmaW5lIFJUNTY0NV9JTklUX1JFR19MRU4gQVJSQVlfU0laRShpbml0X2xpc3QpCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2RlZmF1bHQgcnQ1NjUwX2luaXRfbGlzdFtdID0geworCXsweGY2LAkweDAxMDB9LAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCByZWdfZGVmYXVsdCBydDU2NDVfcmVnW10gPSB7CiAJeyAweDAwLCAweDAwMDAgfSwKIAl7IDB4MDEsIDB4YzhjOCB9LApAQCAtODYsNiArOTEsNyBAQAogCXsgMHgyYSwgMHg1NjU2IH0sCiAJeyAweDJiLCAweDU0NTQgfSwKIAl7IDB4MmMsIDB4YWFhMCB9LAorCXsgMHgyZCwgMHgwMDAwIH0sCiAJeyAweDJmLCAweDEwMDIgfSwKIAl7IDB4MzEsIDB4NTAwMCB9LAogCXsgMHgzMiwgMHgwMDAwIH0sCkBAIC0xOTMsNiArMTk5LDggQEAKIAl7IDB4ZGIsIDB4MDAwMyB9LAogCXsgMHhkYywgMHgwMDQ5IH0sCiAJeyAweGRkLCAweDAwMWIgfSwKKwl7IDB4ZGYsIDB4MDAwOCB9LAorCXsgMHhlMCwgMHg0MDAwIH0sCiAJeyAweGU2LCAweDgwMDAgfSwKIAl7IDB4ZTcsIDB4MDIwMCB9LAogCXsgMHhlYywgMHhiMzAwIH0sCkBAIC0yNDIsNiArMjUwLDcgQEAKIAljYXNlIFJUNTY0NV9JUlFfQ1RSTDM6CiAJY2FzZSBSVDU2NDVfSU5UX0lSUV9TVDoKIAljYXNlIFJUNTY0NV9JTF9DTUQ6CisJY2FzZSBSVDU2NTBfNEJUTl9JTF9DTUQxOgogCWNhc2UgUlQ1NjQ1X1ZFTkRPUl9JRDoKIAljYXNlIFJUNTY0NV9WRU5ET1JfSUQxOgogCWNhc2UgUlQ1NjQ1X1ZFTkRPUl9JRDI6CkBAIC0yODcsNiArMjk2LDcgQEAKIAljYXNlIFJUNTY0NV9TVE9fREFDX01JWEVSOgogCWNhc2UgUlQ1NjQ1X01PTk9fREFDX01JWEVSOgogCWNhc2UgUlQ1NjQ1X0RJR19NSVhFUjoKKwljYXNlIFJUNTY1MF9BX0RBQ19TT1VSOgogCWNhc2UgUlQ1NjQ1X0RJR19JTkYxX0RBVEE6CiAJY2FzZSBSVDU2NDVfUERNX09VVF9DVFJMOgogCWNhc2UgUlQ1NjQ1X1JFQ19MMV9NSVhFUjoKQEAgLTM3OCw2ICszODgsOCBAQAogCWNhc2UgUlQ1NjQ1X0lMX0NNRDoKIAljYXNlIFJUNTY0NV9JTF9DTUQyOgogCWNhc2UgUlQ1NjQ1X0lMX0NNRDM6CisJY2FzZSBSVDU2NTBfNEJUTl9JTF9DTUQxOgorCWNhc2UgUlQ1NjUwXzRCVE5fSUxfQ01EMjoKIAljYXNlIFJUNTY0NV9EUkMxX0hMX0NUUkwxOgogCWNhc2UgUlQ1NjQ1X0RSQzJfSExfQ1RSTDE6CiAJY2FzZSBSVDU2NDVfQURDX01PTk9fSFBfQ1RSTDE6CkBAIC01MjcsNyArNTM5LDcgQEAKIHN0YXRpYyBpbnQgc2V0X2RtaWNfY2xrKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBydDU2NDVfcHJpdiAqcnQ1NjQ1ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJaW50IGlkeCA9IC1FSU5WQUw7CiAKQEAgLTU0NCw5ICs1NTYsMTAgQEAKIHN0YXRpYyBpbnQgaXNfc3lzX2Nsa19mcm9tX3BsbChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc291cmNlLAogCQkJIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzaW5rKQogeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyhzb3VyY2UtPmRhcG0pOwogCXVuc2lnbmVkIGludCB2YWw7CiAKLQl2YWwgPSBzbmRfc29jX3JlYWQoc291cmNlLT5jb2RlYywgUlQ1NjQ1X0dMQl9DTEspOworCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgUlQ1NjQ1X0dMQl9DTEspOwogCXZhbCAmPSBSVDU2NDVfU0NMS19TUkNfTUFTSzsKIAlpZiAodmFsID09IFJUNTY0NV9TQ0xLX1NSQ19QTEwxKQogCQlyZXR1cm4gMTsKQEAgLTU1Nyw2ICs1NzAsNyBAQAogc3RhdGljIGludCBpc191c2luZ19hc3JjKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzb3VyY2UsCiAJCQkgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNpbmspCiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHNvdXJjZS0+ZGFwbSk7CiAJdW5zaWduZWQgaW50IHJlZywgc2hpZnQsIHZhbDsKIAogCXN3aXRjaCAoc291cmNlLT5zaGlmdCkgewpAQCAtNTg4LDcgKzYwMiw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCXZhbCA9IChzbmRfc29jX3JlYWQoc291cmNlLT5jb2RlYywgcmVnKSA+PiBzaGlmdCkgJiAweGY7CisJdmFsID0gKHNuZF9zb2NfcmVhZChjb2RlYywgcmVnKSA+PiBzaGlmdCkgJiAweGY7CiAJc3dpdGNoICh2YWwpIHsKIAljYXNlIDE6CiAJY2FzZSAyOgpAQCAtNjAxLDYgKzYxNSw4NyBAQAogCiB9CiAKKy8qKgorICogcnQ1NjQ1X3NlbF9hc3JjX2Nsa19zcmMgLSBzZWxlY3QgQVNSQyBjbG9jayBzb3VyY2UgZm9yIGEgc2V0IG9mIGZpbHRlcnMKKyAqIEBjb2RlYzogU29DIGF1ZGlvIGNvZGVjIGRldmljZS4KKyAqIEBmaWx0ZXJfbWFzazogbWFzayBvZiBmaWx0ZXJzLgorICogQGNsa19zcmM6IGNsb2NrIHNvdXJjZQorICoKKyAqIFRoZSBBU1JDIGZ1bmN0aW9uIGlzIGZvciBhc3luY2hyb25vdXMgTUNMSyBhbmQgTFJDSy4gQWxzbywgc2luY2UgUlQ1NjQ1IGNhbgorICogb25seSBzdXBwb3J0IHN0YW5kYXJkIDMyZnMgb3IgNjRmcyBpMnMgZm9ybWF0LCBBU1JDIHNob3VsZCBiZSBlbmFibGVkIHRvCisgKiBzdXBwb3J0IHNwZWNpYWwgaTJzIGNsb2NrIGZvcm1hdCBzdWNoIGFzIEludGVsJ3MgMTAwZnMoMTAwICogc2FtcGxpbmcgcmF0ZSkuCisgKiBBU1JDIGZ1bmN0aW9uIHdpbGwgdHJhY2sgaTJzIGNsb2NrIGFuZCBnZW5lcmF0ZSBhIGNvcnJlc3BvbmRpbmcgc3lzdGVtIGNsb2NrCisgKiBmb3IgY29kZWMuIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYW4gQVBJIHRvIHNlbGVjdCB0aGUgY2xvY2sgc291cmNlIGZvciBhCisgKiBzZXQgb2YgZmlsdGVycyBzcGVjaWZpZWQgYnkgdGhlIG1hc2suIEFuZCB0aGUgY29kZWMgZHJpdmVyIHdpbGwgdHVybiBvbiBBU1JDCisgKiBmb3IgdGhlc2UgZmlsdGVycyBpZiBBU1JDIGlzIHNlbGVjdGVkIGFzIHRoZWlyIGNsb2NrIHNvdXJjZS4KKyAqLworaW50IHJ0NTY0NV9zZWxfYXNyY19jbGtfc3JjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywKKwkJdW5zaWduZWQgaW50IGZpbHRlcl9tYXNrLCB1bnNpZ25lZCBpbnQgY2xrX3NyYykKK3sKKwl1bnNpZ25lZCBpbnQgYXNyYzJfbWFzayA9IDA7CisJdW5zaWduZWQgaW50IGFzcmMyX3ZhbHVlID0gMDsKKwl1bnNpZ25lZCBpbnQgYXNyYzNfbWFzayA9IDA7CisJdW5zaWduZWQgaW50IGFzcmMzX3ZhbHVlID0gMDsKKworCXN3aXRjaCAoY2xrX3NyYykgeworCWNhc2UgUlQ1NjQ1X0NMS19TRUxfU1lTOgorCWNhc2UgUlQ1NjQ1X0NMS19TRUxfSTJTMV9BU1JDOgorCWNhc2UgUlQ1NjQ1X0NMS19TRUxfSTJTMl9BU1JDOgorCWNhc2UgUlQ1NjQ1X0NMS19TRUxfU1lTMjoKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZmlsdGVyX21hc2sgJiBSVDU2NDVfREFfU1RFUkVPX0ZJTFRFUikgeworCQlhc3JjMl9tYXNrIHw9IFJUNTY0NV9EQV9TVE9fQ0xLX1NFTF9NQVNLOworCQlhc3JjMl92YWx1ZSA9IChhc3JjMl92YWx1ZSAmIH5SVDU2NDVfREFfU1RPX0NMS19TRUxfTUFTSykKKwkJCXwgKGNsa19zcmMgPDwgUlQ1NjQ1X0RBX1NUT19DTEtfU0VMX1NGVCk7CisJfQorCisJaWYgKGZpbHRlcl9tYXNrICYgUlQ1NjQ1X0RBX01PTk9fTF9GSUxURVIpIHsKKwkJYXNyYzJfbWFzayB8PSBSVDU2NDVfREFfTU9OT0xfQ0xLX1NFTF9NQVNLOworCQlhc3JjMl92YWx1ZSA9IChhc3JjMl92YWx1ZSAmIH5SVDU2NDVfREFfTU9OT0xfQ0xLX1NFTF9NQVNLKQorCQkJfCAoY2xrX3NyYyA8PCBSVDU2NDVfREFfTU9OT0xfQ0xLX1NFTF9TRlQpOworCX0KKworCWlmIChmaWx0ZXJfbWFzayAmIFJUNTY0NV9EQV9NT05PX1JfRklMVEVSKSB7CisJCWFzcmMyX21hc2sgfD0gUlQ1NjQ1X0RBX01PTk9SX0NMS19TRUxfTUFTSzsKKwkJYXNyYzJfdmFsdWUgPSAoYXNyYzJfdmFsdWUgJiB+UlQ1NjQ1X0RBX01PTk9SX0NMS19TRUxfTUFTSykKKwkJCXwgKGNsa19zcmMgPDwgUlQ1NjQ1X0RBX01PTk9SX0NMS19TRUxfU0ZUKTsKKwl9CisKKwlpZiAoZmlsdGVyX21hc2sgJiBSVDU2NDVfQURfU1RFUkVPX0ZJTFRFUikgeworCQlhc3JjMl9tYXNrIHw9IFJUNTY0NV9BRF9TVE8xX0NMS19TRUxfTUFTSzsKKwkJYXNyYzJfdmFsdWUgPSAoYXNyYzJfdmFsdWUgJiB+UlQ1NjQ1X0FEX1NUTzFfQ0xLX1NFTF9NQVNLKQorCQkJfCAoY2xrX3NyYyA8PCBSVDU2NDVfQURfU1RPMV9DTEtfU0VMX1NGVCk7CisJfQorCisJaWYgKGZpbHRlcl9tYXNrICYgUlQ1NjQ1X0FEX01PTk9fTF9GSUxURVIpIHsKKwkJYXNyYzNfbWFzayB8PSBSVDU2NDVfQURfTU9OT0xfQ0xLX1NFTF9NQVNLOworCQlhc3JjM192YWx1ZSA9IChhc3JjM192YWx1ZSAmIH5SVDU2NDVfQURfTU9OT0xfQ0xLX1NFTF9NQVNLKQorCQkJfCAoY2xrX3NyYyA8PCBSVDU2NDVfQURfTU9OT0xfQ0xLX1NFTF9TRlQpOworCX0KKworCWlmIChmaWx0ZXJfbWFzayAmIFJUNTY0NV9BRF9NT05PX1JfRklMVEVSKSAgeworCQlhc3JjM19tYXNrIHw9IFJUNTY0NV9BRF9NT05PUl9DTEtfU0VMX01BU0s7CisJCWFzcmMzX3ZhbHVlID0gKGFzcmMzX3ZhbHVlICYgflJUNTY0NV9BRF9NT05PUl9DTEtfU0VMX01BU0spCisJCQl8IChjbGtfc3JjIDw8IFJUNTY0NV9BRF9NT05PUl9DTEtfU0VMX1NGVCk7CisJfQorCisJaWYgKGFzcmMyX21hc2spCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY0NV9BU1JDXzIsCisJCQlhc3JjMl9tYXNrLCBhc3JjMl92YWx1ZSk7CisKKwlpZiAoYXNyYzNfbWFzaykKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjQ1X0FTUkNfMywKKwkJCWFzcmMzX21hc2ssIGFzcmMzX3ZhbHVlKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwocnQ1NjQ1X3NlbF9hc3JjX2Nsa19zcmMpOworCiAvKiBEaWdpdGFsIE1peGVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjQ1X3N0bzFfYWRjX2xfbWl4W10gPSB7CiAJU09DX0RBUE1fU0lOR0xFKCJBREMxIFN3aXRjaCIsIFJUNTY0NV9TVE8xX0FEQ19NSVhFUiwKQEAgLTEwMDcsNiArMTEwMiw0NCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY0NV9pZjFfYWRjX2luX211eCA9CiAJU09DX0RBUE1fRU5VTSgiSUYxIEFEQyBJTiBzb3VyY2UiLCBydDU2NDVfaWYxX2FkY19pbl9lbnVtKTsKIAorLyogTVgtMmQgWzNdIFsyXSAqLworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBydDU2NTBfYV9kYWMxX3NyY1tdID0geworCSJEQUMxIiwgIlN0ZXJlbyBEQUMgTWl4ZXIiCit9OworCitzdGF0aWMgU09DX0VOVU1fU0lOR0xFX0RFQ0woCisJcnQ1NjUwX2FfZGFjMV9sX2VudW0sIFJUNTY1MF9BX0RBQ19TT1VSLAorCVJUNTY1MF9BX0RBQzFfTF9JTl9TRlQsIHJ0NTY1MF9hX2RhYzFfc3JjKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1MF9hX2RhYzFfbF9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkEgREFDMSBMIHNvdXJjZSIsIHJ0NTY1MF9hX2RhYzFfbF9lbnVtKTsKKworc3RhdGljIFNPQ19FTlVNX1NJTkdMRV9ERUNMKAorCXJ0NTY1MF9hX2RhYzFfcl9lbnVtLCBSVDU2NTBfQV9EQUNfU09VUiwKKwlSVDU2NTBfQV9EQUMxX1JfSU5fU0ZULCBydDU2NTBfYV9kYWMxX3NyYyk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2NTBfYV9kYWMxX3JfbXV4ID0KKwlTT0NfREFQTV9FTlVNKCJBIERBQzEgUiBzb3VyY2UiLCBydDU2NTBfYV9kYWMxX3JfZW51bSk7CisKKy8qIE1YLTJkIFsxXSBbMF0gKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgcnQ1NjUwX2FfZGFjMl9zcmNbXSA9IHsKKwkiU3RlcmVvIERBQyBNaXhlciIsICJNb25vIERBQyBNaXhlciIKK307CisKK3N0YXRpYyBTT0NfRU5VTV9TSU5HTEVfREVDTCgKKwlydDU2NTBfYV9kYWMyX2xfZW51bSwgUlQ1NjUwX0FfREFDX1NPVVIsCisJUlQ1NjUwX0FfREFDMl9MX0lOX1NGVCwgcnQ1NjUwX2FfZGFjMl9zcmMpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgcnQ1NjUwX2FfZGFjMl9sX211eCA9CisJU09DX0RBUE1fRU5VTSgiQSBEQUMyIEwgc291cmNlIiwgcnQ1NjUwX2FfZGFjMl9sX2VudW0pOworCitzdGF0aWMgU09DX0VOVU1fU0lOR0xFX0RFQ0woCisJcnQ1NjUwX2FfZGFjMl9yX2VudW0sIFJUNTY1MF9BX0RBQ19TT1VSLAorCVJUNTY1MF9BX0RBQzJfUl9JTl9TRlQsIHJ0NTY1MF9hX2RhYzJfc3JjKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY1MF9hX2RhYzJfcl9tdXggPQorCVNPQ19EQVBNX0VOVU0oIkEgREFDMiBSIHNvdXJjZSIsIHJ0NTY1MF9hX2RhYzJfcl9lbnVtKTsKKwogLyogTVgtMkYgWzEzOjEyXSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBydDU2NDVfaWYyX2FkY19pbl9zcmNbXSA9IHsKIAkiSUZfQURDMSIsICJJRl9BREMyIiwgIlZBRF9BREMiCkBAIC0xMTQ0LDE4ICsxMjc3LDIzIEBACiBzdGF0aWMgaW50IHJ0NTY0NV9ocF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlzdHJ1Y3QgcnQ1NjQ1X3ByaXYgKnJ0NTY0NSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgogCQlocF9hbXBfcG93ZXIoY29kZWMsIDEpOwogCQkvKiBoZWFkcGhvbmUgdW5tdXRlIHNlcXVlbmNlICovCi0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY0NV9ERVBPUF9NMywgUlQ1NjQ1X0NQX0ZRMV9NQVNLIHwKLQkJCVJUNTY0NV9DUF9GUTJfTUFTSyB8IFJUNTY0NV9DUF9GUTNfTUFTSywKLQkJCShSVDU2NDVfQ1BfRlFfMTkyX0tIWiA8PCBSVDU2NDVfQ1BfRlExX1NGVCkgfAotCQkJKFJUNTY0NV9DUF9GUV8xMl9LSFogPDwgUlQ1NjQ1X0NQX0ZRMl9TRlQpIHwKLQkJCShSVDU2NDVfQ1BfRlFfMTkyX0tIWiA8PCBSVDU2NDVfQ1BfRlEzX1NGVCkpOworCQlpZiAocnQ1NjQ1LT5jb2RlY190eXBlID09IENPREVDX1RZUEVfUlQ1NjUwKSB7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBSVDU2NDVfREVQT1BfTTMsIDB4MDczNyk7CisJCX0gZWxzZSB7CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NDVfREVQT1BfTTMsCisJCQkJUlQ1NjQ1X0NQX0ZRMV9NQVNLIHwgUlQ1NjQ1X0NQX0ZRMl9NQVNLIHwKKwkJCQlSVDU2NDVfQ1BfRlEzX01BU0ssCisJCQkJKFJUNTY0NV9DUF9GUV8xOTJfS0haIDw8IFJUNTY0NV9DUF9GUTFfU0ZUKSB8CisJCQkJKFJUNTY0NV9DUF9GUV8xMl9LSFogPDwgUlQ1NjQ1X0NQX0ZRMl9TRlQpIHwKKwkJCQkoUlQ1NjQ1X0NQX0ZRXzE5Ml9LSFogPDwgUlQ1NjQ1X0NQX0ZRM19TRlQpKTsKKwkJfQogCQlyZWdtYXBfd3JpdGUocnQ1NjQ1LT5yZWdtYXAsCiAJCQlSVDU2NDVfUFJfQkFTRSArIFJUNTY0NV9NQU1QX0lOVF9SRUcyLCAweGZjMDApOwogCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NDVfREVQT1BfTTEsCkBAIC0xMTc1LDEyICsxMzEzLDE2IEBACiAKIAljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgogCQkvKiBoZWFkcGhvbmUgbXV0ZSBzZXF1ZW5jZSAqLwotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NDVfREVQT1BfTTMsCi0JCQlSVDU2NDVfQ1BfRlExX01BU0sgfCBSVDU2NDVfQ1BfRlEyX01BU0sgfAotCQkJUlQ1NjQ1X0NQX0ZRM19NQVNLLAotCQkJKFJUNTY0NV9DUF9GUV85Nl9LSFogPDwgUlQ1NjQ1X0NQX0ZRMV9TRlQpIHwKLQkJCShSVDU2NDVfQ1BfRlFfMTJfS0haIDw8IFJUNTY0NV9DUF9GUTJfU0ZUKSB8Ci0JCQkoUlQ1NjQ1X0NQX0ZRXzk2X0tIWiA8PCBSVDU2NDVfQ1BfRlEzX1NGVCkpOworCQlpZiAocnQ1NjQ1LT5jb2RlY190eXBlID09IENPREVDX1RZUEVfUlQ1NjUwKSB7CisJCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBSVDU2NDVfREVQT1BfTTMsIDB4MDczNyk7CisJCX0gZWxzZSB7CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBSVDU2NDVfREVQT1BfTTMsCisJCQkJUlQ1NjQ1X0NQX0ZRMV9NQVNLIHwgUlQ1NjQ1X0NQX0ZRMl9NQVNLIHwKKwkJCQlSVDU2NDVfQ1BfRlEzX01BU0ssCisJCQkJKFJUNTY0NV9DUF9GUV85Nl9LSFogPDwgUlQ1NjQ1X0NQX0ZRMV9TRlQpIHwKKwkJCQkoUlQ1NjQ1X0NQX0ZRXzEyX0tIWiA8PCBSVDU2NDVfQ1BfRlEyX1NGVCkgfAorCQkJCShSVDU2NDVfQ1BfRlFfOTZfS0haIDw8IFJUNTY0NV9DUF9GUTNfU0ZUKSk7CisJCX0KIAkJcmVnbWFwX3dyaXRlKHJ0NTY0NS0+cmVnbWFwLAogCQkJUlQ1NjQ1X1BSX0JBU0UgKyBSVDU2NDVfTUFNUF9JTlRfUkVHMiwgMHhmYzAwKTsKIAkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjQ1X0RFUE9QX00xLApAQCAtMTIwNSw3ICsxMzQ3LDcgQEAKIHN0YXRpYyBpbnQgcnQ1NjQ1X3Nwa19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKQEAgLTEyMzIsNyArMTM3NCw3IEBACiBzdGF0aWMgaW50IHJ0NTY0NV9sb3V0X2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgpAQCAtMTI2Miw3ICsxNDA0LDcgQEAKIHN0YXRpYyBpbnQgcnQ1NjQ1X2JzdDJfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CkBAIC0xNTc0LDYgKzE3MTYsMTcgQEAKIAlTTkRfU09DX0RBUE1fT1VUUFVUKCJTUE9SIiksCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgcnQ1NjUwX3NwZWNpZmljX2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9NVVgoIkEgREFDMSBMIE11eCIsIFNORF9TT0NfTk9QTSwKKwkJMCwgMCwgJnJ0NTY1MF9hX2RhYzFfbF9tdXgpLAorCVNORF9TT0NfREFQTV9NVVgoIkEgREFDMSBSIE11eCIsIFNORF9TT0NfTk9QTSwKKwkJMCwgMCwgJnJ0NTY1MF9hX2RhYzFfcl9tdXgpLAorCVNORF9TT0NfREFQTV9NVVgoIkEgREFDMiBMIE11eCIsIFNORF9TT0NfTk9QTSwKKwkJMCwgMCwgJnJ0NTY1MF9hX2RhYzJfbF9tdXgpLAorCVNORF9TT0NfREFQTV9NVVgoIkEgREFDMiBSIE11eCIsIFNORF9TT0NfTk9QTSwKKwkJMCwgMCwgJnJ0NTY1MF9hX2RhYzJfcl9tdXgpLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgcnQ1NjQ1X2RhcG1fcm91dGVzW10gPSB7CiAJeyAiYWRjIHN0ZXJlbzEgZmlsdGVyIiwgTlVMTCwgIkFEQyBTVE8xIEFTUkMiLCBpc191c2luZ19hc3JjIH0sCiAJeyAiYWRjIHN0ZXJlbzIgZmlsdGVyIiwgTlVMTCwgIkFEQyBTVE8yIEFTUkMiLCBpc191c2luZ19hc3JjIH0sCkBAIC0xNzc5LDEzICsxOTMyLDkgQEAKIAl7ICJEQUMgTUlYUiIsICJEQUMgUjIgU3dpdGNoIiwgIkRBQyBSMiBWb2x1bWUiIH0sCiAJeyAiREFDIE1JWFIiLCAiREFDIEwyIFN3aXRjaCIsICJEQUMgTDIgVm9sdW1lIiB9LAogCi0JeyAiREFDIEwxIiwgTlVMTCwgIlN0ZXJlbyBEQUMgTUlYTCIgfSwKIAl7ICJEQUMgTDEiLCBOVUxMLCAiUExMMSIsIGlzX3N5c19jbGtfZnJvbV9wbGwgfSwKLQl7ICJEQUMgUjEiLCBOVUxMLCAiU3RlcmVvIERBQyBNSVhSIiB9LAogCXsgIkRBQyBSMSIsIE5VTEwsICJQTEwxIiwgaXNfc3lzX2Nsa19mcm9tX3BsbCB9LAotCXsgIkRBQyBMMiIsIE5VTEwsICJNb25vIERBQyBNSVhMIiB9LAogCXsgIkRBQyBMMiIsIE5VTEwsICJQTEwxIiwgaXNfc3lzX2Nsa19mcm9tX3BsbCB9LAotCXsgIkRBQyBSMiIsIE5VTEwsICJNb25vIERBQyBNSVhSIiB9LAogCXsgIkRBQyBSMiIsIE5VTEwsICJQTEwxIiwgaXNfc3lzX2Nsa19mcm9tX3BsbCB9LAogCiAJeyAiU1BLIE1JWEwiLCAiQlNUMSBTd2l0Y2giLCAiQlNUMSIgfSwKQEAgLTE4NzQsNiArMjAyMywzMCBAQAogCXsgIlNQT1IiLCBOVUxMLCAiU1BLIGFtcCIgfSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHJ0NTY1MF9zcGVjaWZpY19kYXBtX3JvdXRlc1tdID0geworCXsgIkEgREFDMSBMIE11eCIsICJEQUMxIiwgICJEQUMxIE1JWEwifSwKKwl7ICJBIERBQzEgTCBNdXgiLCAiU3RlcmVvIERBQyBNaXhlciIsICJTdGVyZW8gREFDIE1JWEwifSwKKwl7ICJBIERBQzEgUiBNdXgiLCAiREFDMSIsICAiREFDMSBNSVhSIn0sCisJeyAiQSBEQUMxIFIgTXV4IiwgIlN0ZXJlbyBEQUMgTWl4ZXIiLCAiU3RlcmVvIERBQyBNSVhSIn0sCisKKwl7ICJBIERBQzIgTCBNdXgiLCAiU3RlcmVvIERBQyBNaXhlciIsICJTdGVyZW8gREFDIE1JWEwifSwKKwl7ICJBIERBQzIgTCBNdXgiLCAiTW9ubyBEQUMgTWl4ZXIiLCAiTW9ubyBEQUMgTUlYTCJ9LAorCXsgIkEgREFDMiBSIE11eCIsICJTdGVyZW8gREFDIE1peGVyIiwgIlN0ZXJlbyBEQUMgTUlYUiJ9LAorCXsgIkEgREFDMiBSIE11eCIsICJNb25vIERBQyBNaXhlciIsICJNb25vIERBQyBNSVhSIn0sCisKKwl7ICJEQUMgTDEiLCBOVUxMLCAiQSBEQUMxIEwgTXV4IiB9LAorCXsgIkRBQyBSMSIsIE5VTEwsICJBIERBQzEgUiBNdXgiIH0sCisJeyAiREFDIEwyIiwgTlVMTCwgIkEgREFDMiBMIE11eCIgfSwKKwl7ICJEQUMgUjIiLCBOVUxMLCAiQSBEQUMyIFIgTXV4IiB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgcnQ1NjQ1X3NwZWNpZmljX2RhcG1fcm91dGVzW10gPSB7CisJeyAiREFDIEwxIiwgTlVMTCwgIlN0ZXJlbyBEQUMgTUlYTCIgfSwKKwl7ICJEQUMgUjEiLCBOVUxMLCAiU3RlcmVvIERBQyBNSVhSIiB9LAorCXsgIkRBQyBMMiIsIE5VTEwsICJNb25vIERBQyBNSVhMIiB9LAorCXsgIkRBQyBSMiIsIE5VTEwsICJNb25vIERBQyBNSVhSIiB9LAorfTsKKwogc3RhdGljIGludCBydDU2NDVfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAogCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zLCBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKIHsKQEAgLTIyOTMsNiArMjQ2NiwyMiBAQAogCiAJcnQ1NjQ1LT5jb2RlYyA9IGNvZGVjOwogCisJc3dpdGNoIChydDU2NDUtPmNvZGVjX3R5cGUpIHsKKwljYXNlIENPREVDX1RZUEVfUlQ1NjQ1OgorCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcygmY29kZWMtPmRhcG0sCisJCQlydDU2NDVfc3BlY2lmaWNfZGFwbV9yb3V0ZXMsCisJCQlBUlJBWV9TSVpFKHJ0NTY0NV9zcGVjaWZpY19kYXBtX3JvdXRlcykpOworCQlicmVhazsKKwljYXNlIENPREVDX1RZUEVfUlQ1NjUwOgorCQlzbmRfc29jX2RhcG1fbmV3X2NvbnRyb2xzKCZjb2RlYy0+ZGFwbSwKKwkJCXJ0NTY1MF9zcGVjaWZpY19kYXBtX3dpZGdldHMsCisJCQlBUlJBWV9TSVpFKHJ0NTY1MF9zcGVjaWZpY19kYXBtX3dpZGdldHMpKTsKKwkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoJmNvZGVjLT5kYXBtLAorCQkJcnQ1NjUwX3NwZWNpZmljX2RhcG1fcm91dGVzLAorCQkJQVJSQVlfU0laRShydDU2NTBfc3BlY2lmaWNfZGFwbV9yb3V0ZXMpKTsKKwkJYnJlYWs7CisJfQorCiAJcnQ1NjQ1X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfT0ZGKTsKIAogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY0NV9DSEFSR0VfUFVNUCwgMHgwMzAwLCAweDAyMDApOwpAQCAtMjQyNCw2ICsyNjEzLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHJ0NTY0NV9pMmNfaWRbXSA9IHsKIAl7ICJydDU2NDUiLCAwIH0sCisJeyAicnQ1NjUwIiwgMCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBydDU2NDVfaTJjX2lkKTsKQEAgLTI0NTYsOSArMjY0NiwxOCBAQAogCX0KIAogCXJlZ21hcF9yZWFkKHJ0NTY0NS0+cmVnbWFwLCBSVDU2NDVfVkVORE9SX0lEMiwgJnZhbCk7Ci0JaWYgKHZhbCAhPSBSVDU2NDVfREVWSUNFX0lEKSB7CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgUlQ1NjQ1X0RFVklDRV9JRDoKKwkJcnQ1NjQ1LT5jb2RlY190eXBlID0gQ09ERUNfVFlQRV9SVDU2NDU7CisJCWJyZWFrOworCWNhc2UgUlQ1NjUwX0RFVklDRV9JRDoKKwkJcnQ1NjQ1LT5jb2RlY190eXBlID0gQ09ERUNfVFlQRV9SVDU2NTA7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCWRldl9lcnIoJmkyYy0+ZGV2LAotCQkJIkRldmljZSB3aXRoIElEIHJlZ2lzdGVyICV4IGlzIG5vdCBydDU2NDVcbiIsIHZhbCk7CisJCQkiRGV2aWNlIHdpdGggSUQgcmVnaXN0ZXIgJXggaXMgbm90IHJ0NTY0NSBvciBydDU2NTBcbiIsCisJCQl2YWwpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTI0NjksNiArMjY2OCwxNCBAQAogCWlmIChyZXQgIT0gMCkKIAkJZGV2X3dhcm4oJmkyYy0+ZGV2LCAiRmFpbGVkIHRvIGFwcGx5IHJlZ21hcCBwYXRjaDogJWRcbiIsIHJldCk7CiAKKwlpZiAocnQ1NjQ1LT5jb2RlY190eXBlID09IENPREVDX1RZUEVfUlQ1NjUwKSB7CisJCXJldCA9IHJlZ21hcF9yZWdpc3Rlcl9wYXRjaChydDU2NDUtPnJlZ21hcCwgcnQ1NjUwX2luaXRfbGlzdCwKKwkJCQkgICAgQVJSQVlfU0laRShydDU2NTBfaW5pdF9saXN0KSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWRldl93YXJuKCZpMmMtPmRldiwgIkFwcGx5IHJ0NTY1MCBwYXRjaCBmYWlsZWQ6ICVkXG4iLAorCQkJCQkgICByZXQpOworCX0KKwogCWlmIChydDU2NDUtPnBkYXRhLmluMl9kaWZmKQogCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjQ1LT5yZWdtYXAsIFJUNTY0NV9JTjJfQ1RSTCwKIAkJCQkJUlQ1NjQ1X0lOX0RGMiwgUlQ1NjQ1X0lOX0RGMik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3J0NTY0NS5oIGIvc291bmQvc29jL2NvZGVjcy9ydDU2NDUuaAppbmRleCBhODE1ZTM2Li5kYmZkOThjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3J0NTY0NS5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjQ1LmgKQEAgLTQ3LDYgKzQ3LDcgQEAKICNkZWZpbmUgUlQ1NjQ1X1NUT19EQUNfTUlYRVIJCQkweDJhCiAjZGVmaW5lIFJUNTY0NV9NT05PX0RBQ19NSVhFUgkJCTB4MmIKICNkZWZpbmUgUlQ1NjQ1X0RJR19NSVhFUgkJCTB4MmMKKyNkZWZpbmUgUlQ1NjUwX0FfREFDX1NPVVIJCQkweDJkCiAjZGVmaW5lIFJUNTY0NV9ESUdfSU5GMV9EQVRBCQkJMHgyZgogLyogTWl4ZXIgLSBQRE0gKi8KICNkZWZpbmUgUlQ1NjQ1X1BETV9PVVRfQ1RSTAkJCTB4MzEKQEAgLTE1MCw2ICsxNTEsOCBAQAogI2RlZmluZSBSVDU2NDVfSUxfQ01ECQkJCTB4ZGIKICNkZWZpbmUgUlQ1NjQ1X0lMX0NNRDIJCQkJMHhkYwogI2RlZmluZSBSVDU2NDVfSUxfQ01EMwkJCQkweGRkCisjZGVmaW5lIFJUNTY1MF80QlROX0lMX0NNRDEJCQkweGRmCisjZGVmaW5lIFJUNTY1MF80QlROX0lMX0NNRDIJCQkweGUwCiAjZGVmaW5lIFJUNTY0NV9EUkMxX0hMX0NUUkwxCQkJMHhlNwogI2RlZmluZSBSVDU2NDVfRFJDMl9ITF9DVFJMMQkJCTB4ZTkKICNkZWZpbmUgUlQ1NjQ1X01VVElfRFJDX0NUUkwxCQkJMHhlYQpAQCAtNDcyLDYgKzQ3NSwxMiBAQAogI2RlZmluZSBSVDU2NDVfREFDX0wyX0RBQ19SX1ZPTF9NQVNLCQkoMHgxIDw8IDQpCiAjZGVmaW5lIFJUNTY0NV9EQUNfTDJfREFDX1JfVk9MX1NGVAkJNAogCisvKiBBbmFsb2cgREFDMS8yIElucHV0IFNvdXJjZSBDb250cm9sICgweDJkKSAqLworI2RlZmluZSBSVDU2NTBfQV9EQUMxX0xfSU5fU0ZUCQkJMworI2RlZmluZSBSVDU2NTBfQV9EQUMxX1JfSU5fU0ZUCQkJMgorI2RlZmluZSBSVDU2NTBfQV9EQUMyX0xfSU5fU0ZUCQkJMQorI2RlZmluZSBSVDU2NTBfQV9EQUMyX1JfSU5fU0ZUCQkJMAorCiAvKiBEaWdpdGFsIEludGVyZmFjZSBEYXRhIENvbnRyb2wgKDB4MmYpICovCiAjZGVmaW5lIFJUNTY0NV9JRjFfQURDMl9JTl9TRUwJCQkoMHgxIDw8IDE1KQogI2RlZmluZSBSVDU2NDVfSUYxX0FEQzJfSU5fU0ZUCQkJMTUKQEAgLTExMTEsNTAgKzExMjAsMjcgQEAKICNkZWZpbmUgUlQ1NjQ1X0RNSUNfMl9NX05PUgkJCSgweDAgPDwgOCkKICNkZWZpbmUgUlQ1NjQ1X0RNSUNfMl9NX0FTWU4JCQkoMHgxIDw8IDgpCiAKKy8qIEFTUkMgY2xvY2sgc291cmNlIHNlbGVjdGlvbiAoMHg4NCwgMHg4NSkgKi8KKyNkZWZpbmUgUlQ1NjQ1X0NMS19TRUxfU1lTCQkJKDB4MCkKKyNkZWZpbmUgUlQ1NjQ1X0NMS19TRUxfSTJTMV9BU1JDCQkoMHgxKQorI2RlZmluZSBSVDU2NDVfQ0xLX1NFTF9JMlMyX0FTUkMJCSgweDIpCisjZGVmaW5lIFJUNTY0NV9DTEtfU0VMX1NZUzIJCQkoMHg1KQorCiAvKiBBU1JDIENvbnRyb2wgMiAoMHg4NCkgKi8KLSNkZWZpbmUgUlQ1NjQ1X01EQV9MX01fTUFTSwkJCSgweDEgPDwgMTUpCi0jZGVmaW5lIFJUNTY0NV9NREFfTF9NX1NGVAkJCTE1Ci0jZGVmaW5lIFJUNTY0NV9NREFfTF9NX05PUgkJCSgweDAgPDwgMTUpCi0jZGVmaW5lIFJUNTY0NV9NREFfTF9NX0FTWU4JCQkoMHgxIDw8IDE1KQotI2RlZmluZSBSVDU2NDVfTURBX1JfTV9NQVNLCQkJKDB4MSA8PCAxNCkKLSNkZWZpbmUgUlQ1NjQ1X01EQV9SX01fU0ZUCQkJMTQKLSNkZWZpbmUgUlQ1NjQ1X01EQV9SX01fTk9SCQkJKDB4MCA8PCAxNCkKLSNkZWZpbmUgUlQ1NjQ1X01EQV9SX01fQVNZTgkJCSgweDEgPDwgMTQpCi0jZGVmaW5lIFJUNTY0NV9NQURfTF9NX01BU0sJCQkoMHgxIDw8IDEzKQotI2RlZmluZSBSVDU2NDVfTUFEX0xfTV9TRlQJCQkxMwotI2RlZmluZSBSVDU2NDVfTUFEX0xfTV9OT1IJCQkoMHgwIDw8IDEzKQotI2RlZmluZSBSVDU2NDVfTUFEX0xfTV9BU1lOCQkJKDB4MSA8PCAxMykKLSNkZWZpbmUgUlQ1NjQ1X01BRF9SX01fTUFTSwkJCSgweDEgPDwgMTIpCi0jZGVmaW5lIFJUNTY0NV9NQURfUl9NX1NGVAkJCTEyCi0jZGVmaW5lIFJUNTY0NV9NQURfUl9NX05PUgkJCSgweDAgPDwgMTIpCi0jZGVmaW5lIFJUNTY0NV9NQURfUl9NX0FTWU4JCQkoMHgxIDw8IDEyKQotI2RlZmluZSBSVDU2NDVfQURDX01fTUFTSwkJCSgweDEgPDwgMTEpCi0jZGVmaW5lIFJUNTY0NV9BRENfTV9TRlQJCQkxMQotI2RlZmluZSBSVDU2NDVfQURDX01fTk9SCQkJKDB4MCA8PCAxMSkKLSNkZWZpbmUgUlQ1NjQ1X0FEQ19NX0FTWU4JCQkoMHgxIDw8IDExKQotI2RlZmluZSBSVDU2NDVfU1RPX0RBQ19NX01BU0sJCQkoMHgxIDw8IDUpCi0jZGVmaW5lIFJUNTY0NV9TVE9fREFDX01fU0ZUCQkJNQotI2RlZmluZSBSVDU2NDVfU1RPX0RBQ19NX05PUgkJCSgweDAgPDwgNSkKLSNkZWZpbmUgUlQ1NjQ1X1NUT19EQUNfTV9BU1lOCQkJKDB4MSA8PCA1KQotI2RlZmluZSBSVDU2NDVfSTJTMV9SX0RfTUFTSwkJCSgweDEgPDwgNCkKLSNkZWZpbmUgUlQ1NjQ1X0kyUzFfUl9EX1NGVAkJCTQKLSNkZWZpbmUgUlQ1NjQ1X0kyUzFfUl9EX0RJUwkJCSgweDAgPDwgNCkKLSNkZWZpbmUgUlQ1NjQ1X0kyUzFfUl9EX0VOCQkJKDB4MSA8PCA0KQotI2RlZmluZSBSVDU2NDVfSTJTMl9SX0RfTUFTSwkJCSgweDEgPDwgMykKLSNkZWZpbmUgUlQ1NjQ1X0kyUzJfUl9EX1NGVAkJCTMKLSNkZWZpbmUgUlQ1NjQ1X0kyUzJfUl9EX0RJUwkJCSgweDAgPDwgMykKLSNkZWZpbmUgUlQ1NjQ1X0kyUzJfUl9EX0VOCQkJKDB4MSA8PCAzKQotI2RlZmluZSBSVDU2NDVfUFJFX1NDTEtfTUFTSwkJCSgweDMpCi0jZGVmaW5lIFJUNTY0NV9QUkVfU0NMS19TRlQJCQkwCi0jZGVmaW5lIFJUNTY0NV9QUkVfU0NMS181MTIJCQkoMHgwKQotI2RlZmluZSBSVDU2NDVfUFJFX1NDTEtfMTAyNAkJCSgweDEpCi0jZGVmaW5lIFJUNTY0NV9QUkVfU0NMS18yMDQ4CQkJKDB4MikKKyNkZWZpbmUgUlQ1NjQ1X0RBX1NUT19DTEtfU0VMX01BU0sJCSgweGYgPDwgMTIpCisjZGVmaW5lIFJUNTY0NV9EQV9TVE9fQ0xLX1NFTF9TRlQJCTEyCisjZGVmaW5lIFJUNTY0NV9EQV9NT05PTF9DTEtfU0VMX01BU0sJCSgweGYgPDwgOCkKKyNkZWZpbmUgUlQ1NjQ1X0RBX01PTk9MX0NMS19TRUxfU0ZUCQk4CisjZGVmaW5lIFJUNTY0NV9EQV9NT05PUl9DTEtfU0VMX01BU0sJCSgweGYgPDwgNCkKKyNkZWZpbmUgUlQ1NjQ1X0RBX01PTk9SX0NMS19TRUxfU0ZUCQk0CisjZGVmaW5lIFJUNTY0NV9BRF9TVE8xX0NMS19TRUxfTUFTSwkJKDB4ZiA8PCAwKQorI2RlZmluZSBSVDU2NDVfQURfU1RPMV9DTEtfU0VMX1NGVAkJMAogCiAvKiBBU1JDIENvbnRyb2wgMyAoMHg4NSkgKi8KLSNkZWZpbmUgUlQ1NjQ1X0kyUzFfUkFURV9NQVNLCQkJKDB4ZiA8PCAxMikKLSNkZWZpbmUgUlQ1NjQ1X0kyUzFfUkFURV9TRlQJCQkxMgotI2RlZmluZSBSVDU2NDVfSTJTMl9SQVRFX01BU0sJCQkoMHhmIDw8IDgpCi0jZGVmaW5lIFJUNTY0NV9JMlMyX1JBVEVfU0ZUCQkJOAorI2RlZmluZSBSVDU2NDVfQURfTU9OT0xfQ0xLX1NFTF9NQVNLCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJUNTY0NV9BRF9NT05PTF9DTEtfU0VMX1NGVAkJNAorI2RlZmluZSBSVDU2NDVfQURfTU9OT1JfQ0xLX1NFTF9NQVNLCQkoMHhmIDw8IDApCisjZGVmaW5lIFJUNTY0NV9BRF9NT05PUl9DTEtfU0VMX1NGVAkJMAogCiAvKiBBU1JDIENvbnRyb2wgNCAoMHg4OSkgKi8KICNkZWZpbmUgUlQ1NjQ1X0kyUzFfUERfTUFTSwkJCSgweDcgPDwgMTIpCkBAIC0yMTc1LDYgKzIxNjEsMjQgQEAKIAlSVDU2NDVfRE1JQ19EQVRBX0dQSU8xMSwKIH07CiAKK2VudW0geworCUNPREVDX1RZUEVfUlQ1NjQ1LAorCUNPREVDX1RZUEVfUlQ1NjUwLAorfTsKKworLyogZmlsdGVyIG1hc2sgKi8KK2VudW0geworCVJUNTY0NV9EQV9TVEVSRU9fRklMVEVSID0gMHgxLAorCVJUNTY0NV9EQV9NT05PX0xfRklMVEVSID0gKDB4MSA8PCAxKSwKKwlSVDU2NDVfREFfTU9OT19SX0ZJTFRFUiA9ICgweDEgPDwgMiksCisJUlQ1NjQ1X0FEX1NURVJFT19GSUxURVIgPSAoMHgxIDw8IDMpLAorCVJUNTY0NV9BRF9NT05PX0xfRklMVEVSID0gKDB4MSA8PCA0KSwKKwlSVDU2NDVfQURfTU9OT19SX0ZJTFRFUiA9ICgweDEgPDwgNSksCit9OworCitpbnQgcnQ1NjQ1X3NlbF9hc3JjX2Nsa19zcmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQl1bnNpZ25lZCBpbnQgZmlsdGVyX21hc2ssIHVuc2lnbmVkIGludCBjbGtfc3JjKTsKKwogc3RydWN0IHJ0NTY0NV9wcml2IHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CiAJc3RydWN0IHJ0NTY0NV9wbGF0Zm9ybV9kYXRhIHBkYXRhOwpAQCAtMjE4NCw2ICsyMTg4LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19qYWNrICptaWNfamFjazsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGphY2tfZGV0ZWN0X3dvcms7CiAKKwlpbnQgY29kZWNfdHlwZTsKIAlpbnQgc3lzY2xrOwogCWludCBzeXNjbGtfc3JjOwogCWludCBscmNrW1JUNTY0NV9BSUZTXTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjUxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3J0NTY1MS5jCmluZGV4IGJiMGEzYWIuLjlmNGM3YmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjUxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9ydDU2NTEuYwpAQCAtMzc2LDcgKzM3Niw3IEBACiBzdGF0aWMgaW50IHNldF9kbWljX2NsayhzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlzdHJ1Y3QgcnQ1NjUxX3ByaXYgKnJ0NTY1MSA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCWludCBpZHggPSAtRUlOVkFMOwogCkBAIC0zOTQsOSArMzk0LDEwIEBACiBzdGF0aWMgaW50IGlzX3N5c2Nsa19mcm9tX3BsbChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc291cmNlLAogCQkJIHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzaW5rKQogeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyhzb3VyY2UtPmRhcG0pOwogCXVuc2lnbmVkIGludCB2YWw7CiAKLQl2YWwgPSBzbmRfc29jX3JlYWQoc291cmNlLT5jb2RlYywgUlQ1NjUxX0dMQl9DTEspOworCXZhbCA9IHNuZF9zb2NfcmVhZChjb2RlYywgUlQ1NjUxX0dMQl9DTEspOwogCXZhbCAmPSBSVDU2NTFfU0NMS19TUkNfTUFTSzsKIAlpZiAodmFsID09IFJUNTY1MV9TQ0xLX1NSQ19QTEwxKQogCQlyZXR1cm4gMTsKQEAgLTczMSw3ICs3MzIsNyBAQAogc3RhdGljIGludCBydDU2NTFfYW1wX3Bvd2VyX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBydDU2NTFfcHJpdiAqcnQ1NjUxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC03NjksNyArNzcwLDcgQEAKIHN0YXRpYyBpbnQgcnQ1NjUxX2hwX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBydDU2NTFfcHJpdiAqcnQ1NjUxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC04MTMsNyArODE0LDggQEAKIHN0YXRpYyBpbnQgcnQ1NjUxX2hwX3Bvc3RfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBydDU2NTFfcHJpdiAqcnQ1NjUxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC04MzMsNyArODM1LDcgQEAKIHN0YXRpYyBpbnQgcnQ1NjUxX2JzdDFfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CkBAIC04NTYsNyArODU4LDcgQEAKIHN0YXRpYyBpbnQgcnQ1NjUxX2JzdDJfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CkBAIC04NzksNyArODgxLDcgQEAKIHN0YXRpYyBpbnQgcnQ1NjUxX2JzdDNfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3J0NTY3MC5jIGIvc291bmQvc29jL2NvZGVjcy9ydDU2NzAuYwppbmRleCA4YTA4MzNkLi5lMWE0YTQ1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3J0NTY3MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjcwLmMKQEAgLTE0LDEwICsxNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KQEAgLTQ5OCw3ICs1MDAsNyBAQAogc3RhdGljIGludCBzZXRfZG1pY19jbGsoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJc3RydWN0IHJ0NTY3MF9wcml2ICpydDU2NzAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlpbnQgaWR4ID0gLUVJTlZBTDsKIApAQCAtNTE1LDkgKzUxNywxMCBAQAogc3RhdGljIGludCBpc19zeXNfY2xrX2Zyb21fcGxsKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzb3VyY2UsCiAJCQkgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNpbmspCiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHNvdXJjZS0+ZGFwbSk7CiAJdW5zaWduZWQgaW50IHZhbDsKIAotCXZhbCA9IHNuZF9zb2NfcmVhZChzb3VyY2UtPmNvZGVjLCBSVDU2NzBfR0xCX0NMSyk7CisJdmFsID0gc25kX3NvY19yZWFkKGNvZGVjLCBSVDU2NzBfR0xCX0NMSyk7CiAJdmFsICY9IFJUNTY3MF9TQ0xLX1NSQ19NQVNLOwogCWlmICh2YWwgPT0gUlQ1NjcwX1NDTEtfU1JDX1BMTDEpCiAJCXJldHVybiAxOwpAQCAtNTI4LDYgKzUzMSw3IEBACiBzdGF0aWMgaW50IGlzX3VzaW5nX2FzcmMoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNvdXJjZSwKIAkJCSBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc2luaykKIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMoc291cmNlLT5kYXBtKTsKIAl1bnNpZ25lZCBpbnQgcmVnLCBzaGlmdCwgdmFsOwogCiAJc3dpdGNoIChzb3VyY2UtPnNoaWZ0KSB7CkBAIC01NjMsNyArNTY3LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JdmFsID0gKHNuZF9zb2NfcmVhZChzb3VyY2UtPmNvZGVjLCByZWcpID4+IHNoaWZ0KSAmIDB4ZjsKKwl2YWwgPSAoc25kX3NvY19yZWFkKGNvZGVjLCByZWcpID4+IHNoaWZ0KSAmIDB4ZjsKIAlzd2l0Y2ggKHZhbCkgewogCWNhc2UgMToKIAljYXNlIDI6CkBAIC01ODgsNiArNTkyLDg5IEBACiAJcmV0dXJuIDA7CiB9CiAKKworLyoqCisgKiBydDU2NzBfc2VsX2FzcmNfY2xrX3NyYyAtIHNlbGVjdCBBU1JDIGNsb2NrIHNvdXJjZSBmb3IgYSBzZXQgb2YgZmlsdGVycworICogQGNvZGVjOiBTb0MgYXVkaW8gY29kZWMgZGV2aWNlLgorICogQGZpbHRlcl9tYXNrOiBtYXNrIG9mIGZpbHRlcnMuCisgKiBAY2xrX3NyYzogY2xvY2sgc291cmNlCisgKgorICogVGhlIEFTUkMgZnVuY3Rpb24gaXMgZm9yIGFzeW5jaHJvbm91cyBNQ0xLIGFuZCBMUkNLLiBBbHNvLCBzaW5jZSBSVDU2NzAgY2FuCisgKiBvbmx5IHN1cHBvcnQgc3RhbmRhcmQgMzJmcyBvciA2NGZzIGkycyBmb3JtYXQsIEFTUkMgc2hvdWxkIGJlIGVuYWJsZWQgdG8KKyAqIHN1cHBvcnQgc3BlY2lhbCBpMnMgY2xvY2sgZm9ybWF0IHN1Y2ggYXMgSW50ZWwncyAxMDBmcygxMDAgKiBzYW1wbGluZyByYXRlKS4KKyAqIEFTUkMgZnVuY3Rpb24gd2lsbCB0cmFjayBpMnMgY2xvY2sgYW5kIGdlbmVyYXRlIGEgY29ycmVzcG9uZGluZyBzeXN0ZW0gY2xvY2sKKyAqIGZvciBjb2RlYy4gVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhbiBBUEkgdG8gc2VsZWN0IHRoZSBjbG9jayBzb3VyY2UgZm9yIGEKKyAqIHNldCBvZiBmaWx0ZXJzIHNwZWNpZmllZCBieSB0aGUgbWFzay4gQW5kIHRoZSBjb2RlYyBkcml2ZXIgd2lsbCB0dXJuIG9uIEFTUkMKKyAqIGZvciB0aGVzZSBmaWx0ZXJzIGlmIEFTUkMgaXMgc2VsZWN0ZWQgYXMgdGhlaXIgY2xvY2sgc291cmNlLgorICovCitpbnQgcnQ1NjcwX3NlbF9hc3JjX2Nsa19zcmMoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjLAorCQkJICAgIHVuc2lnbmVkIGludCBmaWx0ZXJfbWFzaywgdW5zaWduZWQgaW50IGNsa19zcmMpCit7CisJdW5zaWduZWQgaW50IGFzcmMyX21hc2sgPSAwLCBhc3JjMl92YWx1ZSA9IDA7CisJdW5zaWduZWQgaW50IGFzcmMzX21hc2sgPSAwLCBhc3JjM192YWx1ZSA9IDA7CisKKwlpZiAoY2xrX3NyYyA+IFJUNTY3MF9DTEtfU0VMX1NZUzMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGZpbHRlcl9tYXNrICYgUlQ1NjcwX0RBX1NURVJFT19GSUxURVIpIHsKKwkJYXNyYzJfbWFzayB8PSBSVDU2NzBfREFfU1RPX0NMS19TRUxfTUFTSzsKKwkJYXNyYzJfdmFsdWUgPSAoYXNyYzJfdmFsdWUgJiB+UlQ1NjcwX0RBX1NUT19DTEtfU0VMX01BU0spCisJCQkJfCAoY2xrX3NyYyA8PCAgUlQ1NjcwX0RBX1NUT19DTEtfU0VMX1NGVCk7CisJfQorCisJaWYgKGZpbHRlcl9tYXNrICYgUlQ1NjcwX0RBX01PTk9fTF9GSUxURVIpIHsKKwkJYXNyYzJfbWFzayB8PSBSVDU2NzBfREFfTU9OT0xfQ0xLX1NFTF9NQVNLOworCQlhc3JjMl92YWx1ZSA9IChhc3JjMl92YWx1ZSAmIH5SVDU2NzBfREFfTU9OT0xfQ0xLX1NFTF9NQVNLKQorCQkJCXwgKGNsa19zcmMgPDwgIFJUNTY3MF9EQV9NT05PTF9DTEtfU0VMX1NGVCk7CisJfQorCisJaWYgKGZpbHRlcl9tYXNrICYgUlQ1NjcwX0RBX01PTk9fUl9GSUxURVIpIHsKKwkJYXNyYzJfbWFzayB8PSBSVDU2NzBfREFfTU9OT1JfQ0xLX1NFTF9NQVNLOworCQlhc3JjMl92YWx1ZSA9IChhc3JjMl92YWx1ZSAmIH5SVDU2NzBfREFfTU9OT1JfQ0xLX1NFTF9NQVNLKQorCQkJCXwgKGNsa19zcmMgPDwgIFJUNTY3MF9EQV9NT05PUl9DTEtfU0VMX1NGVCk7CisJfQorCisJaWYgKGZpbHRlcl9tYXNrICYgUlQ1NjcwX0FEX1NURVJFT19GSUxURVIpIHsKKwkJYXNyYzJfbWFzayB8PSBSVDU2NzBfQURfU1RPMV9DTEtfU0VMX01BU0s7CisJCWFzcmMyX3ZhbHVlID0gKGFzcmMyX3ZhbHVlICYgflJUNTY3MF9BRF9TVE8xX0NMS19TRUxfTUFTSykKKwkJCQl8IChjbGtfc3JjIDw8ICBSVDU2NzBfQURfU1RPMV9DTEtfU0VMX1NGVCk7CisJfQorCisJaWYgKGZpbHRlcl9tYXNrICYgUlQ1NjcwX0FEX01PTk9fTF9GSUxURVIpIHsKKwkJYXNyYzNfbWFzayB8PSBSVDU2NzBfQURfTU9OT0xfQ0xLX1NFTF9NQVNLOworCQlhc3JjM192YWx1ZSA9IChhc3JjM192YWx1ZSAmIH5SVDU2NzBfQURfTU9OT0xfQ0xLX1NFTF9NQVNLKQorCQkJCXwgKGNsa19zcmMgPDwgIFJUNTY3MF9BRF9NT05PTF9DTEtfU0VMX1NGVCk7CisJfQorCisJaWYgKGZpbHRlcl9tYXNrICYgUlQ1NjcwX0FEX01PTk9fUl9GSUxURVIpICB7CisJCWFzcmMzX21hc2sgfD0gUlQ1NjcwX0FEX01PTk9SX0NMS19TRUxfTUFTSzsKKwkJYXNyYzNfdmFsdWUgPSAoYXNyYzNfdmFsdWUgJiB+UlQ1NjcwX0FEX01PTk9SX0NMS19TRUxfTUFTSykKKwkJCQl8IChjbGtfc3JjIDw8ICBSVDU2NzBfQURfTU9OT1JfQ0xLX1NFTF9TRlQpOworCX0KKworCWlmIChmaWx0ZXJfbWFzayAmIFJUNTY3MF9VUF9SQVRFX0ZJTFRFUikgeworCQlhc3JjM19tYXNrIHw9IFJUNTY3MF9VUF9DTEtfU0VMX01BU0s7CisJCWFzcmMzX3ZhbHVlID0gKGFzcmMzX3ZhbHVlICYgflJUNTY3MF9VUF9DTEtfU0VMX01BU0spCisJCQkJfCAoY2xrX3NyYyA8PCAgUlQ1NjcwX1VQX0NMS19TRUxfU0ZUKTsKKwl9CisKKwlpZiAoZmlsdGVyX21hc2sgJiBSVDU2NzBfRE9XTl9SQVRFX0ZJTFRFUikgeworCQlhc3JjM19tYXNrIHw9IFJUNTY3MF9ET1dOX0NMS19TRUxfTUFTSzsKKwkJYXNyYzNfdmFsdWUgPSAoYXNyYzNfdmFsdWUgJiB+UlQ1NjcwX0RPV05fQ0xLX1NFTF9NQVNLKQorCQkJCXwgKGNsa19zcmMgPDwgIFJUNTY3MF9ET1dOX0NMS19TRUxfU0ZUKTsKKwl9CisKKwlpZiAoYXNyYzJfbWFzaykKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1NjcwX0FTUkNfMiwKKwkJCQkgICAgYXNyYzJfbWFzaywgYXNyYzJfdmFsdWUpOworCisJaWYgKGFzcmMzX21hc2spCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY3MF9BU1JDXzMsCisJCQkJICAgIGFzcmMzX21hc2ssIGFzcmMzX3ZhbHVlKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJ0NTY3MF9zZWxfYXNyY19jbGtfc3JjKTsKKwogLyogRGlnaXRhbCBNaXhlciAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IHJ0NTY3MF9zdG8xX2FkY19sX21peFtdID0gewogCVNPQ19EQVBNX1NJTkdMRSgiQURDMSBTd2l0Y2giLCBSVDU2NzBfU1RPMV9BRENfTUlYRVIsCkBAIC0xMTQ2LDcgKzEyMzMsNyBAQAogc3RhdGljIGludCBydDU2NzBfaHBfcG93ZXJfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlzdHJ1Y3QgcnQ1NjcwX3ByaXYgKnJ0NTY3MCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewpAQCAtMTE4Miw3ICsxMjY5LDcgQEAKIHN0YXRpYyBpbnQgcnQ1NjcwX2hwX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBydDU2NzBfcHJpdiAqcnQ1NjcwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC0xMjMyLDcgKzEzMTksNyBAQAogc3RhdGljIGludCBydDU2NzBfYnN0MV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKQEAgLTEyNTUsNyArMTM0Miw3IEBACiBzdGF0aWMgaW50IHJ0NTY3MF9ic3QyX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgpAQCAtMjE4OCw2ICsyMjc1LDEzIEBACiAJaWYgKGZyZXEgPT0gcnQ1NjcwLT5zeXNjbGsgJiYgY2xrX2lkID09IHJ0NTY3MC0+c3lzY2xrX3NyYykKIAkJcmV0dXJuIDA7CiAKKwlpZiAocnQ1NjcwLT5wZGF0YS5qZF9tb2RlKSB7CisJCWlmIChjbGtfaWQgPT0gUlQ1NjcwX1NDTEtfU19QTEwxKQorCQkJc25kX3NvY19kYXBtX2ZvcmNlX2VuYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiUExMMSIpOworCQllbHNlCisJCQlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oJmNvZGVjLT5kYXBtLCAiUExMMSIpOworCQlzbmRfc29jX2RhcG1fc3luYygmY29kZWMtPmRhcG0pOworCX0KIAlzd2l0Y2ggKGNsa19pZCkgewogCWNhc2UgUlQ1NjcwX1NDTEtfU19NQ0xLOgogCQlyZWdfdmFsIHw9IFJUNTY3MF9TQ0xLX1NSQ19NQ0xLOwpAQCAtMjUyMiw2ICsyNjE2LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBydDU2NzBfcmVnbWFwID0gewogCS5yZWdfYml0cyA9IDgsCiAJLnZhbF9iaXRzID0gMTYsCisJLnVzZV9zaW5nbGVfcncgPSB0cnVlLAogCS5tYXhfcmVnaXN0ZXIgPSBSVDU2NzBfVkVORE9SX0lEMiArIDEgKyAoQVJSQVlfU0laRShydDU2NzBfcmFuZ2VzKSAqCiAJCQkJCSAgICAgICBSVDU2NzBfUFJfU1BBQ0lORyksCiAJLnZvbGF0aWxlX3JlZyA9IHJ0NTY3MF92b2xhdGlsZV9yZWdpc3RlciwKQEAgLTI1NDksNiArMjY0NCwxNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBydDU2NzBfYWNwaV9tYXRjaCk7CiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIGRtaV9wbGF0Zm9ybV9pbnRlbF9icmFzd2VsbFtdID0geworCXsKKwkJLmlkZW50ID0gIkludGVsIEJyYXN3ZWxsIiwKKwkJLm1hdGNoZXMgPSB7CisJCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJJbnRlbCBDb3Jwb3JhdGlvbiIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiQnJhc3dlbGwgQ1JCIiksCisJCX0sCisJfSwKKwl7fQorfTsKKwogc3RhdGljIGludCBydDU2NzBfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCiAJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CkBAIC0yNTY4LDYgKzI2NzQsMTIgQEAKIAlpZiAocGRhdGEpCiAJCXJ0NTY3MC0+cGRhdGEgPSAqcGRhdGE7CiAKKwlpZiAoZG1pX2NoZWNrX3N5c3RlbShkbWlfcGxhdGZvcm1faW50ZWxfYnJhc3dlbGwpKSB7CisJCXJ0NTY3MC0+cGRhdGEuZG1pY19lbiA9IHRydWU7CisJCXJ0NTY3MC0+cGRhdGEuZG1pYzFfZGF0YV9waW4gPSBSVDU2NzBfRE1JQ19EQVRBX0lOMlA7CisJCXJ0NTY3MC0+cGRhdGEuamRfbW9kZSA9IDE7CisJfQorCiAJcnQ1NjcwLT5yZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X2kyYyhpMmMsICZydDU2NzBfcmVnbWFwKTsKIAlpZiAoSVNfRVJSKHJ0NTY3MC0+cmVnbWFwKSkgewogCQlyZXQgPSBQVFJfRVJSKHJ0NTY3MC0+cmVnbWFwKTsKQEAgLTI2MDksNiArMjcyMSwxMCBAQAogCX0KIAogCWlmIChydDU2NzAtPnBkYXRhLmpkX21vZGUpIHsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY3MC0+cmVnbWFwLCBSVDU2NzBfR0xCX0NMSywKKwkJCQkgICBSVDU2NzBfU0NMS19TUkNfTUFTSywgUlQ1NjcwX1NDTEtfU1JDX1JDQ0xLKTsKKwkJcnQ1NjcwLT5zeXNjbGsgPSAwOworCQlydDU2NzAtPnN5c2Nsa19zcmMgPSBSVDU2NzBfU0NMS19TX1JDQ0xLOwogCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1NjcwLT5yZWdtYXAsIFJUNTY3MF9QV1JfQU5MRzEsCiAJCQkJICAgUlQ1NjcwX1BXUl9NQiwgUlQ1NjcwX1BXUl9NQik7CiAJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NzAtPnJlZ21hcCwgUlQ1NjcwX1BXUl9BTkxHMiwKQEAgLTI3MTYsMTggKzI4MzIsMjYgQEAKIAogCX0KIAorCXBtX3J1bnRpbWVfZW5hYmxlKCZpMmMtPmRldik7CisJcG1fcmVxdWVzdF9pZGxlKCZpMmMtPmRldik7CisKIAlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvZGVjKCZpMmMtPmRldiwgJnNvY19jb2RlY19kZXZfcnQ1NjcwLAogCQkJcnQ1NjcwX2RhaSwgQVJSQVlfU0laRShydDU2NzBfZGFpKSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyOwogCisJcG1fcnVudGltZV9wdXQoJmkyYy0+ZGV2KTsKKwogCXJldHVybiAwOwogZXJyOgorCXBtX3J1bnRpbWVfZGlzYWJsZSgmaTJjLT5kZXYpOworCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBydDU2NzBfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKQogeworCXBtX3J1bnRpbWVfZGlzYWJsZSgmaTJjLT5kZXYpOwogCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb2RlYygmaTJjLT5kZXYpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3J0NTY3MC5oIGIvc291bmQvc29jL2NvZGVjcy9ydDU2NzAuaAppbmRleCBkMTFiOWMyLi4yMWY4ZTE4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3J0NTY3MC5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvcnQ1NjcwLmgKQEAgLTEwMjMsNTAgKzEwMjMsMzMgQEAKICNkZWZpbmUgUlQ1NjcwX0RNSUNfMl9NX05PUgkJCSgweDAgPDwgOCkKICNkZWZpbmUgUlQ1NjcwX0RNSUNfMl9NX0FTWU4JCQkoMHgxIDw8IDgpCiAKKy8qIEFTUkMgY2xvY2sgc291cmNlIHNlbGVjdGlvbiAoMHg4NCwgMHg4NSkgKi8KKyNkZWZpbmUgUlQ1NjcwX0NMS19TRUxfU1lTCQkJKDB4MCkKKyNkZWZpbmUgUlQ1NjcwX0NMS19TRUxfSTJTMV9BU1JDCQkoMHgxKQorI2RlZmluZSBSVDU2NzBfQ0xLX1NFTF9JMlMyX0FTUkMJCSgweDIpCisjZGVmaW5lIFJUNTY3MF9DTEtfU0VMX0kyUzNfQVNSQwkJKDB4MykKKyNkZWZpbmUgUlQ1NjcwX0NMS19TRUxfU1lTMgkJCSgweDUpCisjZGVmaW5lIFJUNTY3MF9DTEtfU0VMX1NZUzMJCQkoMHg2KQorCiAvKiBBU1JDIENvbnRyb2wgMiAoMHg4NCkgKi8KLSNkZWZpbmUgUlQ1NjcwX01EQV9MX01fTUFTSwkJCSgweDEgPDwgMTUpCi0jZGVmaW5lIFJUNTY3MF9NREFfTF9NX1NGVAkJCTE1Ci0jZGVmaW5lIFJUNTY3MF9NREFfTF9NX05PUgkJCSgweDAgPDwgMTUpCi0jZGVmaW5lIFJUNTY3MF9NREFfTF9NX0FTWU4JCQkoMHgxIDw8IDE1KQotI2RlZmluZSBSVDU2NzBfTURBX1JfTV9NQVNLCQkJKDB4MSA8PCAxNCkKLSNkZWZpbmUgUlQ1NjcwX01EQV9SX01fU0ZUCQkJMTQKLSNkZWZpbmUgUlQ1NjcwX01EQV9SX01fTk9SCQkJKDB4MCA8PCAxNCkKLSNkZWZpbmUgUlQ1NjcwX01EQV9SX01fQVNZTgkJCSgweDEgPDwgMTQpCi0jZGVmaW5lIFJUNTY3MF9NQURfTF9NX01BU0sJCQkoMHgxIDw8IDEzKQotI2RlZmluZSBSVDU2NzBfTUFEX0xfTV9TRlQJCQkxMwotI2RlZmluZSBSVDU2NzBfTUFEX0xfTV9OT1IJCQkoMHgwIDw8IDEzKQotI2RlZmluZSBSVDU2NzBfTUFEX0xfTV9BU1lOCQkJKDB4MSA8PCAxMykKLSNkZWZpbmUgUlQ1NjcwX01BRF9SX01fTUFTSwkJCSgweDEgPDwgMTIpCi0jZGVmaW5lIFJUNTY3MF9NQURfUl9NX1NGVAkJCTEyCi0jZGVmaW5lIFJUNTY3MF9NQURfUl9NX05PUgkJCSgweDAgPDwgMTIpCi0jZGVmaW5lIFJUNTY3MF9NQURfUl9NX0FTWU4JCQkoMHgxIDw8IDEyKQotI2RlZmluZSBSVDU2NzBfQURDX01fTUFTSwkJCSgweDEgPDwgMTEpCi0jZGVmaW5lIFJUNTY3MF9BRENfTV9TRlQJCQkxMQotI2RlZmluZSBSVDU2NzBfQURDX01fTk9SCQkJKDB4MCA8PCAxMSkKLSNkZWZpbmUgUlQ1NjcwX0FEQ19NX0FTWU4JCQkoMHgxIDw8IDExKQotI2RlZmluZSBSVDU2NzBfU1RPX0RBQ19NX01BU0sJCQkoMHgxIDw8IDUpCi0jZGVmaW5lIFJUNTY3MF9TVE9fREFDX01fU0ZUCQkJNQotI2RlZmluZSBSVDU2NzBfU1RPX0RBQ19NX05PUgkJCSgweDAgPDwgNSkKLSNkZWZpbmUgUlQ1NjcwX1NUT19EQUNfTV9BU1lOCQkJKDB4MSA8PCA1KQotI2RlZmluZSBSVDU2NzBfSTJTMV9SX0RfTUFTSwkJCSgweDEgPDwgNCkKLSNkZWZpbmUgUlQ1NjcwX0kyUzFfUl9EX1NGVAkJCTQKLSNkZWZpbmUgUlQ1NjcwX0kyUzFfUl9EX0RJUwkJCSgweDAgPDwgNCkKLSNkZWZpbmUgUlQ1NjcwX0kyUzFfUl9EX0VOCQkJKDB4MSA8PCA0KQotI2RlZmluZSBSVDU2NzBfSTJTMl9SX0RfTUFTSwkJCSgweDEgPDwgMykKLSNkZWZpbmUgUlQ1NjcwX0kyUzJfUl9EX1NGVAkJCTMKLSNkZWZpbmUgUlQ1NjcwX0kyUzJfUl9EX0RJUwkJCSgweDAgPDwgMykKLSNkZWZpbmUgUlQ1NjcwX0kyUzJfUl9EX0VOCQkJKDB4MSA8PCAzKQotI2RlZmluZSBSVDU2NzBfUFJFX1NDTEtfTUFTSwkJCSgweDMpCi0jZGVmaW5lIFJUNTY3MF9QUkVfU0NMS19TRlQJCQkwCi0jZGVmaW5lIFJUNTY3MF9QUkVfU0NMS181MTIJCQkoMHgwKQotI2RlZmluZSBSVDU2NzBfUFJFX1NDTEtfMTAyNAkJCSgweDEpCi0jZGVmaW5lIFJUNTY3MF9QUkVfU0NMS18yMDQ4CQkJKDB4MikKKyNkZWZpbmUgUlQ1NjcwX0RBX1NUT19DTEtfU0VMX01BU0sJCSgweGYgPDwgMTIpCisjZGVmaW5lIFJUNTY3MF9EQV9TVE9fQ0xLX1NFTF9TRlQJCTEyCisjZGVmaW5lIFJUNTY3MF9EQV9NT05PTF9DTEtfU0VMX01BU0sJCSgweGYgPDwgOCkKKyNkZWZpbmUgUlQ1NjcwX0RBX01PTk9MX0NMS19TRUxfU0ZUCQk4CisjZGVmaW5lIFJUNTY3MF9EQV9NT05PUl9DTEtfU0VMX01BU0sJCSgweGYgPDwgNCkKKyNkZWZpbmUgUlQ1NjcwX0RBX01PTk9SX0NMS19TRUxfU0ZUCQk0CisjZGVmaW5lIFJUNTY3MF9BRF9TVE8xX0NMS19TRUxfTUFTSwkJKDB4ZiA8PCAwKQorI2RlZmluZSBSVDU2NzBfQURfU1RPMV9DTEtfU0VMX1NGVAkJMAogCiAvKiBBU1JDIENvbnRyb2wgMyAoMHg4NSkgKi8KLSNkZWZpbmUgUlQ1NjcwX0kyUzFfUkFURV9NQVNLCQkJKDB4ZiA8PCAxMikKLSNkZWZpbmUgUlQ1NjcwX0kyUzFfUkFURV9TRlQJCQkxMgotI2RlZmluZSBSVDU2NzBfSTJTMl9SQVRFX01BU0sJCQkoMHhmIDw8IDgpCi0jZGVmaW5lIFJUNTY3MF9JMlMyX1JBVEVfU0ZUCQkJOAorI2RlZmluZSBSVDU2NzBfVVBfQ0xLX1NFTF9NQVNLCQkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUlQ1NjcwX1VQX0NMS19TRUxfU0ZUCQkJMTIKKyNkZWZpbmUgUlQ1NjcwX0RPV05fQ0xLX1NFTF9NQVNLCQkoMHhmIDw8IDgpCisjZGVmaW5lIFJUNTY3MF9ET1dOX0NMS19TRUxfU0ZUCQkJOAorI2RlZmluZSBSVDU2NzBfQURfTU9OT0xfQ0xLX1NFTF9NQVNLCQkoMHhmIDw8IDQpCisjZGVmaW5lIFJUNTY3MF9BRF9NT05PTF9DTEtfU0VMX1NGVAkJNAorI2RlZmluZSBSVDU2NzBfQURfTU9OT1JfQ0xLX1NFTF9NQVNLCQkoMHhmIDw8IDApCisjZGVmaW5lIFJUNTY3MF9BRF9NT05PUl9DTEtfU0VMX1NGVAkJMAogCiAvKiBBU1JDIENvbnRyb2wgNCAoMHg4OSkgKi8KICNkZWZpbmUgUlQ1NjcwX0kyUzFfUERfTUFTSwkJCSgweDcgPDwgMTIpCkBAIC0xOTgzLDYgKzE5NjYsMjEgQEAKIAlSVDU2NzBfRE1JQ19EQVRBX0dQSU81LAogfTsKIAorLyogZmlsdGVyIG1hc2sgKi8KK2VudW0geworCVJUNTY3MF9EQV9TVEVSRU9fRklMVEVSID0gMHgxLAorCVJUNTY3MF9EQV9NT05PX0xfRklMVEVSID0gKDB4MSA8PCAxKSwKKwlSVDU2NzBfREFfTU9OT19SX0ZJTFRFUiA9ICgweDEgPDwgMiksCisJUlQ1NjcwX0FEX1NURVJFT19GSUxURVIgPSAoMHgxIDw8IDMpLAorCVJUNTY3MF9BRF9NT05PX0xfRklMVEVSID0gKDB4MSA8PCA0KSwKKwlSVDU2NzBfQURfTU9OT19SX0ZJTFRFUiA9ICgweDEgPDwgNSksCisJUlQ1NjcwX1VQX1JBVEVfRklMVEVSICAgPSAoMHgxIDw8IDYpLAorCVJUNTY3MF9ET1dOX1JBVEVfRklMVEVSID0gKDB4MSA8PCA3KSwKK307CisKK2ludCBydDU2NzBfc2VsX2FzcmNfY2xrX3NyYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsCisJCQkgICAgdW5zaWduZWQgaW50IGZpbHRlcl9tYXNrLCB1bnNpZ25lZCBpbnQgY2xrX3NyYyk7CisKIHN0cnVjdCBydDU2NzBfcHJpdiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwogCXN0cnVjdCBydDU2NzBfcGxhdGZvcm1fZGF0YSBwZGF0YTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1Njc3LmMgYi9zb3VuZC9zb2MvY29kZWNzL3J0NTY3Ny5jCmluZGV4IGMwZmJlMTguLjVkMGJiODcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvcnQ1Njc3LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9ydDU2NzcuYwpAQCAtNzAyLDYgKzcwMiw5IEBACiAJc3RhdGljIGJvb2wgYWN0aXZpdHk7CiAJaW50IHJldDsKIAorCWlmICghSVNfRU5BQkxFRChDT05GSUdfU05EX1NPQ19SVDU2NzdfU1BJKSkKKwkJcmV0dXJuIC1FTlhJTzsKKwogCWlmIChvbiAmJiAhYWN0aXZpdHkpIHsKIAkJYWN0aXZpdHkgPSB0cnVlOwogCkBAIC04OTYsNyArODk5LDcgQEAKIHN0YXRpYyBpbnQgc2V0X2RtaWNfY2xrKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBydDU2NzdfcHJpdiAqcnQ1Njc3ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJaW50IGlkeCA9IHJsNjIzMV9jYWxjX2RtaWNfY2xrKHJ0NTY3Ny0+c3lzY2xrKTsKIApAQCAtOTExLDcgKzkxNCw4IEBACiBzdGF0aWMgaW50IGlzX3N5c19jbGtfZnJvbV9wbGwoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNvdXJjZSwKIAkJCSBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc2luaykKIHsKLQlzdHJ1Y3QgcnQ1Njc3X3ByaXYgKnJ0NTY3NyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoc291cmNlLT5jb2RlYyk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHNvdXJjZS0+ZGFwbSk7CisJc3RydWN0IHJ0NTY3N19wcml2ICpydDU2NzcgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAl1bnNpZ25lZCBpbnQgdmFsOwogCiAJcmVnbWFwX3JlYWQocnQ1Njc3LT5yZWdtYXAsIFJUNTY3N19HTEJfQ0xLMSwgJnZhbCk7CkBAIC05MjIsNiArOTI2LDEwMSBAQAogCQlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBpc191c2luZ19hc3JjKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzb3VyY2UsCisJCQkgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNpbmspCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHNvdXJjZS0+ZGFwbSk7CisJc3RydWN0IHJ0NTY3N19wcml2ICpydDU2NzcgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl1bnNpZ25lZCBpbnQgcmVnLCBzaGlmdCwgdmFsOworCisJaWYgKHNvdXJjZS0+cmVnID09IFJUNTY3N19BU1JDXzEpIHsKKwkJc3dpdGNoIChzb3VyY2UtPnNoaWZ0KSB7CisJCWNhc2UgMTI6CisJCQlyZWcgPSBSVDU2NzdfQVNSQ180OworCQkJc2hpZnQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMTM6CisJCQlyZWcgPSBSVDU2NzdfQVNSQ180OworCQkJc2hpZnQgPSA0OworCQkJYnJlYWs7CisJCWNhc2UgMTQ6CisJCQlyZWcgPSBSVDU2NzdfQVNSQ180OworCQkJc2hpZnQgPSA4OworCQkJYnJlYWs7CisJCWNhc2UgMTU6CisJCQlyZWcgPSBSVDU2NzdfQVNSQ180OworCQkJc2hpZnQgPSAxMjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKHNvdXJjZS0+c2hpZnQpIHsKKwkJY2FzZSAwOgorCQkJcmVnID0gUlQ1Njc3X0FTUkNfNjsKKwkJCXNoaWZ0ID0gODsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlyZWcgPSBSVDU2NzdfQVNSQ182OworCQkJc2hpZnQgPSAxMjsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlyZWcgPSBSVDU2NzdfQVNSQ181OworCQkJc2hpZnQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXJlZyA9IFJUNTY3N19BU1JDXzU7CisJCQlzaGlmdCA9IDQ7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJcmVnID0gUlQ1Njc3X0FTUkNfNTsKKwkJCXNoaWZ0ID0gODsKKwkJCWJyZWFrOworCQljYXNlIDU6CisJCQlyZWcgPSBSVDU2NzdfQVNSQ181OworCQkJc2hpZnQgPSAxMjsKKwkJCWJyZWFrOworCQljYXNlIDEyOgorCQkJcmVnID0gUlQ1Njc3X0FTUkNfMzsKKwkJCXNoaWZ0ID0gMDsKKwkJCWJyZWFrOworCQljYXNlIDEzOgorCQkJcmVnID0gUlQ1Njc3X0FTUkNfMzsKKwkJCXNoaWZ0ID0gNDsKKwkJCWJyZWFrOworCQljYXNlIDE0OgorCQkJcmVnID0gUlQ1Njc3X0FTUkNfMzsKKwkJCXNoaWZ0ID0gMTI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJcmVnbWFwX3JlYWQocnQ1Njc3LT5yZWdtYXAsIHJlZywgJnZhbCk7CisJdmFsID0gKHZhbCA+PiBzaGlmdCkgJiAweGY7CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMSAuLi4gNjoKKwkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCit9CisKK3N0YXRpYyBpbnQgY2FuX3VzZV9hc3JjKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzb3VyY2UsCisJCQkgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNpbmspCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHNvdXJjZS0+ZGFwbSk7CisJc3RydWN0IHJ0NTY3N19wcml2ICpydDU2NzcgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCWlmIChydDU2NzctPnN5c2NsayA+IHJ0NTY3Ny0+bHJja1tSVDU2NzdfQUlGMV0gKiAzODQpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKIC8qIERpZ2l0YWwgTWl4ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBydDU2Nzdfc3RvMV9hZGNfbF9taXhbXSA9IHsKIAlTT0NfREFQTV9TSU5HTEUoIkFEQzEgU3dpdGNoIiwgUlQ1Njc3X1NUTzFfQURDX01JWEVSLApAQCAtMjAzMSw3ICsyMTMwLDcgQEAKIHN0YXRpYyBpbnQgcnQ1Njc3X2JzdDFfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJc3RydWN0IHJ0NTY3N19wcml2ICpydDU2NzcgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKQEAgLTIwNTUsNyArMjE1NCw3IEBACiBzdGF0aWMgaW50IHJ0NTY3N19ic3QyX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBydDU2NzdfcHJpdiAqcnQ1Njc3ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC0yMDc5LDE0ICsyMTc4LDE4IEBACiBzdGF0aWMgaW50IHJ0NTY3N19zZXRfcGxsMV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlzdHJ1Y3QgcnQ1Njc3X3ByaXYgKnJ0NTY3NyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewotCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgorCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CiAJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NzctPnJlZ21hcCwgUlQ1Njc3X1BMTDFfQ1RSTDIsIDB4MiwgMHgyKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKIAkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY3Ny0+cmVnbWFwLCBSVDU2NzdfUExMMV9DVFJMMiwgMHgyLCAweDApOwogCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXJldHVybiAwOwogCX0KQEAgLTIwOTcsMTQgKzIyMDAsMTggQEAKIHN0YXRpYyBpbnQgcnQ1Njc3X3NldF9wbGwyX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBydDU2NzdfcHJpdiAqcnQ1Njc3ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKIAkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY3Ny0+cmVnbWFwLCBSVDU2NzdfUExMMl9DVFJMMiwgMHgyLCAweDIpOworCQlicmVhazsKKworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgogCQlyZWdtYXBfdXBkYXRlX2JpdHMocnQ1Njc3LT5yZWdtYXAsIFJUNTY3N19QTEwyX0NUUkwyLCAweDIsIDB4MCk7CiAJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjExNSw3ICsyMjIyLDcgQEAKIHN0YXRpYyBpbnQgcnQ1Njc3X3NldF9taWNiaWFzMV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlzdHJ1Y3QgcnQ1Njc3X3ByaXYgKnJ0NTY3NyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewpAQCAtMjE0Miw3ICsyMjQ5LDcgQEAKIHN0YXRpYyBpbnQgcnQ1Njc3X2lmMV9hZGNfdGRtX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBydDU2NzdfcHJpdiAqcnQ1Njc3ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJdW5zaWduZWQgaW50IHZhbHVlOwogCkBAIC0yMTY1LDcgKzIyNzIsNyBAQAogc3RhdGljIGludCBydDU2NzdfaWYyX2FkY190ZG1fZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJc3RydWN0IHJ0NTY3N19wcml2ICpydDU2NzcgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAl1bnNpZ25lZCBpbnQgdmFsdWU7CiAKQEAgLTIxODgsNyArMjI5NSw3IEBACiBzdGF0aWMgaW50IHJ0NTY3N192cmVmX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBydDU2NzdfcHJpdiAqcnQ1Njc3ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC0yMjEyLDkgKzIzMTksNTAgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHJ0NTY3N19kYXBtX3dpZGdldHNbXSA9IHsKIAlTTkRfU09DX0RBUE1fU1VQUExZKCJQTEwxIiwgUlQ1Njc3X1BXUl9BTkxHMiwgUlQ1Njc3X1BXUl9QTEwxX0JJVCwKLQkJMCwgcnQ1Njc3X3NldF9wbGwxX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCQkwLCBydDU2Nzdfc2V0X3BsbDFfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwKKwkJU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKIAlTTkRfU09DX0RBUE1fU1VQUExZKCJQTEwyIiwgUlQ1Njc3X1BXUl9BTkxHMiwgUlQ1Njc3X1BXUl9QTEwyX0JJVCwKLQkJMCwgcnQ1Njc3X3NldF9wbGwyX2V2ZW50LCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCQkwLCBydDU2Nzdfc2V0X3BsbDJfZXZlbnQsIFNORF9TT0NfREFQTV9QUkVfUE1VIHwKKwkJU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKKworCS8qIEFTUkMgKi8KKwlTTkRfU09DX0RBUE1fU1VQUExZX1MoIkkyUzEgQVNSQyIsIDEsIFJUNTY3N19BU1JDXzEsIDAsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFlfUygiSTJTMiBBU1JDIiwgMSwgUlQ1Njc3X0FTUkNfMSwgMSwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJJMlMzIEFTUkMiLCAxLCBSVDU2NzdfQVNSQ18xLCAyLCAwLCBOVUxMLCAwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZX1MoIkkyUzQgQVNSQyIsIDEsIFJUNTY3N19BU1JDXzEsIDMsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFlfUygiREFDIFNUTyBBU1JDIiwgMSwgUlQ1Njc3X0FTUkNfMiwgMTQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFlfUygiREFDIE1PTk8yIEwgQVNSQyIsIDEsIFJUNTY3N19BU1JDXzIsIDEzLCAwLCBOVUxMLAorCQkwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZX1MoIkRBQyBNT05PMiBSIEFTUkMiLCAxLCBSVDU2NzdfQVNSQ18yLCAxMiwgMCwgTlVMTCwKKwkJMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJEQUMgTU9OTzMgTCBBU1JDIiwgMSwgUlQ1Njc3X0FTUkNfMSwgMTUsIDAsIE5VTEwsCisJCTApLAorCVNORF9TT0NfREFQTV9TVVBQTFlfUygiREFDIE1PTk8zIFIgQVNSQyIsIDEsIFJUNTY3N19BU1JDXzEsIDE0LCAwLCBOVUxMLAorCQkwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZX1MoIkRBQyBNT05PNCBMIEFTUkMiLCAxLCBSVDU2NzdfQVNSQ18xLCAxMywgMCwgTlVMTCwKKwkJMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJEQUMgTU9OTzQgUiBBU1JDIiwgMSwgUlQ1Njc3X0FTUkNfMSwgMTIsIDAsIE5VTEwsCisJCTApLAorCVNORF9TT0NfREFQTV9TVVBQTFlfUygiRE1JQyBTVE8xIEFTUkMiLCAxLCBSVDU2NzdfQVNSQ18yLCAxMSwgMCwgTlVMTCwKKwkJMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJETUlDIFNUTzIgQVNSQyIsIDEsIFJUNTY3N19BU1JDXzIsIDEwLCAwLCBOVUxMLAorCQkwKSwKKwlTTkRfU09DX0RBUE1fU1VQUExZX1MoIkRNSUMgU1RPMyBBU1JDIiwgMSwgUlQ1Njc3X0FTUkNfMiwgOSwgMCwgTlVMTCwKKwkJMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJETUlDIFNUTzQgQVNSQyIsIDEsIFJUNTY3N19BU1JDXzIsIDgsIDAsIE5VTEwsCisJCTApLAorCVNORF9TT0NfREFQTV9TVVBQTFlfUygiRE1JQyBNT05PIEwgQVNSQyIsIDEsIFJUNTY3N19BU1JDXzIsIDcsIDAsIE5VTEwsCisJCTApLAorCVNORF9TT0NfREFQTV9TVVBQTFlfUygiRE1JQyBNT05PIFIgQVNSQyIsIDEsIFJUNTY3N19BU1JDXzIsIDYsIDAsIE5VTEwsCisJCTApLAorCVNORF9TT0NfREFQTV9TVVBQTFlfUygiQURDIFNUTzEgQVNSQyIsIDEsIFJUNTY3N19BU1JDXzIsIDUsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFlfUygiQURDIFNUTzIgQVNSQyIsIDEsIFJUNTY3N19BU1JDXzIsIDQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFlfUygiQURDIFNUTzMgQVNSQyIsIDEsIFJUNTY3N19BU1JDXzIsIDMsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFlfUygiQURDIFNUTzQgQVNSQyIsIDEsIFJUNTY3N19BU1JDXzIsIDIsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFlfUygiQURDIE1PTk8gTCBBU1JDIiwgMSwgUlQ1Njc3X0FTUkNfMiwgMSwgMCwgTlVMTCwKKwkJMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWV9TKCJBREMgTU9OTyBSIEFTUkMiLCAxLCBSVDU2NzdfQVNSQ18yLCAwLCAwLCBOVUxMLAorCQkwKSwKIAogCS8qIElucHV0IFNpZGUgKi8KIAkvKiBtaWNiaWFzICovCkBAIC0yNjQ2LDEwICsyNzk0LDE4IEBACiAJLyogREFDIE1peGVyICovCiAJU05EX1NPQ19EQVBNX1NVUFBMWSgiZGFjIHN0ZXJlbzEgZmlsdGVyIiwgUlQ1Njc3X1BXUl9ESUcyLAogCQlSVDU2NzdfUFdSX0RBQ19TMUZfQklULCAwLCBOVUxMLCAwKSwKLQlTTkRfU09DX0RBUE1fU1VQUExZKCJkYWMgbW9ubyBsZWZ0IGZpbHRlciIsIFJUNTY3N19QV1JfRElHMiwKKwlTTkRfU09DX0RBUE1fU1VQUExZKCJkYWMgbW9ubzIgbGVmdCBmaWx0ZXIiLCBSVDU2NzdfUFdSX0RJRzIsCiAJCVJUNTY3N19QV1JfREFDX00yRl9MX0JJVCwgMCwgTlVMTCwgMCksCi0JU05EX1NPQ19EQVBNX1NVUFBMWSgiZGFjIG1vbm8gcmlnaHQgZmlsdGVyIiwgUlQ1Njc3X1BXUl9ESUcyLAorCVNORF9TT0NfREFQTV9TVVBQTFkoImRhYyBtb25vMiByaWdodCBmaWx0ZXIiLCBSVDU2NzdfUFdSX0RJRzIsCiAJCVJUNTY3N19QV1JfREFDX00yRl9SX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiZGFjIG1vbm8zIGxlZnQgZmlsdGVyIiwgUlQ1Njc3X1BXUl9ESUcyLAorCQlSVDU2NzdfUFdSX0RBQ19NM0ZfTF9CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoImRhYyBtb25vMyByaWdodCBmaWx0ZXIiLCBSVDU2NzdfUFdSX0RJRzIsCisJCVJUNTY3N19QV1JfREFDX00zRl9SX0JJVCwgMCwgTlVMTCwgMCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiZGFjIG1vbm80IGxlZnQgZmlsdGVyIiwgUlQ1Njc3X1BXUl9ESUcyLAorCQlSVDU2NzdfUFdSX0RBQ19NNEZfTF9CSVQsIDAsIE5VTEwsIDApLAorCVNORF9TT0NfREFQTV9TVVBQTFkoImRhYyBtb25vNCByaWdodCBmaWx0ZXIiLCBSVDU2NzdfUFdSX0RJRzIsCisJCVJUNTY3N19QV1JfREFDX000Rl9SX0JJVCwgMCwgTlVMTCwgMCksCiAKIAlTTkRfU09DX0RBUE1fTUlYRVIoIlN0ZXJlbyBEQUMgTUlYTCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKIAkJcnQ1Njc3X3N0bzFfZGFjX2xfbWl4LCBBUlJBWV9TSVpFKHJ0NTY3N19zdG8xX2RhY19sX21peCkpLApAQCAtMjcyMiw2ICsyODc4LDMxIEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBydDU2NzdfZGFwbV9yb3V0ZXNbXSA9IHsKKwl7ICJTdGVyZW8xIERNSUMgTXV4IiwgTlVMTCwgIkRNSUMgU1RPMSBBU1JDIiwgY2FuX3VzZV9hc3JjIH0sCisJeyAiU3RlcmVvMiBETUlDIE11eCIsIE5VTEwsICJETUlDIFNUTzIgQVNSQyIsIGNhbl91c2VfYXNyYyB9LAorCXsgIlN0ZXJlbzMgRE1JQyBNdXgiLCBOVUxMLCAiRE1JQyBTVE8zIEFTUkMiLCBjYW5fdXNlX2FzcmMgfSwKKwl7ICJTdGVyZW80IERNSUMgTXV4IiwgTlVMTCwgIkRNSUMgU1RPNCBBU1JDIiwgY2FuX3VzZV9hc3JjIH0sCisJeyAiTW9ubyBETUlDIEwgTXV4IiwgTlVMTCwgIkRNSUMgTU9OTyBMIEFTUkMiLCBjYW5fdXNlX2FzcmMgfSwKKwl7ICJNb25vIERNSUMgUiBNdXgiLCBOVUxMLCAiRE1JQyBNT05PIFIgQVNSQyIsIGNhbl91c2VfYXNyYyB9LAorCXsgIkkyUzEiLCBOVUxMLCAiSTJTMSBBU1JDIiwgY2FuX3VzZV9hc3JjfSwKKwl7ICJJMlMyIiwgTlVMTCwgIkkyUzIgQVNSQyIsIGNhbl91c2VfYXNyY30sCisJeyAiSTJTMyIsIE5VTEwsICJJMlMzIEFTUkMiLCBjYW5fdXNlX2FzcmN9LAorCXsgIkkyUzQiLCBOVUxMLCAiSTJTNCBBU1JDIiwgY2FuX3VzZV9hc3JjfSwKKworCXsgImRhYyBzdGVyZW8xIGZpbHRlciIsIE5VTEwsICJEQUMgU1RPIEFTUkMiLCBpc191c2luZ19hc3JjIH0sCisJeyAiZGFjIG1vbm8yIGxlZnQgZmlsdGVyIiwgTlVMTCwgIkRBQyBNT05PMiBMIEFTUkMiLCBpc191c2luZ19hc3JjIH0sCisJeyAiZGFjIG1vbm8yIHJpZ2h0IGZpbHRlciIsIE5VTEwsICJEQUMgTU9OTzIgUiBBU1JDIiwgaXNfdXNpbmdfYXNyYyB9LAorCXsgImRhYyBtb25vMyBsZWZ0IGZpbHRlciIsIE5VTEwsICJEQUMgTU9OTzMgTCBBU1JDIiwgaXNfdXNpbmdfYXNyYyB9LAorCXsgImRhYyBtb25vMyByaWdodCBmaWx0ZXIiLCBOVUxMLCAiREFDIE1PTk8zIFIgQVNSQyIsIGlzX3VzaW5nX2FzcmMgfSwKKwl7ICJkYWMgbW9ubzQgbGVmdCBmaWx0ZXIiLCBOVUxMLCAiREFDIE1PTk80IEwgQVNSQyIsIGlzX3VzaW5nX2FzcmMgfSwKKwl7ICJkYWMgbW9ubzQgcmlnaHQgZmlsdGVyIiwgTlVMTCwgIkRBQyBNT05PNCBSIEFTUkMiLCBpc191c2luZ19hc3JjIH0sCisJeyAiYWRjIHN0ZXJlbzEgZmlsdGVyIiwgTlVMTCwgIkFEQyBTVE8xIEFTUkMiLCBpc191c2luZ19hc3JjIH0sCisJeyAiYWRjIHN0ZXJlbzIgZmlsdGVyIiwgTlVMTCwgIkFEQyBTVE8yIEFTUkMiLCBpc191c2luZ19hc3JjIH0sCisJeyAiYWRjIHN0ZXJlbzMgZmlsdGVyIiwgTlVMTCwgIkFEQyBTVE8zIEFTUkMiLCBpc191c2luZ19hc3JjIH0sCisJeyAiYWRjIHN0ZXJlbzQgZmlsdGVyIiwgTlVMTCwgIkFEQyBTVE80IEFTUkMiLCBpc191c2luZ19hc3JjIH0sCisJeyAiYWRjIG1vbm8gbGVmdCBmaWx0ZXIiLCBOVUxMLCAiQURDIE1PTk8gTCBBU1JDIiwgaXNfdXNpbmdfYXNyYyB9LAorCXsgImFkYyBtb25vIHJpZ2h0IGZpbHRlciIsIE5VTEwsICJBREMgTU9OTyBSIEFTUkMiLCBpc191c2luZ19hc3JjIH0sCisKIAl7ICJETUlDMSIsIE5VTEwsICJETUlDIEwxIiB9LAogCXsgIkRNSUMxIiwgTlVMTCwgIkRNSUMgUjEiIH0sCiAJeyAiRE1JQzIiLCBOVUxMLCAiRE1JQyBMMiIgfSwKQEAgLTI4NTIsOCArMzAzMyw2IEBACiAKIAl7ICJTdGVyZW8xIEFEQyBNSVhMIiwgTlVMTCwgIlN0bzEgQURDIE1JWEwiIH0sCiAJeyAiU3RlcmVvMSBBREMgTUlYTCIsIE5VTEwsICJhZGMgc3RlcmVvMSBmaWx0ZXIiIH0sCi0JeyAiYWRjIHN0ZXJlbzEgZmlsdGVyIiwgTlVMTCwgIlBMTDEiLCBpc19zeXNfY2xrX2Zyb21fcGxsIH0sCi0KIAl7ICJTdGVyZW8xIEFEQyBNSVhSIiwgTlVMTCwgIlN0bzEgQURDIE1JWFIiIH0sCiAJeyAiU3RlcmVvMSBBREMgTUlYUiIsIE5VTEwsICJhZGMgc3RlcmVvMSBmaWx0ZXIiIH0sCiAJeyAiYWRjIHN0ZXJlbzEgZmlsdGVyIiwgTlVMTCwgIlBMTDEiLCBpc19zeXNfY2xrX2Zyb21fcGxsIH0sCkBAIC0yODc0LDggKzMwNTMsNiBAQAogCiAJeyAiU3RlcmVvMiBBREMgTUlYTCIsIE5VTEwsICJTdGVyZW8yIEFEQyBMUiBNdXgiIH0sCiAJeyAiU3RlcmVvMiBBREMgTUlYTCIsIE5VTEwsICJhZGMgc3RlcmVvMiBmaWx0ZXIiIH0sCi0JeyAiYWRjIHN0ZXJlbzIgZmlsdGVyIiwgTlVMTCwgIlBMTDEiLCBpc19zeXNfY2xrX2Zyb21fcGxsIH0sCi0KIAl7ICJTdGVyZW8yIEFEQyBNSVhSIiwgTlVMTCwgIlN0bzIgQURDIE1JWFIiIH0sCiAJeyAiU3RlcmVvMiBBREMgTUlYUiIsIE5VTEwsICJhZGMgc3RlcmVvMiBmaWx0ZXIiIH0sCiAJeyAiYWRjIHN0ZXJlbzIgZmlsdGVyIiwgTlVMTCwgIlBMTDEiLCBpc19zeXNfY2xrX2Zyb21fcGxsIH0sCkBAIC0yODkwLDggKzMwNjcsNiBAQAogCiAJeyAiU3RlcmVvMyBBREMgTUlYTCIsIE5VTEwsICJTdG8zIEFEQyBNSVhMIiB9LAogCXsgIlN0ZXJlbzMgQURDIE1JWEwiLCBOVUxMLCAiYWRjIHN0ZXJlbzMgZmlsdGVyIiB9LAotCXsgImFkYyBzdGVyZW8zIGZpbHRlciIsIE5VTEwsICJQTEwxIiwgaXNfc3lzX2Nsa19mcm9tX3BsbCB9LAotCiAJeyAiU3RlcmVvMyBBREMgTUlYUiIsIE5VTEwsICJTdG8zIEFEQyBNSVhSIiB9LAogCXsgIlN0ZXJlbzMgQURDIE1JWFIiLCBOVUxMLCAiYWRjIHN0ZXJlbzMgZmlsdGVyIiB9LAogCXsgImFkYyBzdGVyZW8zIGZpbHRlciIsIE5VTEwsICJQTEwxIiwgaXNfc3lzX2Nsa19mcm9tX3BsbCB9LApAQCAtMjkwNiw4ICszMDgxLDYgQEAKIAogCXsgIlN0ZXJlbzQgQURDIE1JWEwiLCBOVUxMLCAiU3RvNCBBREMgTUlYTCIgfSwKIAl7ICJTdGVyZW80IEFEQyBNSVhMIiwgTlVMTCwgImFkYyBzdGVyZW80IGZpbHRlciIgfSwKLQl7ICJhZGMgc3RlcmVvNCBmaWx0ZXIiLCBOVUxMLCAiUExMMSIsIGlzX3N5c19jbGtfZnJvbV9wbGwgfSwKLQogCXsgIlN0ZXJlbzQgQURDIE1JWFIiLCBOVUxMLCAiU3RvNCBBREMgTUlYUiIgfSwKIAl7ICJTdGVyZW80IEFEQyBNSVhSIiwgTlVMTCwgImFkYyBzdGVyZW80IGZpbHRlciIgfSwKIAl7ICJhZGMgc3RlcmVvNCBmaWx0ZXIiLCBOVUxMLCAiUExMMSIsIGlzX3N5c19jbGtfZnJvbV9wbGwgfSwKQEAgLTM0NTYsMTAgKzM2MjksOCBAQAogCiAJeyAiREFDMSBNSVhMIiwgIlN0ZXJlbyBBREMgU3dpdGNoIiwgIkFEREExIE11eCIgfSwKIAl7ICJEQUMxIE1JWEwiLCAiREFDMSBTd2l0Y2giLCAiREFDMSBNdXgiIH0sCi0JeyAiREFDMSBNSVhMIiwgTlVMTCwgImRhYyBzdGVyZW8xIGZpbHRlciIgfSwKIAl7ICJEQUMxIE1JWFIiLCAiU3RlcmVvIEFEQyBTd2l0Y2giLCAiQUREQTEgTXV4IiB9LAogCXsgIkRBQzEgTUlYUiIsICJEQUMxIFN3aXRjaCIsICJEQUMxIE11eCIgfSwKLQl7ICJEQUMxIE1JWFIiLCBOVUxMLCAiZGFjIHN0ZXJlbzEgZmlsdGVyIiB9LAogCiAJeyAiREFDMSBGUyIsIE5VTEwsICJEQUMxIE1JWEwiIH0sCiAJeyAiREFDMSBGUyIsIE5VTEwsICJEQUMxIE1JWFIiIH0sCkBAIC0zNTI2LDM1ICszNjk3LDQ2IEBACiAJeyAiU3RlcmVvIERBQyBNSVhSIiwgIkRBQzIgUiBTd2l0Y2giLCAiREFDMiBSIE11eCIgfSwKIAl7ICJTdGVyZW8gREFDIE1JWFIiLCAiREFDMSBMIFN3aXRjaCIsICJEQUMxIE1JWEwiIH0sCiAJeyAiU3RlcmVvIERBQyBNSVhSIiwgTlVMTCwgImRhYyBzdGVyZW8xIGZpbHRlciIgfSwKKwl7ICJkYWMgc3RlcmVvMSBmaWx0ZXIiLCBOVUxMLCAiUExMMSIsIGlzX3N5c19jbGtfZnJvbV9wbGwgfSwKIAogCXsgIk1vbm8gREFDIE1JWEwiLCAiU1QgTCBTd2l0Y2giLCAiU2lkZXRvbmUgTXV4IiB9LAogCXsgIk1vbm8gREFDIE1JWEwiLCAiREFDMSBMIFN3aXRjaCIsICJEQUMxIE1JWEwiIH0sCiAJeyAiTW9ubyBEQUMgTUlYTCIsICJEQUMyIEwgU3dpdGNoIiwgIkRBQzIgTCBNdXgiIH0sCiAJeyAiTW9ubyBEQUMgTUlYTCIsICJEQUMyIFIgU3dpdGNoIiwgIkRBQzIgUiBNdXgiIH0sCi0JeyAiTW9ubyBEQUMgTUlYTCIsIE5VTEwsICJkYWMgbW9ubyBsZWZ0IGZpbHRlciIgfSwKKwl7ICJNb25vIERBQyBNSVhMIiwgTlVMTCwgImRhYyBtb25vMiBsZWZ0IGZpbHRlciIgfSwKKwl7ICJkYWMgbW9ubzIgbGVmdCBmaWx0ZXIiLCBOVUxMLCAiUExMMSIsIGlzX3N5c19jbGtfZnJvbV9wbGwgfSwKIAl7ICJNb25vIERBQyBNSVhSIiwgIlNUIFIgU3dpdGNoIiwgIlNpZGV0b25lIE11eCIgfSwKIAl7ICJNb25vIERBQyBNSVhSIiwgIkRBQzEgUiBTd2l0Y2giLCAiREFDMSBNSVhSIiB9LAogCXsgIk1vbm8gREFDIE1JWFIiLCAiREFDMiBSIFN3aXRjaCIsICJEQUMyIFIgTXV4IiB9LAogCXsgIk1vbm8gREFDIE1JWFIiLCAiREFDMiBMIFN3aXRjaCIsICJEQUMyIEwgTXV4IiB9LAotCXsgIk1vbm8gREFDIE1JWFIiLCBOVUxMLCAiZGFjIG1vbm8gcmlnaHQgZmlsdGVyIiB9LAorCXsgIk1vbm8gREFDIE1JWFIiLCBOVUxMLCAiZGFjIG1vbm8yIHJpZ2h0IGZpbHRlciIgfSwKKwl7ICJkYWMgbW9ubzIgcmlnaHQgZmlsdGVyIiwgTlVMTCwgIlBMTDEiLCBpc19zeXNfY2xrX2Zyb21fcGxsIH0sCiAKIAl7ICJERDEgTUlYTCIsICJTdG8gREFDIE1peCBMIFN3aXRjaCIsICJTdGVyZW8gREFDIE1JWEwiIH0sCiAJeyAiREQxIE1JWEwiLCAiTW9ubyBEQUMgTWl4IEwgU3dpdGNoIiwgIk1vbm8gREFDIE1JWEwiIH0sCiAJeyAiREQxIE1JWEwiLCAiREFDMyBMIFN3aXRjaCIsICJEQUMzIEwgTXV4IiB9LAogCXsgIkREMSBNSVhMIiwgIkRBQzMgUiBTd2l0Y2giLCAiREFDMyBSIE11eCIgfSwKKwl7ICJERDEgTUlYTCIsIE5VTEwsICJkYWMgbW9ubzMgbGVmdCBmaWx0ZXIiIH0sCisJeyAiZGFjIG1vbm8zIGxlZnQgZmlsdGVyIiwgTlVMTCwgIlBMTDEiLCBpc19zeXNfY2xrX2Zyb21fcGxsIH0sCiAJeyAiREQxIE1JWFIiLCAiU3RvIERBQyBNaXggUiBTd2l0Y2giLCAiU3RlcmVvIERBQyBNSVhSIiB9LAogCXsgIkREMSBNSVhSIiwgIk1vbm8gREFDIE1peCBSIFN3aXRjaCIsICJNb25vIERBQyBNSVhSIiB9LAogCXsgIkREMSBNSVhSIiwgIkRBQzMgTCBTd2l0Y2giLCAiREFDMyBMIE11eCIgfSwKIAl7ICJERDEgTUlYUiIsICJEQUMzIFIgU3dpdGNoIiwgIkRBQzMgUiBNdXgiIH0sCisJeyAiREQxIE1JWFIiLCBOVUxMLCAiZGFjIG1vbm8zIHJpZ2h0IGZpbHRlciIgfSwKKwl7ICJkYWMgbW9ubzMgcmlnaHQgZmlsdGVyIiwgTlVMTCwgIlBMTDEiLCBpc19zeXNfY2xrX2Zyb21fcGxsIH0sCiAKIAl7ICJERDIgTUlYTCIsICJTdG8gREFDIE1peCBMIFN3aXRjaCIsICJTdGVyZW8gREFDIE1JWEwiIH0sCiAJeyAiREQyIE1JWEwiLCAiTW9ubyBEQUMgTWl4IEwgU3dpdGNoIiwgIk1vbm8gREFDIE1JWEwiIH0sCiAJeyAiREQyIE1JWEwiLCAiREFDNCBMIFN3aXRjaCIsICJEQUM0IEwgTXV4IiB9LAogCXsgIkREMiBNSVhMIiwgIkRBQzQgUiBTd2l0Y2giLCAiREFDNCBSIE11eCIgfSwKKwl7ICJERDIgTUlYTCIsIE5VTEwsICJkYWMgbW9ubzQgbGVmdCBmaWx0ZXIiIH0sCisJeyAiZGFjIG1vbm80IGxlZnQgZmlsdGVyIiwgTlVMTCwgIlBMTDEiLCBpc19zeXNfY2xrX2Zyb21fcGxsIH0sCiAJeyAiREQyIE1JWFIiLCAiU3RvIERBQyBNaXggUiBTd2l0Y2giLCAiU3RlcmVvIERBQyBNSVhSIiB9LAogCXsgIkREMiBNSVhSIiwgIk1vbm8gREFDIE1peCBSIFN3aXRjaCIsICJNb25vIERBQyBNSVhSIiB9LAogCXsgIkREMiBNSVhSIiwgIkRBQzQgTCBTd2l0Y2giLCAiREFDNCBMIE11eCIgfSwKIAl7ICJERDIgTUlYUiIsICJEQUM0IFIgU3dpdGNoIiwgIkRBQzQgUiBNdXgiIH0sCisJeyAiREQyIE1JWFIiLCBOVUxMLCAiZGFjIG1vbm80IHJpZ2h0IGZpbHRlciIgfSwKKwl7ICJkYWMgbW9ubzQgcmlnaHQgZmlsdGVyIiwgTlVMTCwgIlBMTDEiLCBpc19zeXNfY2xrX2Zyb21fcGxsIH0sCiAKIAl7ICJTdGVyZW8gREFDIE1JWCIsIE5VTEwsICJTdGVyZW8gREFDIE1JWEwiIH0sCiAJeyAiU3RlcmVvIERBQyBNSVgiLCBOVUxMLCAiU3RlcmVvIERBQyBNSVhSIiB9LApAQCAtMzU3NiwxMSArMzc1OCw4IEBACiAJeyAiREFDMyBTUkMgTXV4IiwgIkREIE1JWDJMIiwgIkREMiBNSVhMIiB9LAogCiAJeyAiREFDIDEiLCBOVUxMLCAiREFDMTIgU1JDIE11eCIgfSwKLQl7ICJEQUMgMSIsIE5VTEwsICJQTEwxIiwgaXNfc3lzX2Nsa19mcm9tX3BsbCB9LAogCXsgIkRBQyAyIiwgTlVMTCwgIkRBQzEyIFNSQyBNdXgiIH0sCi0JeyAiREFDIDIiLCBOVUxMLCAiUExMMSIsIGlzX3N5c19jbGtfZnJvbV9wbGwgfSwKIAl7ICJEQUMgMyIsIE5VTEwsICJEQUMzIFNSQyBNdXgiIH0sCi0JeyAiREFDIDMiLCBOVUxMLCAiUExMMSIsIGlzX3N5c19jbGtfZnJvbV9wbGwgfSwKIAogCXsgIlBETTEgTCBNdXgiLCAiU1RPMSBEQUMgTUlYIiwgIlN0ZXJlbyBEQUMgTUlYTCIgfSwKIAl7ICJQRE0xIEwgTXV4IiwgIk1PTk8gREFDIE1JWCIsICJNb25vIERBQyBNSVhMIiB9LApAQCAtMzkyNyw3ICs0MTA2LDggQEAKIAkJCXVuc2lnbmVkIGludCByeF9tYXNrLCBpbnQgc2xvdHMsIGludCBzbG90X3dpZHRoKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7Ci0JdW5zaWduZWQgaW50IHZhbCA9IDA7CisJc3RydWN0IHJ0NTY3N19wcml2ICpydDU2NzcgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKwl1bnNpZ25lZCBpbnQgdmFsID0gMCwgc2xvdF93aWR0aF8yNSA9IDA7CiAKIAlpZiAocnhfbWFzayB8fCB0eF9tYXNrKQogCQl2YWwgfD0gKDEgPDwgMTIpOwpAQCAtMzk1MSw2ICs0MTMxLDggQEAKIAljYXNlIDIwOgogCQl2YWwgfD0gKDEgPDwgOCk7CiAJCWJyZWFrOworCWNhc2UgMjU6CisJCXNsb3Rfd2lkdGhfMjUgPSAweDgwODA7CiAJY2FzZSAyNDoKIAkJdmFsIHw9ICgyIDw8IDgpOwogCQlicmVhazsKQEAgLTM5NjQsMTAgKzQxNDYsMTYgQEAKIAogCXN3aXRjaCAoZGFpLT5pZCkgewogCWNhc2UgUlQ1Njc3X0FJRjE6Ci0JCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFJUNTY3N19URE0xX0NUUkwxLCAweDFmMDAsIHZhbCk7CisJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NzctPnJlZ21hcCwgUlQ1Njc3X1RETTFfQ1RSTDEsIDB4MWYwMCwKKwkJCXZhbCk7CisJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NzctPnJlZ21hcCwgUlQ1Njc3X0RJR19NSVNDLCAweDgwMDAsCisJCQlzbG90X3dpZHRoXzI1KTsKIAkJYnJlYWs7CiAJY2FzZSBSVDU2NzdfQUlGMjoKLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgUlQ1Njc3X1RETTJfQ1RSTDEsIDB4MWYwMCwgdmFsKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY3Ny0+cmVnbWFwLCBSVDU2NzdfVERNMl9DVFJMMSwgMHgxZjAwLAorCQkJdmFsKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHJ0NTY3Ny0+cmVnbWFwLCBSVDU2NzdfRElHX01JU0MsIDB4ODAsCisJCQlzbG90X3dpZHRoXzI1KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC00NzUyLDYgKzQ5NDAsMTEgQEAKIAkJCQkJUlQ1Njc3X0dQSU81X0RJUl9PVVQpOwogCX0KIAorCWlmIChydDU2NzctPnBkYXRhLm1pY2JpYXMxX3ZkZF8zdjMpCisJCXJlZ21hcF91cGRhdGVfYml0cyhydDU2NzctPnJlZ21hcCwgUlQ1Njc3X01JQ0JJQVMsCisJCQlSVDU2NzdfTUlDQklBUzFfQ1RSTF9WRERfTUFTSywKKwkJCVJUNTY3N19NSUNCSUFTMV9DVFJMX1ZERF8zXzNWKTsKKwogCXJ0NTY3N19pbml0X2dwaW8oaTJjKTsKIAlydDU2NzdfaW5pdF9pcnEoaTJjKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zZ3RsNTAwMC5jIGIvc291bmQvc29jL2NvZGVjcy9zZ3RsNTAwMC5jCmluZGV4IDI5Y2Y3Y2UuLmUxODJlNjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvc2d0bDUwMDAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3NndGw1MDAwLmMKQEAgLTE1NSwxOCArMTU1LDE5IEBACiBzdGF0aWMgaW50IG1pY19iaWFzX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNndGw1MDAwX3ByaXYgKnNndGw1MDAwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YSh3LT5jb2RlYyk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCXN0cnVjdCBzZ3RsNTAwMF9wcml2ICpzZ3RsNTAwMCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgogCQkvKiBjaGFuZ2UgbWljIGJpYXMgcmVzaXN0b3IgKi8KLQkJc25kX3NvY191cGRhdGVfYml0cyh3LT5jb2RlYywgU0dUTDUwMDBfQ0hJUF9NSUNfQ1RSTCwKKwkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU0dUTDUwMDBfQ0hJUF9NSUNfQ1RSTCwKIAkJCVNHVEw1MDAwX0JJQVNfUl9NQVNLLAogCQkJc2d0bDUwMDAtPm1pY2JpYXNfcmVzaXN0b3IgPDwgU0dUTDUwMDBfQklBU19SX1NISUZUKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1EOgotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKHctPmNvZGVjLCBTR1RMNTAwMF9DSElQX01JQ19DVFJMLAorCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBTR1RMNTAwMF9DSElQX01JQ19DVFJMLAogCQkJCVNHVEw1MDAwX0JJQVNfUl9NQVNLLCAwKTsKIAkJYnJlYWs7CiAJfQpAQCAtMTgxLDExICsxODIsMTIgQEAKIHN0YXRpYyBpbnQgcG93ZXJfdmFnX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCWNvbnN0IHUzMiBtYXNrID0gU0dUTDUwMDBfREFDX1BPV0VSVVAgfCBTR1RMNTAwMF9BRENfUE9XRVJVUDsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKLQkJc25kX3NvY191cGRhdGVfYml0cyh3LT5jb2RlYywgU0dUTDUwMDBfQ0hJUF9BTkFfUE9XRVIsCisJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFNHVEw1MDAwX0NISVBfQU5BX1BPV0VSLAogCQkJU0dUTDUwMDBfVkFHX1BPV0VSVVAsIFNHVEw1MDAwX1ZBR19QT1dFUlVQKTsKIAkJYnJlYWs7CiAKQEAgLTE5NSw5ICsxOTcsOSBAQAogCQkgKiBvcGVyYXRpb25hbCB0byBwcmV2ZW50IGluYWR2ZXJ0ZW50bHkgc3RhcnZpbmcgdGhlCiAJCSAqIG90aGVyIG9uZSBvZiB0aGVtLgogCQkgKi8KLQkJaWYgKChzbmRfc29jX3JlYWQody0+Y29kZWMsIFNHVEw1MDAwX0NISVBfQU5BX1BPV0VSKSAmCisJCWlmICgoc25kX3NvY19yZWFkKGNvZGVjLCBTR1RMNTAwMF9DSElQX0FOQV9QT1dFUikgJgogCQkJCW1hc2spICE9IG1hc2spIHsKLQkJCXNuZF9zb2NfdXBkYXRlX2JpdHMody0+Y29kZWMsIFNHVEw1MDAwX0NISVBfQU5BX1BPV0VSLAorCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU0dUTDUwMDBfQ0hJUF9BTkFfUE9XRVIsCiAJCQkJU0dUTDUwMDBfVkFHX1BPV0VSVVAsIDApOwogCQkJbXNsZWVwKDQwMCk7CiAJCX0KQEAgLTQ4MywyMSArNDg1LDIxIEBACiAJLyogc2V0dGluZyBpMnMgZGF0YSBmb3JtYXQgKi8KIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0ZPUk1BVF9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQToKLQkJaTJzY3RsIHw9IFNHVEw1MDAwX0kyU19NT0RFX1BDTTsKKwkJaTJzY3RsIHw9IFNHVEw1MDAwX0kyU19NT0RFX1BDTSA8PCBTR1RMNTAwMF9JMlNfTU9ERV9TSElGVDsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9EU1BfQjoKLQkJaTJzY3RsIHw9IFNHVEw1MDAwX0kyU19NT0RFX1BDTTsKKwkJaTJzY3RsIHw9IFNHVEw1MDAwX0kyU19NT0RFX1BDTSA8PCBTR1RMNTAwMF9JMlNfTU9ERV9TSElGVDsKIAkJaTJzY3RsIHw9IFNHVEw1MDAwX0kyU19MUkFMSUdOOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFJRk1UX0kyUzoKLQkJaTJzY3RsIHw9IFNHVEw1MDAwX0kyU19NT0RFX0kyU19MSjsKKwkJaTJzY3RsIHw9IFNHVEw1MDAwX0kyU19NT0RFX0kyU19MSiA8PCBTR1RMNTAwMF9JMlNfTU9ERV9TSElGVDsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9SSUdIVF9KOgotCQlpMnNjdGwgfD0gU0dUTDUwMDBfSTJTX01PREVfUko7CisJCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTU9ERV9SSiA8PCBTR1RMNTAwMF9JMlNfTU9ERV9TSElGVDsKIAkJaTJzY3RsIHw9IFNHVEw1MDAwX0kyU19MUlBPTDsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9MRUZUX0o6Ci0JCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTU9ERV9JMlNfTEo7CisJCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTU9ERV9JMlNfTEogPDwgU0dUTDUwMDBfSTJTX01PREVfU0hJRlQ7CiAJCWkyc2N0bCB8PSBTR1RMNTAwMF9JMlNfTFJBTElHTjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE0NjIsNiArMTQ2NCw5IEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCS8qIE5lZWQgOCBjbG9ja3MgYmVmb3JlIEkyQyBhY2Nlc3NlcyAqLworCXVkZWxheSgxKTsKKwogCS8qIHJlYWQgY2hpcCBpbmZvcm1hdGlvbiAqLwogCXJldCA9IHJlZ21hcF9yZWFkKHNndGw1MDAwLT5yZWdtYXAsIFNHVEw1MDAwX0NISVBfSUQsICZyZWcpOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3NuOTUwMzEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvc245NTAzMS5jCmluZGV4IDFmNDUxYTEuLjQ3YjI1N2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvc245NTAzMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc245NTAzMS5jCkBAIC0yMzMsMTYgKzIzMywxOCBAQAogc3RhdGljIGludCBzbjk1MDMxX3Zoc19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCiAJaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpIHsKIAkJcHJfZGVidWcoIlZIUyBTTkRfU09DX0RBUE1fRVZFTlRfT04gZG9pbmcgcmFpbCBzdGFydHVwIG5vd1xuIik7CiAJCS8qIHBvd2VyIHVwIHRoZSByYWlsICovCi0JCXNuZF9zb2Nfd3JpdGUody0+Y29kZWMsIFNOOTUwMzFfVkhTUCwgMHgzRCk7Ci0JCXNuZF9zb2Nfd3JpdGUody0+Y29kZWMsIFNOOTUwMzFfVkhTTiwgMHgzRik7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNOOTUwMzFfVkhTUCwgMHgzRCk7CisJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNOOTUwMzFfVkhTTiwgMHgzRik7CiAJCW1zbGVlcCgxKTsKIAl9IGVsc2UgaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PRkYoZXZlbnQpKSB7CiAJCXByX2RlYnVnKCJWSFMgU05EX1NPQ19EQVBNX0VWRU5UX09GRiBkb2luZyByYWlsIHNodXRkb3duXG4iKTsKLQkJc25kX3NvY193cml0ZSh3LT5jb2RlYywgU045NTAzMV9WSFNQLCAweEM0KTsKLQkJc25kX3NvY193cml0ZSh3LT5jb2RlYywgU045NTAzMV9WSFNOLCAweDA0KTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9WSFNQLCAweEM0KTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9WSFNOLCAweDA0KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNTAsMTQgKzI1MiwxNiBAQAogc3RhdGljIGludCBzbjk1MDMxX3ZpaGZfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKKwogCWlmIChTTkRfU09DX0RBUE1fRVZFTlRfT04oZXZlbnQpKSB7CiAJCXByX2RlYnVnKCJWSUhGIFNORF9TT0NfREFQTV9FVkVOVF9PTiBkb2luZyByYWlsIHN0YXJ0dXAgbm93XG4iKTsKIAkJLyogcG93ZXIgdXAgdGhlIHJhaWwgKi8KLQkJc25kX3NvY193cml0ZSh3LT5jb2RlYywgU045NTAzMV9WSUhGLCAweDI3KTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9WSUhGLCAweDI3KTsKIAkJbXNsZWVwKDEpOwogCX0gZWxzZSBpZiAoU05EX1NPQ19EQVBNX0VWRU5UX09GRihldmVudCkpIHsKIAkJcHJfZGVidWcoIlZJSEYgU05EX1NPQ19EQVBNX0VWRU5UX09GRiBkb2luZyByYWlsIHNodXRkb3duXG4iKTsKLQkJc25kX3NvY193cml0ZSh3LT5jb2RlYywgU045NTAzMV9WSUhGLCAweDI0KTsKKwkJc25kX3NvY193cml0ZShjb2RlYywgU045NTAzMV9WSUhGLCAweDI0KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjUsNiArMjY5LDcgQEAKIHN0YXRpYyBpbnQgc245NTAzMV9kbWljMTJfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprLCBpbnQgZXZlbnQpCiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXVuc2lnbmVkIGludCBsZG8gPSAwLCBjbGtfZGlyID0gMCwgZGF0YV9kaXIgPSAwOwogCiAJaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpIHsKQEAgLTI3MywxNSArMjc4LDE2IEBACiAJCWRhdGFfZGlyID0gQklUKDcpOwogCX0KIAkvKiBwcm9ncmFtIERNSUMgTERPLCBjbG9jayBhbmQgc2V0IGNsb2NrICovCi0Jc25kX3NvY191cGRhdGVfYml0cyh3LT5jb2RlYywgU045NTAzMV9NSUNCSUFTLCBCSVQoNSl8QklUKDQpLCBsZG8pOwotCXNuZF9zb2NfdXBkYXRlX2JpdHMody0+Y29kZWMsIFNOOTUwMzFfRE1JQ0JVRjAxMjMsIEJJVCgwKSwgY2xrX2Rpcik7Ci0Jc25kX3NvY191cGRhdGVfYml0cyh3LT5jb2RlYywgU045NTAzMV9ETUlDQlVGMDEyMywgQklUKDcpLCBkYXRhX2Rpcik7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU045NTAzMV9NSUNCSUFTLCBCSVQoNSl8QklUKDQpLCBsZG8pOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFNOOTUwMzFfRE1JQ0JVRjAxMjMsIEJJVCgwKSwgY2xrX2Rpcik7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU045NTAzMV9ETUlDQlVGMDEyMywgQklUKDcpLCBkYXRhX2Rpcik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc245NTAzMV9kbWljMzRfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQlzdHJ1Y3Qgc25kX2tjb250cm9sICprLCBpbnQgZXZlbnQpCiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXVuc2lnbmVkIGludCBsZG8gPSAwLCBjbGtfZGlyID0gMCwgZGF0YV9kaXIgPSAwOwogCiAJaWYgKFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpIHsKQEAgLTI5MCwyMiArMjk2LDIzIEBACiAJCWRhdGFfZGlyID0gQklUKDEpOwogCX0KIAkvKiBwcm9ncmFtIERNSUMgTERPLCBjbG9jayBhbmQgc2V0IGNsb2NrICovCi0Jc25kX3NvY191cGRhdGVfYml0cyh3LT5jb2RlYywgU045NTAzMV9NSUNCSUFTLCBCSVQoNSl8QklUKDQpLCBsZG8pOwotCXNuZF9zb2NfdXBkYXRlX2JpdHMody0+Y29kZWMsIFNOOTUwMzFfRE1JQ0JVRjAxMjMsIEJJVCgyKSwgY2xrX2Rpcik7Ci0Jc25kX3NvY191cGRhdGVfYml0cyh3LT5jb2RlYywgU045NTAzMV9ETUlDQlVGNDUsIEJJVCgxKSwgZGF0YV9kaXIpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFNOOTUwMzFfTUlDQklBUywgQklUKDUpfEJJVCg0KSwgbGRvKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBTTjk1MDMxX0RNSUNCVUYwMTIzLCBCSVQoMiksIGNsa19kaXIpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFNOOTUwMzFfRE1JQ0JVRjQ1LCBCSVQoMSksIGRhdGFfZGlyKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbjk1MDMxX2RtaWM1Nl9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmssIGludCBldmVudCkKIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJdW5zaWduZWQgaW50IGxkbyA9IDA7CiAKIAlpZiAoU05EX1NPQ19EQVBNX0VWRU5UX09OKGV2ZW50KSkKIAkJbGRvID0gQklUKDcpfEJJVCg2KTsKIAogCS8qIHByb2dyYW0gRE1JQyBMRE8gKi8KLQlzbmRfc29jX3VwZGF0ZV9iaXRzKHctPmNvZGVjLCBTTjk1MDMxX01JQ0JJQVMsIEJJVCg3KXxCSVQoNiksIGxkbyk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU045NTAzMV9NSUNCSUFTLCBCSVQoNyl8QklUKDYpLCBsZG8pOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3N0YTMyeC5jIGIvc291bmQvc29jL2NvZGVjcy9zdGEzMnguYwppbmRleCA3ZTE4MjAwLi4zYTEzNDNmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3N0YTMyeC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc3RhMzJ4LmMKQEAgLTI0LDggKzI0LDExIEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KQEAgLTEwMiw2ICsxMDUsMzUgQEAKIAl7IDB4MmMsIDB4MGMgfSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIHN0YTMyeF93cml0ZV9yZWdzX3JhbmdlW10gPSB7CisJcmVnbWFwX3JlZ19yYW5nZShTVEEzMlhfQ09ORkEsICBTVEEzMlhfQVVUTzIpLAorCXJlZ21hcF9yZWdfcmFuZ2UoU1RBMzJYX0MxQ0ZHLCAgU1RBMzJYX0ZEUkMyKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX3JhbmdlIHN0YTMyeF9yZWFkX3JlZ3NfcmFuZ2VbXSA9IHsKKwlyZWdtYXBfcmVnX3JhbmdlKFNUQTMyWF9DT05GQSwgIFNUQTMyWF9BVVRPMiksCisJcmVnbWFwX3JlZ19yYW5nZShTVEEzMlhfQzFDRkcsICBTVEEzMlhfRkRSQzIpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByZWdtYXBfcmFuZ2Ugc3RhMzJ4X3ZvbGF0aWxlX3JlZ3NfcmFuZ2VbXSA9IHsKKwlyZWdtYXBfcmVnX3JhbmdlKFNUQTMyWF9DRkFERFIyLCBTVEEzMlhfQ0ZVRCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgc3RhMzJ4X3dyaXRlX3JlZ3MgPSB7CisJLnllc19yYW5nZXMgPQlzdGEzMnhfd3JpdGVfcmVnc19yYW5nZSwKKwkubl95ZXNfcmFuZ2VzID0JQVJSQVlfU0laRShzdGEzMnhfd3JpdGVfcmVnc19yYW5nZSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgc3RhMzJ4X3JlYWRfcmVncyA9IHsKKwkueWVzX3JhbmdlcyA9CXN0YTMyeF9yZWFkX3JlZ3NfcmFuZ2UsCisJLm5feWVzX3JhbmdlcyA9CUFSUkFZX1NJWkUoc3RhMzJ4X3JlYWRfcmVnc19yYW5nZSksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgc3RhMzJ4X3ZvbGF0aWxlX3JlZ3MgPSB7CisJLnllc19yYW5nZXMgPQlzdGEzMnhfdm9sYXRpbGVfcmVnc19yYW5nZSwKKwkubl95ZXNfcmFuZ2VzID0JQVJSQVlfU0laRShzdGEzMnhfdm9sYXRpbGVfcmVnc19yYW5nZSksCit9OworCiAvKiByZWd1bGF0b3IgcG93ZXIgc3VwcGx5IG5hbWVzICovCiBzdGF0aWMgY29uc3QgY2hhciAqc3RhMzJ4X3N1cHBseV9uYW1lc1tdID0gewogCSJWZGRhIiwJLyogYW5hbG9nIHN1cHBseSwgMy4zVlYgKi8KQEAgLTEyMiw2ICsxNTQsOCBAQAogCXUzMiBjb2VmX3NoYWRvd1tTVEEzMlhfQ09FRl9DT1VOVF07CiAJc3RydWN0IGRlbGF5ZWRfd29yayB3YXRjaGRvZ193b3JrOwogCWludCBzaHV0ZG93bjsKKwlzdHJ1Y3QgZ3Bpb19kZXNjICpncGlvZF9ucmVzZXQ7CisJc3RydWN0IG11dGV4IGNvZWZmX2xvY2s7CiB9OwogCiBzdGF0aWMgY29uc3QgREVDTEFSRV9UTFZfREJfU0NBTEUobXZvbF90bHYsIC0xMjcwMCwgNTAsIDEpOwpAQCAtMTU1LDM3ICsxODksMzIgQEAKIAkiMC41MTE2IiwgIjAuMTM3MCIsICIwLjA3NDQiLCAiMC4wNDk5IiwgIjAuMDM2MCIsICIwLjAyOTkiLAogCSIwLjAyNjQiLCAiMC4wMjA4IiwgIjAuMDE5OCIsICIwLjAxNzIiLCAiMC4wMTQ3IiwgIjAuMDEzNyIsCiAJIjAuMDEzNCIsICIwLjAxMTciLCAiMC4wMTEwIiwgIjAuMDEwNCIgfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdGEzMnhfbGltaXRlcl9hY19hdHRhY2tfdGx2W10gPSB7Ci0JVExWX0RCX1JBTkdFX0hFQUQoMiksCitzdGF0aWMgREVDTEFSRV9UTFZfREJfUkFOR0Uoc3RhMzJ4X2xpbWl0ZXJfYWNfYXR0YWNrX3RsdiwKIAkwLCA3LCBUTFZfREJfU0NBTEVfSVRFTSgtMTIwMCwgMjAwLCAwKSwKIAk4LCAxNiwgVExWX0RCX1NDQUxFX0lURU0oMzAwLCAxMDAsIDApLAotfTsKKyk7CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3RhMzJ4X2xpbWl0ZXJfYWNfcmVsZWFzZV90bHZbXSA9IHsKLQlUTFZfREJfUkFOR0VfSEVBRCg1KSwKK3N0YXRpYyBERUNMQVJFX1RMVl9EQl9SQU5HRShzdGEzMnhfbGltaXRlcl9hY19yZWxlYXNlX3RsdiwKIAkwLCAwLCBUTFZfREJfU0NBTEVfSVRFTShUTFZfREJfR0FJTl9NVVRFLCAwLCAwKSwKIAkxLCAxLCBUTFZfREJfU0NBTEVfSVRFTSgtMjkwMCwgMCwgMCksCiAJMiwgMiwgVExWX0RCX1NDQUxFX0lURU0oLTIwMDAsIDAsIDApLAogCTMsIDgsIFRMVl9EQl9TQ0FMRV9JVEVNKC0xNDAwLCAyMDAsIDApLAogCTgsIDE2LCBUTFZfREJfU0NBTEVfSVRFTSgtNzAwLCAxMDAsIDApLAotfTsKKyk7CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3RhMzJ4X2xpbWl0ZXJfZHJjX2F0dGFja190bHZbXSA9IHsKLQlUTFZfREJfUkFOR0VfSEVBRCgzKSwKK3N0YXRpYyBERUNMQVJFX1RMVl9EQl9SQU5HRShzdGEzMnhfbGltaXRlcl9kcmNfYXR0YWNrX3RsdiwKIAkwLCA3LCBUTFZfREJfU0NBTEVfSVRFTSgtMzEwMCwgMjAwLCAwKSwKIAk4LCAxMywgVExWX0RCX1NDQUxFX0lURU0oLTE2MDAsIDEwMCwgMCksCiAJMTQsIDE2LCBUTFZfREJfU0NBTEVfSVRFTSgtMTAwMCwgMzAwLCAwKSwKLX07CispOwogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHN0YTMyeF9saW1pdGVyX2RyY19yZWxlYXNlX3RsdltdID0gewotCVRMVl9EQl9SQU5HRV9IRUFEKDUpLAorc3RhdGljIERFQ0xBUkVfVExWX0RCX1JBTkdFKHN0YTMyeF9saW1pdGVyX2RyY19yZWxlYXNlX3RsdiwKIAkwLCAwLCBUTFZfREJfU0NBTEVfSVRFTShUTFZfREJfR0FJTl9NVVRFLCAwLCAwKSwKIAkxLCAyLCBUTFZfREJfU0NBTEVfSVRFTSgtMzgwMCwgMjAwLCAwKSwKIAkzLCA0LCBUTFZfREJfU0NBTEVfSVRFTSgtMzMwMCwgMjAwLCAwKSwKIAk1LCAxMiwgVExWX0RCX1NDQUxFX0lURU0oLTMwMDAsIDIwMCwgMCksCiAJMTMsIDE2LCBUTFZfREJfU0NBTEVfSVRFTSgtMTUwMCwgMzAwLCAwKSwKLX07CispOwogCiBzdGF0aWMgU09DX0VOVU1fU0lOR0xFX0RFQ0woc3RhMzJ4X2RyY19hY19lbnVtLAogCQkJICAgIFNUQTMyWF9DT05GRCwgU1RBMzJYX0NPTkZEX0RSQ19TSElGVCwKQEAgLTI0NCwyOSArMjczLDQyIEBACiAJCQkJICBzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2tjb250cm9sX2NvZGVjKGtjb250cm9sKTsKKwlzdHJ1Y3Qgc3RhMzJ4X3ByaXYgKnN0YTMyeCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCWludCBudW1jb2VmID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgPj4gMTY7CiAJaW50IGluZGV4ID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmZmY7Ci0JdW5zaWduZWQgaW50IGNmdWQ7Ci0JaW50IGk7CisJdW5zaWduZWQgaW50IGNmdWQsIHZhbDsKKwlpbnQgaSwgcmV0ID0gMDsKKworCW11dGV4X2xvY2soJnN0YTMyeC0+Y29lZmZfbG9jayk7CiAKIAkvKiBwcmVzZXJ2ZSByZXNlcnZlZCBiaXRzIGluIFNUQTMyWF9DRlVEICovCi0JY2Z1ZCA9IHNuZF9zb2NfcmVhZChjb2RlYywgU1RBMzJYX0NGVUQpICYgMHhmMDsKLQkvKiBjaGlwIGRvY3VtZW50YXRpb24gZG9lcyBub3Qgc2F5IGlmIHRoZSBiaXRzIGFyZSBzZWxmIGNsZWFyaW5nLAotCSAqIHNvIGRvIGl0IGV4cGxpY2l0bHkgKi8KLQlzbmRfc29jX3dyaXRlKGNvZGVjLCBTVEEzMlhfQ0ZVRCwgY2Z1ZCk7CisJcmVnbWFwX3JlYWQoc3RhMzJ4LT5yZWdtYXAsIFNUQTMyWF9DRlVELCAmY2Z1ZCk7CisJY2Z1ZCAmPSAweGYwOworCS8qCisJICogY2hpcCBkb2N1bWVudGF0aW9uIGRvZXMgbm90IHNheSBpZiB0aGUgYml0cyBhcmUgc2VsZiBjbGVhcmluZywKKwkgKiBzbyBkbyBpdCBleHBsaWNpdGx5CisJICovCisJcmVnbWFwX3dyaXRlKHN0YTMyeC0+cmVnbWFwLCBTVEEzMlhfQ0ZVRCwgY2Z1ZCk7CiAKLQlzbmRfc29jX3dyaXRlKGNvZGVjLCBTVEEzMlhfQ0ZBRERSMiwgaW5kZXgpOwotCWlmIChudW1jb2VmID09IDEpCi0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNUQTMyWF9DRlVELCBjZnVkIHwgMHgwNCk7Ci0JZWxzZSBpZiAobnVtY29lZiA9PSA1KQotCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBTVEEzMlhfQ0ZVRCwgY2Z1ZCB8IDB4MDgpOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yIChpID0gMDsgaSA8IDMgKiBudW1jb2VmOyBpKyspCi0JCXVjb250cm9sLT52YWx1ZS5ieXRlcy5kYXRhW2ldID0KLQkJCXNuZF9zb2NfcmVhZChjb2RlYywgU1RBMzJYX0IxQ0YxICsgaSk7CisJcmVnbWFwX3dyaXRlKHN0YTMyeC0+cmVnbWFwLCBTVEEzMlhfQ0ZBRERSMiwgaW5kZXgpOworCWlmIChudW1jb2VmID09IDEpIHsKKwkJcmVnbWFwX3dyaXRlKHN0YTMyeC0+cmVnbWFwLCBTVEEzMlhfQ0ZVRCwgY2Z1ZCB8IDB4MDQpOworCX0gZWxzZSBpZiAobnVtY29lZiA9PSA1KSB7CisJCXJlZ21hcF93cml0ZShzdGEzMngtPnJlZ21hcCwgU1RBMzJYX0NGVUQsIGNmdWQgfCAweDA4KTsKKwl9IGVsc2UgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGV4aXRfdW5sb2NrOworCX0KIAotCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCAzICogbnVtY29lZjsgaSsrKSB7CisJCXJlZ21hcF9yZWFkKHN0YTMyeC0+cmVnbWFwLCBTVEEzMlhfQjFDRjEgKyBpLCAmdmFsKTsKKwkJdWNvbnRyb2wtPnZhbHVlLmJ5dGVzLmRhdGFbaV0gPSB2YWw7CisJfQorCitleGl0X3VubG9jazoKKwltdXRleF91bmxvY2soJnN0YTMyeC0+Y29lZmZfbG9jayk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHN0YTMyeF9jb2VmZmljaWVudF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCkBAIC0yODAsMjQgKzMyMiwyNyBAQAogCWludCBpOwogCiAJLyogcHJlc2VydmUgcmVzZXJ2ZWQgYml0cyBpbiBTVEEzMlhfQ0ZVRCAqLwotCWNmdWQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFNUQTMyWF9DRlVEKSAmIDB4ZjA7Ci0JLyogY2hpcCBkb2N1bWVudGF0aW9uIGRvZXMgbm90IHNheSBpZiB0aGUgYml0cyBhcmUgc2VsZiBjbGVhcmluZywKLQkgKiBzbyBkbyBpdCBleHBsaWNpdGx5ICovCi0Jc25kX3NvY193cml0ZShjb2RlYywgU1RBMzJYX0NGVUQsIGNmdWQpOworCXJlZ21hcF9yZWFkKHN0YTMyeC0+cmVnbWFwLCBTVEEzMlhfQ0ZVRCwgJmNmdWQpOworCWNmdWQgJj0gMHhmMDsKKwkvKgorCSAqIGNoaXAgZG9jdW1lbnRhdGlvbiBkb2VzIG5vdCBzYXkgaWYgdGhlIGJpdHMgYXJlIHNlbGYgY2xlYXJpbmcsCisJICogc28gZG8gaXQgZXhwbGljaXRseQorCSAqLworCXJlZ21hcF93cml0ZShzdGEzMngtPnJlZ21hcCwgU1RBMzJYX0NGVUQsIGNmdWQpOwogCi0Jc25kX3NvY193cml0ZShjb2RlYywgU1RBMzJYX0NGQUREUjIsIGluZGV4KTsKKwlyZWdtYXBfd3JpdGUoc3RhMzJ4LT5yZWdtYXAsIFNUQTMyWF9DRkFERFIyLCBpbmRleCk7CiAJZm9yIChpID0gMDsgaSA8IG51bWNvZWYgJiYgKGluZGV4ICsgaSA8IFNUQTMyWF9DT0VGX0NPVU5UKTsgaSsrKQogCQlzdGEzMngtPmNvZWZfc2hhZG93W2luZGV4ICsgaV0gPQogCQkJICAodWNvbnRyb2wtPnZhbHVlLmJ5dGVzLmRhdGFbMyAqIGldIDw8IDE2KQogCQkJfCAodWNvbnRyb2wtPnZhbHVlLmJ5dGVzLmRhdGFbMyAqIGkgKyAxXSA8PCA4KQogCQkJfCAodWNvbnRyb2wtPnZhbHVlLmJ5dGVzLmRhdGFbMyAqIGkgKyAyXSk7CiAJZm9yIChpID0gMDsgaSA8IDMgKiBudW1jb2VmOyBpKyspCi0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNUQTMyWF9CMUNGMSArIGksCi0JCQkgICAgICB1Y29udHJvbC0+dmFsdWUuYnl0ZXMuZGF0YVtpXSk7CisJCXJlZ21hcF93cml0ZShzdGEzMngtPnJlZ21hcCwgU1RBMzJYX0IxQ0YxICsgaSwKKwkJCSAgICAgdWNvbnRyb2wtPnZhbHVlLmJ5dGVzLmRhdGFbaV0pOwogCWlmIChudW1jb2VmID09IDEpCi0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNUQTMyWF9DRlVELCBjZnVkIHwgMHgwMSk7CisJCXJlZ21hcF93cml0ZShzdGEzMngtPnJlZ21hcCwgU1RBMzJYX0NGVUQsIGNmdWQgfCAweDAxKTsKIAllbHNlIGlmIChudW1jb2VmID09IDUpCi0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNUQTMyWF9DRlVELCBjZnVkIHwgMHgwMik7CisJCXJlZ21hcF93cml0ZShzdGEzMngtPnJlZ21hcCwgU1RBMzJYX0NGVUQsIGNmdWQgfCAweDAyKTsKIAllbHNlCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC0zMTEsMjAgKzM1NiwyMyBAQAogCWludCBpOwogCiAJLyogcHJlc2VydmUgcmVzZXJ2ZWQgYml0cyBpbiBTVEEzMlhfQ0ZVRCAqLwotCWNmdWQgPSBzbmRfc29jX3JlYWQoY29kZWMsIFNUQTMyWF9DRlVEKSAmIDB4ZjA7CisJcmVnbWFwX3JlYWQoc3RhMzJ4LT5yZWdtYXAsIFNUQTMyWF9DRlVELCAmY2Z1ZCk7CisJY2Z1ZCAmPSAweGYwOwogCiAJZm9yIChpID0gMDsgaSA8IFNUQTMyWF9DT0VGX0NPVU5UOyBpKyspIHsKLQkJc25kX3NvY193cml0ZShjb2RlYywgU1RBMzJYX0NGQUREUjIsIGkpOwotCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBTVEEzMlhfQjFDRjEsCi0JCQkgICAgICAoc3RhMzJ4LT5jb2VmX3NoYWRvd1tpXSA+PiAxNikgJiAweGZmKTsKLQkJc25kX3NvY193cml0ZShjb2RlYywgU1RBMzJYX0IxQ0YyLAotCQkJICAgICAgKHN0YTMyeC0+Y29lZl9zaGFkb3dbaV0gPj4gOCkgJiAweGZmKTsKLQkJc25kX3NvY193cml0ZShjb2RlYywgU1RBMzJYX0IxQ0YzLAotCQkJICAgICAgKHN0YTMyeC0+Y29lZl9zaGFkb3dbaV0pICYgMHhmZik7Ci0JCS8qIGNoaXAgZG9jdW1lbnRhdGlvbiBkb2VzIG5vdCBzYXkgaWYgdGhlIGJpdHMgYXJlCi0JCSAqIHNlbGYtY2xlYXJpbmcsIHNvIGRvIGl0IGV4cGxpY2l0bHkgKi8KLQkJc25kX3NvY193cml0ZShjb2RlYywgU1RBMzJYX0NGVUQsIGNmdWQpOwotCQlzbmRfc29jX3dyaXRlKGNvZGVjLCBTVEEzMlhfQ0ZVRCwgY2Z1ZCB8IDB4MDEpOworCQlyZWdtYXBfd3JpdGUoc3RhMzJ4LT5yZWdtYXAsIFNUQTMyWF9DRkFERFIyLCBpKTsKKwkJcmVnbWFwX3dyaXRlKHN0YTMyeC0+cmVnbWFwLCBTVEEzMlhfQjFDRjEsCisJCQkgICAgIChzdGEzMngtPmNvZWZfc2hhZG93W2ldID4+IDE2KSAmIDB4ZmYpOworCQlyZWdtYXBfd3JpdGUoc3RhMzJ4LT5yZWdtYXAsIFNUQTMyWF9CMUNGMiwKKwkJCSAgICAgKHN0YTMyeC0+Y29lZl9zaGFkb3dbaV0gPj4gOCkgJiAweGZmKTsKKwkJcmVnbWFwX3dyaXRlKHN0YTMyeC0+cmVnbWFwLCBTVEEzMlhfQjFDRjMsCisJCQkgICAgIChzdGEzMngtPmNvZWZfc2hhZG93W2ldKSAmIDB4ZmYpOworCQkvKgorCQkgKiBjaGlwIGRvY3VtZW50YXRpb24gZG9lcyBub3Qgc2F5IGlmIHRoZSBiaXRzIGFyZQorCQkgKiBzZWxmLWNsZWFyaW5nLCBzbyBkbyBpdCBleHBsaWNpdGx5CisJCSAqLworCQlyZWdtYXBfd3JpdGUoc3RhMzJ4LT5yZWdtYXAsIFNUQTMyWF9DRlVELCBjZnVkKTsKKwkJcmVnbWFwX3dyaXRlKHN0YTMyeC0+cmVnbWFwLCBTVEEzMlhfQ0ZVRCwgY2Z1ZCB8IDB4MDEpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTMzNiwxMSArMzg0LDExIEBACiAJaW50IHJjOwogCiAJLyogbXV0ZSBkdXJpbmcgcmVnaXN0ZXIgc3luYyAqLwotCW11dGUgPSBzbmRfc29jX3JlYWQoY29kZWMsIFNUQTMyWF9NTVVURSk7Ci0Jc25kX3NvY193cml0ZShjb2RlYywgU1RBMzJYX01NVVRFLCBtdXRlIHwgU1RBMzJYX01NVVRFX01NVVRFKTsKKwlyZWdtYXBfcmVhZChzdGEzMngtPnJlZ21hcCwgU1RBMzJYX01NVVRFLCAmbXV0ZSk7CisJcmVnbWFwX3dyaXRlKHN0YTMyeC0+cmVnbWFwLCBTVEEzMlhfTU1VVEUsIG11dGUgfCBTVEEzMlhfTU1VVEVfTU1VVEUpOwogCXN0YTMyeF9zeW5jX2NvZWZfc2hhZG93KGNvZGVjKTsKIAlyYyA9IHJlZ2NhY2hlX3N5bmMoc3RhMzJ4LT5yZWdtYXApOwotCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNUQTMyWF9NTVVURSwgbXV0ZSk7CisJcmVnbWFwX3dyaXRlKHN0YTMyeC0+cmVnbWFwLCBTVEEzMlhfTU1VVEUsIG11dGUpOwogCXJldHVybiByYzsKIH0KIApAQCAtNTA4LDE3ICs1NTYsMTIgQEAKIH07CiAKIC8qIE1DTEsgdG8gZnMgY2xvY2sgcmF0aW9zICovCi1zdGF0aWMgc3RydWN0IHsKLQlpbnQgcmF0aW87Ci0JaW50IG1jczsKLX0gbWNsa19yYXRpb3NbM11bN10gPSB7Ci0JeyB7IDc2OCwgMCB9LCB7IDUxMiwgMSB9LCB7IDM4NCwgMiB9LCB7IDI1NiwgMyB9LAotCSAgeyAxMjgsIDQgfSwgeyA1NzYsIDUgfSwgeyAwLCAwIH0gfSwKLQl7IHsgMzg0LCAyIH0sIHsgMjU2LCAzIH0sIHsgMTkyLCA0IH0sIHsgMTI4LCA1IH0sIHs2NCwgMCB9LCB7IDAsIDAgfSB9LAotCXsgeyAzODQsIDIgfSwgeyAyNTYsIDMgfSwgeyAxOTIsIDQgfSwgeyAxMjgsIDUgfSwgezY0LCAwIH0sIHsgMCwgMCB9IH0sCitzdGF0aWMgaW50IG1jc19yYXRpb190YWJsZVszXVs3XSA9IHsKKwl7IDc2OCwgNTEyLCAzODQsIDI1NiwgMTI4LCA1NzYsIDAgfSwKKwl7IDM4NCwgMjU2LCAxOTIsIDEyOCwgIDY0LCAgIDAgfSwKKwl7IDM4NCwgMjU2LCAxOTIsIDEyOCwgIDY0LCAgIDAgfSwKIH07CiAKLQogLyoqCiAgKiBzdGEzMnhfc2V0X2RhaV9zeXNjbGsgLSBjb25maWd1cmUgTUNMSwogICogQGNvZGVjX2RhaTogdGhlIGNvZGVjIERBSQpAQCAtNTQzLDQ2ICs1ODYsMTAgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOwogCXN0cnVjdCBzdGEzMnhfcHJpdiAqc3RhMzJ4ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0JaW50IGksIGosIGlyLCBmczsKLQl1bnNpZ25lZCBpbnQgcmF0ZXMgPSAwOwotCXVuc2lnbmVkIGludCByYXRlX21pbiA9IC0xOwotCXVuc2lnbmVkIGludCByYXRlX21heCA9IDA7CiAKLQlwcl9kZWJ1ZygibWNsaz0ldVxuIiwgZnJlcSk7CisJZGV2X2RiZyhjb2RlYy0+ZGV2LCAibWNsaz0ldVxuIiwgZnJlcSk7CiAJc3RhMzJ4LT5tY2xrID0gZnJlcTsKIAotCWlmIChzdGEzMngtPm1jbGspIHsKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW50ZXJwb2xhdGlvbl9yYXRpb3MpOyBpKyspIHsKLQkJCWlyID0gaW50ZXJwb2xhdGlvbl9yYXRpb3NbaV0uaXI7Ci0JCQlmcyA9IGludGVycG9sYXRpb25fcmF0aW9zW2ldLmZzOwotCQkJZm9yIChqID0gMDsgbWNsa19yYXRpb3NbaXJdW2pdLnJhdGlvOyBqKyspIHsKLQkJCQlpZiAobWNsa19yYXRpb3NbaXJdW2pdLnJhdGlvICogZnMgPT0gZnJlcSkgewotCQkJCQlyYXRlcyB8PSBzbmRfcGNtX3JhdGVfdG9fcmF0ZV9iaXQoZnMpOwotCQkJCQlpZiAoZnMgPCByYXRlX21pbikKLQkJCQkJCXJhdGVfbWluID0gZnM7Ci0JCQkJCWlmIChmcyA+IHJhdGVfbWF4KQotCQkJCQkJcmF0ZV9tYXggPSBmczsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCS8qIEZJWE1FOiBzb2Mgc2hvdWxkIHN1cHBvcnQgYSByYXRlIGxpc3QgKi8KLQkJcmF0ZXMgJj0gflNORFJWX1BDTV9SQVRFX0tOT1Q7Ci0KLQkJaWYgKCFyYXRlcykgewotCQkJZGV2X2Vycihjb2RlYy0+ZGV2LCAiY291bGQgbm90IGZpbmQgYSB2YWxpZCBzYW1wbGUgcmF0ZVxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIGVuYWJsZSBhbGwgcG9zc2libGUgcmF0ZXMgKi8KLQkJcmF0ZXMgPSBTVEEzMlhfUkFURVM7Ci0JCXJhdGVfbWluID0gMzIwMDA7Ci0JCXJhdGVfbWF4ID0gMTkyMDAwOwotCX0KLQotCWNvZGVjX2RhaS0+ZHJpdmVyLT5wbGF5YmFjay5yYXRlcyA9IHJhdGVzOwotCWNvZGVjX2RhaS0+ZHJpdmVyLT5wbGF5YmFjay5yYXRlX21pbiA9IHJhdGVfbWluOwotCWNvZGVjX2RhaS0+ZHJpdmVyLT5wbGF5YmFjay5yYXRlX21heCA9IHJhdGVfbWF4OwogCXJldHVybiAwOwogfQogCkBAIC01OTksMTAgKzYwNiw3IEBACiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKIAlzdHJ1Y3Qgc3RhMzJ4X3ByaXYgKnN0YTMyeCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwotCXU4IGNvbmZiID0gc25kX3NvY19yZWFkKGNvZGVjLCBTVEEzMlhfQ09ORkIpOwotCi0JcHJfZGVidWcoIlxuIik7Ci0JY29uZmIgJj0gfihTVEEzMlhfQ09ORkJfQzFJTSB8IFNUQTMyWF9DT05GQl9DMklNKTsKKwl1OCBjb25mYiA9IDA7CiAKIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgpAQCAtNjMyLDggKzYzNiw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNUQTMyWF9DT05GQiwgY29uZmIpOwotCXJldHVybiAwOworCXJldHVybiByZWdtYXBfdXBkYXRlX2JpdHMoc3RhMzJ4LT5yZWdtYXAsIFNUQTMyWF9DT05GQiwKKwkJCQkgIFNUQTMyWF9DT05GQl9DMUlNIHwgU1RBMzJYX0NPTkZCX0MySU0sIGNvbmZiKTsKIH0KIAogLyoqCkBAIC02NTEsMzkgKzY1NSw1NSBAQAogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IGRhaS0+Y29kZWM7CiAJc3RydWN0IHN0YTMyeF9wcml2ICpzdGEzMnggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKLQl1bnNpZ25lZCBpbnQgcmF0ZTsKLQlpbnQgaSwgbWNzID0gLTEsIGlyID0gLTE7Ci0JdTggY29uZmEsIGNvbmZiOworCWludCBpLCBtY3MgPSAtRUlOVkFMLCBpciA9IC1FSU5WQUw7CisJdW5zaWduZWQgaW50IGNvbmZhLCBjb25mYjsKKwl1bnNpZ25lZCBpbnQgcmF0ZSwgcmF0aW87CisJaW50IHJldDsKKworCWlmICghc3RhMzJ4LT5tY2xrKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCSJzdGEzMngtPm1jbGsgaXMgdW5zZXQuIFVuYWJsZSB0byBkZXRlcm1pbmUgcmF0aW9cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAKIAlyYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKLQlwcl9kZWJ1ZygicmF0ZTogJXVcbiIsIHJhdGUpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGludGVycG9sYXRpb25fcmF0aW9zKTsgaSsrKQorCXJhdGlvID0gc3RhMzJ4LT5tY2xrIC8gcmF0ZTsKKwlkZXZfZGJnKGNvZGVjLT5kZXYsICJyYXRlOiAldSwgcmF0aW86ICV1XG4iLCByYXRlLCByYXRpbyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpbnRlcnBvbGF0aW9uX3JhdGlvcyk7IGkrKykgewogCQlpZiAoaW50ZXJwb2xhdGlvbl9yYXRpb3NbaV0uZnMgPT0gcmF0ZSkgewogCQkJaXIgPSBpbnRlcnBvbGF0aW9uX3JhdGlvc1tpXS5pcjsKIAkJCWJyZWFrOwogCQl9Ci0JaWYgKGlyIDwgMCkKKwl9CisKKwlpZiAoaXIgPCAwKSB7CisJCWRldl9lcnIoY29kZWMtPmRldiwgIlVuc3VwcG9ydGVkIHNhbXBsZXJhdGU6ICV1XG4iLCByYXRlKTsKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yIChpID0gMDsgbWNsa19yYXRpb3NbaXJdW2ldLnJhdGlvOyBpKyspCi0JCWlmIChtY2xrX3JhdGlvc1tpcl1baV0ucmF0aW8gKiByYXRlID09IHN0YTMyeC0+bWNsaykgewotCQkJbWNzID0gbWNsa19yYXRpb3NbaXJdW2ldLm1jczsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCWlmIChtY3NfcmF0aW9fdGFibGVbaXJdW2ldID09IHJhdGlvKSB7CisJCQltY3MgPSBpOwogCQkJYnJlYWs7CiAJCX0KLQlpZiAobWNzIDwgMCkKKwl9CisKKwlpZiAobWNzIDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJVbnJlc29sdmFibGUgcmF0aW86ICV1XG4iLCByYXRpbyk7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAotCWNvbmZhID0gc25kX3NvY19yZWFkKGNvZGVjLCBTVEEzMlhfQ09ORkEpOwotCWNvbmZhICY9IH4oU1RBMzJYX0NPTkZBX01DU19NQVNLIHwgU1RBMzJYX0NPTkZBX0lSX01BU0spOwotCWNvbmZhIHw9IChpciA8PCBTVEEzMlhfQ09ORkFfSVJfU0hJRlQpIHwgKG1jcyA8PCBTVEEzMlhfQ09ORkFfTUNTX1NISUZUKTsKKwljb25mYSA9IChpciA8PCBTVEEzMlhfQ09ORkFfSVJfU0hJRlQpIHwKKwkJKG1jcyA8PCBTVEEzMlhfQ09ORkFfTUNTX1NISUZUKTsKKwljb25mYiA9IDA7CiAKLQljb25mYiA9IHNuZF9zb2NfcmVhZChjb2RlYywgU1RBMzJYX0NPTkZCKTsKLQljb25mYiAmPSB+KFNUQTMyWF9DT05GQl9TQUlfTUFTSyB8IFNUQTMyWF9DT05GQl9TQUlGQik7CiAJc3dpdGNoIChwYXJhbXNfd2lkdGgocGFyYW1zKSkgewogCWNhc2UgMjQ6Ci0JCXByX2RlYnVnKCIyNGJpdFxuIik7CisJCWRldl9kYmcoY29kZWMtPmRldiwgIjI0Yml0XG4iKTsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSAzMjoKLQkJcHJfZGVidWcoIjI0Yml0IG9yIDMyYml0XG4iKTsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiMjRiaXQgb3IgMzJiaXRcbiIpOwogCQlzd2l0Y2ggKHN0YTMyeC0+Zm9ybWF0KSB7CiAJCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgogCQkJY29uZmIgfD0gMHgwOwpAQCAtNjk4LDcgKzcxOCw3IEBACiAKIAkJYnJlYWs7CiAJY2FzZSAyMDoKLQkJcHJfZGVidWcoIjIwYml0XG4iKTsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiMjBiaXRcbiIpOwogCQlzd2l0Y2ggKHN0YTMyeC0+Zm9ybWF0KSB7CiAJCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgogCQkJY29uZmIgfD0gMHg0OwpAQCAtNzEzLDcgKzczMyw3IEBACiAKIAkJYnJlYWs7CiAJY2FzZSAxODoKLQkJcHJfZGVidWcoIjE4Yml0XG4iKTsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiMThiaXRcbiIpOwogCQlzd2l0Y2ggKHN0YTMyeC0+Zm9ybWF0KSB7CiAJCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgogCQkJY29uZmIgfD0gMHg4OwpAQCAtNzI4LDcgKzc0OCw3IEBACiAKIAkJYnJlYWs7CiAJY2FzZSAxNjoKLQkJcHJfZGVidWcoIjE2Yml0XG4iKTsKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LCAiMTZiaXRcbiIpOwogCQlzd2l0Y2ggKHN0YTMyeC0+Zm9ybWF0KSB7CiAJCWNhc2UgU05EX1NPQ19EQUlGTVRfSTJTOgogCQkJY29uZmIgfD0gMHgwOwpAQCAtNzQ2LDggKzc2NiwzMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzbmRfc29jX3dyaXRlKGNvZGVjLCBTVEEzMlhfQ09ORkEsIGNvbmZhKTsKLQlzbmRfc29jX3dyaXRlKGNvZGVjLCBTVEEzMlhfQ09ORkIsIGNvbmZiKTsKKwlyZXQgPSByZWdtYXBfdXBkYXRlX2JpdHMoc3RhMzJ4LT5yZWdtYXAsIFNUQTMyWF9DT05GQSwKKwkJCQkgU1RBMzJYX0NPTkZBX01DU19NQVNLIHwgU1RBMzJYX0NPTkZBX0lSX01BU0ssCisJCQkJIGNvbmZhKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHJlZ21hcF91cGRhdGVfYml0cyhzdGEzMngtPnJlZ21hcCwgU1RBMzJYX0NPTkZCLAorCQkJCSBTVEEzMlhfQ09ORkJfU0FJX01BU0sgfCBTVEEzMlhfQ09ORkJfU0FJRkIsCisJCQkJIGNvbmZiKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YTMyeF9zdGFydHVwX3NlcXVlbmNlKHN0cnVjdCBzdGEzMnhfcHJpdiAqc3RhMzJ4KQoreworCWlmIChzdGEzMngtPmdwaW9kX25yZXNldCkgeworCQlncGlvZF9zZXRfdmFsdWUoc3RhMzJ4LT5ncGlvZF9ucmVzZXQsIDApOworCQltZGVsYXkoMSk7CisJCWdwaW9kX3NldF92YWx1ZShzdGEzMngtPmdwaW9kX25yZXNldCwgMSk7CisJCW1kZWxheSgxKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzY2LDE0ICs4MDgsMTQgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBzdGEzMnhfcHJpdiAqc3RhMzJ4ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKLQlwcl9kZWJ1ZygibGV2ZWwgPSAlZFxuIiwgbGV2ZWwpOworCWRldl9kYmcoY29kZWMtPmRldiwgImxldmVsID0gJWRcbiIsIGxldmVsKTsKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKIAkJLyogRnVsbCBwb3dlciBvbiAqLwotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBTVEEzMlhfQ09ORkYsCisJCXJlZ21hcF91cGRhdGVfYml0cyhzdGEzMngtPnJlZ21hcCwgU1RBMzJYX0NPTkZGLAogCQkJCSAgICBTVEEzMlhfQ09ORkZfUFdETiB8IFNUQTMyWF9DT05GRl9FQVBELAogCQkJCSAgICBTVEEzMlhfQ09ORkZfUFdETiB8IFNUQTMyWF9DT05GRl9FQVBEKTsKIAkJYnJlYWs7CkBAIC03ODgsMjUgKzgzMCwyOCBAQAogCQkJCXJldHVybiByZXQ7CiAJCQl9CiAKKwkJCXN0YTMyeF9zdGFydHVwX3NlcXVlbmNlKHN0YTMyeCk7CiAJCQlzdGEzMnhfY2FjaGVfc3luYyhjb2RlYyk7CiAJCQlzdGEzMnhfd2F0Y2hkb2dfc3RhcnQoc3RhMzJ4KTsKIAkJfQogCi0JCS8qIFBvd2VyIHVwIHRvIG11dGUgKi8KLQkJLyogRklYTUUgKi8KLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU1RBMzJYX0NPTkZGLAotCQkJCSAgICBTVEEzMlhfQ09ORkZfUFdETiB8IFNUQTMyWF9DT05GRl9FQVBELAotCQkJCSAgICBTVEEzMlhfQ09ORkZfUFdETiB8IFNUQTMyWF9DT05GRl9FQVBEKTsKKwkJLyogUG93ZXIgZG93biAqLworCQlyZWdtYXBfdXBkYXRlX2JpdHMoc3RhMzJ4LT5yZWdtYXAsIFNUQTMyWF9DT05GRiwKKwkJCQkgICBTVEEzMlhfQ09ORkZfUFdETiB8IFNUQTMyWF9DT05GRl9FQVBELAorCQkJCSAgIDApOwogCiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX0JJQVNfT0ZGOgogCQkvKiBUaGUgY2hpcCBydW5zIHRocm91Z2ggdGhlIHBvd2VyIGRvd24gc2VxdWVuY2UgZm9yIHVzLiAqLwotCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBTVEEzMlhfQ09ORkYsCi0JCQkJICAgIFNUQTMyWF9DT05GRl9QV0ROIHwgU1RBMzJYX0NPTkZGX0VBUEQsCi0JCQkJICAgIFNUQTMyWF9DT05GRl9QV0ROKTsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHN0YTMyeC0+cmVnbWFwLCBTVEEzMlhfQ09ORkYsCisJCQkJICAgU1RBMzJYX0NPTkZGX1BXRE4gfCBTVEEzMlhfQ09ORkZfRUFQRCwgMCk7CiAJCW1zbGVlcCgzMDApOwogCQlzdGEzMnhfd2F0Y2hkb2dfc3RvcChzdGEzMngpOworCisJCWlmIChzdGEzMngtPmdwaW9kX25yZXNldCkKKwkJCWdwaW9kX3NldF92YWx1ZShzdGEzMngtPmdwaW9kX25yZXNldCwgMCk7CisKIAkJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHN0YTMyeC0+c3VwcGxpZXMpLAogCQkJCSAgICAgICBzdGEzMngtPnN1cHBsaWVzKTsKIAkJYnJlYWs7CkBAIC04MjIsNyArODY3LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHN0YTMyeF9kYWkgPSB7Ci0JLm5hbWUgPSAiU1RBMzJYIiwKKwkubmFtZSA9ICJzdGEzMngtaGlmaSIsCiAJLnBsYXliYWNrID0gewogCQkuc3RyZWFtX25hbWUgPSAiUGxheWJhY2siLAogCQkuY2hhbm5lbHNfbWluID0gMiwKQEAgLTgzNiwxMSArODgxLDggQEAKIHN0YXRpYyBpbnQgc3RhMzJ4X3Byb2JlKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3Qgc3RhMzJ4X3ByaXYgKnN0YTMyeCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXN0cnVjdCBzdGEzMnhfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzdGEzMngtPnBkYXRhOwogCWludCBpLCByZXQgPSAwLCB0aGVybWFsID0gMDsKLQotCXN0YTMyeC0+Y29kZWMgPSBjb2RlYzsKLQlzdGEzMngtPnBkYXRhID0gZGV2X2dldF9wbGF0ZGF0YShjb2RlYy0+ZGV2KTsKLQogCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHN0YTMyeC0+c3VwcGxpZXMpLAogCQkJCSAgICBzdGEzMngtPnN1cHBsaWVzKTsKIAlpZiAocmV0ICE9IDApIHsKQEAgLTg0OCw1MCArODkwLDczIEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JLyogQ2hpcCBkb2N1bWVudGF0aW9uIGV4cGxpY2l0bHkgcmVxdWlyZXMgdGhhdCB0aGUgcmVzZXQgdmFsdWVzCi0JICogb2YgcmVzZXJ2ZWQgcmVnaXN0ZXIgYml0cyBhcmUgbGVmdCB1bnRvdWNoZWQuCi0JICogV3JpdGUgdGhlIHJlZ2lzdGVyIGRlZmF1bHQgdmFsdWUgdG8gY2FjaGUgZm9yIHJlc2VydmVkIHJlZ2lzdGVycywKLQkgKiBzbyB0aGUgd3JpdGUgdG8gdGhlIHRoZXNlIHJlZ2lzdGVycyBhcmUgc3VwcHJlc3NlZCBieSB0aGUgY2FjaGUKLQkgKiByZXN0b3JlIGNvZGUgd2hlbiBpdCBza2lwcyB3cml0ZXMgb2YgZGVmYXVsdCByZWdpc3RlcnMuCi0JICovCi0JcmVnY2FjaGVfY2FjaGVfb25seShzdGEzMngtPnJlZ21hcCwgdHJ1ZSk7Ci0Jc25kX3NvY193cml0ZShjb2RlYywgU1RBMzJYX0NPTkZDLCAweGMyKTsKLQlzbmRfc29jX3dyaXRlKGNvZGVjLCBTVEEzMlhfQ09ORkUsIDB4YzIpOwotCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNUQTMyWF9DT05GRiwgMHg1Yyk7Ci0Jc25kX3NvY193cml0ZShjb2RlYywgU1RBMzJYX01NVVRFLCAweDEwKTsKLQlzbmRfc29jX3dyaXRlKGNvZGVjLCBTVEEzMlhfQVVUTzEsIDB4NjApOwotCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFNUQTMyWF9BVVRPMywgMHgwMCk7Ci0Jc25kX3NvY193cml0ZShjb2RlYywgU1RBMzJYX0MzQ0ZHLCAweDQwKTsKLQlyZWdjYWNoZV9jYWNoZV9vbmx5KHN0YTMyeC0+cmVnbWFwLCBmYWxzZSk7CisJcmV0ID0gc3RhMzJ4X3N0YXJ0dXBfc2VxdWVuY2Uoc3RhMzJ4KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gc3RhcnR1cCBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KIAotCS8qIHNldCB0aGVybWFsIHdhcm5pbmcgYWRqdXN0bWVudCBhbmQgcmVjb3ZlcnkgKi8KLQlpZiAoIShzdGEzMngtPnBkYXRhLT50aGVybWFsX2NvbmYgJiBTVEEzMlhfVEhFUk1BTF9BREpVU1RNRU5UX0VOQUJMRSkpCisJLyogQ09ORkEgKi8KKwlpZiAoIXBkYXRhLT50aGVybWFsX3dhcm5pbmdfcmVjb3ZlcnkpCiAJCXRoZXJtYWwgfD0gU1RBMzJYX0NPTkZBX1RXQUI7Ci0JaWYgKCEoc3RhMzJ4LT5wZGF0YS0+dGhlcm1hbF9jb25mICYgU1RBMzJYX1RIRVJNQUxfUkVDT1ZFUllfRU5BQkxFKSkKKwlpZiAoIXBkYXRhLT50aGVybWFsX3dhcm5pbmdfYWRqdXN0bWVudCkKIAkJdGhlcm1hbCB8PSBTVEEzMlhfQ09ORkFfVFdSQjsKLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBTVEEzMlhfQ09ORkEsCi0JCQkgICAgU1RBMzJYX0NPTkZBX1RXQUIgfCBTVEEzMlhfQ09ORkFfVFdSQiwKLQkJCSAgICB0aGVybWFsKTsKKwlpZiAoIXBkYXRhLT5mYXVsdF9kZXRlY3RfcmVjb3ZlcnkpCisJCXRoZXJtYWwgfD0gU1RBMzJYX0NPTkZBX0ZEUkI7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKHN0YTMyeC0+cmVnbWFwLCBTVEEzMlhfQ09ORkEsCisJCQkgICBTVEEzMlhfQ09ORkFfVFdBQiB8IFNUQTMyWF9DT05GQV9UV1JCIHwKKwkJCSAgIFNUQTMyWF9DT05GQV9GRFJCLAorCQkJICAgdGhlcm1hbCk7CisKKwkvKiBDT05GQyAqLworCXJlZ21hcF91cGRhdGVfYml0cyhzdGEzMngtPnJlZ21hcCwgU1RBMzJYX0NPTkZDLAorCQkJICAgU1RBMzJYX0NPTkZDX0NTWl9NQVNLLAorCQkJICAgcGRhdGEtPmRyb3BfY29tcGVuc2F0aW9uX25zCisJCQkJPDwgU1RBMzJYX0NPTkZDX0NTWl9TSElGVCk7CisKKwkvKiBDT05GRSAqLworCXJlZ21hcF91cGRhdGVfYml0cyhzdGEzMngtPnJlZ21hcCwgU1RBMzJYX0NPTkZFLAorCQkJICAgU1RBMzJYX0NPTkZFX01QQ1YsCisJCQkgICBwZGF0YS0+bWF4X3Bvd2VyX3VzZV9tcGNjID8KKwkJCQlTVEEzMlhfQ09ORkVfTVBDViA6IDApOworCXJlZ21hcF91cGRhdGVfYml0cyhzdGEzMngtPnJlZ21hcCwgU1RBMzJYX0NPTkZFLAorCQkJICAgU1RBMzJYX0NPTkZFX01QQywKKwkJCSAgIHBkYXRhLT5tYXhfcG93ZXJfY29ycmVjdGlvbiA/CisJCQkJU1RBMzJYX0NPTkZFX01QQyA6IDApOworCXJlZ21hcF91cGRhdGVfYml0cyhzdGEzMngtPnJlZ21hcCwgU1RBMzJYX0NPTkZFLAorCQkJICAgU1RBMzJYX0NPTkZFX0FNRSwKKwkJCSAgIHBkYXRhLT5hbV9yZWR1Y3Rpb25fbW9kZSA/CisJCQkJU1RBMzJYX0NPTkZFX0FNRSA6IDApOworCXJlZ21hcF91cGRhdGVfYml0cyhzdGEzMngtPnJlZ21hcCwgU1RBMzJYX0NPTkZFLAorCQkJICAgU1RBMzJYX0NPTkZFX1BXTVMsCisJCQkgICBwZGF0YS0+b2RkX3B3bV9zcGVlZF9tb2RlID8KKwkJCQlTVEEzMlhfQ09ORkVfUFdNUyA6IDApOworCisJLyogIENPTkZGICovCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHN0YTMyeC0+cmVnbWFwLCBTVEEzMlhfQ09ORkYsCisJCQkgICBTVEEzMlhfQ09ORkZfSURFLAorCQkJICAgcGRhdGEtPmludmFsaWRfaW5wdXRfZGV0ZWN0X211dGUgPworCQkJCVNUQTMyWF9DT05GRl9JREUgOiAwKTsKIAogCS8qIHNlbGVjdCBvdXRwdXQgY29uZmlndXJhdGlvbiAgKi8KLQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBTVEEzMlhfQ09ORkYsCi0JCQkgICAgU1RBMzJYX0NPTkZGX09DRkdfTUFTSywKLQkJCSAgICBzdGEzMngtPnBkYXRhLT5vdXRwdXRfY29uZgotCQkJICAgIDw8IFNUQTMyWF9DT05GRl9PQ0ZHX1NISUZUKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoc3RhMzJ4LT5yZWdtYXAsIFNUQTMyWF9DT05GRiwKKwkJCSAgIFNUQTMyWF9DT05GRl9PQ0ZHX01BU0ssCisJCQkgICBwZGF0YS0+b3V0cHV0X2NvbmYKKwkJCQk8PCBTVEEzMlhfQ09ORkZfT0NGR19TSElGVCk7CiAKIAkvKiBjaGFubmVsIHRvIG91dHB1dCBtYXBwaW5nICovCi0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU1RBMzJYX0MxQ0ZHLAotCQkJICAgIFNUQTMyWF9DeENGR19PTV9NQVNLLAotCQkJICAgIHN0YTMyeC0+cGRhdGEtPmNoMV9vdXRwdXRfbWFwcGluZwotCQkJICAgIDw8IFNUQTMyWF9DeENGR19PTV9TSElGVCk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU1RBMzJYX0MyQ0ZHLAotCQkJICAgIFNUQTMyWF9DeENGR19PTV9NQVNLLAotCQkJICAgIHN0YTMyeC0+cGRhdGEtPmNoMl9vdXRwdXRfbWFwcGluZwotCQkJICAgIDw8IFNUQTMyWF9DeENGR19PTV9TSElGVCk7Ci0Jc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgU1RBMzJYX0MzQ0ZHLAotCQkJICAgIFNUQTMyWF9DeENGR19PTV9NQVNLLAotCQkJICAgIHN0YTMyeC0+cGRhdGEtPmNoM19vdXRwdXRfbWFwcGluZwotCQkJICAgIDw8IFNUQTMyWF9DeENGR19PTV9TSElGVCk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKHN0YTMyeC0+cmVnbWFwLCBTVEEzMlhfQzFDRkcsCisJCQkgICBTVEEzMlhfQ3hDRkdfT01fTUFTSywKKwkJCSAgIHBkYXRhLT5jaDFfb3V0cHV0X21hcHBpbmcKKwkJCQk8PCBTVEEzMlhfQ3hDRkdfT01fU0hJRlQpOworCXJlZ21hcF91cGRhdGVfYml0cyhzdGEzMngtPnJlZ21hcCwgU1RBMzJYX0MyQ0ZHLAorCQkJICAgU1RBMzJYX0N4Q0ZHX09NX01BU0ssCisJCQkgICBwZGF0YS0+Y2gyX291dHB1dF9tYXBwaW5nCisJCQkJPDwgU1RBMzJYX0N4Q0ZHX09NX1NISUZUKTsKKwlyZWdtYXBfdXBkYXRlX2JpdHMoc3RhMzJ4LT5yZWdtYXAsIFNUQTMyWF9DM0NGRywKKwkJCSAgIFNUQTMyWF9DeENGR19PTV9NQVNLLAorCQkJICAgcGRhdGEtPmNoM19vdXRwdXRfbWFwcGluZworCQkJCTw8IFNUQTMyWF9DeENGR19PTV9TSElGVCk7CiAKIAkvKiBpbml0aWFsaXplIGNvZWZmaWNpZW50IHNoYWRvdyBSQU0gd2l0aCByZXNldCB2YWx1ZXMgKi8KIAlmb3IgKGkgPSA0OyBpIDw9IDQ5OyBpICs9IDUpCkBAIC05MjQsMTYgKzk4OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sIHN0YTMyeF9yZWdfaXNfdm9sYXRpbGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQotewotCXN3aXRjaCAocmVnKSB7Ci0JY2FzZSBTVEEzMlhfQ09ORkEgLi4uIFNUQTMyWF9MMkFUUlQ6Ci0JY2FzZSBTVEEzMlhfTVBDQzEgLi4uIFNUQTMyWF9GRFJDMjoKLQkJcmV0dXJuIDA7Ci0JfQotCXJldHVybiAxOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHN0YTMyeF9jb2RlYyA9IHsKIAkucHJvYmUgPQkJc3RhMzJ4X3Byb2JlLAogCS5yZW1vdmUgPQkJc3RhMzJ4X3JlbW92ZSwKQEAgLTk1NCwxMiArMTAwOSw3NSBAQAogCS5yZWdfZGVmYXVsdHMgPQkJc3RhMzJ4X3JlZ3MsCiAJLm51bV9yZWdfZGVmYXVsdHMgPQlBUlJBWV9TSVpFKHN0YTMyeF9yZWdzKSwKIAkuY2FjaGVfdHlwZSA9CQlSRUdDQUNIRV9SQlRSRUUsCi0JLnZvbGF0aWxlX3JlZyA9CQlzdGEzMnhfcmVnX2lzX3ZvbGF0aWxlLAorCS53cl90YWJsZSA9CQkmc3RhMzJ4X3dyaXRlX3JlZ3MsCisJLnJkX3RhYmxlID0JCSZzdGEzMnhfcmVhZF9yZWdzLAorCS52b2xhdGlsZV90YWJsZSA9CSZzdGEzMnhfdm9sYXRpbGVfcmVncywKIH07CiAKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHN0MzJ4X2R0X2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic3Qsc3RhMzJ4IiwgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzdDMyeF9kdF9pZHMpOworCitzdGF0aWMgaW50IHN0YTMyeF9wcm9iZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzdGEzMnhfcHJpdiAqc3RhMzJ4KQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7CisJc3RydWN0IHN0YTMyeF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwl1MTYgdG1wOworCisJcGRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvZl9wcm9wZXJ0eV9yZWFkX3U4KG5wLCAic3Qsb3V0cHV0LWNvbmYiLAorCQkJICAgICZwZGF0YS0+b3V0cHV0X2NvbmYpOworCW9mX3Byb3BlcnR5X3JlYWRfdTgobnAsICJzdCxjaDEtb3V0cHV0LW1hcHBpbmciLAorCQkJICAgICZwZGF0YS0+Y2gxX291dHB1dF9tYXBwaW5nKTsKKwlvZl9wcm9wZXJ0eV9yZWFkX3U4KG5wLCAic3QsY2gyLW91dHB1dC1tYXBwaW5nIiwKKwkJCSAgICAmcGRhdGEtPmNoMl9vdXRwdXRfbWFwcGluZyk7CisJb2ZfcHJvcGVydHlfcmVhZF91OChucCwgInN0LGNoMy1vdXRwdXQtbWFwcGluZyIsCisJCQkgICAgJnBkYXRhLT5jaDNfb3V0cHV0X21hcHBpbmcpOworCisJaWYgKG9mX2dldF9wcm9wZXJ0eShucCwgInN0LHRoZXJtYWwtd2FybmluZy1yZWNvdmVyeSIsIE5VTEwpKQorCQlwZGF0YS0+dGhlcm1hbF93YXJuaW5nX3JlY292ZXJ5ID0gMTsKKwlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAic3QsdGhlcm1hbC13YXJuaW5nLWFkanVzdG1lbnQiLCBOVUxMKSkKKwkJcGRhdGEtPnRoZXJtYWxfd2FybmluZ19hZGp1c3RtZW50ID0gMTsKKwlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAic3QsbmVlZHNfZXNkX3dhdGNoZG9nIiwgTlVMTCkpCisJCXBkYXRhLT5uZWVkc19lc2Rfd2F0Y2hkb2cgPSAxOworCisJdG1wID0gMTQwOworCW9mX3Byb3BlcnR5X3JlYWRfdTE2KG5wLCAic3QsZHJvcC1jb21wZW5zYXRpb24tbnMiLCAmdG1wKTsKKwlwZGF0YS0+ZHJvcF9jb21wZW5zYXRpb25fbnMgPSBjbGFtcF90KHUxNiwgdG1wLCAwLCAzMDApIC8gMjA7CisKKwkvKiBDT05GRSAqLworCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzdCxtYXgtcG93ZXItdXNlLW1wY2MiLCBOVUxMKSkKKwkJcGRhdGEtPm1heF9wb3dlcl91c2VfbXBjYyA9IDE7CisKKwlpZiAob2ZfZ2V0X3Byb3BlcnR5KG5wLCAic3QsbWF4LXBvd2VyLWNvcnJlY3Rpb24iLCBOVUxMKSkKKwkJcGRhdGEtPm1heF9wb3dlcl9jb3JyZWN0aW9uID0gMTsKKworCWlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzdCxhbS1yZWR1Y3Rpb24tbW9kZSIsIE5VTEwpKQorCQlwZGF0YS0+YW1fcmVkdWN0aW9uX21vZGUgPSAxOworCisJaWYgKG9mX2dldF9wcm9wZXJ0eShucCwgInN0LG9kZC1wd20tc3BlZWQtbW9kZSIsIE5VTEwpKQorCQlwZGF0YS0+b2RkX3B3bV9zcGVlZF9tb2RlID0gMTsKKworCS8qIENPTkZGICovCisJaWYgKG9mX2dldF9wcm9wZXJ0eShucCwgInN0LGludmFsaWQtaW5wdXQtZGV0ZWN0LW11dGUiLCBOVUxMKSkKKwkJcGRhdGEtPmludmFsaWRfaW5wdXRfZGV0ZWN0X211dGUgPSAxOworCisJc3RhMzJ4LT5wZGF0YSA9IHBkYXRhOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBzdGEzMnhfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCiAJCQkgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogeworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZpMmMtPmRldjsKIAlzdHJ1Y3Qgc3RhMzJ4X3ByaXYgKnN0YTMyeDsKIAlpbnQgcmV0LCBpOwogCkBAIC05NjgsNiArMTA4NiwyOSBAQAogCWlmICghc3RhMzJ4KQogCQlyZXR1cm4gLUVOT01FTTsKIAorCW11dGV4X2luaXQoJnN0YTMyeC0+Y29lZmZfbG9jayk7CisJc3RhMzJ4LT5wZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEoZGV2KTsKKworI2lmZGVmIENPTkZJR19PRgorCWlmIChkZXYtPm9mX25vZGUpIHsKKwkJcmV0ID0gc3RhMzJ4X3Byb2JlX2R0KGRldiwgc3RhMzJ4KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKyNlbmRpZgorCisJLyogR1BJT3MgKi8KKwlzdGEzMngtPmdwaW9kX25yZXNldCA9IGRldm1fZ3Bpb2RfZ2V0KGRldiwgInJlc2V0Iik7CisJaWYgKElTX0VSUihzdGEzMngtPmdwaW9kX25yZXNldCkpIHsKKwkJcmV0ID0gUFRSX0VSUihzdGEzMngtPmdwaW9kX25yZXNldCk7CisJCWlmIChyZXQgIT0gLUVOT0VOVCAmJiByZXQgIT0gLUVOT1NZUykKKwkJCXJldHVybiByZXQ7CisKKwkJc3RhMzJ4LT5ncGlvZF9ucmVzZXQgPSBOVUxMOworCX0gZWxzZSB7CisJCWdwaW9kX2RpcmVjdGlvbl9vdXRwdXQoc3RhMzJ4LT5ncGlvZF9ucmVzZXQsIDApOworCX0KKwogCS8qIHJlZ3VsYXRvcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGEzMngtPnN1cHBsaWVzKTsgaSsrKQogCQlzdGEzMngtPnN1cHBsaWVzW2ldLnN1cHBseSA9IHN0YTMyeF9zdXBwbHlfbmFtZXNbaV07CkBAIC05ODIsMTUgKzExMjMsMTUgQEAKIAlzdGEzMngtPnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfaTJjKGkyYywgJnN0YTMyeF9yZWdtYXApOwogCWlmIChJU19FUlIoc3RhMzJ4LT5yZWdtYXApKSB7CiAJCXJldCA9IFBUUl9FUlIoc3RhMzJ4LT5yZWdtYXApOwotCQlkZXZfZXJyKCZpMmMtPmRldiwgIkZhaWxlZCB0byBpbml0IHJlZ21hcDogJWRcbiIsIHJldCk7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGluaXQgcmVnbWFwOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBzdGEzMngpOwogCi0JcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmaTJjLT5kZXYsICZzdGEzMnhfY29kZWMsICZzdGEzMnhfZGFpLCAxKTsKLQlpZiAocmV0ICE9IDApCi0JCWRldl9lcnIoJmkyYy0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNvZGVjICglZClcbiIsIHJldCk7CisJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYyhkZXYsICZzdGEzMnhfY29kZWMsICZzdGEzMnhfZGFpLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgY29kZWMgKCVkKVxuIiwgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMDEzLDYgKzExNTQsNyBAQAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gInN0YTMyeCIsCiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoc3QzMnhfZHRfaWRzKSwKIAl9LAogCS5wcm9iZSA9ICAgIHN0YTMyeF9pMmNfcHJvYmUsCiAJLnJlbW92ZSA9ICAgc3RhMzJ4X2kyY19yZW1vdmUsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3N0YTMyeC5oIGIvc291bmQvc29jL2NvZGVjcy9zdGEzMnguaAppbmRleCBkOGUzMmE2Li5kMzE5MWM5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3N0YTMyeC5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc3RhMzJ4LmgKQEAgLTEzMSw3ICsxMzEsNyBAQAogI2RlZmluZSBTVEEzMlhfQ09ORkZfT0NGR19NQVNLCTB4MDMKICNkZWZpbmUgU1RBMzJYX0NPTkZGX09DRkdfU0hJRlQJMAogI2RlZmluZSBTVEEzMlhfQ09ORkZfSURFCTB4MDQKLSNkZWZpbmUgU1RBMzJYX0NPTkZGX0lERV9TSElGVAkzCisjZGVmaW5lIFNUQTMyWF9DT05GRl9JREVfU0hJRlQJMgogI2RlZmluZSBTVEEzMlhfQ09ORkZfQkNMRQkweDA4CiAjZGVmaW5lIFNUQTMyWF9DT05GRl9FQ0xFCTB4MjAKICNkZWZpbmUgU1RBMzJYX0NPTkZGX1BXRE4JMHg0MApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzMXh4LmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzMxeHguYwppbmRleCBkYzMyMjNkLi5jODZkZDlhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzMxeHguYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzMxeHguYwpAQCAtMzQ5LDcgKzM0OSw4IEBACiBzdGF0aWMgaW50IGFpYzMxeHhfZGFwbV9wb3dlcl9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3QgYWljMzF4eF9wcml2ICphaWMzMXh4ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YSh3LT5jb2RlYyk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCXN0cnVjdCBhaWMzMXh4X3ByaXYgKmFpYzMxeHggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAl1bnNpZ25lZCBpbnQgcmVnID0gQUlDMzFYWF9EQUNGTEFHMTsKIAl1bnNpZ25lZCBpbnQgbWFzazsKIApAQCAtMzc3LDcgKzM3OCw3IEBACiAJCXJlZyA9IEFJQzMxWFhfQURDRkxBRzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2Vycih3LT5jb2RlYy0+ZGV2LCAiVW5rbm93biB3aWRnZXQgJyVzJyBjYWxsaW5nICVzXG4iLAorCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJVbmtub3duIHdpZGdldCAnJXMnIGNhbGxpbmcgJXNcbiIsCiAJCQl3LT5uYW1lLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTM4OCw3ICszODksNyBAQAogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgogCQlyZXR1cm4gYWljMzF4eF93YWl0X2JpdHMoYWljMzF4eCwgcmVnLCBtYXNrLCAwLCA1MDAwLCAxMDApOwogCWRlZmF1bHQ6Ci0JCWRldl9kYmcody0+Y29kZWMtPmRldiwKKwkJZGV2X2RiZyhjb2RlYy0+ZGV2LAogCQkJIlVuaGFuZGxlZCBkYXBtIHdpZGdldCBldmVudCAlZCBmcm9tICVzXG4iLAogCQkJZXZlbnQsIHctPm5hbWUpOwogCX0KQEAgLTQzMyw3ICs0MzQsNyBAQAogc3RhdGljIGludCBtaWNfYmlhc19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJCSAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJc3RydWN0IGFpYzMxeHhfcHJpdiAqYWljMzF4eCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jIGIvc291bmQvc29jL2NvZGVjcy90bHYzMjBhaWMzeC5jCmluZGV4IGI3ZWJjZTAuLjUxYzQ3MTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwYWljM3guYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGFpYzN4LmMKQEAgLTg3LDYgKzg3LDcgQEAKICNkZWZpbmUgQUlDM1hfTU9ERUxfM1ggMAogI2RlZmluZSBBSUMzWF9NT0RFTF8zMyAxCiAjZGVmaW5lIEFJQzNYX01PREVMXzMwMDcgMgorI2RlZmluZSBBSUMzWF9NT0RFTF8zMTA0IDMKIAl1MTYgbW9kZWw7CiAKIAkvKiBTZWxlY3RzIHRoZSBtaWNiaWFzIHZvbHRhZ2UgKi8KQEAgLTE5Nyw3ICsxOTgsNyBAQAogc3RhdGljIGludCBtaWNfYmlhc19ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlzdHJ1Y3QgYWljM3hfcHJpdiAqYWljM3ggPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKQEAgLTMxNiw1MiArMzE3LDM3IEBACiAJICogb25seSBmb3Igc3dhcHBlZCBMLXRvLVIgYW5kIFItdG8tTCByb3V0ZXMuIFNlZSBiZWxvdyBzdGVyZW8gY29udHJvbHMKIAkgKiBmb3IgZGlyZWN0IEwtdG8tTCBhbmQgUi10by1SIHJvdXRlcy4KIAkgKi8KLQlTT0NfU0lOR0xFX1RMVigiTGVmdCBMaW5lIE1peGVyIExpbmUyUiBCeXBhc3MgVm9sdW1lIiwKLQkJICAgICAgIExJTkUyUl8yX0xMT1BNX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAlTT0NfU0lOR0xFX1RMVigiTGVmdCBMaW5lIE1peGVyIFBHQVIgQnlwYXNzIFZvbHVtZSIsCiAJCSAgICAgICBQR0FSXzJfTExPUE1fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19TSU5HTEVfVExWKCJMZWZ0IExpbmUgTWl4ZXIgREFDUjEgUGxheWJhY2sgVm9sdW1lIiwKIAkJICAgICAgIERBQ1IxXzJfTExPUE1fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCi0JU09DX1NJTkdMRV9UTFYoIlJpZ2h0IExpbmUgTWl4ZXIgTGluZTJMIEJ5cGFzcyBWb2x1bWUiLAotCQkgICAgICAgTElORTJMXzJfUkxPUE1fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19TSU5HTEVfVExWKCJSaWdodCBMaW5lIE1peGVyIFBHQUwgQnlwYXNzIFZvbHVtZSIsCiAJCSAgICAgICBQR0FMXzJfUkxPUE1fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19TSU5HTEVfVExWKCJSaWdodCBMaW5lIE1peGVyIERBQ0wxIFBsYXliYWNrIFZvbHVtZSIsCiAJCSAgICAgICBEQUNMMV8yX1JMT1BNX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAotCVNPQ19TSU5HTEVfVExWKCJMZWZ0IEhQIE1peGVyIExpbmUyUiBCeXBhc3MgVm9sdW1lIiwKLQkJICAgICAgIExJTkUyUl8yX0hQTE9VVF9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAJU09DX1NJTkdMRV9UTFYoIkxlZnQgSFAgTWl4ZXIgUEdBUiBCeXBhc3MgVm9sdW1lIiwKIAkJICAgICAgIFBHQVJfMl9IUExPVVRfVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19TSU5HTEVfVExWKCJMZWZ0IEhQIE1peGVyIERBQ1IxIFBsYXliYWNrIFZvbHVtZSIsCiAJCSAgICAgICBEQUNSMV8yX0hQTE9VVF9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAKLQlTT0NfU0lOR0xFX1RMVigiUmlnaHQgSFAgTWl4ZXIgTGluZTJMIEJ5cGFzcyBWb2x1bWUiLAotCQkgICAgICAgTElORTJMXzJfSFBST1VUX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAlTT0NfU0lOR0xFX1RMVigiUmlnaHQgSFAgTWl4ZXIgUEdBTCBCeXBhc3MgVm9sdW1lIiwKIAkJICAgICAgIFBHQUxfMl9IUFJPVVRfVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19TSU5HTEVfVExWKCJSaWdodCBIUCBNaXhlciBEQUNMMSBQbGF5YmFjayBWb2x1bWUiLAogCQkgICAgICAgREFDTDFfMl9IUFJPVVRfVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCi0JU09DX1NJTkdMRV9UTFYoIkxlZnQgSFBDT00gTWl4ZXIgTGluZTJSIEJ5cGFzcyBWb2x1bWUiLAotCQkgICAgICAgTElORTJSXzJfSFBMQ09NX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAlTT0NfU0lOR0xFX1RMVigiTGVmdCBIUENPTSBNaXhlciBQR0FSIEJ5cGFzcyBWb2x1bWUiLAogCQkgICAgICAgUEdBUl8yX0hQTENPTV9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAJU09DX1NJTkdMRV9UTFYoIkxlZnQgSFBDT00gTWl4ZXIgREFDUjEgUGxheWJhY2sgVm9sdW1lIiwKIAkJICAgICAgIERBQ1IxXzJfSFBMQ09NX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKIAotCVNPQ19TSU5HTEVfVExWKCJSaWdodCBIUENPTSBNaXhlciBMaW5lMkwgQnlwYXNzIFZvbHVtZSIsCi0JCSAgICAgICBMSU5FMkxfMl9IUFJDT01fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19TSU5HTEVfVExWKCJSaWdodCBIUENPTSBNaXhlciBQR0FMIEJ5cGFzcyBWb2x1bWUiLAogCQkgICAgICAgUEdBTF8yX0hQUkNPTV9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAJU09DX1NJTkdMRV9UTFYoIlJpZ2h0IEhQQ09NIE1peGVyIERBQ0wxIFBsYXliYWNrIFZvbHVtZSIsCiAJCSAgICAgICBEQUNMMV8yX0hQUkNPTV9WT0wsIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAKIAkvKiBTdGVyZW8gb3V0cHV0IGNvbnRyb2xzIGZvciBkaXJlY3QgTC10by1MIGFuZCBSLXRvLVIgcm91dGVzICovCi0JU09DX0RPVUJMRV9SX1RMVigiTGluZSBMaW5lMiBCeXBhc3MgVm9sdW1lIiwKLQkJCSBMSU5FMkxfMl9MTE9QTV9WT0wsIExJTkUyUl8yX1JMT1BNX1ZPTCwKLQkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19ET1VCTEVfUl9UTFYoIkxpbmUgUEdBIEJ5cGFzcyBWb2x1bWUiLAogCQkJIFBHQUxfMl9MTE9QTV9WT0wsIFBHQVJfMl9STE9QTV9WT0wsCiAJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKQEAgLTM2OSw5ICszNTUsNiBAQAogCQkJIERBQ0wxXzJfTExPUE1fVk9MLCBEQUNSMV8yX1JMT1BNX1ZPTCwKIAkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCi0JU09DX0RPVUJMRV9SX1RMVigiSFAgTGluZTIgQnlwYXNzIFZvbHVtZSIsCi0JCQkgTElORTJMXzJfSFBMT1VUX1ZPTCwgTElORTJSXzJfSFBST1VUX1ZPTCwKLQkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAogCVNPQ19ET1VCTEVfUl9UTFYoIkhQIFBHQSBCeXBhc3MgVm9sdW1lIiwKIAkJCSBQR0FMXzJfSFBMT1VUX1ZPTCwgUEdBUl8yX0hQUk9VVF9WT0wsCiAJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKQEAgLTM3OSw5ICszNjIsNiBAQAogCQkJIERBQ0wxXzJfSFBMT1VUX1ZPTCwgREFDUjFfMl9IUFJPVVRfVk9MLAogCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAKLQlTT0NfRE9VQkxFX1JfVExWKCJIUENPTSBMaW5lMiBCeXBhc3MgVm9sdW1lIiwKLQkJCSBMSU5FMkxfMl9IUExDT01fVk9MLCBMSU5FMlJfMl9IUFJDT01fVk9MLAotCQkJIDAsIDExOCwgMSwgb3V0cHV0X3N0YWdlX3RsdiksCiAJU09DX0RPVUJMRV9SX1RMVigiSFBDT00gUEdBIEJ5cGFzcyBWb2x1bWUiLAogCQkJIFBHQUxfMl9IUExDT01fVk9MLCBQR0FSXzJfSFBSQ09NX1ZPTCwKIAkJCSAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLApAQCAtNDI0LDYgKzQwNCw0NSBAQAogCVNPQ19FTlVNKCJPdXRwdXQgRHJpdmVyIFJhbXAtdXAgc3RlcCIsIGFpYzN4X3JhbXB1cF9zdGVwX2VudW0pLAogfTsKIAorLyogRm9yIG90aGVyIHRoYW4gdGx2MzIwYWljMzEwNCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpYzN4X2V4dHJhX3NuZF9jb250cm9sc1tdID0geworCS8qCisJICogT3V0cHV0IGNvbnRyb2xzIHRoYXQgbWFwIHRvIG91dHB1dCBtaXhlciBzd2l0Y2hlcy4gTm90ZSB0aGVzZSBhcmUKKwkgKiBvbmx5IGZvciBzd2FwcGVkIEwtdG8tUiBhbmQgUi10by1MIHJvdXRlcy4gU2VlIGJlbG93IHN0ZXJlbyBjb250cm9scworCSAqIGZvciBkaXJlY3QgTC10by1MIGFuZCBSLXRvLVIgcm91dGVzLgorCSAqLworCVNPQ19TSU5HTEVfVExWKCJMZWZ0IExpbmUgTWl4ZXIgTGluZTJSIEJ5cGFzcyBWb2x1bWUiLAorCQkgICAgICAgTElORTJSXzJfTExPUE1fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCisJU09DX1NJTkdMRV9UTFYoIlJpZ2h0IExpbmUgTWl4ZXIgTGluZTJMIEJ5cGFzcyBWb2x1bWUiLAorCQkgICAgICAgTElORTJMXzJfUkxPUE1fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCisJU09DX1NJTkdMRV9UTFYoIkxlZnQgSFAgTWl4ZXIgTGluZTJSIEJ5cGFzcyBWb2x1bWUiLAorCQkgICAgICAgTElORTJSXzJfSFBMT1VUX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKworCVNPQ19TSU5HTEVfVExWKCJSaWdodCBIUCBNaXhlciBMaW5lMkwgQnlwYXNzIFZvbHVtZSIsCisJCSAgICAgICBMSU5FMkxfMl9IUFJPVVRfVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCisJU09DX1NJTkdMRV9UTFYoIkxlZnQgSFBDT00gTWl4ZXIgTGluZTJSIEJ5cGFzcyBWb2x1bWUiLAorCQkgICAgICAgTElORTJSXzJfSFBMQ09NX1ZPTCwgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKworCVNPQ19TSU5HTEVfVExWKCJSaWdodCBIUENPTSBNaXhlciBMaW5lMkwgQnlwYXNzIFZvbHVtZSIsCisJCSAgICAgICBMSU5FMkxfMl9IUFJDT01fVk9MLCAwLCAxMTgsIDEsIG91dHB1dF9zdGFnZV90bHYpLAorCisJLyogU3RlcmVvIG91dHB1dCBjb250cm9scyBmb3IgZGlyZWN0IEwtdG8tTCBhbmQgUi10by1SIHJvdXRlcyAqLworCVNPQ19ET1VCTEVfUl9UTFYoIkxpbmUgTGluZTIgQnlwYXNzIFZvbHVtZSIsCisJCQkgTElORTJMXzJfTExPUE1fVk9MLCBMSU5FMlJfMl9STE9QTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKworCVNPQ19ET1VCTEVfUl9UTFYoIkhQIExpbmUyIEJ5cGFzcyBWb2x1bWUiLAorCQkJIExJTkUyTF8yX0hQTE9VVF9WT0wsIExJTkUyUl8yX0hQUk9VVF9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKKworCVNPQ19ET1VCTEVfUl9UTFYoIkhQQ09NIExpbmUyIEJ5cGFzcyBWb2x1bWUiLAorCQkJIExJTkUyTF8yX0hQTENPTV9WT0wsIExJTkUyUl8yX0hQUkNPTV9WT0wsCisJCQkgMCwgMTE4LCAxLCBvdXRwdXRfc3RhZ2VfdGx2KSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWMzeF9tb25vX2NvbnRyb2xzW10gPSB7CiAJU09DX0RPVUJMRV9SX1RMVigiTW9ubyBMaW5lMiBCeXBhc3MgVm9sdW1lIiwKIAkJCSBMSU5FMkxfMl9NT05PTE9QTV9WT0wsIExJTkUyUl8yX01PTk9MT1BNX1ZPTCwKQEAgLTQ2NCwyMiArNDgzLDI0IEBACiAKIC8qIExlZnQgTGluZSBNaXhlciAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpYzN4X2xlZnRfbGluZV9taXhlcl9jb250cm9sc1tdID0gewotCVNPQ19EQVBNX1NJTkdMRSgiTGluZTJMIEJ5cGFzcyBTd2l0Y2giLCBMSU5FMkxfMl9MTE9QTV9WT0wsIDcsIDEsIDApLAogCVNPQ19EQVBNX1NJTkdMRSgiUEdBTCBCeXBhc3MgU3dpdGNoIiwgUEdBTF8yX0xMT1BNX1ZPTCwgNywgMSwgMCksCiAJU09DX0RBUE1fU0lOR0xFKCJEQUNMMSBTd2l0Y2giLCBEQUNMMV8yX0xMT1BNX1ZPTCwgNywgMSwgMCksCi0JU09DX0RBUE1fU0lOR0xFKCJMaW5lMlIgQnlwYXNzIFN3aXRjaCIsIExJTkUyUl8yX0xMT1BNX1ZPTCwgNywgMSwgMCksCiAJU09DX0RBUE1fU0lOR0xFKCJQR0FSIEJ5cGFzcyBTd2l0Y2giLCBQR0FSXzJfTExPUE1fVk9MLCA3LCAxLCAwKSwKIAlTT0NfREFQTV9TSU5HTEUoIkRBQ1IxIFN3aXRjaCIsIERBQ1IxXzJfTExPUE1fVk9MLCA3LCAxLCAwKSwKKwkvKiBOb3Qgb24gdGx2MzIwYWljMzEwNCAqLworCVNPQ19EQVBNX1NJTkdMRSgiTGluZTJMIEJ5cGFzcyBTd2l0Y2giLCBMSU5FMkxfMl9MTE9QTV9WT0wsIDcsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTGluZTJSIEJ5cGFzcyBTd2l0Y2giLCBMSU5FMlJfMl9MTE9QTV9WT0wsIDcsIDEsIDApLAogfTsKIAogLyogUmlnaHQgTGluZSBNaXhlciAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpYzN4X3JpZ2h0X2xpbmVfbWl4ZXJfY29udHJvbHNbXSA9IHsKLQlTT0NfREFQTV9TSU5HTEUoIkxpbmUyTCBCeXBhc3MgU3dpdGNoIiwgTElORTJMXzJfUkxPUE1fVk9MLCA3LCAxLCAwKSwKIAlTT0NfREFQTV9TSU5HTEUoIlBHQUwgQnlwYXNzIFN3aXRjaCIsIFBHQUxfMl9STE9QTV9WT0wsIDcsIDEsIDApLAogCVNPQ19EQVBNX1NJTkdMRSgiREFDTDEgU3dpdGNoIiwgREFDTDFfMl9STE9QTV9WT0wsIDcsIDEsIDApLAotCVNPQ19EQVBNX1NJTkdMRSgiTGluZTJSIEJ5cGFzcyBTd2l0Y2giLCBMSU5FMlJfMl9STE9QTV9WT0wsIDcsIDEsIDApLAogCVNPQ19EQVBNX1NJTkdMRSgiUEdBUiBCeXBhc3MgU3dpdGNoIiwgUEdBUl8yX1JMT1BNX1ZPTCwgNywgMSwgMCksCiAJU09DX0RBUE1fU0lOR0xFKCJEQUNSMSBTd2l0Y2giLCBEQUNSMV8yX1JMT1BNX1ZPTCwgNywgMSwgMCksCisJLyogTm90IG9uIHRsdjMyMGFpYzMxMDQgKi8KKwlTT0NfREFQTV9TSU5HTEUoIkxpbmUyTCBCeXBhc3MgU3dpdGNoIiwgTElORTJMXzJfUkxPUE1fVk9MLCA3LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkxpbmUyUiBCeXBhc3MgU3dpdGNoIiwgTElORTJSXzJfUkxPUE1fVk9MLCA3LCAxLCAwKSwKIH07CiAKIC8qIE1vbm8gTWl4ZXIgKi8KQEAgLTQ5NCw0MiArNTE1LDQ2IEBACiAKIC8qIExlZnQgSFAgTWl4ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWMzeF9sZWZ0X2hwX21peGVyX2NvbnRyb2xzW10gPSB7Ci0JU09DX0RBUE1fU0lOR0xFKCJMaW5lMkwgQnlwYXNzIFN3aXRjaCIsIExJTkUyTF8yX0hQTE9VVF9WT0wsIDcsIDEsIDApLAogCVNPQ19EQVBNX1NJTkdMRSgiUEdBTCBCeXBhc3MgU3dpdGNoIiwgUEdBTF8yX0hQTE9VVF9WT0wsIDcsIDEsIDApLAogCVNPQ19EQVBNX1NJTkdMRSgiREFDTDEgU3dpdGNoIiwgREFDTDFfMl9IUExPVVRfVk9MLCA3LCAxLCAwKSwKLQlTT0NfREFQTV9TSU5HTEUoIkxpbmUyUiBCeXBhc3MgU3dpdGNoIiwgTElORTJSXzJfSFBMT1VUX1ZPTCwgNywgMSwgMCksCiAJU09DX0RBUE1fU0lOR0xFKCJQR0FSIEJ5cGFzcyBTd2l0Y2giLCBQR0FSXzJfSFBMT1VUX1ZPTCwgNywgMSwgMCksCiAJU09DX0RBUE1fU0lOR0xFKCJEQUNSMSBTd2l0Y2giLCBEQUNSMV8yX0hQTE9VVF9WT0wsIDcsIDEsIDApLAorCS8qIE5vdCBvbiB0bHYzMjBhaWMzMTA0ICovCisJU09DX0RBUE1fU0lOR0xFKCJMaW5lMkwgQnlwYXNzIFN3aXRjaCIsIExJTkUyTF8yX0hQTE9VVF9WT0wsIDcsIDEsIDApLAorCVNPQ19EQVBNX1NJTkdMRSgiTGluZTJSIEJ5cGFzcyBTd2l0Y2giLCBMSU5FMlJfMl9IUExPVVRfVk9MLCA3LCAxLCAwKSwKIH07CiAKIC8qIFJpZ2h0IEhQIE1peGVyICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWljM3hfcmlnaHRfaHBfbWl4ZXJfY29udHJvbHNbXSA9IHsKLQlTT0NfREFQTV9TSU5HTEUoIkxpbmUyTCBCeXBhc3MgU3dpdGNoIiwgTElORTJMXzJfSFBST1VUX1ZPTCwgNywgMSwgMCksCiAJU09DX0RBUE1fU0lOR0xFKCJQR0FMIEJ5cGFzcyBTd2l0Y2giLCBQR0FMXzJfSFBST1VUX1ZPTCwgNywgMSwgMCksCiAJU09DX0RBUE1fU0lOR0xFKCJEQUNMMSBTd2l0Y2giLCBEQUNMMV8yX0hQUk9VVF9WT0wsIDcsIDEsIDApLAotCVNPQ19EQVBNX1NJTkdMRSgiTGluZTJSIEJ5cGFzcyBTd2l0Y2giLCBMSU5FMlJfMl9IUFJPVVRfVk9MLCA3LCAxLCAwKSwKIAlTT0NfREFQTV9TSU5HTEUoIlBHQVIgQnlwYXNzIFN3aXRjaCIsIFBHQVJfMl9IUFJPVVRfVk9MLCA3LCAxLCAwKSwKIAlTT0NfREFQTV9TSU5HTEUoIkRBQ1IxIFN3aXRjaCIsIERBQ1IxXzJfSFBST1VUX1ZPTCwgNywgMSwgMCksCisJLyogTm90IG9uIHRsdjMyMGFpYzMxMDQgKi8KKwlTT0NfREFQTV9TSU5HTEUoIkxpbmUyTCBCeXBhc3MgU3dpdGNoIiwgTElORTJMXzJfSFBST1VUX1ZPTCwgNywgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJMaW5lMlIgQnlwYXNzIFN3aXRjaCIsIExJTkUyUl8yX0hQUk9VVF9WT0wsIDcsIDEsIDApLAogfTsKIAogLyogTGVmdCBIUENPTSBNaXhlciAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFpYzN4X2xlZnRfaHBjb21fbWl4ZXJfY29udHJvbHNbXSA9IHsKLQlTT0NfREFQTV9TSU5HTEUoIkxpbmUyTCBCeXBhc3MgU3dpdGNoIiwgTElORTJMXzJfSFBMQ09NX1ZPTCwgNywgMSwgMCksCiAJU09DX0RBUE1fU0lOR0xFKCJQR0FMIEJ5cGFzcyBTd2l0Y2giLCBQR0FMXzJfSFBMQ09NX1ZPTCwgNywgMSwgMCksCiAJU09DX0RBUE1fU0lOR0xFKCJEQUNMMSBTd2l0Y2giLCBEQUNMMV8yX0hQTENPTV9WT0wsIDcsIDEsIDApLAotCVNPQ19EQVBNX1NJTkdMRSgiTGluZTJSIEJ5cGFzcyBTd2l0Y2giLCBMSU5FMlJfMl9IUExDT01fVk9MLCA3LCAxLCAwKSwKIAlTT0NfREFQTV9TSU5HTEUoIlBHQVIgQnlwYXNzIFN3aXRjaCIsIFBHQVJfMl9IUExDT01fVk9MLCA3LCAxLCAwKSwKIAlTT0NfREFQTV9TSU5HTEUoIkRBQ1IxIFN3aXRjaCIsIERBQ1IxXzJfSFBMQ09NX1ZPTCwgNywgMSwgMCksCisJLyogTm90IG9uIHRsdjMyMGFpYzMxMDQgKi8KKwlTT0NfREFQTV9TSU5HTEUoIkxpbmUyTCBCeXBhc3MgU3dpdGNoIiwgTElORTJMXzJfSFBMQ09NX1ZPTCwgNywgMSwgMCksCisJU09DX0RBUE1fU0lOR0xFKCJMaW5lMlIgQnlwYXNzIFN3aXRjaCIsIExJTkUyUl8yX0hQTENPTV9WT0wsIDcsIDEsIDApLAogfTsKIAogLyogUmlnaHQgSFBDT00gTWl4ZXIgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWMzeF9yaWdodF9ocGNvbV9taXhlcl9jb250cm9sc1tdID0gewotCVNPQ19EQVBNX1NJTkdMRSgiTGluZTJMIEJ5cGFzcyBTd2l0Y2giLCBMSU5FMkxfMl9IUFJDT01fVk9MLCA3LCAxLCAwKSwKIAlTT0NfREFQTV9TSU5HTEUoIlBHQUwgQnlwYXNzIFN3aXRjaCIsIFBHQUxfMl9IUFJDT01fVk9MLCA3LCAxLCAwKSwKIAlTT0NfREFQTV9TSU5HTEUoIkRBQ0wxIFN3aXRjaCIsIERBQ0wxXzJfSFBSQ09NX1ZPTCwgNywgMSwgMCksCi0JU09DX0RBUE1fU0lOR0xFKCJMaW5lMlIgQnlwYXNzIFN3aXRjaCIsIExJTkUyUl8yX0hQUkNPTV9WT0wsIDcsIDEsIDApLAogCVNPQ19EQVBNX1NJTkdMRSgiUEdBUiBCeXBhc3MgU3dpdGNoIiwgUEdBUl8yX0hQUkNPTV9WT0wsIDcsIDEsIDApLAogCVNPQ19EQVBNX1NJTkdMRSgiREFDUjEgU3dpdGNoIiwgREFDUjFfMl9IUFJDT01fVk9MLCA3LCAxLCAwKSwKKwkvKiBOb3Qgb24gdGx2MzIwYWljMzEwNCAqLworCVNPQ19EQVBNX1NJTkdMRSgiTGluZTJMIEJ5cGFzcyBTd2l0Y2giLCBMSU5FMkxfMl9IUFJDT01fVk9MLCA3LCAxLCAwKSwKKwlTT0NfREFQTV9TSU5HTEUoIkxpbmUyUiBCeXBhc3MgU3dpdGNoIiwgTElORTJSXzJfSFBSQ09NX1ZPTCwgNywgMSwgMCksCiB9OwogCiAvKiBMZWZ0IFBHQSBNaXhlciAqLwpAQCAtNTUwLDYgKzU3NSwyMiBAQAogCVNPQ19EQVBNX1NJTkdMRV9BSUMzWCgiTWljM1IgU3dpdGNoIiwgTUlDM0xSXzJfUkFEQ19DVFJMLCAwLCAxLCAxKSwKIH07CiAKKy8qIExlZnQgUEdBIE1peGVyIGZvciB0bHYzMjBhaWMzMTA0ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWljMzEwNF9sZWZ0X3BnYV9taXhlcl9jb250cm9sc1tdID0geworCVNPQ19EQVBNX1NJTkdMRV9BSUMzWCgiTGluZTFMIFN3aXRjaCIsIExJTkUxTF8yX0xBRENfQ1RSTCwgMywgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFX0FJQzNYKCJMaW5lMVIgU3dpdGNoIiwgTElORTFSXzJfTEFEQ19DVFJMLCAzLCAxLCAxKSwKKwlTT0NfREFQTV9TSU5HTEVfQUlDM1goIk1pYzJMIFN3aXRjaCIsIE1JQzNMUl8yX0xBRENfQ1RSTCwgNCwgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFX0FJQzNYKCJNaWMyUiBTd2l0Y2giLCBNSUMzTFJfMl9MQURDX0NUUkwsIDAsIDEsIDEpLAorfTsKKworLyogUmlnaHQgUEdBIE1peGVyIGZvciB0bHYzMjBhaWMzMTA0ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWljMzEwNF9yaWdodF9wZ2FfbWl4ZXJfY29udHJvbHNbXSA9IHsKKwlTT0NfREFQTV9TSU5HTEVfQUlDM1goIkxpbmUxUiBTd2l0Y2giLCBMSU5FMVJfMl9SQURDX0NUUkwsIDMsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRV9BSUMzWCgiTGluZTFMIFN3aXRjaCIsIExJTkUxTF8yX1JBRENfQ1RSTCwgMywgMSwgMSksCisJU09DX0RBUE1fU0lOR0xFX0FJQzNYKCJNaWMyTCBTd2l0Y2giLCBNSUMzTFJfMl9SQURDX0NUUkwsIDQsIDEsIDEpLAorCVNPQ19EQVBNX1NJTkdMRV9BSUMzWCgiTWljMlIgU3dpdGNoIiwgTUlDM0xSXzJfUkFEQ19DVFJMLCAwLCAxLCAxKSwKK307CisKIC8qIExlZnQgTGluZTEgTXV4ICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgYWljM3hfbGVmdF9saW5lMWxfbXV4X2NvbnRyb2xzID0KIFNPQ19EQVBNX0VOVU0oIlJvdXRlIiwgYWljM3hfbGluZTFsXzJfbF9lbnVtKTsKQEAgLTU5MywyNiArNjM0LDU2IEBACiAKIAkvKiBJbnB1dHMgdG8gTGVmdCBBREMgKi8KIAlTTkRfU09DX0RBUE1fQURDKCJMZWZ0IEFEQyIsICJMZWZ0IENhcHR1cmUiLCBMSU5FMUxfMl9MQURDX0NUUkwsIDIsIDApLAotCVNORF9TT0NfREFQTV9NSVhFUigiTGVmdCBQR0EgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCi0JCQkgICAmYWljM3hfbGVmdF9wZ2FfbWl4ZXJfY29udHJvbHNbMF0sCi0JCQkgICBBUlJBWV9TSVpFKGFpYzN4X2xlZnRfcGdhX21peGVyX2NvbnRyb2xzKSksCiAJU05EX1NPQ19EQVBNX01VWCgiTGVmdCBMaW5lMUwgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLAogCQkJICZhaWMzeF9sZWZ0X2xpbmUxbF9tdXhfY29udHJvbHMpLAogCVNORF9TT0NfREFQTV9NVVgoIkxlZnQgTGluZTFSIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwKIAkJCSAmYWljM3hfbGVmdF9saW5lMXJfbXV4X2NvbnRyb2xzKSwKLQlTTkRfU09DX0RBUE1fTVVYKCJMZWZ0IExpbmUyTCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCi0JCQkgJmFpYzN4X2xlZnRfbGluZTJfbXV4X2NvbnRyb2xzKSwKIAogCS8qIElucHV0cyB0byBSaWdodCBBREMgKi8KIAlTTkRfU09DX0RBUE1fQURDKCJSaWdodCBBREMiLCAiUmlnaHQgQ2FwdHVyZSIsCiAJCQkgTElORTFSXzJfUkFEQ19DVFJMLCAyLCAwKSwKLQlTTkRfU09DX0RBUE1fTUlYRVIoIlJpZ2h0IFBHQSBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKLQkJCSAgICZhaWMzeF9yaWdodF9wZ2FfbWl4ZXJfY29udHJvbHNbMF0sCi0JCQkgICBBUlJBWV9TSVpFKGFpYzN4X3JpZ2h0X3BnYV9taXhlcl9jb250cm9scykpLAogCVNORF9TT0NfREFQTV9NVVgoIlJpZ2h0IExpbmUxTCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCiAJCQkgJmFpYzN4X3JpZ2h0X2xpbmUxbF9tdXhfY29udHJvbHMpLAogCVNORF9TT0NfREFQTV9NVVgoIlJpZ2h0IExpbmUxUiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCiAJCQkgJmFpYzN4X3JpZ2h0X2xpbmUxcl9tdXhfY29udHJvbHMpLAorCisJLyogTWljIEJpYXMgKi8KKwlTTkRfU09DX0RBUE1fU1VQUExZKCJNaWMgQmlhcyIsIE1JQ0JJQVNfQ1RSTCwgNiwgMCwKKwkJCSBtaWNfYmlhc19ldmVudCwKKwkJCSBTTkRfU09DX0RBUE1fUE9TVF9QTVUgfCBTTkRfU09DX0RBUE1fUFJFX1BNRCksCisKKwlTTkRfU09DX0RBUE1fT1VUUFVUKCJMTE9VVCIpLAorCVNORF9TT0NfREFQTV9PVVRQVVQoIlJMT1VUIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiSFBMT1VUIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiSFBST1VUIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiSFBMQ09NIiksCisJU05EX1NPQ19EQVBNX09VVFBVVCgiSFBSQ09NIiksCisKKwlTTkRfU09DX0RBUE1fSU5QVVQoIkxJTkUxTCIpLAorCVNORF9TT0NfREFQTV9JTlBVVCgiTElORTFSIiksCisKKwkvKgorCSAqIFZpcnR1YWwgb3V0cHV0IHBpbiB0byBkZXRlY3Rpb24gYmxvY2sgaW5zaWRlIGNvZGVjLiBUaGlzIGNhbiBiZQorCSAqIHVzZWQgdG8ga2VlcCBjb2RlYyBiaWFzIG9uIGlmIGdwaW8gb3IgZGV0ZWN0aW9uIGZlYXR1cmVzIGFyZSBuZWVkZWQuCisJICogRm9yY2UgcGluIG9uIG9yIGNvbnN0cnVjdCBhIHBhdGggd2l0aCBhbiBpbnB1dCBqYWNrIGFuZCBtaWMgYmlhcworCSAqIHdpZGdldHMuCisJICovCisJU05EX1NPQ19EQVBNX09VVFBVVCgiRGV0ZWN0aW9uIiksCit9OworCisvKiBGb3Igb3RoZXIgdGhhbiB0bHYzMjBhaWMzMTA0ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgYWljM3hfZXh0cmFfZGFwbV93aWRnZXRzW10gPSB7CisJLyogSW5wdXRzIHRvIExlZnQgQURDICovCisJU05EX1NPQ19EQVBNX01JWEVSKCJMZWZ0IFBHQSBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAgICZhaWMzeF9sZWZ0X3BnYV9taXhlcl9jb250cm9sc1swXSwKKwkJCSAgIEFSUkFZX1NJWkUoYWljM3hfbGVmdF9wZ2FfbWl4ZXJfY29udHJvbHMpKSwKKwlTTkRfU09DX0RBUE1fTVVYKCJMZWZ0IExpbmUyTCBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkgJmFpYzN4X2xlZnRfbGluZTJfbXV4X2NvbnRyb2xzKSwKKworCS8qIElucHV0cyB0byBSaWdodCBBREMgKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIlJpZ2h0IFBHQSBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAgICZhaWMzeF9yaWdodF9wZ2FfbWl4ZXJfY29udHJvbHNbMF0sCisJCQkgICBBUlJBWV9TSVpFKGFpYzN4X3JpZ2h0X3BnYV9taXhlcl9jb250cm9scykpLAogCVNORF9TT0NfREFQTV9NVVgoIlJpZ2h0IExpbmUyUiBNdXgiLCBTTkRfU09DX05PUE0sIDAsIDAsCiAJCQkgJmFpYzN4X3JpZ2h0X2xpbmUyX211eF9jb250cm9scyksCiAKQEAgLTYzNywxMSArNzA4LDYgQEAKIAlTTkRfU09DX0RBUE1fUkVHKHNuZF9zb2NfZGFwbV9taWNiaWFzLCAiRE1pYyBSYXRlIDMyIiwKIAkJCSBBSUMzWF9BU0RfSU5URl9DVFJMQSwgMCwgMywgMywgMCksCiAKLQkvKiBNaWMgQmlhcyAqLwotCVNORF9TT0NfREFQTV9TVVBQTFkoIk1pYyBCaWFzIiwgTUlDQklBU19DVFJMLCA2LCAwLAotCQkJIG1pY19iaWFzX2V2ZW50LAotCQkJIFNORF9TT0NfREFQTV9QT1NUX1BNVSB8IFNORF9TT0NfREFQTV9QUkVfUE1EKSwKLQogCS8qIE91dHB1dCBtaXhlcnMgKi8KIAlTTkRfU09DX0RBUE1fTUlYRVIoIkxlZnQgTGluZSBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKIAkJCSAgICZhaWMzeF9sZWZ0X2xpbmVfbWl4ZXJfY29udHJvbHNbMF0sCkBAIC02NjIsMjcgKzcyOCw0NiBAQAogCQkJICAgJmFpYzN4X3JpZ2h0X2hwY29tX21peGVyX2NvbnRyb2xzWzBdLAogCQkJICAgQVJSQVlfU0laRShhaWMzeF9yaWdodF9ocGNvbV9taXhlcl9jb250cm9scykpLAogCi0JU05EX1NPQ19EQVBNX09VVFBVVCgiTExPVVQiKSwKLQlTTkRfU09DX0RBUE1fT1VUUFVUKCJSTE9VVCIpLAotCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQTE9VVCIpLAotCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQUk9VVCIpLAotCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQTENPTSIpLAotCVNORF9TT0NfREFQTV9PVVRQVVQoIkhQUkNPTSIpLAotCiAJU05EX1NPQ19EQVBNX0lOUFVUKCJNSUMzTCIpLAogCVNORF9TT0NfREFQTV9JTlBVVCgiTUlDM1IiKSwKLQlTTkRfU09DX0RBUE1fSU5QVVQoIkxJTkUxTCIpLAotCVNORF9TT0NfREFQTV9JTlBVVCgiTElORTFSIiksCiAJU05EX1NPQ19EQVBNX0lOUFVUKCJMSU5FMkwiKSwKIAlTTkRfU09DX0RBUE1fSU5QVVQoIkxJTkUyUiIpLAorfTsKIAotCS8qCi0JICogVmlydHVhbCBvdXRwdXQgcGluIHRvIGRldGVjdGlvbiBibG9jayBpbnNpZGUgY29kZWMuIFRoaXMgY2FuIGJlCi0JICogdXNlZCB0byBrZWVwIGNvZGVjIGJpYXMgb24gaWYgZ3BpbyBvciBkZXRlY3Rpb24gZmVhdHVyZXMgYXJlIG5lZWRlZC4KLQkgKiBGb3JjZSBwaW4gb24gb3IgY29uc3RydWN0IGEgcGF0aCB3aXRoIGFuIGlucHV0IGphY2sgYW5kIG1pYyBiaWFzCi0JICogd2lkZ2V0cy4KLQkgKi8KLQlTTkRfU09DX0RBUE1fT1VUUFVUKCJEZXRlY3Rpb24iKSwKKy8qIEZvciB0bHYzMjBhaWMzMTA0ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgYWljMzEwNF9leHRyYV9kYXBtX3dpZGdldHNbXSA9IHsKKwkvKiBJbnB1dHMgdG8gTGVmdCBBREMgKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIkxlZnQgUEdBIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJICAgJmFpYzMxMDRfbGVmdF9wZ2FfbWl4ZXJfY29udHJvbHNbMF0sCisJCQkgICBBUlJBWV9TSVpFKGFpYzMxMDRfbGVmdF9wZ2FfbWl4ZXJfY29udHJvbHMpKSwKKworCS8qIElucHV0cyB0byBSaWdodCBBREMgKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIlJpZ2h0IFBHQSBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAgICZhaWMzMTA0X3JpZ2h0X3BnYV9taXhlcl9jb250cm9sc1swXSwKKwkJCSAgIEFSUkFZX1NJWkUoYWljMzEwNF9yaWdodF9wZ2FfbWl4ZXJfY29udHJvbHMpKSwKKworCS8qIE91dHB1dCBtaXhlcnMgKi8KKwlTTkRfU09DX0RBUE1fTUlYRVIoIkxlZnQgTGluZSBNaXhlciIsIFNORF9TT0NfTk9QTSwgMCwgMCwKKwkJCSAgICZhaWMzeF9sZWZ0X2xpbmVfbWl4ZXJfY29udHJvbHNbMF0sCisJCQkgICBBUlJBWV9TSVpFKGFpYzN4X2xlZnRfbGluZV9taXhlcl9jb250cm9scykgLSAyKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlJpZ2h0IExpbmUgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkgICAmYWljM3hfcmlnaHRfbGluZV9taXhlcl9jb250cm9sc1swXSwKKwkJCSAgIEFSUkFZX1NJWkUoYWljM3hfcmlnaHRfbGluZV9taXhlcl9jb250cm9scykgLSAyKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkxlZnQgSFAgTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkgICAmYWljM3hfbGVmdF9ocF9taXhlcl9jb250cm9sc1swXSwKKwkJCSAgIEFSUkFZX1NJWkUoYWljM3hfbGVmdF9ocF9taXhlcl9jb250cm9scykgLSAyKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlJpZ2h0IEhQIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJICAgJmFpYzN4X3JpZ2h0X2hwX21peGVyX2NvbnRyb2xzWzBdLAorCQkJICAgQVJSQVlfU0laRShhaWMzeF9yaWdodF9ocF9taXhlcl9jb250cm9scykgLSAyKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIkxlZnQgSFBDT00gTWl4ZXIiLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQkgICAmYWljM3hfbGVmdF9ocGNvbV9taXhlcl9jb250cm9sc1swXSwKKwkJCSAgIEFSUkFZX1NJWkUoYWljM3hfbGVmdF9ocGNvbV9taXhlcl9jb250cm9scykgLSAyKSwKKwlTTkRfU09DX0RBUE1fTUlYRVIoIlJpZ2h0IEhQQ09NIE1peGVyIiwgU05EX1NPQ19OT1BNLCAwLCAwLAorCQkJICAgJmFpYzN4X3JpZ2h0X2hwY29tX21peGVyX2NvbnRyb2xzWzBdLAorCQkJICAgQVJSQVlfU0laRShhaWMzeF9yaWdodF9ocGNvbV9taXhlcl9jb250cm9scykgLSAyKSwKKworCVNORF9TT0NfREFQTV9JTlBVVCgiTUlDMkwiKSwKKwlTTkRfU09DX0RBUE1fSU5QVVQoIk1JQzJSIiksCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgYWljM3hfZGFwbV9tb25vX3dpZGdldHNbXSA9IHsKQEAgLTcxMiwxNyArNzk3LDEwIEBACiAJeyJMZWZ0IExpbmUxUiBNdXgiLCAic2luZ2xlLWVuZGVkIiwgIkxJTkUxUiJ9LAogCXsiTGVmdCBMaW5lMVIgTXV4IiwgImRpZmZlcmVudGlhbCIsICJMSU5FMVIifSwKIAotCXsiTGVmdCBMaW5lMkwgTXV4IiwgInNpbmdsZS1lbmRlZCIsICJMSU5FMkwifSwKLQl7IkxlZnQgTGluZTJMIE11eCIsICJkaWZmZXJlbnRpYWwiLCAiTElORTJMIn0sCi0KIAl7IkxlZnQgUEdBIE1peGVyIiwgIkxpbmUxTCBTd2l0Y2giLCAiTGVmdCBMaW5lMUwgTXV4In0sCiAJeyJMZWZ0IFBHQSBNaXhlciIsICJMaW5lMVIgU3dpdGNoIiwgIkxlZnQgTGluZTFSIE11eCJ9LAotCXsiTGVmdCBQR0EgTWl4ZXIiLCAiTGluZTJMIFN3aXRjaCIsICJMZWZ0IExpbmUyTCBNdXgifSwKLQl7IkxlZnQgUEdBIE1peGVyIiwgIk1pYzNMIFN3aXRjaCIsICJNSUMzTCJ9LAotCXsiTGVmdCBQR0EgTWl4ZXIiLCAiTWljM1IgU3dpdGNoIiwgIk1JQzNSIn0sCiAKIAl7IkxlZnQgQURDIiwgTlVMTCwgIkxlZnQgUEdBIE1peGVyIn0sCi0JeyJMZWZ0IEFEQyIsIE5VTEwsICJHUElPMSBkbWljIG1vZGNsayJ9LAogCiAJLyogUmlnaHQgSW5wdXQgKi8KIAl7IlJpZ2h0IExpbmUxUiBNdXgiLCAic2luZ2xlLWVuZGVkIiwgIkxJTkUxUiJ9LApAQCAtNzMwLDI1ICs4MDgsMTAgQEAKIAl7IlJpZ2h0IExpbmUxTCBNdXgiLCAic2luZ2xlLWVuZGVkIiwgIkxJTkUxTCJ9LAogCXsiUmlnaHQgTGluZTFMIE11eCIsICJkaWZmZXJlbnRpYWwiLCAiTElORTFMIn0sCiAKLQl7IlJpZ2h0IExpbmUyUiBNdXgiLCAic2luZ2xlLWVuZGVkIiwgIkxJTkUyUiJ9LAotCXsiUmlnaHQgTGluZTJSIE11eCIsICJkaWZmZXJlbnRpYWwiLCAiTElORTJSIn0sCi0KIAl7IlJpZ2h0IFBHQSBNaXhlciIsICJMaW5lMUwgU3dpdGNoIiwgIlJpZ2h0IExpbmUxTCBNdXgifSwKIAl7IlJpZ2h0IFBHQSBNaXhlciIsICJMaW5lMVIgU3dpdGNoIiwgIlJpZ2h0IExpbmUxUiBNdXgifSwKLQl7IlJpZ2h0IFBHQSBNaXhlciIsICJMaW5lMlIgU3dpdGNoIiwgIlJpZ2h0IExpbmUyUiBNdXgifSwKLQl7IlJpZ2h0IFBHQSBNaXhlciIsICJNaWMzTCBTd2l0Y2giLCAiTUlDM0wifSwKLQl7IlJpZ2h0IFBHQSBNaXhlciIsICJNaWMzUiBTd2l0Y2giLCAiTUlDM1IifSwKIAogCXsiUmlnaHQgQURDIiwgTlVMTCwgIlJpZ2h0IFBHQSBNaXhlciJ9LAotCXsiUmlnaHQgQURDIiwgTlVMTCwgIkdQSU8xIGRtaWMgbW9kY2xrIn0sCi0KLQkvKgotCSAqIExvZ2ljYWwgcGF0aCBiZXR3ZWVuIGRpZ2l0YWwgbWljIGVuYWJsZSBhbmQgR1BJTzEgbW9kdWxhdG9yIGNsb2NrCi0JICogb3V0cHV0IGZ1bmN0aW9uCi0JICovCi0JeyJHUElPMSBkbWljIG1vZGNsayIsIE5VTEwsICJETWljIFJhdGUgMTI4In0sCi0JeyJHUElPMSBkbWljIG1vZGNsayIsIE5VTEwsICJETWljIFJhdGUgNjQifSwKLQl7IkdQSU8xIGRtaWMgbW9kY2xrIiwgTlVMTCwgIkRNaWMgUmF0ZSAzMiJ9LAogCiAJLyogTGVmdCBEQUMgT3V0cHV0ICovCiAJeyJMZWZ0IERBQyBNdXgiLCAiREFDX0wxIiwgIkxlZnQgREFDIn0sCkBAIC03NjEsMTAgKzgyNCw4IEBACiAJeyJSaWdodCBEQUMgTXV4IiwgIkRBQ19SMyIsICJSaWdodCBEQUMifSwKIAogCS8qIExlZnQgTGluZSBPdXRwdXQgKi8KLQl7IkxlZnQgTGluZSBNaXhlciIsICJMaW5lMkwgQnlwYXNzIFN3aXRjaCIsICJMZWZ0IExpbmUyTCBNdXgifSwKIAl7IkxlZnQgTGluZSBNaXhlciIsICJQR0FMIEJ5cGFzcyBTd2l0Y2giLCAiTGVmdCBQR0EgTWl4ZXIifSwKIAl7IkxlZnQgTGluZSBNaXhlciIsICJEQUNMMSBTd2l0Y2giLCAiTGVmdCBEQUMgTXV4In0sCi0JeyJMZWZ0IExpbmUgTWl4ZXIiLCAiTGluZTJSIEJ5cGFzcyBTd2l0Y2giLCAiUmlnaHQgTGluZTJSIE11eCJ9LAogCXsiTGVmdCBMaW5lIE1peGVyIiwgIlBHQVIgQnlwYXNzIFN3aXRjaCIsICJSaWdodCBQR0EgTWl4ZXIifSwKIAl7IkxlZnQgTGluZSBNaXhlciIsICJEQUNSMSBTd2l0Y2giLCAiUmlnaHQgREFDIE11eCJ9LAogCkBAIC03NzMsMTAgKzgzNCw4IEBACiAJeyJMTE9VVCIsIE5VTEwsICJMZWZ0IExpbmUgT3V0In0sCiAKIAkvKiBSaWdodCBMaW5lIE91dHB1dCAqLwotCXsiUmlnaHQgTGluZSBNaXhlciIsICJMaW5lMkwgQnlwYXNzIFN3aXRjaCIsICJMZWZ0IExpbmUyTCBNdXgifSwKIAl7IlJpZ2h0IExpbmUgTWl4ZXIiLCAiUEdBTCBCeXBhc3MgU3dpdGNoIiwgIkxlZnQgUEdBIE1peGVyIn0sCiAJeyJSaWdodCBMaW5lIE1peGVyIiwgIkRBQ0wxIFN3aXRjaCIsICJMZWZ0IERBQyBNdXgifSwKLQl7IlJpZ2h0IExpbmUgTWl4ZXIiLCAiTGluZTJSIEJ5cGFzcyBTd2l0Y2giLCAiUmlnaHQgTGluZTJSIE11eCJ9LAogCXsiUmlnaHQgTGluZSBNaXhlciIsICJQR0FSIEJ5cGFzcyBTd2l0Y2giLCAiUmlnaHQgUEdBIE1peGVyIn0sCiAJeyJSaWdodCBMaW5lIE1peGVyIiwgIkRBQ1IxIFN3aXRjaCIsICJSaWdodCBEQUMgTXV4In0sCiAKQEAgLTc4NSwxMCArODQ0LDggQEAKIAl7IlJMT1VUIiwgTlVMTCwgIlJpZ2h0IExpbmUgT3V0In0sCiAKIAkvKiBMZWZ0IEhQIE91dHB1dCAqLwotCXsiTGVmdCBIUCBNaXhlciIsICJMaW5lMkwgQnlwYXNzIFN3aXRjaCIsICJMZWZ0IExpbmUyTCBNdXgifSwKIAl7IkxlZnQgSFAgTWl4ZXIiLCAiUEdBTCBCeXBhc3MgU3dpdGNoIiwgIkxlZnQgUEdBIE1peGVyIn0sCiAJeyJMZWZ0IEhQIE1peGVyIiwgIkRBQ0wxIFN3aXRjaCIsICJMZWZ0IERBQyBNdXgifSwKLQl7IkxlZnQgSFAgTWl4ZXIiLCAiTGluZTJSIEJ5cGFzcyBTd2l0Y2giLCAiUmlnaHQgTGluZTJSIE11eCJ9LAogCXsiTGVmdCBIUCBNaXhlciIsICJQR0FSIEJ5cGFzcyBTd2l0Y2giLCAiUmlnaHQgUEdBIE1peGVyIn0sCiAJeyJMZWZ0IEhQIE1peGVyIiwgIkRBQ1IxIFN3aXRjaCIsICJSaWdodCBEQUMgTXV4In0sCiAKQEAgLTc5NywxMCArODU0LDggQEAKIAl7IkhQTE9VVCIsIE5VTEwsICJMZWZ0IEhQIE91dCJ9LAogCiAJLyogUmlnaHQgSFAgT3V0cHV0ICovCi0JeyJSaWdodCBIUCBNaXhlciIsICJMaW5lMkwgQnlwYXNzIFN3aXRjaCIsICJMZWZ0IExpbmUyTCBNdXgifSwKIAl7IlJpZ2h0IEhQIE1peGVyIiwgIlBHQUwgQnlwYXNzIFN3aXRjaCIsICJMZWZ0IFBHQSBNaXhlciJ9LAogCXsiUmlnaHQgSFAgTWl4ZXIiLCAiREFDTDEgU3dpdGNoIiwgIkxlZnQgREFDIE11eCJ9LAotCXsiUmlnaHQgSFAgTWl4ZXIiLCAiTGluZTJSIEJ5cGFzcyBTd2l0Y2giLCAiUmlnaHQgTGluZTJSIE11eCJ9LAogCXsiUmlnaHQgSFAgTWl4ZXIiLCAiUEdBUiBCeXBhc3MgU3dpdGNoIiwgIlJpZ2h0IFBHQSBNaXhlciJ9LAogCXsiUmlnaHQgSFAgTWl4ZXIiLCAiREFDUjEgU3dpdGNoIiwgIlJpZ2h0IERBQyBNdXgifSwKIApAQCAtODA5LDEwICs4NjQsOCBAQAogCXsiSFBST1VUIiwgTlVMTCwgIlJpZ2h0IEhQIE91dCJ9LAogCiAJLyogTGVmdCBIUENPTSBPdXRwdXQgKi8KLQl7IkxlZnQgSFBDT00gTWl4ZXIiLCAiTGluZTJMIEJ5cGFzcyBTd2l0Y2giLCAiTGVmdCBMaW5lMkwgTXV4In0sCiAJeyJMZWZ0IEhQQ09NIE1peGVyIiwgIlBHQUwgQnlwYXNzIFN3aXRjaCIsICJMZWZ0IFBHQSBNaXhlciJ9LAogCXsiTGVmdCBIUENPTSBNaXhlciIsICJEQUNMMSBTd2l0Y2giLCAiTGVmdCBEQUMgTXV4In0sCi0JeyJMZWZ0IEhQQ09NIE1peGVyIiwgIkxpbmUyUiBCeXBhc3MgU3dpdGNoIiwgIlJpZ2h0IExpbmUyUiBNdXgifSwKIAl7IkxlZnQgSFBDT00gTWl4ZXIiLCAiUEdBUiBCeXBhc3MgU3dpdGNoIiwgIlJpZ2h0IFBHQSBNaXhlciJ9LAogCXsiTGVmdCBIUENPTSBNaXhlciIsICJEQUNSMSBTd2l0Y2giLCAiUmlnaHQgREFDIE11eCJ9LAogCkBAIC04MjMsMTAgKzg3Niw4IEBACiAJeyJIUExDT00iLCBOVUxMLCAiTGVmdCBIUCBDb20ifSwKIAogCS8qIFJpZ2h0IEhQQ09NIE91dHB1dCAqLwotCXsiUmlnaHQgSFBDT00gTWl4ZXIiLCAiTGluZTJMIEJ5cGFzcyBTd2l0Y2giLCAiTGVmdCBMaW5lMkwgTXV4In0sCiAJeyJSaWdodCBIUENPTSBNaXhlciIsICJQR0FMIEJ5cGFzcyBTd2l0Y2giLCAiTGVmdCBQR0EgTWl4ZXIifSwKIAl7IlJpZ2h0IEhQQ09NIE1peGVyIiwgIkRBQ0wxIFN3aXRjaCIsICJMZWZ0IERBQyBNdXgifSwKLQl7IlJpZ2h0IEhQQ09NIE1peGVyIiwgIkxpbmUyUiBCeXBhc3MgU3dpdGNoIiwgIlJpZ2h0IExpbmUyUiBNdXgifSwKIAl7IlJpZ2h0IEhQQ09NIE1peGVyIiwgIlBHQVIgQnlwYXNzIFN3aXRjaCIsICJSaWdodCBQR0EgTWl4ZXIifSwKIAl7IlJpZ2h0IEhQQ09NIE1peGVyIiwgIkRBQ1IxIFN3aXRjaCIsICJSaWdodCBEQUMgTXV4In0sCiAKQEAgLTgzOSw2ICs4OTAsNzIgQEAKIAl7IkhQUkNPTSIsIE5VTEwsICJSaWdodCBIUCBDb20ifSwKIH07CiAKKy8qIEZvciBvdGhlciB0aGFuIHRsdjMyMGFpYzMxMDQgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uX2V4dHJhW10gPSB7CisJLyogTGVmdCBJbnB1dCAqLworCXsiTGVmdCBMaW5lMkwgTXV4IiwgInNpbmdsZS1lbmRlZCIsICJMSU5FMkwifSwKKwl7IkxlZnQgTGluZTJMIE11eCIsICJkaWZmZXJlbnRpYWwiLCAiTElORTJMIn0sCisKKwl7IkxlZnQgUEdBIE1peGVyIiwgIkxpbmUyTCBTd2l0Y2giLCAiTGVmdCBMaW5lMkwgTXV4In0sCisJeyJMZWZ0IFBHQSBNaXhlciIsICJNaWMzTCBTd2l0Y2giLCAiTUlDM0wifSwKKwl7IkxlZnQgUEdBIE1peGVyIiwgIk1pYzNSIFN3aXRjaCIsICJNSUMzUiJ9LAorCisJeyJMZWZ0IEFEQyIsIE5VTEwsICJHUElPMSBkbWljIG1vZGNsayJ9LAorCisJLyogUmlnaHQgSW5wdXQgKi8KKwl7IlJpZ2h0IExpbmUyUiBNdXgiLCAic2luZ2xlLWVuZGVkIiwgIkxJTkUyUiJ9LAorCXsiUmlnaHQgTGluZTJSIE11eCIsICJkaWZmZXJlbnRpYWwiLCAiTElORTJSIn0sCisKKwl7IlJpZ2h0IFBHQSBNaXhlciIsICJMaW5lMlIgU3dpdGNoIiwgIlJpZ2h0IExpbmUyUiBNdXgifSwKKwl7IlJpZ2h0IFBHQSBNaXhlciIsICJNaWMzTCBTd2l0Y2giLCAiTUlDM0wifSwKKwl7IlJpZ2h0IFBHQSBNaXhlciIsICJNaWMzUiBTd2l0Y2giLCAiTUlDM1IifSwKKworCXsiUmlnaHQgQURDIiwgTlVMTCwgIkdQSU8xIGRtaWMgbW9kY2xrIn0sCisKKwkvKgorCSAqIExvZ2ljYWwgcGF0aCBiZXR3ZWVuIGRpZ2l0YWwgbWljIGVuYWJsZSBhbmQgR1BJTzEgbW9kdWxhdG9yIGNsb2NrCisJICogb3V0cHV0IGZ1bmN0aW9uCisJICovCisJeyJHUElPMSBkbWljIG1vZGNsayIsIE5VTEwsICJETWljIFJhdGUgMTI4In0sCisJeyJHUElPMSBkbWljIG1vZGNsayIsIE5VTEwsICJETWljIFJhdGUgNjQifSwKKwl7IkdQSU8xIGRtaWMgbW9kY2xrIiwgTlVMTCwgIkRNaWMgUmF0ZSAzMiJ9LAorCisJLyogTGVmdCBMaW5lIE91dHB1dCAqLworCXsiTGVmdCBMaW5lIE1peGVyIiwgIkxpbmUyTCBCeXBhc3MgU3dpdGNoIiwgIkxlZnQgTGluZTJMIE11eCJ9LAorCXsiTGVmdCBMaW5lIE1peGVyIiwgIkxpbmUyUiBCeXBhc3MgU3dpdGNoIiwgIlJpZ2h0IExpbmUyUiBNdXgifSwKKworCS8qIFJpZ2h0IExpbmUgT3V0cHV0ICovCisJeyJSaWdodCBMaW5lIE1peGVyIiwgIkxpbmUyTCBCeXBhc3MgU3dpdGNoIiwgIkxlZnQgTGluZTJMIE11eCJ9LAorCXsiUmlnaHQgTGluZSBNaXhlciIsICJMaW5lMlIgQnlwYXNzIFN3aXRjaCIsICJSaWdodCBMaW5lMlIgTXV4In0sCisKKwkvKiBMZWZ0IEhQIE91dHB1dCAqLworCXsiTGVmdCBIUCBNaXhlciIsICJMaW5lMkwgQnlwYXNzIFN3aXRjaCIsICJMZWZ0IExpbmUyTCBNdXgifSwKKwl7IkxlZnQgSFAgTWl4ZXIiLCAiTGluZTJSIEJ5cGFzcyBTd2l0Y2giLCAiUmlnaHQgTGluZTJSIE11eCJ9LAorCisJLyogUmlnaHQgSFAgT3V0cHV0ICovCisJeyJSaWdodCBIUCBNaXhlciIsICJMaW5lMkwgQnlwYXNzIFN3aXRjaCIsICJMZWZ0IExpbmUyTCBNdXgifSwKKwl7IlJpZ2h0IEhQIE1peGVyIiwgIkxpbmUyUiBCeXBhc3MgU3dpdGNoIiwgIlJpZ2h0IExpbmUyUiBNdXgifSwKKworCS8qIExlZnQgSFBDT00gT3V0cHV0ICovCisJeyJMZWZ0IEhQQ09NIE1peGVyIiwgIkxpbmUyTCBCeXBhc3MgU3dpdGNoIiwgIkxlZnQgTGluZTJMIE11eCJ9LAorCXsiTGVmdCBIUENPTSBNaXhlciIsICJMaW5lMlIgQnlwYXNzIFN3aXRjaCIsICJSaWdodCBMaW5lMlIgTXV4In0sCisKKwkvKiBSaWdodCBIUENPTSBPdXRwdXQgKi8KKwl7IlJpZ2h0IEhQQ09NIE1peGVyIiwgIkxpbmUyTCBCeXBhc3MgU3dpdGNoIiwgIkxlZnQgTGluZTJMIE11eCJ9LAorCXsiUmlnaHQgSFBDT00gTWl4ZXIiLCAiTGluZTJSIEJ5cGFzcyBTd2l0Y2giLCAiUmlnaHQgTGluZTJSIE11eCJ9LAorfTsKKworLyogRm9yIHRsdjMyMGFpYzMxMDQgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uX2V4dHJhXzMxMDRbXSA9IHsKKwkvKiBMZWZ0IElucHV0ICovCisJeyJMZWZ0IFBHQSBNaXhlciIsICJNaWMyTCBTd2l0Y2giLCAiTUlDMkwifSwKKwl7IkxlZnQgUEdBIE1peGVyIiwgIk1pYzJSIFN3aXRjaCIsICJNSUMyUiJ9LAorCisJLyogUmlnaHQgSW5wdXQgKi8KKwl7IlJpZ2h0IFBHQSBNaXhlciIsICJNaWMyTCBTd2l0Y2giLCAiTUlDMkwifSwKKwl7IlJpZ2h0IFBHQSBNaXhlciIsICJNaWMyUiBTd2l0Y2giLCAiTUlDMlIifSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGludGVyY29uX21vbm9bXSA9IHsKIAkvKiBNb25vIE91dHB1dCAqLwogCXsiTW9ubyBNaXhlciIsICJMaW5lMkwgQnlwYXNzIFN3aXRjaCIsICJMZWZ0IExpbmUyTCBNdXgifSwKQEAgLTg2NywxNyArOTg0LDMxIEBACiAJc3dpdGNoIChhaWMzeC0+bW9kZWwpIHsKIAljYXNlIEFJQzNYX01PREVMXzNYOgogCWNhc2UgQUlDM1hfTU9ERUxfMzM6CisJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgYWljM3hfZXh0cmFfZGFwbV93aWRnZXRzLAorCQkJCQkgIEFSUkFZX1NJWkUoYWljM3hfZXh0cmFfZGFwbV93aWRnZXRzKSk7CisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uX2V4dHJhLAorCQkJCQlBUlJBWV9TSVpFKGludGVyY29uX2V4dHJhKSk7CiAJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgYWljM3hfZGFwbV9tb25vX3dpZGdldHMsCiAJCQlBUlJBWV9TSVpFKGFpYzN4X2RhcG1fbW9ub193aWRnZXRzKSk7CiAJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uX21vbm8sCiAJCQkJCUFSUkFZX1NJWkUoaW50ZXJjb25fbW9ubykpOwogCQlicmVhazsKIAljYXNlIEFJQzNYX01PREVMXzMwMDc6CisJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgYWljM3hfZXh0cmFfZGFwbV93aWRnZXRzLAorCQkJCQkgIEFSUkFZX1NJWkUoYWljM3hfZXh0cmFfZGFwbV93aWRnZXRzKSk7CisJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uX2V4dHJhLAorCQkJCQlBUlJBWV9TSVpFKGludGVyY29uX2V4dHJhKSk7CiAJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgYWljMzAwN19kYXBtX3dpZGdldHMsCiAJCQlBUlJBWV9TSVpFKGFpYzMwMDdfZGFwbV93aWRnZXRzKSk7CiAJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIGludGVyY29uXzMwMDcsCiAJCQkJCUFSUkFZX1NJWkUoaW50ZXJjb25fMzAwNykpOwogCQlicmVhazsKKwljYXNlIEFJQzNYX01PREVMXzMxMDQ6CisJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgYWljMzEwNF9leHRyYV9kYXBtX3dpZGdldHMsCisJCQkJQVJSQVlfU0laRShhaWMzMTA0X2V4dHJhX2RhcG1fd2lkZ2V0cykpOworCQlzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBpbnRlcmNvbl9leHRyYV8zMTA0LAorCQkJCUFSUkFZX1NJWkUoaW50ZXJjb25fZXh0cmFfMzEwNCkpOworCQlicmVhazsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTEwNDYsNyArMTE3Nyw3IEBACiAJCWRlbGF5ICs9IGFpYzN4LT50ZG1fZGVsYXk7CiAKIAkvKiBDb25maWd1cmUgZGF0YSBkZWxheSAqLwotCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzNYX0FTRF9JTlRGX0NUUkxDLCBhaWMzeC0+dGRtX2RlbGF5KTsKKwlzbmRfc29jX3dyaXRlKGNvZGVjLCBBSUMzWF9BU0RfSU5URl9DVFJMQywgZGVsYXkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDM4LDIzICsxNTY5LDMzIEBACiAJYWljM3hfaW5pdChjb2RlYyk7CiAKIAlpZiAoYWljM3gtPnNldHVwKSB7Ci0JCS8qIHNldHVwIEdQSU8gZnVuY3Rpb25zICovCi0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzNYX0dQSU8xX1JFRywKLQkJCSAgICAgIChhaWMzeC0+c2V0dXAtPmdwaW9fZnVuY1swXSAmIDB4ZikgPDwgNCk7Ci0JCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzNYX0dQSU8yX1JFRywKLQkJCSAgICAgIChhaWMzeC0+c2V0dXAtPmdwaW9fZnVuY1sxXSAmIDB4ZikgPDwgNCk7CisJCWlmIChhaWMzeC0+bW9kZWwgIT0gQUlDM1hfTU9ERUxfMzEwNCkgeworCQkJLyogc2V0dXAgR1BJTyBmdW5jdGlvbnMgKi8KKwkJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIEFJQzNYX0dQSU8xX1JFRywKKwkJCQkgICAgICAoYWljM3gtPnNldHVwLT5ncGlvX2Z1bmNbMF0gJiAweGYpIDw8IDQpOworCQkJc25kX3NvY193cml0ZShjb2RlYywgQUlDM1hfR1BJTzJfUkVHLAorCQkJCSAgICAgIChhaWMzeC0+c2V0dXAtPmdwaW9fZnVuY1sxXSAmIDB4ZikgPDwgNCk7CisJCX0gZWxzZSB7CisJCQlkZXZfd2Fybihjb2RlYy0+ZGV2LCAiR1BJTyBmdW5jdGlvbmFsaXR5IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGx2MzIwYWljMzEwNFxuIik7CisJCX0KIAl9CiAKIAlzd2l0Y2ggKGFpYzN4LT5tb2RlbCkgewogCWNhc2UgQUlDM1hfTU9ERUxfM1g6CiAJY2FzZSBBSUMzWF9NT0RFTF8zMzoKKwkJc25kX3NvY19hZGRfY29kZWNfY29udHJvbHMoY29kZWMsIGFpYzN4X2V4dHJhX3NuZF9jb250cm9scywKKwkJCQlBUlJBWV9TSVpFKGFpYzN4X2V4dHJhX3NuZF9jb250cm9scykpOwogCQlzbmRfc29jX2FkZF9jb2RlY19jb250cm9scyhjb2RlYywgYWljM3hfbW9ub19jb250cm9scywKIAkJCQlBUlJBWV9TSVpFKGFpYzN4X21vbm9fY29udHJvbHMpKTsKIAkJYnJlYWs7CiAJY2FzZSBBSUMzWF9NT0RFTF8zMDA3OgorCQlzbmRfc29jX2FkZF9jb2RlY19jb250cm9scyhjb2RlYywgYWljM3hfZXh0cmFfc25kX2NvbnRyb2xzLAorCQkJCUFSUkFZX1NJWkUoYWljM3hfZXh0cmFfc25kX2NvbnRyb2xzKSk7CiAJCXNuZF9zb2NfYWRkX2NvZGVjX2NvbnRyb2xzKGNvZGVjLAogCQkJCSZhaWMzeF9jbGFzc2RfYW1wX2dhaW5fY3RybCwgMSk7CiAJCWJyZWFrOworCWNhc2UgQUlDM1hfTU9ERUxfMzEwNDoKKwkJYnJlYWs7CiAJfQogCiAJLyogc2V0IG1pYyBiaWFzIHZvbHRhZ2UgKi8KQEAgLTE1MjIsNiArMTY2Myw3IEBACiAJeyAidGx2MzIwYWljMzMiLCBBSUMzWF9NT0RFTF8zMyB9LAogCXsgInRsdjMyMGFpYzMwMDciLCBBSUMzWF9NT0RFTF8zMDA3IH0sCiAJeyAidGx2MzIwYWljMzEwNiIsIEFJQzNYX01PREVMXzNYIH0sCisJeyAidGx2MzIwYWljMzEwNCIsIEFJQzNYX01PREVMXzMxMDQgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWljM3hfaTJjX2lkKTsKQEAgLTE2NzMsNiArMTgxNSw3IEBACiAJeyAuY29tcGF0aWJsZSA9ICJ0aSx0bHYzMjBhaWMzMyIgfSwKIAl7IC5jb21wYXRpYmxlID0gInRpLHRsdjMyMGFpYzMwMDciIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJ0aSx0bHYzMjBhaWMzMTA2IiB9LAorCXsgLmNvbXBhdGlibGUgPSAidGksdGx2MzIwYWljMzEwNCIgfSwKIAl7fSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB0bHYzMjBhaWMzeF9vZl9tYXRjaCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3RsdjMyMGRhYzMzLmMKaW5kZXggMGZlMmNlZC4uNGUzZTYwNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90bHYzMjBkYWMzMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdGx2MzIwZGFjMzMuYwpAQCAtNDIzLDE3ICs0MjMsMTggQEAKIHN0YXRpYyBpbnQgZGFjMzNfcGxheWJhY2tfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHRsdjMyMGRhYzMzX3ByaXYgKmRhYzMzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YSh3LT5jb2RlYyk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCXN0cnVjdCB0bHYzMjBkYWMzM19wcml2ICpkYWMzMyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CiAJCWlmIChsaWtlbHkoZGFjMzMtPnN1YnN0cmVhbSkpIHsKLQkJCWRhYzMzX2NhbGN1bGF0ZV90aW1lcyhkYWMzMy0+c3Vic3RyZWFtLCB3LT5jb2RlYyk7Ci0JCQlkYWMzM19wcmVwYXJlX2NoaXAoZGFjMzMtPnN1YnN0cmVhbSwgdy0+Y29kZWMpOworCQkJZGFjMzNfY2FsY3VsYXRlX3RpbWVzKGRhYzMzLT5zdWJzdHJlYW0sIGNvZGVjKTsKKwkJCWRhYzMzX3ByZXBhcmVfY2hpcChkYWMzMy0+c3Vic3RyZWFtLCBjb2RlYyk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6Ci0JCWRhYzMzX2Rpc2FibGVfZGlnaXRhbCh3LT5jb2RlYyk7CisJCWRhYzMzX2Rpc2FibGVfZGlnaXRhbChjb2RlYyk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHMzYTIyN2UuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdHMzYTIyN2UuYwppbmRleCAxZDEyMDU3Li45ZmQ4MGFjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3RzM2EyMjdlLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90czNhMjI3ZS5jCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSA8c291bmQvamFjay5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogCisjaW5jbHVkZSAidHMzYTIyN2UuaCIKKwogc3RydWN0IHRzM2EyMjdlIHsKIAlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CiAJc3RydWN0IHNuZF9zb2NfamFjayAqamFjazsKQEAgLTc5LDYgKzgxLDEwIEBACiAvKiBUUzNBMjI3RV9SRUdfU0VUVElOR18yIDB4MDUgKi8KICNkZWZpbmUgS1BfRU5BQkxFIDB4MDQKIAorLyogVFMzQTIyN0VfUkVHX1NFVFRJTkdfMyAweDA2ICovCisjZGVmaW5lIE1JQ0JJQVNfU0VUVElOR19TRlQgKDMpCisjZGVmaW5lIE1JQ0JJQVNfU0VUVElOR19NQVNLICgweDcgPDwgTUlDQklBU19TRVRUSU5HX1NGVCkKKwogLyogVFMzQTIyN0VfUkVHX0FDQ0VTU09SWV9TVEFUVVMgIDB4MGIgKi8KICNkZWZpbmUgVFlQRV8zX1BPTEUgMHgwMQogI2RlZmluZSBUWVBFXzRfUE9MRV9PTVRQIDB4MDIKQEAgLTIyMSw5ICsyMjcsOSBAQAogCXN0cnVjdCB0czNhMjI3ZSAqdHMzYTIyN2UgPSBzbmRfc29jX2NvbXBvbmVudF9nZXRfZHJ2ZGF0YShjb21wb25lbnQpOwogCiAJc25kX2phY2tfc2V0X2tleShqYWNrLT5qYWNrLCBTTkRfSkFDS19CVE5fMCwgS0VZX01FRElBKTsKLQlzbmRfamFja19zZXRfa2V5KGphY2stPmphY2ssIFNORF9KQUNLX0JUTl8xLCBLRVlfVk9MVU1FVVApOwotCXNuZF9qYWNrX3NldF9rZXkoamFjay0+amFjaywgU05EX0pBQ0tfQlROXzIsIEtFWV9WT0xVTUVET1dOKTsKLQlzbmRfamFja19zZXRfa2V5KGphY2stPmphY2ssIFNORF9KQUNLX0JUTl8zLCBLRVlfVk9JQ0VDT01NQU5EKTsKKwlzbmRfamFja19zZXRfa2V5KGphY2stPmphY2ssIFNORF9KQUNLX0JUTl8xLCBLRVlfVk9JQ0VDT01NQU5EKTsKKwlzbmRfamFja19zZXRfa2V5KGphY2stPmphY2ssIFNORF9KQUNLX0JUTl8yLCBLRVlfVk9MVU1FVVApOworCXNuZF9qYWNrX3NldF9rZXkoamFjay0+amFjaywgU05EX0pBQ0tfQlROXzMsIEtFWV9WT0xVTUVET1dOKTsKIAogCXRzM2EyMjdlLT5qYWNrID0gamFjazsKIAl0czNhMjI3ZV9qYWNrX3JlcG9ydCh0czNhMjI3ZSk7CkBAIC0yNDgsMTIgKzI1NCwyOCBAQAogCS5udW1fcmVnX2RlZmF1bHRzID0gQVJSQVlfU0laRSh0czNhMjI3ZV9yZWdfZGVmYXVsdHMpLAogfTsKIAorc3RhdGljIGludCB0czNhMjI3ZV9wYXJzZV9kdChzdHJ1Y3QgdHMzYTIyN2UgKnRzM2EyMjdlLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQoreworCXUzMiBtaWNiaWFzOworCWludCBlcnI7CisKKwllcnIgPSBvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgInRpLG1pY2JpYXMiLCAmbWljYmlhcyk7CisJaWYgKCFlcnIpIHsKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHRzM2EyMjdlLT5yZWdtYXAsIFRTM0EyMjdFX1JFR19TRVRUSU5HXzMsCisJCQlNSUNCSUFTX1NFVFRJTkdfTUFTSywKKwkJCShtaWNiaWFzICYgMHgwNykgPDwgTUlDQklBU19TRVRUSU5HX1NGVCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdHMzYTIyN2VfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHRzM2EyMjdlICp0czNhMjI3ZTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaTJjLT5kZXY7CiAJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgYWNjX3JlZzsKIAogCXRzM2EyMjdlID0gZGV2bV9remFsbG9jKCZpMmMtPmRldiwgc2l6ZW9mKCp0czNhMjI3ZSksIEdGUF9LRVJORUwpOwogCWlmICh0czNhMjI3ZSA9PSBOVUxMKQpAQCAtMjY1LDYgKzI4NywxNCBAQAogCWlmIChJU19FUlIodHMzYTIyN2UtPnJlZ21hcCkpCiAJCXJldHVybiBQVFJfRVJSKHRzM2EyMjdlLT5yZWdtYXApOwogCisJaWYgKGRldi0+b2Zfbm9kZSkgeworCQlyZXQgPSB0czNhMjI3ZV9wYXJzZV9kdCh0czNhMjI3ZSwgZGV2LT5vZl9ub2RlKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcGFyc2UgZGV2aWNlIHRyZWU6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKwogCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoZGV2LCBpMmMtPmlycSwgTlVMTCwgdHMzYTIyN2VfaW50ZXJydXB0LAogCQkJCQlJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULAogCQkJCQkiVFMzQTIyN0UiLCB0czNhMjI3ZSk7CkBAIC0yODMsNiArMzEzLDExIEBACiAJCQkgICBJTlRCX0RJU0FCTEUgfCBBRENfQ09NUExFVEVfSU5UX0RJU0FCTEUsCiAJCQkgICBBRENfQ09NUExFVEVfSU5UX0RJU0FCTEUpOwogCisJLyogUmVhZCBqYWNrIHN0YXR1cyBiZWNhdXNlIGNoaXAgbWlnaHQgbm90IHRyaWdnZXIgaW50ZXJydXB0IGF0IGJvb3QuICovCisJcmVnbWFwX3JlYWQodHMzYTIyN2UtPnJlZ21hcCwgVFMzQTIyN0VfUkVHX0FDQ0VTU09SWV9TVEFUVVMsICZhY2NfcmVnKTsKKwl0czNhMjI3ZV9uZXdfamFja19zdGF0ZSh0czNhMjI3ZSwgYWNjX3JlZyk7CisJdHMzYTIyN2VfamFja19yZXBvcnQodHMzYTIyN2UpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdHdsNDAzMC5jIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKaW5kZXggNDRhZjMxOC4uZDA0NjkzZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy90d2w0MDMwLmMKQEAgLTU2NywxMiArNTY3LDEzIEBACiBzdGF0aWMgaW50IHBpbl9uYW1lIyNwZ2FfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCQlcCiAJCQkgICAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkgXAogewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YSh3LT5jb2RlYyk7IFwKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CVwKKwlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7IFwKIAkJCQkJCQkJCVwKIAlzd2l0Y2ggKGV2ZW50KSB7CQkJCQkJXAogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgkJCQkJXAogCQl0d2w0MDMwLT5waW5fbmFtZSMjX2VuYWJsZWQgPSAxOwkJCVwKLQkJdHdsNDAzMF93cml0ZSh3LT5jb2RlYywgcmVnLCB0d2w0MDMwX3JlYWQody0+Y29kZWMsIHJlZykpOyBcCisJCXR3bDQwMzBfd3JpdGUoY29kZWMsIHJlZywgdHdsNDAzMF9yZWFkKGNvZGVjLCByZWcpKTsJXAogCQlicmVhazsJCQkJCQkJXAogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgkJCQkJXAogCQl0d2w0MDMwLT5waW5fbmFtZSMjX2VuYWJsZWQgPSAwOwkJCVwKQEAgLTYyMSwxMiArNjIyLDE0IEBACiBzdGF0aWMgaW50IGhhbmRzZnJlZWxwZ2FfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CisKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6Ci0JCWhhbmRzZnJlZV9yYW1wKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IRkxfQ1RMLCAxKTsKKwkJaGFuZHNmcmVlX3JhbXAoY29kZWMsIFRXTDQwMzBfUkVHX0hGTF9DVEwsIDEpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKLQkJaGFuZHNmcmVlX3JhbXAody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hGTF9DVEwsIDApOworCQloYW5kc2ZyZWVfcmFtcChjb2RlYywgVFdMNDAzMF9SRUdfSEZMX0NUTCwgMCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTYzNSwxMiArNjM4LDE0IEBACiBzdGF0aWMgaW50IGhhbmRzZnJlZXJwZ2FfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CisKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTVU6Ci0JCWhhbmRzZnJlZV9yYW1wKHctPmNvZGVjLCBUV0w0MDMwX1JFR19IRlJfQ1RMLCAxKTsKKwkJaGFuZHNmcmVlX3JhbXAoY29kZWMsIFRXTDQwMzBfUkVHX0hGUl9DVEwsIDEpOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKLQkJaGFuZHNmcmVlX3JhbXAody0+Y29kZWMsIFRXTDQwMzBfUkVHX0hGUl9DVEwsIDApOworCQloYW5kc2ZyZWVfcmFtcChjb2RlYywgVFdMNDAzMF9SRUdfSEZSX0NUTCwgMCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY0OSwxOSArNjU0LDIzIEBACiBzdGF0aWMgaW50IHZpYnJhbXV4X2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXR3bDQwMzBfd3JpdGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX1ZJQlJBX1NFVCwgMHhmZik7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCisJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfVklCUkFfU0VULCAweGZmKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhcGxsX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkgICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKKwogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgotCQl0d2w0MDMwX2FwbGxfZW5hYmxlKHctPmNvZGVjLCAxKTsKKwkJdHdsNDAzMF9hcGxsX2VuYWJsZShjb2RlYywgMSk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgotCQl0d2w0MDMwX2FwbGxfZW5hYmxlKHctPmNvZGVjLCAwKTsKKwkJdHdsNDAzMF9hcGxsX2VuYWJsZShjb2RlYywgMCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY3MCwyMyArNjc5LDI0IEBACiBzdGF0aWMgaW50IGFpZl9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAl1OCBhdWRpb19pZjsKIAotCWF1ZGlvX2lmID0gdHdsNDAzMF9yZWFkKHctPmNvZGVjLCBUV0w0MDMwX1JFR19BVURJT19JRik7CisJYXVkaW9faWYgPSB0d2w0MDMwX3JlYWQoY29kZWMsIFRXTDQwMzBfUkVHX0FVRElPX0lGKTsKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKIAkJLyogRW5hYmxlIEFJRiAqLwogCQkvKiBlbmFibGUgdGhlIFBMTCBiZWZvcmUgd2UgdXNlIGl0IHRvIGNsb2NrIHRoZSBEQUkgKi8KLQkJdHdsNDAzMF9hcGxsX2VuYWJsZSh3LT5jb2RlYywgMSk7CisJCXR3bDQwMzBfYXBsbF9lbmFibGUoY29kZWMsIDEpOwogCi0JCXR3bDQwMzBfd3JpdGUody0+Y29kZWMsIFRXTDQwMzBfUkVHX0FVRElPX0lGLAorCQl0d2w0MDMwX3dyaXRlKGNvZGVjLCBUV0w0MDMwX1JFR19BVURJT19JRiwKIAkJCSAgICAgIGF1ZGlvX2lmIHwgVFdMNDAzMF9BSUZfRU4pOwogCQlicmVhazsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKIAkJLyogZGlzYWJsZSB0aGUgREFJIGJlZm9yZSB3ZSBzdG9wIGl0J3Mgc291cmNlIFBMTCAqLwotCQl0d2w0MDMwX3dyaXRlKHctPmNvZGVjLCBUV0w0MDMwX1JFR19BVURJT19JRiwKKwkJdHdsNDAzMF93cml0ZShjb2RlYywgVFdMNDAzMF9SRUdfQVVESU9fSUYsCiAJCQkgICAgICBhdWRpb19pZiAmICB+VFdMNDAzMF9BSUZfRU4pOwotCQl0d2w0MDMwX2FwbGxfZW5hYmxlKHctPmNvZGVjLCAwKTsKKwkJdHdsNDAzMF9hcGxsX2VuYWJsZShjb2RlYywgMCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTc1OCwyMCArNzY4LDIxIEBACiBzdGF0aWMgaW50IGhlYWRzZXRscGdhX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKHctPmNvZGVjKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CisJc3RydWN0IHR3bDQwMzBfcHJpdiAqdHdsNDAzMCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgogCQkvKiBEbyB0aGUgcmFtcC11cCBvbmx5IG9uY2UgKi8KIAkJaWYgKCF0d2w0MDMwLT5oc3JfZW5hYmxlZCkKLQkJCWhlYWRzZXRfcmFtcCh3LT5jb2RlYywgMSk7CisJCQloZWFkc2V0X3JhbXAoY29kZWMsIDEpOwogCiAJCXR3bDQwMzAtPmhzbF9lbmFibGVkID0gMTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CiAJCS8qIERvIHRoZSByYW1wLWRvd24gb25seSBpZiBib3RoIGhlYWRzZXRML1IgaXMgZGlzYWJsZWQgKi8KIAkJaWYgKCF0d2w0MDMwLT5oc3JfZW5hYmxlZCkKLQkJCWhlYWRzZXRfcmFtcCh3LT5jb2RlYywgMCk7CisJCQloZWFkc2V0X3JhbXAoY29kZWMsIDApOwogCiAJCXR3bDQwMzAtPmhzbF9lbmFibGVkID0gMDsKIAkJYnJlYWs7CkBAIC03ODIsMjAgKzc5MywyMSBAQAogc3RhdGljIGludCBoZWFkc2V0cnBnYV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJCSAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YSh3LT5jb2RlYyk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNVToKIAkJLyogRG8gdGhlIHJhbXAtdXAgb25seSBvbmNlICovCiAJCWlmICghdHdsNDAzMC0+aHNsX2VuYWJsZWQpCi0JCQloZWFkc2V0X3JhbXAody0+Y29kZWMsIDEpOworCQkJaGVhZHNldF9yYW1wKGNvZGVjLCAxKTsKIAogCQl0d2w0MDMwLT5oc3JfZW5hYmxlZCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgogCQkvKiBEbyB0aGUgcmFtcC1kb3duIG9ubHkgaWYgYm90aCBoZWFkc2V0TC9SIGlzIGRpc2FibGVkICovCiAJCWlmICghdHdsNDAzMC0+aHNsX2VuYWJsZWQpCi0JCQloZWFkc2V0X3JhbXAody0+Y29kZWMsIDApOworCQkJaGVhZHNldF9yYW1wKGNvZGVjLCAwKTsKIAogCQl0d2w0MDMwLT5oc3JfZW5hYmxlZCA9IDA7CiAJCWJyZWFrOwpAQCAtODA2LDcgKzgxOCw4IEBACiBzdGF0aWMgaW50IGRpZ2ltaWNfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3QgdHdsNDAzMF9wcml2ICp0d2w0MDMwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YSh3LT5jb2RlYyk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOworCXN0cnVjdCB0d2w0MDMwX3ByaXYgKnR3bDQwMzAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlzdHJ1Y3QgdHdsNDAzMF9jb2RlY19kYXRhICpwZGF0YSA9IHR3bDQwMzAtPnBkYXRhOwogCiAJaWYgKHBkYXRhICYmIHBkYXRhLT5kaWdpbWljX2RlbGF5KQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy90d2w2MDQwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDYwNDAuYwppbmRleCA5MGY0N2Y5Li5hZWVjMjdiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3R3bDYwNDAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3R3bDYwNDAuYwpAQCAtMjM0LDcgKzIzNCw3IEBACiBzdGF0aWMgaW50IHR3bDYwNDBfaHNfZGFjX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJdTggaHNsY3RsLCBoc3JjdGw7CiAKIAkvKgpAQCAtMjYxLDcgKzI2MSw3IEBACiBzdGF0aWMgaW50IHR3bDYwNDBfZXBfZHJ2X2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJc3RydWN0IHR3bDYwNDBfZGF0YSAqcHJpdiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCWludCByZXQgPSAwOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtMjAwMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTIwMDAuYwppbmRleCAzNGVmNjVjLi44ZDlkZTQ5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtMjAwMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd20yMDAwLmMKQEAgLTY4Myw3ICs2ODMsNyBAQAogc3RhdGljIGludCB3bTIwMDBfYW5jX3Bvd2VyX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJCSAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJc3RydWN0IHdtMjAwMF9wcml2ICp3bTIwMDAgPSBkZXZfZ2V0X2RydmRhdGEoY29kZWMtPmRldik7CiAJaW50IHJldDsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTUxMDAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd201MTAwLmMKaW5kZXggYjgwOTcwZC4uZWEwOWRiNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTUxMDAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtNTEwMC5jCkBAIC03NzUsNyArNzc1LDggQEAKIAkJCSBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCSBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHdtNTEwMF9wcml2ICp3bTUxMDAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKHctPmNvZGVjKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CisJc3RydWN0IHdtNTEwMF9wcml2ICp3bTUxMDAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAogCXN3aXRjaCAody0+cmVnKSB7CiAJY2FzZSBXTTUxMDBfQ0hBTk5FTF9FTkFCTEVTXzE6CkBAIC04MzksNyArODQwLDcgQEAKIAkJCSAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkgIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJc3RydWN0IHdtNTEwMF9wcml2ICp3bTUxMDAgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlpbnQgcmV0OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtNTEwMi5jIGIvc291bmQvc29jL2NvZGVjcy93bTUxMDIuYwppbmRleCBmNDM5YWUwNS4uNmQwZmUwYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTUxMDIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtNTEwMi5jCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tZmQvYXJpem9uYS9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL2FyaXpvbmEvcmVnaXN0ZXJzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSAiYXJpem9uYS5oIgogI2luY2x1ZGUgIndtNTEwMi5oIgpAQCAtNTgwLDcgKzU4MSw3IEBACiBzdGF0aWMgaW50IHdtNTEwMl9zeXNjbGtfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJc3RydWN0IGFyaXpvbmEgKmFyaXpvbmEgPSBkZXZfZ2V0X2RydmRhdGEoY29kZWMtPmRldi0+cGFyZW50KTsKIAlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBhcml6b25hLT5yZWdtYXA7CiAJY29uc3Qgc3RydWN0IHJlZ19kZWZhdWx0ICpwYXRjaCA9IE5VTEw7CkBAIC02MTcsMTEgKzYxOCwxMCBAQAogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2Nfa2NvbnRyb2xfY29kZWMoa2NvbnRyb2wpOwogCXN0cnVjdCBhcml6b25hICphcml6b25hID0gZGV2X2dldF9kcnZkYXRhKGNvZGVjLT5kZXYtPnBhcmVudCk7Ci0JdWludDE2X3QgZGF0YTsKIAogCW11dGV4X2xvY2soJmFyaXpvbmEtPmRhY19jb21wX2xvY2spOwotCWRhdGEgPSBjcHVfdG9fYmUxNihhcml6b25hLT5kYWNfY29tcF9jb2VmZik7Ci0JbWVtY3B5KHVjb250cm9sLT52YWx1ZS5ieXRlcy5kYXRhLCAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsKKwlwdXRfdW5hbGlnbmVkX2JlMTYoYXJpem9uYS0+ZGFjX2NvbXBfY29lZmYsCisJCQkgICB1Y29udHJvbC0+dmFsdWUuYnl0ZXMuZGF0YSk7CiAJbXV0ZXhfdW5sb2NrKCZhcml6b25hLT5kYWNfY29tcF9sb2NrKTsKIAogCXJldHVybiAwOwpAQCAtMTI3MiwxOSArMTI3MiwyNCBAQAogCiBTTkRfU09DX0RBUE1fUEdBX0UoIk9VVDFMIiwgU05EX1NPQ19OT1BNLAogCQkgICBBUklaT05BX09VVDFMX0VOQV9TSElGVCwgMCwgTlVMTCwgMCwgYXJpem9uYV9ocF9ldiwKLQkJICAgU05EX1NPQ19EQVBNX1BSRV9QTUQgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCB8CisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKIFNORF9TT0NfREFQTV9QR0FfRSgiT1VUMVIiLCBTTkRfU09DX05PUE0sCiAJCSAgIEFSSVpPTkFfT1VUMVJfRU5BX1NISUZULCAwLCBOVUxMLCAwLCBhcml6b25hX2hwX2V2LAotCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSksCisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EIHwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAogU05EX1NPQ19EQVBNX1BHQV9FKCJPVVQyTCIsIEFSSVpPTkFfT1VUUFVUX0VOQUJMRVNfMSwKIAkJICAgQVJJWk9OQV9PVVQyTF9FTkFfU0hJRlQsIDAsIE5VTEwsIDAsIGFyaXpvbmFfb3V0X2V2LAotCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSksCisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EIHwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAogU05EX1NPQ19EQVBNX1BHQV9FKCJPVVQyUiIsIEFSSVpPTkFfT1VUUFVUX0VOQUJMRVNfMSwKIAkJICAgQVJJWk9OQV9PVVQyUl9FTkFfU0hJRlQsIDAsIE5VTEwsIDAsIGFyaXpvbmFfb3V0X2V2LAotCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSksCisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EIHwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAogU05EX1NPQ19EQVBNX1BHQV9FKCJPVVQzTCIsIEFSSVpPTkFfT1VUUFVUX0VOQUJMRVNfMSwKIAkJICAgQVJJWk9OQV9PVVQzTF9FTkFfU0hJRlQsIDAsIE5VTEwsIDAsIGFyaXpvbmFfb3V0X2V2LAotCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSksCisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EIHwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAogU05EX1NPQ19EQVBNX1BHQV9FKCJPVVQ1TCIsIEFSSVpPTkFfT1VUUFVUX0VOQUJMRVNfMSwKIAkJICAgQVJJWk9OQV9PVVQ1TF9FTkFfU0hJRlQsIDAsIE5VTEwsIDAsIGFyaXpvbmFfb3V0X2V2LAogCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSksCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtNTExMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTUxMTAuYwppbmRleCA0NDU2YjM4Li5mYmFlZGRiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtNTExMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd201MTEwLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogc3RhdGljIGludCB3bTUxMTBfc3lzY2xrX2V2KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBhcml6b25hICphcml6b25hID0gZGV2X2dldF9kcnZkYXRhKGNvZGVjLT5kZXYtPnBhcmVudCk7CiAJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gYXJpem9uYS0+cmVnbWFwOwogCWNvbnN0IHN0cnVjdCByZWdfZGVmYXVsdCAqcGF0Y2ggPSBOVUxMOwpAQCAtOTA1LDIyICs5MDUsMjggQEAKIAogU05EX1NPQ19EQVBNX1BHQV9FKCJPVVQxTCIsIFNORF9TT0NfTk9QTSwKIAkJICAgQVJJWk9OQV9PVVQxTF9FTkFfU0hJRlQsIDAsIE5VTEwsIDAsIGFyaXpvbmFfaHBfZXYsCi0JCSAgIFNORF9TT0NfREFQTV9QUkVfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTUQgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQgfAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSksCiBTTkRfU09DX0RBUE1fUEdBX0UoIk9VVDFSIiwgU05EX1NPQ19OT1BNLAogCQkgICBBUklaT05BX09VVDFSX0VOQV9TSElGVCwgMCwgTlVMTCwgMCwgYXJpem9uYV9ocF9ldiwKLQkJICAgU05EX1NPQ19EQVBNX1BSRV9QTUQgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCB8CisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKIFNORF9TT0NfREFQTV9QR0FfRSgiT1VUMkwiLCBBUklaT05BX09VVFBVVF9FTkFCTEVTXzEsCiAJCSAgIEFSSVpPTkFfT1VUMkxfRU5BX1NISUZULCAwLCBOVUxMLCAwLCBhcml6b25hX291dF9ldiwKLQkJICAgU05EX1NPQ19EQVBNX1BSRV9QTUQgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCB8CisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKIFNORF9TT0NfREFQTV9QR0FfRSgiT1VUMlIiLCBBUklaT05BX09VVFBVVF9FTkFCTEVTXzEsCiAJCSAgIEFSSVpPTkFfT1VUMlJfRU5BX1NISUZULCAwLCBOVUxMLCAwLCBhcml6b25hX291dF9ldiwKLQkJICAgU05EX1NPQ19EQVBNX1BSRV9QTUQgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCB8CisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKIFNORF9TT0NfREFQTV9QR0FfRSgiT1VUM0wiLCBBUklaT05BX09VVFBVVF9FTkFCTEVTXzEsCiAJCSAgIEFSSVpPTkFfT1VUM0xfRU5BX1NISUZULCAwLCBOVUxMLCAwLCBhcml6b25hX291dF9ldiwKLQkJICAgU05EX1NPQ19EQVBNX1BSRV9QTUQgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCB8CisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKIFNORF9TT0NfREFQTV9QR0FfRSgiT1VUM1IiLCBBUklaT05BX09VVFBVVF9FTkFCTEVTXzEsCiAJCSAgIEFSSVpPTkFfT1VUM1JfRU5BX1NISUZULCAwLCBOVUxMLCAwLCBhcml6b25hX291dF9ldiwKLQkJICAgU05EX1NPQ19EQVBNX1BSRV9QTUQgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCB8CisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKIFNORF9TT0NfREFQTV9QR0FfRSgiT1VUNUwiLCBBUklaT05BX09VVFBVVF9FTkFCTEVTXzEsCiAJCSAgIEFSSVpPTkFfT1VUNUxfRU5BX1NISUZULCAwLCBOVUxMLCAwLCBhcml6b25hX291dF9ldiwKIAkJICAgU05EX1NPQ19EQVBNX1BSRV9QTUQgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKaW5kZXggNTc0NTc5Yi4uYzgxYTllYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCkBAIC0yNTksNyArMjU5LDcgQEAKIHN0YXRpYyBpbnQgcGdhX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCB3bTgzNTBfZGF0YSAqd204MzUwX2RhdGEgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlzdHJ1Y3Qgd204MzUwX291dHB1dCAqb3V0OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODQwMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg0MDAuYwppbmRleCA4ZWU0NDY5Li5iMGQ4NGU1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODQwMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NDAwLmMKQEAgLTMyNCw2ICszMjQsNyBAQAogc3RhdGljIGludCBvdXRtaXhlcl9ldmVudCAoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJc3RydWN0IHNuZF9rY29udHJvbCAqIGtjb250cm9sLCBpbnQgZXZlbnQpCiB7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPQogCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJdTMyIHJlZ19zaGlmdCA9IG1jLT5zaGlmdDsKQEAgLTMzMiw3ICszMzMsNyBAQAogCiAJc3dpdGNoIChyZWdfc2hpZnQpIHsKIAljYXNlIFdNODQwMF9TUEVBS0VSX01JWEVSIHwgKFdNODQwMF9MRFNQSyA8PCA4KSA6Ci0JCXJlZyA9IHNuZF9zb2NfcmVhZCh3LT5jb2RlYywgV004NDAwX09VVFBVVF9NSVhFUjEpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODQwMF9PVVRQVVRfTUlYRVIxKTsKIAkJaWYgKHJlZyAmIFdNODQwMF9MRExPKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiQ2Fubm90IHNldCBhcyBPdXRwdXQgTWl4ZXIgMSBMRExPIFNldFxuIik7CkBAIC0zNDAsNyArMzQxLDcgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFdNODQwMF9TUEVBS0VSX01JWEVSIHwgKFdNODQwMF9SRFNQSyA8PCA4KToKLQkJcmVnID0gc25kX3NvY19yZWFkKHctPmNvZGVjLCBXTTg0MDBfT1VUUFVUX01JWEVSMik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NDAwX09VVFBVVF9NSVhFUjIpOwogCQlpZiAocmVnICYgV004NDAwX1JEUk8pIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSJDYW5ub3Qgc2V0IGFzIE91dHB1dCBNaXhlciAyIFJEUk8gU2V0XG4iKTsKQEAgLTM0OCw3ICszNDksNyBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgV004NDAwX09VVFBVVF9NSVhFUjEgfCAoV004NDAwX0xETE8gPDwgOCk6Ci0JCXJlZyA9IHNuZF9zb2NfcmVhZCh3LT5jb2RlYywgV004NDAwX1NQRUFLRVJfTUlYRVIpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODQwMF9TUEVBS0VSX01JWEVSKTsKIAkJaWYgKHJlZyAmIFdNODQwMF9MRFNQSykgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJIkNhbm5vdCBzZXQgYXMgU3BlYWtlciBNaXhlciBMRFNQSyBTZXRcbiIpOwpAQCAtMzU2LDcgKzM1Nyw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBXTTg0MDBfT1VUUFVUX01JWEVSMiB8IChXTTg0MDBfUkRSTyA8PCA4KToKLQkJcmVnID0gc25kX3NvY19yZWFkKHctPmNvZGVjLCBXTTg0MDBfU1BFQUtFUl9NSVhFUik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004NDAwX1NQRUFLRVJfTUlYRVIpOwogCQlpZiAocmVnICYgV004NDAwX1JEU1BLKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiQ2Fubm90IHNldCBhcyBTcGVha2VyIE1peGVyIFJEU1BLIFNldFxuIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3MzEuYwppbmRleCBiOTIxMWI0Li4wOThjMTQzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODczMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzMxLmMKQEAgLTIxNyw3ICsyMTcsOCBAQAogc3RhdGljIGludCB3bTg3MzFfY2hlY2tfb3NjKHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICpzb3VyY2UsCiAJCQkgICAgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNpbmspCiB7Ci0Jc3RydWN0IHdtODczMV9wcml2ICp3bTg3MzEgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKHNvdXJjZS0+Y29kZWMpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyhzb3VyY2UtPmRhcG0pOworCXN0cnVjdCB3bTg3MzFfcHJpdiAqd204NzMxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlyZXR1cm4gd204NzMxLT5zeXNjbGtfdHlwZSA9PSBXTTg3MzFfU1lTQ0xLX1hUQUw7CiB9CkBAIC03MTcsNiArNzE4LDggQEAKIAlpZiAod204NzMxID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCisJbXV0ZXhfaW5pdCgmd204NzMxLT5sb2NrKTsKKwogCXdtODczMS0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoaTJjLCAmd204NzMxX3JlZ21hcCk7CiAJaWYgKElTX0VSUih3bTg3MzEtPnJlZ21hcCkpIHsKIAkJcmV0ID0gUFRSX0VSUih3bTg3MzEtPnJlZ21hcCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg3NTAuYwppbmRleCBmNjg0N2ZkLi5lYjBhMTY0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODc1MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204NzUwLmMKQEAgLTMyMyw3ICszMjMsNyBAQAogCVNORF9TT0NfREFQTV9PVVRQVVQoIlJPVVQyIiksCiAJU05EX1NPQ19EQVBNX09VVFBVVCgiTU9OTzEiKSwKIAlTTkRfU09DX0RBUE1fT1VUUFVUKCJPVVQzIiksCi0JU05EX1NPQ19EQVBNX09VVFBVVCgiVlJFRiIpLAorCVNORF9TT0NfREFQTV9WTUlEKCJWUkVGIiksCiAKIAlTTkRfU09DX0RBUE1fSU5QVVQoIkxJTlBVVDEiKSwKIAlTTkRfU09DX0RBUE1fSU5QVVQoIkxJTlBVVDIiKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzcwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODc3MC5jCmluZGV4IDE4MGU3YTAuLjUzZTk3N2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204NzcwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg3NzAuYwpAQCAtMzA4LDkgKzMwOCw3IEBACiBzdGF0aWMgaW50IHZvdXQxMnN1cHBseV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKLQotCWNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CkBAIC0zMjcsOSArMzI1LDcgQEAKIHN0YXRpYyBpbnQgdm91dDM0c3VwcGx5X2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCi0JY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204ODA0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODgwNC5jCmluZGV4IDEzMTVmNzYuLmIyYjBlNjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204ODA0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg4MDQuYwpAQCAtNjQ4LDcgKzY0OCw3IEBACiAJLnN5bW1ldHJpY19yYXRlcyA9IDEKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jb2RlY19kcml2ZXIgc29jX2NvZGVjX2Rldl93bTg4MDQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZfd204ODA0ID0gewogCS5wcm9iZSA9IHdtODgwNF9wcm9iZSwKIAkucmVtb3ZlID0gd204ODA0X3JlbW92ZSwKIAkuc2V0X2JpYXNfbGV2ZWwgPSB3bTg4MDRfc2V0X2JpYXNfbGV2ZWwsCkBAIC02NjQsNyArNjY0LDcgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB3bTg4MDRfb2ZfbWF0Y2gpOwogCi1zdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgd204ODA0X3JlZ21hcF9jb25maWcgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgd204ODA0X3JlZ21hcF9jb25maWcgPSB7CiAJLnJlZ19iaXRzID0gOCwKIAkudmFsX2JpdHMgPSA4LAogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDAuYwppbmRleCAzYTBkNGI3Li4yZWI5ODZjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAwLmMKQEAgLTIyNCw3ICsyMjQsNyBAQAogc3RhdGljIGludCB3bTg5MDBfaHBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAl1MTYgaHBjdGwxID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5MDBfUkVHX0hQQ1RMMSk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwppbmRleCBjYzZiMGVmLi5kZGU0NjJjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogc3RhdGljIGludCB3bTg5MDNfZGNzX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCB3bTg5MDNfcHJpdiAqd204OTAzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDQuYwppbmRleCA0ZDJkMmIxLi5kM2IzZjU3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwNC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTA0LmMKQEAgLTY3Myw3ICs2NzMsNyBAQAogc3RhdGljIGludCBzeXNjbGtfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJc3RydWN0IHdtODkwNF9wcml2ICp3bTg5MDQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKQEAgLTcxMSw3ICs3MTEsNyBAQAogc3RhdGljIGludCBvdXRfcGdhX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCB3bTg5MDRfcHJpdiAqd204OTA0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJaW50IHJlZywgdmFsOwogCWludCBkY3NfbWFzazsKQEAgLTEwNzYsMTAgKzEwNzYsMTMgQEAKIAl7ICJSaWdodCBDYXB0dXJlIFBHQSIsIE5VTEwsICJSaWdodCBDYXB0dXJlIE11eCIgfSwKIAl7ICJSaWdodCBDYXB0dXJlIFBHQSIsIE5VTEwsICJSaWdodCBDYXB0dXJlIEludmVydGluZyBNdXgiIH0sCiAKLQl7ICJBSUZPVVRMIiwgIkxlZnQiLCAgIkFEQ0wiIH0sCi0JeyAiQUlGT1VUTCIsICJSaWdodCIsICJBRENSIiB9LAotCXsgIkFJRk9VVFIiLCAiTGVmdCIsICAiQURDTCIgfSwKLQl7ICJBSUZPVVRSIiwgIlJpZ2h0IiwgIkFEQ1IiIH0sCisJeyAiQUlGT1VUTCBNdXgiLCAiTGVmdCIsICJBRENMIiB9LAorCXsgIkFJRk9VVEwgTXV4IiwgIlJpZ2h0IiwgIkFEQ1IiIH0sCisJeyAiQUlGT1VUUiBNdXgiLCAiTGVmdCIsICJBRENMIiB9LAorCXsgIkFJRk9VVFIgTXV4IiwgIlJpZ2h0IiwgIkFEQ1IiIH0sCisKKwl7ICJBSUZPVVRMIiwgTlVMTCwgIkFJRk9VVEwgTXV4IiB9LAorCXsgIkFJRk9VVFIiLCBOVUxMLCAiQUlGT1VUUiBNdXgiIH0sCiAKIAl7ICJBRENMIiwgTlVMTCwgIkNMS19EU1AiIH0sCiAJeyAiQURDTCIsIE5VTEwsICJMZWZ0IENhcHR1cmUgUEdBIiB9LApAQCAtMTA4OSwxMiArMTA5MiwxNiBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgZGFjX2ludGVyY29uW10gPSB7Ci0JeyAiREFDTCIsICJSaWdodCIsICJBSUZJTlIiIH0sCi0JeyAiREFDTCIsICJMZWZ0IiwgICJBSUZJTkwiIH0sCisJeyAiREFDTCBNdXgiLCAiTGVmdCIsICJBSUZJTkwiIH0sCisJeyAiREFDTCBNdXgiLCAiUmlnaHQiLCAiQUlGSU5SIiB9LAorCisJeyAiREFDUiBNdXgiLCAiTGVmdCIsICJBSUZJTkwiIH0sCisJeyAiREFDUiBNdXgiLCAiUmlnaHQiLCAiQUlGSU5SIiB9LAorCisJeyAiREFDTCIsIE5VTEwsICJEQUNMIE11eCIgfSwKIAl7ICJEQUNMIiwgTlVMTCwgIkNMS19EU1AiIH0sCiAKLQl7ICJEQUNSIiwgIlJpZ2h0IiwgIkFJRklOUiIgfSwKLQl7ICJEQUNSIiwgIkxlZnQiLCAgIkFJRklOTCIgfSwKKwl7ICJEQUNSIiwgTlVMTCwgIkRBQ1IgTXV4IiB9LAogCXsgIkRBQ1IiLCBOVUxMLCAiQ0xLX0RTUCIgfSwKIAogCXsgIkNoYXJnZSBwdW1wIiwgTlVMTCwgIlNZU0NMSyIgfSwKQEAgLTIwOTgsNiArMjEwNSwyNCBAQAogCS5udW1fcmVnX2RlZmF1bHRzID0gQVJSQVlfU0laRSh3bTg5MDRfcmVnX2RlZmF1bHRzKSwKIH07CiAKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBlbnVtIHdtODkwNF90eXBlIHdtODkwNF9kYXRhID0gV004OTA0Oworc3RhdGljIGVudW0gd204OTA0X3R5cGUgd204OTEyX2RhdGEgPSBXTTg5MTI7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHdtODkwNF9vZl9tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAid2xmLHdtODkwNCIsCisJCS5kYXRhID0gJndtODkwNF9kYXRhLAorCX0sIHsKKwkJLmNvbXBhdGlibGUgPSAid2xmLHdtODkxMiIsCisJCS5kYXRhID0gJndtODkxMl9kYXRhLAorCX0sIHsKKwkJLyogc2VudGluZWwgKi8KKwl9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgd204OTA0X29mX21hdGNoKTsKKyNlbmRpZgorCiBzdGF0aWMgaW50IHdtODkwNF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CkBAIC0yMTI1LDcgKzIxNTAsMTcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQl3bTg5MDQtPmRldnR5cGUgPSBpZC0+ZHJpdmVyX2RhdGE7CisJaWYgKGkyYy0+ZGV2Lm9mX25vZGUpIHsKKwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CisKKwkJbWF0Y2ggPSBvZl9tYXRjaF9ub2RlKHdtODkwNF9vZl9tYXRjaCwgaTJjLT5kZXYub2Zfbm9kZSk7CisJCWlmIChtYXRjaCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXdtODkwNC0+ZGV2dHlwZSA9ICooKGVudW0gd204OTA0X3R5cGUgKiltYXRjaC0+ZGF0YSk7CisJfSBlbHNlIHsKKwkJd204OTA0LT5kZXZ0eXBlID0gaWQtPmRyaXZlcl9kYXRhOworCX0KKwogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIHdtODkwNCk7CiAJd204OTA0LT5wZGF0YSA9IGkyYy0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKQEAgLTIyNTksNiArMjI5NCw3IEBACiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAid204OTA0IiwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cih3bTg5MDRfb2ZfbWF0Y2gpLAogCX0sCiAJLnByb2JlID0gICAgd204OTA0X2kyY19wcm9iZSwKIAkucmVtb3ZlID0gICB3bTg5MDRfaTJjX3JlbW92ZSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk1NS5jCmluZGV4IDExNzNmN2YuLjFhYjJkNDYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTUuYwpAQCAtMzMzLDcgKzMzMyw3IEBACiBzdGF0aWMgaW50IHdtODk1NV9zeXNjbGsoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJaW50IHJldCA9IDA7CiAKIAkvKiBBbHdheXMgZGlzYWJsZSB0aGUgY2xvY2tzIC0gaWYgd2UncmUgZG9pbmcgcmVjb25maWd1cmF0aW9uIHRoaXMKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU4LWRzcDIuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTU4LWRzcDIuYwppbmRleCAzY2JjODJiLi5jNzk5Y2NhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk1OC1kc3AyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NTgtZHNwMi5jCkBAIC00MTgsNyArNDE4LDcgQEAKIGludCB3bTg5NThfYWlmX2V2KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCWludCBpOwogCiAJc3dpdGNoIChldmVudCkgewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5NjAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYwLmMKaW5kZXggMDMxYTFhZS4uY2Y4ZmVjZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5NjAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2MC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpAQCAtMTE3LDYgKzExOCw3IEBACiB9CiAKIHN0cnVjdCB3bTg5NjBfcHJpdiB7CisJc3RydWN0IGNsayAqbWNsazsKIAlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CiAJaW50ICgqc2V0X2JpYXNfbGV2ZWwpKHN0cnVjdCBzbmRfc29jX2NvZGVjICosCiAJCQkgICAgICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCk7CkBAIC01NTYsNyArNTU4LDcgQEAKIAl7IDIyMDUwLCAyIH0sCiAJeyAyNDAwMCwgMiB9LAogCXsgMTYwMDAsIDMgfSwKLQl7IDExMjUwLCA0IH0sCisJeyAxMTAyNSwgNCB9LAogCXsgMTIwMDAsIDQgfSwKIAl7ICA4MDAwLCA1IH0sCiB9OwpAQCAtNjE4LDE0ICs2MjAsMzggQEAKIAkJCQkgICAgICBlbnVtIHNuZF9zb2NfYmlhc19sZXZlbCBsZXZlbCkKIHsKIAlzdHJ1Y3Qgd204OTYwX3ByaXYgKndtODk2MCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCWludCByZXQ7CiAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046CiAJCWJyZWFrOwogCiAJY2FzZSBTTkRfU09DX0JJQVNfUFJFUEFSRToKLQkJLyogU2V0IFZNSUQgdG8gMng1MGsgKi8KLQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTYwX1BPV0VSMSwgMHgxODAsIDB4ODApOworCQlzd2l0Y2ggKGNvZGVjLT5kYXBtLmJpYXNfbGV2ZWwpIHsKKwkJY2FzZSBTTkRfU09DX0JJQVNfU1RBTkRCWToKKwkJCWlmICghSVNfRVJSKHdtODk2MC0+bWNsaykpIHsKKwkJCQlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUod204OTYwLT5tY2xrKTsKKwkJCQlpZiAocmV0KSB7CisJCQkJCWRldl9lcnIoY29kZWMtPmRldiwKKwkJCQkJCSJGYWlsZWQgdG8gZW5hYmxlIE1DTEs6ICVkXG4iLAorCQkJCQkJcmV0KTsKKwkJCQkJcmV0dXJuIHJldDsKKwkJCQl9CisJCQl9CisKKwkJCS8qIFNldCBWTUlEIHRvIDJ4NTBrICovCisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5NjBfUE9XRVIxLCAweDE4MCwgMHg4MCk7CisJCQlicmVhazsKKworCQljYXNlIFNORF9TT0NfQklBU19PTjoKKwkJCWlmICghSVNfRVJSKHdtODk2MC0+bWNsaykpCisJCQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHdtODk2MC0+bWNsayk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwogCQlicmVhazsKIAogCWNhc2UgU05EX1NPQ19CSUFTX1NUQU5EQlk6CkBAIC02NzQsNyArNzAwLDcgQEAKIAkJCQkJIGVudW0gc25kX3NvY19iaWFzX2xldmVsIGxldmVsKQogewogCXN0cnVjdCB3bTg5NjBfcHJpdiAqd204OTYwID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7Ci0JaW50IHJlZzsKKwlpbnQgcmVnLCByZXQ7CiAKIAlzd2l0Y2ggKGxldmVsKSB7CiAJY2FzZSBTTkRfU09DX0JJQVNfT046CkBAIC03MTUsOSArNzQxLDIyIEBACiAJCQkJCSAgICBXTTg5NjBfVlJFRiwgV004OTYwX1ZSRUYpOwogCiAJCQltc2xlZXAoMTAwKTsKKworCQkJaWYgKCFJU19FUlIod204OTYwLT5tY2xrKSkgeworCQkJCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZSh3bTg5NjAtPm1jbGspOworCQkJCWlmIChyZXQpIHsKKwkJCQkJZGV2X2Vycihjb2RlYy0+ZGV2LAorCQkJCQkJIkZhaWxlZCB0byBlbmFibGUgTUNMSzogJWRcbiIsCisJCQkJCQlyZXQpOworCQkJCQlyZXR1cm4gcmV0OworCQkJCX0KKwkJCX0KIAkJCWJyZWFrOwogCiAJCWNhc2UgU05EX1NPQ19CSUFTX09OOgorCQkJaWYgKCFJU19FUlIod204OTYwLT5tY2xrKSkKKwkJCQljbGtfZGlzYWJsZV91bnByZXBhcmUod204OTYwLT5tY2xrKTsKKwogCQkJLyogRW5hYmxlIGFudGktcG9wIG1vZGUgKi8KIAkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk2MF9BUE9QMSwKIAkJCQkJICAgIFdNODk2MF9QT0JDVFJMIHwgV004OTYwX1NPRlRfU1QgfApAQCAtMTAwMiw2ICsxMDQxLDEyIEBACiAJaWYgKHdtODk2MCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXdtODk2MC0+bWNsayA9IGRldm1fY2xrX2dldCgmaTJjLT5kZXYsICJtY2xrIik7CisJaWYgKElTX0VSUih3bTg5NjAtPm1jbGspKSB7CisJCWlmIChQVFJfRVJSKHdtODk2MC0+bWNsaykgPT0gLUVQUk9CRV9ERUZFUikKKwkJCXJldHVybiAtRVBST0JFX0RFRkVSOworCX0KKwogCXdtODk2MC0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9pMmMoaTJjLCAmd204OTYwX3JlZ21hcCk7CiAJaWYgKElTX0VSUih3bTg5NjAtPnJlZ21hcCkpCiAJCXJldHVybiBQVFJfRVJSKHdtODk2MC0+cmVnbWFwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYxLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2MS5jCmluZGV4IGVlZmZkMDUuLjk1ZTJjMWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYxLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjEuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiBzdGF0aWMgaW50IHdtODk2MV9ocF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXUxNiBocF9yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MV9BTkFMT0dVRV9IUF8wKTsKIAl1MTYgY3BfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjFfQ0hBUkdFX1BVTVBfMSk7CiAJdTE2IHB3cl9yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MV9QV1JfTUdNVF8yKTsKQEAgLTI4Niw3ICsyODYsNyBAQAogc3RhdGljIGludCB3bTg5NjFfc3BrX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXUxNiBwd3JfcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5NjFfUFdSX01HTVRfMik7CiAJdTE2IHNwa19yZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk2MV9DTEFTU19EX0NPTlRST0xfMSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk2Mi5jCmluZGV4IGQzMmQ1NTQuLjExOGIwMDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTYyLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5NjIuYwpAQCAtMTg2Niw3ICsxODY2LDcgQEAKIHN0YXRpYyBpbnQgaHBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlpbnQgdGltZW91dDsKIAlpbnQgcmVnOwogCWludCBleHBlY3RlZCA9IChXTTg5NjJfRENTX1NUQVJUVVBfRE9ORV9IUDFMIHwKQEAgLTE5NjAsNyArMTk2MCw3IEBACiBzdGF0aWMgaW50IG91dF9wZ2FfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJaW50IHJlZzsKIAogCXN3aXRjaCAody0+c2hpZnQpIHsKQEAgLTE5OTMsNyArMTk5Myw3IEBACiBzdGF0aWMgaW50IGRzcDJfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCSAgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCB3bTg5NjJfcHJpdiAqd204OTYyID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk4OC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5ODguYwppbmRleCBlNDE4MTk5Li4yNDk2OGFhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk4OC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTg4LmMKQEAgLTI0NCw3ICsyNDQsNyBAQAogc3RhdGljIGludCB3bTg5ODhfbHJjX2NvbnRyb2woc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAl1MTYgYWRjdGwyID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5ODhfQURDVEwyKTsKIAogCS8qIFVzZSB0aGUgREFDIHRvIGdhdGUgTFJDIGlmIGFjdGl2ZSwgb3RoZXJ3aXNlIHVzZSBBREMgKi8KQEAgLTgxMyw3ICs4MTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZfd204OTg4ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfY29kZWNfZGV2X3dtODk4OCA9IHsKIAkucHJvYmUgPQl3bTg5ODhfcHJvYmUsCiAJLnNldF9iaWFzX2xldmVsID0gd204OTg4X3NldF9iaWFzX2xldmVsLAogCS5zdXNwZW5kX2JpYXNfb2ZmID0gdHJ1ZSwKQEAgLTgyNiw3ICs4MjYsNyBAQAogCS5udW1fZGFwbV9yb3V0ZXMgPSBBUlJBWV9TSVpFKHdtODk4OF9kYXBtX3JvdXRlcyksCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlZ21hcF9jb25maWcgd204OTg4X3JlZ21hcCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyB3bTg5ODhfcmVnbWFwID0gewogCS5yZWdfYml0cyA9IDcsCiAJLnZhbF9iaXRzID0gOSwKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKaW5kZXggOGE1ODQyMi4uYzkzYmZmYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTAuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCkBAIC0zNzQsMTMgKzM3NCwxNCBAQAogc3RhdGljIGludCBvdXRtaXhlcl9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAlzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogeworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAl1MzIgcmVnX3NoaWZ0ID0ga2NvbnRyb2wtPnByaXZhdGVfdmFsdWUgJiAweGZmZjsKIAlpbnQgcmV0ID0gMDsKIAl1MTYgcmVnOwogCiAJc3dpdGNoIChyZWdfc2hpZnQpIHsKIAljYXNlIFdNODk5MF9TUEVBS0VSX01JWEVSIHwgKFdNODk5MF9MRFNQS19CSVQgPDwgOCkgOgotCQlyZWcgPSBzbmRfc29jX3JlYWQody0+Y29kZWMsIFdNODk5MF9PVVRQVVRfTUlYRVIxKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTBfT1VUUFVUX01JWEVSMSk7CiAJCWlmIChyZWcgJiBXTTg5OTBfTERMTykgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJIkNhbm5vdCBzZXQgYXMgT3V0cHV0IE1peGVyIDEgTERMTyBTZXRcbiIpOwpAQCAtMzg4LDcgKzM4OSw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBXTTg5OTBfU1BFQUtFUl9NSVhFUiB8IChXTTg5OTBfUkRTUEtfQklUIDw8IDgpOgotCQlyZWcgPSBzbmRfc29jX3JlYWQody0+Y29kZWMsIFdNODk5MF9PVVRQVVRfTUlYRVIyKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTBfT1VUUFVUX01JWEVSMik7CiAJCWlmIChyZWcgJiBXTTg5OTBfUkRSTykgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJIkNhbm5vdCBzZXQgYXMgT3V0cHV0IE1peGVyIDIgUkRSTyBTZXRcbiIpOwpAQCAtMzk2LDcgKzM5Nyw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBXTTg5OTBfT1VUUFVUX01JWEVSMSB8IChXTTg5OTBfTERMT19CSVQgPDwgOCk6Ci0JCXJlZyA9IHNuZF9zb2NfcmVhZCh3LT5jb2RlYywgV004OTkwX1NQRUFLRVJfTUlYRVIpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5MF9TUEVBS0VSX01JWEVSKTsKIAkJaWYgKHJlZyAmIFdNODk5MF9MRFNQSykgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJIkNhbm5vdCBzZXQgYXMgU3BlYWtlciBNaXhlciBMRFNQSyBTZXRcbiIpOwpAQCAtNDA0LDcgKzQwNSw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBXTTg5OTBfT1VUUFVUX01JWEVSMiB8IChXTTg5OTBfUkRST19CSVQgPDwgOCk6Ci0JCXJlZyA9IHNuZF9zb2NfcmVhZCh3LT5jb2RlYywgV004OTkwX1NQRUFLRVJfTUlYRVIpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5MF9TUEVBS0VSX01JWEVSKTsKIAkJaWYgKHJlZyAmIFdNODk5MF9SRFNQSykgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJIkNhbm5vdCBzZXQgYXMgU3BlYWtlciBNaXhlciBSRFNQSyBTZXRcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkxLmMKaW5kZXggYjBhYzJjMy4uNDlkZjBkYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5MS5jCkBAIC0zODIsMTMgKzM4MiwxNCBAQAogc3RhdGljIGludCBvdXRtaXhlcl9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJCSAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJdTMyIHJlZ19zaGlmdCA9IGtjb250cm9sLT5wcml2YXRlX3ZhbHVlICYgMHhmZmY7CiAJaW50IHJldCA9IDA7CiAJdTE2IHJlZzsKIAogCXN3aXRjaCAocmVnX3NoaWZ0KSB7CiAJY2FzZSBXTTg5OTFfU1BFQUtFUl9NSVhFUiB8IChXTTg5OTFfTERTUEtfQklUIDw8IDgpOgotCQlyZWcgPSBzbmRfc29jX3JlYWQody0+Y29kZWMsIFdNODk5MV9PVVRQVVRfTUlYRVIxKTsKKwkJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTFfT1VUUFVUX01JWEVSMSk7CiAJCWlmIChyZWcgJiBXTTg5OTFfTERMTykgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICJDYW5ub3Qgc2V0IGFzIE91dHB1dCBNaXhlciAxIExETE8gU2V0XG4iKTsKQEAgLTM5Nyw3ICszOTgsNyBAQAogCQlicmVhazsKIAogCWNhc2UgV004OTkxX1NQRUFLRVJfTUlYRVIgfCAoV004OTkxX1JEU1BLX0JJVCA8PCA4KToKLQkJcmVnID0gc25kX3NvY19yZWFkKHctPmNvZGVjLCBXTTg5OTFfT1VUUFVUX01JWEVSMik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkxX09VVFBVVF9NSVhFUjIpOwogCQlpZiAocmVnICYgV004OTkxX1JEUk8pIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSAgICAgICAiQ2Fubm90IHNldCBhcyBPdXRwdXQgTWl4ZXIgMiBSRFJPIFNldFxuIik7CkBAIC00MDYsNyArNDA3LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFdNODk5MV9PVVRQVVRfTUlYRVIxIHwgKFdNODk5MV9MRExPX0JJVCA8PCA4KToKLQkJcmVnID0gc25kX3NvY19yZWFkKHctPmNvZGVjLCBXTTg5OTFfU1BFQUtFUl9NSVhFUik7CisJCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkxX1NQRUFLRVJfTUlYRVIpOwogCQlpZiAocmVnICYgV004OTkxX0xEU1BLKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkgICAgICAgIkNhbm5vdCBzZXQgYXMgU3BlYWtlciBNaXhlciBMRFNQSyBTZXRcbiIpOwpAQCAtNDE1LDcgKzQxNiw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBXTTg5OTFfT1VUUFVUX01JWEVSMiB8IChXTTg5OTFfUkRST19CSVQgPDwgOCk6Ci0JCXJlZyA9IHNuZF9zb2NfcmVhZCh3LT5jb2RlYywgV004OTkxX1NQRUFLRVJfTUlYRVIpOworCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5MV9TUEVBS0VSX01JWEVSKTsKIAkJaWYgKHJlZyAmIFdNODk5MV9SRFNQSykgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJICAgICAgICJDYW5ub3Qgc2V0IGFzIFNwZWFrZXIgTWl4ZXIgUkRTUEsgU2V0XG4iKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5My5jCmluZGV4IDUzYzZmZTMuLjJlNzBhMjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTMuYwpAQCAtODEwLDcgKzgxMCw3IEBACiBzdGF0aWMgaW50IGNsa19zeXNfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCmluZGV4IDFiOTdkZTIuLjRmYmM3NjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYwpAQCAtMjQ5LDcgKzI0OSw4IEBACiBzdGF0aWMgaW50IGNoZWNrX2Nsa19zeXMoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNvdXJjZSwKIAkJCSBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc2luaykKIHsKLQlpbnQgcmVnID0gc25kX3NvY19yZWFkKHNvdXJjZS0+Y29kZWMsIFdNODk5NF9DTE9DS0lOR18xKTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMoc291cmNlLT5kYXBtKTsKKwlpbnQgcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTRfQ0xPQ0tJTkdfMSk7CiAJY29uc3QgY2hhciAqY2xrOwogCiAJLyogQ2hlY2sgd2hhdCB3ZSdyZSBjdXJyZW50bHkgdXNpbmcgZm9yIENMS19TWVMgKi8KQEAgLTgwNiw3ICs4MDcsNyBAQAogc3RhdGljIGludCBjbGtfc3lzX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC05ODEsNyArOTgyLDcgQEAKIHN0YXRpYyBpbnQgdm1pZF9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJICAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKQEAgLTEwMzcsNyArMTAzOCw3IEBACiBzdGF0aWMgaW50IGFpZjFjbGtfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCSAgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJc3RydWN0IHdtODk5NCAqY29udHJvbCA9IHdtODk5NC0+d204OTk0OwogCWludCBtYXNrID0gV004OTk0X0FJRjFEQUMxTF9FTkEgfCBXTTg5OTRfQUlGMURBQzFSX0VOQTsKQEAgLTExMzUsNyArMTEzNiw3IEBACiBzdGF0aWMgaW50IGFpZjJjbGtfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCSAgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCWludCBpOwogCWludCBkYWM7CiAJaW50IGFkYzsKQEAgLTEyMjAsNyArMTIyMSw3IEBACiBzdGF0aWMgaW50IGFpZjFjbGtfbGF0ZV9ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC0xMjM4LDcgKzEyMzksNyBAQAogc3RhdGljIGludCBhaWYyY2xrX2xhdGVfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewpAQCAtMTI1Niw3ICsxMjU3LDcgQEAKIHN0YXRpYyBpbnQgbGF0ZV9lbmFibGVfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC0xMjg5LDcgKzEyOTAsNyBAQAogc3RhdGljIGludCBsYXRlX2Rpc2FibGVfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlzdHJ1Y3Qgd204OTk0X3ByaXYgKndtODk5NCA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewpAQCAtMTMzMSw3ICsxMzMyLDcgQEAKIHN0YXRpYyBpbnQgZGFjX2V2KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXVuc2lnbmVkIGludCBtYXNrID0gMSA8PCB3LT5zaGlmdDsKIAogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsCkBAIC0xMzcyLDcgKzEzNzMsNyBAQAogc3RhdGljIGludCBwb3N0X2V2KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlkZXZfZGJnKGNvZGVjLT5kZXYsICJTUkMgc3RhdHVzOiAleFxuIiwKIAkJc25kX3NvY19yZWFkKGNvZGVjLAogCQkJICAgICBXTTg5OTRfUkFURV9TVEFUVVMpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NS5jCmluZGV4IGMyODBmMGEuLjY2MTAzYzIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTUuYwpAQCAtNDQsNyArNDQsNyBAQAogCSJNSUNWREQiCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlZ19kZWZhdWx0IHdtODk5NV9yZWdfZGVmYXVsdHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnX2RlZmF1bHQgd204OTk1X3JlZ19kZWZhdWx0c1tdID0gewogCXsgMCwgMHg4OTk1IH0sCiAJeyA1LCAweDAxMDAgfSwKIAl7IDE2LCAweDAwMGIgfSwKQEAgLTUzNCwxMCArNTM0LDExIEBACiBzdGF0aWMgaW50IGNoZWNrX2Nsa19zeXMoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnNvdXJjZSwKIAkJCSBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqc2luaykKIHsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMoc291cmNlLT5kYXBtKTsKIAl1bnNpZ25lZCBpbnQgcmVnOwogCWNvbnN0IGNoYXIgKmNsazsKIAotCXJlZyA9IHNuZF9zb2NfcmVhZChzb3VyY2UtPmNvZGVjLCBXTTg5OTVfQ0xPQ0tJTkdfMSk7CisJcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTVfQ0xPQ0tJTkdfMSk7CiAJLyogQ2hlY2sgd2hhdCB3ZSdyZSBjdXJyZW50bHkgdXNpbmcgZm9yIENMS19TWVMgKi8KIAlpZiAocmVnICYgV004OTk1X1NZU0NMS19TUkMpCiAJCWNsayA9ICJBSUYyQ0xLIjsKQEAgLTU2MCw5ICs1NjEsNyBAQAogc3RhdGljIGludCBocF9zdXBwbHlfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYzsKLQotCWNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgU05EX1NPQ19EQVBNX1BSRV9QTVU6CkBAIC02MTEsMTAgKzYxMCw5IEBACiBzdGF0aWMgaW50IGhwX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXVuc2lnbmVkIGludCByZWc7CiAKLQljb2RlYyA9IHctPmNvZGVjOwogCXJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTk1X0FOQUxPR1VFX0hQXzEpOwogCiAJc3dpdGNoIChldmVudCkgewpAQCAtNzYxLDkgKzc1OSw3IEBACiBzdGF0aWMgaW50IGNsa19zeXNfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWM7Ci0KLQljb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgpAQCAtMjE5MCw3ICsyMTg2LDcgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY29kZWNfZHJpdmVyIHNvY19jb2RlY19kZXZfd204OTk1ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBzb2NfY29kZWNfZGV2X3dtODk5NSA9IHsKIAkucHJvYmUgPSB3bTg5OTVfcHJvYmUsCiAJLnJlbW92ZSA9IHdtODk5NV9yZW1vdmUsCiAJLnNldF9iaWFzX2xldmVsID0gd204OTk1X3NldF9iaWFzX2xldmVsLApAQCAtMjIwNCw3ICsyMjAwLDcgQEAKIAkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRSh3bTg5OTVfaW50ZXJjb24pLAogfTsKIAotc3RhdGljIHN0cnVjdCByZWdtYXBfY29uZmlnIHdtODk5NV9yZWdtYXAgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgd204OTk1X3JlZ21hcCA9IHsKIAkucmVnX2JpdHMgPSAxNiwKIAkudmFsX2JpdHMgPSAxNiwKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTYuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk2LmMKaW5kZXggYjFkY2MxMS4uZGM5MmQ1ZTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk2LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTYuYwpAQCAtNTk5LDcgKzU5OSw3IEBACiBzdGF0aWMgaW50IGJnX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJaW50IHJldCA9IDA7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC02MzQsNyArNjM0LDggQEAKIHN0YXRpYyBpbnQgcm12X3Nob3J0X2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgd204OTk2X3ByaXYgKndtODk5NiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEody0+Y29kZWMpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKKwlzdHJ1Y3Qgd204OTk2X3ByaXYgKndtODk5NiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJLyogUmVjb3JkIHdoaWNoIG91dHB1dHMgd2UgZW5hYmxlZCAqLwogCXN3aXRjaCAoZXZlbnQpIHsKQEAgLTc1OCw3ICs3NTksOCBAQAogc3RhdGljIGludCBkY3Nfc3RhcnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCSAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgd204OTk2X3ByaXYgKndtODk5NiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEody0+Y29kZWMpOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKKwlzdHJ1Y3Qgd204OTk2X3ByaXYgKndtODk5NiA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1VOgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTcuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk3LmMKaW5kZXggN2U4YmZlMi4uYTRkMTE3NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTcuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5Ny5jCkBAIC04NCw3ICs4NCw3IEBACiBzdGF0aWMgaW50IHdtODk5N19zeXNjbGtfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJc3RydWN0IGFyaXpvbmEgKmFyaXpvbmEgPSBkZXZfZ2V0X2RydmRhdGEoY29kZWMtPmRldi0+cGFyZW50KTsKIAlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBhcml6b25hLT5yZWdtYXA7CiAJY29uc3Qgc3RydWN0IHJlZ19kZWZhdWx0ICpwYXRjaCA9IE5VTEw7CkBAIC02MTAsMTMgKzYxMCwxNiBAQAogCiBTTkRfU09DX0RBUE1fUEdBX0UoIk9VVDFMIiwgU05EX1NPQ19OT1BNLAogCQkgICBBUklaT05BX09VVDFMX0VOQV9TSElGVCwgMCwgTlVMTCwgMCwgYXJpem9uYV9ocF9ldiwKLQkJICAgU05EX1NPQ19EQVBNX1BSRV9QTUQgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAorCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCB8CisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1VKSwKIFNORF9TT0NfREFQTV9QR0FfRSgiT1VUMVIiLCBTTkRfU09DX05PUE0sCiAJCSAgIEFSSVpPTkFfT1VUMVJfRU5BX1NISUZULCAwLCBOVUxMLCAwLCBhcml6b25hX2hwX2V2LAotCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSksCisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EIHwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAogU05EX1NPQ19EQVBNX1BHQV9FKCJPVVQzTCIsIEFSSVpPTkFfT1VUUFVUX0VOQUJMRVNfMSwKIAkJICAgQVJJWk9OQV9PVVQzTF9FTkFfU0hJRlQsIDAsIE5VTEwsIDAsIGFyaXpvbmFfb3V0X2V2LAotCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSksCisJCSAgIFNORF9TT0NfREFQTV9QUkVfUE1EIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EIHwKKwkJICAgU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTVUpLAogU05EX1NPQ19EQVBNX1BHQV9FKCJPVVQ1TCIsIEFSSVpPTkFfT1VUUFVUX0VOQUJMRVNfMSwKIAkJICAgQVJJWk9OQV9PVVQ1TF9FTkFfU0hJRlQsIDAsIE5VTEwsIDAsIGFyaXpvbmFfb3V0X2V2LAogCQkgICBTTkRfU09DX0RBUE1fUFJFX1BNRCB8IFNORF9TT0NfREFQTV9QT1NUX1BNVSksCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jIGIvc291bmQvc29jL2NvZGVjcy93bTkwODEuYwppbmRleCBiMWQ5NDZmLi4xM2EzZjMzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205MDgxLmMKQEAgLTczNCw3ICs3MzQsNyBAQAogc3RhdGljIGludCBjbGtfc3lzX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCB3bTkwODFfcHJpdiAqd205MDgxID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAkvKiBUaGlzIHNob3VsZCBiZSBkb25lIG9uIGluaXQoKSBmb3IgYnlwYXNzIHBhdGhzICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA5MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTkwOTAuYwppbmRleCA2ZmZlOGRjLi42MGQyNDNjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTA5MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205MDkwLmMKQEAgLTI1NCw3ICsyNTQsNyBAQAogc3RhdGljIGludCBocF9ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXVuc2lnbmVkIGludCByZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNOTA5MF9BTkFMT0dVRV9IUF8wKTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcwNS5jCmluZGV4IDNlZGRiMTguLjVjYzQ1N2UgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzA1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MDUuYwpAQCAtMzQ0LDIzICszNDQsMjcgQEAKIAlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTc7CiAJaW50IHJldCA9IDA7CiAKLQlhYzk3ID0gc25kX3NvY19uZXdfYWM5N19jb2RlYyhjb2RlYyk7CisJYWM5NyA9IHNuZF9zb2NfYWxsb2NfYWM5N19jb2RlYyhjb2RlYyk7CiAJaWYgKElTX0VSUihhYzk3KSkgewogCQlyZXQgPSBQVFJfRVJSKGFjOTcpOwogCQlkZXZfZXJyKGNvZGVjLT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgQUM5NyBjb2RlY1xuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCi0Jc25kX3NvY19jb2RlY19zZXRfZHJ2ZGF0YShjb2RlYywgYWM5Nyk7Ci0KIAlyZXQgPSB3bTk3MDVfcmVzZXQoY29kZWMpOwogCWlmIChyZXQpCi0JCWdvdG8gcmVzZXRfZXJyOworCQlnb3RvIGVycl9wdXRfZGV2aWNlOworCisJcmV0ID0gZGV2aWNlX2FkZCgmYWM5Ny0+ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9wdXRfZGV2aWNlOworCisJc25kX3NvY19jb2RlY19zZXRfZHJ2ZGF0YShjb2RlYywgYWM5Nyk7CiAKIAlyZXR1cm4gMDsKIAotcmVzZXRfZXJyOgotCXNuZF9zb2NfZnJlZV9hYzk3X2NvZGVjKGFjOTcpOworZXJyX3B1dF9kZXZpY2U6CisJcHV0X2RldmljZSgmYWM5Ny0+ZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTIuYwppbmRleCBlMDQ2NDNkLi45NTE3NTcxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEyLmMKQEAgLTY2Niw3ICs2NjYsNyBAQAogCXN0cnVjdCB3bTk3MTJfcHJpdiAqd205NzEyID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJaW50IHJldCA9IDA7CiAKLQl3bTk3MTItPmFjOTcgPSBzbmRfc29jX25ld19hYzk3X2NvZGVjKGNvZGVjKTsKKwl3bTk3MTItPmFjOTcgPSBzbmRfc29jX2FsbG9jX2FjOTdfY29kZWMoY29kZWMpOwogCWlmIChJU19FUlIod205NzEyLT5hYzk3KSkgewogCQlyZXQgPSBQVFJfRVJSKHdtOTcxMi0+YWM5Nyk7CiAJCWRldl9lcnIoY29kZWMtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBBQzk3IGNvZGVjOiAlZFxuIiwgcmV0KTsKQEAgLTY3NSwxNSArNjc1LDE5IEBACiAKIAlyZXQgPSB3bTk3MTJfcmVzZXQoY29kZWMsIDApOwogCWlmIChyZXQgPCAwKQotCQlnb3RvIHJlc2V0X2VycjsKKwkJZ290byBlcnJfcHV0X2RldmljZTsKKworCXJldCA9IGRldmljZV9hZGQoJndtOTcxMi0+YWM5Ny0+ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9wdXRfZGV2aWNlOwogCiAJLyogc2V0IGFsYyBtdXggdG8gbm9uZSAqLwogCWFjOTdfd3JpdGUoY29kZWMsIEFDOTdfVklERU8sIGFjOTdfcmVhZChjb2RlYywgQUM5N19WSURFTykgfCAweDMwMDApOwogCiAJcmV0dXJuIDA7CiAKLXJlc2V0X2VycjoKLQlzbmRfc29jX2ZyZWVfYWM5N19jb2RlYyh3bTk3MTItPmFjOTcpOworZXJyX3B1dF9kZXZpY2U6CisJcHV0X2RldmljZSgmd205NzEyLT5hYzk3LT5kZXYpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTcxMy5jCmluZGV4IDcxYjlkNWIuLjY4MjIyOTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd205NzEzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTk3MTMuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiBzdGF0aWMgaW50IHdtOTcxM192b2ljZV9zaHV0ZG93bihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJCQkgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJdTE2IHN0YXR1cywgcmF0ZTsKIAogCWlmIChXQVJOX09OKGV2ZW50ICE9IFNORF9TT0NfREFQTV9QUkVfUE1EKSkKQEAgLTEyMjUsNyArMTIyNSw3IEBACiAJc3RydWN0IHdtOTcxM19wcml2ICp3bTk3MTMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlpbnQgcmV0ID0gMCwgcmVnOwogCi0Jd205NzEzLT5hYzk3ID0gc25kX3NvY19uZXdfYWM5N19jb2RlYyhjb2RlYyk7CisJd205NzEzLT5hYzk3ID0gc25kX3NvY19hbGxvY19hYzk3X2NvZGVjKGNvZGVjKTsKIAlpZiAoSVNfRVJSKHdtOTcxMy0+YWM5NykpCiAJCXJldHVybiBQVFJfRVJSKHdtOTcxMy0+YWM5Nyk7CiAKQEAgLTEyMzQsNyArMTIzNCwxMSBAQAogCXdtOTcxM19yZXNldChjb2RlYywgMCk7CiAJcmV0ID0gd205NzEzX3Jlc2V0KGNvZGVjLCAxKTsKIAlpZiAocmV0IDwgMCkKLQkJZ290byByZXNldF9lcnI7CisJCWdvdG8gZXJyX3B1dF9kZXZpY2U7CisKKwlyZXQgPSBkZXZpY2VfYWRkKCZ3bTk3MTMtPmFjOTctPmRldik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcHV0X2RldmljZTsKIAogCS8qIHVubXV0ZSB0aGUgYWRjIC0gbW92ZSB0byBrY29udHJvbCAqLwogCXJlZyA9IGFjOTdfcmVhZChjb2RlYywgQUM5N19DRCkgJiAweDdmZmY7CkBAIC0xMjQyLDggKzEyNDYsOCBAQAogCiAJcmV0dXJuIDA7CiAKLXJlc2V0X2VycjoKLQlzbmRfc29jX2ZyZWVfYWM5N19jb2RlYyh3bTk3MTMtPmFjOTcpOworZXJyX3B1dF9kZXZpY2U6CisJcHV0X2RldmljZSgmd205NzEzLT5hYzk3LT5kZXYpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd21fYWRzcC5jIGIvc291bmQvc29jL2NvZGVjcy93bV9hZHNwLmMKaW5kZXggNzIwZDZlOC4uZmY2N2IzMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bV9hZHNwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bV9hZHNwLmMKQEAgLTEzNzMsNyArMTM3Myw3IEBACiAJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkgICBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCB3bV9hZHNwICpkc3BzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAJc3RydWN0IHdtX2Fkc3AgKmRzcCA9ICZkc3BzW3ctPnNoaWZ0XTsKIAlzdHJ1Y3Qgd21fYWRzcF9hbGdfcmVnaW9uICphbGdfcmVnaW9uOwpAQCAtMTYwNSw3ICsxNjA1LDcgQEAKIGludCB3bV9hZHNwMl9lYXJseV9ldmVudChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKIAkJICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJc3RydWN0IHdtX2Fkc3AgKmRzcHMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlzdHJ1Y3Qgd21fYWRzcCAqZHNwID0gJmRzcHNbdy0+c2hpZnRdOwogCkBAIC0xNjI2LDcgKzE2MjYsNyBAQAogaW50IHdtX2Fkc3AyX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlzdHJ1Y3Qgd21fYWRzcCAqZHNwcyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCXN0cnVjdCB3bV9hZHNwICpkc3AgPSAmZHNwc1t3LT5zaGlmdF07CiAJc3RydWN0IHdtX2Fkc3BfYWxnX3JlZ2lvbiAqYWxnX3JlZ2lvbjsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKaW5kZXggMzc0NTM3ZC4uODM2NmUxOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKQEAgLTUwMCw3ICs1MDAsNyBAQAogc3RhdGljIGludCBocF9zdXBwbHlfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAlzdHJ1Y3Qgd21faHVic19kYXRhICpodWJzID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC01NDIsNyArNTQyLDcgQEAKIHN0YXRpYyBpbnQgaHBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCSAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHNuZF9zb2NfZGFwbV90b19jb2RlYyh3LT5kYXBtKTsKIAl1bnNpZ25lZCBpbnQgcmVnID0gc25kX3NvY19yZWFkKGNvZGVjLCBXTTg5OTNfQU5BTE9HVUVfSFBfMCk7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7CkBAIC01OTQsNyArNTk0LDcgQEAKIHN0YXRpYyBpbnQgZWFycGllY2VfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCiAJCQkgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmNvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJdTE2IHJlZyA9IHNuZF9zb2NfcmVhZChjb2RlYywgV004OTkzX0FOVElQT1AxKSAmIH5XTTg5OTNfSFBPVVQyX0lOX0VOQTsKIAogCXN3aXRjaCAoZXZlbnQpIHsKQEAgLTYxOSw3ICs2MTksNyBAQAogc3RhdGljIGludCBsaW5lb3V0X2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmNvbnRyb2wsIGludCBldmVudCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSB3LT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBzbmRfc29jX2RhcG1fdG9fY29kZWMody0+ZGFwbSk7CiAJc3RydWN0IHdtX2h1YnNfZGF0YSAqaHVicyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCWJvb2wgKmZsYWc7CiAKQEAgLTY0OSw3ICs2NDksNyBAQAogc3RhdGljIGludCBtaWNiaWFzX2V2ZW50KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAogCQkJIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCiB7Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gc25kX3NvY19kYXBtX3RvX2NvZGVjKHctPmRhcG0pOwogCXN0cnVjdCB3bV9odWJzX2RhdGEgKmh1YnMgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAogCXN3aXRjaCAody0+c2hpZnQpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9kYXZpbmNpL0tjb25maWcgYi9zb3VuZC9zb2MvZGF2aW5jaS9LY29uZmlnCmluZGV4IDhlOTQ4YzYuLjJiODFjYTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL0tjb25maWcKKysrIGIvc291bmQvc29jL2RhdmluY2kvS2NvbmZpZwpAQCAtNTgsMTMgKzU4LDEyIEBACiAJZGVwZW5kcyBvbiBNQUNIX0RBVklOQ0lfRE0zNjVfRVZNCiAKIGNvbmZpZyBTTkRfRE0zNjVfQUlDM1hfQ09ERUMKLQlib29sICJBdWRpbyBDb2RlYyAtIEFJQzMxMDEiCisJdHJpc3RhdGUgIkF1ZGlvIENvZGVjIC0gQUlDMzEwMSIKIAloZWxwCiAJICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgQUlDMzEwMSBhdWRpbyBjb2RlYwogCiBjb25maWcgU05EX0RNMzY1X1ZPSUNFX0NPREVDCiAJdHJpc3RhdGUgIlZvaWNlIENvZGVjIC0gQ1E5M1ZDIgotCWRlcGVuZHMgb24gU05EX0RBVklOQ0lfU09DCiAJc2VsZWN0IE1GRF9EQVZJTkNJX1ZPSUNFQ09ERUMKIAlzZWxlY3QgU05EX0RBVklOQ0lfU09DX1ZDSUYKIAlzZWxlY3QgU05EX1NPQ19DUTAwOTNWQwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMKaW5kZXggMTU4Y2IzZC4uYjZiYjU5NCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kYXRhL2VkbWEuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgpAQCAtMjUsMTEgKzI0LDYgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2VkbWEuaD4KLQotI2luY2x1ZGUgImRhdmluY2ktcGNtLmgiCi0jaW5jbHVkZSAiZGF2aW5jaS1pMnMuaCIKLQogc3RydWN0IHNuZF9zb2NfY2FyZF9kcnZkYXRhX2RhdmluY2kgewogCXN0cnVjdCBjbGsgKm1jbGs7CiAJdW5zaWduZWQgc3lzY2xrOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCmluZGV4IDMwYjk0ZDQuLmRlM2IxNTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYworKysgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKQEAgLTM2NCw2ICszNjQsMjAgQEAKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkX21hc2spOwogfQogCitzdGF0aWMgaXJxcmV0dXJuX3QgZGF2aW5jaV9tY2FzcF9jb21tb25faXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGF2aW5jaV9tY2FzcCAqbWNhc3AgPSAoc3RydWN0IGRhdmluY2lfbWNhc3AgKilkYXRhOworCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOworCisJaWYgKG1jYXNwLT5zdWJzdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdKQorCQlyZXQgPSBkYXZpbmNpX21jYXNwX3R4X2lycV9oYW5kbGVyKGlycSwgZGF0YSk7CisKKwlpZiAobWNhc3AtPnN1YnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXSkKKwkJcmV0IHw9IGRhdmluY2lfbWNhc3BfcnhfaXJxX2hhbmRsZXIoaXJxLCBkYXRhKTsKKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgZGF2aW5jaV9tY2FzcF9zZXRfZGFpX2ZtdChzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWksCiAJCQkJCSB1bnNpZ25lZCBpbnQgZm10KQogewpAQCAtMTMxMywxNiArMTMyNywxOSBAQAogCiAJcGRhdGEtPnR4X2RtYV9jaGFubmVsID0gZG1hX3NwZWMuYXJnc1swXTsKIAotCXJldCA9IG9mX3Byb3BlcnR5X21hdGNoX3N0cmluZyhucCwgImRtYS1uYW1lcyIsICJyeCIpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG5vZGF0YTsKKwkvKiBSWCBpcyBub3QgdmFsaWQgaW4gRElUIG1vZGUgKi8KKwlpZiAocGRhdGEtPm9wX21vZGUgIT0gREFWSU5DSV9NQ0FTUF9ESVRfTU9ERSkgeworCQlyZXQgPSBvZl9wcm9wZXJ0eV9tYXRjaF9zdHJpbmcobnAsICJkbWEtbmFtZXMiLCAicngiKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG5vZGF0YTsKIAotCXJldCA9IG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzKG5wLCAiZG1hcyIsICIjZG1hLWNlbGxzIiwgcmV0LAotCQkJCQkgJmRtYV9zcGVjKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBub2RhdGE7CisJCXJldCA9IG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9hcmdzKG5wLCAiZG1hcyIsICIjZG1hLWNlbGxzIiwgcmV0LAorCQkJCQkJICZkbWFfc3BlYyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBub2RhdGE7CiAKLQlwZGF0YS0+cnhfZG1hX2NoYW5uZWwgPSBkbWFfc3BlYy5hcmdzWzBdOworCQlwZGF0YS0+cnhfZG1hX2NoYW5uZWwgPSBkbWFfc3BlYy5hcmdzWzBdOworCX0KIAogCXJldCA9IG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAidHgtbnVtLWV2dCIsICZ2YWwpOwogCWlmIChyZXQgPj0gMCkKQEAgLTE0NDEsNiArMTQ1OCwyMyBAQAogCiAJbWNhc3AtPmRldiA9ICZwZGV2LT5kZXY7CiAKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiY29tbW9uIik7CisJaWYgKGlycSA+PSAwKSB7CisJCWlycV9uYW1lID0gZGV2bV9rYXNwcmludGYoJnBkZXYtPmRldiwgR0ZQX0tFUk5FTCwgIiVzX2NvbW1vblxuIiwKKwkJCQkJICBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJCXJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoJnBkZXYtPmRldiwgaXJxLCBOVUxMLAorCQkJCQkJZGF2aW5jaV9tY2FzcF9jb21tb25faXJxX2hhbmRsZXIsCisJCQkJCQlJUlFGX09ORVNIT1QgfCBJUlFGX1NIQVJFRCwKKwkJCQkJCWlycV9uYW1lLCBtY2FzcCk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNvbW1vbiBJUlEgcmVxdWVzdCBmYWlsZWRcbiIpOworCQkJZ290byBlcnI7CisJCX0KKworCQltY2FzcC0+aXJxX3JlcXVlc3RbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10gPSBYVU5EUk47CisJCW1jYXNwLT5pcnFfcmVxdWVzdFtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdID0gUk9WUk47CisJfQorCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgInJ4Iik7CiAJaWYgKGlycSA+PSAwKSB7CiAJCWlycV9uYW1lID0gZGV2bV9rYXNwcmludGYoJnBkZXYtPmRldiwgR0ZQX0tFUk5FTCwgIiVzX3J4XG4iLApAQCAtMTUwMSwxOSArMTUzNSwzNCBAQAogCWVsc2UKIAkJZG1hX2RhdGEtPmZpbHRlcl9kYXRhID0gJmRtYV9wYXJhbXMtPmNoYW5uZWw7CiAKLQlkbWFfcGFyYW1zID0gJm1jYXNwLT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV07Ci0JZG1hX2RhdGEgPSAmbWNhc3AtPmRtYV9kYXRhW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV07Ci0JZG1hX3BhcmFtcy0+YXNwX2NoYW5fcSA9IHBkYXRhLT5hc3BfY2hhbl9xOwotCWRtYV9wYXJhbXMtPnJhbV9jaGFuX3EgPSBwZGF0YS0+cmFtX2NoYW5fcTsKLQlkbWFfcGFyYW1zLT5zcmFtX3Bvb2wgPSBwZGF0YS0+c3JhbV9wb29sOwotCWRtYV9wYXJhbXMtPnNyYW1fc2l6ZSA9IHBkYXRhLT5zcmFtX3NpemVfY2FwdHVyZTsKLQlpZiAoZGF0KQotCQlkbWFfcGFyYW1zLT5kbWFfYWRkciA9IGRhdC0+c3RhcnQ7Ci0JZWxzZQotCQlkbWFfcGFyYW1zLT5kbWFfYWRkciA9IG1lbS0+c3RhcnQgKyBwZGF0YS0+cnhfZG1hX29mZnNldDsKKwkvKiBSWCBpcyBub3QgdmFsaWQgaW4gRElUIG1vZGUgKi8KKwlpZiAobWNhc3AtPm9wX21vZGUgIT0gREFWSU5DSV9NQ0FTUF9ESVRfTU9ERSkgeworCQlkbWFfcGFyYW1zID0gJm1jYXNwLT5kbWFfcGFyYW1zW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV07CisJCWRtYV9kYXRhID0gJm1jYXNwLT5kbWFfZGF0YVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdOworCQlkbWFfcGFyYW1zLT5hc3BfY2hhbl9xID0gcGRhdGEtPmFzcF9jaGFuX3E7CisJCWRtYV9wYXJhbXMtPnJhbV9jaGFuX3EgPSBwZGF0YS0+cmFtX2NoYW5fcTsKKwkJZG1hX3BhcmFtcy0+c3JhbV9wb29sID0gcGRhdGEtPnNyYW1fcG9vbDsKKwkJZG1hX3BhcmFtcy0+c3JhbV9zaXplID0gcGRhdGEtPnNyYW1fc2l6ZV9jYXB0dXJlOworCQlpZiAoZGF0KQorCQkJZG1hX3BhcmFtcy0+ZG1hX2FkZHIgPSBkYXQtPnN0YXJ0OworCQllbHNlCisJCQlkbWFfcGFyYW1zLT5kbWFfYWRkciA9IG1lbS0+c3RhcnQgKyBwZGF0YS0+cnhfZG1hX29mZnNldDsKIAotCS8qIFVuY29uZGl0aW9uYWwgZG1hZW5naW5lIHN0dWZmICovCi0JZG1hX2RhdGEtPmFkZHIgPSBkbWFfcGFyYW1zLT5kbWFfYWRkcjsKKwkJLyogVW5jb25kaXRpb25hbCBkbWFlbmdpbmUgc3R1ZmYgKi8KKwkJZG1hX2RhdGEtPmFkZHIgPSBkbWFfcGFyYW1zLT5kbWFfYWRkcjsKKworCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOworCQlpZiAocmVzKQorCQkJZG1hX3BhcmFtcy0+Y2hhbm5lbCA9IHJlcy0+c3RhcnQ7CisJCWVsc2UKKwkJCWRtYV9wYXJhbXMtPmNoYW5uZWwgPSBwZGF0YS0+cnhfZG1hX2NoYW5uZWw7CisKKwkJLyogZG1hZW5naW5lIGZpbHRlciBkYXRhIGZvciBEVCBhbmQgbm9uLURUIGJvb3QgKi8KKwkJaWYgKHBkZXYtPmRldi5vZl9ub2RlKQorCQkJZG1hX2RhdGEtPmZpbHRlcl9kYXRhID0gInJ4IjsKKwkJZWxzZQorCQkJZG1hX2RhdGEtPmZpbHRlcl9kYXRhID0gJmRtYV9wYXJhbXMtPmNoYW5uZWw7CisJfQogCiAJaWYgKG1jYXNwLT52ZXJzaW9uIDwgTUNBU1BfVkVSU0lPTl8zKSB7CiAJCW1jYXNwLT5maWZvX2Jhc2UgPSBEQVZJTkNJX01DQVNQX1YyX0FGSUZPX0JBU0U7CkBAIC0xNTIzLDE4ICsxNTcyLDYgQEAKIAkJbWNhc3AtPmZpZm9fYmFzZSA9IERBVklOQ0lfTUNBU1BfVjNfQUZJRk9fQkFTRTsKIAl9CiAKLQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDEpOwotCWlmIChyZXMpCi0JCWRtYV9wYXJhbXMtPmNoYW5uZWwgPSByZXMtPnN0YXJ0OwotCWVsc2UKLQkJZG1hX3BhcmFtcy0+Y2hhbm5lbCA9IHBkYXRhLT5yeF9kbWFfY2hhbm5lbDsKLQotCS8qIGRtYWVuZ2luZSBmaWx0ZXIgZGF0YSBmb3IgRFQgYW5kIG5vbi1EVCBib290ICovCi0JaWYgKHBkZXYtPmRldi5vZl9ub2RlKQotCQlkbWFfZGF0YS0+ZmlsdGVyX2RhdGEgPSAicngiOwotCWVsc2UKLQkJZG1hX2RhdGEtPmZpbHRlcl9kYXRhID0gJmRtYV9wYXJhbXMtPmNoYW5uZWw7Ci0KIAlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgbWNhc3ApOwogCiAJbWNhc3BfcmVwYXJlbnRfZmNrKHBkZXYpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2R3Yy9LY29uZmlnIGIvc291bmQvc29jL2R3Yy9LY29uZmlnCmluZGV4IGUzMzQ5MDAuLmQ1MGUwODUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9kd2MvS2NvbmZpZworKysgYi9zb3VuZC9zb2MvZHdjL0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgU05EX0RFU0lHTldBUkVfSTJTCiAJdHJpc3RhdGUgIlN5bm9wc3lzIEkyUyBEZXZpY2UgRHJpdmVyIgogCWRlcGVuZHMgb24gQ0xLREVWX0xPT0tVUAorCXNlbGVjdCBTTkRfU09DX0dFTkVSSUNfRE1BRU5HSU5FX1BDTQogCWhlbHAKIAkgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgSTJTIGRyaXZlciBmb3IKIAkgU3lub3BzeXMgZGVzaWd3bndhcmUgSTJTIGRldmljZS4gVGhlIGRldmljZSBzdXBwb3J0cyB1cHRvCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZHdjL2Rlc2lnbndhcmVfaTJzLmMgYi9zb3VuZC9zb2MvZHdjL2Rlc2lnbndhcmVfaTJzLmMKaW5kZXggOGQxOGJiZC4uYTNlOTdiNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2R3Yy9kZXNpZ253YXJlX2kycy5jCisrKyBiL3NvdW5kL3NvYy9kd2MvZGVzaWdud2FyZV9pMnMuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9kbWFlbmdpbmVfcGNtLmg+CiAKIC8qIGNvbW1vbiByZWdpc3RlciBmb3IgYWxsIGNoYW5uZWwgKi8KICNkZWZpbmUgSUVSCQkweDAwMApAQCAtNTQsOSArNTUsMzkgQEAKICNkZWZpbmUgSTJTX0NPTVBfVkVSU0lPTgkweDAxRjgKICNkZWZpbmUgSTJTX0NPTVBfVFlQRQkJMHgwMUZDCiAKKy8qCisgKiBDb21wb25lbnQgcGFyYW1ldGVyIHJlZ2lzdGVyIGZpZWxkcyAtIGRlZmluZSB0aGUgSTJTIGJsb2NrJ3MKKyAqIGNvbmZpZ3VyYXRpb24uCisgKi8KKyNkZWZpbmUJQ09NUDFfVFhfV09SRFNJWkVfMyhyKQkoKChyKSAmIEdFTk1BU0soMjcsIDI1KSkgPj4gMjUpCisjZGVmaW5lCUNPTVAxX1RYX1dPUkRTSVpFXzIocikJKCgocikgJiBHRU5NQVNLKDI0LCAyMikpID4+IDIyKQorI2RlZmluZQlDT01QMV9UWF9XT1JEU0laRV8xKHIpCSgoKHIpICYgR0VOTUFTSygyMSwgMTkpKSA+PiAxOSkKKyNkZWZpbmUJQ09NUDFfVFhfV09SRFNJWkVfMChyKQkoKChyKSAmIEdFTk1BU0soMTgsIDE2KSkgPj4gMTYpCisjZGVmaW5lCUNPTVAxX1RYX0NIQU5ORUxTKHIpCSgoKHIpICYgR0VOTUFTSygxMCwgOSkpID4+IDkpCisjZGVmaW5lCUNPTVAxX1JYX0NIQU5ORUxTKHIpCSgoKHIpICYgR0VOTUFTSyg4LCA3KSkgPj4gNykKKyNkZWZpbmUJQ09NUDFfUlhfRU5BQkxFRChyKQkoKChyKSAmIEJJVCg2KSkgPj4gNikKKyNkZWZpbmUJQ09NUDFfVFhfRU5BQkxFRChyKQkoKChyKSAmIEJJVCg1KSkgPj4gNSkKKyNkZWZpbmUJQ09NUDFfTU9ERV9FTihyKQkoKChyKSAmIEJJVCg0KSkgPj4gNCkKKyNkZWZpbmUJQ09NUDFfRklGT19ERVBUSF9HTE9CQUwocikJKCgocikgJiBHRU5NQVNLKDMsIDIpKSA+PiAyKQorI2RlZmluZQlDT01QMV9BUEJfREFUQV9XSURUSChyKQkoKChyKSAmIEdFTk1BU0soMSwgMCkpID4+IDApCisKKyNkZWZpbmUJQ09NUDJfUlhfV09SRFNJWkVfMyhyKQkoKChyKSAmIEdFTk1BU0soMTIsIDEwKSkgPj4gMTApCisjZGVmaW5lCUNPTVAyX1JYX1dPUkRTSVpFXzIocikJKCgocikgJiBHRU5NQVNLKDksIDcpKSA+PiA3KQorI2RlZmluZQlDT01QMl9SWF9XT1JEU0laRV8xKHIpCSgoKHIpICYgR0VOTUFTSyg1LCAzKSkgPj4gMykKKyNkZWZpbmUJQ09NUDJfUlhfV09SRFNJWkVfMChyKQkoKChyKSAmIEdFTk1BU0soMiwgMCkpID4+IDApCisKKy8qIE51bWJlciBvZiBlbnRyaWVzIGluIFdPUkRTSVpFIGFuZCBEQVRBX1dJRFRIIHBhcmFtZXRlciByZWdpc3RlcnMgKi8KKyNkZWZpbmUJQ09NUF9NQVhfV09SRFNJWkUJKDEgPDwgMykKKyNkZWZpbmUJQ09NUF9NQVhfREFUQV9XSURUSAkoMSA8PCAyKQorCiAjZGVmaW5lIE1BWF9DSEFOTkVMX05VTQkJOAogI2RlZmluZSBNSU5fQ0hBTk5FTF9OVU0JCTIKIAordW5pb24gZHdfaTJzX3NuZF9kbWFfZGF0YSB7CisJc3RydWN0IGkyc19kbWFfZGF0YSBwZDsKKwlzdHJ1Y3Qgc25kX2RtYWVuZ2luZV9kYWlfZG1hX2RhdGEgZHQ7Cit9OworCiBzdHJ1Y3QgZHdfaTJzX2RldiB7CiAJdm9pZCBfX2lvbWVtICppMnNfYmFzZTsKIAlzdHJ1Y3QgY2xrICpjbGs7CkBAIC02NSw4ICs5Niw4IEBACiAJc3RydWN0IGRldmljZSAqZGV2OwogCiAJLyogZGF0YSByZWxhdGVkIHRvIERNQSB0cmFuc2ZlcnMgYi93IGkycyBhbmQgRE1BQyAqLwotCXN0cnVjdCBpMnNfZG1hX2RhdGEgcGxheV9kbWFfZGF0YTsKLQlzdHJ1Y3QgaTJzX2RtYV9kYXRhIGNhcHR1cmVfZG1hX2RhdGE7CisJdW5pb24gZHdfaTJzX3NuZF9kbWFfZGF0YSBwbGF5X2RtYV9kYXRhOworCXVuaW9uIGR3X2kyc19zbmRfZG1hX2RhdGEgY2FwdHVyZV9kbWFfZGF0YTsKIAlzdHJ1Y3QgaTJzX2Nsa19jb25maWdfZGF0YSBjb25maWc7CiAJaW50ICgqaTJzX2Nsa19jZmcpKHN0cnVjdCBpMnNfY2xrX2NvbmZpZ19kYXRhICpjb25maWcpOwogfTsKQEAgLTE1Myw3ICsxODQsNyBAQAogCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCiB7CiAJc3RydWN0IGR3X2kyc19kZXYgKmRldiA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGNwdV9kYWkpOwotCXN0cnVjdCBpMnNfZG1hX2RhdGEgKmRtYV9kYXRhID0gTlVMTDsKKwl1bmlvbiBkd19pMnNfc25kX2RtYV9kYXRhICpkbWFfZGF0YSA9IE5VTEw7CiAKIAlpZiAoIShkZXYtPmNhcGFiaWxpdHkgJiBEV0NfSTJTX1JFQ09SRCkgJiYKIAkJCShzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpKQpAQCAtMjQyLDEzICsyNzMsMjEgQEAKIAogCWNvbmZpZy0+c2FtcGxlX3JhdGUgPSBwYXJhbXNfcmF0ZShwYXJhbXMpOwogCi0JaWYgKCFkZXYtPmkyc19jbGtfY2ZnKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGV2LT5pMnNfY2xrX2NmZykgeworCQlyZXQgPSBkZXYtPmkyc19jbGtfY2ZnKGNvbmZpZyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGRldi0+ZGV2LCAicnVudGltZSBhdWRpbyBjbGsgY29uZmlnIGZhaWxcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0gZWxzZSB7CisJCXUzMiBiaXRjbGsgPSBjb25maWctPnNhbXBsZV9yYXRlICogY29uZmlnLT5kYXRhX3dpZHRoICogMjsKIAotCXJldCA9IGRldi0+aTJzX2Nsa19jZmcoY29uZmlnKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGRldi0+ZGV2LCAicnVudGltZSBhdWRpbyBjbGsgY29uZmlnIGZhaWxcbiIpOwotCQlyZXR1cm4gcmV0OworCQlyZXQgPSBjbGtfc2V0X3JhdGUoZGV2LT5jbGssIGJpdGNsayk7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LT5kZXYsICJDYW4ndCBzZXQgSTJTIGNsb2NrIHJhdGU6ICVkXG4iLAorCQkJCXJldCk7CisJCQlyZXR1cm4gcmV0OworCQl9CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zMzUsMjAgKzM3NCwxNjIgQEAKICNkZWZpbmUgZHdfaTJzX3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAorLyoKKyAqIFRoZSBmb2xsb3dpbmcgdGFibGVzIGFsbG93IGEgZGlyZWN0IGxvb2t1cCBvZiB2YXJpb3VzIHBhcmFtZXRlcnMKKyAqIGRlZmluZWQgaW4gdGhlIEkyUyBibG9jaydzIGNvbmZpZ3VyYXRpb24gaW4gdGVybXMgb2Ygc291bmQgc3lzdGVtCisgKiBwYXJhbWV0ZXJzLiAgRWFjaCB0YWJsZSBpcyBzaXplZCB0byB0aGUgbnVtYmVyIG9mIGVudHJpZXMgcG9zc2libGUKKyAqIGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGNvbmZpZ3VyYXRpb24gYml0cyBkZXNjcmliaW5nIGFuIEkyUworICogYmxvY2sgcGFyYW1ldGVyLgorICovCisKKy8qIE1heGltdW0gYml0IHJlc29sdXRpb24gb2YgYSBjaGFubmVsIC0gbm90IHVuaWZvcm1seSBzcGFjZWQgKi8KK3N0YXRpYyBjb25zdCB1MzIgZmlmb193aWR0aFtDT01QX01BWF9XT1JEU0laRV0gPSB7CisJMTIsIDE2LCAyMCwgMjQsIDMyLCAwLCAwLCAwCit9OworCisvKiBXaWR0aCBvZiAoRE1BKSBidXMgKi8KK3N0YXRpYyBjb25zdCB1MzIgYnVzX3dpZHRoc1tDT01QX01BWF9EQVRBX1dJRFRIXSA9IHsKKwlETUFfU0xBVkVfQlVTV0lEVEhfMV9CWVRFLAorCURNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTLAorCURNQV9TTEFWRV9CVVNXSURUSF80X0JZVEVTLAorCURNQV9TTEFWRV9CVVNXSURUSF9VTkRFRklORUQKK307CisKKy8qIFBDTSBmb3JtYXQgdG8gc3VwcG9ydCBjaGFubmVsIHJlc29sdXRpb24gKi8KK3N0YXRpYyBjb25zdCB1MzIgZm9ybWF0c1tDT01QX01BWF9XT1JEU0laRV0gPSB7CisJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsCisJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUsCisJU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUsCisJU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCisJMCwKKwkwLAorCTAKK307CisKK3N0YXRpYyBpbnQgZHdfY29uZmlndXJlX2RhaShzdHJ1Y3QgZHdfaTJzX2RldiAqZGV2LAorCQkJCSAgIHN0cnVjdCBzbmRfc29jX2RhaV9kcml2ZXIgKmR3X2kyc19kYWksCisJCQkJICAgdW5zaWduZWQgaW50IHJhdGVzKQoreworCS8qCisJICogUmVhZCBjb21wb25lbnQgcGFyYW1ldGVyIHJlZ2lzdGVycyB0byBleHRyYWN0CisJICogdGhlIEkyUyBibG9jaydzIGNvbmZpZ3VyYXRpb24uCisJICovCisJdTMyIGNvbXAxID0gaTJzX3JlYWRfcmVnKGRldi0+aTJzX2Jhc2UsIEkyU19DT01QX1BBUkFNXzEpOworCXUzMiBjb21wMiA9IGkyc19yZWFkX3JlZyhkZXYtPmkyc19iYXNlLCBJMlNfQ09NUF9QQVJBTV8yKTsKKwl1MzIgaWR4OworCisJaWYgKENPTVAxX1RYX0VOQUJMRUQoY29tcDEpKSB7CisJCWRldl9kYmcoZGV2LT5kZXYsICIgZGVzaWdud2FyZTogcGxheSBzdXBwb3J0ZWRcbiIpOworCQlpZHggPSBDT01QMV9UWF9XT1JEU0laRV8wKGNvbXAxKTsKKwkJaWYgKFdBUk5fT04oaWR4ID49IEFSUkFZX1NJWkUoZm9ybWF0cykpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWR3X2kyc19kYWktPnBsYXliYWNrLmNoYW5uZWxzX21pbiA9IE1JTl9DSEFOTkVMX05VTTsKKwkJZHdfaTJzX2RhaS0+cGxheWJhY2suY2hhbm5lbHNfbWF4ID0KKwkJCQkxIDw8IChDT01QMV9UWF9DSEFOTkVMUyhjb21wMSkgKyAxKTsKKwkJZHdfaTJzX2RhaS0+cGxheWJhY2suZm9ybWF0cyA9IGZvcm1hdHNbaWR4XTsKKwkJZHdfaTJzX2RhaS0+cGxheWJhY2sucmF0ZXMgPSByYXRlczsKKwl9CisKKwlpZiAoQ09NUDFfUlhfRU5BQkxFRChjb21wMSkpIHsKKwkJZGV2X2RiZyhkZXYtPmRldiwgImRlc2lnbndhcmU6IHJlY29yZCBzdXBwb3J0ZWRcbiIpOworCQlpZHggPSBDT01QMl9SWF9XT1JEU0laRV8wKGNvbXAyKTsKKwkJaWYgKFdBUk5fT04oaWR4ID49IEFSUkFZX1NJWkUoZm9ybWF0cykpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWR3X2kyc19kYWktPmNhcHR1cmUuY2hhbm5lbHNfbWluID0gTUlOX0NIQU5ORUxfTlVNOworCQlkd19pMnNfZGFpLT5jYXB0dXJlLmNoYW5uZWxzX21heCA9CisJCQkJMSA8PCAoQ09NUDFfUlhfQ0hBTk5FTFMoY29tcDEpICsgMSk7CisJCWR3X2kyc19kYWktPmNhcHR1cmUuZm9ybWF0cyA9IGZvcm1hdHNbaWR4XTsKKwkJZHdfaTJzX2RhaS0+Y2FwdHVyZS5yYXRlcyA9IHJhdGVzOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR3X2NvbmZpZ3VyZV9kYWlfYnlfcGQoc3RydWN0IGR3X2kyc19kZXYgKmRldiwKKwkJCQkgICBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyICpkd19pMnNfZGFpLAorCQkJCSAgIHN0cnVjdCByZXNvdXJjZSAqcmVzLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBpMnNfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJdTMyIGNvbXAxID0gaTJzX3JlYWRfcmVnKGRldi0+aTJzX2Jhc2UsIEkyU19DT01QX1BBUkFNXzEpOworCXUzMiBpZHggPSBDT01QMV9BUEJfREFUQV9XSURUSChjb21wMSk7CisJaW50IHJldDsKKworCWlmIChXQVJOX09OKGlkeCA+PSBBUlJBWV9TSVpFKGJ1c193aWR0aHMpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBkd19jb25maWd1cmVfZGFpKGRldiwgZHdfaTJzX2RhaSwgcGRhdGEtPnNuZF9yYXRlcyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBTZXQgRE1BIHNsYXZlcyBpbmZvICovCisJZGV2LT5wbGF5X2RtYV9kYXRhLnBkLmRhdGEgPSBwZGF0YS0+cGxheV9kbWFfZGF0YTsKKwlkZXYtPmNhcHR1cmVfZG1hX2RhdGEucGQuZGF0YSA9IHBkYXRhLT5jYXB0dXJlX2RtYV9kYXRhOworCWRldi0+cGxheV9kbWFfZGF0YS5wZC5hZGRyID0gcmVzLT5zdGFydCArIEkyU19UWERNQTsKKwlkZXYtPmNhcHR1cmVfZG1hX2RhdGEucGQuYWRkciA9IHJlcy0+c3RhcnQgKyBJMlNfUlhETUE7CisJZGV2LT5wbGF5X2RtYV9kYXRhLnBkLm1heF9idXJzdCA9IDE2OworCWRldi0+Y2FwdHVyZV9kbWFfZGF0YS5wZC5tYXhfYnVyc3QgPSAxNjsKKwlkZXYtPnBsYXlfZG1hX2RhdGEucGQuYWRkcl93aWR0aCA9IGJ1c193aWR0aHNbaWR4XTsKKwlkZXYtPmNhcHR1cmVfZG1hX2RhdGEucGQuYWRkcl93aWR0aCA9IGJ1c193aWR0aHNbaWR4XTsKKwlkZXYtPnBsYXlfZG1hX2RhdGEucGQuZmlsdGVyID0gcGRhdGEtPmZpbHRlcjsKKwlkZXYtPmNhcHR1cmVfZG1hX2RhdGEucGQuZmlsdGVyID0gcGRhdGEtPmZpbHRlcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR3X2NvbmZpZ3VyZV9kYWlfYnlfZHQoc3RydWN0IGR3X2kyc19kZXYgKmRldiwKKwkJCQkgICBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyICpkd19pMnNfZGFpLAorCQkJCSAgIHN0cnVjdCByZXNvdXJjZSAqcmVzKQoreworCXUzMiBjb21wMSA9IGkyc19yZWFkX3JlZyhkZXYtPmkyc19iYXNlLCBJMlNfQ09NUF9QQVJBTV8xKTsKKwl1MzIgY29tcDIgPSBpMnNfcmVhZF9yZWcoZGV2LT5pMnNfYmFzZSwgSTJTX0NPTVBfUEFSQU1fMik7CisJdTMyIGZpZm9fZGVwdGggPSAxIDw8ICgxICsgQ09NUDFfRklGT19ERVBUSF9HTE9CQUwoY29tcDEpKTsKKwl1MzIgaWR4ID0gQ09NUDFfQVBCX0RBVEFfV0lEVEgoY29tcDEpOworCXUzMiBpZHgyOworCWludCByZXQ7CisKKwlpZiAoV0FSTl9PTihpZHggPj0gQVJSQVlfU0laRShidXNfd2lkdGhzKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gZHdfY29uZmlndXJlX2RhaShkZXYsIGR3X2kyc19kYWksIFNORFJWX1BDTV9SQVRFXzgwMDBfMTkyMDAwKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChDT01QMV9UWF9FTkFCTEVEKGNvbXAxKSkgeworCQlpZHgyID0gQ09NUDFfVFhfV09SRFNJWkVfMChjb21wMSk7CisKKwkJZGV2LT5jYXBhYmlsaXR5IHw9IERXQ19JMlNfUExBWTsKKwkJZGV2LT5wbGF5X2RtYV9kYXRhLmR0LmFkZHIgPSByZXMtPnN0YXJ0ICsgSTJTX1RYRE1BOworCQlkZXYtPnBsYXlfZG1hX2RhdGEuZHQuYWRkcl93aWR0aCA9IGJ1c193aWR0aHNbaWR4XTsKKwkJZGV2LT5wbGF5X2RtYV9kYXRhLmR0LmNoYW5fbmFtZSA9ICJUWCI7CisJCWRldi0+cGxheV9kbWFfZGF0YS5kdC5maWZvX3NpemUgPSBmaWZvX2RlcHRoICoKKwkJCShmaWZvX3dpZHRoW2lkeDJdKSA+PiA4OworCQlkZXYtPnBsYXlfZG1hX2RhdGEuZHQubWF4YnVyc3QgPSAxNjsKKwl9CisJaWYgKENPTVAxX1JYX0VOQUJMRUQoY29tcDEpKSB7CisJCWlkeDIgPSBDT01QMl9SWF9XT1JEU0laRV8wKGNvbXAyKTsKKworCQlkZXYtPmNhcGFiaWxpdHkgfD0gRFdDX0kyU19SRUNPUkQ7CisJCWRldi0+Y2FwdHVyZV9kbWFfZGF0YS5kdC5hZGRyID0gcmVzLT5zdGFydCArIEkyU19SWERNQTsKKwkJZGV2LT5jYXB0dXJlX2RtYV9kYXRhLmR0LmFkZHJfd2lkdGggPSBidXNfd2lkdGhzW2lkeF07CisJCWRldi0+Y2FwdHVyZV9kbWFfZGF0YS5kdC5jaGFuX25hbWUgPSAiUlgiOworCQlkZXYtPmNhcHR1cmVfZG1hX2RhdGEuZHQuZmlmb19zaXplID0gZmlmb19kZXB0aCAqCisJCQkoZmlmb193aWR0aFtpZHgyXSA+PiA4KTsKKwkJZGV2LT5jYXB0dXJlX2RtYV9kYXRhLmR0Lm1heGJ1cnN0ID0gMTY7CisJfQorCisJcmV0dXJuIDA7CisKK30KKwogc3RhdGljIGludCBkd19pMnNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAljb25zdCBzdHJ1Y3QgaTJzX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGR3X2kyc19kZXYgKmRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAlpbnQgcmV0OwotCXVuc2lnbmVkIGludCBjYXA7CiAJc3RydWN0IHNuZF9zb2NfZGFpX2RyaXZlciAqZHdfaTJzX2RhaTsKIAotCWlmICghcGRhdGEpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBwbGF0Zm9ybSBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJZGV2ID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXYpIHsKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImt6YWxsb2MgZmFpbFxuIik7CkBAIC0zNTYsODMgKzUzNyw2NyBAQAogCX0KIAogCWR3X2kyc19kYWkgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpkd19pMnNfZGFpKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkd19pMnNfZGFpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm1lbSBhbGxvY2F0aW9uIGZhaWxlZCBmb3IgZGFpIGRyaXZlclxuIik7CisJaWYgKCFkd19pMnNfZGFpKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAKIAlkd19pMnNfZGFpLT5vcHMgPSAmZHdfaTJzX2RhaV9vcHM7CiAJZHdfaTJzX2RhaS0+c3VzcGVuZCA9IGR3X2kyc19zdXNwZW5kOwogCWR3X2kyc19kYWktPnJlc3VtZSA9IGR3X2kyc19yZXN1bWU7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCWlmICghcmVzKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGkycyByZXNvdXJjZSBkZWZpbmVkXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCiAJZGV2LT5pMnNfYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOwotCWlmIChJU19FUlIoZGV2LT5pMnNfYmFzZSkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW9yZW1hcCBmYWlsIGZvciBpMnNfcmVnaW9uXG4iKTsKKwlpZiAoSVNfRVJSKGRldi0+aTJzX2Jhc2UpKQogCQlyZXR1cm4gUFRSX0VSUihkZXYtPmkyc19iYXNlKTsKLQl9Ci0KLQljYXAgPSBwZGF0YS0+Y2FwOwotCWRldi0+Y2FwYWJpbGl0eSA9IGNhcDsKLQlkZXYtPmkyc19jbGtfY2ZnID0gcGRhdGEtPmkyc19jbGtfY2ZnOwotCi0JLyogU2V0IERNQSBzbGF2ZXMgaW5mbyAqLwotCi0JZGV2LT5wbGF5X2RtYV9kYXRhLmRhdGEgPSBwZGF0YS0+cGxheV9kbWFfZGF0YTsKLQlkZXYtPmNhcHR1cmVfZG1hX2RhdGEuZGF0YSA9IHBkYXRhLT5jYXB0dXJlX2RtYV9kYXRhOwotCWRldi0+cGxheV9kbWFfZGF0YS5hZGRyID0gcmVzLT5zdGFydCArIEkyU19UWERNQTsKLQlkZXYtPmNhcHR1cmVfZG1hX2RhdGEuYWRkciA9IHJlcy0+c3RhcnQgKyBJMlNfUlhETUE7Ci0JZGV2LT5wbGF5X2RtYV9kYXRhLm1heF9idXJzdCA9IDE2OwotCWRldi0+Y2FwdHVyZV9kbWFfZGF0YS5tYXhfYnVyc3QgPSAxNjsKLQlkZXYtPnBsYXlfZG1hX2RhdGEuYWRkcl93aWR0aCA9IERNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTOwotCWRldi0+Y2FwdHVyZV9kbWFfZGF0YS5hZGRyX3dpZHRoID0gRE1BX1NMQVZFX0JVU1dJRFRIXzJfQllURVM7Ci0JZGV2LT5wbGF5X2RtYV9kYXRhLmZpbHRlciA9IHBkYXRhLT5maWx0ZXI7Ci0JZGV2LT5jYXB0dXJlX2RtYV9kYXRhLmZpbHRlciA9IHBkYXRhLT5maWx0ZXI7Ci0KLQlkZXYtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgTlVMTCk7Ci0JaWYgKElTX0VSUihkZXYtPmNsaykpCi0JCXJldHVybiAgUFRSX0VSUihkZXYtPmNsayk7Ci0KLQlyZXQgPSBjbGtfZW5hYmxlKGRldi0+Y2xrKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfY2xrX3B1dDsKLQotCWlmIChjYXAgJiBEV0NfSTJTX1BMQVkpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiIGRlc2lnbndhcmU6IHBsYXkgc3VwcG9ydGVkXG4iKTsKLQkJZHdfaTJzX2RhaS0+cGxheWJhY2suY2hhbm5lbHNfbWluID0gTUlOX0NIQU5ORUxfTlVNOwotCQlkd19pMnNfZGFpLT5wbGF5YmFjay5jaGFubmVsc19tYXggPSBwZGF0YS0+Y2hhbm5lbDsKLQkJZHdfaTJzX2RhaS0+cGxheWJhY2suZm9ybWF0cyA9IHBkYXRhLT5zbmRfZm10czsKLQkJZHdfaTJzX2RhaS0+cGxheWJhY2sucmF0ZXMgPSBwZGF0YS0+c25kX3JhdGVzOwotCX0KLQotCWlmIChjYXAgJiBEV0NfSTJTX1JFQ09SRCkgewotCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJkZXNpZ253YXJlOiByZWNvcmQgc3VwcG9ydGVkXG4iKTsKLQkJZHdfaTJzX2RhaS0+Y2FwdHVyZS5jaGFubmVsc19taW4gPSBNSU5fQ0hBTk5FTF9OVU07Ci0JCWR3X2kyc19kYWktPmNhcHR1cmUuY2hhbm5lbHNfbWF4ID0gcGRhdGEtPmNoYW5uZWw7Ci0JCWR3X2kyc19kYWktPmNhcHR1cmUuZm9ybWF0cyA9IHBkYXRhLT5zbmRfZm10czsKLQkJZHdfaTJzX2RhaS0+Y2FwdHVyZS5yYXRlcyA9IHBkYXRhLT5zbmRfcmF0ZXM7Ci0JfQogCiAJZGV2LT5kZXYgPSAmcGRldi0+ZGV2OworCWlmIChwZGF0YSkgeworCQlyZXQgPSBkd19jb25maWd1cmVfZGFpX2J5X3BkKGRldiwgZHdfaTJzX2RhaSwgcmVzLCBwZGF0YSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQlkZXYtPmNhcGFiaWxpdHkgPSBwZGF0YS0+Y2FwOworCQlkZXYtPmkyc19jbGtfY2ZnID0gcGRhdGEtPmkyc19jbGtfY2ZnOworCQlpZiAoIWRldi0+aTJzX2Nsa19jZmcpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGNsb2NrIGNvbmZpZ3VyZSBtZXRob2RcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQlkZXYtPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwl9IGVsc2UgeworCQlyZXQgPSBkd19jb25maWd1cmVfZGFpX2J5X2R0KGRldiwgZHdfaTJzX2RhaSwgcmVzKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWRldi0+Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsICJpMnNjbGsiKTsKKwl9CisJaWYgKElTX0VSUihkZXYtPmNsaykpCisJCXJldHVybiBQVFJfRVJSKGRldi0+Y2xrKTsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkZXYtPmNsayk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKIAlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgZGV2KTsKLQlyZXQgPSBzbmRfc29jX3JlZ2lzdGVyX2NvbXBvbmVudCgmcGRldi0+ZGV2LCAmZHdfaTJzX2NvbXBvbmVudCwKKwlyZXQgPSBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KCZwZGV2LT5kZXYsICZkd19pMnNfY29tcG9uZW50LAogCQkJCQkgZHdfaTJzX2RhaSwgMSk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vdCBhYmxlIHRvIHJlZ2lzdGVyIGRhaVxuIik7CiAJCWdvdG8gZXJyX2Nsa19kaXNhYmxlOwogCX0KIAorCWlmICghcGRhdGEpIHsKKwkJcmV0ID0gZGV2bV9zbmRfZG1hZW5naW5lX3BjbV9yZWdpc3RlcigmcGRldi0+ZGV2LCBOVUxMLCAwKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJDb3VsZCBub3QgcmVnaXN0ZXIgUENNOiAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gZXJyX2Nsa19kaXNhYmxlOworCQl9CisJfQorCiAJcmV0dXJuIDA7CiAKIGVycl9jbGtfZGlzYWJsZToKLQljbGtfZGlzYWJsZShkZXYtPmNsayk7Ci1lcnJfY2xrX3B1dDoKLQljbGtfcHV0KGRldi0+Y2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGV2LT5jbGspOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQ0MCwxOCArNjA1LDI2IEBACiB7CiAJc3RydWN0IGR3X2kyc19kZXYgKmRldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKIAotCXNuZF9zb2NfdW5yZWdpc3Rlcl9jb21wb25lbnQoJnBkZXYtPmRldik7Ci0KLQljbGtfcHV0KGRldi0+Y2xrKTsKKwljbGtfZGlzYWJsZV91bnByZXBhcmUoZGV2LT5jbGspOwogCiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGR3X2kyc19vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAic25wcyxkZXNpZ253YXJlLWkycyIsCSB9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZHdfaTJzX29mX21hdGNoKTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBkd19pMnNfZHJpdmVyID0gewogCS5wcm9iZQkJPSBkd19pMnNfcHJvYmUsCiAJLnJlbW92ZQkJPSBkd19pMnNfcmVtb3ZlLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJkZXNpZ253YXJlLWkycyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihkd19pMnNfb2ZfbWF0Y2gpLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2V1a3JlYS10bHYzMjAuYyBiL3NvdW5kL3NvYy9mc2wvZXVrcmVhLXRsdjMyMC5jCmluZGV4IDljZTcwZmMuLmUxYWEzODM0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2V1a3JlYS10bHYzMjAuYworKysgYi9zb3VuZC9zb2MvZnNsL2V1a3JlYS10bHYzMjAuYwpAQCAtNDIsMjUgKzQyLDYgQEAKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmNwdV9kYWk7CiAJaW50IHJldDsKIAotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKLQkJCQkgIFNORF9TT0NfREFJRk1UX05CX05GIHwKLQkJCQkgIFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOwotCS8qIGZzbF9zc2kgbGFja3MgdGhlIHNldF9mbXQgb3BzLiAqLwotCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9UU1VQUCkgewotCQlkZXZfZXJyKGNwdV9kYWktPmRldiwKLQkJCSJGYWlsZWQgdG8gc2V0IHRoZSBjcHUgZGFpIGZvcm1hdC5cbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAotCQkJCSAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAotCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGNwdV9kYWktPmRldiwKLQkJCSJGYWlsZWQgdG8gc2V0IHRoZSBjb2RlYyBmb3JtYXQuXG4iKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwKIAkJCQkgICAgIENPREVDX0NMT0NLLCBTTkRfU09DX0NMT0NLX09VVCk7CiAJaWYgKHJldCkgewpAQCAtNjksNyArNTAsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChjcHVfZGFpLCAweGZmZmZmZmMsIDB4ZmZmZmZmYywgMiwgMCk7CisJc25kX3NvY19kYWlfc2V0X3RkbV9zbG90KGNwdV9kYWksIDB4MywgMHgzLCAyLCAwKTsKIAogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgSU1YX1NTUF9TWVNfQ0xLLCAwLAogCQkJCVNORF9TT0NfQ0xPQ0tfSU4pOwpAQCAtOTEsNiArNzIsOCBAQAogCS5uYW1lCQk9ICJ0bHYzMjBhaWMyMyIsCiAJLnN0cmVhbV9uYW1lCT0gIlRMVjMyMEFJQzIzIiwKIAkuY29kZWNfZGFpX25hbWUJPSAidGx2MzIwYWljMjMtaGlmaSIsCisJLmRhaV9mbXQJPSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCQkgIFNORF9TT0NfREFJRk1UX0NCTV9DRk0sCiAJLm9wcwkJPSAmZXVrcmVhX3RsdjMyMF9zbmRfb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9mc2xfYXNyYy5jIGIvc291bmQvc29jL2ZzbC9mc2xfYXNyYy5jCmluZGV4IDAyNmE4MDEuLmMwNjg0OTQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvZnNsX2FzcmMuYworKysgYi9zb3VuZC9zb2MvZnNsL2ZzbF9hc3JjLmMKQEAgLTgxOCw3ICs4MTgsNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWFzcmNfcHJpdi0+cGRldiA9IHBkZXY7Ci0Jc3RybmNweShhc3JjX3ByaXYtPm5hbWUsIG5wLT5uYW1lLCBzaXplb2YoYXNyY19wcml2LT5uYW1lKSAtIDEpOwogCiAJLyogR2V0IHRoZSBhZGRyZXNzZXMgYW5kIElSUSAqLwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CkBAIC04MzcsMTIgKzgzNiwxMiBAQAogCiAJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKIAlpZiAoaXJxIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgZm9yIG5vZGUgJXNcbiIsIG5wLT5mdWxsX25hbWUpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgZm9yIG5vZGUgJXNcbiIsIHBkZXYtPm5hbWUpOwogCQlyZXR1cm4gaXJxOwogCX0KIAogCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJxLCBmc2xfYXNyY19pc3IsIDAsCi0JCQkgICAgICAgYXNyY19wcml2LT5uYW1lLCBhc3JjX3ByaXYpOworCQkJICAgICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBhc3JjX3ByaXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNsYWltIGlycSAldTogJWRcbiIsIGlycSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX2FzcmMuaCBiL3NvdW5kL3NvYy9mc2wvZnNsX2FzcmMuaAppbmRleCBhM2YyMTFmLi40YWVkNjNjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2ZzbF9hc3JjLmgKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfYXNyYy5oCkBAIC00MzMsNyArNDMzLDYgQEAKICAqIEBjaGFubmVsX2F2YWlsOiBub24tb2NjdXBpZWQgY2hhbm5lbCBudW1iZXJzCiAgKiBAYXNyY19yYXRlOiBkZWZhdWx0IHNhbXBsZSByYXRlIGZvciBBU29DIEJhY2stRW5kcwogICogQGFzcmNfd2lkdGg6IGRlZmF1bHQgc2FtcGxlIHdpZHRoIGZvciBBU29DIEJhY2stRW5kcwotICogQG5hbWU6IGRyaXZlciBuYW1lCiAgKi8KIHN0cnVjdCBmc2xfYXNyYyB7CiAJc3RydWN0IHNuZF9kbWFlbmdpbmVfZGFpX2RtYV9kYXRhIGRtYV9wYXJhbXNfcng7CkBAIC00NTIsOCArNDUxLDYgQEAKIAogCWludCBhc3JjX3JhdGU7CiAJaW50IGFzcmNfd2lkdGg7Ci0KLQljaGFyIG5hbWVbMzJdOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtX2RyaXZlciBmc2xfYXNyY19wbGF0Zm9ybTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX2VzYWkuYyBiL3NvdW5kL3NvYy9mc2wvZnNsX2VzYWkuYwppbmRleCAxYzA4YWIxLi41Yzc1OTcxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2ZzbF9lc2FpLmMKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfZXNhaS5jCkBAIC03NzQsNyArNzc0LDcgQEAKIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIGZvciBub2RlICVzXG4iLCBucC0+ZnVsbF9uYW1lKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIGZvciBub2RlICVzXG4iLCBwZGV2LT5uYW1lKTsKIAkJcmV0dXJuIGlycTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX2VzYWkuaCBiL3NvdW5kL3NvYy9mc2wvZnNsX2VzYWkuaAppbmRleCA5MWE1NTBmLi41ZTc5M2JiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2ZzbF9lc2FpLmgKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfZXNhaS5oCkBAIC0zMDIsNyArMzAyLDcgQEAKICNkZWZpbmUgRVNBSV94Q0NSX3hGUF9NQVNLCSgoKDEgPDwgRVNBSV94Q0NSX3hGUF9XSURUSCkgLSAxKSA8PCBFU0FJX3hDQ1JfeEZQX1NISUZUKQogI2RlZmluZSBFU0FJX3hDQ1JfeEZQKHYpCSgoKCh2KSAtIDEpIDw8IEVTQUlfeENDUl94RlBfU0hJRlQpICYgRVNBSV94Q0NSX3hGUF9NQVNLKQogI2RlZmluZSBFU0FJX3hDQ1JfeERDX1NISUZUICAgICA5Ci0jZGVmaW5lIEVTQUlfeENDUl94RENfV0lEVEgJNAorI2RlZmluZSBFU0FJX3hDQ1JfeERDX1dJRFRICTUKICNkZWZpbmUgRVNBSV94Q0NSX3hEQ19NQVNLCSgoKDEgPDwgRVNBSV94Q0NSX3hEQ19XSURUSCkgLSAxKSA8PCBFU0FJX3hDQ1JfeERDX1NISUZUKQogI2RlZmluZSBFU0FJX3hDQ1JfeERDKHYpCSgoKCh2KSAtIDEpIDw8IEVTQUlfeENDUl94RENfU0hJRlQpICYgRVNBSV94Q0NSX3hEQ19NQVNLKQogI2RlZmluZSBFU0FJX3hDQ1JfeFBTUl9TSElGVAk4CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2ZzbF9zYWkuYyBiL3NvdW5kL3NvYy9mc2wvZnNsX3NhaS5jCmluZGV4IDAzMmQyZDMuLmVjNzljM2QgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvZnNsX3NhaS5jCisrKyBiL3NvdW5kL3NvYy9mc2wvZnNsX3NhaS5jCkBAIC02MTIsNyArNjEyLDcgQEAKIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIGZvciBub2RlICVzXG4iLCBucC0+ZnVsbF9uYW1lKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIGZvciBub2RlICVzXG4iLCBwZGV2LT5uYW1lKTsKIAkJcmV0dXJuIGlycTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX3NwZGlmLmMgYi9zb3VuZC9zb2MvZnNsL2ZzbF9zcGRpZi5jCmluZGV4IGFmMDQyOTQyLi43NTg3MGMwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2ZzbF9zcGRpZi5jCisrKyBiL3NvdW5kL3NvYy9mc2wvZnNsX3NwZGlmLmMKQEAgLTkwLDcgKzkwLDYgQEAKICAqIEBzeXNjbGs6IHN5c3RlbSBjbG9jayBmb3IgcnggY2xvY2sgcmF0ZSBtZWFzdXJlbWVudAogICogQGRtYV9wYXJhbXNfdHg6IERNQSBwYXJhbWV0ZXJzIGZvciB0cmFuc21pdCBjaGFubmVsCiAgKiBAZG1hX3BhcmFtc19yeDogRE1BIHBhcmFtZXRlcnMgZm9yIHJlY2VpdmUgY2hhbm5lbAotICogQG5hbWU6IGRyaXZlciBuYW1lCiAgKi8KIHN0cnVjdCBmc2xfc3BkaWZfcHJpdiB7CiAJc3RydWN0IHNwZGlmX21peGVyX2NvbnRyb2wgZnNsX3NwZGlmX2NvbnRyb2w7CkBAIC0xMDksMTIgKzEwOCw4IEBACiAJc3RydWN0IGNsayAqc3lzY2xrOwogCXN0cnVjdCBzbmRfZG1hZW5naW5lX2RhaV9kbWFfZGF0YSBkbWFfcGFyYW1zX3R4OwogCXN0cnVjdCBzbmRfZG1hZW5naW5lX2RhaV9kbWFfZGF0YSBkbWFfcGFyYW1zX3J4OwotCi0JLyogVGhlIG5hbWUgc3BhY2Ugd2lsbCBiZSBhbGxvY2F0ZWQgZHluYW1pY2FsbHkgKi8KLQljaGFyIG5hbWVbMF07CiB9OwogCi0KIC8qIERQTEwgbG9ja2VkIGFuZCBsb2NrIGxvc3MgaW50ZXJydXB0IGhhbmRsZXIgKi8KIHN0YXRpYyB2b2lkIHNwZGlmX2lycV9kcGxsX2xvY2soc3RydWN0IGZzbF9zcGRpZl9wcml2ICpzcGRpZl9wcml2KQogewpAQCAtMTE2OSwxOSArMTE2NCwxNSBAQAogCWlmICghbnApCiAJCXJldHVybiAtRU5PREVWOwogCi0Jc3BkaWZfcHJpdiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LAotCQkJc2l6ZW9mKHN0cnVjdCBmc2xfc3BkaWZfcHJpdikgKyBzdHJsZW4obnAtPm5hbWUpICsgMSwKLQkJCUdGUF9LRVJORUwpOworCXNwZGlmX3ByaXYgPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpzcGRpZl9wcml2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzcGRpZl9wcml2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXN0cmNweShzcGRpZl9wcml2LT5uYW1lLCBucC0+bmFtZSk7Ci0KIAlzcGRpZl9wcml2LT5wZGV2ID0gcGRldjsKIAogCS8qIEluaXRpYWxpemUgdGhpcyBjb3B5IG9mIHRoZSBDUFUgREFJIGRyaXZlciBzdHJ1Y3R1cmUgKi8KIAltZW1jcHkoJnNwZGlmX3ByaXYtPmNwdV9kYWlfZHJ2LCAmZnNsX3NwZGlmX2RhaSwgc2l6ZW9mKGZzbF9zcGRpZl9kYWkpKTsKLQlzcGRpZl9wcml2LT5jcHVfZGFpX2Rydi5uYW1lID0gc3BkaWZfcHJpdi0+bmFtZTsKKwlzcGRpZl9wcml2LT5jcHVfZGFpX2Rydi5uYW1lID0gZGV2X25hbWUoJnBkZXYtPmRldik7CiAKIAkvKiBHZXQgdGhlIGFkZHJlc3NlcyBhbmQgSVJRICovCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKQEAgLTExOTgsMTIgKzExODksMTIgQEAKIAogCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKGlycSA8IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIGZvciBub2RlICVzXG4iLCBucC0+ZnVsbF9uYW1lKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIGZvciBub2RlICVzXG4iLCBwZGV2LT5uYW1lKTsKIAkJcmV0dXJuIGlycTsKIAl9CiAKIAlyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGlycSwgc3BkaWZfaXNyLCAwLAotCQkJc3BkaWZfcHJpdi0+bmFtZSwgc3BkaWZfcHJpdik7CisJCQkgICAgICAgZGV2X25hbWUoJnBkZXYtPmRldiksIHNwZGlmX3ByaXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGQgbm90IGNsYWltIGlycSAldVxuIiwgaXJxKTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvZnNsX3NzaS5jIGIvc291bmQvc29jL2ZzbC9mc2xfc3NpLmMKaW5kZXggYTY1ZjE3ZC4uMjU5NTYxMSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfc3NpLmMKKysrIGIvc291bmQvc29jL2ZzbC9mc2xfc3NpLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogICovCiBzdHJ1Y3QgZnNsX3NzaV9wcml2YXRlIHsKIAlzdHJ1Y3QgcmVnbWFwICpyZWdzOwotCXVuc2lnbmVkIGludCBpcnE7CisJaW50IGlycTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIGNwdV9kYWlfZHJ2OwogCiAJdW5zaWduZWQgaW50IGRhaV9mbXQ7CkBAIC05OTIsOCArOTkyLDggQEAKIAlyZWdtYXBfdXBkYXRlX2JpdHMocmVncywgQ0NTUl9TU0lfU0NSLCBDQ1NSX1NTSV9TQ1JfU1NJRU4sCiAJCQlDQ1NSX1NTSV9TQ1JfU1NJRU4pOwogCi0JcmVnbWFwX3dyaXRlKHJlZ3MsIENDU1JfU1NJX1NUTVNLLCB0eF9tYXNrKTsKLQlyZWdtYXBfd3JpdGUocmVncywgQ0NTUl9TU0lfU1JNU0ssIHJ4X21hc2spOworCXJlZ21hcF93cml0ZShyZWdzLCBDQ1NSX1NTSV9TVE1TSywgfnR4X21hc2spOworCXJlZ21hcF93cml0ZShyZWdzLCBDQ1NSX1NTSV9TUk1TSywgfnJ4X21hc2spOwogCiAJcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ3MsIENDU1JfU1NJX1NDUiwgQ0NTUl9TU0lfU0NSX1NTSUVOLCB2YWwpOwogCkBAIC0xMzYzLDggKzEzNjMsOCBAQAogCiAJc3NpX3ByaXZhdGUtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaWYgKCFzc2lfcHJpdmF0ZS0+aXJxKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlycSBmb3Igbm9kZSAlc1xuIiwgbnAtPmZ1bGxfbmFtZSk7Ci0JCXJldHVybiAtRU5YSU87CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGlycSBmb3Igbm9kZSAlc1xuIiwgcGRldi0+bmFtZSk7CisJCXJldHVybiBzc2lfcHJpdmF0ZS0+aXJxOwogCX0KIAogCS8qIEFyZSB0aGUgUlggYW5kIHRoZSBUWCBjbG9ja3MgbG9ja2VkPyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9mc2xfdXRpbHMuYyBiL3NvdW5kL3NvYy9mc2wvZnNsX3V0aWxzLmMKaW5kZXggMmFjNzc1NS4uYjllNDJiNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9mc2xfdXRpbHMuYworKysgYi9zb3VuZC9zb2MvZnNsL2ZzbF91dGlscy5jCkBAIC04NiwzMyArODYsNiBAQAogfQogRVhQT1JUX1NZTUJPTChmc2xfYXNvY19nZXRfZG1hX2NoYW5uZWwpOwogCi0vKioKLSAqIGZzbF9hc29jX3hsYXRlX3RkbV9zbG90X21hc2sgLSBnZW5lcmF0ZSBURE0gc2xvdCBUWC9SWCBtYXNrLgotICoKLSAqIEBzbG90czogTnVtYmVyIG9mIHNsb3RzIGluIHVzZS4KLSAqIEB0eF9tYXNrOiBiaXRtYXNrIHJlcHJlc2VudGluZyBhY3RpdmUgVFggc2xvdHMuCi0gKiBAcnhfbWFzazogYml0bWFzayByZXByZXNlbnRpbmcgYWN0aXZlIFJYIHNsb3RzLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gdXNlZCB0byBnZW5lcmF0ZSB0aGUgVERNIHNsb3QgVFgvUlggbWFzay4gQW5kIHRoZSBUWC9SWAotICogbWFzayB3aWxsIHVzZSBhIDAgYml0IGZvciBhbiBhY3RpdmUgc2xvdCBhcyBkZWZhdWx0LCBhbmQgdGhlIGRlZmF1bHQKLSAqIGFjdGl2ZSBiaXRzIGFyZSBhdCB0aGUgTFNCIG9mIHRoZSBtYXNrIHZhbHVlLgotICovCi1pbnQgZnNsX2Fzb2NfeGxhdGVfdGRtX3Nsb3RfbWFzayh1bnNpZ25lZCBpbnQgc2xvdHMsCi0JCQkJICAgIHVuc2lnbmVkIGludCAqdHhfbWFzaywKLQkJCQkgICAgdW5zaWduZWQgaW50ICpyeF9tYXNrKQotewotCWlmICghc2xvdHMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHR4X21hc2spCi0JCSp0eF9tYXNrID0gfigoMSA8PCBzbG90cykgLSAxKTsKLQlpZiAocnhfbWFzaykKLQkJKnJ4X21hc2sgPSB+KCgxIDw8IHNsb3RzKSAtIDEpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChmc2xfYXNvY194bGF0ZV90ZG1fc2xvdF9tYXNrKTsKLQogTU9EVUxFX0FVVEhPUigiVGltdXIgVGFiaSA8dGltdXJAZnJlZXNjYWxlLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIEFTb0MgdXRpbGl0eSBjb2RlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2ZzbF91dGlscy5oIGIvc291bmQvc29jL2ZzbC9mc2xfdXRpbHMuaAppbmRleCBkZjUzNWRiLi4xNjg3YjY2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZnNsL2ZzbF91dGlscy5oCisrKyBiL3NvdW5kL3NvYy9mc2wvZnNsX3V0aWxzLmgKQEAgLTIyLDcgKzIyLDQgQEAKIAkJCSAgICAgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgKmRhaSwKIAkJCSAgICAgdW5zaWduZWQgaW50ICpkbWFfY2hhbm5lbF9pZCwKIAkJCSAgICAgdW5zaWduZWQgaW50ICpkbWFfaWQpOwotaW50IGZzbF9hc29jX3hsYXRlX3RkbV9zbG90X21hc2sodW5zaWduZWQgaW50IHNsb3RzLAotCQkJCSAgICB1bnNpZ25lZCBpbnQgKnR4X21hc2ssCi0JCQkJICAgIHVuc2lnbmVkIGludCAqcnhfbWFzayk7CiAjZW5kaWYgLyogX0ZTTF9VVElMU19IICovCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2lteC1tYzEzNzgzLmMgYi9zb3VuZC9zb2MvZnNsL2lteC1tYzEzNzgzLmMKaW5kZXggNmJmNWJjZS4uOWU2NDkzZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9pbXgtbWMxMzc4My5jCisrKyBiL3NvdW5kL3NvYy9mc2wvaW14LW1jMTM3ODMuYwpAQCAtMzcsOCArMzcsNyBAQAogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CiAJaW50IHJldDsKIAotCXJldCA9IHNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChjb2RlY19kYWksIDB4ZmZmZmZmZmMsIDB4ZmZmZmZmZmMsCi0JCQkJCTQsIDE2KTsKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfdGRtX3Nsb3QoY29kZWNfZGFpLCAweDMsIDB4MywgNCwgMTYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTQ2LDcgKzQ1LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3RkbV9zbG90KGNwdV9kYWksIDB4MCwgMHhmZmZmZmZmYywgMiwgMTYpOworCXJldCA9IHNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChjcHVfZGFpLCAweDMsIDB4MywgMiwgMTYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvaW14LXNwZGlmLmMgYi9zb3VuZC9zb2MvZnNsL2lteC1zcGRpZi5jCmluZGV4IGU5NDcwNGYuLjMzZGEyNmEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvaW14LXNwZGlmLmMKKysrIGIvc291bmQvc29jL2ZzbC9pbXgtc3BkaWYuYwpAQCAtNjAsNiArNjAsNyBAQAogCWRhdGEtPmNhcmQuZGV2ID0gJnBkZXYtPmRldjsKIAlkYXRhLT5jYXJkLmRhaV9saW5rID0gJmRhdGEtPmRhaTsKIAlkYXRhLT5jYXJkLm51bV9saW5rcyA9IDE7CisJZGF0YS0+Y2FyZC5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcmV0ID0gc25kX3NvY19vZl9wYXJzZV9jYXJkX25hbWUoJmRhdGEtPmNhcmQsICJtb2RlbCIpOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZnNsL2lteC1zc2kuYyBiL3NvdW5kL3NvYy9mc2wvaW14LXNzaS5jCmluZGV4IGZhODAxZTEuLjQ2MWNlMjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9mc2wvaW14LXNzaS5jCisrKyBiL3NvdW5kL3NvYy9mc2wvaW14LXNzaS5jCkBAIC03NCw4ICs3NCw4IEBACiAJc2NjciB8PSBTU0lfU1RDQ1JfREMoc2xvdHMgLSAxKTsKIAl3cml0ZWwoc2Njciwgc3NpLT5iYXNlICsgU1NJX1NSQ0NSKTsKIAotCXdyaXRlbCh0eF9tYXNrLCBzc2ktPmJhc2UgKyBTU0lfU1RNU0spOwotCXdyaXRlbChyeF9tYXNrLCBzc2ktPmJhc2UgKyBTU0lfU1JNU0spOworCXdyaXRlbCh+dHhfbWFzaywgc3NpLT5iYXNlICsgU1NJX1NUTVNLKTsKKwl3cml0ZWwofnJ4X21hc2ssIHNzaS0+YmFzZSArIFNTSV9TUk1TSyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM0MCw3ICszNDAsNiBAQAogCS5zZXRfZm10CT0gaW14X3NzaV9zZXRfZGFpX2ZtdCwKIAkuc2V0X2Nsa2Rpdgk9IGlteF9zc2lfc2V0X2RhaV9jbGtkaXYsCiAJLnNldF9zeXNjbGsJPSBpbXhfc3NpX3NldF9kYWlfc3lzY2xrLAotCS54bGF0ZV90ZG1fc2xvdF9tYXNrID0gZnNsX2Fzb2NfeGxhdGVfdGRtX3Nsb3RfbWFzaywKIAkuc2V0X3RkbV9zbG90CT0gaW14X3NzaV9zZXRfZGFpX3RkbV9zbG90LAogCS50cmlnZ2VyCT0gaW14X3NzaV90cmlnZ2VyLAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9mc2wvaW14LXdtODk2Mi5jIGIvc291bmQvc29jL2ZzbC9pbXgtd204OTYyLmMKaW5kZXggNGNhYWNiMC4uY2QxNDZkNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9pbXgtd204OTYyLmMKKysrIGIvc291bmQvc29jL2ZzbC9pbXgtd204OTYyLmMKQEAgLTI1Nyw2ICsyNTcsNyBAQAogCWlmIChyZXQpCiAJCWdvdG8gY2xrX2ZhaWw7CiAJZGF0YS0+Y2FyZC5udW1fbGlua3MgPSAxOworCWRhdGEtPmNhcmQub3duZXIgPSBUSElTX01PRFVMRTsKIAlkYXRhLT5jYXJkLmRhaV9saW5rID0gJmRhdGEtPmRhaTsKIAlkYXRhLT5jYXJkLmRhcG1fd2lkZ2V0cyA9IGlteF93bTg5NjJfZGFwbV93aWRnZXRzOwogCWRhdGEtPmNhcmQubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUoaW14X3dtODk2Ml9kYXBtX3dpZGdldHMpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC9teDI3dmlzLWFpYzMyeDQuYyBiL3NvdW5kL3NvYy9mc2wvbXgyN3Zpcy1haWMzMng0LmMKaW5kZXggYjFjZWQ3Yi4uMTk4ZWViMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC9teDI3dmlzLWFpYzMyeDQuYworKysgYi9zb3VuZC9zb2MvZnNsL214Mjd2aXMtYWljMzJ4NC5jCkBAIC01NSwxNiArNTUsNiBAQAogCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwogCWludCByZXQ7Ci0JdTMyIGRhaV9mb3JtYXQ7Ci0KLQlkYWlfZm9ybWF0ID0gU05EX1NPQ19EQUlGTVRfRFNQX0IgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8Ci0JCVNORF9TT0NfREFJRk1UX0NCTV9DRk07Ci0KLQkvKiBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgZGFpX2Zvcm1hdCk7Ci0KLQkvKiBzZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCi0Jc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBkYWlfZm9ybWF0KTsKIAogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCAwLAogCQkJCSAgICAgMjUwMDAwMDAsIFNORF9TT0NfQ0xPQ0tfT1VUKTsKQEAgLTE2NCw2ICsxNTQsOCBAQAogCS5wbGF0Zm9ybV9uYW1lCT0gImlteC1zc2kuMCIsCiAJLmNvZGVjX25hbWUJPSAidGx2MzIwYWljMzJ4NC4wLTAwMTgiLAogCS5jcHVfZGFpX25hbWUJPSAiaW14LXNzaS4wIiwKKwkuZGFpX2ZtdAk9IFNORF9TT0NfREFJRk1UX0RTUF9CIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJICBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNLAogCS5vcHMJCT0gJm14Mjd2aXNfYWljMzJ4NF9zbmRfb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ZzbC93bTExMzMtZXYxLmMgYi9zb3VuZC9zb2MvZnNsL3dtMTEzMy1ldjEuYwppbmRleCA4MDQ3NDlhLi5hOTU4OTM3YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ZzbC93bTExMzMtZXYxLmMKKysrIGIvc291bmQvc29jL2ZzbC93bTExMzMtZXYxLmMKQEAgLTg3LDcgKzg3LDYgQEAKIAlzbmRfcGNtX2Zvcm1hdF90IGZvcm1hdCA9IHBhcmFtc19mb3JtYXQocGFyYW1zKTsKIAl1bnNpZ25lZCBpbnQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CiAJdW5zaWduZWQgaW50IGNoYW5uZWxzID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7Ci0JdTMyIGRhaV9mb3JtYXQ7CiAKIAkvKiBmaW5kIHRoZSBjb3JyZWN0IGF1ZGlvIHBhcmFtZXRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTgzNTBfYXVkaW8pOyBpKyspIHsKQEAgLTEwNCwyMiArMTAzLDEzIEBACiAJLyogY29kZWMgRkxMIGlucHV0IGlzIDE0Ljc1IE1IeiBmcm9tIE1DTEsgKi8KIAlzbmRfc29jX2RhaV9zZXRfcGxsKGNvZGVjX2RhaSwgMCwgMCwgMTQ3NTAwMDAsIHdtODM1MF9hdWRpb1tpXS5zeXNjbGspOwogCi0JZGFpX2Zvcm1hdCA9IFNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKLQkJU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQotCS8qIHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLwotCXNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBkYWlfZm9ybWF0KTsKLQotCS8qIHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIGRhaV9mb3JtYXQpOwotCiAJLyogVE9ETzogVGhlIFNTSSBkcml2ZXIgc2hvdWxkIGZpZ3VyZSB0aGlzIG91dCBmb3IgdXMgKi8KIAlzd2l0Y2ggKGNoYW5uZWxzKSB7CiAJY2FzZSAyOgotCQlzbmRfc29jX2RhaV9zZXRfdGRtX3Nsb3QoY3B1X2RhaSwgMHhmZmZmZmZjLCAweGZmZmZmZmMsIDIsIDApOworCQlzbmRfc29jX2RhaV9zZXRfdGRtX3Nsb3QoY3B1X2RhaSwgMHgzLCAweDMsIDIsIDApOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCXNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChjcHVfZGFpLCAweGZmZmZmZmUsIDB4ZmZmZmZmZSwgMSwgMCk7CisJCXNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChjcHVfZGFpLCAweDEsIDB4MSwgMSwgMCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjQ0LDYgKzIzNCw4IEBACiAJLmluaXQgPSB3bTExMzNfZXYxX2luaXQsCiAJLm9wcyA9ICZ3bTExMzNfZXYxX29wcywKIAkuc3ltbWV0cmljX3JhdGVzID0gMSwKKwkuZGFpX2ZtdCA9IFNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJICAgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIHdtMTEzM19ldjEgPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZ2VuZXJpYy9zaW1wbGUtY2FyZC5jIGIvc291bmQvc29jL2dlbmVyaWMvc2ltcGxlLWNhcmQuYwppbmRleCBmYjkyNDBmLi5mN2M2NzM0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZ2VuZXJpYy9zaW1wbGUtY2FyZC5jCisrKyBiL3NvdW5kL3NvYy9nZW5lcmljL3NpbXBsZS1jYXJkLmMKQEAgLTM5LDYgKzM5LDM3IEBACiAjZGVmaW5lIHNpbXBsZV9wcml2X3RvX2xpbmsocHJpdiwgaSkgKChwcml2KS0+c25kX2NhcmQuZGFpX2xpbmsgKyBpKQogI2RlZmluZSBzaW1wbGVfcHJpdl90b19wcm9wcyhwcml2LCBpKSAoKHByaXYpLT5kYWlfcHJvcHMgKyBpKQogCitzdGF0aWMgaW50IGFzb2Nfc2ltcGxlX2NhcmRfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNpbXBsZV9jYXJkX2RhdGEgKnByaXYgPQlzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEocnRkLT5jYXJkKTsKKwlzdHJ1Y3Qgc2ltcGxlX2RhaV9wcm9wcyAqZGFpX3Byb3BzID0KKwkJJnByaXYtPmRhaV9wcm9wc1tydGQgLSBydGQtPmNhcmQtPnJ0ZF07CisJaW50IHJldDsKKworCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkYWlfcHJvcHMtPmNwdV9kYWkuY2xrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCQorCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShkYWlfcHJvcHMtPmNvZGVjX2RhaS5jbGspOworCWlmIChyZXQpCisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShkYWlfcHJvcHMtPmNwdV9kYWkuY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFzb2Nfc2ltcGxlX2NhcmRfc2h1dGRvd24oc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzaW1wbGVfY2FyZF9kYXRhICpwcml2ID0Jc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKHJ0ZC0+Y2FyZCk7CisJc3RydWN0IHNpbXBsZV9kYWlfcHJvcHMgKmRhaV9wcm9wcyA9CisJCSZwcml2LT5kYWlfcHJvcHNbcnRkIC0gcnRkLT5jYXJkLT5ydGRdOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRhaV9wcm9wcy0+Y3B1X2RhaS5jbGspOworCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRhaV9wcm9wcy0+Y29kZWNfZGFpLmNsayk7Cit9CisKIHN0YXRpYyBpbnQgYXNvY19zaW1wbGVfY2FyZF9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCiAJCQkJICAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CkBAIC01OCw2ICs4OSw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19vcHMgYXNvY19zaW1wbGVfY2FyZF9vcHMgPSB7CisJLnN0YXJ0dXAgPSBhc29jX3NpbXBsZV9jYXJkX3N0YXJ0dXAsCisJLnNodXRkb3duID0gYXNvY19zaW1wbGVfY2FyZF9zaHV0ZG93biwKIAkuaHdfcGFyYW1zID0gYXNvY19zaW1wbGVfY2FyZF9od19wYXJhbXMsCiB9OwogCkBAIC0yMTksNiArMjUyLDcgQEAKIAkJfQogCiAJCWRhaS0+c3lzY2xrID0gY2xrX2dldF9yYXRlKGNsayk7CisJCWRhaS0+Y2xrID0gY2xrOwogCX0gZWxzZSBpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAic3lzdGVtLWNsb2NrLWZyZXF1ZW5jeSIsICZ2YWwpKSB7CiAJCWRhaS0+c3lzY2xrID0gdmFsOwogCX0gZWxzZSB7CkBAIC00NTIsOSArNDg2LDggQEAKIH0KIAogLyogRGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZGV2aWNlIG5vZGVzICovCi1zdGF0aWMgaW50IGFzb2Nfc2ltcGxlX2NhcmRfdW5yZWYoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgYXNvY19zaW1wbGVfY2FyZF91bnJlZihzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkKQogewotCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayAqZGFpX2xpbms7CiAJaW50IG51bV9saW5rczsKIApAQCAtNTU2LDcgKzU4OSw3IEBACiAJCXJldHVybiByZXQ7CiAKIGVycjoKLQlhc29jX3NpbXBsZV9jYXJkX3VucmVmKHBkZXYpOworCWFzb2Nfc2ltcGxlX2NhcmRfdW5yZWYoJnByaXYtPnNuZF9jYXJkKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC01NzIsNyArNjA1LDcgQEAKIAkJc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3MoJnNpbXBsZV9jYXJkX21pY19qYWNrLCAxLAogCQkJCQkmc2ltcGxlX2NhcmRfbWljX2phY2tfZ3Bpbyk7CiAKLQlyZXR1cm4gYXNvY19zaW1wbGVfY2FyZF91bnJlZihwZGV2KTsKKwlyZXR1cm4gYXNvY19zaW1wbGVfY2FyZF91bnJlZihjYXJkKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgYXNvY19zaW1wbGVfb2ZfbWF0Y2hbXSA9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9LY29uZmlnIGIvc291bmQvc29jL2ludGVsL0tjb25maWcKaW5kZXggZjg2ZGUxMi4uZWUwM2RiZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL0tjb25maWcKKysrIGIvc291bmQvc29jL2ludGVsL0tjb25maWcKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogY29uZmlnIFNORF9TT0NfSU5URUxfSEFTV0VMTF9NQUNICiAJdHJpc3RhdGUgIkFTb0MgQXVkaW8gRFNQIHN1cHBvcnQgZm9yIEludGVsIEhhc3dlbGwgTHlueHBvaW50IgotCWRlcGVuZHMgb24gU05EX1NPQ19JTlRFTF9TU1QgJiYgWDg2X0lOVEVMX0xQU1MgJiYgSTJDICYmIFxcCisJZGVwZW5kcyBvbiBTTkRfU09DX0lOVEVMX1NTVCAmJiBYODZfSU5URUxfTFBTUyAmJiBJMkMgJiYgXAogCQkgICBJMkNfREVTSUdOV0FSRV9QTEFURk9STQogCXNlbGVjdCBTTkRfU09DX0lOVEVMX0hBU1dFTEwKIAlzZWxlY3QgU05EX1NPQ19SVDU2NDAKQEAgLTc2LDcgKzc2LDcgQEAKIAogY29uZmlnIFNORF9TT0NfSU5URUxfQlJPQURXRUxMX01BQ0gKIAl0cmlzdGF0ZSAiQVNvQyBBdWRpbyBEU1Agc3VwcG9ydCBmb3IgSW50ZWwgQnJvYWR3ZWxsIFdpbGRjYXRwb2ludCIKLQlkZXBlbmRzIG9uIFNORF9TT0NfSU5URUxfU1NUICYmIFg4Nl9JTlRFTF9MUFNTICYmIERXX0RNQUMgJiYgXFwKKwlkZXBlbmRzIG9uIFNORF9TT0NfSU5URUxfU1NUICYmIFg4Nl9JTlRFTF9MUFNTICYmIERXX0RNQUMgJiYgXAogCQkgICBJMkNfREVTSUdOV0FSRV9QTEFURk9STQogCXNlbGVjdCBTTkRfU09DX0lOVEVMX0hBU1dFTEwKIAlzZWxlY3QgU05EX0NPTVBSRVNTX09GRkxPQUQKQEAgLTExMCwzICsxMTAsMTQgQEAKICAgICAgICAgICBwbGF0Zm9ybXMgd2l0aCBSVDU2NzIgYXVkaW8gY29kZWMuCiAgICAgICAgICAgU2F5IFkgaWYgeW91IGhhdmUgc3VjaCBhIGRldmljZQogICAgICAgICAgIElmIHVuc3VyZSBzZWxlY3QgIk4iLgorCitjb25maWcgU05EX1NPQ19JTlRFTF9DSFRfQlNXX1JUNTY0NV9NQUNICisJdHJpc3RhdGUgIkFTb0MgQXVkaW8gZHJpdmVyIGZvciBJbnRlbCBDaGVycnl0cmFpbCAmIEJyYXN3ZWxsIHdpdGggUlQ1NjQ1IGNvZGVjIgorCWRlcGVuZHMgb24gWDg2X0lOVEVMX0xQU1MKKwlzZWxlY3QgU05EX1NPQ19SVDU2NDUKKwlzZWxlY3QgU05EX1NTVF9NRkxEX1BMQVRGT1JNCisJc2VsZWN0IFNORF9TU1RfSVBDX0FDUEkKKwloZWxwCisJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgQVNvQyBtYWNoaW5lIGRyaXZlciBmb3IgSW50ZWwoUikgQ2hlcnJ5dHJhaWwgJiBCcmFzd2VsbAorCSAgcGxhdGZvcm1zIHdpdGggUlQ1NjQ1IGF1ZGlvIGNvZGVjLgorCSAgSWYgdW5zdXJlIHNlbGVjdCAiTiIuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvTWFrZWZpbGUgYi9zb3VuZC9zb2MvaW50ZWwvTWFrZWZpbGUKaW5kZXggZTkyOGVjMy4uYThlNTNjNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9NYWtlZmlsZQpAQCAtMjgsNiArMjgsNyBAQAogc25kLXNvYy1zc3QtYnJvYWR3ZWxsLW9ianMgOj0gYnJvYWR3ZWxsLm8KIHNuZC1zb2Mtc3N0LWJ5dGNyLWRwY20tcnQ1NjQwLW9ianMgOj0gYnl0Y3JfZHBjbV9ydDU2NDAubwogc25kLXNvYy1zc3QtY2h0LWJzdy1ydDU2NzItb2JqcyA6PSBjaHRfYnN3X3J0NTY3Mi5vCitzbmQtc29jLXNzdC1jaHQtYnN3LXJ0NTY0NS1vYmpzIDo9IGNodF9ic3dfcnQ1NjQ1Lm8KIAogb2JqLSQoQ09ORklHX1NORF9TT0NfSU5URUxfSEFTV0VMTF9NQUNIKSArPSBzbmQtc29jLXNzdC1oYXN3ZWxsLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0lOVEVMX0JZVF9SVDU2NDBfTUFDSCkgKz0gc25kLXNvYy1zc3QtYnl0LXJ0NTY0MC1tYWNoLm8KQEAgLTM1LDYgKzM2LDcgQEAKIG9iai0kKENPTkZJR19TTkRfU09DX0lOVEVMX0JST0FEV0VMTF9NQUNIKSArPSBzbmQtc29jLXNzdC1icm9hZHdlbGwubwogb2JqLSQoQ09ORklHX1NORF9TT0NfSU5URUxfQllUQ1JfUlQ1NjQwX01BQ0gpICs9IHNuZC1zb2Mtc3N0LWJ5dGNyLWRwY20tcnQ1NjQwLm8KIG9iai0kKENPTkZJR19TTkRfU09DX0lOVEVMX0NIVF9CU1dfUlQ1NjcyX01BQ0gpICs9IHNuZC1zb2Mtc3N0LWNodC1ic3ctcnQ1NjcyLm8KK29iai0kKENPTkZJR19TTkRfU09DX0lOVEVMX0NIVF9CU1dfUlQ1NjQ1X01BQ0gpICs9IHNuZC1zb2Mtc3N0LWNodC1ic3ctcnQ1NjQ1Lm8KIAogIyBEU1AgZHJpdmVyCiBvYmotJChDT05GSUdfU05EX1NTVF9JUEMpICs9IHNzdC8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9icm9hZHdlbGwuYyBiL3NvdW5kL3NvYy9pbnRlbC9icm9hZHdlbGwuYwppbmRleCA3Y2Y5NWQ1Li45Y2Y3ZDAxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvYnJvYWR3ZWxsLmMKKysrIGIvc291bmQvc29jL2ludGVsL2Jyb2Fkd2VsbC5jCkBAIC0xNDAsOCArMTQwLDYgQEAKIAogc3RhdGljIGludCBicm9hZHdlbGxfcnRkX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwotCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlzdHJ1Y3Qgc3N0X3BkYXRhICpwZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEocnRkLT5wbGF0Zm9ybS0+ZGV2KTsKIAlzdHJ1Y3Qgc3N0X2hzdyAqYnJvYWR3ZWxsID0gcGRhdGEtPmRzcDsKIAlpbnQgcmV0OwpAQCAtMTU1LDE0ICsxNTMsNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCS8qIGFsd2F5cyBjb25uZWN0ZWQgLSBjaGVjayBIUCBmb3IgamFjayBkZXRlY3QgKi8KLQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiSGVhZHBob25lIEphY2siKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiU3BlYWtlciIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJNaWMgSmFjayIpOwotCXNuZF9zb2NfZGFwbV9lbmFibGVfcGluKGRhcG0sICJMaW5lIEphY2siKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiRE1JQzEiKTsKLQlzbmRfc29jX2RhcG1fZW5hYmxlX3BpbihkYXBtLCAiRE1JQzIiKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvYnl0LXJ0NTY0MC5jIGIvc291bmQvc29jL2ludGVsL2J5dC1ydDU2NDAuYwppbmRleCAwY2JhNzgzLi4zNTRlYWFkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvYnl0LXJ0NTY0MC5jCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9ieXQtcnQ1NjQwLmMKQEAgLTEzMiw3ICsxMzIsNiBAQAogewogCWludCByZXQ7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnVudGltZS0+Y29kZWM7Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwogCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBydW50aW1lLT5jYXJkOwogCWNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgKmN1c3RvbV9tYXA7CiAJaW50IG51bV9yb3V0ZXM7CkBAIC0xNjEsNyArMTYwLDcgQEAKIAkJbnVtX3JvdXRlcyA9IEFSUkFZX1NJWkUoYnl0X3J0NTY0MF9pbnRtaWNfZG1pYzFfbWFwKTsKIAl9CiAKLQlyZXQgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcyhkYXBtLCBjdXN0b21fbWFwLCBudW1fcm91dGVzKTsKKwlyZXQgPSBzbmRfc29jX2RhcG1fYWRkX3JvdXRlcygmY2FyZC0+ZGFwbSwgY3VzdG9tX21hcCwgbnVtX3JvdXRlcyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTcxLDEzICsxNzAsOCBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoZGFwbSwgIkhQT0wiKTsKLQlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoZGFwbSwgIkhQT1IiKTsKLQotCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZChkYXBtLCAiU1BPTFAiKTsKLQlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoZGFwbSwgIlNQT0xOIik7Ci0Jc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKGRhcG0sICJTUE9SUCIpOwotCXNuZF9zb2NfZGFwbV9pZ25vcmVfc3VzcGVuZChkYXBtLCAiU1BPUk4iKTsKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoJmNhcmQtPmRhcG0sICJIZWFkcGhvbmUiKTsKKwlzbmRfc29jX2RhcG1faWdub3JlX3N1c3BlbmQoJmNhcmQtPmRhcG0sICJTcGVha2VyIik7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL2J5dGNyX2RwY21fcnQ1NjQwLmMgYi9zb3VuZC9zb2MvaW50ZWwvYnl0Y3JfZHBjbV9ydDU2NDAuYwppbmRleCBlZWYwYzU2Li41OTMwODYyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvYnl0Y3JfZHBjbV9ydDU2NDAuYworKysgYi9zb3VuZC9zb2MvaW50ZWwvYnl0Y3JfZHBjbV9ydDU2NDAuYwpAQCAtMjE1LDcgKzIxNSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9ieXRfbWNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCQkubmFtZSA9ICJieXR0MTAwX3J0NTY0MCIsCiAJCS5wbSA9ICZzbmRfc29jX3BtX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL2NodF9ic3dfcnQ1NjQ1LmMgYi9zb3VuZC9zb2MvaW50ZWwvY2h0X2Jzd19ydDU2NDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDI5NjE3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL2ludGVsL2NodF9ic3dfcnQ1NjQ1LmMKQEAgLTAsMCArMSwzMjYgQEAKKy8qCisgKiAgY2h0LWJzdy1ydDU2NDUuYyAtIEFTb2MgTWFjaGluZSBkcml2ZXIgZm9yIEludGVsIENoZXJyeXZpZXctYmFzZWQgcGxhdGZvcm1zCisgKiAgICAgICAgICAgICAgICAgICAgIENoZXJyeXRyYWlsIGFuZCBCcmFzd2VsbCwgd2l0aCBSVDU2NDUgY29kZWMuCisgKgorICogIENvcHlyaWdodCAoQykgMjAxNSBJbnRlbCBDb3JwCisgKiAgQXV0aG9yOiBGYW5nLCBZYW5nIEEgPHlhbmcuYS5mYW5nQGludGVsLmNvbT4KKyAqCSAgICAgICAgTixIYXJzaGFwcml5YSA8aGFyc2hhcHJpeWEubkBpbnRlbC5jb20+CisgKiAgVGhpcyBmaWxlIGlzIG1vZGlmaWVkIGZyb20gY2h0X2Jzd19ydDU2NzIuYworICogIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKyNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+CisjaW5jbHVkZSAiLi4vY29kZWNzL3J0NTY0NS5oIgorI2luY2x1ZGUgInNzdC1hdG9tLWNvbnRyb2xzLmgiCisKKyNkZWZpbmUgQ0hUX1BMQVRfQ0xLXzNfSFoJMTkyMDAwMDAKKyNkZWZpbmUgQ0hUX0NPREVDX0RBSQkicnQ1NjQ1LWFpZjEiCisKK3N0cnVjdCBjaHRfbWNfcHJpdmF0ZSB7CisJc3RydWN0IHNuZF9zb2NfamFjayBocF9qYWNrOworCXN0cnVjdCBzbmRfc29jX2phY2sgbWljX2phY2s7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzbmRfc29jX2RhaSAqY2h0X2dldF9jb2RlY19kYWkoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fcnRkOyBpKyspIHsKKwkJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZDsKKworCQlydGQgPSBjYXJkLT5ydGQgKyBpOworCQlpZiAoIXN0cm5jbXAocnRkLT5jb2RlY19kYWktPm5hbWUsIENIVF9DT0RFQ19EQUksCisJCQkgICAgIHN0cmxlbihDSFRfQ09ERUNfREFJKSkpCisJCQlyZXR1cm4gcnRkLT5jb2RlY19kYWk7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IHBsYXRmb3JtX2Nsb2NrX2NvbnRyb2woc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmssIGludCAgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gdy0+ZGFwbTsKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gZGFwbS0+Y2FyZDsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaTsKKwlpbnQgcmV0OworCisJY29kZWNfZGFpID0gY2h0X2dldF9jb2RlY19kYWkoY2FyZCk7CisJaWYgKCFjb2RlY19kYWkpIHsKKwkJZGV2X2VycihjYXJkLT5kZXYsICJDb2RlYyBkYWkgbm90IGZvdW5kOyBVbmFibGUgdG8gc2V0IHBsYXRmb3JtIGNsb2NrXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKCFTTkRfU09DX0RBUE1fRVZFTlRfT0ZGKGV2ZW50KSkKKwkJcmV0dXJuIDA7CisKKwkvKiBTZXQgY29kZWMgc3lzY2xrIHNvdXJjZSB0byBpdHMgaW50ZXJuYWwgY2xvY2sgYmVjYXVzZSBjb2RlYyBQTEwgd2lsbAorCSAqIGJlIG9mZiB3aGVuIGlkbGUgYW5kIE1DTEsgd2lsbCBhbHNvIGJlIG9mZiBieSBBQ1BJIHdoZW4gY29kZWMgaXMKKwkgKiBydW50aW1lIHN1c3BlbmRlZC4gQ29kZWMgbmVlZHMgY2xvY2sgZm9yIGphY2sgZGV0ZWN0aW9uIGFuZCBidXR0b24KKwkgKiBwcmVzcy4KKwkgKi8KKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgUlQ1NjQ1X1NDTEtfU19SQ0NMSywKKwkJCTAsIFNORF9TT0NfQ0xPQ0tfSU4pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY2FyZC0+ZGV2LCAiY2FuJ3Qgc2V0IGNvZGVjIHN5c2NsazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBjaHRfZGFwbV93aWRnZXRzW10gPSB7CisJU05EX1NPQ19EQVBNX0hQKCJIZWFkcGhvbmUiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJIZWFkc2V0IE1pYyIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIkludCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fU1BLKCJFeHQgU3BrIiwgTlVMTCksCisJU05EX1NPQ19EQVBNX1NVUFBMWSgiUGxhdGZvcm0gQ2xvY2siLCBTTkRfU09DX05PUE0sIDAsIDAsCisJCQlwbGF0Zm9ybV9jbG9ja19jb250cm9sLCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgY2h0X2F1ZGlvX21hcFtdID0geworCXsiSU4xUCIsIE5VTEwsICJIZWFkc2V0IE1pYyJ9LAorCXsiSU4xTiIsIE5VTEwsICJIZWFkc2V0IE1pYyJ9LAorCXsiRE1JQyBMMSIsIE5VTEwsICJJbnQgTWljIn0sCisJeyJETUlDIFIxIiwgTlVMTCwgIkludCBNaWMifSwKKwl7IkhlYWRwaG9uZSIsIE5VTEwsICJIUE9MIn0sCisJeyJIZWFkcGhvbmUiLCBOVUxMLCAiSFBPUiJ9LAorCXsiRXh0IFNwayIsIE5VTEwsICJTUE9MIn0sCisJeyJFeHQgU3BrIiwgTlVMTCwgIlNQT1IifSwKKwl7IkFJRjEgUGxheWJhY2siLCBOVUxMLCAic3NwMiBUeCJ9LAorCXsic3NwMiBUeCIsIE5VTEwsICJjb2RlY19vdXQwIn0sCisJeyJzc3AyIFR4IiwgTlVMTCwgImNvZGVjX291dDEifSwKKwl7ImNvZGVjX2luMCIsIE5VTEwsICJzc3AyIFJ4IiB9LAorCXsiY29kZWNfaW4xIiwgTlVMTCwgInNzcDIgUngiIH0sCisJeyJzc3AyIFJ4IiwgTlVMTCwgIkFJRjEgQ2FwdHVyZSJ9LAorCXsiSGVhZHBob25lIiwgTlVMTCwgIlBsYXRmb3JtIENsb2NrIn0sCisJeyJIZWFkc2V0IE1pYyIsIE5VTEwsICJQbGF0Zm9ybSBDbG9jayJ9LAorCXsiSW50IE1pYyIsIE5VTEwsICJQbGF0Zm9ybSBDbG9jayJ9LAorCXsiRXh0IFNwayIsIE5VTEwsICJQbGF0Zm9ybSBDbG9jayJ9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGNodF9tY19jb250cm9sc1tdID0geworCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhlYWRwaG9uZSIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhlYWRzZXQgTWljIiksCisJU09DX0RBUE1fUElOX1NXSVRDSCgiSW50IE1pYyIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkV4dCBTcGsiKSwKK307CisKK3N0YXRpYyBpbnQgY2h0X2FpZjFfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICBzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKKwlpbnQgcmV0OworCisJLyogc2V0IGNvZGVjIFBMTCBzb3VyY2UgdG8gdGhlIDE5LjJNSHogcGxhdGZvcm0gY2xvY2sgKE1DTEspICovCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3BsbChjb2RlY19kYWksIDAsIFJUNTY0NV9QTEwxX1NfTUNMSywKKwkJCQkgIENIVF9QTEFUX0NMS18zX0haLCBwYXJhbXNfcmF0ZShwYXJhbXMpICogNTEyKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHJ0ZC0+ZGV2LCAiY2FuJ3Qgc2V0IGNvZGVjIHBsbDogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFJUNTY0NV9TQ0xLX1NfUExMMSwKKwkJCQlwYXJhbXNfcmF0ZShwYXJhbXMpICogNTEyLCBTTkRfU09DX0NMT0NLX0lOKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHJ0ZC0+ZGV2LCAiY2FuJ3Qgc2V0IGNvZGVjIHN5c2NsazogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2h0X2NvZGVjX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydW50aW1lLT5jb2RlYzsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ1bnRpbWUtPmNvZGVjX2RhaTsKKwlzdHJ1Y3QgY2h0X21jX3ByaXZhdGUgKmN0eCA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShydW50aW1lLT5jYXJkKTsKKworCS8qIFNlbGVjdCBjbGtfaTJzMV9hc3JjIGFzIEFTUkMgY2xvY2sgc291cmNlICovCisJcnQ1NjQ1X3NlbF9hc3JjX2Nsa19zcmMoY29kZWMsCisJCQkJUlQ1NjQ1X0RBX1NURVJFT19GSUxURVIgfAorCQkJCVJUNTY0NV9EQV9NT05PX0xfRklMVEVSIHwKKwkJCQlSVDU2NDVfREFfTU9OT19SX0ZJTFRFUiB8CisJCQkJUlQ1NjQ1X0FEX1NURVJFT19GSUxURVIsCisJCQkJUlQ1NjQ1X0NMS19TRUxfSTJTMV9BU1JDKTsKKworCS8qIFRETSA0IHNsb3RzIDI0IGJpdCwgc2V0IFJ4ICYgVHggYml0bWFzayB0byA0IGFjdGl2ZSBzbG90cyAqLworCXJldCA9IHNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChjb2RlY19kYWksIDB4RiwgMHhGLCA0LCAyNCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihydW50aW1lLT5kZXYsICJjYW4ndCBzZXQgY29kZWMgVERNIHNsb3QgJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gc25kX3NvY19qYWNrX25ldyhjb2RlYywgIkhlYWRwaG9uZSBKYWNrIiwKKwkJCQlTTkRfSkFDS19IRUFEUEhPTkUsCisJCQkJJmN0eC0+aHBfamFjayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHJ1bnRpbWUtPmRldiwgIkhQIGphY2sgY3JlYXRpb24gZmFpbGVkICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IHNuZF9zb2NfamFja19uZXcoY29kZWMsICJNaWMgSmFjayIsCisJCQkJU05EX0pBQ0tfTUlDUk9QSE9ORSwKKwkJCQkmY3R4LT5taWNfamFjayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHJ1bnRpbWUtPmRldiwgIk1pYyBqYWNrIGNyZWF0aW9uIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlydDU2NDVfc2V0X2phY2tfZGV0ZWN0KGNvZGVjLCAmY3R4LT5ocF9qYWNrLCAmY3R4LT5taWNfamFjayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNodF9jb2RlY19maXh1cChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkLAorCQkJICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfaW50ZXJ2YWwgKnJhdGUgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsCisJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUkFURSk7CisJc3RydWN0IHNuZF9pbnRlcnZhbCAqY2hhbm5lbHMgPSBod19wYXJhbV9pbnRlcnZhbChwYXJhbXMsCisJCQkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fQ0hBTk5FTFMpOworCisJLyogVGhlIERTUCB3aWxsIGNvdmVydCB0aGUgRkUgcmF0ZSB0byA0OGssIHN0ZXJlbywgMjRiaXRzICovCisJcmF0ZS0+bWluID0gcmF0ZS0+bWF4ID0gNDgwMDA7CisJY2hhbm5lbHMtPm1pbiA9IGNoYW5uZWxzLT5tYXggPSAyOworCisJLyogc2V0IFNTUDIgdG8gMjQtYml0ICovCisJc25kX21hc2tfc2V0KCZwYXJhbXMtPm1hc2tzW1NORFJWX1BDTV9IV19QQVJBTV9GT1JNQVQgLQorCQkJCSAgICBTTkRSVl9QQ01fSFdfUEFSQU1fRklSU1RfTUFTS10sCisJCQkJICAgIFNORFJWX1BDTV9GT1JNQVRfUzI0X0xFKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCByYXRlc180ODAwMFtdID0geworCTQ4MDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfbGlzdCBjb25zdHJhaW50c180ODAwMCA9IHsKKwkuY291bnQgPSBBUlJBWV9TSVpFKHJhdGVzXzQ4MDAwKSwKKwkubGlzdCAgPSByYXRlc180ODAwMCwKK307CisKK3N0YXRpYyBpbnQgY2h0X2FpZjFfc3RhcnR1cChzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlyZXR1cm4gc25kX3BjbV9od19jb25zdHJhaW50X2xpc3Qoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAorCQkJU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCisJCQkmY29uc3RyYWludHNfNDgwMDApOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGNodF9haWYxX29wcyA9IHsKKwkuc3RhcnR1cCA9IGNodF9haWYxX3N0YXJ0dXAsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGNodF9iZV9zc3AyX29wcyA9IHsKKwkuaHdfcGFyYW1zID0gY2h0X2FpZjFfaHdfcGFyYW1zLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGNodF9kYWlsaW5rW10gPSB7CisJW01FUlJfRFBDTV9BVURJT10gPSB7CisJCS5uYW1lID0gIkF1ZGlvIFBvcnQiLAorCQkuc3RyZWFtX25hbWUgPSAiQXVkaW8iLAorCQkuY3B1X2RhaV9uYW1lID0gIm1lZGlhLWNwdS1kYWkiLAorCQkuY29kZWNfZGFpX25hbWUgPSAic25kLXNvYy1kdW1teS1kYWkiLAorCQkuY29kZWNfbmFtZSA9ICJzbmQtc29jLWR1bW15IiwKKwkJLnBsYXRmb3JtX25hbWUgPSAic3N0LW1mbGQtcGxhdGZvcm0iLAorCQkuaWdub3JlX3N1c3BlbmQgPSAxLAorCQkuZHluYW1pYyA9IDEsCisJCS5kcGNtX3BsYXliYWNrID0gMSwKKwkJLmRwY21fY2FwdHVyZSA9IDEsCisJCS5vcHMgPSAmY2h0X2FpZjFfb3BzLAorCX0sCisJW01FUlJfRFBDTV9DT01QUl0gPSB7CisJCS5uYW1lID0gIkNvbXByZXNzZWQgUG9ydCIsCisJCS5zdHJlYW1fbmFtZSA9ICJDb21wcmVzcyIsCisJCS5jcHVfZGFpX25hbWUgPSAiY29tcHJlc3MtY3B1LWRhaSIsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJzbmQtc29jLWR1bW15LWRhaSIsCisJCS5jb2RlY19uYW1lID0gInNuZC1zb2MtZHVtbXkiLAorCQkucGxhdGZvcm1fbmFtZSA9ICJzc3QtbWZsZC1wbGF0Zm9ybSIsCisJfSwKKwkvKiBDT0RFQzwtPkNPREVDIGxpbmsgKi8KKwkvKiBiYWNrIGVuZHMgKi8KKwl7CisJCS5uYW1lID0gIlNTUDItQ29kZWMiLAorCQkuYmVfaWQgPSAxLAorCQkuY3B1X2RhaV9uYW1lID0gInNzcDItcG9ydCIsCisJCS5wbGF0Zm9ybV9uYW1lID0gInNzdC1tZmxkLXBsYXRmb3JtIiwKKwkJLm5vX3BjbSA9IDEsCisJCS5jb2RlY19kYWlfbmFtZSA9ICJydDU2NDUtYWlmMSIsCisJCS5jb2RlY19uYW1lID0gImkyYy0xMEVDNTY0NTowMCIsCisJCS5kYWlfZm10ID0gU05EX1NPQ19EQUlGTVRfRFNQX0IgfCBTTkRfU09DX0RBSUZNVF9JQl9ORgorCQkJCQl8IFNORF9TT0NfREFJRk1UX0NCU19DRlMsCisJCS5pbml0ID0gY2h0X2NvZGVjX2luaXQsCisJCS5iZV9od19wYXJhbXNfZml4dXAgPSBjaHRfY29kZWNfZml4dXAsCisJCS5pZ25vcmVfc3VzcGVuZCA9IDEsCisJCS5kcGNtX3BsYXliYWNrID0gMSwKKwkJLmRwY21fY2FwdHVyZSA9IDEsCisJCS5vcHMgPSAmY2h0X2JlX3NzcDJfb3BzLAorCX0sCit9OworCisvKiBTb0MgY2FyZCAqLworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY19jYXJkX2NodCA9IHsKKwkubmFtZSA9ICJjaHRydDU2NDUiLAorCS5kYWlfbGluayA9IGNodF9kYWlsaW5rLAorCS5udW1fbGlua3MgPSBBUlJBWV9TSVpFKGNodF9kYWlsaW5rKSwKKwkuZGFwbV93aWRnZXRzID0gY2h0X2RhcG1fd2lkZ2V0cywKKwkubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUoY2h0X2RhcG1fd2lkZ2V0cyksCisJLmRhcG1fcm91dGVzID0gY2h0X2F1ZGlvX21hcCwKKwkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShjaHRfYXVkaW9fbWFwKSwKKwkuY29udHJvbHMgPSBjaHRfbWNfY29udHJvbHMsCisJLm51bV9jb250cm9scyA9IEFSUkFZX1NJWkUoY2h0X21jX2NvbnRyb2xzKSwKK307CisKK3N0YXRpYyBpbnQgc25kX2NodF9tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXRfdmFsID0gMDsKKwlzdHJ1Y3QgY2h0X21jX3ByaXZhdGUgKmRydjsKKworCWRydiA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmRydiksIEdGUF9BVE9NSUMpOworCWlmICghZHJ2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNuZF9zb2NfY2FyZF9jaHQuZGV2ID0gJnBkZXYtPmRldjsKKwlzbmRfc29jX2NhcmRfc2V0X2RydmRhdGEoJnNuZF9zb2NfY2FyZF9jaHQsIGRydik7CisJcmV0X3ZhbCA9IGRldm1fc25kX3NvY19yZWdpc3Rlcl9jYXJkKCZwZGV2LT5kZXYsICZzbmRfc29jX2NhcmRfY2h0KTsKKwlpZiAocmV0X3ZhbCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkic25kX3NvY19yZWdpc3Rlcl9jYXJkIGZhaWxlZCAlZFxuIiwgcmV0X3ZhbCk7CisJCXJldHVybiByZXRfdmFsOworCX0KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCAmc25kX3NvY19jYXJkX2NodCk7CisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9jaHRfbWNfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImNodC1ic3ctcnQ1NjQ1IiwKKwkJLnBtID0gJnNuZF9zb2NfcG1fb3BzLAorCX0sCisJLnByb2JlID0gc25kX2NodF9tY19wcm9iZSwKK307CisKK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoc25kX2NodF9tY19kcml2ZXIpCisKK01PRFVMRV9ERVNDUklQVElPTigiQVNvQyBJbnRlbChSKSBCcmFzd2VsbCBNYWNoaW5lIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiRmFuZywgWWFuZyBBLE4sSGFyc2hhcHJpeWEiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06Y2h0LWJzdy1ydDU2NDUiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9jaHRfYnN3X3J0NTY3Mi5jIGIvc291bmQvc29jL2ludGVsL2NodF9ic3dfcnQ1NjcyLmMKaW5kZXggOWI4YjU2MS4uZmYwMTY2MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL2NodF9ic3dfcnQ1NjcyLmMKKysrIGIvc291bmQvc29jL2ludGVsL2NodF9ic3dfcnQ1NjcyLmMKQEAgLTE0MCw2ICsxNDAsNyBAQAogewogCWludCByZXQ7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydW50aW1lLT5jb2RlY19kYWk7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gY29kZWNfZGFpLT5jb2RlYzsKIAogCS8qIFRETSA0IHNsb3RzIDI0IGJpdCwgc2V0IFJ4ICYgVHggYml0bWFzayB0byA0IGFjdGl2ZSBzbG90cyAqLwogCXJldCA9IHNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdChjb2RlY19kYWksIDB4RiwgMHhGLCA0LCAyNCk7CkBAIC0xNDgsNiArMTQ5LDE5IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJLyogU2VsZWN0IGNvZGVjIEFTUkMgY2xvY2sgc291cmNlIHRvIHRyYWNrIEkyUzEgY2xvY2ssIGJlY2F1c2UgY29kZWMKKwkgKiBpcyBpbiBzbGF2ZSBtb2RlIGFuZCAxMDBmcyBJMlMgZm9ybWF0IChCQ0xLID0gMTAwICogTFJDTEspIGNhbm5vdAorCSAqIGJlIHN1cHBvcnRlZCBieSBSVDU2NzIuIE90aGVyd2lzZSwgQVNSQyB3aWxsIGJlIGRpc2FibGVkIGFuZCBjYXVzZQorCSAqIG5vaXNlLgorCSAqLworCXJ0NTY3MF9zZWxfYXNyY19jbGtfc3JjKGNvZGVjLAorCQkJCVJUNTY3MF9EQV9TVEVSRU9fRklMVEVSCisJCQkJfCBSVDU2NzBfREFfTU9OT19MX0ZJTFRFUgorCQkJCXwgUlQ1NjcwX0RBX01PTk9fUl9GSUxURVIKKwkJCQl8IFJUNTY3MF9BRF9TVEVSRU9fRklMVEVSCisJCQkJfCBSVDU2NzBfQURfTU9OT19MX0ZJTFRFUgorCQkJCXwgUlQ1NjcwX0FEX01PTk9fUl9GSUxURVIsCisJCQkJUlQ1NjcwX0NMS19TRUxfSTJTMV9BU1JDKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjcwLDcgKzI4NCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNuZF9jaHRfbWNfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5vd25lciA9IFRISVNfTU9EVUxFLAogCQkubmFtZSA9ICJjaHQtYnN3LXJ0NTY3MiIsCiAJCS5wbSA9ICZzbmRfc29jX3BtX29wcywKIAl9LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL3NzdC1iYXl0cmFpbC1wY20uYyBiL3NvdW5kL3NvYy9pbnRlbC9zc3QtYmF5dHJhaWwtcGNtLmMKaW5kZXggM2JiNjI4OC4uMjI0YzQ5YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL3NzdC1iYXl0cmFpbC1wY20uYworKysgYi9zb3VuZC9zb2MvaW50ZWwvc3N0LWJheXRyYWlsLXBjbS5jCkBAIC0zMjAsMTEgKzMyMCw2IEBACiAJLm1tYXAJCT0gc3N0X2J5dF9wY21fbW1hcCwKIH07CiAKLXN0YXRpYyB2b2lkIHNzdF9ieXRfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKLXsKLQlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9mcmVlX2Zvcl9hbGwocGNtKTsKLX0KLQogc3RhdGljIGludCBzc3RfYnl0X3BjbV9uZXcoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3BjbSAqcGNtID0gcnRkLT5wY207CkBAIC00MDMsNyArMzk4LDYgQEAKIAkucmVtb3ZlCQk9IHNzdF9ieXRfcGNtX3JlbW92ZSwKIAkub3BzCQk9ICZzc3RfYnl0X3BjbV9vcHMsCiAJLnBjbV9uZXcJPSBzc3RfYnl0X3BjbV9uZXcsCi0JLnBjbV9mcmVlCT0gc3N0X2J5dF9wY21fZnJlZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVyIGJ5dF9kYWlfY29tcG9uZW50ID0gewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL3NzdC1kc3AuYyBiL3NvdW5kL3NvYy9pbnRlbC9zc3QtZHNwLmMKaW5kZXggODZlNDEwOC4uNjRlOTQyMSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL3NzdC1kc3AuYworKysgYi9zb3VuZC9zb2MvaW50ZWwvc3N0LWRzcC5jCkBAIC00MTAsOCArNDEwLDcgQEAKIAlpZiAoc3N0LT5vcHMtPmZyZWUpCiAJCXNzdC0+b3BzLT5mcmVlKHNzdCk7CiAKLQlpZiAoc3N0LT5kbWEpCi0JCXNzdF9kbWFfZnJlZShzc3QtPmRtYSk7CisJc3N0X2RtYV9mcmVlKHNzdC0+ZG1hKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNzdF9kc3BfZnJlZSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9zc3QtZmlybXdhcmUuYyBiL3NvdW5kL3NvYy9pbnRlbC9zc3QtZmlybXdhcmUuYwppbmRleCBlZjJlOGI1Li41ZjcxZWY2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvc3N0LWZpcm13YXJlLmMKKysrIGIvc291bmQvc29jL2ludGVsL3NzdC1maXJtd2FyZS5jCkBAIC00OTcsNiArNDk3LDcgQEAKIAlzc3RfbW9kdWxlLT5zc3RfZncgPSBzc3RfZnc7CiAJc3N0X21vZHVsZS0+c2NyYXRjaF9zaXplID0gdGVtcGxhdGUtPnNjcmF0Y2hfc2l6ZTsKIAlzc3RfbW9kdWxlLT5wZXJzaXN0ZW50X3NpemUgPSB0ZW1wbGF0ZS0+cGVyc2lzdGVudF9zaXplOworCXNzdF9tb2R1bGUtPmVudHJ5ID0gdGVtcGxhdGUtPmVudHJ5OwogCiAJSU5JVF9MSVNUX0hFQUQoJnNzdF9tb2R1bGUtPmJsb2NrX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZzc3RfbW9kdWxlLT5ydW50aW1lX2xpc3QpOwpAQCAtNzA2LDYgKzcwNyw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqYmxvY2tfbGlzdCkKIHsKIAlzdHJ1Y3Qgc3N0X21lbV9ibG9jayAqYmxvY2ssICp0bXA7CisJc3RydWN0IHNzdF9ibG9ja19hbGxvY2F0b3IgYmFfdG1wID0gKmJhOwogCXUzMiBlbmQgPSBiYS0+b2Zmc2V0ICsgYmEtPnNpemUsIGJsb2NrX2VuZDsKIAlpbnQgZXJyOwogCkBAIC03MzAsOSArNzMyLDkgQEAKIAkJaWYgKGJhLT5vZmZzZXQgPj0gYmxvY2stPm9mZnNldCAmJiBiYS0+b2Zmc2V0IDwgYmxvY2tfZW5kKSB7CiAKIAkJCS8qIGFsaWduIGJhIHRvIGJsb2NrIGJvdW5kYXJ5ICovCi0JCQliYS0+c2l6ZSAtPSBibG9ja19lbmQgLSBiYS0+b2Zmc2V0OwotCQkJYmEtPm9mZnNldCA9IGJsb2NrX2VuZDsKLQkJCWVyciA9IGJsb2NrX2FsbG9jX2NvbnRpZ3VvdXMoZHNwLCBiYSwgYmxvY2tfbGlzdCk7CisJCQliYV90bXAuc2l6ZSAtPSBibG9ja19lbmQgLSBiYS0+b2Zmc2V0OworCQkJYmFfdG1wLm9mZnNldCA9IGJsb2NrX2VuZDsKKwkJCWVyciA9IGJsb2NrX2FsbG9jX2NvbnRpZ3VvdXMoZHNwLCAmYmFfdG1wLCBibG9ja19saXN0KTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldHVybiAtRU5PTUVNOwogCkBAIC03NjcsMTAgKzc2OSwxMCBAQAogCQkJbGlzdF9tb3ZlKCZibG9jay0+bGlzdCwgJmRzcC0+dXNlZF9ibG9ja19saXN0KTsKIAkJCWxpc3RfYWRkKCZibG9jay0+bW9kdWxlX2xpc3QsIGJsb2NrX2xpc3QpOwogCQkJLyogYWxpZ24gYmEgdG8gYmxvY2sgYm91bmRhcnkgKi8KLQkJCWJhLT5zaXplIC09IGJsb2NrX2VuZCAtIGJhLT5vZmZzZXQ7Ci0JCQliYS0+b2Zmc2V0ID0gYmxvY2tfZW5kOworCQkJYmFfdG1wLnNpemUgLT0gYmxvY2tfZW5kIC0gYmEtPm9mZnNldDsKKwkJCWJhX3RtcC5vZmZzZXQgPSBibG9ja19lbmQ7CiAKLQkJCWVyciA9IGJsb2NrX2FsbG9jX2NvbnRpZ3VvdXMoZHNwLCBiYSwgYmxvY2tfbGlzdCk7CisJCQllcnIgPSBibG9ja19hbGxvY19jb250aWd1b3VzKGRzcCwgJmJhX3RtcCwgYmxvY2tfbGlzdCk7CiAJCQlpZiAoZXJyIDwgMCkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNzg5LDYgKzc5MSw3IEBACiAJc3RydWN0IHNzdF9ibG9ja19hbGxvY2F0b3IgYmE7CiAJaW50IHJldDsKIAorCW1lbXNldCgmYmEsIDAsIHNpemVvZihiYSkpOwogCWJhLnNpemUgPSBtb2R1bGUtPnNpemU7CiAJYmEudHlwZSA9IG1vZHVsZS0+dHlwZTsKIAliYS5vZmZzZXQgPSBtb2R1bGUtPm9mZnNldDsKQEAgLTg2Miw2ICs4NjUsNyBAQAogCWlmIChtb2R1bGUtPnBlcnNpc3RlbnRfc2l6ZSA9PSAwKQogCQlyZXR1cm4gMDsKIAorCW1lbXNldCgmYmEsIDAsIHNpemVvZihiYSkpOwogCWJhLnNpemUgPSBtb2R1bGUtPnBlcnNpc3RlbnRfc2l6ZTsKIAliYS50eXBlID0gU1NUX01FTV9EUkFNOwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvc3N0LWhhc3dlbGwtZHNwLmMgYi9zb3VuZC9zb2MvaW50ZWwvc3N0LWhhc3dlbGwtZHNwLmMKaW5kZXggNTcwMzliMC4uYzQyZmZhZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL3NzdC1oYXN3ZWxsLWRzcC5jCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9zc3QtaGFzd2VsbC1kc3AuYwpAQCAtMzA2LDcgKzMwNiw3IEBACiBzdGF0aWMgaW50IGhzd19zZXRfZHNwX0QwKHN0cnVjdCBzc3RfZHNwICpzc3QpCiB7CiAJaW50IHRyaWVzID0gMTA7Ci0JdTMyIHJlZzsKKwl1MzIgcmVnLCBmd19kdW1wX2JpdDsKIAogCS8qIERpc2FibGUgY29yZSBjbG9jayBnYXRpbmcgKFZEUlRDVEwyLkRDTENHRSA9IDApICovCiAJcmVnID0gcmVhZGwoc3N0LT5hZGRyLnBjaV9jZmcgKyBTU1RfVkRSVENUTDIpOwpAQCAtMzY4LDcgKzM2OCw5IEBACiAJY2FuJ3QgYmUgYWNjZXNzZWQsIHBsZWFzZSBlbmFibGUgZWFjaCBibG9jayBiZWZvcmUgYWNjZXNzaW5nLiAqLwogCXJlZyA9IHJlYWRsKHNzdC0+YWRkci5wY2lfY2ZnICsgU1NUX1ZEUlRDVEwwKTsKIAlyZWcgfD0gU1NUX1ZEUlRDTDBfRFNSQU1QR0VfTUFTSyB8IFNTVF9WRFJUQ0wwX0lTUkFNUEdFX01BU0s7Ci0Jd3JpdGVsKHJlZywgc3N0LT5hZGRyLnBjaV9jZmcgKyBTU1RfVkRSVENUTDApOworCS8qIGZvciBEMCwgYWx3YXlzIGVuYWJsZSB0aGUgYmxvY2soRFNSQU1bMF0pIHVzZWQgZm9yIEZXIGR1bXAgKi8KKwlmd19kdW1wX2JpdCA9IDEgPDwgU1NUX1ZEUlRDTDBfRFNSQU1QR0VfU0hJRlQ7CisJd3JpdGVsKHJlZyAmIH5md19kdW1wX2JpdCwgc3N0LT5hZGRyLnBjaV9jZmcgKyBTU1RfVkRSVENUTDApOwogCiAKIAkvKiBkaXNhYmxlIERNQSBmaW5pc2ggZnVuY3Rpb24gZm9yIFNTUDAgJiBTU1AxICovCkBAIC00OTEsNiArNDkzLDcgQEAKIAl7U1NUX0RFVl9JRF9MWU5YX1BPSU5ULCA2LCAxNn0sIC8qIGxwICovCiAJe1NTVF9ERVZfSURfV0lMRENBVF9QT0lOVCwgMiwgMTJ9LCAvKiB3cHQgKi8KIH07CisKIHN0YXRpYyB1MzIgaHN3X2Jsb2NrX2dldF9iaXQoc3RydWN0IHNzdF9tZW1fYmxvY2sgKmJsb2NrKQogewogCXUzMiBiaXQgPSAwLCBzaGlmdCA9IDAsIGluZGV4OwpAQCAtNTg3LDcgKzU5MCw5IEBACiAKIAl2YWwgPSByZWFkbChzc3QtPmFkZHIucGNpX2NmZyArIFNTVF9WRFJUQ1RMMCk7CiAJYml0ID0gaHN3X2Jsb2NrX2dldF9iaXQoYmxvY2spOwotCXdyaXRlbCh2YWwgfCBiaXQsIHNzdC0+YWRkci5wY2lfY2ZnICsgU1NUX1ZEUlRDVEwwKTsKKwkvKiBkb24ndCBkaXNhYmxlIERTUkFNWzBdLCBrZWVwIGl0IGFsd2F5cyBlbmFibGUgZm9yIEZXIGR1bXAqLworCWlmIChiaXQgIT0gKDEgPDwgU1NUX1ZEUlRDTDBfRFNSQU1QR0VfU0hJRlQpKQorCQl3cml0ZWwodmFsIHwgYml0LCBzc3QtPmFkZHIucGNpX2NmZyArIFNTVF9WRFJUQ1RMMCk7CiAKIAkvKiB3YWl0IDE4IERTUCBjbG9jayB0aWNrcyAqLwogCXVkZWxheSgxMCk7CkBAIC02MTIsNyArNjE3LDcgQEAKIAljb25zdCBzdHJ1Y3Qgc3N0X2Fkc3BfbWVtcmVnaW9uICpyZWdpb247CiAJc3RydWN0IGRldmljZSAqZGV2OwogCWludCByZXQgPSAtRU5PREVWLCBpLCBqLCByZWdpb25fY291bnQ7Ci0JdTMyIG9mZnNldCwgc2l6ZTsKKwl1MzIgb2Zmc2V0LCBzaXplLCBmd19kdW1wX2JpdDsKIAogCWRldiA9IHNzdC0+ZG1hX2RldjsKIApAQCAtNjY5LDkgKzY3NCwxMSBAQAogCQl9CiAJfQogCisJLyogYWx3YXlzIGVuYWJsZSB0aGUgYmxvY2soRFNSQU1bMF0pIHVzZWQgZm9yIEZXIGR1bXAgKi8KKwlmd19kdW1wX2JpdCA9IDEgPDwgU1NUX1ZEUlRDTDBfRFNSQU1QR0VfU0hJRlQ7CiAJLyogc2V0IGRlZmF1bHQgcG93ZXIgZ2F0aW5nIGNvbnRyb2wsIGVuYWJsZSBwb3dlciBnYXRpbmcgY29udHJvbCBmb3IgYWxsIGJsb2Nrcy4gdGhhdCBpcywKIAljYW4ndCBiZSBhY2Nlc3NlZCwgcGxlYXNlIGVuYWJsZSBlYWNoIGJsb2NrIGJlZm9yZSBhY2Nlc3NpbmcuICovCi0Jd3JpdGVsKDB4ZmZmZmZmZmYsIHNzdC0+YWRkci5wY2lfY2ZnICsgU1NUX1ZEUlRDVEwwKTsKKwl3cml0ZWwoMHhmZmZmZmZmZiAmIH5md19kdW1wX2JpdCwgc3N0LT5hZGRyLnBjaV9jZmcgKyBTU1RfVkRSVENUTDApOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvc3N0LWhhc3dlbGwtaXBjLmMgYi9zb3VuZC9zb2MvaW50ZWwvc3N0LWhhc3dlbGwtaXBjLmMKaW5kZXggM2Y4YzQ4Mi4uMzk0YWY1NiAxMDA2NDQKLS0tIGEvc291bmQvc29jL2ludGVsL3NzdC1oYXN3ZWxsLWlwYy5jCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9zc3QtaGFzd2VsbC1pcGMuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKyNpbmNsdWRlIDxzb3VuZC9hc291bmQuaD4KIAogI2luY2x1ZGUgInNzdC1oYXN3ZWxsLWlwYy5oIgogI2luY2x1ZGUgInNzdC1kc3AuaCIKQEAgLTk0LDYgKzk1LDggQEAKIC8qIE1haWxib3ggKi8KICNkZWZpbmUgSVBDX01BWF9NQUlMQk9YX0JZVEVTCTI1NgogCisjZGVmaW5lIElOVkFMSURfU1RSRUFNX0hXX0lECTB4ZmZmZmZmZmYKKwogLyogR2xvYmFsIE1lc3NhZ2UgLSBUeXBlcyBhbmQgUmVwbGllcyAqLwogZW51bSBpcGNfZ2xiX3R5cGUgewogCUlQQ19HTEJfR0VUX0ZXX1ZFUlNJT04gPSAwLAkJLyogUmV0cmlldmVzIGZpcm13YXJlIHZlcnNpb24gKi8KQEAgLTI0MCw2ICsyNDMsOSBAQAogCXUzMiAoKm5vdGlmeV9wb3NpdGlvbikoc3RydWN0IHNzdF9oc3dfc3RyZWFtICpzdHJlYW0sIHZvaWQgKmRhdGEpOwogCXZvaWQgKnBkYXRhOwogCisJLyogcmVjb3JkIHRoZSBmdyByZWFkIHBvc2l0aW9uIHdoZW4gcGxheWJhY2sgKi8KKwlzbmRfcGNtX3VmcmFtZXNfdCBvbGRfcG9zaXRpb247CisJYm9vbCBwbGF5X3NpbGVuY2U7CiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogfTsKIApAQCAtMjc1LDcgKzI4MSw2IEBACiAJLyogRlcgY29uZmlnICovCiAJc3RydWN0IHNzdF9oc3dfaXBjX2Z3X3JlYWR5IGZ3X3JlYWR5OwogCXN0cnVjdCBzc3RfaHN3X2lwY19md192ZXJzaW9uIHZlcnNpb247Ci0Jc3RydWN0IHNzdF9tb2R1bGUgKnNjcmF0Y2g7CiAJYm9vbCBmd19kb25lOwogCXN0cnVjdCBzc3RfZncgKnNzdF9mdzsKIApAQCAtMzM3LDEyICszNDIsNiBAQAogCXJldHVybiAobXNnICYgSVBDX1NUR19UWVBFX01BU0spID4+ICBJUENfU1RHX1RZUEVfU0hJRlQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIG1zZ19zZXRfc3RhZ2VfdHlwZSh1MzIgbXNnLCB1MzIgdHlwZSkKLXsKLQlyZXR1cm4gKG1zZyAmIH5JUENfU1RHX1RZUEVfTUFTSykgKwotCQkodHlwZSA8PCBJUENfU1RHX1RZUEVfU0hJRlQpOwotfQotCiBzdGF0aWMgaW5saW5lIHUzMiBtc2dfZ2V0X3N0cmVhbV9pZCh1MzIgbXNnKQogewogCXJldHVybiAobXNnICYgSVBDX1NUUl9JRF9NQVNLKSA+PiAgSVBDX1NUUl9JRF9TSElGVDsKQEAgLTY1MSwxMSArNjUwLDExIEBACiAJfQogCiAJLyogdGVsbCBEU1AgdGhhdCBub3RpZmljYXRpb24gaGFzIGJlZW4gaGFuZGxlZCAqLwotCXNzdF9kc3Bfc2hpbV91cGRhdGVfYml0c191bmxvY2tlZChoc3ctPmRzcCwgU1NUX0lQQ0QsCisJc3N0X2RzcF9zaGltX3VwZGF0ZV9iaXRzKGhzdy0+ZHNwLCBTU1RfSVBDRCwKIAkJU1NUX0lQQ0RfQlVTWSB8IFNTVF9JUENEX0RPTkUsIFNTVF9JUENEX0RPTkUpOwogCiAJLyogdW5tYXNrIGJ1c3kgaW50ZXJydXB0ICovCi0Jc3N0X2RzcF9zaGltX3VwZGF0ZV9iaXRzX3VubG9ja2VkKGhzdy0+ZHNwLCBTU1RfSU1SWCwgU1NUX0lNUlhfQlVTWSwgMCk7CisJc3N0X2RzcF9zaGltX3VwZGF0ZV9iaXRzKGhzdy0+ZHNwLCBTU1RfSU1SWCwgU1NUX0lNUlhfQlVTWSwgMCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXBjX21lc3NhZ2UgKnJlcGx5X2ZpbmRfbXNnKHN0cnVjdCBzc3RfaHN3ICpoc3csIHUzMiBoZWFkZXIpCkBAIC05NjksNDUgKzk2OCw2IEBACiB9CiAKIC8qIE1peGVyIENvbnRyb2xzICovCi1pbnQgc3N0X2hzd19zdHJlYW1fbXV0ZShzdHJ1Y3Qgc3N0X2hzdyAqaHN3LCBzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSwKLQl1MzIgc3RhZ2VfaWQsIHUzMiBjaGFubmVsKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBzc3RfaHN3X3N0cmVhbV9nZXRfdm9sdW1lKGhzdywgc3RyZWFtLCBzdGFnZV9pZCwgY2hhbm5lbCwKLQkJJnN0cmVhbS0+bXV0ZV92b2x1bWVbY2hhbm5lbF0pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gc3N0X2hzd19zdHJlYW1fc2V0X3ZvbHVtZShoc3csIHN0cmVhbSwgc3RhZ2VfaWQsIGNoYW5uZWwsIDApOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoaHN3LT5kZXYsICJlcnJvcjogY2FuJ3QgdW5tdXRlIHN0cmVhbSAlZCBjaGFubmVsICVkXG4iLAotCQkJc3RyZWFtLT5yZXBseS5zdHJlYW1faHdfaWQsIGNoYW5uZWwpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXN0cmVhbS0+bXV0ZVtjaGFubmVsXSA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBzc3RfaHN3X3N0cmVhbV91bm11dGUoc3RydWN0IHNzdF9oc3cgKmhzdywgc3RydWN0IHNzdF9oc3dfc3RyZWFtICpzdHJlYW0sCi0JdTMyIHN0YWdlX2lkLCB1MzIgY2hhbm5lbCkKLQotewotCWludCByZXQ7Ci0KLQlzdHJlYW0tPm11dGVbY2hhbm5lbF0gPSAwOwotCXJldCA9IHNzdF9oc3dfc3RyZWFtX3NldF92b2x1bWUoaHN3LCBzdHJlYW0sIHN0YWdlX2lkLCBjaGFubmVsLAotCQlzdHJlYW0tPm11dGVfdm9sdW1lW2NoYW5uZWxdKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGhzdy0+ZGV2LCAiZXJyb3I6IGNhbid0IHVubXV0ZSBzdHJlYW0gJWQgY2hhbm5lbCAlZFxuIiwKLQkJCXN0cmVhbS0+cmVwbHkuc3RyZWFtX2h3X2lkLCBjaGFubmVsKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogaW50IHNzdF9oc3dfc3RyZWFtX2dldF92b2x1bWUoc3RydWN0IHNzdF9oc3cgKmhzdywgc3RydWN0IHNzdF9oc3dfc3RyZWFtICpzdHJlYW0sCiAJdTMyIHN0YWdlX2lkLCB1MzIgY2hhbm5lbCwgdTMyICp2b2x1bWUpCiB7CkBAIC0xMDIxLDE3ICs5ODEsNiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc3N0X2hzd19zdHJlYW1fc2V0X3ZvbHVtZV9jdXJ2ZShzdHJ1Y3Qgc3N0X2hzdyAqaHN3LAotCXN0cnVjdCBzc3RfaHN3X3N0cmVhbSAqc3RyZWFtLCB1NjQgY3VydmVfZHVyYXRpb24sCi0JZW51bSBzc3RfaHN3X3ZvbHVtZV9jdXJ2ZSBjdXJ2ZSkKLXsKLQkvKiBjdXJ2ZSBkdXJhdGlvbiBpbiBzdGVwcyBvZiAxMDBucyAqLwotCXN0cmVhbS0+dm9sX3JlcS5jdXJ2ZV9kdXJhdGlvbiA9IGN1cnZlX2R1cmF0aW9uOwotCXN0cmVhbS0+dm9sX3JlcS5jdXJ2ZV90eXBlID0gY3VydmU7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogc3RyZWFtIHZvbHVtZSAqLwogaW50IHNzdF9oc3dfc3RyZWFtX3NldF92b2x1bWUoc3RydWN0IHNzdF9oc3cgKmhzdywKIAlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSwgdTMyIHN0YWdlX2lkLCB1MzIgY2hhbm5lbCwgdTMyIHZvbHVtZSkKQEAgLTEwODMsNDIgKzEwMzIsNiBAQAogCXJldHVybiAwOwogfQogCi1pbnQgc3N0X2hzd19taXhlcl9tdXRlKHN0cnVjdCBzc3RfaHN3ICpoc3csIHUzMiBzdGFnZV9pZCwgdTMyIGNoYW5uZWwpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHNzdF9oc3dfbWl4ZXJfZ2V0X3ZvbHVtZShoc3csIHN0YWdlX2lkLCBjaGFubmVsLAotCQkmaHN3LT5tdXRlX3ZvbHVtZVtjaGFubmVsXSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBzc3RfaHN3X21peGVyX3NldF92b2x1bWUoaHN3LCBzdGFnZV9pZCwgY2hhbm5lbCwgMCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2Vycihoc3ctPmRldiwgImVycm9yOiBmYWlsZWQgdG8gdW5tdXRlIG1peGVyIGNoYW5uZWwgJWRcbiIsCi0JCQljaGFubmVsKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQloc3ctPm11dGVbY2hhbm5lbF0gPSAxOwotCXJldHVybiAwOwotfQotCi1pbnQgc3N0X2hzd19taXhlcl91bm11dGUoc3RydWN0IHNzdF9oc3cgKmhzdywgdTMyIHN0YWdlX2lkLCB1MzIgY2hhbm5lbCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gc3N0X2hzd19taXhlcl9zZXRfdm9sdW1lKGhzdywgc3RhZ2VfaWQsIGNoYW5uZWwsCi0JCWhzdy0+bWl4ZXJfaW5mby52b2x1bWVfcmVnaXN0ZXJfYWRkcmVzc1tjaGFubmVsXSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2Vycihoc3ctPmRldiwgImVycm9yOiBmYWlsZWQgdG8gdW5tdXRlIG1peGVyIGNoYW5uZWwgJWRcbiIsCi0JCQljaGFubmVsKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KLQloc3ctPm11dGVbY2hhbm5lbF0gPSAwOwotCXJldHVybiAwOwotfQotCiBpbnQgc3N0X2hzd19taXhlcl9nZXRfdm9sdW1lKHN0cnVjdCBzc3RfaHN3ICpoc3csIHUzMiBzdGFnZV9pZCwgdTMyIGNoYW5uZWwsCiAJdTMyICp2b2x1bWUpCiB7CkBAIC0xMTMyLDE2ICsxMDQ1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHNzdF9oc3dfbWl4ZXJfc2V0X3ZvbHVtZV9jdXJ2ZShzdHJ1Y3Qgc3N0X2hzdyAqaHN3LAotCSB1NjQgY3VydmVfZHVyYXRpb24sIGVudW0gc3N0X2hzd192b2x1bWVfY3VydmUgY3VydmUpCi17Ci0JLyogY3VydmUgZHVyYXRpb24gaW4gc3RlcHMgb2YgMTAwbnMgKi8KLQloc3ctPmN1cnZlX2R1cmF0aW9uID0gY3VydmVfZHVyYXRpb247Ci0JaHN3LT5jdXJ2ZV90eXBlID0gY3VydmU7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogZ2xvYmFsIG1peGVyIHZvbHVtZSAqLwogaW50IHNzdF9oc3dfbWl4ZXJfc2V0X3ZvbHVtZShzdHJ1Y3Qgc3N0X2hzdyAqaHN3LCB1MzIgc3RhZ2VfaWQsIHUzMiBjaGFubmVsLAogCXUzMiB2b2x1bWUpCkBAIC0xMjA4LDYgKzExMTEsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzc3QtPnNwaW5sb2NrLCBmbGFncyk7CisJc3RyZWFtLT5yZXBseS5zdHJlYW1faHdfaWQgPSBJTlZBTElEX1NUUkVBTV9IV19JRDsKIAlsaXN0X2FkZCgmc3RyZWFtLT5ub2RlLCAmaHN3LT5zdHJlYW1fbGlzdCk7CiAJc3RyZWFtLT5ub3RpZnlfcG9zaXRpb24gPSBub3RpZnlfcG9zaXRpb247CiAJc3RyZWFtLT5wZGF0YSA9IGRhdGE7CkBAIC0xMjI4LDYgKzExMzIsMTEgQEAKIAlzdHJ1Y3Qgc3N0X2RzcCAqc3N0ID0gaHN3LT5kc3A7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmICghc3RyZWFtKSB7CisJCWRldl93YXJuKGhzdy0+ZGV2LCAid2FybmluZzogc3RyZWFtIGlzIE5VTEwsIG5vIHN0cmVhbSB0byBmcmVlLCBpZ25vcmUgaXQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyogZG9udCBmcmVlIERTUCBzdHJlYW1zIHRoYXQgYXJlIG5vdCBjb21taXRlZCAqLwogCWlmICghc3RyZWFtLT5jb21taXRlZCkKIAkJZ290byBvdXQ7CkBAIC0xNDE1LDYgKzEzMjQsMTYgQEAKIAl1MzIgaGVhZGVyOwogCWludCByZXQ7CiAKKwlpZiAoIXN0cmVhbSkgeworCQlkZXZfd2Fybihoc3ctPmRldiwgIndhcm5pbmc6IHN0cmVhbSBpcyBOVUxMLCBubyBzdHJlYW0gdG8gY29tbWl0LCBpZ25vcmUgaXQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHN0cmVhbS0+Y29tbWl0ZWQpIHsKKwkJZGV2X3dhcm4oaHN3LT5kZXYsICJ3YXJuaW5nOiBzdHJlYW0gaXMgYWxyZWFkeSBjb21taXR0ZWQsIGlnbm9yZSBpdC5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKIAl0cmFjZV9pcGNfcmVxdWVzdCgic3RyZWFtIGFsbG9jIiwgc3RyZWFtLT5ob3N0X2lkKTsKIAogCWhlYWRlciA9IElQQ19HTEJfVFlQRShJUENfR0xCX0FMTE9DQVRFX1NUUkVBTSk7CkBAIC0xNDMyLDUwICsxMzUxLDMyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3NuZF9wY21fdWZyYW1lc190IHNzdF9oc3dfc3RyZWFtX2dldF9vbGRfcG9zaXRpb24oc3RydWN0IHNzdF9oc3cgKmhzdywKKwlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSkKK3sKKwlyZXR1cm4gc3RyZWFtLT5vbGRfcG9zaXRpb247Cit9CisKK3ZvaWQgc3N0X2hzd19zdHJlYW1fc2V0X29sZF9wb3NpdGlvbihzdHJ1Y3Qgc3N0X2hzdyAqaHN3LAorCXN0cnVjdCBzc3RfaHN3X3N0cmVhbSAqc3RyZWFtLCBzbmRfcGNtX3VmcmFtZXNfdCB2YWwpCit7CisJc3RyZWFtLT5vbGRfcG9zaXRpb24gPSB2YWw7Cit9CisKK2Jvb2wgc3N0X2hzd19zdHJlYW1fZ2V0X3NpbGVuY2Vfc3RhcnQoc3RydWN0IHNzdF9oc3cgKmhzdywKKwlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSkKK3sKKwlyZXR1cm4gc3RyZWFtLT5wbGF5X3NpbGVuY2U7Cit9CisKK3ZvaWQgc3N0X2hzd19zdHJlYW1fc2V0X3NpbGVuY2Vfc3RhcnQoc3RydWN0IHNzdF9oc3cgKmhzdywKKwlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSwgYm9vbCB2YWwpCit7CisJc3RyZWFtLT5wbGF5X3NpbGVuY2UgPSB2YWw7Cit9CisKIC8qIFN0cmVhbSBJbmZvcm1hdGlvbiAtIHRoZXNlIGNhbGxzIGNvdWxkIGJlIGlubGluZSBidXQgd2Ugd2FudCB0aGUgSVBDCiAgQUJJIHRvIGJlIG9wYXF1ZSB0byBjbGllbnQgUENNIGRyaXZlcnMgdG8gY29wZSB3aXRoIGFueSBmdXR1cmUgQUJJIGNoYW5nZXMgKi8KLWludCBzc3RfaHN3X3N0cmVhbV9nZXRfaHdfaWQoc3RydWN0IHNzdF9oc3cgKmhzdywKLQlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSkKLXsKLQlyZXR1cm4gc3RyZWFtLT5yZXBseS5zdHJlYW1faHdfaWQ7Ci19Ci0KLWludCBzc3RfaHN3X3N0cmVhbV9nZXRfbWl4ZXJfaWQoc3RydWN0IHNzdF9oc3cgKmhzdywKLQlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSkKLXsKLQlyZXR1cm4gc3RyZWFtLT5yZXBseS5taXhlcl9od19pZDsKLX0KLQotdTMyIHNzdF9oc3dfc3RyZWFtX2dldF9yZWFkX3JlZyhzdHJ1Y3Qgc3N0X2hzdyAqaHN3LAotCXN0cnVjdCBzc3RfaHN3X3N0cmVhbSAqc3RyZWFtKQotewotCXJldHVybiBzdHJlYW0tPnJlcGx5LnJlYWRfcG9zaXRpb25fcmVnaXN0ZXJfYWRkcmVzczsKLX0KLQotdTMyIHNzdF9oc3dfc3RyZWFtX2dldF9wb2ludGVyX3JlZyhzdHJ1Y3Qgc3N0X2hzdyAqaHN3LAotCXN0cnVjdCBzc3RfaHN3X3N0cmVhbSAqc3RyZWFtKQotewotCXJldHVybiBzdHJlYW0tPnJlcGx5LnByZXNlbnRhdGlvbl9wb3NpdGlvbl9yZWdpc3Rlcl9hZGRyZXNzOwotfQotCi11MzIgc3N0X2hzd19zdHJlYW1fZ2V0X3BlYWtfcmVnKHN0cnVjdCBzc3RfaHN3ICpoc3csCi0Jc3RydWN0IHNzdF9oc3dfc3RyZWFtICpzdHJlYW0sIHUzMiBjaGFubmVsKQotewotCWlmIChjaGFubmVsID49IDIpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIHN0cmVhbS0+cmVwbHkucGVha19tZXRlcl9yZWdpc3Rlcl9hZGRyZXNzW2NoYW5uZWxdOwotfQotCi11MzIgc3N0X2hzd19zdHJlYW1fZ2V0X3ZvbF9yZWcoc3RydWN0IHNzdF9oc3cgKmhzdywKLQlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSwgdTMyIGNoYW5uZWwpCi17Ci0JaWYgKGNoYW5uZWwgPj0gMikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gc3RyZWFtLT5yZXBseS52b2x1bWVfcmVnaXN0ZXJfYWRkcmVzc1tjaGFubmVsXTsKLX0KLQogaW50IHNzdF9oc3dfbWl4ZXJfZ2V0X2luZm8oc3RydWN0IHNzdF9oc3cgKmhzdykKIHsKIAlzdHJ1Y3Qgc3N0X2hzd19pcGNfc3RyZWFtX2luZm9fcmVwbHkgKnJlcGx5OwpAQCAtMTUxOSw2ICsxNDIwLDExIEBACiB7CiAJaW50IHJldDsKIAorCWlmICghc3RyZWFtKSB7CisJCWRldl93YXJuKGhzdy0+ZGV2LCAid2FybmluZzogc3RyZWFtIGlzIE5VTEwsIG5vIHN0cmVhbSB0byBwYXVzZSwgaWdub3JlIGl0LlxuIik7CisJCXJldHVybiAwOworCX0KKwogCXRyYWNlX2lwY19yZXF1ZXN0KCJzdHJlYW0gcGF1c2UiLCBzdHJlYW0tPnJlcGx5LnN0cmVhbV9od19pZCk7CiAKIAlyZXQgPSBzc3RfaHN3X3N0cmVhbV9vcGVyYXRpb25zKGhzdywgSVBDX1NUUl9QQVVTRSwKQEAgLTE1MzUsNiArMTQ0MSwxMSBAQAogewogCWludCByZXQ7CiAKKwlpZiAoIXN0cmVhbSkgeworCQlkZXZfd2Fybihoc3ctPmRldiwgIndhcm5pbmc6IHN0cmVhbSBpcyBOVUxMLCBubyBzdHJlYW0gdG8gcmVzdW1lLCBpZ25vcmUgaXQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJdHJhY2VfaXBjX3JlcXVlc3QoInN0cmVhbSByZXN1bWUiLCBzdHJlYW0tPnJlcGx5LnN0cmVhbV9od19pZCk7CiAKIAlyZXQgPSBzc3RfaHN3X3N0cmVhbV9vcGVyYXRpb25zKGhzdywgSVBDX1NUUl9SRVNVTUUsCkBAIC0xNTUwLDYgKzE0NjEsMTEgQEAKIHsKIAlpbnQgcmV0LCB0cmllcyA9IDEwOwogCisJaWYgKCFzdHJlYW0pIHsKKwkJZGV2X3dhcm4oaHN3LT5kZXYsICJ3YXJuaW5nOiBzdHJlYW0gaXMgTlVMTCwgbm8gc3RyZWFtIHRvIHJlc2V0LCBpZ25vcmUgaXQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCiAJLyogZG9udCByZXNldCBzdHJlYW1zIHRoYXQgYXJlIG5vdCBjb21taXRlZCAqLwogCWlmICghc3RyZWFtLT5jb21taXRlZCkKIAkJcmV0dXJuIDA7CkBAIC0xNTk4LDMwICsxNTE0LDYgQEAKIAlyZXR1cm4gcHBvczsKIH0KIAotaW50IHNzdF9oc3dfc3RyZWFtX3NldF93cml0ZV9wb3NpdGlvbihzdHJ1Y3Qgc3N0X2hzdyAqaHN3LAotCXN0cnVjdCBzc3RfaHN3X3N0cmVhbSAqc3RyZWFtLCB1MzIgc3RhZ2VfaWQsIHUzMiBwb3NpdGlvbikKLXsKLQl1MzIgaGVhZGVyOwotCWludCByZXQ7Ci0KLQl0cmFjZV9zdHJlYW1fd3JpdGVfcG9zaXRpb24oc3RyZWFtLT5yZXBseS5zdHJlYW1faHdfaWQsIHBvc2l0aW9uKTsKLQotCWhlYWRlciA9IElQQ19HTEJfVFlQRShJUENfR0xCX1NUUkVBTV9NRVNTQUdFKSB8Ci0JCUlQQ19TVFJfVFlQRShJUENfU1RSX1NUQUdFX01FU1NBR0UpOwotCWhlYWRlciB8PSAoc3RyZWFtLT5yZXBseS5zdHJlYW1faHdfaWQgPDwgSVBDX1NUUl9JRF9TSElGVCk7Ci0JaGVhZGVyIHw9IChJUENfU1RHX1NFVF9XUklURV9QT1NJVElPTiA8PCBJUENfU1RHX1RZUEVfU0hJRlQpOwotCWhlYWRlciB8PSAoc3RhZ2VfaWQgPDwgSVBDX1NUR19JRF9TSElGVCk7Ci0Jc3RyZWFtLT53cG9zLnBvc2l0aW9uID0gcG9zaXRpb247Ci0KLQlyZXQgPSBpcGNfdHhfbWVzc2FnZV9ub3dhaXQoaHN3LCBoZWFkZXIsICZzdHJlYW0tPndwb3MsCi0JCXNpemVvZihzdHJlYW0tPndwb3MpKTsKLQlpZiAocmV0IDwgMCkKLQkJZGV2X2Vycihoc3ctPmRldiwgImVycm9yOiBzdHJlYW0gJWQgc2V0IHBvc2l0aW9uICVkIGZhaWxlZFxuIiwKLQkJCXN0cmVhbS0+cmVwbHkuc3RyZWFtX2h3X2lkLCBwb3NpdGlvbik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiAvKiBwaHlzaWNhbCBCRSBjb25maWcgKi8KIGludCBzc3RfaHN3X2RldmljZV9zZXRfY29uZmlnKHN0cnVjdCBzc3RfaHN3ICpoc3csCiAJZW51bSBzc3RfaHN3X2RldmljZV9pZCBkZXYsIGVudW0gc3N0X2hzd19kZXZpY2VfbWNsayBtY2xrLApAQCAtMjEwMiw3ICsxOTk0LDYgQEAKIAlkbWFfZnJlZV9jb2hlcmVudChoc3ctPmRzcC0+ZG1hX2RldiwgU1NUX0hTV19EWF9DT05URVhUX1NJWkUsCiAJCQloc3ctPmR4X2NvbnRleHQsIGhzdy0+ZHhfY29udGV4dF9wYWRkcik7CiAJc3N0X2RzcF9mcmVlKGhzdy0+ZHNwKTsKLQlrZnJlZShoc3ctPnNjcmF0Y2gpOwogCWt0aHJlYWRfc3RvcChoc3ctPnR4X3RocmVhZCk7CiAJa2ZyZWUoaHN3LT5tc2cpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2ludGVsL3NzdC1oYXN3ZWxsLWlwYy5oIGIvc291bmQvc29jL2ludGVsL3NzdC1oYXN3ZWxsLWlwYy5oCmluZGV4IDEzOGU4OTQuLjg1ODA5NjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9zc3QtaGFzd2VsbC1pcGMuaAorKysgYi9zb3VuZC9zb2MvaW50ZWwvc3N0LWhhc3dlbGwtaXBjLmgKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZC5oPgogCiAjZGVmaW5lIFNTVF9IU1dfTk9fQ0hBTk5FTFMJCTQKICNkZWZpbmUgU1NUX0hTV19NQVhfRFhfUkVHSU9OUwkJMTQKQEAgLTM3NiwzMiArMzc3LDE3IEBACiB1MzIgY3JlYXRlX2NoYW5uZWxfbWFwKGVudW0gc3N0X2hzd19jaGFubmVsX2NvbmZpZyBjb25maWcpOwogCiAvKiBTdHJlYW0gTWl4ZXIgQ29udHJvbHMgLSAqLwotaW50IHNzdF9oc3dfc3RyZWFtX211dGUoc3RydWN0IHNzdF9oc3cgKmhzdywgc3RydWN0IHNzdF9oc3dfc3RyZWFtICpzdHJlYW0sCi0JdTMyIHN0YWdlX2lkLCB1MzIgY2hhbm5lbCk7Ci1pbnQgc3N0X2hzd19zdHJlYW1fdW5tdXRlKHN0cnVjdCBzc3RfaHN3ICpoc3csIHN0cnVjdCBzc3RfaHN3X3N0cmVhbSAqc3RyZWFtLAotCXUzMiBzdGFnZV9pZCwgdTMyIGNoYW5uZWwpOwotCiBpbnQgc3N0X2hzd19zdHJlYW1fc2V0X3ZvbHVtZShzdHJ1Y3Qgc3N0X2hzdyAqaHN3LAogCXN0cnVjdCBzc3RfaHN3X3N0cmVhbSAqc3RyZWFtLCB1MzIgc3RhZ2VfaWQsIHUzMiBjaGFubmVsLCB1MzIgdm9sdW1lKTsKIGludCBzc3RfaHN3X3N0cmVhbV9nZXRfdm9sdW1lKHN0cnVjdCBzc3RfaHN3ICpoc3csCiAJc3RydWN0IHNzdF9oc3dfc3RyZWFtICpzdHJlYW0sIHUzMiBzdGFnZV9pZCwgdTMyIGNoYW5uZWwsIHUzMiAqdm9sdW1lKTsKIAotaW50IHNzdF9oc3dfc3RyZWFtX3NldF92b2x1bWVfY3VydmUoc3RydWN0IHNzdF9oc3cgKmhzdywKLQlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSwgdTY0IGN1cnZlX2R1cmF0aW9uLAotCWVudW0gc3N0X2hzd192b2x1bWVfY3VydmUgY3VydmUpOwotCiAvKiBHbG9iYWwgTWl4ZXIgQ29udHJvbHMgLSAqLwotaW50IHNzdF9oc3dfbWl4ZXJfbXV0ZShzdHJ1Y3Qgc3N0X2hzdyAqaHN3LCB1MzIgc3RhZ2VfaWQsIHUzMiBjaGFubmVsKTsKLWludCBzc3RfaHN3X21peGVyX3VubXV0ZShzdHJ1Y3Qgc3N0X2hzdyAqaHN3LCB1MzIgc3RhZ2VfaWQsIHUzMiBjaGFubmVsKTsKLQogaW50IHNzdF9oc3dfbWl4ZXJfc2V0X3ZvbHVtZShzdHJ1Y3Qgc3N0X2hzdyAqaHN3LCB1MzIgc3RhZ2VfaWQsIHUzMiBjaGFubmVsLAogCXUzMiB2b2x1bWUpOwogaW50IHNzdF9oc3dfbWl4ZXJfZ2V0X3ZvbHVtZShzdHJ1Y3Qgc3N0X2hzdyAqaHN3LCB1MzIgc3RhZ2VfaWQsIHUzMiBjaGFubmVsLAogCXUzMiAqdm9sdW1lKTsKIAotaW50IHNzdF9oc3dfbWl4ZXJfc2V0X3ZvbHVtZV9jdXJ2ZShzdHJ1Y3Qgc3N0X2hzdyAqaHN3LAotCXU2NCBjdXJ2ZV9kdXJhdGlvbiwgZW51bSBzc3RfaHN3X3ZvbHVtZV9jdXJ2ZSBjdXJ2ZSk7Ci0KIC8qIFN0cmVhbSBBUEkgKi8KIHN0cnVjdCBzc3RfaHN3X3N0cmVhbSAqc3N0X2hzd19zdHJlYW1fbmV3KHN0cnVjdCBzc3RfaHN3ICpoc3csIGludCBpZCwKIAl1MzIgKCpnZXRfd3JpdGVfcG9zaXRpb24pKHN0cnVjdCBzc3RfaHN3X3N0cmVhbSAqc3RyZWFtLCB2b2lkICpkYXRhKSwKQEAgLTQ0MCwxOCArNDI2LDE0IEBACiAJc3RydWN0IHNzdF9oc3dfc3RyZWFtICpzdHJlYW0sIHUzMiBvZmZzZXQsIHUzMiBzaXplKTsKIGludCBzc3RfaHN3X3N0cmVhbV9zZXRfc21lbW9yeV9pbmZvKHN0cnVjdCBzc3RfaHN3ICpoc3csCiAJc3RydWN0IHNzdF9oc3dfc3RyZWFtICpzdHJlYW0sIHUzMiBvZmZzZXQsIHUzMiBzaXplKTsKLWludCBzc3RfaHN3X3N0cmVhbV9nZXRfaHdfaWQoc3RydWN0IHNzdF9oc3cgKmhzdywKK3NuZF9wY21fdWZyYW1lc190IHNzdF9oc3dfc3RyZWFtX2dldF9vbGRfcG9zaXRpb24oc3RydWN0IHNzdF9oc3cgKmhzdywKIAlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSk7Ci1pbnQgc3N0X2hzd19zdHJlYW1fZ2V0X21peGVyX2lkKHN0cnVjdCBzc3RfaHN3ICpoc3csCit2b2lkIHNzdF9oc3dfc3RyZWFtX3NldF9vbGRfcG9zaXRpb24oc3RydWN0IHNzdF9oc3cgKmhzdywKKwlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSwgc25kX3BjbV91ZnJhbWVzX3QgdmFsKTsKK2Jvb2wgc3N0X2hzd19zdHJlYW1fZ2V0X3NpbGVuY2Vfc3RhcnQoc3RydWN0IHNzdF9oc3cgKmhzdywKIAlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSk7Ci11MzIgc3N0X2hzd19zdHJlYW1fZ2V0X3JlYWRfcmVnKHN0cnVjdCBzc3RfaHN3ICpoc3csCi0Jc3RydWN0IHNzdF9oc3dfc3RyZWFtICpzdHJlYW0pOwotdTMyIHNzdF9oc3dfc3RyZWFtX2dldF9wb2ludGVyX3JlZyhzdHJ1Y3Qgc3N0X2hzdyAqaHN3LAotCXN0cnVjdCBzc3RfaHN3X3N0cmVhbSAqc3RyZWFtKTsKLXUzMiBzc3RfaHN3X3N0cmVhbV9nZXRfcGVha19yZWcoc3RydWN0IHNzdF9oc3cgKmhzdywKLQlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSwgdTMyIGNoYW5uZWwpOwotdTMyIHNzdF9oc3dfc3RyZWFtX2dldF92b2xfcmVnKHN0cnVjdCBzc3RfaHN3ICpoc3csCi0Jc3RydWN0IHNzdF9oc3dfc3RyZWFtICpzdHJlYW0sIHUzMiBjaGFubmVsKTsKK3ZvaWQgc3N0X2hzd19zdHJlYW1fc2V0X3NpbGVuY2Vfc3RhcnQoc3RydWN0IHNzdF9oc3cgKmhzdywKKwlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSwgYm9vbCB2YWwpOwogaW50IHNzdF9oc3dfbWl4ZXJfZ2V0X2luZm8oc3RydWN0IHNzdF9oc3cgKmhzdyk7CiAKIC8qIFN0cmVhbSBBTFNBIHRyaWdnZXIgb3BlcmF0aW9ucyAqLwpAQCAtNDY2LDggKzQ0OCw2IEBACiAJc3RydWN0IHNzdF9oc3dfc3RyZWFtICpzdHJlYW0sIHUzMiAqcG9zaXRpb24pOwogaW50IHNzdF9oc3dfc3RyZWFtX2dldF93cml0ZV9wb3Moc3RydWN0IHNzdF9oc3cgKmhzdywKIAlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSwgdTMyICpwb3NpdGlvbik7Ci1pbnQgc3N0X2hzd19zdHJlYW1fc2V0X3dyaXRlX3Bvc2l0aW9uKHN0cnVjdCBzc3RfaHN3ICpoc3csCi0Jc3RydWN0IHNzdF9oc3dfc3RyZWFtICpzdHJlYW0sIHUzMiBzdGFnZV9pZCwgdTMyIHBvc2l0aW9uKTsKIHUzMiBzc3RfaHN3X2dldF9kc3BfcG9zaXRpb24oc3RydWN0IHNzdF9oc3cgKmhzdywKIAlzdHJ1Y3Qgc3N0X2hzd19zdHJlYW0gKnN0cmVhbSk7CiB1NjQgc3N0X2hzd19nZXRfZHNwX3ByZXNlbnRhdGlvbl9wb3NpdGlvbihzdHJ1Y3Qgc3N0X2hzdyAqaHN3LApAQCAtNDgxLDggKzQ2MSw2IEBACiAvKiBEWCBDb25maWcgKi8KIGludCBzc3RfaHN3X2R4X3NldF9zdGF0ZShzdHJ1Y3Qgc3N0X2hzdyAqaHN3LAogCWVudW0gc3N0X2hzd19keF9zdGF0ZSBzdGF0ZSwgc3RydWN0IHNzdF9oc3dfaXBjX2R4X3JlcGx5ICpkeCk7Ci1pbnQgc3N0X2hzd19keF9nZXRfc3RhdGUoc3RydWN0IHNzdF9oc3cgKmhzdywgdTMyIGl0ZW0sCi0JdTMyICpvZmZzZXQsIHUzMiAqc2l6ZSwgdTMyICpzb3VyY2UpOwogCiAvKiBpbml0ICovCiBpbnQgc3N0X2hzd19kc3BfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzc3RfcGRhdGEgKnBkYXRhKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9zc3QtaGFzd2VsbC1wY20uYyBiL3NvdW5kL3NvYy9pbnRlbC9zc3QtaGFzd2VsbC1wY20uYwppbmRleCA2MTk1MjUyLi5kNmZhOWQ1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvc3N0LWhhc3dlbGwtcGNtLmMKKysrIGIvc291bmQvc29jL2ludGVsL3NzdC1oYXN3ZWxsLXBjbS5jCkBAIC0zNiw2ICszNiwxMSBAQAogI2RlZmluZSBIU1dfUENNX0NPVU5UCQk2CiAjZGVmaW5lIEhTV19WT0xVTUVfTUFYCQkweDdGRkZGRkZGCS8qIDBkQiAqLwogCisjZGVmaW5lIFNTVF9PTERfUE9TSVRJT04oZCwgciwgbykgKChkKSArCQlcCisJCQlmcmFtZXNfdG9fYnl0ZXMociwgbykpCisjZGVmaW5lIFNTVF9TQU1QTEVTKHIsIHgpIChieXRlc190b19zYW1wbGVzKHIsCVwKKwkJCWZyYW1lc190b19ieXRlcyhyLCAoeCkpKSkKKwogLyogc2ltcGxlIHZvbHVtZSB0YWJsZSAqLwogc3RhdGljIGNvbnN0IHUzMiB2b2x1bWVfbWFwW10gPSB7CiAJSFNXX1ZPTFVNRV9NQVggPj4gMzAsCkBAIC03OCw3ICs4Myw2IEBACiAjZGVmaW5lIEhTV19QQ01fREFJX0lEX09GRkxPQUQwCTEKICNkZWZpbmUgSFNXX1BDTV9EQUlfSURfT0ZGTE9BRDEJMgogI2RlZmluZSBIU1dfUENNX0RBSV9JRF9MT09QQkFDSwkzCi0jZGVmaW5lIEhTV19QQ01fREFJX0lEX0NBUFRVUkUJNAogCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSBoc3dfcGNtX2hhcmR3YXJlID0gewpAQCAtOTksNiArMTAzLDcgQEAKIAogc3RydWN0IGhzd19wY21fbW9kdWxlX21hcCB7CiAJaW50IGRhaV9pZDsKKwlpbnQgc3RyZWFtOwogCWVudW0gc3N0X2hzd19tb2R1bGVfaWQgbW9kX2lkOwogfTsKIApAQCAtMTE5LDggKzEyNCw5IEBACiB9OwogCiBlbnVtIGhzd19wbV9zdGF0ZSB7Ci0JSFNXX1BNX1NUQVRFX0QzID0gMCwKLQlIU1dfUE1fU1RBVEVfRDAgPSAxLAorCUhTV19QTV9TVEFURV9EMCA9IDAsCisJSFNXX1BNX1NUQVRFX1JURDMgPSAxLAorCUhTV19QTV9TVEFURV9EMyA9IDIsCiB9OwogCiAvKiBwcml2YXRlIGRhdGEgZm9yIHRoZSBkcml2ZXIgKi8KQEAgLTEzNSw3ICsxNDEsMTcgQEAKIAlzdHJ1Y3Qgc25kX2RtYV9idWZmZXIgZG1hYltIU1dfUENNX0NPVU5UXVsyXTsKIAogCS8qIERBSSBkYXRhICovCi0Jc3RydWN0IGhzd19wY21fZGF0YSBwY21bSFNXX1BDTV9DT1VOVF07CisJc3RydWN0IGhzd19wY21fZGF0YSBwY21bSFNXX1BDTV9DT1VOVF1bMl07Cit9OworCisKKy8qIHN0YXRpYyBtYXBwaW5ncyBiZXR3ZWVuIFBDTXMgYW5kIG1vZHVsZXMgLSBtYXkgYmUgZHluYW1pYyBpbiBmdXR1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgaHN3X3BjbV9tb2R1bGVfbWFwIG1vZF9tYXBbXSA9IHsKKwl7SFNXX1BDTV9EQUlfSURfU1lTVEVNLCAwLCBTU1RfSFNXX01PRFVMRV9QQ01fU1lTVEVNfSwKKwl7SFNXX1BDTV9EQUlfSURfT0ZGTE9BRDAsIDAsIFNTVF9IU1dfTU9EVUxFX1BDTX0sCisJe0hTV19QQ01fREFJX0lEX09GRkxPQUQxLCAwLCBTU1RfSFNXX01PRFVMRV9QQ019LAorCXtIU1dfUENNX0RBSV9JRF9MT09QQkFDSywgMSwgU1NUX0hTV19NT0RVTEVfUENNX1JFRkVSRU5DRX0sCisJe0hTV19QQ01fREFJX0lEX1NZU1RFTSwgMSwgU1NUX0hTV19NT0RVTEVfUENNX0NBUFRVUkV9LAogfTsKIAogc3RhdGljIHUzMiBoc3dfbm90aWZ5X3BvaW50ZXIoc3RydWN0IHNzdF9oc3dfc3RyZWFtICpzdHJlYW0sIHZvaWQgKmRhdGEpOwpAQCAtMTY4LDkgKzE4NCwxNCBAQAogCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJc3RydWN0IGhzd19wcml2X2RhdGEgKnBkYXRhID0KIAkJc25kX3NvY19wbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwbGF0Zm9ybSk7Ci0Jc3RydWN0IGhzd19wY21fZGF0YSAqcGNtX2RhdGEgPSAmcGRhdGEtPnBjbVttYy0+cmVnXTsKKwlzdHJ1Y3QgaHN3X3BjbV9kYXRhICpwY21fZGF0YTsKIAlzdHJ1Y3Qgc3N0X2hzdyAqaHN3ID0gcGRhdGEtPmhzdzsKIAl1MzIgdm9sdW1lOworCWludCBkYWksIHN0cmVhbTsKKworCWRhaSA9IG1vZF9tYXBbbWMtPnJlZ10uZGFpX2lkOworCXN0cmVhbSA9IG1vZF9tYXBbbWMtPnJlZ10uc3RyZWFtOworCXBjbV9kYXRhID0gJnBkYXRhLT5wY21bZGFpXVtzdHJlYW1dOwogCiAJbXV0ZXhfbG9jaygmcGNtX2RhdGEtPm11dGV4KTsKIAlwbV9ydW50aW1lX2dldF9zeW5jKHBkYXRhLT5kZXYpOwpAQCAtMjEyLDkgKzIzMywxNCBAQAogCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CiAJc3RydWN0IGhzd19wcml2X2RhdGEgKnBkYXRhID0KIAkJc25kX3NvY19wbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwbGF0Zm9ybSk7Ci0Jc3RydWN0IGhzd19wY21fZGF0YSAqcGNtX2RhdGEgPSAmcGRhdGEtPnBjbVttYy0+cmVnXTsKKwlzdHJ1Y3QgaHN3X3BjbV9kYXRhICpwY21fZGF0YTsKIAlzdHJ1Y3Qgc3N0X2hzdyAqaHN3ID0gcGRhdGEtPmhzdzsKIAl1MzIgdm9sdW1lOworCWludCBkYWksIHN0cmVhbTsKKworCWRhaSA9IG1vZF9tYXBbbWMtPnJlZ10uZGFpX2lkOworCXN0cmVhbSA9IG1vZF9tYXBbbWMtPnJlZ10uc3RyZWFtOworCXBjbV9kYXRhID0gJnBkYXRhLT5wY21bZGFpXVtzdHJlYW1dOwogCiAJbXV0ZXhfbG9jaygmcGNtX2RhdGEtPm11dGV4KTsKIAlwbV9ydW50aW1lX2dldF9zeW5jKHBkYXRhLT5kZXYpOwpAQCAtMzA5LDcgKzMzNSw3IEBACiAJCUFSUkFZX1NJWkUodm9sdW1lX21hcCkgLSAxLCAwLAogCQloc3dfc3RyZWFtX3ZvbHVtZV9nZXQsIGhzd19zdHJlYW1fdm9sdW1lX3B1dCwgaHN3X3ZvbF90bHYpLAogCS8qIE1pYyBDYXB0dXJlIHZvbHVtZSAqLwotCVNPQ19ET1VCTEVfRVhUX1RMVigiTWljIENhcHR1cmUgVm9sdW1lIiwgMCwgMCwgOCwKKwlTT0NfRE9VQkxFX0VYVF9UTFYoIk1pYyBDYXB0dXJlIFZvbHVtZSIsIDQsIDAsIDgsCiAJCUFSUkFZX1NJWkUodm9sdW1lX21hcCkgLSAxLCAwLAogCQloc3dfc3RyZWFtX3ZvbHVtZV9nZXQsIGhzd19zdHJlYW1fdm9sdW1lX3B1dCwgaHN3X3ZvbF90bHYpLAogfTsKQEAgLTM1Myw3ICszNzksNyBAQAogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CiAJc3RydWN0IGhzd19wcml2X2RhdGEgKnBkYXRhID0KIAkJc25kX3NvY19wbGF0Zm9ybV9nZXRfZHJ2ZGF0YShydGQtPnBsYXRmb3JtKTsKLQlzdHJ1Y3QgaHN3X3BjbV9kYXRhICpwY21fZGF0YSA9IHNuZF9zb2NfcGNtX2dldF9kcnZkYXRhKHJ0ZCk7CisJc3RydWN0IGhzd19wY21fZGF0YSAqcGNtX2RhdGE7CiAJc3RydWN0IHNzdF9oc3cgKmhzdyA9IHBkYXRhLT5oc3c7CiAJc3RydWN0IHNzdF9tb2R1bGUgKm1vZHVsZV9kYXRhOwogCXN0cnVjdCBzc3RfZHNwICpkc3A7CkBAIC0zNjIsNyArMzg4LDEwIEBACiAJZW51bSBzc3RfaHN3X3N0cmVhbV9wYXRoX2lkIHBhdGhfaWQ7CiAJdTMyIHJhdGUsIGJpdHMsIG1hcCwgcGFnZXMsIG1vZHVsZV9pZDsKIAl1OCBjaGFubmVsczsKLQlpbnQgcmV0OworCWludCByZXQsIGRhaTsKKworCWRhaSA9IG1vZF9tYXBbcnRkLT5jcHVfZGFpLT5pZF0uZGFpX2lkOworCXBjbV9kYXRhID0gJnBkYXRhLT5wY21bZGFpXVtzdWJzdHJlYW0tPnN0cmVhbV07CiAKIAkvKiBjaGVjayBpZiB3ZSBhcmUgYmVpbmcgY2FsbGVkIGEgc3Vic2VxdWVudCB0aW1lICovCiAJaWYgKHBjbV9kYXRhLT5hbGxvY2F0ZWQpIHsKQEAgLTU1MiwyMCArNTgxLDM1IEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBoc3dfcHJpdl9kYXRhICpwZGF0YSA9CiAJCXNuZF9zb2NfcGxhdGZvcm1fZ2V0X2RydmRhdGEocnRkLT5wbGF0Zm9ybSk7Ci0Jc3RydWN0IGhzd19wY21fZGF0YSAqcGNtX2RhdGEgPSBzbmRfc29jX3BjbV9nZXRfZHJ2ZGF0YShydGQpOworCXN0cnVjdCBoc3dfcGNtX2RhdGEgKnBjbV9kYXRhOworCXN0cnVjdCBzc3RfaHN3X3N0cmVhbSAqc3N0X3N0cmVhbTsKIAlzdHJ1Y3Qgc3N0X2hzdyAqaHN3ID0gcGRhdGEtPmhzdzsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXNuZF9wY21fdWZyYW1lc190IHBvczsKKwlpbnQgZGFpOworCisJZGFpID0gbW9kX21hcFtydGQtPmNwdV9kYWktPmlkXS5kYWlfaWQ7CisJcGNtX2RhdGEgPSAmcGRhdGEtPnBjbVtkYWldW3N1YnN0cmVhbS0+c3RyZWFtXTsKKwlzc3Rfc3RyZWFtID0gcGNtX2RhdGEtPnN0cmVhbTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCXNzdF9oc3dfc3RyZWFtX3NldF9zaWxlbmNlX3N0YXJ0KGhzdywgc3N0X3N0cmVhbSwgZmFsc2UpOwogCQlzc3RfaHN3X3N0cmVhbV9yZXN1bWUoaHN3LCBwY21fZGF0YS0+c3RyZWFtLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVE9QOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1BVU0g6CisJCXNzdF9oc3dfc3RyZWFtX3NldF9zaWxlbmNlX3N0YXJ0KGhzdywgc3N0X3N0cmVhbSwgZmFsc2UpOwogCQlzc3RfaHN3X3N0cmVhbV9wYXVzZShoc3csIHBjbV9kYXRhLT5zdHJlYW0sIDApOwogCQlicmVhazsKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX0RSQUlOOgorCQlwb3MgPSBydW50aW1lLT5jb250cm9sLT5hcHBsX3B0ciAlIHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCQlzc3RfaHN3X3N0cmVhbV9zZXRfb2xkX3Bvc2l0aW9uKGhzdywgcGNtX2RhdGEtPnN0cmVhbSwgcG9zKTsKKwkJc3N0X2hzd19zdHJlYW1fc2V0X3NpbGVuY2Vfc3RhcnQoaHN3LCBzc3Rfc3RyZWFtLCB0cnVlKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtNTc5LDEzICs2MjMsNjIgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9IHBjbV9kYXRhLT5zdWJzdHJlYW07CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhzd19wcml2X2RhdGEgKnBkYXRhID0KKwkJc25kX3NvY19wbGF0Zm9ybV9nZXRfZHJ2ZGF0YShydGQtPnBsYXRmb3JtKTsKKwlzdHJ1Y3Qgc3N0X2hzdyAqaHN3ID0gcGRhdGEtPmhzdzsKIAl1MzIgcG9zOworCXNuZF9wY21fdWZyYW1lc190IHBvc2l0aW9uID0gYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsCisJCSBzc3RfaHN3X2dldF9kc3BfcG9zaXRpb24oaHN3LCBwY21fZGF0YS0+c3RyZWFtKSk7CisJdW5zaWduZWQgY2hhciAqZG1hX2FyZWEgPSBydW50aW1lLT5kbWFfYXJlYTsKKwlzbmRfcGNtX3VmcmFtZXNfdCBkbWFfZnJhbWVzID0KKwkJYnl0ZXNfdG9fZnJhbWVzKHJ1bnRpbWUsIHJ1bnRpbWUtPmRtYV9ieXRlcyk7CisJc25kX3BjbV91ZnJhbWVzX3Qgb2xkX3Bvc2l0aW9uOworCXNzaXplX3Qgc2FtcGxlczsKIAogCXBvcyA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLAogCQkocnVudGltZS0+Y29udHJvbC0+YXBwbF9wdHIgJSBydW50aW1lLT5idWZmZXJfc2l6ZSkpOwogCiAJZGV2X3ZkYmcocnRkLT5kZXYsICJQQ006IEFwcCBwb2ludGVyICVkIGJ5dGVzXG4iLCBwb3MpOwogCisJLyogU1NUIGZ3IGRvbid0IGtub3cgd2hlcmUgdG8gc3RvcCBkbWEKKwkgKiBTbywgU1NUIGRyaXZlciBuZWVkIHRvIGNsZWFuIHRoZSBkYXRhIHdoaWNoIGhhcyBiZWVuIGNvbnN1bWVkCisJICovCisJaWYgKGRtYV9hcmVhID09IE5VTEwgfHwgZG1hX2ZyYW1lcyA8PSAwCisJCXx8IChzdWJzdHJlYW0tPnN0cmVhbSA9PSBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpCisJCXx8ICFzc3RfaHN3X3N0cmVhbV9nZXRfc2lsZW5jZV9zdGFydChoc3csIHN0cmVhbSkpIHsKKwkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCQlyZXR1cm4gcG9zOworCX0KKworCW9sZF9wb3NpdGlvbiA9IHNzdF9oc3dfc3RyZWFtX2dldF9vbGRfcG9zaXRpb24oaHN3LCBzdHJlYW0pOworCWlmIChwb3NpdGlvbiA+IG9sZF9wb3NpdGlvbikgeworCQlpZiAocG9zaXRpb24gPCBkbWFfZnJhbWVzKSB7CisJCQlzYW1wbGVzID0gU1NUX1NBTVBMRVMocnVudGltZSwgcG9zaXRpb24gLSBvbGRfcG9zaXRpb24pOworCQkJc25kX3BjbV9mb3JtYXRfc2V0X3NpbGVuY2UocnVudGltZS0+Zm9ybWF0LAorCQkJCVNTVF9PTERfUE9TSVRJT04oZG1hX2FyZWEsCisJCQkJCXJ1bnRpbWUsIG9sZF9wb3NpdGlvbiksCisJCQkJc2FtcGxlcyk7CisJCX0gZWxzZQorCQkJZGV2X2VycihydGQtPmRldiwgIlBDTTogcG9zaXRpb24gaXMgd3JvbmdcbiIpOworCX0gZWxzZSB7CisJCWlmIChvbGRfcG9zaXRpb24gPCBkbWFfZnJhbWVzKSB7CisJCQlzYW1wbGVzID0gU1NUX1NBTVBMRVMocnVudGltZSwKKwkJCQlkbWFfZnJhbWVzIC0gb2xkX3Bvc2l0aW9uKTsKKwkJCXNuZF9wY21fZm9ybWF0X3NldF9zaWxlbmNlKHJ1bnRpbWUtPmZvcm1hdCwKKwkJCQlTU1RfT0xEX1BPU0lUSU9OKGRtYV9hcmVhLAorCQkJCQlydW50aW1lLCBvbGRfcG9zaXRpb24pLAorCQkJCXNhbXBsZXMpOworCQl9IGVsc2UKKwkJCWRldl9lcnIocnRkLT5kZXYsICJQQ006IGRtYV9ieXRlcyBpcyB3cm9uZ1xuIik7CisJCWlmIChwb3NpdGlvbiA8IGRtYV9mcmFtZXMpIHsKKwkJCXNhbXBsZXMgPSBTU1RfU0FNUExFUyhydW50aW1lLCBwb3NpdGlvbik7CisJCQlzbmRfcGNtX2Zvcm1hdF9zZXRfc2lsZW5jZShydW50aW1lLT5mb3JtYXQsCisJCQkJZG1hX2FyZWEsIHNhbXBsZXMpOworCQl9IGVsc2UKKwkJCWRldl9lcnIocnRkLT5kZXYsICJQQ006IHBvc2l0aW9uIGlzIHdyb25nXG4iKTsKKwl9CisJc3N0X2hzd19zdHJlYW1fc2V0X29sZF9wb3NpdGlvbihoc3csIHN0cmVhbSwgcG9zaXRpb24pOworCiAJLyogbGV0IGFsc2Ega25vdyB3ZSBoYXZlIHBsYXkgYSBwZXJpb2QgKi8KIAlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHN1YnN0cmVhbSk7CiAJcmV0dXJuIHBvczsKQEAgLTU5NywxMSArNjkwLDE2IEBACiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlzdHJ1Y3QgaHN3X3ByaXZfZGF0YSAqcGRhdGEgPQogCQlzbmRfc29jX3BsYXRmb3JtX2dldF9kcnZkYXRhKHJ0ZC0+cGxhdGZvcm0pOwotCXN0cnVjdCBoc3dfcGNtX2RhdGEgKnBjbV9kYXRhID0gc25kX3NvY19wY21fZ2V0X2RydmRhdGEocnRkKTsKKwlzdHJ1Y3QgaHN3X3BjbV9kYXRhICpwY21fZGF0YTsKIAlzdHJ1Y3Qgc3N0X2hzdyAqaHN3ID0gcGRhdGEtPmhzdzsKIAlzbmRfcGNtX3VmcmFtZXNfdCBvZmZzZXQ7CiAJdWludDY0X3QgcHBvczsKLQl1MzIgcG9zaXRpb24gPSBzc3RfaHN3X2dldF9kc3BfcG9zaXRpb24oaHN3LCBwY21fZGF0YS0+c3RyZWFtKTsKKwl1MzIgcG9zaXRpb247CisJaW50IGRhaTsKKworCWRhaSA9IG1vZF9tYXBbcnRkLT5jcHVfZGFpLT5pZF0uZGFpX2lkOworCXBjbV9kYXRhID0gJnBkYXRhLT5wY21bZGFpXVtzdWJzdHJlYW0tPnN0cmVhbV07CisJcG9zaXRpb24gPSBzc3RfaHN3X2dldF9kc3BfcG9zaXRpb24oaHN3LCBwY21fZGF0YS0+c3RyZWFtKTsKIAogCW9mZnNldCA9IGJ5dGVzX3RvX2ZyYW1lcyhydW50aW1lLCBwb3NpdGlvbik7CiAJcHBvcyA9IHNzdF9oc3dfZ2V0X2RzcF9wcmVzZW50YXRpb25fcG9zaXRpb24oaHN3LCBwY21fZGF0YS0+c3RyZWFtKTsKQEAgLTYxOCw4ICs3MTYsMTAgQEAKIAkJc25kX3NvY19wbGF0Zm9ybV9nZXRfZHJ2ZGF0YShydGQtPnBsYXRmb3JtKTsKIAlzdHJ1Y3QgaHN3X3BjbV9kYXRhICpwY21fZGF0YTsKIAlzdHJ1Y3Qgc3N0X2hzdyAqaHN3ID0gcGRhdGEtPmhzdzsKKwlpbnQgZGFpOwogCi0JcGNtX2RhdGEgPSAmcGRhdGEtPnBjbVtydGQtPmNwdV9kYWktPmlkXTsKKwlkYWkgPSBtb2RfbWFwW3J0ZC0+Y3B1X2RhaS0+aWRdLmRhaV9pZDsKKwlwY21fZGF0YSA9ICZwZGF0YS0+cGNtW2RhaV1bc3Vic3RyZWFtLT5zdHJlYW1dOwogCiAJbXV0ZXhfbG9jaygmcGNtX2RhdGEtPm11dGV4KTsKIAlwbV9ydW50aW1lX2dldF9zeW5jKHBkYXRhLT5kZXYpOwpAQCAtNjQ4LDkgKzc0OCwxMiBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgaHN3X3ByaXZfZGF0YSAqcGRhdGEgPQogCQlzbmRfc29jX3BsYXRmb3JtX2dldF9kcnZkYXRhKHJ0ZC0+cGxhdGZvcm0pOwotCXN0cnVjdCBoc3dfcGNtX2RhdGEgKnBjbV9kYXRhID0gc25kX3NvY19wY21fZ2V0X2RydmRhdGEocnRkKTsKKwlzdHJ1Y3QgaHN3X3BjbV9kYXRhICpwY21fZGF0YTsKIAlzdHJ1Y3Qgc3N0X2hzdyAqaHN3ID0gcGRhdGEtPmhzdzsKLQlpbnQgcmV0OworCWludCByZXQsIGRhaTsKKworCWRhaSA9IG1vZF9tYXBbcnRkLT5jcHVfZGFpLT5pZF0uZGFpX2lkOworCXBjbV9kYXRhID0gJnBkYXRhLT5wY21bZGFpXVtzdWJzdHJlYW0tPnN0cmVhbV07CiAKIAltdXRleF9sb2NrKCZwY21fZGF0YS0+bXV0ZXgpOwogCXJldCA9IHNzdF9oc3dfc3RyZWFtX3Jlc2V0KGhzdywgcGNtX2RhdGEtPnN0cmVhbSk7CkBAIC02ODUsMTUgKzc4OCw2IEBACiAJLnBhZ2UJCT0gc25kX3BjbV9zZ2J1Zl9vcHNfcGFnZSwKIH07CiAKLS8qIHN0YXRpYyBtYXBwaW5ncyBiZXR3ZWVuIFBDTXMgYW5kIG1vZHVsZXMgLSBtYXkgYmUgZHluYW1pYyBpbiBmdXR1cmUgKi8KLXN0YXRpYyBzdHJ1Y3QgaHN3X3BjbV9tb2R1bGVfbWFwIG1vZF9tYXBbXSA9IHsKLQl7SFNXX1BDTV9EQUlfSURfU1lTVEVNLCBTU1RfSFNXX01PRFVMRV9QQ01fU1lTVEVNfSwKLQl7SFNXX1BDTV9EQUlfSURfT0ZGTE9BRDAsIFNTVF9IU1dfTU9EVUxFX1BDTX0sCi0Je0hTV19QQ01fREFJX0lEX09GRkxPQUQxLCBTU1RfSFNXX01PRFVMRV9QQ019LAotCXtIU1dfUENNX0RBSV9JRF9MT09QQkFDSywgU1NUX0hTV19NT0RVTEVfUENNX1JFRkVSRU5DRX0sCi0Je0hTV19QQ01fREFJX0lEX0NBUFRVUkUsIFNTVF9IU1dfTU9EVUxFX1BDTV9DQVBUVVJFfSwKLX07Ci0KIHN0YXRpYyBpbnQgaHN3X3BjbV9jcmVhdGVfbW9kdWxlcyhzdHJ1Y3QgaHN3X3ByaXZfZGF0YSAqcGRhdGEpCiB7CiAJc3RydWN0IHNzdF9oc3cgKmhzdyA9IHBkYXRhLT5oc3c7CkBAIC03MDEsNyArNzk1LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1vZF9tYXApOyBpKyspIHsKLQkJcGNtX2RhdGEgPSAmcGRhdGEtPnBjbVtpXTsKKwkJcGNtX2RhdGEgPSAmcGRhdGEtPnBjbVttb2RfbWFwW2ldLmRhaV9pZF1bbW9kX21hcFtpXS5zdHJlYW1dOwogCiAJCS8qIGNyZWF0ZSBuZXcgcnVudGltZSBtb2R1bGUsIHVzZSBzYW1lIG9mZnNldCBpZiByZWNyZWF0ZWQgKi8KIAkJcGNtX2RhdGEtPnJ1bnRpbWUgPSBzc3RfaHN3X3J1bnRpbWVfbW9kdWxlX2NyZWF0ZShoc3csCkBAIC03MTYsNyArODEwLDcgQEAKIAogZXJyOgogCWZvciAoLS1pOyBpID49IDA7IGktLSkgewotCQlwY21fZGF0YSA9ICZwZGF0YS0+cGNtW2ldOworCQlwY21fZGF0YSA9ICZwZGF0YS0+cGNtW21vZF9tYXBbaV0uZGFpX2lkXVttb2RfbWFwW2ldLnN0cmVhbV07CiAJCXNzdF9oc3dfcnVudGltZV9tb2R1bGVfZnJlZShwY21fZGF0YS0+cnVudGltZSk7CiAJfQogCkBAIC03MjksMTcgKzgyMywxMiBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobW9kX21hcCk7IGkrKykgewotCQlwY21fZGF0YSA9ICZwZGF0YS0+cGNtW2ldOworCQlwY21fZGF0YSA9ICZwZGF0YS0+cGNtW21vZF9tYXBbaV0uZGFpX2lkXVttb2RfbWFwW2ldLnN0cmVhbV07CiAKIAkJc3N0X2hzd19ydW50aW1lX21vZHVsZV9mcmVlKHBjbV9kYXRhLT5ydW50aW1lKTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGhzd19wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQotewotCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX2ZyZWVfZm9yX2FsbChwY20pOwotfQotCiBzdGF0aWMgaW50IGhzd19wY21fbmV3KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9wY20gKnBjbSA9IHJ0ZC0+cGNtOwpAQCAtNzYyLDcgKzg1MSwxMCBAQAogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KLQlwcml2X2RhdGEtPnBjbVtydGQtPmNwdV9kYWktPmlkXS5oc3dfcGNtID0gcGNtOworCWlmIChwY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uc3Vic3RyZWFtKQorCQlwcml2X2RhdGEtPnBjbVtydGQtPmNwdV9kYWktPmlkXVtTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLXS5oc3dfcGNtID0gcGNtOworCWlmIChwY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5zdWJzdHJlYW0pCisJCXByaXZfZGF0YS0+cGNtW3J0ZC0+Y3B1X2RhaS0+aWRdW1NORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRV0uaHN3X3BjbSA9IHBjbTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04NzEsMTAgKzk2Myw5IEBACiAJLyogYWxsb2NhdGUgRFNQIGJ1ZmZlciBwYWdlIHRhYmxlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhzd19kYWlzKTsgaSsrKSB7CiAKLQkJbXV0ZXhfaW5pdCgmcHJpdl9kYXRhLT5wY21baV0ubXV0ZXgpOwotCiAJCS8qIHBsYXliYWNrICovCiAJCWlmIChoc3dfZGFpc1tpXS5wbGF5YmFjay5jaGFubmVsc19taW4pIHsKKwkJCW11dGV4X2luaXQoJnByaXZfZGF0YS0+cGNtW2ldW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLm11dGV4KTsKIAkJCXJldCA9IHNuZF9kbWFfYWxsb2NfcGFnZXMoU05EUlZfRE1BX1RZUEVfREVWLCBkbWFfZGV2LAogCQkJCVBBR0VfU0laRSwgJnByaXZfZGF0YS0+ZG1hYltpXVswXSk7CiAJCQlpZiAocmV0IDwgMCkKQEAgLTg4Myw2ICs5NzQsNyBAQAogCiAJCS8qIGNhcHR1cmUgKi8KIAkJaWYgKGhzd19kYWlzW2ldLmNhcHR1cmUuY2hhbm5lbHNfbWluKSB7CisJCQltdXRleF9pbml0KCZwcml2X2RhdGEtPnBjbVtpXVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLm11dGV4KTsKIAkJCXJldCA9IHNuZF9kbWFfYWxsb2NfcGFnZXMoU05EUlZfRE1BX1RZUEVfREVWLCBkbWFfZGV2LAogCQkJCVBBR0VfU0laRSwgJnByaXZfZGF0YS0+ZG1hYltpXVsxXSk7CiAJCQlpZiAocmV0IDwgMCkKQEAgLTkzNiw3ICsxMDI4LDYgQEAKIAkucmVtb3ZlCQk9IGhzd19wY21fcmVtb3ZlLAogCS5vcHMJCT0gJmhzd19wY21fb3BzLAogCS5wY21fbmV3CT0gaHN3X3BjbV9uZXcsCi0JLnBjbV9mcmVlCT0gaHN3X3BjbV9mcmVlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudF9kcml2ZXIgaHN3X2RhaV9jb21wb25lbnQgPSB7CkBAIC0xMDEwLDEyICsxMTAxLDEyIEBACiAJc3RydWN0IGhzd19wcml2X2RhdGEgKnBkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IHNzdF9oc3cgKmhzdyA9IHBkYXRhLT5oc3c7CiAKLQlpZiAocGRhdGEtPnBtX3N0YXRlID09IEhTV19QTV9TVEFURV9EMykKKwlpZiAocGRhdGEtPnBtX3N0YXRlID49IEhTV19QTV9TVEFURV9SVEQzKQogCQlyZXR1cm4gMDsKIAogCXNzdF9oc3dfZHNwX3J1bnRpbWVfc3VzcGVuZChoc3cpOwogCXNzdF9oc3dfZHNwX3J1bnRpbWVfc2xlZXAoaHN3KTsKLQlwZGF0YS0+cG1fc3RhdGUgPSBIU1dfUE1fU1RBVEVfRDM7CisJcGRhdGEtPnBtX3N0YXRlID0gSFNXX1BNX1NUQVRFX1JURDM7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMjYsNyArMTExNyw3IEBACiAJc3RydWN0IHNzdF9oc3cgKmhzdyA9IHBkYXRhLT5oc3c7CiAJaW50IHJldDsKIAotCWlmIChwZGF0YS0+cG1fc3RhdGUgPT0gSFNXX1BNX1NUQVRFX0QwKQorCWlmIChwZGF0YS0+cG1fc3RhdGUgIT0gSFNXX1BNX1NUQVRFX1JURDMpCiAJCXJldHVybiAwOwogCiAJcmV0ID0gc3N0X2hzd19kc3BfbG9hZChoc3cpOwpAQCAtMTA2Niw3ICsxMTU3LDcgQEAKIAlzdHJ1Y3QgaHN3X3BjbV9kYXRhICpwY21fZGF0YTsKIAlpbnQgaSwgZXJyOwogCi0JaWYgKHBkYXRhLT5wbV9zdGF0ZSA9PSBIU1dfUE1fU1RBVEVfRDApCisJaWYgKHBkYXRhLT5wbV9zdGF0ZSAhPSBIU1dfUE1fU1RBVEVfRDMpCiAJCXJldHVybjsKIAogCWVyciA9IHNzdF9oc3dfZHNwX2xvYWQoaHN3KTsKQEAgLTEwODEsOCArMTE3Miw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgSFNXX1BDTV9EQUlfSURfQ0FQVFVSRSArIDE7IGkrKykgewotCQlwY21fZGF0YSA9ICZwZGF0YS0+cGNtW2ldOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1vZF9tYXApOyBpKyspIHsKKwkJcGNtX2RhdGEgPSAmcGRhdGEtPnBjbVttb2RfbWFwW2ldLmRhaV9pZF1bbW9kX21hcFtpXS5zdHJlYW1dOwogCiAJCWlmICghcGNtX2RhdGEtPnN1YnN0cmVhbSkKIAkJCWNvbnRpbnVlOwpAQCAtMTExNCw0MSArMTIwNSw0MiBAQAogCiAJaWYgKHBkYXRhLT5wbV9zdGF0ZSA9PSBIU1dfUE1fU1RBVEVfRDMpCiAJCXJldHVybiAwOwotCS8qIHN1c3BlbmQgYWxsIGFjdGl2ZSBzdHJlYW1zICovCi0JZm9yIChpID0gMDsgaSA8IEhTV19QQ01fREFJX0lEX0NBUFRVUkUgKyAxOyBpKyspIHsKLQkJcGNtX2RhdGEgPSAmcGRhdGEtPnBjbVtpXTsKKwllbHNlIGlmIChwZGF0YS0+cG1fc3RhdGUgPT0gSFNXX1BNX1NUQVRFX0QwKSB7CisJCS8qIHN1c3BlbmQgYWxsIGFjdGl2ZSBzdHJlYW1zICovCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1vZF9tYXApOyBpKyspIHsKKwkJCXBjbV9kYXRhID0gJnBkYXRhLT5wY21bbW9kX21hcFtpXS5kYWlfaWRdW21vZF9tYXBbaV0uc3RyZWFtXTsKIAotCQlpZiAoIXBjbV9kYXRhLT5zdWJzdHJlYW0pCi0JCQljb250aW51ZTsKLQkJZGV2X2RiZyhkZXYsICJzdXNwZW5kaW5nIHBjbSAlZFxuIiwgaSk7Ci0JCXNuZF9wY21fc3VzcGVuZF9hbGwocGNtX2RhdGEtPmhzd19wY20pOworCQkJaWYgKCFwY21fZGF0YS0+c3Vic3RyZWFtKQorCQkJCWNvbnRpbnVlOworCQkJZGV2X2RiZyhkZXYsICJzdXNwZW5kaW5nIHBjbSAlZFxuIiwgaSk7CisJCQlzbmRfcGNtX3N1c3BlbmRfYWxsKHBjbV9kYXRhLT5oc3dfcGNtKTsKIAotCQkvKiBXZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIERTUCBGVyBzdG9wcyB0aGUgc3RyZWFtcyAqLwotCQltc2xlZXAoMik7CisJCQkvKiBXZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIERTUCBGVyBzdG9wcyB0aGUgc3RyZWFtcyAqLworCQkJbXNsZWVwKDIpOworCQl9CisKKwkJLyogcHJlc2VydmUgcGVyc2lzdGVudCBtZW1vcnkgKi8KKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobW9kX21hcCk7IGkrKykgeworCQkJcGNtX2RhdGEgPSAmcGRhdGEtPnBjbVttb2RfbWFwW2ldLmRhaV9pZF1bbW9kX21hcFtpXS5zdHJlYW1dOworCisJCQlpZiAoIXBjbV9kYXRhLT5zdWJzdHJlYW0pCisJCQkJY29udGludWU7CisKKwkJCWRldl9kYmcoZGV2LCAic2F2aW5nIGNvbnRleHQgcGNtICVkXG4iLCBpKTsKKwkJCWVyciA9IHNzdF9tb2R1bGVfcnVudGltZV9zYXZlKHBjbV9kYXRhLT5ydW50aW1lLAorCQkJCSZwY21fZGF0YS0+Y29udGV4dCk7CisJCQlpZiAoZXJyIDwgMCkKKwkJCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzYXZlIGNvbnRleHQgZm9yIFBDTSAlZFxuIiwgaSk7CisJCX0KKwkJLyogZW50ZXIgRDMgc3RhdGUgYW5kIHN0YWxsICovCisJCXNzdF9oc3dfZHNwX3J1bnRpbWVfc3VzcGVuZChoc3cpOworCQkvKiBwdXQgdGhlIERTUCB0byBzbGVlcCAqLworCQlzc3RfaHN3X2RzcF9ydW50aW1lX3NsZWVwKGhzdyk7CiAJfQogCiAJc25kX3NvY19zdXNwZW5kKHBkYXRhLT5zb2NfY2FyZC0+ZGV2KTsKIAlzbmRfc29jX3Bvd2Vyb2ZmKHBkYXRhLT5zb2NfY2FyZC0+ZGV2KTsKIAotCS8qIGVudGVyIEQzIHN0YXRlIGFuZCBzdGFsbCAqLwotCXNzdF9oc3dfZHNwX3J1bnRpbWVfc3VzcGVuZChoc3cpOwotCi0JLyogcHJlc2VydmUgcGVyc2lzdGVudCBtZW1vcnkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgSFNXX1BDTV9EQUlfSURfQ0FQVFVSRSArIDE7IGkrKykgewotCQlwY21fZGF0YSA9ICZwZGF0YS0+cGNtW2ldOwotCi0JCWlmICghcGNtX2RhdGEtPnN1YnN0cmVhbSkKLQkJCWNvbnRpbnVlOwotCi0JCWRldl9kYmcoZGV2LCAic2F2aW5nIGNvbnRleHQgcGNtICVkXG4iLCBpKTsKLQkJZXJyID0gc3N0X21vZHVsZV9ydW50aW1lX3NhdmUocGNtX2RhdGEtPnJ1bnRpbWUsCi0JCQkmcGNtX2RhdGEtPmNvbnRleHQpOwotCQlpZiAoZXJyIDwgMCkKLQkJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHNhdmUgY29udGV4dCBmb3IgUENNICVkXG4iLCBpKTsKLQl9Ci0KLQkvKiBwdXQgdGhlIERTUCB0byBzbGVlcCAqLwotCXNzdF9oc3dfZHNwX3J1bnRpbWVfc2xlZXAoaHN3KTsKIAlwZGF0YS0+cG1fc3RhdGUgPSBIU1dfUE1fU1RBVEVfRDM7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9zc3QtbWZsZC1wbGF0Zm9ybS1wY20uYyBiL3NvdW5kL3NvYy9pbnRlbC9zc3QtbWZsZC1wbGF0Zm9ybS1wY20uYwppbmRleCBhMWE4ZDlkLi43NTIzY2JlIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvc3N0LW1mbGQtcGxhdGZvcm0tcGNtLmMKKysrIGIvc291bmQvc29jL2ludGVsL3NzdC1tZmxkLXBsYXRmb3JtLXBjbS5jCkBAIC02NDMsMTIgKzY0Myw2IEBACiAJLnBvaW50ZXIgPSBzc3RfcGxhdGZvcm1fcGNtX3BvaW50ZXIsCiB9OwogCi1zdGF0aWMgdm9pZCBzc3RfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKLXsKLQlkZXZfZGJnKHBjbS0+ZGV2LCAic3N0X3BjbV9mcmVlIGNhbGxlZFxuIik7Ci0Jc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfZnJlZV9mb3JfYWxsKHBjbSk7Ci19Ci0KIHN0YXRpYyBpbnQgc3N0X3BjbV9uZXcoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSA9IHJ0ZC0+Y3B1X2RhaTsKQEAgLTY3OSw3ICs2NzMsNiBAQAogCS5vcHMJCT0gJnNzdF9wbGF0Zm9ybV9vcHMsCiAJLmNvbXByX29wcwk9ICZzc3RfcGxhdGZvcm1fY29tcHJfb3BzLAogCS5wY21fbmV3CT0gc3N0X3BjbV9uZXcsCi0JLnBjbV9mcmVlCT0gc3N0X3BjbV9mcmVlLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2NvbXBvbmVudF9kcml2ZXIgc3N0X2NvbXBvbmVudCA9IHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9zc3Qvc3N0LmggYi9zb3VuZC9zb2MvaW50ZWwvc3N0L3NzdC5oCmluZGV4IDdmNGJiZmMuLjU2MmJjNDggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9zc3Qvc3N0LmgKKysrIGIvc291bmQvc29jL2ludGVsL3NzdC9zc3QuaApAQCAtNTgsNiArNTgsNyBAQAogI2RlZmluZSBTU1RfQkxPQ0tfVElNRU9VVAkxMDAwCiAKICNkZWZpbmUgRldfU0lHTkFUVVJFX1NJWkUJNAorI2RlZmluZSBGV19OQU1FX1NJWkUJCTMyCiAKIC8qIHN0cmVhbSBzdGF0ZXMgKi8KIGVudW0gc3N0X3N0cmVhbV9zdGF0ZXMgewpAQCAtNDI2LDcgKzQyNyw3IEBACiAJICogSG9sZGVyIGZvciBmaXJtd2FyZSBuYW1lLiBEdWUgdG8gYXN5bmMgY2FsbCBpdCBuZWVkcyB0byBiZQogCSAqIHBlcnNpc3RlbnQgdGlsbCB3b3JrZXIgdGhyZWFkIGdldHMgY2FsbGVkCiAJICovCi0JY2hhciBmaXJtd2FyZV9uYW1lWzIwXTsKKwljaGFyIGZpcm13YXJlX25hbWVbRldfTkFNRV9TSVpFXTsKIH07CiAKIC8qIG1pc2MgZGVmaW5pdGlvbnMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9pbnRlbC9zc3Qvc3N0X2FjcGkuYyBiL3NvdW5kL3NvYy9pbnRlbC9zc3Qvc3N0X2FjcGkuYwppbmRleCAyYWM3MmViLi5iNzgyZGZkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvaW50ZWwvc3N0L3NzdF9hY3BpLmMKKysrIGIvc291bmQvc29jL2ludGVsL3NzdC9zc3RfYWNwaS5jCkBAIC00Nyw3ICs0Nyw3IEBACiAJY2hhciBib2FyZFszMl07CiAJY2hhciBtYWNoaW5lWzMyXTsKIAl2b2lkICgqbWFjaGluZV9xdWlyaykodm9pZCk7Ci0JY2hhciBmaXJtd2FyZVszMl07CisJY2hhciBmaXJtd2FyZVtGV19OQU1FX1NJWkVdOwogCXN0cnVjdCBzc3RfcGxhdGZvcm1faW5mbyAqcGRhdGE7CiAKIH07CkBAIC0yNDUsNyArMjQ1LDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotaW50IHNzdF9hY3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IHNzdF9hY3BpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlpbnQgcmV0ID0gMDsKQEAgLTMzMiw3ICszMzIsNyBAQAogKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBPUyB3aGVuIGEgZGV2aWNlIGlzIHVubG9hZGVkCiAqIFRoaXMgZnJlZXMgdGhlIGludGVycnVwdCBldGMKICovCi1pbnQgc3N0X2FjcGlfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IHNzdF9hY3BpX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBpbnRlbF9zc3RfZHJ2ICpjdHg7CiAKQEAgLTM1MCw3ICszNTAsOSBAQAogCiAvKiBDaGVycnl2aWV3LWJhc2VkIHBsYXRmb3JtczogQ2hlcnJ5VHJhaWwgYW5kIEJyYXN3ZWxsICovCiBzdGF0aWMgc3RydWN0IHNzdF9tYWNoaW5lcyBzc3RfYWNwaV9jaHZbXSA9IHsKLQl7IjEwRUM1NjcwIiwgImNodC1ic3ciLCAiY2h0LWJzdy1ydDU2NzIiLCBOVUxMLCAiZndfc3N0XzIyYTguYmluIiwKKwl7IjEwRUM1NjcwIiwgImNodC1ic3ciLCAiY2h0LWJzdy1ydDU2NzIiLCBOVUxMLCAiaW50ZWwvZndfc3N0XzIyYTguYmluIiwKKwkJCQkJCSZjaHZfcGxhdGZvcm1fZGF0YSB9LAorCXsiMTBFQzU2NDUiLCAiY2h0LWJzdyIsICJjaHQtYnN3LXJ0NTY0NSIsIE5VTEwsICJpbnRlbC9md19zc3RfMjJhOC5iaW4iLAogCQkJCQkJJmNodl9wbGF0Zm9ybV9kYXRhIH0sCiAJe30sCiB9OwpAQCAtMzY2LDcgKzM2OCw2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzc3RfYWNwaV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUJCQk9ICJpbnRlbF9zc3RfYWNwaSIsCi0JCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJCS5hY3BpX21hdGNoX3RhYmxlCT0gQUNQSV9QVFIoc3N0X2FjcGlfaWRzKSwKIAkJLnBtCQkJPSAmaW50ZWxfc3N0X3BtLAogCX0sCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW50ZWwvc3N0L3NzdF9sb2FkZXIuYyBiL3NvdW5kL3NvYy9pbnRlbC9zc3Qvc3N0X2xvYWRlci5jCmluZGV4IGI1ODBmOTYuLjc4ODhjZDcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbnRlbC9zc3Qvc3N0X2xvYWRlci5jCisrKyBiL3NvdW5kL3NvYy9pbnRlbC9zc3Qvc3N0X2xvYWRlci5jCkBAIC0zMjQsOCArMzI0LDcgQEAKIAogCWlmIChjdHgtPnNzdF9zdGF0ZSAhPSBTU1RfUkVTRVQgfHwKIAkJCWN0eC0+ZndfaW5fbWVtICE9IE5VTEwpIHsKLQkJaWYgKGZ3ICE9IE5VTEwpCi0JCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJCW11dGV4X3VubG9jaygmY3R4LT5zc3RfbG9jayk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvano0NzQwL2p6NDc0MC1pMnMuYyBiL3NvdW5kL3NvYy9qejQ3NDAvano0NzQwLWkycy5jCmluZGV4IGQzZDQ1YzYuLjA3Zjc3ODEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9qejQ3NDAvano0NzQwLWkycy5jCisrKyBiL3NvdW5kL3NvYy9qejQ3NDAvano0NzQwLWkycy5jCkBAIC0xNCw2ICsxNCw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtODMsNiArODUsOCBAQAogI2RlZmluZSBKWl9BSUNfSTJTX1NUQVRVU19CVVNZIEJJVCgyKQogCiAjZGVmaW5lIEpaX0FJQ19DTEtfRElWX01BU0sgMHhmCisjZGVmaW5lIEkyU0RJVl9EVl9TSElGVCA4CisjZGVmaW5lIEkyU0RJVl9EVl9NQVNLICgweGYgPDwgSTJTRElWX0RWX1NISUZUKQogCiBzdHJ1Y3Qgano0NzQwX2kycyB7CiAJc3RydWN0IHJlc291cmNlICptZW07CkBAIC0yMzcsMTAgKzI0MSwxNCBAQAogewogCXN0cnVjdCBqejQ3NDBfaTJzICppMnMgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOwogCXVuc2lnbmVkIGludCBzYW1wbGVfc2l6ZTsKLQl1aW50MzJfdCBjdHJsOworCXVpbnQzMl90IGN0cmwsIGRpdl9yZWc7CisJaW50IGRpdjsKIAogCWN0cmwgPSBqejQ3NDBfaTJzX3JlYWQoaTJzLCBKWl9SRUdfQUlDX0NUUkwpOwogCisJZGl2X3JlZyA9IGp6NDc0MF9pMnNfcmVhZChpMnMsIEpaX1JFR19BSUNfQ0xLX0RJVik7CisJZGl2ID0gY2xrX2dldF9yYXRlKGkycy0+Y2xrX2kycykgLyAoNjQgKiBwYXJhbXNfcmF0ZShwYXJhbXMpKTsKKwogCXN3aXRjaCAocGFyYW1zX2Zvcm1hdChwYXJhbXMpKSB7CiAJY2FzZSBTTkRSVl9QQ01fRk9STUFUX1M4OgogCQlzYW1wbGVfc2l6ZSA9IDA7CkBAIC0yNjQsNyArMjcyLDEwIEBACiAJCWN0cmwgfD0gc2FtcGxlX3NpemUgPDwgSlpfQUlDX0NUUkxfSU5QVVRfU0FNUExFX1NJWkVfT0ZGU0VUOwogCX0KIAorCWRpdl9yZWcgJj0gfkkyU0RJVl9EVl9NQVNLOworCWRpdl9yZWcgfD0gKGRpdiAtIDEpIDw8IEkyU0RJVl9EVl9TSElGVDsKIAlqejQ3NDBfaTJzX3dyaXRlKGkycywgSlpfUkVHX0FJQ19DVFJMLCBjdHJsKTsKKwlqejQ3NDBfaTJzX3dyaXRlKGkycywgSlpfUkVHX0FJQ19DTEtfRElWLCBkaXZfcmVnKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDE1LDYgKzQyNiwxMyBAQAogCS5uYW1lCQk9ICJqejQ3NDAtaTJzIiwKIH07CiAKKyNpZmRlZiBDT05GSUdfT0YKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGp6NDc0MF9vZl9tYXRjaGVzW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJpbmdlbmljLGp6NDc0MC1pMnMiIH0sCisJeyAvKiBzZW50aW5lbCAqLyB9Cit9OworI2VuZGlmCisKIHN0YXRpYyBpbnQgano0NzQwX2kyc19kZXZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgano0NzQwX2kycyAqaTJzOwpAQCAtNDU1LDYgKzQ3Myw3IEBACiAJLnByb2JlID0gano0NzQwX2kyc19kZXZfcHJvYmUsCiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSAiano0NzQwLWkycyIsCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihqejQ3NDBfb2ZfbWF0Y2hlcykKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL214cy9teHMtc2FpZi5jIGIvc291bmQvc29jL214cy9teHMtc2FpZi5jCmluZGV4IGQ5ODY1MDguLmM4NjZhZGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9teHMvbXhzLXNhaWYuYworKysgYi9zb3VuZC9zb2MvbXhzL214cy1zYWlmLmMKQEAgLTcxMCw3ICs3MTAsNyBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvcmVzOwogCXN0cnVjdCBteHNfc2FpZiAqc2FpZjsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgaXJxLCByZXQgPSAwOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbWFzdGVyOwogCiAJaWYgKCFucCkKQEAgLTc2MywxNiArNzYzLDE2IEBACiAJaWYgKElTX0VSUihzYWlmLT5iYXNlKSkKIAkJcmV0dXJuIFBUUl9FUlIoc2FpZi0+YmFzZSk7CiAKLQlzYWlmLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmIChzYWlmLT5pcnEgPCAwKSB7Ci0JCXJldCA9IHNhaWYtPmlycTsKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCXJldCA9IGlycTsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBpcnEgcmVzb3VyY2U6ICVkXG4iLAogCQkJcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlzYWlmLT5kZXYgPSAmcGRldi0+ZGV2OwotCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgc2FpZi0+aXJxLCBteHNfc2FpZl9pcnEsIDAsCisJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBpcnEsIG14c19zYWlmX2lycSwgMCwKIAkJCSAgICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSwgc2FpZik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBpcnFcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL214cy9teHMtc2FpZi5oIGIvc291bmQvc29jL214cy9teHMtc2FpZi5oCmluZGV4IGZiYWY3YmEuLjlhNGMwYjIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9teHMvbXhzLXNhaWYuaAorKysgYi9zb3VuZC9zb2MvbXhzL214cy1zYWlmLmgKQEAgLTExNiw3ICsxMTYsNiBAQAogCXVuc2lnbmVkIGludCBtY2xrOwogCXVuc2lnbmVkIGludCBtY2xrX2luX3VzZTsKIAl2b2lkIF9faW9tZW0gKmJhc2U7Ci0JaW50IGlycTsKIAl1bnNpZ25lZCBpbnQgaWQ7CiAJdW5zaWduZWQgaW50IG1hc3Rlcl9pZDsKIAl1bnNpZ25lZCBpbnQgY3VyX3JhdGU7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvbXhzL214cy1zZ3RsNTAwMC5jIGIvc291bmQvc29jL214cy9teHMtc2d0bDUwMDAuYwppbmRleCA2ZjE5MTZiLi42ZTZmY2U2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvbXhzL214cy1zZ3RsNTAwMC5jCisrKyBiL3NvdW5kL3NvYy9teHMvbXhzLXNndGw1MDAwLmMKQEAgLTM2LDcgKzM2LDcgQEAKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKIAl1bnNpZ25lZCBpbnQgcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7Ci0JdTMyIGRhaV9mb3JtYXQsIG1jbGs7CisJdTMyIG1jbGs7CiAJaW50IHJldDsKIAogCS8qIHNndGw1MDAwIGRvZXMgbm90IHN1cHBvcnQgNTEyKnJhdGUgd2hlbiBpbiA5NjAwMCBmcyAqLwpAQCAtNjUsMjYgKzY1LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQkvKiBzZXQgY29kZWMgdG8gc2xhdmUgbW9kZSAqLwotCWRhaV9mb3JtYXQgPSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8Ci0JCQlTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOwotCi0JLyogc2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIGRhaV9mb3JtYXQpOwotCWlmIChyZXQpIHsKLQkJZGV2X2Vycihjb2RlY19kYWktPmRldiwgIkZhaWxlZCB0byBzZXQgZGFpIGZvcm1hdCB0byAlMDh4XG4iLAotCQkJZGFpX2Zvcm1hdCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgZGFpX2Zvcm1hdCk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKGNwdV9kYWktPmRldiwgIkZhaWxlZCB0byBzZXQgZGFpIGZvcm1hdCB0byAlMDh4XG4iLAotCQkJZGFpX2Zvcm1hdCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyLDE3ICs3MiwyMiBAQAogCS5od19wYXJhbXMgPSBteHNfc2d0bDUwMDBfaHdfcGFyYW1zLAogfTsKIAorI2RlZmluZSBNWFNfU0dUTDUwMDBfREFJX0ZNVCAoU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYgfCBcCisJU05EX1NPQ19EQUlGTVRfQ0JTX0NGUykKKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIG14c19zZ3RsNTAwMF9kYWlbXSA9IHsKIAl7CiAJCS5uYW1lCQk9ICJIaUZpIFR4IiwKIAkJLnN0cmVhbV9uYW1lCT0gIkhpRmkgUGxheWJhY2siLAogCQkuY29kZWNfZGFpX25hbWUJPSAic2d0bDUwMDAiLAorCQkuZGFpX2ZtdAk9IE1YU19TR1RMNTAwMF9EQUlfRk1ULAogCQkub3BzCQk9ICZteHNfc2d0bDUwMDBfaGlmaV9vcHMsCiAJCS5wbGF5YmFja19vbmx5CT0gdHJ1ZSwKIAl9LCB7CiAJCS5uYW1lCQk9ICJIaUZpIFJ4IiwKIAkJLnN0cmVhbV9uYW1lCT0gIkhpRmkgQ2FwdHVyZSIsCiAJCS5jb2RlY19kYWlfbmFtZQk9ICJzZ3RsNTAwMCIsCisJCS5kYWlfZm10CT0gTVhTX1NHVEw1MDAwX0RBSV9GTVQsCiAJCS5vcHMJCT0gJm14c19zZ3RsNTAwMF9oaWZpX29wcywKIAkJLmNhcHR1cmVfb25seQk9IHRydWUsCiAJfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9udWM5MDAvbnVjOTAwLXBjbS5jIGIvc291bmQvc29jL251YzkwMC9udWM5MDAtcGNtLmMKaW5kZXggYjc3OWEzZC4uYjgwOWZhOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL251YzkwMC9udWM5MDAtcGNtLmMKKysrIGIvc291bmQvc29jL251YzkwMC9udWM5MDAtcGNtLmMKQEAgLTMwNiwxMSArMzA2LDYgQEAKIAkubW1hcAkJPSBudWM5MDBfZG1hX21tYXAsCiB9OwogCi1zdGF0aWMgdm9pZCBudWM5MDBfZG1hX2ZyZWVfZG1hX2J1ZmZlcnMoc3RydWN0IHNuZF9wY20gKnBjbSkKLXsKLQlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9mcmVlX2Zvcl9hbGwocGNtKTsKLX0KLQogc3RhdGljIGludCBudWM5MDBfZG1hX25ldyhzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHJ0ZC0+Y2FyZC0+c25kX2NhcmQ7CkBAIC0zMzAsNyArMzI1LDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybV9kcml2ZXIgbnVjOTAwX3NvY19wbGF0Zm9ybSA9IHsKIAkub3BzCQk9ICZudWM5MDBfZG1hX29wcywKIAkucGNtX25ldwk9IG51YzkwMF9kbWFfbmV3LAotCS5wY21fZnJlZQk9IG51YzkwMF9kbWFfZnJlZV9kbWFfYnVmZmVycywKIH07CiAKIHN0YXRpYyBpbnQgbnVjOTAwX3NvY19wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL29tYXAvYW1zLWRlbHRhLmMgYi9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYwppbmRleCA0YzZhZmI3Li43MDY2MTMwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYworKysgYi9zb3VuZC9zb2Mvb21hcC9hbXMtZGVsdGEuYwpAQCAtNDEyLDIxICs0MTIsNyBAQAogICogb3ZlciB0aGUgbW9kZW0gcG9ydC4KICAqLwogCi1zdGF0aWMgaW50IGFtc19kZWx0YV9od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCi0JCQkgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCi0JLyogU2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldHVybiBzbmRfc29jX2RhaV9zZXRfZm10KHJ0ZC0+Y3B1X2RhaSwKLQkJCQkgICBTTkRfU09DX0RBSUZNVF9EU1BfQSB8Ci0JCQkJICAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAotCQkJCSAgIFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOwotfQotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGFtc19kZWx0YV9vcHMgPSB7Ci0JLmh3X3BhcmFtcyA9IGFtc19kZWx0YV9od19wYXJhbXMsCi19Oworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBhbXNfZGVsdGFfb3BzOwogCiAKIC8qIERpZ2l0YWwgbXV0ZSBpbXBsZW1lbnRlZCB1c2luZyBtb2RlbS9DUFUgbXVsdGlwbGV4ZXIuCkBAIC01NDYsNiArNTMyLDggQEAKIAkucGxhdGZvcm1fbmFtZSA9ICJvbWFwLW1jYnNwLjEiLAogCS5jb2RlY19uYW1lID0gImN4MjA0NDItY29kZWMiLAogCS5vcHMgPSAmYW1zX2RlbHRhX29wcywKKwkuZGFpX2ZtdCA9IFNORF9TT0NfREFJRk1UX0RTUF9BIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkgICBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNLAogfTsKIAogLyogQXVkaW8gY2FyZCBkcml2ZXIgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtaGRtaS1hdWRpby5jIGIvc291bmQvc29jL29tYXAvb21hcC1oZG1pLWF1ZGlvLmMKaW5kZXggM2Y5YWM3ZC4uY2NmYjQxYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1oZG1pLWF1ZGlvLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcC1oZG1pLWF1ZGlvLmMKQEAgLTM5Myw3ICszOTMsNiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaGRtaV9hdWRpb19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSBEUlZfTkFNRSwKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKIAkucHJvYmUgPSBvbWFwX2hkbWlfYXVkaW9fcHJvYmUsCiAJLnJlbW92ZSA9IG9tYXBfaGRtaV9hdWRpb19yZW1vdmUsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKaW5kZXggOGI3OWNhZmEuLmM3ZWI5ZGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYworKysgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKQEAgLTQzNCw3ICs0MzQsNyBAQAogCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUzoKIAkJLyogTWNCU1Agc2xhdmUuIEZTIGNsb2NrIGFzIG91dHB1dCAqLwogCQlyZWdzLT5zcmdyMgl8PSBGU0dNOwotCQlyZWdzLT5wY3IwCXw9IEZTWE07CisJCXJlZ3MtPnBjcjAJfD0gRlNYTSB8IEZTUk07CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKIAkJLyogTWNCU1Agc2xhdmUgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL29tYXAtdHdsNDAzMC5jIGIvc291bmQvc29jL29tYXAvb21hcC10d2w0MDMwLmMKaW5kZXggNWU1NTFjNy4uZmIxZjZiYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC10d2w0MDMwLmMKKysrIGIvc291bmQvc29jL29tYXAvb21hcC10d2w0MDMwLmMKQEAgLTUzLDExICs1Myw3IEBACiAJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwotCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBydGQtPmNhcmQ7CiAJdW5zaWduZWQgaW50IGZtdDsKLQlpbnQgcmV0OwogCiAJc3dpdGNoIChwYXJhbXNfY2hhbm5lbHMocGFyYW1zKSkgewogCWNhc2UgMjogLyogU3RlcmVvIEkyUyBtb2RlICovCkBAIC03NCwyMSArNzAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBTZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgZm10KTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGNhcmQtPmRldiwgImNhbid0IHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvblxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogU2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgZm10KTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGNhcmQtPmRldiwgImNhbid0IHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb25cbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCXJldHVybiAwOworCXJldHVybiBzbmRfc29jX3J1bnRpbWVfc2V0X2RhaV9mbXQocnRkLCBmbXQpOwogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIG9tYXBfdHdsNDAzMF9vcHMgPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9yeDUxLmMgYi9zb3VuZC9zb2Mvb21hcC9yeDUxLmMKaW5kZXggMDQ4OTZkNi4uN2YyOTkzNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvcng1MS5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL3J4NTEuYwpAQCAtMjUwLDE0ICsyNTAsMTQgQEAKIAl7IkZNIFRyYW5zbWl0dGVyIiwgTlVMTCwgIkxMT1VUIn0sCiAJeyJGTSBUcmFuc21pdHRlciIsIE5VTEwsICJSTE9VVCJ9LAogCi0JeyJETWljIFJhdGUgNjQiLCBOVUxMLCAiTWljIEJpYXMifSwKLQl7Ik1pYyBCaWFzIiwgTlVMTCwgIkRNaWMifSwKKwl7IkRNaWMgUmF0ZSA2NCIsIE5VTEwsICJETWljIn0sCisJeyJETWljIiwgTlVMTCwgIk1pYyBCaWFzIn0sCiAKIAl7ImIgTElORTJSIiwgTlVMTCwgIk1PTk9fTE9VVCJ9LAogCXsiRWFycGhvbmUiLCBOVUxMLCAiYiBIUExPVVQifSwKIAotCXsiTElORTFMIiwgTlVMTCwgImIgTWljIEJpYXMifSwKLQl7ImIgTWljIEJpYXMiLCBOVUxMLCAiSFMgTWljIn0KKwl7IkxJTkUxTCIsIE5VTEwsICJIUyBNaWMifSwKKwl7IkhTIE1pYyIsIE5VTEwsICJiIE1pYyBCaWFzIn0sCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHNwa19mdW5jdGlvbltdID0geyJPZmYiLCAiT24ifTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvS2NvbmZpZyBiL3NvdW5kL3NvYy9weGEvS2NvbmZpZwppbmRleCAyNDM0YjZkLi4zOWNlYTgwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL0tjb25maWcKKysrIGIvc291bmQvc29jL3B4YS9LY29uZmlnCkBAIC0xNDAsNyArMTQwLDcgQEAKIAkgIE1hcnZlbGwgUFhBOTEwIHJlZmVyZW5jZSBwbGF0Zm9ybS4KIAogY29uZmlnIFNORF9TT0NfVFRDX0RLQgotCWJvb2wgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBUVEMgREtCIgorCXRyaXN0YXRlICJTb0MgQXVkaW8gc3VwcG9ydCBmb3IgVFRDIERLQiIKIAlkZXBlbmRzIG9uIFNORF9QWEE5MTBfU09DICYmIE1BQ0hfVFRDX0RLQiAmJiBJMkM9eQogCXNlbGVjdCBQWEFfU1NQCiAJc2VsZWN0IFNORF9QWEFfU09DX1NTUApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9jb3JnaS5jIGIvc291bmQvc29jL3B4YS9jb3JnaS5jCmluZGV4IGI3Y2QwYTcuLjM1ODBkMTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvY29yZ2kuYworKysgYi9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKQEAgLTI1OSwyMCArMjU5LDYgQEAKIAkJY29yZ2lfc2V0X3NwayksCiB9OwogCi0vKgotICogTG9naWMgZm9yIGEgd204NzMxIGFzIGNvbm5lY3RlZCBvbiBhIFNoYXJwIFNMLUM3eDAgRGV2aWNlCi0gKi8KLXN0YXRpYyBpbnQgY29yZ2lfd204NzMxX2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwotCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKLQotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxMSU5FSU4iKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJSTElORUlOIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogY29yZ2kgZGlnaXRhbCBhdWRpbyBpbnRlcmZhY2UgZ2x1ZSAtIGNvbm5lY3RzIGNvZGVjIDwtLT4gQ1BVICovCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgY29yZ2lfZGFpID0gewogCS5uYW1lID0gIldNODczMSIsCkBAIC0yODEsNyArMjY3LDYgQEAKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzMxLWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAogCS5jb2RlY19uYW1lID0gIndtODczMS4wLTAwMWIiLAotCS5pbml0ID0gY29yZ2lfd204NzMxX2luaXQsCiAJLmRhaV9mbXQgPSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CiAJCSAgIFNORF9TT0NfREFJRk1UX0NCU19DRlMsCiAJLm9wcyA9ICZjb3JnaV9vcHMsCkBAIC0zMDAsNiArMjg1LDcgQEAKIAkubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUod204NzMxX2RhcG1fd2lkZ2V0cyksCiAJLmRhcG1fcm91dGVzID0gY29yZ2lfYXVkaW9fbWFwLAogCS5udW1fZGFwbV9yb3V0ZXMgPSBBUlJBWV9TSVpFKGNvcmdpX2F1ZGlvX21hcCksCisJLmZ1bGx5X3JvdXRlZCA9IHRydWUsCiB9OwogCiBzdGF0aWMgaW50IGNvcmdpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2U3NDBfd205NzA1LmMgYi9zb3VuZC9zb2MvcHhhL2U3NDBfd205NzA1LmMKaW5kZXggN2M2OTFhYS4uZDcyZTEyNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9lNzQwX3dtOTcwNS5jCisrKyBiL3NvdW5kL3NvYy9weGEvZTc0MF93bTk3MDUuYwpAQCAtODgsMjQgKzg4LDYgQEAKIAl7Ik1pYyBBbXAiLCBOVUxMLCAiTWljIChJbnRlcm5hbCkifSwKIH07CiAKLXN0YXRpYyBpbnQgZTc0MF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwotCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKLQotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkhQT1VUTCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkhQT1VUUiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlBIT05FIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORUlOTCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTkVJTlIiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJDRElOTCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkNESU5SIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiUENCRUVQIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTUlDMiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBlNzQwX2RhaVtdID0gewogCXsKIAkJLm5hbWUgPSAiQUM5NyIsCkBAIC0xMTQsNyArOTYsNiBAQAogCQkuY29kZWNfZGFpX25hbWUgPSAid205NzA1LWhpZmkiLAogCQkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKIAkJLmNvZGVjX25hbWUgPSAid205NzA1LWNvZGVjIiwKLQkJLmluaXQgPSBlNzQwX2FjOTdfaW5pdCwKIAl9LAogCXsKIAkJLm5hbWUgPSAiQUM5NyBBdXgiLApAQCAtMTM2LDYgKzExNyw3IEBACiAJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKGU3NDBfZGFwbV93aWRnZXRzKSwKIAkuZGFwbV9yb3V0ZXMgPSBhdWRpb19tYXAsCiAJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUoYXVkaW9fbWFwKSwKKwkuZnVsbHlfcm91dGVkID0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZ3BpbyBlNzQwX2F1ZGlvX2dwaW9zW10gPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2U3NTBfd205NzA1LmMgYi9zb3VuZC9zb2MvcHhhL2U3NTBfd205NzA1LmMKaW5kZXggMzA1NDRiNi4uNDhmMmQ3YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9lNzUwX3dtOTcwNS5jCisrKyBiL3NvdW5kL3NvYy9weGEvZTc1MF93bTk3MDUuYwpAQCAtNzAsMjQgKzcwLDYgQEAKIAl7Ik1JQzEiLCBOVUxMLCAiTWljIChJbnRlcm5hbCkifSwKIH07CiAKLXN0YXRpYyBpbnQgZTc1MF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKLXsKLQlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwotCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKLQotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxPVVQiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJST1VUIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiUEhPTkUiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSU5FSU5MIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORUlOUiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkNESU5MIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiQ0RJTlIiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJQQ0JFRVAiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJNSUMyIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGU3NTBfZGFpW10gPSB7CiAJewogCQkubmFtZSA9ICJBQzk3IiwKQEAgLTk2LDcgKzc4LDYgQEAKIAkJLmNvZGVjX2RhaV9uYW1lID0gIndtOTcwNS1oaWZpIiwKIAkJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJCS5jb2RlY19uYW1lID0gIndtOTcwNS1jb2RlYyIsCi0JCS5pbml0ID0gZTc1MF9hYzk3X2luaXQsCiAJCS8qIHVzZSBvcHMgdG8gY2hlY2sgc3RhcnR1cCBzdGF0ZSAqLwogCX0sCiAJewpAQCAtMTE5LDYgKzEwMCw3IEBACiAJLm51bV9kYXBtX3dpZGdldHMgPSBBUlJBWV9TSVpFKGU3NTBfZGFwbV93aWRnZXRzKSwKIAkuZGFwbV9yb3V0ZXMgPSBhdWRpb19tYXAsCiAJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUoYXVkaW9fbWFwKSwKKwkuZnVsbHlfcm91dGVkID0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZ3BpbyBlNzUwX2F1ZGlvX2dwaW9zW10gPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2h4NDcwMC5jIGIvc291bmQvc29jL3B4YS9oeDQ3MDAuYwppbmRleCBjZTI2NTUxLi43M2ViNWRkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL2h4NDcwMC5jCisrKyBiL3NvdW5kL3NvYy9weGEvaHg0NzAwLmMKQEAgLTEyNywxNSArMTI3LDggQEAKIHN0YXRpYyBpbnQgaHg0NzAwX2FrNDY0MV9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07CiAJaW50IGVycjsKIAotCS8qIE5DIGNvZGVjIHBpbnMgKi8KLQkvKiBGSVhNRTogaXMgYW55dGhpbmcgY29ubmVjdGVkIGhlcmU/ICovCi0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTU9VVDEiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJNSUNFWFQiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJBVVgiKTsKLQogCS8qIEphY2sgZGV0ZWN0aW9uIEFQSSBzdHVmZiAqLwogCWVyciA9IHNuZF9zb2NfamFja19uZXcoY29kZWMsICJIZWFkcGhvbmUgSmFjayIsCiAJCQkJU05EX0pBQ0tfSEVBRFBIT05FLCAmaHNfamFjayk7CkBAIC0xODQsNiArMTc3LDcgQEAKIAkubnVtX2RhcG1fd2lkZ2V0cwk9IEFSUkFZX1NJWkUoaHg0NzAwX2RhcG1fd2lkZ2V0cyksCiAJLmRhcG1fcm91dGVzCQk9IGh4NDcwMF9hdWRpb19tYXAsCiAJLm51bV9kYXBtX3JvdXRlcwk9IEFSUkFZX1NJWkUoaHg0NzAwX2F1ZGlvX21hcCksCisJLmZ1bGx5X3JvdXRlZAkJPSB0cnVlLAogfTsKIAogc3RhdGljIHN0cnVjdCBncGlvIGh4NDcwMF9hdWRpb19ncGlvc1tdID0gewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9tYWdpY2lhbi5jIGIvc291bmQvc29jL3B4YS9tYWdpY2lhbi5jCmluZGV4IDI1OWUwNDguLjI0MWQwYmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvbWFnaWNpYW4uYworKysgYi9zb3VuZC9zb2MvcHhhL21hZ2ljaWFuLmMKQEAgLTM5MSwyNSArMzkxLDYgQEAKIAkJCW1hZ2ljaWFuX2dldF9pbnB1dCwgbWFnaWNpYW5fc2V0X2lucHV0KSwKIH07CiAKLS8qCi0gKiBMb2dpYyBmb3IgYSB1ZGExMzgwIGFzIGNvbm5lY3RlZCBvbiBhIEhUQyBNYWdpY2lhbgotICovCi1zdGF0aWMgaW50IG1hZ2ljaWFuX3VkYTEzODBfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQotewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwotCi0JLyogTkMgY29kZWMgcGlucyAqLwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlZPVVRMSFAiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJWT1VUUkhQIik7Ci0KLQkvKiBGSVhNRTogaXMgYW55dGhpbmcgY29ubmVjdGVkIGhlcmU/ICovCi0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiVklOTCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlZJTlIiKTsKLQotCXJldHVybiAwOwotfQotCiAvKiBtYWdpY2lhbiBkaWdpdGFsIGF1ZGlvIGludGVyZmFjZSBnbHVlIC0gY29ubmVjdHMgY29kZWMgPC0tPiBDUFUgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBtYWdpY2lhbl9kYWlbXSA9IHsKIHsKQEAgLTQxOSw3ICs0MDAsNiBAQAogCS5jb2RlY19kYWlfbmFtZSA9ICJ1ZGExMzgwLWhpZmktcGxheWJhY2siLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAogCS5jb2RlY19uYW1lID0gInVkYTEzODAtY29kZWMuMC0wMDE4IiwKLQkuaW5pdCA9IG1hZ2ljaWFuX3VkYTEzODBfaW5pdCwKIAkub3BzID0gJm1hZ2ljaWFuX3BsYXliYWNrX29wcywKIH0sCiB7CkBAIC00NDYsNiArNDI2LDcgQEAKIAkubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUodWRhMTM4MF9kYXBtX3dpZGdldHMpLAogCS5kYXBtX3JvdXRlcyA9IGF1ZGlvX21hcCwKIAkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShhdWRpb19tYXApLAorCS5mdWxseV9yb3V0ZWQgPSB0cnVlLAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1hZ2ljaWFuX3NuZF9kZXZpY2U7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMgYi9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMKaW5kZXggMzk2ZGJkNS4uYTk2MTVhNTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvbWlvYTcwMV93bTk3MTMuYworKysgYi9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMKQEAgLTgxLDcgKzgxLDcgQEAKIHN0YXRpYyBpbnQgcmVhcl9hbXBfZXZlbnQoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKndpZGdldCwKIAkJCSAgc3RydWN0IHNuZF9rY29udHJvbCAqa2N0bCwgaW50IGV2ZW50KQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHdpZGdldC0+Y29kZWM7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gd2lkZ2V0LT5kYXBtLT5jYXJkLT5ydGRbMF0uY29kZWM7CiAKIAlyZXR1cm4gcmVhcl9hbXBfcG93ZXIoY29kZWMsIFNORF9TT0NfREFQTV9FVkVOVF9PTihldmVudCkpOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9wYWxtMjd4LmMgYi9zb3VuZC9zb2MvcHhhL3BhbG0yN3guYwppbmRleCAxZWViY2EyLi45MTAzMzZjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3BhbG0yN3guYworKysgYi9zb3VuZC9zb2MvcHhhL3BhbG0yN3guYwpAQCAtNjgsNyArNjgsNyBAQAogCXsiRXh0LiBTcGVha2VyIiwgTlVMTCwgIlJPVVQyIn0sCiAKIAkvKiBtaWMgY29ubmVjdGVkIHRvIE1JQzEgKi8KLQl7IkV4dC4gTWljcm9waG9uZSIsIE5VTEwsICJNSUMxIn0sCisJeyJNSUMxIiwgTlVMTCwgIkV4dC4gTWljcm9waG9uZSJ9LAogfTsKIAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgcGFsbTI3eF9hc29jOwpAQCAtNzYsMTggKzc2LDggQEAKIHN0YXRpYyBpbnQgcGFsbTI3eF9hYzk3X2luaXQoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBydGQtPmNvZGVjOwotCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKIAlpbnQgZXJyOwogCi0JLyogbm90IGNvbm5lY3RlZCBwaW5zICovCi0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiT1VUMyIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIk1PTk9PVVQiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJMSU5FSU5MIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORUlOUiIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlBDQkVFUCIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlBIT05FIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTUlDMiIpOwotCiAJLyogSmFjayBkZXRlY3Rpb24gQVBJIHN0dWZmICovCiAJZXJyID0gc25kX3NvY19qYWNrX25ldyhjb2RlYywgIkhlYWRwaG9uZSBKYWNrIiwKIAkJCQlTTkRfSkFDS19IRUFEUEhPTkUsICZoc19qYWNrKTsKQEAgLTEzMyw3ICsxMjMsOCBAQAogCS5kYXBtX3dpZGdldHMgPSBwYWxtMjd4X2RhcG1fd2lkZ2V0cywKIAkubnVtX2RhcG1fd2lkZ2V0cyA9IEFSUkFZX1NJWkUocGFsbTI3eF9kYXBtX3dpZGdldHMpLAogCS5kYXBtX3JvdXRlcyA9IGF1ZGlvX21hcCwKLQkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShhdWRpb19tYXApCisJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUoYXVkaW9fbWFwKSwKKwkuZnVsbHlfcm91dGVkID0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBpbnQgcGFsbTI3eF9hc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3JhdW1mZWxkLmMgYi9zb3VuZC9zb2MvcHhhL3JhdW1mZWxkLmMKaW5kZXggMDgzNzA2NS4uNTUyYjc2MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9yYXVtZmVsZC5jCisrKyBiL3NvdW5kL3NvYy9weGEvcmF1bWZlbGQuYwpAQCAtODgsNyArODgsNyBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKLQl1bnNpZ25lZCBpbnQgZm10LCBjbGsgPSAwOworCXVuc2lnbmVkIGludCBjbGsgPSAwOwogCWludCByZXQgPSAwOwogCiAJc3dpdGNoIChwYXJhbXNfcmF0ZShwYXJhbXMpKSB7CkBAIC0xMTIsMTUgKzExMiw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWZtdCA9IFNORF9TT0NfREFJRk1UX0kyUyB8Ci0JICAgICAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAotCSAgICAgIFNORF9TT0NfREFJRk1UX0NCU19DRlM7Ci0KLQkvKiBzZXR1cCB0aGUgQ09ERUMgREFJICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIGZtdCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwgY2xrLCAwKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTEzMCwxMCArMTIxLDYgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgZm10KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9jbGtkaXYoY3B1X2RhaSwgUFhBX1NTUF9ESVZfU0NSLCA0KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTE2OSw5ICsxNTYsOCBAQAogCQkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwotCWludCBmbXQsIHJldCA9IDAsIGNsayA9IDA7CisJaW50IHJldCA9IDAsIGNsayA9IDA7CiAKIAlzd2l0Y2ggKHBhcmFtc19yYXRlKHBhcmFtcykpIHsKIAljYXNlIDQ0MTAwOgpAQCAtMTk0LDIyICsxODAsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZm10ID0gU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkY7Ci0KLQkvKiBzZXR1cCB0aGUgQ09ERUMgREFJICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIGZtdCB8IFNORF9TT0NfREFJRk1UX0NCU19DRlMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCiAJLyogc2V0dXAgdGhlIENQVSBEQUkgKi8KIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfcGxsKGNwdV9kYWksIDAsIDAsIDAsIGNsayk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIGZtdCB8IFNORF9TT0NfREFJRk1UX0NCU19DRlMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCiAJcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2RpdihjcHVfZGFpLCBQWEFfU1NQX0RJVl9TQ1IsIDQpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtMjMzLDYgKzIwOCw5IEBACiAJLnBsYXRmb3JtX25hbWUJPSAicHhhLXBjbS1hdWRpbyIsCQlcCiAJLmNvZGVjX2RhaV9uYW1lCT0gImNzNDI3MC1oaWZpIiwJCVwKIAkuY29kZWNfbmFtZQk9ICJjczQyNzAuMC0wMDQ4IiwJXAorCS5kYWlfZm10CT0gU05EX1NPQ19EQUlGTVRfSTJTIHwJCVwKKwkJCSAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfCAgICAgICAgXAorCQkJICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTLCAgICAgICBcCiAJLm9wcwkJPSAmcmF1bWZlbGRfY3M0MjcwX29wcywJCVwKIH0KIApAQCAtMjQzLDYgKzIyMSw5IEBACiAJLmNwdV9kYWlfbmFtZQk9ICJweGEtc3NwLWRhaS4xIiwJCVwKIAkuY29kZWNfZGFpX25hbWUJPSAiYWs0MTA0LWhpZmkiLAkJXAogCS5wbGF0Zm9ybV9uYW1lCT0gInB4YS1wY20tYXVkaW8iLAkJXAorCS5kYWlfZm10CT0gU05EX1NPQ19EQUlGTVRfSTJTIHwJCVwKKwkJCSAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAlcCisJCQkgIFNORF9TT0NfREFJRk1UX0NCU19DRlMsICAgICAgIFwKIAkub3BzCQk9ICZyYXVtZmVsZF9hazQxMDRfb3BzLAkJXAogCS5jb2RlY19uYW1lCT0gInNwaTAuMCIsCQkJXAogfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9zcGl0ei5jIGIvc291bmQvc29jL3B4YS9zcGl0ei5jCmluZGV4IGQ3ZDVmYjIuLjQ2MTEyM2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvc3BpdHouYworKysgYi9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKQEAgLTI1NiwyNiArMjU2LDYgQEAKIAkJc3BpdHpfc2V0X3NwayksCiB9OwogCi0vKgotICogTG9naWMgZm9yIGEgd204NzUwIGFzIGNvbm5lY3RlZCBvbiBhIFNoYXJwIFNMLUN4eDAwIERldmljZQotICovCi1zdGF0aWMgaW50IHNwaXR6X3dtODc1MF9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07Ci0KLQkvKiBOQyBjb2RlYyBwaW5zICovCi0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiUklOUFVUMSIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTlBVVDIiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJSSU5QVVQyIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElOUFVUMyIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlJJTlBVVDMiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJPVVQzIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTU9OTzEiKTsKLQotCXJldHVybiAwOwotfQotCiAvKiBzcGl0eiBkaWdpdGFsIGF1ZGlvIGludGVyZmFjZSBnbHVlIC0gY29ubmVjdHMgY29kZWMgPC0tPiBDUFUgKi8KIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBzcGl0el9kYWkgPSB7CiAJLm5hbWUgPSAid204NzUwIiwKQEAgLTI4NCw3ICsyNjQsNiBAQAogCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg3NTAtaGlmaSIsCiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJLmNvZGVjX25hbWUgPSAid204NzUwLjAtMDAxYiIsCi0JLmluaXQgPSBzcGl0el93bTg3NTBfaW5pdCwKIAkuZGFpX2ZtdCA9IFNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKIAkJICAgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUywKIAkub3BzID0gJnNwaXR6X29wcywKQEAgLTMwMyw2ICsyODIsNyBAQAogCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRSh3bTg3NTBfZGFwbV93aWRnZXRzKSwKIAkuZGFwbV9yb3V0ZXMgPSBzcGl0el9hdWRpb19tYXAsCiAJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUoc3BpdHpfYXVkaW9fbWFwKSwKKwkuZnVsbHlfcm91dGVkID0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBpbnQgc3BpdHpfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTM1Miw3ICszMzIsNiBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc3BpdHpfZHJpdmVyID0gewogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJzcGl0ei1hdWRpbyIsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkucG0gICAgID0gJnNuZF9zb2NfcG1fb3BzLAogCX0sCiAJLnByb2JlCQk9IHNwaXR6X3Byb2JlLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS90dGMtZGtiLmMgYi9zb3VuZC9zb2MvcHhhL3R0Yy1ka2IuYwppbmRleCBlM2Q3MjU3YS4uNTAwMWRiYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS90dGMtZGtiLmMKKysrIGIvc291bmQvc29jL3B4YS90dGMtZGtiLmMKQEAgLTc2LDEwICs3Niw2IEBACiBzdGF0aWMgaW50IHR0Y19wbTg2MHhfaW5pdChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwotCi0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkc2V0IE1pYyAyIik7Ci0Jc25kX3NvY19kYXBtX2Rpc2FibGVfcGluKGRhcG0sICJIZWFkc2V0IFN0ZXJlb3Bob25lIik7CiAKIAkvKiBIZWFkc2V0IGphY2sgZGV0ZWN0aW9uICovCiAJc25kX3NvY19qYWNrX25ldyhjb2RlYywgIkhlYWRwaG9uZSBKYWNrIiwgU05EX0pBQ0tfSEVBRFBIT05FCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMgYi9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMKaW5kZXggMjNiZjk5MS4uOGYzMDFjNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS96eWxvbml0ZS5jCisrKyBiL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYwpAQCAtMTMwLDE2ICsxMzAsNiBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8Ci0JCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8Ci0JCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTcyLDYgKzE2Miw4IEBACiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJLmNwdV9kYWlfbmFtZSA9ICJweGEtc3NwLWRhaS4yIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid205NzEzLXZvaWNlIiwKKwkuZGFpX2ZtdCA9IFNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJICAgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUywKIAkub3BzID0gJnp5bG9uaXRlX3ZvaWNlX29wcywKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX2kycy5jIGIvc291bmQvc29jL3JvY2tjaGlwL3JvY2tjaGlwX2kycy5jCmluZGV4IDEzZDg1MDcuLmFjYjViZTUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9yb2NrY2hpcC9yb2NrY2hpcF9pMnMuYworKysgYi9zb3VuZC9zb2Mvcm9ja2NoaXAvcm9ja2NoaXBfaTJzLmMKQEAgLTI0Nyw2ICsyNDcsMTAgQEAKIAogCXJlZ21hcF91cGRhdGVfYml0cyhpMnMtPnJlZ21hcCwgSTJTX1RYQ1IsIEkyU19UWENSX1ZEV19NQVNLLCB2YWwpOwogCXJlZ21hcF91cGRhdGVfYml0cyhpMnMtPnJlZ21hcCwgSTJTX1JYQ1IsIEkyU19SWENSX1ZEV19NQVNLLCB2YWwpOworCXJlZ21hcF91cGRhdGVfYml0cyhpMnMtPnJlZ21hcCwgSTJTX0RNQUNSLCBJMlNfRE1BQ1JfVERMX01BU0ssCisJCQkgICBJMlNfRE1BQ1JfVERMKDE2KSk7CisJcmVnbWFwX3VwZGF0ZV9iaXRzKGkycy0+cmVnbWFwLCBJMlNfRE1BQ1IsIEkyU19ETUFDUl9SRExfTUFTSywKKwkJCSAgIEkyU19ETUFDUl9SREwoMTYpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzM1LDYgKzMzOSw3IEBACiAJCQkgICAgU05EUlZfUENNX0ZNVEJJVF9TMjRfTEUpLAogCX0sCiAJLm9wcyA9ICZyb2NrY2hpcF9pMnNfZGFpX29wcywKKwkuc3ltbWV0cmljX3JhdGVzID0gMSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVyIHJvY2tjaGlwX2kyc19jb21wb25lbnQgPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9LY29uZmlnIGIvc291bmQvc29jL3NhbXN1bmcvS2NvbmZpZwppbmRleCBmYzY3Zjk3Li4zY2ViZjZjIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL0tjb25maWcKQEAgLTU0LDcgKzU0LDcgQEAKIGNvbmZpZyBTTkRfU09DX1NBTVNVTkdfU01ES19XTTg1ODAKIAl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBXTTg1ODAgb24gU01ESyIKIAlkZXBlbmRzIG9uIFNORF9TT0NfU0FNU1VORyAmJiAoTUFDSF9TTURLNjQxMCB8fCBNQUNIX1NNREtDMTAwIHx8IE1BQ0hfU01ES1YyMTAgfHwgTUFDSF9TTURLQzExMCkKLQlkZXBlbmRzIG9uIFJFR01BUF9JMkMKKwlkZXBlbmRzIG9uIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODU4MAogCXNlbGVjdCBTTkRfU0FNU1VOR19JMlMKIAloZWxwCkBAIC0xNDYsMTcgKzE0Niw2IEBACiAJc2VsZWN0IFNORF9TQU1TVU5HX0kyUwogCXNlbGVjdCBTTkRfU09DX1dNODc1MAogCi1jb25maWcgU05EX1NPQ19HT05JX0FRVUlMQV9XTTg5OTQKLQl0cmlzdGF0ZSAiU29DIEkyUyBBdWRpbyBzdXBwb3J0IGZvciBBUVVJTEEvR09OSSAtIFdNODk5NCIKLQlkZXBlbmRzIG9uIFNORF9TT0NfU0FNU1VORyAmJiAoTUFDSF9HT05JIHx8IE1BQ0hfQVFVSUxBKQotCWRlcGVuZHMgb24gSTJDPXkKLQlzZWxlY3QgU05EX1NBTVNVTkdfSTJTCi0Jc2VsZWN0IE1GRF9XTTg5OTQKLQlzZWxlY3QgU05EX1NPQ19XTTg5OTQKLQloZWxwCi0JICBTYXkgWSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIGdvbmkgb3IgYXF1aWxhCi0JICB3aXRoIHRoZSBXTTg5OTQuCi0KIGNvbmZpZyBTTkRfU09DX1NBTVNVTkdfU01ES19TUERJRgogCXRyaXN0YXRlICJTb0MgUy9QRElGIEF1ZGlvIHN1cHBvcnQgZm9yIFNNREsiCiAJZGVwZW5kcyBvbiBTTkRfU09DX1NBTVNVTkcKQEAgLTE2Nyw3ICsxNTYsNyBAQAogY29uZmlnIFNORF9TT0NfU01ES19XTTg1ODBfUENNCiAJdHJpc3RhdGUgIlNvQyBQQ00gQXVkaW8gc3VwcG9ydCBmb3IgV004NTgwIG9uIFNNREsiCiAJZGVwZW5kcyBvbiBTTkRfU09DX1NBTVNVTkcgJiYgKE1BQ0hfU01ES1YyMTAgfHwgTUFDSF9TTURLQzExMCkKLQlkZXBlbmRzIG9uIFJFR01BUF9JMkMKKwlkZXBlbmRzIG9uIEkyQwogCXNlbGVjdCBTTkRfU09DX1dNODU4MAogCXNlbGVjdCBTTkRfU0FNU1VOR19QQ00KIAloZWxwCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9NYWtlZmlsZSBiL3NvdW5kL3NvYy9zYW1zdW5nL01ha2VmaWxlCmluZGV4IDMxZTNkYmEuLjA1MmZlNzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL01ha2VmaWxlCkBAIC0zNSw3ICszNSw2IEBACiBzbmQtc29jLXNub3ctb2JqcyA6PSBzbm93Lm8KIHNuZC1zb2Mtc21kay13bTk3MTMtb2JqcyA6PSBzbWRrX3dtOTcxMy5vCiBzbmQtc29jLXMzYzY0eHgtc21hcnRxLXdtODk4Ny1vYmpzIDo9IHNtYXJ0cV93bTg5ODcubwotc25kLXNvYy1nb25pLXdtODk5NC1vYmpzIDo9IGdvbmlfd204OTk0Lm8KIHNuZC1zb2Mtc21kay1zcGRpZi1vYmpzIDo9IHNtZGtfc3BkaWYubwogc25kLXNvYy1zbWRrLXdtODU4MHBjbS1vYmpzIDo9IHNtZGtfd204NTgwcGNtLm8KIHNuZC1zb2Mtc21kay13bTg5OTRwY20tb2JqcyA6PSBzbWRrX3dtODk5NHBjbS5vCkBAIC02Myw3ICs2Miw2IEBACiBvYmotJChDT05GSUdfU05EX1NPQ19TQU1TVU5HX1NNREtfV005NzEzKSArPSBzbmQtc29jLXNtZGstd205NzEzLm8KIG9iai0kKENPTkZJR19TTkRfU09DX1NNQVJUUSkgKz0gc25kLXNvYy1zM2M2NHh4LXNtYXJ0cS13bTg5ODcubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU0FNU1VOR19TTURLX1NQRElGKSArPSBzbmQtc29jLXNtZGstc3BkaWYubwotb2JqLSQoQ09ORklHX1NORF9TT0NfR09OSV9BUVVJTEFfV004OTk0KSArPSBzbmQtc29jLWdvbmktd204OTk0Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1NNREtfV004NTgwX1BDTSkgKz0gc25kLXNvYy1zbWRrLXdtODU4MHBjbS5vCiBvYmotJChDT05GSUdfU05EX1NPQ19TTURLX1dNODk5NF9QQ00pICs9IHNuZC1zb2Mtc21kay13bTg5OTRwY20ubwogb2JqLSQoQ09ORklHX1NORF9TT0NfU1BFWVNJREUpICs9IHNuZC1zb2Mtc3BleXNpZGUubwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvYXJuZGFsZV9ydDU2MzEuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2FybmRhbGVfcnQ1NjMxLmMKaW5kZXggMWUyYjYxYy4uOGJmMmUyYyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvYXJuZGFsZV9ydDU2MzEuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9hcm5kYWxlX3J0NTYzMS5jCkBAIC0xMzUsNyArMTM1LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFybmRhbGVfYXVkaW9fZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CiAJCS5uYW1lICAgPSAiYXJuZGFsZS1hdWRpbyIsCi0JCS5vd25lciAgPSBUSElTX01PRFVMRSwKIAkJLnBtID0gJnNuZF9zb2NfcG1fb3BzLAogCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoc2Ftc3VuZ19hcm5kYWxlX3J0NTYzMV9vZl9tYXRjaCksCiAJfSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2dvbmlfd204OTk0LmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9nb25pX3dtODk5NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjUyN2RjLi4wMDAwMDAwCi0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL2dvbmlfd204OTk0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDQgKzAsMCBAQAotLyoKLSAqIGdvbmlfd204OTk0LmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby5MdGQKLSAqIEF1dGhvcjogQ2hhbndvbyBDaG9pIDxjdzAwLmNob2lAc2Ftc3VuZy5jb20+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KLSNpbmNsdWRlIDxzb3VuZC9qYWNrLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvZ3Bpby1zYW1zdW5nLmg+Ci0KLSNpbmNsdWRlICIuLi9jb2RlY3Mvd204OTk0LmgiCi0KLSNkZWZpbmUgTUFDSElORV9OQU1FCTAKLSNkZWZpbmUgQ1BVX1ZPSUNFX0RBSQkxCi0KLXN0YXRpYyBjb25zdCBjaGFyICphcXVpbGFfc3RyW10gPSB7Ci0JW01BQ0hJTkVfTkFNRV0gPSAiYXF1aWxhIiwKLQlbQ1BVX1ZPSUNFX0RBSV0gPSAiYXF1aWxhLXZvaWNlLWRhaSIsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBnb25pOwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmdvbmlfc25kX2RldmljZTsKLQotLyogMy41IHBpZSBqYWNrICovCi1zdGF0aWMgc3RydWN0IHNuZF9zb2NfamFjayBqYWNrOwotCi0vKiAzLjUgcGllIGphY2sgZGV0ZWN0aW9uIERBUE0gcGlucyAqLwotc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfcGluIGphY2tfcGluc1tdID0gewotCXsKLQkJLnBpbiA9ICJIZWFkc2V0IE1pYyIsCi0JCS5tYXNrID0gU05EX0pBQ0tfTUlDUk9QSE9ORSwKLQl9LCB7Ci0JCS5waW4gPSAiSGVhZHNldCBTdGVyZW9waG9uZSIsCi0JCS5tYXNrID0gU05EX0pBQ0tfSEVBRFBIT05FIHwgU05EX0pBQ0tfTUVDSEFOSUNBTCB8Ci0JCQlTTkRfSkFDS19BVk9VVCwKLQl9LAotfTsKLQotLyogMy41IHBpZSBqYWNrIGRldGVjdGlvbiBncGlvcyAqLwotc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyBqYWNrX2dwaW9zW10gPSB7Ci0JewotCQkuZ3BpbyA9IFM1UFYyMTBfR1BIMCg2KSwKLQkJLm5hbWUgPSAiREVUXzMuNSIsCi0JCS5yZXBvcnQgPSBTTkRfSkFDS19IRUFEU0VUIHwgU05EX0pBQ0tfTUVDSEFOSUNBTCB8Ci0JCQlTTkRfSkFDS19BVk9VVCwKLQkJLmRlYm91bmNlX3RpbWUgPSAyMDAsCi0JfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCBnb25pX2RhcG1fd2lkZ2V0c1tdID0gewotCVNORF9TT0NfREFQTV9TUEsoIkV4dCBMZWZ0IFNwayIsIE5VTEwpLAotCVNORF9TT0NfREFQTV9TUEsoIkV4dCBSaWdodCBTcGsiLCBOVUxMKSwKLQlTTkRfU09DX0RBUE1fU1BLKCJFeHQgUmN2IiwgTlVMTCksCi0JU05EX1NPQ19EQVBNX0hQKCJIZWFkc2V0IFN0ZXJlb3Bob25lIiwgTlVMTCksCi0JU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCBNaWMiLCBOVUxMKSwKLQlTTkRfU09DX0RBUE1fTUlDKCJNYWluIE1pYyIsIE5VTEwpLAotCVNORF9TT0NfREFQTV9NSUMoIjJuZCBNaWMiLCBOVUxMKSwKLQlTTkRfU09DX0RBUE1fTElORSgiUmFkaW8gSW4iLCBOVUxMKSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIGdvbmlfZGFwbV9yb3V0ZXNbXSA9IHsKLQl7IkV4dCBMZWZ0IFNwayIsIE5VTEwsICJTUEtPVVRMUCJ9LAotCXsiRXh0IExlZnQgU3BrIiwgTlVMTCwgIlNQS09VVExOIn0sCi0KLQl7IkV4dCBSaWdodCBTcGsiLCBOVUxMLCAiU1BLT1VUUlAifSwKLQl7IkV4dCBSaWdodCBTcGsiLCBOVUxMLCAiU1BLT1VUUk4ifSwKLQotCXsiRXh0IFJjdiIsIE5VTEwsICJIUE9VVDJOIn0sCi0JeyJFeHQgUmN2IiwgTlVMTCwgIkhQT1VUMlAifSwKLQotCXsiSGVhZHNldCBTdGVyZW9waG9uZSIsIE5VTEwsICJIUE9VVDFMIn0sCi0JeyJIZWFkc2V0IFN0ZXJlb3Bob25lIiwgTlVMTCwgIkhQT1VUMVIifSwKLQotCXsiSU4xUk4iLCBOVUxMLCAiSGVhZHNldCBNaWMifSwKLQl7IklOMVJQIiwgTlVMTCwgIkhlYWRzZXQgTWljIn0sCi0KLQl7IklOMVJOIiwgTlVMTCwgIjJuZCBNaWMifSwKLQl7IklOMVJQIiwgTlVMTCwgIjJuZCBNaWMifSwKLQotCXsiSU4xTE4iLCBOVUxMLCAiTWFpbiBNaWMifSwKLQl7IklOMUxQIiwgTlVMTCwgIk1haW4gTWljIn0sCi0KLQl7IklOMkxOIiwgTlVMTCwgIlJhZGlvIEluIn0sCi0JeyJJTjJSTiIsIE5VTEwsICJSYWRpbyBJbiJ9LAotfTsKLQotc3RhdGljIGludCBnb25pX3dtODk5NF9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07Ci0JaW50IHJldDsKLQotCS8qIHNldCBlbmRwb2ludHMgdG8gbm90IGNvbm5lY3RlZCAqLwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIklOMkxQOlZYUk4iKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJJTjJSUDpWWFJQIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORU9VVDFOIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORU9VVDFQIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORU9VVDJOIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElORU9VVDJQIik7Ci0KLQlpZiAobWFjaGluZV9pc19hcXVpbGEoKSkgewotCQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJTUEtPVVRSTiIpOwotCQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJTUEtPVVRSUCIpOwotCX0KLQotCS8qIEhlYWRzZXQgamFjayBkZXRlY3Rpb24gKi8KLQlyZXQgPSBzbmRfc29jX2phY2tfbmV3KGNvZGVjLCAiSGVhZHNldCBKYWNrIiwKLQkJCVNORF9KQUNLX0hFQURTRVQgfCBTTkRfSkFDS19NRUNIQU5JQ0FMIHwgU05EX0pBQ0tfQVZPVVQsCi0JCQkmamFjayk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNuZF9zb2NfamFja19hZGRfcGlucygmamFjaywgQVJSQVlfU0laRShqYWNrX3BpbnMpLCBqYWNrX3BpbnMpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlyZXQgPSBzbmRfc29jX2phY2tfYWRkX2dwaW9zKCZqYWNrLCBBUlJBWV9TSVpFKGphY2tfZ3Bpb3MpLCBqYWNrX2dwaW9zKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZ29uaV9oaWZpX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7Ci0Jc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwotCXVuc2lnbmVkIGludCBwbGxfb3V0ID0gMjQwMDAwMDA7Ci0JaW50IHJldCA9IDA7Ci0KLQkvKiBzZXQgdGhlIGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKLQkJCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKLQkJCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBzZXQgdGhlIGNvZGVjIEZMTCAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9wbGwoY29kZWNfZGFpLCBXTTg5OTRfRkxMMSwgMCwgcGxsX291dCwKLQkJCXBhcmFtc19yYXRlKHBhcmFtcykgKiAyNTYpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogc2V0IHRoZSBjb2RlYyBzeXN0ZW0gY2xvY2sgKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgV004OTk0X1NZU0NMS19GTEwxLAotCQkJcGFyYW1zX3JhdGUocGFyYW1zKSAqIDI1NiwgU05EX1NPQ19DTE9DS19JTik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyBnb25pX2hpZmlfb3BzID0gewotCS5od19wYXJhbXMgPSBnb25pX2hpZmlfaHdfcGFyYW1zLAotfTsKLQotc3RhdGljIGludCBnb25pX3ZvaWNlX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKLQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCi17Ci0Jc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7Ci0JdW5zaWduZWQgaW50IHBsbF9vdXQgPSAyNDAwMDAwMDsKLQlpbnQgcmV0ID0gMDsKLQotCWlmIChwYXJhbXNfcmF0ZShwYXJhbXMpICE9IDgwMDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogc2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0xFRlRfSiB8Ci0JCQlTTkRfU09DX0RBSUZNVF9JQl9JRiB8IFNORF9TT0NfREFJRk1UX0NCTV9DRk0pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogc2V0IHRoZSBjb2RlYyBGTEwgKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfcGxsKGNvZGVjX2RhaSwgV004OTk0X0ZMTDIsIDAsIHBsbF9vdXQsCi0JCQlwYXJhbXNfcmF0ZShwYXJhbXMpICogMjU2KTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIHNldCB0aGUgY29kZWMgc3lzdGVtIGNsb2NrICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODk5NF9TWVNDTEtfRkxMMiwKLQkJCXBhcmFtc19yYXRlKHBhcmFtcykgKiAyNTYsIFNORF9TT0NfQ0xPQ0tfSU4pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHZvaWNlX2RhaSA9IHsKLQkubmFtZSA9ICJnb25pLXZvaWNlLWRhaSIsCi0JLmlkID0gMCwKLQkucGxheWJhY2sgPSB7Ci0JCS5jaGFubmVsc19taW4gPSAxLAotCQkuY2hhbm5lbHNfbWF4ID0gMiwKLQkJLnJhdGVzID0gU05EUlZfUENNX1JBVEVfODAwMCwKLQkJLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSx9LAotCS5jYXB0dXJlID0gewotCQkuY2hhbm5lbHNfbWluID0gMSwKLQkJLmNoYW5uZWxzX21heCA9IDIsCi0JCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDAsCi0JCS5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUsfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVyIHZvaWNlX2NvbXBvbmVudCA9IHsKLQkubmFtZQkJPSAiZ29uaS12b2ljZSIsCi19OwotCi1zdGF0aWMgc3RydWN0IHNuZF9zb2Nfb3BzIGdvbmlfdm9pY2Vfb3BzID0gewotCS5od19wYXJhbXMgPSBnb25pX3ZvaWNlX2h3X3BhcmFtcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBnb25pX2RhaVtdID0gewotewotCS5uYW1lID0gIldNODk5NCIsCi0JLnN0cmVhbV9uYW1lID0gIldNODk5NCBIaUZpIiwKLQkuY3B1X2RhaV9uYW1lID0gInNhbXN1bmctaTJzLjAiLAotCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg5OTQtYWlmMSIsCi0JLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1pMnMuMCIsCi0JLmNvZGVjX25hbWUgPSAid204OTk0LWNvZGVjLjAtMDAxYSIsCi0JLmluaXQgPSBnb25pX3dtODk5NF9pbml0LAotCS5vcHMgPSAmZ29uaV9oaWZpX29wcywKLX0sIHsKLQkubmFtZSA9ICJXTTg5OTQgVm9pY2UiLAotCS5zdHJlYW1fbmFtZSA9ICJWb2ljZSIsCi0JLmNwdV9kYWlfbmFtZSA9ICJnb25pLXZvaWNlLWRhaSIsCi0JLmNvZGVjX2RhaV9uYW1lID0gIndtODk5NC1haWYyIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg5OTQtY29kZWMuMC0wMDFhIiwKLQkub3BzID0gJmdvbmlfdm9pY2Vfb3BzLAotfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19jYXJkIGdvbmkgPSB7Ci0JLm5hbWUgPSAiZ29uaSIsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmRhaV9saW5rID0gZ29uaV9kYWksCi0JLm51bV9saW5rcyA9IEFSUkFZX1NJWkUoZ29uaV9kYWkpLAotCi0JLmRhcG1fd2lkZ2V0cyA9IGdvbmlfZGFwbV93aWRnZXRzLAotCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRShnb25pX2RhcG1fd2lkZ2V0cyksCi0JLmRhcG1fcm91dGVzID0gZ29uaV9kYXBtX3JvdXRlcywKLQkubnVtX2RhcG1fcm91dGVzID0gQVJSQVlfU0laRShnb25pX2RhcG1fcm91dGVzKSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGdvbmlfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlpZiAobWFjaGluZV9pc19hcXVpbGEoKSkgewotCQl2b2ljZV9kYWkubmFtZSA9IGFxdWlsYV9zdHJbQ1BVX1ZPSUNFX0RBSV07Ci0JCWdvbmlfZGFpWzFdLmNwdV9kYWlfbmFtZSA9IGFxdWlsYV9zdHJbQ1BVX1ZPSUNFX0RBSV07Ci0JCWdvbmkubmFtZSA9IGFxdWlsYV9zdHJbTUFDSElORV9OQU1FXTsKLQl9IGVsc2UgaWYgKCFtYWNoaW5lX2lzX2dvbmkoKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlnb25pX3NuZF9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInNvYy1hdWRpbyIsIC0xKTsKLQlpZiAoIWdvbmlfc25kX2RldmljZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiByZWdpc3RlciB2b2ljZSBEQUkgaGVyZSAqLwotCXJldCA9IGRldm1fc25kX3NvY19yZWdpc3Rlcl9jb21wb25lbnQoJmdvbmlfc25kX2RldmljZS0+ZGV2LAotCQkJJnZvaWNlX2NvbXBvbmVudCwgJnZvaWNlX2RhaSwgMSk7Ci0JaWYgKHJldCkgewotCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGdvbmlfc25kX2RldmljZSk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZ29uaV9zbmRfZGV2aWNlLCAmZ29uaSk7Ci0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChnb25pX3NuZF9kZXZpY2UpOwotCi0JaWYgKHJldCkKLQkJcGxhdGZvcm1fZGV2aWNlX3B1dChnb25pX3NuZF9kZXZpY2UpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGdvbmlfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGdvbmlfc25kX2RldmljZSk7Ci19Ci0KLW1vZHVsZV9pbml0KGdvbmlfaW5pdCk7Ci1tb2R1bGVfZXhpdChnb25pX2V4aXQpOwotCi0vKiBNb2R1bGUgaW5mb3JtYXRpb24gKi8KLU1PRFVMRV9ERVNDUklQVElPTigiQUxTQSBTb0MgV004OTk0IEdPTkkoUzVQVjIxMCkiKTsKLU1PRFVMRV9BVVRIT1IoIkNoYW53b28gQ2hvaSA8Y3cwMC5jaG9pQHNhbXN1bmcuY29tPiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvaDE5NDBfdWRhMTM4MC5jIGIvc291bmQvc29jL3NhbXN1bmcvaDE5NDBfdWRhMTM4MC5jCmluZGV4IGYyZDc5ODAuLjU5YjA0NDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL2gxOTQwX3VkYTEzODAuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9oMTk0MF91ZGExMzgwLmMKQEAgLTc2LDcgKzc2LDYgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CiAJaW50IGRpdjsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKQEAgLTk1LDE4ICs5NCw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAotCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCU19DRlMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKLQkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCS8qIHNlbGVjdCBjbG9jayBzb3VyY2UgKi8KIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNwdV9kYWksIFMzQzI0WFhfQ0xLU1JDX1BDTEssIHJhdGUsCiAJCQlTTkRfU09DX0NMT0NLX09VVCk7CkBAIC0yMDcsNiArMTk0LDggQEAKIAkJLmluaXQJCT0gaDE5NDBfdWRhMTM4MF9pbml0LAogCQkucGxhdGZvcm1fbmFtZQk9ICJzM2MyNHh4LWlpcyIsCiAJCS5jb2RlY19uYW1lCT0gInVkYTEzODAtY29kZWMuMC0wMDFhIiwKKwkJLmRhaV9mbXQJPSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCQkJICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTLAogCQkub3BzCQk9ICZoMTk0MF9vcHMsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9pMnMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jCmluZGV4IGI1YTgwYzUuLmI5MmFiNDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL2kycy5jCkBAIC0xMCw5ICsxMCwxMSBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorI2luY2x1ZGUgPGR0LWJpbmRpbmdzL3NvdW5kL3NhbXN1bmctaTJzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9vZi5oPgpAQCAtNTksMTAgKzYxLDggQEAKIHN0cnVjdCBpMnNfZGFpIHsKIAkvKiBQbGF0Zm9ybSBkZXZpY2UgZm9yIHRoaXMgREFJICovCiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKLQkvKiBJT1JFTUFQJ2QgU0ZScyAqLworCS8qIE1lbW9yeSBtYXBwZWQgU0ZSIHJlZ2lvbiAqLwogCXZvaWQgX19pb21lbQkqYWRkcjsKLQkvKiBQaHlzaWNhbCBiYXNlIGFkZHJlc3Mgb2YgU0ZScyAqLwotCXUzMgliYXNlOwogCS8qIFJhdGUgb2YgUkNMSyBzb3VyY2UgY2xvY2sgKi8KIAl1bnNpZ25lZCBsb25nIHJjbGtfc3JjcmF0ZTsKIAkvKiBGcmFtZSBDbG9jayAqLwpAQCAtODMsOCArODMsNiBAQAogI2RlZmluZSBEQUlfT1BFTkVECSgxIDw8IDApIC8qIERhaSBpcyBvcGVuZWQgKi8KICNkZWZpbmUgREFJX01BTkFHRVIJKDEgPDwgMSkgLyogRGFpIGlzIHRoZSBtYW5hZ2VyICovCiAJdW5zaWduZWQgbW9kZTsKLQkvKiBDRENMSyBwaW4gZGlyZWN0aW9uOiAwICAtIGlucHV0LCAxIC0gb3V0cHV0ICovCi0JdW5zaWduZWQgaW50IGNkY2xrX291dDoxOwogCS8qIERyaXZlciBmb3IgdGhpcyBEQUkgKi8KIAlzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIGkyc19kYWlfZHJ2OwogCS8qIERNQSBwYXJhbWV0ZXJzICovCkBAIC05NSw4ICs5MywxNSBAQAogCXUzMglzdXNwZW5kX2kyc21vZDsKIAl1MzIJc3VzcGVuZF9pMnNjb247CiAJdTMyCXN1c3BlbmRfaTJzcHNyOwotCXVuc2lnbmVkIGxvbmcgZ3Bpb3NbN107CS8qIGkycyBncGlvIGxpbmUgbnVtYmVycyAqLwogCWNvbnN0IHN0cnVjdCBzYW1zdW5nX2kyc192YXJpYW50X3JlZ3MgKnZhcmlhbnRfcmVnczsKKworCS8qIFNwaW5sb2NrIHByb3RlY3RpbmcgYWNjZXNzIHRvIHRoZSBkZXZpY2UncyByZWdpc3RlcnMgKi8KKwlzcGlubG9ja190IHNwaW5sb2NrOworCXNwaW5sb2NrX3QgKmxvY2s7CisKKwkvKiBCZWxvdyBmaWVsZHMgYXJlIG9ubHkgdmFsaWQgaWYgdGhpcyBpcyB0aGUgcHJpbWFyeSBGSUZPICovCisJc3RydWN0IGNsayAqY2xrX3RhYmxlWzNdOworCXN0cnVjdCBjbGtfb25lY2VsbF9kYXRhIGNsa19kYXRhOwogfTsKIAogLyogTG9jayBmb3IgY3Jvc3MgaS9mIGNoZWNrcyAqLwpAQCAtMTMzLDEwICsxMzgsMTYgQEAKIAlyZXR1cm4gYWN0aXZlID8gdHJ1ZSA6IGZhbHNlOwogfQogCisvKiBSZXR1cm4gcG9pbnRlciB0byB0aGUgb3RoZXIgREFJICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpMnNfZGFpICpnZXRfb3RoZXJfZGFpKHN0cnVjdCBpMnNfZGFpICppMnMpCit7CisJcmV0dXJuIGkycy0+cHJpX2RhaSA/IDogaTJzLT5zZWNfZGFpOworfQorCiAvKiBJZiB0aGUgb3RoZXIgaW50ZXJmYWNlIG9mIHRoZSBjb250cm9sbGVyIGlzIHRyYW5zbWl0dGluZyBkYXRhICovCiBzdGF0aWMgaW5saW5lIGJvb2wgb3RoZXJfdHhfYWN0aXZlKHN0cnVjdCBpMnNfZGFpICppMnMpCiB7Ci0Jc3RydWN0IGkyc19kYWkgKm90aGVyID0gaTJzLT5wcmlfZGFpID8gOiBpMnMtPnNlY19kYWk7CisJc3RydWN0IGkyc19kYWkgKm90aGVyID0gZ2V0X290aGVyX2RhaShpMnMpOwogCiAJcmV0dXJuIHR4X2FjdGl2ZShvdGhlcik7CiB9CkBAIC0xNjMsNyArMTc0LDcgQEAKIC8qIElmIHRoZSBvdGhlciBpbnRlcmZhY2Ugb2YgdGhlIGNvbnRyb2xsZXIgaXMgcmVjZWl2aW5nIGRhdGEgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBvdGhlcl9yeF9hY3RpdmUoc3RydWN0IGkyc19kYWkgKmkycykKIHsKLQlzdHJ1Y3QgaTJzX2RhaSAqb3RoZXIgPSBpMnMtPnByaV9kYWkgPyA6IGkycy0+c2VjX2RhaTsKKwlzdHJ1Y3QgaTJzX2RhaSAqb3RoZXIgPSBnZXRfb3RoZXJfZGFpKGkycyk7CiAKIAlyZXR1cm4gcnhfYWN0aXZlKG90aGVyKTsKIH0KQEAgLTQ2NCwxOCArNDc1LDIzIEBACiAJICBpbnQgY2xrX2lkLCB1bnNpZ25lZCBpbnQgcmZzLCBpbnQgZGlyKQogewogCXN0cnVjdCBpMnNfZGFpICppMnMgPSB0b19pbmZvKGRhaSk7Ci0Jc3RydWN0IGkyc19kYWkgKm90aGVyID0gaTJzLT5wcmlfZGFpID8gOiBpMnMtPnNlY19kYWk7Ci0JdTMyIG1vZCA9IHJlYWRsKGkycy0+YWRkciArIEkyU01PRCk7CisJc3RydWN0IGkyc19kYWkgKm90aGVyID0gZ2V0X290aGVyX2RhaShpMnMpOwogCWNvbnN0IHN0cnVjdCBzYW1zdW5nX2kyc192YXJpYW50X3JlZ3MgKmkyc19yZWdzID0gaTJzLT52YXJpYW50X3JlZ3M7CiAJdW5zaWduZWQgaW50IGNkY29uX21hc2sgPSAxIDw8IGkyc19yZWdzLT5jZGNsa2Nvbl9vZmY7CiAJdW5zaWduZWQgaW50IHJzcmNfbWFzayA9IDEgPDwgaTJzX3JlZ3MtPnJjbGtzcmNfb2ZmOworCXUzMiBtb2QsIG1hc2ssIHZhbCA9IDA7CisKKwlzcGluX2xvY2soaTJzLT5sb2NrKTsKKwltb2QgPSByZWFkbChpMnMtPmFkZHIgKyBJMlNNT0QpOworCXNwaW5fdW5sb2NrKGkycy0+bG9jayk7CiAKIAlzd2l0Y2ggKGNsa19pZCkgewogCWNhc2UgU0FNU1VOR19JMlNfT1BDTEs6Ci0JCW1vZCAmPSB+TU9EX09QQ0xLX01BU0s7Ci0JCW1vZCB8PSBkaXI7CisJCW1hc2sgPSBNT0RfT1BDTEtfTUFTSzsKKwkJdmFsID0gZGlyOwogCQlicmVhazsKIAljYXNlIFNBTVNVTkdfSTJTX0NEQ0xLOgorCQltYXNrID0gMSA8PCBpMnNfcmVncy0+Y2RjbGtjb25fb2ZmOwogCQkvKiBTaG91bGRuJ3QgbWF0dGVyIGluIEdBVElORyhDTE9DS19JTikgbW9kZSAqLwogCQlpZiAoZGlyID09IFNORF9TT0NfQ0xPQ0tfSU4pCiAJCQlyZnMgPSAwOwpAQCAtNDkyLDE1ICs1MDgsMTUgQEAKIAkJfQogCiAJCWlmIChkaXIgPT0gU05EX1NPQ19DTE9DS19JTikKLQkJCW1vZCB8PSAxIDw8IGkyc19yZWdzLT5jZGNsa2Nvbl9vZmY7Ci0JCWVsc2UKLQkJCW1vZCAmPSB+KDEgPDwgaTJzX3JlZ3MtPmNkY2xrY29uX29mZik7CisJCQl2YWwgPSAxIDw8IGkyc19yZWdzLT5jZGNsa2Nvbl9vZmY7CiAKIAkJaTJzLT5yZnMgPSByZnM7CiAJCWJyZWFrOwogCiAJY2FzZSBTQU1TVU5HX0kyU19SQ0xLU1JDXzA6IC8qIGNsb2NrIGNvcnJzcG9uZGluZyB0byBJSVNNT0RbMTBdIDo9IDAgKi8KIAljYXNlIFNBTVNVTkdfSTJTX1JDTEtTUkNfMTogLyogY2xvY2sgY29ycnNwb25kaW5nIHRvIElJU01PRFsxMF0gOj0gMSAqLworCQltYXNrID0gMSA8PCBpMnNfcmVncy0+cmNsa3NyY19vZmY7CisKIAkJaWYgKChpMnMtPnF1aXJrcyAmIFFVSVJLX05PX01VWFBTUikKIAkJCQl8fCAoY2xrX2lkID09IFNBTVNVTkdfSTJTX1JDTEtTUkNfMCkpCiAJCQljbGtfaWQgPSAwOwpAQCAtNTUwLDE4ICs1NjYsMTkgQEAKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJaWYgKGNsa19pZCA9PSAwKQotCQkJbW9kICY9IH4oMSA8PCBpMnNfcmVncy0+cmNsa3NyY19vZmYpOwotCQllbHNlCi0JCQltb2QgfD0gMSA8PCBpMnNfcmVncy0+cmNsa3NyY19vZmY7Ci0KKwkJaWYgKGNsa19pZCA9PSAxKQorCQkJdmFsID0gMSA8PCBpMnNfcmVncy0+cmNsa3NyY19vZmY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoJmkycy0+cGRldi0+ZGV2LCAiV2UgZG9uJ3Qgc2VydmUgdGhhdCFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlzcGluX2xvY2soaTJzLT5sb2NrKTsKKwltb2QgPSByZWFkbChpMnMtPmFkZHIgKyBJMlNNT0QpOworCW1vZCA9IChtb2QgJiB+bWFzaykgfCB2YWw7CiAJd3JpdGVsKG1vZCwgaTJzLT5hZGRyICsgSTJTTU9EKTsKKwlzcGluX3VubG9jayhpMnMtPmxvY2spOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NzAsOSArNTg3LDggQEAKIAl1bnNpZ25lZCBpbnQgZm10KQogewogCXN0cnVjdCBpMnNfZGFpICppMnMgPSB0b19pbmZvKGRhaSk7Ci0JdTMyIG1vZCA9IHJlYWRsKGkycy0+YWRkciArIEkyU01PRCk7CiAJaW50IGxycF9zaGlmdCwgc2RmX3NoaWZ0LCBzZGZfbWFzaywgbHJwX3Jsb3csIG1vZF9zbGF2ZTsKLQl1MzIgdG1wID0gMDsKKwl1MzIgbW9kLCB0bXAgPSAwOwogCiAJbHJwX3NoaWZ0ID0gaTJzLT52YXJpYW50X3JlZ3MtPmxycF9vZmY7CiAJc2RmX3NoaWZ0ID0gaTJzLT52YXJpYW50X3JlZ3MtPnNkZl9vZmY7CkBAIC02MzIsMTIgKzY0OCwxNSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlzcGluX2xvY2soaTJzLT5sb2NrKTsKKwltb2QgPSByZWFkbChpMnMtPmFkZHIgKyBJMlNNT0QpOwogCS8qCiAJICogRG9uJ3QgY2hhbmdlIHRoZSBJMlMgbW9kZSBpZiBhbnkgY29udHJvbGxlciBpcyBhY3RpdmUgb24gdGhpcwogCSAqIGNoYW5uZWwuCiAJICovCiAJaWYgKGFueV9hY3RpdmUoaTJzKSAmJgogCQkoKG1vZCAmIChzZGZfbWFzayB8IGxycF9ybG93IHwgbW9kX3NsYXZlKSkgIT0gdG1wKSkgeworCQlzcGluX3VubG9jayhpMnMtPmxvY2spOwogCQlkZXZfZXJyKCZpMnMtPnBkZXYtPmRldiwKIAkJCQkiJXM6JWQgT3RoZXIgREFJIGJ1c3lcbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CiAJCXJldHVybiAtRUFHQUlOOwpAQCAtNjQ2LDYgKzY2NSw3IEBACiAJbW9kICY9IH4oc2RmX21hc2sgfCBscnBfcmxvdyB8IG1vZF9zbGF2ZSk7CiAJbW9kIHw9IHRtcDsKIAl3cml0ZWwobW9kLCBpMnMtPmFkZHIgKyBJMlNNT0QpOworCXNwaW5fdW5sb2NrKGkycy0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY1NCwxNiArNjc0LDE2IEBACiAJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMsIHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewogCXN0cnVjdCBpMnNfZGFpICppMnMgPSB0b19pbmZvKGRhaSk7Ci0JdTMyIG1vZCA9IHJlYWRsKGkycy0+YWRkciArIEkyU01PRCk7CisJdTMyIG1vZCwgbWFzayA9IDAsIHZhbCA9IDA7CiAKIAlpZiAoIWlzX3NlY29uZGFyeShpMnMpKQotCQltb2QgJj0gfihNT0RfREMyX0VOIHwgTU9EX0RDMV9FTik7CisJCW1hc2sgfD0gKE1PRF9EQzJfRU4gfCBNT0RfREMxX0VOKTsKIAogCXN3aXRjaCAocGFyYW1zX2NoYW5uZWxzKHBhcmFtcykpIHsKIAljYXNlIDY6Ci0JCW1vZCB8PSBNT0RfREMyX0VOOworCQl2YWwgfD0gTU9EX0RDMl9FTjsKIAljYXNlIDQ6Ci0JCW1vZCB8PSBNT0RfREMxX0VOOworCQl2YWwgfD0gTU9EX0RDMV9FTjsKIAkJYnJlYWs7CiAJY2FzZSAyOgogCQlpZiAoc3Vic3RyZWFtLT5zdHJlYW0gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKQEAgLTY4NSw0NCArNzA1LDQ5IEBACiAJfQogCiAJaWYgKGlzX3NlY29uZGFyeShpMnMpKQotCQltb2QgJj0gfk1PRF9CTENTX01BU0s7CisJCW1hc2sgfD0gTU9EX0JMQ1NfTUFTSzsKIAllbHNlCi0JCW1vZCAmPSB+TU9EX0JMQ1BfTUFTSzsKKwkJbWFzayB8PSBNT0RfQkxDUF9NQVNLOwogCiAJaWYgKGlzX21hbmFnZXIoaTJzKSkKLQkJbW9kICY9IH5NT0RfQkxDX01BU0s7CisJCW1hc2sgfD0gTU9EX0JMQ19NQVNLOwogCiAJc3dpdGNoIChwYXJhbXNfd2lkdGgocGFyYW1zKSkgewogCWNhc2UgODoKIAkJaWYgKGlzX3NlY29uZGFyeShpMnMpKQotCQkJbW9kIHw9IE1PRF9CTENTXzhCSVQ7CisJCQl2YWwgfD0gTU9EX0JMQ1NfOEJJVDsKIAkJZWxzZQotCQkJbW9kIHw9IE1PRF9CTENQXzhCSVQ7CisJCQl2YWwgfD0gTU9EX0JMQ1BfOEJJVDsKIAkJaWYgKGlzX21hbmFnZXIoaTJzKSkKLQkJCW1vZCB8PSBNT0RfQkxDXzhCSVQ7CisJCQl2YWwgfD0gTU9EX0JMQ184QklUOwogCQlicmVhazsKIAljYXNlIDE2OgogCQlpZiAoaXNfc2Vjb25kYXJ5KGkycykpCi0JCQltb2QgfD0gTU9EX0JMQ1NfMTZCSVQ7CisJCQl2YWwgfD0gTU9EX0JMQ1NfMTZCSVQ7CiAJCWVsc2UKLQkJCW1vZCB8PSBNT0RfQkxDUF8xNkJJVDsKKwkJCXZhbCB8PSBNT0RfQkxDUF8xNkJJVDsKIAkJaWYgKGlzX21hbmFnZXIoaTJzKSkKLQkJCW1vZCB8PSBNT0RfQkxDXzE2QklUOworCQkJdmFsIHw9IE1PRF9CTENfMTZCSVQ7CiAJCWJyZWFrOwogCWNhc2UgMjQ6CiAJCWlmIChpc19zZWNvbmRhcnkoaTJzKSkKLQkJCW1vZCB8PSBNT0RfQkxDU18yNEJJVDsKKwkJCXZhbCB8PSBNT0RfQkxDU18yNEJJVDsKIAkJZWxzZQotCQkJbW9kIHw9IE1PRF9CTENQXzI0QklUOworCQkJdmFsIHw9IE1PRF9CTENQXzI0QklUOwogCQlpZiAoaXNfbWFuYWdlcihpMnMpKQotCQkJbW9kIHw9IE1PRF9CTENfMjRCSVQ7CisJCQl2YWwgfD0gTU9EX0JMQ18yNEJJVDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZGV2X2VycigmaTJzLT5wZGV2LT5kZXYsICJGb3JtYXQoJWQpIG5vdCBzdXBwb3J0ZWRcbiIsCiAJCQkJcGFyYW1zX2Zvcm1hdChwYXJhbXMpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJc3Bpbl9sb2NrKGkycy0+bG9jayk7CisJbW9kID0gcmVhZGwoaTJzLT5hZGRyICsgSTJTTU9EKTsKKwltb2QgPSAobW9kICYgfm1hc2spIHwgdmFsOwogCXdyaXRlbChtb2QsIGkycy0+YWRkciArIEkyU01PRCk7CisJc3Bpbl91bmxvY2soaTJzLT5sb2NrKTsKIAogCXNhbXN1bmdfYXNvY19pbml0X2RtYV9kYXRhKGRhaSwgJmkycy0+ZG1hX3BsYXliYWNrLCAmaTJzLT5kbWFfY2FwdHVyZSk7CiAKQEAgLTczNiw3ICs3NjEsNyBAQAogCSAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJc3RydWN0IGkyc19kYWkgKmkycyA9IHRvX2luZm8oZGFpKTsKLQlzdHJ1Y3QgaTJzX2RhaSAqb3RoZXIgPSBpMnMtPnByaV9kYWkgPyA6IGkycy0+c2VjX2RhaTsKKwlzdHJ1Y3QgaTJzX2RhaSAqb3RoZXIgPSBnZXRfb3RoZXJfZGFpKGkycyk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrLCBmbGFncyk7CkBAIC03NTMsOSArNzc4LDYgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2ssIGZsYWdzKTsKIAotCWlmICghaXNfb3BlbmVkKG90aGVyKSAmJiBpMnMtPmNkY2xrX291dCkKLQkJaTJzX3NldF9zeXNjbGsoZGFpLCBTQU1TVU5HX0kyU19DRENMSywKLQkJCQkwLCBTTkRfU09DX0NMT0NLX09VVCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc2MywzOCArNzg1LDI3IEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJc3RydWN0IGkyc19kYWkgKmkycyA9IHRvX2luZm8oZGFpKTsKLQlzdHJ1Y3QgaTJzX2RhaSAqb3RoZXIgPSBpMnMtPnByaV9kYWkgPyA6IGkycy0+c2VjX2RhaTsKKwlzdHJ1Y3QgaTJzX2RhaSAqb3RoZXIgPSBnZXRfb3RoZXJfZGFpKGkycyk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQljb25zdCBzdHJ1Y3Qgc2Ftc3VuZ19pMnNfdmFyaWFudF9yZWdzICppMnNfcmVncyA9IGkycy0+dmFyaWFudF9yZWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2ssIGZsYWdzKTsKIAogCWkycy0+bW9kZSAmPSB+REFJX09QRU5FRDsKIAlpMnMtPm1vZGUgJj0gfkRBSV9NQU5BR0VSOwogCi0JaWYgKGlzX29wZW5lZChvdGhlcikpIHsKKwlpZiAoaXNfb3BlbmVkKG90aGVyKSkKIAkJb3RoZXItPm1vZGUgfD0gREFJX01BTkFHRVI7Ci0JfSBlbHNlIHsKLQkJdTMyIG1vZCA9IHJlYWRsKGkycy0+YWRkciArIEkyU01PRCk7Ci0JCWkycy0+Y2RjbGtfb3V0ID0gIShtb2QgJiAoMSA8PCBpMnNfcmVncy0+Y2RjbGtjb25fb2ZmKSk7Ci0JCWlmIChvdGhlcikKLQkJCW90aGVyLT5jZGNsa19vdXQgPSBpMnMtPmNkY2xrX291dDsKLQl9CisKIAkvKiBSZXNldCBhbnkgY29uc3RyYWludCBvbiBSRlMgYW5kIEJGUyAqLwogCWkycy0+cmZzID0gMDsKIAlpMnMtPmJmcyA9IDA7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrLCBmbGFncyk7Ci0KLQkvKiBHYXRlIENEQ0xLIGJ5IGRlZmF1bHQgKi8KLQlpZiAoIWlzX29wZW5lZChvdGhlcikpCi0JCWkyc19zZXRfc3lzY2xrKGRhaSwgU0FNU1VOR19JMlNfQ0RDTEssCi0JCQkJMCwgU05EX1NPQ19DTE9DS19JTik7CiB9CiAKIHN0YXRpYyBpbnQgY29uZmlnX3NldHVwKHN0cnVjdCBpMnNfZGFpICppMnMpCiB7Ci0Jc3RydWN0IGkyc19kYWkgKm90aGVyID0gaTJzLT5wcmlfZGFpID8gOiBpMnMtPnNlY19kYWk7CisJc3RydWN0IGkyc19kYWkgKm90aGVyID0gZ2V0X290aGVyX2RhaShpMnMpOwogCXVuc2lnbmVkIHJmcywgYmZzLCBibGM7CiAJdTMyIHBzcjsKIApAQCAtODY0LDEwICs4NzUsMTAgQEAKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUkVTVU1FOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUkVMRUFTRToKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZShpMnMtPmxvY2ssIGZsYWdzKTsKIAogCQlpZiAoY29uZmlnX3NldHVwKGkycykpIHsKLQkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaTJzLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC04NzYsMTIgKzg4NywxMiBAQAogCQllbHNlCiAJCQlpMnNfdHhjdHJsKGkycywgMSk7CiAKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKGkycy0+bG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZShpMnMtPmxvY2ssIGZsYWdzKTsKIAogCQlpZiAoY2FwdHVyZSkgewogCQkJaTJzX3J4Y3RybChpMnMsIDApOwpAQCAtODkxLDcgKzkwMiw3IEBACiAJCQlpMnNfZmlmbyhpMnMsIEZJQ19UWEZMVVNIKTsKIAkJfQogCi0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShpMnMtPmxvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAJfQogCkBAIC05MDIsNyArOTEzLDcgQEAKIAlpbnQgZGl2X2lkLCBpbnQgZGl2KQogewogCXN0cnVjdCBpMnNfZGFpICppMnMgPSB0b19pbmZvKGRhaSk7Ci0Jc3RydWN0IGkyc19kYWkgKm90aGVyID0gaTJzLT5wcmlfZGFpID8gOiBpMnMtPnNlY19kYWk7CisJc3RydWN0IGkyc19kYWkgKm90aGVyID0gZ2V0X290aGVyX2RhaShpMnMpOwogCiAJc3dpdGNoIChkaXZfaWQpIHsKIAljYXNlIFNBTVNVTkdfSTJTX0RJVl9CQ0xLOgpAQCAtOTcxLDU4ICs5ODIsMzYgQEAKIHN0YXRpYyBpbnQgc2Ftc3VuZ19pMnNfZGFpX3Byb2JlKHN0cnVjdCBzbmRfc29jX2RhaSAqZGFpKQogewogCXN0cnVjdCBpMnNfZGFpICppMnMgPSB0b19pbmZvKGRhaSk7Ci0Jc3RydWN0IGkyc19kYWkgKm90aGVyID0gaTJzLT5wcmlfZGFpID8gOiBpMnMtPnNlY19kYWk7Ci0JaW50IHJldDsKKwlzdHJ1Y3QgaTJzX2RhaSAqb3RoZXIgPSBnZXRfb3RoZXJfZGFpKGkycyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChvdGhlciAmJiBvdGhlci0+Y2xrKSB7IC8qIElmIHRoaXMgaXMgcHJvYmUgb24gc2Vjb25kYXJ5ICovCisJaWYgKGlzX3NlY29uZGFyeShpMnMpKSB7IC8qIElmIHRoaXMgaXMgcHJvYmUgb24gdGhlIHNlY29uZGFyeSBEQUkgKi8KIAkJc2Ftc3VuZ19hc29jX2luaXRfZG1hX2RhdGEoZGFpLCAmb3RoZXItPnNlY19kYWktPmRtYV9wbGF5YmFjaywKIAkJCQkJICAgTlVMTCk7Ci0JCWdvdG8gcHJvYmVfZXhpdDsKLQl9CisJfSBlbHNlIHsKKwkJc2Ftc3VuZ19hc29jX2luaXRfZG1hX2RhdGEoZGFpLCAmaTJzLT5kbWFfcGxheWJhY2ssCisJCQkJCSAgICZpMnMtPmRtYV9jYXB0dXJlKTsKIAotCWkycy0+YWRkciA9IGlvcmVtYXAoaTJzLT5iYXNlLCAweDEwMCk7Ci0JaWYgKGkycy0+YWRkciA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJmkycy0+cGRldi0+ZGV2LCAiY2Fubm90IGlvcmVtYXAgcmVnaXN0ZXJzXG4iKTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9CisJCWlmIChpMnMtPnF1aXJrcyAmIFFVSVJLX05FRURfUlNUQ0xSKQorCQkJd3JpdGVsKENPTl9SU1RDTFIsIGkycy0+YWRkciArIEkyU0NPTik7CiAKLQlpMnMtPmNsayA9IGNsa19nZXQoJmkycy0+cGRldi0+ZGV2LCAiaWlzIik7Ci0JaWYgKElTX0VSUihpMnMtPmNsaykpIHsKLQkJZGV2X2VycigmaTJzLT5wZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGkyc19jbG9ja1xuIik7Ci0JCWlvdW5tYXAoaTJzLT5hZGRyKTsKLQkJcmV0dXJuIFBUUl9FUlIoaTJzLT5jbGspOwotCX0KLQotCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpMnMtPmNsayk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCWRldl9lcnIoJmkycy0+cGRldi0+ZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBjbG9jazogJWRcbiIsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0Jc2Ftc3VuZ19hc29jX2luaXRfZG1hX2RhdGEoZGFpLCAmaTJzLT5kbWFfcGxheWJhY2ssICZpMnMtPmRtYV9jYXB0dXJlKTsKLQotCWlmIChvdGhlcikgewotCQlvdGhlci0+YWRkciA9IGkycy0+YWRkcjsKLQkJb3RoZXItPmNsayA9IGkycy0+Y2xrOwotCX0KLQotCWlmIChpMnMtPnF1aXJrcyAmIFFVSVJLX05FRURfUlNUQ0xSKQotCQl3cml0ZWwoQ09OX1JTVENMUiwgaTJzLT5hZGRyICsgSTJTQ09OKTsKLQotCWlmIChpMnMtPnF1aXJrcyAmIFFVSVJLX1NVUFBPUlRTX0lETUEpCi0JCWlkbWFfcmVnX2FkZHJfaW5pdChpMnMtPmFkZHIsCisJCWlmIChpMnMtPnF1aXJrcyAmIFFVSVJLX1NVUFBPUlRTX0lETUEpCisJCQlpZG1hX3JlZ19hZGRyX2luaXQoaTJzLT5hZGRyLAogCQkJCQlpMnMtPnNlY19kYWktPmlkbWFfcGxheWJhY2suZG1hX2FkZHIpOworCX0KIAotcHJvYmVfZXhpdDoKIAkvKiBSZXNldCBhbnkgY29uc3RyYWludCBvbiBSRlMgYW5kIEJGUyAqLwogCWkycy0+cmZzID0gMDsKIAlpMnMtPmJmcyA9IDA7CiAJaTJzLT5yY2xrX3NyY3JhdGUgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoaTJzLT5sb2NrLCBmbGFncyk7CiAJaTJzX3R4Y3RybChpMnMsIDApOwogCWkyc19yeGN0cmwoaTJzLCAwKTsKIAlpMnNfZmlmbyhpMnMsIEZJQ19UWEZMVVNIKTsKIAlpMnNfZmlmbyhvdGhlciwgRklDX1RYRkxVU0gpOwogCWkyc19maWZvKGkycywgRklDX1JYRkxVU0gpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoaTJzLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBHYXRlIENEQ0xLIGJ5IGRlZmF1bHQgKi8KIAlpZiAoIWlzX29wZW5lZChvdGhlcikpCkBAIC0xMDM1LDIxICsxMDI0LDE1IEBACiBzdGF0aWMgaW50IHNhbXN1bmdfaTJzX2RhaV9yZW1vdmUoc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJc3RydWN0IGkyc19kYWkgKmkycyA9IHNuZF9zb2NfZGFpX2dldF9kcnZkYXRhKGRhaSk7Ci0Jc3RydWN0IGkyc19kYWkgKm90aGVyID0gaTJzLT5wcmlfZGFpID8gOiBpMnMtPnNlY19kYWk7CiAKLQlpZiAoIW90aGVyIHx8ICFvdGhlci0+Y2xrKSB7Ci0KLQkJaWYgKGkycy0+cXVpcmtzICYgUVVJUktfTkVFRF9SU1RDTFIpCisJaWYgKCFpc19zZWNvbmRhcnkoaTJzKSkgeworCQlpZiAoaTJzLT5xdWlya3MgJiBRVUlSS19ORUVEX1JTVENMUikgeworCQkJc3Bpbl9sb2NrKGkycy0+bG9jayk7CiAJCQl3cml0ZWwoMCwgaTJzLT5hZGRyICsgSTJTQ09OKTsKLQotCQljbGtfZGlzYWJsZV91bnByZXBhcmUoaTJzLT5jbGspOwotCQljbGtfcHV0KGkycy0+Y2xrKTsKLQotCQlpb3VubWFwKGkycy0+YWRkcik7CisJCQlzcGluX3VubG9jayhpMnMtPmxvY2spOworCQl9CiAJfQogCi0JaTJzLT5jbGsgPSBOVUxMOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExMjQsMTUgKzExMDcsMTQgQEAKIHN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHNhbXN1bmdfaTJzX2RhaV9kYXRhICpzYW1zdW5nX2kyc19nZXRfZHJpdmVyX2RhdGEoCiAJCQkJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotI2lmZGVmIENPTkZJR19PRgotCWlmIChwZGV2LT5kZXYub2Zfbm9kZSkgeworCWlmIChJU19FTkFCTEVEKENPTkZJR19PRikgJiYgcGRldi0+ZGV2Lm9mX25vZGUpIHsKIAkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJCW1hdGNoID0gb2ZfbWF0Y2hfbm9kZShleHlub3NfaTJzX21hdGNoLCBwZGV2LT5kZXYub2Zfbm9kZSk7Ci0JCXJldHVybiBtYXRjaC0+ZGF0YTsKLQl9IGVsc2UKLSNlbmRpZgorCQlyZXR1cm4gbWF0Y2ggPyBtYXRjaC0+ZGF0YSA6IE5VTEw7CisJfSBlbHNlIHsKIAkJcmV0dXJuIChzdHJ1Y3Qgc2Ftc3VuZ19pMnNfZGFpX2RhdGEgKikKIAkJCQlwbGF0Zm9ybV9nZXRfZGV2aWNlX2lkKHBkZXYpLT5kcml2ZXJfZGF0YTsKKwl9CiB9CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTExNTUsNiArMTEzNyw4NyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCitzdGF0aWMgdm9pZCBpMnNfdW5yZWdpc3Rlcl9jbG9ja3Moc3RydWN0IGkyc19kYWkgKmkycykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBpMnMtPmNsa19kYXRhLmNsa19udW07IGkrKykgeworCQlpZiAoIUlTX0VSUihpMnMtPmNsa190YWJsZVtpXSkpCisJCQljbGtfdW5yZWdpc3RlcihpMnMtPmNsa190YWJsZVtpXSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpMnNfdW5yZWdpc3Rlcl9jbG9ja19wcm92aWRlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBpMnNfZGFpICppMnMgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlvZl9jbGtfZGVsX3Byb3ZpZGVyKHBkZXYtPmRldi5vZl9ub2RlKTsKKwlpMnNfdW5yZWdpc3Rlcl9jbG9ja3MoaTJzKTsKK30KKworc3RhdGljIGludCBpMnNfcmVnaXN0ZXJfY2xvY2tfcHJvdmlkZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBpMnNfZGFpICppMnMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwljb25zdCBjaGFyICpjbGtfbmFtZVsyXSA9IHsgImkyc19vcGNsazAiLCAiaTJzX29wY2xrMSIgfTsKKwljb25zdCBjaGFyICpwX25hbWVzWzJdID0geyBOVUxMIH07CisJY29uc3Qgc3RydWN0IHNhbXN1bmdfaTJzX3ZhcmlhbnRfcmVncyAqcmVnX2luZm8gPSBpMnMtPnZhcmlhbnRfcmVnczsKKwlzdHJ1Y3QgY2xrICpyY2xrc3JjOworCWludCByZXQsIGk7CisKKwkvKiBSZWdpc3RlciB0aGUgY2xvY2sgcHJvdmlkZXIgb25seSBpZiBpdCdzIGV4cGVjdGVkIGluIHRoZSBEVEIgKi8KKwlpZiAoIW9mX2ZpbmRfcHJvcGVydHkoZGV2LT5vZl9ub2RlLCAiI2Nsb2NrLWNlbGxzIiwgTlVMTCkpCisJCXJldHVybiAwOworCisJLyogR2V0IHRoZSBSQ0xLU1JDIG11eCBjbG9jayBwYXJlbnQgY2xvY2sgbmFtZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwX25hbWVzKTsgaSsrKSB7CisJCXJjbGtzcmMgPSBjbGtfZ2V0KGRldiwgY2xrX25hbWVbaV0pOworCQlpZiAoSVNfRVJSKHJjbGtzcmMpKQorCQkJY29udGludWU7CisJCXBfbmFtZXNbaV0gPSBfX2Nsa19nZXRfbmFtZShyY2xrc3JjKTsKKwkJY2xrX3B1dChyY2xrc3JjKTsKKwl9CisKKwlpZiAoIShpMnMtPnF1aXJrcyAmIFFVSVJLX05PX01VWFBTUikpIHsKKwkJLyogQWN0aXZhdGUgdGhlIHByZXNjYWxlciAqLworCQl1MzIgdmFsID0gcmVhZGwoaTJzLT5hZGRyICsgSTJTUFNSKTsKKwkJd3JpdGVsKHZhbCB8IFBTUl9QU1JFTiwgaTJzLT5hZGRyICsgSTJTUFNSKTsKKworCQlpMnMtPmNsa190YWJsZVtDTEtfSTJTX1JDTEtfU1JDXSA9IGNsa19yZWdpc3Rlcl9tdXgoTlVMTCwKKwkJCQkiaTJzX3JjbGtzcmMiLCBwX25hbWVzLCBBUlJBWV9TSVpFKHBfbmFtZXMpLAorCQkJCUNMS19TRVRfUkFURV9OT19SRVBBUkVOVCB8IENMS19TRVRfUkFURV9QQVJFTlQsCisJCQkJaTJzLT5hZGRyICsgSTJTTU9ELCByZWdfaW5mby0+cmNsa3NyY19vZmYsCisJCQkJMSwgMCwgaTJzLT5sb2NrKTsKKworCQlpMnMtPmNsa190YWJsZVtDTEtfSTJTX1JDTEtfUFNSXSA9IGNsa19yZWdpc3Rlcl9kaXZpZGVyKE5VTEwsCisJCQkJImkyc19wcmVzYyIsICJpMnNfcmNsa3NyYyIsCisJCQkJQ0xLX1NFVF9SQVRFX1BBUkVOVCwKKwkJCQlpMnMtPmFkZHIgKyBJMlNQU1IsIDgsIDYsIDAsIGkycy0+bG9jayk7CisKKwkJcF9uYW1lc1swXSA9ICJpMnNfcHJlc2MiOworCQlpMnMtPmNsa19kYXRhLmNsa19udW0gPSAyOworCX0KKwlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZ19pbmRleChkZXYtPm9mX25vZGUsCisJCQkJImNsb2NrLW91dHB1dC1uYW1lcyIsIDAsICZjbGtfbmFtZVswXSk7CisKKwlpMnMtPmNsa190YWJsZVtDTEtfSTJTX0NEQ0xLXSA9IGNsa19yZWdpc3Rlcl9nYXRlKE5VTEwsIGNsa19uYW1lWzBdLAorCQkJCXBfbmFtZXNbMF0sIENMS19TRVRfUkFURV9QQVJFTlQsCisJCQkJaTJzLT5hZGRyICsgSTJTTU9ELCByZWdfaW5mby0+Y2RjbGtjb25fb2ZmLAorCQkJCUNMS19HQVRFX1NFVF9UT19ESVNBQkxFLCBpMnMtPmxvY2spOworCisJaTJzLT5jbGtfZGF0YS5jbGtfbnVtICs9IDE7CisJaTJzLT5jbGtfZGF0YS5jbGtzID0gaTJzLT5jbGtfdGFibGU7CisKKwlyZXQgPSBvZl9jbGtfYWRkX3Byb3ZpZGVyKGRldi0+b2Zfbm9kZSwgb2ZfY2xrX3NyY19vbmVjZWxsX2dldCwKKwkJCQkgICZpMnMtPmNsa19kYXRhKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhZGQgY2xvY2sgcHJvdmlkZXI6ICVkXG4iLCByZXQpOworCQlpMnNfdW5yZWdpc3Rlcl9jbG9ja3MoaTJzKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IHNhbXN1bmdfaTJzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGkyc19kYWkgKnByaV9kYWksICpzZWNfZGFpID0gTlVMTDsKQEAgLTExNjQsNyArMTIyNyw3IEBACiAJdTMyIHJlZ3NfYmFzZSwgcXVpcmtzID0gMCwgaWRtYV9hZGRyID0gMDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGRldi0+ZGV2Lm9mX25vZGU7CiAJY29uc3Qgc3RydWN0IHNhbXN1bmdfaTJzX2RhaV9kYXRhICppMnNfZGFpX2RhdGE7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAogCS8qIENhbGwgZHVyaW5nIFNlY29uZGF5IGludGVyZmFjZSByZWdpc3RyYXRpb24gKi8KIAlpMnNfZGFpX2RhdGEgPSBzYW1zdW5nX2kyc19nZXRfZHJpdmVyX2RhdGEocGRldik7CkBAIC0xMTc1LDExICsxMjM4LDEzIEBACiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gZ2V0IGRydmRhdGFcbiIpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KLQkJZGV2bV9zbmRfc29jX3JlZ2lzdGVyX2NvbXBvbmVudCgmc2VjX2RhaS0+cGRldi0+ZGV2LAorCQlyZXQgPSBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KCZzZWNfZGFpLT5wZGV2LT5kZXYsCiAJCQkJCQkmc2Ftc3VuZ19pMnNfY29tcG9uZW50LAogCQkJCQkJJnNlY19kYWktPmkyc19kYWlfZHJ2LCAxKTsKLQkJc2Ftc3VuZ19hc29jX2RtYV9wbGF0Zm9ybV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKLQkJcmV0dXJuIDA7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisKKwkJcmV0dXJuIHNhbXN1bmdfYXNvY19kbWFfcGxhdGZvcm1fcmVnaXN0ZXIoJnBkZXYtPmRldik7CiAJfQogCiAJcHJpX2RhaSA9IGkyc19hbGxvY19kYWkocGRldiwgZmFsc2UpOwpAQCAtMTE4OCw2ICsxMjUzLDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJc3Bpbl9sb2NrX2luaXQoJnByaV9kYWktPnNwaW5sb2NrKTsKKwlwcmlfZGFpLT5sb2NrID0gJnByaV9kYWktPnNwaW5sb2NrOworCiAJaWYgKCFucCkgewogCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9ETUEsIDApOwogCQlpZiAoIXJlcykgewpAQCAtMTIyOSwyNSArMTI5NywyOSBAQAogCX0KIAogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFyZXMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGdldCBJMlMgU0ZSIGFkZHJlc3NcbiIpOwotCQlyZXR1cm4gLUVOWElPOwotCX0KKwlwcmlfZGFpLT5hZGRyID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7CisJaWYgKElTX0VSUihwcmlfZGFpLT5hZGRyKSkKKwkJcmV0dXJuIFBUUl9FUlIocHJpX2RhaS0+YWRkcik7CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksCi0JCQkJCQkJInNhbXN1bmctaTJzIikpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgU0ZSIHJlZ2lvblxuIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQogCXJlZ3NfYmFzZSA9IHJlcy0+c3RhcnQ7CiAKKwlwcmlfZGFpLT5jbGsgPSBkZXZtX2Nsa19nZXQoJnBkZXYtPmRldiwgImlpcyIpOworCWlmIChJU19FUlIocHJpX2RhaS0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gZ2V0IGlpcyBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJSKHByaV9kYWktPmNsayk7CisJfQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHByaV9kYWktPmNsayk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBlbmFibGUgY2xvY2s6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KIAlwcmlfZGFpLT5kbWFfcGxheWJhY2suZG1hX2FkZHIgPSByZWdzX2Jhc2UgKyBJMlNUWEQ7CiAJcHJpX2RhaS0+ZG1hX2NhcHR1cmUuZG1hX2FkZHIgPSByZWdzX2Jhc2UgKyBJMlNSWEQ7CiAJcHJpX2RhaS0+ZG1hX3BsYXliYWNrLmNoX25hbWUgPSAidHgiOwogCXByaV9kYWktPmRtYV9jYXB0dXJlLmNoX25hbWUgPSAicngiOwogCXByaV9kYWktPmRtYV9wbGF5YmFjay5kbWFfc2l6ZSA9IDQ7CiAJcHJpX2RhaS0+ZG1hX2NhcHR1cmUuZG1hX3NpemUgPSA0OwotCXByaV9kYWktPmJhc2UgPSByZWdzX2Jhc2U7CiAJcHJpX2RhaS0+cXVpcmtzID0gcXVpcmtzOwogCXByaV9kYWktPnZhcmlhbnRfcmVncyA9IGkyc19kYWlfZGF0YS0+aTJzX3ZhcmlhbnRfcmVnczsKIApAQCAtMTI1OCwxMCArMTMzMCwxMCBAQAogCQlzZWNfZGFpID0gaTJzX2FsbG9jX2RhaShwZGV2LCB0cnVlKTsKIAkJaWYgKCFzZWNfZGFpKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gYWxsb2MgSTJTX3NlY1xuIik7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBlcnI7CisJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCisJCXNlY19kYWktPmxvY2sgPSAmcHJpX2RhaS0+c3BpbmxvY2s7CiAJCXNlY19kYWktPnZhcmlhbnRfcmVncyA9IHByaV9kYWktPnZhcmlhbnRfcmVnczsKIAkJc2VjX2RhaS0+ZG1hX3BsYXliYWNrLmRtYV9hZGRyID0gcmVnc19iYXNlICsgSTJTVFhEUzsKIAkJc2VjX2RhaS0+ZG1hX3BsYXliYWNrLmNoX25hbWUgPSAidHgtc2VjIjsKQEAgLTEyNzMsNyArMTM0NSw4IEBACiAJCX0KIAogCQlzZWNfZGFpLT5kbWFfcGxheWJhY2suZG1hX3NpemUgPSA0OwotCQlzZWNfZGFpLT5iYXNlID0gcmVnc19iYXNlOworCQlzZWNfZGFpLT5hZGRyID0gcHJpX2RhaS0+YWRkcjsKKwkJc2VjX2RhaS0+Y2xrID0gcHJpX2RhaS0+Y2xrOwogCQlzZWNfZGFpLT5xdWlya3MgPSBxdWlya3M7CiAJCXNlY19kYWktPmlkbWFfcGxheWJhY2suZG1hX2FkZHIgPSBpZG1hX2FkZHI7CiAJCXNlY19kYWktPnByaV9kYWkgPSBwcmlfZGFpOwpAQCAtMTI4Miw4ICsxMzU1LDcgQEAKIAogCWlmIChpMnNfcGRhdGEgJiYgaTJzX3BkYXRhLT5jZmdfZ3BpbyAmJiBpMnNfcGRhdGEtPmNmZ19ncGlvKHBkZXYpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBjb25maWd1cmUgZ3Bpb1xuIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KCZwcmlfZGFpLT5wZGV2LT5kZXYsCkBAIC0xMjkyLDMyICsxMzY0LDMwIEBACiAKIAlwbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsKIAotCXNhbXN1bmdfYXNvY19kbWFfcGxhdGZvcm1fcmVnaXN0ZXIoJnBkZXYtPmRldik7CisJcmV0ID0gc2Ftc3VuZ19hc29jX2RtYV9wbGF0Zm9ybV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CiAKLQlyZXR1cm4gMDsKLWVycjoKLQlpZiAocmVzKQotCQlyZWxlYXNlX21lbV9yZWdpb24ocmVnc19iYXNlLCByZXNvdXJjZV9zaXplKHJlcykpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gaTJzX3JlZ2lzdGVyX2Nsb2NrX3Byb3ZpZGVyKHBkZXYpOwogfQogCiBzdGF0aWMgaW50IHNhbXN1bmdfaTJzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBpMnNfZGFpICppMnMsICpvdGhlcjsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKIAogCWkycyA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKLQlvdGhlciA9IGkycy0+cHJpX2RhaSA/IDogaTJzLT5zZWNfZGFpOworCW90aGVyID0gZ2V0X290aGVyX2RhaShpMnMpOwogCiAJaWYgKG90aGVyKSB7CiAJCW90aGVyLT5wcmlfZGFpID0gTlVMTDsKIAkJb3RoZXItPnNlY19kYWkgPSBOVUxMOwogCX0gZWxzZSB7CiAJCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKLQkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQkJaWYgKHJlcykKLQkJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCX0KKworCWlmICghaXNfc2Vjb25kYXJ5KGkycykpIHsKKwkJaTJzX3VucmVnaXN0ZXJfY2xvY2tfcHJvdmlkZXIocGRldik7CisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShpMnMtPmNsayk7CiAJfQogCiAJaTJzLT5wcmlfZGFpID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL2ppdmVfd204NzUwLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9qaXZlX3dtODc1MC5jCmluZGV4IGI1ZjZhYmQuLjdmY2I1MWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL2ppdmVfd204NzUwLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvaml2ZV93bTg3NTAuYwpAQCAtNjEsMjAgKzYxLDYgQEAKIAlzM2NfaTJzdjJfaWlzX2NhbGNfcmF0ZSgmZGl2LCBOVUxMLCBwYXJhbXNfcmF0ZShwYXJhbXMpLAogCQkJCXMzY19pMnN2Ml9nZXRfY2xvY2soY3B1X2RhaSkpOwogCi0JLyogc2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8Ci0JCQkJICBTTkRfU09DX0RBSUZNVF9OQl9ORiB8Ci0JCQkJICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIHNldCBjcHUgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8Ci0JCQkJICBTTkRfU09DX0RBSUZNVF9OQl9ORiB8Ci0JCQkJICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCS8qIHNldCB0aGUgY29kZWMgc3lzdGVtIGNsb2NrIGZvciBEQUMgYW5kIEFEQyAqLwogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg3NTBfU1lTQ0xLLCBjbGssCiAJCQkJICAgICBTTkRfU09DX0NMT0NLX0lOKTsKQEAgLTk3LDIyICs4Myw2IEBACiAJLmh3X3BhcmFtcwk9IGppdmVfaHdfcGFyYW1zLAogfTsKIAotc3RhdGljIGludCBqaXZlX3dtODc1MF9pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCi17Ci0Jc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gcnRkLT5jb2RlYzsKLQlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSAmY29kZWMtPmRhcG07Ci0KLQkvKiBUaGVzZSBlbmRwb2ludHMgYXJlIG5vdCBiZWluZyB1c2VkLiAqLwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIkxJTlBVVDIiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJSSU5QVVQyIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTElOUFVUMyIpOwotCXNuZF9zb2NfZGFwbV9uY19waW4oZGFwbSwgIlJJTlBVVDMiKTsKLQlzbmRfc29jX2RhcG1fbmNfcGluKGRhcG0sICJPVVQzIik7Ci0Jc25kX3NvY19kYXBtX25jX3BpbihkYXBtLCAiTU9OTyIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBqaXZlX2RhaSA9IHsKIAkubmFtZQkJPSAid204NzUwIiwKIAkuc3RyZWFtX25hbWUJPSAiV004NzUwIiwKQEAgLTEyMCw3ICs5MCw4IEBACiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1MC1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZQk9ICJzM2MyNDEyLWkycyIsCiAJLmNvZGVjX25hbWUJPSAid204NzUwLjAtMDAxYSIsCi0JLmluaXQJCT0gaml2ZV93bTg3NTBfaW5pdCwKKwkuZGFpX2ZtdAk9IFNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJCSAgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUywKIAkub3BzCQk9ICZqaXZlX29wcywKIH07CiAKQEAgLTEzNSw2ICsxMDYsNyBAQAogCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRSh3bTg3NTBfZGFwbV93aWRnZXRzKSwKIAkuZGFwbV9yb3V0ZXMJPSBhdWRpb19tYXAsCiAJLm51bV9kYXBtX3JvdXRlcyA9IEFSUkFZX1NJWkUoYXVkaW9fbWFwKSwKKwkuZnVsbHlfcm91dGVkCT0gdHJ1ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpqaXZlX3NuZF9kZXZpY2U7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jIGIvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYwppbmRleCA5YjRhMDlmLi42NTYwMmI5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfd204NzUzLmMKQEAgLTcwLDIwICs3MCw2IEBACiAJCWJyZWFrOwogCX0KIAotCS8qIHNldCBjb2RlYyBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLAotCQlTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8Ci0JCVNORF9TT0NfREFJRk1UX0NCTV9DRk0pOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwKLQkJU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAotCQlTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCS8qIHNldCB0aGUgY29kZWMgc3lzdGVtIGNsb2NrIGZvciBEQUMgYW5kIEFEQyAqLwogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg3NTNfTUNMSywgcGxsX291dCwKIAkJU05EX1NPQ19DTE9DS19JTik7CkBAIC0xNTEsMTMgKzEzNyw2IEBACiAKIAlwY21kaXYgPSBXTTg3NTNfUENNX0RJVl82OyAvKiAyLjA0OCBNSHogKi8KIAotCS8qIHRvZG86IGdnIGNoZWNrIG1vZGUgKERTUF9CKSBhZ2FpbnN0IENTUiBkYXRhc2hlZXQgKi8KLQkvKiBzZXQgY29kZWMgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgU05EX1NPQ19EQUlGTVRfRFNQX0IgfAotCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCU19DRlMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCiAJLyogc2V0IHRoZSBjb2RlYyBzeXN0ZW0gY2xvY2sgZm9yIERBQyBhbmQgQURDICovCiAJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIFdNODc1M19QQ01DTEssIDEyMjg4MDAwLAogCQlTTkRfU09DX0NMT0NLX0lOKTsKQEAgLTMwMCw2ICsyNzksOCBAQAogCS5jcHVfZGFpX25hbWUgPSAiczNjMjR4eC1paXMiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg3NTMtaGlmaSIsCiAJLmNvZGVjX25hbWUgPSAid204NzUzLjAtMDAxYSIsCisJLmRhaV9mbXQgPSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCSAgIFNORF9TT0NfREFJRk1UX0NCTV9DRk0sCiAJLmluaXQgPSBuZW8xOTczX3dtODc1M19pbml0LAogCS5vcHMgPSAmbmVvMTk3M19oaWZpX29wcywKIH0sCkBAIC0zMDksNiArMjkwLDggQEAKIAkuY3B1X2RhaV9uYW1lID0gImJ0LXNjby1wY20iLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg3NTMtdm9pY2UiLAogCS5jb2RlY19uYW1lID0gIndtODc1My4wLTAwMWEiLAorCS5kYWlfZm10ID0gU05EX1NPQ19EQUlGTVRfRFNQX0IgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCSAgIFNORF9TT0NfREFJRk1UX0NCU19DRlMsCiAJLm9wcyA9ICZuZW8xOTczX3ZvaWNlX29wcywKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvb2Ryb2lkeDJfbWF4OTgwOTAuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL29kcm9pZHgyX21heDk4MDkwLmMKaW5kZXggZmE0ZjFkMi4uNTk2ZjExOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvb2Ryb2lkeDJfbWF4OTgwOTAuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9vZHJvaWR4Ml9tYXg5ODA5MC5jCkBAIC0yMSw2ICsyMSw4IEBACiAvKiBUaGUgSTJTIENEQ0xLIG91dHB1dCBjbG9jayBmcmVxdWVuY3kgZm9yIHRoZSBNQVg5ODA5MCBjb2RlYyAqLwogI2RlZmluZSBNQVg5ODA5MF9NQ0xLIDE5MjAwMDAwCiAKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBvZHJvaWR4Ml9kYWlbXTsKKwogc3RhdGljIGludCBvZHJvaWR4Ml9sYXRlX3Byb2JlKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBjYXJkLT5ydGRbMF0uY29kZWNfZGFpOwpAQCAtMjksNyArMzEsOSBAQAogCiAJcmV0ID0gc25kX3NvY19kYWlfc2V0X3N5c2Nsayhjb2RlY19kYWksIDAsIE1BWDk4MDkwX01DTEssCiAJCQkJCQlTTkRfU09DX0NMT0NLX0lOKTsKLQlpZiAocmV0IDwgMCkKKworCWlmIChyZXQgPCAwIHx8IG9mX2ZpbmRfcHJvcGVydHkob2Ryb2lkeDJfZGFpWzBdLmNvZGVjX29mX25vZGUsCisJCQkJCSJjbG9ja3MiLCBOVUxMKSkKIAkJcmV0dXJuIHJldDsKIAogCS8qIFNldCB0aGUgY3B1IERBSSBjb25maWd1cmF0aW9uIGluIG9yZGVyIHRvIHVzZSBDRENMSyAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvcngxOTUwX3VkYTEzODAuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3J4MTk1MF91ZGExMzgwLmMKaW5kZXggMzc2ODhlYi4uODczZjJjYiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvcngxOTUwX3VkYTEzODAuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9yeDE5NTBfdWRhMTM4MC5jCkBAIC04OSw2ICs4OSw4IEBACiAJCS5pbml0CQk9IHJ4MTk1MF91ZGExMzgwX2luaXQsCiAJCS5wbGF0Zm9ybV9uYW1lCT0gInMzYzI0eHgtaWlzIiwKIAkJLmNvZGVjX25hbWUJPSAidWRhMTM4MC1jb2RlYy4wLTAwMWEiLAorCQkuZGFpX2ZtdAk9IFNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX0NCU19DRlMsCiAJCS5vcHMJCT0gJnJ4MTk1MF9vcHMsCiAJfSwKIH07CkBAIC0xNTQsNyArMTU2LDYgQEAKIHsKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5jcHVfZGFpOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY29kZWNfZGFpID0gcnRkLT5jb2RlY19kYWk7CiAJaW50IGRpdjsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCByYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKQEAgLTE4MSwxOCArMTgyLDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogc2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8Ci0JCVNORF9TT0NfREFJRk1UX05CX05GIHwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBzZXQgY3B1IERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAotCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCU19DRlMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCiAJLyogc2VsZWN0IGNsb2NrIHNvdXJjZSAqLwogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgY2xrX3NvdXJjZSwgcmF0ZSwKIAkJCVNORF9TT0NfQ0xPQ0tfT1VUKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlYy5jCmluZGV4IDJjMDE1ZjYuLmRjYzAwOGQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWMuYwpAQCAtMTY5LDI0ICsxNjksNiBAQAogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKIAlpbnQgcmV0OwogCi0JLyogU2V0IHRoZSBDT0RFQyBhcyB0aGUgYnVzIGNsb2NrIG1hc3RlciwgSTJTICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAotCQkJCSAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAotCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoIiVzOiBmYWlsZWQgc2V0IGNwdSBkYWkgZm9ybWF0XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogU2V0IHRoZSBDT0RFQyBhcyB0aGUgYnVzIGNsb2NrIG1hc3RlciAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAotCQkJCSAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAotCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTSk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoIiVzOiBmYWlsZWQgc2V0IGNvZGVjIGRhaSBmb3JtYXRcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNvZGVjX2RhaSwgMCwKIAkJCQkgICAgIENPREVDX0NMT0NLLCBTTkRfU09DX0NMT0NLX0lOKTsKIAlpZiAocmV0KSB7CkBAIC0zMjAsNiArMzAyLDggQEAKIAlpbnQgcmV0OwogCiAJY2FyZC0+ZGFpX2xpbmstPm9wcyA9ICZzaW10ZWNfc25kX29wczsKKwljYXJkLT5kYWlfbGluay0+ZGFpX2ZtdCA9IFNORF9TT0NfREFJRk1UX0kyUyB8IFNORF9TT0NfREFJRk1UX05CX05GIHwKKwkJCQkgIFNORF9TT0NfREFJRk1UX0NCTV9DRk07CiAKIAlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWlmICghcGRhdGEpIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfdWRhMTM0eC5jIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKaW5kZXggOWM2ZjdkYi4uNTA4NDllMSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKQEAgLTE3MywxNiArMTczLDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8Ci0JCQlTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFNORF9TT0NfREFJRk1UX0NCU19DRlMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjcHVfZGFpLCBTTkRfU09DX0RBSUZNVF9JMlMgfAotCQkJU05EX1NPQ19EQUlGTVRfTkJfTkYgfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY3B1X2RhaSwgY2xrX3NvdXJjZSAsIGNsaywKIAkJCVNORF9TT0NfQ0xPQ0tfSU4pOwogCWlmIChyZXQgPCAwKQpAQCAtMjIzLDYgKzIxMyw4IEBACiAJLmNvZGVjX25hbWUgPSAidWRhMTM0eC1jb2RlYyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gInVkYTEzNHgtaGlmaSIsCiAJLmNwdV9kYWlfbmFtZSA9ICJzM2MyNHh4LWlpcyIsCisJLmRhaV9mbXQgPSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCSAgIFNORF9TT0NfREFJRk1UX0NCU19DRlMsCiAJLm9wcyA9ICZzM2MyNHh4X3VkYTEzNHhfb3BzLAogCS5wbGF0Zm9ybV9uYW1lCT0gInMzYzI0eHgtaWlzIiwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWFydHFfd204OTg3LmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWFydHFfd204OTg3LmMKaW5kZXggOWIwZmZhYy4uODI5MWQyYSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvc21hcnRxX3dtODk4Ny5jCisrKyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NtYXJ0cV93bTg5ODcuYwpAQCAtNTYsMjAgKzU2LDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyogc2V0IGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0kyUyB8Ci0JCQkJCSAgICAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAotCQkJCQkgICAgIFNORF9TT0NfREFJRk1UX0NCU19DRlMpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JLyogc2V0IGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfSTJTIHwKLQkJCQkJICAgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAotCQkJCQkgICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCS8qIFVzZSBQQ0xLIGZvciBJMlMgc2lnbmFsIGdlbmVyYXRpb24gKi8KIAlyZXQgPSBzbmRfc29jX2RhaV9zZXRfc3lzY2xrKGNwdV9kYWksIFNBTVNVTkdfSTJTX1JDTEtTUkNfMCwKIAkJCQkJMCwgU05EX1NPQ19DTE9DS19JTik7CkBAIC0xOTksNiArMTg1LDggQEAKIAkJLnBsYXRmb3JtX25hbWUJPSAic2Ftc3VuZy1pMnMuMCIsCiAJCS5jb2RlY19uYW1lCT0gIndtODc1MC4wLTB4MWEiLAogCQkuaW5pdAkJPSBzbWFydHFfd204OTg3X2luaXQsCisJCS5kYWlfZm10CT0gU05EX1NPQ19EQUlGTVRfSTJTIHwgU05EX1NPQ19EQUlGTVRfTkJfTkYgfAorCQkJCSAgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUywKIAkJLm9wcwkJPSAmc21hcnRxX2hpZmlfb3BzLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvc21ka193bTg1ODAuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NtZGtfd204NTgwLmMKaW5kZXggYjFhNTE5Zi4uNTQ4YmZkOSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvc21ka193bTg1ODAuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3dtODU4MC5jCkBAIC0zMiw3ICszMiw2IEBACiAJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+Y3B1X2RhaTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOwogCXVuc2lnbmVkIGludCBwbGxfb3V0OwogCWludCBiZnMsIHJmcywgcmV0OwpAQCAtNzcsMjAgKzc2LDYgQEAKIAl9CiAJcGxsX291dCA9IHBhcmFtc19yYXRlKHBhcmFtcykgKiByZnM7CiAKLQkvKiBTZXQgdGhlIENvZGVjIERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0kyUwotCQkJCQkgfCBTTkRfU09DX0RBSUZNVF9OQl9ORgotCQkJCQkgfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCS8qIFNldCB0aGUgQVAgREFJIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIFNORF9TT0NfREFJRk1UX0kyUwotCQkJCQkgfCBTTkRfU09DX0RBSUZNVF9OQl9ORgotCQkJCQkgfCBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCS8qIFNldCBXTTg1ODAgdG8gZHJpdmUgTUNMSyBmcm9tIGl0cyBQTExBICovCiAJcmV0ID0gc25kX3NvY19kYWlfc2V0X2Nsa2Rpdihjb2RlY19kYWksIFdNODU4MF9NQ0xLLAogCQkJCQlXTTg1ODBfQ0xLU1JDX1BMTEEpOwpAQCAtMTUxLDEzICsxMzYsMTAgQEAKIAogc3RhdGljIGludCBzbWRrX3dtODU4MF9pbml0X3BhaWZ0eChzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewotCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHJ0ZC0+Y29kZWM7Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtID0gJmNvZGVjLT5kYXBtOwotCiAJLyogRW5hYmxpbmcgdGhlIG1pY3JvcGhvbmUgcmVxdWlyZXMgdGhlIGZpdHRpbmcgb2YgYSAwUgogCSAqIHJlc2lzdG9yIHRvIGNvbm5lY3QgdGhlIGxpbmUgZnJvbSB0aGUgbWljcm9waG9uZSBqYWNrLgogCSAqLwotCXNuZF9zb2NfZGFwbV9kaXNhYmxlX3BpbihkYXBtLCAiTWljSW4iKTsKKwlzbmRfc29jX2RhcG1fZGlzYWJsZV9waW4oJnJ0ZC0+Y2FyZC0+ZGFwbSwgIk1pY0luIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2OCw2ICsxNTAsOSBAQAogCVNFQ19QTEFZQkFDSywKIH07CiAKKyNkZWZpbmUgU01ES19EQUlfRk1UIChTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8IFwKKwlTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNKQorCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc21ka19kYWlbXSA9IHsKIAlbUFJJX1BMQVlCQUNLXSA9IHsgLyogUHJpbWFyeSBQbGF5YmFjayBpL2YgKi8KIAkJLm5hbWUgPSAiV004NTgwIFBBSUYgUlgiLApAQCAtMTc2LDYgKzE2MSw3IEBACiAJCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg1ODAtaGlmaS1wbGF5YmFjayIsCiAJCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctaTJzLjAiLAogCQkuY29kZWNfbmFtZSA9ICJ3bTg1ODAuMC0wMDFiIiwKKwkJLmRhaV9mbXQgPSBTTURLX0RBSV9GTVQsCiAJCS5vcHMgPSAmc21ka19vcHMsCiAJfSwKIAlbUFJJX0NBUFRVUkVdID0geyAvKiBQcmltYXJ5IENhcHR1cmUgaS9mICovCkBAIC0xODUsNiArMTcxLDcgQEAKIAkJLmNvZGVjX2RhaV9uYW1lID0gIndtODU4MC1oaWZpLWNhcHR1cmUiLAogCQkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWkycy4wIiwKIAkJLmNvZGVjX25hbWUgPSAid204NTgwLjAtMDAxYiIsCisJCS5kYWlfZm10ID0gU01ES19EQUlfRk1ULAogCQkuaW5pdCA9IHNtZGtfd204NTgwX2luaXRfcGFpZnR4LAogCQkub3BzID0gJnNtZGtfb3BzLAogCX0sCkBAIC0xOTUsNiArMTgyLDcgQEAKIAkJLmNvZGVjX2RhaV9uYW1lID0gIndtODU4MC1oaWZpLXBsYXliYWNrIiwKIAkJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1pMnMtc2VjIiwKIAkJLmNvZGVjX25hbWUgPSAid204NTgwLjAtMDAxYiIsCisJCS5kYWlfZm10ID0gU01ES19EQUlfRk1ULAogCQkub3BzID0gJnNtZGtfb3BzLAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvc21ka193bTg1ODBwY20uYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3NtZGtfd204NTgwcGNtLmMKaW5kZXggMDVjNjA5Yy4uNmRlZWM1MiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvc21ka193bTg1ODBwY20uYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3dtODU4MHBjbS5jCkBAIC02MiwyMCArNjIsNiBAQAogCiAJcmZzID0gbWNsa19mcmVxIC8gcGFyYW1zX3JhdGUocGFyYW1zKSAvIDI7CiAKLQkvKiBTZXQgdGhlIGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0RTUF9CCi0JCQkJfCBTTkRfU09DX0RBSUZNVF9JQl9ORgotCQkJCXwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBTZXQgdGhlIGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfRFNQX0IKLQkJCQl8IFNORF9TT0NfREFJRk1UX0lCX05GCi0JCQkJfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCWlmIChtY2xrX2ZyZXEgPT0geHRhbF9mcmVxKSB7CiAJCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg1ODBfQ0xLU1JDX01DTEssCiAJCQkJCQltY2xrX2ZyZXEsIFNORF9TT0NfQ0xPQ0tfSU4pOwpAQCAtMTIxLDYgKzEwNyw5IEBACiAJLmh3X3BhcmFtcyA9IHNtZGtfd204NTgwX3BjbV9od19wYXJhbXMsCiB9OwogCisjZGVmaW5lIFNNREtfREFJX0ZNVCAoU05EX1NPQ19EQUlGTVRfRFNQX0IgfCBTTkRfU09DX0RBSUZNVF9JQl9ORiB8IFwKKwlTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKQorCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc21ka19kYWlbXSA9IHsKIAl7CiAJCS5uYW1lID0gIldNODU4MCBQQUlGIFBDTSBSWCIsCkBAIC0xMjksNiArMTE4LDcgQEAKIAkJLmNvZGVjX2RhaV9uYW1lID0gIndtODU4MC1oaWZpLXBsYXliYWNrIiwKIAkJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCiAJCS5jb2RlY19uYW1lID0gIndtODU4MC4wLTAwMWIiLAorCQkuZGFpX2ZtdCA9IFNNREtfREFJX0ZNVCwKIAkJLm9wcyA9ICZzbWRrX3dtODU4MF9wY21fb3BzLAogCX0sIHsKIAkJLm5hbWUgPSAiV004NTgwIFBBSUYgUENNIFRYIiwKQEAgLTEzNyw2ICsxMjcsNyBAQAogCQkuY29kZWNfZGFpX25hbWUgPSAid204NTgwLWhpZmktY2FwdHVyZSIsCiAJCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctcGNtLjAiLAogCQkuY29kZWNfbmFtZSA9ICJ3bTg1ODAuMC0wMDFiIiwKKwkJLmRhaV9mbXQgPSBTTURLX0RBSV9GTVQsCiAJCS5vcHMgPSAmc21ka193bTg1ODBfcGNtX29wcywKIAl9LAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3NtZGtfd204OTk0cGNtLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zbWRrX3dtODk5NHBjbS5jCmluZGV4IGM0NzBlOGUuLmIxYzg5ZWMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL3NtZGtfd204OTk0cGNtLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvc21ka193bTg5OTRwY20uYwpAQCAtNjgsMjAgKzY4LDYgQEAKIAogCW1jbGtfZnJlcSA9IHBhcmFtc19yYXRlKHBhcmFtcykgKiByZnM7CiAKLQkvKiBTZXQgdGhlIGNvZGVjIERBSSBjb25maWd1cmF0aW9uICovCi0JcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIFNORF9TT0NfREFJRk1UX0RTUF9CCi0JCQkJfCBTTkRfU09DX0RBSUZNVF9JQl9ORgotCQkJCXwgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUyk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQkvKiBTZXQgdGhlIGNwdSBEQUkgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY3B1X2RhaSwgU05EX1NPQ19EQUlGTVRfRFNQX0IKLQkJCQl8IFNORF9TT0NfREFJRk1UX0lCX05GCi0JCQkJfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCXJldCA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBXTTg5OTRfU1lTQ0xLX0ZMTDEsCiAJCQkJCW1jbGtfZnJlcSwgU05EX1NPQ19DTE9DS19JTik7CiAJaWYgKHJldCA8IDApCkBAIC0xMTgsNiArMTA0LDggQEAKIAkJLmNvZGVjX2RhaV9uYW1lID0gIndtODk5NC1haWYxIiwKIAkJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1wY20uMCIsCiAJCS5jb2RlY19uYW1lID0gIndtODk5NC1jb2RlYyIsCisJCS5kYWlfZm10ID0gU05EX1NPQ19EQUlGTVRfRFNQX0IgfCBTTkRfU09DX0RBSUZNVF9JQl9ORiB8CisJCQkgICBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTLAogCQkub3BzID0gJnNtZGtfd204OTk0X3BjbV9vcHMsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvZG1hLXNoNzc2MC5jIGIvc291bmQvc29jL3NoL2RtYS1zaDc3NjAuYwppbmRleCBhNWIyYzRlLi5mZDExNDA0IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvZG1hLXNoNzc2MC5jCisrKyBiL3NvdW5kL3NvYy9zaC9kbWEtc2g3NzYwLmMKQEAgLTMwNSwxMSArMzA1LDYgQEAKIAkucG9pbnRlcgk9IGNhbWVsb3RfcG9zLAogfTsKIAotc3RhdGljIHZvaWQgY2FtZWxvdF9wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQotewotCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX2ZyZWVfZm9yX2FsbChwY20pOwotfQotCiBzdGF0aWMgaW50IGNhbWVsb3RfcGNtX25ldyhzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCBzbmRfcGNtICpwY20gPSBydGQtPnBjbTsKQEAgLTMyOCw3ICszMjMsNiBAQAogc3RhdGljIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtX2RyaXZlciBzaDc3NjBfc29jX3BsYXRmb3JtID0gewogCS5vcHMJCT0gJmNhbWVsb3RfcGNtX29wcywKIAkucGNtX25ldwk9IGNhbWVsb3RfcGNtX25ldywKLQkucGNtX2ZyZWUJPSBjYW1lbG90X3BjbV9mcmVlLAogfTsKIAogc3RhdGljIGludCBzaDc3NjBfc29jX3BsYXRmb3JtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvZnNpLmMgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKaW5kZXggODg2OTk3MS4uYjg3YjIyZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL2ZzaS5jCisrKyBiL3NvdW5kL3NvYy9zaC9mc2kuYwpAQCAtODIwLDEyICs4MjAsOSBAQAogCQkJcmV0dXJuIHJldDsKIAkJfQogCi0JCWlmIChjbG9jay0+eGNrKQotCQkJY2xrX2VuYWJsZShjbG9jay0+eGNrKTsKLQkJaWYgKGNsb2NrLT5pY2spCi0JCQljbGtfZW5hYmxlKGNsb2NrLT5pY2spOwotCQlpZiAoY2xvY2stPmRpdikKLQkJCWNsa19lbmFibGUoY2xvY2stPmRpdik7CisJCWNsa19lbmFibGUoY2xvY2stPnhjayk7CisJCWNsa19lbmFibGUoY2xvY2stPmljayk7CisJCWNsa19lbmFibGUoY2xvY2stPmRpdik7CiAKIAkJY2xvY2stPmNvdW50Kys7CiAJfQpAQCAtMTc2NSwxMSArMTc2Miw2IEBACiAjZGVmaW5lIFBSRUFMTE9DX0JVRkZFUgkJKDMyICogMTAyNCkKICNkZWZpbmUgUFJFQUxMT0NfQlVGRkVSX01BWAkoMzIgKiAxMDI0KQogCi1zdGF0aWMgdm9pZCBmc2lfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKLXsKLQlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9mcmVlX2Zvcl9hbGwocGNtKTsKLX0KLQogc3RhdGljIGludCBmc2lfcGNtX25ldyhzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXJldHVybiBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlc19mb3JfYWxsKApAQCAtMTgyMSw3ICsxODEzLDYgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybV9kcml2ZXIgZnNpX3NvY19wbGF0Zm9ybSA9IHsKIAkub3BzCQk9ICZmc2lfcGNtX29wcywKIAkucGNtX25ldwk9IGZzaV9wY21fbmV3LAotCS5wY21fZnJlZQk9IGZzaV9wY21fZnJlZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVyIGZzaV9zb2NfY29tcG9uZW50ID0gewpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL21pZ29yLmMgYi9zb3VuZC9zb2Mvc2gvbWlnb3IuYwppbmRleCBjNThjMjUyLi44MmY1ODIzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvbWlnb3IuYworKysgYi9zb3VuZC9zb2Mvc2gvbWlnb3IuYwpAQCAtNjMsMTYgKzYzLDYgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBTTkRfU09DX0RBSUZNVF9OQl9JRiB8Ci0JCQkJICBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQocnRkLT5jcHVfZGFpLCBTTkRfU09DX0RBSUZNVF9OQl9JRiB8Ci0JCQkJICBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCWNvZGVjX2ZyZXEgPSByYXRlICogNTEyOwogCS8qCiAJICogVGhpcyBwcm9wYWdhdGVzIHRoZSBwYXJlbnQgZnJlcXVlbmN5IGNoYW5nZSB0byBjaGlsZHJlbiBhbmQKQEAgLTE0NCw2ICsxMzQsOCBAQAogCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg5NzgtaGlmaSIsCiAJLnBsYXRmb3JtX25hbWUgPSAic2l1LXBjbS1hdWRpbyIsCiAJLmNvZGVjX25hbWUgPSAid204OTc4LjAtMDAxYSIsCisJLmRhaV9mbXQgPSBTTkRfU09DX0RBSUZNVF9OQl9JRiB8IFNORF9TT0NfREFJRk1UX0kyUyB8CisJCSAgIFNORF9TT0NfREFJRk1UX0NCU19DRlMsCiAJLm9wcyA9ICZtaWdvcl9kYWlfb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3JjYXIvYWRnLmMgYi9zb3VuZC9zb2Mvc2gvcmNhci9hZGcuYwppbmRleCAxNGQxYTcxLi43YWMzNWM5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvcmNhci9hZGcuYworKysgYi9zb3VuZC9zb2Mvc2gvcmNhci9hZGcuYwpAQCAtNTcsOCArNTcsNyBAQAogCXJldHVybiAoMHg2ICsgd3MpIDw8IDg7CiB9CiAKLWludCByc25kX2FkZ19zZXRfY21kX3RpbXNlbF9nZW4yKHN0cnVjdCByc25kX2RhaSAqcmRhaSwKLQkJCQkgc3RydWN0IHJzbmRfbW9kICptb2QsCitpbnQgcnNuZF9hZGdfc2V0X2NtZF90aW1zZWxfZ2VuMihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKIAkJCQkgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pCiB7CiAJaW50IGlkID0gcnNuZF9tb2RfaWQobW9kKTsKQEAgLTc1LDEyICs3NCwxMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJzbmRfYWRnX3NldF9zcmNfdGltc2VsX2dlbjIoc3RydWN0IHJzbmRfZGFpICpyZGFpLAotCQkJCQlzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKK3N0YXRpYyBpbnQgcnNuZF9hZGdfc2V0X3NyY190aW1zZWxfZ2VuMihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKIAkJCQkJc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCiAJCQkJCXUzMiB0aW1zZWwpCiB7Ci0JaW50IGlzX3BsYXkgPSByc25kX2RhaV9pc19wbGF5KHJkYWksIGlvKTsKKwlpbnQgaXNfcGxheSA9IHJzbmRfaW9faXNfcGxheShpbyk7CiAJaW50IGlkID0gcnNuZF9tb2RfaWQobW9kKTsKIAlpbnQgc2hpZnQgPSAoaWQgJSAyKSA/IDE2IDogMDsKIAl1MzIgbWFzaywgd3M7CkBAIC0xMjIsNyArMTIwLDYgQEAKIH0KIAogaW50IHJzbmRfYWRnX3NldF9jb252ZXJ0X2Nsa19nZW4yKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJCSAgc3RydWN0IHJzbmRfZGFpICpyZGFpLAogCQkJCSAgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sCiAJCQkJICB1bnNpZ25lZCBpbnQgc3JjX3JhdGUsCiAJCQkJICB1bnNpZ25lZCBpbnQgZHN0X3JhdGUpCkBAIC0xNzgsNyArMTc1LDcgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JcmV0ID0gcnNuZF9hZGdfc2V0X3NyY190aW1zZWxfZ2VuMihyZGFpLCBtb2QsIGlvLCB2YWwpOworCXJldCA9IHJzbmRfYWRnX3NldF9zcmNfdGltc2VsX2dlbjIobW9kLCBpbywgdmFsKTsKIAlpZiAocmV0IDwgMCkgewogCQlkZXZfZXJyKGRldiwgInRpbXNlbCBlcnJvclxuIik7CiAJCXJldHVybiByZXQ7CkBAIC0xOTAsMTIgKzE4NywxMSBAQAogfQogCiBpbnQgcnNuZF9hZGdfc2V0X2NvbnZlcnRfdGltaW5nX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkJICAgICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWksCiAJCQkJICAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbykKIHsKIAl1MzIgdmFsID0gcnNuZF9hZGdfc3NpX3dzX3RpbWluZ19nZW4yKGlvKTsKIAotCXJldHVybiByc25kX2FkZ19zZXRfc3JjX3RpbXNlbF9nZW4yKHJkYWksIG1vZCwgaW8sIHZhbCk7CisJcmV0dXJuIHJzbmRfYWRnX3NldF9zcmNfdGltc2VsX2dlbjIobW9kLCBpbywgdmFsKTsKIH0KIAogaW50IHJzbmRfYWRnX3NldF9jb252ZXJ0X2Nsa19nZW4xKHN0cnVjdCByc25kX3ByaXYgKnByaXYsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvcmNhci9jb3JlLmMgYi9zb3VuZC9zb2Mvc2gvcmNhci9jb3JlLmMKaW5kZXggNzUzMDhiYi4uMWI1MzYwNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3JjYXIvY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zaC9yY2FyL2NvcmUuYwpAQCAtMTQ5LDE2ICsxNDksMTYgQEAKIAlyZXR1cm4gbW9kLT5vcHMtPmRtYV9uYW1lKG1vZCk7CiB9CiAKLXZvaWQgcnNuZF9tb2RfaW5pdChzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LAotCQkgICBzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKK3ZvaWQgcnNuZF9tb2RfaW5pdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKIAkJICAgc3RydWN0IHJzbmRfbW9kX29wcyAqb3BzLAorCQkgICBzdHJ1Y3QgY2xrICpjbGssCiAJCSAgIGVudW0gcnNuZF9tb2RfdHlwZSB0eXBlLAogCQkgICBpbnQgaWQpCiB7Ci0JbW9kLT5wcml2CT0gcHJpdjsKIAltb2QtPmlkCQk9IGlkOwogCW1vZC0+b3BzCT0gb3BzOwogCW1vZC0+dHlwZQk9IHR5cGU7CisJbW9kLT5jbGsJPSBjbGs7CiB9CiAKIC8qCkBAIC00MTIsNyArNDEyLDcgQEAKIC8qCiAgKglyc25kX2RhaSBmdW5jdGlvbnMKICAqLwotI2RlZmluZSBfX3JzbmRfbW9kX2NhbGwobW9kLCBmdW5jLCByZGFpLi4uKQkJCVwKKyNkZWZpbmUgX19yc25kX21vZF9jYWxsKG1vZCwgZnVuYywgcGFyYW0uLi4pCQkJXAogKHsJCQkJCQkJCVwKIAlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9tb2RfdG9fcHJpdihtb2QpOwkJXAogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CQlcCkBAIC00MjIsMTggKzQyMiwxOCBAQAogCWlmICgobW9kLT5zdGF0dXMgJiBtYXNrKSA9PSBjYWxsKSB7CQkJCVwKIAkJZGV2X2RiZyhkZXYsICIlc1slZF0gJXNcbiIsCQkJCVwKIAkJCXJzbmRfbW9kX25hbWUobW9kKSwgcnNuZF9tb2RfaWQobW9kKSwgI2Z1bmMpOwlcCi0JCXJldCA9IChtb2QpLT5vcHMtPmZ1bmMobW9kLCByZGFpKTsJCQlcCisJCXJldCA9IChtb2QpLT5vcHMtPmZ1bmMobW9kLCBwYXJhbSk7CQkJXAogCQltb2QtPnN0YXR1cyA9IChtb2QtPnN0YXR1cyAmIH5tYXNrKSB8ICh+Y2FsbCAmIG1hc2spOwlcCiAJfQkJCQkJCQkJXAogCXJldDsJCQkJCQkJCVwKIH0pCiAKLSNkZWZpbmUgcnNuZF9tb2RfY2FsbChtb2QsIGZ1bmMsIHJkYWkuLi4pCVwKKyNkZWZpbmUgcnNuZF9tb2RfY2FsbChtb2QsIGZ1bmMsIHBhcmFtLi4uKQlcCiAJKCEobW9kKSA/IC1FTk9ERVYgOgkJCVwKIAkgISgobW9kKS0+b3BzLT5mdW5jKSA/IDAgOgkJXAotCSBfX3JzbmRfbW9kX2NhbGwobW9kLCBmdW5jLCByZGFpKSkKKwkgX19yc25kX21vZF9jYWxsKG1vZCwgZnVuYywgcGFyYW0pKQogCi0jZGVmaW5lIHJzbmRfZGFpX2NhbGwoZm4sIGlvLCByZGFpLi4uKQkJCQlcCisjZGVmaW5lIHJzbmRfZGFpX2NhbGwoZm4sIGlvLCBwYXJhbS4uLikJCQkJXAogKHsJCQkJCQkJCVwKIAlzdHJ1Y3QgcnNuZF9tb2QgKm1vZDsJCQkJCVwKIAlpbnQgcmV0ID0gMCwgaTsJCQkJCQlcCkBAIC00NDEsNyArNDQxLDcgQEAKIAkJbW9kID0gKGlvKS0+bW9kW2ldOwkJCQlcCiAJCWlmICghbW9kKQkJCQkJXAogCQkJY29udGludWU7CQkJCVwKLQkJcmV0ID0gcnNuZF9tb2RfY2FsbChtb2QsIGZuLCByZGFpKTsJCVwKKwkJcmV0ID0gcnNuZF9tb2RfY2FsbChtb2QsIGZuLCBwYXJhbSk7CQlcCiAJCWlmIChyZXQgPCAwKQkJCQkJXAogCQkJYnJlYWs7CQkJCQlcCiAJfQkJCQkJCQlcCkBAIC00NzcsMTcgKzQ3Nyw3IEBACiAJaW8tPm1vZFttb2QtPnR5cGVdID0gTlVMTDsKIH0KIAotaW50IHJzbmRfZGFpX2lkKHN0cnVjdCByc25kX3ByaXYgKnByaXYsIHN0cnVjdCByc25kX2RhaSAqcmRhaSkKLXsKLQlpbnQgaWQgPSByZGFpIC0gcHJpdi0+cmRhaTsKLQotCWlmICgoaWQgPCAwKSB8fCAoaWQgPj0gcnNuZF9yZGFpX25yKHByaXYpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gaWQ7Ci19Ci0KLXN0cnVjdCByc25kX2RhaSAqcnNuZF9kYWlfZ2V0KHN0cnVjdCByc25kX3ByaXYgKnByaXYsIGludCBpZCkKK3N0cnVjdCByc25kX2RhaSAqcnNuZF9yZGFpX2dldChzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LCBpbnQgaWQpCiB7CiAJaWYgKChpZCA8IDApIHx8IChpZCA+PSByc25kX3JkYWlfbnIocHJpdikpKQogCQlyZXR1cm4gTlVMTDsKQEAgLTQ5OSwxMiArNDg5LDcgQEAKIHsKIAlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKIAotCXJldHVybiByc25kX2RhaV9nZXQocHJpdiwgZGFpLT5pZCk7Ci19Ci0KLWludCByc25kX2RhaV9pc19wbGF5KHN0cnVjdCByc25kX2RhaSAqcmRhaSwgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pCi17Ci0JcmV0dXJuICZyZGFpLT5wbGF5YmFjayA9PSBpbzsKKwlyZXR1cm4gcnNuZF9yZGFpX2dldChwcml2LCBkYWktPmlkKTsKIH0KIAogLyoKQEAgLTU5OCwyMCArNTgzLDIwIEBACiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBkYWlfdHJpZ2dlcl9lbmQ7CiAKLQkJcmV0ID0gcnNuZF9kYWlfY2FsbChpbml0LCBpbywgcmRhaSk7CisJCXJldCA9IHJzbmRfZGFpX2NhbGwoaW5pdCwgaW8sIHByaXYpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZGFpX3RyaWdnZXJfZW5kOwogCi0JCXJldCA9IHJzbmRfZGFpX2NhbGwoc3RhcnQsIGlvLCByZGFpKTsKKwkJcmV0ID0gcnNuZF9kYWlfY2FsbChzdGFydCwgaW8sIHByaXYpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZGFpX3RyaWdnZXJfZW5kOwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JCXJldCA9IHJzbmRfZGFpX2NhbGwoc3RvcCwgaW8sIHJkYWkpOworCQlyZXQgPSByc25kX2RhaV9jYWxsKHN0b3AsIGlvLCBwcml2KTsKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIGRhaV90cmlnZ2VyX2VuZDsKIAotCQlyZXQgPSByc25kX2RhaV9jYWxsKHF1aXQsIGlvLCByZGFpKTsKKwkJcmV0ID0gcnNuZF9kYWlfY2FsbChxdWl0LCBpbywgcHJpdik7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBkYWlfdHJpZ2dlcl9lbmQ7CiAKQEAgLTg3MywxNSArODU4LDE1IEBACiAJcHJpdi0+cmRhaQk9IHJkYWk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGFpX25yOyBpKyspIHsKLQkJcmRhaVtpXS5pbmZvID0gJmluZm8tPmRhaV9pbmZvW2ldOwogCi0JCXBtb2QgPSByZGFpW2ldLmluZm8tPnBsYXliYWNrLnNzaTsKLQkJY21vZCA9IHJkYWlbaV0uaW5mby0+Y2FwdHVyZS5zc2k7CisJCXBtb2QgPSBpbmZvLT5kYWlfaW5mb1tpXS5wbGF5YmFjay5zc2k7CisJCWNtb2QgPSBpbmZvLT5kYWlfaW5mb1tpXS5jYXB0dXJlLnNzaTsKIAogCQkvKgogCQkgKglpbml0IHJzbmRfZGFpCiAJCSAqLwogCQlzbnByaW50ZihyZGFpW2ldLm5hbWUsIFJTTkRfREFJX05BTUVfU0laRSwgInJzbmQtZGFpLiVkIiwgaSk7CisJCXJkYWlbaV0ucHJpdiA9IHByaXY7CiAKIAkJLyoKIAkJICoJaW5pdCBzbmRfc29jX2RhaV9kcml2ZXIKQEAgLTg5NSw2ICs4ODAsNyBAQAogCQkJZHJ2W2ldLnBsYXliYWNrLmNoYW5uZWxzX21heAk9IDI7CiAKIAkJCXJkYWlbaV0ucGxheWJhY2suaW5mbyA9ICZpbmZvLT5kYWlfaW5mb1tpXS5wbGF5YmFjazsKKwkJCXJkYWlbaV0ucGxheWJhY2sucmRhaSA9IHJkYWkgKyBpOwogCQkJcnNuZF9wYXRoX2luaXQocHJpdiwgJnJkYWlbaV0sICZyZGFpW2ldLnBsYXliYWNrKTsKIAkJfQogCQlpZiAoY21vZCkgewpAQCAtOTA0LDYgKzg5MCw3IEBACiAJCQlkcnZbaV0uY2FwdHVyZS5jaGFubmVsc19tYXgJPSAyOwogCiAJCQlyZGFpW2ldLmNhcHR1cmUuaW5mbyA9ICZpbmZvLT5kYWlfaW5mb1tpXS5jYXB0dXJlOworCQkJcmRhaVtpXS5jYXB0dXJlLnJkYWkgPSByZGFpICsgaTsKIAkJCXJzbmRfcGF0aF9pbml0KHByaXYsICZyZGFpW2ldLCAmcmRhaVtpXS5jYXB0dXJlKTsKIAkJfQogCkBAIC0xMDM3LDcgKzEwMjQsNiBAQAogfQogCiBzdGF0aWMgaW50IF9fcnNuZF9rY3RybF9uZXcoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkgICAgc3RydWN0IHJzbmRfZGFpICpyZGFpLAogCQkJICAgIHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQsCiAJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKIAkJCSAgICBzdHJ1Y3QgcnNuZF9rY3RybF9jZmcgKmNmZywKQEAgLTEwNjAsMTYgKzEwNDYsMjQgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXQgPSBzbmRfY3RsX2FkZChjYXJkLCBrY3RybCk7Ci0JaWYgKHJldCA8IDApCisJaWYgKHJldCA8IDApIHsKKwkJc25kX2N0bF9mcmVlX29uZShrY3RybCk7CiAJCXJldHVybiByZXQ7CisJfQogCiAJY2ZnLT51cGRhdGUgPSB1cGRhdGU7CisJY2ZnLT5jYXJkID0gY2FyZDsKKwljZmctPmtjdHJsID0ga2N0cmw7CiAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBfcnNuZF9rY3RybF9yZW1vdmUoc3RydWN0IHJzbmRfa2N0cmxfY2ZnICpjZmcpCit7CisJc25kX2N0bF9yZW1vdmUoY2ZnLT5jYXJkLCBjZmctPmtjdHJsKTsKK30KKwogaW50IHJzbmRfa2N0cmxfbmV3X20oc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCSAgICAgc3RydWN0IHJzbmRfZGFpICpyZGFpLAogCQkgICAgIHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQsCiAJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKIAkJICAgICB2b2lkICgqdXBkYXRlKShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCksCkBAIC0xMDc5LDExICsxMDczLDEwIEBACiAJX2NmZy0+Y2ZnLm1heAk9IG1heDsKIAlfY2ZnLT5jZmcuc2l6ZQk9IFJTTkRfRFZDX0NIQU5ORUxTOwogCV9jZmctPmNmZy52YWwJPSBfY2ZnLT52YWw7Ci0JcmV0dXJuIF9fcnNuZF9rY3RybF9uZXcobW9kLCByZGFpLCBydGQsIG5hbWUsICZfY2ZnLT5jZmcsIHVwZGF0ZSk7CisJcmV0dXJuIF9fcnNuZF9rY3RybF9uZXcobW9kLCBydGQsIG5hbWUsICZfY2ZnLT5jZmcsIHVwZGF0ZSk7CiB9CiAKIGludCByc25kX2tjdHJsX25ld19zKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkgICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSwKIAkJICAgICBzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkLAogCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCiAJCSAgICAgdm9pZCAoKnVwZGF0ZSkoc3RydWN0IHJzbmRfbW9kICptb2QpLApAQCAtMTA5MywxMSArMTA4NiwxMCBAQAogCV9jZmctPmNmZy5tYXgJPSBtYXg7CiAJX2NmZy0+Y2ZnLnNpemUJPSAxOwogCV9jZmctPmNmZy52YWwJPSAmX2NmZy0+dmFsOwotCXJldHVybiBfX3JzbmRfa2N0cmxfbmV3KG1vZCwgcmRhaSwgcnRkLCBuYW1lLCAmX2NmZy0+Y2ZnLCB1cGRhdGUpOworCXJldHVybiBfX3JzbmRfa2N0cmxfbmV3KG1vZCwgcnRkLCBuYW1lLCAmX2NmZy0+Y2ZnLCB1cGRhdGUpOwogfQogCiBpbnQgcnNuZF9rY3RybF9uZXdfZShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJICAgICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWksCiAJCSAgICAgc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCwKIAkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAogCQkgICAgIHN0cnVjdCByc25kX2tjdHJsX2NmZ19zICpfY2ZnLApAQCAtMTEwOSw3ICsxMTAxLDcgQEAKIAlfY2ZnLT5jZmcuc2l6ZQk9IDE7CiAJX2NmZy0+Y2ZnLnZhbAk9ICZfY2ZnLT52YWw7CiAJX2NmZy0+Y2ZnLnRleHRzCT0gdGV4dHM7Ci0JcmV0dXJuIF9fcnNuZF9rY3RybF9uZXcobW9kLCByZGFpLCBydGQsIG5hbWUsICZfY2ZnLT5jZmcsIHVwZGF0ZSk7CisJcmV0dXJuIF9fcnNuZF9rY3RybF9uZXcobW9kLCBydGQsIG5hbWUsICZfY2ZnLT5jZmcsIHVwZGF0ZSk7CiB9CiAKIC8qCkBAIC0xMTI1LDExICsxMTE3LDExIEBACiAJc3RydWN0IHJzbmRfZGFpICpyZGFpID0gcnNuZF9kYWlfdG9fcmRhaShkYWkpOwogCWludCByZXQ7CiAKLQlyZXQgPSByc25kX2RhaV9jYWxsKHBjbV9uZXcsICZyZGFpLT5wbGF5YmFjaywgcmRhaSwgcnRkKTsKKwlyZXQgPSByc25kX2RhaV9jYWxsKHBjbV9uZXcsICZyZGFpLT5wbGF5YmFjaywgcnRkKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gcnNuZF9kYWlfY2FsbChwY21fbmV3LCAmcmRhaS0+Y2FwdHVyZSwgcmRhaSwgcnRkKTsKKwlyZXQgPSByc25kX2RhaV9jYWxsKHBjbV9uZXcsICZyZGFpLT5jYXB0dXJlLCBydGQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTExNDAsMTUgKzExMzIsOSBAQAogCQlQUkVBTExPQ19CVUZGRVIsIFBSRUFMTE9DX0JVRkZFUl9NQVgpOwogfQogCi1zdGF0aWMgdm9pZCByc25kX3BjbV9mcmVlKHN0cnVjdCBzbmRfcGNtICpwY20pCi17Ci0Jc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfZnJlZV9mb3JfYWxsKHBjbSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybV9kcml2ZXIgcnNuZF9zb2NfcGxhdGZvcm0gPSB7CiAJLm9wcwkJPSAmcnNuZF9wY21fb3BzLAogCS5wY21fbmV3CT0gcnNuZF9wY21fbmV3LAotCS5wY21fZnJlZQk9IHJzbmRfcGNtX2ZyZWUsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfY29tcG9uZW50X2RyaXZlciByc25kX3NvY19jb21wb25lbnQgPSB7CkBAIC0xMTU2LDEzICsxMTQyLDExIEBACiB9OwogCiBzdGF0aWMgaW50IHJzbmRfcmRhaV9jb250aW51YW5jZV9wcm9iZShzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LAotCQkJCSAgICAgICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWksCi0JCQkJICAgICAgIGludCBpc19wbGF5KQorCQkJCSAgICAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbykKIHsKLQlzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbyA9IGlzX3BsYXkgPyAmcmRhaS0+cGxheWJhY2sgOiAmcmRhaS0+Y2FwdHVyZTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gcnNuZF9kYWlfY2FsbChwcm9iZSwgaW8sIHJkYWkpOworCXJldCA9IHJzbmRfZGFpX2NhbGwocHJvYmUsIGlvLCBwcml2KTsKIAlpZiAocmV0ID09IC1FQUdBSU4pIHsKIAkJLyoKIAkJICogRmFsbGJhY2sgdG8gUElPIG1vZGUKQEAgLTExNzUsNyArMTE1OSw3IEBACiAJCSAqCXJzbmRfZG1hX2luaXQoKQogCQkgKglyc25kX3NzaV9mYWxsYmFjaygpCiAJCSAqLwotCQlyc25kX2RhaV9jYWxsKHJlbW92ZSwgaW8sIHJkYWkpOworCQlyc25kX2RhaV9jYWxsKHJlbW92ZSwgaW8sIHByaXYpOwogCiAJCS8qCiAJCSAqIHJlbW92ZSBTUkMvRFZDIGZyb20gREFJLApAQCAtMTE4NiwxMyArMTE3MCwxMyBAQAogCQkvKgogCQkgKiBmYWxsYmFjawogCQkgKi8KLQkJcnNuZF9kYWlfY2FsbChmYWxsYmFjaywgaW8sIHJkYWkpOworCQlyc25kX2RhaV9jYWxsKGZhbGxiYWNrLCBpbywgcHJpdik7CiAKIAkJLyoKIAkJICogcmV0cnkgdG8gInByb2JlIi4KIAkJICogREFJIGhhcyBTU0kgd2hpY2ggaXMgUElPIG1vZGUgb25seSBub3cuCiAJCSAqLwotCQlyZXQgPSByc25kX2RhaV9jYWxsKHByb2JlLCBpbywgcmRhaSk7CisJCXJldCA9IHJzbmRfZGFpX2NhbGwocHJvYmUsIGlvLCBwcml2KTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTI1OSwxMSArMTI0MywxMSBAQAogCX0KIAogCWZvcl9lYWNoX3JzbmRfZGFpKHJkYWksIHByaXYsIGkpIHsKLQkJcmV0ID0gcnNuZF9yZGFpX2NvbnRpbnVhbmNlX3Byb2JlKHByaXYsIHJkYWksIDEpOworCQlyZXQgPSByc25kX3JkYWlfY29udGludWFuY2VfcHJvYmUocHJpdiwgJnJkYWktPnBsYXliYWNrKTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXhpdF9zbmRfcHJvYmU7CiAKLQkJcmV0ID0gcnNuZF9yZGFpX2NvbnRpbnVhbmNlX3Byb2JlKHByaXYsIHJkYWksIDApOworCQlyZXQgPSByc25kX3JkYWlfY29udGludWFuY2VfcHJvYmUocHJpdiwgJnJkYWktPmNhcHR1cmUpOwogCQlpZiAocmV0KQogCQkJZ290byBleGl0X3NuZF9wcm9iZTsKIAl9CkBAIC0xMjk1LDggKzEyNzksOCBAQAogCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybShkZXYpOwogZXhpdF9zbmRfcHJvYmU6CiAJZm9yX2VhY2hfcnNuZF9kYWkocmRhaSwgcHJpdiwgaSkgewotCQlyc25kX2RhaV9jYWxsKHJlbW92ZSwgJnJkYWktPnBsYXliYWNrLCByZGFpKTsKLQkJcnNuZF9kYWlfY2FsbChyZW1vdmUsICZyZGFpLT5jYXB0dXJlLCByZGFpKTsKKwkJcnNuZF9kYWlfY2FsbChyZW1vdmUsICZyZGFpLT5wbGF5YmFjaywgcHJpdik7CisJCXJzbmRfZGFpX2NhbGwocmVtb3ZlLCAmcmRhaS0+Y2FwdHVyZSwgcHJpdik7CiAJfQogCiAJcmV0dXJuIHJldDsKQEAgLTEzMTEsMTAgKzEyOTUsMTMgQEAKIAlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CiAKIAlmb3JfZWFjaF9yc25kX2RhaShyZGFpLCBwcml2LCBpKSB7Ci0JCXJldCB8PSByc25kX2RhaV9jYWxsKHJlbW92ZSwgJnJkYWktPnBsYXliYWNrLCByZGFpKTsKLQkJcmV0IHw9IHJzbmRfZGFpX2NhbGwocmVtb3ZlLCAmcmRhaS0+Y2FwdHVyZSwgcmRhaSk7CisJCXJldCB8PSByc25kX2RhaV9jYWxsKHJlbW92ZSwgJnJkYWktPnBsYXliYWNrLCBwcml2KTsKKwkJcmV0IHw9IHJzbmRfZGFpX2NhbGwocmVtb3ZlLCAmcmRhaS0+Y2FwdHVyZSwgcHJpdik7CiAJfQogCisJc25kX3NvY191bnJlZ2lzdGVyX2NvbXBvbmVudCgmcGRldi0+ZGV2KTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJnBkZXYtPmRldik7CisKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvcmNhci9kdmMuYyBiL3NvdW5kL3NvYy9zaC9yY2FyL2R2Yy5jCmluZGV4IDUzODBhNDguLmQ3ZjllZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9yY2FyL2R2Yy5jCisrKyBiL3NvdW5kL3NvYy9zaC9yY2FyL2R2Yy5jCkBAIC0xNyw3ICsxNyw2IEBACiBzdHJ1Y3QgcnNuZF9kdmMgewogCXN0cnVjdCByc25kX2R2Y19wbGF0Zm9ybV9pbmZvICppbmZvOyAvKiByY2FyX3NuZC5oICovCiAJc3RydWN0IHJzbmRfbW9kIG1vZDsKLQlzdHJ1Y3QgY2xrICpjbGs7CiAJc3RydWN0IHJzbmRfa2N0cmxfY2ZnX20gdm9sdW1lOwogCXN0cnVjdCByc25kX2tjdHJsX2NmZ19tIG11dGU7CiAJc3RydWN0IHJzbmRfa2N0cmxfY2ZnX3MgcmVuOwkvKiBSYW1wIEVuYWJsZSAqLwpAQCAtMTE4LDkgKzExNyw4IEBACiB9CiAKIHN0YXRpYyBpbnQgcnNuZF9kdmNfcHJvYmVfZ2VuMihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSAgICAgICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpCisJCQkgICAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9tb2RfdG9fcHJpdihtb2QpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CiAKIAlkZXZfZGJnKGRldiwgIiVzWyVkXSAoR2VuMikgaXMgcHJvYmVkXG4iLApAQCAtMTI5LDEyICsxMjcsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByc25kX2R2Y19pbml0KHN0cnVjdCByc25kX21vZCAqZHZjX21vZCwKLQkJCSBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpCitzdGF0aWMgaW50IHJzbmRfZHZjX3JlbW92ZV9nZW4yKHN0cnVjdCByc25kX21vZCAqbW9kLAorCQkJCXN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IHJzbmRfZHZjICpkdmMgPSByc25kX21vZF90b19kdmMoZHZjX21vZCk7CisJc3RydWN0IHJzbmRfZHZjICpkdmMgPSByc25kX21vZF90b19kdmMobW9kKTsKKworCXJzbmRfa2N0cmxfcmVtb3ZlKGR2Yy0+dm9sdW1lKTsKKwlyc25kX2tjdHJsX3JlbW92ZShkdmMtPm11dGUpOworCXJzbmRfa2N0cmxfcmVtb3ZlKGR2Yy0+cmVuKTsKKwlyc25kX2tjdHJsX3JlbW92ZShkdmMtPnJ1cCk7CisJcnNuZF9rY3RybF9yZW1vdmUoZHZjLT5yZG93bik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByc25kX2R2Y19pbml0KHN0cnVjdCByc25kX21vZCAqZHZjX21vZCwKKwkJCSBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQorewogCXN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvID0gcnNuZF9tb2RfdG9faW8oZHZjX21vZCk7Ci0Jc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYoZHZjX21vZCk7CiAJc3RydWN0IHJzbmRfbW9kICpzcmNfbW9kID0gcnNuZF9pb190b19tb2Rfc3JjKGlvKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwogCWludCBkdmNfaWQgPSByc25kX21vZF9pZChkdmNfbW9kKTsKQEAgLTE1Myw3ICsxNjMsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQljbGtfcHJlcGFyZV9lbmFibGUoZHZjLT5jbGspOworCXJzbmRfbW9kX2h3X3N0YXJ0KGR2Y19tb2QpOwogCiAJLyoKIAkgKiBmaXhtZQpAQCAtMTczLDIzICsxODMsMjEgQEAKIAogCXJzbmRfbW9kX3dyaXRlKGR2Y19tb2QsIERWQ19EVlVJUiwgMCk7CiAKLQlyc25kX2FkZ19zZXRfY21kX3RpbXNlbF9nZW4yKHJkYWksIGR2Y19tb2QsIGlvKTsKKwlyc25kX2FkZ19zZXRfY21kX3RpbXNlbF9nZW4yKGR2Y19tb2QsIGlvKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJzbmRfZHZjX3F1aXQoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkgc3RydWN0IHJzbmRfZGFpICpyZGFpKQorCQkJIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IHJzbmRfZHZjICpkdmMgPSByc25kX21vZF90b19kdmMobW9kKTsKLQotCWNsa19kaXNhYmxlX3VucHJlcGFyZShkdmMtPmNsayk7CisJcnNuZF9tb2RfaHdfc3RvcChtb2QpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcnNuZF9kdmNfc3RhcnQoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkgIHN0cnVjdCByc25kX2RhaSAqcmRhaSkKKwkJCSAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKIAlyc25kX21vZF93cml0ZShtb2QsIENNRF9DVFJMLCAweDEwKTsKIApAQCAtMTk3LDcgKzIwNSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcnNuZF9kdmNfc3RvcChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpCisJCQkgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKIAlyc25kX21vZF93cml0ZShtb2QsIENNRF9DVFJMLCAwKTsKIApAQCAtMjA1LDE2ICsyMTMsMTYgQEAKIH0KIAogc3RhdGljIGludCByc25kX2R2Y19wY21fbmV3KHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSwKIAkJCSAgICBzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQogewogCXN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvID0gcnNuZF9tb2RfdG9faW8obW9kKTsKIAlzdHJ1Y3QgcnNuZF9kdmMgKmR2YyA9IHJzbmRfbW9kX3RvX2R2Yyhtb2QpOworCWludCBpc19wbGF5ID0gcnNuZF9pb19pc19wbGF5KGlvKTsKIAlpbnQgcmV0OwogCiAJLyogVm9sdW1lICovCi0JcmV0ID0gcnNuZF9rY3RybF9uZXdfbShtb2QsIHJkYWksIHJ0ZCwKLQkJCXJzbmRfZGFpX2lzX3BsYXkocmRhaSwgaW8pID8KKwlyZXQgPSByc25kX2tjdHJsX25ld19tKG1vZCwgcnRkLAorCQkJaXNfcGxheSA/CiAJCQkiRFZDIE91dCBQbGF5YmFjayBWb2x1bWUiIDogIkRWQyBJbiBDYXB0dXJlIFZvbHVtZSIsCiAJCQlyc25kX2R2Y192b2x1bWVfdXBkYXRlLAogCQkJJmR2Yy0+dm9sdW1lLCAweDAwODAwMDAwIC0gMSk7CkBAIC0yMjIsOCArMjMwLDggQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIE11dGUgKi8KLQlyZXQgPSByc25kX2tjdHJsX25ld19tKG1vZCwgcmRhaSwgcnRkLAotCQkJcnNuZF9kYWlfaXNfcGxheShyZGFpLCBpbykgPworCXJldCA9IHJzbmRfa2N0cmxfbmV3X20obW9kLCBydGQsCisJCQlpc19wbGF5ID8KIAkJCSJEVkMgT3V0IE11dGUgU3dpdGNoIiA6ICJEVkMgSW4gTXV0ZSBTd2l0Y2giLAogCQkJcnNuZF9kdmNfdm9sdW1lX3VwZGF0ZSwKIAkJCSZkdmMtPm11dGUsIDEpOwpAQCAtMjMxLDE2ICsyMzksMTYgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIFJhbXAgKi8KLQlyZXQgPSByc25kX2tjdHJsX25ld19zKG1vZCwgcmRhaSwgcnRkLAotCQkJcnNuZF9kYWlfaXNfcGxheShyZGFpLCBpbykgPworCXJldCA9IHJzbmRfa2N0cmxfbmV3X3MobW9kLCBydGQsCisJCQlpc19wbGF5ID8KIAkJCSJEVkMgT3V0IFJhbXAgU3dpdGNoIiA6ICJEVkMgSW4gUmFtcCBTd2l0Y2giLAogCQkJcnNuZF9kdmNfdm9sdW1lX3VwZGF0ZSwKIAkJCSZkdmMtPnJlbiwgMSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSByc25kX2tjdHJsX25ld19lKG1vZCwgcmRhaSwgcnRkLAotCQkJcnNuZF9kYWlfaXNfcGxheShyZGFpLCBpbykgPworCXJldCA9IHJzbmRfa2N0cmxfbmV3X2UobW9kLCBydGQsCisJCQlpc19wbGF5ID8KIAkJCSJEVkMgT3V0IFJhbXAgVXAgUmF0ZSIgOiAiRFZDIEluIFJhbXAgVXAgUmF0ZSIsCiAJCQkmZHZjLT5ydXAsCiAJCQlyc25kX2R2Y192b2x1bWVfdXBkYXRlLApAQCAtMjQ4LDggKzI1Niw4IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSByc25kX2tjdHJsX25ld19lKG1vZCwgcmRhaSwgcnRkLAotCQkJcnNuZF9kYWlfaXNfcGxheShyZGFpLCBpbykgPworCXJldCA9IHJzbmRfa2N0cmxfbmV3X2UobW9kLCBydGQsCisJCQlpc19wbGF5ID8KIAkJCSJEVkMgT3V0IFJhbXAgRG93biBSYXRlIiA6ICJEVkMgSW4gUmFtcCBEb3duIFJhdGUiLAogCQkJJmR2Yy0+cmRvd24sCiAJCQlyc25kX2R2Y192b2x1bWVfdXBkYXRlLApAQCAtMjY0LDYgKzI3Miw3IEBACiBzdGF0aWMgc3RydWN0IHJzbmRfbW9kX29wcyByc25kX2R2Y19vcHMgPSB7CiAJLm5hbWUJCT0gRFZDX05BTUUsCiAJLnByb2JlCQk9IHJzbmRfZHZjX3Byb2JlX2dlbjIsCisJLnJlbW92ZQkJPSByc25kX2R2Y19yZW1vdmVfZ2VuMiwKIAkuaW5pdAkJPSByc25kX2R2Y19pbml0LAogCS5xdWl0CQk9IHJzbmRfZHZjX3F1aXQsCiAJLnN0YXJ0CQk9IHJzbmRfZHZjX3N0YXJ0LApAQCAtMzU2LDkgKzM2NSw5IEBACiAJCQlyZXR1cm4gUFRSX0VSUihjbGspOwogCiAJCWR2Yy0+aW5mbyA9ICZpbmZvLT5kdmNfaW5mb1tpXTsKLQkJZHZjLT5jbGsgID0gY2xrOwogCi0JCXJzbmRfbW9kX2luaXQocHJpdiwgJmR2Yy0+bW9kLCAmcnNuZF9kdmNfb3BzLCBSU05EX01PRF9EVkMsIGkpOworCQlyc25kX21vZF9pbml0KCZkdmMtPm1vZCwgJnJzbmRfZHZjX29wcywKKwkJCSAgICAgIGNsaywgUlNORF9NT0RfRFZDLCBpKTsKIAogCQlkZXZfZGJnKGRldiwgIkNNRCVkIHByb2JlZFxuIiwgaSk7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3JjYXIvZ2VuLmMgYi9zb3VuZC9zb2Mvc2gvcmNhci9nZW4uYwppbmRleCA4N2E2ZjJkLi5kZTA2ODVmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvcmNhci9nZW4uYworKysgYi9zb3VuZC9zb2Mvc2gvcmNhci9nZW4uYwpAQCAtMzA5LDggKzMwOSwxMyBAQAogCQlSU05EX0dFTl9NX1JFRyhTUkNfQlVTSUZfTU9ERSwJMHgwLAkweDIwKSwKIAkJUlNORF9HRU5fTV9SRUcoU1JDX1JPVVRFX01PREUwLAkweGMsCTB4MjApLAogCQlSU05EX0dFTl9NX1JFRyhTUkNfQ1RSTCwJMHgxMCwJMHgyMCksCisJCVJTTkRfR0VOX01fUkVHKFNSQ19JTlRfRU5BQkxFMCwJMHgxOCwJMHgyMCksCiAJCVJTTkRfR0VOX01fUkVHKENNRF9ST1VURV9TTENULAkweDE4YywJMHgyMCksCiAJCVJTTkRfR0VOX01fUkVHKENNRF9DVFJMLAkweDE5MCwJMHgyMCksCisJCVJTTkRfR0VOX1NfUkVHKFNDVV9TWVNfU1RBVFVTMCwJMHgxYzgpLAorCQlSU05EX0dFTl9TX1JFRyhTQ1VfU1lTX0lOVF9FTjAsCTB4MWNjKSwKKwkJUlNORF9HRU5fU19SRUcoU0NVX1NZU19TVEFUVVMxLAkweDFkMCksCisJCVJTTkRfR0VOX1NfUkVHKFNDVV9TWVNfSU5UX0VOMSwJMHgxYzQpLAogCQlSU05EX0dFTl9NX1JFRyhTUkNfU1dSU1IsCTB4MjAwLAkweDQwKSwKIAkJUlNORF9HRU5fTV9SRUcoU1JDX1NSQ0lSLAkweDIwNCwJMHg0MCksCiAJCVJTTkRfR0VOX01fUkVHKFNSQ19BRElOUiwJMHgyMTQsCTB4NDApLApAQCAtNDAzLDYgKzQwOCwxNiBAQAogCQlSU05EX0dFTl9NX1JFRyhTUkNfSUZTVlIsCTB4MjIwLAkweDQwKSwKIAkJUlNORF9HRU5fTV9SRUcoU1JDX1NSQ0NSLAkweDIyNCwJMHg0MCksCiAJCVJTTkRfR0VOX01fUkVHKFNSQ19NTkZTUiwJMHgyMjgsCTB4NDApLAorCQkvKgorCQkgKiBBREQgVVMKKwkJICoKKwkJICogU1JDX1NUQVRVUworCQkgKiBTUkNfSU5UX0VOCisJCSAqIFNDVV9TWVNfU1RBVFVTMAorCQkgKiBTQ1VfU1lTX1NUQVRVUzEKKwkJICogU0NVX1NZU19JTlRfRU4wCisJCSAqIFNDVV9TWVNfSU5UX0VOMQorCQkgKi8KIAl9OwogCXN0cnVjdCByc25kX3JlZ21hcF9maWVsZF9jb25mIGNvbmZfYWRnW10gPSB7CiAJCVJTTkRfR0VOX1NfUkVHKEJSUkEsCQkweDAwKSwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9yY2FyL3JzbmQuaCBiL3NvdW5kL3NvYy9zaC9yY2FyL3JzbmQuaAppbmRleCA1ODI2YzhhLi5lNzkxNGJkIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvcmNhci9yc25kLmgKKysrIGIvc291bmQvc29jL3NoL3JjYXIvcnNuZC5oCkBAIC00NCw2ICs0NCw4IEBACiAJUlNORF9SRUdfU1JDX0lGU0NSLAogCVJTTkRfUkVHX1NSQ19JRlNWUiwKIAlSU05EX1JFR19TUkNfU1JDQ1IsCisJUlNORF9SRUdfU0NVX1NZU19TVEFUVVMwLAorCVJTTkRfUkVHX1NDVV9TWVNfSU5UX0VOMCwKIAlSU05EX1JFR19DTURfUk9VVEVfU0xDVCwKIAlSU05EX1JFR19EVkNfU1dSU1IsCiAJUlNORF9SRUdfRFZDX0RWVUlSLApAQCAtOTQsNiArOTYsOSBAQAogCVJTTkRfUkVHX1NIQVJFMjMsCiAJUlNORF9SRUdfU0hBUkUyNCwKIAlSU05EX1JFR19TSEFSRTI1LAorCVJTTkRfUkVHX1NIQVJFMjYsCisJUlNORF9SRUdfU0hBUkUyNywKKwlSU05EX1JFR19TSEFSRTI4LAogCiAJUlNORF9SRUdfTUFYLAogfTsKQEAgLTEzNSw2ICsxNDAsOSBAQAogI2RlZmluZSBSU05EX1JFR19EVkNfVlJDVFIJCVJTTkRfUkVHX1NIQVJFMjMKICNkZWZpbmUgUlNORF9SRUdfRFZDX1ZSUERSCQlSU05EX1JFR19TSEFSRTI0CiAjZGVmaW5lIFJTTkRfUkVHX0RWQ19WUkRCUgkJUlNORF9SRUdfU0hBUkUyNQorI2RlZmluZSBSU05EX1JFR19TQ1VfU1lTX1NUQVRVUzEJUlNORF9SRUdfU0hBUkUyNgorI2RlZmluZSBSU05EX1JFR19TQ1VfU1lTX0lOVF9FTjEJUlNORF9SRUdfU0hBUkUyNworI2RlZmluZSBSU05EX1JFR19TUkNfSU5UX0VOQUJMRTAJUlNORF9SRUdfU0hBUkUyOAogCiBzdHJ1Y3QgcnNuZF9vZl9kYXRhOwogc3RydWN0IHJzbmRfcHJpdjsKQEAgLTE4Miw5ICsxOTAsOSBAQAogICoJUi1DYXIgc291bmQgbW9kCiAgKi8KIGVudW0gcnNuZF9tb2RfdHlwZSB7Ci0JUlNORF9NT0RfU1JDID0gMCwKKwlSU05EX01PRF9EVkMgPSAwLAorCVJTTkRfTU9EX1NSQywKIAlSU05EX01PRF9TU0ksCi0JUlNORF9NT0RfRFZDLAogCVJTTkRfTU9EX01BWCwKIH07CiAKQEAgLTE5MiwzMiArMjAwLDMxIEBACiAJY2hhciAqbmFtZTsKIAljaGFyKiAoKmRtYV9uYW1lKShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCk7CiAJaW50ICgqcHJvYmUpKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkgICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSk7CisJCSAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7CiAJaW50ICgqcmVtb3ZlKShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJICAgICAgc3RydWN0IHJzbmRfZGFpICpyZGFpKTsKKwkJICAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7CiAJaW50ICgqaW5pdCkoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCSAgICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpOworCQkgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7CiAJaW50ICgqcXVpdCkoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCSAgICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpOworCQkgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7CiAJaW50ICgqc3RhcnQpKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkgICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSk7CisJCSAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7CiAJaW50ICgqc3RvcCkoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCSAgICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpOworCQkgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7CiAJaW50ICgqcGNtX25ldykoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCSAgICAgICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWksCiAJCSAgICAgICBzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKTsKIAlpbnQgKCpmYWxsYmFjaykoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQlzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpOworCQkJc3RydWN0IHJzbmRfcHJpdiAqcHJpdik7CiB9OwogCiBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtOwogc3RydWN0IHJzbmRfbW9kIHsKIAlpbnQgaWQ7CiAJZW51bSByc25kX21vZF90eXBlIHR5cGU7Ci0Jc3RydWN0IHJzbmRfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgcnNuZF9tb2Rfb3BzICpvcHM7CiAJc3RydWN0IHJzbmRfZG1hIGRtYTsKIAlzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbzsKKwlzdHJ1Y3QgY2xrICpjbGs7CiAJdTMyIHN0YXR1czsKIH07CiAvKgpAQCAtMjQ4LDE1ICsyNTUsMTcgQEAKICNkZWZpbmUgX19yc25kX21vZF9jYWxsX3BjbV9uZXcJCTAKICNkZWZpbmUgX19yc25kX21vZF9jYWxsX2ZhbGxiYWNrCTAKIAotI2RlZmluZSByc25kX21vZF90b19wcml2KG1vZCkgKChtb2QpLT5wcml2KQorI2RlZmluZSByc25kX21vZF90b19wcml2KG1vZCkgKHJzbmRfaW9fdG9fcHJpdihyc25kX21vZF90b19pbyhtb2QpKSkKICNkZWZpbmUgcnNuZF9tb2RfdG9fZG1hKG1vZCkgKCYobW9kKS0+ZG1hKQogI2RlZmluZSByc25kX2RtYV90b19tb2QoX2RtYSkgY29udGFpbmVyX29mKChfZG1hKSwgc3RydWN0IHJzbmRfbW9kLCBkbWEpCiAjZGVmaW5lIHJzbmRfbW9kX3RvX2lvKG1vZCkgKChtb2QpLT5pbykKICNkZWZpbmUgcnNuZF9tb2RfaWQobW9kKSAoKG1vZCktPmlkKQorI2RlZmluZSByc25kX21vZF9od19zdGFydChtb2QpCWNsa19wcmVwYXJlX2VuYWJsZSgobW9kKS0+Y2xrKQorI2RlZmluZSByc25kX21vZF9od19zdG9wKG1vZCkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKChtb2QpLT5jbGspCiAKLXZvaWQgcnNuZF9tb2RfaW5pdChzdHJ1Y3QgcnNuZF9wcml2ICpwcml2LAotCQkgICBzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKK3ZvaWQgcnNuZF9tb2RfaW5pdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKIAkJICAgc3RydWN0IHJzbmRfbW9kX29wcyAqb3BzLAorCQkgICBzdHJ1Y3QgY2xrICpjbGssCiAJCSAgIGVudW0gcnNuZF9tb2RfdHlwZSB0eXBlLAogCQkgICBpbnQgaWQpOwogY2hhciAqcnNuZF9tb2RfbmFtZShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCk7CkBAIC0yNzAsNiArMjc5LDcgQEAKIAlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbTsKIAlzdHJ1Y3QgcnNuZF9tb2QgKm1vZFtSU05EX01PRF9NQVhdOwogCXN0cnVjdCByc25kX2RhaV9wYXRoX2luZm8gKmluZm87IC8qIHJjYXJfc25kLmggKi8KKwlzdHJ1Y3QgcnNuZF9kYWkgKnJkYWk7CiAJaW50IGJ5dGVfcG9zOwogCWludCBwZXJpb2RfcG9zOwogCWludCBieXRlX3Blcl9wZXJpb2Q7CkBAIC0yNzgsMTIgKzI4OCwxOCBAQAogI2RlZmluZSByc25kX2lvX3RvX21vZF9zc2koaW8pCSgoaW8pLT5tb2RbUlNORF9NT0RfU1NJXSkKICNkZWZpbmUgcnNuZF9pb190b19tb2Rfc3JjKGlvKQkoKGlvKS0+bW9kW1JTTkRfTU9EX1NSQ10pCiAjZGVmaW5lIHJzbmRfaW9fdG9fbW9kX2R2YyhpbykJKChpbyktPm1vZFtSU05EX01PRF9EVkNdKQorI2RlZmluZSByc25kX2lvX3RvX3JkYWkoaW8pCSgoaW8pLT5yZGFpKQorI2RlZmluZSByc25kX2lvX3RvX3ByaXYoaW8pCShyc25kX3JkYWlfdG9fcHJpdihyc25kX2lvX3RvX3JkYWkoaW8pKSkKKyNkZWZpbmUgcnNuZF9pb19pc19wbGF5KGlvKQkoJnJzbmRfaW9fdG9fcmRhaShpbyktPnBsYXliYWNrID09IGlvKQorI2RlZmluZSByc25kX2lvX3RvX3J1bnRpbWUoaW8pICgoaW8pLT5zdWJzdHJlYW0gPyBcCisJCQkJKGlvKS0+c3Vic3RyZWFtLT5ydW50aW1lIDogTlVMTCkKKwogCiBzdHJ1Y3QgcnNuZF9kYWkgewogCWNoYXIgbmFtZVtSU05EX0RBSV9OQU1FX1NJWkVdOwotCXN0cnVjdCByc25kX2RhaV9wbGF0Zm9ybV9pbmZvICppbmZvOyAvKiByY2FyX3NuZC5oICovCiAJc3RydWN0IHJzbmRfZGFpX3N0cmVhbSBwbGF5YmFjazsKIAlzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtIGNhcHR1cmU7CisJc3RydWN0IHJzbmRfcHJpdiAqcHJpdjsKIAogCXVuc2lnbmVkIGludCBjbGtfbWFzdGVyOjE7CiAJdW5zaWduZWQgaW50IGJpdF9jbGtfaW52OjE7CkBAIC0yOTMsMjIgKzMwOSwxOCBAQAogfTsKIAogI2RlZmluZSByc25kX3JkYWlfbnIocHJpdikgKChwcml2KS0+cmRhaV9ucikKKyNkZWZpbmUgcnNuZF9yZGFpX2lzX2Nsa19tYXN0ZXIocmRhaSkgKChyZGFpKS0+Y2xrX21hc3RlcikKKyNkZWZpbmUgcnNuZF9yZGFpX3RvX3ByaXYocmRhaSkgKChyZGFpKS0+cHJpdikKICNkZWZpbmUgZm9yX2VhY2hfcnNuZF9kYWkocmRhaSwgcHJpdiwgaSkJCVwKIAlmb3IgKGkgPSAwOwkJCQkJXAogCSAgICAgKGkgPCByc25kX3JkYWlfbnIocHJpdikpICYmCQlcCi0JICAgICAoKHJkYWkpID0gcnNuZF9kYWlfZ2V0KHByaXYsIGkpKTsJCVwKKwkgICAgICgocmRhaSkgPSByc25kX3JkYWlfZ2V0KHByaXYsIGkpKTsJCVwKIAkgICAgIGkrKykKIAotc3RydWN0IHJzbmRfZGFpICpyc25kX2RhaV9nZXQoc3RydWN0IHJzbmRfcHJpdiAqcHJpdiwgaW50IGlkKTsKLWludCByc25kX2RhaV9pc19wbGF5KHN0cnVjdCByc25kX2RhaSAqcmRhaSwgc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8pOwotaW50IHJzbmRfZGFpX2lkKHN0cnVjdCByc25kX3ByaXYgKnByaXYsIHN0cnVjdCByc25kX2RhaSAqcmRhaSk7Ci0jZGVmaW5lIHJzbmRfZGFpX2dldF9wbGF0Zm9ybV9pbmZvKHJkYWkpICgocmRhaSktPmluZm8pCi0jZGVmaW5lIHJzbmRfaW9fdG9fcnVudGltZShpbykgKChpbyktPnN1YnN0cmVhbSA/IFwKLQkJCQkoaW8pLT5zdWJzdHJlYW0tPnJ1bnRpbWUgOiBOVUxMKQorc3RydWN0IHJzbmRfZGFpICpyc25kX3JkYWlfZ2V0KHN0cnVjdCByc25kX3ByaXYgKnByaXYsIGludCBpZCk7CiAKIHZvaWQgcnNuZF9kYWlfcG9pbnRlcl91cGRhdGUoc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8sIGludCBjbnQpOwogaW50IHJzbmRfZGFpX3BvaW50ZXJfb2Zmc2V0KHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLCBpbnQgYWRkaXRpb25hbCk7Ci0jZGVmaW5lIHJzbmRfZGFpX2lzX2Nsa19tYXN0ZXIocmRhaSkgKChyZGFpKS0+Y2xrX21hc3RlcikKIAogLyoKICAqCVItQ2FyIEdlbjEvR2VuMgpAQCAtMzM5LDE1ICszNTEsMTIgQEAKIAkJCQkgIHVuc2lnbmVkIGludCBzcmNfcmF0ZSwKIAkJCQkgIHVuc2lnbmVkIGludCBkc3RfcmF0ZSk7CiBpbnQgcnNuZF9hZGdfc2V0X2NvbnZlcnRfY2xrX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkJICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWksCiAJCQkJICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbywKIAkJCQkgIHVuc2lnbmVkIGludCBzcmNfcmF0ZSwKIAkJCQkgIHVuc2lnbmVkIGludCBkc3RfcmF0ZSk7CiBpbnQgcnNuZF9hZGdfc2V0X2NvbnZlcnRfdGltaW5nX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkJICAgICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWksCiAJCQkJICAgICBzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbyk7Ci1pbnQgcnNuZF9hZGdfc2V0X2NtZF90aW1zZWxfZ2VuMihzdHJ1Y3QgcnNuZF9kYWkgKnJkYWksCi0JCQkJIHN0cnVjdCByc25kX21vZCAqbW9kLAoraW50IHJzbmRfYWRnX3NldF9jbWRfdGltc2VsX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QsCiAJCQkJIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKTsKIAogLyoKQEAgLTQyNyw2ICs0MzYsOCBAQAogCXUzMiAqdmFsOwogCWNvbnN0IGNoYXIgKiBjb25zdCAqdGV4dHM7CiAJdm9pZCAoKnVwZGF0ZSkoc3RydWN0IHJzbmRfbW9kICptb2QpOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3Qgc25kX2tjb250cm9sICprY3RybDsKIH07CiAKICNkZWZpbmUgUlNORF9EVkNfQ0hBTk5FTFMJMgpAQCAtNDQwLDIyICs0NTEsMjIgQEAKIAl1MzIgdmFsOwogfTsKIAordm9pZCBfcnNuZF9rY3RybF9yZW1vdmUoc3RydWN0IHJzbmRfa2N0cmxfY2ZnICpjZmcpOworI2RlZmluZSByc25kX2tjdHJsX3JlbW92ZShfY2ZnKQlfcnNuZF9rY3RybF9yZW1vdmUoJigoX2NmZykuY2ZnKSkKKwogaW50IHJzbmRfa2N0cmxfbmV3X20oc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCSAgICAgc3RydWN0IHJzbmRfZGFpICpyZGFpLAogCQkgICAgIHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQsCiAJCSAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwKIAkJICAgICB2b2lkICgqdXBkYXRlKShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCksCiAJCSAgICAgc3RydWN0IHJzbmRfa2N0cmxfY2ZnX20gKl9jZmcsCiAJCSAgICAgdTMyIG1heCk7CiBpbnQgcnNuZF9rY3RybF9uZXdfcyhzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJICAgICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWksCiAJCSAgICAgc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCwKIAkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAogCQkgICAgIHZvaWQgKCp1cGRhdGUpKHN0cnVjdCByc25kX21vZCAqbW9kKSwKIAkJICAgICBzdHJ1Y3QgcnNuZF9rY3RybF9jZmdfcyAqX2NmZywKIAkJICAgICB1MzIgbWF4KTsKIGludCByc25kX2tjdHJsX25ld19lKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkgICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSwKIAkJICAgICBzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkLAogCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCiAJCSAgICAgc3RydWN0IHJzbmRfa2N0cmxfY2ZnX3MgKl9jZmcsCkBAIC00NzQsMTQgKzQ4NSwxMCBAQAogCQkJCSAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvLAogCQkJCSAgIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUpOwogaW50IHJzbmRfc3JjX3NzaXVfc3RhcnQoc3RydWN0IHJzbmRfbW9kICpzc2lfbW9kLAotCQkJc3RydWN0IHJzbmRfZGFpICpyZGFpLAogCQkJaW50IHVzZV9idXNpZik7Ci1pbnQgcnNuZF9zcmNfc3NpdV9zdG9wKHN0cnVjdCByc25kX21vZCAqc3NpX21vZCwKLQkJICAgICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSk7Ci1pbnQgcnNuZF9zcmNfc3NpX2lycV9lbmFibGUoc3RydWN0IHJzbmRfbW9kICpzc2lfbW9kLAotCQkJICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSk7Ci1pbnQgcnNuZF9zcmNfc3NpX2lycV9kaXNhYmxlKHN0cnVjdCByc25kX21vZCAqc3NpX21vZCwKLQkJCSAgICAgc3RydWN0IHJzbmRfZGFpICpyZGFpKTsKK2ludCByc25kX3NyY19zc2l1X3N0b3Aoc3RydWN0IHJzbmRfbW9kICpzc2lfbW9kKTsKK2ludCByc25kX3NyY19zc2lfaXJxX2VuYWJsZShzdHJ1Y3QgcnNuZF9tb2QgKnNzaV9tb2QpOworaW50IHJzbmRfc3JjX3NzaV9pcnFfZGlzYWJsZShzdHJ1Y3QgcnNuZF9tb2QgKnNzaV9tb2QpOwogCiAjZGVmaW5lIHJzbmRfc3JjX25yKHByaXYpICgocHJpdiktPnNyY19ucikKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3JjYXIvc3JjLmMgYi9zb3VuZC9zb2Mvc2gvcmNhci9zcmMuYwppbmRleCBlZWRlM2FjLi44MWMxODJiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvcmNhci9zcmMuYworKysgYi9zb3VuZC9zb2Mvc2gvcmNhci9zcmMuYwpAQCAtMTIsMTAgKzEyLDE3IEBACiAKICNkZWZpbmUgU1JDX05BTUUgInNyYyIKIAorLyogU1JDeF9TVEFUVVMgKi8KKyNkZWZpbmUgT1VGX1NSQ08JKCgxIDw8IDEyKSB8ICgxIDw8IDEzKSkKKyNkZWZpbmUgT1VGX1NSQ0kJKCgxIDw8ICA5KSB8ICgxIDw8ICA4KSkKKworLyogU0NVX1NZU1RFTV9TVEFUVVMwLzEgKi8KKyNkZWZpbmUgT1VGX1NSQyhpZCkJKCgxIDw8IChpZCArIDE2KSkgfCAoMSA8PCBpZCkpCisKIHN0cnVjdCByc25kX3NyYyB7CiAJc3RydWN0IHJzbmRfc3JjX3BsYXRmb3JtX2luZm8gKmluZm87IC8qIHJjYXJfc25kLmggKi8KIAlzdHJ1Y3QgcnNuZF9tb2QgbW9kOwotCXN0cnVjdCBjbGsgKmNsazsKKwlpbnQgZXJyOwogfTsKIAogI2RlZmluZSBSU05EX1NSQ19OQU1FX1NJWkUgMTYKQEAgLTEwNywxMCArMTE0LDEwIEBACiAgKgkJR2VuMS9HZW4yIGNvbW1vbiBmdW5jdGlvbnMKICAqLwogaW50IHJzbmRfc3JjX3NzaXVfc3RhcnQoc3RydWN0IHJzbmRfbW9kICpzc2lfbW9kLAotCQkJc3RydWN0IHJzbmRfZGFpICpyZGFpLAogCQkJaW50IHVzZV9idXNpZikKIHsKIAlzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbyA9IHJzbmRfbW9kX3RvX2lvKHNzaV9tb2QpOworCXN0cnVjdCByc25kX2RhaSAqcmRhaSA9IHJzbmRfaW9fdG9fcmRhaShpbyk7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHJzbmRfaW9fdG9fcnVudGltZShpbyk7CiAJaW50IHNzaV9pZCA9IHJzbmRfbW9kX2lkKHNzaV9tb2QpOwogCkBAIC0xNDAsNyArMTQ3LDcgQEAKIAkJaWYgKHNoaWZ0ID49IDApCiAJCQlyc25kX21vZF9ic2V0KHNzaV9tb2QsIFNTSV9NT0RFMSwKIAkJCQkgICAgICAweDMgPDwgc2hpZnQsCi0JCQkJICAgICAgcnNuZF9kYWlfaXNfY2xrX21hc3RlcihyZGFpKSA/CisJCQkJICAgICAgcnNuZF9yZGFpX2lzX2Nsa19tYXN0ZXIocmRhaSkgPwogCQkJCSAgICAgIDB4MiA8PCBzaGlmdCA6IDB4MSA8PCBzaGlmdCk7CiAJfQogCkBAIC0xNzQsOCArMTgxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHJzbmRfc3JjX3NzaXVfc3RvcChzdHJ1Y3QgcnNuZF9tb2QgKnNzaV9tb2QsCi0JCSAgICAgICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpCitpbnQgcnNuZF9zcmNfc3NpdV9zdG9wKHN0cnVjdCByc25kX21vZCAqc3NpX21vZCkKIHsKIAkvKgogCSAqIERNQSBzZXR0aW5ncyBmb3IgU1NJVQpAQCAtMTg1LDggKzE5MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCByc25kX3NyY19zc2lfaXJxX2VuYWJsZShzdHJ1Y3QgcnNuZF9tb2QgKnNzaV9tb2QsCi0JCQkgICAgc3RydWN0IHJzbmRfZGFpICpyZGFpKQoraW50IHJzbmRfc3JjX3NzaV9pcnFfZW5hYmxlKHN0cnVjdCByc25kX21vZCAqc3NpX21vZCkKIHsKIAlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9tb2RfdG9fcHJpdihzc2lfbW9kKTsKIApAQCAtMjAyLDggKzIwNyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCByc25kX3NyY19zc2lfaXJxX2Rpc2FibGUoc3RydWN0IHJzbmRfbW9kICpzc2lfbW9kLAotCQkJICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSkKK2ludCByc25kX3NyY19zc2lfaXJxX2Rpc2FibGUoc3RydWN0IHJzbmRfbW9kICpzc2lfbW9kKQogewogCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX21vZF90b19wcml2KHNzaV9tb2QpOwogCkBAIC0yNDAsOCArMjQ0LDcgQEAKIAlyZXR1cm4gcmF0ZTsKIH0KIAotc3RhdGljIGludCByc25kX3NyY19zZXRfY29udmVydF9yYXRlKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJCSAgICAgc3RydWN0IHJzbmRfZGFpICpyZGFpKQorc3RhdGljIGludCByc25kX3NyY19zZXRfY29udmVydF9yYXRlKHN0cnVjdCByc25kX21vZCAqbW9kKQogewogCXN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvID0gcnNuZF9tb2RfdG9faW8obW9kKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gcnNuZF9pb190b19ydW50aW1lKGlvKTsKQEAgLTI3MywxMiArMjc2LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnNuZF9zcmNfaW5pdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpCitzdGF0aWMgaW50IHJzbmRfc3JjX2luaXQoc3RydWN0IHJzbmRfbW9kICptb2QpCiB7CiAJc3RydWN0IHJzbmRfc3JjICpzcmMgPSByc25kX21vZF90b19zcmMobW9kKTsKIAotCWNsa19wcmVwYXJlX2VuYWJsZShzcmMtPmNsayk7CisJcnNuZF9tb2RfaHdfc3RhcnQobW9kKTsKKworCXNyYy0+ZXJyID0gMDsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgb3BlcmF0aW9uIG9mIHRoZSBTUkMgaW50ZXJuYWwgY2lyY3VpdHMKQEAgLTI5MCwxMSArMjk0LDE2IEBACiB9CiAKIHN0YXRpYyBpbnQgcnNuZF9zcmNfcXVpdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpCisJCQkgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgcnNuZF9zcmMgKnNyYyA9IHJzbmRfbW9kX3RvX3NyYyhtb2QpOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CiAKLQljbGtfZGlzYWJsZV91bnByZXBhcmUoc3JjLT5jbGspOworCXJzbmRfbW9kX2h3X3N0b3AobW9kKTsKKworCWlmIChzcmMtPmVycikKKwkJZGV2X3dhcm4oZGV2LCAiJXNbJWRdIHVuZGVyL292ZXIgZmxvdyBlcnIgPSAlZFxuIiwKKwkJCSByc25kX21vZF9uYW1lKG1vZCksIHJzbmRfbW9kX2lkKG1vZCksIHNyYy0+ZXJyKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzE5LDggKzMyOCw3IEBACiAvKgogICoJCUdlbjEgZnVuY3Rpb25zCiAgKi8KLXN0YXRpYyBpbnQgcnNuZF9zcmNfc2V0X3JvdXRlX2dlbjEoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkJICAgc3RydWN0IHJzbmRfZGFpICpyZGFpKQorc3RhdGljIGludCByc25kX3NyY19zZXRfcm91dGVfZ2VuMShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkKIHsKIAlzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbyA9IHJzbmRfbW9kX3RvX2lvKG1vZCk7CiAJc3RydWN0IHNyY19yb3V0ZV9jb25maWcgewpAQCAtMzQ4LDcgKzM1Niw3IEBACiAJLyoKIAkgKiBTUkNfUk9VVEVfU0VMRUNUCiAJICovCi0JdmFsID0gcnNuZF9kYWlfaXNfcGxheShyZGFpLCBpbykgPyAweDEgOiAweDI7CisJdmFsID0gcnNuZF9pb19pc19wbGF5KGlvKSA/IDB4MSA6IDB4MjsKIAl2YWwgPSB2YWwJCTw8IHJvdXRlc1tpZF0uc2hpZnQ7CiAJbWFzayA9IHJvdXRlc1tpZF0ubWFzawk8PCByb3V0ZXNbaWRdLnNoaWZ0OwogCkBAIC0zNTcsOCArMzY1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCByc25kX3NyY19zZXRfY29udmVydF90aW1pbmdfZ2VuMShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCQkJICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSkKK3N0YXRpYyBpbnQgcnNuZF9zcmNfc2V0X2NvbnZlcnRfdGltaW5nX2dlbjEoc3RydWN0IHJzbmRfbW9kICptb2QpCiB7CiAJc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8gPSByc25kX21vZF90b19pbyhtb2QpOwogCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX21vZF90b19wcml2KG1vZCk7CkBAIC00MTYsMTMgKzQyMywxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJzbmRfc3JjX3NldF9jb252ZXJ0X3JhdGVfZ2VuMShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCQkJICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpCitzdGF0aWMgaW50IHJzbmRfc3JjX3NldF9jb252ZXJ0X3JhdGVfZ2VuMShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkKIHsKIAlzdHJ1Y3QgcnNuZF9zcmMgKnNyYyA9IHJzbmRfbW9kX3RvX3NyYyhtb2QpOwogCWludCByZXQ7CiAKLQlyZXQgPSByc25kX3NyY19zZXRfY29udmVydF9yYXRlKG1vZCwgcmRhaSk7CisJcmV0ID0gcnNuZF9zcmNfc2V0X2NvbnZlcnRfcmF0ZShtb2QpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC00NDMsOSArNDQ5LDggQEAKIH0KIAogc3RhdGljIGludCByc25kX3NyY19wcm9iZV9nZW4xKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJICAgICAgc3RydWN0IHJzbmRfZGFpICpyZGFpKQorCQkJICAgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYobW9kKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwogCiAJZGV2X2RiZyhkZXYsICIlc1slZF0gKEdlbjEpIGlzIHByb2JlZFxuIiwKQEAgLTQ1NSwyMyArNDYwLDIzIEBACiB9CiAKIHN0YXRpYyBpbnQgcnNuZF9zcmNfaW5pdF9nZW4xKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJICAgICAgc3RydWN0IHJzbmRfZGFpICpyZGFpKQorCQkJICAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gcnNuZF9zcmNfaW5pdChtb2QsIHJkYWkpOworCXJldCA9IHJzbmRfc3JjX2luaXQobW9kKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHJzbmRfc3JjX3NldF9yb3V0ZV9nZW4xKG1vZCwgcmRhaSk7CisJcmV0ID0gcnNuZF9zcmNfc2V0X3JvdXRlX2dlbjEobW9kKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHJzbmRfc3JjX3NldF9jb252ZXJ0X3JhdGVfZ2VuMShtb2QsIHJkYWkpOworCXJldCA9IHJzbmRfc3JjX3NldF9jb252ZXJ0X3JhdGVfZ2VuMShtb2QpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gcnNuZF9zcmNfc2V0X2NvbnZlcnRfdGltaW5nX2dlbjEobW9kLCByZGFpKTsKKwlyZXQgPSByc25kX3NyY19zZXRfY29udmVydF90aW1pbmdfZ2VuMShtb2QpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC00NzksNyArNDg0LDcgQEAKIH0KIAogc3RhdGljIGludCByc25kX3NyY19zdGFydF9nZW4xKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJICAgICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSkKKwkJCSAgICAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewogCWludCBpZCA9IHJzbmRfbW9kX2lkKG1vZCk7CiAKQEAgLTQ4OSw3ICs0OTQsNyBAQAogfQogCiBzdGF0aWMgaW50IHJzbmRfc3JjX3N0b3BfZ2VuMShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSAgICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSkKKwkJCSAgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7CiAJaW50IGlkID0gcnNuZF9tb2RfaWQobW9kKTsKIApAQCAtNTEwLDggKzUxNSwxMTEgQEAKIC8qCiAgKgkJR2VuMiBmdW5jdGlvbnMKICAqLwotc3RhdGljIGludCByc25kX3NyY19zZXRfY29udmVydF9yYXRlX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkJCSAgc3RydWN0IHJzbmRfZGFpICpyZGFpKQorI2RlZmluZSByc25kX3NyY19pcnFfZW5hYmxlX2dlbjIobW9kKSAgcnNuZF9zcmNfaXJxX2N0cm9sX2dlbjIobW9kLCAxKQorI2RlZmluZSByc25kX3NyY19pcnFfZGlzYWJsZV9nZW4yKG1vZCkgcnNuZF9zcmNfaXJxX2N0cm9sX2dlbjIobW9kLCAwKQorc3RhdGljIHZvaWQgcnNuZF9zcmNfaXJxX2N0cm9sX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QsIGludCBlbmFibGUpCit7CisJc3RydWN0IHJzbmRfc3JjICpzcmMgPSByc25kX21vZF90b19zcmMobW9kKTsKKwl1MzIgc3lzX2ludF92YWwsIGludF92YWwsIHN5c19pbnRfbWFzazsKKwlpbnQgaXJxID0gc3JjLT5pbmZvLT5pcnE7CisJaW50IGlkID0gcnNuZF9tb2RfaWQobW9kKTsKKworCXN5c19pbnRfdmFsID0KKwlzeXNfaW50X21hc2sgPSBPVUZfU1JDKGlkKTsKKwlpbnRfdmFsID0gMHgzMzAwOworCisJLyoKKwkgKiBJUlEgaXMgbm90IHN1cHBvcnRlZCBvbiBub24tRFQKKwkgKiBzZWUKKwkgKglyc25kX3NyY19wcm9iZV9nZW4yKCkKKwkgKi8KKwlpZiAoKGlycSA8PSAwKSB8fCAhZW5hYmxlKSB7CisJCXN5c19pbnRfdmFsID0gMDsKKwkJaW50X3ZhbCA9IDA7CisJfQorCisJcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfSU5UX0VOQUJMRTAsIGludF92YWwpOworCXJzbmRfbW9kX2JzZXQobW9kLCBTQ1VfU1lTX0lOVF9FTjAsIHN5c19pbnRfbWFzaywgc3lzX2ludF92YWwpOworCXJzbmRfbW9kX2JzZXQobW9kLCBTQ1VfU1lTX0lOVF9FTjEsIHN5c19pbnRfbWFzaywgc3lzX2ludF92YWwpOworfQorCitzdGF0aWMgdm9pZCByc25kX3NyY19lcnJvcl9jbGVhcl9nZW4yKHN0cnVjdCByc25kX21vZCAqbW9kKQoreworCXUzMiB2YWwgPSBPVUZfU1JDKHJzbmRfbW9kX2lkKG1vZCkpOworCisJcnNuZF9tb2RfYnNldChtb2QsIFNDVV9TWVNfU1RBVFVTMCwgdmFsLCB2YWwpOworCXJzbmRfbW9kX2JzZXQobW9kLCBTQ1VfU1lTX1NUQVRVUzEsIHZhbCwgdmFsKTsKK30KKworc3RhdGljIGJvb2wgcnNuZF9zcmNfZXJyb3JfcmVjb3JkX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QpCit7CisJdTMyIHZhbCA9IE9VRl9TUkMocnNuZF9tb2RfaWQobW9kKSk7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCWlmICgocnNuZF9tb2RfcmVhZChtb2QsIFNDVV9TWVNfU1RBVFVTMCkgJiB2YWwpIHx8CisJICAgIChyc25kX21vZF9yZWFkKG1vZCwgU0NVX1NZU19TVEFUVVMxKSAmIHZhbCkpIHsKKwkJc3RydWN0IHJzbmRfc3JjICpzcmMgPSByc25kX21vZF90b19zcmMobW9kKTsKKworCQlzcmMtPmVycisrOworCQlyZXQgPSB0cnVlOworCX0KKworCS8qIGNsZWFyIGVycm9yIHN0YXRpYyAqLworCXJzbmRfc3JjX2Vycm9yX2NsZWFyX2dlbjIobW9kKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX3JzbmRfc3JjX3N0YXJ0X2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QpCit7CisJc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8gPSByc25kX21vZF90b19pbyhtb2QpOworCXUzMiB2YWwgPSByc25kX2lvX3RvX21vZF9kdmMoaW8pID8gMHgwMSA6IDB4MTE7CisKKwlyc25kX21vZF93cml0ZShtb2QsIFNSQ19DVFJMLCB2YWwpOworCisJcnNuZF9zcmNfZXJyb3JfY2xlYXJfZ2VuMihtb2QpOworCisJcnNuZF9zcmNfc3RhcnQobW9kKTsKKworCXJzbmRfc3JjX2lycV9lbmFibGVfZ2VuMihtb2QpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX3JzbmRfc3JjX3N0b3BfZ2VuMihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkKK3sKKwlyc25kX3NyY19pcnFfZGlzYWJsZV9nZW4yKG1vZCk7CisKKwlyc25kX21vZF93cml0ZShtb2QsIFNSQ19DVFJMLCAwKTsKKworCXJzbmRfc3JjX2Vycm9yX3JlY29yZF9nZW4yKG1vZCk7CisKKwlyZXR1cm4gcnNuZF9zcmNfc3RvcChtb2QpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcnNuZF9zcmNfaW50ZXJydXB0X2dlbjIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcnNuZF9tb2QgKm1vZCA9IGRhdGE7CisJc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8gPSByc25kX21vZF90b19pbyhtb2QpOworCisJaWYgKCFpbykKKwkJcmV0dXJuIElSUV9OT05FOworCisJaWYgKHJzbmRfc3JjX2Vycm9yX3JlY29yZF9nZW4yKG1vZCkpIHsKKwkJc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYobW9kKTsKKwkJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKKworCQlfcnNuZF9zcmNfc3RvcF9nZW4yKG1vZCk7CisJCV9yc25kX3NyY19zdGFydF9nZW4yKG1vZCk7CisKKwkJZGV2X2RiZyhkZXYsICIlc1slZF0gcmVzdGFydFxuIiwKKwkJCXJzbmRfbW9kX25hbWUobW9kKSwgcnNuZF9tb2RfaWQobW9kKSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHJzbmRfc3JjX3NldF9jb252ZXJ0X3JhdGVfZ2VuMihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCkKIHsKIAlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9tb2RfdG9fcHJpdihtb2QpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CkBAIC01MzUsNyArNjQzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0ID0gcnNuZF9zcmNfc2V0X2NvbnZlcnRfcmF0ZShtb2QsIHJkYWkpOworCXJldCA9IHJzbmRfc3JjX3NldF9jb252ZXJ0X3JhdGUobW9kKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNTYzLDggKzY3MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcnNuZF9zcmNfc2V0X2NvbnZlcnRfdGltaW5nX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkJCSAgICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpCitzdGF0aWMgaW50IHJzbmRfc3JjX3NldF9jb252ZXJ0X3RpbWluZ19nZW4yKHN0cnVjdCByc25kX21vZCAqbW9kKQogewogCXN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvID0gcnNuZF9tb2RfdG9faW8obW9kKTsKIAlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gcnNuZF9pb190b19ydW50aW1lKGlvKTsKQEAgLTU3Myw1OSArNjgwLDc4IEBACiAJaW50IHJldDsKIAogCWlmIChjb252ZXJ0X3JhdGUpCi0JCXJldCA9IHJzbmRfYWRnX3NldF9jb252ZXJ0X2Nsa19nZW4yKG1vZCwgcmRhaSwgaW8sCisJCXJldCA9IHJzbmRfYWRnX3NldF9jb252ZXJ0X2Nsa19nZW4yKG1vZCwgaW8sCiAJCQkJCQkgICAgcnVudGltZS0+cmF0ZSwKIAkJCQkJCSAgICBjb252ZXJ0X3JhdGUpOwogCWVsc2UKLQkJcmV0ID0gcnNuZF9hZGdfc2V0X2NvbnZlcnRfdGltaW5nX2dlbjIobW9kLCByZGFpLCBpbyk7CisJCXJldCA9IHJzbmRfYWRnX3NldF9jb252ZXJ0X3RpbWluZ19nZW4yKG1vZCwgaW8pOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCByc25kX3NyY19wcm9iZV9nZW4yKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJICAgICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSkKKwkJCSAgICAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewotCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX21vZF90b19wcml2KG1vZCk7CiAJc3RydWN0IHJzbmRfc3JjICpzcmMgPSByc25kX21vZF90b19zcmMobW9kKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOworCWludCBpcnEgPSBzcmMtPmluZm8tPmlycTsKIAlpbnQgcmV0OwogCisJaWYgKGlycSA+IDApIHsKKwkJLyoKKwkJICogSVJRIGlzIG5vdCBzdXBwb3J0ZWQgb24gbm9uLURUCisJCSAqIHNlZQorCQkgKglyc25kX3NyY19pcnFfZW5hYmxlX2dlbjIoKQorCQkgKi8KKwkJcmV0ID0gZGV2bV9yZXF1ZXN0X2lycShkZXYsIGlycSwKKwkJCQkgICAgICAgcnNuZF9zcmNfaW50ZXJydXB0X2dlbjIsCisJCQkJICAgICAgIElSUUZfU0hBUkVELAorCQkJCSAgICAgICBkZXZfbmFtZShkZXYpLCBtb2QpOworCQlpZiAocmV0KQorCQkJZ290byByc25kX3NyY19wcm9iZV9nZW4yX2ZhaWw7CisJfQorCiAJcmV0ID0gcnNuZF9kbWFfaW5pdChwcml2LAogCQkJICAgIHJzbmRfbW9kX3RvX2RtYShtb2QpLAogCQkJICAgIHJzbmRfaW5mb19pc19wbGF5YmFjayhwcml2LCBzcmMpLAogCQkJICAgIHNyYy0+aW5mby0+ZG1hX2lkKTsKLQlpZiAocmV0IDwgMCkKLQkJZGV2X2VycihkZXYsICIlc1slZF0gKEdlbjIpIGZhaWxlZFxuIiwKLQkJCXJzbmRfbW9kX25hbWUobW9kKSwgcnNuZF9tb2RfaWQobW9kKSk7Ci0JZWxzZQotCQlkZXZfZGJnKGRldiwgIiVzWyVkXSAoR2VuMikgaXMgcHJvYmVkXG4iLAotCQkJcnNuZF9tb2RfbmFtZShtb2QpLCByc25kX21vZF9pZChtb2QpKTsKKwlpZiAocmV0KQorCQlnb3RvIHJzbmRfc3JjX3Byb2JlX2dlbjJfZmFpbDsKKworCWRldl9kYmcoZGV2LCAiJXNbJWRdIChHZW4yKSBpcyBwcm9iZWRcbiIsCisJCXJzbmRfbW9kX25hbWUobW9kKSwgcnNuZF9tb2RfaWQobW9kKSk7CisKKwlyZXR1cm4gcmV0OworCityc25kX3NyY19wcm9iZV9nZW4yX2ZhaWw6CisJZGV2X2VycihkZXYsICIlc1slZF0gKEdlbjIpIGZhaWxlZFxuIiwKKwkJcnNuZF9tb2RfbmFtZShtb2QpLCByc25kX21vZF9pZChtb2QpKTsKIAogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcnNuZF9zcmNfcmVtb3ZlX2dlbjIoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkJc3RydWN0IHJzbmRfZGFpICpyZGFpKQorCQkJCXN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7Ci0JcnNuZF9kbWFfcXVpdChyc25kX21vZF90b19wcml2KG1vZCksIHJzbmRfbW9kX3RvX2RtYShtb2QpKTsKKwlyc25kX2RtYV9xdWl0KHByaXYsIHJzbmRfbW9kX3RvX2RtYShtb2QpKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJzbmRfc3JjX2luaXRfZ2VuMihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSAgICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSkKKwkJCSAgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IHJzbmRfc3JjX2luaXQobW9kLCByZGFpKTsKKwlyZXQgPSByc25kX3NyY19pbml0KG1vZCk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSByc25kX3NyY19zZXRfY29udmVydF9yYXRlX2dlbjIobW9kLCByZGFpKTsKKwlyZXQgPSByc25kX3NyY19zZXRfY29udmVydF9yYXRlX2dlbjIobW9kKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHJzbmRfc3JjX3NldF9jb252ZXJ0X3RpbWluZ19nZW4yKG1vZCwgcmRhaSk7CisJcmV0ID0gcnNuZF9zcmNfc2V0X2NvbnZlcnRfdGltaW5nX2dlbjIobW9kKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNjMzLDI5ICs3NTksMjMgQEAKIH0KIAogc3RhdGljIGludCByc25kX3NyY19zdGFydF9nZW4yKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJICAgICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSkKKwkJCSAgICAgICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewotCXN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvID0gcnNuZF9tb2RfdG9faW8obW9kKTsKLQlzdHJ1Y3QgcnNuZF9zcmMgKnNyYyA9IHJzbmRfbW9kX3RvX3NyYyhtb2QpOwotCXUzMiB2YWwgPSByc25kX2lvX3RvX21vZF9kdmMoaW8pID8gMHgwMSA6IDB4MTE7CisJcnNuZF9kbWFfc3RhcnQocnNuZF9tb2RfdG9fZG1hKG1vZCkpOwogCi0JcnNuZF9kbWFfc3RhcnQocnNuZF9tb2RfdG9fZG1hKCZzcmMtPm1vZCkpOwotCi0JcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfQ1RSTCwgdmFsKTsKLQotCXJldHVybiByc25kX3NyY19zdGFydChtb2QpOworCXJldHVybiBfcnNuZF9zcmNfc3RhcnRfZ2VuMihtb2QpOwogfQogCiBzdGF0aWMgaW50IHJzbmRfc3JjX3N0b3BfZ2VuMihzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSAgICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSkKKwkJCSAgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IHJzbmRfc3JjICpzcmMgPSByc25kX21vZF90b19zcmMobW9kKTsKKwlpbnQgcmV0OwogCi0JcnNuZF9tb2Rfd3JpdGUobW9kLCBTUkNfQ1RSTCwgMCk7CisJcmV0ID0gX3JzbmRfc3JjX3N0b3BfZ2VuMihtb2QpOwogCi0JcnNuZF9kbWFfc3RvcChyc25kX21vZF90b19kbWEoJnNyYy0+bW9kKSk7CisJcnNuZF9kbWFfc3RvcChyc25kX21vZF90b19kbWEobW9kKSk7CiAKLQlyZXR1cm4gcnNuZF9zcmNfc3RvcChtb2QpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnNuZF9tb2Rfb3BzIHJzbmRfc3JjX2dlbjJfb3BzID0gewpAQCAtNjgxLDEwICs4MDEsMTEgQEAKIAkJCSAgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpzcmNfbm9kZTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCXN0cnVjdCByY2FyX3NuZF9pbmZvICppbmZvID0gcnNuZF9wcml2X3RvX2luZm8ocHJpdik7CiAJc3RydWN0IHJzbmRfc3JjX3BsYXRmb3JtX2luZm8gKnNyY19pbmZvOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Ci0JaW50IG5yOworCWludCBuciwgaTsKIAogCWlmICghb2ZfZGF0YSkKIAkJcmV0dXJuOwpAQCAtNzA4LDYgKzgyOSwxMyBAQAogCWluZm8tPnNyY19pbmZvCQk9IHNyY19pbmZvOwogCWluZm8tPnNyY19pbmZvX25yCT0gbnI7CiAKKwlpID0gMDsKKwlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHNyY19ub2RlLCBucCkgeworCQlzcmNfaW5mb1tpXS5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisKKwkJaSsrOworCX0KKwogcnNuZF9vZl9wYXJzZV9zcmNfZW5kOgogCW9mX25vZGVfcHV0KHNyY19ub2RlKTsKIH0KQEAgLTc2MSw5ICs4ODksOCBAQAogCQkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKIAogCQlzcmMtPmluZm8gPSAmaW5mby0+c3JjX2luZm9baV07Ci0JCXNyYy0+Y2xrID0gY2xrOwogCi0JCXJzbmRfbW9kX2luaXQocHJpdiwgJnNyYy0+bW9kLCBvcHMsIFJTTkRfTU9EX1NSQywgaSk7CisJCXJzbmRfbW9kX2luaXQoJnNyYy0+bW9kLCBvcHMsIGNsaywgUlNORF9NT0RfU1JDLCBpKTsKIAogCQlkZXZfZGJnKGRldiwgIlNSQyVkIHByb2JlZFxuIiwgaSk7CiAJfQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3JjYXIvc3NpLmMgYi9zb3VuZC9zb2Mvc2gvcmNhci9zc2kuYwppbmRleCAzODQ0ZmJlLi45ZTdiNjI3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2gvcmNhci9zc2kuYworKysgYi9zb3VuZC9zb2Mvc2gvcmNhci9zc2kuYwpAQCAtNjAsMTcgKzYwLDE0IEBACiAjZGVmaW5lIFNTSV9OQU1FICJzc2kiCiAKIHN0cnVjdCByc25kX3NzaSB7Ci0Jc3RydWN0IGNsayAqY2xrOwogCXN0cnVjdCByc25kX3NzaV9wbGF0Zm9ybV9pbmZvICppbmZvOyAvKiByY2FyX3NuZC5oICovCiAJc3RydWN0IHJzbmRfc3NpICpwYXJlbnQ7CiAJc3RydWN0IHJzbmRfbW9kIG1vZDsKIAotCXN0cnVjdCByc25kX2RhaSAqcmRhaTsKIAl1MzIgY3Jfb3duOwogCXUzMiBjcl9jbGs7CiAJaW50IGVycjsKIAl1bnNpZ25lZCBpbnQgdXNyY250OwotCXVuc2lnbmVkIGludCByYXRlOwogfTsKIAogI2RlZmluZSBmb3JfZWFjaF9yc25kX3NzaShwb3MsIHByaXYsIGkpCQkJCQlcCkBAIC0xMjgsNyArMTI1LDcgQEAKIHN0YXRpYyBpbnQgcnNuZF9zc2lfbWFzdGVyX2Nsa19zdGFydChzdHJ1Y3QgcnNuZF9zc2kgKnNzaSwKIAkJCQkgICAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKQogewotCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX21vZF90b19wcml2KCZzc2ktPm1vZCk7CisJc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfaW9fdG9fcHJpdihpbyk7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHJzbmRfaW9fdG9fcnVudGltZShpbyk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKIAlpbnQgaSwgaiwgcmV0OwpAQCAtMTU3LDcgKzE1NCw2IEBACiAKIAkJCXJldCA9IHJzbmRfYWRnX3NzaV9jbGtfdHJ5X3N0YXJ0KCZzc2ktPm1vZCwgbWFpbl9yYXRlKTsKIAkJCWlmICgwID09IHJldCkgewotCQkJCXNzaS0+cmF0ZQk9IHJhdGU7CiAJCQkJc3NpLT5jcl9jbGsJPSBGT1JDRSB8IFNXTF8zMiB8CiAJCQkJCQkgIFNDS0QgfCBTV1NEIHwgQ0tEVihqKTsKIApAQCAtMTc2LDI2ICsxNzIsMjUgQEAKIAogc3RhdGljIHZvaWQgcnNuZF9zc2lfbWFzdGVyX2Nsa19zdG9wKHN0cnVjdCByc25kX3NzaSAqc3NpKQogewotCXNzaS0+cmF0ZSA9IDA7CiAJc3NpLT5jcl9jbGsgPSAwOwogCXJzbmRfYWRnX3NzaV9jbGtfc3RvcCgmc3NpLT5tb2QpOwogfQogCiBzdGF0aWMgdm9pZCByc25kX3NzaV9od19zdGFydChzdHJ1Y3QgcnNuZF9zc2kgKnNzaSwKLQkJCSAgICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSwKIAkJCSAgICAgIHN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvKQogewotCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX21vZF90b19wcml2KCZzc2ktPm1vZCk7CisJc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfaW9fdG9fcHJpdihpbyk7CisJc3RydWN0IHJzbmRfZGFpICpyZGFpID0gcnNuZF9pb190b19yZGFpKGlvKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwogCXUzMiBjcl9tb2RlOwogCXUzMiBjcjsKIAogCWlmICgwID09IHNzaS0+dXNyY250KSB7Ci0JCWNsa19wcmVwYXJlX2VuYWJsZShzc2ktPmNsayk7CisJCXJzbmRfbW9kX2h3X3N0YXJ0KCZzc2ktPm1vZCk7CiAKLQkJaWYgKHJzbmRfZGFpX2lzX2Nsa19tYXN0ZXIocmRhaSkpIHsKKwkJaWYgKHJzbmRfcmRhaV9pc19jbGtfbWFzdGVyKHJkYWkpKSB7CiAJCQlpZiAocnNuZF9zc2lfY2xrX2Zyb21fcGFyZW50KHNzaSkpCi0JCQkJcnNuZF9zc2lfaHdfc3RhcnQoc3NpLT5wYXJlbnQsIHJkYWksIGlvKTsKKwkJCQlyc25kX3NzaV9od19zdGFydChzc2ktPnBhcmVudCwgaW8pOwogCQkJZWxzZQogCQkJCXJzbmRfc3NpX21hc3Rlcl9jbGtfc3RhcnQoc3NpLCBpbyk7CiAJCX0KQEAgLTIxNCw3ICsyMDksNyBAQAogCXJzbmRfbW9kX3dyaXRlKCZzc2ktPm1vZCwgU1NJQ1IsIGNyKTsKIAogCS8qIGVuYWJsZSBXUyBjb250aW51ZSAqLwotCWlmIChyc25kX2RhaV9pc19jbGtfbWFzdGVyKHJkYWkpKQorCWlmIChyc25kX3JkYWlfaXNfY2xrX21hc3RlcihyZGFpKSkKIAkJcnNuZF9tb2Rfd3JpdGUoJnNzaS0+bW9kLCBTU0lXU1IsIENPTlQpOwogCiAJLyogY2xlYXIgZXJyb3Igc3RhdHVzICovCkBAIC0yMjYsMTAgKzIyMSwxMSBAQAogCQlyc25kX21vZF9uYW1lKCZzc2ktPm1vZCksIHJzbmRfbW9kX2lkKCZzc2ktPm1vZCkpOwogfQogCi1zdGF0aWMgdm9pZCByc25kX3NzaV9od19zdG9wKHN0cnVjdCByc25kX3NzaSAqc3NpLAotCQkJICAgICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpCitzdGF0aWMgdm9pZCByc25kX3NzaV9od19zdG9wKHN0cnVjdCByc25kX3NzaSAqc3NpKQogewogCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX21vZF90b19wcml2KCZzc2ktPm1vZCk7CisJc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8gPSByc25kX21vZF90b19pbygmc3NpLT5tb2QpOworCXN0cnVjdCByc25kX2RhaSAqcmRhaSA9IHJzbmRfaW9fdG9fcmRhaShpbyk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKIAl1MzIgY3I7CiAKQEAgLTI1NiwxNCArMjUyLDE0IEBACiAJCXJzbmRfbW9kX3dyaXRlKCZzc2ktPm1vZCwgU1NJQ1IsIGNyKTsJLyogZGlzYWJsZWQgYWxsICovCiAJCXJzbmRfc3NpX3N0YXR1c19jaGVjaygmc3NpLT5tb2QsIElJUlEpOwogCi0JCWlmIChyc25kX2RhaV9pc19jbGtfbWFzdGVyKHJkYWkpKSB7CisJCWlmIChyc25kX3JkYWlfaXNfY2xrX21hc3RlcihyZGFpKSkgewogCQkJaWYgKHJzbmRfc3NpX2Nsa19mcm9tX3BhcmVudChzc2kpKQotCQkJCXJzbmRfc3NpX2h3X3N0b3Aoc3NpLT5wYXJlbnQsIHJkYWkpOworCQkJCXJzbmRfc3NpX2h3X3N0b3Aoc3NpLT5wYXJlbnQpOwogCQkJZWxzZQogCQkJCXJzbmRfc3NpX21hc3Rlcl9jbGtfc3RvcChzc2kpOwogCQl9CiAKLQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNzaS0+Y2xrKTsKKwkJcnNuZF9tb2RfaHdfc3RvcCgmc3NpLT5tb2QpOwogCX0KIAogCWRldl9kYmcoZGV2LCAiJXNbJWRdIGh3IHN0b3BwZWRcbiIsCkBAIC0yNzQsMTAgKzI3MCwxMSBAQAogICoJU1NJIG1vZCBjb21tb24gZnVuY3Rpb25zCiAgKi8KIHN0YXRpYyBpbnQgcnNuZF9zc2lfaW5pdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpCisJCQkgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgcnNuZF9zc2kgKnNzaSA9IHJzbmRfbW9kX3RvX3NzaShtb2QpOwogCXN0cnVjdCByc25kX2RhaV9zdHJlYW0gKmlvID0gcnNuZF9tb2RfdG9faW8obW9kKTsKKwlzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkgPSByc25kX2lvX3RvX3JkYWkoaW8pOwogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSByc25kX2lvX3RvX3J1bnRpbWUoaW8pOwogCXUzMiBjcjsKIApAQCAtMzExLDEzICszMDgsMTIgQEAKIAkJY3IgfD0gU0RUQTsKIAlpZiAocmRhaS0+c3lzX2RlbGF5KQogCQljciB8PSBERUw7Ci0JaWYgKHJzbmRfZGFpX2lzX3BsYXkocmRhaSwgaW8pKQorCWlmIChyc25kX2lvX2lzX3BsYXkoaW8pKQogCQljciB8PSBUUk1EOwogCiAJLyoKIAkgKiBzZXQgc3NpIHBhcmFtZXRlcgogCSAqLwotCXNzaS0+cmRhaQk9IHJkYWk7CiAJc3NpLT5jcl9vd24JPSBjcjsKIAlzc2ktPmVycgk9IC0xOyAvKiBpZ25vcmUgMXN0IGVycm9yICovCiAKQEAgLTMyNSwxNiArMzIxLDE1IEBACiB9CiAKIHN0YXRpYyBpbnQgcnNuZF9zc2lfcXVpdChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpCisJCQkgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgcnNuZF9zc2kgKnNzaSA9IHJzbmRfbW9kX3RvX3NzaShtb2QpOwotCXN0cnVjdCByc25kX3ByaXYgKnByaXYgPSByc25kX21vZF90b19wcml2KG1vZCk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKIAogCWlmIChzc2ktPmVyciA+IDApCi0JCWRldl93YXJuKGRldiwgInNzaSB1bmRlci9vdmVyIGZsb3cgZXJyID0gJWRcbiIsIHNzaS0+ZXJyKTsKKwkJZGV2X3dhcm4oZGV2LCAiJXNbJWRdIHVuZGVyL292ZXIgZmxvdyBlcnIgPSAlZFxuIiwKKwkJCSByc25kX21vZF9uYW1lKG1vZCksIHJzbmRfbW9kX2lkKG1vZCksIHNzaS0+ZXJyKTsKIAotCXNzaS0+cmRhaQk9IE5VTEw7CiAJc3NpLT5jcl9vd24JPSAwOwogCXNzaS0+ZXJyCT0gMDsKIApAQCAtMzUzLDMyICszNDgsMzIgQEAKIH0KIAogc3RhdGljIGludCByc25kX3NzaV9zdGFydChzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSAgc3RydWN0IHJzbmRfZGFpICpyZGFpKQorCQkJICBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewogCXN0cnVjdCByc25kX3NzaSAqc3NpID0gcnNuZF9tb2RfdG9fc3NpKG1vZCk7CiAJc3RydWN0IHJzbmRfZGFpX3N0cmVhbSAqaW8gPSByc25kX21vZF90b19pbyhtb2QpOwogCi0JcnNuZF9zcmNfc3NpdV9zdGFydChtb2QsIHJkYWksIHJzbmRfc3NpX3VzZV9idXNpZihtb2QpKTsKKwlyc25kX3NyY19zc2l1X3N0YXJ0KG1vZCwgcnNuZF9zc2lfdXNlX2J1c2lmKG1vZCkpOwogCi0JcnNuZF9zc2lfaHdfc3RhcnQoc3NpLCByZGFpLCBpbyk7CisJcnNuZF9zc2lfaHdfc3RhcnQoc3NpLCBpbyk7CiAKLQlyc25kX3NyY19zc2lfaXJxX2VuYWJsZShtb2QsIHJkYWkpOworCXJzbmRfc3JjX3NzaV9pcnFfZW5hYmxlKG1vZCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByc25kX3NzaV9zdG9wKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJIHN0cnVjdCByc25kX2RhaSAqcmRhaSkKKwkJCSBzdHJ1Y3QgcnNuZF9wcml2ICpwcml2KQogewogCXN0cnVjdCByc25kX3NzaSAqc3NpID0gcnNuZF9tb2RfdG9fc3NpKG1vZCk7CiAKLQlyc25kX3NyY19zc2lfaXJxX2Rpc2FibGUobW9kLCByZGFpKTsKKwlyc25kX3NyY19zc2lfaXJxX2Rpc2FibGUobW9kKTsKIAogCXJzbmRfc3NpX3JlY29yZF9lcnJvcihzc2ksIHJzbmRfbW9kX3JlYWQobW9kLCBTU0lTUikpOwogCi0JcnNuZF9zc2lfaHdfc3RvcChzc2ksIHJkYWkpOworCXJzbmRfc3NpX2h3X3N0b3Aoc3NpKTsKIAotCXJzbmRfc3JjX3NzaXVfc3RvcChtb2QsIHJkYWkpOworCXJzbmRfc3JjX3NzaXVfc3RvcChtb2QpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zODYsMTYgKzM4MSwxNyBAQAogc3RhdGljIGlycXJldHVybl90IHJzbmRfc3NpX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCByc25kX3NzaSAqc3NpID0gZGF0YTsKLQlzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkgPSBzc2ktPnJkYWk7CiAJc3RydWN0IHJzbmRfbW9kICptb2QgPSAmc3NpLT5tb2Q7CisJc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYobW9kKTsKIAlzdHJ1Y3QgcnNuZF9kYWlfc3RyZWFtICppbyA9IHJzbmRfbW9kX3RvX2lvKG1vZCk7CisJaW50IGlzX2RtYSA9IHJzbmRfc3NpX2lzX2RtYV9tb2RlKG1vZCk7CiAJdTMyIHN0YXR1cyA9IHJzbmRfbW9kX3JlYWQobW9kLCBTU0lTUik7CiAKIAlpZiAoIWlvKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAkvKiBQSU8gb25seSAqLwotCWlmIChzdGF0dXMgJiBESVJRKSB7CisJaWYgKCFpc19kbWEgJiYgKHN0YXR1cyAmIERJUlEpKSB7CiAJCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSByc25kX2lvX3RvX3J1bnRpbWUoaW8pOwogCQl1MzIgKmJ1ZiA9ICh1MzIgKikocnVudGltZS0+ZG1hX2FyZWEgKwogCQkJCSAgIHJzbmRfZGFpX3BvaW50ZXJfb2Zmc2V0KGlvLCAwKSk7CkBAIC00MDUsNyArNDAxLDcgQEAKIAkJICogZGlyZWN0bHkgYXMgMzJiaXQgZGF0YQogCQkgKiBzZWUgcnNuZF9zc2lfaW5pdCgpCiAJCSAqLwotCQlpZiAocnNuZF9kYWlfaXNfcGxheShyZGFpLCBpbykpCisJCWlmIChyc25kX2lvX2lzX3BsYXkoaW8pKQogCQkJcnNuZF9tb2Rfd3JpdGUobW9kLCBTU0lURFIsICpidWYpOwogCQllbHNlCiAJCQkqYnVmID0gcnNuZF9tb2RfcmVhZChtb2QsIFNTSVJEUik7CkBAIC00MTUsMTQgKzQxMSwxMyBAQAogCiAJLyogUElPIC8gRE1BICovCiAJaWYgKHN0YXR1cyAmIChVSVJRIHwgT0lSUSkpIHsKLQkJc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYobW9kKTsKIAkJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKIAogCQkvKgogCQkgKiByZXN0YXJ0IFNTSQogCQkgKi8KLQkJcnNuZF9zc2lfc3RvcChtb2QsIHJkYWkpOwotCQlyc25kX3NzaV9zdGFydChtb2QsIHJkYWkpOworCQlyc25kX3NzaV9zdG9wKG1vZCwgcHJpdik7CisJCXJzbmRfc3NpX3N0YXJ0KG1vZCwgcHJpdik7CiAKIAkJZGV2X2RiZyhkZXYsICIlc1slZF0gcmVzdGFydFxuIiwKIAkJCXJzbmRfbW9kX25hbWUobW9kKSwgcnNuZF9tb2RfaWQobW9kKSk7CkBAIC00MzcsOSArNDMyLDggQEAKICAqCQlTU0kgUElPCiAgKi8KIHN0YXRpYyBpbnQgcnNuZF9zc2lfcGlvX3Byb2JlKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJICAgICAgc3RydWN0IHJzbmRfZGFpICpyZGFpKQorCQkJICAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9tb2RfdG9fcHJpdihtb2QpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CiAJc3RydWN0IHJzbmRfc3NpICpzc2kgPSByc25kX21vZF90b19zc2kobW9kKTsKIAlpbnQgcmV0OwpAQCAtNDY4LDkgKzQ2Miw4IEBACiB9OwogCiBzdGF0aWMgaW50IHJzbmRfc3NpX2RtYV9wcm9iZShzdHJ1Y3QgcnNuZF9tb2QgKm1vZCwKLQkJCSAgc3RydWN0IHJzbmRfZGFpICpyZGFpKQorCQkJICAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKLQlzdHJ1Y3QgcnNuZF9wcml2ICpwcml2ID0gcnNuZF9tb2RfdG9fcHJpdihtb2QpOwogCXN0cnVjdCByc25kX3NzaSAqc3NpID0gcnNuZF9tb2RfdG9fc3NpKG1vZCk7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gcnNuZF9wcml2X3RvX2Rldihwcml2KTsKIAlpbnQgZG1hX2lkID0gc3NpLT5pbmZvLT5kbWFfaWQ7CkBAIC01MDMsMTQgKzQ5NiwxMyBAQAogfQogCiBzdGF0aWMgaW50IHJzbmRfc3NpX2RtYV9yZW1vdmUoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkgICAgICAgc3RydWN0IHJzbmRfZGFpICpyZGFpKQorCQkJICAgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYobW9kKTsKIAlzdHJ1Y3QgcnNuZF9zc2kgKnNzaSA9IHJzbmRfbW9kX3RvX3NzaShtb2QpOwogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHJzbmRfcHJpdl90b19kZXYocHJpdik7CiAJaW50IGlycSA9IHNzaS0+aW5mby0+aXJxOwogCi0JcnNuZF9kbWFfcXVpdChyc25kX21vZF90b19wcml2KG1vZCksIHJzbmRfbW9kX3RvX2RtYShtb2QpKTsKKwlyc25kX2RtYV9xdWl0KHByaXYsIHJzbmRfbW9kX3RvX2RtYShtb2QpKTsKIAogCS8qIFBJTyB3aWxsIHJlcXVlc3QgSVJRIGFnYWluICovCiAJZGV2bV9mcmVlX2lycShkZXYsIGlycSwgc3NpKTsKQEAgLTUxOSw5ICs1MTEsOCBAQAogfQogCiBzdGF0aWMgaW50IHJzbmRfc3NpX2ZhbGxiYWNrKHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJICAgICBzdHJ1Y3QgcnNuZF9kYWkgKnJkYWkpCisJCQkgICAgIHN0cnVjdCByc25kX3ByaXYgKnByaXYpCiB7Ci0Jc3RydWN0IHJzbmRfcHJpdiAqcHJpdiA9IHJzbmRfbW9kX3RvX3ByaXYobW9kKTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSByc25kX3ByaXZfdG9fZGV2KHByaXYpOwogCiAJLyoKQEAgLTU0MCwyNSArNTMxLDI1IEBACiB9CiAKIHN0YXRpYyBpbnQgcnNuZF9zc2lfZG1hX3N0YXJ0KHN0cnVjdCByc25kX21vZCAqbW9kLAotCQkJICAgICAgc3RydWN0IHJzbmRfZGFpICpyZGFpKQorCQkJICAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgcnNuZF9kbWEgKmRtYSA9IHJzbmRfbW9kX3RvX2RtYShtb2QpOwogCi0JcnNuZF9zc2lfc3RhcnQobW9kLCByZGFpKTsKLQogCXJzbmRfZG1hX3N0YXJ0KGRtYSk7CiAKKwlyc25kX3NzaV9zdGFydChtb2QsIHByaXYpOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcnNuZF9zc2lfZG1hX3N0b3Aoc3RydWN0IHJzbmRfbW9kICptb2QsCi0JCQkgICAgIHN0cnVjdCByc25kX2RhaSAqcmRhaSkKKwkJCSAgICAgc3RydWN0IHJzbmRfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgcnNuZF9kbWEgKmRtYSA9IHJzbmRfbW9kX3RvX2RtYShtb2QpOwogCi0JcnNuZF9kbWFfc3RvcChkbWEpOworCXJzbmRfc3NpX3N0b3AobW9kLCBwcml2KTsKIAotCXJzbmRfc3NpX3N0b3AobW9kLCByZGFpKTsKKwlyc25kX2RtYV9zdG9wKGRtYSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTczNCw3ICs3MjUsNiBAQAogCQkJcmV0dXJuIFBUUl9FUlIoY2xrKTsKIAogCQlzc2ktPmluZm8JPSBwaW5mbzsKLQkJc3NpLT5jbGsJPSBjbGs7CiAKIAkJb3BzID0gJnJzbmRfc3NpX25vbl9vcHM7CiAJCWlmIChwaW5mby0+ZG1hX2lkID4gMCkKQEAgLTc0Miw3ICs3MzIsNyBAQAogCQllbHNlIGlmIChyc25kX3NzaV9waW9fYXZhaWxhYmxlKHNzaSkpCiAJCQlvcHMgPSAmcnNuZF9zc2lfcGlvX29wczsKIAotCQlyc25kX21vZF9pbml0KHByaXYsICZzc2ktPm1vZCwgb3BzLCBSU05EX01PRF9TU0ksIGkpOworCQlyc25kX21vZF9pbml0KCZzc2ktPm1vZCwgb3BzLCBjbGssIFJTTkRfTU9EX1NTSSwgaSk7CiAKIAkJcnNuZF9zc2lfcGFyZW50X2Nsa19zZXR1cChwcml2LCBzc2kpOwogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zaC9zaXVfcGNtLmMgYi9zb3VuZC9zb2Mvc2gvc2l1X3BjbS5jCmluZGV4IDMyZWI2ZGEuLjgyOTAyZjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9zaXVfcGNtLmMKKysrIGIvc291bmQvc29jL3NoL3NpdV9wY20uYwpAQCAtNTg5LDcgKzU4OSw2IEBACiAJdGFza2xldF9raWxsKCZwb3J0X2luZm8tPnBsYXliYWNrLnRhc2tsZXQpOwogCiAJc2l1X2ZyZWVfcG9ydChwb3J0X2luZm8pOwotCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX2ZyZWVfZm9yX2FsbChwY20pOwogCiAJZGV2X2RiZyhwY20tPmNhcmQtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiB9CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWFjOTcuYyBiL3NvdW5kL3NvYy9zb2MtYWM5Ny5jCmluZGV4IDJlMTBlOWEuLjA4ZDcyNTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtYWM5Ny5jCisrKyBiL3NvdW5kL3NvYy9zb2MtYWM5Ny5jCkBAIC00OCwxNSArNDgsMTggQEAKIH0KIAogLyoqCi0gKiBzbmRfc29jX25ld19hYzk3X2NvZGVjIC0gaW5pdGFpbGlzZSBBQzk3IGRldmljZQotICogQGNvZGVjOiBhdWRpbyBjb2RlYworICogc25kX3NvY19hbGxvY19hYzk3X2NvZGVjKCkgLSBBbGxvY2F0ZSBuZXcgYSBBQyc5NyBkZXZpY2UKKyAqIEBjb2RlYzogVGhlIENPREVDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIEFDJzk3IGRldmljZQogICoKLSAqIEluaXRpYWxpc2VzIEFDOTcgY29kZWMgcmVzb3VyY2VzIGZvciB1c2UgYnkgYWQtaG9jIGRldmljZXMgb25seS4KKyAqIEFsbG9jYXRlZCBhIG5ldyBzbmRfYWM5NyBkZXZpY2UgYW5kIGludGlhbGl6ZXMgaXQsIGJ1dCBkb2VzIG5vdCB5ZXQgcmVnaXN0ZXIKKyAqIGl0LiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIHRvIGVpdGhlciBjYWxsIGRldmljZV9hZGQoJmFjOTctPmRldikgdG8KKyAqIHJlZ2lzdGVyIHRoZSBkZXZpY2UsIG9yIHRvIGNhbGwgcHV0X2RldmljZSgmYWM5Ny0+ZGV2KSB0byBmcmVlIHRoZSBkZXZpY2UuCisgKgorICogUmV0dXJuczogQSBzbmRfYWM5NyBkZXZpY2Ugb3IgYSBQVFJfRVJSIGluIGNhc2Ugb2YgYW4gZXJyb3IuCiAgKi8KLXN0cnVjdCBzbmRfYWM5NyAqc25kX3NvY19uZXdfYWM5N19jb2RlYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCitzdHJ1Y3Qgc25kX2FjOTcgKnNuZF9zb2NfYWxsb2NfYWM5N19jb2RlYyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHNuZF9hYzk3ICphYzk3OwotCWludCByZXQ7CiAKIAlhYzk3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9hYzk3KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGFjOTcgPT0gTlVMTCkKQEAgLTczLDcgKzc2LDI4IEBACiAJCSAgICAgY29kZWMtPmNvbXBvbmVudC5jYXJkLT5zbmRfY2FyZC0+bnVtYmVyLCAwLAogCQkgICAgIGNvZGVjLT5jb21wb25lbnQubmFtZSk7CiAKLQlyZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJmFjOTctPmRldik7CisJZGV2aWNlX2luaXRpYWxpemUoJmFjOTctPmRldik7CisKKwlyZXR1cm4gYWM5NzsKK30KK0VYUE9SVF9TWU1CT0woc25kX3NvY19hbGxvY19hYzk3X2NvZGVjKTsKKworLyoqCisgKiBzbmRfc29jX25ld19hYzk3X2NvZGVjIC0gaW5pdGFpbGlzZSBBQzk3IGRldmljZQorICogQGNvZGVjOiBhdWRpbyBjb2RlYworICoKKyAqIEluaXRpYWxpc2VzIEFDOTcgY29kZWMgcmVzb3VyY2VzIGZvciB1c2UgYnkgYWQtaG9jIGRldmljZXMgb25seS4KKyAqLworc3RydWN0IHNuZF9hYzk3ICpzbmRfc29jX25ld19hYzk3X2NvZGVjKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYykKK3sKKwlzdHJ1Y3Qgc25kX2FjOTcgKmFjOTc7CisJaW50IHJldDsKKworCWFjOTcgPSBzbmRfc29jX2FsbG9jX2FjOTdfY29kZWMoY29kZWMpOworCWlmIChJU19FUlIoYWM5NykpCisJCXJldHVybiBhYzk3OworCisJcmV0ID0gZGV2aWNlX2FkZCgmYWM5Ny0+ZGV2KTsKIAlpZiAocmV0KSB7CiAJCXB1dF9kZXZpY2UoJmFjOTctPmRldik7CiAJCXJldHVybiBFUlJfUFRSKHJldCk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvbXByZXNzLmMgYi9zb3VuZC9zb2Mvc29jLWNvbXByZXNzLmMKaW5kZXggNTkwYTgyZi4uMDI1YzM4ZiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1jb21wcmVzcy5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29tcHJlc3MuYwpAQCAtNjU5LDcgKzY1OSw4IEBACiAJCQlydGQtPmRhaV9saW5rLT5zdHJlYW1fbmFtZSk7CiAKIAkJcmV0ID0gc25kX3BjbV9uZXdfaW50ZXJuYWwocnRkLT5jYXJkLT5zbmRfY2FyZCwgbmV3X25hbWUsIG51bSwKLQkJCQkxLCAwLCAmYmVfcGNtKTsKKwkJCQlydGQtPmRhaV9saW5rLT5kcGNtX3BsYXliYWNrLAorCQkJCXJ0ZC0+ZGFpX2xpbmstPmRwY21fY2FwdHVyZSwgJmJlX3BjbSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKHJ0ZC0+Y2FyZC0+ZGV2LCAiQVNvQzogY2FuJ3QgY3JlYXRlIGNvbXByZXNzZWQgZm9yICVzXG4iLAogCQkJCXJ0ZC0+ZGFpX2xpbmstPm5hbWUpOwpAQCAtNjY4LDggKzY2OSwxMCBAQAogCiAJCXJ0ZC0+cGNtID0gYmVfcGNtOwogCQlydGQtPmZlX2NvbXByID0gMTsKLQkJYmVfcGNtLT5zdHJlYW1zW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdLnN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhID0gcnRkOwotCQliZV9wY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFXS5zdWJzdHJlYW0tPnByaXZhdGVfZGF0YSA9IHJ0ZDsKKwkJaWYgKHJ0ZC0+ZGFpX2xpbmstPmRwY21fcGxheWJhY2spCisJCQliZV9wY20tPnN0cmVhbXNbU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uc3Vic3RyZWFtLT5wcml2YXRlX2RhdGEgPSBydGQ7CisJCWVsc2UgaWYgKHJ0ZC0+ZGFpX2xpbmstPmRwY21fY2FwdHVyZSkKKwkJCWJlX3BjbS0+c3RyZWFtc1tTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLnN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhID0gcnRkOwogCQltZW1jcHkoY29tcHItPm9wcywgJnNvY19jb21wcl9keW5fb3BzLCBzaXplb2Yoc29jX2NvbXByX2R5bl9vcHMpKTsKIAl9IGVsc2UKIAkJbWVtY3B5KGNvbXByLT5vcHMsICZzb2NfY29tcHJfb3BzLCBzaXplb2Yoc29jX2NvbXByX29wcykpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCAyYzYyNjIwLi4zMDU3OWNhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtMTkxLDYgKzE5MSwzOSBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIocG1kb3duX3RpbWUsIDA2NDQsIHBtZG93bl90aW1lX3Nob3csIHBtZG93bl90aW1lX3NldCk7CiAKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzb2NfZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2NvZGVjX3JlZy5hdHRyLAorCSZkZXZfYXR0cl9wbWRvd25fdGltZS5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyB1bW9kZV90IHNvY19kZXZfYXR0cl9pc192aXNpYmxlKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICAgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBpbnQgaWR4KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGtvYmpfdG9fZGV2KGtvYmopOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChhdHRyID09ICZkZXZfYXR0cl9wbWRvd25fdGltZS5hdHRyKQorCQlyZXR1cm4gYXR0ci0+bW9kZTsgLyogYWx3YXlzIHZpc2libGUgKi8KKwlyZXR1cm4gcnRkLT5jb2RlYyA/IGF0dHItPm1vZGUgOiAwOyAvKiBlbmFibGVkIG9ubHkgd2l0aCBjb2RlYyAqLworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzb2NfZGFwbV9kZXZfZ3JvdXAgPSB7CisJLmF0dHJzID0gc29jX2RhcG1fZGV2X2F0dHJzLAorCS5pc192aXNpYmxlID0gc29jX2Rldl9hdHRyX2lzX3Zpc2libGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzb2NfZGV2X3JvdXAgPSB7CisJLmF0dHJzID0gc29jX2Rldl9hdHRycywKKwkuaXNfdmlzaWJsZSA9IHNvY19kZXZfYXR0cl9pc192aXNpYmxlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnNvY19kZXZfYXR0cl9ncm91cHNbXSA9IHsKKwkmc29jX2RhcG1fZGV2X2dyb3VwLAorCSZzb2NfZGV2X3JvdXAsCisJTlVMTAorfTsKKwogI2lmZGVmIENPTkZJR19ERUJVR19GUwogc3RhdGljIHNzaXplX3QgY29kZWNfcmVnX3JlYWRfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQpAQCAtOTQ5LDggKzk4Miw2IEBACiAKIAkvKiB1bnJlZ2lzdGVyIHRoZSBydGQgZGV2aWNlICovCiAJaWYgKHJ0ZC0+ZGV2X3JlZ2lzdGVyZWQpIHsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKHJ0ZC0+ZGV2LCAmZGV2X2F0dHJfcG1kb3duX3RpbWUpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUocnRkLT5kZXYsICZkZXZfYXR0cl9jb2RlY19yZWcpOwogCQlkZXZpY2VfdW5yZWdpc3RlcihydGQtPmRldik7CiAJCXJ0ZC0+ZGV2X3JlZ2lzdGVyZWQgPSAwOwogCX0KQEAgLTExMjAsNiArMTE1MSw3IEBACiAJZGV2aWNlX2luaXRpYWxpemUocnRkLT5kZXYpOwogCXJ0ZC0+ZGV2LT5wYXJlbnQgPSBydGQtPmNhcmQtPmRldjsKIAlydGQtPmRldi0+cmVsZWFzZSA9IHJ0ZF9yZWxlYXNlOworCXJ0ZC0+ZGV2LT5ncm91cHMgPSBzb2NfZGV2X2F0dHJfZ3JvdXBzOwogCWRldl9zZXRfbmFtZShydGQtPmRldiwgIiVzIiwgbmFtZSk7CiAJZGV2X3NldF9kcnZkYXRhKHJ0ZC0+ZGV2LCBydGQpOwogCW11dGV4X2luaXQoJnJ0ZC0+cGNtX211dGV4KTsKQEAgLTExMzYsMjMgKzExNjgsNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAlydGQtPmRldl9yZWdpc3RlcmVkID0gMTsKLQotCWlmIChydGQtPmNvZGVjKSB7Ci0JCS8qIGFkZCBEQVBNIHN5c2ZzIGVudHJpZXMgZm9yIHRoaXMgY29kZWMgKi8KLQkJcmV0ID0gc25kX3NvY19kYXBtX3N5c19hZGQocnRkLT5kZXYpOwotCQlpZiAocmV0IDwgMCkKLQkJCWRldl9lcnIocnRkLT5kZXYsCi0JCQkJIkFTb0M6IGZhaWxlZCB0byBhZGQgY29kZWMgZGFwbSBzeXNmcyBlbnRyaWVzOiAlZFxuIiwKLQkJCQlyZXQpOwotCi0JCS8qIGFkZCBjb2RlYyBzeXNmcyBlbnRyaWVzICovCi0JCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZShydGQtPmRldiwgJmRldl9hdHRyX2NvZGVjX3JlZyk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZGV2X2VycihydGQtPmRldiwKLQkJCQkiQVNvQzogZmFpbGVkIHRvIGFkZCBjb2RlYyBzeXNmcyBmaWxlczogJWRcbiIsCi0JCQkJcmV0KTsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTMwOCwxMSArMTMyMyw2IEBACiAJfQogI2VuZGlmCiAKLQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUocnRkLT5kZXYsICZkZXZfYXR0cl9wbWRvd25fdGltZSk7Ci0JaWYgKHJldCA8IDApCi0JCWRldl93YXJuKHJ0ZC0+ZGV2LCAiQVNvQzogZmFpbGVkIHRvIGFkZCBwbWRvd25fdGltZSBzeXNmczogJWRcbiIsCi0JCQlyZXQpOwotCiAJaWYgKGNwdV9kYWktPmRyaXZlci0+Y29tcHJlc3NfZGFpKSB7CiAJCS8qY3JlYXRlIGNvbXByZXNzX2RldmljZSIqLwogCQlyZXQgPSBzb2NfbmV3X2NvbXByZXNzKHJ0ZCwgbnVtKTsKQEAgLTE0MjcsMTEgKzE0MzcsNzYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBzbmRfc29jX3J1bnRpbWVfc2V0X2RhaV9mbXQoKSAtIENoYW5nZSBEQUkgbGluayBmb3JtYXQgZm9yIGEgQVNvQyBydW50aW1lCisgKiBAcnRkOiBUaGUgcnVudGltZSBmb3Igd2hpY2ggdGhlIERBSSBsaW5rIGZvcm1hdCBzaG91bGQgYmUgY2hhbmdlZAorICogQGRhaV9mbXQ6IFRoZSBuZXcgREFJIGxpbmsgZm9ybWF0CisgKgorICogVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBEQUkgbGluayBmb3JtYXQgZm9yIGFsbCBEQUlzIGNvbm5lY3RlZCB0byB0aGUgREFJCisgKiBsaW5rIGZvciB0aGUgc3BlY2lmaWVkIHJ1bnRpbWUuCisgKgorICogTm90ZTogRm9yIHNldHVwcyB3aXRoIGEgc3RhdGljIGZvcm1hdCBzZXQgdGhlIGRhaV9mbXQgZmllbGQgaW4gdGhlCisgKiBjb3JyZXNwb25kaW5nIHNuZF9kYWlfbGluayBzdHJ1Y3QgaW5zdGVhZCBvZiB1c2luZyB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorICovCitpbnQgc25kX3NvY19ydW50aW1lX3NldF9kYWlfZm10KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQsCisJdW5zaWduZWQgaW50IGRhaV9mbXQpCit7CisJc3RydWN0IHNuZF9zb2NfZGFpICoqY29kZWNfZGFpcyA9IHJ0ZC0+Y29kZWNfZGFpczsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmNwdV9kYWk7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBydGQtPm51bV9jb2RlY3M7IGkrKykgeworCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IGNvZGVjX2RhaXNbaV07CisKKwkJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjb2RlY19kYWksIGRhaV9mbXQpOworCQlpZiAocmV0ICE9IDAgJiYgcmV0ICE9IC1FTk9UU1VQUCkgeworCQkJZGV2X3dhcm4oY29kZWNfZGFpLT5kZXYsCisJCQkJICJBU29DOiBGYWlsZWQgdG8gc2V0IERBSSBmb3JtYXQ6ICVkXG4iLCByZXQpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCS8qIEZsaXAgdGhlIHBvbGFyaXR5IGZvciB0aGUgIkNQVSIgZW5kIG9mIGEgQ09ERUM8LT5DT0RFQyBsaW5rICovCisJaWYgKGNwdV9kYWktPmNvZGVjKSB7CisJCXVuc2lnbmVkIGludCBpbnZfZGFpX2ZtdDsKKworCQlpbnZfZGFpX2ZtdCA9IGRhaV9mbXQgJiB+U05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0s7CisJCXN3aXRjaCAoZGFpX2ZtdCAmIFNORF9TT0NfREFJRk1UX01BU1RFUl9NQVNLKSB7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGTToKKwkJCWludl9kYWlfZm10IHw9IFNORF9TT0NfREFJRk1UX0NCU19DRlM7CisJCQlicmVhazsKKwkJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOgorCQkJaW52X2RhaV9mbXQgfD0gU05EX1NPQ19EQUlGTVRfQ0JTX0NGTTsKKwkJCWJyZWFrOworCQljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRk06CisJCQlpbnZfZGFpX2ZtdCB8PSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOworCQkJYnJlYWs7CisJCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzoKKwkJCWludl9kYWlfZm10IHw9IFNORF9TT0NfREFJRk1UX0NCTV9DRk07CisJCQlicmVhazsKKwkJfQorCisJCWRhaV9mbXQgPSBpbnZfZGFpX2ZtdDsKKwl9CisKKwlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIGRhaV9mbXQpOworCWlmIChyZXQgIT0gMCAmJiByZXQgIT0gLUVOT1RTVVBQKSB7CisJCWRldl93YXJuKGNwdV9kYWktPmRldiwKKwkJCSAiQVNvQzogRmFpbGVkIHRvIHNldCBEQUkgZm9ybWF0OiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNuZF9zb2NfcnVudGltZV9zZXRfZGFpX2ZtdCk7CisKIHN0YXRpYyBpbnQgc25kX3NvY19pbnN0YW50aWF0ZV9jYXJkKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCiB7CiAJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjOwotCXN0cnVjdCBzbmRfc29jX2RhaV9saW5rICpkYWlfbGluazsKLQlpbnQgcmV0LCBpLCBvcmRlciwgZGFpX2ZtdDsKKwlpbnQgcmV0LCBpLCBvcmRlcjsKIAogCW11dGV4X2xvY2tfbmVzdGVkKCZjYXJkLT5tdXRleCwgU05EX1NPQ19DQVJEX0NMQVNTX0lOSVQpOwogCkBAIC0xNTQyLDYwICsxNjE3LDkgQEAKIAkJCQkJY2FyZC0+bnVtX2RhcG1fcm91dGVzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBjYXJkLT5udW1fbGlua3M7IGkrKykgewotCQlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gJmNhcmQtPnJ0ZFtpXTsKLQkJZGFpX2xpbmsgPSAmY2FyZC0+ZGFpX2xpbmtbaV07Ci0JCWRhaV9mbXQgPSBkYWlfbGluay0+ZGFpX2ZtdDsKLQotCQlpZiAoZGFpX2ZtdCkgewotCQkJc3RydWN0IHNuZF9zb2NfZGFpICoqY29kZWNfZGFpcyA9IHJ0ZC0+Y29kZWNfZGFpczsKLQkJCWludCBqOwotCi0JCQlmb3IgKGogPSAwOyBqIDwgcnRkLT5udW1fY29kZWNzOyBqKyspIHsKLQkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IGNvZGVjX2RhaXNbal07Ci0KLQkJCQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNvZGVjX2RhaSwgZGFpX2ZtdCk7Ci0JCQkJaWYgKHJldCAhPSAwICYmIHJldCAhPSAtRU5PVFNVUFApCi0JCQkJCWRldl93YXJuKGNvZGVjX2RhaS0+ZGV2LAotCQkJCQkJICJBU29DOiBGYWlsZWQgdG8gc2V0IERBSSBmb3JtYXQ6ICVkXG4iLAotCQkJCQkJIHJldCk7Ci0JCQl9Ci0JCX0KLQotCQkvKiBJZiB0aGlzIGlzIGEgcmVndWxhciBDUFUgbGluayB0aGVyZSB3aWxsIGJlIGEgcGxhdGZvcm0gKi8KLQkJaWYgKGRhaV9mbXQgJiYKLQkJICAgIChkYWlfbGluay0+cGxhdGZvcm1fbmFtZSB8fCBkYWlfbGluay0+cGxhdGZvcm1fb2Zfbm9kZSkpIHsKLQkJCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY2FyZC0+cnRkW2ldLmNwdV9kYWksCi0JCQkJCQkgIGRhaV9mbXQpOwotCQkJaWYgKHJldCAhPSAwICYmIHJldCAhPSAtRU5PVFNVUFApCi0JCQkJZGV2X3dhcm4oY2FyZC0+cnRkW2ldLmNwdV9kYWktPmRldiwKLQkJCQkJICJBU29DOiBGYWlsZWQgdG8gc2V0IERBSSBmb3JtYXQ6ICVkXG4iLAotCQkJCQkgcmV0KTsKLQkJfSBlbHNlIGlmIChkYWlfZm10KSB7Ci0JCQkvKiBGbGlwIHRoZSBwb2xhcml0eSBmb3IgdGhlICJDUFUiIGVuZCAqLwotCQkJZGFpX2ZtdCAmPSB+U05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0s7Ci0JCQlzd2l0Y2ggKGRhaV9saW5rLT5kYWlfZm10ICYKLQkJCQlTTkRfU09DX0RBSUZNVF9NQVNURVJfTUFTSykgewotCQkJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgotCQkJCWRhaV9mbXQgfD0gU05EX1NPQ19EQUlGTVRfQ0JTX0NGUzsKLQkJCQlicmVhazsKLQkJCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUzoKLQkJCQlkYWlfZm10IHw9IFNORF9TT0NfREFJRk1UX0NCU19DRk07Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNORF9TT0NfREFJRk1UX0NCU19DRk06Ci0JCQkJZGFpX2ZtdCB8PSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZTOwotCQkJCWJyZWFrOwotCQkJY2FzZSBTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTOgotCQkJCWRhaV9mbXQgfD0gU05EX1NPQ19EQUlGTVRfQ0JNX0NGTTsKLQkJCQlicmVhazsKLQkJCX0KLQotCQkJcmV0ID0gc25kX3NvY19kYWlfc2V0X2ZtdChjYXJkLT5ydGRbaV0uY3B1X2RhaSwKLQkJCQkJCSAgZGFpX2ZtdCk7Ci0JCQlpZiAocmV0ICE9IDAgJiYgcmV0ICE9IC1FTk9UU1VQUCkKLQkJCQlkZXZfd2FybihjYXJkLT5ydGRbaV0uY3B1X2RhaS0+ZGV2LAotCQkJCQkgIkFTb0M6IEZhaWxlZCB0byBzZXQgREFJIGZvcm1hdDogJWRcbiIsCi0JCQkJCSByZXQpOwotCQl9CisJCWlmIChjYXJkLT5kYWlfbGlua1tpXS5kYWlfZm10KQorCQkJc25kX3NvY19ydW50aW1lX3NldF9kYWlfZm10KCZjYXJkLT5ydGRbaV0sCisJCQkJY2FyZC0+ZGFpX2xpbmtbaV0uZGFpX2ZtdCk7CiAJfQogCiAJc25wcmludGYoY2FyZC0+c25kX2NhcmQtPnNob3J0bmFtZSwgc2l6ZW9mKGNhcmQtPnNuZF9jYXJkLT5zaG9ydG5hbWUpLApAQCAtMTYyNiw5ICsxNjUwLDYgQEAKIAkJfQogCX0KIAotCWlmIChjYXJkLT5mdWxseV9yb3V0ZWQpCi0JCXNuZF9zb2NfZGFwbV9hdXRvX25jX3BpbnMoY2FyZCk7Ci0KIAlzbmRfc29jX2RhcG1fbmV3X3dpZGdldHMoY2FyZCk7CiAKIAlyZXQgPSBzbmRfY2FyZF9yZWdpc3RlcihjYXJkLT5zbmRfY2FyZCk7CkBAIC0yMTE5LDE1ICsyMTQwLDI3IEBACiB9CiAKIC8qKgotICogc25kX3NvY19kYWlfc2V0X3RkbV9zbG90IC0gY29uZmlndXJlIERBSSBURE0uCi0gKiBAZGFpOiBEQUkKKyAqIHNuZF9zb2NfZGFpX3NldF90ZG1fc2xvdCgpIC0gQ29uZmlndXJlcyBhIERBSSBmb3IgVERNIG9wZXJhdGlvbgorICogQGRhaTogVGhlIERBSSB0byBjb25maWd1cmUKICAqIEB0eF9tYXNrOiBiaXRtYXNrIHJlcHJlc2VudGluZyBhY3RpdmUgVFggc2xvdHMuCiAgKiBAcnhfbWFzazogYml0bWFzayByZXByZXNlbnRpbmcgYWN0aXZlIFJYIHNsb3RzLgogICogQHNsb3RzOiBOdW1iZXIgb2Ygc2xvdHMgaW4gdXNlLgogICogQHNsb3Rfd2lkdGg6IFdpZHRoIGluIGJpdHMgZm9yIGVhY2ggc2xvdC4KICAqCi0gKiBDb25maWd1cmVzIGEgREFJIGZvciBURE0gb3BlcmF0aW9uLiBCb3RoIG1hc2sgYW5kIHNsb3RzIGFyZSBjb2RlYyBhbmQgREFJCi0gKiBzcGVjaWZpYy4KKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgc3BlY2lmaWVkIERBSSBmb3IgVERNIG9wZXJhdGlvbi4gQHNsb3QgY29udGFpbnMKKyAqIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2xvdHMgb2YgdGhlIFRETSBzdHJlYW0gYW5kIEBzbG90X3dpdGggdGhlIHdpZHRoIG9mIGVhY2gKKyAqIHNsb3QgaW4gYml0IGNsb2NrIGN5Y2xlcy4gQHR4X21hc2sgYW5kIEByeF9tYXNrIGFyZSBiaXRtYXNrcyBzcGVjaWZ5aW5nIHRoZQorICogYWN0aXZlIHNsb3RzIG9mIHRoZSBURE0gc3RyZWFtIGZvciB0aGUgc3BlY2lmaWVkIERBSSwgaS5lLiB3aGljaCBzbG90cyB0aGUKKyAqIERBSSBzaG91bGQgd3JpdGUgdG8gb3IgcmVhZCBmcm9tLiBJZiBhIGJpdCBpcyBzZXQgdGhlIGNvcnJlc3BvbmRpbmcgc2xvdCBpcworICogYWN0aXZlLCBpZiBhIGJpdCBpcyBjbGVhcmVkIHRoZSBjb3JyZXNwb25kaW5nIHNsb3QgaXMgaW5hY3RpdmUuIEJpdCAwIG1hcHMgdG8KKyAqIHRoZSBmaXJzdCBzbG90LCBiaXQgMSB0byB0aGUgc2Vjb25kIHNsb3QgYW5kIHNvIG9uLiBUaGUgZmlyc3QgYWN0aXZlIHNsb3QKKyAqIG1hcHMgdG8gdGhlIGZpcnN0IGNoYW5uZWwgb2YgdGhlIERBSSwgdGhlIHNlY29uZCBhY3RpdmUgc2xvdCB0byB0aGUgc2Vjb25kCisgKiBjaGFubmVsIGFuZCBzbyBvbi4KKyAqCisgKiBURE0gbW9kZSBjYW4gYmUgZGlzYWJsZWQgYnkgcGFzc2luZyAwIGZvciBAc2xvdHMuIEluIHRoaXMgY2FzZSBAdHhfbWFzaywKKyAqIEByeF9tYXNrIGFuZCBAc2xvdF93aWR0aCB3aWxsIGJlIGlnbm9yZWQuCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvdGhlcndpc2UuCiAgKi8KIGludCBzbmRfc29jX2RhaV9zZXRfdGRtX3Nsb3Qoc3RydWN0IHNuZF9zb2NfZGFpICpkYWksCiAJdW5zaWduZWQgaW50IHR4X21hc2ssIHVuc2lnbmVkIGludCByeF9tYXNrLCBpbnQgc2xvdHMsIGludCBzbG90X3dpZHRoKQpAQCAtMjM4Niw4ICsyNDE5LDggQEAKIAkJY2FyZC0+aW5zdGFudGlhdGVkID0gZmFsc2U7CiAJCXNuZF9zb2NfZGFwbV9zaHV0ZG93bihjYXJkKTsKIAkJc29jX2NsZWFudXBfY2FyZF9yZXNvdXJjZXMoY2FyZCk7CisJCWRldl9kYmcoY2FyZC0+ZGV2LCAiQVNvQzogVW5yZWdpc3RlcmVkIGNhcmQgJyVzJ1xuIiwgY2FyZC0+bmFtZSk7CiAJfQotCWRldl9kYmcoY2FyZC0+ZGV2LCAiQVNvQzogVW5yZWdpc3RlcmVkIGNhcmQgJyVzJ1xuIiwgY2FyZC0+bmFtZSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jIGIvc291bmQvc29jL3NvYy1kYXBtLmMKaW5kZXggYzUxMzZiYi4uYjZmODgyMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kYXBtLmMKKysrIGIvc291bmQvc29jL3NvYy1kYXBtLmMKQEAgLTUxNyw4ICs1MTcsOCBAQAogewogCWlmICghZGFwbS0+Y29tcG9uZW50KQogCQlyZXR1cm4gLUVJTzsKLQlyZXR1cm4gc25kX3NvY19jb21wb25lbnRfdXBkYXRlX2JpdHNfYXN5bmMoZGFwbS0+Y29tcG9uZW50LCByZWcsCi0JCW1hc2ssIHZhbHVlKTsKKwlyZXR1cm4gc25kX3NvY19jb21wb25lbnRfdXBkYXRlX2JpdHMoZGFwbS0+Y29tcG9uZW50LCByZWcsCisJCQkJCSAgICAgbWFzaywgdmFsdWUpOwogfQogCiBzdGF0aWMgaW50IHNvY19kYXBtX3Rlc3RfYml0cyhzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0sCkBAIC0yMTI3LDE1ICsyMTI3LDEwIEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihkYXBtX3dpZGdldCwgMDQ0NCwgZGFwbV93aWRnZXRfc2hvdywgTlVMTCk7CiAKLWludCBzbmRfc29jX2RhcG1fc3lzX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kYXBtX3dpZGdldCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNuZF9zb2NfZGFwbV9zeXNfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfZGFwbV93aWRnZXQpOwotfQorc3RydWN0IGF0dHJpYnV0ZSAqc29jX2RhcG1fZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2RhcG1fd2lkZ2V0LmF0dHIsCisJTlVMTAorfTsKIAogc3RhdGljIHZvaWQgZGFwbV9mcmVlX3BhdGgoc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwYXRoKQogewpAQCAtMjI3OSw2ICsyMjc0LDkgQEAKIAogCXN3aXRjaCAody0+aWQpIHsKIAljYXNlIHNuZF9zb2NfZGFwbV9pbnB1dDoKKwkJLyogT24gYSBmdWxseSByb3V0ZWQgY2FyZCBhIGlucHV0IGlzIG5ldmVyIGEgc291cmNlICovCisJCWlmICh3LT5kYXBtLT5jYXJkLT5mdWxseV9yb3V0ZWQpCisJCQlicmVhazsKIAkJdy0+aXNfc291cmNlID0gMTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmdy0+c291cmNlcywgbGlzdF9zaW5rKSB7CiAJCQlpZiAocC0+c291cmNlLT5pZCA9PSBzbmRfc29jX2RhcG1fbWljYmlhcyB8fApAQCAtMjI5MSw2ICsyMjg5LDkgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIHNuZF9zb2NfZGFwbV9vdXRwdXQ6CisJCS8qIE9uIGEgZnVsbHkgcm91dGVkIGNhcmQgYSBvdXRwdXQgaXMgbmV2ZXIgYSBzaW5rICovCisJCWlmICh3LT5kYXBtLT5jYXJkLT5mdWxseV9yb3V0ZWQpCisJCQlicmVhazsKIAkJdy0+aXNfc2luayA9IDE7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJnctPnNpbmtzLCBsaXN0X3NvdXJjZSkgewogCQkJaWYgKHAtPnNpbmstPmlkID09IHNuZF9zb2NfZGFwbV9zcGsgfHwKQEAgLTMwODUsMTYgKzMwODYsMjQgQEAKIAogCXN3aXRjaCAody0+aWQpIHsKIAljYXNlIHNuZF9zb2NfZGFwbV9taWM6Ci0JY2FzZSBzbmRfc29jX2RhcG1faW5wdXQ6CiAJCXctPmlzX3NvdXJjZSA9IDE7CiAJCXctPnBvd2VyX2NoZWNrID0gZGFwbV9nZW5lcmljX2NoZWNrX3Bvd2VyOwogCQlicmVhazsKKwljYXNlIHNuZF9zb2NfZGFwbV9pbnB1dDoKKwkJaWYgKCFkYXBtLT5jYXJkLT5mdWxseV9yb3V0ZWQpCisJCQl3LT5pc19zb3VyY2UgPSAxOworCQl3LT5wb3dlcl9jaGVjayA9IGRhcG1fZ2VuZXJpY19jaGVja19wb3dlcjsKKwkJYnJlYWs7CiAJY2FzZSBzbmRfc29jX2RhcG1fc3BrOgogCWNhc2Ugc25kX3NvY19kYXBtX2hwOgotCWNhc2Ugc25kX3NvY19kYXBtX291dHB1dDoKIAkJdy0+aXNfc2luayA9IDE7CiAJCXctPnBvd2VyX2NoZWNrID0gZGFwbV9nZW5lcmljX2NoZWNrX3Bvd2VyOwogCQlicmVhazsKKwljYXNlIHNuZF9zb2NfZGFwbV9vdXRwdXQ6CisJCWlmICghZGFwbS0+Y2FyZC0+ZnVsbHlfcm91dGVkKQorCQkJdy0+aXNfc2luayA9IDE7CisJCXctPnBvd2VyX2NoZWNrID0gZGFwbV9nZW5lcmljX2NoZWNrX3Bvd2VyOworCQlicmVhazsKIAljYXNlIHNuZF9zb2NfZGFwbV92bWlkOgogCWNhc2Ugc25kX3NvY19kYXBtX3NpZ2dlbjoKIAkJdy0+aXNfc291cmNlID0gMTsKQEAgLTMxMzAsOCArMzEzOSw2IEBACiAJfQogCiAJdy0+ZGFwbSA9IGRhcG07Ci0JaWYgKGRhcG0tPmNvbXBvbmVudCkKLQkJdy0+Y29kZWMgPSBkYXBtLT5jb21wb25lbnQtPmNvZGVjOwogCUlOSVRfTElTVF9IRUFEKCZ3LT5zb3VyY2VzKTsKIAlJTklUX0xJU1RfSEVBRCgmdy0+c2lua3MpOwogCUlOSVRfTElTVF9IRUFEKCZ3LT5saXN0KTsKQEAgLTM4MDksOTMgKzM4MTYsNiBAQAogRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19kYXBtX2lnbm9yZV9zdXNwZW5kKTsKIAogLyoqCi0gKiBkYXBtX2lzX2V4dGVybmFsX3BhdGgoKSAtIENoZWNrcyBpZiBhIHBhdGggaXMgYSBleHRlcm5hbCBwYXRoCi0gKiBAY2FyZDogVGhlIGNhcmQgdGhlIHBhdGggYmVsb25ncyB0bwotICogQHBhdGg6IFRoZSBwYXRoIHRvIGNoZWNrCi0gKgotICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXRoIGlzIGVpdGhlciBiZXR3ZWVuIHR3byBkaWZmZXJlbnQgREFQTSBjb250ZXh0cyBvcgotICogYmV0d2VlbiB0d28gZXh0ZXJuYWwgcGlucyBvZiB0aGUgc2FtZSBEQVBNIGNvbnRleHQuIE90aGVyd2lzZSByZXR1cm5zCi0gKiBmYWxzZS4KLSAqLwotc3RhdGljIGJvb2wgZGFwbV9pc19leHRlcm5hbF9wYXRoKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQsCi0Jc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwYXRoKQotewotCWRldl9kYmcoY2FyZC0+ZGV2LAotCQkiLi4uIFBhdGggJXMoaWQ6JWQgZGFwbTolcCkgLSAlcyhpZDolZCBkYXBtOiVwKVxuIiwKLQkJcGF0aC0+c291cmNlLT5uYW1lLCBwYXRoLT5zb3VyY2UtPmlkLCBwYXRoLT5zb3VyY2UtPmRhcG0sCi0JCXBhdGgtPnNpbmstPm5hbWUsIHBhdGgtPnNpbmstPmlkLCBwYXRoLT5zaW5rLT5kYXBtKTsKLQotCS8qIENvbm5lY3Rpb24gYmV0d2VlbiB0d28gZGlmZmVyZW50IERBUE0gY29udGV4dHMgKi8KLQlpZiAocGF0aC0+c291cmNlLT5kYXBtICE9IHBhdGgtPnNpbmstPmRhcG0pCi0JCXJldHVybiB0cnVlOwotCi0JLyogTG9vcGJhY2sgY29ubmVjdGlvbiBmcm9tIGV4dGVybmFsIHBpbiB0byBleHRlcm5hbCBwaW4gKi8KLQlpZiAocGF0aC0+c2luay0+aWQgPT0gc25kX3NvY19kYXBtX2lucHV0KSB7Ci0JCXN3aXRjaCAocGF0aC0+c291cmNlLT5pZCkgewotCQljYXNlIHNuZF9zb2NfZGFwbV9vdXRwdXQ6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX21pY2JpYXM6Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgYm9vbCBzbmRfc29jX2RhcG1fd2lkZ2V0X2luX2NhcmRfcGF0aHMoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCwKLQkJCQkJICAgICAgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV9wYXRoICpwOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmdy0+c291cmNlcywgbGlzdF9zaW5rKSB7Ci0JCWlmIChkYXBtX2lzX2V4dGVybmFsX3BhdGgoY2FyZCwgcCkpCi0JCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZ3LT5zaW5rcywgbGlzdF9zb3VyY2UpIHsKLQkJaWYgKGRhcG1faXNfZXh0ZXJuYWxfcGF0aChjYXJkLCBwKSkKLQkJCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBmYWxzZTsKLX0KLQotLyoqCi0gKiBzbmRfc29jX2RhcG1fYXV0b19uY19waW5zIC0gY2FsbCBzbmRfc29jX2RhcG1fbmNfcGluIGZvciB1bnVzZWQgcGlucwotICogQGNhcmQ6IFRoZSBjYXJkIHdob3NlIHBpbnMgc2hvdWxkIGJlIHByb2Nlc3NlZAotICoKLSAqIEF1dG9tYXRpY2FsbHkgY2FsbCBzbmRfc29jX2RhcG1fbmNfcGluKCkgZm9yIGFueSBleHRlcm5hbCBwaW5zIGluIHRoZSBjYXJkCi0gKiB3aGljaCBhcmUgdW51c2VkLiBQaW5zIGFyZSB1c2VkIGlmIHRoZXkgYXJlIGNvbm5lY3RlZCBleHRlcm5hbGx5IHRvIGEKLSAqIGNvbXBvbmVudCwgd2hldGhlciB0aGF0IGJlIHRvIHNvbWUgb3RoZXIgZGV2aWNlLCBvciBhIGxvb3AtYmFjayBjb25uZWN0aW9uIHRvCi0gKiB0aGUgY29tcG9uZW50IGl0c2VsZi4KLSAqLwotdm9pZCBzbmRfc29jX2RhcG1fYXV0b19uY19waW5zKHN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQpCi17Ci0Jc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7Ci0KLQlkZXZfZGJnKGNhcmQtPmRldiwgIkFTb0M6IEF1dG8gTkM6IERBUE1zOiBjYXJkOiVwXG4iLCAmY2FyZC0+ZGFwbSk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHcsICZjYXJkLT53aWRnZXRzLCBsaXN0KSB7Ci0JCXN3aXRjaCAody0+aWQpIHsKLQkJY2FzZSBzbmRfc29jX2RhcG1faW5wdXQ6Ci0JCWNhc2Ugc25kX3NvY19kYXBtX291dHB1dDoKLQkJY2FzZSBzbmRfc29jX2RhcG1fbWljYmlhczoKLQkJCWRldl9kYmcoY2FyZC0+ZGV2LCAiQVNvQzogQXV0byBOQzogQ2hlY2tpbmcgd2lkZ2V0ICVzXG4iLAotCQkJCXctPm5hbWUpOwotCQkJaWYgKCFzbmRfc29jX2RhcG1fd2lkZ2V0X2luX2NhcmRfcGF0aHMoY2FyZCwgdykpIHsKLQkJCQlkZXZfZGJnKGNhcmQtPmRldiwKLQkJCQkJIi4uLiBOb3QgaW4gbWFwOyBkaXNhYmxpbmdcbiIpOwotCQkJCXNuZF9zb2NfZGFwbV9uY19waW4ody0+ZGFwbSwgdy0+bmFtZSk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi0vKioKICAqIHNuZF9zb2NfZGFwbV9mcmVlIC0gZnJlZSBkYXBtIHJlc291cmNlcwogICogQGRhcG06IERBUE0gY29udGV4dAogICoKQEAgLTM5MDMsNyArMzgyMyw2IEBACiAgKi8KIHZvaWQgc25kX3NvY19kYXBtX2ZyZWUoc3RydWN0IHNuZF9zb2NfZGFwbV9jb250ZXh0ICpkYXBtKQogewotCXNuZF9zb2NfZGFwbV9zeXNfcmVtb3ZlKGRhcG0tPmRldik7CiAJZGFwbV9kZWJ1Z2ZzX2NsZWFudXAoZGFwbSk7CiAJZGFwbV9mcmVlX3dpZGdldHMoZGFwbSk7CiAJbGlzdF9kZWwoJmRhcG0tPmxpc3QpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1kZXZyZXMuYyBiL3NvdW5kL3NvYy9zb2MtZGV2cmVzLmMKaW5kZXggMDU3ZTVlZi4uYTU3OTIxZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NvYy1kZXZyZXMuYworKysgYi9zb3VuZC9zb2Mvc29jLWRldnJlcy5jCkBAIC02MCw3ICs2MCw3IEBACiAvKioKICAqIGRldm1fc25kX3NvY19yZWdpc3Rlcl9wbGF0Zm9ybSAtIHJlc291cmNlIG1hbmFnZWQgcGxhdGZvcm0gcmVnaXN0cmF0aW9uCiAgKiBAZGV2OiBEZXZpY2UgdXNlZCB0byBtYW5hZ2UgcGxhdGZvcm0KLSAqIEBwbGF0Zm9ybTogcGxhdGZvcm0gdG8gcmVnaXN0ZXIKKyAqIEBwbGF0Zm9ybV9kcnY6IHBsYXRmb3JtIHRvIHJlZ2lzdGVyCiAgKgogICogUmVnaXN0ZXIgYSBwbGF0Zm9ybSBkcml2ZXIgd2l0aCBhdXRvbWF0aWMgdW5yZWdpc3RyYXRpb24gd2hlbiB0aGUgZGV2aWNlIGlzCiAgKiB1bnJlZ2lzdGVyZWQuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWdlbmVyaWMtZG1hZW5naW5lLXBjbS5jIGIvc291bmQvc29jL3NvYy1nZW5lcmljLWRtYWVuZ2luZS1wY20uYwppbmRleCBiMzI5Yjg0Li40ODY0MzkyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWdlbmVyaWMtZG1hZW5naW5lLXBjbS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtZ2VuZXJpYy1kbWFlbmdpbmUtcGNtLmMKQEAgLTIwMCwxMSArMjAwLDYgQEAKIAlyZXR1cm4gc25kX2RtYWVuZ2luZV9wY21fb3BlbihzdWJzdHJlYW0sIGNoYW4pOwogfQogCi1zdGF0aWMgdm9pZCBkbWFlbmdpbmVfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKLXsKLQlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9mcmVlX2Zvcl9hbGwocGNtKTsKLX0KLQogc3RhdGljIHN0cnVjdCBkbWFfY2hhbiAqZG1hZW5naW5lX3BjbV9jb21wYXRfcmVxdWVzdF9jaGFubmVsKAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQsCiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0yODMsOCArMjc4LDcgQEAKIAkJaWYgKCFwY20tPmNoYW5baV0pIHsKIAkJCWRldl9lcnIocnRkLT5wbGF0Zm9ybS0+ZGV2LAogCQkJCSJNaXNzaW5nIGRtYSBjaGFubmVsIGZvciBzdHJlYW06ICVkXG4iLCBpKTsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGVycl9mcmVlOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAogCQlyZXQgPSBzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9wYWdlcyhzdWJzdHJlYW0sCkBAIC0yOTMsNyArMjg3LDcgQEAKIAkJCQlwcmVhbGxvY19idWZmZXJfc2l6ZSwKIAkJCQltYXhfYnVmZmVyX3NpemUpOwogCQlpZiAocmV0KQotCQkJZ290byBlcnJfZnJlZTsKKwkJCXJldHVybiByZXQ7CiAKIAkJLyoKIAkJICogVGhpcyB3aWxsIG9ubHkgcmV0dXJuIGZhbHNlIGlmIHdlIGtub3cgZm9yIHN1cmUgdGhhdCBhdCBsZWFzdApAQCAtMzA3LDEwICszMDEsNiBAQAogCX0KIAogCXJldHVybiAwOwotCi1lcnJfZnJlZToKLQlkbWFlbmdpbmVfcGNtX2ZyZWUocnRkLT5wY20pOwotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBkbWFlbmdpbmVfcGNtX3BvaW50ZXIoCkBAIC0zNDEsNyArMzMxLDYgQEAKIAl9LAogCS5vcHMJCT0gJmRtYWVuZ2luZV9wY21fb3BzLAogCS5wY21fbmV3CT0gZG1hZW5naW5lX3BjbV9uZXcsCi0JLnBjbV9mcmVlCT0gZG1hZW5naW5lX3BjbV9mcmVlLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkbWFlbmdpbmVfcGNtX2RtYV9jaGFubmVsX25hbWVzW10gPSB7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLXBjbS5jIGIvc291bmQvc29jL3NvYy1wY20uYwppbmRleCBlYjg3ZDk2ZTIuLjZiMDEzNmUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtcGNtLmMKKysrIGIvc291bmQvc29jL3NvYy1wY20uYwpAQCAtMzAxLDM0ICszMDEsMTggQEAKIAlyZXR1cm4gc3ltbWV0cnk7CiB9CiAKLS8qCi0gKiBMaXN0IG9mIHNhbXBsZSBzaXplcyB0aGF0IG1pZ2h0IGdvIG92ZXIgdGhlIGJ1cyBmb3IgcGFyYW1ldGVyCi0gKiBhcHBsaWNhdGlvbi4gIFRoZXJlIG91Z2h0IHRvIGJlIGEgd2lsZGNhcmQgc2FtcGxlIHNpemUgZm9yIHRoaW5ncwotICogbGlrZSB0aGUgREFDL0FEQyByZXNvbHV0aW9uIHRvIHVzZSBidXQgdGhlcmUgaXNuJ3QgcmlnaHQgbm93LgotICovCi1zdGF0aWMgaW50IHNhbXBsZV9zaXplc1tdID0gewotCTI0LCAzMiwKLX07Ci0KIHN0YXRpYyB2b2lkIHNvY19wY21fc2V0X21zYihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGJpdHMpCiB7CiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwotCWludCByZXQsIGk7CisJaW50IHJldDsKIAogCWlmICghYml0cykKIAkJcmV0dXJuOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2FtcGxlX3NpemVzKTsgaSsrKSB7Ci0JCWlmIChiaXRzID49IHNhbXBsZV9zaXplc1tpXSkKLQkJCWNvbnRpbnVlOwotCi0JCXJldCA9IHNuZF9wY21faHdfY29uc3RyYWludF9tc2JpdHMoc3Vic3RyZWFtLT5ydW50aW1lLCAwLAotCQkJCQkJICAgc2FtcGxlX3NpemVzW2ldLCBiaXRzKTsKLQkJaWYgKHJldCAhPSAwKQotCQkJZGV2X3dhcm4ocnRkLT5kZXYsCi0JCQkJICJBU29DOiBGYWlsZWQgdG8gc2V0IE1TQiAlZC8lZDogJWRcbiIsCi0JCQkJIGJpdHMsIHNhbXBsZV9zaXplc1tpXSwgcmV0KTsKLQl9CisJcmV0ID0gc25kX3BjbV9od19jb25zdHJhaW50X21zYml0cyhzdWJzdHJlYW0tPnJ1bnRpbWUsIDAsIDAsIGJpdHMpOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X3dhcm4ocnRkLT5kZXYsICJBU29DOiBGYWlsZWQgdG8gc2V0IE1TQiAlZDogJWRcbiIsCisJCQkJIGJpdHMsIHJldCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNvY19wY21fYXBwbHlfbXNiKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQpAQCAtNzQ2LDcgKzczMCw4IEBACiAJCQkJCQkJICAgICAgY29kZWNfZGFpKTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJZGV2X2Vycihjb2RlY19kYWktPmRldiwKLQkJCQkJIkFTb0M6IERBSSBwcmVwYXJlIGVycm9yOiAlZFxuIiwgcmV0KTsKKwkJCQkJIkFTb0M6IGNvZGVjIERBSSBwcmVwYXJlIGVycm9yOiAlZFxuIiwKKwkJCQkJcmV0KTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJfQpAQCAtNzU1LDggKzc0MCw4IEBACiAJaWYgKGNwdV9kYWktPmRyaXZlci0+b3BzICYmIGNwdV9kYWktPmRyaXZlci0+b3BzLT5wcmVwYXJlKSB7CiAJCXJldCA9IGNwdV9kYWktPmRyaXZlci0+b3BzLT5wcmVwYXJlKHN1YnN0cmVhbSwgY3B1X2RhaSk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKGNwdV9kYWktPmRldiwgIkFTb0M6IERBSSBwcmVwYXJlIGVycm9yOiAlZFxuIiwKLQkJCQlyZXQpOworCQkJZGV2X2VycihjcHVfZGFpLT5kZXYsCisJCQkJIkFTb0M6IGNwdSBEQUkgcHJlcGFyZSBlcnJvcjogJWRcbiIsIHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90ZWdyYS9LY29uZmlnIGIvc291bmQvc29jL3RlZ3JhL0tjb25maWcKaW5kZXggMzExOThjZjcuLmE2NzY4ZjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy90ZWdyYS9LY29uZmlnCisrKyBiL3NvdW5kL3NvYy90ZWdyYS9LY29uZmlnCkBAIC0xMjgsMyArMTI4LDEzIEBACiAJaGVscAogCSAgU2F5IFkgb3IgTSBoZXJlIGlmIHlvdSB3YW50IHRvIGFkZCBzdXBwb3J0IGZvciBTb0MgYXVkaW8gb24gVGVncmEKIAkgIGJvYXJkcyB1c2luZyB0aGUgTUFYOTgwOTAgY29kZWMsIHN1Y2ggYXMgVmVuaWNlMi4KKworY29uZmlnIFNORF9TT0NfVEVHUkFfUlQ1Njc3CisJdHJpc3RhdGUgIlNvQyBBdWRpbyBzdXBwb3J0IGZvciBUZWdyYSBib2FyZHMgdXNpbmcgYSBSVDU2NzcgY29kZWMiCisJZGVwZW5kcyBvbiBTTkRfU09DX1RFR1JBICYmIEkyQyAmJiBHUElPTElCCisJc2VsZWN0IFNORF9TT0NfVEVHUkEyMF9JMlMgaWYgQVJDSF9URUdSQV8yeF9TT0MKKwlzZWxlY3QgU05EX1NPQ19URUdSQTMwX0kyUyBpZiBBUkNIX1RFR1JBXzN4X1NPQworCXNlbGVjdCBTTkRfU09DX1JUNTY3NworCWhlbHAKKwkgIFNheSBZIG9yIE0gaGVyZSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgU29DIGF1ZGlvIG9uIFRlZ3JhCisJICBib2FyZHMgdXNpbmcgdGhlIFJUNTY3NyBjb2RlYywgc3VjaCBhcyBSeXUuCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvdGVncmEvTWFrZWZpbGUgYi9zb3VuZC9zb2MvdGVncmEvTWFrZWZpbGUKaW5kZXggNWFlNTg4Yy4uOTE3MTY1NSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3RlZ3JhL01ha2VmaWxlCisrKyBiL3NvdW5kL3NvYy90ZWdyYS9NYWtlZmlsZQpAQCAtMTksNiArMTksNyBAQAogCiAjIFRlZ3JhIG1hY2hpbmUgU3VwcG9ydAogc25kLXNvYy10ZWdyYS1ydDU2NDAtb2JqcyA6PSB0ZWdyYV9ydDU2NDAubworc25kLXNvYy10ZWdyYS1ydDU2Nzctb2JqcyA6PSB0ZWdyYV9ydDU2Nzcubwogc25kLXNvYy10ZWdyYS13bTg3NTMtb2JqcyA6PSB0ZWdyYV93bTg3NTMubwogc25kLXNvYy10ZWdyYS13bTg5MDMtb2JqcyA6PSB0ZWdyYV93bTg5MDMubwogc25kLXNvYy10ZWdyYS13bTk3MTItb2JqcyA6PSB0ZWdyYV93bTk3MTIubwpAQCAtMjcsNiArMjgsNyBAQAogc25kLXNvYy10ZWdyYS1tYXg5ODA5MC1vYmpzIDo9IHRlZ3JhX21heDk4MDkwLm8KIAogb2JqLSQoQ09ORklHX1NORF9TT0NfVEVHUkFfUlQ1NjQwKSArPSBzbmQtc29jLXRlZ3JhLXJ0NTY0MC5vCitvYmotJChDT05GSUdfU05EX1NPQ19URUdSQV9SVDU2NzcpICs9IHNuZC1zb2MtdGVncmEtcnQ1Njc3Lm8KIG9iai0kKENPTkZJR19TTkRfU09DX1RFR1JBX1dNODc1MykgKz0gc25kLXNvYy10ZWdyYS13bTg3NTMubwogb2JqLSQoQ09ORklHX1NORF9TT0NfVEVHUkFfV004OTAzKSArPSBzbmQtc29jLXRlZ3JhLXdtODkwMy5vCiBvYmotJChDT05GSUdfU05EX1NPQ19URUdSQV9XTTk3MTIpICs9IHNuZC1zb2MtdGVncmEtd205NzEyLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9ydDU2NzcuYyBiL3NvdW5kL3NvYy90ZWdyYS90ZWdyYV9ydDU2NzcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGNmOTc4Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvc29jL3RlZ3JhL3RlZ3JhX3J0NTY3Ny5jCkBAIC0wLDAgKzEsMzQ3IEBACisvKgorKiB0ZWdyYV9ydDU2NzcuYyAtIFRlZ3JhIG1hY2hpbmUgQVNvQyBkcml2ZXIgZm9yIGJvYXJkcyB1c2luZyBSVDU2NzcgY29kZWMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE0LCBUaGUgQ2hyb21pdW0gT1MgQXV0aG9ycy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqCisgKiBCYXNlZCBvbiBjb2RlIGNvcHlyaWdodC9ieToKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMiAtIE5WSURJQSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDExIFRoZSBBQzEwMCBLZXJuZWwgVGVhbSA8YWMxMDBAbGlzdHMubGF1Y2hwYWQubmV0PgorICogKGMpIDIwMDksIDIwMTAgTnZpZGlhIEdyYXBoaWNzIFB2dC4gTHRkLgorICogQ29weXJpZ2h0IDIwMDcgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9ncGlvLmg+CisKKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvamFjay5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2luY2x1ZGUgIi4uL2NvZGVjcy9ydDU2NzcuaCIKKworI2luY2x1ZGUgInRlZ3JhX2Fzb2NfdXRpbHMuaCIKKworI2RlZmluZSBEUlZfTkFNRSAidGVncmEtc25kLXJ0NTY3NyIKKworc3RydWN0IHRlZ3JhX3J0NTY3NyB7CisJc3RydWN0IHRlZ3JhX2Fzb2NfdXRpbHNfZGF0YSB1dGlsX2RhdGE7CisJaW50IGdwaW9faHBfZGV0OworCWludCBncGlvX2hwX2VuOworCWludCBncGlvX21pY19wcmVzZW50OworCWludCBncGlvX2RtaWNfY2xrX2VuOworfTsKKworc3RhdGljIGludCB0ZWdyYV9ydDU2NzdfYXNvY19od19wYXJhbXMoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkJCXN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNvZGVjX2RhaSA9IHJ0ZC0+Y29kZWNfZGFpOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBydGQtPmNhcmQ7CisJc3RydWN0IHRlZ3JhX3J0NTY3NyAqbWFjaGluZSA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKKwlpbnQgc3JhdGUsIG1jbGssIGVycjsKKworCXNyYXRlID0gcGFyYW1zX3JhdGUocGFyYW1zKTsKKwltY2xrID0gMjU2ICogc3JhdGU7CisKKwllcnIgPSB0ZWdyYV9hc29jX3V0aWxzX3NldF9yYXRlKCZtYWNoaW5lLT51dGlsX2RhdGEsIHNyYXRlLCBtY2xrKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKGNhcmQtPmRldiwgIkNhbid0IGNvbmZpZ3VyZSBjbG9ja3NcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHNuZF9zb2NfZGFpX3NldF9zeXNjbGsoY29kZWNfZGFpLCBSVDU2NzdfU0NMS19TX01DTEssIG1jbGssCisJCQkJCVNORF9TT0NfQ0xPQ0tfSU4pOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoY2FyZC0+ZGV2LCAiY29kZWNfZGFpIGNsb2NrIG5vdCBzZXRcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlZ3JhX3J0NTY3N19ldmVudF9ocChzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmssIGludCBldmVudCkKK3sKKwlzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0gPSB3LT5kYXBtOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSBkYXBtLT5jYXJkOworCXN0cnVjdCB0ZWdyYV9ydDU2NzcgKm1hY2hpbmUgPSBzbmRfc29jX2NhcmRfZ2V0X2RydmRhdGEoY2FyZCk7CisKKwlpZiAoIWdwaW9faXNfdmFsaWQobWFjaGluZS0+Z3Bpb19ocF9lbikpCisJCXJldHVybiAwOworCisJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAobWFjaGluZS0+Z3Bpb19ocF9lbiwKKwkJU05EX1NPQ19EQVBNX0VWRU5UX09OKGV2ZW50KSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbmRfc29jX29wcyB0ZWdyYV9ydDU2Nzdfb3BzID0geworCS5od19wYXJhbXMgPSB0ZWdyYV9ydDU2NzdfYXNvY19od19wYXJhbXMsCit9OworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFjayB0ZWdyYV9ydDU2NzdfaHBfamFjazsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfcGluIHRlZ3JhX3J0NTY3N19ocF9qYWNrX3BpbnMgPSB7CisJLnBpbiA9ICJIZWFkcGhvbmUiLAorCS5tYXNrID0gU05EX0pBQ0tfSEVBRFBIT05FLAorfTsKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19qYWNrX2dwaW8gdGVncmFfcnQ1Njc3X2hwX2phY2tfZ3BpbyA9IHsKKwkubmFtZSA9ICJIZWFkcGhvbmUgZGV0ZWN0aW9uIiwKKwkucmVwb3J0ID0gU05EX0pBQ0tfSEVBRFBIT05FLAorCS5kZWJvdW5jZV90aW1lID0gMTUwLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2sgdGVncmFfcnQ1Njc3X21pY19qYWNrOworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfamFja19waW4gdGVncmFfcnQ1Njc3X21pY19qYWNrX3BpbnMgPSB7CisJLnBpbiA9ICJIZWFkc2V0IE1pYyIsCisJLm1hc2sgPSBTTkRfSkFDS19NSUNST1BIT05FLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2phY2tfZ3BpbyB0ZWdyYV9ydDU2NzdfbWljX2phY2tfZ3BpbyA9IHsKKwkubmFtZSA9ICJIZWFkc2V0IE1pYyBkZXRlY3Rpb24iLAorCS5yZXBvcnQgPSBTTkRfSkFDS19NSUNST1BIT05FLAorCS5kZWJvdW5jZV90aW1lID0gMTUwLAorCS5pbnZlcnQgPSAxCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgdGVncmFfcnQ1Njc3X2RhcG1fd2lkZ2V0c1tdID0geworCVNORF9TT0NfREFQTV9TUEsoIlNwZWFrZXIiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fSFAoIkhlYWRwaG9uZSIsIHRlZ3JhX3J0NTY3N19ldmVudF9ocCksCisJU05EX1NPQ19EQVBNX01JQygiSGVhZHNldCBNaWMiLCBOVUxMKSwKKwlTTkRfU09DX0RBUE1fTUlDKCJJbnRlcm5hbCBNaWMgMSIsIE5VTEwpLAorCVNORF9TT0NfREFQTV9NSUMoIkludGVybmFsIE1pYyAyIiwgTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdGVncmFfcnQ1Njc3X2NvbnRyb2xzW10gPSB7CisJU09DX0RBUE1fUElOX1NXSVRDSCgiU3BlYWtlciIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhlYWRwaG9uZSIpLAorCVNPQ19EQVBNX1BJTl9TV0lUQ0goIkhlYWRzZXQgTWljIiksCisJU09DX0RBUE1fUElOX1NXSVRDSCgiSW50ZXJuYWwgTWljIDEiKSwKKwlTT0NfREFQTV9QSU5fU1dJVENIKCJJbnRlcm5hbCBNaWMgMiIpLAorfTsKKworc3RhdGljIGludCB0ZWdyYV9ydDU2NzdfYXNvY19pbml0KHN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQpCit7CisJc3RydWN0IHNuZF9zb2NfZGFpICpjb2RlY19kYWkgPSBydGQtPmNvZGVjX2RhaTsKKwlzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMgPSBjb2RlY19kYWktPmNvZGVjOworCXN0cnVjdCBzbmRfc29jX2RhcG1fY29udGV4dCAqZGFwbSA9ICZjb2RlYy0+ZGFwbTsKKwlzdHJ1Y3QgdGVncmFfcnQ1Njc3ICptYWNoaW5lID0gc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKHJ0ZC0+Y2FyZCk7CisKKwlzbmRfc29jX2phY2tfbmV3KGNvZGVjLCAiSGVhZHBob25lIEphY2siLCBTTkRfSkFDS19IRUFEUEhPTkUsCisJCQkmdGVncmFfcnQ1Njc3X2hwX2phY2spOworCXNuZF9zb2NfamFja19hZGRfcGlucygmdGVncmFfcnQ1Njc3X2hwX2phY2ssIDEsCisJCQkmdGVncmFfcnQ1Njc3X2hwX2phY2tfcGlucyk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChtYWNoaW5lLT5ncGlvX2hwX2RldCkpIHsKKwkJdGVncmFfcnQ1Njc3X2hwX2phY2tfZ3Bpby5ncGlvID0gbWFjaGluZS0+Z3Bpb19ocF9kZXQ7CisJCXNuZF9zb2NfamFja19hZGRfZ3Bpb3MoJnRlZ3JhX3J0NTY3N19ocF9qYWNrLCAxLAorCQkJCSZ0ZWdyYV9ydDU2NzdfaHBfamFja19ncGlvKTsKKwl9CisKKworCXNuZF9zb2NfamFja19uZXcoY29kZWMsICJNaWMgSmFjayIsIFNORF9KQUNLX01JQ1JPUEhPTkUsCisJCQkmdGVncmFfcnQ1Njc3X21pY19qYWNrKTsKKwlzbmRfc29jX2phY2tfYWRkX3BpbnMoJnRlZ3JhX3J0NTY3N19taWNfamFjaywgMSwKKwkJCSZ0ZWdyYV9ydDU2NzdfbWljX2phY2tfcGlucyk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChtYWNoaW5lLT5ncGlvX21pY19wcmVzZW50KSkgeworCQl0ZWdyYV9ydDU2NzdfbWljX2phY2tfZ3Bpby5ncGlvID0gbWFjaGluZS0+Z3Bpb19taWNfcHJlc2VudDsKKwkJc25kX3NvY19qYWNrX2FkZF9ncGlvcygmdGVncmFfcnQ1Njc3X21pY19qYWNrLCAxLAorCQkJCSZ0ZWdyYV9ydDU2NzdfbWljX2phY2tfZ3Bpbyk7CisJfQorCisJc25kX3NvY19kYXBtX2ZvcmNlX2VuYWJsZV9waW4oZGFwbSwgIk1JQ0JJQVMxIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZWdyYV9ydDU2NzdfY2FyZF9yZW1vdmUoc3RydWN0IHNuZF9zb2NfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgdGVncmFfcnQ1Njc3ICptYWNoaW5lID0gc25kX3NvY19jYXJkX2dldF9kcnZkYXRhKGNhcmQpOworCisJaWYgKGdwaW9faXNfdmFsaWQobWFjaGluZS0+Z3Bpb19ocF9kZXQpKSB7CisJCXNuZF9zb2NfamFja19mcmVlX2dwaW9zKCZ0ZWdyYV9ydDU2NzdfaHBfamFjaywgMSwKKwkJCQkmdGVncmFfcnQ1Njc3X2hwX2phY2tfZ3Bpbyk7CisJfQorCisJaWYgKGdwaW9faXNfdmFsaWQobWFjaGluZS0+Z3Bpb19taWNfcHJlc2VudCkpIHsKKwkJc25kX3NvY19qYWNrX2ZyZWVfZ3Bpb3MoJnRlZ3JhX3J0NTY3N19taWNfamFjaywgMSwKKwkJCQkmdGVncmFfcnQ1Njc3X21pY19qYWNrX2dwaW8pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgdGVncmFfcnQ1Njc3X2RhaSA9IHsKKwkubmFtZSA9ICJSVDU2NzciLAorCS5zdHJlYW1fbmFtZSA9ICJSVDU2NzcgUENNIiwKKwkuY29kZWNfZGFpX25hbWUgPSAicnQ1Njc3LWFpZjEiLAorCS5pbml0ID0gdGVncmFfcnQ1Njc3X2Fzb2NfaW5pdCwKKwkub3BzID0gJnRlZ3JhX3J0NTY3N19vcHMsCisJLmRhaV9mbXQgPSBTTkRfU09DX0RBSUZNVF9JMlMgfCBTTkRfU09DX0RBSUZNVF9OQl9ORiB8CisJCQlTTkRfU09DX0RBSUZNVF9DQlNfQ0ZTLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2NhcmQgc25kX3NvY190ZWdyYV9ydDU2NzcgPSB7CisJLm5hbWUgPSAidGVncmEtcnQ1Njc3IiwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkucmVtb3ZlID0gdGVncmFfcnQ1Njc3X2NhcmRfcmVtb3ZlLAorCS5kYWlfbGluayA9ICZ0ZWdyYV9ydDU2NzdfZGFpLAorCS5udW1fbGlua3MgPSAxLAorCS5jb250cm9scyA9IHRlZ3JhX3J0NTY3N19jb250cm9scywKKwkubnVtX2NvbnRyb2xzID0gQVJSQVlfU0laRSh0ZWdyYV9ydDU2NzdfY29udHJvbHMpLAorCS5kYXBtX3dpZGdldHMgPSB0ZWdyYV9ydDU2NzdfZGFwbV93aWRnZXRzLAorCS5udW1fZGFwbV93aWRnZXRzID0gQVJSQVlfU0laRSh0ZWdyYV9ydDU2NzdfZGFwbV93aWRnZXRzKSwKKwkuZnVsbHlfcm91dGVkID0gdHJ1ZSwKK307CisKK3N0YXRpYyBpbnQgdGVncmFfcnQ1Njc3X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBkZXYtPmRldi5vZl9ub2RlOworCXN0cnVjdCBzbmRfc29jX2NhcmQgKmNhcmQgPSAmc25kX3NvY190ZWdyYV9ydDU2Nzc7CisJc3RydWN0IHRlZ3JhX3J0NTY3NyAqbWFjaGluZTsKKwlpbnQgcmV0OworCisJbWFjaGluZSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LAorCQkJc2l6ZW9mKHN0cnVjdCB0ZWdyYV9ydDU2NzcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1hY2hpbmUpCisJCXJldHVybiAtRU5PTUVNOworCisJY2FyZC0+ZGV2ID0gJnBkZXYtPmRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBjYXJkKTsKKwlzbmRfc29jX2NhcmRfc2V0X2RydmRhdGEoY2FyZCwgbWFjaGluZSk7CisKKwltYWNoaW5lLT5ncGlvX2hwX2RldCA9IG9mX2dldF9uYW1lZF9ncGlvKG5wLCAibnZpZGlhLGhwLWRldC1ncGlvcyIsIDApOworCWlmIChtYWNoaW5lLT5ncGlvX2hwX2RldCA9PSAtRVBST0JFX0RFRkVSKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKworCW1hY2hpbmUtPmdwaW9fbWljX3ByZXNlbnQgPSBvZl9nZXRfbmFtZWRfZ3BpbyhucCwKKwkJCSJudmlkaWEsbWljLXByZXNlbnQtZ3Bpb3MiLCAwKTsKKwlpZiAobWFjaGluZS0+Z3Bpb19taWNfcHJlc2VudCA9PSAtRVBST0JFX0RFRkVSKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKworCW1hY2hpbmUtPmdwaW9faHBfZW4gPSBvZl9nZXRfbmFtZWRfZ3BpbyhucCwgIm52aWRpYSxocC1lbi1ncGlvcyIsIDApOworCWlmIChtYWNoaW5lLT5ncGlvX2hwX2VuID09IC1FUFJPQkVfREVGRVIpCisJCXJldHVybiAtRVBST0JFX0RFRkVSOworCWlmIChncGlvX2lzX3ZhbGlkKG1hY2hpbmUtPmdwaW9faHBfZW4pKSB7CisJCXJldCA9IGRldm1fZ3Bpb19yZXF1ZXN0X29uZSgmcGRldi0+ZGV2LCBtYWNoaW5lLT5ncGlvX2hwX2VuLAorCQkJCUdQSU9GX09VVF9JTklUX0xPVywgImhwX2VuIik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoY2FyZC0+ZGV2LCAiY2Fubm90IGdldCBocF9lbiBncGlvXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwltYWNoaW5lLT5ncGlvX2RtaWNfY2xrX2VuID0gb2ZfZ2V0X25hbWVkX2dwaW8obnAsCisJCSJudmlkaWEsZG1pYy1jbGstZW4tZ3Bpb3MiLCAwKTsKKwlpZiAobWFjaGluZS0+Z3Bpb19kbWljX2Nsa19lbiA9PSAtRVBST0JFX0RFRkVSKQorCQlyZXR1cm4gLUVQUk9CRV9ERUZFUjsKKwlpZiAoZ3Bpb19pc192YWxpZChtYWNoaW5lLT5ncGlvX2RtaWNfY2xrX2VuKSkgeworCQlyZXQgPSBkZXZtX2dwaW9fcmVxdWVzdF9vbmUoJnBkZXYtPmRldiwKKwkJCQltYWNoaW5lLT5ncGlvX2RtaWNfY2xrX2VuLAorCQkJCUdQSU9GX09VVF9JTklUX0hJR0gsICJkbWljX2Nsa19lbiIpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGNhcmQtPmRldiwgImNhbm5vdCBnZXQgZG1pY19jbGtfZW4gZ3Bpb1xuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0ID0gc25kX3NvY19vZl9wYXJzZV9jYXJkX25hbWUoY2FyZCwgIm52aWRpYSxtb2RlbCIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gc25kX3NvY19vZl9wYXJzZV9hdWRpb19yb3V0aW5nKGNhcmQsICJudmlkaWEsYXVkaW8tcm91dGluZyIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJdGVncmFfcnQ1Njc3X2RhaS5jb2RlY19vZl9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShucCwKKwkJCSJudmlkaWEsYXVkaW8tY29kZWMiLCAwKTsKKwlpZiAoIXRlZ3JhX3J0NTY3N19kYWkuY29kZWNfb2Zfbm9kZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkiUHJvcGVydHkgJ252aWRpYSxhdWRpby1jb2RlYycgbWlzc2luZyBvciBpbnZhbGlkXG4iKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CisJfQorCisJdGVncmFfcnQ1Njc3X2RhaS5jcHVfb2Zfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsCisJCQkibnZpZGlhLGkycy1jb250cm9sbGVyIiwgMCk7CisJaWYgKCF0ZWdyYV9ydDU2NzdfZGFpLmNwdV9vZl9ub2RlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJQcm9wZXJ0eSAnbnZpZGlhLGkycy1jb250cm9sbGVyJyBtaXNzaW5nIG9yIGludmFsaWRcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycjsKKwl9CisJdGVncmFfcnQ1Njc3X2RhaS5wbGF0Zm9ybV9vZl9ub2RlID0gdGVncmFfcnQ1Njc3X2RhaS5jcHVfb2Zfbm9kZTsKKworCXJldCA9IHRlZ3JhX2Fzb2NfdXRpbHNfaW5pdCgmbWFjaGluZS0+dXRpbF9kYXRhLCAmcGRldi0+ZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfY2FyZChjYXJkKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInNuZF9zb2NfcmVnaXN0ZXJfY2FyZCBmYWlsZWQgKCVkKVxuIiwKKwkJCXJldCk7CisJCWdvdG8gZXJyX2ZpbmlfdXRpbHM7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9maW5pX3V0aWxzOgorCXRlZ3JhX2Fzb2NfdXRpbHNfZmluaSgmbWFjaGluZS0+dXRpbF9kYXRhKTsKK2VycjoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHRlZ3JhX3J0NTY3N19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgc25kX3NvY19jYXJkICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHRlZ3JhX3J0NTY3NyAqbWFjaGluZSA9IHNuZF9zb2NfY2FyZF9nZXRfZHJ2ZGF0YShjYXJkKTsKKworCXNuZF9zb2NfdW5yZWdpc3Rlcl9jYXJkKGNhcmQpOworCisJdGVncmFfYXNvY191dGlsc19maW5pKCZtYWNoaW5lLT51dGlsX2RhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHRlZ3JhX3J0NTY3N19vZl9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAibnZpZGlhLHRlZ3JhLWF1ZGlvLXJ0NTY3NyIsIH0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0ZWdyYV9ydDU2NzdfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gRFJWX05BTUUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCQkucG0gPSAmc25kX3NvY19wbV9vcHMsCisJCS5vZl9tYXRjaF90YWJsZSA9IHRlZ3JhX3J0NTY3N19vZl9tYXRjaCwKKwl9LAorCS5wcm9iZSA9IHRlZ3JhX3J0NTY3N19wcm9iZSwKKwkucmVtb3ZlID0gdGVncmFfcnQ1Njc3X3JlbW92ZSwKK307Cittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKHRlZ3JhX3J0NTY3N19kcml2ZXIpOworCitNT0RVTEVfQVVUSE9SKCJBbmF0b2wgUG9tb3pvdiA8YW5hdG9sQGdvb2dsZS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRlZ3JhK1JUNTY3NyBtYWNoaW5lIEFTb0MgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOiIgRFJWX05BTUUpOworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdGVncmFfcnQ1Njc3X29mX21hdGNoKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90eHg5L3R4eDlhY2xjLmMgYi9zb3VuZC9zb2MvdHh4OS90eHg5YWNsYy5jCmluZGV4IDA3MGU0NGUuLjg4ZWFjZmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy90eHg5L3R4eDlhY2xjLmMKKysrIGIvc291bmQvc29jL3R4eDkvdHh4OWFjbGMuYwpAQCAtMjgyLDExICsyODIsNiBAQAogCS5wb2ludGVyCT0gdHh4OWFjbGNfcGNtX3BvaW50ZXIsCiB9OwogCi1zdGF0aWMgdm9pZCB0eHg5YWNsY19wY21fZnJlZV9kbWFfYnVmZmVycyhzdHJ1Y3Qgc25kX3BjbSAqcGNtKQotewotCXNuZF9wY21fbGliX3ByZWFsbG9jYXRlX2ZyZWVfZm9yX2FsbChwY20pOwotfQotCiBzdGF0aWMgaW50IHR4eDlhY2xjX3BjbV9uZXcoc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCkKIHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQgPSBydGQtPmNhcmQtPnNuZF9jYXJkOwpAQCAtNDEyLDcgKzQwNyw2IEBACiAJLnJlbW92ZQkJPSB0eHg5YWNsY19wY21fcmVtb3ZlLAogCS5vcHMJCT0gJnR4eDlhY2xjX3BjbV9vcHMsCiAJLnBjbV9uZXcJPSB0eHg5YWNsY19wY21fbmV3LAotCS5wY21fZnJlZQk9IHR4eDlhY2xjX3BjbV9mcmVlX2RtYV9idWZmZXJzLAogfTsKIAogc3RhdGljIGludCB0eHg5YWNsY19zb2NfcGxhdGZvcm1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy91eDUwMC9tb3A1MDBfYWI4NTAwLmMgYi9zb3VuZC9zb2MvdXg1MDAvbW9wNTAwX2FiODUwMC5jCmluZGV4IGJlNGYxYWM3Li5hYTY1MzcwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvdXg1MDAvbW9wNTAwX2FiODUwMC5jCisrKyBiL3NvdW5kL3NvYy91eDUwMC9tb3A1MDBfYWI4NTAwLmMKQEAgLTI5MCwyMSArMjkwLDkgQEAKIAkJCVNORF9TT0NfREFJRk1UX0dBVEVEOwogCX0KIAotCXJldCA9IHNuZF9zb2NfZGFpX3NldF9mbXQoY29kZWNfZGFpLCBmbXQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LAotCQkJIiVzOiBFUlJPUjogc25kX3NvY19kYWlfc2V0X2ZtdCBmYWlsZWQgZm9yIGNvZGVjX2RhaSAocmV0ID0gJWQpIVxuIiwKLQkJCV9fZnVuY19fLCByZXQpOworCXJldCA9IHNuZF9zb2NfcnVudGltZV9zZXRfZGFpX2ZtdChydGQsIGZtdCk7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKLQl9Ci0KLQlyZXQgPSBzbmRfc29jX2RhaV9zZXRfZm10KGNwdV9kYWksIGZtdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihkZXYsCi0JCQkiJXM6IEVSUk9SOiBzbmRfc29jX2RhaV9zZXRfZm10IGZhaWxlZCBmb3IgY3B1X2RhaSAocmV0ID0gJWQpIVxuIiwKLQkJCV9fZnVuY19fLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KIAogCS8qIFNldHVwIFRETS1zbG90cyAqLwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MveHRlbnNhL0tjb25maWcgYi9zb3VuZC9zb2MveHRlbnNhL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwMWJlYgotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy94dGVuc2EvS2NvbmZpZwpAQCAtMCwwICsxLDcgQEAKK2NvbmZpZyBTTkRfU09DX1hURlBHQV9JMlMKKwl0cmlzdGF0ZSAiWFRGUEdBIEkyUyBtYXN0ZXIiCisJc2VsZWN0IFJFR01BUF9NTUlPCisJaGVscAorCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBhZGQgc3VwcG9ydCBmb3IgY29kZWNzIGF0dGFjaGVkIHRvIHRoZQorCSAgSTJTIGludGVyZmFjZSBvbiBYVEZQR0EgZGF1Z2h0ZXIgYm9hcmQuIFlvdSB3aWxsIGFsc28gbmVlZCB0byBzZWxlY3QKKwkgIHRoZSBkcml2ZXJzIGZvciB0aGUgcmVzdCBvZiBYVEZQR0EgYXVkaW8gc3Vic3lzdGVtLgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3h0ZW5zYS9NYWtlZmlsZSBiL3NvdW5kL3NvYy94dGVuc2EvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVlZmJmOQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy94dGVuc2EvTWFrZWZpbGUKQEAgLTAsMCArMSwzIEBACitzbmQtc29jLXh0ZnBnYS1pMnMtb2JqcyA6PSB4dGZwZ2EtaTJzLm8KKworb2JqLSQoQ09ORklHX1NORF9TT0NfWFRGUEdBX0kyUykgKz0gc25kLXNvYy14dGZwZ2EtaTJzLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy94dGVuc2EveHRmcGdhLWkycy5jIGIvc291bmQvc29jL3h0ZW5zYS94dGZwZ2EtaTJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmYjE5ZQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3NvYy94dGVuc2EveHRmcGdhLWkycy5jCkBAIC0wLDAgKzEsNjc1IEBACisvKgorICogWHRmcGdhIEkyUyBjb250cm9sbGVyIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxNCBDYWRlbmNlIERlc2lnbiBTeXN0ZW1zIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKyNpbmNsdWRlIDxzb3VuZC9zb2MuaD4KKworI2RlZmluZSBEUlZfTkFNRQkieHRmcGdhLWkycyIKKworI2RlZmluZSBYVEZQR0FfSTJTX1ZFUlNJT04JMHgwMAorI2RlZmluZSBYVEZQR0FfSTJTX0NPTkZJRwkweDA0CisjZGVmaW5lIFhURlBHQV9JMlNfSU5UX01BU0sJMHgwOAorI2RlZmluZSBYVEZQR0FfSTJTX0lOVF9TVEFUVVMJMHgwYworI2RlZmluZSBYVEZQR0FfSTJTX0NIQU4wX0RBVEEJMHgxMAorI2RlZmluZSBYVEZQR0FfSTJTX0NIQU4xX0RBVEEJMHgxNAorI2RlZmluZSBYVEZQR0FfSTJTX0NIQU4yX0RBVEEJMHgxOAorI2RlZmluZSBYVEZQR0FfSTJTX0NIQU4zX0RBVEEJMHgxYworCisjZGVmaW5lIFhURlBHQV9JMlNfQ09ORklHX1RYX0VOQUJMRQkweDEKKyNkZWZpbmUgWFRGUEdBX0kyU19DT05GSUdfSU5UX0VOQUJMRQkweDIKKyNkZWZpbmUgWFRGUEdBX0kyU19DT05GSUdfTEVGVAkJMHg0CisjZGVmaW5lIFhURlBHQV9JMlNfQ09ORklHX1JBVElPX0JBU0UJOAorI2RlZmluZSBYVEZQR0FfSTJTX0NPTkZJR19SQVRJT19NQVNLCTB4MDAwMGZmMDAKKyNkZWZpbmUgWFRGUEdBX0kyU19DT05GSUdfUkVTX0JBU0UJMTYKKyNkZWZpbmUgWFRGUEdBX0kyU19DT05GSUdfUkVTX01BU0sJMHgwMDNmMDAwMAorI2RlZmluZSBYVEZQR0FfSTJTX0NPTkZJR19MRVZFTF9CQVNFCTI0CisjZGVmaW5lIFhURlBHQV9JMlNfQ09ORklHX0xFVkVMX01BU0sJMHgwZjAwMDAwMAorI2RlZmluZSBYVEZQR0FfSTJTX0NPTkZJR19DSEFOTkVMX0JBU0UJMjgKKworI2RlZmluZSBYVEZQR0FfSTJTX0lOVF9VTkRFUlJVTgkJMHgxCisjZGVmaW5lIFhURlBHQV9JMlNfSU5UX0xFVkVMCQkweDIKKyNkZWZpbmUgWFRGUEdBX0kyU19JTlRfVkFMSUQJCTB4MworCisjZGVmaW5lIFhURlBHQV9JMlNfRklGT19TSVpFCQk4MTkyCisKKy8qCisgKiBJMlMgY29udHJvbGxlciBvcGVyYXRpb246CisgKgorICogRW5hYmxpbmcgVFg6IG91dHB1dCAxIHBlcmlvZCBvZiB6ZXJvcyAoc3RhcnRpbmcgd2l0aCBsZWZ0IGNoYW5uZWwpCisgKiBhbmQgdGhlbiBxdWV1ZWQgZGF0YS4KKyAqCisgKiBMZXZlbCBzdGF0dXMgYW5kIGludGVycnVwdDogd2hlbmV2ZXIgRklGTyBsZXZlbCBpcyBiZWxvdyBGSUZPIHRyaWdnZXIsCisgKiBsZXZlbCBzdGF0dXMgaXMgMSBhbmQgYW4gSVJRIGlzIGFzc2VydGVkIChpZiBlbmFibGVkKS4KKyAqCisgKiBVbmRlcnJ1biBzdGF0dXMgYW5kIGludGVycnVwdDogd2hlbmV2ZXIgRklGTyBpcyBlbXB0eSwgdW5kZXJydW4gc3RhdHVzCisgKiBpcyAxIGFuZCBhbiBJUlEgaXMgYXNzZXJ0ZWQgKGlmIGVuYWJsZWQpLgorICovCitzdHJ1Y3QgeHRmcGdhX2kycyB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXN0cnVjdCBjbGsgKmNsazsKKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCisJLyogY3VycmVudCBwbGF5YmFjayBzdWJzdHJlYW0uIE5VTEwgaWYgbm90IHBsYXlpbmcuCisJICoKKwkgKiBBY2Nlc3MgdG8gdGhhdCBmaWVsZCBpcyBzeW5jaHJvbml6ZWQgYmV0d2VlbiB0aGUgaW50ZXJydXB0IGhhbmRsZXIKKwkgKiBhbmQgdXNlcnNwYWNlIHRocm91Z2ggUkNVLgorCSAqCisJICogSW50ZXJydXB0IGhhbmRsZXIgKHRocmVhZGVkIHBhcnQpIGRvZXMgUElPIG9uIHN1YnN0cmVhbSBkYXRhIGluIFJDVQorCSAqIHJlYWQtc2lkZSBjcml0aWNhbCBzZWN0aW9uLiBUcmlnZ2VyIGNhbGxiYWNrIHNldHMgYW5kIGNsZWFycyB0aGUKKwkgKiBwb2ludGVyIHdoZW4gdGhlIHBsYXliYWNrIGlzIHN0YXJ0ZWQgYW5kIHN0b3BwZWQgd2l0aAorCSAqIHJjdV9hc3NpZ25fcG9pbnRlci4gV2hlbiB1c2Vyc3BhY2UgaXMgYWJvdXQgdG8gZnJlZSB0aGUgcGxheWJhY2sKKwkgKiBzdHJlYW0gaW4gdGhlIHBjbV9jbG9zZSBjYWxsYmFjayBpdCBzeW5jaHJvbml6ZXMgd2l0aCB0aGUgaW50ZXJydXB0CisJICogaGFuZGxlciBieSBtZWFucyBvZiBzeW5jaHJvbml6ZV9yY3UgY2FsbC4KKwkgKi8KKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnR4X3N1YnN0cmVhbTsKKwl1bnNpZ25lZCAoKnR4X2ZuKShzdHJ1Y3QgeHRmcGdhX2kycyAqaTJzLAorCQkJICBzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lLAorCQkJICB1bnNpZ25lZCB0eF9wdHIpOworCXVuc2lnbmVkIHR4X3B0cjsgLyogbmV4dCBmcmFtZSBpbmRleCBpbiB0aGUgc2FtcGxlIGJ1ZmZlciAqLworCisJLyogY3VycmVudCBmaWZvIGxldmVsIGVzdGltYXRlLgorCSAqIERvZXNuJ3QgaGF2ZSB0byBiZSBwZXJmZWN0bHkgYWNjdXJhdGUsIGJ1dCBtdXN0IGJlIG5vdCBsZXNzIHRoYW4KKwkgKiB0aGUgYWN0dWFsIEZJRk8gbGV2ZWwgaW4gb3JkZXIgdG8gYXZvaWQgc3RhbGwgb24gcHVzaCBhdHRlbXB0LgorCSAqLworCXVuc2lnbmVkIHR4X2ZpZm9fbGV2ZWw7CisKKwkvKiBGSUZPIGxldmVsIGF0IHdoaWNoIGxldmVsIGludGVycnVwdCBvY2N1cnMgKi8KKwl1bnNpZ25lZCB0eF9maWZvX2xvdzsKKworCS8qIG1heGltYWwgRklGTyBsZXZlbCAqLworCXVuc2lnbmVkIHR4X2ZpZm9faGlnaDsKK307CisKK3N0YXRpYyBib29sIHh0ZnBnYV9pMnNfd3JfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZykKK3sKKwlyZXR1cm4gcmVnID49IFhURlBHQV9JMlNfQ09ORklHOworfQorCitzdGF0aWMgYm9vbCB4dGZwZ2FfaTJzX3JkX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCit7CisJcmV0dXJuIHJlZyA8IFhURlBHQV9JMlNfQ0hBTjBfREFUQTsKK30KKworc3RhdGljIGJvb2wgeHRmcGdhX2kyc192b2xhdGlsZV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiByZWcgPT0gWFRGUEdBX0kyU19JTlRfU1RBVFVTOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgeHRmcGdhX2kyc19yZWdtYXBfY29uZmlnID0geworCS5yZWdfYml0cyA9IDMyLAorCS5yZWdfc3RyaWRlID0gNCwKKwkudmFsX2JpdHMgPSAzMiwKKwkubWF4X3JlZ2lzdGVyID0gWFRGUEdBX0kyU19DSEFOM19EQVRBLAorCS53cml0ZWFibGVfcmVnID0geHRmcGdhX2kyc193cl9yZWcsCisJLnJlYWRhYmxlX3JlZyA9IHh0ZnBnYV9pMnNfcmRfcmVnLAorCS52b2xhdGlsZV9yZWcgPSB4dGZwZ2FfaTJzX3ZvbGF0aWxlX3JlZywKKwkuY2FjaGVfdHlwZSA9IFJFR0NBQ0hFX0ZMQVQsCit9OworCisvKiBHZW5lcmF0ZSBmdW5jdGlvbnMgdGhhdCBkbyBQSU8gZnJvbSBUWCBETUEgYXJlYSB0byBGSUZPIGZvciBhbGwgc3VwcG9ydGVkCisgKiBzdHJlYW0gZm9ybWF0cy4KKyAqIEZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCB4dGZwZ2FfcGNtX3R4XzxjaGFubmVscz54PHNhbXBsZSBiaXRzPiwgZS5nLgorICogeHRmcGdhX3BjbV90eF8yeDE2IGZvciAxNi1iaXQgc3RlcmVvLgorICoKKyAqIEZJRk8gY29uc2lzdHMgb2YgMzItYml0IHdvcmRzLCBvbmUgd29yZCBwZXIgY2hhbm5lbCwgYWx3YXlzIDIgY2hhbm5lbHMuCisgKiBJZiBJMlMgaW50ZXJmYWNlIGlzIGNvbmZpZ3VyZWQgd2l0aCBzbWFsbGVyIHNhbXBsZSByZXNvbHV0aW9uLCBvbmx5CisgKiB0aGUgTFNCIG9mIGVhY2ggd29yZCBpcyB1c2VkLgorICovCisjZGVmaW5lIHh0ZnBnYV9wY21fdHhfZm4oY2hhbm5lbHMsIHNhbXBsZV9iaXRzKSBcCitzdGF0aWMgdW5zaWduZWQgeHRmcGdhX3BjbV90eF8jI2NoYW5uZWxzIyN4IyNzYW1wbGVfYml0cyggXAorCXN0cnVjdCB4dGZwZ2FfaTJzICppMnMsIHN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUsIFwKKwl1bnNpZ25lZCB0eF9wdHIpIFwKK3sgXAorCWNvbnN0IHUjI3NhbXBsZV9iaXRzICgqcClbY2hhbm5lbHNdID0gXAorCQkodm9pZCAqKXJ1bnRpbWUtPmRtYV9hcmVhOyBcCitcCisJZm9yICg7IGkycy0+dHhfZmlmb19sZXZlbCA8IGkycy0+dHhfZmlmb19oaWdoOyBcCisJICAgICBpMnMtPnR4X2ZpZm9fbGV2ZWwgKz0gMikgeyBcCisJCWlvd3JpdGUzMihwW3R4X3B0cl1bMF0sIFwKKwkJCSAgaTJzLT5yZWdzICsgWFRGUEdBX0kyU19DSEFOMF9EQVRBKTsgXAorCQlpb3dyaXRlMzIocFt0eF9wdHJdW2NoYW5uZWxzIC0gMV0sIFwKKwkJCSAgaTJzLT5yZWdzICsgWFRGUEdBX0kyU19DSEFOMF9EQVRBKTsgXAorCQlpZiAoKyt0eF9wdHIgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpIFwKKwkJCXR4X3B0ciA9IDA7IFwKKwl9IFwKKwlyZXR1cm4gdHhfcHRyOyBcCit9CisKK3h0ZnBnYV9wY21fdHhfZm4oMSwgMTYpCit4dGZwZ2FfcGNtX3R4X2ZuKDIsIDE2KQoreHRmcGdhX3BjbV90eF9mbigxLCAzMikKK3h0ZnBnYV9wY21fdHhfZm4oMiwgMzIpCisKKyN1bmRlZiB4dGZwZ2FfcGNtX3R4X2ZuCisKK3N0YXRpYyBib29sIHh0ZnBnYV9wY21fcHVzaF90eChzdHJ1Y3QgeHRmcGdhX2kycyAqaTJzKQoreworCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqdHhfc3Vic3RyZWFtOworCWJvb2wgdHhfYWN0aXZlOworCisJcmN1X3JlYWRfbG9jaygpOworCXR4X3N1YnN0cmVhbSA9IHJjdV9kZXJlZmVyZW5jZShpMnMtPnR4X3N1YnN0cmVhbSk7CisJdHhfYWN0aXZlID0gdHhfc3Vic3RyZWFtICYmIHNuZF9wY21fcnVubmluZyh0eF9zdWJzdHJlYW0pOworCWlmICh0eF9hY3RpdmUpIHsKKwkJdW5zaWduZWQgdHhfcHRyID0gQUNDRVNTX09OQ0UoaTJzLT50eF9wdHIpOworCQl1bnNpZ25lZCBuZXdfdHhfcHRyID0gaTJzLT50eF9mbihpMnMsIHR4X3N1YnN0cmVhbS0+cnVudGltZSwKKwkJCQkJCSB0eF9wdHIpOworCisJCWNtcHhjaGcoJmkycy0+dHhfcHRyLCB0eF9wdHIsIG5ld190eF9wdHIpOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiB0eF9hY3RpdmU7Cit9CisKK3N0YXRpYyB2b2lkIHh0ZnBnYV9wY21fcmVmaWxsX2ZpZm8oc3RydWN0IHh0ZnBnYV9pMnMgKmkycykKK3sKKwl1bnNpZ25lZCBpbnRfc3RhdHVzOworCXVuc2lnbmVkIGk7CisKKwlyZWdtYXBfcmVhZChpMnMtPnJlZ21hcCwgWFRGUEdBX0kyU19JTlRfU1RBVFVTLAorCQkgICAgJmludF9zdGF0dXMpOworCisJZm9yIChpID0gMDsgaSA8IDI7ICsraSkgeworCQlib29sIHR4X2FjdGl2ZSA9IHh0ZnBnYV9wY21fcHVzaF90eChpMnMpOworCisJCXJlZ21hcF93cml0ZShpMnMtPnJlZ21hcCwgWFRGUEdBX0kyU19JTlRfU1RBVFVTLAorCQkJICAgICBYVEZQR0FfSTJTX0lOVF9WQUxJRCk7CisJCWlmICh0eF9hY3RpdmUpCisJCQlyZWdtYXBfcmVhZChpMnMtPnJlZ21hcCwgWFRGUEdBX0kyU19JTlRfU1RBVFVTLAorCQkJCSAgICAmaW50X3N0YXR1cyk7CisKKwkJaWYgKCF0eF9hY3RpdmUgfHwKKwkJICAgICEoaW50X3N0YXR1cyAmIFhURlBHQV9JMlNfSU5UX0xFVkVMKSkKKwkJCWJyZWFrOworCisJCS8qIEFmdGVyIHRoZSBwdXNoIHRoZSBsZXZlbCBJUlEgaXMgc3RpbGwgYXNzZXJ0ZWQsCisJCSAqIG1lYW5zIEZJRk8gbGV2ZWwgaXMgYmVsb3cgdHhfZmlmb19sb3cuIEVzdGltYXRlCisJCSAqIGl0IGFzIHR4X2ZpZm9fbG93LgorCQkgKi8KKwkJaTJzLT50eF9maWZvX2xldmVsID0gaTJzLT50eF9maWZvX2xvdzsKKwl9CisKKwlpZiAoIShpbnRfc3RhdHVzICYgWFRGUEdBX0kyU19JTlRfTEVWRUwpKQorCQlyZWdtYXBfd3JpdGUoaTJzLT5yZWdtYXAsIFhURlBHQV9JMlNfSU5UX01BU0ssCisJCQkgICAgIFhURlBHQV9JMlNfSU5UX1ZBTElEKTsKKwllbHNlIGlmICghKGludF9zdGF0dXMgJiBYVEZQR0FfSTJTX0lOVF9VTkRFUlJVTikpCisJCXJlZ21hcF93cml0ZShpMnMtPnJlZ21hcCwgWFRGUEdBX0kyU19JTlRfTUFTSywKKwkJCSAgICAgWFRGUEdBX0kyU19JTlRfVU5ERVJSVU4pOworCisJaWYgKCEoaW50X3N0YXR1cyAmIFhURlBHQV9JMlNfSU5UX1VOREVSUlVOKSkKKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKGkycy0+cmVnbWFwLCBYVEZQR0FfSTJTX0NPTkZJRywKKwkJCQkgICBYVEZQR0FfSTJTX0NPTkZJR19JTlRfRU5BQkxFIHwKKwkJCQkgICBYVEZQR0FfSTJTX0NPTkZJR19UWF9FTkFCTEUsCisJCQkJICAgWFRGUEdBX0kyU19DT05GSUdfSU5UX0VOQUJMRSB8CisJCQkJICAgWFRGUEdBX0kyU19DT05GSUdfVFhfRU5BQkxFKTsKKwllbHNlCisJCXJlZ21hcF91cGRhdGVfYml0cyhpMnMtPnJlZ21hcCwgWFRGUEdBX0kyU19DT05GSUcsCisJCQkJICAgWFRGUEdBX0kyU19DT05GSUdfSU5UX0VOQUJMRSB8CisJCQkJICAgWFRGUEdBX0kyU19DT05GSUdfVFhfRU5BQkxFLCAwKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHh0ZnBnYV9pMnNfdGhyZWFkZWRfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCB4dGZwZ2FfaTJzICppMnMgPSBkZXZfaWQ7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICp0eF9zdWJzdHJlYW07CisJdW5zaWduZWQgY29uZmlnLCBpbnRfc3RhdHVzLCBpbnRfbWFzazsKKworCXJlZ21hcF9yZWFkKGkycy0+cmVnbWFwLCBYVEZQR0FfSTJTX0NPTkZJRywgJmNvbmZpZyk7CisJcmVnbWFwX3JlYWQoaTJzLT5yZWdtYXAsIFhURlBHQV9JMlNfSU5UX01BU0ssICZpbnRfbWFzayk7CisJcmVnbWFwX3JlYWQoaTJzLT5yZWdtYXAsIFhURlBHQV9JMlNfSU5UX1NUQVRVUywgJmludF9zdGF0dXMpOworCisJaWYgKCEoY29uZmlnICYgWFRGUEdBX0kyU19DT05GSUdfSU5UX0VOQUJMRSkgfHwKKwkgICAgIShpbnRfc3RhdHVzICYgaW50X21hc2sgJiBYVEZQR0FfSTJTX0lOVF9WQUxJRCkpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qIFVwZGF0ZSBGSUZPIGxldmVsIGVzdGltYXRlIGluIGFjY29yZGFuY2Ugd2l0aCBpbnRlcnJ1cHQgc3RhdHVzCisJICogcmVnaXN0ZXIuCisJICovCisJaWYgKGludF9zdGF0dXMgJiBYVEZQR0FfSTJTX0lOVF9VTkRFUlJVTikgeworCQlpMnMtPnR4X2ZpZm9fbGV2ZWwgPSAwOworCQlyZWdtYXBfdXBkYXRlX2JpdHMoaTJzLT5yZWdtYXAsIFhURlBHQV9JMlNfQ09ORklHLAorCQkJCSAgIFhURlBHQV9JMlNfQ09ORklHX1RYX0VOQUJMRSwgMCk7CisJfSBlbHNlIHsKKwkJLyogVGhlIEZJRk8gaXNuJ3QgZW1wdHksIGJ1dCBpcyBiZWxvdyB0eF9maWZvX2xvdy4gRXN0aW1hdGUKKwkJICogaXQgYXMgdHhfZmlmb19sb3cuCisJCSAqLworCQlpMnMtPnR4X2ZpZm9fbGV2ZWwgPSBpMnMtPnR4X2ZpZm9fbG93OworCX0KKworCXJjdV9yZWFkX2xvY2soKTsKKwl0eF9zdWJzdHJlYW0gPSByY3VfZGVyZWZlcmVuY2UoaTJzLT50eF9zdWJzdHJlYW0pOworCisJaWYgKHR4X3N1YnN0cmVhbSAmJiBzbmRfcGNtX3J1bm5pbmcodHhfc3Vic3RyZWFtKSkgeworCQlzbmRfcGNtX3BlcmlvZF9lbGFwc2VkKHR4X3N1YnN0cmVhbSk7CisJCWlmIChpbnRfc3RhdHVzICYgWFRGUEdBX0kyU19JTlRfVU5ERVJSVU4pCisJCQlkZXZfZGJnX3JhdGVsaW1pdGVkKGkycy0+ZGV2LCAiJXM6IHVuZGVycnVuXG4iLAorCQkJCQkgICAgX19mdW5jX18pOworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCS8qIFJlZmlsbCBGSUZPLCB1cGRhdGUgYWxsb3dlZCBJUlEgcmVhc29ucywgZW5hYmxlIElSUSBpZiBGSUZPIGlzCisJICogbm90IGVtcHR5LgorCSAqLworCXh0ZnBnYV9wY21fcmVmaWxsX2ZpZm8oaTJzKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCB4dGZwZ2FfaTJzX3N0YXJ0dXAoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0sCisJCQkgICAgICBzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgeHRmcGdhX2kycyAqaTJzID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKworCXNuZF9zb2NfZGFpX3NldF9kbWFfZGF0YShkYWksIHN1YnN0cmVhbSwgaTJzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4dGZwZ2FfaTJzX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKnBhcmFtcywKKwkJCQlzdHJ1Y3Qgc25kX3NvY19kYWkgKmRhaSkKK3sKKwlzdHJ1Y3QgeHRmcGdhX2kycyAqaTJzID0gc25kX3NvY19kYWlfZ2V0X2RydmRhdGEoZGFpKTsKKwl1bnNpZ25lZCBzcmF0ZSA9IHBhcmFtc19yYXRlKHBhcmFtcyk7CisJdW5zaWduZWQgY2hhbm5lbHMgPSBwYXJhbXNfY2hhbm5lbHMocGFyYW1zKTsKKwl1bnNpZ25lZCBwZXJpb2Rfc2l6ZSA9IHBhcmFtc19wZXJpb2Rfc2l6ZShwYXJhbXMpOworCXVuc2lnbmVkIHNhbXBsZV9zaXplID0gc25kX3BjbV9mb3JtYXRfd2lkdGgocGFyYW1zX2Zvcm1hdChwYXJhbXMpKTsKKwl1bnNpZ25lZCBmcmVxLCByYXRpbywgbGV2ZWw7CisJaW50IGVycjsKKworCXJlZ21hcF91cGRhdGVfYml0cyhpMnMtPnJlZ21hcCwgWFRGUEdBX0kyU19DT05GSUcsCisJCQkgICBYVEZQR0FfSTJTX0NPTkZJR19SRVNfTUFTSywKKwkJCSAgIHNhbXBsZV9zaXplIDw8IFhURlBHQV9JMlNfQ09ORklHX1JFU19CQVNFKTsKKworCWZyZXEgPSAyNTYgKiBzcmF0ZTsKKwllcnIgPSBjbGtfc2V0X3JhdGUoaTJzLT5jbGssIGZyZXEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogcmF0aW8gZmllbGQgb2YgdGhlIGNvbmZpZyByZWdpc3RlciBjb250cm9scyBNQ0xLLT5JMlMgY2xvY2sKKwkgKiBkZXJpdmF0aW9uOiBJMlMgY2xvY2sgPSBNQ0xLIC8gKDIgKiAocmF0aW8gKyAyKSkuCisJICoKKwkgKiBTbyB3aXRoIE1DTEsgPSAyNTYgKiBzYW1wbGUgcmF0ZSByYXRpbyBpcyAwIGZvciAzMiBiaXQgc3RlcmVvCisJICogYW5kIDIgZm9yIDE2IGJpdCBzdGVyZW8uCisJICovCisJcmF0aW8gPSAoZnJlcSAtIChzcmF0ZSAqIHNhbXBsZV9zaXplICogOCkpIC8KKwkJKHNyYXRlICogc2FtcGxlX3NpemUgKiA0KTsKKworCXJlZ21hcF91cGRhdGVfYml0cyhpMnMtPnJlZ21hcCwgWFRGUEdBX0kyU19DT05GSUcsCisJCQkgICBYVEZQR0FfSTJTX0NPTkZJR19SQVRJT19NQVNLLAorCQkJICAgcmF0aW8gPDwgWFRGUEdBX0kyU19DT05GSUdfUkFUSU9fQkFTRSk7CisKKwlpMnMtPnR4X2ZpZm9fbG93ID0gWFRGUEdBX0kyU19GSUZPX1NJWkUgLyAyOworCisJLyogcGVyaW9kX3NpemUgKiAyOiBGSUZPIGFsd2F5cyBnZXRzIDIgc2FtcGxlcyBwZXIgZnJhbWUgKi8KKwlmb3IgKGxldmVsID0gMTsKKwkgICAgIGkycy0+dHhfZmlmb19sb3cgLyAyID49IHBlcmlvZF9zaXplICogMiAmJgorCSAgICAgbGV2ZWwgPCAoWFRGUEdBX0kyU19DT05GSUdfTEVWRUxfTUFTSyA+PgorCQkgICAgICBYVEZQR0FfSTJTX0NPTkZJR19MRVZFTF9CQVNFKTsgKytsZXZlbCkKKwkJaTJzLT50eF9maWZvX2xvdyAvPSAyOworCisJaTJzLT50eF9maWZvX2hpZ2ggPSAyICogaTJzLT50eF9maWZvX2xvdzsKKworCXJlZ21hcF91cGRhdGVfYml0cyhpMnMtPnJlZ21hcCwgWFRGUEdBX0kyU19DT05GSUcsCisJCQkgICBYVEZQR0FfSTJTX0NPTkZJR19MRVZFTF9NQVNLLAorCQkJICAgbGV2ZWwgPDwgWFRGUEdBX0kyU19DT05GSUdfTEVWRUxfQkFTRSk7CisKKwlkZXZfZGJnKGkycy0+ZGV2LAorCQkiJXMgc3JhdGU6ICV1LCBjaGFubmVsczogJXUsIHNhbXBsZV9zaXplOiAldSwgcGVyaW9kX3NpemU6ICV1XG4iLAorCQlfX2Z1bmNfXywgc3JhdGUsIGNoYW5uZWxzLCBzYW1wbGVfc2l6ZSwgcGVyaW9kX3NpemUpOworCWRldl9kYmcoaTJzLT5kZXYsICIlcyBmcmVxOiAldSwgcmF0aW86ICV1LCBsZXZlbDogJXVcbiIsCisJCV9fZnVuY19fLCBmcmVxLCByYXRpbywgbGV2ZWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeHRmcGdhX2kyc19zZXRfZm10KHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBmbXQpCit7CisJaWYgKChmbXQgJiBTTkRfU09DX0RBSUZNVF9JTlZfTUFTSykgIT0gU05EX1NPQ19EQUlGTVRfTkJfTkYpCisJCXJldHVybiAtRUlOVkFMOworCWlmICgoZm10ICYgU05EX1NPQ19EQUlGTVRfTUFTVEVSX01BU0spICE9IFNORF9TT0NfREFJRk1UX0NCU19DRlMpCisJCXJldHVybiAtRUlOVkFMOworCWlmICgoZm10ICYgU05EX1NPQ19EQUlGTVRfRk9STUFUX01BU0spICE9IFNORF9TT0NfREFJRk1UX0kyUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworLyogUENNICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3BjbV9oYXJkd2FyZSB4dGZwZ2FfcGNtX2hhcmR3YXJlID0geworCS5pbmZvID0gU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQlTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIsCisJLmZvcm1hdHMJCT0gU05EUlZfUENNX0ZNVEJJVF9TMTZfTEUgfAorCQkJCSAgU05EUlZfUENNX0ZNVEJJVF9TMzJfTEUsCisJLmNoYW5uZWxzX21pbgkJPSAxLAorCS5jaGFubmVsc19tYXgJCT0gMiwKKwkucGVyaW9kX2J5dGVzX21pbgk9IDIsCisJLnBlcmlvZF9ieXRlc19tYXgJPSBYVEZQR0FfSTJTX0ZJRk9fU0laRSAvIDIgKiA4LAorCS5wZXJpb2RzX21pbgkJPSAyLAorCS5wZXJpb2RzX21heAkJPSBYVEZQR0FfSTJTX0ZJRk9fU0laRSAqIDggLyAyLAorCS5idWZmZXJfYnl0ZXNfbWF4CT0gWFRGUEdBX0kyU19GSUZPX1NJWkUgKiA4LAorCS5maWZvX3NpemUJCT0gMTYsCit9OworCitzdGF0aWMgaW50IHh0ZnBnYV9wY21fb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKKwl2b2lkICpwOworCisJc25kX3NvY19zZXRfcnVudGltZV9od3BhcmFtcyhzdWJzdHJlYW0sICZ4dGZwZ2FfcGNtX2hhcmR3YXJlKTsKKwlwID0gc25kX3NvY19kYWlfZ2V0X2RtYV9kYXRhKHJ0ZC0+Y3B1X2RhaSwgc3Vic3RyZWFtKTsKKwlydW50aW1lLT5wcml2YXRlX2RhdGEgPSBwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeHRmcGdhX3BjbV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzeW5jaHJvbml6ZV9yY3UoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4dGZwZ2FfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKKwkJCQlzdHJ1Y3Qgc25kX3BjbV9od19wYXJhbXMgKmh3X3BhcmFtcykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHh0ZnBnYV9pMnMgKmkycyA9IHJ1bnRpbWUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBjaGFubmVscyA9IHBhcmFtc19jaGFubmVscyhod19wYXJhbXMpOworCisJc3dpdGNoIChjaGFubmVscykgeworCWNhc2UgMToKKwljYXNlIDI6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl9CisKKwlzd2l0Y2ggKHBhcmFtc19mb3JtYXQoaHdfcGFyYW1zKSkgeworCWNhc2UgU05EUlZfUENNX0ZPUk1BVF9TMTZfTEU6CisJCWkycy0+dHhfZm4gPSAoY2hhbm5lbHMgPT0gMSkgPworCQkJeHRmcGdhX3BjbV90eF8xeDE2IDoKKwkJCXh0ZnBnYV9wY21fdHhfMngxNjsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9GT1JNQVRfUzMyX0xFOgorCQlpMnMtPnR4X2ZuID0gKGNoYW5uZWxzID09IDEpID8KKwkJCXh0ZnBnYV9wY21fdHhfMXgzMiA6CisJCQl4dGZwZ2FfcGNtX3R4XzJ4MzI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gc25kX3BjbV9saWJfbWFsbG9jX3BhZ2VzKHN1YnN0cmVhbSwKKwkJCQkgICAgICAgcGFyYW1zX2J1ZmZlcl9ieXRlcyhod19wYXJhbXMpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHh0ZnBnYV9wY21fdHJpZ2dlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IGNtZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCB4dGZwZ2FfaTJzICppMnMgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgorCQlBQ0NFU1NfT05DRShpMnMtPnR4X3B0cikgPSAwOworCQlyY3VfYXNzaWduX3BvaW50ZXIoaTJzLT50eF9zdWJzdHJlYW0sIHN1YnN0cmVhbSk7CisJCXh0ZnBnYV9wY21fcmVmaWxsX2ZpZm8oaTJzKTsKKwkJYnJlYWs7CisKKwljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CisJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKGkycy0+dHhfc3Vic3RyZWFtLCBOVUxMKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNuZF9wY21fdWZyYW1lc190IHh0ZnBnYV9wY21fcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCXN0cnVjdCB4dGZwZ2FfaTJzICppMnMgPSBydW50aW1lLT5wcml2YXRlX2RhdGE7CisJc25kX3BjbV91ZnJhbWVzX3QgcG9zID0gQUNDRVNTX09OQ0UoaTJzLT50eF9wdHIpOworCisJcmV0dXJuIHBvcyA8IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplID8gcG9zIDogMDsKK30KKworc3RhdGljIGludCB4dGZwZ2FfcGNtX25ldyhzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkKQoreworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZCA9IHJ0ZC0+Y2FyZC0+c25kX2NhcmQ7CisJc2l6ZV90IHNpemUgPSB4dGZwZ2FfcGNtX2hhcmR3YXJlLmJ1ZmZlcl9ieXRlc19tYXg7CisKKwlyZXR1cm4gc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChydGQtPnBjbSwKKwkJCQkJCSAgICAgU05EUlZfRE1BX1RZUEVfREVWLAorCQkJCQkJICAgICBjYXJkLT5kZXYsIHNpemUsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCB4dGZwZ2FfcGNtX2ZyZWUoc3RydWN0IHNuZF9wY20gKnBjbSkKK3sKKwlzbmRfcGNtX2xpYl9wcmVhbGxvY2F0ZV9mcmVlX2Zvcl9hbGwocGNtKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfcGNtX29wcyB4dGZwZ2FfcGNtX29wcyA9IHsKKwkub3BlbgkJPSB4dGZwZ2FfcGNtX29wZW4sCisJLmNsb3NlCQk9IHh0ZnBnYV9wY21fY2xvc2UsCisJLmlvY3RsCQk9IHNuZF9wY21fbGliX2lvY3RsLAorCS5od19wYXJhbXMJPSB4dGZwZ2FfcGNtX2h3X3BhcmFtcywKKwkudHJpZ2dlcgk9IHh0ZnBnYV9wY21fdHJpZ2dlciwKKwkucG9pbnRlcgk9IHh0ZnBnYV9wY21fcG9pbnRlciwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybV9kcml2ZXIgeHRmcGdhX3NvY19wbGF0Zm9ybSA9IHsKKwkucGNtX25ldwk9IHh0ZnBnYV9wY21fbmV3LAorCS5wY21fZnJlZQk9IHh0ZnBnYV9wY21fZnJlZSwKKwkub3BzCQk9ICZ4dGZwZ2FfcGNtX29wcywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19jb21wb25lbnRfZHJpdmVyIHh0ZnBnYV9pMnNfY29tcG9uZW50ID0geworCS5uYW1lCQk9IERSVl9OQU1FLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhaV9vcHMgeHRmcGdhX2kyc19kYWlfb3BzID0geworCS5zdGFydHVwCT0geHRmcGdhX2kyc19zdGFydHVwLAorCS5od19wYXJhbXMgICAgICA9IHh0ZnBnYV9pMnNfaHdfcGFyYW1zLAorCS5zZXRfZm10ICAgICAgICA9IHh0ZnBnYV9pMnNfc2V0X2ZtdCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfZHJpdmVyIHh0ZnBnYV9pMnNfZGFpW10gPSB7CisJeworCQkubmFtZSA9ICJ4dGZwZ2EtaTJzIiwKKwkJLmlkID0gMCwKKwkJLnBsYXliYWNrID0geworCQkJLmNoYW5uZWxzX21pbiA9IDEsCisJCQkuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCS5yYXRlcyA9IFNORFJWX1BDTV9SQVRFXzgwMDBfOTYwMDAsCisJCQkuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFIHwKKwkJCQkgICBTTkRSVl9QQ01fRk1UQklUX1MzMl9MRSwKKwkJfSwKKwkJLm9wcyA9ICZ4dGZwZ2FfaTJzX2RhaV9vcHMsCisJfSwKK307CisKK3N0YXRpYyBpbnQgeHRmcGdhX2kyc19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB4dGZwZ2FfaTJzICppMnMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWNsa19kaXNhYmxlX3VucHJlcGFyZShpMnMtPmNsayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeHRmcGdhX2kyc19ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHh0ZnBnYV9pMnMgKmkycyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaTJzLT5jbGspOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihkZXYsICJjbGtfcHJlcGFyZV9lbmFibGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeHRmcGdhX2kyc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB4dGZwZ2FfaTJzICppMnM7CisJc3RydWN0IHJlc291cmNlICptZW07CisJaW50IGVyciwgaXJxOworCisJaTJzID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqaTJzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpMnMpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGkycyk7CisJaTJzLT5kZXYgPSAmcGRldi0+ZGV2OworCWRldl9kYmcoJnBkZXYtPmRldiwgImRldjogJXAsIGkyczogJXBcbiIsICZwZGV2LT5kZXYsIGkycyk7CisKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWkycy0+cmVncyA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCBtZW0pOworCWlmIChJU19FUlIoaTJzLT5yZWdzKSkgeworCQllcnIgPSBQVFJfRVJSKGkycy0+cmVncyk7CisJCWdvdG8gZXJyOworCX0KKworCWkycy0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKCZwZGV2LT5kZXYsIGkycy0+cmVncywKKwkJCQkJICAgICZ4dGZwZ2FfaTJzX3JlZ21hcF9jb25maWcpOworCWlmIChJU19FUlIoaTJzLT5yZWdtYXApKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ21hcCBpbml0IGZhaWxlZFxuIik7CisJCWVyciA9IFBUUl9FUlIoaTJzLT5yZWdtYXApOworCQlnb3RvIGVycjsKKwl9CisKKwlpMnMtPmNsayA9IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGkycy0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZG4ndCBnZXQgY2xvY2tcbiIpOworCQllcnIgPSBQVFJfRVJSKGkycy0+Y2xrKTsKKwkJZ290byBlcnI7CisJfQorCisJcmVnbWFwX3dyaXRlKGkycy0+cmVnbWFwLCBYVEZQR0FfSTJTX0NPTkZJRywKKwkJICAgICAoMHgxIDw8IFhURlBHQV9JMlNfQ09ORklHX0NIQU5ORUxfQkFTRSkpOworCXJlZ21hcF93cml0ZShpMnMtPnJlZ21hcCwgWFRGUEdBX0kyU19JTlRfU1RBVFVTLCBYVEZQR0FfSTJTX0lOVF9WQUxJRCk7CisJcmVnbWFwX3dyaXRlKGkycy0+cmVnbWFwLCBYVEZQR0FfSTJTX0lOVF9NQVNLLCBYVEZQR0FfSTJTX0lOVF9VTkRFUlJVTik7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSByZXNvdXJjZVxuIik7CisJCWVyciA9IGlycTsKKwkJZ290byBlcnI7CisJfQorCWVyciA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoJnBkZXYtPmRldiwgaXJxLCBOVUxMLAorCQkJCQl4dGZwZ2FfaTJzX3RocmVhZGVkX2lycV9oYW5kbGVyLAorCQkJCQlJUlFGX1NIQVJFRCB8IElSUUZfT05FU0hPVCwKKwkJCQkJcGRldi0+bmFtZSwgaTJzKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJyZXF1ZXN0X2lycSBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwllcnIgPSBzbmRfc29jX3JlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYsICZ4dGZwZ2Ffc29jX3BsYXRmb3JtKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZG4ndCByZWdpc3RlciBwbGF0Zm9ybVxuIik7CisJCWdvdG8gZXJyOworCX0KKwllcnIgPSBkZXZtX3NuZF9zb2NfcmVnaXN0ZXJfY29tcG9uZW50KCZwZGV2LT5kZXYsCisJCQkJCSAgICAgICZ4dGZwZ2FfaTJzX2NvbXBvbmVudCwKKwkJCQkJICAgICAgeHRmcGdhX2kyc19kYWksCisJCQkJCSAgICAgIEFSUkFZX1NJWkUoeHRmcGdhX2kyc19kYWkpKTsKKwlpZiAoZXJyIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZG4ndCByZWdpc3RlciBjb21wb25lbnRcbiIpOworCQlnb3RvIGVycl91bnJlZ2lzdGVyX3BsYXRmb3JtOworCX0KKworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCWlmICghcG1fcnVudGltZV9lbmFibGVkKCZwZGV2LT5kZXYpKSB7CisJCWVyciA9IHh0ZnBnYV9pMnNfcnVudGltZV9yZXN1bWUoJnBkZXYtPmRldik7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9wbV9kaXNhYmxlOworCX0KKwlyZXR1cm4gMDsKKworZXJyX3BtX2Rpc2FibGU6CisJcG1fcnVudGltZV9kaXNhYmxlKCZwZGV2LT5kZXYpOworZXJyX3VucmVnaXN0ZXJfcGxhdGZvcm06CisJc25kX3NvY191bnJlZ2lzdGVyX3BsYXRmb3JtKCZwZGV2LT5kZXYpOworZXJyOgorCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzOiBlcnIgPSAlZFxuIiwgX19mdW5jX18sIGVycik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB4dGZwZ2FfaTJzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB4dGZwZ2FfaTJzICppMnMgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJnBkZXYtPmRldik7CisJaWYgKGkycy0+cmVnbWFwICYmICFJU19FUlIoaTJzLT5yZWdtYXApKSB7CisJCXJlZ21hcF93cml0ZShpMnMtPnJlZ21hcCwgWFRGUEdBX0kyU19DT05GSUcsIDApOworCQlyZWdtYXBfd3JpdGUoaTJzLT5yZWdtYXAsIFhURlBHQV9JMlNfSU5UX01BU0ssIDApOworCQlyZWdtYXBfd3JpdGUoaTJzLT5yZWdtYXAsIFhURlBHQV9JMlNfSU5UX1NUQVRVUywKKwkJCSAgICAgWFRGUEdBX0kyU19JTlRfVkFMSUQpOworCX0KKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7CisJaWYgKCFwbV9ydW50aW1lX3N0YXR1c19zdXNwZW5kZWQoJnBkZXYtPmRldikpCisJCXh0ZnBnYV9pMnNfcnVudGltZV9zdXNwZW5kKCZwZGV2LT5kZXYpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX09GCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB4dGZwZ2FfaTJzX29mX21hdGNoW10gPSB7CisJeyAuY29tcGF0aWJsZSA9ICJjZG5zLHh0ZnBnYS1pMnMiLCB9LAorCXt9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHh0ZnBnYV9pMnNfb2ZfbWF0Y2gpOworI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyB4dGZwZ2FfaTJzX3BtX29wcyA9IHsKKwlTRVRfUlVOVElNRV9QTV9PUFMoeHRmcGdhX2kyc19ydW50aW1lX3N1c3BlbmQsCisJCQkgICB4dGZwZ2FfaTJzX3J1bnRpbWVfcmVzdW1lLCBOVUxMKQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeHRmcGdhX2kyc19kcml2ZXIgPSB7CisJLnByb2JlICAgPSB4dGZwZ2FfaTJzX3Byb2JlLAorCS5yZW1vdmUgID0geHRmcGdhX2kyc19yZW1vdmUsCisJLmRyaXZlciAgPSB7CisJCS5uYW1lID0gInh0ZnBnYS1pMnMiLAorCQkub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRjaF9wdHIoeHRmcGdhX2kyc19vZl9tYXRjaCksCisJCS5wbSA9ICZ4dGZwZ2FfaTJzX3BtX29wcywKKwl9LAorfTsKKworbW9kdWxlX3BsYXRmb3JtX2RyaXZlcih4dGZwZ2FfaTJzX2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIk1heCBGaWxpcHBvdiA8amNtdmJrYmNAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJ4dGZwZ2EgSTJTIGNvbnRyb2xsZXIgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMgYi9zb3VuZC9zcGFyYy9hbWQ3OTMwLmMKaW5kZXggODYyODBkNi4uMWIxYTg5ZSAxMDA2NDQKLS0tIGEvc291bmQvc3BhcmMvYW1kNzkzMC5jCisrKyBiL3NvdW5kL3NwYXJjL2FtZDc5MzAuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpAQCAtNDQsNyArNDUsNiBAQAogI2luY2x1ZGUgPHNvdW5kL2NvbnRyb2wuaD4KICNpbmNsdWRlIDxzb3VuZC9pbml0dmFsLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KIApkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvZW11eC9lbXV4LmMgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXguYwppbmRleCA5MzUyMjA3Li40OTE5NTMyIDEwMDY0NAotLS0gYS9zb3VuZC9zeW50aC9lbXV4L2VtdXguYworKysgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXguYwpAQCAtNTMsOSArNTMsNyBAQAogCWVtdS0+bWF4X3ZvaWNlcyA9IDA7CiAJZW11LT51c2VfdGltZSA9IDA7CiAKLQlpbml0X3RpbWVyKCZlbXUtPnRsaXN0KTsKLQllbXUtPnRsaXN0LmZ1bmN0aW9uID0gc25kX2VtdXhfdGltZXJfY2FsbGJhY2s7Ci0JZW11LT50bGlzdC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZW11OworCXNldHVwX3RpbWVyKCZlbXUtPnRsaXN0LCBzbmRfZW11eF90aW1lcl9jYWxsYmFjaywgKHVuc2lnbmVkIGxvbmcpZW11KTsKIAllbXUtPnRpbWVyX2FjdGl2ZSA9IDA7CiAKIAkqcmVtdSA9IGVtdTsKQEAgLTE2MCwxMiArMTU4LDggQEAKIAlzbmRfZW11eF9kZXRhY2hfc2VxX29zcyhlbXUpOwogI2VuZGlmCiAJc25kX2VtdXhfZGV0YWNoX3NlcShlbXUpOwotCiAJc25kX2VtdXhfZGVsZXRlX2h3ZGVwKGVtdSk7Ci0KLQlpZiAoZW11LT5zZmxpc3QpCi0JCXNuZF9zZl9mcmVlKGVtdS0+c2ZsaXN0KTsKLQorCXNuZF9zZl9mcmVlKGVtdS0+c2ZsaXN0KTsKIAlrZnJlZShlbXUtPnZvaWNlcyk7CiAJa2ZyZWUoZW11LT5uYW1lKTsKIAlrZnJlZShlbXUpOwpkaWZmIC0tZ2l0IGEvc291bmQvc3ludGgvZW11eC9lbXV4X2h3ZGVwLmMgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfaHdkZXAuYwppbmRleCA1YWUxZWFlLi5lNTU3OTQ2IDEwMDY0NAotLS0gYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfaHdkZXAuYworKysgYi9zb3VuZC9zeW50aC9lbXV4L2VtdXhfaHdkZXAuYwpAQCAtMjEsNyArMjEsNyBAQAogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL2h3ZGVwLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSAiZW11eF92b2ljZS5oIgogCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9vc3MuYyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9vc3MuYwppbmRleCAzMTk3NTRjLi5hYjM3YWRkIDEwMDY0NAotLS0gYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfb3NzLmMKKysrIGIvc291bmQvc3ludGgvZW11eC9lbXV4X29zcy5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaWZkZWYgQ09ORklHX1NORF9TRVFVRU5DRVJfT1NTCiAKICNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSAiZW11eF92b2ljZS5oIgogI2luY2x1ZGUgPHNvdW5kL2Fzb3VuZGVmLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc3ludGguYyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCmluZGV4IDlhMzhkZTQuLjU5OTU1MWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCkBAIC0xODYsOCArMTg2LDcgQEAKIAkJCQkgKi8KIAkJCQl2cC0+c3RhdGUgPSBTTkRSVl9FTVVYX1NUX1BFTkRJTkc7CiAJCQkJaWYgKCEgZW11LT50aW1lcl9hY3RpdmUpIHsKLQkJCQkJZW11LT50bGlzdC5leHBpcmVzID0gamlmZmllcyArIDE7Ci0JCQkJCWFkZF90aW1lcigmZW11LT50bGlzdCk7CisJCQkJCW1vZF90aW1lcigmZW11LT50bGlzdCwgamlmZmllcyArIDEpOwogCQkJCQllbXUtPnRpbWVyX2FjdGl2ZSA9IDE7CiAJCQkJfQogCQkJfSBlbHNlCkBAIC0yMjMsOCArMjIyLDcgQEAKIAkJfQogCX0KIAlpZiAoZG9fYWdhaW4pIHsKLQkJZW11LT50bGlzdC5leHBpcmVzID0gamlmZmllcyArIDE7Ci0JCWFkZF90aW1lcigmZW11LT50bGlzdCk7CisJCW1vZF90aW1lcigmZW11LT50bGlzdCwgamlmZmllcyArIDEpOwogCQllbXUtPnRpbWVyX2FjdGl2ZSA9IDE7CiAJfSBlbHNlCiAJCWVtdS0+dGltZXJfYWN0aXZlID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3N5bnRoL2VtdXgvc291bmRmb250LmMgYi9zb3VuZC9zeW50aC9lbXV4L3NvdW5kZm9udC5jCmluZGV4IDc4NjgzYjIuLjMxYTRlYTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvc291bmRmb250LmMKKysrIGIvc291bmQvc3ludGgvZW11eC9zb3VuZGZvbnQuYwpAQCAtMjUsNyArMjUsNyBAQAogICogb2YgZG9pbmcgdGhpbmdzIHNvIHRoYXQgdGhlIG9sZCBzZnhsb2FkIHV0aWxpdHkgY2FuIGJlIHVzZWQuCiAgKiBFdmVyeXRoaW5nIG1heSBjaGFuZ2Ugd2hlbiB0aGVyZSBpcyBhbiBhbHNhIHdheSBvZiBkb2luZyB0aGluZ3MuCiAgKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL0tjb25maWcgYi9zb3VuZC91c2IvS2NvbmZpZwppbmRleCBkMzkzMTUzLi5hNDUyYWQ3IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvS2NvbmZpZworKysgYi9zb3VuZC91c2IvS2NvbmZpZwpAQCAtMTYwLDUgKzE2MCw3IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtYmNkMjAwMC4KIAorc291cmNlICJzb3VuZC91c2IvbGluZTYvS2NvbmZpZyIKKwogZW5kaWYJIyBTTkRfVVNCCiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9NYWtlZmlsZSBiL3NvdW5kL3VzYi9NYWtlZmlsZQppbmRleCBiY2VlNDA2Li4yZDJkMTIyIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvTWFrZWZpbGUKKysrIGIvc291bmQvdXNiL01ha2VmaWxlCkBAIC0yNSwzICsyNSw0IEBACiBvYmotJChDT05GSUdfU05EX1VTQl9VUzEyMkwpICs9IHNuZC11c2JtaWRpLWxpYi5vCiAKIG9iai0kKENPTkZJR19TTkQpICs9IG1pc2MvIHVzeDJ5LyBjYWlhcS8gNmZpcmUvIGhpZmFjZS8gYmNkMjAwMC8KK29iai0kKENPTkZJR19TTkRfVVNCX0xJTkU2KQkrPSBsaW5lNi8KZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYXJkLmggYi9zb3VuZC91c2IvY2FyZC5oCmluZGV4IDk3YWNiOTAuLmVmNTgwYjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYXJkLmgKKysrIGIvc291bmQvdXNiL2NhcmQuaApAQCAtMTUzLDYgKzE1Myw4IEBACiAJCWludCBjaGFubmVsOwogCQlpbnQgYnl0ZV9pZHg7CiAJfSBkc2RfZG9wOworCisJYm9vbCB0cmlnZ2VyX3RzdGFtcF9wZW5kaW5nX3VwZGF0ZTsgLyogdHJpZ2dlciB0aW1lc3RhbXAgYmVpbmcgdXBkYXRlZCBmcm9tIGluaXRpYWwgZXN0aW1hdGUgKi8KIH07CiAKIHN0cnVjdCBzbmRfdXNiX3N0cmVhbSB7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbGluZTYvS2NvbmZpZyBiL3NvdW5kL3VzYi9saW5lNi9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NTg1ZDM3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvdXNiL2xpbmU2L0tjb25maWcKQEAgLTAsMCArMSw0MiBAQAorY29uZmlnIFNORF9VU0JfTElORTYKKwl0cmlzdGF0ZQorCXNlbGVjdCBTTkRfUkFXTUlESQorCXNlbGVjdCBTTkRfUENNCisKK2NvbmZpZyBTTkRfVVNCX1BPRAorCXRyaXN0YXRlICJMaW5lIDYgUE9EIFVTQiBzdXBwb3J0IgorCXNlbGVjdCBTTkRfVVNCX0xJTkU2CisJaGVscAorCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgUE9EeHQgYW5kIG90aGVyIHNpbWlsYXIgZGV2aWNlcywKKwkgIHN1cHBvcnRpbmcgdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKKwkgICAgKiBSZWFkaW5nL3dyaXRpbmcgaW5kaXZpZHVhbCBwYXJhbWV0ZXJzCisJICAgICogUmVhZGluZy93cml0aW5nIGNvbXBsZXRlIGNoYW5uZWwsIGVmZmVjdHMgc2V0dXAsIGFuZCBhbXAKKwkgICAgICBzZXR1cCBkYXRhCisJICAgICogQ2hhbm5lbCBzd2l0Y2hpbmcKKwkgICAgKiBWaXJ0dWFsIE1JREkgaW50ZXJmYWNlCisJICAgICogVHVuZXIgYWNjZXNzCisJICAgICogUGxheWJhY2svY2FwdHVyZS9taXhlciBkZXZpY2UgZm9yIGFueSBBTFNBLWNvbXBhdGlibGUgUENNCisJICAgICAgYXVkaW8gYXBwbGljYXRpb24KKwkgICAgKiBTaWduYWwgcm91dGluZyAocmVjb3JkIGNsZWFuL3Byb2Nlc3NlZCBndWl0YXIgc2lnbmFsLAorCSAgICAgIHJlLWFtcGluZykKKworY29uZmlnIFNORF9VU0JfUE9ESEQKKwl0cmlzdGF0ZSAiTGluZSA2IFBPRCBIRDMwMC80MDAvNTAwIFVTQiBzdXBwb3J0IgorCXNlbGVjdCBTTkRfVVNCX0xJTkU2CisJaGVscAorCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgUE9EIEhEMzAwLCA0MDAgYW5kIDUwMCBkZXZpY2VzLgorCitjb25maWcgU05EX1VTQl9UT05FUE9SVAorCXRyaXN0YXRlICJUb25lUG9ydCBHWCwgVVgxIGFuZCBVWDIgVVNCIHN1cHBvcnQiCisJc2VsZWN0IFNORF9VU0JfTElORTYKKwlzZWxlY3QgTkVXX0xFRFMKKwlzZWxlY3QgTEVEU19DTEFTUworCWhlbHAKKwkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIFRvbmVQb3J0IEdYLCBVWDEgYW5kIFVYMiBkZXZpY2VzLgorCitjb25maWcgU05EX1VTQl9WQVJJQVgKKwl0cmlzdGF0ZSAiVmFyaWF4IFdvcmtiZW5jaCBVU0Igc3VwcG9ydCIKKwlzZWxlY3QgU05EX1VTQl9MSU5FNgorCWhlbHAKKwkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIFZhcmlheCBXb3JrYmVuY2ggZGV2aWNlLgorCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbGluZTYvTWFrZWZpbGUgYi9zb3VuZC91c2IvbGluZTYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhiM2IyYQotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3VzYi9saW5lNi9NYWtlZmlsZQpAQCAtMCwwICsxLDE4IEBACitzbmQtdXNiLWxpbmU2LXkgOj0gCQlcCisJCWNhcHR1cmUubwlcCisJCWRyaXZlci5vCVwKKwkJbWlkaS5vCQlcCisJCW1pZGlidWYubwlcCisJCXBjbS5vCQlcCisJCXBsYXliYWNrLm8KKworc25kLXVzYi1wb2QteSA6PSBwb2Qubworc25kLXVzYi1wb2RoZC15IDo9IHBvZGhkLm8KK3NuZC11c2ItdG9uZXBvcnQteSA6PSB0b25lcG9ydC5vCitzbmQtdXNiLXZhcmlheC15IDo9IHZhcmlheC5vCisKK29iai0kKENPTkZJR19TTkRfVVNCX0xJTkU2KQkrPSBzbmQtdXNiLWxpbmU2Lm8KK29iai0kKENPTkZJR19TTkRfVVNCX1BPRCkJKz0gc25kLXVzYi1wb2Qubworb2JqLSQoQ09ORklHX1NORF9VU0JfUE9ESEQpCSs9IHNuZC11c2ItcG9kaGQubworb2JqLSQoQ09ORklHX1NORF9VU0JfVE9ORVBPUlQpCSs9IHNuZC11c2ItdG9uZXBvcnQubworb2JqLSQoQ09ORklHX1NORF9VU0JfVkFSSUFYKQkrPSBzbmQtdXNiLXZhcmlheC5vCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbGluZTYvY2FwdHVyZS5jIGIvc291bmQvdXNiL2xpbmU2L2NhcHR1cmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTE4ZmJiCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvdXNiL2xpbmU2L2NhcHR1cmUuYwpAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqIExpbmUgNiBMaW51eCBVU0IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorCisjaW5jbHVkZSAiY2FwdHVyZS5oIgorI2luY2x1ZGUgImRyaXZlci5oIgorI2luY2x1ZGUgInBjbS5oIgorCisvKgorCUZpbmQgYSBmcmVlIFVSQiBhbmQgc3VibWl0IGl0LgorCW11c3QgYmUgY2FsbGVkIGluIGxpbmU2cGNtLT5pbi5sb2NrIGNvbnRleHQKKyovCitzdGF0aWMgaW50IHN1Ym1pdF9hdWRpb19pbl91cmIoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQoreworCWludCBpbmRleDsKKwlpbnQgaSwgdXJiX3NpemU7CisJaW50IHJldDsKKwlzdHJ1Y3QgdXJiICp1cmJfaW47CisKKwlpbmRleCA9CisJICAgIGZpbmRfZmlyc3RfemVyb19iaXQoJmxpbmU2cGNtLT5pbi5hY3RpdmVfdXJicywgTElORTZfSVNPX0JVRkZFUlMpOworCisJaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBMSU5FNl9JU09fQlVGRkVSUykgeworCQlkZXZfZXJyKGxpbmU2cGNtLT5saW5lNi0+aWZjZGV2LCAibm8gZnJlZSBVUkIgZm91bmRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl1cmJfaW4gPSBsaW5lNnBjbS0+aW4udXJic1tpbmRleF07CisJdXJiX3NpemUgPSAwOworCisJZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19QQUNLRVRTOyArK2kpIHsKKwkJc3RydWN0IHVzYl9pc29fcGFja2V0X2Rlc2NyaXB0b3IgKmZpbiA9CisJCSAgICAmdXJiX2luLT5pc29fZnJhbWVfZGVzY1tpXTsKKwkJZmluLT5vZmZzZXQgPSB1cmJfc2l6ZTsKKwkJZmluLT5sZW5ndGggPSBsaW5lNnBjbS0+bWF4X3BhY2tldF9zaXplOworCQl1cmJfc2l6ZSArPSBsaW5lNnBjbS0+bWF4X3BhY2tldF9zaXplOworCX0KKworCXVyYl9pbi0+dHJhbnNmZXJfYnVmZmVyID0KKwkgICAgbGluZTZwY20tPmluLmJ1ZmZlciArCisJICAgIGluZGV4ICogTElORTZfSVNPX1BBQ0tFVFMgKiBsaW5lNnBjbS0+bWF4X3BhY2tldF9zaXplOworCXVyYl9pbi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IHVyYl9zaXplOworCXVyYl9pbi0+Y29udGV4dCA9IGxpbmU2cGNtOworCisJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiX2luLCBHRlBfQVRPTUlDKTsKKworCWlmIChyZXQgPT0gMCkKKwkJc2V0X2JpdChpbmRleCwgJmxpbmU2cGNtLT5pbi5hY3RpdmVfdXJicyk7CisJZWxzZQorCQlkZXZfZXJyKGxpbmU2cGNtLT5saW5lNi0+aWZjZGV2LAorCQkJIlVSQiBpbiAjJWQgc3VibWlzc2lvbiBmYWlsZWQgKCVkKVxuIiwgaW5kZXgsIHJldCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKwlTdWJtaXQgYWxsIGN1cnJlbnRseSBhdmFpbGFibGUgY2FwdHVyZSBVUkJzLgorCW11c3QgYmUgY2FsbGVkIGluIGxpbmU2cGNtLT5pbi5sb2NrIGNvbnRleHQKKyovCitpbnQgbGluZTZfc3VibWl0X2F1ZGlvX2luX2FsbF91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKK3sKKwlpbnQgcmV0ID0gMCwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9JU09fQlVGRkVSUzsgKytpKSB7CisJCXJldCA9IHN1Ym1pdF9hdWRpb19pbl91cmIobGluZTZwY20pOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisJQ29weSBkYXRhIGludG8gQUxTQSBjYXB0dXJlIGJ1ZmZlci4KKyovCit2b2lkIGxpbmU2X2NhcHR1cmVfY29weShzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20sIGNoYXIgKmZidWYsIGludCBmc2l6ZSkKK3sKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9CisJICAgIGdldF9zdWJzdHJlYW0obGluZTZwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSk7CisJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKKwljb25zdCBpbnQgYnl0ZXNfcGVyX2ZyYW1lID0gbGluZTZwY20tPnByb3BlcnRpZXMtPmJ5dGVzX3Blcl9mcmFtZTsKKwlpbnQgZnJhbWVzID0gZnNpemUgLyBieXRlc19wZXJfZnJhbWU7CisKKwlpZiAocnVudGltZSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAobGluZTZwY20tPmluLnBvc19kb25lICsgZnJhbWVzID4gcnVudGltZS0+YnVmZmVyX3NpemUpIHsKKwkJLyoKKwkJICAgVGhlIHRyYW5zZmVycmVkIGFyZWEgZ29lcyBvdmVyIGJ1ZmZlciBib3VuZGFyeSwKKwkJICAgY29weSB0d28gc2VwYXJhdGUgY2h1bmtzLgorCQkgKi8KKwkJaW50IGxlbjsKKworCQlsZW4gPSBydW50aW1lLT5idWZmZXJfc2l6ZSAtIGxpbmU2cGNtLT5pbi5wb3NfZG9uZTsKKworCQlpZiAobGVuID4gMCkgeworCQkJbWVtY3B5KHJ1bnRpbWUtPmRtYV9hcmVhICsKKwkJCSAgICAgICBsaW5lNnBjbS0+aW4ucG9zX2RvbmUgKiBieXRlc19wZXJfZnJhbWUsIGZidWYsCisJCQkgICAgICAgbGVuICogYnl0ZXNfcGVyX2ZyYW1lKTsKKwkJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSwgZmJ1ZiArIGxlbiAqIGJ5dGVzX3Blcl9mcmFtZSwKKwkJCSAgICAgICAoZnJhbWVzIC0gbGVuKSAqIGJ5dGVzX3Blcl9mcmFtZSk7CisJCX0gZWxzZSB7CisJCQkvKiB0aGlzIGlzIHNvbWV3aGF0IHBhcmFub2lkICovCisJCQlkZXZfZXJyKGxpbmU2cGNtLT5saW5lNi0+aWZjZGV2LAorCQkJCSJkcml2ZXIgYnVnOiBsZW4gPSAlZFxuIiwgbGVuKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGNvcHkgc2luZ2xlIGNodW5rICovCisJCW1lbWNweShydW50aW1lLT5kbWFfYXJlYSArCisJCSAgICAgICBsaW5lNnBjbS0+aW4ucG9zX2RvbmUgKiBieXRlc19wZXJfZnJhbWUsIGZidWYsIGZzaXplKTsKKwl9CisKKwlsaW5lNnBjbS0+aW4ucG9zX2RvbmUgKz0gZnJhbWVzOworCWlmIChsaW5lNnBjbS0+aW4ucG9zX2RvbmUgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCWxpbmU2cGNtLT5pbi5wb3NfZG9uZSAtPSBydW50aW1lLT5idWZmZXJfc2l6ZTsKK30KKwordm9pZCBsaW5lNl9jYXB0dXJlX2NoZWNrX3BlcmlvZChzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20sIGludCBsZW5ndGgpCit7CisJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0gPQorCSAgICBnZXRfc3Vic3RyZWFtKGxpbmU2cGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUpOworCisJbGluZTZwY20tPmluLmJ5dGVzICs9IGxlbmd0aDsKKwlpZiAobGluZTZwY20tPmluLmJ5dGVzID49IGxpbmU2cGNtLT5pbi5wZXJpb2QpIHsKKwkJbGluZTZwY20tPmluLmJ5dGVzICU9IGxpbmU2cGNtLT5pbi5wZXJpb2Q7CisJCXNwaW5fdW5sb2NrKCZsaW5lNnBjbS0+aW4ubG9jayk7CisJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3Vic3RyZWFtKTsKKwkJc3Bpbl9sb2NrKCZsaW5lNnBjbS0+aW4ubG9jayk7CisJfQorfQorCisvKgorICogQ2FsbGJhY2sgZm9yIGNvbXBsZXRlZCBjYXB0dXJlIFVSQi4KKyAqLworc3RhdGljIHZvaWQgYXVkaW9faW5fY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCWludCBpLCBpbmRleCwgbGVuZ3RoID0gMCwgc2h1dGRvd24gPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSAoc3RydWN0IHNuZF9saW5lNl9wY20gKil1cmItPmNvbnRleHQ7CisKKwlsaW5lNnBjbS0+aW4ubGFzdF9mcmFtZSA9IHVyYi0+c3RhcnRfZnJhbWU7CisKKwkvKiBmaW5kIGluZGV4IG9mIFVSQiAqLworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IExJTkU2X0lTT19CVUZGRVJTOyArK2luZGV4KQorCQlpZiAodXJiID09IGxpbmU2cGNtLT5pbi51cmJzW2luZGV4XSkKKwkJCWJyZWFrOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmU2cGNtLT5pbi5sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX1BBQ0tFVFM7ICsraSkgeworCQljaGFyICpmYnVmOworCQlpbnQgZnNpemU7CisJCXN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yICpmaW4gPSAmdXJiLT5pc29fZnJhbWVfZGVzY1tpXTsKKworCQlpZiAoZmluLT5zdGF0dXMgPT0gLUVYREVWKSB7CisJCQlzaHV0ZG93biA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCWZidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIGZpbi0+b2Zmc2V0OworCQlmc2l6ZSA9IGZpbi0+YWN0dWFsX2xlbmd0aDsKKworCQlpZiAoZnNpemUgPiBsaW5lNnBjbS0+bWF4X3BhY2tldF9zaXplKSB7CisJCQlkZXZfZXJyKGxpbmU2cGNtLT5saW5lNi0+aWZjZGV2LAorCQkJCSJkcml2ZXIgYW5kL29yIGRldmljZSBidWc6IHBhY2tldCB0b28gbGFyZ2UgKCVkID4gJWQpXG4iLAorCQkJCWZzaXplLCBsaW5lNnBjbS0+bWF4X3BhY2tldF9zaXplKTsKKwkJfQorCisJCWxlbmd0aCArPSBmc2l6ZTsKKworCQkvKiB0aGUgZm9sbG93aW5nIGFzc3VtZXMgTElORTZfSVNPX1BBQ0tFVFMgPT0gMTogKi8KKwkJbGluZTZwY20tPnByZXZfZmJ1ZiA9IGZidWY7CisJCWxpbmU2cGNtLT5wcmV2X2ZzaXplID0gZnNpemU7CisKKwkJaWYgKCF0ZXN0X2JpdChMSU5FNl9TVFJFQU1fSU1QVUxTRSwgJmxpbmU2cGNtLT5pbi5ydW5uaW5nKSAmJgorCQkgICAgdGVzdF9iaXQoTElORTZfU1RSRUFNX1BDTSwgJmxpbmU2cGNtLT5pbi5ydW5uaW5nKSAmJgorCQkgICAgZnNpemUgPiAwKQorCQkJbGluZTZfY2FwdHVyZV9jb3B5KGxpbmU2cGNtLCBmYnVmLCBmc2l6ZSk7CisJfQorCisJY2xlYXJfYml0KGluZGV4LCAmbGluZTZwY20tPmluLmFjdGl2ZV91cmJzKTsKKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaW5kZXgsICZsaW5lNnBjbS0+aW4udW5saW5rX3VyYnMpKQorCQlzaHV0ZG93biA9IDE7CisKKwlpZiAoIXNodXRkb3duKSB7CisJCXN1Ym1pdF9hdWRpb19pbl91cmIobGluZTZwY20pOworCisJCWlmICghdGVzdF9iaXQoTElORTZfU1RSRUFNX0lNUFVMU0UsICZsaW5lNnBjbS0+aW4ucnVubmluZykgJiYKKwkJICAgIHRlc3RfYml0KExJTkU2X1NUUkVBTV9QQ00sICZsaW5lNnBjbS0+aW4ucnVubmluZykpCisJCQlsaW5lNl9jYXB0dXJlX2NoZWNrX3BlcmlvZChsaW5lNnBjbSwgbGVuZ3RoKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+aW4ubG9jaywgZmxhZ3MpOworfQorCisvKiBvcGVuIGNhcHR1cmUgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X2NhcHR1cmVfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X3JhdGRlbnMocnVudGltZSwgMCwKKwkJCQkJICAgIFNORFJWX1BDTV9IV19QQVJBTV9SQVRFLAorCQkJCQkgICAgJmxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5yYXRlcyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwlydW50aW1lLT5odyA9IGxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5jYXB0dXJlX2h3OworCXJldHVybiAwOworfQorCisvKiBjbG9zZSBjYXB0dXJlIGNhbGxiYWNrICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9jYXB0dXJlX2Nsb3NlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiAwOworfQorCisvKiBjYXB0dXJlIG9wZXJhdG9ycyAqLworc3RydWN0IHNuZF9wY21fb3BzIHNuZF9saW5lNl9jYXB0dXJlX29wcyA9IHsKKwkub3BlbiA9IHNuZF9saW5lNl9jYXB0dXJlX29wZW4sCisJLmNsb3NlID0gc25kX2xpbmU2X2NhcHR1cmVfY2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IHNuZF9saW5lNl9od19wYXJhbXMsCisJLmh3X2ZyZWUgPSBzbmRfbGluZTZfaHdfZnJlZSwKKwkucHJlcGFyZSA9IHNuZF9saW5lNl9wcmVwYXJlLAorCS50cmlnZ2VyID0gc25kX2xpbmU2X3RyaWdnZXIsCisJLnBvaW50ZXIgPSBzbmRfbGluZTZfcG9pbnRlciwKK307CisKK2ludCBsaW5lNl9jcmVhdGVfYXVkaW9faW5fdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCit7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSBsaW5lNnBjbS0+bGluZTY7CisJaW50IGk7CisKKwkvKiBjcmVhdGUgYXVkaW8gVVJCcyBhbmQgZmlsbCBpbiBjb25zdGFudCB2YWx1ZXM6ICovCisJZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19CVUZGRVJTOyArK2kpIHsKKwkJc3RydWN0IHVyYiAqdXJiOworCisJCS8qIFVSQiBmb3IgYXVkaW8gaW46ICovCisJCXVyYiA9IGxpbmU2cGNtLT5pbi51cmJzW2ldID0KKwkJICAgIHVzYl9hbGxvY191cmIoTElORTZfSVNPX1BBQ0tFVFMsIEdGUF9LRVJORUwpOworCisJCWlmICh1cmIgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXVyYi0+ZGV2ID0gbGluZTYtPnVzYmRldjsKKwkJdXJiLT5waXBlID0KKwkJICAgIHVzYl9yY3Zpc29jcGlwZShsaW5lNi0+dXNiZGV2LAorCQkJCSAgICBsaW5lNi0+cHJvcGVydGllcy0+ZXBfYXVkaW9fciAmCisJCQkJICAgIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+c3RhcnRfZnJhbWUgPSAtMTsKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IExJTkU2X0lTT19QQUNLRVRTOworCQl1cmItPmludGVydmFsID0gTElORTZfSVNPX0lOVEVSVkFMOworCQl1cmItPmVycm9yX2NvdW50ID0gMDsKKwkJdXJiLT5jb21wbGV0ZSA9IGF1ZGlvX2luX2NhbGxiYWNrOworCX0KKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NhcHR1cmUuaCBiL3NvdW5kL3VzYi9saW5lNi9jYXB0dXJlLmgKc2ltaWxhcml0eSBpbmRleCA2NCUKcmVuYW1lIGZyb20gZHJpdmVycy9zdGFnaW5nL2xpbmU2L2NhcHR1cmUuaApyZW5hbWUgdG8gc291bmQvdXNiL2xpbmU2L2NhcHR1cmUuaAppbmRleCA0MTU3YmNiLi44OTBiMjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvY2FwdHVyZS5oCisrKyBiL3NvdW5kL3VzYi9saW5lNi9jYXB0dXJlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOS4xYmV0YQorICogTGluZSA2IExpbnV4IFVTQiBkcml2ZXIKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQogICoKQEAgLTI0LDEyICsyNCw2IEBACiBleHRlcm4gdm9pZCBsaW5lNl9jYXB0dXJlX2NoZWNrX3BlcmlvZChzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20sCiAJCQkJICAgICAgIGludCBsZW5ndGgpOwogZXh0ZXJuIGludCBsaW5lNl9jcmVhdGVfYXVkaW9faW5fdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pOwotZXh0ZXJuIHZvaWQgbGluZTZfZnJlZV9jYXB0dXJlX2J1ZmZlcihzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pOwogZXh0ZXJuIGludCBsaW5lNl9zdWJtaXRfYXVkaW9faW5fYWxsX3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKTsKLWV4dGVybiB2b2lkIGxpbmU2X3VubGlua19hdWRpb19pbl91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSk7Ci1leHRlcm4gdm9pZCBsaW5lNl91bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19pbl91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtCi0JCQkJCQkgICpsaW5lNnBjbSk7Ci1leHRlcm4gdm9pZCBsaW5lNl93YWl0X2NsZWFyX2F1ZGlvX2luX3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKTsKLWV4dGVybiBpbnQgc25kX2xpbmU2X2NhcHR1cmVfdHJpZ2dlcihzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20sIGludCBjbWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9saW5lNi9kcml2ZXIuYyBiL3NvdW5kL3VzYi9saW5lNi9kcml2ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWI2M2E3Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvdXNiL2xpbmU2L2RyaXZlci5jCkBAIC0wLDAgKzEsNjY2IEBACisvKgorICogTGluZSA2IExpbnV4IFVTQiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKworI2luY2x1ZGUgImNhcHR1cmUuaCIKKyNpbmNsdWRlICJkcml2ZXIuaCIKKyNpbmNsdWRlICJtaWRpLmgiCisjaW5jbHVkZSAicGxheWJhY2suaCIKKworI2RlZmluZSBEUklWRVJfQVVUSE9SICAiTWFya3VzIEdyYWJuZXIgPGdyYWJuZXJAaWNnLnR1Z3Jhei5hdD4iCisjZGVmaW5lIERSSVZFUl9ERVNDICAgICJMaW5lIDYgVVNCIERyaXZlciIKKworLyoKKwlUaGlzIGlzIExpbmUgNidzIE1JREkgbWFudWZhY3R1cmVyIElELgorKi8KK2NvbnN0IHVuc2lnbmVkIGNoYXIgbGluZTZfbWlkaV9pZFtdID0geworCTB4MDAsIDB4MDEsIDB4MGMKK307CitFWFBPUlRfU1lNQk9MX0dQTChsaW5lNl9taWRpX2lkKTsKKworLyoKKwlDb2RlIHRvIHJlcXVlc3QgdmVyc2lvbiBvZiBQT0QsIFZhcmlheCBpbnRlcmZhY2UKKwkoYW5kIG1heWJlIG90aGVyIGRldmljZXMpLgorKi8KK3N0YXRpYyBjb25zdCBjaGFyIGxpbmU2X3JlcXVlc3RfdmVyc2lvbltdID0geworCTB4ZjAsIDB4N2UsIDB4N2YsIDB4MDYsIDB4MDEsIDB4ZjcKK307CisKKy8qCisJIENsYXNzIGZvciBhc3luY2hyb25vdXMgbWVzc2FnZXMuCisqLworc3RydWN0IG1lc3NhZ2UgeworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2OworCWNvbnN0IGNoYXIgKmJ1ZmZlcjsKKwlpbnQgc2l6ZTsKKwlpbnQgZG9uZTsKK307CisKKy8qCisJRm9yd2FyZCBkZWNsYXJhdGlvbnMuCisqLworc3RhdGljIHZvaWQgbGluZTZfZGF0YV9yZWNlaXZlZChzdHJ1Y3QgdXJiICp1cmIpOworc3RhdGljIGludCBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlX2FzeW5jX3BhcnQoc3RydWN0IG1lc3NhZ2UgKm1zZywKKwkJCQkJICAgICBzdHJ1Y3QgdXJiICp1cmIpOworCisvKgorCVN0YXJ0IHRvIGxpc3RlbiBvbiBlbmRwb2ludC4KKyovCitzdGF0aWMgaW50IGxpbmU2X3N0YXJ0X2xpc3RlbihzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNikKK3sKKwlpbnQgZXJyOworCisJdXNiX2ZpbGxfaW50X3VyYihsaW5lNi0+dXJiX2xpc3RlbiwgbGluZTYtPnVzYmRldiwKKwkJdXNiX3JjdmludHBpcGUobGluZTYtPnVzYmRldiwgbGluZTYtPnByb3BlcnRpZXMtPmVwX2N0cmxfciksCisJCWxpbmU2LT5idWZmZXJfbGlzdGVuLCBMSU5FNl9CVUZTSVpFX0xJU1RFTiwKKwkJbGluZTZfZGF0YV9yZWNlaXZlZCwgbGluZTYsIGxpbmU2LT5pbnRlcnZhbCk7CisJbGluZTYtPnVyYl9saXN0ZW4tPmFjdHVhbF9sZW5ndGggPSAwOworCWVyciA9IHVzYl9zdWJtaXRfdXJiKGxpbmU2LT51cmJfbGlzdGVuLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorCVN0b3AgbGlzdGVuaW5nIG9uIGVuZHBvaW50LgorKi8KK3N0YXRpYyB2b2lkIGxpbmU2X3N0b3BfbGlzdGVuKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KQoreworCXVzYl9raWxsX3VyYihsaW5lNi0+dXJiX2xpc3Rlbik7Cit9CisKKy8qCisJU2VuZCByYXcgbWVzc2FnZSBpbiBwaWVjZXMgb2Ygd01heFBhY2tldFNpemUgYnl0ZXMuCisqLworc3RhdGljIGludCBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBjb25zdCBjaGFyICpidWZmZXIsCisJCQkJICBpbnQgc2l6ZSkKK3sKKwlpbnQgaSwgZG9uZSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBsaW5lNi0+bWF4X3BhY2tldF9zaXplKSB7CisJCWludCBwYXJ0aWFsOworCQljb25zdCBjaGFyICpmcmFnX2J1ZiA9IGJ1ZmZlciArIGk7CisJCWludCBmcmFnX3NpemUgPSBtaW4obGluZTYtPm1heF9wYWNrZXRfc2l6ZSwgc2l6ZSAtIGkpOworCQlpbnQgcmV0dmFsOworCisJCXJldHZhbCA9IHVzYl9pbnRlcnJ1cHRfbXNnKGxpbmU2LT51c2JkZXYsCisJCQkJCXVzYl9zbmRpbnRwaXBlKGxpbmU2LT51c2JkZXYsCisJCQkJCQlsaW5lNi0+cHJvcGVydGllcy0+ZXBfY3RybF93KSwKKwkJCQkJKGNoYXIgKilmcmFnX2J1ZiwgZnJhZ19zaXplLAorCQkJCQkmcGFydGlhbCwgTElORTZfVElNRU9VVCAqIEhaKTsKKworCQlpZiAocmV0dmFsKSB7CisJCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsCisJCQkJInVzYl9pbnRlcnJ1cHRfbXNnIGZhaWxlZCAoJWQpXG4iLCByZXR2YWwpOworCQkJYnJlYWs7CisJCX0KKworCQlkb25lICs9IGZyYWdfc2l6ZTsKKwl9CisKKwlyZXR1cm4gZG9uZTsKK30KKworLyoKKwlOb3RpZmljYXRpb24gb2YgY29tcGxldGlvbiBvZiBhc3luY2hyb25vdXMgcmVxdWVzdCB0cmFuc21pc3Npb24uCisqLworc3RhdGljIHZvaWQgbGluZTZfYXN5bmNfcmVxdWVzdF9zZW50KHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgbWVzc2FnZSAqbXNnID0gKHN0cnVjdCBtZXNzYWdlICopdXJiLT5jb250ZXh0OworCisJaWYgKG1zZy0+ZG9uZSA+PSBtc2ctPnNpemUpIHsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCWtmcmVlKG1zZyk7CisJfSBlbHNlCisJCWxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmNfcGFydChtc2csIHVyYik7Cit9CisKKy8qCisJQXN5bmNocm9ub3VzbHkgc2VuZCBwYXJ0IG9mIGEgcmF3IG1lc3NhZ2UuCisqLworc3RhdGljIGludCBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlX2FzeW5jX3BhcnQoc3RydWN0IG1lc3NhZ2UgKm1zZywKKwkJCQkJICAgICBzdHJ1Y3QgdXJiICp1cmIpCit7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IG1zZy0+bGluZTY7CisJaW50IGRvbmUgPSBtc2ctPmRvbmU7CisJaW50IGJ5dGVzID0gbWluKG1zZy0+c2l6ZSAtIGRvbmUsIGxpbmU2LT5tYXhfcGFja2V0X3NpemUpOworCisJdXNiX2ZpbGxfaW50X3VyYih1cmIsIGxpbmU2LT51c2JkZXYsCisJCXVzYl9zbmRpbnRwaXBlKGxpbmU2LT51c2JkZXYsIGxpbmU2LT5wcm9wZXJ0aWVzLT5lcF9jdHJsX3cpLAorCQkoY2hhciAqKW1zZy0+YnVmZmVyICsgZG9uZSwgYnl0ZXMsCisJCWxpbmU2X2FzeW5jX3JlcXVlc3Rfc2VudCwgbXNnLCBsaW5lNi0+aW50ZXJ2YWwpOworCisJbXNnLT5kb25lICs9IGJ5dGVzOworCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkICglZClcbiIsCisJCQlfX2Z1bmNfXywgcmV0dmFsKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCWtmcmVlKG1zZyk7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisJU2V0dXAgYW5kIHN0YXJ0IHRpbWVyLgorKi8KK3ZvaWQgbGluZTZfc3RhcnRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLCB1bnNpZ25lZCBsb25nIG1zZWNzLAorCQkgICAgICAgdm9pZCAoKmZ1bmN0aW9uKSh1bnNpZ25lZCBsb25nKSwgdW5zaWduZWQgbG9uZyBkYXRhKQoreworCXNldHVwX3RpbWVyKHRpbWVyLCBmdW5jdGlvbiwgZGF0YSk7CisJbW9kX3RpbWVyKHRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhtc2VjcykpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobGluZTZfc3RhcnRfdGltZXIpOworCisvKgorCUFzeW5jaHJvbm91c2x5IHNlbmQgcmF3IG1lc3NhZ2UuCisqLworaW50IGxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmMoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGNvbnN0IGNoYXIgKmJ1ZmZlciwKKwkJCQkgaW50IHNpemUpCit7CisJc3RydWN0IG1lc3NhZ2UgKm1zZzsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwkvKiBjcmVhdGUgbWVzc2FnZTogKi8KKwltc2cgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWVzc2FnZSksIEdGUF9BVE9NSUMpOworCWlmIChtc2cgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBjcmVhdGUgVVJCOiAqLworCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisKKwlpZiAodXJiID09IE5VTEwpIHsKKwkJa2ZyZWUobXNnKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogc2V0IG1lc3NhZ2UgZGF0YTogKi8KKwltc2ctPmxpbmU2ID0gbGluZTY7CisJbXNnLT5idWZmZXIgPSBidWZmZXI7CisJbXNnLT5zaXplID0gc2l6ZTsKKwltc2ctPmRvbmUgPSAwOworCisJLyogc3RhcnQgc2VuZGluZzogKi8KKwlyZXR1cm4gbGluZTZfc2VuZF9yYXdfbWVzc2FnZV9hc3luY19wYXJ0KG1zZywgdXJiKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmMpOworCisvKgorCVNlbmQgYXN5bmNocm9ub3VzIGRldmljZSB2ZXJzaW9uIHJlcXVlc3QuCisqLworaW50IGxpbmU2X3ZlcnNpb25fcmVxdWVzdF9hc3luYyhzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNikKK3sKKwljaGFyICpidWZmZXI7CisJaW50IHJldHZhbDsKKworCWJ1ZmZlciA9IGttZW1kdXAobGluZTZfcmVxdWVzdF92ZXJzaW9uLAorCQkJc2l6ZW9mKGxpbmU2X3JlcXVlc3RfdmVyc2lvbiksIEdGUF9BVE9NSUMpOworCWlmIChidWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR2YWwgPSBsaW5lNl9zZW5kX3Jhd19tZXNzYWdlX2FzeW5jKGxpbmU2LCBidWZmZXIsCisJCQkJCSAgICAgIHNpemVvZihsaW5lNl9yZXF1ZXN0X3ZlcnNpb24pKTsKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsaW5lNl92ZXJzaW9uX3JlcXVlc3RfYXN5bmMpOworCisvKgorCVNlbmQgc3lzZXggbWVzc2FnZSBpbiBwaWVjZXMgb2Ygd01heFBhY2tldFNpemUgYnl0ZXMuCisqLworaW50IGxpbmU2X3NlbmRfc3lzZXhfbWVzc2FnZShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgY29uc3QgY2hhciAqYnVmZmVyLAorCQkJICAgICBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gbGluZTZfc2VuZF9yYXdfbWVzc2FnZShsaW5lNiwgYnVmZmVyLAorCQkJCSAgICAgIHNpemUgKyBTWVNFWF9FWFRSQV9TSVpFKSAtCisJICAgIFNZU0VYX0VYVFJBX1NJWkU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsaW5lNl9zZW5kX3N5c2V4X21lc3NhZ2UpOworCisvKgorCUFsbG9jYXRlIGJ1ZmZlciBmb3Igc3lzZXggbWVzc2FnZSBhbmQgcHJlcGFyZSBoZWFkZXIuCisJQHBhcmFtIGNvZGUgc3lzZXggbWVzc2FnZSBjb2RlCisJQHBhcmFtIHNpemUgbnVtYmVyIG9mIGJ5dGVzIGJldHdlZW4gY29kZSBhbmQgc3lzZXggZW5kCisqLworY2hhciAqbGluZTZfYWxsb2Nfc3lzZXhfYnVmZmVyKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBpbnQgY29kZTEsIGludCBjb2RlMiwKKwkJCSAgICAgICBpbnQgc2l6ZSkKK3sKKwljaGFyICpidWZmZXIgPSBrbWFsbG9jKHNpemUgKyBTWVNFWF9FWFRSQV9TSVpFLCBHRlBfQVRPTUlDKTsKKworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gTlVMTDsKKworCWJ1ZmZlclswXSA9IExJTkU2X1NZU0VYX0JFR0lOOworCW1lbWNweShidWZmZXIgKyAxLCBsaW5lNl9taWRpX2lkLCBzaXplb2YobGluZTZfbWlkaV9pZCkpOworCWJ1ZmZlcltzaXplb2YobGluZTZfbWlkaV9pZCkgKyAxXSA9IGNvZGUxOworCWJ1ZmZlcltzaXplb2YobGluZTZfbWlkaV9pZCkgKyAyXSA9IGNvZGUyOworCWJ1ZmZlcltzaXplb2YobGluZTZfbWlkaV9pZCkgKyAzICsgc2l6ZV0gPSBMSU5FNl9TWVNFWF9FTkQ7CisJcmV0dXJuIGJ1ZmZlcjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGxpbmU2X2FsbG9jX3N5c2V4X2J1ZmZlcik7CisKKy8qCisJTm90aWZpY2F0aW9uIG9mIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgTGluZSA2IGRldmljZS4KKyovCitzdGF0aWMgdm9pZCBsaW5lNl9kYXRhX3JlY2VpdmVkKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IChzdHJ1Y3QgdXNiX2xpbmU2ICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBtaWRpX2J1ZmZlciAqbWIgPSAmbGluZTYtPmxpbmU2bWlkaS0+bWlkaWJ1Zl9pbjsKKwlpbnQgZG9uZTsKKworCWlmICh1cmItPnN0YXR1cyA9PSAtRVNIVVRET1dOKQorCQlyZXR1cm47CisKKwlkb25lID0KKwkgICAgbGluZTZfbWlkaWJ1Zl93cml0ZShtYiwgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKKwlpZiAoZG9uZSA8IHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQlsaW5lNl9taWRpYnVmX2lnbm9yZShtYiwgZG9uZSk7CisJCWRldl9kYmcobGluZTYtPmlmY2RldiwgIiVkICVkIGJ1ZmZlciBvdmVyZmxvdyAtIG1lc3NhZ2Ugc2tpcHBlZFxuIiwKKwkJCWRvbmUsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJfQorCisJZm9yICg7OykgeworCQlkb25lID0KKwkJICAgIGxpbmU2X21pZGlidWZfcmVhZChtYiwgbGluZTYtPmJ1ZmZlcl9tZXNzYWdlLAorCQkJCSAgICAgICBMSU5FNl9NRVNTQUdFX01BWExFTik7CisKKwkJaWYgKGRvbmUgPT0gMCkKKwkJCWJyZWFrOworCisJCWxpbmU2LT5tZXNzYWdlX2xlbmd0aCA9IGRvbmU7CisJCWxpbmU2X21pZGlfcmVjZWl2ZShsaW5lNiwgbGluZTYtPmJ1ZmZlcl9tZXNzYWdlLCBkb25lKTsKKworCQlpZiAobGluZTYtPnByb2Nlc3NfbWVzc2FnZSkKKwkJCWxpbmU2LT5wcm9jZXNzX21lc3NhZ2UobGluZTYpOworCX0KKworCWxpbmU2X3N0YXJ0X2xpc3RlbihsaW5lNik7Cit9CisKKyNkZWZpbmUgTElORTZfUkVBRF9XUklURV9TVEFUVVNfREVMQVkgMiAgLyogbWlsbGlzZWNvbmRzICovCisjZGVmaW5lIExJTkU2X1JFQURfV1JJVEVfTUFYX1JFVFJJRVMgNTAKKworLyoKKwlSZWFkIGRhdGEgZnJvbSBkZXZpY2UuCisqLworaW50IGxpbmU2X3JlYWRfZGF0YShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IGFkZHJlc3MsIHZvaWQgKmRhdGEsCisJCSAgICBzaXplX3QgZGF0YWxlbikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gbGluZTYtPnVzYmRldjsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgbGVuOworCXVuc2lnbmVkIGNvdW50OworCisJLyogcXVlcnkgdGhlIHNlcmlhbCBudW1iZXI6ICovCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYmRldiwgdXNiX3NuZGN0cmxwaXBlKHVzYmRldiwgMCksIDB4NjcsCisJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9PVVQsCisJCQkgICAgICAoZGF0YWxlbiA8PCA4KSB8IDB4MjEsIGFkZHJlc3MsCisJCQkgICAgICBOVUxMLCAwLCBMSU5FNl9USU1FT1VUICogSFopOworCisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAicmVhZCByZXF1ZXN0IGZhaWxlZCAoZXJyb3IgJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCS8qIFdhaXQgZm9yIGRhdGEgbGVuZ3RoLiBXZSdsbCBnZXQgMHhmZiB1bnRpbCBsZW5ndGggYXJyaXZlcy4gKi8KKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBMSU5FNl9SRUFEX1dSSVRFX01BWF9SRVRSSUVTOyBjb3VudCsrKSB7CisJCW1kZWxheShMSU5FNl9SRUFEX1dSSVRFX1NUQVRVU19ERUxBWSk7CisKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYmRldiwgMCksIDB4NjcsCisJCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8CisJCQkJICAgICAgVVNCX0RJUl9JTiwKKwkJCQkgICAgICAweDAwMTIsIDB4MDAwMCwgJmxlbiwgMSwKKwkJCQkgICAgICBMSU5FNl9USU1FT1VUICogSFopOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihsaW5lNi0+aWZjZGV2LAorCQkJCSJyZWNlaXZlIGxlbmd0aCBmYWlsZWQgKGVycm9yICVkKVxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlpZiAobGVuICE9IDB4ZmYpCisJCQlicmVhazsKKwl9CisKKwlpZiAobGVuID09IDB4ZmYpIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAicmVhZCBmYWlsZWQgYWZ0ZXIgJWQgcmV0cmllc1xuIiwKKwkJCWNvdW50KTsKKwkJcmV0dXJuIC1FSU87CisJfSBlbHNlIGlmIChsZW4gIT0gZGF0YWxlbikgeworCQkvKiBzaG91bGQgYmUgZXF1YWwgb3Igc29tZXRoaW5nIHdlbnQgd3JvbmcgKi8KKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LAorCQkJImxlbmd0aCBtaXNtYXRjaCAoZXhwZWN0ZWQgJWQsIGdvdCAlZClcbiIsCisJCQkoaW50KWRhdGFsZW4sIChpbnQpbGVuKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogcmVjZWl2ZSB0aGUgcmVzdWx0OiAqLworCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2JkZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2JkZXYsIDApLCAweDY3LAorCQkJICAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSB8IFVTQl9ESVJfSU4sCisJCQkgICAgICAweDAwMTMsIDB4MDAwMCwgZGF0YSwgZGF0YWxlbiwKKwkJCSAgICAgIExJTkU2X1RJTUVPVVQgKiBIWik7CisKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJyZWFkIGZhaWxlZCAoZXJyb3IgJWQpXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwobGluZTZfcmVhZF9kYXRhKTsKKworLyoKKwlXcml0ZSBkYXRhIHRvIGRldmljZS4KKyovCitpbnQgbGluZTZfd3JpdGVfZGF0YShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IGFkZHJlc3MsIHZvaWQgKmRhdGEsCisJCSAgICAgc2l6ZV90IGRhdGFsZW4pCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiA9IGxpbmU2LT51c2JkZXY7CisJaW50IHJldDsKKwl1bnNpZ25lZCBjaGFyIHN0YXR1czsKKwlpbnQgY291bnQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codXNiZGV2LCB1c2Jfc25kY3RybHBpcGUodXNiZGV2LCAwKSwgMHg2NywKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX09VVCwKKwkJCSAgICAgIDB4MDAyMiwgYWRkcmVzcywgZGF0YSwgZGF0YWxlbiwKKwkJCSAgICAgIExJTkU2X1RJTUVPVVQgKiBIWik7CisKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsCisJCQkid3JpdGUgcmVxdWVzdCBmYWlsZWQgKGVycm9yICVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBMSU5FNl9SRUFEX1dSSVRFX01BWF9SRVRSSUVTOyBjb3VudCsrKSB7CisJCW1kZWxheShMSU5FNl9SRUFEX1dSSVRFX1NUQVRVU19ERUxBWSk7CisKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYmRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYmRldiwgMCksCisJCQkJICAgICAgMHg2NywKKwkJCQkgICAgICBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwKKwkJCQkgICAgICBVU0JfRElSX0lOLAorCQkJCSAgICAgIDB4MDAxMiwgMHgwMDAwLAorCQkJCSAgICAgICZzdGF0dXMsIDEsIExJTkU2X1RJTUVPVVQgKiBIWik7CisKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIobGluZTYtPmlmY2RldiwKKwkJCQkicmVjZWl2aW5nIHN0YXR1cyBmYWlsZWQgKGVycm9yICVkKVxuIiwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlpZiAoc3RhdHVzICE9IDB4ZmYpCisJCQlicmVhazsKKwl9CisKKwlpZiAoc3RhdHVzID09IDB4ZmYpIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAid3JpdGUgZmFpbGVkIGFmdGVyICVkIHJldHJpZXNcbiIsCisJCQljb3VudCk7CisJCXJldHVybiAtRUlPOworCX0gZWxzZSBpZiAoc3RhdHVzICE9IDApIHsKKwkJZGV2X2VycihsaW5lNi0+aWZjZGV2LCAid3JpdGUgZmFpbGVkIChlcnJvciAlZClcbiIsIHJldCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwobGluZTZfd3JpdGVfZGF0YSk7CisKKy8qCisJUmVhZCBMaW5lIDYgZGV2aWNlIHNlcmlhbCBudW1iZXIuCisJKFBPRCwgVG9uZVBvcnQsIEd1aXRhclBvcnQpCisqLworaW50IGxpbmU2X3JlYWRfc2VyaWFsX251bWJlcihzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgdTMyICpzZXJpYWxfbnVtYmVyKQoreworCXJldHVybiBsaW5lNl9yZWFkX2RhdGEobGluZTYsIDB4ODBkMCwgc2VyaWFsX251bWJlciwKKwkJCSAgICAgICBzaXplb2YoKnNlcmlhbF9udW1iZXIpKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGxpbmU2X3JlYWRfc2VyaWFsX251bWJlcik7CisKKy8qCisJQ2FyZCBkZXN0cnVjdG9yLgorKi8KK3N0YXRpYyB2b2lkIGxpbmU2X2Rlc3RydWN0KHN0cnVjdCBzbmRfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gbGluZTYtPnVzYmRldjsKKworCS8qIGZyZWUgYnVmZmVyIG1lbW9yeSBmaXJzdDogKi8KKwlrZnJlZShsaW5lNi0+YnVmZmVyX21lc3NhZ2UpOworCWtmcmVlKGxpbmU2LT5idWZmZXJfbGlzdGVuKTsKKworCS8qIHRoZW4gZnJlZSBVUkJzOiAqLworCXVzYl9mcmVlX3VyYihsaW5lNi0+dXJiX2xpc3Rlbik7CisKKwkvKiBkZWNyZW1lbnQgcmVmZXJlbmNlIGNvdW50ZXJzOiAqLworCXVzYl9wdXRfZGV2KHVzYmRldik7Cit9CisKKy8qIGdldCBkYXRhIGZyb20gZW5kcG9pbnQgZGVzY3JpcHRvciAoc2VlIHVzYl9tYXhwYWNrZXQpOiAqLworc3RhdGljIHZvaWQgbGluZTZfZ2V0X2ludGVydmFsKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBsaW5lNi0+dXNiZGV2OworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJdW5zaWduZWQgcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKHVzYmRldiwgbGluZTYtPnByb3BlcnRpZXMtPmVwX2N0cmxfcik7CisJdW5zaWduZWQgZXBudW0gPSB1c2JfcGlwZWVuZHBvaW50KHBpcGUpOworCisJZXAgPSB1c2JkZXYtPmVwX2luW2VwbnVtXTsKKwlpZiAoZXApIHsKKwkJbGluZTYtPmludGVydmFsID0gZXAtPmRlc2MuYkludGVydmFsOworCQlsaW5lNi0+bWF4X3BhY2tldF9zaXplID0gbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpOworCX0gZWxzZSB7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwKKwkJCSJlbmRwb2ludCBub3QgYXZhaWxhYmxlLCB1c2luZyBmYWxsYmFjayB2YWx1ZXMiKTsKKwkJbGluZTYtPmludGVydmFsID0gTElORTZfRkFMTEJBQ0tfSU5URVJWQUw7CisJCWxpbmU2LT5tYXhfcGFja2V0X3NpemUgPSBMSU5FNl9GQUxMQkFDS19NQVhQQUNLRVRTSVpFOworCX0KK30KKworc3RhdGljIGludCBsaW5lNl9pbml0X2NhcF9jb250cm9sKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KQoreworCWludCByZXQ7CisKKwkvKiBpbml0aWFsaXplIFVTQiBidWZmZXJzOiAqLworCWxpbmU2LT5idWZmZXJfbGlzdGVuID0ga21hbGxvYyhMSU5FNl9CVUZTSVpFX0xJU1RFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsaW5lNi0+YnVmZmVyX2xpc3RlbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsaW5lNi0+YnVmZmVyX21lc3NhZ2UgPSBrbWFsbG9jKExJTkU2X01FU1NBR0VfTUFYTEVOLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWxpbmU2LT5idWZmZXJfbWVzc2FnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsaW5lNi0+dXJiX2xpc3RlbiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsaW5lNi0+dXJiX2xpc3RlbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXQgPSBsaW5lNl9zdGFydF9saXN0ZW4obGluZTYpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIobGluZTYtPmlmY2RldiwgImNhbm5vdCBzdGFydCBsaXN0ZW5pbmc6ICVkXG4iLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKgorCVByb2JlIFVTQiBkZXZpY2UuCisqLworaW50IGxpbmU2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCwKKwkJY29uc3QgY2hhciAqZHJpdmVyX25hbWUsCisJCWNvbnN0IHN0cnVjdCBsaW5lNl9wcm9wZXJ0aWVzICpwcm9wZXJ0aWVzLAorCQlpbnQgKCpwcml2YXRlX2luaXQpKHN0cnVjdCB1c2JfbGluZTYgKiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKSwKKwkJc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOworCXN0cnVjdCBzbmRfY2FyZCAqY2FyZDsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNjsKKwlpbnQgaW50ZXJmYWNlX251bWJlcjsKKwlpbnQgcmV0OworCisJaWYgKFdBUk5fT04oZGF0YV9zaXplIDwgc2l6ZW9mKCpsaW5lNikpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHdlIGRvbid0IGhhbmRsZSBtdWx0aXBsZSBjb25maWd1cmF0aW9ucyAqLworCWlmICh1c2JkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zICE9IDEpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0ID0gc25kX2NhcmRfbmV3KCZpbnRlcmZhY2UtPmRldiwKKwkJCSAgIFNORFJWX0RFRkFVTFRfSURYMSwgU05EUlZfREVGQVVMVF9TVFIxLAorCQkJICAgVEhJU19NT0RVTEUsIGRhdGFfc2l6ZSwgJmNhcmQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogc3RvcmUgYmFzaWMgZGF0YTogKi8KKwlsaW5lNiA9IGNhcmQtPnByaXZhdGVfZGF0YTsKKwlsaW5lNi0+Y2FyZCA9IGNhcmQ7CisJbGluZTYtPnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworCWxpbmU2LT51c2JkZXYgPSB1c2JkZXY7CisJbGluZTYtPmlmY2RldiA9ICZpbnRlcmZhY2UtPmRldjsKKworCXN0cmNweShjYXJkLT5pZCwgcHJvcGVydGllcy0+aWQpOworCXN0cmNweShjYXJkLT5kcml2ZXIsIGRyaXZlcl9uYW1lKTsKKwlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCBwcm9wZXJ0aWVzLT5uYW1lKTsKKwlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiTGluZSA2ICVzIGF0IFVTQiAlcyIsIHByb3BlcnRpZXMtPm5hbWUsCisJCWRldl9uYW1lKGxpbmU2LT5pZmNkZXYpKTsKKwljYXJkLT5wcml2YXRlX2ZyZWUgPSBsaW5lNl9kZXN0cnVjdDsKKworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBsaW5lNik7CisKKwkvKiBpbmNyZW1lbnQgcmVmZXJlbmNlIGNvdW50ZXJzOiAqLworCXVzYl9nZXRfZGV2KHVzYmRldik7CisKKwkvKiBpbml0aWFsaXplIGRldmljZSBpbmZvOiAqLworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxpbmUgNiAlcyBmb3VuZFxuIiwgcHJvcGVydGllcy0+bmFtZSk7CisKKwkvKiBxdWVyeSBpbnRlcmZhY2UgbnVtYmVyICovCisJaW50ZXJmYWNlX251bWJlciA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKKworCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKHVzYmRldiwgaW50ZXJmYWNlX251bWJlciwKKwkJCQlwcm9wZXJ0aWVzLT5hbHRzZXR0aW5nKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgInNldF9pbnRlcmZhY2UgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlsaW5lNl9nZXRfaW50ZXJ2YWwobGluZTYpOworCisJaWYgKHByb3BlcnRpZXMtPmNhcGFiaWxpdGllcyAmIExJTkU2X0NBUF9DT05UUk9MKSB7CisJCXJldCA9IGxpbmU2X2luaXRfY2FwX2NvbnRyb2wobGluZTYpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJLyogaW5pdGlhbGl6ZSBkZXZpY2UgZGF0YSBiYXNlZCBvbiBkZXZpY2U6ICovCisJcmV0ID0gcHJpdmF0ZV9pbml0KGxpbmU2LCBpZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyb3I7CisKKwkvKiBjcmVhdGlvbiBvZiBhZGRpdGlvbmFsIHNwZWNpYWwgZmlsZXMgc2hvdWxkIGdvIGhlcmUgKi8KKworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkxpbmUgNiAlcyBub3cgYXR0YWNoZWRcbiIsCisJCSBwcm9wZXJ0aWVzLT5uYW1lKTsKKworCXJldHVybiAwOworCisgZXJyb3I6CisJaWYgKGxpbmU2LT5kaXNjb25uZWN0KQorCQlsaW5lNi0+ZGlzY29ubmVjdChsaW5lNik7CisJc25kX2NhcmRfZnJlZShjYXJkKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwobGluZTZfcHJvYmUpOworCisvKgorCUxpbmUgNiBkZXZpY2UgZGlzY29ubmVjdGVkLgorKi8KK3ZvaWQgbGluZTZfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisKKwlpZiAoIWxpbmU2KQorCQlyZXR1cm47CisKKwlpZiAoV0FSTl9PTih1c2JkZXYgIT0gbGluZTYtPnVzYmRldikpCisJCXJldHVybjsKKworCWlmIChsaW5lNi0+dXJiX2xpc3RlbiAhPSBOVUxMKQorCQlsaW5lNl9zdG9wX2xpc3RlbihsaW5lNik7CisKKwlzbmRfY2FyZF9kaXNjb25uZWN0KGxpbmU2LT5jYXJkKTsKKwlpZiAobGluZTYtPmxpbmU2cGNtKQorCQlsaW5lNl9wY21fZGlzY29ubmVjdChsaW5lNi0+bGluZTZwY20pOworCWlmIChsaW5lNi0+ZGlzY29ubmVjdCkKKwkJbGluZTYtPmRpc2Nvbm5lY3QobGluZTYpOworCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiTGluZSA2ICVzIG5vdyBkaXNjb25uZWN0ZWRcbiIsCisJCSBsaW5lNi0+cHJvcGVydGllcy0+bmFtZSk7CisKKwkvKiBtYWtlIHN1cmUgdGhlIGRldmljZSBpc24ndCBkZXN0cnVjdGVkIHR3aWNlOiAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKworCXNuZF9jYXJkX2ZyZWVfd2hlbl9jbG9zZWQobGluZTYtPmNhcmQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobGluZTZfZGlzY29ubmVjdCk7CisKKyNpZmRlZiBDT05GSUdfUE0KKworLyoKKwlTdXNwZW5kIExpbmUgNiBkZXZpY2UuCisqLworaW50IGxpbmU2X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gbGluZTYtPmxpbmU2cGNtOworCisJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShsaW5lNi0+Y2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QzaG90KTsKKworCWlmIChsaW5lNi0+cHJvcGVydGllcy0+Y2FwYWJpbGl0aWVzICYgTElORTZfQ0FQX0NPTlRST0wpCisJCWxpbmU2X3N0b3BfbGlzdGVuKGxpbmU2KTsKKworCWlmIChsaW5lNnBjbSAhPSBOVUxMKSB7CisJCXNuZF9wY21fc3VzcGVuZF9hbGwobGluZTZwY20tPnBjbSk7CisJCWxpbmU2cGNtLT5mbGFncyA9IDA7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsaW5lNl9zdXNwZW5kKTsKKworLyoKKwlSZXN1bWUgTGluZSA2IGRldmljZS4KKyovCitpbnQgbGluZTZfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisKKwlpZiAobGluZTYtPnByb3BlcnRpZXMtPmNhcGFiaWxpdGllcyAmIExJTkU2X0NBUF9DT05UUk9MKQorCQlsaW5lNl9zdGFydF9saXN0ZW4obGluZTYpOworCisJc25kX3Bvd2VyX2NoYW5nZV9zdGF0ZShsaW5lNi0+Y2FyZCwgU05EUlZfQ1RMX1BPV0VSX0QwKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGxpbmU2X3Jlc3VtZSk7CisKKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbGluZTYvZHJpdmVyLmggYi9zb3VuZC91c2IvbGluZTYvZHJpdmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQyMDI5NAotLS0gL2Rldi9udWxsCisrKyBiL3NvdW5kL3VzYi9saW5lNi9kcml2ZXIuaApAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIExpbmUgNiBMaW51eCBVU0IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2lmbmRlZiBEUklWRVJfSAorI2RlZmluZSBEUklWRVJfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CisKKyNpbmNsdWRlICJtaWRpLmgiCisKKyNkZWZpbmUgVVNCX0lOVEVSVkFMU19QRVJfU0VDT05EIDEwMDAKKworLyogRmFsbGJhY2sgVVNCIGludGVydmFsIGFuZCBtYXggcGFja2V0IHNpemUgdmFsdWVzICovCisjZGVmaW5lIExJTkU2X0ZBTExCQUNLX0lOVEVSVkFMIDEwCisjZGVmaW5lIExJTkU2X0ZBTExCQUNLX01BWFBBQ0tFVFNJWkUgMTYKKworI2RlZmluZSBMSU5FNl9USU1FT1VUIDEKKyNkZWZpbmUgTElORTZfQlVGU0laRV9MSVNURU4gMzIKKyNkZWZpbmUgTElORTZfTUVTU0FHRV9NQVhMRU4gMjU2CisKKy8qCisJTGluZSA2IE1JREkgY29udHJvbCBjb21tYW5kcworKi8KKyNkZWZpbmUgTElORTZfUEFSQU1fQ0hBTkdFICAgMHhiMAorI2RlZmluZSBMSU5FNl9QUk9HUkFNX0NIQU5HRSAweGMwCisjZGVmaW5lIExJTkU2X1NZU0VYX0JFR0lOICAgIDB4ZjAKKyNkZWZpbmUgTElORTZfU1lTRVhfRU5EICAgICAgMHhmNworI2RlZmluZSBMSU5FNl9SRVNFVCAgICAgICAgICAweGZmCisKKy8qCisJTUlESSBjaGFubmVsIGZvciBtZXNzYWdlcyBpbml0aWF0ZWQgYnkgdGhlIGhvc3QKKwkoYW5kIGV2ZW50dWFsbHkgZWNob2VkIGJhY2sgYnkgdGhlIGRldmljZSkKKyovCisjZGVmaW5lIExJTkU2X0NIQU5ORUxfSE9TVCAgIDB4MDAKKworLyoKKwlNSURJIGNoYW5uZWwgZm9yIG1lc3NhZ2VzIGluaXRpYXRlZCBieSB0aGUgZGV2aWNlCisqLworI2RlZmluZSBMSU5FNl9DSEFOTkVMX0RFVklDRSAweDAyCisKKyNkZWZpbmUgTElORTZfQ0hBTk5FTF9VTktOT1dOIDUJLyogZG9uJ3Qga25vdyB5ZXQgd2hhdCB0aGlzIGlzIGdvb2QgZm9yICovCisKKyNkZWZpbmUgTElORTZfQ0hBTk5FTF9NQVNLIDB4MGYKKworI2RlZmluZSBDSEVDS19TVEFSVFVQX1BST0dSRVNTKHgsIG4pCVwKK2RvIHsJCQkJCVwKKwlpZiAoKHgpID49IChuKSkJCQlcCisJCXJldHVybjsJCQlcCisJeCA9IChuKTsJCQlcCit9IHdoaWxlICgwKQorCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBsaW5lNl9taWRpX2lkWzNdOworCitzdGF0aWMgY29uc3QgaW50IFNZU0VYX0RBVEFfT0ZTID0gc2l6ZW9mKGxpbmU2X21pZGlfaWQpICsgMzsKK3N0YXRpYyBjb25zdCBpbnQgU1lTRVhfRVhUUkFfU0laRSA9IHNpemVvZihsaW5lNl9taWRpX2lkKSArIDQ7CisKKy8qCisJIENvbW1vbiBwcm9wZXJ0aWVzIG9mIExpbmUgNiBkZXZpY2VzLgorKi8KK3N0cnVjdCBsaW5lNl9wcm9wZXJ0aWVzIHsKKwkvKiBDYXJkIGlkIHN0cmluZyAobWF4aW11bSAxNiBjaGFyYWN0ZXJzKS4KKwkgKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkZHJlc3MgdGhlIGRldmljZSBpbiBBTFNBIHByb2dyYW1zIGFzCisJICogImRlZmF1bHQ6Q0FSRD08aWQ+IgorCSAqLworCWNvbnN0IGNoYXIgKmlkOworCisJLyogQ2FyZCBzaG9ydCBuYW1lIChtYXhpbXVtIDMyIGNoYXJhY3RlcnMpICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qIEJpdCB2ZWN0b3IgZGVmaW5pbmcgdGhpcyBkZXZpY2UncyBjYXBhYmlsaXRpZXMgaW4gbGluZTZ1c2IgZHJpdmVyICovCisJaW50IGNhcGFiaWxpdGllczsKKworCWludCBhbHRzZXR0aW5nOworCisJdW5zaWduZWQgZXBfY3RybF9yOworCXVuc2lnbmVkIGVwX2N0cmxfdzsKKwl1bnNpZ25lZCBlcF9hdWRpb19yOworCXVuc2lnbmVkIGVwX2F1ZGlvX3c7Cit9OworCisvKiBDYXBhYmlsaXR5IGJpdHMgKi8KK2VudW0geworCS8qIGRldmljZSBzdXBwb3J0cyBzZXR0aW5ncyBwYXJhbWV0ZXIgdmlhIFVTQiAqLworCUxJTkU2X0NBUF9DT05UUk9MID0JMSA8PCAwLAorCS8qIGRldmljZSBzdXBwb3J0cyBQQ00gaW5wdXQvb3V0cHV0IHZpYSBVU0IgKi8KKwlMSU5FNl9DQVBfUENNID0JCTEgPDwgMSwKKwkvKiBkZXZpY2Ugc3VwcG9ydCBoYXJkd2FyZSBtb25pdG9yaW5nICovCisJTElORTZfQ0FQX0hXTU9OID0JMSA8PCAyLAorfTsKKworLyoKKwkgQ29tbW9uIGRhdGEgc2hhcmVkIGJ5IGFsbCBMaW5lIDYgZGV2aWNlcy4KKwkgQ29ycmVzcG9uZHMgdG8gYSBwYWlyIG9mIFVTQiBlbmRwb2ludHMuCisqLworc3RydWN0IHVzYl9saW5lNiB7CisJLyogVVNCIGRldmljZSAqLworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisKKwkvKiBQcm9wZXJ0aWVzICovCisJY29uc3Qgc3RydWN0IGxpbmU2X3Byb3BlcnRpZXMgKnByb3BlcnRpZXM7CisKKwkvKiBJbnRlcnZhbCAobXMpICovCisJaW50IGludGVydmFsOworCisJLyogTWF4aW11bSBzaXplIG9mIFVTQiBwYWNrZXQgKi8KKwlpbnQgbWF4X3BhY2tldF9zaXplOworCisJLyogRGV2aWNlIHJlcHJlc2VudGluZyB0aGUgVVNCIGludGVyZmFjZSAqLworCXN0cnVjdCBkZXZpY2UgKmlmY2RldjsKKworCS8qIExpbmUgNiBzb3VuZCBjYXJkIGRhdGEgc3RydWN0dXJlLgorCSAqIEVhY2ggZGV2aWNlIGhhcyBhdCBsZWFzdCBNSURJIG9yIFBDTS4KKwkgKi8KKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisKKwkvKiBMaW5lIDYgUENNIGRldmljZSBkYXRhIHN0cnVjdHVyZSAqLworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbTsKKworCS8qIExpbmUgNiBNSURJIGRldmljZSBkYXRhIHN0cnVjdHVyZSAqLworCXN0cnVjdCBzbmRfbGluZTZfbWlkaSAqbGluZTZtaWRpOworCisJLyogVVJCIGZvciBsaXN0ZW5pbmcgdG8gUE9EeHQgUHJvIGNvbnRyb2wgZW5kcG9pbnQgKi8KKwlzdHJ1Y3QgdXJiICp1cmJfbGlzdGVuOworCisJLyogQnVmZmVyIGZvciBsaXN0ZW5pbmcgdG8gUE9EeHQgUHJvIGNvbnRyb2wgZW5kcG9pbnQgKi8KKwl1bnNpZ25lZCBjaGFyICpidWZmZXJfbGlzdGVuOworCisJLyogQnVmZmVyIGZvciBtZXNzYWdlIHRvIGJlIHByb2Nlc3NlZCAqLworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcl9tZXNzYWdlOworCisJLyogTGVuZ3RoIG9mIG1lc3NhZ2UgdG8gYmUgcHJvY2Vzc2VkICovCisJaW50IG1lc3NhZ2VfbGVuZ3RoOworCisJdm9pZCAoKnByb2Nlc3NfbWVzc2FnZSkoc3RydWN0IHVzYl9saW5lNiAqKTsKKwl2b2lkICgqZGlzY29ubmVjdCkoc3RydWN0IHVzYl9saW5lNiAqbGluZTYpOworfTsKKworZXh0ZXJuIGNoYXIgKmxpbmU2X2FsbG9jX3N5c2V4X2J1ZmZlcihzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IGNvZGUxLAorCQkJCSAgICAgIGludCBjb2RlMiwgaW50IHNpemUpOworZXh0ZXJuIGludCBsaW5lNl9yZWFkX2RhdGEoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsIGludCBhZGRyZXNzLCB2b2lkICpkYXRhLAorCQkJICAgc2l6ZV90IGRhdGFsZW4pOworZXh0ZXJuIGludCBsaW5lNl9yZWFkX3NlcmlhbF9udW1iZXIoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsCisJCQkJICAgIHUzMiAqc2VyaWFsX251bWJlcik7CitleHRlcm4gaW50IGxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmMoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsCisJCQkJCWNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IHNpemUpOworZXh0ZXJuIGludCBsaW5lNl9zZW5kX3N5c2V4X21lc3NhZ2Uoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgaW50IHNpemUpOworZXh0ZXJuIHNzaXplX3QgbGluZTZfc2V0X3JhdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CitleHRlcm4gdm9pZCBsaW5lNl9zdGFydF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsIHVuc2lnbmVkIGxvbmcgbXNlY3MsCisJCQkgICAgICB2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBkYXRhKTsKK2V4dGVybiBpbnQgbGluZTZfdmVyc2lvbl9yZXF1ZXN0X2FzeW5jKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KTsKK2V4dGVybiBpbnQgbGluZTZfd3JpdGVfZGF0YShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgaW50IGFkZHJlc3MsIHZvaWQgKmRhdGEsCisJCQkgICAgc2l6ZV90IGRhdGFsZW4pOworCitpbnQgbGluZTZfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkLAorCQljb25zdCBjaGFyICpkcml2ZXJfbmFtZSwKKwkJY29uc3Qgc3RydWN0IGxpbmU2X3Byb3BlcnRpZXMgKnByb3BlcnRpZXMsCisJCWludCAoKnByaXZhdGVfaW5pdCkoc3RydWN0IHVzYl9saW5lNiAqLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpLAorCQlzaXplX3QgZGF0YV9zaXplKTsKKwordm9pZCBsaW5lNl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworCisjaWZkZWYgQ09ORklHX1BNCitpbnQgbGluZTZfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSk7CitpbnQgbGluZTZfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpOworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGkuYyBiL3NvdW5kL3VzYi9saW5lNi9taWRpLmMKc2ltaWxhcml0eSBpbmRleCA3NiUKcmVuYW1lIGZyb20gZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGkuYwpyZW5hbWUgdG8gc291bmQvdXNiL2xpbmU2L21pZGkuYwppbmRleCAxYWMzNDNiLi5jZWJlYTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaS5jCisrKyBiL3NvdW5kL3VzYi9saW5lNi9taWRpLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOS4xYmV0YQorICogTGluZSA2IExpbnV4IFVTQiBkcml2ZXIKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQogICoKQEAgLTExLDE0ICsxMSwxMiBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CiAKLSNpbmNsdWRlICJhdWRpby5oIgogI2luY2x1ZGUgImRyaXZlci5oIgogI2luY2x1ZGUgIm1pZGkuaCIKLSNpbmNsdWRlICJwb2QuaCIKLSNpbmNsdWRlICJ1c2JkZWZzLmgiCiAKICNkZWZpbmUgbGluZTZfcmF3bWlkaV9zdWJzdHJlYW1fbWlkaShzdWJzdHJlYW0pIFwKIAkoKHN0cnVjdCBzbmRfbGluZTZfbWlkaSAqKSgoc3Vic3RyZWFtKS0+cm1pZGktPnByaXZhdGVfZGF0YSkpCkBAIC00NiwxMiArNDQsOSBAQAogCSAgICBsaW5lNl9yYXdtaWRpX3N1YnN0cmVhbV9taWRpKHN1YnN0cmVhbSktPmxpbmU2OwogCXN0cnVjdCBzbmRfbGluZTZfbWlkaSAqbGluZTZtaWRpID0gbGluZTYtPmxpbmU2bWlkaTsKIAlzdHJ1Y3QgbWlkaV9idWZmZXIgKm1iID0gJmxpbmU2bWlkaS0+bWlkaWJ1Zl9vdXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyIGNodW5rW0xJTkU2X0ZBTExCQUNLX01BWFBBQ0tFVFNJWkVdOwogCWludCByZXEsIGRvbmU7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbGluZTYtPmxpbmU2bWlkaS0+bWlkaV90cmFuc21pdF9sb2NrLCBmbGFncyk7Ci0KIAlmb3IgKDs7KSB7CiAJCXJlcSA9IG1pbihsaW5lNl9taWRpYnVmX2J5dGVzX2ZyZWUobWIpLCBsaW5lNi0+bWF4X3BhY2tldF9zaXplKTsKIAkJZG9uZSA9IHNuZF9yYXdtaWRpX3RyYW5zbWl0X3BlZWsoc3Vic3RyZWFtLCBjaHVuaywgcmVxKTsKQEAgLTcyLDggKzY3LDYgQEAKIAogCQlzZW5kX21pZGlfYXN5bmMobGluZTYsIGNodW5rLCBkb25lKTsKIAl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNi0+bGluZTZtaWRpLT5taWRpX3RyYW5zbWl0X2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTkzLDcgKzg2LDcgQEAKIAlpZiAoc3RhdHVzID09IC1FU0hVVERPV04pCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lNi0+bGluZTZtaWRpLT5zZW5kX3VyYl9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmU2LT5saW5lNm1pZGktPmxvY2ssIGZsYWdzKTsKIAludW0gPSAtLWxpbmU2LT5saW5lNm1pZGktPm51bV9hY3RpdmVfc2VuZF91cmJzOwogCiAJaWYgKG51bSA9PSAwKSB7CkBAIC0xMDQsMTIgKzk3LDEyIEBACiAJaWYgKG51bSA9PSAwKQogCQl3YWtlX3VwKCZsaW5lNi0+bGluZTZtaWRpLT5zZW5kX3dhaXQpOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTYtPmxpbmU2bWlkaS0+c2VuZF91cmJfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxpbmU2LT5saW5lNm1pZGktPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKIAlTZW5kIGFuIGFzeW5jaHJvbm91cyBNSURJIG1lc3NhZ2UuCi0JQXNzdW1lcyB0aGF0IGxpbmU2LT5saW5lNm1pZGktPnNlbmRfdXJiX2xvY2sgaXMgaGVsZAorCUFzc3VtZXMgdGhhdCBsaW5lNi0+bGluZTZtaWRpLT5sb2NrIGlzIGhlbGQKIAkoaS5lLiwgdGhpcyBmdW5jdGlvbiBpcyBzZXJpYWxpemVkKS4KICovCiBzdGF0aWMgaW50IHNlbmRfbWlkaV9hc3luYyhzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwgdW5zaWduZWQgY2hhciAqZGF0YSwKQEAgLTEyMSwyMiArMTE0LDE5IEBACiAKIAl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwogCi0JaWYgKHVyYiA9PSBOVUxMKSB7Ci0JCWRldl9lcnIobGluZTYtPmlmY2RldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCWlmICh1cmIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJdHJhbnNmZXJfYnVmZmVyID0ga21lbWR1cChkYXRhLCBsZW5ndGgsIEdGUF9BVE9NSUMpOwogCiAJaWYgKHRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CiAJCXVzYl9mcmVlX3VyYih1cmIpOwotCQlkZXZfZXJyKGxpbmU2LT5pZmNkZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJdXNiX2ZpbGxfaW50X3VyYih1cmIsIGxpbmU2LT51c2JkZXYsCiAJCQkgdXNiX3NuZGJ1bGtwaXBlKGxpbmU2LT51c2JkZXYsCi0JCQkJCSBsaW5lNi0+ZXBfY29udHJvbF93cml0ZSksCisJCQkJCSBsaW5lNi0+cHJvcGVydGllcy0+ZXBfY3RybF93KSwKIAkJCSB0cmFuc2Zlcl9idWZmZXIsIGxlbmd0aCwgbWlkaV9zZW50LCBsaW5lNiwKIAkJCSBsaW5lNi0+aW50ZXJ2YWwpOwogCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CkBAIC0xNzAsMTIgKzE2MCwxMiBAQAogCSAgICBsaW5lNl9yYXdtaWRpX3N1YnN0cmVhbV9taWRpKHN1YnN0cmVhbSktPmxpbmU2OwogCiAJbGluZTYtPmxpbmU2bWlkaS0+c3Vic3RyZWFtX3RyYW5zbWl0ID0gc3Vic3RyZWFtOwotCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lNi0+bGluZTZtaWRpLT5zZW5kX3VyYl9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpbmU2LT5saW5lNm1pZGktPmxvY2ssIGZsYWdzKTsKIAogCWlmIChsaW5lNi0+bGluZTZtaWRpLT5udW1fYWN0aXZlX3NlbmRfdXJicyA9PSAwKQogCQlsaW5lNl9taWRpX3RyYW5zbWl0KHN1YnN0cmVhbSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNi0+bGluZTZtaWRpLT5zZW5kX3VyYl9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGluZTYtPmxpbmU2bWlkaS0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBsaW5lNl9taWRpX291dHB1dF9kcmFpbihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCkBAIC0yMjMsMjggKzIxMywyMCBAQAogCS50cmlnZ2VyID0gbGluZTZfbWlkaV9pbnB1dF90cmlnZ2VyLAogfTsKIAotLyoKLQlDbGVhbnVwIHRoZSBMaW5lNiBNSURJIGRldmljZS4KLSovCi1zdGF0aWMgdm9pZCBsaW5lNl9jbGVhbnVwX21pZGkoc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaSkKLXsKLX0KLQogLyogQ3JlYXRlIGEgTUlESSBkZXZpY2UgKi8KLXN0YXRpYyBpbnQgc25kX2xpbmU2X25ld19taWRpKHN0cnVjdCBzbmRfbGluZTZfbWlkaSAqbGluZTZtaWRpKQorc3RhdGljIGludCBzbmRfbGluZTZfbmV3X21pZGkoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsCisJCQkgICAgICBzdHJ1Y3Qgc25kX3Jhd21pZGkgKipybWlkaV9yZXQpCiB7CiAJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKIAlpbnQgZXJyOwogCi0JZXJyID0gc25kX3Jhd21pZGlfbmV3KGxpbmU2bWlkaS0+bGluZTYtPmNhcmQsICJMaW5lNiBNSURJIiwgMCwgMSwgMSwKLQkJCSAgICAgICZybWlkaSk7CisJZXJyID0gc25kX3Jhd21pZGlfbmV3KGxpbmU2LT5jYXJkLCAiTGluZSA2IE1JREkiLCAwLCAxLCAxLCBybWlkaV9yZXQpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0Jcm1pZGktPnByaXZhdGVfZGF0YSA9IGxpbmU2bWlkaTsKLQlybWlkaS0+cHJpdmF0ZV9mcmVlID0gbGluZTZfY2xlYW51cF9taWRpOwotCXN0cmNweShybWlkaS0+aWQsIGxpbmU2bWlkaS0+bGluZTYtPnByb3BlcnRpZXMtPmlkKTsKLQlzdHJjcHkocm1pZGktPm5hbWUsIGxpbmU2bWlkaS0+bGluZTYtPnByb3BlcnRpZXMtPm5hbWUpOworCXJtaWRpID0gKnJtaWRpX3JldDsKKwlzdHJjcHkocm1pZGktPmlkLCBsaW5lNi0+cHJvcGVydGllcy0+aWQpOworCXN0cmNweShybWlkaS0+bmFtZSwgbGluZTYtPnByb3BlcnRpZXMtPm5hbWUpOwogCiAJcm1pZGktPmluZm9fZmxhZ3MgPQogCSAgICBTTkRSVl9SQVdNSURJX0lORk9fT1VUUFVUIHwKQEAgLTI1OCw2NCArMjQwLDUzIEBACiB9CiAKIC8qIE1JREkgZGV2aWNlIGRlc3RydWN0b3IgKi8KLXN0YXRpYyBpbnQgc25kX2xpbmU2X21pZGlfZnJlZShzdHJ1Y3Qgc25kX2RldmljZSAqZGV2aWNlKQorc3RhdGljIHZvaWQgc25kX2xpbmU2X21pZGlfZnJlZShzdHJ1Y3Qgc25kX3Jhd21pZGkgKnJtaWRpKQogewotCXN0cnVjdCBzbmRfbGluZTZfbWlkaSAqbGluZTZtaWRpID0gZGV2aWNlLT5kZXZpY2VfZGF0YTsKKwlzdHJ1Y3Qgc25kX2xpbmU2X21pZGkgKmxpbmU2bWlkaSA9IHJtaWRpLT5wcml2YXRlX2RhdGE7CiAKIAlsaW5lNl9taWRpYnVmX2Rlc3Ryb3koJmxpbmU2bWlkaS0+bWlkaWJ1Zl9pbik7CiAJbGluZTZfbWlkaWJ1Zl9kZXN0cm95KCZsaW5lNm1pZGktPm1pZGlidWZfb3V0KTsKLQlyZXR1cm4gMDsKKwlrZnJlZShsaW5lNm1pZGkpOwogfQogCiAvKgotCUluaXRpYWxpemUgdGhlIExpbmU2IE1JREkgc3Vic3lzdGVtLgorCUluaXRpYWxpemUgdGhlIExpbmUgNiBNSURJIHN1YnN5c3RlbS4KICovCiBpbnQgbGluZTZfaW5pdF9taWRpKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KQogewotCXN0YXRpYyBzdHJ1Y3Qgc25kX2RldmljZV9vcHMgbWlkaV9vcHMgPSB7Ci0JCS5kZXZfZnJlZSA9IHNuZF9saW5lNl9taWRpX2ZyZWUsCi0JfTsKLQogCWludCBlcnI7CisJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKIAlzdHJ1Y3Qgc25kX2xpbmU2X21pZGkgKmxpbmU2bWlkaTsKIAotCWlmICghKGxpbmU2LT5wcm9wZXJ0aWVzLT5jYXBhYmlsaXRpZXMgJiBMSU5FNl9CSVRfQ09OVFJPTCkpIHsKKwlpZiAoIShsaW5lNi0+cHJvcGVydGllcy0+Y2FwYWJpbGl0aWVzICYgTElORTZfQ0FQX0NPTlRST0wpKSB7CiAJCS8qIHNraXAgTUlESSBpbml0aWFsaXphdGlvbiBhbmQgcmVwb3J0IHN1Y2Nlc3MgKi8KIAkJcmV0dXJuIDA7CiAJfQogCi0JbGluZTZtaWRpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNuZF9saW5lNl9taWRpKSwgR0ZQX0tFUk5FTCk7CisJZXJyID0gc25kX2xpbmU2X25ld19taWRpKGxpbmU2LCAmcm1pZGkpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCi0JaWYgKGxpbmU2bWlkaSA9PSBOVUxMKQorCWxpbmU2bWlkaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzbmRfbGluZTZfbWlkaSksIEdGUF9LRVJORUwpOworCWlmICghbGluZTZtaWRpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IGxpbmU2X21pZGlidWZfaW5pdCgmbGluZTZtaWRpLT5taWRpYnVmX2luLCBNSURJX0JVRkZFUl9TSVpFLCAwKTsKLQlpZiAoZXJyIDwgMCkgewotCQlrZnJlZShsaW5lNm1pZGkpOwotCQlyZXR1cm4gZXJyOwotCX0KLQotCWVyciA9IGxpbmU2X21pZGlidWZfaW5pdCgmbGluZTZtaWRpLT5taWRpYnVmX291dCwgTUlESV9CVUZGRVJfU0laRSwgMSk7Ci0JaWYgKGVyciA8IDApIHsKLQkJa2ZyZWUobGluZTZtaWRpLT5taWRpYnVmX2luLmJ1Zik7Ci0JCWtmcmVlKGxpbmU2bWlkaSk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JbGluZTZtaWRpLT5saW5lNiA9IGxpbmU2OwotCWxpbmU2LT5saW5lNm1pZGkgPSBsaW5lNm1pZGk7Ci0KLQllcnIgPSBzbmRfZGV2aWNlX25ldyhsaW5lNi0+Y2FyZCwgU05EUlZfREVWX1JBV01JREksIGxpbmU2bWlkaSwKLQkJCSAgICAgJm1pZGlfb3BzKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKLQotCWVyciA9IHNuZF9saW5lNl9uZXdfbWlkaShsaW5lNm1pZGkpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOworCXJtaWRpLT5wcml2YXRlX2RhdGEgPSBsaW5lNm1pZGk7CisJcm1pZGktPnByaXZhdGVfZnJlZSA9IHNuZF9saW5lNl9taWRpX2ZyZWU7CiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZsaW5lNm1pZGktPnNlbmRfd2FpdCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmxpbmU2bWlkaS0+c2VuZF91cmJfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmxpbmU2bWlkaS0+bWlkaV90cmFuc21pdF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmbGluZTZtaWRpLT5sb2NrKTsKKwlsaW5lNm1pZGktPmxpbmU2ID0gbGluZTY7CisKKwllcnIgPSBsaW5lNl9taWRpYnVmX2luaXQoJmxpbmU2bWlkaS0+bWlkaWJ1Zl9pbiwgTUlESV9CVUZGRVJfU0laRSwgMCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBsaW5lNl9taWRpYnVmX2luaXQoJmxpbmU2bWlkaS0+bWlkaWJ1Zl9vdXQsIE1JRElfQlVGRkVSX1NJWkUsIDEpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJbGluZTYtPmxpbmU2bWlkaSA9IGxpbmU2bWlkaTsKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGxpbmU2X2luaXRfbWlkaSk7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbGluZTYvbWlkaS5oIGIvc291bmQvdXNiL2xpbmU2L21pZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjgyZDY5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvdXNiL2xpbmU2L21pZGkuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogTGluZSA2IExpbnV4IFVTQiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIE1JRElfSAorI2RlZmluZSBNSURJX0gKKworI2luY2x1ZGUgPHNvdW5kL3Jhd21pZGkuaD4KKworI2luY2x1ZGUgIm1pZGlidWYuaCIKKworI2RlZmluZSBNSURJX0JVRkZFUl9TSVpFIDEwMjQKKworc3RydWN0IHNuZF9saW5lNl9taWRpIHsKKwkvKiBQb2ludGVyIGJhY2sgdG8gdGhlIExpbmUgNiBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUgKi8KKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNjsKKworCS8qIE1JREkgc3Vic3RyZWFtIGZvciByZWNlaXZpbmcgKG9yIE5VTEwgaWYgbm90IGFjdGl2ZSkgKi8KKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW1fcmVjZWl2ZTsKKworCS8qIE1JREkgc3Vic3RyZWFtIGZvciB0cmFuc21pdHRpbmcgKG9yIE5VTEwgaWYgbm90IGFjdGl2ZSkgKi8KKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW1fdHJhbnNtaXQ7CisKKwkvKiBOdW1iZXIgb2YgY3VycmVudGx5IGFjdGl2ZSBNSURJIHNlbmQgVVJCcyAqLworCWludCBudW1fYWN0aXZlX3NlbmRfdXJiczsKKworCS8qIFNwaW4gbG9jayB0byBwcm90ZWN0IE1JREkgYnVmZmVyIGhhbmRsaW5nICovCisJc3BpbmxvY2tfdCBsb2NrOworCisJLyogV2FpdCBxdWV1ZSBmb3IgTUlESSB0cmFuc21pc3Npb24gKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBzZW5kX3dhaXQ7CisKKwkvKiBCdWZmZXIgZm9yIGluY29taW5nIE1JREkgc3RyZWFtICovCisJc3RydWN0IG1pZGlfYnVmZmVyIG1pZGlidWZfaW47CisKKwkvKiBCdWZmZXIgZm9yIG91dGdvaW5nIE1JREkgc3RyZWFtICovCisJc3RydWN0IG1pZGlfYnVmZmVyIG1pZGlidWZfb3V0OworfTsKKworZXh0ZXJuIGludCBsaW5lNl9pbml0X21pZGkoc3RydWN0IHVzYl9saW5lNiAqbGluZTYpOworZXh0ZXJuIHZvaWQgbGluZTZfbWlkaV9yZWNlaXZlKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJICAgICAgIGludCBsZW5ndGgpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpYnVmLmMgYi9zb3VuZC91c2IvbGluZTYvbWlkaWJ1Zi5jCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpYnVmLmMKcmVuYW1lIHRvIHNvdW5kL3VzYi9saW5lNi9taWRpYnVmLmMKaW5kZXggMWZmODU2OS4uMzZhNjEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L21pZGlidWYuYworKysgYi9zb3VuZC91c2IvbGluZTYvbWlkaWJ1Zi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjkuMWJldGEKKyAqIExpbmUgNiBMaW51eCBVU0IgZHJpdmVyCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKICAqCkBAIC0yNiw3ICsyNiw3IEBACiAJfSBlbHNlIHsKIAkJLyoKIAkJICAgTm90ZSB0aGF0IGFjY29yZGluZyB0byB0aGUgTUlESSBzcGVjaWZpY2F0aW9uIDB4ZjIgaXMKLQkJICAgdGhlICJTb25nIFBvc2l0aW9uIFBvaW50ZXIiLCBidXQgdGhpcyBpcyB1c2VkIGJ5IExpbmU2CisJCSAgIHRoZSAiU29uZyBQb3NpdGlvbiBQb2ludGVyIiwgYnV0IHRoaXMgaXMgdXNlZCBieSBMaW5lIDYKIAkJICAgdG8gc2VuZCBzeXNleCBtZXNzYWdlcyB0byB0aGUgaG9zdC4KIAkJICovCiAJCXN0YXRpYyBjb25zdCBpbnQgbGVuZ3RoW10gPSB7IC0xLCAyLCAtMSwgMiwgLTEsIC0xLCAxLCAxLCAxLCAxLApAQCAtNjcsMTMgKzY3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBsaW5lNl9taWRpYnVmX3N0YXR1cyhzdHJ1Y3QgbWlkaV9idWZmZXIgKnRoaXMpCi17Ci0JcHJfZGVidWcoIm1pZGlidWYgc2l6ZT0lZCBzcGxpdD0lZCBwb3NfcmVhZD0lZCBwb3Nfd3JpdGU9JWQgZnVsbD0lZCBjb21tYW5kX3ByZXY9JTAyeFxuIiwKLQkJIHRoaXMtPnNpemUsIHRoaXMtPnNwbGl0LCB0aGlzLT5wb3NfcmVhZCwgdGhpcy0+cG9zX3dyaXRlLAotCQkgdGhpcy0+ZnVsbCwgdGhpcy0+Y29tbWFuZF9wcmV2KTsKLX0KLQogaW50IGxpbmU2X21pZGlidWZfYnl0ZXNfZnJlZShzdHJ1Y3QgbWlkaV9idWZmZXIgKnRoaXMpCiB7CiAJcmV0dXJuCkBAIC0yNTIsMTcgKzI0NSw2IEBACiAJcmV0dXJuIGxlbmd0aDsKIH0KIAotaW50IGxpbmU2X21pZGlidWZfc2tpcF9tZXNzYWdlKHN0cnVjdCBtaWRpX2J1ZmZlciAqdGhpcywgdW5zaWduZWQgc2hvcnQgbWFzaykKLXsKLQlpbnQgY21kID0gdGhpcy0+Y29tbWFuZF9wcmV2OwotCi0JaWYgKChjbWQgPj0gMHg4MCkgJiYgKGNtZCA8IDB4ZjApKQotCQlpZiAoKG1hc2sgJiAoMSA8PCAoY21kICYgMHgwZikpKSA9PSAwKQotCQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQogdm9pZCBsaW5lNl9taWRpYnVmX2Rlc3Ryb3koc3RydWN0IG1pZGlfYnVmZmVyICp0aGlzKQogewogCWtmcmVlKHRoaXMtPmJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaWJ1Zi5oIGIvc291bmQvdXNiL2xpbmU2L21pZGlidWYuaApzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBkcml2ZXJzL3N0YWdpbmcvbGluZTYvbWlkaWJ1Zi5oCnJlbmFtZSB0byBzb3VuZC91c2IvbGluZTYvbWlkaWJ1Zi5oCmluZGV4IDcwNzQ4MmIuLjZlYTIxZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9taWRpYnVmLmgKKysrIGIvc291bmQvdXNiL2xpbmU2L21pZGlidWYuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBMaW5lNiBMaW51eCBVU0IgZHJpdmVyIC0gMC45LjFiZXRhCisgKiBMaW5lIDYgTGludXggVVNCIGRyaXZlcgogICoKICAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCiAgKgpAQCAtMjksOSArMjksNiBAQAogZXh0ZXJuIGludCBsaW5lNl9taWRpYnVmX3JlYWQoc3RydWN0IG1pZGlfYnVmZmVyICptYiwgdW5zaWduZWQgY2hhciAqZGF0YSwKIAkJCSAgICAgIGludCBsZW5ndGgpOwogZXh0ZXJuIHZvaWQgbGluZTZfbWlkaWJ1Zl9yZXNldChzdHJ1Y3QgbWlkaV9idWZmZXIgKm1iKTsKLWV4dGVybiBpbnQgbGluZTZfbWlkaWJ1Zl9za2lwX21lc3NhZ2Uoc3RydWN0IG1pZGlfYnVmZmVyICptYiwKLQkJCQkgICAgICB1bnNpZ25lZCBzaG9ydCBtYXNrKTsKLWV4dGVybiB2b2lkIGxpbmU2X21pZGlidWZfc3RhdHVzKHN0cnVjdCBtaWRpX2J1ZmZlciAqbWIpOwogZXh0ZXJuIGludCBsaW5lNl9taWRpYnVmX3dyaXRlKHN0cnVjdCBtaWRpX2J1ZmZlciAqbWIsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCiAJCQkgICAgICAgaW50IGxlbmd0aCk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9saW5lNi9wY20uYyBiL3NvdW5kL3VzYi9saW5lNi9wY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDYxZDZiCi0tLSAvZGV2L251bGwKKysrIGIvc291bmQvdXNiL2xpbmU2L3BjbS5jCkBAIC0wLDAgKzEsNTg4IEBACisvKgorICogTGluZSA2IExpbnV4IFVTQiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQorICoKKyAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisjaW5jbHVkZSA8c291bmQvcGNtLmg+CisjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgorCisjaW5jbHVkZSAiY2FwdHVyZS5oIgorI2luY2x1ZGUgImRyaXZlci5oIgorI2luY2x1ZGUgInBsYXliYWNrLmgiCisKKy8qIGltcHVsc2UgcmVzcG9uc2Ugdm9sdW1lIGNvbnRyb2xzICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9pbXB1bHNlX3ZvbHVtZV9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMjU1OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9saW5lNl9pbXB1bHNlX3ZvbHVtZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbGluZTZwY20tPmltcHVsc2Vfdm9sdW1lOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9saW5lNl9pbXB1bHNlX3ZvbHVtZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKwlpbnQgZXJyOworCisJaWYgKGxpbmU2cGNtLT5pbXB1bHNlX3ZvbHVtZSA9PSB2YWx1ZSkKKwkJcmV0dXJuIDA7CisKKwlsaW5lNnBjbS0+aW1wdWxzZV92b2x1bWUgPSB2YWx1ZTsKKwlpZiAodmFsdWUgPiAwKSB7CisJCWVyciA9IGxpbmU2X3BjbV9hY3F1aXJlKGxpbmU2cGNtLCBMSU5FNl9TVFJFQU1fSU1QVUxTRSk7CisJCWlmIChlcnIgPCAwKSB7CisJCQlsaW5lNnBjbS0+aW1wdWxzZV92b2x1bWUgPSAwOworCQkJbGluZTZfcGNtX3JlbGVhc2UobGluZTZwY20sIExJTkU2X1NUUkVBTV9JTVBVTFNFKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9IGVsc2UgeworCQlsaW5lNl9wY21fcmVsZWFzZShsaW5lNnBjbSwgTElORTZfU1RSRUFNX0lNUFVMU0UpOworCX0KKwlyZXR1cm4gMTsKK30KKworLyogaW1wdWxzZSByZXNwb25zZSBwZXJpb2QgY29udHJvbHMgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X2ltcHVsc2VfcGVyaW9kX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSBzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9JTlRFR0VSOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWluID0gMDsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSAyMDAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9saW5lNl9pbXB1bHNlX3BlcmlvZF9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbGluZTZwY20tPmltcHVsc2VfcGVyaW9kOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuZF9saW5lNl9pbXB1bHNlX3BlcmlvZF9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgdmFsdWUgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmIChsaW5lNnBjbS0+aW1wdWxzZV9wZXJpb2QgPT0gdmFsdWUpCisJCXJldHVybiAwOworCisJbGluZTZwY20tPmltcHVsc2VfcGVyaW9kID0gdmFsdWU7CisJcmV0dXJuIDE7Cit9CisKKy8qCisJVW5saW5rIGFsbCBjdXJyZW50bHkgYWN0aXZlIFVSQnMuCisqLworc3RhdGljIHZvaWQgbGluZTZfdW5saW5rX2F1ZGlvX3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtLAorCQkJCSAgICBzdHJ1Y3QgbGluZTZfcGNtX3N0cmVhbSAqcGNtcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9JU09fQlVGRkVSUzsgaSsrKSB7CisJCWlmICh0ZXN0X2JpdChpLCAmcGNtcy0+YWN0aXZlX3VyYnMpKSB7CisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaSwgJnBjbXMtPnVubGlua191cmJzKSkKKwkJCQl1c2JfdW5saW5rX3VyYihwY21zLT51cmJzW2ldKTsKKwkJfQorCX0KK30KKworLyoKKwlXYWl0IHVudGlsIHVubGlua2luZyBvZiBhbGwgY3VycmVudGx5IGFjdGl2ZSBVUkJzIGhhcyBiZWVuIGZpbmlzaGVkLgorKi8KK3N0YXRpYyB2b2lkIGxpbmU2X3dhaXRfY2xlYXJfYXVkaW9fdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20sCisJCQkJCXN0cnVjdCBsaW5lNl9wY21fc3RyZWFtICpwY21zKQoreworCWludCB0aW1lb3V0ID0gSFo7CisJaW50IGk7CisJaW50IGFsaXZlOworCisJZG8geworCQlhbGl2ZSA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9JU09fQlVGRkVSUzsgaSsrKSB7CisJCQlpZiAodGVzdF9iaXQoaSwgJnBjbXMtPmFjdGl2ZV91cmJzKSkKKwkJCQlhbGl2ZSsrOworCQl9CisJCWlmICghYWxpdmUpCisJCQlicmVhazsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCX0gd2hpbGUgKC0tdGltZW91dCA+IDApOworCWlmIChhbGl2ZSkKKwkJZGV2X2VycihsaW5lNnBjbS0+bGluZTYtPmlmY2RldiwKKwkJCSJ0aW1lb3V0OiBzdGlsbCAlZCBhY3RpdmUgdXJicy4uXG4iLCBhbGl2ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxpbmU2X3BjbV9zdHJlYW0gKgorZ2V0X3N0cmVhbShzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20sIGludCBkaXJlY3Rpb24pCit7CisJcmV0dXJuIChkaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykgPworCQkmbGluZTZwY20tPm91dCA6ICZsaW5lNnBjbS0+aW47Cit9CisKKy8qIGFsbG9jYXRlIGEgYnVmZmVyIGlmIG5vdCBvcGVuZWQgeWV0OworICogY2FsbCB0aGlzIGluIGxpbmU2cGNtLnN0YXRlX2NoYW5nZSBtdXRleAorICovCitzdGF0aWMgaW50IGxpbmU2X2J1ZmZlcl9hY3F1aXJlKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSwKKwkJCQlzdHJ1Y3QgbGluZTZfcGNtX3N0cmVhbSAqcHN0ciwgaW50IHR5cGUpCit7CisJLyogSW52b2tlZCBtdWx0aXBsZSB0aW1lcyBpbiBhIHJvdyBzbyBhbGxvY2F0ZSBvbmNlIG9ubHkgKi8KKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQodHlwZSwgJnBzdHItPm9wZW5lZCkgJiYgIXBzdHItPmJ1ZmZlcikgeworCQlwc3RyLT5idWZmZXIgPSBrbWFsbG9jKExJTkU2X0lTT19CVUZGRVJTICogTElORTZfSVNPX1BBQ0tFVFMgKgorCQkJCSAgICAgICBsaW5lNnBjbS0+bWF4X3BhY2tldF9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwc3RyLT5idWZmZXIpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGZyZWUgYSBidWZmZXIgaWYgYWxsIHN0cmVhbXMgYXJlIGNsb3NlZDsKKyAqIGNhbGwgdGhpcyBpbiBsaW5lNnBjbS5zdGF0ZV9jaGFuZ2UgbXV0ZXgKKyAqLworc3RhdGljIHZvaWQgbGluZTZfYnVmZmVyX3JlbGVhc2Uoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtLAorCQkJCSBzdHJ1Y3QgbGluZTZfcGNtX3N0cmVhbSAqcHN0ciwgaW50IHR5cGUpCit7CisKKwljbGVhcl9iaXQodHlwZSwgJnBzdHItPm9wZW5lZCk7CisJaWYgKCFwc3RyLT5vcGVuZWQpIHsKKwkJbGluZTZfd2FpdF9jbGVhcl9hdWRpb191cmJzKGxpbmU2cGNtLCBwc3RyKTsKKwkJa2ZyZWUocHN0ci0+YnVmZmVyKTsKKwkJcHN0ci0+YnVmZmVyID0gTlVMTDsKKwl9Cit9CisKKy8qIHN0YXJ0IGEgUENNIHN0cmVhbSAqLworc3RhdGljIGludCBsaW5lNl9zdHJlYW1fc3RhcnQoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtLCBpbnQgZGlyZWN0aW9uLAorCQkJICAgICAgaW50IHR5cGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgbGluZTZfcGNtX3N0cmVhbSAqcHN0ciA9IGdldF9zdHJlYW0obGluZTZwY20sIGRpcmVjdGlvbik7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHN0ci0+bG9jaywgZmxhZ3MpOworCWlmICghdGVzdF9hbmRfc2V0X2JpdCh0eXBlLCAmcHN0ci0+cnVubmluZykpIHsKKwkJaWYgKHBzdHItPmFjdGl2ZV91cmJzIHx8IHBzdHItPnVubGlua191cmJzKSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJcHN0ci0+Y291bnQgPSAwOworCQkvKiBTdWJtaXQgYWxsIGN1cnJlbnRseSBhdmFpbGFibGUgVVJCcyAqLworCQlpZiAoZGlyZWN0aW9uID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCQlyZXQgPSBsaW5lNl9zdWJtaXRfYXVkaW9fb3V0X2FsbF91cmJzKGxpbmU2cGNtKTsKKwkJZWxzZQorCQkJcmV0ID0gbGluZTZfc3VibWl0X2F1ZGlvX2luX2FsbF91cmJzKGxpbmU2cGNtKTsKKwl9CisgZXJyb3I6CisJaWYgKHJldCA8IDApCisJCWNsZWFyX2JpdCh0eXBlLCAmcHN0ci0+cnVubmluZyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHN0ci0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKKy8qIHN0b3AgYSBQQ00gc3RyZWFtOyB0aGlzIGRvZXNuJ3Qgc3luYyB3aXRoIHRoZSB1bmxpbmtlZCBVUkJzICovCitzdGF0aWMgdm9pZCBsaW5lNl9zdHJlYW1fc3RvcChzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20sIGludCBkaXJlY3Rpb24sCisJCQkgIGludCB0eXBlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGxpbmU2X3BjbV9zdHJlYW0gKnBzdHIgPSBnZXRfc3RyZWFtKGxpbmU2cGNtLCBkaXJlY3Rpb24pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnBzdHItPmxvY2ssIGZsYWdzKTsKKwljbGVhcl9iaXQodHlwZSwgJnBzdHItPnJ1bm5pbmcpOworCWlmICghcHN0ci0+cnVubmluZykgeworCQlsaW5lNl91bmxpbmtfYXVkaW9fdXJicyhsaW5lNnBjbSwgcHN0cik7CisJCWlmIChkaXJlY3Rpb24gPT0gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFKSB7CisJCQlsaW5lNnBjbS0+cHJldl9mYnVmID0gTlVMTDsKKwkJCWxpbmU2cGNtLT5wcmV2X2ZzaXplID0gMDsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwc3RyLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIGNvbW1vbiBQQ00gdHJpZ2dlciBjYWxsYmFjayAqLworaW50IHNuZF9saW5lNl90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnM7CisJaW50IGVycjsKKworCWNsZWFyX2JpdChMSU5FNl9GTEFHX1BSRVBBUkVELCAmbGluZTZwY20tPmZsYWdzKTsKKworCXNuZF9wY21fZ3JvdXBfZm9yX2VhY2hfZW50cnkocywgc3Vic3RyZWFtKSB7CisJCWlmIChzLT5wY20tPmNhcmQgIT0gc3Vic3RyZWFtLT5wY20tPmNhcmQpCisJCQljb250aW51ZTsKKworCQlzd2l0Y2ggKGNtZCkgeworCQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUQVJUOgorCQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1JFU1VNRToKKwkJCWVyciA9IGxpbmU2X3N0cmVhbV9zdGFydChsaW5lNnBjbSwgcy0+c3RyZWFtLAorCQkJCQkJIExJTkU2X1NUUkVBTV9QQ00pOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJCWJyZWFrOworCisJCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RPUDoKKwkJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVVNQRU5EOgorCQkJbGluZTZfc3RyZWFtX3N0b3AobGluZTZwY20sIHMtPnN0cmVhbSwKKwkJCQkJICBMSU5FNl9TVFJFQU1fUENNKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKKwkJCWlmIChzLT5zdHJlYW0gIT0gU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSykKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXNldF9iaXQoTElORTZfRkxBR19QQVVTRV9QTEFZQkFDSywgJmxpbmU2cGNtLT5mbGFncyk7CisJCQlicmVhazsKKworCQljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CisJCQlpZiAocy0+c3RyZWFtICE9IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQljbGVhcl9iaXQoTElORTZfRkxBR19QQVVTRV9QTEFZQkFDSywgJmxpbmU2cGNtLT5mbGFncyk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogY29tbW9uIFBDTSBwb2ludGVyIGNhbGxiYWNrICovCitzbmRfcGNtX3VmcmFtZXNfdCBzbmRfbGluZTZfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IGxpbmU2X3BjbV9zdHJlYW0gKnBzdHIgPSBnZXRfc3RyZWFtKGxpbmU2cGNtLCBzdWJzdHJlYW0tPnN0cmVhbSk7CisKKwlyZXR1cm4gcHN0ci0+cG9zX2RvbmU7Cit9CisKKy8qIEFjcXVpcmUgYW5kIHN0YXJ0IGR1cGxleCBzdHJlYW1zOgorICogdHlwZSBpcyBlaXRoZXIgTElORTZfU1RSRUFNX0lNUFVMU0Ugb3IgTElORTZfU1RSRUFNX01PTklUT1IKKyAqLworaW50IGxpbmU2X3BjbV9hY3F1aXJlKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSwgaW50IHR5cGUpCit7CisJc3RydWN0IGxpbmU2X3BjbV9zdHJlYW0gKnBzdHI7CisJaW50IHJldCA9IDAsIGRpcjsKKworCW11dGV4X2xvY2soJmxpbmU2cGNtLT5zdGF0ZV9tdXRleCk7CisJZm9yIChkaXIgPSAwOyBkaXIgPCAyOyBkaXIrKykgeworCQlwc3RyID0gZ2V0X3N0cmVhbShsaW5lNnBjbSwgZGlyKTsKKwkJcmV0ID0gbGluZTZfYnVmZmVyX2FjcXVpcmUobGluZTZwY20sIHBzdHIsIHR5cGUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJCWlmICghcHN0ci0+cnVubmluZykKKwkJCWxpbmU2X3dhaXRfY2xlYXJfYXVkaW9fdXJicyhsaW5lNnBjbSwgcHN0cik7CisJfQorCWZvciAoZGlyID0gMDsgZGlyIDwgMjsgZGlyKyspIHsKKwkJcmV0ID0gbGluZTZfc3RyZWFtX3N0YXJ0KGxpbmU2cGNtLCBkaXIsIHR5cGUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyb3I7CisJfQorIGVycm9yOgorCW11dGV4X3VubG9jaygmbGluZTZwY20tPnN0YXRlX211dGV4KTsKKwlpZiAocmV0IDwgMCkKKwkJbGluZTZfcGNtX3JlbGVhc2UobGluZTZwY20sIHR5cGUpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsaW5lNl9wY21fYWNxdWlyZSk7CisKKy8qIFN0b3AgYW5kIHJlbGVhc2UgZHVwbGV4IHN0cmVhbXMgKi8KK3ZvaWQgbGluZTZfcGNtX3JlbGVhc2Uoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgbGluZTZfcGNtX3N0cmVhbSAqcHN0cjsKKwlpbnQgZGlyOworCisJbXV0ZXhfbG9jaygmbGluZTZwY20tPnN0YXRlX211dGV4KTsKKwlmb3IgKGRpciA9IDA7IGRpciA8IDI7IGRpcisrKQorCQlsaW5lNl9zdHJlYW1fc3RvcChsaW5lNnBjbSwgZGlyLCB0eXBlKTsKKwlmb3IgKGRpciA9IDA7IGRpciA8IDI7IGRpcisrKSB7CisJCXBzdHIgPSBnZXRfc3RyZWFtKGxpbmU2cGNtLCBkaXIpOworCQlsaW5lNl9idWZmZXJfcmVsZWFzZShsaW5lNnBjbSwgcHN0ciwgdHlwZSk7CisJfQorCW11dGV4X3VubG9jaygmbGluZTZwY20tPnN0YXRlX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGxpbmU2X3BjbV9yZWxlYXNlKTsKKworLyogY29tbW9uIFBDTSBod19wYXJhbXMgY2FsbGJhY2sgKi8KK2ludCBzbmRfbGluZTZfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpod19wYXJhbXMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IGxpbmU2X3BjbV9zdHJlYW0gKnBzdHIgPSBnZXRfc3RyZWFtKGxpbmU2cGNtLCBzdWJzdHJlYW0tPnN0cmVhbSk7CisKKwltdXRleF9sb2NrKCZsaW5lNnBjbS0+c3RhdGVfbXV0ZXgpOworCXJldCA9IGxpbmU2X2J1ZmZlcl9hY3F1aXJlKGxpbmU2cGNtLCBwc3RyLCBMSU5FNl9TVFJFQU1fUENNKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IHNuZF9wY21fbGliX21hbGxvY19wYWdlcyhzdWJzdHJlYW0sCisJCQkJICAgICAgIHBhcmFtc19idWZmZXJfYnl0ZXMoaHdfcGFyYW1zKSk7CisJaWYgKHJldCA8IDApIHsKKwkJbGluZTZfYnVmZmVyX3JlbGVhc2UobGluZTZwY20sIHBzdHIsIExJTkU2X1NUUkVBTV9QQ00pOworCQlnb3RvIGVycm9yOworCX0KKworCXBzdHItPnBlcmlvZCA9IHBhcmFtc19wZXJpb2RfYnl0ZXMoaHdfcGFyYW1zKTsKKyBlcnJvcjoKKwltdXRleF91bmxvY2soJmxpbmU2cGNtLT5zdGF0ZV9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworLyogY29tbW9uIFBDTSBod19mcmVlIGNhbGxiYWNrICovCitpbnQgc25kX2xpbmU2X2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBsaW5lNl9wY21fc3RyZWFtICpwc3RyID0gZ2V0X3N0cmVhbShsaW5lNnBjbSwgc3Vic3RyZWFtLT5zdHJlYW0pOworCisJbXV0ZXhfbG9jaygmbGluZTZwY20tPnN0YXRlX211dGV4KTsKKwlsaW5lNl9idWZmZXJfcmVsZWFzZShsaW5lNnBjbSwgcHN0ciwgTElORTZfU1RSRUFNX1BDTSk7CisJbXV0ZXhfdW5sb2NrKCZsaW5lNnBjbS0+c3RhdGVfbXV0ZXgpOworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKKworLyogY29udHJvbCBpbmZvIGNhbGxiYWNrICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9jb250cm9sX3BsYXliYWNrX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJdWluZm8tPnR5cGUgPSBTTkRSVl9DVExfRUxFTV9UWVBFX0lOVEVHRVI7CisJdWluZm8tPmNvdW50ID0gMjsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5taW4gPSAwOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1heCA9IDI1NjsKKwlyZXR1cm4gMDsKK30KKworLyogY29udHJvbCBnZXQgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX2xpbmU2X2NvbnRyb2xfcGxheWJhY2tfZ2V0KHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCQkgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCWludCBpOworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlW2ldID0gbGluZTZwY20tPnZvbHVtZV9wbGF5YmFja1tpXTsKKworCXJldHVybiAwOworfQorCisvKiBjb250cm9sIHB1dCBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfbGluZTZfY29udHJvbF9wbGF5YmFja19wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJCSAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJaW50IGksIGNoYW5nZWQgPSAwOworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCWlmIChsaW5lNnBjbS0+dm9sdW1lX3BsYXliYWNrW2ldICE9CisJCSAgICB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVtpXSkgeworCQkJbGluZTZwY20tPnZvbHVtZV9wbGF5YmFja1tpXSA9CisJCQkgICAgdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbaV07CisJCQljaGFuZ2VkID0gMTsKKwkJfQorCisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKKy8qIGNvbnRyb2wgZGVmaW5pdGlvbiAqLworc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGxpbmU2X2NvbnRyb2xzW10gPSB7CisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiUENNIFBsYXliYWNrIFZvbHVtZSIsCisJCS5pbmZvID0gc25kX2xpbmU2X2NvbnRyb2xfcGxheWJhY2tfaW5mbywKKwkJLmdldCA9IHNuZF9saW5lNl9jb250cm9sX3BsYXliYWNrX2dldCwKKwkJLnB1dCA9IHNuZF9saW5lNl9jb250cm9sX3BsYXliYWNrX3B1dAorCX0sCisJeworCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKKwkJLm5hbWUgPSAiSW1wdWxzZSBSZXNwb25zZSBWb2x1bWUiLAorCQkuaW5mbyA9IHNuZF9saW5lNl9pbXB1bHNlX3ZvbHVtZV9pbmZvLAorCQkuZ2V0ID0gc25kX2xpbmU2X2ltcHVsc2Vfdm9sdW1lX2dldCwKKwkJLnB1dCA9IHNuZF9saW5lNl9pbXB1bHNlX3ZvbHVtZV9wdXQKKwl9LAorCXsKKwkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJCS5uYW1lID0gIkltcHVsc2UgUmVzcG9uc2UgUGVyaW9kIiwKKwkJLmluZm8gPSBzbmRfbGluZTZfaW1wdWxzZV9wZXJpb2RfaW5mbywKKwkJLmdldCA9IHNuZF9saW5lNl9pbXB1bHNlX3BlcmlvZF9nZXQsCisJCS5wdXQgPSBzbmRfbGluZTZfaW1wdWxzZV9wZXJpb2RfcHV0CisJfSwKK307CisKKy8qCisJQ2xlYW51cCB0aGUgUENNIGRldmljZS4KKyovCitzdGF0aWMgdm9pZCBjbGVhbnVwX3VyYnMoc3RydWN0IGxpbmU2X3BjbV9zdHJlYW0gKnBjbXMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTElORTZfSVNPX0JVRkZFUlM7IGkrKykgeworCQlpZiAocGNtcy0+dXJic1tpXSkgeworCQkJdXNiX2tpbGxfdXJiKHBjbXMtPnVyYnNbaV0pOworCQkJdXNiX2ZyZWVfdXJiKHBjbXMtPnVyYnNbaV0pOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBsaW5lNl9jbGVhbnVwX3BjbShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9wY21fY2hpcChwY20pOworCisJY2xlYW51cF91cmJzKCZsaW5lNnBjbS0+b3V0KTsKKwljbGVhbnVwX3VyYnMoJmxpbmU2cGNtLT5pbik7CisJa2ZyZWUobGluZTZwY20pOworfQorCisvKiBjcmVhdGUgYSBQQ00gZGV2aWNlICovCitzdGF0aWMgaW50IHNuZF9saW5lNl9uZXdfcGNtKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LCBzdHJ1Y3Qgc25kX3BjbSAqKnBjbV9yZXQpCit7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlpbnQgZXJyOworCisJZXJyID0gc25kX3BjbV9uZXcobGluZTYtPmNhcmQsIChjaGFyICopbGluZTYtPnByb3BlcnRpZXMtPm5hbWUsCisJCQkgIDAsIDEsIDEsIHBjbV9yZXQpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCXBjbSA9ICpwY21fcmV0OworCXN0cmNweShwY20tPm5hbWUsIGxpbmU2LT5wcm9wZXJ0aWVzLT5uYW1lKTsKKworCS8qIHNldCBvcGVyYXRvcnMgKi8KKwlzbmRfcGNtX3NldF9vcHMocGNtLCBTTkRSVl9QQ01fU1RSRUFNX1BMQVlCQUNLLAorCQkJJnNuZF9saW5lNl9wbGF5YmFja19vcHMpOworCXNuZF9wY21fc2V0X29wcyhwY20sIFNORFJWX1BDTV9TVFJFQU1fQ0FQVFVSRSwgJnNuZF9saW5lNl9jYXB0dXJlX29wcyk7CisKKwkvKiBwcmUtYWxsb2NhdGlvbiBvZiBidWZmZXJzICovCisJc25kX3BjbV9saWJfcHJlYWxsb2NhdGVfcGFnZXNfZm9yX2FsbChwY20sIFNORFJWX0RNQV9UWVBFX0NPTlRJTlVPVVMsCisJCQkJCSAgICAgIHNuZF9kbWFfY29udGludW91c19kYXRhCisJCQkJCSAgICAgIChHRlBfS0VSTkVMKSwgNjQgKiAxMDI0LAorCQkJCQkgICAgICAxMjggKiAxMDI0KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKwlTeW5jIHdpdGggUENNIHN0cmVhbSBzdG9wcy4KKyovCit2b2lkIGxpbmU2X3BjbV9kaXNjb25uZWN0KHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSkKK3sKKwlsaW5lNl91bmxpbmtfYXVkaW9fdXJicyhsaW5lNnBjbSwgJmxpbmU2cGNtLT5vdXQpOworCWxpbmU2X3VubGlua19hdWRpb191cmJzKGxpbmU2cGNtLCAmbGluZTZwY20tPmluKTsKKwlsaW5lNl93YWl0X2NsZWFyX2F1ZGlvX3VyYnMobGluZTZwY20sICZsaW5lNnBjbS0+b3V0KTsKKwlsaW5lNl93YWl0X2NsZWFyX2F1ZGlvX3VyYnMobGluZTZwY20sICZsaW5lNnBjbS0+aW4pOworfQorCisvKgorCUNyZWF0ZSBhbmQgcmVnaXN0ZXIgdGhlIFBDTSBkZXZpY2UgYW5kIG1peGVyIGVudHJpZXMuCisJQ3JlYXRlIFVSQnMgZm9yIHBsYXliYWNrIGFuZCBjYXB0dXJlLgorKi8KK2ludCBsaW5lNl9pbml0X3BjbShzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwKKwkJICAgc3RydWN0IGxpbmU2X3BjbV9wcm9wZXJ0aWVzICpwcm9wZXJ0aWVzKQoreworCWludCBpLCBlcnI7CisJdW5zaWduZWQgZXBfcmVhZCA9IGxpbmU2LT5wcm9wZXJ0aWVzLT5lcF9hdWRpb19yOworCXVuc2lnbmVkIGVwX3dyaXRlID0gbGluZTYtPnByb3BlcnRpZXMtPmVwX2F1ZGlvX3c7CisJc3RydWN0IHNuZF9wY20gKnBjbTsKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY207CisKKwlpZiAoIShsaW5lNi0+cHJvcGVydGllcy0+Y2FwYWJpbGl0aWVzICYgTElORTZfQ0FQX1BDTSkpCisJCXJldHVybiAwOwkvKiBza2lwIFBDTSBpbml0aWFsaXphdGlvbiBhbmQgcmVwb3J0IHN1Y2Nlc3MgKi8KKworCWVyciA9IHNuZF9saW5lNl9uZXdfcGNtKGxpbmU2LCAmcGNtKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWxpbmU2cGNtID0ga3phbGxvYyhzaXplb2YoKmxpbmU2cGNtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsaW5lNnBjbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltdXRleF9pbml0KCZsaW5lNnBjbS0+c3RhdGVfbXV0ZXgpOworCWxpbmU2cGNtLT5wY20gPSBwY207CisJbGluZTZwY20tPnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworCWxpbmU2cGNtLT52b2x1bWVfcGxheWJhY2tbMF0gPSBsaW5lNnBjbS0+dm9sdW1lX3BsYXliYWNrWzFdID0gMjU1OworCWxpbmU2cGNtLT52b2x1bWVfbW9uaXRvciA9IDI1NTsKKwlsaW5lNnBjbS0+bGluZTYgPSBsaW5lNjsKKworCS8qIFJlYWQgYW5kIHdyaXRlIGJ1ZmZlcnMgYXJlIHNpemVkIGlkZW50aWNhbGx5LCBzbyBjaG9vc2UgbWluaW11bSAqLworCWxpbmU2cGNtLT5tYXhfcGFja2V0X3NpemUgPSBtaW4oCisJCQl1c2JfbWF4cGFja2V0KGxpbmU2LT51c2JkZXYsCisJCQkJdXNiX3Jjdmlzb2NwaXBlKGxpbmU2LT51c2JkZXYsIGVwX3JlYWQpLCAwKSwKKwkJCXVzYl9tYXhwYWNrZXQobGluZTYtPnVzYmRldiwKKwkJCQl1c2Jfc25kaXNvY3BpcGUobGluZTYtPnVzYmRldiwgZXBfd3JpdGUpLCAxKSk7CisKKwlzcGluX2xvY2tfaW5pdCgmbGluZTZwY20tPm91dC5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmbGluZTZwY20tPmluLmxvY2spOworCWxpbmU2cGNtLT5pbXB1bHNlX3BlcmlvZCA9IExJTkU2X0lNUFVMU0VfREVGQVVMVF9QRVJJT0Q7CisKKwlsaW5lNi0+bGluZTZwY20gPSBsaW5lNnBjbTsKKworCXBjbS0+cHJpdmF0ZV9kYXRhID0gbGluZTZwY207CisJcGNtLT5wcml2YXRlX2ZyZWUgPSBsaW5lNl9jbGVhbnVwX3BjbTsKKworCWVyciA9IGxpbmU2X2NyZWF0ZV9hdWRpb19vdXRfdXJicyhsaW5lNnBjbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBsaW5lNl9jcmVhdGVfYXVkaW9faW5fdXJicyhsaW5lNnBjbSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBtaXhlcjogKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsaW5lNl9jb250cm9scyk7IGkrKykgeworCQllcnIgPSBzbmRfY3RsX2FkZChsaW5lNi0+Y2FyZCwKKwkJCQkgIHNuZF9jdGxfbmV3MSgmbGluZTZfY29udHJvbHNbaV0sIGxpbmU2cGNtKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGxpbmU2X2luaXRfcGNtKTsKKworLyogcHJlcGFyZSBwY20gY2FsbGJhY2sgKi8KK2ludCBzbmRfbGluZTZfcHJlcGFyZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBzbmRfcGNtX3N1YnN0cmVhbV9jaGlwKHN1YnN0cmVhbSk7CisJc3RydWN0IGxpbmU2X3BjbV9zdHJlYW0gKnBzdHIgPSBnZXRfc3RyZWFtKGxpbmU2cGNtLCBzdWJzdHJlYW0tPnN0cmVhbSk7CisKKwltdXRleF9sb2NrKCZsaW5lNnBjbS0+c3RhdGVfbXV0ZXgpOworCWlmICghcHN0ci0+cnVubmluZykKKwkJbGluZTZfd2FpdF9jbGVhcl9hdWRpb191cmJzKGxpbmU2cGNtLCBwc3RyKTsKKworCWlmICghdGVzdF9hbmRfc2V0X2JpdChMSU5FNl9GTEFHX1BSRVBBUkVELCAmbGluZTZwY20tPmZsYWdzKSkgeworCQlsaW5lNnBjbS0+b3V0LmNvdW50ID0gMDsKKwkJbGluZTZwY20tPm91dC5wb3MgPSAwOworCQlsaW5lNnBjbS0+b3V0LnBvc19kb25lID0gMDsKKwkJbGluZTZwY20tPm91dC5ieXRlcyA9IDA7CisJCWxpbmU2cGNtLT5pbi5jb3VudCA9IDA7CisJCWxpbmU2cGNtLT5pbi5wb3NfZG9uZSA9IDA7CisJCWxpbmU2cGNtLT5pbi5ieXRlcyA9IDA7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZsaW5lNnBjbS0+c3RhdGVfbXV0ZXgpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2xpbmU2L3BjbS5oIGIvc291bmQvdXNiL2xpbmU2L3BjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwODQxMGEKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvbGluZTYvcGNtLmgKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBMaW5lIDYgTGludXggVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKy8qCisJUENNIGludGVyZmFjZSB0byBQT0Qgc2VyaWVzIGRldmljZXMuCisqLworCisjaWZuZGVmIFBDTV9ICisjZGVmaW5lIFBDTV9ICisKKyNpbmNsdWRlIDxzb3VuZC9wY20uaD4KKworI2luY2x1ZGUgImRyaXZlci5oIgorCisvKiBudW1iZXIgb2YgVVJCcyAqLworI2RlZmluZSBMSU5FNl9JU09fQlVGRkVSUwkyCisKKy8qCisJbnVtYmVyIG9mIFVTQiBmcmFtZXMgcGVyIFVSQgorCVRoZSBMaW5lIDYgV2luZG93cyBkcml2ZXIgYWx3YXlzIHRyYW5zbWl0cyB0d28gZnJhbWVzIHBlciBwYWNrZXQsIGJ1dAorCXRoZSBMaW51eCBkcml2ZXIgcGVyZm9ybXMgc2lnbmlmaWNhbnRseSBiZXR0ZXIgKGkuZS4sIGxvd2VyIGxhdGVuY3kpCisJd2l0aCBvbmx5IG9uZSBmcmFtZSBwZXIgcGFja2V0LgorKi8KKyNkZWZpbmUgTElORTZfSVNPX1BBQ0tFVFMJMQorCisvKiBpbiBhICJmdWxsIHNwZWVkIiBkZXZpY2UgKHN1Y2ggYXMgdGhlIFBPRHh0IFBybykgdGhpcyBtZWFucyAxbXMgKi8KKyNkZWZpbmUgTElORTZfSVNPX0lOVEVSVkFMCTEKKworI2RlZmluZSBMSU5FNl9JTVBVTFNFX0RFRkFVTFRfUEVSSU9EIDEwMAorCisvKgorCUdldCBzdWJzdHJlYW0gZnJvbSBMaW5lIDYgUENNIGRhdGEgc3RydWN0dXJlCisqLworI2RlZmluZSBnZXRfc3Vic3RyZWFtKGxpbmU2cGNtLCBzdHJlYW0pCVwKKwkJKGxpbmU2cGNtLT5wY20tPnN0cmVhbXNbc3RyZWFtXS5zdWJzdHJlYW0pCisKKy8qCisJUENNIG1vZGUgYml0cy4KKworCVRoZXJlIGFyZSBzZXZlcmFsIGZlYXR1cmVzIG9mIHRoZSBMaW5lIDYgVVNCIGRyaXZlciB3aGljaCByZXF1aXJlIFBDTQorCWRhdGEgdG8gYmUgZXhjaGFuZ2VkIHdpdGggdGhlIGRldmljZToKKwkqKSBQQ00gcGxheWJhY2sgYW5kIGNhcHR1cmUgdmlhIEFMU0EKKwkqKSBzb2Z0d2FyZSBtb25pdG9yaW5nIChmb3IgZGV2aWNlcyB3aXRob3V0IGhhcmR3YXJlIG1vbml0b3JpbmcpCisJKikgb3B0aW9uYWwgaW1wdWxzZSByZXNwb25zZSBtZWFzdXJlbWVudAorCUhvd2V2ZXIsIGZyb20gdGhlIGRldmljZSdzIHBvaW50IG9mIHZpZXcsIHRoZXJlIGlzIGp1c3QgYSBzaW5nbGUKKwljYXB0dXJlIGFuZCBwbGF5YmFjayBzdHJlYW0sIHdoaWNoIG11c3QgYmUgc2hhcmVkIGJldHdlZW4gdGhlc2UKKwlzdWJzeXN0ZW1zLiBJdCBpcyB0aGVyZWZvcmUgbmVjZXNzYXJ5IHRvIG1haW50YWluIHRoZSBzdGF0ZSBvZiB0aGUKKwlzdWJzeXN0ZW1zIHdpdGggcmVzcGVjdCB0byBQQ00gdXNhZ2UuCisKKwlXZSBkZWZpbmUgdHdvIGJpdCBmbGFncywgIm9wZW5lZCIgYW5kICJydW5uaW5nIiwgZm9yIGVhY2ggcGxheWJhY2sKKwlvciBjYXB0dXJlIHN0cmVhbS4gIEJvdGggY2FuIGNvbnRhaW4gdGhlIGJpdCBmbGFnIGNvcnJlc3BvbmRpbmcgdG8KKwlMSU5FNl9TVFJFQU1fKiB0eXBlLAorCSAgTElORTZfU1RSRUFNX1BDTSA9IEFMU0EgUENNIHBsYXliYWNrIG9yIGNhcHR1cmUKKwkgIExJTkU2X1NUUkVBTV9NT05JVE9SID0gc29mdHdhcmUgbW9uaXRvcmluZworCSAgSU1QVUxTRSA9IG9wdGlvbmFsIGltcHVsc2UgcmVzcG9uc2UgbWVhc3VyZW1lbnQKKwlUaGUgb3BlbmVkIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQgd2hpbGUKKwl0aGUgcnVubmluZyBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHRoZSBzdHJlYW0gaXMgcnVubmluZy4KKworCUZvciBtb25pdG9yIG9yIGltcHVsc2Ugb3BlcmF0aW9ucywgdGhlIGRyaXZlciBuZWVkcyB0byBjYWxsCisJbGluZTZfcGNtX2FjcXVpcmUoKSBvciBsaW5lNl9wY21fcmVsZWFzZSgpIHdpdGggdGhlIGFwcHJvcHJpYXRlCisJTElORTZfU1RSRUFNXyogZmxhZy4KKyovCisKKy8qIHN0cmVhbSB0eXBlcyAqLworZW51bSB7CisJTElORTZfU1RSRUFNX1BDTSwKKwlMSU5FNl9TVFJFQU1fTU9OSVRPUiwKKwlMSU5FNl9TVFJFQU1fSU1QVUxTRSwKK307CisKKy8qIG1pc2MgYml0IGZsYWdzIGZvciBQQ00gb3BlcmF0aW9uICovCitlbnVtIHsKKwlMSU5FNl9GTEFHX1BBVVNFX1BMQVlCQUNLLAorCUxJTkU2X0ZMQUdfUFJFUEFSRUQsCit9OworCitzdHJ1Y3QgbGluZTZfcGNtX3Byb3BlcnRpZXMgeworCXN0cnVjdCBzbmRfcGNtX2hhcmR3YXJlIHBsYXliYWNrX2h3LCBjYXB0dXJlX2h3OworCXN0cnVjdCBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfcmF0ZGVucyByYXRlczsKKwlpbnQgYnl0ZXNfcGVyX2ZyYW1lOworfTsKKworc3RydWN0IGxpbmU2X3BjbV9zdHJlYW0geworCS8qIGFsbG9jYXRlZCBVUkJzICovCisJc3RydWN0IHVyYiAqdXJic1tMSU5FNl9JU09fQlVGRkVSU107CisKKwkvKiBUZW1wb3JhcnkgYnVmZmVyOworCSAqIFNpbmNlIHRoZSBwYWNrZXQgc2l6ZSBpcyBub3Qga25vd24gaW4gYWR2YW5jZSwgdGhpcyBidWZmZXIgaXMKKwkgKiBsYXJnZSBlbm91Z2ggdG8gc3RvcmUgbWF4aW11bSBzaXplIHBhY2tldHMuCisJICovCisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCisJLyogRnJlZSBmcmFtZSBwb3NpdGlvbiBpbiB0aGUgYnVmZmVyLiAqLworCXNuZF9wY21fdWZyYW1lc190IHBvczsKKworCS8qIENvdW50IHByb2Nlc3NlZCBieXRlczsKKwkgKiBUaGlzIGlzIG1vZHVsbyBwZXJpb2Qgc2l6ZSAodG8gZGV0ZXJtaW5lIHdoZW4gYSBwZXJpb2QgaXMgZmluaXNoZWQpLgorCSAqLworCXVuc2lnbmVkIGJ5dGVzOworCisJLyogQ291bnRlciB0byBjcmVhdGUgZGVzaXJlZCBzYW1wbGUgcmF0ZSAqLworCXVuc2lnbmVkIGNvdW50OworCisJLyogcGVyaW9kIHNpemUgaW4gYnl0ZXMgKi8KKwl1bnNpZ25lZCBwZXJpb2Q7CisKKwkvKiBQcm9jZXNzZWQgZnJhbWUgcG9zaXRpb24gaW4gdGhlIGJ1ZmZlcjsKKwkgKiBUaGUgY29udGVudHMgb2YgdGhlIHJpbmcgYnVmZmVyIGhhdmUgYmVlbiBjb25zdW1lZCBieSB0aGUgVVNCCisJICogc3Vic3lzdGVtIChpLmUuLCBzZW50IHRvIHRoZSBVU0IgZGV2aWNlKSB1cCB0byB0aGlzIHBvc2l0aW9uLgorCSAqLworCXNuZF9wY21fdWZyYW1lc190IHBvc19kb25lOworCisJLyogQml0IG1hc2sgb2YgYWN0aXZlIFVSQnMgKi8KKwl1bnNpZ25lZCBsb25nIGFjdGl2ZV91cmJzOworCisJLyogQml0IG1hc2sgb2YgVVJCcyBjdXJyZW50bHkgYmVpbmcgdW5saW5rZWQgKi8KKwl1bnNpZ25lZCBsb25nIHVubGlua191cmJzOworCisJLyogU3BpbiBsb2NrIHRvIHByb3RlY3QgdXBkYXRlcyBvZiB0aGUgYnVmZmVyIHBvc2l0aW9ucyAobm90IGNvbnRlbnRzKQorCSAqLworCXNwaW5sb2NrX3QgbG9jazsKKworCS8qIEJpdCBmbGFncyBmb3Igb3BlcmF0aW9uYWwgc3RyZWFtIHR5cGVzICovCisJdW5zaWduZWQgbG9uZyBvcGVuZWQ7CisKKwkvKiBCaXQgZmxhZ3MgZm9yIHJ1bm5pbmcgc3RyZWFtIHR5cGVzICovCisJdW5zaWduZWQgbG9uZyBydW5uaW5nOworCisJaW50IGxhc3RfZnJhbWU7Cit9OworCitzdHJ1Y3Qgc25kX2xpbmU2X3BjbSB7CisJLyogUG9pbnRlciBiYWNrIHRvIHRoZSBMaW5lIDYgZHJpdmVyIGRhdGEgc3RydWN0dXJlICovCisJc3RydWN0IHVzYl9saW5lNiAqbGluZTY7CisKKwkvKiBQcm9wZXJ0aWVzLiAqLworCXN0cnVjdCBsaW5lNl9wY21fcHJvcGVydGllcyAqcHJvcGVydGllczsKKworCS8qIEFMU0EgcGNtIHN0cmVhbSAqLworCXN0cnVjdCBzbmRfcGNtICpwY207CisKKwkvKiBwcm90ZWN0aW9uIHRvIHN0YXRlIGNoYW5nZXMgb2YgaW4vb3V0IHN0cmVhbXMgKi8KKwlzdHJ1Y3QgbXV0ZXggc3RhdGVfbXV0ZXg7CisKKwkvKiBDYXB0dXJlIGFuZCBwbGF5YmFjayBzdHJlYW1zICovCisJc3RydWN0IGxpbmU2X3BjbV9zdHJlYW0gaW47CisJc3RydWN0IGxpbmU2X3BjbV9zdHJlYW0gb3V0OworCisJLyogUHJldmlvdXNseSBjYXB0dXJlZCBmcmFtZSAoZm9yIHNvZnR3YXJlIG1vbml0b3JpbmcpICovCisJdW5zaWduZWQgY2hhciAqcHJldl9mYnVmOworCisJLyogU2l6ZSBvZiBwcmV2aW91c2x5IGNhcHR1cmVkIGZyYW1lIChmb3Igc29mdHdhcmUgbW9uaXRvcmluZykgKi8KKwlpbnQgcHJldl9mc2l6ZTsKKworCS8qIE1heGltdW0gc2l6ZSBvZiBVU0IgcGFja2V0ICovCisJaW50IG1heF9wYWNrZXRfc2l6ZTsKKworCS8qIFBDTSBwbGF5YmFjayB2b2x1bWUgKGxlZnQgYW5kIHJpZ2h0KSAqLworCWludCB2b2x1bWVfcGxheWJhY2tbMl07CisKKwkvKiBQQ00gbW9uaXRvciB2b2x1bWUgKi8KKwlpbnQgdm9sdW1lX21vbml0b3I7CisKKwkvKiBWb2x1bWUgb2YgaW1wdWxzZSByZXNwb25zZSB0ZXN0IHNpZ25hbCAoaWYgemVybywgdGVzdCBpcyBkaXNhYmxlZCkgKi8KKwlpbnQgaW1wdWxzZV92b2x1bWU7CisKKwkvKiBQZXJpb2Qgb2YgaW1wdWxzZSByZXNwb25zZSB0ZXN0IHNpZ25hbCAqLworCWludCBpbXB1bHNlX3BlcmlvZDsKKworCS8qIENvdW50ZXIgZm9yIGltcHVsc2UgcmVzcG9uc2UgdGVzdCBzaWduYWwgKi8KKwlpbnQgaW1wdWxzZV9jb3VudDsKKworCS8qIFNldmVyYWwgc3RhdHVzIGJpdHMgKHNlZSBMSU5FNl9GTEFHXyopICovCisJdW5zaWduZWQgbG9uZyBmbGFnczsKK307CisKK2V4dGVybiBpbnQgbGluZTZfaW5pdF9wY20oc3RydWN0IHVzYl9saW5lNiAqbGluZTYsCisJCQkgIHN0cnVjdCBsaW5lNl9wY21fcHJvcGVydGllcyAqcHJvcGVydGllcyk7CitleHRlcm4gaW50IHNuZF9saW5lNl90cmlnZ2VyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLCBpbnQgY21kKTsKK2V4dGVybiBpbnQgc25kX2xpbmU2X3ByZXBhcmUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOworZXh0ZXJuIGludCBzbmRfbGluZTZfaHdfcGFyYW1zKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtLAorCQkJICAgICAgIHN0cnVjdCBzbmRfcGNtX2h3X3BhcmFtcyAqaHdfcGFyYW1zKTsKK2V4dGVybiBpbnQgc25kX2xpbmU2X2h3X2ZyZWUoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pOworZXh0ZXJuIHNuZF9wY21fdWZyYW1lc190IHNuZF9saW5lNl9wb2ludGVyKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKTsKK2V4dGVybiB2b2lkIGxpbmU2X3BjbV9kaXNjb25uZWN0KHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSk7CitleHRlcm4gaW50IGxpbmU2X3BjbV9hY3F1aXJlKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSwgaW50IHR5cGUpOworZXh0ZXJuIHZvaWQgbGluZTZfcGNtX3JlbGVhc2Uoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtLCBpbnQgdHlwZSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2xpbmU2L3BsYXliYWNrLmMgYi9zb3VuZC91c2IvbGluZTYvcGxheWJhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWRlZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvc291bmQvdXNiL2xpbmU2L3BsYXliYWNrLmMKQEAgLTAsMCArMSw0MjkgQEAKKy8qCisgKiBMaW5lIDYgTGludXggVVNCIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE1hcmt1cyBHcmFibmVyIChncmFibmVyQGljZy50dWdyYXouYXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KKworI2luY2x1ZGUgImNhcHR1cmUuaCIKKyNpbmNsdWRlICJkcml2ZXIuaCIKKyNpbmNsdWRlICJwY20uaCIKKyNpbmNsdWRlICJwbGF5YmFjay5oIgorCisvKgorCVNvZnR3YXJlIHN0ZXJlbyB2b2x1bWUgY29udHJvbC4KKyovCitzdGF0aWMgdm9pZCBjaGFuZ2Vfdm9sdW1lKHN0cnVjdCB1cmIgKnVyYl9vdXQsIGludCB2b2x1bWVbXSwKKwkJCSAgaW50IGJ5dGVzX3Blcl9mcmFtZSkKK3sKKwlpbnQgY2huID0gMDsKKworCWlmICh2b2x1bWVbMF0gPT0gMjU2ICYmIHZvbHVtZVsxXSA9PSAyNTYpCisJCXJldHVybjsJCS8qIG1heGltdW0gdm9sdW1lIC0gbm8gY2hhbmdlICovCisKKwlpZiAoYnl0ZXNfcGVyX2ZyYW1lID09IDQpIHsKKwkJX19sZTE2ICpwLCAqYnVmX2VuZDsKKworCQlwID0gKF9fbGUxNiAqKXVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlcjsKKwkJYnVmX2VuZCA9IHAgKyB1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC8gc2l6ZW9mKCpwKTsKKworCQlmb3IgKDsgcCA8IGJ1Zl9lbmQ7ICsrcCkgeworCQkJc2hvcnQgcHYgPSBsZTE2X3RvX2NwdSgqcCk7CisJCQlpbnQgdmFsID0gKHB2ICogdm9sdW1lW2NobiAmIDFdKSA+PiA4OworCQkJcHYgPSBjbGFtcCh2YWwsIDB4N2ZmZiwgLTB4ODAwMCk7CisJCQkqcCA9IGNwdV90b19sZTE2KHB2KTsKKwkJCSsrY2huOworCQl9CisJfSBlbHNlIGlmIChieXRlc19wZXJfZnJhbWUgPT0gNikgeworCQl1bnNpZ25lZCBjaGFyICpwLCAqYnVmX2VuZDsKKworCQlwID0gKHVuc2lnbmVkIGNoYXIgKil1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXI7CisJCWJ1Zl9lbmQgPSBwICsgdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKworCQlmb3IgKDsgcCA8IGJ1Zl9lbmQ7IHAgKz0gMykgeworCQkJaW50IHZhbDsKKworCQkJdmFsID0gcFswXSArIChwWzFdIDw8IDgpICsgKChzaWduZWQgY2hhcilwWzJdIDw8IDE2KTsKKwkJCXZhbCA9ICh2YWwgKiB2b2x1bWVbY2huICYgMV0pID4+IDg7CisJCQl2YWwgPSBjbGFtcCh2YWwsIDB4N2ZmZmZmLCAtMHg4MDAwMDApOworCQkJcFswXSA9IHZhbDsKKwkJCXBbMV0gPSB2YWwgPj4gODsKKwkJCXBbMl0gPSB2YWwgPj4gMTY7CisJCQkrK2NobjsKKwkJfQorCX0KK30KKworLyoKKwlDcmVhdGUgc2lnbmFsIGZvciBpbXB1bHNlIHJlc3BvbnNlIHRlc3QuCisqLworc3RhdGljIHZvaWQgY3JlYXRlX2ltcHVsc2VfdGVzdF9zaWduYWwoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtLAorCQkJCSAgICAgICBzdHJ1Y3QgdXJiICp1cmJfb3V0LCBpbnQgYnl0ZXNfcGVyX2ZyYW1lKQoreworCWludCBmcmFtZXMgPSB1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC8gYnl0ZXNfcGVyX2ZyYW1lOworCisJaWYgKGJ5dGVzX3Blcl9mcmFtZSA9PSA0KSB7CisJCWludCBpOworCQlzaG9ydCAqcGkgPSAoc2hvcnQgKilsaW5lNnBjbS0+cHJldl9mYnVmOworCQlzaG9ydCAqcG8gPSAoc2hvcnQgKil1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXI7CisKKwkJZm9yIChpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7CisJCQlwb1swXSA9IHBpWzBdOworCQkJcG9bMV0gPSAwOworCQkJcGkgKz0gMjsKKwkJCXBvICs9IDI7CisJCX0KKwl9IGVsc2UgaWYgKGJ5dGVzX3Blcl9mcmFtZSA9PSA2KSB7CisJCWludCBpLCBqOworCQl1bnNpZ25lZCBjaGFyICpwaSA9IGxpbmU2cGNtLT5wcmV2X2ZidWY7CisJCXVuc2lnbmVkIGNoYXIgKnBvID0gdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyOworCisJCWZvciAoaSA9IDA7IGkgPCBmcmFtZXM7ICsraSkgeworCQkJZm9yIChqID0gMDsgaiA8IGJ5dGVzX3Blcl9mcmFtZSAvIDI7ICsraikKKwkJCQlwb1tqXSA9IHBpW2pdOworCisJCQlmb3IgKDsgaiA8IGJ5dGVzX3Blcl9mcmFtZTsgKytqKQorCQkJCXBvW2pdID0gMDsKKworCQkJcGkgKz0gYnl0ZXNfcGVyX2ZyYW1lOworCQkJcG8gKz0gYnl0ZXNfcGVyX2ZyYW1lOworCQl9CisJfQorCWlmICgtLWxpbmU2cGNtLT5pbXB1bHNlX2NvdW50IDw9IDApIHsKKwkJKCh1bnNpZ25lZCBjaGFyICopKHVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlcikpW2J5dGVzX3Blcl9mcmFtZSAtCisJCQkJCQkJICAgICAgMV0gPQorCQkgICAgbGluZTZwY20tPmltcHVsc2Vfdm9sdW1lOworCQlsaW5lNnBjbS0+aW1wdWxzZV9jb3VudCA9IGxpbmU2cGNtLT5pbXB1bHNlX3BlcmlvZDsKKwl9Cit9CisKKy8qCisJQWRkIHNpZ25hbCB0byBidWZmZXIgZm9yIHNvZnR3YXJlIG1vbml0b3JpbmcuCisqLworc3RhdGljIHZvaWQgYWRkX21vbml0b3Jfc2lnbmFsKHN0cnVjdCB1cmIgKnVyYl9vdXQsIHVuc2lnbmVkIGNoYXIgKnNpZ25hbCwKKwkJCSAgICAgICBpbnQgdm9sdW1lLCBpbnQgYnl0ZXNfcGVyX2ZyYW1lKQoreworCWlmICh2b2x1bWUgPT0gMCkKKwkJcmV0dXJuOwkJLyogemVybyB2b2x1bWUgLSBubyBjaGFuZ2UgKi8KKworCWlmIChieXRlc19wZXJfZnJhbWUgPT0gNCkgeworCQlfX2xlMTYgKnBpLCAqcG8sICpidWZfZW5kOworCisJCXBpID0gKF9fbGUxNiAqKXNpZ25hbDsKKwkJcG8gPSAoX19sZTE2ICopdXJiX291dC0+dHJhbnNmZXJfYnVmZmVyOworCQlidWZfZW5kID0gcG8gKyB1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC8gc2l6ZW9mKCpwbyk7CisKKwkJZm9yICg7IHBvIDwgYnVmX2VuZDsgKytwaSwgKytwbykgeworCQkJc2hvcnQgcG92ID0gbGUxNl90b19jcHUoKnBvKTsKKwkJCXNob3J0IHBpdiA9IGxlMTZfdG9fY3B1KCpwaSk7CisJCQlpbnQgdmFsID0gcG92ICsgKChwaXYgKiB2b2x1bWUpID4+IDgpOworCQkJcG92ID0gY2xhbXAodmFsLCAweDdmZmYsIC0weDgwMDApOworCQkJKnBvID0gY3B1X3RvX2xlMTYocG92KTsKKwkJfQorCX0KKworCS8qCisJICAgV2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgZGV2aWNlcyB3aXRoIDYgYnl0ZXMgcGVyIGZyYW1lIGhlcmUKKwkgICBzaW5jZSB0aGV5IGFsbCBzdXBwb3J0IGhhcmR3YXJlIG1vbml0b3JpbmcuCisJICovCit9CisKKy8qCisJRmluZCBhIGZyZWUgVVJCLCBwcmVwYXJlIGF1ZGlvIGRhdGEsIGFuZCBzdWJtaXQgVVJCLgorCW11c3QgYmUgY2FsbGVkIGluIGxpbmU2cGNtLT5vdXQubG9jayBjb250ZXh0CisqLworc3RhdGljIGludCBzdWJtaXRfYXVkaW9fb3V0X3VyYihzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pCit7CisJaW50IGluZGV4OworCWludCBpLCB1cmJfc2l6ZSwgdXJiX2ZyYW1lczsKKwlpbnQgcmV0OworCWNvbnN0IGludCBieXRlc19wZXJfZnJhbWUgPSBsaW5lNnBjbS0+cHJvcGVydGllcy0+Ynl0ZXNfcGVyX2ZyYW1lOworCWNvbnN0IGludCBmcmFtZV9pbmNyZW1lbnQgPQorCQlsaW5lNnBjbS0+cHJvcGVydGllcy0+cmF0ZXMucmF0c1swXS5udW1fbWluOworCWNvbnN0IGludCBmcmFtZV9mYWN0b3IgPQorCQlsaW5lNnBjbS0+cHJvcGVydGllcy0+cmF0ZXMucmF0c1swXS5kZW4gKgorCQkoVVNCX0lOVEVSVkFMU19QRVJfU0VDT05EIC8gTElORTZfSVNPX0lOVEVSVkFMKTsKKwlzdHJ1Y3QgdXJiICp1cmJfb3V0OworCisJaW5kZXggPQorCSAgICBmaW5kX2ZpcnN0X3plcm9fYml0KCZsaW5lNnBjbS0+b3V0LmFjdGl2ZV91cmJzLCBMSU5FNl9JU09fQlVGRkVSUyk7CisKKwlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IExJTkU2X0lTT19CVUZGRVJTKSB7CisJCWRldl9lcnIobGluZTZwY20tPmxpbmU2LT5pZmNkZXYsICJubyBmcmVlIFVSQiBmb3VuZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXVyYl9vdXQgPSBsaW5lNnBjbS0+b3V0LnVyYnNbaW5kZXhdOworCXVyYl9zaXplID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9JU09fUEFDS0VUUzsgKytpKSB7CisJCS8qIGNvbXB1dGUgZnJhbWUgc2l6ZSBmb3IgZ2l2ZW4gc2FtcGxpbmcgcmF0ZSAqLworCQlpbnQgZnNpemUgPSAwOworCQlzdHJ1Y3QgdXNiX2lzb19wYWNrZXRfZGVzY3JpcHRvciAqZm91dCA9CisJCSAgICAmdXJiX291dC0+aXNvX2ZyYW1lX2Rlc2NbaV07CisKKwkJZnNpemUgPSBsaW5lNnBjbS0+cHJldl9mc2l6ZTsKKwkJaWYgKGZzaXplID09IDApIHsKKwkJCWludCBuOworCisJCQlsaW5lNnBjbS0+b3V0LmNvdW50ICs9IGZyYW1lX2luY3JlbWVudDsKKwkJCW4gPSBsaW5lNnBjbS0+b3V0LmNvdW50IC8gZnJhbWVfZmFjdG9yOworCQkJbGluZTZwY20tPm91dC5jb3VudCAtPSBuICogZnJhbWVfZmFjdG9yOworCQkJZnNpemUgPSBuICogYnl0ZXNfcGVyX2ZyYW1lOworCQl9CisKKwkJZm91dC0+b2Zmc2V0ID0gdXJiX3NpemU7CisJCWZvdXQtPmxlbmd0aCA9IGZzaXplOworCQl1cmJfc2l6ZSArPSBmc2l6ZTsKKwl9CisKKwlpZiAodXJiX3NpemUgPT0gMCkgeworCQkvKiBjYW4ndCBkZXRlcm1pbmUgVVJCIHNpemUgKi8KKwkJZGV2X2VycihsaW5lNnBjbS0+bGluZTYtPmlmY2RldiwgImRyaXZlciBidWc6IHVyYl9zaXplID0gMFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXVyYl9mcmFtZXMgPSB1cmJfc2l6ZSAvIGJ5dGVzX3Blcl9mcmFtZTsKKwl1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXIgPQorCSAgICBsaW5lNnBjbS0+b3V0LmJ1ZmZlciArCisJICAgIGluZGV4ICogTElORTZfSVNPX1BBQ0tFVFMgKiBsaW5lNnBjbS0+bWF4X3BhY2tldF9zaXplOworCXVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSB1cmJfc2l6ZTsKKwl1cmJfb3V0LT5jb250ZXh0ID0gbGluZTZwY207CisKKwlpZiAodGVzdF9iaXQoTElORTZfU1RSRUFNX1BDTSwgJmxpbmU2cGNtLT5vdXQucnVubmluZykgJiYKKwkgICAgIXRlc3RfYml0KExJTkU2X0ZMQUdfUEFVU0VfUExBWUJBQ0ssICZsaW5lNnBjbS0+ZmxhZ3MpKSB7CisJCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPQorCQkgICAgZ2V0X3N1YnN0cmVhbShsaW5lNnBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSyktPnJ1bnRpbWU7CisKKwkJaWYgKGxpbmU2cGNtLT5vdXQucG9zICsgdXJiX2ZyYW1lcyA+IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplKSB7CisJCQkvKgorCQkJICAgVGhlIHRyYW5zZmVycmVkIGFyZWEgZ29lcyBvdmVyIGJ1ZmZlciBib3VuZGFyeSwKKwkJCSAgIGNvcHkgdGhlIGRhdGEgdG8gdGhlIHRlbXAgYnVmZmVyLgorCQkJICovCisJCQlpbnQgbGVuOworCisJCQlsZW4gPSBydW50aW1lLT5idWZmZXJfc2l6ZSAtIGxpbmU2cGNtLT5vdXQucG9zOworCisJCQlpZiAobGVuID4gMCkgeworCQkJCW1lbWNweSh1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXIsCisJCQkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhICsKKwkJCQkgICAgICAgbGluZTZwY20tPm91dC5wb3MgKiBieXRlc19wZXJfZnJhbWUsCisJCQkJICAgICAgIGxlbiAqIGJ5dGVzX3Blcl9mcmFtZSk7CisJCQkJbWVtY3B5KHVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlciArCisJCQkJICAgICAgIGxlbiAqIGJ5dGVzX3Blcl9mcmFtZSwgcnVudGltZS0+ZG1hX2FyZWEsCisJCQkJICAgICAgICh1cmJfZnJhbWVzIC0gbGVuKSAqIGJ5dGVzX3Blcl9mcmFtZSk7CisJCQl9IGVsc2UKKwkJCQlkZXZfZXJyKGxpbmU2cGNtLT5saW5lNi0+aWZjZGV2LCAiZHJpdmVyIGJ1ZzogbGVuID0gJWRcbiIsCisJCQkJCWxlbik7CisJCX0gZWxzZSB7CisJCQltZW1jcHkodXJiX291dC0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICAgICAgIHJ1bnRpbWUtPmRtYV9hcmVhICsKKwkJCSAgICAgICBsaW5lNnBjbS0+b3V0LnBvcyAqIGJ5dGVzX3Blcl9mcmFtZSwKKwkJCSAgICAgICB1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJfQorCisJCWxpbmU2cGNtLT5vdXQucG9zICs9IHVyYl9mcmFtZXM7CisJCWlmIChsaW5lNnBjbS0+b3V0LnBvcyA+PSBydW50aW1lLT5idWZmZXJfc2l6ZSkKKwkJCWxpbmU2cGNtLT5vdXQucG9zIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCisJCWNoYW5nZV92b2x1bWUodXJiX291dCwgbGluZTZwY20tPnZvbHVtZV9wbGF5YmFjaywKKwkJCSAgICAgIGJ5dGVzX3Blcl9mcmFtZSk7CisJfSBlbHNlIHsKKwkJbWVtc2V0KHVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlciwgMCwKKwkJICAgICAgIHVyYl9vdXQtPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCX0KKworCXNwaW5fbG9ja19uZXN0ZWQoJmxpbmU2cGNtLT5pbi5sb2NrLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJaWYgKGxpbmU2cGNtLT5wcmV2X2ZidWYpIHsKKwkJaWYgKHRlc3RfYml0KExJTkU2X1NUUkVBTV9JTVBVTFNFLCAmbGluZTZwY20tPm91dC5ydW5uaW5nKSkgeworCQkJY3JlYXRlX2ltcHVsc2VfdGVzdF9zaWduYWwobGluZTZwY20sIHVyYl9vdXQsCisJCQkJCQkgICBieXRlc19wZXJfZnJhbWUpOworCQkJaWYgKHRlc3RfYml0KExJTkU2X1NUUkVBTV9QQ00sICZsaW5lNnBjbS0+aW4ucnVubmluZykpIHsKKwkJCQlsaW5lNl9jYXB0dXJlX2NvcHkobGluZTZwY20sCisJCQkJCQkgICB1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXIsCisJCQkJCQkgICB1cmJfb3V0LT4KKwkJCQkJCSAgIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQkJCWxpbmU2X2NhcHR1cmVfY2hlY2tfcGVyaW9kKGxpbmU2cGNtLAorCQkJCQl1cmJfb3V0LT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICghKGxpbmU2cGNtLT5saW5lNi0+cHJvcGVydGllcy0+Y2FwYWJpbGl0aWVzICYgTElORTZfQ0FQX0hXTU9OKQorCQkJICAgICYmIGxpbmU2cGNtLT5vdXQucnVubmluZyAmJiBsaW5lNnBjbS0+aW4ucnVubmluZykKKwkJCQlhZGRfbW9uaXRvcl9zaWduYWwodXJiX291dCwgbGluZTZwY20tPnByZXZfZmJ1ZiwKKwkJCQkJCSAgIGxpbmU2cGNtLT52b2x1bWVfbW9uaXRvciwKKwkJCQkJCSAgIGJ5dGVzX3Blcl9mcmFtZSk7CisJCX0KKwkJbGluZTZwY20tPnByZXZfZmJ1ZiA9IE5VTEw7CisJCWxpbmU2cGNtLT5wcmV2X2ZzaXplID0gMDsKKwl9CisJc3Bpbl91bmxvY2soJmxpbmU2cGNtLT5pbi5sb2NrKTsKKworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYl9vdXQsIEdGUF9BVE9NSUMpOworCisJaWYgKHJldCA9PSAwKQorCQlzZXRfYml0KGluZGV4LCAmbGluZTZwY20tPm91dC5hY3RpdmVfdXJicyk7CisJZWxzZQorCQlkZXZfZXJyKGxpbmU2cGNtLT5saW5lNi0+aWZjZGV2LAorCQkJIlVSQiBvdXQgIyVkIHN1Ym1pc3Npb24gZmFpbGVkICglZClcbiIsIGluZGV4LCByZXQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisJU3VibWl0IGFsbCBjdXJyZW50bHkgYXZhaWxhYmxlIHBsYXliYWNrIFVSQnMuCisJbXVzdCBiZSBjYWxsZWQgaW4gbGluZTZwY20tPm91dC5sb2NrIGNvbnRleHQKKyAqLworaW50IGxpbmU2X3N1Ym1pdF9hdWRpb19vdXRfYWxsX3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQoreworCWludCByZXQgPSAwLCBpOworCisJZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19CVUZGRVJTOyArK2kpIHsKKwkJcmV0ID0gc3VibWl0X2F1ZGlvX291dF91cmIobGluZTZwY20pOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qCisJQ2FsbGJhY2sgZm9yIGNvbXBsZXRlZCBwbGF5YmFjayBVUkIuCisqLworc3RhdGljIHZvaWQgYXVkaW9fb3V0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgaSwgaW5kZXgsIGxlbmd0aCA9IDAsIHNodXRkb3duID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IChzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqKXVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSA9CisJICAgIGdldF9zdWJzdHJlYW0obGluZTZwY20sIFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spOworCisjaWYgVVNFX0NMRUFSX0JVRkZFUl9XT1JLQVJPVU5ECisJbWVtc2V0KHVyYi0+dHJhbnNmZXJfYnVmZmVyLCAwLCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworI2VuZGlmCisKKwlsaW5lNnBjbS0+b3V0Lmxhc3RfZnJhbWUgPSB1cmItPnN0YXJ0X2ZyYW1lOworCisJLyogZmluZCBpbmRleCBvZiBVUkIgKi8KKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBMSU5FNl9JU09fQlVGRkVSUzsgaW5kZXgrKykKKwkJaWYgKHVyYiA9PSBsaW5lNnBjbS0+b3V0LnVyYnNbaW5kZXhdKQorCQkJYnJlYWs7CisKKwlpZiAoaW5kZXggPj0gTElORTZfSVNPX0JVRkZFUlMpCisJCXJldHVybjsJCS8qIFVSQiBoYXMgYmVlbiB1bmxpbmtlZCBhc3luY2hyb25vdXNseSAqLworCisJZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19QQUNLRVRTOyBpKyspCisJCWxlbmd0aCArPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmxlbmd0aDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsaW5lNnBjbS0+b3V0LmxvY2ssIGZsYWdzKTsKKworCWlmICh0ZXN0X2JpdChMSU5FNl9TVFJFQU1fUENNLCAmbGluZTZwY20tPm91dC5ydW5uaW5nKSkgeworCQlzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOworCisJCWxpbmU2cGNtLT5vdXQucG9zX2RvbmUgKz0KKwkJICAgIGxlbmd0aCAvIGxpbmU2cGNtLT5wcm9wZXJ0aWVzLT5ieXRlc19wZXJfZnJhbWU7CisKKwkJaWYgKGxpbmU2cGNtLT5vdXQucG9zX2RvbmUgPj0gcnVudGltZS0+YnVmZmVyX3NpemUpCisJCQlsaW5lNnBjbS0+b3V0LnBvc19kb25lIC09IHJ1bnRpbWUtPmJ1ZmZlcl9zaXplOworCX0KKworCWNsZWFyX2JpdChpbmRleCwgJmxpbmU2cGNtLT5vdXQuYWN0aXZlX3VyYnMpOworCisJZm9yIChpID0gMDsgaSA8IExJTkU2X0lTT19QQUNLRVRTOyBpKyspCisJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyA9PSAtRVhERVYpIHsKKwkJCXNodXRkb3duID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGluZGV4LCAmbGluZTZwY20tPm91dC51bmxpbmtfdXJicykpCisJCXNodXRkb3duID0gMTsKKworCWlmICghc2h1dGRvd24pIHsKKwkJc3VibWl0X2F1ZGlvX291dF91cmIobGluZTZwY20pOworCisJCWlmICh0ZXN0X2JpdChMSU5FNl9TVFJFQU1fUENNLCAmbGluZTZwY20tPm91dC5ydW5uaW5nKSkgeworCQkJbGluZTZwY20tPm91dC5ieXRlcyArPSBsZW5ndGg7CisJCQlpZiAobGluZTZwY20tPm91dC5ieXRlcyA+PSBsaW5lNnBjbS0+b3V0LnBlcmlvZCkgeworCQkJCWxpbmU2cGNtLT5vdXQuYnl0ZXMgJT0gbGluZTZwY20tPm91dC5wZXJpb2Q7CisJCQkJc3Bpbl91bmxvY2soJmxpbmU2cGNtLT5vdXQubG9jayk7CisJCQkJc25kX3BjbV9wZXJpb2RfZWxhcHNlZChzdWJzdHJlYW0pOworCQkJCXNwaW5fbG9jaygmbGluZTZwY20tPm91dC5sb2NrKTsKKwkJCX0KKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaW5lNnBjbS0+b3V0LmxvY2ssIGZsYWdzKTsKK30KKworLyogb3BlbiBwbGF5YmFjayBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfbGluZTZfcGxheWJhY2tfb3BlbihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCisJZXJyID0gc25kX3BjbV9od19jb25zdHJhaW50X3JhdGRlbnMocnVudGltZSwgMCwgU05EUlZfUENNX0hXX1BBUkFNX1JBVEUsCisJCQkJCSAgICAmbGluZTZwY20tPnByb3BlcnRpZXMtPnJhdGVzKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCXJ1bnRpbWUtPmh3ID0gbGluZTZwY20tPnByb3BlcnRpZXMtPnBsYXliYWNrX2h3OworCXJldHVybiAwOworfQorCisvKiBjbG9zZSBwbGF5YmFjayBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfbGluZTZfcGxheWJhY2tfY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKKy8qIHBsYXliYWNrIG9wZXJhdG9ycyAqLworc3RydWN0IHNuZF9wY21fb3BzIHNuZF9saW5lNl9wbGF5YmFja19vcHMgPSB7CisJLm9wZW4gPSBzbmRfbGluZTZfcGxheWJhY2tfb3BlbiwKKwkuY2xvc2UgPSBzbmRfbGluZTZfcGxheWJhY2tfY2xvc2UsCisJLmlvY3RsID0gc25kX3BjbV9saWJfaW9jdGwsCisJLmh3X3BhcmFtcyA9IHNuZF9saW5lNl9od19wYXJhbXMsCisJLmh3X2ZyZWUgPSBzbmRfbGluZTZfaHdfZnJlZSwKKwkucHJlcGFyZSA9IHNuZF9saW5lNl9wcmVwYXJlLAorCS50cmlnZ2VyID0gc25kX2xpbmU2X3RyaWdnZXIsCisJLnBvaW50ZXIgPSBzbmRfbGluZTZfcG9pbnRlciwKK307CisKK2ludCBsaW5lNl9jcmVhdGVfYXVkaW9fb3V0X3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKQoreworCXN0cnVjdCB1c2JfbGluZTYgKmxpbmU2ID0gbGluZTZwY20tPmxpbmU2OworCWludCBpOworCisJLyogY3JlYXRlIGF1ZGlvIFVSQnMgYW5kIGZpbGwgaW4gY29uc3RhbnQgdmFsdWVzOiAqLworCWZvciAoaSA9IDA7IGkgPCBMSU5FNl9JU09fQlVGRkVSUzsgKytpKSB7CisJCXN0cnVjdCB1cmIgKnVyYjsKKworCQkvKiBVUkIgZm9yIGF1ZGlvIG91dDogKi8KKwkJdXJiID0gbGluZTZwY20tPm91dC51cmJzW2ldID0KKwkJICAgIHVzYl9hbGxvY191cmIoTElORTZfSVNPX1BBQ0tFVFMsIEdGUF9LRVJORUwpOworCisJCWlmICh1cmIgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXVyYi0+ZGV2ID0gbGluZTYtPnVzYmRldjsKKwkJdXJiLT5waXBlID0KKwkJICAgIHVzYl9zbmRpc29jcGlwZShsaW5lNi0+dXNiZGV2LAorCQkJCSAgICBsaW5lNi0+cHJvcGVydGllcy0+ZXBfYXVkaW9fdyAmCisJCQkJICAgIFVTQl9FTkRQT0lOVF9OVU1CRVJfTUFTSyk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+c3RhcnRfZnJhbWUgPSAtMTsKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IExJTkU2X0lTT19QQUNLRVRTOworCQl1cmItPmludGVydmFsID0gTElORTZfSVNPX0lOVEVSVkFMOworCQl1cmItPmVycm9yX2NvdW50ID0gMDsKKwkJdXJiLT5jb21wbGV0ZSA9IGF1ZGlvX291dF9jYWxsYmFjazsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wbGF5YmFjay5oIGIvc291bmQvdXNiL2xpbmU2L3BsYXliYWNrLmgKc2ltaWxhcml0eSBpbmRleCA3MSUKcmVuYW1lIGZyb20gZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BsYXliYWNrLmgKcmVuYW1lIHRvIHNvdW5kL3VzYi9saW5lNi9wbGF5YmFjay5oCmluZGV4IDc0M2JkNmYuLjUxZmNlMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wbGF5YmFjay5oCisrKyBiL3NvdW5kL3VzYi9saW5lNi9wbGF5YmFjay5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjkuMWJldGEKKyAqIExpbmUgNiBMaW51eCBVU0IgZHJpdmVyCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKICAqCkBAIC0zMCwxMiArMzAsNiBAQAogZXh0ZXJuIHN0cnVjdCBzbmRfcGNtX29wcyBzbmRfbGluZTZfcGxheWJhY2tfb3BzOwogCiBleHRlcm4gaW50IGxpbmU2X2NyZWF0ZV9hdWRpb19vdXRfdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pOwotZXh0ZXJuIHZvaWQgbGluZTZfZnJlZV9wbGF5YmFja19idWZmZXIoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKTsKIGV4dGVybiBpbnQgbGluZTZfc3VibWl0X2F1ZGlvX291dF9hbGxfdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20pOwotZXh0ZXJuIHZvaWQgbGluZTZfdW5saW5rX2F1ZGlvX291dF91cmJzKHN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSk7Ci1leHRlcm4gdm9pZCBsaW5lNl91bmxpbmtfd2FpdF9jbGVhcl9hdWRpb19vdXRfdXJicyhzdHJ1Y3Qgc25kX2xpbmU2X3BjbQotCQkJCQkJICAgKmxpbmU2cGNtKTsKLWV4dGVybiB2b2lkIGxpbmU2X3dhaXRfY2xlYXJfYXVkaW9fb3V0X3VyYnMoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtKTsKLWV4dGVybiBpbnQgc25kX2xpbmU2X3BsYXliYWNrX3RyaWdnZXIoc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtLCBpbnQgY21kKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvcG9kLmMgYi9zb3VuZC91c2IvbGluZTYvcG9kLmMKc2ltaWxhcml0eSBpbmRleCA2MyUKcmVuYW1lIGZyb20gZHJpdmVycy9zdGFnaW5nL2xpbmU2L3BvZC5jCnJlbmFtZSB0byBzb3VuZC91c2IvbGluZTYvcG9kLmMKaW5kZXggNDRmNGIyZi4uZGFmODFkMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9wb2QuYworKysgYi9zb3VuZC91c2IvbGluZTYvcG9kLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogTGluZTYgTGludXggVVNCIGRyaXZlciAtIDAuOS4xYmV0YQorICogTGluZSA2IExpbnV4IFVTQiBkcml2ZXIKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBNYXJrdXMgR3JhYm5lciAoZ3JhYm5lckBpY2cudHVncmF6LmF0KQogICoKQEAgLTExLDEzICsxMSw3NiBAQAogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KICNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CiAKLSNpbmNsdWRlICJhdWRpby5oIgogI2luY2x1ZGUgImNhcHR1cmUuaCIKICNpbmNsdWRlICJkcml2ZXIuaCIKICNpbmNsdWRlICJwbGF5YmFjay5oIgotI2luY2x1ZGUgInBvZC5oIgorCisvKgorCUxvY2F0ZSBuYW1lIGluIGJpbmFyeSBwcm9ncmFtIGR1bXAKKyovCisjZGVmaW5lCVBPRF9OQU1FX09GRlNFVCAwCisjZGVmaW5lCVBPRF9OQU1FX0xFTkdUSCAxNgorCisvKgorCU90aGVyIGNvbnN0YW50cworKi8KKyNkZWZpbmUgUE9EX0NPTlRST0xfU0laRSAweDgwCisjZGVmaW5lIFBPRF9CVUZTSVpFX0RVTVBSRVEgNworI2RlZmluZSBQT0RfU1RBUlRVUF9ERUxBWSAxMDAwCisKKy8qCisJU3RhZ2VzIG9mIFBPRCBzdGFydHVwIHByb2NlZHVyZQorKi8KK2VudW0geworCVBPRF9TVEFSVFVQX0lOSVQgPSAxLAorCVBPRF9TVEFSVFVQX1ZFUlNJT05SRVEsCisJUE9EX1NUQVJUVVBfV09SS1FVRVVFLAorCVBPRF9TVEFSVFVQX1NFVFVQLAorCVBPRF9TVEFSVFVQX0xBU1QgPSBQT0RfU1RBUlRVUF9TRVRVUCAtIDEKK307CisKK2VudW0geworCUxJTkU2X0JBU1NQT0RYVCwKKwlMSU5FNl9CQVNTUE9EWFRMSVZFLAorCUxJTkU2X0JBU1NQT0RYVFBSTywKKwlMSU5FNl9QT0NLRVRQT0QsCisJTElORTZfUE9EWFQsCisJTElORTZfUE9EWFRMSVZFX1BPRCwKKwlMSU5FNl9QT0RYVFBSTywKK307CisKK3N0cnVjdCB1c2JfbGluZTZfcG9kIHsKKwkvKiBHZW5lcmljIExpbmUgNiBVU0IgZGF0YSAqLworCXN0cnVjdCB1c2JfbGluZTYgbGluZTY7CisKKwkvKiBJbnN0cnVtZW50IG1vbml0b3IgbGV2ZWwgKi8KKwlpbnQgbW9uaXRvcl9sZXZlbDsKKworCS8qIFRpbWVyIGZvciBkZXZpY2UgaW5pdGlhbGl6YXRpb24gKi8KKwlzdHJ1Y3QgdGltZXJfbGlzdCBzdGFydHVwX3RpbWVyOworCisJLyogV29yayBoYW5kbGVyIGZvciBkZXZpY2UgaW5pdGlhbGl6YXRpb24gKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RhcnR1cF93b3JrOworCisJLyogQ3VycmVudCBwcm9ncmVzcyBpbiBzdGFydHVwIHByb2NlZHVyZSAqLworCWludCBzdGFydHVwX3Byb2dyZXNzOworCisJLyogU2VyaWFsIG51bWJlciBvZiBkZXZpY2UgKi8KKwl1MzIgc2VyaWFsX251bWJlcjsKKworCS8qIEZpcm13YXJlIHZlcnNpb24gKHggMTAwKSAqLworCWludCBmaXJtd2FyZV92ZXJzaW9uOworCisJLyogRGV2aWNlIElEICovCisJaW50IGRldmljZV9pZDsKK307CiAKICNkZWZpbmUgUE9EX1NZU0VYX0NPREUgMwogI2RlZmluZSBQT0RfQllURVNfUEVSX0ZSQU1FIDYJLyogMjRiaXQgYXVkaW8gKHN0ZXJlbykgKi8KQEAgLTY2LDE1ICsxMjksMTIgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbGluZTZfcGNtX3Byb3BlcnRpZXMgcG9kX3BjbV9wcm9wZXJ0aWVzID0gewotCS5zbmRfbGluZTZfcGxheWJhY2tfaHcgPSB7CisJLnBsYXliYWNrX2h3ID0gewogCQkJCSAgLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CiAJCQkJCSAgIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKIAkJCQkJICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAogCQkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKIAkJCQkJICAgU05EUlZfUENNX0lORk9fUEFVU0UgfAotI2lmZGVmIENPTkZJR19QTQotCQkJCQkgICBTTkRSVl9QQ01fSU5GT19SRVNVTUUgfAotI2VuZGlmCiAJCQkJCSAgIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQpLAogCQkJCSAgLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MyNF8zTEUsCiAJCQkJICAucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9LTk9ULApAQCAtODcsMTQgKzE0NywxMSBAQAogCQkJCSAgLnBlcmlvZF9ieXRlc19tYXggPSA4MTkyLAogCQkJCSAgLnBlcmlvZHNfbWluID0gMSwKIAkJCQkgIC5wZXJpb2RzX21heCA9IDEwMjR9LAotCS5zbmRfbGluZTZfY2FwdHVyZV9odyA9IHsKKwkuY2FwdHVyZV9odyA9IHsKIAkJCQkgLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CiAJCQkJCSAgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAogCQkJCQkgIFNORFJWX1BDTV9JTkZPX0JMT0NLX1RSQU5TRkVSIHwKIAkJCQkJICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKLSNpZmRlZiBDT05GSUdfUE0KLQkJCQkJICBTTkRSVl9QQ01fSU5GT19SRVNVTUUgfAotI2VuZGlmCiAJCQkJCSAgU05EUlZfUENNX0lORk9fU1lOQ19TVEFSVCksCiAJCQkJIC5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFLAogCQkJCSAucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9LTk9ULApAQCAtMTA3LDcgKzE2NCw3IEBACiAJCQkJIC5wZXJpb2RfYnl0ZXNfbWF4ID0gODE5MiwKIAkJCQkgLnBlcmlvZHNfbWluID0gMSwKIAkJCQkgLnBlcmlvZHNfbWF4ID0gMTAyNH0sCi0JLnNuZF9saW5lNl9yYXRlcyA9IHsKKwkucmF0ZXMgPSB7CiAJCQkgICAgLm5yYXRzID0gMSwKIAkJCSAgICAucmF0cyA9ICZwb2RfcmF0ZGVufSwKIAkuYnl0ZXNfcGVyX2ZyYW1lID0gUE9EX0JZVEVTX1BFUl9GUkFNRQpAQCAtMTMxLDggKzE4OCw5IEBACiAvKgogCVByb2Nlc3MgYSBjb21wbGV0ZWx5IHJlY2VpdmVkIG1lc3NhZ2UuCiAqLwotdm9pZCBsaW5lNl9wb2RfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QpCitzdGF0aWMgdm9pZCBsaW5lNl9wb2RfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2KQogeworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSAoc3RydWN0IHVzYl9saW5lNl9wb2QgKikgbGluZTY7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmID0gcG9kLT5saW5lNi5idWZmZXJfbWVzc2FnZTsKIAogCWlmIChtZW1jbXAoYnVmLCBwb2RfdmVyc2lvbl9oZWFkZXIsIHNpemVvZihwb2RfdmVyc2lvbl9oZWFkZXIpKSA9PSAwKSB7CkBAIC0xNTksMTUgKzIxNyw2IEBACiB9CiAKIC8qCi0JVHJhbnNtaXQgUE9EeHQgUHJvIGNvbnRyb2wgcGFyYW1ldGVyLgotKi8KLXZvaWQgbGluZTZfcG9kX3RyYW5zbWl0X3BhcmFtZXRlcihzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kLCBpbnQgcGFyYW0sCi0JCQkJICB1OCB2YWx1ZSkKLXsKLQlsaW5lNl90cmFuc21pdF9wYXJhbWV0ZXIoJnBvZC0+bGluZTYsIHBhcmFtLCB2YWx1ZSk7Ci19Ci0KLS8qCiAJU2VuZCBzeXN0ZW0gcGFyYW1ldGVyIChmcm9tIGludGVnZXIpLgogKi8KIHN0YXRpYyBpbnQgcG9kX3NldF9zeXN0ZW1fcGFyYW1faW50KHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QsIGludCB2YWx1ZSwKQEAgLTE5OCw3ICsyNDcsNyBAQAogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CiAJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwb2QtPnNlcmlhbF9udW1iZXIpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBwb2QtPnNlcmlhbF9udW1iZXIpOwogfQogCiAvKgpAQCAtMjczLDcgKzMyMiw3IEBACiAJbGluZTZfcmVhZF9zZXJpYWxfbnVtYmVyKCZwb2QtPmxpbmU2LCAmcG9kLT5zZXJpYWxfbnVtYmVyKTsKIAogCS8qIEFMU0EgYXVkaW8gaW50ZXJmYWNlOiAqLwotCWxpbmU2X3JlZ2lzdGVyX2F1ZGlvKGxpbmU2KTsKKwlzbmRfY2FyZF9yZWdpc3RlcihsaW5lNi0+Y2FyZCk7CiB9CiAKIC8qIFBPRCBzcGVjaWFsIGZpbGVzOiAqLwpAQCAtMjgxLDYgKzMzMCwxOCBAQAogc3RhdGljIERFVklDRV9BVFRSX1JPKGZpcm13YXJlX3ZlcnNpb24pOwogc3RhdGljIERFVklDRV9BVFRSX1JPKHNlcmlhbF9udW1iZXIpOwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcG9kX2Rldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9kZXZpY2VfaWQuYXR0ciwKKwkmZGV2X2F0dHJfZmlybXdhcmVfdmVyc2lvbi5hdHRyLAorCSZkZXZfYXR0cl9zZXJpYWxfbnVtYmVyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcG9kX2Rldl9hdHRyX2dyb3VwID0geworCS5uYW1lID0gInBvZCIsCisJLmF0dHJzID0gcG9kX2Rldl9hdHRycywKK307CisKIC8qIGNvbnRyb2wgaW5mbyBjYWxsYmFjayAqLwogc3RhdGljIGludCBzbmRfcG9kX2NvbnRyb2xfbW9uaXRvcl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAogCQkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQpAQCAtMzMxLDU1ICszOTIsMzMgQEAKIH07CiAKIC8qCi0JUE9EIGRlc3RydWN0b3IuCisJUE9EIGRldmljZSBkaXNjb25uZWN0ZWQuCiAqLwotc3RhdGljIHZvaWQgcG9kX2Rlc3RydWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCitzdGF0aWMgdm9pZCBsaW5lNl9wb2RfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNikKIHsKLQlzdHJ1Y3QgdXNiX2xpbmU2X3BvZCAqcG9kID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSAoc3RydWN0IHVzYl9saW5lNl9wb2QgKilsaW5lNjsKIAotCWlmIChwb2QgPT0gTlVMTCkKLQkJcmV0dXJuOwotCWxpbmU2X2NsZWFudXBfYXVkaW8oJnBvZC0+bGluZTYpOwotCi0JZGVsX3RpbWVyKCZwb2QtPnN0YXJ0dXBfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZwb2QtPnN0YXJ0dXBfdGltZXIpOwogCWNhbmNlbF93b3JrX3N5bmMoJnBvZC0+c3RhcnR1cF93b3JrKTsKIH0KIAogLyoKLQlDcmVhdGUgc3lzZnMgZW50cmllcy4KLSovCi1zdGF0aWMgaW50IHBvZF9jcmVhdGVfZmlsZXMyKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgZXJyOwotCi0JQ0hFQ0tfUkVUVVJOKGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXZpY2VfaWQpKTsKLQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2Zpcm13YXJlX3ZlcnNpb24pKTsKLQlDSEVDS19SRVRVUk4oZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3NlcmlhbF9udW1iZXIpKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKIAkgVHJ5IHRvIGluaXQgUE9EIGRldmljZS4KICovCi1zdGF0aWMgaW50IHBvZF90cnlfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAotCQkJc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZCkKK3N0YXRpYyBpbnQgcG9kX2luaXQoc3RydWN0IHVzYl9saW5lNiAqbGluZTYsCisJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IGVycjsKLQlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9ICZwb2QtPmxpbmU2OworCXN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QgPSAoc3RydWN0IHVzYl9saW5lNl9wb2QgKikgbGluZTY7CisKKwlsaW5lNi0+cHJvY2Vzc19tZXNzYWdlID0gbGluZTZfcG9kX3Byb2Nlc3NfbWVzc2FnZTsKKwlsaW5lNi0+ZGlzY29ubmVjdCA9IGxpbmU2X3BvZF9kaXNjb25uZWN0OwogCiAJaW5pdF90aW1lcigmcG9kLT5zdGFydHVwX3RpbWVyKTsKIAlJTklUX1dPUksoJnBvZC0+c3RhcnR1cF93b3JrLCBwb2Rfc3RhcnR1cDQpOwogCi0JaWYgKChpbnRlcmZhY2UgPT0gTlVMTCkgfHwgKHBvZCA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAkvKiBjcmVhdGUgc3lzZnMgZW50cmllczogKi8KLQllcnIgPSBwb2RfY3JlYXRlX2ZpbGVzMigmaW50ZXJmYWNlLT5kZXYpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCi0JLyogaW5pdGlhbGl6ZSBhdWRpbyBzeXN0ZW06ICovCi0JZXJyID0gbGluZTZfaW5pdF9hdWRpbyhsaW5lNik7CisJZXJyID0gc25kX2NhcmRfYWRkX2Rldl9hdHRyKGxpbmU2LT5jYXJkLCAmcG9kX2Rldl9hdHRyX2dyb3VwKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIApAQCAtNDA1LDcgKzQ0NCw3IEBACiAJICAgaGFuZGxlci4KIAkgKi8KIAotCWlmIChwb2QtPmxpbmU2LnByb3BlcnRpZXMtPmNhcGFiaWxpdGllcyAmIExJTkU2X0JJVF9DT05UUk9MKSB7CisJaWYgKHBvZC0+bGluZTYucHJvcGVydGllcy0+Y2FwYWJpbGl0aWVzICYgTElORTZfQ0FQX0NPTlRST0wpIHsKIAkJcG9kLT5tb25pdG9yX2xldmVsID0gUE9EX1NZU1RFTV9JTlZBTElEOwogCiAJCS8qIGluaXRpYXRlIHN0YXJ0dXAgcHJvY2VkdXJlOiAqLwpAQCAtNDE1LDQ0ICs0NTQsMTMxIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0JIEluaXQgUE9EIGRldmljZSAoYW5kIGNsZWFuIHVwIGluIGNhc2Ugb2YgZmFpbHVyZSkuCi0qLwotaW50IGxpbmU2X3BvZF9pbml0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIHN0cnVjdCB1c2JfbGluZTZfcG9kICpwb2QpCi17Ci0JaW50IGVyciA9IHBvZF90cnlfaW5pdChpbnRlcmZhY2UsIHBvZCk7CisjZGVmaW5lIExJTkU2X0RFVklDRShwcm9kKSBVU0JfREVWSUNFKDB4MGU0MSwgcHJvZCkKKyNkZWZpbmUgTElORTZfSUZfTlVNKHByb2QsIG4pIFVTQl9ERVZJQ0VfSU5URVJGQUNFX05VTUJFUigweDBlNDEsIHByb2QsIG4pCiAKLQlpZiAoZXJyIDwgMCkKLQkJcG9kX2Rlc3RydWN0KGludGVyZmFjZSk7CisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgcG9kX2lkX3RhYmxlW10gPSB7CisJeyBMSU5FNl9ERVZJQ0UoMHg0MjUwKSwgICAgLmRyaXZlcl9pbmZvID0gTElORTZfQkFTU1BPRFhUIH0sCisJeyBMSU5FNl9ERVZJQ0UoMHg0NjQyKSwgICAgLmRyaXZlcl9pbmZvID0gTElORTZfQkFTU1BPRFhUTElWRSB9LAorCXsgTElORTZfREVWSUNFKDB4NDI1MiksICAgIC5kcml2ZXJfaW5mbyA9IExJTkU2X0JBU1NQT0RYVFBSTyB9LAorCXsgTElORTZfSUZfTlVNKDB4NTA1MSwgMSksIC5kcml2ZXJfaW5mbyA9IExJTkU2X1BPQ0tFVFBPRCB9LAorCXsgTElORTZfREVWSUNFKDB4NTA0NCksICAgIC5kcml2ZXJfaW5mbyA9IExJTkU2X1BPRFhUIH0sCisJeyBMSU5FNl9JRl9OVU0oMHg0NjUwLCAwKSwgLmRyaXZlcl9pbmZvID0gTElORTZfUE9EWFRMSVZFX1BPRCB9LAorCXsgTElORTZfREVWSUNFKDB4NTA1MCksICAgIC5kcml2ZXJfaW5mbyA9IExJTkU2X1BPRFhUUFJPIH0sCisJe30KK307CiAKLQlyZXR1cm4gZXJyOwotfQorTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHBvZF9pZF90YWJsZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGluZTZfcHJvcGVydGllcyBwb2RfcHJvcGVydGllc190YWJsZVtdID0geworCVtMSU5FNl9CQVNTUE9EWFRdID0geworCQkuaWQgPSAiQmFzc1BPRHh0IiwKKwkJLm5hbWUgPSAiQmFzc1BPRHh0IiwKKwkJLmNhcGFiaWxpdGllcwk9IExJTkU2X0NBUF9DT05UUk9MCisJCQkJfCBMSU5FNl9DQVBfUENNCisJCQkJfCBMSU5FNl9DQVBfSFdNT04sCisJCS5hbHRzZXR0aW5nID0gNSwKKwkJLmVwX2N0cmxfciA9IDB4ODQsCisJCS5lcF9jdHJsX3cgPSAweDAzLAorCQkuZXBfYXVkaW9fciA9IDB4ODIsCisJCS5lcF9hdWRpb193ID0gMHgwMSwKKwl9LAorCVtMSU5FNl9CQVNTUE9EWFRMSVZFXSA9IHsKKwkJLmlkID0gIkJhc3NQT0R4dExpdmUiLAorCQkubmFtZSA9ICJCYXNzUE9EeHQgTGl2ZSIsCisJCS5jYXBhYmlsaXRpZXMJPSBMSU5FNl9DQVBfQ09OVFJPTAorCQkJCXwgTElORTZfQ0FQX1BDTQorCQkJCXwgTElORTZfQ0FQX0hXTU9OLAorCQkuYWx0c2V0dGluZyA9IDEsCisJCS5lcF9jdHJsX3IgPSAweDg0LAorCQkuZXBfY3RybF93ID0gMHgwMywKKwkJLmVwX2F1ZGlvX3IgPSAweDgyLAorCQkuZXBfYXVkaW9fdyA9IDB4MDEsCisJfSwKKwlbTElORTZfQkFTU1BPRFhUUFJPXSA9IHsKKwkJLmlkID0gIkJhc3NQT0R4dFBybyIsCisJCS5uYW1lID0gIkJhc3NQT0R4dCBQcm8iLAorCQkuY2FwYWJpbGl0aWVzCT0gTElORTZfQ0FQX0NPTlRST0wKKwkJCQl8IExJTkU2X0NBUF9QQ00KKwkJCQl8IExJTkU2X0NBUF9IV01PTiwKKwkJLmFsdHNldHRpbmcgPSA1LAorCQkuZXBfY3RybF9yID0gMHg4NCwKKwkJLmVwX2N0cmxfdyA9IDB4MDMsCisJCS5lcF9hdWRpb19yID0gMHg4MiwKKwkJLmVwX2F1ZGlvX3cgPSAweDAxLAorCX0sCisJW0xJTkU2X1BPQ0tFVFBPRF0gPSB7CisJCS5pZCA9ICJQb2NrZXRQT0QiLAorCQkubmFtZSA9ICJQb2NrZXQgUE9EIiwKKwkJLmNhcGFiaWxpdGllcwk9IExJTkU2X0NBUF9DT05UUk9MLAorCQkuYWx0c2V0dGluZyA9IDAsCisJCS5lcF9jdHJsX3IgPSAweDgyLAorCQkuZXBfY3RybF93ID0gMHgwMiwKKwkJLyogbm8gYXVkaW8gY2hhbm5lbCAqLworCX0sCisJW0xJTkU2X1BPRFhUXSA9IHsKKwkJLmlkID0gIlBPRHh0IiwKKwkJLm5hbWUgPSAiUE9EeHQiLAorCQkuY2FwYWJpbGl0aWVzCT0gTElORTZfQ0FQX0NPTlRST0wKKwkJCQl8IExJTkU2X0NBUF9QQ00KKwkJCQl8IExJTkU2X0NBUF9IV01PTiwKKwkJLmFsdHNldHRpbmcgPSA1LAorCQkuZXBfY3RybF9yID0gMHg4NCwKKwkJLmVwX2N0cmxfdyA9IDB4MDMsCisJCS5lcF9hdWRpb19yID0gMHg4MiwKKwkJLmVwX2F1ZGlvX3cgPSAweDAxLAorCX0sCisJW0xJTkU2X1BPRFhUTElWRV9QT0RdID0geworCQkuaWQgPSAiUE9EeHRMaXZlIiwKKwkJLm5hbWUgPSAiUE9EeHQgTGl2ZSIsCisJCS5jYXBhYmlsaXRpZXMJPSBMSU5FNl9DQVBfQ09OVFJPTAorCQkJCXwgTElORTZfQ0FQX1BDTQorCQkJCXwgTElORTZfQ0FQX0hXTU9OLAorCQkuYWx0c2V0dGluZyA9IDEsCisJCS5lcF9jdHJsX3IgPSAweDg0LAorCQkuZXBfY3RybF93ID0gMHgwMywKKwkJLmVwX2F1ZGlvX3IgPSAweDgyLAorCQkuZXBfYXVkaW9fdyA9IDB4MDEsCisJfSwKKwlbTElORTZfUE9EWFRQUk9dID0geworCQkuaWQgPSAiUE9EeHRQcm8iLAorCQkubmFtZSA9ICJQT0R4dCBQcm8iLAorCQkuY2FwYWJpbGl0aWVzCT0gTElORTZfQ0FQX0NPTlRST0wKKwkJCQl8IExJTkU2X0NBUF9QQ00KKwkJCQl8IExJTkU2X0NBUF9IV01PTiwKKwkJLmFsdHNldHRpbmcgPSA1LAorCQkuZXBfY3RybF9yID0gMHg4NCwKKwkJLmVwX2N0cmxfdyA9IDB4MDMsCisJCS5lcF9hdWRpb19yID0gMHg4MiwKKwkJLmVwX2F1ZGlvX3cgPSAweDAxLAorCX0sCit9OwogCiAvKgotCVBPRCBkZXZpY2UgZGlzY29ubmVjdGVkLgorCVByb2JlIFVTQiBkZXZpY2UuCiAqLwotdm9pZCBsaW5lNl9wb2RfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQorc3RhdGljIGludCBwb2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKwkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RydWN0IHVzYl9saW5lNl9wb2QgKnBvZDsKLQotCWlmIChpbnRlcmZhY2UgPT0gTlVMTCkKLQkJcmV0dXJuOwotCXBvZCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLQotCWlmIChwb2QgIT0gTlVMTCkgewotCQlzdHJ1Y3Qgc25kX2xpbmU2X3BjbSAqbGluZTZwY20gPSBwb2QtPmxpbmU2LmxpbmU2cGNtOwotCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmaW50ZXJmYWNlLT5kZXY7Ci0KLQkJaWYgKGxpbmU2cGNtICE9IE5VTEwpCi0JCQlsaW5lNl9wY21fZGlzY29ubmVjdChsaW5lNnBjbSk7Ci0KLQkJaWYgKGRldiAhPSBOVUxMKSB7Ci0JCQkvKiByZW1vdmUgc3lzZnMgZW50cmllczogKi8KLQkJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kZXZpY2VfaWQpOwotCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2Zpcm13YXJlX3ZlcnNpb24pOwotCQkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3NlcmlhbF9udW1iZXIpOwotCQl9Ci0JfQotCi0JcG9kX2Rlc3RydWN0KGludGVyZmFjZSk7CisJcmV0dXJuIGxpbmU2X3Byb2JlKGludGVyZmFjZSwgaWQsICJMaW5lNi1QT0QiLAorCQkJICAgJnBvZF9wcm9wZXJ0aWVzX3RhYmxlW2lkLT5kcml2ZXJfaW5mb10sCisJCQkgICBwb2RfaW5pdCwgc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTZfcG9kKSk7CiB9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwb2RfZHJpdmVyID0geworCS5uYW1lID0gS0JVSUxEX01PRE5BTUUsCisJLnByb2JlID0gcG9kX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gbGluZTZfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGxpbmU2X3N1c3BlbmQsCisJLnJlc3VtZSA9IGxpbmU2X3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0gbGluZTZfcmVzdW1lLAorI2VuZGlmCisJLmlkX3RhYmxlID0gcG9kX2lkX3RhYmxlLAorfTsKKworbW9kdWxlX3VzYl9kcml2ZXIocG9kX2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiTGluZSA2IFBPRCBVU0IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbGluZTYvcG9kaGQuYyBiL3NvdW5kL3VzYi9saW5lNi9wb2RoZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZGNhZWYKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvbGluZTYvcG9kaGQuYwpAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIExpbmUgNiBQb2QgSEQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU3RlZmFuIEhham5vY3ppIDxzdGVmYW5oYUBnbWFpbC5jb20+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgorCisjaW5jbHVkZSAiZHJpdmVyLmgiCisjaW5jbHVkZSAicGNtLmgiCisKK2VudW0geworCUxJTkU2X1BPREhEMzAwLAorCUxJTkU2X1BPREhENDAwLAorCUxJTkU2X1BPREhENTAwXzAsCisJTElORTZfUE9ESEQ1MDBfMSwKK307CisKKyNkZWZpbmUgUE9ESERfQllURVNfUEVSX0ZSQU1FIDYJLyogMjRiaXQgYXVkaW8gKHN0ZXJlbykgKi8KKworc3RhdGljIHN0cnVjdCBzbmRfcmF0ZGVuIHBvZGhkX3JhdGRlbiA9IHsKKwkubnVtX21pbiA9IDQ4MDAwLAorCS5udW1fbWF4ID0gNDgwMDAsCisJLm51bV9zdGVwID0gMSwKKwkuZGVuID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbGluZTZfcGNtX3Byb3BlcnRpZXMgcG9kaGRfcGNtX3Byb3BlcnRpZXMgPSB7CisJLnBsYXliYWNrX2h3ID0geworCQkJCSAgLmluZm8gPSAoU05EUlZfUENNX0lORk9fTU1BUCB8CisJCQkJCSAgIFNORFJWX1BDTV9JTkZPX0lOVEVSTEVBVkVEIHwKKwkJCQkJICAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQkJCQkgICBTTkRSVl9QQ01fSU5GT19NTUFQX1ZBTElEIHwKKwkJCQkJICAgU05EUlZfUENNX0lORk9fUEFVU0UgfAorCQkJCQkgICBTTkRSVl9QQ01fSU5GT19TWU5DX1NUQVJUKSwKKwkJCQkgIC5mb3JtYXRzID0gU05EUlZfUENNX0ZNVEJJVF9TMjRfM0xFLAorCQkJCSAgLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCisJCQkJICAucmF0ZV9taW4gPSA0ODAwMCwKKwkJCQkgIC5yYXRlX21heCA9IDQ4MDAwLAorCQkJCSAgLmNoYW5uZWxzX21pbiA9IDIsCisJCQkJICAuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCQkgIC5idWZmZXJfYnl0ZXNfbWF4ID0gNjAwMDAsCisJCQkJICAucGVyaW9kX2J5dGVzX21pbiA9IDY0LAorCQkJCSAgLnBlcmlvZF9ieXRlc19tYXggPSA4MTkyLAorCQkJCSAgLnBlcmlvZHNfbWluID0gMSwKKwkJCQkgIC5wZXJpb2RzX21heCA9IDEwMjR9LAorCS5jYXB0dXJlX2h3ID0geworCQkJCSAuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQkJICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJCSAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQkJCQkgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQkJCQkgIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQpLAorCQkJCSAuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzI0XzNMRSwKKwkJCQkgLnJhdGVzID0gU05EUlZfUENNX1JBVEVfNDgwMDAsCisJCQkJIC5yYXRlX21pbiA9IDQ4MDAwLAorCQkJCSAucmF0ZV9tYXggPSA0ODAwMCwKKwkJCQkgLmNoYW5uZWxzX21pbiA9IDIsCisJCQkJIC5jaGFubmVsc19tYXggPSAyLAorCQkJCSAuYnVmZmVyX2J5dGVzX21heCA9IDYwMDAwLAorCQkJCSAucGVyaW9kX2J5dGVzX21pbiA9IDY0LAorCQkJCSAucGVyaW9kX2J5dGVzX21heCA9IDgxOTIsCisJCQkJIC5wZXJpb2RzX21pbiA9IDEsCisJCQkJIC5wZXJpb2RzX21heCA9IDEwMjR9LAorCS5yYXRlcyA9IHsKKwkJCSAgICAubnJhdHMgPSAxLAorCQkJICAgIC5yYXRzID0gJnBvZGhkX3JhdGRlbn0sCisJLmJ5dGVzX3Blcl9mcmFtZSA9IFBPREhEX0JZVEVTX1BFUl9GUkFNRQorfTsKKworLyoKKwlUcnkgdG8gaW5pdCBQT0QgSEQgZGV2aWNlLgorKi8KK3N0YXRpYyBpbnQgcG9kaGRfaW5pdChzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiwKKwkJICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWludCBlcnI7CisKKwkvKiBpbml0aWFsaXplIE1JREkgc3Vic3lzdGVtOiAqLworCWVyciA9IGxpbmU2X2luaXRfbWlkaShsaW5lNik7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiBpbml0aWFsaXplIFBDTSBzdWJzeXN0ZW06ICovCisJZXJyID0gbGluZTZfaW5pdF9wY20obGluZTYsICZwb2RoZF9wY21fcHJvcGVydGllcyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiByZWdpc3RlciBVU0IgYXVkaW8gc3lzdGVtOiAqLworCXJldHVybiBzbmRfY2FyZF9yZWdpc3RlcihsaW5lNi0+Y2FyZCk7Cit9CisKKyNkZWZpbmUgTElORTZfREVWSUNFKHByb2QpIFVTQl9ERVZJQ0UoMHgwZTQxLCBwcm9kKQorI2RlZmluZSBMSU5FNl9JRl9OVU0ocHJvZCwgbikgVVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4MGU0MSwgcHJvZCwgbikKKworLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHBvZGhkX2lkX3RhYmxlW10gPSB7CisJeyBMSU5FNl9ERVZJQ0UoMHg1MDU3KSwgICAgLmRyaXZlcl9pbmZvID0gTElORTZfUE9ESEQzMDAgfSwKKwl7IExJTkU2X0RFVklDRSgweDUwNTgpLCAgICAuZHJpdmVyX2luZm8gPSBMSU5FNl9QT0RIRDQwMCB9LAorCXsgTElORTZfSUZfTlVNKDB4NDE0RCwgMCksIC5kcml2ZXJfaW5mbyA9IExJTkU2X1BPREhENTAwXzAgfSwKKwl7IExJTkU2X0lGX05VTSgweDQxNEQsIDEpLCAuZHJpdmVyX2luZm8gPSBMSU5FNl9QT0RIRDUwMF8xIH0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBwb2RoZF9pZF90YWJsZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGluZTZfcHJvcGVydGllcyBwb2RoZF9wcm9wZXJ0aWVzX3RhYmxlW10gPSB7CisJW0xJTkU2X1BPREhEMzAwXSA9IHsKKwkJLmlkID0gIlBPREhEMzAwIiwKKwkJLm5hbWUgPSAiUE9EIEhEMzAwIiwKKwkJLmNhcGFiaWxpdGllcwk9IExJTkU2X0NBUF9DT05UUk9MCisJCQkJfCBMSU5FNl9DQVBfUENNCisJCQkJfCBMSU5FNl9DQVBfSFdNT04sCisJCS5hbHRzZXR0aW5nID0gNSwKKwkJLmVwX2N0cmxfciA9IDB4ODQsCisJCS5lcF9jdHJsX3cgPSAweDAzLAorCQkuZXBfYXVkaW9fciA9IDB4ODIsCisJCS5lcF9hdWRpb193ID0gMHgwMSwKKwl9LAorCVtMSU5FNl9QT0RIRDQwMF0gPSB7CisJCS5pZCA9ICJQT0RIRDQwMCIsCisJCS5uYW1lID0gIlBPRCBIRDQwMCIsCisJCS5jYXBhYmlsaXRpZXMJPSBMSU5FNl9DQVBfQ09OVFJPTAorCQkJCXwgTElORTZfQ0FQX1BDTQorCQkJCXwgTElORTZfQ0FQX0hXTU9OLAorCQkuYWx0c2V0dGluZyA9IDUsCisJCS5lcF9jdHJsX3IgPSAweDg0LAorCQkuZXBfY3RybF93ID0gMHgwMywKKwkJLmVwX2F1ZGlvX3IgPSAweDgyLAorCQkuZXBfYXVkaW9fdyA9IDB4MDEsCisJfSwKKwlbTElORTZfUE9ESEQ1MDBfMF0gPSB7CisJCS5pZCA9ICJQT0RIRDUwMCIsCisJCS5uYW1lID0gIlBPRCBIRDUwMCIsCisJCS5jYXBhYmlsaXRpZXMJPSBMSU5FNl9DQVBfQ09OVFJPTAorCQkJCXwgTElORTZfQ0FQX1BDTQorCQkJCXwgTElORTZfQ0FQX0hXTU9OLAorCQkuYWx0c2V0dGluZyA9IDEsCisJCS5lcF9jdHJsX3IgPSAweDgxLAorCQkuZXBfY3RybF93ID0gMHgwMSwKKwkJLmVwX2F1ZGlvX3IgPSAweDg2LAorCQkuZXBfYXVkaW9fdyA9IDB4MDIsCisJfSwKKwlbTElORTZfUE9ESEQ1MDBfMV0gPSB7CisJCS5pZCA9ICJQT0RIRDUwMCIsCisJCS5uYW1lID0gIlBPRCBIRDUwMCIsCisJCS5jYXBhYmlsaXRpZXMJPSBMSU5FNl9DQVBfQ09OVFJPTAorCQkJCXwgTElORTZfQ0FQX1BDTQorCQkJCXwgTElORTZfQ0FQX0hXTU9OLAorCQkuYWx0c2V0dGluZyA9IDEsCisJCS5lcF9jdHJsX3IgPSAweDgxLAorCQkuZXBfY3RybF93ID0gMHgwMSwKKwkJLmVwX2F1ZGlvX3IgPSAweDg2LAorCQkuZXBfYXVkaW9fdyA9IDB4MDIsCisJfSwKK307CisKKy8qCisJUHJvYmUgVVNCIGRldmljZS4KKyovCitzdGF0aWMgaW50IHBvZGhkX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGxpbmU2X3Byb2JlKGludGVyZmFjZSwgaWQsICJMaW5lNi1QT0RIRCIsCisJCQkgICAmcG9kaGRfcHJvcGVydGllc190YWJsZVtpZC0+ZHJpdmVyX2luZm9dLAorCQkJICAgcG9kaGRfaW5pdCwgc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTYpKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHBvZGhkX2RyaXZlciA9IHsKKwkubmFtZSA9IEtCVUlMRF9NT0ROQU1FLAorCS5wcm9iZSA9IHBvZGhkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gbGluZTZfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGxpbmU2X3N1c3BlbmQsCisJLnJlc3VtZSA9IGxpbmU2X3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0gbGluZTZfcmVzdW1lLAorI2VuZGlmCisJLmlkX3RhYmxlID0gcG9kaGRfaWRfdGFibGUsCit9OworCittb2R1bGVfdXNiX2RyaXZlcihwb2RoZF9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkxpbmUgNiBQT0RIRCBVU0IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbGluZTYvdG9uZXBvcnQuYyBiL3NvdW5kL3VzYi9saW5lNi90b25lcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNGM1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC91c2IvbGluZTYvdG9uZXBvcnQuYwpAQCAtMCwwICsxLDU4MCBAQAorLyoKKyAqIExpbmUgNiBMaW51eCBVU0IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKKyAqICAgICAgICAgICAgICAgICAgICAgICAgIEVtaWwgTXlocm1hbiAoZW1pbC5teWhybWFuQGdtYWlsLmNvbSkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KKyNpbmNsdWRlIDxzb3VuZC9jb250cm9sLmg+CisKKyNpbmNsdWRlICJjYXB0dXJlLmgiCisjaW5jbHVkZSAiZHJpdmVyLmgiCisjaW5jbHVkZSAicGxheWJhY2suaCIKKworZW51bSBsaW5lNl9kZXZpY2VfdHlwZSB7CisJTElORTZfR1VJVEFSUE9SVCwKKwlMSU5FNl9QT0RTVFVESU9fR1gsCisJTElORTZfUE9EU1RVRElPX1VYMSwKKwlMSU5FNl9QT0RTVFVESU9fVVgyLAorCUxJTkU2X1RPTkVQT1JUX0dYLAorCUxJTkU2X1RPTkVQT1JUX1VYMSwKKwlMSU5FNl9UT05FUE9SVF9VWDIsCit9OworCitzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0OworCitzdHJ1Y3QgdG9uZXBvcnRfbGVkIHsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGRldjsKKwljaGFyIG5hbWVbNjRdOworCXN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKnRvbmVwb3J0OworCWJvb2wgcmVnaXN0ZXJlZDsKK307CisKK3N0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgeworCS8qIEdlbmVyaWMgTGluZSA2IFVTQiBkYXRhICovCisJc3RydWN0IHVzYl9saW5lNiBsaW5lNjsKKworCS8qIFNvdXJjZSBzZWxlY3RvciAqLworCWludCBzb3VyY2U7CisKKwkvKiBTZXJpYWwgbnVtYmVyIG9mIGRldmljZSAqLworCXUzMiBzZXJpYWxfbnVtYmVyOworCisJLyogRmlybXdhcmUgdmVyc2lvbiAoeCAxMDApICovCisJdTggZmlybXdhcmVfdmVyc2lvbjsKKworCS8qIFRpbWVyIGZvciBkZWxheWVkIFBDTSBzdGFydHVwICovCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisKKwkvKiBEZXZpY2UgdHlwZSAqLworCWVudW0gbGluZTZfZGV2aWNlX3R5cGUgdHlwZTsKKworCS8qIExFRCBpbnN0YW5jZXMgKi8KKwlzdHJ1Y3QgdG9uZXBvcnRfbGVkIGxlZHNbMl07Cit9OworCitzdGF0aWMgaW50IHRvbmVwb3J0X3NlbmRfY21kKHN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYsIGludCBjbWQxLCBpbnQgY21kMik7CisKKyNkZWZpbmUgVE9ORVBPUlRfUENNX0RFTEFZIDEKKworc3RhdGljIHN0cnVjdCBzbmRfcmF0ZGVuIHRvbmVwb3J0X3JhdGRlbiA9IHsKKwkubnVtX21pbiA9IDQ0MTAwLAorCS5udW1fbWF4ID0gNDQxMDAsCisJLm51bV9zdGVwID0gMSwKKwkuZGVuID0gMQorfTsKKworc3RhdGljIHN0cnVjdCBsaW5lNl9wY21fcHJvcGVydGllcyB0b25lcG9ydF9wY21fcHJvcGVydGllcyA9IHsKKwkucGxheWJhY2tfaHcgPSB7CisJCQkJICAuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQkJICAgU05EUlZfUENNX0lORk9fSU5URVJMRUFWRUQgfAorCQkJCQkgICBTTkRSVl9QQ01fSU5GT19CTE9DS19UUkFOU0ZFUiB8CisJCQkJCSAgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQkJCQkgICBTTkRSVl9QQ01fSU5GT19QQVVTRSB8CisJCQkJCSAgIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQpLAorCQkJCSAgLmZvcm1hdHMgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRSwKKwkJCQkgIC5yYXRlcyA9IFNORFJWX1BDTV9SQVRFX0tOT1QsCisJCQkJICAucmF0ZV9taW4gPSA0NDEwMCwKKwkJCQkgIC5yYXRlX21heCA9IDQ0MTAwLAorCQkJCSAgLmNoYW5uZWxzX21pbiA9IDIsCisJCQkJICAuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCQkgIC5idWZmZXJfYnl0ZXNfbWF4ID0gNjAwMDAsCisJCQkJICAucGVyaW9kX2J5dGVzX21pbiA9IDY0LAorCQkJCSAgLnBlcmlvZF9ieXRlc19tYXggPSA4MTkyLAorCQkJCSAgLnBlcmlvZHNfbWluID0gMSwKKwkJCQkgIC5wZXJpb2RzX21heCA9IDEwMjR9LAorCS5jYXB0dXJlX2h3ID0geworCQkJCSAuaW5mbyA9IChTTkRSVl9QQ01fSU5GT19NTUFQIHwKKwkJCQkJICBTTkRSVl9QQ01fSU5GT19JTlRFUkxFQVZFRCB8CisJCQkJCSAgU05EUlZfUENNX0lORk9fQkxPQ0tfVFJBTlNGRVIgfAorCQkJCQkgIFNORFJWX1BDTV9JTkZPX01NQVBfVkFMSUQgfAorCQkJCQkgIFNORFJWX1BDTV9JTkZPX1NZTkNfU1RBUlQpLAorCQkJCSAuZm9ybWF0cyA9IFNORFJWX1BDTV9GTVRCSVRfUzE2X0xFLAorCQkJCSAucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9LTk9ULAorCQkJCSAucmF0ZV9taW4gPSA0NDEwMCwKKwkJCQkgLnJhdGVfbWF4ID0gNDQxMDAsCisJCQkJIC5jaGFubmVsc19taW4gPSAyLAorCQkJCSAuY2hhbm5lbHNfbWF4ID0gMiwKKwkJCQkgLmJ1ZmZlcl9ieXRlc19tYXggPSA2MDAwMCwKKwkJCQkgLnBlcmlvZF9ieXRlc19taW4gPSA2NCwKKwkJCQkgLnBlcmlvZF9ieXRlc19tYXggPSA4MTkyLAorCQkJCSAucGVyaW9kc19taW4gPSAxLAorCQkJCSAucGVyaW9kc19tYXggPSAxMDI0fSwKKwkucmF0ZXMgPSB7CisJCQkgICAgLm5yYXRzID0gMSwKKwkJCSAgICAucmF0cyA9ICZ0b25lcG9ydF9yYXRkZW59LAorCS5ieXRlc19wZXJfZnJhbWUgPSA0Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBjb2RlOworfSB0b25lcG9ydF9zb3VyY2VfaW5mb1tdID0geworCXsiTWljcm9waG9uZSIsIDB4MGEwMX0sCisJeyJMaW5lIiwgMHgwODAxfSwKKwl7Ikluc3RydW1lbnQiLCAweDBiMDF9LAorCXsiSW5zdCAmIE1pYyIsIDB4MDkwMX0KK307CisKK3N0YXRpYyBpbnQgdG9uZXBvcnRfc2VuZF9jbWQoc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldiwgaW50IGNtZDEsIGludCBjbWQyKQoreworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2codXNiZGV2LCB1c2Jfc25kY3RybHBpcGUodXNiZGV2LCAwKSwgMHg2NywKKwkJCSAgICAgIFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UgfCBVU0JfRElSX09VVCwKKwkJCSAgICAgIGNtZDEsIGNtZDIsIE5VTEwsIDAsIExJTkU2X1RJTUVPVVQgKiBIWik7CisKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZ1c2JkZXYtPmRldiwgInNlbmQgZmFpbGVkIChlcnJvciAlZClcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIG1vbml0b3IgaW5mbyBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfdG9uZXBvcnRfbW9uaXRvcl9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCSAgICAgc3RydWN0IHNuZF9jdGxfZWxlbV9pbmZvICp1aW5mbykKK3sKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IDA7CisJdWluZm8tPnZhbHVlLmludGVnZXIubWF4ID0gMjU2OworCXJldHVybiAwOworfQorCisvKiBtb25pdG9yIGdldCBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfdG9uZXBvcnRfbW9uaXRvcl9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKworCXVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gbGluZTZwY20tPnZvbHVtZV9tb25pdG9yOworCXJldHVybiAwOworfQorCisvKiBtb25pdG9yIHB1dCBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfdG9uZXBvcnRfbW9uaXRvcl9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzbmRfbGluZTZfcGNtICpsaW5lNnBjbSA9IHNuZF9rY29udHJvbF9jaGlwKGtjb250cm9sKTsKKwlpbnQgZXJyOworCisJaWYgKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID09IGxpbmU2cGNtLT52b2x1bWVfbW9uaXRvcikKKwkJcmV0dXJuIDA7CisKKwlsaW5lNnBjbS0+dm9sdW1lX21vbml0b3IgPSB1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsKKworCWlmIChsaW5lNnBjbS0+dm9sdW1lX21vbml0b3IgPiAwKSB7CisJCWVyciA9IGxpbmU2X3BjbV9hY3F1aXJlKGxpbmU2cGNtLCBMSU5FNl9TVFJFQU1fTU9OSVRPUik7CisJCWlmIChlcnIgPCAwKSB7CisJCQlsaW5lNnBjbS0+dm9sdW1lX21vbml0b3IgPSAwOworCQkJbGluZTZfcGNtX3JlbGVhc2UobGluZTZwY20sIExJTkU2X1NUUkVBTV9NT05JVE9SKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9IGVsc2UgeworCQlsaW5lNl9wY21fcmVsZWFzZShsaW5lNnBjbSwgTElORTZfU1RSRUFNX01PTklUT1IpOworCX0KKworCXJldHVybiAxOworfQorCisvKiBzb3VyY2UgaW5mbyBjYWxsYmFjayAqLworc3RhdGljIGludCBzbmRfdG9uZXBvcnRfc291cmNlX2luZm8oc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqdWluZm8pCit7CisJY29uc3QgaW50IHNpemUgPSBBUlJBWV9TSVpFKHRvbmVwb3J0X3NvdXJjZV9pbmZvKTsKKworCXVpbmZvLT50eXBlID0gU05EUlZfQ1RMX0VMRU1fVFlQRV9FTlVNRVJBVEVEOworCXVpbmZvLT5jb3VudCA9IDE7CisJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbXMgPSBzaXplOworCisJaWYgKHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW0gPj0gc2l6ZSkKKwkJdWluZm8tPnZhbHVlLmVudW1lcmF0ZWQuaXRlbSA9IHNpemUgLSAxOworCisJc3RyY3B5KHVpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLm5hbWUsCisJICAgICAgIHRvbmVwb3J0X3NvdXJjZV9pbmZvW3VpbmZvLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1dLm5hbWUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHNvdXJjZSBnZXQgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX3RvbmVwb3J0X3NvdXJjZV9nZXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKnRvbmVwb3J0ID0KKwkgICAgKHN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKilsaW5lNnBjbS0+bGluZTY7CisJdWNvbnRyb2wtPnZhbHVlLmVudW1lcmF0ZWQuaXRlbVswXSA9IHRvbmVwb3J0LT5zb3VyY2U7CisJcmV0dXJuIDA7Cit9CisKKy8qIHNvdXJjZSBwdXQgY2FsbGJhY2sgKi8KK3N0YXRpYyBpbnQgc25kX3RvbmVwb3J0X3NvdXJjZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQkJICAgc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCit7CisJc3RydWN0IHNuZF9saW5lNl9wY20gKmxpbmU2cGNtID0gc25kX2tjb250cm9sX2NoaXAoa2NvbnRyb2wpOworCXN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKnRvbmVwb3J0ID0KKwkgICAgKHN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKilsaW5lNnBjbS0+bGluZTY7CisJdW5zaWduZWQgaW50IHNvdXJjZTsKKworCXNvdXJjZSA9IHVjb250cm9sLT52YWx1ZS5lbnVtZXJhdGVkLml0ZW1bMF07CisJaWYgKHNvdXJjZSA+PSBBUlJBWV9TSVpFKHRvbmVwb3J0X3NvdXJjZV9pbmZvKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHNvdXJjZSA9PSB0b25lcG9ydC0+c291cmNlKQorCQlyZXR1cm4gMDsKKworCXRvbmVwb3J0LT5zb3VyY2UgPSBzb3VyY2U7CisJdG9uZXBvcnRfc2VuZF9jbWQodG9uZXBvcnQtPmxpbmU2LnVzYmRldiwKKwkJCSAgdG9uZXBvcnRfc291cmNlX2luZm9bc291cmNlXS5jb2RlLCAweDAwMDApOworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCB0b25lcG9ydF9zdGFydF9wY20odW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdG9uZXBvcnQgPSAoc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqKWFyZzsKKwlzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNiA9ICZ0b25lcG9ydC0+bGluZTY7CisKKwlsaW5lNl9wY21fYWNxdWlyZShsaW5lNi0+bGluZTZwY20sIExJTkU2X1NUUkVBTV9NT05JVE9SKTsKK30KKworLyogY29udHJvbCBkZWZpbml0aW9uICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdG9uZXBvcnRfY29udHJvbF9tb25pdG9yID0geworCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAorCS5uYW1lID0gIk1vbml0b3IgUGxheWJhY2sgVm9sdW1lIiwKKwkuaW5kZXggPSAwLAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFLAorCS5pbmZvID0gc25kX3RvbmVwb3J0X21vbml0b3JfaW5mbywKKwkuZ2V0ID0gc25kX3RvbmVwb3J0X21vbml0b3JfZ2V0LAorCS5wdXQgPSBzbmRfdG9uZXBvcnRfbW9uaXRvcl9wdXQKK307CisKKy8qIHNvdXJjZSBzZWxlY3RvciBkZWZpbml0aW9uICovCitzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdG9uZXBvcnRfY29udHJvbF9zb3VyY2UgPSB7CisJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCisJLm5hbWUgPSAiUENNIENhcHR1cmUgU291cmNlIiwKKwkuaW5kZXggPSAwLAorCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRFdSSVRFLAorCS5pbmZvID0gc25kX3RvbmVwb3J0X3NvdXJjZV9pbmZvLAorCS5nZXQgPSBzbmRfdG9uZXBvcnRfc291cmNlX2dldCwKKwkucHV0ID0gc25kX3RvbmVwb3J0X3NvdXJjZV9wdXQKK307CisKKy8qCisJRm9yIHRoZSBsZWQgb24gR3VpdGFycG9ydC4KKwlCcmlnaHRuZXNzIGdvZXMgZnJvbSAweDAwIHRvIDB4MjYuIFNldCBhIHZhbHVlIGFib3ZlIHRoaXMgdG8gaGF2ZSBsZWQKKwlibGluay4KKwkodm9pZCBjbWRfMHgwMihieXRlIHJlZCwgYnl0ZSBncmVlbikKKyovCisKK3N0YXRpYyBib29sIHRvbmVwb3J0X2hhc19sZWQoc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdG9uZXBvcnQpCit7CisJc3dpdGNoICh0b25lcG9ydC0+dHlwZSkgeworCWNhc2UgTElORTZfR1VJVEFSUE9SVDoKKwljYXNlIExJTkU2X1RPTkVQT1JUX0dYOgorCS8qIGFkZCB5b3VyIGRldmljZSBoZXJlIGlmIHlvdSBhcmUgbWlzc2luZyBzdXBwb3J0IGZvciB0aGUgTEVEcyAqLworCQlyZXR1cm4gdHJ1ZTsKKworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgbGVkX2NvbG9yc1syXSA9IHsgInJlZCIsICJncmVlbiIgfTsKK3N0YXRpYyBjb25zdCBpbnQgbGVkX2luaXRfdmFsc1syXSA9IHsgMHgwMCwgMHgyNiB9OworCitzdGF0aWMgdm9pZCB0b25lcG9ydF91cGRhdGVfbGVkKHN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKnRvbmVwb3J0KQoreworCXRvbmVwb3J0X3NlbmRfY21kKHRvbmVwb3J0LT5saW5lNi51c2JkZXYsCisJCQkgICh0b25lcG9ydC0+bGVkc1swXS5kZXYuYnJpZ2h0bmVzcyA8PCA4KSB8IDB4MDAwMiwKKwkJCSAgdG9uZXBvcnQtPmxlZHNbMV0uZGV2LmJyaWdodG5lc3MpOworfQorCitzdGF0aWMgdm9pZCB0b25lcG9ydF9sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCisJCQkJCWVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgdG9uZXBvcnRfbGVkICpsZWRzID0KKwkJY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgdG9uZXBvcnRfbGVkLCBkZXYpOworCXRvbmVwb3J0X3VwZGF0ZV9sZWQobGVkcy0+dG9uZXBvcnQpOworfQorCitzdGF0aWMgaW50IHRvbmVwb3J0X2luaXRfbGVkcyhzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICp0b25lcG9ydCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmdG9uZXBvcnQtPmxpbmU2LnVzYmRldi0+ZGV2OworCWludCBpLCBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXN0cnVjdCB0b25lcG9ydF9sZWQgKmxlZCA9ICZ0b25lcG9ydC0+bGVkc1tpXTsKKwkJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkZGV2ID0gJmxlZC0+ZGV2OworCisJCWxlZC0+dG9uZXBvcnQgPSB0b25lcG9ydDsKKwkJc25wcmludGYobGVkLT5uYW1lLCBzaXplb2YobGVkLT5uYW1lKSwgIiVzOjolcyIsCisJCQkgZGV2X25hbWUoZGV2KSwgbGVkX2NvbG9yc1tpXSk7CisJCWxlZGRldi0+bmFtZSA9IGxlZC0+bmFtZTsKKwkJbGVkZGV2LT5icmlnaHRuZXNzID0gbGVkX2luaXRfdmFsc1tpXTsKKwkJbGVkZGV2LT5tYXhfYnJpZ2h0bmVzcyA9IDB4MjY7CisJCWxlZGRldi0+YnJpZ2h0bmVzc19zZXQgPSB0b25lcG9ydF9sZWRfYnJpZ2h0bmVzc19zZXQ7CisJCWVyciA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihkZXYsIGxlZGRldik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlsZWQtPnJlZ2lzdGVyZWQgPSB0cnVlOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0b25lcG9ydF9yZW1vdmVfbGVkcyhzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICp0b25lcG9ydCkKK3sKKwlzdHJ1Y3QgdG9uZXBvcnRfbGVkICpsZWQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWxlZCA9ICZ0b25lcG9ydC0+bGVkc1tpXTsKKwkJaWYgKCFsZWQtPnJlZ2lzdGVyZWQpCisJCQlicmVhazsKKwkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+ZGV2KTsKKwkJbGVkLT5yZWdpc3RlcmVkID0gZmFsc2U7CisJfQorfQorCitzdGF0aWMgYm9vbCB0b25lcG9ydF9oYXNfc291cmNlX3NlbGVjdChzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICp0b25lcG9ydCkKK3sKKwlzd2l0Y2ggKHRvbmVwb3J0LT50eXBlKSB7CisJY2FzZSBMSU5FNl9UT05FUE9SVF9VWDE6CisJY2FzZSBMSU5FNl9UT05FUE9SVF9VWDI6CisJY2FzZSBMSU5FNl9QT0RTVFVESU9fVVgxOgorCWNhc2UgTElORTZfUE9EU1RVRElPX1VYMjoKKwkJcmV0dXJuIHRydWU7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCisvKgorCVNldHVwIFRvbmVwb3J0IGRldmljZS4KKyovCitzdGF0aWMgdm9pZCB0b25lcG9ydF9zZXR1cChzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICp0b25lcG9ydCkKK3sKKwlpbnQgdGlja3M7CisJc3RydWN0IHVzYl9saW5lNiAqbGluZTYgPSAmdG9uZXBvcnQtPmxpbmU2OworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXYgPSBsaW5lNi0+dXNiZGV2OworCisJLyogc3luYyB0aW1lIG9uIGRldmljZSB3aXRoIGhvc3Q6ICovCisJdGlja3MgPSAoaW50KWdldF9zZWNvbmRzKCk7CisJbGluZTZfd3JpdGVfZGF0YShsaW5lNiwgMHg4MGM2LCAmdGlja3MsIDQpOworCisJLyogZW5hYmxlIGRldmljZTogKi8KKwl0b25lcG9ydF9zZW5kX2NtZCh1c2JkZXYsIDB4MDMwMSwgMHgwMDAwKTsKKworCS8qIGluaXRpYWxpemUgc291cmNlIHNlbGVjdDogKi8KKwlpZiAodG9uZXBvcnRfaGFzX3NvdXJjZV9zZWxlY3QodG9uZXBvcnQpKQorCQl0b25lcG9ydF9zZW5kX2NtZCh1c2JkZXYsCisJCQkJICB0b25lcG9ydF9zb3VyY2VfaW5mb1t0b25lcG9ydC0+c291cmNlXS5jb2RlLAorCQkJCSAgMHgwMDAwKTsKKworCWlmICh0b25lcG9ydF9oYXNfbGVkKHRvbmVwb3J0KSkKKwkJdG9uZXBvcnRfdXBkYXRlX2xlZCh0b25lcG9ydCk7CisKKwltb2RfdGltZXIoJnRvbmVwb3J0LT50aW1lciwgamlmZmllcyArIFRPTkVQT1JUX1BDTV9ERUxBWSAqIEhaKTsKK30KKworLyoKKwlUb25lcG9ydCBkZXZpY2UgZGlzY29ubmVjdGVkLgorKi8KK3N0YXRpYyB2b2lkIGxpbmU2X3RvbmVwb3J0X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9saW5lNiAqbGluZTYpCit7CisJc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqdG9uZXBvcnQgPQorCQkoc3RydWN0IHVzYl9saW5lNl90b25lcG9ydCAqKWxpbmU2OworCisJZGVsX3RpbWVyX3N5bmMoJnRvbmVwb3J0LT50aW1lcik7CisKKwlpZiAodG9uZXBvcnRfaGFzX2xlZCh0b25lcG9ydCkpCisJCXRvbmVwb3J0X3JlbW92ZV9sZWRzKHRvbmVwb3J0KTsKK30KKworCisvKgorCSBUcnkgdG8gaW5pdCBUb25lcG9ydCBkZXZpY2UuCisqLworc3RhdGljIGludCB0b25lcG9ydF9pbml0KHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LAorCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQgKnRvbmVwb3J0ID0gIChzdHJ1Y3QgdXNiX2xpbmU2X3RvbmVwb3J0ICopIGxpbmU2OworCisJdG9uZXBvcnQtPnR5cGUgPSBpZC0+ZHJpdmVyX2luZm87CisJc2V0dXBfdGltZXIoJnRvbmVwb3J0LT50aW1lciwgdG9uZXBvcnRfc3RhcnRfcGNtLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpdG9uZXBvcnQpOworCisJbGluZTYtPmRpc2Nvbm5lY3QgPSBsaW5lNl90b25lcG9ydF9kaXNjb25uZWN0OworCisJLyogaW5pdGlhbGl6ZSBQQ00gc3Vic3lzdGVtOiAqLworCWVyciA9IGxpbmU2X2luaXRfcGNtKGxpbmU2LCAmdG9uZXBvcnRfcGNtX3Byb3BlcnRpZXMpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJLyogcmVnaXN0ZXIgbW9uaXRvciBjb250cm9sOiAqLworCWVyciA9IHNuZF9jdGxfYWRkKGxpbmU2LT5jYXJkLAorCQkJICBzbmRfY3RsX25ldzEoJnRvbmVwb3J0X2NvbnRyb2xfbW9uaXRvciwKKwkJCQkgICAgICAgbGluZTYtPmxpbmU2cGNtKSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkvKiByZWdpc3RlciBzb3VyY2Ugc2VsZWN0IGNvbnRyb2w6ICovCisJaWYgKHRvbmVwb3J0X2hhc19zb3VyY2Vfc2VsZWN0KHRvbmVwb3J0KSkgeworCQllcnIgPQorCQkgICAgc25kX2N0bF9hZGQobGluZTYtPmNhcmQsCisJCQkJc25kX2N0bF9uZXcxKCZ0b25lcG9ydF9jb250cm9sX3NvdXJjZSwKKwkJCQkJICAgICBsaW5lNi0+bGluZTZwY20pKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KKworCWxpbmU2X3JlYWRfc2VyaWFsX251bWJlcihsaW5lNiwgJnRvbmVwb3J0LT5zZXJpYWxfbnVtYmVyKTsKKwlsaW5lNl9yZWFkX2RhdGEobGluZTYsIDB4ODBjMiwgJnRvbmVwb3J0LT5maXJtd2FyZV92ZXJzaW9uLCAxKTsKKworCWlmICh0b25lcG9ydF9oYXNfbGVkKHRvbmVwb3J0KSkgeworCQllcnIgPSB0b25lcG9ydF9pbml0X2xlZHModG9uZXBvcnQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisJdG9uZXBvcnRfc2V0dXAodG9uZXBvcnQpOworCisJLyogcmVnaXN0ZXIgYXVkaW8gc3lzdGVtOiAqLworCXJldHVybiBzbmRfY2FyZF9yZWdpc3RlcihsaW5lNi0+Y2FyZCk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKy8qCisJUmVzdW1lIFRvbmVwb3J0IGRldmljZSBhZnRlciByZXNldC4KKyovCitzdGF0aWMgaW50IHRvbmVwb3J0X3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXRvbmVwb3J0X3NldHVwKHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKSk7CisJcmV0dXJuIGxpbmU2X3Jlc3VtZShpbnRlcmZhY2UpOworfQorI2VuZGlmCisKKyNkZWZpbmUgTElORTZfREVWSUNFKHByb2QpIFVTQl9ERVZJQ0UoMHgwZTQxLCBwcm9kKQorI2RlZmluZSBMSU5FNl9JRl9OVU0ocHJvZCwgbikgVVNCX0RFVklDRV9JTlRFUkZBQ0VfTlVNQkVSKDB4MGU0MSwgcHJvZCwgbikKKworLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHRvbmVwb3J0X2lkX3RhYmxlW10gPSB7CisJeyBMSU5FNl9ERVZJQ0UoMHg0NzUwKSwgICAgLmRyaXZlcl9pbmZvID0gTElORTZfR1VJVEFSUE9SVCB9LAorCXsgTElORTZfREVWSUNFKDB4NDE1MyksICAgIC5kcml2ZXJfaW5mbyA9IExJTkU2X1BPRFNUVURJT19HWCB9LAorCXsgTElORTZfREVWSUNFKDB4NDE1MCksICAgIC5kcml2ZXJfaW5mbyA9IExJTkU2X1BPRFNUVURJT19VWDEgfSwKKwl7IExJTkU2X0lGX05VTSgweDQxNTEsIDApLCAuZHJpdmVyX2luZm8gPSBMSU5FNl9QT0RTVFVESU9fVVgyIH0sCisJeyBMSU5FNl9ERVZJQ0UoMHg0MTQ3KSwgICAgLmRyaXZlcl9pbmZvID0gTElORTZfVE9ORVBPUlRfR1ggfSwKKwl7IExJTkU2X0RFVklDRSgweDQxNDEpLCAgICAuZHJpdmVyX2luZm8gPSBMSU5FNl9UT05FUE9SVF9VWDEgfSwKKwl7IExJTkU2X0lGX05VTSgweDQxNDIsIDApLCAuZHJpdmVyX2luZm8gPSBMSU5FNl9UT05FUE9SVF9VWDIgfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHRvbmVwb3J0X2lkX3RhYmxlKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBsaW5lNl9wcm9wZXJ0aWVzIHRvbmVwb3J0X3Byb3BlcnRpZXNfdGFibGVbXSA9IHsKKwlbTElORTZfR1VJVEFSUE9SVF0gPSB7CisJCS5pZCA9ICJHdWl0YXJQb3J0IiwKKwkJLm5hbWUgPSAiR3VpdGFyUG9ydCIsCisJCS5jYXBhYmlsaXRpZXMJPSBMSU5FNl9DQVBfUENNLAorCQkuYWx0c2V0dGluZyA9IDIsICAvKiAxLi40IHNlZW0gdG8gYmUgb2sgKi8KKwkJLyogbm8gY29udHJvbCBjaGFubmVsICovCisJCS5lcF9hdWRpb19yID0gMHg4MiwKKwkJLmVwX2F1ZGlvX3cgPSAweDAxLAorCX0sCisJW0xJTkU2X1BPRFNUVURJT19HWF0gPSB7CisJCS5pZCA9ICJQT0RTdHVkaW9HWCIsCisJCS5uYW1lID0gIlBPRCBTdHVkaW8gR1giLAorCQkuY2FwYWJpbGl0aWVzCT0gTElORTZfQ0FQX1BDTSwKKwkJLmFsdHNldHRpbmcgPSAyLCAgLyogMS4uNCBzZWVtIHRvIGJlIG9rICovCisJCS8qIG5vIGNvbnRyb2wgY2hhbm5lbCAqLworCQkuZXBfYXVkaW9fciA9IDB4ODIsCisJCS5lcF9hdWRpb193ID0gMHgwMSwKKwl9LAorCVtMSU5FNl9QT0RTVFVESU9fVVgxXSA9IHsKKwkJLmlkID0gIlBPRFN0dWRpb1VYMSIsCisJCS5uYW1lID0gIlBPRCBTdHVkaW8gVVgxIiwKKwkJLmNhcGFiaWxpdGllcwk9IExJTkU2X0NBUF9QQ00sCisJCS5hbHRzZXR0aW5nID0gMiwgIC8qIDEuLjQgc2VlbSB0byBiZSBvayAqLworCQkvKiBubyBjb250cm9sIGNoYW5uZWwgKi8KKwkJLmVwX2F1ZGlvX3IgPSAweDgyLAorCQkuZXBfYXVkaW9fdyA9IDB4MDEsCisJfSwKKwlbTElORTZfUE9EU1RVRElPX1VYMl0gPSB7CisJCS5pZCA9ICJQT0RTdHVkaW9VWDIiLAorCQkubmFtZSA9ICJQT0QgU3R1ZGlvIFVYMiIsCisJCS5jYXBhYmlsaXRpZXMJPSBMSU5FNl9DQVBfUENNLAorCQkuYWx0c2V0dGluZyA9IDIsICAvKiBkZWZhdWx0cyB0byA0NC4xa0h6LCAxNi1iaXQgKi8KKwkJLyogbm8gY29udHJvbCBjaGFubmVsICovCisJCS5lcF9hdWRpb19yID0gMHg4MiwKKwkJLmVwX2F1ZGlvX3cgPSAweDAxLAorCX0sCisJW0xJTkU2X1RPTkVQT1JUX0dYXSA9IHsKKwkJLmlkID0gIlRvbmVQb3J0R1giLAorCQkubmFtZSA9ICJUb25lUG9ydCBHWCIsCisJCS5jYXBhYmlsaXRpZXMJPSBMSU5FNl9DQVBfUENNLAorCQkuYWx0c2V0dGluZyA9IDIsICAvKiAxLi40IHNlZW0gdG8gYmUgb2sgKi8KKwkJLyogbm8gY29udHJvbCBjaGFubmVsICovCisJCS5lcF9hdWRpb19yID0gMHg4MiwKKwkJLmVwX2F1ZGlvX3cgPSAweDAxLAorCX0sCisJW0xJTkU2X1RPTkVQT1JUX1VYMV0gPSB7CisJCS5pZCA9ICJUb25lUG9ydFVYMSIsCisJCS5uYW1lID0gIlRvbmVQb3J0IFVYMSIsCisJCS5jYXBhYmlsaXRpZXMJPSBMSU5FNl9DQVBfUENNLAorCQkuYWx0c2V0dGluZyA9IDIsICAvKiAxLi40IHNlZW0gdG8gYmUgb2sgKi8KKwkJLyogbm8gY29udHJvbCBjaGFubmVsICovCisJCS5lcF9hdWRpb19yID0gMHg4MiwKKwkJLmVwX2F1ZGlvX3cgPSAweDAxLAorCX0sCisJW0xJTkU2X1RPTkVQT1JUX1VYMl0gPSB7CisJCS5pZCA9ICJUb25lUG9ydFVYMiIsCisJCS5uYW1lID0gIlRvbmVQb3J0IFVYMiIsCisJCS5jYXBhYmlsaXRpZXMJPSBMSU5FNl9DQVBfUENNLAorCQkuYWx0c2V0dGluZyA9IDIsICAvKiBkZWZhdWx0cyB0byA0NC4xa0h6LCAxNi1iaXQgKi8KKwkJLyogbm8gY29udHJvbCBjaGFubmVsICovCisJCS5lcF9hdWRpb19yID0gMHg4MiwKKwkJLmVwX2F1ZGlvX3cgPSAweDAxLAorCX0sCit9OworCisvKgorCVByb2JlIFVTQiBkZXZpY2UuCisqLworc3RhdGljIGludCB0b25lcG9ydF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJcmV0dXJuIGxpbmU2X3Byb2JlKGludGVyZmFjZSwgaWQsICJMaW5lNi1Ub25lUG9ydCIsCisJCQkgICAmdG9uZXBvcnRfcHJvcGVydGllc190YWJsZVtpZC0+ZHJpdmVyX2luZm9dLAorCQkJICAgdG9uZXBvcnRfaW5pdCwgc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTZfdG9uZXBvcnQpKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHRvbmVwb3J0X2RyaXZlciA9IHsKKwkubmFtZSA9IEtCVUlMRF9NT0ROQU1FLAorCS5wcm9iZSA9IHRvbmVwb3J0X3Byb2JlLAorCS5kaXNjb25uZWN0ID0gbGluZTZfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGxpbmU2X3N1c3BlbmQsCisJLnJlc3VtZSA9IGxpbmU2X3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0gdG9uZXBvcnRfcmVzZXRfcmVzdW1lLAorI2VuZGlmCisJLmlkX3RhYmxlID0gdG9uZXBvcnRfaWRfdGFibGUsCit9OworCittb2R1bGVfdXNiX2RyaXZlcih0b25lcG9ydF9kcml2ZXIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlRvbmVQb3J0IFVTQiBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi92YXJpYXguYyBiL3NvdW5kL3VzYi9saW5lNi92YXJpYXguYwpzaW1pbGFyaXR5IGluZGV4IDYwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL3N0YWdpbmcvbGluZTYvdmFyaWF4LmMKcmVuYW1lIHRvIHNvdW5kL3VzYi9saW5lNi92YXJpYXguYwppbmRleCBhZTJiZTk5Li5kZGMyM2RkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdmFyaWF4LmMKKysrIGIvc291bmQvdXNiL2xpbmU2L3ZhcmlheC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIExpbmU2IExpbnV4IFVTQiBkcml2ZXIgLSAwLjkuMWJldGEKKyAqIExpbmUgNiBMaW51eCBVU0IgZHJpdmVyCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTWFya3VzIEdyYWJuZXIgKGdyYWJuZXJAaWNnLnR1Z3Jhei5hdCkKICAqCkBAIC0xMCwxMCArMTAsNTMgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KIAotI2luY2x1ZGUgImF1ZGlvLmgiCiAjaW5jbHVkZSAiZHJpdmVyLmgiCi0jaW5jbHVkZSAidmFyaWF4LmgiCisKKyNkZWZpbmUgVkFSSUFYX1NUQVJUVVBfREVMQVkxIDEwMDAKKyNkZWZpbmUgVkFSSUFYX1NUQVJUVVBfREVMQVkzIDEwMAorI2RlZmluZSBWQVJJQVhfU1RBUlRVUF9ERUxBWTQgMTAwCisKKy8qCisJU3RhZ2VzIG9mIFZhcmlheCBzdGFydHVwIHByb2NlZHVyZQorKi8KK2VudW0geworCVZBUklBWF9TVEFSVFVQX0lOSVQgPSAxLAorCVZBUklBWF9TVEFSVFVQX1ZFUlNJT05SRVEsCisJVkFSSUFYX1NUQVJUVVBfV0FJVCwKKwlWQVJJQVhfU1RBUlRVUF9BQ1RJVkFURSwKKwlWQVJJQVhfU1RBUlRVUF9XT1JLUVVFVUUsCisJVkFSSUFYX1NUQVJUVVBfU0VUVVAsCisJVkFSSUFYX1NUQVJUVVBfTEFTVCA9IFZBUklBWF9TVEFSVFVQX1NFVFVQIC0gMQorfTsKKworZW51bSB7CisJTElORTZfUE9EWFRMSVZFX1ZBUklBWCwKKwlMSU5FNl9WQVJJQVgKK307CisKK3N0cnVjdCB1c2JfbGluZTZfdmFyaWF4IHsKKwkvKiBHZW5lcmljIExpbmUgNiBVU0IgZGF0YSAqLworCXN0cnVjdCB1c2JfbGluZTYgbGluZTY7CisKKwkvKiBCdWZmZXIgZm9yIGFjdGl2YXRpb24gY29kZSAqLworCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcl9hY3RpdmF0ZTsKKworCS8qIEhhbmRsZXIgZm9yIGRldmljZSBpbml0aWFsaXphdGlvbiAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBzdGFydHVwX3dvcms7CisKKwkvKiBUaW1lcnMgZm9yIGRldmljZSBpbml0aWFsaXphdGlvbiAqLworCXN0cnVjdCB0aW1lcl9saXN0IHN0YXJ0dXBfdGltZXIxOworCXN0cnVjdCB0aW1lcl9saXN0IHN0YXJ0dXBfdGltZXIyOworCisJLyogQ3VycmVudCBwcm9ncmVzcyBpbiBzdGFydHVwIHByb2NlZHVyZSAqLworCWludCBzdGFydHVwX3Byb2dyZXNzOworfTsKIAogI2RlZmluZSBWQVJJQVhfT0ZGU0VUX0FDVElWQVRFIDcKIApAQCAtMTI0LDE0ICsxNjcsMTUgQEAKIAlDSEVDS19TVEFSVFVQX1BST0dSRVNTKHZhcmlheC0+c3RhcnR1cF9wcm9ncmVzcywgVkFSSUFYX1NUQVJUVVBfU0VUVVApOwogCiAJLyogQUxTQSBhdWRpbyBpbnRlcmZhY2U6ICovCi0JbGluZTZfcmVnaXN0ZXJfYXVkaW8oJnZhcmlheC0+bGluZTYpOworCXNuZF9jYXJkX3JlZ2lzdGVyKHZhcmlheC0+bGluZTYuY2FyZCk7CiB9CiAKIC8qCiAJUHJvY2VzcyBhIGNvbXBsZXRlbHkgcmVjZWl2ZWQgbWVzc2FnZS4KICovCi12b2lkIGxpbmU2X3ZhcmlheF9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCkKK3N0YXRpYyB2b2lkIGxpbmU2X3ZhcmlheF9wcm9jZXNzX21lc3NhZ2Uoc3RydWN0IHVzYl9saW5lNiAqbGluZTYpCiB7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IChzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqKSBsaW5lNjsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpidWYgPSB2YXJpYXgtPmxpbmU2LmJ1ZmZlcl9tZXNzYWdlOwogCiAJc3dpdGNoIChidWZbMF0pIHsKQEAgLTE1NSwxMyArMTk5LDkgQEAKIC8qCiAJVmFyaWF4IGRlc3RydWN0b3IuCiAqLwotc3RhdGljIHZvaWQgdmFyaWF4X2Rlc3RydWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCitzdGF0aWMgdm9pZCBsaW5lNl92YXJpYXhfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2xpbmU2ICpsaW5lNikKIHsKLQlzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwotCi0JaWYgKHZhcmlheCA9PSBOVUxMKQotCQlyZXR1cm47Ci0JbGluZTZfY2xlYW51cF9hdWRpbygmdmFyaWF4LT5saW5lNik7CisJc3RydWN0IHVzYl9saW5lNl92YXJpYXggKnZhcmlheCA9IChzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqKWxpbmU2OwogCiAJZGVsX3RpbWVyKCZ2YXJpYXgtPnN0YXJ0dXBfdGltZXIxKTsKIAlkZWxfdGltZXIoJnZhcmlheC0+c3RhcnR1cF90aW1lcjIpOwpAQCAtMTczLDMxICsyMTMsMjUgQEAKIC8qCiAJIFRyeSB0byBpbml0IHdvcmtiZW5jaCBkZXZpY2UuCiAqLwotc3RhdGljIGludCB2YXJpYXhfdHJ5X2luaXQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKLQkJCSAgIHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXgpCitzdGF0aWMgaW50IHZhcmlheF9pbml0KHN0cnVjdCB1c2JfbGluZTYgKmxpbmU2LAorCQkgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogeworCXN0cnVjdCB1c2JfbGluZTZfdmFyaWF4ICp2YXJpYXggPSAoc3RydWN0IHVzYl9saW5lNl92YXJpYXggKikgbGluZTY7CiAJaW50IGVycjsKIAorCWxpbmU2LT5wcm9jZXNzX21lc3NhZ2UgPSBsaW5lNl92YXJpYXhfcHJvY2Vzc19tZXNzYWdlOworCWxpbmU2LT5kaXNjb25uZWN0ID0gbGluZTZfdmFyaWF4X2Rpc2Nvbm5lY3Q7CisKIAlpbml0X3RpbWVyKCZ2YXJpYXgtPnN0YXJ0dXBfdGltZXIxKTsKIAlpbml0X3RpbWVyKCZ2YXJpYXgtPnN0YXJ0dXBfdGltZXIyKTsKIAlJTklUX1dPUksoJnZhcmlheC0+c3RhcnR1cF93b3JrLCB2YXJpYXhfc3RhcnR1cDYpOwogCi0JaWYgKChpbnRlcmZhY2UgPT0gTlVMTCkgfHwgKHZhcmlheCA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAkvKiBpbml0aWFsaXplIFVTQiBidWZmZXJzOiAqLwogCXZhcmlheC0+YnVmZmVyX2FjdGl2YXRlID0ga21lbWR1cCh2YXJpYXhfYWN0aXZhdGUsCiAJCQkJCSAgc2l6ZW9mKHZhcmlheF9hY3RpdmF0ZSksIEdGUF9LRVJORUwpOwogCi0JaWYgKHZhcmlheC0+YnVmZmVyX2FjdGl2YXRlID09IE5VTEwpIHsKLQkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwlpZiAodmFyaWF4LT5idWZmZXJfYWN0aXZhdGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogaW5pdGlhbGl6ZSBhdWRpbyBzeXN0ZW06ICovCi0JZXJyID0gbGluZTZfaW5pdF9hdWRpbygmdmFyaWF4LT5saW5lNik7Ci0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7CiAKIAkvKiBpbml0aWFsaXplIE1JREkgc3Vic3lzdGVtOiAqLwogCWVyciA9IGxpbmU2X2luaXRfbWlkaSgmdmFyaWF4LT5saW5lNik7CkBAIC0yMDksMjcgKzI0Myw2NCBAQAogCXJldHVybiAwOwogfQogCi0vKgotCSBJbml0IHdvcmtiZW5jaCBkZXZpY2UgKGFuZCBjbGVhbiB1cCBpbiBjYXNlIG9mIGZhaWx1cmUpLgotKi8KLWludCBsaW5lNl92YXJpYXhfaW5pdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAotCQkgICAgICBzdHJ1Y3QgdXNiX2xpbmU2X3ZhcmlheCAqdmFyaWF4KQotewotCWludCBlcnIgPSB2YXJpYXhfdHJ5X2luaXQoaW50ZXJmYWNlLCB2YXJpYXgpOworI2RlZmluZSBMSU5FNl9ERVZJQ0UocHJvZCkgVVNCX0RFVklDRSgweDBlNDEsIHByb2QpCisjZGVmaW5lIExJTkU2X0lGX05VTShwcm9kLCBuKSBVU0JfREVWSUNFX0lOVEVSRkFDRV9OVU1CRVIoMHgwZTQxLCBwcm9kLCBuKQogCi0JaWYgKGVyciA8IDApCi0JCXZhcmlheF9kZXN0cnVjdChpbnRlcmZhY2UpOworLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHZhcmlheF9pZF90YWJsZVtdID0geworCXsgTElORTZfSUZfTlVNKDB4NDY1MCwgMSksIC5kcml2ZXJfaW5mbyA9IExJTkU2X1BPRFhUTElWRV9WQVJJQVggfSwKKwl7IExJTkU2X0RFVklDRSgweDUzNGQpLCAgICAuZHJpdmVyX2luZm8gPSBMSU5FNl9WQVJJQVggfSwKKwl7fQorfTsKIAotCXJldHVybiBlcnI7Ci19CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgdmFyaWF4X2lkX3RhYmxlKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBsaW5lNl9wcm9wZXJ0aWVzIHZhcmlheF9wcm9wZXJ0aWVzX3RhYmxlW10gPSB7CisJW0xJTkU2X1BPRFhUTElWRV9WQVJJQVhdID0geworCQkuaWQgPSAiUE9EeHRMaXZlIiwKKwkJLm5hbWUgPSAiUE9EeHQgTGl2ZSIsCisJCS5jYXBhYmlsaXRpZXMJPSBMSU5FNl9DQVBfQ09OVFJPTCwKKwkJLmFsdHNldHRpbmcgPSAxLAorCQkuZXBfY3RybF9yID0gMHg4NiwKKwkJLmVwX2N0cmxfdyA9IDB4MDUsCisJCS5lcF9hdWRpb19yID0gMHg4MiwKKwkJLmVwX2F1ZGlvX3cgPSAweDAxLAorCX0sCisJW0xJTkU2X1ZBUklBWF0gPSB7CisJCS5pZCA9ICJWYXJpYXgiLAorCQkubmFtZSA9ICJWYXJpYXggV29ya2JlbmNoIiwKKwkJLmNhcGFiaWxpdGllcwk9IExJTkU2X0NBUF9DT05UUk9MLAorCQkuYWx0c2V0dGluZyA9IDEsCisJCS5lcF9jdHJsX3IgPSAweDgyLAorCQkuZXBfY3RybF93ID0gMHgwMSwKKwkJLyogbm8gYXVkaW8gY2hhbm5lbCAqLworCX0KK307CiAKIC8qCi0JV29ya2JlbmNoIGRldmljZSBkaXNjb25uZWN0ZWQuCisJUHJvYmUgVVNCIGRldmljZS4KICovCi12b2lkIGxpbmU2X3ZhcmlheF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCitzdGF0aWMgaW50IHZhcmlheF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewotCWlmIChpbnRlcmZhY2UgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JdmFyaWF4X2Rlc3RydWN0KGludGVyZmFjZSk7CisJcmV0dXJuIGxpbmU2X3Byb2JlKGludGVyZmFjZSwgaWQsICJMaW5lNi1WYXJpYXgiLAorCQkJICAgJnZhcmlheF9wcm9wZXJ0aWVzX3RhYmxlW2lkLT5kcml2ZXJfaW5mb10sCisJCQkgICB2YXJpYXhfaW5pdCwgc2l6ZW9mKHN0cnVjdCB1c2JfbGluZTZfdmFyaWF4KSk7CiB9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB2YXJpYXhfZHJpdmVyID0geworCS5uYW1lID0gS0JVSUxEX01PRE5BTUUsCisJLnByb2JlID0gdmFyaWF4X3Byb2JlLAorCS5kaXNjb25uZWN0ID0gbGluZTZfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGxpbmU2X3N1c3BlbmQsCisJLnJlc3VtZSA9IGxpbmU2X3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0gbGluZTZfcmVzdW1lLAorI2VuZGlmCisJLmlkX3RhYmxlID0gdmFyaWF4X2lkX3RhYmxlLAorfTsKKworbW9kdWxlX3VzYl9kcml2ZXIodmFyaWF4X2RyaXZlcik7CisKK01PRFVMRV9ERVNDUklQVElPTigiVmFpcmF4IFdvcmtiZW5jaCBVU0IgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbWlkaS5jIGIvc291bmQvdXNiL21pZGkuYwppbmRleCA1YmZiNjk1Li40MTdlYmIxIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvbWlkaS5jCisrKyBiL3NvdW5kL3VzYi9taWRpLmMKQEAgLTIyOTIsMTQgKzIyOTIsMTMgQEAKIAl1bWlkaS0+aWZhY2UgPSBpZmFjZTsKIAl1bWlkaS0+cXVpcmsgPSBxdWlyazsKIAl1bWlkaS0+dXNiX3Byb3RvY29sX29wcyA9ICZzbmRfdXNibWlkaV9zdGFuZGFyZF9vcHM7Ci0JaW5pdF90aW1lcigmdW1pZGktPmVycm9yX3RpbWVyKTsKIAlzcGluX2xvY2tfaW5pdCgmdW1pZGktPmRpc2NfbG9jayk7CiAJaW5pdF9yd3NlbSgmdW1pZGktPmRpc2NfcndzZW0pOwogCW11dGV4X2luaXQoJnVtaWRpLT5tdXRleCk7CiAJdW1pZGktPnVzYl9pZCA9IFVTQl9JRChsZTE2X3RvX2NwdSh1bWlkaS0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKIAkJCSAgICAgICBsZTE2X3RvX2NwdSh1bWlkaS0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkpOwotCXVtaWRpLT5lcnJvcl90aW1lci5mdW5jdGlvbiA9IHNuZF91c2JtaWRpX2Vycm9yX3RpbWVyOwotCXVtaWRpLT5lcnJvcl90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpdW1pZGk7CisJc2V0dXBfdGltZXIoJnVtaWRpLT5lcnJvcl90aW1lciwgc25kX3VzYm1pZGlfZXJyb3JfdGltZXIsCisJCSAgICAodW5zaWduZWQgbG9uZyl1bWlkaSk7CiAKIAkvKiBkZXRlY3QgdGhlIGVuZHBvaW50KHMpIHRvIHVzZSAqLwogCW1lbXNldChlbmRwb2ludHMsIDAsIHNpemVvZihlbmRwb2ludHMpKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9wY20uYyBiL3NvdW5kL3VzYi9wY20uYwppbmRleCAwZDhhYmE1Li5iNGVmNDEwIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvcGNtLmMKKysrIGIvc291bmQvdXNiL3BjbS5jCkBAIC0xNDY0LDYgKzE0NjQsMTQgQEAKIAlzdWJzLT5sYXN0X2ZyYW1lX251bWJlciA9IHVzYl9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIoc3Vicy0+ZGV2KTsKIAlzdWJzLT5sYXN0X2ZyYW1lX251bWJlciAmPSAweEZGOyAvKiBrZWVwIDggTFNCcyAqLwogCisJaWYgKHN1YnMtPnRyaWdnZXJfdHN0YW1wX3BlbmRpbmdfdXBkYXRlKSB7CisJCS8qIHRoaXMgaXMgdGhlIGZpcnN0IGFjdHVhbCBVUkIgc3VibWl0dGVkLAorCQkgKiB1cGRhdGUgdHJpZ2dlciB0aW1lc3RhbXAgdG8gcmVmbGVjdCBhY3R1YWwgc3RhcnQgdGltZQorCQkgKi8KKwkJc25kX3BjbV9nZXR0aW1lKHJ1bnRpbWUsICZydW50aW1lLT50cmlnZ2VyX3RzdGFtcCk7CisJCXN1YnMtPnRyaWdnZXJfdHN0YW1wX3BlbmRpbmdfdXBkYXRlID0gZmFsc2U7CisJfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3Vicy0+bG9jaywgZmxhZ3MpOwogCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ5dGVzOwogCWlmIChwZXJpb2RfZWxhcHNlZCkKQEAgLTE1NTAsNiArMTU1OCw3IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1RBUlQ6CisJCXN1YnMtPnRyaWdnZXJfdHN0YW1wX3BlbmRpbmdfdXBkYXRlID0gdHJ1ZTsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1BBVVNFX1JFTEVBU0U6CiAJCXN1YnMtPmRhdGFfZW5kcG9pbnQtPnByZXBhcmVfZGF0YV91cmIgPSBwcmVwYXJlX3BsYXliYWNrX3VyYjsKIAkJc3Vicy0+ZGF0YV9lbmRwb2ludC0+cmV0aXJlX2RhdGFfdXJiID0gcmV0aXJlX3BsYXliYWNrX3VyYjsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaCBiL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaAppbmRleCAwYTU5OGFmLi42N2Q0NzY1IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmgKKysrIGIvc291bmQvdXNiL3F1aXJrcy10YWJsZS5oCkBAIC0yNDg2LDYgKzI0ODYsMjggQEAKIAl9CiB9LAogCit7CisJLyogQWthaSBNUEMgRWxlbWVudCAqLworCVVTQl9ERVZJQ0UoMHgwOWU4LCAweDAwMjEpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyaykgeworCQkuaWZudW0gPSBRVUlSS19BTllfSU5URVJGQUNFLAorCQkudHlwZSA9IFFVSVJLX0NPTVBPU0lURSwKKwkJLmRhdGEgPSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlya1tdKSB7CisJCQl7CisJCQkJLmlmbnVtID0gMCwKKwkJCQkudHlwZSA9IFFVSVJLX0lHTk9SRV9JTlRFUkZBQ0UKKwkJCX0sCisJCQl7CisJCQkJLmlmbnVtID0gMSwKKwkJCQkudHlwZSA9IFFVSVJLX01JRElfU1RBTkRBUkRfSU5URVJGQUNFCisJCQl9LAorCQkJeworCQkJCS5pZm51bSA9IC0xCisJCQl9CisJCX0KKwl9Cit9LAorCiAvKiBUZXJyYVRlYyBkZXZpY2VzICovCiB7CiAJVVNCX0RFVklDRV9WRU5ET1JfU1BFQygweDBjY2QsIDB4MDAxMiksCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXN4MnkvdXNiX3N0cmVhbS5oIGIvc291bmQvdXNiL3VzeDJ5L3VzYl9zdHJlYW0uaAppbmRleCA0ZGQ3NGFiLi45MDM2OTAwIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXN4MnkvdXNiX3N0cmVhbS5oCisrKyBiL3NvdW5kL3VzYi91c3gyeS91c2Jfc3RyZWFtLmgKQEAgLTEsNzYgKzEsNyBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBLYXJzdGVuIFdpZXNlIDxmenVAd2VtZ2Vob2VydGRlcnN0YWF0LmRlPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKLSAqIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSAqIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCisjaWZuZGVmIF9fVVNCX1NUUkVBTV9ICisjZGVmaW5lIF9fVVNCX1NUUkVBTV9ICiAKLSNkZWZpbmUgVVNCX1NUUkVBTV9JTlRFUkZBQ0VfVkVSU0lPTiAyCi0KLSNkZWZpbmUgU05EUlZfVVNCX1NUUkVBTV9JT0NUTF9TRVRfUEFSQU1TIFwKLQlfSU9XKCdIJywgMHg5MCwgc3RydWN0IHVzYl9zdHJlYW1fY29uZmlnKQotCi1zdHJ1Y3QgdXNiX3N0cmVhbV9wYWNrZXQgewotCXVuc2lnbmVkIG9mZnNldDsKLQl1bnNpZ25lZCBsZW5ndGg7Ci19OwotCi0KLXN0cnVjdCB1c2Jfc3RyZWFtX2NvbmZpZyB7Ci0JdW5zaWduZWQgdmVyc2lvbjsKLQl1bnNpZ25lZCBzYW1wbGVfcmF0ZTsKLQl1bnNpZ25lZCBwZXJpb2RfZnJhbWVzOwotCXVuc2lnbmVkIGZyYW1lX3NpemU7Ci19OwotCi1zdHJ1Y3QgdXNiX3N0cmVhbSB7Ci0Jc3RydWN0IHVzYl9zdHJlYW1fY29uZmlnIGNmZzsKLQl1bnNpZ25lZCByZWFkX3NpemU7Ci0JdW5zaWduZWQgd3JpdGVfc2l6ZTsKLQotCWludCBwZXJpb2Rfc2l6ZTsKLQotCXVuc2lnbmVkIHN0YXRlOwotCi0JaW50IGlkbGVfaW5zaXplOwotCWludCBpZGxlX291dHNpemU7Ci0JaW50IHN5bmNfcGFja2V0OwotCXVuc2lnbmVkIGluc2l6ZV9kb25lOwotCXVuc2lnbmVkIHBlcmlvZHNfZG9uZTsKLQl1bnNpZ25lZCBwZXJpb2RzX3BvbGxlZDsKLQotCXN0cnVjdCB1c2Jfc3RyZWFtX3BhY2tldCBvdXRwYWNrZXRbMl07Ci0JdW5zaWduZWQJCSBpbnBhY2tldHM7Ci0JdW5zaWduZWQJCSBpbnBhY2tldF9oZWFkOwotCXVuc2lnbmVkCQkgaW5wYWNrZXRfc3BsaXQ7Ci0JdW5zaWduZWQJCSBpbnBhY2tldF9zcGxpdF9hdDsKLQl1bnNpZ25lZAkJIG5leHRfaW5wYWNrZXRfc3BsaXQ7Ci0JdW5zaWduZWQJCSBuZXh0X2lucGFja2V0X3NwbGl0X2F0OwotCXN0cnVjdCB1c2Jfc3RyZWFtX3BhY2tldCBpbnBhY2tldFswXTsKLX07Ci0KLWVudW0gdXNiX3N0cmVhbV9zdGF0ZSB7Ci0JdXNiX3N0cmVhbV9pbnZhbGlkLAotCXVzYl9zdHJlYW1fc3RvcHBlZCwKLQl1c2Jfc3RyZWFtX3N5bmMwLAotCXVzYl9zdHJlYW1fc3luYzEsCi0JdXNiX3N0cmVhbV9yZWFkeSwKLQl1c2Jfc3RyZWFtX3J1bm5pbmcsCi0JdXNiX3N0cmVhbV94cnVuLAotfTsKLQotI2lmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDx1YXBpL3NvdW5kL3VzYl9zdHJlYW0uaD4KIAogI2RlZmluZSBVU0JfU1RSRUFNX05VUkJTIDQKICNkZWZpbmUgVVNCX1NUUkVBTV9VUkJERVBUSCA0CkBAIC0xMDgsNSArMzksNCBAQAogaW50IHVzYl9zdHJlYW1fc3RhcnQoc3RydWN0IHVzYl9zdHJlYW1fa2VybmVsICopOwogdm9pZCB1c2Jfc3RyZWFtX3N0b3Aoc3RydWN0IHVzYl9zdHJlYW1fa2VybmVsICopOwogCi0KLSNlbmRpZgorI2VuZGlmIC8qIF9fVVNCX1NUUkVBTV9IICovCmRpZmYgLS1naXQgYS90b29scy9saWIvYXBpL2ZzL2RlYnVnZnMuYyBiL3Rvb2xzL2xpYi9hcGkvZnMvZGVidWdmcy5jCmluZGV4IDg2ZWEyZDdiLi5kMmIxOGU4IDEwMDY0NAotLS0gYS90b29scy9saWIvYXBpL2ZzL2RlYnVnZnMuYworKysgYi90b29scy9saWIvYXBpL2ZzL2RlYnVnZnMuYwpAQCAtMSwzICsxLDQgQEAKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC05OCwzICs5OSw0NSBAQAogb3V0OgogCXJldHVybiBkZWJ1Z2ZzX21vdW50cG9pbnQ7CiB9CisKK2ludCBkZWJ1Z2ZzX19zdHJlcnJvcl9vcGVuKGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCWNoYXIgc2J1ZlsxMjhdOworCisJc3dpdGNoIChlcnIpIHsKKwljYXNlIEVOT0VOVDoKKwkJaWYgKGRlYnVnZnNfZm91bmQpIHsKKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZSwKKwkJCQkgIkVycm9yOlx0RmlsZSAlcy8lcyBub3QgZm91bmQuXG4iCisJCQkJICJIaW50Olx0UGVyaGFwcyB0aGlzIGtlcm5lbCBtaXNzZXMgc29tZSBDT05GSUdfIHNldHRpbmcgdG8gZW5hYmxlIHRoaXMgZmVhdHVyZT8uXG4iLAorCQkJCSBkZWJ1Z2ZzX21vdW50cG9pbnQsIGZpbGVuYW1lKTsKKwkJCWJyZWFrOworCQl9CisJCXNucHJpbnRmKGJ1Ziwgc2l6ZSwgIiVzIiwKKwkJCSAiRXJyb3I6XHRVbmFibGUgdG8gZmluZCBkZWJ1Z2ZzXG4iCisJCQkgIkhpbnQ6XHRXYXMgeW91ciBrZXJuZWwgY29tcGlsZWQgd2l0aCBkZWJ1Z2ZzIHN1cHBvcnQ/XG4iCisJCQkgIkhpbnQ6XHRJcyB0aGUgZGVidWdmcyBmaWxlc3lzdGVtIG1vdW50ZWQ/XG4iCisJCQkgIkhpbnQ6XHRUcnkgJ3N1ZG8gbW91bnQgLXQgZGVidWdmcyBub2RldiAvc3lzL2tlcm5lbC9kZWJ1ZyciKTsKKwkJYnJlYWs7CisJY2FzZSBFQUNDRVM6CisJCXNucHJpbnRmKGJ1Ziwgc2l6ZSwKKwkJCSAiRXJyb3I6XHRObyBwZXJtaXNzaW9ucyB0byByZWFkICVzLyVzXG4iCisJCQkgIkhpbnQ6XHRUcnkgJ3N1ZG8gbW91bnQgLW8gcmVtb3VudCxtb2RlPTc1NSAlcydcbiIsCisJCQkgZGVidWdmc19tb3VudHBvaW50LCBmaWxlbmFtZSwgZGVidWdmc19tb3VudHBvaW50KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc25wcmludGYoYnVmLCBzaXplLCAiJXMiLCBzdHJlcnJvcl9yKGVyciwgc2J1Ziwgc2l6ZW9mKHNidWYpKSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgZGVidWdmc19fc3RyZXJyb3Jfb3Blbl90cChpbnQgZXJyLCBjaGFyICpidWYsIHNpemVfdCBzaXplLCBjb25zdCBjaGFyICpzeXMsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciBwYXRoW1BBVEhfTUFYXTsKKworCXNucHJpbnRmKHBhdGgsIFBBVEhfTUFYLCAidHJhY2luZy9ldmVudHMvJXMvJXMiLCBzeXMsIG5hbWUgPzogIioiKTsKKworCXJldHVybiBkZWJ1Z2ZzX19zdHJlcnJvcl9vcGVuKGVyciwgYnVmLCBzaXplLCBwYXRoKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYi9hcGkvZnMvZGVidWdmcy5oIGIvdG9vbHMvbGliL2FwaS9mcy9kZWJ1Z2ZzLmgKaW5kZXggZjE5ZDNkZi4uMDczOTg4MSAxMDA2NDQKLS0tIGEvdG9vbHMvbGliL2FwaS9mcy9kZWJ1Z2ZzLmgKKysrIGIvdG9vbHMvbGliL2FwaS9mcy9kZWJ1Z2ZzLmgKQEAgLTI2LDQgKzI2LDcgQEAKIAogZXh0ZXJuIGNoYXIgZGVidWdmc19tb3VudHBvaW50W107CiAKK2ludCBkZWJ1Z2ZzX19zdHJlcnJvcl9vcGVuKGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKTsKK2ludCBkZWJ1Z2ZzX19zdHJlcnJvcl9vcGVuX3RwKGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKnN5cywgY29uc3QgY2hhciAqbmFtZSk7CisKICNlbmRpZiAvKiBfX0FQSV9ERUJVR0ZTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvbGliL2xvY2tkZXAvLmdpdGlnbm9yZSBiL3Rvb2xzL2xpYi9sb2NrZGVwLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MwZTdhOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2xpYi9sb2NrZGVwLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorbGlibG9ja2RlcC5zby4qCmRpZmYgLS1naXQgYS90b29scy9saWIvbG9ja2RlcC9NYWtlZmlsZSBiL3Rvb2xzL2xpYi9sb2NrZGVwL01ha2VmaWxlCmluZGV4IDUyZjkyNzkuLjRiODY2YzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYi9sb2NrZGVwL01ha2VmaWxlCisrKyBiL3Rvb2xzL2xpYi9sb2NrZGVwL01ha2VmaWxlCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogZXhwb3J0IFEgVkVSQk9TRQogCi1JTkNMVURFUyA9IC1JLiAtSS91c3IvbG9jYWwvaW5jbHVkZSAtSS4vdWluY2x1ZGUgLUkuL2luY2x1ZGUgLUkuLi8uLi9pbmNsdWRlICQoQ09ORklHX0lOQ0xVREVTKQorSU5DTFVERVMgPSAtSS4gLUkuL3VpbmNsdWRlIC1JLi9pbmNsdWRlIC1JLi4vLi4vaW5jbHVkZSAkKENPTkZJR19JTkNMVURFUykKIAogIyBTZXQgY29tcGlsZSBvcHRpb24gQ0ZMQUdTIGlmIG5vdCBzZXQgZWxzZXdoZXJlCiBDRkxBR1MgPz0gLWcgLURDT05GSUdfTE9DS0RFUCAtRENPTkZJR19TVEFDS1RSQUNFIC1EQ09ORklHX1BST1ZFX0xPQ0tJTkcgLURCSVRTX1BFUl9MT05HPV9fV09SRFNJWkUgLURMSUJMT0NLREVQX1ZFUlNJT049JyIkKExJQkxPQ0tERVBfVkVSU0lPTikiJyAtcmR5bmFtaWMgLU8wIC1nCmRpZmYgLS1naXQgYS90b29scy9saWIvdHJhY2VldmVudC9ldmVudC1wYXJzZS5jIGIvdG9vbHMvbGliL3RyYWNlZXZlbnQvZXZlbnQtcGFyc2UuYwppbmRleCBjZjNhNDRiLi5hZmUyMGVkIDEwMDY0NAotLS0gYS90b29scy9saWIvdHJhY2VldmVudC9ldmVudC1wYXJzZS5jCisrKyBiL3Rvb2xzL2xpYi90cmFjZWV2ZW50L2V2ZW50LXBhcnNlLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxzdGRpbnQuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KIAorI2luY2x1ZGUgPG5ldGluZXQvaXA2Lmg+CiAjaW5jbHVkZSAiZXZlbnQtcGFyc2UuaCIKICNpbmNsdWRlICJldmVudC11dGlscy5oIgogCkBAIC00MTQ5LDYgKzQxNTAsMzI0IEBACiAJdHJhY2Vfc2VxX3ByaW50ZihzLCBmbXQsIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLCBidWZbNV0pOwogfQogCitzdGF0aWMgdm9pZCBwcmludF9pcDRfYWRkcihzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjaGFyIGksIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwljb25zdCBjaGFyICpmbXQ7CisKKwlpZiAoaSA9PSAnaScpCisJCWZtdCA9ICIlMDNkLiUwM2QuJTAzZC4lMDNkIjsKKwllbHNlCisJCWZtdCA9ICIlZC4lZC4lZC4lZCI7CisKKwl0cmFjZV9zZXFfcHJpbnRmKHMsIGZtdCwgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlwdjZfYWRkcl92NG1hcHBlZChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmEpCit7CisJcmV0dXJuICgodW5zaWduZWQgbG9uZykoYS0+czZfYWRkcjMyWzBdIHwgYS0+czZfYWRkcjMyWzFdKSB8CisJCSh1bnNpZ25lZCBsb25nKShhLT5zNl9hZGRyMzJbMl0gXiBodG9ubCgweDAwMDBmZmZmKSkpID09IDBVTDsKK30KKworc3RhdGljIGlubGluZSBib29sIGlwdjZfYWRkcl9pc19pc2F0YXAoY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKQoreworCXJldHVybiAoYWRkci0+czZfYWRkcjMyWzJdIHwgaHRvbmwoMHgwMjAwMDAwMCkpID09IGh0b25sKDB4MDIwMDVFRkUpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9pcDZjX2FkZHIoc3RydWN0IHRyYWNlX3NlcSAqcywgdW5zaWduZWQgY2hhciAqYWRkcikKK3sKKwlpbnQgaSwgaiwgcmFuZ2U7CisJdW5zaWduZWQgY2hhciB6ZXJvbGVuZ3RoWzhdOworCWludCBsb25nZXN0ID0gMTsKKwlpbnQgY29sb25wb3MgPSAtMTsKKwl1aW50MTZfdCB3b3JkOworCXVpbnQ4X3QgaGksIGxvOworCWJvb2wgbmVlZGNvbG9uID0gZmFsc2U7CisJYm9vbCB1c2VJUHY0OworCXN0cnVjdCBpbjZfYWRkciBpbjY7CisKKwltZW1jcHkoJmluNiwgYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCisJdXNlSVB2NCA9IGlwdjZfYWRkcl92NG1hcHBlZCgmaW42KSB8fCBpcHY2X2FkZHJfaXNfaXNhdGFwKCZpbjYpOworCisJbWVtc2V0KHplcm9sZW5ndGgsIDAsIHNpemVvZih6ZXJvbGVuZ3RoKSk7CisKKwlpZiAodXNlSVB2NCkKKwkJcmFuZ2UgPSA2OworCWVsc2UKKwkJcmFuZ2UgPSA4OworCisJLyogZmluZCBwb3NpdGlvbiBvZiBsb25nZXN0IDAgcnVuICovCisJZm9yIChpID0gMDsgaSA8IHJhbmdlOyBpKyspIHsKKwkJZm9yIChqID0gaTsgaiA8IHJhbmdlOyBqKyspIHsKKwkJCWlmIChpbjYuczZfYWRkcjE2W2pdICE9IDApCisJCQkJYnJlYWs7CisJCQl6ZXJvbGVuZ3RoW2ldKys7CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IHJhbmdlOyBpKyspIHsKKwkJaWYgKHplcm9sZW5ndGhbaV0gPiBsb25nZXN0KSB7CisJCQlsb25nZXN0ID0gemVyb2xlbmd0aFtpXTsKKwkJCWNvbG9ucG9zID0gaTsKKwkJfQorCX0KKwlpZiAobG9uZ2VzdCA9PSAxKQkJLyogZG9uJ3QgY29tcHJlc3MgYSBzaW5nbGUgMCAqLworCQljb2xvbnBvcyA9IC0xOworCisJLyogZW1pdCBhZGRyZXNzICovCisJZm9yIChpID0gMDsgaSA8IHJhbmdlOyBpKyspIHsKKwkJaWYgKGkgPT0gY29sb25wb3MpIHsKKwkJCWlmIChuZWVkY29sb24gfHwgaSA9PSAwKQorCQkJCXRyYWNlX3NlcV9wcmludGYocywgIjoiKTsKKwkJCXRyYWNlX3NlcV9wcmludGYocywgIjoiKTsKKwkJCW5lZWRjb2xvbiA9IGZhbHNlOworCQkJaSArPSBsb25nZXN0IC0gMTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChuZWVkY29sb24pIHsKKwkJCXRyYWNlX3NlcV9wcmludGYocywgIjoiKTsKKwkJCW5lZWRjb2xvbiA9IGZhbHNlOworCQl9CisJCS8qIGhleCB1MTYgd2l0aG91dCBsZWFkaW5nIDBzICovCisJCXdvcmQgPSBudG9ocyhpbjYuczZfYWRkcjE2W2ldKTsKKwkJaGkgPSB3b3JkID4+IDg7CisJCWxvID0gd29yZCAmIDB4ZmY7CisJCWlmIChoaSkKKwkJCXRyYWNlX3NlcV9wcmludGYocywgIiV4JTAyeCIsIGhpLCBsbyk7CisJCWVsc2UKKwkJCXRyYWNlX3NlcV9wcmludGYocywgIiV4IiwgbG8pOworCisJCW5lZWRjb2xvbiA9IHRydWU7CisJfQorCisJaWYgKHVzZUlQdjQpIHsKKwkJaWYgKG5lZWRjb2xvbikKKwkJCXRyYWNlX3NlcV9wcmludGYocywgIjoiKTsKKwkJcHJpbnRfaXA0X2FkZHIocywgJ0knLCAmaW42LnM2X2FkZHJbMTJdKTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2lwNl9hZGRyKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNoYXIgaSwgdW5zaWduZWQgY2hhciAqYnVmKQoreworCWludCBqOworCisJZm9yIChqID0gMDsgaiA8IDE2OyBqICs9IDIpIHsKKwkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiJTAyeCUwMngiLCBidWZbal0sIGJ1ZltqKzFdKTsKKwkJaWYgKGkgPT0gJ0knICYmIGogPCAxNCkKKwkJCXRyYWNlX3NlcV9wcmludGYocywgIjoiKTsKKwl9Cit9CisKKy8qCisgKiAlcGk0ICAgcHJpbnQgYW4gSVB2NCBhZGRyZXNzIHdpdGggbGVhZGluZyB6ZXJvcworICogJXBJNCAgIHByaW50IGFuIElQdjQgYWRkcmVzcyB3aXRob3V0IGxlYWRpbmcgemVyb3MKKyAqICVwaTYgICBwcmludCBhbiBJUHY2IGFkZHJlc3Mgd2l0aG91dCBjb2xvbnMKKyAqICVwSTYgICBwcmludCBhbiBJUHY2IGFkZHJlc3Mgd2l0aCBjb2xvbnMKKyAqICVwSTZjICBwcmludCBhbiBJUHY2IGFkZHJlc3MgaW4gY29tcHJlc3NlZCBmb3JtIHdpdGggY29sb25zCisgKiAlcElTcGMgcHJpbnQgYW4gSVAgYWRkcmVzcyBiYXNlZCBvbiBzb2NrYWRkcjsgcCBhZGRzIHBvcnQuCisgKi8KK3N0YXRpYyBpbnQgcHJpbnRfaXB2NF9hcmcoc3RydWN0IHRyYWNlX3NlcSAqcywgY29uc3QgY2hhciAqcHRyLCBjaGFyIGksCisJCQkgIHZvaWQgKmRhdGEsIGludCBzaXplLCBzdHJ1Y3QgZXZlbnRfZm9ybWF0ICpldmVudCwKKwkJCSAgc3RydWN0IHByaW50X2FyZyAqYXJnKQoreworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworCWlmIChhcmctPnR5cGUgPT0gUFJJTlRfRlVOQykgeworCQlwcm9jZXNzX2RlZmluZWRfZnVuYyhzLCBkYXRhLCBzaXplLCBldmVudCwgYXJnKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZy0+dHlwZSAhPSBQUklOVF9GSUVMRCkgeworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICJBUkcgVFlQRSBOT1QgRklFTEQgQlVUICVkIiwgYXJnLT50eXBlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKCFhcmctPmZpZWxkLmZpZWxkKSB7CisJCWFyZy0+ZmllbGQuZmllbGQgPQorCQkJcGV2ZW50X2ZpbmRfYW55X2ZpZWxkKGV2ZW50LCBhcmctPmZpZWxkLm5hbWUpOworCQlpZiAoIWFyZy0+ZmllbGQuZmllbGQpIHsKKwkJCWRvX3dhcm5pbmcoIiVzOiBmaWVsZCAlcyBub3QgZm91bmQiLAorCQkJCSAgIF9fZnVuY19fLCBhcmctPmZpZWxkLm5hbWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlidWYgPSBkYXRhICsgYXJnLT5maWVsZC5maWVsZC0+b2Zmc2V0OworCisJaWYgKGFyZy0+ZmllbGQuZmllbGQtPnNpemUgIT0gNCkgeworCQl0cmFjZV9zZXFfcHJpbnRmKHMsICJJTlZBTElESVB2NCIpOworCQlyZXR1cm4gMDsKKwl9CisJcHJpbnRfaXA0X2FkZHIocywgaSwgYnVmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHByaW50X2lwdjZfYXJnKHN0cnVjdCB0cmFjZV9zZXEgKnMsIGNvbnN0IGNoYXIgKnB0ciwgY2hhciBpLAorCQkJICB2b2lkICpkYXRhLCBpbnQgc2l6ZSwgc3RydWN0IGV2ZW50X2Zvcm1hdCAqZXZlbnQsCisJCQkgIHN0cnVjdCBwcmludF9hcmcgKmFyZykKK3sKKwljaGFyIGhhdmVfYyA9IDA7CisJdW5zaWduZWQgY2hhciAqYnVmOworCWludCByYyA9IDA7CisKKwkvKiBwSTZjICovCisJaWYgKGkgPT0gJ0knICYmICpwdHIgPT0gJ2MnKSB7CisJCWhhdmVfYyA9IDE7CisJCXB0cisrOworCQlyYysrOworCX0KKworCWlmIChhcmctPnR5cGUgPT0gUFJJTlRfRlVOQykgeworCQlwcm9jZXNzX2RlZmluZWRfZnVuYyhzLCBkYXRhLCBzaXplLCBldmVudCwgYXJnKTsKKwkJcmV0dXJuIHJjOworCX0KKworCWlmIChhcmctPnR5cGUgIT0gUFJJTlRfRklFTEQpIHsKKwkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiQVJHIFRZUEUgTk9UIEZJRUxEIEJVVCAlZCIsIGFyZy0+dHlwZSk7CisJCXJldHVybiByYzsKKwl9CisKKwlpZiAoIWFyZy0+ZmllbGQuZmllbGQpIHsKKwkJYXJnLT5maWVsZC5maWVsZCA9CisJCQlwZXZlbnRfZmluZF9hbnlfZmllbGQoZXZlbnQsIGFyZy0+ZmllbGQubmFtZSk7CisJCWlmICghYXJnLT5maWVsZC5maWVsZCkgeworCQkJZG9fd2FybmluZygiJXM6IGZpZWxkICVzIG5vdCBmb3VuZCIsCisJCQkJICAgX19mdW5jX18sIGFyZy0+ZmllbGQubmFtZSk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisKKwlidWYgPSBkYXRhICsgYXJnLT5maWVsZC5maWVsZC0+b2Zmc2V0OworCisJaWYgKGFyZy0+ZmllbGQuZmllbGQtPnNpemUgIT0gMTYpIHsKKwkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiSU5WQUxJRElQdjYiKTsKKwkJcmV0dXJuIHJjOworCX0KKworCWlmIChoYXZlX2MpCisJCXByaW50X2lwNmNfYWRkcihzLCBidWYpOworCWVsc2UKKwkJcHJpbnRfaXA2X2FkZHIocywgaSwgYnVmKTsKKworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBwcmludF9pcHNhX2FyZyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpwdHIsIGNoYXIgaSwKKwkJCSAgdm9pZCAqZGF0YSwgaW50IHNpemUsIHN0cnVjdCBldmVudF9mb3JtYXQgKmV2ZW50LAorCQkJICBzdHJ1Y3QgcHJpbnRfYXJnICphcmcpCit7CisJY2hhciBoYXZlX2MgPSAwLCBoYXZlX3AgPSAwOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc2E7CisJaW50IHJjID0gMDsKKworCS8qIHBJU3BjICovCisJaWYgKGkgPT0gJ0knKSB7CisJCWlmICgqcHRyID09ICdwJykgeworCQkJaGF2ZV9wID0gMTsKKwkJCXB0cisrOworCQkJcmMrKzsKKwkJfQorCQlpZiAoKnB0ciA9PSAnYycpIHsKKwkJCWhhdmVfYyA9IDE7CisJCQlwdHIrKzsKKwkJCXJjKys7CisJCX0KKwl9CisKKwlpZiAoYXJnLT50eXBlID09IFBSSU5UX0ZVTkMpIHsKKwkJcHJvY2Vzc19kZWZpbmVkX2Z1bmMocywgZGF0YSwgc2l6ZSwgZXZlbnQsIGFyZyk7CisJCXJldHVybiByYzsKKwl9CisKKwlpZiAoYXJnLT50eXBlICE9IFBSSU5UX0ZJRUxEKSB7CisJCXRyYWNlX3NlcV9wcmludGYocywgIkFSRyBUWVBFIE5PVCBGSUVMRCBCVVQgJWQiLCBhcmctPnR5cGUpOworCQlyZXR1cm4gcmM7CisJfQorCisJaWYgKCFhcmctPmZpZWxkLmZpZWxkKSB7CisJCWFyZy0+ZmllbGQuZmllbGQgPQorCQkJcGV2ZW50X2ZpbmRfYW55X2ZpZWxkKGV2ZW50LCBhcmctPmZpZWxkLm5hbWUpOworCQlpZiAoIWFyZy0+ZmllbGQuZmllbGQpIHsKKwkJCWRvX3dhcm5pbmcoIiVzOiBmaWVsZCAlcyBub3QgZm91bmQiLAorCQkJCSAgIF9fZnVuY19fLCBhcmctPmZpZWxkLm5hbWUpOworCQkJcmV0dXJuIHJjOworCQl9CisJfQorCisJc2EgPSAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikgKGRhdGEgKyBhcmctPmZpZWxkLmZpZWxkLT5vZmZzZXQpOworCisJaWYgKHNhLT5zc19mYW1pbHkgPT0gQUZfSU5FVCkgeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgc2E7CisKKwkJaWYgKGFyZy0+ZmllbGQuZmllbGQtPnNpemUgPCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgeworCQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiSU5WQUxJRElQdjQiKTsKKwkJCXJldHVybiByYzsKKwkJfQorCisJCXByaW50X2lwNF9hZGRyKHMsIGksICh1bnNpZ25lZCBjaGFyICopICZzYTQtPnNpbl9hZGRyKTsKKwkJaWYgKGhhdmVfcCkKKwkJCXRyYWNlX3NlcV9wcmludGYocywgIjolZCIsIG50b2hzKHNhNC0+c2luX3BvcnQpKTsKKworCisJfSBlbHNlIGlmIChzYS0+c3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNhNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHNhOworCisJCWlmIChhcmctPmZpZWxkLmZpZWxkLT5zaXplIDwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisJCQl0cmFjZV9zZXFfcHJpbnRmKHMsICJJTlZBTElESVB2NiIpOworCQkJcmV0dXJuIHJjOworCQl9CisKKwkJaWYgKGhhdmVfcCkKKwkJCXRyYWNlX3NlcV9wcmludGYocywgIlsiKTsKKworCQlidWYgPSAodW5zaWduZWQgY2hhciAqKSAmc2E2LT5zaW42X2FkZHI7CisJCWlmIChoYXZlX2MpCisJCQlwcmludF9pcDZjX2FkZHIocywgYnVmKTsKKwkJZWxzZQorCQkJcHJpbnRfaXA2X2FkZHIocywgaSwgYnVmKTsKKworCQlpZiAoaGF2ZV9wKQorCQkJdHJhY2Vfc2VxX3ByaW50ZihzLCAiXTolZCIsIG50b2hzKHNhNi0+c2luNl9wb3J0KSk7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHByaW50X2lwX2FyZyhzdHJ1Y3QgdHJhY2Vfc2VxICpzLCBjb25zdCBjaGFyICpwdHIsCisJCQl2b2lkICpkYXRhLCBpbnQgc2l6ZSwgc3RydWN0IGV2ZW50X2Zvcm1hdCAqZXZlbnQsCisJCQlzdHJ1Y3QgcHJpbnRfYXJnICphcmcpCit7CisJY2hhciBpID0gKnB0cjsgIC8qICdpJyBvciAnSScgKi8KKwljaGFyIHZlcjsKKwlpbnQgcmMgPSAwOworCisJcHRyKys7CisJcmMrKzsKKworCXZlciA9ICpwdHI7CisJcHRyKys7CisJcmMrKzsKKworCXN3aXRjaCAodmVyKSB7CisJY2FzZSAnNCc6CisJCXJjICs9IHByaW50X2lwdjRfYXJnKHMsIHB0ciwgaSwgZGF0YSwgc2l6ZSwgZXZlbnQsIGFyZyk7CisJCWJyZWFrOworCWNhc2UgJzYnOgorCQlyYyArPSBwcmludF9pcHY2X2FyZyhzLCBwdHIsIGksIGRhdGEsIHNpemUsIGV2ZW50LCBhcmcpOworCQlicmVhazsKKwljYXNlICdTJzoKKwkJcmMgKz0gcHJpbnRfaXBzYV9hcmcocywgcHRyLCBpLCBkYXRhLCBzaXplLCBldmVudCwgYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgaW50IGlzX3ByaW50YWJsZV9hcnJheShjaGFyICpwLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGludCBpOwpAQCAtNDMzNyw2ICs0NjU2LDE1IEBACiAJCQkJCXB0cisrOwogCQkJCQlhcmcgPSBhcmctPm5leHQ7CiAJCQkJCWJyZWFrOworCQkJCX0gZWxzZSBpZiAoKihwdHIrMSkgPT0gJ0knIHx8ICoocHRyKzEpID09ICdpJykgeworCQkJCQlpbnQgbjsKKworCQkJCQluID0gcHJpbnRfaXBfYXJnKHMsIHB0cisxLCBkYXRhLCBzaXplLCBldmVudCwgYXJnKTsKKwkJCQkJaWYgKG4gPiAwKSB7CisJCQkJCQlwdHIgKz0gbjsKKwkJCQkJCWFyZyA9IGFyZy0+bmV4dDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CiAJCQkJfQogCiAJCQkJLyogZmFsbCB0aHJvdWdoICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1idWlsZGlkLWNhY2hlLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJ1aWxkaWQtY2FjaGUudHh0CmluZGV4IGZkNzdkODEuLjAyOTRjNTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJ1aWxkaWQtY2FjaGUudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLWJ1aWxkaWQtY2FjaGUudHh0CkBAIC0zOCw3ICszOCw3IEBACiAtLXJlbW92ZT06OgogICAgICAgICBSZW1vdmUgc3BlY2lmaWVkIGZpbGUgZnJvbSB0aGUgY2FjaGUuCiAtTTo6Ci0tLW1pc3Npbmc9OjogCistLW1pc3Npbmc9OjoKIAlMaXN0IG1pc3NpbmcgYnVpbGQgaWRzIGluIHRoZSBjYWNoZSBmb3IgdGhlIHNwZWNpZmllZCBmaWxlLgogLXU6OgogLS11cGRhdGU6OgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtbGlzdC50eHQgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1saXN0LnR4dAppbmRleCBjYmI0Zjc0Li4zZTJhZWM5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1saXN0LnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1saXN0LnR4dApAQCAtODksNiArODksMTkgQEAKIFlvdSBzaG91bGQgcmVmZXIgdG8gdGhlIHByb2Nlc3NvciBzcGVjaWZpYyBkb2N1bWVudGF0aW9uIGZvciBnZXR0aW5nIHRoZXNlCiBkZXRhaWxzLiBTb21lIG9mIHRoZW0gYXJlIHJlZmVyZW5jZWQgaW4gdGhlIFNFRSBBTFNPIHNlY3Rpb24gYmVsb3cuCiAKK1BBUkFNRVRFUklaRUQgRVZFTlRTCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21lIHBtdSBldmVudHMgbGlzdGVkIGJ5ICdwZXJmLWxpc3QnIHdpbGwgYmUgZGlzcGxheWVkIHdpdGggJz8nIGluIHRoZW0uIEZvcgorZXhhbXBsZToKKworICBodl9ncGNpL2R0YnBfcHRpdGMscGh5c19wcm9jZXNzb3JfaWR4PT8vCisKK1RoaXMgbWVhbnMgdGhhdCB3aGVuIHByb3ZpZGVkIGFzIGFuIGV2ZW50LCBhIHZhbHVlIGZvciAnPycgbXVzdAorYWxzbyBiZSBzdXBwbGllZC4gRm9yIGV4YW1wbGU6CisKKyAgcGVyZiBzdGF0IC1DIDAgLWUgJ2h2X2dwY2kvZHRicF9wdGl0YyxwaHlzX3Byb2Nlc3Nvcl9pZHg9MHgyLycgLi4uCisKIE9QVElPTlMKIC0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtbWVtLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLW1lbS50eHQKaW5kZXggMWQ3OGE0MC4uNDMzMTBkOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtbWVtLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1tZW0udHh0CkBAIC0xMiwxMSArMTIsMTIgQEAKIAogREVTQ1JJUFRJT04KIC0tLS0tLS0tLS0tCi0icGVyZiBtZW0gLXQgPFRZUEU+IHJlY29yZCIgcnVucyBhIGNvbW1hbmQgYW5kIGdhdGhlcnMgbWVtb3J5IG9wZXJhdGlvbiBkYXRhCisicGVyZiBtZW0gcmVjb3JkIiBydW5zIGEgY29tbWFuZCBhbmQgZ2F0aGVycyBtZW1vcnkgb3BlcmF0aW9uIGRhdGEKIGZyb20gaXQsIGludG8gcGVyZi5kYXRhLiBQZXJmIHJlY29yZCBvcHRpb25zIGFyZSBhY2NlcHRlZCBhbmQgYXJlIHBhc3NlZCB0aHJvdWdoLgogCi0icGVyZiBtZW0gLXQgPFRZUEU+IHJlcG9ydCIgZGlzcGxheXMgdGhlIHJlc3VsdC4gSXQgaW52b2tlcyBwZXJmIHJlcG9ydCB3aXRoIHRoZQotcmlnaHQgc2V0IG9mIG9wdGlvbnMgdG8gZGlzcGxheSBhIG1lbW9yeSBhY2Nlc3MgcHJvZmlsZS4KKyJwZXJmIG1lbSByZXBvcnQiIGRpc3BsYXlzIHRoZSByZXN1bHQuIEl0IGludm9rZXMgcGVyZiByZXBvcnQgd2l0aCB0aGUKK3JpZ2h0IHNldCBvZiBvcHRpb25zIHRvIGRpc3BsYXkgYSBtZW1vcnkgYWNjZXNzIHByb2ZpbGUuIEJ5IGRlZmF1bHQsIGxvYWRzCithbmQgc3RvcmVzIGFyZSBzYW1wbGVkLiBVc2UgdGhlIC10IG9wdGlvbiB0byBsaW1pdCB0byBsb2FkcyBvciBzdG9yZXMuCiAKIE5vdGUgdGhhdCBvbiBJbnRlbCBzeXN0ZW1zIHRoZSBtZW1vcnkgbGF0ZW5jeSByZXBvcnRlZCBpcyB0aGUgdXNlLWxhdGVuY3ksCiBub3QgdGhlIHB1cmUgbG9hZCAob3Igc3RvcmUgbGF0ZW5jeSkuIFVzZSBsYXRlbmN5IGluY2x1ZGVzIGFueSBwaXBlbGluZQpAQCAtMjksNyArMzAsNyBAQAogCiAtdDo6CiAtLXR5cGU9OjoKLQlTZWxlY3QgdGhlIG1lbW9yeSBvcGVyYXRpb24gdHlwZTogbG9hZCBvciBzdG9yZSAoZGVmYXVsdDogbG9hZCkKKwlTZWxlY3QgdGhlIG1lbW9yeSBvcGVyYXRpb24gdHlwZTogbG9hZCBvciBzdG9yZSAoZGVmYXVsdDogbG9hZCxzdG9yZSkKIAogLUQ6OgogLS1kdW1wLXJhdy1zYW1wbGVzPTo6CmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZWNvcmQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcmVjb3JkLnR4dAppbmRleCBhZjlhNTRlLi4zMWU5Nzc0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZWNvcmQudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXJlY29yZC50eHQKQEAgLTMzLDEyICszMywyNyBAQAogICAgICAgICAtIGEgcmF3IFBNVSBldmVudCAoZXZlbnRzZWwrdW1hc2spIGluIHRoZSBmb3JtIG9mIHJOTk4gd2hlcmUgTk5OIGlzIGEKIAkgIGhleGFkZWNpbWFsIGV2ZW50IGRlc2NyaXB0b3IuCiAKLSAgICAgICAgLSBhIGhhcmR3YXJlIGJyZWFrcG9pbnQgZXZlbnQgaW4gdGhlIGZvcm0gb2YgJ1xtZW06YWRkcls6YWNjZXNzXScKKwktIGEgc3ltYm9saWNhbGx5IGZvcm1lZCBQTVUgZXZlbnQgbGlrZSAncG11L3BhcmFtMT0weDMscGFyYW0yLycgd2hlcmUKKwkgICdwYXJhbTEnLCAncGFyYW0yJywgZXRjIGFyZSBkZWZpbmVkIGFzIGZvcm1hdHMgZm9yIHRoZSBQTVUgaW4KKwkgIC9zeXMvYnVzL2V2ZW50X3NvdXJjZXMvZGV2aWNlcy88cG11Pi9mb3JtYXQvKi4KKworCS0gYSBzeW1ib2xpY2FsbHkgZm9ybWVkIGV2ZW50IGxpa2UgJ3BtdS9jb25maWc9TSxjb25maWcxPU4sY29uZmlnMz1LLycKKworICAgICAgICAgIHdoZXJlIE0sIE4sIEsgYXJlIG51bWJlcnMgKGluIGRlY2ltYWwsIGhleCwgb2N0YWwgZm9ybWF0KS4gQWNjZXB0YWJsZQorICAgICAgICAgIHZhbHVlcyBmb3IgZWFjaCBvZiAnY29uZmlnJywgJ2NvbmZpZzEnIGFuZCAnY29uZmlnMicgYXJlIGRlZmluZWQgYnkKKyAgICAgICAgICBjb3JyZXNwb25kaW5nIGVudHJpZXMgaW4gL3N5cy9idXMvZXZlbnRfc291cmNlcy9kZXZpY2VzLzxwbXU+L2Zvcm1hdC8qCisgICAgICAgICAgcGFyYW0xIGFuZCBwYXJhbTIgYXJlIGRlZmluZWQgYXMgZm9ybWF0cyBmb3IgdGhlIFBNVSBpbjoKKyAgICAgICAgICAvc3lzL2J1cy9ldmVudF9zb3VyY2VzL2RldmljZXMvPHBtdT4vZm9ybWF0LyoKKworICAgICAgICAtIGEgaGFyZHdhcmUgYnJlYWtwb2ludCBldmVudCBpbiB0aGUgZm9ybSBvZiAnXG1lbTphZGRyWy9sZW5dWzphY2Nlc3NdJwogICAgICAgICAgIHdoZXJlIGFkZHIgaXMgdGhlIGFkZHJlc3MgaW4gbWVtb3J5IHlvdSB3YW50IHRvIGJyZWFrIGluLgogICAgICAgICAgIEFjY2VzcyBpcyB0aGUgbWVtb3J5IGFjY2VzcyB0eXBlIChyZWFkLCB3cml0ZSwgZXhlY3V0ZSkgaXQgY2FuCi0gICAgICAgICAgYmUgcGFzc2VkIGFzIGZvbGxvd3M6ICdcbWVtOmFkZHJbOltyXVt3XVt4XV0nLgorICAgICAgICAgIGJlIHBhc3NlZCBhcyBmb2xsb3dzOiAnXG1lbTphZGRyWzpbcl1bd11beF1dJy4gbGVuIGlzIHRoZSByYW5nZSwKKyAgICAgICAgICBudW1iZXIgb2YgYnl0ZXMgZnJvbSBzcGVjaWZpZWQgYWRkciwgd2hpY2ggdGhlIGJyZWFrcG9pbnQgd2lsbCBjb3Zlci4KICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBwcm9maWxlIHJlYWQtd3JpdGUgYWNjZXNzZXMgaW4gMHgxMDAwLCBqdXN0IHNldAogICAgICAgICAgICdtZW06MHgxMDAwOnJ3Jy4KKyAgICAgICAgICBJZiB5b3Ugd2FudCB0byBwcm9maWxlIHdyaXRlIGFjY2Vzc2VzIGluIFsweDEwMDB+MTAwOCksIGp1c3Qgc2V0CisgICAgICAgICAgJ21lbToweDEwMDAvODp3Jy4KIAogLS1maWx0ZXI9PGZpbHRlcj46OgogICAgICAgICBFdmVudCBmaWx0ZXIuCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY3JpcHQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LnR4dAppbmRleCAyMTQ5NDgwLi5hMjFlZWMwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY3JpcHQudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjcmlwdC50eHQKQEAgLTEyNSw0NiArMTI1LDQ2IEBACiAJaXMgZXF1aXZhbGVudCB0bzoKIAogCQlwZXJmIHNjcmlwdCAtZiB0cmFjZTo8ZmllbGRzPiAtZiBzdzo8ZmllbGRzPiAtZiBodzo8ZmllbGRzPgotICAgIAorCiAJaS5lLiwgdGhlIHNwZWNpZmllZCBmaWVsZHMgYXBwbHkgdG8gYWxsIGV2ZW50IHR5cGVzIGlmIHRoZSB0eXBlIHN0cmluZwogCWlzIG5vdCBnaXZlbi4KLSAgICAKKwogCVRoZSBhcmd1bWVudHMgYXJlIHByb2Nlc3NlZCBpbiB0aGUgb3JkZXIgcmVjZWl2ZWQuIEEgbGF0ZXIgdXNhZ2UgY2FuCiAJcmVzZXQgYSBwcmlvciByZXF1ZXN0LiBlLmcuOgotICAgIAorCiAJCS1mIHRyYWNlOiAtZiBjb21tLHRpZCx0aW1lLGlwLHN5bQotICAgIAorCiAJVGhlIGZpcnN0IC1mIHN1cHByZXNzZXMgdHJhY2UgZXZlbnRzIChmaWVsZCBsaXN0IGlzICIiKSwgYnV0IHRoZW4gdGhlCiAJc2Vjb25kIGludm9jYXRpb24gc2V0cyB0aGUgZmllbGRzIHRvIGNvbW0sdGlkLHRpbWUsaXAsc3ltLiBJbiB0aGlzIGNhc2UgYQogCXdhcm5pbmcgaXMgZ2l2ZW4gdG8gdGhlIHVzZXI6Ci0gICAgCisKIAkJIk92ZXJyaWRpbmcgcHJldmlvdXMgZmllbGQgcmVxdWVzdCBmb3IgYWxsIGV2ZW50cy4iCi0gICAgCisKIAlBbHRlcm5hdGl2ZWx5LCBjb25zaWRlciB0aGUgb3JkZXI6Ci0gICAgCisKIAkJLWYgY29tbSx0aWQsdGltZSxpcCxzeW0gLWYgdHJhY2U6Ci0gICAgCisKIAlUaGUgZmlyc3QgLWYgc2V0cyB0aGUgZmllbGRzIGZvciBhbGwgZXZlbnRzIGFuZCB0aGUgc2Vjb25kIC1mCiAJc3VwcHJlc3NlcyB0cmFjZSBldmVudHMuIFRoZSB1c2VyIGlzIGdpdmVuIGEgd2FybmluZyBtZXNzYWdlIGFib3V0CiAJdGhlIG92ZXJyaWRlLCBhbmQgdGhlIHJlc3VsdCBvZiB0aGUgYWJvdmUgaXMgdGhhdCBvbmx5IFMvVyBhbmQgSC9XCiAJZXZlbnRzIGFyZSBkaXNwbGF5ZWQgd2l0aCB0aGUgZ2l2ZW4gZmllbGRzLgotICAgIAorCiAJRm9yIHRoZSAnd2lsZGNhcmQnIG9wdGlvbiBpZiBhIHVzZXIgc2VsZWN0ZWQgZmllbGQgaXMgaW52YWxpZCBmb3IgYW4KIAlldmVudCB0eXBlLCBhIG1lc3NhZ2UgaXMgZGlzcGxheWVkIHRvIHRoZSB1c2VyIHRoYXQgdGhlIG9wdGlvbiBpcwogCWlnbm9yZWQgZm9yIHRoYXQgdHlwZS4gRm9yIGV4YW1wbGU6Ci0gICAgCisKIAkJJCBwZXJmIHNjcmlwdCAtZiBjb21tLHRpZCx0cmFjZQogCQkndHJhY2UnIG5vdCB2YWxpZCBmb3IgaGFyZHdhcmUgZXZlbnRzLiBJZ25vcmluZy4KIAkJJ3RyYWNlJyBub3QgdmFsaWQgZm9yIHNvZnR3YXJlIGV2ZW50cy4gSWdub3JpbmcuCi0gICAgCisKIAlBbHRlcm5hdGl2ZWx5LCBpZiB0aGUgdHlwZSBpcyBnaXZlbiBhbiBpbnZhbGlkIGZpZWxkIGlzIHNwZWNpZmllZCBpdAogCWlzIGFuIGVycm9yLiBGb3IgZXhhbXBsZToKLSAgICAKKwogICAgICAgICBwZXJmIHNjcmlwdCAtdiAtZiBzdzpjb21tLHRpZCx0cmFjZQogICAgICAgICAndHJhY2UnIG5vdCB2YWxpZCBmb3Igc29mdHdhcmUgZXZlbnRzLgotICAgIAorCiAJQXQgdGhpcyBwb2ludCB1c2FnZSBpcyBkaXNwbGF5ZWQsIGFuZCBwZXJmLXNjcmlwdCBleGl0cy4KLSAgICAKKwogCUZpbmFsbHksIGEgdXNlciBtYXkgbm90IHNldCBmaWVsZHMgdG8gbm9uZSBmb3IgYWxsIGV2ZW50IHR5cGVzLgogCWkuZS4sIC1mICIiIGlzIG5vdCBhbGxvd2VkLgogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zdGF0LnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXN0YXQudHh0CmluZGV4IDI5ZWU4NTcuLjA0ZTE1MGQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXN0YXQudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXN0YXQudHh0CkBAIC0yNSwxMCArMjUsMjIgQEAKIAogLWU6OgogLS1ldmVudD06OgotCVNlbGVjdCB0aGUgUE1VIGV2ZW50LiBTZWxlY3Rpb24gY2FuIGJlIGEgc3ltYm9saWMgZXZlbnQgbmFtZQotCSh1c2UgJ3BlcmYgbGlzdCcgdG8gbGlzdCBhbGwgZXZlbnRzKSBvciBhIHJhdyBQTVUKLQlldmVudCAoZXZlbnRzZWwrdW1hc2spIGluIHRoZSBmb3JtIG9mIHJOTk4gd2hlcmUgTk5OIGlzIGEKLQkgaGV4YWRlY2ltYWwgZXZlbnQgZGVzY3JpcHRvci4KKwlTZWxlY3QgdGhlIFBNVSBldmVudC4gU2VsZWN0aW9uIGNhbiBiZToKKworCS0gYSBzeW1ib2xpYyBldmVudCBuYW1lICh1c2UgJ3BlcmYgbGlzdCcgdG8gbGlzdCBhbGwgZXZlbnRzKQorCisJLSBhIHJhdyBQTVUgZXZlbnQgKGV2ZW50c2VsK3VtYXNrKSBpbiB0aGUgZm9ybSBvZiByTk5OIHdoZXJlIE5OTiBpcyBhCisJICBoZXhhZGVjaW1hbCBldmVudCBkZXNjcmlwdG9yLgorCisJLSBhIHN5bWJvbGljYWxseSBmb3JtZWQgZXZlbnQgbGlrZSAncG11L3BhcmFtMT0weDMscGFyYW0yLycgd2hlcmUKKwkgIHBhcmFtMSBhbmQgcGFyYW0yIGFyZSBkZWZpbmVkIGFzIGZvcm1hdHMgZm9yIHRoZSBQTVUgaW4KKwkgIC9zeXMvYnVzL2V2ZW50X3NvdXJjZXMvZGV2aWNlcy88cG11Pi9mb3JtYXQvKgorCisJLSBhIHN5bWJvbGljYWxseSBmb3JtZWQgZXZlbnQgbGlrZSAncG11L2NvbmZpZz1NLGNvbmZpZzE9Tixjb25maWcyPUsvJworCSAgd2hlcmUgTSwgTiwgSyBhcmUgbnVtYmVycyAoaW4gZGVjaW1hbCwgaGV4LCBvY3RhbCBmb3JtYXQpLgorCSAgQWNjZXB0YWJsZSB2YWx1ZXMgZm9yIGVhY2ggb2YgJ2NvbmZpZycsICdjb25maWcxJyBhbmQgJ2NvbmZpZzInCisJICBwYXJhbWV0ZXJzIGFyZSBkZWZpbmVkIGJ5IGNvcnJlc3BvbmRpbmcgZW50cmllcyBpbgorCSAgL3N5cy9idXMvZXZlbnRfc291cmNlcy9kZXZpY2VzLzxwbXU+L2Zvcm1hdC8qCiAKIC1pOjoKIC0tbm8taW5oZXJpdDo6CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2JlbmNoL2Z1dGV4LmggYi90b29scy9wZXJmL2JlbmNoL2Z1dGV4LmgKaW5kZXggNzFmMjg0NC4uN2VkMjJmZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9iZW5jaC9mdXRleC5oCisrKyBiL3Rvb2xzL3BlcmYvYmVuY2gvZnV0ZXguaApAQCAtNjgsNCArNjgsMTcgQEAKIAkJIHZhbCwgb3BmbGFncyk7CiB9CiAKKyNpZm5kZWYgSEFWRV9QVEhSRUFEX0FUVFJfU0VUQUZGSU5JVFlfTlAKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CitzdGF0aWMgaW5saW5lIGludCBwdGhyZWFkX2F0dHJfc2V0YWZmaW5pdHlfbnAocHRocmVhZF9hdHRyX3QgKmF0dHIsCisJCQkJCSAgICAgIHNpemVfdCBjcHVzZXRzaXplLAorCQkJCQkgICAgICBjcHVfc2V0X3QgKmNwdXNldCkKK3sKKwlhdHRyID0gYXR0cjsKKwljcHVzZXRzaXplID0gY3B1c2V0c2l6ZTsKKwljcHVzZXQgPSBjcHVzZXQ7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogI2VuZGlmIC8qIF9GVVRFWF9IICovCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1jYWNoZS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWJ1aWxkaWQtY2FjaGUuYwppbmRleCA3N2Q1Y2FlLi41MGU2YjY2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYnVpbGRpZC1jYWNoZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1idWlsZGlkLWNhY2hlLmMKQEAgLTIzNiwxMCArMjM2LDEwIEBACiAJCWlmIChlcnJubyA9PSBFTk9FTlQpCiAJCQlyZXR1cm4gZmFsc2U7CiAKLQkJcHJfd2FybmluZygiUHJvYmxlbXMgd2l0aCAlcyBmaWxlLCBjb25zaWRlciByZW1vdmluZyBpdCBmcm9tIHRoZSBjYWNoZVxuIiwgCisJCXByX3dhcm5pbmcoIlByb2JsZW1zIHdpdGggJXMgZmlsZSwgY29uc2lkZXIgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgY2FjaGVcbiIsCiAJCQkgICBmaWxlbmFtZSk7CiAJfSBlbHNlIGlmIChtZW1jbXAoZHNvLT5idWlsZF9pZCwgYnVpbGRfaWQsIHNpemVvZihkc28tPmJ1aWxkX2lkKSkpIHsKLQkJcHJfd2FybmluZygiUHJvYmxlbXMgd2l0aCAlcyBmaWxlLCBjb25zaWRlciByZW1vdmluZyBpdCBmcm9tIHRoZSBjYWNoZVxuIiwgCisJCXByX3dhcm5pbmcoIlByb2JsZW1zIHdpdGggJXMgZmlsZSwgY29uc2lkZXIgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgY2FjaGVcbiIsCiAJCQkgICBmaWxlbmFtZSk7CiAJfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWRpZmYuYwppbmRleCAxZmQ5NmMxLi43NGFhZGE1IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tZGlmZi5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1kaWZmLmMKQEAgLTM5MCw2ICszOTAsMTUgQEAKIAl9CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZGF0YV9fZmlsZSAqZm10X3RvX2RhdGFfZmlsZShzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQpCit7CisJc3RydWN0IGRpZmZfaHBwX2ZtdCAqZGZtdCA9IGNvbnRhaW5lcl9vZihmbXQsIHN0cnVjdCBkaWZmX2hwcF9mbXQsIGZtdCk7CisJdm9pZCAqcHRyID0gZGZtdCAtIGRmbXQtPmlkeDsKKwlzdHJ1Y3QgZGF0YV9fZmlsZSAqZCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCBkYXRhX19maWxlLCBmbXQpOworCisJcmV0dXJuIGQ7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaGlzdF9lbnRyeSoKIGdldF9wYWlyX2RhdGEoc3RydWN0IGhpc3RfZW50cnkgKmhlLCBzdHJ1Y3QgZGF0YV9fZmlsZSAqZCkKIHsKQEAgLTQwNyw4ICs0MTYsNyBAQAogc3RhdGljIHN0cnVjdCBoaXN0X2VudHJ5KgogZ2V0X3BhaXJfZm10KHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgc3RydWN0IGRpZmZfaHBwX2ZtdCAqZGZtdCkKIHsKLQl2b2lkICpwdHIgPSBkZm10IC0gZGZtdC0+aWR4OwotCXN0cnVjdCBkYXRhX19maWxlICpkID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IGRhdGFfX2ZpbGUsIGZtdCk7CisJc3RydWN0IGRhdGFfX2ZpbGUgKmQgPSBmbXRfdG9fZGF0YV9maWxlKCZkZm10LT5mbXQpOwogCiAJcmV0dXJuIGdldF9wYWlyX2RhdGEoaGUsIGQpOwogfQpAQCAtNDMwLDcgKzQzOCw3IEBACiAJCW5leHQgPSByYl9uZXh0KCZoZS0+cmJfbm9kZV9pbik7CiAJCWlmICghaGlzdF9lbnRyeV9fbmV4dF9wYWlyKGhlKSkgewogCQkJcmJfZXJhc2UoJmhlLT5yYl9ub2RlX2luLCByb290KTsKLQkJCWhpc3RfZW50cnlfX2ZyZWUoaGUpOworCQkJaGlzdF9lbnRyeV9fZGVsZXRlKGhlKTsKIAkJfQogCX0KIH0KQEAgLTQ0OCwyNiArNDU2LDMwIEBACiAJbmV4dCA9IHJiX2ZpcnN0KHJvb3QpOwogCXdoaWxlIChuZXh0ICE9IE5VTEwpIHsKIAkJc3RydWN0IGhpc3RfZW50cnkgKmhlLCAqcGFpcjsKKwkJc3RydWN0IGRhdGFfX2ZpbGUgKmQ7CisJCWludCBpOwogCiAJCWhlICAgPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZV9pbik7CiAJCW5leHQgPSByYl9uZXh0KCZoZS0+cmJfbm9kZV9pbik7CiAKLQkJcGFpciA9IGdldF9wYWlyX2RhdGEoaGUsICZkYXRhX19maWxlc1tzb3J0X2NvbXB1dGVdKTsKLQkJaWYgKCFwYWlyKQotCQkJY29udGludWU7CisJCWRhdGFfX2Zvcl9lYWNoX2ZpbGVfbmV3KGksIGQpIHsKKwkJCXBhaXIgPSBnZXRfcGFpcl9kYXRhKGhlLCBkKTsKKwkJCWlmICghcGFpcikKKwkJCQljb250aW51ZTsKIAotCQlzd2l0Y2ggKGNvbXB1dGUpIHsKLQkJY2FzZSBDT01QVVRFX0RFTFRBOgotCQkJY29tcHV0ZV9kZWx0YShoZSwgcGFpcik7Ci0JCQlicmVhazsKLQkJY2FzZSBDT01QVVRFX1JBVElPOgotCQkJY29tcHV0ZV9yYXRpbyhoZSwgcGFpcik7Ci0JCQlicmVhazsKLQkJY2FzZSBDT01QVVRFX1dFSUdIVEVEX0RJRkY6Ci0JCQljb21wdXRlX3dkaWZmKGhlLCBwYWlyKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJQlVHX09OKDEpOworCQkJc3dpdGNoIChjb21wdXRlKSB7CisJCQljYXNlIENPTVBVVEVfREVMVEE6CisJCQkJY29tcHV0ZV9kZWx0YShoZSwgcGFpcik7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTVBVVEVfUkFUSU86CisJCQkJY29tcHV0ZV9yYXRpbyhoZSwgcGFpcik7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTVBVVEVfV0VJR0hURURfRElGRjoKKwkJCQljb21wdXRlX3dkaWZmKGhlLCBwYWlyKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJQlVHX09OKDEpOworCQkJfQogCQl9CiAJfQogfQpAQCAtNTE3LDcgKzUyOSw3IEBACiAKIHN0YXRpYyBpbnQ2NF90CiBoaXN0X2VudHJ5X19jbXBfY29tcHV0ZShzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0LAotCQkJaW50IGMpCisJCQlpbnQgYywgaW50IHNvcnRfaWR4KQogewogCWJvb2wgcGFpcnNfbGVmdCAgPSBoaXN0X2VudHJ5X19oYXNfcGFpcnMobGVmdCk7CiAJYm9vbCBwYWlyc19yaWdodCA9IGhpc3RfZW50cnlfX2hhc19wYWlycyhyaWdodCk7CkBAIC01MjksOCArNTQxLDggQEAKIAlpZiAoIXBhaXJzX2xlZnQgfHwgIXBhaXJzX3JpZ2h0KQogCQlyZXR1cm4gcGFpcnNfbGVmdCA/IC0xIDogMTsKIAotCXBfbGVmdCAgPSBnZXRfcGFpcl9kYXRhKGxlZnQsICAmZGF0YV9fZmlsZXNbc29ydF9jb21wdXRlXSk7Ci0JcF9yaWdodCA9IGdldF9wYWlyX2RhdGEocmlnaHQsICZkYXRhX19maWxlc1tzb3J0X2NvbXB1dGVdKTsKKwlwX2xlZnQgID0gZ2V0X3BhaXJfZGF0YShsZWZ0LCAgJmRhdGFfX2ZpbGVzW3NvcnRfaWR4XSk7CisJcF9yaWdodCA9IGdldF9wYWlyX2RhdGEocmlnaHQsICZkYXRhX19maWxlc1tzb3J0X2lkeF0pOwogCiAJaWYgKCFwX2xlZnQgJiYgIXBfcmlnaHQpCiAJCXJldHVybiAwOwpAQCAtNTQ2LDkwICs1NTgsMTAyIEBACiB9CiAKIHN0YXRpYyBpbnQ2NF90Ci1oaXN0X2VudHJ5X19jbXBfbm9wKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0IF9fbWF5YmVfdW51c2VkLAoraGlzdF9lbnRyeV9fY21wX2NvbXB1dGVfaWR4KHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQsCisJCQkgICAgaW50IGMsIGludCBzb3J0X2lkeCkKK3sKKwlzdHJ1Y3QgaGlzdF9lbnRyeSAqcF9yaWdodCwgKnBfbGVmdDsKKworCXBfbGVmdCAgPSBnZXRfcGFpcl9kYXRhKGxlZnQsICAmZGF0YV9fZmlsZXNbc29ydF9pZHhdKTsKKwlwX3JpZ2h0ID0gZ2V0X3BhaXJfZGF0YShyaWdodCwgJmRhdGFfX2ZpbGVzW3NvcnRfaWR4XSk7CisKKwlpZiAoIXBfbGVmdCAmJiAhcF9yaWdodCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIXBfbGVmdCB8fCAhcF9yaWdodCkKKwkJcmV0dXJuIHBfbGVmdCA/IC0xIDogMTsKKworCWlmIChjICE9IENPTVBVVEVfREVMVEEpIHsKKwkJLyoKKwkJICogVGhlIGRlbHRhIGNhbiBiZSBjb21wdXRlZCB3aXRob3V0IHRoZSBiYXNlbGluZSwgYnV0CisJCSAqIG90aGVycyBhcmUgbm90LiAgUHV0IHRob3NlIGVudHJpZXMgd2hpY2ggaGF2ZSBubworCQkgKiB2YWx1ZXMgYmVsb3cuCisJCSAqLworCQlpZiAobGVmdC0+ZHVtbXkgJiYgcmlnaHQtPmR1bW15KQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKGxlZnQtPmR1bW15IHx8IHJpZ2h0LT5kdW1teSkKKwkJCXJldHVybiBsZWZ0LT5kdW1teSA/IDEgOiAtMTsKKwl9CisKKwlyZXR1cm4gX19oaXN0X2VudHJ5X19jbXBfY29tcHV0ZShwX2xlZnQsIHBfcmlnaHQsIGMpOworfQorCitzdGF0aWMgaW50NjRfdAoraGlzdF9lbnRyeV9fY21wX25vcChzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQgX19tYXliZV91bnVzZWQsCisJCSAgICBzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCBfX21heWJlX3VudXNlZCwKIAkJICAgIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCBfX21heWJlX3VudXNlZCkKIHsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludDY0X3QKLWhpc3RfZW50cnlfX2NtcF9iYXNlbGluZShzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQoraGlzdF9lbnRyeV9fY21wX2Jhc2VsaW5lKHN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdCBfX21heWJlX3VudXNlZCwKKwkJCSBzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQogewotCWlmIChzb3J0X2NvbXB1dGUpCi0JCXJldHVybiAwOwotCiAJaWYgKGxlZnQtPnN0YXQucGVyaW9kID09IHJpZ2h0LT5zdGF0LnBlcmlvZCkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIGxlZnQtPnN0YXQucGVyaW9kID4gcmlnaHQtPnN0YXQucGVyaW9kID8gMSA6IC0xOwogfQogCiBzdGF0aWMgaW50NjRfdAotaGlzdF9lbnRyeV9fY21wX2RlbHRhKHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCitoaXN0X2VudHJ5X19jbXBfZGVsdGEoc3RydWN0IHBlcmZfaHBwX2ZtdCAqZm10LAorCQkgICAgICBzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQogewotCXJldHVybiBoaXN0X2VudHJ5X19jbXBfY29tcHV0ZShyaWdodCwgbGVmdCwgQ09NUFVURV9ERUxUQSk7CisJc3RydWN0IGRhdGFfX2ZpbGUgKmQgPSBmbXRfdG9fZGF0YV9maWxlKGZtdCk7CisKKwlyZXR1cm4gaGlzdF9lbnRyeV9fY21wX2NvbXB1dGUocmlnaHQsIGxlZnQsIENPTVBVVEVfREVMVEEsIGQtPmlkeCk7CiB9CiAKIHN0YXRpYyBpbnQ2NF90Ci1oaXN0X2VudHJ5X19jbXBfcmF0aW8oc3RydWN0IGhpc3RfZW50cnkgKmxlZnQsIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCkKK2hpc3RfZW50cnlfX2NtcF9yYXRpbyhzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQsCisJCSAgICAgIHN0cnVjdCBoaXN0X2VudHJ5ICpsZWZ0LCBzdHJ1Y3QgaGlzdF9lbnRyeSAqcmlnaHQpCiB7Ci0JcmV0dXJuIGhpc3RfZW50cnlfX2NtcF9jb21wdXRlKHJpZ2h0LCBsZWZ0LCBDT01QVVRFX1JBVElPKTsKKwlzdHJ1Y3QgZGF0YV9fZmlsZSAqZCA9IGZtdF90b19kYXRhX2ZpbGUoZm10KTsKKworCXJldHVybiBoaXN0X2VudHJ5X19jbXBfY29tcHV0ZShyaWdodCwgbGVmdCwgQ09NUFVURV9SQVRJTywgZC0+aWR4KTsKIH0KIAogc3RhdGljIGludDY0X3QKLWhpc3RfZW50cnlfX2NtcF93ZGlmZihzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQoraGlzdF9lbnRyeV9fY21wX3dkaWZmKHN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdCwKKwkJICAgICAgc3RydWN0IGhpc3RfZW50cnkgKmxlZnQsIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCkKIHsKLQlyZXR1cm4gaGlzdF9lbnRyeV9fY21wX2NvbXB1dGUocmlnaHQsIGxlZnQsIENPTVBVVEVfV0VJR0hURURfRElGRik7CisJc3RydWN0IGRhdGFfX2ZpbGUgKmQgPSBmbXRfdG9fZGF0YV9maWxlKGZtdCk7CisKKwlyZXR1cm4gaGlzdF9lbnRyeV9fY21wX2NvbXB1dGUocmlnaHQsIGxlZnQsIENPTVBVVEVfV0VJR0hURURfRElGRiwgZC0+aWR4KTsKIH0KIAotc3RhdGljIHZvaWQgaW5zZXJ0X2hpc3RfZW50cnlfYnlfY29tcHV0ZShzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwKLQkJCQkJIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwKLQkJCQkJIGludCBjKQorc3RhdGljIGludDY0X3QKK2hpc3RfZW50cnlfX2NtcF9kZWx0YV9pZHgoc3RydWN0IHBlcmZfaHBwX2ZtdCAqZm10IF9fbWF5YmVfdW51c2VkLAorCQkJICBzdHJ1Y3QgaGlzdF9lbnRyeSAqbGVmdCwgc3RydWN0IGhpc3RfZW50cnkgKnJpZ2h0KQogewotCXN0cnVjdCByYl9ub2RlICoqcCA9ICZyb290LT5yYl9ub2RlOwotCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwotCXN0cnVjdCBoaXN0X2VudHJ5ICppdGVyOwotCi0Jd2hpbGUgKCpwICE9IE5VTEwpIHsKLQkJcGFyZW50ID0gKnA7Ci0JCWl0ZXIgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKLQkJaWYgKGhpc3RfZW50cnlfX2NtcF9jb21wdXRlKGhlLCBpdGVyLCBjKSA8IDApCi0JCQlwID0gJigqcCktPnJiX2xlZnQ7Ci0JCWVsc2UKLQkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7Ci0JfQotCi0JcmJfbGlua19ub2RlKCZoZS0+cmJfbm9kZSwgcGFyZW50LCBwKTsKLQlyYl9pbnNlcnRfY29sb3IoJmhlLT5yYl9ub2RlLCByb290KTsKKwlyZXR1cm4gaGlzdF9lbnRyeV9fY21wX2NvbXB1dGVfaWR4KHJpZ2h0LCBsZWZ0LCBDT01QVVRFX0RFTFRBLAorCQkJCQkgICBzb3J0X2NvbXB1dGUpOwogfQogCi1zdGF0aWMgdm9pZCBoaXN0c19fY29tcHV0ZV9yZXNvcnQoc3RydWN0IGhpc3RzICpoaXN0cykKK3N0YXRpYyBpbnQ2NF90CitoaXN0X2VudHJ5X19jbXBfcmF0aW9faWR4KHN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdCBfX21heWJlX3VudXNlZCwKKwkJCSAgc3RydWN0IGhpc3RfZW50cnkgKmxlZnQsIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCkKIHsKLQlzdHJ1Y3QgcmJfcm9vdCAqcm9vdDsKLQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dDsKKwlyZXR1cm4gaGlzdF9lbnRyeV9fY21wX2NvbXB1dGVfaWR4KHJpZ2h0LCBsZWZ0LCBDT01QVVRFX1JBVElPLAorCQkJCQkgICBzb3J0X2NvbXB1dGUpOworfQogCi0JaWYgKHNvcnRfX25lZWRfY29sbGFwc2UpCi0JCXJvb3QgPSAmaGlzdHMtPmVudHJpZXNfY29sbGFwc2VkOwotCWVsc2UKLQkJcm9vdCA9IGhpc3RzLT5lbnRyaWVzX2luOwotCi0JaGlzdHMtPmVudHJpZXMgPSBSQl9ST09UOwotCW5leHQgPSByYl9maXJzdChyb290KTsKLQotCWhpc3RzX19yZXNldF9zdGF0cyhoaXN0cyk7Ci0JaGlzdHNfX3Jlc2V0X2NvbF9sZW4oaGlzdHMpOwotCi0Jd2hpbGUgKG5leHQgIT0gTlVMTCkgewotCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqaGU7Ci0KLQkJaGUgPSByYl9lbnRyeShuZXh0LCBzdHJ1Y3QgaGlzdF9lbnRyeSwgcmJfbm9kZV9pbik7Ci0JCW5leHQgPSByYl9uZXh0KCZoZS0+cmJfbm9kZV9pbik7Ci0KLQkJaW5zZXJ0X2hpc3RfZW50cnlfYnlfY29tcHV0ZSgmaGlzdHMtPmVudHJpZXMsIGhlLCBjb21wdXRlKTsKLQkJaGlzdHNfX2luY19zdGF0cyhoaXN0cywgaGUpOwotCi0JCWlmICghaGUtPmZpbHRlcmVkKQotCQkJaGlzdHNfX2NhbGNfY29sX2xlbihoaXN0cywgaGUpOwotCX0KK3N0YXRpYyBpbnQ2NF90CitoaXN0X2VudHJ5X19jbXBfd2RpZmZfaWR4KHN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdCBfX21heWJlX3VudXNlZCwKKwkJCSAgc3RydWN0IGhpc3RfZW50cnkgKmxlZnQsIHN0cnVjdCBoaXN0X2VudHJ5ICpyaWdodCkKK3sKKwlyZXR1cm4gaGlzdF9lbnRyeV9fY21wX2NvbXB1dGVfaWR4KHJpZ2h0LCBsZWZ0LCBDT01QVVRFX1dFSUdIVEVEX0RJRkYsCisJCQkJCSAgIHNvcnRfY29tcHV0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGhpc3RzX19wcm9jZXNzKHN0cnVjdCBoaXN0cyAqaGlzdHMpCkBAIC02MzcsMTIgKzY2MSw4IEBACiAJaWYgKHNob3dfYmFzZWxpbmVfb25seSkKIAkJaGlzdHNfX2Jhc2VsaW5lX29ubHkoaGlzdHMpOwogCi0JaWYgKHNvcnRfY29tcHV0ZSkgewotCQloaXN0c19fcHJlY29tcHV0ZShoaXN0cyk7Ci0JCWhpc3RzX19jb21wdXRlX3Jlc29ydChoaXN0cyk7Ci0JfSBlbHNlIHsKLQkJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMsIE5VTEwpOwotCX0KKwloaXN0c19fcHJlY29tcHV0ZShoaXN0cyk7CisJaGlzdHNfX291dHB1dF9yZXNvcnQoaGlzdHMsIE5VTEwpOwogCiAJaGlzdHNfX2ZwcmludGYoaGlzdHMsIHRydWUsIDAsIDAsIDAsIHN0ZG91dCk7CiB9CkBAIC04NDEsNyArODYxLDcgQEAKIAljaGFyIHBmbXRbMjBdID0gIiAiOwogCiAJaWYgKCFwYWlyKQotCQlnb3RvIGR1bW15X3ByaW50OworCQlnb3RvIG5vX3ByaW50OwogCiAJc3dpdGNoIChjb21wYXJpc29uX21ldGhvZCkgewogCWNhc2UgQ09NUFVURV9ERUxUQToKQEAgLTg1MCw4ICs4NzAsNiBAQAogCQllbHNlCiAJCQlkaWZmID0gY29tcHV0ZV9kZWx0YShoZSwgcGFpcik7CiAKLQkJaWYgKGZhYnMoZGlmZikgPCAwLjAxKQotCQkJZ290byBkdW1teV9wcmludDsKIAkJc2NucHJpbnRmKHBmbXQsIDIwLCAiJSUlK2QuMmYlJSUlIiwgZGZtdC0+aGVhZGVyX3dpZHRoIC0gMSk7CiAJCXJldHVybiBwZXJjZW50X2NvbG9yX3NucHJpbnRmKGhwcC0+YnVmLCBocHAtPnNpemUsCiAJCQkJCXBmbXQsIGRpZmYpOwpAQCAtODgzLDYgKzkwMSw5IEBACiAJfQogZHVtbXlfcHJpbnQ6CiAJcmV0dXJuIHNjbnByaW50ZihocHAtPmJ1ZiwgaHBwLT5zaXplLCAiJSpzIiwKKwkJCWRmbXQtPmhlYWRlcl93aWR0aCwgIk4vQSIpOworbm9fcHJpbnQ6CisJcmV0dXJuIHNjbnByaW50ZihocHAtPmJ1ZiwgaHBwLT5zaXplLCAiJSpzIiwKIAkJCWRmbXQtPmhlYWRlcl93aWR0aCwgcGZtdCk7CiB9CiAKQEAgLTkzMiwxNCArOTUzLDE1IEBACiAJCWVsc2UKIAkJCWRpZmYgPSBjb21wdXRlX2RlbHRhKGhlLCBwYWlyKTsKIAotCQlpZiAoZmFicyhkaWZmKSA+PSAwLjAxKQotCQkJc2NucHJpbnRmKGJ1Ziwgc2l6ZSwgIiUrNC4yRiUlIiwgZGlmZik7CisJCXNjbnByaW50ZihidWYsIHNpemUsICIlKzQuMkYlJSIsIGRpZmYpOwogCQlicmVhazsKIAogCWNhc2UgUEVSRl9IUFBfRElGRl9fUkFUSU86CiAJCS8qIE5vIHBvaW50IGZvciByYXRpbyBudW1iZXIgaWYgd2UgYXJlIGR1bW15Li4gKi8KLQkJaWYgKGhlLT5kdW1teSkKKwkJaWYgKGhlLT5kdW1teSkgeworCQkJc2NucHJpbnRmKGJ1Ziwgc2l6ZSwgIk4vQSIpOwogCQkJYnJlYWs7CisJCX0KIAogCQlpZiAocGFpci0+ZGlmZi5jb21wdXRlZCkKIAkJCXJhdGlvID0gcGFpci0+ZGlmZi5wZXJpb2RfcmF0aW87CkBAIC05NTIsOCArOTc0LDEwIEBACiAKIAljYXNlIFBFUkZfSFBQX0RJRkZfX1dFSUdIVEVEX0RJRkY6CiAJCS8qIE5vIHBvaW50IGZvciB3ZGlmZiBudW1iZXIgaWYgd2UgYXJlIGR1bW15Li4gKi8KLQkJaWYgKGhlLT5kdW1teSkKKwkJaWYgKGhlLT5kdW1teSkgeworCQkJc2NucHJpbnRmKGJ1Ziwgc2l6ZSwgIk4vQSIpOwogCQkJYnJlYWs7CisJCX0KIAogCQlpZiAocGFpci0+ZGlmZi5jb21wdXRlZCkKIAkJCXdkaWZmID0gcGFpci0+ZGlmZi53ZGlmZjsKQEAgLTExMDUsOSArMTEyOSwxMCBAQAogCXBlcmZfaHBwX19yZWdpc3Rlcl9zb3J0X2ZpZWxkKGZtdCk7CiB9CiAKLXN0YXRpYyB2b2lkIHVpX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgdWlfaW5pdCh2b2lkKQogewogCXN0cnVjdCBkYXRhX19maWxlICpkOworCXN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdDsKIAlpbnQgaTsKIAogCWRhdGFfX2Zvcl9lYWNoX2ZpbGUoaSwgZCkgewpAQCAtMTEzNyw2ICsxMTYyLDQ2IEBACiAJCQlkYXRhX19ocHBfcmVnaXN0ZXIoZCwgaSA/IFBFUkZfSFBQX0RJRkZfX1BFUklPRCA6CiAJCQkJCQkgIFBFUkZfSFBQX0RJRkZfX1BFUklPRF9CQVNFTElORSk7CiAJfQorCisJaWYgKCFzb3J0X2NvbXB1dGUpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBQcmVwZW5kIGFuIGZtdCB0byBzb3J0IG9uIGNvbHVtbnMgYXQgJ3NvcnRfY29tcHV0ZScgZmlyc3QuCisJICogVGhpcyBmbXQgaXMgYWRkZWQgb25seSB0byB0aGUgc29ydCBsaXN0IGJ1dCBub3QgdG8gdGhlCisJICogb3V0cHV0IGZpZWxkcyBsaXN0LgorCSAqCisJICogTm90ZSB0aGF0IHRoaXMgY29sdW1uIChkYXRhKSBjYW4gYmUgY29tcGFyZWQgdHdpY2UgLSBvbmUKKwkgKiBmb3IgdGhpcyAnc29ydF9jb21wdXRlJyBmbXQgYW5kIGFub3RoZXIgZm9yIHRoZSBub3JtYWwKKwkgKiBkaWZmX2hwcF9mbXQuICBCdXQgaXQgc2hvdWxkbid0IGEgcHJvYmxlbSBhcyBtb3N0IGVudHJpZXMKKwkgKiB3aWxsIGJlIHNvcnRlZCBvdXQgYnkgZmlyc3QgdHJ5IG9yIGJhc2VsaW5lIGFuZCBjb21wYXJpbmcKKwkgKiBpcyBub3QgYSBjb3N0bHkgb3BlcmF0aW9uLgorCSAqLworCWZtdCA9IHphbGxvYyhzaXplb2YoKmZtdCkpOworCWlmIChmbXQgPT0gTlVMTCkgeworCQlwcl9lcnIoIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmbXQtPmNtcCAgICAgID0gaGlzdF9lbnRyeV9fY21wX25vcDsKKwlmbXQtPmNvbGxhcHNlID0gaGlzdF9lbnRyeV9fY21wX25vcDsKKworCXN3aXRjaCAoY29tcHV0ZSkgeworCWNhc2UgQ09NUFVURV9ERUxUQToKKwkJZm10LT5zb3J0ID0gaGlzdF9lbnRyeV9fY21wX2RlbHRhX2lkeDsKKwkJYnJlYWs7CisJY2FzZSBDT01QVVRFX1JBVElPOgorCQlmbXQtPnNvcnQgPSBoaXN0X2VudHJ5X19jbXBfcmF0aW9faWR4OworCQlicmVhazsKKwljYXNlIENPTVBVVEVfV0VJR0hURURfRElGRjoKKwkJZm10LT5zb3J0ID0gaGlzdF9lbnRyeV9fY21wX3dkaWZmX2lkeDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHX09OKDEpOworCX0KKworCWxpc3RfYWRkKCZmbXQtPnNvcnRfbGlzdCwgJnBlcmZfaHBwX19zb3J0X2xpc3QpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRhdGFfaW5pdChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCkBAIC0xMjAyLDcgKzEyNjcsOCBAQAogCWlmIChkYXRhX2luaXQoYXJnYywgYXJndikgPCAwKQogCQlyZXR1cm4gLTE7CiAKLQl1aV9pbml0KCk7CisJaWYgKHVpX2luaXQoKSA8IDApCisJCXJldHVybiAtMTsKIAogCXNvcnRfX21vZGUgPSBTT1JUX01PREVfX0RJRkY7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1pbmplY3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1pbmplY3QuYwppbmRleCA4NGRmMmRlLi5hMTM2NDFlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4taW5qZWN0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWluamVjdC5jCkBAIC0zNDMsNiArMzQzLDcgQEAKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uID0gaW5qZWN0LT5zZXNzaW9uOwogCXN0cnVjdCBwZXJmX2RhdGFfZmlsZSAqZmlsZV9vdXQgPSAmaW5qZWN0LT5vdXRwdXQ7CisJaW50IGZkID0gcGVyZl9kYXRhX2ZpbGVfX2ZkKGZpbGVfb3V0KTsKIAogCXNpZ25hbChTSUdJTlQsIHNpZ19oYW5kbGVyKTsKIApAQCAtMzc2LDcgKzM3Nyw3IEBACiAJfQogCiAJaWYgKCFmaWxlX291dC0+aXNfcGlwZSkKLQkJbHNlZWsoZmlsZV9vdXQtPmZkLCBzZXNzaW9uLT5oZWFkZXIuZGF0YV9vZmZzZXQsIFNFRUtfU0VUKTsKKwkJbHNlZWsoZmQsIHNlc3Npb24tPmhlYWRlci5kYXRhX29mZnNldCwgU0VFS19TRVQpOwogCiAJcmV0ID0gcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmaW5qZWN0LT50b29sKTsKIApAQCAtMzg1LDcgKzM4Niw3IEBACiAJCQlwZXJmX2hlYWRlcl9fc2V0X2ZlYXQoJnNlc3Npb24tPmhlYWRlciwKIAkJCQkJICAgICAgSEVBREVSX0JVSUxEX0lEKTsKIAkJc2Vzc2lvbi0+aGVhZGVyLmRhdGFfc2l6ZSA9IGluamVjdC0+Ynl0ZXNfd3JpdHRlbjsKLQkJcGVyZl9zZXNzaW9uX193cml0ZV9oZWFkZXIoc2Vzc2lvbiwgc2Vzc2lvbi0+ZXZsaXN0LCBmaWxlX291dC0+ZmQsIHRydWUpOworCQlwZXJmX3Nlc3Npb25fX3dyaXRlX2hlYWRlcihzZXNzaW9uLCBzZXNzaW9uLT5ldmxpc3QsIGZkLCB0cnVlKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLW1lbS5jIGIvdG9vbHMvcGVyZi9idWlsdGluLW1lbS5jCmluZGV4IDI0ZGI2ZmYuLjliNTY2MzkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1tZW0uYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tbWVtLmMKQEAgLTcsNDQgKzcsNDcgQEAKICNpbmNsdWRlICJ1dGlsL3Nlc3Npb24uaCIKICNpbmNsdWRlICJ1dGlsL2RhdGEuaCIKIAotI2RlZmluZSBNRU1fT1BFUkFUSU9OX0xPQUQJImxvYWQiCi0jZGVmaW5lIE1FTV9PUEVSQVRJT05fU1RPUkUJInN0b3JlIgotCi1zdGF0aWMgY29uc3QgY2hhcgkqbWVtX29wZXJhdGlvbgkJPSBNRU1fT1BFUkFUSU9OX0xPQUQ7CisjZGVmaW5lIE1FTV9PUEVSQVRJT05fTE9BRAkweDEKKyNkZWZpbmUgTUVNX09QRVJBVElPTl9TVE9SRQkweDIKIAogc3RydWN0IHBlcmZfbWVtIHsKIAlzdHJ1Y3QgcGVyZl90b29sCXRvb2w7CiAJY2hhciBjb25zdAkJKmlucHV0X25hbWU7CiAJYm9vbAkJCWhpZGVfdW5yZXNvbHZlZDsKIAlib29sCQkJZHVtcF9yYXc7CisJaW50CQkJb3BlcmF0aW9uOwogCWNvbnN0IGNoYXIJCSpjcHVfbGlzdDsKIAlERUNMQVJFX0JJVE1BUChjcHVfYml0bWFwLCBNQVhfTlJfQ1BVUyk7CiB9OwogCi1zdGF0aWMgaW50IF9fY21kX3JlY29yZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCitzdGF0aWMgaW50IF9fY21kX3JlY29yZChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YsIHN0cnVjdCBwZXJmX21lbSAqbWVtKQogewogCWludCByZWNfYXJnYywgaSA9IDAsIGo7CiAJY29uc3QgY2hhciAqKnJlY19hcmd2OwotCWNoYXIgZXZlbnRbNjRdOwogCWludCByZXQ7CiAKLQlyZWNfYXJnYyA9IGFyZ2MgKyA0OworCXJlY19hcmdjID0gYXJnYyArIDc7IC8qIG1heCBudW1iZXIgb2YgYXJndW1lbnRzICovCiAJcmVjX2FyZ3YgPSBjYWxsb2MocmVjX2FyZ2MgKyAxLCBzaXplb2YoY2hhciAqKSk7CiAJaWYgKCFyZWNfYXJndikKIAkJcmV0dXJuIC0xOwogCi0JcmVjX2FyZ3ZbaSsrXSA9IHN0cmR1cCgicmVjb3JkIik7Ci0JaWYgKCFzdHJjbXAobWVtX29wZXJhdGlvbiwgTUVNX09QRVJBVElPTl9MT0FEKSkKLQkJcmVjX2FyZ3ZbaSsrXSA9IHN0cmR1cCgiLVciKTsKLQlyZWNfYXJndltpKytdID0gc3RyZHVwKCItZCIpOwotCXJlY19hcmd2W2krK10gPSBzdHJkdXAoIi1lIik7CisJcmVjX2FyZ3ZbaSsrXSA9ICJyZWNvcmQiOwogCi0JaWYgKHN0cmNtcChtZW1fb3BlcmF0aW9uLCBNRU1fT1BFUkFUSU9OX0xPQUQpKQotCQlzcHJpbnRmKGV2ZW50LCAiY3B1L21lbS1zdG9yZXMvcHAiKTsKLQllbHNlCi0JCXNwcmludGYoZXZlbnQsICJjcHUvbWVtLWxvYWRzL3BwIik7CisJaWYgKG1lbS0+b3BlcmF0aW9uICYgTUVNX09QRVJBVElPTl9MT0FEKQorCQlyZWNfYXJndltpKytdID0gIi1XIjsKIAotCXJlY19hcmd2W2krK10gPSBzdHJkdXAoZXZlbnQpOworCXJlY19hcmd2W2krK10gPSAiLWQiOworCisJaWYgKG1lbS0+b3BlcmF0aW9uICYgTUVNX09QRVJBVElPTl9MT0FEKSB7CisJCXJlY19hcmd2W2krK10gPSAiLWUiOworCQlyZWNfYXJndltpKytdID0gImNwdS9tZW0tbG9hZHMvcHAiOworCX0KKworCWlmIChtZW0tPm9wZXJhdGlvbiAmIE1FTV9PUEVSQVRJT05fU1RPUkUpIHsKKwkJcmVjX2FyZ3ZbaSsrXSA9ICItZSI7CisJCXJlY19hcmd2W2krK10gPSAiY3B1L21lbS1zdG9yZXMvcHAiOworCX0KKwogCWZvciAoaiA9IDE7IGogPCBhcmdjOyBqKyssIGkrKykKIAkJcmVjX2FyZ3ZbaV0gPSBhcmd2W2pdOwogCkBAIC0xNjIsMTcgKzE2NSwxNyBAQAogCWlmICghcmVwX2FyZ3YpCiAJCXJldHVybiAtMTsKIAotCXJlcF9hcmd2W2krK10gPSBzdHJkdXAoInJlcG9ydCIpOwotCXJlcF9hcmd2W2krK10gPSBzdHJkdXAoIi0tbWVtLW1vZGUiKTsKLQlyZXBfYXJndltpKytdID0gc3RyZHVwKCItbiIpOyAvKiBkaXNwbGF5IG51bWJlciBvZiBzYW1wbGVzICovCisJcmVwX2FyZ3ZbaSsrXSA9ICJyZXBvcnQiOworCXJlcF9hcmd2W2krK10gPSAiLS1tZW0tbW9kZSI7CisJcmVwX2FyZ3ZbaSsrXSA9ICItbiI7IC8qIGRpc3BsYXkgbnVtYmVyIG9mIHNhbXBsZXMgKi8KIAogCS8qCiAJICogdGhlcmUgaXMgbm8gd2VpZ2h0IChjb3N0KSBhc3NvY2lhdGVkIHdpdGggc3RvcmVzLCBzbyBkb24ndCBwcmludAogCSAqIHRoZSBjb2x1bW4KIAkgKi8KLQlpZiAoc3RyY21wKG1lbV9vcGVyYXRpb24sIE1FTV9PUEVSQVRJT05fTE9BRCkpCi0JCXJlcF9hcmd2W2krK10gPSBzdHJkdXAoIi0tc29ydD1tZW0sc3ltLGRzbyxzeW1ib2xfZGFkZHIsIgotCQkJCSAgICAgICAiZHNvX2RhZGRyLHRsYixsb2NrZWQiKTsKKwlpZiAoIShtZW0tPm9wZXJhdGlvbiAmIE1FTV9PUEVSQVRJT05fTE9BRCkpCisJCXJlcF9hcmd2W2krK10gPSAiLS1zb3J0PW1lbSxzeW0sZHNvLHN5bWJvbF9kYWRkciwiCisJCQkJImRzb19kYWRkcix0bGIsbG9ja2VkIjsKIAogCWZvciAoaiA9IDE7IGogPCBhcmdjOyBqKyssIGkrKykKIAkJcmVwX2FyZ3ZbaV0gPSBhcmd2W2pdOwpAQCAtMTgyLDYgKzE4NSw3NSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0cnVjdCBtZW1fbW9kZSB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgbW9kZTsKK307CisKKyNkZWZpbmUgTUVNX09QVChuLCBtKSBcCisJeyAubmFtZSA9IG4sIC5tb2RlID0gKG0pIH0KKworI2RlZmluZSBNRU1fRU5EIHsgLm5hbWUgPSBOVUxMIH0KKworc3RhdGljIGNvbnN0IHN0cnVjdCBtZW1fbW9kZSBtZW1fbW9kZXNbXT17CisJTUVNX09QVCgibG9hZCIsIE1FTV9PUEVSQVRJT05fTE9BRCksCisJTUVNX09QVCgic3RvcmUiLCBNRU1fT1BFUkFUSU9OX1NUT1JFKSwKKwlNRU1fRU5ECit9OworCitzdGF0aWMgaW50CitwYXJzZV9tZW1fb3BzKGNvbnN0IHN0cnVjdCBvcHRpb24gKm9wdCwgY29uc3QgY2hhciAqc3RyLCBpbnQgdW5zZXQpCit7CisJaW50ICptb2RlID0gKGludCAqKW9wdC0+dmFsdWU7CisJY29uc3Qgc3RydWN0IG1lbV9tb2RlICptOworCWNoYXIgKnMsICpvcyA9IE5VTEwsICpwOworCWludCByZXQgPSAtMTsKKworCWlmICh1bnNldCkKKwkJcmV0dXJuIDA7CisKKwkvKiBzdHIgbWF5IGJlIE5VTEwgaW4gY2FzZSBubyBhcmcgaXMgcGFzc2VkIHRvIC10ICovCisJaWYgKHN0cikgeworCQkvKiBiZWNhdXNlIHN0ciBpcyByZWFkLW9ubHkgKi8KKwkJcyA9IG9zID0gc3RyZHVwKHN0cik7CisJCWlmICghcykKKwkJCXJldHVybiAtMTsKKworCQkvKiByZXNldCBtb2RlICovCisJCSptb2RlID0gMDsKKworCQlmb3IgKDs7KSB7CisJCQlwID0gc3RyY2hyKHMsICcsJyk7CisJCQlpZiAocCkKKwkJCQkqcCA9ICdcMCc7CisKKwkJCWZvciAobSA9IG1lbV9tb2RlczsgbS0+bmFtZTsgbSsrKSB7CisJCQkJaWYgKCFzdHJjYXNlY21wKHMsIG0tPm5hbWUpKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmICghbS0+bmFtZSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAidW5rbm93biBzYW1wbGluZyBvcCAlcywiCisJCQkJCSAgICAiIGNoZWNrIG1hbiBwYWdlXG4iLCBzKTsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCisJCQkqbW9kZSB8PSBtLT5tb2RlOworCisJCQlpZiAoIXApCisJCQkJYnJlYWs7CisKKwkJCXMgPSBwICsgMTsKKwkJfQorCX0KKwlyZXQgPSAwOworCisJaWYgKCptb2RlID09IDApCisJCSptb2RlID0gTUVNX09QRVJBVElPTl9MT0FEOworZXJyb3I6CisJZnJlZShvcyk7CisJcmV0dXJuIHJldDsKK30KKwogaW50IGNtZF9tZW0oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX19tYXliZV91bnVzZWQpCiB7CiAJc3RydWN0IHN0YXQgc3Q7CkBAIC0xOTcsMTAgKzI2OSwxNSBAQAogCQkJLm9yZGVyZWRfZXZlbnRzCT0gdHJ1ZSwKIAkJfSwKIAkJLmlucHV0X25hbWUJCSA9ICJwZXJmLmRhdGEiLAorCQkvKgorCQkgKiBkZWZhdWx0IHRvIGJvdGggbG9hZCBhbiBzdG9yZSBzYW1wbGluZworCQkgKi8KKwkJLm9wZXJhdGlvbgkJID0gTUVNX09QRVJBVElPTl9MT0FEIHwgTUVNX09QRVJBVElPTl9TVE9SRSwKIAl9OwogCWNvbnN0IHN0cnVjdCBvcHRpb24gbWVtX29wdGlvbnNbXSA9IHsKLQlPUFRfU1RSSU5HKCd0JywgInR5cGUiLCAmbWVtX29wZXJhdGlvbiwKLQkJICAgInR5cGUiLCAibWVtb3J5IG9wZXJhdGlvbnMobG9hZC9zdG9yZSkiKSwKKwlPUFRfQ0FMTEJBQ0soJ3QnLCAidHlwZSIsICZtZW0ub3BlcmF0aW9uLAorCQkgICAidHlwZSIsICJtZW1vcnkgb3BlcmF0aW9ucyhsb2FkLHN0b3JlKSBEZWZhdWx0IGxvYWQsc3RvcmUiLAorCQkgICAgcGFyc2VfbWVtX29wcyksCiAJT1BUX0JPT0xFQU4oJ0QnLCAiZHVtcC1yYXctc2FtcGxlcyIsICZtZW0uZHVtcF9yYXcsCiAJCSAgICAiZHVtcCByYXcgc2FtcGxlcyBpbiBBU0NJSSIpLAogCU9QVF9CT09MRUFOKCdVJywgImhpZGUtdW5yZXNvbHZlZCIsICZtZW0uaGlkZV91bnJlc29sdmVkLApAQCAtMjI1LDcgKzMwMiw3IEBACiAJYXJnYyA9IHBhcnNlX29wdGlvbnNfc3ViY29tbWFuZChhcmdjLCBhcmd2LCBtZW1fb3B0aW9ucywgbWVtX3N1YmNvbW1hbmRzLAogCQkJCQltZW1fdXNhZ2UsIFBBUlNFX09QVF9TVE9QX0FUX05PTl9PUFRJT04pOwogCi0JaWYgKCFhcmdjIHx8ICEoc3RybmNtcChhcmd2WzBdLCAicmVjIiwgMykgfHwgbWVtX29wZXJhdGlvbikpCisJaWYgKCFhcmdjIHx8ICEoc3RybmNtcChhcmd2WzBdLCAicmVjIiwgMykgfHwgbWVtLm9wZXJhdGlvbikpCiAJCXVzYWdlX3dpdGhfb3B0aW9ucyhtZW1fdXNhZ2UsIG1lbV9vcHRpb25zKTsKIAogCWlmICghbWVtLmlucHV0X25hbWUgfHwgIXN0cmxlbihtZW0uaW5wdXRfbmFtZSkpIHsKQEAgLTIzNiw3ICszMTMsNyBAQAogCX0KIAogCWlmICghc3RybmNtcChhcmd2WzBdLCAicmVjIiwgMykpCi0JCXJldHVybiBfX2NtZF9yZWNvcmQoYXJnYywgYXJndik7CisJCXJldHVybiBfX2NtZF9yZWNvcmQoYXJnYywgYXJndiwgJm1lbSk7CiAJZWxzZSBpZiAoIXN0cm5jbXAoYXJndlswXSwgInJlcCIsIDMpKQogCQlyZXR1cm4gcmVwb3J0X2V2ZW50cyhhcmdjLCBhcmd2LCAmbWVtKTsKIAllbHNlCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKaW5kZXggODY0OGM2ZC4uNDA0YWIzNCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwpAQCAtMTkwLDE2ICsxOTAsMzAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbnQgcHJvY2Vzc19zYW1wbGVfZXZlbnQoc3RydWN0IHBlcmZfdG9vbCAqdG9vbCwKKwkJCQl1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKKwkJCQlzdHJ1Y3QgcGVyZl9zYW1wbGUgKnNhbXBsZSwKKwkJCQlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCisJCQkJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCit7CisJc3RydWN0IHJlY29yZCAqcmVjID0gY29udGFpbmVyX29mKHRvb2wsIHN0cnVjdCByZWNvcmQsIHRvb2wpOworCisJcmVjLT5zYW1wbGVzKys7CisKKwlyZXR1cm4gYnVpbGRfaWRfX21hcmtfZHNvX2hpdCh0b29sLCBldmVudCwgc2FtcGxlLCBldnNlbCwgbWFjaGluZSk7Cit9CisKIHN0YXRpYyBpbnQgcHJvY2Vzc19idWlsZGlkcyhzdHJ1Y3QgcmVjb3JkICpyZWMpCiB7CiAJc3RydWN0IHBlcmZfZGF0YV9maWxlICpmaWxlICA9ICZyZWMtPmZpbGU7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiA9IHJlYy0+c2Vzc2lvbjsKLQl1NjQgc3RhcnQgPSBzZXNzaW9uLT5oZWFkZXIuZGF0YV9vZmZzZXQ7CiAKLQl1NjQgc2l6ZSA9IGxzZWVrKGZpbGUtPmZkLCAwLCBTRUVLX0NVUik7CisJdTY0IHNpemUgPSBsc2VlayhwZXJmX2RhdGFfZmlsZV9fZmQoZmlsZSksIDAsIFNFRUtfQ1VSKTsKIAlpZiAoc2l6ZSA9PSAwKQogCQlyZXR1cm4gMDsKIAorCWZpbGUtPnNpemUgPSBzaXplOworCiAJLyoKIAkgKiBEdXJpbmcgdGhpcyBwcm9jZXNzLCBpdCdsbCBsb2FkIGtlcm5lbCBtYXAgYW5kIHJlcGxhY2UgdGhlCiAJICogZHNvLT5sb25nX25hbWUgdG8gYSByZWFsIHBhdGhuYW1lIGl0IGZvdW5kLiAgSW4gdGhpcyBjYXNlCkBAIC0yMTEsOSArMjI1LDcgQEAKIAkgKi8KIAlzeW1ib2xfY29uZi5pZ25vcmVfdm1saW51eF9idWlsZGlkID0gdHJ1ZTsKIAotCXJldHVybiBfX3BlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc2Vzc2lvbiwgc3RhcnQsCi0JCQkJCSAgICAgIHNpemUgLSBzdGFydCwKLQkJCQkJICAgICAgc2l6ZSwgJmJ1aWxkX2lkX19tYXJrX2Rzb19oaXRfb3BzKTsKKwlyZXR1cm4gcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzZXNzaW9uLCAmcmVjLT50b29sKTsKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9ldmVudF9fc3ludGhlc2l6ZV9ndWVzdF9vcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgdm9pZCAqZGF0YSkKQEAgLTMyMiw2ICszMzQsNyBAQAogCXN0cnVjdCBwZXJmX2RhdGFfZmlsZSAqZmlsZSA9ICZyZWMtPmZpbGU7CiAJc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbjsKIAlib29sIGRpc2FibGVkID0gZmFsc2UsIGRyYWluaW5nID0gZmFsc2U7CisJaW50IGZkOwogCiAJcmVjLT5wcm9nbmFtZSA9IGFyZ3ZbMF07CiAKQEAgLTMzNiw2ICszNDksNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCisJZmQgPSBwZXJmX2RhdGFfZmlsZV9fZmQoZmlsZSk7CiAJcmVjLT5zZXNzaW9uID0gc2Vzc2lvbjsKIAogCXJlY29yZF9faW5pdF9mZWF0dXJlcyhyZWMpOwpAQCAtMzYwLDEyICszNzQsMTEgQEAKIAkJcGVyZl9oZWFkZXJfX2NsZWFyX2ZlYXQoJnNlc3Npb24tPmhlYWRlciwgSEVBREVSX0dST1VQX0RFU0MpOwogCiAJaWYgKGZpbGUtPmlzX3BpcGUpIHsKLQkJZXJyID0gcGVyZl9oZWFkZXJfX3dyaXRlX3BpcGUoZmlsZS0+ZmQpOworCQllcnIgPSBwZXJmX2hlYWRlcl9fd3JpdGVfcGlwZShmZCk7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBvdXRfY2hpbGQ7CiAJfSBlbHNlIHsKLQkJZXJyID0gcGVyZl9zZXNzaW9uX193cml0ZV9oZWFkZXIoc2Vzc2lvbiwgcmVjLT5ldmxpc3QsCi0JCQkJCQkgZmlsZS0+ZmQsIGZhbHNlKTsKKwkJZXJyID0gcGVyZl9zZXNzaW9uX193cml0ZV9oZWFkZXIoc2Vzc2lvbiwgcmVjLT5ldmxpc3QsIGZkLCBmYWxzZSk7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBvdXRfY2hpbGQ7CiAJfQpAQCAtMzk3LDcgKzQxMCw3IEBACiAJCQkgKiByZXR1cm4gdGhpcyBtb3JlIHByb3Blcmx5IGFuZCBhbHNvCiAJCQkgKiBwcm9wYWdhdGUgZXJyb3JzIHRoYXQgbm93IGFyZSBjYWxsaW5nIGRpZSgpCiAJCQkgKi8KLQkJCWVyciA9IHBlcmZfZXZlbnRfX3N5bnRoZXNpemVfdHJhY2luZ19kYXRhKHRvb2wsIGZpbGUtPmZkLCByZWMtPmV2bGlzdCwKKwkJCWVyciA9IHBlcmZfZXZlbnRfX3N5bnRoZXNpemVfdHJhY2luZ19kYXRhKHRvb2wsCWZkLCByZWMtPmV2bGlzdCwKIAkJCQkJCQkJICBwcm9jZXNzX3N5bnRoZXNpemVkX2V2ZW50KTsKIAkJCWlmIChlcnIgPD0gMCkgewogCQkJCXByX2VycigiQ291bGRuJ3QgcmVjb3JkIHRyYWNpbmcgZGF0YS5cbiIpOwpAQCAtNTA0LDE5ICs1MTcsOSBAQAogCQlnb3RvIG91dF9jaGlsZDsKIAl9CiAKLQlpZiAoIXF1aWV0KSB7CisJaWYgKCFxdWlldCkKIAkJZnByaW50ZihzdGRlcnIsICJbIHBlcmYgcmVjb3JkOiBXb2tlbiB1cCAlbGQgdGltZXMgdG8gd3JpdGUgZGF0YSBdXG4iLCB3YWtpbmcpOwogCi0JCS8qCi0JCSAqIEFwcHJveGltYXRlIFJJUCBldmVudCBzaXplOiAyNCBieXRlcy4KLQkJICovCi0JCWZwcmludGYoc3RkZXJyLAotCQkJIlsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSAlLjNmIE1CICVzICh+JSIgUFJJdTY0ICIgc2FtcGxlcykgXVxuIiwKLQkJCShkb3VibGUpcmVjLT5ieXRlc193cml0dGVuIC8gMTAyNC4wIC8gMTAyNC4wLAotCQkJZmlsZS0+cGF0aCwKLQkJCXJlYy0+Ynl0ZXNfd3JpdHRlbiAvIDI0KTsKLQl9Ci0KIG91dF9jaGlsZDoKIAlpZiAoZm9ya3MpIHsKIAkJaW50IGV4aXRfc3RhdHVzOwpAQCAtNTM1LDEzICs1MzgsMjkgQEAKIAl9IGVsc2UKIAkJc3RhdHVzID0gZXJyOwogCisJLyogdGhpcyB3aWxsIGJlIHJlY2FsY3VsYXRlZCBkdXJpbmcgcHJvY2Vzc19idWlsZGlkcygpICovCisJcmVjLT5zYW1wbGVzID0gMDsKKwogCWlmICghZXJyICYmICFmaWxlLT5pc19waXBlKSB7CiAJCXJlYy0+c2Vzc2lvbi0+aGVhZGVyLmRhdGFfc2l6ZSArPSByZWMtPmJ5dGVzX3dyaXR0ZW47CiAKIAkJaWYgKCFyZWMtPm5vX2J1aWxkaWQpCiAJCQlwcm9jZXNzX2J1aWxkaWRzKHJlYyk7Ci0JCXBlcmZfc2Vzc2lvbl9fd3JpdGVfaGVhZGVyKHJlYy0+c2Vzc2lvbiwgcmVjLT5ldmxpc3QsCi0JCQkJCSAgIGZpbGUtPmZkLCB0cnVlKTsKKwkJcGVyZl9zZXNzaW9uX193cml0ZV9oZWFkZXIocmVjLT5zZXNzaW9uLCByZWMtPmV2bGlzdCwgZmQsIHRydWUpOworCX0KKworCWlmICghZXJyICYmICFxdWlldCkgeworCQljaGFyIHNhbXBsZXNbMTI4XTsKKworCQlpZiAocmVjLT5zYW1wbGVzKQorCQkJc2NucHJpbnRmKHNhbXBsZXMsIHNpemVvZihzYW1wbGVzKSwKKwkJCQkgICIgKCUiIFBSSXU2NCAiIHNhbXBsZXMpIiwgcmVjLT5zYW1wbGVzKTsKKwkJZWxzZQorCQkJc2FtcGxlc1swXSA9ICdcMCc7CisKKwkJZnByaW50ZihzdGRlcnIsCSJbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgJS4zZiBNQiAlcyVzIF1cbiIsCisJCQlwZXJmX2RhdGFfZmlsZV9fc2l6ZShmaWxlKSAvIDEwMjQuMCAvIDEwMjQuMCwKKwkJCWZpbGUtPnBhdGgsIHNhbXBsZXMpOwogCX0KIAogb3V0X2RlbGV0ZV9zZXNzaW9uOgpAQCAtNzIwLDYgKzczOSwxMyBAQAogCQkJLmRlZmF1bHRfcGVyX2NwdSA9IHRydWUsCiAJCX0sCiAJfSwKKwkudG9vbCA9IHsKKwkJLnNhbXBsZQkJPSBwcm9jZXNzX3NhbXBsZV9ldmVudCwKKwkJLmZvcmsJCT0gcGVyZl9ldmVudF9fcHJvY2Vzc19mb3JrLAorCQkuY29tbQkJPSBwZXJmX2V2ZW50X19wcm9jZXNzX2NvbW0sCisJCS5tbWFwCQk9IHBlcmZfZXZlbnRfX3Byb2Nlc3NfbW1hcCwKKwkJLm1tYXAyCQk9IHBlcmZfZXZlbnRfX3Byb2Nlc3NfbW1hcDIsCisJfSwKIH07CiAKICNkZWZpbmUgQ0FMTENIQUlOX0hFTFAgInNldHVwIGFuZCBlbmFibGVzIGNhbGwtZ3JhcGggKHN0YWNrIGNoYWluL2JhY2t0cmFjZSkgcmVjb3JkaW5nOiAiCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKaW5kZXggMDcyYWU4YS4uMmY5MTA5NCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwpAQCAtODYsMTcgKzg2LDYgQEAKIAlyZXR1cm4gcGVyZl9kZWZhdWx0X2NvbmZpZyh2YXIsIHZhbHVlLCBjYik7CiB9CiAKLXN0YXRpYyB2b2lkIHJlcG9ydF9faW5jX3N0YXRzKHN0cnVjdCByZXBvcnQgKnJlcCwgc3RydWN0IGhpc3RfZW50cnkgKmhlKQotewotCS8qCi0JICogVGhlIEBoZSBpcyBlaXRoZXIgb2YgYSBuZXdseSBjcmVhdGVkIG9uZSBvciBhbiBleGlzdGluZyBvbmUKLQkgKiBtZXJnaW5nIGN1cnJlbnQgc2FtcGxlLiAgV2Ugb25seSB3YW50IHRvIGNvdW50IGEgbmV3IG9uZSBzbwotCSAqIGNoZWNraW5nIC0+bnJfZXZlbnRzIGJlaW5nIDEuCi0JICovCi0JaWYgKGhlLT5zdGF0Lm5yX2V2ZW50cyA9PSAxKQotCQlyZXAtPm5yX2VudHJpZXMrKzsKLX0KLQogc3RhdGljIGludCBoaXN0X2l0ZXJfX3JlcG9ydF9jYWxsYmFjayhzdHJ1Y3QgaGlzdF9lbnRyeV9pdGVyICppdGVyLAogCQkJCSAgICAgIHN0cnVjdCBhZGRyX2xvY2F0aW9uICphbCwgYm9vbCBzaW5nbGUsCiAJCQkJICAgICAgdm9pZCAqYXJnKQpAQCAtMTA4LDggKzk3LDYgQEAKIAlzdHJ1Y3QgbWVtX2luZm8gKm1pOwogCXN0cnVjdCBicmFuY2hfaW5mbyAqYmk7CiAKLQlyZXBvcnRfX2luY19zdGF0cyhyZXAsIGhlKTsKLQogCWlmICghdWlfX2hhc19hbm5vdGF0aW9uKCkpCiAJCXJldHVybiAwOwogCkBAIC00OTksNiArNDg2LDkgQEAKIAogCXJlcG9ydF9fd2Fybl9rcHRyX3Jlc3RyaWN0KHJlcCk7CiAKKwlldmxpc3RfX2Zvcl9lYWNoKHNlc3Npb24tPmV2bGlzdCwgcG9zKQorCQlyZXAtPm5yX2VudHJpZXMgKz0gZXZzZWxfX2hpc3RzKHBvcyktPm5yX2VudHJpZXM7CisKIAlpZiAodXNlX2Jyb3dzZXIgPT0gMCkgewogCQlpZiAodmVyYm9zZSA+IDMpCiAJCQlwZXJmX3Nlc3Npb25fX2ZwcmludGYoc2Vzc2lvbiwgc3Rkb3V0KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCmluZGV4IDg5MTA4NjMuLmU1OThlNGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwpAQCAtMTczMCw3ICsxNzMwLDcgQEAKIAkJICAgICJkZXRhaWxlZCBydW4gLSBzdGFydCBhIGxvdCBvZiBldmVudHMiKSwKIAlPUFRfQk9PTEVBTignUycsICJzeW5jIiwgJnN5bmNfcnVuLAogCQkgICAgImNhbGwgc3luYygpIGJlZm9yZSBzdGFydGluZyBhIHJ1biIpLAotCU9QVF9DQUxMQkFDS19OT09QVCgnQicsICJiaWctbnVtIiwgTlVMTCwgTlVMTCwgCisJT1BUX0NBTExCQUNLX05PT1BUKCdCJywgImJpZy1udW0iLCBOVUxMLCBOVUxMLAogCQkJICAgInByaW50IGxhcmdlIG51bWJlcnMgd2l0aCB0aG91c2FuZHNcJyBzZXBhcmF0b3JzIiwKIAkJCSAgIHN0YXRfX3NldF9iaWdfbnVtKSwKIAlPUFRfU1RSSU5HKCdDJywgImNwdSIsICZ0YXJnZXQuY3B1X2xpc3QsICJjcHUiLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IDYxNmYwZmMuLmM0YzdlYWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTE2NSw3ICsxNjUsNyBAQAogCQkgICAgZXJyID8gIlt1bmtub3duXSIgOiB1dHMucmVsZWFzZSwgcGVyZl92ZXJzaW9uX3N0cmluZyk7CiAJaWYgKHVzZV9icm93c2VyIDw9IDApCiAJCXNsZWVwKDUpOwotCQorCiAJbWFwLT5lcmFuZ2Vfd2FybmVkID0gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdHJhY2UuYwppbmRleCBiYWRmYWJjLi43ZTkzNWYxMCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXRyYWNlLmMKQEAgLTkyOSw2NiArOTI5LDY2IEBACiAJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0hFWCwgLyogYnJrICovIH0sIH0sCiAJeyAubmFtZSAgICAgPSAiY2xvY2tfZ2V0dGltZSIsICAuZXJybXNnID0gdHJ1ZSwgU1RSQVJSQVkoMCwgY2xrX2lkLCBjbG9ja2lkKSwgfSwKIAl7IC5uYW1lCSAgICA9ICJjbG9zZSIsCSAgICAuZXJybXNnID0gdHJ1ZSwKLQkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfQ0xPU0VfRkQsIC8qIGZkICovIH0sIH0sIAorCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9DTE9TRV9GRCwgLyogZmQgKi8gfSwgfSwKIAl7IC5uYW1lCSAgICA9ICJjb25uZWN0IiwgICAgLmVycm1zZyA9IHRydWUsIH0sCiAJeyAubmFtZQkgICAgPSAiZHVwIiwJICAgIC5lcnJtc2cgPSB0cnVlLAotCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwgCisJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gImR1cDIiLAkgICAgLmVycm1zZyA9IHRydWUsCi0JICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LCAKKwkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAiZHVwMyIsCSAgICAuZXJybXNnID0gdHJ1ZSwKLQkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sIAorCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwKIAl7IC5uYW1lCSAgICA9ICJlcG9sbF9jdGwiLCAgLmVycm1zZyA9IHRydWUsIFNUUkFSUkFZKDEsIG9wLCBlcG9sbF9jdGxfb3BzKSwgfSwKIAl7IC5uYW1lCSAgICA9ICJldmVudGZkMiIsICAgLmVycm1zZyA9IHRydWUsCiAJICAuYXJnX3NjbnByaW50ZiA9IHsgWzFdID0gU0NBX0VGRF9GTEFHUywgLyogZmxhZ3MgKi8gfSwgfSwKIAl7IC5uYW1lCSAgICA9ICJmYWNjZXNzYXQiLCAgLmVycm1zZyA9IHRydWUsCiAJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZEQVQsIC8qIGRmZCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gImZhZHZpc2U2NCIsICAuZXJybXNnID0gdHJ1ZSwKLQkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sIAorCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwKIAl7IC5uYW1lCSAgICA9ICJmYWxsb2NhdGUiLCAgLmVycm1zZyA9IHRydWUsCi0JICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LCAKKwkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAiZmNoZGlyIiwJICAgIC5lcnJtc2cgPSB0cnVlLAotCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwgCisJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gImZjaG1vZCIsCSAgICAuZXJybXNnID0gdHJ1ZSwKLQkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sIAorCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwKIAl7IC5uYW1lCSAgICA9ICJmY2htb2RhdCIsICAgLmVycm1zZyA9IHRydWUsCi0JICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZEQVQsIC8qIGZkICovIH0sIH0sIAorCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GREFULCAvKiBmZCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gImZjaG93biIsCSAgICAuZXJybXNnID0gdHJ1ZSwKLQkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sIAorCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwKIAl7IC5uYW1lCSAgICA9ICJmY2hvd25hdCIsICAgLmVycm1zZyA9IHRydWUsCi0JICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZEQVQsIC8qIGZkICovIH0sIH0sIAorCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GREFULCAvKiBmZCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gImZjbnRsIiwJICAgIC5lcnJtc2cgPSB0cnVlLAogCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8KIAkJCSAgICAgWzFdID0gU0NBX1NUUkFSUkFZLCAvKiBjbWQgKi8gfSwKIAkgIC5hcmdfcGFybQkgPSB7IFsxXSA9ICZzdHJhcnJheV9fZmNudGxfY21kcywgLyogY21kICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAiZmRhdGFzeW5jIiwgIC5lcnJtc2cgPSB0cnVlLAotCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwgCisJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gImZsb2NrIiwJICAgIC5lcnJtc2cgPSB0cnVlLAogCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8KIAkJCSAgICAgWzFdID0gU0NBX0ZMT0NLLCAvKiBjbWQgKi8gfSwgfSwKIAl7IC5uYW1lCSAgICA9ICJmc2V0eGF0dHIiLCAgLmVycm1zZyA9IHRydWUsCi0JICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LCAKKwkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAiZnN0YXQiLAkgICAgLmVycm1zZyA9IHRydWUsIC5hbGlhcyA9ICJuZXdmc3RhdCIsCi0JICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LCAKKwkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAiZnN0YXRhdCIsICAgIC5lcnJtc2cgPSB0cnVlLCAuYWxpYXMgPSAibmV3ZnN0YXRhdCIsCi0JICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZEQVQsIC8qIGRmZCAqLyB9LCB9LCAKKwkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkRBVCwgLyogZGZkICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAiZnN0YXRmcyIsICAgIC5lcnJtc2cgPSB0cnVlLAotCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwgCisJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gImZzeW5jIiwgICAgLmVycm1zZyA9IHRydWUsCi0JICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LCAKKwkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAiZnRydW5jYXRlIiwgLmVycm1zZyA9IHRydWUsCi0JICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LCAKKwkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAiZnV0ZXgiLAkgICAgLmVycm1zZyA9IHRydWUsCiAJICAuYXJnX3NjbnByaW50ZiA9IHsgWzFdID0gU0NBX0ZVVEVYX09QLCAvKiBvcCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gImZ1dGltZXNhdCIsIC5lcnJtc2cgPSB0cnVlLAotCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GREFULCAvKiBmZCAqLyB9LCB9LCAKKwkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkRBVCwgLyogZmQgKi8gfSwgfSwKIAl7IC5uYW1lCSAgICA9ICJnZXRkZW50cyIsICAgLmVycm1zZyA9IHRydWUsCi0JICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LCAKKwkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAiZ2V0ZGVudHM2NCIsIC5lcnJtc2cgPSB0cnVlLAotCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwgCisJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gImdldGl0aW1lciIsICAuZXJybXNnID0gdHJ1ZSwgU1RSQVJSQVkoMCwgd2hpY2gsIGl0aW1lcnMpLCB9LAogCXsgLm5hbWUJICAgID0gImdldHJsaW1pdCIsICAuZXJybXNnID0gdHJ1ZSwgU1RSQVJSQVkoMCwgcmVzb3VyY2UsIHJsaW1pdF9yZXNvdXJjZXMpLCB9LAogCXsgLm5hbWUJICAgID0gImlvY3RsIiwJICAgIC5lcnJtc2cgPSB0cnVlLAotCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gCisJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLwogI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKIC8qCiAgKiBGSVhNRTogTWFrZSB0aGlzIGF2YWlsYWJsZSB0byBhbGwgYXJjaGVzLgpAQCAtMTAwMiw3ICsxMDAyLDcgQEAKIAl7IC5uYW1lCSAgICA9ICJraWxsIiwJICAgIC5lcnJtc2cgPSB0cnVlLAogCSAgLmFyZ19zY25wcmludGYgPSB7IFsxXSA9IFNDQV9TSUdOVU0sIC8qIHNpZyAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gImxpbmthdCIsCSAgICAuZXJybXNnID0gdHJ1ZSwKLQkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkRBVCwgLyogZmQgKi8gfSwgfSwgCisJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZEQVQsIC8qIGZkICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAibHNlZWsiLAkgICAgLmVycm1zZyA9IHRydWUsCiAJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLwogCQkJICAgICBbMl0gPSBTQ0FfU1RSQVJSQVksIC8qIHdoZW5jZSAqLyB9LApAQCAtMTAxMiw5ICsxMDEyLDkgQEAKIAkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfSEVYLAkgLyogc3RhcnQgKi8KIAkJCSAgICAgWzJdID0gU0NBX01BRFZfQkhWLCAvKiBiZWhhdmlvciAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gIm1rZGlyYXQiLCAgICAuZXJybXNnID0gdHJ1ZSwKLQkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkRBVCwgLyogZmQgKi8gfSwgfSwgCisJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZEQVQsIC8qIGZkICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAibWtub2RhdCIsICAgIC5lcnJtc2cgPSB0cnVlLAotCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GREFULCAvKiBmZCAqLyB9LCB9LCAKKwkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkRBVCwgLyogZmQgKi8gfSwgfSwKIAl7IC5uYW1lCSAgICA9ICJtbG9jayIsCSAgICAuZXJybXNnID0gdHJ1ZSwKIAkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfSEVYLCAvKiBhZGRyICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAibWxvY2thbGwiLCAgIC5lcnJtc2cgPSB0cnVlLApAQCAtMTAzNiw5ICsxMDM2LDkgQEAKIAl7IC5uYW1lCSAgICA9ICJtdW5tYXAiLAkgICAgLmVycm1zZyA9IHRydWUsCiAJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0hFWCwgLyogYWRkciAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gIm5hbWVfdG9faGFuZGxlX2F0IiwgLmVycm1zZyA9IHRydWUsCi0JICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZEQVQsIC8qIGRmZCAqLyB9LCB9LCAKKwkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkRBVCwgLyogZGZkICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAibmV3ZnN0YXRhdCIsIC5lcnJtc2cgPSB0cnVlLAotCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GREFULCAvKiBkZmQgKi8gfSwgfSwgCisJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZEQVQsIC8qIGRmZCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gIm9wZW4iLAkgICAgLmVycm1zZyA9IHRydWUsCiAJICAuYXJnX3NjbnByaW50ZiA9IHsgWzFdID0gU0NBX09QRU5fRkxBR1MsIC8qIGZsYWdzICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAib3Blbl9ieV9oYW5kbGVfYXQiLCAuZXJybXNnID0gdHJ1ZSwKQEAgLTEwNTIsMjAgKzEwNTIsMjAgQEAKIAl7IC5uYW1lCSAgICA9ICJwb2xsIiwJICAgIC5lcnJtc2cgPSB0cnVlLCAudGltZW91dCA9IHRydWUsIH0sCiAJeyAubmFtZQkgICAgPSAicHBvbGwiLAkgICAgLmVycm1zZyA9IHRydWUsIC50aW1lb3V0ID0gdHJ1ZSwgfSwKIAl7IC5uYW1lCSAgICA9ICJwcmVhZCIsCSAgICAuZXJybXNnID0gdHJ1ZSwgLmFsaWFzID0gInByZWFkNjQiLAotCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwgCisJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gInByZWFkdiIsCSAgICAuZXJybXNnID0gdHJ1ZSwgLmFsaWFzID0gInByZWFkIiwKLQkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sIAorCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwKIAl7IC5uYW1lCSAgICA9ICJwcmxpbWl0NjQiLCAgLmVycm1zZyA9IHRydWUsIFNUUkFSUkFZKDEsIHJlc291cmNlLCBybGltaXRfcmVzb3VyY2VzKSwgfSwKIAl7IC5uYW1lCSAgICA9ICJwd3JpdGUiLAkgICAgLmVycm1zZyA9IHRydWUsIC5hbGlhcyA9ICJwd3JpdGU2NCIsCi0JICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LCAKKwkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAicHdyaXRldiIsICAgIC5lcnJtc2cgPSB0cnVlLAotCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwgCisJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gInJlYWQiLAkgICAgLmVycm1zZyA9IHRydWUsCi0JICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LCAKKwkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAicmVhZGxpbmthdCIsIC5lcnJtc2cgPSB0cnVlLAotCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GREFULCAvKiBkZmQgKi8gfSwgfSwgCisJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZEQVQsIC8qIGRmZCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gInJlYWR2IiwJICAgIC5lcnJtc2cgPSB0cnVlLAotCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwgCisJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gInJlY3Zmcm9tIiwgICAuZXJybXNnID0gdHJ1ZSwKIAkgIC5hcmdfc2NucHJpbnRmID0geyBbM10gPSBTQ0FfTVNHX0ZMQUdTLCAvKiBmbGFncyAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gInJlY3ZtbXNnIiwgICAuZXJybXNnID0gdHJ1ZSwKQEAgLTEwNzMsNyArMTA3Myw3IEBACiAJeyAubmFtZQkgICAgPSAicmVjdm1zZyIsICAgIC5lcnJtc2cgPSB0cnVlLAogCSAgLmFyZ19zY25wcmludGYgPSB7IFsyXSA9IFNDQV9NU0dfRkxBR1MsIC8qIGZsYWdzICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAicmVuYW1lYXQiLCAgIC5lcnJtc2cgPSB0cnVlLAotCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GREFULCAvKiBkZmQgKi8gfSwgfSwgCisJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZEQVQsIC8qIGRmZCAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gInJ0X3NpZ2FjdGlvbiIsIC5lcnJtc2cgPSB0cnVlLAogCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9TSUdOVU0sIC8qIHNpZyAqLyB9LCB9LAogCXsgLm5hbWUJICAgID0gInJ0X3NpZ3Byb2NtYXNrIiwgIC5lcnJtc2cgPSB0cnVlLCBTVFJBUlJBWSgwLCBob3csIHNpZ2hvdyksIH0sCkBAIC0xMDkxLDcgKzEwOTEsNyBAQAogCXsgLm5hbWUJICAgID0gInNldGl0aW1lciIsICAuZXJybXNnID0gdHJ1ZSwgU1RSQVJSQVkoMCwgd2hpY2gsIGl0aW1lcnMpLCB9LAogCXsgLm5hbWUJICAgID0gInNldHJsaW1pdCIsICAuZXJybXNnID0gdHJ1ZSwgU1RSQVJSQVkoMCwgcmVzb3VyY2UsIHJsaW1pdF9yZXNvdXJjZXMpLCB9LAogCXsgLm5hbWUJICAgID0gInNodXRkb3duIiwgICAuZXJybXNnID0gdHJ1ZSwKLQkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sIAorCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwKIAl7IC5uYW1lCSAgICA9ICJzb2NrZXQiLAkgICAgLmVycm1zZyA9IHRydWUsCiAJICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX1NUUkFSUkFZLCAvKiBmYW1pbHkgKi8KIAkJCSAgICAgWzFdID0gU0NBX1NLX1RZUEUsIC8qIHR5cGUgKi8gfSwKQEAgLTExMDIsNyArMTEwMiw3IEBACiAJICAuYXJnX3Bhcm0JID0geyBbMF0gPSAmc3RyYXJyYXlfX3NvY2tldF9mYW1pbGllcywgLyogZmFtaWx5ICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAic3RhdCIsCSAgICAuZXJybXNnID0gdHJ1ZSwgLmFsaWFzID0gIm5ld3N0YXQiLCB9LAogCXsgLm5hbWUJICAgID0gInN5bWxpbmthdCIsICAuZXJybXNnID0gdHJ1ZSwKLQkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkRBVCwgLyogZGZkICovIH0sIH0sIAorCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GREFULCAvKiBkZmQgKi8gfSwgfSwKIAl7IC5uYW1lCSAgICA9ICJ0Z2tpbGwiLAkgICAgLmVycm1zZyA9IHRydWUsCiAJICAuYXJnX3NjbnByaW50ZiA9IHsgWzJdID0gU0NBX1NJR05VTSwgLyogc2lnICovIH0sIH0sCiAJeyAubmFtZQkgICAgPSAidGtpbGwiLAkgICAgLmVycm1zZyA9IHRydWUsCkBAIC0xMTEzLDkgKzExMTMsOSBAQAogCXsgLm5hbWUJICAgID0gInV0aW1lbnNhdCIsICAuZXJybXNnID0gdHJ1ZSwKIAkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkRBVCwgLyogZGlyZmQgKi8gfSwgfSwKIAl7IC5uYW1lCSAgICA9ICJ3cml0ZSIsCSAgICAuZXJybXNnID0gdHJ1ZSwKLQkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sIAorCSAgLmFyZ19zY25wcmludGYgPSB7IFswXSA9IFNDQV9GRCwgLyogZmQgKi8gfSwgfSwKIAl7IC5uYW1lCSAgICA9ICJ3cml0ZXYiLAkgICAgLmVycm1zZyA9IHRydWUsCi0JICAuYXJnX3NjbnByaW50ZiA9IHsgWzBdID0gU0NBX0ZELCAvKiBmZCAqLyB9LCB9LCAKKwkgIC5hcmdfc2NucHJpbnRmID0geyBbMF0gPSBTQ0FfRkQsIC8qIGZkICovIH0sIH0sCiB9OwogCiBzdGF0aWMgaW50IHN5c2NhbGxfZm10X19jbXAoY29uc3Qgdm9pZCAqbmFtZSwgY29uc3Qgdm9pZCAqZm10cCkKQEAgLTExOTEsNyArMTE5MSw3IEBACiAKIAlpZiAodGhyZWFkX19wcml2KHRocmVhZCkgPT0gTlVMTCkKIAkJdGhyZWFkX19zZXRfcHJpdih0aHJlYWQsIHRocmVhZF90cmFjZV9fbmV3KCkpOwotCQkKKwogCWlmICh0aHJlYWRfX3ByaXYodGhyZWFkKSA9PSBOVUxMKQogCQlnb3RvIGZhaWw7CiAKQEAgLTIwNTYsMjMgKzIwNTYsMjQgQEAKIAlpZiAodHJhY2UtPnRyYWNlX3N5c2NhbGxzICYmCiAJICAgIHBlcmZfZXZsaXN0X19hZGRfc3lzY2FsbF9uZXd0cChldmxpc3QsIHRyYWNlX19zeXNfZW50ZXIsCiAJCQkJCSAgIHRyYWNlX19zeXNfZXhpdCkpCi0JCWdvdG8gb3V0X2Vycm9yX3RwOworCQlnb3RvIG91dF9lcnJvcl9yYXdfc3lzY2FsbHM7CiAKIAlpZiAodHJhY2UtPnRyYWNlX3N5c2NhbGxzKQogCQlwZXJmX2V2bGlzdF9fYWRkX3Zmc19nZXRuYW1lKGV2bGlzdCk7CiAKIAlpZiAoKHRyYWNlLT50cmFjZV9wZ2ZhdWx0cyAmIFRSQUNFX1BGTUFKKSAmJgotCSAgICBwZXJmX2V2bGlzdF9fYWRkX3BnZmF1bHQoZXZsaXN0LCBQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSikpCi0JCWdvdG8gb3V0X2Vycm9yX3RwOworCSAgICBwZXJmX2V2bGlzdF9fYWRkX3BnZmF1bHQoZXZsaXN0LCBQRVJGX0NPVU5UX1NXX1BBR0VfRkFVTFRTX01BSikpIHsKKwkJZ290byBvdXRfZXJyb3JfbWVtOworCX0KIAogCWlmICgodHJhY2UtPnRyYWNlX3BnZmF1bHRzICYgVFJBQ0VfUEZNSU4pICYmCiAJICAgIHBlcmZfZXZsaXN0X19hZGRfcGdmYXVsdChldmxpc3QsIFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFNfTUlOKSkKLQkJZ290byBvdXRfZXJyb3JfdHA7CisJCWdvdG8gb3V0X2Vycm9yX21lbTsKIAogCWlmICh0cmFjZS0+c2NoZWQgJiYKLQkJcGVyZl9ldmxpc3RfX2FkZF9uZXd0cChldmxpc3QsICJzY2hlZCIsICJzY2hlZF9zdGF0X3J1bnRpbWUiLAotCQkJCXRyYWNlX19zY2hlZF9zdGF0X3J1bnRpbWUpKQotCQlnb3RvIG91dF9lcnJvcl90cDsKKwkgICAgcGVyZl9ldmxpc3RfX2FkZF9uZXd0cChldmxpc3QsICJzY2hlZCIsICJzY2hlZF9zdGF0X3J1bnRpbWUiLAorCQkJCSAgIHRyYWNlX19zY2hlZF9zdGF0X3J1bnRpbWUpKQorCQlnb3RvIG91dF9lcnJvcl9zY2hlZF9zdGF0X3J1bnRpbWU7CiAKIAllcnIgPSBwZXJmX2V2bGlzdF9fY3JlYXRlX21hcHMoZXZsaXN0LCAmdHJhY2UtPm9wdHMudGFyZ2V0KTsKIAlpZiAoZXJyIDwgMCkgewpAQCAtMjIwMiw4ICsyMjAzLDEyIEBACiB7CiAJY2hhciBlcnJidWZbQlVGU0laXTsKIAotb3V0X2Vycm9yX3RwOgotCXBlcmZfZXZsaXN0X19zdHJlcnJvcl90cChldmxpc3QsIGVycm5vLCBlcnJidWYsIHNpemVvZihlcnJidWYpKTsKK291dF9lcnJvcl9zY2hlZF9zdGF0X3J1bnRpbWU6CisJZGVidWdmc19fc3RyZXJyb3Jfb3Blbl90cChlcnJubywgZXJyYnVmLCBzaXplb2YoZXJyYnVmKSwgInNjaGVkIiwgInNjaGVkX3N0YXRfcnVudGltZSIpOworCWdvdG8gb3V0X2Vycm9yOworCitvdXRfZXJyb3JfcmF3X3N5c2NhbGxzOgorCWRlYnVnZnNfX3N0cmVycm9yX29wZW5fdHAoZXJybm8sIGVycmJ1Ziwgc2l6ZW9mKGVycmJ1ZiksICJyYXdfc3lzY2FsbHMiLCAic3lzXyhlbnRlcnxleGl0KSIpOwogCWdvdG8gb3V0X2Vycm9yOwogCiBvdXRfZXJyb3JfbW1hcDoKQEAgLTIyMTcsNiArMjIyMiw5IEBACiAJZnByaW50Zih0cmFjZS0+b3V0cHV0LCAiJXNcbiIsIGVycmJ1Zik7CiAJZ290byBvdXRfZGVsZXRlX2V2bGlzdDsKIH0KK291dF9lcnJvcl9tZW06CisJZnByaW50Zih0cmFjZS0+b3V0cHV0LCAiTm90IGVub3VnaCBtZW1vcnkgdG8gcnVuIVxuIik7CisJZ290byBvdXRfZGVsZXRlX2V2bGlzdDsKIH0KIAogc3RhdGljIGludCB0cmFjZV9fcmVwbGF5KHN0cnVjdCB0cmFjZSAqdHJhY2UpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbmZpZy9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlCmluZGV4IDY0OGUzMWYuLmNjMjI0MDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvY29uZmlnL01ha2VmaWxlCkBAIC0xOTgsNiArMTk4LDcgQEAKIAlsaWJweXRob24tdmVyc2lvbgkJXAogCWxpYnNsYW5nCQkJXAogCWxpYnVud2luZAkJCVwKKwlwdGhyZWFkLWF0dHItc2V0YWZmaW5pdHktbnAJXAogCXN0YWNrcHJvdGVjdG9yLWFsbAkJXAogCXRpbWVyZmQJCQkJXAogCWxpYmR3LWR3YXJmLXVud2luZAkJXApAQCAtMjI2LDYgKzIyNyw3IEBACiAJbGliZWxmLWdldHBoZHJudW0JCVwKIAlsaWJlbGYtbW1hcAkJCVwKIAlsaWJweXRob24tdmVyc2lvbgkJXAorCXB0aHJlYWQtYXR0ci1zZXRhZmZpbml0eS1ucAlcCiAJc3RhY2twcm90ZWN0b3ItYWxsCQlcCiAJdGltZXJmZAkJCQlcCiAJbGlidW53aW5kLWRlYnVnLWZyYW1lCQlcCkBAIC0zMDEsNiArMzAzLDEwIEBACiAgIENGTEFHUyArPSAtREhBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQX1NVUFBPUlQKIGVuZGlmCiAKK2lmZXEgKCQoZmVhdHVyZS1wdGhyZWFkLWF0dHItc2V0YWZmaW5pdHktbnApLCAxKQorICBDRkxBR1MgKz0gLURIQVZFX1BUSFJFQURfQVRUUl9TRVRBRkZJTklUWV9OUAorZW5kaWYKKwogaWZuZGVmIE5PX0JJT05JQwogICAkKGNhbGwgZmVhdHVyZV9jaGVjayxiaW9uaWMpCiAgIGlmZXEgKCQoZmVhdHVyZS1iaW9uaWMpLCAxKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvTWFrZWZpbGUgYi90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy9NYWtlZmlsZQppbmRleCA1M2YxOWI1Li40MmFjMDVhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy9NYWtlZmlsZQpAQCAtMjUsNiArMjUsNyBAQAogCXRlc3QtbGlic2xhbmcuYmluCQlcCiAJdGVzdC1saWJ1bndpbmQuYmluCQlcCiAJdGVzdC1saWJ1bndpbmQtZGVidWctZnJhbWUuYmluCVwKKwl0ZXN0LXB0aHJlYWQtYXR0ci1zZXRhZmZpbml0eS1ucC5iaW4JXAogCXRlc3Qtc3RhY2twcm90ZWN0b3ItYWxsLmJpbglcCiAJdGVzdC10aW1lcmZkLmJpbgkJXAogCXRlc3QtbGliZHctZHdhcmYtdW53aW5kLmJpbglcCkBAIC00Nyw2ICs0OCw5IEBACiB0ZXN0LWhlbGxvLmJpbjoKIAkkKEJVSUxEKQogCit0ZXN0LXB0aHJlYWQtYXR0ci1zZXRhZmZpbml0eS1ucC5iaW46CisJJChCVUlMRCkgLVdlcnJvciAtbHB0aHJlYWQKKwogdGVzdC1zdGFja3Byb3RlY3Rvci1hbGwuYmluOgogCSQoQlVJTEQpIC1XZXJyb3IgLWZzdGFjay1wcm90ZWN0b3ItYWxsCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtYWxsLmMgYi90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLWNoZWNrcy90ZXN0LWFsbC5jCmluZGV4IDY1MmUwMDkuLjZkNGQwOTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtYWxsLmMKKysrIGIvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvdGVzdC1hbGwuYwpAQCAtOTcsNiArOTcsMTAgQEAKICMgaW5jbHVkZSAidGVzdC16bGliLmMiCiAjdW5kZWYgbWFpbgogCisjZGVmaW5lIG1haW4gbWFpbl90ZXN0X3B0aHJlYWRfYXR0cl9zZXRhZmZpbml0eV9ucAorIyBpbmNsdWRlICJ0ZXN0LXB0aHJlYWRfYXR0cl9zZXRhZmZpbml0eV9ucC5jIgorI3VuZGVmIG1haW4KKwogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKIAltYWluX3Rlc3RfbGlicHl0aG9uKCk7CkBAIC0xMjEsNiArMTI1LDcgQEAKIAltYWluX3Rlc3RfbGliZHdfZHdhcmZfdW53aW5kKCk7CiAJbWFpbl90ZXN0X3N5bmNfY29tcGFyZV9hbmRfc3dhcChhcmdjLCBhcmd2KTsKIAltYWluX3Rlc3RfemxpYigpOworCW1haW5fdGVzdF9wdGhyZWFkX2F0dHJfc2V0YWZmaW5pdHlfbnAoKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9jb25maWcvZmVhdHVyZS1jaGVja3MvdGVzdC1wdGhyZWFkLWF0dHItc2V0YWZmaW5pdHktbnAuYyBiL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtcHRocmVhZC1hdHRyLXNldGFmZmluaXR5LW5wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwZDNlYwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtY2hlY2tzL3Rlc3QtcHRocmVhZC1hdHRyLXNldGFmZmluaXR5LW5wLmMKQEAgLTAsMCArMSwxNCBAQAorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworaW50IG1haW4odm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKwlwdGhyZWFkX2F0dHJfdCB0aHJlYWRfYXR0cjsKKworCXB0aHJlYWRfYXR0cl9pbml0KCZ0aHJlYWRfYXR0cik7CisJLyogZG9uJ3QgY2FyZSBhYnQgZXhhY3QgYXJncywganVzdCB0aGUgQVBJIGl0c2VsZiBpbiBsaWJwdGhyZWFkICovCisJcmV0ID0gcHRocmVhZF9hdHRyX3NldGFmZmluaXR5X25wKCZ0aHJlYWRfYXR0ciwgMCwgTlVMTCk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYyBiL3Rvb2xzL3BlcmYvc2NyaXB0cy9wZXJsL1BlcmYtVHJhY2UtVXRpbC9Db250ZXh0LmMKaW5kZXggNzkwY2ViYS4uMjg0MzFkMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9zY3JpcHRzL3BlcmwvUGVyZi1UcmFjZS1VdGlsL0NvbnRleHQuYworKysgYi90b29scy9wZXJmL3NjcmlwdHMvcGVybC9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5jCkBAIC01LDcgKzUsMTAgQEAKICAqCUFOWSBDSEFOR0VTIE1BREUgSEVSRSBXSUxMIEJFIExPU1QhIAogICoKICAqLwotCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2lmbmRlZiBIQVNfQk9PTAorIyBkZWZpbmUgSEFTX0JPT0wgMQorI2VuZGlmCiAjbGluZSAxICJDb250ZXh0LnhzIgogLyoKICAqIENvbnRleHQueHMuICBYUyBpbnRlcmZhY2VzIGZvciBwZXJmIHNjcmlwdC4KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvYXR0ci5weSBiL3Rvb2xzL3BlcmYvdGVzdHMvYXR0ci5weQppbmRleCBjOWI0YjYyLi4xMDkxYmQ0NyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9hdHRyLnB5CisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvYXR0ci5weQpAQCAtMTA0LDcgKzEwNCw2IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNvbXBhcmVfZGF0YShzZWxmW3RdLCBvdGhlclt0XSk6CiAJCWxvZy53YXJuaW5nKCJleHBlY3RlZCAlcz0lcywgZ290ICVzIiAlICh0LCBzZWxmW3RdLCBvdGhlclt0XSkpCi0gICAgICAgICAgICAgICAgCiAKICMgVGVzdCBmaWxlIGRlc2NyaXB0aW9uIG5lZWRzIHRvIGhhdmUgZm9sbG93aW5nIHNlY3Rpb25zOgogIyBbY29uZmlnXQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19jdW11bGF0ZS5jIGIvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19jdW11bGF0ZS5jCmluZGV4IDhkMTEwZGUuLjE4NjE5OTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfY3VtdWxhdGUuYworKysgYi90b29scy9wZXJmL3Rlc3RzL2hpc3RzX2N1bXVsYXRlLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCQloZSA9IHJiX2VudHJ5KG5vZGUsIHN0cnVjdCBoaXN0X2VudHJ5LCByYl9ub2RlKTsKIAkJcmJfZXJhc2Uobm9kZSwgcm9vdF9vdXQpOwogCQlyYl9lcmFzZSgmaGUtPnJiX25vZGVfaW4sIHJvb3RfaW4pOwotCQloaXN0X2VudHJ5X19mcmVlKGhlKTsKKwkJaGlzdF9lbnRyeV9fZGVsZXRlKGhlKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfb3V0cHV0LmMgYi90b29scy9wZXJmL3Rlc3RzL2hpc3RzX291dHB1dC5jCmluZGV4IGY1NTQ3NjEuLmI1MmM5ZmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvaGlzdHNfb3V0cHV0LmMKKysrIGIvdG9vbHMvcGVyZi90ZXN0cy9oaXN0c19vdXRwdXQuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJCWhlID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwogCQlyYl9lcmFzZShub2RlLCByb290X291dCk7CiAJCXJiX2VyYXNlKCZoZS0+cmJfbm9kZV9pbiwgcm9vdF9pbik7Ci0JCWhpc3RfZW50cnlfX2ZyZWUoaGUpOworCQloaXN0X2VudHJ5X19kZWxldGUoaGUpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9tYWtlIGIvdG9vbHMvcGVyZi90ZXN0cy9tYWtlCmluZGV4IDY5YTcxZmYuLjc1NzA5ZDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdGVzdHMvbWFrZQorKysgYi90b29scy9wZXJmL3Rlc3RzL21ha2UKQEAgLTIyMiw3ICsyMjIsNiBAQAogCUBjbWQ9IiQoUEVSRikvdGVzdHMvcGVyZi10YXJnei1zcmMtcGtnICQoUEVSRikiOyBcCiAJZWNobyAiLSAkQDogJCRjbWQiICYmIGVjaG8gJCRjbWQgPiAkQCAmJiBcCiAJKCBldmFsICQkY21kICkgPj4gJEAgMj4mMQotCQogCiBhbGw6ICQocnVuKSAkKHJ1bl9PKSB0YXJwa2cKIAlAZWNobyBPSwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi90ZXN0cy9wYXJzZS1ldmVudHMuYyBiL3Rvb2xzL3BlcmYvdGVzdHMvcGFyc2UtZXZlbnRzLmMKaW5kZXggN2YyZjUxZi4uMWNkYWIwYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3Rlc3RzL3BhcnNlLWV2ZW50cy5jCkBAIC0xMTQ1LDYgKzExNDUsNDkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB0ZXN0X19jaGVja2V2ZW50X2JyZWFrcG9pbnRfbGVuKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQoreworCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCA9IHBlcmZfZXZsaXN0X19maXJzdChldmxpc3QpOworCisJVEVTVF9BU1NFUlRfVkFMKCJ3cm9uZyBudW1iZXIgb2YgZW50cmllcyIsIDEgPT0gZXZsaXN0LT5ucl9lbnRyaWVzKTsKKwlURVNUX0FTU0VSVF9WQUwoIndyb25nIHR5cGUiLCBQRVJGX1RZUEVfQlJFQUtQT0lOVCA9PSBldnNlbC0+YXR0ci50eXBlKTsKKwlURVNUX0FTU0VSVF9WQUwoIndyb25nIGNvbmZpZyIsIDAgPT0gZXZzZWwtPmF0dHIuY29uZmlnKTsKKwlURVNUX0FTU0VSVF9WQUwoIndyb25nIGJwX3R5cGUiLCAoSFdfQlJFQUtQT0lOVF9SIHwgSFdfQlJFQUtQT0lOVF9XKSA9PQorCQkJCQkgZXZzZWwtPmF0dHIuYnBfdHlwZSk7CisJVEVTVF9BU1NFUlRfVkFMKCJ3cm9uZyBicF9sZW4iLCBIV19CUkVBS1BPSU5UX0xFTl8xID09CisJCQkJCWV2c2VsLT5hdHRyLmJwX2xlbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZXN0X19jaGVja2V2ZW50X2JyZWFrcG9pbnRfbGVuX3coc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCit7CisJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsID0gcGVyZl9ldmxpc3RfX2ZpcnN0KGV2bGlzdCk7CisKKwlURVNUX0FTU0VSVF9WQUwoIndyb25nIG51bWJlciBvZiBlbnRyaWVzIiwgMSA9PSBldmxpc3QtPm5yX2VudHJpZXMpOworCVRFU1RfQVNTRVJUX1ZBTCgid3JvbmcgdHlwZSIsIFBFUkZfVFlQRV9CUkVBS1BPSU5UID09IGV2c2VsLT5hdHRyLnR5cGUpOworCVRFU1RfQVNTRVJUX1ZBTCgid3JvbmcgY29uZmlnIiwgMCA9PSBldnNlbC0+YXR0ci5jb25maWcpOworCVRFU1RfQVNTRVJUX1ZBTCgid3JvbmcgYnBfdHlwZSIsIEhXX0JSRUFLUE9JTlRfVyA9PQorCQkJCQkgZXZzZWwtPmF0dHIuYnBfdHlwZSk7CisJVEVTVF9BU1NFUlRfVkFMKCJ3cm9uZyBicF9sZW4iLCBIV19CUkVBS1BPSU5UX0xFTl8yID09CisJCQkJCWV2c2VsLT5hdHRyLmJwX2xlbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAordGVzdF9fY2hlY2tldmVudF9icmVha3BvaW50X2xlbl9yd19tb2RpZmllcihzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCkKK3sKKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwgPSBwZXJmX2V2bGlzdF9fZmlyc3QoZXZsaXN0KTsKKworCVRFU1RfQVNTRVJUX1ZBTCgid3JvbmcgZXhjbHVkZV91c2VyIiwgIWV2c2VsLT5hdHRyLmV4Y2x1ZGVfdXNlcik7CisJVEVTVF9BU1NFUlRfVkFMKCJ3cm9uZyBleGNsdWRlX2tlcm5lbCIsIGV2c2VsLT5hdHRyLmV4Y2x1ZGVfa2VybmVsKTsKKwlURVNUX0FTU0VSVF9WQUwoIndyb25nIGV4Y2x1ZGVfaHYiLCBldnNlbC0+YXR0ci5leGNsdWRlX2h2KTsKKwlURVNUX0FTU0VSVF9WQUwoIndyb25nIHByZWNpc2VfaXAiLCAhZXZzZWwtPmF0dHIucHJlY2lzZV9pcCk7CisKKwlyZXR1cm4gdGVzdF9fY2hlY2tldmVudF9icmVha3BvaW50X3J3KGV2bGlzdCk7Cit9CisKIHN0YXRpYyBpbnQgY291bnRfdHJhY2Vwb2ludHModm9pZCkKIHsKIAljaGFyIGV2ZW50c19wYXRoW1BBVEhfTUFYXTsKQEAgLTE0MjAsNiArMTQ2MywyMSBAQAogCQkuY2hlY2sgPSB0ZXN0X19waW5uZWRfZ3JvdXAsCiAJCS5pZCAgICA9IDQxLAogCX0sCisJeworCQkubmFtZSAgPSAibWVtOjAvMSIsCisJCS5jaGVjayA9IHRlc3RfX2NoZWNrZXZlbnRfYnJlYWtwb2ludF9sZW4sCisJCS5pZCAgICA9IDQyLAorCX0sCisJeworCQkubmFtZSAgPSAibWVtOjAvMjp3IiwKKwkJLmNoZWNrID0gdGVzdF9fY2hlY2tldmVudF9icmVha3BvaW50X2xlbl93LAorCQkuaWQgICAgPSA0MywKKwl9LAorCXsKKwkJLm5hbWUgID0gIm1lbTowLzQ6cnc6dSIsCisJCS5jaGVjayA9IHRlc3RfX2NoZWNrZXZlbnRfYnJlYWtwb2ludF9sZW5fcndfbW9kaWZpZXIsCisJCS5pZCAgICA9IDQ0CisJfSwKICNpZiBkZWZpbmVkKF9fczM5MHhfXykKIAl7CiAJCS5uYW1lICA9ICJrdm0tczM5MDprdm1fczM5MF9jcmVhdGVfdm0iLApAQCAtMTQ3MSw3ICsxNTI5LDcgQEAKIAl9IGVsc2UgewogCQlyZXQgPSBlLT5jaGVjayhldmxpc3QpOwogCX0KLQkKKwogCXBlcmZfZXZsaXN0X19kZWxldGUoZXZsaXN0KTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3Rlc3RzL3NhbXBsZS1wYXJzaW5nLmMgYi90b29scy9wZXJmL3Rlc3RzL3NhbXBsZS1wYXJzaW5nLmMKaW5kZXggNDkwOGM2NC4uMzBjMDIxOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi90ZXN0cy9zYW1wbGUtcGFyc2luZy5jCisrKyBiL3Rvb2xzL3BlcmYvdGVzdHMvc2FtcGxlLXBhcnNpbmcuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAKIAlpZiAodHlwZSAmIFBFUkZfU0FNUExFX1NUQUNLX1VTRVIpIHsKIAkJQ09NUCh1c2VyX3N0YWNrLnNpemUpOwotCQlpZiAobWVtY21wKHMxLT51c2VyX3N0YWNrLmRhdGEsIHMxLT51c2VyX3N0YWNrLmRhdGEsCisJCWlmIChtZW1jbXAoczEtPnVzZXJfc3RhY2suZGF0YSwgczItPnVzZXJfc3RhY2suZGF0YSwKIAkJCSAgIHMxLT51c2VyX3N0YWNrLnNpemUpKSB7CiAJCQlwcl9kZWJ1ZygiU2FtcGxlcyBkaWZmZXIgYXQgJ3VzZXJfc3RhY2snXG4iKTsKIAkJCXJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvYnJvd3NlcnMvYW5ub3RhdGUuYyBiL3Rvb2xzL3BlcmYvdWkvYnJvd3NlcnMvYW5ub3RhdGUuYwppbmRleCAxZTBhMmZkLi45ZDMyZTNjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMKKysrIGIvdG9vbHMvcGVyZi91aS9icm93c2Vycy9hbm5vdGF0ZS5jCkBAIC01MTcsNyArNTE3LDcgQEAKIAl9CiAKIAlhbm5vdGF0ZV9icm93c2VyX19zZXRfdG9wKGJyb3dzZXIsIGRsLCBpZHgpOwotCQorCiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTg2Nyw3ICs4NjcsNiBAQAogCiAJCSsrYnJvd3Nlci0+bnJfanVtcHM7CiAJfQotCQkKIH0KIAogc3RhdGljIGlubGluZSBpbnQgd2lkdGhfanVtcHMoaW50IG4pCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL2hpc3QuYyBiL3Rvb2xzL3BlcmYvdWkvaGlzdC5jCmluZGV4IDQ4MmFkYWUuLjI1ZDYwODMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvaGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdWkvaGlzdC5jCkBAIC0yODUsNyArMjg1LDggQEAKIH0KIAogI2RlZmluZSBfX0hQUF9TT1JUX0ZOKF90eXBlLCBfZmllbGQpCQkJCQkJXAotc3RhdGljIGludDY0X3QgaHBwX19zb3J0XyMjX3R5cGUoc3RydWN0IGhpc3RfZW50cnkgKmEsIHN0cnVjdCBoaXN0X2VudHJ5ICpiKQlcCitzdGF0aWMgaW50NjRfdCBocHBfX3NvcnRfIyNfdHlwZShzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQgX19tYXliZV91bnVzZWQsIAlcCisJCQkJIHN0cnVjdCBoaXN0X2VudHJ5ICphLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqYikgCVwKIHsJCQkJCQkJCQkJXAogCXJldHVybiBfX2hwcF9fc29ydChhLCBiLCBoZV9nZXRfIyNfZmllbGQpOwkJCQlcCiB9CkBAIC0zMTIsNyArMzEzLDggQEAKIH0KIAogI2RlZmluZSBfX0hQUF9TT1JUX0FDQ19GTihfdHlwZSwgX2ZpZWxkKQkJCQkJXAotc3RhdGljIGludDY0X3QgaHBwX19zb3J0XyMjX3R5cGUoc3RydWN0IGhpc3RfZW50cnkgKmEsIHN0cnVjdCBoaXN0X2VudHJ5ICpiKQlcCitzdGF0aWMgaW50NjRfdCBocHBfX3NvcnRfIyNfdHlwZShzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQgX19tYXliZV91bnVzZWQsIAlcCisJCQkJIHN0cnVjdCBoaXN0X2VudHJ5ICphLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqYikgCVwKIHsJCQkJCQkJCQkJXAogCXJldHVybiBfX2hwcF9fc29ydF9hY2MoYSwgYiwgaGVfZ2V0X2FjY18jI19maWVsZCk7CQkJXAogfQpAQCAtMzMxLDcgKzMzMyw4IEBACiB9CiAKICNkZWZpbmUgX19IUFBfU09SVF9SQVdfRk4oX3R5cGUsIF9maWVsZCkJCQkJCVwKLXN0YXRpYyBpbnQ2NF90IGhwcF9fc29ydF8jI190eXBlKHN0cnVjdCBoaXN0X2VudHJ5ICphLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqYikJXAorc3RhdGljIGludDY0X3QgaHBwX19zb3J0XyMjX3R5cGUoc3RydWN0IHBlcmZfaHBwX2ZtdCAqZm10IF9fbWF5YmVfdW51c2VkLCAJXAorCQkJCSBzdHJ1Y3QgaGlzdF9lbnRyeSAqYSwgc3RydWN0IGhpc3RfZW50cnkgKmIpIAlcCiB7CQkJCQkJCQkJCVwKIAlyZXR1cm4gX19ocHBfX3NvcnQoYSwgYiwgaGVfZ2V0X3Jhd18jI19maWVsZCk7CQkJCVwKIH0KQEAgLTM2MSw3ICszNjQsOCBAQAogSFBQX1JBV19GTlMoc2FtcGxlcywgbnJfZXZlbnRzKQogSFBQX1JBV19GTlMocGVyaW9kLCBwZXJpb2QpCiAKLXN0YXRpYyBpbnQ2NF90IGhwcF9fbm9wX2NtcChzdHJ1Y3QgaGlzdF9lbnRyeSAqYSBfX21heWJlX3VudXNlZCwKK3N0YXRpYyBpbnQ2NF90IGhwcF9fbm9wX2NtcChzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQgX19tYXliZV91bnVzZWQsCisJCQkgICAgc3RydWN0IGhpc3RfZW50cnkgKmEgX19tYXliZV91bnVzZWQsCiAJCQkgICAgc3RydWN0IGhpc3RfZW50cnkgKmIgX19tYXliZV91bnVzZWQpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3VpL3Byb2dyZXNzLmggYi90b29scy9wZXJmL3VpL3Byb2dyZXNzLmgKaW5kZXggZjM0Zjg5ZS4uNzE3ZDM5ZCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS9wcm9ncmVzcy5oCisrKyBiL3Rvb2xzL3BlcmYvdWkvcHJvZ3Jlc3MuaApAQCAtNCwxMiArNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIHZvaWQgdWlfcHJvZ3Jlc3NfX2ZpbmlzaCh2b2lkKTsKLSAKKwogc3RydWN0IHVpX3Byb2dyZXNzIHsKIAljb25zdCBjaGFyICp0aXRsZTsKIAl1NjQgY3VyciwgbmV4dCwgc3RlcCwgdG90YWw7CiB9OwotIAorCiB2b2lkIHVpX3Byb2dyZXNzX19pbml0KHN0cnVjdCB1aV9wcm9ncmVzcyAqcCwgdTY0IHRvdGFsLCBjb25zdCBjaGFyICp0aXRsZSk7CiB2b2lkIHVpX3Byb2dyZXNzX191cGRhdGUoc3RydWN0IHVpX3Byb2dyZXNzICpwLCB1NjQgYWR2KTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91aS90dWkvaGVscGxpbmUuYyBiL3Rvb2xzL3BlcmYvdWkvdHVpL2hlbHBsaW5lLmMKaW5kZXggMWM4YjlhZi4uODhmNTE0MyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91aS90dWkvaGVscGxpbmUuYworKysgYi90b29scy9wZXJmL3VpL3R1aS9oZWxwbGluZS5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgIi4uL2xpYnNsYW5nLmgiCiAKIGNoYXIgdWlfaGVscGxpbmVfX2xhc3RfbXNnWzEwMjRdOworYm9vbCB0dWlfaGVscGxpbmVfX3NldDsKIAogc3RhdGljIHZvaWQgdHVpX2hlbHBsaW5lX19wb3Aodm9pZCkKIHsKQEAgLTM1LDYgKzM2LDggQEAKIAkJCXNpemVvZih1aV9oZWxwbGluZV9fbGFzdF9tc2cpIC0gYmFja2xvZywgZm9ybWF0LCBhcCk7CiAJYmFja2xvZyArPSByZXQ7CiAKKwl0dWlfaGVscGxpbmVfX3NldCA9IHRydWU7CisKIAlpZiAodWlfaGVscGxpbmVfX2xhc3RfbXNnW2JhY2tsb2cgLSAxXSA9PSAnXG4nKSB7CiAJCXVpX2hlbHBsaW5lX19wdXRzKHVpX2hlbHBsaW5lX19sYXN0X21zZyk7CiAJCVNMc21nX3JlZnJlc2goKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdWkvdHVpL3NldHVwLmMgYi90b29scy9wZXJmL3VpL3R1aS9zZXR1cC5jCmluZGV4IDNjMzhmMjUuLmI3N2UxZDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdWkvdHVpL3NldHVwLmMKKysrIGIvdG9vbHMvcGVyZi91aS90dWkvc2V0dXAuYwpAQCAtMTcsNiArMTcsNyBAQAogc3RhdGljIHZvbGF0aWxlIGludCB1aV9fbmVlZF9yZXNpemU7CiAKIGV4dGVybiBzdHJ1Y3QgcGVyZl9lcnJvcl9vcHMgcGVyZl90dWlfZW9wczsKK2V4dGVybiBib29sIHR1aV9oZWxwbGluZV9fc2V0OwogCiBleHRlcm4gdm9pZCBoaXN0X2Jyb3dzZXJfX2luaXRfaHBwKHZvaWQpOwogCkBAIC0xNTksNyArMTYwLDcgQEAKIAogdm9pZCB1aV9fZXhpdChib29sIHdhaXRfZm9yX29rKQogewotCWlmICh3YWl0X2Zvcl9vaykKKwlpZiAod2FpdF9mb3Jfb2sgJiYgdHVpX2hlbHBsaW5lX19zZXQpCiAJCXVpX19xdWVzdGlvbl93aW5kb3coIkZhdGFsIEVycm9yIiwKIAkJCQkgICAgdWlfaGVscGxpbmVfX2xhc3RfbXNnLAogCQkJCSAgICAiUHJlc3MgYW55IGtleS4uLiIsIDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Fubm90YXRlLmMgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYwppbmRleCA3OTk5OWNlLi42MWJmOTEyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL3V0aWwvYW5ub3RhdGUuYwpAQCAtMTc3LDE0ICsxNzcsMTcgQEAKIAkJZ290byBvdXRfZnJlZV9vcHM7CiAKIAlvcHMtPmxvY2tlZC5pbnMgPSBpbnNfX2ZpbmQobmFtZSk7CisJZnJlZShuYW1lKTsKKwogCWlmIChvcHMtPmxvY2tlZC5pbnMgPT0gTlVMTCkKIAkJZ290byBvdXRfZnJlZV9vcHM7CiAKIAlpZiAoIW9wcy0+bG9ja2VkLmlucy0+b3BzKQogCQlyZXR1cm4gMDsKIAotCWlmIChvcHMtPmxvY2tlZC5pbnMtPm9wcy0+cGFyc2UpCi0JCW9wcy0+bG9ja2VkLmlucy0+b3BzLT5wYXJzZShvcHMtPmxvY2tlZC5vcHMpOworCWlmIChvcHMtPmxvY2tlZC5pbnMtPm9wcy0+cGFyc2UgJiYKKwkgICAgb3BzLT5sb2NrZWQuaW5zLT5vcHMtPnBhcnNlKG9wcy0+bG9ja2VkLm9wcykgPCAwKQorCQlnb3RvIG91dF9mcmVlX29wczsKIAogCXJldHVybiAwOwogCkBAIC0yMDgsNiArMjExLDEzIEBACiAKIHN0YXRpYyB2b2lkIGxvY2tfX2RlbGV0ZShzdHJ1Y3QgaW5zX29wZXJhbmRzICpvcHMpCiB7CisJc3RydWN0IGlucyAqaW5zID0gb3BzLT5sb2NrZWQuaW5zOworCisJaWYgKGlucyAmJiBpbnMtPm9wcy0+ZnJlZSkKKwkJaW5zLT5vcHMtPmZyZWUob3BzLT5sb2NrZWQub3BzKTsKKwllbHNlCisJCWluc19fZGVsZXRlKG9wcy0+bG9ja2VkLm9wcyk7CisKIAl6ZnJlZSgmb3BzLT5sb2NrZWQub3BzKTsKIAl6ZnJlZSgmb3BzLT50YXJnZXQucmF3KTsKIAl6ZnJlZSgmb3BzLT50YXJnZXQubmFtZSk7CkBAIC0yMjksNyArMjM5LDcgQEAKIAkqcyA9ICdcMCc7CiAJb3BzLT5zb3VyY2UucmF3ID0gc3RyZHVwKG9wcy0+cmF3KTsKIAkqcyA9ICcsJzsKLQkKKwogCWlmIChvcHMtPnNvdXJjZS5yYXcgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCkBAIC01MzEsOCArNTQxLDggQEAKIAlpZiAoIWRsLT5pbnMtPm9wcykKIAkJcmV0dXJuOwogCi0JaWYgKGRsLT5pbnMtPm9wcy0+cGFyc2UpCi0JCWRsLT5pbnMtPm9wcy0+cGFyc2UoJmRsLT5vcHMpOworCWlmIChkbC0+aW5zLT5vcHMtPnBhcnNlICYmIGRsLT5pbnMtPm9wcy0+cGFyc2UoJmRsLT5vcHMpIDwgMCkKKwkJZGwtPmlucyA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgZGlzYXNtX2xpbmVfX3BhcnNlKGNoYXIgKmxpbmUsIGNoYXIgKipuYW1lcCwgY2hhciAqKnJhd3ApCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvY29sb3IuYyBiL3Rvb2xzL3BlcmYvdXRpbC9jb2xvci5jCmluZGV4IGY0NjU0MTguLjU1MzU1YjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9jb2xvci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9jb2xvci5jCkBAIC01LDEzMiArNSw2IEBACiAKIGludCBwZXJmX3VzZV9jb2xvcl9kZWZhdWx0ID0gLTE7CiAKLXN0YXRpYyBpbnQgcGFyc2VfY29sb3IoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbikKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGNvbG9yX25hbWVzW10gPSB7Ci0JCSJub3JtYWwiLCAiYmxhY2siLCAicmVkIiwgImdyZWVuIiwgInllbGxvdyIsCi0JCSJibHVlIiwgIm1hZ2VudGEiLCAiY3lhbiIsICJ3aGl0ZSIKLQl9OwotCWNoYXIgKmVuZDsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAoaW50KUFSUkFZX1NJWkUoY29sb3JfbmFtZXMpOyBpKyspIHsKLQkJY29uc3QgY2hhciAqc3RyID0gY29sb3JfbmFtZXNbaV07Ci0JCWlmICghc3RybmNhc2VjbXAobmFtZSwgc3RyLCBsZW4pICYmICFzdHJbbGVuXSkKLQkJCXJldHVybiBpIC0gMTsKLQl9Ci0JaSA9IHN0cnRvbChuYW1lLCAmZW5kLCAxMCk7Ci0JaWYgKGVuZCAtIG5hbWUgPT0gbGVuICYmIGkgPj0gLTEgJiYgaSA8PSAyNTUpCi0JCXJldHVybiBpOwotCXJldHVybiAtMjsKLX0KLQotc3RhdGljIGludCBwYXJzZV9hdHRyKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4pCi17Ci0Jc3RhdGljIGNvbnN0IGludCBhdHRyX3ZhbHVlc1tdID0geyAxLCAyLCA0LCA1LCA3IH07Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhdHRyX25hbWVzW10gPSB7Ci0JCSJib2xkIiwgImRpbSIsICJ1bCIsICJibGluayIsICJyZXZlcnNlIgotCX07Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdHRyX25hbWVzKTsgaSsrKSB7Ci0JCWNvbnN0IGNoYXIgKnN0ciA9IGF0dHJfbmFtZXNbaV07Ci0JCWlmICghc3RybmNhc2VjbXAobmFtZSwgc3RyLCBsZW4pICYmICFzdHJbbGVuXSkKLQkJCXJldHVybiBhdHRyX3ZhbHVlc1tpXTsKLQl9Ci0JcmV0dXJuIC0xOwotfQotCi12b2lkIGNvbG9yX3BhcnNlKGNvbnN0IGNoYXIgKnZhbHVlLCBjb25zdCBjaGFyICp2YXIsIGNoYXIgKmRzdCkKLXsKLQljb2xvcl9wYXJzZV9tZW0odmFsdWUsIHN0cmxlbih2YWx1ZSksIHZhciwgZHN0KTsKLX0KLQotdm9pZCBjb2xvcl9wYXJzZV9tZW0oY29uc3QgY2hhciAqdmFsdWUsIGludCB2YWx1ZV9sZW4sIGNvbnN0IGNoYXIgKnZhciwKLQkJY2hhciAqZHN0KQotewotCWNvbnN0IGNoYXIgKnB0ciA9IHZhbHVlOwotCWludCBsZW4gPSB2YWx1ZV9sZW47Ci0JaW50IGF0dHIgPSAtMTsKLQlpbnQgZmcgPSAtMjsKLQlpbnQgYmcgPSAtMjsKLQotCWlmICghc3RybmNhc2VjbXAodmFsdWUsICJyZXNldCIsIGxlbikpIHsKLQkJc3RyY3B5KGRzdCwgUEVSRl9DT0xPUl9SRVNFVCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBbZmcgW2JnXV0gW2F0dHJdICovCi0Jd2hpbGUgKGxlbiA+IDApIHsKLQkJY29uc3QgY2hhciAqd29yZCA9IHB0cjsKLQkJaW50IHZhbCwgd29yZGxlbiA9IDA7Ci0KLQkJd2hpbGUgKGxlbiA+IDAgJiYgIWlzc3BhY2Uod29yZFt3b3JkbGVuXSkpIHsKLQkJCXdvcmRsZW4rKzsKLQkJCWxlbi0tOwotCQl9Ci0KLQkJcHRyID0gd29yZCArIHdvcmRsZW47Ci0JCXdoaWxlIChsZW4gPiAwICYmIGlzc3BhY2UoKnB0cikpIHsKLQkJCXB0cisrOwotCQkJbGVuLS07Ci0JCX0KLQotCQl2YWwgPSBwYXJzZV9jb2xvcih3b3JkLCB3b3JkbGVuKTsKLQkJaWYgKHZhbCA+PSAtMSkgewotCQkJaWYgKGZnID09IC0yKSB7Ci0JCQkJZmcgPSB2YWw7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoYmcgPT0gLTIpIHsKLQkJCQliZyA9IHZhbDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWdvdG8gYmFkOwotCQl9Ci0JCXZhbCA9IHBhcnNlX2F0dHIod29yZCwgd29yZGxlbik7Ci0JCWlmICh2YWwgPCAwIHx8IGF0dHIgIT0gLTEpCi0JCQlnb3RvIGJhZDsKLQkJYXR0ciA9IHZhbDsKLQl9Ci0KLQlpZiAoYXR0ciA+PSAwIHx8IGZnID49IDAgfHwgYmcgPj0gMCkgewotCQlpbnQgc2VwID0gMDsKLQotCQkqZHN0KysgPSAnXDAzMyc7Ci0JCSpkc3QrKyA9ICdbJzsKLQkJaWYgKGF0dHIgPj0gMCkgewotCQkJKmRzdCsrID0gJzAnICsgYXR0cjsKLQkJCXNlcCsrOwotCQl9Ci0JCWlmIChmZyA+PSAwKSB7Ci0JCQlpZiAoc2VwKyspCi0JCQkJKmRzdCsrID0gJzsnOwotCQkJaWYgKGZnIDwgOCkgewotCQkJCSpkc3QrKyA9ICczJzsKLQkJCQkqZHN0KysgPSAnMCcgKyBmZzsKLQkJCX0gZWxzZSB7Ci0JCQkJZHN0ICs9IHNwcmludGYoZHN0LCAiMzg7NTslZCIsIGZnKTsKLQkJCX0KLQkJfQotCQlpZiAoYmcgPj0gMCkgewotCQkJaWYgKHNlcCsrKQotCQkJCSpkc3QrKyA9ICc7JzsKLQkJCWlmIChiZyA8IDgpIHsKLQkJCQkqZHN0KysgPSAnNCc7Ci0JCQkJKmRzdCsrID0gJzAnICsgYmc7Ci0JCQl9IGVsc2UgewotCQkJCWRzdCArPSBzcHJpbnRmKGRzdCwgIjQ4OzU7JWQiLCBiZyk7Ci0JCQl9Ci0JCX0KLQkJKmRzdCsrID0gJ20nOwotCX0KLQkqZHN0ID0gMDsKLQlyZXR1cm47Ci1iYWQ6Ci0JZGllKCJiYWQgY29sb3IgdmFsdWUgJyUuKnMnIGZvciB2YXJpYWJsZSAnJXMnIiwgdmFsdWVfbGVuLCB2YWx1ZSwgdmFyKTsKLX0KLQogaW50IHBlcmZfY29uZmlnX2NvbG9yYm9vbChjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgc3Rkb3V0X2lzX3R0eSkKIHsKIAlpZiAodmFsdWUpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9jb2xvci5oIGIvdG9vbHMvcGVyZi91dGlsL2NvbG9yLmgKaW5kZXggMGE1OTRiOC4uMzgxNDZmOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2NvbG9yLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2NvbG9yLmgKQEAgLTMwLDggKzMwLDYgQEAKIGludCBwZXJmX2NvbG9yX2RlZmF1bHRfY29uZmlnKGNvbnN0IGNoYXIgKnZhciwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmNiKTsKIAogaW50IHBlcmZfY29uZmlnX2NvbG9yYm9vbChjb25zdCBjaGFyICp2YXIsIGNvbnN0IGNoYXIgKnZhbHVlLCBpbnQgc3Rkb3V0X2lzX3R0eSk7Ci12b2lkIGNvbG9yX3BhcnNlKGNvbnN0IGNoYXIgKnZhbHVlLCBjb25zdCBjaGFyICp2YXIsIGNoYXIgKmRzdCk7Ci12b2lkIGNvbG9yX3BhcnNlX21lbShjb25zdCBjaGFyICp2YWx1ZSwgaW50IGxlbiwgY29uc3QgY2hhciAqdmFyLCBjaGFyICpkc3QpOwogaW50IGNvbG9yX3ZzbnByaW50ZihjaGFyICpiZiwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmNvbG9yLAogCQkgICAgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwogaW50IGNvbG9yX3ZmcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpjb2xvciwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Rzby5jIGIvdG9vbHMvcGVyZi91dGlsL2Rzby5jCmluZGV4IDQ1YmU5NDQuLmMyZjdkM2IgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kc28uYworKysgYi90b29scy9wZXJmL3V0aWwvZHNvLmMKQEAgLTUzMiwxMiArNTMyLDggQEAKIAkJCWJyZWFrOwogCiAJCWNhY2hlX29mZnNldCA9IG9mZnNldCAmIERTT19fREFUQV9DQUNIRV9NQVNLOwotCQlyZXQgPSAtRUlOVkFMOwogCi0JCWlmICgtMSA9PSBsc2Vlayhkc28tPmRhdGEuZmQsIGNhY2hlX29mZnNldCwgU0VFS19TRVQpKQotCQkJYnJlYWs7Ci0KLQkJcmV0ID0gcmVhZChkc28tPmRhdGEuZmQsIGNhY2hlLT5kYXRhLCBEU09fX0RBVEFfQ0FDSEVfU0laRSk7CisJCXJldCA9IHByZWFkKGRzby0+ZGF0YS5mZCwgY2FjaGUtPmRhdGEsIERTT19fREFUQV9DQUNIRV9TSVpFLCBjYWNoZV9vZmZzZXQpOwogCQlpZiAocmV0IDw9IDApCiAJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2Rzby5oIGIvdG9vbHMvcGVyZi91dGlsL2Rzby5oCmluZGV4IDM3ODJjODIuLmNlZDkyODQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9kc28uaAorKysgYi90b29scy9wZXJmL3V0aWwvZHNvLmgKQEAgLTEzOSw2ICsxMzksNyBAQAogCQl1MzIJCSBzdGF0dXNfc2VlbjsKIAkJc2l6ZV90CQkgZmlsZV9zaXplOwogCQlzdHJ1Y3QgbGlzdF9oZWFkIG9wZW5fZW50cnk7CisJCXU2NAkJIGZyYW1lX29mZnNldDsKIAl9IGRhdGE7CiAKIAl1bmlvbiB7IC8qIFRvb2wgc3BlY2lmaWMgYXJlYSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCmluZGV4IGNiYWIxZmIuLjI4YjhjZTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKQEAgLTE0MzYsMzMgKzE0MzYsNiBAQAogCXJldHVybiBwcmludGVkICsgZnByaW50ZihmcCwgIlxuIik7CiB9CiAKLWludCBwZXJmX2V2bGlzdF9fc3RyZXJyb3JfdHAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QgX19tYXliZV91bnVzZWQsCi0JCQkgICAgIGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCi17Ci0JY2hhciBzYnVmWzEyOF07Ci0KLQlzd2l0Y2ggKGVycikgewotCWNhc2UgRU5PRU5UOgotCQlzY25wcmludGYoYnVmLCBzaXplLCAiJXMiLAotCQkJICAiRXJyb3I6XHRVbmFibGUgdG8gZmluZCBkZWJ1Z2ZzXG4iCi0JCQkgICJIaW50Olx0V2FzIHlvdXIga2VybmVsIHdhcyBjb21waWxlZCB3aXRoIGRlYnVnZnMgc3VwcG9ydD9cbiIKLQkJCSAgIkhpbnQ6XHRJcyB0aGUgZGVidWdmcyBmaWxlc3lzdGVtIG1vdW50ZWQ/XG4iCi0JCQkgICJIaW50Olx0VHJ5ICdzdWRvIG1vdW50IC10IGRlYnVnZnMgbm9kZXYgL3N5cy9rZXJuZWwvZGVidWcnIik7Ci0JCWJyZWFrOwotCWNhc2UgRUFDQ0VTOgotCQlzY25wcmludGYoYnVmLCBzaXplLAotCQkJICAiRXJyb3I6XHRObyBwZXJtaXNzaW9ucyB0byByZWFkICVzL3RyYWNpbmcvZXZlbnRzL3Jhd19zeXNjYWxsc1xuIgotCQkJICAiSGludDpcdFRyeSAnc3VkbyBtb3VudCAtbyByZW1vdW50LG1vZGU9NzU1ICVzJ1xuIiwKLQkJCSAgZGVidWdmc19tb3VudHBvaW50LCBkZWJ1Z2ZzX21vdW50cG9pbnQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzY25wcmludGYoYnVmLCBzaXplLCAiJXMiLCBzdHJlcnJvcl9yKGVyciwgc2J1Ziwgc2l6ZW9mKHNidWYpKSk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiAwOwotfQotCiBpbnQgcGVyZl9ldmxpc3RfX3N0cmVycm9yX29wZW4oc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QgX19tYXliZV91bnVzZWQsCiAJCQkgICAgICAgaW50IGVyciwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaCBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaAppbmRleCAwYmE5M2Y2Li5jOTRhOWUwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oCkBAIC0xODMsNyArMTgzLDYgQEAKIAogc2l6ZV90IHBlcmZfZXZsaXN0X19mcHJpbnRmKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LCBGSUxFICpmcCk7CiAKLWludCBwZXJmX2V2bGlzdF9fc3RyZXJyb3JfdHAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIGludCBlcnIsIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpOwogaW50IHBlcmZfZXZsaXN0X19zdHJlcnJvcl9vcGVuKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LCBpbnQgZXJyLCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKIGludCBwZXJmX2V2bGlzdF9fc3RyZXJyb3JfbW1hcChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgaW50IGVyciwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9ldnNlbC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKaW5kZXggMWU5MGM4NS4uZWE1MWE5MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMKQEAgLTcwOSw2ICs3MDksNyBAQAogCWlmIChvcHRzLT5zYW1wbGVfd2VpZ2h0KQogCQlwZXJmX2V2c2VsX19zZXRfc2FtcGxlX2JpdChldnNlbCwgV0VJR0hUKTsKIAorCWF0dHItPnRhc2sgID0gdHJhY2s7CiAJYXR0ci0+bW1hcCAgPSB0cmFjazsKIAlhdHRyLT5tbWFwMiA9IHRyYWNrICYmICFwZXJmX21pc3NpbmdfZmVhdHVyZXMubW1hcDI7CiAJYXR0ci0+Y29tbSAgPSB0cmFjazsKQEAgLTc5Nyw2ICs3OTgsOSBAQAogCiBpbnQgcGVyZl9ldnNlbF9fYWxsb2NfaWQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBpbnQgbmNwdXMsIGludCBudGhyZWFkcykKIHsKKwlpZiAobmNwdXMgPT0gMCB8fCBudGhyZWFkcyA9PSAwKQorCQlyZXR1cm4gMDsKKwogCWlmIChldnNlbC0+c3lzdGVtX3dpZGUpCiAJCW50aHJlYWRzID0gMTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCmluZGV4IGIyMGU0MGMuLjFmNDA3ZjcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYworKysgYi90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKQEAgLTIyMzcsNiArMjIzNyw3IEBACiAJICogLSB1bmlxdWUgbnVtYmVyIHRvIGlkZW50aWZ5IGFjdHVhbCBwZXJmLmRhdGEgZmlsZXMKIAkgKiAtIGVuY29kZSBlbmRpYW5uZXNzIG9mIGZpbGUKIAkgKi8KKwlwaC0+dmVyc2lvbiA9IFBFUkZfSEVBREVSX1ZFUlNJT05fMjsKIAogCS8qIGNoZWNrIG1hZ2ljIG51bWJlciB3aXRoIG9uZSBlbmRpYW5uZXNzICovCiAJaWYgKG1hZ2ljID09IF9fcGVyZl9tYWdpYzIpCkBAIC0yMjQ3LDcgKzIyNDgsNiBAQAogCQlyZXR1cm4gLTE7CiAKIAlwaC0+bmVlZHNfc3dhcCA9IHRydWU7Ci0JcGgtPnZlcnNpb24gPSBQRVJGX0hFQURFUl9WRVJTSU9OXzI7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMgYi90b29scy9wZXJmL3V0aWwvaGlzdC5jCmluZGV4IDE4MjM5NTUuLjcwYjQ4YTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuYwpAQCAtMjQxLDYgKzI0MSwyMCBAQAogCXJldHVybiBoZS0+c3RhdC5wZXJpb2QgPT0gMDsKIH0KIAorc3RhdGljIHZvaWQgaGlzdHNfX2RlbGV0ZV9lbnRyeShzdHJ1Y3QgaGlzdHMgKmhpc3RzLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCit7CisJcmJfZXJhc2UoJmhlLT5yYl9ub2RlLCAmaGlzdHMtPmVudHJpZXMpOworCisJaWYgKHNvcnRfX25lZWRfY29sbGFwc2UpCisJCXJiX2VyYXNlKCZoZS0+cmJfbm9kZV9pbiwgJmhpc3RzLT5lbnRyaWVzX2NvbGxhcHNlZCk7CisKKwktLWhpc3RzLT5ucl9lbnRyaWVzOworCWlmICghaGUtPmZpbHRlcmVkKQorCQktLWhpc3RzLT5ucl9ub25fZmlsdGVyZWRfZW50cmllczsKKworCWhpc3RfZW50cnlfX2RlbGV0ZShoZSk7Cit9CisKIHZvaWQgaGlzdHNfX2RlY2F5X2VudHJpZXMoc3RydWN0IGhpc3RzICpoaXN0cywgYm9vbCB6YXBfdXNlciwgYm9vbCB6YXBfa2VybmVsKQogewogCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gcmJfZmlyc3QoJmhpc3RzLT5lbnRyaWVzKTsKQEAgLTI1OCwxNiArMjcyLDcgQEAKIAkJICAgICAoemFwX2tlcm5lbCAmJiBuLT5sZXZlbCAhPSAnLicpIHx8CiAJCSAgICAgaGlzdHNfX2RlY2F5X2VudHJ5KGhpc3RzLCBuKSkgJiYKIAkJICAgICFuLT51c2VkKSB7Ci0JCQlyYl9lcmFzZSgmbi0+cmJfbm9kZSwgJmhpc3RzLT5lbnRyaWVzKTsKLQotCQkJaWYgKHNvcnRfX25lZWRfY29sbGFwc2UpCi0JCQkJcmJfZXJhc2UoJm4tPnJiX25vZGVfaW4sICZoaXN0cy0+ZW50cmllc19jb2xsYXBzZWQpOwotCi0JCQktLWhpc3RzLT5ucl9lbnRyaWVzOwotCQkJaWYgKCFuLT5maWx0ZXJlZCkKLQkJCQktLWhpc3RzLT5ucl9ub25fZmlsdGVyZWRfZW50cmllczsKLQotCQkJaGlzdF9lbnRyeV9fZnJlZShuKTsKKwkJCWhpc3RzX19kZWxldGVfZW50cnkoaGlzdHMsIG4pOwogCQl9CiAJfQogfQpAQCAtMjgxLDE2ICsyODYsNyBAQAogCQluID0gcmJfZW50cnkobmV4dCwgc3RydWN0IGhpc3RfZW50cnksIHJiX25vZGUpOwogCQluZXh0ID0gcmJfbmV4dCgmbi0+cmJfbm9kZSk7CiAKLQkJcmJfZXJhc2UoJm4tPnJiX25vZGUsICZoaXN0cy0+ZW50cmllcyk7Ci0KLQkJaWYgKHNvcnRfX25lZWRfY29sbGFwc2UpCi0JCQlyYl9lcmFzZSgmbi0+cmJfbm9kZV9pbiwgJmhpc3RzLT5lbnRyaWVzX2NvbGxhcHNlZCk7Ci0KLQkJLS1oaXN0cy0+bnJfZW50cmllczsKLQkJaWYgKCFuLT5maWx0ZXJlZCkKLQkJCS0taGlzdHMtPm5yX25vbl9maWx0ZXJlZF9lbnRyaWVzOwotCi0JCWhpc3RfZW50cnlfX2ZyZWUobik7CisJCWhpc3RzX19kZWxldGVfZW50cnkoaGlzdHMsIG4pOwogCX0KIH0KIApAQCAtNDMzLDYgKzQyOSw4IEBACiAJaWYgKCFoZSkKIAkJcmV0dXJuIE5VTEw7CiAKKwloaXN0cy0+bnJfZW50cmllcysrOworCiAJcmJfbGlua19ub2RlKCZoZS0+cmJfbm9kZV9pbiwgcGFyZW50LCBwKTsKIAlyYl9pbnNlcnRfY29sb3IoJmhlLT5yYl9ub2RlX2luLCBoaXN0cy0+ZW50cmllc19pbik7CiBvdXQ6CkBAIC05MTUsNyArOTEzLDcgQEAKIAkJaWYgKHBlcmZfaHBwX19zaG91bGRfc2tpcChmbXQpKQogCQkJY29udGludWU7CiAKLQkJY21wID0gZm10LT5jbXAobGVmdCwgcmlnaHQpOworCQljbXAgPSBmbXQtPmNtcChmbXQsIGxlZnQsIHJpZ2h0KTsKIAkJaWYgKGNtcCkKIAkJCWJyZWFrOwogCX0KQEAgLTkzMyw3ICs5MzEsNyBAQAogCQlpZiAocGVyZl9ocHBfX3Nob3VsZF9za2lwKGZtdCkpCiAJCQljb250aW51ZTsKIAotCQljbXAgPSBmbXQtPmNvbGxhcHNlKGxlZnQsIHJpZ2h0KTsKKwkJY21wID0gZm10LT5jb2xsYXBzZShmbXQsIGxlZnQsIHJpZ2h0KTsKIAkJaWYgKGNtcCkKIAkJCWJyZWFrOwogCX0KQEAgLTk0MSw3ICs5MzksNyBAQAogCXJldHVybiBjbXA7CiB9CiAKLXZvaWQgaGlzdF9lbnRyeV9fZnJlZShzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCit2b2lkIGhpc3RfZW50cnlfX2RlbGV0ZShzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpCiB7CiAJemZyZWUoJmhlLT5icmFuY2hfaW5mbyk7CiAJemZyZWUoJmhlLT5tZW1faW5mbyk7CkBAIC05ODEsNyArOTc5LDcgQEAKIAkJCQkJCWl0ZXItPmNhbGxjaGFpbiwKIAkJCQkJCWhlLT5jYWxsY2hhaW4pOwogCQkJfQotCQkJaGlzdF9lbnRyeV9fZnJlZShoZSk7CisJCQloaXN0X2VudHJ5X19kZWxldGUoaGUpOwogCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAKQEAgLTEwNjMsNyArMTA2MSw3IEBACiAJCWlmIChwZXJmX2hwcF9fc2hvdWxkX3NraXAoZm10KSkKIAkJCWNvbnRpbnVlOwogCi0JCWNtcCA9IGZtdC0+c29ydChhLCBiKTsKKwkJY21wID0gZm10LT5zb3J0KGZtdCwgYSwgYik7CiAJCWlmIChjbXApCiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGlzdC5oIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuaAppbmRleCA0NmJkNTAzLi4yYjY5MGQwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGlzdC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmgKQEAgLTExOSw3ICsxMTksNyBAQAogaW50IGhpc3RfZW50cnlfX3RyYW5zYWN0aW9uX2xlbih2b2lkKTsKIGludCBoaXN0X2VudHJ5X19zb3J0X3NucHJpbnRmKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSwgY2hhciAqYmYsIHNpemVfdCBzaXplLAogCQkJICAgICAgc3RydWN0IGhpc3RzICpoaXN0cyk7Ci12b2lkIGhpc3RfZW50cnlfX2ZyZWUoc3RydWN0IGhpc3RfZW50cnkgKik7Cit2b2lkIGhpc3RfZW50cnlfX2RlbGV0ZShzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpOwogCiB2b2lkIGhpc3RzX19vdXRwdXRfcmVzb3J0KHN0cnVjdCBoaXN0cyAqaGlzdHMsIHN0cnVjdCB1aV9wcm9ncmVzcyAqcHJvZyk7CiB2b2lkIGhpc3RzX19jb2xsYXBzZV9yZXNvcnQoc3RydWN0IGhpc3RzICpoaXN0cywgc3RydWN0IHVpX3Byb2dyZXNzICpwcm9nKTsKQEAgLTE5NSw5ICsxOTUsMTIgQEAKIAkJICAgICBzdHJ1Y3QgaGlzdF9lbnRyeSAqaGUpOwogCWludCAoKmVudHJ5KShzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQsIHN0cnVjdCBwZXJmX2hwcCAqaHBwLAogCQkgICAgIHN0cnVjdCBoaXN0X2VudHJ5ICpoZSk7Ci0JaW50NjRfdCAoKmNtcCkoc3RydWN0IGhpc3RfZW50cnkgKmEsIHN0cnVjdCBoaXN0X2VudHJ5ICpiKTsKLQlpbnQ2NF90ICgqY29sbGFwc2UpKHN0cnVjdCBoaXN0X2VudHJ5ICphLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqYik7Ci0JaW50NjRfdCAoKnNvcnQpKHN0cnVjdCBoaXN0X2VudHJ5ICphLCBzdHJ1Y3QgaGlzdF9lbnRyeSAqYik7CisJaW50NjRfdCAoKmNtcCkoc3RydWN0IHBlcmZfaHBwX2ZtdCAqZm10LAorCQkgICAgICAgc3RydWN0IGhpc3RfZW50cnkgKmEsIHN0cnVjdCBoaXN0X2VudHJ5ICpiKTsKKwlpbnQ2NF90ICgqY29sbGFwc2UpKHN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdCwKKwkJCSAgICBzdHJ1Y3QgaGlzdF9lbnRyeSAqYSwgc3RydWN0IGhpc3RfZW50cnkgKmIpOworCWludDY0X3QgKCpzb3J0KShzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQsCisJCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqYSwgc3RydWN0IGhpc3RfZW50cnkgKmIpOwogCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgc29ydF9saXN0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hcC5oIGIvdG9vbHMvcGVyZi91dGlsL21hcC5oCmluZGV4IDY5NTFhOWQuLjBlNDI0MzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuaAorKysgYi90b29scy9wZXJmL3V0aWwvbWFwLmgKQEAgLTExNiw2ICsxMTYsMjIgQEAKICNkZWZpbmUgbWFwX19mb3JfZWFjaF9zeW1ib2wobWFwLCBwb3MsIG4pCVwKIAlkc29fX2Zvcl9lYWNoX3N5bWJvbChtYXAtPmRzbywgcG9zLCBuLCBtYXAtPnR5cGUpCiAKKy8qIG1hcF9fZm9yX2VhY2hfc3ltYm9sX3dpdGhfbmFtZSAtIGl0ZXJhdGUgb3ZlciB0aGUgc3ltYm9scyBpbiB0aGUgZ2l2ZW4gbWFwCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGhhdmUgdGhlIGdpdmVuIG5hbWUKKyAqCisgKiBAbWFwOiB0aGUgJ3N0cnVjdCBtYXAgKicgaW4gd2hpY2ggc3ltYm9scyBpdGVyZWF0ZWQKKyAqIEBzeW1fbmFtZTogdGhlIHN5bWJvbCBuYW1lCisgKiBAcG9zOiB0aGUgJ3N0cnVjdCBzeW1ib2wgKicgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IKKyAqIEBmaWx0ZXI6IHRvIHVzZSB3aGVuIGxvYWRpbmcgdGhlIERTTworICovCisjZGVmaW5lIF9fbWFwX19mb3JfZWFjaF9zeW1ib2xfYnlfbmFtZShtYXAsIHN5bV9uYW1lLCBwb3MsIGZpbHRlcikJXAorCWZvciAocG9zID0gbWFwX19maW5kX3N5bWJvbF9ieV9uYW1lKG1hcCwgc3ltX25hbWUsIGZpbHRlcik7CVwKKwkgICAgIHBvcyAmJiBzdHJjbXAocG9zLT5uYW1lLCBzeW1fbmFtZSkgPT0gMDsJCVwKKwkgICAgIHBvcyA9IHN5bWJvbF9fbmV4dF9ieV9uYW1lKHBvcykpCisKKyNkZWZpbmUgbWFwX19mb3JfZWFjaF9zeW1ib2xfYnlfbmFtZShtYXAsIHN5bV9uYW1lLCBwb3MpCQlcCisJX19tYXBfX2Zvcl9lYWNoX3N5bWJvbF9ieV9uYW1lKG1hcCwgc3ltX25hbWUsIChwb3MpLCBOVUxMKQorCiB0eXBlZGVmIGludCAoKnN5bWJvbF9maWx0ZXJfdCkoc3RydWN0IG1hcCAqbWFwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOwogCiB2b2lkIG1hcF9faW5pdChzdHJ1Y3QgbWFwICptYXAsIGVudW0gbWFwX3R5cGUgdHlwZSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwppbmRleCA3N2I0M2ZlLi43ZjhlYzZjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCkBAIC01MjYsNyArNTI2LDcgQEAKIH0KIAogaW50IHBhcnNlX2V2ZW50c19hZGRfYnJlYWtwb2ludChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgKmlkeCwKLQkJCQl2b2lkICpwdHIsIGNoYXIgKnR5cGUpCisJCQkJdm9pZCAqcHRyLCBjaGFyICp0eXBlLCB1NjQgbGVuKQogewogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKIApAQCAtNTM2LDE0ICs1MzYsMTUgQEAKIAlpZiAocGFyc2VfYnJlYWtwb2ludF90eXBlKHR5cGUsICZhdHRyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKgotCSAqIFdlIHNob3VsZCBmaW5kIGEgbmljZSB3YXkgdG8gb3ZlcnJpZGUgdGhlIGFjY2VzcyBsZW5ndGgKLQkgKiBQcm92aWRlIHNvbWUgZGVmYXVsdHMgZm9yIG5vdwotCSAqLwotCWlmIChhdHRyLmJwX3R5cGUgPT0gSFdfQlJFQUtQT0lOVF9YKQotCQlhdHRyLmJwX2xlbiA9IHNpemVvZihsb25nKTsKLQllbHNlCi0JCWF0dHIuYnBfbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fNDsKKwkvKiBQcm92aWRlIHNvbWUgZGVmYXVsdHMgaWYgbGVuIGlzIG5vdCBzcGVjaWZpZWQgKi8KKwlpZiAoIWxlbikgeworCQlpZiAoYXR0ci5icF90eXBlID09IEhXX0JSRUFLUE9JTlRfWCkKKwkJCWxlbiA9IHNpemVvZihsb25nKTsKKwkJZWxzZQorCQkJbGVuID0gSFdfQlJFQUtQT0lOVF9MRU5fNDsKKwl9CisKKwlhdHRyLmJwX2xlbiA9IGxlbjsKIAogCWF0dHIudHlwZSA9IFBFUkZfVFlQRV9CUkVBS1BPSU5UOwogCWF0dHIuc2FtcGxlX3BlcmlvZCA9IDE7CkBAIC0xMTIxLDcgKzExMjIsNyBAQAogCQlyZXR1cm47CiAKIAlmb3JfZWFjaF9zdWJzeXN0ZW0oc3lzX2Rpciwgc3lzX2RpcmVudCwgc3lzX25leHQpIHsKLQkJaWYgKHN1YnN5c19nbG9iICE9IE5VTEwgJiYgCisJCWlmIChzdWJzeXNfZ2xvYiAhPSBOVUxMICYmCiAJCSAgICAhc3RyZ2xvYm1hdGNoKHN5c19kaXJlbnQuZF9uYW1lLCBzdWJzeXNfZ2xvYikpCiAJCQljb250aW51ZTsKIApAQCAtMTEzMiw3ICsxMTMzLDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWZvcl9lYWNoX2V2ZW50KHN5c19kaXJlbnQsIGV2dF9kaXIsIGV2dF9kaXJlbnQsIGV2dF9uZXh0KSB7Ci0JCQlpZiAoZXZlbnRfZ2xvYiAhPSBOVUxMICYmIAorCQkJaWYgKGV2ZW50X2dsb2IgIT0gTlVMTCAmJgogCQkJICAgICFzdHJnbG9ibWF0Y2goZXZ0X2RpcmVudC5kX25hbWUsIGV2ZW50X2dsb2IpKQogCQkJCWNvbnRpbnVlOwogCkBAIC0xMzA1LDcgKzEzMDYsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IG1heDsgaSsrLCBzeW1zKyspIHsKIAotCQlpZiAoZXZlbnRfZ2xvYiAhPSBOVUxMICYmIAorCQlpZiAoZXZlbnRfZ2xvYiAhPSBOVUxMICYmCiAJCSAgICAhKHN0cmdsb2JtYXRjaChzeW1zLT5zeW1ib2wsIGV2ZW50X2dsb2IpIHx8CiAJCSAgICAgIChzeW1zLT5hbGlhcyAmJiBzdHJnbG9ibWF0Y2goc3ltcy0+YWxpYXMsIGV2ZW50X2dsb2IpKSkpCiAJCQljb250aW51ZTsKQEAgLTEzNjYsNyArMTM2Nyw3IEBACiAJCXByaW50ZigiXG4iKTsKIAogCQlwcmludGYoIiAgJS01MHMgWyVzXVxuIiwKLQkJICAgICAgICJtZW06PGFkZHI+WzphY2Nlc3NdIiwKKwkJICAgICAgICJtZW06PGFkZHI+Wy9sZW5dWzphY2Nlc3NdIiwKIAkJCWV2ZW50X3R5cGVfZGVzY3JpcHRvcnNbUEVSRl9UWVBFX0JSRUFLUE9JTlRdKTsKIAkJcHJpbnRmKCJcbiIpOwogCX0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaAppbmRleCBkYjJjZjc4Li5mZjZlMWZhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oCkBAIC03MSw2ICs3MSw3IEBACiAJaW50IHR5cGVfdmFsOwogCWludCB0eXBlX3Rlcm07CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWJvb2wgdXNlZDsKIH07CiAKIHN0cnVjdCBwYXJzZV9ldmVudHNfZXZsaXN0IHsKQEAgLTEwNCw3ICsxMDUsNyBAQAogaW50IHBhcnNlX2V2ZW50c19hZGRfY2FjaGUoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppZHgsCiAJCQkgICBjaGFyICp0eXBlLCBjaGFyICpvcF9yZXN1bHQxLCBjaGFyICpvcF9yZXN1bHQyKTsKIGludCBwYXJzZV9ldmVudHNfYWRkX2JyZWFrcG9pbnQoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgaW50ICppZHgsCi0JCQkJdm9pZCAqcHRyLCBjaGFyICp0eXBlKTsKKwkJCQl2b2lkICpwdHIsIGNoYXIgKnR5cGUsIHU2NCBsZW4pOwogaW50IHBhcnNlX2V2ZW50c19hZGRfcG11KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaWR4LAogCQkJIGNoYXIgKnBtdSAsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWRfY29uZmlnKTsKIGVudW0gcGVyZl9wbXVfZXZlbnRfc3ltYm9sX3R5cGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMubCBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMubAppbmRleCA5MDY2MzBiLi45NGVhY2I2IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmwKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5sCkBAIC0xNTksNiArMTU5LDcgQEAKIDxtZW0+ewoge21vZGlmaWVyX2JwfQkJeyByZXR1cm4gc3RyKHl5c2Nhbm5lciwgUEVfTU9ESUZJRVJfQlApOyB9CiA6CQkJeyByZXR1cm4gJzonOyB9CisiLyIJCQl7IHJldHVybiAnLyc7IH0KIHtudW1fZGVjfQkJeyByZXR1cm4gdmFsdWUoeXlzY2FubmVyLCAxMCk7IH0KIHtudW1faGV4fQkJeyByZXR1cm4gdmFsdWUoeXlzY2FubmVyLCAxNik7IH0KIAkvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy55IGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy55CmluZGV4IDkzYzRjOWYuLjcyZGVmMDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMueQorKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLnkKQEAgLTMyNiw2ICszMjYsMjggQEAKIH0KIAogZXZlbnRfbGVnYWN5X21lbToKK1BFX1BSRUZJWF9NRU0gUEVfVkFMVUUgJy8nIFBFX1ZBTFVFICc6JyBQRV9NT0RJRklFUl9CUCBzZXBfZGMKK3sKKwlzdHJ1Y3QgcGFyc2VfZXZlbnRzX2V2bGlzdCAqZGF0YSA9IF9kYXRhOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKKwlBTExPQ19MSVNUKGxpc3QpOworCUFCT1JUX09OKHBhcnNlX2V2ZW50c19hZGRfYnJlYWtwb2ludChsaXN0LCAmZGF0YS0+aWR4LAorCQkJCQkgICAgICh2b2lkICopICQyLCAkNiwgJDQpKTsKKwkkJCA9IGxpc3Q7Cit9Cit8CitQRV9QUkVGSVhfTUVNIFBFX1ZBTFVFICcvJyBQRV9WQUxVRSBzZXBfZGMKK3sKKwlzdHJ1Y3QgcGFyc2VfZXZlbnRzX2V2bGlzdCAqZGF0YSA9IF9kYXRhOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKKwlBTExPQ19MSVNUKGxpc3QpOworCUFCT1JUX09OKHBhcnNlX2V2ZW50c19hZGRfYnJlYWtwb2ludChsaXN0LCAmZGF0YS0+aWR4LAorCQkJCQkgICAgICh2b2lkICopICQyLCBOVUxMLCAkNCkpOworCSQkID0gbGlzdDsKK30KK3wKIFBFX1BSRUZJWF9NRU0gUEVfVkFMVUUgJzonIFBFX01PRElGSUVSX0JQIHNlcF9kYwogewogCXN0cnVjdCBwYXJzZV9ldmVudHNfZXZsaXN0ICpkYXRhID0gX2RhdGE7CkBAIC0zMzMsNyArMzU1LDcgQEAKIAogCUFMTE9DX0xJU1QobGlzdCk7CiAJQUJPUlRfT04ocGFyc2VfZXZlbnRzX2FkZF9icmVha3BvaW50KGxpc3QsICZkYXRhLT5pZHgsCi0JCQkJCSAgICAgKHZvaWQgKikgJDIsICQ0KSk7CisJCQkJCSAgICAgKHZvaWQgKikgJDIsICQ0LCAwKSk7CiAJJCQgPSBsaXN0OwogfQogfApAQCAtMzQ0LDcgKzM2Niw3IEBACiAKIAlBTExPQ19MSVNUKGxpc3QpOwogCUFCT1JUX09OKHBhcnNlX2V2ZW50c19hZGRfYnJlYWtwb2ludChsaXN0LCAmZGF0YS0+aWR4LAotCQkJCQkgICAgICh2b2lkICopICQyLCBOVUxMKSk7CisJCQkJCSAgICAgKHZvaWQgKikgJDIsIE5VTEwsIDApKTsKIAkkJCA9IGxpc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmMgYi90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5jCmluZGV4IGY2MmRlZTdiLi40YTAxNWY3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2Utb3B0aW9ucy5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1vcHRpb25zLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAkJcmV0dXJuIG9wdGVycm9yKG9wdCwgImlzIG5vdCB1c2FibGUiLCBmbGFncyk7CiAKIAlpZiAob3B0LT5mbGFncyAmIFBBUlNFX09QVF9FWENMVVNJVkUpIHsKLQkJaWYgKHAtPmV4Y2xfb3B0KSB7CisJCWlmIChwLT5leGNsX29wdCAmJiBwLT5leGNsX29wdCAhPSBvcHQpIHsKIAkJCWNoYXIgbXNnWzEyOF07CiAKIAkJCWlmICgoKGZsYWdzICYgT1BUX1NIT1JUKSAmJiBwLT5leGNsX29wdC0+c2hvcnRfbmFtZSkgfHwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wbXUuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wbXUuYwppbmRleCA1YzljNDk0Li40ODQxMTY3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcG11LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BtdS5jCkBAIC01NTEsMzEgKzU1MSw2OCBAQAogfQogCiAvKgorICogVGVybSBpcyBhIHN0cmluZyB0ZXJtLCBhbmQgbWlnaHQgYmUgYSBwYXJhbS10ZXJtLiBUcnkgdG8gbG9vayB1cCBpdCdzIHZhbHVlCisgKiBpbiB0aGUgcmVtYWluaW5nIHRlcm1zLgorICogLSBXZSBoYXZlIGEgdGVybSBsaWtlICJiYXNlLW9yLWZvcm1hdC10ZXJtPXBhcmFtLXRlcm0iLAorICogLSBXZSBuZWVkIHRvIGZpbmQgdGhlIHZhbHVlIHN1cHBsaWVkIGZvciAicGFyYW0tdGVybSIgKHdpdGggcGFyYW0tdGVybSBuYW1lZAorICogICBpbiBhIGNvbmZpZyBzdHJpbmcpIGxhdGVyIG9uIGluIHRoZSB0ZXJtIGxpc3QuCisgKi8KK3N0YXRpYyBpbnQgcG11X3Jlc29sdmVfcGFyYW1fdGVybShzdHJ1Y3QgcGFyc2VfZXZlbnRzX3Rlcm0gKnRlcm0sCisJCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkX3Rlcm1zLAorCQkJCSAgX191NjQgKnZhbHVlKQoreworCXN0cnVjdCBwYXJzZV9ldmVudHNfdGVybSAqdDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgaGVhZF90ZXJtcywgbGlzdCkgeworCQlpZiAodC0+dHlwZV92YWwgPT0gUEFSU0VfRVZFTlRTX19URVJNX1RZUEVfTlVNKSB7CisJCQlpZiAoIXN0cmNtcCh0LT5jb25maWcsIHRlcm0tPmNvbmZpZykpIHsKKwkJCQl0LT51c2VkID0gdHJ1ZTsKKwkJCQkqdmFsdWUgPSB0LT52YWwubnVtOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCisJaWYgKHZlcmJvc2UpCisJCXByaW50ZigiUmVxdWlyZWQgcGFyYW1ldGVyICclcycgbm90IHNwZWNpZmllZFxuIiwgdGVybS0+Y29uZmlnKTsKKworCXJldHVybiAtMTsKK30KKworLyoKICAqIFNldHVwIG9uZSBvZiBjb25maWdbMTJdIGF0dHIgbWVtYmVycyBiYXNlZCBvbiB0aGUKICAqIHVzZXIgaW5wdXQgZGF0YSAtIHRlcm0gcGFyYW1ldGVyLgogICovCiBzdGF0aWMgaW50IHBtdV9jb25maWdfdGVybShzdHJ1Y3QgbGlzdF9oZWFkICpmb3JtYXRzLAogCQkJICAgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciwKIAkJCSAgIHN0cnVjdCBwYXJzZV9ldmVudHNfdGVybSAqdGVybSwKKwkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWRfdGVybXMsCiAJCQkgICBib29sIHplcm8pCiB7CiAJc3RydWN0IHBlcmZfcG11X2Zvcm1hdCAqZm9ybWF0OwogCV9fdTY0ICp2cDsKKwlfX3U2NCB2YWw7CiAKIAkvKgotCSAqIFN1cHBvcnQgb25seSBmb3IgaGFyZGNvZGVkIGFuZCBudW1uZXJpYWwgdGVybXMuCisJICogSWYgdGhpcyBpcyBhIHBhcmFtZXRlciB3ZSd2ZSBhbHJlYWR5IHVzZWQgZm9yIHBhcmFtZXRlcml6ZWQtZXZhbCwKKwkgKiBza2lwIGl0IGluIG5vcm1hbCBldmFsLgorCSAqLworCWlmICh0ZXJtLT51c2VkKQorCQlyZXR1cm4gMDsKKworCS8qCiAJICogSGFyZGNvZGVkIHRlcm1zIHNob3VsZCBiZSBhbHJlYWR5IGluLCBzbyBub3RoaW5nCiAJICogdG8gYmUgZG9uZSBmb3IgdGhlbS4KIAkgKi8KIAlpZiAocGFyc2VfZXZlbnRzX19pc19oYXJkY29kZWRfdGVybSh0ZXJtKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodGVybS0+dHlwZV92YWwgIT0gUEFSU0VfRVZFTlRTX19URVJNX1RZUEVfTlVNKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWZvcm1hdCA9IHBtdV9maW5kX2Zvcm1hdChmb3JtYXRzLCB0ZXJtLT5jb25maWcpOwotCWlmICghZm9ybWF0KQorCWlmICghZm9ybWF0KSB7CisJCWlmICh2ZXJib3NlKQorCQkJcHJpbnRmKCJJbnZhbGlkIGV2ZW50L3BhcmFtZXRlciAnJXMnXG4iLCB0ZXJtLT5jb25maWcpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlzd2l0Y2ggKGZvcm1hdC0+dmFsdWUpIHsKIAljYXNlIFBFUkZfUE1VX0ZPUk1BVF9WQUxVRV9DT05GSUc6CkBAIC01OTIsMTEgKzYyOSwyNSBAQAogCX0KIAogCS8qCi0JICogWFhYIElmIHdlIGV2ZXIgZGVjaWRlIHRvIGdvIHdpdGggc3RyaW5nIHZhbHVlcyBmb3IKLQkgKiBub24taGFyZGNvZGVkIHRlcm1zLCBoZXJlJ3MgdGhlIHBsYWNlIHRvIHRyYW5zbGF0ZQotCSAqIHRoZW0gaW50byB2YWx1ZS4KKwkgKiBFaXRoZXIgZGlyZWN0bHkgdXNlIGEgbnVtZXJpYyB0ZXJtLCBvciB0cnkgdG8gdHJhbnNsYXRlIHN0cmluZyB0ZXJtcworCSAqIHVzaW5nIGV2ZW50IHBhcmFtZXRlcnMuCiAJICovCi0JcG11X2Zvcm1hdF92YWx1ZShmb3JtYXQtPmJpdHMsIHRlcm0tPnZhbC5udW0sIHZwLCB6ZXJvKTsKKwlpZiAodGVybS0+dHlwZV92YWwgPT0gUEFSU0VfRVZFTlRTX19URVJNX1RZUEVfTlVNKQorCQl2YWwgPSB0ZXJtLT52YWwubnVtOworCWVsc2UgaWYgKHRlcm0tPnR5cGVfdmFsID09IFBBUlNFX0VWRU5UU19fVEVSTV9UWVBFX1NUUikgeworCQlpZiAoc3RyY21wKHRlcm0tPnZhbC5zdHIsICI/IikpIHsKKwkJCWlmICh2ZXJib3NlKQorCQkJCXByX2luZm8oIkludmFsaWQgc3lzZnMgZW50cnkgJXM9JXNcbiIsCisJCQkJCQl0ZXJtLT5jb25maWcsIHRlcm0tPnZhbC5zdHIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAocG11X3Jlc29sdmVfcGFyYW1fdGVybSh0ZXJtLCBoZWFkX3Rlcm1zLCAmdmFsKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBtdV9mb3JtYXRfdmFsdWUoZm9ybWF0LT5iaXRzLCB2YWwsIHZwLCB6ZXJvKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjA3LDkgKzY1OCwxMCBAQAogewogCXN0cnVjdCBwYXJzZV9ldmVudHNfdGVybSAqdGVybTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodGVybSwgaGVhZF90ZXJtcywgbGlzdCkKLQkJaWYgKHBtdV9jb25maWdfdGVybShmb3JtYXRzLCBhdHRyLCB0ZXJtLCB6ZXJvKSkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlcm0sIGhlYWRfdGVybXMsIGxpc3QpIHsKKwkJaWYgKHBtdV9jb25maWdfdGVybShmb3JtYXRzLCBhdHRyLCB0ZXJtLCBoZWFkX3Rlcm1zLCB6ZXJvKSkKIAkJCXJldHVybiAtRUlOVkFMOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtNzY3LDEwICs4MTksMzYgQEAKIAkJc2V0X2JpdChiLCBiaXRzKTsKIH0KIAorc3RhdGljIGludCBzdWJfbm9uX25lZyhpbnQgYSwgaW50IGIpCit7CisJaWYgKGIgPiBhKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gYSAtIGI7Cit9CisKIHN0YXRpYyBjaGFyICpmb3JtYXRfYWxpYXMoY2hhciAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3QgcGVyZl9wbXUgKnBtdSwKIAkJCSAgc3RydWN0IHBlcmZfcG11X2FsaWFzICphbGlhcykKIHsKLQlzbnByaW50ZihidWYsIGxlbiwgIiVzLyVzLyIsIHBtdS0+bmFtZSwgYWxpYXMtPm5hbWUpOworCXN0cnVjdCBwYXJzZV9ldmVudHNfdGVybSAqdGVybTsKKwlpbnQgdXNlZCA9IHNucHJpbnRmKGJ1ZiwgbGVuLCAiJXMvJXMiLCBwbXUtPm5hbWUsIGFsaWFzLT5uYW1lKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodGVybSwgJmFsaWFzLT50ZXJtcywgbGlzdCkgeworCQlpZiAodGVybS0+dHlwZV92YWwgPT0gUEFSU0VfRVZFTlRTX19URVJNX1RZUEVfU1RSKQorCQkJdXNlZCArPSBzbnByaW50ZihidWYgKyB1c2VkLCBzdWJfbm9uX25lZyhsZW4sIHVzZWQpLAorCQkJCQkiLCVzPSVzIiwgdGVybS0+Y29uZmlnLAorCQkJCQl0ZXJtLT52YWwuc3RyKTsKKwl9CisKKwlpZiAoc3ViX25vbl9uZWcobGVuLCB1c2VkKSA+IDApIHsKKwkJYnVmW3VzZWRdID0gJy8nOworCQl1c2VkKys7CisJfQorCWlmIChzdWJfbm9uX25lZyhsZW4sIHVzZWQpID4gMCkgeworCQlidWZbdXNlZF0gPSAnXDAnOworCQl1c2VkKys7CisJfSBlbHNlCisJCWJ1ZltsZW4gLSAxXSA9ICdcMCc7CisKIAlyZXR1cm4gYnVmOwogfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCmluZGV4IDk0YTcxN2IuLjkxOTkzN2UgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jCkBAIC00NDYsNyArNDQ2LDcgQEAKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnRldnM7IGkrKykgewotCQlpZiAodGV2c1tpXS5wb2ludC5hZGRyZXNzKSB7CisJCWlmICh0ZXZzW2ldLnBvaW50LmFkZHJlc3MgJiYgIXRldnNbaV0ucG9pbnQucmV0cHJvYmUpIHsKIAkJCXRtcCA9IHN0cmR1cChyZWxvY19zeW0tPm5hbWUpOwogCQkJaWYgKCF0bXApCiAJCQkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMTkzLDE4ICsyMTkzLDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGNoYXIgKmxvb2tpbmdfZnVuY3Rpb25fbmFtZTsKLXN0YXRpYyBpbnQgbnVtX21hdGNoZWRfZnVuY3Rpb25zOwotCi1zdGF0aWMgaW50IHByb2JlX2Z1bmN0aW9uX2ZpbHRlcihzdHJ1Y3QgbWFwICptYXAgX19tYXliZV91bnVzZWQsCi0JCQkJICAgICAgc3RydWN0IHN5bWJvbCAqc3ltKQorc3RhdGljIGludCBmaW5kX3Byb2JlX2Z1bmN0aW9ucyhzdHJ1Y3QgbWFwICptYXAsIGNoYXIgKm5hbWUpCiB7Ci0JaWYgKChzeW0tPmJpbmRpbmcgPT0gU1RCX0dMT0JBTCB8fCBzeW0tPmJpbmRpbmcgPT0gU1RCX0xPQ0FMKSAmJgotCSAgICBzdHJjbXAobG9va2luZ19mdW5jdGlvbl9uYW1lLCBzeW0tPm5hbWUpID09IDApIHsKLQkJbnVtX21hdGNoZWRfZnVuY3Rpb25zKys7Ci0JCXJldHVybiAwOworCWludCBmb3VuZCA9IDA7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCisJbWFwX19mb3JfZWFjaF9zeW1ib2xfYnlfbmFtZShtYXAsIG5hbWUsIHN5bSkgeworCQlpZiAoc3ltLT5iaW5kaW5nID09IFNUQl9HTE9CQUwgfHwgc3ltLT5iaW5kaW5nID09IFNUQl9MT0NBTCkKKwkJCWZvdW5kKys7CiAJfQotCXJldHVybiAxOworCisJcmV0dXJuIGZvdW5kOwogfQogCiAjZGVmaW5lIHN0cmR1cF9vcl9nb3RvKHN0ciwgbGFiZWwpCVwKQEAgLTIyMjIsMTAgKzIyMjEsMTAgQEAKIAlzdHJ1Y3Qga21hcCAqa21hcCA9IE5VTEw7CiAJc3RydWN0IHJlZl9yZWxvY19zeW0gKnJlbG9jX3N5bSA9IE5VTEw7CiAJc3RydWN0IHN5bWJvbCAqc3ltOwotCXN0cnVjdCByYl9ub2RlICpuZDsKIAlzdHJ1Y3QgcHJvYmVfdHJhY2VfZXZlbnQgKnRldjsKIAlzdHJ1Y3QgcGVyZl9wcm9iZV9wb2ludCAqcHAgPSAmcGV2LT5wb2ludDsKIAlzdHJ1Y3QgcHJvYmVfdHJhY2VfcG9pbnQgKnRwOworCWludCBudW1fbWF0Y2hlZF9mdW5jdGlvbnM7CiAJaW50IHJldCwgaTsKIAogCS8qIEluaXQgbWFwcyBvZiBnaXZlbiBleGVjdXRhYmxlIG9yIGtlcm5lbCAqLwpAQCAtMjI0MiwxMCArMjI0MSw4IEBACiAJICogTG9hZCBtYXRjaGVkIHN5bWJvbHM6IFNpbmNlIHRoZSBkaWZmZXJlbnQgbG9jYWwgc3ltYm9scyBtYXkgaGF2ZQogCSAqIHNhbWUgbmFtZSBidXQgZGlmZmVyZW50IGFkZHJlc3NlcywgdGhpcyBsaXN0cyBhbGwgdGhlIHN5bWJvbHMuCiAJICovCi0JbnVtX21hdGNoZWRfZnVuY3Rpb25zID0gMDsKLQlsb29raW5nX2Z1bmN0aW9uX25hbWUgPSBwcC0+ZnVuY3Rpb247Ci0JcmV0ID0gbWFwX19sb2FkKG1hcCwgcHJvYmVfZnVuY3Rpb25fZmlsdGVyKTsKLQlpZiAocmV0IHx8IG51bV9tYXRjaGVkX2Z1bmN0aW9ucyA9PSAwKSB7CisJbnVtX21hdGNoZWRfZnVuY3Rpb25zID0gZmluZF9wcm9iZV9mdW5jdGlvbnMobWFwLCBwcC0+ZnVuY3Rpb24pOworCWlmIChudW1fbWF0Y2hlZF9mdW5jdGlvbnMgPT0gMCkgewogCQlwcl9lcnIoIkZhaWxlZCB0byBmaW5kIHN5bWJvbCAlcyBpbiAlc1xuIiwgcHAtPmZ1bmN0aW9uLAogCQkJdGFyZ2V0ID8gOiAia2VybmVsIik7CiAJCXJldCA9IC1FTk9FTlQ7CkBAIC0yMjU3LDcgKzIyNTQsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoIXBldi0+dXByb2JlcykgeworCWlmICghcGV2LT51cHJvYmVzICYmICFwcC0+cmV0cHJvYmUpIHsKIAkJa21hcCA9IG1hcF9fa21hcChtYXApOwogCQlyZWxvY19zeW0gPSBrbWFwLT5yZWZfcmVsb2Nfc3ltOwogCQlpZiAoIXJlbG9jX3N5bSkgewpAQCAtMjI3NSw3ICsyMjcyLDggQEAKIAl9CiAKIAlyZXQgPSAwOwotCW1hcF9fZm9yX2VhY2hfc3ltYm9sKG1hcCwgc3ltLCBuZCkgeworCisJbWFwX19mb3JfZWFjaF9zeW1ib2xfYnlfbmFtZShtYXAsIHBwLT5mdW5jdGlvbiwgc3ltKSB7CiAJCXRldiA9ICgqdGV2cykgKyByZXQ7CiAJCXRwID0gJnRldi0+cG9pbnQ7CiAJCWlmIChyZXQgPT0gbnVtX21hdGNoZWRfZnVuY3Rpb25zKSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMgYi90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMKaW5kZXggM2RkYTg1Yy4uZDkwNmQwYWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9weXRob24uYworKysgYi90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMKQEAgLTc2OCw3ICs3NjgsNyBAQAogCQkJUHlfREVDUkVGKGZpbGUpOwogCQkJZ290byBmcmVlX2xpc3Q7CiAJCX0KLQkJCQorCiAJCVB5X0RFQ1JFRihmaWxlKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24uYwppbmRleCBkODA4YTMyLi4wYzgxNWE0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3NjcmlwdGluZy1lbmdpbmVzL3RyYWNlLWV2ZW50LXB5dGhvbi5jCkBAIC04OSw3ICs4OSw3IEBACiAKIC8qCiAgKiBJbnNlcnQgdmFsIGludG8gaW50byB0aGUgZGljdGlvbmFyeSBhbmQgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRlci4KLSAqIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBkaWN0aW9uYXJpZXMgc2luY2UgUHlEaWN0X1NldEl0ZW1TdHJpbmcoKSBkb2VzIG5vdCAKKyAqIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciBkaWN0aW9uYXJpZXMgc2luY2UgUHlEaWN0X1NldEl0ZW1TdHJpbmcoKSBkb2VzIG5vdAogICogc3RlYWwgYSByZWZlcmVuY2UsIGFzIG9wcG9zZWQgdG8gUHlUdXBsZV9TZXRJdGVtKCkuCiAgKi8KIHN0YXRpYyB2b2lkIHB5ZGljdF9zZXRfaXRlbV9zdHJpbmdfZGVjcmVmKFB5T2JqZWN0ICpkaWN0LCBjb25zdCBjaGFyICprZXksIFB5T2JqZWN0ICp2YWwpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwppbmRleCA1ZjBlMDVhLi4wYmFmNzVmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKQEAgLTI3NCw3ICsyNzQsNyBAQAogCWlmICh0b29sLT5pZF9pbmRleCA9PSBOVUxMKQogCQl0b29sLT5pZF9pbmRleCA9IHByb2Nlc3NfaWRfaW5kZXhfc3R1YjsKIH0KLSAKKwogc3RhdGljIHZvaWQgc3dhcF9zYW1wbGVfaWRfYWxsKHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKQogewogCXZvaWQgKmVuZCA9ICh2b2lkICopIGV2ZW50ICsgZXZlbnQtPmhlYWRlci5zaXplOwpAQCAtMTI1MSw5ICsxMjUxLDkgQEAKICNkZWZpbmUgTlVNX01NQVBTIDEyOAogI2VuZGlmCiAKLWludCBfX3BlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudHMoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKLQkJCQkgICB1NjQgZGF0YV9vZmZzZXQsIHU2NCBkYXRhX3NpemUsCi0JCQkJICAgdTY0IGZpbGVfc2l6ZSwgc3RydWN0IHBlcmZfdG9vbCAqdG9vbCkKK3N0YXRpYyBpbnQgX19wZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJCSAgdTY0IGRhdGFfb2Zmc2V0LCB1NjQgZGF0YV9zaXplLAorCQkJCQkgIHU2NCBmaWxlX3NpemUsIHN0cnVjdCBwZXJmX3Rvb2wgKnRvb2wpCiB7CiAJaW50IGZkID0gcGVyZl9kYXRhX2ZpbGVfX2ZkKHNlc3Npb24tPmZpbGUpOwogCXU2NCBoZWFkLCBwYWdlX29mZnNldCwgZmlsZV9vZmZzZXQsIGZpbGVfcG9zLCBzaXplOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaCBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKaW5kZXggZGMyNmViZi4uNmQ2NjNkYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaAorKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oCkBAIC00OSw5ICs0OSw2IEBACiAJCQkgICAgIHVuaW9uIHBlcmZfZXZlbnQgKipldmVudF9wdHIsCiAJCQkgICAgIHN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlKTsKIAotaW50IF9fcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAotCQkJCSAgIHU2NCBkYXRhX29mZnNldCwgdTY0IGRhdGFfc2l6ZSwgdTY0IHNpemUsCi0JCQkJICAgc3RydWN0IHBlcmZfdG9vbCAqdG9vbCk7CiBpbnQgcGVyZl9zZXNzaW9uX19wcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAogCQkJCSBzdHJ1Y3QgcGVyZl90b29sICp0b29sKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3NvcnQuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zb3J0LmMKaW5kZXggOTEzOWRkYS4uN2EzOWMxZSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3NvcnQuYworKysgYi90b29scy9wZXJmL3V0aWwvc29ydC5jCkBAIC0xMzA0LDYgKzEzMDQsMzcgQEAKIAlyZXR1cm4gaHNlLT5zZS0+c2Vfc25wcmludGYoaGUsIGhwcC0+YnVmLCBocHAtPnNpemUsIGxlbik7CiB9CiAKK3N0YXRpYyBpbnQ2NF90IF9fc29ydF9faHBwX2NtcChzdHJ1Y3QgcGVyZl9ocHBfZm10ICpmbXQsCisJCQkgICAgICAgc3RydWN0IGhpc3RfZW50cnkgKmEsIHN0cnVjdCBoaXN0X2VudHJ5ICpiKQoreworCXN0cnVjdCBocHBfc29ydF9lbnRyeSAqaHNlOworCisJaHNlID0gY29udGFpbmVyX29mKGZtdCwgc3RydWN0IGhwcF9zb3J0X2VudHJ5LCBocHApOworCXJldHVybiBoc2UtPnNlLT5zZV9jbXAoYSwgYik7Cit9CisKK3N0YXRpYyBpbnQ2NF90IF9fc29ydF9faHBwX2NvbGxhcHNlKHN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdCwKKwkJCQkgICAgc3RydWN0IGhpc3RfZW50cnkgKmEsIHN0cnVjdCBoaXN0X2VudHJ5ICpiKQoreworCXN0cnVjdCBocHBfc29ydF9lbnRyeSAqaHNlOworCWludDY0X3QgKCpjb2xsYXBzZV9mbikoc3RydWN0IGhpc3RfZW50cnkgKiwgc3RydWN0IGhpc3RfZW50cnkgKik7CisKKwloc2UgPSBjb250YWluZXJfb2YoZm10LCBzdHJ1Y3QgaHBwX3NvcnRfZW50cnksIGhwcCk7CisJY29sbGFwc2VfZm4gPSBoc2UtPnNlLT5zZV9jb2xsYXBzZSA/OiBoc2UtPnNlLT5zZV9jbXA7CisJcmV0dXJuIGNvbGxhcHNlX2ZuKGEsIGIpOworfQorCitzdGF0aWMgaW50NjRfdCBfX3NvcnRfX2hwcF9zb3J0KHN0cnVjdCBwZXJmX2hwcF9mbXQgKmZtdCwKKwkJCQlzdHJ1Y3QgaGlzdF9lbnRyeSAqYSwgc3RydWN0IGhpc3RfZW50cnkgKmIpCit7CisJc3RydWN0IGhwcF9zb3J0X2VudHJ5ICpoc2U7CisJaW50NjRfdCAoKnNvcnRfZm4pKHN0cnVjdCBoaXN0X2VudHJ5ICosIHN0cnVjdCBoaXN0X2VudHJ5ICopOworCisJaHNlID0gY29udGFpbmVyX29mKGZtdCwgc3RydWN0IGhwcF9zb3J0X2VudHJ5LCBocHApOworCXNvcnRfZm4gPSBoc2UtPnNlLT5zZV9zb3J0ID86IGhzZS0+c2UtPnNlX2NtcDsKKwlyZXR1cm4gc29ydF9mbihhLCBiKTsKK30KKwogc3RhdGljIHN0cnVjdCBocHBfc29ydF9lbnRyeSAqCiBfX3NvcnRfZGltZW5zaW9uX19hbGxvY19ocHAoc3RydWN0IHNvcnRfZGltZW5zaW9uICpzZCkKIHsKQEAgLTEzMjIsOSArMTM1Myw5IEBACiAJaHNlLT5ocHAuZW50cnkgPSBfX3NvcnRfX2hwcF9lbnRyeTsKIAloc2UtPmhwcC5jb2xvciA9IE5VTEw7CiAKLQloc2UtPmhwcC5jbXAgPSBzZC0+ZW50cnktPnNlX2NtcDsKLQloc2UtPmhwcC5jb2xsYXBzZSA9IHNkLT5lbnRyeS0+c2VfY29sbGFwc2UgPyA6IHNkLT5lbnRyeS0+c2VfY21wOwotCWhzZS0+aHBwLnNvcnQgPSBzZC0+ZW50cnktPnNlX3NvcnQgPyA6IGhzZS0+aHBwLmNvbGxhcHNlOworCWhzZS0+aHBwLmNtcCA9IF9fc29ydF9faHBwX2NtcDsKKwloc2UtPmhwcC5jb2xsYXBzZSA9IF9fc29ydF9faHBwX2NvbGxhcHNlOworCWhzZS0+aHBwLnNvcnQgPSBfX3NvcnRfX2hwcF9zb3J0OwogCiAJSU5JVF9MSVNUX0hFQUQoJmhzZS0+aHBwLmxpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZoc2UtPmhwcC5zb3J0X2xpc3QpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC1lbGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wtZWxmLmMKaW5kZXggMDZmY2QxYi4uYjI0ZjlkOCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC1lbGYuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLWVsZi5jCkBAIC01NzQsMTMgKzU3NCwxNiBAQAogCWNvbnN0IGNoYXIgKmV4dCA9IHN0cnJjaHIobmFtZSwgJy4nKTsKIAljaGFyIHRtcGJ1ZltdID0gIi90bXAvcGVyZi1rbW9kLVhYWFhYWCI7CiAKLQlpZiAoKHR5cGUgIT0gRFNPX0JJTkFSWV9UWVBFX19TWVNURU1fUEFUSF9LTU9EVUxFX0NPTVAgJiYKLQkgICAgIHR5cGUgIT0gRFNPX0JJTkFSWV9UWVBFX19HVUVTVF9LTU9EVUxFX0NPTVApIHx8Ci0JICAgIHR5cGUgIT0gZHNvLT5zeW10YWJfdHlwZSkKKwlpZiAodHlwZSAhPSBEU09fQklOQVJZX1RZUEVfX1NZU1RFTV9QQVRIX0tNT0RVTEVfQ09NUCAmJgorCSAgICB0eXBlICE9IERTT19CSU5BUllfVFlQRV9fR1VFU1RfS01PRFVMRV9DT01QICYmCisJICAgIHR5cGUgIT0gRFNPX0JJTkFSWV9UWVBFX19CVUlMRF9JRF9DQUNIRSkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKCFleHQgfHwgIWlzX3N1cHBvcnRlZF9jb21wcmVzc2lvbihleHQgKyAxKSkKLQkJcmV0dXJuIC0xOworCWlmICghZXh0IHx8ICFpc19zdXBwb3J0ZWRfY29tcHJlc3Npb24oZXh0ICsgMSkpIHsKKwkJZXh0ID0gc3RycmNocihkc28tPm5hbWUsICcuJyk7CisJCWlmICghZXh0IHx8ICFpc19zdXBwb3J0ZWRfY29tcHJlc3Npb24oZXh0ICsgMSkpCisJCQlyZXR1cm4gLTE7CisJfQogCiAJZmQgPSBta3N0ZW1wKHRtcGJ1Zik7CiAJaWYgKGZkIDwgMCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwppbmRleCBjMjRjNWI4Li5hNjkwNjY4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCkBAIC0zOTYsNiArMzk2LDcgQEAKIAkJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHJiX25vZGUgKm47CisJc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUgKnM7CiAKIAlpZiAoc3ltYm9scyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKQEAgLTQwMyw3ICs0MDQsNiBAQAogCW4gPSBzeW1ib2xzLT5yYl9ub2RlOwogCiAJd2hpbGUgKG4pIHsKLQkJc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUgKnM7CiAJCWludCBjbXA7CiAKIAkJcyA9IHJiX2VudHJ5KG4sIHN0cnVjdCBzeW1ib2xfbmFtZV9yYl9ub2RlLCByYl9ub2RlKTsKQEAgLTQxNCwxMCArNDE0LDI0IEBACiAJCWVsc2UgaWYgKGNtcCA+IDApCiAJCQluID0gbi0+cmJfcmlnaHQ7CiAJCWVsc2UKLQkJCXJldHVybiAmcy0+c3ltOworCQkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIE5VTEw7CisJaWYgKG4gPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiByZXR1cm4gZmlyc3Qgc3ltYm9sIHRoYXQgaGFzIHNhbWUgbmFtZSAoaWYgYW55KSAqLworCWZvciAobiA9IHJiX3ByZXYobik7IG47IG4gPSByYl9wcmV2KG4pKSB7CisJCXN0cnVjdCBzeW1ib2xfbmFtZV9yYl9ub2RlICp0bXA7CisKKwkJdG1wID0gcmJfZW50cnkobiwgc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUsIHJiX25vZGUpOworCQlpZiAoc3RyY21wKHRtcC0+c3ltLm5hbWUsIHMtPnN5bS5uYW1lKSkKKwkJCWJyZWFrOworCisJCXMgPSB0bXA7CisJfQorCisJcmV0dXJuICZzLT5zeW07CiB9CiAKIHN0cnVjdCBzeW1ib2wgKmRzb19fZmluZF9zeW1ib2woc3RydWN0IGRzbyAqZHNvLApAQCAtNDM2LDYgKzQ1MCwxNyBAQAogCXJldHVybiBzeW1ib2xzX19uZXh0KHN5bSk7CiB9CiAKK3N0cnVjdCBzeW1ib2wgKnN5bWJvbF9fbmV4dF9ieV9uYW1lKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sX25hbWVfcmJfbm9kZSAqcyA9IGNvbnRhaW5lcl9vZihzeW0sIHN0cnVjdCBzeW1ib2xfbmFtZV9yYl9ub2RlLCBzeW0pOworCXN0cnVjdCByYl9ub2RlICpuID0gcmJfbmV4dCgmcy0+cmJfbm9kZSk7CisKKwlyZXR1cm4gbiA/ICZyYl9lbnRyeShuLCBzdHJ1Y3Qgc3ltYm9sX25hbWVfcmJfbm9kZSwgcmJfbm9kZSktPnN5bSA6IE5VTEw7Cit9CisKKyAvKgorICAqIFRldHVybnMgZmlyc3Qgc3ltYm9sIHRoYXQgbWF0Y2hlZCB3aXRoIEBuYW1lLgorICAqLwogc3RydWN0IHN5bWJvbCAqZHNvX19maW5kX3N5bWJvbF9ieV9uYW1lKHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlLAogCQkJCQljb25zdCBjaGFyICpuYW1lKQogewpAQCAtNjYwLDcgKzY4NSw3IEBACiAJc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUgPSBrbWFwcy0+bWFjaGluZTsKIAlzdHJ1Y3QgbWFwICpjdXJyX21hcCA9IG1hcDsKIAlzdHJ1Y3Qgc3ltYm9sICpwb3M7Ci0JaW50IGNvdW50ID0gMCwgbW92ZWQgPSAwOwkKKwlpbnQgY291bnQgPSAwLCBtb3ZlZCA9IDA7CiAJc3RydWN0IHJiX3Jvb3QgKnJvb3QgPSAmZHNvLT5zeW1ib2xzW21hcC0+dHlwZV07CiAJc3RydWN0IHJiX25vZGUgKm5leHQgPSByYl9maXJzdChyb290KTsKIAlpbnQga2VybmVsX3JhbmdlID0gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaCBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaAppbmRleCA5ZDYwMmU5Li4xNjUwZGNiIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCkBAIC0yMzEsNiArMjMxLDcgQEAKIAkJCQl1NjQgYWRkcik7CiBzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUsCiAJCQkJCWNvbnN0IGNoYXIgKm5hbWUpOworc3RydWN0IHN5bWJvbCAqc3ltYm9sX19uZXh0X2J5X25hbWUoc3RydWN0IHN5bWJvbCAqc3ltKTsKIAogc3RydWN0IHN5bWJvbCAqZHNvX19maXJzdF9zeW1ib2woc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUpOwogc3RydWN0IHN5bWJvbCAqZHNvX19uZXh0X3N5bWJvbChzdHJ1Y3Qgc3ltYm9sICpzeW0pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Vud2luZC1saWJ1bndpbmQuYyBiL3Rvb2xzL3BlcmYvdXRpbC91bndpbmQtbGlidW53aW5kLmMKaW5kZXggNmVkZjUzNS4uZTNjNDBhNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Vud2luZC1saWJ1bndpbmQuYworKysgYi90b29scy9wZXJmL3V0aWwvdW53aW5kLWxpYnVud2luZC5jCkBAIC0yNjYsMTQgKzI2NiwxNyBAQAogCQkJCSAgICAgdTY0ICpmZGVfY291bnQpCiB7CiAJaW50IHJldCA9IC1FSU5WQUwsIGZkOwotCXU2NCBvZmZzZXQ7CisJdTY0IG9mZnNldCA9IGRzby0+ZGF0YS5mcmFtZV9vZmZzZXQ7CiAKLQlmZCA9IGRzb19fZGF0YV9mZChkc28sIG1hY2hpbmUpOwotCWlmIChmZCA8IDApCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChvZmZzZXQgPT0gMCkgeworCQlmZCA9IGRzb19fZGF0YV9mZChkc28sIG1hY2hpbmUpOworCQlpZiAoZmQgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBDaGVjayB0aGUgLmVoX2ZyYW1lIHNlY3Rpb24gZm9yIHVud2luZGluZyBpbmZvICovCi0Jb2Zmc2V0ID0gZWxmX3NlY3Rpb25fb2Zmc2V0KGZkLCAiLmVoX2ZyYW1lX2hkciIpOworCQkvKiBDaGVjayB0aGUgLmVoX2ZyYW1lIHNlY3Rpb24gZm9yIHVud2luZGluZyBpbmZvICovCisJCW9mZnNldCA9IGVsZl9zZWN0aW9uX29mZnNldChmZCwgIi5laF9mcmFtZV9oZHIiKTsKKwkJZHNvLT5kYXRhLmZyYW1lX29mZnNldCA9IG9mZnNldDsKKwl9CiAKIAlpZiAob2Zmc2V0KQogCQlyZXQgPSB1bndpbmRfc3BlY19laGZyYW1lKGRzbywgbWFjaGluZSwgb2Zmc2V0LApAQCAtMjg3LDE0ICsyOTAsMjAgQEAKIHN0YXRpYyBpbnQgcmVhZF91bndpbmRfc3BlY19kZWJ1Z19mcmFtZShzdHJ1Y3QgZHNvICpkc28sCiAJCQkJCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCB1NjQgKm9mZnNldCkKIHsKLQlpbnQgZmQgPSBkc29fX2RhdGFfZmQoZHNvLCBtYWNoaW5lKTsKKwlpbnQgZmQ7CisJdTY0IG9mcyA9IGRzby0+ZGF0YS5mcmFtZV9vZmZzZXQ7CiAKLQlpZiAoZmQgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAob2ZzID09IDApIHsKKwkJZmQgPSBkc29fX2RhdGFfZmQoZHNvLCBtYWNoaW5lKTsKKwkJaWYgKGZkIDwgMCkKKwkJCXJldHVybiAtRUlOVkFMOwogCi0JLyogQ2hlY2sgdGhlIC5kZWJ1Z19mcmFtZSBzZWN0aW9uIGZvciB1bndpbmRpbmcgaW5mbyAqLwotCSpvZmZzZXQgPSBlbGZfc2VjdGlvbl9vZmZzZXQoZmQsICIuZGVidWdfZnJhbWUiKTsKKwkJLyogQ2hlY2sgdGhlIC5kZWJ1Z19mcmFtZSBzZWN0aW9uIGZvciB1bndpbmRpbmcgaW5mbyAqLworCQlvZnMgPSBlbGZfc2VjdGlvbl9vZmZzZXQoZmQsICIuZGVidWdfZnJhbWUiKTsKKwkJZHNvLT5kYXRhLmZyYW1lX29mZnNldCA9IG9mczsKKwl9CiAKKwkqb2Zmc2V0ID0gb2ZzOwogCWlmICgqb2Zmc2V0KQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvYWNwaS9jb21tb24vY21mc2l6ZS5jIGIvdG9vbHMvcG93ZXIvYWNwaS9jb21tb24vY21mc2l6ZS5jCmluZGV4IGY0Yjk1MzMuLmVlYzY4ODAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bvd2VyL2FjcGkvY29tbW9uL2NtZnNpemUuYworKysgYi90b29scy9wb3dlci9hY3BpL2NvbW1vbi9jbWZzaXplLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9hY3BpL2NvbW1vbi9nZXRvcHQuYyBiL3Rvb2xzL3Bvd2VyL2FjcGkvY29tbW9uL2dldG9wdC5jCmluZGV4IDJmMGYzNGEuLjVkYTEyOWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bvd2VyL2FjcGkvY29tbW9uL2dldG9wdC5jCisrKyBiL3Rvb2xzL3Bvd2VyL2FjcGkvY29tbW9uL2dldG9wdC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvYWNwaS9vc19zcGVjaWZpYy9zZXJ2aWNlX2xheWVycy9vc2xpYmNmcy5jIGIvdG9vbHMvcG93ZXIvYWNwaS9vc19zcGVjaWZpYy9zZXJ2aWNlX2xheWVycy9vc2xpYmNmcy5jCmluZGV4IGMxM2ZmOWMuLmI1MWU0MGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bvd2VyL2FjcGkvb3Nfc3BlY2lmaWMvc2VydmljZV9sYXllcnMvb3NsaWJjZnMuYworKysgYi90b29scy9wb3dlci9hY3BpL29zX3NwZWNpZmljL3NlcnZpY2VfbGF5ZXJzL29zbGliY2ZzLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9hY3BpL29zX3NwZWNpZmljL3NlcnZpY2VfbGF5ZXJzL29zbGludXh0YmwuYyBiL3Rvb2xzL3Bvd2VyL2FjcGkvb3Nfc3BlY2lmaWMvc2VydmljZV9sYXllcnMvb3NsaW51eHRibC5jCmluZGV4IDBkYzI0ODUuLjkyZjFmZDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bvd2VyL2FjcGkvb3Nfc3BlY2lmaWMvc2VydmljZV9sYXllcnMvb3NsaW51eHRibC5jCisrKyBiL3Rvb2xzL3Bvd2VyL2FjcGkvb3Nfc3BlY2lmaWMvc2VydmljZV9sYXllcnMvb3NsaW51eHRibC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvYWNwaS9vc19zcGVjaWZpYy9zZXJ2aWNlX2xheWVycy9vc3VuaXhkaXIuYyBiL3Rvb2xzL3Bvd2VyL2FjcGkvb3Nfc3BlY2lmaWMvc2VydmljZV9sYXllcnMvb3N1bml4ZGlyLmMKaW5kZXggNzMzZjllNC4uZTE1M2ZjYiAxMDA2NDQKLS0tIGEvdG9vbHMvcG93ZXIvYWNwaS9vc19zcGVjaWZpYy9zZXJ2aWNlX2xheWVycy9vc3VuaXhkaXIuYworKysgYi90b29scy9wb3dlci9hY3BpL29zX3NwZWNpZmljL3NlcnZpY2VfbGF5ZXJzL29zdW5peGRpci5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvYWNwaS9vc19zcGVjaWZpYy9zZXJ2aWNlX2xheWVycy9vc3VuaXhtYXAuYyBiL3Rvb2xzL3Bvd2VyL2FjcGkvb3Nfc3BlY2lmaWMvc2VydmljZV9sYXllcnMvb3N1bml4bWFwLmMKaW5kZXggOTliNDdiNi4uMzg1M2E3MyAxMDA2NDQKLS0tIGEvdG9vbHMvcG93ZXIvYWNwaS9vc19zcGVjaWZpYy9zZXJ2aWNlX2xheWVycy9vc3VuaXhtYXAuYworKysgYi90b29scy9wb3dlci9hY3BpL29zX3NwZWNpZmljL3NlcnZpY2VfbGF5ZXJzL29zdW5peG1hcC5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvYWNwaS9vc19zcGVjaWZpYy9zZXJ2aWNlX2xheWVycy9vc3VuaXh4Zi5jIGIvdG9vbHMvcG93ZXIvYWNwaS9vc19zcGVjaWZpYy9zZXJ2aWNlX2xheWVycy9vc3VuaXh4Zi5jCmluZGV4IDdjY2IwNzMuLjY4NThjMDggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bvd2VyL2FjcGkvb3Nfc3BlY2lmaWMvc2VydmljZV9sYXllcnMvb3N1bml4eGYuYworKysgYi90b29scy9wb3dlci9hY3BpL29zX3NwZWNpZmljL3NlcnZpY2VfbGF5ZXJzL29zdW5peHhmLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9hY3BpL3Rvb2xzL2FjcGlkdW1wL2FjcGlkdW1wLmggYi90b29scy9wb3dlci9hY3BpL3Rvb2xzL2FjcGlkdW1wL2FjcGlkdW1wLmgKaW5kZXggYTJkMzdkNi4uODRiZGVmMCAxMDA2NDQKLS0tIGEvdG9vbHMvcG93ZXIvYWNwaS90b29scy9hY3BpZHVtcC9hY3BpZHVtcC5oCisrKyBiL3Rvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvYWNwaWR1bXAuaApAQCAtNSw3ICs1LDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTQsIEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE1LCBJbnRlbCBDb3JwLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvYXBkdW1wLmMgYi90b29scy9wb3dlci9hY3BpL3Rvb2xzL2FjcGlkdW1wL2FwZHVtcC5jCmluZGV4IDI0ZDMyOTY4Li5jNzM2YWRmIDEwMDY0NAotLS0gYS90b29scy9wb3dlci9hY3BpL3Rvb2xzL2FjcGlkdW1wL2FwZHVtcC5jCisrKyBiL3Rvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvYXBkdW1wLmMKQEAgLTUsNyArNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDE0LCBJbnRlbCBDb3JwLgorICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNSwgSW50ZWwgQ29ycC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9hY3BpL3Rvb2xzL2FjcGlkdW1wL2FwZmlsZXMuYyBiL3Rvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvYXBmaWxlcy5jCmluZGV4IGQ0NzAwNDYuLjhmMmZlMTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvYXBmaWxlcy5jCisrKyBiL3Rvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvYXBmaWxlcy5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvYWNwaS90b29scy9hY3BpZHVtcC9hcG1haW4uYyBiL3Rvb2xzL3Bvd2VyL2FjcGkvdG9vbHMvYWNwaWR1bXAvYXBtYWluLmMKaW5kZXggODUzYjRkYS4uZDBiYTY1MyAxMDA2NDQKLS0tIGEvdG9vbHMvcG93ZXIvYWNwaS90b29scy9hY3BpZHVtcC9hcG1haW4uYworKysgYi90b29scy9wb3dlci9hY3BpL3Rvb2xzL2FjcGlkdW1wL2FwbWFpbi5jCkBAIC01LDcgKzUsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAwIC0gMjAxNCwgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwMCAtIDIwMTUsIEludGVsIENvcnAuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvTWFrZWZpbGUgYi90b29scy9wb3dlci9jcHVwb3dlci9NYWtlZmlsZQppbmRleCAyZTJiYTJlLi4zZWQ3YzA0IDEwMDY0NAotLS0gYS90b29scy9wb3dlci9jcHVwb3dlci9NYWtlZmlsZQorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9NYWtlZmlsZQpAQCAtMjA5LDcgKzIwOSw3IEBACiAKICQoT1VUUFVUKWNwdXBvd2VyOiAkKFVUSUxfT0JKUykgJChPVVRQVVQpbGliY3B1cG93ZXIuc28uJChMSUJfTUFKKQogCSQoRUNITykgIiAgQ0MgICAgICAiICRACi0JJChRVUlFVCkgJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgJChVVElMX09CSlMpIC1sY3B1cG93ZXIgLWxydCAtbHBjaSAtTCQoT1VUUFVUKSAtbyAkQAorCSQoUVVJRVQpICQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpICQoVVRJTF9PQkpTKSAtbGNwdXBvd2VyIC1XbCwtcnBhdGg9Li8gLWxydCAtbHBjaSAtTCQoT1VUUFVUKSAtbyAkQAogCSQoUVVJRVQpICQoU1RSSVBDTUQpICRACiAKICQoT1VUUFVUKXBvLyQoUEFDS0FHRSkucG90OiAkKFVUSUxfU1JDKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIveDg2L3R1cmJvc3RhdC90dXJib3N0YXQuOCBiL3Rvb2xzL3Bvd2VyL3g4Ni90dXJib3N0YXQvdHVyYm9zdGF0LjgKaW5kZXggNTZiZmI1Mi4uOWI5NTA2OSAxMDA2NDQKLS0tIGEvdG9vbHMvcG93ZXIveDg2L3R1cmJvc3RhdC90dXJib3N0YXQuOAorKysgYi90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC44CkBAIC0xMiwxNiArMTIsMTYgQEAKIC5SQiBbICJcLWkgaW50ZXJ2YWxfc2VjIiBdCiAuU0ggREVTQ1JJUFRJT04KIFxmQnR1cmJvc3RhdCBcZlAgcmVwb3J0cyBwcm9jZXNzb3IgdG9wb2xvZ3ksIGZyZXF1ZW5jeSwKLWlkbGUgcG93ZXItc3RhdGUgc3RhdGlzdGljcywgdGVtcGVyYXR1cmUgYW5kIHBvd2VyIG9uIG1vZGVybiBYODYgcHJvY2Vzc29ycy4KLUVpdGhlciBcZkJjb21tYW5kXGZQIGlzIGZvcmtlZCBhbmQgc3RhdGlzdGljcyBhcmUgcHJpbnRlZAotdXBvbiBpdHMgY29tcGxldGlvbiwgb3Igc3RhdGlzdGljcyBhcmUgcHJpbnRlZCBwZXJpb2RpY2FsbHkuCitpZGxlIHBvd2VyLXN0YXRlIHN0YXRpc3RpY3MsIHRlbXBlcmF0dXJlIGFuZCBwb3dlciBvbiBYODYgcHJvY2Vzc29ycy4KK1RoZXJlIGFyZSB0d28gd2F5cyB0byBpbnZva2UgdHVyYm9zdGF0LgorVGhlIGZpcnN0IG1ldGhvZCBpcyB0byBzdXBwbHkgYQorXGZCY29tbWFuZFxmUCwgd2hpY2ggaXMgZm9ya2VkIGFuZCBzdGF0aXN0aWNzIGFyZSBwcmludGVkCit1cG9uIGl0cyBjb21wbGV0aW9uLgorVGhlIHNlY29uZCBtZXRob2QgaXMgdG8gb21pdCB0aGUgY29tbWFuZCwKK2FuZCB0dXJib2RzdGF0IHdpbGwgcHJpbnQgc3RhdGlzdGljcyBldmVyeSA1IHNlY29uZHMuCitUaGUgNS1zZWNvbmQgaW50ZXJ2YWwgY2FuIGNoYW5nZWQgdXNpbmcgdGhlIC1pIG9wdGlvbi4KIAotXGZCdHVyYm9zdGF0IFxmUAotbXVzdCBiZSBydW4gb24gcm9vdCwgYW5kCi1taW5pbWFsbHkgcmVxdWlyZXMgdGhhdCB0aGUgcHJvY2Vzc29yCi1zdXBwb3J0cyBhbiAiaW52YXJpYW50IiBUU0MsIHBsdXMgdGhlIEFQRVJGIGFuZCBNUEVSRiBNU1JzLgotQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyByZXBvcnRlZCBkZXBlbmRpbmcgb24gaGFyZHdhcmUgY291bnRlciBzdXBwb3J0LgotCitTb21lIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFsYmUgb24gb2xkZXIgcHJvY2Vzc29ycy4KIC5TUyBPcHRpb25zCiBUaGUgXGZCLXBcZlAgb3B0aW9uIGxpbWl0cyBvdXRwdXQgdG8gdGhlIDFzdCB0aHJlYWQgaW4gMXN0IGNvcmUgb2YgZWFjaCBwYWNrYWdlLgogLlBQCkBAIC0xMzAsMTIgKzEzMCwxMyBAQAogIC4uLgogLmZpCiBUaGUgXGZCbWF4IGVmZmljaWVuY3lcZlAgZnJlcXVlbmN5LCBhLmsuYS4gTG93IEZyZXF1ZW5jeSBNb2RlLCBpcyB0aGUgZnJlcXVlbmN5Ci1hdmFpbGFibGUgYXQgdGhlIG1pbmltdW0gcGFja2FnZSB2b2x0YWdlLiAgVGhlIFxmQlRTQyBmcmVxdWVuY3lcZlAgaXMgdGhlIG5vbWluYWwKLW1heGltdW0gZnJlcXVlbmN5IG9mIHRoZSBwcm9jZXNzb3IgaWYgdHVyYm8tbW9kZSB3ZXJlIG5vdCBhdmFpbGFibGUuICBUaGlzIGZyZXF1ZW5jeQorYXZhaWxhYmxlIGF0IHRoZSBtaW5pbXVtIHBhY2thZ2Ugdm9sdGFnZS4gIFRoZSBcZkJUU0MgZnJlcXVlbmN5XGZQIGlzIHRoZSBiYXNlCitmcmVxdWVuY3kgb2YgdGhlIHByb2Nlc3NvciAtLSB0aGlzIHNob3VsZCBtYXRjaCB0aGUgYnJhbmQgc3RyaW5nCitpbiAvcHJvYy9jcHVpbmZvLiAgVGhpcyBiYXNlIGZyZXF1ZW5jeQogc2hvdWxkIGJlIHN1c3RhaW5hYmxlIG9uIGFsbCBDUFVzIGluZGVmaW5pdGVseSwgZ2l2ZW4gbm9taW5hbCBwb3dlciBhbmQgY29vbGluZy4KIFRoZSByZW1haW5pbmcgcm93cyBzaG93IHdoYXQgbWF4aW11bSB0dXJibyBmcmVxdWVuY3kgaXMgcG9zc2libGUKLWRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIGlkbGUgY29yZXMuICBOb3RlIHRoYXQgdGhpcyBpbmZvcm1hdGlvbiBpcwotbm90IGF2YWlsYWJsZSBvbiBhbGwgcHJvY2Vzc29ycy4KK2RlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIGlkbGUgY29yZXMuICBOb3RlIHRoYXQgbm90IGFsbCBpbmZvcm1hdGlvbiBpcworYXZhaWxhYmxlIG9uIGFsbCBwcm9jZXNzb3JzLgogLlNIIEZPUksgRVhBTVBMRQogSWYgdHVyYm9zdGF0IGlzIGludm9rZWQgd2l0aCBhIGNvbW1hbmQsIGl0IHdpbGwgZm9yayB0aGF0IGNvbW1hbmQKIGFuZCBvdXRwdXQgdGhlIHN0YXRpc3RpY3MgZ2F0aGVyZWQgd2hlbiB0aGUgY29tbWFuZCBleGl0cy4KQEAgLTE3Niw2ICsxNzcsMTEgQEAKIAogLkIgInR1cmJvc3RhdCAiCiBtdXN0IGJlIHJ1biBhcyByb290LgorQWx0ZXJuYXRpdmVseSwgbm9uLXJvb3QgdXNlcnMgY2FuIGJlIGVuYWJsZWQgdG8gcnVuIHR1cmJvc3RhdCB0aGlzIHdheToKKworIyBzZXRjYXAgY2FwX3N5c19yYXdpbz1lcCAuL3R1cmJvc3RhdAorCisjIGNobW9kICtyIC9kZXYvY3B1LyovbXNyCiAKIC5CICJ0dXJib3N0YXQgIgogcmVhZHMgaGFyZHdhcmUgY291bnRlcnMsIGJ1dCBkb2Vzbid0IHdyaXRlIHRoZW0uCkBAIC0xODQsMTUgKzE5MCwzMyBAQAogCiBcZkJ0dXJib3N0YXQgXGZQCiBtYXkgd29yayBwb29ybHkgb24gTGludXgtMi42LjIwIHRocm91Z2ggMi42LjI5LAotYXMgXGZCYWNwaS1jcHVmcmVxIFxmUHBlcmlvZGljYWxseSBjbGVhcmVkIHRoZSBBUEVSRiBhbmQgTVBFUkYKK2FzIFxmQmFjcGktY3B1ZnJlcSBcZlBwZXJpb2RpY2FsbHkgY2xlYXJlZCB0aGUgQVBFUkYgYW5kIE1QRVJGIE1TUnMKIGluIHRob3NlIGtlcm5lbHMuCiAKLUlmIHRoZSBUU0MgY29sdW1uIGRvZXMgbm90IG1ha2Ugc2Vuc2UsIHRoZW4KLXRoZSBvdGhlciBudW1iZXJzIHdpbGwgYWxzbyBtYWtlIG5vIHNlbnNlLgotVHVyYm9zdGF0IGlzIGxpZ2h0d2VpZ2h0LCBhbmQgaXRzIGRhdGEgY29sbGVjdGlvbiBpcyBub3QgYXRvbWljLgotVGhlc2UgaXNzdWVzIGFyZSB1c3VhbGx5IGNhdXNlZCBieSBhbiBleHRyZW1lbHkgc2hvcnQgbWVhc3VyZW1lbnQKLWludGVydmFsIChtdWNoIGxlc3MgdGhhbiAxIHNlY29uZCksIG9yIHN5c3RlbSBhY3Rpdml0eSB0aGF0IHByZXZlbnRzCi10dXJib3N0YXQgZnJvbSBiZWluZyBhYmxlIHRvIHJ1biBvbiBhbGwgQ1BVUyB0byBxdWlja2x5IGNvbGxlY3QgZGF0YS4KK0FWR19NSHogPSBBUEVSRl9kZWx0YS9tZWFzdXJlbWVudF9pbnRlcnZhbC4gIFRoaXMgaXMgdGhlIGFjdHVhbAorbnVtYmVyIG9mIGVsYXBzZWQgY3ljbGVzIGRpdmlkZWQgYnkgdGhlIGVudGlyZSBzYW1wbGUgaW50ZXJ2YWwgLS0KK2luY2x1ZGluZyBpZGxlIHRpbWUuICBOb3RlIHRoYXQgdGhpcyBjYWxjdWxhdGlvbiBpcyByZXNpbGlhbnQKK3RvIHN5c3RlbXMgbGFja2luZyBhIG5vbi1zdG9wIFRTQy4KKworVFNDX01IeiA9IFRTQ19kZWx0YS9tZWFzdXJlbWVudF9pbnRlcnZhbC4KK09uIGEgc3lzdGVtIHdpdGggYW4gaW52YXJpYW50IFRTQywgdGhpcyB2YWx1ZSB3aWxsIGJlIGNvbnN0YW50CithbmQgd2lsbCBjbG9zZWx5IG1hdGNoIHRoZSBiYXNlIGZyZXF1ZW5jeSB2YWx1ZSBzaG93bgoraW4gdGhlIGJyYW5kIHN0cmluZyBpbiAvcHJvYy9jcHVpbmZvLiAgT24gYSBzeXN0ZW0gd2hlcmUKK3RoZSBUU0Mgc3RvcHMgaW4gaWRsZSwgVFNDX01IeiB3aWxsIGRyb3AKK2JlbG93IHRoZSBwcm9jZXNzb3IncyBiYXNlIGZyZXF1ZW5jeS4KKworJUJ1c3kgPSBNUEVSRl9kZWx0YS9UU0NfZGVsdGEKKworQnp5X01IeiA9IFRTQ19kZWx0YS9BUEVSRl9kZWx0YS9NUEVSRl9kZWx0YS9tZWFzdXJlbWVudF9pbnRlcnZhbAorCitOb3RlIHRoYXQgdGhlc2UgY2FsY3VsYXRpb25zIGRlcGVuZCBvbiBUU0NfZGVsdGEsIHNvIHRoZXkKK2FyZSBub3QgcmVsaWFibGUgZHVyaW5nIGludGVydmFscyB3aGVuIFRTQ19NSHogaXMgbm90IHJ1bm5pbmcgYXQgdGhlIGJhc2UgZnJlcXVlbmN5LgorCitUdXJib3N0YXQgZGF0YSBjb2xsZWN0aW9uIGlzIG5vdCBhdG9taWMuCitFeHRyZW1lbHkgc2hvcnQgbWVhc3VyZW1lbnQgaW50ZXJ2YWxzIChtdWNoIGxlc3MgdGhhbiAxIHNlY29uZCksCitvciBzeXN0ZW0gYWN0aXZpdHkgdGhhdCBwcmV2ZW50cyB0dXJib3N0YXQgZnJvbSBiZWluZyBhYmxlCit0byBydW4gb24gYWxsIENQVVMgdG8gcXVpY2tseSBjb2xsZWN0IGRhdGEsIHdpbGwgcmVzdWx0IGluCitpbmNvbnNpc3RlbnQgcmVzdWx0cy4KIAogVGhlIEFQRVJGLCBNUEVSRiBNU1JzIGFyZSBkZWZpbmVkIHRvIGNvdW50IG5vbi1oYWx0ZWQgY3ljbGVzLgogQWx0aG91Z2ggaXQgaXMgbm90IGd1YXJhbnRlZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSwgdHVyYm9zdGF0IGFzc3VtZXMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL3g4Ni90dXJib3N0YXQvdHVyYm9zdGF0LmMgYi90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC5jCmluZGV4IDViMWI4MDcuLmEwMmMwMmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bvd2VyL3g4Ni90dXJib3N0YXQvdHVyYm9zdGF0LmMKKysrIGIvdG9vbHMvcG93ZXIveDg2L3R1cmJvc3RhdC90dXJib3N0YXQuYwpAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c2NoZWQuaD4KICNpbmNsdWRlIDxjcHVpZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgogCiBjaGFyICpwcm9jX3N0YXQgPSAiL3Byb2Mvc3RhdCI7CiB1bnNpZ25lZCBpbnQgaW50ZXJ2YWxfc2VjID0gNTsJLyogc2V0IHdpdGggLWkgaW50ZXJ2YWxfc2VjICovCkBAIC01OSw4ICs2MSw4IEBACiB1bnNpZ25lZCBpbnQgdW5pdHMgPSAxMDAwMDAwOwkvKiBNSHogZXRjICovCiB1bnNpZ25lZCBpbnQgZ2VudWluZV9pbnRlbDsKIHVuc2lnbmVkIGludCBoYXNfaW52YXJpYW50X3RzYzsKLXVuc2lnbmVkIGludCBkb19uZWhhbGVtX3BsYXRmb3JtX2luZm87Ci11bnNpZ25lZCBpbnQgZG9fbmVoYWxlbV90dXJib19yYXRpb19saW1pdDsKK3Vuc2lnbmVkIGludCBkb19uaG1fcGxhdGZvcm1faW5mbzsKK3Vuc2lnbmVkIGludCBkb19uaG1fdHVyYm9fcmF0aW9fbGltaXQ7CiB1bnNpZ25lZCBpbnQgZG9faXZ0X3R1cmJvX3JhdGlvX2xpbWl0OwogdW5zaWduZWQgaW50IGV4dHJhX21zcl9vZmZzZXQzMjsKIHVuc2lnbmVkIGludCBleHRyYV9tc3Jfb2Zmc2V0NjQ7CkBAIC04MSw2ICs4Myw5IEBACiB1bnNpZ25lZCBpbnQgdGNjX2FjdGl2YXRpb25fdGVtcF9vdmVycmlkZTsKIGRvdWJsZSByYXBsX3Bvd2VyX3VuaXRzLCByYXBsX2VuZXJneV91bml0cywgcmFwbF90aW1lX3VuaXRzOwogZG91YmxlIHJhcGxfam91bGVfY291bnRlcl9yYW5nZTsKK3Vuc2lnbmVkIGludCBkb19jb3JlX3BlcmZfbGltaXRfcmVhc29uczsKK3Vuc2lnbmVkIGludCBkb19nZnhfcGVyZl9saW1pdF9yZWFzb25zOwordW5zaWduZWQgaW50IGRvX3JpbmdfcGVyZl9saW1pdF9yZWFzb25zOwogCiAjZGVmaW5lIFJBUExfUEtHCQkoMSA8PCAwKQogCQkJCQkvKiAweDYxMCBNU1JfUEtHX1BPV0VSX0xJTUlUICovCkBAIC0yNTEsMTUgKzI1NiwxMyBAQAogCXNwcmludGYocGF0aG5hbWUsICIvZGV2L2NwdS8lZC9tc3IiLCBjcHUpOwogCWZkID0gb3BlbihwYXRobmFtZSwgT19SRE9OTFkpOwogCWlmIChmZCA8IDApCi0JCXJldHVybiAtMTsKKwkJZXJyKC0xLCAiJXMgb3BlbiBmYWlsZWQsIHRyeSBjaG93biBvciBjaG1vZCArciAvZGV2L2NwdS8qL21zciwgb3IgcnVuIGFzIHJvb3QiLCBwYXRobmFtZSk7CiAKIAlyZXR2YWwgPSBwcmVhZChmZCwgbXNyLCBzaXplb2YgKm1zciwgb2Zmc2V0KTsKIAljbG9zZShmZCk7CiAKLQlpZiAocmV0dmFsICE9IHNpemVvZiAqbXNyKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXMgb2Zmc2V0IDB4JWxseCByZWFkIGZhaWxlZFxuIiwgcGF0aG5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0KTsKLQkJcmV0dXJuIC0xOwotCX0KKwlpZiAocmV0dmFsICE9IHNpemVvZiAqbXNyKQorCQllcnIoLTEsICIlcyBvZmZzZXQgMHglbGx4IHJlYWQgZmFpbGVkIiwgcGF0aG5hbWUsICh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMjgxLDcgKzI4NCw3IEBACiAJCW91dHAgKz0gc3ByaW50ZihvdXRwLCAiICAgICBDUFUiKTsKIAlpZiAoaGFzX2FwZXJmKQogCQlvdXRwICs9IHNwcmludGYob3V0cCwgIiBBdmdfTUh6Iik7Ci0JaWYgKGRvX25obV9jc3RhdGVzKQorCWlmIChoYXNfYXBlcmYpCiAJCW91dHAgKz0gc3ByaW50ZihvdXRwLCAiICAgJSVCdXN5Iik7CiAJaWYgKGhhc19hcGVyZikKIAkJb3V0cCArPSBzcHJpbnRmKG91dHAsICIgQnp5X01IeiIpOwpAQCAtMzM3LDcgKzM0MCw3IEBACiAJCQlvdXRwICs9IHNwcmludGYob3V0cCwgIiAgIFBLR18lJSIpOwogCQlpZiAoZG9fcmFwbCAmIFJBUExfRFJBTV9QRVJGX1NUQVRVUykKIAkJCW91dHAgKz0gc3ByaW50ZihvdXRwLCAiICAgUkFNXyUlIik7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKGRvX3JhcGwgJiYgcmFwbF9qb3VsZXMpIHsKIAkJaWYgKGRvX3JhcGwgJiBSQVBMX1BLRykKIAkJCW91dHAgKz0gc3ByaW50ZihvdXRwLCAiICAgUGtnX0oiKTsKIAkJaWYgKGRvX3JhcGwgJiBSQVBMX0NPUkVTKQpAQCAtNDU3LDI1ICs0NjAsMjUgQEAKIAkJCW91dHAgKz0gc3ByaW50ZihvdXRwLCAiJThkIiwgdC0+Y3B1X2lkKTsKIAl9CiAKLQkvKiBBdmdNSHogKi8KKwkvKiBBdmdfTUh6ICovCiAJaWYgKGhhc19hcGVyZikKIAkJb3V0cCArPSBzcHJpbnRmKG91dHAsICIlOC4wZiIsCiAJCQkxLjAgLyB1bml0cyAqIHQtPmFwZXJmIC8gaW50ZXJ2YWxfZmxvYXQpOwogCi0JLyogJWMwICovCi0JaWYgKGRvX25obV9jc3RhdGVzKSB7CisJLyogJUJ1c3kgKi8KKwlpZiAoaGFzX2FwZXJmKSB7CiAJCWlmICghc2tpcF9jMCkKIAkJCW91dHAgKz0gc3ByaW50ZihvdXRwLCAiJTguMmYiLCAxMDAuMCAqIHQtPm1wZXJmL3QtPnRzYyk7CiAJCWVsc2UKIAkJCW91dHAgKz0gc3ByaW50ZihvdXRwLCAiKioqKioqKioiKTsKIAl9CiAKLQkvKiBCenlNSHogKi8KKwkvKiBCenlfTUh6ICovCiAJaWYgKGhhc19hcGVyZikKIAkJb3V0cCArPSBzcHJpbnRmKG91dHAsICIlOC4wZiIsCiAJCQkxLjAgKiB0LT50c2MgLyB1bml0cyAqIHQtPmFwZXJmIC8gdC0+bXBlcmYgLyBpbnRlcnZhbF9mbG9hdCk7CiAKLQkvKiBUU0MgKi8KKwkvKiBUU0NfTUh6ICovCiAJb3V0cCArPSBzcHJpbnRmKG91dHAsICIlOC4wZiIsIDEuMCAqIHQtPnRzYy91bml0cy9pbnRlcnZhbF9mbG9hdCk7CiAKIAkvKiBTTUkgKi8KQEAgLTU2MSw3ICs1NjQsNyBAQAogCQkJb3V0cCArPSBzcHJpbnRmKG91dHAsIGZtdDgsIDEwMC4wICogcC0+cmFwbF9wa2dfcGVyZl9zdGF0dXMgKiByYXBsX3RpbWVfdW5pdHMgLyBpbnRlcnZhbF9mbG9hdCk7CiAJCWlmIChkb19yYXBsICYgUkFQTF9EUkFNX1BFUkZfU1RBVFVTKQogCQkJb3V0cCArPSBzcHJpbnRmKG91dHAsIGZtdDgsIDEwMC4wICogcC0+cmFwbF9kcmFtX3BlcmZfc3RhdHVzICogcmFwbF90aW1lX3VuaXRzIC8gaW50ZXJ2YWxfZmxvYXQpOwotCX0gZWxzZSB7CisJfSBlbHNlIGlmIChkb19yYXBsICYmIHJhcGxfam91bGVzKSB7CiAJCWlmIChkb19yYXBsICYgUkFQTF9QS0cpCiAJCQlvdXRwICs9IHNwcmludGYob3V0cCwgZm10OCwKIAkJCQkJcC0+ZW5lcmd5X3BrZyAqIHJhcGxfZW5lcmd5X3VuaXRzKTsKQEAgLTU3OCw4ICs1ODEsOCBAQAogCQkJb3V0cCArPSBzcHJpbnRmKG91dHAsIGZtdDgsIDEwMC4wICogcC0+cmFwbF9wa2dfcGVyZl9zdGF0dXMgKiByYXBsX3RpbWVfdW5pdHMgLyBpbnRlcnZhbF9mbG9hdCk7CiAJCWlmIChkb19yYXBsICYgUkFQTF9EUkFNX1BFUkZfU1RBVFVTKQogCQkJb3V0cCArPSBzcHJpbnRmKG91dHAsIGZtdDgsIDEwMC4wICogcC0+cmFwbF9kcmFtX3BlcmZfc3RhdHVzICogcmFwbF90aW1lX3VuaXRzIC8gaW50ZXJ2YWxfZmxvYXQpOwotCW91dHAgKz0gc3ByaW50ZihvdXRwLCBmbXQ4LCBpbnRlcnZhbF9mbG9hdCk7CiAKKwkJb3V0cCArPSBzcHJpbnRmKG91dHAsIGZtdDgsIGludGVydmFsX2Zsb2F0KTsKIAl9CiBkb25lOgogCW91dHAgKz0gc3ByaW50ZihvdXRwLCAiXG4iKTsKQEAgLTY3MCwyNCArNjczLDI2IEBACiAKIAlvbGQtPmMxID0gbmV3LT5jMSAtIG9sZC0+YzE7CiAKLQlpZiAoKG5ldy0+YXBlcmYgPiBvbGQtPmFwZXJmKSAmJiAobmV3LT5tcGVyZiA+IG9sZC0+bXBlcmYpKSB7Ci0JCW9sZC0+YXBlcmYgPSBuZXctPmFwZXJmIC0gb2xkLT5hcGVyZjsKLQkJb2xkLT5tcGVyZiA9IG5ldy0+bXBlcmYgLSBvbGQtPm1wZXJmOwotCX0gZWxzZSB7CisJaWYgKGhhc19hcGVyZikgeworCQlpZiAoKG5ldy0+YXBlcmYgPiBvbGQtPmFwZXJmKSAmJiAobmV3LT5tcGVyZiA+IG9sZC0+bXBlcmYpKSB7CisJCQlvbGQtPmFwZXJmID0gbmV3LT5hcGVyZiAtIG9sZC0+YXBlcmY7CisJCQlvbGQtPm1wZXJmID0gbmV3LT5tcGVyZiAtIG9sZC0+bXBlcmY7CisJCX0gZWxzZSB7CiAKLQkJaWYgKCFhcGVyZl9tcGVyZl91bnN0YWJsZSkgewotCQkJZnByaW50ZihzdGRlcnIsICIlczogQVBFUkYgb3IgTVBFUkYgd2VudCBiYWNrd2FyZHMgKlxuIiwgcHJvZ25hbWUpOwotCQkJZnByaW50ZihzdGRlcnIsICIqIEZyZXF1ZW5jeSByZXN1bHRzIGRvIG5vdCBjb3ZlciBlbnRpcmUgaW50ZXJ2YWwgKlxuIik7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIiogZml4IHRoaXMgYnkgcnVubmluZyBMaW51eC0yLjYuMzAgb3IgbGF0ZXIgKlxuIik7CisJCQlpZiAoIWFwZXJmX21wZXJmX3Vuc3RhYmxlKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICIlczogQVBFUkYgb3IgTVBFUkYgd2VudCBiYWNrd2FyZHMgKlxuIiwgcHJvZ25hbWUpOworCQkJCWZwcmludGYoc3RkZXJyLCAiKiBGcmVxdWVuY3kgcmVzdWx0cyBkbyBub3QgY292ZXIgZW50aXJlIGludGVydmFsICpcbiIpOworCQkJCWZwcmludGYoc3RkZXJyLCAiKiBmaXggdGhpcyBieSBydW5uaW5nIExpbnV4LTIuNi4zMCBvciBsYXRlciAqXG4iKTsKIAotCQkJYXBlcmZfbXBlcmZfdW5zdGFibGUgPSAxOworCQkJCWFwZXJmX21wZXJmX3Vuc3RhYmxlID0gMTsKKwkJCX0KKwkJCS8qCisJCQkgKiBtcGVyZiBkZWx0YSBpcyBsaWtlbHkgYSBodWdlICJwb3NpdGl2ZSIgbnVtYmVyCisJCQkgKiBjYW4gbm90IHVzZSBpdCBmb3IgY2FsY3VsYXRpbmcgYzAgdGltZQorCQkJICovCisJCQlza2lwX2MwID0gMTsKKwkJCXNraXBfYzEgPSAxOwogCQl9Ci0JCS8qCi0JCSAqIG1wZXJmIGRlbHRhIGlzIGxpa2VseSBhIGh1Z2UgInBvc2l0aXZlIiBudW1iZXIKLQkJICogY2FuIG5vdCB1c2UgaXQgZm9yIGNhbGN1bGF0aW5nIGMwIHRpbWUKLQkJICovCi0JCXNraXBfYzAgPSAxOwotCQlza2lwX2MxID0gMTsKIAl9CiAKIApAQCAtMTAxOSw3ICsxMDI0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgbXNyOwogCXVuc2lnbmVkIGludCByYXRpbzsKIAotCWlmICghZG9fbmVoYWxlbV9wbGF0Zm9ybV9pbmZvKQorCWlmICghZG9fbmhtX3BsYXRmb3JtX2luZm8pCiAJCXJldHVybjsKIAogCWdldF9tc3IoMCwgTVNSX05ITV9QTEFURk9STV9JTkZPLCAmbXNyKTsKQEAgLTExMzIsNyArMTEzNyw3IEBACiAJfQogCWZwcmludGYoc3RkZXJyLCAiKVxuIik7CiAKLQlpZiAoIWRvX25laGFsZW1fdHVyYm9fcmF0aW9fbGltaXQpCisJaWYgKCFkb19uaG1fdHVyYm9fcmF0aW9fbGltaXQpCiAJCXJldHVybjsKIAogCWdldF9tc3IoMCwgTVNSX05ITV9UVVJCT19SQVRJT19MSU1JVCwgJm1zcik7CkBAIC0xMTc4LDYgKzExODMsNyBAQAogCWlmIChyYXRpbykKIAkJZnByaW50ZihzdGRlcnIsICIlZCAqICUuMGYgPSAlLjBmIE1IeiBtYXggdHVyYm8gMSBhY3RpdmUgY29yZXNcbiIsCiAJCQlyYXRpbywgYmNsaywgcmF0aW8gKiBiY2xrKTsKKwogfQogCiB2b2lkIGZyZWVfYWxsX2J1ZmZlcnModm9pZCkKQEAgLTE0NTgsMTcgKzE0NjQsNjAgQEAKIAlzdHJ1Y3Qgc3RhdCBzYjsKIAogCWlmIChzdGF0KCIvZGV2L2NwdS8wL21zciIsICZzYikpCi0JCWVycigtNSwgIm5vIC9kZXYvY3B1LzAvbXNyXG4iCi0JCSAgICAiVHJ5IFwiIyBtb2Rwcm9iZSBtc3JcIiIpOworCQllcnIoLTUsICJubyAvZGV2L2NwdS8wL21zciwgVHJ5IFwiIyBtb2Rwcm9iZSBtc3JcIiAiKTsKIH0KIAotdm9pZCBjaGVja19zdXBlcl91c2VyKCkKK3ZvaWQgY2hlY2tfcGVybWlzc2lvbnMoKQogewotCWlmIChnZXR1aWQoKSAhPSAwKQotCQllcnJ4KC02LCAibXVzdCBiZSByb290Iik7CisJc3RydWN0IF9fdXNlcl9jYXBfaGVhZGVyX3N0cnVjdCBjYXBfaGVhZGVyX2RhdGE7CisJY2FwX3VzZXJfaGVhZGVyX3QgY2FwX2hlYWRlciA9ICZjYXBfaGVhZGVyX2RhdGE7CisJc3RydWN0IF9fdXNlcl9jYXBfZGF0YV9zdHJ1Y3QgY2FwX2RhdGFfZGF0YTsKKwljYXBfdXNlcl9kYXRhX3QgY2FwX2RhdGEgPSAmY2FwX2RhdGFfZGF0YTsKKwlleHRlcm4gaW50IGNhcGdldChjYXBfdXNlcl9oZWFkZXJfdCBoZHJwLCBjYXBfdXNlcl9kYXRhX3QgZGF0YXApOworCWludCBkb19leGl0ID0gMDsKKworCS8qIGNoZWNrIGZvciBDQVBfU1lTX1JBV0lPICovCisJY2FwX2hlYWRlci0+cGlkID0gZ2V0cGlkKCk7CisJY2FwX2hlYWRlci0+dmVyc2lvbiA9IF9MSU5VWF9DQVBBQklMSVRZX1ZFUlNJT047CisJaWYgKGNhcGdldChjYXBfaGVhZGVyLCBjYXBfZGF0YSkgPCAwKQorCQllcnIoLTYsICJjYXBnZXQoMikgZmFpbGVkIik7CisKKwlpZiAoKGNhcF9kYXRhLT5lZmZlY3RpdmUgJiAoMSA8PCBDQVBfU1lTX1JBV0lPKSkgPT0gMCkgeworCQlkb19leGl0Kys7CisJCXdhcm54KCJjYXBnZXQoQ0FQX1NZU19SQVdJTykgZmFpbGVkLCIKKwkJCSIgdHJ5IFwiIyBzZXRjYXAgY2FwX3N5c19yYXdpbz1lcCAlc1wiIiwgcHJvZ25hbWUpOworCX0KKworCS8qIHRlc3QgZmlsZSBwZXJtaXNzaW9ucyAqLworCWlmIChldWlkYWNjZXNzKCIvZGV2L2NwdS8wL21zciIsIFJfT0spKSB7CisJCWRvX2V4aXQrKzsKKwkJd2FybigiL2Rldi9jcHUvMC9tc3Igb3BlbiBmYWlsZWQsIHRyeSBjaG93biBvciBjaG1vZCArciAvZGV2L2NwdS8qL21zciIpOworCX0KKworCS8qIGlmIGFsbCBlbHNlIGZhaWxzLCB0aGVsbCB0aGVtIHRvIGJlIHJvb3QgKi8KKwlpZiAoZG9fZXhpdCkKKwkJaWYgKGdldHVpZCgpICE9IDApCisJCQl3YXJueCgiLi4uIG9yIHNpbXBseSBydW4gYXMgcm9vdCIpOworCisJaWYgKGRvX2V4aXQpCisJCWV4aXQoLTYpOwogfQogCi1pbnQgaGFzX25laGFsZW1fdHVyYm9fcmF0aW9fbGltaXQodW5zaWduZWQgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IG1vZGVsKQorLyoKKyAqIE5ITSBhZGRzIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgTVNSczoKKyAqCisgKiBNU1JfU01JX0NPVU5UICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMzQKKyAqCisgKiBNU1JfTkhNX1BMQVRGT1JNX0lORk8gICAgICAgICAgIDB4MDAwMDAwY2UKKyAqIE1TUl9OSE1fU05CX1BLR19DU1RfQ0ZHX0NUTCAgICAgMHgwMDAwMDBlMgorICoKKyAqIE1TUl9QS0dfQzNfUkVTSURFTkNZICAgICAgICAgICAgMHgwMDAwMDNmOAorICogTVNSX1BLR19DNl9SRVNJREVOQ1kgICAgICAgICAgICAweDAwMDAwM2Y5CisgKiBNU1JfQ09SRV9DM19SRVNJREVOQ1kgICAgICAgICAgIDB4MDAwMDAzZmMKKyAqIE1TUl9DT1JFX0M2X1JFU0lERU5DWSAgICAgICAgICAgMHgwMDAwMDNmZAorICoKKyAqLworaW50IGhhc19uaG1fbXNycyh1bnNpZ25lZCBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgbW9kZWwpCiB7CiAJaWYgKCFnZW51aW5lX2ludGVsKQogCQlyZXR1cm4gMDsKQEAgLTE0OTUsMTMgKzE1NDQsMjcgQEAKIAljYXNlIDB4M0Q6CS8qIEJEVyAqLwogCWNhc2UgMHg0RjoJLyogQkRYICovCiAJY2FzZSAweDU2OgkvKiBCRFgtREUgKi8KLQkJcmV0dXJuIDE7CiAJY2FzZSAweDJFOgkvKiBOZWhhbGVtLUVYIFhlb24gLSBCZWNrdG9uICovCiAJY2FzZSAweDJGOgkvKiBXZXN0bWVyZS1FWCBYZW9uIC0gRWFnbGV0b24gKi8KKwkJcmV0dXJuIDE7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQogfQoraW50IGhhc19uaG1fdHVyYm9fcmF0aW9fbGltaXQodW5zaWduZWQgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IG1vZGVsKQoreworCWlmICghaGFzX25obV9tc3JzKGZhbWlseSwgbW9kZWwpKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAobW9kZWwpIHsKKwkvKiBOZWhhbGVtIGNvbXBhdGlibGUsIGJ1dCBkbyBub3QgaW5jbHVkZSB0dXJiby1yYXRpbyBsaW1pdCBzdXBwb3J0ICovCisJY2FzZSAweDJFOgkvKiBOZWhhbGVtLUVYIFhlb24gLSBCZWNrdG9uICovCisJY2FzZSAweDJGOgkvKiBXZXN0bWVyZS1FWCBYZW9uIC0gRWFnbGV0b24gKi8KKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorfQogaW50IGhhc19pdnRfdHVyYm9fcmF0aW9fbGltaXQodW5zaWduZWQgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IG1vZGVsKQogewogCWlmICghZ2VudWluZV9pbnRlbCkKQEAgLTE1NjQsNiArMTYyNywxMDMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIHByaW50X3BlcmZfbGltaXQoKQorICovCitpbnQgcHJpbnRfcGVyZl9saW1pdChzdHJ1Y3QgdGhyZWFkX2RhdGEgKnQsIHN0cnVjdCBjb3JlX2RhdGEgKmMsIHN0cnVjdCBwa2dfZGF0YSAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgbXNyOworCWludCBjcHU7CisKKwljcHUgPSB0LT5jcHVfaWQ7CisKKwkvKiBwZXItcGFja2FnZSAqLworCWlmICghKHQtPmZsYWdzICYgQ1BVX0lTX0ZJUlNUX1RIUkVBRF9JTl9DT1JFKSB8fCAhKHQtPmZsYWdzICYgQ1BVX0lTX0ZJUlNUX0NPUkVfSU5fUEFDS0FHRSkpCisJCXJldHVybiAwOworCisJaWYgKGNwdV9taWdyYXRlKGNwdSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3QgbWlncmF0ZSB0byBDUFUgJWRcbiIsIGNwdSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoZG9fY29yZV9wZXJmX2xpbWl0X3JlYXNvbnMpIHsKKwkJZ2V0X21zcihjcHUsIE1TUl9DT1JFX1BFUkZfTElNSVRfUkVBU09OUywgJm1zcik7CisJCWZwcmludGYoc3RkZXJyLCAiY3B1JWQ6IE1TUl9DT1JFX1BFUkZfTElNSVRfUkVBU09OUywgMHglMDhsbHgiLCBjcHUsIG1zcik7CisJCWZwcmludGYoc3RkZXJyLCAiIChBY3RpdmU6ICVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMpIiwKKwkJCShtc3IgJiAxIDw8IDApID8gIlBST0NIT1QsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDEpID8gIlRoZXJtU3RhdHVzLCAiIDogIiIsCisJCQkobXNyICYgMSA8PCAyKSA/ICJiaXQyLCAiIDogIiIsCisJCQkobXNyICYgMSA8PCA0KSA/ICJHcmFwaGljcywgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgNSkgPyAiQXV0by1IV1AsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDYpID8gIlZSLVRoZXJtLCAiIDogIiIsCisJCQkobXNyICYgMSA8PCA4KSA/ICJBbXBzLCAiIDogIiIsCisJCQkobXNyICYgMSA8PCA5KSA/ICJDb3JlUHdyLCAiIDogIiIsCisJCQkobXNyICYgMSA8PCAxMCkgPyAiUGtnUHdyTDEsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDExKSA/ICJQa2dQd3JMMiwgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgMTIpID8gIk11bHRpQ29yZVR1cmJvLCAiIDogIiIsCisJCQkobXNyICYgMSA8PCAxMykgPyAiVHJhbnNpdGlvbnMsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDE0KSA/ICJiaXQxNCwgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgMTUpID8gImJpdDE1LCAiIDogIiIpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAoTG9nZ2VkOiAlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzKVxuIiwKKwkJCShtc3IgJiAxIDw8IDE2KSA/ICJQUk9DSE9ULCAiIDogIiIsCisJCQkobXNyICYgMSA8PCAxNykgPyAiVGhlcm1TdGF0dXMsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDE4KSA/ICJiaXQxOCwgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgMjApID8gIkdyYXBoaWNzLCAiIDogIiIsCisJCQkobXNyICYgMSA8PCAyMSkgPyAiQXV0by1IV1AsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDIyKSA/ICJWUi1UaGVybSwgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgMjQpID8gIkFtcHMsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDI1KSA/ICJDb3JlUHdyLCAiIDogIiIsCisJCQkobXNyICYgMSA8PCAyNikgPyAiUGtnUHdyTDEsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDI3KSA/ICJQa2dQd3JMMiwgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgMjgpID8gIk11bHRpQ29yZVR1cmJvLCAiIDogIiIsCisJCQkobXNyICYgMSA8PCAyOSkgPyAiVHJhbnNpdGlvbnMsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDMwKSA/ICJiaXQzMCwgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgMzEpID8gImJpdDMxLCAiIDogIiIpOworCisJfQorCWlmIChkb19nZnhfcGVyZl9saW1pdF9yZWFzb25zKSB7CisJCWdldF9tc3IoY3B1LCBNU1JfR0ZYX1BFUkZfTElNSVRfUkVBU09OUywgJm1zcik7CisJCWZwcmludGYoc3RkZXJyLCAiY3B1JWQ6IE1TUl9HRlhfUEVSRl9MSU1JVF9SRUFTT05TLCAweCUwOGxseCIsIGNwdSwgbXNyKTsKKwkJZnByaW50ZihzdGRlcnIsICIgKEFjdGl2ZTogJXMlcyVzJXMlcyVzJXMlcykiLAorCQkJKG1zciAmIDEgPDwgMCkgPyAiUFJPQ0hPVCwgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgMSkgPyAiVGhlcm1TdGF0dXMsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDQpID8gIkdyYXBoaWNzLCAiIDogIiIsCisJCQkobXNyICYgMSA8PCA2KSA/ICJWUi1UaGVybSwgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgOCkgPyAiQW1wcywgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgOSkgPyAiR0ZYUHdyLCAiIDogIiIsCisJCQkobXNyICYgMSA8PCAxMCkgPyAiUGtnUHdyTDEsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDExKSA/ICJQa2dQd3JMMiwgIiA6ICIiKTsKKwkJZnByaW50ZihzdGRlcnIsICIgKExvZ2dlZDogJXMlcyVzJXMlcyVzJXMlcylcbiIsCisJCQkobXNyICYgMSA8PCAxNikgPyAiUFJPQ0hPVCwgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgMTcpID8gIlRoZXJtU3RhdHVzLCAiIDogIiIsCisJCQkobXNyICYgMSA8PCAyMCkgPyAiR3JhcGhpY3MsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDIyKSA/ICJWUi1UaGVybSwgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgMjQpID8gIkFtcHMsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDI1KSA/ICJHRlhQd3IsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDI2KSA/ICJQa2dQd3JMMSwgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgMjcpID8gIlBrZ1B3ckwyLCAiIDogIiIpOworCX0KKwlpZiAoZG9fcmluZ19wZXJmX2xpbWl0X3JlYXNvbnMpIHsKKwkJZ2V0X21zcihjcHUsIE1TUl9SSU5HX1BFUkZfTElNSVRfUkVBU09OUywgJm1zcik7CisJCWZwcmludGYoc3RkZXJyLCAiY3B1JWQ6IE1TUl9SSU5HX1BFUkZfTElNSVRfUkVBU09OUywgMHglMDhsbHgiLCBjcHUsIG1zcik7CisJCWZwcmludGYoc3RkZXJyLCAiIChBY3RpdmU6ICVzJXMlcyVzJXMlcykiLAorCQkJKG1zciAmIDEgPDwgMCkgPyAiUFJPQ0hPVCwgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgMSkgPyAiVGhlcm1TdGF0dXMsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDYpID8gIlZSLVRoZXJtLCAiIDogIiIsCisJCQkobXNyICYgMSA8PCA4KSA/ICJBbXBzLCAiIDogIiIsCisJCQkobXNyICYgMSA8PCAxMCkgPyAiUGtnUHdyTDEsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDExKSA/ICJQa2dQd3JMMiwgIiA6ICIiKTsKKwkJZnByaW50ZihzdGRlcnIsICIgKExvZ2dlZDogJXMlcyVzJXMlcyVzKVxuIiwKKwkJCShtc3IgJiAxIDw8IDE2KSA/ICJQUk9DSE9ULCAiIDogIiIsCisJCQkobXNyICYgMSA8PCAxNykgPyAiVGhlcm1TdGF0dXMsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDIyKSA/ICJWUi1UaGVybSwgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgMjQpID8gIkFtcHMsICIgOiAiIiwKKwkJCShtc3IgJiAxIDw8IDI2KSA/ICJQa2dQd3JMMSwgIiA6ICIiLAorCQkJKG1zciAmIDEgPDwgMjcpID8gIlBrZ1B3ckwyLCAiIDogIiIpOworCX0KKwlyZXR1cm4gMDsKK30KKwogI2RlZmluZQlSQVBMX1BPV0VSX0dSQU5VTEFSSVRZCTB4N0ZGRgkvKiAxNSBiaXQgcG93ZXIgZ3JhbnVsYXJpdHkgKi8KICNkZWZpbmUJUkFQTF9USU1FX0dSQU5VTEFSSVRZCTB4M0YgLyogNiBiaXQgdGltZSBncmFudWxhcml0eSAqLwogCkBAIC0xNjUzLDYgKzE4MTMsMjcgQEAKIAlyZXR1cm47CiB9CiAKK3ZvaWQgcGVyZl9saW1pdF9yZWFzb25zX3Byb2JlKGZhbWlseSwgbW9kZWwpCit7CisJaWYgKCFnZW51aW5lX2ludGVsKQorCQlyZXR1cm47CisKKwlpZiAoZmFtaWx5ICE9IDYpCisJCXJldHVybjsKKworCXN3aXRjaCAobW9kZWwpIHsKKwljYXNlIDB4M0M6CS8qIEhTVyAqLworCWNhc2UgMHg0NToJLyogSFNXICovCisJY2FzZSAweDQ2OgkvKiBIU1cgKi8KKwkJZG9fZ2Z4X3BlcmZfbGltaXRfcmVhc29ucyA9IDE7CisJY2FzZSAweDNGOgkvKiBIU1ggKi8KKwkJZG9fY29yZV9wZXJmX2xpbWl0X3JlYXNvbnMgPSAxOworCQlkb19yaW5nX3BlcmZfbGltaXRfcmVhc29ucyA9IDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KK30KKwogaW50IHByaW50X3RoZXJtYWwoc3RydWN0IHRocmVhZF9kYXRhICp0LCBzdHJ1Y3QgY29yZV9kYXRhICpjLCBzdHJ1Y3QgcGtnX2RhdGEgKnApCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIG1zcjsKQEAgLTE4NDIsOCArMjAyMywxNSBAQAogCXJldHVybiAwOwogfQogCisvKgorICogU05CIGFkZHMgc3VwcG9ydCBmb3IgYWRkaXRpb25hbCBNU1JzOgorICoKKyAqIE1TUl9QS0dfQzdfUkVTSURFTkNZICAgICAgICAgICAgMHgwMDAwMDNmYQorICogTVNSX0NPUkVfQzdfUkVTSURFTkNZICAgICAgICAgICAweDAwMDAwM2ZlCisgKiBNU1JfUEtHX0MyX1JFU0lERU5DWSAgICAgICAgICAgIDB4MDAwMDA2MGQKKyAqLwogCi1pbnQgaXNfc25iKHVuc2lnbmVkIGludCBmYW1pbHksIHVuc2lnbmVkIGludCBtb2RlbCkKK2ludCBoYXNfc25iX21zcnModW5zaWduZWQgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IG1vZGVsKQogewogCWlmICghZ2VudWluZV9pbnRlbCkKIAkJcmV0dXJuIDA7CkBAIC0xODY1LDcgKzIwNTMsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGhhc19jOF9jOV9jMTAodW5zaWduZWQgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IG1vZGVsKQorLyoKKyAqIEhTVyBhZGRzIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgTVNSczoKKyAqCisgKiBNU1JfUEtHX0M4X1JFU0lERU5DWSAgICAgICAgICAgIDB4MDAwMDA2MzAKKyAqIE1TUl9QS0dfQzlfUkVTSURFTkNZICAgICAgICAgICAgMHgwMDAwMDYzMQorICogTVNSX1BLR19DMTBfUkVTSURFTkNZICAgICAgICAgICAweDAwMDAwNjMyCisgKi8KK2ludCBoYXNfaHN3X21zcnModW5zaWduZWQgaW50IGZhbWlseSwgdW5zaWduZWQgaW50IG1vZGVsKQogewogCWlmICghZ2VudWluZV9pbnRlbCkKIAkJcmV0dXJuIDA7CkBAIC0xOTE3LDcgKzIxMTIsNyBAQAogCiBkb3VibGUgZGlzY292ZXJfYmNsayh1bnNpZ25lZCBpbnQgZmFtaWx5LCB1bnNpZ25lZCBpbnQgbW9kZWwpCiB7Ci0JaWYgKGlzX3NuYihmYW1pbHksIG1vZGVsKSkKKwlpZiAoaGFzX3NuYl9tc3JzKGZhbWlseSwgbW9kZWwpKQogCQlyZXR1cm4gMTAwLjAwOwogCWVsc2UgaWYgKGlzX3NsbShmYW1pbHksIG1vZGVsKSkKIAkJcmV0dXJuIHNsbV9iY2xrKCk7CkBAIC0xOTY1LDcgKzIxNjAsNyBAQAogCX0KIAogCS8qIFRlbXBlcmF0dXJlIFRhcmdldCBNU1IgaXMgTmVoYWxlbSBhbmQgbmV3ZXIgb25seSAqLwotCWlmICghZG9fbmVoYWxlbV9wbGF0Zm9ybV9pbmZvKQorCWlmICghZG9fbmhtX3BsYXRmb3JtX2luZm8pCiAJCWdvdG8gZ3Vlc3M7CiAKIAlpZiAoZ2V0X21zcigwLCBNU1JfSUEzMl9URU1QRVJBVFVSRV9UQVJHRVQsICZtc3IpKQpAQCAtMjAyOSwxOCArMjIyNCwxNSBAQAogCWVieCA9IGVjeCA9IGVkeCA9IDA7CiAJX19nZXRfY3B1aWQoMHg4MDAwMDAwMCwgJm1heF9sZXZlbCwgJmVieCwgJmVjeCwgJmVkeCk7CiAKLQlpZiAobWF4X2xldmVsIDwgMHg4MDAwMDAwNykKLQkJZXJyeCgxLCAiQ1BVSUQ6IG5vIGludmFyaWFudCBUU0MgKG1heF9sZXZlbCAweCV4KSIsIG1heF9sZXZlbCk7CisJaWYgKG1heF9sZXZlbCA+PSAweDgwMDAwMDA3KSB7CiAKLQkvKgotCSAqIE5vbi1TdG9wIFRTQyBpcyBhZHZlcnRpc2VkIGJ5IENQVUlELkVBWD0weDgwMDAwMDA3OiBFRFguYml0OAotCSAqIHRoaXMgY2hlY2sgaXMgdmFsaWQgZm9yIGJvdGggSW50ZWwgYW5kIEFNRAotCSAqLwotCV9fZ2V0X2NwdWlkKDB4ODAwMDAwMDcsICZlYXgsICZlYngsICZlY3gsICZlZHgpOwotCWhhc19pbnZhcmlhbnRfdHNjID0gZWR4ICYgKDEgPDwgOCk7Ci0KLQlpZiAoIWhhc19pbnZhcmlhbnRfdHNjKQotCQllcnJ4KDEsICJObyBpbnZhcmlhbnQgVFNDIik7CisJCS8qCisJCSAqIE5vbi1TdG9wIFRTQyBpcyBhZHZlcnRpc2VkIGJ5IENQVUlELkVBWD0weDgwMDAwMDA3OiBFRFguYml0OAorCQkgKiB0aGlzIGNoZWNrIGlzIHZhbGlkIGZvciBib3RoIEludGVsIGFuZCBBTUQKKwkJICovCisJCV9fZ2V0X2NwdWlkKDB4ODAwMDAwMDcsICZlYXgsICZlYngsICZlY3gsICZlZHgpOworCQloYXNfaW52YXJpYW50X3RzYyA9IGVkeCAmICgxIDw8IDgpOworCX0KIAogCS8qCiAJICogQVBFUkYvTVBFUkYgaXMgYWR2ZXJ0aXNlZCBieSBDUFVJRC5FQVg9MHg2OiBFQ1guYml0MApAQCAtMjA1NCwyNiArMjI0NiwyMiBAQAogCWhhc19lcGIgPSBlY3ggJiAoMSA8PCAzKTsKIAogCWlmICh2ZXJib3NlKQotCQlmcHJpbnRmKHN0ZGVyciwgIkNQVUlEKDYpOiAlcyVzJXMlc1xuIiwKLQkJCWhhc19hcGVyZiA/ICJBUEVSRiIgOiAiTm8gQVBFUkYhIiwKLQkJCWRvX2R0cyA/ICIsIERUUyIgOiAiIiwKLQkJCWRvX3B0bSA/ICIsIFBUTSI6ICIiLAotCQkJaGFzX2VwYiA/ICIsIEVQQiI6ICIiKTsKKwkJZnByaW50ZihzdGRlcnIsICJDUFVJRCg2KTogJXNBUEVSRiwgJXNEVFMsICVzUFRNLCAlc0VQQlxuIiwKKwkJCWhhc19hcGVyZiA/ICIiIDogIk5vICIsCisJCQlkb19kdHMgPyAiIiA6ICJObyAiLAorCQkJZG9fcHRtID8gIiIgOiAiTm8gIiwKKwkJCWhhc19lcGIgPyAiIiA6ICJObyAiKTsKIAotCWlmICghaGFzX2FwZXJmKQotCQllcnJ4KC0xLCAiTm8gQVBFUkYiKTsKLQotCWRvX25laGFsZW1fcGxhdGZvcm1faW5mbyA9IGdlbnVpbmVfaW50ZWwgJiYgaGFzX2ludmFyaWFudF90c2M7Ci0JZG9fbmhtX2NzdGF0ZXMgPSBnZW51aW5lX2ludGVsOwkvKiBhbGwgSW50ZWwgdy8gbm9uLXN0b3AgVFNDIGhhdmUgTkhNIGNvdW50ZXJzICovCi0JZG9fc21pID0gZG9fbmhtX2NzdGF0ZXM7Ci0JZG9fc25iX2NzdGF0ZXMgPSBpc19zbmIoZmFtaWx5LCBtb2RlbCk7Ci0JZG9fYzhfYzlfYzEwID0gaGFzX2M4X2M5X2MxMChmYW1pbHksIG1vZGVsKTsKKwlkb19uaG1fcGxhdGZvcm1faW5mbyA9IGRvX25obV9jc3RhdGVzID0gZG9fc21pID0gaGFzX25obV9tc3JzKGZhbWlseSwgbW9kZWwpOworCWRvX3NuYl9jc3RhdGVzID0gaGFzX3NuYl9tc3JzKGZhbWlseSwgbW9kZWwpOworCWRvX2M4X2M5X2MxMCA9IGhhc19oc3dfbXNycyhmYW1pbHksIG1vZGVsKTsKIAlkb19zbG1fY3N0YXRlcyA9IGlzX3NsbShmYW1pbHksIG1vZGVsKTsKIAliY2xrID0gZGlzY292ZXJfYmNsayhmYW1pbHksIG1vZGVsKTsKIAotCWRvX25laGFsZW1fdHVyYm9fcmF0aW9fbGltaXQgPSBoYXNfbmVoYWxlbV90dXJib19yYXRpb19saW1pdChmYW1pbHksIG1vZGVsKTsKKwlkb19uaG1fdHVyYm9fcmF0aW9fbGltaXQgPSBoYXNfbmhtX3R1cmJvX3JhdGlvX2xpbWl0KGZhbWlseSwgbW9kZWwpOwogCWRvX2l2dF90dXJib19yYXRpb19saW1pdCA9IGhhc19pdnRfdHVyYm9fcmF0aW9fbGltaXQoZmFtaWx5LCBtb2RlbCk7CiAJcmFwbF9wcm9iZShmYW1pbHksIG1vZGVsKTsKKwlwZXJmX2xpbWl0X3JlYXNvbnNfcHJvYmUoZmFtaWx5LCBtb2RlbCk7CiAKIAlyZXR1cm47CiB9CkBAIC0yMjk5LDEwICsyNDg3LDkgQEAKIAogdm9pZCB0dXJib3N0YXRfaW5pdCgpCiB7Ci0JY2hlY2tfY3B1aWQoKTsKLQogCWNoZWNrX2Rldl9tc3IoKTsKLQljaGVja19zdXBlcl91c2VyKCk7CisJY2hlY2tfcGVybWlzc2lvbnMoKTsKKwljaGVja19jcHVpZCgpOwogCiAJc2V0dXBfYWxsX2J1ZmZlcnMoKTsKIApAQCAtMjMxMyw2ICsyNTAwLDkgQEAKIAkJZm9yX2FsbF9jcHVzKHByaW50X2VwYiwgT0REX0NPVU5URVJTKTsKIAogCWlmICh2ZXJib3NlKQorCQlmb3JfYWxsX2NwdXMocHJpbnRfcGVyZl9saW1pdCwgT0REX0NPVU5URVJTKTsKKworCWlmICh2ZXJib3NlKQogCQlmb3JfYWxsX2NwdXMocHJpbnRfcmFwbCwgT0REX0NPVU5URVJTKTsKIAogCWZvcl9hbGxfY3B1cyhzZXRfdGVtcGVyYXR1cmVfdGFyZ2V0LCBPRERfQ09VTlRFUlMpOwpAQCAtMjQ0MSw3ICsyNjMxLDcgQEAKIAljbWRsaW5lKGFyZ2MsIGFyZ3YpOwogCiAJaWYgKHZlcmJvc2UpCi0JCWZwcmludGYoc3RkZXJyLCAidHVyYm9zdGF0IHYzLjcgRmViIDYsIDIwMTQiCisJCWZwcmludGYoc3RkZXJyLCAidHVyYm9zdGF0IHYzLjkgMjMtSmFuLCAyMDE1IgogCQkJIiAtIExlbiBCcm93biA8bGVuYkBrZXJuZWwub3JnPlxuIik7CiAKIAl0dXJib3N0YXRfaW5pdCgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9rdGVzdC9rdGVzdC5wbCBiL3Rvb2xzL3Rlc3Rpbmcva3Rlc3Qva3Rlc3QucGwKaW5kZXggYjljZDAzNi4uZDA4ZTIxNCAxMDA3NTUKLS0tIGEvdG9vbHMvdGVzdGluZy9rdGVzdC9rdGVzdC5wbAorKysgYi90b29scy90ZXN0aW5nL2t0ZXN0L2t0ZXN0LnBsCkBAIC0xNzgsNiArMTc4LDcgQEAKIG15ICRsb2NhbHZlcnNpb247CiBteSAkaXRlcmF0aW9uID0gMDsKIG15ICRzdWNjZXNzZXMgPSAwOworbXkgJHN0dHlfb3JpZzsKIAogbXkgJGJpc2VjdF9nb29kOwogbXkgJGJpc2VjdF9iYWQ7CkBAIC0xOTcsNiArMTk4LDExIEBACiBteSAkcGF0Y2hjaGVja19jaGVycnk7CiBteSAkcGF0Y2hjaGVja19lbmQ7CiAKK215ICRidWlsZF90aW1lOworbXkgJGluc3RhbGxfdGltZTsKK215ICRyZWJvb3RfdGltZTsKK215ICR0ZXN0X3RpbWU7CisKICMgc2V0IHdoZW4gYSB0ZXN0IGlzIHNvbWV0aGluZyBvdGhlciB0aGF0IGp1c3QgYnVpbGRpbmcgb3IgaW5zdGFsbAogIyB3aGljaCB3b3VsZCByZXF1aXJlIG1vcmUgb3B0aW9ucy4KIG15ICRidWlsZG9ubHkgPSAxOwpAQCAtNTU0LDYgKzU2MCw2NiBAQAogICAgIH0KIH0KIAorc3ViIHNob3dfdGltZSB7CisgICAgbXkgKCR0aW1lKSA9IEBfOworCisgICAgbXkgJGhvdXJzID0gMDsKKyAgICBteSAkbWludXRlcyA9IDA7CisKKyAgICBpZiAoJHRpbWUgPiAzNjAwKSB7CisJJGhvdXJzID0gaW50KCR0aW1lIC8gMzYwMCk7CisJJHRpbWUgLT0gJGhvdXJzICogMzYwMDsKKyAgICB9CisgICAgaWYgKCR0aW1lID4gNjApIHsKKwkkbWludXRlcyA9IGludCgkdGltZSAvIDYwKTsKKwkkdGltZSAtPSAkbWludXRlcyAqIDYwOworICAgIH0KKworICAgIGlmICgkaG91cnMgPiAwKSB7CisJZG9wcmludCAiJGhvdXJzIGhvdXIiOworCWRvcHJpbnQgInMiIGlmICgkaG91cnMgPiAxKTsKKwlkb3ByaW50ICIgIjsKKyAgICB9CisKKyAgICBpZiAoJG1pbnV0ZXMgPiAwKSB7CisJZG9wcmludCAiJG1pbnV0ZXMgbWludXRlIjsKKwlkb3ByaW50ICJzIiBpZiAoJG1pbnV0ZXMgPiAxKTsKKwlkb3ByaW50ICIgIjsKKyAgICB9CisKKyAgICBkb3ByaW50ICIkdGltZSBzZWNvbmQiOworICAgIGRvcHJpbnQgInMiIGlmICgkdGltZSAhPSAxKTsKK30KKworc3ViIHByaW50X3RpbWVzIHsKKyAgICBkb3ByaW50ICJcbiI7CisgICAgaWYgKCRidWlsZF90aW1lKSB7CisJZG9wcmludCAiQnVpbGQgdGltZTogICAiOworCXNob3dfdGltZSgkYnVpbGRfdGltZSk7CisJZG9wcmludCAiXG4iOworICAgIH0KKyAgICBpZiAoJGluc3RhbGxfdGltZSkgeworCWRvcHJpbnQgIkluc3RhbGwgdGltZTogIjsKKwlzaG93X3RpbWUoJGluc3RhbGxfdGltZSk7CisJZG9wcmludCAiXG4iOworICAgIH0KKyAgICBpZiAoJHJlYm9vdF90aW1lKSB7CisJZG9wcmludCAiUmVib290IHRpbWU6ICAiOworCXNob3dfdGltZSgkcmVib290X3RpbWUpOworCWRvcHJpbnQgIlxuIjsKKyAgICB9CisgICAgaWYgKCR0ZXN0X3RpbWUpIHsKKwlkb3ByaW50ICJUZXN0IHRpbWU6ICAgICI7CisJc2hvd190aW1lKCR0ZXN0X3RpbWUpOworCWRvcHJpbnQgIlxuIjsKKyAgICB9CisgICAgIyByZXNldCBmb3IgaXRlcmF0aW9ucyBsaWtlIGJpc2VjdAorICAgICRidWlsZF90aW1lID0gMDsKKyAgICAkaW5zdGFsbF90aW1lID0gMDsKKyAgICAkcmVib290X3RpbWUgPSAwOworICAgICR0ZXN0X3RpbWUgPSAwOworfQorCiBzdWIgZ2V0X21hbmRhdG9yeV9jb25maWdzIHsKICAgICBnZXRfbWFuZGF0b3J5X2NvbmZpZygiTUFDSElORSIpOwogICAgIGdldF9tYW5kYXRvcnlfY29uZmlnKCJCVUlMRF9ESVIiKTsKQEAgLTEzNDEsMjMgKzE0MDcsODMgQEAKIAlwcmludCAiIFNlZSAkb3B0e0xPR19GSUxFfSBmb3IgbW9yZSBpbmZvLlxuIjsKICAgICB9CiAKKyAgICBpZiAoJG1vbml0b3JfY250KSB7CisJICAgICMgcmVzdG9yZSB0ZXJtaW5hbCBzZXR0aW5ncworCSAgICBzeXN0ZW0oInN0dHkgJHN0dHlfb3JpZyIpOworICAgIH0KKwogICAgIGRpZSBAXywgIlxuIjsKIH0KIAorc3ViIGNyZWF0ZV9wdHkgeworICAgIG15ICgkcHRtLCAkcHRzKSA9IEBfOworICAgIG15ICR0bXA7CisgICAgbXkgJFRJT0NTUFRMQ0sgPSAweDQwMDQ1NDMxOworICAgIG15ICRUSU9DR1BUTiA9IDB4ODAwNDU0MzA7CisKKyAgICBzeXNvcGVuKCRwdG0sICIvZGV2L3B0bXgiLCBPX1JEV1IgfCBPX05PTkJMT0NLKSBvcgorCWRvZGllICJDYW50IG9wZW4gL2Rldi9wdG14IjsKKworICAgICMgdW5sb2NrcHQoKQorICAgICR0bXAgPSBwYWNrKCJpIiwgMCk7CisgICAgaW9jdGwoJHB0bSwgJFRJT0NTUFRMQ0ssICR0bXApIG9yCisJZG9kaWUgImlvY3RsIFRJT0NTUFRMQ0sgZm9yIC9kZXYvcHRteCBmYWlsZWQiOworCisgICAgIyBwdHNuYW1lKCkKKyAgICBpb2N0bCgkcHRtLCAkVElPQ0dQVE4sICR0bXApIG9yCisJZG9kaWUgImlvY3RsIFRJT0NHUFROIGZvciAvZGV2L3B0bXggZmFpbGVkIjsKKyAgICAkdG1wID0gdW5wYWNrKCJpIiwgJHRtcCk7CisKKyAgICBzeXNvcGVuKCRwdHMsICIvZGV2L3B0cy8kdG1wIiwgT19SRFdSIHwgT19OT05CTE9DSykgb3IKKwlkb2RpZSAiQ2FuJ3Qgb3BlbiAvZGV2L3B0cy8kdG1wIjsKK30KKworc3ViIGV4ZWNfY29uc29sZSB7CisgICAgbXkgKCRwdG0sICRwdHMpID0gQF87CisKKyAgICBjbG9zZSgkcHRtKTsKKworICAgIGNsb3NlKFwqU1RESU4pOworICAgIGNsb3NlKFwqU1RET1VUKTsKKyAgICBjbG9zZShcKlNUREVSUik7CisKKyAgICBvcGVuKFwqU1RESU4sICc8JicsICRwdHMpOworICAgIG9wZW4oXCpTVERPVVQsICc+JicsICRwdHMpOworICAgIG9wZW4oXCpTVERFUlIsICc+JicsICRwdHMpOworCisgICAgY2xvc2UoJHB0cyk7CisKKyAgICBleGVjICRjb25zb2xlIG9yCisJZGllICJDYW4ndCBvcGVuIGNvbnNvbGUgJGNvbnNvbGUiOworfQorCiBzdWIgb3Blbl9jb25zb2xlIHsKLSAgICBteSAoJGZwKSA9IEBfOworICAgIG15ICgkcHRtKSA9IEBfOworICAgIG15ICRwdHMgPSBcKlBUU0ZEOworICAgIG15ICRwaWQ7CiAKLSAgICBteSAkZmxhZ3M7CisgICAgIyBzYXZlIHRlcm1pbmFsIHNldHRpbmdzCisgICAgJHN0dHlfb3JpZyA9IGBzdHR5IC1nYDsKIAotICAgIG15ICRwaWQgPSBvcGVuKCRmcCwgIiRjb25zb2xlfCIpIG9yCi0JZG9kaWUgIkNhbid0IG9wZW4gY29uc29sZSAkY29uc29sZSI7CisgICAgIyBwbGFjZSB0ZXJtaW5hbCBpbiBjYnJlYWsgbW9kZSBzbyB0aGF0IHN0ZGluIGNhbiBiZSByZWFkIG9uZSBjaGFyYWN0ZXIgYXQKKyAgICAjIGEgdGltZSB3aXRob3V0IGhhdmluZyB0byB3YWl0IGZvciBhIG5ld2xpbmUKKyAgICBzeXN0ZW0oInN0dHkgLWljYW5vbiAtZWNobyAtaWNybmwiKTsKIAotICAgICRmbGFncyA9IGZjbnRsKCRmcCwgRl9HRVRGTCwgMCkgb3IKLQlkb2RpZSAiQ2FuJ3QgZ2V0IGZsYWdzIGZvciB0aGUgc29ja2V0OiAkISI7Ci0gICAgJGZsYWdzID0gZmNudGwoJGZwLCBGX1NFVEZMLCAkZmxhZ3MgfCBPX05PTkJMT0NLKSBvcgotCWRvZGllICJDYW4ndCBzZXQgZmxhZ3MgZm9yIHRoZSBzb2NrZXQ6ICQhIjsKKyAgICBjcmVhdGVfcHR5KCRwdG0sICRwdHMpOworCisgICAgJHBpZCA9IGZvcms7CisKKyAgICBpZiAoISRwaWQpIHsKKwkjIGNoaWxkCisJZXhlY19jb25zb2xlKCRwdG0sICRwdHMpCisgICAgfQorCisgICAgIyBwYXJlbnQKKyAgICBjbG9zZSgkcHRzKTsKIAogICAgIHJldHVybiAkcGlkOworCisgICAgb3BlbihQVFNGRCwgIlN0b3AgcGVybCBmcm9tIHdhcm5pbmcgYWJvdXQgc2luZ2xlIHVzZSBvZiBQVFNGRCIpOwogfQogCiBzdWIgY2xvc2VfY29uc29sZSB7CkBAIC0xMzY4LDYgKzE0OTQsOSBAQAogCiAgICAgcHJpbnQgImNsb3NpbmchXG4iOwogICAgIGNsb3NlKCRmcCk7CisKKyAgICAjIHJlc3RvcmUgdGVybWluYWwgc2V0dGluZ3MKKyAgICBzeXN0ZW0oInN0dHkgJHN0dHlfb3JpZyIpOwogfQogCiBzdWIgc3RhcnRfbW9uaXRvciB7CkBAIC0xNTE5LDYgKzE2NDgsOCBAQAogCSAgICAkbmFtZSA9ICIgKCR0ZXN0X25hbWUpIjsKIAl9CiAKKwlwcmludF90aW1lczsKKwogCWRvcHJpbnQgIiUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSVcbiI7CiAJZG9wcmludCAiJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJVxuIjsKIAlkb3ByaW50ICJLVEVTVCBSRVNVTFQ6IFRFU1QgJGkkbmFtZSBGYWlsZWQ6ICIsIEBfLCAiXG4iOwpAQCAtMTUzNCwxMCArMTY2NSwxNCBAQAogCiBzdWIgcnVuX2NvbW1hbmQgewogICAgIG15ICgkY29tbWFuZCwgJHJlZGlyZWN0KSA9IEBfOworICAgIG15ICRzdGFydF90aW1lOworICAgIG15ICRlbmRfdGltZTsKICAgICBteSAkZG9sb2cgPSAwOwogICAgIG15ICRkb3JkID0gMDsKICAgICBteSAkcGlkOwogCisgICAgJHN0YXJ0X3RpbWUgPSB0aW1lOworCiAgICAgJGNvbW1hbmQgPX4gcy9cJFNTSF9VU0VSLyRzc2hfdXNlci9nOwogICAgICRjb21tYW5kID1+IHMvXCRNQUNISU5FLyRtYWNoaW5lL2c7CiAKQEAgLTE1NzAsNiArMTcwNSwxNSBAQAogICAgIGNsb3NlKExPRykgaWYgKCRkb2xvZyk7CiAgICAgY2xvc2UoUkQpICBpZiAoJGRvcmQpOwogCisgICAgJGVuZF90aW1lID0gdGltZTsKKyAgICBteSAkZGVsdGEgPSAkZW5kX3RpbWUgLSAkc3RhcnRfdGltZTsKKworICAgIGlmICgkZGVsdGEgPT0gMSkgeworCWRvcHJpbnQgIlsxIHNlY29uZF0gIjsKKyAgICB9IGVsc2UgeworCWRvcHJpbnQgIlskZGVsdGEgc2Vjb25kc10gIjsKKyAgICB9CisKICAgICBpZiAoJGZhaWxlZCkgewogCWRvcHJpbnQgIkZBSUxFRCFcbiI7CiAgICAgfSBlbHNlIHsKQEAgLTE2OTQsNyArMTgzOCw5IEBACiB7CiAgICAgbXkgKCRmcCwgJHRpbWUpID0gQF87CiAgICAgbXkgJHJpbjsKLSAgICBteSAkcmVhZHk7CisgICAgbXkgJHJvdXQ7CisgICAgbXkgJG5yOworICAgIG15ICRidWY7CiAgICAgbXkgJGxpbmU7CiAgICAgbXkgJGNoOwogCkBAIC0xNzA0LDIxICsxODUwLDM2IEBACiAKICAgICAkcmluID0gJyc7CiAgICAgdmVjKCRyaW4sIGZpbGVubygkZnApLCAxKSA9IDE7Ci0gICAgKCRyZWFkeSwgJHRpbWUpID0gc2VsZWN0KCRyaW4sIHVuZGVmLCB1bmRlZiwgJHRpbWUpOworICAgIHZlYygkcmluLCBmaWxlbm8oXCpTVERJTiksIDEpID0gMTsKIAotICAgICRsaW5lID0gIiI7CisgICAgd2hpbGUgKDEpIHsKKwkkbnIgPSBzZWxlY3QoJHJvdXQ9JHJpbiwgdW5kZWYsIHVuZGVmLCAkdGltZSk7CiAKLSAgICAjIHRyeSB0byByZWFkIG9uZSBjaGFyIGF0IGEgdGltZQotICAgIHdoaWxlIChzeXNyZWFkICRmcCwgJGNoLCAxKSB7Ci0JJGxpbmUgLj0gJGNoOwotCWxhc3QgaWYgKCRjaCBlcSAiXG4iKTsKKwlpZiAoJG5yIDw9IDApIHsKKwkgICAgcmV0dXJuIHVuZGVmOworCX0KKworCSMgY29weSBkYXRhIGZyb20gc3RkaW4gdG8gdGhlIGNvbnNvbGUKKwlpZiAodmVjKCRyb3V0LCBmaWxlbm8oXCpTVERJTiksIDEpID09IDEpIHsKKwkgICAgc3lzcmVhZChcKlNURElOLCAkYnVmLCAxMDAwKTsKKwkgICAgc3lzd3JpdGUoJGZwLCAkYnVmLCAxMDAwKTsKKwkgICAgbmV4dDsKKwl9CisKKwkkbGluZSA9ICIiOworCisJIyB0cnkgdG8gcmVhZCBvbmUgY2hhciBhdCBhIHRpbWUKKwl3aGlsZSAoc3lzcmVhZCAkZnAsICRjaCwgMSkgeworCSAgICAkbGluZSAuPSAkY2g7CisJICAgIGxhc3QgaWYgKCRjaCBlcSAiXG4iKTsKKwl9CisKKwlpZiAoIWxlbmd0aCgkbGluZSkpIHsKKwkgICAgcmV0dXJuIHVuZGVmOworCX0KKworCXJldHVybiAkbGluZTsKICAgICB9Ci0KLSAgICBpZiAoIWxlbmd0aCgkbGluZSkpIHsKLQlyZXR1cm4gdW5kZWY7Ci0gICAgfQotCi0gICAgcmV0dXJuICRsaW5lOwogfQogCiBzdWIgcmVib290X3RvIHsKQEAgLTE3NjYsNiArMTkyNyw4IEBACiAgICAgbXkgJHNraXBfY2FsbF90cmFjZSA9IDA7CiAgICAgbXkgJGxvb3BzOwogCisgICAgbXkgJHN0YXJ0X3RpbWUgPSB0aW1lOworCiAgICAgd2FpdF9mb3JfbW9uaXRvciA1OwogCiAgICAgbXkgJGxpbmU7CkBAIC0xODkwLDYgKzIwNTMsOSBAQAogCX0KICAgICB9CiAKKyAgICBteSAkZW5kX3RpbWUgPSB0aW1lOworICAgICRyZWJvb3RfdGltZSA9ICRlbmRfdGltZSAtICRzdGFydF90aW1lOworCiAgICAgY2xvc2UoRE1FU0cpOwogCiAgICAgaWYgKCRidWcpIHsKQEAgLTE5MzgsNiArMjEwNCw4IEBACiAKICAgICByZXR1cm4gaWYgKCRub19pbnN0YWxsKTsKIAorICAgIG15ICRzdGFydF90aW1lID0gdGltZTsKKwogICAgIGlmIChkZWZpbmVkKCRwcmVfaW5zdGFsbCkpIHsKIAlteSAkY3BfcHJlX2luc3RhbGwgPSBldmFsX2tlcm5lbF92ZXJzaW9uICRwcmVfaW5zdGFsbDsKIAlydW5fY29tbWFuZCAiJGNwX3ByZV9pbnN0YWxsIiBvcgpAQCAtMTk2OSw2ICsyMTM3LDggQEAKICAgICBpZiAoISRpbnN0YWxsX21vZHMpIHsKIAlkb19wb3N0X2luc3RhbGw7CiAJZG9wcmludCAiTm8gbW9kdWxlcyBuZWVkZWRcbiI7CisJbXkgJGVuZF90aW1lID0gdGltZTsKKwkkaW5zdGFsbF90aW1lID0gJGVuZF90aW1lIC0gJHN0YXJ0X3RpbWU7CiAJcmV0dXJuOwogICAgIH0KIApAQCAtMTk5Niw2ICsyMTY2LDkgQEAKICAgICBydW5fc3NoICJybSAtZiAvdG1wLyRtb2R0YXIiOwogCiAgICAgZG9fcG9zdF9pbnN0YWxsOworCisgICAgbXkgJGVuZF90aW1lID0gdGltZTsKKyAgICAkaW5zdGFsbF90aW1lID0gJGVuZF90aW1lIC0gJHN0YXJ0X3RpbWU7CiB9CiAKIHN1YiBnZXRfdmVyc2lvbiB7CkBAIC0yMDA4LDcgKzIxODEsNyBAQAogICAgICRoYXZlX3ZlcnNpb24gPSAxOwogfQogCi1zdWIgc3RhcnRfbW9uaXRvcl9hbmRfYm9vdCB7CitzdWIgc3RhcnRfbW9uaXRvcl9hbmRfaW5zdGFsbCB7CiAgICAgIyBNYWtlIHN1cmUgdGhlIHN0YWJsZSBrZXJuZWwgaGFzIGZpbmlzaGVkIGJvb3RpbmcKIAogICAgICMgSW5zdGFsbCBiaXNlY3RzLCBkb24ndCBuZWVkIGNvbnNvbGUKQEAgLTIyMDgsNiArMjM4MSw4IEBACiAKICAgICB1bmxpbmsgJGJ1aWxkbG9nOwogCisgICAgbXkgJHN0YXJ0X3RpbWUgPSB0aW1lOworCiAgICAgIyBGYWlsZWQgYnVpbGRzIHNob3VsZCBub3QgcmVib290IHRoZSB0YXJnZXQKICAgICBteSAkc2F2ZV9ub19yZWJvb3QgPSAkbm9fcmVib290OwogICAgICRub19yZWJvb3QgPSAxOwpAQCAtMjI5Myw2ICsyNDY4LDkgQEAKIAogICAgICRub19yZWJvb3QgPSAkc2F2ZV9ub19yZWJvb3Q7CiAKKyAgICBteSAkZW5kX3RpbWUgPSB0aW1lOworICAgICRidWlsZF90aW1lID0gJGVuZF90aW1lIC0gJHN0YXJ0X3RpbWU7CisKICAgICByZXR1cm4gMTsKIH0KIApAQCAtMjMyMyw2ICsyNTAxLDggQEAKIAkkbmFtZSA9ICIgKCR0ZXN0X25hbWUpIjsKICAgICB9CiAKKyAgICBwcmludF90aW1lczsKKwogICAgIGRvcHJpbnQgIlxuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iOwogICAgIGRvcHJpbnQgICAgICIqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iOwogICAgIGRvcHJpbnQgICAgICJLVEVTVCBSRVNVTFQ6IFRFU1QgJGkkbmFtZSBTVUNDRVNTISEhISAgICAgICAgICoqXG4iOwpAQCAtMjM4Myw2ICsyNTYzLDggQEAKICAgICBteSAkYnVnID0gMDsKICAgICBteSAkYnVnX2lnbm9yZWQgPSAwOwogCisgICAgbXkgJHN0YXJ0X3RpbWUgPSB0aW1lOworCiAgICAgd2FpdF9mb3JfbW9uaXRvciAxOwogCiAgICAgZG9wcmludCAicnVuIHRlc3QgJHJ1bl90ZXN0XG4iOwpAQCAtMjQ0OSw2ICsyNjMxLDkgQEAKICAgICB3YWl0cGlkICRjaGlsZF9waWQsIDA7CiAgICAgJGNoaWxkX2V4aXQgPSAkPzsKIAorICAgIG15ICRlbmRfdGltZSA9IHRpbWU7CisgICAgJHRlc3RfdGltZSA9ICRlbmRfdGltZSAtICRzdGFydF90aW1lOworCiAgICAgaWYgKCEkYnVnICYmICRpbl9iaXNlY3QpIHsKIAlpZiAoZGVmaW5lZCgkYmlzZWN0X3JldF9nb29kKSkgewogCSAgICBpZiAoJGNoaWxkX2V4aXQgPT0gJGJpc2VjdF9yZXRfZ29vZCkgewpAQCAtMjU0OSw3ICsyNzM0LDcgQEAKIAlkb2RpZSAiRmFpbGVkIG9uIGJ1aWxkIiBpZiAkZmFpbGVkOwogCiAJIyBOb3cgYm9vdCB0aGUgYm94Ci0Jc3RhcnRfbW9uaXRvcl9hbmRfYm9vdCBvciAkZmFpbGVkID0gMTsKKwlzdGFydF9tb25pdG9yX2FuZF9pbnN0YWxsIG9yICRmYWlsZWQgPSAxOwogCiAJaWYgKCR0eXBlIG5lICJib290IikgewogCSAgICBpZiAoJGZhaWxlZCAmJiAkYmlzZWN0X3NraXApIHsKQEAgLTI3NTUsNiArMjk0MCw3IEBACiAgICAgZG8gewogCSRyZXN1bHQgPSBydW5fYmlzZWN0ICR0eXBlOwogCSR0ZXN0ID0gcnVuX2dpdF9iaXNlY3QgImdpdCBiaXNlY3QgJHJlc3VsdCI7CisJcHJpbnRfdGltZXM7CiAgICAgfSB3aGlsZSAoJHRlc3QpOwogCiAgICAgcnVuX2NvbW1hbmQgImdpdCBiaXNlY3QgbG9nIiBvcgpAQCAtMzE2OCw2ICszMzU0LDcgQEAKIAogICAgIGRvIHsKIAkkcmV0ID0gcnVuX2NvbmZpZ19iaXNlY3QgXCVnb29kX2NvbmZpZ3MsIFwlYmFkX2NvbmZpZ3M7CisJcHJpbnRfdGltZXM7CiAgICAgfSB3aGlsZSAoISRyZXQpOwogCiAgICAgcmV0dXJuICRyZXQgaWYgKCRyZXQgPCAwKTsKQEAgLTMyNjAsNyArMzQ0Nyw3IEBACiAJbXkgJHNoYTEgPSAkaXRlbTsKIAkkc2hhMSA9fiBzL14oW1s6eGRpZ2l0Ol1dKykuKi8kMS87CiAKLQlkb3ByaW50ICJcblByb2Nlc3NpbmcgY29tbWl0ICRpdGVtXG5cbiI7CisJZG9wcmludCAiXG5Qcm9jZXNzaW5nIGNvbW1pdCBcIiRpdGVtXCJcblxuIjsKIAogCXJ1bl9jb21tYW5kICJnaXQgY2hlY2tvdXQgJHNoYTEiIG9yCiAJICAgIGRpZSAiRmFpbGVkIHRvIGNoZWNrb3V0ICRzaGExIjsKQEAgLTMyOTEsMTYgKzM0NzgsMTggQEAKIAogCW15ICRmYWlsZWQgPSAwOwogCi0Jc3RhcnRfbW9uaXRvcl9hbmRfYm9vdCBvciAkZmFpbGVkID0gMTsKKwlzdGFydF9tb25pdG9yX2FuZF9pbnN0YWxsIG9yICRmYWlsZWQgPSAxOwogCiAJaWYgKCEkZmFpbGVkICYmICR0eXBlIG5lICJib290Iil7CiAJICAgIGRvX3J1bl90ZXN0IG9yICRmYWlsZWQgPSAxOwogCX0KIAllbmRfbW9uaXRvcjsKLQlyZXR1cm4gMCBpZiAoJGZhaWxlZCk7Ci0KKwlpZiAoJGZhaWxlZCkgeworCSAgICBwcmludF90aW1lczsKKwkgICAgcmV0dXJuIDA7CisJfQogCXBhdGNoY2hlY2tfcmVib290OwotCisJcHJpbnRfdGltZXM7CiAgICAgfQogICAgICRpbl9wYXRjaGNoZWNrID0gMDsKICAgICBzdWNjZXNzICRpOwpAQCAtMzc1Myw3ICszOTQyLDcgQEAKIAlteSAkZmFpbGVkID0gMDsKIAlidWlsZCAib2xkY29uZmlnIiBvciAkZmFpbGVkID0gMTsKIAlpZiAoISRmYWlsZWQpIHsKLQkJc3RhcnRfbW9uaXRvcl9hbmRfYm9vdCBvciAkZmFpbGVkID0gMTsKKwkJc3RhcnRfbW9uaXRvcl9hbmRfaW5zdGFsbCBvciAkZmFpbGVkID0gMTsKIAogCQlpZiAoJHR5cGUgZXEgInRlc3QiICYmICEkZmFpbGVkKSB7CiAJCSAgICBkb19ydW5fdGVzdCBvciAkZmFpbGVkID0gMTsKQEAgLTQwMDAsNiArNDE4OSwxMSBAQAogCiAgICAgJGl0ZXJhdGlvbiA9ICRpOwogCisgICAgJGJ1aWxkX3RpbWUgPSAwOworICAgICRpbnN0YWxsX3RpbWUgPSAwOworICAgICRyZWJvb3RfdGltZSA9IDA7CisgICAgJHRlc3RfdGltZSA9IDA7CisKICAgICB1bmRlZiAlZm9yY2VfY29uZmlnOwogCiAgICAgbXkgJG1ha2VjbWQgPSBzZXRfdGVzdF9vcHRpb24oIk1BS0VfQ01EIiwgJGkpOwpAQCAtNDE1NywxNSArNDM1MSwyMCBAQAogCiAgICAgaWYgKCR0ZXN0X3R5cGUgbmUgImJ1aWxkIikgewogCW15ICRmYWlsZWQgPSAwOwotCXN0YXJ0X21vbml0b3JfYW5kX2Jvb3Qgb3IgJGZhaWxlZCA9IDE7CisJc3RhcnRfbW9uaXRvcl9hbmRfaW5zdGFsbCBvciAkZmFpbGVkID0gMTsKIAogCWlmICghJGZhaWxlZCAmJiAkdGVzdF90eXBlIG5lICJib290IiAmJiBkZWZpbmVkKCRydW5fdGVzdCkpIHsKIAkgICAgZG9fcnVuX3Rlc3Qgb3IgJGZhaWxlZCA9IDE7CiAJfQogCWVuZF9tb25pdG9yOwotCW5leHQgaWYgKCRmYWlsZWQpOworCWlmICgkZmFpbGVkKSB7CisJICAgIHByaW50X3RpbWVzOworCSAgICBuZXh0OworCX0KICAgICB9CiAKKyAgICBwcmludF90aW1lczsKKwogICAgIHN1Y2Nlc3MgJGk7CiB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvTWFrZWZpbGUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wb3dlcnBjL01ha2VmaWxlCmluZGV4IGY2ZmY5MGEuLjFkNWU3YWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvTWFrZWZpbGUKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9NYWtlZmlsZQpAQCAtMTMsNyArMTMsNyBAQAogCiBleHBvcnQgQ0MgQ0ZMQUdTCiAKLVRBUkdFVFMgPSBwbXUgY29weWxvb3BzIG1tIHRtIHByaW1pdGl2ZXMKK1RBUkdFVFMgPSBwbXUgY29weWxvb3BzIG1tIHRtIHByaW1pdGl2ZXMgc3RyaW5nbG9vcHMKIAogZW5kaWYKIApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9jb3B5bG9vcHMvLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvY29weWxvb3BzLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhMTkyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvY29weWxvb3BzLy5naXRpZ25vcmUKQEAgLTAsMCArMSw0IEBACitjb3B5dXNlcl82NAorY29weXVzZXJfcG93ZXI3CittZW1jcHlfNjQKK21lbWNweV9wb3dlcjcKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvbW0vLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvbW0vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDNhZGUwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9tbS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAoraHVnZXRsYl92c190aHBfdGVzdAorc3VicGFnZV9wcm90Cit0ZW1wZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9tbS9NYWtlZmlsZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvbW0vTWFrZWZpbGUKaW5kZXggMzU3Y2NiZC4uYTE0YzUzOCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9tbS9NYWtlZmlsZQorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wb3dlcnBjL21tL01ha2VmaWxlCkBAIC0xLDkgKzEsOSBAQAogbm9hcmc6CiAJJChNQUtFKSAtQyAuLi8KIAotUFJPR1MgOj0gaHVnZXRsYl92c190aHBfdGVzdAorUFJPR1MgOj0gaHVnZXRsYl92c190aHBfdGVzdCBzdWJwYWdlX3Byb3QKIAotYWxsOiAkKFBST0dTKQorYWxsOiAkKFBST0dTKSB0ZW1wZmlsZQogCiAkKFBST0dTKTogLi4vaGFybmVzcy5jCiAKQEAgLTEyLDcgKzEyLDEwIEBACiAJCS4vJCRQUk9HOyBcCiAJZG9uZTsKIAordGVtcGZpbGU6CisJZGQgaWY9L2Rldi96ZXJvIG9mPXRlbXBmaWxlIGJzPTY0ayBjb3VudD0xCisKIGNsZWFuOgotCXJtIC1mICQoUFJPR1MpCisJcm0gLWYgJChQUk9HUykgdGVtcGZpbGUKIAogLlBIT05ZOiBhbGwgcnVuX3Rlc3RzIGNsZWFuCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wb3dlcnBjL21tL3N1YnBhZ2VfcHJvdC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9tbS9zdWJwYWdlX3Byb3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDAxODBmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9tbS9zdWJwYWdlX3Byb3QuYwpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMi4xIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdvdWxkIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgorI2luY2x1ZGUgPHVjb250ZXh0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJ1dGlscy5oIgorCitjaGFyICpmaWxlX25hbWU7CisKK2ludCBpbl90ZXN0Owordm9sYXRpbGUgaW50IGZhdWx0ZWQ7Cit2b2xhdGlsZSB2b2lkICpkYXI7CitpbnQgZXJyb3JzOworCitzdGF0aWMgdm9pZCBzZWd2KGludCBzaWdudW0sIHNpZ2luZm9fdCAqaW5mbywgdm9pZCAqY3R4dF92KQoreworCXVjb250ZXh0X3QgKmN0eHQgPSAodWNvbnRleHRfdCAqKWN0eHRfdjsKKwlzdHJ1Y3QgcHRfcmVncyAqcmVncyA9IGN0eHQtPnVjX21jb250ZXh0LnJlZ3M7CisKKwlpZiAoIWluX3Rlc3QpIHsKKwkJZnByaW50ZihzdGRlcnIsICJTZWdmYXVsdCBvdXRzaWRlIG9mIHRlc3QgIVxuIik7CisJCWV4aXQoMSk7CisJfQorCisJZmF1bHRlZCA9IDE7CisJZGFyID0gKHZvaWQgKilyZWdzLT5kYXI7CisJcmVncy0+bmlwICs9IDQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkb19yZWFkKGNvbnN0IHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJaW50IHJldDsKKworCWFzbSB2b2xhdGlsZSgibHd6ICUwLDAoJTEpOyB0d2kgMCwlMCwwOyBpc3luYztcbiIKKwkJICAgICA6ICI9ciIgKHJldCkgOiAiciIgKGFkZHIpIDogIm1lbW9yeSIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG9fd3JpdGUoY29uc3Qgdm9sYXRpbGUgdm9pZCAqYWRkcikKK3sKKwlpbnQgdmFsID0gMHgxMjM0NTY3OworCisJYXNtIHZvbGF0aWxlKCJzdHcgJTAsMCglMSk7IHN5bmM7IFxuIgorCQkgICAgIDogOiAiciIgKHZhbCksICJyIiAoYWRkcikgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGVja19mYXVsdGVkKHZvaWQgKmFkZHIsIGxvbmcgcGFnZSwgbG9uZyBzdWJwYWdlLCBpbnQgd3JpdGUpCit7CisJaW50IHdhbnRfZmF1bHQgPSAoc3VicGFnZSA9PSAoKHBhZ2UgKyAzKSAlIDE2KSk7CisKKwlpZiAod3JpdGUpCisJCXdhbnRfZmF1bHQgfD0gKHN1YnBhZ2UgPT0gKChwYWdlICsgMSkgJSAxNikpOworCisJaWYgKGZhdWx0ZWQgIT0gd2FudF9mYXVsdCkgeworCQlwcmludGYoIkZhaWxlZCBhdCAweCVwIChwPSVsZCxzcD0lbGQsdz0lZCksIHdhbnQ9JXMsIGdvdD0lcyAhXG4iLAorCQkgICAgICAgYWRkciwgcGFnZSwgc3VicGFnZSwgd3JpdGUsCisJCSAgICAgICB3YW50X2ZhdWx0ID8gImZhdWx0IiA6ICJwYXNzIiwKKwkJICAgICAgIGZhdWx0ZWQgPyAiZmF1bHQiIDogInBhc3MiKTsKKwkJKytlcnJvcnM7CisJfQorCisJaWYgKGZhdWx0ZWQpIHsKKwkJaWYgKGRhciAhPSBhZGRyKSB7CisJCQlwcmludGYoIkZhdWx0IGV4cGVjdGVkIGF0IDB4JXAgYW5kIGhhcHBlbmVkIGF0IDB4JXAgIVxuIiwKKwkJCSAgICAgICBhZGRyLCBkYXIpOworCQl9CisJCWZhdWx0ZWQgPSAwOworCQlhc20gdm9sYXRpbGUoInN5bmMiIDogOiA6ICJtZW1vcnkiKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcnVuX3Rlc3Qodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXVuc2lnbmVkIGludCAqbWFwOworCWxvbmcgaSwgaiwgcGFnZXMsIGVycjsKKworCXBhZ2VzID0gc2l6ZSAvIDB4MTAwMDA7CisJbWFwID0gbWFsbG9jKHBhZ2VzICogNCk7CisJYXNzZXJ0KG1hcCk7CisKKwkvKgorCSAqIGZvciBlYWNoIHBhZ2UsIG1hcmsgc3VicGFnZSBpICUgMTYgcmVhZCBvbmx5IGFuZCBzdWJwYWdlCisJICogKGkgKyAzKSAlIDE2IGluYWNjZXNzaWJsZQorCSAqLworCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7CisJCW1hcFtpXSA9ICgweDQwMDAwMDAwID4+ICgoKGkgKyAxKSAqIDIpICUgMzIpKSB8CisJCQkoMHhjMDAwMDAwMCA+PiAoKChpICsgMykgKiAyKSAlIDMyKSk7CisJfQorCisJZXJyID0gc3lzY2FsbChfX05SX3N1YnBhZ2VfcHJvdCwgYWRkciwgc2l6ZSwgbWFwKTsKKwlpZiAoZXJyKSB7CisJCXBlcnJvcigic3VicGFnZV9wZXJtIik7CisJCXJldHVybiAxOworCX0KKwlmcmVlKG1hcCk7CisKKwlpbl90ZXN0ID0gMTsKKwllcnJvcnMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCAxNjsgaisrLCBhZGRyICs9IDB4MTAwMCkgeworCQkJZG9fcmVhZChhZGRyKTsKKwkJCWNoZWNrX2ZhdWx0ZWQoYWRkciwgaSwgaiwgMCk7CisJCQlkb193cml0ZShhZGRyKTsKKwkJCWNoZWNrX2ZhdWx0ZWQoYWRkciwgaSwgaiwgMSk7CisJCX0KKwl9CisKKwlpbl90ZXN0ID0gMDsKKwlpZiAoZXJyb3JzKSB7CisJCXByaW50ZigiJWQgZXJyb3JzIGRldGVjdGVkXG4iLCBlcnJvcnMpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHRlc3RfYW5vbih2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgYWxpZ247CisJc3RydWN0IHNpZ2FjdGlvbiBhY3QgPSB7CisJCS5zYV9zaWdhY3Rpb24gPSBzZWd2LAorCQkuc2FfZmxhZ3MgPSBTQV9TSUdJTkZPCisJfTsKKwl2b2lkICptYWxsb2NibG9jazsKKwl1bnNpZ25lZCBsb25nIG1hbGxvY3NpemU7CisKKwlpZiAoZ2V0cGFnZXNpemUoKSAhPSAweDEwMDAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiS2VybmVsIHBhZ2Ugc2l6ZSBtdXN0IGJlIDY0SyFcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlzaWdhY3Rpb24oU0lHU0VHViwgJmFjdCwgTlVMTCk7CisKKwltYWxsb2NzaXplID0gNCAqIDE2ICogMTAyNCAqIDEwMjQ7CisKKwlGQUlMX0lGKHBvc2l4X21lbWFsaWduKCZtYWxsb2NibG9jaywgNjQgKiAxMDI0LCBtYWxsb2NzaXplKSk7CisKKwlhbGlnbiA9ICh1bnNpZ25lZCBsb25nKW1hbGxvY2Jsb2NrOworCWlmIChhbGlnbiAmIDB4ZmZmZikKKwkJYWxpZ24gPSAoYWxpZ24gfCAweGZmZmYpICsgMTsKKworCW1hbGxvY2Jsb2NrID0gKHZvaWQgKilhbGlnbjsKKworCXByaW50ZigiYWxsb2NhdGVkIG1hbGxvYyBibG9jayBvZiAweCVseCBieXRlcyBhdCAweCVwXG4iLAorCSAgICAgICBtYWxsb2NzaXplLCBtYWxsb2NibG9jayk7CisKKwlwcmludGYoInRlc3RpbmcgbWFsbG9jIGJsb2NrLi4uXG4iKTsKKworCXJldHVybiBydW5fdGVzdChtYWxsb2NibG9jaywgbWFsbG9jc2l6ZSk7Cit9CisKK2ludCB0ZXN0X2ZpbGUodm9pZCkKK3sKKwlzdHJ1Y3Qgc2lnYWN0aW9uIGFjdCA9IHsKKwkJLnNhX3NpZ2FjdGlvbiA9IHNlZ3YsCisJCS5zYV9mbGFncyA9IFNBX1NJR0lORk8KKwl9OworCXZvaWQgKmZpbGVibG9jazsKKwlvZmZfdCBmaWxlc2l6ZTsKKwlpbnQgZmQ7CisKKwlmZCA9IG9wZW4oZmlsZV9uYW1lLCBPX1JEV1IpOworCWlmIChmZCA9PSAtMSkgeworCQlwZXJyb3IoImZhaWxlZCB0byBvcGVuIGZpbGUiKTsKKwkJcmV0dXJuIDE7CisJfQorCXNpZ2FjdGlvbihTSUdTRUdWLCAmYWN0LCBOVUxMKTsKKworCWZpbGVzaXplID0gbHNlZWsoZmQsIDAsIFNFRUtfRU5EKTsKKwlpZiAoZmlsZXNpemUgJiAweGZmZmYpCisJCWZpbGVzaXplICY9IH4weGZmZmZ1bDsKKworCWZpbGVibG9jayA9IG1tYXAoTlVMTCwgZmlsZXNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisJCQkgTUFQX1NIQVJFRCwgZmQsIDApOworCWlmIChmaWxlYmxvY2sgPT0gTUFQX0ZBSUxFRCkgeworCQlwZXJyb3IoImZhaWxlZCB0byBtYXAgZmlsZSIpOworCQlyZXR1cm4gMTsKKwl9CisJcHJpbnRmKCJhbGxvY2F0ZWQgJXMgZm9yIDB4JWx4IGJ5dGVzIGF0IDB4JXBcbiIsCisJICAgICAgIGZpbGVfbmFtZSwgZmlsZXNpemUsIGZpbGVibG9jayk7CisKKwlwcmludGYoInRlc3RpbmcgZmlsZSBtYXAuLi5cbiIpOworCisJcmV0dXJuIHJ1bl90ZXN0KGZpbGVibG9jaywgZmlsZXNpemUpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXRlc3RfaGFybmVzcyh0ZXN0X2Fub24sICJzdWJwYWdlX3Byb3RfYW5vbiIpOworCisJaWYgKGFyZ2MgPiAxKQorCQlmaWxlX25hbWUgPSBhcmd2WzFdOworCWVsc2UKKwkJZmlsZV9uYW1lID0gInRlbXBmaWxlIjsKKworCXRlc3RfaGFybmVzcyh0ZXN0X2ZpbGUsICJzdWJwYWdlX3Byb3RfZmlsZSIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wb3dlcnBjL3BtdS8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9wbXUvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzQ4ZjMzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9wbXUvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDMgQEAKK2NvdW50X2luc3RydWN0aW9ucworbDNfYmFua190ZXN0CitwZXJfZXZlbnRfZXhjbHVkZXMKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvcG11L2ViYi8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9wbXUvZWJiLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJiZGRiZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvcG11L2ViYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMjIgQEAKK3JlZ19hY2Nlc3NfdGVzdAorZXZlbnRfYXR0cmlidXRlc190ZXN0CitjeWNsZXNfdGVzdAorY3ljbGVzX3dpdGhfZnJlZXplX3Rlc3QKK3BtYzU2X292ZXJmbG93X3Rlc3QKK2ViYl92c19jcHVfZXZlbnRfdGVzdAorY3B1X2V2ZW50X3ZzX2ViYl90ZXN0CitjcHVfZXZlbnRfcGlubmVkX3ZzX2ViYl90ZXN0Cit0YXNrX2V2ZW50X3ZzX2ViYl90ZXN0Cit0YXNrX2V2ZW50X3Bpbm5lZF92c19lYmJfdGVzdAorbXVsdGlfZWJiX3Byb2NzX3Rlc3QKK211bHRpX2NvdW50ZXJfdGVzdAorcG1hZV9oYW5kbGluZ190ZXN0CitjbG9zZV9jbGVhcnNfcG1jY190ZXN0CitpbnN0cnVjdGlvbl9jb3VudF90ZXN0Citmb3JrX2NsZWFudXBfdGVzdAorZWJiX29uX2NoaWxkX3Rlc3QKK2ViYl9vbl93aWxsaW5nX2NoaWxkX3Rlc3QKK2JhY2tfdG9fYmFja19lYmJzX3Rlc3QKK2xvc3RfZXhjZXB0aW9uX3Rlc3QKK25vX2hhbmRsZXJfdGVzdAorY3ljbGVzX3dpdGhfbW1jcjJfdGVzdApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9wcmltaXRpdmVzLy5naXRpZ25vcmUgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wb3dlcnBjL3ByaW1pdGl2ZXMvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2M0ZTMxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9wcmltaXRpdmVzLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorbG9hZF91bmFsaWduZWRfemVyb3BhZApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9zdHJpbmdsb29wcy8uZ2l0aWdub3JlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9zdHJpbmdsb29wcy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNDNkYTcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wb3dlcnBjL3N0cmluZ2xvb3BzLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorbWVtY21wCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wb3dlcnBjL3N0cmluZ2xvb3BzL01ha2VmaWxlIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9zdHJpbmdsb29wcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDZkNzczCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9zdHJpbmdsb29wcy9NYWtlZmlsZQpAQCAtMCwwICsxLDIwIEBACisjIFRoZSBsb29wcyBhcmUgYWxsIDY0LWJpdCBjb2RlCitDRkxBR1MgKz0gLW02NAorQ0ZMQUdTICs9IC1JJChDVVJESVIpCisKK1BST0dTIDo9IG1lbWNtcAorRVhUUkFfU09VUkNFUyA6PSBtZW1jbXBfNjQuUyAuLi9oYXJuZXNzLmMKKworYWxsOiAkKFBST0dTKQorCiskKFBST0dTKTogJChFWFRSQV9TT1VSQ0VTKQorCitydW5fdGVzdHM6IGFsbAorCUAtZm9yIFBST0cgaW4gJChQUk9HUyk7IGRvIFwKKwkJLi8kJFBST0c7IFwKKwlkb25lOworCitjbGVhbjoKKwlybSAtZiAkKFBST0dTKSAqLm8KKworLlBIT05ZOiBhbGwgcnVuX3Rlc3RzIGNsZWFuCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wb3dlcnBjL3N0cmluZ2xvb3BzL2FzbS9wcGNfYXNtLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wb3dlcnBjL3N0cmluZ2xvb3BzL2FzbS9wcGNfYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFiZWNlOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvc3RyaW5nbG9vcHMvYXNtL3BwY19hc20uaApAQCAtMCwwICsxLDcgQEAKKyNpbmNsdWRlIDxwcGMtYXNtLmg+CisKKyNpZm5kZWYgcjEKKyNkZWZpbmUgcjEgc3AKKyNlbmRpZgorCisjZGVmaW5lIF9HTE9CQUwoQSkgRlVOQ19TVEFSVCh0ZXN0XyAjIyBBKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9zdHJpbmdsb29wcy9tZW1jbXAuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvc3RyaW5nbG9vcHMvbWVtY21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc0MTdkZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvc3RyaW5nbG9vcHMvbWVtY21wLmMKQEAgLTAsMCArMSwxMDMgQEAKKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICIuLi91dGlscy5oIgorCisjZGVmaW5lIFNJWkUgMjU2CisjZGVmaW5lIElURVJBVElPTlMgMTAwMDAKKworaW50IHRlc3RfbWVtY21wKGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMiwgc2l6ZV90IG4pOworCisvKiB0ZXN0IGFsbCBvZmZzZXRzIGFuZCBsZW5ndGhzICovCitzdGF0aWMgdm9pZCB0ZXN0X29uZShjaGFyICpzMSwgY2hhciAqczIpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemU7CisKKwlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IFNJWkU7IG9mZnNldCsrKSB7CisJCWZvciAoc2l6ZSA9IDA7IHNpemUgPCAoU0laRS1vZmZzZXQpOyBzaXplKyspIHsKKwkJCWludCB4LCB5OworCQkJdW5zaWduZWQgbG9uZyBpOworCisJCQl5ID0gbWVtY21wKHMxK29mZnNldCwgczIrb2Zmc2V0LCBzaXplKTsKKwkJCXggPSB0ZXN0X21lbWNtcChzMStvZmZzZXQsIHMyK29mZnNldCwgc2l6ZSk7CisKKwkJCWlmICgoKHggXiB5KSA8IDApICYmCS8qIFRyaWNrIHRvIGNvbXBhcmUgc2lnbiAqLworCQkJCSgoeCB8IHkpICE9IDApKSB7IC8qIGNoZWNrIGZvciB6ZXJvICovCisJCQkJcHJpbnRmKCJtZW1jbXAgcmV0dXJuZWQgJWQsIHNob3VsZCBoYXZlIHJldHVybmVkICVkIChvZmZzZXQgJWxkIHNpemUgJWxkKVxuIiwgeCwgeSwgb2Zmc2V0LCBzaXplKTsKKworCQkJCWZvciAoaSA9IG9mZnNldDsgaSA8IG9mZnNldCtzaXplOyBpKyspCisJCQkJCXByaW50ZigiJTAyeCAiLCBzMVtpXSk7CisJCQkJcHJpbnRmKCJcbiIpOworCisJCQkJZm9yIChpID0gb2Zmc2V0OyBpIDwgb2Zmc2V0K3NpemU7IGkrKykKKwkJCQkJcHJpbnRmKCIlMDJ4ICIsIHMyW2ldKTsKKwkJCQlwcmludGYoIlxuIik7CisJCQkJYWJvcnQoKTsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIGludCB0ZXN0Y2FzZSh2b2lkKQoreworCWNoYXIgKnMxOworCWNoYXIgKnMyOworCXVuc2lnbmVkIGxvbmcgaTsKKworCXMxID0gbWVtYWxpZ24oMTI4LCBTSVpFKTsKKwlpZiAoIXMxKSB7CisJCXBlcnJvcigibWVtYWxpZ24iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlzMiA9IG1lbWFsaWduKDEyOCwgU0laRSk7CisJaWYgKCFzMikgeworCQlwZXJyb3IoIm1lbWFsaWduIik7CisJCWV4aXQoMSk7CisJfQorCisJc3JhbmRvbSgxKTsKKworCWZvciAoaSA9IDA7IGkgPCBJVEVSQVRJT05TOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBqOworCQl1bnNpZ25lZCBsb25nIGNoYW5nZTsKKworCQlmb3IgKGogPSAwOyBqIDwgU0laRTsgaisrKQorCQkJczFbal0gPSByYW5kb20oKTsKKworCQltZW1jcHkoczIsIHMxLCBTSVpFKTsKKworCQkvKiBjaGFuZ2Ugb25lIGJ5dGUgKi8KKwkJY2hhbmdlID0gcmFuZG9tKCkgJSBTSVpFOworCQlzMltjaGFuZ2VdID0gcmFuZG9tKCkgJiAweGZmOworCisJCXRlc3Rfb25lKHMxLCBzMik7CisJfQorCisJc3JhbmRvbSgxKTsKKworCWZvciAoaSA9IDA7IGkgPCBJVEVSQVRJT05TOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBqOworCQl1bnNpZ25lZCBsb25nIGNoYW5nZTsKKworCQlmb3IgKGogPSAwOyBqIDwgU0laRTsgaisrKQorCQkJczFbal0gPSByYW5kb20oKTsKKworCQltZW1jcHkoczIsIHMxLCBTSVpFKTsKKworCQkvKiBjaGFuZ2UgbXVsdGlwbGUgYnl0ZXMsIDEvOCBvZiB0b3RhbCAqLworCQlmb3IgKGogPSAwOyBqIDwgU0laRSAvIDg7IGorKykgeworCQkJY2hhbmdlID0gcmFuZG9tKCkgJSBTSVpFOworCQkJczJbY2hhbmdlXSA9IHJhbmRvbSgpICYgMHhmZjsKKwkJfQorCisJCXRlc3Rfb25lKHMxLCBzMik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBtYWluKHZvaWQpCit7CisJcmV0dXJuIHRlc3RfaGFybmVzcyh0ZXN0Y2FzZSwgIm1lbWNtcCIpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy9zdHJpbmdsb29wcy9tZW1jbXBfNjQuUyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvc3RyaW5nbG9vcHMvbWVtY21wXzY0LlMKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uOWJjODdlNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvc3RyaW5nbG9vcHMvbWVtY21wXzY0LlMKQEAgLTAsMCArMSBAQAorLi4vLi4vLi4vLi4vLi4vYXJjaC9wb3dlcnBjL2xpYi9tZW1jbXBfNjQuUwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvdG0vLmdpdGlnbm9yZSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Bvd2VycGMvdG0vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2QwMmNjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcG93ZXJwYy90bS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEgQEAKK3RtLXJlc2NoZWQtZHNjcgpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4vY3B1czJ1c2Uuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9jcHVzMnVzZS5zaAppbmRleCBhYmUxNGI3Li5iYjk5Y2RlIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9jcHVzMnVzZS5zaAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9jcHVzMnVzZS5zaApAQCAtMjQsNyArMjQsNyBAQAogCiBuY3B1cz1gZ3JlcCAnXnByb2Nlc3NvcicgL3Byb2MvY3B1aW5mbyB8IHdjIC1sYAogaWRsZWNwdXM9YG1wc3RhdCB8IHRhaWwgLTEgfCBcCi0JYXdrIC12IG5jcHVzPSRuY3B1cyAneyBwcmludCBuY3B1cyAqICgkNyArICQxMikgLyAxMDAgfSdgCisJYXdrIC12IG5jcHVzPSRuY3B1cyAneyBwcmludCBuY3B1cyAqICgkNyArICRORikgLyAxMDAgfSdgCiBhd2sgLXYgbmNwdXM9JG5jcHVzIC12IGlkbGVjcHVzPSRpZGxlY3B1cyA8IC9kZXYvbnVsbCAnCiBCRUdJTiB7CiAJY3B1czJ1c2UgPSBpZGxlY3B1czsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS1yZWNoZWNrLXJjdS5zaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL2t2bS1yZWNoZWNrLXJjdS5zaAppbmRleCBkNmNjMDdmLi41NTllMDFhIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tcmVjaGVjay1yY3Uuc2gKKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLXJlY2hlY2stcmN1LnNoCkBAIC0zMCw2ICszMCw3IEBACiAJZWNobyBVbnJlYWRhYmxlIHJlc3VsdHMgZGlyZWN0b3J5OiAkaQogCWV4aXQgMQogZmkKKy4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4vZnVuY3Rpb25zLnNoCiAKIGNvbmZpZ2ZpbGU9YGVjaG8gJGkgfCBzZWQgLWUgJ3MvXi4qXC8vLydgCiBuZ3BzPWBncmVwIHZlcjogJGkvY29uc29sZS5sb2cgMj4gL2Rldi9udWxsIHwgdGFpbCAtMSB8IHNlZCAtZSAncy9eLiogdmVyOiAvLycgLWUgJ3MvIC4qJC8vJ2AKQEAgLTQ4LDQgKzQ5LDIxIEBACiAJCXRpdGxlPSIkdGl0bGUgKCRuZ3BzcHMgcGVyIHNlY29uZCkiCiAJZmkKIAllY2hvICR0aXRsZQorCW5jbG9zZWNhbGxzPWBncmVwIC0tYmluYXJ5LWZpbGVzPXRleHQgJ3RvcnR1cmU6IFJlYWRlciBCYXRjaCcgJGkvY29uc29sZS5sb2cgfCB0YWlsIC0xIHwgYXdrICd7Zm9yIChpPU5GLTg7aTw9TkY7aSsrKSBzdW0rPSRpOyB9IEVORCB7cHJpbnQgc3VtfSdgCisJaWYgdGVzdCAteiAiJG5jbG9zZWNhbGxzIgorCXRoZW4KKwkJZXhpdCAwCisJZmkKKwlpZiB0ZXN0ICIkbmNsb3NlY2FsbHMiIC1lcSAwCisJdGhlbgorCQlleGl0IDAKKwlmaQorCSMgQ29tcHV0ZSBudW1iZXIgb2YgY2xvc2UgY2FsbHMgcGVyIHRlbnRoIG9mIGFuIGhvdXIKKwluY2xvc2VjYWxsczEwPWBhd2sgLXYgbmNsb3NlY2FsbHM9JG5jbG9zZWNhbGxzIC12IGR1cj0kZHVyICdCRUdJTiB7IHByaW50IGludChuY2xvc2VjYWxscyAqIDM2MDAwIC8gZHVyKSB9JyA8IC9kZXYvbnVsbGAKKwlpZiB0ZXN0ICRuY2xvc2VjYWxsczEwIC1ndCA1IC1hICRuY2xvc2VjYWxscyAtZ3QgMQorCXRoZW4KKwkJcHJpbnRfYnVnICRuY2xvc2VjYWxscyAiUmVhZGVyIEJhdGNoIGNsb3NlIGNhbGxzIGluIiAkKCgkZHVyLzYwKSkgbWludXRlIHJ1bjogJGkKKwllbHNlCisJCXByaW50X3dhcm5pbmcgJG5jbG9zZWNhbGxzICJSZWFkZXIgQmF0Y2ggY2xvc2UgY2FsbHMgaW4iICQoKCRkdXIvNjApKSBtaW51dGUgcnVuOiAkaQorCWZpCiBmaQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4va3ZtLXRlc3QtMS1ydW4uc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tdGVzdC0xLXJ1bi5zaAppbmRleCA4Y2E5ZjIxLi41MjM2ZTA3IDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tdGVzdC0xLXJ1bi5zaAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9rdm0tdGVzdC0xLXJ1bi5zaApAQCAtOCw5ICs4LDkgQEAKICMKICMgVXNhZ2U6IGt2bS10ZXN0LTEtcnVuLnNoIGNvbmZpZyBidWlsZGRpciByZXNkaXIgbWludXRlcyBxZW11LWFyZ3MgYm9vdF9hcmdzCiAjCi0jIHFlbXUtYXJncyBkZWZhdWx0cyB0byAiLW5vZ3JhcGhpYyIsIGFsb25nIHdpdGggYXJndW1lbnRzIHNwZWNpZnlpbmcgdGhlCi0jCQkJbnVtYmVyIG9mIENQVXMgYW5kIG90aGVyIG9wdGlvbnMgZ2VuZXJhdGVkIGZyb20KLSMJCQl0aGUgdW5kZXJseWluZyBDUFUgYXJjaGl0ZWN0dXJlLgorIyBxZW11LWFyZ3MgZGVmYXVsdHMgdG8gIi1lbmFibGUta3ZtIC1zb3VuZGh3IHBjc3BrIC1ub2dyYXBoaWMiLCBhbG9uZyB3aXRoCisjCQkJYXJndW1lbnRzIHNwZWNpZnlpbmcgdGhlIG51bWJlciBvZiBDUFVzIGFuZCBvdGhlcgorIwkJCW9wdGlvbnMgZ2VuZXJhdGVkIGZyb20gdGhlIHVuZGVybHlpbmcgQ1BVIGFyY2hpdGVjdHVyZS4KICMgYm9vdF9hcmdzIGRlZmF1bHRzIHRvIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBwZXJfdmVyc2lvbl9ib290X3BhcmFtcwogIwkJCXNoZWxsIGZ1bmN0aW9uLgogIwpAQCAtMTM4LDcgKzEzOCw3IEBACiBmaQogCiAjIEdlbmVyYXRlIC1zbXAgcWVtdSBhcmd1bWVudC4KLXFlbXVfYXJncz0iLW5vZ3JhcGhpYyAkcWVtdV9hcmdzIgorcWVtdV9hcmdzPSItZW5hYmxlLWt2bSAtc291bmRodyBwY3NwayAtbm9ncmFwaGljICRxZW11X2FyZ3MiCiBjcHVfY291bnQ9YGNvbmZpZ05SX0NQVVMuc2ggJGNvbmZpZ190ZW1wbGF0ZWAKIGNwdV9jb3VudD1gY29uZmlnZnJhZ19ib290X2NwdXMgIiRib290X2FyZ3MiICIkY29uZmlnX3RlbXBsYXRlIiAiJGNwdV9jb3VudCJgCiB2Y3B1cz1gaWRlbnRpZnlfcWVtdV92Y3B1c2AKQEAgLTE2OCw2ICsxNjgsNyBAQAogCXRvdWNoICRyZXNkaXIvYnVpbGRvbmx5CiAJZXhpdCAwCiBmaQorZWNobyAiTk9URTogJFFFTVUgZWl0aGVyIGRpZCBub3QgcnVuIG9yIHdhcyBpbnRlcmFjdGl2ZSIgPiAkYnVpbGRkaXIvY29uc29sZS5sb2cKIGVjaG8gJFFFTVUgJHFlbXVfYXJncyAtbSA1MTIgLWtlcm5lbCAkcmVzZGlyL2J6SW1hZ2UgLWFwcGVuZCBcIiRxZW11X2FwcGVuZCAkYm9vdF9hcmdzXCIgPiAkcmVzZGlyL3FlbXUtY21kCiAoICRRRU1VICRxZW11X2FyZ3MgLW0gNTEyIC1rZXJuZWwgJHJlc2Rpci9iekltYWdlIC1hcHBlbmQgIiRxZW11X2FwcGVuZCAkYm9vdF9hcmdzIjsgZWNobyAkPyA+ICRyZXNkaXIvcWVtdS1yZXR2YWwgKSAmCiBxZW11X3BpZD0kIQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4vcGFyc2UtYnVpbGQuc2ggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9wYXJzZS1idWlsZC5zaAppbmRleCA0OTlkMWU1Li5hNmI1NzYyIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9wYXJzZS1idWlsZC5zaAorKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9wYXJzZS1idWlsZC5zaApAQCAtMjYsMTIgKzI2LDE1IEBACiAjCiAjIEF1dGhvcnM6IFBhdWwgRS4gTWNLZW5uZXkgPHBhdWxtY2tAbGludXgudm5ldC5pYm0uY29tPgogCi1UPSQxCitGPSQxCiB0aXRsZT0kMgorVD0vdG1wL3BhcnNlLWJ1aWxkLnNoLiQkCit0cmFwICdybSAtcmYgJFQnIDAKK21rZGlyICRUCiAKIC4gZnVuY3Rpb25zLnNoCiAKLWlmIGdyZXAgLXEgQ0MgPCAkVAoraWYgZ3JlcCAtcSBDQyA8ICRGCiB0aGVuCiAJOgogZWxzZQpAQCAtMzksMTggKzQyLDIxIEBACiAJZXhpdCAxCiBmaQogCi1pZiBncmVwIC1xICJlcnJvcjoiIDwgJFQKK2lmIGdyZXAgLXEgImVycm9yOiIgPCAkRgogdGhlbgogCXByaW50X2J1ZyAkdGl0bGUgYnVpbGQgZXJyb3JzOgotCWdyZXAgImVycm9yOiIgPCAkVAorCWdyZXAgImVycm9yOiIgPCAkRgogCWV4aXQgMgogZmkKLWV4aXQgMAogCi1pZiBlZ3JlcCAtcSAicmN1W14vXSpcLmMuKndhcm5pbmc6fHJjdS4qXC5oLip3YXJuaW5nOiIgPCAkVAorZ3JlcCB3YXJuaW5nOiA8ICRGID4gJFQvd2FybmluZ3MKK2dyZXAgImluY2x1ZGUvbGludXgvKnJjdSpcLmg6IiAkVC93YXJuaW5ncyA+ICRUL2h3YXJuaW5ncworZ3JlcCAia2VybmVsL3JjdS9bXi9dKjoiICRUL3dhcm5pbmdzID4gJFQvY3dhcm5pbmdzCitjYXQgJFQvaHdhcm5pbmdzICRUL2N3YXJuaW5ncyA+ICRUL3JjdXdhcm5pbmdzCitpZiB0ZXN0IC1zICRUL3JjdXdhcm5pbmdzCiB0aGVuCiAJcHJpbnRfd2FybmluZyAkdGl0bGUgYnVpbGQgZXJyb3JzOgotCWVncmVwICJyY3VbXi9dKlwuYy4qd2FybmluZzp8cmN1LipcLmguKndhcm5pbmc6IiA8ICRUCisJY2F0ICRUL3JjdXdhcm5pbmdzCiAJZXhpdCAyCiBmaQogZXhpdCAwCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9wYXJzZS1jb25zb2xlLnNoIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcmN1dG9ydHVyZS9iaW4vcGFyc2UtY29uc29sZS5zaAppbmRleCBmOTYyYmE0Li5kOGYzNWNmIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9yY3V0b3J0dXJlL2Jpbi9wYXJzZS1jb25zb2xlLnNoCisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3JjdXRvcnR1cmUvYmluL3BhcnNlLWNvbnNvbGUuc2gKQEAgLTM2LDcgKzM2LDcgQEAKIHRoZW4KIAlwcmludF93YXJuaW5nIENvbnNvbGUgb3V0cHV0IGNvbnRhaW5zIG51bCBieXRlcywgb2xkIHFlbXUgc3RpbGwgcnVubmluZz8KIGZpCi1lZ3JlcCAnQmFkbmVzc3xXQVJOSU5HOnxXYXJufEJVR3w9PT09PT09PT09PXxDYWxsIFRyYWNlOnxPb3BzOicgPCAkZmlsZSB8IGdyZXAgLXYgJ09ERUJVRzogJyB8IGdyZXAgLXYgJ1dhcm5pbmc6IHVuYWJsZSB0byBvcGVuIGFuIGluaXRpYWwgY29uc29sZScgPiAkVAorZWdyZXAgJ0JhZG5lc3N8V0FSTklORzp8V2FybnxCVUd8PT09PT09PT09PT18Q2FsbCBUcmFjZTp8T29wczp8U3RhbGwgZW5kZWQgYmVmb3JlIHN0YXRlIGR1bXAgc3RhcnQnIDwgJGZpbGUgfCBncmVwIC12ICdPREVCVUc6ICcgfCBncmVwIC12ICdXYXJuaW5nOiB1bmFibGUgdG8gb3BlbiBhbiBpbml0aWFsIGNvbnNvbGUnID4gJFQKIGlmIHRlc3QgLXMgJFQKIHRoZW4KIAlwcmludF93YXJuaW5nIEFzc2VydGlvbiBmYWlsdXJlIGluICRmaWxlICR0aXRsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdm0vcGFnZS10eXBlcy5jIGIvdG9vbHMvdm0vcGFnZS10eXBlcy5jCmluZGV4IDI2NGZiYzIuLjhiZGYxNmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3ZtL3BhZ2UtdHlwZXMuYworKysgYi90b29scy92bS9wYWdlLXR5cGVzLmMKQEAgLTEzMyw2ICsxMzMsNyBAQAogCVtLUEZfS1NNXQkJPSAieDprc20iLAogCVtLUEZfVEhQXQkJPSAidDp0aHAiLAogCVtLUEZfQkFMTE9PTl0JCT0gIm86YmFsbG9vbiIsCisJW0tQRl9aRVJPX1BBR0VdCQk9ICJ6Onplcm9fcGFnZSIsCiAKIAlbS1BGX1JFU0VSVkVEXQkJPSAicjpyZXNlcnZlZCIsCiAJW0tQRl9NTE9DS0VEXQkJPSAibTptbG9ja2VkIiwKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2FybS9hcmNoX3RpbWVyLmMgYi92aXJ0L2t2bS9hcm0vYXJjaF90aW1lci5jCmluZGV4IDFjMDc3MmIuLjZlNTRmMzUgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2FybS9hcmNoX3RpbWVyLmMKKysrIGIvdmlydC9rdm0vYXJtL2FyY2hfdGltZXIuYwpAQCAtMTUyLDcgKzE1Miw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlucyA9IGN5Y2xlY291bnRlcl9jeWMybnModGltZWNvdW50ZXItPmNjLCBjdmFsIC0gbm93KTsKKwlucyA9IGN5Y2xlY291bnRlcl9jeWMybnModGltZWNvdW50ZXItPmNjLCBjdmFsIC0gbm93LCB0aW1lY291bnRlci0+bWFzaywKKwkJCQkgJnRpbWVjb3VudGVyLT5mcmFjKTsKIAl0aW1lcl9hcm0odGltZXIsIG5zKTsKIH0KIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vYXN5bmNfcGYuYyBiL3ZpcnQva3ZtL2FzeW5jX3BmLmMKaW5kZXggNWZmN2Y3Zi4uNDQ2NjBhZSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vYXN5bmNfcGYuYworKysgYi92aXJ0L2t2bS9hc3luY19wZi5jCkBAIC04MCw3ICs4MCw3IEBACiAKIAltaWdodF9zbGVlcCgpOwogCi0Ja3ZtX2dldF91c2VyX3BhZ2VfaW8oTlVMTCwgbW0sIGFkZHIsIDEsIE5VTEwpOworCWdldF91c2VyX3BhZ2VzX3VubG9ja2VkKE5VTEwsIG1tLCBhZGRyLCAxLCAxLCAwLCBOVUxMKTsKIAlrdm1fYXN5bmNfcGFnZV9wcmVzZW50X3N5bmModmNwdSwgYXBmKTsKIAogCXNwaW5fbG9jaygmdmNwdS0+YXN5bmNfcGYubG9jayk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCAxY2M2ZTJlLi40NThiOWIxIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTExMjgsNDMgKzExMjgsNiBAQAogCXJldHVybiBfX2dldF91c2VyX3BhZ2VzKHRzaywgbW0sIHN0YXJ0LCAxLCBmbGFncywgcGFnZSwgTlVMTCwgTlVMTCk7CiB9CiAKLWludCBrdm1fZ2V0X3VzZXJfcGFnZV9pbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIHdyaXRlX2ZhdWx0LAotCQkJIHN0cnVjdCBwYWdlICoqcGFnZXApCi17Ci0JaW50IG5wYWdlczsKLQlpbnQgbG9ja2VkID0gMTsKLQlpbnQgZmxhZ3MgPSBGT0xMX1RPVUNIIHwgRk9MTF9IV1BPSVNPTiB8Ci0JCSAgICAocGFnZXAgPyBGT0xMX0dFVCA6IDApIHwKLQkJICAgICh3cml0ZV9mYXVsdCA/IEZPTExfV1JJVEUgOiAwKTsKLQotCS8qCi0JICogSWYgcmV0cnlpbmcgdGhlIGZhdWx0LCB3ZSBnZXQgaGVyZSAqbm90KiBoYXZpbmcgYWxsb3dlZCB0aGUgZmlsZW1hcAotCSAqIHRvIHdhaXQgb24gdGhlIHBhZ2UgbG9jay4gV2Ugc2hvdWxkIG5vdyBhbGxvdyB3YWl0aW5nIG9uIHRoZSBJTyB3aXRoCi0JICogdGhlIG1tYXAgc2VtYXBob3JlIHJlbGVhc2VkLgotCSAqLwotCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlucGFnZXMgPSBfX2dldF91c2VyX3BhZ2VzKHRzaywgbW0sIGFkZHIsIDEsIGZsYWdzLCBwYWdlcCwgTlVMTCwKLQkJCQkgICZsb2NrZWQpOwotCWlmICghbG9ja2VkKSB7Ci0JCVZNX0JVR19PTihucGFnZXMpOwotCi0JCWlmICghcGFnZXApCi0JCQlyZXR1cm4gMDsKLQotCQkvKgotCQkgKiBUaGUgcHJldmlvdXMgY2FsbCBoYXMgbm93IHdhaXRlZCBvbiB0aGUgSU8uIE5vdyB3ZSBjYW4KLQkJICogcmV0cnkgYW5kIGNvbXBsZXRlLiBQYXNzIFRSSUVEIHRvIGVuc3VyZSB3ZSBkbyBub3QgcmUKLQkJICogc2NoZWR1bGUgYXN5bmMgSU8gKHNlZSBlLmcuIGZpbGVtYXBfZmF1bHQpLgotCQkgKi8KLQkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCQlucGFnZXMgPSBfX2dldF91c2VyX3BhZ2VzKHRzaywgbW0sIGFkZHIsIDEsIGZsYWdzIHwgRk9MTF9UUklFRCwKLQkJCQkJICBwYWdlcCwgTlVMTCwgTlVMTCk7Ci0JfQotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIG5wYWdlczsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgY2hlY2tfdXNlcl9wYWdlX2h3cG9pc29uKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlpbnQgcmMsIGZsYWdzID0gRk9MTF9UT1VDSCB8IEZPTExfSFdQT0lTT04gfCBGT0xMX1dSSVRFOwpAQCAtMTIyNywxNSArMTE5MCwxMCBAQAogCQlucGFnZXMgPSBnZXRfdXNlcl9wYWdlX25vd2FpdChjdXJyZW50LCBjdXJyZW50LT5tbSwKIAkJCQkJICAgICAgYWRkciwgd3JpdGVfZmF1bHQsIHBhZ2UpOwogCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEJ5IG5vdyB3ZSBoYXZlIHRyaWVkIGd1cF9mYXN0LCBhbmQgcG9zc2libHkgYXN5bmNfcGYsIGFuZCB3ZQotCQkgKiBhcmUgY2VydGFpbmx5IG5vdCBhdG9taWMuIFRpbWUgdG8gcmV0cnkgdGhlIGd1cCwgYWxsb3dpbmcKLQkJICogbW1hcCBzZW1hcGhvcmUgdG8gYmUgcmVsaW5xdWlzaGVkIGluIHRoZSBjYXNlIG9mIElPLgotCQkgKi8KLQkJbnBhZ2VzID0ga3ZtX2dldF91c2VyX3BhZ2VfaW8oY3VycmVudCwgY3VycmVudC0+bW0sIGFkZHIsCi0JCQkJCSAgICAgIHdyaXRlX2ZhdWx0LCBwYWdlKTsKLQl9CisJfSBlbHNlCisJCW5wYWdlcyA9IF9fZ2V0X3VzZXJfcGFnZXNfdW5sb2NrZWQoY3VycmVudCwgY3VycmVudC0+bW0sIGFkZHIsIDEsCisJCQkJCQkgICB3cml0ZV9mYXVsdCwgMCwgcGFnZSwKKwkJCQkJCSAgIEZPTExfVE9VQ0h8Rk9MTF9IV1BPSVNPTik7CiAJaWYgKG5wYWdlcyAhPSAxKQogCQlyZXR1cm4gbnBhZ2VzOwogCg==